ZGlmZiAtLWdpdCBhL0FuZHJvaWQubWsgYi9BbmRyb2lkLm1rCmluZGV4IDNhMzE2OWMuLjhmY2FjOTEgMTAwNjQ0Ci0tLSBhL0FuZHJvaWQubWsKKysrIGIvQW5kcm9pZC5tawpAQCAtMzEsNiArMzEsMTAgQEAKICMgU28gd2UgZmlyc3QgYnVpbGQgdGhlIGZyYW1ld29yayBhcyBhIG1vbm9saXRoaWMgc3RhdGljIGxpYnJhcnkgdGhlbiBzcGxpdCBpdAogIyB1cCBpbnRvIHNtYWxsZXIgcGllY2VzLgogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBlbWJlZGRlZCBidWlsZHMgdXNlIG5vdGhpbmcgaW4gZnJhbWV3b3Jrcy9iYXNlCitpZm5lcSAoJChBTkRST0lEX0JVSUxEX0VNQkVEREVEKSx0cnVlKQorCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAogIyBGUkFNRVdPUktTX0JBU0VfU1VCRElSUyBjb21lcyBmcm9tIGJ1aWxkL2NvcmUvcGF0aG1hcC5tawpAQCAtMTA1LDkgKzEwOSw5IEBACiAJY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JSW50ZW50UmVjZWl2ZXIuYWlkbCBcCiAJY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JSW50ZW50U2VuZGVyLmFpZGwgXAogCWNvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSU9uUHJpbWFyeUNsaXBDaGFuZ2VkTGlzdGVuZXIuYWlkbCBcCi0JY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JQW5vbnltb3VzU3luY0FkYXB0ZXIuYWlkbCBcCiAJY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JU3luY0FkYXB0ZXIuYWlkbCBcCiAJY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JU3luY0NvbnRleHQuYWlkbCBcCisJY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JU3luY1NlcnZpY2VBZGFwdGVyLmFpZGwgXAogCWNvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSVN5bmNTdGF0dXNPYnNlcnZlci5haWRsIFwKIAljb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0lQYWNrYWdlRGF0YU9ic2VydmVyLmFpZGwgXAogCWNvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vSVBhY2thZ2VEZWxldGVPYnNlcnZlci5haWRsIFwKQEAgLTI2NCw2ICsyNjgsOSBAQAogCXRlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JUGhvbmVTdGF0ZUxpc3RlbmVyLmFpZGwgXAogCXRlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JUGhvbmVTdWJJbmZvLmFpZGwgXAogCXRlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JVGVsZXBob255LmFpZGwgXAorCXRlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lci5haWRsIFwKKwl0ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVRoaXJkUGFydHlDYWxsUHJvdmlkZXIuYWlkbCBcCisJdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lUaGlyZFBhcnR5Q2FsbFNlcnZpY2UuYWlkbCBcCiAJdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lTbXMuYWlkbCBcCiAJdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lUZWxlcGhvbnlSZWdpc3RyeS5haWRsIFwKIAl0ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVdhcFB1c2hNYW5hZ2VyLmFpZGwgXApAQCAtMjg2LDcgKzI5Myw3IEBACiAKIExPQ0FMX01PRFVMRSA6PSBmcmFtZXdvcmstYmFzZQogCi1MT0NBTF9KQVJfRVhDTFVERV9GSUxFUyA6PSBub25lCitMT0NBTF9STVRZUEVERUZTIDo9IHRydWUKIAogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19KQVZBX0xJQlJBUlkpCiAKQEAgLTc4NSwzICs3OTIsNSBAQAogaWZlcSAoLCQoT05FX1NIT1RfTUFLRUZJTEUpKQogaW5jbHVkZSAkKGNhbGwgZmlyc3QtbWFrZWZpbGVzLXVuZGVyLCQoTE9DQUxfUEFUSCkpCiBlbmRpZgorCitlbmRpZiAjIEFORFJPSURfQlVJTERfRU1CRURERUQKZGlmZiAtLWdpdCBhL0NsZWFuU3BlYy5tayBiL0NsZWFuU3BlYy5tawppbmRleCBjZmE4YmU5Li4yZmExOTVjIDEwMDY0NAotLS0gYS9DbGVhblNwZWMubWsKKysrIGIvQ2xlYW5TcGVjLm1rCkBAIC0xNzEsNiArMTcxLDcgQEAKICQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoT1VUX0RJUikvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvZnJhbWV3b3JrLWJhc2VfaW50ZXJtZWRpYXRlcy9zcmMvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvKQogJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChPVVRfRElSKS90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9mcmFtZXdvcmstYmFzZV9pbnRlcm1lZGlhdGVzL3NyYy9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvKQogJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChPVVRfRElSKS90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9mcmFtZXdvcmstYmFzZV9pbnRlcm1lZGlhdGVzL3NyYy9wYWNrYWdlcy9zZXJ2aWNlcy9Qcm94eS8pCiskKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKE9VVF9ESVIpL3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2ZyYW1ld29yay1iYXNlX2ludGVybWVkaWF0ZXMpCiAkKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKE9VVF9ESVIpL3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2ZyYW1ld29yay1iYXNlX2ludGVybWVkaWF0ZXMvc3JjL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L0lQcmludGVyRGlzY292ZXJ5U2Vzc2lvbk9ic2VydmVyLiopCiAkKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKE9VVF9ESVIpL3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2ZyYW1ld29yay1iYXNlX2ludGVybWVkaWF0ZXMvc3JjL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L0lQcmludGVyRGlzY292ZXJ5U2Vzc2lvbkNsaWVudC4qKQogJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChPVVRfRElSKS90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9mcmFtZXdvcmstYmFzZV9pbnRlcm1lZGlhdGVzL3NyYy9jb3JlL2phdmEvYW5kcm9pZC9vcy9JQmF0dGVyeSopCmRpZmYgLS1naXQgYS9hcGkvY3VycmVudC50eHQgYi9hcGkvY3VycmVudC50eHQKaW5kZXggOGU2OTU5Mi4uZjY2MDExZSAxMDA2NDQKLS0tIGEvYXBpL2N1cnJlbnQudHh0CisrKyBiL2FwaS9jdXJyZW50LnR4dApAQCAtOSw2ICs5LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNDRVNTX0NIRUNLSU5fUFJPUEVSVElFUyA9ICJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX0NIRUNLSU5fUFJPUEVSVElFUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDQ0VTU19DT0FSU0VfTE9DQVRJT04gPSAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19DT0FSU0VfTE9DQVRJT04iOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ0NFU1NfRklORV9MT0NBVElPTiA9ICJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX0ZJTkVfTE9DQVRJT04iOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ0NFU1NfSU5QVVRfRkxJTkdFUiA9ICJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX0lOUFVUX0ZMSU5HRVIiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ0NFU1NfTE9DQVRJT05fRVhUUkFfQ09NTUFORFMgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19MT0NBVElPTl9FWFRSQV9DT01NQU5EUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDQ0VTU19NT0NLX0xPQ0FUSU9OID0gImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfTU9DS19MT0NBVElPTiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDQ0VTU19ORVRXT1JLX1NUQVRFID0gImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfTkVUV09SS19TVEFURSI7CkBAIC00OTcsNiArNDk4LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBmYXN0U2Nyb2xsT3ZlcmxheVBvc2l0aW9uID0gMTY4NDM1Nzg7IC8vIDB4MTAxMDMzYQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGZhc3RTY3JvbGxQcmV2aWV3QmFja2dyb3VuZExlZnQgPSAxNjg0MzU3NTsgLy8gMHgxMDEwMzM3CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZmFzdFNjcm9sbFByZXZpZXdCYWNrZ3JvdW5kUmlnaHQgPSAxNjg0MzU3NjsgLy8gMHgxMDEwMzM4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZmFzdFNjcm9sbFN0eWxlID0gMTY4NDM3NjM7IC8vIDB4MTAxMDNmMwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGZhc3RTY3JvbGxUZXh0Q29sb3IgPSAxNjg0MzYwOTsgLy8gMHgxMDEwMzU5CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZmFzdFNjcm9sbFRodW1iRHJhd2FibGUgPSAxNjg0MzU3NDsgLy8gMHgxMDEwMzM2CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZmFzdFNjcm9sbFRyYWNrRHJhd2FibGUgPSAxNjg0MzU3NzsgLy8gMHgxMDEwMzM5CkBAIC01MjIsNiArNTI0LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBmb3JtYXQxMkhvdXIgPSAxNjg0MzcyMjsgLy8gMHgxMDEwM2NhCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZm9ybWF0MjRIb3VyID0gMTY4NDM3MjM7IC8vIDB4MTAxMDNjYgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGZyYWdtZW50ID0gMTY4NDM0OTE7IC8vIDB4MTAxMDJlMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGZyYWdtZW50QnJlYWRDcnVtYnNTdHlsZSA9IDE2ODQzNzYyOyAvLyAweDEwMTAzZjIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBmcmFnbWVudENsb3NlRW50ZXJBbmltYXRpb24gPSAxNjg0MzQ5NTsgLy8gMHgxMDEwMmU3CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZnJhZ21lbnRDbG9zZUV4aXRBbmltYXRpb24gPSAxNjg0MzQ5NjsgLy8gMHgxMDEwMmU4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZnJhZ21lbnRGYWRlRW50ZXJBbmltYXRpb24gPSAxNjg0MzQ5NzsgLy8gMHgxMDEwMmU5CkBAIC0xMjA0LDYgKzEyMDcsOCBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHdpbmRvd0JhY2tncm91bmQgPSAxNjg0MjgzNjsgLy8gMHgxMDEwMDU0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgd2luZG93Q2xvc2VPblRvdWNoT3V0c2lkZSA9IDE2ODQzNjExOyAvLyAweDEwMTAzNWIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB3aW5kb3dDb250ZW50T3ZlcmxheSA9IDE2ODQyODQxOyAvLyAweDEwMTAwNTkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB3aW5kb3dDb250ZW50VHJhbnNpdGlvbk1hbmFnZXIgPSAxNjg0Mzc2NTsgLy8gMHgxMDEwM2Y1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgd2luZG93Q29udGVudFRyYW5zaXRpb25zID0gMTY4NDM3NjQ7IC8vIDB4MTAxMDNmNAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHdpbmRvd0Rpc2FibGVQcmV2aWV3ID0gMTY4NDMyOTg7IC8vIDB4MTAxMDIyMgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHdpbmRvd0VuYWJsZVNwbGl0VG91Y2ggPSAxNjg0MzU0MzsgLy8gMHgxMDEwMzE3CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgd2luZG93RW50ZXJBbmltYXRpb24gPSAxNjg0MjkzMjsgLy8gMHgxMDEwMGI0CkBAIC0xODA3LDYgKzE4MTIsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX05vVGl0bGVCYXJfRnVsbHNjcmVlbiA9IDE2OTczODMxOyAvLyAweDEwMzAwMDcKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9Ob1RpdGxlQmFyX092ZXJsYXlBY3Rpb25Nb2RlcyA9IDE2OTczOTMwOyAvLyAweDEwMzAwNmEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9QYW5lbCA9IDE2OTczOTEzOyAvLyAweDEwMzAwNTkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9RdWFudHVtID0gMTY5NzQzMTg7IC8vIDB4MTAzMDFlZQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX1RyYW5zbHVjZW50ID0gMTY5NzM4Mzk7IC8vIDB4MTAzMDAwZgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX1RyYW5zbHVjZW50X05vVGl0bGVCYXIgPSAxNjk3Mzg0MDsgLy8gMHgxMDMwMDEwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfVHJhbnNsdWNlbnRfTm9UaXRsZUJhcl9GdWxsc2NyZWVuID0gMTY5NzM4NDE7IC8vIDB4MTAzMDAxMQpAQCAtMTg2Myw2ICsxODY5LDggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRGV2aWNlRGVmYXVsdF9Ecm9wRG93bkl0ZW1fU3Bpbm5lciA9IDE2OTc0MTc4OyAvLyAweDEwMzAxNjIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRGV2aWNlRGVmYXVsdF9FZGl0VGV4dCA9IDE2OTc0MTU0OyAvLyAweDEwMzAxNGEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRGV2aWNlRGVmYXVsdF9FeHBhbmRhYmxlTGlzdFZpZXcgPSAxNjk3NDE1NTsgLy8gMHgxMDMwMTRiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0RldmljZURlZmF1bHRfRmFzdFNjcm9sbCA9IDE2OTc0MzE2OyAvLyAweDEwMzAxZWMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRGV2aWNlRGVmYXVsdF9GcmFnbWVudEJyZWFkQ3J1bWJzID0gMTY5NzQzMTE7IC8vIDB4MTAzMDFlNwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0dyaWRWaWV3ID0gMTY5NzQxNTY7IC8vIDB4MTAzMDE0YwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0hvcml6b250YWxTY3JvbGxWaWV3ID0gMTY5NzQxNzE7IC8vIDB4MTAzMDE1YgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0ltYWdlQnV0dG9uID0gMTY5NzQxNTc7IC8vIDB4MTAzMDE0ZApAQCAtMTg5Niw2ICsxOTA0LDggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9Ecm9wRG93bkl0ZW1fU3Bpbm5lciA9IDE2OTc0MjMzOyAvLyAweDEwMzAxOTkKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9FZGl0VGV4dCA9IDE2OTc0MjA2OyAvLyAweDEwMzAxN2UKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9FeHBhbmRhYmxlTGlzdFZpZXcgPSAxNjk3NDIwNzsgLy8gMHgxMDMwMTdmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0RldmljZURlZmF1bHRfTGlnaHRfRmFzdFNjcm9sbCA9IDE2OTc0MzE3OyAvLyAweDEwMzAxZWQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRGV2aWNlRGVmYXVsdF9MaWdodF9GcmFnbWVudEJyZWFkQ3J1bWJzID0gMTY5NzQzMTI7IC8vIDB4MTAzMDFlOAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0dyaWRWaWV3ID0gMTY5NzQyMDg7IC8vIDB4MTAzMDE4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0hvcml6b250YWxTY3JvbGxWaWV3ID0gMTY5NzQyMjY7IC8vIDB4MTAzMDE5MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9EZXZpY2VEZWZhdWx0X0xpZ2h0X0ltYWdlQnV0dG9uID0gMTY5NzQyMDk7IC8vIDB4MTAzMDE4MQpAQCAtMTk1Miw2ICsxOTYyLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfRHJvcERvd25JdGVtX1NwaW5uZXIgPSAxNjk3Mzg2ODsgLy8gMHgxMDMwMDJjCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0VkaXRUZXh0ID0gMTY5NzM4NTk7IC8vIDB4MTAzMDAyMwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9FeHBhbmRhYmxlTGlzdFZpZXcgPSAxNjk3Mzg2MDsgLy8gMHgxMDMwMDI0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0Zhc3RTY3JvbGwgPSAxNjk3NDMxMzsgLy8gMHgxMDMwMWU5CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0ZyYWdtZW50QnJlYWRDcnVtYnMgPSAxNjk3Mzk2MTsgLy8gMHgxMDMwMDg5CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0dhbGxlcnkgPSAxNjk3Mzg3NzsgLy8gMHgxMDMwMDM1CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0dyaWRWaWV3ID0gMTY5NzM4NzQ7IC8vIDB4MTAzMDAzMgpAQCAtMTk4Myw2ICsxOTk0LDggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfSG9sb19Ecm9wRG93bkl0ZW1fU3Bpbm5lciA9IDE2OTczOTk1OyAvLyAweDEwMzAwYWIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfSG9sb19FZGl0VGV4dCA9IDE2OTczOTcxOyAvLyAweDEwMzAwOTMKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfSG9sb19FeHBhbmRhYmxlTGlzdFZpZXcgPSAxNjk3Mzk3MjsgLy8gMHgxMDMwMDk0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0hvbG9fRmFzdFNjcm9sbCA9IDE2OTc0MzE0OyAvLyAweDEwMzAxZWEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfSG9sb19GcmFnbWVudEJyZWFkQ3J1bWJzID0gMTY5NzQzMDk7IC8vIDB4MTAzMDFlNQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0dyaWRWaWV3ID0gMTY5NzM5NzM7IC8vIDB4MTAzMDA5NQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0hvcml6b250YWxTY3JvbGxWaWV3ID0gMTY5NzM5ODg7IC8vIDB4MTAzMDBhNAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0ltYWdlQnV0dG9uID0gMTY5NzM5NzQ7IC8vIDB4MTAzMDA5NgpAQCAtMjAxNiw2ICsyMDI5LDggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfSG9sb19MaWdodF9Ecm9wRG93bkl0ZW1fU3Bpbm5lciA9IDE2OTc0MDQxOyAvLyAweDEwMzAwZDkKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfSG9sb19MaWdodF9FZGl0VGV4dCA9IDE2OTc0MDE0OyAvLyAweDEwMzAwYmUKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfSG9sb19MaWdodF9FeHBhbmRhYmxlTGlzdFZpZXcgPSAxNjk3NDAxNTsgLy8gMHgxMDMwMGJmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X0hvbG9fTGlnaHRfRmFzdFNjcm9sbCA9IDE2OTc0MzE1OyAvLyAweDEwMzAxZWIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfSG9sb19MaWdodF9GcmFnbWVudEJyZWFkQ3J1bWJzID0gMTY5NzQzMTA7IC8vIDB4MTAzMDFlNgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0xpZ2h0X0dyaWRWaWV3ID0gMTY5NzQwMTY7IC8vIDB4MTAzMDBjMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0xpZ2h0X0hvcml6b250YWxTY3JvbGxWaWV3ID0gMTY5NzQwMzQ7IC8vIDB4MTAzMDBkMgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9Ib2xvX0xpZ2h0X0ltYWdlQnV0dG9uID0gMTY5NzQwMTc7IC8vIDB4MTAzMDBjMQpAQCAtMjQzNCwxMSArMjQ0OSwyMyBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLk9iamVjdCBldmFsdWF0ZShmbG9hdCwgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCk7CiAgIH0KIAorICBwdWJsaWMgY2xhc3MgRmxvYXRBcnJheUV2YWx1YXRvciBpbXBsZW1lbnRzIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3IgeworICAgIGN0b3IgcHVibGljIEZsb2F0QXJyYXlFdmFsdWF0b3IoKTsKKyAgICBjdG9yIHB1YmxpYyBGbG9hdEFycmF5RXZhbHVhdG9yKGZsb2F0W10pOworICAgIG1ldGhvZCBwdWJsaWMgZmxvYXRbXSBldmFsdWF0ZShmbG9hdCwgZmxvYXRbXSwgZmxvYXRbXSk7CisgIH0KKwogICBwdWJsaWMgY2xhc3MgRmxvYXRFdmFsdWF0b3IgaW1wbGVtZW50cyBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yIHsKICAgICBjdG9yIHB1YmxpYyBGbG9hdEV2YWx1YXRvcigpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkZsb2F0IGV2YWx1YXRlKGZsb2F0LCBqYXZhLmxhbmcuTnVtYmVyLCBqYXZhLmxhbmcuTnVtYmVyKTsKICAgfQogCisgIHB1YmxpYyBjbGFzcyBJbnRBcnJheUV2YWx1YXRvciBpbXBsZW1lbnRzIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3IgeworICAgIGN0b3IgcHVibGljIEludEFycmF5RXZhbHVhdG9yKCk7CisgICAgY3RvciBwdWJsaWMgSW50QXJyYXlFdmFsdWF0b3IoaW50W10pOworICAgIG1ldGhvZCBwdWJsaWMgaW50W10gZXZhbHVhdGUoZmxvYXQsIGludFtdLCBpbnRbXSk7CisgIH0KKwogICBwdWJsaWMgY2xhc3MgSW50RXZhbHVhdG9yIGltcGxlbWVudHMgYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvciB7CiAgICAgY3RvciBwdWJsaWMgSW50RXZhbHVhdG9yKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuSW50ZWdlciBldmFsdWF0ZShmbG9hdCwgamF2YS5sYW5nLkludGVnZXIsIGphdmEubGFuZy5JbnRlZ2VyKTsKQEAgLTI1MDcsMTggKzI1MzQsMzkgQEAKICAgICBjdG9yIHB1YmxpYyBPYmplY3RBbmltYXRvcigpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5PYmplY3QgZ2V0VGFyZ2V0KCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZBcmdiKGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcsIGludC4uLik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZBcmdiKFQsIGFuZHJvaWQudXRpbC5Qcm9wZXJ0eTxULCBqYXZhLmxhbmcuSW50ZWdlcj4sIGludC4uLik7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZGbG9hdChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBmbG9hdC4uLik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZGbG9hdChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmdyYXBoaWNzLlBhdGgpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIG9mRmxvYXQoVCwgYW5kcm9pZC51dGlsLlByb3BlcnR5PFQsIGphdmEubGFuZy5GbG9hdD4sIGZsb2F0Li4uKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZkZsb2F0KFQsIGFuZHJvaWQudXRpbC5Qcm9wZXJ0eTxULCBqYXZhLmxhbmcuRmxvYXQ+LCBhbmRyb2lkLnV0aWwuUHJvcGVydHk8VCwgamF2YS5sYW5nLkZsb2F0PiwgYW5kcm9pZC5ncmFwaGljcy5QYXRoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZkludChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQuLi4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIG9mSW50KGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZJbnQoVCwgYW5kcm9pZC51dGlsLlByb3BlcnR5PFQsIGphdmEubGFuZy5JbnRlZ2VyPiwgaW50Li4uKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZkludChULCBhbmRyb2lkLnV0aWwuUHJvcGVydHk8VCwgamF2YS5sYW5nLkludGVnZXI+LCBhbmRyb2lkLnV0aWwuUHJvcGVydHk8VCwgamF2YS5sYW5nLkludGVnZXI+LCBhbmRyb2lkLmdyYXBoaWNzLlBhdGgpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIG9mTXVsdGlGbG9hdChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBmbG9hdFtdW10pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIG9mTXVsdGlGbG9hdChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmdyYXBoaWNzLlBhdGgpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIG9mTXVsdGlGbG9hdChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlQ29udmVydGVyPFQsIGZsb2F0W10+LCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yPFQ+LCBULi4uKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZk11bHRpSW50KGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcsIGludFtdW10pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIG9mTXVsdGlJbnQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5ncmFwaGljcy5QYXRoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZk11bHRpSW50KGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVDb252ZXJ0ZXI8VCwgaW50W10+LCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yPFQ+LCBULi4uKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZk9iamVjdChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yLCBqYXZhLmxhbmcuT2JqZWN0Li4uKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZk9iamVjdChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlQ29udmVydGVyPGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnRGLCA/PiwgYW5kcm9pZC5ncmFwaGljcy5QYXRoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZk9iamVjdChULCBhbmRyb2lkLnV0aWwuUHJvcGVydHk8VCwgVj4sIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3I8Vj4sIFYuLi4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIG9mT2JqZWN0KFQsIGFuZHJvaWQudXRpbC5Qcm9wZXJ0eTxULCBQPiwgYW5kcm9pZC5hbmltYXRpb24uVHlwZUNvbnZlcnRlcjxWLCBQPiwgYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvcjxWPiwgVi4uLik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3Igb2ZPYmplY3QoVCwgYW5kcm9pZC51dGlsLlByb3BlcnR5PFQsIFY+LCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlQ29udmVydGVyPGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnRGLCBWPiwgYW5kcm9pZC5ncmFwaGljcy5QYXRoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciBvZlByb3BlcnR5VmFsdWVzSG9sZGVyKGphdmEubGFuZy5PYmplY3QsIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyLi4uKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QXV0b0NhbmNlbChib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UHJvcGVydHkoYW5kcm9pZC51dGlsLlByb3BlcnR5KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UHJvcGVydHlOYW1lKGphdmEubGFuZy5TdHJpbmcpOwogICB9CiAKKyAgcHVibGljIGNsYXNzIFBvaW50RkV2YWx1YXRvciBpbXBsZW1lbnRzIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3IgeworICAgIGN0b3IgcHVibGljIFBvaW50RkV2YWx1YXRvcigpOworICAgIGN0b3IgcHVibGljIFBvaW50RkV2YWx1YXRvcihhbmRyb2lkLmdyYXBoaWNzLlBvaW50Rik7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLlBvaW50RiBldmFsdWF0ZShmbG9hdCwgYW5kcm9pZC5ncmFwaGljcy5Qb2ludEYsIGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnRGKTsKKyAgfQorCiAgIHB1YmxpYyBjbGFzcyBQcm9wZXJ0eVZhbHVlc0hvbGRlciBpbXBsZW1lbnRzIGphdmEubGFuZy5DbG9uZWFibGUgewogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXIgY2xvbmUoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0UHJvcGVydHlOYW1lKCk7CkBAIC0yNTI4LDggKzI1NzYsMjAgQEAKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlciBvZkludChhbmRyb2lkLnV0aWwuUHJvcGVydHk8PywgamF2YS5sYW5nLkludGVnZXI+LCBpbnQuLi4pOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIG9mS2V5ZnJhbWUoamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5hbmltYXRpb24uS2V5ZnJhbWUuLi4pOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIG9mS2V5ZnJhbWUoYW5kcm9pZC51dGlsLlByb3BlcnR5LCBhbmRyb2lkLmFuaW1hdGlvbi5LZXlmcmFtZS4uLik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZNdWx0aUZsb2F0KGphdmEubGFuZy5TdHJpbmcsIGZsb2F0W11bXSk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZNdWx0aUZsb2F0KGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZNdWx0aUZsb2F0KGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVDb252ZXJ0ZXI8ViwgZmxvYXRbXT4sIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3I8Vj4sIFYuLi4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlGbG9hdChqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlQ29udmVydGVyPFQsIGZsb2F0W10+LCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yPFQ+LCBhbmRyb2lkLmFuaW1hdGlvbi5LZXlmcmFtZS4uLik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZNdWx0aUludChqYXZhLmxhbmcuU3RyaW5nLCBpbnRbXVtdKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlciBvZk11bHRpSW50KGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZNdWx0aUludChqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlQ29udmVydGVyPFYsIGludFtdPiwgYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvcjxWPiwgVi4uLik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZNdWx0aUludChqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlQ29udmVydGVyPFQsIGludFtdPiwgYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvcjxUPiwgYW5kcm9pZC5hbmltYXRpb24uS2V5ZnJhbWUuLi4pOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIG9mT2JqZWN0KGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3IsIGphdmEubGFuZy5PYmplY3QuLi4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIG9mT2JqZWN0KGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVDb252ZXJ0ZXI8YW5kcm9pZC5ncmFwaGljcy5Qb2ludEYsID8+LCBhbmRyb2lkLmdyYXBoaWNzLlBhdGgpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyIG9mT2JqZWN0KGFuZHJvaWQudXRpbC5Qcm9wZXJ0eSwgYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvcjxWPiwgVi4uLik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZPYmplY3QoYW5kcm9pZC51dGlsLlByb3BlcnR5PD8sIFY+LCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlQ29udmVydGVyPFQsIFY+LCBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yPFQ+LCBULi4uKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlciBvZk9iamVjdChhbmRyb2lkLnV0aWwuUHJvcGVydHk8PywgVj4sIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVDb252ZXJ0ZXI8YW5kcm9pZC5ncmFwaGljcy5Qb2ludEYsIFY+LCBhbmRyb2lkLmdyYXBoaWNzLlBhdGgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb252ZXJ0ZXIoYW5kcm9pZC5hbmltYXRpb24uVHlwZUNvbnZlcnRlcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEV2YWx1YXRvcihhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0RmxvYXRWYWx1ZXMoZmxvYXQuLi4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRJbnRWYWx1ZXMoaW50Li4uKTsKQEAgLTI1NDEsNiArMjYwMSw3IEBACiAKICAgcHVibGljIGNsYXNzIFJlY3RFdmFsdWF0b3IgaW1wbGVtZW50cyBhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yIHsKICAgICBjdG9yIHB1YmxpYyBSZWN0RXZhbHVhdG9yKCk7CisgICAgY3RvciBwdWJsaWMgUmVjdEV2YWx1YXRvcihhbmRyb2lkLmdyYXBoaWNzLlJlY3QpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5SZWN0IGV2YWx1YXRlKGZsb2F0LCBhbmRyb2lkLmdyYXBoaWNzLlJlY3QsIGFuZHJvaWQuZ3JhcGhpY3MuUmVjdCk7CiAgIH0KIApAQCAtMjU1Nyw2ICsyNjE4LDEyIEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBmbG9hdCBnZXRJbnRlcnBvbGF0aW9uKGZsb2F0KTsKICAgfQogCisgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBUeXBlQ29udmVydGVyIHsKKyAgICBjdG9yIHB1YmxpYyBUeXBlQ29udmVydGVyKGphdmEubGFuZy5DbGFzczxUPiwgamF2YS5sYW5nLkNsYXNzPFY+KTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IFYgY29udmVydChUKTsKKyAgICBtZXRob2QgcHVibGljIFQgY29udmVydEJhY2soVik7CisgIH0KKwogICBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIFR5cGVFdmFsdWF0b3IgewogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgVCBldmFsdWF0ZShmbG9hdCwgVCwgVCk7CiAgIH0KQEAgLTI1NzUsNiArMjY0Miw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldFN0YXJ0RGVsYXkoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyW10gZ2V0VmFsdWVzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzUnVubmluZygpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYW5pbWF0aW9uLlZhbHVlQW5pbWF0b3Igb2ZBcmdiKGludC4uLik7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uVmFsdWVBbmltYXRvciBvZkZsb2F0KGZsb2F0Li4uKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFuaW1hdGlvbi5WYWx1ZUFuaW1hdG9yIG9mSW50KGludC4uLik7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hbmltYXRpb24uVmFsdWVBbmltYXRvciBvZk9iamVjdChhbmRyb2lkLmFuaW1hdGlvbi5UeXBlRXZhbHVhdG9yLCBqYXZhLmxhbmcuT2JqZWN0Li4uKTsKQEAgLTI2MDcsNiArMjY3NSwxMiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuYW5ub3RhdGlvbiB7CiAKKyAgcHVibGljIGFic3RyYWN0IGNsYXNzIE5vbk51bGwgaW1wbGVtZW50cyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uIHsKKyAgfQorCisgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBOdWxsYWJsZSBpbXBsZW1lbnRzIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24geworICB9CisKICAgcHVibGljIGFic3RyYWN0IGNsYXNzIFN1cHByZXNzTGludCBpbXBsZW1lbnRzIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24gewogICB9CiAKQEAgLTI3NTYsNiArMjgzMCw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldENhbGxpbmdQYWNrYWdlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Q2hhbmdpbmdDb25maWd1cmF0aW9ucygpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUgZ2V0Q29tcG9uZW50TmFtZSgpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC50cmFuc2l0aW9uLlNjZW5lIGdldENvbnRlbnRTY2VuZSgpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb25NYW5hZ2VyIGdldENvbnRlbnRUcmFuc2l0aW9uTWFuYWdlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LlZpZXcgZ2V0Q3VycmVudEZvY3VzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5GcmFnbWVudE1hbmFnZXIgZ2V0RnJhZ21lbnRNYW5hZ2VyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50IGdldEludGVudCgpOwpAQCAtMjg2MSw2ICsyOTM3LDcgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgcmVwb3J0RnVsbHlEcmF3bigpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiByZXF1ZXN0V2luZG93RmVhdHVyZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBydW5PblVpVGhyZWFkKGphdmEubGFuZy5SdW5uYWJsZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENvbnRlbnRUcmFuc2l0aW9uTWFuYWdlcihhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbk1hbmFnZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb250ZW50VmlldyhpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb250ZW50VmlldyhhbmRyb2lkLnZpZXcuVmlldyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENvbnRlbnRWaWV3KGFuZHJvaWQudmlldy5WaWV3LCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLkxheW91dFBhcmFtcyk7CkBAIC0yODgyLDcgKzI5NTksNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBzZXRTZWNvbmRhcnlQcm9ncmVzcyhpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUaXRsZShqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VGl0bGUoaW50KTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VGl0bGVDb2xvcihpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCB2b2lkIHNldFRpdGxlQ29sb3IoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgc2V0Vm9sdW1lQ29udHJvbFN0cmVhbShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzaG91bGRVcFJlY3JlYXRlVGFzayhhbmRyb2lkLmNvbnRlbnQuSW50ZW50KTsKQEAgLTMxNjUsNiArMzI0Miw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5BbGVydERpYWxvZy5CdWlsZGVyIHNldFNpbmdsZUNob2ljZUl0ZW1zKGFuZHJvaWQud2lkZ2V0Lkxpc3RBZGFwdGVyLCBpbnQsIGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nLkJ1aWxkZXIgc2V0VGl0bGUoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nLkJ1aWxkZXIgc2V0VGl0bGUoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5BbGVydERpYWxvZy5CdWlsZGVyIHNldFZpZXcoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nLkJ1aWxkZXIgc2V0VmlldyhhbmRyb2lkLnZpZXcuVmlldyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5BbGVydERpYWxvZyBzaG93KCk7CiAgIH0KQEAgLTM2MDAsNiArMzY3OCw3IEBACiAgICAgY3RvciBwdWJsaWMgRnJhZ21lbnRCcmVhZENydW1icyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgRnJhZ21lbnRCcmVhZENydW1icyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgRnJhZ21lbnRCcmVhZENydW1icyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBGcmFnbWVudEJyZWFkQ3J1bWJzKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQmFja1N0YWNrQ2hhbmdlZCgpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgdm9pZCBvbkxheW91dChib29sZWFuLCBpbnQsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBY3Rpdml0eShhbmRyb2lkLmFwcC5BY3Rpdml0eSk7CkBAIC0zODg2LDYgKzM5NjUsNyBAQAogICAgIGN0b3IgcHVibGljIE1lZGlhUm91dGVCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIE1lZGlhUm91dGVCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIE1lZGlhUm91dGVCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgTWVkaWFSb3V0ZUJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFJvdXRlVHlwZXMoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25BdHRhY2hlZFRvV2luZG93KCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uRGV0YWNoZWRGcm9tV2luZG93KCk7CkBAIC01NzUzLDYgKzU4MzMsOCBAQAogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5vcy5CdW5kbGUgY2FsbChhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQnVuZGxlKTsKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgdm9pZCBjYW5jZWxTeW5jKGFuZHJvaWQubmV0LlVyaSk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBjYW5jZWxTeW5jKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBjYW5jZWxTeW5jKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGNhbmNlbFN5bmMoYW5kcm9pZC5jb250ZW50LlN5bmNSZXF1ZXN0KTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQubmV0LlVyaSBjYW5vbmljYWxpemUoYW5kcm9pZC5uZXQuVXJpKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGludCBkZWxldGUoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nW10pOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGRlcHJlY2F0ZWQgYW5kcm9pZC5jb250ZW50LlN5bmNJbmZvIGdldEN1cnJlbnRTeW5jKCk7CkBAIC01NzYxLDE0ICs1ODQzLDE4IEBACiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRNYXN0ZXJTeW5jQXV0b21hdGljYWxseSgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LlVyaVBlcm1pc3Npb24+IGdldE91dGdvaW5nUGVyc2lzdGVkVXJpUGVybWlzc2lvbnMoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmNvbnRlbnQuUGVyaW9kaWNTeW5jPiBnZXRQZXJpb2RpY1N5bmNzKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LlBlcmlvZGljU3luYz4gZ2V0UGVyaW9kaWNTeW5jcyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmNvbnRlbnQuVXJpUGVybWlzc2lvbj4gZ2V0UGVyc2lzdGVkVXJpUGVybWlzc2lvbnMoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRTdHJlYW1UeXBlcyhhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuY29udGVudC5TeW5jQWRhcHRlclR5cGVbXSBnZXRTeW5jQWRhcHRlclR5cGVzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRTeW5jQXV0b21hdGljYWxseShhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBnZXRUeXBlKGFuZHJvaWQubmV0LlVyaSk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBhbmRyb2lkLm5ldC5VcmkgaW5zZXJ0KGFuZHJvaWQubmV0LlVyaSwgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXMpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTZXJ2aWNlQWN0aXZlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU3luY0FjdGl2ZShhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTeW5jQWN0aXZlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU3luY1BlbmRpbmcoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU3luY1BlbmRpbmcoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2UoYW5kcm9pZC5uZXQuVXJpLCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZShhbmRyb2lkLm5ldC5VcmksIGFuZHJvaWQuZGF0YWJhc2UuQ29udGVudE9ic2VydmVyLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRGaWxlRGVzY3JpcHRvciBvcGVuQXNzZXRGaWxlRGVzY3JpcHRvcihhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmcpIHRocm93cyBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKQEAgLTU3OTAsNiArNTg3Niw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCByZXF1ZXN0U3luYyhhbmRyb2lkLmNvbnRlbnQuU3luY1JlcXVlc3QpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgc2V0SXNTeW5jYWJsZShhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGphdmEubGFuZy5TdHJpbmcsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRNYXN0ZXJTeW5jQXV0b21hdGljYWxseShib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIHNldFNlcnZpY2VBY3RpdmUoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgc2V0U3luY0F1dG9tYXRpY2FsbHkoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgdm9pZCBzdGFydFN5bmMoYW5kcm9pZC5uZXQuVXJpLCBhbmRyb2lkLm9zLkJ1bmRsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHRha2VQZXJzaXN0YWJsZVVyaVBlcm1pc3Npb24oYW5kcm9pZC5uZXQuVXJpLCBpbnQpOwpAQCAtNTk3Niw2ICs2MDYzLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCSU5EX05PVF9GT1JFR1JPVU5EID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQklORF9XQUlWRV9QUklPUklUWSA9IDMyOyAvLyAweDIwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEJMVUVUT09USF9TRVJWSUNFID0gImJsdWV0b290aCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENBTUVSQV9TRVJWSUNFID0gImNhbWVyYSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENBUFRJT05JTkdfU0VSVklDRSA9ICJjYXB0aW9uaW5nIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ0xJUEJPQVJEX1NFUlZJQ0UgPSAiY2xpcGJvYXJkIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09OTkVDVElWSVRZX1NFUlZJQ0UgPSAiY29ubmVjdGl2aXR5IjsKQEAgLTY3MzMsNyArNjgyMSw5IEBACiAgICAgZmllbGQgcHVibGljIGZpbmFsIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCBhY2NvdW50OwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGF1dGhvcml0eTsKICAgICBmaWVsZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5vcy5CdW5kbGUgZXh0cmFzOworICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU2VydmljZTsKICAgICBmaWVsZCBwdWJsaWMgZmluYWwgbG9uZyBwZXJpb2Q7CisgICAgZmllbGQgcHVibGljIGZpbmFsIGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lIHNlcnZpY2U7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgUmVjZWl2ZXJDYWxsTm90QWxsb3dlZEV4Y2VwdGlvbiBleHRlbmRzIGFuZHJvaWQudXRpbC5BbmRyb2lkUnVudGltZUV4Y2VwdGlvbiB7CkBAIC02ODQ5LDExICs2OTM5LDEzIEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCBhY2NvdW50OwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGF1dGhvcml0eTsKKyAgICBmaWVsZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUgc2VydmljZTsKICAgICBmaWVsZCBwdWJsaWMgZmluYWwgbG9uZyBzdGFydFRpbWU7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgU3luY1JlcXVlc3QgaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgewogICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNFeHBlZGl0ZWQoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yIENSRUFUT1I7CiAgIH0KQEAgLTY4NjgsNyArNjk2MCwxMCBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LlN5bmNSZXF1ZXN0LkJ1aWxkZXIgc2V0SWdub3JlU2V0dGluZ3MoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuU3luY1JlcXVlc3QuQnVpbGRlciBzZXRNYW51YWwoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuU3luY1JlcXVlc3QuQnVpbGRlciBzZXROb1JldHJ5KGJvb2xlYW4pOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LlN5bmNSZXF1ZXN0LkJ1aWxkZXIgc2V0UHJpb3JpdHkoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5TeW5jUmVxdWVzdC5CdWlsZGVyIHNldFN5bmNBZGFwdGVyKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuU3luY1JlcXVlc3QuQnVpbGRlciBzZXRTeW5jQWRhcHRlcihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuU3luY1JlcXVlc3QuQnVpbGRlciBzZXRUcmFuc2ZlclNpemUobG9uZywgbG9uZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuU3luY1JlcXVlc3QuQnVpbGRlciBzeW5jT25jZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LlN5bmNSZXF1ZXN0LkJ1aWxkZXIgc3luY1BlcmlvZGljKGxvbmcsIGxvbmcpOwogICB9CkBAIC02ODk2LDYgKzY5OTEsMTMgQEAKICAgICBmaWVsZCBwdWJsaWMgYm9vbGVhbiB0b29NYW55UmV0cmllczsKICAgfQogCisgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTeW5jU2VydmljZSBleHRlbmRzIGFuZHJvaWQuYXBwLlNlcnZpY2UgeworICAgIGN0b3IgcHVibGljIFN5bmNTZXJ2aWNlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLklCaW5kZXIgb25CaW5kKGFuZHJvaWQuY29udGVudC5JbnRlbnQpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblBlcmZvcm1TeW5jKGFuZHJvaWQub3MuQnVuZGxlLCBhbmRyb2lkLmNvbnRlbnQuU3luY1Jlc3VsdCk7CisgICAgbWV0aG9kIHByb3RlY3RlZCBib29sZWFuIHBhcmFsbGVsU3luY3NFbmFibGVkKCk7CisgIH0KKwogICBwdWJsaWMgY2xhc3MgU3luY1N0YXRzIGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKICAgICBjdG9yIHB1YmxpYyBTeW5jU3RhdHMoKTsKICAgICBjdG9yIHB1YmxpYyBTeW5jU3RhdHMoYW5kcm9pZC5vcy5QYXJjZWwpOwpAQCAtNzU1OSw2ICs3NjYxLDcgQEAKICAgICBtZXRob2QgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Q29sb3JGb3JTdGF0ZShpbnRbXSwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXREZWZhdWx0Q29sb3IoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNPcGFxdWUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNTdGF0ZWZ1bCgpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3QgdmFsdWVPZihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdCB3aXRoQWxwaGEoaW50KTsKQEAgLTg3NDgsNiArODg1MSw3IEBACiAgICAgY3RvciBwdWJsaWMgR2VzdHVyZU92ZXJsYXlWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBHZXN0dXJlT3ZlcmxheVZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEdlc3R1cmVPdmVybGF5VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBHZXN0dXJlT3ZlcmxheVZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkT25HZXN0dXJlTGlzdGVuZXIoYW5kcm9pZC5nZXN0dXJlLkdlc3R1cmVPdmVybGF5Vmlldy5Pbkdlc3R1cmVMaXN0ZW5lcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkZE9uR2VzdHVyZVBlcmZvcm1lZExpc3RlbmVyKGFuZHJvaWQuZ2VzdHVyZS5HZXN0dXJlT3ZlcmxheVZpZXcuT25HZXN0dXJlUGVyZm9ybWVkTGlzdGVuZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRPbkdlc3R1cmluZ0xpc3RlbmVyKGFuZHJvaWQuZ2VzdHVyZS5HZXN0dXJlT3ZlcmxheVZpZXcuT25HZXN0dXJpbmdMaXN0ZW5lcik7CkBAIC05MjE2LDYgKzkzMjAsOSBAQAogICBwdWJsaWMgY2xhc3MgQ29sb3JNYXRyaXhDb2xvckZpbHRlciBleHRlbmRzIGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JGaWx0ZXIgewogICAgIGN0b3IgcHVibGljIENvbG9yTWF0cml4Q29sb3JGaWx0ZXIoYW5kcm9pZC5ncmFwaGljcy5Db2xvck1hdHJpeCk7CiAgICAgY3RvciBwdWJsaWMgQ29sb3JNYXRyaXhDb2xvckZpbHRlcihmbG9hdFtdKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JNYXRyaXggZ2V0Q29sb3JNYXRyaXgoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29sb3JNYXRyaXgoYW5kcm9pZC5ncmFwaGljcy5Db2xvck1hdHJpeCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENvbG9yTWF0cml4KGZsb2F0W10pOwogICB9CiAKICAgcHVibGljIGNsYXNzIENvbXBvc2VQYXRoRWZmZWN0IGV4dGVuZHMgYW5kcm9pZC5ncmFwaGljcy5QYXRoRWZmZWN0IHsKQEAgLTkyNTMsNiArOTM2MCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSlBFRyA9IDI1NjsgLy8gMHgxMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVjE2ID0gMTY7IC8vIDB4MTAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVjIxID0gMTc7IC8vIDB4MTEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSQVdfU0VOU09SID0gMzI7IC8vIDB4MjAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSR0JfNTY1ID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5LTk9XTiA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFlVVl80MjBfODg4ID0gMzU7IC8vIDB4MjMKQEAgLTkyOTAsNiArOTM5OCwxMCBAQAogCiAgIHB1YmxpYyBjbGFzcyBMaWdodGluZ0NvbG9yRmlsdGVyIGV4dGVuZHMgYW5kcm9pZC5ncmFwaGljcy5Db2xvckZpbHRlciB7CiAgICAgY3RvciBwdWJsaWMgTGlnaHRpbmdDb2xvckZpbHRlcihpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Q29sb3JBZGQoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRDb2xvck11bHRpcGx5KCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENvbG9yQWRkKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENvbG9yTXVsdGlwbHkoaW50KTsKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBMaW5lYXJHcmFkaWVudCBleHRlbmRzIGFuZHJvaWQuZ3JhcGhpY3MuU2hhZGVyIHsKQEAgLTk2MDAsNiArOTcxMiw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHRvZ2dsZUludmVyc2VGaWxsVHlwZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB0cmFuc2Zvcm0oYW5kcm9pZC5ncmFwaGljcy5NYXRyaXgsIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHRyYW5zZm9ybShhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHRyaW0oZmxvYXQsIGZsb2F0LCBmbG9hdCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHRyaW0oZmxvYXQsIGZsb2F0LCBmbG9hdCwgYW5kcm9pZC5ncmFwaGljcy5QYXRoKTsKICAgfQogCiAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUGF0aC5EaXJlY3Rpb24gZXh0ZW5kcyBqYXZhLmxhbmcuRW51bSB7CkBAIC05NzY0LDYgKzk4NzgsMTAgQEAKIAogICBwdWJsaWMgY2xhc3MgUG9ydGVyRHVmZkNvbG9yRmlsdGVyIGV4dGVuZHMgYW5kcm9pZC5ncmFwaGljcy5Db2xvckZpbHRlciB7CiAgICAgY3RvciBwdWJsaWMgUG9ydGVyRHVmZkNvbG9yRmlsdGVyKGludCwgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmLk1vZGUpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldENvbG9yKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmYuTW9kZSBnZXRNb2RlKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENvbG9yKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE1vZGUoYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmLk1vZGUpOwogICB9CiAKICAgcHVibGljIGNsYXNzIFBvcnRlckR1ZmZYZmVybW9kZSBleHRlbmRzIGFuZHJvaWQuZ3JhcGhpY3MuWGZlcm1vZGUgewpAQCAtMTAxOTEsOCArMTAzMDksMTAgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgZHJhdyhhbmRyb2lkLmdyYXBoaWNzLkNhbnZhcyk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0T3BhY2l0eSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5HcmFkaWVudERyYXdhYmxlLk9yaWVudGF0aW9uIGdldE9yaWVudGF0aW9uKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG9uU3RhdGVDaGFuZ2UoaW50W10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBbHBoYShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb2xvcihpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDb2xvcihhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29sb3JGaWx0ZXIoYW5kcm9pZC5ncmFwaGljcy5Db2xvckZpbHRlcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENvbG9ycyhpbnRbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENvcm5lclJhZGlpKGZsb2F0W10pOwpAQCAtMTAyMDQsNyArMTAzMjQsOSBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTaGFwZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTaXplKGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U3Ryb2tlKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U3Ryb2tlKGludCwgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFN0cm9rZShpbnQsIGludCwgZmxvYXQsIGZsb2F0KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U3Ryb2tlKGludCwgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdCwgZmxvYXQsIGZsb2F0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VXNlTGV2ZWwoYm9vbGVhbik7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTElORSA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJTkVBUl9HUkFESUVOVCA9IDA7IC8vIDB4MApAQCAtMTAyNDksNiArMTAzNzEsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldElkKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZMYXllcnMoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRPcGFjaXR5KCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0UGFkZGluZ01vZGUoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgaW52YWxpZGF0ZURyYXdhYmxlKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzY2hlZHVsZURyYXdhYmxlKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUsIGphdmEubGFuZy5SdW5uYWJsZSwgbG9uZyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEFscGhhKGludCk7CkBAIC0xMDI1Nyw3ICsxMDM4MCwxMCBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRJZChpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldExheWVySW5zZXQoaW50LCBpbnQsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRPcGFjaXR5KGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFBhZGRpbmdNb2RlKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHVuc2NoZWR1bGVEcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlLCBqYXZhLmxhbmcuUnVubmFibGUpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBRERJTkdfTU9ERV9ORVNUID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFERElOR19NT0RFX1NUQUNLID0gMTsgLy8gMHgxCiAgIH0KIAogICBwdWJsaWMgY2xhc3MgTGV2ZWxMaXN0RHJhd2FibGUgZXh0ZW5kcyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlQ29udGFpbmVyIHsKQEAgLTEwODYwLDYgKzEwOTg2LDQwMiBAQAogCiB9CiAKK3BhY2thZ2UgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyIHsKKworICBwdWJsaWMgY2xhc3MgQ2FtZXJhQWNjZXNzRXhjZXB0aW9uIGV4dGVuZHMgYW5kcm9pZC51dGlsLkFuZHJvaWRFeGNlcHRpb24geworICAgIGN0b3IgcHVibGljIENhbWVyYUFjY2Vzc0V4Y2VwdGlvbihpbnQpOworICAgIGN0b3IgcHVibGljIENhbWVyYUFjY2Vzc0V4Y2VwdGlvbihpbnQsIGphdmEubGFuZy5TdHJpbmcpOworICAgIGN0b3IgcHVibGljIENhbWVyYUFjY2Vzc0V4Y2VwdGlvbihpbnQsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5UaHJvd2FibGUpOworICAgIGN0b3IgcHVibGljIENhbWVyYUFjY2Vzc0V4Y2VwdGlvbihpbnQsIGphdmEubGFuZy5UaHJvd2FibGUpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgaW50IGdldFJlYXNvbigpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTUVSQV9ESVNBQkxFRCA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTUVSQV9ESVNDT05ORUNURUQgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQU1FUkFfRVJST1IgPSAzOyAvLyAweDMKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBjbGFzcyBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MgZXh0ZW5kcyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEgeworICAgIG1ldGhvZCBwdWJsaWMgVCBnZXQoYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleTxUPik7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5PD8+PiBnZXRBdmFpbGFibGVDYXB0dXJlUmVxdWVzdEtleXMoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXk8Pz4+IGdldEF2YWlsYWJsZUNhcHR1cmVSZXN1bHRLZXlzKCk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUVfQVZBSUxBQkxFX0FOVElCQU5ESU5HX01PREVTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FFX0FWQUlMQUJMRV9UQVJHRVRfRlBTX1JBTkdFUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BRV9DT01QRU5TQVRJT05fUkFOR0U7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUVfQ09NUEVOU0FUSU9OX1NURVA7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUZfQVZBSUxBQkxFX01PREVTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FWQUlMQUJMRV9FRkZFQ1RTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FWQUlMQUJMRV9TQ0VORV9NT0RFUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BVkFJTEFCTEVfVklERU9fU1RBQklMSVpBVElPTl9NT0RFUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BV0JfQVZBSUxBQkxFX01PREVTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX01BWF9SRUdJT05TOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBGTEFTSF9JTkZPX0FWQUlMQUJMRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUw7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IEpQRUdfQVZBSUxBQkxFX1RIVU1CTkFJTF9TSVpFUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19GQUNJTkc7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IExFTlNfSU5GT19BVkFJTEFCTEVfQVBFUlRVUkVTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0lORk9fQVZBSUxBQkxFX0ZJTFRFUl9ERU5TSVRJRVM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IExFTlNfSU5GT19BVkFJTEFCTEVfRk9DQUxfTEVOR1RIUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19JTkZPX0FWQUlMQUJMRV9PUFRJQ0FMX1NUQUJJTElaQVRJT047CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IExFTlNfSU5GT19IWVBFUkZPQ0FMX0RJU1RBTkNFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0lORk9fTUlOSU1VTV9GT0NVU19ESVNUQU5DRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19JTkZPX1NIQURJTkdfTUFQX1NJWkU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFJFUVVFU1RfTUFYX05VTV9PVVRQVVRfU1RSRUFNUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0NBTEVSX0FWQUlMQUJMRV9GT1JNQVRTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTQ0FMRVJfQVZBSUxBQkxFX0pQRUdfTUlOX0RVUkFUSU9OUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0NBTEVSX0FWQUlMQUJMRV9KUEVHX1NJWkVTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTQ0FMRVJfQVZBSUxBQkxFX01BWF9ESUdJVEFMX1pPT007CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNDQUxFUl9BVkFJTEFCTEVfUFJPQ0VTU0VEX01JTl9EVVJBVElPTlM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNDQUxFUl9BVkFJTEFCTEVfUFJPQ0VTU0VEX1NJWkVTOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTRU5TT1JfQkFTRV9HQUlOX0ZBQ1RPUjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX0lORk9fQUNUSVZFX0FSUkFZX1NJWkU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNFTlNPUl9JTkZPX0VYUE9TVVJFX1RJTUVfUkFOR0U7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNFTlNPUl9JTkZPX01BWF9GUkFNRV9EVVJBVElPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX0lORk9fUEhZU0lDQUxfU0laRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX0lORk9fU0VOU0lUSVZJVFlfUkFOR0U7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNFTlNPUl9NQVhfQU5BTE9HX1NFTlNJVElWSVRZOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTRU5TT1JfT1JJRU5UQVRJT047CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNUQVRJU1RJQ1NfSU5GT19BVkFJTEFCTEVfRkFDRV9ERVRFQ1RfTU9ERVM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNUQVRJU1RJQ1NfSU5GT19NQVhfRkFDRV9DT1VOVDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgVE9ORU1BUF9NQVhfQ1VSVkVfUE9JTlRTOworICB9CisKKyAgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBDYW1lcmFEZXZpY2UgaW1wbGVtZW50cyBqYXZhLmxhbmcuQXV0b0Nsb3NlYWJsZSB7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBpbnQgY2FwdHVyZShhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlcXVlc3QsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UuQ2FwdHVyZUxpc3RlbmVyLCBhbmRyb2lkLm9zLkhhbmRsZXIpIHRocm93cyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQWNjZXNzRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IGNhcHR1cmVCdXJzdChqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlcXVlc3Q+LCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlLkNhcHR1cmVMaXN0ZW5lciwgYW5kcm9pZC5vcy5IYW5kbGVyKSB0aHJvd3MgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgY2xvc2UoKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgY29uZmlndXJlT3V0cHV0cyhqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLnZpZXcuU3VyZmFjZT4pIHRocm93cyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQWNjZXNzRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhcHR1cmVSZXF1ZXN0LkJ1aWxkZXIgY3JlYXRlQ2FwdHVyZVJlcXVlc3QoaW50KSB0aHJvd3MgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgZmx1c2goKSB0aHJvd3MgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgZ2V0SWQoKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBzZXRSZXBlYXRpbmdCdXJzdChqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlcXVlc3Q+LCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlLkNhcHR1cmVMaXN0ZW5lciwgYW5kcm9pZC5vcy5IYW5kbGVyKSB0aHJvd3MgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBzZXRSZXBlYXRpbmdSZXF1ZXN0KGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYXB0dXJlUmVxdWVzdCwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZS5DYXB0dXJlTGlzdGVuZXIsIGFuZHJvaWQub3MuSGFuZGxlcikgdGhyb3dzIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFBY2Nlc3NFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHN0b3BSZXBlYXRpbmcoKSB0aHJvd3MgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgd2FpdFVudGlsSWRsZSgpIHRocm93cyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQWNjZXNzRXhjZXB0aW9uOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRFTVBMQVRFX1BSRVZJRVcgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBURU1QTEFURV9SRUNPUkQgPSAzOyAvLyAweDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBURU1QTEFURV9TVElMTF9DQVBUVVJFID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVNUExBVEVfVklERU9fU05BUFNIT1QgPSA0OyAvLyAweDQKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQ2FtZXJhRGV2aWNlLkNhcHR1cmVMaXN0ZW5lciB7CisgICAgY3RvciBwdWJsaWMgQ2FtZXJhRGV2aWNlLkNhcHR1cmVMaXN0ZW5lcigpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNhcHR1cmVDb21wbGV0ZWQoYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZSwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhcHR1cmVSZXF1ZXN0LCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlc3VsdCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZUZhaWxlZChhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlLCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlcXVlc3QsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYXB0dXJlRmFpbHVyZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZVNlcXVlbmNlQ29tcGxldGVkKGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25DYXB0dXJlU3RhcnRlZChhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlLCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlcXVlc3QsIGxvbmcpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBDYW1lcmFEZXZpY2UuU3RhdGVMaXN0ZW5lciB7CisgICAgY3RvciBwdWJsaWMgQ2FtZXJhRGV2aWNlLlN0YXRlTGlzdGVuZXIoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25BY3RpdmUoYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQnVzeShhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25DbG9zZWQoYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZSk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uRGlzY29ubmVjdGVkKGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvbkVycm9yKGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uSWRsZShhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25PcGVuZWQoYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uVW5jb25maWd1cmVkKGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0NBTUVSQV9ERVZJQ0UgPSA0OyAvLyAweDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9DQU1FUkFfRElTQUJMRUQgPSAzOyAvLyAweDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9DQU1FUkFfSU5fVVNFID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfQ0FNRVJBX1NFUlZJQ0UgPSA1OyAvLyAweDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9NQVhfQ0FNRVJBU19JTl9VU0UgPSAyOyAvLyAweDIKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBjbGFzcyBDYW1lcmFNYW5hZ2VyIHsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkQXZhaWxhYmlsaXR5TGlzdGVuZXIoYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1hbmFnZXIuQXZhaWxhYmlsaXR5TGlzdGVuZXIsIGFuZHJvaWQub3MuSGFuZGxlcik7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzIGdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRDYW1lcmFJZExpc3QoKSB0aHJvd3MgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb3BlbkNhbWVyYShqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlLlN0YXRlTGlzdGVuZXIsIGFuZHJvaWQub3MuSGFuZGxlcikgdGhyb3dzIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFBY2Nlc3NFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbW92ZUF2YWlsYWJpbGl0eUxpc3RlbmVyKGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNYW5hZ2VyLkF2YWlsYWJpbGl0eUxpc3RlbmVyKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQ2FtZXJhTWFuYWdlci5BdmFpbGFiaWxpdHlMaXN0ZW5lciB7CisgICAgY3RvciBwdWJsaWMgQ2FtZXJhTWFuYWdlci5BdmFpbGFiaWxpdHlMaXN0ZW5lcigpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNhbWVyYUF2YWlsYWJsZShqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25DYW1lcmFVbmF2YWlsYWJsZShqYXZhLmxhbmcuU3RyaW5nKTsKKyAgfQorCisgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDYW1lcmFNZXRhZGF0YSB7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBUIGdldChhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5PFQ+KTsKKyAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXk8Pz4+IGdldEtleXMoKTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT0xPUl9DT1JSRUNUSU9OX01PREVfRkFTVCA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTE9SX0NPUlJFQ1RJT05fTU9ERV9ISUdIX1FVQUxJVFkgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT0xPUl9DT1JSRUNUSU9OX01PREVfVFJBTlNGT1JNX01BVFJJWCA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfQU5USUJBTkRJTkdfTU9ERV81MEhaID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9BTlRJQkFORElOR19NT0RFXzYwSFogPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX0FOVElCQU5ESU5HX01PREVfQVVUTyA9IDM7IC8vIDB4MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfQU5USUJBTkRJTkdfTU9ERV9PRkYgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX01PREVfT0ZGID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9NT0RFX09OID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9NT0RFX09OX0FMV0FZU19GTEFTSCA9IDM7IC8vIDB4MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfTU9ERV9PTl9BVVRPX0ZMQVNIID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9NT0RFX09OX0FVVE9fRkxBU0hfUkVERVlFID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9QUkVDQVBUVVJFX1RSSUdHRVJfSURMRSA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfUFJFQ0FQVFVSRV9UUklHR0VSX1NUQVJUID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9TVEFURV9DT05WRVJHRUQgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX1NUQVRFX0ZMQVNIX1JFUVVJUkVEID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9TVEFURV9JTkFDVElWRSA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfU1RBVEVfTE9DS0VEID0gMzsgLy8gMHgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9TVEFURV9QUkVDQVBUVVJFID0gNTsgLy8gMHg1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9TVEFURV9TRUFSQ0hJTkcgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX01PREVfQVVUTyA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfTU9ERV9DT05USU5VT1VTX1BJQ1RVUkUgPSA0OyAvLyAweDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX01PREVfQ09OVElOVU9VU19WSURFTyA9IDM7IC8vIDB4MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfTU9ERV9FRE9GID0gNTsgLy8gMHg1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9NT0RFX01BQ1JPID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9NT0RFX09GRiA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfU1RBVEVfQUNUSVZFX1NDQU4gPSAzOyAvLyAweDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1NUQVRFX0ZPQ1VTRURfTE9DS0VEID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9TVEFURV9JTkFDVElWRSA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfU1RBVEVfTk9UX0ZPQ1VTRURfTE9DS0VEID0gNTsgLy8gMHg1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9TVEFURV9QQVNTSVZFX0ZPQ1VTRUQgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1NUQVRFX1BBU1NJVkVfU0NBTiA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfU1RBVEVfUEFTU0lWRV9VTkZPQ1VTRUQgPSA2OyAvLyAweDYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1RSSUdHRVJfQ0FOQ0VMID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9UUklHR0VSX0lETEUgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1RSSUdHRVJfU1RBUlQgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9NT0RFX0FVVE8gPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9NT0RFX0NMT1VEWV9EQVlMSUdIVCA9IDY7IC8vIDB4NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQVdCX01PREVfREFZTElHSFQgPSA1OyAvLyAweDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9NT0RFX0ZMVU9SRVNDRU5UID0gMzsgLy8gMHgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfTU9ERV9JTkNBTkRFU0NFTlQgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9NT0RFX09GRiA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQVdCX01PREVfU0hBREUgPSA4OyAvLyAweDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9NT0RFX1RXSUxJR0hUID0gNzsgLy8gMHg3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfTU9ERV9XQVJNX0ZMVU9SRVNDRU5UID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfU1RBVEVfQ09OVkVSR0VEID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfU1RBVEVfSU5BQ1RJVkUgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9TVEFURV9MT0NLRUQgPSAzOyAvLyAweDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9TVEFURV9TRUFSQ0hJTkcgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0NBUFRVUkVfSU5URU5UX0NVU1RPTSA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfUFJFVklFVyA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfU1RJTExfQ0FQVFVSRSA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfVklERU9fUkVDT1JEID0gMzsgLy8gMHgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9DQVBUVVJFX0lOVEVOVF9WSURFT19TTkFQU0hPVCA9IDQ7IC8vIDB4NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfWkVST19TSFVUVEVSX0xBRyA9IDU7IC8vIDB4NQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfRUZGRUNUX01PREVfQVFVQSA9IDg7IC8vIDB4OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfRUZGRUNUX01PREVfQkxBQ0tCT0FSRCA9IDc7IC8vIDB4NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfRUZGRUNUX01PREVfTU9OTyA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfRUZGRUNUX01PREVfTkVHQVRJVkUgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0VGRkVDVF9NT0RFX09GRiA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfRUZGRUNUX01PREVfUE9TVEVSSVpFID0gNTsgLy8gMHg1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9FRkZFQ1RfTU9ERV9TRVBJQSA9IDQ7IC8vIDB4NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfRUZGRUNUX01PREVfU09MQVJJWkUgPSAzOyAvLyAweDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0VGRkVDVF9NT0RFX1dISVRFQk9BUkQgPSA2OyAvLyAweDYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX01PREVfQVVUTyA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfTU9ERV9PRkYgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX01PREVfVVNFX1NDRU5FX01PREUgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX1NDRU5FX01PREVfQUNUSU9OID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9TQ0VORV9NT0RFX0JBUkNPREUgPSAxNjsgLy8gMHgxMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9CRUFDSCA9IDg7IC8vIDB4OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9DQU5ETEVMSUdIVCA9IDE1OyAvLyAweGYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX1NDRU5FX01PREVfRkFDRV9QUklPUklUWSA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9GSVJFV09SS1MgPSAxMjsgLy8gMHhjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9TQ0VORV9NT0RFX0xBTkRTQ0FQRSA9IDQ7IC8vIDB4NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9OSUdIVCA9IDU7IC8vIDB4NQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9OSUdIVF9QT1JUUkFJVCA9IDY7IC8vIDB4NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9QQVJUWSA9IDE0OyAvLyAweGUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX1NDRU5FX01PREVfUE9SVFJBSVQgPSAzOyAvLyAweDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX1NDRU5FX01PREVfU05PVyA9IDk7IC8vIDB4OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9TUE9SVFMgPSAxMzsgLy8gMHhkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9TQ0VORV9NT0RFX1NURUFEWVBIT1RPID0gMTE7IC8vIDB4YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9TVU5TRVQgPSAxMDsgLy8gMHhhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9TQ0VORV9NT0RFX1RIRUFUUkUgPSA3OyAvLyAweDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX1NDRU5FX01PREVfVU5TVVBQT1JURUQgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFREdFX01PREVfRkFTVCA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVER0VfTU9ERV9ISUdIX1FVQUxJVFkgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFREdFX01PREVfT0ZGID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBU0hfTU9ERV9PRkYgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9NT0RFX1NJTkdMRSA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQVNIX01PREVfVE9SQ0ggPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9TVEFURV9DSEFSR0lORyA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQVNIX1NUQVRFX0ZJUkVEID0gMzsgLy8gMHgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBU0hfU1RBVEVfUkVBRFkgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9TVEFURV9VTkFWQUlMQUJMRSA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMX0ZVTEwgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTF9MSU1JVEVEID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVOU19GQUNJTkdfQkFDSyA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFTlNfRkFDSU5HX0ZST05UID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVOU19PUFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERV9PRkYgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFX09OID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVOU19TVEFURV9NT1ZJTkcgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRU5TX1NUQVRFX1NUQVRJT05BUlkgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT0lTRV9SRURVQ1RJT05fTU9ERV9GQVNUID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9JU0VfUkVEVUNUSU9OX01PREVfSElHSF9RVUFMSVRZID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9JU0VfUkVEVUNUSU9OX01PREVfT0ZGID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFX0ZVTEwgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREVfT0ZGID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFX1NJTVBMRSA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJU1RJQ1NfTEVOU19TSEFESU5HX01BUF9NT0RFX09GRiA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJU1RJQ1NfTEVOU19TSEFESU5HX01BUF9NT0RFX09OID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVElTVElDU19TQ0VORV9GTElDS0VSXzUwSFogPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUSVNUSUNTX1NDRU5FX0ZMSUNLRVJfNjBIWiA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJU1RJQ1NfU0NFTkVfRkxJQ0tFUl9OT05FID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVE9ORU1BUF9NT0RFX0NPTlRSQVNUX0NVUlZFID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVE9ORU1BUF9NT0RFX0ZBU1QgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUT05FTUFQX01PREVfSElHSF9RVUFMSVRZID0gMjsgLy8gMHgyCisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIENhbWVyYU1ldGFkYXRhLktleSB7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBib29sZWFuIGVxdWFscyhqYXZhLmxhbmcuT2JqZWN0KTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0TmFtZSgpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgaW50IGhhc2hDb2RlKCk7CisgIH0KKworICBwdWJsaWMgY2xhc3MgQ2FwdHVyZUZhaWx1cmUgeworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEZyYW1lTnVtYmVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0UmVhc29uKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlcXVlc3QgZ2V0UmVxdWVzdCgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFNlcXVlbmNlSWQoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gd2FzSW1hZ2VDYXB0dXJlZCgpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9FUlJPUiA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9GTFVTSEVEID0gMTsgLy8gMHgxCisgIH0KKworICBwdWJsaWMgZmluYWwgY2xhc3MgQ2FwdHVyZVJlcXVlc3QgZXh0ZW5kcyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEgaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgeworICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKTsKKyAgICBtZXRob2QgcHVibGljIFQgZ2V0KGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXk8VD4pOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLk9iamVjdCBnZXRUYWcoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQkxBQ0tfTEVWRUxfTE9DSzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09MT1JfQ09SUkVDVElPTl9HQUlOUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09MT1JfQ09SUkVDVElPTl9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT0xPUl9DT1JSRUNUSU9OX1RSQU5TRk9STTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BRV9BTlRJQkFORElOR19NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FFX0VYUE9TVVJFX0NPTVBFTlNBVElPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BRV9MT0NLOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FFX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUVfUFJFQ0FQVFVSRV9UUklHR0VSOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FFX1JFR0lPTlM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUVfVEFSR0VUX0ZQU19SQU5HRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BRl9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FGX1JFR0lPTlM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUZfVFJJR0dFUjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BV0JfTE9DSzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BV0JfTU9ERTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BV0JfUkVHSU9OUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9DQVBUVVJFX0lOVEVOVDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9FRkZFQ1RfTU9ERTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX1NDRU5FX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfVklERU9fU1RBQklMSVpBVElPTl9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3IgQ1JFQVRPUjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgRURHRV9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBGTEFTSF9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBKUEVHX0dQU19DT09SRElOQVRFUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgSlBFR19HUFNfUFJPQ0VTU0lOR19NRVRIT0Q7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IEpQRUdfR1BTX1RJTUVTVEFNUDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgSlBFR19PUklFTlRBVElPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgSlBFR19RVUFMSVRZOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBKUEVHX1RIVU1CTkFJTF9RVUFMSVRZOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBKUEVHX1RIVU1CTkFJTF9TSVpFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0FQRVJUVVJFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0ZJTFRFUl9ERU5TSVRZOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0ZPQ0FMX0xFTkdUSDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19GT0NVU19ESVNUQU5DRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19PUFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTk9JU0VfUkVEVUNUSU9OX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNDQUxFUl9DUk9QX1JFR0lPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX0VYUE9TVVJFX1RJTUU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNFTlNPUl9GUkFNRV9EVVJBVElPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX1NFTlNJVElWSVRZOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNUQVRJU1RJQ1NfTEVOU19TSEFESU5HX01BUF9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBUT05FTUFQX0NVUlZFX0JMVUU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFRPTkVNQVBfQ1VSVkVfR1JFRU47CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFRPTkVNQVBfQ1VSVkVfUkVEOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBUT05FTUFQX01PREU7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIENhcHR1cmVSZXF1ZXN0LkJ1aWxkZXIgeworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRUYXJnZXQoYW5kcm9pZC52aWV3LlN1cmZhY2UpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhcHR1cmVSZXF1ZXN0IGJ1aWxkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBUIGdldChhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5PFQ+KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgcmVtb3ZlVGFyZ2V0KGFuZHJvaWQudmlldy5TdXJmYWNlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0KGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXk8VD4sIFQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUYWcoamF2YS5sYW5nLk9iamVjdCk7CisgIH0KKworICBwdWJsaWMgZmluYWwgY2xhc3MgQ2FwdHVyZVJlc3VsdCBleHRlbmRzIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YSB7CisgICAgbWV0aG9kIHB1YmxpYyBUIGdldChhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5PFQ+KTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRGcmFtZU51bWJlcigpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhcHR1cmVSZXF1ZXN0IGdldFJlcXVlc3QoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRTZXF1ZW5jZUlkKCk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IEJMQUNLX0xFVkVMX0xPQ0s7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTE9SX0NPUlJFQ1RJT05fR0FJTlM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTE9SX0NPUlJFQ1RJT05fVFJBTlNGT1JNOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FFX1JFR0lPTlM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUVfU1RBVEU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IENPTlRST0xfQUZfTU9ERTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9BRl9SRUdJT05TOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FGX1NUQVRFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FXQl9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FXQl9SRUdJT05TOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBDT05UUk9MX0FXQl9TVEFURTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgQ09OVFJPTF9NT0RFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBFREdFX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IEZMQVNIX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IEZMQVNIX1NUQVRFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBKUEVHX0dQU19DT09SRElOQVRFUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgSlBFR19HUFNfUFJPQ0VTU0lOR19NRVRIT0Q7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IEpQRUdfR1BTX1RJTUVTVEFNUDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgSlBFR19PUklFTlRBVElPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgSlBFR19RVUFMSVRZOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBKUEVHX1RIVU1CTkFJTF9RVUFMSVRZOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBKUEVHX1RIVU1CTkFJTF9TSVpFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0FQRVJUVVJFOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0ZJTFRFUl9ERU5TSVRZOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBMRU5TX0ZPQ0FMX0xFTkdUSDsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19GT0NVU19ESVNUQU5DRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19GT0NVU19SQU5HRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19PUFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTEVOU19TVEFURTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgTk9JU0VfUkVEVUNUSU9OX01PREU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFJFUVVFU1RfRlJBTUVfQ09VTlQ7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNDQUxFUl9DUk9QX1JFR0lPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX0VYUE9TVVJFX1RJTUU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNFTlNPUl9GUkFNRV9EVVJBVElPTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU0VOU09SX1NFTlNJVElWSVRZOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTRU5TT1JfVEVNUEVSQVRVUkU7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNFTlNPUl9USU1FU1RBTVA7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNUQVRJU1RJQ1NfRkFDRVM7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFNUQVRJU1RJQ1NfRkFDRV9ERVRFQ1RfTU9ERTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU1RBVElTVElDU19MRU5TX1NIQURJTkdfTUFQOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTVEFUSVNUSUNTX1BSRURJQ1RFRF9DT0xPUl9HQUlOUzsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgU1RBVElTVElDU19QUkVESUNURURfQ09MT1JfVFJBTlNGT1JNOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhLktleSBTVEFUSVNUSUNTX1NDRU5FX0ZMSUNLRVI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFRPTkVNQVBfQ1VSVkVfQkxVRTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgVE9ORU1BUF9DVVJWRV9HUkVFTjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YS5LZXkgVE9ORU1BUF9DVVJWRV9SRUQ7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGEuS2V5IFRPTkVNQVBfTU9ERTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBjbGFzcyBGYWNlIHsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuUmVjdCBnZXRCb3VuZHMoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRJZCgpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5Qb2ludCBnZXRMZWZ0RXllUG9zaXRpb24oKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQgZ2V0TW91dGhQb3NpdGlvbigpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5Qb2ludCBnZXRSaWdodEV5ZVBvc2l0aW9uKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0U2NvcmUoKTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJRF9VTlNVUFBPUlRFRCA9IC0xOyAvLyAweGZmZmZmZmZmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0NPUkVfTUFYID0gMTAwOyAvLyAweDY0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0NPUkVfTUlOID0gMTsgLy8gMHgxCisgIH0KKworICBwdWJsaWMgZmluYWwgY2xhc3MgUmF0aW9uYWwgeworICAgIGN0b3IgcHVibGljIFJhdGlvbmFsKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXREZW5vbWluYXRvcigpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE51bWVyYXRvcigpOworICB9CisKKyAgcHVibGljIGZpbmFsIGNsYXNzIFNpemUgeworICAgIGN0b3IgcHVibGljIFNpemUoaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgaW50IGdldEhlaWdodCgpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgaW50IGdldFdpZHRoKCk7CisgIH0KKworfQorCiBwYWNrYWdlIGFuZHJvaWQuaGFyZHdhcmUuZGlzcGxheSB7CiAKICAgcHVibGljIGZpbmFsIGNsYXNzIERpc3BsYXlNYW5hZ2VyIHsKQEAgLTExMTM3LDYgKzExNjU5LDcgQEAKICAgICBjdG9yIHB1YmxpYyBFeHRyYWN0RWRpdFRleHQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEV4dHJhY3RFZGl0VGV4dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgRXh0cmFjdEVkaXRUZXh0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEV4dHJhY3RFZGl0VGV4dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmaW5pc2hJbnRlcm5hbENoYW5nZXMoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzVmVydGljYWxTY3JvbGxCYXIoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc3RhcnRJbnRlcm5hbENoYW5nZXMoKTsKQEAgLTExMTUxLDYgKzExNjc0LDcgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dENvbm5lY3Rpb24gZ2V0Q3VycmVudElucHV0Q29ubmVjdGlvbigpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLkVkaXRvckluZm8gZ2V0Q3VycmVudElucHV0RWRpdG9ySW5mbygpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRDdXJyZW50SW5wdXRTdGFydGVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0SW5wdXRNZXRob2RXaW5kb3dSZWNvbW1lbmRlZEhlaWdodCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyIGdldExheW91dEluZmxhdGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0TWF4V2lkdGgoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5DaGFyU2VxdWVuY2UgZ2V0VGV4dEZvckltZUFjdGlvbihpbnQpOwpAQCAtMTEzMzMsNiArMTE4NTcsNyBAQAogICBwdWJsaWMgY2xhc3MgS2V5Ym9hcmRWaWV3IGV4dGVuZHMgYW5kcm9pZC52aWV3LlZpZXcgaW1wbGVtZW50cyBhbmRyb2lkLnZpZXcuVmlldy5PbkNsaWNrTGlzdGVuZXIgewogICAgIGN0b3IgcHVibGljIEtleWJvYXJkVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgS2V5Ym9hcmRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEtleWJvYXJkVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjbG9zaW5nKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmlucHV0bWV0aG9kc2VydmljZS5LZXlib2FyZCBnZXRLZXlib2FyZCgpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgYW5kcm9pZC5pbnB1dG1ldGhvZHNlcnZpY2UuS2V5Ym9hcmRWaWV3Lk9uS2V5Ym9hcmRBY3Rpb25MaXN0ZW5lciBnZXRPbktleWJvYXJkQWN0aW9uTGlzdGVuZXIoKTsKQEAgLTE0MTY2LDYgKzE0NjkxLDcgQEAKICAgcHVibGljIGNsYXNzIFg1MDlUcnVzdE1hbmFnZXJFeHRlbnNpb25zIHsKICAgICBjdG9yIHB1YmxpYyBYNTA5VHJ1c3RNYW5hZ2VyRXh0ZW5zaW9ucyhqYXZheC5uZXQuc3NsLlg1MDlUcnVzdE1hbmFnZXIpIHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8amF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZT4gY2hlY2tTZXJ2ZXJUcnVzdGVkKGphdmEuc2VjdXJpdHkuY2VydC5YNTA5Q2VydGlmaWNhdGVbXSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykgdGhyb3dzIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZUV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNVc2VyQWRkZWRDZXJ0aWZpY2F0ZShqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlKTsKICAgfQogCiB9CkBAIC0xODQzMCwxMyArMTg5NTYsMTYgQEAKIAogICBwdWJsaWMgY2xhc3MgQ2hlY2tCb3hQcmVmZXJlbmNlIGV4dGVuZHMgYW5kcm9pZC5wcmVmZXJlbmNlLlR3b1N0YXRlUHJlZmVyZW5jZSB7CiAgICAgY3RvciBwdWJsaWMgQ2hlY2tCb3hQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIENoZWNrQm94UHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIGN0b3IgcHVibGljIENoZWNrQm94UHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgQ2hlY2tCb3hQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgfQogCiAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBEaWFsb2dQcmVmZXJlbmNlIGV4dGVuZHMgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2UgaW1wbGVtZW50cyBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lciBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlLk9uRGlzbWlzc0xpc3RlbmVyIGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlTWFuYWdlci5PbkFjdGl2aXR5RGVzdHJveUxpc3RlbmVyIHsKKyAgICBjdG9yIHB1YmxpYyBEaWFsb2dQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgRGlhbG9nUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBEaWFsb2dQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKKyAgICBjdG9yIHB1YmxpYyBEaWFsb2dQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLkRpYWxvZyBnZXREaWFsb2coKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZ2V0RGlhbG9nSWNvbigpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldERpYWxvZ0xheW91dFJlc291cmNlKCk7CkBAIC0xODQ2Niw2ICsxODk5NSw3IEBACiAgIH0KIAogICBwdWJsaWMgY2xhc3MgRWRpdFRleHRQcmVmZXJlbmNlIGV4dGVuZHMgYW5kcm9pZC5wcmVmZXJlbmNlLkRpYWxvZ1ByZWZlcmVuY2UgeworICAgIGN0b3IgcHVibGljIEVkaXRUZXh0UHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIGN0b3IgcHVibGljIEVkaXRUZXh0UHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBFZGl0VGV4dFByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEVkaXRUZXh0UHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CkBAIC0xODQ3Niw2ICsxOTAwNiw4IEBACiAgIH0KIAogICBwdWJsaWMgY2xhc3MgTGlzdFByZWZlcmVuY2UgZXh0ZW5kcyBhbmRyb2lkLnByZWZlcmVuY2UuRGlhbG9nUHJlZmVyZW5jZSB7CisgICAgY3RvciBwdWJsaWMgTGlzdFByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBMaXN0UHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBMaXN0UHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgTGlzdFByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGZpbmRJbmRleE9mVmFsdWUoamF2YS5sYW5nLlN0cmluZyk7CkBAIC0xODQ5Miw2ICsxOTAyNCw4IEBACiAgIH0KIAogICBwdWJsaWMgY2xhc3MgTXVsdGlTZWxlY3RMaXN0UHJlZmVyZW5jZSBleHRlbmRzIGFuZHJvaWQucHJlZmVyZW5jZS5EaWFsb2dQcmVmZXJlbmNlIHsKKyAgICBjdG9yIHB1YmxpYyBNdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CisgICAgY3RvciBwdWJsaWMgTXVsdGlTZWxlY3RMaXN0UHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBNdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBNdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBtZXRob2QgcHVibGljIGludCBmaW5kSW5kZXhPZlZhbHVlKGphdmEubGFuZy5TdHJpbmcpOwpAQCAtMTg1MDYsNiArMTkwNDAsNyBAQAogICB9CiAKICAgcHVibGljIGNsYXNzIFByZWZlcmVuY2UgaW1wbGVtZW50cyBqYXZhLmxhbmcuQ29tcGFyYWJsZSB7CisgICAgY3RvciBwdWJsaWMgUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIGN0b3IgcHVibGljIFByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CkBAIC0xODY3MSw2ICsxOTIwNiw3IEBACiAgIH0KIAogICBwdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUNhdGVnb3J5IGV4dGVuZHMgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2VHcm91cCB7CisgICAgY3RvciBwdWJsaWMgUHJlZmVyZW5jZUNhdGVnb3J5KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgUHJlZmVyZW5jZUNhdGVnb3J5KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIFByZWZlcmVuY2VDYXRlZ29yeShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgUHJlZmVyZW5jZUNhdGVnb3J5KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKQEAgLTE4NjkyLDYgKzE5MjI4LDcgQEAKICAgfQogCiAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQcmVmZXJlbmNlR3JvdXAgZXh0ZW5kcyBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZSB7CisgICAgY3RvciBwdWJsaWMgUHJlZmVyZW5jZUdyb3VwKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgUHJlZmVyZW5jZUdyb3VwKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIFByZWZlcmVuY2VHcm91cChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkZEl0ZW1Gcm9tSW5mbGF0ZXIoYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2UpOwpAQCAtMTg3NDYsNiArMTkyODMsNyBAQAogICB9CiAKICAgcHVibGljIGNsYXNzIFJpbmd0b25lUHJlZmVyZW5jZSBleHRlbmRzIGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlIGltcGxlbWVudHMgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2VNYW5hZ2VyLk9uQWN0aXZpdHlSZXN1bHRMaXN0ZW5lciB7CisgICAgY3RvciBwdWJsaWMgUmluZ3RvbmVQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgUmluZ3RvbmVQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIFJpbmd0b25lUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgUmluZ3RvbmVQcmVmZXJlbmNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKQEAgLTE4NzYyLDYgKzE5MzAwLDcgQEAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBTd2l0Y2hQcmVmZXJlbmNlIGV4dGVuZHMgYW5kcm9pZC5wcmVmZXJlbmNlLlR3b1N0YXRlUHJlZmVyZW5jZSB7CisgICAgY3RvciBwdWJsaWMgU3dpdGNoUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIGN0b3IgcHVibGljIFN3aXRjaFByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgU3dpdGNoUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgU3dpdGNoUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CkBAIC0xODc3NCw2ICsxOTMxMyw3IEBACiAgIH0KIAogICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVHdvU3RhdGVQcmVmZXJlbmNlIGV4dGVuZHMgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2UgeworICAgIGN0b3IgcHVibGljIFR3b1N0YXRlUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIGN0b3IgcHVibGljIFR3b1N0YXRlUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBUd29TdGF0ZVByZWZlcmVuY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFR3b1N0YXRlUHJlZmVyZW5jZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CkBAIC0yMTY5OSwxNSArMjIyMzksMTggQEAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQgewogCiAgIHB1YmxpYyBjbGFzcyBBbGxvY2F0aW9uIGV4dGVuZHMgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQmFzZU9iaiB7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbShpbnQsIGludCwgamF2YS5sYW5nLk9iamVjdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbShpbnQsIGludCwgaW50W10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb20oaW50LCBpbnQsIHNob3J0W10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb20oaW50LCBpbnQsIGJ5dGVbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbShpbnQsIGludCwgZmxvYXRbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbShpbnQsIGludCwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKGludCwgaW50LCBqYXZhLmxhbmcuT2JqZWN0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKGludCwgaW50LCBpbnRbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQsIGludCwgc2hvcnRbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQsIGludCwgYnl0ZVtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKGludCwgaW50LCBmbG9hdFtdKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgY29weTJEUmFuZ2VGcm9tKGludCwgaW50LCBpbnQsIGludCwgamF2YS5sYW5nLk9iamVjdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHkyRFJhbmdlRnJvbShpbnQsIGludCwgaW50LCBpbnQsIGJ5dGVbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHkyRFJhbmdlRnJvbShpbnQsIGludCwgaW50LCBpbnQsIHNob3J0W10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5MkRSYW5nZUZyb20oaW50LCBpbnQsIGludCwgaW50LCBpbnRbXSk7CkBAIC0yMTcxNSwxNyArMjIyNTgsMjAgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weTJEUmFuZ2VGcm9tKGludCwgaW50LCBpbnQsIGludCwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbiwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5MkRSYW5nZUZyb20oaW50LCBpbnQsIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weUZyb20oYW5kcm9pZC5yZW5kZXJzY3JpcHQuQmFzZU9ialtdKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgY29weUZyb20oamF2YS5sYW5nLk9iamVjdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlGcm9tKGludFtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weUZyb20oc2hvcnRbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlGcm9tKGJ5dGVbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlGcm9tKGZsb2F0W10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5RnJvbShhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlGcm9tKGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5RnJvbVVuY2hlY2tlZChqYXZhLmxhbmcuT2JqZWN0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weUZyb21VbmNoZWNrZWQoaW50W10pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjb3B5RnJvbVVuY2hlY2tlZChzaG9ydFtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weUZyb21VbmNoZWNrZWQoYnl0ZVtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weUZyb21VbmNoZWNrZWQoZmxvYXRbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlUbyhhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlUbyhqYXZhLmxhbmcuT2JqZWN0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weVRvKGJ5dGVbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvcHlUbyhzaG9ydFtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgY29weVRvKGludFtdKTsKQEAgLTIyNTE0LDYgKzIzMDYwLDkgQEAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBUeXBlIGV4dGVuZHMgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQmFzZU9iaiB7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5yZW5kZXJzY3JpcHQuVHlwZSBjcmVhdGVYKGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdCwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnJlbmRlcnNjcmlwdC5UeXBlIGNyZWF0ZVhZKGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdCwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQucmVuZGVyc2NyaXB0LlR5cGUgY3JlYXRlWFlaKGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdCwgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudCwgaW50LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Q291bnQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQgZ2V0RWxlbWVudCgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFgoKTsKQEAgLTIyOTAxLDExICsyMzQ1MCw1MiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuc3BlZWNoLnR0cyB7CiAKKyAgcHVibGljIGZpbmFsIGNsYXNzIFJlcXVlc3RDb25maWcgeworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgZ2V0QXVkaW9QYXJhbXMoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuc3BlZWNoLnR0cy5Wb2ljZUluZm8gZ2V0Vm9pY2UoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuQnVuZGxlIGdldFZvaWNlUGFyYW1zKCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFJlcXVlc3RDb25maWcuQnVpbGRlciB7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnNwZWVjaC50dHMuUmVxdWVzdENvbmZpZyBidWlsZCgpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuc3BlZWNoLnR0cy5SZXF1ZXN0Q29uZmlnLkJ1aWxkZXIgbmV3QnVpbGRlcigpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuc3BlZWNoLnR0cy5SZXF1ZXN0Q29uZmlnLkJ1aWxkZXIgbmV3QnVpbGRlcihhbmRyb2lkLnNwZWVjaC50dHMuUmVxdWVzdENvbmZpZyk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnNwZWVjaC50dHMuUmVxdWVzdENvbmZpZy5CdWlsZGVyIHNldEF1ZGlvUGFyYW0oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEF1ZGlvUGFyYW1QYW4oZmxvYXQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBdWRpb1BhcmFtU3RyZWFtKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEF1ZGlvUGFyYW1Wb2x1bWUoZmxvYXQpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5zcGVlY2gudHRzLlJlcXVlc3RDb25maWcuQnVpbGRlciBzZXRWb2ljZShhbmRyb2lkLnNwZWVjaC50dHMuVm9pY2VJbmZvKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuc3BlZWNoLnR0cy5SZXF1ZXN0Q29uZmlnLkJ1aWxkZXIgc2V0Vm9pY2VQYXJhbShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0KTsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBjbGFzcyBSZXF1ZXN0Q29uZmlnSGVscGVyIHsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnNwZWVjaC50dHMuUmVxdWVzdENvbmZpZyBoaWdoZXN0UXVhbGl0eShhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LkVuZ2luZVN0YXR1cywgYm9vbGVhbiwgYW5kcm9pZC5zcGVlY2gudHRzLlJlcXVlc3RDb25maWdIZWxwZXIuVm9pY2VTY29yZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuc3BlZWNoLnR0cy5SZXF1ZXN0Q29uZmlnIGhpZ2hlc3RRdWFsaXR5KGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuRW5naW5lU3RhdHVzLCBib29sZWFuKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUmVxdWVzdENvbmZpZ0hlbHBlci5FeGFjdExvY2FsZU1hdGNoZXIgaW1wbGVtZW50cyBhbmRyb2lkLnNwZWVjaC50dHMuUmVxdWVzdENvbmZpZ0hlbHBlci5Wb2ljZVNjb3JlciB7CisgICAgY3RvciBwdWJsaWMgUmVxdWVzdENvbmZpZ0hlbHBlci5FeGFjdExvY2FsZU1hdGNoZXIoamF2YS51dGlsLkxvY2FsZSk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgc2NvcmVWb2ljZShhbmRyb2lkLnNwZWVjaC50dHMuVm9pY2VJbmZvKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUmVxdWVzdENvbmZpZ0hlbHBlci5MYW5ndWFnZU1hdGNoZXIgaW1wbGVtZW50cyBhbmRyb2lkLnNwZWVjaC50dHMuUmVxdWVzdENvbmZpZ0hlbHBlci5Wb2ljZVNjb3JlciB7CisgICAgY3RvciBwdWJsaWMgUmVxdWVzdENvbmZpZ0hlbHBlci5MYW5ndWFnZU1hdGNoZXIoamF2YS51dGlsLkxvY2FsZSk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgc2NvcmVWb2ljZShhbmRyb2lkLnNwZWVjaC50dHMuVm9pY2VJbmZvKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgaW50ZXJmYWNlIFJlcXVlc3RDb25maWdIZWxwZXIuVm9pY2VTY29yZXIgeworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IHNjb3JlVm9pY2UoYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mbyk7CisgIH0KKwogICBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIFN5bnRoZXNpc0NhbGxiYWNrIHsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBhdWRpb0F2YWlsYWJsZShieXRlW10sIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBkb25lKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGVycm9yKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGVycm9yKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBpbnQgZmFsbGJhY2soKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBnZXRNYXhCdWZmZXJTaXplKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGhhc0ZpbmlzaGVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGhhc1N0YXJ0ZWQoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBzdGFydChpbnQsIGludCwgaW50KTsKICAgfQogCkBAIC0yMjkyMSw3ICsyMzUxMSwxNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRWYXJpYW50KCk7CiAgIH0KIAotICBwdWJsaWMgY2xhc3MgVGV4dFRvU3BlZWNoIHsKKyAgcHVibGljIGZpbmFsIGNsYXNzIFN5bnRoZXNpc1JlcXVlc3RWMiBpbXBsZW1lbnRzIGFuZHJvaWQub3MuUGFyY2VsYWJsZSB7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgZ2V0QXVkaW9QYXJhbXMoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0VGV4dCgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRVdHRlcmFuY2VJZCgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRWb2ljZU5hbWUoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuQnVuZGxlIGdldFZvaWNlUGFyYW1zKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7CisgIH0KKworICBwdWJsaWMgZGVwcmVjYXRlZCBjbGFzcyBUZXh0VG9TcGVlY2ggewogICAgIGN0b3IgcHVibGljIFRleHRUb1NwZWVjaChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaC5PbkluaXRMaXN0ZW5lcik7CiAgICAgY3RvciBwdWJsaWMgVGV4dFRvU3BlZWNoKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoLk9uSW5pdExpc3RlbmVyLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGludCBhZGRFYXJjb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgaW50KTsKQEAgLTIzMDA2LDggKzIzNjA2LDgwIEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uVXR0ZXJhbmNlQ29tcGxldGVkKGphdmEubGFuZy5TdHJpbmcpOwogICB9CiAKKyAgcHVibGljIGZpbmFsIGNsYXNzIFRleHRUb1NwZWVjaENsaWVudCB7CisgICAgY3RvciBwdWJsaWMgVGV4dFRvU3BlZWNoQ2xpZW50KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuLCBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlJlcXVlc3RDYWxsYmFja3MsIGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuQ29ubmVjdGlvbkNhbGxiYWNrcyk7CisgICAgY3RvciBwdWJsaWMgVGV4dFRvU3BlZWNoQ2xpZW50KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlJlcXVlc3RDYWxsYmFja3MsIGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuQ29ubmVjdGlvbkNhbGxiYWNrcyk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNvbm5lY3QoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgZGlzY29ubmVjdCgpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5FbmdpbmVTdGF0dXMgZ2V0RW5naW5lU3RhdHVzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQ29ubmVjdGVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHF1ZXVlQXVkaW8oYW5kcm9pZC5uZXQuVXJpLCBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlV0dGVyYW5jZUlkLCBhbmRyb2lkLnNwZWVjaC50dHMuUmVxdWVzdENvbmZpZywgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5SZXF1ZXN0Q2FsbGJhY2tzKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgcXVldWVTaWxlbmNlKGxvbmcsIGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuVXR0ZXJhbmNlSWQsIGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuUmVxdWVzdENhbGxiYWNrcyk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHF1ZXVlU3BlYWsoamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5VdHRlcmFuY2VJZCwgYW5kcm9pZC5zcGVlY2gudHRzLlJlcXVlc3RDb25maWcsIGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuUmVxdWVzdENhbGxiYWNrcyk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHF1ZXVlU3ludGhlc2l6ZVRvRmlsZShqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlV0dGVyYW5jZUlkLCBqYXZhLmlvLkZpbGUsIGFuZHJvaWQuc3BlZWNoLnR0cy5SZXF1ZXN0Q29uZmlnLCBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlJlcXVlc3RDYWxsYmFja3MpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzdG9wKCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGludGVyZmFjZSBUZXh0VG9TcGVlY2hDbGllbnQuQ29ubmVjdGlvbkNhbGxiYWNrcyB7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uQ29ubmVjdGlvbkZhaWx1cmUoKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25Db25uZWN0aW9uU3VjY2VzcygpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvbkVuZ2luZVN0YXR1c0NoYW5nZShhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LkVuZ2luZVN0YXR1cyk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZCgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBUZXh0VG9TcGVlY2hDbGllbnQuRW5naW5lU3RhdHVzIHsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RW5naW5lUGFja2FnZSgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mbz4gZ2V0Vm9pY2VzKCk7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFRleHRUb1NwZWVjaENsaWVudC5QYXJhbXMgeworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBVURJT19QQVJBTV9QQU4gPSAicGFuIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQVVESU9fUEFSQU1fU1RSRUFNID0gInN0cmVhbVR5cGUiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBVURJT19QQVJBTV9WT0xVTUUgPSAidm9sdW1lIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkFMTEJBQ0tfVk9JQ0VfTkFNRSA9ICJmYWxsYmFja1ZvaWNlTmFtZSI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIE5FVFdPUktfUkVUUklFU19DT1VOVCA9ICJuZXR3b3JrUmV0cmllc0NvdW50IjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTkVUV09SS19USU1FT1VUX01TID0gIm5ldHdvcmtUaW1lb3V0TXMiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTUEVFQ0hfUElUQ0ggPSAic3BlZWNoUGl0Y2giOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTUEVFQ0hfU1BFRUQgPSAic3BlZWNoU3BlZWQiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBUUkFDS19TVUJVVFRFUkFOQ0VfUFJPR1JFU1MgPSAidHJhY2tTdWJ1dHRlcmFuY2VQcm9ncmVzcyI7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIFRleHRUb1NwZWVjaENsaWVudC5SZXF1ZXN0Q2FsbGJhY2tzIHsKKyAgICBjdG9yIHB1YmxpYyBUZXh0VG9TcGVlY2hDbGllbnQuUmVxdWVzdENhbGxiYWNrcygpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblN5bnRoZXNpc0ZhaWx1cmUoYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5VdHRlcmFuY2VJZCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25TeW50aGVzaXNGYWxsYmFjayhhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlV0dGVyYW5jZUlkKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25TeW50aGVzaXNQcm9ncmVzcyhhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlV0dGVyYW5jZUlkLCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uU3ludGhlc2lzU3RhcnQoYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5VdHRlcmFuY2VJZCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uU3ludGhlc2lzU3RvcChhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlV0dGVyYW5jZUlkKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25TeW50aGVzaXNTdWNjZXNzKGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hDbGllbnQuVXR0ZXJhbmNlSWQpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzIHsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ET1dOTE9BRElOR19BRERJVElPTkFMX0RBVEEgPSAxNzsgLy8gMHgxMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0lOVkFMSURfUkVRVUVTVCA9IDE1OyAvLyAweGYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ORVRXT1JLID0gMTM7IC8vIDB4ZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX05FVFdPUktfVElNRU9VVCA9IDE0OyAvLyAweGUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9OT05fVU5JUVVFX1VUVEVSQU5DRV9JRCA9IDE2OyAvLyAweDEwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfT1VUUFVUID0gMTI7IC8vIDB4YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX1NFUlZJQ0UgPSAxMTsgLy8gMHhiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfU1lOVEhFU0lTID0gMTA7IC8vIDB4YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX1VOS05PV04gPSAtMTsgLy8gMHhmZmZmZmZmZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUT1BQRUQgPSAxMDA7IC8vIDB4NjQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVUNDRVNTID0gMDsgLy8gMHgwCisgIH0KKworICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFRleHRUb1NwZWVjaENsaWVudC5VdHRlcmFuY2VJZCB7CisgICAgY3RvciBwdWJsaWMgVGV4dFRvU3BlZWNoQ2xpZW50LlV0dGVyYW5jZUlkKCk7CisgICAgY3RvciBwdWJsaWMgVGV4dFRvU3BlZWNoQ2xpZW50LlV0dGVyYW5jZUlkKGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyB0b1VuaXF1ZVN0cmluZygpOworICB9CisKICAgcHVibGljIGFic3RyYWN0IGNsYXNzIFRleHRUb1NwZWVjaFNlcnZpY2UgZXh0ZW5kcyBhbmRyb2lkLmFwcC5TZXJ2aWNlIHsKICAgICBjdG9yIHB1YmxpYyBUZXh0VG9TcGVlY2hTZXJ2aWNlKCk7CisgICAgbWV0aG9kIHByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLnNwZWVjaC50dHMuVm9pY2VJbmZvPiBjaGVja1ZvaWNlc0luZm8oKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgZm9yY2VWb2ljZXNJbmZvQ2hlY2soKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuc3BlZWNoLnR0cy5Wb2ljZUluZm8gZ2V0Vm9pY2VzSW5mb1dpdGhOYW1lKGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwcm90ZWN0ZWQgYm9vbGVhbiBpbXBsZW1lbnRzVjJBUEkoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuSUJpbmRlciBvbkJpbmQoYW5kcm9pZC5jb250ZW50LkludGVudCk7CiAgICAgbWV0aG9kIHByb3RlY3RlZCBqYXZhLnV0aWwuU2V0PGphdmEubGFuZy5TdHJpbmc+IG9uR2V0RmVhdHVyZXNGb3JMYW5ndWFnZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHJvdGVjdGVkIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmdbXSBvbkdldExhbmd1YWdlKCk7CkBAIC0yMzAxNSw2ICsyMzY4Nyw4IEBACiAgICAgbWV0aG9kIHByb3RlY3RlZCBhYnN0cmFjdCBpbnQgb25Mb2FkTGFuZ3VhZ2UoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIG9uU3RvcCgpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBvblN5bnRoZXNpemVUZXh0KGFuZHJvaWQuc3BlZWNoLnR0cy5TeW50aGVzaXNSZXF1ZXN0LCBhbmRyb2lkLnNwZWVjaC50dHMuU3ludGhlc2lzQ2FsbGJhY2spOworICAgIG1ldGhvZCBwcm90ZWN0ZWQgdm9pZCBvblN5bnRoZXNpemVUZXh0VjIoYW5kcm9pZC5zcGVlY2gudHRzLlN5bnRoZXNpc1JlcXVlc3RWMiwgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mbywgYW5kcm9pZC5zcGVlY2gudHRzLlN5bnRoZXNpc0NhbGxiYWNrKTsKKyAgICBtZXRob2QgcHJvdGVjdGVkIHZvaWQgb25Wb2ljZXNJbmZvQ2hhbmdlKCk7CiAgIH0KIAogICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVXR0ZXJhbmNlUHJvZ3Jlc3NMaXN0ZW5lciB7CkBAIC0yMzAyNCw2ICsyMzY5OCw0NCBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblN0YXJ0KGphdmEubGFuZy5TdHJpbmcpOwogICB9CiAKKyAgcHVibGljIGZpbmFsIGNsYXNzIFZvaWNlSW5mbyBpbXBsZW1lbnRzIGFuZHJvaWQub3MuUGFyY2VsYWJsZSB7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgZ2V0QWRkaXRpb25hbEZlYXR1cmVzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0TGF0ZW5jeSgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxvY2FsZSBnZXRMb2NhbGUoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0TmFtZSgpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgZ2V0UGFyYW1zV2l0aERlZmF1bHRzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0UXVhbGl0eSgpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRSZXF1aXJlc05ldHdvcmtDb25uZWN0aW9uKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfTUFZX0FVVE9JTlNUQUxMID0gIm1heUF1dG9JbnN0YWxsIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9TUEVBS0VSX0dFTkRFUiA9ICJzcGVha2VyR2VuZGVyIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9XT1JEU19QRVJfTUlOVVRFID0gIndvcmRzUGVyTWludXRlIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQVRFTkNZX0hJR0ggPSA0MDA7IC8vIDB4MTkwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEFURU5DWV9MT1cgPSAyMDA7IC8vIDB4YzgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQVRFTkNZX05PUk1BTCA9IDMwMDsgLy8gMHgxMmMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQVRFTkNZX1ZFUllfSElHSCA9IDUwMDsgLy8gMHgxZjQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQVRFTkNZX1ZFUllfTE9XID0gMTAwOyAvLyAweDY0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVBTElUWV9ISUdIID0gNDAwOyAvLyAweDE5MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVQUxJVFlfTE9XID0gMjAwOyAvLyAweGM4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVBTElUWV9OT1JNQUwgPSAzMDA7IC8vIDB4MTJjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVBTElUWV9WRVJZX0hJR0ggPSA1MDA7IC8vIDB4MWY0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVBTElUWV9WRVJZX0xPVyA9IDEwMDsgLy8gMHg2NAorICB9CisKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBWb2ljZUluZm8uQnVpbGRlciB7CisgICAgY3RvciBwdWJsaWMgVm9pY2VJbmZvLkJ1aWxkZXIoKTsKKyAgICBjdG9yIHB1YmxpYyBWb2ljZUluZm8uQnVpbGRlcihhbmRyb2lkLnNwZWVjaC50dHMuVm9pY2VJbmZvKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuc3BlZWNoLnR0cy5Wb2ljZUluZm8gYnVpbGQoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuc3BlZWNoLnR0cy5Wb2ljZUluZm8uQnVpbGRlciBzZXRBZGRpdGlvbmFsRmVhdHVyZXMoYW5kcm9pZC5vcy5CdW5kbGUpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mby5CdWlsZGVyIHNldExhdGVuY3koaW50KTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuc3BlZWNoLnR0cy5Wb2ljZUluZm8uQnVpbGRlciBzZXRMb2NhbGUoamF2YS51dGlsLkxvY2FsZSk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnNwZWVjaC50dHMuVm9pY2VJbmZvLkJ1aWxkZXIgc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuc3BlZWNoLnR0cy5Wb2ljZUluZm8uQnVpbGRlciBzZXRQYXJhbXNXaXRoRGVmYXVsdHMoYW5kcm9pZC5vcy5CdW5kbGUpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mby5CdWlsZGVyIHNldFF1YWxpdHkoaW50KTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuc3BlZWNoLnR0cy5Wb2ljZUluZm8uQnVpbGRlciBzZXRSZXF1aXJlc05ldHdvcmtDb25uZWN0aW9uKGJvb2xlYW4pOworICB9CisKIH0KIAogcGFja2FnZSBhbmRyb2lkLnRlbGVwaG9ueSB7CkBAIC0yMzQ1OCw2ICsyNDE3MCwzMiBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNJTV9TVEFURV9VTktOT1dOID0gMDsgLy8gMHgwCiAgIH0KIAorICBwdWJsaWMgY2xhc3MgVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lciB7CisgICAgY3RvciBwdWJsaWMgVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lcihjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuSVRoaXJkUGFydHlDYWxsTGlzdGVuZXIpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNhbGxFbmRlZChpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNhbGxFc3RhYmxpc2hlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNhbGxQcm92aWRlckF0dGFjaGVkKGFuZHJvaWQudGVsZXBob255LlRoaXJkUGFydHlDYWxsUHJvdmlkZXIpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblJpbmdpbmdTdGFydGVkKCk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMTF9FTkRfSU5DT01JTkdfTUlTU0VEID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMTF9FTkRfTk9STUFMID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMTF9FTkRfT1RIRVIgPSAzOyAvLyAweDMKKyAgfQorCisgIHB1YmxpYyBjbGFzcyBUaGlyZFBhcnR5Q2FsbFByb3ZpZGVyIHsKKyAgICBjdG9yIHB1YmxpYyBUaGlyZFBhcnR5Q2FsbFByb3ZpZGVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGhhbmd1cCgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBpbmNvbWluZ0NhbGxBY2NlcHQoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgbXV0ZShib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2VuZER0bWYoY2hhcik7CisgIH0KKworICBwdWJsaWMgY2xhc3MgVGhpcmRQYXJ0eUNhbGxTZXJ2aWNlIHsKKyAgICBjdG9yIHB1YmxpYyBUaGlyZFBhcnR5Q2FsbFNlcnZpY2UoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuSUJpbmRlciBnZXRCaW5kZXIoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgaW5jb21pbmdDYWxsQXR0YWNoKGFuZHJvaWQudGVsZXBob255LlRoaXJkUGFydHlDYWxsTGlzdGVuZXIsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvdXRnb2luZ0NhbGxJbml0aWF0ZShhbmRyb2lkLnRlbGVwaG9ueS5UaGlyZFBhcnR5Q2FsbExpc3RlbmVyLCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgfQorCiB9CiAKIHBhY2thZ2UgYW5kcm9pZC50ZWxlcGhvbnkuY2RtYSB7CkBAIC0yNTU3Nyw3ICsyNjMxNSw4IEBACiAKICAgcHVibGljIGZpbmFsIGNsYXNzIFNjZW5lIHsKICAgICBjdG9yIHB1YmxpYyBTY2VuZShhbmRyb2lkLnZpZXcuVmlld0dyb3VwKTsKLSAgICBjdG9yIHB1YmxpYyBTY2VuZShhbmRyb2lkLnZpZXcuVmlld0dyb3VwLCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwKTsKKyAgICBjdG9yIHB1YmxpYyBTY2VuZShhbmRyb2lkLnZpZXcuVmlld0dyb3VwLCBhbmRyb2lkLnZpZXcuVmlldyk7CisgICAgY3RvciBwdWJsaWMgZGVwcmVjYXRlZCBTY2VuZShhbmRyb2lkLnZpZXcuVmlld0dyb3VwLCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZW50ZXIoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZXhpdCgpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZSBnZXRTY2VuZUZvckxheW91dChhbmRyb2lkLnZpZXcuVmlld0dyb3VwLCBpbnQsIGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKQEAgLTI1NjM1LDEwICsyNjM3NCwxNSBAQAogICAgIGN0b3IgcHVibGljIFRyYW5zaXRpb25NYW5hZ2VyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBiZWdpbkRlbGF5ZWRUcmFuc2l0aW9uKGFuZHJvaWQudmlldy5WaWV3R3JvdXApOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgYmVnaW5EZWxheWVkVHJhbnNpdGlvbihhbmRyb2lkLnZpZXcuVmlld0dyb3VwLCBhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbiBnZXROYW1lZFRyYW5zaXRpb24oamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC50cmFuc2l0aW9uLlNjZW5lKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uIGdldE5hbWVkVHJhbnNpdGlvbihhbmRyb2lkLnRyYW5zaXRpb24uU2NlbmUsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldFRhcmdldFNjZW5lTmFtZXMoYW5kcm9pZC50cmFuc2l0aW9uLlNjZW5lKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdvKGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbyhhbmRyb2lkLnRyYW5zaXRpb24uU2NlbmUsIGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VHJhbnNpdGlvbihhbmRyb2lkLnRyYW5zaXRpb24uU2NlbmUsIGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VHJhbnNpdGlvbihhbmRyb2lkLnRyYW5zaXRpb24uU2NlbmUsIGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZSwgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUcmFuc2l0aW9uKGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZSwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUcmFuc2l0aW9uKGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZSwgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb24pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB0cmFuc2l0aW9uVG8oYW5kcm9pZC50cmFuc2l0aW9uLlNjZW5lKTsKICAgfQogCkBAIC0yNjQ3Miw2ICsyNzIxNiw3IEBACiAgIH0KIAogICBwdWJsaWMgY2xhc3MgSGFwdGljRmVlZGJhY2tDb25zdGFudHMgeworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMT0NLX1RJQ0sgPSA0OyAvLyAweDQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0lHTk9SRV9HTE9CQUxfU0VUVElORyA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfSUdOT1JFX1ZJRVdfU0VUVElORyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtFWUJPQVJEX1RBUCA9IDM7IC8vIDB4MwpAQCAtMjc0MjIsNiArMjgxNjcsNyBAQAogICAgIGN0b3IgcHVibGljIFN1cmZhY2VWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBTdXJmYWNlVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgU3VyZmFjZVZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgU3VyZmFjZVZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2F0aGVyVHJhbnNwYXJlbnRSZWdpb24oYW5kcm9pZC5ncmFwaGljcy5SZWdpb24pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXIgZ2V0SG9sZGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNlY3VyZShib29sZWFuKTsKQEAgLTI3NDMzLDYgKzI4MTc5LDcgQEAKICAgICBjdG9yIHB1YmxpYyBUZXh0dXJlVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgVGV4dHVyZVZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFRleHR1cmVWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFRleHR1cmVWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIGRyYXcoYW5kcm9pZC5ncmFwaGljcy5DYW52YXMpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAgZ2V0Qml0bWFwKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcCBnZXRCaXRtYXAoaW50LCBpbnQpOwpAQCAtMjc0ODQsNiArMjgyMzEsNyBAQAogICAgIGN0b3IgcHVibGljIFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRDaGlsZHJlbkZvckFjY2Vzc2liaWxpdHkoamF2YS51dGlsLkFycmF5TGlzdDxhbmRyb2lkLnZpZXcuVmlldz4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRGb2N1c2FibGVzKGphdmEudXRpbC5BcnJheUxpc3Q8YW5kcm9pZC52aWV3LlZpZXc+LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRGb2N1c2FibGVzKGphdmEudXRpbC5BcnJheUxpc3Q8YW5kcm9pZC52aWV3LlZpZXc+LCBpbnQsIGludCk7CkBAIC0yNzY4OSw2ICsyODQzNyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGludmFsaWRhdGUoaW50LCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgaW52YWxpZGF0ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlRHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQWNjZXNzaWJpbGl0eUZvY3VzZWQoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNBY3RpdmF0ZWQoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNBdHRhY2hlZFRvV2luZG93KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQ2xpY2thYmxlKCk7CkBAIC0yNzcwNCw2ICsyODQ1Myw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzSG9yaXpvbnRhbEZhZGluZ0VkZ2VFbmFibGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzSG9yaXpvbnRhbFNjcm9sbEJhckVuYWJsZWQoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNIb3ZlcmVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzSW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0luRWRpdE1vZGUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNJbkxheW91dCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0luVG91Y2hNb2RlKCk7CkBAIC0yODIyMiw2ICsyODk3Miw3IEBACiAgICAgY3RvciBwdWJsaWMgVmlld0dyb3VwKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBWaWV3R3JvdXAoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFZpZXdHcm91cChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBWaWV3R3JvdXAoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gYWRkU3RhdGVzRnJvbUNoaWxkcmVuKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkZFZpZXcoYW5kcm9pZC52aWV3LlZpZXcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRWaWV3KGFuZHJvaWQudmlldy5WaWV3LCBpbnQpOwpAQCAtMjg0NzMsNiArMjkyMjQsNyBAQAogICAgIGN0b3IgcHVibGljIFZpZXdTdHViKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIFZpZXdTdHViKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBWaWV3U3R1YihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBWaWV3U3R1YihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEluZmxhdGVkSWQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlciBnZXRMYXlvdXRJbmZsYXRlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldExheW91dFJlc291cmNlKCk7CkBAIC0yODU1NSw2ICsyOTMwNyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMgZ2V0QXR0cmlidXRlcygpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC52aWV3LldpbmRvdy5DYWxsYmFjayBnZXRDYWxsYmFjaygpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC52aWV3LldpbmRvdyBnZXRDb250YWluZXIoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZSBnZXRDb250ZW50U2NlbmUoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGdldENvbnRleHQoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQudmlldy5WaWV3IGdldEN1cnJlbnRGb2N1cygpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC52aWV3LlZpZXcgZ2V0RGVjb3JWaWV3KCk7CkBAIC0yODU2Miw2ICsyOTMxNSw3IEBACiAgICAgbWV0aG9kIHByb3RlY3RlZCBmaW5hbCBpbnQgZ2V0Rm9yY2VkV2luZG93RmxhZ3MoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlciBnZXRMYXlvdXRJbmZsYXRlcigpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgZmluYWwgaW50IGdldExvY2FsRmVhdHVyZXMoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uTWFuYWdlciBnZXRUcmFuc2l0aW9uTWFuYWdlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFZvbHVtZUNvbnRyb2xTdHJlYW0oKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyIGdldFdpbmRvd01hbmFnZXIoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheSBnZXRXaW5kb3dTdHlsZSgpOwpAQCAtMjg2MTAsNyArMjkzNjQsOSBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRMb2dvKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNvZnRJbnB1dE1vZGUoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0VGl0bGUoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSk7Ci0gICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFRpdGxlQ29sb3IoaW50KTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGRlcHJlY2F0ZWQgdm9pZCBzZXRUaXRsZUNvbG9yKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRyYW5zaXRpb25NYW5hZ2VyKGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uTWFuYWdlcik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRyYW5zaXRpb25PcHRpb25zKGFuZHJvaWQub3MuQnVuZGxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VHlwZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRVaU9wdGlvbnMoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VWlPcHRpb25zKGludCwgaW50KTsKQEAgLTI4NjMxLDYgKzI5Mzg3LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX0FDVElPTl9CQVIgPSA4OyAvLyAweDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX0FDVElPTl9CQVJfT1ZFUkxBWSA9IDk7IC8vIDB4OQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZFQVRVUkVfQUNUSU9OX01PREVfT1ZFUkxBWSA9IDEwOyAvLyAweGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX0NPTlRFTlRfVFJBTlNJVElPTlMgPSAxMTsgLy8gMHhiCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkVBVFVSRV9DT05URVhUX01FTlUgPSA2OyAvLyAweDYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX0NVU1RPTV9USVRMRSA9IDc7IC8vIDB4NwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZFQVRVUkVfSU5ERVRFUk1JTkFURV9QUk9HUkVTUyA9IDU7IC8vIDB4NQpAQCAtMjg5ODEsNiArMjk3MzgsOSBAQAogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtQWN0aW9uKGludCwgYW5kcm9pZC5vcy5CdW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZWN5Y2xlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlZnJlc2goKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgcmVtb3ZlQWN0aW9uKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlbW92ZUNoaWxkKGFuZHJvaWQudmlldy5WaWV3KTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gcmVtb3ZlQ2hpbGQoYW5kcm9pZC52aWV3LlZpZXcsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEFjY2Vzc2liaWxpdHlGb2N1c2VkKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRCb3VuZHNJblBhcmVudChhbmRyb2lkLmdyYXBoaWNzLlJlY3QpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRCb3VuZHNJblNjcmVlbihhbmRyb2lkLmdyYXBoaWNzLlJlY3QpOwpAQCAtMjkxNTksNiArMjk5MTksNyBAQAogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgZWRnZUNvbG9yOwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgZWRnZVR5cGU7CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBmb3JlZ3JvdW5kQ29sb3I7CisgICAgZmllbGQgcHVibGljIGZpbmFsIGludCB3aW5kb3dDb2xvcjsKICAgfQogCiAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQ2FwdGlvbmluZ01hbmFnZXIuQ2FwdGlvbmluZ0NoYW5nZUxpc3RlbmVyIHsKQEAgLTMwMjM0LDYgKzMwOTk1LDcgQEAKICAgICBjdG9yIHB1YmxpYyBXZWJWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBXZWJWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBXZWJWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFdlYlZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBkZXByZWNhdGVkIFdlYlZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkZEphdmFzY3JpcHRJbnRlcmZhY2UoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGNhbkdvQmFjaygpOwpAQCAtMzA0MDgsNiArMzExNzAsNyBAQAogICAgIGN0b3IgcHVibGljIEFic0xpc3RWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBBYnNMaXN0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgQWJzTGlzdFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgQWJzTGlzdFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYWZ0ZXJUZXh0Q2hhbmdlZChhbmRyb2lkLnRleHQuRWRpdGFibGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBiZWZvcmVUZXh0Q2hhbmdlZChqYXZhLmxhbmcuQ2hhclNlcXVlbmNlLCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gY2FuU2Nyb2xsTGlzdChpbnQpOwpAQCAtMzA0NTksNiArMzEyMjIsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXREcmF3U2VsZWN0b3JPblRvcChib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0RmFzdFNjcm9sbEFsd2F5c1Zpc2libGUoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEZhc3RTY3JvbGxFbmFibGVkKGJvb2xlYW4pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRGYXN0U2Nyb2xsU3R5bGUoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0RmlsdGVyVGV4dChqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0RnJpY3Rpb24oZmxvYXQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRJdGVtQ2hlY2tlZChpbnQsIGJvb2xlYW4pOwpAQCAtMzA1MjEsNiArMzEyODUsNyBAQAogICAgIGN0b3IgcHVibGljIEFic1NlZWtCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEFic1NlZWtCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEFic1NlZWtCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgQWJzU2Vla0JhcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEtleVByb2dyZXNzSW5jcmVtZW50KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldFRodW1iKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0VGh1bWJPZmZzZXQoKTsKQEAgLTMwNTMzLDYgKzMxMjk4LDcgQEAKICAgICBjdG9yIHB1YmxpYyBBYnNTcGlubmVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBBYnNTcGlubmVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBBYnNTcGlubmVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEFic1NwaW5uZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQud2lkZ2V0LlNwaW5uZXJBZGFwdGVyIGdldEFkYXB0ZXIoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5WaWV3IGdldFNlbGVjdGVkVmlldygpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblJlc3RvcmVJbnN0YW5jZVN0YXRlKGFuZHJvaWQub3MuUGFyY2VsYWJsZSk7CkBAIC0zMDU0Nyw2ICszMTMxMyw3IEBACiAgICAgY3RvciBwdWJsaWMgQWJzb2x1dGVMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEFic29sdXRlTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBBYnNvbHV0ZUxheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBBYnNvbHV0ZUxheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgdm9pZCBvbkxheW91dChib29sZWFuLCBpbnQsIGludCwgaW50LCBpbnQpOwogICB9CiAKQEAgLTMwNTc4LDYgKzMxMzQ1LDcgQEAKICAgICBjdG9yIHB1YmxpYyBBZGFwdGVyVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgQWRhcHRlclZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEFkYXB0ZXJWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEFkYXB0ZXJWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBUIGdldEFkYXB0ZXIoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRDb3VudCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LlZpZXcgZ2V0RW1wdHlWaWV3KCk7CkBAIC0zMDYzMSw2ICszMTM5OSw3IEBACiAgICAgY3RvciBwdWJsaWMgQWRhcHRlclZpZXdBbmltYXRvcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgQWRhcHRlclZpZXdBbmltYXRvcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgQWRhcHRlclZpZXdBbmltYXRvcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBBZGFwdGVyVmlld0FuaW1hdG9yKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkdmFuY2UoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZGVmZXJOb3RpZnlEYXRhU2V0Q2hhbmdlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmeWlXaWxsQmVBZHZhbmNlZEJ5SG9zdEtUaHgoKTsKQEAgLTMwNjYwLDYgKzMxNDI5LDggQEAKICAgcHVibGljIGNsYXNzIEFkYXB0ZXJWaWV3RmxpcHBlciBleHRlbmRzIGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3QW5pbWF0b3IgewogICAgIGN0b3IgcHVibGljIEFkYXB0ZXJWaWV3RmxpcHBlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgQWRhcHRlclZpZXdGbGlwcGVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKKyAgICBjdG9yIHB1YmxpYyBBZGFwdGVyVmlld0ZsaXBwZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgQWRhcHRlclZpZXdGbGlwcGVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0RmxpcEludGVydmFsKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQXV0b1N0YXJ0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzRmxpcHBpbmcoKTsKQEAgLTMwNjkwLDYgKzMxNDYxLDcgQEAKICAgICBjdG9yIHB1YmxpYyBBbmFsb2dDbG9jayhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgQW5hbG9nQ2xvY2soYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEFuYWxvZ0Nsb2NrKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEFuYWxvZ0Nsb2NrKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgQXJyYXlBZGFwdGVyIGV4dGVuZHMgYW5kcm9pZC53aWRnZXQuQmFzZUFkYXB0ZXIgaW1wbGVtZW50cyBhbmRyb2lkLndpZGdldC5GaWx0ZXJhYmxlIHsKQEAgLTMwNzIyLDYgKzMxNDk0LDcgQEAKICAgICBjdG9yIHB1YmxpYyBBdXRvQ29tcGxldGVUZXh0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgQXV0b0NvbXBsZXRlVGV4dFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEF1dG9Db21wbGV0ZVRleHRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEF1dG9Db21wbGV0ZVRleHRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNsZWFyTGlzdFNlbGVjdGlvbigpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBjb252ZXJ0U2VsZWN0aW9uVG9TdHJpbmcoamF2YS5sYW5nLk9iamVjdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGRpc21pc3NEcm9wRG93bigpOwpAQCAtMzA4MTQsMTIgKzMxNTg3LDE0IEBACiAgICAgY3RvciBwdWJsaWMgQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBDYWxlbmRhclZpZXcgZXh0ZW5kcyBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dCB7CiAgICAgY3RvciBwdWJsaWMgQ2FsZW5kYXJWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBDYWxlbmRhclZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIENhbGVuZGFyVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBDYWxlbmRhclZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0RGF0ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldERhdGVUZXh0QXBwZWFyYW5jZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEZpcnN0RGF5T2ZXZWVrKCk7CkBAIC0zMDg2MSw2ICszMTYzNiw3IEBACiAgICAgY3RvciBwdWJsaWMgQ2hlY2tCb3goYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIENoZWNrQm94KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBDaGVja0JveChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBDaGVja0JveChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICB9CiAKICAgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBDaGVja2FibGUgewpAQCAtMzA4NzMsNiArMzE2NDksNyBAQAogICAgIGN0b3IgcHVibGljIENoZWNrZWRUZXh0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgQ2hlY2tlZFRleHRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBDaGVja2VkVGV4dFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgQ2hlY2tlZFRleHRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldENoZWNrTWFya0RyYXdhYmxlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQ2hlY2tlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDaGVja01hcmtEcmF3YWJsZShpbnQpOwpAQCAtMzA4ODUsNiArMzE2NjIsNyBAQAogICAgIGN0b3IgcHVibGljIENocm9ub21ldGVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBDaHJvbm9tZXRlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgQ2hyb25vbWV0ZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgQ2hyb25vbWV0ZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0QmFzZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRGb3JtYXQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQud2lkZ2V0LkNocm9ub21ldGVyLk9uQ2hyb25vbWV0ZXJUaWNrTGlzdGVuZXIgZ2V0T25DaHJvbm9tZXRlclRpY2tMaXN0ZW5lcigpOwpAQCAtMzA5MDMsNiArMzE2ODEsNyBAQAogICAgIGN0b3IgcHVibGljIENvbXBvdW5kQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBDb21wb3VuZEJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgQ29tcG91bmRCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgQ29tcG91bmRCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNDaGVja2VkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEJ1dHRvbkRyYXdhYmxlKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEJ1dHRvbkRyYXdhYmxlKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUpOwpAQCAtMzA5NzQsNiArMzE3NTMsNyBAQAogICAgIGN0b3IgcHVibGljIERhdGVQaWNrZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIERhdGVQaWNrZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIERhdGVQaWNrZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgRGF0ZVBpY2tlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC53aWRnZXQuQ2FsZW5kYXJWaWV3IGdldENhbGVuZGFyVmlldygpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRDYWxlbmRhclZpZXdTaG93bigpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldERheU9mTW9udGgoKTsKQEAgLTMxMDM3LDYgKzMxODE3LDcgQEAKICAgICBjdG9yIHB1YmxpYyBFZGl0VGV4dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgRWRpdFRleHQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEVkaXRUZXh0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEVkaXRUZXh0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGV4dGVuZFNlbGVjdGlvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZWxlY3RBbGwoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKGludCwgaW50KTsKQEAgLTMxMDY4LDYgKzMxODQ5LDcgQEAKICAgICBjdG9yIHB1YmxpYyBFeHBhbmRhYmxlTGlzdFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEV4cGFuZGFibGVMaXN0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgRXhwYW5kYWJsZUxpc3RWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEV4cGFuZGFibGVMaXN0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBjb2xsYXBzZUdyb3VwKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGV4cGFuZEdyb3VwKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGV4cGFuZEdyb3VwKGludCwgYm9vbGVhbik7CkBAIC0zMTE1Nyw2ICszMTkzOSw3IEBACiAgICAgY3RvciBwdWJsaWMgRnJhbWVMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEZyYW1lTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBGcmFtZUxheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBGcmFtZUxheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGdldENvbnNpZGVyR29uZUNoaWxkcmVuV2hlbk1lYXN1cmluZygpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXRGb3JlZ3JvdW5kKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Rm9yZWdyb3VuZEdyYXZpdHkoKTsKQEAgLTMxMTgxLDYgKzMxOTY0LDcgQEAKICAgICBjdG9yIHB1YmxpYyBHYWxsZXJ5KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBHYWxsZXJ5KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBHYWxsZXJ5KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEdhbGxlcnkoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb25Eb3duKGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG9uRmxpbmcoYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50LCBhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQsIGZsb2F0LCBmbG9hdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uTG9uZ1ByZXNzKGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudCk7CkBAIC0zMTIwMSw5ICszMTk4NSwxMCBAQAogICB9CiAKICAgcHVibGljIGNsYXNzIEdyaWRMYXlvdXQgZXh0ZW5kcyBhbmRyb2lkLnZpZXcuVmlld0dyb3VwIHsKLSAgICBjdG9yIHB1YmxpYyBHcmlkTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOwotICAgIGN0b3IgcHVibGljIEdyaWRMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIEdyaWRMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOworICAgIGN0b3IgcHVibGljIEdyaWRMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOworICAgIGN0b3IgcHVibGljIEdyaWRMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgR3JpZExheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEFsaWdubWVudE1vZGUoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRDb2x1bW5Db3VudCgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE9yaWVudGF0aW9uKCk7CkBAIC0zMTI2MSw2ICszMjA0Niw3IEBACiAgICAgY3RvciBwdWJsaWMgR3JpZFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEdyaWRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBHcmlkVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBHcmlkVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC53aWRnZXQuTGlzdEFkYXB0ZXIgZ2V0QWRhcHRlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldENvbHVtbldpZHRoKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0R3Jhdml0eSgpOwpAQCAtMzEzMTgsNiArMzIxMDQsNyBAQAogICAgIGN0b3IgcHVibGljIEhvcml6b250YWxTY3JvbGxWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBIb3Jpem9udGFsU2Nyb2xsVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgSG9yaXpvbnRhbFNjcm9sbFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgSG9yaXpvbnRhbFNjcm9sbFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gYXJyb3dTY3JvbGwoaW50KTsKICAgICBtZXRob2QgcHJvdGVjdGVkIGludCBjb21wdXRlU2Nyb2xsRGVsdGFUb0dldENoaWxkUmVjdE9uU2NyZWVuKGFuZHJvaWQuZ3JhcGhpY3MuUmVjdCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGV4ZWN1dGVLZXlFdmVudChhbmRyb2lkLnZpZXcuS2V5RXZlbnQpOwpAQCAtMzEzMzcsNiArMzIxMjQsNyBAQAogICAgIGN0b3IgcHVibGljIEltYWdlQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBJbWFnZUJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgSW1hZ2VCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgSW1hZ2VCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBJbWFnZVN3aXRjaGVyIGV4dGVuZHMgYW5kcm9pZC53aWRnZXQuVmlld1N3aXRjaGVyIHsKQEAgLTMxMzUxLDYgKzMyMTM5LDcgQEAKICAgICBjdG9yIHB1YmxpYyBJbWFnZVZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIEltYWdlVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgSW1hZ2VWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIEltYWdlVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBjbGVhckNvbG9yRmlsdGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldEFkanVzdFZpZXdCb3VuZHMoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0QmFzZWxpbmVBbGlnbkJvdHRvbSgpOwpAQCAtMzE0MDIsNiArMzIxOTEsNyBAQAogICAgIGN0b3IgcHVibGljIExpbmVhckxheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgTGluZWFyTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBMaW5lYXJMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgTGluZWFyTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0QmFzZWxpbmVBbGlnbmVkQ2hpbGRJbmRleCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXREaXZpZGVyRHJhd2FibGUoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXREaXZpZGVyUGFkZGluZygpOwpAQCAtMzE1MTIsNiArMzIzMDIsNyBAQAogICAgIGN0b3IgcHVibGljIExpc3RWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBMaXN0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgTGlzdFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgTGlzdFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkRm9vdGVyVmlldyhhbmRyb2lkLnZpZXcuVmlldywgamF2YS5sYW5nLk9iamVjdCwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkZEZvb3RlclZpZXcoYW5kcm9pZC52aWV3LlZpZXcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRIZWFkZXJWaWV3KGFuZHJvaWQudmlldy5WaWV3LCBqYXZhLmxhbmcuT2JqZWN0LCBib29sZWFuKTsKQEAgLTMxNTg0LDYgKzMyMzc1LDcgQEAKICAgICBjdG9yIHB1YmxpYyBNdWx0aUF1dG9Db21wbGV0ZVRleHRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBNdWx0aUF1dG9Db21wbGV0ZVRleHRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBNdWx0aUF1dG9Db21wbGV0ZVRleHRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIE11bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHJvdGVjdGVkIHZvaWQgcGVyZm9ybUZpbHRlcmluZyhqYXZhLmxhbmcuQ2hhclNlcXVlbmNlLCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VG9rZW5pemVyKGFuZHJvaWQud2lkZ2V0Lk11bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXcuVG9rZW5pemVyKTsKICAgfQpAQCAtMzE2MDUsNiArMzIzOTcsNyBAQAogICAgIGN0b3IgcHVibGljIE51bWJlclBpY2tlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgTnVtYmVyUGlja2VyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBOdW1iZXJQaWNrZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgTnVtYmVyUGlja2VyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0RGlzcGxheWVkVmFsdWVzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0TWF4VmFsdWUoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRNaW5WYWx1ZSgpOwpAQCAtMzE3NTAsNiArMzI1NDMsNyBAQAogICAgIGN0b3IgcHVibGljIFByb2dyZXNzQmFyKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBQcm9ncmVzc0JhcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgUHJvZ3Jlc3NCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgUHJvZ3Jlc3NCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZ2V0SW5kZXRlcm1pbmF0ZURyYXdhYmxlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkludGVycG9sYXRvciBnZXRJbnRlcnBvbGF0b3IoKTsKICAgICBtZXRob2QgcHVibGljIHN5bmNocm9uaXplZCBpbnQgZ2V0TWF4KCk7CkBAIC0zMTc2MywxMSArMzI1NTcsMTMgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuUGFyY2VsYWJsZSBvblNhdmVJbnN0YW5jZVN0YXRlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRJbmRldGVybWluYXRlKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRJbmRldGVybWluYXRlRHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEluZGV0ZXJtaW5hdGVEcmF3YWJsZVRpbGVkKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRJbnRlcnBvbGF0b3IoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEludGVycG9sYXRvcihhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkludGVycG9sYXRvcik7CiAgICAgbWV0aG9kIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRNYXgoaW50KTsKICAgICBtZXRob2QgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldFByb2dyZXNzKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFByb2dyZXNzRHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFByb2dyZXNzRHJhd2FibGVUaWxlZChhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlKTsKICAgICBtZXRob2QgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldFNlY29uZGFyeVByb2dyZXNzKGludCk7CiAgIH0KIApAQCAtMzE3NzUsNiArMzI1NzEsNyBAQAogICAgIGN0b3IgcHVibGljIFF1aWNrQ29udGFjdEJhZGdlKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBRdWlja0NvbnRhY3RCYWRnZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgUXVpY2tDb250YWN0QmFkZ2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgUXVpY2tDb250YWN0QmFkZ2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYXNzaWduQ29udGFjdEZyb21FbWFpbChqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYXNzaWduQ29udGFjdEZyb21FbWFpbChqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuLCBhbmRyb2lkLm9zLkJ1bmRsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFzc2lnbkNvbnRhY3RGcm9tUGhvbmUoamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbik7CkBAIC0zMTc5MSw2ICszMjU4OCw3IEBACiAgICAgY3RvciBwdWJsaWMgUmFkaW9CdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFJhZGlvQnV0dG9uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBSYWRpb0J1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBSYWRpb0J1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICB9CiAKICAgcHVibGljIGNsYXNzIFJhZGlvR3JvdXAgZXh0ZW5kcyBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQgewpAQCAtMzE4MTYsNiArMzI2MTQsNyBAQAogCiAgIHB1YmxpYyBjbGFzcyBSYXRpbmdCYXIgZXh0ZW5kcyBhbmRyb2lkLndpZGdldC5BYnNTZWVrQmFyIHsKICAgICBjdG9yIHB1YmxpYyBSYXRpbmdCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgUmF0aW5nQmFyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgUmF0aW5nQmFyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBSYXRpbmdCYXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE51bVN0YXJzKCk7CkBAIC0zMTgzOCw2ICszMjYzNyw3IEBACiAgICAgY3RvciBwdWJsaWMgUmVsYXRpdmVMYXlvdXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFJlbGF0aXZlTGF5b3V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBSZWxhdGl2ZUxheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBSZWxhdGl2ZUxheW91dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEdyYXZpdHkoKTsKICAgICBtZXRob2QgcHJvdGVjdGVkIHZvaWQgb25MYXlvdXQoYm9vbGVhbiwgaW50LCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0R3Jhdml0eShpbnQpOwpAQCAtMzE5ODYsNiArMzI3ODYsNyBAQAogICAgIGN0b3IgcHVibGljIFNjcm9sbFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFNjcm9sbFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFNjcm9sbFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgU2Nyb2xsVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBhcnJvd1Njcm9sbChpbnQpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgaW50IGNvbXB1dGVTY3JvbGxEZWx0YVRvR2V0Q2hpbGRSZWN0T25TY3JlZW4oYW5kcm9pZC5ncmFwaGljcy5SZWN0KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZXhlY3V0ZUtleUV2ZW50KGFuZHJvaWQudmlldy5LZXlFdmVudCk7CkBAIC0zMjAzMCw2ICszMjgzMSw4IEBACiAgIHB1YmxpYyBjbGFzcyBTZWFyY2hWaWV3IGV4dGVuZHMgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0IGltcGxlbWVudHMgYW5kcm9pZC52aWV3LkNvbGxhcHNpYmxlQWN0aW9uVmlldyB7CiAgICAgY3RvciBwdWJsaWMgU2VhcmNoVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgU2VhcmNoVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CisgICAgY3RvciBwdWJsaWMgU2VhcmNoVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBTZWFyY2hWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0SW1lT3B0aW9ucygpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldElucHV0VHlwZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE1heFdpZHRoKCk7CkBAIC0zMjA4NCw2ICszMjg4Nyw3IEBACiAgICAgY3RvciBwdWJsaWMgU2Vla0JhcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgU2Vla0JhcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgY3RvciBwdWJsaWMgU2Vla0JhcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBTZWVrQmFyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE9uU2Vla0JhckNoYW5nZUxpc3RlbmVyKGFuZHJvaWQud2lkZ2V0LlNlZWtCYXIuT25TZWVrQmFyQ2hhbmdlTGlzdGVuZXIpOwogICB9CiAKQEAgLTMyMTg1LDYgKzMyOTg5LDcgQEAKICAgcHVibGljIGRlcHJlY2F0ZWQgY2xhc3MgU2xpZGluZ0RyYXdlciBleHRlbmRzIGFuZHJvaWQudmlldy5WaWV3R3JvdXAgewogICAgIGN0b3IgcHVibGljIFNsaWRpbmdEcmF3ZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFNsaWRpbmdEcmF3ZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgU2xpZGluZ0RyYXdlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhbmltYXRlQ2xvc2UoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYW5pbWF0ZU9wZW4oKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYW5pbWF0ZVRvZ2dsZSgpOwpAQCAtMzIyMTksNiArMzMwMjQsNyBAQAogICB9CiAKICAgcHVibGljIGZpbmFsIGNsYXNzIFNwYWNlIGV4dGVuZHMgYW5kcm9pZC52aWV3LlZpZXcgeworICAgIGN0b3IgcHVibGljIFNwYWNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgU3BhY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CiAgICAgY3RvciBwdWJsaWMgU3BhY2UoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFNwYWNlKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKQEAgLTMyMjMwLDYgKzMzMDM2LDcgQEAKICAgICBjdG9yIHB1YmxpYyBTcGlubmVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBTcGlubmVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIFNwaW5uZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBTcGlubmVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXREcm9wRG93bkhvcml6b250YWxPZmZzZXQoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXREcm9wRG93blZlcnRpY2FsT2Zmc2V0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0RHJvcERvd25XaWR0aCgpOwpAQCAtMzIyNTcsMTIgKzMzMDY0LDE0IEBACiAgICAgY3RvciBwdWJsaWMgU3RhY2tWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBTdGFja1ZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFN0YWNrVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBTdGFja1ZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBTd2l0Y2ggZXh0ZW5kcyBhbmRyb2lkLndpZGdldC5Db21wb3VuZEJ1dHRvbiB7CiAgICAgY3RvciBwdWJsaWMgU3dpdGNoKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBTd2l0Y2goYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFN3aXRjaChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBTd2l0Y2goYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRTd2l0Y2hNaW5XaWR0aCgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFN3aXRjaFBhZGRpbmcoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5DaGFyU2VxdWVuY2UgZ2V0VGV4dE9mZigpOwpAQCAtMzIyODgsNiArMzMwOTcsOCBAQAogICBwdWJsaWMgY2xhc3MgVGFiSG9zdCBleHRlbmRzIGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0IGltcGxlbWVudHMgYW5kcm9pZC52aWV3LlZpZXdUcmVlT2JzZXJ2ZXIuT25Ub3VjaE1vZGVDaGFuZ2VMaXN0ZW5lciB7CiAgICAgY3RvciBwdWJsaWMgVGFiSG9zdChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgVGFiSG9zdChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CisgICAgY3RvciBwdWJsaWMgVGFiSG9zdChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBUYWJIb3N0KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkZFRhYihhbmRyb2lkLndpZGdldC5UYWJIb3N0LlRhYlNwZWMpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjbGVhckFsbFRhYnMoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRDdXJyZW50VGFiKCk7CkBAIC0zMjMyNyw2ICszMzEzOCw3IEBACiAgICAgY3RvciBwdWJsaWMgVGFiV2lkZ2V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBUYWJXaWRnZXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFRhYldpZGdldChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBUYWJXaWRnZXQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZGlzcGF0Y2hEcmF3KGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZm9jdXNDdXJyZW50VGFiKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuVmlldyBnZXRDaGlsZFRhYlZpZXdBdChpbnQpOwpAQCAtMzIzODksNiArMzMyMDEsNyBAQAogICAgIGN0b3IgcHVibGljIFRleHRDbG9jayhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgVGV4dENsb2NrKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBjdG9yIHB1YmxpYyBUZXh0Q2xvY2soYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgVGV4dENsb2NrKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldEZvcm1hdDEySG91cigpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBnZXRGb3JtYXQyNEhvdXIoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0VGltZVpvbmUoKTsKQEAgLTMyNDExLDYgKzMzMjI0LDcgQEAKICAgICBjdG9yIHB1YmxpYyBUZXh0VmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgVGV4dFZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFRleHRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQpOworICAgIGN0b3IgcHVibGljIFRleHRWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkZFRleHRDaGFuZ2VkTGlzdGVuZXIoYW5kcm9pZC50ZXh0LlRleHRXYXRjaGVyKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgYXBwZW5kKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhcHBlbmQoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSwgaW50LCBpbnQpOwpAQCAtMzI2MTgsNiArMzM0MzIsNyBAQAogICAgIGN0b3IgcHVibGljIFRpbWVQaWNrZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFRpbWVQaWNrZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFRpbWVQaWNrZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgVGltZVBpY2tlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkludGVnZXIgZ2V0Q3VycmVudEhvdXIoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5JbnRlZ2VyIGdldEN1cnJlbnRNaW51dGUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXMyNEhvdXJWaWV3KCk7CkBAIC0zMjY1NSw2ICszMzQ3MCw3IEBACiAgIH0KIAogICBwdWJsaWMgY2xhc3MgVG9nZ2xlQnV0dG9uIGV4dGVuZHMgYW5kcm9pZC53aWRnZXQuQ29tcG91bmRCdXR0b24geworICAgIGN0b3IgcHVibGljIFRvZ2dsZUJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIGN0b3IgcHVibGljIFRvZ2dsZUJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBUb2dnbGVCdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFRvZ2dsZUJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CkBAIC0zMjY2OCw2ICszMzQ4NCw3IEBACiAgICAgY3RvciBwdWJsaWMgVHdvTGluZUxpc3RJdGVtKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBUd29MaW5lTGlzdEl0ZW0oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFR3b0xpbmVMaXN0SXRlbShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBUd29MaW5lTGlzdEl0ZW0oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3IGdldFRleHQxKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLndpZGdldC5UZXh0VmlldyBnZXRUZXh0MigpOwogICB9CkBAIC0zMjY3Niw2ICszMzQ5Myw3IEBACiAgICAgY3RvciBwdWJsaWMgVmlkZW9WaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBWaWRlb1ZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFZpZGVvVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50KTsKKyAgICBjdG9yIHB1YmxpYyBWaWRlb1ZpZXcoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkU3VidGl0bGVTb3VyY2UoamF2YS5pby5JbnB1dFN0cmVhbSwgYW5kcm9pZC5tZWRpYS5NZWRpYUZvcm1hdCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGNhblBhdXNlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGNhblNlZWtCYWNrd2FyZCgpOwpAQCAtMzI3NTAsNiArMzM1NjgsNyBAQAogICAgIGN0b3IgcHVibGljIFpvb21CdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHVibGljIFpvb21CdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQpOwogICAgIGN0b3IgcHVibGljIFpvb21CdXR0b24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQsIGludCk7CisgICAgY3RvciBwdWJsaWMgWm9vbUJ1dHRvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvbkxvbmdDbGljayhhbmRyb2lkLnZpZXcuVmlldyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFpvb21TcGVlZChsb25nKTsKICAgfQpAQCAtMzI3ODksNiArMzM2MDgsMjQgQEAKIAogfQogCitwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueSB7CisKKyAgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBJVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lciBpbXBsZW1lbnRzIGFuZHJvaWQub3MuSUludGVyZmFjZSB7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uQ2FsbEVuZGVkKGludCkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvbkNhbGxFc3RhYmxpc2hlZCgpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25DYWxsUHJvdmlkZXJBdHRhY2hlZChjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuSVRoaXJkUGFydHlDYWxsUHJvdmlkZXIpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25SaW5naW5nU3RhcnRlZCgpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKKyAgfQorCisgIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgSVRoaXJkUGFydHlDYWxsUHJvdmlkZXIgaW1wbGVtZW50cyBhbmRyb2lkLm9zLklJbnRlcmZhY2UgeworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBoYW5ndXAoKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGluY29taW5nQ2FsbEFjY2VwdCgpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgbXV0ZShib29sZWFuKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNlbmREdG1mKGNoYXIpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKKyAgfQorCit9CisKIHBhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbCB7CiAKICAgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBQcmVkaWNhdGUgewpAQCAtNDI3MTYsMTEgKzQzNTUzLDExIEBACiAgIH0KIAogICBwdWJsaWMgY2xhc3MgQ29uY3VycmVudEhhc2hNYXAgZXh0ZW5kcyBqYXZhLnV0aWwuQWJzdHJhY3RNYXAgaW1wbGVtZW50cyBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50TWFwIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICBjdG9yIHB1YmxpYyBDb25jdXJyZW50SGFzaE1hcChpbnQsIGZsb2F0LCBpbnQpOwotICAgIGN0b3IgcHVibGljIENvbmN1cnJlbnRIYXNoTWFwKGludCwgZmxvYXQpOwotICAgIGN0b3IgcHVibGljIENvbmN1cnJlbnRIYXNoTWFwKGludCk7CiAgICAgY3RvciBwdWJsaWMgQ29uY3VycmVudEhhc2hNYXAoKTsKKyAgICBjdG9yIHB1YmxpYyBDb25jdXJyZW50SGFzaE1hcChpbnQpOwogICAgIGN0b3IgcHVibGljIENvbmN1cnJlbnRIYXNoTWFwKGphdmEudXRpbC5NYXA8PyBleHRlbmRzIEssID8gZXh0ZW5kcyBWPik7CisgICAgY3RvciBwdWJsaWMgQ29uY3VycmVudEhhc2hNYXAoaW50LCBmbG9hdCk7CisgICAgY3RvciBwdWJsaWMgQ29uY3VycmVudEhhc2hNYXAoaW50LCBmbG9hdCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gY29udGFpbnMoamF2YS5sYW5nLk9iamVjdCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuRW51bWVyYXRpb248Vj4gZWxlbWVudHMoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5TZXQ8amF2YS51dGlsLk1hcC5FbnRyeTxLLCBWPj4gZW50cnlTZXQoKTsKZGlmZiAtLWdpdCBhL2NtZHMvYW0vc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL2FtL0FtLmphdmEgYi9jbWRzL2FtL3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9hbS9BbS5qYXZhCmluZGV4IGYzNDMyYTAuLjAzNDRkMjYgMTAwNjQ0Ci0tLSBhL2NtZHMvYW0vc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL2FtL0FtLmphdmEKKysrIGIvY21kcy9hbS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvYW0vQW0uamF2YQpAQCAtMTksNyArMTksNyBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5jb21tYW5kcy5hbTsKIAogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJbmZvOworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0JveEluZm87CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyTmF0aXZlOwogaW1wb3J0IGFuZHJvaWQuYXBwLklBY3Rpdml0eUNvbnRyb2xsZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuSUFjdGl2aXR5TWFuYWdlcjsKQEAgLTMxLDcgKzMxLDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CkBAIC0xMDcsMTEgKzEwNiwxMSBAQAogICAgICAgICAgICAgICAgICIgICAgICAgYW0gdG8taW50ZW50LXVyaSBbSU5URU5UXVxuIiArCiAgICAgICAgICAgICAgICAgIiAgICAgICBhbSBzd2l0Y2gtdXNlciA8VVNFUl9JRD5cbiIgKwogICAgICAgICAgICAgICAgICIgICAgICAgYW0gc3RvcC11c2VyIDxVU0VSX0lEPlxuIiArCi0gICAgICAgICAgICAgICAgIiAgICAgICBhbSBzdGFjayBjcmVhdGUgPFRBU0tfSUQ+XG4iICsKKyAgICAgICAgICAgICAgICAiICAgICAgIGFtIHN0YWNrIGNyZWF0ZSA8VEFTS19JRD4gPFJFTEFUSVZFX1NUQUNLX0JPWF9JRD4gPFBPU0lUSU9OPiA8V0VJR0hUPlxuIiArCiAgICAgICAgICAgICAgICAgIiAgICAgICBhbSBzdGFjayBtb3ZldGFzayA8VEFTS19JRD4gPFNUQUNLX0lEPiBbdHJ1ZXxmYWxzZV1cbiIgKwotICAgICAgICAgICAgICAgICIgICAgICAgYW0gc3RhY2sgcmVzaXplIDxTVEFDS19JRD4gPExFRlQsVE9QLFJJR0hULEJPVFRPTT5cbiIgKwotICAgICAgICAgICAgICAgICIgICAgICAgYW0gc3RhY2sgbGlzdFxuIiArCi0gICAgICAgICAgICAgICAgIiAgICAgICBhbSBzdGFjayBpbmZvIDxTVEFDS19JRD5cbiIgKworICAgICAgICAgICAgICAgICIgICAgICAgYW0gc3RhY2sgcmVzaXplIDxTVEFDS19JRD4gPFdFSUdIVD5cbiIgKworICAgICAgICAgICAgICAgICIgICAgICAgYW0gc3RhY2sgYm94ZXNcbiIgKworICAgICAgICAgICAgICAgICIgICAgICAgYW0gc3RhY2sgYm94IDxTVEFDS19CT1hfSUQ+XG4iICsKICAgICAgICAgICAgICAgICAiXG4iICsKICAgICAgICAgICAgICAgICAiYW0gc3RhcnQ6IHN0YXJ0IGFuIEFjdGl2aXR5LiAgT3B0aW9ucyBhcmU6XG4iICsKICAgICAgICAgICAgICAgICAiICAgIC1EOiBlbmFibGUgZGVidWdnaW5nXG4iICsKQEAgLTIwNSwxNiArMjA0LDI0IEBACiAgICAgICAgICAgICAgICAgImFtIHN0b3AtdXNlcjogc3RvcCBleGVjdXRpb24gb2YgVVNFUl9JRCwgbm90IGFsbG93aW5nIGl0IHRvIHJ1biBhbnlcbiIgKwogICAgICAgICAgICAgICAgICIgIGNvZGUgdW50aWwgYSBsYXRlciBleHBsaWNpdCBzd2l0Y2ggdG8gaXQuXG4iICsKICAgICAgICAgICAgICAgICAiXG4iICsKLSAgICAgICAgICAgICAgICAiYW0gc3RhY2sgY3JlYXRlOiBjcmVhdGUgYSBuZXcgc3RhY2sgY29udGFpbmluZyA8VEFTS19JRD4gd2hpY2ggbXVzdCBleGlzdFxuIiArCisgICAgICAgICAgICAgICAgImFtIHN0YWNrIGNyZWF0ZTogY3JlYXRlIGEgbmV3IHN0YWNrIHJlbGF0aXZlIHRvIGFuIGV4aXN0aW5nIG9uZS5cbiIgKworICAgICAgICAgICAgICAgICIgICA8VEFTS19JRD46IHRoZSB0YXNrIHRvIHBvcHVsYXRlIHRoZSBuZXcgc3RhY2sgd2l0aC4gTXVzdCBleGlzdC5cbiIgKworICAgICAgICAgICAgICAgICIgICA8UkVMQVRJVkVfU1RBQ0tfQk9YX0lEPjogZXhpc3Rpbmcgc3RhY2sgYm94J3MgaWQuXG4iICsKKyAgICAgICAgICAgICAgICAiICAgPFBPU0lUSU9OPjogMDogYmVmb3JlIDxSRUxBVElWRV9TVEFDS19CT1hfSUQ+LCBwZXIgUlRML0xUUiBjb25maWd1cmF0aW9uLFxuIiArCisgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgIDE6IGFmdGVyIDxSRUxBVElWRV9TVEFDS19CT1hfSUQ+LCBwZXIgUlRML0xUUiBjb25maWd1cmF0aW9uLFxuIiArCisgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgIDI6IHRvIGxlZnQgb2YgPFJFTEFUSVZFX1NUQUNLX0JPWF9JRD4sXG4iICsKKyAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgMzogdG8gcmlnaHQgb2YgPFJFTEFUSVZFX1NUQUNLX0JPWF9JRD4sIiArCisgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgIDQ6IGFib3ZlIDxSRUxBVElWRV9TVEFDS19CT1hfSUQ+LCA1OiBiZWxvdyA8UkVMQVRJVkVfU1RBQ0tfQk9YX0lEPlxuIiArCisgICAgICAgICAgICAgICAgIiAgIDxXRUlHSFQ+OiBmbG9hdCBiZXR3ZWVuIDAuMiBhbmQgMC44IGluY2x1c2l2ZS5cbiIgKwogICAgICAgICAgICAgICAgICJcbiIgKwogICAgICAgICAgICAgICAgICJhbSBzdGFjayBtb3ZldGFzazogbW92ZSA8VEFTS19JRD4gZnJvbSBpdHMgY3VycmVudCBzdGFjayB0byB0aGUgdG9wICh0cnVlKSBvciIgKwogICAgICAgICAgICAgICAgICIgICBib3R0b20gKGZhbHNlKSBvZiA8U1RBQ0tfSUQ+LlxuIiArCiAgICAgICAgICAgICAgICAgIlxuIiArCi0gICAgICAgICAgICAgICAgImFtIHN0YWNrIHJlc2l6ZTogY2hhbmdlIDxTVEFDS19JRD4gc2l6ZSBhbmQgcG9zaXRpb24gdG8gPExFRlQsVE9QLFJJR0hULEJPVFRPTT4uXG4iICsKKyAgICAgICAgICAgICAgICAiYW0gc3RhY2sgcmVzaXplOiBjaGFuZ2UgPFNUQUNLX0lEPiByZWxhdGl2ZSBzaXplIHRvIG5ldyA8V0VJR0hUPi5cbiIgKwogICAgICAgICAgICAgICAgICJcbiIgKwotICAgICAgICAgICAgICAgICJhbSBzdGFjayBsaXN0OiBsaXN0IGFsbCBvZiB0aGUgYWN0aXZpdHkgc3RhY2tzIGFuZCB0aGVpciBzaXplcy5cbiIgKworICAgICAgICAgICAgICAgICJhbSBzdGFjayBib3hlczogbGlzdCB0aGUgaGllcmFyY2h5IG9mIHN0YWNrIGJveGVzIGFuZCB0aGVpciBjb250ZW50cy5cbiIgKwogICAgICAgICAgICAgICAgICJcbiIgKwotICAgICAgICAgICAgICAgICJhbSBzdGFjayBpbmZvOiBkaXNwbGF5IHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhY3Rpdml0eSBzdGFjayA8U1RBQ0tfSUQ+LlxuIiArCisgICAgICAgICAgICAgICAgImFtIHN0YWNrIGJveDogbGlzdCB0aGUgaGllcmFyY2h5IG9mIHN0YWNrIGJveGVzIHJvb3RlZCBhdCA8U1RBQ0tfQk9YX0lEPi5cbiIgKwogICAgICAgICAgICAgICAgICJcbiIgKwogICAgICAgICAgICAgICAgICI8SU5URU5UPiBzcGVjaWZpY2F0aW9ucyBpbmNsdWRlIHRoZXNlIGZsYWdzIGFuZCBhcmd1bWVudHM6XG4iICsKICAgICAgICAgICAgICAgICAiICAgIFstYSA8QUNUSU9OPl0gWy1kIDxEQVRBX1VSST5dIFstdCA8TUlNRV9UWVBFPl1cbiIgKwpAQCAtMTU0NCwxMSArMTU1MSwxMSBAQAogICAgICAgICB9IGVsc2UgaWYgKG9wLmVxdWFscygibW92ZXRhc2siKSkgewogICAgICAgICAgICAgcnVuU3RhY2tNb3ZlVGFzaygpOwogICAgICAgICB9IGVsc2UgaWYgKG9wLmVxdWFscygicmVzaXplIikpIHsKLSAgICAgICAgICAgIHJ1blN0YWNrUmVzaXplKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAob3AuZXF1YWxzKCJsaXN0IikpIHsKLSAgICAgICAgICAgIHJ1blN0YWNrTGlzdCgpOwotICAgICAgICB9IGVsc2UgaWYgKG9wLmVxdWFscygiaW5mbyIpKSB7Ci0gICAgICAgICAgICBydW5TdGFja0luZm8oKTsKKyAgICAgICAgICAgIHJ1blN0YWNrQm94UmVzaXplKCk7CisgICAgICAgIH0gZWxzZSBpZiAob3AuZXF1YWxzKCJib3hlcyIpKSB7CisgICAgICAgICAgICBydW5TdGFja0JveGVzKCk7CisgICAgICAgIH0gZWxzZSBpZiAob3AuZXF1YWxzKCJib3giKSkgeworICAgICAgICAgICAgcnVuU3RhY2tCb3hJbmZvKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzaG93RXJyb3IoIkVycm9yOiB1bmtub3duIGNvbW1hbmQgJyIgKyBvcCArICInIik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTU4LDkgKzE1NjUsMTUgQEAKICAgICBwcml2YXRlIHZvaWQgcnVuU3RhY2tDcmVhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIHRhc2tJZFN0ciA9IG5leHRBcmdSZXF1aXJlZCgpOwogICAgICAgICBpbnQgdGFza0lkID0gSW50ZWdlci52YWx1ZU9mKHRhc2tJZFN0cik7CisgICAgICAgIFN0cmluZyByZWxhdGl2ZVRvU3RyID0gbmV4dEFyZ1JlcXVpcmVkKCk7CisgICAgICAgIGludCByZWxhdGl2ZVRvID0gSW50ZWdlci52YWx1ZU9mKHJlbGF0aXZlVG9TdHIpOworICAgICAgICBTdHJpbmcgcG9zaXRpb25TdHIgPSBuZXh0QXJnUmVxdWlyZWQoKTsKKyAgICAgICAgaW50IHBvc2l0aW9uID0gSW50ZWdlci52YWx1ZU9mKHBvc2l0aW9uU3RyKTsKKyAgICAgICAgU3RyaW5nIHdlaWdodFN0ciA9IG5leHRBcmdSZXF1aXJlZCgpOworICAgICAgICBmbG9hdCB3ZWlnaHQgPSBGbG9hdC52YWx1ZU9mKHdlaWdodFN0cik7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGludCBzdGFja0lkID0gbUFtLmNyZWF0ZVN0YWNrKHRhc2tJZCk7CisgICAgICAgICAgICBpbnQgc3RhY2tJZCA9IG1BbS5jcmVhdGVTdGFjayh0YXNrSWQsIHJlbGF0aXZlVG8sIHBvc2l0aW9uLCB3ZWlnaHQpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGVTdGFjayByZXR1cm5lZCBuZXcgc3RhY2tJZD0iICsgc3RhY2tJZCArICJcblxuIik7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIH0KQEAgLTE1ODgsNDAgKzE2MDEsMzQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBydW5TdGFja1Jlc2l6ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTdHJpbmcgc3RhY2tJZFN0ciA9IG5leHRBcmdSZXF1aXJlZCgpOwotICAgICAgICBpbnQgc3RhY2tJZCA9IEludGVnZXIudmFsdWVPZihzdGFja0lkU3RyKTsKLSAgICAgICAgU3RyaW5nIGxlZnRTdHIgPSBuZXh0QXJnUmVxdWlyZWQoKTsKLSAgICAgICAgaW50IGxlZnQgPSBJbnRlZ2VyLnZhbHVlT2YobGVmdFN0cik7Ci0gICAgICAgIFN0cmluZyB0b3BTdHIgPSBuZXh0QXJnUmVxdWlyZWQoKTsKLSAgICAgICAgaW50IHRvcCA9IEludGVnZXIudmFsdWVPZih0b3BTdHIpOwotICAgICAgICBTdHJpbmcgcmlnaHRTdHIgPSBuZXh0QXJnUmVxdWlyZWQoKTsKLSAgICAgICAgaW50IHJpZ2h0ID0gSW50ZWdlci52YWx1ZU9mKHJpZ2h0U3RyKTsKLSAgICAgICAgU3RyaW5nIGJvdHRvbVN0ciA9IG5leHRBcmdSZXF1aXJlZCgpOwotICAgICAgICBpbnQgYm90dG9tID0gSW50ZWdlci52YWx1ZU9mKGJvdHRvbVN0cik7CisgICAgcHJpdmF0ZSB2b2lkIHJ1blN0YWNrQm94UmVzaXplKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBzdGFja0JveElkU3RyID0gbmV4dEFyZ1JlcXVpcmVkKCk7CisgICAgICAgIGludCBzdGFja0JveElkID0gSW50ZWdlci52YWx1ZU9mKHN0YWNrQm94SWRTdHIpOworICAgICAgICBTdHJpbmcgd2VpZ2h0U3RyID0gbmV4dEFyZ1JlcXVpcmVkKCk7CisgICAgICAgIGZsb2F0IHdlaWdodCA9IEZsb2F0LnZhbHVlT2Yod2VpZ2h0U3RyKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgbUFtLnJlc2l6ZVN0YWNrKHN0YWNrSWQsIG5ldyBSZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkpOworICAgICAgICAgICAgbUFtLnJlc2l6ZVN0YWNrQm94KHN0YWNrQm94SWQsIHdlaWdodCk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgcnVuU3RhY2tMaXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcHJpdmF0ZSB2b2lkIHJ1blN0YWNrQm94ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIExpc3Q8U3RhY2tJbmZvPiBzdGFja3MgPSBtQW0uZ2V0QWxsU3RhY2tJbmZvcygpOwotICAgICAgICAgICAgZm9yIChTdGFja0luZm8gaW5mbyA6IHN0YWNrcykgeworICAgICAgICAgICAgTGlzdDxTdGFja0JveEluZm8+IHN0YWNrQm94ZXMgPSBtQW0uZ2V0U3RhY2tCb3hlcygpOworICAgICAgICAgICAgZm9yIChTdGFja0JveEluZm8gaW5mbyA6IHN0YWNrQm94ZXMpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaW5mbyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgcnVuU3RhY2tJbmZvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcHJpdmF0ZSB2b2lkIHJ1blN0YWNrQm94SW5mbygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICB0cnkgewotICAgICAgICAgICAgU3RyaW5nIHN0YWNrSWRTdHIgPSBuZXh0QXJnUmVxdWlyZWQoKTsKLSAgICAgICAgICAgIGludCBzdGFja0lkID0gSW50ZWdlci52YWx1ZU9mKHN0YWNrSWRTdHIpOwotICAgICAgICAgICAgU3RhY2tJbmZvIGluZm8gPSBtQW0uZ2V0U3RhY2tJbmZvKHN0YWNrSWQpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGluZm8pOworICAgICAgICAgICAgU3RyaW5nIHN0YWNrQm94SWRTdHIgPSBuZXh0QXJnUmVxdWlyZWQoKTsKKyAgICAgICAgICAgIGludCBzdGFja0JveElkID0gSW50ZWdlci52YWx1ZU9mKHN0YWNrQm94SWRTdHIpOworICAgICAgICAgICAgU3RhY2tCb3hJbmZvIHN0YWNrQm94SW5mbyA9IG1BbS5nZXRTdGFja0JveEluZm8oc3RhY2tCb3hJZCk7IAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHN0YWNrQm94SW5mbyk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9jbWRzL2Jvb3RhbmltYXRpb24vQm9vdEFuaW1hdGlvbi5jcHAgYi9jbWRzL2Jvb3RhbmltYXRpb24vQm9vdEFuaW1hdGlvbi5jcHAKaW5kZXggNWMyNjVhYi4uYTdjZWQ0NCAxMDA2NDQKLS0tIGEvY21kcy9ib290YW5pbWF0aW9uL0Jvb3RBbmltYXRpb24uY3BwCisrKyBiL2NtZHMvYm9vdGFuaW1hdGlvbi9Cb290QW5pbWF0aW9uLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZS0+bmFtZSk7CiAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlLT5uYW1lKTsKIAotICAgIHN3aXRjaCAoYml0bWFwLmdldENvbmZpZygpKSB7CisgICAgc3dpdGNoIChiaXRtYXAuY29uZmlnKCkpIHsKICAgICAgICAgY2FzZSBTa0JpdG1hcDo6a0E4X0NvbmZpZzoKICAgICAgICAgICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9BTFBIQSwgdywgaCwgMCwgR0xfQUxQSEEsCiAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIHApOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgaWYgKHR3IDwgdykgdHcgPDw9IDE7CiAgICAgaWYgKHRoIDwgaCkgdGggPDw9IDE7CiAKLSAgICBzd2l0Y2ggKGJpdG1hcC5nZXRDb25maWcoKSkgeworICAgIHN3aXRjaCAoYml0bWFwLmNvbmZpZygpKSB7CiAgICAgICAgIGNhc2UgU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnOgogICAgICAgICAgICAgaWYgKHR3ICE9IHcgfHwgdGggIT0gaCkgewogICAgICAgICAgICAgICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCB0dywgdGgsIDAsIEdMX1JHQkEsCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50QXV0aGVudGljYXRvckFjdGl2aXR5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50QXV0aGVudGljYXRvckFjdGl2aXR5LmphdmEKaW5kZXggNmE1NWRkZi4uZjkyODRlNiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYWNjb3VudHMvQWNjb3VudEF1dGhlbnRpY2F0b3JBY3Rpdml0eS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FjY291bnRzL0FjY291bnRBdXRoZW50aWNhdG9yQWN0aXZpdHkuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLmFjY291bnRzOwogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckZ1dHVyZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJGdXR1cmUuamF2YQppbmRleCBhMWFiMDBjLi5hZjAwYTA4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlckZ1dHVyZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyRnV0dXJlLmphdmEKQEAgLTE1LDEwICsxNSw3IEBACiAgKi8KIHBhY2thZ2UgYW5kcm9pZC5hY2NvdW50czsKIAotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZTsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FjY291bnRzL0dyYW50Q3JlZGVudGlhbHNQZXJtaXNzaW9uQWN0aXZpdHkuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FjY291bnRzL0dyYW50Q3JlZGVudGlhbHNQZXJtaXNzaW9uQWN0aXZpdHkuamF2YQppbmRleCA4YjAxYzZhLi4xMmIyYjljIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9HcmFudENyZWRlbnRpYWxzUGVybWlzc2lvbkFjdGl2aXR5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYWNjb3VudHMvR3JhbnRDcmVkZW50aWFsc1Blcm1pc3Npb25BY3Rpdml0eS5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiBwYWNrYWdlIGFuZHJvaWQuYWNjb3VudHM7CiAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVnaXN0ZXJlZFNlcnZpY2VzQ2FjaGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CkBAIC0zMCw3ICsyOSw2IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuQXV0aGVudGljYXRvcjsKIAogLyoqCiAgKiBAaGlkZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9ySW5mbGF0ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9BbmltYXRvckluZmxhdGVyLmphdmEKaW5kZXggZDc1M2UzMi4uMjAyMzZhYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdG9ySW5mbGF0ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0b3JJbmZsYXRlci5qYXZhCkBAIC0yMTUsNyArMjE1LDcgQEAKICAgICAgICAgICAgICAgICAodG9UeXBlIDw9IFR5cGVkVmFsdWUuVFlQRV9MQVNUX0NPTE9SX0lOVCkpKSB7CiAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGNvbG9yczogaWdub3JlIHZhbHVlVHlwZSBhbmQgZ2V0IGludHMKICAgICAgICAgICAgIGdldEZsb2F0cyA9IGZhbHNlOwotICAgICAgICAgICAgYW5pbS5zZXRFdmFsdWF0b3IobmV3IEFyZ2JFdmFsdWF0b3IoKSk7CisgICAgICAgICAgICBldmFsdWF0b3IgPSBBcmdiRXZhbHVhdG9yLmdldEluc3RhbmNlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZ2V0RmxvYXRzKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vQXJnYkV2YWx1YXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL0FyZ2JFdmFsdWF0b3IuamF2YQppbmRleCA3MTdhM2Q5Li5lZDA3MTk1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vQXJnYkV2YWx1YXRvci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9BcmdiRXZhbHVhdG9yLmphdmEKQEAgLTIxLDYgKzIxLDE5IEBACiAgKiB2YWx1ZXMgdGhhdCByZXByZXNlbnQgQVJHQiBjb2xvcnMuCiAgKi8KIHB1YmxpYyBjbGFzcyBBcmdiRXZhbHVhdG9yIGltcGxlbWVudHMgVHlwZUV2YWx1YXRvciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXJnYkV2YWx1YXRvciBzSW5zdGFuY2UgPSBuZXcgQXJnYkV2YWx1YXRvcigpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiA8Y29kZT5BcmdiRXZhbHVhdG9yPC9jb2RlPiB0aGF0IG1heSBiZSB1c2VkIGluCisgICAgICoge0BsaW5rIFZhbHVlQW5pbWF0b3Ijc2V0RXZhbHVhdG9yKFR5cGVFdmFsdWF0b3IpfS4gVGhlIHNhbWUgaW5zdGFuY2UgbWF5CisgICAgICogYmUgdXNlZCBpbiBtdWx0aXBsZSA8Y29kZT5BbmltYXRvcjwvY29kZT5zIGJlY2F1c2UgaXQgaG9sZHMgbm8gc3RhdGUuCisgICAgICogQHJldHVybiBBbiBpbnN0YW5jZSBvZiA8Y29kZT5BcmdiRXZhbHV0b3I8L2NvZGU+LgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEFyZ2JFdmFsdWF0b3IgZ2V0SW5zdGFuY2UoKSB7CisgICAgICAgIHJldHVybiBzSW5zdGFuY2U7CisgICAgfQogCiAgICAgLyoqCiAgICAgICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjYWxjdWxhdGVkIGluLWJldHdlZW4gdmFsdWUgZm9yIGEgY29sb3IKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9GbG9hdEFycmF5RXZhbHVhdG9yLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vRmxvYXRBcnJheUV2YWx1YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZTExOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vRmxvYXRBcnJheUV2YWx1YXRvci5qYXZhCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYW5pbWF0aW9uOworCisvKioKKyAqIFRoaXMgZXZhbHVhdG9yIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gdHlwZSBpbnRlcnBvbGF0aW9uIGJldHdlZW4gPGNvZGU+ZmxvYXRbXTwvY29kZT4gdmFsdWVzLgorICogRWFjaCBpbmRleCBpbnRvIHRoZSBhcnJheSBpcyB0cmVhdGVkIGFzIGEgc2VwYXJhdGUgdmFsdWUgdG8gaW50ZXJwb2xhdGUuIEZvciBleGFtcGxlLAorICogZXZhbHVhdGluZyA8Y29kZT57MTAwLCAyMDB9PC9jb2RlPiBhbmQgPGNvZGU+ezMwMCwgNDAwfTwvY29kZT4gd2lsbCBpbnRlcnBvbGF0ZSB0aGUgdmFsdWUgYXQKKyAqIHRoZSBmaXJzdCBpbmRleCBiZXR3ZWVuIDEwMCBhbmQgMzAwIGFuZCB0aGUgdmFsdWUgYXQgdGhlIHNlY29uZCBpbmRleCB2YWx1ZSBiZXR3ZWVuIDIwMCBhbmQgNDAwLgorICovCitwdWJsaWMgY2xhc3MgRmxvYXRBcnJheUV2YWx1YXRvciBpbXBsZW1lbnRzIFR5cGVFdmFsdWF0b3I8ZmxvYXRbXT4geworCisgICAgcHJpdmF0ZSBmbG9hdFtdIG1BcnJheTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIEZsb2F0QXJyYXlFdmFsdWF0b3IgdGhhdCBkb2VzIG5vdCByZXVzZSB0aGUgYW5pbWF0ZWQgdmFsdWUuIENhcmUgbXVzdCBiZSB0YWtlbgorICAgICAqIHdoZW4gdXNpbmcgdGhpcyBvcHRpb24gYmVjYXVzZSBvbiBldmVyeSBldmFsdWF0aW9uIGEgbmV3IDxjb2RlPmZsb2F0W108L2NvZGU+IHdpbGwgYmUKKyAgICAgKiBhbGxvY2F0ZWQuCisgICAgICoKKyAgICAgKiBAc2VlICNGbG9hdEFycmF5RXZhbHVhdG9yKGZsb2F0W10pCisgICAgICovCisgICAgcHVibGljIEZsb2F0QXJyYXlFdmFsdWF0b3IoKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgRmxvYXRBcnJheUV2YWx1YXRvciB0aGF0IHJldXNlcyA8Y29kZT5yZXVzZUFycmF5PC9jb2RlPiBmb3IgZXZlcnkgZXZhbHVhdGUoKSBjYWxsLgorICAgICAqIENhdXRpb24gbXVzdCBiZSB0YWtlbiB0byBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbQorICAgICAqIHtAbGluayBhbmRyb2lkLmFuaW1hdGlvbi5WYWx1ZUFuaW1hdG9yI2dldEFuaW1hdGVkVmFsdWUoKX0gaXMgbm90IGNhY2hlZCwgbW9kaWZpZWQsIG9yCisgICAgICogdXNlZCBhY3Jvc3MgdGhyZWFkcy4gVGhlIHZhbHVlIHdpbGwgYmUgbW9kaWZpZWQgb24gZWFjaCA8Y29kZT5ldmFsdWF0ZSgpPC9jb2RlPiBjYWxsLgorICAgICAqCisgICAgICogQHBhcmFtIHJldXNlQXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeSBhbmQgcmV0dXJuIGZyb20gPGNvZGU+ZXZhbHVhdGU8L2NvZGU+LgorICAgICAqLworICAgIHB1YmxpYyBGbG9hdEFycmF5RXZhbHVhdG9yKGZsb2F0W10gcmV1c2VBcnJheSkgeworICAgICAgICBtQXJyYXkgPSByZXVzZUFycmF5OworICAgIH0KKworICAgIC8qKgorICAgICAqIEludGVycG9sYXRlcyB0aGUgdmFsdWUgYXQgZWFjaCBpbmRleCBieSB0aGUgZnJhY3Rpb24uIElmCisgICAgICoge0BsaW5rICNGbG9hdEFycmF5RXZhbHVhdG9yKGZsb2F0W10pfSB3YXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyBvYmplY3QsCisgICAgICogPGNvZGU+cmV1c2VBcnJheTwvY29kZT4gd2lsbCBiZSByZXR1cm5lZCwgb3RoZXJ3aXNlIGEgbmV3IDxjb2RlPmZsb2F0W108L2NvZGU+CisgICAgICogd2lsbCBiZSByZXR1cm5lZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmcmFjdGlvbiAgIFRoZSBmcmFjdGlvbiBmcm9tIHRoZSBzdGFydGluZyB0byB0aGUgZW5kaW5nIHZhbHVlcworICAgICAqIEBwYXJhbSBzdGFydFZhbHVlIFRoZSBzdGFydCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gZW5kVmFsdWUgICBUaGUgZW5kIHZhbHVlLgorICAgICAqIEByZXR1cm4gQSA8Y29kZT5mbG9hdFtdPC9jb2RlPiB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgYW4gaW50ZXJwb2xhdGlvbiBiZXR3ZWVuCisgICAgICogICAgICAgICB0aGUgc2FtZSBpbmRleCBpbiBzdGFydFZhbHVlIGFuZCBlbmRWYWx1ZS4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgZmxvYXRbXSBldmFsdWF0ZShmbG9hdCBmcmFjdGlvbiwgZmxvYXRbXSBzdGFydFZhbHVlLCBmbG9hdFtdIGVuZFZhbHVlKSB7CisgICAgICAgIGZsb2F0W10gYXJyYXkgPSBtQXJyYXk7CisgICAgICAgIGlmIChhcnJheSA9PSBudWxsKSB7CisgICAgICAgICAgICBhcnJheSA9IG5ldyBmbG9hdFtzdGFydFZhbHVlLmxlbmd0aF07CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBmbG9hdCBzdGFydCA9IHN0YXJ0VmFsdWVbaV07CisgICAgICAgICAgICBmbG9hdCBlbmQgPSBlbmRWYWx1ZVtpXTsKKyAgICAgICAgICAgIGFycmF5W2ldID0gc3RhcnQgKyAoZnJhY3Rpb24gKiAoZW5kIC0gc3RhcnQpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL0ludEFycmF5RXZhbHVhdG9yLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vSW50QXJyYXlFdmFsdWF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2YxMGYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL0ludEFycmF5RXZhbHVhdG9yLmphdmEKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5hbmltYXRpb247CisKKy8qKgorICogVGhpcyBldmFsdWF0b3IgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSB0eXBlIGludGVycG9sYXRpb24gYmV0d2VlbiA8Y29kZT5pbnRbXTwvY29kZT4gdmFsdWVzLgorICogRWFjaCBpbmRleCBpbnRvIHRoZSBhcnJheSBpcyB0cmVhdGVkIGFzIGEgc2VwYXJhdGUgdmFsdWUgdG8gaW50ZXJwb2xhdGUuIEZvciBleGFtcGxlLAorICogZXZhbHVhdGluZyA8Y29kZT57MTAwLCAyMDB9PC9jb2RlPiBhbmQgPGNvZGU+ezMwMCwgNDAwfTwvY29kZT4gd2lsbCBpbnRlcnBvbGF0ZSB0aGUgdmFsdWUgYXQKKyAqIHRoZSBmaXJzdCBpbmRleCBiZXR3ZWVuIDEwMCBhbmQgMzAwIGFuZCB0aGUgdmFsdWUgYXQgdGhlIHNlY29uZCBpbmRleCB2YWx1ZSBiZXR3ZWVuIDIwMCBhbmQgNDAwLgorICovCitwdWJsaWMgY2xhc3MgSW50QXJyYXlFdmFsdWF0b3IgaW1wbGVtZW50cyBUeXBlRXZhbHVhdG9yPGludFtdPiB7CisKKyAgICBwcml2YXRlIGludFtdIG1BcnJheTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhbiBJbnRBcnJheUV2YWx1YXRvciB0aGF0IGRvZXMgbm90IHJldXNlIHRoZSBhbmltYXRlZCB2YWx1ZS4gQ2FyZSBtdXN0IGJlIHRha2VuCisgICAgICogd2hlbiB1c2luZyB0aGlzIG9wdGlvbiBiZWNhdXNlIG9uIGV2ZXJ5IGV2YWx1YXRpb24gYSBuZXcgPGNvZGU+aW50W108L2NvZGU+IHdpbGwgYmUKKyAgICAgKiBhbGxvY2F0ZWQuCisgICAgICoKKyAgICAgKiBAc2VlICNJbnRBcnJheUV2YWx1YXRvcihpbnRbXSkKKyAgICAgKi8KKyAgICBwdWJsaWMgSW50QXJyYXlFdmFsdWF0b3IoKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuIEludEFycmF5RXZhbHVhdG9yIHRoYXQgcmV1c2VzIDxjb2RlPnJldXNlQXJyYXk8L2NvZGU+IGZvciBldmVyeSBldmFsdWF0ZSgpIGNhbGwuCisgICAgICogQ2F1dGlvbiBtdXN0IGJlIHRha2VuIHRvIGVuc3VyZSB0aGF0IHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tCisgICAgICoge0BsaW5rIGFuZHJvaWQuYW5pbWF0aW9uLlZhbHVlQW5pbWF0b3IjZ2V0QW5pbWF0ZWRWYWx1ZSgpfSBpcyBub3QgY2FjaGVkLCBtb2RpZmllZCwgb3IKKyAgICAgKiB1c2VkIGFjcm9zcyB0aHJlYWRzLiBUaGUgdmFsdWUgd2lsbCBiZSBtb2RpZmllZCBvbiBlYWNoIDxjb2RlPmV2YWx1YXRlKCk8L2NvZGU+IGNhbGwuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmV1c2VBcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5IGFuZCByZXR1cm4gZnJvbSA8Y29kZT5ldmFsdWF0ZTwvY29kZT4uCisgICAgICovCisgICAgcHVibGljIEludEFycmF5RXZhbHVhdG9yKGludFtdIHJldXNlQXJyYXkpIHsKKyAgICAgICAgbUFycmF5ID0gcmV1c2VBcnJheTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbnRlcnBvbGF0ZXMgdGhlIHZhbHVlIGF0IGVhY2ggaW5kZXggYnkgdGhlIGZyYWN0aW9uLiBJZiB7QGxpbmsgI0ludEFycmF5RXZhbHVhdG9yKGludFtdKX0KKyAgICAgKiB3YXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyBvYmplY3QsIDxjb2RlPnJldXNlQXJyYXk8L2NvZGU+IHdpbGwgYmUgcmV0dXJuZWQsIG90aGVyd2lzZQorICAgICAqIGEgbmV3IDxjb2RlPmludFtdPC9jb2RlPiB3aWxsIGJlIHJldHVybmVkLgorICAgICAqCisgICAgICogQHBhcmFtIGZyYWN0aW9uICAgVGhlIGZyYWN0aW9uIGZyb20gdGhlIHN0YXJ0aW5nIHRvIHRoZSBlbmRpbmcgdmFsdWVzCisgICAgICogQHBhcmFtIHN0YXJ0VmFsdWUgVGhlIHN0YXJ0IHZhbHVlLgorICAgICAqIEBwYXJhbSBlbmRWYWx1ZSAgIFRoZSBlbmQgdmFsdWUuCisgICAgICogQHJldHVybiBBbiA8Y29kZT5pbnRbXTwvY29kZT4gd2hlcmUgZWFjaCBlbGVtZW50IGlzIGFuIGludGVycG9sYXRpb24gYmV0d2VlbgorICAgICAqICAgICAgICAgdGhlIHNhbWUgaW5kZXggaW4gc3RhcnRWYWx1ZSBhbmQgZW5kVmFsdWUuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludFtdIGV2YWx1YXRlKGZsb2F0IGZyYWN0aW9uLCBpbnRbXSBzdGFydFZhbHVlLCBpbnRbXSBlbmRWYWx1ZSkgeworICAgICAgICBpbnRbXSBhcnJheSA9IG1BcnJheTsKKyAgICAgICAgaWYgKGFycmF5ID09IG51bGwpIHsKKyAgICAgICAgICAgIGFycmF5ID0gbmV3IGludFtzdGFydFZhbHVlLmxlbmd0aF07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaW50IHN0YXJ0ID0gc3RhcnRWYWx1ZVtpXTsKKyAgICAgICAgICAgIGludCBlbmQgPSBlbmRWYWx1ZVtpXTsKKyAgICAgICAgICAgIGFycmF5W2ldID0gKGludCkgKHN0YXJ0ICsgKGZyYWN0aW9uICogKGVuZCAtIHN0YXJ0KSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhcnJheTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vT2JqZWN0QW5pbWF0b3IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvci5qYXZhCmluZGV4IDljODhjY2YuLmMwY2U3OTUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9PYmplY3RBbmltYXRvci5qYXZhCkBAIC0xNiw2ICsxNiw4IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5hbmltYXRpb247CiAKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhdGg7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb2ludEY7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuUHJvcGVydHk7CiAKQEAgLTE5MSw3ICsxOTMsNyBAQAogCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhbiBPYmplY3RBbmltYXRvciB0aGF0IGFuaW1hdGVzIGJldHdlZW4gaW50IHZhbHVlcy4gQSBzaW5nbGUKLSAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBUd28gdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcKKyAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBUd28gdmFsdWVzIGltcGx5IHN0YXJ0aW5nCiAgICAgICogYW5kIGVuZGluZyB2YWx1ZXMuIE1vcmUgdGhhbiB0d28gdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcgdmFsdWUsIHZhbHVlcyB0byBhbmltYXRlIHRocm91Z2gKICAgICAgKiBhbG9uZyB0aGUgd2F5LCBhbmQgYW4gZW5kaW5nIHZhbHVlICh0aGVzZSB2YWx1ZXMgd2lsbCBiZSBkaXN0cmlidXRlZCBldmVubHkgYWNyb3NzCiAgICAgICogdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24pLgpAQCAtMjEwLDggKzIxMiwzMyBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBjb29yZGluYXRlcyBhbG9uZyBhIDxjb2RlPlBhdGg8L2NvZGU+CisgICAgICogdXNpbmcgdHdvIHByb3BlcnRpZXMuIEEgPGNvZGU+UGF0aDwvY29kZT48Lz4gYW5pbWF0aW9uIG1vdmVzIGluIHR3byBkaW1lbnNpb25zLCBhbmltYXRpbmcKKyAgICAgKiBjb29yZGluYXRlcyA8Y29kZT4oeCwgeSk8L2NvZGU+IHRvZ2V0aGVyIHRvIGZvbGxvdyB0aGUgbGluZS4gSW4gdGhpcyB2YXJpYXRpb24sIHRoZQorICAgICAqIGNvb3JkaW5hdGVzIGFyZSBpbnRlZ2VycyB0aGF0IGFyZSBzZXQgdG8gc2VwYXJhdGUgcHJvcGVydGllcyBkZXNpZ25hdGVkIGJ5CisgICAgICogPGNvZGU+eFByb3BlcnR5TmFtZTwvY29kZT4gYW5kIDxjb2RlPnlQcm9wZXJ0eU5hbWU8L2NvZGU+LgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYXJlIHRvIGJlIGFuaW1hdGVkLiBUaGlzIG9iamVjdCBzaG91bGQKKyAgICAgKiAgICAgICAgICAgICAgIGhhdmUgcHVibGljIG1ldGhvZHMgb24gaXQgY2FsbGVkIDxjb2RlPnNldE5hbWVYKCk8L2NvZGU+IGFuZAorICAgICAqICAgICAgICAgICAgICAgPGNvZGU+c2V0TmFtZVk8L2NvZGU+LCB3aGVyZSA8Y29kZT5uYW1lWDwvY29kZT4gYW5kIDxjb2RlPm5hbWVZPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgYXJlIHRoZSB2YWx1ZSBvZiA8Y29kZT54UHJvcGVydHlOYW1lPC9jb2RlPiBhbmQgPGNvZGU+eVByb3BlcnR5TmFtZTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsIHJlc3BlY3RpdmVseS4KKyAgICAgKiBAcGFyYW0geFByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgZm9yIHRoZSB4IGNvb3JkaW5hdGUgYmVpbmcgYW5pbWF0ZWQuCisgICAgICogQHBhcmFtIHlQcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB0aGUgeSBjb29yZGluYXRlIGJlaW5nIGFuaW1hdGVkLgorICAgICAqIEBwYXJhbSBwYXRoIFRoZSA8Y29kZT5QYXRoPC9jb2RlPiB0byBhbmltYXRlIHZhbHVlcyBhbG9uZy4KKyAgICAgKiBAcmV0dXJuIEFuIE9iamVjdEFuaW1hdG9yIG9iamVjdCB0aGF0IGlzIHNldCB1cCB0byBhbmltYXRlIGFsb25nIDxjb2RlPnBhdGg8L2NvZGU+LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0QW5pbWF0b3Igb2ZJbnQoT2JqZWN0IHRhcmdldCwgU3RyaW5nIHhQcm9wZXJ0eU5hbWUsIFN0cmluZyB5UHJvcGVydHlOYW1lLAorICAgICAgICAgICAgUGF0aCBwYXRoKSB7CisgICAgICAgIEtleWZyYW1lW11bXSBrZXlmcmFtZXMgPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5jcmVhdGVLZXlmcmFtZXMocGF0aCwgdHJ1ZSk7CisgICAgICAgIFByb3BlcnR5VmFsdWVzSG9sZGVyIHggPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZktleWZyYW1lKHhQcm9wZXJ0eU5hbWUsIGtleWZyYW1lc1swXSk7CisgICAgICAgIFByb3BlcnR5VmFsdWVzSG9sZGVyIHkgPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZktleWZyYW1lKHlQcm9wZXJ0eU5hbWUsIGtleWZyYW1lc1sxXSk7CisgICAgICAgIHJldHVybiBvZlByb3BlcnR5VmFsdWVzSG9sZGVyKHRhcmdldCwgeCwgeSk7CisgICAgfQorCisgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhbiBPYmplY3RBbmltYXRvciB0aGF0IGFuaW1hdGVzIGJldHdlZW4gaW50IHZhbHVlcy4gQSBzaW5nbGUKLSAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBUd28gdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcKKyAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBUd28gdmFsdWVzIGltcGx5IHN0YXJ0aW5nCiAgICAgICogYW5kIGVuZGluZyB2YWx1ZXMuIE1vcmUgdGhhbiB0d28gdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcgdmFsdWUsIHZhbHVlcyB0byBhbmltYXRlIHRocm91Z2gKICAgICAgKiBhbG9uZyB0aGUgd2F5LCBhbmQgYW4gZW5kaW5nIHZhbHVlICh0aGVzZSB2YWx1ZXMgd2lsbCBiZSBkaXN0cmlidXRlZCBldmVubHkgYWNyb3NzCiAgICAgICogdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24pLgpAQCAtMjI4LDggKzI1NSwxMzUgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgY29vcmRpbmF0ZXMgYWxvbmcgYSA8Y29kZT5QYXRoPC9jb2RlPgorICAgICAqIHVzaW5nIHR3byBwcm9wZXJ0aWVzLiAgQSA8Y29kZT5QYXRoPC9jb2RlPjwvPiBhbmltYXRpb24gbW92ZXMgaW4gdHdvIGRpbWVuc2lvbnMsIGFuaW1hdGluZworICAgICAqIGNvb3JkaW5hdGVzIDxjb2RlPih4LCB5KTwvY29kZT4gdG9nZXRoZXIgdG8gZm9sbG93IHRoZSBsaW5lLiBJbiB0aGlzIHZhcmlhdGlvbiwgdGhlCisgICAgICogY29vcmRpbmF0ZXMgYXJlIGludGVnZXJzIHRoYXQgYXJlIHNldCB0byBzZXBhcmF0ZSBwcm9wZXJ0aWVzLCA8Y29kZT54UHJvcGVydHk8L2NvZGU+IGFuZAorICAgICAqIDxjb2RlPnlQcm9wZXJ0eTwvY29kZT4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgdG8gYmUgYW5pbWF0ZWQuCisgICAgICogQHBhcmFtIHhQcm9wZXJ0eSBUaGUgcHJvcGVydHkgZm9yIHRoZSB4IGNvb3JkaW5hdGUgYmVpbmcgYW5pbWF0ZWQuCisgICAgICogQHBhcmFtIHlQcm9wZXJ0eSBUaGUgcHJvcGVydHkgZm9yIHRoZSB5IGNvb3JkaW5hdGUgYmVpbmcgYW5pbWF0ZWQuCisgICAgICogQHBhcmFtIHBhdGggVGhlIDxjb2RlPlBhdGg8L2NvZGU+IHRvIGFuaW1hdGUgdmFsdWVzIGFsb25nLgorICAgICAqIEByZXR1cm4gQW4gT2JqZWN0QW5pbWF0b3Igb2JqZWN0IHRoYXQgaXMgc2V0IHVwIHRvIGFuaW1hdGUgYWxvbmcgPGNvZGU+cGF0aDwvY29kZT4uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyA8VD4gT2JqZWN0QW5pbWF0b3Igb2ZJbnQoVCB0YXJnZXQsIFByb3BlcnR5PFQsIEludGVnZXI+IHhQcm9wZXJ0eSwKKyAgICAgICAgICAgIFByb3BlcnR5PFQsIEludGVnZXI+IHlQcm9wZXJ0eSwgUGF0aCBwYXRoKSB7CisgICAgICAgIEtleWZyYW1lW11bXSBrZXlmcmFtZXMgPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5jcmVhdGVLZXlmcmFtZXMocGF0aCwgdHJ1ZSk7CisgICAgICAgIFByb3BlcnR5VmFsdWVzSG9sZGVyIHggPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZktleWZyYW1lKHhQcm9wZXJ0eSwga2V5ZnJhbWVzWzBdKTsKKyAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIgeSA9IFByb3BlcnR5VmFsdWVzSG9sZGVyLm9mS2V5ZnJhbWUoeVByb3BlcnR5LCBrZXlmcmFtZXNbMV0pOworICAgICAgICByZXR1cm4gb2ZQcm9wZXJ0eVZhbHVlc0hvbGRlcih0YXJnZXQsIHgsIHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBvdmVyIGludCB2YWx1ZXMgZm9yIGEgbXVsdGlwbGUKKyAgICAgKiBwYXJhbWV0ZXJzIHNldHRlci4gT25seSBwdWJsaWMgbWV0aG9kcyB0aGF0IHRha2Ugb25seSBpbnQgcGFyYW1ldGVycyBhcmUgc3VwcG9ydGVkLgorICAgICAqIEVhY2ggPGNvZGU+aW50W108L2NvZGU+IGNvbnRhaW5zIGEgY29tcGxldGUgc2V0IG9mIHBhcmFtZXRlcnMgdG8gdGhlIHNldHRlciBtZXRob2QuCisgICAgICogQXQgbGVhc3QgdHdvIDxjb2RlPmludFtdPC9jb2RlPiB2YWx1ZXMgbXVzdCBiZSBwcm92aWRlZCwgYSBzdGFydCBhbmQgZW5kLiBNb3JlIHRoYW4gdHdvCisgICAgICogdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcgdmFsdWUsIHZhbHVlcyB0byBhbmltYXRlIHRocm91Z2ggYWxvbmcgdGhlIHdheSwgYW5kIGFuIGVuZGluZworICAgICAqIHZhbHVlICh0aGVzZSB2YWx1ZXMgd2lsbCBiZSBkaXN0cmlidXRlZCBldmVubHkgYWNyb3NzIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBpcyB0byBiZSBhbmltYXRlZC4gVGhpcyBvYmplY3QgbWF5CisgICAgICogaGF2ZSBhIHB1YmxpYyBtZXRob2Qgb24gaXQgY2FsbGVkIDxjb2RlPnNldE5hbWUoKTwvY29kZT4sIHdoZXJlIDxjb2RlPm5hbWU8L2NvZGU+IGlzCisgICAgICogdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5wcm9wZXJ0eU5hbWU8L2NvZGU+IHBhcmFtZXRlci4gPGNvZGU+cHJvcGVydHlOYW1lPC9jb2RlPiBtYXkgYWxzbworICAgICAqIGJlIHRoZSBjYXNlLXNlbnNpdGl2ZSBjb21wbGV0ZSBuYW1lIG9mIHRoZSBwdWJsaWMgc2V0dGVyIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZCBvciB0aGUgbmFtZSBvZiB0aGUgc2V0dGVyIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gdmFsdWVzIEEgc2V0IG9mIHZhbHVlcyB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBhbmltYXRlIGJldHdlZW4gb3ZlciB0aW1lLgorICAgICAqIEByZXR1cm4gQW4gT2JqZWN0QW5pbWF0b3Igb2JqZWN0IHRoYXQgaXMgc2V0IHVwIHRvIGFuaW1hdGUgYmV0d2VlbiB0aGUgZ2l2ZW4gdmFsdWVzLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0QW5pbWF0b3Igb2ZNdWx0aUludChPYmplY3QgdGFyZ2V0LCBTdHJpbmcgcHJvcGVydHlOYW1lLCBpbnRbXVtdIHZhbHVlcykgeworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBwdmggPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZk11bHRpSW50KHByb3BlcnR5TmFtZSwgdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIG9mUHJvcGVydHlWYWx1ZXNIb2xkZXIodGFyZ2V0LCBwdmgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyB0aGUgdGFyZ2V0IHVzaW5nIGEgbXVsdGktaW50IHNldHRlcgorICAgICAqIGFsb25nIHRoZSBnaXZlbiA8Y29kZT5QYXRoPC9jb2RlPi4gQSA8Y29kZT5QYXRoPC9jb2RlPjwvPiBhbmltYXRpb24gbW92ZXMgaW4gdHdvIGRpbWVuc2lvbnMsCisgICAgICogYW5pbWF0aW5nIGNvb3JkaW5hdGVzIDxjb2RlPih4LCB5KTwvY29kZT4gdG9nZXRoZXIgdG8gZm9sbG93IHRoZSBsaW5lLiBJbiB0aGlzIHZhcmlhdGlvbiwgdGhlCisgICAgICogY29vcmRpbmF0ZXMgYXJlIGludGVnZXIgeCBhbmQgeSBjb29yZGluYXRlcyB1c2VkIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIHBhcmFtZXRlciBvZiB0aGUKKyAgICAgKiBzZXR0ZXIsIHJlc3BlY3RpdmVseS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBpcyB0byBiZSBhbmltYXRlZC4gVGhpcyBvYmplY3QgbWF5CisgICAgICogaGF2ZSBhIHB1YmxpYyBtZXRob2Qgb24gaXQgY2FsbGVkIDxjb2RlPnNldE5hbWUoKTwvY29kZT4sIHdoZXJlIDxjb2RlPm5hbWU8L2NvZGU+IGlzCisgICAgICogdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5wcm9wZXJ0eU5hbWU8L2NvZGU+IHBhcmFtZXRlci4gPGNvZGU+cHJvcGVydHlOYW1lPC9jb2RlPiBtYXkgYWxzbworICAgICAqIGJlIHRoZSBjYXNlLXNlbnNpdGl2ZSBjb21wbGV0ZSBuYW1lIG9mIHRoZSBwdWJsaWMgc2V0dGVyIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZCBvciB0aGUgbmFtZSBvZiB0aGUgc2V0dGVyIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gcGF0aCBUaGUgPGNvZGU+UGF0aDwvY29kZT4gdG8gYW5pbWF0ZSB2YWx1ZXMgYWxvbmcuCisgICAgICogQHJldHVybiBBbiBPYmplY3RBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBhbG9uZyA8Y29kZT5wYXRoPC9jb2RlPi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIE9iamVjdEFuaW1hdG9yIG9mTXVsdGlJbnQoT2JqZWN0IHRhcmdldCwgU3RyaW5nIHByb3BlcnR5TmFtZSwgUGF0aCBwYXRoKSB7CisgICAgICAgIFByb3BlcnR5VmFsdWVzSG9sZGVyIHB2aCA9IFByb3BlcnR5VmFsdWVzSG9sZGVyLm9mTXVsdGlJbnQocHJvcGVydHlOYW1lLCBwYXRoKTsKKyAgICAgICAgcmV0dXJuIG9mUHJvcGVydHlWYWx1ZXNIb2xkZXIodGFyZ2V0LCBwdmgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBvdmVyIHZhbHVlcyBmb3IgYSBtdWx0aXBsZSBpbnQKKyAgICAgKiBwYXJhbWV0ZXJzIHNldHRlci4gT25seSBwdWJsaWMgbWV0aG9kcyB0aGF0IHRha2Ugb25seSBpbnQgcGFyYW1ldGVycyBhcmUgc3VwcG9ydGVkLgorICAgICAqIDxwPkF0IGxlYXN0IHR3byB2YWx1ZXMgbXVzdCBiZSBwcm92aWRlZCwgYSBzdGFydCBhbmQgZW5kLiBNb3JlIHRoYW4gdHdvCisgICAgICogdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcgdmFsdWUsIHZhbHVlcyB0byBhbmltYXRlIHRocm91Z2ggYWxvbmcgdGhlIHdheSwgYW5kIGFuIGVuZGluZworICAgICAqIHZhbHVlICh0aGVzZSB2YWx1ZXMgd2lsbCBiZSBkaXN0cmlidXRlZCBldmVubHkgYWNyb3NzIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uKS48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydHkgaXMgdG8gYmUgYW5pbWF0ZWQuIFRoaXMgb2JqZWN0IG1heQorICAgICAqIGhhdmUgYSBwdWJsaWMgbWV0aG9kIG9uIGl0IGNhbGxlZCA8Y29kZT5zZXROYW1lKCk8L2NvZGU+LCB3aGVyZSA8Y29kZT5uYW1lPC9jb2RlPiBpcworICAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+cHJvcGVydHlOYW1lPC9jb2RlPiBwYXJhbWV0ZXIuIDxjb2RlPnByb3BlcnR5TmFtZTwvY29kZT4gbWF5IGFsc28KKyAgICAgKiBiZSB0aGUgY2FzZS1zZW5zaXRpdmUgY29tcGxldGUgbmFtZSBvZiB0aGUgcHVibGljIHNldHRlciBtZXRob2QuCisgICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQgb3IgdGhlIG5hbWUgb2YgdGhlIHNldHRlciBtZXRob2QuCisgICAgICogQHBhcmFtIGNvbnZlcnRlciBDb252ZXJ0cyBUIG9iamVjdHMgaW50byBpbnQgcGFyYW1ldGVycyBmb3IgdGhlIG11bHRpLXZhbHVlIHNldHRlci4KKyAgICAgKiBAcGFyYW0gZXZhbHVhdG9yIEEgVHlwZUV2YWx1YXRvciB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggYW5pbWF0aW9uIGZyYW1lIHRvCisgICAgICogcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGludGVycG9sYXRpb24gYmV0d2VlbiB0aGUgT2JqZWN0IHZhbHVlcyB0byBkZXJpdmUgdGhlIGFuaW1hdGVkCisgICAgICogdmFsdWUuCisgICAgICogQHBhcmFtIHZhbHVlcyBBIHNldCBvZiB2YWx1ZXMgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgYW5pbWF0ZSBiZXR3ZWVuIG92ZXIgdGltZS4KKyAgICAgKiBAcmV0dXJuIEFuIE9iamVjdEFuaW1hdG9yIG9iamVjdCB0aGF0IGlzIHNldCB1cCB0byBhbmltYXRlIGJldHdlZW4gdGhlIGdpdmVuIHZhbHVlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIDxUPiBPYmplY3RBbmltYXRvciBvZk11bHRpSW50KE9iamVjdCB0YXJnZXQsIFN0cmluZyBwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICBUeXBlQ29udmVydGVyPFQsIGludFtdPiBjb252ZXJ0ZXIsIFR5cGVFdmFsdWF0b3I8VD4gZXZhbHVhdG9yLCBULi4uIHZhbHVlcykgeworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBwdmggPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZk11bHRpSW50KHByb3BlcnR5TmFtZSwgY29udmVydGVyLAorICAgICAgICAgICAgICAgIGV2YWx1YXRvciwgdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdEFuaW1hdG9yLm9mUHJvcGVydHlWYWx1ZXNIb2xkZXIodGFyZ2V0LCBwdmgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBiZXR3ZWVuIGNvbG9yIHZhbHVlcy4gQSBzaW5nbGUKKyAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBUd28gdmFsdWVzIGltcGx5IHN0YXJ0aW5nCisgICAgICogYW5kIGVuZGluZyB2YWx1ZXMuIE1vcmUgdGhhbiB0d28gdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcgdmFsdWUsIHZhbHVlcyB0byBhbmltYXRlIHRocm91Z2gKKyAgICAgKiBhbG9uZyB0aGUgd2F5LCBhbmQgYW4gZW5kaW5nIHZhbHVlICh0aGVzZSB2YWx1ZXMgd2lsbCBiZSBkaXN0cmlidXRlZCBldmVubHkgYWNyb3NzCisgICAgICogdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24pLgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IGlzIHRvIGJlIGFuaW1hdGVkLiBUaGlzIG9iamVjdCBzaG91bGQKKyAgICAgKiBoYXZlIGEgcHVibGljIG1ldGhvZCBvbiBpdCBjYWxsZWQgPGNvZGU+c2V0TmFtZSgpPC9jb2RlPiwgd2hlcmUgPGNvZGU+bmFtZTwvY29kZT4gaXMKKyAgICAgKiB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPnByb3BlcnR5TmFtZTwvY29kZT4gcGFyYW1ldGVyLgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkLgorICAgICAqIEBwYXJhbSB2YWx1ZXMgQSBzZXQgb2YgdmFsdWVzIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIGFuaW1hdGUgYmV0d2VlbiBvdmVyIHRpbWUuCisgICAgICogQHJldHVybiBBbiBPYmplY3RBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBiZXR3ZWVuIHRoZSBnaXZlbiB2YWx1ZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBPYmplY3RBbmltYXRvciBvZkFyZ2IoT2JqZWN0IHRhcmdldCwgU3RyaW5nIHByb3BlcnR5TmFtZSwgaW50Li4uIHZhbHVlcykgeworICAgICAgICBPYmplY3RBbmltYXRvciBhbmltYXRvciA9IG9mSW50KHRhcmdldCwgcHJvcGVydHlOYW1lLCB2YWx1ZXMpOworICAgICAgICBhbmltYXRvci5zZXRFdmFsdWF0b3IoQXJnYkV2YWx1YXRvci5nZXRJbnN0YW5jZSgpKTsKKyAgICAgICAgcmV0dXJuIGFuaW1hdG9yOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBiZXR3ZWVuIGNvbG9yIHZhbHVlcy4gQSBzaW5nbGUKKyAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBUd28gdmFsdWVzIGltcGx5IHN0YXJ0aW5nCisgICAgICogYW5kIGVuZGluZyB2YWx1ZXMuIE1vcmUgdGhhbiB0d28gdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcgdmFsdWUsIHZhbHVlcyB0byBhbmltYXRlIHRocm91Z2gKKyAgICAgKiBhbG9uZyB0aGUgd2F5LCBhbmQgYW4gZW5kaW5nIHZhbHVlICh0aGVzZSB2YWx1ZXMgd2lsbCBiZSBkaXN0cmlidXRlZCBldmVubHkgYWNyb3NzCisgICAgICogdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24pLgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IGlzIHRvIGJlIGFuaW1hdGVkLgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQuCisgICAgICogQHBhcmFtIHZhbHVlcyBBIHNldCBvZiB2YWx1ZXMgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgYW5pbWF0ZSBiZXR3ZWVuIG92ZXIgdGltZS4KKyAgICAgKiBAcmV0dXJuIEFuIE9iamVjdEFuaW1hdG9yIG9iamVjdCB0aGF0IGlzIHNldCB1cCB0byBhbmltYXRlIGJldHdlZW4gdGhlIGdpdmVuIHZhbHVlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIDxUPiBPYmplY3RBbmltYXRvciBvZkFyZ2IoVCB0YXJnZXQsIFByb3BlcnR5PFQsIEludGVnZXI+IHByb3BlcnR5LAorICAgICAgICAgICAgaW50Li4uIHZhbHVlcykgeworICAgICAgICBPYmplY3RBbmltYXRvciBhbmltYXRvciA9IG9mSW50KHRhcmdldCwgcHJvcGVydHksIHZhbHVlcyk7CisgICAgICAgIGFuaW1hdG9yLnNldEV2YWx1YXRvcihBcmdiRXZhbHVhdG9yLmdldEluc3RhbmNlKCkpOworICAgICAgICByZXR1cm4gYW5pbWF0b3I7CisgICAgfQorCisgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhbiBPYmplY3RBbmltYXRvciB0aGF0IGFuaW1hdGVzIGJldHdlZW4gZmxvYXQgdmFsdWVzLiBBIHNpbmdsZQotICAgICAqIHZhbHVlIGltcGxpZXMgdGhhdCB0aGF0IHZhbHVlIGlzIHRoZSBvbmUgYmVpbmcgYW5pbWF0ZWQgdG8uIFR3byB2YWx1ZXMgaW1wbHkgYSBzdGFydGluZworICAgICAqIHZhbHVlIGltcGxpZXMgdGhhdCB0aGF0IHZhbHVlIGlzIHRoZSBvbmUgYmVpbmcgYW5pbWF0ZWQgdG8uIFR3byB2YWx1ZXMgaW1wbHkgc3RhcnRpbmcKICAgICAgKiBhbmQgZW5kaW5nIHZhbHVlcy4gTW9yZSB0aGFuIHR3byB2YWx1ZXMgaW1wbHkgYSBzdGFydGluZyB2YWx1ZSwgdmFsdWVzIHRvIGFuaW1hdGUgdGhyb3VnaAogICAgICAqIGFsb25nIHRoZSB3YXksIGFuZCBhbiBlbmRpbmcgdmFsdWUgKHRoZXNlIHZhbHVlcyB3aWxsIGJlIGRpc3RyaWJ1dGVkIGV2ZW5seSBhY3Jvc3MKICAgICAgKiB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbikuCkBAIC0yNDgsOCArNDAyLDMzIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhbiBPYmplY3RBbmltYXRvciB0aGF0IGFuaW1hdGVzIGNvb3JkaW5hdGVzIGFsb25nIGEgPGNvZGU+UGF0aDwvY29kZT4KKyAgICAgKiB1c2luZyB0d28gcHJvcGVydGllcy4gQSA8Y29kZT5QYXRoPC9jb2RlPjwvPiBhbmltYXRpb24gbW92ZXMgaW4gdHdvIGRpbWVuc2lvbnMsIGFuaW1hdGluZworICAgICAqIGNvb3JkaW5hdGVzIDxjb2RlPih4LCB5KTwvY29kZT4gdG9nZXRoZXIgdG8gZm9sbG93IHRoZSBsaW5lLiBJbiB0aGlzIHZhcmlhdGlvbiwgdGhlCisgICAgICogY29vcmRpbmF0ZXMgYXJlIGZsb2F0cyB0aGF0IGFyZSBzZXQgdG8gc2VwYXJhdGUgcHJvcGVydGllcyBkZXNpZ25hdGVkIGJ5CisgICAgICogPGNvZGU+eFByb3BlcnR5TmFtZTwvY29kZT4gYW5kIDxjb2RlPnlQcm9wZXJ0eU5hbWU8L2NvZGU+LgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYXJlIHRvIGJlIGFuaW1hdGVkLiBUaGlzIG9iamVjdCBzaG91bGQKKyAgICAgKiAgICAgICAgICAgICAgIGhhdmUgcHVibGljIG1ldGhvZHMgb24gaXQgY2FsbGVkIDxjb2RlPnNldE5hbWVYKCk8L2NvZGU+IGFuZAorICAgICAqICAgICAgICAgICAgICAgPGNvZGU+c2V0TmFtZVk8L2NvZGU+LCB3aGVyZSA8Y29kZT5uYW1lWDwvY29kZT4gYW5kIDxjb2RlPm5hbWVZPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgYXJlIHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+eFByb3BlcnR5TmFtZTwvY29kZT4gYW5kIDxjb2RlPnlQcm9wZXJ0eU5hbWU8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICBwYXJhbWV0ZXJzLCByZXNwZWN0aXZlbHkuCisgICAgICogQHBhcmFtIHhQcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB0aGUgeCBjb29yZGluYXRlIGJlaW5nIGFuaW1hdGVkLgorICAgICAqIEBwYXJhbSB5UHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3IgdGhlIHkgY29vcmRpbmF0ZSBiZWluZyBhbmltYXRlZC4KKyAgICAgKiBAcGFyYW0gcGF0aCBUaGUgPGNvZGU+UGF0aDwvY29kZT4gdG8gYW5pbWF0ZSB2YWx1ZXMgYWxvbmcuCisgICAgICogQHJldHVybiBBbiBPYmplY3RBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBhbG9uZyA8Y29kZT5wYXRoPC9jb2RlPi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIE9iamVjdEFuaW1hdG9yIG9mRmxvYXQoT2JqZWN0IHRhcmdldCwgU3RyaW5nIHhQcm9wZXJ0eU5hbWUsIFN0cmluZyB5UHJvcGVydHlOYW1lLAorICAgICAgICAgICAgUGF0aCBwYXRoKSB7CisgICAgICAgIEtleWZyYW1lW11bXSBrZXlmcmFtZXMgPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5jcmVhdGVLZXlmcmFtZXMocGF0aCwgZmFsc2UpOworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciB4ID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZLZXlmcmFtZSh4UHJvcGVydHlOYW1lLCBrZXlmcmFtZXNbMF0pOworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciB5ID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZLZXlmcmFtZSh5UHJvcGVydHlOYW1lLCBrZXlmcmFtZXNbMV0pOworICAgICAgICByZXR1cm4gb2ZQcm9wZXJ0eVZhbHVlc0hvbGRlcih0YXJnZXQsIHgsIHkpOworICAgIH0KKworICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBiZXR3ZWVuIGZsb2F0IHZhbHVlcy4gQSBzaW5nbGUKLSAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBUd28gdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcKKyAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBUd28gdmFsdWVzIGltcGx5IHN0YXJ0aW5nCiAgICAgICogYW5kIGVuZGluZyB2YWx1ZXMuIE1vcmUgdGhhbiB0d28gdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcgdmFsdWUsIHZhbHVlcyB0byBhbmltYXRlIHRocm91Z2gKICAgICAgKiBhbG9uZyB0aGUgd2F5LCBhbmQgYW4gZW5kaW5nIHZhbHVlICh0aGVzZSB2YWx1ZXMgd2lsbCBiZSBkaXN0cmlidXRlZCBldmVubHkgYWNyb3NzCiAgICAgICogdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24pLgpAQCAtMjY3LDggKzQ0Niw5NCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBjb29yZGluYXRlcyBhbG9uZyBhIDxjb2RlPlBhdGg8L2NvZGU+CisgICAgICogdXNpbmcgdHdvIHByb3BlcnRpZXMuIEEgPGNvZGU+UGF0aDwvY29kZT48Lz4gYW5pbWF0aW9uIG1vdmVzIGluIHR3byBkaW1lbnNpb25zLCBhbmltYXRpbmcKKyAgICAgKiBjb29yZGluYXRlcyA8Y29kZT4oeCwgeSk8L2NvZGU+IHRvZ2V0aGVyIHRvIGZvbGxvdyB0aGUgbGluZS4gSW4gdGhpcyB2YXJpYXRpb24sIHRoZQorICAgICAqIGNvb3JkaW5hdGVzIGFyZSBmbG9hdHMgdGhhdCBhcmUgc2V0IHRvIHNlcGFyYXRlIHByb3BlcnRpZXMsIDxjb2RlPnhQcm9wZXJ0eTwvY29kZT4gYW5kCisgICAgICogPGNvZGU+eVByb3BlcnR5PC9jb2RlPi4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSB0byBiZSBhbmltYXRlZC4KKyAgICAgKiBAcGFyYW0geFByb3BlcnR5IFRoZSBwcm9wZXJ0eSBmb3IgdGhlIHggY29vcmRpbmF0ZSBiZWluZyBhbmltYXRlZC4KKyAgICAgKiBAcGFyYW0geVByb3BlcnR5IFRoZSBwcm9wZXJ0eSBmb3IgdGhlIHkgY29vcmRpbmF0ZSBiZWluZyBhbmltYXRlZC4KKyAgICAgKiBAcGFyYW0gcGF0aCBUaGUgPGNvZGU+UGF0aDwvY29kZT4gdG8gYW5pbWF0ZSB2YWx1ZXMgYWxvbmcuCisgICAgICogQHJldHVybiBBbiBPYmplY3RBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBhbG9uZyA8Y29kZT5wYXRoPC9jb2RlPi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIDxUPiBPYmplY3RBbmltYXRvciBvZkZsb2F0KFQgdGFyZ2V0LCBQcm9wZXJ0eTxULCBGbG9hdD4geFByb3BlcnR5LAorICAgICAgICAgICAgUHJvcGVydHk8VCwgRmxvYXQ+IHlQcm9wZXJ0eSwgUGF0aCBwYXRoKSB7CisgICAgICAgIHJldHVybiBvZkZsb2F0KHRhcmdldCwgeFByb3BlcnR5LmdldE5hbWUoKSwgeVByb3BlcnR5LmdldE5hbWUoKSwgcGF0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhbiBPYmplY3RBbmltYXRvciB0aGF0IGFuaW1hdGVzIG92ZXIgZmxvYXQgdmFsdWVzIGZvciBhIG11bHRpcGxlCisgICAgICogcGFyYW1ldGVycyBzZXR0ZXIuIE9ubHkgcHVibGljIG1ldGhvZHMgdGhhdCB0YWtlIG9ubHkgZmxvYXQgcGFyYW1ldGVycyBhcmUgc3VwcG9ydGVkLgorICAgICAqIEVhY2ggPGNvZGU+ZmxvYXRbXTwvY29kZT4gY29udGFpbnMgYSBjb21wbGV0ZSBzZXQgb2YgcGFyYW1ldGVycyB0byB0aGUgc2V0dGVyIG1ldGhvZC4KKyAgICAgKiBBdCBsZWFzdCB0d28gPGNvZGU+ZmxvYXRbXTwvY29kZT4gdmFsdWVzIG11c3QgYmUgcHJvdmlkZWQsIGEgc3RhcnQgYW5kIGVuZC4gTW9yZSB0aGFuIHR3bworICAgICAqIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nIHZhbHVlLCB2YWx1ZXMgdG8gYW5pbWF0ZSB0aHJvdWdoIGFsb25nIHRoZSB3YXksIGFuZCBhbiBlbmRpbmcKKyAgICAgKiB2YWx1ZSAodGhlc2UgdmFsdWVzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFjcm9zcyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbikuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydHkgaXMgdG8gYmUgYW5pbWF0ZWQuIFRoaXMgb2JqZWN0IG1heQorICAgICAqIGhhdmUgYSBwdWJsaWMgbWV0aG9kIG9uIGl0IGNhbGxlZCA8Y29kZT5zZXROYW1lKCk8L2NvZGU+LCB3aGVyZSA8Y29kZT5uYW1lPC9jb2RlPiBpcworICAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+cHJvcGVydHlOYW1lPC9jb2RlPiBwYXJhbWV0ZXIuIDxjb2RlPnByb3BlcnR5TmFtZTwvY29kZT4gbWF5IGFsc28KKyAgICAgKiBiZSB0aGUgY2FzZS1zZW5zaXRpdmUgY29tcGxldGUgbmFtZSBvZiB0aGUgcHVibGljIHNldHRlciBtZXRob2QuCisgICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQgb3IgdGhlIG5hbWUgb2YgdGhlIHNldHRlciBtZXRob2QuCisgICAgICogQHBhcmFtIHZhbHVlcyBBIHNldCBvZiB2YWx1ZXMgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgYW5pbWF0ZSBiZXR3ZWVuIG92ZXIgdGltZS4KKyAgICAgKiBAcmV0dXJuIEFuIE9iamVjdEFuaW1hdG9yIG9iamVjdCB0aGF0IGlzIHNldCB1cCB0byBhbmltYXRlIGJldHdlZW4gdGhlIGdpdmVuIHZhbHVlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIE9iamVjdEFuaW1hdG9yIG9mTXVsdGlGbG9hdChPYmplY3QgdGFyZ2V0LCBTdHJpbmcgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgZmxvYXRbXVtdIHZhbHVlcykgeworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBwdmggPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZk11bHRpRmxvYXQocHJvcGVydHlOYW1lLCB2YWx1ZXMpOworICAgICAgICByZXR1cm4gb2ZQcm9wZXJ0eVZhbHVlc0hvbGRlcih0YXJnZXQsIHB2aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhbiBPYmplY3RBbmltYXRvciB0aGF0IGFuaW1hdGVzIHRoZSB0YXJnZXQgdXNpbmcgYSBtdWx0aS1mbG9hdCBzZXR0ZXIKKyAgICAgKiBhbG9uZyB0aGUgZ2l2ZW4gPGNvZGU+UGF0aDwvY29kZT4uIEEgPGNvZGU+UGF0aDwvY29kZT48Lz4gYW5pbWF0aW9uIG1vdmVzIGluIHR3byBkaW1lbnNpb25zLAorICAgICAqIGFuaW1hdGluZyBjb29yZGluYXRlcyA8Y29kZT4oeCwgeSk8L2NvZGU+IHRvZ2V0aGVyIHRvIGZvbGxvdyB0aGUgbGluZS4gSW4gdGhpcyB2YXJpYXRpb24sIHRoZQorICAgICAqIGNvb3JkaW5hdGVzIGFyZSBmbG9hdCB4IGFuZCB5IGNvb3JkaW5hdGVzIHVzZWQgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgcGFyYW1ldGVyIG9mIHRoZQorICAgICAqIHNldHRlciwgcmVzcGVjdGl2ZWx5LgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IGlzIHRvIGJlIGFuaW1hdGVkLiBUaGlzIG9iamVjdCBtYXkKKyAgICAgKiBoYXZlIGEgcHVibGljIG1ldGhvZCBvbiBpdCBjYWxsZWQgPGNvZGU+c2V0TmFtZSgpPC9jb2RlPiwgd2hlcmUgPGNvZGU+bmFtZTwvY29kZT4gaXMKKyAgICAgKiB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPnByb3BlcnR5TmFtZTwvY29kZT4gcGFyYW1ldGVyLiA8Y29kZT5wcm9wZXJ0eU5hbWU8L2NvZGU+IG1heSBhbHNvCisgICAgICogYmUgdGhlIGNhc2Utc2Vuc2l0aXZlIGNvbXBsZXRlIG5hbWUgb2YgdGhlIHB1YmxpYyBzZXR0ZXIgbWV0aG9kLgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkIG9yIHRoZSBuYW1lIG9mIHRoZSBzZXR0ZXIgbWV0aG9kLgorICAgICAqIEBwYXJhbSBwYXRoIFRoZSA8Y29kZT5QYXRoPC9jb2RlPiB0byBhbmltYXRlIHZhbHVlcyBhbG9uZy4KKyAgICAgKiBAcmV0dXJuIEFuIE9iamVjdEFuaW1hdG9yIG9iamVjdCB0aGF0IGlzIHNldCB1cCB0byBhbmltYXRlIGFsb25nIDxjb2RlPnBhdGg8L2NvZGU+LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0QW5pbWF0b3Igb2ZNdWx0aUZsb2F0KE9iamVjdCB0YXJnZXQsIFN0cmluZyBwcm9wZXJ0eU5hbWUsIFBhdGggcGF0aCkgeworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBwdmggPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZk11bHRpRmxvYXQocHJvcGVydHlOYW1lLCBwYXRoKTsKKyAgICAgICAgcmV0dXJuIG9mUHJvcGVydHlWYWx1ZXNIb2xkZXIodGFyZ2V0LCBwdmgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBvdmVyIHZhbHVlcyBmb3IgYSBtdWx0aXBsZSBmbG9hdAorICAgICAqIHBhcmFtZXRlcnMgc2V0dGVyLiBPbmx5IHB1YmxpYyBtZXRob2RzIHRoYXQgdGFrZSBvbmx5IGZsb2F0IHBhcmFtZXRlcnMgYXJlIHN1cHBvcnRlZC4KKyAgICAgKiA8cD5BdCBsZWFzdCB0d28gdmFsdWVzIG11c3QgYmUgcHJvdmlkZWQsIGEgc3RhcnQgYW5kIGVuZC4gTW9yZSB0aGFuIHR3bworICAgICAqIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nIHZhbHVlLCB2YWx1ZXMgdG8gYW5pbWF0ZSB0aHJvdWdoIGFsb25nIHRoZSB3YXksIGFuZCBhbiBlbmRpbmcKKyAgICAgKiB2YWx1ZSAodGhlc2UgdmFsdWVzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFjcm9zcyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbikuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IGlzIHRvIGJlIGFuaW1hdGVkLiBUaGlzIG9iamVjdCBtYXkKKyAgICAgKiBoYXZlIGEgcHVibGljIG1ldGhvZCBvbiBpdCBjYWxsZWQgPGNvZGU+c2V0TmFtZSgpPC9jb2RlPiwgd2hlcmUgPGNvZGU+bmFtZTwvY29kZT4gaXMKKyAgICAgKiB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPnByb3BlcnR5TmFtZTwvY29kZT4gcGFyYW1ldGVyLiA8Y29kZT5wcm9wZXJ0eU5hbWU8L2NvZGU+IG1heSBhbHNvCisgICAgICogYmUgdGhlIGNhc2Utc2Vuc2l0aXZlIGNvbXBsZXRlIG5hbWUgb2YgdGhlIHB1YmxpYyBzZXR0ZXIgbWV0aG9kLgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkIG9yIHRoZSBuYW1lIG9mIHRoZSBzZXR0ZXIgbWV0aG9kLgorICAgICAqIEBwYXJhbSBjb252ZXJ0ZXIgQ29udmVydHMgVCBvYmplY3RzIGludG8gZmxvYXQgcGFyYW1ldGVycyBmb3IgdGhlIG11bHRpLXZhbHVlIHNldHRlci4KKyAgICAgKiBAcGFyYW0gZXZhbHVhdG9yIEEgVHlwZUV2YWx1YXRvciB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggYW5pbWF0aW9uIGZyYW1lIHRvCisgICAgICogcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGludGVycG9sYXRpb24gYmV0d2VlbiB0aGUgT2JqZWN0IHZhbHVlcyB0byBkZXJpdmUgdGhlIGFuaW1hdGVkCisgICAgICogdmFsdWUuCisgICAgICogQHBhcmFtIHZhbHVlcyBBIHNldCBvZiB2YWx1ZXMgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgYW5pbWF0ZSBiZXR3ZWVuIG92ZXIgdGltZS4KKyAgICAgKiBAcmV0dXJuIEFuIE9iamVjdEFuaW1hdG9yIG9iamVjdCB0aGF0IGlzIHNldCB1cCB0byBhbmltYXRlIGJldHdlZW4gdGhlIGdpdmVuIHZhbHVlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIDxUPiBPYmplY3RBbmltYXRvciBvZk11bHRpRmxvYXQoT2JqZWN0IHRhcmdldCwgU3RyaW5nIHByb3BlcnR5TmFtZSwKKyAgICAgICAgICAgIFR5cGVDb252ZXJ0ZXI8VCwgZmxvYXRbXT4gY29udmVydGVyLCBUeXBlRXZhbHVhdG9yPFQ+IGV2YWx1YXRvciwgVC4uLiB2YWx1ZXMpIHsKKyAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIgcHZoID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZNdWx0aUZsb2F0KHByb3BlcnR5TmFtZSwgY29udmVydGVyLAorICAgICAgICAgICAgICAgIGV2YWx1YXRvciwgdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIE9iamVjdEFuaW1hdG9yLm9mUHJvcGVydHlWYWx1ZXNIb2xkZXIodGFyZ2V0LCBwdmgpOworICAgIH0KKworICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBiZXR3ZWVuIE9iamVjdCB2YWx1ZXMuIEEgc2luZ2xlCi0gICAgICogdmFsdWUgaW1wbGllcyB0aGF0IHRoYXQgdmFsdWUgaXMgdGhlIG9uZSBiZWluZyBhbmltYXRlZCB0by4gVHdvIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nCisgICAgICogdmFsdWUgaW1wbGllcyB0aGF0IHRoYXQgdmFsdWUgaXMgdGhlIG9uZSBiZWluZyBhbmltYXRlZCB0by4gVHdvIHZhbHVlcyBpbXBseSBzdGFydGluZwogICAgICAqIGFuZCBlbmRpbmcgdmFsdWVzLiBNb3JlIHRoYW4gdHdvIHZhbHVlcyBpbXBseSBhIHN0YXJ0aW5nIHZhbHVlLCB2YWx1ZXMgdG8gYW5pbWF0ZSB0aHJvdWdoCiAgICAgICogYWxvbmcgdGhlIHdheSwgYW5kIGFuIGVuZGluZyB2YWx1ZSAodGhlc2UgdmFsdWVzIHdpbGwgYmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFjcm9zcwogICAgICAqIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uKS4KQEAgLTI5Miw4ICs1NTcsMzIgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgYSBwcm9wZXJ0eSBhbG9uZyBhIDxjb2RlPlBhdGg8L2NvZGU+LgorICAgICAqIEEgPGNvZGU+UGF0aDwvY29kZT48Lz4gYW5pbWF0aW9uIG1vdmVzIGluIHR3byBkaW1lbnNpb25zLCBhbmltYXRpbmcgY29vcmRpbmF0ZXMKKyAgICAgKiA8Y29kZT4oeCwgeSk8L2NvZGU+IHRvZ2V0aGVyIHRvIGZvbGxvdyB0aGUgbGluZS4gVGhpcyB2YXJpYW50IGFuaW1hdGVzIHRoZSBjb29yZGluYXRlcworICAgICAqIGluIGEgPGNvZGU+UG9pbnRGPC9jb2RlPiB0byBmb2xsb3cgdGhlIDxjb2RlPlBhdGg8L2NvZGU+LiBJZiB0aGUgPGNvZGU+UHJvcGVydHk8L2NvZGU+CisgICAgICogYXNzb2NpYXRlZCB3aXRoIDxjb2RlPnByb3BlcnR5TmFtZTwvY29kZT4gdXNlcyBhIHR5cGUgb3RoZXIgdGhhbiA8Y29kZT5Qb2ludEY8L2NvZGU+LAorICAgICAqIDxjb2RlPmNvbnZlcnRlcjwvY29kZT4gY2FuIGJlIHVzZWQgdG8gY2hhbmdlIGZyb20gPGNvZGU+UG9pbnRGPC9jb2RlPiB0byB0aGUgdHlwZQorICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgPGNvZGU+UHJvcGVydHk8L2NvZGU+LgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IGlzIHRvIGJlIGFuaW1hdGVkLiBUaGlzIG9iamVjdCBzaG91bGQKKyAgICAgKiBoYXZlIGEgcHVibGljIG1ldGhvZCBvbiBpdCBjYWxsZWQgPGNvZGU+c2V0TmFtZSgpPC9jb2RlPiwgd2hlcmUgPGNvZGU+bmFtZTwvY29kZT4gaXMKKyAgICAgKiB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPnByb3BlcnR5TmFtZTwvY29kZT4gcGFyYW1ldGVyLgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkLgorICAgICAqIEBwYXJhbSBjb252ZXJ0ZXIgQ29udmVydHMgYSBQb2ludEYgdG8gdGhlIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXR0ZXIuIE1heSBiZQorICAgICAqICAgICAgICAgICAgICAgICAgbnVsbCBpZiBjb252ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LgorICAgICAqIEBwYXJhbSBwYXRoIFRoZSA8Y29kZT5QYXRoPC9jb2RlPiB0byBhbmltYXRlIHZhbHVlcyBhbG9uZy4KKyAgICAgKiBAcmV0dXJuIEFuIE9iamVjdEFuaW1hdG9yIG9iamVjdCB0aGF0IGlzIHNldCB1cCB0byBhbmltYXRlIGFsb25nIDxjb2RlPnBhdGg8L2NvZGU+LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0QW5pbWF0b3Igb2ZPYmplY3QoT2JqZWN0IHRhcmdldCwgU3RyaW5nIHByb3BlcnR5TmFtZSwKKyAgICAgICAgICAgIFR5cGVDb252ZXJ0ZXI8UG9pbnRGLCA/PiBjb252ZXJ0ZXIsIFBhdGggcGF0aCkgeworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBwdmggPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZk9iamVjdChwcm9wZXJ0eU5hbWUsIGNvbnZlcnRlciwgcGF0aCk7CisgICAgICAgIHJldHVybiBvZlByb3BlcnR5VmFsdWVzSG9sZGVyKHRhcmdldCwgcHZoKTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGFuIE9iamVjdEFuaW1hdG9yIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiBPYmplY3QgdmFsdWVzLiBBIHNpbmdsZQotICAgICAqIHZhbHVlIGltcGxpZXMgdGhhdCB0aGF0IHZhbHVlIGlzIHRoZSBvbmUgYmVpbmcgYW5pbWF0ZWQgdG8uIFR3byB2YWx1ZXMgaW1wbHkgYSBzdGFydGluZworICAgICAqIHZhbHVlIGltcGxpZXMgdGhhdCB0aGF0IHZhbHVlIGlzIHRoZSBvbmUgYmVpbmcgYW5pbWF0ZWQgdG8uIFR3byB2YWx1ZXMgaW1wbHkgc3RhcnRpbmcKICAgICAgKiBhbmQgZW5kaW5nIHZhbHVlcy4gTW9yZSB0aGFuIHR3byB2YWx1ZXMgaW1wbHkgYSBzdGFydGluZyB2YWx1ZSwgdmFsdWVzIHRvIGFuaW1hdGUgdGhyb3VnaAogICAgICAqIGFsb25nIHRoZSB3YXksIGFuZCBhbiBlbmRpbmcgdmFsdWUgKHRoZXNlIHZhbHVlcyB3aWxsIGJlIGRpc3RyaWJ1dGVkIGV2ZW5seSBhY3Jvc3MKICAgICAgKiB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbikuCkBAIC0zMTUsNiArNjA0LDUzIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhbiBPYmplY3RBbmltYXRvciB0aGF0IGFuaW1hdGVzIGJldHdlZW4gT2JqZWN0IHZhbHVlcy4gQSBzaW5nbGUKKyAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBUd28gdmFsdWVzIGltcGx5IHN0YXJ0aW5nCisgICAgICogYW5kIGVuZGluZyB2YWx1ZXMuIE1vcmUgdGhhbiB0d28gdmFsdWVzIGltcGx5IGEgc3RhcnRpbmcgdmFsdWUsIHZhbHVlcyB0byBhbmltYXRlIHRocm91Z2gKKyAgICAgKiBhbG9uZyB0aGUgd2F5LCBhbmQgYW4gZW5kaW5nIHZhbHVlICh0aGVzZSB2YWx1ZXMgd2lsbCBiZSBkaXN0cmlidXRlZCBldmVubHkgYWNyb3NzCisgICAgICogdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24pLiBUaGlzIHZhcmlhbnQgc3VwcGxpZXMgYSA8Y29kZT5UeXBlQ29udmVydGVyPC9jb2RlPiB0bworICAgICAqIGNvbnZlcnQgZnJvbSB0aGUgYW5pbWF0ZWQgdmFsdWVzIHRvIHRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eS4gSWYgb25seSBvbmUgdmFsdWUgaXMKKyAgICAgKiBzdXBwbGllZCwgdGhlIDxjb2RlPlR5cGVDb252ZXJ0ZXI8L2NvZGU+IG11c3QgaW1wbGVtZW50CisgICAgICoge0BsaW5rIFR5cGVDb252ZXJ0ZXIjY29udmVydEJhY2soT2JqZWN0KX0gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydHkgaXMgdG8gYmUgYW5pbWF0ZWQuCisgICAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZC4KKyAgICAgKiBAcGFyYW0gY29udmVydGVyIENvbnZlcnRzIHRoZSBhbmltYXRlZCBvYmplY3QgdG8gdGhlIFByb3BlcnR5IHR5cGUuCisgICAgICogQHBhcmFtIGV2YWx1YXRvciBBIFR5cGVFdmFsdWF0b3IgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGFuaW1hdGlvbiBmcmFtZSB0bworICAgICAqIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdGhlIE9iamVjdCB2YWx1ZXMgdG8gZGVyaXZlIHRoZSBhbmltYXRlZAorICAgICAqIHZhbHVlLgorICAgICAqIEBwYXJhbSB2YWx1ZXMgQSBzZXQgb2YgdmFsdWVzIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIGFuaW1hdGUgYmV0d2VlbiBvdmVyIHRpbWUuCisgICAgICogQHJldHVybiBBbiBPYmplY3RBbmltYXRvciBvYmplY3QgdGhhdCBpcyBzZXQgdXAgdG8gYW5pbWF0ZSBiZXR3ZWVuIHRoZSBnaXZlbiB2YWx1ZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyA8VCwgViwgUD4gT2JqZWN0QW5pbWF0b3Igb2ZPYmplY3QoVCB0YXJnZXQsIFByb3BlcnR5PFQsIFA+IHByb3BlcnR5LAorICAgICAgICAgICAgVHlwZUNvbnZlcnRlcjxWLCBQPiBjb252ZXJ0ZXIsIFR5cGVFdmFsdWF0b3I8Vj4gZXZhbHVhdG9yLCBWLi4uIHZhbHVlcykgeworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBwdmggPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZk9iamVjdChwcm9wZXJ0eSwgY29udmVydGVyLCBldmFsdWF0b3IsCisgICAgICAgICAgICAgICAgdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIG9mUHJvcGVydHlWYWx1ZXNIb2xkZXIodGFyZ2V0LCBwdmgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBhIHByb3BlcnR5IGFsb25nIGEgPGNvZGU+UGF0aDwvY29kZT4uCisgICAgICogQSA8Y29kZT5QYXRoPC9jb2RlPjwvPiBhbmltYXRpb24gbW92ZXMgaW4gdHdvIGRpbWVuc2lvbnMsIGFuaW1hdGluZyBjb29yZGluYXRlcworICAgICAqIDxjb2RlPih4LCB5KTwvY29kZT4gdG9nZXRoZXIgdG8gZm9sbG93IHRoZSBsaW5lLiBUaGlzIHZhcmlhbnQgYW5pbWF0ZXMgdGhlIGNvb3JkaW5hdGVzCisgICAgICogaW4gYSA8Y29kZT5Qb2ludEY8L2NvZGU+IHRvIGZvbGxvdyB0aGUgPGNvZGU+UGF0aDwvY29kZT4uIElmIDxjb2RlPnByb3BlcnR5PC9jb2RlPgorICAgICAqIHVzZXMgYSB0eXBlIG90aGVyIHRoYW4gPGNvZGU+UG9pbnRGPC9jb2RlPiwgPGNvZGU+Y29udmVydGVyPC9jb2RlPiBjYW4gYmUgdXNlZCB0byBjaGFuZ2UKKyAgICAgKiBmcm9tIDxjb2RlPlBvaW50RjwvY29kZT4gdG8gdGhlIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSA8Y29kZT5Qcm9wZXJ0eTwvY29kZT4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydHkgaXMgdG8gYmUgYW5pbWF0ZWQuCisgICAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZC4gU2hvdWxkIG5vdCBiZSBudWxsLgorICAgICAqIEBwYXJhbSBjb252ZXJ0ZXIgQ29udmVydHMgYSBQb2ludEYgdG8gdGhlIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXR0ZXIuIE1heSBiZQorICAgICAqICAgICAgICAgICAgICAgICAgbnVsbCBpZiBjb252ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LgorICAgICAqIEBwYXJhbSBwYXRoIFRoZSA8Y29kZT5QYXRoPC9jb2RlPiB0byBhbmltYXRlIHZhbHVlcyBhbG9uZy4KKyAgICAgKiBAcmV0dXJuIEFuIE9iamVjdEFuaW1hdG9yIG9iamVjdCB0aGF0IGlzIHNldCB1cCB0byBhbmltYXRlIGFsb25nIDxjb2RlPnBhdGg8L2NvZGU+LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgPFQsIFY+IE9iamVjdEFuaW1hdG9yIG9mT2JqZWN0KFQgdGFyZ2V0LCBQcm9wZXJ0eTxULCBWPiBwcm9wZXJ0eSwKKyAgICAgICAgICAgIFR5cGVDb252ZXJ0ZXI8UG9pbnRGLCBWPiBjb252ZXJ0ZXIsIFBhdGggcGF0aCkgeworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBwdmggPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZk9iamVjdChwcm9wZXJ0eSwgY29udmVydGVyLCBwYXRoKTsKKyAgICAgICAgcmV0dXJuIG9mUHJvcGVydHlWYWx1ZXNIb2xkZXIodGFyZ2V0LCBwdmgpOworICAgIH0KKworICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gT2JqZWN0QW5pbWF0b3IgdGhhdCBhbmltYXRlcyBiZXR3ZWVuIHRoZSBzZXRzIG9mIHZhbHVlcyBzcGVjaWZpZWQKICAgICAgKiBpbiA8Y29kZT5Qcm9wZXJ0eVZhbHVlSG9sZGVyPC9jb2RlPiBvYmplY3RzLiBUaGlzIHZhcmlhbnQgc2hvdWxkIGJlIHVzZWQgd2hlbiBhbmltYXRpbmcKICAgICAgKiBzZXZlcmFsIHByb3BlcnRpZXMgYXQgb25jZSB3aXRoIHRoZSBzYW1lIE9iamVjdEFuaW1hdG9yLCBzaW5jZSBQcm9wZXJ0eVZhbHVlc0hvbGRlciBhbGxvd3MKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9Qb2ludEZFdmFsdWF0b3IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9Qb2ludEZFdmFsdWF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWQ1MDFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1BvaW50RkV2YWx1YXRvci5qYXZhCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBhbmRyb2lkLmFuaW1hdGlvbjsKKworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnRGOworCisvKioKKyAqIFRoaXMgZXZhbHVhdG9yIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gdHlwZSBpbnRlcnBvbGF0aW9uIGJldHdlZW4gPGNvZGU+UG9pbnRGPC9jb2RlPiB2YWx1ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBQb2ludEZFdmFsdWF0b3IgaW1wbGVtZW50cyBUeXBlRXZhbHVhdG9yPFBvaW50Rj4geworCisgICAgLyoqCisgICAgICogV2hlbiBudWxsLCBhIG5ldyBQb2ludEYgaXMgcmV0dXJuZWQgb24gZXZlcnkgZXZhbHVhdGUgY2FsbC4gV2hlbiBub24tbnVsbCwKKyAgICAgKiBtUG9pbnQgd2lsbCBiZSBtb2RpZmllZCBhbmQgcmV0dXJuZWQgb24gZXZlcnkgZXZhbHVhdGUuCisgICAgICovCisgICAgcHJpdmF0ZSBQb2ludEYgbVBvaW50OworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0IGEgUG9pbnRGRXZhbHVhdG9yIHRoYXQgcmV0dXJucyBhIG5ldyBQb2ludEYgb24gZXZlcnkgZXZhbHVhdGUgY2FsbC4KKyAgICAgKiBUbyBhdm9pZCBjcmVhdGluZyBhbiBvYmplY3QgZm9yIGVhY2ggZXZhbHVhdGUgY2FsbCwKKyAgICAgKiB7QGxpbmsgUG9pbnRGRXZhbHVhdG9yI1BvaW50RkV2YWx1YXRvcihhbmRyb2lkLmdyYXBoaWNzLlBvaW50Ril9IHNob3VsZCBiZSB1c2VkCisgICAgICogd2hlbmV2ZXIgcG9zc2libGUuCisgICAgICovCisgICAgcHVibGljIFBvaW50RkV2YWx1YXRvcigpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgUG9pbnRGRXZhbHVhdG9yIHRoYXQgbW9kaWZpZXMgYW5kIHJldHVybnMgPGNvZGU+cmV1c2U8L2NvZGU+CisgICAgICogaW4ge0BsaW5rICNldmFsdWF0ZShmbG9hdCwgYW5kcm9pZC5ncmFwaGljcy5Qb2ludEYsIGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnRGKX0gY2FsbHMuCisgICAgICogVGhlIHZhbHVlIHJldHVybmVkIGZyb20KKyAgICAgKiB7QGxpbmsgI2V2YWx1YXRlKGZsb2F0LCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50RiwgYW5kcm9pZC5ncmFwaGljcy5Qb2ludEYpfSBzaG91bGQKKyAgICAgKiBub3QgYmUgY2FjaGVkIGJlY2F1c2UgaXQgd2lsbCBjaGFuZ2Ugb3ZlciB0aW1lIGFzIHRoZSBvYmplY3QgaXMgcmV1c2VkIG9uIGVhY2gKKyAgICAgKiBjYWxsLgorICAgICAqCisgICAgICogQHBhcmFtIHJldXNlIEEgUG9pbnRGIHRvIGJlIG1vZGlmaWVkIGFuZCByZXR1cm5lZCBieSBldmFsdWF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgUG9pbnRGRXZhbHVhdG9yKFBvaW50RiByZXVzZSkgeworICAgICAgICBtUG9pbnQgPSByZXVzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlc3VsdCBvZiBsaW5lYXJseSBpbnRlcnBvbGF0aW5nIHRoZSBzdGFydCBhbmQKKyAgICAgKiBlbmQgUG9pbnRGIHZhbHVlcywgd2l0aCA8Y29kZT5mcmFjdGlvbjwvY29kZT4gcmVwcmVzZW50aW5nIHRoZSBwcm9wb3J0aW9uCisgICAgICogYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCB2YWx1ZXMuIFRoZSBjYWxjdWxhdGlvbiBpcyBhIHNpbXBsZSBwYXJhbWV0cmljCisgICAgICogY2FsY3VsYXRpb24gb24gZWFjaCBvZiB0aGUgc2VwYXJhdGUgY29tcG9uZW50cyBpbiB0aGUgUG9pbnRGIG9iamVjdHMKKyAgICAgKiAoeCwgeSkuCisgICAgICoKKyAgICAgKiA8cD5JZiB7QGxpbmsgI1BvaW50RkV2YWx1YXRvcihhbmRyb2lkLmdyYXBoaWNzLlBvaW50Ril9IHdhcyB1c2VkIHRvIGNvbnN0cnVjdAorICAgICAqIHRoaXMgUG9pbnRGRXZhbHVhdG9yLCB0aGUgb2JqZWN0IHJldHVybmVkIHdpbGwgYmUgdGhlIDxjb2RlPnJldXNlPC9jb2RlPgorICAgICAqIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3Rvci48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gZnJhY3Rpb24gICBUaGUgZnJhY3Rpb24gZnJvbSB0aGUgc3RhcnRpbmcgdG8gdGhlIGVuZGluZyB2YWx1ZXMKKyAgICAgKiBAcGFyYW0gc3RhcnRWYWx1ZSBUaGUgc3RhcnQgUG9pbnRGCisgICAgICogQHBhcmFtIGVuZFZhbHVlICAgVGhlIGVuZCBQb2ludEYKKyAgICAgKiBAcmV0dXJuIEEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCB2YWx1ZXMsIGdpdmVuIHRoZQorICAgICAqICAgICAgICAgPGNvZGU+ZnJhY3Rpb248L2NvZGU+IHBhcmFtZXRlci4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgUG9pbnRGIGV2YWx1YXRlKGZsb2F0IGZyYWN0aW9uLCBQb2ludEYgc3RhcnRWYWx1ZSwgUG9pbnRGIGVuZFZhbHVlKSB7CisgICAgICAgIGZsb2F0IHggPSBzdGFydFZhbHVlLnggKyAoZnJhY3Rpb24gKiAoZW5kVmFsdWUueCAtIHN0YXJ0VmFsdWUueCkpOworICAgICAgICBmbG9hdCB5ID0gc3RhcnRWYWx1ZS55ICsgKGZyYWN0aW9uICogKGVuZFZhbHVlLnkgLSBzdGFydFZhbHVlLnkpKTsKKworICAgICAgICBpZiAobVBvaW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1Qb2ludC5zZXQoeCwgeSk7CisgICAgICAgICAgICByZXR1cm4gbVBvaW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludEYoeCwgeSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vUHJvcGVydHlWYWx1ZXNIb2xkZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9Qcm9wZXJ0eVZhbHVlc0hvbGRlci5qYXZhCmluZGV4IDQzMDE0YWQuLjFiMDI4ZTAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9Qcm9wZXJ0eVZhbHVlc0hvbGRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9Qcm9wZXJ0eVZhbHVlc0hvbGRlci5qYXZhCkBAIC0xNiw2ICsxNiw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5hbmltYXRpb247CiAKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhdGg7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb2ludEY7CitpbXBvcnQgYW5kcm9pZC51dGlsLkZsb2F0TWF0aDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRmxvYXRQcm9wZXJ0eTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuSW50UHJvcGVydHk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKQEAgLTEyNCw2ICsxMjcsMTEgQEAKICAgICBwcml2YXRlIE9iamVjdCBtQW5pbWF0ZWRWYWx1ZTsKIAogICAgIC8qKgorICAgICAqIENvbnZlcnRzIGZyb20gdGhlIHNvdXJjZSBPYmplY3QgdHlwZSB0byB0aGUgc2V0dGVyIE9iamVjdCB0eXBlLgorICAgICAqLworICAgIHByaXZhdGUgVHlwZUNvbnZlcnRlciBtQ29udmVydGVyOworCisgICAgLyoqCiAgICAgICogSW50ZXJuYWwgdXRpbGl0eSBjb25zdHJ1Y3RvciwgdXNlZCBieSB0aGUgZmFjdG9yeSBtZXRob2RzIHRvIHNldCB0aGUgcHJvcGVydHkgbmFtZS4KICAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3IgdGhpcyBob2xkZXIuCiAgICAgICovCkBAIC0xNjYsNiArMTc0LDEwNCBAQAogCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFByb3BlcnR5VmFsdWVzSG9sZGVyIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBuYW1lIGFuZAorICAgICAqIHNldCBvZiA8Y29kZT5pbnRbXTwvY29kZT4gdmFsdWVzLiBBdCBsZWFzdCB0d28gPGNvZGU+aW50W108L2NvZGU+IHZhbHVlcyBtdXN0IGJlIHN1cHBsaWVkLAorICAgICAqIGEgc3RhcnQgYW5kIGVuZCB2YWx1ZS4gSWYgbW9yZSB2YWx1ZXMgYXJlIHN1cHBsaWVkLCB0aGUgdmFsdWVzIHdpbGwgYmUgYW5pbWF0ZWQgZnJvbSB0aGUKKyAgICAgKiBzdGFydCwgdGhyb3VnaCBhbGwgaW50ZXJtZWRpYXRlIHZhbHVlcyB0byB0aGUgZW5kIHZhbHVlLiBXaGVuIHVzZWQgd2l0aCBPYmplY3RBbmltYXRvciwKKyAgICAgKiB0aGUgZWxlbWVudHMgb2YgdGhlIGFycmF5IHJlcHJlc2VudCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgc2V0dGVyIGZ1bmN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQuIENhbiBhbHNvIGJlIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgY2FzZS1zZW5zaXRpdmUgbmFtZSBvZiB0aGUgZW50aXJlIHNldHRlciBtZXRob2QuIFNob3VsZCBub3QgYmUgbnVsbC4KKyAgICAgKiBAcGFyYW0gdmFsdWVzIFRoZSB2YWx1ZXMgdGhhdCB0aGUgcHJvcGVydHkgd2lsbCBhbmltYXRlIGJldHdlZW4uCisgICAgICogQHJldHVybiBQcm9wZXJ0eVZhbHVlc0hvbGRlciBUaGUgY29uc3RydWN0ZWQgUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2JqZWN0LgorICAgICAqIEBzZWUgSW50QXJyYXlFdmFsdWF0b3IjSW50QXJyYXlFdmFsdWF0b3IoaW50W10pCisgICAgICogQHNlZSBPYmplY3RBbmltYXRvciNvZk11bHRpSW50KE9iamVjdCwgU3RyaW5nLCBUeXBlQ29udmVydGVyLCBUeXBlRXZhbHVhdG9yLCBPYmplY3RbXSkKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlJbnQoU3RyaW5nIHByb3BlcnR5TmFtZSwgaW50W11bXSB2YWx1ZXMpIHsKKyAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPCAyKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBdCBsZWFzdCAyIHZhbHVlcyBtdXN0IGJlIHN1cHBsaWVkIik7CisgICAgICAgIH0KKyAgICAgICAgaW50IG51bVBhcmFtZXRlcnMgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHZhbHVlc1tpXSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidmFsdWVzIG11c3Qgbm90IGJlIG51bGwiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBsZW5ndGggPSB2YWx1ZXNbaV0ubGVuZ3RoOworICAgICAgICAgICAgaWYgKGkgPT0gMCkgeworICAgICAgICAgICAgICAgIG51bVBhcmFtZXRlcnMgPSBsZW5ndGg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCAhPSBudW1QYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVmFsdWVzIG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgSW50QXJyYXlFdmFsdWF0b3IgZXZhbHVhdG9yID0gbmV3IEludEFycmF5RXZhbHVhdG9yKG5ldyBpbnRbbnVtUGFyYW1ldGVyc10pOworICAgICAgICByZXR1cm4gbmV3IE11bHRpSW50VmFsdWVzSG9sZGVyKHByb3BlcnR5TmFtZSwgbnVsbCwgZXZhbHVhdG9yLCAoT2JqZWN0W10pIHZhbHVlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFByb3BlcnR5VmFsdWVzSG9sZGVyIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBuYW1lIHRvIHVzZQorICAgICAqIGFzIGEgbXVsdGktaW50IHNldHRlci4gVGhlIHZhbHVlcyBhcmUgYW5pbWF0ZWQgYWxvbmcgdGhlIHBhdGgsIHdpdGggdGhlIGZpcnN0CisgICAgICogcGFyYW1ldGVyIG9mIHRoZSBzZXR0ZXIgc2V0IHRvIHRoZSB4IGNvb3JkaW5hdGUgYW5kIHRoZSBzZWNvbmQgc2V0IHRvIHRoZSB5IGNvb3JkaW5hdGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZC4gQ2FuIGFsc28gYmUgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICBjYXNlLXNlbnNpdGl2ZSBuYW1lIG9mIHRoZSBlbnRpcmUgc2V0dGVyIG1ldGhvZC4gU2hvdWxkIG5vdCBiZSBudWxsLgorICAgICAqICAgICAgICAgICAgICAgICAgICAgVGhlIHNldHRlciBtdXN0IHRha2UgZXhhY3RseSB0d28gPGNvZGU+aW50PC9jb2RlPiBwYXJhbWV0ZXJzLgorICAgICAqIEBwYXJhbSBwYXRoIFRoZSBQYXRoIGFsb25nIHdoaWNoIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIGFuaW1hdGVkLgorICAgICAqIEByZXR1cm4gUHJvcGVydHlWYWx1ZXNIb2xkZXIgVGhlIGNvbnN0cnVjdGVkIFByb3BlcnR5VmFsdWVzSG9sZGVyIG9iamVjdC4KKyAgICAgKiBAc2VlIE9iamVjdEFuaW1hdG9yI29mUHJvcGVydHlWYWx1ZXNIb2xkZXIoT2JqZWN0LCBQcm9wZXJ0eVZhbHVlc0hvbGRlci4uLikKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlJbnQoU3RyaW5nIHByb3BlcnR5TmFtZSwgUGF0aCBwYXRoKSB7CisgICAgICAgIEtleWZyYW1lW10ga2V5ZnJhbWVzID0gY3JlYXRlS2V5ZnJhbWVzKHBhdGgpOworICAgICAgICBLZXlmcmFtZVNldCBrZXlmcmFtZVNldCA9IEtleWZyYW1lU2V0Lm9mS2V5ZnJhbWUoa2V5ZnJhbWVzKTsKKyAgICAgICAgVHlwZUV2YWx1YXRvcjxQb2ludEY+IGV2YWx1YXRvciA9IG5ldyBQb2ludEZFdmFsdWF0b3IobmV3IFBvaW50RigpKTsKKyAgICAgICAgUG9pbnRGVG9JbnRBcnJheSBjb252ZXJ0ZXIgPSBuZXcgUG9pbnRGVG9JbnRBcnJheSgpOworICAgICAgICByZXR1cm4gbmV3IE11bHRpSW50VmFsdWVzSG9sZGVyKHByb3BlcnR5TmFtZSwgY29udmVydGVyLCBldmFsdWF0b3IsIGtleWZyYW1lU2V0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgUHJvcGVydHlWYWx1ZXNIb2xkZXIgd2l0aCBhIGdpdmVuIHByb3BlcnR5IGFuZAorICAgICAqIHNldCBvZiBPYmplY3QgdmFsdWVzIGZvciB1c2Ugd2l0aCBPYmplY3RBbmltYXRvciBtdWx0aS12YWx1ZSBzZXR0ZXJzLiBUaGUgT2JqZWN0CisgICAgICogdmFsdWVzIGFyZSBjb252ZXJ0ZWQgdG8gPGNvZGU+aW50W108L2NvZGU+IHVzaW5nIHRoZSBjb252ZXJ0ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZCBvciBjb21wbGV0ZSBuYW1lIG9mIHRoZSBzZXR0ZXIuCisgICAgICogICAgICAgICAgICAgICAgICAgICBTaG91bGQgbm90IGJlIG51bGwuCisgICAgICogQHBhcmFtIGNvbnZlcnRlciBVc2VkIHRvIGNvbnZlcnQgdGhlIGFuaW1hdGVkIHZhbHVlIHRvIHNldHRlciBwYXJhbWV0ZXJzLgorICAgICAqIEBwYXJhbSBldmFsdWF0b3IgQSBUeXBlRXZhbHVhdG9yIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBhbmltYXRpb24gZnJhbWUgdG8KKyAgICAgKiBwcm92aWRlIHRoZSBuZWNlc3NhcnkgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHRoZSBPYmplY3QgdmFsdWVzIHRvIGRlcml2ZSB0aGUgYW5pbWF0ZWQKKyAgICAgKiB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gdmFsdWVzIFRoZSB2YWx1ZXMgdGhhdCB0aGUgcHJvcGVydHkgd2lsbCBhbmltYXRlIGJldHdlZW4uCisgICAgICogQHJldHVybiBQcm9wZXJ0eVZhbHVlc0hvbGRlciBUaGUgY29uc3RydWN0ZWQgUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2JqZWN0LgorICAgICAqIEBzZWUgT2JqZWN0QW5pbWF0b3Ijb2ZNdWx0aUludChPYmplY3QsIFN0cmluZywgVHlwZUNvbnZlcnRlciwgVHlwZUV2YWx1YXRvciwgT2JqZWN0W10pCisgICAgICogQHNlZSBPYmplY3RBbmltYXRvciNvZlByb3BlcnR5VmFsdWVzSG9sZGVyKE9iamVjdCwgUHJvcGVydHlWYWx1ZXNIb2xkZXIuLi4pCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyA8Vj4gUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZNdWx0aUludChTdHJpbmcgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgVHlwZUNvbnZlcnRlcjxWLCBpbnRbXT4gY29udmVydGVyLCBUeXBlRXZhbHVhdG9yPFY+IGV2YWx1YXRvciwgVi4uLiB2YWx1ZXMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUludFZhbHVlc0hvbGRlcihwcm9wZXJ0eU5hbWUsIGNvbnZlcnRlciwgZXZhbHVhdG9yLCB2YWx1ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYSBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IG5hbWUgb3IKKyAgICAgKiBzZXR0ZXIgbmFtZSBmb3IgdXNlIGluIGEgbXVsdGktaW50IHNldHRlciBmdW5jdGlvbiB1c2luZyBPYmplY3RBbmltYXRvci4gVGhlIHZhbHVlcyBjYW4gYmUKKyAgICAgKiBvZiBhbnkgdHlwZSwgYnV0IHRoZSB0eXBlIHNob3VsZCBiZSBjb25zaXN0ZW50IHNvIHRoYXQgdGhlIHN1cHBsaWVkCisgICAgICoge0BsaW5rIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3J9IGNhbiBiZSB1c2VkIHRvIHRvIGV2YWx1YXRlIHRoZSBhbmltYXRlZCB2YWx1ZS4gVGhlCisgICAgICogPGNvZGU+Y29udmVydGVyPC9jb2RlPiBjb252ZXJ0cyB0aGUgdmFsdWVzIHRvIHBhcmFtZXRlcnMgaW4gdGhlIHNldHRlciBmdW5jdGlvbi4KKyAgICAgKgorICAgICAqIDxwPkF0IGxlYXN0IHR3byB2YWx1ZXMgbXVzdCBiZSBzdXBwbGllZCwgYSBzdGFydCBhbmQgYW4gZW5kIHZhbHVlLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBzZXQgb2YgdmFsdWVzLiBUaGlzCisgICAgICogICAgICAgICAgICAgICAgICAgICBtYXkgYWxzbyBiZSB0aGUgY29tcGxldGUgbmFtZSBvZiBhIHNldHRlciBmdW5jdGlvbi4KKyAgICAgKiBAcGFyYW0gY29udmVydGVyICAgIENvbnZlcnRzIDxjb2RlPnZhbHVlczwvY29kZT4gaW50byBpbnQgcGFyYW1ldGVycyBmb3IgdGhlIHNldHRlci4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgIENhbiBiZSBudWxsIGlmIHRoZSBLZXlmcmFtZXMgaGF2ZSBpbnRbXSB2YWx1ZXMuCisgICAgICogQHBhcmFtIGV2YWx1YXRvciAgICBVc2VkIHRvIGludGVycG9sYXRlIGJldHdlZW4gdmFsdWVzLgorICAgICAqIEBwYXJhbSB2YWx1ZXMgICAgICAgVGhlIHZhbHVlcyBhdCBzcGVjaWZpYyBmcmFjdGlvbmFsIHRpbWVzIHRvIGV2YWx1YXRlIGJldHdlZW4KKyAgICAgKiBAcmV0dXJuIEEgUHJvcGVydHlWYWx1ZXNIb2xkZXIgZm9yIGEgbXVsdGktaW50IHBhcmFtZXRlciBzZXR0ZXIuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyA8VD4gUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZNdWx0aUludChTdHJpbmcgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgVHlwZUNvbnZlcnRlcjxULCBpbnRbXT4gY29udmVydGVyLCBUeXBlRXZhbHVhdG9yPFQ+IGV2YWx1YXRvciwgS2V5ZnJhbWUuLi4gdmFsdWVzKSB7CisgICAgICAgIEtleWZyYW1lU2V0IGtleWZyYW1lU2V0ID0gS2V5ZnJhbWVTZXQub2ZLZXlmcmFtZSh2YWx1ZXMpOworICAgICAgICByZXR1cm4gbmV3IE11bHRpSW50VmFsdWVzSG9sZGVyKHByb3BlcnR5TmFtZSwgY29udmVydGVyLCBldmFsdWF0b3IsIGtleWZyYW1lU2V0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgUHJvcGVydHlWYWx1ZXNIb2xkZXIgd2l0aCBhIGdpdmVuIHByb3BlcnR5IG5hbWUgYW5kCiAgICAgICogc2V0IG9mIGZsb2F0IHZhbHVlcy4KICAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZC4KICAgICAgKiBAcGFyYW0gdmFsdWVzIFRoZSB2YWx1ZXMgdGhhdCB0aGUgbmFtZWQgcHJvcGVydHkgd2lsbCBhbmltYXRlIGJldHdlZW4uCkBAIC0xODgsNiArMjk0LDEwMyBAQAogCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFByb3BlcnR5VmFsdWVzSG9sZGVyIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBuYW1lIGFuZAorICAgICAqIHNldCBvZiA8Y29kZT5mbG9hdFtdPC9jb2RlPiB2YWx1ZXMuIEF0IGxlYXN0IHR3byA8Y29kZT5mbG9hdFtdPC9jb2RlPiB2YWx1ZXMgbXVzdCBiZSBzdXBwbGllZCwKKyAgICAgKiBhIHN0YXJ0IGFuZCBlbmQgdmFsdWUuIElmIG1vcmUgdmFsdWVzIGFyZSBzdXBwbGllZCwgdGhlIHZhbHVlcyB3aWxsIGJlIGFuaW1hdGVkIGZyb20gdGhlCisgICAgICogc3RhcnQsIHRocm91Z2ggYWxsIGludGVybWVkaWF0ZSB2YWx1ZXMgdG8gdGhlIGVuZCB2YWx1ZS4gV2hlbiB1c2VkIHdpdGggT2JqZWN0QW5pbWF0b3IsCisgICAgICogdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheSByZXByZXNlbnQgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIHNldHRlciBmdW5jdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkLiBDYW4gYWxzbyBiZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhc2Utc2Vuc2l0aXZlIG5hbWUgb2YgdGhlIGVudGlyZSBzZXR0ZXIgbWV0aG9kLiBTaG91bGQgbm90IGJlIG51bGwuCisgICAgICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIHRoYXQgdGhlIHByb3BlcnR5IHdpbGwgYW5pbWF0ZSBiZXR3ZWVuLgorICAgICAqIEByZXR1cm4gUHJvcGVydHlWYWx1ZXNIb2xkZXIgVGhlIGNvbnN0cnVjdGVkIFByb3BlcnR5VmFsdWVzSG9sZGVyIG9iamVjdC4KKyAgICAgKiBAc2VlIEZsb2F0QXJyYXlFdmFsdWF0b3IjRmxvYXRBcnJheUV2YWx1YXRvcihmbG9hdFtdKQorICAgICAqIEBzZWUgT2JqZWN0QW5pbWF0b3Ijb2ZNdWx0aUZsb2F0KE9iamVjdCwgU3RyaW5nLCBUeXBlQ29udmVydGVyLCBUeXBlRXZhbHVhdG9yLCBPYmplY3RbXSkKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlGbG9hdChTdHJpbmcgcHJvcGVydHlOYW1lLCBmbG9hdFtdW10gdmFsdWVzKSB7CisgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoIDwgMikgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQXQgbGVhc3QgMiB2YWx1ZXMgbXVzdCBiZSBzdXBwbGllZCIpOworICAgICAgICB9CisgICAgICAgIGludCBudW1QYXJhbWV0ZXJzID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInZhbHVlcyBtdXN0IG5vdCBiZSBudWxsIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gdmFsdWVzW2ldLmxlbmd0aDsKKyAgICAgICAgICAgIGlmIChpID09IDApIHsKKyAgICAgICAgICAgICAgICBudW1QYXJhbWV0ZXJzID0gbGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggIT0gbnVtUGFyYW1ldGVycykgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlZhbHVlcyBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIGxlbmd0aCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEZsb2F0QXJyYXlFdmFsdWF0b3IgZXZhbHVhdG9yID0gbmV3IEZsb2F0QXJyYXlFdmFsdWF0b3IobmV3IGZsb2F0W251bVBhcmFtZXRlcnNdKTsKKyAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUZsb2F0VmFsdWVzSG9sZGVyKHByb3BlcnR5TmFtZSwgbnVsbCwgZXZhbHVhdG9yLCAoT2JqZWN0W10pIHZhbHVlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFByb3BlcnR5VmFsdWVzSG9sZGVyIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBuYW1lIHRvIHVzZQorICAgICAqIGFzIGEgbXVsdGktZmxvYXQgc2V0dGVyLiBUaGUgdmFsdWVzIGFyZSBhbmltYXRlZCBhbG9uZyB0aGUgcGF0aCwgd2l0aCB0aGUgZmlyc3QKKyAgICAgKiBwYXJhbWV0ZXIgb2YgdGhlIHNldHRlciBzZXQgdG8gdGhlIHggY29vcmRpbmF0ZSBhbmQgdGhlIHNlY29uZCBzZXQgdG8gdGhlIHkgY29vcmRpbmF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkLiBDYW4gYWxzbyBiZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgIGNhc2Utc2Vuc2l0aXZlIG5hbWUgb2YgdGhlIGVudGlyZSBzZXR0ZXIgbWV0aG9kLiBTaG91bGQgbm90IGJlIG51bGwuCisgICAgICogICAgICAgICAgICAgICAgICAgICBUaGUgc2V0dGVyIG11c3QgdGFrZSBleGFjdGx5IHR3byA8Y29kZT5mbG9hdDwvY29kZT4gcGFyYW1ldGVycy4KKyAgICAgKiBAcGFyYW0gcGF0aCBUaGUgUGF0aCBhbG9uZyB3aGljaCB0aGUgdmFsdWVzIHNob3VsZCBiZSBhbmltYXRlZC4KKyAgICAgKiBAcmV0dXJuIFByb3BlcnR5VmFsdWVzSG9sZGVyIFRoZSBjb25zdHJ1Y3RlZCBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvYmplY3QuCisgICAgICogQHNlZSBPYmplY3RBbmltYXRvciNvZlByb3BlcnR5VmFsdWVzSG9sZGVyKE9iamVjdCwgUHJvcGVydHlWYWx1ZXNIb2xkZXIuLi4pCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvZk11bHRpRmxvYXQoU3RyaW5nIHByb3BlcnR5TmFtZSwgUGF0aCBwYXRoKSB7CisgICAgICAgIEtleWZyYW1lW10ga2V5ZnJhbWVzID0gY3JlYXRlS2V5ZnJhbWVzKHBhdGgpOworICAgICAgICBLZXlmcmFtZVNldCBrZXlmcmFtZVNldCA9IEtleWZyYW1lU2V0Lm9mS2V5ZnJhbWUoa2V5ZnJhbWVzKTsKKyAgICAgICAgVHlwZUV2YWx1YXRvcjxQb2ludEY+IGV2YWx1YXRvciA9IG5ldyBQb2ludEZFdmFsdWF0b3IobmV3IFBvaW50RigpKTsKKyAgICAgICAgUG9pbnRGVG9GbG9hdEFycmF5IGNvbnZlcnRlciA9IG5ldyBQb2ludEZUb0Zsb2F0QXJyYXkoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUZsb2F0VmFsdWVzSG9sZGVyKHByb3BlcnR5TmFtZSwgY29udmVydGVyLCBldmFsdWF0b3IsIGtleWZyYW1lU2V0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgUHJvcGVydHlWYWx1ZXNIb2xkZXIgd2l0aCBhIGdpdmVuIHByb3BlcnR5IGFuZAorICAgICAqIHNldCBvZiBPYmplY3QgdmFsdWVzIGZvciB1c2Ugd2l0aCBPYmplY3RBbmltYXRvciBtdWx0aS12YWx1ZSBzZXR0ZXJzLiBUaGUgT2JqZWN0CisgICAgICogdmFsdWVzIGFyZSBjb252ZXJ0ZWQgdG8gPGNvZGU+ZmxvYXRbXTwvY29kZT4gdXNpbmcgdGhlIGNvbnZlcnRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkIG9yIGNvbXBsZXRlIG5hbWUgb2YgdGhlIHNldHRlci4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgIFNob3VsZCBub3QgYmUgbnVsbC4KKyAgICAgKiBAcGFyYW0gY29udmVydGVyIFVzZWQgdG8gY29udmVydCB0aGUgYW5pbWF0ZWQgdmFsdWUgdG8gc2V0dGVyIHBhcmFtZXRlcnMuCisgICAgICogQHBhcmFtIGV2YWx1YXRvciBBIFR5cGVFdmFsdWF0b3IgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGFuaW1hdGlvbiBmcmFtZSB0bworICAgICAqIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdGhlIE9iamVjdCB2YWx1ZXMgdG8gZGVyaXZlIHRoZSBhbmltYXRlZAorICAgICAqIHZhbHVlLgorICAgICAqIEBwYXJhbSB2YWx1ZXMgVGhlIHZhbHVlcyB0aGF0IHRoZSBwcm9wZXJ0eSB3aWxsIGFuaW1hdGUgYmV0d2Vlbi4KKyAgICAgKiBAcmV0dXJuIFByb3BlcnR5VmFsdWVzSG9sZGVyIFRoZSBjb25zdHJ1Y3RlZCBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvYmplY3QuCisgICAgICogQHNlZSBPYmplY3RBbmltYXRvciNvZk11bHRpRmxvYXQoT2JqZWN0LCBTdHJpbmcsIFR5cGVDb252ZXJ0ZXIsIFR5cGVFdmFsdWF0b3IsIE9iamVjdFtdKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgPFY+IFByb3BlcnR5VmFsdWVzSG9sZGVyIG9mTXVsdGlGbG9hdChTdHJpbmcgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgVHlwZUNvbnZlcnRlcjxWLCBmbG9hdFtdPiBjb252ZXJ0ZXIsIFR5cGVFdmFsdWF0b3I8Vj4gZXZhbHVhdG9yLCBWLi4uIHZhbHVlcykgeworICAgICAgICByZXR1cm4gbmV3IE11bHRpRmxvYXRWYWx1ZXNIb2xkZXIocHJvcGVydHlOYW1lLCBjb252ZXJ0ZXIsIGV2YWx1YXRvciwgdmFsdWVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBuYW1lIG9yCisgICAgICogc2V0dGVyIG5hbWUgZm9yIHVzZSBpbiBhIG11bHRpLWZsb2F0IHNldHRlciBmdW5jdGlvbiB1c2luZyBPYmplY3RBbmltYXRvci4gVGhlIHZhbHVlcyBjYW4gYmUKKyAgICAgKiBvZiBhbnkgdHlwZSwgYnV0IHRoZSB0eXBlIHNob3VsZCBiZSBjb25zaXN0ZW50IHNvIHRoYXQgdGhlIHN1cHBsaWVkCisgICAgICoge0BsaW5rIGFuZHJvaWQuYW5pbWF0aW9uLlR5cGVFdmFsdWF0b3J9IGNhbiBiZSB1c2VkIHRvIHRvIGV2YWx1YXRlIHRoZSBhbmltYXRlZCB2YWx1ZS4gVGhlCisgICAgICogPGNvZGU+Y29udmVydGVyPC9jb2RlPiBjb252ZXJ0cyB0aGUgdmFsdWVzIHRvIHBhcmFtZXRlcnMgaW4gdGhlIHNldHRlciBmdW5jdGlvbi4KKyAgICAgKgorICAgICAqIDxwPkF0IGxlYXN0IHR3byB2YWx1ZXMgbXVzdCBiZSBzdXBwbGllZCwgYSBzdGFydCBhbmQgYW4gZW5kIHZhbHVlLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBzZXQgb2YgdmFsdWVzLiBUaGlzCisgICAgICogICAgICAgICAgICAgICAgICAgICBtYXkgYWxzbyBiZSB0aGUgY29tcGxldGUgbmFtZSBvZiBhIHNldHRlciBmdW5jdGlvbi4KKyAgICAgKiBAcGFyYW0gY29udmVydGVyICAgIENvbnZlcnRzIDxjb2RlPnZhbHVlczwvY29kZT4gaW50byBmbG9hdCBwYXJhbWV0ZXJzIGZvciB0aGUgc2V0dGVyLgorICAgICAqICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIG51bGwgaWYgdGhlIEtleWZyYW1lcyBoYXZlIGZsb2F0W10gdmFsdWVzLgorICAgICAqIEBwYXJhbSBldmFsdWF0b3IgICAgVXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHZhbHVlcy4KKyAgICAgKiBAcGFyYW0gdmFsdWVzICAgICAgIFRoZSB2YWx1ZXMgYXQgc3BlY2lmaWMgZnJhY3Rpb25hbCB0aW1lcyB0byBldmFsdWF0ZSBiZXR3ZWVuCisgICAgICogQHJldHVybiBBIFByb3BlcnR5VmFsdWVzSG9sZGVyIGZvciBhIG11bHRpLWZsb2F0IHBhcmFtZXRlciBzZXR0ZXIuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyA8VD4gUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZNdWx0aUZsb2F0KFN0cmluZyBwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICBUeXBlQ29udmVydGVyPFQsIGZsb2F0W10+IGNvbnZlcnRlciwgVHlwZUV2YWx1YXRvcjxUPiBldmFsdWF0b3IsIEtleWZyYW1lLi4uIHZhbHVlcykgeworICAgICAgICBLZXlmcmFtZVNldCBrZXlmcmFtZVNldCA9IEtleWZyYW1lU2V0Lm9mS2V5ZnJhbWUodmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUZsb2F0VmFsdWVzSG9sZGVyKHByb3BlcnR5TmFtZSwgY29udmVydGVyLCBldmFsdWF0b3IsIGtleWZyYW1lU2V0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgUHJvcGVydHlWYWx1ZXNIb2xkZXIgd2l0aCBhIGdpdmVuIHByb3BlcnR5IG5hbWUgYW5kCiAgICAgICogc2V0IG9mIE9iamVjdCB2YWx1ZXMuIFRoaXMgdmFyaWFudCBhbHNvIHRha2VzIGEgVHlwZUV2YWx1YXRvciBiZWNhdXNlIHRoZSBzeXN0ZW0KICAgICAgKiBjYW5ub3QgYXV0b21hdGljYWxseSBpbnRlcnBvbGF0ZSBiZXR3ZWVuIG9iamVjdHMgb2YgdW5rbm93biB0eXBlLgogICAgICAqCkBAIC0yMDcsNiArNDEwLDI3IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFByb3BlcnR5VmFsdWVzSG9sZGVyIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBuYW1lIGFuZAorICAgICAqIGEgUGF0aCBhbG9uZyB3aGljaCB0aGUgdmFsdWVzIHNob3VsZCBiZSBhbmltYXRlZC4gVGhpcyB2YXJpYW50IHN1cHBvcnRzIGEKKyAgICAgKiA8Y29kZT5UeXBlQ29udmVydGVyPC9jb2RlPiB0byBjb252ZXJ0IGZyb20gPGNvZGU+UG9pbnRGPC9jb2RlPiB0byB0aGUgdGFyZ2V0CisgICAgICogdHlwZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGFuaW1hdGVkLgorICAgICAqIEBwYXJhbSBjb252ZXJ0ZXIgQ29udmVydHMgYSBQb2ludEYgdG8gdGhlIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXR0ZXIuIE1heSBiZQorICAgICAqICAgICAgICAgICAgICAgICAgbnVsbCBpZiBjb252ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LgorICAgICAqIEBwYXJhbSBwYXRoIFRoZSBQYXRoIGFsb25nIHdoaWNoIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIGFuaW1hdGVkLgorICAgICAqIEByZXR1cm4gUHJvcGVydHlWYWx1ZXNIb2xkZXIgVGhlIGNvbnN0cnVjdGVkIFByb3BlcnR5VmFsdWVzSG9sZGVyIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFByb3BlcnR5VmFsdWVzSG9sZGVyIG9mT2JqZWN0KFN0cmluZyBwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICBUeXBlQ29udmVydGVyPFBvaW50RiwgPz4gY29udmVydGVyLCBQYXRoIHBhdGgpIHsKKyAgICAgICAgS2V5ZnJhbWVbXSBrZXlmcmFtZXMgPSBjcmVhdGVLZXlmcmFtZXMocGF0aCk7CisgICAgICAgIFByb3BlcnR5VmFsdWVzSG9sZGVyIHB2aCA9IG9mS2V5ZnJhbWUocHJvcGVydHlOYW1lLCBrZXlmcmFtZXMpOworICAgICAgICBwdmguc2V0RXZhbHVhdG9yKG5ldyBQb2ludEZFdmFsdWF0b3IobmV3IFBvaW50RigpKSk7CisgICAgICAgIHB2aC5zZXRDb252ZXJ0ZXIoY29udmVydGVyKTsKKyAgICAgICAgcmV0dXJuIHB2aDsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgUHJvcGVydHlWYWx1ZXNIb2xkZXIgd2l0aCBhIGdpdmVuIHByb3BlcnR5IGFuZAogICAgICAqIHNldCBvZiBPYmplY3QgdmFsdWVzLiBUaGlzIHZhcmlhbnQgYWxzbyB0YWtlcyBhIFR5cGVFdmFsdWF0b3IgYmVjYXVzZSB0aGUgc3lzdGVtCiAgICAgICogY2Fubm90IGF1dG9tYXRpY2FsbHkgaW50ZXJwb2xhdGUgYmV0d2VlbiBvYmplY3RzIG9mIHVua25vd24gdHlwZS4KQEAgLTIyNyw2ICs0NTEsNTUgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgUHJvcGVydHlWYWx1ZXNIb2xkZXIgd2l0aCBhIGdpdmVuIHByb3BlcnR5IGFuZAorICAgICAqIHNldCBvZiBPYmplY3QgdmFsdWVzLiBUaGlzIHZhcmlhbnQgYWxzbyB0YWtlcyBhIFR5cGVFdmFsdWF0b3IgYmVjYXVzZSB0aGUgc3lzdGVtCisgICAgICogY2Fubm90IGF1dG9tYXRpY2FsbHkgaW50ZXJwb2xhdGUgYmV0d2VlbiBvYmplY3RzIG9mIHVua25vd24gdHlwZS4gVGhpcyB2YXJpYW50IGFsc28KKyAgICAgKiB0YWtlcyBhIDxjb2RlPlR5cGVDb252ZXJ0ZXI8L2NvZGU+IHRvIGNvbnZlcnQgZnJvbSBhbmltYXRlZCB2YWx1ZXMgdG8gdGhlIHR5cGUKKyAgICAgKiBvZiB0aGUgcHJvcGVydHkuIElmIG9ubHkgb25lIHZhbHVlIGlzIHN1cHBsaWVkLCB0aGUgPGNvZGU+VHlwZUNvbnZlcnRlcjwvY29kZT4KKyAgICAgKiBtdXN0IGltcGxlbWVudCB7QGxpbmsgVHlwZUNvbnZlcnRlciNjb252ZXJ0QmFjayhPYmplY3QpfSB0byByZXRyaWV2ZSB0aGUgY3VycmVudAorICAgICAqIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSBiZWluZyBhbmltYXRlZC4gU2hvdWxkIG5vdCBiZSBudWxsLgorICAgICAqIEBwYXJhbSBjb252ZXJ0ZXIgQ29udmVydHMgdGhlIGFuaW1hdGVkIG9iamVjdCB0byB0aGUgUHJvcGVydHkgdHlwZS4KKyAgICAgKiBAcGFyYW0gZXZhbHVhdG9yIEEgVHlwZUV2YWx1YXRvciB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggYW5pbWF0aW9uIGZyYW1lIHRvCisgICAgICogcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGludGVycG9sYXRpb24gYmV0d2VlbiB0aGUgT2JqZWN0IHZhbHVlcyB0byBkZXJpdmUgdGhlIGFuaW1hdGVkCisgICAgICogdmFsdWUuCisgICAgICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIHRoYXQgdGhlIHByb3BlcnR5IHdpbGwgYW5pbWF0ZSBiZXR3ZWVuLgorICAgICAqIEByZXR1cm4gUHJvcGVydHlWYWx1ZXNIb2xkZXIgVGhlIGNvbnN0cnVjdGVkIFByb3BlcnR5VmFsdWVzSG9sZGVyIG9iamVjdC4KKyAgICAgKiBAc2VlICNzZXRDb252ZXJ0ZXIoVHlwZUNvbnZlcnRlcikKKyAgICAgKiBAc2VlIFR5cGVDb252ZXJ0ZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIDxULCBWPiBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvZk9iamVjdChQcm9wZXJ0eTw/LCBWPiBwcm9wZXJ0eSwKKyAgICAgICAgICAgIFR5cGVDb252ZXJ0ZXI8VCwgVj4gY29udmVydGVyLCBUeXBlRXZhbHVhdG9yPFQ+IGV2YWx1YXRvciwgVC4uLiB2YWx1ZXMpIHsKKyAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIgcHZoID0gbmV3IFByb3BlcnR5VmFsdWVzSG9sZGVyKHByb3BlcnR5KTsKKyAgICAgICAgcHZoLnNldENvbnZlcnRlcihjb252ZXJ0ZXIpOworICAgICAgICBwdmguc2V0T2JqZWN0VmFsdWVzKHZhbHVlcyk7CisgICAgICAgIHB2aC5zZXRFdmFsdWF0b3IoZXZhbHVhdG9yKTsKKyAgICAgICAgcmV0dXJuIHB2aDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgUHJvcGVydHlWYWx1ZXNIb2xkZXIgd2l0aCBhIGdpdmVuIHByb3BlcnR5IGFuZAorICAgICAqIGEgUGF0aCBhbG9uZyB3aGljaCB0aGUgdmFsdWVzIHNob3VsZCBiZSBhbmltYXRlZC4gVGhpcyB2YXJpYW50IHN1cHBvcnRzIGEKKyAgICAgKiA8Y29kZT5UeXBlQ29udmVydGVyPC9jb2RlPiB0byBjb252ZXJ0IGZyb20gPGNvZGU+UG9pbnRGPC9jb2RlPiB0byB0aGUgdGFyZ2V0CisgICAgICogdHlwZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQuIFNob3VsZCBub3QgYmUgbnVsbC4KKyAgICAgKiBAcGFyYW0gY29udmVydGVyIENvbnZlcnRzIGEgUG9pbnRGIHRvIHRoZSB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2V0dGVyLiBNYXkgYmUKKyAgICAgKiAgICAgICAgICAgICAgICAgIG51bGwgaWYgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4KKyAgICAgKiBAcGFyYW0gcGF0aCBUaGUgUGF0aCBhbG9uZyB3aGljaCB0aGUgdmFsdWVzIHNob3VsZCBiZSBhbmltYXRlZC4KKyAgICAgKiBAcmV0dXJuIFByb3BlcnR5VmFsdWVzSG9sZGVyIFRoZSBjb25zdHJ1Y3RlZCBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvYmplY3QuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyA8Vj4gUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2ZPYmplY3QoUHJvcGVydHk8PywgVj4gcHJvcGVydHksCisgICAgICAgICAgICBUeXBlQ29udmVydGVyPFBvaW50RiwgVj4gY29udmVydGVyLCBQYXRoIHBhdGgpIHsKKyAgICAgICAgS2V5ZnJhbWVbXSBrZXlmcmFtZXMgPSBjcmVhdGVLZXlmcmFtZXMocGF0aCk7CisgICAgICAgIFByb3BlcnR5VmFsdWVzSG9sZGVyIHB2aCA9IG9mS2V5ZnJhbWUocHJvcGVydHksIGtleWZyYW1lcyk7CisgICAgICAgIHB2aC5zZXRFdmFsdWF0b3IobmV3IFBvaW50RkV2YWx1YXRvcihuZXcgUG9pbnRGKCkpKTsKKyAgICAgICAgcHZoLnNldENvbnZlcnRlcihjb252ZXJ0ZXIpOworICAgICAgICByZXR1cm4gcHZoOworICAgIH0KKworICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYSBQcm9wZXJ0eVZhbHVlc0hvbGRlciBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IG5hbWUgYW5kIHNldAogICAgICAqIG9mIHZhbHVlcy4gVGhlc2UgdmFsdWVzIGNhbiBiZSBvZiBhbnkgdHlwZSwgYnV0IHRoZSB0eXBlIHNob3VsZCBiZSBjb25zaXN0ZW50IHNvIHRoYXQKICAgICAgKiBhbiBhcHByb3ByaWF0ZSB7QGxpbmsgYW5kcm9pZC5hbmltYXRpb24uVHlwZUV2YWx1YXRvcn0gY2FuIGJlIGZvdW5kIHRoYXQgbWF0Y2hlcwpAQCAtMzYxLDYgKzYzNCwxNCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFNldHMgdGhlIGNvbnZlcnRlciB0byBjb252ZXJ0IGZyb20gdGhlIHZhbHVlcyB0eXBlIHRvIHRoZSBzZXR0ZXIncyBwYXJhbWV0ZXIgdHlwZS4KKyAgICAgKiBAcGFyYW0gY29udmVydGVyIFRoZSBjb252ZXJ0ZXIgdG8gdXNlIHRvIGNvbnZlcnQgdmFsdWVzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvbnZlcnRlcihUeXBlQ29udmVydGVyIGNvbnZlcnRlcikgeworICAgICAgICBtQ29udmVydGVyID0gY29udmVydGVyOworICAgIH0KKworICAgIC8qKgogICAgICAqIERldGVybWluZSB0aGUgc2V0dGVyIG9yIGdldHRlciBmdW5jdGlvbiB1c2luZyB0aGUgSmF2YUJlYW5zIGNvbnZlbnRpb24gb2Ygc2V0Rm9vIG9yCiAgICAgICogZ2V0Rm9vIGZvciBhIHByb3BlcnR5IG5hbWVkICdmb28nLiBUaGlzIGZ1bmN0aW9uIGZpZ3VyZXMgb3V0IHdoYXQgdGhlIG5hbWUgb2YgdGhlCiAgICAgICogZnVuY3Rpb24gc2hvdWxkIGJlIGFuZCB1c2VzIHJlZmxlY3Rpb24gdG8gZmluZCB0aGUgTWV0aG9kIHdpdGggdGhhdCBuYW1lIG9uIHRoZQpAQCAtMzg5LDIyICs2NzAsMjQgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFyZ3MgPSBuZXcgQ2xhc3NbMV07CiAgICAgICAgICAgICBDbGFzcyB0eXBlVmFyaWFudHNbXTsKLSAgICAgICAgICAgIGlmIChtVmFsdWVUeXBlLmVxdWFscyhGbG9hdC5jbGFzcykpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUuZXF1YWxzKEZsb2F0LmNsYXNzKSkgewogICAgICAgICAgICAgICAgIHR5cGVWYXJpYW50cyA9IEZMT0FUX1ZBUklBTlRTOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtVmFsdWVUeXBlLmVxdWFscyhJbnRlZ2VyLmNsYXNzKSkgeworICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUuZXF1YWxzKEludGVnZXIuY2xhc3MpKSB7CiAgICAgICAgICAgICAgICAgdHlwZVZhcmlhbnRzID0gSU5URUdFUl9WQVJJQU5UUzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobVZhbHVlVHlwZS5lcXVhbHMoRG91YmxlLmNsYXNzKSkgeworICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUuZXF1YWxzKERvdWJsZS5jbGFzcykpIHsKICAgICAgICAgICAgICAgICB0eXBlVmFyaWFudHMgPSBET1VCTEVfVkFSSUFOVFM7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHR5cGVWYXJpYW50cyA9IG5ldyBDbGFzc1sxXTsKLSAgICAgICAgICAgICAgICB0eXBlVmFyaWFudHNbMF0gPSBtVmFsdWVUeXBlOworICAgICAgICAgICAgICAgIHR5cGVWYXJpYW50c1swXSA9IHZhbHVlVHlwZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoQ2xhc3MgdHlwZVZhcmlhbnQgOiB0eXBlVmFyaWFudHMpIHsKICAgICAgICAgICAgICAgICBhcmdzWzBdID0gdHlwZVZhcmlhbnQ7CiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsID0gdGFyZ2V0Q2xhc3MuZ2V0TWV0aG9kKG1ldGhvZE5hbWUsIGFyZ3MpOwotICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHZhbHVlIHR5cGUgdG8gc3VpdAotICAgICAgICAgICAgICAgICAgICBtVmFsdWVUeXBlID0gdHlwZVZhcmlhbnQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChtQ29udmVydGVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgdmFsdWUgdHlwZSB0byBzdWl0CisgICAgICAgICAgICAgICAgICAgICAgICBtVmFsdWVUeXBlID0gdHlwZVZhcmlhbnQ7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBTd2FsbG93IHRoZSBlcnJvciBhbmQga2VlcCB0cnlpbmcgb3RoZXIgdmFyaWFudHMKQEAgLTQxNSw3ICs2OTgsNyBAQAogCiAgICAgICAgIGlmIChyZXR1cm5WYWwgPT0gbnVsbCkgewogICAgICAgICAgICAgTG9nLncoIlByb3BlcnR5VmFsdWVzSG9sZGVyIiwgIk1ldGhvZCAiICsKLSAgICAgICAgICAgICAgICAgICAgZ2V0TWV0aG9kTmFtZShwcmVmaXgsIG1Qcm9wZXJ0eU5hbWUpICsgIigpIHdpdGggdHlwZSAiICsgbVZhbHVlVHlwZSArCisgICAgICAgICAgICAgICAgICAgIGdldE1ldGhvZE5hbWUocHJlZml4LCBtUHJvcGVydHlOYW1lKSArICIoKSB3aXRoIHR5cGUgIiArIHZhbHVlVHlwZSArCiAgICAgICAgICAgICAgICAgICAgICIgbm90IGZvdW5kIG9uIHRhcmdldCBjbGFzcyAiICsgdGFyZ2V0Q2xhc3MpOwogICAgICAgICB9CiAKQEAgLTQ2NSw3ICs3NDgsOCBAQAogICAgICAqIEBwYXJhbSB0YXJnZXRDbGFzcyBUaGUgQ2xhc3Mgb24gd2hpY2ggdGhlIHJlcXVlc3RlZCBtZXRob2Qgc2hvdWxkIGV4aXN0LgogICAgICAqLwogICAgIHZvaWQgc2V0dXBTZXR0ZXIoQ2xhc3MgdGFyZ2V0Q2xhc3MpIHsKLSAgICAgICAgbVNldHRlciA9IHNldHVwU2V0dGVyT3JHZXR0ZXIodGFyZ2V0Q2xhc3MsIHNTZXR0ZXJQcm9wZXJ0eU1hcCwgInNldCIsIG1WYWx1ZVR5cGUpOworICAgICAgICBDbGFzczw/PiBwcm9wZXJ0eVR5cGUgPSBtQ29udmVydGVyID09IG51bGwgPyBtVmFsdWVUeXBlIDogbUNvbnZlcnRlci5nZXRUYXJnZXRUeXBlKCk7CisgICAgICAgIG1TZXR0ZXIgPSBzZXR1cFNldHRlck9yR2V0dGVyKHRhcmdldENsYXNzLCBzU2V0dGVyUHJvcGVydHlNYXAsICJzZXQiLCBwcm9wZXJ0eVR5cGUpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDg5LDEwICs3NzMsMTMgQEAKICAgICAgICAgaWYgKG1Qcm9wZXJ0eSAhPSBudWxsKSB7CiAgICAgICAgICAgICAvLyBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCBtUHJvcGVydHkgaXMgb24gdGhlIGNsYXNzIG9mIHRhcmdldAogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBPYmplY3QgdGVzdFZhbHVlID0gbVByb3BlcnR5LmdldCh0YXJnZXQpOworICAgICAgICAgICAgICAgIE9iamVjdCB0ZXN0VmFsdWUgPSBudWxsOwogICAgICAgICAgICAgICAgIGZvciAoS2V5ZnJhbWUga2YgOiBtS2V5ZnJhbWVTZXQubUtleWZyYW1lcykgewogICAgICAgICAgICAgICAgICAgICBpZiAoIWtmLmhhc1ZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGtmLnNldFZhbHVlKG1Qcm9wZXJ0eS5nZXQodGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVzdFZhbHVlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0VmFsdWUgPSBjb252ZXJ0QmFjayhtUHJvcGVydHkuZ2V0KHRhcmdldCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAga2Yuc2V0VmFsdWUodGVzdFZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC01MTYsNyArODAzLDggQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBrZi5zZXRWYWx1ZShtR2V0dGVyLmludm9rZSh0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gY29udmVydEJhY2sobUdldHRlci5pbnZva2UodGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgICAgIGtmLnNldFZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLmUoIlByb3BlcnR5VmFsdWVzSG9sZGVyIiwgZS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKQEAgLTUyNiw2ICs4MTQsMTggQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHByaXZhdGUgT2JqZWN0IGNvbnZlcnRCYWNrKE9iamVjdCB2YWx1ZSkgeworICAgICAgICBpZiAobUNvbnZlcnRlciAhPSBudWxsKSB7CisgICAgICAgICAgICB2YWx1ZSA9IG1Db252ZXJ0ZXIuY29udmVydEJhY2sodmFsdWUpOworICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDb252ZXJ0ZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBtQ29udmVydGVyLmdldENsYXNzKCkuZ2V0TmFtZSgpCisgICAgICAgICAgICAgICAgICAgICAgICArICIgbXVzdCBpbXBsZW1lbnQgY29udmVydEJhY2sgYW5kIG5vdCByZXR1cm4gbnVsbC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogVXRpbGl0eSBmdW5jdGlvbiB0byBzZXQgdGhlIHZhbHVlIHN0b3JlZCBpbiBhIHBhcnRpY3VsYXIgS2V5ZnJhbWUuIFRoZSB2YWx1ZSB1c2VkIGlzCiAgICAgICogd2hhdGV2ZXIgdGhlIHZhbHVlIGlzIGZvciB0aGUgcHJvcGVydHkgbmFtZSBzcGVjaWZpZWQgaW4gdGhlIGtleWZyYW1lIG9uIHRoZSB0YXJnZXQgb2JqZWN0LgpAQCAtNTM1LDcgKzgzNSw4IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHNldHVwVmFsdWUoT2JqZWN0IHRhcmdldCwgS2V5ZnJhbWUga2YpIHsKICAgICAgICAgaWYgKG1Qcm9wZXJ0eSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBrZi5zZXRWYWx1ZShtUHJvcGVydHkuZ2V0KHRhcmdldCkpOworICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gY29udmVydEJhY2sobVByb3BlcnR5LmdldCh0YXJnZXQpKTsKKyAgICAgICAgICAgIGtmLnNldFZhbHVlKHZhbHVlKTsKICAgICAgICAgfQogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKG1HZXR0ZXIgPT0gbnVsbCkgewpAQCAtNTQ2LDcgKzg0Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBrZi5zZXRWYWx1ZShtR2V0dGVyLmludm9rZSh0YXJnZXQpKTsKKyAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGNvbnZlcnRCYWNrKG1HZXR0ZXIuaW52b2tlKHRhcmdldCkpOworICAgICAgICAgICAga2Yuc2V0VmFsdWUodmFsdWUpOwogICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIExvZy5lKCJQcm9wZXJ0eVZhbHVlc0hvbGRlciIsIGUudG9TdHJpbmcoKSk7CiAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewpAQCAtNjU3LDcgKzk1OSw4IEBACiAgICAgICogQHBhcmFtIGZyYWN0aW9uIFRoZSBlbGFwc2VkLCBpbnRlcnBvbGF0ZWQgZnJhY3Rpb24gb2YgdGhlIGFuaW1hdGlvbi4KICAgICAgKi8KICAgICB2b2lkIGNhbGN1bGF0ZVZhbHVlKGZsb2F0IGZyYWN0aW9uKSB7Ci0gICAgICAgIG1BbmltYXRlZFZhbHVlID0gbUtleWZyYW1lU2V0LmdldFZhbHVlKGZyYWN0aW9uKTsKKyAgICAgICAgT2JqZWN0IHZhbHVlID0gbUtleWZyYW1lU2V0LmdldFZhbHVlKGZyYWN0aW9uKTsKKyAgICAgICAgbUFuaW1hdGVkVmFsdWUgPSBtQ29udmVydGVyID09IG51bGwgPyB2YWx1ZSA6IG1Db252ZXJ0ZXIuY29udmVydCh2YWx1ZSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMDE1LDggKzEzMTgsMzM0IEBACiAKICAgICB9CiAKKyAgICBzdGF0aWMgY2xhc3MgTXVsdGlGbG9hdFZhbHVlc0hvbGRlciBleHRlbmRzIFByb3BlcnR5VmFsdWVzSG9sZGVyIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUpuaVNldHRlcjsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGFzaE1hcDxDbGFzcywgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+PiBzSk5JU2V0dGVyUHJvcGVydHlNYXAgPQorICAgICAgICAgICAgICAgIG5ldyBIYXNoTWFwPENsYXNzLCBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4+KCk7CisKKyAgICAgICAgcHVibGljIE11bHRpRmxvYXRWYWx1ZXNIb2xkZXIoU3RyaW5nIHByb3BlcnR5TmFtZSwgVHlwZUNvbnZlcnRlciBjb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgVHlwZUV2YWx1YXRvciBldmFsdWF0b3IsIE9iamVjdC4uLiB2YWx1ZXMpIHsKKyAgICAgICAgICAgIHN1cGVyKHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBzZXRDb252ZXJ0ZXIoY29udmVydGVyKTsKKyAgICAgICAgICAgIHNldE9iamVjdFZhbHVlcyh2YWx1ZXMpOworICAgICAgICAgICAgc2V0RXZhbHVhdG9yKGV2YWx1YXRvcik7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgTXVsdGlGbG9hdFZhbHVlc0hvbGRlcihTdHJpbmcgcHJvcGVydHlOYW1lLCBUeXBlQ29udmVydGVyIGNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICBUeXBlRXZhbHVhdG9yIGV2YWx1YXRvciwgS2V5ZnJhbWVTZXQga2V5ZnJhbWVTZXQpIHsKKyAgICAgICAgICAgIHN1cGVyKHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBzZXRDb252ZXJ0ZXIoY29udmVydGVyKTsKKyAgICAgICAgICAgIG1LZXlmcmFtZVNldCA9IGtleWZyYW1lU2V0OworICAgICAgICAgICAgc2V0RXZhbHVhdG9yKGV2YWx1YXRvcik7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSBvbiB0aGUgdGFyZ2V0IG9iamVjdCwgdXNpbmcgdGhlIHNldHRlciBzZXQgdXAKKyAgICAgICAgICogZWFybGllciBvbiB0aGlzIFByb3BlcnR5VmFsdWVzSG9sZGVyIG9iamVjdC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgT2JqZWN0QW5pbWF0b3IKKyAgICAgICAgICogdG8gaGFuZGxlIHR1cm5pbmcgdGhlIHZhbHVlIGNhbGN1bGF0ZWQgYnkgVmFsdWVBbmltYXRvciBpbnRvIGEgdmFsdWUgc2V0IG9uIHRoZSBvYmplY3QKKyAgICAgICAgICogYWNjb3JkaW5nIHRvIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0aGUgdmFsdWUgaXMgc2V0CisgICAgICAgICAqLworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCBzZXRBbmltYXRlZFZhbHVlKE9iamVjdCB0YXJnZXQpIHsKKyAgICAgICAgICAgIGZsb2F0W10gdmFsdWVzID0gKGZsb2F0W10pIGdldEFuaW1hdGVkVmFsdWUoKTsKKyAgICAgICAgICAgIGludCBudW1QYXJhbWV0ZXJzID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgICAgICAgIGlmIChtSm5pU2V0dGVyICE9IDApIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG51bVBhcmFtZXRlcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgbkNhbGxGbG9hdE1ldGhvZCh0YXJnZXQsIG1KbmlTZXR0ZXIsIHZhbHVlc1swXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgbkNhbGxUd29GbG9hdE1ldGhvZCh0YXJnZXQsIG1KbmlTZXR0ZXIsIHZhbHVlc1swXSwgdmFsdWVzWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAgICAgICBuQ2FsbEZvdXJGbG9hdE1ldGhvZCh0YXJnZXQsIG1KbmlTZXR0ZXIsIHZhbHVlc1swXSwgdmFsdWVzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbMl0sIHZhbHVlc1szXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgICAgICAgICAgbkNhbGxNdWx0aXBsZUZsb2F0TWV0aG9kKHRhcmdldCwgbUpuaVNldHRlciwgdmFsdWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludGVybmFsIGZ1bmN0aW9uIChjYWxsZWQgZnJvbSBPYmplY3RBbmltYXRvcikgdG8gc2V0IHVwIHRoZSBzZXR0ZXIgYW5kIGdldHRlcgorICAgICAgICAgKiBwcmlvciB0byBydW5uaW5nIHRoZSBhbmltYXRpb24uIE5vIGdldHRlciBjYW4gYmUgdXNlZCBmb3IgbXVsdGlwbGUgcGFyYW1ldGVycy4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzZXR0ZXIgZXhpc3RzLgorICAgICAgICAgKi8KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHZvaWQgc2V0dXBTZXR0ZXJBbmRHZXR0ZXIoT2JqZWN0IHRhcmdldCkgeworICAgICAgICAgICAgc2V0dXBTZXR0ZXIodGFyZ2V0LmdldENsYXNzKCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHZvaWQgc2V0dXBTZXR0ZXIoQ2xhc3MgdGFyZ2V0Q2xhc3MpIHsKKyAgICAgICAgICAgIGlmIChtSm5pU2V0dGVyICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1Qcm9wZXJ0eU1hcExvY2sud3JpdGVMb2NrKCkubG9jaygpOworICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPiBwcm9wZXJ0eU1hcCA9IHNKTklTZXR0ZXJQcm9wZXJ0eU1hcC5nZXQodGFyZ2V0Q2xhc3MpOworICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU1hcCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIEludGVnZXIgam5pU2V0dGVySW50ZWdlciA9IHByb3BlcnR5TWFwLmdldChtUHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGpuaVNldHRlckludGVnZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUpuaVNldHRlciA9IGpuaVNldHRlckludGVnZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1KbmlTZXR0ZXIgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IGdldE1ldGhvZE5hbWUoInNldCIsIG1Qcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVWYWx1ZSgwZik7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0W10gdmFsdWVzID0gKGZsb2F0W10pIGdldEFuaW1hdGVkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IG51bVBhcmFtcyA9IHZhbHVlcy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtSm5pU2V0dGVyID0gbkdldE11bHRpcGxlRmxvYXRNZXRob2QodGFyZ2V0Q2xhc3MsIG1ldGhvZE5hbWUsIG51bVBhcmFtcyk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEVycm9yIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB3aXRob3V0IHRoZSAnc2V0JyBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1KbmlTZXR0ZXIgPSBuR2V0TXVsdGlwbGVGbG9hdE1ldGhvZCh0YXJnZXRDbGFzcywgbVByb3BlcnR5TmFtZSwgbnVtUGFyYW1zKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobUpuaVNldHRlciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlNYXAgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNKTklTZXR0ZXJQcm9wZXJ0eU1hcC5wdXQodGFyZ2V0Q2xhc3MsIHByb3BlcnR5TWFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TWFwLnB1dChtUHJvcGVydHlOYW1lLCBtSm5pU2V0dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgbVByb3BlcnR5TWFwTG9jay53cml0ZUxvY2soKS51bmxvY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBNdWx0aUludFZhbHVlc0hvbGRlciBleHRlbmRzIFByb3BlcnR5VmFsdWVzSG9sZGVyIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUpuaVNldHRlcjsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGFzaE1hcDxDbGFzcywgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+PiBzSk5JU2V0dGVyUHJvcGVydHlNYXAgPQorICAgICAgICAgICAgICAgIG5ldyBIYXNoTWFwPENsYXNzLCBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4+KCk7CisKKyAgICAgICAgcHVibGljIE11bHRpSW50VmFsdWVzSG9sZGVyKFN0cmluZyBwcm9wZXJ0eU5hbWUsIFR5cGVDb252ZXJ0ZXIgY29udmVydGVyLAorICAgICAgICAgICAgICAgIFR5cGVFdmFsdWF0b3IgZXZhbHVhdG9yLCBPYmplY3QuLi4gdmFsdWVzKSB7CisgICAgICAgICAgICBzdXBlcihwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgc2V0Q29udmVydGVyKGNvbnZlcnRlcik7CisgICAgICAgICAgICBzZXRPYmplY3RWYWx1ZXModmFsdWVzKTsKKyAgICAgICAgICAgIHNldEV2YWx1YXRvcihldmFsdWF0b3IpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIE11bHRpSW50VmFsdWVzSG9sZGVyKFN0cmluZyBwcm9wZXJ0eU5hbWUsIFR5cGVDb252ZXJ0ZXIgY29udmVydGVyLAorICAgICAgICAgICAgICAgIFR5cGVFdmFsdWF0b3IgZXZhbHVhdG9yLCBLZXlmcmFtZVNldCBrZXlmcmFtZVNldCkgeworICAgICAgICAgICAgc3VwZXIocHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHNldENvbnZlcnRlcihjb252ZXJ0ZXIpOworICAgICAgICAgICAgbUtleWZyYW1lU2V0ID0ga2V5ZnJhbWVTZXQ7CisgICAgICAgICAgICBzZXRFdmFsdWF0b3IoZXZhbHVhdG9yKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBzZXQgdGhlIHZhbHVlIG9uIHRoZSB0YXJnZXQgb2JqZWN0LCB1c2luZyB0aGUgc2V0dGVyIHNldCB1cAorICAgICAgICAgKiBlYXJsaWVyIG9uIHRoaXMgUHJvcGVydHlWYWx1ZXNIb2xkZXIgb2JqZWN0LiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBPYmplY3RBbmltYXRvcgorICAgICAgICAgKiB0byBoYW5kbGUgdHVybmluZyB0aGUgdmFsdWUgY2FsY3VsYXRlZCBieSBWYWx1ZUFuaW1hdG9yIGludG8gYSB2YWx1ZSBzZXQgb24gdGhlIG9iamVjdAorICAgICAgICAgKiBhY2NvcmRpbmcgdG8gdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSB2YWx1ZSBpcyBzZXQKKyAgICAgICAgICovCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICB2b2lkIHNldEFuaW1hdGVkVmFsdWUoT2JqZWN0IHRhcmdldCkgeworICAgICAgICAgICAgaW50W10gdmFsdWVzID0gKGludFtdKSBnZXRBbmltYXRlZFZhbHVlKCk7CisgICAgICAgICAgICBpbnQgbnVtUGFyYW1ldGVycyA9IHZhbHVlcy5sZW5ndGg7CisgICAgICAgICAgICBpZiAobUpuaVNldHRlciAhPSAwKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChudW1QYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5DYWxsSW50TWV0aG9kKHRhcmdldCwgbUpuaVNldHRlciwgdmFsdWVzWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICBuQ2FsbFR3b0ludE1ldGhvZCh0YXJnZXQsIG1KbmlTZXR0ZXIsIHZhbHVlc1swXSwgdmFsdWVzWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAgICAgICBuQ2FsbEZvdXJJbnRNZXRob2QodGFyZ2V0LCBtSm5pU2V0dGVyLCB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzWzJdLCB2YWx1ZXNbM10pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5DYWxsTXVsdGlwbGVJbnRNZXRob2QodGFyZ2V0LCBtSm5pU2V0dGVyLCB2YWx1ZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogSW50ZXJuYWwgZnVuY3Rpb24gKGNhbGxlZCBmcm9tIE9iamVjdEFuaW1hdG9yKSB0byBzZXQgdXAgdGhlIHNldHRlciBhbmQgZ2V0dGVyCisgICAgICAgICAqIHByaW9yIHRvIHJ1bm5pbmcgdGhlIGFuaW1hdGlvbi4gTm8gZ2V0dGVyIGNhbiBiZSB1c2VkIGZvciBtdWx0aXBsZSBwYXJhbWV0ZXJzLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNldHRlciBleGlzdHMuCisgICAgICAgICAqLworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCBzZXR1cFNldHRlckFuZEdldHRlcihPYmplY3QgdGFyZ2V0KSB7CisgICAgICAgICAgICBzZXR1cFNldHRlcih0YXJnZXQuZ2V0Q2xhc3MoKSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCBzZXR1cFNldHRlcihDbGFzcyB0YXJnZXRDbGFzcykgeworICAgICAgICAgICAgaWYgKG1KbmlTZXR0ZXIgIT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVByb3BlcnR5TWFwTG9jay53cml0ZUxvY2soKS5sb2NrKCk7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+IHByb3BlcnR5TWFwID0gc0pOSVNldHRlclByb3BlcnR5TWFwLmdldCh0YXJnZXRDbGFzcyk7CisgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TWFwICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBqbmlTZXR0ZXJJbnRlZ2VyID0gcHJvcGVydHlNYXAuZ2V0KG1Qcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoam5pU2V0dGVySW50ZWdlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtSm5pU2V0dGVyID0gam5pU2V0dGVySW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobUpuaVNldHRlciA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gZ2V0TWV0aG9kTmFtZSgic2V0IiwgbVByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVZhbHVlKDBmKTsKKyAgICAgICAgICAgICAgICAgICAgaW50W10gdmFsdWVzID0gKGludFtdKSBnZXRBbmltYXRlZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGludCBudW1QYXJhbXMgPSB2YWx1ZXMubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUpuaVNldHRlciA9IG5HZXRNdWx0aXBsZUludE1ldGhvZCh0YXJnZXRDbGFzcywgbWV0aG9kTmFtZSwgbnVtUGFyYW1zKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXJyb3IgZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHdpdGhvdXQgdGhlICdzZXQnIHByZWZpeAorICAgICAgICAgICAgICAgICAgICAgICAgbUpuaVNldHRlciA9IG5HZXRNdWx0aXBsZUludE1ldGhvZCh0YXJnZXRDbGFzcywgbVByb3BlcnR5TmFtZSwgbnVtUGFyYW1zKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobUpuaVNldHRlciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlNYXAgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNKTklTZXR0ZXJQcm9wZXJ0eU1hcC5wdXQodGFyZ2V0Q2xhc3MsIHByb3BlcnR5TWFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TWFwLnB1dChtUHJvcGVydHlOYW1lLCBtSm5pU2V0dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgbVByb3BlcnR5TWFwTG9jay53cml0ZUxvY2soKS51bmxvY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFBhdGggaW50ZXJwb2xhdGlvbiByZWxpZXMgb24gYXBwcm94aW1hdGluZyB0aGUgUGF0aCBhcyBhIHNlcmllcyBvZiBsaW5lIHNlZ21lbnRzLgorICAgICAgIFRoZSBsaW5lIHNlZ21lbnRzIGFyZSByZWN1cnNpdmVseSBkaXZpZGVkIHVudGlsIHRoZXJlIGlzIGxlc3MgdGhhbiAxLzIgcGl4ZWwgZXJyb3IKKyAgICAgICBiZXR3ZWVuIHRoZSBsaW5lcyBhbmQgdGhlIGN1cnZlLiBFYWNoIHBvaW50IG9mIHRoZSBsaW5lIHNlZ21lbnQgaXMgY29udmVydGVkCisgICAgICAgdG8gYSBLZXlmcmFtZSBhbmQgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIEtleWZyYW1lcyBjcmVhdGVzIGEgZ29vZCBhcHByb3hpbWF0aW9uCisgICAgICAgb2YgdGhlIGN1cnZlLgorCisgICAgICAgVGhlIGZyYWN0aW9uIGZvciBlYWNoIEtleWZyYW1lIGlzIHRoZSBsZW5ndGggYWxvbmcgdGhlIFBhdGggdG8gdGhlIHBvaW50LCBkaXZpZGVkIGJ5CisgICAgICAgdGhlIHRvdGFsIFBhdGggbGVuZ3RoLiBUd28gcG9pbnRzIG1heSBoYXZlIHRoZSBzYW1lIGZyYWN0aW9uIGluIHRoZSBjYXNlIG9mIGEgbW92ZQorICAgICAgIGNvbW1hbmQgY2F1c2luZyBhIGRpc2pvaW50IFBhdGguCisKKyAgICAgICBUaGUgdmFsdWUgZm9yIGVhY2ggS2V5ZnJhbWUgaXMgZWl0aGVyIHRoZSBwb2ludCBhcyBhIFBvaW50RiBvciBvbmUgb2YgdGhlIHggb3IgeQorICAgICAgIGNvb3JkaW5hdGVzIGFzIGFuIGludCBvciBmbG9hdC4gSW4gdGhlIGxhdHRlciBjYXNlLCB0d28gS2V5ZnJhbWVzIGFyZSBnZW5lcmF0ZWQgZm9yCisgICAgICAgZWFjaCBwb2ludCB0aGF0IGhhdmUgdGhlIHNhbWUgZnJhY3Rpb24uICovCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHNlcGFyYXRlIEtleWZyYW1lcyBhcnJheXMgZm9yIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGFsb25nIGEgUGF0aC4gSWYKKyAgICAgKiBpc0ludCBpcyB0cnVlLCB0aGUgS2V5ZnJhbWVzIHdpbGwgYmUgSW50S2V5ZnJhbWVzLCBvdGhlcndpc2UgdGhleSB3aWxsIGJlIEZsb2F0S2V5ZnJhbWVzLgorICAgICAqIFRoZSBlbGVtZW50IGF0IGluZGV4IDAgYXJlIHRoZSB4IGNvb3JkaW5hdGUgS2V5ZnJhbWVzIGFuZCBlbGVtZW50IGF0IGluZGV4IDEgYXJlIHRoZQorICAgICAqIHkgY29vcmRpbmF0ZSBLZXlmcmFtZXMuIFRoZSByZXR1cm5lZCB2YWx1ZXMgY2FuIGJlIGxpbmVhcmx5IGludGVycG9sYXRlZCBhbmQgZ2V0IGxlc3MKKyAgICAgKiB0aGFuIDEvMiBwaXhlbCBlcnJvci4KKyAgICAgKi8KKyAgICBzdGF0aWMgS2V5ZnJhbWVbXVtdIGNyZWF0ZUtleWZyYW1lcyhQYXRoIHBhdGgsIGJvb2xlYW4gaXNJbnQpIHsKKyAgICAgICAgaWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIHBhdGggbXVzdCBub3QgYmUgbnVsbCBvciBlbXB0eSIpOworICAgICAgICB9CisgICAgICAgIGZsb2F0W10gcG9pbnRDb21wb25lbnRzID0gcGF0aC5hcHByb3hpbWF0ZSgwLjVmKTsKKworICAgICAgICBpbnQgbnVtUG9pbnRzID0gcG9pbnRDb21wb25lbnRzLmxlbmd0aCAvIDM7CisKKyAgICAgICAgS2V5ZnJhbWVbXVtdIGtleWZyYW1lcyA9IG5ldyBLZXlmcmFtZVsyXVtdOworICAgICAgICBrZXlmcmFtZXNbMF0gPSBuZXcgS2V5ZnJhbWVbbnVtUG9pbnRzXTsKKyAgICAgICAga2V5ZnJhbWVzWzFdID0gbmV3IEtleWZyYW1lW251bVBvaW50c107CisgICAgICAgIGludCBjb21wb25lbnRJbmRleCA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUG9pbnRzOyBpKyspIHsKKyAgICAgICAgICAgIGZsb2F0IGZyYWN0aW9uID0gcG9pbnRDb21wb25lbnRzW2NvbXBvbmVudEluZGV4KytdOworICAgICAgICAgICAgZmxvYXQgeCA9IHBvaW50Q29tcG9uZW50c1tjb21wb25lbnRJbmRleCsrXTsKKyAgICAgICAgICAgIGZsb2F0IHkgPSBwb2ludENvbXBvbmVudHNbY29tcG9uZW50SW5kZXgrK107CisgICAgICAgICAgICBpZiAoaXNJbnQpIHsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZXNbMF1baV0gPSBLZXlmcmFtZS5vZkludChmcmFjdGlvbiwgTWF0aC5yb3VuZCh4KSk7CisgICAgICAgICAgICAgICAga2V5ZnJhbWVzWzFdW2ldID0gS2V5ZnJhbWUub2ZJbnQoZnJhY3Rpb24sIE1hdGgucm91bmQoeSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZXNbMF1baV0gPSBLZXlmcmFtZS5vZkZsb2F0KGZyYWN0aW9uLCB4KTsKKyAgICAgICAgICAgICAgICBrZXlmcmFtZXNbMV1baV0gPSBLZXlmcmFtZS5vZkZsb2F0KGZyYWN0aW9uLCB5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4ga2V5ZnJhbWVzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgUG9pbnRGIEtleWZyYW1lcyBmb3IgYSBQYXRoLiBUaGUgcmVzdWx0aW5nIHBvaW50cyBjYW4gYmUgbGluZWFybHkgaW50ZXJwb2xhdGVkCisgICAgICogd2l0aCBsZXNzIHRoYW4gMS8yIHBpeGVsIGluIGVycm9yLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIEtleWZyYW1lW10gY3JlYXRlS2V5ZnJhbWVzKFBhdGggcGF0aCkgeworICAgICAgICBpZiAocGF0aCA9PSBudWxsIHx8IHBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgcGF0aCBtdXN0IG5vdCBiZSBudWxsIG9yIGVtcHR5Iik7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXRbXSBwb2ludENvbXBvbmVudHMgPSBwYXRoLmFwcHJveGltYXRlKDAuNWYpOworCisgICAgICAgIGludCBudW1Qb2ludHMgPSBwb2ludENvbXBvbmVudHMubGVuZ3RoIC8gMzsKKworICAgICAgICBLZXlmcmFtZVtdIGtleWZyYW1lcyA9IG5ldyBLZXlmcmFtZVtudW1Qb2ludHNdOworICAgICAgICBpbnQgY29tcG9uZW50SW5kZXggPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBvaW50czsgaSsrKSB7CisgICAgICAgICAgICBmbG9hdCBmcmFjdGlvbiA9IHBvaW50Q29tcG9uZW50c1tjb21wb25lbnRJbmRleCsrXTsKKyAgICAgICAgICAgIGZsb2F0IHggPSBwb2ludENvbXBvbmVudHNbY29tcG9uZW50SW5kZXgrK107CisgICAgICAgICAgICBmbG9hdCB5ID0gcG9pbnRDb21wb25lbnRzW2NvbXBvbmVudEluZGV4KytdOworICAgICAgICAgICAga2V5ZnJhbWVzW2ldID0gS2V5ZnJhbWUub2ZPYmplY3QoZnJhY3Rpb24sIG5ldyBQb2ludEYoeCwgeSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBrZXlmcmFtZXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydCBmcm9tIFBvaW50RiB0byBmbG9hdFtdIGZvciBtdWx0aS1mbG9hdCBzZXR0ZXJzIGFsb25nIGEgUGF0aC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBQb2ludEZUb0Zsb2F0QXJyYXkgZXh0ZW5kcyBUeXBlQ29udmVydGVyPFBvaW50RiwgZmxvYXRbXT4geworICAgICAgICBwcml2YXRlIGZsb2F0W10gbUNvb3JkaW5hdGVzID0gbmV3IGZsb2F0WzJdOworCisgICAgICAgIHB1YmxpYyBQb2ludEZUb0Zsb2F0QXJyYXkoKSB7CisgICAgICAgICAgICBzdXBlcihQb2ludEYuY2xhc3MsIGZsb2F0W10uY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBmbG9hdFtdIGNvbnZlcnQoUG9pbnRGIHZhbHVlKSB7CisgICAgICAgICAgICBtQ29vcmRpbmF0ZXNbMF0gPSB2YWx1ZS54OworICAgICAgICAgICAgbUNvb3JkaW5hdGVzWzFdID0gdmFsdWUueTsKKyAgICAgICAgICAgIHJldHVybiBtQ29vcmRpbmF0ZXM7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogQ29udmVydCBmcm9tIFBvaW50RiB0byBpbnRbXSBmb3IgbXVsdGktaW50IHNldHRlcnMgYWxvbmcgYSBQYXRoLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFBvaW50RlRvSW50QXJyYXkgZXh0ZW5kcyBUeXBlQ29udmVydGVyPFBvaW50RiwgaW50W10+IHsKKyAgICAgICAgcHJpdmF0ZSBpbnRbXSBtQ29vcmRpbmF0ZXMgPSBuZXcgaW50WzJdOworCisgICAgICAgIHB1YmxpYyBQb2ludEZUb0ludEFycmF5KCkgeworICAgICAgICAgICAgc3VwZXIoUG9pbnRGLmNsYXNzLCBpbnRbXS5jbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludFtdIGNvbnZlcnQoUG9pbnRGIHZhbHVlKSB7CisgICAgICAgICAgICBtQ29vcmRpbmF0ZXNbMF0gPSBNYXRoLnJvdW5kKHZhbHVlLngpOworICAgICAgICAgICAgbUNvb3JkaW5hdGVzWzFdID0gTWF0aC5yb3VuZCh2YWx1ZS55KTsKKyAgICAgICAgICAgIHJldHVybiBtQ29vcmRpbmF0ZXM7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgbmF0aXZlIHN0YXRpYyBwcml2YXRlIGludCBuR2V0SW50TWV0aG9kKENsYXNzIHRhcmdldENsYXNzLCBTdHJpbmcgbWV0aG9kTmFtZSk7CiAgICAgbmF0aXZlIHN0YXRpYyBwcml2YXRlIGludCBuR2V0RmxvYXRNZXRob2QoQ2xhc3MgdGFyZ2V0Q2xhc3MsIFN0cmluZyBtZXRob2ROYW1lKTsKKyAgICBuYXRpdmUgc3RhdGljIHByaXZhdGUgaW50IG5HZXRNdWx0aXBsZUludE1ldGhvZChDbGFzcyB0YXJnZXRDbGFzcywgU3RyaW5nIG1ldGhvZE5hbWUsCisgICAgICAgICAgICBpbnQgbnVtUGFyYW1zKTsKKyAgICBuYXRpdmUgc3RhdGljIHByaXZhdGUgaW50IG5HZXRNdWx0aXBsZUZsb2F0TWV0aG9kKENsYXNzIHRhcmdldENsYXNzLCBTdHJpbmcgbWV0aG9kTmFtZSwKKyAgICAgICAgICAgIGludCBudW1QYXJhbXMpOwogICAgIG5hdGl2ZSBzdGF0aWMgcHJpdmF0ZSB2b2lkIG5DYWxsSW50TWV0aG9kKE9iamVjdCB0YXJnZXQsIGludCBtZXRob2RJRCwgaW50IGFyZyk7CiAgICAgbmF0aXZlIHN0YXRpYyBwcml2YXRlIHZvaWQgbkNhbGxGbG9hdE1ldGhvZChPYmplY3QgdGFyZ2V0LCBpbnQgbWV0aG9kSUQsIGZsb2F0IGFyZyk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorICAgIG5hdGl2ZSBzdGF0aWMgcHJpdmF0ZSB2b2lkIG5DYWxsVHdvSW50TWV0aG9kKE9iamVjdCB0YXJnZXQsIGludCBtZXRob2RJRCwgaW50IGFyZzEsIGludCBhcmcyKTsKKyAgICBuYXRpdmUgc3RhdGljIHByaXZhdGUgdm9pZCBuQ2FsbEZvdXJJbnRNZXRob2QoT2JqZWN0IHRhcmdldCwgaW50IG1ldGhvZElELCBpbnQgYXJnMSwgaW50IGFyZzIsCisgICAgICAgICAgICBpbnQgYXJnMywgaW50IGFyZzQpOworICAgIG5hdGl2ZSBzdGF0aWMgcHJpdmF0ZSB2b2lkIG5DYWxsTXVsdGlwbGVJbnRNZXRob2QoT2JqZWN0IHRhcmdldCwgaW50IG1ldGhvZElELCBpbnRbXSBhcmdzKTsKKyAgICBuYXRpdmUgc3RhdGljIHByaXZhdGUgdm9pZCBuQ2FsbFR3b0Zsb2F0TWV0aG9kKE9iamVjdCB0YXJnZXQsIGludCBtZXRob2RJRCwgZmxvYXQgYXJnMSwKKyAgICAgICAgICAgIGZsb2F0IGFyZzIpOworICAgIG5hdGl2ZSBzdGF0aWMgcHJpdmF0ZSB2b2lkIG5DYWxsRm91ckZsb2F0TWV0aG9kKE9iamVjdCB0YXJnZXQsIGludCBtZXRob2RJRCwgZmxvYXQgYXJnMSwKKyAgICAgICAgICAgIGZsb2F0IGFyZzIsIGZsb2F0IGFyZzMsIGZsb2F0IGFyZzQpOworICAgIG5hdGl2ZSBzdGF0aWMgcHJpdmF0ZSB2b2lkIG5DYWxsTXVsdGlwbGVGbG9hdE1ldGhvZChPYmplY3QgdGFyZ2V0LCBpbnQgbWV0aG9kSUQsIGZsb2F0W10gYXJncyk7Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vUmVjdEV2YWx1YXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1JlY3RFdmFsdWF0b3IuamF2YQppbmRleCAyOGQ0OTZiLi4yM2ViNzY2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vUmVjdEV2YWx1YXRvci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9SZWN0RXZhbHVhdG9yLmphdmEKQEAgLTIzLDEyICsyMyw0NSBAQAogcHVibGljIGNsYXNzIFJlY3RFdmFsdWF0b3IgaW1wbGVtZW50cyBUeXBlRXZhbHVhdG9yPFJlY3Q+IHsKIAogICAgIC8qKgorICAgICAqIFdoZW4gbnVsbCwgYSBuZXcgUmVjdCBpcyByZXR1cm5lZCBvbiBldmVyeSBldmFsdWF0ZSBjYWxsLiBXaGVuIG5vbi1udWxsLAorICAgICAqIG1SZWN0IHdpbGwgYmUgbW9kaWZpZWQgYW5kIHJldHVybmVkIG9uIGV2ZXJ5IGV2YWx1YXRlLgorICAgICAqLworICAgIHByaXZhdGUgUmVjdCBtUmVjdDsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIFJlY3RFdmFsdWF0b3IgdGhhdCByZXR1cm5zIGEgbmV3IFJlY3Qgb24gZXZlcnkgZXZhbHVhdGUgY2FsbC4KKyAgICAgKiBUbyBhdm9pZCBjcmVhdGluZyBhbiBvYmplY3QgZm9yIGVhY2ggZXZhbHVhdGUgY2FsbCwKKyAgICAgKiB7QGxpbmsgUmVjdEV2YWx1YXRvciNSZWN0RXZhbHVhdG9yKGFuZHJvaWQuZ3JhcGhpY3MuUmVjdCl9IHNob3VsZCBiZSB1c2VkCisgICAgICogd2hlbmV2ZXIgcG9zc2libGUuCisgICAgICovCisgICAgcHVibGljIFJlY3RFdmFsdWF0b3IoKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIFJlY3RFdmFsdWF0b3IgdGhhdCBtb2RpZmllcyBhbmQgcmV0dXJucyA8Y29kZT5yZXVzZVJlY3Q8L2NvZGU+CisgICAgICogaW4ge0BsaW5rICNldmFsdWF0ZShmbG9hdCwgYW5kcm9pZC5ncmFwaGljcy5SZWN0LCBhbmRyb2lkLmdyYXBoaWNzLlJlY3QpfSBjYWxscy4KKyAgICAgKiBUaGUgdmFsdWUgcmV0dXJuZWQgZnJvbQorICAgICAqIHtAbGluayAjZXZhbHVhdGUoZmxvYXQsIGFuZHJvaWQuZ3JhcGhpY3MuUmVjdCwgYW5kcm9pZC5ncmFwaGljcy5SZWN0KX0gc2hvdWxkCisgICAgICogbm90IGJlIGNhY2hlZCBiZWNhdXNlIGl0IHdpbGwgY2hhbmdlIG92ZXIgdGltZSBhcyB0aGUgb2JqZWN0IGlzIHJldXNlZCBvbiBlYWNoCisgICAgICogY2FsbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSByZXVzZVJlY3QgQSBSZWN0IHRvIGJlIG1vZGlmaWVkIGFuZCByZXR1cm5lZCBieSBldmFsdWF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgUmVjdEV2YWx1YXRvcihSZWN0IHJldXNlUmVjdCkgeworICAgICAgICBtUmVjdCA9IHJldXNlUmVjdDsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlc3VsdCBvZiBsaW5lYXJseSBpbnRlcnBvbGF0aW5nIHRoZSBzdGFydCBhbmQKICAgICAgKiBlbmQgUmVjdCB2YWx1ZXMsIHdpdGggPGNvZGU+ZnJhY3Rpb248L2NvZGU+IHJlcHJlc2VudGluZyB0aGUgcHJvcG9ydGlvbgogICAgICAqIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgdmFsdWVzLiBUaGUgY2FsY3VsYXRpb24gaXMgYSBzaW1wbGUgcGFyYW1ldHJpYwogICAgICAqIGNhbGN1bGF0aW9uIG9uIGVhY2ggb2YgdGhlIHNlcGFyYXRlIGNvbXBvbmVudHMgaW4gdGhlIFJlY3Qgb2JqZWN0cwogICAgICAqIChsZWZ0LCB0b3AsIHJpZ2h0LCBhbmQgYm90dG9tKS4KICAgICAgKgorICAgICAqIDxwPklmIHtAbGluayAjUmVjdEV2YWx1YXRvcihhbmRyb2lkLmdyYXBoaWNzLlJlY3QpfSB3YXMgdXNlZCB0byBjb25zdHJ1Y3QKKyAgICAgKiB0aGlzIFJlY3RFdmFsdWF0b3IsIHRoZSBvYmplY3QgcmV0dXJuZWQgd2lsbCBiZSB0aGUgPGNvZGU+cmV1c2VSZWN0PC9jb2RlPgorICAgICAqIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3Rvci48L3A+CisgICAgICoKICAgICAgKiBAcGFyYW0gZnJhY3Rpb24gICBUaGUgZnJhY3Rpb24gZnJvbSB0aGUgc3RhcnRpbmcgdG8gdGhlIGVuZGluZyB2YWx1ZXMKICAgICAgKiBAcGFyYW0gc3RhcnRWYWx1ZSBUaGUgc3RhcnQgUmVjdAogICAgICAqIEBwYXJhbSBlbmRWYWx1ZSAgIFRoZSBlbmQgUmVjdApAQCAtMzcsOSArNzAsMTUgQEAKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgUmVjdCBldmFsdWF0ZShmbG9hdCBmcmFjdGlvbiwgUmVjdCBzdGFydFZhbHVlLCBSZWN0IGVuZFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBuZXcgUmVjdChzdGFydFZhbHVlLmxlZnQgKyAoaW50KSgoZW5kVmFsdWUubGVmdCAtIHN0YXJ0VmFsdWUubGVmdCkgKiBmcmFjdGlvbiksCi0gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZS50b3AgKyAoaW50KSgoZW5kVmFsdWUudG9wIC0gc3RhcnRWYWx1ZS50b3ApICogZnJhY3Rpb24pLAotICAgICAgICAgICAgICAgIHN0YXJ0VmFsdWUucmlnaHQgKyAoaW50KSgoZW5kVmFsdWUucmlnaHQgLSBzdGFydFZhbHVlLnJpZ2h0KSAqIGZyYWN0aW9uKSwKLSAgICAgICAgICAgICAgICBzdGFydFZhbHVlLmJvdHRvbSArIChpbnQpKChlbmRWYWx1ZS5ib3R0b20gLSBzdGFydFZhbHVlLmJvdHRvbSkgKiBmcmFjdGlvbikpOworICAgICAgICBpbnQgbGVmdCA9IHN0YXJ0VmFsdWUubGVmdCArIChpbnQpICgoZW5kVmFsdWUubGVmdCAtIHN0YXJ0VmFsdWUubGVmdCkgKiBmcmFjdGlvbik7CisgICAgICAgIGludCB0b3AgPSBzdGFydFZhbHVlLnRvcCArIChpbnQpICgoZW5kVmFsdWUudG9wIC0gc3RhcnRWYWx1ZS50b3ApICogZnJhY3Rpb24pOworICAgICAgICBpbnQgcmlnaHQgPSBzdGFydFZhbHVlLnJpZ2h0ICsgKGludCkgKChlbmRWYWx1ZS5yaWdodCAtIHN0YXJ0VmFsdWUucmlnaHQpICogZnJhY3Rpb24pOworICAgICAgICBpbnQgYm90dG9tID0gc3RhcnRWYWx1ZS5ib3R0b20gKyAoaW50KSAoKGVuZFZhbHVlLmJvdHRvbSAtIHN0YXJ0VmFsdWUuYm90dG9tKSAqIGZyYWN0aW9uKTsKKyAgICAgICAgaWYgKG1SZWN0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVJlY3Quc2V0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgICAgICByZXR1cm4gbVJlY3Q7CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vVHlwZUNvbnZlcnRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1R5cGVDb252ZXJ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2IzZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1R5cGVDb252ZXJ0ZXIuamF2YQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLmFuaW1hdGlvbjsKKworLyoqCisgKiBBYnN0cmFjdCBiYXNlIGNsYXNzIHVzZWQgY29udmVydCB0eXBlIFQgdG8gYW5vdGhlciB0eXBlIFYuIFRoaXMKKyAqIGlzIG5lY2Vzc2FyeSB3aGVuIHRoZSB2YWx1ZSB0eXBlcyBvZiBpbiBhbmltYXRpb24gYXJlIGRpZmZlcmVudAorICogZnJvbSB0aGUgcHJvcGVydHkgdHlwZS4KKyAqIEBzZWUgUHJvcGVydHlWYWx1ZXNIb2xkZXIjc2V0Q29udmVydGVyKFR5cGVDb252ZXJ0ZXIpCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUeXBlQ29udmVydGVyPFQsIFY+IHsKKyAgICBwcml2YXRlIENsYXNzPFQ+IG1Gcm9tQ2xhc3M7CisgICAgcHJpdmF0ZSBDbGFzczxWPiBtVG9DbGFzczsKKworICAgIHB1YmxpYyBUeXBlQ29udmVydGVyKENsYXNzPFQ+IGZyb21DbGFzcywgQ2xhc3M8Vj4gdG9DbGFzcykgeworICAgICAgICBtRnJvbUNsYXNzID0gZnJvbUNsYXNzOworICAgICAgICBtVG9DbGFzcyA9IHRvQ2xhc3M7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdGFyZ2V0IGNvbnZlcnRlZCB0eXBlLiBVc2VkIGJ5IHRoZSBhbmltYXRpb24gc3lzdGVtIHRvIGRldGVybWluZQorICAgICAqIHRoZSBwcm9wZXIgc2V0dGVyIGZ1bmN0aW9uIHRvIGNhbGwuCisgICAgICogQHJldHVybiBUaGUgQ2xhc3MgdG8gY29udmVydCB0aGUgaW5wdXQgdG8uCisgICAgICovCisgICAgQ2xhc3M8Vj4gZ2V0VGFyZ2V0VHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIG1Ub0NsYXNzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHNvdXJjZSBjb252ZXJzaW9uIHR5cGUuCisgICAgICovCisgICAgQ2xhc3M8VD4gZ2V0U291cmNlVHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIG1Gcm9tQ2xhc3M7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydHMgYSB2YWx1ZSBmcm9tIG9uZSB0eXBlIHRvIGFub3RoZXIuCisgICAgICogQHBhcmFtIHZhbHVlIFRoZSBPYmplY3QgdG8gY29udmVydC4KKyAgICAgKiBAcmV0dXJuIEEgdmFsdWUgb2YgdHlwZSBWLCBjb252ZXJ0ZWQgZnJvbSA8Y29kZT52YWx1ZTwvY29kZT4uCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IFYgY29udmVydChUIHZhbHVlKTsKKworICAgIC8qKgorICAgICAqIERvZXMgYSBjb252ZXJzaW9uIGZyb20gdGhlIHRhcmdldCB0eXBlIGJhY2sgdG8gdGhlIHNvdXJjZSB0eXBlLiBUaGUgc3ViY2xhc3MKKyAgICAgKiBtdXN0IGltcGxlbWVudCB0aGlzIHdoZW4gYSBUeXBlQ29udmVydGVyIGlzIHVzZWQgaW4gYW5pbWF0aW9ucyBhbmQgY3VycmVudAorICAgICAqIHZhbHVlcyB3aWxsIG5lZWQgdG8gYmUgcmVhZCBmb3IgYW4gYW5pbWF0aW9uLiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcmV0dXJuIG51bGwsCisgICAgICogaW5kaWNhdGluZyB0aGF0IGJhY2stY29udmVyc2lvbiBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgT2JqZWN0IHRvIGNvbnZlcnQuCisgICAgICogQHJldHVybiBBIHZhbHVlIG9mIHR5cGUgVCwgY29udmVydGVkIGZyb20gPGNvZGU+dmFsdWU8L2NvZGU+LgorICAgICAqLworICAgIHB1YmxpYyBUIGNvbnZlcnRCYWNrKFYgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1ZhbHVlQW5pbWF0b3IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9WYWx1ZUFuaW1hdG9yLmphdmEKaW5kZXggODZkYTY3My4uNzg4MGYzOSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1ZhbHVlQW5pbWF0b3IuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hbmltYXRpb24vVmFsdWVBbmltYXRvci5qYXZhCkBAIC0yODAsNiArMjgwLDI0IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFZhbHVlQW5pbWF0b3IgdGhhdCBhbmltYXRlcyBiZXR3ZWVuIGNvbG9yIHZhbHVlcy4gQSBzaW5nbGUKKyAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBIb3dldmVyLCB0aGlzIGlzIG5vdCB0eXBpY2FsbHkKKyAgICAgKiB1c2VmdWwgaW4gYSBWYWx1ZUFuaW1hdG9yIG9iamVjdCBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlIG9iamVjdCB0byBkZXRlcm1pbmUgdGhlCisgICAgICogc3RhcnRpbmcgdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gKHVubGlrZSBPYmplY3RBbmltYXRvciwgd2hpY2ggY2FuIGRlcml2ZSB0aGF0IHZhbHVlCisgICAgICogZnJvbSB0aGUgdGFyZ2V0IG9iamVjdCBhbmQgcHJvcGVydHkgYmVpbmcgYW5pbWF0ZWQpLiBUaGVyZWZvcmUsIHRoZXJlIHNob3VsZCB0eXBpY2FsbHkKKyAgICAgKiBiZSB0d28gb3IgbW9yZSB2YWx1ZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmFsdWVzIEEgc2V0IG9mIHZhbHVlcyB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBhbmltYXRlIGJldHdlZW4gb3ZlciB0aW1lLgorICAgICAqIEByZXR1cm4gQSBWYWx1ZUFuaW1hdG9yIG9iamVjdCB0aGF0IGlzIHNldCB1cCB0byBhbmltYXRlIGJldHdlZW4gdGhlIGdpdmVuIHZhbHVlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFZhbHVlQW5pbWF0b3Igb2ZBcmdiKGludC4uLiB2YWx1ZXMpIHsKKyAgICAgICAgVmFsdWVBbmltYXRvciBhbmltID0gbmV3IFZhbHVlQW5pbWF0b3IoKTsKKyAgICAgICAgYW5pbS5zZXRJbnRWYWx1ZXModmFsdWVzKTsKKyAgICAgICAgYW5pbS5zZXRFdmFsdWF0b3IoQXJnYkV2YWx1YXRvci5nZXRJbnN0YW5jZSgpKTsKKyAgICAgICAgcmV0dXJuIGFuaW07CisgICAgfQorCisgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIFZhbHVlQW5pbWF0b3IgdGhhdCBhbmltYXRlcyBiZXR3ZWVuIGZsb2F0IHZhbHVlcy4gQSBzaW5nbGUKICAgICAgKiB2YWx1ZSBpbXBsaWVzIHRoYXQgdGhhdCB2YWx1ZSBpcyB0aGUgb25lIGJlaW5nIGFuaW1hdGVkIHRvLiBIb3dldmVyLCB0aGlzIGlzIG5vdCB0eXBpY2FsbHkKICAgICAgKiB1c2VmdWwgaW4gYSBWYWx1ZUFuaW1hdG9yIG9iamVjdCBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlIG9iamVjdCB0byBkZXRlcm1pbmUgdGhlCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hbm5vdGF0aW9uL0ludERlZi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5ub3RhdGlvbi9JbnREZWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2FlOWM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5ub3RhdGlvbi9JbnREZWYuamF2YQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgYW5kcm9pZC5hbm5vdGF0aW9uOworCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldDsKKworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS5BTk5PVEFUSU9OX1RZUEU7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeS5DTEFTUzsKKworLyoqCisgKiBEZW5vdGVzIHRoYXQgdGhlIGFubm90YXRlZCBlbGVtZW50IG9mIGludGVnZXIgdHlwZSwgcmVwcmVzZW50cworICogYSBsb2dpY2FsIHR5cGUgYW5kIHRoYXQgaXRzIHZhbHVlIHNob3VsZCBiZSBvbmUgb2YgdGhlIGV4cGxpY2l0bHkKKyAqIG5hbWVkIGNvbnN0YW50cy4gSWYgdGhlIHtAbGluayAjZmxhZygpfSBhdHRyaWJ1dGUgaXMgc2V0IHRvIHRydWUsCisgKiBtdWx0aXBsZSBjb25zdGFudHMgY2FuIGJlIGNvbWJpbmVkLgorICogPHA+CisgKiBFeGFtcGxlOgorICogPHByZT57QGNvZGUKKyAqICAmIzY0O1JldGVudGlvbihDTEFTUykKKyAqICAmIzY0O0ludERlZigmIzEyMztOQVZJR0FUSU9OX01PREVfU1RBTkRBUkQsIE5BVklHQVRJT05fTU9ERV9MSVNULCBOQVZJR0FUSU9OX01PREVfVEFCUyYjMTI1OykKKyAqICBwdWJsaWMgJiM2NDtpbnRlcmZhY2UgTmF2aWdhdGlvbk1vZGUgJiMxMjM7JiMxMjU7CisgKiAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkFWSUdBVElPTl9NT0RFX1NUQU5EQVJEID0gMDsKKyAqICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOQVZJR0FUSU9OX01PREVfTElTVCA9IDE7CisgKiAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkFWSUdBVElPTl9NT0RFX1RBQlMgPSAyOworICogIC4uLgorICogIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hdmlnYXRpb25Nb2RlKCYjNjQ7TmF2aWdhdGlvbk1vZGUgaW50IG1vZGUpOworICogICYjNjQ7TmF2aWdhdGlvbk1vZGUKKyAqICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldE5hdmlnYXRpb25Nb2RlKCk7CisgKiB9PC9wcmU+CisgKiBGb3IgYSBmbGFnLCBzZXQgdGhlIGZsYWcgYXR0cmlidXRlOgorICogPHByZT57QGNvZGUKKyAqICAmIzY0O0ludERlZigKKyAqICAgICAgZmxhZyA9IHRydWUKKyAqICAgICAgdmFsdWUgPSAmIzEyMztOQVZJR0FUSU9OX01PREVfU1RBTkRBUkQsIE5BVklHQVRJT05fTU9ERV9MSVNULCBOQVZJR0FUSU9OX01PREVfVEFCUyYjMTI1OykKKyAqIH08L3ByZT4KKyAqCisgKiBAaGlkZQorICovCitAUmV0ZW50aW9uKENMQVNTKQorQFRhcmdldCh7QU5OT1RBVElPTl9UWVBFfSkKK3B1YmxpYyBAaW50ZXJmYWNlIEludERlZiB7CisgICAgLyoqIERlZmluZXMgdGhlIGFsbG93ZWQgY29uc3RhbnRzIGZvciB0aGlzIGVsZW1lbnQgKi8KKyAgICBsb25nW10gdmFsdWUoKSBkZWZhdWx0IHt9OworCisgICAgLyoqIERlZmluZXMgd2hldGhlciB0aGUgY29uc3RhbnRzIGNhbiBiZSB1c2VkIGFzIGEgZmxhZywgb3IganVzdCBhcyBhbiBlbnVtICh0aGUgZGVmYXVsdCkgKi8KKyAgICBib29sZWFuIGZsYWcoKSBkZWZhdWx0IGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYW5ub3RhdGlvbi9Ob25OdWxsLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hbm5vdGF0aW9uL05vbk51bGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTYwNGYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5ub3RhdGlvbi9Ob25OdWxsLmphdmEKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGFuZHJvaWQuYW5ub3RhdGlvbjsKKworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQ7CisKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuRklFTEQ7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLk1FVEhPRDsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuUEFSQU1FVEVSOworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kuU09VUkNFOworCisvKioKKyAqIERlbm90ZXMgdGhhdCBhIHBhcmFtZXRlciwgZmllbGQgb3IgbWV0aG9kIHJldHVybiB2YWx1ZSBjYW4gbmV2ZXIgYmUgbnVsbC4KKyAqIDxwPgorICogVGhpcyBpcyBhIG1hcmtlciBhbm5vdGF0aW9uIGFuZCBpdCBoYXMgbm8gc3BlY2lmaWMgYXR0cmlidXRlcy4KKyAqLworQFJldGVudGlvbihTT1VSQ0UpCitAVGFyZ2V0KHtNRVRIT0QsIFBBUkFNRVRFUiwgRklFTER9KQorcHVibGljIEBpbnRlcmZhY2UgTm9uTnVsbCB7Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hbm5vdGF0aW9uL051bGxhYmxlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hbm5vdGF0aW9uL051bGxhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RiYTJmNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2Fubm90YXRpb24vTnVsbGFibGUuamF2YQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgYW5kcm9pZC5hbm5vdGF0aW9uOworCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldDsKKworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS5GSUVMRDsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuTUVUSE9EOworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS5QQVJBTUVURVI7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeS5TT1VSQ0U7CisKKy8qKgorICogRGVub3RlcyB0aGF0IGEgcGFyYW1ldGVyLCBmaWVsZCBvciBtZXRob2QgcmV0dXJuIHZhbHVlIGNhbiBiZSBudWxsLgorICogPHA+CisgKiBXaGVuIGRlY29yYXRpbmcgYSBtZXRob2QgY2FsbCBwYXJhbWV0ZXIsIHRoaXMgZGVub3RlcyB0aGF0IHRoZSBwYXJhbWV0ZXIgY2FuCisgKiBsZWdpdGltYXRlbHkgYmUgbnVsbCBhbmQgdGhlIG1ldGhvZCB3aWxsIGdyYWNlZnVsbHkgZGVhbCB3aXRoIGl0LiBUeXBpY2FsbHkKKyAqIHVzZWQgb24gb3B0aW9uYWwgcGFyYW1ldGVycy4KKyAqIDxwPgorICogV2hlbiBkZWNvcmF0aW5nIGEgbWV0aG9kLCB0aGlzIGRlbm90ZXMgdGhlIG1ldGhvZCBtaWdodCBsZWdpdGltYXRlbHkgcmV0dXJuCisgKiBudWxsLgorICogPHA+CisgKiBUaGlzIGlzIGEgbWFya2VyIGFubm90YXRpb24gYW5kIGl0IGhhcyBubyBzcGVjaWZpYyBhdHRyaWJ1dGVzLgorICovCitAUmV0ZW50aW9uKFNPVVJDRSkKK0BUYXJnZXQoe01FVEhPRCwgUEFSQU1FVEVSLCBGSUVMRH0pCitwdWJsaWMgQGludGVyZmFjZSBOdWxsYWJsZSB7Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hbm5vdGF0aW9uL1N0cmluZ0RlZi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5ub3RhdGlvbi9TdHJpbmdEZWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjdmMzgwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5ub3RhdGlvbi9TdHJpbmdEZWYuamF2YQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgYW5kcm9pZC5hbm5vdGF0aW9uOworCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldDsKKworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS5BTk5PVEFUSU9OX1RZUEU7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeS5DTEFTUzsKKworLyoqCisgKiBEZW5vdGVzIHRoYXQgdGhlIGFubm90YXRlZCBTdHJpbmcgZWxlbWVudCwgcmVwcmVzZW50cyBhIGxvZ2ljYWwKKyAqIHR5cGUgYW5kIHRoYXQgaXRzIHZhbHVlIHNob3VsZCBiZSBvbmUgb2YgdGhlIGV4cGxpY2l0bHkgbmFtZWQgY29uc3RhbnRzLgorICogPHA+CisgKiBFeGFtcGxlOgorICogPHByZT57QGNvZGUKKyAqICAmIzY0O1JldGVudGlvbihTT1VSQ0UpCisgKiAgJiM2NDtTdHJpbmdEZWYoJiMxMjM7CisgKiAgICAgUE9XRVJfU0VSVklDRSwKKyAqICAgICBXSU5ET1dfU0VSVklDRSwKKyAqICAgICBMQVlPVVRfSU5GTEFURVJfU0VSVklDRQorICogICYjMTI1OykKKyAqICBwdWJsaWMgJiM2NDtpbnRlcmZhY2UgU2VydmljZU5hbWUgJiMxMjM7JiMxMjU7CisgKiAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9XRVJfU0VSVklDRSA9ICJwb3dlciI7CisgKiAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0lORE9XX1NFUlZJQ0UgPSAid2luZG93IjsKKyAqICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMQVlPVVRfSU5GTEFURVJfU0VSVklDRSA9ICJsYXlvdXRfaW5mbGF0ZXIiOworICogIC4uLgorICogIHB1YmxpYyBhYnN0cmFjdCBPYmplY3QgZ2V0U3lzdGVtU2VydmljZSgmIzY0O1NlcnZpY2VOYW1lIFN0cmluZyBuYW1lKTsKKyAqIH08L3ByZT4KKyAqCisgKiBAaGlkZQorICovCitAUmV0ZW50aW9uKENMQVNTKQorQFRhcmdldCh7QU5OT1RBVElPTl9UWVBFfSkKK3B1YmxpYyBAaW50ZXJmYWNlIFN0cmluZ0RlZiB7CisgICAgLyoqIERlZmluZXMgdGhlIGFsbG93ZWQgY29uc3RhbnRzIGZvciB0aGlzIGVsZW1lbnQgKi8KKyAgICBTdHJpbmdbXSB2YWx1ZSgpIGRlZmF1bHQge307Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aW9uQmFyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aW9uQmFyLmphdmEKaW5kZXggYzRkZGYxZi4uZmJlODk4NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGlvbkJhci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpb25CYXIuamF2YQpAQCAtMTYsNiArMTYsOSBAQAogCiBwYWNrYWdlIGFuZHJvaWQuYXBwOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CkBAIC0yOCw2ICszMSw5IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvdzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5TcGlubmVyQWRhcHRlcjsKIAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CisKIC8qKgogICogQSB3aW5kb3cgZmVhdHVyZSBhdCB0aGUgdG9wIG9mIHRoZSBhY3Rpdml0eSB0aGF0IG1heSBkaXNwbGF5IHRoZSBhY3Rpdml0eSB0aXRsZSwgbmF2aWdhdGlvbgogICogbW9kZXMsIGFuZCBvdGhlciBpbnRlcmFjdGl2ZSBpdGVtcy4KQEAgLTU3LDYgKzYzLDExIEBACiAgKiA8L2Rpdj4KICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIEFjdGlvbkJhciB7CisgICAgLyoqIEBoaWRlICovCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIEBJbnREZWYoe05BVklHQVRJT05fTU9ERV9TVEFOREFSRCwgTkFWSUdBVElPTl9NT0RFX0xJU1QsIE5BVklHQVRJT05fTU9ERV9UQUJTfSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBOYXZpZ2F0aW9uTW9kZSB7fQorCiAgICAgLyoqCiAgICAgICogU3RhbmRhcmQgbmF2aWdhdGlvbiBtb2RlLiBDb25zaXN0cyBvZiBlaXRoZXIgYSBsb2dvIG9yIGljb24KICAgICAgKiBhbmQgdGl0bGUgdGV4dCB3aXRoIGFuIG9wdGlvbmFsIHN1YnRpdGxlLiBDbGlja2luZyBhbnkgb2YgdGhlc2UgZWxlbWVudHMKQEAgLTc4LDYgKzg5LDE5IEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkFWSUdBVElPTl9NT0RFX1RBQlMgPSAyOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIEBJbnREZWYoZmxhZyA9IHRydWUsCisgICAgICAgICAgICB2YWx1ZSA9IHsKKyAgICAgICAgICAgICAgICAgICAgRElTUExBWV9VU0VfTE9HTywKKyAgICAgICAgICAgICAgICAgICAgRElTUExBWV9TSE9XX0hPTUUsCisgICAgICAgICAgICAgICAgICAgIERJU1BMQVlfSE9NRV9BU19VUCwKKyAgICAgICAgICAgICAgICAgICAgRElTUExBWV9TSE9XX1RJVExFLAorICAgICAgICAgICAgICAgICAgICBESVNQTEFZX1NIT1dfQ1VTVE9NLAorICAgICAgICAgICAgICAgICAgICBESVNQTEFZX1RJVExFX01VTFRJUExFX0xJTkVTCisgICAgICAgICAgICB9KQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIERpc3BsYXlPcHRpb25zIHt9CisKICAgICAvKioKICAgICAgKiBVc2UgbG9nbyBpbnN0ZWFkIG9mIGljb24gaWYgYXZhaWxhYmxlLiBUaGlzIGZsYWcgd2lsbCBjYXVzZSBhcHByb3ByaWF0ZQogICAgICAqIG5hdmlnYXRpb24gbW9kZXMgdG8gdXNlIGEgd2lkZXIgbG9nbyBpbiBwbGFjZSBvZiB0aGUgc3RhbmRhcmQgaWNvbi4KQEAgLTM0MSw3ICszNjUsNyBAQAogICAgICAqIEBwYXJhbSBvcHRpb25zIEEgY29tYmluYXRpb24gb2YgdGhlIGJpdHMgZGVmaW5lZCBieSB0aGUgRElTUExBWV8gY29uc3RhbnRzCiAgICAgICogICAgICAgICAgICAgICAgZGVmaW5lZCBpbiBBY3Rpb25CYXIuCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0RGlzcGxheU9wdGlvbnMoaW50IG9wdGlvbnMpOworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldERpc3BsYXlPcHRpb25zKEBEaXNwbGF5T3B0aW9ucyBpbnQgb3B0aW9ucyk7CiAgICAgCiAgICAgLyoqCiAgICAgICogU2V0IHNlbGVjdGVkIGRpc3BsYXkgb3B0aW9ucy4gT25seSB0aGUgb3B0aW9ucyBzcGVjaWZpZWQgYnkgbWFzayB3aWxsIGJlIGNoYW5nZWQuCkBAIC0zNTYsNyArMzgwLDcgQEAKICAgICAgKiAgICAgICAgICAgICAgICBkZWZpbmVkIGluIEFjdGlvbkJhci4KICAgICAgKiBAcGFyYW0gbWFzayBBIGJpdCBtYXNrIGRlY2xhcmluZyB3aGljaCBkaXNwbGF5IG9wdGlvbnMgc2hvdWxkIGJlIGNoYW5nZWQuCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0RGlzcGxheU9wdGlvbnMoaW50IG9wdGlvbnMsIGludCBtYXNrKTsKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXREaXNwbGF5T3B0aW9ucyhARGlzcGxheU9wdGlvbnMgaW50IG9wdGlvbnMsIEBEaXNwbGF5T3B0aW9ucyBpbnQgbWFzayk7CiAKICAgICAvKioKICAgICAgKiBTZXQgd2hldGhlciB0byBkaXNwbGF5IHRoZSBhY3Rpdml0eSBsb2dvIHJhdGhlciB0aGFuIHRoZSBhY3Rpdml0eSBpY29uLgpAQCAtNDMxLDcgKzQ1NSw3IEBACiAgICAgICogQHNlZSAjc2V0U3RhY2tlZEJhY2tncm91bmREcmF3YWJsZShEcmF3YWJsZSkKICAgICAgKiBAc2VlICNzZXRTcGxpdEJhY2tncm91bmREcmF3YWJsZShEcmF3YWJsZSkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRCYWNrZ3JvdW5kRHJhd2FibGUoRHJhd2FibGUgZCk7CisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0QmFja2dyb3VuZERyYXdhYmxlKEBOdWxsYWJsZSBEcmF3YWJsZSBkKTsKIAogICAgIC8qKgogICAgICAqIFNldCB0aGUgQWN0aW9uQmFyJ3Mgc3RhY2tlZCBiYWNrZ3JvdW5kLiBUaGlzIHdpbGwgYXBwZWFyCkBAIC00ODQsNiArNTA4LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBtb2RlLgogICAgICAqLworICAgIEBOYXZpZ2F0aW9uTW9kZQogICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0TmF2aWdhdGlvbk1vZGUoKTsKIAogICAgIC8qKgpAQCAtNDk0LDcgKzUxOSw3IEBACiAgICAgICogQHNlZSAjTkFWSUdBVElPTl9NT0RFX0xJU1QKICAgICAgKiBAc2VlICNOQVZJR0FUSU9OX01PREVfVEFCUwogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE5hdmlnYXRpb25Nb2RlKGludCBtb2RlKTsKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYXZpZ2F0aW9uTW9kZShATmF2aWdhdGlvbk1vZGUgaW50IG1vZGUpOwogCiAgICAgLyoqCiAgICAgICogQHJldHVybiBUaGUgY3VycmVudCBzZXQgb2YgZGlzcGxheSBvcHRpb25zLiAKQEAgLTEwMjQsNyArMTA0OSw3IEBACiAgICAgICAgIH0pCiAgICAgICAgIHB1YmxpYyBpbnQgZ3Jhdml0eSA9IEdyYXZpdHkuTk9fR1JBVklUWTsKIAotICAgICAgICBwdWJsaWMgTGF5b3V0UGFyYW1zKENvbnRleHQgYywgQXR0cmlidXRlU2V0IGF0dHJzKSB7CisgICAgICAgIHB1YmxpYyBMYXlvdXRQYXJhbXMoQE5vbk51bGwgQ29udGV4dCBjLCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKICAgICAgICAgICAgIHN1cGVyKGMsIGF0dHJzKTsKIAogICAgICAgICAgICAgVHlwZWRBcnJheSBhID0gYy5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHkuamF2YQppbmRleCBkNmRiOGMyLi42OThmMDZhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHkuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHkuamF2YQpAQCAtMTYsMTEgKzE2LDE3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5hcHA7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKK2ltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uU2NlbmU7CitpbXBvcnQgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb247CitpbXBvcnQgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3VwZXJOb3RDYWxsZWRFeGNlcHRpb247CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLkFjdGlvbkJhckltcGw7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwucG9saWN5LlBvbGljeU1hbmFnZXI7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50Q2FsbGJhY2tzMjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwpAQCAtODQsNiArOTAsOCBAQAogCiBpbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIApAQCAtODUyLDYgKzg2MCw3IEBACiAgICAgICogQHNlZSAjZ2V0V2luZG93CiAgICAgICogQHNlZSBhbmRyb2lkLnZpZXcuV2luZG93I2dldEN1cnJlbnRGb2N1cwogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIHB1YmxpYyBWaWV3IGdldEN1cnJlbnRGb2N1cygpIHsKICAgICAgICAgcmV0dXJuIG1XaW5kb3cgIT0gbnVsbCA/IG1XaW5kb3cuZ2V0Q3VycmVudEZvY3VzKCkgOiBudWxsOwogICAgIH0KQEAgLTg4Miw3ICs4OTEsNyBAQAogICAgICAqIEBzZWUgI29uUmVzdG9yZUluc3RhbmNlU3RhdGUKICAgICAgKiBAc2VlICNvblBvc3RDcmVhdGUKICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQE51bGxhYmxlIEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKICAgICAgICAgaWYgKERFQlVHX0xJRkVDWUNMRSkgU2xvZy52KFRBRywgIm9uQ3JlYXRlICIgKyB0aGlzICsgIjogIiArIHNhdmVkSW5zdGFuY2VTdGF0ZSk7CiAgICAgICAgIGlmIChtTGFzdE5vbkNvbmZpZ3VyYXRpb25JbnN0YW5jZXMgIT0gbnVsbCkgewogICAgICAgICAgICAgbUFsbExvYWRlck1hbmFnZXJzID0gbUxhc3ROb25Db25maWd1cmF0aW9uSW5zdGFuY2VzLmxvYWRlcnM7CkBAIC0xMDEwLDcgKzEwMTksNyBAQAogICAgICAqICAgICByZWNlbnRseSBzdXBwbGllZCBpbiB7QGxpbmsgI29uU2F2ZUluc3RhbmNlU3RhdGV9LiAgPGI+PGk+Tm90ZTogT3RoZXJ3aXNlIGl0IGlzIG51bGwuPC9pPjwvYj4KICAgICAgKiBAc2VlICNvbkNyZWF0ZQogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIG9uUG9zdENyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgcHJvdGVjdGVkIHZvaWQgb25Qb3N0Q3JlYXRlKEBOdWxsYWJsZSBCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CiAgICAgICAgIGlmICghaXNDaGlsZCgpKSB7CiAgICAgICAgICAgICBtVGl0bGVSZWFkeSA9IHRydWU7CiAgICAgICAgICAgICBvblRpdGxlQ2hhbmdlZChnZXRUaXRsZSgpLCBnZXRUaXRsZUNvbG9yKCkpOwpAQCAtMTM0Nyw2ICsxMzU2LDcgQEAKICAgICAgKiBAc2VlICNvblNhdmVJbnN0YW5jZVN0YXRlCiAgICAgICogQHNlZSAjb25QYXVzZQogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIHB1YmxpYyBDaGFyU2VxdWVuY2Ugb25DcmVhdGVEZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQpAQCAtMTU1MSw2ICsxNTYxLDcgQEAKICAgICAgKiB7QGxpbmsgRnJhZ21lbnQjc2V0UmV0YWluSW5zdGFuY2UoYm9vbGVhbil9IGluc3RlYWQ7IHRoaXMgaXMgYWxzbwogICAgICAqIGF2YWlsYWJsZSBvbiBvbGRlciBwbGF0Zm9ybXMgdGhyb3VnaCB0aGUgQW5kcm9pZCBjb21wYXRpYmlsaXR5IHBhY2thZ2UuCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgT2JqZWN0IGdldExhc3ROb25Db25maWd1cmF0aW9uSW5zdGFuY2UoKSB7CiAgICAgICAgIHJldHVybiBtTGFzdE5vbkNvbmZpZ3VyYXRpb25JbnN0YW5jZXMgIT0gbnVsbApAQCAtMTYzMCw2ICsxNjQxLDcgQEAKICAgICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIG9iamVjdCBwcmV2aW91c2x5IHJldHVybmVkIGJ5CiAgICAgICoge0BsaW5rICNvblJldGFpbk5vbkNvbmZpZ3VyYXRpb25DaGlsZEluc3RhbmNlcygpfQogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+IGdldExhc3ROb25Db25maWd1cmF0aW9uQ2hpbGRJbnN0YW5jZXMoKSB7CiAgICAgICAgIHJldHVybiBtTGFzdE5vbkNvbmZpZ3VyYXRpb25JbnN0YW5jZXMgIT0gbnVsbAogICAgICAgICAgICAgICAgID8gbUxhc3ROb25Db25maWd1cmF0aW9uSW5zdGFuY2VzLmNoaWxkcmVuIDogbnVsbDsKQEAgLTE2NDIsNiArMTY1NCw3IEBACiAgICAgICogc2V0IG9mIGNoaWxkIGFjdGl2aXRpZXMsIHN1Y2ggYXMgQWN0aXZpdHlHcm91cC4gIFRoZSBzYW1lIGd1YXJhbnRlZXMgYW5kIHJlc3RyaWN0aW9ucyBhcHBseQogICAgICAqIGFzIGZvciB7QGxpbmsgI29uUmV0YWluTm9uQ29uZmlndXJhdGlvbkluc3RhbmNlKCl9LiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIEhhc2hNYXA8U3RyaW5nLE9iamVjdD4gb25SZXRhaW5Ob25Db25maWd1cmF0aW9uQ2hpbGRJbnN0YW5jZXMoKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KQEAgLTE4ODksNiArMTkwMiw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBBY3Rpdml0eSdzIEFjdGlvbkJhciwgb3IgbnVsbCBpZiBpdCBkb2VzIG5vdCBoYXZlIG9uZS4KICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBwdWJsaWMgQWN0aW9uQmFyIGdldEFjdGlvbkJhcigpIHsKICAgICAgICAgaW5pdEFjdGlvbkJhcigpOwogICAgICAgICByZXR1cm4gbUFjdGlvbkJhcjsKQEAgLTE5NzksMTMgKzE5OTMsNTggQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBSZXRyaWV2ZSB0aGUge0BsaW5rIFRyYW5zaXRpb25NYW5hZ2VyfSByZXNwb25zaWJsZSBmb3IgZGVmYXVsdCB0cmFuc2l0aW9ucyBpbiB0aGlzIHdpbmRvdy4KKyAgICAgKiBSZXF1aXJlcyB7QGxpbmsgV2luZG93I0ZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OU30uCisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCB3aWxsIHJldHVybiBub24tbnVsbCBhZnRlciBjb250ZW50IGhhcyBiZWVuIGluaXRpYWxpemVkIChlLmcuIGJ5IHVzaW5nCisgICAgICoge0BsaW5rICNzZXRDb250ZW50Vmlld30pIGlmIHtAbGluayBXaW5kb3cjRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TfSBoYXMgYmVlbiBncmFudGVkLjwvcD4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhpcyB3aW5kb3cncyBjb250ZW50IFRyYW5zaXRpb25NYW5hZ2VyIG9yIG51bGwgaWYgbm9uZSBpcyBzZXQuCisgICAgICovCisgICAgcHVibGljIFRyYW5zaXRpb25NYW5hZ2VyIGdldENvbnRlbnRUcmFuc2l0aW9uTWFuYWdlcigpIHsKKyAgICAgICAgcmV0dXJuIGdldFdpbmRvdygpLmdldFRyYW5zaXRpb25NYW5hZ2VyKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSB7QGxpbmsgVHJhbnNpdGlvbk1hbmFnZXJ9IHRvIHVzZSBmb3IgZGVmYXVsdCB0cmFuc2l0aW9ucyBpbiB0aGlzIHdpbmRvdy4KKyAgICAgKiBSZXF1aXJlcyB7QGxpbmsgV2luZG93I0ZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OU30uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdG0gVGhlIFRyYW5zaXRpb25NYW5hZ2VyIHRvIHVzZSBmb3Igc2NlbmUgY2hhbmdlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50VHJhbnNpdGlvbk1hbmFnZXIoVHJhbnNpdGlvbk1hbmFnZXIgdG0pIHsKKyAgICAgICAgZ2V0V2luZG93KCkuc2V0VHJhbnNpdGlvbk1hbmFnZXIodG0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSB7QGxpbmsgU2NlbmV9IHJlcHJlc2VudGluZyB0aGlzIHdpbmRvdydzIGN1cnJlbnQgY29udGVudC4KKyAgICAgKiBSZXF1aXJlcyB7QGxpbmsgV2luZG93I0ZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OU30uCisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCB3aWxsIHJldHVybiBudWxsIGlmIHRoZSBjdXJyZW50IGNvbnRlbnQgaXMgbm90IHJlcHJlc2VudGVkIGJ5IGEgU2NlbmUuPC9wPgorICAgICAqCisgICAgICogQHJldHVybiBDdXJyZW50IFNjZW5lIGJlaW5nIHNob3duIG9yIG51bGwKKyAgICAgKi8KKyAgICBwdWJsaWMgU2NlbmUgZ2V0Q29udGVudFNjZW5lKCkgeworICAgICAgICByZXR1cm4gZ2V0V2luZG93KCkuZ2V0Q29udGVudFNjZW5lKCk7CisgICAgfQorCisgICAgLyoqCiAgICAgICogU2V0cyB3aGV0aGVyIHRoaXMgYWN0aXZpdHkgaXMgZmluaXNoZWQgd2hlbiB0b3VjaGVkIG91dHNpZGUgaXRzIHdpbmRvdydzCiAgICAgICogYm91bmRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEZpbmlzaE9uVG91Y2hPdXRzaWRlKGJvb2xlYW4gZmluaXNoKSB7CiAgICAgICAgIG1XaW5kb3cuc2V0Q2xvc2VPblRvdWNoT3V0c2lkZShmaW5pc2gpOwogICAgIH0KLSAgICAKKworICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoeworICAgICAgICAgICAgREVGQVVMVF9LRVlTX0RJU0FCTEUsCisgICAgICAgICAgICBERUZBVUxUX0tFWVNfRElBTEVSLAorICAgICAgICAgICAgREVGQVVMVF9LRVlTX1NIT1JUQ1VULAorICAgICAgICAgICAgREVGQVVMVF9LRVlTX1NFQVJDSF9MT0NBTCwKKyAgICAgICAgICAgIERFRkFVTFRfS0VZU19TRUFSQ0hfR0xPQkFMfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgQGludGVyZmFjZSBEZWZhdWx0S2V5TW9kZSB7fQorCiAgICAgLyoqCiAgICAgICogVXNlIHdpdGgge0BsaW5rICNzZXREZWZhdWx0S2V5TW9kZX0gdG8gdHVybiBvZmYgZGVmYXVsdCBoYW5kbGluZyBvZgogICAgICAqIGtleXMuCkBAIC0yMDU1LDcgKzIxMTQsNyBAQAogICAgICAqIEBzZWUgI0RFRkFVTFRfS0VZU19TRUFSQ0hfR0xPQkFMCiAgICAgICogQHNlZSAjb25LZXlEb3duCiAgICAgICovCi0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0RGVmYXVsdEtleU1vZGUoaW50IG1vZGUpIHsKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXREZWZhdWx0S2V5TW9kZShARGVmYXVsdEtleU1vZGUgaW50IG1vZGUpIHsKICAgICAgICAgbURlZmF1bHRLZXlNb2RlID0gbW9kZTsKICAgICAgICAgCiAgICAgICAgIC8vIFNvbWUgbW9kZXMgdXNlIGEgU3Bhbm5hYmxlU3RyaW5nQnVpbGRlciB0byB0cmFjayAmIGRpc3BhdGNoIGlucHV0IGV2ZW50cwpAQCAtMjUyMSw2ICsyNTgwLDcgQEAKICAgICAgKiBzaW1wbHkgcmV0dXJucyBudWxsIHNvIHRoYXQgYWxsIHBhbmVsIHN1Yi13aW5kb3dzIHdpbGwgaGF2ZSB0aGUgZGVmYXVsdAogICAgICAqIG1lbnUgYmVoYXZpb3IuCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgcHVibGljIFZpZXcgb25DcmVhdGVQYW5lbFZpZXcoaW50IGZlYXR1cmVJZCkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CkBAIC0zMDE4LDYgKzMwNzgsNyBAQAogICAgICAqIHtAbGluayBGcmFnbWVudE1hbmFnZXJ9IGluc3RlYWQ7IHRoaXMgaXMgYWxzbwogICAgICAqIGF2YWlsYWJsZSBvbiBvbGRlciBwbGF0Zm9ybXMgdGhyb3VnaCB0aGUgQW5kcm9pZCBjb21wYXRpYmlsaXR5IHBhY2thZ2UuCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgQERlcHJlY2F0ZWQKICAgICBwcm90ZWN0ZWQgRGlhbG9nIG9uQ3JlYXRlRGlhbG9nKGludCBpZCwgQnVuZGxlIGFyZ3MpIHsKICAgICAgICAgcmV0dXJuIG9uQ3JlYXRlRGlhbG9nKGlkKTsKQEAgLTMxMDUsNiArMzE2Niw3IEBACiAgICAgICoge0BsaW5rIEZyYWdtZW50TWFuYWdlcn0gaW5zdGVhZDsgdGhpcyBpcyBhbHNvCiAgICAgICogYXZhaWxhYmxlIG9uIG9sZGVyIHBsYXRmb3JtcyB0aHJvdWdoIHRoZSBBbmRyb2lkIGNvbXBhdGliaWxpdHkgcGFja2FnZS4KICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBARGVwcmVjYXRlZAogICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHNob3dEaWFsb2coaW50IGlkLCBCdW5kbGUgYXJncykgewogICAgICAgICBpZiAobU1hbmFnZWREaWFsb2dzID09IG51bGwpIHsKQEAgLTMyMjYsMTMgKzMyODgsMTMgQEAKICAgICAgKiA8cD5JdCBpcyB0eXBpY2FsbHkgY2FsbGVkIGZyb20gb25TZWFyY2hSZXF1ZXN0ZWQoKSwgZWl0aGVyIGRpcmVjdGx5IGZyb20gCiAgICAgICogQWN0aXZpdHkub25TZWFyY2hSZXF1ZXN0ZWQoKSBvciBmcm9tIGFuIG92ZXJyaWRkZW4gdmVyc2lvbiBpbiBhbnkgZ2l2ZW4gCiAgICAgICogQWN0aXZpdHkuICBJZiB5b3VyIGdvYWwgaXMgc2ltcGx5IHRvIGFjdGl2YXRlIHNlYXJjaCwgaXQgaXMgcHJlZmVycmVkIHRvIGNhbGwKLSAgICAgKiBvblNlYXJjaFJlcXVlc3RlZCgpLCB3aGljaCBtYXkgaGF2ZSBiZWVuIG92ZXJyaWRlbiBlbHNld2hlcmUgaW4geW91ciBBY3Rpdml0eS4gIElmIHlvdXIgZ29hbAorICAgICAqIG9uU2VhcmNoUmVxdWVzdGVkKCksIHdoaWNoIG1heSBoYXZlIGJlZW4gb3ZlcnJpZGRlbiBlbHNld2hlcmUgaW4geW91ciBBY3Rpdml0eS4gIElmIHlvdXIgZ29hbAogICAgICAqIGlzIHRvIGluamVjdCBzcGVjaWZpYyBkYXRhIHN1Y2ggYXMgY29udGV4dCBkYXRhLCBpdCBpcyBwcmVmZXJyZWQgdG8gPGk+b3ZlcnJpZGU8L2k+CiAgICAgICogb25TZWFyY2hSZXF1ZXN0ZWQoKSwgc28gdGhhdCBhbnkgY2FsbGVycyB0byBpdCB3aWxsIGJlbmVmaXQgZnJvbSB0aGUgb3ZlcnJpZGUuCiAgICAgICogCiAgICAgICogQHBhcmFtIGluaXRpYWxRdWVyeSBBbnkgbm9uLW51bGwgbm9uLWVtcHR5IHN0cmluZyB3aWxsIGJlIGluc2VydGVkIGFzIAogICAgICAqIHByZS1lbnRlcmVkIHRleHQgaW4gdGhlIHNlYXJjaCBxdWVyeSBib3guCi0gICAgICogQHBhcmFtIHNlbGVjdEluaXRpYWxRdWVyeSBJZiB0cnVlLCB0aGUgaW50aWFsIHF1ZXJ5IHdpbGwgYmUgcHJlc2VsZWN0ZWQsIHdoaWNoIG1lYW5zIHRoYXQKKyAgICAgKiBAcGFyYW0gc2VsZWN0SW5pdGlhbFF1ZXJ5IElmIHRydWUsIHRoZSBpbml0aWFsIHF1ZXJ5IHdpbGwgYmUgcHJlc2VsZWN0ZWQsIHdoaWNoIG1lYW5zIHRoYXQKICAgICAgKiBhbnkgZnVydGhlciB0eXBpbmcgd2lsbCByZXBsYWNlIGl0LiAgVGhpcyBpcyB1c2VmdWwgZm9yIGNhc2VzIHdoZXJlIGFuIGVudGlyZSBwcmUtZm9ybWVkCiAgICAgICogcXVlcnkgaXMgYmVpbmcgaW5zZXJ0ZWQuICBJZiBmYWxzZSwgdGhlIHNlbGVjdGlvbiBwb2ludCB3aWxsIGJlIHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZQogICAgICAqIGluc2VydGVkIHF1ZXJ5LiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgaW5zZXJ0ZWQgcXVlcnkgaXMgdGV4dCB0aGF0IHRoZSB1c2VyIGVudGVyZWQsCkBAIC0zMjUwLDggKzMzMTIsOCBAQAogICAgICAqIEBzZWUgYW5kcm9pZC5hcHAuU2VhcmNoTWFuYWdlcgogICAgICAqIEBzZWUgI29uU2VhcmNoUmVxdWVzdGVkCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRTZWFyY2goU3RyaW5nIGluaXRpYWxRdWVyeSwgYm9vbGVhbiBzZWxlY3RJbml0aWFsUXVlcnksIAotICAgICAgICAgICAgQnVuZGxlIGFwcFNlYXJjaERhdGEsIGJvb2xlYW4gZ2xvYmFsU2VhcmNoKSB7CisgICAgcHVibGljIHZvaWQgc3RhcnRTZWFyY2goQE51bGxhYmxlIFN0cmluZyBpbml0aWFsUXVlcnksIGJvb2xlYW4gc2VsZWN0SW5pdGlhbFF1ZXJ5LAorICAgICAgICAgICAgQE51bGxhYmxlIEJ1bmRsZSBhcHBTZWFyY2hEYXRhLCBib29sZWFuIGdsb2JhbFNlYXJjaCkgewogICAgICAgICBlbnN1cmVTZWFyY2hNYW5hZ2VyKCk7CiAgICAgICAgIG1TZWFyY2hNYW5hZ2VyLnN0YXJ0U2VhcmNoKGluaXRpYWxRdWVyeSwgc2VsZWN0SW5pdGlhbFF1ZXJ5LCBnZXRDb21wb25lbnROYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBTZWFyY2hEYXRhLCBnbG9iYWxTZWFyY2gpOyAKQEAgLTMyNjcsNyArMzMyOSw3IEBACiAgICAgICogc2VhcmNoZXMuICBUaGlzIGRhdGEgd2lsbCBiZSByZXR1cm5lZCB3aXRoIFNFQVJDSCBpbnRlbnQocykuICBOdWxsIGlmCiAgICAgICogbm8gZXh0cmEgZGF0YSBpcyByZXF1aXJlZC4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB0cmlnZ2VyU2VhcmNoKFN0cmluZyBxdWVyeSwgQnVuZGxlIGFwcFNlYXJjaERhdGEpIHsKKyAgICBwdWJsaWMgdm9pZCB0cmlnZ2VyU2VhcmNoKFN0cmluZyBxdWVyeSwgQE51bGxhYmxlIEJ1bmRsZSBhcHBTZWFyY2hEYXRhKSB7CiAgICAgICAgIGVuc3VyZVNlYXJjaE1hbmFnZXIoKTsKICAgICAgICAgbVNlYXJjaE1hbmFnZXIudHJpZ2dlclNlYXJjaChxdWVyeSwgZ2V0Q29tcG9uZW50TmFtZSgpLCBhcHBTZWFyY2hEYXRhKTsKICAgICB9CkBAIC0zMzM0LDYgKzMzOTYsNyBAQAogICAgICAqIENvbnZlbmllbmNlIGZvciBjYWxsaW5nCiAgICAgICoge0BsaW5rIGFuZHJvaWQudmlldy5XaW5kb3cjZ2V0TGF5b3V0SW5mbGF0ZXJ9LgogICAgICAqLworICAgIEBOb25OdWxsCiAgICAgcHVibGljIExheW91dEluZmxhdGVyIGdldExheW91dEluZmxhdGVyKCkgewogICAgICAgICByZXR1cm4gZ2V0V2luZG93KCkuZ2V0TGF5b3V0SW5mbGF0ZXIoKTsKICAgICB9CkBAIC0zMzQxLDYgKzM0MDQsNyBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgYSB7QGxpbmsgTWVudUluZmxhdGVyfSB3aXRoIHRoaXMgY29udGV4dC4KICAgICAgKi8KKyAgICBATm9uTnVsbAogICAgIHB1YmxpYyBNZW51SW5mbGF0ZXIgZ2V0TWVudUluZmxhdGVyKCkgewogICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhY3Rpb24gdmlld3MgY2FuIGdldCBhbiBhcHByb3ByaWF0ZSB0aGVtZS4KICAgICAgICAgaWYgKG1NZW51SW5mbGF0ZXIgPT0gbnVsbCkgewpAQCAtMzM4Miw3ICszNDQ2LDI5IEBACiAgICAgICogQHNlZSAjc3RhcnRBY3Rpdml0eSAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXR5Rm9yUmVzdWx0KEludGVudCBpbnRlbnQsIGludCByZXF1ZXN0Q29kZSkgewotICAgICAgICBzdGFydEFjdGl2aXR5Rm9yUmVzdWx0KGludGVudCwgcmVxdWVzdENvZGUsIG51bGwpOworICAgICAgICBmaW5hbCBUcmFuc2l0aW9uTWFuYWdlciB0bSA9IGdldFdpbmRvdygpLmdldFRyYW5zaXRpb25NYW5hZ2VyKCk7CisgICAgICAgIGZpbmFsIFNjZW5lIGN1cnJTY2VuZSA9IGdldFdpbmRvdygpLmdldENvbnRlbnRTY2VuZSgpOworICAgICAgICBmaW5hbCBTdHJpbmdbXSB0YXJnZXRTY2VuZU5hbWVzID0gY3VyclNjZW5lICE9IG51bGwgJiYgdG0gIT0gbnVsbCA/CisgICAgICAgICAgICAgICAgdG0uZ2V0VGFyZ2V0U2NlbmVOYW1lcyhjdXJyU2NlbmUpIDogbnVsbDsKKworICAgICAgICBpZiAodGFyZ2V0U2NlbmVOYW1lcyA9PSBudWxsIHx8IHRhcmdldFNjZW5lTmFtZXMubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoaW50ZW50LCByZXF1ZXN0Q29kZSwgbnVsbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUT0RPIENhcHR1cmUgdGhlIHNjZW5lIHRyYW5zaXRpb24gYXJncyBhbmQgc2VuZCBhbG9uZworICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlPcHRpb25zIG9wdHMgPSBBY3Rpdml0eU9wdGlvbnMubWFrZVNjZW5lVHJhbnNpdGlvbkFuaW1hdGlvbigKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2NlbmVOYW1lcywgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgbmV3IEFjdGl2aXR5T3B0aW9ucy5PblNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBvblNjZW5lVHJhbnNpdGlvblN0YXJ0ZWQoU3RyaW5nIGRlc3RTY2VuZU5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBUcmFuc2l0aW9uIHQgPSB0bS5nZXROYW1lZFRyYW5zaXRpb24oY3VyclNjZW5lLCBkZXN0U2NlbmVOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIEZpbGwgdGhpcyBpbiB0byBub3RpZnkgdGhlIG91dGdvaW5nIGFjdGl2aXR5IHRoYXQgaXQgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJlYXQgdGhpcyBhcyBhIHN5bmMgcG9pbnQgZm9yIHRoZSB0cmFuc2l0aW9uIC0gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gaGFzIHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiU2NlbmUgdHJhbnNpdGlvbiB0byBzY2VuZSAiICsgZGVzdFNjZW5lTmFtZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRyYW5zaXRpb24gIiArIHQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9LCBtSGFuZGxlcik7CisgICAgICAgICAgICBzdGFydEFjdGl2aXR5Rm9yUmVzdWx0KGludGVudCwgcmVxdWVzdENvZGUsIG9wdHMudG9CdW5kbGUoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTM0MTksNyArMzUwNSw3IEBACiAgICAgICoKICAgICAgKiBAc2VlICNzdGFydEFjdGl2aXR5IAogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoSW50ZW50IGludGVudCwgaW50IHJlcXVlc3RDb2RlLCBCdW5kbGUgb3B0aW9ucykgeworICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoSW50ZW50IGludGVudCwgaW50IHJlcXVlc3RDb2RlLCBATnVsbGFibGUgQnVuZGxlIG9wdGlvbnMpIHsKICAgICAgICAgaWYgKG1QYXJlbnQgPT0gbnVsbCkgewogICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uLkFjdGl2aXR5UmVzdWx0IGFyID0KICAgICAgICAgICAgICAgICBtSW5zdHJ1bWVudGF0aW9uLmV4ZWNTdGFydEFjdGl2aXR5KApAQCAtMzQ5OCw3ICszNTg0LDcgQEAKICAgICAgKiBAcGFyYW0gZXh0cmFGbGFncyBBbHdheXMgc2V0IHRvIDAuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnRJbnRlbnRTZW5kZXJGb3JSZXN1bHQoSW50ZW50U2VuZGVyIGludGVudCwgaW50IHJlcXVlc3RDb2RlLAotICAgICAgICAgICAgSW50ZW50IGZpbGxJbkludGVudCwgaW50IGZsYWdzTWFzaywgaW50IGZsYWdzVmFsdWVzLCBpbnQgZXh0cmFGbGFncykKKyAgICAgICAgICAgIEBOdWxsYWJsZSBJbnRlbnQgZmlsbEluSW50ZW50LCBpbnQgZmxhZ3NNYXNrLCBpbnQgZmxhZ3NWYWx1ZXMsIGludCBleHRyYUZsYWdzKQogICAgICAgICAgICAgdGhyb3dzIEludGVudFNlbmRlci5TZW5kSW50ZW50RXhjZXB0aW9uIHsKICAgICAgICAgc3RhcnRJbnRlbnRTZW5kZXJGb3JSZXN1bHQoaW50ZW50LCByZXF1ZXN0Q29kZSwgZmlsbEluSW50ZW50LCBmbGFnc01hc2ssCiAgICAgICAgICAgICAgICAgZmxhZ3NWYWx1ZXMsIGV4dHJhRmxhZ3MsIG51bGwpOwpAQCAtMzUzMCw3ICszNjE2LDcgQEAKICAgICAgKiBvdmVycmlkZSBhbnkgdGhhdCBjb25mbGljdCB3aXRoIHRob3NlIGdpdmVuIGJ5IHRoZSBJbnRlbnRTZW5kZXIuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnRJbnRlbnRTZW5kZXJGb3JSZXN1bHQoSW50ZW50U2VuZGVyIGludGVudCwgaW50IHJlcXVlc3RDb2RlLAotICAgICAgICAgICAgSW50ZW50IGZpbGxJbkludGVudCwgaW50IGZsYWdzTWFzaywgaW50IGZsYWdzVmFsdWVzLCBpbnQgZXh0cmFGbGFncywKKyAgICAgICAgICAgIEBOdWxsYWJsZSBJbnRlbnQgZmlsbEluSW50ZW50LCBpbnQgZmxhZ3NNYXNrLCBpbnQgZmxhZ3NWYWx1ZXMsIGludCBleHRyYUZsYWdzLAogICAgICAgICAgICAgQnVuZGxlIG9wdGlvbnMpIHRocm93cyBJbnRlbnRTZW5kZXIuU2VuZEludGVudEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChtUGFyZW50ID09IG51bGwpIHsKICAgICAgICAgICAgIHN0YXJ0SW50ZW50U2VuZGVyRm9yUmVzdWx0SW5uZXIoaW50ZW50LCByZXF1ZXN0Q29kZSwgZmlsbEluSW50ZW50LApAQCAtMzYxOCw3ICszNzA0LDcgQEAKICAgICAgKiBAc2VlICNzdGFydEFjdGl2aXR5Rm9yUmVzdWx0IAogICAgICAqLwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHkoSW50ZW50IGludGVudCwgQnVuZGxlIG9wdGlvbnMpIHsKKyAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXR5KEludGVudCBpbnRlbnQsIEBOdWxsYWJsZSBCdW5kbGUgb3B0aW9ucykgewogICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7CiAgICAgICAgICAgICBzdGFydEFjdGl2aXR5Rm9yUmVzdWx0KGludGVudCwgLTEsIG9wdGlvbnMpOwogICAgICAgICB9IGVsc2UgewpAQCAtMzY2Nyw3ICszNzUzLDcgQEAKICAgICAgKiBAc2VlICNzdGFydEFjdGl2aXR5Rm9yUmVzdWx0CiAgICAgICovCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3RhcnRBY3Rpdml0aWVzKEludGVudFtdIGludGVudHMsIEJ1bmRsZSBvcHRpb25zKSB7CisgICAgcHVibGljIHZvaWQgc3RhcnRBY3Rpdml0aWVzKEludGVudFtdIGludGVudHMsIEBOdWxsYWJsZSBCdW5kbGUgb3B0aW9ucykgewogICAgICAgICBtSW5zdHJ1bWVudGF0aW9uLmV4ZWNTdGFydEFjdGl2aXRpZXModGhpcywgbU1haW5UaHJlYWQuZ2V0QXBwbGljYXRpb25UaHJlYWQoKSwKICAgICAgICAgICAgICAgICBtVG9rZW4sIHRoaXMsIGludGVudHMsIG9wdGlvbnMpOwogICAgIH0KQEAgLTM2ODYsNyArMzc3Miw3IEBACiAgICAgICogQHBhcmFtIGV4dHJhRmxhZ3MgQWx3YXlzIHNldCB0byAwLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0SW50ZW50U2VuZGVyKEludGVudFNlbmRlciBpbnRlbnQsCi0gICAgICAgICAgICBJbnRlbnQgZmlsbEluSW50ZW50LCBpbnQgZmxhZ3NNYXNrLCBpbnQgZmxhZ3NWYWx1ZXMsIGludCBleHRyYUZsYWdzKQorICAgICAgICAgICAgQE51bGxhYmxlIEludGVudCBmaWxsSW5JbnRlbnQsIGludCBmbGFnc01hc2ssIGludCBmbGFnc1ZhbHVlcywgaW50IGV4dHJhRmxhZ3MpCiAgICAgICAgICAgICB0aHJvd3MgSW50ZW50U2VuZGVyLlNlbmRJbnRlbnRFeGNlcHRpb24gewogICAgICAgICBzdGFydEludGVudFNlbmRlcihpbnRlbnQsIGZpbGxJbkludGVudCwgZmxhZ3NNYXNrLCBmbGFnc1ZhbHVlcywKICAgICAgICAgICAgICAgICBleHRyYUZsYWdzLCBudWxsKTsKQEAgLTM3MTMsNyArMzc5OSw3IEBACiAgICAgICogb3ZlcnJpZGUgYW55IHRoYXQgY29uZmxpY3Qgd2l0aCB0aG9zZSBnaXZlbiBieSB0aGUgSW50ZW50U2VuZGVyLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0SW50ZW50U2VuZGVyKEludGVudFNlbmRlciBpbnRlbnQsCi0gICAgICAgICAgICBJbnRlbnQgZmlsbEluSW50ZW50LCBpbnQgZmxhZ3NNYXNrLCBpbnQgZmxhZ3NWYWx1ZXMsIGludCBleHRyYUZsYWdzLAorICAgICAgICAgICAgQE51bGxhYmxlIEludGVudCBmaWxsSW5JbnRlbnQsIGludCBmbGFnc01hc2ssIGludCBmbGFnc1ZhbHVlcywgaW50IGV4dHJhRmxhZ3MsCiAgICAgICAgICAgICBCdW5kbGUgb3B0aW9ucykgdGhyb3dzIEludGVudFNlbmRlci5TZW5kSW50ZW50RXhjZXB0aW9uIHsKICAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkgewogICAgICAgICAgICAgc3RhcnRJbnRlbnRTZW5kZXJGb3JSZXN1bHQoaW50ZW50LCAtMSwgZmlsbEluSW50ZW50LCBmbGFnc01hc2ssCkBAIC0zNzQxLDcgKzM4MjcsNyBAQAogICAgICAqIEBzZWUgI3N0YXJ0QWN0aXZpdHkKICAgICAgKiBAc2VlICNzdGFydEFjdGl2aXR5Rm9yUmVzdWx0CiAgICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc3RhcnRBY3Rpdml0eUlmTmVlZGVkKEludGVudCBpbnRlbnQsIGludCByZXF1ZXN0Q29kZSkgeworICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0QWN0aXZpdHlJZk5lZWRlZChATm9uTnVsbCBJbnRlbnQgaW50ZW50LCBpbnQgcmVxdWVzdENvZGUpIHsKICAgICAgICAgcmV0dXJuIHN0YXJ0QWN0aXZpdHlJZk5lZWRlZChpbnRlbnQsIHJlcXVlc3RDb2RlLCBudWxsKTsKICAgICB9CiAKQEAgLTM3NzUsNyArMzg2MSw4IEBACiAgICAgICogQHNlZSAjc3RhcnRBY3Rpdml0eQogICAgICAqIEBzZWUgI3N0YXJ0QWN0aXZpdHlGb3JSZXN1bHQKICAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzdGFydEFjdGl2aXR5SWZOZWVkZWQoSW50ZW50IGludGVudCwgaW50IHJlcXVlc3RDb2RlLCBCdW5kbGUgb3B0aW9ucykgeworICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0QWN0aXZpdHlJZk5lZWRlZChATm9uTnVsbCBJbnRlbnQgaW50ZW50LCBpbnQgcmVxdWVzdENvZGUsCisgICAgICAgICAgICBATnVsbGFibGUgQnVuZGxlIG9wdGlvbnMpIHsKICAgICAgICAgaWYgKG1QYXJlbnQgPT0gbnVsbCkgewogICAgICAgICAgICAgaW50IHJlc3VsdCA9IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9SRVRVUk5fSU5URU5UX1RPX0NBTExFUjsKICAgICAgICAgICAgIHRyeSB7CkBAIC0zODI0LDcgKzM5MTEsNyBAQAogICAgICAqIHdhc24ndC4gIEluIGdlbmVyYWwsIGlmIHRydWUgaXMgcmV0dXJuZWQgeW91IHdpbGwgdGhlbiB3YW50IHRvIGNhbGwKICAgICAgKiBmaW5pc2goKSBvbiB5b3Vyc2VsZi4KICAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzdGFydE5leHRNYXRjaGluZ0FjdGl2aXR5KEludGVudCBpbnRlbnQpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBzdGFydE5leHRNYXRjaGluZ0FjdGl2aXR5KEBOb25OdWxsIEludGVudCBpbnRlbnQpIHsKICAgICAgICAgcmV0dXJuIHN0YXJ0TmV4dE1hdGNoaW5nQWN0aXZpdHkoaW50ZW50LCBudWxsKTsKICAgICB9CiAKQEAgLTM4NDcsNyArMzkzNCw3IEBACiAgICAgICogd2Fzbid0LiAgSW4gZ2VuZXJhbCwgaWYgdHJ1ZSBpcyByZXR1cm5lZCB5b3Ugd2lsbCB0aGVuIHdhbnQgdG8gY2FsbAogICAgICAqIGZpbmlzaCgpIG9uIHlvdXJzZWxmLgogICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0TmV4dE1hdGNoaW5nQWN0aXZpdHkoSW50ZW50IGludGVudCwgQnVuZGxlIG9wdGlvbnMpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBzdGFydE5leHRNYXRjaGluZ0FjdGl2aXR5KEBOb25OdWxsIEludGVudCBpbnRlbnQsIEBOdWxsYWJsZSBCdW5kbGUgb3B0aW9ucykgewogICAgICAgICBpZiAobVBhcmVudCA9PSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGludGVudC5taWdyYXRlRXh0cmFTdHJlYW1Ub0NsaXBEYXRhKCk7CkBAIC0zODc3LDcgKzM5NjQsNyBAQAogICAgICAqIEBzZWUgI3N0YXJ0QWN0aXZpdHkKICAgICAgKiBAc2VlICNzdGFydEFjdGl2aXR5Rm9yUmVzdWx0CiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRBY3Rpdml0eUZyb21DaGlsZChBY3Rpdml0eSBjaGlsZCwgSW50ZW50IGludGVudCwKKyAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXR5RnJvbUNoaWxkKEBOb25OdWxsIEFjdGl2aXR5IGNoaWxkLCBJbnRlbnQgaW50ZW50LAogICAgICAgICAgICAgaW50IHJlcXVlc3RDb2RlKSB7CiAgICAgICAgIHN0YXJ0QWN0aXZpdHlGcm9tQ2hpbGQoY2hpbGQsIGludGVudCwgcmVxdWVzdENvZGUsIG51bGwpOwogICAgIH0KQEAgLTM5MDEsOCArMzk4OCw4IEBACiAgICAgICogQHNlZSAjc3RhcnRBY3Rpdml0eSAKICAgICAgKiBAc2VlICNzdGFydEFjdGl2aXR5Rm9yUmVzdWx0IAogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHlGcm9tQ2hpbGQoQWN0aXZpdHkgY2hpbGQsIEludGVudCBpbnRlbnQsIAotICAgICAgICAgICAgaW50IHJlcXVlc3RDb2RlLCBCdW5kbGUgb3B0aW9ucykgeworICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHlGcm9tQ2hpbGQoQE5vbk51bGwgQWN0aXZpdHkgY2hpbGQsIEludGVudCBpbnRlbnQsCisgICAgICAgICAgICBpbnQgcmVxdWVzdENvZGUsIEBOdWxsYWJsZSBCdW5kbGUgb3B0aW9ucykgewogICAgICAgICBJbnN0cnVtZW50YXRpb24uQWN0aXZpdHlSZXN1bHQgYXIgPQogICAgICAgICAgICAgbUluc3RydW1lbnRhdGlvbi5leGVjU3RhcnRBY3Rpdml0eSgKICAgICAgICAgICAgICAgICB0aGlzLCBtTWFpblRocmVhZC5nZXRBcHBsaWNhdGlvblRocmVhZCgpLCBtVG9rZW4sIGNoaWxkLApAQCAtMzkyNyw3ICs0MDE0LDcgQEAKICAgICAgKiBAc2VlIEZyYWdtZW50I3N0YXJ0QWN0aXZpdHkKICAgICAgKiBAc2VlIEZyYWdtZW50I3N0YXJ0QWN0aXZpdHlGb3JSZXN1bHQKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXR5RnJvbUZyYWdtZW50KEZyYWdtZW50IGZyYWdtZW50LCBJbnRlbnQgaW50ZW50LCAKKyAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXR5RnJvbUZyYWdtZW50KEBOb25OdWxsIEZyYWdtZW50IGZyYWdtZW50LCBJbnRlbnQgaW50ZW50LAogICAgICAgICAgICAgaW50IHJlcXVlc3RDb2RlKSB7CiAgICAgICAgIHN0YXJ0QWN0aXZpdHlGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIGludGVudCwgcmVxdWVzdENvZGUsIG51bGwpOwogICAgIH0KQEAgLTM5NTIsOCArNDAzOSw4IEBACiAgICAgICogQHNlZSBGcmFnbWVudCNzdGFydEFjdGl2aXR5IAogICAgICAqIEBzZWUgRnJhZ21lbnQjc3RhcnRBY3Rpdml0eUZvclJlc3VsdCAKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXR5RnJvbUZyYWdtZW50KEZyYWdtZW50IGZyYWdtZW50LCBJbnRlbnQgaW50ZW50LCAKLSAgICAgICAgICAgIGludCByZXF1ZXN0Q29kZSwgQnVuZGxlIG9wdGlvbnMpIHsKKyAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXR5RnJvbUZyYWdtZW50KEBOb25OdWxsIEZyYWdtZW50IGZyYWdtZW50LCBJbnRlbnQgaW50ZW50LAorICAgICAgICAgICAgaW50IHJlcXVlc3RDb2RlLCBATnVsbGFibGUgQnVuZGxlIG9wdGlvbnMpIHsKICAgICAgICAgSW5zdHJ1bWVudGF0aW9uLkFjdGl2aXR5UmVzdWx0IGFyID0KICAgICAgICAgICAgIG1JbnN0cnVtZW50YXRpb24uZXhlY1N0YXJ0QWN0aXZpdHkoCiAgICAgICAgICAgICAgICAgdGhpcywgbU1haW5UaHJlYWQuZ2V0QXBwbGljYXRpb25UaHJlYWQoKSwgbVRva2VuLCBmcmFnbWVudCwKQEAgLTM5ODUsNyArNDA3Miw3IEBACiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnRJbnRlbnRTZW5kZXJGcm9tQ2hpbGQoQWN0aXZpdHkgY2hpbGQsIEludGVudFNlbmRlciBpbnRlbnQsCiAgICAgICAgICAgICBpbnQgcmVxdWVzdENvZGUsIEludGVudCBmaWxsSW5JbnRlbnQsIGludCBmbGFnc01hc2ssIGludCBmbGFnc1ZhbHVlcywKLSAgICAgICAgICAgIGludCBleHRyYUZsYWdzLCBCdW5kbGUgb3B0aW9ucykKKyAgICAgICAgICAgIGludCBleHRyYUZsYWdzLCBATnVsbGFibGUgQnVuZGxlIG9wdGlvbnMpCiAgICAgICAgICAgICB0aHJvd3MgSW50ZW50U2VuZGVyLlNlbmRJbnRlbnRFeGNlcHRpb24gewogICAgICAgICBzdGFydEludGVudFNlbmRlckZvclJlc3VsdElubmVyKGludGVudCwgcmVxdWVzdENvZGUsIGZpbGxJbkludGVudCwKICAgICAgICAgICAgICAgICBmbGFnc01hc2ssIGZsYWdzVmFsdWVzLCBjaGlsZCwgb3B0aW9ucyk7CkBAIC00MDg0LDYgKzQxNzEsNyBAQAogICAgICAqIEByZXR1cm4gVGhlIHBhY2thZ2Ugb2YgdGhlIGFjdGl2aXR5IHRoYXQgd2lsbCByZWNlaXZlIHlvdXIKICAgICAgKiAgICAgICAgIHJlcGx5LCBvciBudWxsIGlmIG5vbmUuCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgcHVibGljIFN0cmluZyBnZXRDYWxsaW5nUGFja2FnZSgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLmdldENhbGxpbmdQYWNrYWdlKG1Ub2tlbik7CkBAIC00MTA2LDYgKzQxOTQsNyBAQAogICAgICAqIEByZXR1cm4gVGhlIENvbXBvbmVudE5hbWUgb2YgdGhlIGFjdGl2aXR5IHRoYXQgd2lsbCByZWNlaXZlIHlvdXIKICAgICAgKiAgICAgICAgIHJlcGx5LCBvciBudWxsIGlmIG5vbmUuCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgcHVibGljIENvbXBvbmVudE5hbWUgZ2V0Q2FsbGluZ0FjdGl2aXR5KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuZ2V0Q2FsbGluZ0FjdGl2aXR5KG1Ub2tlbik7CkBAIC00Mjk4LDcgKzQzODcsNyBAQAogICAgICAqIEBwYXJhbSByZXF1ZXN0Q29kZSBSZXF1ZXN0IGNvZGUgdGhhdCBoYWQgYmVlbiB1c2VkIHRvIHN0YXJ0IHRoZQogICAgICAqICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eS4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBmaW5pc2hBY3Rpdml0eUZyb21DaGlsZChBY3Rpdml0eSBjaGlsZCwgaW50IHJlcXVlc3RDb2RlKSB7CisgICAgcHVibGljIHZvaWQgZmluaXNoQWN0aXZpdHlGcm9tQ2hpbGQoQE5vbk51bGwgQWN0aXZpdHkgY2hpbGQsIGludCByZXF1ZXN0Q29kZSkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKQogICAgICAgICAgICAgICAgIC5maW5pc2hTdWJBY3Rpdml0eShtVG9rZW4sIGNoaWxkLm1FbWJlZGRlZElELCByZXF1ZXN0Q29kZSk7CkBAIC00MzU5LDggKzQ0NDgsOCBAQAogICAgICAqIAogICAgICAqIEBzZWUgUGVuZGluZ0ludGVudAogICAgICAqLwotICAgIHB1YmxpYyBQZW5kaW5nSW50ZW50IGNyZWF0ZVBlbmRpbmdSZXN1bHQoaW50IHJlcXVlc3RDb2RlLCBJbnRlbnQgZGF0YSwKLSAgICAgICAgICAgIGludCBmbGFncykgeworICAgIHB1YmxpYyBQZW5kaW5nSW50ZW50IGNyZWF0ZVBlbmRpbmdSZXN1bHQoaW50IHJlcXVlc3RDb2RlLCBATm9uTnVsbCBJbnRlbnQgZGF0YSwKKyAgICAgICAgICAgIEBQZW5kaW5nSW50ZW50LkZsYWdzIGludCBmbGFncykgewogICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBnZXRQYWNrYWdlTmFtZSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZGF0YS5wcmVwYXJlVG9MZWF2ZVByb2Nlc3MoKTsKQEAgLTQzODcsNyArNDQ3Niw3IEBACiAgICAgICogQHBhcmFtIHJlcXVlc3RlZE9yaWVudGF0aW9uIEFuIG9yaWVudGF0aW9uIGNvbnN0YW50IGFzIHVzZWQgaW4KICAgICAgKiB7QGxpbmsgQWN0aXZpdHlJbmZvI3NjcmVlbk9yaWVudGF0aW9uIEFjdGl2aXR5SW5mby5zY3JlZW5PcmllbnRhdGlvbn0uCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0UmVxdWVzdGVkT3JpZW50YXRpb24oaW50IHJlcXVlc3RlZE9yaWVudGF0aW9uKSB7CisgICAgcHVibGljIHZvaWQgc2V0UmVxdWVzdGVkT3JpZW50YXRpb24oQEFjdGl2aXR5SW5mby5TY3JlZW5PcmllbnRhdGlvbiBpbnQgcmVxdWVzdGVkT3JpZW50YXRpb24pIHsKICAgICAgICAgaWYgKG1QYXJlbnQgPT0gbnVsbCkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLnNldFJlcXVlc3RlZE9yaWVudGF0aW9uKApAQCAtNDQwOSw2ICs0NDk4LDcgQEAKICAgICAgKiBAcmV0dXJuIFJldHVybnMgYW4gb3JpZW50YXRpb24gY29uc3RhbnQgYXMgdXNlZCBpbgogICAgICAqIHtAbGluayBBY3Rpdml0eUluZm8jc2NyZWVuT3JpZW50YXRpb24gQWN0aXZpdHlJbmZvLnNjcmVlbk9yaWVudGF0aW9ufS4KICAgICAgKi8KKyAgICBAQWN0aXZpdHlJbmZvLlNjcmVlbk9yaWVudGF0aW9uCiAgICAgcHVibGljIGludCBnZXRSZXF1ZXN0ZWRPcmllbnRhdGlvbigpIHsKICAgICAgICAgaWYgKG1QYXJlbnQgPT0gbnVsbCkgewogICAgICAgICAgICAgdHJ5IHsKQEAgLTQ0ODAsNiArNDU3MCw3IEBACiAgICAgICogCiAgICAgICogQHJldHVybiBUaGUgbG9jYWwgY2xhc3MgbmFtZS4KICAgICAgKi8KKyAgICBATm9uTnVsbAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYWxDbGFzc05hbWUoKSB7CiAgICAgICAgIGZpbmFsIFN0cmluZyBwa2cgPSBnZXRQYWNrYWdlTmFtZSgpOwogICAgICAgICBmaW5hbCBTdHJpbmcgY2xzID0gbUNvbXBvbmVudC5nZXRDbGFzc05hbWUoKTsKQEAgLTQ1MjUsOSArNDYxNiw5IEBACiAgICAgICAgIAogICAgICAgICBtU2VhcmNoTWFuYWdlciA9IG5ldyBTZWFyY2hNYW5hZ2VyKHRoaXMsIG51bGwpOwogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgZ2V0U3lzdGVtU2VydmljZShTdHJpbmcgbmFtZSkgeworICAgIHB1YmxpYyBPYmplY3QgZ2V0U3lzdGVtU2VydmljZShAU2VydmljZU5hbWUgQE5vbk51bGwgU3RyaW5nIG5hbWUpIHsKICAgICAgICAgaWYgKGdldEJhc2VDb250ZXh0KCkgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgIlN5c3RlbSBzZXJ2aWNlcyBub3QgYXZhaWxhYmxlIHRvIEFjdGl2aXRpZXMgYmVmb3JlIG9uQ3JlYXRlKCkiKTsKQEAgLTQ1NjcsNiArNDY1OCwxNyBAQAogICAgICAgICBzZXRUaXRsZShnZXRUZXh0KHRpdGxlSWQpKTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBDaGFuZ2UgdGhlIGNvbG9yIG9mIHRoZSB0aXRsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY3Rpdml0eS4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIHN0YXJ0aW5nIGluIEFQSSBMZXZlbCAxMSBhbmQgcmVwbGFjZWQgYnkgYWN0aW9uCisgICAgICogYmFyIHN0eWxlcy4gRm9yIGluZm9ybWF0aW9uIG9uIHN0eWxpbmcgdGhlIEFjdGlvbiBCYXIsIHJlYWQgdGhlIDxhCisgICAgICogaHJlZj0ie0Bkb2NSb290fSBndWlkZS90b3BpY3MvdWkvYWN0aW9uYmFyLmh0bWwiPkFjdGlvbiBCYXI8L2E+IGRldmVsb3BlcgorICAgICAqIGd1aWRlLgorICAgICAqCisgICAgICogQGRlcHJlY2F0ZWQgVXNlIGFjdGlvbiBiYXIgc3R5bGVzIGluc3RlYWQuCisgICAgICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgdm9pZCBzZXRUaXRsZUNvbG9yKGludCB0ZXh0Q29sb3IpIHsKICAgICAgICAgbVRpdGxlQ29sb3IgPSB0ZXh0Q29sb3I7CiAgICAgICAgIG9uVGl0bGVDaGFuZ2VkKG1UaXRsZSwgdGV4dENvbG9yKTsKQEAgLTQ2ODksNyArNDc5MSw3IEBACiAKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBzdWdnZXN0ZWQgYXVkaW8gc3RyZWFtIHdob3NlIHZvbHVtZSBzaG91bGQgYmUgY2hhbmdlZCBieSB0aGUKLSAgICAgKiBoYXJ3ZGFyZSB2b2x1bWUgY29udHJvbHMuCisgICAgICogaGFyZHdhcmUgdm9sdW1lIGNvbnRyb2xzLgogICAgICAqIAogICAgICAqIEByZXR1cm4gVGhlIHN1Z2dlc3RlZCBhdWRpbyBzdHJlYW0gdHlwZSB3aG9zZSB2b2x1bWUgc2hvdWxkIGJlIGNoYW5nZWQgYnkKICAgICAgKiAgICAgICAgIHRoZSBoYXJkd2FyZSB2b2x1bWUgY29udHJvbHMuCkBAIC00NzI1LDYgKzQ4MjcsNyBAQAogICAgICAqIEBzZWUgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyI2NyZWF0ZVZpZXcKICAgICAgKiBAc2VlIGFuZHJvaWQudmlldy5XaW5kb3cjZ2V0TGF5b3V0SW5mbGF0ZXIKICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBwdWJsaWMgVmlldyBvbkNyZWF0ZVZpZXcoU3RyaW5nIG5hbWUsIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KQEAgLTQ5ODMsNiArNTA4Niw3IEBACiAgICAgICoKICAgICAgKiBAc2VlIEFjdGlvbk1vZGUKICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBwdWJsaWMgQWN0aW9uTW9kZSBzdGFydEFjdGlvbk1vZGUoQWN0aW9uTW9kZS5DYWxsYmFjayBjYWxsYmFjaykgewogICAgICAgICByZXR1cm4gbVdpbmRvdy5nZXREZWNvclZpZXcoKS5zdGFydEFjdGlvbk1vZGUoY2FsbGJhY2spOwogICAgIH0KQEAgLTQ5OTgsNiArNTEwMiw3IEBACiAgICAgICogQHJldHVybiBUaGUgbmV3IGFjdGlvbiBtb2RlLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGUgYWN0aXZpdHkgZG9lcyBub3Qgd2FudCB0bwogICAgICAqICAgICAgICAgcHJvdmlkZSBzcGVjaWFsIGhhbmRsaW5nIGZvciB0aGlzIGFjdGlvbiBtb2RlLiAoSXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uKQogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBBY3Rpb25Nb2RlIG9uV2luZG93U3RhcnRpbmdBY3Rpb25Nb2RlKEFjdGlvbk1vZGUuQ2FsbGJhY2sgY2FsbGJhY2spIHsKICAgICAgICAgaW5pdEFjdGlvbkJhcigpOwpAQCAtNTE0MSw2ICs1MjQ2LDcgQEAKICAgICAgKiBAcmV0dXJuIGEgbmV3IEludGVudCB0YXJnZXRpbmcgdGhlIGRlZmluZWQgcGFyZW50IG9mIHRoaXMgYWN0aXZpdHkgb3IgbnVsbCBpZgogICAgICAqICAgICAgICAgdGhlcmUgaXMgbm8gdmFsaWQgcGFyZW50LgogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIHB1YmxpYyBJbnRlbnQgZ2V0UGFyZW50QWN0aXZpdHlJbnRlbnQoKSB7CiAgICAgICAgIGZpbmFsIFN0cmluZyBwYXJlbnROYW1lID0gbUFjdGl2aXR5SW5mby5wYXJlbnRBY3Rpdml0eU5hbWU7CiAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShwYXJlbnROYW1lKSkgewpAQCAtNTE4Myw2ICs1Mjg5LDE2IEBACiAgICAgICAgICAgICBDaGFyU2VxdWVuY2UgdGl0bGUsIEFjdGl2aXR5IHBhcmVudCwgU3RyaW5nIGlkLAogICAgICAgICAgICAgTm9uQ29uZmlndXJhdGlvbkluc3RhbmNlcyBsYXN0Tm9uQ29uZmlndXJhdGlvbkluc3RhbmNlcywKICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY29uZmlnKSB7CisgICAgICAgIGF0dGFjaChjb250ZXh0LCBhVGhyZWFkLCBpbnN0ciwgdG9rZW4sIGlkZW50LCBhcHBsaWNhdGlvbiwgaW50ZW50LCBpbmZvLCB0aXRsZSwgcGFyZW50LCBpZCwKKyAgICAgICAgICAgICAgICBsYXN0Tm9uQ29uZmlndXJhdGlvbkluc3RhbmNlcywgY29uZmlnLCBudWxsKTsKKyAgICB9CisKKyAgICBmaW5hbCB2b2lkIGF0dGFjaChDb250ZXh0IGNvbnRleHQsIEFjdGl2aXR5VGhyZWFkIGFUaHJlYWQsCisgICAgICAgICAgICBJbnN0cnVtZW50YXRpb24gaW5zdHIsIElCaW5kZXIgdG9rZW4sIGludCBpZGVudCwKKyAgICAgICAgICAgIEFwcGxpY2F0aW9uIGFwcGxpY2F0aW9uLCBJbnRlbnQgaW50ZW50LCBBY3Rpdml0eUluZm8gaW5mbywKKyAgICAgICAgICAgIENoYXJTZXF1ZW5jZSB0aXRsZSwgQWN0aXZpdHkgcGFyZW50LCBTdHJpbmcgaWQsCisgICAgICAgICAgICBOb25Db25maWd1cmF0aW9uSW5zdGFuY2VzIGxhc3ROb25Db25maWd1cmF0aW9uSW5zdGFuY2VzLAorICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBjb25maWcsIEJ1bmRsZSBvcHRpb25zKSB7CiAgICAgICAgIGF0dGFjaEJhc2VDb250ZXh0KGNvbnRleHQpOwogCiAgICAgICAgIG1GcmFnbWVudHMuYXR0YWNoQWN0aXZpdHkodGhpcywgbUNvbnRhaW5lciwgbnVsbCk7CkBAIC01MjE5LDYgKzUzMzUsNyBAQAogICAgICAgICAgICAgbVdpbmRvdy5zZXRDb250YWluZXIobVBhcmVudC5nZXRXaW5kb3coKSk7CiAgICAgICAgIH0KICAgICAgICAgbVdpbmRvd01hbmFnZXIgPSBtV2luZG93LmdldFdpbmRvd01hbmFnZXIoKTsKKyAgICAgICAgbVdpbmRvdy5zZXRUcmFuc2l0aW9uT3B0aW9ucyhvcHRpb25zKTsKICAgICAgICAgbUN1cnJlbnRDb25maWcgPSBjb25maWc7CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlNYW5hZ2VyLmphdmEKaW5kZXggYzg3N2NkMy4uN2NhMzQ1OSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5TWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXIuamF2YQpAQCAtMTI4OSwxNSArMTI4OSwxMDYgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBJbmZvcm1hdGlvbiB5b3UgY2FuIHJldHJpZXZlIGFib3V0IHRoZSBXaW5kb3dNYW5hZ2VyIFN0YWNrQm94IGhpZXJhcmNoeS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhY2tCb3hJbmZvIGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CisgICAgICAgIHB1YmxpYyBpbnQgc3RhY2tCb3hJZDsKKyAgICAgICAgcHVibGljIGZsb2F0IHdlaWdodDsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gdmVydGljYWw7CisgICAgICAgIHB1YmxpYyBSZWN0IGJvdW5kczsKKyAgICAgICAgcHVibGljIFN0YWNrQm94SW5mb1tdIGNoaWxkcmVuOworICAgICAgICBwdWJsaWMgaW50IHN0YWNrSWQ7CisgICAgICAgIHB1YmxpYyBTdGFja0luZm8gc3RhY2s7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIGRlc3QsIGludCBmbGFncykgeworICAgICAgICAgICAgZGVzdC53cml0ZUludChzdGFja0JveElkKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVGbG9hdCh3ZWlnaHQpOworICAgICAgICAgICAgZGVzdC53cml0ZUludCh2ZXJ0aWNhbCA/IDEgOiAwKTsKKyAgICAgICAgICAgIGJvdW5kcy53cml0ZVRvUGFyY2VsKGRlc3QsIGZsYWdzKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQoc3RhY2tJZCk7CisgICAgICAgICAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNoaWxkcmVuWzBdLndyaXRlVG9QYXJjZWwoZGVzdCwgZmxhZ3MpOworICAgICAgICAgICAgICAgIGNoaWxkcmVuWzFdLndyaXRlVG9QYXJjZWwoZGVzdCwgZmxhZ3MpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGFjay53cml0ZVRvUGFyY2VsKGRlc3QsIGZsYWdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHJlYWRGcm9tUGFyY2VsKFBhcmNlbCBzb3VyY2UpIHsKKyAgICAgICAgICAgIHN0YWNrQm94SWQgPSBzb3VyY2UucmVhZEludCgpOworICAgICAgICAgICAgd2VpZ2h0ID0gc291cmNlLnJlYWRGbG9hdCgpOworICAgICAgICAgICAgdmVydGljYWwgPSBzb3VyY2UucmVhZEludCgpID09IDE7CisgICAgICAgICAgICBib3VuZHMgPSBSZWN0LkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChzb3VyY2UpOworICAgICAgICAgICAgc3RhY2tJZCA9IHNvdXJjZS5yZWFkSW50KCk7CisgICAgICAgICAgICBpZiAoc3RhY2tJZCA9PSAtMSkgeworICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gbmV3IFN0YWNrQm94SW5mb1syXTsKKyAgICAgICAgICAgICAgICBjaGlsZHJlblswXSA9IFN0YWNrQm94SW5mby5DUkVBVE9SLmNyZWF0ZUZyb21QYXJjZWwoc291cmNlKTsKKyAgICAgICAgICAgICAgICBjaGlsZHJlblsxXSA9IFN0YWNrQm94SW5mby5DUkVBVE9SLmNyZWF0ZUZyb21QYXJjZWwoc291cmNlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhY2sgPSBTdGFja0luZm8uQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsKHNvdXJjZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENyZWF0b3I8U3RhY2tCb3hJbmZvPiBDUkVBVE9SID0KKyAgICAgICAgICAgICAgICBuZXcgQ3JlYXRvcjxBY3Rpdml0eU1hbmFnZXIuU3RhY2tCb3hJbmZvPigpIHsKKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgU3RhY2tCb3hJbmZvIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIHNvdXJjZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tCb3hJbmZvKHNvdXJjZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFN0YWNrQm94SW5mb1tdIG5ld0FycmF5KGludCBzaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0JveEluZm9bc2l6ZV07CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgcHVibGljIFN0YWNrQm94SW5mbygpIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdGFja0JveEluZm8oUGFyY2VsIHNvdXJjZSkgeworICAgICAgICAgICAgcmVhZEZyb21QYXJjZWwoc291cmNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoU3RyaW5nIHByZWZpeCkgeworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKDI1Nik7CisgICAgICAgICAgICBzYi5hcHBlbmQocHJlZml4KTsgc2IuYXBwZW5kKCJCb3ggaWQ9IiArIHN0YWNrQm94SWQpOyBzYi5hcHBlbmQoIiB3ZWlnaHQ9IiArIHdlaWdodCk7CisgICAgICAgICAgICBzYi5hcHBlbmQoIiB2ZXJ0aWNhbD0iICsgdmVydGljYWwpOyBzYi5hcHBlbmQoIiBib3VuZHM9IiArIGJvdW5kcy50b1Nob3J0U3RyaW5nKCkpOworICAgICAgICAgICAgc2IuYXBwZW5kKCJcbiIpOworICAgICAgICAgICAgaWYgKGNoaWxkcmVuICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQocHJlZml4KTsgc2IuYXBwZW5kKCJGaXJzdCBjaGlsZD1cbiIpOworICAgICAgICAgICAgICAgIHNiLmFwcGVuZChjaGlsZHJlblswXS50b1N0cmluZyhwcmVmaXggKyAiICAiKSk7CisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKHByZWZpeCk7IHNiLmFwcGVuZCgiU2Vjb25kIGNoaWxkPVxuIik7CisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKGNoaWxkcmVuWzFdLnRvU3RyaW5nKHByZWZpeCArICIgICIpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKHByZWZpeCk7IHNiLmFwcGVuZCgiU3RhY2s9XG4iKTsKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoc3RhY2sudG9TdHJpbmcocHJlZml4ICsgIiAgIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiB0b1N0cmluZygiIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKICAgICAgKiBJbmZvcm1hdGlvbiB5b3UgY2FuIHJldHJpZXZlIGFib3V0IGFuIEFjdGl2aXR5U3RhY2sgaW4gdGhlIHN5c3RlbS4KICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhY2tJbmZvIGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CiAgICAgICAgIHB1YmxpYyBpbnQgc3RhY2tJZDsKLSAgICAgICAgcHVibGljIFJlY3QgYm91bmRzID0gbmV3IFJlY3QoKTsKKyAgICAgICAgcHVibGljIFJlY3QgYm91bmRzOwogICAgICAgICBwdWJsaWMgaW50W10gdGFza0lkczsKICAgICAgICAgcHVibGljIFN0cmluZ1tdIHRhc2tOYW1lczsKLSAgICAgICAgcHVibGljIGludCBkaXNwbGF5SWQ7CiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKQEAgLTEzMTMsNyArMTQwNCw2IEBACiAgICAgICAgICAgICBkZXN0LndyaXRlSW50KGJvdW5kcy5ib3R0b20pOwogICAgICAgICAgICAgZGVzdC53cml0ZUludEFycmF5KHRhc2tJZHMpOwogICAgICAgICAgICAgZGVzdC53cml0ZVN0cmluZ0FycmF5KHRhc2tOYW1lcyk7Ci0gICAgICAgICAgICBkZXN0LndyaXRlSW50KGRpc3BsYXlJZCk7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgdm9pZCByZWFkRnJvbVBhcmNlbChQYXJjZWwgc291cmNlKSB7CkBAIC0xMzIyLDcgKzE0MTIsNiBAQAogICAgICAgICAgICAgICAgICAgICBzb3VyY2UucmVhZEludCgpLCBzb3VyY2UucmVhZEludCgpLCBzb3VyY2UucmVhZEludCgpLCBzb3VyY2UucmVhZEludCgpKTsKICAgICAgICAgICAgIHRhc2tJZHMgPSBzb3VyY2UuY3JlYXRlSW50QXJyYXkoKTsKICAgICAgICAgICAgIHRhc2tOYW1lcyA9IHNvdXJjZS5jcmVhdGVTdHJpbmdBcnJheSgpOwotICAgICAgICAgICAgZGlzcGxheUlkID0gc291cmNlLnJlYWRJbnQoKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ3JlYXRvcjxTdGFja0luZm8+IENSRUFUT1IgPSBuZXcgQ3JlYXRvcjxTdGFja0luZm8+KCkgewpAQCAtMTM0Niw5ICsxNDM1LDcgQEAKICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZyhTdHJpbmcgcHJlZml4KSB7CiAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoMjU2KTsKICAgICAgICAgICAgIHNiLmFwcGVuZChwcmVmaXgpOyBzYi5hcHBlbmQoIlN0YWNrIGlkPSIpOyBzYi5hcHBlbmQoc3RhY2tJZCk7Ci0gICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiIGJvdW5kcz0iKTsgc2IuYXBwZW5kKGJvdW5kcy50b1Nob3J0U3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIiBkaXNwbGF5SWQ9Iik7IHNiLmFwcGVuZChkaXNwbGF5SWQpOwotICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIlxuIik7CisgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiIGJvdW5kcz0iKTsgc2IuYXBwZW5kKGJvdW5kcy50b1Nob3J0U3RyaW5nKCkpOyBzYi5hcHBlbmQoIlxuIik7CiAgICAgICAgICAgICBwcmVmaXggPSBwcmVmaXggKyAiICAiOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXNrSWRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKHByZWZpeCk7IHNiLmFwcGVuZCgidGFza0lkPSIpOyBzYi5hcHBlbmQodGFza0lkc1tpXSk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmphdmEKaW5kZXggZjBjNGM5My4uNzQyNjZjYyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5TWFuYWdlck5hdGl2ZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXJOYXRpdmUuamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQuYXBwOwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tCb3hJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JSW50ZW50UmVjZWl2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklJbnRlbnRTZW5kZXI7CkBAIC0zMSw3ICszMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlVzZXJJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwpAQCAtNjE1LDcgKzYxNCwxMCBAQAogICAgICAgICBjYXNlIENSRUFURV9TVEFDS19UUkFOU0FDVElPTjogewogICAgICAgICAgICAgZGF0YS5lbmZvcmNlSW50ZXJmYWNlKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CiAgICAgICAgICAgICBpbnQgdGFza0lkID0gZGF0YS5yZWFkSW50KCk7Ci0gICAgICAgICAgICBpbnQgcmVzID0gY3JlYXRlU3RhY2sodGFza0lkKTsKKyAgICAgICAgICAgIGludCByZWxhdGl2ZVN0YWNrSWQgPSBkYXRhLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGludCBwb3NpdGlvbiA9IGRhdGEucmVhZEludCgpOworICAgICAgICAgICAgZmxvYXQgd2VpZ2h0ID0gZGF0YS5yZWFkRmxvYXQoKTsKKyAgICAgICAgICAgIGludCByZXMgPSBjcmVhdGVTdGFjayh0YXNrSWQsIHJlbGF0aXZlU3RhY2tJZCwgcG9zaXRpb24sIHdlaWdodCk7CiAgICAgICAgICAgICByZXBseS53cml0ZU5vRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXBseS53cml0ZUludChyZXMpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02MzMsMjYgKzYzNSwyNSBAQAogCiAgICAgICAgIGNhc2UgUkVTSVpFX1NUQUNLX1RSQU5TQUNUSU9OOiB7CiAgICAgICAgICAgICBkYXRhLmVuZm9yY2VJbnRlcmZhY2UoSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIGludCBzdGFja0lkID0gZGF0YS5yZWFkSW50KCk7CisgICAgICAgICAgICBpbnQgc3RhY2tCb3hJZCA9IGRhdGEucmVhZEludCgpOwogICAgICAgICAgICAgZmxvYXQgd2VpZ2h0ID0gZGF0YS5yZWFkRmxvYXQoKTsKLSAgICAgICAgICAgIFJlY3QgciA9IFJlY3QuQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsKGRhdGEpOwotICAgICAgICAgICAgcmVzaXplU3RhY2soc3RhY2tJZCwgcik7CisgICAgICAgICAgICByZXNpemVTdGFja0JveChzdGFja0JveElkLCB3ZWlnaHQpOwogICAgICAgICAgICAgcmVwbHkud3JpdGVOb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIEdFVF9BTExfU1RBQ0tfSU5GT1NfVFJBTlNBQ1RJT046IHsKKyAgICAgICAgY2FzZSBHRVRfU1RBQ0tfQk9YRVNfVFJBTlNBQ1RJT046IHsKICAgICAgICAgICAgIGRhdGEuZW5mb3JjZUludGVyZmFjZShJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOwotICAgICAgICAgICAgTGlzdDxTdGFja0luZm8+IGxpc3QgPSBnZXRBbGxTdGFja0luZm9zKCk7CisgICAgICAgICAgICBMaXN0PFN0YWNrQm94SW5mbz4gbGlzdCA9IGdldFN0YWNrQm94ZXMoKTsKICAgICAgICAgICAgIHJlcGx5LndyaXRlTm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJlcGx5LndyaXRlVHlwZWRMaXN0KGxpc3QpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIEdFVF9TVEFDS19JTkZPX1RSQU5TQUNUSU9OOiB7CisgICAgICAgIGNhc2UgR0VUX1NUQUNLX0JPWF9JTkZPX1RSQU5TQUNUSU9OOiB7CiAgICAgICAgICAgICBkYXRhLmVuZm9yY2VJbnRlcmZhY2UoSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIGludCBzdGFja0lkID0gZGF0YS5yZWFkSW50KCk7Ci0gICAgICAgICAgICBTdGFja0luZm8gaW5mbyA9IGdldFN0YWNrSW5mbyhzdGFja0lkKTsKKyAgICAgICAgICAgIGludCBzdGFja0JveElkID0gZGF0YS5yZWFkSW50KCk7CisgICAgICAgICAgICBTdGFja0JveEluZm8gaW5mbyA9IGdldFN0YWNrQm94SW5mbyhzdGFja0JveElkKTsKICAgICAgICAgICAgIHJlcGx5LndyaXRlTm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIGlmIChpbmZvICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXBseS53cml0ZUludCgxKTsKQEAgLTI3MTQsMTIgKzI3MTUsMTYgQEAKICAgICAgICAgcmVwbHkucmVjeWNsZSgpOwogICAgIH0KICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGNyZWF0ZVN0YWNrKGludCB0YXNrSWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb24KKyAgICBwdWJsaWMgaW50IGNyZWF0ZVN0YWNrKGludCB0YXNrSWQsIGludCByZWxhdGl2ZVN0YWNrQm94SWQsIGludCBwb3NpdGlvbiwgZmxvYXQgd2VpZ2h0KQorICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CiAgICAgICAgIFBhcmNlbCByZXBseSA9IFBhcmNlbC5vYnRhaW4oKTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CiAgICAgICAgIGRhdGEud3JpdGVJbnQodGFza0lkKTsKKyAgICAgICAgZGF0YS53cml0ZUludChyZWxhdGl2ZVN0YWNrQm94SWQpOworICAgICAgICBkYXRhLndyaXRlSW50KHBvc2l0aW9uKTsKKyAgICAgICAgZGF0YS53cml0ZUZsb2F0KHdlaWdodCk7CiAgICAgICAgIG1SZW1vdGUudHJhbnNhY3QoQ1JFQVRFX1NUQUNLX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgMCk7CiAgICAgICAgIHJlcGx5LnJlYWRFeGNlcHRpb24oKTsKICAgICAgICAgaW50IHJlcyA9IHJlcGx5LnJlYWRJbnQoKTsKQEAgLTI3NDIsNDQgKzI3NDcsNDQgQEAKICAgICAgICAgcmVwbHkucmVjeWNsZSgpOwogICAgIH0KICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZXNpemVTdGFjayhpbnQgc3RhY2tCb3hJZCwgUmVjdCByKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCisgICAgcHVibGljIHZvaWQgcmVzaXplU3RhY2tCb3goaW50IHN0YWNrQm94SWQsIGZsb2F0IHdlaWdodCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CiAgICAgICAgIFBhcmNlbCByZXBseSA9IFBhcmNlbC5vYnRhaW4oKTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CiAgICAgICAgIGRhdGEud3JpdGVJbnQoc3RhY2tCb3hJZCk7Ci0gICAgICAgIHIud3JpdGVUb1BhcmNlbChkYXRhLCAwKTsKKyAgICAgICAgZGF0YS53cml0ZUZsb2F0KHdlaWdodCk7CiAgICAgICAgIG1SZW1vdGUudHJhbnNhY3QoUkVTSVpFX1NUQUNLX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgSUJpbmRlci5GTEFHX09ORVdBWSk7CiAgICAgICAgIHJlcGx5LnJlYWRFeGNlcHRpb24oKTsKICAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CiAgICAgICAgIHJlcGx5LnJlY3ljbGUoKTsKICAgICB9CiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8U3RhY2tJbmZvPiBnZXRBbGxTdGFja0luZm9zKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgorICAgIHB1YmxpYyBMaXN0PFN0YWNrQm94SW5mbz4gZ2V0U3RhY2tCb3hlcygpIHRocm93cyBSZW1vdGVFeGNlcHRpb24KICAgICB7CiAgICAgICAgIFBhcmNlbCBkYXRhID0gUGFyY2VsLm9idGFpbigpOwogICAgICAgICBQYXJjZWwgcmVwbHkgPSBQYXJjZWwub2J0YWluKCk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOwotICAgICAgICBtUmVtb3RlLnRyYW5zYWN0KEdFVF9BTExfU1RBQ0tfSU5GT1NfVFJBTlNBQ1RJT04sIGRhdGEsIHJlcGx5LCAwKTsKKyAgICAgICAgbVJlbW90ZS50cmFuc2FjdChHRVRfU1RBQ0tfQk9YRVNfVFJBTlNBQ1RJT04sIGRhdGEsIHJlcGx5LCAwKTsKICAgICAgICAgcmVwbHkucmVhZEV4Y2VwdGlvbigpOwotICAgICAgICBBcnJheUxpc3Q8U3RhY2tJbmZvPiBsaXN0ID0gcmVwbHkuY3JlYXRlVHlwZWRBcnJheUxpc3QoU3RhY2tJbmZvLkNSRUFUT1IpOworICAgICAgICBBcnJheUxpc3Q8U3RhY2tCb3hJbmZvPiBsaXN0ID0gcmVwbHkuY3JlYXRlVHlwZWRBcnJheUxpc3QoU3RhY2tCb3hJbmZvLkNSRUFUT1IpOwogICAgICAgICBkYXRhLnJlY3ljbGUoKTsKICAgICAgICAgcmVwbHkucmVjeWNsZSgpOwogICAgICAgICByZXR1cm4gbGlzdDsKICAgICB9CiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0YWNrSW5mbyBnZXRTdGFja0luZm8oaW50IHN0YWNrSWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb24KKyAgICBwdWJsaWMgU3RhY2tCb3hJbmZvIGdldFN0YWNrQm94SW5mbyhpbnQgc3RhY2tCb3hJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CiAgICAgICAgIFBhcmNlbCByZXBseSA9IFBhcmNlbC5vYnRhaW4oKTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7Ci0gICAgICAgIGRhdGEud3JpdGVJbnQoc3RhY2tJZCk7Ci0gICAgICAgIG1SZW1vdGUudHJhbnNhY3QoR0VUX1NUQUNLX0lORk9fVFJBTlNBQ1RJT04sIGRhdGEsIHJlcGx5LCAwKTsKKyAgICAgICAgZGF0YS53cml0ZUludChzdGFja0JveElkKTsKKyAgICAgICAgbVJlbW90ZS50cmFuc2FjdChHRVRfU1RBQ0tfQk9YX0lORk9fVFJBTlNBQ1RJT04sIGRhdGEsIHJlcGx5LCAwKTsKICAgICAgICAgcmVwbHkucmVhZEV4Y2VwdGlvbigpOwogICAgICAgICBpbnQgcmVzID0gcmVwbHkucmVhZEludCgpOwotICAgICAgICBTdGFja0luZm8gaW5mbyA9IG51bGw7CisgICAgICAgIFN0YWNrQm94SW5mbyBpbmZvID0gbnVsbDsKICAgICAgICAgaWYgKHJlcyAhPSAwKSB7Ci0gICAgICAgICAgICBpbmZvID0gU3RhY2tJbmZvLkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChyZXBseSk7CisgICAgICAgICAgICBpbmZvID0gU3RhY2tCb3hJbmZvLkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChyZXBseSk7CiAgICAgICAgIH0KICAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CiAgICAgICAgIHJlcGx5LnJlY3ljbGUoKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU9wdGlvbnMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU9wdGlvbnMuamF2YQppbmRleCA4N2IxZTI0Li41ODJjZTNjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlPcHRpb25zLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5T3B0aW9ucy5qYXZhCkBAIC0yMiw2ICsyMiw4IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSVJlbW90ZUNhbGxiYWNrOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIAogLyoqCkBAIC0zMCw2ICszMiw4IEBACiAgKiBDb250ZXh0LnN0YXJ0QWN0aXZpdHkoSW50ZW50LCBCdW5kbGUpfSBhbmQgcmVsYXRlZCBtZXRob2RzLgogICovCiBwdWJsaWMgY2xhc3MgQWN0aXZpdHlPcHRpb25zIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkFjdGl2aXR5T3B0aW9ucyI7CisKICAgICAvKioKICAgICAgKiBUaGUgcGFja2FnZSBuYW1lIHRoYXQgY3JlYXRlZCB0aGUgb3B0aW9ucy4KICAgICAgKiBAaGlkZQpAQCAtOTAsNiArOTQsMzUgQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQU5JTV9TVEFSVF9MSVNURU5FUiA9ICJhbmRyb2lkOmFuaW1TdGFydExpc3RlbmVyIjsKIAorICAgIC8qKgorICAgICAqIEEgc3RyaW5nIGFycmF5IG9mIG5hbWVzIGZvciB0aGUgZGVzdGluYXRpb24gc2NlbmUuIFRoaXMgZGVmaW5lcyBhbiBBUEkgaW4gdGhlIHNhbWUKKyAgICAgKiB3YXkgdGhhdCBpbnRlbnQgYWN0aW9uIG9yIGV4dHJhIG5hbWVzIGRvIGFuZCBzaG91bGQgZm9sbG93IGEgc2ltaWxhciBjb252ZW50aW9uOgorICAgICAqICJjb20uZXhhbXBsZS5zY2VuZS5GT08iCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9ERVNUX1NDRU5FX05BTUVTID0gImFuZHJvaWQ6ZGVzdFNjZW5lTmFtZXMiOworCisgICAgLyoqCisgICAgICogQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgZGVzdGluYXRpb24gc2NlbmUgbmFtZSB0aGF0IHdhcyBjaG9zZW4gYnkgdGhlIHRhcmdldC4KKyAgICAgKiBVc2VkIGJ5IHtAbGluayBPblNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lcn0uCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfREVTVF9TQ0VORV9OQU1FX0NIT1NFTiA9ICJhbmRyb2lkOmRlc3RTY2VuZU5hbWVDaG9zZW4iOworCisgICAgLyoqCisgICAgICogQ2FsbGJhY2sgZm9yIHdoZW4gc2NlbmUgdHJhbnNpdGlvbiBpcyBzdGFydGVkLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1NDRU5FX1RSQU5TSVRJT05fU1RBUlRfTElTVEVORVIgPQorICAgICAgICAgICAgImFuZHJvaWQ6c2NlbmVUcmFuc2l0aW9uU3RhcnRMaXN0ZW5lciI7CisKKyAgICAvKioKKyAgICAgKiBBcmd1bWVudHMgZm9yIHRoZSBzY2VuZSB0cmFuc2l0aW9uIGFib3V0IHRvIGJlZ2luLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1NDRU5FX1RSQU5TSVRJT05fQVJHUyA9ICJhbmRyb2lkOnNjZW5lVHJhbnNpdGlvbkFyZ3MiOworCiAgICAgLyoqIEBoaWRlICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQU5JTV9OT05FID0gMDsKICAgICAvKiogQGhpZGUgKi8KQEAgLTEwMCw2ICsxMzMsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFOSU1fVEhVTUJOQUlMX1NDQUxFX1VQID0gMzsKICAgICAvKiogQGhpZGUgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTklNX1RIVU1CTkFJTF9TQ0FMRV9ET1dOID0gNDsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTklNX1NDRU5FX1RSQU5TSVRJT04gPSA1OwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgbVBhY2thZ2VOYW1lOwogICAgIHByaXZhdGUgaW50IG1BbmltYXRpb25UeXBlID0gQU5JTV9OT05FOwpAQCAtMTEwLDcgKzE0NSwxMCBAQAogICAgIHByaXZhdGUgaW50IG1TdGFydFk7CiAgICAgcHJpdmF0ZSBpbnQgbVN0YXJ0V2lkdGg7CiAgICAgcHJpdmF0ZSBpbnQgbVN0YXJ0SGVpZ2h0OworICAgIHByaXZhdGUgU3RyaW5nW10gbURlc3RTY2VuZU5hbWVzOworICAgIHByaXZhdGUgQnVuZGxlIG1UcmFuc2l0aW9uQXJnczsKICAgICBwcml2YXRlIElSZW1vdGVDYWxsYmFjayBtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyOworICAgIHByaXZhdGUgSVJlbW90ZUNhbGxiYWNrIG1TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXI7CiAKICAgICAvKioKICAgICAgKiBDcmVhdGUgYW4gQWN0aXZpdHlPcHRpb25zIHNwZWNpZnlpbmcgYSBjdXN0b20gYW5pbWF0aW9uIHRvIHJ1biB3aGVuCkBAIC0xNTYsMTEgKzE5NCwxMiBAQAogICAgICAgICBvcHRzLm1BbmltYXRpb25UeXBlID0gQU5JTV9DVVNUT007CiAgICAgICAgIG9wdHMubUN1c3RvbUVudGVyUmVzSWQgPSBlbnRlclJlc0lkOwogICAgICAgICBvcHRzLm1DdXN0b21FeGl0UmVzSWQgPSBleGl0UmVzSWQ7Ci0gICAgICAgIG9wdHMuc2V0TGlzdGVuZXIoaGFuZGxlciwgbGlzdGVuZXIpOworICAgICAgICBvcHRzLnNldE9uQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyKGhhbmRsZXIsIGxpc3RlbmVyKTsKICAgICAgICAgcmV0dXJuIG9wdHM7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHNldExpc3RlbmVyKEhhbmRsZXIgaGFuZGxlciwgT25BbmltYXRpb25TdGFydGVkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICBwcml2YXRlIHZvaWQgc2V0T25BbmltYXRpb25TdGFydGVkTGlzdGVuZXIoSGFuZGxlciBoYW5kbGVyLAorICAgICAgICAgICAgT25BbmltYXRpb25TdGFydGVkTGlzdGVuZXIgbGlzdGVuZXIpIHsKICAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGZpbmFsIEhhbmRsZXIgaCA9IGhhbmRsZXI7CiAgICAgICAgICAgICBmaW5hbCBPbkFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lciBmaW5hbExpc3RlbmVyID0gbGlzdGVuZXI7CkBAIC0xNzYsNiArMjE1LDI0IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgc2V0T25TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXIoSGFuZGxlciBoYW5kbGVyLAorICAgICAgICAgICAgT25TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIEhhbmRsZXIgaCA9IGhhbmRsZXI7CisgICAgICAgICAgICBmaW5hbCBPblNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lciBsID0gbGlzdGVuZXI7CisgICAgICAgICAgICBtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyID0gbmV3IElSZW1vdGVDYWxsYmFjay5TdHViKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBzZW5kUmVzdWx0KGZpbmFsIEJ1bmRsZSBkYXRhKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgaC5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsLm9uU2NlbmVUcmFuc2l0aW9uU3RhcnRlZChkYXRhICE9IG51bGwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5nZXRTdHJpbmcoS0VZX0RFU1RfU0NFTkVfTkFNRV9DSE9TRU4pIDogbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBDYWxsYmFjayBmb3IgdXNlIHdpdGgge0BsaW5rIEFjdGl2aXR5T3B0aW9ucyNtYWtlVGh1bWJuYWlsU2NhbGVVcEFuaW1hdGlvbn0KICAgICAgKiB0byBmaW5kIG91dCB3aGVuIHRoZSBnaXZlbiBhbmltYXRpb24gaGFzIHN0YXJ0ZWQgcnVubmluZy4KQEAgLTE4Niw2ICsyNDMsMTUgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBDYWxsYmFjayBmb3IgdXNlIHdpdGgge0BsaW5rIEFjdGl2aXR5T3B0aW9ucyNtYWtlU2NlbmVUcmFuc2l0aW9uQW5pbWF0aW9ufQorICAgICAqIHRvIGZpbmQgb3V0IHdoZW4gYSB0cmFuc2l0aW9uIGlzIGFib3V0IHRvIGJlZ2luLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIGludGVyZmFjZSBPblNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lciB7CisgICAgICAgIHZvaWQgb25TY2VuZVRyYW5zaXRpb25TdGFydGVkKFN0cmluZyBkZXN0U2NlbmVOYW1lKTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDcmVhdGUgYW4gQWN0aXZpdHlPcHRpb25zIHNwZWNpZnlpbmcgYW4gYW5pbWF0aW9uIHdoZXJlIHRoZSBuZXcKICAgICAgKiBhY3Rpdml0eSBpcyBzY2FsZWQgZnJvbSBhIHNtYWxsIG9yaWdpbmF0aW5nIGFyZWEgb2YgdGhlIHNjcmVlbiB0bwogICAgICAqIGl0cyBmaW5hbCBmdWxsIHJlcHJlc2VudGF0aW9uLgpAQCAtMjk4LDcgKzM2NCwyMyBAQAogICAgICAgICBzb3VyY2UuZ2V0TG9jYXRpb25PblNjcmVlbihwdHMpOwogICAgICAgICBvcHRzLm1TdGFydFggPSBwdHNbMF0gKyBzdGFydFg7CiAgICAgICAgIG9wdHMubVN0YXJ0WSA9IHB0c1sxXSArIHN0YXJ0WTsKLSAgICAgICAgb3B0cy5zZXRMaXN0ZW5lcihzb3VyY2UuZ2V0SGFuZGxlcigpLCBsaXN0ZW5lcik7CisgICAgICAgIG9wdHMuc2V0T25BbmltYXRpb25TdGFydGVkTGlzdGVuZXIoc291cmNlLmdldEhhbmRsZXIoKSwgbGlzdGVuZXIpOworICAgICAgICByZXR1cm4gb3B0czsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYW4gQWN0aXZpdHlPcHRpb25zIHNwZWNpZnlpbmcgYW4gYW5pbWF0aW9uIHdoZXJlIGFuIGFjdGl2aXR5IHdpbmRvdyBpcyBhc2tlZAorICAgICAqIHRvIHBlcmZvcm0gYW5pbWF0aW9ucyB3aXRoaW4gdGhlIHdpbmRvdyBjb250ZW50LgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEFjdGl2aXR5T3B0aW9ucyBtYWtlU2NlbmVUcmFuc2l0aW9uQW5pbWF0aW9uKFN0cmluZ1tdIGRlc3RTY2VuZU5hbWVzLAorICAgICAgICAgICAgQnVuZGxlIGFyZ3MsIE9uU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyIGxpc3RlbmVyLCBIYW5kbGVyIGhhbmRsZXIpIHsKKyAgICAgICAgQWN0aXZpdHlPcHRpb25zIG9wdHMgPSBuZXcgQWN0aXZpdHlPcHRpb25zKCk7CisgICAgICAgIG9wdHMubUFuaW1hdGlvblR5cGUgPSBBTklNX1NDRU5FX1RSQU5TSVRJT047CisgICAgICAgIG9wdHMubURlc3RTY2VuZU5hbWVzID0gZGVzdFNjZW5lTmFtZXM7CisgICAgICAgIG9wdHMubVRyYW5zaXRpb25BcmdzID0gYXJnczsKKyAgICAgICAgb3B0cy5zZXRPblNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lcihoYW5kbGVyLCBsaXN0ZW5lcik7CiAgICAgICAgIHJldHVybiBvcHRzOwogICAgIH0KIApAQCAtMzA5LDIzICszOTEsMzYgQEAKICAgICBwdWJsaWMgQWN0aXZpdHlPcHRpb25zKEJ1bmRsZSBvcHRzKSB7CiAgICAgICAgIG1QYWNrYWdlTmFtZSA9IG9wdHMuZ2V0U3RyaW5nKEtFWV9QQUNLQUdFX05BTUUpOwogICAgICAgICBtQW5pbWF0aW9uVHlwZSA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX1RZUEUpOwotICAgICAgICBpZiAobUFuaW1hdGlvblR5cGUgPT0gQU5JTV9DVVNUT00pIHsKLSAgICAgICAgICAgIG1DdXN0b21FbnRlclJlc0lkID0gb3B0cy5nZXRJbnQoS0VZX0FOSU1fRU5URVJfUkVTX0lELCAwKTsKLSAgICAgICAgICAgIG1DdXN0b21FeGl0UmVzSWQgPSBvcHRzLmdldEludChLRVlfQU5JTV9FWElUX1JFU19JRCwgMCk7Ci0gICAgICAgICAgICBtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyID0gSVJlbW90ZUNhbGxiYWNrLlN0dWIuYXNJbnRlcmZhY2UoCi0gICAgICAgICAgICAgICAgICAgIG9wdHMuZ2V0SUJpbmRlcihLRVlfQU5JTV9TVEFSVF9MSVNURU5FUikpOwotICAgICAgICB9IGVsc2UgaWYgKG1BbmltYXRpb25UeXBlID09IEFOSU1fU0NBTEVfVVApIHsKLSAgICAgICAgICAgIG1TdGFydFggPSBvcHRzLmdldEludChLRVlfQU5JTV9TVEFSVF9YLCAwKTsKLSAgICAgICAgICAgIG1TdGFydFkgPSBvcHRzLmdldEludChLRVlfQU5JTV9TVEFSVF9ZLCAwKTsKLSAgICAgICAgICAgIG1TdGFydFdpZHRoID0gb3B0cy5nZXRJbnQoS0VZX0FOSU1fU1RBUlRfV0lEVEgsIDApOwotICAgICAgICAgICAgbVN0YXJ0SGVpZ2h0ID0gb3B0cy5nZXRJbnQoS0VZX0FOSU1fU1RBUlRfSEVJR0hULCAwKTsKLSAgICAgICAgfSBlbHNlIGlmIChtQW5pbWF0aW9uVHlwZSA9PSBBTklNX1RIVU1CTkFJTF9TQ0FMRV9VUCB8fAotICAgICAgICAgICAgICAgIG1BbmltYXRpb25UeXBlID09IEFOSU1fVEhVTUJOQUlMX1NDQUxFX0RPV04pIHsKLSAgICAgICAgICAgIG1UaHVtYm5haWwgPSAoQml0bWFwKW9wdHMuZ2V0UGFyY2VsYWJsZShLRVlfQU5JTV9USFVNQk5BSUwpOwotICAgICAgICAgICAgbVN0YXJ0WCA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX1NUQVJUX1gsIDApOwotICAgICAgICAgICAgbVN0YXJ0WSA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX1NUQVJUX1ksIDApOwotICAgICAgICAgICAgbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lciA9IElSZW1vdGVDYWxsYmFjay5TdHViLmFzSW50ZXJmYWNlKAotICAgICAgICAgICAgICAgICAgICBvcHRzLmdldElCaW5kZXIoS0VZX0FOSU1fU1RBUlRfTElTVEVORVIpKTsKKyAgICAgICAgc3dpdGNoIChtQW5pbWF0aW9uVHlwZSkgeworICAgICAgICAgICAgY2FzZSBBTklNX0NVU1RPTToKKyAgICAgICAgICAgICAgICBtQ3VzdG9tRW50ZXJSZXNJZCA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX0VOVEVSX1JFU19JRCwgMCk7CisgICAgICAgICAgICAgICAgbUN1c3RvbUV4aXRSZXNJZCA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX0VYSVRfUkVTX0lELCAwKTsKKyAgICAgICAgICAgICAgICBtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyID0gSVJlbW90ZUNhbGxiYWNrLlN0dWIuYXNJbnRlcmZhY2UoCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmdldEJpbmRlcihLRVlfQU5JTV9TVEFSVF9MSVNURU5FUikpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFOSU1fU0NBTEVfVVA6CisgICAgICAgICAgICAgICAgbVN0YXJ0WCA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX1NUQVJUX1gsIDApOworICAgICAgICAgICAgICAgIG1TdGFydFkgPSBvcHRzLmdldEludChLRVlfQU5JTV9TVEFSVF9ZLCAwKTsKKyAgICAgICAgICAgICAgICBtU3RhcnRXaWR0aCA9IG9wdHMuZ2V0SW50KEtFWV9BTklNX1NUQVJUX1dJRFRILCAwKTsKKyAgICAgICAgICAgICAgICBtU3RhcnRIZWlnaHQgPSBvcHRzLmdldEludChLRVlfQU5JTV9TVEFSVF9IRUlHSFQsIDApOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFOSU1fVEhVTUJOQUlMX1NDQUxFX1VQOgorICAgICAgICAgICAgY2FzZSBBTklNX1RIVU1CTkFJTF9TQ0FMRV9ET1dOOgorICAgICAgICAgICAgICAgIG1UaHVtYm5haWwgPSAoQml0bWFwKW9wdHMuZ2V0UGFyY2VsYWJsZShLRVlfQU5JTV9USFVNQk5BSUwpOworICAgICAgICAgICAgICAgIG1TdGFydFggPSBvcHRzLmdldEludChLRVlfQU5JTV9TVEFSVF9YLCAwKTsKKyAgICAgICAgICAgICAgICBtU3RhcnRZID0gb3B0cy5nZXRJbnQoS0VZX0FOSU1fU1RBUlRfWSwgMCk7CisgICAgICAgICAgICAgICAgbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lciA9IElSZW1vdGVDYWxsYmFjay5TdHViLmFzSW50ZXJmYWNlKAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5nZXRCaW5kZXIoS0VZX0FOSU1fU1RBUlRfTElTVEVORVIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBTklNX1NDRU5FX1RSQU5TSVRJT046CisgICAgICAgICAgICAgICAgbURlc3RTY2VuZU5hbWVzID0gb3B0cy5nZXRTdHJpbmdBcnJheShLRVlfREVTVF9TQ0VORV9OQU1FUyk7CisgICAgICAgICAgICAgICAgbVRyYW5zaXRpb25BcmdzID0gb3B0cy5nZXRCdW5kbGUoS0VZX1NDRU5FX1RSQU5TSVRJT05fQVJHUyk7CisgICAgICAgICAgICAgICAgbVNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lciA9IElSZW1vdGVDYWxsYmFjay5TdHViLmFzSW50ZXJmYWNlKAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5nZXRCaW5kZXIoS0VZX1NDRU5FX1RSQU5TSVRJT05fU1RBUlRfTElTVEVORVIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzc1LDExICs0NzAsMzcgQEAKICAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVzdFNjZW5lTmFtZXMoKSB7CisgICAgICAgIHJldHVybiBtRGVzdFNjZW5lTmFtZXM7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIEJ1bmRsZSBnZXRTY2VuZVRyYW5zaXRpb25BcmdzKCkgeworICAgICAgICByZXR1cm4gbVRyYW5zaXRpb25BcmdzOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLwogICAgIHB1YmxpYyBJUmVtb3RlQ2FsbGJhY2sgZ2V0T25BbmltYXRpb25TdGFydExpc3RlbmVyKCkgewogICAgICAgICByZXR1cm4gbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lcjsKICAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaFNjZW5lVHJhbnNpdGlvblN0YXJ0ZWQoU3RyaW5nIGRlc3RTY2VuZSkgeworICAgICAgICBpZiAobVNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICBCdW5kbGUgZGF0YSA9IG51bGw7CisgICAgICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KGRlc3RTY2VuZSkpIHsKKyAgICAgICAgICAgICAgICBkYXRhID0gbmV3IEJ1bmRsZSgpOworICAgICAgICAgICAgICAgIGRhdGEucHV0U3RyaW5nKEtFWV9ERVNUX1NDRU5FX05BTUVfQ0hPU0VOLCBkZXN0U2NlbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyLnNlbmRSZXN1bHQoZGF0YSk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhdWdodCBleGNlcHRpb24gZGlzcGF0Y2hpbmcgc2NlbmUgdHJhbnNpdGlvbiBzdGFydCIsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCiAgICAgcHVibGljIHZvaWQgYWJvcnQoKSB7CiAgICAgICAgIGlmIChtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyICE9IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7CkBAIC0zODcsNiArNTA4LDEyIEBACiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGlmIChtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lci5zZW5kUmVzdWx0KG51bGwpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwpAQCAtNDExLDEzICs1MzgsMTYgQEAKICAgICAgICAgICAgICAgICBtQ3VzdG9tRW50ZXJSZXNJZCA9IG90aGVyT3B0aW9ucy5tQ3VzdG9tRW50ZXJSZXNJZDsKICAgICAgICAgICAgICAgICBtQ3VzdG9tRXhpdFJlc0lkID0gb3RoZXJPcHRpb25zLm1DdXN0b21FeGl0UmVzSWQ7CiAgICAgICAgICAgICAgICAgbVRodW1ibmFpbCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKG90aGVyT3B0aW9ucy5tQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpZiAobUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdGhlck9wdGlvbnMubUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lci5zZW5kUmVzdWx0KG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lci5zZW5kUmVzdWx0KG51bGwpOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIgPSBvdGhlck9wdGlvbnMubUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lcjsKKyAgICAgICAgICAgICAgICBtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtVHJhbnNpdGlvbkFyZ3MgPSBudWxsOworICAgICAgICAgICAgICAgIG1EZXN0U2NlbmVOYW1lcyA9IG51bGw7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFOSU1fU0NBTEVfVVA6CiAgICAgICAgICAgICAgICAgbUFuaW1hdGlvblR5cGUgPSBvdGhlck9wdGlvbnMubUFuaW1hdGlvblR5cGU7CkBAIC00MjUsMTMgKzU1NSwxNiBAQAogICAgICAgICAgICAgICAgIG1TdGFydFkgPSBvdGhlck9wdGlvbnMubVN0YXJ0WTsKICAgICAgICAgICAgICAgICBtU3RhcnRXaWR0aCA9IG90aGVyT3B0aW9ucy5tU3RhcnRXaWR0aDsKICAgICAgICAgICAgICAgICBtU3RhcnRIZWlnaHQgPSBvdGhlck9wdGlvbnMubVN0YXJ0SGVpZ2h0OwotICAgICAgICAgICAgICAgIGlmIChvdGhlck9wdGlvbnMubUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJPcHRpb25zLm1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIuc2VuZFJlc3VsdChudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIuc2VuZFJlc3VsdChudWxsKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtVHJhbnNpdGlvbkFyZ3MgPSBudWxsOworICAgICAgICAgICAgICAgIG1EZXN0U2NlbmVOYW1lcyA9IG51bGw7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFOSU1fVEhVTUJOQUlMX1NDQUxFX1VQOgogICAgICAgICAgICAgY2FzZSBBTklNX1RIVU1CTkFJTF9TQ0FMRV9ET1dOOgpAQCAtNDM5LDEzICs1NzIsMzAgQEAKICAgICAgICAgICAgICAgICBtVGh1bWJuYWlsID0gb3RoZXJPcHRpb25zLm1UaHVtYm5haWw7CiAgICAgICAgICAgICAgICAgbVN0YXJ0WCA9IG90aGVyT3B0aW9ucy5tU3RhcnRYOwogICAgICAgICAgICAgICAgIG1TdGFydFkgPSBvdGhlck9wdGlvbnMubVN0YXJ0WTsKLSAgICAgICAgICAgICAgICBpZiAob3RoZXJPcHRpb25zLm1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmIChtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyT3B0aW9ucy5tQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyLnNlbmRSZXN1bHQobnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyLnNlbmRSZXN1bHQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lciA9IG90aGVyT3B0aW9ucy5tQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyOworICAgICAgICAgICAgICAgIG1TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXIgPSBudWxsOworICAgICAgICAgICAgICAgIG1UcmFuc2l0aW9uQXJncyA9IG51bGw7CisgICAgICAgICAgICAgICAgbURlc3RTY2VuZU5hbWVzID0gbnVsbDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQU5JTV9TQ0VORV9UUkFOU0lUSU9OOgorICAgICAgICAgICAgICAgIG1BbmltYXRpb25UeXBlID0gb3RoZXJPcHRpb25zLm1BbmltYXRpb25UeXBlOworICAgICAgICAgICAgICAgIGlmIChtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXIuc2VuZFJlc3VsdChudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtU2NlbmVUcmFuc2l0aW9uU3RhcnRlZExpc3RlbmVyID0gb3RoZXJPcHRpb25zLm1TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXI7CisgICAgICAgICAgICAgICAgbURlc3RTY2VuZU5hbWVzID0gb3RoZXJPcHRpb25zLm1EZXN0U2NlbmVOYW1lczsKKyAgICAgICAgICAgICAgICBtVHJhbnNpdGlvbkFyZ3MgPSBvdGhlck9wdGlvbnMubVRyYW5zaXRpb25BcmdzOworICAgICAgICAgICAgICAgIG1UaHVtYm5haWwgPSBudWxsOworICAgICAgICAgICAgICAgIG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIgPSBudWxsOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtNDY4LDcgKzYxOCw3IEBACiAgICAgICAgICAgICAgICAgYi5wdXRJbnQoS0VZX0FOSU1fVFlQRSwgbUFuaW1hdGlvblR5cGUpOwogICAgICAgICAgICAgICAgIGIucHV0SW50KEtFWV9BTklNX0VOVEVSX1JFU19JRCwgbUN1c3RvbUVudGVyUmVzSWQpOwogICAgICAgICAgICAgICAgIGIucHV0SW50KEtFWV9BTklNX0VYSVRfUkVTX0lELCBtQ3VzdG9tRXhpdFJlc0lkKTsKLSAgICAgICAgICAgICAgICBiLnB1dElCaW5kZXIoS0VZX0FOSU1fU1RBUlRfTElTVEVORVIsIG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIKKyAgICAgICAgICAgICAgICBiLnB1dEJpbmRlcihLRVlfQU5JTV9TVEFSVF9MSVNURU5FUiwgbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lcgogICAgICAgICAgICAgICAgICAgICAgICAgIT0gbnVsbCA/IG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIuYXNCaW5kZXIoKSA6IG51bGwpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBTklNX1NDQUxFX1VQOgpAQCAtNDg0LDEwICs2MzQsMzEgQEAKICAgICAgICAgICAgICAgICBiLnB1dFBhcmNlbGFibGUoS0VZX0FOSU1fVEhVTUJOQUlMLCBtVGh1bWJuYWlsKTsKICAgICAgICAgICAgICAgICBiLnB1dEludChLRVlfQU5JTV9TVEFSVF9YLCBtU3RhcnRYKTsKICAgICAgICAgICAgICAgICBiLnB1dEludChLRVlfQU5JTV9TVEFSVF9ZLCBtU3RhcnRZKTsKLSAgICAgICAgICAgICAgICBiLnB1dElCaW5kZXIoS0VZX0FOSU1fU1RBUlRfTElTVEVORVIsIG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIKKyAgICAgICAgICAgICAgICBiLnB1dEJpbmRlcihLRVlfQU5JTV9TVEFSVF9MSVNURU5FUiwgbUFuaW1hdGlvblN0YXJ0ZWRMaXN0ZW5lcgogICAgICAgICAgICAgICAgICAgICAgICAgIT0gbnVsbCA/IG1BbmltYXRpb25TdGFydGVkTGlzdGVuZXIuYXNCaW5kZXIoKSA6IG51bGwpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTklNX1NDRU5FX1RSQU5TSVRJT046CisgICAgICAgICAgICAgICAgYi5wdXRJbnQoS0VZX0FOSU1fVFlQRSwgbUFuaW1hdGlvblR5cGUpOworICAgICAgICAgICAgICAgIGIucHV0U3RyaW5nQXJyYXkoS0VZX0RFU1RfU0NFTkVfTkFNRVMsIG1EZXN0U2NlbmVOYW1lcyk7CisgICAgICAgICAgICAgICAgYi5wdXRCdW5kbGUoS0VZX1NDRU5FX1RSQU5TSVRJT05fQVJHUywgbVRyYW5zaXRpb25BcmdzKTsKKyAgICAgICAgICAgICAgICBiLnB1dEJpbmRlcihLRVlfU0NFTkVfVFJBTlNJVElPTl9TVEFSVF9MSVNURU5FUiwgbVNjZW5lVHJhbnNpdGlvblN0YXJ0ZWRMaXN0ZW5lcgorICAgICAgICAgICAgICAgICAgICAgICAgIT0gbnVsbCA/IG1TY2VuZVRyYW5zaXRpb25TdGFydGVkTGlzdGVuZXIuYXNCaW5kZXIoKSA6IG51bGwpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBiOwogICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgZmlsdGVyZWQgb3B0aW9ucyBvbmx5IG1lYW50IHRvIGJlIHNlZW4gYnkgdGhlIHRhcmdldCBhY3Rpdml0eSBpdHNlbGYKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBBY3Rpdml0eU9wdGlvbnMgZm9yVGFyZ2V0QWN0aXZpdHkoKSB7CisgICAgICAgIGlmIChtQW5pbWF0aW9uVHlwZSA9PSBBTklNX1NDRU5FX1RSQU5TSVRJT04pIHsKKyAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5T3B0aW9ucyByZXN1bHQgPSBuZXcgQWN0aXZpdHlPcHRpb25zKCk7CisgICAgICAgICAgICByZXN1bHQudXBkYXRlKHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eVRocmVhZC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5VGhyZWFkLmphdmEKaW5kZXggNjVjNDBjMS4uZDdhNjdmNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5VGhyZWFkLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5VGhyZWFkLmphdmEKQEAgLTU2LDYgKzU2LDcgQEAKIGltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5JUmVtb3RlQ2FsbGJhY2s7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZVF1ZXVlOwpAQCAtNjgsMTIgKzY5LDE1IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwogaW1wb3J0IGFuZHJvaWQub3MuVHJhY2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOworaW1wb3J0IGFuZHJvaWQudHJhbnNpdGlvbi5TY2VuZTsKK2ltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFuZHJvaWRSdW50aW1lRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkV2ZW50TG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZ1ByaW50ZXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlByaW50V3JpdGVyUHJpbnRlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3VwZXJOb3RDYWxsZWRFeGNlcHRpb247CkBAIC0yODUsNiArMjg5LDcgQEAKICAgICAgICAgYm9vbGVhbiBpc0ZvcndhcmQ7CiAgICAgICAgIGludCBwZW5kaW5nQ29uZmlnQ2hhbmdlczsKICAgICAgICAgYm9vbGVhbiBvbmx5TG9jYWxSZXF1ZXN0OworICAgICAgICBCdW5kbGUgYWN0aXZpdHlPcHRpb25zOwogCiAgICAgICAgIFZpZXcgbVBlbmRpbmdSZW1vdmVXaW5kb3c7CiAgICAgICAgIFdpbmRvd01hbmFnZXIgbVBlbmRpbmdSZW1vdmVXaW5kb3dNYW5hZ2VyOwpAQCAtNTc3LDkgKzU4MiwxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIGZpbmFsIHZvaWQgc2NoZWR1bGVSZXN1bWVBY3Rpdml0eShJQmluZGVyIHRva2VuLCBpbnQgcHJvY2Vzc1N0YXRlLAotICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNGb3J3YXJkKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBpc0ZvcndhcmQsIEJ1bmRsZSByZXN1bWVBcmdzKSB7CiAgICAgICAgICAgICB1cGRhdGVQcm9jZXNzU3RhdGUocHJvY2Vzc1N0YXRlLCBmYWxzZSk7Ci0gICAgICAgICAgICBzZW5kTWVzc2FnZShILlJFU1VNRV9BQ1RJVklUWSwgdG9rZW4sIGlzRm9yd2FyZCA/IDEgOiAwKTsKKyAgICAgICAgICAgIHNlbmRNZXNzYWdlKEguUkVTVU1FX0FDVElWSVRZLCBuZXcgUGFpcjxJQmluZGVyLCBCdW5kbGU+KHRva2VuLCByZXN1bWVBcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgaXNGb3J3YXJkID8gMSA6IDApOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIGZpbmFsIHZvaWQgc2NoZWR1bGVTZW5kUmVzdWx0KElCaW5kZXIgdG9rZW4sIExpc3Q8UmVzdWx0SW5mbz4gcmVzdWx0cykgewpAQCAtNTk1LDcgKzYwMSw4IEBACiAgICAgICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGluZm8sIENvbmZpZ3VyYXRpb24gY3VyQ29uZmlnLCBDb21wYXRpYmlsaXR5SW5mbyBjb21wYXRJbmZvLAogICAgICAgICAgICAgICAgIGludCBwcm9jU3RhdGUsIEJ1bmRsZSBzdGF0ZSwgTGlzdDxSZXN1bHRJbmZvPiBwZW5kaW5nUmVzdWx0cywKICAgICAgICAgICAgICAgICBMaXN0PEludGVudD4gcGVuZGluZ05ld0ludGVudHMsIGJvb2xlYW4gbm90UmVzdW1lZCwgYm9vbGVhbiBpc0ZvcndhcmQsCi0gICAgICAgICAgICAgICAgU3RyaW5nIHByb2ZpbGVOYW1lLCBQYXJjZWxGaWxlRGVzY3JpcHRvciBwcm9maWxlRmQsIGJvb2xlYW4gYXV0b1N0b3BQcm9maWxlcikgeworICAgICAgICAgICAgICAgIFN0cmluZyBwcm9maWxlTmFtZSwgUGFyY2VsRmlsZURlc2NyaXB0b3IgcHJvZmlsZUZkLCBib29sZWFuIGF1dG9TdG9wUHJvZmlsZXIsCisgICAgICAgICAgICAgICAgQnVuZGxlIHJlc3VtZUFyZ3MpIHsKIAogICAgICAgICAgICAgdXBkYXRlUHJvY2Vzc1N0YXRlKHByb2NTdGF0ZSwgZmFsc2UpOwogCkBAIC02MTcsNiArNjI0LDcgQEAKICAgICAgICAgICAgIHIucHJvZmlsZUZpbGUgPSBwcm9maWxlTmFtZTsKICAgICAgICAgICAgIHIucHJvZmlsZUZkID0gcHJvZmlsZUZkOwogICAgICAgICAgICAgci5hdXRvU3RvcFByb2ZpbGVyID0gYXV0b1N0b3BQcm9maWxlcjsKKyAgICAgICAgICAgIHIuYWN0aXZpdHlPcHRpb25zID0gcmVzdW1lQXJnczsKIAogICAgICAgICAgICAgdXBkYXRlUGVuZGluZ0NvbmZpZ3VyYXRpb24oY3VyQ29uZmlnKTsKIApAQCAtMTE5Nyw3ICsxMjA1LDcgQEAKICAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKICAgICAgICAgICAgICAgICBjYXNlIExBVU5DSF9BQ1RJVklUWTogewogICAgICAgICAgICAgICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFRyYWNlLlRSQUNFX1RBR19BQ1RJVklUWV9NQU5BR0VSLCAiYWN0aXZpdHlTdGFydCIpOwotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUNsaWVudFJlY29yZCByID0gKEFjdGl2aXR5Q2xpZW50UmVjb3JkKW1zZy5vYmo7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5Q2xpZW50UmVjb3JkIHIgPSAoQWN0aXZpdHlDbGllbnRSZWNvcmQpIG1zZy5vYmo7CiAKICAgICAgICAgICAgICAgICAgICAgci5wYWNrYWdlSW5mbyA9IGdldFBhY2thZ2VJbmZvTm9DaGVjaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmFjdGl2aXR5SW5mby5hcHBsaWNhdGlvbkluZm8sIHIuY29tcGF0SW5mbyk7CkBAIC0xMjQzLDcgKzEyNTEsOCBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFJFU1VNRV9BQ1RJVklUWToKICAgICAgICAgICAgICAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfQUNUSVZJVFlfTUFOQUdFUiwgImFjdGl2aXR5UmVzdW1lIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZVJlc3VtZUFjdGl2aXR5KChJQmluZGVyKW1zZy5vYmosIHRydWUsCisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFBhaXI8SUJpbmRlciwgQnVuZGxlPiByZXN1bWVBcmdzID0gKFBhaXI8SUJpbmRlciwgQnVuZGxlPikgbXNnLm9iajsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlUmVzdW1lQWN0aXZpdHkocmVzdW1lQXJncy5maXJzdCwgcmVzdW1lQXJncy5zZWNvbmQsIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmFyZzEgIT0gMCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIFRyYWNlLnRyYWNlRW5kKFRyYWNlLlRSQUNFX1RBR19BQ1RJVklUWV9NQU5BR0VSKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDQwLDcgKzIwNDksNyBAQAogICAgICAgICAgICAgICAgICAgICArICIsIGNvbXA9IiArIG5hbWUKICAgICAgICAgICAgICAgICAgICAgKyAiLCB0b2tlbj0iICsgdG9rZW4pOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwZXJmb3JtTGF1bmNoQWN0aXZpdHkociwgbnVsbCk7CisgICAgICAgIHJldHVybiBwZXJmb3JtTGF1bmNoQWN0aXZpdHkociwgbnVsbCwgbnVsbCk7CiAgICAgfQogCiAgICAgcHVibGljIGZpbmFsIEFjdGl2aXR5IGdldEFjdGl2aXR5KElCaW5kZXIgdG9rZW4pIHsKQEAgLTIwOTMsNyArMjEwMiw4IEBACiAgICAgICAgIHNlbmRNZXNzYWdlKEguQ0xFQU5fVVBfQ09OVEVYVCwgY2NpKTsKICAgICB9CiAKLSAgICBwcml2YXRlIEFjdGl2aXR5IHBlcmZvcm1MYXVuY2hBY3Rpdml0eShBY3Rpdml0eUNsaWVudFJlY29yZCByLCBJbnRlbnQgY3VzdG9tSW50ZW50KSB7CisgICAgcHJpdmF0ZSBBY3Rpdml0eSBwZXJmb3JtTGF1bmNoQWN0aXZpdHkoQWN0aXZpdHlDbGllbnRSZWNvcmQgciwgSW50ZW50IGN1c3RvbUludGVudCwKKyAgICAgICAgICAgIEJ1bmRsZSBvcHRpb25zKSB7CiAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMgWyIgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArICJdIEFjdGl2aXR5VGhyZWFkLnBlcmZvcm1MYXVuY2hBY3Rpdml0eSgiICsgciArICIpIik7CiAKICAgICAgICAgQWN0aXZpdHlJbmZvIGFJbmZvID0gci5hY3Rpdml0eUluZm87CkBAIC0yMTUxLDcgKzIxNjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKyByLmFjdGl2aXR5SW5mby5uYW1lICsgIiB3aXRoIGNvbmZpZyAiICsgY29uZmlnKTsKICAgICAgICAgICAgICAgICBhY3Rpdml0eS5hdHRhY2goYXBwQ29udGV4dCwgdGhpcywgZ2V0SW5zdHJ1bWVudGF0aW9uKCksIHIudG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICByLmlkZW50LCBhcHAsIHIuaW50ZW50LCByLmFjdGl2aXR5SW5mbywgdGl0bGUsIHIucGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgci5lbWJlZGRlZElELCByLmxhc3ROb25Db25maWd1cmF0aW9uSW5zdGFuY2VzLCBjb25maWcpOworICAgICAgICAgICAgICAgICAgICAgICAgci5lbWJlZGRlZElELCByLmxhc3ROb25Db25maWd1cmF0aW9uSW5zdGFuY2VzLCBjb25maWcsIG9wdGlvbnMpOwogCiAgICAgICAgICAgICAgICAgaWYgKGN1c3RvbUludGVudCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5Lm1JbnRlbnQgPSBjdXN0b21JbnRlbnQ7CkBAIC0yMjUwLDEyICsyMjYwLDEzIEBACiAKICAgICAgICAgaWYgKGxvY2FsTE9HVikgU2xvZy52KAogICAgICAgICAgICAgVEFHLCAiSGFuZGxpbmcgbGF1bmNoIG9mICIgKyByKTsKLSAgICAgICAgQWN0aXZpdHkgYSA9IHBlcmZvcm1MYXVuY2hBY3Rpdml0eShyLCBjdXN0b21JbnRlbnQpOworCisgICAgICAgIEFjdGl2aXR5IGEgPSBwZXJmb3JtTGF1bmNoQWN0aXZpdHkociwgY3VzdG9tSW50ZW50LCByLmFjdGl2aXR5T3B0aW9ucyk7CiAKICAgICAgICAgaWYgKGEgIT0gbnVsbCkgewogICAgICAgICAgICAgci5jcmVhdGVkQ29uZmlnID0gbmV3IENvbmZpZ3VyYXRpb24obUNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgICAgQnVuZGxlIG9sZFN0YXRlID0gci5zdGF0ZTsKLSAgICAgICAgICAgIGhhbmRsZVJlc3VtZUFjdGl2aXR5KHIudG9rZW4sIGZhbHNlLCByLmlzRm9yd2FyZCwKKyAgICAgICAgICAgIGhhbmRsZVJlc3VtZUFjdGl2aXR5KHIudG9rZW4sIHIuYWN0aXZpdHlPcHRpb25zLCBmYWxzZSwgci5pc0ZvcndhcmQsCiAgICAgICAgICAgICAgICAgICAgICFyLmFjdGl2aXR5Lm1GaW5pc2hlZCAmJiAhci5zdGFydHNOb3RSZXN1bWVkKTsKIAogICAgICAgICAgICAgaWYgKCFyLmFjdGl2aXR5Lm1GaW5pc2hlZCAmJiByLnN0YXJ0c05vdFJlc3VtZWQpIHsKQEAgLTI4MTYsMTIgKzI4MjcsMTMgQEAKICAgICAgICAgci5tUGVuZGluZ1JlbW92ZVdpbmRvd01hbmFnZXIgPSBudWxsOwogICAgIH0KIAotICAgIGZpbmFsIHZvaWQgaGFuZGxlUmVzdW1lQWN0aXZpdHkoSUJpbmRlciB0b2tlbiwgYm9vbGVhbiBjbGVhckhpZGUsIGJvb2xlYW4gaXNGb3J3YXJkLAotICAgICAgICAgICAgYm9vbGVhbiByZWFsbHlSZXN1bWUpIHsKKyAgICBmaW5hbCB2b2lkIGhhbmRsZVJlc3VtZUFjdGl2aXR5KElCaW5kZXIgdG9rZW4sIEJ1bmRsZSByZXN1bWVBcmdzLAorICAgICAgICAgICAgYm9vbGVhbiBjbGVhckhpZGUsIGJvb2xlYW4gaXNGb3J3YXJkLCBib29sZWFuIHJlYWxseVJlc3VtZSkgewogICAgICAgICAvLyBJZiB3ZSBhcmUgZ2V0dGluZyByZWFkeSB0byBnYyBhZnRlciBnb2luZyB0byB0aGUgYmFja2dyb3VuZCwgd2VsbAogICAgICAgICAvLyB3ZSBhcmUgYmFjayBhY3RpdmUgc28gc2tpcCBpdC4KICAgICAgICAgdW5zY2hlZHVsZUdjSWRsZXIoKTsKIAorICAgICAgICAvLyBUT0RPIFB1c2ggcmVzdW1lQXJncyBpbnRvIHRoZSBhY3Rpdml0eSBmb3IgY29uc2lkZXJhdGlvbgogICAgICAgICBBY3Rpdml0eUNsaWVudFJlY29yZCByID0gcGVyZm9ybVJlc3VtZUFjdGl2aXR5KHRva2VuLCBjbGVhckhpZGUpOwogCiAgICAgICAgIGlmIChyICE9IG51bGwpIHsKQEAgLTM3NDIsNiArMzc1NCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgci5zdGFydHNOb3RSZXN1bWVkID0gdG1wLnN0YXJ0c05vdFJlc3VtZWQ7CisgICAgICAgIHIuYWN0aXZpdHlPcHRpb25zID0gbnVsbDsKIAogICAgICAgICBoYW5kbGVMYXVuY2hBY3Rpdml0eShyLCBjdXJyZW50SW50ZW50KTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWxlcnREaWFsb2cuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BbGVydERpYWxvZy5qYXZhCmluZGV4IDEwZDVlMjUuLmI5NjNmZjIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BbGVydERpYWxvZy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BbGVydERpYWxvZy5qYXZhCkBAIC0yNyw3ICsyNyw2IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkNvbnRleHRUaGVtZVdyYXBwZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldzsKQEAgLTE0NywxOSArMTQ2LDI1IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogR2V0cyBvbmUgb2YgdGhlIGJ1dHRvbnMgdXNlZCBpbiB0aGUgZGlhbG9nLgorICAgICAqIEdldHMgb25lIG9mIHRoZSBidXR0b25zIHVzZWQgaW4gdGhlIGRpYWxvZy4gUmV0dXJucyBudWxsIGlmIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBidXR0b24gZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRpYWxvZy4KICAgICAgKiA8cD4KLSAgICAgKiBJZiBhIGJ1dHRvbiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGlhbG9nLCBudWxsIHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgICogCisgICAgICogUHJpb3IgdG8gQVBJIDIwLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIHRoZSBkaWFsb2cgd2FzCisgICAgICogc2hvd24uIEluIGxhdGVyIHZlcnNpb25zLCB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWU7CisgICAgICogaG93ZXZlciwgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGxvY2tzIGluIHZhcmlvdXMgYXR0cmlidXRlcyBpbmNsdWRpbmcKKyAgICAgKiBidXR0b25zIGFuZCBpY29ucy4KKyAgICAgKgogICAgICAqIEBwYXJhbSB3aGljaEJ1dHRvbiBUaGUgaWRlbnRpZmllciBvZiB0aGUgYnV0dG9uIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogICAgICAqICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgY2FuIGJlCiAgICAgICogICAgICAgICAgICB7QGxpbmsgRGlhbG9nSW50ZXJmYWNlI0JVVFRPTl9QT1NJVElWRX0uCiAgICAgICogQHJldHVybiBUaGUgYnV0dG9uIGZyb20gdGhlIGRpYWxvZywgb3IgbnVsbCBpZiBhIGJ1dHRvbiBkb2VzIG5vdCBleGlzdC4KICAgICAgKi8KICAgICBwdWJsaWMgQnV0dG9uIGdldEJ1dHRvbihpbnQgd2hpY2hCdXR0b24pIHsKKyAgICAgICAgLy8gU3VwZXJjbGFzcyBoYW5kbGVzIHJlLWVudHJhbmNlIGFuZCBtdWx0aXBsZSBjYWxscy4KKyAgICAgICAgZGlzcGF0Y2hPbkNyZWF0ZShudWxsKTsKICAgICAgICAgcmV0dXJuIG1BbGVydC5nZXRCdXR0b24od2hpY2hCdXR0b24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxpc3QgdmlldyB1c2VkIGluIHRoZSBkaWFsb2cuCiAgICAgICogIApAQCAtODUzLDYgKzg1OCwyMSBAQAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvKioKKyAgICAgICAgICogU2V0IGEgY3VzdG9tIHZpZXcgcmVzb3VyY2UgdG8gYmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBEaWFsb2cuIFRoZQorICAgICAgICAgKiByZXNvdXJjZSB3aWxsIGJlIGluZmxhdGVkLCBhZGRpbmcgYWxsIHRvcC1sZXZlbCB2aWV3cyB0byB0aGUgc2NyZWVuLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gbGF5b3V0UmVzSWQgUmVzb3VyY2UgSUQgdG8gYmUgaW5mbGF0ZWQuCisgICAgICAgICAqIEByZXR1cm4gVGhpcyBCdWlsZGVyIG9iamVjdCB0byBhbGxvdyBmb3IgY2hhaW5pbmcgb2YgY2FsbHMgdG8gc2V0CisgICAgICAgICAqICAgICAgICAgbWV0aG9kcworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0VmlldyhpbnQgbGF5b3V0UmVzSWQpIHsKKyAgICAgICAgICAgIFAubVZpZXcgPSBudWxsOworICAgICAgICAgICAgUC5tVmlld0xheW91dFJlc0lkID0gbGF5b3V0UmVzSWQ7CisgICAgICAgICAgICBQLm1WaWV3U3BhY2luZ1NwZWNpZmllZCA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKICAgICAgICAgICogU2V0IGEgY3VzdG9tIHZpZXcgdG8gYmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBEaWFsb2cuIElmIHRoZSBzdXBwbGllZCB2aWV3IGlzIGFuIGluc3RhbmNlCiAgICAgICAgICAqIG9mIGEge0BsaW5rIExpc3RWaWV3fSB0aGUgbGlnaHQgYmFja2dyb3VuZCB3aWxsIGJlIHVzZWQuCiAgICAgICAgICAqCkBAIC04NjIsNiArODgyLDcgQEAKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFZpZXcoVmlldyB2aWV3KSB7CiAgICAgICAgICAgICBQLm1WaWV3ID0gdmlldzsKKyAgICAgICAgICAgIFAubVZpZXdMYXlvdXRSZXNJZCA9IDA7CiAgICAgICAgICAgICBQLm1WaWV3U3BhY2luZ1NwZWNpZmllZCA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTg5MSw2ICs5MTIsNyBAQAogICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRWaWV3KFZpZXcgdmlldywgaW50IHZpZXdTcGFjaW5nTGVmdCwgaW50IHZpZXdTcGFjaW5nVG9wLAogICAgICAgICAgICAgICAgIGludCB2aWV3U3BhY2luZ1JpZ2h0LCBpbnQgdmlld1NwYWNpbmdCb3R0b20pIHsKICAgICAgICAgICAgIFAubVZpZXcgPSB2aWV3OworICAgICAgICAgICAgUC5tVmlld0xheW91dFJlc0lkID0gMDsKICAgICAgICAgICAgIFAubVZpZXdTcGFjaW5nU3BlY2lmaWVkID0gdHJ1ZTsKICAgICAgICAgICAgIFAubVZpZXdTcGFjaW5nTGVmdCA9IHZpZXdTcGFjaW5nTGVmdDsKICAgICAgICAgICAgIFAubVZpZXdTcGFjaW5nVG9wID0gdmlld1NwYWNpbmdUb3A7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwT3BzTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcE9wc01hbmFnZXIuamF2YQppbmRleCBhZWNlNDYyLi5lNzFkNDdkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwT3BzTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBPcHNNYW5hZ2VyLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAqIEFQSSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCAiYXBwbGljYXRpb24gb3BlcmF0aW9uIiB0cmFja2luZy4KICAqCiAgKiA8cD5UaGlzIEFQSSBpcyBub3QgZ2VuZXJhbGx5IGludGVuZGVkIGZvciB0aGlyZCBwYXJ0eSBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzOyBtb3N0Ci0gKiBmZWF0dXJlcyBhcmUgb25seSBhdmFpbGFibGUgdG8gc3lzdGVtIGFwcGxpY2F0aW5zLiAgT2J0YWluIGFuIGluc3RhbmNlIG9mIGl0IHRocm91Z2gKKyAqIGZlYXR1cmVzIGFyZSBvbmx5IGF2YWlsYWJsZSB0byBzeXN0ZW0gYXBwbGljYXRpb25zLiAgT2J0YWluIGFuIGluc3RhbmNlIG9mIGl0IHRocm91Z2gKICAqIHtAbGluayBDb250ZXh0I2dldFN5c3RlbVNlcnZpY2UoU3RyaW5nKSBDb250ZXh0LmdldFN5c3RlbVNlcnZpY2V9IHdpdGgKICAqIHtAbGluayBDb250ZXh0I0FQUF9PUFNfU0VSVklDRSBDb250ZXh0LkFQUF9PUFNfU0VSVklDRX0uPC9wPgogICovCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwbGljYXRpb25FcnJvclJlcG9ydC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uRXJyb3JSZXBvcnQuamF2YQppbmRleCBjMTE3NDg2Li44YjEzMmUwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwbGljYXRpb25FcnJvclJlcG9ydC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBsaWNhdGlvbkVycm9yUmVwb3J0LmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlByaW50ZXI7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwbGljYXRpb25QYWNrYWdlTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uUGFja2FnZU1hbmFnZXIuamF2YQppbmRleCBiNTA1ZDRmLi5iOTEwYmE1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwbGljYXRpb25QYWNrYWdlTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBsaWNhdGlvblBhY2thZ2VNYW5hZ2VyLmphdmEKQEAgLTU3LDggKzU3LDYgQEAKIAogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLypwYWNrYWdlKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBsaWNhdGlvblRocmVhZE5hdGl2ZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uVGhyZWFkTmF0aXZlLmphdmEKaW5kZXggMzQ3ZDQzZi4uYzhmMTI4MCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uVGhyZWFkTmF0aXZlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uVGhyZWFkTmF0aXZlLmphdmEKQEAgLTExMyw3ICsxMTMsOCBAQAogICAgICAgICAgICAgSUJpbmRlciBiID0gZGF0YS5yZWFkU3Ryb25nQmluZGVyKCk7CiAgICAgICAgICAgICBpbnQgcHJvY1N0YXRlID0gZGF0YS5yZWFkSW50KCk7CiAgICAgICAgICAgICBib29sZWFuIGlzRm9yd2FyZCA9IGRhdGEucmVhZEludCgpICE9IDA7Ci0gICAgICAgICAgICBzY2hlZHVsZVJlc3VtZUFjdGl2aXR5KGIsIHByb2NTdGF0ZSwgaXNGb3J3YXJkKTsKKyAgICAgICAgICAgIEJ1bmRsZSByZXN1bWVBcmdzID0gZGF0YS5yZWFkQnVuZGxlKCk7CisgICAgICAgICAgICBzY2hlZHVsZVJlc3VtZUFjdGl2aXR5KGIsIHByb2NTdGF0ZSwgaXNGb3J3YXJkLCByZXN1bWVBcmdzKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTQ1LDggKzE0NiwxMCBAQAogICAgICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3IgcHJvZmlsZUZkID0gZGF0YS5yZWFkSW50KCkgIT0gMAogICAgICAgICAgICAgICAgICAgICA/IFBhcmNlbEZpbGVEZXNjcmlwdG9yLkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChkYXRhKSA6IG51bGw7CiAgICAgICAgICAgICBib29sZWFuIGF1dG9TdG9wUHJvZmlsZXIgPSBkYXRhLnJlYWRJbnQoKSAhPSAwOworICAgICAgICAgICAgQnVuZGxlIHJlc3VtZUFyZ3MgPSBkYXRhLnJlYWRCdW5kbGUoKTsKICAgICAgICAgICAgIHNjaGVkdWxlTGF1bmNoQWN0aXZpdHkoaW50ZW50LCBiLCBpZGVudCwgaW5mbywgY3VyQ29uZmlnLCBjb21wYXRJbmZvLCBwcm9jU3RhdGUsIHN0YXRlLAotICAgICAgICAgICAgICAgICAgICByaSwgcGksIG5vdFJlc3VtZWQsIGlzRm9yd2FyZCwgcHJvZmlsZU5hbWUsIHByb2ZpbGVGZCwgYXV0b1N0b3BQcm9maWxlcik7CisgICAgICAgICAgICAgICAgICAgIHJpLCBwaSwgbm90UmVzdW1lZCwgaXNGb3J3YXJkLCBwcm9maWxlTmFtZSwgcHJvZmlsZUZkLCBhdXRvU3RvcFByb2ZpbGVyLAorICAgICAgICAgICAgICAgICAgICByZXN1bWVBcmdzKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjk2LDEzICs2OTksMTUgQEAKICAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CiAgICAgfQogCi0gICAgcHVibGljIGZpbmFsIHZvaWQgc2NoZWR1bGVSZXN1bWVBY3Rpdml0eShJQmluZGVyIHRva2VuLCBpbnQgcHJvY1N0YXRlLCBib29sZWFuIGlzRm9yd2FyZCkKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBzY2hlZHVsZVJlc3VtZUFjdGl2aXR5KElCaW5kZXIgdG9rZW4sIGludCBwcm9jU3RhdGUsIGJvb2xlYW4gaXNGb3J3YXJkLAorICAgICAgICAgICAgQnVuZGxlIHJlc3VtZUFyZ3MpCiAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQXBwbGljYXRpb25UaHJlYWQuZGVzY3JpcHRvcik7CiAgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIodG9rZW4pOwogICAgICAgICBkYXRhLndyaXRlSW50KHByb2NTdGF0ZSk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQoaXNGb3J3YXJkID8gMSA6IDApOworICAgICAgICBkYXRhLndyaXRlQnVuZGxlKHJlc3VtZUFyZ3MpOwogICAgICAgICBtUmVtb3RlLnRyYW5zYWN0KFNDSEVEVUxFX1JFU1VNRV9BQ1RJVklUWV9UUkFOU0FDVElPTiwgZGF0YSwgbnVsbCwKICAgICAgICAgICAgICAgICBJQmluZGVyLkZMQUdfT05FV0FZKTsKICAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CkBAIC03MjIsOSArNzI3LDEwIEBACiAgICAgcHVibGljIGZpbmFsIHZvaWQgc2NoZWR1bGVMYXVuY2hBY3Rpdml0eShJbnRlbnQgaW50ZW50LCBJQmluZGVyIHRva2VuLCBpbnQgaWRlbnQsCiAgICAgICAgICAgICBBY3Rpdml0eUluZm8gaW5mbywgQ29uZmlndXJhdGlvbiBjdXJDb25maWcsIENvbXBhdGliaWxpdHlJbmZvIGNvbXBhdEluZm8sCiAgICAgICAgICAgICBpbnQgcHJvY1N0YXRlLCBCdW5kbGUgc3RhdGUsIExpc3Q8UmVzdWx0SW5mbz4gcGVuZGluZ1Jlc3VsdHMsCi0gICAgCQlMaXN0PEludGVudD4gcGVuZGluZ05ld0ludGVudHMsIGJvb2xlYW4gbm90UmVzdW1lZCwgYm9vbGVhbiBpc0ZvcndhcmQsCi0gICAgCQlTdHJpbmcgcHJvZmlsZU5hbWUsIFBhcmNlbEZpbGVEZXNjcmlwdG9yIHByb2ZpbGVGZCwgYm9vbGVhbiBhdXRvU3RvcFByb2ZpbGVyKQotICAgIAkJdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICBMaXN0PEludGVudD4gcGVuZGluZ05ld0ludGVudHMsIGJvb2xlYW4gbm90UmVzdW1lZCwgYm9vbGVhbiBpc0ZvcndhcmQsCisgICAgICAgICAgICBTdHJpbmcgcHJvZmlsZU5hbWUsIFBhcmNlbEZpbGVEZXNjcmlwdG9yIHByb2ZpbGVGZCwgYm9vbGVhbiBhdXRvU3RvcFByb2ZpbGVyLAorICAgICAgICAgICAgQnVuZGxlIHJlc3VtZUFyZ3MpCisgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQXBwbGljYXRpb25UaHJlYWQuZGVzY3JpcHRvcik7CiAgICAgICAgIGludGVudC53cml0ZVRvUGFyY2VsKGRhdGEsIDApOwpAQCAtNzQ3LDYgKzc1Myw3IEBACiAgICAgICAgICAgICBkYXRhLndyaXRlSW50KDApOwogICAgICAgICB9CiAgICAgICAgIGRhdGEud3JpdGVJbnQoYXV0b1N0b3BQcm9maWxlciA/IDEgOiAwKTsKKyAgICAgICAgZGF0YS53cml0ZUJ1bmRsZShyZXN1bWVBcmdzKTsKICAgICAgICAgbVJlbW90ZS50cmFuc2FjdChTQ0hFRFVMRV9MQVVOQ0hfQUNUSVZJVFlfVFJBTlNBQ1RJT04sIGRhdGEsIG51bGwsCiAgICAgICAgICAgICAgICAgSUJpbmRlci5GTEFHX09ORVdBWSk7CiAgICAgICAgIGRhdGEucmVjeWNsZSgpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0RpYWxvZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0RpYWxvZy5qYXZhCmluZGV4IGNkYTJjNWYuLjE3OTAzZWEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9EaWFsb2cuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRGlhbG9nLmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5hcHA7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuQWN0aW9uQmFySW1wbDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuUG9saWN5TWFuYWdlcjsKIApAQCAtMTA2LDYgKzEwNSw5IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIG1TaG93aW5nID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1DYW5jZWxlZCA9IGZhbHNlOwogCisgICAgLyoqIFdoZXRoZXIgdGhlIGV4ZWN1dGlvbiBwYXRoIGlzIGN1cnJlbnRseSBpbiBvbkNyZWF0ZSgpLiAqLworICAgIHByaXZhdGUgYm9vbGVhbiBtSW5PbkNyZWF0ZSA9IGZhbHNlOworCiAgICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIG1IYW5kbGVyID0gbmV3IEhhbmRsZXIoKTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBESVNNSVNTID0gMHg0MzsKQEAgLTM1Nyw4ICszNTksMTAgQEAKICAgICAvLyBpbnRlcm5hbCBtZXRob2QgdG8gbWFrZSBzdXJlIG1jcmVhdGVkIGlzIHNldCBwcm9wZXJseSB3aXRob3V0IHJlcXVpcmluZwogICAgIC8vIHVzZXJzIHRvIGNhbGwgdGhyb3VnaCB0byBzdXBlciBpbiBvbkNyZWF0ZQogICAgIHZvaWQgZGlzcGF0Y2hPbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgICAgIGlmICghbUNyZWF0ZWQpIHsKKyAgICAgICAgaWYgKCFtQ3JlYXRlZCAmJiAhbUluT25DcmVhdGUpIHsKKyAgICAgICAgICAgIG1Jbk9uQ3JlYXRlID0gdHJ1ZTsKICAgICAgICAgICAgIG9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgICAgICBtSW5PbkNyZWF0ZSA9IGZhbHNlOwogICAgICAgICAgICAgbUNyZWF0ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDU3LDEzICs0NjEsMjAgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBGaW5kcyBhIHZpZXcgdGhhdCB3YXMgaWRlbnRpZmllZCBieSB0aGUgaWQgYXR0cmlidXRlIGZyb20gdGhlIFhNTCB0aGF0Ci0gICAgICogd2FzIHByb2Nlc3NlZCBpbiB7QGxpbmsgI29uU3RhcnR9LgorICAgICAqIEZpbmRzIGEgY2hpbGQgdmlldyB3aXRoIHRoZSBnaXZlbiBpZGVudGlmaWVyLgorICAgICAqIDxwPgorICAgICAqIFByaW9yIHRvIEFQSSAyMCwgdGhpcyBmdW5jdGlvbiBjb3VsZCBvbmx5IGJlIHVzZWQgYWZ0ZXIgdGhlIGZpcnN0IGNhbGwKKyAgICAgKiB0byB7QGxpbmsgI3Nob3coKX0uIEluIGxhdGVyIHZlcnNpb25zLCB0aGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VkIGF0IGFueQorICAgICAqIHRpbWU7IGhvd2V2ZXIsIHRoZSBmaXJzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gImxvY2tzIGluIiBjZXJ0YWluIGRpYWxvZworICAgICAqIGNoYXJhY3RlcmlzdGljcy4KICAgICAgKgogICAgICAqIEBwYXJhbSBpZCB0aGUgaWRlbnRpZmllciBvZiB0aGUgdmlldyB0byBmaW5kCi0gICAgICogQHJldHVybiBUaGUgdmlldyBpZiBmb3VuZCBvciBudWxsIG90aGVyd2lzZS4KKyAgICAgKiBAcmV0dXJuIFRoZSB2aWV3IHdpdGggdGhlIGdpdmVuIGlkIG9yIG51bGwuCiAgICAgICovCiAgICAgcHVibGljIFZpZXcgZmluZFZpZXdCeUlkKGludCBpZCkgeworICAgICAgICBpZiAoIW1DcmVhdGVkKSB7CisgICAgICAgICAgICBkaXNwYXRjaE9uQ3JlYXRlKG51bGwpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBtV2luZG93LmZpbmRWaWV3QnlJZChpZCk7CiAgICAgfQogCkBAIC00ODAsNyArNDkxLDcgQEAKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHNjcmVlbiBjb250ZW50IHRvIGFuIGV4cGxpY2l0IHZpZXcuICBUaGlzIHZpZXcgaXMgcGxhY2VkCiAgICAgICogZGlyZWN0bHkgaW50byB0aGUgc2NyZWVuJ3MgdmlldyBoaWVyYXJjaHkuICBJdCBjYW4gaXRzZWxmIGJlIGEgY29tcGxleAotICAgICAqIHZpZXcgaGllcmFyaGN5LgorICAgICAqIHZpZXcgaGllcmFyY2h5LgogICAgICAqIAogICAgICAqIEBwYXJhbSB2aWV3IFRoZSBkZXNpcmVkIGNvbnRlbnQgdG8gZGlzcGxheS4KICAgICAgKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9FeHBhbmRhYmxlTGlzdEFjdGl2aXR5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRXhwYW5kYWJsZUxpc3RBY3Rpdml0eS5qYXZhCmluZGV4IDk2NTEwNzguLmUwOGYyNWEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9FeHBhbmRhYmxlTGlzdEFjdGl2aXR5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0V4cGFuZGFibGVMaXN0QWN0aXZpdHkuamF2YQpAQCAtMjcsNyArMjcsNiBAQAogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkV4cGFuZGFibGVMaXN0VmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5TaW1wbGVDdXJzb3JUcmVlQWRhcHRlcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5TaW1wbGVFeHBhbmRhYmxlTGlzdEFkYXB0ZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXcuQWRhcHRlckNvbnRleHRNZW51SW5mbzsKIAogaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9GcmFnbWVudC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0ZyYWdtZW50LmphdmEKaW5kZXggZDYyNmU1Zi4uYzA5ZGE4NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0ZyYWdtZW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0ZyYWdtZW50LmphdmEKQEAgLTE3LDYgKzE3LDcgQEAKIHBhY2thZ2UgYW5kcm9pZC5hcHA7CiAKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvcjsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudENhbGxiYWNrczI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKQEAgLTU3NSw3ICs1NzYsNyBAQAogICAgICAqIHRoZSBnaXZlbiBmcmFnbWVudCBjbGFzcy4gIFRoaXMgaXMgYSBydW50aW1lIGV4Y2VwdGlvbjsgaXQgaXMgbm90CiAgICAgICogbm9ybWFsbHkgZXhwZWN0ZWQgdG8gaGFwcGVuLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgRnJhZ21lbnQgaW5zdGFudGlhdGUoQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgZm5hbWUsIEJ1bmRsZSBhcmdzKSB7CisgICAgcHVibGljIHN0YXRpYyBGcmFnbWVudCBpbnN0YW50aWF0ZShDb250ZXh0IGNvbnRleHQsIFN0cmluZyBmbmFtZSwgQE51bGxhYmxlIEJ1bmRsZSBhcmdzKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzczw/PiBjbGF6eiA9IHNDbGFzc01hcC5nZXQoZm5hbWUpOwogICAgICAgICAgICAgaWYgKGNsYXp6ID09IG51bGwpIHsKQEAgLTEyMTMsNyArMTIxNCw4IEBACiAgICAgICogCiAgICAgICogQHJldHVybiBSZXR1cm4gdGhlIFZpZXcgZm9yIHRoZSBmcmFnbWVudCdzIFVJLCBvciBudWxsLgogICAgICAqLwotICAgIHB1YmxpYyBWaWV3IG9uQ3JlYXRlVmlldyhMYXlvdXRJbmZsYXRlciBpbmZsYXRlciwgVmlld0dyb3VwIGNvbnRhaW5lciwKKyAgICBATnVsbGFibGUKKyAgICBwdWJsaWMgVmlldyBvbkNyZWF0ZVZpZXcoTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIsIEBOdWxsYWJsZSBWaWV3R3JvdXAgY29udGFpbmVyLAogICAgICAgICAgICAgQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CkBAIC0xMjI4LDcgKzEyMzAsNyBAQAogICAgICAqIEBwYXJhbSBzYXZlZEluc3RhbmNlU3RhdGUgSWYgbm9uLW51bGwsIHRoaXMgZnJhZ21lbnQgaXMgYmVpbmcgcmUtY29uc3RydWN0ZWQKICAgICAgKiBmcm9tIGEgcHJldmlvdXMgc2F2ZWQgc3RhdGUgYXMgZ2l2ZW4gaGVyZS4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvblZpZXdDcmVhdGVkKFZpZXcgdmlldywgQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgIHB1YmxpYyB2b2lkIG9uVmlld0NyZWF0ZWQoVmlldyB2aWV3LCBATnVsbGFibGUgQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewogICAgIH0KICAgICAKICAgICAvKioKQEAgLTEyMzcsNiArMTIzOSw3IEBACiAgICAgICogCiAgICAgICogQHJldHVybiBUaGUgZnJhZ21lbnQncyByb290IHZpZXcsIG9yIG51bGwgaWYgaXQgaGFzIG5vIGxheW91dC4KICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBwdWJsaWMgVmlldyBnZXRWaWV3KCkgewogICAgICAgICByZXR1cm4gbVZpZXc7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0ZyYWdtZW50QnJlYWRDcnVtYnMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9GcmFnbWVudEJyZWFkQ3J1bWJzLmphdmEKaW5kZXggYjgxMGI4OS4uZTRkZTdhZiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0ZyYWdtZW50QnJlYWRDcnVtYnMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRnJhZ21lbnRCcmVhZENydW1icy5qYXZhCkBAIC04MSwxNCArODEsMTkgQEAKICAgICB9CiAKICAgICBwdWJsaWMgRnJhZ21lbnRCcmVhZENydW1icyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBhbmRyb2lkLlIuc3R5bGUuV2lkZ2V0X0ZyYWdtZW50QnJlYWRDcnVtYnMpOworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuZnJhZ21lbnRCcmVhZENydW1ic1N0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgRnJhZ21lbnRCcmVhZENydW1icyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEZyYWdtZW50QnJlYWRDcnVtYnMoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZyYWdtZW50QnJlYWRDcnVtYnMsIGRlZlN0eWxlLCAwKTsKKyAgICBwdWJsaWMgRnJhZ21lbnRCcmVhZENydW1icygKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GcmFnbWVudEJyZWFkQ3J1bWJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBtR3Jhdml0eSA9IGEuZ2V0SW50KGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZyYWdtZW50QnJlYWRDcnVtYnNfZ3Jhdml0eSwKICAgICAgICAgICAgICAgICBERUZBVUxUX0dSQVZJVFkpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lBY3Rpdml0eU1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9JQWN0aXZpdHlNYW5hZ2VyLmphdmEKaW5kZXggNjMxZDliMS4uNzdjMmVhMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lBY3Rpdml0eU1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvSUFjdGl2aXR5TWFuYWdlci5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuUnVubmluZ1Rhc2tJbmZvOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5SdW5uaW5nU2VydmljZUluZm87Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tCb3hJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UHJvdmlkZXJOYXRpdmU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklDb250ZW50UHJvdmlkZXI7CkBAIC0zNiw3ICszNiw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlVzZXJJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuRGVidWc7CkBAIC0xMTgsMTEgKzExNywxMiBAQAogICAgIHB1YmxpYyB2b2lkIG1vdmVUYXNrVG9CYWNrKGludCB0YXNrKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyBib29sZWFuIG1vdmVBY3Rpdml0eVRhc2tUb0JhY2soSUJpbmRlciB0b2tlbiwgYm9vbGVhbiBub25Sb290KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyB2b2lkIG1vdmVUYXNrQmFja3dhcmRzKGludCB0YXNrKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIHB1YmxpYyBpbnQgY3JlYXRlU3RhY2soaW50IHRhc2tJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgaW50IGNyZWF0ZVN0YWNrKGludCB0YXNrSWQsIGludCByZWxhdGl2ZVN0YWNrQm94SWQsIGludCBwb3NpdGlvbiwgZmxvYXQgd2VpZ2h0KQorICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICBwdWJsaWMgdm9pZCBtb3ZlVGFza1RvU3RhY2soaW50IHRhc2tJZCwgaW50IHN0YWNrSWQsIGJvb2xlYW4gdG9Ub3ApIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgcHVibGljIHZvaWQgcmVzaXplU3RhY2soaW50IHN0YWNrSWQsIFJlY3QgYm91bmRzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIHB1YmxpYyBMaXN0PFN0YWNrSW5mbz4gZ2V0QWxsU3RhY2tJbmZvcygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgcHVibGljIFN0YWNrSW5mbyBnZXRTdGFja0luZm8oaW50IHN0YWNrSWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIHZvaWQgcmVzaXplU3RhY2tCb3goaW50IHN0YWNrQm94SWQsIGZsb2F0IHdlaWdodCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgTGlzdDxTdGFja0JveEluZm8+IGdldFN0YWNrQm94ZXMoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyBTdGFja0JveEluZm8gZ2V0U3RhY2tCb3hJbmZvKGludCBzdGFja0JveElkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyB2b2lkIHNldEZvY3VzZWRTdGFjayhpbnQgc3RhY2tJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICBwdWJsaWMgaW50IGdldFRhc2tGb3JBY3Rpdml0eShJQmluZGVyIHRva2VuLCBib29sZWFuIG9ubHlSb290KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIC8qIG9uZXdheSAqLwpAQCAtNjgxLDkgKzY4MSw5IEBACiAgICAgaW50IENSRUFURV9TVEFDS19UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTisxNjc7CiAgICAgaW50IE1PVkVfVEFTS19UT19TVEFDS19UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTisxNjg7CiAgICAgaW50IFJFU0laRV9TVEFDS19UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTisxNjk7Ci0gICAgaW50IEdFVF9BTExfU1RBQ0tfSU5GT1NfVFJBTlNBQ1RJT04gPSBJQmluZGVyLkZJUlNUX0NBTExfVFJBTlNBQ1RJT04rMTcwOworICAgIGludCBHRVRfU1RBQ0tfQk9YRVNfVFJBTlNBQ1RJT04gPSBJQmluZGVyLkZJUlNUX0NBTExfVFJBTlNBQ1RJT04rMTcwOwogICAgIGludCBTRVRfRk9DVVNFRF9TVEFDS19UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTisxNzE7Ci0gICAgaW50IEdFVF9TVEFDS19JTkZPX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OKzE3MjsKKyAgICBpbnQgR0VUX1NUQUNLX0JPWF9JTkZPX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OKzE3MjsKICAgICBpbnQgQ09OVkVSVF9GUk9NX1RSQU5TTFVDRU5UX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OKzE3MzsKICAgICBpbnQgQ09OVkVSVF9UT19UUkFOU0xVQ0VOVF9UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTisxNzQ7CiAgICAgaW50IE5PVElGWV9BQ1RJVklUWV9EUkFXTl9UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTisxNzU7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvSUFwcGxpY2F0aW9uVGhyZWFkLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvSUFwcGxpY2F0aW9uVGhyZWFkLmphdmEKaW5kZXggZDBjYzFiYi4uMWVhOWQ4NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lBcHBsaWNhdGlvblRocmVhZC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9JQXBwbGljYXRpb25UaHJlYWQuamF2YQpAQCAtNTAsMTUgKzUwLDE2IEBACiAgICAgICAgICAgICBpbnQgY29uZmlnQ2hhbmdlcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICB2b2lkIHNjaGVkdWxlV2luZG93VmlzaWJpbGl0eShJQmluZGVyIHRva2VuLCBib29sZWFuIHNob3dXaW5kb3cpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgdm9pZCBzY2hlZHVsZVNsZWVwaW5nKElCaW5kZXIgdG9rZW4sIGJvb2xlYW4gc2xlZXBpbmcpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgdm9pZCBzY2hlZHVsZVJlc3VtZUFjdGl2aXR5KElCaW5kZXIgdG9rZW4sIGludCBwcm9jU3RhdGUsIGJvb2xlYW4gaXNGb3J3YXJkKQorICAgIHZvaWQgc2NoZWR1bGVSZXN1bWVBY3Rpdml0eShJQmluZGVyIHRva2VuLCBpbnQgcHJvY1N0YXRlLCBib29sZWFuIGlzRm9yd2FyZCwgQnVuZGxlIHJlc3VtZUFyZ3MpCiAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHZvaWQgc2NoZWR1bGVTZW5kUmVzdWx0KElCaW5kZXIgdG9rZW4sIExpc3Q8UmVzdWx0SW5mbz4gcmVzdWx0cykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICB2b2lkIHNjaGVkdWxlTGF1bmNoQWN0aXZpdHkoSW50ZW50IGludGVudCwgSUJpbmRlciB0b2tlbiwgaW50IGlkZW50LAogICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGluZm8sIENvbmZpZ3VyYXRpb24gY3VyQ29uZmlnLCBDb21wYXRpYmlsaXR5SW5mbyBjb21wYXRJbmZvLAogICAgICAgICAgICAgaW50IHByb2NTdGF0ZSwgQnVuZGxlIHN0YXRlLCBMaXN0PFJlc3VsdEluZm8+IHBlbmRpbmdSZXN1bHRzLAotICAgIAkJTGlzdDxJbnRlbnQ+IHBlbmRpbmdOZXdJbnRlbnRzLCBib29sZWFuIG5vdFJlc3VtZWQsIGJvb2xlYW4gaXNGb3J3YXJkLAotICAgIAkJU3RyaW5nIHByb2ZpbGVOYW1lLCBQYXJjZWxGaWxlRGVzY3JpcHRvciBwcm9maWxlRmQsIGJvb2xlYW4gYXV0b1N0b3BQcm9maWxlcikKLSAgICAJCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgICAgICAgICBMaXN0PEludGVudD4gcGVuZGluZ05ld0ludGVudHMsIGJvb2xlYW4gbm90UmVzdW1lZCwgYm9vbGVhbiBpc0ZvcndhcmQsCisgICAgICAgICAgICBTdHJpbmcgcHJvZmlsZU5hbWUsIFBhcmNlbEZpbGVEZXNjcmlwdG9yIHByb2ZpbGVGZCwgYm9vbGVhbiBhdXRvU3RvcFByb2ZpbGVyLAorICAgICAgICAgICAgQnVuZGxlIHJlc3VtZUFyZ3MpCisgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHZvaWQgc2NoZWR1bGVSZWxhdW5jaEFjdGl2aXR5KElCaW5kZXIgdG9rZW4sIExpc3Q8UmVzdWx0SW5mbz4gcGVuZGluZ1Jlc3VsdHMsCiAgICAgICAgICAgICBMaXN0PEludGVudD4gcGVuZGluZ05ld0ludGVudHMsIGludCBjb25maWdDaGFuZ2VzLAogICAgICAgICAgICAgYm9vbGVhbiBub3RSZXN1bWVkLCBDb25maWd1cmF0aW9uIGNvbmZpZykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9NZWRpYVJvdXRlQnV0dG9uLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvTWVkaWFSb3V0ZUJ1dHRvbi5qYXZhCmluZGV4IGE3OTgyZjQuLmZhMjgxM2UgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9NZWRpYVJvdXRlQnV0dG9uLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL01lZGlhUm91dGVCdXR0b24uamF2YQpAQCAtNzMsMTMgKzczLDE4IEBACiAgICAgfQogCiAgICAgcHVibGljIE1lZGlhUm91dGVCdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0cik7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIE1lZGlhUm91dGVCdXR0b24oCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBtUm91dGVyID0gKE1lZGlhUm91dGVyKWNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0Lk1FRElBX1JPVVRFUl9TRVJWSUNFKTsKICAgICAgICAgbUNhbGxiYWNrID0gbmV3IE1lZGlhUm91dGVyQ2FsbGJhY2soKTsKIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTWVkaWFSb3V0ZUJ1dHRvbiwgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLk1lZGlhUm91dGVCdXR0b24sIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBzZXRSZW1vdGVJbmRpY2F0b3JEcmF3YWJsZShhLmdldERyYXdhYmxlKAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLk1lZGlhUm91dGVCdXR0b25fZXh0ZXJuYWxSb3V0ZUVuYWJsZWREcmF3YWJsZSkpOwogICAgICAgICBtTWluV2lkdGggPSBhLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24uamF2YQppbmRleCBjNjNlNTg2Li42MmE4NDIxOSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL05vdGlmaWNhdGlvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24uamF2YQpAQCAtMTgsNiArMTgsNyBAQAogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKQEAgLTM3LDYgKzM4LDggQEAKIGltcG9ydCBhbmRyb2lkLndpZGdldC5Qcm9ncmVzc0JhcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5SZW1vdGVWaWV3czsKIAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CiBpbXBvcnQgamF2YS50ZXh0Lk51bWJlckZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogCkBAIC0zNTAsNiArMzUzLDExIEBACiAKICAgICBwdWJsaWMgaW50IGZsYWdzOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7UFJJT1JJVFlfREVGQVVMVCxQUklPUklUWV9MT1csUFJJT1JJVFlfTUlOLFBSSU9SSVRZX0hJR0gsUFJJT1JJVFlfTUFYfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgUHJpb3JpdHkge30KKwogICAgIC8qKgogICAgICAqIERlZmF1bHQgbm90aWZpY2F0aW9uIHtAbGluayAjcHJpb3JpdHl9LiBJZiB5b3VyIGFwcGxpY2F0aW9uIGRvZXMgbm90IHByaW9yaXRpemUgaXRzIG93bgogICAgICAqIG5vdGlmaWNhdGlvbnMsIHVzZSB0aGlzIHZhbHVlIGZvciBhbGwgbm90aWZpY2F0aW9ucy4KQEAgLTM5MSw2ICszOTksNyBAQAogICAgICAqIHN5c3RlbSB3aWxsIG1ha2UgYSBkZXRlcm1pbmF0aW9uIGFib3V0IGhvdyB0byBpbnRlcnByZXQgdGhpcyBwcmlvcml0eSB3aGVuIHByZXNlbnRpbmcKICAgICAgKiB0aGUgbm90aWZpY2F0aW9uLgogICAgICAqLworICAgIEBQcmlvcml0eQogICAgIHB1YmxpYyBpbnQgcHJpb3JpdHk7CiAKICAgICAvKioKQEAgLTE1NTAsNyArMTU1OSw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEBzZWUgTm90aWZpY2F0aW9uI3ByaW9yaXR5CiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRQcmlvcml0eShpbnQgcHJpKSB7CisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFByaW9yaXR5KEBQcmlvcml0eSBpbnQgcHJpKSB7CiAgICAgICAgICAgICBtUHJpb3JpdHkgPSBwcmk7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfQpAQCAtMTc3OCw3ICsxNzg3LDcgQEAKICAgICAgICAgICAgIFJlbW90ZVZpZXdzIGJ1dHRvbiA9IG5ldyBSZW1vdGVWaWV3cyhtQ29udGV4dC5nZXRQYWNrYWdlTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICB0b21ic3RvbmUgPyBSLmxheW91dC5ub3RpZmljYXRpb25fYWN0aW9uX3RvbWJzdG9uZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBSLmxheW91dC5ub3RpZmljYXRpb25fYWN0aW9uKTsKLSAgICAgICAgICAgIGJ1dHRvbi5zZXRUZXh0Vmlld0NvbXBvdW5kRHJhd2FibGVzKFIuaWQuYWN0aW9uMCwgYWN0aW9uLmljb24sIDAsIDAsIDApOworICAgICAgICAgICAgYnV0dG9uLnNldFRleHRWaWV3Q29tcG91bmREcmF3YWJsZXNSZWxhdGl2ZShSLmlkLmFjdGlvbjAsIGFjdGlvbi5pY29uLCAwLCAwLCAwKTsKICAgICAgICAgICAgIGJ1dHRvbi5zZXRUZXh0Vmlld1RleHQoUi5pZC5hY3Rpb24wLCBhY3Rpb24udGl0bGUpOwogICAgICAgICAgICAgaWYgKCF0b21ic3RvbmUpIHsKICAgICAgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja1BlbmRpbmdJbnRlbnQoUi5pZC5hY3Rpb24wLCBhY3Rpb24uYWN0aW9uSW50ZW50KTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvUGVuZGluZ0ludGVudC5qYXZhCmluZGV4IGY2ZTFmNzIuLmQzYjA3NjMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9QZW5kaW5nSW50ZW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1BlbmRpbmdJbnRlbnQuamF2YQpAQCAtMTYsNiArMTYsOSBAQAogCiBwYWNrYWdlIGFuZHJvaWQuYXBwOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSUludGVudFJlY2VpdmVyOwpAQCAtMzAsNiArMzMsOSBAQAogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQW5kcm9pZEV4Y2VwdGlvbjsKIAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CisKIC8qKgogICogQSBkZXNjcmlwdGlvbiBvZiBhbiBJbnRlbnQgYW5kIHRhcmdldCBhY3Rpb24gdG8gcGVyZm9ybSB3aXRoIGl0LiAgSW5zdGFuY2VzCiAgKiBvZiB0aGlzIGNsYXNzIGFyZSBjcmVhdGVkIHdpdGgge0BsaW5rICNnZXRBY3Rpdml0eX0sIHtAbGluayAjZ2V0QWN0aXZpdGllc30sCkBAIC04Niw2ICs5MiwyNiBAQAogcHVibGljIGZpbmFsIGNsYXNzIFBlbmRpbmdJbnRlbnQgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKICAgICBwcml2YXRlIGZpbmFsIElJbnRlbnRTZW5kZXIgbVRhcmdldDsKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoZmxhZyA9IHRydWUsCisgICAgICAgICAgICB2YWx1ZSA9IHsKKyAgICAgICAgICAgICAgICAgICAgRkxBR19PTkVfU0hPVCwKKyAgICAgICAgICAgICAgICAgICAgRkxBR19OT19DUkVBVEUsCisgICAgICAgICAgICAgICAgICAgIEZMQUdfQ0FOQ0VMX0NVUlJFTlQsCisgICAgICAgICAgICAgICAgICAgIEZMQUdfVVBEQVRFX0NVUlJFTlQsCisKKyAgICAgICAgICAgICAgICAgICAgSW50ZW50LkZJTExfSU5fQUNUSU9OLAorICAgICAgICAgICAgICAgICAgICBJbnRlbnQuRklMTF9JTl9EQVRBLAorICAgICAgICAgICAgICAgICAgICBJbnRlbnQuRklMTF9JTl9DQVRFR09SSUVTLAorICAgICAgICAgICAgICAgICAgICBJbnRlbnQuRklMTF9JTl9DT01QT05FTlQsCisgICAgICAgICAgICAgICAgICAgIEludGVudC5GSUxMX0lOX1BBQ0tBR0UsCisgICAgICAgICAgICAgICAgICAgIEludGVudC5GSUxMX0lOX1NPVVJDRV9CT1VORFMsCisgICAgICAgICAgICAgICAgICAgIEludGVudC5GSUxMX0lOX1NFTEVDVE9SLAorICAgICAgICAgICAgICAgICAgICBJbnRlbnQuRklMTF9JTl9DTElQX0RBVEEKKyAgICAgICAgICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIEZsYWdzIHt9CisKICAgICAvKioKICAgICAgKiBGbGFnIGluZGljYXRpbmcgdGhhdCB0aGlzIFBlbmRpbmdJbnRlbnQgY2FuIGJlIHVzZWQgb25seSBvbmNlLgogICAgICAqIEZvciB1c2Ugd2l0aCB7QGxpbmsgI2dldEFjdGl2aXR5fSwge0BsaW5rICNnZXRCcm9hZGNhc3R9LCBhbmQKQEAgLTIyMiw3ICsyNDgsNyBAQAogICAgICAqIHN1cHBsaWVkLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUGVuZGluZ0ludGVudCBnZXRBY3Rpdml0eShDb250ZXh0IGNvbnRleHQsIGludCByZXF1ZXN0Q29kZSwKLSAgICAgICAgICAgIEludGVudCBpbnRlbnQsIGludCBmbGFncykgeworICAgICAgICAgICAgSW50ZW50IGludGVudCwgQEZsYWdzIGludCBmbGFncykgewogICAgICAgICByZXR1cm4gZ2V0QWN0aXZpdHkoY29udGV4dCwgcmVxdWVzdENvZGUsIGludGVudCwgZmxhZ3MsIG51bGwpOwogICAgIH0KIApAQCAtMjU1LDcgKzI4MSw3IEBACiAgICAgICogc3VwcGxpZWQuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQZW5kaW5nSW50ZW50IGdldEFjdGl2aXR5KENvbnRleHQgY29udGV4dCwgaW50IHJlcXVlc3RDb2RlLAotICAgICAgICAgICAgSW50ZW50IGludGVudCwgaW50IGZsYWdzLCBCdW5kbGUgb3B0aW9ucykgeworICAgICAgICAgICAgQE5vbk51bGwgSW50ZW50IGludGVudCwgQEZsYWdzIGludCBmbGFncywgQE51bGxhYmxlIEJ1bmRsZSBvcHRpb25zKSB7CiAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKTsKICAgICAgICAgU3RyaW5nIHJlc29sdmVkVHlwZSA9IGludGVudCAhPSBudWxsID8gaW50ZW50LnJlc29sdmVUeXBlSWZOZWVkZWQoCiAgICAgICAgICAgICAgICAgY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSkgOiBudWxsOwpAQCAtMjgwLDcgKzMwNiw3IEBACiAgICAgICogYWN0aXZpdHkgaXMgc3RhcnRlZCwgbm90IHdoZW4gdGhlIHBlbmRpbmcgaW50ZW50IGlzIGNyZWF0ZWQuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQZW5kaW5nSW50ZW50IGdldEFjdGl2aXR5QXNVc2VyKENvbnRleHQgY29udGV4dCwgaW50IHJlcXVlc3RDb2RlLAotICAgICAgICAgICAgSW50ZW50IGludGVudCwgaW50IGZsYWdzLCBCdW5kbGUgb3B0aW9ucywgVXNlckhhbmRsZSB1c2VyKSB7CisgICAgICAgICAgICBATm9uTnVsbCBJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MsIEJ1bmRsZSBvcHRpb25zLCBVc2VySGFuZGxlIHVzZXIpIHsKICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gY29udGV4dC5nZXRQYWNrYWdlTmFtZSgpOwogICAgICAgICBTdHJpbmcgcmVzb2x2ZWRUeXBlID0gaW50ZW50ICE9IG51bGwgPyBpbnRlbnQucmVzb2x2ZVR5cGVJZk5lZWRlZCgKICAgICAgICAgICAgICAgICBjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpKSA6IG51bGw7CkBAIC0zNDUsNyArMzcxLDcgQEAKICAgICAgKiBzdXBwbGllZC4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFBlbmRpbmdJbnRlbnQgZ2V0QWN0aXZpdGllcyhDb250ZXh0IGNvbnRleHQsIGludCByZXF1ZXN0Q29kZSwKLSAgICAgICAgICAgIEludGVudFtdIGludGVudHMsIGludCBmbGFncykgeworICAgICAgICAgICAgQE5vbk51bGwgSW50ZW50W10gaW50ZW50cywgQEZsYWdzIGludCBmbGFncykgewogICAgICAgICByZXR1cm4gZ2V0QWN0aXZpdGllcyhjb250ZXh0LCByZXF1ZXN0Q29kZSwgaW50ZW50cywgZmxhZ3MsIG51bGwpOwogICAgIH0KIApAQCAtMzk1LDcgKzQyMSw3IEBACiAgICAgICogc3VwcGxpZWQuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQZW5kaW5nSW50ZW50IGdldEFjdGl2aXRpZXMoQ29udGV4dCBjb250ZXh0LCBpbnQgcmVxdWVzdENvZGUsCi0gICAgICAgICAgICBJbnRlbnRbXSBpbnRlbnRzLCBpbnQgZmxhZ3MsIEJ1bmRsZSBvcHRpb25zKSB7CisgICAgICAgICAgICBATm9uTnVsbCBJbnRlbnRbXSBpbnRlbnRzLCBARmxhZ3MgaW50IGZsYWdzLCBATnVsbGFibGUgQnVuZGxlIG9wdGlvbnMpIHsKICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gY29udGV4dC5nZXRQYWNrYWdlTmFtZSgpOwogICAgICAgICBTdHJpbmdbXSByZXNvbHZlZFR5cGVzID0gbmV3IFN0cmluZ1tpbnRlbnRzLmxlbmd0aF07CiAgICAgICAgIGZvciAoaW50IGk9MDsgaTxpbnRlbnRzLmxlbmd0aDsgaSsrKSB7CkBAIC00MjEsNyArNDQ3LDcgQEAKICAgICAgKiBhY3Rpdml0eSBpcyBzdGFydGVkLCBub3Qgd2hlbiB0aGUgcGVuZGluZyBpbnRlbnQgaXMgY3JlYXRlZC4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFBlbmRpbmdJbnRlbnQgZ2V0QWN0aXZpdGllc0FzVXNlcihDb250ZXh0IGNvbnRleHQsIGludCByZXF1ZXN0Q29kZSwKLSAgICAgICAgICAgIEludGVudFtdIGludGVudHMsIGludCBmbGFncywgQnVuZGxlIG9wdGlvbnMsIFVzZXJIYW5kbGUgdXNlcikgeworICAgICAgICAgICAgQE5vbk51bGwgSW50ZW50W10gaW50ZW50cywgaW50IGZsYWdzLCBCdW5kbGUgb3B0aW9ucywgVXNlckhhbmRsZSB1c2VyKSB7CiAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKTsKICAgICAgICAgU3RyaW5nW10gcmVzb2x2ZWRUeXBlcyA9IG5ldyBTdHJpbmdbaW50ZW50cy5sZW5ndGhdOwogICAgICAgICBmb3IgKGludCBpPTA7IGk8aW50ZW50cy5sZW5ndGg7IGkrKykgewpAQCAtNDY1LDcgKzQ5MSw3IEBACiAgICAgICogc3VwcGxpZWQuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQZW5kaW5nSW50ZW50IGdldEJyb2FkY2FzdChDb250ZXh0IGNvbnRleHQsIGludCByZXF1ZXN0Q29kZSwKLSAgICAgICAgICAgIEludGVudCBpbnRlbnQsIGludCBmbGFncykgeworICAgICAgICAgICAgSW50ZW50IGludGVudCwgQEZsYWdzIGludCBmbGFncykgewogICAgICAgICByZXR1cm4gZ2V0QnJvYWRjYXN0QXNVc2VyKGNvbnRleHQsIHJlcXVlc3RDb2RlLCBpbnRlbnQsIGZsYWdzLAogICAgICAgICAgICAgICAgIG5ldyBVc2VySGFuZGxlKFVzZXJIYW5kbGUubXlVc2VySWQoKSkpOwogICAgIH0KQEAgLTUxOSw3ICs1NDUsNyBAQAogICAgICAqIHN1cHBsaWVkLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUGVuZGluZ0ludGVudCBnZXRTZXJ2aWNlKENvbnRleHQgY29udGV4dCwgaW50IHJlcXVlc3RDb2RlLAotICAgICAgICAgICAgSW50ZW50IGludGVudCwgaW50IGZsYWdzKSB7CisgICAgICAgICAgICBATm9uTnVsbCBJbnRlbnQgaW50ZW50LCBARmxhZ3MgaW50IGZsYWdzKSB7CiAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKTsKICAgICAgICAgU3RyaW5nIHJlc29sdmVkVHlwZSA9IGludGVudCAhPSBudWxsID8gaW50ZW50LnJlc29sdmVUeXBlSWZOZWVkZWQoCiAgICAgICAgICAgICAgICAgY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSkgOiBudWxsOwpAQCAtNzQ5LDYgKzc3NSw3IEBACiAgICAgICogQHJldHVybiBUaGUgcGFja2FnZSBuYW1lIG9mIHRoZSBQZW5kaW5nSW50ZW50LCBvciBudWxsIGlmIHRoZXJlIGlzCiAgICAgICogbm9uZSBhc3NvY2lhdGVkIHdpdGggaXQuCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgcHVibGljIFN0cmluZyBnZXRDcmVhdG9yUGFja2FnZSgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpCkBAIC04MDcsNiArODM0LDcgQEAKICAgICAgKiBAcmV0dXJuIFRoZSB1c2VyIGhhbmRsZSBvZiB0aGUgUGVuZGluZ0ludGVudCwgb3IgbnVsbCBpZiB0aGVyZSBpcwogICAgICAqIG5vbmUgYXNzb2NpYXRlZCB3aXRoIGl0LgogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIHB1YmxpYyBVc2VySGFuZGxlIGdldENyZWF0b3JVc2VySGFuZGxlKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IHVpZCA9IEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkKQEAgLTkyMiw4ICs5NTAsOCBAQAogICAgICAqIEBwYXJhbSBzZW5kZXIgVGhlIFBlbmRpbmdJbnRlbnQgdG8gd3JpdGUsIG9yIG51bGwuCiAgICAgICogQHBhcmFtIG91dCBXaGVyZSB0byB3cml0ZSB0aGUgUGVuZGluZ0ludGVudC4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVQZW5kaW5nSW50ZW50T3JOdWxsVG9QYXJjZWwoUGVuZGluZ0ludGVudCBzZW5kZXIsCi0gICAgICAgICAgICBQYXJjZWwgb3V0KSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlUGVuZGluZ0ludGVudE9yTnVsbFRvUGFyY2VsKEBOdWxsYWJsZSBQZW5kaW5nSW50ZW50IHNlbmRlciwKKyAgICAgICAgICAgIEBOb25OdWxsIFBhcmNlbCBvdXQpIHsKICAgICAgICAgb3V0LndyaXRlU3Ryb25nQmluZGVyKHNlbmRlciAhPSBudWxsID8gc2VuZGVyLm1UYXJnZXQuYXNCaW5kZXIoKQogICAgICAgICAgICAgICAgIDogbnVsbCk7CiAgICAgfQpAQCAtOTM4LDcgKzk2Niw4IEBACiAgICAgICogQHJldHVybiBSZXR1cm5zIHRoZSBNZXNzZW5nZXIgcmVhZCBmcm9tIHRoZSBQYXJjZWwsIG9yIG51bGwgaWYgbnVsbCBoYWQKICAgICAgKiBiZWVuIHdyaXR0ZW4uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBQZW5kaW5nSW50ZW50IHJlYWRQZW5kaW5nSW50ZW50T3JOdWxsRnJvbVBhcmNlbChQYXJjZWwgaW4pIHsKKyAgICBATnVsbGFibGUKKyAgICBwdWJsaWMgc3RhdGljIFBlbmRpbmdJbnRlbnQgcmVhZFBlbmRpbmdJbnRlbnRPck51bGxGcm9tUGFyY2VsKEBOb25OdWxsIFBhcmNlbCBpbikgewogICAgICAgICBJQmluZGVyIGIgPSBpbi5yZWFkU3Ryb25nQmluZGVyKCk7CiAgICAgICAgIHJldHVybiBiICE9IG51bGwgPyBuZXcgUGVuZGluZ0ludGVudChiKSA6IG51bGw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1Jlc3VsdEluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9SZXN1bHRJbmZvLmphdmEKaW5kZXggNDhhMGZjMi4uNWUwODY3YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1Jlc3VsdEluZm8uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvUmVzdWx0SW5mby5qYXZhCkBAIC0xNywxMiArMTcsOCBAQAogcGFja2FnZSBhbmRyb2lkLmFwcDsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKIC8qKgogICoge0BoaWRlfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1NlYXJjaE1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9TZWFyY2hNYW5hZ2VyLmphdmEKaW5kZXggZjljMjQ1ZS4uMzNjMzQwOSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1NlYXJjaE1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvU2VhcmNoTWFuYWdlci5qYXZhCkBAIC0yMiw3ICsyMiw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwpAQCAtMzQsNyArMzMsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwogCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvU2hhcmVkUHJlZmVyZW5jZXNJbXBsLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvU2hhcmVkUHJlZmVyZW5jZXNJbXBsLmphdmEKaW5kZXggODZmZDdiOS4uZGQ4ODJjZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1NoYXJlZFByZWZlcmVuY2VzSW1wbC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9TaGFyZWRQcmVmZXJlbmNlc0ltcGwuamF2YQpAQCAtNDIsNyArNDIsNiBAQAogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiBpbXBvcnQgamF2YS51dGlsLldlYWtIYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yU2VydmljZTsKIAogaW1wb3J0IGxpYmNvcmUuaW8uRXJybm9FeGNlcHRpb247CiBpbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1Rhc2tTdGFja0J1aWxkZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9UYXNrU3RhY2tCdWlsZGVyLmphdmEKaW5kZXggM2UwYWM3ZS4uMDA3N2RiMSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1Rhc2tTdGFja0J1aWxkZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvVGFza1N0YWNrQnVpbGRlci5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5hcHA7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwpAQCAtMjQ0LDcgKzI0NSw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBvYnRhaW5lZCBQZW5kaW5nSW50ZW50CiAgICAgICovCi0gICAgcHVibGljIFBlbmRpbmdJbnRlbnQgZ2V0UGVuZGluZ0ludGVudChpbnQgcmVxdWVzdENvZGUsIGludCBmbGFncykgeworICAgIHB1YmxpYyBQZW5kaW5nSW50ZW50IGdldFBlbmRpbmdJbnRlbnQoaW50IHJlcXVlc3RDb2RlLCBAUGVuZGluZ0ludGVudC5GbGFncyBpbnQgZmxhZ3MpIHsKICAgICAgICAgcmV0dXJuIGdldFBlbmRpbmdJbnRlbnQocmVxdWVzdENvZGUsIGZsYWdzLCBudWxsKTsKICAgICB9CiAKQEAgLTI2Myw3ICsyNjQsOCBAQAogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgb2J0YWluZWQgUGVuZGluZ0ludGVudAogICAgICAqLwotICAgIHB1YmxpYyBQZW5kaW5nSW50ZW50IGdldFBlbmRpbmdJbnRlbnQoaW50IHJlcXVlc3RDb2RlLCBpbnQgZmxhZ3MsIEJ1bmRsZSBvcHRpb25zKSB7CisgICAgcHVibGljIFBlbmRpbmdJbnRlbnQgZ2V0UGVuZGluZ0ludGVudChpbnQgcmVxdWVzdENvZGUsIEBQZW5kaW5nSW50ZW50LkZsYWdzIGludCBmbGFncywKKyAgICAgICAgICAgIEJ1bmRsZSBvcHRpb25zKSB7CiAgICAgICAgIGlmIChtSW50ZW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICJObyBpbnRlbnRzIGFkZGVkIHRvIFRhc2tTdGFja0J1aWxkZXI7IGNhbm5vdCBnZXRQZW5kaW5nSW50ZW50Iik7CkBAIC0yOTQsNiArMjk2LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW50ZW50cyBhZGRlZCB0byB0aGlzIGJ1aWxkZXIuCiAgICAgICovCisgICAgQE5vbk51bGwKICAgICBwdWJsaWMgSW50ZW50W10gZ2V0SW50ZW50cygpIHsKICAgICAgICAgSW50ZW50W10gaW50ZW50cyA9IG5ldyBJbnRlbnRbbUludGVudHMuc2l6ZSgpXTsKICAgICAgICAgaWYgKGludGVudHMubGVuZ3RoID09IDApIHJldHVybiBpbnRlbnRzOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1RpbWVQaWNrZXJEaWFsb2cuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9UaW1lUGlja2VyRGlhbG9nLmphdmEKaW5kZXggOTUyMjI3Zi4uYTg1YzYxZiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1RpbWVQaWNrZXJEaWFsb2cuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvVGltZVBpY2tlckRpYWxvZy5qYXZhCkBAIC0xNiwxNyArMTYsMTkgQEAKIAogcGFja2FnZSBhbmRyb2lkLmFwcDsKIAotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7Ci0KIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwogaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UaW1lUGlja2VyOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRpbWVQaWNrZXIuT25UaW1lQ2hhbmdlZExpc3RlbmVyOwogCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKKworCiAvKioKICAqIEEgZGlhbG9nIHRoYXQgcHJvbXB0cyB0aGUgdXNlciBmb3IgdGhlIHRpbWUgb2YgZGF5IHVzaW5nIGEge0BsaW5rIFRpbWVQaWNrZXJ9LgogICoKQEAgLTM4LDcgKzQwLDcgQEAKIAogICAgIC8qKgogICAgICAqIFRoZSBjYWxsYmFjayBpbnRlcmZhY2UgdXNlZCB0byBpbmRpY2F0ZSB0aGUgdXNlciBpcyBkb25lIGZpbGxpbmcgaW4KLSAgICAgKiB0aGUgdGltZSAodGhleSBjbGlja2VkIG9uIHRoZSAnU2V0JyBidXR0b24pLgorICAgICAqIHRoZSB0aW1lICh0aGV5IGNsaWNrZWQgb24gdGhlICdEb25lJyBidXR0b24pLgogICAgICAqLwogICAgIHB1YmxpYyBpbnRlcmZhY2UgT25UaW1lU2V0TGlzdGVuZXIgewogCkBAIC01NSw3ICs1Nyw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElTXzI0X0hPVVIgPSAiaXMyNGhvdXIiOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBUaW1lUGlja2VyIG1UaW1lUGlja2VyOwotICAgIHByaXZhdGUgZmluYWwgT25UaW1lU2V0TGlzdGVuZXIgbUNhbGxiYWNrOworICAgIHByaXZhdGUgZmluYWwgT25UaW1lU2V0TGlzdGVuZXIgbVRpbWVTZXRDYWxsYmFjazsKIAogICAgIGludCBtSW5pdGlhbEhvdXJPZkRheTsKICAgICBpbnQgbUluaXRpYWxNaW51dGU7CkBAIC03NCw2ICs3NiwxNiBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIDAsIGNhbGxCYWNrLCBob3VyT2ZEYXksIG1pbnV0ZSwgaXMyNEhvdXJWaWV3KTsKICAgICB9CiAKKyAgICBzdGF0aWMgaW50IHJlc29sdmVEaWFsb2dUaGVtZShDb250ZXh0IGNvbnRleHQsIGludCByZXNpZCkgeworICAgICAgICBpZiAocmVzaWQgPT0gMCkgeworICAgICAgICAgICAgVHlwZWRWYWx1ZSBvdXRWYWx1ZSA9IG5ldyBUeXBlZFZhbHVlKCk7CisgICAgICAgICAgICBjb250ZXh0LmdldFRoZW1lKCkucmVzb2x2ZUF0dHJpYnV0ZShSLmF0dHIudGltZVBpY2tlckRpYWxvZ1RoZW1lLCBvdXRWYWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gb3V0VmFsdWUucmVzb3VyY2VJZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiByZXNpZDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIEBwYXJhbSBjb250ZXh0IFBhcmVudC4KICAgICAgKiBAcGFyYW0gdGhlbWUgdGhlIHRoZW1lIHRvIGFwcGx5IHRvIHRoaXMgZGlhbG9nCkBAIC04NiwxNyArOTgsMTMgQEAKICAgICAgICAgICAgIGludCB0aGVtZSwKICAgICAgICAgICAgIE9uVGltZVNldExpc3RlbmVyIGNhbGxCYWNrLAogICAgICAgICAgICAgaW50IGhvdXJPZkRheSwgaW50IG1pbnV0ZSwgYm9vbGVhbiBpczI0SG91clZpZXcpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgdGhlbWUpOwotICAgICAgICBtQ2FsbGJhY2sgPSBjYWxsQmFjazsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgcmVzb2x2ZURpYWxvZ1RoZW1lKGNvbnRleHQsIHRoZW1lKSk7CisgICAgICAgIG1UaW1lU2V0Q2FsbGJhY2sgPSBjYWxsQmFjazsKICAgICAgICAgbUluaXRpYWxIb3VyT2ZEYXkgPSBob3VyT2ZEYXk7CiAgICAgICAgIG1Jbml0aWFsTWludXRlID0gbWludXRlOwogICAgICAgICBtSXMyNEhvdXJWaWV3ID0gaXMyNEhvdXJWaWV3OwogCi0gICAgICAgIHNldEljb24oMCk7Ci0gICAgICAgIHNldFRpdGxlKFIuc3RyaW5nLnRpbWVfcGlja2VyX2RpYWxvZ190aXRsZSk7Ci0KICAgICAgICAgQ29udGV4dCB0aGVtZUNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgICAgIHNldEJ1dHRvbihCVVRUT05fUE9TSVRJVkUsIHRoZW1lQ29udGV4dC5nZXRUZXh0KFIuc3RyaW5nLmRhdGVfdGltZV9kb25lKSwgdGhpcyk7CiAKICAgICAgICAgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIgPQogICAgICAgICAgICAgICAgIChMYXlvdXRJbmZsYXRlcikgdGhlbWVDb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5MQVlPVVRfSU5GTEFURVJfU0VSVklDRSk7CkBAIC0xMDQsNyArMTEyLDE4IEBACiAgICAgICAgIHNldFZpZXcodmlldyk7CiAgICAgICAgIG1UaW1lUGlja2VyID0gKFRpbWVQaWNrZXIpIHZpZXcuZmluZFZpZXdCeUlkKFIuaWQudGltZVBpY2tlcik7CiAKLSAgICAgICAgLy8gaW5pdGlhbGl6ZSBzdGF0ZQorICAgICAgICAvLyBJbml0aWFsaXplIHN0YXRlCisgICAgICAgIG1UaW1lUGlja2VyLnNldExlZ2FjeU1vZGUoZmFsc2UgLyogd2lsbCBzaG93IG5ldyBVSSAqLyk7CisgICAgICAgIG1UaW1lUGlja2VyLnNldFNob3dEb25lQnV0dG9uKHRydWUpOworICAgICAgICBtVGltZVBpY2tlci5zZXREaXNtaXNzQ2FsbGJhY2sobmV3IFRpbWVQaWNrZXIuVGltZVBpY2tlckRpc21pc3NDYWxsYmFjaygpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgZGlzbWlzcyhUaW1lUGlja2VyIHZpZXcsIGJvb2xlYW4gaXNDYW5jZWwsIGludCBob3VyT2ZEYXksIGludCBtaW51dGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzQ2FuY2VsKSB7CisgICAgICAgICAgICAgICAgICAgIG1UaW1lU2V0Q2FsbGJhY2sub25UaW1lU2V0KHZpZXcsIGhvdXJPZkRheSwgbWludXRlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVGltZVBpY2tlckRpYWxvZy50aGlzLmRpc21pc3MoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgICAgIG1UaW1lUGlja2VyLnNldElzMjRIb3VyVmlldyhtSXMyNEhvdXJWaWV3KTsKICAgICAgICAgbVRpbWVQaWNrZXIuc2V0Q3VycmVudEhvdXIobUluaXRpYWxIb3VyT2ZEYXkpOwogICAgICAgICBtVGltZVBpY2tlci5zZXRDdXJyZW50TWludXRlKG1Jbml0aWFsTWludXRlKTsKQEAgLTEyNSw5ICsxNDQsOSBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0cnlOb3RpZnlUaW1lU2V0KCkgewotICAgICAgICBpZiAobUNhbGxiYWNrICE9IG51bGwpIHsKKyAgICAgICAgaWYgKG1UaW1lU2V0Q2FsbGJhY2sgIT0gbnVsbCkgewogICAgICAgICAgICAgbVRpbWVQaWNrZXIuY2xlYXJGb2N1cygpOwotICAgICAgICAgICAgbUNhbGxiYWNrLm9uVGltZVNldChtVGltZVBpY2tlciwgbVRpbWVQaWNrZXIuZ2V0Q3VycmVudEhvdXIoKSwKKyAgICAgICAgICAgIG1UaW1lU2V0Q2FsbGJhY2sub25UaW1lU2V0KG1UaW1lUGlja2VyLCBtVGltZVBpY2tlci5nZXRDdXJyZW50SG91cigpLAogICAgICAgICAgICAgICAgICAgICBtVGltZVBpY2tlci5nZXRDdXJyZW50TWludXRlKCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1dhbGxwYXBlck1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9XYWxscGFwZXJNYW5hZ2VyLmphdmEKaW5kZXggY2VkNzJmOC4uNDQzNTAzMiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1dhbGxwYXBlck1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvV2FsbHBhcGVyTWFuYWdlci5qYXZhCkBAIC00MSw3ICs0MSw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwpAQCAtMjIxLDI0ICsyMjAsOSBAQAogICAgICAgICAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19DTEVBUl9XQUxMUEFQRVIgPSAxOwogICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIG1IYW5kbGVyOwotICAgICAgICAKICAgICAgICAgR2xvYmFscyhMb29wZXIgbG9vcGVyKSB7CiAgICAgICAgICAgICBJQmluZGVyIGIgPSBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKENvbnRleHQuV0FMTFBBUEVSX1NFUlZJQ0UpOwogICAgICAgICAgICAgbVNlcnZpY2UgPSBJV2FsbHBhcGVyTWFuYWdlci5TdHViLmFzSW50ZXJmYWNlKGIpOwotICAgICAgICAgICAgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcihsb29wZXIpIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTVNHX0NMRUFSX1dBTExQQVBFUjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdhbGxwYXBlciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EZWZhdWx0V2FsbHBhcGVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBwdWJsaWMgdm9pZCBvbldhbGxwYXBlckNoYW5nZWQoKSB7CkBAIC0yNDcsNyArMjMxLDEwIEBACiAgICAgICAgICAgICAgKiB0byBudWxsIHNvIGlmIHRoZSB1c2VyIHJlcXVlc3RzIHRoZSB3YWxscGFwZXIgYWdhaW4gdGhlbiB3ZSdsbAogICAgICAgICAgICAgICogZmV0Y2ggaXQuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRFbXB0eU1lc3NhZ2UoTVNHX0NMRUFSX1dBTExQQVBFUik7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBtV2FsbHBhcGVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtRGVmYXVsdFdhbGxwYXBlciA9IG51bGw7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgQml0bWFwIHBlZWtXYWxscGFwZXJCaXRtYXAoQ29udGV4dCBjb250ZXh0LCBib29sZWFuIHJldHVybkRlZmF1bHQpIHsKQEAgLTI4MCw3ICsyNjcsNiBAQAogICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICAgICAgbVdhbGxwYXBlciA9IG51bGw7CiAgICAgICAgICAgICAgICAgbURlZmF1bHRXYWxscGFwZXIgPSBudWxsOwotICAgICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE1TR19DTEVBUl9XQUxMUEFQRVIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9iYWNrdXAvRnVsbEJhY2t1cC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2JhY2t1cC9GdWxsQmFja3VwLmphdmEKaW5kZXggY2IwNzM3ZS4uY2ZkMGE2NSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2JhY2t1cC9GdWxsQmFja3VwLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2JhY2t1cC9GdWxsQmFja3VwLmphdmEKQEAgLTE2LDkgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmFwcC5iYWNrdXA7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9iYWNrdXAvU2hhcmVkUHJlZmVyZW5jZXNCYWNrdXBIZWxwZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9iYWNrdXAvU2hhcmVkUHJlZmVyZW5jZXNCYWNrdXBIZWxwZXIuamF2YQppbmRleCAyMTNiZDMxLi45Mzk2MTZiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvYmFja3VwL1NoYXJlZFByZWZlcmVuY2VzQmFja3VwSGVscGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2JhY2t1cC9TaGFyZWRQcmVmZXJlbmNlc0JhY2t1cEhlbHBlci5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmFwcC5RdWV1ZWRXb3JrOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlczsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRIb3N0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHB3aWRnZXQvQXBwV2lkZ2V0SG9zdC5qYXZhCmluZGV4IGYxMDRkNzEuLjg0ZDM4MzUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRIb3N0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwd2lkZ2V0L0FwcFdpZGdldEhvc3QuamF2YQpAQCAtMTksNyArMTksNiBAQAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eVRocmVhZDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CkBAIC0zMSw3ICszMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuUmVtb3RlVmlld3M7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuUmVtb3RlVmlld3MuT25DbGlja0hhbmRsZXI7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHB3aWRnZXQvQXBwV2lkZ2V0TWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwd2lkZ2V0L0FwcFdpZGdldE1hbmFnZXIuamF2YQppbmRleCBkMWM3YmVjLi44YTg5Y2JjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHB3aWRnZXQvQXBwV2lkZ2V0TWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcHdpZGdldC9BcHBXaWRnZXRNYW5hZ2VyLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmFwcHdpZGdldDsKIAotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlck5hdGl2ZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEFkYXB0ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhBZGFwdGVyLmphdmEKaW5kZXggZTJiYzgwYS4uN2VlMjMxMyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEFkYXB0ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoQWRhcHRlci5qYXZhCkBAIC0xOSw5ICsxOSw3IEBACiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlNka0NvbnN0YW50OwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudC5TZGtDb25zdGFudFR5cGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbFV1aWQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKQEAgLTM0LDEwICszMiw4IEBACiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiBpbXBvcnQgamF2YS51dGlsLlVVSUQ7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2UuamF2YQppbmRleCBkNzg5YTk0Li4xYmQ2OThkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoRGV2aWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aERldmljZS5qYXZhCkBAIC0xOSwxMiArMTksMTAgQEAKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU2RrQ29uc3RhbnQ7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlNka0NvbnN0YW50LlNka0NvbnN0YW50VHlwZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsVXVpZDsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0LmphdmEKaW5kZXggYTJiYjc4Yy4uYjZlMWJiMyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5qYXZhCkBAIC0xOCwxOCArMTgsOSBAQAogCiBpbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoRGV2aWNlOwogaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLkJsdWV0b290aFByb2ZpbGU7Ci1pbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoUHJvZmlsZS5TZXJ2aWNlTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguSUJsdWV0b290aE1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguSUJsdWV0b290aFN0YXRlQ2hhbmdlQ2FsbGJhY2s7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxVdWlkOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dENoYXJhY3RlcmlzdGljLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dENoYXJhY3RlcmlzdGljLmphdmEKaW5kZXggZjBlY2JiNC4uYTg2Njc3YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRDaGFyYWN0ZXJpc3RpYy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0Q2hhcmFjdGVyaXN0aWMuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogcGFja2FnZSBhbmRyb2lkLmJsdWV0b290aDsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLklsbGVnYWxGb3JtYXRDb252ZXJzaW9uRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5VVUlEOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dFNlcnZlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRTZXJ2ZXIuamF2YQppbmRleCA1OGVlNTRmLi4wOTA3MmY5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dFNlcnZlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0U2VydmVyLmphdmEKQEAgLTE5LDE4ICsxOSw5IEBACiBpbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoQWRhcHRlcjsKIGltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhEZXZpY2U7CiBpbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoUHJvZmlsZTsKLWltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhQcm9maWxlLlNlcnZpY2VMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5JQmx1ZXRvb3RoTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5JQmx1ZXRvb3RoU3RhdGVDaGFuZ2VDYWxsYmFjazsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbFV1aWQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0U2VydmVyQ2FsbGJhY2suamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0U2VydmVyQ2FsbGJhY2suamF2YQppbmRleCBmOWYxZDk3Li5mYzNmZmU4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dFNlcnZlckNhbGxiYWNrLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHRTZXJ2ZXJDYWxsYmFjay5qYXZhCkBAIC0xOCw4ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhEZXZpY2U7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIFRoaXMgYWJzdHJhY3QgY2xhc3MgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIEJsdWV0b290aEdhdHRTZXJ2ZXJ9IGNhbGxiYWNrcy4KICAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEhlYWx0aC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEhlYWx0aC5qYXZhCmluZGV4IDJlOTUwZmEuLmRhZjNiYWQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhIZWFsdGguamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoSGVhbHRoLmphdmEKQEAgLTIzLDcgKzIzLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aElucHV0RGV2aWNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoSW5wdXREZXZpY2UuamF2YQppbmRleCA4NDRmNDMyLi5jNGJhNWIxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoSW5wdXREZXZpY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoSW5wdXREZXZpY2UuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhNYXAuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhNYXAuamF2YQppbmRleCA5MmEyZjFlLi41YTFiN2FhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoTWFwLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aE1hcC5qYXZhCkBAIC0yNCw3ICsyNCw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFBhbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFBhbi5qYXZhCmluZGV4IGI3YTM3ZjQuLmU3MjgzMmMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhQYW4uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoUGFuLmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoUGJhcC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFBiYXAuamF2YQppbmRleCA3ZjQ1NjUyLi44NTIyZWUwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoUGJhcC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhQYmFwLmphdmEKQEAgLTIyLDcgKzIyLDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoU2VydmVyU29ja2V0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoU2VydmVyU29ja2V0LmphdmEKaW5kZXggOTZiZThhMi4uYmM1NmU1NSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFNlcnZlclNvY2tldC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhTZXJ2ZXJTb2NrZXQuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLmJsdWV0b290aDsKIAogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxVdWlkOwogCiBpbXBvcnQgamF2YS5pby5DbG9zZWFibGU7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoU29ja2V0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoU29ja2V0LmphdmEKaW5kZXggZDEwZWFlYS4uZGRlZmM3MCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFNvY2tldC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhTb2NrZXQuamF2YQpAQCAtMTYsMjEgKzE2LDE2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5ibHVldG9vdGg7CiAKLWltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxVdWlkOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS5pby5DbG9zZWFibGU7CiBpbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiBpbXBvcnQgamF2YS51dGlsLlVVSUQ7CiBpbXBvcnQgYW5kcm9pZC5uZXQuTG9jYWxTb2NrZXQ7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoVGV0aGVyaW5nRGF0YVRyYWNrZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhUZXRoZXJpbmdEYXRhVHJhY2tlci5qYXZhCmluZGV4IGE5YjcxNzYuLjZkZDU1MWUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhUZXRoZXJpbmdEYXRhVHJhY2tlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhUZXRoZXJpbmdEYXRhVHJhY2tlci5qYXZhCkBAIC0xNyw5ICsxNyw2IEBACiBwYWNrYWdlIGFuZHJvaWQuYmx1ZXRvb3RoOwogCiBpbXBvcnQgYW5kcm9pZC5uZXQuQmFzZU5ldHdvcmtTdGF0ZVRyYWNrZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JTmV0d29ya01hbmFnZW1lbnRTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuRGhjcFJlc3VsdHM7CkBAIC0zNSwxMSArMzIsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2VuZ2VyOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBqYXZhLm5ldC5JbnRlcmZhY2VBZGRyZXNzOwotaW1wb3J0IGFuZHJvaWQubmV0LkxpbmtBZGRyZXNzOwotaW1wb3J0IGFuZHJvaWQubmV0LlJvdXRlSW5mbzsKLWltcG9ydCBqYXZhLm5ldC5JbmV0NEFkZHJlc3M7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Bc3luY0NoYW5uZWw7CiAKQEAgLTE0MywxMSArMTM1LDYgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZSgpIHsKLSAgICAgICAgLy8gbm90IGltcGxlbWVudGVkCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGVkKGJvb2xlYW4gaXNDYXB0aXZlUG9ydGFsKSB7CiAgICAgICAgIC8vIG5vdCBpbXBsZW1lbnRlZAogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQXN5bmNUYXNrTG9hZGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0FzeW5jVGFza0xvYWRlci5qYXZhCmluZGV4IGViNzQyNmUuLjcyNDFlMGQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQXN5bmNUYXNrTG9hZGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Bc3luY1Rhc2tMb2FkZXIuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuVGltZVV0aWxzOwogCiBpbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKQEAgLTY0LDEwICs2NCwxMCBAQAogICAgICAgICAvKiBSdW5zIG9uIGEgd29ya2VyIHRocmVhZCAqLwogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHJvdGVjdGVkIEQgZG9JbkJhY2tncm91bmQoVm9pZC4uLiBwYXJhbXMpIHsKLSAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywgdGhpcyArICIgPj4+IGRvSW5CYWNrZ3JvdW5kIik7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgdGhpcyArICIgPj4+IGRvSW5CYWNrZ3JvdW5kIik7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEQgZGF0YSA9IEFzeW5jVGFza0xvYWRlci50aGlzLm9uTG9hZEluQmFja2dyb3VuZCgpOwotICAgICAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywgdGhpcyArICIgIDw8PCBkb0luQmFja2dyb3VuZCIpOworICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCB0aGlzICsgIiAgPDw8IGRvSW5CYWNrZ3JvdW5kIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgICAgICAgICB9IGNhdGNoIChPcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmICghaXNDYW5jZWxsZWQoKSkgewpAQCAtNzksNyArNzksNyBAQAogICAgICAgICAgICAgICAgICAgICAvLyBTbyB3ZSB0cmVhdCB0aGlzIGNhc2UgYXMgYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywgdGhpcyArICIgIDw8PCBkb0luQmFja2dyb3VuZCAod2FzIGNhbmNlbGVkKSIsIGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgdGhpcyArICIgIDw8PCBkb0luQmFja2dyb3VuZCAod2FzIGNhbmNlbGVkKSIsIGV4KTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtODcsNyArODcsNyBAQAogICAgICAgICAvKiBSdW5zIG9uIHRoZSBVSSB0aHJlYWQgKi8KICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uUG9zdEV4ZWN1dGUoRCBkYXRhKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsIHRoaXMgKyAiIG9uUG9zdEV4ZWN1dGUiKTsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCB0aGlzICsgIiBvblBvc3RFeGVjdXRlIik7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEFzeW5jVGFza0xvYWRlci50aGlzLmRpc3BhdGNoT25Mb2FkQ29tcGxldGUodGhpcywgZGF0YSk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAvKiBSdW5zIG9uIHRoZSBVSSB0aHJlYWQgKi8KICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uQ2FuY2VsbGVkKEQgZGF0YSkgewotICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLnYoVEFHLCB0aGlzICsgIiBvbkNhbmNlbGxlZCIpOworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsIHRoaXMgKyAiIG9uQ2FuY2VsbGVkIik7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEFzeW5jVGFza0xvYWRlci50aGlzLmRpc3BhdGNoT25DYW5jZWxsZWQodGhpcywgZGF0YSk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewpAQCAtMTYyLDE4ICsxNjIsMTggQEAKICAgICAgICAgc3VwZXIub25Gb3JjZUxvYWQoKTsKICAgICAgICAgY2FuY2VsTG9hZCgpOwogICAgICAgICBtVGFzayA9IG5ldyBMb2FkVGFzaygpOwotICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsICJQcmVwYXJpbmcgbG9hZDogbVRhc2s9IiArIG1UYXNrKTsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJQcmVwYXJpbmcgbG9hZDogbVRhc2s9IiArIG1UYXNrKTsKICAgICAgICAgZXhlY3V0ZVBlbmRpbmdUYXNrKCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gb25DYW5jZWxMb2FkKCkgewotICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsICJvbkNhbmNlbExvYWQ6IG1UYXNrPSIgKyBtVGFzayk7CisgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAib25DYW5jZWxMb2FkOiBtVGFzaz0iICsgbVRhc2spOwogICAgICAgICBpZiAobVRhc2sgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKG1DYW5jZWxsaW5nVGFzayAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlcmUgd2FzIGEgcGVuZGluZyB0YXNrIGFscmVhZHkgd2FpdGluZyBmb3IgYSBwcmV2aW91cwogICAgICAgICAgICAgICAgIC8vIG9uZSBiZWluZyBjYW5jZWxlZDsganVzdCBkcm9wIGl0LgotICAgICAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywKKyAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywKICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5jZWxMb2FkOiBzdGlsbCB3YWl0aW5nIGZvciBjYW5jZWxsZWQgdGFzazsgZHJvcHBpbmcgbmV4dCIpOwogICAgICAgICAgICAgICAgIGlmIChtVGFzay53YWl0aW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIG1UYXNrLndhaXRpbmcgPSBmYWxzZTsKQEAgLTE4NCwxNCArMTg0LDE0IEBACiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1UYXNrLndhaXRpbmcpIHsKICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIHRhc2ssIGJ1dCBpdCBpcyB3YWl0aW5nIGZvciB0aGUgdGltZSBpdCBzaG91bGQKICAgICAgICAgICAgICAgICAvLyBleGVjdXRlLiAgV2UgY2FuIGp1c3QgdG9zcyBpdC4KLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsICJjYW5jZWxMb2FkOiB0YXNrIGlzIHdhaXRpbmcsIGRyb3BwaW5nIGl0Iik7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJjYW5jZWxMb2FkOiB0YXNrIGlzIHdhaXRpbmcsIGRyb3BwaW5nIGl0Iik7CiAgICAgICAgICAgICAgICAgbVRhc2sud2FpdGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhtVGFzayk7CiAgICAgICAgICAgICAgICAgbVRhc2sgPSBudWxsOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgYm9vbGVhbiBjYW5jZWxsZWQgPSBtVGFzay5jYW5jZWwoZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywgImNhbmNlbExvYWQ6IGNhbmNlbGxlZD0iICsgY2FuY2VsbGVkKTsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgImNhbmNlbExvYWQ6IGNhbmNlbGxlZD0iICsgY2FuY2VsbGVkKTsKICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsbGVkKSB7CiAgICAgICAgICAgICAgICAgICAgIG1DYW5jZWxsaW5nVGFzayA9IG1UYXNrOwogICAgICAgICAgICAgICAgICAgICBjYW5jZWxMb2FkSW5CYWNrZ3JvdW5kKCk7CkBAIC0yMjMsNyArMjIzLDcgQEAKICAgICAgICAgICAgICAgICBsb25nIG5vdyA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOwogICAgICAgICAgICAgICAgIGlmIChub3cgPCAobUxhc3RMb2FkQ29tcGxldGVUaW1lK21VcGRhdGVUaHJvdHRsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTm90IHlldCB0aW1lIHRvIGRvIGFub3RoZXIgbG9hZC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLnYoVEFHLCAiV2FpdGluZyB1bnRpbCAiCisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiV2FpdGluZyB1bnRpbCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAobUxhc3RMb2FkQ29tcGxldGVUaW1lK21VcGRhdGVUaHJvdHRsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdG8gZXhlY3V0ZTogIiArIG1UYXNrKTsKICAgICAgICAgICAgICAgICAgICAgbVRhc2sud2FpdGluZyA9IHRydWU7CkBAIC0yMzEsNyArMjMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywgIkV4ZWN1dGluZzogIiArIG1UYXNrKTsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiRXhlY3V0aW5nOiAiICsgbVRhc2spOwogICAgICAgICAgICAgbVRhc2suZXhlY3V0ZU9uRXhlY3V0b3IobUV4ZWN1dG9yLCAoVm9pZFtdKSBudWxsKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIzOSwxMSArMjM5LDExIEBACiAgICAgdm9pZCBkaXNwYXRjaE9uQ2FuY2VsbGVkKExvYWRUYXNrIHRhc2ssIEQgZGF0YSkgewogICAgICAgICBvbkNhbmNlbGVkKGRhdGEpOwogICAgICAgICBpZiAobUNhbmNlbGxpbmdUYXNrID09IHRhc2spIHsKLSAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywgIkNhbmNlbGxlZCB0YXNrIGlzIG5vdyBjYW5jZWxlZCEiKTsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiQ2FuY2VsbGVkIHRhc2sgaXMgbm93IGNhbmNlbGVkISIpOwogICAgICAgICAgICAgcm9sbGJhY2tDb250ZW50Q2hhbmdlZCgpOwogICAgICAgICAgICAgbUxhc3RMb2FkQ29tcGxldGVUaW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBtQ2FuY2VsbGluZ1Rhc2sgPSBudWxsOwotICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLnYoVEFHLCAiRGVsaXZlcmluZyBjYW5jZWxsYXRpb24iKTsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiRGVsaXZlcmluZyBjYW5jZWxsYXRpb24iKTsKICAgICAgICAgICAgIGRlbGl2ZXJDYW5jZWxsYXRpb24oKTsKICAgICAgICAgICAgIGV4ZWN1dGVQZW5kaW5nVGFzaygpOwogICAgICAgICB9CkBAIC0yNTEsNyArMjUxLDcgQEAKIAogICAgIHZvaWQgZGlzcGF0Y2hPbkxvYWRDb21wbGV0ZShMb2FkVGFzayB0YXNrLCBEIGRhdGEpIHsKICAgICAgICAgaWYgKG1UYXNrICE9IHRhc2spIHsKLSAgICAgICAgICAgIGlmIChERUJVRykgU2xvZy52KFRBRywgIkxvYWQgY29tcGxldGUgb2Ygb2xkIHRhc2ssIHRyeWluZyB0byBjYW5jZWwiKTsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiTG9hZCBjb21wbGV0ZSBvZiBvbGQgdGFzaywgdHJ5aW5nIHRvIGNhbmNlbCIpOwogICAgICAgICAgICAgZGlzcGF0Y2hPbkNhbmNlbGxlZCh0YXNrLCBkYXRhKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChpc0FiYW5kb25lZCgpKSB7CkBAIC0yNjEsNyArMjYxLDcgQEAKICAgICAgICAgICAgICAgICBjb21taXRDb250ZW50Q2hhbmdlZCgpOwogICAgICAgICAgICAgICAgIG1MYXN0TG9hZENvbXBsZXRlVGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOwogICAgICAgICAgICAgICAgIG1UYXNrID0gbnVsbDsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsICJEZWxpdmVyaW5nIHJlc3VsdCIpOworICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiRGVsaXZlcmluZyByZXN1bHQiKTsKICAgICAgICAgICAgICAgICBkZWxpdmVyUmVzdWx0KGRhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NsaXBib2FyZE1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ2xpcGJvYXJkTWFuYWdlci5qYXZhCmluZGV4IDczZTZmZDAuLjU2NTNjYWQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ2xpcGJvYXJkTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ2xpcGJvYXJkTWFuYWdlci5qYXZhCkBAIC0yMiw4ICsyMiw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuU3RyaWN0TW9kZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyLmphdmEKaW5kZXggNGU2Y2M5Mi4uMDE4ZTRjNSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlci5qYXZhCkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTWU5DX0VYVFJBU19QUklPUklUWSA9ICJzeW5jX3ByaW9yaXR5IjsKIAogICAgIC8qKiB7QGhpZGV9IEZsYWcgdG8gYWxsb3cgc3luYyB0byBvY2N1ciBvbiBtZXRlcmVkIG5ldHdvcmsuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lOQ19FWFRSQVNfRElTQUxMT1dfTUVURVJFRCA9ICJkaXNhbGxvd19tZXRlcmVkIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTWU5DX0VYVFJBU19ESVNBTExPV19NRVRFUkVEID0gImFsbG93X21ldGVyZWQiOwogCiAgICAgLyoqCiAgICAgICogU2V0IGJ5IHRoZSBTeW5jTWFuYWdlciB0byByZXF1ZXN0IHRoYXQgdGhlIFN5bmNBZGFwdGVyIGluaXRpYWxpemUgaXRzZWxmIGZvcgpAQCAtMzY4LDkgKzM2OCw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogPHA+CiAgICAgICogUXVlcnkgdGhlIGdpdmVuIFVSSSwgcmV0dXJuaW5nIGEge0BsaW5rIEN1cnNvcn0gb3ZlciB0aGUgcmVzdWx0IHNldC4KLSAgICAgKiA8L3A+CiAgICAgICogPHA+CiAgICAgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIHRoZSBjYWxsZXIgc2hvdWxkIGZvbGxvdyB0aGVzZSBndWlkZWxpbmVzOgogICAgICAqIDx1bD4KQEAgLTQwNSw5ICs0MDMsOCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFF1ZXJ5IHRoZSBnaXZlbiBVUkksIHJldHVybmluZyBhIHtAbGluayBDdXJzb3J9IG92ZXIgdGhlIHJlc3VsdCBzZXQuCi0gICAgICogPC9wPgorICAgICAqIFF1ZXJ5IHRoZSBnaXZlbiBVUkksIHJldHVybmluZyBhIHtAbGluayBDdXJzb3J9IG92ZXIgdGhlIHJlc3VsdCBzZXQKKyAgICAgKiB3aXRoIG9wdGlvbmFsIHN1cHBvcnQgZm9yIGNhbmNlbGxhdGlvbi4KICAgICAgKiA8cD4KICAgICAgKiBGb3IgYmVzdCBwZXJmb3JtYW5jZSwgdGhlIGNhbGxlciBzaG91bGQgZm9sbG93IHRoZXNlIGd1aWRlbGluZXM6CiAgICAgICogPHVsPgpAQCAtMTc1MSw3ICsxNzQ4LDcgQEAKICAgICAgICAgICAgIG5ldyBTeW5jUmVxdWVzdC5CdWlsZGVyKCkKICAgICAgICAgICAgICAgICAuc2V0U3luY0FkYXB0ZXIoYWNjb3VudCwgYXV0aG9yaXR5KQogICAgICAgICAgICAgICAgIC5zZXRFeHRyYXMoZXh0cmFzKQotICAgICAgICAgICAgICAgIC5zeW5jT25jZSgpCisgICAgICAgICAgICAgICAgLnN5bmNPbmNlKCkgICAgIC8vIEltbWVkaWF0ZSBzeW5jLgogICAgICAgICAgICAgICAgIC5idWlsZCgpOwogICAgICAgICByZXF1ZXN0U3luYyhyZXF1ZXN0KTsKICAgICB9CkBAIC0xNzU5LDkgKzE3NTYsNiBAQAogICAgIC8qKgogICAgICAqIFJlZ2lzdGVyIGEgc3luYyB3aXRoIHRoZSBTeW5jTWFuYWdlci4gVGhlc2UgcmVxdWVzdHMgYXJlIGJ1aWx0IHVzaW5nIHRoZQogICAgICAqIHtAbGluayBTeW5jUmVxdWVzdC5CdWlsZGVyfS4KLSAgICAgKgotICAgICAqIEBwYXJhbSByZXF1ZXN0IFRoZSBpbW11dGFibGUgU3luY1JlcXVlc3Qgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN5bmMgcGFyYW1ldGVycy4gVXNlCi0gICAgICoge0BsaW5rIFN5bmNSZXF1ZXN0LkJ1aWxkZXJ9IHRvIGNvbnN0cnVjdCB0aGVzZS4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVxdWVzdFN5bmMoU3luY1JlcXVlc3QgcmVxdWVzdCkgewogICAgICAgICB0cnkgewpAQCAtMTgyOSwxMiArMTgyMywyNSBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjYW5jZWxTeW5jKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSkgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgZ2V0Q29udGVudFNlcnZpY2UoKS5jYW5jZWxTeW5jKGFjY291bnQsIGF1dGhvcml0eSk7CisgICAgICAgICAgICBnZXRDb250ZW50U2VydmljZSgpLmNhbmNlbFN5bmMoYWNjb3VudCwgYXV0aG9yaXR5LCBudWxsKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgorICAgICAqIENhbmNlbCBhbnkgYWN0aXZlIG9yIHBlbmRpbmcgc3luY3MgdGhhdCBhcmUgcnVubmluZyBvbiB0aGlzIHNlcnZpY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY25hbWUgdGhlIHNlcnZpY2UgZm9yIHdoaWNoIHRvIGNhbmNlbCBhbGwgYWN0aXZlL3BlbmRpbmcgb3BlcmF0aW9ucy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2FuY2VsU3luYyhDb21wb25lbnROYW1lIGNuYW1lKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBnZXRDb250ZW50U2VydmljZSgpLmNhbmNlbFN5bmMobnVsbCwgbnVsbCwgY25hbWUpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKICAgICAgKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFN5bmNBZGFwdGVycyB0aGF0IGFyZSBrbm93biB0byB0aGUgc3lzdGVtLgogICAgICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgU3luY0FkYXB0ZXJzIHRoYXQgaGF2ZSByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbQogICAgICAqLwpAQCAtMTg5NywxMiArMTkwNCwxMyBAQAogICAgICAqIHtAbGluayAjU1lOQ19FWFRSQVNfSU5JVElBTElaRX0sIHtAbGluayAjU1lOQ19FWFRSQVNfRk9SQ0V9LAogICAgICAqIHtAbGluayAjU1lOQ19FWFRSQVNfRVhQRURJVEVEfSwge0BsaW5rICNTWU5DX0VYVFJBU19NQU5VQUx9IHNldCB0byB0cnVlLgogICAgICAqIElmIGFueSBhcmUgc3VwcGxpZWQgdGhlbiBhbiB7QGxpbmsgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9ufSB3aWxsIGJlIHRocm93bi4KLSAgICAgKiA8cD5BcyBvZiBBUEkgbGV2ZWwgMTkgdGhpcyBmdW5jdGlvbiBpbnRyb2R1Y2VzIGEgZGVmYXVsdCBmbGV4aWJpbGl0eSBvZiB+NCUgKHVwIHRvIGEgbWF4aW11bQotICAgICAqIG9mIG9uZSBob3VyIGluIHRoZSBkYXkpIGludG8gdGhlIHJlcXVlc3RlZCBwZXJpb2QuIFVzZQotICAgICAqIHtAbGluayBTeW5jUmVxdWVzdC5CdWlsZGVyI3N5bmNQZXJpb2RpYyhsb25nLCBsb25nKX0gdG8gc2V0IHRoaXMgZmxleGliaWxpdHkgbWFudWFsbHkuCiAgICAgICoKICAgICAgKiA8cD5UaGlzIG1ldGhvZCByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGhvbGQgdGhlIHBlcm1pc3Npb24KICAgICAgKiB7QGxpbmsgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uI1dSSVRFX1NZTkNfU0VUVElOR1N9LgorICAgICAqIDxwPlRoZSBidW5kbGUgZm9yIGEgcGVyaW9kaWMgc3luYyBjYW4gYmUgcXVlcmllZCBieSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgY29ycmVjdAorICAgICAqIHBlcm1pc3Npb25zIHVzaW5nCisgICAgICoge0BsaW5rIENvbnRlbnRSZXNvbHZlciNnZXRQZXJpb2RpY1N5bmNzKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIHByb3ZpZGVyKX0sIHNvIG5vCisgICAgICogc2Vuc2l0aXZlIGRhdGEgc2hvdWxkIGJlIHRyYW5zZmVycmVkIGhlcmUuCiAgICAgICoKICAgICAgKiBAcGFyYW0gYWNjb3VudCB0aGUgYWNjb3VudCB0byBzcGVjaWZ5IGluIHRoZSBzeW5jCiAgICAgICogQHBhcmFtIGF1dGhvcml0eSB0aGUgcHJvdmlkZXIgdG8gc3BlY2lmeSBpbiB0aGUgc3luYyByZXF1ZXN0CkBAIC0xOTMyLDYgKzE5NDAsMjYgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiB7QGhpZGV9CisgICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIHRocm93IGFuIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4gaWYgYW55IGlsbGVnYWwKKyAgICAgKiBleHRyYXMgd2VyZSBzZXQgZm9yIGEgcGVyaW9kaWMgc3luYy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBleHRyYXMgYnVuZGxlIHRvIHZhbGlkYXRlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpbnZhbGlkUGVyaW9kaWNFeHRyYXMoQnVuZGxlIGV4dHJhcykgeworICAgICAgICBpZiAoZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX01BTlVBTCwgZmFsc2UpCisgICAgICAgICAgICAgICAgfHwgZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0RPX05PVF9SRVRSWSwgZmFsc2UpCisgICAgICAgICAgICAgICAgfHwgZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9CQUNLT0ZGLCBmYWxzZSkKKyAgICAgICAgICAgICAgICB8fCBleHRyYXMuZ2V0Qm9vbGVhbihDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfSUdOT1JFX1NFVFRJTkdTLCBmYWxzZSkKKyAgICAgICAgICAgICAgICB8fCBleHRyYXMuZ2V0Qm9vbGVhbihDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfSU5JVElBTElaRSwgZmFsc2UpCisgICAgICAgICAgICAgICAgfHwgZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0ZPUkNFLCBmYWxzZSkKKyAgICAgICAgICAgICAgICB8fCBleHRyYXMuZ2V0Qm9vbGVhbihDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRVhQRURJVEVELCBmYWxzZSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBSZW1vdmUgYSBwZXJpb2RpYyBzeW5jLiBIYXMgbm8gYWZmZWN0IGlmIGFjY291bnQsIGF1dGhvcml0eSBhbmQgZXh0cmFzIGRvbid0IG1hdGNoCiAgICAgICogYW4gZXhpc3RpbmcgcGVyaW9kaWMgc3luYy4KICAgICAgKiA8cD5UaGlzIG1ldGhvZCByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGhvbGQgdGhlIHBlcm1pc3Npb24KQEAgLTE5NTEsNiArMTk3OSwzMSBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIHN5bmMuIFRoaXMgd2lsbCBjYW5jZWwgYW55IHBlbmRpbmcgb3IgYWN0aXZlIHN5bmNzLiBJZiB0aGUgcmVxdWVzdCBpcworICAgICAqIGZvciBhIHBlcmlvZGljIHN5bmMsIHRoaXMgY2FsbCB3aWxsIHJlbW92ZSBhbnkgZnV0dXJlIG9jY3VycmVuY2VzLgorICAgICAqIDxwPklmIGEgcGVyaW9kaWMgc3luYyBpcyBzcGVjaWZpZWQsIHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBwZXJtaXNzaW9uCisgICAgICoge0BsaW5rIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbiNXUklURV9TWU5DX1NFVFRJTkdTfS4gSWYgdGhpcyBTeW5jUmVxdWVzdCB0YXJnZXRzIGEKKyAgICAgKiBTeW5jU2VydmljZSBhZGFwdGVyLHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIG11c3QgYmUgc2lnbmVkIHdpdGggdGhlIHNhbWUgY2VydGlmaWNhdGUgYXMgdGhlCisgICAgICogYWRhcHRlci4KKyAgICAgKjwvcD5JdCBpcyBwb3NzaWJsZSB0byBjYW5jZWwgYSBzeW5jIHVzaW5nIGEgU3luY1JlcXVlc3Qgb2JqZWN0IHRoYXQgaXMgbm90IHRoZSBzYW1lIG9iamVjdAorICAgICAqIHdpdGggd2hpY2ggeW91IHJlcXVlc3RlZCB0aGUgc3luYy4gRG8gc28gYnkgYnVpbGRpbmcgYSBTeW5jUmVxdWVzdCB3aXRoIHRoZSBzYW1lCisgICAgICogc2VydmljZS9hZGFwdGVyLCBmcmVxdWVuY3ksIDxiPmFuZDwvYj4gZXh0cmFzIGJ1bmRsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSByZXF1ZXN0IFN5bmNSZXF1ZXN0IG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHN5bmMgdG8gY2FuY2VsLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjYW5jZWxTeW5jKFN5bmNSZXF1ZXN0IHJlcXVlc3QpIHsKKyAgICAgICAgaWYgKHJlcXVlc3QgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicmVxdWVzdCBjYW5ub3QgYmUgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBnZXRDb250ZW50U2VydmljZSgpLmNhbmNlbFJlcXVlc3QocmVxdWVzdCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBleGNlcHRpb24gaWdub3JlZDsgaWYgdGhpcyBpcyB0aHJvd24gdGhlbiBpdCBtZWFucyB0aGUgcnVudGltZSBpcyBpbiB0aGUgbWlkc3Qgb2YKKyAgICAgICAgICAgIC8vIGJlaW5nIHJlc3RhcnRlZAorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogR2V0IHRoZSBsaXN0IG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwZXJpb2RpYyBzeW5jcyBmb3IgdGhlIGdpdmVuIGFjY291bnQgYW5kIGF1dGhvcml0eS4KICAgICAgKiA8cD5UaGlzIG1ldGhvZCByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGhvbGQgdGhlIHBlcm1pc3Npb24KICAgICAgKiB7QGxpbmsgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uI1JFQURfU1lOQ19TRVRUSU5HU30uCkBAIC0xOTYxLDcgKzIwMTQsMjMgQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIExpc3Q8UGVyaW9kaWNTeW5jPiBnZXRQZXJpb2RpY1N5bmNzKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSkgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIGdldENvbnRlbnRTZXJ2aWNlKCkuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCBhdXRob3JpdHkpOworICAgICAgICAgICAgcmV0dXJuIGdldENvbnRlbnRTZXJ2aWNlKCkuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCBhdXRob3JpdHksIG51bGwpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oInRoZSBDb250ZW50U2VydmljZSBzaG91bGQgYWx3YXlzIGJlIHJlYWNoYWJsZSIsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHBlcmlvZGljIHN5bmNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdmlkZWQgY29tcG9uZW50LgorICAgICAqIDxwPlRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIG11c3QgYmUgc2lnbmVkIHdpdGggdGhlIHNhbWUgY2VydGlmaWNhdGUgYXMgdGhlIHRhcmdldCBjb21wb25lbnQsCisgICAgICogb3RoZXJ3aXNlIHRoaXMgY2FsbCB3aWxsIGZhaWwuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBMaXN0PFBlcmlvZGljU3luYz4gZ2V0UGVyaW9kaWNTeW5jcyhDb21wb25lbnROYW1lIGNuYW1lKSB7CisgICAgICAgIGlmIChjbmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDb21wb25lbnQgbXVzdCBub3QgYmUgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5nZXRQZXJpb2RpY1N5bmNzKG51bGwsIG51bGwsIGNuYW1lKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJ0aGUgQ29udGVudFNlcnZpY2Ugc2hvdWxkIGFsd2F5cyBiZSByZWFjaGFibGUiLCBlKTsKICAgICAgICAgfQpAQCAtMTk5Nyw2ICsyMDY2LDM4IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogU2V0IHdoZXRoZXIgdGhlIHByb3ZpZGVkIHtAbGluayBTeW5jU2VydmljZX0gaXMgYXZhaWxhYmxlIHRvIHByb2Nlc3Mgd29yay4KKyAgICAgKiA8cD5UaGlzIG1ldGhvZCByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGhvbGQgdGhlIHBlcm1pc3Npb24KKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uI1dSSVRFX1NZTkNfU0VUVElOR1N9LgorICAgICAqIDxwPlRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIG11c3QgYmUgc2lnbmVkIHdpdGggdGhlIHNhbWUgY2VydGlmaWNhdGUgYXMgdGhlIHRhcmdldCBjb21wb25lbnQsCisgICAgICogb3RoZXJ3aXNlIHRoaXMgY2FsbCB3aWxsIGZhaWwuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFNlcnZpY2VBY3RpdmUoQ29tcG9uZW50TmFtZSBjbmFtZSwgYm9vbGVhbiBhY3RpdmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGdldENvbnRlbnRTZXJ2aWNlKCkuc2V0U2VydmljZUFjdGl2ZShjbmFtZSwgYWN0aXZlKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBpZ25vcmVkOyBpZiB0aGlzIGlzIHRocm93biB0aGVuIGl0IG1lYW5zIHRoZSBydW50aW1lIGlzIGluIHRoZSBtaWRzdCBvZgorICAgICAgICAgICAgLy8gYmVpbmcgcmVzdGFydGVkCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBRdWVyeSB0aGUgc3RhdGUgb2YgdGhpcyBzeW5jIHNlcnZpY2UuCisgICAgICogPHA+U2V0IHdpdGgge0BsaW5rICNzZXRTZXJ2aWNlQWN0aXZlKENvbXBvbmVudE5hbWUgY25hbWUsIGJvb2xlYW4gYWN0aXZlKX0uCisgICAgICogPHA+VGhlIGNhbGxpbmcgYXBwbGljYXRpb24gbXVzdCBiZSBzaWduZWQgd2l0aCB0aGUgc2FtZSBjZXJ0aWZpY2F0ZSBhcyB0aGUgdGFyZ2V0IGNvbXBvbmVudCwKKyAgICAgKiBvdGhlcndpc2UgdGhpcyBjYWxsIHdpbGwgZmFpbC4KKyAgICAgKiBAcGFyYW0gY25hbWUgQ29tcG9uZW50TmFtZSByZWZlcnJpbmcgdG8gYSB7QGxpbmsgU3luY1NlcnZpY2V9CisgICAgICogQHJldHVybiB0cnVlIGlmIGpvYnMgd2lsbCBiZSBydW4gb24gdGhpcyBzZXJ2aWNlLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU2VydmljZUFjdGl2ZShDb21wb25lbnROYW1lIGNuYW1lKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5pc1NlcnZpY2VBY3RpdmUoY25hbWUpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oInRoZSBDb250ZW50U2VydmljZSBzaG91bGQgYWx3YXlzIGJlIHJlYWNoYWJsZSIsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbWFzdGVyIGF1dG8tc3luYyBzZXR0aW5nIHRoYXQgYXBwbGllcyB0byBhbGwgdGhlIHByb3ZpZGVycyBhbmQgYWNjb3VudHMuCiAgICAgICogSWYgdGhpcyBpcyBmYWxzZSB0aGVuIHRoZSBwZXItcHJvdmlkZXIgYXV0by1zeW5jIHNldHRpbmcgaXMgaWdub3JlZC4KICAgICAgKiA8cD5UaGlzIG1ldGhvZCByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGhvbGQgdGhlIHBlcm1pc3Npb24KQEAgLTIwMzAsOCArMjEzMSw4IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBhIHN5bmMgb3BlcmF0aW9uIGZvciB0aGUgZ2l2ZW4KLSAgICAgKiBhY2NvdW50IG9yIGF1dGhvcml0eSBpbiB0aGUgcGVuZGluZyBsaXN0LCBvciBhY3RpdmVseSBiZWluZyBwcm9jZXNzZWQuCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBhIHN5bmMgb3BlcmF0aW9uIGZvciB0aGUgZ2l2ZW4gYWNjb3VudCBvciBhdXRob3JpdHkKKyAgICAgKiBhY3RpdmVseSBiZWluZyBwcm9jZXNzZWQuCiAgICAgICogPHA+VGhpcyBtZXRob2QgcmVxdWlyZXMgdGhlIGNhbGxlciB0byBob2xkIHRoZSBwZXJtaXNzaW9uCiAgICAgICoge0BsaW5rIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbiNSRUFEX1NZTkNfU1RBVFN9LgogICAgICAqIEBwYXJhbSBhY2NvdW50IHRoZSBhY2NvdW50IHdob3NlIHNldHRpbmcgd2UgYXJlIHF1ZXJ5aW5nCkBAIC0yMDM5LDggKzIxNDAsMjYgQEAKICAgICAgKiBAcmV0dXJuIHRydWUgaWYgYSBzeW5jIGlzIGFjdGl2ZSBmb3IgdGhlIGdpdmVuIGFjY291bnQgb3IgYXV0aG9yaXR5LgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1N5bmNBY3RpdmUoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgICAgIGlmIChhY2NvdW50ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImFjY291bnQgbXVzdCBub3QgYmUgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIGlmIChhdXRob3JpdHkgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiYXV0aG9yaXR5IG11c3Qgbm90IGJlIG51bGwiKTsKKyAgICAgICAgfQorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5pc1N5bmNBY3RpdmUoYWNjb3VudCwgYXV0aG9yaXR5KTsKKyAgICAgICAgICAgIHJldHVybiBnZXRDb250ZW50U2VydmljZSgpLmlzU3luY0FjdGl2ZShhY2NvdW50LCBhdXRob3JpdHksIG51bGwpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oInRoZSBDb250ZW50U2VydmljZSBzaG91bGQgYWx3YXlzIGJlIHJlYWNoYWJsZSIsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU3luY0FjdGl2ZShDb21wb25lbnROYW1lIGNuYW1lKSB7CisgICAgICAgIGlmIChjbmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb21wb25lbnQgbmFtZSBtdXN0IG5vdCBiZSBudWxsIik7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBnZXRDb250ZW50U2VydmljZSgpLmlzU3luY0FjdGl2ZShudWxsLCBudWxsLCBjbmFtZSk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigidGhlIENvbnRlbnRTZXJ2aWNlIHNob3VsZCBhbHdheXMgYmUgcmVhY2hhYmxlIiwgZSk7CiAgICAgICAgIH0KQEAgLTIwOTgsNyArMjIxNyw3IEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBTeW5jU3RhdHVzSW5mbyBnZXRTeW5jU3RhdHVzKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSkgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIGdldENvbnRlbnRTZXJ2aWNlKCkuZ2V0U3luY1N0YXR1cyhhY2NvdW50LCBhdXRob3JpdHkpOworICAgICAgICAgICAgcmV0dXJuIGdldENvbnRlbnRTZXJ2aWNlKCkuZ2V0U3luY1N0YXR1cyhhY2NvdW50LCBhdXRob3JpdHksIG51bGwpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oInRoZSBDb250ZW50U2VydmljZSBzaG91bGQgYWx3YXlzIGJlIHJlYWNoYWJsZSIsIGUpOwogICAgICAgICB9CkBAIC0yMTE0LDcgKzIyMzMsMTUgQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTeW5jUGVuZGluZyhBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHkpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBnZXRDb250ZW50U2VydmljZSgpLmlzU3luY1BlbmRpbmcoYWNjb3VudCwgYXV0aG9yaXR5KTsKKyAgICAgICAgICAgIHJldHVybiBnZXRDb250ZW50U2VydmljZSgpLmlzU3luY1BlbmRpbmcoYWNjb3VudCwgYXV0aG9yaXR5LCBudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJ0aGUgQ29udGVudFNlcnZpY2Ugc2hvdWxkIGFsd2F5cyBiZSByZWFjaGFibGUiLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1N5bmNQZW5kaW5nKENvbXBvbmVudE5hbWUgY25hbWUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBnZXRDb250ZW50U2VydmljZSgpLmlzU3luY1BlbmRpbmcobnVsbCwgbnVsbCwgY25hbWUpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oInRoZSBDb250ZW50U2VydmljZSBzaG91bGQgYWx3YXlzIGJlIHJlYWNoYWJsZSIsIGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRleHQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGV4dC5qYXZhCmluZGV4IDJlNGUyMDkuLjMyYjk1YzIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGV4dC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGV4dC5qYXZhCkBAIC0xNiw2ICsxNiwxMCBAQAogCiBwYWNrYWdlIGFuZHJvaWQuY29udGVudDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TdHJpbmdEZWY7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldE1hbmFnZXI7CkBAIC00Nyw2ICs1MSw4IEBACiBpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OwogCiAvKioKICAqIEludGVyZmFjZSB0byBnbG9iYWwgaW5mb3JtYXRpb24gYWJvdXQgYW4gYXBwbGljYXRpb24gZW52aXJvbm1lbnQuICBUaGlzIGlzCkBAIC0xMzIsNiArMTM4LDIwIEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTU9ERV9FTkFCTEVfV1JJVEVfQUhFQURfTE9HR0lORyA9IDB4MDAwODsKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoZmxhZyA9IHRydWUsCisgICAgICAgICAgICB2YWx1ZSA9IHsKKyAgICAgICAgICAgICAgICBCSU5EX0FVVE9fQ1JFQVRFLAorICAgICAgICAgICAgICAgIEJJTkRfQVVUT19DUkVBVEUsCisgICAgICAgICAgICAgICAgQklORF9ERUJVR19VTkJJTkQsCisgICAgICAgICAgICAgICAgQklORF9OT1RfRk9SRUdST1VORCwKKyAgICAgICAgICAgICAgICBCSU5EX0FCT1ZFX0NMSUVOVCwKKyAgICAgICAgICAgICAgICBCSU5EX0FMTE9XX09PTV9NQU5BR0VNRU5ULAorICAgICAgICAgICAgICAgIEJJTkRfV0FJVkVfUFJJT1JJVFkKKyAgICAgICAgICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIEJpbmRTZXJ2aWNlRmxhZ3Mge30KKwogICAgIC8qKgogICAgICAqIEZsYWcgZm9yIHtAbGluayAjYmluZFNlcnZpY2V9OiBhdXRvbWF0aWNhbGx5IGNyZWF0ZSB0aGUgc2VydmljZSBhcyBsb25nCiAgICAgICogYXMgdGhlIGJpbmRpbmcgZXhpc3RzLiAgTm90ZSB0aGF0IHdoaWxlIHRoaXMgd2lsbCBjcmVhdGUgdGhlIHNlcnZpY2UsCkBAIC00OTUsNyArNTE1LDcgQEAKICAgICAgKiBhbmQge0BsaW5rICNNT0RFX1dPUkxEX1dSSVRFQUJMRX0gdG8gY29udHJvbCBwZXJtaXNzaW9ucy4gIFRoZSBiaXQKICAgICAgKiB7QGxpbmsgI01PREVfTVVMVElfUFJPQ0VTU30gY2FuIGFsc28gYmUgdXNlZCBpZiBtdWx0aXBsZSBwcm9jZXNzZXMKICAgICAgKiBhcmUgbXV0YXRpbmcgdGhlIHNhbWUgU2hhcmVkUHJlZmVyZW5jZXMgZmlsZS4gIHtAbGluayAjTU9ERV9NVUxUSV9QUk9DRVNTfQotICAgICAqIGlzIGFsd2F5cyBvbiBpbiBhcHBzIHRhcmdldHRpbmcgR2luZ2VyYnJlYWQgKEFuZHJvaWQgMi4zKSBhbmQgYmVsb3csIGFuZAorICAgICAqIGlzIGFsd2F5cyBvbiBpbiBhcHBzIHRhcmdldGluZyBHaW5nZXJicmVhZCAoQW5kcm9pZCAyLjMpIGFuZCBiZWxvdywgYW5kCiAgICAgICogb2ZmIGJ5IGRlZmF1bHQgaW4gbGF0ZXIgdmVyc2lvbnMuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBzaW5nbGUge0BsaW5rIFNoYXJlZFByZWZlcmVuY2VzfSBpbnN0YW5jZSB0aGF0IGNhbiBiZSB1c2VkCkBAIC02NzQsNyArNjk0LDggQEAKICAgICAgKiBAc2VlICNnZXRGaWxlc0RpcgogICAgICAqIEBzZWUgYW5kcm9pZC5vcy5FbnZpcm9ubWVudCNnZXRFeHRlcm5hbFN0b3JhZ2VQdWJsaWNEaXJlY3RvcnkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgRmlsZSBnZXRFeHRlcm5hbEZpbGVzRGlyKFN0cmluZyB0eXBlKTsKKyAgICBATnVsbGFibGUKKyAgICBwdWJsaWMgYWJzdHJhY3QgRmlsZSBnZXRFeHRlcm5hbEZpbGVzRGlyKEBOdWxsYWJsZSBTdHJpbmcgdHlwZSk7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFic29sdXRlIHBhdGhzIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGRpcmVjdG9yaWVzIG9uIGFsbApAQCAtODQwLDYgKzg2MSw3IEBACiAgICAgICoKICAgICAgKiBAc2VlICNnZXRDYWNoZURpcgogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIHB1YmxpYyBhYnN0cmFjdCBGaWxlIGdldEV4dGVybmFsQ2FjaGVEaXIoKTsKIAogICAgIC8qKgpAQCAtOTYwLDcgKzk4Miw4IEBACiAgICAgICogQHNlZSAjZGVsZXRlRGF0YWJhc2UKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgU1FMaXRlRGF0YWJhc2Ugb3Blbk9yQ3JlYXRlRGF0YWJhc2UoU3RyaW5nIG5hbWUsCi0gICAgICAgICAgICBpbnQgbW9kZSwgQ3Vyc29yRmFjdG9yeSBmYWN0b3J5LCBEYXRhYmFzZUVycm9ySGFuZGxlciBlcnJvckhhbmRsZXIpOworICAgICAgICAgICAgaW50IG1vZGUsIEN1cnNvckZhY3RvcnkgZmFjdG9yeSwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBEYXRhYmFzZUVycm9ySGFuZGxlciBlcnJvckhhbmRsZXIpOwogCiAgICAgLyoqCiAgICAgICogRGVsZXRlIGFuIGV4aXN0aW5nIHByaXZhdGUgU1FMaXRlRGF0YWJhc2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQ29udGV4dCdzCkBAIC0xMTA2LDcgKzExMjksNyBAQAogICAgICAqIEBzZWUgI3N0YXJ0QWN0aXZpdHkoSW50ZW50KQogICAgICAqIEBzZWUgUGFja2FnZU1hbmFnZXIjcmVzb2x2ZUFjdGl2aXR5CiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgc3RhcnRBY3Rpdml0eShJbnRlbnQgaW50ZW50LCBCdW5kbGUgb3B0aW9ucyk7CisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc3RhcnRBY3Rpdml0eShJbnRlbnQgaW50ZW50LCBATnVsbGFibGUgQnVuZGxlIG9wdGlvbnMpOwogCiAgICAgLyoqCiAgICAgICogVmVyc2lvbiBvZiB7QGxpbmsgI3N0YXJ0QWN0aXZpdHkoSW50ZW50LCBCdW5kbGUpfSB0aGF0IGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUKQEAgLTExMjIsNyArMTE0NSw3IEBACiAgICAgICogQHRocm93cyBBY3Rpdml0eU5vdEZvdW5kRXhjZXB0aW9uICZuYnNwOwogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRBY3Rpdml0eUFzVXNlcihJbnRlbnQgaW50ZW50LCBCdW5kbGUgb3B0aW9ucywgVXNlckhhbmRsZSB1c2VySWQpIHsKKyAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXR5QXNVc2VyKEludGVudCBpbnRlbnQsIEBOdWxsYWJsZSBCdW5kbGUgb3B0aW9ucywgVXNlckhhbmRsZSB1c2VySWQpIHsKICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vdCBpbXBsZW1lbnRlZC4gTXVzdCBvdmVycmlkZSBpbiBhIHN1YmNsYXNzLiIpOwogICAgIH0KIApAQCAtMTI0MSw3ICsxMjY0LDcgQEAKICAgICAgKiBAc2VlICNzdGFydEludGVudFNlbmRlcihJbnRlbnRTZW5kZXIsIEludGVudCwgaW50LCBpbnQsIGludCkKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzdGFydEludGVudFNlbmRlcihJbnRlbnRTZW5kZXIgaW50ZW50LAotICAgICAgICAgICAgSW50ZW50IGZpbGxJbkludGVudCwgaW50IGZsYWdzTWFzaywgaW50IGZsYWdzVmFsdWVzLCBpbnQgZXh0cmFGbGFncywKKyAgICAgICAgICAgIEBOdWxsYWJsZSBJbnRlbnQgZmlsbEluSW50ZW50LCBpbnQgZmxhZ3NNYXNrLCBpbnQgZmxhZ3NWYWx1ZXMsIGludCBleHRyYUZsYWdzLAogICAgICAgICAgICAgQnVuZGxlIG9wdGlvbnMpIHRocm93cyBJbnRlbnRTZW5kZXIuU2VuZEludGVudEV4Y2VwdGlvbjsKIAogICAgIC8qKgpAQCAtMTI5MSwxMSArMTMxNCwxMSBAQAogICAgICAqIEBzZWUgI3NlbmRPcmRlcmVkQnJvYWRjYXN0KEludGVudCwgU3RyaW5nLCBCcm9hZGNhc3RSZWNlaXZlciwgSGFuZGxlciwgaW50LCBTdHJpbmcsIEJ1bmRsZSkKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZW5kQnJvYWRjYXN0KEludGVudCBpbnRlbnQsCi0gICAgICAgICAgICBTdHJpbmcgcmVjZWl2ZXJQZXJtaXNzaW9uKTsKKyAgICAgICAgICAgIEBOdWxsYWJsZSBTdHJpbmcgcmVjZWl2ZXJQZXJtaXNzaW9uKTsKIAogICAgIC8qKgogICAgICAqIExpa2Uge0BsaW5rICNzZW5kQnJvYWRjYXN0KEludGVudCwgU3RyaW5nKX0sIGJ1dCBhbHNvIGFsbG93cyBzcGVjaWZpY2F0aW9uCi0gICAgICogb2YgYW4gYXNzb2NhdGVkIGFwcCBvcCBhcyBwZXIge0BsaW5rIGFuZHJvaWQuYXBwLkFwcE9wc01hbmFnZXJ9LgorICAgICAqIG9mIGFuIGFzc29jaWF0ZWQgYXBwIG9wIGFzIHBlciB7QGxpbmsgYW5kcm9pZC5hcHAuQXBwT3BzTWFuYWdlcn0uCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZW5kQnJvYWRjYXN0KEludGVudCBpbnRlbnQsCkBAIC0xMzIyLDcgKzEzNDUsNyBAQAogICAgICAqIEBzZWUgI3NlbmRPcmRlcmVkQnJvYWRjYXN0KEludGVudCwgU3RyaW5nLCBCcm9hZGNhc3RSZWNlaXZlciwgSGFuZGxlciwgaW50LCBTdHJpbmcsIEJ1bmRsZSkKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZW5kT3JkZXJlZEJyb2FkY2FzdChJbnRlbnQgaW50ZW50LAotICAgICAgICAgICAgU3RyaW5nIHJlY2VpdmVyUGVybWlzc2lvbik7CisgICAgICAgICAgICBATnVsbGFibGUgU3RyaW5nIHJlY2VpdmVyUGVybWlzc2lvbik7CiAKICAgICAvKioKICAgICAgKiBWZXJzaW9uIG9mIHtAbGluayAjc2VuZEJyb2FkY2FzdChJbnRlbnQpfSB0aGF0IGFsbG93cyB5b3UgdG8KQEAgLTEzNjYsMTUgKzEzODksMTUgQEAKICAgICAgKiBAc2VlICNyZWdpc3RlclJlY2VpdmVyCiAgICAgICogQHNlZSBhbmRyb2lkLmFwcC5BY3Rpdml0eSNSRVNVTFRfT0sKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZW5kT3JkZXJlZEJyb2FkY2FzdChJbnRlbnQgaW50ZW50LAotICAgICAgICAgICAgU3RyaW5nIHJlY2VpdmVyUGVybWlzc2lvbiwgQnJvYWRjYXN0UmVjZWl2ZXIgcmVzdWx0UmVjZWl2ZXIsCi0gICAgICAgICAgICBIYW5kbGVyIHNjaGVkdWxlciwgaW50IGluaXRpYWxDb2RlLCBTdHJpbmcgaW5pdGlhbERhdGEsCi0gICAgICAgICAgICBCdW5kbGUgaW5pdGlhbEV4dHJhcyk7CisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2VuZE9yZGVyZWRCcm9hZGNhc3QoQE5vbk51bGwgSW50ZW50IGludGVudCwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBTdHJpbmcgcmVjZWl2ZXJQZXJtaXNzaW9uLCBCcm9hZGNhc3RSZWNlaXZlciByZXN1bHRSZWNlaXZlciwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBIYW5kbGVyIHNjaGVkdWxlciwgaW50IGluaXRpYWxDb2RlLCBATnVsbGFibGUgU3RyaW5nIGluaXRpYWxEYXRhLAorICAgICAgICAgICAgQE51bGxhYmxlIEJ1bmRsZSBpbml0aWFsRXh0cmFzKTsKIAogICAgIC8qKgogICAgICAqIExpa2Uge0BsaW5rICNzZW5kT3JkZXJlZEJyb2FkY2FzdChJbnRlbnQsIFN0cmluZywgQnJvYWRjYXN0UmVjZWl2ZXIsIGFuZHJvaWQub3MuSGFuZGxlciwKICAgICAgKiBpbnQsIFN0cmluZywgYW5kcm9pZC5vcy5CdW5kbGUpfSwgYnV0IGFsc28gYWxsb3dzIHNwZWNpZmljYXRpb24KLSAgICAgKiBvZiBhbiBhc3NvY2F0ZWQgYXBwIG9wIGFzIHBlciB7QGxpbmsgYW5kcm9pZC5hcHAuQXBwT3BzTWFuYWdlcn0uCisgICAgICogb2YgYW4gYXNzb2NpYXRlZCBhcHAgb3AgYXMgcGVyIHtAbGluayBhbmRyb2lkLmFwcC5BcHBPcHNNYW5hZ2VyfS4KICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNlbmRPcmRlcmVkQnJvYWRjYXN0KEludGVudCBpbnRlbnQsCkBAIC0xNDA5LDcgKzE0MzIsNyBAQAogICAgICAqIEBzZWUgI3NlbmRCcm9hZGNhc3QoSW50ZW50LCBTdHJpbmcpCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2VuZEJyb2FkY2FzdEFzVXNlcihJbnRlbnQgaW50ZW50LCBVc2VySGFuZGxlIHVzZXIsCi0gICAgICAgICAgICBTdHJpbmcgcmVjZWl2ZXJQZXJtaXNzaW9uKTsKKyAgICAgICAgICAgIEBOdWxsYWJsZSBTdHJpbmcgcmVjZWl2ZXJQZXJtaXNzaW9uKTsKIAogICAgIC8qKgogICAgICAqIFZlcnNpb24gb2YKQEAgLTE0NDIsOCArMTQ2NSw5IEBACiAgICAgICogQHNlZSAjc2VuZE9yZGVyZWRCcm9hZGNhc3QoSW50ZW50LCBTdHJpbmcsIEJyb2FkY2FzdFJlY2VpdmVyLCBIYW5kbGVyLCBpbnQsIFN0cmluZywgQnVuZGxlKQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNlbmRPcmRlcmVkQnJvYWRjYXN0QXNVc2VyKEludGVudCBpbnRlbnQsIFVzZXJIYW5kbGUgdXNlciwKLSAgICAgICAgICAgIFN0cmluZyByZWNlaXZlclBlcm1pc3Npb24sIEJyb2FkY2FzdFJlY2VpdmVyIHJlc3VsdFJlY2VpdmVyLCBIYW5kbGVyIHNjaGVkdWxlciwKLSAgICAgICAgICAgIGludCBpbml0aWFsQ29kZSwgU3RyaW5nIGluaXRpYWxEYXRhLCBCdW5kbGUgaW5pdGlhbEV4dHJhcyk7CisgICAgICAgICAgICBATnVsbGFibGUgU3RyaW5nIHJlY2VpdmVyUGVybWlzc2lvbiwgQnJvYWRjYXN0UmVjZWl2ZXIgcmVzdWx0UmVjZWl2ZXIsCisgICAgICAgICAgICBATnVsbGFibGUgSGFuZGxlciBzY2hlZHVsZXIsIGludCBpbml0aWFsQ29kZSwgQE51bGxhYmxlIFN0cmluZyBpbml0aWFsRGF0YSwKKyAgICAgICAgICAgIEBOdWxsYWJsZSAgQnVuZGxlIGluaXRpYWxFeHRyYXMpOwogCiAgICAgLyoqCiAgICAgICogUGVyZm9ybSBhIHtAbGluayAjc2VuZEJyb2FkY2FzdChJbnRlbnQpfSB0aGF0IGlzICJzdGlja3ksIiBtZWFuaW5nIHRoZQpAQCAtMTUwOCw4ICsxNTMyLDggQEAKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZW5kU3RpY2t5T3JkZXJlZEJyb2FkY2FzdChJbnRlbnQgaW50ZW50LAogICAgICAgICAgICAgQnJvYWRjYXN0UmVjZWl2ZXIgcmVzdWx0UmVjZWl2ZXIsCi0gICAgICAgICAgICBIYW5kbGVyIHNjaGVkdWxlciwgaW50IGluaXRpYWxDb2RlLCBTdHJpbmcgaW5pdGlhbERhdGEsCi0gICAgICAgICAgICBCdW5kbGUgaW5pdGlhbEV4dHJhcyk7CisgICAgICAgICAgICBATnVsbGFibGUgSGFuZGxlciBzY2hlZHVsZXIsIGludCBpbml0aWFsQ29kZSwgQE51bGxhYmxlIFN0cmluZyBpbml0aWFsRGF0YSwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBCdW5kbGUgaW5pdGlhbEV4dHJhcyk7CiAKICAgICAvKioKICAgICAgKiBSZW1vdmUgdGhlIGRhdGEgcHJldmlvdXNseSBzZW50IHdpdGgge0BsaW5rICNzZW5kU3RpY2t5QnJvYWRjYXN0fSwKQEAgLTE1NjksOCArMTU5Myw4IEBACiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2VuZFN0aWNreU9yZGVyZWRCcm9hZGNhc3RBc1VzZXIoSW50ZW50IGludGVudCwKICAgICAgICAgICAgIFVzZXJIYW5kbGUgdXNlciwgQnJvYWRjYXN0UmVjZWl2ZXIgcmVzdWx0UmVjZWl2ZXIsCi0gICAgICAgICAgICBIYW5kbGVyIHNjaGVkdWxlciwgaW50IGluaXRpYWxDb2RlLCBTdHJpbmcgaW5pdGlhbERhdGEsCi0gICAgICAgICAgICBCdW5kbGUgaW5pdGlhbEV4dHJhcyk7CisgICAgICAgICAgICBATnVsbGFibGUgSGFuZGxlciBzY2hlZHVsZXIsIGludCBpbml0aWFsQ29kZSwgQE51bGxhYmxlIFN0cmluZyBpbml0aWFsRGF0YSwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBCdW5kbGUgaW5pdGlhbEV4dHJhcyk7CiAKICAgICAvKioKICAgICAgKiBWZXJzaW9uIG9mIHtAbGluayAjcmVtb3ZlU3RpY2t5QnJvYWRjYXN0KEludGVudCl9IHRoYXQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZQpAQCAtMTYzNyw3ICsxNjYxLDggQEAKICAgICAgKiBAc2VlICNzZW5kQnJvYWRjYXN0CiAgICAgICogQHNlZSAjdW5yZWdpc3RlclJlY2VpdmVyCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IEludGVudCByZWdpc3RlclJlY2VpdmVyKEJyb2FkY2FzdFJlY2VpdmVyIHJlY2VpdmVyLAorICAgIEBOdWxsYWJsZQorICAgIHB1YmxpYyBhYnN0cmFjdCBJbnRlbnQgcmVnaXN0ZXJSZWNlaXZlcihATnVsbGFibGUgQnJvYWRjYXN0UmVjZWl2ZXIgcmVjZWl2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVudEZpbHRlciBmaWx0ZXIpOwogCiAgICAgLyoqCkBAIC0xNjcxLDggKzE2OTYsMTAgQEAKICAgICAgKiBAc2VlICNzZW5kQnJvYWRjYXN0CiAgICAgICogQHNlZSAjdW5yZWdpc3RlclJlY2VpdmVyCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgcHVibGljIGFic3RyYWN0IEludGVudCByZWdpc3RlclJlY2VpdmVyKEJyb2FkY2FzdFJlY2VpdmVyIHJlY2VpdmVyLAotICAgICAgICAgICAgSW50ZW50RmlsdGVyIGZpbHRlciwgU3RyaW5nIGJyb2FkY2FzdFBlcm1pc3Npb24sIEhhbmRsZXIgc2NoZWR1bGVyKTsKKyAgICAgICAgICAgIEludGVudEZpbHRlciBmaWx0ZXIsIEBOdWxsYWJsZSBTdHJpbmcgYnJvYWRjYXN0UGVybWlzc2lvbiwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBIYW5kbGVyIHNjaGVkdWxlcik7CiAKICAgICAvKioKICAgICAgKiBAaGlkZQpAQCAtMTY5OCw5ICsxNzI1LDEwIEBACiAgICAgICogQHNlZSAjc2VuZEJyb2FkY2FzdAogICAgICAqIEBzZWUgI3VucmVnaXN0ZXJSZWNlaXZlcgogICAgICAqLworICAgIEBOdWxsYWJsZQogICAgIHB1YmxpYyBhYnN0cmFjdCBJbnRlbnQgcmVnaXN0ZXJSZWNlaXZlckFzVXNlcihCcm9hZGNhc3RSZWNlaXZlciByZWNlaXZlciwKLSAgICAgICAgICAgIFVzZXJIYW5kbGUgdXNlciwgSW50ZW50RmlsdGVyIGZpbHRlciwgU3RyaW5nIGJyb2FkY2FzdFBlcm1pc3Npb24sCi0gICAgICAgICAgICBIYW5kbGVyIHNjaGVkdWxlcik7CisgICAgICAgICAgICBVc2VySGFuZGxlIHVzZXIsIEludGVudEZpbHRlciBmaWx0ZXIsIEBOdWxsYWJsZSBTdHJpbmcgYnJvYWRjYXN0UGVybWlzc2lvbiwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBIYW5kbGVyIHNjaGVkdWxlcik7CiAKICAgICAvKioKICAgICAgKiBVbnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIEJyb2FkY2FzdFJlY2VpdmVyLiAgPGVtPkFsbDwvZW0+CkBAIC0xNzU5LDYgKzE3ODcsNyBAQAogICAgICAqIEBzZWUgI3N0b3BTZXJ2aWNlCiAgICAgICogQHNlZSAjYmluZFNlcnZpY2UKICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBwdWJsaWMgYWJzdHJhY3QgQ29tcG9uZW50TmFtZSBzdGFydFNlcnZpY2UoSW50ZW50IHNlcnZpY2UpOwogCiAgICAgLyoqCkBAIC0xODQ2LDggKzE4NzUsOCBAQAogICAgICAqIEBzZWUgI0JJTkRfREVCVUdfVU5CSU5ECiAgICAgICogQHNlZSAjQklORF9OT1RfRk9SRUdST1VORAogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGJpbmRTZXJ2aWNlKEludGVudCBzZXJ2aWNlLCBTZXJ2aWNlQ29ubmVjdGlvbiBjb25uLAotICAgICAgICAgICAgaW50IGZsYWdzKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBiaW5kU2VydmljZShJbnRlbnQgc2VydmljZSwgQE5vbk51bGwgU2VydmljZUNvbm5lY3Rpb24gY29ubiwKKyAgICAgICAgICAgIEBCaW5kU2VydmljZUZsYWdzIGludCBmbGFncyk7CiAKICAgICAvKioKICAgICAgKiBTYW1lIGFzIHtAbGluayAjYmluZFNlcnZpY2UoSW50ZW50LCBTZXJ2aWNlQ29ubmVjdGlvbiwgaW50KX0sIGJ1dCB3aXRoIGFuIGV4cGxpY2l0IHVzZXJIYW5kbGUKQEAgLTE4NjgsNyArMTg5Nyw3IEBACiAgICAgICoKICAgICAgKiBAc2VlICNiaW5kU2VydmljZQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHVuYmluZFNlcnZpY2UoU2VydmljZUNvbm5lY3Rpb24gY29ubik7CisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgdW5iaW5kU2VydmljZShATm9uTnVsbCBTZXJ2aWNlQ29ubmVjdGlvbiBjb25uKTsKIAogICAgIC8qKgogICAgICAqIFN0YXJ0IGV4ZWN1dGluZyBhbiB7QGxpbmsgYW5kcm9pZC5hcHAuSW5zdHJ1bWVudGF0aW9ufSBjbGFzcy4gIFRoZSBnaXZlbgpAQCAtMTg5Myw4ICsxOTIyLDY0IEBACiAgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGluc3RydW1lbnRhdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQsCiAgICAgICogZWxzZSB7QGNvZGUgZmFsc2V9IGlmIGl0IGNvdWxkIG5vdCBiZSBmb3VuZC4KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBzdGFydEluc3RydW1lbnRhdGlvbihDb21wb25lbnROYW1lIGNsYXNzTmFtZSwKLSAgICAgICAgICAgIFN0cmluZyBwcm9maWxlRmlsZSwgQnVuZGxlIGFyZ3VtZW50cyk7CisgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gc3RhcnRJbnN0cnVtZW50YXRpb24oQE5vbk51bGwgQ29tcG9uZW50TmFtZSBjbGFzc05hbWUsCisgICAgICAgICAgICBATnVsbGFibGUgU3RyaW5nIHByb2ZpbGVGaWxlLCBATnVsbGFibGUgQnVuZGxlIGFyZ3VtZW50cyk7CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBAU3RyaW5nRGVmKHsKKyAgICAgICAgICAgIFBPV0VSX1NFUlZJQ0UsCisgICAgICAgICAgICBXSU5ET1dfU0VSVklDRSwKKyAgICAgICAgICAgIExBWU9VVF9JTkZMQVRFUl9TRVJWSUNFLAorICAgICAgICAgICAgQUNDT1VOVF9TRVJWSUNFLAorICAgICAgICAgICAgQUNUSVZJVFlfU0VSVklDRSwKKyAgICAgICAgICAgIEFMQVJNX1NFUlZJQ0UsCisgICAgICAgICAgICBOT1RJRklDQVRJT05fU0VSVklDRSwKKyAgICAgICAgICAgIEFDQ0VTU0lCSUxJVFlfU0VSVklDRSwKKyAgICAgICAgICAgIENBUFRJT05JTkdfU0VSVklDRSwKKyAgICAgICAgICAgIEtFWUdVQVJEX1NFUlZJQ0UsCisgICAgICAgICAgICBMT0NBVElPTl9TRVJWSUNFLAorICAgICAgICAgICAgLy9AaGlkZTogQ09VTlRSWV9ERVRFQ1RPUiwKKyAgICAgICAgICAgIFNFQVJDSF9TRVJWSUNFLAorICAgICAgICAgICAgU0VOU09SX1NFUlZJQ0UsCisgICAgICAgICAgICBTVE9SQUdFX1NFUlZJQ0UsCisgICAgICAgICAgICBXQUxMUEFQRVJfU0VSVklDRSwKKyAgICAgICAgICAgIFZJQlJBVE9SX1NFUlZJQ0UsCisgICAgICAgICAgICAvL0BoaWRlOiBTVEFUVVNfQkFSX1NFUlZJQ0UsCisgICAgICAgICAgICBDT05ORUNUSVZJVFlfU0VSVklDRSwKKyAgICAgICAgICAgIC8vQGhpZGU6IFVQREFURV9MT0NLX1NFUlZJQ0UsCisgICAgICAgICAgICAvL0BoaWRlOiBORVRXT1JLTUFOQUdFTUVOVF9TRVJWSUNFLAorICAgICAgICAgICAgLy9AaGlkZTogTkVUV09SS19TVEFUU19TRVJWSUNFLAorICAgICAgICAgICAgLy9AaGlkZTogTkVUV09SS19QT0xJQ1lfU0VSVklDRSwKKyAgICAgICAgICAgIFdJRklfU0VSVklDRSwKKyAgICAgICAgICAgIFdJRklfUDJQX1NFUlZJQ0UsCisgICAgICAgICAgICBOU0RfU0VSVklDRSwKKyAgICAgICAgICAgIEFVRElPX1NFUlZJQ0UsCisgICAgICAgICAgICBNRURJQV9ST1VURVJfU0VSVklDRSwKKyAgICAgICAgICAgIFRFTEVQSE9OWV9TRVJWSUNFLAorICAgICAgICAgICAgQ0xJUEJPQVJEX1NFUlZJQ0UsCisgICAgICAgICAgICBJTlBVVF9NRVRIT0RfU0VSVklDRSwKKyAgICAgICAgICAgIFRFWFRfU0VSVklDRVNfTUFOQUdFUl9TRVJWSUNFLAorICAgICAgICAgICAgLy9AaGlkZTogQVBQV0lER0VUX1NFUlZJQ0UsCisgICAgICAgICAgICAvL0BoaWRlOiBCQUNLVVBfU0VSVklDRSwKKyAgICAgICAgICAgIERST1BCT1hfU0VSVklDRSwKKyAgICAgICAgICAgIERFVklDRV9QT0xJQ1lfU0VSVklDRSwKKyAgICAgICAgICAgIFVJX01PREVfU0VSVklDRSwKKyAgICAgICAgICAgIERPV05MT0FEX1NFUlZJQ0UsCisgICAgICAgICAgICBORkNfU0VSVklDRSwKKyAgICAgICAgICAgIEJMVUVUT09USF9TRVJWSUNFLAorICAgICAgICAgICAgLy9AaGlkZTogU0lQX1NFUlZJQ0UsCisgICAgICAgICAgICBVU0JfU0VSVklDRSwKKyAgICAgICAgICAgIC8vQGhpZGU6IFNFUklBTF9TRVJWSUNFLAorICAgICAgICAgICAgSU5QVVRfU0VSVklDRSwKKyAgICAgICAgICAgIERJU1BMQVlfU0VSVklDRSwKKyAgICAgICAgICAgIC8vQGhpZGU6IFNDSEVEVUxJTkdfUE9MSUNZX1NFUlZJQ0UsCisgICAgICAgICAgICBVU0VSX1NFUlZJQ0UsCisgICAgICAgICAgICAvL0BoaWRlOiBBUFBfT1BTX1NFUlZJQ0UKKyAgICAgICAgICAgIENBTUVSQV9TRVJWSUNFLAorICAgICAgICAgICAgUFJJTlRfU0VSVklDRQorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFNlcnZpY2VOYW1lIHt9CiAKICAgICAvKioKICAgICAgKiBSZXR1cm4gdGhlIGhhbmRsZSB0byBhIHN5c3RlbS1sZXZlbCBzZXJ2aWNlIGJ5IG5hbWUuIFRoZSBjbGFzcyBvZiB0aGUKQEAgLTE5OTUsNyArMjA4MCw3IEBACiAgICAgICogQHNlZSAjRE9XTkxPQURfU0VSVklDRQogICAgICAqIEBzZWUgYW5kcm9pZC5hcHAuRG93bmxvYWRNYW5hZ2VyCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IE9iamVjdCBnZXRTeXN0ZW1TZXJ2aWNlKFN0cmluZyBuYW1lKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgT2JqZWN0IGdldFN5c3RlbVNlcnZpY2UoQFNlcnZpY2VOYW1lIEBOb25OdWxsIFN0cmluZyBuYW1lKTsKIAogICAgIC8qKgogICAgICAqIFVzZSB3aXRoIHtAbGluayAjZ2V0U3lzdGVtU2VydmljZX0gdG8gcmV0cmlldmUgYQpAQCAtMjQzMSw3ICsyNTE2LDYgQEAKICAgICAgKgogICAgICAqIEBzZWUgI2dldFN5c3RlbVNlcnZpY2UKICAgICAgKiBAc2VlIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNYW5hZ2VyCi0gICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQU1FUkFfU0VSVklDRSA9ICJjYW1lcmEiOwogCkBAIC0yNDcwLDcgKzI1NTQsOCBAQAogICAgICAqIEBzZWUgUGFja2FnZU1hbmFnZXIjY2hlY2tQZXJtaXNzaW9uKFN0cmluZywgU3RyaW5nKQogICAgICAqIEBzZWUgI2NoZWNrQ2FsbGluZ1Blcm1pc3Npb24KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGNoZWNrUGVybWlzc2lvbihTdHJpbmcgcGVybWlzc2lvbiwgaW50IHBpZCwgaW50IHVpZCk7CisgICAgQFBhY2thZ2VNYW5hZ2VyLlBlcm1pc3Npb25SZXN1bHQKKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGNoZWNrUGVybWlzc2lvbihATm9uTnVsbCBTdHJpbmcgcGVybWlzc2lvbiwgaW50IHBpZCwgaW50IHVpZCk7CiAKICAgICAvKioKICAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgY2FsbGluZyBwcm9jZXNzIG9mIGFuIElQQyB5b3UgYXJlIGhhbmRsaW5nIGhhcyBiZWVuCkBAIC0yNDkzLDcgKzI1NzgsOCBAQAogICAgICAqIEBzZWUgI2NoZWNrUGVybWlzc2lvbgogICAgICAqIEBzZWUgI2NoZWNrQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oU3RyaW5nIHBlcm1pc3Npb24pOworICAgIEBQYWNrYWdlTWFuYWdlci5QZXJtaXNzaW9uUmVzdWx0CisgICAgcHVibGljIGFic3RyYWN0IGludCBjaGVja0NhbGxpbmdQZXJtaXNzaW9uKEBOb25OdWxsIFN0cmluZyBwZXJtaXNzaW9uKTsKIAogICAgIC8qKgogICAgICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBjYWxsaW5nIHByb2Nlc3Mgb2YgYW4gSVBDIDxlbT5vciB5b3U8L2VtPiBoYXZlIGJlZW4KQEAgLTI1MTEsNyArMjU5Nyw4IEBACiAgICAgICogQHNlZSAjY2hlY2tQZXJtaXNzaW9uCiAgICAgICogQHNlZSAjY2hlY2tDYWxsaW5nUGVybWlzc2lvbgogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgY2hlY2tDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihTdHJpbmcgcGVybWlzc2lvbik7CisgICAgQFBhY2thZ2VNYW5hZ2VyLlBlcm1pc3Npb25SZXN1bHQKKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGNoZWNrQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oQE5vbk51bGwgU3RyaW5nIHBlcm1pc3Npb24pOwogCiAgICAgLyoqCiAgICAgICogSWYgdGhlIGdpdmVuIHBlcm1pc3Npb24gaXMgbm90IGFsbG93ZWQgZm9yIGEgcGFydGljdWxhciBwcm9jZXNzCkBAIC0yNTI2LDcgKzI2MTMsNyBAQAogICAgICAqIEBzZWUgI2NoZWNrUGVybWlzc2lvbihTdHJpbmcsIGludCwgaW50KQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGVuZm9yY2VQZXJtaXNzaW9uKAotICAgICAgICAgICAgU3RyaW5nIHBlcm1pc3Npb24sIGludCBwaWQsIGludCB1aWQsIFN0cmluZyBtZXNzYWdlKTsKKyAgICAgICAgICAgIEBOb25OdWxsIFN0cmluZyBwZXJtaXNzaW9uLCBpbnQgcGlkLCBpbnQgdWlkLCBATnVsbGFibGUgU3RyaW5nIG1lc3NhZ2UpOwogCiAgICAgLyoqCiAgICAgICogSWYgdGhlIGNhbGxpbmcgcHJvY2VzcyBvZiBhbiBJUEMgeW91IGFyZSBoYW5kbGluZyBoYXMgbm90IGJlZW4KQEAgLTI1NDcsNyArMjYzNCw3IEBACiAgICAgICogQHNlZSAjY2hlY2tDYWxsaW5nUGVybWlzc2lvbihTdHJpbmcpCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKAotICAgICAgICAgICAgU3RyaW5nIHBlcm1pc3Npb24sIFN0cmluZyBtZXNzYWdlKTsKKyAgICAgICAgICAgIEBOb25OdWxsIFN0cmluZyBwZXJtaXNzaW9uLCBATnVsbGFibGUgU3RyaW5nIG1lc3NhZ2UpOwogCiAgICAgLyoqCiAgICAgICogSWYgbmVpdGhlciB5b3Ugbm9yIHRoZSBjYWxsaW5nIHByb2Nlc3Mgb2YgYW4gSVBDIHlvdSBhcmUKQEAgLTI1NjMsNyArMjY1MCw3IEBACiAgICAgICogQHNlZSAjY2hlY2tDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihTdHJpbmcpCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKAotICAgICAgICAgICAgU3RyaW5nIHBlcm1pc3Npb24sIFN0cmluZyBtZXNzYWdlKTsKKyAgICAgICAgICAgIEBOb25OdWxsIFN0cmluZyBwZXJtaXNzaW9uLCBATnVsbGFibGUgU3RyaW5nIG1lc3NhZ2UpOwogCiAgICAgLyoqCiAgICAgICogR3JhbnQgcGVybWlzc2lvbiB0byBhY2Nlc3MgYSBzcGVjaWZpYyBVcmkgdG8gYW5vdGhlciBwYWNrYWdlLCByZWdhcmRsZXNzCkBAIC0yNTk5LDcgKzI2ODYsNyBAQAogICAgICAqIEBzZWUgI3Jldm9rZVVyaVBlcm1pc3Npb24KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBncmFudFVyaVBlcm1pc3Npb24oU3RyaW5nIHRvUGFja2FnZSwgVXJpIHVyaSwKLSAgICAgICAgICAgIGludCBtb2RlRmxhZ3MpOworICAgICAgICAgICAgQEludGVudC5HcmFudFVyaU1vZGUgaW50IG1vZGVGbGFncyk7CiAKICAgICAvKioKICAgICAgKiBSZW1vdmUgYWxsIHBlcm1pc3Npb25zIHRvIGFjY2VzcyBhIHBhcnRpY3VsYXIgY29udGVudCBwcm92aWRlciBVcmkKQEAgLTI2MTgsNyArMjcwNSw3IEBACiAgICAgICoKICAgICAgKiBAc2VlICNncmFudFVyaVBlcm1pc3Npb24KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZXZva2VVcmlQZXJtaXNzaW9uKFVyaSB1cmksIGludCBtb2RlRmxhZ3MpOworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHJldm9rZVVyaVBlcm1pc3Npb24oVXJpIHVyaSwgQEludGVudC5HcmFudFVyaU1vZGUgaW50IG1vZGVGbGFncyk7CiAKICAgICAvKioKICAgICAgKiBEZXRlcm1pbmUgd2hldGhlciBhIHBhcnRpY3VsYXIgcHJvY2VzcyBhbmQgdXNlciBJRCBoYXMgYmVlbiBncmFudGVkCkBAIC0yNjQxLDcgKzI3MjgsOCBAQAogICAgICAqCiAgICAgICogQHNlZSAjY2hlY2tDYWxsaW5nVXJpUGVybWlzc2lvbgogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgY2hlY2tVcmlQZXJtaXNzaW9uKFVyaSB1cmksIGludCBwaWQsIGludCB1aWQsIGludCBtb2RlRmxhZ3MpOworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgY2hlY2tVcmlQZXJtaXNzaW9uKFVyaSB1cmksIGludCBwaWQsIGludCB1aWQsCisgICAgICAgICAgICBASW50ZW50LkdyYW50VXJpTW9kZSBpbnQgbW9kZUZsYWdzKTsKIAogICAgIC8qKgogICAgICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBjYWxsaW5nIHByb2Nlc3MgYW5kIHVzZXIgSUQgaGFzIGJlZW4KQEAgLTI2NjQsNyArMjc1Miw3IEBACiAgICAgICoKICAgICAgKiBAc2VlICNjaGVja1VyaVBlcm1pc3Npb24oVXJpLCBpbnQsIGludCwgaW50KQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgY2hlY2tDYWxsaW5nVXJpUGVybWlzc2lvbihVcmkgdXJpLCBpbnQgbW9kZUZsYWdzKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGNoZWNrQ2FsbGluZ1VyaVBlcm1pc3Npb24oVXJpIHVyaSwgQEludGVudC5HcmFudFVyaU1vZGUgaW50IG1vZGVGbGFncyk7CiAKICAgICAvKioKICAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgY2FsbGluZyBwcm9jZXNzIG9mIGFuIElQQyA8ZW0+b3IgeW91PC9lbT4gaGFzIGJlZW4gZ3JhbnRlZApAQCAtMjY4Myw3ICsyNzcxLDggQEAKICAgICAgKgogICAgICAqIEBzZWUgI2NoZWNrQ2FsbGluZ1VyaVBlcm1pc3Npb24KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGNoZWNrQ2FsbGluZ09yU2VsZlVyaVBlcm1pc3Npb24oVXJpIHVyaSwgaW50IG1vZGVGbGFncyk7CisgICAgcHVibGljIGFic3RyYWN0IGludCBjaGVja0NhbGxpbmdPclNlbGZVcmlQZXJtaXNzaW9uKFVyaSB1cmksCisgICAgICAgICAgICBASW50ZW50LkdyYW50VXJpTW9kZSBpbnQgbW9kZUZsYWdzKTsKIAogICAgIC8qKgogICAgICAqIENoZWNrIGJvdGggYSBVcmkgYW5kIG5vcm1hbCBwZXJtaXNzaW9uLiAgVGhpcyBhbGxvd3MgeW91IHRvIHBlcmZvcm0KQEAgLTI2OTUsNyArMjc4NCw3IEBACiAgICAgICogQHBhcmFtIHJlYWRQZXJtaXNzaW9uIFRoZSBwZXJtaXNzaW9uIHRoYXQgcHJvdmlkZXMgb3ZlcmFsbCByZWFkIGFjY2VzcywKICAgICAgKiBvciBudWxsIHRvIG5vdCBkbyB0aGlzIGNoZWNrLgogICAgICAqIEBwYXJhbSB3cml0ZVBlcm1pc3Npb24gVGhlIHBlcm1pc3Npb24gdGhhdCBwcm92aWRlcyBvdmVyYWxsIHdyaXRlCi0gICAgICogYWNlc3MsIG9yIG51bGwgdG8gbm90IGRvIHRoaXMgY2hlY2suCisgICAgICogYWNjZXNzLCBvciBudWxsIHRvIG5vdCBkbyB0aGlzIGNoZWNrLgogICAgICAqIEBwYXJhbSBwaWQgVGhlIHByb2Nlc3MgSUQgYmVpbmcgY2hlY2tlZCBhZ2FpbnN0LiAgTXVzdCBiZSAmZ3Q7IDAuCiAgICAgICogQHBhcmFtIHVpZCBUaGUgdXNlciBJRCBiZWluZyBjaGVja2VkIGFnYWluc3QuICBBIHVpZCBvZiAwIGlzIHRoZSByb290CiAgICAgICogdXNlciwgd2hpY2ggd2lsbCBwYXNzIGV2ZXJ5IHBlcm1pc3Npb24gY2hlY2suCkBAIC0yNzA3LDggKzI3OTYsOSBAQAogICAgICAqIGlzIGFsbG93ZWQgdG8gYWNjZXNzIHRoYXQgdXJpIG9yIGhvbGRzIG9uZSBvZiB0aGUgZ2l2ZW4gcGVybWlzc2lvbnMsIG9yCiAgICAgICoge0BsaW5rIFBhY2thZ2VNYW5hZ2VyI1BFUk1JU1NJT05fREVOSUVEfSBpZiBpdCBpcyBub3QuCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGludCBjaGVja1VyaVBlcm1pc3Npb24oVXJpIHVyaSwgU3RyaW5nIHJlYWRQZXJtaXNzaW9uLAotICAgICAgICAgICAgU3RyaW5nIHdyaXRlUGVybWlzc2lvbiwgaW50IHBpZCwgaW50IHVpZCwgaW50IG1vZGVGbGFncyk7CisgICAgcHVibGljIGFic3RyYWN0IGludCBjaGVja1VyaVBlcm1pc3Npb24oQE51bGxhYmxlIFVyaSB1cmksIEBOdWxsYWJsZSBTdHJpbmcgcmVhZFBlcm1pc3Npb24sCisgICAgICAgICAgICBATnVsbGFibGUgU3RyaW5nIHdyaXRlUGVybWlzc2lvbiwgaW50IHBpZCwgaW50IHVpZCwKKyAgICAgICAgICAgIEBJbnRlbnQuR3JhbnRVcmlNb2RlIGludCBtb2RlRmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogSWYgYSBwYXJ0aWN1bGFyIHByb2Nlc3MgYW5kIHVzZXIgSUQgaGFzIG5vdCBiZWVuIGdyYW50ZWQKQEAgLTI3MzAsNyArMjgyMCw3IEBACiAgICAgICogQHNlZSAjY2hlY2tVcmlQZXJtaXNzaW9uKFVyaSwgaW50LCBpbnQsIGludCkKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBlbmZvcmNlVXJpUGVybWlzc2lvbigKLSAgICAgICAgICAgIFVyaSB1cmksIGludCBwaWQsIGludCB1aWQsIGludCBtb2RlRmxhZ3MsIFN0cmluZyBtZXNzYWdlKTsKKyAgICAgICAgICAgIFVyaSB1cmksIGludCBwaWQsIGludCB1aWQsIEBJbnRlbnQuR3JhbnRVcmlNb2RlIGludCBtb2RlRmxhZ3MsIFN0cmluZyBtZXNzYWdlKTsKIAogICAgIC8qKgogICAgICAqIElmIHRoZSBjYWxsaW5nIHByb2Nlc3MgYW5kIHVzZXIgSUQgaGFzIG5vdCBiZWVuIGdyYW50ZWQKQEAgLTI3NTIsNyArMjg0Miw3IEBACiAgICAgICogQHNlZSAjY2hlY2tDYWxsaW5nVXJpUGVybWlzc2lvbihVcmksIGludCkKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBlbmZvcmNlQ2FsbGluZ1VyaVBlcm1pc3Npb24oCi0gICAgICAgICAgICBVcmkgdXJpLCBpbnQgbW9kZUZsYWdzLCBTdHJpbmcgbWVzc2FnZSk7CisgICAgICAgICAgICBVcmkgdXJpLCBASW50ZW50LkdyYW50VXJpTW9kZSBpbnQgbW9kZUZsYWdzLCBTdHJpbmcgbWVzc2FnZSk7CiAKICAgICAvKioKICAgICAgKiBJZiB0aGUgY2FsbGluZyBwcm9jZXNzIG9mIGFuIElQQyA8ZW0+b3IgeW91PC9lbT4gaGFzIG5vdCBiZWVuCkBAIC0yNzcxLDcgKzI4NjEsNyBAQAogICAgICAqIEBzZWUgI2NoZWNrQ2FsbGluZ09yU2VsZlVyaVBlcm1pc3Npb24oVXJpLCBpbnQpCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZW5mb3JjZUNhbGxpbmdPclNlbGZVcmlQZXJtaXNzaW9uKAotICAgICAgICAgICAgVXJpIHVyaSwgaW50IG1vZGVGbGFncywgU3RyaW5nIG1lc3NhZ2UpOworICAgICAgICAgICAgVXJpIHVyaSwgQEludGVudC5HcmFudFVyaU1vZGUgaW50IG1vZGVGbGFncywgU3RyaW5nIG1lc3NhZ2UpOwogCiAgICAgLyoqCiAgICAgICogRW5mb3JjZSBib3RoIGEgVXJpIGFuZCBub3JtYWwgcGVybWlzc2lvbi4gIFRoaXMgYWxsb3dzIHlvdSB0byBwZXJmb3JtCkBAIC0yNzgzLDcgKzI4NzMsNyBAQAogICAgICAqIEBwYXJhbSByZWFkUGVybWlzc2lvbiBUaGUgcGVybWlzc2lvbiB0aGF0IHByb3ZpZGVzIG92ZXJhbGwgcmVhZCBhY2Nlc3MsCiAgICAgICogb3IgbnVsbCB0byBub3QgZG8gdGhpcyBjaGVjay4KICAgICAgKiBAcGFyYW0gd3JpdGVQZXJtaXNzaW9uIFRoZSBwZXJtaXNzaW9uIHRoYXQgcHJvdmlkZXMgb3ZlcmFsbCB3cml0ZQotICAgICAqIGFjZXNzLCBvciBudWxsIHRvIG5vdCBkbyB0aGlzIGNoZWNrLgorICAgICAqIGFjY2Vzcywgb3IgbnVsbCB0byBub3QgZG8gdGhpcyBjaGVjay4KICAgICAgKiBAcGFyYW0gcGlkIFRoZSBwcm9jZXNzIElEIGJlaW5nIGNoZWNrZWQgYWdhaW5zdC4gIE11c3QgYmUgJmd0OyAwLgogICAgICAqIEBwYXJhbSB1aWQgVGhlIHVzZXIgSUQgYmVpbmcgY2hlY2tlZCBhZ2FpbnN0LiAgQSB1aWQgb2YgMCBpcyB0aGUgcm9vdAogICAgICAqIHVzZXIsIHdoaWNoIHdpbGwgcGFzcyBldmVyeSBwZXJtaXNzaW9uIGNoZWNrLgpAQCAtMjc5NSw4ICsyODg1LDE1IEBACiAgICAgICogQHNlZSAjY2hlY2tVcmlQZXJtaXNzaW9uKFVyaSwgU3RyaW5nLCBTdHJpbmcsIGludCwgaW50LCBpbnQpCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZW5mb3JjZVVyaVBlcm1pc3Npb24oCi0gICAgICAgICAgICBVcmkgdXJpLCBTdHJpbmcgcmVhZFBlcm1pc3Npb24sIFN0cmluZyB3cml0ZVBlcm1pc3Npb24sCi0gICAgICAgICAgICBpbnQgcGlkLCBpbnQgdWlkLCBpbnQgbW9kZUZsYWdzLCBTdHJpbmcgbWVzc2FnZSk7CisgICAgICAgICAgICBATnVsbGFibGUgVXJpIHVyaSwgQE51bGxhYmxlIFN0cmluZyByZWFkUGVybWlzc2lvbiwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBTdHJpbmcgd3JpdGVQZXJtaXNzaW9uLCBpbnQgcGlkLCBpbnQgdWlkLCBASW50ZW50LkdyYW50VXJpTW9kZSBpbnQgbW9kZUZsYWdzLAorICAgICAgICAgICAgQE51bGxhYmxlIFN0cmluZyBtZXNzYWdlKTsKKworICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoZmxhZyA9IHRydWUsCisgICAgICAgICAgICB2YWx1ZSA9IHtDT05URVhUX0lOQ0xVREVfQ09ERSwgQ09OVEVYVF9JR05PUkVfU0VDVVJJVFksIENPTlRFWFRfUkVTVFJJQ1RFRH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIENyZWF0ZVBhY2thZ2VPcHRpb25zIHt9CiAKICAgICAvKioKICAgICAgKiBGbGFnIGZvciB1c2Ugd2l0aCB7QGxpbmsgI2NyZWF0ZVBhY2thZ2VDb250ZXh0fTogaW5jbHVkZSB0aGUgYXBwbGljYXRpb24KQEAgLTI4NTQsNyArMjk1MSw3IEBACiAgICAgICogdGhlIGdpdmVuIHBhY2thZ2UgbmFtZS4KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgQ29udGV4dCBjcmVhdGVQYWNrYWdlQ29udGV4dChTdHJpbmcgcGFja2FnZU5hbWUsCi0gICAgICAgICAgICBpbnQgZmxhZ3MpIHRocm93cyBQYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CisgICAgICAgICAgICBAQ3JlYXRlUGFja2FnZU9wdGlvbnMgaW50IGZsYWdzKSB0aHJvd3MgUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogU2ltaWxhciB0byB7QGxpbmsgI2NyZWF0ZVBhY2thZ2VDb250ZXh0KFN0cmluZywgaW50KX0sIGJ1dCB3aXRoIGEKQEAgLTI4OTAsNyArMjk4Nyw4IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIEEge0BsaW5rIENvbnRleHR9IHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGUuCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IENvbnRleHQgY3JlYXRlQ29uZmlndXJhdGlvbkNvbnRleHQoQ29uZmlndXJhdGlvbiBvdmVycmlkZUNvbmZpZ3VyYXRpb24pOworICAgIHB1YmxpYyBhYnN0cmFjdCBDb250ZXh0IGNyZWF0ZUNvbmZpZ3VyYXRpb25Db250ZXh0KAorICAgICAgICAgICAgQE5vbk51bGwgQ29uZmlndXJhdGlvbiBvdmVycmlkZUNvbmZpZ3VyYXRpb24pOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJuIGEgbmV3IENvbnRleHQgb2JqZWN0IGZvciB0aGUgY3VycmVudCBDb250ZXh0IGJ1dCB3aG9zZSByZXNvdXJjZXMKQEAgLTI5MTAsNyArMzAwOCw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIEEge0BsaW5rIENvbnRleHR9IGZvciB0aGUgZGlzcGxheS4KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgQ29udGV4dCBjcmVhdGVEaXNwbGF5Q29udGV4dChEaXNwbGF5IGRpc3BsYXkpOworICAgIHB1YmxpYyBhYnN0cmFjdCBDb250ZXh0IGNyZWF0ZURpc3BsYXlDb250ZXh0KEBOb25OdWxsIERpc3BsYXkgZGlzcGxheSk7CiAKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkaXNwbGF5IGFkanVzdG1lbnRzIGhvbGRlciBmb3IgdGhpcyBjb250ZXh0LiAgVGhpcyBpbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZXh0V3JhcHBlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZXh0V3JhcHBlci5qYXZhCmluZGV4IGE3MDhkYWQuLjkzZjZjZGYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGV4dFdyYXBwZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRleHRXcmFwcGVyLmphdmEKQEAgLTE2LDkgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmNvbnRlbnQ7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXJOYXRpdmU7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuTG9hZGVkQXBrOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRNYW5hZ2VyOwpAQCAtMzMsNyArMzAsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXlBZGp1c3RtZW50czsKIGltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ3Vyc29yTG9hZGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0N1cnNvckxvYWRlci5qYXZhCmluZGV4IDVkN2Q2NzcuLmM3ODg3MWMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ3Vyc29yTG9hZGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9DdXJzb3JMb2FkZXIuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuY29udGVudDsKIAotaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ29udGVudE9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLkNhbmNlbGxhdGlvblNpZ25hbDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvRW50aXR5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0VudGl0eS5qYXZhCmluZGV4IDc4NDJkZTAuLjYwN2NiM2YgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvRW50aXR5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9FbnRpdHkuamF2YQpAQCAtMTYsMTAgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLmNvbnRlbnQ7CiAKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0lBbm9ueW1vdXNTeW5jQWRhcHRlci5haWRsIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JQW5vbnltb3VzU3luY0FkYXB0ZXIuYWlkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgwY2VhMy4uMDAwMDAwMAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0lBbm9ueW1vdXNTeW5jQWRhcHRlci5haWRsCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5jb250ZW50OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JU3luY0NvbnRleHQ7Ci0KLS8qKgotICogSW50ZXJmYWNlIHRvIGRlZmluZSBhbiBhbm9ueW1vdXMgc2VydmljZSB0aGF0IGlzIGV4dGVuZGVkIGJ5IGRldmVsb3BlcnMKLSAqIGluIG9yZGVyIHRvIHBlcmZvcm0gYW5vbnltb3VzIHN5bmNzIChzeW5jcyB3aXRob3V0IGFuIEFjY291bnQgb3IgQ29udGVudAotICogUHJvdmlkZXIgc3BlY2lmaWVkKS4gU2VlIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQWJzdHJhY3RUaHJlYWRlZFN5bmNBZGFwdGVyfS4KLSAqIHtAaGlkZX0KLSAqLwotb25ld2F5IGludGVyZmFjZSBJQW5vbnltb3VzU3luY0FkYXB0ZXIgewotCi0gICAgLyoqCi0gICAgICogSW5pdGlhdGUgYSBzeW5jLiBTeW5jQWRhcHRlci1zcGVjaWZpYyBwYXJhbWV0ZXJzIG1heSBiZSBzcGVjaWZpZWQgaW4KLSAgICAgKiBleHRyYXMsIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gbm90IGJlIG51bGwuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc3luY0NvbnRleHQgdGhlIElTeW5jQ29udGV4dCB1c2VkIHRvIGluZGljYXRlIHRoZSBwcm9ncmVzcyBvZiB0aGUgc3luYy4gV2hlbgotICAgICAqICAgdGhlIHN5bmMgaXMgZmluaXNoZWQgKHN1Y2Nlc3NmdWxseSBvciBub3QpIElTeW5jQ29udGV4dC5vbkZpbmlzaGVkKCkgbXVzdCBiZSBjYWxsZWQuCi0gICAgICogQHBhcmFtIGV4dHJhcyBTeW5jQWRhcHRlci1zcGVjaWZpYyBwYXJhbWV0ZXJzLgotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBzdGFydFN5bmMoSVN5bmNDb250ZXh0IHN5bmNDb250ZXh0LCBpbiBCdW5kbGUgZXh0cmFzKTsKLQotICAgIC8qKgotICAgICAqIENhbmNlbCB0aGUgY3VycmVudGx5IG9uZ29pbmcgc3luYy4KLSAgICAgKi8KLSAgICB2b2lkIGNhbmNlbFN5bmMoSVN5bmNDb250ZXh0IHN5bmNDb250ZXh0KTsKLQotfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JQ29udGVudFNlcnZpY2UuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSUNvbnRlbnRTZXJ2aWNlLmFpZGwKaW5kZXggOWFkNWExOS4uNzNhNzZlOCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JQ29udGVudFNlcnZpY2UuYWlkbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0lDb250ZW50U2VydmljZS5haWRsCkBAIC0xNyw2ICsxNyw3IEBACiBwYWNrYWdlIGFuZHJvaWQuY29udGVudDsKIAogaW1wb3J0IGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU3luY0luZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklTeW5jU3RhdHVzT2JzZXJ2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlN5bmNBZGFwdGVyVHlwZTsKQEAgLTU1LDggKzU2LDE0IEBACiAgICAgICAgICAgICBpbnQgdXNlckhhbmRsZSk7CiAKICAgICB2b2lkIHJlcXVlc3RTeW5jKGluIEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwgaW4gQnVuZGxlIGV4dHJhcyk7CisgICAgLyoqCisgICAgICogU3RhcnQgYSBzeW5jIGdpdmVuIGEgcmVxdWVzdC4KKyAgICAgKi8KICAgICB2b2lkIHN5bmMoaW4gU3luY1JlcXVlc3QgcmVxdWVzdCk7Ci0gICAgdm9pZCBjYW5jZWxTeW5jKGluIEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSk7CisgICAgdm9pZCBjYW5jZWxTeW5jKGluIEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwgaW4gQ29tcG9uZW50TmFtZSBjbmFtZSk7CisKKyAgICAvKiogQ2FuY2VsIGEgc3luYywgcHJvdmlkaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeW5jIHRvIGJlIGNhbmNlbGxlZC4gKi8KKyAgICAgdm9pZCBjYW5jZWxSZXF1ZXN0KGluIFN5bmNSZXF1ZXN0IHJlcXVlc3QpOwogCiAgICAgLyoqCiAgICAgICogQ2hlY2sgaWYgdGhlIHByb3ZpZGVyIHNob3VsZCBiZSBzeW5jZWQgd2hlbiBhIG5ldHdvcmsgdGlja2xlIGlzIHJlY2VpdmVkCkBAIC03NCwxMiArODEsMTQgQEAKICAgICB2b2lkIHNldFN5bmNBdXRvbWF0aWNhbGx5KGluIEFjY291bnQgYWNjb3VudCwgU3RyaW5nIHByb3ZpZGVyTmFtZSwgYm9vbGVhbiBzeW5jKTsKIAogICAgIC8qKgotICAgICAqIEdldCB0aGUgZnJlcXVlbmN5IG9mIHRoZSBwZXJpb2RpYyBwb2xsLCBpZiBhbnkuCi0gICAgICogQHBhcmFtIHByb3ZpZGVyTmFtZSB0aGUgcHJvdmlkZXIgd2hvc2Ugc2V0dGluZyB3ZSBhcmUgcXVlcnlpbmcKLSAgICAgKiBAcmV0dXJuIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHBlcmlvZGljIHN5bmMgaW4gc2Vjb25kcy4gSWYgMCB0aGVuIG5vIHBlcmlvZGljIHN5bmNzCi0gICAgICogd2lsbCB0YWtlIHBsYWNlLgorICAgICAqIEdldCBhIGxpc3Qgb2YgcGVyaW9kaWMgb3BlcmF0aW9ucyBmb3IgYSBzcGVjaWZpZWQgYXV0aG9yaXR5LCBvciBzZXJ2aWNlLgorICAgICAqIEBwYXJhbSBhY2NvdW50IGFjY291bnQgZm9yIGF1dGhvcml0eSwgbXVzdCBiZSBudWxsIGlmIGNuYW1lIGlzIG5vbi1udWxsLgorICAgICAqIEBwYXJhbSBwcm92aWRlck5hbWUgbmFtZSBvZiBwcm92aWRlciwgbXVzdCBiZSBudWxsIGlmIGNuYW1lIGlzIG5vbi1udWxsLgorICAgICAqIEBwYXJhbSBjbmFtZSBjb21wb25lbnQgdG8gaWRlbnRpZnkgc3luYyBzZXJ2aWNlLCBtdXN0IGJlIG51bGwgaWYgYWNjb3VudC9wcm92aWRlck5hbWUgYXJlCisgICAgICogbm9uLW51bGwuCiAgICAgICovCi0gICAgTGlzdDxQZXJpb2RpY1N5bmM+IGdldFBlcmlvZGljU3luY3MoaW4gQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgcHJvdmlkZXJOYW1lKTsKKyAgICBMaXN0PFBlcmlvZGljU3luYz4gZ2V0UGVyaW9kaWNTeW5jcyhpbiBBY2NvdW50IGFjY291bnQsIFN0cmluZyBwcm92aWRlck5hbWUsCisgICAgICAgIGluIENvbXBvbmVudE5hbWUgY25hbWUpOwogCiAgICAgLyoqCiAgICAgICogU2V0IHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlciBpcyB0byBiZSBzeW5jZWQgb24gYSBwZXJpb2RpYyBiYXNpcy4KQEAgLTExMiwxNiArMTIxLDIzIEBACiAgICAgICovCiAgICAgdm9pZCBzZXRJc1N5bmNhYmxlKGluIEFjY291bnQgYWNjb3VudCwgU3RyaW5nIHByb3ZpZGVyTmFtZSwgaW50IHN5bmNhYmxlKTsKIAorICAgIC8qKgorICAgICAqIENvcnJlc3BvbmRzIHJvdWdobHkgdG8gc2V0SXNTeW5jYWJsZShTdHJpbmcgYWNjb3VudCwgU3RyaW5nIHByb3ZpZGVyKSBmb3Igc3luY3MgdGhhdCBiaW5kCisgICAgICogdG8gYSBTeW5jU2VydmljZS4KKyAgICAgKi8KKyAgICB2b2lkIHNldFNlcnZpY2VBY3RpdmUoaW4gQ29tcG9uZW50TmFtZSBjbmFtZSwgYm9vbGVhbiBhY3RpdmUpOworCisgICAgLyoqCisgICAgICogQ29ycmVzcG9uZHMgcm91Z2hseSB0byBnZXRJc1N5bmNhYmxlKFN0cmluZyBhY2NvdW50LCBTdHJpbmcgcHJvdmlkZXIpIGZvciBzeW5jcyB0aGF0IGJpbmQKKyAgICAgKiB0byBhIFN5bmNTZXJ2aWNlLgorICAgICAqIEByZXR1cm4gMCBpZiB0aGlzIFN5bmNTZXJ2aWNlIGlzIG5vdCBlbmFibGVkLCAxIGlmIGVuYWJsZWQsIDwwIGlmIHVua25vd24uCisgICAgICovCisgICAgYm9vbGVhbiBpc1NlcnZpY2VBY3RpdmUoaW4gQ29tcG9uZW50TmFtZSBjbmFtZSk7CisKICAgICB2b2lkIHNldE1hc3RlclN5bmNBdXRvbWF0aWNhbGx5KGJvb2xlYW4gZmxhZyk7CiAKICAgICBib29sZWFuIGdldE1hc3RlclN5bmNBdXRvbWF0aWNhbGx5KCk7CiAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgY3VycmVudGx5IGEgc3luYyBvcGVyYXRpb24gZm9yIHRoZSBnaXZlbgotICAgICAqIGFjY291bnQgb3IgYXV0aG9yaXR5IGluIHRoZSBwZW5kaW5nIGxpc3QsIG9yIGFjdGl2ZWx5IGJlaW5nIHByb2Nlc3NlZC4KLSAgICAgKi8KLSAgICBib29sZWFuIGlzU3luY0FjdGl2ZShpbiBBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHkpOwotCiAgICAgTGlzdDxTeW5jSW5mbz4gZ2V0Q3VycmVudFN5bmNzKCk7CiAKICAgICAvKioKQEAgLTEzMSwxNyArMTQ3LDMzIEBACiAgICAgU3luY0FkYXB0ZXJUeXBlW10gZ2V0U3luY0FkYXB0ZXJUeXBlcygpOwogCiAgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBhIG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGFjY291bnQvYXV0aG9yaXR5IG9yIHNlcnZpY2UKKyAgICAgKiBhY3RpdmVseSBiZWluZyBwcm9jZXNzZWQuCisgICAgICogQHBhcmFtIGFjY291bnQgYWNjb3VudCBmb3IgYXV0aG9yaXR5LCBtdXN0IGJlIG51bGwgaWYgY25hbWUgaXMgbm9uLW51bGwuCisgICAgICogQHBhcmFtIHByb3ZpZGVyTmFtZSBuYW1lIG9mIHByb3ZpZGVyLCBtdXN0IGJlIG51bGwgaWYgY25hbWUgaXMgbm9uLW51bGwuCisgICAgICogQHBhcmFtIGNuYW1lIGNvbXBvbmVudCB0byBpZGVudGlmeSBzeW5jIHNlcnZpY2UsIG11c3QgYmUgbnVsbCBpZiBhY2NvdW50L3Byb3ZpZGVyTmFtZSBhcmUKKyAgICAgKiBub24tbnVsbC4KKyAgICAgKi8KKyAgICBib29sZWFuIGlzU3luY0FjdGl2ZShpbiBBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHksIGluIENvbXBvbmVudE5hbWUgY25hbWUpOworCisgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgc3RhdHVzIHRoYXQgbWF0Y2hlcyB0aGUgYXV0aG9yaXR5LiBJZiB0aGVyZSBhcmUgbXVsdGlwbGVzIGFjY291bnRzIGZvcgogICAgICAqIHRoZSBhdXRob3JpdHksIHRoZSBvbmUgd2l0aCB0aGUgbGF0ZXN0ICJsYXN0U3VjY2Vzc1RpbWUiIHN0YXR1cyBpcyByZXR1cm5lZC4KLSAgICAgKiBAcGFyYW0gYXV0aG9yaXR5IHRoZSBhdXRob3JpdHkgd2hvc2Ugcm93IHNob3VsZCBiZSBzZWxlY3RlZAotICAgICAqIEByZXR1cm4gdGhlIFN5bmNTdGF0dXNJbmZvIGZvciB0aGUgYXV0aG9yaXR5LCBvciBudWxsIGlmIG5vbmUgZXhpc3RzCisgICAgICogQHBhcmFtIGFjY291bnQgYWNjb3VudCBmb3IgYXV0aG9yaXR5LCBtdXN0IGJlIG51bGwgaWYgY25hbWUgaXMgbm9uLW51bGwuCisgICAgICogQHBhcmFtIHByb3ZpZGVyTmFtZSBuYW1lIG9mIHByb3ZpZGVyLCBtdXN0IGJlIG51bGwgaWYgY25hbWUgaXMgbm9uLW51bGwuCisgICAgICogQHBhcmFtIGNuYW1lIGNvbXBvbmVudCB0byBpZGVudGlmeSBzeW5jIHNlcnZpY2UsIG11c3QgYmUgbnVsbCBpZiBhY2NvdW50L3Byb3ZpZGVyTmFtZSBhcmUKKyAgICAgKiBub24tbnVsbC4KICAgICAgKi8KLSAgICBTeW5jU3RhdHVzSW5mbyBnZXRTeW5jU3RhdHVzKGluIEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSk7CisgICAgU3luY1N0YXR1c0luZm8gZ2V0U3luY1N0YXR1cyhpbiBBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHksIGluIENvbXBvbmVudE5hbWUgY25hbWUpOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHBlbmRpbmcgc3RhdHVzIGlzIHRydWUgb2YgYW55IG1hdGNoaW5nIGF1dGhvcml0aWVzLgorICAgICAqIEBwYXJhbSBhY2NvdW50IGFjY291bnQgZm9yIGF1dGhvcml0eSwgbXVzdCBiZSBudWxsIGlmIGNuYW1lIGlzIG5vbi1udWxsLgorICAgICAqIEBwYXJhbSBwcm92aWRlck5hbWUgbmFtZSBvZiBwcm92aWRlciwgbXVzdCBiZSBudWxsIGlmIGNuYW1lIGlzIG5vbi1udWxsLgorICAgICAqIEBwYXJhbSBjbmFtZSBjb21wb25lbnQgdG8gaWRlbnRpZnkgc3luYyBzZXJ2aWNlLCBtdXN0IGJlIG51bGwgaWYgYWNjb3VudC9wcm92aWRlck5hbWUgYXJlCisgICAgICogbm9uLW51bGwuCiAgICAgICovCi0gICAgYm9vbGVhbiBpc1N5bmNQZW5kaW5nKGluIEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSk7CisgICAgYm9vbGVhbiBpc1N5bmNQZW5kaW5nKGluIEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwgaW4gQ29tcG9uZW50TmFtZSBjbmFtZSk7CiAKICAgICB2b2lkIGFkZFN0YXR1c0NoYW5nZUxpc3RlbmVyKGludCBtYXNrLCBJU3luY1N0YXR1c09ic2VydmVyIGNhbGxiYWNrKTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JU3luY1NlcnZpY2VBZGFwdGVyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0lTeW5jU2VydmljZUFkYXB0ZXIuYWlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDE5MzA3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JU3luY1NlcnZpY2VBZGFwdGVyLmFpZGwKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5jb250ZW50OworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JU3luY0NvbnRleHQ7CisKKy8qKgorICogSW50ZXJmYWNlIHRvIGRlZmluZSBhbiBhbm9ueW1vdXMgc2VydmljZSB0aGF0IGlzIGV4dGVuZGVkIGJ5IGRldmVsb3BlcnMKKyAqIGluIG9yZGVyIHRvIHBlcmZvcm0gYW5vbnltb3VzIHN5bmNzIChzeW5jcyB3aXRob3V0IGFuIEFjY291bnQgb3IgQ29udGVudAorICogUHJvdmlkZXIgc3BlY2lmaWVkKS4gU2VlIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQWJzdHJhY3RUaHJlYWRlZFN5bmNBZGFwdGVyfS4KKyAqIHtAaGlkZX0KKyAqLworb25ld2F5IGludGVyZmFjZSBJU3luY1NlcnZpY2VBZGFwdGVyIHsKKworICAgIC8qKgorICAgICAqIEluaXRpYXRlIGEgc3luYy4gU3luY0FkYXB0ZXItc3BlY2lmaWMgcGFyYW1ldGVycyBtYXkgYmUgc3BlY2lmaWVkIGluCisgICAgICogZXh0cmFzLCB3aGljaCBpcyBndWFyYW50ZWVkIHRvIG5vdCBiZSBudWxsLgorICAgICAqCisgICAgICogQHBhcmFtIHN5bmNDb250ZXh0IHRoZSBJU3luY0NvbnRleHQgdXNlZCB0byBpbmRpY2F0ZSB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHN5bmMuIFdoZW4KKyAgICAgKiAgIHRoZSBzeW5jIGlzIGZpbmlzaGVkIChzdWNjZXNzZnVsbHkgb3Igbm90KSBJU3luY0NvbnRleHQub25GaW5pc2hlZCgpIG11c3QgYmUgY2FsbGVkLgorICAgICAqIEBwYXJhbSBleHRyYXMgU3luY0FkYXB0ZXItc3BlY2lmaWMgcGFyYW1ldGVycy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgc3RhcnRTeW5jKElTeW5jQ29udGV4dCBzeW5jQ29udGV4dCwgaW4gQnVuZGxlIGV4dHJhcyk7CisKKyAgICAvKioKKyAgICAgKiBDYW5jZWwgdGhlIGN1cnJlbnRseSBvbmdvaW5nIHN5bmMuCisgICAgICovCisgICAgdm9pZCBjYW5jZWxTeW5jKElTeW5jQ29udGV4dCBzeW5jQ29udGV4dCk7CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSW50ZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0ludGVudC5qYXZhCmluZGV4IGEwNDc2NjguLmJhN2RiNzYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSW50ZW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JbnRlbnQuamF2YQpAQCAtMjEsNiArMjEsNyBAQAogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7CiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlNka0NvbnN0YW50OwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudC5TZGtDb25zdGFudFR5cGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mbzsKQEAgLTQ1LDYgKzQ2LDggQEAKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKIGltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKQEAgLTMzMzUsNiArMzMzOCwxMiBAQAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEludGVudCBmbGFncyAoc2VlIG1GbGFncyB2YXJpYWJsZSkuCiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLAorICAgICAgICAgICAgdmFsdWUgPSB7RkxBR19HUkFOVF9SRUFEX1VSSV9QRVJNSVNTSU9OLCBGTEFHX0dSQU5UX1dSSVRFX1VSSV9QRVJNSVNTSU9OfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgR3JhbnRVcmlNb2RlIHt9CisKICAgICAvKioKICAgICAgKiBJZiBzZXQsIHRoZSByZWNpcGllbnQgb2YgdGhpcyBJbnRlbnQgd2lsbCBiZSBncmFudGVkIHBlcm1pc3Npb24gdG8KICAgICAgKiBwZXJmb3JtIHJlYWQgb3BlcmF0aW9ucyBvbiB0aGUgVVJJIGluIHRoZSBJbnRlbnQncyBkYXRhIGFuZCBhbnkgVVJJcwpAQCAtNjM3NCw2ICs2MzgzLDIxIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLAorICAgICAgICAgICAgdmFsdWUgPSB7CisgICAgICAgICAgICAgICAgICAgIEZJTExfSU5fQUNUSU9OLAorICAgICAgICAgICAgICAgICAgICBGSUxMX0lOX0RBVEEsCisgICAgICAgICAgICAgICAgICAgIEZJTExfSU5fQ0FURUdPUklFUywKKyAgICAgICAgICAgICAgICAgICAgRklMTF9JTl9DT01QT05FTlQsCisgICAgICAgICAgICAgICAgICAgIEZJTExfSU5fUEFDS0FHRSwKKyAgICAgICAgICAgICAgICAgICAgRklMTF9JTl9TT1VSQ0VfQk9VTkRTLAorICAgICAgICAgICAgICAgICAgICBGSUxMX0lOX1NFTEVDVE9SLAorICAgICAgICAgICAgICAgICAgICBGSUxMX0lOX0NMSVBfREFUQQorICAgICAgICAgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgRmlsbEluRmxhZ3Mge30KKwogICAgIC8qKgogICAgICAqIFVzZSB3aXRoIHtAbGluayAjZmlsbElufSB0byBhbGxvdyB0aGUgY3VycmVudCBhY3Rpb24gdmFsdWUgdG8gYmUKICAgICAgKiBvdmVyd3JpdHRlbiwgZXZlbiBpZiBpdCBpcyBhbHJlYWR5IHNldC4KQEAgLTY0NjcsMTAgKzY0OTEsMTIgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gUmV0dXJucyBhIGJpdCBtYXNrIG9mIHtAbGluayAjRklMTF9JTl9BQ1RJT059LAogICAgICAqIHtAbGluayAjRklMTF9JTl9EQVRBfSwge0BsaW5rICNGSUxMX0lOX0NBVEVHT1JJRVN9LCB7QGxpbmsgI0ZJTExfSU5fUEFDS0FHRX0sCi0gICAgICoge0BsaW5rICNGSUxMX0lOX0NPTVBPTkVOVH0sIHtAbGluayAjRklMTF9JTl9TT1VSQ0VfQk9VTkRTfSwgYW5kCi0gICAgICoge0BsaW5rICNGSUxMX0lOX1NFTEVDVE9SfSBpbmRpY2F0aW5nIHdoaWNoIGZpZWxkcyB3ZXJlIGNoYW5nZWQuCisgICAgICoge0BsaW5rICNGSUxMX0lOX0NPTVBPTkVOVH0sIHtAbGluayAjRklMTF9JTl9TT1VSQ0VfQk9VTkRTfSwKKyAgICAgKiB7QGxpbmsgI0ZJTExfSU5fU0VMRUNUT1J9IGFuZCB7QGxpbmsgI0ZJTExfSU5fQ0xJUF9EQVRBIGluZGljYXRpbmcgd2hpY2ggZmllbGRzIHdlcmUKKyAgICAgKiBjaGFuZ2VkLgogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZmlsbEluKEludGVudCBvdGhlciwgaW50IGZsYWdzKSB7CisgICAgQEZpbGxJbkZsYWdzCisgICAgcHVibGljIGludCBmaWxsSW4oSW50ZW50IG90aGVyLCBARmlsbEluRmxhZ3MgaW50IGZsYWdzKSB7CiAgICAgICAgIGludCBjaGFuZ2VzID0gMDsKICAgICAgICAgaWYgKG90aGVyLm1BY3Rpb24gIT0gbnVsbAogICAgICAgICAgICAgICAgICYmIChtQWN0aW9uID09IG51bGwgfHwgKGZsYWdzJkZJTExfSU5fQUNUSU9OKSAhPSAwKSkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Mb2FkZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvTG9hZGVyLmphdmEKaW5kZXggOTExZTQ5Yy4uZjM4MjhiMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Mb2FkZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0xvYWRlci5qYXZhCkBAIC00MTMsNyArNDEzLDcgQEAKICAgICAgKiB7QGxpbmsgI29uUmVzZXQoKX0gaGFwcGVucy4gIFlvdSBjYW4gcmV0cmlldmUgdGhlIGN1cnJlbnQgYWJhbmRvbmVkCiAgICAgICogc3RhdGUgd2l0aCB7QGxpbmsgI2lzQWJhbmRvbmVkfS4KICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkFiYW5kb24oKSB7ICAgICAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkFiYW5kb24oKSB7CiAgICAgfQogICAgIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9QZXJpb2RpY1N5bmMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvUGVyaW9kaWNTeW5jLmphdmEKaW5kZXggYjU4NmVlYy4uODM2YzZmOCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9QZXJpb2RpY1N5bmMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L1BlcmlvZGljU3luYy5qYXZhCkBAIC0yOSwxMyArMjksMTcgQEAKICAgICBwdWJsaWMgZmluYWwgQWNjb3VudCBhY2NvdW50OwogICAgIC8qKiBUaGUgYXV0aG9yaXR5IG9mIHRoZSBzeW5jLiBDYW4gYmUgbnVsbC4gKi8KICAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGF1dGhvcml0eTsKKyAgICAvKiogVGhlIHNlcnZpY2UgZm9yIHN5bmNpbmcsIGlmIHRoaXMgaXMgYW4gYW5vbnltb3VzIHN5bmMuIENhbiBiZSBudWxsLiovCisgICAgcHVibGljIGZpbmFsIENvbXBvbmVudE5hbWUgc2VydmljZTsKICAgICAvKiogQW55IGV4dHJhcyB0aGF0IHBhcmFtZXRlcnMgdGhhdCBhcmUgdG8gYmUgcGFzc2VkIHRvIHRoZSBzeW5jIGFkYXB0ZXIuICovCiAgICAgcHVibGljIGZpbmFsIEJ1bmRsZSBleHRyYXM7CiAgICAgLyoqIEhvdyBmcmVxdWVudGx5IHRoZSBzeW5jIHNob3VsZCBiZSBzY2hlZHVsZWQsIGluIHNlY29uZHMuIEtlcHQgYXJvdW5kIGZvciBBUEkgcHVycG9zZXMuICovCiAgICAgcHVibGljIGZpbmFsIGxvbmcgcGVyaW9kOworICAgIC8qKiBXaGV0aGVyIHRoaXMgcGVyaW9kaWMgc3luYyBydW5zIG9uIGEge0BsaW5rIFN5bmNTZXJ2aWNlfS4gKi8KKyAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1NlcnZpY2U7CiAgICAgLyoqCi0gICAgICoge0BoaWRlfQogICAgICAqIEhvdyBtdWNoIGZsZXhpYmlsaXR5IGNhbiBiZSB0YWtlbiBpbiBzY2hlZHVsaW5nIHRoZSBzeW5jLCBpbiBzZWNvbmRzLgorICAgICAqIHtAaGlkZX0KICAgICAgKi8KICAgICBwdWJsaWMgZmluYWwgbG9uZyBmbGV4VGltZTsKIApAQCAtNDgsNDQgKzUyLDc0IEBACiAgICAgcHVibGljIFBlcmlvZGljU3luYyhBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHksIEJ1bmRsZSBleHRyYXMsIGxvbmcgcGVyaW9kSW5TZWNvbmRzKSB7CiAgICAgICAgIHRoaXMuYWNjb3VudCA9IGFjY291bnQ7CiAgICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gYXV0aG9yaXR5OworICAgICAgICB0aGlzLnNlcnZpY2UgPSBudWxsOworICAgICAgICB0aGlzLmlzU2VydmljZSA9IGZhbHNlOwogICAgICAgICBpZiAoZXh0cmFzID09IG51bGwpIHsKICAgICAgICAgICAgIHRoaXMuZXh0cmFzID0gbmV3IEJ1bmRsZSgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGhpcy5leHRyYXMgPSBuZXcgQnVuZGxlKGV4dHJhcyk7CiAgICAgICAgIH0KICAgICAgICAgdGhpcy5wZXJpb2QgPSBwZXJpb2RJblNlY29uZHM7Ci0gICAgICAgIC8vIEluaXRpYWxpc2UgdG8gYSBzYW5lIHZhbHVlLgorICAgICAgICAvLyBPbGQgQVBJIHVzZXMgZGVmYXVsdCBmbGV4IHRpbWUuIE5vLW9uZSBzaG91bGQgYmUgdXNpbmcgdGhpcyBjdG9yIGFueXdheS4KICAgICAgICAgdGhpcy5mbGV4VGltZSA9IDBMOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIHtAaGlkZX0KICAgICAgKiBDcmVhdGUgYSBjb3B5IG9mIGEgcGVyaW9kaWMgc3luYy4KKyAgICAgKiB7QGhpZGV9CiAgICAgICovCiAgICAgcHVibGljIFBlcmlvZGljU3luYyhQZXJpb2RpY1N5bmMgb3RoZXIpIHsKICAgICAgICAgdGhpcy5hY2NvdW50ID0gb3RoZXIuYWNjb3VudDsKICAgICAgICAgdGhpcy5hdXRob3JpdHkgPSBvdGhlci5hdXRob3JpdHk7CisgICAgICAgIHRoaXMuc2VydmljZSA9IG90aGVyLnNlcnZpY2U7CisgICAgICAgIHRoaXMuaXNTZXJ2aWNlID0gb3RoZXIuaXNTZXJ2aWNlOwogICAgICAgICB0aGlzLmV4dHJhcyA9IG5ldyBCdW5kbGUob3RoZXIuZXh0cmFzKTsKICAgICAgICAgdGhpcy5wZXJpb2QgPSBvdGhlci5wZXJpb2Q7CiAgICAgICAgIHRoaXMuZmxleFRpbWUgPSBvdGhlci5mbGV4VGltZTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiB7QGhpZGV9CiAgICAgICogQSBQZXJpb2RpY1N5bmMgZm9yIGEgc3luYyB3aXRoIGEgc3BlY2lmaWVkIHByb3ZpZGVyLgorICAgICAqIHtAaGlkZX0KICAgICAgKi8KICAgICBwdWJsaWMgUGVyaW9kaWNTeW5jKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwgQnVuZGxlIGV4dHJhcywKICAgICAgICAgICAgIGxvbmcgcGVyaW9kLCBsb25nIGZsZXhUaW1lKSB7CiAgICAgICAgIHRoaXMuYWNjb3VudCA9IGFjY291bnQ7CiAgICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gYXV0aG9yaXR5OworICAgICAgICB0aGlzLnNlcnZpY2UgPSBudWxsOworICAgICAgICB0aGlzLmlzU2VydmljZSA9IGZhbHNlOworICAgICAgICB0aGlzLmV4dHJhcyA9IG5ldyBCdW5kbGUoZXh0cmFzKTsKKyAgICAgICAgdGhpcy5wZXJpb2QgPSBwZXJpb2Q7CisgICAgICAgIHRoaXMuZmxleFRpbWUgPSBmbGV4VGltZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBIFBlcmlvZGljU3luYyBmb3IgYSBzeW5jIHdpdGggYSBzcGVjaWZpZWQgU3luY1NlcnZpY2UuCisgICAgICoge0BoaWRlfQorICAgICAqLworICAgIHB1YmxpYyBQZXJpb2RpY1N5bmMoQ29tcG9uZW50TmFtZSBzZXJ2aWNlLCBCdW5kbGUgZXh0cmFzLAorICAgICAgICAgICAgbG9uZyBwZXJpb2QsCisgICAgICAgICAgICBsb25nIGZsZXhUaW1lKSB7CisgICAgICAgIHRoaXMuYWNjb3VudCA9IG51bGw7CisgICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gbnVsbDsKKyAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTsKKyAgICAgICAgdGhpcy5pc1NlcnZpY2UgPSB0cnVlOwogICAgICAgICB0aGlzLmV4dHJhcyA9IG5ldyBCdW5kbGUoZXh0cmFzKTsKICAgICAgICAgdGhpcy5wZXJpb2QgPSBwZXJpb2Q7CiAgICAgICAgIHRoaXMuZmxleFRpbWUgPSBmbGV4VGltZTsKICAgICB9CiAKICAgICBwcml2YXRlIFBlcmlvZGljU3luYyhQYXJjZWwgaW4pIHsKLSAgICAgICAgdGhpcy5hY2NvdW50ID0gaW4ucmVhZFBhcmNlbGFibGUobnVsbCk7Ci0gICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gaW4ucmVhZFN0cmluZygpOworICAgICAgICB0aGlzLmlzU2VydmljZSA9IChpbi5yZWFkSW50KCkgIT0gMCk7CisgICAgICAgIGlmICh0aGlzLmlzU2VydmljZSkgeworICAgICAgICAgICAgdGhpcy5zZXJ2aWNlID0gaW4ucmVhZFBhcmNlbGFibGUobnVsbCk7CisgICAgICAgICAgICB0aGlzLmFjY291bnQgPSBudWxsOworICAgICAgICAgICAgdGhpcy5hdXRob3JpdHkgPSBudWxsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5hY2NvdW50ID0gaW4ucmVhZFBhcmNlbGFibGUobnVsbCk7CisgICAgICAgICAgICB0aGlzLmF1dGhvcml0eSA9IGluLnJlYWRTdHJpbmcoKTsKKyAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IG51bGw7CisgICAgICAgIH0KICAgICAgICAgdGhpcy5leHRyYXMgPSBpbi5yZWFkQnVuZGxlKCk7CiAgICAgICAgIHRoaXMucGVyaW9kID0gaW4ucmVhZExvbmcoKTsKICAgICAgICAgdGhpcy5mbGV4VGltZSA9IGluLnJlYWRMb25nKCk7CkBAIC05OCw4ICsxMzIsMTMgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIGRlc3QsIGludCBmbGFncykgewotICAgICAgICBkZXN0LndyaXRlUGFyY2VsYWJsZShhY2NvdW50LCBmbGFncyk7Ci0gICAgICAgIGRlc3Qud3JpdGVTdHJpbmcoYXV0aG9yaXR5KTsKKyAgICAgICAgZGVzdC53cml0ZUludChpc1NlcnZpY2UgPyAxIDogMCk7CisgICAgICAgIGlmIChhY2NvdW50ID09IG51bGwgJiYgYXV0aG9yaXR5ID09IG51bGwpIHsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVQYXJjZWxhYmxlKHNlcnZpY2UsIGZsYWdzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVQYXJjZWxhYmxlKGFjY291bnQsIGZsYWdzKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVTdHJpbmcoYXV0aG9yaXR5KTsKKyAgICAgICAgfQogICAgICAgICBkZXN0LndyaXRlQnVuZGxlKGV4dHJhcyk7CiAgICAgICAgIGRlc3Qud3JpdGVMb25nKHBlcmlvZCk7CiAgICAgICAgIGRlc3Qud3JpdGVMb25nKGZsZXhUaW1lKTsKQEAgLTEyNiwxNCArMTY1LDI0IEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZmluYWwgUGVyaW9kaWNTeW5jIG90aGVyID0gKFBlcmlvZGljU3luYykgbzsKLSAgICAgICAgcmV0dXJuIGFjY291bnQuZXF1YWxzKG90aGVyLmFjY291bnQpCi0gICAgICAgICAgICAmJiBhdXRob3JpdHkuZXF1YWxzKG90aGVyLmF1dGhvcml0eSkKKyAgICAgICAgaWYgKHRoaXMuaXNTZXJ2aWNlICE9IG90aGVyLmlzU2VydmljZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJvb2xlYW4gZXF1YWwgPSBmYWxzZTsKKyAgICAgICAgaWYgKHRoaXMuaXNTZXJ2aWNlKSB7CisgICAgICAgICAgICBlcXVhbCA9IHNlcnZpY2UuZXF1YWxzKG90aGVyLnNlcnZpY2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXF1YWwgPSBhY2NvdW50LmVxdWFscyhvdGhlci5hY2NvdW50KQorICAgICAgICAgICAgICAgICAgICAmJiBhdXRob3JpdHkuZXF1YWxzKG90aGVyLmF1dGhvcml0eSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGVxdWFsCiAgICAgICAgICAgICAmJiBwZXJpb2QgPT0gb3RoZXIucGVyaW9kCiAgICAgICAgICAgICAmJiBzeW5jRXh0cmFzRXF1YWxzKGV4dHJhcywgb3RoZXIuZXh0cmFzKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBQZXJpb2RpYyBzeW5jIGV4dHJhIGNvbXBhcmlzb24gZnVuY3Rpb24uCisgICAgICogUGVyaW9kaWMgc3luYyBleHRyYSBjb21wYXJpc29uIGZ1bmN0aW9uLiBEdXBsaWNhdGVkIGZyb20KKyAgICAgKiB7QGxpbmsgY29tLmFuZHJvaWQuc2VydmVyLmNvbnRlbnQuU3luY01hbmFnZXIjc3luY0V4dHJhc0VxdWFscyhCdW5kbGUgYjEsIEJ1bmRsZSBiMil9CiAgICAgICoge0BoaWRlfQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzeW5jRXh0cmFzRXF1YWxzKEJ1bmRsZSBiMSwgQnVuZGxlIGIyKSB7CkBAIC0xNTgsNiArMjA3LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gImFjY291bnQ6ICIgKyBhY2NvdW50ICsKICAgICAgICAgICAgICAgICIsIGF1dGhvcml0eTogIiArIGF1dGhvcml0eSArCisgICAgICAgICAgICAgICAiLCBzZXJ2aWNlOiAiICsgc2VydmljZSArCiAgICAgICAgICAgICAgICAiLiBwZXJpb2Q6ICIgKyBwZXJpb2QgKyAicyAiICsKICAgICAgICAgICAgICAgICIsIGZsZXg6ICIgKyBmbGV4VGltZTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L1Jlc3RyaWN0aW9uRW50cnkuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvUmVzdHJpY3Rpb25FbnRyeS5qYXZhCmluZGV4IDI4M2EwOTcuLjNmZjUzYmYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvUmVzdHJpY3Rpb25FbnRyeS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvUmVzdHJpY3Rpb25FbnRyeS5qYXZhCkBAIC0xOSw4ICsxOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogCi1pbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uSW5oZXJpdGVkOwotCiAvKioKICAqIEFwcGxpY2F0aW9ucyBjYW4gZXhwb3NlIHJlc3RyaWN0aW9ucyBmb3IgYSByZXN0cmljdGVkIHVzZXIgb24gYQogICogbXVsdGl1c2VyIGRldmljZS4gVGhlIGFkbWluaXN0cmF0b3IgY2FuIGNvbmZpZ3VyZSB0aGVzZSByZXN0cmljdGlvbnMgdGhhdCB3aWxsIHRoZW4gYmUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvU3luY0luZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvU3luY0luZm8uamF2YQppbmRleCBjZmZjNjUzLi4xNDZkZDk5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L1N5bmNJbmZvLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9TeW5jSW5mby5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50OwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvcjsKIAogLyoqCiAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgc3luYyBvcGVyYXRpb24gdGhhdCBpcyBjdXJyZW50bHkgdW5kZXJ3YXkuCkBAIC0yOSwxNiArMjgsMjQgQEAKICAgICBwdWJsaWMgZmluYWwgaW50IGF1dGhvcml0eUlkOwogCiAgICAgLyoqCi0gICAgICogVGhlIHtAbGluayBBY2NvdW50fSB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBzeW5jZWQuCisgICAgICogVGhlIHtAbGluayBBY2NvdW50fSB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBzeW5jZWQuIFdpbGwgYmUgbnVsbCBpZiB0aGlzIHN5bmMgaXMgcnVubmluZyB2aWEKKyAgICAgKiBhIHtAbGluayBTeW5jU2VydmljZX0uCiAgICAgICovCiAgICAgcHVibGljIGZpbmFsIEFjY291bnQgYWNjb3VudDsKIAogICAgIC8qKgotICAgICAqIFRoZSBhdXRob3JpdHkgb2YgdGhlIHByb3ZpZGVyIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHN5bmNlZC4KKyAgICAgKiBUaGUgYXV0aG9yaXR5IG9mIHRoZSBwcm92aWRlciB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBzeW5jZWQuIFdpbGwgYmUgbnVsbCBpZiB0aGlzIHN5bmMKKyAgICAgKiBpcyBydW5uaW5nIHZpYSBhIHtAbGluayBTeW5jU2VydmljZX0uCiAgICAgICovCiAgICAgcHVibGljIGZpbmFsIFN0cmluZyBhdXRob3JpdHk7CiAKICAgICAvKioKKyAgICAgKiBUaGUge0BsaW5rIFN5bmNTZXJ2aWNlfSB0aGF0IGlzIHRhcmdldGVkIGJ5IHRoaXMgb3BlcmF0aW9uLiBOdWxsIGlmIHRoaXMgc3luYyBpcyBydW5uaW5nIHZpYQorICAgICAqIGEge0BsaW5rIEFic3RyYWN0VGhyZWFkZWRTeW5jQWRhcHRlcn0uIAorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBDb21wb25lbnROYW1lIHNlcnZpY2U7CisKKyAgICAvKioKICAgICAgKiBUaGUgc3RhcnQgdGltZSBvZiB0aGUgY3VycmVudCBzeW5jIG9wZXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgc2luY2UgYm9vdC4KICAgICAgKiBUaGlzIGlzIHJlcHJlc2VudGVkIGluIGVsYXBzZWQgcmVhbCB0aW1lLgogICAgICAqIFNlZSB7QGxpbmsgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jayNlbGFwc2VkUmVhbHRpbWUoKX0uCkBAIC00NiwxMiArNTMsMTMgQEAKICAgICBwdWJsaWMgZmluYWwgbG9uZyBzdGFydFRpbWU7CiAKICAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgU3luY0luZm8oaW50IGF1dGhvcml0eUlkLCBBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHksCisgICAgcHVibGljIFN5bmNJbmZvKGludCBhdXRob3JpdHlJZCwgQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LCBDb21wb25lbnROYW1lIHNlcnZpY2UsCiAgICAgICAgICAgICBsb25nIHN0YXJ0VGltZSkgewogICAgICAgICB0aGlzLmF1dGhvcml0eUlkID0gYXV0aG9yaXR5SWQ7CiAgICAgICAgIHRoaXMuYWNjb3VudCA9IGFjY291bnQ7CiAgICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gYXV0aG9yaXR5OwogICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTsKKyAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTsKICAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KQEAgLTYwLDYgKzY4LDcgQEAKICAgICAgICAgdGhpcy5hY2NvdW50ID0gbmV3IEFjY291bnQob3RoZXIuYWNjb3VudC5uYW1lLCBvdGhlci5hY2NvdW50LnR5cGUpOwogICAgICAgICB0aGlzLmF1dGhvcml0eSA9IG90aGVyLmF1dGhvcml0eTsKICAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBvdGhlci5zdGFydFRpbWU7CisgICAgICAgIHRoaXMuc2VydmljZSA9IG90aGVyLnNlcnZpY2U7CiAgICAgfQogCiAgICAgLyoqIEBoaWRlICovCkBAIC03MCwxNyArNzksMjAgQEAKICAgICAvKiogQGhpZGUgKi8KICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBwYXJjZWwsIGludCBmbGFncykgewogICAgICAgICBwYXJjZWwud3JpdGVJbnQoYXV0aG9yaXR5SWQpOwotICAgICAgICBhY2NvdW50LndyaXRlVG9QYXJjZWwocGFyY2VsLCAwKTsKKyAgICAgICAgcGFyY2VsLndyaXRlUGFyY2VsYWJsZShhY2NvdW50LCBmbGFncyk7CiAgICAgICAgIHBhcmNlbC53cml0ZVN0cmluZyhhdXRob3JpdHkpOwogICAgICAgICBwYXJjZWwud3JpdGVMb25nKHN0YXJ0VGltZSk7CisgICAgICAgIHBhcmNlbC53cml0ZVBhcmNlbGFibGUoc2VydmljZSwgZmxhZ3MpOworICAgICAgICAKICAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KICAgICBTeW5jSW5mbyhQYXJjZWwgcGFyY2VsKSB7CiAgICAgICAgIGF1dGhvcml0eUlkID0gcGFyY2VsLnJlYWRJbnQoKTsKLSAgICAgICAgYWNjb3VudCA9IG5ldyBBY2NvdW50KHBhcmNlbCk7CisgICAgICAgIGFjY291bnQgPSBwYXJjZWwucmVhZFBhcmNlbGFibGUoQWNjb3VudC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKICAgICAgICAgYXV0aG9yaXR5ID0gcGFyY2VsLnJlYWRTdHJpbmcoKTsKICAgICAgICAgc3RhcnRUaW1lID0gcGFyY2VsLnJlYWRMb25nKCk7CisgICAgICAgIHNlcnZpY2UgPSBwYXJjZWwucmVhZFBhcmNlbGFibGUoQ29tcG9uZW50TmFtZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKICAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvU3luY1JlcXVlc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvU3luY1JlcXVlc3QuamF2YQppbmRleCA2Y2EyODNkLi5hOWE2MmE3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L1N5bmNSZXF1ZXN0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9TeW5jUmVxdWVzdC5qYXZhCkBAIC0yMywxNSArMjMsMTUgQEAKIAogcHVibGljIGNsYXNzIFN5bmNSZXF1ZXN0IGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJTeW5jUmVxdWVzdCI7Ci0gICAgLyoqIEFjY291bnQgdG8gcGFzcyB0byB0aGUgc3luYyBhZGFwdGVyLiBNYXkgYmUgbnVsbC4gKi8KKyAgICAvKiogQWNjb3VudCB0byBwYXNzIHRvIHRoZSBzeW5jIGFkYXB0ZXIuIENhbiBiZSBudWxsLiAqLwogICAgIHByaXZhdGUgZmluYWwgQWNjb3VudCBtQWNjb3VudFRvU3luYzsKICAgICAvKiogQXV0aG9yaXR5IHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgQ29udGVudFByb3ZpZGVyLiAqLwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1BdXRob3JpdHk7Ci0gICAgLyoqIFN5bmMgc2VydmljZSBpZGVudGlmaWVyLiBNYXkgYmUgbnVsbC4qLworICAgIC8qKiB7QGxpbmsgU3luY1NlcnZpY2V9IGlkZW50aWZpZXIuICovCiAgICAgcHJpdmF0ZSBmaW5hbCBDb21wb25lbnROYW1lIG1Db21wb25lbnRJbmZvOwogICAgIC8qKiBCdW5kbGUgY29udGFpbmluZyB1c2VyIGluZm8gYXMgd2VsbCBhcyBzeW5jIHNldHRpbmdzLiAqLwogICAgIHByaXZhdGUgZmluYWwgQnVuZGxlIG1FeHRyYXM7Ci0gICAgLyoqIERpc2FsbG93IHRoaXMgc3luYyByZXF1ZXN0IG9uIG1ldGVyZWQgbmV0d29ya3MuICovCisgICAgLyoqIERvbid0IGFsbG93IHRoaXMgc3luYyByZXF1ZXN0IG9uIG1ldGVyZWQgbmV0d29ya3MuICovCiAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1EaXNhbGxvd01ldGVyZWQ7CiAgICAgLyoqCiAgICAgICogQW50aWNpcGF0ZWQgdXBsb2FkIHNpemUgaW4gYnl0ZXMuCkBAIC02OSwxOCArNjksMTQgQEAKICAgICAgICAgcmV0dXJuIG1Jc1BlcmlvZGljOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIHtAaGlkZX0KLSAgICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBpcyBhbiBleHBlZGl0ZWQgc3luYy4KLSAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0V4cGVkaXRlZCgpIHsKICAgICAgICAgcmV0dXJuIG1Jc0V4cGVkaXRlZDsKICAgICB9CiAKICAgICAvKioKICAgICAgKiB7QGhpZGV9Ci0gICAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgc3luYyB1c2VzIGFuIGFjY291bnQvYXV0aG9yaXR5IHBhaXIsIG9yIGZhbHNlIGlmIHRoaXMgc3luYyBpcyBib3VuZCB0bwotICAgICAqIGEgU3luYyBTZXJ2aWNlLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHN5bmMgdXNlcyBhbiBhY2NvdW50L2F1dGhvcml0eSBwYWlyLCBvciBmYWxzZSBpZgorICAgICAqICAgICAgICAgdGhpcyBpcyBhbiBhbm9ueW1vdXMgc3luYyBib3VuZCB0byBhbiBAbGluayBBbm9ueW1vdXNTeW5jU2VydmljZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBoYXNBdXRob3JpdHkoKSB7CiAgICAgICAgIHJldHVybiBtSXNBdXRob3JpdHk7CkBAIC04OCwzNCArODQsNTEgQEAKIAogICAgIC8qKgogICAgICAqIHtAaGlkZX0KKyAgICAgKgogICAgICAqIEByZXR1cm4gYWNjb3VudCBvYmplY3QgZm9yIHRoaXMgc3luYy4KLSAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgYSByZXF1ZXN0IHRoYXQgZG9lcyBub3QKLSAgICAgKiBzcGVjaWZ5IGFuIGFjY291bnQvcHJvdmlkZXIgYXV0aG9yaXR5LgorICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhIHJlcXVlc3QgdGhhdCB0YXJnZXRzIGEKKyAgICAgKiBzeW5jIHNlcnZpY2UuCiAgICAgICovCiAgICAgcHVibGljIEFjY291bnQgZ2V0QWNjb3VudCgpIHsKICAgICAgICAgaWYgKCFoYXNBdXRob3JpdHkoKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2Fubm90IGdldEFjY291bnQoKSBmb3IgYSBzeW5jIHRoYXQgZG9lcyBub3QiCi0gICAgICAgICAgICAgICAgICAgICsgInNwZWNpZnkgYW4gYXV0aG9yaXR5LiIpOworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2Fubm90IGdldEFjY291bnQoKSBmb3IgYSBzeW5jIHRoYXQgdGFyZ2V0cyBhIHN5bmMiCisgICAgICAgICAgICAgICAgICAgICsgInNlcnZpY2UuIik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1BY2NvdW50VG9TeW5jOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIHtAaGlkZX0KKyAgICAgKgogICAgICAqIEByZXR1cm4gcHJvdmlkZXIgZm9yIHRoaXMgc3luYy4KLSAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgYSByZXF1ZXN0IHRoYXQgZG9lcyBub3QKLSAgICAgKiBzcGVjaWZ5IGFuIGFjY291bnQvcHJvdmlkZXIgYXV0aG9yaXR5LgorICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhIHJlcXVlc3QgdGhhdCB0YXJnZXRzIGEKKyAgICAgKiBzeW5jIHNlcnZpY2UuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQcm92aWRlcigpIHsKICAgICAgICAgaWYgKCFoYXNBdXRob3JpdHkoKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2Fubm90IGdldFByb3ZpZGVyKCkgZm9yIGEgc3luYyB0aGF0IGRvZXMgbm90IgotICAgICAgICAgICAgICAgICAgICArICJzcGVjaWZ5IGEgcHJvdmlkZXIuIik7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3QgZ2V0UHJvdmlkZXIoKSBmb3IgYSBzeW5jIHRoYXQgdGFyZ2V0cyBhIgorICAgICAgICAgICAgICAgICAgICArICJzeW5jIHNlcnZpY2UuIik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1BdXRob3JpdHk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICoge0BoaWRlfQorICAgICAqIFRocm93cyBhIHJ1bnRpbWUgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhCisgICAgICogU3luY1JlcXVlc3QgdGhhdCBpcyBib3VuZCB0byBhbiBhY2NvdW50L3Byb3ZpZGVyLgorICAgICAqCisgICAgICogQHJldHVybiBDb21wb25lbnROYW1lIGZvciB0aGUgc2VydmljZSB0aGF0IHRoaXMgc3luYyB3aWxsIGJpbmQgdG8uCisgICAgICovCisgICAgcHVibGljIENvbXBvbmVudE5hbWUgZ2V0U2VydmljZSgpIHsKKyAgICAgICAgaWYgKGhhc0F1dGhvcml0eSgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IGdldEFub255bW91c1NlcnZpY2UoKSBmb3IgYSBzeW5jIHRoYXQgaGFzIHNwZWNpZmllZCBhIHByb3ZpZGVyLiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtQ29tcG9uZW50SW5mbzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGhpZGV9CiAgICAgICogUmV0cmlldmUgYnVuZGxlIGZvciB0aGlzIFN5bmNSZXF1ZXN0LiBXaWxsIG5vdCBiZSBudWxsLgogICAgICAqLwogICAgIHB1YmxpYyBCdW5kbGUgZ2V0QnVuZGxlKCkgewpAQCAtMTI5LDcgKzE0Miw2IEBACiAgICAgcHVibGljIGxvbmcgZ2V0U3luY0ZsZXhUaW1lKCkgewogICAgICAgICByZXR1cm4gbVN5bmNGbGV4VGltZVNlY3M7CiAgICAgfQotCiAgICAgLyoqCiAgICAgICoge0BoaWRlfQogICAgICAqIEByZXR1cm4gdGhlIGxhc3QgcG9pbnQgaW4gdGltZSBhdCB3aGljaCB0aGlzIHN5bmMgbXVzdCBzY2hlZHVsZWQuCkBAIC0yMTYsNyArMjI4LDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBCdWlsZGVyIGNsYXNzIGZvciBhIHtAbGluayBTeW5jUmVxdWVzdH0uIEFzIHlvdSBidWlsZCB5b3VyIFN5bmNSZXF1ZXN0IHRoaXMgY2xhc3Mgd2lsbCBhbHNvCisgICAgICogQnVpbGRlciBjbGFzcyBmb3IgYSBAbGluayBTeW5jUmVxdWVzdC4gQXMgeW91IGJ1aWxkIHlvdXIgU3luY1JlcXVlc3QgdGhpcyBjbGFzcyB3aWxsIGFsc28KICAgICAgKiBwZXJmb3JtIHZhbGlkYXRpb24uCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIHsKQEAgLTIzMiw5ICsyNDQsMTIgQEAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNZTkNfVEFSR0VUX1NFUlZJQ0UgPSAxOwogICAgICAgICAvKiogU3BlY2lmeSB0aGF0IHRoaXMgaXMgYSBzeW5jIHdpdGggYSBwcm92aWRlci4gKi8KICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNZTkNfVEFSR0VUX0FEQVBURVIgPSAyOwotICAgICAgICAvKiogRWFybGllc3QgcG9pbnQgb2YgZGlzcGxhY2VtZW50IGludG8gdGhlIGZ1dHVyZSBhdCB3aGljaCB0aGlzIHN5bmMgY2FuIG9jY3VyLiAqLworICAgICAgICAvKioKKyAgICAgICAgICogRWFybGllc3QgcG9pbnQgb2YgZGlzcGxhY2VtZW50IGludG8gdGhlIGZ1dHVyZSBhdCB3aGljaCB0aGlzIHN5bmMgY2FuCisgICAgICAgICAqIG9jY3VyLgorICAgICAgICAgKi8KICAgICAgICAgcHJpdmF0ZSBsb25nIG1TeW5jRmxleFRpbWVTZWNzOwotICAgICAgICAvKiogTGF0ZXN0IHBvaW50IG9mIGRpc3BsYWNlbWVudCBpbnRvIHRoZSBmdXR1cmUgYXQgd2hpY2ggdGhpcyBzeW5jIG11c3Qgb2NjdXIuICovCisgICAgICAgIC8qKiBEaXNwbGFjZW1lbnQgaW50byB0aGUgZnV0dXJlIGF0IHdoaWNoIHRoaXMgc3luYyBtdXN0IG9jY3VyLiAqLwogICAgICAgICBwcml2YXRlIGxvbmcgbVN5bmNSdW5UaW1lU2VjczsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFN5bmMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiAtIGN1c3RvbSB1c2VyIGRhdGEgZXhwbGljaXRseSBwcm92aWRlZCBieSB0aGUgZGV2ZWxvcGVyLgpAQCAtMjgzLDggKzI5OCw5IEBACiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtRXhwZWRpdGVkOwogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgc3luYyBjb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgc3luYyBsb2dpYyBpZiB0aGlzIGlzIGEgcHJvdmlkZXItbGVzcyBzeW5jLAotICAgICAgICAgKiBvdGhlcndpc2UgbnVsbC4KKyAgICAgICAgICogVGhlIHtAbGluayBTeW5jU2VydmljZX0gY29tcG9uZW50IHRoYXQKKyAgICAgICAgICogY29udGFpbnMgdGhlIHN5bmMgbG9naWMgaWYgdGhpcyBpcyBhIHByb3ZpZGVyLWxlc3Mgc3luYywgb3RoZXJ3aXNlCisgICAgICAgICAqIG51bGwuCiAgICAgICAgICAqLwogICAgICAgICBwcml2YXRlIENvbXBvbmVudE5hbWUgbUNvbXBvbmVudE5hbWU7CiAgICAgICAgIC8qKgpAQCAtMzIwLDExICszMzYsMTUgQEAKIAogICAgICAgICAvKioKICAgICAgICAgICogQnVpbGQgYSBwZXJpb2RpYyBzeW5jLiBFaXRoZXIgdGhpcyBvciBzeW5jT25jZSgpIDxiPm11c3Q8L2I+IGJlIGNhbGxlZCBmb3IgdGhpcyBidWlsZGVyLgotICAgICAgICAgKiBTeW5jcyBhcmUgaWRlbnRpZmllZCBieSB0YXJnZXQge0BsaW5rIGFuZHJvaWQucHJvdmlkZXJ9L3tAbGluayBhbmRyb2lkLmFjY291bnRzLkFjY291bnR9Ci0gICAgICAgICAqIGFuZCBieSB0aGUgY29udGVudHMgb2YgdGhlIGV4dHJhcyBidW5kbGUuCi0gICAgICAgICAqIFlvdSBjYW5ub3QgcmV1c2UgdGhlIHNhbWUgYnVpbGRlciBmb3Igb25lLXRpbWUgc3luY3MgKGJ5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbikgYWZ0ZXIKLSAgICAgICAgICogaGF2aW5nIHNwZWNpZmllZCBhIHBlcmlvZGljIHN5bmMuIElmIHlvdSBkbywgYW4gPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPgorICAgICAgICAgKiBTeW5jcyBhcmUgaWRlbnRpZmllZCBieSB0YXJnZXQge0BsaW5rIFN5bmNTZXJ2aWNlfS97QGxpbmsgYW5kcm9pZC5wcm92aWRlcn0gYW5kIGJ5IHRoZQorICAgICAgICAgKiBjb250ZW50cyBvZiB0aGUgZXh0cmFzIGJ1bmRsZS4KKyAgICAgICAgICogWW91IGNhbm5vdCByZXVzZSB0aGUgc2FtZSBidWlsZGVyIGZvciBvbmUtdGltZSBzeW5jcyBhZnRlciBoYXZpbmcgc3BlY2lmaWVkIGEgcGVyaW9kaWMKKyAgICAgICAgICogc3luYyAoYnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uKS4gSWYgeW91IGRvLCBhbiA8Y29kZT5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L2NvZGU+CiAgICAgICAgICAqIHdpbGwgYmUgdGhyb3duLgorICAgICAgICAgKiA8cD5UaGUgYnVuZGxlIGZvciBhIHBlcmlvZGljIHN5bmMgY2FuIGJlIHF1ZXJpZWQgYnkgYXBwbGljYXRpb25zIHdpdGggdGhlIGNvcnJlY3QKKyAgICAgICAgICogcGVybWlzc2lvbnMgdXNpbmcKKyAgICAgICAgICoge0BsaW5rIENvbnRlbnRSZXNvbHZlciNnZXRQZXJpb2RpY1N5bmNzKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIHByb3ZpZGVyKX0sIHNvIG5vCisgICAgICAgICAqIHNlbnNpdGl2ZSBkYXRhIHNob3VsZCBiZSB0cmFuc2ZlcnJlZCBoZXJlLgogICAgICAgICAgKgogICAgICAgICAgKiBFeGFtcGxlIHVzYWdlLgogICAgICAgICAgKgpAQCAtMzc1LDcgKzM5NSw2IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKioKLSAgICAgICAgICoge0BoaWRlfQogICAgICAgICAgKiBEZXZlbG9wZXIgY2FuIHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZWlyIHBheWxvYWQgc2l6ZTsgb3B0aW9uYWwuIC0xIHNwZWNpZmllcyB1bmtub3duLAogICAgICAgICAgKiBzbyB0aGF0IHlvdSBhcmUgbm90IHJlc3RyaWN0ZWQgdG8gZGVmaW5pbmcgYm90aCBmaWVsZHMuCiAgICAgICAgICAqCkBAIC0zODksMjAgKzQwOCwyOCBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIEBzZWUgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlciNpc0FjdGl2ZU5ldHdvcmtNZXRlcmVkKCkKLSAgICAgICAgICogQHBhcmFtIGRpc2FsbG93IHRydWUgdG8gZW5mb3JjZSB0aGF0IHRoaXMgdHJhbnNmZXIgbm90IG9jY3VyIG9uIG1ldGVyZWQgbmV0d29ya3MuCi0gICAgICAgICAqICAgICAgICAgICAgICAgICBEZWZhdWx0IGZhbHNlLgorICAgICAgICAgKiBXaWxsIHRocm93IGFuIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4gaWYgY2FsbGVkIGFuZAorICAgICAgICAgKiB7QGxpbmsgI3NldElnbm9yZVNldHRpbmdzKGJvb2xlYW4gaWdub3JlU2V0dGluZ3MpfSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC4KKyAgICAgICAgICogQHBhcmFtIGRpc2FsbG93IHRydWUgdG8gYWxsb3cgdGhpcyB0cmFuc2ZlciBvbiBtZXRlcmVkIG5ldHdvcmtzLiBEZWZhdWx0IGZhbHNlLgorICAgICAgICAgKiAKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldERpc2FsbG93TWV0ZXJlZChib29sZWFuIGRpc2FsbG93KSB7CisgICAgICAgICAgICBpZiAobUlnbm9yZVNldHRpbmdzICYmIGRpc2FsbG93KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigic2V0RGlzYWxsb3dNZXRlcmVkKHRydWUpIGFmdGVyIGhhdmluZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgInNwZWNpZmllZCB0aGF0IHNldHRpbmdzIGFyZSBpZ25vcmVkLiIpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbURpc2FsbG93TWV0ZXJlZCA9IGRpc2FsbG93OwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKLSAgICAgICAgICogU3BlY2lmeSBhbiBhdXRob3JpdHkgYW5kIGFjY291bnQgZm9yIHRoaXMgdHJhbnNmZXIuCisgICAgICAgICAqIFNwZWNpZnkgYW4gYXV0aG9yaXR5IGFuZCBhY2NvdW50IGZvciB0aGlzIHRyYW5zZmVyLiBDYW5ub3QgYmUgdXNlZCB3aXRoCisgICAgICAgICAqIHtAbGluayAjc2V0U3luY0FkYXB0ZXIoQ29tcG9uZW50TmFtZSBjbmFtZSl9LgogICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gYXV0aG9yaXR5IFN0cmluZyBpZGVudGlmeWluZyB3aGljaCBjb250ZW50IHByb3ZpZGVyIHRvIHN5bmMuCi0gICAgICAgICAqIEBwYXJhbSBhY2NvdW50IEFjY291bnQgdG8gc3luYy4gQ2FuIGJlIG51bGwgdW5sZXNzIHRoaXMgaXMgYSBwZXJpb2RpYyBzeW5jLgorICAgICAgICAgKiBAcGFyYW0gYXV0aG9yaXR5CisgICAgICAgICAqIEBwYXJhbSBhY2NvdW50IEFjY291bnQgdG8gc3luYy4gQ2FuIGJlIG51bGwgdW5sZXNzIHRoaXMgaXMgYSBwZXJpb2RpYworICAgICAgICAgKiAgICAgICAgICAgIHN5bmMsIGZvciB3aGljaCB2ZXJpZmljYXRpb24gYnkgdGhlIENvbnRlbnRSZXNvbHZlciB3aWxsCisgICAgICAgICAqICAgICAgICAgICAgZmFpbC4gSWYgYSBzeW5jIGlzIHBlcmZvcm1lZCB3aXRob3V0IGFuIGFjY291bnQsIHRoZQogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0U3luY0FkYXB0ZXIoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5KSB7CiAgICAgICAgICAgICBpZiAobVN5bmNUYXJnZXQgIT0gU1lOQ19UQVJHRVRfVU5LTk9XTikgewpAQCAtNDE5LDEwICs0NDYsMjYgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBPcHRpb25hbCBkZXZlbG9wZXItcHJvdmlkZWQgZXh0cmFzIGhhbmRlZCBiYWNrIGluCi0gICAgICAgICAqIHtAbGluayBBYnN0cmFjdFRocmVhZGVkU3luY0FkYXB0ZXIjb25QZXJmb3JtU3luYyhBY2NvdW50LCBCdW5kbGUsIFN0cmluZywKLSAgICAgICAgICogQ29udGVudFByb3ZpZGVyQ2xpZW50LCBTeW5jUmVzdWx0KX0gb2NjdXJzLiBUaGlzIGJ1bmRsZSBpcyBjb3BpZWQgaW50byB0aGUgU3luY1JlcXVlc3QKLSAgICAgICAgICogcmV0dXJuZWQgYnkge0BsaW5rICNidWlsZCgpfS4KKyAgICAgICAgICogU3BlY2lmeSB0aGUge0BsaW5rIFN5bmNTZXJ2aWNlfSBjb21wb25lbnQgZm9yIHRoaXMgc3luYy4gVGhpcyBpcyBub3QgdmFsaWRhdGVkIHVudGlsCisgICAgICAgICAqIHN5bmMgdGltZSBzbyBwcm92aWRpbmcgYW4gaW5jb3JyZWN0IGNvbXBvbmVudCBuYW1lIGhlcmUgd2lsbCBub3QgZmFpbC4gQ2Fubm90IGJlIHVzZWQKKyAgICAgICAgICogd2l0aCB7QGxpbmsgI3NldFN5bmNBZGFwdGVyKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSl9LgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gY25hbWUgQ29tcG9uZW50TmFtZSB0byBpZGVudGlmeSB5b3VyIEFub255bW91cyBzZXJ2aWNlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRTeW5jQWRhcHRlcihDb21wb25lbnROYW1lIGNuYW1lKSB7CisgICAgICAgICAgICBpZiAobVN5bmNUYXJnZXQgIT0gU1lOQ19UQVJHRVRfVU5LTk9XTikgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlN5bmMgdGFyZ2V0IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1TeW5jVGFyZ2V0ID0gU1lOQ19UQVJHRVRfU0VSVklDRTsKKyAgICAgICAgICAgIG1Db21wb25lbnROYW1lID0gY25hbWU7CisgICAgICAgICAgICBtQWNjb3VudCA9IG51bGw7CisgICAgICAgICAgICBtQXV0aG9yaXR5ID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIERldmVsb3Blci1wcm92aWRlZCBleHRyYXMgaGFuZGVkIGJhY2sgd2hlbiBzeW5jIGFjdHVhbGx5IG9jY3Vycy4gVGhpcyBidW5kbGUgaXMgY29waWVkCisgICAgICAgICAqIGludG8gdGhlIFN5bmNSZXF1ZXN0IHJldHVybmVkIGJ5IHtAbGluayAjYnVpbGQoKX0uCiAgICAgICAgICAqCiAgICAgICAgICAqIEV4YW1wbGU6CiAgICAgICAgICAqIDxwcmU+CkBAIC00MzYsNyArNDc5LDcgQEAKICAgICAgICAgICogICAgIEJ1bmRsZSBleHRyYXMgPSBuZXcgQnVuZGxlKCk7CiAgICAgICAgICAqICAgICBleHRyYXMuc2V0U3RyaW5nKCJkYXRhIiwgc3luY0RhdGEpOwogICAgICAgICAgKiAgICAgYnVpbGRlci5zZXRFeHRyYXMoZXh0cmFzKTsKLSAgICAgICAgICogICAgIENvbnRlbnRSZXNvbHZlci5zeW5jKGJ1aWxkZXIuYnVpbGQoKSk7IC8vIEVhY2ggc3luYygpIHJlcXVlc3QgaXMgZm9yIGEgdW5pcXVlIHN5bmMuCisgICAgICAgICAqICAgICBDb250ZW50UmVzb2x2ZXIuc3luYyhidWlsZGVyLmJ1aWxkKCkpOyAvLyBFYWNoIHN5bmMoKSByZXF1ZXN0IGNyZWF0ZXMgYSB1bmlxdWUgc3luYy4KICAgICAgICAgICogICB9CiAgICAgICAgICAqIDwvcHJlPgogICAgICAgICAgKiBPbmx5IHZhbHVlcyBvZiB0aGUgZm9sbG93aW5nIHR5cGVzIG1heSBiZSB1c2VkIGluIHRoZSBleHRyYXMgYnVuZGxlOgpAQCAtNDc3LDEzICs1MjAsMTkgQEAKICAgICAgICAgLyoqCiAgICAgICAgICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBzZXR0aW5nIHtAbGluayBDb250ZW50UmVzb2x2ZXIjU1lOQ19FWFRSQVNfSUdOT1JFX1NFVFRJTkdTfS4KICAgICAgICAgICoKLSAgICAgICAgICogQSBzeW5jIGNhbiBzcGVjaWZ5IHRoYXQgc3lzdGVtIHN5bmMgc2V0dGluZ3MgYmUgaWdub3JlZCAodXNlciBoYXMgdHVybmVkIHN5bmMgb2ZmKS4gTm90Ci0gICAgICAgICAqIHZhbGlkIGZvciBwZXJpb2RpYyBzeW5jIGFuZCB3aWxsIHRocm93IGFuIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4gaW4KKyAgICAgICAgICogTm90IHZhbGlkIGZvciBwZXJpb2RpYyBzeW5jIGFuZCB3aWxsIHRocm93IGFuIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4gaW4KICAgICAgICAgICoge0BsaW5rICNidWlsZCgpfS4KKyAgICAgICAgICogPHA+VGhyb3dzIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4gaWYgY2FsbGVkIGFuZAorICAgICAgICAgKiB7QGxpbmsgI3NldERpc2FsbG93TWV0ZXJlZChib29sZWFuKX0gaGFzIGJlZW4gc2V0LgorICAgICAgICAgKiAKICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIGlnbm9yZVNldHRpbmdzIHRydWUgdG8gaWdub3JlIHRoZSBzeW5jIGF1dG9tYXRpY2FsbHkgc2V0dGluZ3MuIERlZmF1bHQgZmFsc2UuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRJZ25vcmVTZXR0aW5ncyhib29sZWFuIGlnbm9yZVNldHRpbmdzKSB7CisgICAgICAgICAgICBpZiAobURpc2FsbG93TWV0ZXJlZCAmJiBpZ25vcmVTZXR0aW5ncykgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInNldElnbm9yZVNldHRpbmdzKHRydWUpIGFmdGVyIGhhdmluZyBzcGVjaWZpZWQiCisgICAgICAgICAgICAgICAgICAgICAgICArICIgc3luYyBzZXR0aW5ncyB3aXRoIHRoaXMgYnVpbGRlci4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1JZ25vcmVTZXR0aW5ncyA9IGlnbm9yZVNldHRpbmdzOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTQ5MSwxMyArNTQwLDEzIEBACiAgICAgICAgIC8qKgogICAgICAgICAgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3Igc2V0dGluZyB7QGxpbmsgQ29udGVudFJlc29sdmVyI1NZTkNfRVhUUkFTX0lHTk9SRV9CQUNLT0ZGfS4KICAgICAgICAgICoKLSAgICAgICAgICogRm9yY2UgdGhlIHN5bmMgc2NoZWR1bGluZyBwcm9jZXNzIHRvIGlnbm9yZSBhbnkgYmFjay1vZmYgdGhhdCB3YXMgdGhlIHJlc3VsdCBvZiBhIGZhaWxlZAotICAgICAgICAgKiBzeW5jLCBhcyB3ZWxsIGFzIHRvIGludmFsaWRhdGUgYW55IHtAbGluayBTeW5jUmVzdWx0I2RlbGF5VW50aWx9IHZhbHVlIHRoYXQgbWF5IGhhdmUKLSAgICAgICAgICogYmVlbiBzZXQgYnkgdGhlIGFkYXB0ZXIuIFN1Y2Nlc3NpdmUgZmFpbHVyZXMgd2lsbCBub3QgaG9ub3IgdGhpcyBmbGFnLiBOb3QgdmFsaWQgZm9yCi0gICAgICAgICAqIHBlcmlvZGljIHN5bmMgYW5kIHdpbGwgdGhyb3cgYW4gPGNvZGU+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9jb2RlPiBpbgotICAgICAgICAgKiB7QGxpbmsgI2J1aWxkKCl9LgorICAgICAgICAgKiBJZ25vcmluZyBiYWNrLW9mZiB3aWxsIGZvcmNlIHRoZSBzeW5jIHNjaGVkdWxpbmcgcHJvY2VzcyB0byBpZ25vcmUgYW55IGJhY2stb2ZmIHRoYXQgd2FzCisgICAgICAgICAqIHRoZSByZXN1bHQgb2YgYSBmYWlsZWQgc3luYywgYXMgd2VsbCBhcyB0byBpbnZhbGlkYXRlIGFueSB7QGxpbmsgU3luY1Jlc3VsdCNkZWxheVVudGlsfQorICAgICAgICAgKiB2YWx1ZSB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGJ5IHRoZSBhZGFwdGVyLiBTdWNjZXNzaXZlIGZhaWx1cmVzIHdpbGwgbm90IGhvbm9yIHRoaXMKKyAgICAgICAgICogZmxhZy4gTm90IHZhbGlkIGZvciBwZXJpb2RpYyBzeW5jIGFuZCB3aWxsIHRocm93IGFuIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgICAgICogaW4ge0BsaW5rICNidWlsZCgpfS4KICAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGlnbm9yZUJhY2tvZmYgaWdub3JlIGJhY2stb2ZmIHNldHRpbmdzLiBEZWZhdWx0IGZhbHNlLgorICAgICAgICAgKiBAcGFyYW0gaWdub3JlQmFja29mZiBpZ25vcmUgYmFjayBvZmYgc2V0dGluZ3MuIERlZmF1bHQgZmFsc2UuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRJZ25vcmVCYWNrb2ZmKGJvb2xlYW4gaWdub3JlQmFja29mZikgewogICAgICAgICAgICAgbUlnbm9yZUJhY2tvZmYgPSBpZ25vcmVCYWNrb2ZmOwpAQCAtNTA3LDkgKzU1Niw4IEBACiAgICAgICAgIC8qKgogICAgICAgICAgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3Igc2V0dGluZyB7QGxpbmsgQ29udGVudFJlc29sdmVyI1NZTkNfRVhUUkFTX01BTlVBTH0uCiAgICAgICAgICAqCi0gICAgICAgICAqIEEgbWFudWFsIHN5bmMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gY2FsbGluZyB7QGxpbmsgI3NldElnbm9yZUJhY2tvZmYoYm9vbGVhbil9Ci0gICAgICAgICAqIGFuZCB7QGxpbmsgI3NldElnbm9yZVNldHRpbmdzKGJvb2xlYW4pfS4gTm90IHZhbGlkIGZvciBwZXJpb2RpYyBzeW5jIGFuZCB3aWxsIHRocm93IGFuCi0gICAgICAgICAqIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4gaW4ge0BsaW5rICNidWlsZCgpfS4KKyAgICAgICAgICogTm90IHZhbGlkIGZvciBwZXJpb2RpYyBzeW5jIGFuZCB3aWxsIHRocm93IGFuIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4gaW4KKyAgICAgICAgICoge0BsaW5rICNidWlsZCgpfS4KICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIGlzTWFudWFsIFVzZXItaW5pdGlhdGVkIHN5bmMgb3Igbm90LiBEZWZhdWx0IGZhbHNlLgogICAgICAgICAgKi8KQEAgLTUxOSw3ICs1NjcsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIEFuIGV4cGVkaXRlZCBzeW5jIHJ1bnMgaW1tZWRpYXRlbHkgYW5kIHdpbGwgcHJlZW1wdCBhbm90aGVyIG5vbi1leHBlZGl0ZWQgcnVubmluZyBzeW5jLgorICAgICAgICAgKiBBbiBleHBlZGl0ZWQgc3luYyBydW5zIGltbWVkaWF0ZWx5IGFuZCBjYW4gcHJlZW1wdCBvdGhlciBub24tZXhwZWRpdGVkIHJ1bm5pbmcgc3luY3MuCiAgICAgICAgICAqCiAgICAgICAgICAqIE5vdCB2YWxpZCBmb3IgcGVyaW9kaWMgc3luYyBhbmQgd2lsbCB0aHJvdyBhbiA8Y29kZT5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L2NvZGU+IGluCiAgICAgICAgICAqIHtAbGluayAjYnVpbGQoKX0uCkBAIC01MzIsNyArNTgwLDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qKgotICAgICAgICAgKiB7QGhpZGV9CiAgICAgICAgICAqIEBwYXJhbSBwcmlvcml0eSB0aGUgcHJpb3JpdHkgb2YgdGhpcyByZXF1ZXN0IGFtb25nIGFsbCByZXF1ZXN0cyBmcm9tIHRoZSBjYWxsaW5nIGFwcC4KICAgICAgICAgICogUmFuZ2Ugb2YgWy0yLDJdIHNpbWlsYXIgdG8gaG93IHRoaXMgaXMgZG9uZSB3aXRoIG5vdGlmaWNhdGlvbnMuCiAgICAgICAgICAqLwpAQCAtNTUyLDExICs1OTksMTEgQEAKICAgICAgICAgICogICAgICAgICBidWlsZGVyLgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIFN5bmNSZXF1ZXN0IGJ1aWxkKCkgeworICAgICAgICAgICAgLy8gVmFsaWRhdGUgdGhlIGV4dHJhcyBidW5kbGUKKyAgICAgICAgICAgIENvbnRlbnRSZXNvbHZlci52YWxpZGF0ZVN5bmNFeHRyYXNCdW5kbGUobUN1c3RvbUV4dHJhcyk7CiAgICAgICAgICAgICBpZiAobUN1c3RvbUV4dHJhcyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbUN1c3RvbUV4dHJhcyA9IG5ldyBCdW5kbGUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFZhbGlkYXRlIHRoZSBleHRyYXMgYnVuZGxlCi0gICAgICAgICAgICBDb250ZW50UmVzb2x2ZXIudmFsaWRhdGVTeW5jRXh0cmFzQnVuZGxlKG1DdXN0b21FeHRyYXMpOwogICAgICAgICAgICAgLy8gQ29tYmluZSBidWlsZGVyIGV4dHJhIGZsYWdzIGludG8gdGhlIGNvbmZpZyBidW5kbGUuCiAgICAgICAgICAgICBtU3luY0NvbmZpZ0V4dHJhcyA9IG5ldyBCdW5kbGUoKTsKICAgICAgICAgICAgIGlmIChtSWdub3JlQmFja29mZikgewpAQCAtNTc1LDUxICs2MjIsMzMgQEAKICAgICAgICAgICAgICAgICBtU3luY0NvbmZpZ0V4dHJhcy5wdXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19FWFBFRElURUQsIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1Jc01hbnVhbCkgewotICAgICAgICAgICAgICAgIG1TeW5jQ29uZmlnRXh0cmFzLnB1dEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX01BTlVBTCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgbVN5bmNDb25maWdFeHRyYXMucHV0Qm9vbGVhbihDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfSUdOT1JFX0JBQ0tPRkYsIHRydWUpOworICAgICAgICAgICAgICAgIG1TeW5jQ29uZmlnRXh0cmFzLnB1dEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9TRVRUSU5HUywgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtU3luY0NvbmZpZ0V4dHJhcy5wdXRMb25nKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19FWFBFQ1RFRF9VUExPQUQsIG1UeEJ5dGVzKTsKICAgICAgICAgICAgIG1TeW5jQ29uZmlnRXh0cmFzLnB1dExvbmcoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0VYUEVDVEVEX0RPV05MT0FELCBtUnhCeXRlcyk7CiAgICAgICAgICAgICBtU3luY0NvbmZpZ0V4dHJhcy5wdXRJbnQoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX1BSSU9SSVRZLCBtUHJpb3JpdHkpOwogICAgICAgICAgICAgaWYgKG1TeW5jVHlwZSA9PSBTWU5DX1RZUEVfUEVSSU9ESUMpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcGVyaW9kaWMgc3luYyBlbnN1cmUgdGhhbiBpbnZhbGlkIGV4dHJhcyB3ZXJlIG5vdCBzZXQuCi0gICAgICAgICAgICAgICAgdmFsaWRhdGVQZXJpb2RpY0V4dHJhcyhtQ3VzdG9tRXh0cmFzKTsKLSAgICAgICAgICAgICAgICB2YWxpZGF0ZVBlcmlvZGljRXh0cmFzKG1TeW5jQ29uZmlnRXh0cmFzKTsKLSAgICAgICAgICAgICAgICAvLyBWZXJpZnkgdGhhdCBhY2NvdW50IGFuZCBwcm92aWRlciBhcmUgbm90IG51bGwuCi0gICAgICAgICAgICAgICAgaWYgKG1BY2NvdW50ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQWNjb3VudCBtdXN0IG5vdCBiZSBudWxsIGZvciBwZXJpb2RpYyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgc3luYy4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1BdXRob3JpdHkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBdXRob3JpdHkgbXVzdCBub3QgYmUgbnVsbCBmb3IgcGVyaW9kaWMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHN5bmMuIik7CisgICAgICAgICAgICAgICAgaWYgKENvbnRlbnRSZXNvbHZlci5pbnZhbGlkUGVyaW9kaWNFeHRyYXMobUN1c3RvbUV4dHJhcykgfHwgCisgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50UmVzb2x2ZXIuaW52YWxpZFBlcmlvZGljRXh0cmFzKG1TeW5jQ29uZmlnRXh0cmFzKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIGV4dHJhcyB3ZXJlIHNldCIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAobVN5bmNUeXBlID09IFNZTkNfVFlQRV9VTktOT1dOKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTXVzdCBjYWxsIGVpdGhlciBzeW5jT25jZSgpIG9yIHN5bmNQZXJpb2RpYygpIik7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobVN5bmNUYXJnZXQgPT0gU1lOQ19UQVJHRVRfU0VSVklDRSkgeworICAgICAgICAgICAgICAgIGlmIChtU3luY0NvbmZpZ0V4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19JTklUSUFMSVpFLCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2Fubm90IHNwZWNpZnkgYW4gaW5pdGlhbGlzYXRpb24gc3luYyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdGhhdCB0YXJnZXRzIGEgc2VydmljZS4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBhIHRhcmdldCBmb3IgdGhlIHN5bmMgaGFzIGJlZW4gc2V0LgogICAgICAgICAgICAgaWYgKG1TeW5jVGFyZ2V0ID09IFNZTkNfVEFSR0VUX1VOS05PV04pIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNdXN0IHNwZWNpZnkgYW4gYWRhcHRlciB3aXRoICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgInNldFN5bmNBZGFwdGVyKEFjY291bnQsIFN0cmluZyIpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk11c3Qgc3BlY2lmeSBhbiBhZGFwdGVyIHdpdGggb25lIG9mIgorICAgICAgICAgICAgICAgICAgICArICJzZXRTeW5jQWRhcHRlcihDb21wb25lbnROYW1lKSBvciBzZXRTeW5jQWRhcHRlcihBY2NvdW50LCBTdHJpbmciKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBuZXcgU3luY1JlcXVlc3QodGhpcyk7CiAgICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIHRocm93IGFuIDxjb2RlPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvY29kZT4gaWYgYW55IGlsbGVnYWwKLSAgICAgICAgICogZXh0cmFzIHdlcmUgc2V0IGZvciBhIHBlcmlvZGljIHN5bmMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBleHRyYXMgYnVuZGxlIHRvIHZhbGlkYXRlLgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlUGVyaW9kaWNFeHRyYXMoQnVuZGxlIGV4dHJhcykgewotICAgICAgICAgICAgaWYgKGV4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19NQU5VQUwsIGZhbHNlKQotICAgICAgICAgICAgICAgICAgICB8fCBleHRyYXMuZ2V0Qm9vbGVhbihDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRE9fTk9UX1JFVFJZLCBmYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgfHwgZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9CQUNLT0ZGLCBmYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgfHwgZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9TRVRUSU5HUywgZmFsc2UpCi0gICAgICAgICAgICAgICAgICAgIHx8IGV4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19JTklUSUFMSVpFLCBmYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgfHwgZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0ZPUkNFLCBmYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgfHwgZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0VYUEVESVRFRCwgZmFsc2UpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCBleHRyYXMgd2VyZSBzZXQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICB9ICAgCiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L1N5bmNTZXJ2aWNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L1N5bmNTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmOTk4YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvU3luY1NlcnZpY2UuamF2YQpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5jb250ZW50OworCitpbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOworaW1wb3J0IGFuZHJvaWQub3MuVHJhY2U7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5HdWFyZGVkQnk7CisKKy8qKgorICogU2ltcGxpZmllZCBAbGluayBhbmRyb2lkLmNvbnRlbnQuQWJzdHJhY3RUaHJlYWRlZFN5bmNBZGFwdGVyLiBGb2xkcyB0aGF0CisgKiBiZWhhdmlvdXIgaW50byBhIHNlcnZpY2UgdG8gd2hpY2ggdGhlIHN5c3RlbSBjYW4gYmluZCB3aGVuIHJlcXVlc3RpbmcgYW4KKyAqIGFub255bW91cyAocHJvdmlkZXJsZXNzL2FjY291bnRsZXNzKSBzeW5jLgorICogPHA+CisgKiBJbiBvcmRlciB0byBwZXJmb3JtIGFuIGFub255bW91cyBzeW5jIG9wZXJhdGlvbiB5b3UgbXVzdCBleHRlbmQgdGhpcyBzZXJ2aWNlLCBpbXBsZW1lbnRpbmcgdGhlCisgKiBhYnN0cmFjdCBtZXRob2RzLiBUaGlzIHNlcnZpY2UgbXVzdCBiZSBkZWNsYXJlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdCBhcyB1c3VhbC4gWW91CisgKiBjYW4gdXNlIHRoaXMgc2VydmljZSBmb3Igb3RoZXIgd29yaywgaG93ZXZlciB5b3UgPGI+IG11c3Qgbm90IDwvYj4gb3ZlcnJpZGUgdGhlIG9uQmluZCgpIG1ldGhvZAorICogdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLCB3aGljaCBsaW1pdHMgdGhlIHVzZWZ1bG5lc3Mgb2YgdGhpcyBzZXJ2aWNlIGZvciBvdGhlciB3b3JrLgorICogPHA+QSB7QGxpbmsgU3luY1NlcnZpY2V9IGNhbiBlaXRoZXIgYmUgYWN0aXZlIG9yIGluYWN0aXZlLiBEaWZmZXJlbnQgdG8gYW4KKyAqIHtAbGluayBBYnN0cmFjdFRocmVhZGVkU3luY0FkYXB0ZXJ9LCB0aGVyZSBpcyBubworICoge0BsaW5rIENvbnRlbnRSZXNvbHZlciNzZXRTeW5jQXV0b21hdGljYWxseShhbmRyb2lkLmFjY291bnRzLkFjY291bnQgYWNjb3VudCwgU3RyaW5nIHByb3ZpZGVyLCBib29sZWFuIHN5bmMpfSwKKyAqIGFzIHdlbGwgYXMgbm8gY29uY2VwdCBvZiBpbml0aWFsaXNhdGlvbiAoeW91IGNhbiBoYW5kbGUgeW91ciBvd24gaWYgbmVlZGVkKS4KKyAqCisgKiA8cHJlPgorICogJmx0O3NlcnZpY2UgYW5kcm9pZDpuYW1lPSIuTXlTeW5jU2VydmljZSIvJmd0OworICogPC9wcmU+CisgKiBMaWtlIEBsaW5rIGFuZHJvaWQuY29udGVudC5BYnN0cmFjdFRocmVhZGVkU3luY0FkYXB0ZXIgdGhpcyBzZXJ2aWNlIHN1cHBvcnRzCisgKiBtdWx0aXBsZSBzeW5jcyBhdCB0aGUgc2FtZSB0aW1lLiBFYWNoIGluY29taW5nIHN0YXJ0U3luYygpIHdpdGggYSB1bmlxdWUgdGFnCisgKiB3aWxsIHNwYXduIGEgdGhyZWFkIHRvIGRvIHRoZSB3b3JrIG9mIHRoYXQgc3luYy4gSWYgc3RhcnRTeW5jKCkgaXMgY2FsbGVkCisgKiB3aXRoIGEgdGFnIHRoYXQgYWxyZWFkeSBleGlzdHMsIGEgU3luY1Jlc3VsdC5BTFJFQURZX0lOX1BST0dSRVNTIGlzIHJldHVybmVkLgorICogUmVtZW1iZXIgdGhhdCB5b3VyIHNlcnZpY2Ugd2lsbCBzcGF3biBtdWx0aXBsZSB0aHJlYWRzIGlmIHlvdSBzY2hlZHVsZSBtdWx0aXBsZSBzeW5jcworICogYXQgb25jZSwgc28gaWYgeW91IG11dGF0ZSBsb2NhbCBvYmplY3RzIHlvdSBtdXN0IGVuc3VyZSBzeW5jaHJvbml6YXRpb24uCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTeW5jU2VydmljZSBleHRlbmRzIFNlcnZpY2UgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiU3luY1NlcnZpY2UiOworCisgICAgcHJpdmF0ZSBmaW5hbCBTeW5jQWRhcHRlckltcGwgbVN5bmNBZGFwdGVyID0gbmV3IFN5bmNBZGFwdGVySW1wbCgpOworCisgICAgLyoqIEtlZXAgdHJhY2sgb2Ygb24tZ29pbmcgc3luY3MsIGtleWVkIGJ5IGJ1bmRsZS4gKi8KKyAgICBAR3VhcmRlZEJ5KCJtU3luY1RocmVhZExvY2siKQorICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8U3luY1RocmVhZD4KKyAgICAgICAgICAgIG1TeW5jVGhyZWFkcyA9IG5ldyBTcGFyc2VBcnJheTxTeW5jVGhyZWFkPigpOworICAgIC8qKiBMb2NrIG9iamVjdCBmb3IgYWNjZXNzaW5nIHRoZSBTeW5jVGhyZWFkcyBIYXNoTWFwLiAqLworICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1TeW5jVGhyZWFkTG9jayA9IG5ldyBPYmplY3QoKTsKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGtleSBmb3IgaWYgdGhpcyBzeW5jIHNlcnZpY2UgZG9lcyBub3Qgc3VwcG9ydCBwYXJhbGxlbCBvcGVyYXRpb25zLiBDdXJyZW50bHkgbm90CisgICAgICogc3VyZSBpZiBudWxsIGtleXMgd2lsbCBtYWtlIGl0IGludG8gdGhlIEFycmF5TWFwIGZvciBLTFAsIHNvIGtlZXBpbmcgb3VyIGRlZmF1bHQgZm9yIG5vdy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgS0VZX0RFRkFVTFQgPSAwOworICAgIC8qKiBJZGVudGlmaWVyIGZvciB0aGlzIHN5bmMgc2VydmljZS4gKi8KKyAgICBwcml2YXRlIENvbXBvbmVudE5hbWUgbVNlcnZpY2VDb21wb25lbnQ7CisKKyAgICAvKioge0BoaWRlfSAqLworICAgIHB1YmxpYyBJQmluZGVyIG9uQmluZChJbnRlbnQgaW50ZW50KSB7CisgICAgICAgIG1TZXJ2aWNlQ29tcG9uZW50ID0gbmV3IENvbXBvbmVudE5hbWUodGhpcywgZ2V0Q2xhc3MoKSk7CisgICAgICAgIHJldHVybiBtU3luY0FkYXB0ZXIuYXNCaW5kZXIoKTsKKyAgICB9CisKKyAgICAvKioge0BoaWRlfSAqLworICAgIHByaXZhdGUgY2xhc3MgU3luY0FkYXB0ZXJJbXBsIGV4dGVuZHMgSVN5bmNTZXJ2aWNlQWRhcHRlci5TdHViIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0U3luYyhJU3luY0NvbnRleHQgc3luY0NvbnRleHQsIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgIC8vIFdyYXAgdGhlIHByb3ZpZGVkIFN5bmMgQ29udGV4dCBiZWNhdXNlIGl0IG1heSBnbyBhd2F5IGJ5IHRoZSB0aW1lCisgICAgICAgICAgICAvLyB3ZSBjYWxsIGl0LgorICAgICAgICAgICAgZmluYWwgU3luY0NvbnRleHQgc3luY0NvbnRleHRDbGllbnQgPSBuZXcgU3luY0NvbnRleHQoc3luY0NvbnRleHQpOworICAgICAgICAgICAgYm9vbGVhbiBhbHJlYWR5SW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICAgICAgZmluYWwgaW50IGV4dHJhc0FzS2V5ID0gZXh0cmFzVG9LZXkoZXh0cmFzKTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVN5bmNUaHJlYWRMb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1TeW5jVGhyZWFkcy5nZXQoZXh0cmFzQXNLZXkpID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJzdGFydGluZyBzeW5jIGZvciA6ICIgKyBtU2VydmljZUNvbXBvbmVudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgc3luYy4KKyAgICAgICAgICAgICAgICAgICAgU3luY1RocmVhZCBzeW5jVGhyZWFkID0gbmV3IFN5bmNUaHJlYWQoc3luY0NvbnRleHRDbGllbnQsIGV4dHJhcyk7CisgICAgICAgICAgICAgICAgICAgIG1TeW5jVGhyZWFkcy5wdXQoZXh0cmFzQXNLZXksIHN5bmNUaHJlYWQpOworICAgICAgICAgICAgICAgICAgICBzeW5jVGhyZWFkLnN0YXJ0KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qgd2FudCB0byBjYWxsIGJhY2sgdG8gU3luY01hbmFnZXIgd2hpbGUgc3RpbGwKKyAgICAgICAgICAgICAgICAgICAgLy8gaG9sZGluZyBsb2NrLgorICAgICAgICAgICAgICAgICAgICBhbHJlYWR5SW5Qcm9ncmVzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFscmVhZHlJblByb2dyZXNzKSB7CisgICAgICAgICAgICAgICAgc3luY0NvbnRleHRDbGllbnQub25GaW5pc2hlZChTeW5jUmVzdWx0LkFMUkVBRFlfSU5fUFJPR1JFU1MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVzZWQgYnkgdGhlIFNNIHRvIGNhbmNlbCBhIHNwZWNpZmljIHN5bmMgdXNpbmcgdGhlCisgICAgICAgICAqIGNvbS5hbmRyb2lkLnNlcnZlci5jb250ZW50LlN5bmNNYW5hZ2VyLkFjdGl2ZVN5bmNDb250ZXh0IGFzIGEgaGFuZGxlLgorICAgICAgICAgKi8KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGNhbmNlbFN5bmMoSVN5bmNDb250ZXh0IHN5bmNDb250ZXh0KSB7CisgICAgICAgICAgICBTeW5jVGhyZWFkIHJ1bm5pbmdTeW5jID0gbnVsbDsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVN5bmNUaHJlYWRMb2NrKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtU3luY1RocmVhZHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgU3luY1RocmVhZCB0aHJlYWQgPSBtU3luY1RocmVhZHMudmFsdWVBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRocmVhZC5tU3luY0NvbnRleHQuZ2V0U3luY0NvbnRleHRCaW5kZXIoKSA9PSBzeW5jQ29udGV4dC5hc0JpbmRlcigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nU3luYyA9IHRocmVhZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJ1bm5pbmdTeW5jICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBydW5uaW5nU3luYy5pbnRlcnJ1cHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIAorICAgICAqIEBwYXJhbSBleHRyYXMgQnVuZGxlIGZvciB3aGljaCB0byBjb21wdXRlIGhhc2gKKyAgICAgKiBAcmV0dXJuIGFuIGludGVnZXIgaGFzaCB0aGF0IGlzIGVxdWFsIHRvIHRoYXQgb2YgYW5vdGhlciBidW5kbGUgaWYgdGhleSBib3RoIGNvbnRhaW4gdGhlCisgICAgICogc2FtZSBrZXkgLT4gdmFsdWUgbWFwcGluZ3MsIGhvd2V2ZXIsIG5vdCBuZWNlc3NhcmlseSBpbiBvcmRlci4KKyAgICAgKiBCYXNlZCBvbiB0aGUgdG9TdHJpbmcoKSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgbWFwcGVkLgorICAgICAqLworICAgIHByaXZhdGUgaW50IGV4dHJhc1RvS2V5KEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgaW50IGhhc2ggPSBLRVlfREVGQVVMVDsgLy8gRW1wdHkgYnVuZGxlLCBvciBubyBwYXJhbGxlbCBvcGVyYXRpb25zIGVuYWJsZWQuCisgICAgICAgIGlmIChwYXJhbGxlbFN5bmNzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBmb3IgKFN0cmluZyBrZXkgOiBleHRyYXMua2V5U2V0KCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbWFwcGluZyA9IGtleSArICIgIiArIGV4dHJhcy5nZXQoa2V5KS50b1N0cmluZygpOworICAgICAgICAgICAgICAgIGhhc2ggKz0gbWFwcGluZy5oYXNoQ29kZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXNoOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaGlkZX0KKyAgICAgKiBTaW1pbGFyIHRvIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQWJzdHJhY3RUaHJlYWRlZFN5bmNBZGFwdGVyLlN5bmNUaHJlYWR9LiBIb3dldmVyIHdoaWxlCisgICAgICogdGhlIEFUU0EgY29uc2lkZXJzIGFuIGFscmVhZHkgaW4tcHJvZ3Jlc3Mgc3luYyB0byBiZSBpZiB0aGUgYWNjb3VudCBwcm92aWRlZCBpcyBjdXJyZW50bHkKKyAgICAgKiBzeW5jaW5nLCB0aGlzIGFub255bW91cyBzeW5jIGhhcyBubyBub3Rpb24gb2YgYWNjb3VudCBhbmQgY29uc2lkZXJzIGEgc3luYyB1bmlxdWUgaWYgdGhlCisgICAgICogcHJvdmlkZWQgYnVuZGxlIGlzIGRpZmZlcmVudC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGNsYXNzIFN5bmNUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgeworICAgICAgICBwcml2YXRlIGZpbmFsIFN5bmNDb250ZXh0IG1TeW5jQ29udGV4dDsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBCdW5kbGUgbUV4dHJhczsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVRocmVhZHNLZXk7CisKKyAgICAgICAgcHVibGljIFN5bmNUaHJlYWQoU3luY0NvbnRleHQgc3luY0NvbnRleHQsIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgIG1TeW5jQ29udGV4dCA9IHN5bmNDb250ZXh0OworICAgICAgICAgICAgbUV4dHJhcyA9IGV4dHJhczsKKyAgICAgICAgICAgIG1UaHJlYWRzS2V5ID0gZXh0cmFzVG9LZXkoZXh0cmFzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBQcm9jZXNzLnNldFRocmVhZFByaW9yaXR5KFByb2Nlc3MuVEhSRUFEX1BSSU9SSVRZX0JBQ0tHUk9VTkQpOworCisgICAgICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFRyYWNlLlRSQUNFX1RBR19TWU5DX01BTkFHRVIsIGdldEFwcGxpY2F0aW9uKCkuZ2V0UGFja2FnZU5hbWUoKSk7CisKKyAgICAgICAgICAgIFN5bmNSZXN1bHQgc3luY1Jlc3VsdCA9IG5ldyBTeW5jUmVzdWx0KCk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGlmIChpc0NhbmNlbGxlZCgpKSByZXR1cm47CisgICAgICAgICAgICAgICAgLy8gUnVuIHRoZSBzeW5jLgorICAgICAgICAgICAgICAgIFN5bmNTZXJ2aWNlLnRoaXMub25QZXJmb3JtU3luYyhtRXh0cmFzLCBzeW5jUmVzdWx0KTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVHJhY2UuVFJBQ0VfVEFHX1NZTkNfTUFOQUdFUik7CisgICAgICAgICAgICAgICAgaWYgKCFpc0NhbmNlbGxlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1TeW5jQ29udGV4dC5vbkZpbmlzaGVkKHN5bmNSZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBTeW5jaHJvbml6ZSBzbyB0aGF0IHRoZSBhc3NpZ25tZW50IHdpbGwgYmUgc2VlbiBieSBvdGhlcgorICAgICAgICAgICAgICAgIC8vIHRocmVhZHMgdGhhdCBhbHNvIHN5bmNocm9uaXplIGFjY2Vzc2VzIHRvIG1TeW5jVGhyZWFkcy4KKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1TeW5jVGhyZWFkTG9jaykgeworICAgICAgICAgICAgICAgICAgICBtU3luY1RocmVhZHMucmVtb3ZlKG1UaHJlYWRzS2V5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNDYW5jZWxsZWQoKSB7CisgICAgICAgICAgICByZXR1cm4gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5pc0ludGVycnVwdGVkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbml0aWF0ZSBhbiBhbm9ueW1vdXMgc3luYyB1c2luZyB0aGlzIHNlcnZpY2UuIFN5bmNBZGFwdGVyLXNwZWNpZmljCisgICAgICogcGFyYW1ldGVycyBtYXkgYmUgc3BlY2lmaWVkIGluIGV4dHJhcywgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBub3QgYmUKKyAgICAgKiBudWxsLgorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uUGVyZm9ybVN5bmMoQnVuZGxlIGV4dHJhcywgU3luY1Jlc3VsdCBzeW5jUmVzdWx0KTsKKworICAgIC8qKgorICAgICAqIE92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gaW5kaWNhdGVkIHdoZXRoZXIgeW91IHdhbnQgdG8gc3VwcG9ydCBwYXJhbGxlbCBzeW5jcy4KKyAgICAgKiA8cD5JZiB5b3Ugb3ZlcnJpZGUgYW5kIHJldHVybiB0cnVlIG11bHRpcGxlIHRocmVhZHMgd2lsbCBiZSBzcGF3bmVkIHdpdGhpbiB5b3VyIFNlcnZpY2UgdG8KKyAgICAgKiBoYW5kbGUgZWFjaCBjb25jdXJyZW50IHN5bmMgcmVxdWVzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gZmFsc2UgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHNlcnZpY2UgZG9lcyBub3Qgc3VwcG9ydCBwYXJhbGxlbCBvcGVyYXRpb25zIGJ5IGRlZmF1bHQuCisgICAgICovCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gcGFyYWxsZWxTeW5jc0VuYWJsZWQoKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0FjdGl2aXR5SW5mby5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9BY3Rpdml0eUluZm8uamF2YQppbmRleCBiOGFjM2JmLi40MDI3NWQ4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0FjdGl2aXR5SW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vQWN0aXZpdHlJbmZvLmphdmEKQEAgLTE2LDExICsxNiwxNSBAQAogCiBwYWNrYWdlIGFuZHJvaWQuY29udGVudC5wbTsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuUHJpbnRlcjsKIAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CisKIC8qKgogICogSW5mb3JtYXRpb24geW91IGNhbiByZXRyaWV2ZSBhYm91dCBhIHBhcnRpY3VsYXIgYXBwbGljYXRpb24KICAqIGFjdGl2aXR5IG9yIHJlY2VpdmVyLiBUaGlzIGNvcnJlc3BvbmRzIHRvIGluZm9ybWF0aW9uIGNvbGxlY3RlZApAQCAtMjEyLDYgKzIxNiwyOCBAQAogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZmxhZ3M7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHsKKyAgICAgICAgICAgIFNDUkVFTl9PUklFTlRBVElPTl9VTlNQRUNJRklFRCwKKyAgICAgICAgICAgIFNDUkVFTl9PUklFTlRBVElPTl9MQU5EU0NBUEUsCisgICAgICAgICAgICBTQ1JFRU5fT1JJRU5UQVRJT05fUE9SVFJBSVQsCisgICAgICAgICAgICBTQ1JFRU5fT1JJRU5UQVRJT05fVVNFUiwKKyAgICAgICAgICAgIFNDUkVFTl9PUklFTlRBVElPTl9CRUhJTkQsCisgICAgICAgICAgICBTQ1JFRU5fT1JJRU5UQVRJT05fU0VOU09SLAorICAgICAgICAgICAgU0NSRUVOX09SSUVOVEFUSU9OX05PU0VOU09SLAorICAgICAgICAgICAgU0NSRUVOX09SSUVOVEFUSU9OX1NFTlNPUl9MQU5EU0NBUEUsCisgICAgICAgICAgICBTQ1JFRU5fT1JJRU5UQVRJT05fU0VOU09SX1BPUlRSQUlULAorICAgICAgICAgICAgU0NSRUVOX09SSUVOVEFUSU9OX1JFVkVSU0VfTEFORFNDQVBFLAorICAgICAgICAgICAgU0NSRUVOX09SSUVOVEFUSU9OX1JFVkVSU0VfUE9SVFJBSVQsCisgICAgICAgICAgICBTQ1JFRU5fT1JJRU5UQVRJT05fRlVMTF9TRU5TT1IsCisgICAgICAgICAgICBTQ1JFRU5fT1JJRU5UQVRJT05fVVNFUl9MQU5EU0NBUEUsCisgICAgICAgICAgICBTQ1JFRU5fT1JJRU5UQVRJT05fVVNFUl9QT1JUUkFJVCwKKyAgICAgICAgICAgIFNDUkVFTl9PUklFTlRBVElPTl9GVUxMX1VTRVIsCisgICAgICAgICAgICBTQ1JFRU5fT1JJRU5UQVRJT05fTE9DS0VECisgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgU2NyZWVuT3JpZW50YXRpb24ge30KKwogICAgIC8qKgogICAgICAqIENvbnN0YW50IGNvcnJlc3BvbmRpbmcgdG8gPGNvZGU+dW5zcGVjaWZpZWQ8L2NvZGU+IGluCiAgICAgICogdGhlIHtAbGluayBhbmRyb2lkLlIuYXR0ciNzY3JlZW5PcmllbnRhdGlvbn0gYXR0cmlidXRlLgpAQCAtMzIzLDYgKzM0OSw3IEBACiAgICAgICoge0BsaW5rICNTQ1JFRU5fT1JJRU5UQVRJT05fRlVMTF9VU0VSfSwKICAgICAgKiB7QGxpbmsgI1NDUkVFTl9PUklFTlRBVElPTl9MT0NLRUR9LAogICAgICAqLworICAgIEBTY3JlZW5PcmllbnRhdGlvbgogICAgIHB1YmxpYyBpbnQgc2NyZWVuT3JpZW50YXRpb24gPSBTQ1JFRU5fT1JJRU5UQVRJT05fVU5TUEVDSUZJRUQ7CiAgICAgCiAgICAgLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0ZlYXR1cmVJbmZvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0ZlYXR1cmVJbmZvLmphdmEKaW5kZXggODkzOTRmOS4uZDkxOWZjMyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9GZWF0dXJlSW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vRmVhdHVyZUluZm8uamF2YQpAQCAtMTgsNyArMTgsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yOwogCiAvKioKICAqIEEgc2luZ2xlIGZlYXR1cmUgdGhhdCBjYW4gYmUgcmVxdWVzdGVkIGJ5IGFuIGFwcGxpY2F0aW9uLiBUaGlzIGNvcnJlc3BvbmRzCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyLmphdmEKaW5kZXggYzk3YzJiOC4uMDE5MmEzMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXIuamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQuY29udGVudC5wbTsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlNka0NvbnN0YW50OwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudC5TZGtDb25zdGFudFR5cGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CkBAIC0zMyw2ICszNCw4IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgpAQCAtMTkwLDYgKzE5MywxMSBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0RFRkFVTFRfT05MWSAgID0gMHgwMDAxMDAwMDsKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoe1BFUk1JU1NJT05fR1JBTlRFRCwgUEVSTUlTU0lPTl9ERU5JRUR9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBQZXJtaXNzaW9uUmVzdWx0IHt9CisKICAgICAvKioKICAgICAgKiBQZXJtaXNzaW9uIGNoZWNrIHJlc3VsdDogdGhpcyBpcyByZXR1cm5lZCBieSB7QGxpbmsgI2NoZWNrUGVybWlzc2lvbn0KICAgICAgKiBpZiB0aGUgcGVybWlzc2lvbiBoYXMgYmVlbiBncmFudGVkIHRvIHRoZSBnaXZlbiBwYWNrYWdlLgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9YbWxTZXJpYWxpemVyQW5kUGFyc2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1htbFNlcmlhbGl6ZXJBbmRQYXJzZXIuamF2YQppbmRleCA5MzVmYzAyLi4yMGNiNjFjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1htbFNlcmlhbGl6ZXJBbmRQYXJzZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1htbFNlcmlhbGl6ZXJBbmRQYXJzZXIuamF2YQpAQCAtMTksNyArMTksNiBAQAogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFNlcmlhbGl6ZXI7CiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9yZXMvQXNzZXRNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXIuamF2YQppbmRleCBmYzllNDg2Li5lNTM0ODZkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXIuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLmNvbnRlbnQucmVzOwogCiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBhbmRyb2lkLm9zLlRyYWNlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9Db2xvclN0YXRlTGlzdC5qYXZhCmluZGV4IGJkMjNkYjQuLjQzMTIyNmEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL0NvbG9yU3RhdGVMaXN0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9yZXMvQ29sb3JTdGF0ZUxpc3QuamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQuY29udGVudC5yZXM7CiAKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuQXJyYXlVdGlsczsKIAogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7CkBAIC0yNTksNyArMjYwLDE3IEBACiAgICAgcHVibGljIGJvb2xlYW4gaXNTdGF0ZWZ1bCgpIHsKICAgICAgICAgcmV0dXJuIG1TdGF0ZVNwZWNzLmxlbmd0aCA+IDE7CiAgICAgfQotICAgIAorCisgICAgcHVibGljIGJvb2xlYW4gaXNPcGFxdWUoKSB7CisgICAgICAgIGZpbmFsIGludCBuID0gbUNvbG9ycy5sZW5ndGg7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICBpZiAoQ29sb3IuYWxwaGEobUNvbG9yc1tpXSkgIT0gMHhGRikgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXR1cm4gdGhlIGNvbG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gc2V0IG9mIHtAbGluayBhbmRyb2lkLnZpZXcuVmlld30gc3RhdGVzLgogICAgICAqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcy5qYXZhCmluZGV4IGNkNWI1ZDJmLi5lYjQxZWU5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9SZXNvdXJjZXMuamF2YQpAQCAtMzYsNyArMzYsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb25nU3BhcnNlQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXlBZGp1c3RtZW50czsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL1R5cGVkQXJyYXkuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL1R5cGVkQXJyYXkuamF2YQppbmRleCA4M2Q0OGFhLi40Yjk2ODAwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9UeXBlZEFycmF5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9yZXMvVHlwZWRBcnJheS5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5jb250ZW50LnJlczsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2RhdGFiYXNlL0N1cnNvclRvQnVsa0N1cnNvckFkYXB0b3IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2RhdGFiYXNlL0N1cnNvclRvQnVsa0N1cnNvckFkYXB0b3IuamF2YQppbmRleCA4MmE2MWQ0Li43ZGNmYWUyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9kYXRhYmFzZS9DdXJzb3JUb0J1bGtDdXJzb3JBZGFwdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvZGF0YWJhc2UvQ3Vyc29yVG9CdWxrQ3Vyc29yQWRhcHRvci5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlT3BlbkhlbHBlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZU9wZW5IZWxwZXIuamF2YQppbmRleCA0MzFlY2EyLi4yZGQ0ODAwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlT3BlbkhlbHBlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVPcGVuSGVscGVyLmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuRGF0YWJhc2VFcnJvckhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5EZWZhdWx0RGF0YWJhc2VFcnJvckhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlRGF0YWJhc2UuQ3Vyc29yRmFjdG9yeTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9kZG0vRGRtSGFuZGxlTmF0aXZlSGVhcC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvZGRtL0RkbUhhbmRsZU5hdGl2ZUhlYXAuamF2YQppbmRleCA2YmQ2NWFhLi43NzVjNTcwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9kZG0vRGRtSGFuZGxlTmF0aXZlSGVhcC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2RkbS9EZG1IYW5kbGVOYXRpdmVIZWFwLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLmhhcm1vbnkuZGFsdmlrLmRkbWMuQ2h1bmtIYW5kbGVyOwogaW1wb3J0IG9yZy5hcGFjaGUuaGFybW9ueS5kYWx2aWsuZGRtYy5EZG1TZXJ2ZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogCiAvKioKICAqIEhhbmRsZSB0aHJlYWQtcmVsYXRlZCB0cmFmZmljLgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvZGRtL0RkbUhhbmRsZVByb2ZpbGluZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvZGRtL0RkbUhhbmRsZVByb2ZpbGluZy5qYXZhCmluZGV4IDUzNzc2M2QuLmNjZTRkZDIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2RkbS9EZG1IYW5kbGVQcm9maWxpbmcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9kZG0vRGRtSGFuZGxlUHJvZmlsaW5nLmphdmEKQEAgLTIxLDcgKzIxLDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLmhhcm1vbnkuZGFsdmlrLmRkbWMuRGRtU2VydmVyOwogaW1wb3J0IGFuZHJvaWQub3MuRGVidWc7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvZ2VzdHVyZS9HZXN0dXJlT3ZlcmxheVZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2dlc3R1cmUvR2VzdHVyZU92ZXJsYXlWaWV3LmphdmEKaW5kZXggMmQ0N2YyOC4uNmUzYTAwZiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvZ2VzdHVyZS9HZXN0dXJlT3ZlcmxheVZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9nZXN0dXJlL0dlc3R1cmVPdmVybGF5Vmlldy5qYXZhCkBAIC0xMzQsMTEgKzEzNCwxNiBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuZ2VzdHVyZU92ZXJsYXlWaWV3U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBHZXN0dXJlT3ZlcmxheVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBHZXN0dXJlT3ZlcmxheVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkdlc3R1cmVPdmVybGF5VmlldywgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBHZXN0dXJlT3ZlcmxheVZpZXcoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIFIuc3R5bGVhYmxlLkdlc3R1cmVPdmVybGF5VmlldywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgbUdlc3R1cmVTdHJva2VXaWR0aCA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuR2VzdHVyZU92ZXJsYXlWaWV3X2dlc3R1cmVTdHJva2VXaWR0aCwKICAgICAgICAgICAgICAgICBtR2VzdHVyZVN0cm9rZVdpZHRoKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL0NhbWVyYS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhLmphdmEKaW5kZXggZmViNDdhYS4uOTkxM2UzMyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhLmphdmEKQEAgLTQ2LDcgKzQ2LDYgQEAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLlJlZW50cmFudExvY2s7CiAKIC8qKgogICogVGhlIENhbWVyYSBjbGFzcyBpcyB1c2VkIHRvIHNldCBpbWFnZSBjYXB0dXJlIHNldHRpbmdzLCBzdGFydC9zdG9wIHByZXZpZXcsCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9TZXJpYWxNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9TZXJpYWxNYW5hZ2VyLmphdmEKaW5kZXggYzVlMWMyYi4uZTA2ODBiZjIyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9TZXJpYWxNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvU2VyaWFsTWFuYWdlci5qYXZhCkBAIC0xNywxNiArMTcsMTIgQEAKIAogcGFja2FnZSBhbmRyb2lkLmhhcmR3YXJlOwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIAogLyoqCiAgKiBAaGlkZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvU2VyaWFsUG9ydC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvU2VyaWFsUG9ydC5qYXZhCmluZGV4IGY1MGNkZWYuLjVkODNkOWMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL1NlcmlhbFBvcnQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9TZXJpYWxQb3J0LmphdmEKQEAgLTE3LDE0ICsxNyw5IEBACiBwYWNrYWdlIGFuZHJvaWQuaGFyZHdhcmU7CiAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CiAKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNoYXJhY3RlcmlzdGljcy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFDaGFyYWN0ZXJpc3RpY3MuamF2YQppbmRleCBhMzhiZWVjLi41ZjljOGMyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYUNoYXJhY3RlcmlzdGljcy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmphdmEKQEAgLTEyNyw3NCArMTI3LDU4IEBACiAgICAgICp+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH4qLwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hpY2ggc2V0IG9mIGFudGliYW5kaW5nIG1vZGVzIGFyZQotICAgICAqIHN1cHBvcnRlZAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5XaGljaCBzZXQgb2YgYW50aWJhbmRpbmcgbW9kZXMgYXJlCisgICAgICogc3VwcG9ydGVkPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGJ5dGVbXT4gQ09OVFJPTF9BRV9BVkFJTEFCTEVfQU5USUJBTkRJTkdfTU9ERVMgPQogICAgICAgICAgICAgbmV3IEtleTxieXRlW10+KCJhbmRyb2lkLmNvbnRyb2wuYWVBdmFpbGFibGVBbnRpYmFuZGluZ01vZGVzIiwgYnl0ZVtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExpc3Qgb2YgZnJhbWUgcmF0ZSByYW5nZXMgc3VwcG9ydGVkIGJ5IHRoZQotICAgICAqIEFFIGFsZ29yaXRobS9oYXJkd2FyZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaXN0IG9mIGZyYW1lIHJhdGUgcmFuZ2VzIHN1cHBvcnRlZCBieSB0aGUKKyAgICAgKiBBRSBhbGdvcml0aG0vaGFyZHdhcmU8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8aW50W10+IENPTlRST0xfQUVfQVZBSUxBQkxFX1RBUkdFVF9GUFNfUkFOR0VTID0KICAgICAgICAgICAgIG5ldyBLZXk8aW50W10+KCJhbmRyb2lkLmNvbnRyb2wuYWVBdmFpbGFibGVUYXJnZXRGcHNSYW5nZXMiLCBpbnRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBNYXhpbXVtIGFuZCBtaW5pbXVtIGV4cG9zdXJlIGNvbXBlbnNhdGlvbgorICAgICAqIDxwPk1heGltdW0gYW5kIG1pbmltdW0gZXhwb3N1cmUgY29tcGVuc2F0aW9uCiAgICAgICogc2V0dGluZywgaW4gY291bnRzIG9mCi0gICAgICogYW5kcm9pZC5jb250cm9sLmFlQ29tcGVuc2F0aW9uU3RlcFNpemUKLSAgICAgKiA8L3A+CisgICAgICogYW5kcm9pZC5jb250cm9sLmFlQ29tcGVuc2F0aW9uU3RlcFNpemU8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8aW50W10+IENPTlRST0xfQUVfQ09NUEVOU0FUSU9OX1JBTkdFID0KICAgICAgICAgICAgIG5ldyBLZXk8aW50W10+KCJhbmRyb2lkLmNvbnRyb2wuYWVDb21wZW5zYXRpb25SYW5nZSIsIGludFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFNtYWxsZXN0IHN0ZXAgYnkgd2hpY2ggZXhwb3N1cmUgY29tcGVuc2F0aW9uCi0gICAgICogY2FuIGJlIGNoYW5nZWQKLSAgICAgKiA8L3A+CisgICAgICogPHA+U21hbGxlc3Qgc3RlcCBieSB3aGljaCBleHBvc3VyZSBjb21wZW5zYXRpb24KKyAgICAgKiBjYW4gYmUgY2hhbmdlZDwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxSYXRpb25hbD4gQ09OVFJPTF9BRV9DT01QRU5TQVRJT05fU1RFUCA9CiAgICAgICAgICAgICBuZXcgS2V5PFJhdGlvbmFsPigiYW5kcm9pZC5jb250cm9sLmFlQ29tcGVuc2F0aW9uU3RlcCIsIFJhdGlvbmFsLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExpc3Qgb2YgQUYgbW9kZXMgdGhhdCBjYW4gYmUKLSAgICAgKiBzZWxlY3RlZAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaXN0IG9mIEFGIG1vZGVzIHRoYXQgY2FuIGJlCisgICAgICogc2VsZWN0ZWQ8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Ynl0ZVtdPiBDT05UUk9MX0FGX0FWQUlMQUJMRV9NT0RFUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGJ5dGVbXT4oImFuZHJvaWQuY29udHJvbC5hZkF2YWlsYWJsZU1vZGVzIiwgYnl0ZVtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIHdoYXQgc3Vic2V0IG9mIHRoZSBmdWxsIGNvbG9yIGVmZmVjdCBlbnVtCi0gICAgICogbGlzdCBpcyBzdXBwb3J0ZWQKLSAgICAgKiA8L3A+CisgICAgICogPHA+d2hhdCBzdWJzZXQgb2YgdGhlIGZ1bGwgY29sb3IgZWZmZWN0IGVudW0KKyAgICAgKiBsaXN0IGlzIHN1cHBvcnRlZDwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxieXRlW10+IENPTlRST0xfQVZBSUxBQkxFX0VGRkVDVFMgPQogICAgICAgICAgICAgbmV3IEtleTxieXRlW10+KCJhbmRyb2lkLmNvbnRyb2wuYXZhaWxhYmxlRWZmZWN0cyIsIGJ5dGVbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiB3aGF0IHN1YnNldCBvZiB0aGUgc2NlbmUgbW9kZSBlbnVtIGxpc3QgaXMKLSAgICAgKiBzdXBwb3J0ZWQuCi0gICAgICogPC9wPgorICAgICAqIDxwPndoYXQgc3Vic2V0IG9mIHRoZSBzY2VuZSBtb2RlIGVudW0gbGlzdCBpcworICAgICAqIHN1cHBvcnRlZC48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Ynl0ZVtdPiBDT05UUk9MX0FWQUlMQUJMRV9TQ0VORV9NT0RFUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGJ5dGVbXT4oImFuZHJvaWQuY29udHJvbC5hdmFpbGFibGVTY2VuZU1vZGVzIiwgYnl0ZVtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExpc3Qgb2YgdmlkZW8gc3RhYmlsaXphdGlvbiBtb2RlcyB0aGF0IGNhbgotICAgICAqIGJlIHN1cHBvcnRlZAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaXN0IG9mIHZpZGVvIHN0YWJpbGl6YXRpb24gbW9kZXMgdGhhdCBjYW4KKyAgICAgKiBiZSBzdXBwb3J0ZWQ8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Ynl0ZVtdPiBDT05UUk9MX0FWQUlMQUJMRV9WSURFT19TVEFCSUxJWkFUSU9OX01PREVTID0KICAgICAgICAgICAgIG5ldyBLZXk8Ynl0ZVtdPigiYW5kcm9pZC5jb250cm9sLmF2YWlsYWJsZVZpZGVvU3RhYmlsaXphdGlvbk1vZGVzIiwgYnl0ZVtdLmNsYXNzKTsKQEAgLTIwNSwxMjcgKzE4OSw5MyBAQAogICAgICAgICAgICAgbmV3IEtleTxieXRlW10+KCJhbmRyb2lkLmNvbnRyb2wuYXdiQXZhaWxhYmxlTW9kZXMiLCBieXRlW10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRm9yIEFFLCBBV0IsIGFuZCBBRiwgaG93IG1hbnkgaW5kaXZpZHVhbAotICAgICAqIHJlZ2lvbnMgY2FuIGJlIGxpc3RlZCBmb3IgbWV0ZXJpbmc/Ci0gICAgICogPC9wPgorICAgICAqIDxwPkZvciBBRSwgQVdCLCBhbmQgQUYsIGhvdyBtYW55IGluZGl2aWR1YWwKKyAgICAgKiByZWdpb25zIGNhbiBiZSBsaXN0ZWQgZm9yIG1ldGVyaW5nPzwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxJbnRlZ2VyPiBDT05UUk9MX01BWF9SRUdJT05TID0KICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5tYXhSZWdpb25zIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZXRoZXIgdGhpcyBjYW1lcmEgaGFzIGEKLSAgICAgKiBmbGFzaAotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBJZiBubyBmbGFzaCwgbm9uZSBvZiB0aGUgZmxhc2ggY29udHJvbHMgZG8KLSAgICAgKiBhbnl0aGluZy4gQWxsIG90aGVyIG1ldGFkYXRhIHNob3VsZCByZXR1cm4gMAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5XaGV0aGVyIHRoaXMgY2FtZXJhIGhhcyBhCisgICAgICogZmxhc2g8L3A+CisgICAgICogPHA+SWYgbm8gZmxhc2gsIG5vbmUgb2YgdGhlIGZsYXNoIGNvbnRyb2xzIGRvCisgICAgICogYW55dGhpbmcuIEFsbCBvdGhlciBtZXRhZGF0YSBzaG91bGQgcmV0dXJuIDA8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Qnl0ZT4gRkxBU0hfSU5GT19BVkFJTEFCTEUgPQogICAgICAgICAgICAgbmV3IEtleTxCeXRlPigiYW5kcm9pZC5mbGFzaC5pbmZvLmF2YWlsYWJsZSIsIGJ5dGUuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogU3VwcG9ydGVkIHJlc29sdXRpb25zIGZvciB0aGUgSlBFRwotICAgICAqIHRodW1ibmFpbAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5TdXBwb3J0ZWQgcmVzb2x1dGlvbnMgZm9yIHRoZSBKUEVHCisgICAgICogdGh1bWJuYWlsPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5TaXplW10+IEpQRUdfQVZBSUxBQkxFX1RIVU1CTkFJTF9TSVpFUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5TaXplW10+KCJhbmRyb2lkLmpwZWcuYXZhaWxhYmxlVGh1bWJuYWlsU2l6ZXMiLCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuU2l6ZVtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExpc3Qgb2Ygc3VwcG9ydGVkIGFwZXJ0dXJlCi0gICAgICogdmFsdWVzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIElmIHZhcmlhYmxlIGFwZXJ0dXJlIG5vdCBhdmFpbGFibGUsIG9ubHkgc2V0dGluZwotICAgICAqIHNob3VsZCBiZSBmb3IgdGhlIGZpeGVkIGFwZXJ0dXJlCi0gICAgICogPC9wPgorICAgICAqIDxwPkxpc3Qgb2Ygc3VwcG9ydGVkIGFwZXJ0dXJlCisgICAgICogdmFsdWVzPC9wPgorICAgICAqIDxwPklmIHZhcmlhYmxlIGFwZXJ0dXJlIG5vdCBhdmFpbGFibGUsIG9ubHkgc2V0dGluZworICAgICAqIHNob3VsZCBiZSBmb3IgdGhlIGZpeGVkIGFwZXJ0dXJlPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGZsb2F0W10+IExFTlNfSU5GT19BVkFJTEFCTEVfQVBFUlRVUkVTID0KICAgICAgICAgICAgIG5ldyBLZXk8ZmxvYXRbXT4oImFuZHJvaWQubGVucy5pbmZvLmF2YWlsYWJsZUFwZXJ0dXJlcyIsIGZsb2F0W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGlzdCBvZiBzdXBwb3J0ZWQgTkQgZmlsdGVyCi0gICAgICogdmFsdWVzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIElmIG5vdCBhdmFpbGFibGUsIG9ubHkgc2V0dGluZyBpcyAwLiBPdGhlcndpc2UsCisgICAgICogPHA+TGlzdCBvZiBzdXBwb3J0ZWQgTkQgZmlsdGVyCisgICAgICogdmFsdWVzPC9wPgorICAgICAqIDxwPklmIG5vdCBhdmFpbGFibGUsIG9ubHkgc2V0dGluZyBpcyAwLiBPdGhlcndpc2UsCiAgICAgICogbGlzdHMgdGhlIGF2YWlsYWJsZSBleHBvc3VyZSBpbmRleCB2YWx1ZXMgZm9yIGRpbW1pbmcKICAgICAgKiAoMiB3b3VsZCBtZWFuIHRoZSBmaWx0ZXIgaXMgc2V0IHRvIHJlZHVjZSBpbmNvbWluZwotICAgICAqIGxpZ2h0IGJ5IHR3byBzdG9wcykKLSAgICAgKiA8L3A+CisgICAgICogbGlnaHQgYnkgdHdvIHN0b3BzKTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxmbG9hdFtdPiBMRU5TX0lORk9fQVZBSUxBQkxFX0ZJTFRFUl9ERU5TSVRJRVMgPQogICAgICAgICAgICAgbmV3IEtleTxmbG9hdFtdPigiYW5kcm9pZC5sZW5zLmluZm8uYXZhaWxhYmxlRmlsdGVyRGVuc2l0aWVzIiwgZmxvYXRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBJZiBmaXR0ZWQgd2l0aCBvcHRpY2FsIHpvb20sIHdoYXQgZm9jYWwKKyAgICAgKiA8cD5JZiBmaXR0ZWQgd2l0aCBvcHRpY2FsIHpvb20sIHdoYXQgZm9jYWwKICAgICAgKiBsZW5ndGhzIGFyZSBhdmFpbGFibGUuIElmIG5vdCwgdGhlIHN0YXRpYyBmb2NhbAotICAgICAqIGxlbmd0aAotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBJZiBvcHRpY2FsIHpvb20gbm90IHN1cHBvcnRlZCwgb25seSBvbmUgdmFsdWUKLSAgICAgKiBzaG91bGQgYmUgcmVwb3J0ZWQKLSAgICAgKiA8L3A+CisgICAgICogbGVuZ3RoPC9wPgorICAgICAqIDxwPklmIG9wdGljYWwgem9vbSBub3Qgc3VwcG9ydGVkLCBvbmx5IG9uZSB2YWx1ZQorICAgICAqIHNob3VsZCBiZSByZXBvcnRlZDwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxmbG9hdFtdPiBMRU5TX0lORk9fQVZBSUxBQkxFX0ZPQ0FMX0xFTkdUSFMgPQogICAgICAgICAgICAgbmV3IEtleTxmbG9hdFtdPigiYW5kcm9pZC5sZW5zLmluZm8uYXZhaWxhYmxlRm9jYWxMZW5ndGhzIiwgZmxvYXRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBMaXN0IG9mIHN1cHBvcnRlZCBvcHRpY2FsIGltYWdlCi0gICAgICogc3RhYmlsaXphdGlvbiBtb2RlcwotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaXN0IG9mIHN1cHBvcnRlZCBvcHRpY2FsIGltYWdlCisgICAgICogc3RhYmlsaXphdGlvbiBtb2RlczwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxieXRlW10+IExFTlNfSU5GT19BVkFJTEFCTEVfT1BUSUNBTF9TVEFCSUxJWkFUSU9OID0KICAgICAgICAgICAgIG5ldyBLZXk8Ynl0ZVtdPigiYW5kcm9pZC5sZW5zLmluZm8uYXZhaWxhYmxlT3B0aWNhbFN0YWJpbGl6YXRpb24iLCBieXRlW10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogSHlwZXJmb2NhbCBkaXN0YW5jZSBmb3IgdGhpcyBsZW5zOyBzZXQgdG8KLSAgICAgKiAwIGlmIGZpeGVkIGZvY3VzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFRoZSBoeXBlcmZvY2FsIGRpc3RhbmNlIGlzIHVzZWQgZm9yIHRoZSBvbGQKLSAgICAgKiBBUEkncyAnZml4ZWQnIHNldHRpbmcKLSAgICAgKiA8L3A+CisgICAgICogPHA+SHlwZXJmb2NhbCBkaXN0YW5jZSBmb3IgdGhpcyBsZW5zOyBzZXQgdG8KKyAgICAgKiAwIGlmIGZpeGVkIGZvY3VzPC9wPgorICAgICAqIDxwPlRoZSBoeXBlcmZvY2FsIGRpc3RhbmNlIGlzIHVzZWQgZm9yIHRoZSBvbGQKKyAgICAgKiBBUEkncyAnZml4ZWQnIHNldHRpbmc8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8RmxvYXQ+IExFTlNfSU5GT19IWVBFUkZPQ0FMX0RJU1RBTkNFID0KICAgICAgICAgICAgIG5ldyBLZXk8RmxvYXQ+KCJhbmRyb2lkLmxlbnMuaW5mby5oeXBlcmZvY2FsRGlzdGFuY2UiLCBmbG9hdC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBTaG9ydGVzdCBkaXN0YW5jZSBmcm9tIGZyb250bW9zdCBzdXJmYWNlCi0gICAgICogb2YgdGhlIGxlbnMgdGhhdCBjYW4gYmUgZm9jdXNlZCBjb3JyZWN0bHkKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogSWYgdGhlIGxlbnMgaXMgZml4ZWQtZm9jdXMsIHRoaXMgc2hvdWxkIGJlCi0gICAgICogMAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5TaG9ydGVzdCBkaXN0YW5jZSBmcm9tIGZyb250bW9zdCBzdXJmYWNlCisgICAgICogb2YgdGhlIGxlbnMgdGhhdCBjYW4gYmUgZm9jdXNlZCBjb3JyZWN0bHk8L3A+CisgICAgICogPHA+SWYgdGhlIGxlbnMgaXMgZml4ZWQtZm9jdXMsIHRoaXMgc2hvdWxkIGJlCisgICAgICogMDwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxGbG9hdD4gTEVOU19JTkZPX01JTklNVU1fRk9DVVNfRElTVEFOQ0UgPQogICAgICAgICAgICAgbmV3IEtleTxGbG9hdD4oImFuZHJvaWQubGVucy5pbmZvLm1pbmltdW1Gb2N1c0Rpc3RhbmNlIiwgZmxvYXQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRGltZW5zaW9ucyBvZiBsZW5zIHNoYWRpbmcKLSAgICAgKiBtYXAKLSAgICAgKiA8L3A+CisgICAgICogPHA+RGltZW5zaW9ucyBvZiBsZW5zIHNoYWRpbmcKKyAgICAgKiBtYXA8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemU+IExFTlNfSU5GT19TSEFESU5HX01BUF9TSVpFID0KICAgICAgICAgICAgIG5ldyBLZXk8YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemU+KCJhbmRyb2lkLmxlbnMuaW5mby5zaGFkaW5nTWFwU2l6ZSIsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5TaXplLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIERpcmVjdGlvbiB0aGUgY2FtZXJhIGZhY2VzIHJlbGF0aXZlIHRvCi0gICAgICogZGV2aWNlIHNjcmVlbgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5EaXJlY3Rpb24gdGhlIGNhbWVyYSBmYWNlcyByZWxhdGl2ZSB0bworICAgICAqIGRldmljZSBzY3JlZW48L3A+CiAgICAgICogQHNlZSAjTEVOU19GQUNJTkdfRlJPTlQKICAgICAgKiBAc2VlICNMRU5TX0ZBQ0lOR19CQUNLCiAgICAgICovCkBAIC0zMzMsMTggKzI4MywxNCBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5sZW5zLmZhY2luZyIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBJZiBzZXQgdG8gMSwgdGhlIEhBTCB3aWxsIGFsd2F5cyBzcGxpdCByZXN1bHQKKyAgICAgKiA8cD5JZiBzZXQgdG8gMSwgdGhlIEhBTCB3aWxsIGFsd2F5cyBzcGxpdCByZXN1bHQKICAgICAgKiBtZXRhZGF0YSBmb3IgYSBzaW5nbGUgY2FwdHVyZSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMsCi0gICAgICogcmV0dXJuZWQgdXNpbmcgbXVsdGlwbGUgcHJvY2Vzc19jYXB0dXJlX3Jlc3VsdCBjYWxscy4KLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogRG9lcyBub3QgbmVlZCB0byBiZSBsaXN0ZWQgaW4gc3RhdGljCisgICAgICogcmV0dXJuZWQgdXNpbmcgbXVsdGlwbGUgcHJvY2Vzc19jYXB0dXJlX3Jlc3VsdCBjYWxscy48L3A+CisgICAgICogPHA+RG9lcyBub3QgbmVlZCB0byBiZSBsaXN0ZWQgaW4gc3RhdGljCiAgICAgICogbWV0YWRhdGEuIFN1cHBvcnQgZm9yIHBhcnRpYWwgcmVzdWx0cyB3aWxsIGJlIHJld29ya2VkIGluCiAgICAgICogZnV0dXJlIHZlcnNpb25zIG9mIGNhbWVyYSBzZXJ2aWNlLiBUaGlzIHF1aXJrIHdpbGwgc3RvcAogICAgICAqIHdvcmtpbmcgYXQgdGhhdCBwb2ludDsgRE8gTk9UIFVTRSB3aXRob3V0IGNhcmVmdWwKLSAgICAgKiBjb25zaWRlcmF0aW9uIG9mIGZ1dHVyZSBzdXBwb3J0LgotICAgICAqIDwvcD4KKyAgICAgKiBjb25zaWRlcmF0aW9uIG9mIGZ1dHVyZSBzdXBwb3J0LjwvcD4KICAgICAgKgogICAgICAqIDxiPk9wdGlvbmFsPC9iPiAtIFRoaXMgdmFsdWUgbWF5IGJlIG51bGwgb24gc29tZSBkZXZpY2VzLgogICAgICAqCkBAIC0zNTQsMTYwICszMDAsMTIyIEBACiAgICAgICAgICAgICBuZXcgS2V5PEJ5dGU+KCJhbmRyb2lkLnF1aXJrcy51c2VQYXJ0aWFsUmVzdWx0IiwgYnl0ZS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBIb3cgbWFueSBvdXRwdXQgc3RyZWFtcyBjYW4gYmUgYWxsb2NhdGVkIGF0Ci0gICAgICogdGhlIHNhbWUgdGltZSBmb3IgZWFjaCB0eXBlIG9mIHN0cmVhbQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBWaWRlbyBzbmFwc2hvdCB3aXRoIHByZXZpZXcgY2FsbGJhY2tzIHJlcXVpcmVzIDMKKyAgICAgKiA8cD5Ib3cgbWFueSBvdXRwdXQgc3RyZWFtcyBjYW4gYmUgYWxsb2NhdGVkIGF0CisgICAgICogdGhlIHNhbWUgdGltZSBmb3IgZWFjaCB0eXBlIG9mIHN0cmVhbTwvcD4KKyAgICAgKiA8cD5WaWRlbyBzbmFwc2hvdCB3aXRoIHByZXZpZXcgY2FsbGJhY2tzIHJlcXVpcmVzIDMKICAgICAgKiBwcm9jZXNzZWQgc3RyZWFtcyAocHJldmlldywgcmVjb3JkLCBhcHAgY2FsbGJhY2tzKSBhbmQKLSAgICAgKiBvbmUgSlBFRyBzdHJlYW0gKHNuYXBzaG90KQotICAgICAqIDwvcD4KKyAgICAgKiBvbmUgSlBFRyBzdHJlYW0gKHNuYXBzaG90KTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxpbnRbXT4gUkVRVUVTVF9NQVhfTlVNX09VVFBVVF9TVFJFQU1TID0KICAgICAgICAgICAgIG5ldyBLZXk8aW50W10+KCJhbmRyb2lkLnJlcXVlc3QubWF4TnVtT3V0cHV0U3RyZWFtcyIsIGludFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExpc3Qgb2YgYXBwLXZpc2libGUgZm9ybWF0cwotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaXN0IG9mIGFwcC12aXNpYmxlIGZvcm1hdHM8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8aW50W10+IFNDQUxFUl9BVkFJTEFCTEVfRk9STUFUUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGludFtdPigiYW5kcm9pZC5zY2FsZXIuYXZhaWxhYmxlRm9ybWF0cyIsIGludFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSBtaW5pbXVtIGZyYW1lIGR1cmF0aW9uIHRoYXQgaXMgc3VwcG9ydGVkCisgICAgICogPHA+VGhlIG1pbmltdW0gZnJhbWUgZHVyYXRpb24gdGhhdCBpcyBzdXBwb3J0ZWQKICAgICAgKiBmb3IgZWFjaCByZXNvbHV0aW9uIGluIGF2YWlsYWJsZUpwZWdTaXplcy4gU2hvdWxkCiAgICAgICogY29ycmVzcG9uZCB0byB0aGUgZnJhbWUgZHVyYXRpb24gd2hlbiBvbmx5IHRoYXQgSlBFRwogICAgICAqIHN0cmVhbSBpcyBhY3RpdmUgYW5kIGNhcHR1cmVkIGluIGEgYnVyc3QsIHdpdGggYWxsCi0gICAgICogcHJvY2Vzc2luZyBzZXQgdG8gRkFTVAotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGVuIG11bHRpcGxlIHN0cmVhbXMgYXJlIGNvbmZpZ3VyZWQsIHRoZSBtaW5pbXVtCi0gICAgICogZnJhbWUgZHVyYXRpb24gd2lsbCBiZSA+PSBtYXgoaW5kaXZpZHVhbCBzdHJlYW0gbWluCi0gICAgICogZHVyYXRpb25zKQotICAgICAqIDwvcD4KKyAgICAgKiBwcm9jZXNzaW5nIHNldCB0byBGQVNUPC9wPgorICAgICAqIDxwPldoZW4gbXVsdGlwbGUgc3RyZWFtcyBhcmUgY29uZmlndXJlZCwgdGhlIG1pbmltdW0KKyAgICAgKiBmcmFtZSBkdXJhdGlvbiB3aWxsIGJlICZndDs9IG1heChpbmRpdmlkdWFsIHN0cmVhbSBtaW4KKyAgICAgKiBkdXJhdGlvbnMpPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGxvbmdbXT4gU0NBTEVSX0FWQUlMQUJMRV9KUEVHX01JTl9EVVJBVElPTlMgPQogICAgICAgICAgICAgbmV3IEtleTxsb25nW10+KCJhbmRyb2lkLnNjYWxlci5hdmFpbGFibGVKcGVnTWluRHVyYXRpb25zIiwgbG9uZ1tdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSByZXNvbHV0aW9ucyBhdmFpbGFibGUgZm9yIG91dHB1dCBmcm9tCi0gICAgICogdGhlIEpQRUcgYmxvY2suIExpc3RlZCBhcyB3aWR0aCB4IGhlaWdodAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGUgcmVzb2x1dGlvbnMgYXZhaWxhYmxlIGZvciBvdXRwdXQgZnJvbQorICAgICAqIHRoZSBKUEVHIGJsb2NrLiBMaXN0ZWQgYXMgd2lkdGggeCBoZWlnaHQ8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemVbXT4gU0NBTEVSX0FWQUlMQUJMRV9KUEVHX1NJWkVTID0KICAgICAgICAgICAgIG5ldyBLZXk8YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemVbXT4oImFuZHJvaWQuc2NhbGVyLmF2YWlsYWJsZUpwZWdTaXplcyIsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5TaXplW10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhlIG1heGltdW0gcmF0aW8gYmV0d2VlbiBhY3RpdmUgYXJlYSB3aWR0aAorICAgICAqIDxwPlRoZSBtYXhpbXVtIHJhdGlvIGJldHdlZW4gYWN0aXZlIGFyZWEgd2lkdGgKICAgICAgKiBhbmQgY3JvcCByZWdpb24gd2lkdGgsIG9yIGJldHdlZW4gYWN0aXZlIGFyZWEgaGVpZ2h0IGFuZAogICAgICAqIGNyb3AgcmVnaW9uIGhlaWdodCwgaWYgdGhlIGNyb3AgcmVnaW9uIGhlaWdodCBpcyBsYXJnZXIKLSAgICAgKiB0aGFuIHdpZHRoCi0gICAgICogPC9wPgorICAgICAqIHRoYW4gd2lkdGg8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8RmxvYXQ+IFNDQUxFUl9BVkFJTEFCTEVfTUFYX0RJR0lUQUxfWk9PTSA9CiAgICAgICAgICAgICBuZXcgS2V5PEZsb2F0PigiYW5kcm9pZC5zY2FsZXIuYXZhaWxhYmxlTWF4RGlnaXRhbFpvb20iLCBmbG9hdC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgbWluaW11bSBmcmFtZSBkdXJhdGlvbiB0aGF0IGlzIHN1cHBvcnRlZAorICAgICAqIDxwPlRoZSBtaW5pbXVtIGZyYW1lIGR1cmF0aW9uIHRoYXQgaXMgc3VwcG9ydGVkCiAgICAgICogZm9yIGVhY2ggcmVzb2x1dGlvbiBpbiBhdmFpbGFibGVQcm9jZXNzZWRTaXplcy4gU2hvdWxkCiAgICAgICogY29ycmVzcG9uZCB0byB0aGUgZnJhbWUgZHVyYXRpb24gd2hlbiBvbmx5IHRoYXQgcHJvY2Vzc2VkCiAgICAgICogc3RyZWFtIGlzIGFjdGl2ZSwgd2l0aCBhbGwgcHJvY2Vzc2luZyBzZXQgdG8KLSAgICAgKiBGQVNUCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFdoZW4gbXVsdGlwbGUgc3RyZWFtcyBhcmUgY29uZmlndXJlZCwgdGhlIG1pbmltdW0KLSAgICAgKiBmcmFtZSBkdXJhdGlvbiB3aWxsIGJlID49IG1heChpbmRpdmlkdWFsIHN0cmVhbSBtaW4KLSAgICAgKiBkdXJhdGlvbnMpCi0gICAgICogPC9wPgorICAgICAqIEZBU1Q8L3A+CisgICAgICogPHA+V2hlbiBtdWx0aXBsZSBzdHJlYW1zIGFyZSBjb25maWd1cmVkLCB0aGUgbWluaW11bQorICAgICAqIGZyYW1lIGR1cmF0aW9uIHdpbGwgYmUgJmd0Oz0gbWF4KGluZGl2aWR1YWwgc3RyZWFtIG1pbgorICAgICAqIGR1cmF0aW9ucyk8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8bG9uZ1tdPiBTQ0FMRVJfQVZBSUxBQkxFX1BST0NFU1NFRF9NSU5fRFVSQVRJT05TID0KICAgICAgICAgICAgIG5ldyBLZXk8bG9uZ1tdPigiYW5kcm9pZC5zY2FsZXIuYXZhaWxhYmxlUHJvY2Vzc2VkTWluRHVyYXRpb25zIiwgbG9uZ1tdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSByZXNvbHV0aW9ucyBhdmFpbGFibGUgZm9yIHVzZSB3aXRoCisgICAgICogPHA+VGhlIHJlc29sdXRpb25zIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGgKICAgICAgKiBwcm9jZXNzZWQgb3V0cHV0IHN0cmVhbXMsIHN1Y2ggYXMgWVYxMiwgTlYxMiwgYW5kCiAgICAgICogcGxhdGZvcm0gb3BhcXVlIFlVVi9SR0Igc3RyZWFtcyB0byB0aGUgR1BVIG9yIHZpZGVvCi0gICAgICogZW5jb2RlcnMuIExpc3RlZCBhcyB3aWR0aCwgaGVpZ2h0Ci0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFRoZSBhY3R1YWwgc3VwcG9ydGVkIHJlc29sdXRpb24gbGlzdCBtYXkgYmUgbGltaXRlZCBieQorICAgICAqIGVuY29kZXJzLiBMaXN0ZWQgYXMgd2lkdGgsIGhlaWdodDwvcD4KKyAgICAgKiA8cD5UaGUgYWN0dWFsIHN1cHBvcnRlZCByZXNvbHV0aW9uIGxpc3QgbWF5IGJlIGxpbWl0ZWQgYnkKICAgICAgKiBjb25zdW1lciBlbmQgcG9pbnRzIGZvciBkaWZmZXJlbnQgdXNlIGNhc2VzLiBGb3IgZXhhbXBsZSwgZm9yCiAgICAgICogcmVjb3JkaW5nIHVzZSBjYXNlLCB0aGUgbGFyZ2VzdCBzdXBwb3J0ZWQgcmVzb2x1dGlvbiBtYXkgYmUKICAgICAgKiBsaW1pdGVkIGJ5IG1heCBzdXBwb3J0ZWQgc2l6ZSBmcm9tIGVuY29kZXIsIGZvciBwcmV2aWV3IHVzZQogICAgICAqIGNhc2UsIHRoZSBsYXJnZXN0IHN1cHBvcnRlZCByZXNvbHV0aW9uIG1heSBiZSBsaW1pdGVkIGJ5IG1heAotICAgICAqIHJlc29sdXRpb24gU3VyZmFjZVRleHR1cmUvU3VyZmFjZVZpZXcgY2FuIHN1cHBvcnQuCi0gICAgICogPC9wPgorICAgICAqIHJlc29sdXRpb24gU3VyZmFjZVRleHR1cmUvU3VyZmFjZVZpZXcgY2FuIHN1cHBvcnQuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5TaXplW10+IFNDQUxFUl9BVkFJTEFCTEVfUFJPQ0VTU0VEX1NJWkVTID0KICAgICAgICAgICAgIG5ldyBLZXk8YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemVbXT4oImFuZHJvaWQuc2NhbGVyLmF2YWlsYWJsZVByb2Nlc3NlZFNpemVzIiwgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemVbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBcmVhIG9mIHJhdyBkYXRhIHdoaWNoIGNvcnJlc3BvbmRzIHRvIG9ubHkKKyAgICAgKiA8cD5BcmVhIG9mIHJhdyBkYXRhIHdoaWNoIGNvcnJlc3BvbmRzIHRvIG9ubHkKICAgICAgKiBhY3RpdmUgcGl4ZWxzOyBzbWFsbGVyIG9yIGVxdWFsIHRvCi0gICAgICogcGl4ZWxBcnJheVNpemUuCi0gICAgICogPC9wPgorICAgICAqIHBpeGVsQXJyYXlTaXplLjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxhbmRyb2lkLmdyYXBoaWNzLlJlY3Q+IFNFTlNPUl9JTkZPX0FDVElWRV9BUlJBWV9TSVpFID0KICAgICAgICAgICAgIG5ldyBLZXk8YW5kcm9pZC5ncmFwaGljcy5SZWN0PigiYW5kcm9pZC5zZW5zb3IuaW5mby5hY3RpdmVBcnJheVNpemUiLCBhbmRyb2lkLmdyYXBoaWNzLlJlY3QuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogUmFuZ2Ugb2YgdmFsaWQgc2Vuc2l0aXZpdGllcwotICAgICAqIDwvcD4KKyAgICAgKiA8cD5SYW5nZSBvZiB2YWxpZCBzZW5zaXRpdml0aWVzPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGludFtdPiBTRU5TT1JfSU5GT19TRU5TSVRJVklUWV9SQU5HRSA9CiAgICAgICAgICAgICBuZXcgS2V5PGludFtdPigiYW5kcm9pZC5zZW5zb3IuaW5mby5zZW5zaXRpdml0eVJhbmdlIiwgaW50W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogUmFuZ2Ugb2YgdmFsaWQgZXhwb3N1cmUKLSAgICAgKiB0aW1lcwotICAgICAqIDwvcD4KKyAgICAgKiA8cD5SYW5nZSBvZiB2YWxpZCBleHBvc3VyZQorICAgICAqIHRpbWVzPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGxvbmdbXT4gU0VOU09SX0lORk9fRVhQT1NVUkVfVElNRV9SQU5HRSA9CiAgICAgICAgICAgICBuZXcgS2V5PGxvbmdbXT4oImFuZHJvaWQuc2Vuc29yLmluZm8uZXhwb3N1cmVUaW1lUmFuZ2UiLCBsb25nW10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTWF4aW11bSBwb3NzaWJsZSBmcmFtZSBkdXJhdGlvbiAobWluaW11bSBmcmFtZQotICAgICAqIHJhdGUpCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE1pbmltdW0gZHVyYXRpb24gaXMgYSBmdW5jdGlvbiBvZiByZXNvbHV0aW9uLAorICAgICAqIDxwPk1heGltdW0gcG9zc2libGUgZnJhbWUgZHVyYXRpb24gKG1pbmltdW0gZnJhbWUKKyAgICAgKiByYXRlKTwvcD4KKyAgICAgKiA8cD5NaW5pbXVtIGR1cmF0aW9uIGlzIGEgZnVuY3Rpb24gb2YgcmVzb2x1dGlvbiwKICAgICAgKiBwcm9jZXNzaW5nIHNldHRpbmdzLiBTZWUKICAgICAgKiBhbmRyb2lkLnNjYWxlci5hdmFpbGFibGVQcm9jZXNzZWRNaW5EdXJhdGlvbnMKICAgICAgKiBhbmRyb2lkLnNjYWxlci5hdmFpbGFibGVKcGVnTWluRHVyYXRpb25zCi0gICAgICogYW5kcm9pZC5zY2FsZXIuYXZhaWxhYmxlUmF3TWluRHVyYXRpb25zCi0gICAgICogPC9wPgorICAgICAqIGFuZHJvaWQuc2NhbGVyLmF2YWlsYWJsZVJhd01pbkR1cmF0aW9uczwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxMb25nPiBTRU5TT1JfSU5GT19NQVhfRlJBTUVfRFVSQVRJT04gPQogICAgICAgICAgICAgbmV3IEtleTxMb25nPigiYW5kcm9pZC5zZW5zb3IuaW5mby5tYXhGcmFtZUR1cmF0aW9uIiwgbG9uZy5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgcGh5c2ljYWwgZGltZW5zaW9ucyBvZiB0aGUgZnVsbCBwaXhlbAotICAgICAqIGFycmF5Ci0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE5lZWRlZCBmb3IgRk9WIGNhbGN1bGF0aW9uIGZvciBvbGQgQVBJCi0gICAgICogPC9wPgorICAgICAqIDxwPlRoZSBwaHlzaWNhbCBkaW1lbnNpb25zIG9mIHRoZSBmdWxsIHBpeGVsCisgICAgICogYXJyYXk8L3A+CisgICAgICogPHA+TmVlZGVkIGZvciBGT1YgY2FsY3VsYXRpb24gZm9yIG9sZCBBUEk8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZmxvYXRbXT4gU0VOU09SX0lORk9fUEhZU0lDQUxfU0laRSA9CiAgICAgICAgICAgICBuZXcgS2V5PGZsb2F0W10+KCJhbmRyb2lkLnNlbnNvci5pbmZvLnBoeXNpY2FsU2l6ZSIsIGZsb2F0W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogR2FpbiBmYWN0b3IgZnJvbSBlbGVjdHJvbnMgdG8gcmF3IHVuaXRzIHdoZW4KLSAgICAgKiBJU089MTAwCi0gICAgICogPC9wPgorICAgICAqIDxwPkdhaW4gZmFjdG9yIGZyb20gZWxlY3Ryb25zIHRvIHJhdyB1bml0cyB3aGVuCisgICAgICogSVNPPTEwMDwvcD4KICAgICAgKgogICAgICAqIDxiPk9wdGlvbmFsPC9iPiAtIFRoaXMgdmFsdWUgbWF5IGJlIG51bGwgb24gc29tZSBkZXZpY2VzLgogICAgICAqCkBAIC01MTksMTYgKzQyNywxMiBAQAogICAgICAgICAgICAgbmV3IEtleTxSYXRpb25hbD4oImFuZHJvaWQuc2Vuc29yLmJhc2VHYWluRmFjdG9yIiwgUmF0aW9uYWwuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTWF4aW11bSBzZW5zaXRpdml0eSB0aGF0IGlzIGltcGxlbWVudGVkCi0gICAgICogcHVyZWx5IHRocm91Z2ggYW5hbG9nIGdhaW4KLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogRm9yIGFuZHJvaWQuc2Vuc29yLnNlbnNpdGl2aXR5IHZhbHVlcyBsZXNzIHRoYW4gb3IKKyAgICAgKiA8cD5NYXhpbXVtIHNlbnNpdGl2aXR5IHRoYXQgaXMgaW1wbGVtZW50ZWQKKyAgICAgKiBwdXJlbHkgdGhyb3VnaCBhbmFsb2cgZ2FpbjwvcD4KKyAgICAgKiA8cD5Gb3IgYW5kcm9pZC5zZW5zb3Iuc2Vuc2l0aXZpdHkgdmFsdWVzIGxlc3MgdGhhbiBvcgogICAgICAqIGVxdWFsIHRvIHRoaXMsIGFsbCBhcHBsaWVkIGdhaW4gbXVzdCBiZSBhbmFsb2cuIEZvcgogICAgICAqIHZhbHVlcyBhYm92ZSB0aGlzLCBpdCBjYW4gYmUgYSBtaXggb2YgYW5hbG9nIGFuZAotICAgICAqIGRpZ2l0YWwKLSAgICAgKiA8L3A+CisgICAgICogZGlnaXRhbDwvcD4KICAgICAgKgogICAgICAqIDxiPk9wdGlvbmFsPC9iPiAtIFRoaXMgdmFsdWUgbWF5IGJlIG51bGwgb24gc29tZSBkZXZpY2VzLgogICAgICAqCkBAIC01NDAsNjAgKzQ0NCw0NiBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5zZW5zb3IubWF4QW5hbG9nU2Vuc2l0aXZpdHkiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQ2xvY2t3aXNlIGFuZ2xlIHRocm91Z2ggd2hpY2ggdGhlIG91dHB1dAorICAgICAqIDxwPkNsb2Nrd2lzZSBhbmdsZSB0aHJvdWdoIHdoaWNoIHRoZSBvdXRwdXQKICAgICAgKiBpbWFnZSBuZWVkcyB0byBiZSByb3RhdGVkIHRvIGJlIHVwcmlnaHQgb24gdGhlIGRldmljZQogICAgICAqIHNjcmVlbiBpbiBpdHMgbmF0aXZlIG9yaWVudGF0aW9uLiBBbHNvIGRlZmluZXMgdGhlCiAgICAgICogZGlyZWN0aW9uIG9mIHJvbGxpbmcgc2h1dHRlciByZWFkb3V0LCB3aGljaCBpcyBmcm9tIHRvcAotICAgICAqIHRvIGJvdHRvbSBpbiB0aGUgc2Vuc29yJ3MgY29vcmRpbmF0ZSBzeXN0ZW0KLSAgICAgKiA8L3A+CisgICAgICogdG8gYm90dG9tIGluIHRoZSBzZW5zb3IncyBjb29yZGluYXRlIHN5c3RlbTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxJbnRlZ2VyPiBTRU5TT1JfT1JJRU5UQVRJT04gPQogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5zZW5zb3Iub3JpZW50YXRpb24iLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hpY2ggZmFjZSBkZXRlY3Rpb24gbW9kZXMgYXJlIGF2YWlsYWJsZSwKLSAgICAgKiBpZiBhbnkKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogT0ZGIG1lYW5zIGZhY2UgZGV0ZWN0aW9uIGlzIGRpc2FibGVkLCBpdCBtdXN0Ci0gICAgICogYmUgaW5jbHVkZWQgaW4gdGhlIGxpc3QuCi0gICAgICogPC9wPjxwPgotICAgICAqIFNJTVBMRSBtZWFucyB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZQorICAgICAqIDxwPldoaWNoIGZhY2UgZGV0ZWN0aW9uIG1vZGVzIGFyZSBhdmFpbGFibGUsCisgICAgICogaWYgYW55PC9wPgorICAgICAqIDxwPk9GRiBtZWFucyBmYWNlIGRldGVjdGlvbiBpcyBkaXNhYmxlZCwgaXQgbXVzdAorICAgICAqIGJlIGluY2x1ZGVkIGluIHRoZSBsaXN0LjwvcD4KKyAgICAgKiA8cD5TSU1QTEUgbWVhbnMgdGhlIGRldmljZSBzdXBwb3J0cyB0aGUKICAgICAgKiBhbmRyb2lkLnN0YXRpc3RpY3MuZmFjZVJlY3RhbmdsZXMgYW5kCi0gICAgICogYW5kcm9pZC5zdGF0aXN0aWNzLmZhY2VTY29yZXMgb3V0cHV0cy4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogRlVMTCBtZWFucyB0aGUgZGV2aWNlIGFkZGl0aW9uYWxseSBzdXBwb3J0cyB0aGUKKyAgICAgKiBhbmRyb2lkLnN0YXRpc3RpY3MuZmFjZVNjb3JlcyBvdXRwdXRzLjwvcD4KKyAgICAgKiA8cD5GVUxMIG1lYW5zIHRoZSBkZXZpY2UgYWRkaXRpb25hbGx5IHN1cHBvcnRzIHRoZQogICAgICAqIGFuZHJvaWQuc3RhdGlzdGljcy5mYWNlSWRzIGFuZAotICAgICAqIGFuZHJvaWQuc3RhdGlzdGljcy5mYWNlTGFuZG1hcmtzIG91dHB1dHMuCi0gICAgICogPC9wPgorICAgICAqIGFuZHJvaWQuc3RhdGlzdGljcy5mYWNlTGFuZG1hcmtzIG91dHB1dHMuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGJ5dGVbXT4gU1RBVElTVElDU19JTkZPX0FWQUlMQUJMRV9GQUNFX0RFVEVDVF9NT0RFUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGJ5dGVbXT4oImFuZHJvaWQuc3RhdGlzdGljcy5pbmZvLmF2YWlsYWJsZUZhY2VEZXRlY3RNb2RlcyIsIGJ5dGVbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbmVvdXNseSBkZXRlY3RhYmxlCi0gICAgICogZmFjZXMKLSAgICAgKiA8L3A+CisgICAgICogPHA+TWF4aW11bSBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzbHkgZGV0ZWN0YWJsZQorICAgICAqIGZhY2VzPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEludGVnZXI+IFNUQVRJU1RJQ1NfSU5GT19NQVhfRkFDRV9DT1VOVCA9CiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLnN0YXRpc3RpY3MuaW5mby5tYXhGYWNlQ291bnQiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHBvaW50cyBpbiB0aGUKLSAgICAgKiB0b25lbWFwIGN1cnZlCi0gICAgICogPC9wPgorICAgICAqIDxwPk1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBwb2ludHMgaW4gdGhlCisgICAgICogdG9uZW1hcCBjdXJ2ZTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxJbnRlZ2VyPiBUT05FTUFQX01BWF9DVVJWRV9QT0lOVFMgPQogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC50b25lbWFwLm1heEN1cnZlUG9pbnRzIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEEgbGlzdCBvZiBjYW1lcmEgTEVEcyB0aGF0IGFyZSBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0uCi0gICAgICogPC9wPgorICAgICAqIDxwPkEgbGlzdCBvZiBjYW1lcmEgTEVEcyB0aGF0IGFyZSBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0uPC9wPgogICAgICAqIEBzZWUgI0xFRF9BVkFJTEFCTEVfTEVEU19UUkFOU01JVAogICAgICAqCiAgICAgICogQGhpZGUKQEAgLTYwMiwxNyArNDkyLDE0IEBACiAgICAgICAgICAgICBuZXcgS2V5PGludFtdPigiYW5kcm9pZC5sZWQuYXZhaWxhYmxlTGVkcyIsIGludFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSBjYW1lcmEgMyBIQUwgZGV2aWNlIGNhbiBpbXBsZW1lbnQgb25lIG9mIHR3byBwb3NzaWJsZQorICAgICAqIDxwPlRoZSBjYW1lcmEgMyBIQUwgZGV2aWNlIGNhbiBpbXBsZW1lbnQgb25lIG9mIHR3byBwb3NzaWJsZQogICAgICAqIG9wZXJhdGlvbmFsIG1vZGVzOyBsaW1pdGVkIGFuZCBmdWxsLiBGdWxsIHN1cHBvcnQgaXMKICAgICAgKiBleHBlY3RlZCBmcm9tIG5ldyBoaWdoZXItZW5kIGRldmljZXMuIExpbWl0ZWQgbW9kZSBoYXMKICAgICAgKiBoYXJkd2FyZSByZXF1aXJlbWVudHMgcm91Z2hseSBpbiBsaW5lIHdpdGggdGhvc2UgZm9yIGEKICAgICAgKiBjYW1lcmEgSEFMIGRldmljZSB2MSBpbXBsZW1lbnRhdGlvbiwgYW5kIGlzIGV4cGVjdGVkIGZyb20KICAgICAgKiBvbGRlciBvciBpbmV4cGVuc2l2ZSBkZXZpY2VzLiBGdWxsIGlzIGEgc3RyaWN0IHN1cGVyc2V0IG9mCi0gICAgICogbGltaXRlZCwgYW5kIHRoZXkgc2hhcmUgdGhlIHNhbWUgZXNzZW50aWFsIG9wZXJhdGlvbmFsIGZsb3cuCi0gICAgICogPC9wPjxwPgotICAgICAqIEZvciBmdWxsIGRldGFpbHMgcmVmZXIgdG8gIlMzLiBPcGVyYXRpb25hbCBNb2RlcyIgaW4gY2FtZXJhMy5oCi0gICAgICogPC9wPgorICAgICAqIGxpbWl0ZWQsIGFuZCB0aGV5IHNoYXJlIHRoZSBzYW1lIGVzc2VudGlhbCBvcGVyYXRpb25hbCBmbG93LjwvcD4KKyAgICAgKiA8cD5Gb3IgZnVsbCBkZXRhaWxzIHJlZmVyIHRvICJTMy4gT3BlcmF0aW9uYWwgTW9kZXMiIGluIGNhbWVyYTMuaDwvcD4KICAgICAgKiBAc2VlICNJTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTF9MSU1JVEVECiAgICAgICogQHNlZSAjSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUxfRlVMTAogICAgICAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYU1hbmFnZXIuamF2YQppbmRleCA2NWI2YzdhLi4yYWM1MGU0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYU1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYU1hbmFnZXIuamF2YQpAQCAtMTksNyArMTksNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuSUNhbWVyYVNlcnZpY2U7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5JQ2FtZXJhU2VydmljZUxpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuSVByb0NhbWVyYVVzZXI7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLmltcGwuQ2FtZXJhTWV0YWRhdGFOYXRpdmU7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLnV0aWxzLkNhbWVyYUJpbmRlckRlY29yYXRvcjsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIudXRpbHMuQ2FtZXJhUnVudGltZUV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWV0YWRhdGEuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhTWV0YWRhdGEuamF2YQppbmRleCAxZDZmZjdkLi5iZDk5NzExIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYU1ldGFkYXRhLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFNZXRhZGF0YS5qYXZhCkBAIC0xNjgsNyArMTY4LDcgQEAKIAogICAgICAgICAgICAgS2V5IGxocyA9IChLZXkpIG87CiAKLSAgICAgICAgICAgIHJldHVybiBtTmFtZS5lcXVhbHMobGhzLm1OYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBtTmFtZS5lcXVhbHMobGhzLm1OYW1lKSAmJiBtVHlwZS5lcXVhbHMobGhzLm1UeXBlKTsKICAgICAgICAgfQogCiAgICAgICAgIC8qKgpAQCAtMjI0LDkgKzIyNCw3IEBACiAgICAgLy8KIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIGFuZHJvaWQubGVkLnRyYW5zbWl0IGNvbnRyb2wgaXMgdXNlZAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5hbmRyb2lkLmxlZC50cmFuc21pdCBjb250cm9sIGlzIHVzZWQ8L3A+CiAgICAgICogQHNlZSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MjTEVEX0FWQUlMQUJMRV9MRURTCiAgICAgICogQGhpZGUKICAgICAgKi8KQEAgLTI1MSwyOCArMjQ5LDIyIEBACiAgICAgLy8KIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFVzZSB0aGUgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24udHJhbnNmb3JtIG1hdHJpeAotICAgICAqIGFuZCBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5nYWlucyB0byBkbyBjb2xvciBjb252ZXJzaW9uCi0gICAgICogPC9wPgorICAgICAqIDxwPlVzZSB0aGUgYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24udHJhbnNmb3JtIG1hdHJpeAorICAgICAqIGFuZCBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5nYWlucyB0byBkbyBjb2xvciBjb252ZXJzaW9uPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09MT1JfQ09SUkVDVElPTl9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1JfQ09SUkVDVElPTl9NT0RFX1RSQU5TRk9STV9NQVRSSVggPSAwOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTXVzdCBub3Qgc2xvdyBkb3duIGZyYW1lIHJhdGUgcmVsYXRpdmUgdG8gcmF3Ci0gICAgICogYmF5ZXIgb3V0cHV0Ci0gICAgICogPC9wPgorICAgICAqIDxwPk11c3Qgbm90IHNsb3cgZG93biBmcmFtZSByYXRlIHJlbGF0aXZlIHRvIHJhdworICAgICAqIGJheWVyIG91dHB1dDwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTE9SX0NPUlJFQ1RJT05fTU9ERV9GQVNUID0gMTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEZyYW1lIHJhdGUgbWF5IGJlIHJlZHVjZWQgYnkgaGlnaAotICAgICAqIHF1YWxpdHkKLSAgICAgKiA8L3A+CisgICAgICogPHA+RnJhbWUgcmF0ZSBtYXkgYmUgcmVkdWNlZCBieSBoaWdoCisgICAgICogcXVhbGl0eTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTE9SX0NPUlJFQ1RJT05fTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTE9SX0NPUlJFQ1RJT05fTU9ERV9ISUdIX1FVQUxJVFkgPSAyOwpAQCAtMzA2LDUyICsyOTgsNDIgQEAKICAgICAvLwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQXV0b2V4cG9zdXJlIGlzIGRpc2FibGVkOyBzZW5zb3IuZXhwb3N1cmVUaW1lLAotICAgICAqIHNlbnNvci5zZW5zaXRpdml0eSBhbmQgc2Vuc29yLmZyYW1lRHVyYXRpb24gYXJlIHVzZWQKLSAgICAgKiA8L3A+CisgICAgICogPHA+QXV0b2V4cG9zdXJlIGlzIGRpc2FibGVkOyBzZW5zb3IuZXhwb3N1cmVUaW1lLAorICAgICAqIHNlbnNvci5zZW5zaXRpdml0eSBhbmQgc2Vuc29yLmZyYW1lRHVyYXRpb24gYXJlIHVzZWQ8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX01PREVfT0ZGID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEF1dG9leHBvc3VyZSBpcyBhY3RpdmUsIG5vIGZsYXNoCi0gICAgICogY29udHJvbAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5BdXRvZXhwb3N1cmUgaXMgYWN0aXZlLCBubyBmbGFzaAorICAgICAqIGNvbnRyb2w8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FFX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX01PREVfT04gPSAxOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogaWYgZmxhc2ggZXhpc3RzIEF1dG9leHBvc3VyZSBpcyBhY3RpdmUsIGF1dG8KKyAgICAgKiA8cD5pZiBmbGFzaCBleGlzdHMgQXV0b2V4cG9zdXJlIGlzIGFjdGl2ZSwgYXV0bwogICAgICAqIGZsYXNoIGNvbnRyb2w7IGZsYXNoIG1heSBiZSBmaXJlZCB3aGVuIHByZWNhcHR1cmUKICAgICAgKiB0cmlnZ2VyIGlzIGFjdGl2YXRlZCwgYW5kIGZvciBjYXB0dXJlcyBmb3Igd2hpY2gKLSAgICAgKiBjYXB0dXJlSW50ZW50ID0gU1RJTExfQ0FQVFVSRQotICAgICAqIDwvcD4KKyAgICAgKiBjYXB0dXJlSW50ZW50ID0gU1RJTExfQ0FQVFVSRTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfTU9ERV9PTl9BVVRPX0ZMQVNIID0gMjsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIGlmIGZsYXNoIGV4aXN0cyBBdXRvZXhwb3N1cmUgaXMgYWN0aXZlLCBhdXRvCisgICAgICogPHA+aWYgZmxhc2ggZXhpc3RzIEF1dG9leHBvc3VyZSBpcyBhY3RpdmUsIGF1dG8KICAgICAgKiBmbGFzaCBjb250cm9sIGZvciBwcmVjYXB0dXJlIHRyaWdnZXIgYW5kIGFsd2F5cyBmbGFzaAotICAgICAqIHdoZW4gY2FwdHVyZUludGVudCA9IFNUSUxMX0NBUFRVUkUKLSAgICAgKiA8L3A+CisgICAgICogd2hlbiBjYXB0dXJlSW50ZW50ID0gU1RJTExfQ0FQVFVSRTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUVfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfTU9ERV9PTl9BTFdBWVNfRkxBU0ggPSAzOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogb3B0aW9uYWwgQXV0b21hdGljIHJlZCBleWUgcmVkdWN0aW9uIHdpdGggZmxhc2guCisgICAgICogPHA+b3B0aW9uYWwgQXV0b21hdGljIHJlZCBleWUgcmVkdWN0aW9uIHdpdGggZmxhc2guCiAgICAgICogSWYgZGVlbWVkIG5lY2Vzc2FyeSwgcmVkIGV5ZSByZWR1Y3Rpb24gc2VxdWVuY2Ugc2hvdWxkCiAgICAgICogZmlyZSB3aGVuIHByZWNhcHR1cmUgdHJpZ2dlciBpcyBhY3RpdmF0ZWQsIGFuZCBmaW5hbAogICAgICAqIGZsYXNoIHNob3VsZCBmaXJlIHdoZW4gY2FwdHVyZUludGVudCA9Ci0gICAgICogU1RJTExfQ0FQVFVSRQotICAgICAqIDwvcD4KKyAgICAgKiBTVElMTF9DQVBUVVJFPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9NT0RFX09OX0FVVE9fRkxBU0hfUkVERVlFID0gNDsKQEAgLTM2MSwyMCArMzQzLDE2IEBACiAgICAgLy8KIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSB0cmlnZ2VyIGlzIGlkbGUuCi0gICAgICogPC9wPgorICAgICAqIDxwPlRoZSB0cmlnZ2VyIGlzIGlkbGUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9QUkVDQVBUVVJFX1RSSUdHRVIKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX1BSRUNBUFRVUkVfVFJJR0dFUl9JRExFID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSBwcmVjYXB0dXJlIG1ldGVyaW5nIHNlcXVlbmNlCisgICAgICogPHA+VGhlIHByZWNhcHR1cmUgbWV0ZXJpbmcgc2VxdWVuY2UKICAgICAgKiBtdXN0IGJlIHN0YXJ0ZWQuIFRoZSBleGFjdCBlZmZlY3Qgb2YgdGhlIHByZWNhcHR1cmUKICAgICAgKiB0cmlnZ2VyIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgQUUgbW9kZSBhbmQKLSAgICAgKiBzdGF0ZS4KLSAgICAgKiA8L3A+CisgICAgICogc3RhdGUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRV9QUkVDQVBUVVJFX1RSSUdHRVIKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX1BSRUNBUFRVUkVfVFJJR0dFUl9TVEFSVCA9IDE7CkBAIC0zODQsNTUgKzM2Miw0NCBAQAogICAgIC8vCiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgM0Egcm91dGluZXMgZG8gbm90IGNvbnRyb2wgdGhlIGxlbnM7CisgICAgICogPHA+VGhlIDNBIHJvdXRpbmVzIGRvIG5vdCBjb250cm9sIHRoZSBsZW5zOwogICAgICAqIGFuZHJvaWQubGVucy5mb2N1c0Rpc3RhbmNlIGlzIGNvbnRyb2xsZWQgYnkgdGhlCi0gICAgICogYXBwbGljYXRpb24KLSAgICAgKiA8L3A+CisgICAgICogYXBwbGljYXRpb248L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FGX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX01PREVfT0ZGID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIGlmIGxlbnMgaXMgbm90IGZpeGVkIGZvY3VzLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBVc2UgYW5kcm9pZC5sZW5zLm1pbmltdW1Gb2N1c0Rpc3RhbmNlIHRvIGRldGVybWluZSBpZiBsZW5zCisgICAgICogPHA+SWYgbGVucyBpcyBub3QgZml4ZWQgZm9jdXMuPC9wPgorICAgICAqIDxwPlVzZSBhbmRyb2lkLmxlbnMubWluaW11bUZvY3VzRGlzdGFuY2UgdG8gZGV0ZXJtaW5lIGlmIGxlbnMKICAgICAgKiBpcyBmaXhlZCBmb2N1cyBJbiB0aGlzIG1vZGUsIHRoZSBsZW5zIGRvZXMgbm90IG1vdmUgdW5sZXNzCiAgICAgICogdGhlIGF1dG9mb2N1cyB0cmlnZ2VyIGFjdGlvbiBpcyBjYWxsZWQuIFdoZW4gdGhhdCB0cmlnZ2VyCiAgICAgICogaXMgYWN0aXZhdGVkLCBBRiBtdXN0IHRyYW5zaXRpb24gdG8gQUNUSVZFX1NDQU4sIHRoZW4gdG8KICAgICAgKiB0aGUgb3V0Y29tZSBvZiB0aGUgc2NhbiAoRk9DVVNFRCBvcgotICAgICAqIE5PVF9GT0NVU0VEKS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVHJpZ2dlcmluZyBjYW5jZWwgQUYgcmVzZXRzIHRoZSBsZW5zIHBvc2l0aW9uIHRvIGRlZmF1bHQsCi0gICAgICogYW5kIHNldHMgdGhlIEFGIHN0YXRlIHRvIElOQUNUSVZFLgotICAgICAqIDwvcD4KKyAgICAgKiBOT1RfRk9DVVNFRCkuPC9wPgorICAgICAqIDxwPlRyaWdnZXJpbmcgY2FuY2VsIEFGIHJlc2V0cyB0aGUgbGVucyBwb3NpdGlvbiB0byBkZWZhdWx0LAorICAgICAqIGFuZCBzZXRzIHRoZSBBRiBzdGF0ZSB0byBJTkFDVElWRS48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FGX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX01PREVfQVVUTyA9IDE7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBJbiB0aGlzIG1vZGUsIHRoZSBsZW5zIGRvZXMgbm90IG1vdmUgdW5sZXNzIHRoZQotICAgICAqIGF1dG9mb2N1cyB0cmlnZ2VyIGFjdGlvbiBpcyBjYWxsZWQuCi0gICAgICogPC9wPjxwPgotICAgICAqIFdoZW4gdGhhdCB0cmlnZ2VyIGlzIGFjdGl2YXRlZCwgQUYgbXVzdCB0cmFuc2l0aW9uIHRvCisgICAgICogPHA+SW4gdGhpcyBtb2RlLCB0aGUgbGVucyBkb2VzIG5vdCBtb3ZlIHVubGVzcyB0aGUKKyAgICAgKiBhdXRvZm9jdXMgdHJpZ2dlciBhY3Rpb24gaXMgY2FsbGVkLjwvcD4KKyAgICAgKiA8cD5XaGVuIHRoYXQgdHJpZ2dlciBpcyBhY3RpdmF0ZWQsIEFGIG11c3QgdHJhbnNpdGlvbiB0bwogICAgICAqIEFDVElWRV9TQ0FOLCB0aGVuIHRvIHRoZSBvdXRjb21lIG9mIHRoZSBzY2FuIChGT0NVU0VEIG9yCiAgICAgICogTk9UX0ZPQ1VTRUQpLiAgVHJpZ2dlcmluZyBjYW5jZWwgQUYgcmVzZXRzIHRoZSBsZW5zCiAgICAgICogcG9zaXRpb24gdG8gZGVmYXVsdCwgYW5kIHNldHMgdGhlIEFGIHN0YXRlIHRvCi0gICAgICogSU5BQ1RJVkUuCi0gICAgICogPC9wPgorICAgICAqIElOQUNUSVZFLjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUZfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfTU9ERV9NQUNSTyA9IDI7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBJbiB0aGlzIG1vZGUsIHRoZSBBRiBhbGdvcml0aG0gbW9kaWZpZXMgdGhlIGxlbnMKKyAgICAgKiA8cD5JbiB0aGlzIG1vZGUsIHRoZSBBRiBhbGdvcml0aG0gbW9kaWZpZXMgdGhlIGxlbnMKICAgICAgKiBwb3NpdGlvbiBjb250aW51YWxseSB0byBhdHRlbXB0IHRvIHByb3ZpZGUgYQotICAgICAqIGNvbnN0YW50bHktaW4tZm9jdXMgaW1hZ2Ugc3RyZWFtLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgZm9jdXNpbmcgYmVoYXZpb3Igc2hvdWxkIGJlIHN1aXRhYmxlIGZvciBnb29kIHF1YWxpdHkKKyAgICAgKiBjb25zdGFudGx5LWluLWZvY3VzIGltYWdlIHN0cmVhbS48L3A+CisgICAgICogPHA+VGhlIGZvY3VzaW5nIGJlaGF2aW9yIHNob3VsZCBiZSBzdWl0YWJsZSBmb3IgZ29vZCBxdWFsaXR5CiAgICAgICogdmlkZW8gcmVjb3JkaW5nOyB0eXBpY2FsbHkgdGhpcyBtZWFucyBzbG93ZXIgZm9jdXMKICAgICAgKiBtb3ZlbWVudCBhbmQgbm8gb3ZlcnNob290cy4gV2hlbiB0aGUgQUYgdHJpZ2dlciBpcyBub3QKICAgICAgKiBpbnZvbHZlZCwgdGhlIEFGIGFsZ29yaXRobSBzaG91bGQgc3RhcnQgaW4gSU5BQ1RJVkUgc3RhdGUsCkBAIC00NDAsMjUgKzQwNywyMSBAQAogICAgICAqIHN0YXRlcyBhcyBhcHByb3ByaWF0ZS4gV2hlbiB0aGUgQUYgdHJpZ2dlciBpcyBhY3RpdmF0ZWQsCiAgICAgICogdGhlIGFsZ29yaXRobSBzaG91bGQgaW1tZWRpYXRlbHkgdHJhbnNpdGlvbiBpbnRvCiAgICAgICogQUZfRk9DVVNFRCBvciBBRl9OT1RfRk9DVVNFRCBhcyBhcHByb3ByaWF0ZSwgYW5kIGxvY2sgdGhlCi0gICAgICogbGVucyBwb3NpdGlvbiB1bnRpbCBhIGNhbmNlbCBBRiB0cmlnZ2VyIGlzIHJlY2VpdmVkLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBPbmNlIGNhbmNlbCBpcyByZWNlaXZlZCwgdGhlIGFsZ29yaXRobSBzaG91bGQgdHJhbnNpdGlvbgorICAgICAqIGxlbnMgcG9zaXRpb24gdW50aWwgYSBjYW5jZWwgQUYgdHJpZ2dlciBpcyByZWNlaXZlZC48L3A+CisgICAgICogPHA+T25jZSBjYW5jZWwgaXMgcmVjZWl2ZWQsIHRoZSBhbGdvcml0aG0gc2hvdWxkIHRyYW5zaXRpb24KICAgICAgKiBiYWNrIHRvIElOQUNUSVZFIGFuZCByZXN1bWUgcGFzc2l2ZSBzY2FuLiBOb3RlIHRoYXQgdGhpcwogICAgICAqIGJlaGF2aW9yIGlzIG5vdCBpZGVudGljYWwgdG8gQ09OVElOVU9VU19QSUNUVVJFLCBzaW5jZSBhbgogICAgICAqIG9uZ29pbmcgUEFTU0lWRV9TQ0FOIG11c3QgaW1tZWRpYXRlbHkgYmUKLSAgICAgKiBjYW5jZWxlZC4KLSAgICAgKiA8L3A+CisgICAgICogY2FuY2VsZWQuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRl9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9NT0RFX0NPTlRJTlVPVVNfVklERU8gPSAzOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogSW4gdGhpcyBtb2RlLCB0aGUgQUYgYWxnb3JpdGhtIG1vZGlmaWVzIHRoZSBsZW5zCisgICAgICogPHA+SW4gdGhpcyBtb2RlLCB0aGUgQUYgYWxnb3JpdGhtIG1vZGlmaWVzIHRoZSBsZW5zCiAgICAgICogcG9zaXRpb24gY29udGludWFsbHkgdG8gYXR0ZW1wdCB0byBwcm92aWRlIGEKLSAgICAgKiBjb25zdGFudGx5LWluLWZvY3VzIGltYWdlIHN0cmVhbS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIGZvY3VzaW5nIGJlaGF2aW9yIHNob3VsZCBiZSBzdWl0YWJsZSBmb3Igc3RpbGwgaW1hZ2UKKyAgICAgKiBjb25zdGFudGx5LWluLWZvY3VzIGltYWdlIHN0cmVhbS48L3A+CisgICAgICogPHA+VGhlIGZvY3VzaW5nIGJlaGF2aW9yIHNob3VsZCBiZSBzdWl0YWJsZSBmb3Igc3RpbGwgaW1hZ2UKICAgICAgKiBjYXB0dXJlOyB0eXBpY2FsbHkgdGhpcyBtZWFucyBmb2N1c2luZyBhcyBmYXN0IGFzCiAgICAgICogcG9zc2libGUuIFdoZW4gdGhlIEFGIHRyaWdnZXIgaXMgbm90IGludm9sdmVkLCB0aGUgQUYKICAgICAgKiBhbGdvcml0aG0gc2hvdWxkIHN0YXJ0IGluIElOQUNUSVZFIHN0YXRlLCBhbmQgdGhlbgpAQCAtNDY3LDIyICs0MzAsMTggQEAKICAgICAgKiB0cmlnZ2VyIGlzIGFjdGl2YXRlZCwgdGhlIGFsZ29yaXRobSBzaG91bGQgZmluaXNoIGl0cwogICAgICAqIFBBU1NJVkVfU0NBTiBpZiBhY3RpdmUsIGFuZCB0aGVuIHRyYW5zaXRpb24gaW50bwogICAgICAqIEFGX0ZPQ1VTRUQgb3IgQUZfTk9UX0ZPQ1VTRUQgYXMgYXBwcm9wcmlhdGUsIGFuZCBsb2NrIHRoZQotICAgICAqIGxlbnMgcG9zaXRpb24gdW50aWwgYSBjYW5jZWwgQUYgdHJpZ2dlciBpcyByZWNlaXZlZC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogV2hlbiB0aGUgQUYgY2FuY2VsIHRyaWdnZXIgaXMgYWN0aXZhdGVkLCB0aGUgYWxnb3JpdGhtCisgICAgICogbGVucyBwb3NpdGlvbiB1bnRpbCBhIGNhbmNlbCBBRiB0cmlnZ2VyIGlzIHJlY2VpdmVkLjwvcD4KKyAgICAgKiA8cD5XaGVuIHRoZSBBRiBjYW5jZWwgdHJpZ2dlciBpcyBhY3RpdmF0ZWQsIHRoZSBhbGdvcml0aG0KICAgICAgKiBzaG91bGQgdHJhbnNpdGlvbiBiYWNrIHRvIElOQUNUSVZFIGFuZCB0aGVuIGFjdCBhcyBpZiBpdAotICAgICAqIGhhcyBqdXN0IGJlZW4gc3RhcnRlZC4KLSAgICAgKiA8L3A+CisgICAgICogaGFzIGp1c3QgYmVlbiBzdGFydGVkLjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfQUZfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfTU9ERV9DT05USU5VT1VTX1BJQ1RVUkUgPSA0OwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRXh0ZW5kZWQgZGVwdGggb2YgZmllbGQgKGRpZ2l0YWwgZm9jdXMpLiBBRgorICAgICAqIDxwPkV4dGVuZGVkIGRlcHRoIG9mIGZpZWxkIChkaWdpdGFsIGZvY3VzKS4gQUYKICAgICAgKiB0cmlnZ2VyIGlzIGlnbm9yZWQsIEFGIHN0YXRlIHNob3VsZCBhbHdheXMgYmUKLSAgICAgKiBJTkFDVElWRS4KLSAgICAgKiA8L3A+CisgICAgICogSU5BQ1RJVkUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRl9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9NT0RFX0VET0YgPSA1OwpAQCAtNDkyLDI2ICs0NTEsMjAgQEAKICAgICAvLwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhlIHRyaWdnZXIgaXMgaWRsZS4KLSAgICAgKiA8L3A+CisgICAgICogPHA+VGhlIHRyaWdnZXIgaXMgaWRsZS48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FGX1RSSUdHRVIKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1RSSUdHRVJfSURMRSA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBdXRvZm9jdXMgbXVzdCB0cmlnZ2VyIG5vdy4KLSAgICAgKiA8L3A+CisgICAgICogPHA+QXV0b2ZvY3VzIG11c3QgdHJpZ2dlciBub3cuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9BRl9UUklHR0VSCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9UUklHR0VSX1NUQVJUID0gMTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEF1dG9mb2N1cyBtdXN0IHJldHVybiB0byBpbml0aWFsCi0gICAgICogc3RhdGUsIGFuZCBjYW5jZWwgYW55IGFjdGl2ZSB0cmlnZ2VyLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5BdXRvZm9jdXMgbXVzdCByZXR1cm4gdG8gaW5pdGlhbAorICAgICAqIHN0YXRlLCBhbmQgY2FuY2VsIGFueSBhY3RpdmUgdHJpZ2dlci48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0FGX1RSSUdHRVIKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1RSSUdHRVJfQ0FOQ0VMID0gMjsKQEAgLTU3MCw1OSArNTIzLDQ3IEBACiAgICAgLy8KIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoaXMgcmVxdWVzdCBkb2Vzbid0IGZhbGwgaW50byB0aGUgb3RoZXIKKyAgICAgKiA8cD5UaGlzIHJlcXVlc3QgZG9lc24ndCBmYWxsIGludG8gdGhlIG90aGVyCiAgICAgICogY2F0ZWdvcmllcy4gRGVmYXVsdCB0byBwcmV2aWV3LWxpa2UKLSAgICAgKiBiZWhhdmlvci4KLSAgICAgKiA8L3A+CisgICAgICogYmVoYXZpb3IuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9DQVBUVVJFX0lOVEVOVAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfQ1VTVE9NID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoaXMgcmVxdWVzdCBpcyBmb3IgYSBwcmV2aWV3LWxpa2UgdXNlY2FzZS4gVGhlCisgICAgICogPHA+VGhpcyByZXF1ZXN0IGlzIGZvciBhIHByZXZpZXctbGlrZSB1c2VjYXNlLiBUaGUKICAgICAgKiBwcmVjYXB0dXJlIHRyaWdnZXIgbWF5IGJlIHVzZWQgdG8gc3RhcnQgb2ZmIGEgbWV0ZXJpbmcKLSAgICAgKiB3L2ZsYXNoIHNlcXVlbmNlCi0gICAgICogPC9wPgorICAgICAqIHcvZmxhc2ggc2VxdWVuY2U8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0NBUFRVUkVfSU5URU5UCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9DQVBUVVJFX0lOVEVOVF9QUkVWSUVXID0gMTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoaXMgcmVxdWVzdCBpcyBmb3IgYSBzdGlsbCBjYXB0dXJlLXR5cGUKLSAgICAgKiB1c2VjYXNlLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGlzIHJlcXVlc3QgaXMgZm9yIGEgc3RpbGwgY2FwdHVyZS10eXBlCisgICAgICogdXNlY2FzZS48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0NBUFRVUkVfSU5URU5UCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9DQVBUVVJFX0lOVEVOVF9TVElMTF9DQVBUVVJFID0gMjsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoaXMgcmVxdWVzdCBpcyBmb3IgYSB2aWRlbyByZWNvcmRpbmcKLSAgICAgKiB1c2VjYXNlLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGlzIHJlcXVlc3QgaXMgZm9yIGEgdmlkZW8gcmVjb3JkaW5nCisgICAgICogdXNlY2FzZS48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX0NBUFRVUkVfSU5URU5UCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9DQVBUVVJFX0lOVEVOVF9WSURFT19SRUNPUkQgPSAzOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhpcyByZXF1ZXN0IGlzIGZvciBhIHZpZGVvIHNuYXBzaG90IChzdGlsbAotICAgICAqIGltYWdlIHdoaWxlIHJlY29yZGluZyB2aWRlbykgdXNlY2FzZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGlzIHJlcXVlc3QgaXMgZm9yIGEgdmlkZW8gc25hcHNob3QgKHN0aWxsCisgICAgICogaW1hZ2Ugd2hpbGUgcmVjb3JkaW5nIHZpZGVvKSB1c2VjYXNlPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9DQVBUVVJFX0lOVEVOVAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfVklERU9fU05BUFNIT1QgPSA0OwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhpcyByZXF1ZXN0IGlzIGZvciBhIFpTTCB1c2VjYXNlOyB0aGUKKyAgICAgKiA8cD5UaGlzIHJlcXVlc3QgaXMgZm9yIGEgWlNMIHVzZWNhc2U7IHRoZQogICAgICAqIGFwcGxpY2F0aW9uIHdpbGwgc3RyZWFtIGZ1bGwtcmVzb2x1dGlvbiBpbWFnZXMgYW5kCiAgICAgICogcmVwcm9jZXNzIG9uZSBvciBzZXZlcmFsIGxhdGVyIGZvciBhIGZpbmFsCi0gICAgICogY2FwdHVyZQotICAgICAqIDwvcD4KKyAgICAgKiBjYXB0dXJlPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9DQVBUVVJFX0lOVEVOVAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQ0FQVFVSRV9JTlRFTlRfWkVST19TSFVUVEVSX0xBRyA9IDU7CkBAIC02ODEsMzYgKzYyMiwzMCBAQAogICAgIC8vCiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBGdWxsIGFwcGxpY2F0aW9uIGNvbnRyb2wgb2YgcGlwZWxpbmUuIEFsbCAzQQorICAgICAqIDxwPkZ1bGwgYXBwbGljYXRpb24gY29udHJvbCBvZiBwaXBlbGluZS4gQWxsIDNBCiAgICAgICogcm91dGluZXMgYXJlIGRpc2FibGVkLCBubyBvdGhlciBzZXR0aW5ncyBpbgotICAgICAqIGFuZHJvaWQuY29udHJvbC4qIGhhdmUgYW55IGVmZmVjdAotICAgICAqIDwvcD4KKyAgICAgKiBhbmRyb2lkLmNvbnRyb2wuKiBoYXZlIGFueSBlZmZlY3Q8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX01PREVfT0ZGID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFVzZSBzZXR0aW5ncyBmb3IgZWFjaCBpbmRpdmlkdWFsIDNBIHJvdXRpbmUuCisgICAgICogPHA+VXNlIHNldHRpbmdzIGZvciBlYWNoIGluZGl2aWR1YWwgM0Egcm91dGluZS4KICAgICAgKiBNYW51YWwgY29udHJvbCBvZiBjYXB0dXJlIHBhcmFtZXRlcnMgaXMgZGlzYWJsZWQuIEFsbAogICAgICAqIGNvbnRyb2xzIGluIGFuZHJvaWQuY29udHJvbC4qIGJlc2lkZXMgc2NlbmVNb2RlIHRha2UKLSAgICAgKiBlZmZlY3QKLSAgICAgKiA8L3A+CisgICAgICogZWZmZWN0PC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjQ09OVFJPTF9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9NT0RFX0FVVE8gPSAxOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVXNlIHNwZWNpZmljIHNjZW5lIG1vZGUuIEVuYWJsaW5nIHRoaXMgZGlzYWJsZXMKKyAgICAgKiA8cD5Vc2Ugc3BlY2lmaWMgc2NlbmUgbW9kZS4gRW5hYmxpbmcgdGhpcyBkaXNhYmxlcwogICAgICAqIGNvbnRyb2wuYWVNb2RlLCBjb250cm9sLmF3Yk1vZGUgYW5kIGNvbnRyb2wuYWZNb2RlCiAgICAgICogY29udHJvbHM7IHRoZSBIQUwgbXVzdCBpZ25vcmUgdGhvc2Ugc2V0dGluZ3Mgd2hpbGUKICAgICAgKiBVU0VfU0NFTkVfTU9ERSBpcyBhY3RpdmUgKGV4Y2VwdCBmb3IgRkFDRV9QUklPUklUWQogICAgICAqIHNjZW5lIG1vZGUpLiBPdGhlciBjb250cm9sIGVudHJpZXMgYXJlIHN0aWxsIGFjdGl2ZS4KICAgICAgKiBUaGlzIHNldHRpbmcgY2FuIG9ubHkgYmUgdXNlZCBpZiBhdmFpbGFibGVTY2VuZU1vZGVzICE9Ci0gICAgICogVU5TVVBQT1JURUQKLSAgICAgKiA8L3A+CisgICAgICogVU5TVVBQT1JURUQ8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNDT05UUk9MX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX01PREVfVVNFX1NDRU5FX01PREUgPSAyOwpAQCAtNzI1LDE4ICs2NjAsMTUgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX1NDRU5FX01PREVfVU5TVVBQT1JURUQgPSAwOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogaWYgZmFjZSBkZXRlY3Rpb24gc3VwcG9ydCBleGlzdHMgVXNlIGZhY2UKKyAgICAgKiA8cD5pZiBmYWNlIGRldGVjdGlvbiBzdXBwb3J0IGV4aXN0cyBVc2UgZmFjZQogICAgICAqIGRldGVjdGlvbiBkYXRhIHRvIGRyaXZlIDNBIHJvdXRpbmVzLiBJZiBmYWNlIGRldGVjdGlvbgogICAgICAqIHN0YXRpc3RpY3MgYXJlIGRpc2FibGVkLCBzaG91bGQgc3RpbGwgb3BlcmF0ZSBjb3JyZWN0bHkKICAgICAgKiAoYnV0IG5vdCByZXR1cm4gZmFjZSBkZXRlY3Rpb24gc3RhdGlzdGljcyB0byB0aGUKLSAgICAgKiBmcmFtZXdvcmspLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBVbmxpa2UgdGhlIG90aGVyIHNjZW5lIG1vZGVzLCBhZU1vZGUsIGF3Yk1vZGUsIGFuZCBhZk1vZGUKKyAgICAgKiBmcmFtZXdvcmspLjwvcD4KKyAgICAgKiA8cD5Vbmxpa2UgdGhlIG90aGVyIHNjZW5lIG1vZGVzLCBhZU1vZGUsIGF3Yk1vZGUsIGFuZCBhZk1vZGUKICAgICAgKiByZW1haW4gYWN0aXZlIHdoZW4gRkFDRV9QUklPUklUWSBpcyBzZXQuIFRoaXMgaXMgZHVlIHRvCiAgICAgICogY29tcGF0aWJpbGl0eSBjb25jZXJucyB3aXRoIHRoZSBvbGQgY2FtZXJhCi0gICAgICogQVBJCi0gICAgICogPC9wPgorICAgICAqIEFQSTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0NPTlRST0xfU0NFTkVfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfU0NFTkVfTU9ERV9GQUNFX1BSSU9SSVRZID0gMTsKQEAgLTgyMSwyNyArNzUzLDIxIEBACiAgICAgLy8KIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIE5vIGVkZ2UgZW5oYW5jZW1lbnQgaXMgYXBwbGllZAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5ObyBlZGdlIGVuaGFuY2VtZW50IGlzIGFwcGxpZWQ8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNFREdFX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFREdFX01PREVfT0ZGID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIE11c3Qgbm90IHNsb3cgZG93biBmcmFtZSByYXRlIHJlbGF0aXZlIHRvIHJhdwotICAgICAqIGJheWVyIG91dHB1dAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5NdXN0IG5vdCBzbG93IGRvd24gZnJhbWUgcmF0ZSByZWxhdGl2ZSB0byByYXcKKyAgICAgKiBiYXllciBvdXRwdXQ8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNFREdFX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFREdFX01PREVfRkFTVCA9IDE7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBGcmFtZSByYXRlIG1heSBiZSByZWR1Y2VkIGJ5IGhpZ2gKLSAgICAgKiBxdWFsaXR5Ci0gICAgICogPC9wPgorICAgICAqIDxwPkZyYW1lIHJhdGUgbWF5IGJlIHJlZHVjZWQgYnkgaGlnaAorICAgICAqIHF1YWxpdHk8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNFREdFX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFREdFX01PREVfSElHSF9RVUFMSVRZID0gMjsKQEAgLTg1MSwzMCArNzc3LDI0IEBACiAgICAgLy8KIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIERvIG5vdCBmaXJlIHRoZSBmbGFzaCBmb3IgdGhpcwotICAgICAqIGNhcHR1cmUKLSAgICAgKiA8L3A+CisgICAgICogPHA+RG8gbm90IGZpcmUgdGhlIGZsYXNoIGZvciB0aGlzCisgICAgICogY2FwdHVyZTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0ZMQVNIX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9NT0RFX09GRiA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBhbmRyb2lkLmZsYXNoLmF2YWlsYWJsZSBpcyB0cnVlIEZpcmUgZmxhc2gKKyAgICAgKiA8cD5pZiBhbmRyb2lkLmZsYXNoLmF2YWlsYWJsZSBpcyB0cnVlIEZpcmUgZmxhc2gKICAgICAgKiBmb3IgdGhpcyBjYXB0dXJlIGJhc2VkIG9uIGZpcmluZ1Bvd2VyLAotICAgICAqIGZpcmluZ1RpbWUuCi0gICAgICogPC9wPgorICAgICAqIGZpcmluZ1RpbWUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjRkxBU0hfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQVNIX01PREVfU0lOR0xFID0gMTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIGlmIGFuZHJvaWQuZmxhc2guYXZhaWxhYmxlIGlzIHRydWUgRmxhc2gKKyAgICAgKiA8cD5pZiBhbmRyb2lkLmZsYXNoLmF2YWlsYWJsZSBpcyB0cnVlIEZsYXNoCiAgICAgICogY29udGludW91c2x5IG9uLCBwb3dlciBzZXQgYnkKLSAgICAgKiBmaXJpbmdQb3dlcgotICAgICAqIDwvcD4KKyAgICAgKiBmaXJpbmdQb3dlcjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I0ZMQVNIX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFTSF9NT0RFX1RPUkNIID0gMjsKQEAgLTg5OCwyNyArODE4LDIxIEBACiAgICAgLy8KIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIE5vIG5vaXNlIHJlZHVjdGlvbiBpcyBhcHBsaWVkCi0gICAgICogPC9wPgorICAgICAqIDxwPk5vIG5vaXNlIHJlZHVjdGlvbiBpcyBhcHBsaWVkPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjTk9JU0VfUkVEVUNUSU9OX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT0lTRV9SRURVQ1RJT05fTU9ERV9PRkYgPSAwOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTXVzdCBub3Qgc2xvdyBkb3duIGZyYW1lIHJhdGUgcmVsYXRpdmUgdG8gcmF3Ci0gICAgICogYmF5ZXIgb3V0cHV0Ci0gICAgICogPC9wPgorICAgICAqIDxwPk11c3Qgbm90IHNsb3cgZG93biBmcmFtZSByYXRlIHJlbGF0aXZlIHRvIHJhdworICAgICAqIGJheWVyIG91dHB1dDwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I05PSVNFX1JFRFVDVElPTl9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9JU0VfUkVEVUNUSU9OX01PREVfRkFTVCA9IDE7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBNYXkgc2xvdyBkb3duIGZyYW1lIHJhdGUgdG8gcHJvdmlkZSBoaWdoZXN0Ci0gICAgICogcXVhbGl0eQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5NYXkgc2xvdyBkb3duIGZyYW1lIHJhdGUgdG8gcHJvdmlkZSBoaWdoZXN0CisgICAgICogcXVhbGl0eTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I05PSVNFX1JFRFVDVElPTl9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9JU0VfUkVEVUNUSU9OX01PREVfSElHSF9RVUFMSVRZID0gMjsKQEAgLTkzMywxOSArODQ3LDE1IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFX09GRiA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBPcHRpb25hbCBSZXR1cm4gcmVjdGFuZ2xlIGFuZCBjb25maWRlbmNlCi0gICAgICogb25seQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5PcHRpb25hbCBSZXR1cm4gcmVjdGFuZ2xlIGFuZCBjb25maWRlbmNlCisgICAgICogb25seTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXF1ZXN0I1NUQVRJU1RJQ1NfRkFDRV9ERVRFQ1RfTU9ERQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRJU1RJQ1NfRkFDRV9ERVRFQ1RfTU9ERV9TSU1QTEUgPSAxOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogT3B0aW9uYWwgUmV0dXJuIGFsbCBmYWNlCi0gICAgICogbWV0YWRhdGEKLSAgICAgKiA8L3A+CisgICAgICogPHA+T3B0aW9uYWwgUmV0dXJuIGFsbCBmYWNlCisgICAgICogbWV0YWRhdGE8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREVfRlVMTCA9IDI7CkBAIC05NjksMjggKzg3OSwyMiBAQAogICAgIC8vCiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBVc2UgdGhlIHRvbmUgbWFwcGluZyBjdXJ2ZSBzcGVjaWZpZWQgaW4KLSAgICAgKiBhbmRyb2lkLnRvbmVtYXAuY3VydmUKLSAgICAgKiA8L3A+CisgICAgICogPHA+VXNlIHRoZSB0b25lIG1hcHBpbmcgY3VydmUgc3BlY2lmaWVkIGluCisgICAgICogYW5kcm9pZC50b25lbWFwLmN1cnZlPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlcXVlc3QjVE9ORU1BUF9NT0RFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVE9ORU1BUF9NT0RFX0NPTlRSQVNUX0NVUlZFID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIE11c3Qgbm90IHNsb3cgZG93biBmcmFtZSByYXRlIHJlbGF0aXZlIHRvIHJhdwotICAgICAqIGJheWVyIG91dHB1dAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5NdXN0IG5vdCBzbG93IGRvd24gZnJhbWUgcmF0ZSByZWxhdGl2ZSB0byByYXcKKyAgICAgKiBiYXllciBvdXRwdXQ8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNUT05FTUFQX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUT05FTUFQX01PREVfRkFTVCA9IDE7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBGcmFtZSByYXRlIG1heSBiZSByZWR1Y2VkIGJ5IGhpZ2gKLSAgICAgKiBxdWFsaXR5Ci0gICAgICogPC9wPgorICAgICAqIDxwPkZyYW1lIHJhdGUgbWF5IGJlIHJlZHVjZWQgYnkgaGlnaAorICAgICAqIHF1YWxpdHk8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVxdWVzdCNUT05FTUFQX01PREUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUT05FTUFQX01PREVfSElHSF9RVUFMSVRZID0gMjsKQEAgLTEwMDAsNjAgKzkwNCw0OCBAQAogICAgIC8vCiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBRSBpcyBvZmYuICBXaGVuIGEgY2FtZXJhIGRldmljZSBpcyBvcGVuZWQsIGl0IHN0YXJ0cyBpbgotICAgICAqIHRoaXMgc3RhdGUuCi0gICAgICogPC9wPgorICAgICAqIDxwPkFFIGlzIG9mZi4gIFdoZW4gYSBjYW1lcmEgZGV2aWNlIGlzIG9wZW5lZCwgaXQgc3RhcnRzIGluCisgICAgICogdGhpcyBzdGF0ZS48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0NPTlRST0xfQUVfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX1NUQVRFX0lOQUNUSVZFID0gMDsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEFFIGRvZXNuJ3QgeWV0IGhhdmUgYSBnb29kIHNldCBvZiBjb250cm9sIHZhbHVlcwotICAgICAqIGZvciB0aGUgY3VycmVudCBzY2VuZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5BRSBkb2Vzbid0IHlldCBoYXZlIGEgZ29vZCBzZXQgb2YgY29udHJvbCB2YWx1ZXMKKyAgICAgKiBmb3IgdGhlIGN1cnJlbnQgc2NlbmU8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0NPTlRST0xfQUVfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FFX1NUQVRFX1NFQVJDSElORyA9IDE7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBRSBoYXMgYSBnb29kIHNldCBvZiBjb250cm9sIHZhbHVlcyBmb3IgdGhlCi0gICAgICogY3VycmVudCBzY2VuZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5BRSBoYXMgYSBnb29kIHNldCBvZiBjb250cm9sIHZhbHVlcyBmb3IgdGhlCisgICAgICogY3VycmVudCBzY2VuZTwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXN1bHQjQ09OVFJPTF9BRV9TVEFURQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUVfU1RBVEVfQ09OVkVSR0VEID0gMjsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEFFIGhhcyBiZWVuIGxvY2tlZCAoYWVNb2RlID0KLSAgICAgKiBMT0NLRUQpCi0gICAgICogPC9wPgorICAgICAqIDxwPkFFIGhhcyBiZWVuIGxvY2tlZCAoYWVNb2RlID0KKyAgICAgKiBMT0NLRUQpPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FFX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9TVEFURV9MT0NLRUQgPSAzOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQUUgaGFzIGEgZ29vZCBzZXQgb2YgY29udHJvbCB2YWx1ZXMsIGJ1dCBmbGFzaAorICAgICAqIDxwPkFFIGhhcyBhIGdvb2Qgc2V0IG9mIGNvbnRyb2wgdmFsdWVzLCBidXQgZmxhc2gKICAgICAgKiBuZWVkcyB0byBiZSBmaXJlZCBmb3IgZ29vZCBxdWFsaXR5IHN0aWxsCi0gICAgICogY2FwdHVyZQotICAgICAqIDwvcD4KKyAgICAgKiBjYXB0dXJlPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FFX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9TVEFURV9GTEFTSF9SRVFVSVJFRCA9IDQ7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBRSBoYXMgYmVlbiBhc2tlZCB0byBkbyBhIHByZWNhcHR1cmUgc2VxdWVuY2UKKyAgICAgKiA8cD5BRSBoYXMgYmVlbiBhc2tlZCB0byBkbyBhIHByZWNhcHR1cmUgc2VxdWVuY2UKICAgICAgKiAodGhyb3VnaCB0aGUKICAgICAgKiB0cmlnZ2VyX2FjdGlvbihDQU1FUkEyX1RSSUdHRVJfUFJFQ0FQVFVSRV9NRVRFUklORykKICAgICAgKiBjYWxsKSwgYW5kIGlzIGN1cnJlbnRseSBleGVjdXRpbmcgaXQuIE9uY2UgUFJFQ0FQVFVSRQogICAgICAqIGNvbXBsZXRlcywgQUUgd2lsbCB0cmFuc2l0aW9uIHRvIENPTlZFUkdFRCBvcgotICAgICAqIEZMQVNIX1JFUVVJUkVEIGFzIGFwcHJvcHJpYXRlCi0gICAgICogPC9wPgorICAgICAqIEZMQVNIX1JFUVVJUkVEIGFzIGFwcHJvcHJpYXRlPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FFX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRV9TVEFURV9QUkVDQVBUVVJFID0gNTsKQEAgLTEwNjMsNzEgKzk1NSw1NyBAQAogICAgIC8vCiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBRiBvZmYgb3IgaGFzIG5vdCB5ZXQgdHJpZWQgdG8gc2Nhbi9iZWVuIGFza2VkCisgICAgICogPHA+QUYgb2ZmIG9yIGhhcyBub3QgeWV0IHRyaWVkIHRvIHNjYW4vYmVlbiBhc2tlZAogICAgICAqIHRvIHNjYW4uICBXaGVuIGEgY2FtZXJhIGRldmljZSBpcyBvcGVuZWQsIGl0IHN0YXJ0cyBpbgotICAgICAqIHRoaXMgc3RhdGUuCi0gICAgICogPC9wPgorICAgICAqIHRoaXMgc3RhdGUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FGX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9TVEFURV9JTkFDVElWRSA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBDT05USU5VT1VTXyogbW9kZXMgYXJlIHN1cHBvcnRlZC4gQUYgaXMKKyAgICAgKiA8cD5pZiBDT05USU5VT1VTXyogbW9kZXMgYXJlIHN1cHBvcnRlZC4gQUYgaXMKICAgICAgKiBjdXJyZW50bHkgZG9pbmcgYW4gQUYgc2NhbiBpbml0aWF0ZWQgYnkgYSBjb250aW51b3VzCi0gICAgICogYXV0b2ZvY3VzIG1vZGUKLSAgICAgKiA8L3A+CisgICAgICogYXV0b2ZvY3VzIG1vZGU8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0NPTlRST0xfQUZfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1NUQVRFX1BBU1NJVkVfU0NBTiA9IDE7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBDT05USU5VT1VTXyogbW9kZXMgYXJlIHN1cHBvcnRlZC4gQUYgY3VycmVudGx5CisgICAgICogPHA+aWYgQ09OVElOVU9VU18qIG1vZGVzIGFyZSBzdXBwb3J0ZWQuIEFGIGN1cnJlbnRseQogICAgICAqIGJlbGlldmVzIGl0IGlzIGluIGZvY3VzLCBidXQgbWF5IHJlc3RhcnQgc2Nhbm5pbmcgYXQKLSAgICAgKiBhbnkgdGltZS4KLSAgICAgKiA8L3A+CisgICAgICogYW55IHRpbWUuPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FGX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9TVEFURV9QQVNTSVZFX0ZPQ1VTRUQgPSAyOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogaWYgQVVUTyBvciBNQUNSTyBtb2RlcyBhcmUgc3VwcG9ydGVkLiBBRiBpcyBkb2luZworICAgICAqIDxwPmlmIEFVVE8gb3IgTUFDUk8gbW9kZXMgYXJlIHN1cHBvcnRlZC4gQUYgaXMgZG9pbmcKICAgICAgKiBhbiBBRiBzY2FuIGJlY2F1c2UgaXQgd2FzIHRyaWdnZXJlZCBieSBBRgotICAgICAqIHRyaWdnZXIKLSAgICAgKiA8L3A+CisgICAgICogdHJpZ2dlcjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXN1bHQjQ09OVFJPTF9BRl9TVEFURQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQUZfU1RBVEVfQUNUSVZFX1NDQU4gPSAzOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogaWYgYW55IEFGIG1vZGUgYmVzaWRlcyBPRkYgaXMgc3VwcG9ydGVkLiBBRgorICAgICAqIDxwPmlmIGFueSBBRiBtb2RlIGJlc2lkZXMgT0ZGIGlzIHN1cHBvcnRlZC4gQUYKICAgICAgKiBiZWxpZXZlcyBpdCBpcyBmb2N1c2VkIGNvcnJlY3RseSBhbmQgaXMKLSAgICAgKiBsb2NrZWQKLSAgICAgKiA8L3A+CisgICAgICogbG9ja2VkPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FGX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9TVEFURV9GT0NVU0VEX0xPQ0tFRCA9IDQ7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBpZiBhbnkgQUYgbW9kZSBiZXNpZGVzIE9GRiBpcyBzdXBwb3J0ZWQuIEFGIGhhcworICAgICAqIDxwPmlmIGFueSBBRiBtb2RlIGJlc2lkZXMgT0ZGIGlzIHN1cHBvcnRlZC4gQUYgaGFzCiAgICAgICogZmFpbGVkIHRvIGZvY3VzIHN1Y2Nlc3NmdWxseSBhbmQgaXMKLSAgICAgKiBsb2NrZWQKLSAgICAgKiA8L3A+CisgICAgICogbG9ja2VkPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FGX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BRl9TVEFURV9OT1RfRk9DVVNFRF9MT0NLRUQgPSA1OwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogaWYgQ09OVElOVU9VU18qIG1vZGVzIGFyZSBzdXBwb3J0ZWQuIEFGIGZpbmlzaGVkIGEKKyAgICAgKiA8cD5pZiBDT05USU5VT1VTXyogbW9kZXMgYXJlIHN1cHBvcnRlZC4gQUYgZmluaXNoZWQgYQogICAgICAqIHBhc3NpdmUgc2NhbiB3aXRob3V0IGZpbmRpbmcgZm9jdXMsIGFuZCBtYXkgcmVzdGFydAotICAgICAqIHNjYW5uaW5nIGF0IGFueSB0aW1lLgotICAgICAqIDwvcD4KKyAgICAgKiBzY2FubmluZyBhdCBhbnkgdGltZS48L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0NPTlRST0xfQUZfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FGX1NUQVRFX1BBU1NJVkVfVU5GT0NVU0VEID0gNjsKQEAgLTExMzcsMzcgKzEwMTUsMjkgQEAKICAgICAvLwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQVdCIGlzIG5vdCBpbiBhdXRvIG1vZGUuICBXaGVuIGEgY2FtZXJhIGRldmljZSBpcyBvcGVuZWQsIGl0Ci0gICAgICogc3RhcnRzIGluIHRoaXMgc3RhdGUuCi0gICAgICogPC9wPgorICAgICAqIDxwPkFXQiBpcyBub3QgaW4gYXV0byBtb2RlLiAgV2hlbiBhIGNhbWVyYSBkZXZpY2UgaXMgb3BlbmVkLCBpdAorICAgICAqIHN0YXJ0cyBpbiB0aGlzIHN0YXRlLjwvcD4KICAgICAgKiBAc2VlIENhcHR1cmVSZXN1bHQjQ09OVFJPTF9BV0JfU1RBVEUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UUk9MX0FXQl9TVEFURV9JTkFDVElWRSA9IDA7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBV0IgZG9lc24ndCB5ZXQgaGF2ZSBhIGdvb2Qgc2V0IG9mIGNvbnRyb2wKLSAgICAgKiB2YWx1ZXMgZm9yIHRoZSBjdXJyZW50IHNjZW5lCi0gICAgICogPC9wPgorICAgICAqIDxwPkFXQiBkb2Vzbid0IHlldCBoYXZlIGEgZ29vZCBzZXQgb2YgY29udHJvbAorICAgICAqIHZhbHVlcyBmb3IgdGhlIGN1cnJlbnQgc2NlbmU8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0NPTlRST0xfQVdCX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfU1RBVEVfU0VBUkNISU5HID0gMTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEFXQiBoYXMgYSBnb29kIHNldCBvZiBjb250cm9sIHZhbHVlcyBmb3IgdGhlCi0gICAgICogY3VycmVudCBzY2VuZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5BV0IgaGFzIGEgZ29vZCBzZXQgb2YgY29udHJvbCB2YWx1ZXMgZm9yIHRoZQorICAgICAqIGN1cnJlbnQgc2NlbmU8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0NPTlRST0xfQVdCX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVFJPTF9BV0JfU1RBVEVfQ09OVkVSR0VEID0gMjsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEFFIGhhcyBiZWVuIGxvY2tlZCAoYWVNb2RlID0KLSAgICAgKiBMT0NLRUQpCi0gICAgICogPC9wPgorICAgICAqIDxwPkFFIGhhcyBiZWVuIGxvY2tlZCAoYWVNb2RlID0KKyAgICAgKiBMT0NLRUQpPC9wPgogICAgICAqIEBzZWUgQ2FwdHVyZVJlc3VsdCNDT05UUk9MX0FXQl9TVEFURQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRST0xfQVdCX1NUQVRFX0xPQ0tFRCA9IDM7CkBAIC0xMTc3LDM2ICsxMDQ3LDI4IEBACiAgICAgLy8KIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIE5vIGZsYXNoIG9uIGNhbWVyYQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5ObyBmbGFzaCBvbiBjYW1lcmE8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0ZMQVNIX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBU0hfU1RBVEVfVU5BVkFJTEFCTEUgPSAwOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogaWYgYW5kcm9pZC5mbGFzaC5hdmFpbGFibGUgaXMgdHJ1ZSBGbGFzaCBpcwotICAgICAqIGNoYXJnaW5nIGFuZCBjYW5ub3QgYmUgZmlyZWQKLSAgICAgKiA8L3A+CisgICAgICogPHA+aWYgYW5kcm9pZC5mbGFzaC5hdmFpbGFibGUgaXMgdHJ1ZSBGbGFzaCBpcworICAgICAqIGNoYXJnaW5nIGFuZCBjYW5ub3QgYmUgZmlyZWQ8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0ZMQVNIX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBU0hfU1RBVEVfQ0hBUkdJTkcgPSAxOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogaWYgYW5kcm9pZC5mbGFzaC5hdmFpbGFibGUgaXMgdHJ1ZSBGbGFzaCBpcwotICAgICAqIHJlYWR5IHRvIGZpcmUKLSAgICAgKiA8L3A+CisgICAgICogPHA+aWYgYW5kcm9pZC5mbGFzaC5hdmFpbGFibGUgaXMgdHJ1ZSBGbGFzaCBpcworICAgICAqIHJlYWR5IHRvIGZpcmU8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0ZMQVNIX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBU0hfU1RBVEVfUkVBRFkgPSAyOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogaWYgYW5kcm9pZC5mbGFzaC5hdmFpbGFibGUgaXMgdHJ1ZSBGbGFzaCBmaXJlZAotICAgICAqIGZvciB0aGlzIGNhcHR1cmUKLSAgICAgKiA8L3A+CisgICAgICogPHA+aWYgYW5kcm9pZC5mbGFzaC5hdmFpbGFibGUgaXMgdHJ1ZSBGbGFzaCBmaXJlZAorICAgICAqIGZvciB0aGlzIGNhcHR1cmU8L3A+CiAgICAgICogQHNlZSBDYXB0dXJlUmVzdWx0I0ZMQVNIX1NUQVRFCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBU0hfU1RBVEVfRklSRUQgPSAzOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlRmFpbHVyZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlRmFpbHVyZS5qYXZhCmluZGV4IDNiNDA4Y2YuLjM1ZjlhZjEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZUZhaWx1cmUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVGYWlsdXJlLmphdmEKQEAgLTE1LDggKzE1LDYgQEAKICAqLwogcGFja2FnZSBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTI7CiAKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlLkNhcHR1cmVMaXN0ZW5lcjsKLQogLyoqCiAgKiBBIHJlcG9ydCBvZiBmYWlsZWQgY2FwdHVyZSBmb3IgYSBzaW5nbGUgaW1hZ2UgY2FwdHVyZSBmcm9tIHRoZSBpbWFnZSBzZW5zb3IuCiAgKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdC5qYXZhCmluZGV4IDg5OGYxMjMuLjkzMDRjZDAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FwdHVyZVJlcXVlc3QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXF1ZXN0LmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyOwogCiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLmltcGwuQ2FtZXJhTWV0YWRhdGFOYXRpdmU7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZS5DYXB0dXJlTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwpAQCAtMzE5LDEwICszMTgsOCBAQAogICAgICAqfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+Ki8KIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZW4gYW5kcm9pZC5jb250cm9sLmF3Yk1vZGUgaXMgbm90IE9GRiwgVFJBTlNGT1JNX01BVFJJWAotICAgICAqIHNob3VsZCBiZSBpZ25vcmVkLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5XaGVuIGFuZHJvaWQuY29udHJvbC5hd2JNb2RlIGlzIG5vdCBPRkYsIFRSQU5TRk9STV9NQVRSSVgKKyAgICAgKiBzaG91bGQgYmUgaWdub3JlZC48L3A+CiAgICAgICogQHNlZSAjQ09MT1JfQ09SUkVDVElPTl9NT0RFX1RSQU5TRk9STV9NQVRSSVgKICAgICAgKiBAc2VlICNDT0xPUl9DT1JSRUNUSU9OX01PREVfRkFTVAogICAgICAqIEBzZWUgI0NPTE9SX0NPUlJFQ1RJT05fTU9ERV9ISUdIX1FVQUxJVFkKQEAgLTMzMSw1NSArMzI4LDQyIEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5tb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEEgY29sb3IgdHJhbnNmb3JtIG1hdHJpeCB0byB1c2UgdG8gdHJhbnNmb3JtCi0gICAgICogZnJvbSBzZW5zb3IgUkdCIGNvbG9yIHNwYWNlIHRvIG91dHB1dCBsaW5lYXIgc1JHQiBjb2xvciBzcGFjZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIG1hdHJpeCBpcyBlaXRoZXIgc2V0IGJ5IEhBTCB3aGVuIHRoZSByZXF1ZXN0CisgICAgICogPHA+QSBjb2xvciB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSB0byB0cmFuc2Zvcm0KKyAgICAgKiBmcm9tIHNlbnNvciBSR0IgY29sb3Igc3BhY2UgdG8gb3V0cHV0IGxpbmVhciBzUkdCIGNvbG9yIHNwYWNlPC9wPgorICAgICAqIDxwPlRoaXMgbWF0cml4IGlzIGVpdGhlciBzZXQgYnkgSEFMIHdoZW4gdGhlIHJlcXVlc3QKICAgICAgKiBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5tb2RlIGlzIG5vdCBUUkFOU0ZPUk1fTUFUUklYLCBvcgogICAgICAqIGRpcmVjdGx5IGJ5IHRoZSBhcHBsaWNhdGlvbiBpbiB0aGUgcmVxdWVzdCB3aGVuIHRoZQotICAgICAqIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLm1vZGUgaXMgVFJBTlNGT1JNX01BVFJJWC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgSEFMIG1heSByb3VuZCB0aGUgbWF0cml4IHRvIGFjY291bnQKKyAgICAgKiBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5tb2RlIGlzIFRSQU5TRk9STV9NQVRSSVguPC9wPgorICAgICAqIDxwPkluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIEhBTCBtYXkgcm91bmQgdGhlIG1hdHJpeCB0byBhY2NvdW50CiAgICAgICogZm9yIHByZWNpc2lvbiBpc3N1ZXM7IHRoZSBmaW5hbCByb3VuZGVkIG1hdHJpeCBzaG91bGQgYmUKLSAgICAgKiByZXBvcnRlZCBiYWNrIGluIHRoaXMgbWF0cml4IHJlc3VsdCBtZXRhZGF0YS4KLSAgICAgKiA8L3A+CisgICAgICogcmVwb3J0ZWQgYmFjayBpbiB0aGlzIG1hdHJpeCByZXN1bHQgbWV0YWRhdGEuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PFJhdGlvbmFsW10+IENPTE9SX0NPUlJFQ1RJT05fVFJBTlNGT1JNID0KICAgICAgICAgICAgIG5ldyBLZXk8UmF0aW9uYWxbXT4oImFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLnRyYW5zZm9ybSIsIFJhdGlvbmFsW10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogR2FpbnMgYXBwbHlpbmcgdG8gQmF5ZXIgY29sb3IgY2hhbm5lbHMgZm9yCi0gICAgICogd2hpdGUtYmFsYW5jZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgNC1jaGFubmVsIHdoaXRlLWJhbGFuY2UgZ2FpbnMgYXJlIGRlZmluZWQgaW4KKyAgICAgKiA8cD5HYWlucyBhcHBseWluZyB0byBCYXllciBjb2xvciBjaGFubmVscyBmb3IKKyAgICAgKiB3aGl0ZS1iYWxhbmNlPC9wPgorICAgICAqIDxwPlRoZSA0LWNoYW5uZWwgd2hpdGUtYmFsYW5jZSBnYWlucyBhcmUgZGVmaW5lZCBpbgogICAgICAqIHRoZSBvcmRlciBvZiBbUiBHX2V2ZW4gR19vZGQgQl0sIHdoZXJlIEdfZXZlbiBpcyB0aGUgZ2FpbgogICAgICAqIGZvciBncmVlbiBwaXhlbHMgb24gZXZlbiByb3dzIG9mIHRoZSBvdXRwdXQsIGFuZCBHX29kZAogICAgICAqIGlzIHRoZSBnYWluIGZvciBncmVlbnBpeGVscyBvbiB0aGUgb2RkIHJvd3MuIGlmIGEgSEFMCiAgICAgICogZG9lcyBub3Qgc3VwcG9ydCBhIHNlcGFyYXRlIGdhaW4gZm9yIGV2ZW4vb2RkIGdyZWVuIGNoYW5uZWxzLAogICAgICAqIGl0IHNob3VsZCB1c2UgdGhlIEdfZXZlbiB2YWx1ZSxhbmQgd3JpdGUgR19vZGQgZXF1YWwgdG8KLSAgICAgKiBHX2V2ZW4gaW4gdGhlIG91dHB1dCByZXN1bHQgbWV0YWRhdGEuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoaXMgYXJyYXkgaXMgZWl0aGVyIHNldCBieSBIQUwgd2hlbiB0aGUgcmVxdWVzdAorICAgICAqIEdfZXZlbiBpbiB0aGUgb3V0cHV0IHJlc3VsdCBtZXRhZGF0YS48L3A+CisgICAgICogPHA+VGhpcyBhcnJheSBpcyBlaXRoZXIgc2V0IGJ5IEhBTCB3aGVuIHRoZSByZXF1ZXN0CiAgICAgICogYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZSBpcyBub3QgVFJBTlNGT1JNX01BVFJJWCwgb3IKICAgICAgKiBkaXJlY3RseSBieSB0aGUgYXBwbGljYXRpb24gaW4gdGhlIHJlcXVlc3Qgd2hlbiB0aGUKLSAgICAgKiBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5tb2RlIGlzIFRSQU5TRk9STV9NQVRSSVguCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBvdXB1dCBzaG91bGQgYmUgdGhlIGdhaW5zIGFjdHVhbGx5IGFwcGxpZWQgYnkgdGhlIEhBTCB0bwotICAgICAqIHRoZSBjdXJyZW50IGZyYW1lLgotICAgICAqIDwvcD4KKyAgICAgKiBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5tb2RlIGlzIFRSQU5TRk9STV9NQVRSSVguPC9wPgorICAgICAqIDxwPlRoZSBvdXB1dCBzaG91bGQgYmUgdGhlIGdhaW5zIGFjdHVhbGx5IGFwcGxpZWQgYnkgdGhlIEhBTCB0bworICAgICAqIHRoZSBjdXJyZW50IGZyYW1lLjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxmbG9hdFtdPiBDT0xPUl9DT1JSRUNUSU9OX0dBSU5TID0KICAgICAgICAgICAgIG5ldyBLZXk8ZmxvYXRbXT4oImFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLmdhaW5zIiwgZmxvYXRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBFbnVtIGZvciBjb250cm9sbGluZwotICAgICAqIGFudGliYW5kaW5nCi0gICAgICogPC9wPgorICAgICAqIDxwPkVudW0gZm9yIGNvbnRyb2xsaW5nCisgICAgICogYW50aWJhbmRpbmc8L3A+CiAgICAgICogQHNlZSAjQ09OVFJPTF9BRV9BTlRJQkFORElOR19NT0RFX09GRgogICAgICAqIEBzZWUgI0NPTlRST0xfQUVfQU5USUJBTkRJTkdfTU9ERV81MEhaCiAgICAgICogQHNlZSAjQ09OVFJPTF9BRV9BTlRJQkFORElOR19NT0RFXzYwSFoKQEAgLTM4OSw0MiArMzczLDMwIEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wuYWVBbnRpYmFuZGluZ01vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQWRqdXN0bWVudCB0byBBRSB0YXJnZXQgaW1hZ2UKLSAgICAgKiBicmlnaHRuZXNzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIEZvciBleGFtcGxlLCBpZiBFViBzdGVwIGlzIDAuMzMzLCAnNicgd2lsbCBtZWFuIGFuCisgICAgICogPHA+QWRqdXN0bWVudCB0byBBRSB0YXJnZXQgaW1hZ2UKKyAgICAgKiBicmlnaHRuZXNzPC9wPgorICAgICAqIDxwPkZvciBleGFtcGxlLCBpZiBFViBzdGVwIGlzIDAuMzMzLCAnNicgd2lsbCBtZWFuIGFuCiAgICAgICogZXhwb3N1cmUgY29tcGVuc2F0aW9uIG9mICsyIEVWOyAtMyB3aWxsIG1lYW4gYW4gZXhwb3N1cmUKLSAgICAgKiBjb21wZW5zYXRpb24gb2YgLTEKLSAgICAgKiA8L3A+CisgICAgICogY29tcGVuc2F0aW9uIG9mIC0xPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEludGVnZXI+IENPTlRST0xfQUVfRVhQT1NVUkVfQ09NUEVOU0FUSU9OID0KICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5hZUV4cG9zdXJlQ29tcGVuc2F0aW9uIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZXRoZXIgQUUgaXMgY3VycmVudGx5IGxvY2tlZCB0byBpdHMgbGF0ZXN0Ci0gICAgICogY2FsY3VsYXRlZCB2YWx1ZXMKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogTm90ZSB0aGF0IGV2ZW4gd2hlbiBBRSBpcyBsb2NrZWQsIHRoZSBmbGFzaCBtYXkgYmUKKyAgICAgKiA8cD5XaGV0aGVyIEFFIGlzIGN1cnJlbnRseSBsb2NrZWQgdG8gaXRzIGxhdGVzdAorICAgICAqIGNhbGN1bGF0ZWQgdmFsdWVzPC9wPgorICAgICAqIDxwPk5vdGUgdGhhdCBldmVuIHdoZW4gQUUgaXMgbG9ja2VkLCB0aGUgZmxhc2ggbWF5IGJlCiAgICAgICogZmlyZWQgaWYgdGhlIEFFIG1vZGUgaXMgT05fQVVUT19GTEFTSCAvIE9OX0FMV0FZU19GTEFTSCAvCi0gICAgICogT05fQVVUT19GTEFTSF9SRURFWUUuCi0gICAgICogPC9wPgorICAgICAqIE9OX0FVVE9fRkxBU0hfUkVERVlFLjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxCb29sZWFuPiBDT05UUk9MX0FFX0xPQ0sgPQogICAgICAgICAgICAgbmV3IEtleTxCb29sZWFuPigiYW5kcm9pZC5jb250cm9sLmFlTG9jayIsIGJvb2xlYW4uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hldGhlciBBRSBpcyBjdXJyZW50bHkgdXBkYXRpbmcgdGhlIHNlbnNvcgotICAgICAqIGV4cG9zdXJlIGFuZCBzZW5zaXRpdml0eSBmaWVsZHMKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogT25seSBlZmZlY3RpdmUgaWYgYW5kcm9pZC5jb250cm9sLm1vZGUgPQotICAgICAqIEFVVE8KLSAgICAgKiA8L3A+CisgICAgICogPHA+V2hldGhlciBBRSBpcyBjdXJyZW50bHkgdXBkYXRpbmcgdGhlIHNlbnNvcgorICAgICAqIGV4cG9zdXJlIGFuZCBzZW5zaXRpdml0eSBmaWVsZHM8L3A+CisgICAgICogPHA+T25seSBlZmZlY3RpdmUgaWYgYW5kcm9pZC5jb250cm9sLm1vZGUgPQorICAgICAqIEFVVE88L3A+CiAgICAgICogQHNlZSAjQ09OVFJPTF9BRV9NT0RFX09GRgogICAgICAqIEBzZWUgI0NPTlRST0xfQUVfTU9ERV9PTgogICAgICAqIEBzZWUgI0NPTlRST0xfQUVfTU9ERV9PTl9BVVRPX0ZMQVNICkBAIC00MzUsNjAgKzQwNyw0NSBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5jb250cm9sLmFlTW9kZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBMaXN0IG9mIGFyZWFzIHRvIHVzZSBmb3IKLSAgICAgKiBtZXRlcmluZwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBFYWNoIGFyZWEgaXMgYSByZWN0YW5nbGUgcGx1cyB3ZWlnaHQ6IHhtaW4sIHltaW4sCisgICAgICogPHA+TGlzdCBvZiBhcmVhcyB0byB1c2UgZm9yCisgICAgICogbWV0ZXJpbmc8L3A+CisgICAgICogPHA+RWFjaCBhcmVhIGlzIGEgcmVjdGFuZ2xlIHBsdXMgd2VpZ2h0OiB4bWluLCB5bWluLAogICAgICAqIHhtYXgsIHltYXgsIHdlaWdodC4gVGhlIHJlY3RhbmdsZSBpcyBkZWZpbmVkIGluY2x1c2l2ZSBvZiB0aGUKLSAgICAgKiBzcGVjaWZpZWQgY29vcmRpbmF0ZXMuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBjb29yZGluYXRlIHN5c3RlbSBpcyBiYXNlZCBvbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LAorICAgICAqIHNwZWNpZmllZCBjb29yZGluYXRlcy48L3A+CisgICAgICogPHA+VGhlIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJhc2VkIG9uIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXksCiAgICAgICogd2l0aCAoMCwwKSBiZWluZyB0aGUgdG9wLWxlZnQgcGl4ZWwgaW4gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheSwgYW5kCiAgICAgICogKGFuZHJvaWQuc2Vuc29yLmluZm8uYWN0aXZlQXJyYXlTaXplLndpZHRoIC0gMSwKICAgICAgKiBhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZS5oZWlnaHQgLSAxKSBiZWluZyB0aGUKICAgICAgKiBib3R0b20tcmlnaHQgcGl4ZWwgaW4gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheS4gVGhlIHdlaWdodAotICAgICAqIHNob3VsZCBiZSBub25uZWdhdGl2ZS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSWYgYWxsIHJlZ2lvbnMgaGF2ZSAwIHdlaWdodCwgdGhlbiBubyBzcGVjaWZpYyBtZXRlcmluZyBhcmVhCisgICAgICogc2hvdWxkIGJlIG5vbm5lZ2F0aXZlLjwvcD4KKyAgICAgKiA8cD5JZiBhbGwgcmVnaW9ucyBoYXZlIDAgd2VpZ2h0LCB0aGVuIG5vIHNwZWNpZmljIG1ldGVyaW5nIGFyZWEKICAgICAgKiBuZWVkcyB0byBiZSB1c2VkIGJ5IHRoZSBIQUwuIElmIHRoZSBtZXRlcmluZyByZWdpb24gaXMKICAgICAgKiBvdXRzaWRlIHRoZSBjdXJyZW50IGFuZHJvaWQuc2NhbGVyLmNyb3BSZWdpb24sIHRoZSBIQUwKICAgICAgKiBzaG91bGQgaWdub3JlIHRoZSBzZWN0aW9ucyBvdXRzaWRlIHRoZSByZWdpb24gYW5kIG91dHB1dCB0aGUKLSAgICAgKiB1c2VkIHNlY3Rpb25zIGluIHRoZSBmcmFtZSBtZXRhZGF0YQotICAgICAqIDwvcD4KKyAgICAgKiB1c2VkIHNlY3Rpb25zIGluIHRoZSBmcmFtZSBtZXRhZGF0YTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxpbnRbXT4gQ09OVFJPTF9BRV9SRUdJT05TID0KICAgICAgICAgICAgIG5ldyBLZXk8aW50W10+KCJhbmRyb2lkLmNvbnRyb2wuYWVSZWdpb25zIiwgaW50W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogUmFuZ2Ugb3ZlciB3aGljaCBmcHMgY2FuIGJlIGFkanVzdGVkIHRvCi0gICAgICogbWFpbnRhaW4gZXhwb3N1cmUKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogT25seSBjb25zdHJhaW5zIEFFIGFsZ29yaXRobSwgbm90IG1hbnVhbCBjb250cm9sCi0gICAgICogb2YgYW5kcm9pZC5zZW5zb3IuZXhwb3N1cmVUaW1lCi0gICAgICogPC9wPgorICAgICAqIDxwPlJhbmdlIG92ZXIgd2hpY2ggZnBzIGNhbiBiZSBhZGp1c3RlZCB0bworICAgICAqIG1haW50YWluIGV4cG9zdXJlPC9wPgorICAgICAqIDxwPk9ubHkgY29uc3RyYWlucyBBRSBhbGdvcml0aG0sIG5vdCBtYW51YWwgY29udHJvbAorICAgICAqIG9mIGFuZHJvaWQuc2Vuc29yLmV4cG9zdXJlVGltZTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxpbnRbXT4gQ09OVFJPTF9BRV9UQVJHRVRfRlBTX1JBTkdFID0KICAgICAgICAgICAgIG5ldyBLZXk8aW50W10+KCJhbmRyb2lkLmNvbnRyb2wuYWVUYXJnZXRGcHNSYW5nZSIsIGludFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZXRoZXIgdGhlIEhBTCBtdXN0IHRyaWdnZXIgcHJlY2FwdHVyZQotICAgICAqIG1ldGVyaW5nLgotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGVudHJ5IGlzIG5vcm1hbGx5IHNldCB0byBJRExFLCBvciBpcyBub3QKKyAgICAgKiA8cD5XaGV0aGVyIHRoZSBIQUwgbXVzdCB0cmlnZ2VyIHByZWNhcHR1cmUKKyAgICAgKiBtZXRlcmluZy48L3A+CisgICAgICogPHA+VGhpcyBlbnRyeSBpcyBub3JtYWxseSBzZXQgdG8gSURMRSwgb3IgaXMgbm90CiAgICAgICogaW5jbHVkZWQgYXQgYWxsIGluIHRoZSByZXF1ZXN0IHNldHRpbmdzLiBXaGVuIGluY2x1ZGVkIGFuZAogICAgICAqIHNldCB0byBTVEFSVCwgdGhlIEhBTCBtdXN0IHRyaWdnZXIgdGhlIGF1dG9leHBvc3VyZQotICAgICAqIHByZWNhcHR1cmUgbWV0ZXJpbmcgc2VxdWVuY2UuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBlZmZlY3Qgb2YgQUUgcHJlY2FwdHVyZSB0cmlnZ2VyIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQKKyAgICAgKiBwcmVjYXB0dXJlIG1ldGVyaW5nIHNlcXVlbmNlLjwvcD4KKyAgICAgKiA8cD5UaGUgZWZmZWN0IG9mIEFFIHByZWNhcHR1cmUgdHJpZ2dlciBkZXBlbmRzIG9uIHRoZSBjdXJyZW50CiAgICAgICogQUUgbW9kZSBhbmQgc3RhdGU7IHNlZSB0aGUgY2FtZXJhIEhBTCBkZXZpY2UgdjMgaGVhZGVyIGZvcgotICAgICAqIGRldGFpbHMuCi0gICAgICogPC9wPgorICAgICAqIGRldGFpbHMuPC9wPgogICAgICAqIEBzZWUgI0NPTlRST0xfQUVfUFJFQ0FQVFVSRV9UUklHR0VSX0lETEUKICAgICAgKiBAc2VlICNDT05UUk9MX0FFX1BSRUNBUFRVUkVfVFJJR0dFUl9TVEFSVAogICAgICAqLwpAQCAtNDk2LDEwICs0NTMsOCBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5jb250cm9sLmFlUHJlY2FwdHVyZVRyaWdnZXIiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hldGhlciBBRiBpcyBjdXJyZW50bHkgZW5hYmxlZCwgYW5kIHdoYXQKLSAgICAgKiBtb2RlIGl0IGlzIHNldCB0bwotICAgICAqIDwvcD4KKyAgICAgKiA8cD5XaGV0aGVyIEFGIGlzIGN1cnJlbnRseSBlbmFibGVkLCBhbmQgd2hhdAorICAgICAqIG1vZGUgaXQgaXMgc2V0IHRvPC9wPgogICAgICAqIEBzZWUgI0NPTlRST0xfQUZfTU9ERV9PRkYKICAgICAgKiBAc2VlICNDT05UUk9MX0FGX01PREVfQVVUTwogICAgICAqIEBzZWUgI0NPTlRST0xfQUZfTU9ERV9NQUNSTwpAQCAtNTExLDQ2ICs0NjYsMzUgQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5hZk1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGlzdCBvZiBhcmVhcyB0byB1c2UgZm9yIGZvY3VzCi0gICAgICogZXN0aW1hdGlvbgotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBFYWNoIGFyZWEgaXMgYSByZWN0YW5nbGUgcGx1cyB3ZWlnaHQ6IHhtaW4sIHltaW4sCisgICAgICogPHA+TGlzdCBvZiBhcmVhcyB0byB1c2UgZm9yIGZvY3VzCisgICAgICogZXN0aW1hdGlvbjwvcD4KKyAgICAgKiA8cD5FYWNoIGFyZWEgaXMgYSByZWN0YW5nbGUgcGx1cyB3ZWlnaHQ6IHhtaW4sIHltaW4sCiAgICAgICogeG1heCwgeW1heCwgd2VpZ2h0LiBUaGUgcmVjdGFuZ2xlIGlzIGRlZmluZWQgaW5jbHVzaXZlIG9mIHRoZQotICAgICAqIHNwZWNpZmllZCBjb29yZGluYXRlcy4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJhc2VkIG9uIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXksCisgICAgICogc3BlY2lmaWVkIGNvb3JkaW5hdGVzLjwvcD4KKyAgICAgKiA8cD5UaGUgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgYmFzZWQgb24gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheSwKICAgICAgKiB3aXRoICgwLDApIGJlaW5nIHRoZSB0b3AtbGVmdCBwaXhlbCBpbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LCBhbmQKICAgICAgKiAoYW5kcm9pZC5zZW5zb3IuaW5mby5hY3RpdmVBcnJheVNpemUud2lkdGggLSAxLAogICAgICAqIGFuZHJvaWQuc2Vuc29yLmluZm8uYWN0aXZlQXJyYXlTaXplLmhlaWdodCAtIDEpIGJlaW5nIHRoZQogICAgICAqIGJvdHRvbS1yaWdodCBwaXhlbCBpbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LiBUaGUgd2VpZ2h0Ci0gICAgICogc2hvdWxkIGJlIG5vbm5lZ2F0aXZlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiBhbGwgcmVnaW9ucyBoYXZlIDAgd2VpZ2h0LCB0aGVuIG5vIHNwZWNpZmljIGZvY3VzIGFyZWEKKyAgICAgKiBzaG91bGQgYmUgbm9ubmVnYXRpdmUuPC9wPgorICAgICAqIDxwPklmIGFsbCByZWdpb25zIGhhdmUgMCB3ZWlnaHQsIHRoZW4gbm8gc3BlY2lmaWMgZm9jdXMgYXJlYQogICAgICAqIG5lZWRzIHRvIGJlIHVzZWQgYnkgdGhlIEhBTC4gSWYgdGhlIGZvY3VzaW5nIHJlZ2lvbiBpcwogICAgICAqIG91dHNpZGUgdGhlIGN1cnJlbnQgYW5kcm9pZC5zY2FsZXIuY3JvcFJlZ2lvbiwgdGhlIEhBTAogICAgICAqIHNob3VsZCBpZ25vcmUgdGhlIHNlY3Rpb25zIG91dHNpZGUgdGhlIHJlZ2lvbiBhbmQgb3V0cHV0IHRoZQotICAgICAqIHVzZWQgc2VjdGlvbnMgaW4gdGhlIGZyYW1lIG1ldGFkYXRhCi0gICAgICogPC9wPgorICAgICAqIHVzZWQgc2VjdGlvbnMgaW4gdGhlIGZyYW1lIG1ldGFkYXRhPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGludFtdPiBDT05UUk9MX0FGX1JFR0lPTlMgPQogICAgICAgICAgICAgbmV3IEtleTxpbnRbXT4oImFuZHJvaWQuY29udHJvbC5hZlJlZ2lvbnMiLCBpbnRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIHRoZSBIQUwgbXVzdCB0cmlnZ2VyIGF1dG9mb2N1cy4KLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogVGhpcyBlbnRyeSBpcyBub3JtYWxseSBzZXQgdG8gSURMRSwgb3IgaXMgbm90Ci0gICAgICogaW5jbHVkZWQgYXQgYWxsIGluIHRoZSByZXF1ZXN0IHNldHRpbmdzLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBXaGVuIGluY2x1ZGVkIGFuZCBzZXQgdG8gU1RBUlQsIHRoZSBIQUwgbXVzdCB0cmlnZ2VyIHRoZQorICAgICAqIDxwPldoZXRoZXIgdGhlIEhBTCBtdXN0IHRyaWdnZXIgYXV0b2ZvY3VzLjwvcD4KKyAgICAgKiA8cD5UaGlzIGVudHJ5IGlzIG5vcm1hbGx5IHNldCB0byBJRExFLCBvciBpcyBub3QKKyAgICAgKiBpbmNsdWRlZCBhdCBhbGwgaW4gdGhlIHJlcXVlc3Qgc2V0dGluZ3MuPC9wPgorICAgICAqIDxwPldoZW4gaW5jbHVkZWQgYW5kIHNldCB0byBTVEFSVCwgdGhlIEhBTCBtdXN0IHRyaWdnZXIgdGhlCiAgICAgICogYXV0b2ZvY3VzIGFsZ29yaXRobS4gVGhlIGVmZmVjdCBvZiBBRiB0cmlnZ2VyIGRlcGVuZHMgb24gdGhlCiAgICAgICogY3VycmVudCBBRiBtb2RlIGFuZCBzdGF0ZTsgc2VlIHRoZSBjYW1lcmEgSEFMIGRldmljZSB2MwogICAgICAqIGhlYWRlciBmb3IgZGV0YWlscy4gV2hlbiBzZXQgdG8gQ0FOQ0VMLCB0aGUgSEFMIG11c3QgY2FuY2VsCi0gICAgICogYW55IGFjdGl2ZSB0cmlnZ2VyLCBhbmQgcmV0dXJuIHRvIGluaXRpYWwgQUYgc3RhdGUuCi0gICAgICogPC9wPgorICAgICAqIGFueSBhY3RpdmUgdHJpZ2dlciwgYW5kIHJldHVybiB0byBpbml0aWFsIEFGIHN0YXRlLjwvcD4KICAgICAgKiBAc2VlICNDT05UUk9MX0FGX1RSSUdHRVJfSURMRQogICAgICAqIEBzZWUgI0NPTlRST0xfQUZfVFJJR0dFUl9TVEFSVAogICAgICAqIEBzZWUgI0NPTlRST0xfQUZfVFJJR0dFUl9DQU5DRUwKQEAgLTU1OSwyOCArNTAzLDIwIEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wuYWZUcmlnZ2VyIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZXRoZXIgQVdCIGlzIGN1cnJlbnRseSBsb2NrZWQgdG8gaXRzCi0gICAgICogbGF0ZXN0IGNhbGN1bGF0ZWQgdmFsdWVzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE5vdGUgdGhhdCBBV0IgbG9jayBpcyBvbmx5IG1lYW5pbmdmdWwgZm9yIEFVVE8KKyAgICAgKiA8cD5XaGV0aGVyIEFXQiBpcyBjdXJyZW50bHkgbG9ja2VkIHRvIGl0cworICAgICAqIGxhdGVzdCBjYWxjdWxhdGVkIHZhbHVlczwvcD4KKyAgICAgKiA8cD5Ob3RlIHRoYXQgQVdCIGxvY2sgaXMgb25seSBtZWFuaW5nZnVsIGZvciBBVVRPCiAgICAgICogbW9kZTsgaW4gb3RoZXIgbW9kZXMsIEFXQiBpcyBhbHJlYWR5IGZpeGVkIHRvIGEgc3BlY2lmaWMKLSAgICAgKiBzZXR0aW5nCi0gICAgICogPC9wPgorICAgICAqIHNldHRpbmc8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Qm9vbGVhbj4gQ09OVFJPTF9BV0JfTE9DSyA9CiAgICAgICAgICAgICBuZXcgS2V5PEJvb2xlYW4+KCJhbmRyb2lkLmNvbnRyb2wuYXdiTG9jayIsIGJvb2xlYW4uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hldGhlciBBV0IgaXMgY3VycmVudGx5IHNldHRpbmcgdGhlIGNvbG9yCisgICAgICogPHA+V2hldGhlciBBV0IgaXMgY3VycmVudGx5IHNldHRpbmcgdGhlIGNvbG9yCiAgICAgICogdHJhbnNmb3JtIGZpZWxkcywgYW5kIHdoYXQgaXRzIGlsbHVtaW5hdGlvbiB0YXJnZXQKLSAgICAgKiBpcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBbQkMgLSBBV0IgbG9jayxBV0IgbW9kZXNdCi0gICAgICogPC9wPgorICAgICAqIGlzPC9wPgorICAgICAqIDxwPltCQyAtIEFXQiBsb2NrLEFXQiBtb2Rlc108L3A+CiAgICAgICogQHNlZSAjQ09OVFJPTF9BV0JfTU9ERV9PRkYKICAgICAgKiBAc2VlICNDT05UUk9MX0FXQl9NT0RFX0FVVE8KICAgICAgKiBAc2VlICNDT05UUk9MX0FXQl9NT0RFX0lOQ0FOREVTQ0VOVApAQCAtNTk1LDQzICs1MzEsMzIgQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5hd2JNb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExpc3Qgb2YgYXJlYXMgdG8gdXNlIGZvciBpbGx1bWluYW50Ci0gICAgICogZXN0aW1hdGlvbgotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBPbmx5IHVzZWQgaW4gQVVUTyBtb2RlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBFYWNoIGFyZWEgaXMgYSByZWN0YW5nbGUgcGx1cyB3ZWlnaHQ6IHhtaW4sIHltaW4sCisgICAgICogPHA+TGlzdCBvZiBhcmVhcyB0byB1c2UgZm9yIGlsbHVtaW5hbnQKKyAgICAgKiBlc3RpbWF0aW9uPC9wPgorICAgICAqIDxwPk9ubHkgdXNlZCBpbiBBVVRPIG1vZGUuPC9wPgorICAgICAqIDxwPkVhY2ggYXJlYSBpcyBhIHJlY3RhbmdsZSBwbHVzIHdlaWdodDogeG1pbiwgeW1pbiwKICAgICAgKiB4bWF4LCB5bWF4LCB3ZWlnaHQuIFRoZSByZWN0YW5nbGUgaXMgZGVmaW5lZCBpbmNsdXNpdmUgb2YgdGhlCi0gICAgICogc3BlY2lmaWVkIGNvb3JkaW5hdGVzLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgYmFzZWQgb24gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheSwKKyAgICAgKiBzcGVjaWZpZWQgY29vcmRpbmF0ZXMuPC9wPgorICAgICAqIDxwPlRoZSBjb29yZGluYXRlIHN5c3RlbSBpcyBiYXNlZCBvbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LAogICAgICAqIHdpdGggKDAsMCkgYmVpbmcgdGhlIHRvcC1sZWZ0IHBpeGVsIGluIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXksIGFuZAogICAgICAqIChhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZS53aWR0aCAtIDEsCiAgICAgICogYW5kcm9pZC5zZW5zb3IuaW5mby5hY3RpdmVBcnJheVNpemUuaGVpZ2h0IC0gMSkgYmVpbmcgdGhlCiAgICAgICogYm90dG9tLXJpZ2h0IHBpeGVsIGluIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXkuIFRoZSB3ZWlnaHQKLSAgICAgKiBzaG91bGQgYmUgbm9ubmVnYXRpdmUuCi0gICAgICogPC9wPjxwPgotICAgICAqIElmIGFsbCByZWdpb25zIGhhdmUgMCB3ZWlnaHQsIHRoZW4gbm8gc3BlY2lmaWMgbWV0ZXJpbmcgYXJlYQorICAgICAqIHNob3VsZCBiZSBub25uZWdhdGl2ZS48L3A+CisgICAgICogPHA+SWYgYWxsIHJlZ2lvbnMgaGF2ZSAwIHdlaWdodCwgdGhlbiBubyBzcGVjaWZpYyBtZXRlcmluZyBhcmVhCiAgICAgICogbmVlZHMgdG8gYmUgdXNlZCBieSB0aGUgSEFMLiBJZiB0aGUgbWV0ZXJpbmcgcmVnaW9uIGlzCiAgICAgICogb3V0c2lkZSB0aGUgY3VycmVudCBhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9uLCB0aGUgSEFMCiAgICAgICogc2hvdWxkIGlnbm9yZSB0aGUgc2VjdGlvbnMgb3V0c2lkZSB0aGUgcmVnaW9uIGFuZCBvdXRwdXQgdGhlCi0gICAgICogdXNlZCBzZWN0aW9ucyBpbiB0aGUgZnJhbWUgbWV0YWRhdGEKLSAgICAgKiA8L3A+CisgICAgICogdXNlZCBzZWN0aW9ucyBpbiB0aGUgZnJhbWUgbWV0YWRhdGE8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8aW50W10+IENPTlRST0xfQVdCX1JFR0lPTlMgPQogICAgICAgICAgICAgbmV3IEtleTxpbnRbXT4oImFuZHJvaWQuY29udHJvbC5hd2JSZWdpb25zIiwgaW50W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogSW5mb3JtYXRpb24gdG8gM0Egcm91dGluZXMgYWJvdXQgdGhlIHB1cnBvc2UKKyAgICAgKiA8cD5JbmZvcm1hdGlvbiB0byAzQSByb3V0aW5lcyBhYm91dCB0aGUgcHVycG9zZQogICAgICAqIG9mIHRoaXMgY2FwdHVyZSwgdG8gaGVscCBkZWNpZGUgb3B0aW1hbCAzQQotICAgICAqIHN0cmF0ZWd5Ci0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE9ubHkgdXNlZCBpZiBhbmRyb2lkLmNvbnRyb2wubW9kZSAhPSBPRkYuCi0gICAgICogPC9wPgorICAgICAqIHN0cmF0ZWd5PC9wPgorICAgICAqIDxwPk9ubHkgdXNlZCBpZiBhbmRyb2lkLmNvbnRyb2wubW9kZSAhPSBPRkYuPC9wPgogICAgICAqIEBzZWUgI0NPTlRST0xfQ0FQVFVSRV9JTlRFTlRfQ1VTVE9NCiAgICAgICogQHNlZSAjQ09OVFJPTF9DQVBUVVJFX0lOVEVOVF9QUkVWSUVXCiAgICAgICogQHNlZSAjQ09OVFJPTF9DQVBUVVJFX0lOVEVOVF9TVElMTF9DQVBUVVJFCkBAIC02NDMsMTAgKzU2OCw4IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wuY2FwdHVyZUludGVudCIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIGFueSBzcGVjaWFsIGNvbG9yIGVmZmVjdCBpcyBpbiB1c2UuCi0gICAgICogT25seSB1c2VkIGlmIGFuZHJvaWQuY29udHJvbC5tb2RlICE9IE9GRgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5XaGV0aGVyIGFueSBzcGVjaWFsIGNvbG9yIGVmZmVjdCBpcyBpbiB1c2UuCisgICAgICogT25seSB1c2VkIGlmIGFuZHJvaWQuY29udHJvbC5tb2RlICE9IE9GRjwvcD4KICAgICAgKiBAc2VlICNDT05UUk9MX0VGRkVDVF9NT0RFX09GRgogICAgICAqIEBzZWUgI0NPTlRST0xfRUZGRUNUX01PREVfTU9OTwogICAgICAqIEBzZWUgI0NPTlRST0xfRUZGRUNUX01PREVfTkVHQVRJVkUKQEAgLTY2MSwxMCArNTg0LDggQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5lZmZlY3RNb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIE92ZXJhbGwgbW9kZSBvZiAzQSBjb250cm9sCi0gICAgICogcm91dGluZXMKLSAgICAgKiA8L3A+CisgICAgICogPHA+T3ZlcmFsbCBtb2RlIG9mIDNBIGNvbnRyb2wKKyAgICAgKiByb3V0aW5lczwvcD4KICAgICAgKiBAc2VlICNDT05UUk9MX01PREVfT0ZGCiAgICAgICogQHNlZSAjQ09OVFJPTF9NT0RFX0FVVE8KICAgICAgKiBAc2VlICNDT05UUk9MX01PREVfVVNFX1NDRU5FX01PREUKQEAgLTY3MywxMCArNTk0LDggQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5tb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoaWNoIHNjZW5lIG1vZGUgaXMgYWN0aXZlIHdoZW4KLSAgICAgKiBhbmRyb2lkLmNvbnRyb2wubW9kZSA9IFNDRU5FX01PREUKLSAgICAgKiA8L3A+CisgICAgICogPHA+V2hpY2ggc2NlbmUgbW9kZSBpcyBhY3RpdmUgd2hlbgorICAgICAqIGFuZHJvaWQuY29udHJvbC5tb2RlID0gU0NFTkVfTU9ERTwvcD4KICAgICAgKiBAc2VlICNDT05UUk9MX1NDRU5FX01PREVfVU5TVVBQT1JURUQKICAgICAgKiBAc2VlICNDT05UUk9MX1NDRU5FX01PREVfRkFDRV9QUklPUklUWQogICAgICAqIEBzZWUgI0NPTlRST0xfU0NFTkVfTU9ERV9BQ1RJT04KQEAgLTY5OSwyNCArNjE4LDE4IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wuc2NlbmVNb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZXRoZXIgdmlkZW8gc3RhYmlsaXphdGlvbiBpcwotICAgICAqIGFjdGl2ZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBJZiBlbmFibGVkLCB2aWRlbyBzdGFiaWxpemF0aW9uIGNhbiBtb2RpZnkgdGhlCisgICAgICogPHA+V2hldGhlciB2aWRlbyBzdGFiaWxpemF0aW9uIGlzCisgICAgICogYWN0aXZlPC9wPgorICAgICAqIDxwPklmIGVuYWJsZWQsIHZpZGVvIHN0YWJpbGl6YXRpb24gY2FuIG1vZGlmeSB0aGUKICAgICAgKiBhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9uIHRvIGtlZXAgdGhlIHZpZGVvIHN0cmVhbQotICAgICAqIHN0YWJpbGl6ZWQKLSAgICAgKiA8L3A+CisgICAgICogc3RhYmlsaXplZDwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxCb29sZWFuPiBDT05UUk9MX1ZJREVPX1NUQUJJTElaQVRJT05fTU9ERSA9CiAgICAgICAgICAgICBuZXcgS2V5PEJvb2xlYW4+KCJhbmRyb2lkLmNvbnRyb2wudmlkZW9TdGFiaWxpemF0aW9uTW9kZSIsIGJvb2xlYW4uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogT3BlcmF0aW9uIG1vZGUgZm9yIGVkZ2UKLSAgICAgKiBlbmhhbmNlbWVudAotICAgICAqIDwvcD4KKyAgICAgKiA8cD5PcGVyYXRpb24gbW9kZSBmb3IgZWRnZQorICAgICAqIGVuaGFuY2VtZW50PC9wPgogICAgICAqIEBzZWUgI0VER0VfTU9ERV9PRkYKICAgICAgKiBAc2VlICNFREdFX01PREVfRkFTVAogICAgICAqIEBzZWUgI0VER0VfTU9ERV9ISUdIX1FVQUxJVFkKQEAgLTcyNSw5ICs2MzgsNyBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5lZGdlLm1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogU2VsZWN0IGZsYXNoIG9wZXJhdGlvbiBtb2RlCi0gICAgICogPC9wPgorICAgICAqIDxwPlNlbGVjdCBmbGFzaCBvcGVyYXRpb24gbW9kZTwvcD4KICAgICAgKiBAc2VlICNGTEFTSF9NT0RFX09GRgogICAgICAqIEBzZWUgI0ZMQVNIX01PREVfU0lOR0xFCiAgICAgICogQHNlZSAjRkxBU0hfTU9ERV9UT1JDSApAQCAtNzM2LDEyOCArNjQ3LDkyIEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmZsYXNoLm1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogR1BTIGNvb3JkaW5hdGVzIHRvIGluY2x1ZGUgaW4gb3V0cHV0IEpQRUcKLSAgICAgKiBFWElGCi0gICAgICogPC9wPgorICAgICAqIDxwPkdQUyBjb29yZGluYXRlcyB0byBpbmNsdWRlIGluIG91dHB1dCBKUEVHCisgICAgICogRVhJRjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxkb3VibGVbXT4gSlBFR19HUFNfQ09PUkRJTkFURVMgPQogICAgICAgICAgICAgbmV3IEtleTxkb3VibGVbXT4oImFuZHJvaWQuanBlZy5ncHNDb29yZGluYXRlcyIsIGRvdWJsZVtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIDMyIGNoYXJhY3RlcnMgZGVzY3JpYmluZyBHUFMgYWxnb3JpdGhtIHRvCi0gICAgICogaW5jbHVkZSBpbiBFWElGCi0gICAgICogPC9wPgorICAgICAqIDxwPjMyIGNoYXJhY3RlcnMgZGVzY3JpYmluZyBHUFMgYWxnb3JpdGhtIHRvCisgICAgICogaW5jbHVkZSBpbiBFWElGPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PFN0cmluZz4gSlBFR19HUFNfUFJPQ0VTU0lOR19NRVRIT0QgPQogICAgICAgICAgICAgbmV3IEtleTxTdHJpbmc+KCJhbmRyb2lkLmpwZWcuZ3BzUHJvY2Vzc2luZ01ldGhvZCIsIFN0cmluZy5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaW1lIEdQUyBmaXggd2FzIG1hZGUgdG8gaW5jbHVkZSBpbgotICAgICAqIEVYSUYKLSAgICAgKiA8L3A+CisgICAgICogPHA+VGltZSBHUFMgZml4IHdhcyBtYWRlIHRvIGluY2x1ZGUgaW4KKyAgICAgKiBFWElGPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PExvbmc+IEpQRUdfR1BTX1RJTUVTVEFNUCA9CiAgICAgICAgICAgICBuZXcgS2V5PExvbmc+KCJhbmRyb2lkLmpwZWcuZ3BzVGltZXN0YW1wIiwgbG9uZy5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBPcmllbnRhdGlvbiBvZiBKUEVHIGltYWdlIHRvCi0gICAgICogd3JpdGUKLSAgICAgKiA8L3A+CisgICAgICogPHA+T3JpZW50YXRpb24gb2YgSlBFRyBpbWFnZSB0bworICAgICAqIHdyaXRlPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEludGVnZXI+IEpQRUdfT1JJRU5UQVRJT04gPQogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5qcGVnLm9yaWVudGF0aW9uIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIENvbXByZXNzaW9uIHF1YWxpdHkgb2YgdGhlIGZpbmFsIEpQRUcKLSAgICAgKiBpbWFnZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiA4NS05NSBpcyB0eXBpY2FsIHVzYWdlIHJhbmdlCi0gICAgICogPC9wPgorICAgICAqIDxwPkNvbXByZXNzaW9uIHF1YWxpdHkgb2YgdGhlIGZpbmFsIEpQRUcKKyAgICAgKiBpbWFnZTwvcD4KKyAgICAgKiA8cD44NS05NSBpcyB0eXBpY2FsIHVzYWdlIHJhbmdlPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEJ5dGU+IEpQRUdfUVVBTElUWSA9CiAgICAgICAgICAgICBuZXcgS2V5PEJ5dGU+KCJhbmRyb2lkLmpwZWcucXVhbGl0eSIsIGJ5dGUuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQ29tcHJlc3Npb24gcXVhbGl0eSBvZiBKUEVHCi0gICAgICogdGh1bWJuYWlsCi0gICAgICogPC9wPgorICAgICAqIDxwPkNvbXByZXNzaW9uIHF1YWxpdHkgb2YgSlBFRworICAgICAqIHRodW1ibmFpbDwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxCeXRlPiBKUEVHX1RIVU1CTkFJTF9RVUFMSVRZID0KICAgICAgICAgICAgIG5ldyBLZXk8Qnl0ZT4oImFuZHJvaWQuanBlZy50aHVtYm5haWxRdWFsaXR5IiwgYnl0ZS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBSZXNvbHV0aW9uIG9mIGVtYmVkZGVkIEpQRUcKLSAgICAgKiB0aHVtYm5haWwKLSAgICAgKiA8L3A+CisgICAgICogPHA+UmVzb2x1dGlvbiBvZiBlbWJlZGRlZCBKUEVHCisgICAgICogdGh1bWJuYWlsPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5TaXplPiBKUEVHX1RIVU1CTkFJTF9TSVpFID0KICAgICAgICAgICAgIG5ldyBLZXk8YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemU+KCJhbmRyb2lkLmpwZWcudGh1bWJuYWlsU2l6ZSIsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5TaXplLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFNpemUgb2YgdGhlIGxlbnMgYXBlcnR1cmUKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogV2lsbCBub3QgYmUgc3VwcG9ydGVkIG9uIG1vc3QgZGV2aWNlcy4gQ2FuIG9ubHkKLSAgICAgKiBwaWNrIGZyb20gc3VwcG9ydGVkIGxpc3QKLSAgICAgKiA8L3A+CisgICAgICogPHA+U2l6ZSBvZiB0aGUgbGVucyBhcGVydHVyZTwvcD4KKyAgICAgKiA8cD5XaWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gbW9zdCBkZXZpY2VzLiBDYW4gb25seQorICAgICAqIHBpY2sgZnJvbSBzdXBwb3J0ZWQgbGlzdDwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxGbG9hdD4gTEVOU19BUEVSVFVSRSA9CiAgICAgICAgICAgICBuZXcgS2V5PEZsb2F0PigiYW5kcm9pZC5sZW5zLmFwZXJ0dXJlIiwgZmxvYXQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogU3RhdGUgb2YgbGVucyBuZXV0cmFsIGRlbnNpdHkKLSAgICAgKiBmaWx0ZXIocykKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogV2lsbCBub3QgYmUgc3VwcG9ydGVkIG9uIG1vc3QgZGV2aWNlcy4gQ2FuIG9ubHkKLSAgICAgKiBwaWNrIGZyb20gc3VwcG9ydGVkIGxpc3QKLSAgICAgKiA8L3A+CisgICAgICogPHA+U3RhdGUgb2YgbGVucyBuZXV0cmFsIGRlbnNpdHkKKyAgICAgKiBmaWx0ZXIocyk8L3A+CisgICAgICogPHA+V2lsbCBub3QgYmUgc3VwcG9ydGVkIG9uIG1vc3QgZGV2aWNlcy4gQ2FuIG9ubHkKKyAgICAgKiBwaWNrIGZyb20gc3VwcG9ydGVkIGxpc3Q8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8RmxvYXQ+IExFTlNfRklMVEVSX0RFTlNJVFkgPQogICAgICAgICAgICAgbmV3IEtleTxGbG9hdD4oImFuZHJvaWQubGVucy5maWx0ZXJEZW5zaXR5IiwgZmxvYXQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGVucyBvcHRpY2FsIHpvb20gc2V0dGluZwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gbW9zdCBkZXZpY2VzLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MZW5zIG9wdGljYWwgem9vbSBzZXR0aW5nPC9wPgorICAgICAqIDxwPldpbGwgbm90IGJlIHN1cHBvcnRlZCBvbiBtb3N0IGRldmljZXMuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEZsb2F0PiBMRU5TX0ZPQ0FMX0xFTkdUSCA9CiAgICAgICAgICAgICBuZXcgS2V5PEZsb2F0PigiYW5kcm9pZC5sZW5zLmZvY2FsTGVuZ3RoIiwgZmxvYXQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRGlzdGFuY2UgdG8gcGxhbmUgb2Ygc2hhcnBlc3QgZm9jdXMsCi0gICAgICogbWVhc3VyZWQgZnJvbSBmcm9udG1vc3Qgc3VyZmFjZSBvZiB0aGUgbGVucwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiAwID0gaW5maW5pdHkgZm9jdXMuIFVzZWQgdmFsdWUgc2hvdWxkIGJlIGNsYW1wZWQKLSAgICAgKiB0byAoMCxtaW5pbXVtIGZvY3VzIGRpc3RhbmNlKQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5EaXN0YW5jZSB0byBwbGFuZSBvZiBzaGFycGVzdCBmb2N1cywKKyAgICAgKiBtZWFzdXJlZCBmcm9tIGZyb250bW9zdCBzdXJmYWNlIG9mIHRoZSBsZW5zPC9wPgorICAgICAqIDxwPjAgPSBpbmZpbml0eSBmb2N1cy4gVXNlZCB2YWx1ZSBzaG91bGQgYmUgY2xhbXBlZAorICAgICAqIHRvICgwLG1pbmltdW0gZm9jdXMgZGlzdGFuY2UpPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEZsb2F0PiBMRU5TX0ZPQ1VTX0RJU1RBTkNFID0KICAgICAgICAgICAgIG5ldyBLZXk8RmxvYXQ+KCJhbmRyb2lkLmxlbnMuZm9jdXNEaXN0YW5jZSIsIGZsb2F0LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZXRoZXIgb3B0aWNhbCBpbWFnZSBzdGFiaWxpemF0aW9uIGlzCi0gICAgICogZW5hYmxlZC4KLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogV2lsbCBub3QgYmUgc3VwcG9ydGVkIG9uIG1vc3QgZGV2aWNlcy4KLSAgICAgKiA8L3A+CisgICAgICogPHA+V2hldGhlciBvcHRpY2FsIGltYWdlIHN0YWJpbGl6YXRpb24gaXMKKyAgICAgKiBlbmFibGVkLjwvcD4KKyAgICAgKiA8cD5XaWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gbW9zdCBkZXZpY2VzLjwvcD4KICAgICAgKiBAc2VlICNMRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFX09GRgogICAgICAqIEBzZWUgI0xFTlNfT1BUSUNBTF9TVEFCSUxJWkFUSU9OX01PREVfT04KICAgICAgKi8KQEAgLTg2NSwxMCArNzQwLDggQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQubGVucy5vcHRpY2FsU3RhYmlsaXphdGlvbk1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTW9kZSBvZiBvcGVyYXRpb24gZm9yIHRoZSBub2lzZSByZWR1Y3Rpb24KLSAgICAgKiBhbGdvcml0aG0KLSAgICAgKiA8L3A+CisgICAgICogPHA+TW9kZSBvZiBvcGVyYXRpb24gZm9yIHRoZSBub2lzZSByZWR1Y3Rpb24KKyAgICAgKiBhbGdvcml0aG08L3A+CiAgICAgICogQHNlZSAjTk9JU0VfUkVEVUNUSU9OX01PREVfT0ZGCiAgICAgICogQHNlZSAjTk9JU0VfUkVEVUNUSU9OX01PREVfRkFTVAogICAgICAqIEBzZWUgI05PSVNFX1JFRFVDVElPTl9NT0RFX0hJR0hfUVVBTElUWQpAQCAtODc3LDExICs3NTAsOSBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5ub2lzZVJlZHVjdGlvbi5tb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEFuIGFwcGxpY2F0aW9uLXNwZWNpZmllZCBJRCBmb3IgdGhlIGN1cnJlbnQKKyAgICAgKiA8cD5BbiBhcHBsaWNhdGlvbi1zcGVjaWZpZWQgSUQgZm9yIHRoZSBjdXJyZW50CiAgICAgICogcmVxdWVzdC4gTXVzdCBiZSBtYWludGFpbmVkIHVuY2hhbmdlZCBpbiBvdXRwdXQKLSAgICAgKiBmcmFtZQotICAgICAqIDwvcD4KKyAgICAgKiBmcmFtZTwvcD4KICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCkBAIC04ODksMzIgKzc2MCwyNCBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5yZXF1ZXN0LmlkIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqICh4LCB5LCB3aWR0aCwgaGVpZ2h0KS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogQSByZWN0YW5nbGUgd2l0aCB0aGUgdG9wLWxldmVsIGNvcm5lciBvZiAoeCx5KSBhbmQgc2l6ZQorICAgICAqIDxwPih4LCB5LCB3aWR0aCwgaGVpZ2h0KS48L3A+CisgICAgICogPHA+QSByZWN0YW5nbGUgd2l0aCB0aGUgdG9wLWxldmVsIGNvcm5lciBvZiAoeCx5KSBhbmQgc2l6ZQogICAgICAqICh3aWR0aCwgaGVpZ2h0KS4gVGhlIHJlZ2lvbiBvZiB0aGUgc2Vuc29yIHRoYXQgaXMgdXNlZCBmb3IKICAgICAgKiBvdXRwdXQuIEVhY2ggc3RyZWFtIG11c3QgdXNlIHRoaXMgcmVjdGFuZ2xlIHRvIHByb2R1Y2UgaXRzCiAgICAgICogb3V0cHV0LCBjcm9wcGluZyB0byBhIHNtYWxsZXIgcmVnaW9uIGlmIG5lY2Vzc2FyeSB0bwotICAgICAqIG1haW50YWluIHRoZSBzdHJlYW0ncyBhc3BlY3QgcmF0aW8uCi0gICAgICogPC9wPjxwPgotICAgICAqIEhBTDIueCB1c2VzIG9ubHkgKHgsIHksIHdpZHRoKQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBBbnkgYWRkaXRpb25hbCBwZXItc3RyZWFtIGNyb3BwaW5nIG11c3QgYmUgZG9uZSB0bwotICAgICAqIG1heGltaXplIHRoZSBmaW5hbCBwaXhlbCBhcmVhIG9mIHRoZSBzdHJlYW0uCi0gICAgICogPC9wPjxwPgotICAgICAqIEZvciBleGFtcGxlLCBpZiB0aGUgY3JvcCByZWdpb24gaXMgc2V0IHRvIGEgNDozIGFzcGVjdAorICAgICAqIG1haW50YWluIHRoZSBzdHJlYW0ncyBhc3BlY3QgcmF0aW8uPC9wPgorICAgICAqIDxwPkhBTDIueCB1c2VzIG9ubHkgKHgsIHksIHdpZHRoKTwvcD4KKyAgICAgKiA8cD5BbnkgYWRkaXRpb25hbCBwZXItc3RyZWFtIGNyb3BwaW5nIG11c3QgYmUgZG9uZSB0bworICAgICAqIG1heGltaXplIHRoZSBmaW5hbCBwaXhlbCBhcmVhIG9mIHRoZSBzdHJlYW0uPC9wPgorICAgICAqIDxwPkZvciBleGFtcGxlLCBpZiB0aGUgY3JvcCByZWdpb24gaXMgc2V0IHRvIGEgNDozIGFzcGVjdAogICAgICAqIHJhdGlvLCB0aGVuIDQ6MyBzdHJlYW1zIHNob3VsZCB1c2UgdGhlIGV4YWN0IGNyb3AKICAgICAgKiByZWdpb24uIDE2Ojkgc3RyZWFtcyBzaG91bGQgZnVydGhlciBjcm9wIHZlcnRpY2FsbHkKLSAgICAgKiAobGV0dGVyYm94KS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogQ29udmVyc2VseSwgaWYgdGhlIGNyb3AgcmVnaW9uIGlzIHNldCB0byBhIDE2OjksIHRoZW4gNDozCisgICAgICogKGxldHRlcmJveCkuPC9wPgorICAgICAqIDxwPkNvbnZlcnNlbHksIGlmIHRoZSBjcm9wIHJlZ2lvbiBpcyBzZXQgdG8gYSAxNjo5LCB0aGVuIDQ6MwogICAgICAqIG91dHB1dHMgc2hvdWxkIGNyb3AgaG9yaXpvbnRhbGx5IChwaWxsYXJib3gpLCBhbmQgMTY6OQogICAgICAqIHN0cmVhbXMgc2hvdWxkIG1hdGNoIGV4YWN0bHkuIFRoZXNlIGFkZGl0aW9uYWwgY3JvcHMgbXVzdAotICAgICAqIGJlIGNlbnRlcmVkIHdpdGhpbiB0aGUgY3JvcCByZWdpb24uCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBvdXRwdXQgc3RyZWFtcyBtdXN0IG1haW50YWluIHNxdWFyZSBwaXhlbHMgYXQgYWxsCisgICAgICogYmUgY2VudGVyZWQgd2l0aGluIHRoZSBjcm9wIHJlZ2lvbi48L3A+CisgICAgICogPHA+VGhlIG91dHB1dCBzdHJlYW1zIG11c3QgbWFpbnRhaW4gc3F1YXJlIHBpeGVscyBhdCBhbGwKICAgICAgKiB0aW1lcywgbm8gbWF0dGVyIHdoYXQgdGhlIHJlbGF0aXZlIGFzcGVjdCByYXRpb3Mgb2YgdGhlCiAgICAgICogY3JvcCByZWdpb24gYW5kIHRoZSBzdHJlYW0gYXJlLiAgTmVnYXRpdmUgdmFsdWVzIGZvcgogICAgICAqIGNvcm5lciBhcmUgYWxsb3dlZCBmb3IgcmF3IG91dHB1dCBpZiBmdWxsIHBpeGVsIGFycmF5IGlzCkBAIC05MjUsNjcgKzc4OCw0OCBAQAogICAgICAqIGJlIHNldCB0byBiZSBzbWFsbGVyIHRoYW4gZmxvb3IoIGFjdGl2ZUFycmF5U2l6ZS53aWR0aCAvCiAgICAgICogYW5kcm9pZC5zY2FsZXIubWF4RGlnaXRhbFpvb20gKSBhbmQgZmxvb3IoCiAgICAgICogYWN0aXZlQXJyYXlTaXplLmhlaWdodCAvIGFuZHJvaWQuc2NhbGVyLm1heERpZ2l0YWxab29tKSwKLSAgICAgKiByZXNwZWN0aXZlbHkuCi0gICAgICogPC9wPgorICAgICAqIHJlc3BlY3RpdmVseS48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8YW5kcm9pZC5ncmFwaGljcy5SZWN0PiBTQ0FMRVJfQ1JPUF9SRUdJT04gPQogICAgICAgICAgICAgbmV3IEtleTxhbmRyb2lkLmdyYXBoaWNzLlJlY3Q+KCJhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9uIiwgYW5kcm9pZC5ncmFwaGljcy5SZWN0LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIER1cmF0aW9uIGVhY2ggcGl4ZWwgaXMgZXhwb3NlZCB0bwotICAgICAqIGxpZ2h0LgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiB0aGUgc2Vuc29yIGNhbid0IGV4cG9zZSB0aGlzIGV4YWN0IGR1cmF0aW9uLCBpdCBzaG91bGQgc2hvcnRlbiB0aGUKLSAgICAgKiBkdXJhdGlvbiBleHBvc2VkIHRvIHRoZSBuZWFyZXN0IHBvc3NpYmxlIHZhbHVlIChyYXRoZXIgdGhhbiBleHBvc2UgbG9uZ2VyKS4KLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogMS8xMDAwMCAtIDMwIHNlYyByYW5nZS4gTm8gYnVsYiBtb2RlCi0gICAgICogPC9wPgorICAgICAqIDxwPkR1cmF0aW9uIGVhY2ggcGl4ZWwgaXMgZXhwb3NlZCB0bworICAgICAqIGxpZ2h0LjwvcD4KKyAgICAgKiA8cD5JZiB0aGUgc2Vuc29yIGNhbid0IGV4cG9zZSB0aGlzIGV4YWN0IGR1cmF0aW9uLCBpdCBzaG91bGQgc2hvcnRlbiB0aGUKKyAgICAgKiBkdXJhdGlvbiBleHBvc2VkIHRvIHRoZSBuZWFyZXN0IHBvc3NpYmxlIHZhbHVlIChyYXRoZXIgdGhhbiBleHBvc2UgbG9uZ2VyKS48L3A+CisgICAgICogPHA+MS8xMDAwMCAtIDMwIHNlYyByYW5nZS4gTm8gYnVsYiBtb2RlPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PExvbmc+IFNFTlNPUl9FWFBPU1VSRV9USU1FID0KICAgICAgICAgICAgIG5ldyBLZXk8TG9uZz4oImFuZHJvaWQuc2Vuc29yLmV4cG9zdXJlVGltZSIsIGxvbmcuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRHVyYXRpb24gZnJvbSBzdGFydCBvZiBmcmFtZSBleHBvc3VyZSB0bwotICAgICAqIHN0YXJ0IG9mIG5leHQgZnJhbWUgZXhwb3N1cmUKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogRXhwb3N1cmUgdGltZSBoYXMgcHJpb3JpdHksIHNvIGR1cmF0aW9uIGlzIHNldCB0bwotICAgICAqIG1heChkdXJhdGlvbiwgZXhwb3N1cmUgdGltZSArIG92ZXJoZWFkKQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5EdXJhdGlvbiBmcm9tIHN0YXJ0IG9mIGZyYW1lIGV4cG9zdXJlIHRvCisgICAgICogc3RhcnQgb2YgbmV4dCBmcmFtZSBleHBvc3VyZTwvcD4KKyAgICAgKiA8cD5FeHBvc3VyZSB0aW1lIGhhcyBwcmlvcml0eSwgc28gZHVyYXRpb24gaXMgc2V0IHRvCisgICAgICogbWF4KGR1cmF0aW9uLCBleHBvc3VyZSB0aW1lICsgb3ZlcmhlYWQpPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PExvbmc+IFNFTlNPUl9GUkFNRV9EVVJBVElPTiA9CiAgICAgICAgICAgICBuZXcgS2V5PExvbmc+KCJhbmRyb2lkLnNlbnNvci5mcmFtZUR1cmF0aW9uIiwgbG9uZy5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBHYWluIGFwcGxpZWQgdG8gaW1hZ2UgZGF0YS4gTXVzdCBiZQorICAgICAqIDxwPkdhaW4gYXBwbGllZCB0byBpbWFnZSBkYXRhLiBNdXN0IGJlCiAgICAgICogaW1wbGVtZW50ZWQgdGhyb3VnaCBhbmFsb2cgZ2FpbiBvbmx5IGlmIHNldCB0byB2YWx1ZXMKLSAgICAgKiBiZWxvdyAnbWF4aW11bSBhbmFsb2cgc2Vuc2l0aXZpdHknLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiB0aGUgc2Vuc29yIGNhbid0IGFwcGx5IHRoaXMgZXhhY3QgZ2FpbiwgaXQgc2hvdWxkIGxlc3NlbiB0aGUKLSAgICAgKiBnYWluIHRvIHRoZSBuZWFyZXN0IHBvc3NpYmxlIHZhbHVlIChyYXRoZXIgdGhhbiBnYWluIG1vcmUpLgotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBJU08gMTIyMzI6MjAwNiBSRUkgbWV0aG9kCi0gICAgICogPC9wPgorICAgICAqIGJlbG93ICdtYXhpbXVtIGFuYWxvZyBzZW5zaXRpdml0eScuPC9wPgorICAgICAqIDxwPklmIHRoZSBzZW5zb3IgY2FuJ3QgYXBwbHkgdGhpcyBleGFjdCBnYWluLCBpdCBzaG91bGQgbGVzc2VuIHRoZQorICAgICAqIGdhaW4gdG8gdGhlIG5lYXJlc3QgcG9zc2libGUgdmFsdWUgKHJhdGhlciB0aGFuIGdhaW4gbW9yZSkuPC9wPgorICAgICAqIDxwPklTTyAxMjIzMjoyMDA2IFJFSSBtZXRob2Q8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8SW50ZWdlcj4gU0VOU09SX1NFTlNJVElWSVRZID0KICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuc2Vuc29yLnNlbnNpdGl2aXR5IiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFN0YXRlIG9mIHRoZSBmYWNlIGRldGVjdG9yCi0gICAgICogdW5pdAotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIGZhY2UgZGV0ZWN0aW9uIGlzIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGl0CisgICAgICogPHA+U3RhdGUgb2YgdGhlIGZhY2UgZGV0ZWN0b3IKKyAgICAgKiB1bml0PC9wPgorICAgICAqIDxwPldoZXRoZXIgZmFjZSBkZXRlY3Rpb24gaXMgZW5hYmxlZCwgYW5kIHdoZXRoZXIgaXQKICAgICAgKiBzaG91bGQgb3V0cHV0IGp1c3QgdGhlIGJhc2ljIGZpZWxkcyBvciB0aGUgZnVsbCBzZXQgb2YKICAgICAgKiBmaWVsZHMuIFZhbHVlIG11c3QgYmUgb25lIG9mIHRoZQotICAgICAqIGFuZHJvaWQuc3RhdGlzdGljcy5pbmZvLmF2YWlsYWJsZUZhY2VEZXRlY3RNb2Rlcy4KLSAgICAgKiA8L3A+CisgICAgICogYW5kcm9pZC5zdGF0aXN0aWNzLmluZm8uYXZhaWxhYmxlRmFjZURldGVjdE1vZGVzLjwvcD4KICAgICAgKiBAc2VlICNTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREVfT0ZGCiAgICAgICogQHNlZSAjU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFX1NJTVBMRQogICAgICAqIEBzZWUgI1NUQVRJU1RJQ1NfRkFDRV9ERVRFQ1RfTU9ERV9GVUxMCkBAIC05OTQsMTUgKzgzOCwxMSBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5zdGF0aXN0aWNzLmZhY2VEZXRlY3RNb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFdoZXRoZXIgdGhlIEhBTCBuZWVkcyB0byBvdXRwdXQgdGhlIGxlbnMKLSAgICAgKiBzaGFkaW5nIG1hcCBpbiBvdXRwdXQgcmVzdWx0IG1ldGFkYXRhCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFdoZW4gc2V0IHRvIE9OLAorICAgICAqIDxwPldoZXRoZXIgdGhlIEhBTCBuZWVkcyB0byBvdXRwdXQgdGhlIGxlbnMKKyAgICAgKiBzaGFkaW5nIG1hcCBpbiBvdXRwdXQgcmVzdWx0IG1ldGFkYXRhPC9wPgorICAgICAqIDxwPldoZW4gc2V0IHRvIE9OLAogICAgICAqIGFuZHJvaWQuc3RhdGlzdGljcy5sZW5zU2hhZGluZ01hcCBtdXN0IGJlIHByb3ZpZGVkIGluCi0gICAgICogdGhlIG91dHB1dCByZXN1bHQgbWV0ZGF0YS4KLSAgICAgKiA8L3A+CisgICAgICogdGhlIG91dHB1dCByZXN1bHQgbWV0ZGF0YS48L3A+CiAgICAgICogQHNlZSAjU1RBVElTVElDU19MRU5TX1NIQURJTkdfTUFQX01PREVfT0ZGCiAgICAgICogQHNlZSAjU1RBVElTVElDU19MRU5TX1NIQURJTkdfTUFQX01PREVfT04KICAgICAgKi8KQEAgLTEwMTAsNTYgKzg1MCw0MCBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5zdGF0aXN0aWNzLmxlbnNTaGFkaW5nTWFwTW9kZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUYWJsZSBtYXBwaW5nIGJsdWUgaW5wdXQgdmFsdWVzIHRvIG91dHB1dAotICAgICAqIHZhbHVlcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUb25lbWFwcGluZyAvIGNvbnRyYXN0IC8gZ2FtbWEgY3VydmUgZm9yIHRoZSBibHVlCi0gICAgICogY2hhbm5lbCwgdG8gdXNlIHdoZW4gYW5kcm9pZC50b25lbWFwLm1vZGUgaXMgQ09OVFJBU1RfQ1VSVkUuCi0gICAgICogPC9wPjxwPgotICAgICAqIFNlZSBhbmRyb2lkLnRvbmVtYXAuY3VydmVSZWQgZm9yIG1vcmUgZGV0YWlscy4KLSAgICAgKiA8L3A+CisgICAgICogPHA+VGFibGUgbWFwcGluZyBibHVlIGlucHV0IHZhbHVlcyB0byBvdXRwdXQKKyAgICAgKiB2YWx1ZXM8L3A+CisgICAgICogPHA+VG9uZW1hcHBpbmcgLyBjb250cmFzdCAvIGdhbW1hIGN1cnZlIGZvciB0aGUgYmx1ZQorICAgICAqIGNoYW5uZWwsIHRvIHVzZSB3aGVuIGFuZHJvaWQudG9uZW1hcC5tb2RlIGlzIENPTlRSQVNUX0NVUlZFLjwvcD4KKyAgICAgKiA8cD5TZWUgYW5kcm9pZC50b25lbWFwLmN1cnZlUmVkIGZvciBtb3JlIGRldGFpbHMuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGZsb2F0W10+IFRPTkVNQVBfQ1VSVkVfQkxVRSA9CiAgICAgICAgICAgICBuZXcgS2V5PGZsb2F0W10+KCJhbmRyb2lkLnRvbmVtYXAuY3VydmVCbHVlIiwgZmxvYXRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUYWJsZSBtYXBwaW5nIGdyZWVuIGlucHV0IHZhbHVlcyB0byBvdXRwdXQKLSAgICAgKiB2YWx1ZXMKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogVG9uZW1hcHBpbmcgLyBjb250cmFzdCAvIGdhbW1hIGN1cnZlIGZvciB0aGUgZ3JlZW4KLSAgICAgKiBjaGFubmVsLCB0byB1c2Ugd2hlbiBhbmRyb2lkLnRvbmVtYXAubW9kZSBpcyBDT05UUkFTVF9DVVJWRS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogU2VlIGFuZHJvaWQudG9uZW1hcC5jdXJ2ZVJlZCBmb3IgbW9yZSBkZXRhaWxzLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UYWJsZSBtYXBwaW5nIGdyZWVuIGlucHV0IHZhbHVlcyB0byBvdXRwdXQKKyAgICAgKiB2YWx1ZXM8L3A+CisgICAgICogPHA+VG9uZW1hcHBpbmcgLyBjb250cmFzdCAvIGdhbW1hIGN1cnZlIGZvciB0aGUgZ3JlZW4KKyAgICAgKiBjaGFubmVsLCB0byB1c2Ugd2hlbiBhbmRyb2lkLnRvbmVtYXAubW9kZSBpcyBDT05UUkFTVF9DVVJWRS48L3A+CisgICAgICogPHA+U2VlIGFuZHJvaWQudG9uZW1hcC5jdXJ2ZVJlZCBmb3IgbW9yZSBkZXRhaWxzLjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxmbG9hdFtdPiBUT05FTUFQX0NVUlZFX0dSRUVOID0KICAgICAgICAgICAgIG5ldyBLZXk8ZmxvYXRbXT4oImFuZHJvaWQudG9uZW1hcC5jdXJ2ZUdyZWVuIiwgZmxvYXRbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUYWJsZSBtYXBwaW5nIHJlZCBpbnB1dCB2YWx1ZXMgdG8gb3V0cHV0Ci0gICAgICogdmFsdWVzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFRvbmVtYXBwaW5nIC8gY29udHJhc3QgLyBnYW1tYSBjdXJ2ZSBmb3IgdGhlIHJlZAotICAgICAqIGNoYW5uZWwsIHRvIHVzZSB3aGVuIGFuZHJvaWQudG9uZW1hcC5tb2RlIGlzIENPTlRSQVNUX0NVUlZFLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBTaW5jZSB0aGUgaW5wdXQgYW5kIG91dHB1dCByYW5nZXMgbWF5IHZhcnkgZGVwZW5kaW5nIG9uCisgICAgICogPHA+VGFibGUgbWFwcGluZyByZWQgaW5wdXQgdmFsdWVzIHRvIG91dHB1dAorICAgICAqIHZhbHVlczwvcD4KKyAgICAgKiA8cD5Ub25lbWFwcGluZyAvIGNvbnRyYXN0IC8gZ2FtbWEgY3VydmUgZm9yIHRoZSByZWQKKyAgICAgKiBjaGFubmVsLCB0byB1c2Ugd2hlbiBhbmRyb2lkLnRvbmVtYXAubW9kZSBpcyBDT05UUkFTVF9DVVJWRS48L3A+CisgICAgICogPHA+U2luY2UgdGhlIGlucHV0IGFuZCBvdXRwdXQgcmFuZ2VzIG1heSB2YXJ5IGRlcGVuZGluZyBvbgogICAgICAqIHRoZSBjYW1lcmEgcGlwZWxpbmUsIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHBpeGVsIHZhbHVlcwogICAgICAqIGFyZSByZXByZXNlbnRlZCBieSBub3JtYWxpemVkIGZsb2F0aW5nLXBvaW50IHZhbHVlcwotICAgICAqIGJldHdlZW4gMCBhbmQgMSwgd2l0aCAwID09IGJsYWNrIGFuZCAxID09IHdoaXRlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgY3VydmUgc2hvdWxkIGJlIGxpbmVhcmx5IGludGVycG9sYXRlZCBiZXR3ZWVuIHRoZQorICAgICAqIGJldHdlZW4gMCBhbmQgMSwgd2l0aCAwID09IGJsYWNrIGFuZCAxID09IHdoaXRlLjwvcD4KKyAgICAgKiA8cD5UaGUgY3VydmUgc2hvdWxkIGJlIGxpbmVhcmx5IGludGVycG9sYXRlZCBiZXR3ZWVuIHRoZQogICAgICAqIGRlZmluZWQgcG9pbnRzLiBUaGUgcG9pbnRzIHdpbGwgYmUgbGlzdGVkIGluIGluY3JlYXNpbmcKICAgICAgKiBvcmRlciBvZiBQX0lOLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFycmF5IGlzOiBbMC4wLCAwLjAsCi0gICAgICogMC4zLCAwLjUsIDEuMCwgMS4wXSwgdGhlbiB0aGUgaW5wdXQtPm91dHB1dCBtYXBwaW5nCi0gICAgICogZm9yIGEgZmV3IHNhbXBsZSBwb2ludHMgd291bGQgYmU6IDAgLT4gMCwgMC4xNSAtPgotICAgICAqIDAuMjUsIDAuMyAtPiAwLjUsIDAuNSAtPiAwLjY0Ci0gICAgICogPC9wPgorICAgICAqIDAuMywgMC41LCAxLjAsIDEuMF0sIHRoZW4gdGhlIGlucHV0LSZndDtvdXRwdXQgbWFwcGluZworICAgICAqIGZvciBhIGZldyBzYW1wbGUgcG9pbnRzIHdvdWxkIGJlOiAwIC0mZ3Q7IDAsIDAuMTUgLSZndDsKKyAgICAgKiAwLjI1LCAwLjMgLSZndDsgMC41LCAwLjUgLSZndDsgMC42NDwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxmbG9hdFtdPiBUT05FTUFQX0NVUlZFX1JFRCA9CiAgICAgICAgICAgICBuZXcgS2V5PGZsb2F0W10+KCJhbmRyb2lkLnRvbmVtYXAuY3VydmVSZWQiLCBmbG9hdFtdLmNsYXNzKTsKQEAgLTEwNzMsMjAgKzg5NywxNiBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC50b25lbWFwLm1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhpcyBMRUQgaXMgbm9taW5hbGx5IHVzZWQgdG8gaW5kaWNhdGUgdG8gdGhlIHVzZXIKKyAgICAgKiA8cD5UaGlzIExFRCBpcyBub21pbmFsbHkgdXNlZCB0byBpbmRpY2F0ZSB0byB0aGUgdXNlcgogICAgICAqIHRoYXQgdGhlIGNhbWVyYSBpcyBwb3dlcmVkIG9uIGFuZCBtYXkgYmUgc3RyZWFtaW5nIGltYWdlcyBiYWNrIHRvIHRoZQogICAgICAqIEFwcGxpY2F0aW9uIFByb2Nlc3Nvci4gSW4gY2VydGFpbiByYXJlIGNpcmN1bXN0YW5jZXMsIHRoZSBPUyBtYXkKICAgICAgKiBkaXNhYmxlIHRoaXMgd2hlbiB2aWRlbyBpcyBwcm9jZXNzZWQgbG9jYWxseSBhbmQgbm90IHRyYW5zbWl0dGVkIHRvCi0gICAgICogYW55IHVudHJ1c3RlZCBhcHBsaWNhdGlvbnMuCi0gICAgICogPC9wPjxwPgotICAgICAqIEluIHBhcnRpY3VsYXIsIHRoZSBMRUQgKm11c3QqIGFsd2F5cyBiZSBvbiB3aGVuIHRoZSBkYXRhIGNvdWxkIGJlCi0gICAgICogdHJhbnNtaXR0ZWQgb2ZmIHRoZSBkZXZpY2UuIFRoZSBMRUQgKnNob3VsZCogYWx3YXlzIGJlIG9uIHdoZW5ldmVyCi0gICAgICogZGF0YSBpcyBzdG9yZWQgbG9jYWxseSBvbiB0aGUgZGV2aWNlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgTEVEICptYXkqIGJlIG9mZiBpZiBhIHRydXN0ZWQgYXBwbGljYXRpb24gaXMgdXNpbmcgdGhlIGRhdGEgdGhhdAotICAgICAqIGRvZXNuJ3QgdmlvbGF0ZSB0aGUgYWJvdmUgcnVsZXMuCi0gICAgICogPC9wPgorICAgICAqIGFueSB1bnRydXN0ZWQgYXBwbGljYXRpb25zLjwvcD4KKyAgICAgKiA8cD5JbiBwYXJ0aWN1bGFyLCB0aGUgTEVEIDxlbT5tdXN0PC9lbT4gYWx3YXlzIGJlIG9uIHdoZW4gdGhlIGRhdGEgY291bGQgYmUKKyAgICAgKiB0cmFuc21pdHRlZCBvZmYgdGhlIGRldmljZS4gVGhlIExFRCA8ZW0+c2hvdWxkPC9lbT4gYWx3YXlzIGJlIG9uIHdoZW5ldmVyCisgICAgICogZGF0YSBpcyBzdG9yZWQgbG9jYWxseSBvbiB0aGUgZGV2aWNlLjwvcD4KKyAgICAgKiA8cD5UaGUgTEVEIDxlbT5tYXk8L2VtPiBiZSBvZmYgaWYgYSB0cnVzdGVkIGFwcGxpY2F0aW9uIGlzIHVzaW5nIHRoZSBkYXRhIHRoYXQKKyAgICAgKiBkb2Vzbid0IHZpb2xhdGUgdGhlIGFib3ZlIHJ1bGVzLjwvcD4KICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCkBAIC0xMDk0LDI4ICs5MTQsNDQgQEAKICAgICAgICAgICAgIG5ldyBLZXk8Qm9vbGVhbj4oImFuZHJvaWQubGVkLnRyYW5zbWl0IiwgYm9vbGVhbi5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIGJsYWNrLWxldmVsIGNvbXBlbnNhdGlvbiBpcyBsb2NrZWQKLSAgICAgKiB0byBpdHMgY3VycmVudCB2YWx1ZXMsIG9yIGlzIGZyZWUgdG8gdmFyeQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGVuIHNldCB0byBPTiwgdGhlIHZhbHVlcyB1c2VkIGZvciBibGFjay1sZXZlbAorICAgICAqIDxwPldoZXRoZXIgYmxhY2stbGV2ZWwgY29tcGVuc2F0aW9uIGlzIGxvY2tlZAorICAgICAqIHRvIGl0cyBjdXJyZW50IHZhbHVlcywgb3IgaXMgZnJlZSB0byB2YXJ5PC9wPgorICAgICAqIDxwPldoZW4gc2V0IHRvIE9OLCB0aGUgdmFsdWVzIHVzZWQgZm9yIGJsYWNrLWxldmVsCiAgICAgICogY29tcGVuc2F0aW9uIG11c3Qgbm90IGNoYW5nZSB1bnRpbCB0aGUgbG9jayBpcyBzZXQgdG8KLSAgICAgKiBPRkYKLSAgICAgKiA8L3A+PHA+Ci0gICAgICogU2luY2UgY2hhbmdlcyB0byBjZXJ0YWluIGNhcHR1cmUgcGFyYW1ldGVycyAoc3VjaCBhcworICAgICAqIE9GRjwvcD4KKyAgICAgKiA8cD5TaW5jZSBjaGFuZ2VzIHRvIGNlcnRhaW4gY2FwdHVyZSBwYXJhbWV0ZXJzIChzdWNoIGFzCiAgICAgICogZXhwb3N1cmUgdGltZSkgbWF5IHJlcXVpcmUgcmVzZXR0aW5nIG9mIGJsYWNrIGxldmVsCiAgICAgICogY29tcGVuc2F0aW9uLCB0aGUgSEFMIG11c3QgcmVwb3J0IHdoZXRoZXIgc2V0dGluZyB0aGUKICAgICAgKiBibGFjayBsZXZlbCBsb2NrIHdhcyBzdWNjZXNzZnVsIGluIHRoZSBvdXRwdXQgcmVzdWx0Ci0gICAgICogbWV0YWRhdGEuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBibGFjayBsZXZlbCBsb2NraW5nIG11c3QgaGFwcGVuIGF0IHRoZSBzZW5zb3IsIGFuZCBub3QgYXQgdGhlIElTUC4KKyAgICAgKiBtZXRhZGF0YS48L3A+CisgICAgICogPHA+Rm9yIGV4YW1wbGUsIGlmIGEgc2VxdWVuY2Ugb2YgcmVxdWVzdHMgaXMgYXMgZm9sbG93czo8L3A+CisgICAgICogPHVsPgorICAgICAqIDxsaT5SZXF1ZXN0IDE6IEV4cG9zdXJlID0gMTBtcywgQmxhY2sgbGV2ZWwgbG9jayA9IE9GRjwvbGk+CisgICAgICogPGxpPlJlcXVlc3QgMjogRXhwb3N1cmUgPSAxMG1zLCBCbGFjayBsZXZlbCBsb2NrID0gT048L2xpPgorICAgICAqIDxsaT5SZXF1ZXN0IDM6IEV4cG9zdXJlID0gMTBtcywgQmxhY2sgbGV2ZWwgbG9jayA9IE9OPC9saT4KKyAgICAgKiA8bGk+UmVxdWVzdCA0OiBFeHBvc3VyZSA9IDIwbXMsIEJsYWNrIGxldmVsIGxvY2sgPSBPTjwvbGk+CisgICAgICogPGxpPlJlcXVlc3QgNTogRXhwb3N1cmUgPSAyMG1zLCBCbGFjayBsZXZlbCBsb2NrID0gT048L2xpPgorICAgICAqIDxsaT5SZXF1ZXN0IDY6IEV4cG9zdXJlID0gMjBtcywgQmxhY2sgbGV2ZWwgbG9jayA9IE9OPC9saT4KKyAgICAgKiA8L3VsPgorICAgICAqIDxwPkFuZCB0aGUgZXhwb3N1cmUgY2hhbmdlIGluIFJlcXVlc3QgNCByZXF1aXJlcyByZXNldHRpbmcgdGhlIGJsYWNrCisgICAgICogbGV2ZWwgb2Zmc2V0cywgdGhlbiB0aGUgb3V0cHV0IHJlc3VsdCBtZXRhZGF0YSBpcyBleHBlY3RlZCB0byBiZTo8L3A+CisgICAgICogPHVsPgorICAgICAqIDxsaT5SZXN1bHQgMTogRXhwb3N1cmUgPSAxMG1zLCBCbGFjayBsZXZlbCBsb2NrID0gT0ZGPC9saT4KKyAgICAgKiA8bGk+UmVzdWx0IDI6IEV4cG9zdXJlID0gMTBtcywgQmxhY2sgbGV2ZWwgbG9jayA9IE9OPC9saT4KKyAgICAgKiA8bGk+UmVzdWx0IDM6IEV4cG9zdXJlID0gMTBtcywgQmxhY2sgbGV2ZWwgbG9jayA9IE9OPC9saT4KKyAgICAgKiA8bGk+UmVzdWx0IDQ6IEV4cG9zdXJlID0gMjBtcywgQmxhY2sgbGV2ZWwgbG9jayA9IE9GRjwvbGk+CisgICAgICogPGxpPlJlc3VsdCA1OiBFeHBvc3VyZSA9IDIwbXMsIEJsYWNrIGxldmVsIGxvY2sgPSBPTjwvbGk+CisgICAgICogPGxpPlJlc3VsdCA2OiBFeHBvc3VyZSA9IDIwbXMsIEJsYWNrIGxldmVsIGxvY2sgPSBPTjwvbGk+CisgICAgICogPC91bD4KKyAgICAgKiA8cD5UaGlzIGluZGljYXRlcyB0byB0aGUgYXBwbGljYXRpb24gdGhhdCBvbiBmcmFtZSA0LCBibGFjayBsZXZlbHMgd2VyZQorICAgICAqIHJlc2V0IGR1ZSB0byBleHBvc3VyZSB2YWx1ZSBjaGFuZ2VzLCBhbmQgcGl4ZWwgdmFsdWVzIG1heSBub3QgYmUKKyAgICAgKiBjb25zaXN0ZW50IGFjcm9zcyBjYXB0dXJlcy48L3A+CisgICAgICogPHA+VGhlIGJsYWNrIGxldmVsIGxvY2tpbmcgbXVzdCBoYXBwZW4gYXQgdGhlIHNlbnNvciwgYW5kIG5vdCBhdCB0aGUgSVNQLgogICAgICAqIElmIGZvciBzb21lIHJlYXNvbiBibGFjayBsZXZlbCBsb2NraW5nIGlzIG5vIGxvbmdlciBsZWdhbCAoZm9yIGV4YW1wbGUsCiAgICAgICogdGhlIGFuYWxvZyBnYWluIGhhcyBjaGFuZ2VkLCB3aGljaCBmb3JjZXMgYmxhY2sgbGV2ZWxzIHRvIGJlCiAgICAgICogcmVjYWxjdWxhdGVkKSwgdGhlbiB0aGUgSEFMIGlzIGZyZWUgdG8gb3ZlcnJpZGUgdGhpcyByZXF1ZXN0IChhbmQgaXQKICAgICAgKiBtdXN0IHJlcG9ydCAnT0ZGJyB3aGVuIHRoaXMgZG9lcyBoYXBwZW4pIHVudGlsIHRoZSBuZXh0IHRpbWUgbG9ja2luZwotICAgICAqIGlzIGxlZ2FsIGFnYWluLgotICAgICAqIDwvcD4KKyAgICAgKiBpcyBsZWdhbCBhZ2Fpbi48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8Qm9vbGVhbj4gQkxBQ0tfTEVWRUxfTE9DSyA9CiAgICAgICAgICAgICBuZXcgS2V5PEJvb2xlYW4+KCJhbmRyb2lkLmJsYWNrTGV2ZWwubG9jayIsIGJvb2xlYW4uY2xhc3MpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYXB0dXJlUmVzdWx0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXN1bHQuamF2YQppbmRleCA1MzViOTYzLi4yZDY4NmY5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXN1bHQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhcHR1cmVSZXN1bHQuamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMjsKIAotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5pbXBsLkNhbWVyYU1ldGFkYXRhTmF0aXZlOwogCiAvKioKQEAgLTEyNSw2MSArMTIzLDQ2IEBACiAgICAgICp+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH5AfkB+QH4qLwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQSBjb2xvciB0cmFuc2Zvcm0gbWF0cml4IHRvIHVzZSB0byB0cmFuc2Zvcm0KLSAgICAgKiBmcm9tIHNlbnNvciBSR0IgY29sb3Igc3BhY2UgdG8gb3V0cHV0IGxpbmVhciBzUkdCIGNvbG9yIHNwYWNlCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFRoaXMgbWF0cml4IGlzIGVpdGhlciBzZXQgYnkgSEFMIHdoZW4gdGhlIHJlcXVlc3QKKyAgICAgKiA8cD5BIGNvbG9yIHRyYW5zZm9ybSBtYXRyaXggdG8gdXNlIHRvIHRyYW5zZm9ybQorICAgICAqIGZyb20gc2Vuc29yIFJHQiBjb2xvciBzcGFjZSB0byBvdXRwdXQgbGluZWFyIHNSR0IgY29sb3Igc3BhY2U8L3A+CisgICAgICogPHA+VGhpcyBtYXRyaXggaXMgZWl0aGVyIHNldCBieSBIQUwgd2hlbiB0aGUgcmVxdWVzdAogICAgICAqIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLm1vZGUgaXMgbm90IFRSQU5TRk9STV9NQVRSSVgsIG9yCiAgICAgICogZGlyZWN0bHkgYnkgdGhlIGFwcGxpY2F0aW9uIGluIHRoZSByZXF1ZXN0IHdoZW4gdGhlCi0gICAgICogYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZSBpcyBUUkFOU0ZPUk1fTUFUUklYLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZSBIQUwgbWF5IHJvdW5kIHRoZSBtYXRyaXggdG8gYWNjb3VudAorICAgICAqIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLm1vZGUgaXMgVFJBTlNGT1JNX01BVFJJWC48L3A+CisgICAgICogPHA+SW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgSEFMIG1heSByb3VuZCB0aGUgbWF0cml4IHRvIGFjY291bnQKICAgICAgKiBmb3IgcHJlY2lzaW9uIGlzc3VlczsgdGhlIGZpbmFsIHJvdW5kZWQgbWF0cml4IHNob3VsZCBiZQotICAgICAqIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyBtYXRyaXggcmVzdWx0IG1ldGFkYXRhLgotICAgICAqIDwvcD4KKyAgICAgKiByZXBvcnRlZCBiYWNrIGluIHRoaXMgbWF0cml4IHJlc3VsdCBtZXRhZGF0YS48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8UmF0aW9uYWxbXT4gQ09MT1JfQ09SUkVDVElPTl9UUkFOU0ZPUk0gPQogICAgICAgICAgICAgbmV3IEtleTxSYXRpb25hbFtdPigiYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24udHJhbnNmb3JtIiwgUmF0aW9uYWxbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBHYWlucyBhcHBseWluZyB0byBCYXllciBjb2xvciBjaGFubmVscyBmb3IKLSAgICAgKiB3aGl0ZS1iYWxhbmNlCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFRoZSA0LWNoYW5uZWwgd2hpdGUtYmFsYW5jZSBnYWlucyBhcmUgZGVmaW5lZCBpbgorICAgICAqIDxwPkdhaW5zIGFwcGx5aW5nIHRvIEJheWVyIGNvbG9yIGNoYW5uZWxzIGZvcgorICAgICAqIHdoaXRlLWJhbGFuY2U8L3A+CisgICAgICogPHA+VGhlIDQtY2hhbm5lbCB3aGl0ZS1iYWxhbmNlIGdhaW5zIGFyZSBkZWZpbmVkIGluCiAgICAgICogdGhlIG9yZGVyIG9mIFtSIEdfZXZlbiBHX29kZCBCXSwgd2hlcmUgR19ldmVuIGlzIHRoZSBnYWluCiAgICAgICogZm9yIGdyZWVuIHBpeGVscyBvbiBldmVuIHJvd3Mgb2YgdGhlIG91dHB1dCwgYW5kIEdfb2RkCiAgICAgICogaXMgdGhlIGdhaW4gZm9yIGdyZWVucGl4ZWxzIG9uIHRoZSBvZGQgcm93cy4gaWYgYSBIQUwKICAgICAgKiBkb2VzIG5vdCBzdXBwb3J0IGEgc2VwYXJhdGUgZ2FpbiBmb3IgZXZlbi9vZGQgZ3JlZW4gY2hhbm5lbHMsCiAgICAgICogaXQgc2hvdWxkIHVzZSB0aGUgR19ldmVuIHZhbHVlLGFuZCB3cml0ZSBHX29kZCBlcXVhbCB0bwotICAgICAqIEdfZXZlbiBpbiB0aGUgb3V0cHV0IHJlc3VsdCBtZXRhZGF0YS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhpcyBhcnJheSBpcyBlaXRoZXIgc2V0IGJ5IEhBTCB3aGVuIHRoZSByZXF1ZXN0CisgICAgICogR19ldmVuIGluIHRoZSBvdXRwdXQgcmVzdWx0IG1ldGFkYXRhLjwvcD4KKyAgICAgKiA8cD5UaGlzIGFycmF5IGlzIGVpdGhlciBzZXQgYnkgSEFMIHdoZW4gdGhlIHJlcXVlc3QKICAgICAgKiBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5tb2RlIGlzIG5vdCBUUkFOU0ZPUk1fTUFUUklYLCBvcgogICAgICAqIGRpcmVjdGx5IGJ5IHRoZSBhcHBsaWNhdGlvbiBpbiB0aGUgcmVxdWVzdCB3aGVuIHRoZQotICAgICAqIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLm1vZGUgaXMgVFJBTlNGT1JNX01BVFJJWC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIG91cHV0IHNob3VsZCBiZSB0aGUgZ2FpbnMgYWN0dWFsbHkgYXBwbGllZCBieSB0aGUgSEFMIHRvCi0gICAgICogdGhlIGN1cnJlbnQgZnJhbWUuCi0gICAgICogPC9wPgorICAgICAqIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLm1vZGUgaXMgVFJBTlNGT1JNX01BVFJJWC48L3A+CisgICAgICogPHA+VGhlIG91cHV0IHNob3VsZCBiZSB0aGUgZ2FpbnMgYWN0dWFsbHkgYXBwbGllZCBieSB0aGUgSEFMIHRvCisgICAgICogdGhlIGN1cnJlbnQgZnJhbWUuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGZsb2F0W10+IENPTE9SX0NPUlJFQ1RJT05fR0FJTlMgPQogICAgICAgICAgICAgbmV3IEtleTxmbG9hdFtdPigiYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24uZ2FpbnMiLCBmbG9hdFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSBJRCBzZW50IHdpdGggdGhlIGxhdGVzdAotICAgICAqIENBTUVSQTJfVFJJR0dFUl9QUkVDQVBUVVJFX01FVEVSSU5HIGNhbGwKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogTXVzdCBiZSAwIGlmIG5vCisgICAgICogPHA+VGhlIElEIHNlbnQgd2l0aCB0aGUgbGF0ZXN0CisgICAgICogQ0FNRVJBMl9UUklHR0VSX1BSRUNBUFRVUkVfTUVURVJJTkcgY2FsbDwvcD4KKyAgICAgKiA8cD5NdXN0IGJlIDAgaWYgbm8KICAgICAgKiBDQU1FUkEyX1RSSUdHRVJfUFJFQ0FQVFVSRV9NRVRFUklORyB0cmlnZ2VyIHJlY2VpdmVkIHlldAogICAgICAqIGJ5IEhBTC4gQWx3YXlzIHVwZGF0ZWQgZXZlbiBpZiBBRSBhbGdvcml0aG0gaWdub3JlcyB0aGUKLSAgICAgKiB0cmlnZ2VyCi0gICAgICogPC9wPgorICAgICAqIHRyaWdnZXI8L3A+CiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwpAQCAtMTg3LDQxICsxNzAsMzEgQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5hZVByZWNhcHR1cmVJZCIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBMaXN0IG9mIGFyZWFzIHRvIHVzZSBmb3IKLSAgICAgKiBtZXRlcmluZwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBFYWNoIGFyZWEgaXMgYSByZWN0YW5nbGUgcGx1cyB3ZWlnaHQ6IHhtaW4sIHltaW4sCisgICAgICogPHA+TGlzdCBvZiBhcmVhcyB0byB1c2UgZm9yCisgICAgICogbWV0ZXJpbmc8L3A+CisgICAgICogPHA+RWFjaCBhcmVhIGlzIGEgcmVjdGFuZ2xlIHBsdXMgd2VpZ2h0OiB4bWluLCB5bWluLAogICAgICAqIHhtYXgsIHltYXgsIHdlaWdodC4gVGhlIHJlY3RhbmdsZSBpcyBkZWZpbmVkIGluY2x1c2l2ZSBvZiB0aGUKLSAgICAgKiBzcGVjaWZpZWQgY29vcmRpbmF0ZXMuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBjb29yZGluYXRlIHN5c3RlbSBpcyBiYXNlZCBvbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LAorICAgICAqIHNwZWNpZmllZCBjb29yZGluYXRlcy48L3A+CisgICAgICogPHA+VGhlIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJhc2VkIG9uIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXksCiAgICAgICogd2l0aCAoMCwwKSBiZWluZyB0aGUgdG9wLWxlZnQgcGl4ZWwgaW4gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheSwgYW5kCiAgICAgICogKGFuZHJvaWQuc2Vuc29yLmluZm8uYWN0aXZlQXJyYXlTaXplLndpZHRoIC0gMSwKICAgICAgKiBhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZS5oZWlnaHQgLSAxKSBiZWluZyB0aGUKICAgICAgKiBib3R0b20tcmlnaHQgcGl4ZWwgaW4gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheS4gVGhlIHdlaWdodAotICAgICAqIHNob3VsZCBiZSBub25uZWdhdGl2ZS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogSWYgYWxsIHJlZ2lvbnMgaGF2ZSAwIHdlaWdodCwgdGhlbiBubyBzcGVjaWZpYyBtZXRlcmluZyBhcmVhCisgICAgICogc2hvdWxkIGJlIG5vbm5lZ2F0aXZlLjwvcD4KKyAgICAgKiA8cD5JZiBhbGwgcmVnaW9ucyBoYXZlIDAgd2VpZ2h0LCB0aGVuIG5vIHNwZWNpZmljIG1ldGVyaW5nIGFyZWEKICAgICAgKiBuZWVkcyB0byBiZSB1c2VkIGJ5IHRoZSBIQUwuIElmIHRoZSBtZXRlcmluZyByZWdpb24gaXMKICAgICAgKiBvdXRzaWRlIHRoZSBjdXJyZW50IGFuZHJvaWQuc2NhbGVyLmNyb3BSZWdpb24sIHRoZSBIQUwKICAgICAgKiBzaG91bGQgaWdub3JlIHRoZSBzZWN0aW9ucyBvdXRzaWRlIHRoZSByZWdpb24gYW5kIG91dHB1dCB0aGUKLSAgICAgKiB1c2VkIHNlY3Rpb25zIGluIHRoZSBmcmFtZSBtZXRhZGF0YQotICAgICAqIDwvcD4KKyAgICAgKiB1c2VkIHNlY3Rpb25zIGluIHRoZSBmcmFtZSBtZXRhZGF0YTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxpbnRbXT4gQ09OVFJPTF9BRV9SRUdJT05TID0KICAgICAgICAgICAgIG5ldyBLZXk8aW50W10+KCJhbmRyb2lkLmNvbnRyb2wuYWVSZWdpb25zIiwgaW50W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQ3VycmVudCBzdGF0ZSBvZiBBRSBhbGdvcml0aG0KLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogV2hlbmV2ZXIgdGhlIEFFIGFsZ29yaXRobSBzdGF0ZSBjaGFuZ2VzLCBhCisgICAgICogPHA+Q3VycmVudCBzdGF0ZSBvZiBBRSBhbGdvcml0aG08L3A+CisgICAgICogPHA+V2hlbmV2ZXIgdGhlIEFFIGFsZ29yaXRobSBzdGF0ZSBjaGFuZ2VzLCBhCiAgICAgICogTVNHX0FVVE9FWFBPU1VSRSBub3RpZmljYXRpb24gbXVzdCBiZSBzZW5kIGlmIGEKLSAgICAgKiBub3RpZmljYXRpb24gY2FsbGJhY2sgaXMgcmVnaXN0ZXJlZC4KLSAgICAgKiA8L3A+CisgICAgICogbm90aWZpY2F0aW9uIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQuPC9wPgogICAgICAqIEBzZWUgI0NPTlRST0xfQUVfU1RBVEVfSU5BQ1RJVkUKICAgICAgKiBAc2VlICNDT05UUk9MX0FFX1NUQVRFX1NFQVJDSElORwogICAgICAqIEBzZWUgI0NPTlRST0xfQUVfU1RBVEVfQ09OVkVSR0VECkBAIC0yMzMsMTAgKzIwNiw4IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wuYWVTdGF0ZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIEFGIGlzIGN1cnJlbnRseSBlbmFibGVkLCBhbmQgd2hhdAotICAgICAqIG1vZGUgaXQgaXMgc2V0IHRvCi0gICAgICogPC9wPgorICAgICAqIDxwPldoZXRoZXIgQUYgaXMgY3VycmVudGx5IGVuYWJsZWQsIGFuZCB3aGF0CisgICAgICogbW9kZSBpdCBpcyBzZXQgdG88L3A+CiAgICAgICogQHNlZSAjQ09OVFJPTF9BRl9NT0RFX09GRgogICAgICAqIEBzZWUgI0NPTlRST0xfQUZfTU9ERV9BVVRPCiAgICAgICogQHNlZSAjQ09OVFJPTF9BRl9NT0RFX01BQ1JPCkBAIC0yNDgsNDEgKzIxOSwzMSBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5jb250cm9sLmFmTW9kZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBMaXN0IG9mIGFyZWFzIHRvIHVzZSBmb3IgZm9jdXMKLSAgICAgKiBlc3RpbWF0aW9uCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIEVhY2ggYXJlYSBpcyBhIHJlY3RhbmdsZSBwbHVzIHdlaWdodDogeG1pbiwgeW1pbiwKKyAgICAgKiA8cD5MaXN0IG9mIGFyZWFzIHRvIHVzZSBmb3IgZm9jdXMKKyAgICAgKiBlc3RpbWF0aW9uPC9wPgorICAgICAqIDxwPkVhY2ggYXJlYSBpcyBhIHJlY3RhbmdsZSBwbHVzIHdlaWdodDogeG1pbiwgeW1pbiwKICAgICAgKiB4bWF4LCB5bWF4LCB3ZWlnaHQuIFRoZSByZWN0YW5nbGUgaXMgZGVmaW5lZCBpbmNsdXNpdmUgb2YgdGhlCi0gICAgICogc3BlY2lmaWVkIGNvb3JkaW5hdGVzLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgYmFzZWQgb24gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheSwKKyAgICAgKiBzcGVjaWZpZWQgY29vcmRpbmF0ZXMuPC9wPgorICAgICAqIDxwPlRoZSBjb29yZGluYXRlIHN5c3RlbSBpcyBiYXNlZCBvbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LAogICAgICAqIHdpdGggKDAsMCkgYmVpbmcgdGhlIHRvcC1sZWZ0IHBpeGVsIGluIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXksIGFuZAogICAgICAqIChhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZS53aWR0aCAtIDEsCiAgICAgICogYW5kcm9pZC5zZW5zb3IuaW5mby5hY3RpdmVBcnJheVNpemUuaGVpZ2h0IC0gMSkgYmVpbmcgdGhlCiAgICAgICogYm90dG9tLXJpZ2h0IHBpeGVsIGluIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXkuIFRoZSB3ZWlnaHQKLSAgICAgKiBzaG91bGQgYmUgbm9ubmVnYXRpdmUuCi0gICAgICogPC9wPjxwPgotICAgICAqIElmIGFsbCByZWdpb25zIGhhdmUgMCB3ZWlnaHQsIHRoZW4gbm8gc3BlY2lmaWMgZm9jdXMgYXJlYQorICAgICAqIHNob3VsZCBiZSBub25uZWdhdGl2ZS48L3A+CisgICAgICogPHA+SWYgYWxsIHJlZ2lvbnMgaGF2ZSAwIHdlaWdodCwgdGhlbiBubyBzcGVjaWZpYyBmb2N1cyBhcmVhCiAgICAgICogbmVlZHMgdG8gYmUgdXNlZCBieSB0aGUgSEFMLiBJZiB0aGUgZm9jdXNpbmcgcmVnaW9uIGlzCiAgICAgICogb3V0c2lkZSB0aGUgY3VycmVudCBhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9uLCB0aGUgSEFMCiAgICAgICogc2hvdWxkIGlnbm9yZSB0aGUgc2VjdGlvbnMgb3V0c2lkZSB0aGUgcmVnaW9uIGFuZCBvdXRwdXQgdGhlCi0gICAgICogdXNlZCBzZWN0aW9ucyBpbiB0aGUgZnJhbWUgbWV0YWRhdGEKLSAgICAgKiA8L3A+CisgICAgICogdXNlZCBzZWN0aW9ucyBpbiB0aGUgZnJhbWUgbWV0YWRhdGE8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8aW50W10+IENPTlRST0xfQUZfUkVHSU9OUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGludFtdPigiYW5kcm9pZC5jb250cm9sLmFmUmVnaW9ucyIsIGludFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEN1cnJlbnQgc3RhdGUgb2YgQUYgYWxnb3JpdGhtCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFdoZW5ldmVyIHRoZSBBRiBhbGdvcml0aG0gc3RhdGUgY2hhbmdlcywgYQorICAgICAqIDxwPkN1cnJlbnQgc3RhdGUgb2YgQUYgYWxnb3JpdGhtPC9wPgorICAgICAqIDxwPldoZW5ldmVyIHRoZSBBRiBhbGdvcml0aG0gc3RhdGUgY2hhbmdlcywgYQogICAgICAqIE1TR19BVVRPRk9DVVMgbm90aWZpY2F0aW9uIG11c3QgYmUgc2VuZCBpZiBhIG5vdGlmaWNhdGlvbgotICAgICAqIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQuCi0gICAgICogPC9wPgorICAgICAqIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQuPC9wPgogICAgICAqIEBzZWUgI0NPTlRST0xfQUZfU1RBVEVfSU5BQ1RJVkUKICAgICAgKiBAc2VlICNDT05UUk9MX0FGX1NUQVRFX1BBU1NJVkVfU0NBTgogICAgICAqIEBzZWUgI0NPTlRST0xfQUZfU1RBVEVfUEFTU0lWRV9GT0NVU0VECkBAIC0yOTUsMTUgKzI1NiwxMSBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5jb250cm9sLmFmU3RhdGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhlIElEIHNlbnQgd2l0aCB0aGUgbGF0ZXN0Ci0gICAgICogQ0FNRVJBMl9UUklHR0VSX0FVVE9GT0NVUyBjYWxsCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE11c3QgYmUgMCBpZiBubyBDQU1FUkEyX1RSSUdHRVJfQVVUT0ZPQ1VTIHRyaWdnZXIKKyAgICAgKiA8cD5UaGUgSUQgc2VudCB3aXRoIHRoZSBsYXRlc3QKKyAgICAgKiBDQU1FUkEyX1RSSUdHRVJfQVVUT0ZPQ1VTIGNhbGw8L3A+CisgICAgICogPHA+TXVzdCBiZSAwIGlmIG5vIENBTUVSQTJfVFJJR0dFUl9BVVRPRk9DVVMgdHJpZ2dlcgogICAgICAqIHJlY2VpdmVkIHlldCBieSBIQUwuIEFsd2F5cyB1cGRhdGVkIGV2ZW4gaWYgQUYgYWxnb3JpdGhtCi0gICAgICogaWdub3JlcyB0aGUgdHJpZ2dlcgotICAgICAqIDwvcD4KKyAgICAgKiBpZ25vcmVzIHRoZSB0cmlnZ2VyPC9wPgogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KQEAgLTMxMSwxNCArMjY4LDEwIEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wuYWZUcmlnZ2VySWQiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hldGhlciBBV0IgaXMgY3VycmVudGx5IHNldHRpbmcgdGhlIGNvbG9yCisgICAgICogPHA+V2hldGhlciBBV0IgaXMgY3VycmVudGx5IHNldHRpbmcgdGhlIGNvbG9yCiAgICAgICogdHJhbnNmb3JtIGZpZWxkcywgYW5kIHdoYXQgaXRzIGlsbHVtaW5hdGlvbiB0YXJnZXQKLSAgICAgKiBpcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBbQkMgLSBBV0IgbG9jayxBV0IgbW9kZXNdCi0gICAgICogPC9wPgorICAgICAqIGlzPC9wPgorICAgICAqIDxwPltCQyAtIEFXQiBsb2NrLEFXQiBtb2Rlc108L3A+CiAgICAgICogQHNlZSAjQ09OVFJPTF9BV0JfTU9ERV9PRkYKICAgICAgKiBAc2VlICNDT05UUk9MX0FXQl9NT0RFX0FVVE8KICAgICAgKiBAc2VlICNDT05UUk9MX0FXQl9NT0RFX0lOQ0FOREVTQ0VOVApAQCAtMzMzLDQzICsyODYsMzIgQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5hd2JNb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExpc3Qgb2YgYXJlYXMgdG8gdXNlIGZvciBpbGx1bWluYW50Ci0gICAgICogZXN0aW1hdGlvbgotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBPbmx5IHVzZWQgaW4gQVVUTyBtb2RlLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBFYWNoIGFyZWEgaXMgYSByZWN0YW5nbGUgcGx1cyB3ZWlnaHQ6IHhtaW4sIHltaW4sCisgICAgICogPHA+TGlzdCBvZiBhcmVhcyB0byB1c2UgZm9yIGlsbHVtaW5hbnQKKyAgICAgKiBlc3RpbWF0aW9uPC9wPgorICAgICAqIDxwPk9ubHkgdXNlZCBpbiBBVVRPIG1vZGUuPC9wPgorICAgICAqIDxwPkVhY2ggYXJlYSBpcyBhIHJlY3RhbmdsZSBwbHVzIHdlaWdodDogeG1pbiwgeW1pbiwKICAgICAgKiB4bWF4LCB5bWF4LCB3ZWlnaHQuIFRoZSByZWN0YW5nbGUgaXMgZGVmaW5lZCBpbmNsdXNpdmUgb2YgdGhlCi0gICAgICogc3BlY2lmaWVkIGNvb3JkaW5hdGVzLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgYmFzZWQgb24gdGhlIGFjdGl2ZSBwaXhlbCBhcnJheSwKKyAgICAgKiBzcGVjaWZpZWQgY29vcmRpbmF0ZXMuPC9wPgorICAgICAqIDxwPlRoZSBjb29yZGluYXRlIHN5c3RlbSBpcyBiYXNlZCBvbiB0aGUgYWN0aXZlIHBpeGVsIGFycmF5LAogICAgICAqIHdpdGggKDAsMCkgYmVpbmcgdGhlIHRvcC1sZWZ0IHBpeGVsIGluIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXksIGFuZAogICAgICAqIChhbmRyb2lkLnNlbnNvci5pbmZvLmFjdGl2ZUFycmF5U2l6ZS53aWR0aCAtIDEsCiAgICAgICogYW5kcm9pZC5zZW5zb3IuaW5mby5hY3RpdmVBcnJheVNpemUuaGVpZ2h0IC0gMSkgYmVpbmcgdGhlCiAgICAgICogYm90dG9tLXJpZ2h0IHBpeGVsIGluIHRoZSBhY3RpdmUgcGl4ZWwgYXJyYXkuIFRoZSB3ZWlnaHQKLSAgICAgKiBzaG91bGQgYmUgbm9ubmVnYXRpdmUuCi0gICAgICogPC9wPjxwPgotICAgICAqIElmIGFsbCByZWdpb25zIGhhdmUgMCB3ZWlnaHQsIHRoZW4gbm8gc3BlY2lmaWMgbWV0ZXJpbmcgYXJlYQorICAgICAqIHNob3VsZCBiZSBub25uZWdhdGl2ZS48L3A+CisgICAgICogPHA+SWYgYWxsIHJlZ2lvbnMgaGF2ZSAwIHdlaWdodCwgdGhlbiBubyBzcGVjaWZpYyBtZXRlcmluZyBhcmVhCiAgICAgICogbmVlZHMgdG8gYmUgdXNlZCBieSB0aGUgSEFMLiBJZiB0aGUgbWV0ZXJpbmcgcmVnaW9uIGlzCiAgICAgICogb3V0c2lkZSB0aGUgY3VycmVudCBhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9uLCB0aGUgSEFMCiAgICAgICogc2hvdWxkIGlnbm9yZSB0aGUgc2VjdGlvbnMgb3V0c2lkZSB0aGUgcmVnaW9uIGFuZCBvdXRwdXQgdGhlCi0gICAgICogdXNlZCBzZWN0aW9ucyBpbiB0aGUgZnJhbWUgbWV0YWRhdGEKLSAgICAgKiA8L3A+CisgICAgICogdXNlZCBzZWN0aW9ucyBpbiB0aGUgZnJhbWUgbWV0YWRhdGE8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8aW50W10+IENPTlRST0xfQVdCX1JFR0lPTlMgPQogICAgICAgICAgICAgbmV3IEtleTxpbnRbXT4oImFuZHJvaWQuY29udHJvbC5hd2JSZWdpb25zIiwgaW50W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQ3VycmVudCBzdGF0ZSBvZiBBV0IgYWxnb3JpdGhtCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFdoZW5ldmVyIHRoZSBBV0IgYWxnb3JpdGhtIHN0YXRlIGNoYW5nZXMsIGEKKyAgICAgKiA8cD5DdXJyZW50IHN0YXRlIG9mIEFXQiBhbGdvcml0aG08L3A+CisgICAgICogPHA+V2hlbmV2ZXIgdGhlIEFXQiBhbGdvcml0aG0gc3RhdGUgY2hhbmdlcywgYQogICAgICAqIE1TR19BVVRPV0hJVEVCQUxBTkNFIG5vdGlmaWNhdGlvbiBtdXN0IGJlIHNlbmQgaWYgYQotICAgICAqIG5vdGlmaWNhdGlvbiBjYWxsYmFjayBpcyByZWdpc3RlcmVkLgotICAgICAqIDwvcD4KKyAgICAgKiBub3RpZmljYXRpb24gY2FsbGJhY2sgaXMgcmVnaXN0ZXJlZC48L3A+CiAgICAgICogQHNlZSAjQ09OVFJPTF9BV0JfU1RBVEVfSU5BQ1RJVkUKICAgICAgKiBAc2VlICNDT05UUk9MX0FXQl9TVEFURV9TRUFSQ0hJTkcKICAgICAgKiBAc2VlICNDT05UUk9MX0FXQl9TVEFURV9DT05WRVJHRUQKQEAgLTM3OSwxMCArMzIxLDggQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuY29udHJvbC5hd2JTdGF0ZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBPdmVyYWxsIG1vZGUgb2YgM0EgY29udHJvbAotICAgICAqIHJvdXRpbmVzCi0gICAgICogPC9wPgorICAgICAqIDxwPk92ZXJhbGwgbW9kZSBvZiAzQSBjb250cm9sCisgICAgICogcm91dGluZXM8L3A+CiAgICAgICogQHNlZSAjQ09OVFJPTF9NT0RFX09GRgogICAgICAqIEBzZWUgI0NPTlRST0xfTU9ERV9BVVRPCiAgICAgICogQHNlZSAjQ09OVFJPTF9NT0RFX1VTRV9TQ0VORV9NT0RFCkBAIC0zOTEsMTAgKzMzMSw4IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmNvbnRyb2wubW9kZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBPcGVyYXRpb24gbW9kZSBmb3IgZWRnZQotICAgICAqIGVuaGFuY2VtZW50Ci0gICAgICogPC9wPgorICAgICAqIDxwPk9wZXJhdGlvbiBtb2RlIGZvciBlZGdlCisgICAgICogZW5oYW5jZW1lbnQ8L3A+CiAgICAgICogQHNlZSAjRURHRV9NT0RFX09GRgogICAgICAqIEBzZWUgI0VER0VfTU9ERV9GQVNUCiAgICAgICogQHNlZSAjRURHRV9NT0RFX0hJR0hfUVVBTElUWQpAQCAtNDAzLDkgKzM0MSw3IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmVkZ2UubW9kZSIsIGludC5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBTZWxlY3QgZmxhc2ggb3BlcmF0aW9uIG1vZGUKLSAgICAgKiA8L3A+CisgICAgICogPHA+U2VsZWN0IGZsYXNoIG9wZXJhdGlvbiBtb2RlPC9wPgogICAgICAqIEBzZWUgI0ZMQVNIX01PREVfT0ZGCiAgICAgICogQHNlZSAjRkxBU0hfTU9ERV9TSU5HTEUKICAgICAgKiBAc2VlICNGTEFTSF9NT0RFX1RPUkNICkBAIC00MTQsMTAgKzM1MCw4IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmZsYXNoLm1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQ3VycmVudCBzdGF0ZSBvZiB0aGUgZmxhc2gKLSAgICAgKiB1bml0Ci0gICAgICogPC9wPgorICAgICAqIDxwPkN1cnJlbnQgc3RhdGUgb2YgdGhlIGZsYXNoCisgICAgICogdW5pdDwvcD4KICAgICAgKiBAc2VlICNGTEFTSF9TVEFURV9VTkFWQUlMQUJMRQogICAgICAqIEBzZWUgI0ZMQVNIX1NUQVRFX0NIQVJHSU5HCiAgICAgICogQHNlZSAjRkxBU0hfU1RBVEVfUkVBRFkKQEAgLTQyNywxNDAgKzM2MSwxMDAgQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuZmxhc2guc3RhdGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogR1BTIGNvb3JkaW5hdGVzIHRvIGluY2x1ZGUgaW4gb3V0cHV0IEpQRUcKLSAgICAgKiBFWElGCi0gICAgICogPC9wPgorICAgICAqIDxwPkdQUyBjb29yZGluYXRlcyB0byBpbmNsdWRlIGluIG91dHB1dCBKUEVHCisgICAgICogRVhJRjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxkb3VibGVbXT4gSlBFR19HUFNfQ09PUkRJTkFURVMgPQogICAgICAgICAgICAgbmV3IEtleTxkb3VibGVbXT4oImFuZHJvaWQuanBlZy5ncHNDb29yZGluYXRlcyIsIGRvdWJsZVtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIDMyIGNoYXJhY3RlcnMgZGVzY3JpYmluZyBHUFMgYWxnb3JpdGhtIHRvCi0gICAgICogaW5jbHVkZSBpbiBFWElGCi0gICAgICogPC9wPgorICAgICAqIDxwPjMyIGNoYXJhY3RlcnMgZGVzY3JpYmluZyBHUFMgYWxnb3JpdGhtIHRvCisgICAgICogaW5jbHVkZSBpbiBFWElGPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PFN0cmluZz4gSlBFR19HUFNfUFJPQ0VTU0lOR19NRVRIT0QgPQogICAgICAgICAgICAgbmV3IEtleTxTdHJpbmc+KCJhbmRyb2lkLmpwZWcuZ3BzUHJvY2Vzc2luZ01ldGhvZCIsIFN0cmluZy5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaW1lIEdQUyBmaXggd2FzIG1hZGUgdG8gaW5jbHVkZSBpbgotICAgICAqIEVYSUYKLSAgICAgKiA8L3A+CisgICAgICogPHA+VGltZSBHUFMgZml4IHdhcyBtYWRlIHRvIGluY2x1ZGUgaW4KKyAgICAgKiBFWElGPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PExvbmc+IEpQRUdfR1BTX1RJTUVTVEFNUCA9CiAgICAgICAgICAgICBuZXcgS2V5PExvbmc+KCJhbmRyb2lkLmpwZWcuZ3BzVGltZXN0YW1wIiwgbG9uZy5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBPcmllbnRhdGlvbiBvZiBKUEVHIGltYWdlIHRvCi0gICAgICogd3JpdGUKLSAgICAgKiA8L3A+CisgICAgICogPHA+T3JpZW50YXRpb24gb2YgSlBFRyBpbWFnZSB0bworICAgICAqIHdyaXRlPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEludGVnZXI+IEpQRUdfT1JJRU5UQVRJT04gPQogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5qcGVnLm9yaWVudGF0aW9uIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIENvbXByZXNzaW9uIHF1YWxpdHkgb2YgdGhlIGZpbmFsIEpQRUcKLSAgICAgKiBpbWFnZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiA4NS05NSBpcyB0eXBpY2FsIHVzYWdlIHJhbmdlCi0gICAgICogPC9wPgorICAgICAqIDxwPkNvbXByZXNzaW9uIHF1YWxpdHkgb2YgdGhlIGZpbmFsIEpQRUcKKyAgICAgKiBpbWFnZTwvcD4KKyAgICAgKiA8cD44NS05NSBpcyB0eXBpY2FsIHVzYWdlIHJhbmdlPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEJ5dGU+IEpQRUdfUVVBTElUWSA9CiAgICAgICAgICAgICBuZXcgS2V5PEJ5dGU+KCJhbmRyb2lkLmpwZWcucXVhbGl0eSIsIGJ5dGUuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogQ29tcHJlc3Npb24gcXVhbGl0eSBvZiBKUEVHCi0gICAgICogdGh1bWJuYWlsCi0gICAgICogPC9wPgorICAgICAqIDxwPkNvbXByZXNzaW9uIHF1YWxpdHkgb2YgSlBFRworICAgICAqIHRodW1ibmFpbDwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxCeXRlPiBKUEVHX1RIVU1CTkFJTF9RVUFMSVRZID0KICAgICAgICAgICAgIG5ldyBLZXk8Qnl0ZT4oImFuZHJvaWQuanBlZy50aHVtYm5haWxRdWFsaXR5IiwgYnl0ZS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBSZXNvbHV0aW9uIG9mIGVtYmVkZGVkIEpQRUcKLSAgICAgKiB0aHVtYm5haWwKLSAgICAgKiA8L3A+CisgICAgICogPHA+UmVzb2x1dGlvbiBvZiBlbWJlZGRlZCBKUEVHCisgICAgICogdGh1bWJuYWlsPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5TaXplPiBKUEVHX1RIVU1CTkFJTF9TSVpFID0KICAgICAgICAgICAgIG5ldyBLZXk8YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLlNpemU+KCJhbmRyb2lkLmpwZWcudGh1bWJuYWlsU2l6ZSIsIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5TaXplLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFNpemUgb2YgdGhlIGxlbnMgYXBlcnR1cmUKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogV2lsbCBub3QgYmUgc3VwcG9ydGVkIG9uIG1vc3QgZGV2aWNlcy4gQ2FuIG9ubHkKLSAgICAgKiBwaWNrIGZyb20gc3VwcG9ydGVkIGxpc3QKLSAgICAgKiA8L3A+CisgICAgICogPHA+U2l6ZSBvZiB0aGUgbGVucyBhcGVydHVyZTwvcD4KKyAgICAgKiA8cD5XaWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gbW9zdCBkZXZpY2VzLiBDYW4gb25seQorICAgICAqIHBpY2sgZnJvbSBzdXBwb3J0ZWQgbGlzdDwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxGbG9hdD4gTEVOU19BUEVSVFVSRSA9CiAgICAgICAgICAgICBuZXcgS2V5PEZsb2F0PigiYW5kcm9pZC5sZW5zLmFwZXJ0dXJlIiwgZmxvYXQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogU3RhdGUgb2YgbGVucyBuZXV0cmFsIGRlbnNpdHkKLSAgICAgKiBmaWx0ZXIocykKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogV2lsbCBub3QgYmUgc3VwcG9ydGVkIG9uIG1vc3QgZGV2aWNlcy4gQ2FuIG9ubHkKLSAgICAgKiBwaWNrIGZyb20gc3VwcG9ydGVkIGxpc3QKLSAgICAgKiA8L3A+CisgICAgICogPHA+U3RhdGUgb2YgbGVucyBuZXV0cmFsIGRlbnNpdHkKKyAgICAgKiBmaWx0ZXIocyk8L3A+CisgICAgICogPHA+V2lsbCBub3QgYmUgc3VwcG9ydGVkIG9uIG1vc3QgZGV2aWNlcy4gQ2FuIG9ubHkKKyAgICAgKiBwaWNrIGZyb20gc3VwcG9ydGVkIGxpc3Q8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8RmxvYXQ+IExFTlNfRklMVEVSX0RFTlNJVFkgPQogICAgICAgICAgICAgbmV3IEtleTxGbG9hdD4oImFuZHJvaWQubGVucy5maWx0ZXJEZW5zaXR5IiwgZmxvYXQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGVucyBvcHRpY2FsIHpvb20gc2V0dGluZwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gbW9zdCBkZXZpY2VzLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MZW5zIG9wdGljYWwgem9vbSBzZXR0aW5nPC9wPgorICAgICAqIDxwPldpbGwgbm90IGJlIHN1cHBvcnRlZCBvbiBtb3N0IGRldmljZXMuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEZsb2F0PiBMRU5TX0ZPQ0FMX0xFTkdUSCA9CiAgICAgICAgICAgICBuZXcgS2V5PEZsb2F0PigiYW5kcm9pZC5sZW5zLmZvY2FsTGVuZ3RoIiwgZmxvYXQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRGlzdGFuY2UgdG8gcGxhbmUgb2Ygc2hhcnBlc3QgZm9jdXMsCi0gICAgICogbWVhc3VyZWQgZnJvbSBmcm9udG1vc3Qgc3VyZmFjZSBvZiB0aGUgbGVucwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBTaG91bGQgYmUgemVybyBmb3IgZml4ZWQtZm9jdXMgY2FtZXJhcwotICAgICAqIDwvcD4KKyAgICAgKiA8cD5EaXN0YW5jZSB0byBwbGFuZSBvZiBzaGFycGVzdCBmb2N1cywKKyAgICAgKiBtZWFzdXJlZCBmcm9tIGZyb250bW9zdCBzdXJmYWNlIG9mIHRoZSBsZW5zPC9wPgorICAgICAqIDxwPlNob3VsZCBiZSB6ZXJvIGZvciBmaXhlZC1mb2N1cyBjYW1lcmFzPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEZsb2F0PiBMRU5TX0ZPQ1VTX0RJU1RBTkNFID0KICAgICAgICAgICAgIG5ldyBLZXk8RmxvYXQ+KCJhbmRyb2lkLmxlbnMuZm9jdXNEaXN0YW5jZSIsIGZsb2F0LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSByYW5nZSBvZiBzY2VuZSBkaXN0YW5jZXMgdGhhdCBhcmUgaW4KLSAgICAgKiBzaGFycCBmb2N1cyAoZGVwdGggb2YgZmllbGQpCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIElmIHZhcmlhYmxlIGZvY3VzIG5vdCBzdXBwb3J0ZWQsIGNhbiBzdGlsbCByZXBvcnQKLSAgICAgKiBmaXhlZCBkZXB0aCBvZiBmaWVsZCByYW5nZQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGUgcmFuZ2Ugb2Ygc2NlbmUgZGlzdGFuY2VzIHRoYXQgYXJlIGluCisgICAgICogc2hhcnAgZm9jdXMgKGRlcHRoIG9mIGZpZWxkKTwvcD4KKyAgICAgKiA8cD5JZiB2YXJpYWJsZSBmb2N1cyBub3Qgc3VwcG9ydGVkLCBjYW4gc3RpbGwgcmVwb3J0CisgICAgICogZml4ZWQgZGVwdGggb2YgZmllbGQgcmFuZ2U8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZmxvYXRbXT4gTEVOU19GT0NVU19SQU5HRSA9CiAgICAgICAgICAgICBuZXcgS2V5PGZsb2F0W10+KCJhbmRyb2lkLmxlbnMuZm9jdXNSYW5nZSIsIGZsb2F0W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hldGhlciBvcHRpY2FsIGltYWdlIHN0YWJpbGl6YXRpb24gaXMKLSAgICAgKiBlbmFibGVkLgotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaWxsIG5vdCBiZSBzdXBwb3J0ZWQgb24gbW9zdCBkZXZpY2VzLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5XaGV0aGVyIG9wdGljYWwgaW1hZ2Ugc3RhYmlsaXphdGlvbiBpcworICAgICAqIGVuYWJsZWQuPC9wPgorICAgICAqIDxwPldpbGwgbm90IGJlIHN1cHBvcnRlZCBvbiBtb3N0IGRldmljZXMuPC9wPgogICAgICAqIEBzZWUgI0xFTlNfT1BUSUNBTF9TVEFCSUxJWkFUSU9OX01PREVfT0ZGCiAgICAgICogQHNlZSAjTEVOU19PUFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERV9PTgogICAgICAqLwpAQCAtNTY4LDkgKzQ2Miw3IEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLmxlbnMub3B0aWNhbFN0YWJpbGl6YXRpb25Nb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEN1cnJlbnQgbGVucyBzdGF0dXMKLSAgICAgKiA8L3A+CisgICAgICogPHA+Q3VycmVudCBsZW5zIHN0YXR1czwvcD4KICAgICAgKiBAc2VlICNMRU5TX1NUQVRFX1NUQVRJT05BUlkKICAgICAgKiBAc2VlICNMRU5TX1NUQVRFX01PVklORwogICAgICAqLwpAQCAtNTc4LDEwICs0NzAsOCBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5sZW5zLnN0YXRlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIE1vZGUgb2Ygb3BlcmF0aW9uIGZvciB0aGUgbm9pc2UgcmVkdWN0aW9uCi0gICAgICogYWxnb3JpdGhtCi0gICAgICogPC9wPgorICAgICAqIDxwPk1vZGUgb2Ygb3BlcmF0aW9uIGZvciB0aGUgbm9pc2UgcmVkdWN0aW9uCisgICAgICogYWxnb3JpdGhtPC9wPgogICAgICAqIEBzZWUgI05PSVNFX1JFRFVDVElPTl9NT0RFX09GRgogICAgICAqIEBzZWUgI05PSVNFX1JFRFVDVElPTl9NT0RFX0ZBU1QKICAgICAgKiBAc2VlICNOT0lTRV9SRURVQ1RJT05fTU9ERV9ISUdIX1FVQUxJVFkKQEAgLTU5MCwxNCArNDgwLDExIEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLm5vaXNlUmVkdWN0aW9uLm1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogV2hldGhlciBhIHJlc3VsdCBnaXZlbiB0byB0aGUgZnJhbWV3b3JrIGlzIHRoZQorICAgICAqIDxwPldoZXRoZXIgYSByZXN1bHQgZ2l2ZW4gdG8gdGhlIGZyYW1ld29yayBpcyB0aGUKICAgICAgKiBmaW5hbCBvbmUgZm9yIHRoZSBjYXB0dXJlLCBvciBvbmx5IGEgcGFydGlhbCB0aGF0IGNvbnRhaW5zIGEKICAgICAgKiBzdWJzZXQgb2YgdGhlIGZ1bGwgc2V0IG9mIGR5bmFtaWMgbWV0YWRhdGEKLSAgICAgKiB2YWx1ZXMuCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFRoZSBlbnRyaWVzIGluIHRoZSByZXN1bHQgbWV0YWRhdGEgYnVmZmVycyBmb3IgYQorICAgICAqIHZhbHVlcy48L3A+CisgICAgICogPHA+VGhlIGVudHJpZXMgaW4gdGhlIHJlc3VsdCBtZXRhZGF0YSBidWZmZXJzIGZvciBhCiAgICAgICogc2luZ2xlIGNhcHR1cmUgbWF5IG5vdCBvdmVybGFwLCBleGNlcHQgZm9yIHRoaXMgZW50cnkuIFRoZQogICAgICAqIEZJTkFMIGJ1ZmZlcnMgbXVzdCByZXRhaW4gRklGTyBvcmRlcmluZyByZWxhdGl2ZSB0byB0aGUKICAgICAgKiByZXF1ZXN0cyB0aGF0IGdlbmVyYXRlIHRoZW0sIHNvIHRoZSBGSU5BTCBidWZmZXIgZm9yIGZyYW1lIDMgbXVzdApAQCAtNjA1LDggKzQ5Miw3IEBACiAgICAgICogYmVmb3JlIHRoZSBGSU5BTCBidWZmZXIgZm9yIGZyYW1lIDQuIFBBUlRJQUwgYnVmZmVycyBtYXkgYmUgcmV0dXJuZWQKICAgICAgKiBpbiBhbnkgb3JkZXIgcmVsYXRpdmUgdG8gb3RoZXIgZnJhbWVzLCBidXQgYWxsIFBBUlRJQUwgYnVmZmVycyBmb3IgYSBnaXZlbgogICAgICAqIGNhcHR1cmUgbXVzdCBhcnJpdmUgYmVmb3JlIHRoZSBGSU5BTCBidWZmZXIgZm9yIHRoYXQgY2FwdHVyZS4gVGhpcyBlbnRyeSBtYXkKLSAgICAgKiBvbmx5IGJlIHVzZWQgYnkgdGhlIEhBTCBpZiBxdWlya3MudXNlUGFydGlhbFJlc3VsdCBpcyBzZXQgdG8gMS4KLSAgICAgKiA8L3A+CisgICAgICogb25seSBiZSB1c2VkIGJ5IHRoZSBIQUwgaWYgcXVpcmtzLnVzZVBhcnRpYWxSZXN1bHQgaXMgc2V0IHRvIDEuPC9wPgogICAgICAqCiAgICAgICogPGI+T3B0aW9uYWw8L2I+IC0gVGhpcyB2YWx1ZSBtYXkgYmUgbnVsbCBvbiBzb21lIGRldmljZXMuCiAgICAgICoKQEAgLTYxNiwyNCArNTAyLDE4IEBACiAgICAgICAgICAgICBuZXcgS2V5PEJvb2xlYW4+KCJhbmRyb2lkLnF1aXJrcy5wYXJ0aWFsUmVzdWx0IiwgYm9vbGVhbi5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBIGZyYW1lIGNvdW50ZXIgc2V0IGJ5IHRoZSBmcmFtZXdvcmsuIFRoaXMgdmFsdWUgbW9ub3RvbmljYWxseQorICAgICAqIDxwPkEgZnJhbWUgY291bnRlciBzZXQgYnkgdGhlIGZyYW1ld29yay4gVGhpcyB2YWx1ZSBtb25vdG9uaWNhbGx5CiAgICAgICogaW5jcmVhc2VzIHdpdGggZXZlcnkgbmV3IHJlc3VsdCAodGhhdCBpcywgZWFjaCBuZXcgcmVzdWx0IGhhcyBhIHVuaXF1ZQotICAgICAqIGZyYW1lQ291bnQgdmFsdWUpLgotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBSZXNldCBvbiByZWxlYXNlKCkKLSAgICAgKiA8L3A+CisgICAgICogZnJhbWVDb3VudCB2YWx1ZSkuPC9wPgorICAgICAqIDxwPlJlc2V0IG9uIHJlbGVhc2UoKTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxJbnRlZ2VyPiBSRVFVRVNUX0ZSQU1FX0NPVU5UID0KICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQucmVxdWVzdC5mcmFtZUNvdW50IiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIEFuIGFwcGxpY2F0aW9uLXNwZWNpZmllZCBJRCBmb3IgdGhlIGN1cnJlbnQKKyAgICAgKiA8cD5BbiBhcHBsaWNhdGlvbi1zcGVjaWZpZWQgSUQgZm9yIHRoZSBjdXJyZW50CiAgICAgICogcmVxdWVzdC4gTXVzdCBiZSBtYWludGFpbmVkIHVuY2hhbmdlZCBpbiBvdXRwdXQKLSAgICAgKiBmcmFtZQotICAgICAqIDwvcD4KKyAgICAgKiBmcmFtZTwvcD4KICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCkBAIC02NDEsMzIgKzUyMSwyNCBAQAogICAgICAgICAgICAgbmV3IEtleTxJbnRlZ2VyPigiYW5kcm9pZC5yZXF1ZXN0LmlkIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqICh4LCB5LCB3aWR0aCwgaGVpZ2h0KS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogQSByZWN0YW5nbGUgd2l0aCB0aGUgdG9wLWxldmVsIGNvcm5lciBvZiAoeCx5KSBhbmQgc2l6ZQorICAgICAqIDxwPih4LCB5LCB3aWR0aCwgaGVpZ2h0KS48L3A+CisgICAgICogPHA+QSByZWN0YW5nbGUgd2l0aCB0aGUgdG9wLWxldmVsIGNvcm5lciBvZiAoeCx5KSBhbmQgc2l6ZQogICAgICAqICh3aWR0aCwgaGVpZ2h0KS4gVGhlIHJlZ2lvbiBvZiB0aGUgc2Vuc29yIHRoYXQgaXMgdXNlZCBmb3IKICAgICAgKiBvdXRwdXQuIEVhY2ggc3RyZWFtIG11c3QgdXNlIHRoaXMgcmVjdGFuZ2xlIHRvIHByb2R1Y2UgaXRzCiAgICAgICogb3V0cHV0LCBjcm9wcGluZyB0byBhIHNtYWxsZXIgcmVnaW9uIGlmIG5lY2Vzc2FyeSB0bwotICAgICAqIG1haW50YWluIHRoZSBzdHJlYW0ncyBhc3BlY3QgcmF0aW8uCi0gICAgICogPC9wPjxwPgotICAgICAqIEhBTDIueCB1c2VzIG9ubHkgKHgsIHksIHdpZHRoKQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBBbnkgYWRkaXRpb25hbCBwZXItc3RyZWFtIGNyb3BwaW5nIG11c3QgYmUgZG9uZSB0bwotICAgICAqIG1heGltaXplIHRoZSBmaW5hbCBwaXhlbCBhcmVhIG9mIHRoZSBzdHJlYW0uCi0gICAgICogPC9wPjxwPgotICAgICAqIEZvciBleGFtcGxlLCBpZiB0aGUgY3JvcCByZWdpb24gaXMgc2V0IHRvIGEgNDozIGFzcGVjdAorICAgICAqIG1haW50YWluIHRoZSBzdHJlYW0ncyBhc3BlY3QgcmF0aW8uPC9wPgorICAgICAqIDxwPkhBTDIueCB1c2VzIG9ubHkgKHgsIHksIHdpZHRoKTwvcD4KKyAgICAgKiA8cD5BbnkgYWRkaXRpb25hbCBwZXItc3RyZWFtIGNyb3BwaW5nIG11c3QgYmUgZG9uZSB0bworICAgICAqIG1heGltaXplIHRoZSBmaW5hbCBwaXhlbCBhcmVhIG9mIHRoZSBzdHJlYW0uPC9wPgorICAgICAqIDxwPkZvciBleGFtcGxlLCBpZiB0aGUgY3JvcCByZWdpb24gaXMgc2V0IHRvIGEgNDozIGFzcGVjdAogICAgICAqIHJhdGlvLCB0aGVuIDQ6MyBzdHJlYW1zIHNob3VsZCB1c2UgdGhlIGV4YWN0IGNyb3AKICAgICAgKiByZWdpb24uIDE2Ojkgc3RyZWFtcyBzaG91bGQgZnVydGhlciBjcm9wIHZlcnRpY2FsbHkKLSAgICAgKiAobGV0dGVyYm94KS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogQ29udmVyc2VseSwgaWYgdGhlIGNyb3AgcmVnaW9uIGlzIHNldCB0byBhIDE2OjksIHRoZW4gNDozCisgICAgICogKGxldHRlcmJveCkuPC9wPgorICAgICAqIDxwPkNvbnZlcnNlbHksIGlmIHRoZSBjcm9wIHJlZ2lvbiBpcyBzZXQgdG8gYSAxNjo5LCB0aGVuIDQ6MwogICAgICAqIG91dHB1dHMgc2hvdWxkIGNyb3AgaG9yaXpvbnRhbGx5IChwaWxsYXJib3gpLCBhbmQgMTY6OQogICAgICAqIHN0cmVhbXMgc2hvdWxkIG1hdGNoIGV4YWN0bHkuIFRoZXNlIGFkZGl0aW9uYWwgY3JvcHMgbXVzdAotICAgICAqIGJlIGNlbnRlcmVkIHdpdGhpbiB0aGUgY3JvcCByZWdpb24uCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBvdXRwdXQgc3RyZWFtcyBtdXN0IG1haW50YWluIHNxdWFyZSBwaXhlbHMgYXQgYWxsCisgICAgICogYmUgY2VudGVyZWQgd2l0aGluIHRoZSBjcm9wIHJlZ2lvbi48L3A+CisgICAgICogPHA+VGhlIG91dHB1dCBzdHJlYW1zIG11c3QgbWFpbnRhaW4gc3F1YXJlIHBpeGVscyBhdCBhbGwKICAgICAgKiB0aW1lcywgbm8gbWF0dGVyIHdoYXQgdGhlIHJlbGF0aXZlIGFzcGVjdCByYXRpb3Mgb2YgdGhlCiAgICAgICogY3JvcCByZWdpb24gYW5kIHRoZSBzdHJlYW0gYXJlLiAgTmVnYXRpdmUgdmFsdWVzIGZvcgogICAgICAqIGNvcm5lciBhcmUgYWxsb3dlZCBmb3IgcmF3IG91dHB1dCBpZiBmdWxsIHBpeGVsIGFycmF5IGlzCkBAIC02NzcsNzcgKzU0OSw1NSBAQAogICAgICAqIGJlIHNldCB0byBiZSBzbWFsbGVyIHRoYW4gZmxvb3IoIGFjdGl2ZUFycmF5U2l6ZS53aWR0aCAvCiAgICAgICogYW5kcm9pZC5zY2FsZXIubWF4RGlnaXRhbFpvb20gKSBhbmQgZmxvb3IoCiAgICAgICogYWN0aXZlQXJyYXlTaXplLmhlaWdodCAvIGFuZHJvaWQuc2NhbGVyLm1heERpZ2l0YWxab29tKSwKLSAgICAgKiByZXNwZWN0aXZlbHkuCi0gICAgICogPC9wPgorICAgICAqIHJlc3BlY3RpdmVseS48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8YW5kcm9pZC5ncmFwaGljcy5SZWN0PiBTQ0FMRVJfQ1JPUF9SRUdJT04gPQogICAgICAgICAgICAgbmV3IEtleTxhbmRyb2lkLmdyYXBoaWNzLlJlY3Q+KCJhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9uIiwgYW5kcm9pZC5ncmFwaGljcy5SZWN0LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIER1cmF0aW9uIGVhY2ggcGl4ZWwgaXMgZXhwb3NlZCB0bwotICAgICAqIGxpZ2h0LgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiB0aGUgc2Vuc29yIGNhbid0IGV4cG9zZSB0aGlzIGV4YWN0IGR1cmF0aW9uLCBpdCBzaG91bGQgc2hvcnRlbiB0aGUKLSAgICAgKiBkdXJhdGlvbiBleHBvc2VkIHRvIHRoZSBuZWFyZXN0IHBvc3NpYmxlIHZhbHVlIChyYXRoZXIgdGhhbiBleHBvc2UgbG9uZ2VyKS4KLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogMS8xMDAwMCAtIDMwIHNlYyByYW5nZS4gTm8gYnVsYiBtb2RlCi0gICAgICogPC9wPgorICAgICAqIDxwPkR1cmF0aW9uIGVhY2ggcGl4ZWwgaXMgZXhwb3NlZCB0bworICAgICAqIGxpZ2h0LjwvcD4KKyAgICAgKiA8cD5JZiB0aGUgc2Vuc29yIGNhbid0IGV4cG9zZSB0aGlzIGV4YWN0IGR1cmF0aW9uLCBpdCBzaG91bGQgc2hvcnRlbiB0aGUKKyAgICAgKiBkdXJhdGlvbiBleHBvc2VkIHRvIHRoZSBuZWFyZXN0IHBvc3NpYmxlIHZhbHVlIChyYXRoZXIgdGhhbiBleHBvc2UgbG9uZ2VyKS48L3A+CisgICAgICogPHA+MS8xMDAwMCAtIDMwIHNlYyByYW5nZS4gTm8gYnVsYiBtb2RlPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PExvbmc+IFNFTlNPUl9FWFBPU1VSRV9USU1FID0KICAgICAgICAgICAgIG5ldyBLZXk8TG9uZz4oImFuZHJvaWQuc2Vuc29yLmV4cG9zdXJlVGltZSIsIGxvbmcuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogRHVyYXRpb24gZnJvbSBzdGFydCBvZiBmcmFtZSBleHBvc3VyZSB0bwotICAgICAqIHN0YXJ0IG9mIG5leHQgZnJhbWUgZXhwb3N1cmUKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogRXhwb3N1cmUgdGltZSBoYXMgcHJpb3JpdHksIHNvIGR1cmF0aW9uIGlzIHNldCB0bwotICAgICAqIG1heChkdXJhdGlvbiwgZXhwb3N1cmUgdGltZSArIG92ZXJoZWFkKQotICAgICAqIDwvcD4KKyAgICAgKiA8cD5EdXJhdGlvbiBmcm9tIHN0YXJ0IG9mIGZyYW1lIGV4cG9zdXJlIHRvCisgICAgICogc3RhcnQgb2YgbmV4dCBmcmFtZSBleHBvc3VyZTwvcD4KKyAgICAgKiA8cD5FeHBvc3VyZSB0aW1lIGhhcyBwcmlvcml0eSwgc28gZHVyYXRpb24gaXMgc2V0IHRvCisgICAgICogbWF4KGR1cmF0aW9uLCBleHBvc3VyZSB0aW1lICsgb3ZlcmhlYWQpPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PExvbmc+IFNFTlNPUl9GUkFNRV9EVVJBVElPTiA9CiAgICAgICAgICAgICBuZXcgS2V5PExvbmc+KCJhbmRyb2lkLnNlbnNvci5mcmFtZUR1cmF0aW9uIiwgbG9uZy5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBHYWluIGFwcGxpZWQgdG8gaW1hZ2UgZGF0YS4gTXVzdCBiZQorICAgICAqIDxwPkdhaW4gYXBwbGllZCB0byBpbWFnZSBkYXRhLiBNdXN0IGJlCiAgICAgICogaW1wbGVtZW50ZWQgdGhyb3VnaCBhbmFsb2cgZ2FpbiBvbmx5IGlmIHNldCB0byB2YWx1ZXMKLSAgICAgKiBiZWxvdyAnbWF4aW11bSBhbmFsb2cgc2Vuc2l0aXZpdHknLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJZiB0aGUgc2Vuc29yIGNhbid0IGFwcGx5IHRoaXMgZXhhY3QgZ2FpbiwgaXQgc2hvdWxkIGxlc3NlbiB0aGUKLSAgICAgKiBnYWluIHRvIHRoZSBuZWFyZXN0IHBvc3NpYmxlIHZhbHVlIChyYXRoZXIgdGhhbiBnYWluIG1vcmUpLgotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBJU08gMTIyMzI6MjAwNiBSRUkgbWV0aG9kCi0gICAgICogPC9wPgorICAgICAqIGJlbG93ICdtYXhpbXVtIGFuYWxvZyBzZW5zaXRpdml0eScuPC9wPgorICAgICAqIDxwPklmIHRoZSBzZW5zb3IgY2FuJ3QgYXBwbHkgdGhpcyBleGFjdCBnYWluLCBpdCBzaG91bGQgbGVzc2VuIHRoZQorICAgICAqIGdhaW4gdG8gdGhlIG5lYXJlc3QgcG9zc2libGUgdmFsdWUgKHJhdGhlciB0aGFuIGdhaW4gbW9yZSkuPC9wPgorICAgICAqIDxwPklTTyAxMjIzMjoyMDA2IFJFSSBtZXRob2Q8L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8SW50ZWdlcj4gU0VOU09SX1NFTlNJVElWSVRZID0KICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQuc2Vuc29yLnNlbnNpdGl2aXR5IiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRpbWUgYXQgc3RhcnQgb2YgZXhwb3N1cmUgb2YgZmlyc3QKLSAgICAgKiByb3cKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogTW9ub3RvbmljLCBzaG91bGQgYmUgc3luY2VkIHRvIG90aGVyIHRpbWVzdGFtcHMgaW4KLSAgICAgKiBzeXN0ZW0KLSAgICAgKiA8L3A+CisgICAgICogPHA+VGltZSBhdCBzdGFydCBvZiBleHBvc3VyZSBvZiBmaXJzdAorICAgICAqIHJvdzwvcD4KKyAgICAgKiA8cD5Nb25vdG9uaWMsIHNob3VsZCBiZSBzeW5jZWQgdG8gb3RoZXIgdGltZXN0YW1wcyBpbgorICAgICAqIHN5c3RlbTwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxMb25nPiBTRU5TT1JfVElNRVNUQU1QID0KICAgICAgICAgICAgIG5ldyBLZXk8TG9uZz4oImFuZHJvaWQuc2Vuc29yLnRpbWVzdGFtcCIsIGxvbmcuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhlIHRlbXBlcmF0dXJlIG9mIHRoZSBzZW5zb3IsIHNhbXBsZWQgYXQgdGhlIHRpbWUKLSAgICAgKiBleHBvc3VyZSBiZWdhbiBmb3IgdGhpcyBmcmFtZS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIHRoZXJtYWwgZGlvZGUgYmVpbmcgcXVlcmllZCBzaG91bGQgYmUgaW5zaWRlIHRoZSBzZW5zb3IgUENCLCBvcgotICAgICAqIHNvbWV3aGVyZSBjbG9zZSB0byBpdC4KLSAgICAgKiA8L3A+CisgICAgICogPHA+VGhlIHRlbXBlcmF0dXJlIG9mIHRoZSBzZW5zb3IsIHNhbXBsZWQgYXQgdGhlIHRpbWUKKyAgICAgKiBleHBvc3VyZSBiZWdhbiBmb3IgdGhpcyBmcmFtZS48L3A+CisgICAgICogPHA+VGhlIHRoZXJtYWwgZGlvZGUgYmVpbmcgcXVlcmllZCBzaG91bGQgYmUgaW5zaWRlIHRoZSBzZW5zb3IgUENCLCBvcgorICAgICAqIHNvbWV3aGVyZSBjbG9zZSB0byBpdC48L3A+CiAgICAgICoKICAgICAgKiA8Yj5PcHRpb25hbDwvYj4gLSBUaGlzIHZhbHVlIG1heSBiZSBudWxsIG9uIHNvbWUgZGV2aWNlcy4KICAgICAgKgpAQCAtNzU5LDE2ICs2MDksMTIgQEAKICAgICAgICAgICAgIG5ldyBLZXk8RmxvYXQ+KCJhbmRyb2lkLnNlbnNvci50ZW1wZXJhdHVyZSIsIGZsb2F0LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFN0YXRlIG9mIHRoZSBmYWNlIGRldGVjdG9yCi0gICAgICogdW5pdAotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIGZhY2UgZGV0ZWN0aW9uIGlzIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGl0CisgICAgICogPHA+U3RhdGUgb2YgdGhlIGZhY2UgZGV0ZWN0b3IKKyAgICAgKiB1bml0PC9wPgorICAgICAqIDxwPldoZXRoZXIgZmFjZSBkZXRlY3Rpb24gaXMgZW5hYmxlZCwgYW5kIHdoZXRoZXIgaXQKICAgICAgKiBzaG91bGQgb3V0cHV0IGp1c3QgdGhlIGJhc2ljIGZpZWxkcyBvciB0aGUgZnVsbCBzZXQgb2YKICAgICAgKiBmaWVsZHMuIFZhbHVlIG11c3QgYmUgb25lIG9mIHRoZQotICAgICAqIGFuZHJvaWQuc3RhdGlzdGljcy5pbmZvLmF2YWlsYWJsZUZhY2VEZXRlY3RNb2Rlcy4KLSAgICAgKiA8L3A+CisgICAgICogYW5kcm9pZC5zdGF0aXN0aWNzLmluZm8uYXZhaWxhYmxlRmFjZURldGVjdE1vZGVzLjwvcD4KICAgICAgKiBAc2VlICNTVEFUSVNUSUNTX0ZBQ0VfREVURUNUX01PREVfT0ZGCiAgICAgICogQHNlZSAjU1RBVElTVElDU19GQUNFX0RFVEVDVF9NT0RFX1NJTVBMRQogICAgICAqIEBzZWUgI1NUQVRJU1RJQ1NfRkFDRV9ERVRFQ1RfTU9ERV9GVUxMCkBAIC03NzcsMTI5ICs2MjMsMTAwIEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLnN0YXRpc3RpY3MuZmFjZURldGVjdE1vZGUiLCBpbnQuY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGlzdCBvZiB1bmlxdWUgSURzIGZvciBkZXRlY3RlZAotICAgICAqIGZhY2VzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE9ubHkgYXZhaWxhYmxlIGlmIGZhY2VEZXRlY3RNb2RlID09IEZVTEwKLSAgICAgKiA8L3A+CisgICAgICogPHA+TGlzdCBvZiB1bmlxdWUgSURzIGZvciBkZXRlY3RlZAorICAgICAqIGZhY2VzPC9wPgorICAgICAqIDxwPk9ubHkgYXZhaWxhYmxlIGlmIGZhY2VEZXRlY3RNb2RlID09IEZVTEw8L3A+CisgICAgICoKKyAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGludFtdPiBTVEFUSVNUSUNTX0ZBQ0VfSURTID0KICAgICAgICAgICAgIG5ldyBLZXk8aW50W10+KCJhbmRyb2lkLnN0YXRpc3RpY3MuZmFjZUlkcyIsIGludFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIExpc3Qgb2YgbGFuZG1hcmtzIGZvciBkZXRlY3RlZAotICAgICAqIGZhY2VzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIE9ubHkgYXZhaWxhYmxlIGlmIGZhY2VEZXRlY3RNb2RlID09IEZVTEwKLSAgICAgKiA8L3A+CisgICAgICogPHA+TGlzdCBvZiBsYW5kbWFya3MgZm9yIGRldGVjdGVkCisgICAgICogZmFjZXM8L3A+CisgICAgICogPHA+T25seSBhdmFpbGFibGUgaWYgZmFjZURldGVjdE1vZGUgPT0gRlVMTDwvcD4KKyAgICAgKgorICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8aW50W10+IFNUQVRJU1RJQ1NfRkFDRV9MQU5ETUFSS1MgPQogICAgICAgICAgICAgbmV3IEtleTxpbnRbXT4oImFuZHJvaWQuc3RhdGlzdGljcy5mYWNlTGFuZG1hcmtzIiwgaW50W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGlzdCBvZiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlcyBmb3IgZGV0ZWN0ZWQKLSAgICAgKiBmYWNlcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBPbmx5IGF2YWlsYWJsZSBpZiBmYWNlRGV0ZWN0TW9kZSAhPSBPRkYKLSAgICAgKiA8L3A+CisgICAgICogPHA+TGlzdCBvZiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlcyBmb3IgZGV0ZWN0ZWQKKyAgICAgKiBmYWNlczwvcD4KKyAgICAgKiA8cD5Pbmx5IGF2YWlsYWJsZSBpZiBmYWNlRGV0ZWN0TW9kZSAhPSBPRkY8L3A+CisgICAgICoKKyAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGFuZHJvaWQuZ3JhcGhpY3MuUmVjdFtdPiBTVEFUSVNUSUNTX0ZBQ0VfUkVDVEFOR0xFUyA9CiAgICAgICAgICAgICBuZXcgS2V5PGFuZHJvaWQuZ3JhcGhpY3MuUmVjdFtdPigiYW5kcm9pZC5zdGF0aXN0aWNzLmZhY2VSZWN0YW5nbGVzIiwgYW5kcm9pZC5ncmFwaGljcy5SZWN0W10uY2xhc3MpOwogCiAgICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogTGlzdCBvZiB0aGUgZmFjZSBjb25maWRlbmNlIHNjb3JlcyBmb3IKLSAgICAgKiBkZXRlY3RlZCBmYWNlcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBPbmx5IGF2YWlsYWJsZSBpZiBmYWNlRGV0ZWN0TW9kZSAhPSBPRkYuIFRoZSB2YWx1ZSBzaG91bGQgYmUKLSAgICAgKiBtZWFuaW5nZnVsIChmb3IgZXhhbXBsZSwgc2V0dGluZyAxMDAgYXQgYWxsIHRpbWVzIGlzIGlsbGVnYWwpLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5MaXN0IG9mIHRoZSBmYWNlIGNvbmZpZGVuY2Ugc2NvcmVzIGZvcgorICAgICAqIGRldGVjdGVkIGZhY2VzPC9wPgorICAgICAqIDxwPk9ubHkgYXZhaWxhYmxlIGlmIGZhY2VEZXRlY3RNb2RlICE9IE9GRi4gVGhlIHZhbHVlIHNob3VsZCBiZQorICAgICAqIG1lYW5pbmdmdWwgKGZvciBleGFtcGxlLCBzZXR0aW5nIDEwMCBhdCBhbGwgdGltZXMgaXMgaWxsZWdhbCkuPC9wPgorICAgICAqCisgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxieXRlW10+IFNUQVRJU1RJQ1NfRkFDRV9TQ09SRVMgPQogICAgICAgICAgICAgbmV3IEtleTxieXRlW10+KCJhbmRyb2lkLnN0YXRpc3RpY3MuZmFjZVNjb3JlcyIsIGJ5dGVbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBBIGxvdy1yZXNvbHV0aW9uIG1hcCBvZiBsZW5zIHNoYWRpbmcsIHBlcgotICAgICAqIGNvbG9yIGNoYW5uZWwKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogQXNzdW1lIGJpbGluZWFyIGludGVycG9sYXRpb24gb2YgbWFwLiBUaGUgbGVhc3QKKyAgICAgKiA8cD5BIGxvdy1yZXNvbHV0aW9uIG1hcCBvZiBsZW5zIHNoYWRpbmcsIHBlcgorICAgICAqIGNvbG9yIGNoYW5uZWw8L3A+CisgICAgICogPHA+QXNzdW1lIGJpbGluZWFyIGludGVycG9sYXRpb24gb2YgbWFwLiBUaGUgbGVhc3QKICAgICAgKiBzaGFkZWQgc2VjdGlvbiBvZiB0aGUgaW1hZ2Ugc2hvdWxkIGhhdmUgYSBnYWluIGZhY3RvcgogICAgICAqIG9mIDE7IGFsbCBvdGhlciBzZWN0aW9ucyBzaG91bGQgaGF2ZSBnYWlucyBhYm92ZSAxLgogICAgICAqIHRoZSBtYXAgc2hvdWxkIGJlIG9uIHRoZSBvcmRlciBvZiAzMC00MCByb3dzLCBhbmQKLSAgICAgKiBtdXN0IGJlIHNtYWxsZXIgdGhhbiA2NHg2NC4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogV2hlbiBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5tb2RlID0gVFJBTlNGT1JNX01BVFJJWCwgdGhlIG1hcAotICAgICAqIG11c3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIGNvbG9yQ29ycmVjdGlvbiBzZXR0aW5ncy4KLSAgICAgKiA8L3A+CisgICAgICogbXVzdCBiZSBzbWFsbGVyIHRoYW4gNjR4NjQuPC9wPgorICAgICAqIDxwPldoZW4gYW5kcm9pZC5jb2xvckNvcnJlY3Rpb24ubW9kZSA9IFRSQU5TRk9STV9NQVRSSVgsIHRoZSBtYXAKKyAgICAgKiBtdXN0IHRha2UgaW50byBhY2NvdW50IHRoZSBjb2xvckNvcnJlY3Rpb24gc2V0dGluZ3MuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGZsb2F0W10+IFNUQVRJU1RJQ1NfTEVOU19TSEFESU5HX01BUCA9CiAgICAgICAgICAgICBuZXcgS2V5PGZsb2F0W10+KCJhbmRyb2lkLnN0YXRpc3RpY3MubGVuc1NoYWRpbmdNYXAiLCBmbG9hdFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSBiZXN0LWZpdCBjb2xvciBjaGFubmVsIGdhaW5zIGNhbGN1bGF0ZWQKLSAgICAgKiBieSB0aGUgSEFMJ3Mgc3RhdGlzdGljcyB1bml0cyBmb3IgdGhlIGN1cnJlbnQgb3V0cHV0IGZyYW1lCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFRoaXMgbWF5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBnYWlucyB1c2VkIGZvciB0aGlzIGZyYW1lLAorICAgICAqIDxwPlRoZSBiZXN0LWZpdCBjb2xvciBjaGFubmVsIGdhaW5zIGNhbGN1bGF0ZWQKKyAgICAgKiBieSB0aGUgSEFMJ3Mgc3RhdGlzdGljcyB1bml0cyBmb3IgdGhlIGN1cnJlbnQgb3V0cHV0IGZyYW1lPC9wPgorICAgICAqIDxwPlRoaXMgbWF5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBnYWlucyB1c2VkIGZvciB0aGlzIGZyYW1lLAogICAgICAqIHNpbmNlIHN0YXRpc3RpY3MgcHJvY2Vzc2luZyBvbiBkYXRhIGZyb20gYSBuZXcgZnJhbWUKICAgICAgKiB0eXBpY2FsbHkgY29tcGxldGVzIGFmdGVyIHRoZSB0cmFuc2Zvcm0gaGFzIGFscmVhZHkgYmVlbgotICAgICAqIGFwcGxpZWQgdG8gdGhhdCBmcmFtZS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIDQgY2hhbm5lbCBnYWlucyBhcmUgZGVmaW5lZCBpbiBCYXllciBkb21haW4sCi0gICAgICogc2VlIGFuZHJvaWQuY29sb3JDb3JyZWN0aW9uLmdhaW5zIGZvciBkZXRhaWxzLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBUaGlzIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgY2FsY3VsYXRlZCBieSB0aGUgQVdCIGJsb2NrLAotICAgICAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGFuZHJvaWQuY29udHJvbC4qIGN1cnJlbnQgdmFsdWVzLgotICAgICAqIDwvcD4KKyAgICAgKiBhcHBsaWVkIHRvIHRoYXQgZnJhbWUuPC9wPgorICAgICAqIDxwPlRoZSA0IGNoYW5uZWwgZ2FpbnMgYXJlIGRlZmluZWQgaW4gQmF5ZXIgZG9tYWluLAorICAgICAqIHNlZSBhbmRyb2lkLmNvbG9yQ29ycmVjdGlvbi5nYWlucyBmb3IgZGV0YWlscy48L3A+CisgICAgICogPHA+VGhpcyB2YWx1ZSBzaG91bGQgYWx3YXlzIGJlIGNhbGN1bGF0ZWQgYnkgdGhlIEFXQiBibG9jaywKKyAgICAgKiByZWdhcmRsZXNzIG9mIHRoZSBhbmRyb2lkLmNvbnRyb2wuKiBjdXJyZW50IHZhbHVlcy48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZmxvYXRbXT4gU1RBVElTVElDU19QUkVESUNURURfQ09MT1JfR0FJTlMgPQogICAgICAgICAgICAgbmV3IEtleTxmbG9hdFtdPigiYW5kcm9pZC5zdGF0aXN0aWNzLnByZWRpY3RlZENvbG9yR2FpbnMiLCBmbG9hdFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoZSBiZXN0LWZpdCBjb2xvciB0cmFuc2Zvcm0gbWF0cml4IGVzdGltYXRlCisgICAgICogPHA+VGhlIGJlc3QtZml0IGNvbG9yIHRyYW5zZm9ybSBtYXRyaXggZXN0aW1hdGUKICAgICAgKiBjYWxjdWxhdGVkIGJ5IHRoZSBIQUwncyBzdGF0aXN0aWNzIHVuaXRzIGZvciB0aGUgY3VycmVudAotICAgICAqIG91dHB1dCBmcmFtZQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgSEFMIG11c3QgcHJvdmlkZSB0aGUgZXN0aW1hdGUgZnJvbSBpdHMKKyAgICAgKiBvdXRwdXQgZnJhbWU8L3A+CisgICAgICogPHA+VGhlIEhBTCBtdXN0IHByb3ZpZGUgdGhlIGVzdGltYXRlIGZyb20gaXRzCiAgICAgICogc3RhdGlzdGljcyB1bml0IG9uIHRoZSB3aGl0ZSBiYWxhbmNlIHRyYW5zZm9ybXMgdG8gdXNlCiAgICAgICogZm9yIHRoZSBuZXh0IGZyYW1lLiBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGUgSEFMIGJlbGlldmVzCiAgICAgICogYXJlIHRoZSBiZXN0IGZpdCBmb3IgdGhlIGN1cnJlbnQgb3V0cHV0IGZyYW1lLiBUaGlzIG1heQogICAgICAqIGJlIGRpZmZlcmVudCB0aGFuIHRoZSB0cmFuc2Zvcm0gdXNlZCBmb3IgdGhpcyBmcmFtZSwgc2luY2UKICAgICAgKiBzdGF0aXN0aWNzIHByb2Nlc3Npbmcgb24gZGF0YSBmcm9tIGEgbmV3IGZyYW1lIHR5cGljYWxseQogICAgICAqIGNvbXBsZXRlcyBhZnRlciB0aGUgdHJhbnNmb3JtIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCB0bwotICAgICAqIHRoYXQgZnJhbWUuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZXNlIGVzdGltYXRlcyBtdXN0IGJlIHByb3ZpZGVkIGZvciBhbGwgZnJhbWVzLCBldmVuIGlmCi0gICAgICogY2FwdHVyZSBzZXR0aW5ncyBhbmQgY29sb3IgdHJhbnNmb3JtcyBhcmUgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbi4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhpcyB2YWx1ZSBzaG91bGQgYWx3YXlzIGJlIGNhbGN1bGF0ZWQgYnkgdGhlIEFXQiBibG9jaywKLSAgICAgKiByZWdhcmRsZXNzIG9mIHRoZSBhbmRyb2lkLmNvbnRyb2wuKiBjdXJyZW50IHZhbHVlcy4KLSAgICAgKiA8L3A+CisgICAgICogdGhhdCBmcmFtZS48L3A+CisgICAgICogPHA+VGhlc2UgZXN0aW1hdGVzIG11c3QgYmUgcHJvdmlkZWQgZm9yIGFsbCBmcmFtZXMsIGV2ZW4gaWYKKyAgICAgKiBjYXB0dXJlIHNldHRpbmdzIGFuZCBjb2xvciB0cmFuc2Zvcm1zIGFyZSBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uLjwvcD4KKyAgICAgKiA8cD5UaGlzIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgY2FsY3VsYXRlZCBieSB0aGUgQVdCIGJsb2NrLAorICAgICAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGFuZHJvaWQuY29udHJvbC4qIGN1cnJlbnQgdmFsdWVzLjwvcD4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEtleTxSYXRpb25hbFtdPiBTVEFUSVNUSUNTX1BSRURJQ1RFRF9DT0xPUl9UUkFOU0ZPUk0gPQogICAgICAgICAgICAgbmV3IEtleTxSYXRpb25hbFtdPigiYW5kcm9pZC5zdGF0aXN0aWNzLnByZWRpY3RlZENvbG9yVHJhbnNmb3JtIiwgUmF0aW9uYWxbXS5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgSEFMIGVzdGltYXRlZCBzY2VuZSBpbGx1bWluYXRpb24gbGlnaHRpbmcKLSAgICAgKiBmcmVxdWVuY3kKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogUmVwb3J0IE5PTkUgaWYgdGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgZmxpY2tlcmluZwotICAgICAqIGlsbHVtaW5hdGlvbgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UaGUgSEFMIGVzdGltYXRlZCBzY2VuZSBpbGx1bWluYXRpb24gbGlnaHRpbmcKKyAgICAgKiBmcmVxdWVuY3k8L3A+CisgICAgICogPHA+UmVwb3J0IE5PTkUgaWYgdGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgZmxpY2tlcmluZworICAgICAqIGlsbHVtaW5hdGlvbjwvcD4KICAgICAgKiBAc2VlICNTVEFUSVNUSUNTX1NDRU5FX0ZMSUNLRVJfTk9ORQogICAgICAqIEBzZWUgI1NUQVRJU1RJQ1NfU0NFTkVfRkxJQ0tFUl81MEhaCiAgICAgICogQHNlZSAjU1RBVElTVElDU19TQ0VORV9GTElDS0VSXzYwSFoKQEAgLTkwOCw1NiArNzI1LDQwIEBACiAgICAgICAgICAgICBuZXcgS2V5PEludGVnZXI+KCJhbmRyb2lkLnN0YXRpc3RpY3Muc2NlbmVGbGlja2VyIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRhYmxlIG1hcHBpbmcgYmx1ZSBpbnB1dCB2YWx1ZXMgdG8gb3V0cHV0Ci0gICAgICogdmFsdWVzCi0gICAgICogPC9wPgotICAgICAqIDxwPgotICAgICAqIFRvbmVtYXBwaW5nIC8gY29udHJhc3QgLyBnYW1tYSBjdXJ2ZSBmb3IgdGhlIGJsdWUKLSAgICAgKiBjaGFubmVsLCB0byB1c2Ugd2hlbiBhbmRyb2lkLnRvbmVtYXAubW9kZSBpcyBDT05UUkFTVF9DVVJWRS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogU2VlIGFuZHJvaWQudG9uZW1hcC5jdXJ2ZVJlZCBmb3IgbW9yZSBkZXRhaWxzLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5UYWJsZSBtYXBwaW5nIGJsdWUgaW5wdXQgdmFsdWVzIHRvIG91dHB1dAorICAgICAqIHZhbHVlczwvcD4KKyAgICAgKiA8cD5Ub25lbWFwcGluZyAvIGNvbnRyYXN0IC8gZ2FtbWEgY3VydmUgZm9yIHRoZSBibHVlCisgICAgICogY2hhbm5lbCwgdG8gdXNlIHdoZW4gYW5kcm9pZC50b25lbWFwLm1vZGUgaXMgQ09OVFJBU1RfQ1VSVkUuPC9wPgorICAgICAqIDxwPlNlZSBhbmRyb2lkLnRvbmVtYXAuY3VydmVSZWQgZm9yIG1vcmUgZGV0YWlscy48L3A+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBLZXk8ZmxvYXRbXT4gVE9ORU1BUF9DVVJWRV9CTFVFID0KICAgICAgICAgICAgIG5ldyBLZXk8ZmxvYXRbXT4oImFuZHJvaWQudG9uZW1hcC5jdXJ2ZUJsdWUiLCBmbG9hdFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRhYmxlIG1hcHBpbmcgZ3JlZW4gaW5wdXQgdmFsdWVzIHRvIG91dHB1dAotICAgICAqIHZhbHVlcwotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBUb25lbWFwcGluZyAvIGNvbnRyYXN0IC8gZ2FtbWEgY3VydmUgZm9yIHRoZSBncmVlbgotICAgICAqIGNoYW5uZWwsIHRvIHVzZSB3aGVuIGFuZHJvaWQudG9uZW1hcC5tb2RlIGlzIENPTlRSQVNUX0NVUlZFLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBTZWUgYW5kcm9pZC50b25lbWFwLmN1cnZlUmVkIGZvciBtb3JlIGRldGFpbHMuCi0gICAgICogPC9wPgorICAgICAqIDxwPlRhYmxlIG1hcHBpbmcgZ3JlZW4gaW5wdXQgdmFsdWVzIHRvIG91dHB1dAorICAgICAqIHZhbHVlczwvcD4KKyAgICAgKiA8cD5Ub25lbWFwcGluZyAvIGNvbnRyYXN0IC8gZ2FtbWEgY3VydmUgZm9yIHRoZSBncmVlbgorICAgICAqIGNoYW5uZWwsIHRvIHVzZSB3aGVuIGFuZHJvaWQudG9uZW1hcC5tb2RlIGlzIENPTlRSQVNUX0NVUlZFLjwvcD4KKyAgICAgKiA8cD5TZWUgYW5kcm9pZC50b25lbWFwLmN1cnZlUmVkIGZvciBtb3JlIGRldGFpbHMuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGZsb2F0W10+IFRPTkVNQVBfQ1VSVkVfR1JFRU4gPQogICAgICAgICAgICAgbmV3IEtleTxmbG9hdFtdPigiYW5kcm9pZC50b25lbWFwLmN1cnZlR3JlZW4iLCBmbG9hdFtdLmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRhYmxlIG1hcHBpbmcgcmVkIGlucHV0IHZhbHVlcyB0byBvdXRwdXQKLSAgICAgKiB2YWx1ZXMKLSAgICAgKiA8L3A+Ci0gICAgICogPHA+Ci0gICAgICogVG9uZW1hcHBpbmcgLyBjb250cmFzdCAvIGdhbW1hIGN1cnZlIGZvciB0aGUgcmVkCi0gICAgICogY2hhbm5lbCwgdG8gdXNlIHdoZW4gYW5kcm9pZC50b25lbWFwLm1vZGUgaXMgQ09OVFJBU1RfQ1VSVkUuCi0gICAgICogPC9wPjxwPgotICAgICAqIFNpbmNlIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHJhbmdlcyBtYXkgdmFyeSBkZXBlbmRpbmcgb24KKyAgICAgKiA8cD5UYWJsZSBtYXBwaW5nIHJlZCBpbnB1dCB2YWx1ZXMgdG8gb3V0cHV0CisgICAgICogdmFsdWVzPC9wPgorICAgICAqIDxwPlRvbmVtYXBwaW5nIC8gY29udHJhc3QgLyBnYW1tYSBjdXJ2ZSBmb3IgdGhlIHJlZAorICAgICAqIGNoYW5uZWwsIHRvIHVzZSB3aGVuIGFuZHJvaWQudG9uZW1hcC5tb2RlIGlzIENPTlRSQVNUX0NVUlZFLjwvcD4KKyAgICAgKiA8cD5TaW5jZSB0aGUgaW5wdXQgYW5kIG91dHB1dCByYW5nZXMgbWF5IHZhcnkgZGVwZW5kaW5nIG9uCiAgICAgICogdGhlIGNhbWVyYSBwaXBlbGluZSwgdGhlIGlucHV0IGFuZCBvdXRwdXQgcGl4ZWwgdmFsdWVzCiAgICAgICogYXJlIHJlcHJlc2VudGVkIGJ5IG5vcm1hbGl6ZWQgZmxvYXRpbmctcG9pbnQgdmFsdWVzCi0gICAgICogYmV0d2VlbiAwIGFuZCAxLCB3aXRoIDAgPT0gYmxhY2sgYW5kIDEgPT0gd2hpdGUuCi0gICAgICogPC9wPjxwPgotICAgICAqIFRoZSBjdXJ2ZSBzaG91bGQgYmUgbGluZWFybHkgaW50ZXJwb2xhdGVkIGJldHdlZW4gdGhlCisgICAgICogYmV0d2VlbiAwIGFuZCAxLCB3aXRoIDAgPT0gYmxhY2sgYW5kIDEgPT0gd2hpdGUuPC9wPgorICAgICAqIDxwPlRoZSBjdXJ2ZSBzaG91bGQgYmUgbGluZWFybHkgaW50ZXJwb2xhdGVkIGJldHdlZW4gdGhlCiAgICAgICogZGVmaW5lZCBwb2ludHMuIFRoZSBwb2ludHMgd2lsbCBiZSBsaXN0ZWQgaW4gaW5jcmVhc2luZwogICAgICAqIG9yZGVyIG9mIFBfSU4uIEZvciBleGFtcGxlLCBpZiB0aGUgYXJyYXkgaXM6IFswLjAsIDAuMCwKLSAgICAgKiAwLjMsIDAuNSwgMS4wLCAxLjBdLCB0aGVuIHRoZSBpbnB1dC0+b3V0cHV0IG1hcHBpbmcKLSAgICAgKiBmb3IgYSBmZXcgc2FtcGxlIHBvaW50cyB3b3VsZCBiZTogMCAtPiAwLCAwLjE1IC0+Ci0gICAgICogMC4yNSwgMC4zIC0+IDAuNSwgMC41IC0+IDAuNjQKLSAgICAgKiA8L3A+CisgICAgICogMC4zLCAwLjUsIDEuMCwgMS4wXSwgdGhlbiB0aGUgaW5wdXQtJmd0O291dHB1dCBtYXBwaW5nCisgICAgICogZm9yIGEgZmV3IHNhbXBsZSBwb2ludHMgd291bGQgYmU6IDAgLSZndDsgMCwgMC4xNSAtJmd0OworICAgICAqIDAuMjUsIDAuMyAtJmd0OyAwLjUsIDAuNSAtJmd0OyAwLjY0PC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PGZsb2F0W10+IFRPTkVNQVBfQ1VSVkVfUkVEID0KICAgICAgICAgICAgIG5ldyBLZXk8ZmxvYXRbXT4oImFuZHJvaWQudG9uZW1hcC5jdXJ2ZVJlZCIsIGZsb2F0W10uY2xhc3MpOwpAQCAtOTcxLDIwICs3NzIsMTYgQEAKICAgICAgICAgICAgIG5ldyBLZXk8SW50ZWdlcj4oImFuZHJvaWQudG9uZW1hcC5tb2RlIiwgaW50LmNsYXNzKTsKIAogICAgIC8qKgotICAgICAqIDxwPgotICAgICAqIFRoaXMgTEVEIGlzIG5vbWluYWxseSB1c2VkIHRvIGluZGljYXRlIHRvIHRoZSB1c2VyCisgICAgICogPHA+VGhpcyBMRUQgaXMgbm9taW5hbGx5IHVzZWQgdG8gaW5kaWNhdGUgdG8gdGhlIHVzZXIKICAgICAgKiB0aGF0IHRoZSBjYW1lcmEgaXMgcG93ZXJlZCBvbiBhbmQgbWF5IGJlIHN0cmVhbWluZyBpbWFnZXMgYmFjayB0byB0aGUKICAgICAgKiBBcHBsaWNhdGlvbiBQcm9jZXNzb3IuIEluIGNlcnRhaW4gcmFyZSBjaXJjdW1zdGFuY2VzLCB0aGUgT1MgbWF5CiAgICAgICogZGlzYWJsZSB0aGlzIHdoZW4gdmlkZW8gaXMgcHJvY2Vzc2VkIGxvY2FsbHkgYW5kIG5vdCB0cmFuc21pdHRlZCB0bwotICAgICAqIGFueSB1bnRydXN0ZWQgYXBwbGljYXRpb25zLgotICAgICAqIDwvcD48cD4KLSAgICAgKiBJbiBwYXJ0aWN1bGFyLCB0aGUgTEVEICptdXN0KiBhbHdheXMgYmUgb24gd2hlbiB0aGUgZGF0YSBjb3VsZCBiZQotICAgICAqIHRyYW5zbWl0dGVkIG9mZiB0aGUgZGV2aWNlLiBUaGUgTEVEICpzaG91bGQqIGFsd2F5cyBiZSBvbiB3aGVuZXZlcgotICAgICAqIGRhdGEgaXMgc3RvcmVkIGxvY2FsbHkgb24gdGhlIGRldmljZS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIExFRCAqbWF5KiBiZSBvZmYgaWYgYSB0cnVzdGVkIGFwcGxpY2F0aW9uIGlzIHVzaW5nIHRoZSBkYXRhIHRoYXQKLSAgICAgKiBkb2Vzbid0IHZpb2xhdGUgdGhlIGFib3ZlIHJ1bGVzLgotICAgICAqIDwvcD4KKyAgICAgKiBhbnkgdW50cnVzdGVkIGFwcGxpY2F0aW9ucy48L3A+CisgICAgICogPHA+SW4gcGFydGljdWxhciwgdGhlIExFRCA8ZW0+bXVzdDwvZW0+IGFsd2F5cyBiZSBvbiB3aGVuIHRoZSBkYXRhIGNvdWxkIGJlCisgICAgICogdHJhbnNtaXR0ZWQgb2ZmIHRoZSBkZXZpY2UuIFRoZSBMRUQgPGVtPnNob3VsZDwvZW0+IGFsd2F5cyBiZSBvbiB3aGVuZXZlcgorICAgICAqIGRhdGEgaXMgc3RvcmVkIGxvY2FsbHkgb24gdGhlIGRldmljZS48L3A+CisgICAgICogPHA+VGhlIExFRCA8ZW0+bWF5PC9lbT4gYmUgb2ZmIGlmIGEgdHJ1c3RlZCBhcHBsaWNhdGlvbiBpcyB1c2luZyB0aGUgZGF0YSB0aGF0CisgICAgICogZG9lc24ndCB2aW9sYXRlIHRoZSBhYm92ZSBydWxlcy48L3A+CiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwpAQCAtOTkyLDI4ICs3ODksMTEgQEAKICAgICAgICAgICAgIG5ldyBLZXk8Qm9vbGVhbj4oImFuZHJvaWQubGVkLnRyYW5zbWl0IiwgYm9vbGVhbi5jbGFzcyk7CiAKICAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBXaGV0aGVyIGJsYWNrLWxldmVsIGNvbXBlbnNhdGlvbiBpcyBsb2NrZWQKLSAgICAgKiB0byBpdHMgY3VycmVudCB2YWx1ZXMsIG9yIGlzIGZyZWUgdG8gdmFyeQotICAgICAqIDwvcD4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGVuIHNldCB0byBPTiwgdGhlIHZhbHVlcyB1c2VkIGZvciBibGFjay1sZXZlbAotICAgICAqIGNvbXBlbnNhdGlvbiBtdXN0IG5vdCBjaGFuZ2UgdW50aWwgdGhlIGxvY2sgaXMgc2V0IHRvCi0gICAgICogT0ZGCi0gICAgICogPC9wPjxwPgotICAgICAqIFNpbmNlIGNoYW5nZXMgdG8gY2VydGFpbiBjYXB0dXJlIHBhcmFtZXRlcnMgKHN1Y2ggYXMKLSAgICAgKiBleHBvc3VyZSB0aW1lKSBtYXkgcmVxdWlyZSByZXNldHRpbmcgb2YgYmxhY2sgbGV2ZWwKLSAgICAgKiBjb21wZW5zYXRpb24sIHRoZSBIQUwgbXVzdCByZXBvcnQgd2hldGhlciBzZXR0aW5nIHRoZQotICAgICAqIGJsYWNrIGxldmVsIGxvY2sgd2FzIHN1Y2Nlc3NmdWwgaW4gdGhlIG91dHB1dCByZXN1bHQKLSAgICAgKiBtZXRhZGF0YS4KLSAgICAgKiA8L3A+PHA+Ci0gICAgICogVGhlIGJsYWNrIGxldmVsIGxvY2tpbmcgbXVzdCBoYXBwZW4gYXQgdGhlIHNlbnNvciwgYW5kIG5vdCBhdCB0aGUgSVNQLgotICAgICAqIElmIGZvciBzb21lIHJlYXNvbiBibGFjayBsZXZlbCBsb2NraW5nIGlzIG5vIGxvbmdlciBsZWdhbCAoZm9yIGV4YW1wbGUsCi0gICAgICogdGhlIGFuYWxvZyBnYWluIGhhcyBjaGFuZ2VkLCB3aGljaCBmb3JjZXMgYmxhY2sgbGV2ZWxzIHRvIGJlCi0gICAgICogcmVjYWxjdWxhdGVkKSwgdGhlbiB0aGUgSEFMIGlzIGZyZWUgdG8gb3ZlcnJpZGUgdGhpcyByZXF1ZXN0IChhbmQgaXQKLSAgICAgKiBtdXN0IHJlcG9ydCAnT0ZGJyB3aGVuIHRoaXMgZG9lcyBoYXBwZW4pIHVudGlsIHRoZSBuZXh0IHRpbWUgbG9ja2luZwotICAgICAqIGlzIGxlZ2FsIGFnYWluLgotICAgICAqIDwvcD4KKyAgICAgKiA8cD5XaGV0aGVyIGJsYWNrLWxldmVsIGNvbXBlbnNhdGlvbiBpcyBsb2NrZWQKKyAgICAgKiB0byBpdHMgY3VycmVudCB2YWx1ZXMsIG9yIGlzIGZyZWUgdG8gdmFyeTwvcD4KKyAgICAgKiA8cD5XaGV0aGVyIHRoZSBibGFjayBsZXZlbCBvZmZzZXQgd2FzIGxvY2tlZCBmb3IgdGhpcyBmcmFtZS4KKyAgICAgKiBTaG91bGQgYmUgT04gaWYgYW5kcm9pZC5ibGFja0xldmVsLmxvY2sgd2FzIE9OIGluIHRoZSBjYXB0dXJlIHJlcXVlc3QsCisgICAgICogdW5sZXNzIGEgY2hhbmdlIGluIGNhcHR1cmUgc2V0dGluZ3MgZm9yY2VkIGEgYmxhY2sgbGV2ZWwgcmVzZXQuPC9wPgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgS2V5PEJvb2xlYW4+IEJMQUNLX0xFVkVMX0xPQ0sgPQogICAgICAgICAgICAgbmV3IEtleTxCb29sZWFuPigiYW5kcm9pZC5ibGFja0xldmVsLmxvY2siLCBib29sZWFuLmNsYXNzKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvaW1wbC9DYW1lcmFNZXRhZGF0YU5hdGl2ZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9pbXBsL0NhbWVyYU1ldGFkYXRhTmF0aXZlLmphdmEKaW5kZXggMDcyYzViYi4uMmRkY2IxNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9pbXBsL0NhbWVyYU1ldGFkYXRhTmF0aXZlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9pbXBsL0NhbWVyYU1ldGFkYXRhTmF0aXZlLmphdmEKQEAgLTQ0OCw3ICs0NDgsNyBAQAogICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoQ2FwdHVyZVJlc3VsdC5TVEFUSVNUSUNTX0ZBQ0VTKSkgewogICAgICAgICAgICAgcmV0dXJuIChUKSBnZXRGYWNlcygpOwogICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoQ2FwdHVyZVJlc3VsdC5TVEFUSVNUSUNTX0ZBQ0VfUkVDVEFOR0xFUykpIHsKLSAgICAgICAgICAgIHJldHVybiAoVCkgZml4RmFjZVJlY3RhbmdsZXMoKTsKKyAgICAgICAgICAgIHJldHVybiAoVCkgZ2V0RmFjZVJlY3RhbmdsZXMoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZvciBvdGhlciBrZXlzLCBnZXQoKSBmYWxscyBiYWNrIHRvIGdldEJhc2UoKQpAQCAtNDU3LDEyICs0NTcsMTUgQEAKIAogICAgIHByaXZhdGUgaW50W10gZ2V0QXZhaWxhYmxlRm9ybWF0cygpIHsKICAgICAgICAgaW50W10gYXZhaWxhYmxlRm9ybWF0cyA9IGdldEJhc2UoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLlNDQUxFUl9BVkFJTEFCTEVfRk9STUFUUyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXZhaWxhYmxlRm9ybWF0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgLy8gSlBFRyBoYXMgZGlmZmVyZW50IHZhbHVlIGJldHdlZW4gbmF0aXZlIGFuZCBtYW5hZ2VkIHNpZGUsIG5lZWQgb3ZlcnJpZGUuCi0gICAgICAgICAgICBpZiAoYXZhaWxhYmxlRm9ybWF0c1tpXSA9PSBOQVRJVkVfSlBFR19GT1JNQVQpIHsKLSAgICAgICAgICAgICAgICBhdmFpbGFibGVGb3JtYXRzW2ldID0gSW1hZ2VGb3JtYXQuSlBFRzsKKyAgICAgICAgaWYgKGF2YWlsYWJsZUZvcm1hdHMgIT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdmFpbGFibGVGb3JtYXRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgLy8gSlBFRyBoYXMgZGlmZmVyZW50IHZhbHVlIGJldHdlZW4gbmF0aXZlIGFuZCBtYW5hZ2VkIHNpZGUsIG5lZWQgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUZvcm1hdHNbaV0gPT0gTkFUSVZFX0pQRUdfRk9STUFUKSB7CisgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUZvcm1hdHNbaV0gPSBJbWFnZUZvcm1hdC5KUEVHOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBhdmFpbGFibGVGb3JtYXRzOwogICAgIH0KIApAQCAtNTUwLDcgKzU1Myw3IEBACiAgICAgLy8gKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkgYXQgdGhlIG5hdGl2ZSBsZXZlbCwgc28gdGhlIG5vcm1hbCBSZWN0CiAgICAgLy8gY29udmVyc2lvbiB0aGF0IGRvZXMgKGwsIHQsIHcsIGgpIC0+IChsLCB0LCByLCBiKSBpcyB1bm5lY2Vzc2FyeS4gVW5kbwogICAgIC8vIHRoYXQgY29udmVyc2lvbiBoZXJlIGZvciBqdXN0IHRoZSBmYWNlcy4KLSAgICBwcml2YXRlIFJlY3RbXSBmaXhGYWNlUmVjdGFuZ2xlcygpIHsKKyAgICBwcml2YXRlIFJlY3RbXSBnZXRGYWNlUmVjdGFuZ2xlcygpIHsKICAgICAgICAgUmVjdFtdIGZhY2VSZWN0YW5nbGVzID0gZ2V0QmFzZShDYXB0dXJlUmVzdWx0LlNUQVRJU1RJQ1NfRkFDRV9SRUNUQU5HTEVTKTsKICAgICAgICAgaWYgKGZhY2VSZWN0YW5nbGVzID09IG51bGwpIHJldHVybiBudWxsOwogCkBAIC01OTAsNiArNTkzLDggQEAKICAgICBwcml2YXRlIDxUPiBib29sZWFuIHNldE92ZXJyaWRlKEtleTxUPiBrZXksIFQgdmFsdWUpIHsKICAgICAgICAgaWYgKGtleS5lcXVhbHMoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLlNDQUxFUl9BVkFJTEFCTEVfRk9STUFUUykpIHsKICAgICAgICAgICAgIHJldHVybiBzZXRBdmFpbGFibGVGb3JtYXRzKChpbnRbXSkgdmFsdWUpOworICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoQ2FwdHVyZVJlc3VsdC5TVEFUSVNUSUNTX0ZBQ0VfUkVDVEFOR0xFUykpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRGYWNlUmVjdGFuZ2xlcygoUmVjdFtdKSB2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGb3Igb3RoZXIga2V5cywgc2V0KCkgZmFsbHMgYmFjayB0byBzZXRCYXNlKCkuCkBAIC02MTUsNiArNjIwLDM2IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIENvbnZlcnQgRmFjZSBSZWN0YW5nbGVzIGZyb20gbWFuYWdlZCBzaWRlIHRvIG5hdGl2ZSBzaWRlIGFzIHRoZXkgaGF2ZSBkaWZmZXJlbnQgZGVmaW5pdGlvbnMuCisgICAgICogPHA+CisgICAgICogTWFuYWdlZCBzaWRlIGZhY2UgcmVjdGFuZ2xlcyBhcmUgZGVmaW5lZCBhczogbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0LgorICAgICAqIE5hdGl2ZSBzaWRlIGZhY2UgcmVjdGFuZ2xlcyBhcmUgZGVmaW5lZCBhczogbGVmdCwgdG9wLCByaWdodCwgYm90dG9tLgorICAgICAqIFRoZSBpbnB1dCBmYWNlIHJlY3RhbmdsZSBuZWVkIHRvIGJlIGNvbnZlcnRlZCB0byBuYXRpdmUgc2lkZSBkZWZpbml0aW9uIHdoZW4gc2V0IGlzIGNhbGxlZC4KKyAgICAgKiA8L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gZmFjZVJlY3RzIElucHV0IGZhY2UgcmVjdGFuZ2xlcy4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgZmFjZSByZWN0YW5nbGVzIGNhbiBiZSBzZXQgc3VjY2Vzc2Z1bGx5LiBPdGhlcndpc2UsIExldCB0aGUgY2FsbGVyCisgICAgICogICAgICAgICAgICAgKHNldEJhc2UpIHRvIGhhbmRsZSBpdCBhcHByb3ByaWF0ZWx5LgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBzZXRGYWNlUmVjdGFuZ2xlcyhSZWN0W10gZmFjZVJlY3RzKSB7CisgICAgICAgIGlmIChmYWNlUmVjdHMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgUmVjdFtdIG5ld0ZhY2VSZWN0cyA9IG5ldyBSZWN0W2ZhY2VSZWN0cy5sZW5ndGhdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld0ZhY2VSZWN0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgbmV3RmFjZVJlY3RzW2ldID0gbmV3IFJlY3QoCisgICAgICAgICAgICAgICAgICAgIGZhY2VSZWN0c1tpXS5sZWZ0LAorICAgICAgICAgICAgICAgICAgICBmYWNlUmVjdHNbaV0udG9wLAorICAgICAgICAgICAgICAgICAgICBmYWNlUmVjdHNbaV0ucmlnaHQgKyBmYWNlUmVjdHNbaV0ubGVmdCwKKyAgICAgICAgICAgICAgICAgICAgZmFjZVJlY3RzW2ldLmJvdHRvbSArIGZhY2VSZWN0c1tpXS50b3ApOworICAgICAgICB9CisKKyAgICAgICAgc2V0QmFzZShDYXB0dXJlUmVzdWx0LlNUQVRJU1RJQ1NfRkFDRV9SRUNUQU5HTEVTLCBuZXdGYWNlUmVjdHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBwcml2YXRlIGxvbmcgbU1ldGFkYXRhUHRyOyAvLyBuYXRpdmUgQ2FtZXJhTWV0YWRhdGEqCiAKICAgICBwcml2YXRlIG5hdGl2ZSBsb25nIG5hdGl2ZUFsbG9jYXRlKCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL3BhY2thZ2UuaHRtbCBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFja2FnZS5odG1sCmluZGV4IGM2MTk5ODQuLjlmNmMyYTkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFja2FnZS5odG1sCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvcGFja2FnZS5odG1sCkBAIC04MCw3ICs4MCw1IEBACiBhc3luY2hyb25vdXNseSByZWxhdGl2ZSB0byB0aGUgb3V0cHV0IENhcHR1cmVSZXN1bHQsIHNvbWV0aW1lcwogc3Vic3RhbnRpYWxseSBsYXRlci48L3A+CiAKLXtAaGlkZX0KLQogPC9CT0RZPgogPC9IVE1MPgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvZGlzcGxheS9XaWZpRGlzcGxheVN0YXR1cy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvZGlzcGxheS9XaWZpRGlzcGxheVN0YXR1cy5qYXZhCmluZGV4IDUyMTY3MjcuLmI2NDU2NjIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2Rpc3BsYXkvV2lmaURpc3BsYXlTdGF0dXMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9kaXNwbGF5L1dpZmlEaXNwbGF5U3RhdHVzLmphdmEKQEAgLTIwLDggKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgogICogRGVzY3JpYmVzIHRoZSBjdXJyZW50IGdsb2JhbCBzdGF0ZSBvZiBXaWZpIGRpc3BsYXkgY29ubmVjdGl2aXR5LCBpbmNsdWRpbmcgdGhlCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9sb2NhdGlvbi9HZW9mZW5jZUhhcmR3YXJlUmVxdWVzdC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvbG9jYXRpb24vR2VvZmVuY2VIYXJkd2FyZVJlcXVlc3QuamF2YQppbmRleCA2ZTdiNTkyLi43OTZkN2Y4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9sb2NhdGlvbi9HZW9mZW5jZUhhcmR3YXJlUmVxdWVzdC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2xvY2F0aW9uL0dlb2ZlbmNlSGFyZHdhcmVSZXF1ZXN0LmphdmEKQEAgLTE2LDggKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uOwogCi1pbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5Mb2NhdGlvbjsKLQogLyoqCiAgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgZ2VvZmVuY2UuCiAgKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkFjY2Vzc29yeS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkFjY2Vzc29yeS5qYXZhCmluZGV4IDU3MTk0NTIuLjJmOTE3OGMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JBY2Nlc3NvcnkuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiQWNjZXNzb3J5LmphdmEKQEAgLTE2LDEwICsxNiw4IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5oYXJkd2FyZS51c2I7CiAKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogLyoqCiAgKiBBIGNsYXNzIHJlcHJlc2VudGluZyBhIFVTQiBhY2Nlc3NvcnksIHdoaWNoIGlzIGFuIGV4dGVybmFsIGhhcmR3YXJlIGNvbXBvbmVudApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkRldmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkRldmljZS5qYXZhCmluZGV4IDliZDM4ZjkuLmFlNjExOGMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JEZXZpY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiRGV2aWNlLmphdmEKQEAgLTE2LDEyICsxNiw4IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5oYXJkd2FyZS51c2I7CiAKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiAKIC8qKgogICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgVVNCIGRldmljZSBhdHRhY2hlZCB0byB0aGUgYW5kcm9pZCBkZXZpY2Ugd2l0aCB0aGUgYW5kcm9pZCBkZXZpY2UKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JFbmRwb2ludC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkVuZHBvaW50LmphdmEKaW5kZXggNzUzYTQ0Ny4uNzA4ZDY1MSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkVuZHBvaW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkVuZHBvaW50LmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmhhcmR3YXJlLnVzYjsKIAotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkludGVyZmFjZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvdXNiL1VzYkludGVyZmFjZS5qYXZhCmluZGV4IGQ2YzU0YTguLmU5NGJhYTEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL3VzYi9Vc2JJbnRlcmZhY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS91c2IvVXNiSW50ZXJmYWNlLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmhhcmR3YXJlLnVzYjsKIAotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0V4dHJhY3RCdXR0b24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9FeHRyYWN0QnV0dG9uLmphdmEKaW5kZXggYjZiNzU5NS4uZmU2M2MxZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0V4dHJhY3RCdXR0b24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvRXh0cmFjdEJ1dHRvbi5qYXZhCkBAIC0zMiw4ICszMiwxMiBAQAogICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmJ1dHRvblN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgRXh0cmFjdEJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEV4dHJhY3RCdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgRXh0cmFjdEJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAgICAgCiAgICAgLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvRXh0cmFjdEVkaXRUZXh0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvRXh0cmFjdEVkaXRUZXh0LmphdmEKaW5kZXggMjNhZTIxYi4uNDhiNjA0YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0V4dHJhY3RFZGl0VGV4dC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9FeHRyYWN0RWRpdFRleHQuamF2YQpAQCAtMzgsOCArMzgsMTIgQEAKICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5lZGl0VGV4dFN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgRXh0cmFjdEVkaXRUZXh0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgRXh0cmFjdEVkaXRUZXh0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEV4dHJhY3RFZGl0VGV4dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRJTUUoSW5wdXRNZXRob2RTZXJ2aWNlIGltZSkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0lJbnB1dE1ldGhvZFNlc3Npb25XcmFwcGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvSUlucHV0TWV0aG9kU2Vzc2lvbldyYXBwZXIuamF2YQppbmRleCBiYmVhOGZmLi44NDM3MjI4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvSUlucHV0TWV0aG9kU2Vzc2lvbldyYXBwZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvSUlucHV0TWV0aG9kU2Vzc2lvbldyYXBwZXIuamF2YQpAQCAtMjUsNyArMjUsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXRDaGFubmVsOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0lucHV0TWV0aG9kU2VydmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0lucHV0TWV0aG9kU2VydmljZS5qYXZhCmluZGV4IDFiN2Q5ZWEuLjgxYWQyOGIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9JbnB1dE1ldGhvZFNlcnZpY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvSW5wdXRNZXRob2RTZXJ2aWNlLmphdmEKQEAgLTIzMjIsNiArMjMyMiwyMSBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIEByZXR1cm4gVGhlIHJlY29tbWVuZGVkIGhlaWdodCBvZiB0aGUgaW5wdXQgbWV0aG9kIHdpbmRvdy4KKyAgICAgKiBBbiBJTUUgYXV0aG9yIGNhbiBnZXQgdGhlIGxhc3QgaW5wdXQgbWV0aG9kJ3MgaGVpZ2h0IGFzIHRoZSByZWNvbW1lbmRlZCBoZWlnaHQKKyAgICAgKiBieSBjYWxsaW5nIHRoaXMgaW4KKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5pbnB1dG1ldGhvZHNlcnZpY2UuSW5wdXRNZXRob2RTZXJ2aWNlI29uU3RhcnRJbnB1dFZpZXcoRWRpdG9ySW5mbywgYm9vbGVhbil9LgorICAgICAqIElmIHlvdSBkb24ndCBuZWVkIHRvIHVzZSBhIHByZWRlZmluZWQgZml4ZWQgaGVpZ2h0LCB5b3UgY2FuIGF2b2lkIHRoZSB3aW5kb3ctcmVzaXppbmcgb2YgSU1FCisgICAgICogc3dpdGNoaW5nIGJ5IHVzaW5nIHRoaXMgdmFsdWUgYXMgYSB2aXNpYmxlIGluc2V0IGhlaWdodC4gSXQncyBlZmZpY2llbnQgZm9yIHRoZSBzbW9vdGgKKyAgICAgKiB0cmFuc2l0aW9uIGJldHdlZW4gZGlmZmVyZW50IElNRXMuIEhvd2V2ZXIsIG5vdGUgdGhhdCB0aGlzIG1heSByZXR1cm4gMCAob3IgcG9zc2libHkKKyAgICAgKiB1bmV4cGVjdGVkbHkgbG93IGhlaWdodCkuIFlvdSBzaG91bGQgdGh1cyBhdm9pZCByZWx5aW5nIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBtZXRob2QKKyAgICAgKiBhbGwgdGhlIHRpbWUuIFBsZWFzZSBtYWtlIHN1cmUgdG8gdXNlIGEgcmVhc29uYWJsZSBoZWlnaHQgZm9yIHRoZSBJTUUuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRJbnB1dE1ldGhvZFdpbmRvd1JlY29tbWVuZGVkSGVpZ2h0KCkgeworICAgICAgICByZXR1cm4gbUltbS5nZXRJbnB1dE1ldGhvZFdpbmRvd1Zpc2libGVIZWlnaHQoKTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBQZXJmb3JtcyBhIGR1bXAgb2YgdGhlIElucHV0TWV0aG9kU2VydmljZSdzIGludGVybmFsIHN0YXRlLiAgT3ZlcnJpZGUKICAgICAgKiB0byBhZGQgeW91ciBvd24gaW5mb3JtYXRpb24gdG8gdGhlIGR1bXAuCiAgICAgICovCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvS2V5Ym9hcmRWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvS2V5Ym9hcmRWaWV3LmphdmEKaW5kZXggNDkxNjI0NC4uYWY3NWEwYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0tleWJvYXJkVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9LZXlib2FyZFZpZXcuamF2YQpAQCAtMjc5LDEyICsyNzksMTUgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmtleWJvYXJkVmlld1N0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgS2V5Ym9hcmRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgS2V5Ym9hcmRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9Ci0gICAgICAgICAgICBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgYXR0cnMsIGFuZHJvaWQuUi5zdHlsZWFibGUuS2V5Ym9hcmRWaWV3LCBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIEtleWJvYXJkVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGFuZHJvaWQuUi5zdHlsZWFibGUuS2V5Ym9hcmRWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlID0KICAgICAgICAgICAgICAgICAoTGF5b3V0SW5mbGF0ZXIpIGNvbnRleHQKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9CYXNlTmV0d29ya1N0YXRlVHJhY2tlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0Jhc2VOZXR3b3JrU3RhdGVUcmFja2VyLmphdmEKaW5kZXggNDc2ZmVmZS4uODA0ZjhlZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0Jhc2VOZXR3b3JrU3RhdGVUcmFja2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0Jhc2VOZXR3b3JrU3RhdGVUcmFja2VyLmphdmEKQEAgLTIwLDEwICsyMCwxMCBAQAogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NlbmdlcjsKIAotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9uczsKLQogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwogCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zOworCiAvKioKICAqIEludGVyZmFjZSB0byBjb250cm9sIGFuZCBvYnNlcnZlIHN0YXRlIG9mIGEgc3BlY2lmaWMgbmV0d29yaywgaGlkaW5nCiAgKiBuZXR3b3JrLXNwZWNpZmljIGRldGFpbHMgZnJvbSB7QGxpbmsgQ29ubmVjdGl2aXR5TWFuYWdlcn0uIFN1cmZhY2VzIGV2ZW50cwpAQCAtMTA4LDExICsxMDgsNiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCkgewotICAgICAgICAvLyBub3QgaW1wbGVtZW50ZWQKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZWQoYm9vbGVhbiBpc0NhcHRpdmVQb3J0YWwpIHsKICAgICAgICAgLy8gbm90IGltcGxlbWVudGVkCiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0NhcHRpdmVQb3J0YWxUcmFja2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvQ2FwdGl2ZVBvcnRhbFRyYWNrZXIuamF2YQppbmRleCBkNjc4ZjFlLi41YjZmMTU0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvQ2FwdGl2ZVBvcnRhbFRyYWNrZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvQ2FwdGl2ZVBvcnRhbFRyYWNrZXIuamF2YQpAQCAtNDgsNyArNDgsNiBAQAogaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOwogaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwogaW1wb3J0IGphdmEubmV0LkluZXQ0QWRkcmVzczsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXRUaW1lb3V0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmV0LlVSTDsKIGltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKQEAgLTg0LDEzICs4MywxMiBAQAogICAgIHByaXZhdGUgU3RyaW5nIG1TZXJ2ZXI7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbVVybDsKICAgICBwcml2YXRlIGJvb2xlYW4gbUlzQ2FwdGl2ZVBvcnRhbENoZWNrRW5hYmxlZCA9IGZhbHNlOwotICAgIHByaXZhdGUgSUNvbm5lY3Rpdml0eU1hbmFnZXIgbUNvbm5TZXJ2aWNlOwotICAgIHByaXZhdGUgVGVsZXBob255TWFuYWdlciBtVGVsZXBob255TWFuYWdlcjsKLSAgICBwcml2YXRlIFdpZmlNYW5hZ2VyIG1XaWZpTWFuYWdlcjsKLSAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7CisgICAgcHJpdmF0ZSBmaW5hbCBJQ29ubmVjdGl2aXR5TWFuYWdlciBtQ29ublNlcnZpY2U7CisgICAgcHJpdmF0ZSBmaW5hbCBUZWxlcGhvbnlNYW5hZ2VyIG1UZWxlcGhvbnlNYW5hZ2VyOworICAgIHByaXZhdGUgZmluYWwgV2lmaU1hbmFnZXIgbVdpZmlNYW5hZ2VyOworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKICAgICBwcml2YXRlIE5ldHdvcmtJbmZvIG1OZXR3b3JrSW5mbzsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDTURfREVURUNUX1BPUlRBTCAgICAgICAgICA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENNRF9DT05ORUNUSVZJVFlfQ0hBTkdFICAgID0gMTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0RFTEFZRURfQ0FQVElWRV9DSEVDSyAgPSAyOwogCkBAIC05OCwxNCArOTYsMTUgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVMQVlFRF9DSEVDS19JTlRFUlZBTF9NUyA9IDEwMDAwOwogICAgIHByaXZhdGUgaW50IG1EZWxheWVkQ2hlY2tUb2tlbiA9IDA7CiAKLSAgICBwcml2YXRlIFN0YXRlIG1EZWZhdWx0U3RhdGUgPSBuZXcgRGVmYXVsdFN0YXRlKCk7Ci0gICAgcHJpdmF0ZSBTdGF0ZSBtTm9BY3RpdmVOZXR3b3JrU3RhdGUgPSBuZXcgTm9BY3RpdmVOZXR3b3JrU3RhdGUoKTsKLSAgICBwcml2YXRlIFN0YXRlIG1BY3RpdmVOZXR3b3JrU3RhdGUgPSBuZXcgQWN0aXZlTmV0d29ya1N0YXRlKCk7Ci0gICAgcHJpdmF0ZSBTdGF0ZSBtRGVsYXllZENhcHRpdmVDaGVja1N0YXRlID0gbmV3IERlbGF5ZWRDYXB0aXZlQ2hlY2tTdGF0ZSgpOworICAgIHByaXZhdGUgZmluYWwgU3RhdGUgbURlZmF1bHRTdGF0ZSA9IG5ldyBEZWZhdWx0U3RhdGUoKTsKKyAgICBwcml2YXRlIGZpbmFsIFN0YXRlIG1Ob0FjdGl2ZU5ldHdvcmtTdGF0ZSA9IG5ldyBOb0FjdGl2ZU5ldHdvcmtTdGF0ZSgpOworICAgIHByaXZhdGUgZmluYWwgU3RhdGUgbUFjdGl2ZU5ldHdvcmtTdGF0ZSA9IG5ldyBBY3RpdmVOZXR3b3JrU3RhdGUoKTsKKyAgICBwcml2YXRlIGZpbmFsIFN0YXRlIG1EZWxheWVkQ2FwdGl2ZUNoZWNrU3RhdGUgPSBuZXcgRGVsYXllZENhcHRpdmVDaGVja1N0YXRlKCk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VUVVBfV0laQVJEX1BBQ0tBR0UgPSAiY29tLmdvb2dsZS5hbmRyb2lkLnNldHVwd2l6YXJkIjsKICAgICBwcml2YXRlIGJvb2xlYW4gbURldmljZVByb3Zpc2lvbmVkID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSBQcm92aXNpb25pbmdPYnNlcnZlciBtUHJvdmlzaW9uaW5nT2JzZXJ2ZXI7CisgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisgICAgcHJpdmF0ZSBmaW5hbCBQcm92aXNpb25pbmdPYnNlcnZlciBtUHJvdmlzaW9uaW5nT2JzZXJ2ZXI7CiAKICAgICBwcml2YXRlIENhcHRpdmVQb3J0YWxUcmFja2VyKENvbnRleHQgY29udGV4dCwgSUNvbm5lY3Rpdml0eU1hbmFnZXIgY3MpIHsKICAgICAgICAgc3VwZXIoVEFHKTsKQEAgLTE3NCwyOSArMTczLDExIEBACiAgICAgICAgIHJldHVybiBjYXB0aXZlUG9ydGFsOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRldGVjdENhcHRpdmVQb3J0YWwoTmV0d29ya0luZm8gaW5mbykgewotICAgICAgICBzZW5kTWVzc2FnZShvYnRhaW5NZXNzYWdlKENNRF9ERVRFQ1RfUE9SVEFMLCBpbmZvKSk7Ci0gICAgfQotCiAgICAgcHJpdmF0ZSBjbGFzcyBEZWZhdWx0U3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RFVEVDVF9QT1JUQUw6Ci0gICAgICAgICAgICAgICAgICAgIE5ldHdvcmtJbmZvIGluZm8gPSAoTmV0d29ya0luZm8pIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICAvLyBDaGVja2luZyBvbiBhIHNlY29uZGFyeSBjb25uZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKLSAgICAgICAgICAgICAgICAgICAgLy8geWV0Ci0gICAgICAgICAgICAgICAgICAgIG5vdGlmeVBvcnRhbENoZWNrQ29tcGxldGUoaW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0NPTk5FQ1RJVklUWV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfREVMQVlFRF9DQVBUSVZFX0NIRUNLOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBsb2dlKCJJZ25vcmluZyAiICsgbWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9nZSgiSWdub3JpbmcgIiArIG1lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTYsMTkgKzI5Nyw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgbm90aWZ5UG9ydGFsQ2hlY2tDb21wbGV0ZShOZXR3b3JrSW5mbyBpbmZvKSB7Ci0gICAgICAgIGlmIChpbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgIGxvZ2UoIm5vdGlmeVBvcnRhbENoZWNrQ29tcGxldGUgb24gbnVsbCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2coIm5vdGlmeVBvcnRhbENoZWNrQ29tcGxldGU6IG5pPSIgKyBpbmZvKTsKLSAgICAgICAgICAgIG1Db25uU2VydmljZS5jYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZShpbmZvKTsKLSAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHByaXZhdGUgdm9pZCBub3RpZnlQb3J0YWxDaGVja0NvbXBsZXRlZChOZXR3b3JrSW5mbyBpbmZvLCBib29sZWFuIGlzQ2FwdGl2ZVBvcnRhbCkgewogICAgICAgICBpZiAoaW5mbyA9PSBudWxsKSB7CiAgICAgICAgICAgICBsb2dlKCJub3RpZnlQb3J0YWxDaGVja0NvbXBsZXRlIG9uIG51bGwiKTsKQEAgLTQ2NCw3ICs0MzIsNiBAQAogICAgICAgICAgICAgICAgIGxhdGVuY3lCcm9hZGNhc3QucHV0RXh0cmEoRVhUUkFfTkVUV09SS19UWVBFLCBtVGVsZXBob255TWFuYWdlci5nZXROZXR3b3JrVHlwZSgpKTsKICAgICAgICAgICAgICAgICBMaXN0PENlbGxJbmZvPiBpbmZvID0gbVRlbGVwaG9ueU1hbmFnZXIuZ2V0QWxsQ2VsbEluZm8oKTsKICAgICAgICAgICAgICAgICBpZiAoaW5mbyA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHVuaXF1ZUNlbGxJZCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgICAgICAgICBpbnQgbnVtUmVnaXN0ZXJlZENlbGxJbmZvID0gMDsKICAgICAgICAgICAgICAgICBmb3IgKENlbGxJbmZvIGNlbGxJbmZvIDogaW5mbykgewogICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbEluZm8uaXNSZWdpc3RlcmVkKCkpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9Db25uZWN0aXZpdHlNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvQ29ubmVjdGl2aXR5TWFuYWdlci5qYXZhCmluZGV4IGM3OGE5NzMuLmE5YjI1MzMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9Db25uZWN0aXZpdHlNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0Nvbm5lY3Rpdml0eU1hbmFnZXIuamF2YQpAQCAtMjUsNyArMjUsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUzsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NlbmdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlc3VsdFJlY2VpdmVyOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiAKIGltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKQEAgLTEzMzAsMjQgKzEzMjksNiBAQAogCiAgICAgLyoqCiAgICAgICogU2lnbmFsIHRoYXQgdGhlIGNhcHRpdmUgcG9ydGFsIGNoZWNrIG9uIHRoZSBpbmRpY2F0ZWQgbmV0d29yawotICAgICAqIGlzIGNvbXBsZXRlIGFuZCB3ZSBjYW4gdHVybiB0aGUgbmV0d29yayBvbiBmb3IgZ2VuZXJhbCB1c2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5mbyB0aGUge0BsaW5rIE5ldHdvcmtJbmZvfSBvYmplY3QgZm9yIHRoZSBuZXR3b3JrVHlwZQotICAgICAqICAgICAgICBpbiBxdWVzdGlvbi4KLSAgICAgKgotICAgICAqIDxwPlRoaXMgbWV0aG9kIHJlcXVpcmVzIHRoZSBjYWxsIHRvIGhvbGQgdGhlIHBlcm1pc3Npb24KLSAgICAgKiB7QGxpbmsgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uI0NPTk5FQ1RJVklUWV9JTlRFUk5BTH0uCi0gICAgICoge0BoaWRlfQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKE5ldHdvcmtJbmZvIGluZm8pIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLmNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKGluZm8pOwotICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2lnbmFsIHRoYXQgdGhlIGNhcHRpdmUgcG9ydGFsIGNoZWNrIG9uIHRoZSBpbmRpY2F0ZWQgbmV0d29yawogICAgICAqIGlzIGNvbXBsZXRlIGFuZCB3aGV0aGVyIGl0cyBhIGNhcHRpdmUgcG9ydGFsIG9yIG5vdC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbmZvIHRoZSB7QGxpbmsgTmV0d29ya0luZm99IG9iamVjdCBmb3IgdGhlIG5ldHdvcmtUeXBlCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvRGhjcEluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9EaGNwSW5mby5qYXZhCmluZGV4IDNiZWRlNWQuLjc4OGQ3ZDkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9EaGNwSW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9EaGNwSW5mby5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiAKIC8qKgogICogQSBzaW1wbGUgb2JqZWN0IGZvciByZXRyaWV2aW5nIHRoZSByZXN1bHRzIG9mIGEgREhDUCByZXF1ZXN0LgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0RoY3BSZXN1bHRzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvRGhjcFJlc3VsdHMuamF2YQppbmRleCBhM2Y3MGRhLi4yMmIyNmIxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvRGhjcFJlc3VsdHMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvRGhjcFJlc3VsdHMuamF2YQpAQCAtMjMsOSArMjMsNiBAQAogCiBpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uZXQuVW5rbm93bkhvc3RFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiAKIC8qKgogICogQSBzaW1wbGUgb2JqZWN0IGZvciByZXRyaWV2aW5nIHRoZSByZXN1bHRzIG9mIGEgREhDUCByZXF1ZXN0LgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0R1bW15RGF0YVN0YXRlVHJhY2tlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0R1bW15RGF0YVN0YXRlVHJhY2tlci5qYXZhCmluZGV4IDUxYTExOTEuLmE1ZDA1OWUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9EdW1teURhdGFTdGF0ZVRyYWNrZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvRHVtbXlEYXRhU3RhdGVUcmFja2VyLmphdmEKQEAgLTExNywxMSArMTE3LDYgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZSgpIHsKLSAgICAgICAgLy8gbm90IGltcGxlbWVudGVkCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGVkKGJvb2xlYW4gaXNDYXB0aXZlUG9ydGFsKSB7CiAgICAgICAgIC8vIG5vdCBpbXBsZW1lbnRlZAogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9FdGhlcm5ldERhdGFUcmFja2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvRXRoZXJuZXREYXRhVHJhY2tlci5qYXZhCmluZGV4IGNjOGM3NzEuLjk1ZmFhNzcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9FdGhlcm5ldERhdGFUcmFja2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0V0aGVybmV0RGF0YVRyYWNrZXIuamF2YQpAQCAtMjcwLDExICsyNzAsNiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCkgewotICAgICAgICAvLyBub3QgaW1wbGVtZW50ZWQKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZWQoYm9vbGVhbiBpc0NhcHRpdmVQb3J0YWwpIHsKICAgICAgICAgLy8gbm90IGltcGxlbWVudGVkCiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0lDb25uZWN0aXZpdHlNYW5hZ2VyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvSUNvbm5lY3Rpdml0eU1hbmFnZXIuYWlkbAppbmRleCBjMWRhMmUzLi5iMzIxN2ViIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvSUNvbm5lY3Rpdml0eU1hbmFnZXIuYWlkbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvSUNvbm5lY3Rpdml0eU1hbmFnZXIuYWlkbApAQCAtMTI5LDggKzEyOSw2IEBACiAKICAgICBib29sZWFuIHVwZGF0ZUxvY2tkb3duVnBuKCk7CiAKLSAgICB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKGluIE5ldHdvcmtJbmZvIGluZm8pOwotCiAgICAgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZWQoaW4gTmV0d29ya0luZm8gaW5mbywgYm9vbGVhbiBpc0NhcHRpdmVQb3J0YWwpOwogCiAgICAgdm9pZCBzdXBwbHlNZXNzZW5nZXIoaW50IG5ldHdvcmtUeXBlLCBpbiBNZXNzZW5nZXIgbWVzc2VuZ2VyKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9MaW5rU29ja2V0Tm90aWZpZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9MaW5rU29ja2V0Tm90aWZpZXIuamF2YQppbmRleCAyOGUyODM0Li5lMjQyOWQ4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTGlua1NvY2tldE5vdGlmaWVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0xpbmtTb2NrZXROb3RpZmllci5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5uZXQ7CiAKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCiAvKioKICAqIEludGVyZmFjZSB1c2VkIHRvIGdldCBmZWVkYmFjayBhYm91dCBhIHtAbGluayBhbmRyb2lkLm5ldC5MaW5rU29ja2V0fS4gIEluc3RhbmNlIGlzIG9wdGlvbmFsbHkKICAqIHBhc3NlZCB3aGVuIGEgTGlua1NvY2tldCBpcyBjb25zdHJ1Y3RlZC4gIE11bHRpcGxlIExpbmtTb2NrZXRzIG1heSB1c2UgdGhlIHNhbWUgbm90aWZpZXIuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTG9jYWxTb2NrZXRJbXBsLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTG9jYWxTb2NrZXRJbXBsLmphdmEKaW5kZXggYjJlZTUwYS4uMTE5ZTUzMyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0xvY2FsU29ja2V0SW1wbC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9Mb2NhbFNvY2tldEltcGwuamF2YQpAQCAtMzI2LDYgKzMyNiw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBzLmZkID0gYWNjZXB0KGZkLCBzKTsKKyAgICAgICAgcy5tRmRDcmVhdGVkSW50ZXJuYWxseSA9IHRydWU7CiAgICAgfQogCiAgICAgLyoqCkBAIC01MzYsNCArNTM3LDMgQEAKICAgICAgICAgY2xvc2UoKTsKICAgICB9CiB9Ci0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9NYWlsVG8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9NYWlsVG8uamF2YQppbmRleCBiOTBkY2IxLi5kYWRiNmQ5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTWFpbFRvLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L01haWxUby5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIC8qKgogICoKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9Nb2JpbGVEYXRhU3RhdGVUcmFja2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTW9iaWxlRGF0YVN0YXRlVHJhY2tlci5qYXZhCmluZGV4IGMxMDY1MTQuLmQ5YzM1YzAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9Nb2JpbGVEYXRhU3RhdGVUcmFja2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L01vYmlsZURhdGFTdGF0ZVRyYWNrZXIuamF2YQpAQCAtNDYwLDExICs0NjAsNiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCkgewotICAgICAgICAvLyBub3QgaW1wbGVtZW50ZWQKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZWQoYm9vbGVhbiBpc0NhcHRpdmVQb3J0YWwpIHsKICAgICAgICAgaWYgKG1Jc0NhcHRpdmVQb3J0YWwuZ2V0QW5kU2V0KGlzQ2FwdGl2ZVBvcnRhbCkgIT0gaXNDYXB0aXZlUG9ydGFsKSB7CiAgICAgICAgICAgICAvLyBDYXB0aXZlIHBvcnRhbCBjaGFuZ2UgZW5hYmxlL2Rpc2FibGUgZmFpbGluZyBmYXN0CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTmV0d29ya0NvbmZpZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L05ldHdvcmtDb25maWcuamF2YQppbmRleCA1ZDk1ZjQxLi4zMmEyY2RhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTmV0d29ya0NvbmZpZy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9OZXR3b3JrQ29uZmlnLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLm5ldDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTmV0d29ya0luZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9OZXR3b3JrSW5mby5qYXZhCmluZGV4IDRkMmE3MGQuLjUzYjEzMDggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9OZXR3b3JrSW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9OZXR3b3JrSW5mby5qYXZhCkBAIC0xNTYsMTggKzE1NiwyMCBAQAogICAgIC8qKiB7QGhpZGV9ICovCiAgICAgcHVibGljIE5ldHdvcmtJbmZvKE5ldHdvcmtJbmZvIHNvdXJjZSkgewogICAgICAgICBpZiAoc291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1OZXR3b3JrVHlwZSA9IHNvdXJjZS5tTmV0d29ya1R5cGU7Ci0gICAgICAgICAgICBtU3VidHlwZSA9IHNvdXJjZS5tU3VidHlwZTsKLSAgICAgICAgICAgIG1UeXBlTmFtZSA9IHNvdXJjZS5tVHlwZU5hbWU7Ci0gICAgICAgICAgICBtU3VidHlwZU5hbWUgPSBzb3VyY2UubVN1YnR5cGVOYW1lOwotICAgICAgICAgICAgbVN0YXRlID0gc291cmNlLm1TdGF0ZTsKLSAgICAgICAgICAgIG1EZXRhaWxlZFN0YXRlID0gc291cmNlLm1EZXRhaWxlZFN0YXRlOwotICAgICAgICAgICAgbVJlYXNvbiA9IHNvdXJjZS5tUmVhc29uOwotICAgICAgICAgICAgbUV4dHJhSW5mbyA9IHNvdXJjZS5tRXh0cmFJbmZvOwotICAgICAgICAgICAgbUlzRmFpbG92ZXIgPSBzb3VyY2UubUlzRmFpbG92ZXI7Ci0gICAgICAgICAgICBtSXNSb2FtaW5nID0gc291cmNlLm1Jc1JvYW1pbmc7Ci0gICAgICAgICAgICBtSXNBdmFpbGFibGUgPSBzb3VyY2UubUlzQXZhaWxhYmxlOwotICAgICAgICAgICAgbUlzQ29ubmVjdGVkVG9Qcm92aXNpb25pbmdOZXR3b3JrID0gc291cmNlLm1Jc0Nvbm5lY3RlZFRvUHJvdmlzaW9uaW5nTmV0d29yazsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAoc291cmNlKSB7CisgICAgICAgICAgICAgICAgbU5ldHdvcmtUeXBlID0gc291cmNlLm1OZXR3b3JrVHlwZTsKKyAgICAgICAgICAgICAgICBtU3VidHlwZSA9IHNvdXJjZS5tU3VidHlwZTsKKyAgICAgICAgICAgICAgICBtVHlwZU5hbWUgPSBzb3VyY2UubVR5cGVOYW1lOworICAgICAgICAgICAgICAgIG1TdWJ0eXBlTmFtZSA9IHNvdXJjZS5tU3VidHlwZU5hbWU7CisgICAgICAgICAgICAgICAgbVN0YXRlID0gc291cmNlLm1TdGF0ZTsKKyAgICAgICAgICAgICAgICBtRGV0YWlsZWRTdGF0ZSA9IHNvdXJjZS5tRGV0YWlsZWRTdGF0ZTsKKyAgICAgICAgICAgICAgICBtUmVhc29uID0gc291cmNlLm1SZWFzb247CisgICAgICAgICAgICAgICAgbUV4dHJhSW5mbyA9IHNvdXJjZS5tRXh0cmFJbmZvOworICAgICAgICAgICAgICAgIG1Jc0ZhaWxvdmVyID0gc291cmNlLm1Jc0ZhaWxvdmVyOworICAgICAgICAgICAgICAgIG1Jc1JvYW1pbmcgPSBzb3VyY2UubUlzUm9hbWluZzsKKyAgICAgICAgICAgICAgICBtSXNBdmFpbGFibGUgPSBzb3VyY2UubUlzQXZhaWxhYmxlOworICAgICAgICAgICAgICAgIG1Jc0Nvbm5lY3RlZFRvUHJvdmlzaW9uaW5nTmV0d29yayA9IHNvdXJjZS5tSXNDb25uZWN0ZWRUb1Byb3Zpc2lvbmluZ05ldHdvcms7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9OZXR3b3JrU3RhdGVUcmFja2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTmV0d29ya1N0YXRlVHJhY2tlci5qYXZhCmluZGV4IDFjYTkyNTUuLmM0OWIxZDEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9OZXR3b3JrU3RhdGVUcmFja2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L05ldHdvcmtTdGF0ZVRyYWNrZXIuamF2YQpAQCAtMTQ0LDExICsxNDQsNiBAQAogICAgIHB1YmxpYyBib29sZWFuIHJlY29ubmVjdCgpOwogCiAgICAgLyoqCi0gICAgICogUmVhZHkgdG8gc3dpdGNoIG9uIHRvIHRoZSBuZXR3b3JrIGFmdGVyIGNhcHRpdmUgcG9ydGFsIGNoZWNrCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGUoKTsKLQotICAgIC8qKgogICAgICAqIENhcHRpdmUgcG9ydGFsIGNoZWNrIGhhcyBjb21wbGV0ZWQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZWQoYm9vbGVhbiBpc0NhcHRpdmUpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L1Byb3h5UHJvcGVydGllcy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L1Byb3h5UHJvcGVydGllcy5qYXZhCmluZGV4IDAxMGU1MjcuLjU0ZmMwMWQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9Qcm94eVByb3BlcnRpZXMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvUHJveHlQcm9wZXJ0aWVzLmphdmEKQEAgLTIyLDcgKzIyLDYgQEAKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogCiBpbXBvcnQgamF2YS5uZXQuSW5ldFNvY2tldEFkZHJlc3M7Ci1pbXBvcnQgamF2YS5uZXQuVW5rbm93bkhvc3RFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvU1NMQ2VydGlmaWNhdGVTb2NrZXRGYWN0b3J5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvU1NMQ2VydGlmaWNhdGVTb2NrZXRGYWN0b3J5LmphdmEKaW5kZXggYjAyNzhkMy4uMTJlODc5MSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L1NTTENlcnRpZmljYXRlU29ja2V0RmFjdG9yeS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9TU0xDZXJ0aWZpY2F0ZVNvY2tldEZhY3RvcnkuamF2YQpAQCAtMTM1LDcgKzEzNSw4IEBACiAgICAgICogZGlzYWJsZWQsIHVzaW5nIGFuIG9wdGlvbmFsIGhhbmRzaGFrZSB0aW1lb3V0IGFuZCBTU0wgc2Vzc2lvbiBjYWNoZS4KICAgICAgKgogICAgICAqIDxwIGNsYXNzPSJjYXV0aW9uIj48Yj5XYXJuaW5nOjwvYj4gU29ja2V0cyBjcmVhdGVkIHVzaW5nIHRoaXMgZmFjdG9yeQotICAgICAqIGFyZSB2dWxuZXJhYmxlIHRvIG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MhPC9wPgorICAgICAqIGFyZSB2dWxuZXJhYmxlIHRvIG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MhPC9wPi4gVGhlIGNhbGxlciBtdXN0IGltcGxlbWVudAorICAgICAqIGl0cyBvd24gdmVyaWZpY2F0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIGhhbmRzaGFrZVRpbWVvdXRNaWxsaXMgdG8gdXNlIGZvciBTU0wgY29ubmVjdGlvbiBoYW5kc2hha2UsIG9yIDAKICAgICAgKiAgICAgICAgIGZvciBub25lLiAgVGhlIHNvY2tldCB0aW1lb3V0IGlzIHJlc2V0IHRvIDAgYWZ0ZXIgdGhlIGhhbmRzaGFrZS4KQEAgLTIyMyw4ICsyMjQsNiBAQAogICAgICAgICAgICAgaWYgKG1JbnNlY3VyZUZhY3RvcnkgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGlmIChtU2VjdXJlKSB7CiAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIioqKiBCWVBBU1NJTkcgU1NMIFNFQ1VSSVRZIENIRUNLUyAoc29ja2V0LnJlbGF4c3NsY2hlY2s9eWVzKSAqKioiKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJCeXBhc3NpbmcgU1NMIHNlY3VyaXR5IGNoZWNrcyBhdCBjYWxsZXIncyByZXF1ZXN0Iik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1JbnNlY3VyZUZhY3RvcnkgPSBtYWtlU29ja2V0RmFjdG9yeShtS2V5TWFuYWdlcnMsIElOU0VDVVJFX1RSVVNUX01BTkFHRVIpOwogICAgICAgICAgICAgfQpAQCAtNDMxLDYgKzQzMCw3IEBACiAgICAgICAgIHMuc2V0QWxwblByb3RvY29scyhtQWxwblByb3RvY29scyk7CiAgICAgICAgIHMuc2V0SGFuZHNoYWtlVGltZW91dChtSGFuZHNoYWtlVGltZW91dE1pbGxpcyk7CiAgICAgICAgIHMuc2V0Q2hhbm5lbElkUHJpdmF0ZUtleShtQ2hhbm5lbElkUHJpdmF0ZUtleSk7CisgICAgICAgIHMuc2V0SG9zdG5hbWUoaG9zdCk7CiAgICAgICAgIGlmIChtU2VjdXJlKSB7CiAgICAgICAgICAgICB2ZXJpZnlIb3N0bmFtZShzLCBob3N0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L1NTTFNlc3Npb25DYWNoZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L1NTTFNlc3Npb25DYWNoZS5qYXZhCmluZGV4IDE1NDIxZGUuLjY1ZGIyYzMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9TU0xTZXNzaW9uQ2FjaGUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvU1NMU2Vzc2lvbkNhY2hlLmphdmEKQEAgLTE5LDEyICsxOSwxNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKK2ltcG9ydCBjb20uYW5kcm9pZC5vcmcuY29uc2NyeXB0LkNsaWVudFNlc3Npb25Db250ZXh0OwogaW1wb3J0IGNvbS5hbmRyb2lkLm9yZy5jb25zY3J5cHQuRmlsZUNsaWVudFNlc3Npb25DYWNoZTsKIGltcG9ydCBjb20uYW5kcm9pZC5vcmcuY29uc2NyeXB0LlNTTENsaWVudFNlc3Npb25DYWNoZTsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogCitpbXBvcnQgamF2YXgubmV0LnNzbC5TU0xDb250ZXh0OworaW1wb3J0IGphdmF4Lm5ldC5zc2wuU1NMU2Vzc2lvbkNvbnRleHQ7CisKIC8qKgogICogRmlsZS1iYXNlZCBjYWNoZSBvZiBlc3RhYmxpc2hlZCBTU0wgc2Vzc2lvbnMuICBXaGVuIHJlLWVzdGFibGlzaGluZyBhCiAgKiBjb25uZWN0aW9uIHRvIHRoZSBzYW1lIHNlcnZlciwgdXNpbmcgYW4gU1NMIHNlc3Npb24gY2FjaGUgY2FuIHNhdmUgc29tZSB0aW1lLApAQCAtMzgsNiArNDIsNDAgQEAKICAgICAvKiBwYWNrYWdlICovIGZpbmFsIFNTTENsaWVudFNlc3Npb25DYWNoZSBtU2Vzc2lvbkNhY2hlOwogCiAgICAgLyoqCisgICAgICogSW5zdGFsbHMgYSB7QGxpbmsgU1NMU2Vzc2lvbkNhY2hlfSBvbiBhIHtAbGluayBTU0xDb250ZXh0fS4gVGhlIGNhY2hlIHdpbGwKKyAgICAgKiBiZSB1c2VkIG9uIGFsbCBzb2NrZXQgZmFjdG9yaWVzIGNyZWF0ZWQgYnkgdGhpcyBjb250ZXh0IChpbmNsdWRpbmcgZmFjdG9yaWVzCisgICAgICogY3JlYXRlZCBiZWZvcmUgdGhpcyBjYWxsKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjYWNoZSB0aGUgY2FjaGUgaW5zdGFuY2UgdG8gaW5zdGFsbCwgb3Ige0Bjb2RlIG51bGx9IHRvIHVuaW5zdGFsbCBhbnkKKyAgICAgKiAgICAgICAgIGV4aXN0aW5nIGNhY2hlLgorICAgICAqIEBwYXJhbSBjb250ZXh0IHRoZSBjb250ZXh0IHRvIGluc3RhbGwgaXQgb24uCisgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGNvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBhIHNlc3Npb24KKyAgICAgKiAgICAgICAgIGNhY2hlLgorICAgICAqCisgICAgICogQGhpZGUgY2FuZGlkYXRlIGZvciBwdWJsaWMgQVBJCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGluc3RhbGwoU1NMU2Vzc2lvbkNhY2hlIGNhY2hlLCBTU0xDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgU1NMU2Vzc2lvbkNvbnRleHQgY2xpZW50Q29udGV4dCA9IGNvbnRleHQuZ2V0Q2xpZW50U2Vzc2lvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKGNsaWVudENvbnRleHQgaW5zdGFuY2VvZiBDbGllbnRTZXNzaW9uQ29udGV4dCkgeworICAgICAgICAgICAgKChDbGllbnRTZXNzaW9uQ29udGV4dCkgY2xpZW50Q29udGV4dCkuc2V0UGVyc2lzdGVudENhY2hlKAorICAgICAgICAgICAgICAgICAgICBjYWNoZSA9PSBudWxsID8gbnVsbCA6IGNhY2hlLm1TZXNzaW9uQ2FjaGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW5jb21wYXRpYmxlIFNTTENvbnRleHQ6ICIgKyBjb250ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE5PVEU6IFRoaXMgbmVlZHMgdG8gYmUgT2JqZWN0IChhbmQgbm90IFNTTENsaWVudFNlc3Npb25DYWNoZSkgYmVjYXVzZSBhcHBzCisgICAgICogdGhhdCBidWlsZCBkaXJlY3RseSBhZ2FpbnN0IHRoZSBmcmFtZXdvcmsgKGFuZCBub3QgdGhlIFNESykgbWlnaHQgbm90IGRlY2xhcmUKKyAgICAgKiBhIGRlcGVuZGVuY3kgb24gY29uc2NyeXB0LiBKYXZhYyB3aWxsIHRoZW4gaGFzIGZhaWwgd2hpbGUgcmVzb2x2aW5nIGNvbnN0cnVjdG9ycy4KKyAgICAgKgorICAgICAqIEBoaWRlIEZvciB1bml0IHRlc3QgdXNlIG9ubHkKKyAgICAgKi8KKyAgICBwdWJsaWMgU1NMU2Vzc2lvbkNhY2hlKE9iamVjdCBjYWNoZSkgeworICAgICAgICBtU2Vzc2lvbkNhY2hlID0gKFNTTENsaWVudFNlc3Npb25DYWNoZSkgY2FjaGU7CisgICAgfQorCisgICAgLyoqCiAgICAgICogQ3JlYXRlIGEgc2Vzc2lvbiBjYWNoZSB1c2luZyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeS4KICAgICAgKiBJbmRpdmlkdWFsIHNlc3Npb24gZW50cmllcyB3aWxsIGJlIGZpbGVzIHdpdGhpbiB0aGUgZGlyZWN0b3J5LgogICAgICAqIE11bHRpcGxlIGluc3RhbmNlcyBmb3IgdGhlIHNhbWUgZGlyZWN0b3J5IHNoYXJlIGRhdGEgaW50ZXJuYWxseS4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9TbnRwQ2xpZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvU250cENsaWVudC5qYXZhCmluZGV4IDMxNjQ0MGYuLjc2NzMwMTEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9TbnRwQ2xpZW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L1NudHBDbGllbnQuamF2YQpAQCAtMTksNyArMTksNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5uZXQuRGF0YWdyYW1QYWNrZXQ7CiBpbXBvcnQgamF2YS5uZXQuRGF0YWdyYW1Tb2NrZXQ7CiBpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwQWNrUGFja2V0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwQWNrUGFja2V0LmphdmEKaW5kZXggNGVjYTUzMS4uN2I4YmU5YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2RoY3AvRGhjcEFja1BhY2tldC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9kaGNwL0RoY3BBY2tQYWNrZXQuamF2YQpAQCAtMTksNyArMTksNiBAQAogaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwogaW1wb3J0IGphdmEubmV0LkluZXQ0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvKioKICAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgREhDUC1BQ0sgcGFja2V0LgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2RoY3AvRGhjcE9mZmVyUGFja2V0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwT2ZmZXJQYWNrZXQuamF2YQppbmRleCAzZDc5ZjRkLi5mMWMzMGUxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwT2ZmZXJQYWNrZXQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwT2ZmZXJQYWNrZXQuamF2YQpAQCAtMTksNyArMTksNiBAQAogaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwogaW1wb3J0IGphdmEubmV0LkluZXQ0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvKioKICAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgREhDUC1PRkZFUiBwYWNrZXQuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwUGFja2V0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwUGFja2V0LmphdmEKaW5kZXggMzE3YTliNC4uYzdjMjVmMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2RoY3AvRGhjcFBhY2tldC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9kaGNwL0RoY3BQYWNrZXQuamF2YQpAQCAtMSw4ICsxLDUgQEAKIHBhY2thZ2UgYW5kcm9pZC5uZXQuZGhjcDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CiBpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uZXQuVW5rbm93bkhvc3RFeGNlcHRpb247CiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9kaGNwL0RoY3BTdGF0ZU1hY2hpbmUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9kaGNwL0RoY3BTdGF0ZU1hY2hpbmUuamF2YQppbmRleCBiNmMzODRkLi5iYzlhNzk4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwU3RhdGVNYWNoaW5lLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2RoY3AvRGhjcFN0YXRlTWFjaGluZS5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiBwYWNrYWdlIGFuZHJvaWQubmV0LmRoY3A7CiAKIGltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0FuZHJvaWRIdHRwQ2xpZW50Q29ubmVjdGlvbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvQW5kcm9pZEh0dHBDbGllbnRDb25uZWN0aW9uLmphdmEKaW5kZXggZWI5NjY3OS4uNmQ0OGZjZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvQW5kcm9pZEh0dHBDbGllbnRDb25uZWN0aW9uLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvQW5kcm9pZEh0dHBDbGllbnRDb25uZWN0aW9uLmphdmEKQEAgLTE2LDggKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLm5ldC5odHRwOwogCi1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLkhlYWRlcjsKLQogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwQ29ubmVjdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cENsaWVudENvbm5lY3Rpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBDb25uZWN0aW9uTWV0cmljczsKQEAgLTI3LDEyICsyNSwxMCBAQAogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwSW5ldENvbm5lY3Rpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBSZXF1ZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwUmVzcG9uc2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBSZXNwb25zZUZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLk5vSHR0cFJlc3BvbnNlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5TdGF0dXNMaW5lOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5lbnRpdHkuQmFzaWNIdHRwRW50aXR5OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5lbnRpdHkuQ29udGVudExlbmd0aFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5pbXBsLkRlZmF1bHRIdHRwUmVzcG9uc2VGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5pbXBsLkh0dHBDb25uZWN0aW9uTWV0cmljc0ltcGw7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmltcGwuZW50aXR5LkVudGl0eVNlcmlhbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmltcGwuZW50aXR5LlN0cmljdENvbnRlbnRMZW5ndGhTdHJhdGVneTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0Nvbm5lY3Rpb24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0Nvbm5lY3Rpb24uamF2YQppbmRleCA5NWNlY2QyLi44MzRhZDY5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9Db25uZWN0aW9uLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvQ29ubmVjdGlvbi5qYXZhCkBAIC0yMSw3ICsyMSw2IEBACiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmV0LlVua25vd25Ib3N0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0SXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CiAKIGltcG9ydCBqYXZheC5uZXQuc3NsLlNTTEhhbmRzaGFrZUV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0Nvbm5lY3Rpb25UaHJlYWQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0Nvbm5lY3Rpb25UaHJlYWQuamF2YQppbmRleCAzMjE5MWQyLi5kODI1NTMwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9Db25uZWN0aW9uVGhyZWFkLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvQ29ubmVjdGlvblRocmVhZC5qYXZhCkBAIC0xOSw4ICsxOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIAotaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwSG9zdDsKLQogaW1wb3J0IGphdmEubGFuZy5UaHJlYWQ7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvSHR0cENvbm5lY3Rpb24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0h0dHBDb25uZWN0aW9uLmphdmEKaW5kZXggNmRmODZiZi4uZWRmOGZlZDMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0h0dHBDb25uZWN0aW9uLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvSHR0cENvbm5lY3Rpb24uamF2YQpAQCAtMjEsOSArMjEsNyBAQAogaW1wb3J0IGphdmEubmV0LlNvY2tldDsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogCi1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBDbGllbnRDb25uZWN0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwSG9zdDsKLWltcG9ydCBvcmcuYXBhY2hlLmh0dHAuaW1wbC5EZWZhdWx0SHR0cENsaWVudENvbm5lY3Rpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLnBhcmFtcy5CYXNpY0h0dHBQYXJhbXM7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLnBhcmFtcy5IdHRwQ29ubmVjdGlvblBhcmFtczsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvSHR0cFJlc3BvbnNlQ2FjaGUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0h0dHBSZXNwb25zZUNhY2hlLmphdmEKaW5kZXggMjY5ZGZiOC4uMjc4NWExNSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvSHR0cFJlc3BvbnNlQ2FjaGUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9IdHRwUmVzcG9uc2VDYWNoZS5qYXZhCkBAIC0xNyw5ICsxNyw2IEBACiBwYWNrYWdlIGFuZHJvaWQubmV0Lmh0dHA7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBjb20uYW5kcm9pZC5va2h0dHAuT2tSZXNwb25zZUNhY2hlOwotaW1wb3J0IGNvbS5hbmRyb2lkLm9raHR0cC5SZXNwb25zZVNvdXJjZTsKLWltcG9ydCBjb20uYW5kcm9pZC5va2h0dHAuaW50ZXJuYWwuRGlza0xydUNhY2hlOwogaW1wb3J0IGphdmEuaW8uQ2xvc2VhYmxlOwogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwpAQCAtMzIsNyArMjksNiBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgamF2YXgubmV0LnNzbC5IdHRwc1VSTENvbm5lY3Rpb247Ci1pbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5pbXBsLmNsaWVudC5EZWZhdWx0SHR0cENsaWVudDsKIAogLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9IdHRwc0Nvbm5lY3Rpb24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0h0dHBzQ29ubmVjdGlvbi5qYXZhCmluZGV4IDdhMTJlNTMuLjZiZjAxZTIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0h0dHBzQ29ubmVjdGlvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL0h0dHBzQ29ubmVjdGlvbi5qYXZhCkBAIC00MCw3ICs0MCw2IEBACiBpbXBvcnQgamF2YXgubmV0LnNzbC5YNTA5VHJ1c3RNYW5hZ2VyOwogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LkluZXRTb2NrZXRBZGRyZXNzOwogaW1wb3J0IGphdmEubmV0LlNvY2tldDsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LktleU1hbmFnZW1lbnRFeGNlcHRpb247CiBpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL1JlcXVlc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL1JlcXVlc3QuamF2YQppbmRleCA4YzBkNTAzLi43NmQ3YmI5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9SZXF1ZXN0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvUmVxdWVzdC5qYXZhCkBAIC0yNiwxNSArMjYsMTIgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5lbnRpdHkuSW5wdXRTdHJlYW1FbnRpdHk7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkhlYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cENsaWVudENvbm5lY3Rpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBFbnRpdHk7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwSG9zdDsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBSZXNwb25zZTsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cFN0YXR1czsKLWltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cFZlcnNpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLlBhcnNlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5Qcm90b2NvbFZlcnNpb247CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL1JlcXVlc3RRdWV1ZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvUmVxdWVzdFF1ZXVlLmphdmEKaW5kZXggY2U2YjFhZC4uN2QyZGExYiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvUmVxdWVzdFF1ZXVlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvUmVxdWVzdFF1ZXVlLmphdmEKQEAgLTI5LDEwICsyOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya0luZm87CiBpbXBvcnQgYW5kcm9pZC5uZXQuUHJveHk7CiBpbXBvcnQgYW5kcm9pZC5uZXQuV2ViQWRkcmVzczsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvWDUwOVRydXN0TWFuYWdlckV4dGVuc2lvbnMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9odHRwL1g1MDlUcnVzdE1hbmFnZXJFeHRlbnNpb25zLmphdmEKaW5kZXggY2ZlNWYyNy4uZGI3MTI3OSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L2h0dHAvWDUwOVRydXN0TWFuYWdlckV4dGVuc2lvbnMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvaHR0cC9YNTA5VHJ1c3RNYW5hZ2VyRXh0ZW5zaW9ucy5qYXZhCkBAIC02Myw0ICs2MywxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBob3N0KSB0aHJvd3MgQ2VydGlmaWNhdGVFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbURlbGVnYXRlLmNoZWNrU2VydmVyVHJ1c3RlZChjaGFpbiwgYXV0aFR5cGUsIGhvc3QpOwogICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB3aGV0aGVyIGEgQ0EgY2VydGlmaWNhdGUgaXMgYWRkZWQgYnkgYW4gdXNlci4KKyAgICAgKgorICAgICAqIDxwPlNpbmNlIHtAbGluayBYNTA5VHJ1c3RNYW5hZ2VyI2NoZWNrU2VydmVyVHJ1c3RlZH0gYWxsb3dzIGl0cyBwYXJhbWV0ZXIge0Bjb2RlIGNoYWlufSB0bworICAgICAqIGNoYWluIHVwIHRvIHVzZXItYWRkZWQgQ0EgY2VydGlmaWNhdGVzLCB0aGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIGFkZGl0aW9uYWwKKyAgICAgKiBwb2xpY2llcyBmb3IgdXNlci1hZGRlZCBDQSBjZXJ0aWZpY2F0ZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjZXJ0aWZpY2F0ZSB3YXMgYWRkZWQgYnkgdGhlIHVzZXIsIHtAY29kZSBmYWxzZX0KKyAgICAgKiBvdGhlcndpc2UuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNVc2VyQWRkZWRDZXJ0aWZpY2F0ZShYNTA5Q2VydGlmaWNhdGUgY2VydCkgeworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmlzVXNlckFkZGVkQ2VydGlmaWNhdGUoY2VydCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmV0L25zZC9Oc2RNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvbnNkL05zZE1hbmFnZXIuamF2YQppbmRleCA5YzNlNDA1Li42ODQwMjA3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvbnNkL05zZE1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZXQvbnNkL05zZE1hbmFnZXIuamF2YQpAQCAtMTksOCArMTksNiBAQAogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudDsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU2RrQ29uc3RhbnQuU2RrQ29uc3RhbnRUeXBlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmZjL05kZWZSZWNvcmQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25mYy9OZGVmUmVjb3JkLmphdmEKaW5kZXggMmI1ODgxOC4uZGU0ODFjZiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvbmZjL05kZWZSZWNvcmQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9uZmMvTmRlZlJlY29yZC5qYXZhCkBAIC0yNjksNiArMjY5LDcgQEAKICAgICAgICAgICAgICJ1cm46ZXBjOnBhdDoiLCAvLyAweDIwCiAgICAgICAgICAgICAidXJuOmVwYzpyYXc6IiwgLy8gMHgyMQogICAgICAgICAgICAgInVybjplcGM6IiwgLy8gMHgyMgorICAgICAgICAgICAgInVybjpuZmM6IiwgLy8gMHgyMwogICAgIH07CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1BBWUxPQURfU0laRSA9IDEwICogKDEgPDwgMjApOyAgLy8gMTAgTUIgcGF5bG9hZCBsaW1pdApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvbmZjL3RlY2gvTmRlZi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmZjL3RlY2gvTmRlZi5qYXZhCmluZGV4IDY0YWEyOTk2Li44MjQwZWE2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZmMvdGVjaC9OZGVmLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmZjL3RlY2gvTmRlZi5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5uZmMuRm9ybWF0RXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQubmZjLklOZmNUYWc7CiBpbXBvcnQgYW5kcm9pZC5uZmMuTmRlZk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5uZmMuTmZjQWRhcHRlcjsKIGltcG9ydCBhbmRyb2lkLm5mYy5UYWc7CiBpbXBvcnQgYW5kcm9pZC5uZmMuVGFnTG9zdEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25mYy90ZWNoL05kZWZGb3JtYXRhYmxlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9uZmMvdGVjaC9OZGVmRm9ybWF0YWJsZS5qYXZhCmluZGV4IGZmYTZhMmIuLjQxNzVjZDAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25mYy90ZWNoL05kZWZGb3JtYXRhYmxlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmZjL3RlY2gvTmRlZkZvcm1hdGFibGUuamF2YQpAQCAtMjAsNyArMjAsNiBAQAogaW1wb3J0IGFuZHJvaWQubmZjLkZvcm1hdEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm5mYy5JTmZjVGFnOwogaW1wb3J0IGFuZHJvaWQubmZjLk5kZWZNZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQubmZjLk5mY0FkYXB0ZXI7CiBpbXBvcnQgYW5kcm9pZC5uZmMuVGFnOwogaW1wb3J0IGFuZHJvaWQubmZjLlRhZ0xvc3RFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9CYXR0ZXJ5UHJvcGVydGllcy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvQmF0dGVyeVByb3BlcnRpZXMuamF2YQppbmRleCA1ZGY1MjE0Li4yZDY3MjY0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9CYXR0ZXJ5UHJvcGVydGllcy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0JhdHRlcnlQcm9wZXJ0aWVzLmphdmEKQEAgLTMwLDggKzMwLDYgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBiYXR0ZXJ5UHJlc2VudDsKICAgICBwdWJsaWMgaW50IGJhdHRlcnlMZXZlbDsKICAgICBwdWJsaWMgaW50IGJhdHRlcnlWb2x0YWdlOwotICAgIHB1YmxpYyBpbnQgYmF0dGVyeUN1cnJlbnROb3c7Ci0gICAgcHVibGljIGludCBiYXR0ZXJ5Q2hhcmdlQ291bnRlcjsKICAgICBwdWJsaWMgaW50IGJhdHRlcnlUZW1wZXJhdHVyZTsKICAgICBwdWJsaWMgU3RyaW5nIGJhdHRlcnlUZWNobm9sb2d5OwogCkBAIC00OSw4ICs0Nyw2IEBACiAgICAgICAgIGJhdHRlcnlQcmVzZW50ID0gcC5yZWFkSW50KCkgPT0gMSA/IHRydWUgOiBmYWxzZTsKICAgICAgICAgYmF0dGVyeUxldmVsID0gcC5yZWFkSW50KCk7CiAgICAgICAgIGJhdHRlcnlWb2x0YWdlID0gcC5yZWFkSW50KCk7Ci0gICAgICAgIGJhdHRlcnlDdXJyZW50Tm93ID0gcC5yZWFkSW50KCk7Ci0gICAgICAgIGJhdHRlcnlDaGFyZ2VDb3VudGVyID0gcC5yZWFkSW50KCk7CiAgICAgICAgIGJhdHRlcnlUZW1wZXJhdHVyZSA9IHAucmVhZEludCgpOwogICAgICAgICBiYXR0ZXJ5VGVjaG5vbG9neSA9IHAucmVhZFN0cmluZygpOwogICAgIH0KQEAgLTY0LDggKzYwLDYgQEAKICAgICAgICAgcC53cml0ZUludChiYXR0ZXJ5UHJlc2VudCA/IDEgOiAwKTsKICAgICAgICAgcC53cml0ZUludChiYXR0ZXJ5TGV2ZWwpOwogICAgICAgICBwLndyaXRlSW50KGJhdHRlcnlWb2x0YWdlKTsKLSAgICAgICAgcC53cml0ZUludChiYXR0ZXJ5Q3VycmVudE5vdyk7Ci0gICAgICAgIHAud3JpdGVJbnQoYmF0dGVyeUNoYXJnZUNvdW50ZXIpOwogICAgICAgICBwLndyaXRlSW50KGJhdHRlcnlUZW1wZXJhdHVyZSk7CiAgICAgICAgIHAud3JpdGVTdHJpbmcoYmF0dGVyeVRlY2hub2xvZ3kpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0JhdHRlcnlQcm9wZXJ0eS5haWRsIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvQmF0dGVyeVByb3BlcnR5LmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmMmVjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0JhdHRlcnlQcm9wZXJ0eS5haWRsCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisqKiBDb3B5cmlnaHQgMjAxMywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBhbmRyb2lkLm9zOworCitwYXJjZWxhYmxlIEJhdHRlcnlQcm9wZXJ0eTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0JhdHRlcnlQcm9wZXJ0eS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvQmF0dGVyeVByb3BlcnR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2ZjVkZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0JhdHRlcnlQcm9wZXJ0eS5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKKy8qIENvcHlyaWdodCAyMDEzLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCitwYWNrYWdlIGFuZHJvaWQub3M7CisKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CisKKy8qKgorICoge0BoaWRlfQorICovCitwdWJsaWMgY2xhc3MgQmF0dGVyeVByb3BlcnR5IGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CisgICAgLyoKKyAgICAgKiBCYXR0ZXJ5IHByb3BlcnR5IGlkZW50aWZpZXJzLiAgVGhlc2UgbXVzdCBtYXRjaCB0aGUgdmFsdWVzIGluCisgICAgICogZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS9iYXR0ZXJ5c2VydmljZS9CYXR0ZXJ5U2VydmljZS5oCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQkFUVEVSWV9QUk9QX0NIQVJHRV9DT1VOVEVSID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCQVRURVJZX1BST1BfQ1VSUkVOVF9OT1cgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJBVFRFUllfUFJPUF9DVVJSRU5UX0FWRyA9IDM7CisKKyAgICBwdWJsaWMgaW50IHZhbHVlSW50OworCisgICAgcHVibGljIEJhdHRlcnlQcm9wZXJ0eSgpIHsKKyAgICAgICAgdmFsdWVJbnQgPSBJbnRlZ2VyLk1JTl9WQUxVRTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFBhcmNlbCByZWFkL3dyaXRlIGNvZGUgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aAorICAgICAqIGZyYW1ld29ya3MvbmF0aXZlL3NlcnZpY2VzL2JhdHRlcnlzZXJ2aWNlL0JhdHRlcnlQcm9wZXJ0eS5jcHAKKyAgICAgKi8KKworICAgIHByaXZhdGUgQmF0dGVyeVByb3BlcnR5KFBhcmNlbCBwKSB7CisgICAgICAgIHJlYWRGcm9tUGFyY2VsKHApOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlYWRGcm9tUGFyY2VsKFBhcmNlbCBwKSB7CisgICAgICAgIHZhbHVlSW50ID0gcC5yZWFkSW50KCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgcCwgaW50IGZsYWdzKSB7CisgICAgICAgIHAud3JpdGVJbnQodmFsdWVJbnQpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPEJhdHRlcnlQcm9wZXJ0eT4gQ1JFQVRPUgorICAgICAgICA9IG5ldyBQYXJjZWxhYmxlLkNyZWF0b3I8QmF0dGVyeVByb3BlcnR5PigpIHsKKyAgICAgICAgcHVibGljIEJhdHRlcnlQcm9wZXJ0eSBjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBwKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEJhdHRlcnlQcm9wZXJ0eShwKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCYXR0ZXJ5UHJvcGVydHlbXSBuZXdBcnJheShpbnQgc2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBCYXR0ZXJ5UHJvcGVydHlbc2l6ZV07CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9CYXR0ZXJ5U3RhdHMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0JhdHRlcnlTdGF0cy5qYXZhCmluZGV4IGIxYTllYTMwLi4wNmZkOGZiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9CYXR0ZXJ5U3RhdHMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9CYXR0ZXJ5U3RhdHMuamF2YQpAQCAtMjYsNyArMjYsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKIGltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5TaWduYWxTdHJlbmd0aDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5QcmludGVyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0NvbW1vbkNsb2NrLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Db21tb25DbG9jay5qYXZhCmluZGV4IDNhMWRhOTcuLjJlY2YzMTcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0NvbW1vbkNsb2NrLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvQ29tbW9uQ2xvY2suamF2YQpAQCAtMTUsMTcgKzE1LDggQEAKICAqLwogcGFja2FnZSBhbmRyb2lkLm9zOwogCi1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldDRBZGRyZXNzOwotaW1wb3J0IGphdmEubmV0LkluZXQ2QWRkcmVzczsKIGltcG9ydCBqYXZhLm5ldC5JbmV0U29ja2V0QWRkcmVzczsKIGltcG9ydCBqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKLWltcG9ydCBzdGF0aWMgbGliY29yZS5pby5Pc0NvbnN0YW50cy4qOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Db21tb25UaW1lVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvQ29tbW9uVGltZUNvbmZpZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvQ29tbW9uVGltZUNvbmZpZy5qYXZhCmluZGV4IDMzNTVlZTMuLjFmOWZhYjUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0NvbW1vblRpbWVDb25maWcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Db21tb25UaW1lQ29uZmlnLmphdmEKQEAgLTE1LDcgKzE1LDYgQEAKICAqLwogcGFja2FnZSBhbmRyb2lkLm9zOwogCi1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uZXQuSW5ldFNvY2tldEFkZHJlc3M7CiBpbXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0NvdW50RG93blRpbWVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Db3VudERvd25UaW1lci5qYXZhCmluZGV4IDE1ZTY0MDUuLmM1YjExNDYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0NvdW50RG93blRpbWVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvQ291bnREb3duVGltZXIuamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQub3M7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIFNjaGVkdWxlIGEgY291bnRkb3duIHVudGlsIGEgdGltZSBpbiB0aGUgZnV0dXJlLCB3aXRoCiAgKiByZWd1bGFyIG5vdGlmaWNhdGlvbnMgb24gaW50ZXJ2YWxzIGFsb25nIHRoZSB3YXkuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9EZWJ1Zy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvRGVidWcuamF2YQppbmRleCA5NzRiZjhkLi43ZjE2N2Q1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9EZWJ1Zy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0RlYnVnLmphdmEKQEAgLTI2LDcgKzI2LDYgQEAKIGltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLmlvLlJlYWRlcjsKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKQEAgLTQxLDcgKzQwLDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLmhhcm1vbnkuZGFsdmlrLmRkbWMuRGRtU2VydmVyOwogCiBpbXBvcnQgZGFsdmlrLmJ5dGVjb2RlLk9wY29kZUluZm87Ci1pbXBvcnQgZGFsdmlrLmJ5dGVjb2RlLk9wY29kZXM7CiBpbXBvcnQgZGFsdmlrLnN5c3RlbS5WTURlYnVnOwogCiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0Ryb3BCb3hNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Ecm9wQm94TWFuYWdlci5qYXZhCmluZGV4IGUxYzE2NzguLjI3MDAxZGMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0Ryb3BCb3hNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvRHJvcEJveE1hbmFnZXIuamF2YQpAQCAtMTYsMTQgKzE2LDExIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5vczsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5JRHJvcEJveE1hbmFnZXJTZXJ2aWNlOwogCiBpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkNsb3NlYWJsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEudXRpbC56aXAuR1pJUElucHV0U3RyZWFtOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvRmlsZU9ic2VydmVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9GaWxlT2JzZXJ2ZXIuamF2YQppbmRleCBkNjMzNDg2Li40ZTcwNWUwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9GaWxlT2JzZXJ2ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9GaWxlT2JzZXJ2ZXIuamF2YQpAQCAtMTgsMTAgKzE4LDcgQEAKIAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5SdW50aW1lSW5pdDsKLQogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogCiAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0ZpbGVVdGlscy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvRmlsZVV0aWxzLmphdmEKaW5kZXggZmYzZTI3Ny4uMmQ2MGRmMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvRmlsZVV0aWxzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvRmlsZVV0aWxzLmphdmEKQEAgLTIwLDkgKzIwLDcgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIAogaW1wb3J0IGxpYmNvcmUuaW8uRXJybm9FeGNlcHRpb247Ci1pbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOwogaW1wb3J0IGxpYmNvcmUuaW8uTGliY29yZTsKLWltcG9ydCBsaWJjb3JlLmlvLk9zQ29uc3RhbnRzOwogCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvSUJhdHRlcnlQcm9wZXJ0aWVzUmVnaXN0cmFyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9JQmF0dGVyeVByb3BlcnRpZXNSZWdpc3RyYXIuYWlkbAppbmRleCAzNzZmNmM5Li5mZDAxODAyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9JQmF0dGVyeVByb3BlcnRpZXNSZWdpc3RyYXIuYWlkbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9JQmF0dGVyeVByb3BlcnRpZXNSZWdpc3RyYXIuYWlkbApAQCAtMTcsNiArMTcsNyBAQAogcGFja2FnZSBhbmRyb2lkLm9zOwogCiBpbXBvcnQgYW5kcm9pZC5vcy5JQmF0dGVyeVByb3BlcnRpZXNMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJhdHRlcnlQcm9wZXJ0eTsKIAogLyoqCiAgKiB7QGhpZGV9CkBAIC0yNSw0ICsyNiw1IEBACiBpbnRlcmZhY2UgSUJhdHRlcnlQcm9wZXJ0aWVzUmVnaXN0cmFyIHsKICAgICB2b2lkIHJlZ2lzdGVyTGlzdGVuZXIoSUJhdHRlcnlQcm9wZXJ0aWVzTGlzdGVuZXIgbGlzdGVuZXIpOwogICAgIHZvaWQgdW5yZWdpc3Rlckxpc3RlbmVyKElCYXR0ZXJ5UHJvcGVydGllc0xpc3RlbmVyIGxpc3RlbmVyKTsKKyAgICBpbnQgZ2V0UHJvcGVydHkoaW4gaW50IGlkLCBvdXQgQmF0dGVyeVByb3BlcnR5IHByb3ApOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvSUJpbmRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvSUJpbmRlci5qYXZhCmluZGV4IGEyNDMyZDYuLjczYTBmNjUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0lCaW5kZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9JQmluZGVyLmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5vczsKIAogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIAogLyoqCiAgKiBCYXNlIGludGVyZmFjZSBmb3IgYSByZW1vdGFibGUgb2JqZWN0LCB0aGUgY29yZSBwYXJ0IG9mIGEgbGlnaHR3ZWlnaHQKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0xvb3Blci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvTG9vcGVyLmphdmEKaW5kZXggMjFlOWY2Yi4uZmYzMTEzMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvTG9vcGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvTG9vcGVyLmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlByaW50ZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlByZWZpeFByaW50ZXI7CiAKIC8qKgogICAqIENsYXNzIHVzZWQgdG8gcnVuIGEgbWVzc2FnZSBsb29wIGZvciBhIHRocmVhZC4gIFRocmVhZHMgYnkgZGVmYXVsdCBkbwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvTWVzc2FnZVF1ZXVlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9NZXNzYWdlUXVldWUuamF2YQppbmRleCA3OTlkZTVjLi5lOTBhNDU3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9NZXNzYWdlUXVldWUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9NZXNzYWdlUXVldWUuamF2YQpAQCAtMTI2LDYgKzEyNiwxNCBAQAogICAgIH0KIAogICAgIE1lc3NhZ2UgbmV4dCgpIHsKKyAgICAgICAgLy8gUmV0dXJuIGhlcmUgaWYgdGhlIG1lc3NhZ2UgbG9vcCBoYXMgYWxyZWFkeSBxdWl0IGFuZCBiZWVuIGRpc3Bvc2VkLgorICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIGFwcGxpY2F0aW9uIHRyaWVzIHRvIHJlc3RhcnQgYSBsb29wZXIgYWZ0ZXIgcXVpdAorICAgICAgICAvLyB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAgICBmaW5hbCBpbnQgcHRyID0gbVB0cjsKKyAgICAgICAgaWYgKHB0ciA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCiAgICAgICAgIGludCBwZW5kaW5nSWRsZUhhbmRsZXJDb3VudCA9IC0xOyAvLyAtMSBvbmx5IGR1cmluZyBmaXJzdCBpdGVyYXRpb24KICAgICAgICAgaW50IG5leHRQb2xsVGltZW91dE1pbGxpcyA9IDA7CiAgICAgICAgIGZvciAoOzspIHsKQEAgLTEzMyw5ICsxNDEsNyBAQAogICAgICAgICAgICAgICAgIEJpbmRlci5mbHVzaFBlbmRpbmdDb21tYW5kcygpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBXZSBjYW4gYXNzdW1lIG1QdHIgIT0gMCBiZWNhdXNlIHRoZSBsb29wIGlzIG9idmlvdXNseSBzdGlsbCBydW5uaW5nLgotICAgICAgICAgICAgLy8gVGhlIGxvb3BlciB3aWxsIG5vdCBjYWxsIHRoaXMgbWV0aG9kIGFmdGVyIHRoZSBsb29wIHF1aXRzLgotICAgICAgICAgICAgbmF0aXZlUG9sbE9uY2UobVB0ciwgbmV4dFBvbGxUaW1lb3V0TWlsbGlzKTsKKyAgICAgICAgICAgIG5hdGl2ZVBvbGxPbmNlKHB0ciwgbmV4dFBvbGxUaW1lb3V0TWlsbGlzKTsKIAogICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHJldHJpZXZlIHRoZSBuZXh0IG1lc3NhZ2UuICBSZXR1cm4gaWYgZm91bmQuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9OdWxsVmlicmF0b3IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL29zL051bGxWaWJyYXRvci5qYXZhCmluZGV4IGFjNjAyN2YuLmFmOTBiZGIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL051bGxWaWJyYXRvci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL051bGxWaWJyYXRvci5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5vczsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIC8qKgogICogVmlicmF0b3IgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdGhpbmcuCiAgKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yLmphdmEKaW5kZXggNTI3M2MyMC4uODZkYzhiNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3IuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvci5qYXZhCkBAIC04NzIsNiArODcyLDggQEAKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBvdXQsIGludCBmbGFncykgeworICAgICAgICAvLyBXQVJOSU5HOiBUaGlzIG11c3Qgc3RheSBpbiBzeW5jIHdpdGggUGFyY2VsOjpyZWFkUGFyY2VsRmlsZURlc2NyaXB0b3IoKQorICAgICAgICAvLyBpbiBmcmFtZXdvcmtzL25hdGl2ZS9saWJzL2JpbmRlci9QYXJjZWwuY3BwCiAgICAgICAgIGlmIChtV3JhcHBlZCAhPSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1XcmFwcGVkLndyaXRlVG9QYXJjZWwob3V0LCBmbGFncyk7CkBAIC04OTcsNiArODk5LDggQEAKICAgICAgICAgICAgID0gbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxQYXJjZWxGaWxlRGVzY3JpcHRvcj4oKSB7CiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgUGFyY2VsRmlsZURlc2NyaXB0b3IgY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgaW4pIHsKKyAgICAgICAgICAgIC8vIFdBUk5JTkc6IFRoaXMgbXVzdCBzdGF5IGluIHN5bmMgd2l0aCBQYXJjZWw6OndyaXRlUGFyY2VsRmlsZURlc2NyaXB0b3IoKQorICAgICAgICAgICAgLy8gaW4gZnJhbWV3b3Jrcy9uYXRpdmUvbGlicy9iaW5kZXIvUGFyY2VsLmNwcAogICAgICAgICAgICAgZmluYWwgRmlsZURlc2NyaXB0b3IgZmQgPSBpbi5yZWFkUmF3RmlsZURlc2NyaXB0b3IoKTsKICAgICAgICAgICAgIEZpbGVEZXNjcmlwdG9yIGNvbW1DaGFubmVsID0gbnVsbDsKICAgICAgICAgICAgIGlmIChpbi5yZWFkSW50KCkgIT0gMCkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvUHJvY2Vzcy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvUHJvY2Vzcy5qYXZhCmluZGV4IDYzMWVkZDYuLjA1N2Y1MTYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1Byb2Nlc3MuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Qcm9jZXNzLmphdmEKQEAgLTg5MiwxOSArODkyLDYgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTZXQgdGhlIG91dC1vZi1tZW1vcnkgYmFkbmVzcyBhZGp1c3RtZW50IGZvciBhIHByb2Nlc3MuCi0gICAgICogCi0gICAgICogQHBhcmFtIHBpZCBUaGUgcHJvY2VzcyBpZGVudGlmaWVyIHRvIHNldC4KLSAgICAgKiBAcGFyYW0gYW10IEFkanVzdG1lbnQgdmFsdWUgLS0gbGludXggYWxsb3dzIC0xNiB0byArMTUuCi0gICAgICogCi0gICAgICogQHJldHVybiBSZXR1cm5zIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgc3lzdGVtIHN1cHBvcnRzIHRoaXMKLSAgICAgKiAgICAgICAgIGZlYXR1cmUsIGVsc2UgZmFsc2UuCi0gICAgICogICAgICAgICAKLSAgICAgKiB7QGhpZGV9Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBuYXRpdmUgYm9vbGVhbiBzZXRPb21BZGooaW50IHBpZCwgaW50IGFtdCk7Ci0KLSAgICAvKioKICAgICAgKiBBZGp1c3QgdGhlIHN3YXBwaW5lc3MgbGV2ZWwgZm9yIGEgcHJvY2Vzcy4KICAgICAgKgogICAgICAqIEBwYXJhbSBwaWQgVGhlIHByb2Nlc3MgaWRlbnRpZmllciB0byBzZXQuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9SZWdpc3RyYW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9SZWdpc3RyYW50LmphdmEKaW5kZXggYzE3ODBiOS4uNzA1Y2M1ZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvUmVnaXN0cmFudC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1JlZ2lzdHJhbnQuamF2YQpAQCAtMjAsNyArMjAsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIAogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIAogLyoqIEBoaWRlICovCiBwdWJsaWMgY2xhc3MgUmVnaXN0cmFudApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvUmVnaXN0cmFudExpc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1JlZ2lzdHJhbnRMaXN0LmphdmEKaW5kZXggNTZiOWUyYi4uOWFiNjFmNSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvUmVnaXN0cmFudExpc3QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9SZWdpc3RyYW50TGlzdC5qYXZhCkBAIC0xNywxMCArMTcsOCBAQAogcGFja2FnZSBhbmRyb2lkLm9zOwogCiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOyAgICAgICAgIAotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsgICAgICAgICAKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiAKIC8qKiBAaGlkZSAqLwogcHVibGljIGNsYXNzIFJlZ2lzdHJhbnRMaXN0CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9TeXN0ZW1Qcm9wZXJ0aWVzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9TeXN0ZW1Qcm9wZXJ0aWVzLmphdmEKaW5kZXggMTU2NjAwZS4uMTQ3OTAzNSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvU3lzdGVtUHJvcGVydGllcy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1N5c3RlbVByb3BlcnRpZXMuamF2YQpAQCAtMTgsOCArMTgsNiBAQAogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIAogLyoqCiAgKiBHaXZlcyBhY2Nlc3MgdG8gdGhlIHN5c3RlbSBwcm9wZXJ0aWVzIHN0b3JlLiAgVGhlIHN5c3RlbSBwcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9TeXN0ZW1TZXJ2aWNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9TeXN0ZW1TZXJ2aWNlLmphdmEKaW5kZXggZjM0NTI3MS4uNDFlNzU0NiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvU3lzdGVtU2VydmljZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1N5c3RlbVNlcnZpY2UuamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQub3M7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKLQogaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5jb2xsZWN0Lk1hcHM7CiAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1RyYWNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9UcmFjZS5qYXZhCmluZGV4IDMyNDliY2IuLjU3ZWQ5NzkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1RyYWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvVHJhY2UuamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQub3M7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIFdyaXRlcyB0cmFjZSBldmVudHMgdG8gdGhlIHN5c3RlbSB0cmFjZSBidWZmZXIuICBUaGVzZSB0cmFjZSBldmVudHMgY2FuIGJlCiAgKiBjb2xsZWN0ZWQgYW5kIHZpc3VhbGl6ZWQgdXNpbmcgdGhlIFN5c3RyYWNlIHRvb2wuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9Vc2VyTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvVXNlck1hbmFnZXIuamF2YQppbmRleCBhMzc1MmExLi41ZDA4N2VhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9Vc2VyTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1VzZXJNYW5hZ2VyLmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlck5hdGl2ZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuUmVzdHJpY3Rpb25FbnRyeTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uVXNlckluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL0NoZWNrQm94UHJlZmVyZW5jZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9DaGVja0JveFByZWZlcmVuY2UuamF2YQppbmRleCAxNTM2NzYwLi4xY2U5OGI4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL0NoZWNrQm94UHJlZmVyZW5jZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvQ2hlY2tCb3hQcmVmZXJlbmNlLmphdmEKQEAgLTM0LDExICszNCwxNiBAQAogICovCiBwdWJsaWMgY2xhc3MgQ2hlY2tCb3hQcmVmZXJlbmNlIGV4dGVuZHMgVHdvU3RhdGVQcmVmZXJlbmNlIHsKIAotICAgIHB1YmxpYyBDaGVja0JveFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwotICAgICAgICAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkNoZWNrQm94UHJlZmVyZW5jZSwgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBDaGVja0JveFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ2hlY2tCb3hQcmVmZXJlbmNlKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkNoZWNrQm94UHJlZmVyZW5jZSwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIHNldFN1bW1hcnlPbihhLmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5DaGVja0JveFByZWZlcmVuY2Vfc3VtbWFyeU9uKSk7CiAgICAgICAgIHNldFN1bW1hcnlPZmYoYS5nZXRTdHJpbmcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQ2hlY2tCb3hQcmVmZXJlbmNlX3N1bW1hcnlPZmYpKTsKICAgICAgICAgc2V0RGlzYWJsZURlcGVuZGVudHNTdGF0ZShhLmdldEJvb2xlYW4oCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL0RpYWxvZ1ByZWZlcmVuY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvRGlhbG9nUHJlZmVyZW5jZS5qYXZhCmluZGV4IGE2NDNjOGEuLjUyNzViYzAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvRGlhbG9nUHJlZmVyZW5jZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvRGlhbG9nUHJlZmVyZW5jZS5qYXZhCkBAIC02NCwxMiArNjQsMTMgQEAKIAogICAgIC8qKiBXaGljaCBidXR0b24gd2FzIGNsaWNrZWQuICovCiAgICAgcHJpdmF0ZSBpbnQgbVdoaWNoQnV0dG9uQ2xpY2tlZDsKLSAgICAKLSAgICBwdWJsaWMgRGlhbG9nUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7Ci0gICAgICAgIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRGlhbG9nUHJlZmVyZW5jZSwgZGVmU3R5bGUsIDApOworCisgICAgcHVibGljIERpYWxvZ1ByZWZlcmVuY2UoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRGlhbG9nUHJlZmVyZW5jZSwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1EaWFsb2dUaXRsZSA9IGEuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkRpYWxvZ1ByZWZlcmVuY2VfZGlhbG9nVGl0bGUpOwogICAgICAgICBpZiAobURpYWxvZ1RpdGxlID09IG51bGwpIHsKICAgICAgICAgICAgIC8vIEZhbGxiYWNrIG9uIHRoZSByZWd1bGFyIHRpdGxlIG9mIHRoZSBwcmVmZXJlbmNlCkBAIC04MywxMyArODQsMjAgQEAKICAgICAgICAgbURpYWxvZ0xheW91dFJlc0lkID0gYS5nZXRSZXNvdXJjZUlkKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkRpYWxvZ1ByZWZlcmVuY2VfZGlhbG9nTGF5b3V0LAogICAgICAgICAgICAgICAgIG1EaWFsb2dMYXlvdXRSZXNJZCk7CiAgICAgICAgIGEucmVjeWNsZSgpOwotICAgICAgICAKKyAgICB9CisKKyAgICBwdWJsaWMgRGlhbG9nUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOwogICAgIH0KIAogICAgIHB1YmxpYyBEaWFsb2dQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5kaWFsb2dQcmVmZXJlbmNlU3R5bGUpOwogICAgIH0KLSAgICAKKworICAgIHB1YmxpYyBEaWFsb2dQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCkgeworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuIFRoaXMgd2lsbCBiZSBzaG93biBvbiBzdWJzZXF1ZW50IGRpYWxvZ3MuCiAgICAgICogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL0VkaXRUZXh0UHJlZmVyZW5jZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9FZGl0VGV4dFByZWZlcmVuY2UuamF2YQppbmRleCBhYTI3NjI3Li5mZjM3MDQyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL0VkaXRUZXh0UHJlZmVyZW5jZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvRWRpdFRleHRQcmVmZXJlbmNlLmphdmEKQEAgLTQ5LDkgKzQ5LDkgQEAKICAgICBwcml2YXRlIEVkaXRUZXh0IG1FZGl0VGV4dDsKICAgICAKICAgICBwcml2YXRlIFN0cmluZyBtVGV4dDsKLSAgICAKLSAgICBwdWJsaWMgRWRpdFRleHRQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKworICAgIHB1YmxpYyBFZGl0VGV4dFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIAogICAgICAgICBtRWRpdFRleHQgPSBuZXcgRWRpdFRleHQoY29udGV4dCwgYXR0cnMpOwogICAgICAgICAKQEAgLTY3LDYgKzY3LDEwIEBACiAgICAgICAgIG1FZGl0VGV4dC5zZXRFbmFibGVkKHRydWUpOwogICAgIH0KIAorICAgIHB1YmxpYyBFZGl0VGV4dFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKICAgICBwdWJsaWMgRWRpdFRleHRQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5lZGl0VGV4dFByZWZlcmVuY2VTdHlsZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9MaXN0UHJlZmVyZW5jZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9MaXN0UHJlZmVyZW5jZS5qYXZhCmluZGV4IDllZGYxMTIuLjgwODFhNTQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvTGlzdFByZWZlcmVuY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL0xpc3RQcmVmZXJlbmNlLmphdmEKQEAgLTQyLDEyICs0MiwxMiBAQAogICAgIHByaXZhdGUgU3RyaW5nIG1TdW1tYXJ5OwogICAgIHByaXZhdGUgaW50IG1DbGlja2VkRGlhbG9nRW50cnlJbmRleDsKICAgICBwcml2YXRlIGJvb2xlYW4gbVZhbHVlU2V0OwotICAgIAotICAgIHB1YmxpYyBMaXN0UHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGlzdFByZWZlcmVuY2UsIDAsIDApOworCisgICAgcHVibGljIExpc3RQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGlzdFByZWZlcmVuY2UsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBtRW50cmllcyA9IGEuZ2V0VGV4dEFycmF5KGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkxpc3RQcmVmZXJlbmNlX2VudHJpZXMpOwogICAgICAgICBtRW50cnlWYWx1ZXMgPSBhLmdldFRleHRBcnJheShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5MaXN0UHJlZmVyZW5jZV9lbnRyeVZhbHVlcyk7CiAgICAgICAgIGEucmVjeWNsZSgpOwpAQCAtNTYsMTEgKzU2LDE5IEBACiAgICAgICAgICAqIGluIHRoZSBQcmVmZXJlbmNlIGNsYXNzLgogICAgICAgICAgKi8KICAgICAgICAgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgbVN1bW1hcnkgPSBhLmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlX3N1bW1hcnkpOwogICAgICAgICBhLnJlY3ljbGUoKTsKICAgICB9CiAKKyAgICBwdWJsaWMgTGlzdFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmRpYWxvZ1ByZWZlcmVuY2VTdHlsZSk7CisgICAgfQorCiAgICAgcHVibGljIExpc3RQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCkgewogICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvTXVsdGlDaGVja1ByZWZlcmVuY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvTXVsdGlDaGVja1ByZWZlcmVuY2UuamF2YQppbmRleCA2OTUzMDc1Li41N2M5MDZkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL011bHRpQ2hlY2tQcmVmZXJlbmNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9NdWx0aUNoZWNrUHJlZmVyZW5jZS5qYXZhCkBAIC00MCwxMiArNDAsMTMgQEAKICAgICBwcml2YXRlIGJvb2xlYW5bXSBtU2V0VmFsdWVzOwogICAgIHByaXZhdGUgYm9vbGVhbltdIG1PcmlnVmFsdWVzOwogICAgIHByaXZhdGUgU3RyaW5nIG1TdW1tYXJ5OwotICAgIAotICAgIHB1YmxpYyBNdWx0aUNoZWNrUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGlzdFByZWZlcmVuY2UsIDAsIDApOworCisgICAgcHVibGljIE11bHRpQ2hlY2tQcmVmZXJlbmNlKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5MaXN0UHJlZmVyZW5jZSwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1FbnRyaWVzID0gYS5nZXRUZXh0QXJyYXkoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGlzdFByZWZlcmVuY2VfZW50cmllcyk7CiAgICAgICAgIGlmIChtRW50cmllcyAhPSBudWxsKSB7CiAgICAgICAgICAgICBzZXRFbnRyaWVzKG1FbnRyaWVzKTsKQEAgLTYzLDYgKzY0LDE0IEBACiAgICAgICAgIGEucmVjeWNsZSgpOwogICAgIH0KIAorICAgIHB1YmxpYyBNdWx0aUNoZWNrUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBNdWx0aUNoZWNrUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuZGlhbG9nUHJlZmVyZW5jZVN0eWxlKTsKKyAgICB9CisKICAgICBwdWJsaWMgTXVsdGlDaGVja1ByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9NdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL011bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UuamF2YQppbmRleCA1NTNjZTgwLi42YzRjMjBmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL011bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL011bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UuamF2YQpAQCAtNDQsMTYgKzQ0LDI2IEBACiAgICAgcHJpdmF0ZSBTZXQ8U3RyaW5nPiBtVmFsdWVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwogICAgIHByaXZhdGUgU2V0PFN0cmluZz4gbU5ld1ZhbHVlcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKICAgICBwcml2YXRlIGJvb2xlYW4gbVByZWZlcmVuY2VDaGFuZ2VkOwotICAgIAotICAgIHB1YmxpYyBNdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKLSAgICAgICAgCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5NdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlLCAwLCAwKTsKKworICAgIHB1YmxpYyBNdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLk11bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UsIGRlZlN0eWxlQXR0ciwKKyAgICAgICAgICAgICAgICBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1FbnRyaWVzID0gYS5nZXRUZXh0QXJyYXkoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTXVsdGlTZWxlY3RMaXN0UHJlZmVyZW5jZV9lbnRyaWVzKTsKICAgICAgICAgbUVudHJ5VmFsdWVzID0gYS5nZXRUZXh0QXJyYXkoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTXVsdGlTZWxlY3RMaXN0UHJlZmVyZW5jZV9lbnRyeVZhbHVlcyk7CiAgICAgICAgIGEucmVjeWNsZSgpOwogICAgIH0KKworICAgIHB1YmxpYyBNdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIE11bHRpU2VsZWN0TGlzdFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmRpYWxvZ1ByZWZlcmVuY2VTdHlsZSk7CisgICAgfQogICAgIAogICAgIHB1YmxpYyBNdWx0aVNlbGVjdExpc3RQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCkgewogICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2UuamF2YQppbmRleCBmN2QxZWI3Li43NmZjY2M3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2UuamF2YQpAQCAtMTg4LDMwICsxODgsMzMgQEAKIAogICAgIC8qKgogICAgICAqIFBlcmZvcm0gaW5mbGF0aW9uIGZyb20gWE1MIGFuZCBhcHBseSBhIGNsYXNzLXNwZWNpZmljIGJhc2Ugc3R5bGUuIFRoaXMKLSAgICAgKiBjb25zdHJ1Y3RvciBvZiBQcmVmZXJlbmNlIGFsbG93cyBzdWJjbGFzc2VzIHRvIHVzZSB0aGVpciBvd24gYmFzZQotICAgICAqIHN0eWxlIHdoZW4gdGhleSBhcmUgaW5mbGF0aW5nLiBGb3IgZXhhbXBsZSwgYSB7QGxpbmsgQ2hlY2tCb3hQcmVmZXJlbmNlfQorICAgICAqIGNvbnN0cnVjdG9yIG9mIFByZWZlcmVuY2UgYWxsb3dzIHN1YmNsYXNzZXMgdG8gdXNlIHRoZWlyIG93biBiYXNlIHN0eWxlCisgICAgICogd2hlbiB0aGV5IGFyZSBpbmZsYXRpbmcuIEZvciBleGFtcGxlLCBhIHtAbGluayBDaGVja0JveFByZWZlcmVuY2V9CiAgICAgICogY29uc3RydWN0b3IgY2FsbHMgdGhpcyB2ZXJzaW9uIG9mIHRoZSBzdXBlciBjbGFzcyBjb25zdHJ1Y3RvciBhbmQKLSAgICAgKiBzdXBwbGllcyB7QGNvZGUgYW5kcm9pZC5SLmF0dHIuY2hlY2tCb3hQcmVmZXJlbmNlU3R5bGV9IGZvciA8dmFyPmRlZlN0eWxlPC92YXI+LgotICAgICAqIFRoaXMgYWxsb3dzIHRoZSB0aGVtZSdzIGNoZWNrYm94IHByZWZlcmVuY2Ugc3R5bGUgdG8gbW9kaWZ5IGFsbCBvZiB0aGUgYmFzZQotICAgICAqIHByZWZlcmVuY2UgYXR0cmlidXRlcyBhcyB3ZWxsIGFzIHRoZSB7QGxpbmsgQ2hlY2tCb3hQcmVmZXJlbmNlfSBjbGFzcydzCi0gICAgICogYXR0cmlidXRlcy4KLSAgICAgKiAKKyAgICAgKiBzdXBwbGllcyB7QGNvZGUgYW5kcm9pZC5SLmF0dHIuY2hlY2tCb3hQcmVmZXJlbmNlU3R5bGV9IGZvcgorICAgICAqIDx2YXI+ZGVmU3R5bGVBdHRyPC92YXI+LiBUaGlzIGFsbG93cyB0aGUgdGhlbWUncyBjaGVja2JveCBwcmVmZXJlbmNlCisgICAgICogc3R5bGUgdG8gbW9kaWZ5IGFsbCBvZiB0aGUgYmFzZSBwcmVmZXJlbmNlIGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyB0aGUKKyAgICAgKiB7QGxpbmsgQ2hlY2tCb3hQcmVmZXJlbmNlfSBjbGFzcydzIGF0dHJpYnV0ZXMuCisgICAgICoKICAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dCB0aGlzIGlzIGFzc29jaWF0ZWQgd2l0aCwgdGhyb3VnaCB3aGljaCBpdCBjYW4KLSAgICAgKiAgICAgICAgICAgIGFjY2VzcyB0aGUgY3VycmVudCB0aGVtZSwgcmVzb3VyY2VzLCB7QGxpbmsgU2hhcmVkUHJlZmVyZW5jZXN9LAotICAgICAqICAgICAgICAgICAgZXRjLgotICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgWE1MIHRhZyB0aGF0IGlzIGluZmxhdGluZyB0aGUgcHJlZmVyZW5jZS4KLSAgICAgKiBAcGFyYW0gZGVmU3R5bGUgVGhlIGRlZmF1bHQgc3R5bGUgdG8gYXBwbHkgdG8gdGhpcyBwcmVmZXJlbmNlLiBJZiAwLCBubyBzdHlsZQotICAgICAqICAgICAgICAgICAgd2lsbCBiZSBhcHBsaWVkIChiZXlvbmQgd2hhdCBpcyBpbmNsdWRlZCBpbiB0aGUgdGhlbWUpLiBUaGlzCi0gICAgICogICAgICAgICAgICBtYXkgZWl0aGVyIGJlIGFuIGF0dHJpYnV0ZSByZXNvdXJjZSwgd2hvc2UgdmFsdWUgd2lsbCBiZQotICAgICAqICAgICAgICAgICAgcmV0cmlldmVkIGZyb20gdGhlIGN1cnJlbnQgdGhlbWUsIG9yIGFuIGV4cGxpY2l0IHN0eWxlCi0gICAgICogICAgICAgICAgICByZXNvdXJjZS4KKyAgICAgKiAgICAgICAgICAgIGFjY2VzcyB0aGUgY3VycmVudCB0aGVtZSwgcmVzb3VyY2VzLAorICAgICAqICAgICAgICAgICAge0BsaW5rIFNoYXJlZFByZWZlcmVuY2VzfSwgZXRjLgorICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgWE1MIHRhZyB0aGF0IGlzIGluZmxhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgIHByZWZlcmVuY2UuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVSZXMgQSByZXNvdXJjZSBpZGVudGlmaWVyIG9mIGEgc3R5bGUgcmVzb3VyY2UgdGhhdAorICAgICAqICAgICAgICAgICAgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSB2aWV3LCB1c2VkIG9ubHkgaWYKKyAgICAgKiAgICAgICAgICAgIGRlZlN0eWxlQXR0ciBpcyAwIG9yIGNhbiBub3QgYmUgZm91bmQgaW4gdGhlIHRoZW1lLiBDYW4gYmUgMAorICAgICAqICAgICAgICAgICAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgogICAgICAqIEBzZWUgI1ByZWZlcmVuY2UoQ29udGV4dCwgQXR0cmlidXRlU2V0KQogICAgICAqLwotICAgIHB1YmxpYyBQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKKyAgICBwdWJsaWMgUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CiAgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuUHJlZmVyZW5jZSwgZGVmU3R5bGUsIDApOworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlByZWZlcmVuY2UsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBmb3IgKGludCBpID0gYS5nZXRJbmRleENvdW50KCk7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICBpbnQgYXR0ciA9IGEuZ2V0SW5kZXgoaSk7IAogICAgICAgICAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC0yODEsNiArMjg0LDMwIEBACiAgICAgICAgICAgICBtQ2FuUmVjeWNsZUxheW91dCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQorCisgICAgLyoqCisgICAgICogUGVyZm9ybSBpbmZsYXRpb24gZnJvbSBYTUwgYW5kIGFwcGx5IGEgY2xhc3Mtc3BlY2lmaWMgYmFzZSBzdHlsZS4gVGhpcworICAgICAqIGNvbnN0cnVjdG9yIG9mIFByZWZlcmVuY2UgYWxsb3dzIHN1YmNsYXNzZXMgdG8gdXNlIHRoZWlyIG93biBiYXNlIHN0eWxlCisgICAgICogd2hlbiB0aGV5IGFyZSBpbmZsYXRpbmcuIEZvciBleGFtcGxlLCBhIHtAbGluayBDaGVja0JveFByZWZlcmVuY2V9CisgICAgICogY29uc3RydWN0b3IgY2FsbHMgdGhpcyB2ZXJzaW9uIG9mIHRoZSBzdXBlciBjbGFzcyBjb25zdHJ1Y3RvciBhbmQKKyAgICAgKiBzdXBwbGllcyB7QGNvZGUgYW5kcm9pZC5SLmF0dHIuY2hlY2tCb3hQcmVmZXJlbmNlU3R5bGV9IGZvcgorICAgICAqIDx2YXI+ZGVmU3R5bGVBdHRyPC92YXI+LiBUaGlzIGFsbG93cyB0aGUgdGhlbWUncyBjaGVja2JveCBwcmVmZXJlbmNlCisgICAgICogc3R5bGUgdG8gbW9kaWZ5IGFsbCBvZiB0aGUgYmFzZSBwcmVmZXJlbmNlIGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyB0aGUKKyAgICAgKiB7QGxpbmsgQ2hlY2tCb3hQcmVmZXJlbmNlfSBjbGFzcydzIGF0dHJpYnV0ZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dCB0aGlzIGlzIGFzc29jaWF0ZWQgd2l0aCwgdGhyb3VnaCB3aGljaCBpdCBjYW4KKyAgICAgKiAgICAgICAgICAgIGFjY2VzcyB0aGUgY3VycmVudCB0aGVtZSwgcmVzb3VyY2VzLAorICAgICAqICAgICAgICAgICAge0BsaW5rIFNoYXJlZFByZWZlcmVuY2VzfSwgZXRjLgorICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgWE1MIHRhZyB0aGF0IGlzIGluZmxhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgIHByZWZlcmVuY2UuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKiBAc2VlICNQcmVmZXJlbmNlKENvbnRleHQsIEF0dHJpYnV0ZVNldCkKKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KICAgICAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciB0aGF0IGlzIGNhbGxlZCB3aGVuIGluZmxhdGluZyBhIFByZWZlcmVuY2UgZnJvbSBYTUwuIFRoaXMgaXMKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUFjdGl2aXR5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VBY3Rpdml0eS5qYXZhCmluZGV4IDJhYjVhOTEuLjBkMTRhOWUyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VBY3Rpdml0eS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUFjdGl2aXR5LmphdmEKQEAgLTc5NCw4ICs3OTQsOCBAQAogICAgICAgICAgICAgICAgIGlmICgiaGVhZGVyIi5lcXVhbHMobm9kZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIEhlYWRlciBoZWFkZXIgPSBuZXcgSGVhZGVyKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgVHlwZWRBcnJheSBzYSA9IGdldFJlc291cmNlcygpLm9idGFpbkF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuUHJlZmVyZW5jZUhlYWRlcik7CisgICAgICAgICAgICAgICAgICAgIFR5cGVkQXJyYXkgc2EgPSBvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlSGVhZGVyKTsKICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmlkID0gc2EuZ2V0UmVzb3VyY2VJZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlSGVhZGVyX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpSEVBREVSX0lEX1VOREVGSU5FRCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VDYXRlZ29yeS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlQ2F0ZWdvcnkuamF2YQppbmRleCAyMjlhOTZhLi4yNTM0ODFiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VDYXRlZ29yeS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUNhdGVnb3J5LmphdmEKQEAgLTE2LDggKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnByZWZlcmVuY2U7CiAKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKIApAQCAtMzQsOSArMzIsMTQgQEAKICAqLwogcHVibGljIGNsYXNzIFByZWZlcmVuY2VDYXRlZ29yeSBleHRlbmRzIFByZWZlcmVuY2VHcm91cCB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJQcmVmZXJlbmNlQ2F0ZWdvcnkiOwotICAgIAotICAgIHB1YmxpYyBQcmVmZXJlbmNlQ2F0ZWdvcnkoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworCisgICAgcHVibGljIFByZWZlcmVuY2VDYXRlZ29yeSgKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworICAgIH0KKworICAgIHB1YmxpYyBQcmVmZXJlbmNlQ2F0ZWdvcnkoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKICAgICB9CiAKICAgICBwdWJsaWMgUHJlZmVyZW5jZUNhdGVnb3J5KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VGcmFtZUxheW91dC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlRnJhbWVMYXlvdXQuamF2YQppbmRleCA3NTM3MmFhLi44ODYzMzhmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VGcmFtZUxheW91dC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUZyYW1lTGF5b3V0LmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnByZWZlcmVuY2U7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5GcmFnbWVudEJyZWFkQ3J1bWJzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwpAQCAtNDUsMTAgKzQ0LDE1IEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5wcmVmZXJlbmNlRnJhbWVMYXlvdXRTdHlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIFByZWZlcmVuY2VGcmFtZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7Ci0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlRnJhbWVMYXlvdXQsIGRlZlN0eWxlLCAwKTsKKyAgICBwdWJsaWMgUHJlZmVyZW5jZUZyYW1lTGF5b3V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIFByZWZlcmVuY2VGcmFtZUxheW91dCgKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuUHJlZmVyZW5jZUZyYW1lTGF5b3V0LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBmbG9hdCBkZW5zaXR5ID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaXNwbGF5TWV0cmljcygpLmRlbnNpdHk7CiAgICAgICAgIGludCBkZWZhdWx0Qm9yZGVyVG9wID0gKGludCkgKGRlbnNpdHkgKiBERUZBVUxUX0JPUkRFUl9UT1AgKyAwLjVmKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUdyb3VwLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VHcm91cC5qYXZhCmluZGV4IDVmOGM3OGQuLjJkMzViMWIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUdyb3VwLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlR3JvdXAuamF2YQpAQCAtNTUsMTkgKzU1LDIzIEBACiAgICAgcHJpdmF0ZSBpbnQgbUN1cnJlbnRQcmVmZXJlbmNlT3JkZXIgPSAwOwogCiAgICAgcHJpdmF0ZSBib29sZWFuIG1BdHRhY2hlZFRvQWN0aXZpdHkgPSBmYWxzZTsKLSAgICAKLSAgICBwdWJsaWMgUHJlZmVyZW5jZUdyb3VwKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKworICAgIHB1YmxpYyBQcmVmZXJlbmNlR3JvdXAoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgbVByZWZlcmVuY2VMaXN0ID0gbmV3IEFycmF5TGlzdDxQcmVmZXJlbmNlPigpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlR3JvdXAsIGRlZlN0eWxlLCAwKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5QcmVmZXJlbmNlR3JvdXAsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBtT3JkZXJpbmdBc0FkZGVkID0gYS5nZXRCb29sZWFuKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlByZWZlcmVuY2VHcm91cF9vcmRlcmluZ0Zyb21YbWwsCiAgICAgICAgICAgICAgICAgbU9yZGVyaW5nQXNBZGRlZCk7CiAgICAgICAgIGEucmVjeWNsZSgpOwogICAgIH0KIAorICAgIHB1YmxpYyBQcmVmZXJlbmNlR3JvdXAoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKICAgICBwdWJsaWMgUHJlZmVyZW5jZUdyb3VwKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUluZmxhdGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1ByZWZlcmVuY2VJbmZsYXRlci5qYXZhCmluZGV4IGMyMWFhMTguLjcyN2ZiY2EgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZUluZmxhdGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlSW5mbGF0ZXIuamF2YQpAQCAtMTksMTYgKzE5LDEzIEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5YbWxVdGlsczsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKIAogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7CiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKIAotaW1wb3J0IGFuZHJvaWQuYXBwLkFsaWFzQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKgogICogVGhlIHtAbGluayBQcmVmZXJlbmNlSW5mbGF0ZXJ9IGlzIHVzZWQgdG8gaW5mbGF0ZSBwcmVmZXJlbmNlIGhpZXJhcmNoaWVzIGZyb20KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUHJlZmVyZW5jZVNjcmVlbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlU2NyZWVuLmphdmEKaW5kZXggZGI4MDY3Ni4uYjEzMTdlNiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlU2NyZWVuLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9QcmVmZXJlbmNlU2NyZWVuLmphdmEKQEAgLTI3LDcgKzI3LDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvdzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5BYnNMaXN0VmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lkxpc3RBZGFwdGVyOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9SaW5ndG9uZVByZWZlcmVuY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvUmluZ3RvbmVQcmVmZXJlbmNlLmphdmEKaW5kZXggMmViZjI5NC4uNDg4YTBjNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9SaW5ndG9uZVByZWZlcmVuY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1Jpbmd0b25lUHJlZmVyZW5jZS5qYXZhCkBAIC01MCwxMSArNTAsMTEgQEAKICAgICAKICAgICBwcml2YXRlIGludCBtUmVxdWVzdENvZGU7CiAKLSAgICBwdWJsaWMgUmluZ3RvbmVQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKLSAgICAgICAgCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5SaW5ndG9uZVByZWZlcmVuY2UsIGRlZlN0eWxlLCAwKTsKKyAgICBwdWJsaWMgUmluZ3RvbmVQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5SaW5ndG9uZVByZWZlcmVuY2UsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBtUmluZ3RvbmVUeXBlID0gYS5nZXRJbnQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuUmluZ3RvbmVQcmVmZXJlbmNlX3Jpbmd0b25lVHlwZSwKICAgICAgICAgICAgICAgICBSaW5ndG9uZU1hbmFnZXIuVFlQRV9SSU5HVE9ORSk7CiAgICAgICAgIG1TaG93RGVmYXVsdCA9IGEuZ2V0Qm9vbGVhbihjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5SaW5ndG9uZVByZWZlcmVuY2Vfc2hvd0RlZmF1bHQsCkBAIC02NCw2ICs2NCwxMCBAQAogICAgICAgICBhLnJlY3ljbGUoKTsKICAgICB9CiAKKyAgICBwdWJsaWMgUmluZ3RvbmVQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCiAgICAgcHVibGljIFJpbmd0b25lUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIucmluZ3RvbmVQcmVmZXJlbmNlU3R5bGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvU2Vla0JhckRpYWxvZ1ByZWZlcmVuY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvU2Vla0JhckRpYWxvZ1ByZWZlcmVuY2UuamF2YQppbmRleCAwZTg5YjE2Li45YTA4ODI3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1NlZWtCYXJEaWFsb2dQcmVmZXJlbmNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9TZWVrQmFyRGlhbG9nUHJlZmVyZW5jZS5qYXZhCkBAIC0zMiw4ICszMiw5IEBACiAKICAgICBwcml2YXRlIERyYXdhYmxlIG1NeUljb247CiAKLSAgICBwdWJsaWMgU2Vla0JhckRpYWxvZ1ByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOworICAgIHB1YmxpYyBTZWVrQmFyRGlhbG9nUHJlZmVyZW5jZSgKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIHNldERpYWxvZ0xheW91dFJlc291cmNlKGNvbS5hbmRyb2lkLmludGVybmFsLlIubGF5b3V0LnNlZWtiYXJfZGlhbG9nKTsKICAgICAgICAgY3JlYXRlQWN0aW9uQnV0dG9ucygpOwpAQCAtNDMsNiArNDQsMTggQEAKICAgICAgICAgc2V0RGlhbG9nSWNvbihudWxsKTsKICAgICB9CiAKKyAgICBwdWJsaWMgU2Vla0JhckRpYWxvZ1ByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2Vla0JhckRpYWxvZ1ByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmRpYWxvZ1ByZWZlcmVuY2VTdHlsZSk7CisgICAgfQorCisgICAgcHVibGljIFNlZWtCYXJEaWFsb2dQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCkgeworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOworICAgIH0KKwogICAgIC8vIEFsbG93IHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUgdGhlIGFjdGlvbiBidXR0b25zCiAgICAgcHVibGljIHZvaWQgY3JlYXRlQWN0aW9uQnV0dG9ucygpIHsKICAgICAgICAgc2V0UG9zaXRpdmVCdXR0b25UZXh0KGFuZHJvaWQuUi5zdHJpbmcub2spOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9TZWVrQmFyUHJlZmVyZW5jZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9TZWVrQmFyUHJlZmVyZW5jZS5qYXZhCmluZGV4IDcxMzNkM2EuLmUzMjg5MGQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvU2Vla0JhclByZWZlcmVuY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1NlZWtCYXJQcmVmZXJlbmNlLmphdmEKQEAgLTM3LDE1ICszNywyMCBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBtVHJhY2tpbmdUb3VjaDsKIAogICAgIHB1YmxpYyBTZWVrQmFyUHJlZmVyZW5jZSgKLSAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlByb2dyZXNzQmFyLCBkZWZTdHlsZSwgMCk7CisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlByb2dyZXNzQmFyLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgc2V0TWF4KGEuZ2V0SW50KGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlByb2dyZXNzQmFyX21heCwgbU1heCkpOwogICAgICAgICBhLnJlY3ljbGUoKTsKICAgICAgICAgc2V0TGF5b3V0UmVzb3VyY2UoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5sYXlvdXQucHJlZmVyZW5jZV93aWRnZXRfc2Vla2Jhcik7CiAgICAgfQogCisgICAgcHVibGljIFNlZWtCYXJQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCiAgICAgcHVibGljIFNlZWtCYXJQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvU3dpdGNoUHJlZmVyZW5jZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9Td2l0Y2hQcmVmZXJlbmNlLmphdmEKaW5kZXggOGJhYzZiZC4uNzZlZjU0NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9Td2l0Y2hQcmVmZXJlbmNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9Td2l0Y2hQcmVmZXJlbmNlLmphdmEKQEAgLTYwLDEzICs2MCwxOSBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHQgdGhhdCB3aWxsIHN0eWxlIHRoaXMgcHJlZmVyZW5jZQogICAgICAqIEBwYXJhbSBhdHRycyBTdHlsZSBhdHRyaWJ1dGVzIHRoYXQgZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQKLSAgICAgKiBAcGFyYW0gZGVmU3R5bGUgVGhlbWUgYXR0cmlidXRlIGRlZmluaW5nIHRoZSBkZWZhdWx0IHN0eWxlIG9wdGlvbnMKKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVBdHRyIEFuIGF0dHJpYnV0ZSBpbiB0aGUgY3VycmVudCB0aGVtZSB0aGF0IGNvbnRhaW5zIGEKKyAgICAgKiAgICAgICAgcmVmZXJlbmNlIHRvIGEgc3R5bGUgcmVzb3VyY2UgdGhhdCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgKiAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVSZXMgQSByZXNvdXJjZSBpZGVudGlmaWVyIG9mIGEgc3R5bGUgcmVzb3VyY2UgdGhhdAorICAgICAqICAgICAgICBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHZpZXcsIHVzZWQgb25seSBpZgorICAgICAqICAgICAgICBkZWZTdHlsZUF0dHIgaXMgMCBvciBjYW4gbm90IGJlIGZvdW5kIGluIHRoZSB0aGVtZS4gQ2FuIGJlIDAKKyAgICAgKiAgICAgICAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgogICAgICAqLwotICAgIHB1YmxpYyBTd2l0Y2hQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgU3dpdGNoUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3dpdGNoUHJlZmVyZW5jZSwgZGVmU3R5bGUsIDApOworICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlN3aXRjaFByZWZlcmVuY2UsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBzZXRTdW1tYXJ5T24oYS5nZXRTdHJpbmcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3dpdGNoUHJlZmVyZW5jZV9zdW1tYXJ5T24pKTsKICAgICAgICAgc2V0U3VtbWFyeU9mZihhLmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Td2l0Y2hQcmVmZXJlbmNlX3N1bW1hcnlPZmYpKTsKICAgICAgICAgc2V0U3dpdGNoVGV4dE9uKGEuZ2V0U3RyaW5nKApAQCAtODMsNiArODksMTkgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0IHRoYXQgd2lsbCBzdHlsZSB0aGlzIHByZWZlcmVuY2UKICAgICAgKiBAcGFyYW0gYXR0cnMgU3R5bGUgYXR0cmlidXRlcyB0aGF0IGRpZmZlciBmcm9tIHRoZSBkZWZhdWx0CisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCisgICAgICovCisgICAgcHVibGljIFN3aXRjaFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgU3dpdGNoUHJlZmVyZW5jZSB3aXRoIHRoZSBnaXZlbiBzdHlsZSBvcHRpb25zLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHQgdGhhdCB3aWxsIHN0eWxlIHRoaXMgcHJlZmVyZW5jZQorICAgICAqIEBwYXJhbSBhdHRycyBTdHlsZSBhdHRyaWJ1dGVzIHRoYXQgZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQKICAgICAgKi8KICAgICBwdWJsaWMgU3dpdGNoUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuc3dpdGNoUHJlZmVyZW5jZVN0eWxlKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvVHdvU3RhdGVQcmVmZXJlbmNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmVmZXJlbmNlL1R3b1N0YXRlUHJlZmVyZW5jZS5qYXZhCmluZGV4IGFmODM5NTMuLjZmOGJlMWYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvVHdvU3RhdGVQcmVmZXJlbmNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9Ud29TdGF0ZVByZWZlcmVuY2UuamF2YQpAQCAtNDIsOSArNDIsMTMgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gbVNlbmRDbGlja0FjY2Vzc2liaWxpdHlFdmVudDsKICAgICBwcml2YXRlIGJvb2xlYW4gbURpc2FibGVEZXBlbmRlbnRzU3RhdGU7CiAKKyAgICBwdWJsaWMgVHdvU3RhdGVQcmVmZXJlbmNlKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisgICAgfQogCi0gICAgcHVibGljIFR3b1N0YXRlUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFR3b1N0YXRlUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOwogICAgIH0KIAogICAgIHB1YmxpYyBUd29TdGF0ZVByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByZWZlcmVuY2UvVm9sdW1lUHJlZmVyZW5jZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9Wb2x1bWVQcmVmZXJlbmNlLmphdmEKaW5kZXggZGM2ODNhNi4uMjlmMjU0NSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9Wb2x1bWVQcmVmZXJlbmNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJlZmVyZW5jZS9Wb2x1bWVQcmVmZXJlbmNlLmphdmEKQEAgLTUxLDE1ICs1MSwyNCBAQAogICAgIC8qKiBNYXkgYmUgbnVsbCBpZiB0aGUgZGlhbG9nIGlzbid0IHZpc2libGUuICovCiAgICAgcHJpdmF0ZSBTZWVrQmFyVm9sdW1pemVyIG1TZWVrQmFyVm9sdW1pemVyOwogCi0gICAgcHVibGljIFZvbHVtZVByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOworICAgIHB1YmxpYyBWb2x1bWVQcmVmZXJlbmNlKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlZvbHVtZVByZWZlcmVuY2UsIDAsIDApOworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVm9sdW1lUHJlZmVyZW5jZSwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1TdHJlYW1UeXBlID0gYS5nZXRJbnQoYW5kcm9pZC5SLnN0eWxlYWJsZS5Wb2x1bWVQcmVmZXJlbmNlX3N0cmVhbVR5cGUsIDApOwogICAgICAgICBhLnJlY3ljbGUoKTsKICAgICB9CiAKKyAgICBwdWJsaWMgVm9sdW1lUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBWb2x1bWVQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHNldFN0cmVhbVR5cGUoaW50IHN0cmVhbVR5cGUpIHsKICAgICAgICAgbVN0cmVhbVR5cGUgPSBzdHJlYW1UeXBlOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9Db250YWN0cy5qYXZhCmluZGV4IGM3ZTNjMDguLjllMmFhY2QgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHMuamF2YQpAQCAtMjYsNyArMjYsNiBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvQ29udGFjdHNDb250cmFjdC5qYXZhCmluZGV4IGIxNmRmMjguLmYyOTE2MWYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL0NvbnRhY3RzQ29udHJhY3QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9Db250YWN0c0NvbnRyYWN0LmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKIAogaW1wb3J0IGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudDsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQWN0aXZpdHlOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyQ2xpZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UHJvdmlkZXJPcGVyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKQEAgLTQwLDE0ICs0MSwxMiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuUGFpcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKIAogaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CiAKIC8qKgogICogPHA+CkBAIC03OTgxLDcgKzc5ODAsNyBAQAogICAgICAgICAgICAgLy8gVHJpZ2dlciB3aXRoIG9idGFpbmVkIHJlY3RhbmdsZQogICAgICAgICAgICAgSW50ZW50IGludGVudCA9IGNvbXBvc2VRdWlja0NvbnRhY3RzSW50ZW50KGNvbnRleHQsIHRhcmdldCwgbG9va3VwVXJpLCBtb2RlLAogICAgICAgICAgICAgICAgICAgICBleGNsdWRlTWltZXMpOwotICAgICAgICAgICAgY29udGV4dC5zdGFydEFjdGl2aXR5KGludGVudCk7CisgICAgICAgICAgICBzdGFydEFjdGl2aXR5V2l0aEVycm9yVG9hc3QoY29udGV4dCwgaW50ZW50KTsKICAgICAgICAgfQogCiAgICAgICAgIC8qKgpAQCAtODAxNCw3ICs4MDEzLDE2IEBACiAgICAgICAgICAgICAgICAgU3RyaW5nW10gZXhjbHVkZU1pbWVzKSB7CiAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gY29tcG9zZVF1aWNrQ29udGFjdHNJbnRlbnQoY29udGV4dCwgdGFyZ2V0LCBsb29rdXBVcmksIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVNaW1lcyk7Ci0gICAgICAgICAgICBjb250ZXh0LnN0YXJ0QWN0aXZpdHkoaW50ZW50KTsKKyAgICAgICAgICAgIHN0YXJ0QWN0aXZpdHlXaXRoRXJyb3JUb2FzdChjb250ZXh0LCBpbnRlbnQpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzdGFydEFjdGl2aXR5V2l0aEVycm9yVG9hc3QoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICBjb250ZXh0LnN0YXJ0QWN0aXZpdHkoaW50ZW50KTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEFjdGl2aXR5Tm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KGNvbnRleHQsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLnF1aWNrX2NvbnRhY3RzX25vdF9hdmFpbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0LkxFTkdUSF9TSE9SVCkuc2hvdygpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuamF2YQppbmRleCAwNGYzZjBhLi5lYzM4MTlhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLmphdmEKQEAgLTM3NDEsNiArMzc0MSwxNiBAQAogICAgICAgICAgICAgICAgICJhY2Nlc3NpYmlsaXR5X2NhcHRpb25pbmdfZWRnZV9jb2xvciI7CiAKICAgICAgICAgLyoqCisgICAgICAgICAqIEludGVnZXIgcHJvcGVydHkgdGhhdCBzcGVjaWZlcyB0aGUgd2luZG93IGNvbG9yIGZvciBjYXB0aW9ucyBhcyBhCisgICAgICAgICAqIHBhY2tlZCAzMi1iaXQgY29sb3IuCisgICAgICAgICAqCisgICAgICAgICAqIEBzZWUgYW5kcm9pZC5ncmFwaGljcy5Db2xvciNhcmdiCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ0NFU1NJQklMSVRZX0NBUFRJT05JTkdfV0lORE9XX0NPTE9SID0KKyAgICAgICAgICAgICAgICAiYWNjZXNzaWJpbGl0eV9jYXB0aW9uaW5nX3dpbmRvd19jb2xvciI7CisKKyAgICAgICAgLyoqCiAgICAgICAgICAqIFN0cmluZyBwcm9wZXJ0eSB0aGF0IHNwZWNpZmllcyB0aGUgdHlwZWZhY2UgZm9yIGNhcHRpb25zLCBvbmUgb2Y6CiAgICAgICAgICAqIDx1bD4KICAgICAgICAgICogPGxpPkRFRkFVTFQKQEAgLTM3NjQsNiArMzc3NCw5NyBAQAogICAgICAgICAgICAgICAgICJhY2Nlc3NpYmlsaXR5X2NhcHRpb25pbmdfZm9udF9zY2FsZSI7CiAKICAgICAgICAgLyoqCisgICAgICAgICAqIFNldHRpbmcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgcXVpY2sgc2V0dGluZyB0aWxlIGZvciBkaXNwbGF5CisgICAgICAgICAqIGNvbG9yIGludmVyc2lvbiBpcyBlbmFibGVkLgorICAgICAgICAgKgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9RVUlDS19TRVRUSU5HX0VOQUJMRUQgPQorICAgICAgICAgICAgICAgICJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfaW52ZXJzaW9uX3F1aWNrX3NldHRpbmdfZW5hYmxlZCI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHRpbmcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciBkaXNwbGF5IGNvbG9yIGludmVyc2lvbiBpcyBlbmFibGVkLgorICAgICAgICAgKgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9FTkFCTEVEID0KKyAgICAgICAgICAgICAgICAiYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2ludmVyc2lvbl9lbmFibGVkIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogSW50ZWdlciBwcm9wZXJ0eSB0aGF0IHNwZWNpZmllcyB0aGUgdHlwZSBvZiBjb2xvciBpbnZlcnNpb24gdG8KKyAgICAgICAgICogcGVyZm9ybS4gVmFsaWQgdmFsdWVzIGFyZSBkZWZpbmVkIGluIEFjY2Vzc2liaWxpdHlNYW5hZ2VyLgorICAgICAgICAgKgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTiA9CisgICAgICAgICAgICAgICAgImFjY2Vzc2liaWxpdHlfZGlzcGxheV9pbnZlcnNpb24iOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXR0aW5nIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHF1aWNrIHNldHRpbmcgdGlsZSBmb3IgZGlzcGxheQorICAgICAgICAgKiBjb2xvciBzcGFjZSBhZGp1c3RtZW50IGlzIGVuYWJsZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUl9RVUlDS19TRVRUSU5HX0VOQUJMRUQgPQorICAgICAgICAgICAgICAgICJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9xdWlja19zZXR0aW5nX2VuYWJsZWQiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXR0aW5nIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgZGlzcGxheSBjb2xvciBzcGFjZSBhZGp1c3RtZW50IGlzCisgICAgICAgICAqIGVuYWJsZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUl9FTkFCTEVEID0KKyAgICAgICAgICAgICAgICAiYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfZW5hYmxlZCI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludGVnZXIgcHJvcGVydHkgdGhhdCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgY29sb3Igc3BhY2UgYWRqdXN0bWVudCB0bworICAgICAgICAgKiBwZXJmb3JtLiBWYWxpZCB2YWx1ZXMgYXJlIGRlZmluZWQgaW4gQWNjZXNzaWJpbGl0eU1hbmFnZXIuCisgICAgICAgICAqCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUiA9CisgICAgICAgICAgICAgICAgImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0dGluZyB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSBxdWljayBzZXR0aW5nIHRpbGUgZm9yIGRpc3BsYXkKKyAgICAgICAgICogY29udHJhc3QgZW5oYW5jZW1lbnQgaXMgZW5hYmxlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQGhpZGUKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDQ0VTU0lCSUxJVFlfRElTUExBWV9DT05UUkFTVF9RVUlDS19TRVRUSU5HX0VOQUJMRUQgPQorICAgICAgICAgICAgICAgICJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfY29udHJhc3RfcXVpY2tfc2V0dGluZ19lbmFibGVkIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0dGluZyB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIGRpc3BsYXkgY29udHJhc3QgZW5oYW5jZW1lbnQgaXMKKyAgICAgICAgICogZW5hYmxlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQGhpZGUKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDQ0VTU0lCSUxJVFlfRElTUExBWV9DT05UUkFTVF9FTkFCTEVEID0KKyAgICAgICAgICAgICAgICAiYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2NvbnRyYXN0X2VuYWJsZWQiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBGbG9hdGluZyBwb2ludCBwcm9wZXJ0eSB0aGF0IHNwZWNpZmllcyBkaXNwbGF5IGNvbnRyYXN0IGFkanVzdG1lbnQuCisgICAgICAgICAqIFZhbGlkIHJhbmdlIGlzIFswLCAuLi5dIHdoZXJlIDAgaXMgZ3JheSwgMSBpcyBub3JtYWwsIGFuZCBoaWdoZXIKKyAgICAgICAgICogdmFsdWVzIGluZGljYXRlIGVuaGFuY2VkIGNvbnRyYXN0LgorICAgICAgICAgKgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTlRSQVNUID0KKyAgICAgICAgICAgICAgICAiYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2NvbnRyYXN0IjsKKworICAgICAgICAvKioKKyAgICAgICAgICogRmxvYXRpbmcgcG9pbnQgcHJvcGVydHkgdGhhdCBzcGVjaWZpZXMgZGlzcGxheSBicmlnaHRuZXNzIGFkanVzdG1lbnQuCisgICAgICAgICAqIFZhbGlkIHJhbmdlIGlzIFstMSwgMV0gd2hlcmUgLTEgaXMgYmxhY2ssIDAgaXMgZGVmYXVsdCwgYW5kIDEgaXMKKyAgICAgICAgICogd2hpdGUuCisgICAgICAgICAqCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ0NFU1NJQklMSVRZX0RJU1BMQVlfQlJJR0hUTkVTUyA9CisgICAgICAgICAgICAgICAgImFjY2Vzc2liaWxpdHlfZGlzcGxheV9icmlnaHRuZXNzIjsKKworICAgICAgICAvKioKICAgICAgICAgICogVGhlIHRpbW91dCBmb3IgY29uc2lkZXJpbmcgYSBwcmVzcyB0byBiZSBhIGxvbmcgcHJlc3MgaW4gbWlsbGlzZWNvbmRzLgogICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VyU2VydmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS90ZXh0c2VydmljZS9TcGVsbENoZWNrZXJTZXJ2aWNlLmphdmEKaW5kZXggNzdiMjJlZC4uYWNmZWY4MiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS90ZXh0c2VydmljZS9TcGVsbENoZWNrZXJTZXJ2aWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS90ZXh0c2VydmljZS9TcGVsbENoZWNrZXJTZXJ2aWNlLmphdmEKQEAgLTMyLDcgKzMyLDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcudGV4dHNlcnZpY2UuU2VudGVuY2VTdWdnZXN0aW9uc0luZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3LnRleHRzZXJ2aWNlLlN1Z2dlc3Rpb25zSW5mbzsKIGltcG9ydCBhbmRyb2lkLnZpZXcudGV4dHNlcnZpY2UuVGV4dEluZm87Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuU3BlbGxDaGVja2VyOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwogaW1wb3J0IGphdmEudGV4dC5CcmVha0l0ZXJhdG9yOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS93YWxscGFwZXIvV2FsbHBhcGVyU2VydmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS93YWxscGFwZXIvV2FsbHBhcGVyU2VydmljZS5qYXZhCmluZGV4IDVkYjgxNjguLjAzY2U0ZTAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvd2FsbHBhcGVyL1dhbGxwYXBlclNlcnZpY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL3dhbGxwYXBlci9XYWxscGFwZXJTZXJ2aWNlLmphdmEKQEAgLTM4LDcgKzM4LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2dQcmludGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwogaW1wb3J0IGFuZHJvaWQudmlldy5JV2luZG93U2Vzc2lvbjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC9zcmVjL1JlY29nbml6ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC9zcmVjL1JlY29nbml6ZXIuamF2YQppbmRleCBkYjVkOGZkLi40YmRhZjViIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvc3JlYy9SZWNvZ25pemVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3NyZWMvUmVjb2duaXplci5qYXZhCkBAIC0yMiw4ICsyMiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5zcGVlY2guc3JlYzsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9BYnN0cmFjdEV2ZW50TG9nZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0Fic3RyYWN0RXZlbnRMb2dnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y4NjU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9BYnN0cmFjdEV2ZW50TG9nZ2VyLmphdmEKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgYW5kcm9pZC5zcGVlY2gudHRzOworCitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKKworLyoqCisgKiBCYXNlIGNsYXNzIGZvciBzdG9yaW5nIGRhdGEgYWJvdXQgYSBnaXZlbiBzcGVlY2ggc3ludGhlc2lzIHJlcXVlc3QgdG8gdGhlCisgKiBldmVudCBsb2dzLiBUaGUgZGF0YSB0aGF0IGlzIGxvZ2dlZCBkZXBlbmRzIG9uIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4gTm90ZQorICogdGhhdCB7QGxpbmsgQWJzdHJhY3RFdmVudExvZ2dlciNvbkF1ZGlvRGF0YVdyaXR0ZW4oKX0gYW5kCisgKiB7QGxpbmsgQWJzdHJhY3RFdmVudExvZ2dlciNvbkVuZ2luZUNvbXBsZXRlKCl9IG11c3QgYmUgY2FsbGVkIGZyb20gYSBzaW5nbGUKKyAqIHRocmVhZCAodXN1YWxseSB0aGUgYXVkaW8gcGxheWJhY2sgdGhyZWFkfS4KKyAqLworYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFdmVudExvZ2dlciB7CisgICAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBtU2VydmljZUFwcDsKKyAgICBwcm90ZWN0ZWQgZmluYWwgaW50IG1DYWxsZXJVaWQ7CisgICAgcHJvdGVjdGVkIGZpbmFsIGludCBtQ2FsbGVyUGlkOworICAgIHByb3RlY3RlZCBmaW5hbCBsb25nIG1SZWNlaXZlZFRpbWU7CisgICAgcHJvdGVjdGVkIGxvbmcgbVBsYXliYWNrU3RhcnRUaW1lID0gLTE7CisKKyAgICBwcml2YXRlIHZvbGF0aWxlIGxvbmcgbVJlcXVlc3RQcm9jZXNzaW5nU3RhcnRUaW1lID0gLTE7CisgICAgcHJpdmF0ZSB2b2xhdGlsZSBsb25nIG1FbmdpbmVTdGFydFRpbWUgPSAtMTsKKyAgICBwcml2YXRlIHZvbGF0aWxlIGxvbmcgbUVuZ2luZUNvbXBsZXRlVGltZSA9IC0xOworCisgICAgcHJpdmF0ZSBib29sZWFuIG1Mb2dXcml0dGVuID0gZmFsc2U7CisKKyAgICBBYnN0cmFjdEV2ZW50TG9nZ2VyKGludCBjYWxsZXJVaWQsIGludCBjYWxsZXJQaWQsIFN0cmluZyBzZXJ2aWNlQXBwKSB7CisgICAgICAgIG1DYWxsZXJVaWQgPSBjYWxsZXJVaWQ7CisgICAgICAgIG1DYWxsZXJQaWQgPSBjYWxsZXJQaWQ7CisgICAgICAgIG1TZXJ2aWNlQXBwID0gc2VydmljZUFwcDsKKyAgICAgICAgbVJlY2VpdmVkVGltZSA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE5vdGlmaWVzIHRoZSBsb2dnZXIgdGhhdCB0aGlzIHJlcXVlc3QgaGFzIGJlZW4gc2VsZWN0ZWQgZnJvbQorICAgICAqIHRoZSBwcm9jZXNzaW5nIHF1ZXVlIGZvciBwcm9jZXNzaW5nLiBFbmdpbmUgbGF0ZW5jeSAvIHRvdGFsIHRpbWUKKyAgICAgKiBpcyBtZWFzdXJlZCBmcm9tIHRoaXMgYmFzZWxpbmUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgb25SZXF1ZXN0UHJvY2Vzc2luZ1N0YXJ0KCkgeworICAgICAgICBtUmVxdWVzdFByb2Nlc3NpbmdTdGFydFRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOb3RpZmllcyB0aGUgbG9nZ2VyIHRoYXQgYSBjaHVuayBvZiBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20KKyAgICAgKiB0aGUgZW5naW5lLiBNaWdodCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgb25FbmdpbmVEYXRhUmVjZWl2ZWQoKSB7CisgICAgICAgIGlmIChtRW5naW5lU3RhcnRUaW1lID09IC0xKSB7CisgICAgICAgICAgICBtRW5naW5lU3RhcnRUaW1lID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOb3RpZmllcyB0aGUgbG9nZ2VyIHRoYXQgdGhlIGVuZ2luZSBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyBkYXRhLgorICAgICAqIFdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvbkVuZ2luZUNvbXBsZXRlKCkgeworICAgICAgICBtRW5naW5lQ29tcGxldGVUaW1lID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTm90aWZpZXMgdGhlIGxvZ2dlciB0aGF0IGF1ZGlvIHBsYXliYWNrIGhhcyBzdGFydGVkIGZvciBzb21lIHNlY3Rpb24KKyAgICAgKiBvZiB0aGUgc3ludGhlc2lzLiBUaGlzIGlzIG5vcm1hbGx5IHNvbWUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIGVuZ2luZQorICAgICAqIGhhcyBzeW50aGVzaXplZCBkYXRhIGFuZCB2YXJpZXMgZGVwZW5kaW5nIG9uIHV0dGVyYW5jZXMgYW5kCisgICAgICogb3RoZXIgYXVkaW8gY3VycmVudGx5IGluIHRoZSBxdWV1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvbkF1ZGlvRGF0YVdyaXR0ZW4oKSB7CisgICAgICAgIC8vIEZvciBub3csIGtlZXAgdHJhY2sgb2Ygb25seSB0aGUgZmlyc3QgY2h1bmsgb2YgYXVkaW8KKyAgICAgICAgLy8gdGhhdCB3YXMgcGxheWVkLgorICAgICAgICBpZiAobVBsYXliYWNrU3RhcnRUaW1lID09IC0xKSB7CisgICAgICAgICAgICBtUGxheWJhY2tTdGFydFRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE5vdGlmaWVzIHRoZSBsb2dnZXIgdGhhdCB0aGUgY3VycmVudCBzeW50aGVzaXMgaGFzIGNvbXBsZXRlZC4KKyAgICAgKiBBbGwgYXZhaWxhYmxlIGRhdGEgaXMgbm90IGxvZ2dlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvbkNvbXBsZXRlZChpbnQgc3RhdHVzQ29kZSkgeworICAgICAgICBpZiAobUxvZ1dyaXR0ZW4pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1Mb2dXcml0dGVuID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxvbmcgY29tcGxldGlvblRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKKworICAgICAgICAvLyBXZSBkb24ndCByZXBvcnQgbGF0ZW5jeSBmb3Igc3RvcHBlZCBzeW50aGVzZXMgYmVjYXVzZSB0aGVpciBvdmVyYWxsCisgICAgICAgIC8vIHRvdGFsIHRpbWUgc3BlbnQgd2lsbCBiZSBpbmFjY3VyYXRlICh3aWxsIG5vdCBjb3JyZWxhdGUgd2l0aAorICAgICAgICAvLyB0aGUgbGVuZ3RoIG9mIHRoZSB1dHRlcmFuY2UpLgorCisgICAgICAgIC8vIG9uQXVkaW9EYXRhV3JpdHRlbigpIHNob3VsZCBub3JtYWxseSBhbHdheXMgYmUgY2FsbGVkLCBhbmQgaGVuY2UgbVBsYXliYWNrU3RhcnRUaW1lCisgICAgICAgIC8vIHNob3VsZCBiZSBzZXQsIGlmIGFuIGVycm9yIGRvZXMgbm90IG9jY3VyLgorICAgICAgICBpZiAoc3RhdHVzQ29kZSAhPSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNVQ0NFU1MKKyAgICAgICAgICAgICAgICB8fCBtUGxheWJhY2tTdGFydFRpbWUgPT0gLTEgfHwgbUVuZ2luZUNvbXBsZXRlVGltZSA9PSAtMSkgeworICAgICAgICAgICAgbG9nRmFpbHVyZShzdGF0dXNDb2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIGxvbmcgYXVkaW9MYXRlbmN5ID0gbVBsYXliYWNrU3RhcnRUaW1lIC0gbVJlY2VpdmVkVGltZTsKKyAgICAgICAgZmluYWwgbG9uZyBlbmdpbmVMYXRlbmN5ID0gbUVuZ2luZVN0YXJ0VGltZSAtIG1SZXF1ZXN0UHJvY2Vzc2luZ1N0YXJ0VGltZTsKKyAgICAgICAgZmluYWwgbG9uZyBlbmdpbmVUb3RhbCA9IG1FbmdpbmVDb21wbGV0ZVRpbWUgLSBtUmVxdWVzdFByb2Nlc3NpbmdTdGFydFRpbWU7CisgICAgICAgIGxvZ1N1Y2Nlc3MoYXVkaW9MYXRlbmN5LCBlbmdpbmVMYXRlbmN5LCBlbmdpbmVUb3RhbCk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgbG9nRmFpbHVyZShpbnQgc3RhdHVzQ29kZSk7CisgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgbG9nU3VjY2Vzcyhsb25nIGF1ZGlvTGF0ZW5jeSwgbG9uZyBlbmdpbmVMYXRlbmN5LAorICAgICAgICAgICAgbG9uZyBlbmdpbmVUb3RhbCk7CisKKworfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9BYnN0cmFjdFN5bnRoZXNpc0NhbGxiYWNrLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0Fic3RyYWN0U3ludGhlc2lzQ2FsbGJhY2suamF2YQppbmRleCBjN2E0YWYwLi45MWUxMTliIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0Fic3RyYWN0U3ludGhlc2lzQ2FsbGJhY2suamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0Fic3RyYWN0U3ludGhlc2lzQ2FsbGJhY2suamF2YQpAQCAtMTUsMTUgKzE1LDI4IEBACiAgKi8KIHBhY2thZ2UgYW5kcm9pZC5zcGVlY2gudHRzOwogCisKIC8qKgogICogRGVmaW5lcyBhZGRpdGlvbmFsIG1ldGhvZHMgdGhlIHN5bnRoZXNpcyBjYWxsYmFjayBtdXN0IGltcGxlbWVudCB0aGF0CiAgKiBhcmUgcHJpdmF0ZSB0byB0aGUgVFRTIHNlcnZpY2UgaW1wbGVtZW50YXRpb24uCisgKgorICogQWxsIG9mIHRoZXNlIGNsYXNzIG1ldGhvZHMgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB7QGxpbmsgI3N0b3AoKX0pIGNhbiBiZSBvbmx5IGNhbGxlZCBvbiB0aGUKKyAqIHN5bnRoZXNpcyB0aHJlYWQsIHdoaWxlIGluc2lkZQorICoge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dH0gb3Ige0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dFYyfS4KKyAqIHtAbGluayAjc3RvcCgpfSBpcyB0aGUgZXhjZXB0aW9uLCBpdCBtYXkgYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KICAqLwogYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBpbXBsZW1lbnRzIFN5bnRoZXNpc0NhbGxiYWNrIHsKKyAgICAvKiogSWYgdHJ1ZSwgcmVxdWVzdCBjb21lcyBmcm9tIFYyIFRUUyBpbnRlcmZhY2UgKi8KKyAgICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBtQ2xpZW50SXNVc2luZ1YyOworCiAgICAgLyoqCi0gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHN5bnRoZXNpcyByZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCisgICAgICogQ29uc3RydWN0b3IuCisgICAgICogQHBhcmFtIGNsaWVudElzVXNpbmdWMiBJZiB0cnVlLCB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgdXNlZCBpbnNpZGUKKyAgICAgKiAgICAgICAgIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHRWMn0gbWV0aG9kLgogICAgICAqLwotICAgIGFic3RyYWN0IGJvb2xlYW4gaXNEb25lKCk7CisgICAgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayhib29sZWFuIGNsaWVudElzVXNpbmdWMikgeworICAgICAgICBtQ2xpZW50SXNVc2luZ1YyID0gY2xpZW50SXNVc2luZ1YyOworICAgIH0KIAogICAgIC8qKgogICAgICAqIEFib3J0cyB0aGUgc3BlZWNoIHJlcXVlc3QuCkBAIC0zMSw0ICs0NCwxNiBAQAogICAgICAqIENhbiBiZSBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgogICAgICAqLwogICAgIGFic3RyYWN0IHZvaWQgc3RvcCgpOworCisgICAgLyoqCisgICAgICogR2V0IHN0YXR1cyBjb2RlIGZvciBhICJzdG9wIi4KKyAgICAgKgorICAgICAqIFYyIENsaWVudHMgd2lsbCByZWNlaXZlIHNwZWNpYWwgc3RhdHVzLCBWMSBjbGllbnRzIHdpbGwgcmVjZWl2ZSBzdGFuZGFyZCBlcnJvci4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgc3ludGhlc2lzIHRocmVhZCwKKyAgICAgKiB3aGlsZSBpbiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0fS4KKyAgICAgKi8KKyAgICBpbnQgZXJyb3JDb2RlT25TdG9wKCkgeworICAgICAgICByZXR1cm4gbUNsaWVudElzVXNpbmdWMiA/IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCA6IFRleHRUb1NwZWVjaC5FUlJPUjsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0F1ZGlvUGxheWJhY2tIYW5kbGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0F1ZGlvUGxheWJhY2tIYW5kbGVyLmphdmEKaW5kZXggZDYzZjYwNS4uZGNmNDliMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9BdWRpb1BsYXliYWNrSGFuZGxlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvQXVkaW9QbGF5YmFja0hhbmRsZXIuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaXRlbS5zdG9wKGZhbHNlKTsKKyAgICAgICAgaXRlbS5zdG9wKFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZW5xdWV1ZShQbGF5YmFja1F1ZXVlSXRlbSBpdGVtKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0F1ZGlvUGxheWJhY2tRdWV1ZUl0ZW0uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvQXVkaW9QbGF5YmFja1F1ZXVlSXRlbS5qYXZhCmluZGV4IDFhMWZkYTgxLi5jNTE0NjM5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0F1ZGlvUGxheWJhY2tRdWV1ZUl0ZW0uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0F1ZGlvUGxheWJhY2tRdWV1ZUl0ZW0uamF2YQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25TdGFydCgpOwogICAgICAgICBtUGxheWVyID0gTWVkaWFQbGF5ZXIuY3JlYXRlKG1Db250ZXh0LCBtVXJpKTsKICAgICAgICAgaWYgKG1QbGF5ZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaE9uRXJyb3IoKTsKKyAgICAgICAgICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2hPbkVycm9yKFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfT1VUUFVUKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC04Myw5ICs4Myw5IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAobUZpbmlzaGVkKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25Eb25lKCk7CisgICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25TdWNjZXNzKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25FcnJvcigpOworICAgICAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaE9uU3RvcCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC05OSw3ICs5OSw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgdm9pZCBzdG9wKGJvb2xlYW4gaXNFcnJvcikgeworICAgIHZvaWQgc3RvcChpbnQgZXJyb3JDb2RlKSB7CiAgICAgICAgIG1Eb25lLm9wZW4oKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nVGFncy5sb2d0YWdzIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9FdmVudExvZ1RhZ3MubG9ndGFncwppbmRleCBmODY1NGFkLi5lMjA5YTI4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nVGFncy5sb2d0YWdzCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvRXZlbnRMb2dUYWdzLmxvZ3RhZ3MKQEAgLTQsMyArNCw2IEBACiAKIDc2MDAxIHR0c19zcGVha19zdWNjZXNzIChlbmdpbmV8MyksKGNhbGxlcl91aWR8MSksKGNhbGxlcl9waWR8MSksKGxlbmd0aHwxKSwobG9jYWxlfDMpLChyYXRlfDEpLChwaXRjaHwxKSwoZW5naW5lX2xhdGVuY3l8MnwzKSwoZW5naW5lX3RvdGFsfDJ8MyksKGF1ZGlvX2xhdGVuY3l8MnwzKQogNzYwMDIgdHRzX3NwZWFrX2ZhaWx1cmUgKGVuZ2luZXwzKSwoY2FsbGVyX3VpZHwxKSwoY2FsbGVyX3BpZHwxKSwobGVuZ3RofDEpLChsb2NhbGV8MyksKHJhdGV8MSksKHBpdGNofDEpCisKKzc2MDAzIHR0c192Ml9zcGVha19zdWNjZXNzIChlbmdpbmV8MyksKGNhbGxlcl91aWR8MSksKGNhbGxlcl9waWR8MSksKGxlbmd0aHwxKSwocmVxdWVzdF9jb25maWd8MyksKGVuZ2luZV9sYXRlbmN5fDJ8MyksKGVuZ2luZV90b3RhbHwyfDMpLChhdWRpb19sYXRlbmN5fDJ8MykKKzc2MDA0IHR0c192Ml9zcGVha19mYWlsdXJlIChlbmdpbmV8MyksKGNhbGxlcl91aWR8MSksKGNhbGxlcl9waWR8MSksKGxlbmd0aHwxKSwocmVxdWVzdF9jb25maWd8MyksIChzdGF0dXNDb2RlfDEpCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZWQ0ZGQuLjAwMDAwMDAKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9FdmVudExvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAotICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKLSAqIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCi0gKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgotICogdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2UgYW5kcm9pZC5zcGVlY2gudHRzOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLS8qKgotICogV3JpdGVzIGRhdGEgYWJvdXQgYSBnaXZlbiBzcGVlY2ggc3ludGhlc2lzIHJlcXVlc3QgdG8gdGhlIGV2ZW50IGxvZ3MuCi0gKiBUaGUgZGF0YSB0aGF0IGlzIGxvZ2dlZCBpbmNsdWRlcyB0aGUgY2FsbGluZyBhcHAsIGxlbmd0aCBvZiB0aGUgdXR0ZXJhbmNlLAotICogc3BlZWNoIHJhdGUgLyBwaXRjaCBhbmQgdGhlIGxhdGVuY3kgYW5kIG92ZXJhbGwgdGltZSB0YWtlbi4KLSAqCi0gKiBOb3RlIHRoYXQge0BsaW5rIEV2ZW50TG9nZ2VyI29uU3RvcHBlZCgpfSBhbmQge0BsaW5rIEV2ZW50TG9nZ2VyI29uRXJyb3IoKX0KLSAqIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQsIGJ1dCBvbiB7QGxpbmsgRXZlbnRMb2dnZXIjb25BdWRpb0RhdGFXcml0dGVuKCl9IGFuZAotICoge0BsaW5rIEV2ZW50TG9nZ2VyI29uQ29tcGxldGUoKX0gbXVzdCBiZSBjYWxsZWQgZnJvbSBhIHNpbmdsZSB0aHJlYWQKLSAqICh1c3VhbGx5IHRoZSBhdWRpbyBwbGF5YmFjayB0aHJlYWR9Ci0gKi8KLWNsYXNzIEV2ZW50TG9nZ2VyIHsKLSAgICBwcml2YXRlIGZpbmFsIFN5bnRoZXNpc1JlcXVlc3QgbVJlcXVlc3Q7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVNlcnZpY2VBcHA7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUNhbGxlclVpZDsKLSAgICBwcml2YXRlIGZpbmFsIGludCBtQ2FsbGVyUGlkOwotICAgIHByaXZhdGUgZmluYWwgbG9uZyBtUmVjZWl2ZWRUaW1lOwotICAgIHByaXZhdGUgbG9uZyBtUGxheWJhY2tTdGFydFRpbWUgPSAtMTsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGxvbmcgbVJlcXVlc3RQcm9jZXNzaW5nU3RhcnRUaW1lID0gLTE7Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBsb25nIG1FbmdpbmVTdGFydFRpbWUgPSAtMTsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGxvbmcgbUVuZ2luZUNvbXBsZXRlVGltZSA9IC0xOwotCi0gICAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIG1FcnJvciA9IGZhbHNlOwotICAgIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBtU3RvcHBlZCA9IGZhbHNlOwotICAgIHByaXZhdGUgYm9vbGVhbiBtTG9nV3JpdHRlbiA9IGZhbHNlOwotCi0gICAgRXZlbnRMb2dnZXIoU3ludGhlc2lzUmVxdWVzdCByZXF1ZXN0LCBpbnQgY2FsbGVyVWlkLCBpbnQgY2FsbGVyUGlkLCBTdHJpbmcgc2VydmljZUFwcCkgewotICAgICAgICBtUmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgICAgIG1DYWxsZXJVaWQgPSBjYWxsZXJVaWQ7Ci0gICAgICAgIG1DYWxsZXJQaWQgPSBjYWxsZXJQaWQ7Ci0gICAgICAgIG1TZXJ2aWNlQXBwID0gc2VydmljZUFwcDsKLSAgICAgICAgbVJlY2VpdmVkVGltZSA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE5vdGlmaWVzIHRoZSBsb2dnZXIgdGhhdCB0aGlzIHJlcXVlc3QgaGFzIGJlZW4gc2VsZWN0ZWQgZnJvbQotICAgICAqIHRoZSBwcm9jZXNzaW5nIHF1ZXVlIGZvciBwcm9jZXNzaW5nLiBFbmdpbmUgbGF0ZW5jeSAvIHRvdGFsIHRpbWUKLSAgICAgKiBpcyBtZWFzdXJlZCBmcm9tIHRoaXMgYmFzZWxpbmUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgb25SZXF1ZXN0UHJvY2Vzc2luZ1N0YXJ0KCkgewotICAgICAgICBtUmVxdWVzdFByb2Nlc3NpbmdTdGFydFRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBOb3RpZmllcyB0aGUgbG9nZ2VyIHRoYXQgYSBjaHVuayBvZiBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20KLSAgICAgKiB0aGUgZW5naW5lLiBNaWdodCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgb25FbmdpbmVEYXRhUmVjZWl2ZWQoKSB7Ci0gICAgICAgIGlmIChtRW5naW5lU3RhcnRUaW1lID09IC0xKSB7Ci0gICAgICAgICAgICBtRW5naW5lU3RhcnRUaW1lID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBOb3RpZmllcyB0aGUgbG9nZ2VyIHRoYXQgdGhlIGVuZ2luZSBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyBkYXRhLgotICAgICAqIFdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvbkVuZ2luZUNvbXBsZXRlKCkgewotICAgICAgICBtRW5naW5lQ29tcGxldGVUaW1lID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTm90aWZpZXMgdGhlIGxvZ2dlciB0aGF0IGF1ZGlvIHBsYXliYWNrIGhhcyBzdGFydGVkIGZvciBzb21lIHNlY3Rpb24KLSAgICAgKiBvZiB0aGUgc3ludGhlc2lzLiBUaGlzIGlzIG5vcm1hbGx5IHNvbWUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIGVuZ2luZQotICAgICAqIGhhcyBzeW50aGVzaXplZCBkYXRhIGFuZCB2YXJpZXMgZGVwZW5kaW5nIG9uIHV0dGVyYW5jZXMgYW5kCi0gICAgICogb3RoZXIgYXVkaW8gY3VycmVudGx5IGluIHRoZSBxdWV1ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvbkF1ZGlvRGF0YVdyaXR0ZW4oKSB7Ci0gICAgICAgIC8vIEZvciBub3csIGtlZXAgdHJhY2sgb2Ygb25seSB0aGUgZmlyc3QgY2h1bmsgb2YgYXVkaW8KLSAgICAgICAgLy8gdGhhdCB3YXMgcGxheWVkLgotICAgICAgICBpZiAobVBsYXliYWNrU3RhcnRUaW1lID09IC0xKSB7Ci0gICAgICAgICAgICBtUGxheWJhY2tTdGFydFRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIE5vdGlmaWVzIHRoZSBsb2dnZXIgdGhhdCB0aGUgY3VycmVudCBzeW50aGVzaXMgd2FzIHN0b3BwZWQuCi0gICAgICogTGF0ZW5jeSBudW1iZXJzIGFyZSBub3QgcmVwb3J0ZWQgZm9yIHN0b3BwZWQgc3ludGhlc2VzLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uU3RvcHBlZCgpIHsKLSAgICAgICAgbVN0b3BwZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBOb3RpZmllcyB0aGUgbG9nZ2VyIHRoYXQgdGhlIGN1cnJlbnQgc3ludGhlc2lzIHJlc3VsdGVkIGluCi0gICAgICogYW4gZXJyb3IuIFRoaXMgaXMgbG9nZ2VkIHVzaW5nIHtAbGluayBFdmVudExvZ1RhZ3Mjd3JpdGVUdHNTcGVha0ZhaWx1cmV9LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoKSB7Ci0gICAgICAgIG1FcnJvciA9IHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTm90aWZpZXMgdGhlIGxvZ2dlciB0aGF0IHRoZSBjdXJyZW50IHN5bnRoZXNpcyBoYXMgY29tcGxldGVkLgotICAgICAqIEFsbCBhdmFpbGFibGUgZGF0YSBpcyBub3QgbG9nZ2VkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uV3JpdGVEYXRhKCkgewotICAgICAgICBpZiAobUxvZ1dyaXR0ZW4pIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1Mb2dXcml0dGVuID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGxvbmcgY29tcGxldGlvblRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgICAgLy8gb25BdWRpb0RhdGFXcml0dGVuKCkgc2hvdWxkIG5vcm1hbGx5IGFsd2F5cyBiZSBjYWxsZWQgaWYgYW4KLSAgICAgICAgLy8gZXJyb3IgZG9lcyBub3Qgb2NjdXIuCi0gICAgICAgIGlmIChtRXJyb3IgfHwgbVBsYXliYWNrU3RhcnRUaW1lID09IC0xIHx8IG1FbmdpbmVDb21wbGV0ZVRpbWUgPT0gLTEpIHsKLSAgICAgICAgICAgIEV2ZW50TG9nVGFncy53cml0ZVR0c1NwZWFrRmFpbHVyZShtU2VydmljZUFwcCwgbUNhbGxlclVpZCwgbUNhbGxlclBpZCwKLSAgICAgICAgICAgICAgICAgICAgZ2V0VXR0ZXJhbmNlTGVuZ3RoKCksIGdldExvY2FsZVN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICBtUmVxdWVzdC5nZXRTcGVlY2hSYXRlKCksIG1SZXF1ZXN0LmdldFBpdGNoKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgZG9uJ3QgcmVwb3J0IHN0b3BwZWQgc3ludGhlc2VzIGJlY2F1c2UgdGhlaXIgb3ZlcmFsbAotICAgICAgICAvLyB0b3RhbCB0aW1lIHNwZW50IHdpbGwgYmUgaW5uYWN1cmF0ZSAod2lsbCBub3QgY29ycmVsYXRlIHdpdGgKLSAgICAgICAgLy8gdGhlIGxlbmd0aCBvZiB0aGUgdXR0ZXJhbmNlKS4KLSAgICAgICAgaWYgKG1TdG9wcGVkKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBsb25nIGF1ZGlvTGF0ZW5jeSA9IG1QbGF5YmFja1N0YXJ0VGltZSAtIG1SZWNlaXZlZFRpbWU7Ci0gICAgICAgIGZpbmFsIGxvbmcgZW5naW5lTGF0ZW5jeSA9IG1FbmdpbmVTdGFydFRpbWUgLSBtUmVxdWVzdFByb2Nlc3NpbmdTdGFydFRpbWU7Ci0gICAgICAgIGZpbmFsIGxvbmcgZW5naW5lVG90YWwgPSBtRW5naW5lQ29tcGxldGVUaW1lIC0gbVJlcXVlc3RQcm9jZXNzaW5nU3RhcnRUaW1lOwotCi0gICAgICAgIEV2ZW50TG9nVGFncy53cml0ZVR0c1NwZWFrU3VjY2VzcyhtU2VydmljZUFwcCwgbUNhbGxlclVpZCwgbUNhbGxlclBpZCwKLSAgICAgICAgICAgICAgICBnZXRVdHRlcmFuY2VMZW5ndGgoKSwgZ2V0TG9jYWxlU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgbVJlcXVlc3QuZ2V0U3BlZWNoUmF0ZSgpLCBtUmVxdWVzdC5nZXRQaXRjaCgpLAotICAgICAgICAgICAgICAgIGVuZ2luZUxhdGVuY3ksIGVuZ2luZVRvdGFsLCBhdWRpb0xhdGVuY3kpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgdXR0ZXJhbmNlIGZvciB0aGUgZ2l2ZW4gc3ludGhlc2lzLCAwCi0gICAgICogICAgICAgICAgaWYgdGhlIHV0dGVyYW5jZSB3YXMge0Bjb2RlIG51bGx9LgotICAgICAqLwotICAgIHByaXZhdGUgaW50IGdldFV0dGVyYW5jZUxlbmd0aCgpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHV0dGVyYW5jZSA9IG1SZXF1ZXN0LmdldFRleHQoKTsKLSAgICAgICAgcmV0dXJuIHV0dGVyYW5jZSA9PSBudWxsID8gMCA6IHV0dGVyYW5jZS5sZW5ndGgoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIGxvY2FsZSBzdHJpbmcgZnJvbSB0aGUgc3ludGhlc2lzIHBhcmFtcyBvZiB0aGUKLSAgICAgKiBmb3JtIGxhbmctY291bnRyeS12YXJpYW50LgotICAgICAqLwotICAgIHByaXZhdGUgU3RyaW5nIGdldExvY2FsZVN0cmluZygpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKG1SZXF1ZXN0LmdldExhbmd1YWdlKCkpOwotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KG1SZXF1ZXN0LmdldENvdW50cnkoKSkpIHsKLSAgICAgICAgICAgIHNiLmFwcGVuZCgnLScpOwotICAgICAgICAgICAgc2IuYXBwZW5kKG1SZXF1ZXN0LmdldENvdW50cnkoKSk7Ci0KLSAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkobVJlcXVlc3QuZ2V0VmFyaWFudCgpKSkgewotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgnLScpOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZChtUmVxdWVzdC5nZXRWYXJpYW50KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nZ2VyVjEuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvRXZlbnRMb2dnZXJWMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ODQzNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nZ2VyVjEuamF2YQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGFuZHJvaWQuc3BlZWNoLnR0czsKKworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CisKKy8qKgorICogV3JpdGVzIGRhdGEgYWJvdXQgYSBnaXZlbiBzcGVlY2ggc3ludGhlc2lzIHJlcXVlc3QgZm9yIFYxIEFQSSB0byB0aGUgZXZlbnQKKyAqIGxvZ3MuIFRoZSBkYXRhIHRoYXQgaXMgbG9nZ2VkIGluY2x1ZGVzIHRoZSBjYWxsaW5nIGFwcCwgbGVuZ3RoIG9mIHRoZQorICogdXR0ZXJhbmNlLCBzcGVlY2ggcmF0ZSAvIHBpdGNoLCB0aGUgbGF0ZW5jeSwgYW5kIG92ZXJhbGwgdGltZSB0YWtlbi4KKyAqLworY2xhc3MgRXZlbnRMb2dnZXJWMSBleHRlbmRzIEFic3RyYWN0RXZlbnRMb2dnZXIgeworICAgIHByaXZhdGUgZmluYWwgU3ludGhlc2lzUmVxdWVzdCBtUmVxdWVzdDsKKworICAgIEV2ZW50TG9nZ2VyVjEoU3ludGhlc2lzUmVxdWVzdCByZXF1ZXN0LCBpbnQgY2FsbGVyVWlkLCBpbnQgY2FsbGVyUGlkLCBTdHJpbmcgc2VydmljZUFwcCkgeworICAgICAgICBzdXBlcihjYWxsZXJVaWQsIGNhbGxlclBpZCwgc2VydmljZUFwcCk7CisgICAgICAgIG1SZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBsb2dGYWlsdXJlKGludCBzdGF0dXNDb2RlKSB7CisgICAgICAgIC8vIFdlIGRvbid0IHJlcG9ydCBzdG9wcGVkIHN5bnRoZXNlcyBiZWNhdXNlIHRoZWlyIG92ZXJhbGwKKyAgICAgICAgLy8gdG90YWwgdGltZSBzcGVudCB3aWxsIGJlIGluYWNjdXJhdGUgKHdpbGwgbm90IGNvcnJlbGF0ZSB3aXRoCisgICAgICAgIC8vIHRoZSBsZW5ndGggb2YgdGhlIHV0dGVyYW5jZSkuCisgICAgICAgIGlmIChzdGF0dXNDb2RlICE9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCkgeworICAgICAgICAgICAgRXZlbnRMb2dUYWdzLndyaXRlVHRzU3BlYWtGYWlsdXJlKG1TZXJ2aWNlQXBwLCBtQ2FsbGVyVWlkLCBtQ2FsbGVyUGlkLAorICAgICAgICAgICAgICAgICAgICBnZXRVdHRlcmFuY2VMZW5ndGgoKSwgZ2V0TG9jYWxlU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgIG1SZXF1ZXN0LmdldFNwZWVjaFJhdGUoKSwgbVJlcXVlc3QuZ2V0UGl0Y2goKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBsb2dTdWNjZXNzKGxvbmcgYXVkaW9MYXRlbmN5LCBsb25nIGVuZ2luZUxhdGVuY3ksIGxvbmcgZW5naW5lVG90YWwpIHsKKyAgICAgICAgRXZlbnRMb2dUYWdzLndyaXRlVHRzU3BlYWtTdWNjZXNzKG1TZXJ2aWNlQXBwLCBtQ2FsbGVyVWlkLCBtQ2FsbGVyUGlkLAorICAgICAgICAgICAgICAgIGdldFV0dGVyYW5jZUxlbmd0aCgpLCBnZXRMb2NhbGVTdHJpbmcoKSwKKyAgICAgICAgICAgICAgICBtUmVxdWVzdC5nZXRTcGVlY2hSYXRlKCksIG1SZXF1ZXN0LmdldFBpdGNoKCksCisgICAgICAgICAgICAgICAgZW5naW5lTGF0ZW5jeSwgZW5naW5lVG90YWwsIGF1ZGlvTGF0ZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSB1dHRlcmFuY2UgZm9yIHRoZSBnaXZlbiBzeW50aGVzaXMsIDAKKyAgICAgKiAgICAgICAgICBpZiB0aGUgdXR0ZXJhbmNlIHdhcyB7QGNvZGUgbnVsbH0uCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0VXR0ZXJhbmNlTGVuZ3RoKCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgdXR0ZXJhbmNlID0gbVJlcXVlc3QuZ2V0VGV4dCgpOworICAgICAgICByZXR1cm4gdXR0ZXJhbmNlID09IG51bGwgPyAwIDogdXR0ZXJhbmNlLmxlbmd0aCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBmb3JtYXR0ZWQgbG9jYWxlIHN0cmluZyBmcm9tIHRoZSBzeW50aGVzaXMgcGFyYW1zIG9mIHRoZQorICAgICAqIGZvcm0gbGFuZy1jb3VudHJ5LXZhcmlhbnQuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TG9jYWxlU3RyaW5nKCkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIobVJlcXVlc3QuZ2V0TGFuZ3VhZ2UoKSk7CisgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkobVJlcXVlc3QuZ2V0Q291bnRyeSgpKSkgeworICAgICAgICAgICAgc2IuYXBwZW5kKCctJyk7CisgICAgICAgICAgICBzYi5hcHBlbmQobVJlcXVlc3QuZ2V0Q291bnRyeSgpKTsKKworICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShtUmVxdWVzdC5nZXRWYXJpYW50KCkpKSB7CisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCctJyk7CisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKG1SZXF1ZXN0LmdldFZhcmlhbnQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nZ2VyVjIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvRXZlbnRMb2dnZXJWMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTRkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0V2ZW50TG9nZ2VyVjIuamF2YQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGFuZHJvaWQuc3BlZWNoLnR0czsKKworCisKKy8qKgorICogV3JpdGVzIGRhdGEgYWJvdXQgYSBnaXZlbiBzcGVlY2ggc3ludGhlc2lzIHJlcXVlc3QgZm9yIFYyIEFQSSB0byB0aGUgZXZlbnQgbG9ncy4KKyAqIFRoZSBkYXRhIHRoYXQgaXMgbG9nZ2VkIGluY2x1ZGVzIHRoZSBjYWxsaW5nIGFwcCwgbGVuZ3RoIG9mIHRoZSB1dHRlcmFuY2UsCisgKiBzeW50aGVzaXMgcmVxdWVzdCBjb25maWd1cmF0aW9uIGFuZCB0aGUgbGF0ZW5jeSBhbmQgb3ZlcmFsbCB0aW1lIHRha2VuLgorICovCitjbGFzcyBFdmVudExvZ2dlclYyIGV4dGVuZHMgQWJzdHJhY3RFdmVudExvZ2dlciB7CisgICAgcHJpdmF0ZSBmaW5hbCBTeW50aGVzaXNSZXF1ZXN0VjIgbVJlcXVlc3Q7CisKKyAgICBFdmVudExvZ2dlclYyKFN5bnRoZXNpc1JlcXVlc3RWMiByZXF1ZXN0LCBpbnQgY2FsbGVyVWlkLCBpbnQgY2FsbGVyUGlkLCBTdHJpbmcgc2VydmljZUFwcCkgeworICAgICAgICBzdXBlcihjYWxsZXJVaWQsIGNhbGxlclBpZCwgc2VydmljZUFwcCk7CisgICAgICAgIG1SZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBsb2dGYWlsdXJlKGludCBzdGF0dXNDb2RlKSB7CisgICAgICAgIC8vIFdlIGRvbid0IHJlcG9ydCBzdG9wcGVkIHN5bnRoZXNlcyBiZWNhdXNlIHRoZWlyIG92ZXJhbGwKKyAgICAgICAgLy8gdG90YWwgdGltZSBzcGVudCB3aWxsIGJlIGluYWNjdXJhdGUgKHdpbGwgbm90IGNvcnJlbGF0ZSB3aXRoCisgICAgICAgIC8vIHRoZSBsZW5ndGggb2YgdGhlIHV0dGVyYW5jZSkuCisgICAgICAgIGlmIChzdGF0dXNDb2RlICE9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCkgeworICAgICAgICAgICAgRXZlbnRMb2dUYWdzLndyaXRlVHRzVjJTcGVha0ZhaWx1cmUobVNlcnZpY2VBcHAsCisgICAgICAgICAgICAgICAgICAgIG1DYWxsZXJVaWQsIG1DYWxsZXJQaWQsIGdldFV0dGVyYW5jZUxlbmd0aCgpLCBnZXRSZXF1ZXN0Q29uZmlnU3RyaW5nKCksIHN0YXR1c0NvZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgbG9nU3VjY2Vzcyhsb25nIGF1ZGlvTGF0ZW5jeSwgbG9uZyBlbmdpbmVMYXRlbmN5LCBsb25nIGVuZ2luZVRvdGFsKSB7CisgICAgICAgIEV2ZW50TG9nVGFncy53cml0ZVR0c1YyU3BlYWtTdWNjZXNzKG1TZXJ2aWNlQXBwLAorICAgICAgICAgICAgICAgIG1DYWxsZXJVaWQsIG1DYWxsZXJQaWQsIGdldFV0dGVyYW5jZUxlbmd0aCgpLCBnZXRSZXF1ZXN0Q29uZmlnU3RyaW5nKCksCisgICAgICAgICAgICAgICAgZW5naW5lTGF0ZW5jeSwgZW5naW5lVG90YWwsIGF1ZGlvTGF0ZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSB1dHRlcmFuY2UgZm9yIHRoZSBnaXZlbiBzeW50aGVzaXMsIDAKKyAgICAgKiAgICAgICAgICBpZiB0aGUgdXR0ZXJhbmNlIHdhcyB7QGNvZGUgbnVsbH0uCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0VXR0ZXJhbmNlTGVuZ3RoKCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgdXR0ZXJhbmNlID0gbVJlcXVlc3QuZ2V0VGV4dCgpOworICAgICAgICByZXR1cm4gdXR0ZXJhbmNlID09IG51bGwgPyAwIDogdXR0ZXJhbmNlLmxlbmd0aCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN5bnRoZXNpcyByZXF1ZXN0IGNvbmZpZ3VyYXRpb24uCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0UmVxdWVzdENvbmZpZ1N0cmluZygpIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoZSBidW5kbGVzIGFyZSB1bnBhcmNlbGVkLgorICAgICAgICBtUmVxdWVzdC5nZXRWb2ljZVBhcmFtcygpLnNpemUoKTsKKyAgICAgICAgbVJlcXVlc3QuZ2V0QXVkaW9QYXJhbXMoKS5zaXplKCk7CisKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdCdWlsZGVyKDY0KS5hcHBlbmQoIlZvaWNlTmFtZTogIikuYXBwZW5kKG1SZXF1ZXN0LmdldFZvaWNlTmFtZSgpKQorICAgICAgICAgICAgLmFwcGVuZCgiICxWb2ljZVBhcmFtczogIikuYXBwZW5kKG1SZXF1ZXN0LmdldFZvaWNlUGFyYW1zKCkpCisgICAgICAgICAgICAuYXBwZW5kKCIgLFN5c3RlbVBhcmFtczogIikuYXBwZW5kKG1SZXF1ZXN0LmdldEF1ZGlvUGFyYW1zKCkpCisgICAgICAgICAgICAuYXBwZW5kKCJdIikudG9TdHJpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0ZpbGVTeW50aGVzaXNDYWxsYmFjay5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9GaWxlU3ludGhlc2lzQ2FsbGJhY2suamF2YQppbmRleCBhYjhmODJmLi43MTdhZWI2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0ZpbGVTeW50aGVzaXNDYWxsYmFjay5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvRmlsZVN5bnRoZXNpc0NhbGxiYWNrLmphdmEKQEAgLTE2LDEzICsxNiwxMCBAQAogcGFja2FnZSBhbmRyb2lkLnNwZWVjaC50dHM7CiAKIGltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQub3MuRmlsZVV0aWxzOworaW1wb3J0IGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2hTZXJ2aWNlLlV0dGVyYW5jZVByb2dyZXNzRGlzcGF0Y2hlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmFuZG9tQWNjZXNzRmlsZTsKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogaW1wb3J0IGphdmEubmlvLkJ5dGVPcmRlcjsKIGltcG9ydCBqYXZhLm5pby5jaGFubmVscy5GaWxlQ2hhbm5lbDsKQEAgLTQ4LDE5ICs0NSwzOSBAQAogCiAgICAgcHJpdmF0ZSBGaWxlQ2hhbm5lbCBtRmlsZUNoYW5uZWw7CiAKKyAgICBwcml2YXRlIGZpbmFsIFV0dGVyYW5jZVByb2dyZXNzRGlzcGF0Y2hlciBtRGlzcGF0Y2hlcjsKKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBtQ2FsbGVySWRlbnRpdHk7CisKICAgICBwcml2YXRlIGJvb2xlYW4gbVN0YXJ0ZWQgPSBmYWxzZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbVN0b3BwZWQgPSBmYWxzZTsKICAgICBwcml2YXRlIGJvb2xlYW4gbURvbmUgPSBmYWxzZTsKIAotICAgIEZpbGVTeW50aGVzaXNDYWxsYmFjayhGaWxlQ2hhbm5lbCBmaWxlQ2hhbm5lbCkgeworICAgIC8qKiBTdGF0dXMgY29kZSBvZiBzeW50aGVzaXMgKi8KKyAgICBwcm90ZWN0ZWQgaW50IG1TdGF0dXNDb2RlOworCisgICAgRmlsZVN5bnRoZXNpc0NhbGxiYWNrKEZpbGVDaGFubmVsIGZpbGVDaGFubmVsLCBVdHRlcmFuY2VQcm9ncmVzc0Rpc3BhdGNoZXIgZGlzcGF0Y2hlciwKKyAgICAgICAgICAgIE9iamVjdCBjYWxsZXJJZGVudGl0eSwgYm9vbGVhbiBjbGllbnRJc1VzaW5nVjIpIHsKKyAgICAgICAgc3VwZXIoY2xpZW50SXNVc2luZ1YyKTsKICAgICAgICAgbUZpbGVDaGFubmVsID0gZmlsZUNoYW5uZWw7CisgICAgICAgIG1EaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsKKyAgICAgICAgbUNhbGxlcklkZW50aXR5ID0gY2FsbGVySWRlbnRpdHk7CisgICAgICAgIG1TdGF0dXNDb2RlID0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVUNDRVNTOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHZvaWQgc3RvcCgpIHsKICAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7Ci0gICAgICAgICAgICBtU3RvcHBlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAobURvbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobVN0YXR1c0NvZGUgPT0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRDsKICAgICAgICAgICAgIGNsZWFuVXAoKTsKKyAgICAgICAgICAgIGlmIChtRGlzcGF0Y2hlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbURpc3BhdGNoZXIuZGlzcGF0Y2hPblN0b3AoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtNzUsMTQgKzkyLDggQEAKICAgICAgKiBNdXN0IGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIHRoZSBtb25pdG9yIG9uIHtAbGluayAjbVN0YXRlTG9ja30uCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlRmlsZSgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChtRmlsZUNoYW5uZWwgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1GaWxlQ2hhbm5lbC5jbG9zZSgpOwotICAgICAgICAgICAgICAgIG1GaWxlQ2hhbm5lbCA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gY2xvc2Ugb3V0cHV0IGZpbGUgZGVzY3JpcHRvciIsIGV4KTsKLSAgICAgICAgfQorICAgICAgICAvLyBGaWxlIHdpbGwgYmUgY2xvc2VkIGJ5IHRoZSBTcGVlY2hJdGVtIGluIHRoZSBzcGVlY2ggc2VydmljZS4KKyAgICAgICAgbUZpbGVDaGFubmVsID0gbnVsbDsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTkxLDM4ICsxMDIsNDYgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBib29sZWFuIGlzRG9uZSgpIHsKLSAgICAgICAgcmV0dXJuIG1Eb25lOwotICAgIH0KLQotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgc3RhcnQoaW50IHNhbXBsZVJhdGVJbkh6LCBpbnQgYXVkaW9Gb3JtYXQsIGludCBjaGFubmVsQ291bnQpIHsKICAgICAgICAgaWYgKERCRykgewogICAgICAgICAgICAgTG9nLmQoVEFHLCAiRmlsZVN5bnRoZXNpc1JlcXVlc3Quc3RhcnQoIiArIHNhbXBsZVJhdGVJbkh6ICsgIiwiICsgYXVkaW9Gb3JtYXQKICAgICAgICAgICAgICAgICAgICAgKyAiLCIgKyBjaGFubmVsQ291bnQgKyAiKSIpOwogICAgICAgICB9CisgICAgICAgIEZpbGVDaGFubmVsIGZpbGVDaGFubmVsID0gbnVsbDsKICAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7Ci0gICAgICAgICAgICBpZiAobVN0b3BwZWQpIHsKKyAgICAgICAgICAgIGlmIChtU3RhdHVzQ29kZSA9PSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNUT1BQRUQpIHsKICAgICAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJSZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yQ29kZU9uU3RvcCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1TdGF0dXNDb2RlICE9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkVycm9yIHdhcyByYWlzZWQiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1TdGFydGVkKSB7Ci0gICAgICAgICAgICAgICAgY2xlYW5VcCgpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkZpbGVTeW50aGVzaXNSZXF1ZXN0LnN0YXJ0KCkgY2FsbGVkIHR3aWNlIik7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiU3RhcnQgY2FsbGVkIHR3aWNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1TdGFydGVkID0gdHJ1ZTsKICAgICAgICAgICAgIG1TYW1wbGVSYXRlSW5IeiA9IHNhbXBsZVJhdGVJbkh6OwogICAgICAgICAgICAgbUF1ZGlvRm9ybWF0ID0gYXVkaW9Gb3JtYXQ7CiAgICAgICAgICAgICBtQ2hhbm5lbENvdW50ID0gY2hhbm5lbENvdW50OwogCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1GaWxlQ2hhbm5lbC53cml0ZShCeXRlQnVmZmVyLmFsbG9jYXRlKFdBVl9IRUFERVJfTEVOR1RIKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5TVUNDRVNTOwotICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gd3JpdGUgd2F2IGhlYWRlciB0byBvdXRwdXQgZmlsZSBkZXNjcmlwdG9yIiArIGV4KTsKLSAgICAgICAgICAgICAgICBjbGVhblVwKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKKyAgICAgICAgICAgIGlmIChtRGlzcGF0Y2hlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbURpc3BhdGNoZXIuZGlzcGF0Y2hPblN0YXJ0KCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBmaWxlQ2hhbm5lbCA9IG1GaWxlQ2hhbm5lbDsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaWxlQ2hhbm5lbC53cml0ZShCeXRlQnVmZmVyLmFsbG9jYXRlKFdBVl9IRUFERVJfTEVOR1RIKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5TVUNDRVNTOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIHdyaXRlIHdhdiBoZWFkZXIgdG8gb3V0cHV0IGZpbGUgZGVzY3JpcHRvciIsIGV4KTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgeworICAgICAgICAgICAgICAgIGNsZWFuVXAoKTsKKyAgICAgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfT1VUUFVUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTMyLDY2ICsxNTEsMTI4IEBACiAgICAgICAgICAgICBMb2cuZChUQUcsICJGaWxlU3ludGhlc2lzUmVxdWVzdC5hdWRpb0F2YWlsYWJsZSgiICsgYnVmZmVyICsgIiwiICsgb2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICsgIiwiICsgbGVuZ3RoICsgIikiKTsKICAgICAgICAgfQorICAgICAgICBGaWxlQ2hhbm5lbCBmaWxlQ2hhbm5lbCA9IG51bGw7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgewotICAgICAgICAgICAgaWYgKG1TdG9wcGVkKSB7CisgICAgICAgICAgICBpZiAobVN0YXR1c0NvZGUgPT0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKSB7CiAgICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiUmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvckNvZGVPblN0b3AoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtU3RhdHVzQ29kZSAhPSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJFcnJvciB3YXMgcmFpc2VkIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtRmlsZUNoYW5uZWwgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZpbGUgbm90IG9wZW4iKTsKKyAgICAgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfT1VUUFVUOwogICAgICAgICAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guRVJST1I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1GaWxlQ2hhbm5lbC53cml0ZShCeXRlQnVmZmVyLndyYXAoYnVmZmVyLCAgb2Zmc2V0LCAgbGVuZ3RoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5TVUNDRVNTOwotICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gd3JpdGUgdG8gb3V0cHV0IGZpbGUgZGVzY3JpcHRvciIsIGV4KTsKKyAgICAgICAgICAgIGlmICghbVN0YXJ0ZWQpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJTdGFydCBtZXRob2Qgd2FzIG5vdCBjYWxsZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlsZUNoYW5uZWwgPSBtRmlsZUNoYW5uZWw7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmlsZUNoYW5uZWwud3JpdGUoQnl0ZUJ1ZmZlci53cmFwKGJ1ZmZlciwgIG9mZnNldCwgIGxlbmd0aCkpOworICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5TVUNDRVNTOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIHdyaXRlIHRvIG91dHB1dCBmaWxlIGRlc2NyaXB0b3IiLCBleCk7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0ZUxvY2spIHsKICAgICAgICAgICAgICAgICBjbGVhblVwKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKKyAgICAgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfT1VUUFVUOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZG9uZSgpIHsKICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiRmlsZVN5bnRoZXNpc1JlcXVlc3QuZG9uZSgpIik7CisgICAgICAgIEZpbGVDaGFubmVsIGZpbGVDaGFubmVsID0gbnVsbDsKKworICAgICAgICBpbnQgc2FtcGxlUmF0ZUluSHogPSAwOworICAgICAgICBpbnQgYXVkaW9Gb3JtYXQgPSAwOworICAgICAgICBpbnQgY2hhbm5lbENvdW50ID0gMDsKKwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0ZUxvY2spIHsKICAgICAgICAgICAgIGlmIChtRG9uZSkgewotICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkR1cGxpY2F0ZSBjYWxsIHRvIGRvbmUoKSIpOwotICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJlc2VydmVzIGV4aXN0aW5nIGJlaGF2aW91ci4gRWFybGllciwgaWYgZG9uZSB3YXMgY2FsbGVkIHR3aWNlCi0gICAgICAgICAgICAgICAgLy8gd2UnZCByZXR1cm4gRVJST1IgYmVjYXVzZSBtRmlsZSA9PSBudWxsIGFuZCB3ZSdkIGFkZCB0byBsb2dzcGFtLgorICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkR1cGxpY2F0ZSBjYWxsIHRvIGRvbmUoKSIpOworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGFuIGVycm9yIHRoYXQgd291bGQgcHJldmVudCBzeW50aGVzaXMuIEhlbmNlIG5vCisgICAgICAgICAgICAgICAgLy8gc2V0U3RhdHVzQ29kZSBpcyBzZXQuCiAgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtU3RvcHBlZCkgeworICAgICAgICAgICAgaWYgKG1TdGF0dXNDb2RlID09IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCkgewogICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIlJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JDb2RlT25TdG9wKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobURpc3BhdGNoZXIgIT0gbnVsbCAmJiBtU3RhdHVzQ29kZSAhPSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNVQ0NFU1MgJiYKKyAgICAgICAgICAgICAgICAgICAgbVN0YXR1c0NvZGUgIT0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKSB7CisgICAgICAgICAgICAgICAgbURpc3BhdGNoZXIuZGlzcGF0Y2hPbkVycm9yKG1TdGF0dXNDb2RlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1GaWxlQ2hhbm5lbCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmlsZSBub3Qgb3BlbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guRVJST1I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIC8vIFdyaXRlIFdBViBoZWFkZXIgYXQgc3RhcnQgb2YgZmlsZQotICAgICAgICAgICAgICAgIG1GaWxlQ2hhbm5lbC5wb3NpdGlvbigwKTsKLSAgICAgICAgICAgICAgICBpbnQgZGF0YUxlbmd0aCA9IChpbnQpIChtRmlsZUNoYW5uZWwuc2l6ZSgpIC0gV0FWX0hFQURFUl9MRU5HVEgpOwotICAgICAgICAgICAgICAgIG1GaWxlQ2hhbm5lbC53cml0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VXYXZIZWFkZXIobVNhbXBsZVJhdGVJbkh6LCBtQXVkaW9Gb3JtYXQsIG1DaGFubmVsQ291bnQsIGRhdGFMZW5ndGgpKTsKKyAgICAgICAgICAgIG1Eb25lID0gdHJ1ZTsKKyAgICAgICAgICAgIGZpbGVDaGFubmVsID0gbUZpbGVDaGFubmVsOworICAgICAgICAgICAgc2FtcGxlUmF0ZUluSHogPSBtU2FtcGxlUmF0ZUluSHo7CisgICAgICAgICAgICBhdWRpb0Zvcm1hdCA9IG1BdWRpb0Zvcm1hdDsKKyAgICAgICAgICAgIGNoYW5uZWxDb3VudCA9IG1DaGFubmVsQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gV3JpdGUgV0FWIGhlYWRlciBhdCBzdGFydCBvZiBmaWxlCisgICAgICAgICAgICBmaWxlQ2hhbm5lbC5wb3NpdGlvbigwKTsKKyAgICAgICAgICAgIGludCBkYXRhTGVuZ3RoID0gKGludCkgKGZpbGVDaGFubmVsLnNpemUoKSAtIFdBVl9IRUFERVJfTEVOR1RIKTsKKyAgICAgICAgICAgIGZpbGVDaGFubmVsLndyaXRlKAorICAgICAgICAgICAgICAgICAgICBtYWtlV2F2SGVhZGVyKHNhbXBsZVJhdGVJbkh6LCBhdWRpb0Zvcm1hdCwgY2hhbm5lbENvdW50LCBkYXRhTGVuZ3RoKSk7CisKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgewogICAgICAgICAgICAgICAgIGNsb3NlRmlsZSgpOwotICAgICAgICAgICAgICAgIG1Eb25lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobURpc3BhdGNoZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBtRGlzcGF0Y2hlci5kaXNwYXRjaE9uU3VjY2VzcygpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLlNVQ0NFU1M7Ci0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byB3cml0ZSB0byBvdXRwdXQgZmlsZSBkZXNjcmlwdG9yIiwgZXgpOwotICAgICAgICAgICAgICAgIGNsZWFuVXAoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIHdyaXRlIHRvIG91dHB1dCBmaWxlIGRlc2NyaXB0b3IiLCBleCk7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0ZUxvY2spIHsKKyAgICAgICAgICAgICAgICBjbGVhblVwKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgZXJyb3IoKSB7CisgICAgICAgIGVycm9yKFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfU1lOVEhFU0lTKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBlcnJvcihpbnQgZXJyb3JDb2RlKSB7CiAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkZpbGVTeW50aGVzaXNSZXF1ZXN0LmVycm9yKCkiKTsKICAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7CisgICAgICAgICAgICBpZiAobURvbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjbGVhblVwKCk7CisgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IGVycm9yQ29kZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGhhc1N0YXJ0ZWQoKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG1TdGFydGVkOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaGFzRmluaXNoZWQoKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG1Eb25lOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMjUsNCArMzA2LDE2IEBACiAgICAgICAgIHJldHVybiBoZWFkZXI7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBmYWxsYmFjaygpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7CisgICAgICAgICAgICBpZiAoaGFzU3RhcnRlZCgpIHx8IGhhc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRGlzcGF0Y2hlci5kaXNwYXRjaE9uRmFsbGJhY2soKTsKKyAgICAgICAgICAgIG1TdGF0dXNDb2RlID0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVUNDRVNTOworICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvSVRleHRUb1NwZWVjaENhbGxiYWNrLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0lUZXh0VG9TcGVlY2hDYWxsYmFjay5haWRsCmluZGV4IGYwMjg3ZDQuLjNjODA4ZmYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvSVRleHRUb1NwZWVjaENhbGxiYWNrLmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9JVGV4dFRvU3BlZWNoQ2FsbGJhY2suYWlkbApAQCAtMTUsMTMgKzE1LDUzIEBACiAgKi8KIHBhY2thZ2UgYW5kcm9pZC5zcGVlY2gudHRzOwogCitpbXBvcnQgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mbzsKKwogLyoqCiAgKiBJbnRlcmZhY2UgZm9yIGNhbGxiYWNrcyBmcm9tIFRleHRUb1NwZWVjaFNlcnZpY2UKICAqCiAgKiB7QGhpZGV9CiAgKi8KIG9uZXdheSBpbnRlcmZhY2UgSVRleHRUb1NwZWVjaENhbGxiYWNrIHsKKyAgICAvKioKKyAgICAgKiBUZWxscyB0aGUgY2xpZW50IHRoYXQgdGhlIHN5bnRoZXNpcyBoYXMgc3RhcnRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1dHRlcmFuY2VJZCBVbmlxdWUgaWQgaWRlbnRpZnlpbmcgc3ludGhlc2lzIHJlcXVlc3QuCisgICAgICovCiAgICAgdm9pZCBvblN0YXJ0KFN0cmluZyB1dHRlcmFuY2VJZCk7Ci0gICAgdm9pZCBvbkRvbmUoU3RyaW5nIHV0dGVyYW5jZUlkKTsKLSAgICB2b2lkIG9uRXJyb3IoU3RyaW5nIHV0dGVyYW5jZUlkKTsKKworICAgIC8qKgorICAgICAqIFRlbGxzIHRoZSBjbGllbnQgdGhhdCB0aGUgc3ludGhlc2lzIGhhcyBmaW5pc2hlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1dHRlcmFuY2VJZCBVbmlxdWUgaWQgaWRlbnRpZnlpbmcgc3ludGhlc2lzIHJlcXVlc3QuCisgICAgICovCisgICAgdm9pZCBvblN1Y2Nlc3MoU3RyaW5nIHV0dGVyYW5jZUlkKTsKKworICAgIC8qKgorICAgICAqIFRlbGxzIHRoZSBjbGllbnQgdGhhdCB0aGUgc3ludGhlc2lzIHdhcyBzdG9wcGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkIFVuaXF1ZSBpZCBpZGVudGlmeWluZyBzeW50aGVzaXMgcmVxdWVzdC4KKyAgICAgKi8KKyAgICB2b2lkIG9uU3RvcChTdHJpbmcgdXR0ZXJhbmNlSWQpOworCisgICAgLyoqCisgICAgICogVGVsbHMgdGhlIGNsaWVudCB0aGF0IHRoZSBzeW50aGVzaXMgZmFpbGVkLCBhbmQgZmFsbGJhY2sgc3ludGhlc2lzIHdpbGwgYmUgYXR0ZW1wdGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkIFVuaXF1ZSBpZCBpZGVudGlmeWluZyBzeW50aGVzaXMgcmVxdWVzdC4KKyAgICAgKi8KKyAgICB2b2lkIG9uRmFsbGJhY2soU3RyaW5nIHV0dGVyYW5jZUlkKTsKKworICAgIC8qKgorICAgICAqIFRlbGxzIHRoZSBjbGllbnQgdGhhdCB0aGUgc3ludGhlc2lzIGhhcyBmYWlsZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWQgVW5pcXVlIGlkIGlkZW50aWZ5aW5nIHN5bnRoZXNpcyByZXF1ZXN0LgorICAgICAqIEBwYXJhbSBlcnJvckNvZGUgT25lIG9mIHRoZSB2YWx1ZXMgZnJvbQorICAgICAqICAgICAgICB7QGxpbmsgYW5kcm9pZC5zcGVlY2gudHRzLnYyLlRleHRUb1NwZWVjaENsaWVudC5TdGF0dXN9LgorICAgICAqLworICAgIHZvaWQgb25FcnJvcihTdHJpbmcgdXR0ZXJhbmNlSWQsIGludCBlcnJvckNvZGUpOworCisgICAgLyoqCisgICAgICogSW5mb3JtIHRoZSBjbGllbnQgdGhhdCBzZXQgb2YgYXZhaWxhYmxlIHZvaWNlcyBjaGFuZ2VkLgorICAgICAqLworICAgIHZvaWQgb25Wb2ljZXNJbmZvQ2hhbmdlKGluIExpc3Q8Vm9pY2VJbmZvPiB2b2ljZXMpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9JVGV4dFRvU3BlZWNoU2VydmljZS5haWRsIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9JVGV4dFRvU3BlZWNoU2VydmljZS5haWRsCmluZGV4IGI3YmM3MGMuLjljZjQ5ZmYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvSVRleHRUb1NwZWVjaFNlcnZpY2UuYWlkbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL0lUZXh0VG9TcGVlY2hTZXJ2aWNlLmFpZGwKQEAgLTIwLDYgKzIwLDggQEAKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGFuZHJvaWQuc3BlZWNoLnR0cy5JVGV4dFRvU3BlZWNoQ2FsbGJhY2s7CitpbXBvcnQgYW5kcm9pZC5zcGVlY2gudHRzLlZvaWNlSW5mbzsKK2ltcG9ydCBhbmRyb2lkLnNwZWVjaC50dHMuU3ludGhlc2lzUmVxdWVzdFYyOwogCiAvKioKICAqIEludGVyZmFjZSBmb3IgVGV4dFRvU3BlZWNoIHRvIHRhbGsgdG8gVGV4dFRvU3BlZWNoU2VydmljZS4KQEAgLTcwLDkgKzcyLDEwIEBACiAgICAgICogICAgICAgIFRleHRUb1NwZWVjaCBvYmplY3QuCiAgICAgICogQHBhcmFtIGR1cmF0aW9uIE51bWJlciBvZiBtaWxsaXNlY29uZHMgb2Ygc2lsZW5jZSB0byBwbGF5LgogICAgICAqIEBwYXJhbSBxdWV1ZU1vZGUgRGV0ZXJtaW5lcyB3aGF0IHRvIGRvIHRvIHJlcXVlc3RzIGFscmVhZHkgaW4gdGhlIHF1ZXVlLgotICAgICAqIEBwYXJhbSBwYXJhbSBSZXF1ZXN0IHBhcmFtZXRlcnMuCisgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkIFVuaXF1ZSBpZCB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgcmVxdWVzdCBpbiBjYWxsYmFja3MuCiAgICAgICovCi0gICAgaW50IHBsYXlTaWxlbmNlKGluIElCaW5kZXIgY2FsbGluZ0luc3RhbmNlLCBpbiBsb25nIGR1cmF0aW9uLCBpbiBpbnQgcXVldWVNb2RlLCBpbiBCdW5kbGUgcGFyYW1zKTsKKyAgICBpbnQgcGxheVNpbGVuY2UoaW4gSUJpbmRlciBjYWxsaW5nSW5zdGFuY2UsIGluIGxvbmcgZHVyYXRpb24sIGluIGludCBxdWV1ZU1vZGUsCisgICAgICAgIGluIFN0cmluZyB1dHRlcmFuY2VJZCk7CiAKICAgICAvKioKICAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgc2VydmljZSBpcyBjdXJyZW50bHkgcGxheWluZyBzb21lIGF1ZGlvLgpAQCAtOTAsNyArOTMsNiBAQAogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgbGFuZ3VhZ2UsIGNvdW50cnkgYW5kIHZhcmlhbnQgY3VycmVudGx5IGJlaW5nIHVzZWQgYnkgdGhlIFRUUyBlbmdpbmUuCi0gICAgICoKICAgICAgKiBDYW4gYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KICAgICAgKgogICAgICAqIEByZXR1cm4gQSAzLWVsZW1lbnQgYXJyYXksIGNvbnRhaW5pbmcgbGFuZ3VhZ2UgKElTTyAzLWxldHRlciBjb2RlKSwKQEAgLTk5LDcgKzEwMSw3IEBACiAgICAgICogICAgICAgICBiZSBlbXB0eSB0b28uCiAgICAgICovCiAgICAgU3RyaW5nW10gZ2V0TGFuZ3VhZ2UoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYSBkZWZhdWx0IFRUUyBsYW5ndWFnZSwgY291bnRyeSBhbmQgdmFyaWFudCBhcyBzZXQgYnkgdGhlIHVzZXIuCiAgICAgICoKQEAgLTExMSw3ICsxMTMsNyBAQAogICAgICAqICAgICAgICAgYmUgZW1wdHkgdG9vLgogICAgICAqLwogICAgIFN0cmluZ1tdIGdldENsaWVudERlZmF1bHRMYW5ndWFnZSgpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGVuZ2luZSBzdXBwb3J0cyBhIGdpdmVuIGxhbmd1YWdlLgogICAgICAqCkBAIC0xMzcsNyArMTM5LDcgQEAKICAgICAgKiBAcGFyYW0gY291bnRyeSBJU08tMyBjb3VudHJ5IGNvZGUuIE1heSBiZSBlbXB0eSBvciBudWxsLgogICAgICAqIEBwYXJhbSB2YXJpYW50IExhbmd1YWdlIHZhcmlhbnQuIE1heSBiZSBlbXB0eSBvciBudWxsLgogICAgICAqIEByZXR1cm4gQW4gYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBzZXQgb2YgZmVhdHVyZXMgc3VwcG9ydGVkIGZvcgotICAgICAqICAgICAgICAgdGhlIHN1cHBsaWVkIGxvY2FsZS4gVGhlIGFycmF5IG9mIHN0cmluZ3MgbXVzdCBub3QgY29udGFpbiAKKyAgICAgKiAgICAgICAgIHRoZSBzdXBwbGllZCBsb2NhbGUuIFRoZSBhcnJheSBvZiBzdHJpbmdzIG11c3Qgbm90IGNvbnRhaW4KICAgICAgKiAgICAgICAgIGR1cGxpY2F0ZXMuCiAgICAgICovCiAgICAgU3RyaW5nW10gZ2V0RmVhdHVyZXNGb3JMYW5ndWFnZShpbiBTdHJpbmcgbGFuZywgaW4gU3RyaW5nIGNvdW50cnksIGluIFN0cmluZyB2YXJpYW50KTsKQEAgLTE2OSw0ICsxNzEsNDQgQEAKICAgICAgKi8KICAgICB2b2lkIHNldENhbGxiYWNrKGluIElCaW5kZXIgY2FsbGVyLCBJVGV4dFRvU3BlZWNoQ2FsbGJhY2sgY2IpOwogCisgICAgLyoqCisgICAgICogVGVsbHMgdGhlIGVuZ2luZSB0byBzeW50aGVzaXplIHNvbWUgc3BlZWNoIGFuZCBwbGF5IGl0IGJhY2suCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2FsbGluZ0luc3RhbmNlIGEgYmluZGVyIHJlcHJlc2VudGluZyB0aGUgaWRlbnRpdHkgb2YgdGhlIGNhbGxpbmcKKyAgICAgKiAgICAgICAgVGV4dFRvU3BlZWNoIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBzeW50aGVzaXplLgorICAgICAqIEBwYXJhbSBxdWV1ZU1vZGUgRGV0ZXJtaW5lcyB3aGF0IHRvIGRvIHRvIHJlcXVlc3RzIGFscmVhZHkgaW4gdGhlIHF1ZXVlLgorICAgICAqIEBwYXJhbSByZXF1ZXN0IFJlcXVlc3QgcGFyYW1ldGVycy4KKyAgICAgKi8KKyAgICBpbnQgc3BlYWtWMihpbiBJQmluZGVyIGNhbGxpbmdJbnN0YW5jZSwgaW4gU3ludGhlc2lzUmVxdWVzdFYyIHJlcXVlc3QpOworCisgICAgLyoqCisgICAgICogVGVsbHMgdGhlIGVuZ2luZSB0byBzeW50aGVzaXplIHNvbWUgc3BlZWNoIGFuZCB3cml0ZSBpdCB0byBhIGZpbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2FsbGluZ0luc3RhbmNlIGEgYmluZGVyIHJlcHJlc2VudGluZyB0aGUgaWRlbnRpdHkgb2YgdGhlIGNhbGxpbmcKKyAgICAgKiAgICAgICAgVGV4dFRvU3BlZWNoIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBzeW50aGVzaXplLgorICAgICAqIEBwYXJhbSBmaWxlRGVzY3JpcHRvciBUaGUgZmlsZSBkZXNjcmlwdG9yIHRvIHdyaXRlIHRoZSBzeW50aGVzaXplZCBhdWRpbyB0by4gSGFzIHRvIGJlCisgICAgICAgICAgICAgIHdyaXRhYmxlLgorICAgICAqIEBwYXJhbSByZXF1ZXN0IFJlcXVlc3QgcGFyYW1ldGVycy4KKyAgICAgKi8KKyAgICBpbnQgc3ludGhlc2l6ZVRvRmlsZURlc2NyaXB0b3JWMihpbiBJQmluZGVyIGNhbGxpbmdJbnN0YW5jZSwKKyAgICAgICAgaW4gUGFyY2VsRmlsZURlc2NyaXB0b3IgZmlsZURlc2NyaXB0b3IsIGluIFN5bnRoZXNpc1JlcXVlc3RWMiByZXF1ZXN0KTsKKworICAgIC8qKgorICAgICAqIFBsYXlzIGFuIGV4aXN0aW5nIGF1ZGlvIHJlc291cmNlLiBWMiB2ZXJzaW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2FsbGluZ0luc3RhbmNlIGEgYmluZGVyIHJlcHJlc2VudGluZyB0aGUgaWRlbnRpdHkgb2YgdGhlIGNhbGxpbmcKKyAgICAgKiAgICAgICAgVGV4dFRvU3BlZWNoIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gYXVkaW9VcmkgVVJJIGZvciB0aGUgYXVkaW8gcmVzb3VyY2UgKGEgZmlsZSBvciBhbmRyb2lkLnJlc291cmNlIFVSSSkKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWQgVW5pcXVlIGlkZW50aWZpZXIuCisgICAgICogQHBhcmFtIGF1ZGlvUGFyYW1ldGVycyBQYXJhbWV0ZXJzIGZvciBhdWRpbyBwbGF5YmFjayAoZnJvbSB7QGxpbmsgU3ludGhlc2lzUmVxdWVzdFYyfSkuCisgICAgICovCisgICAgaW50IHBsYXlBdWRpb1YyKGluIElCaW5kZXIgY2FsbGluZ0luc3RhbmNlLCBpbiBVcmkgYXVkaW9VcmksIGluIFN0cmluZyB1dHRlcmFuY2VJZCwKKyAgICAgICAgaW4gQnVuZGxlIGF1ZGlvUGFyYW1ldGVycyk7CisKKyAgICAvKioKKyAgICAgKiBSZXF1ZXN0IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB2b2ljZXMgZnJvbSB0aGUgc2VydmljZS4KKyAgICAgKi8KKyAgICBMaXN0PFZvaWNlSW5mbz4gZ2V0Vm9pY2VzSW5mbygpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9QbGF5YmFja1F1ZXVlSXRlbS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9QbGF5YmFja1F1ZXVlSXRlbS5qYXZhCmluZGV4IGQwOTU3ZmYuLmIyZTMyM2UgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvUGxheWJhY2tRdWV1ZUl0ZW0uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1BsYXliYWNrUXVldWVJdGVtLmphdmEKQEAgLTIyLDYgKzIyLDE2IEBACiAgICAgICAgIHJldHVybiBtRGlzcGF0Y2hlcjsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBydW4oKTsKLSAgICBhYnN0cmFjdCB2b2lkIHN0b3AoYm9vbGVhbiBpc0Vycm9yKTsKKworICAgIC8qKgorICAgICAqIFN0b3AgdGhlIHBsYXliYWNrLgorICAgICAqCisgICAgICogQHBhcmFtIGVycm9yQ29kZSBDYXVzZSBvZiB0aGUgc3RvcC4gQ2FuIGJlIGVpdGhlciBvbmUgb2YgdGhlIGVycm9yIGNvZGVzIGZyb20KKyAgICAgKiAgICAgICAgIHtAbGluayBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1c30gb3IKKyAgICAgKiAgICAgICAgIHtAbGluayBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cyNTVE9QUEVEfQorICAgICAqICAgICAgICAgaWYgc3RvcHBlZCBvbiBhIGNsaWVudCByZXF1ZXN0LgorICAgICAqLworICAgIGFic3RyYWN0IHZvaWQgc3RvcChpbnQgZXJyb3JDb2RlKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvUGxheWJhY2tTeW50aGVzaXNDYWxsYmFjay5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9QbGF5YmFja1N5bnRoZXNpc0NhbGxiYWNrLmphdmEKaW5kZXggYzk5ZjIwMS4uZTM0NWU4OSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9QbGF5YmFja1N5bnRoZXNpc0NhbGxiYWNrLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9QbGF5YmFja1N5bnRoZXNpc0NhbGxiYWNrLmphdmEKQEAgLTU1LDIwICs1NSwyMCBAQAogICAgIHByaXZhdGUgZmluYWwgQXVkaW9QbGF5YmFja0hhbmRsZXIgbUF1ZGlvVHJhY2tIYW5kbGVyOwogICAgIC8vIEEgcmVxdWVzdCAidG9rZW4iLCB3aGljaCB3aWxsIGJlIG5vbiBudWxsIGFmdGVyIHN0YXJ0KCkgaGFzIGJlZW4gY2FsbGVkLgogICAgIHByaXZhdGUgU3ludGhlc2lzUGxheWJhY2tRdWV1ZUl0ZW0gbUl0ZW0gPSBudWxsOwotICAgIC8vIFdoZXRoZXIgdGhpcyByZXF1ZXN0IGhhcyBiZWVuIHN0b3BwZWQuIFRoaXMgaXMgdXNlZnVsIGZvciBrZWVwaW5nCi0gICAgLy8gdHJhY2sgd2hldGhlciBzdG9wKCkgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSBzdGFydCgpLiBJbiBhbGwgb3RoZXIgY2FzZXMsCi0gICAgLy8gYSBub24tbnVsbCB2YWx1ZSBvZiBtSXRlbSB3aWxsIHByb3ZpZGUgdGhlIHNhbWUgaW5mb3JtYXRpb24uCi0gICAgcHJpdmF0ZSBib29sZWFuIG1TdG9wcGVkID0gZmFsc2U7CiAKICAgICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4gbURvbmUgPSBmYWxzZTsKIAorICAgIC8qKiBTdGF0dXMgY29kZSBvZiBzeW50aGVzaXMgKi8KKyAgICBwcm90ZWN0ZWQgaW50IG1TdGF0dXNDb2RlOworCiAgICAgcHJpdmF0ZSBmaW5hbCBVdHRlcmFuY2VQcm9ncmVzc0Rpc3BhdGNoZXIgbURpc3BhdGNoZXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbUNhbGxlcklkZW50aXR5OwotICAgIHByaXZhdGUgZmluYWwgRXZlbnRMb2dnZXIgbUxvZ2dlcjsKKyAgICBwcml2YXRlIGZpbmFsIEFic3RyYWN0RXZlbnRMb2dnZXIgbUxvZ2dlcjsKIAogICAgIFBsYXliYWNrU3ludGhlc2lzQ2FsbGJhY2soaW50IHN0cmVhbVR5cGUsIGZsb2F0IHZvbHVtZSwgZmxvYXQgcGFuLAogICAgICAgICAgICAgQXVkaW9QbGF5YmFja0hhbmRsZXIgYXVkaW9UcmFja0hhbmRsZXIsIFV0dGVyYW5jZVByb2dyZXNzRGlzcGF0Y2hlciBkaXNwYXRjaGVyLAotICAgICAgICAgICAgT2JqZWN0IGNhbGxlcklkZW50aXR5LCBFdmVudExvZ2dlciBsb2dnZXIpIHsKKyAgICAgICAgICAgIE9iamVjdCBjYWxsZXJJZGVudGl0eSwgQWJzdHJhY3RFdmVudExvZ2dlciBsb2dnZXIsIGJvb2xlYW4gY2xpZW50SXNVc2luZ1YyKSB7CisgICAgICAgIHN1cGVyKGNsaWVudElzVXNpbmdWMik7CiAgICAgICAgIG1TdHJlYW1UeXBlID0gc3RyZWFtVHlwZTsKICAgICAgICAgbVZvbHVtZSA9IHZvbHVtZTsKICAgICAgICAgbVBhbiA9IHBhbjsKQEAgLTc2LDI4ICs3NiwyNSBAQAogICAgICAgICBtRGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7CiAgICAgICAgIG1DYWxsZXJJZGVudGl0eSA9IGNhbGxlcklkZW50aXR5OwogICAgICAgICBtTG9nZ2VyID0gbG9nZ2VyOworICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUzsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICB2b2lkIHN0b3AoKSB7Ci0gICAgICAgIHN0b3BJbXBsKGZhbHNlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0b3BJbXBsKGJvb2xlYW4gd2FzRXJyb3IpIHsKICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAic3RvcCgpIik7CiAKLSAgICAgICAgLy8gTm90ZSB0aGF0IG1Mb2dnZXIubUVycm9yIG1pZ2h0IGJlIHRydWUgdG9vIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgIG1Mb2dnZXIub25TdG9wcGVkKCk7Ci0KICAgICAgICAgU3ludGhlc2lzUGxheWJhY2tRdWV1ZUl0ZW0gaXRlbTsKICAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7Ci0gICAgICAgICAgICBpZiAobVN0b3BwZWQpIHsKKyAgICAgICAgICAgIGlmIChtRG9uZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtU3RhdHVzQ29kZSA9PSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNUT1BQRUQpIHsKICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJzdG9wKCkgY2FsbGVkIHR3aWNlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpdGVtID0gbUl0ZW07Ci0gICAgICAgICAgICBtU3RvcHBlZCA9IHRydWU7CisgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpdGVtICE9IG51bGwpIHsKQEAgLTEwNSwxOSArMTAyLDE1IEBACiAgICAgICAgICAgICAvLyBwb2ludCBpdCB3aWxsIHdyaXRlIGFuIGFkZGl0aW9uYWwgYnVmZmVyIHRvIHRoZSBpdGVtIC0gYnV0IHdlCiAgICAgICAgICAgICAvLyB3b24ndCB3b3JyeSBhYm91dCB0aGF0IGJlY2F1c2UgdGhlIGF1ZGlvIHBsYXliYWNrIHF1ZXVlIHdpbGwgYmUgY2xlYXJlZAogICAgICAgICAgICAgLy8gc29vbiBhZnRlciAoc2VlIFN5bnRoSGFuZGxlciNzdG9wKFN0cmluZykuCi0gICAgICAgICAgICBpdGVtLnN0b3Aod2FzRXJyb3IpOworICAgICAgICAgICAgaXRlbS5zdG9wKFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiBzdG9wKCkgb3IgZXJyb3IoKSB3ZXJlIGNhbGxlZCBiZWZvcmUgc3RhcnQoKSB3YXMuCiAKICAgICAgICAgICAgIC8vIEluIGFsbCBvdGhlciBjYXNlcywgbUF1ZGlvVHJhY2tIYW5kbGVyLnN0b3AoKSB3aWxsCiAgICAgICAgICAgICAvLyByZXN1bHQgaW4gb25TeW50aGVzaXNEb25lIGJlaW5nIGNhbGxlZCwgYW5kIHdlIHdpbGwKICAgICAgICAgICAgIC8vIHdyaXRlIGRhdGEgdGhlcmUuCi0gICAgICAgICAgICBtTG9nZ2VyLm9uV3JpdGVEYXRhKCk7Ci0KLSAgICAgICAgICAgIGlmICh3YXNFcnJvcikgewotICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZGlzcGF0Y2ggdGhlIGVycm9yIG91cnNlbHZlcy4KLSAgICAgICAgICAgICAgICBtRGlzcGF0Y2hlci5kaXNwYXRjaE9uRXJyb3IoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1Mb2dnZXIub25Db21wbGV0ZWQoVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKTsKKyAgICAgICAgICAgIG1EaXNwYXRjaGVyLmRpc3BhdGNoT25TdG9wKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyOSwyNiArMTIyLDQyIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgYm9vbGVhbiBpc0RvbmUoKSB7Ci0gICAgICAgIHJldHVybiBtRG9uZTsKKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNTdGFydGVkKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0ZUxvY2spIHsKKyAgICAgICAgICAgIHJldHVybiBtSXRlbSAhPSBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaGFzRmluaXNoZWQoKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG1Eb25lOworICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBzdGFydChpbnQgc2FtcGxlUmF0ZUluSHosIGludCBhdWRpb0Zvcm1hdCwgaW50IGNoYW5uZWxDb3VudCkgewotICAgICAgICBpZiAoREJHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJzdGFydCgiICsgc2FtcGxlUmF0ZUluSHogKyAiLCIgKyBhdWRpb0Zvcm1hdAotICAgICAgICAgICAgICAgICAgICArICIsIiArIGNoYW5uZWxDb3VudCArICIpIik7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAic3RhcnQoIiArIHNhbXBsZVJhdGVJbkh6ICsgIiwiICsgYXVkaW9Gb3JtYXQgKyAiLCIgKyBjaGFubmVsQ291bnQKKyAgICAgICAgICAgICAgICArICIpIik7CiAKICAgICAgICAgaW50IGNoYW5uZWxDb25maWcgPSBCbG9ja2luZ0F1ZGlvVHJhY2suZ2V0Q2hhbm5lbENvbmZpZyhjaGFubmVsQ291bnQpOwotICAgICAgICBpZiAoY2hhbm5lbENvbmZpZyA9PSAwKSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJVbnN1cHBvcnRlZCBudW1iZXIgb2YgY2hhbm5lbHMgOiIgKyBjaGFubmVsQ291bnQpOwotICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKLSAgICAgICAgfQogCiAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgewotICAgICAgICAgICAgaWYgKG1TdG9wcGVkKSB7CisgICAgICAgICAgICBpZiAoY2hhbm5lbENvbmZpZyA9PSAwKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiVW5zdXBwb3J0ZWQgbnVtYmVyIG9mIGNoYW5uZWxzIDoiICsgY2hhbm5lbENvdW50KTsKKyAgICAgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfT1VUUFVUOworICAgICAgICAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobVN0YXR1c0NvZGUgPT0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKSB7CiAgICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAic3RvcCgpIGNhbGxlZCBiZWZvcmUgc3RhcnQoKSwgcmV0dXJuaW5nLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvckNvZGVPblN0b3AoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtU3RhdHVzQ29kZSAhPSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJFcnJvciB3YXMgcmFpc2VkIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtSXRlbSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiU3RhcnQgY2FsbGVkIHR3aWNlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN5bnRoZXNpc1BsYXliYWNrUXVldWVJdGVtIGl0ZW0gPSBuZXcgU3ludGhlc2lzUGxheWJhY2tRdWV1ZUl0ZW0oCkBAIC0xNjEsMTMgKzE3MCwxMSBAQAogICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLlNVQ0NFU1M7CiAgICAgfQogCi0KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGF1ZGlvQXZhaWxhYmxlKGJ5dGVbXSBidWZmZXIsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKLSAgICAgICAgaWYgKERCRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiYXVkaW9BdmFpbGFibGUoYnl0ZVsiICsgYnVmZmVyLmxlbmd0aCArICJdLCIKLSAgICAgICAgICAgICAgICAgICAgKyBvZmZzZXQgKyAiLCIgKyBsZW5ndGggKyAiKSIpOwotICAgICAgICB9CisgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgImF1ZGlvQXZhaWxhYmxlKGJ5dGVbIiArIGJ1ZmZlci5sZW5ndGggKyAiXSwiICsgb2Zmc2V0ICsgIiwiICsgbGVuZ3RoCisgICAgICAgICAgICAgICAgKyAiKSIpOworCiAgICAgICAgIGlmIChsZW5ndGggPiBnZXRNYXhCdWZmZXJTaXplKCkgfHwgbGVuZ3RoIDw9IDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImJ1ZmZlciBpcyB0b28gbGFyZ2Ugb3Igb2YgemVybyBsZW5ndGggKCIgKwogICAgICAgICAgICAgICAgICAgICArIGxlbmd0aCArICIgYnl0ZXMpIik7CkBAIC0xNzUsOSArMTgyLDE3IEBACiAKICAgICAgICAgU3ludGhlc2lzUGxheWJhY2tRdWV1ZUl0ZW0gaXRlbSA9IG51bGw7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRlTG9jaykgewotICAgICAgICAgICAgaWYgKG1JdGVtID09IG51bGwgfHwgbVN0b3BwZWQpIHsKKyAgICAgICAgICAgIGlmIChtSXRlbSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbVN0YXR1c0NvZGUgPSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLkVSUk9SX09VVFBVVDsKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1TdGF0dXNDb2RlICE9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkVycm9yIHdhcyByYWlzZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1TdGF0dXNDb2RlID09IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1RPUFBFRCkgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvckNvZGVPblN0b3AoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGl0ZW0gPSBtSXRlbTsKICAgICAgICAgfQogCkBAIC0xOTAsMTEgKzIwNSwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaXRlbS5wdXQoYnVmZmVyQ29weSk7CiAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7Ci0gICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7CisgICAgICAgICAgICAgICAgbVN0YXR1c0NvZGUgPSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLkVSUk9SX09VVFBVVDsKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgbUxvZ2dlci5vbkVuZ2luZURhdGFSZWNlaXZlZCgpOwotCiAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guU1VDQ0VTUzsKICAgICB9CiAKQEAgLTIwMiwzNSArMjE5LDc0IEBACiAgICAgcHVibGljIGludCBkb25lKCkgewogICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJkb25lKCkiKTsKIAorICAgICAgICBpbnQgc3RhdHVzQ29kZSA9IDA7CiAgICAgICAgIFN5bnRoZXNpc1BsYXliYWNrUXVldWVJdGVtIGl0ZW0gPSBudWxsOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0ZUxvY2spIHsKICAgICAgICAgICAgIGlmIChtRG9uZSkgewogICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkR1cGxpY2F0ZSBjYWxsIHRvIGRvbmUoKSIpOworICAgICAgICAgICAgICAgIC8vIE5vdCBhbiBlcnJvciB0aGF0IHdvdWxkIHByZXZlbnQgc3ludGhlc2lzLiBIZW5jZSBubworICAgICAgICAgICAgICAgIC8vIHNldFN0YXR1c0NvZGUKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQotCisgICAgICAgICAgICBpZiAobVN0YXR1c0NvZGUgPT0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKSB7CisgICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiUmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvckNvZGVPblN0b3AoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1Eb25lID0gdHJ1ZTsKIAogICAgICAgICAgICAgaWYgKG1JdGVtID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyAuZG9uZSgpIHdhcyBjYWxsZWQgYmVmb3JlIC5zdGFydC4gVHJlYXQgaXQgYXMgc3VjY2Vzc2Z1bCBzeW50aGVzaXMKKyAgICAgICAgICAgICAgICAvLyBmb3IgYSBjbGllbnQsIGRlc3BpdGUgc2VydmljZSBiYWQgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiZG9uZSgpIHdhcyBjYWxsZWQgYmVmb3JlIHN0YXJ0KCkgY2FsbCIpOworICAgICAgICAgICAgICAgIGlmIChtU3RhdHVzQ29kZSA9PSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgbURpc3BhdGNoZXIuZGlzcGF0Y2hPblN1Y2Nlc3MoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtRGlzcGF0Y2hlci5kaXNwYXRjaE9uRXJyb3IobVN0YXR1c0NvZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtTG9nZ2VyLm9uRW5naW5lQ29tcGxldGUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpdGVtID0gbUl0ZW07CisgICAgICAgICAgICBzdGF0dXNDb2RlID0gbVN0YXR1c0NvZGU7CiAgICAgICAgIH0KIAotICAgICAgICBpdGVtLmRvbmUoKTsKKyAgICAgICAgLy8gU2lnbmFsIGRvbmUgb3IgZXJyb3IgdG8gaXRlbQorICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PSBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLlNVQ0NFU1MpIHsKKyAgICAgICAgICAgIGl0ZW0uZG9uZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXRlbS5zdG9wKHN0YXR1c0NvZGUpOworICAgICAgICB9CiAgICAgICAgIG1Mb2dnZXIub25FbmdpbmVDb21wbGV0ZSgpOwotCiAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guU1VDQ0VTUzsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBlcnJvcigpIHsKLSAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiZXJyb3IoKSBbd2lsbCBjYWxsIHN0b3BdIik7Ci0gICAgICAgIC8vIEN1cnJlbnRseSwgdGhpcyBjYWxsIHdpbGwgbm90IGJlIGxvZ2dlZCBpZiBlcnJvciggKSBpcyBjYWxsZWQKLSAgICAgICAgLy8gYmVmb3JlIHN0YXJ0LgotICAgICAgICBtTG9nZ2VyLm9uRXJyb3IoKTsKLSAgICAgICAgc3RvcEltcGwodHJ1ZSk7CisgICAgICAgIGVycm9yKFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfU1lOVEhFU0lTKTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBlcnJvcihpbnQgZXJyb3JDb2RlKSB7CisgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgImVycm9yKCkgW3dpbGwgY2FsbCBzdG9wXSIpOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0ZUxvY2spIHsKKyAgICAgICAgICAgIGlmIChtRG9uZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1TdGF0dXNDb2RlID0gZXJyb3JDb2RlOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBmYWxsYmFjaygpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtU3RhdGVMb2NrKSB7CisgICAgICAgICAgICBpZiAoaGFzU3RhcnRlZCgpIHx8IGhhc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRGlzcGF0Y2hlci5kaXNwYXRjaE9uRmFsbGJhY2soKTsKKyAgICAgICAgICAgIG1TdGF0dXNDb2RlID0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVUNDRVNTOworICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvUmVxdWVzdENvbmZpZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9SZXF1ZXN0Q29uZmlnLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1Mzg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvUmVxdWVzdENvbmZpZy5qYXZhCkBAIC0wLDAgKzEsMjEzIEBACitwYWNrYWdlIGFuZHJvaWQuc3BlZWNoLnR0czsKKworaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworCisvKioKKyAqIFN5bnRoZXNpcyByZXF1ZXN0IGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBjbGFzcyBpcyBpbW11dGFibGUsIGFuZCBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB1c2luZworICoge0BsaW5rIFJlcXVlc3RDb25maWcuQnVpbGRlcn0uCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBSZXF1ZXN0Q29uZmlnIHsKKworICAgIC8qKiBCdWlsZGVyIGZvciBjb25zdHJ1Y3RpbmcgUmVxdWVzdENvbmZpZyBvYmplY3RzLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQnVpbGRlciB7CisgICAgICAgIHByaXZhdGUgVm9pY2VJbmZvIG1DdXJyZW50Vm9pY2VJbmZvOworICAgICAgICBwcml2YXRlIEJ1bmRsZSBtVm9pY2VQYXJhbXM7CisgICAgICAgIHByaXZhdGUgQnVuZGxlIG1BdWRpb1BhcmFtczsKKworICAgICAgICBCdWlsZGVyKFZvaWNlSW5mbyBjdXJyZW50Vm9pY2VJbmZvLCBCdW5kbGUgdm9pY2VQYXJhbXMsIEJ1bmRsZSBhdWRpb1BhcmFtcykgeworICAgICAgICAgICAgbUN1cnJlbnRWb2ljZUluZm8gPSBjdXJyZW50Vm9pY2VJbmZvOworICAgICAgICAgICAgbVZvaWNlUGFyYW1zID0gdm9pY2VQYXJhbXM7CisgICAgICAgICAgICBtQXVkaW9QYXJhbXMgPSBhdWRpb1BhcmFtczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGUgbmV3IFJlcXVlc3RDb25maWcgYnVpbGRlci4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgQnVpbGRlciBuZXdCdWlsZGVyKCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKG51bGwsIG5ldyBCdW5kbGUoKSwgbmV3IEJ1bmRsZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGUgbmV3IFJlcXVlc3RDb25maWcgYnVpbGRlci4KKyAgICAgICAgICogQHBhcmFtIHByb3RvdHlwZQorICAgICAgICAgKiAgICAgICAgICAgIFByb3RvdHlwZSBvZiBuZXcgUmVxdWVzdENvbmZpZy4gQ29waWVzIGFsbCBmaWVsZHMgb2YgdGhlCisgICAgICAgICAqICAgICAgICAgICAgcHJvdG90eXBlIHRvIHRoZSBjb25zdHJ1Y3RlZCBvYmplY3QuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgbmV3QnVpbGRlcihSZXF1ZXN0Q29uZmlnIHByb3RvdHlwZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKHByb3RvdHlwZS5tQ3VycmVudFZvaWNlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgKEJ1bmRsZSlwcm90b3R5cGUubVZvaWNlUGFyYW1zLmNsb25lKCksCisgICAgICAgICAgICAgICAgICAgIChCdW5kbGUpcHJvdG90eXBlLm1BdWRpb1BhcmFtcy5jbG9uZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKiBTZXQgdm9pY2UgZm9yIHJlcXVlc3QuIFdpbGwgcmVzZXQgdm9pY2UgcGFyYW1ldGVycyB0byB0aGUgZGVmYXVsdHMuICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFZvaWNlKFZvaWNlSW5mbyB2b2ljZSkgeworICAgICAgICAgICAgbUN1cnJlbnRWb2ljZUluZm8gPSB2b2ljZTsKKyAgICAgICAgICAgIG1Wb2ljZVBhcmFtcyA9IChCdW5kbGUpdm9pY2UuZ2V0UGFyYW1zV2l0aERlZmF1bHRzKCkuY2xvbmUoKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldCByZXF1ZXN0IHZvaWNlIHBhcmFtZXRlci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHBhcmFtTmFtZQorICAgICAgICAgKiAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuIEl0IGhhcyB0byBiZSBvbmUgb2YgdGhlIGtleXMKKyAgICAgICAgICogICAgICAgICAgICBmcm9tIHtAbGluayBWb2ljZUluZm8jZ2V0UGFyYW1zV2l0aERlZmF1bHRzKCl9CisgICAgICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAgICAgKiAgICAgICAgICAgIFZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuIEl0cyB0eXBlIGNhbiBiZSBvbmUgb2Y6IEludGVnZXIsIEZsb2F0LAorICAgICAgICAgKiAgICAgICAgICAgIEJvb2xlYW4sIFN0cmluZywgVm9pY2VJbmZvICh3aWxsIGJlIHNldCBhcyBhIFN0cmluZywgcmVzdWx0IG9mIGEgY2FsbCB0bworICAgICAgICAgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgVm9pY2VJbmZvI2dldE5hbWUoKX0pIG9yIGJ5dGVbXS4gSXQgaGFzIHRvIGJlIG9mIHRoZSBzYW1lIHR5cGUKKyAgICAgICAgICogICAgICAgICAgICBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBmcm9tIHtAbGluayBWb2ljZUluZm8jZ2V0UGFyYW1zV2l0aERlZmF1bHRzKCl9CisgICAgICAgICAqICAgICAgICAgICAgZm9yIHRoYXQgcGFyYW1ldGVyLgorICAgICAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgorICAgICAgICAgKiAgICAgICAgICAgIElmIHBhcmFtTmFtZSBpcyBub3QgYSB2YWxpZCBwYXJhbWV0ZXIgbmFtZSBvciBpdHMgdmFsdWUgaXMgb2YgYSB3cm9uZworICAgICAgICAgKiAgICAgICAgICAgIHR5cGUuCisgICAgICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCisgICAgICAgICAqICAgICAgICAgICAgSWYgbm8gdm9pY2UgaXMgc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0Vm9pY2VQYXJhbShTdHJpbmcgcGFyYW1OYW1lLCBPYmplY3QgdmFsdWUpeworICAgICAgICAgICAgaWYgKG1DdXJyZW50Vm9pY2VJbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IHNldCB2b2ljZSBwYXJhbWV0ZXIsIG5vIHZvaWNlIGlzIHNldCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0IGRlZmF1bHRWYWx1ZSA9IG1DdXJyZW50Vm9pY2VJbmZvLmdldFBhcmFtc1dpdGhEZWZhdWx0cygpLmdldChwYXJhbU5hbWUpOworICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJQYXJhbWV0ZXIgXCIiICsgcGFyYW1OYW1lICsgIlwiIGlzIG5vdCBhdmFpbGFibGUgaW4gc2V0IHZvaWNlIHdpdGggIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lOiAiICsgbUN1cnJlbnRWb2ljZUluZm8uZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgaXQncyBWb2ljZUluZm8sIGdldCBpdHMgbmFtZQorICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVm9pY2VJbmZvKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSAoKFZvaWNlSW5mbyl2YWx1ZSkuZ2V0TmFtZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayB0eXBlIGluZm9ybWF0aW9uCisgICAgICAgICAgICBpZiAoIWRlZmF1bHRWYWx1ZS5nZXRDbGFzcygpLmVxdWFscyh2YWx1ZS5nZXRDbGFzcygpKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAiUGFyYW1ldGVyIFwiIiArIHBhcmFtTmFtZSArIlwiIGlzIG9mIGRpZmZlcmVudCB0eXBlLiBWYWx1ZSBwYXNzZWQgaGFzICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSAiICsgdmFsdWUuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIGJ1dCBzaG91bGQgaGF2ZSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUgIiArIGRlZmF1bHRWYWx1ZS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldFBhcmFtKG1Wb2ljZVBhcmFtcywgcGFyYW1OYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgcmVxdWVzdCBhdWRpbyBwYXJhbWV0ZXIuCisgICAgICAgICAqCisgICAgICAgICAqIERvZXNuJ3QgcmVxdWlyZXMgYSBzZXQgdm9pY2UuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBwYXJhbU5hbWUKKyAgICAgICAgICogICAgICAgICAgICBOYW1lIG9mIHBhcmFtZXRlci4KKyAgICAgICAgICogQHBhcmFtIHZhbHVlCisgICAgICAgICAqICAgICAgICAgICAgVmFsdWUgb2YgcGFyYW1ldGVyLiBJdHMgdHlwZSBjYW4gYmUgb25lIG9mOiBJbnRlZ2VyLCBGbG9hdCwgQm9vbGVhbiwgU3RyaW5nCisgICAgICAgICAqICAgICAgICAgICAgb3IgYnl0ZVtdLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0QXVkaW9QYXJhbShTdHJpbmcgcGFyYW1OYW1lLCBPYmplY3QgdmFsdWUpIHsKKyAgICAgICAgICAgIHNldFBhcmFtKG1BdWRpb1BhcmFtcywgcGFyYW1OYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zI0FVRElPX1BBUkFNX1NUUkVBTX0gYXVkaW8gcGFyYW1ldGVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gc3RyZWFtSWQgT25lIG9mIHRoZSBTVFJFQU1fIGNvbnN0YW50cyBkZWZpbmVkIGluIHtAbGluayBBdWRpb01hbmFnZXJ9LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgc2V0QXVkaW9QYXJhbVN0cmVhbShpbnQgc3RyZWFtSWQpIHsKKyAgICAgICAgICAgIHNldEF1ZGlvUGFyYW0oVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcy5BVURJT19QQVJBTV9TVFJFQU0sIHN0cmVhbUlkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zI0FVRElPX1BBUkFNX1ZPTFVNRX0gYXVkaW8gcGFyYW1ldGVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gdm9sdW1lIEZsb2F0IGluIHJhbmdlIG9mIDAuMCB0byAxLjAuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBzZXRBdWRpb1BhcmFtVm9sdW1lKGZsb2F0IHZvbHVtZSkgeworICAgICAgICAgICAgc2V0QXVkaW9QYXJhbShUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLkFVRElPX1BBUkFNX1ZPTFVNRSwgdm9sdW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zI0FVRElPX1BBUkFNX1BBTn0gYXVkaW8gcGFyYW1ldGVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gcGFuIEZsb2F0IGluIHJhbmdlIG9mIC0xLjAgdG8gKzEuMC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEF1ZGlvUGFyYW1QYW4oZmxvYXQgcGFuKSB7CisgICAgICAgICAgICBzZXRBdWRpb1BhcmFtKFRleHRUb1NwZWVjaENsaWVudC5QYXJhbXMuQVVESU9fUEFSQU1fUEFOLCBwYW4pOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHNldFBhcmFtKEJ1bmRsZSBidW5kbGUsIFN0cmluZyBmZWF0dXJlTmFtZSwgT2JqZWN0IHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICBidW5kbGUucHV0U3RyaW5nKGZlYXR1cmVOYW1lLCAoU3RyaW5nKXZhbHVlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZih2YWx1ZSBpbnN0YW5jZW9mIGJ5dGVbXSkgeworICAgICAgICAgICAgICAgIGJ1bmRsZS5wdXRCeXRlQXJyYXkoZmVhdHVyZU5hbWUsIChieXRlW10pdmFsdWUpOworICAgICAgICAgICAgfSBlbHNlIGlmKHZhbHVlIGluc3RhbmNlb2YgSW50ZWdlcikgeworICAgICAgICAgICAgICAgIGJ1bmRsZS5wdXRJbnQoZmVhdHVyZU5hbWUsIChJbnRlZ2VyKXZhbHVlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZih2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0KSB7CisgICAgICAgICAgICAgICAgYnVuZGxlLnB1dEZsb2F0KGZlYXR1cmVOYW1lLCAoRmxvYXQpdmFsdWUpOworICAgICAgICAgICAgfSBlbHNlIGlmKHZhbHVlIGluc3RhbmNlb2YgRG91YmxlKSB7CisgICAgICAgICAgICAgICAgYnVuZGxlLnB1dEZsb2F0KGZlYXR1cmVOYW1lLCAoRmxvYXQpdmFsdWUpOworICAgICAgICAgICAgfSBlbHNlIGlmKHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbikgeworICAgICAgICAgICAgICAgIGJ1bmRsZS5wdXRCb29sZWFuKGZlYXR1cmVOYW1lLCAoQm9vbGVhbil2YWx1ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgdHlwZSBvZiBvYmplY3QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBCdWlsZCBuZXcgUmVxdWVzdENvbmZpZyBpbnN0YW5jZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBSZXF1ZXN0Q29uZmlnIGJ1aWxkKCkgeworICAgICAgICAgICAgUmVxdWVzdENvbmZpZyBjb25maWcgPQorICAgICAgICAgICAgICAgICAgICBuZXcgUmVxdWVzdENvbmZpZyhtQ3VycmVudFZvaWNlSW5mbywgbVZvaWNlUGFyYW1zLCBtQXVkaW9QYXJhbXMpOworICAgICAgICAgICAgcmV0dXJuIGNvbmZpZzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgUmVxdWVzdENvbmZpZyhWb2ljZUluZm8gdm9pY2VJbmZvLCBCdW5kbGUgdm9pY2VQYXJhbXMsIEJ1bmRsZSBhdWRpb1BhcmFtcykgeworICAgICAgICBtQ3VycmVudFZvaWNlSW5mbyA9IHZvaWNlSW5mbzsKKyAgICAgICAgbVZvaWNlUGFyYW1zID0gdm9pY2VQYXJhbXM7CisgICAgICAgIG1BdWRpb1BhcmFtcyA9IGF1ZGlvUGFyYW1zOworICAgIH0KKworICAgIC8qKgorICAgICAqIEN1cnJlbnRseSBzZXQgdm9pY2UuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBWb2ljZUluZm8gbUN1cnJlbnRWb2ljZUluZm87CisKKyAgICAvKioKKyAgICAgKiBWb2ljZSBwYXJhbWV0ZXJzIGJ1bmRsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtVm9pY2VQYXJhbXM7CisKKyAgICAvKioKKyAgICAgKiBBdWRpbyBwYXJhbWV0ZXJzIGJ1bmRsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtQXVkaW9QYXJhbXM7CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIEN1cnJlbnRseSBzZXQgcmVxdWVzdCB2b2ljZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgVm9pY2VJbmZvIGdldFZvaWNlKCkgeworICAgICAgICByZXR1cm4gbUN1cnJlbnRWb2ljZUluZm87CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBSZXF1ZXN0IGF1ZGlvIHBhcmFtZXRlcnMuCisgICAgICovCisgICAgcHVibGljIEJ1bmRsZSBnZXRBdWRpb1BhcmFtcygpIHsKKyAgICAgICAgcmV0dXJuIG1BdWRpb1BhcmFtczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFJlcXVlc3Qgdm9pY2UgcGFyYW1ldGVycy4KKyAgICAgKi8KKyAgICBwdWJsaWMgQnVuZGxlIGdldFZvaWNlUGFyYW1zKCkgeworICAgICAgICByZXR1cm4gbVZvaWNlUGFyYW1zOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9SZXF1ZXN0Q29uZmlnSGVscGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1JlcXVlc3RDb25maWdIZWxwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjVjOTg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9SZXF1ZXN0Q29uZmlnSGVscGVyLmphdmEKQEAgLTAsMCArMSwxNzAgQEAKK3BhY2thZ2UgYW5kcm9pZC5zcGVlY2gudHRzOworCitpbXBvcnQgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudC5FbmdpbmVTdGF0dXM7CisKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCisvKioKKyAqIFNldCBvZiBjb21tb24gaGV1cmlzdGljcyBmb3Igc2VsZWN0aW5nIHtAbGluayBWb2ljZUluZm99IGZyb20KKyAqIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQjZ2V0RW5naW5lU3RhdHVzKCl9IG91dHB1dC4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFJlcXVlc3RDb25maWdIZWxwZXIgeworICAgIHByaXZhdGUgUmVxdWVzdENvbmZpZ0hlbHBlcigpIHt9CisKKyAgICAvKioKKyAgICAgKiBJbnRlcmZhY2UgZm9yIHNjb3JpbmcgVm9pY2VJbmZvIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBWb2ljZVNjb3JlciB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTY29yZSBWb2ljZUluZm8uIElmIHRoZSBzY29yZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybywgdGhhdCB2b2ljZSBpcyBkaXNjYXJkZWQuCisgICAgICAgICAqIElmIHR3byB2b2ljZXMgaGF2ZSBzYW1lIGRlc2lyZWQgcHJpbWFyeSBjaGFyYWN0ZXJpc3RpY3MgKGhpZ2hlc3QgcXVhbGl0eSwgbG93ZXN0CisgICAgICAgICAqIGxhdGVuY3kgb3Igb3RoZXJzKSwgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXIgc2NvcmUgaXMgc2VsZWN0ZWQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IHNjb3JlVm9pY2UoVm9pY2VJbmZvIHZvaWNlSW5mbyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2NvcmUgcG9zaXRpdmVseSB2b2ljZXMgdGhhdCBleGFjdGx5IG1hdGNoIHRoZSBsb2NhbGUgc3VwcGxpZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRXhhY3RMb2NhbGVNYXRjaGVyIGltcGxlbWVudHMgVm9pY2VTY29yZXIgeworICAgICAgICBwcml2YXRlIGZpbmFsIExvY2FsZSBtTG9jYWxlOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBTY29yZSBwb3NpdGl2ZWx5IHZvaWNlcyB0aGF0IGV4YWN0bHkgbWF0Y2ggdGhlIGdpdmVuIGxvY2FsZQorICAgICAgICAgKiBAcGFyYW0gbG9jYWxlIFJlZmVyZW5jZSBsb2NhbGUuIElmIG51bGwsIHRoZSBkZWZhdWx0IGxvY2FsZSB3aWxsIGJlIHVzZWQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgRXhhY3RMb2NhbGVNYXRjaGVyKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgICAgIGlmIChsb2NhbGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1Mb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtTG9jYWxlID0gbG9jYWxlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IHNjb3JlVm9pY2UoVm9pY2VJbmZvIHZvaWNlSW5mbykgeworICAgICAgICAgICAgcmV0dXJuIG1Mb2NhbGUuZXF1YWxzKHZvaWNlSW5mby5nZXRMb2NhbGUoKSkgPyAxIDogMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNjb3JlIHBvc2l0aXZlbHkgdm9pY2VzIHRoYXQgbWF0Y2ggZXhhY3RseSB0aGUgZ2l2ZW4gbG9jYWxlIChzY29yZSAzKQorICAgICAqIG9yIHRoYXQgc2hhcmUgc2FtZSBsYW5ndWFnZSBhbmQgY291bnRyeSAoc2NvcmUgMiksIG9yIHRoYXQgc2hhcmUganVzdCBhIGxhbmd1YWdlIChzY29yZSAxKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIExhbmd1YWdlTWF0Y2hlciBpbXBsZW1lbnRzIFZvaWNlU2NvcmVyIHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBMb2NhbGUgbUxvY2FsZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogU2NvcmUgcG9zaXRpdmVseSB2b2ljZXMgd2l0aCBzaW1pbGFyIGxvY2FsZS4KKyAgICAgICAgICogQHBhcmFtIGxvY2FsZSBSZWZlcmVuY2UgbG9jYWxlLiBJZiBudWxsLCBkZWZhdWx0IHdpbGwgYmUgdXNlZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBMYW5ndWFnZU1hdGNoZXIoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICAgICAgaWYgKGxvY2FsZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUxvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1Mb2NhbGUgPSBsb2NhbGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBzY29yZVZvaWNlKFZvaWNlSW5mbyB2b2ljZUluZm8pIHsKKyAgICAgICAgICAgIGZpbmFsIExvY2FsZSB2b2ljZUxvY2FsZSA9IHZvaWNlSW5mby5nZXRMb2NhbGUoKTsKKyAgICAgICAgICAgIGlmIChtTG9jYWxlLmVxdWFscyh2b2ljZUxvY2FsZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG1Mb2NhbGUuZ2V0TGFuZ3VhZ2UoKS5lcXVhbHModm9pY2VMb2NhbGUuZ2V0TGFuZ3VhZ2UoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1Mb2NhbGUuZ2V0Q291bnRyeSgpLmVxdWFscyh2b2ljZUxvY2FsZS5nZXRDb3VudHJ5KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGhpZ2hlc3QgcXVhbGl0eSB2b2ljZSBmcm9tIHZvaWNlcyB0aGF0IHNjb3JlIG1vcmUgdGhhbiB6ZXJvIGZyb20gdGhlIHBhc3NlZCBzY29yZXIuCisgICAgICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB2b2ljZSB3aXRoIHRoZSBzYW1lIGhpZ2hlc3QgcXVhbGl0eSwgdGhlbiB0aGlzIG1ldGhvZCByZXR1cm5zIG9uZQorICAgICAqIHdpdGggdGhlIGhpZ2hlc3Qgc2NvcmUuIElmIHRoZXkgc2hhcmUgc2FtZSBzY29yZSBhcyB3ZWxsLCBvbmUgd2l0aCB0aGUgbG93ZXIgaW5kZXggaW4gdGhlCisgICAgICogdm9pY2VzIGxpc3QgaXMgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZW5naW5lU3RhdHVzCisgICAgICogICAgICAgICAgICBWb2ljZXMgc3RhdHVzIHJlY2VpdmVkIGZyb20gYSB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50I2dldEVuZ2luZVN0YXR1cygpfSBjYWxsLgorICAgICAqIEBwYXJhbSB2b2ljZVNjb3JlcgorICAgICAqICAgICAgICAgICAgVXNlZCB0byBkaXNjYXJkIHVuc3VpdGFibGUgdm9pY2VzIGFuZCBoZWxwIHNldHRsZSBjYXNlcyB3aGVyZSBtb3JlIHRoYW4KKyAgICAgKiAgICAgICAgICAgIG9uZSB2b2ljZSBoYXMgdGhlIGRlc2lyZWQgY2hhcmFjdGVyaXN0aWMuCisgICAgICogQHBhcmFtIGhhc1RvQmVFbWJlZGRlZAorICAgICAqICAgICAgICAgICAgSWYgdHJ1ZSwgcmVxdWlyZSB0aGUgdm9pY2UgdG8gYmUgYW4gZW1iZWRkZWQgdm9pY2UgKG5vIG5ldHdvcmsKKyAgICAgKiAgICAgICAgICAgIGFjY2VzcyB3aWxsIGJlIHJlcXVpcmVkIGZvciBzeW50aGVzaXMpLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFZvaWNlSW5mbyBnZXRIaWdoZXN0UXVhbGl0eVZvaWNlKEVuZ2luZVN0YXR1cyBlbmdpbmVTdGF0dXMsCisgICAgICAgICAgICBWb2ljZVNjb3JlciB2b2ljZVNjb3JlciwgYm9vbGVhbiBoYXNUb0JlRW1iZWRkZWQpIHsKKyAgICAgICAgVm9pY2VJbmZvIGJlc3RWb2ljZSA9IG51bGw7CisgICAgICAgIGludCBiZXN0U2NvcmVNYXRjaCA9IDE7CisgICAgICAgIGludCBiZXN0Vm9pY2VRdWFsaXR5ID0gMDsKKworICAgICAgICBmb3IgKFZvaWNlSW5mbyB2b2ljZSA6IGVuZ2luZVN0YXR1cy5nZXRWb2ljZXMoKSkgeworICAgICAgICAgICAgaW50IHNjb3JlID0gdm9pY2VTY29yZXIuc2NvcmVWb2ljZSh2b2ljZSk7CisgICAgICAgICAgICBpZiAoc2NvcmUgPD0gMCB8fCBoYXNUb0JlRW1iZWRkZWQgJiYgdm9pY2UuZ2V0UmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbigpCisgICAgICAgICAgICAgICAgICAgIHx8IHZvaWNlLmdldFF1YWxpdHkoKSA8IGJlc3RWb2ljZVF1YWxpdHkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJlc3RWb2ljZSA9PSBudWxsIHx8CisgICAgICAgICAgICAgICAgICAgIHZvaWNlLmdldFF1YWxpdHkoKSA+IGJlc3RWb2ljZVF1YWxpdHkgfHwKKyAgICAgICAgICAgICAgICAgICAgc2NvcmUgPiBiZXN0U2NvcmVNYXRjaCkgeworICAgICAgICAgICAgICAgIGJlc3RWb2ljZSA9IHZvaWNlOworICAgICAgICAgICAgICAgIGJlc3RTY29yZU1hdGNoID0gc2NvcmU7CisgICAgICAgICAgICAgICAgYmVzdFZvaWNlUXVhbGl0eSA9IHZvaWNlLmdldFF1YWxpdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmVzdFZvaWNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBoaWdoZXN0IHF1YWxpdHkgdm9pY2UuCisgICAgICoKKyAgICAgKiBIaWdoZXN0IHF1YWxpdHkgdm9pY2UgaXMgc2VsZWN0ZWQgZnJvbSB2b2ljZXMgdGhhdCBzY29yZSBtb3JlIHRoYW4gemVybyBmcm9tIHRoZSBwYXNzZWQKKyAgICAgKiBzY29yZXIuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgdm9pY2Ugd2l0aCB0aGUgc2FtZSBoaWdoZXN0IHF1YWxpdHksIHRoZW4gdGhpcyBtZXRob2QKKyAgICAgKiB3aWxsIHJldHVybiBvbmUgd2l0aCB0aGUgaGlnaGVzdCBzY29yZS4gSWYgdGhleSBzaGFyZSBzYW1lIHNjb3JlIGFzIHdlbGwsIG9uZSB3aXRoIHRoZSBsb3dlcgorICAgICAqIGluZGV4IGluIHRoZSB2b2ljZXMgbGlzdCBpcyByZXR1cm5lZC4KKworICAgICAqIEBwYXJhbSBlbmdpbmVTdGF0dXMKKyAgICAgKiAgICAgICAgICAgIFZvaWNlcyBzdGF0dXMgcmVjZWl2ZWQgZnJvbSBhIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQjZ2V0RW5naW5lU3RhdHVzKCl9IGNhbGwuCisgICAgICogQHBhcmFtIGhhc1RvQmVFbWJlZGRlZAorICAgICAqICAgICAgICAgICAgSWYgdHJ1ZSwgcmVxdWlyZSB0aGUgdm9pY2UgdG8gYmUgYW4gZW1iZWRkZWQgdm9pY2UgKG5vIG5ldHdvcmsKKyAgICAgKiAgICAgICAgICAgIGFjY2VzcyB3aWxsIGJlIHJlcXVpcmVkIGZvciBzeW50aGVzaXMpLgorICAgICAqIEBwYXJhbSB2b2ljZVNjb3JlcgorICAgICAqICAgICAgICAgICAgU2NvcmVyIGlzIHVzZWQgdG8gZGlzY2FyZCB1bnN1aXRhYmxlIHZvaWNlcyBhbmQgaGVscCBzZXR0bGUgY2FzZXMgd2hlcmUgbW9yZSB0aGFuCisgICAgICogICAgICAgICAgICBvbmUgdm9pY2UgaGFzIGhpZ2hlc3QgcXVhbGl0eS4KKyAgICAgKiBAcmV0dXJuIFJlcXVlc3RDb25maWcgd2l0aCBzZWxlY3RlZCB2b2ljZSBvciBudWxsIGlmIHN1aXRhYmxlIHZvaWNlIHdhcyBub3QgZm91bmQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBSZXF1ZXN0Q29uZmlnIGhpZ2hlc3RRdWFsaXR5KEVuZ2luZVN0YXR1cyBlbmdpbmVTdGF0dXMsCisgICAgICAgICAgICBib29sZWFuIGhhc1RvQmVFbWJlZGRlZCwgVm9pY2VTY29yZXIgdm9pY2VTY29yZXIpIHsKKyAgICAgICAgVm9pY2VJbmZvIHZvaWNlID0gZ2V0SGlnaGVzdFF1YWxpdHlWb2ljZShlbmdpbmVTdGF0dXMsIHZvaWNlU2NvcmVyLCBoYXNUb0JlRW1iZWRkZWQpOworICAgICAgICBpZiAodm9pY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFJlcXVlc3RDb25maWcuQnVpbGRlci5uZXdCdWlsZGVyKCkuc2V0Vm9pY2Uodm9pY2UpLmJ1aWxkKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGhpZ2hlc3QgcXVhbGl0eSB2b2ljZSBmb3IgdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgICAqCisgICAgICogQ2FsbCB7QGxpbmsgI2hpZ2hlc3RRdWFsaXR5KEVuZ2luZVN0YXR1cywgYm9vbGVhbiwgVm9pY2VTY29yZXIpfSB3aXRoCisgICAgICoge0BsaW5rIExhbmd1YWdlTWF0Y2hlcn0gc2V0IHRvIGRldmljZSBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBlbmdpbmVTdGF0dXMKKyAgICAgKiAgICAgICAgICAgIFZvaWNlcyBzdGF0dXMgcmVjZWl2ZWQgZnJvbSBhIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQjZ2V0RW5naW5lU3RhdHVzKCl9IGNhbGwuCisgICAgICogQHBhcmFtIGhhc1RvQmVFbWJlZGRlZAorICAgICAqICAgICAgICAgICAgSWYgdHJ1ZSwgcmVxdWlyZSB0aGUgdm9pY2UgdG8gYmUgYW4gZW1iZWRkZWQgdm9pY2UgKG5vIG5ldHdvcmsKKyAgICAgKiAgICAgICAgICAgIGFjY2VzcyB3aWxsIGJlIHJlcXVpcmVkIGZvciBzeW50aGVzaXMpLgorICAgICAqIEByZXR1cm4gUmVxdWVzdENvbmZpZyB3aXRoIHNlbGVjdGVkIHZvaWNlIG9yIG51bGwgaWYgc3VpdGFibGUgdm9pY2Ugd2FzIG5vdCBmb3VuZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFJlcXVlc3RDb25maWcgaGlnaGVzdFF1YWxpdHkoRW5naW5lU3RhdHVzIGVuZ2luZVN0YXR1cywKKyAgICAgICAgICAgIGJvb2xlYW4gaGFzVG9CZUVtYmVkZGVkKSB7CisgICAgICAgIHJldHVybiBoaWdoZXN0UXVhbGl0eShlbmdpbmVTdGF0dXMsIGhhc1RvQmVFbWJlZGRlZCwKKyAgICAgICAgICAgICAgICBuZXcgTGFuZ3VhZ2VNYXRjaGVyKExvY2FsZS5nZXREZWZhdWx0KCkpKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU2lsZW5jZVBsYXliYWNrUXVldWVJdGVtLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1NpbGVuY2VQbGF5YmFja1F1ZXVlSXRlbS5qYXZhCmluZGV4IGE1ZTQ3YWUuLjg4YjdjNzAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU2lsZW5jZVBsYXliYWNrUXVldWVJdGVtLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9TaWxlbmNlUGxheWJhY2tRdWV1ZUl0ZW0uamF2YQpAQCAtMTcsNyArMTcsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5vcy5Db25kaXRpb25WYXJpYWJsZTsKIGltcG9ydCBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoU2VydmljZS5VdHRlcmFuY2VQcm9ncmVzc0Rpc3BhdGNoZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogY2xhc3MgU2lsZW5jZVBsYXliYWNrUXVldWVJdGVtIGV4dGVuZHMgUGxheWJhY2tRdWV1ZUl0ZW0gewogICAgIHByaXZhdGUgZmluYWwgQ29uZGl0aW9uVmFyaWFibGUgbUNvbmRWYXIgPSBuZXcgQ29uZGl0aW9uVmFyaWFibGUoKTsKQEAgLTMyLDE0ICszMSwyMCBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgZ2V0RGlzcGF0Y2hlcigpLmRpc3BhdGNoT25TdGFydCgpOworICAgICAgICBib29sZWFuIHdhc1N0b3BwZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKG1TaWxlbmNlRHVyYXRpb25NcyA+IDApIHsKLSAgICAgICAgICAgIG1Db25kVmFyLmJsb2NrKG1TaWxlbmNlRHVyYXRpb25Ncyk7CisgICAgICAgICAgd2FzU3RvcHBlZCA9IG1Db25kVmFyLmJsb2NrKG1TaWxlbmNlRHVyYXRpb25Ncyk7CiAgICAgICAgIH0KLSAgICAgICAgZ2V0RGlzcGF0Y2hlcigpLmRpc3BhdGNoT25Eb25lKCk7CisgICAgICAgIGlmICh3YXNTdG9wcGVkKSB7CisgICAgICAgICAgICBnZXREaXNwYXRjaGVyKCkuZGlzcGF0Y2hPblN0b3AoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdldERpc3BhdGNoZXIoKS5kaXNwYXRjaE9uU3VjY2VzcygpOworICAgICAgICB9CisKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICB2b2lkIHN0b3AoYm9vbGVhbiBpc0Vycm9yKSB7CisgICAgdm9pZCBzdG9wKGludCBlcnJvckNvZGUpIHsKICAgICAgICAgbUNvbmRWYXIub3BlbigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU3ludGhlc2lzQ2FsbGJhY2suamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU3ludGhlc2lzQ2FsbGJhY2suamF2YQppbmRleCBmOThiYjA5Li5iYzJmMjM5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1N5bnRoZXNpc0NhbGxiYWNrLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9TeW50aGVzaXNDYWxsYmFjay5qYXZhCkBAIC0yNiw3ICsyNiw5IEBACiAgKiBpbmRpY2F0ZSB0aGF0IGFuIGVycm9yIGhhcyBvY2N1cnJlZCwgYnV0IGlmIHRoZSBjYWxsIGlzIG1hZGUgYWZ0ZXIgYSBjYWxsCiAgKiB0byB7QGxpbmsgI2RvbmV9LCBpdCBtaWdodCBiZSBkaXNjYXJkZWQuCiAgKgotICogQWZ0ZXIge0BsaW5rICNzdGFydH0gYmVlbiBjYWxsZWQsIHtAbGluayAjZG9uZX0gbXVzdCBiZSBjYWxsZWQgcmVnYXJkbGVzcyBvZiBlcnJvcnMuCisgKiB7QGxpbmsgI2RvbmV9IG11c3QgYmUgY2FsbGVkIGF0IHRoZSBlbmQgb2Ygc3ludGhlc2lzLCByZWdhcmRsZXNzIG9mIGVycm9ycy4KKyAqCisgKiBBbGwgbWV0aG9kcyBjYW4gYmUgb25seSBjYWxsZWQgb24gdGhlIHN5bnRoZXNpcyB0aHJlYWQuCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgU3ludGhlc2lzQ2FsbGJhY2sgewogICAgIC8qKgpAQCAtNDEsMTMgKzQzLDE2IEBACiAgICAgICogcmVxdWVzdC4KICAgICAgKgogICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgc3ludGhlc2lzIHRocmVhZCwKLSAgICAgKiB3aGlsZSBpbiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0fS4KKyAgICAgKiB3aGlsZSBpbiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0fSBvcgorICAgICAqIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHRWMn0uCiAgICAgICoKICAgICAgKiBAcGFyYW0gc2FtcGxlUmF0ZUluSHogU2FtcGxlIHJhdGUgaW4gSFogb2YgdGhlIGdlbmVyYXRlZCBhdWRpby4KICAgICAgKiBAcGFyYW0gYXVkaW9Gb3JtYXQgQXVkaW8gZm9ybWF0IG9mIHRoZSBnZW5lcmF0ZWQgYXVkaW8uIE11c3QgYmUgb25lIG9mCiAgICAgICogICAgICAgICB0aGUgRU5DT0RJTkdfIGNvbnN0YW50cyBkZWZpbmVkIGluIHtAbGluayBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9ybWF0fS4KICAgICAgKiBAcGFyYW0gY2hhbm5lbENvdW50IFRoZSBudW1iZXIgb2YgY2hhbm5lbHMuIE11c3QgYmUge0Bjb2RlIDF9IG9yIHtAY29kZSAyfS4KLSAgICAgKiBAcmV0dXJuIHtAbGluayBUZXh0VG9TcGVlY2gjU1VDQ0VTU30gb3Ige0BsaW5rIFRleHRUb1NwZWVjaCNFUlJPUn0uCisgICAgICogQHJldHVybiB7QGxpbmsgVGV4dFRvU3BlZWNoI1NVQ0NFU1N9LCB7QGxpbmsgVGV4dFRvU3BlZWNoI0VSUk9SfS4KKyAgICAgKiAgICAgICAgICB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cyNTVE9QUEVEfSBpcyBhbHNvIHBvc3NpYmxlIGlmIGNhbGxlZCBpbiBjb250ZXh0IG9mCisgICAgICogICAgICAgICAge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dFYyfS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IHN0YXJ0KGludCBzYW1wbGVSYXRlSW5IeiwgaW50IGF1ZGlvRm9ybWF0LCBpbnQgY2hhbm5lbENvdW50KTsKIApAQCAtNTUsNyArNjAsOCBAQAogICAgICAqIFRoZSBzZXJ2aWNlIHNob3VsZCBjYWxsIHRoaXMgbWV0aG9kIHdoZW4gc3ludGhlc2l6ZWQgYXVkaW8gaXMgcmVhZHkgZm9yIGNvbnN1bXB0aW9uLgogICAgICAqCiAgICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRoZSBzeW50aGVzaXMgdGhyZWFkLAotICAgICAqIHdoaWxlIGluIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHR9LgorICAgICAqIHdoaWxlIGluIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHR9IG9yCisgICAgICoge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dFYyfS4KICAgICAgKgogICAgICAqIEBwYXJhbSBidWZmZXIgVGhlIGdlbmVyYXRlZCBhdWRpbyBkYXRhLiBUaGlzIG1ldGhvZCB3aWxsIG5vdCBob2xkIG9uIHRvIHtAY29kZSBidWZmZXJ9LAogICAgICAqICAgICAgICAgc28gdGhlIGNhbGxlciBpcyBmcmVlIHRvIG1vZGlmeSBpdCBhZnRlciB0aGlzIG1ldGhvZCByZXR1cm5zLgpAQCAtNjMsNiArNjksOCBAQAogICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiBieXRlcyBvZiBhdWRpbyBkYXRhIGluIHtAY29kZSBidWZmZXJ9LiBUaGlzIG11c3QgYmUKICAgICAgKiAgICAgICAgIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHtAbGluayAjZ2V0TWF4QnVmZmVyU2l6ZX0uCiAgICAgICogQHJldHVybiB7QGxpbmsgVGV4dFRvU3BlZWNoI1NVQ0NFU1N9IG9yIHtAbGluayBUZXh0VG9TcGVlY2gjRVJST1J9LgorICAgICAqICAgICAgICAgIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzI1NUT1BQRUR9IGlzIGFsc28gcG9zc2libGUgaWYgY2FsbGVkIGluIGNvbnRleHQgb2YKKyAgICAgKiAgICAgICAgICB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0VjJ9LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgYXVkaW9BdmFpbGFibGUoYnl0ZVtdIGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGxlbmd0aCk7CiAKQEAgLTcxLDExICs3OSwxNCBAQAogICAgICAqIGJlZW4gcGFzc2VkIHRvIHtAbGluayAjYXVkaW9BdmFpbGFibGV9LgogICAgICAqCiAgICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRoZSBzeW50aGVzaXMgdGhyZWFkLAotICAgICAqIHdoaWxlIGluIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHR9LgorICAgICAqIHdoaWxlIGluIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHR9IG9yCisgICAgICoge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dFYyfS4KICAgICAgKgotICAgICAqIFRoaXMgbWV0aG9kIGhhcyB0byBiZSBjYWxsZWQgaWYge0BsaW5rICNzdGFydH0gd2FzIGNhbGxlZC4KKyAgICAgKiBUaGlzIG1ldGhvZCBoYXMgdG8gYmUgY2FsbGVkIGlmIHtAbGluayAjc3RhcnR9IGFuZC9vciB7QGxpbmsgI2Vycm9yfSB3YXMgY2FsbGVkLgogICAgICAqCiAgICAgICogQHJldHVybiB7QGxpbmsgVGV4dFRvU3BlZWNoI1NVQ0NFU1N9IG9yIHtAbGluayBUZXh0VG9TcGVlY2gjRVJST1J9LgorICAgICAqICAgICAgICAgIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzI1NUT1BQRUR9IGlzIGFsc28gcG9zc2libGUgaWYgY2FsbGVkIGluIGNvbnRleHQgb2YKKyAgICAgKiAgICAgICAgICB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0VjJ9LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZG9uZSgpOwogCkBAIC04Nyw0ICs5OCw1OCBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVycm9yKCk7CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKKyAgICAvKioKKyAgICAgKiBUaGUgc2VydmljZSBzaG91bGQgY2FsbCB0aGlzIG1ldGhvZCBpZiB0aGUgc3BlZWNoIHN5bnRoZXNpcyBmYWlscy4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgc3ludGhlc2lzIHRocmVhZCwKKyAgICAgKiB3aGlsZSBpbiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0fSBvcgorICAgICAqIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uU3ludGhlc2l6ZVRleHRWMn0uCisgICAgICoKKyAgICAgKiBAcGFyYW0gZXJyb3JDb2RlIEVycm9yIGNvZGUgdG8gcGFzcyB0byB0aGUgY2xpZW50LiBPbmUgb2YgdGhlIEVSUk9SXyB2YWx1ZXMgZnJvbQorICAgICAqICAgICAge0BsaW5rIFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXN9CisgICAgICovCisgICAgcHVibGljIHZvaWQgZXJyb3IoaW50IGVycm9yQ29kZSk7CisKKyAgICAvKioKKyAgICAgKiBDb21tdW5pY2F0ZSB0byBjbGllbnQgdGhhdCB0aGUgb3JpZ2luYWwgcmVxdWVzdCBjYW4ndCBiZSBkb25lIGFuZCBjbGllbnQtcmVxdWVzdGVkCisgICAgICogZmFsbGJhY2sgaXMgaGFwcGVuaW5nLgorICAgICAqCisgICAgICogRmFsbGJhY2sgY2FuIGJlIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IGJ5IHNldHRpbmcKKyAgICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcyNGQUxMQkFDS19WT0lDRV9OQU1FfSB2b2ljZSBwYXJhbWV0ZXIgd2l0aCBhIGlkIG9mCisgICAgICogdGhlIHZvaWNlIHRoYXQgaXMgZXhwZWN0ZWQgdG8gYmUgdXNlZCBmb3IgdGhlIGZhbGxiYWNrLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2Qgd2lsbCBmYWlsIGlmIHVzZXIgY2FsbGVkIHtAbGluayAjc3RhcnQoaW50LCBpbnQsIGludCl9IGFuZC9vcgorICAgICAqIHtAbGluayAjZG9uZSgpfS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgc3ludGhlc2lzIHRocmVhZCwKKyAgICAgKiB3aGlsZSBpbiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0VjJ9LgorICAgICAqCisgICAgICogQHJldHVybiB7QGxpbmsgVGV4dFRvU3BlZWNoI1NVQ0NFU1N9LCB7QGxpbmsgVGV4dFRvU3BlZWNoI0VSUk9SfSBpZiBjbGllbnQgYWxyZWFkeQorICAgICAqICAgICAgICAgIGNhbGxlZCB7QGxpbmsgI3N0YXJ0KGludCwgaW50LCBpbnQpfSwge0BsaW5rIFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMjU1RPUFBFRH0KKyAgICAgKiAgICAgICAgICBpZiBzdG9wIHdhcyByZXF1ZXN0ZWQuCisgICAgICovCisgICAgcHVibGljIGludCBmYWxsYmFjaygpOworCisgICAgLyoqCisgICAgICogQ2hlY2sgaWYge0BsaW5rICNzdGFydH0gd2FzIGNhbGxlZCBvciBub3QuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gdGhlIHN5bnRoZXNpcyB0aHJlYWQsCisgICAgICogd2hpbGUgaW4ge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dH0gb3IKKyAgICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0VjJ9LgorICAgICAqCisgICAgICogVXNlZnVsIGZvciBjaGVja2luZyBpZiBhIGZhbGxiYWNrIGZyb20gbmV0d29yayByZXF1ZXN0IGlzIHBvc3NpYmxlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGhhc1N0YXJ0ZWQoKTsKKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHtAbGluayAjZG9uZX0gd2FzIGNhbGxlZCBvciBub3QuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gdGhlIHN5bnRoZXNpcyB0aHJlYWQsCisgICAgICogd2hpbGUgaW4ge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25TeW50aGVzaXplVGV4dH0gb3IKKyAgICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoU2VydmljZSNvblN5bnRoZXNpemVUZXh0VjJ9LgorICAgICAqCisgICAgICogVXNlZnVsIGZvciBjaGVja2luZyBpZiBhIGZhbGxiYWNrIGZyb20gbmV0d29yayByZXF1ZXN0IGlzIHBvc3NpYmxlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGhhc0ZpbmlzaGVkKCk7Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1N5bnRoZXNpc1BsYXliYWNrUXVldWVJdGVtLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1N5bnRoZXNpc1BsYXliYWNrUXVldWVJdGVtLmphdmEKaW5kZXggZTg1M2M5ZS4uYjQyNDM1NiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9TeW50aGVzaXNQbGF5YmFja1F1ZXVlSXRlbS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU3ludGhlc2lzUGxheWJhY2tRdWV1ZUl0ZW0uamF2YQpAQCAtNTcsMjMgKzU3LDIyIEBACiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIG1TdG9wcGVkOwogICAgIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBtRG9uZTsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4gbUlzRXJyb3I7CisgICAgcHJpdmF0ZSB2b2xhdGlsZSBpbnQgbVN0YXR1c0NvZGU7CiAKICAgICBwcml2YXRlIGZpbmFsIEJsb2NraW5nQXVkaW9UcmFjayBtQXVkaW9UcmFjazsKLSAgICBwcml2YXRlIGZpbmFsIEV2ZW50TG9nZ2VyIG1Mb2dnZXI7Ci0KKyAgICBwcml2YXRlIGZpbmFsIEFic3RyYWN0RXZlbnRMb2dnZXIgbUxvZ2dlcjsKIAogICAgIFN5bnRoZXNpc1BsYXliYWNrUXVldWVJdGVtKGludCBzdHJlYW1UeXBlLCBpbnQgc2FtcGxlUmF0ZSwKICAgICAgICAgICAgIGludCBhdWRpb0Zvcm1hdCwgaW50IGNoYW5uZWxDb3VudCwKICAgICAgICAgICAgIGZsb2F0IHZvbHVtZSwgZmxvYXQgcGFuLCBVdHRlcmFuY2VQcm9ncmVzc0Rpc3BhdGNoZXIgZGlzcGF0Y2hlciwKLSAgICAgICAgICAgIE9iamVjdCBjYWxsZXJJZGVudGl0eSwgRXZlbnRMb2dnZXIgbG9nZ2VyKSB7CisgICAgICAgICAgICBPYmplY3QgY2FsbGVySWRlbnRpdHksIEFic3RyYWN0RXZlbnRMb2dnZXIgbG9nZ2VyKSB7CiAgICAgICAgIHN1cGVyKGRpc3BhdGNoZXIsIGNhbGxlcklkZW50aXR5KTsKIAogICAgICAgICBtVW5jb25zdW1lZEJ5dGVzID0gMDsKIAogICAgICAgICBtU3RvcHBlZCA9IGZhbHNlOwogICAgICAgICBtRG9uZSA9IGZhbHNlOwotICAgICAgICBtSXNFcnJvciA9IGZhbHNlOworICAgICAgICBtU3RhdHVzQ29kZSA9IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUzsKIAogICAgICAgICBtQXVkaW9UcmFjayA9IG5ldyBCbG9ja2luZ0F1ZGlvVHJhY2soc3RyZWFtVHlwZSwgc2FtcGxlUmF0ZSwgYXVkaW9Gb3JtYXQsCiAgICAgICAgICAgICAgICAgY2hhbm5lbENvdW50LCB2b2x1bWUsIHBhbik7CkBAIC04Niw5ICs4NSw4IEBACiAgICAgICAgIGZpbmFsIFV0dGVyYW5jZVByb2dyZXNzRGlzcGF0Y2hlciBkaXNwYXRjaGVyID0gZ2V0RGlzcGF0Y2hlcigpOwogICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25TdGFydCgpOwogCi0KICAgICAgICAgaWYgKCFtQXVkaW9UcmFjay5pbml0KCkpIHsKLSAgICAgICAgICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2hPbkVycm9yKCk7CisgICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25FcnJvcihUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLkVSUk9SX09VVFBVVCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTEyLDIzICsxMTAsMjUgQEAKIAogICAgICAgICBtQXVkaW9UcmFjay53YWl0QW5kUmVsZWFzZSgpOwogCi0gICAgICAgIGlmIChtSXNFcnJvcikgewotICAgICAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaE9uRXJyb3IoKTsKKyAgICAgICAgaWYgKG1TdGF0dXNDb2RlID09IFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuU1VDQ0VTUykgeworICAgICAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaE9uU3VjY2VzcygpOworICAgICAgICB9IGVsc2UgaWYobVN0YXR1c0NvZGUgPT0gVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5TVE9QUEVEKSB7CisgICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25TdG9wKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25Eb25lKCk7CisgICAgICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoT25FcnJvcihtU3RhdHVzQ29kZSk7CiAgICAgICAgIH0KIAotICAgICAgICBtTG9nZ2VyLm9uV3JpdGVEYXRhKCk7CisgICAgICAgIG1Mb2dnZXIub25Db21wbGV0ZWQobVN0YXR1c0NvZGUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHZvaWQgc3RvcChib29sZWFuIGlzRXJyb3IpIHsKKyAgICB2b2lkIHN0b3AoaW50IHN0YXR1c0NvZGUpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1MaXN0TG9jay5sb2NrKCk7CiAKICAgICAgICAgICAgIC8vIFVwZGF0ZSBvdXIgaW50ZXJuYWwgc3RhdGUuCiAgICAgICAgICAgICBtU3RvcHBlZCA9IHRydWU7Ci0gICAgICAgICAgICBtSXNFcnJvciA9IGlzRXJyb3I7CisgICAgICAgICAgICBtU3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7CiAKICAgICAgICAgICAgIC8vIFdha2UgdXAgdGhlIGF1ZGlvIHBsYXliYWNrIHRocmVhZCBpZiBpdCB3YXMgd2FpdGluZyBvbiB0YWtlKCkuCiAgICAgICAgICAgICAvLyB0YWtlKCkgd2lsbCByZXR1cm4gbnVsbCBzaW5jZSBtU3RvcHBlZCB3YXMgdHJ1ZSwgYW5kIHdpbGwgdGhlbgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9TeW50aGVzaXNSZXF1ZXN0VjIuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU3ludGhlc2lzUmVxdWVzdFYyLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjN2RhNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU3ludGhlc2lzUmVxdWVzdFYyLmFpZGwKQEAgLTAsMCArMSwyMCBAQAorLyoKKyoqCisqKiBDb3B5cmlnaHQgMjAxMywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBhbmRyb2lkLnNwZWVjaC50dHM7CisKK3BhcmNlbGFibGUgU3ludGhlc2lzUmVxdWVzdFYyOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvU3ludGhlc2lzUmVxdWVzdFYyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1N5bnRoZXNpc1JlcXVlc3RWMi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMjY4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1N5bnRoZXNpc1JlcXVlc3RWMi5qYXZhCkBAIC0wLDAgKzEsMTMyIEBACitwYWNrYWdlIGFuZHJvaWQuc3BlZWNoLnR0czsKKworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LlV0dGVyYW5jZUlkOworCisvKioKKyAqIFNlcnZpY2Utc2lkZSByZXByZXNlbnRhdGlvbiBvZiBhIHN5bnRoZXNpcyByZXF1ZXN0IGZyb20gYSBWMiBBUEkgY2xpZW50LiBDb250YWluczoKKyAqIDx1bD4KKyAqICAgPGxpPlRoZSB1dHRlcmFuY2UgdG8gc3ludGhlc2l6ZTwvbGk+CisgKiAgIDxsaT5UaGUgaWQgb2YgdGhlIHV0dGVyYW5jZSAoU3RyaW5nLCByZXN1bHQgb2Yge0BsaW5rIFV0dGVyYW5jZUlkI3RvVW5pcXVlU3RyaW5nKCl9PC9saT4KKyAqICAgPGxpPlRoZSBzeW50aGVzaXMgdm9pY2UgbmFtZSAoU3RyaW5nLCByZXN1bHQgb2Yge0BsaW5rIFZvaWNlSW5mbyNnZXROYW1lKCl9KTwvbGk+CisgKiAgIDxsaT5Wb2ljZSBwYXJhbWV0ZXJzIChCdW5kbGUgb2YgcGFyYW1ldGVycyk8L2xpPgorICogICA8bGk+QXVkaW8gcGFyYW1ldGVycyAoQnVuZGxlIG9mIHBhcmFtZXRlcnMpPC9saT4KKyAqIDwvdWw+CisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBTeW50aGVzaXNSZXF1ZXN0VjIgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKKyAgICAvKiogU3ludGhlc2lzIHV0dGVyYW5jZS4gKi8KKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtVGV4dDsKKworICAgIC8qKiBTeW50aGVzaXMgaWQuICovCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVV0dGVyYW5jZUlkOworCisgICAgLyoqIFZvaWNlIElELiAqLworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Wb2ljZU5hbWU7CisKKyAgICAvKiogVm9pY2UgUGFyYW1ldGVycy4gKi8KKyAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtVm9pY2VQYXJhbXM7CisKKyAgICAvKiogQXVkaW8gUGFyYW1ldGVycy4gKi8KKyAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtQXVkaW9QYXJhbXM7CisKKyAgICAvKioKKyAgICAgKiBQYXJjZWwgYmFzZWQgY29uc3RydWN0b3IuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBTeW50aGVzaXNSZXF1ZXN0VjIoUGFyY2VsIGluKSB7CisgICAgICAgIHRoaXMubVRleHQgPSBpbi5yZWFkU3RyaW5nKCk7CisgICAgICAgIHRoaXMubVV0dGVyYW5jZUlkID0gaW4ucmVhZFN0cmluZygpOworICAgICAgICB0aGlzLm1Wb2ljZU5hbWUgPSBpbi5yZWFkU3RyaW5nKCk7CisgICAgICAgIHRoaXMubVZvaWNlUGFyYW1zID0gaW4ucmVhZEJ1bmRsZSgpOworICAgICAgICB0aGlzLm1BdWRpb1BhcmFtcyA9IGluLnJlYWRCdW5kbGUoKTsKKyAgICB9CisKKyAgICBTeW50aGVzaXNSZXF1ZXN0VjIoU3RyaW5nIHRleHQsIFN0cmluZyB1dHRlcmFuY2VJZCwgUmVxdWVzdENvbmZpZyByY29uZmlnKSB7CisgICAgICAgIHRoaXMubVRleHQgPSB0ZXh0OworICAgICAgICB0aGlzLm1VdHRlcmFuY2VJZCA9IHV0dGVyYW5jZUlkOworICAgICAgICB0aGlzLm1Wb2ljZU5hbWUgPSByY29uZmlnLmdldFZvaWNlKCkuZ2V0TmFtZSgpOworICAgICAgICB0aGlzLm1Wb2ljZVBhcmFtcyA9IHJjb25maWcuZ2V0Vm9pY2VQYXJhbXMoKTsKKyAgICAgICAgdGhpcy5tQXVkaW9QYXJhbXMgPSByY29uZmlnLmdldEF1ZGlvUGFyYW1zKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogV3JpdGUgdG8gcGFyY2VsLgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBkZXN0LCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgZGVzdC53cml0ZVN0cmluZyhtVGV4dCk7CisgICAgICAgIGRlc3Qud3JpdGVTdHJpbmcobVV0dGVyYW5jZUlkKTsKKyAgICAgICAgZGVzdC53cml0ZVN0cmluZyhtVm9pY2VOYW1lKTsKKyAgICAgICAgZGVzdC53cml0ZUJ1bmRsZShtVm9pY2VQYXJhbXMpOworICAgICAgICBkZXN0LndyaXRlQnVuZGxlKG1BdWRpb1BhcmFtcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgdGV4dCB3aGljaCBzaG91bGQgYmUgc3ludGhlc2l6ZWQuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworICAgICAgICByZXR1cm4gbVRleHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgaWQgb2YgdGhlIHN5bnRoZXNpcyByZXF1ZXN0LiBJdCdzIGFuIG91dHB1dCBvZiBhIGNhbGwgdG8gdGhlCisgICAgICoge0BsaW5rIFV0dGVyYW5jZUlkI3RvVW5pcXVlU3RyaW5nKCl9IG1ldGhvZCBvZiB0aGUge0BsaW5rIFV0dGVyYW5jZUlkfSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiB0aGlzIHJlcXVlc3QuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRVdHRlcmFuY2VJZCgpIHsKKyAgICAgICAgcmV0dXJuIG1VdHRlcmFuY2VJZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB2b2ljZSB0byB1c2UgZm9yIHRoaXMgc3ludGhlc2lzIHJlcXVlc3QuIFJlc3VsdCBvZiBhIGNhbGwgdG8KKyAgICAgKiB0aGUge0BsaW5rIFZvaWNlSW5mbyNnZXROYW1lKCl9IG1ldGhvZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFZvaWNlTmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIG1Wb2ljZU5hbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBidW5kbGUgb2Ygdm9pY2UgcGFyYW1ldGVycy4KKyAgICAgKi8KKyAgICBwdWJsaWMgQnVuZGxlIGdldFZvaWNlUGFyYW1zKCkgeworICAgICAgICByZXR1cm4gbVZvaWNlUGFyYW1zOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gYnVuZGxlIG9mIGF1ZGlvIHBhcmFtZXRlcnMuCisgICAgICovCisgICAgcHVibGljIEJ1bmRsZSBnZXRBdWRpb1BhcmFtcygpIHsKKyAgICAgICAgcmV0dXJuIG1BdWRpb1BhcmFtczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQYXJjZWwgY3JlYXRvcnMuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFN5bnRoZXNpc1JlcXVlc3RWMj4gQ1JFQVRPUiA9CisgICAgICAgICAgICBuZXcgUGFyY2VsYWJsZS5DcmVhdG9yPFN5bnRoZXNpc1JlcXVlc3RWMj4oKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3ludGhlc2lzUmVxdWVzdFYyIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIHNvdXJjZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBTeW50aGVzaXNSZXF1ZXN0VjIoc291cmNlKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3ludGhlc2lzUmVxdWVzdFYyW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgU3ludGhlc2lzUmVxdWVzdFYyW3NpemVdOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9UZXh0VG9TcGVlY2guamF2YQppbmRleCAyNzUyMDg1Li4wMjE1MmZiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVGV4dFRvU3BlZWNoLmphdmEKQEAgLTU0LDcgKzU0LDkgQEAKICAqIFdoZW4geW91IGFyZSBkb25lIHVzaW5nIHRoZSBUZXh0VG9TcGVlY2ggaW5zdGFuY2UsIGNhbGwgdGhlIHtAbGluayAjc2h1dGRvd24oKX0gbWV0aG9kCiAgKiB0byByZWxlYXNlIHRoZSBuYXRpdmUgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIFRleHRUb1NwZWVjaCBlbmdpbmUuCiAgKgorICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnR9IGluc3RlYWQKICAqLworQERlcHJlY2F0ZWQKIHB1YmxpYyBjbGFzcyBUZXh0VG9TcGVlY2ggewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJUZXh0VG9TcGVlY2giOwpAQCAtOTcwLDcgKzk3Miw3IEBACiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBJbnRlZ2VyIHJ1bihJVGV4dFRvU3BlZWNoU2VydmljZSBzZXJ2aWNlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5wbGF5U2lsZW5jZShnZXRDYWxsZXJJZGVudGl0eSgpLCBkdXJhdGlvbkluTXMsIHF1ZXVlTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldFBhcmFtcyhwYXJhbXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9PSBudWxsID8gbnVsbCA6IHBhcmFtcy5nZXQoRW5naW5lLktFWV9QQVJBTV9VVFRFUkFOQ0VfSUQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSwgRVJST1IsICJwbGF5U2lsZW5jZSIpOwogICAgIH0KQEAgLTE0NDMsOCArMTQ0NSwxNyBAQAogICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUVzdGFibGlzaGVkOwogCiAgICAgICAgIHByaXZhdGUgZmluYWwgSVRleHRUb1NwZWVjaENhbGxiYWNrLlN0dWIgbUNhbGxiYWNrID0gbmV3IElUZXh0VG9TcGVlY2hDYWxsYmFjay5TdHViKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25TdG9wKFN0cmluZyB1dHRlcmFuY2VJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZworICAgICAgICAgICAgfTsKKwogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkRvbmUoU3RyaW5nIHV0dGVyYW5jZUlkKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkZhbGxiYWNrKFN0cmluZyB1dHRlcmFuY2VJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU3VjY2VzcyhTdHJpbmcgdXR0ZXJhbmNlSWQpIHsKICAgICAgICAgICAgICAgICBVdHRlcmFuY2VQcm9ncmVzc0xpc3RlbmVyIGxpc3RlbmVyID0gbVV0dGVyYW5jZVByb2dyZXNzTGlzdGVuZXI7CiAgICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIub25Eb25lKHV0dGVyYW5jZUlkKTsKQEAgLTE0NTIsNyArMTQ2Myw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25FcnJvcihTdHJpbmcgdXR0ZXJhbmNlSWQpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoU3RyaW5nIHV0dGVyYW5jZUlkLCBpbnQgZXJyb3JDb2RlKSB7CiAgICAgICAgICAgICAgICAgVXR0ZXJhbmNlUHJvZ3Jlc3NMaXN0ZW5lciBsaXN0ZW5lciA9IG1VdHRlcmFuY2VQcm9ncmVzc0xpc3RlbmVyOwogICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLm9uRXJyb3IodXR0ZXJhbmNlSWQpOwpAQCAtMTQ2Niw2ICsxNDc3LDExIEBACiAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLm9uU3RhcnQodXR0ZXJhbmNlSWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblZvaWNlc0luZm9DaGFuZ2UoTGlzdDxWb2ljZUluZm8+IHZvaWNlc0luZm8pIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgICAgIC8vIElnbm9yZSBpdAorICAgICAgICAgICAgfQogICAgICAgICB9OwogCiAgICAgICAgIHByaXZhdGUgY2xhc3MgU2V0dXBDb25uZWN0aW9uQXN5bmNUYXNrIGV4dGVuZHMgQXN5bmNUYXNrPFZvaWQsIFZvaWQsIEludGVnZXI+IHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVGV4dFRvU3BlZWNoQ2xpZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaENsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOGQ0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaENsaWVudC5qYXZhCkBAIC0wLDAgKzEsMTA1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuc3BlZWNoLnR0czsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuYXBwLkFwcGxpY2F0aW9uOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOworaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnNwZWVjaC50dHMuSVRleHRUb1NwZWVjaENhbGxiYWNrOworaW1wb3J0IGFuZHJvaWQuc3BlZWNoLnR0cy5JVGV4dFRvU3BlZWNoU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudXRpbC5QYWlyOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIFN5bnRoZXNpemVzIHNwZWVjaCBmcm9tIHRleHQgZm9yIGltbWVkaWF0ZSBwbGF5YmFjayBvciB0byBjcmVhdGUgYSBzb3VuZAorICogZmlsZS4KKyAqIDxwPgorICogVGhpcyBpcyBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIHNwZWVjaCBzeW50aGVzaXMgY2xpZW50IHRoYXQgc3VwZXJzZWRlcworICoge0BsaW5rIGFuZHJvaWQuc3BlZWNoLnR0cy5UZXh0VG9TcGVlY2h9LgorICogPHA+CisgKiBBIFRleHRUb1NwZWVjaENsaWVudCBpbnN0YW5jZSBjYW4gb25seSBiZSB1c2VkIHRvIHN5bnRoZXNpemUgdGV4dCBvbmNlIGl0IGhhcworICogY29ubmVjdGVkIHRvIHRoZSBzZXJ2aWNlLiBUaGUgVGV4dFRvU3BlZWNoQ2xpZW50IGluc3RhbmNlIHdpbGwgc3RhcnQgZXN0YWJsaXNoaW5nCisgKiB0aGUgY29ubmVjdGlvbiBhZnRlciBhIGNhbGwgdG8gdGhlIHtAbGluayAjY29ubmVjdCgpfSBtZXRob2QuIFRoaXMgaXMgdXN1YWxseSBkb25lIGluCisgKiB7QGxpbmsgQXBwbGljYXRpb24jb25DcmVhdGUoKX0gb3Ige0BsaW5rIEFjdGl2aXR5I29uQ3JlYXRlfS4gV2hlbiB0aGUgY29ubmVjdGlvbgorICogaXMgZXN0YWJsaXNoZWQsIHRoZSBpbnN0YW5jZSB3aWxsIGNhbGwgYmFjayB1c2luZyB0aGUKKyAqIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuQ29ubmVjdGlvbkNhbGxiYWNrc30gaW50ZXJmYWNlLiBPbmx5IGFmdGVyIGEKKyAqIHN1Y2Nlc3NmdWwgY2FsbGJhY2sgaXMgdGhlIGNsaWVudCB1c2FibGUuCisgKiA8cD4KKyAqIEFmdGVyIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbiwgdGhlIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSB2b2ljZXMgY2FuIGJlIG9idGFpbmVkCisgKiBieSBjYWxsaW5nIHRoZSB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50I2dldEVuZ2luZVN0YXR1cygpIG1ldGhvZC4gVGhlIGNsaWVudCBjYW4KKyAqIGNob29zZSBhIHZvaWNlIHVzaW5nIHNvbWUgY3VzdG9tIGhldXJpc3RpYyBhbmQgYnVpbGQgYSB7QGxpbmsgUmVxdWVzdENvbmZpZ30gb2JqZWN0CisgKiB1c2luZyB7QGxpbmsgUmVxdWVzdENvbmZpZy5CdWlsZGVyfSwgb3IgY2FuIHVzZSBvbmUgb2YgdGhlIGNvbW1vbiBoZXVyaXN0aWNzIGZvdW5kCisgKiBpbiAoe0BsaW5rIFJlcXVlc3RDb25maWdIZWxwZXJ9LgorICogPHA+CisgKiBXaGVuIHlvdSBhcmUgZG9uZSB1c2luZyB0aGUgVGV4dFRvU3BlZWNoQ2xpZW50IGluc3RhbmNlLCBjYWxsIHRoZQorICoge0BsaW5rICNkaXNjb25uZWN0KCl9IG1ldGhvZCB0byByZWxlYXNlIHRoZSBjb25uZWN0aW9uLgorICogPHA+CisgKiBJbiB0aGUgcmFyZSBjYXNlIG9mIGEgY2hhbmdlIHRvIHRoZSBzZXQgb2YgYXZhaWxhYmxlIHZvaWNlcywgdGhlIHNlcnZpY2Ugd2lsbCBjYWxsIHRvIHRoZQorICoge0BsaW5rIENvbm5lY3Rpb25DYWxsYmFja3Mjb25FbmdpbmVTdGF0dXNDaGFuZ2V9IHdpdGggbmV3IHNldCBvZiBhdmFpbGFibGUgdm9pY2VzIGFzIGFyZ3VtZW50LgorICogSW4gcmVzcG9uc2UsIHRoZSBjbGllbnQgSEFWRSB0byByZWNyZWF0ZSBhbGwge0BsaW5rIFJlcXVlc3RDb25maWd9IGluc3RhbmNlcyBpbiB1c2UuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBUZXh0VG9TcGVlY2hDbGllbnQgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSBUZXh0VG9TcGVlY2hDbGllbnQuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpOworCisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbUxvY2sgPSBuZXcgT2JqZWN0KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBUdHNFbmdpbmVzIG1FbmdpbmVzSGVscGVyOworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKKworICAgIC8vIEd1YXJkZWQgYnkgbUxvY2sKKyAgICBwcml2YXRlIENvbm5lY3Rpb24gbVNlcnZpY2VDb25uZWN0aW9uOworICAgIHByaXZhdGUgZmluYWwgUmVxdWVzdENhbGxiYWNrcyBtRGVmYXVsdFJlcXVlc3RDYWxsYmFja3M7CisgICAgcHJpdmF0ZSBmaW5hbCBDb25uZWN0aW9uQ2FsbGJhY2tzIG1Db25uZWN0aW9uQ2FsbGJhY2tzOworICAgIHByaXZhdGUgRW5naW5lU3RhdHVzIG1FbmdpbmVTdGF0dXM7CisgICAgcHJpdmF0ZSBTdHJpbmcgbVJlcXVlc3RlZEVuZ2luZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUZhbGxiYWNrVG9EZWZhdWx0OworICAgIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcsIFBhaXI8VXR0ZXJhbmNlSWQsIFJlcXVlc3RDYWxsYmFja3M+PiBtQ2FsbGJhY2tzOworICAgIC8vIEd1YXJkZWQgYnkgbUxvY2sKKworICAgIC8qKiBDb21tb24gdm9pY2VzIHBhcmFtZXRlcnMgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFBhcmFtcyB7CisgICAgICAgIHByaXZhdGUgUGFyYW1zKCkge30KKworICAgICAgICAvKioKKyAgICAgICAgICogTWF4aW11bSBhbGxvd2VkIHRpbWUgZm9yIGEgc2luZ2xlIHJlcXVlc3QgYXR0ZW1wdCwgaW4gbWlsbGlzZWNvbmRzLCBiZWZvcmUgc3ludGhlc2lzCisgICAgICAgICAqIGZhaWxzIChvciBmYWxsYmFjayByZXF1ZXN0IHN0YXJ0cywgaWYgcmVxdWVzdGVkIHVzaW5nCisgICAgICAgICAqIHtAbGluayAjRkFMTEJBQ0tfVk9JQ0VfTkFNRX0pLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVUV09SS19USU1FT1VUX01TID0gIm5ldHdvcmtUaW1lb3V0TXMiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBOdW1iZXIgb2YgbmV0d29yayByZXF1ZXN0IHJldHJpZXMgdGhhdCBhcmUgYXR0ZW1wdGVkIGluIGNhc2Ugb2YgZmFpbHVyZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVUV09SS19SRVRSSUVTX0NPVU5UID0gIm5ldHdvcmtSZXRyaWVzQ291bnQiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBTaG91bGQgc3ludGhlc2l6ZXIgcmVwb3J0IHN1Yi11dHRlcmFuY2UgcHJvZ3Jlc3Mgb24gc3ludGhlc2lzLiBPbmx5IGFwcGxpY2FibGUKKyAgICAgICAgICogZm9yIHRoZSB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50I3F1ZXVlU3BlYWt9IG1ldGhvZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNLX1NVQlVUVEVSQU5DRV9QUk9HUkVTUyA9ICJ0cmFja1N1YnV0dGVyYW5jZVByb2dyZXNzIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogSWYgYSB2b2ljZSBleHBvc2VzIHRoaXMgcGFyYW1ldGVyIHRoZW4gaXQgc3VwcG9ydHMgdGhlIGZhbGxiYWNrIHJlcXVlc3QgZmVhdHVyZS4KKyAgICAgICAgICoKKyAgICAgICAgICogSWYgaXQgaXMgc2V0IHRvIGEgdmFsaWQgbmFtZSBvZiBzb21lIG90aGVyIHZvaWNlICh7QGxpbmsgVm9pY2VJbmZvI2dldE5hbWUoKX0pIHRoZW4KKyAgICAgICAgICogaW4gY2FzZSBvZiByZXF1ZXN0IGZhaWx1cmUgKGR1ZSB0byBuZXR3b3JrIHByb2JsZW1zIG9yIG1pc3NpbmcgZGF0YSksIGZhbGxiYWNrIHJlcXVlc3QKKyAgICAgICAgICogd2lsbCBiZSBhdHRlbXB0ZWQuIFJlcXVlc3Qgd2lsbCBiZSBkb25lIHVzaW5nIHRoZSB2b2ljZSByZWZlcmVuY2VkIGJ5IHRoaXMgcGFyYW1ldGVyLgorICAgICAgICAgKiBJZiBpdCBpcyB0aGUgY2FzZSwgdGhlIGNsaWVudCB3aWxsIGJlIGluZm9ybWVkIGJ5IGEgY2FsbGJhY2sgdG8gdGhlIHtAbGluaworICAgICAgICAgKiBSZXF1ZXN0Q2FsbGJhY2tzI29uU3ludGhlc2lzRmFsbGJhY2soVXR0ZXJhbmNlSWQpfS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZBTExCQUNLX1ZPSUNFX05BTUUgPSAiZmFsbGJhY2tWb2ljZU5hbWUiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBBdWRpbyBwYXJhbWV0ZXIgZm9yIHNwZWNpZnlpbmcgYSBsaW5lYXIgbXVsdGlwbGllciB0byB0aGUgc3BlYWtpbmcgc3BlZWQgb2YgdGhlIHZvaWNlLgorICAgICAgICAgKiBUaGUgdmFsdWUgaXMgYSBmbG9hdC4gVmFsdWVzIGJlbG93IHplcm8gZGVjcmVhc2Ugc3BlZWQgb2YgdGhlIHN5bnRoZXNpemVkIHNwZWVjaAorICAgICAgICAgKiB2YWx1ZXMgYWJvdmUgb25lIGluY3JlYXNlIGl0LiBJZiB0aGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgZXF1YWwgdG8gemVybywKKyAgICAgICAgICogdGhlbiBpdCB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgc2V0dGluZ3MtY29uZmlndXJhYmxlIGRlZmF1bHQgYmVmb3JlIGl0IHJlYWNoZXMKKyAgICAgICAgICogVFRTIHNlcnZpY2UuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTUEVFQ0hfU1BFRUQgPSAic3BlZWNoU3BlZWQiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBBdWRpbyBwYXJhbWV0ZXIgZm9yIGNvbnRyb2xsaW5nIHRoZSBwaXRjaCBvZiB0aGUgb3V0cHV0LiBUaGUgVmFsdWUgaXMgYSBwb3NpdGl2ZSBmbG9hdCwKKyAgICAgICAgICogd2l0aCBkZWZhdWx0IG9mIHtAY29kZSAxLjB9LiBUaGUgdmFsdWUgaXMgdXNlZCB0byBzY2FsZSB0aGUgcHJpbWFyeSBmcmVxdWVuY3kgbGluZWFybHkuCisgICAgICAgICAqIExvd2VyIHZhbHVlcyBsb3dlciB0aGUgdG9uZSBvZiB0aGUgc3ludGhlc2l6ZWQgdm9pY2UsIGdyZWF0ZXIgdmFsdWVzIGluY3JlYXNlIGl0LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BFRUNIX1BJVENIID0gInNwZWVjaFBpdGNoIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogQXVkaW8gcGFyYW1ldGVyIGZvciBjb250cm9sbGluZyBvdXRwdXQgdm9sdW1lLiBWYWx1ZSBpcyBhIGZsb2F0IHdpdGggc2NhbGUgb2YgMCB0byAxCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVURJT19QQVJBTV9WT0xVTUUgPSBUZXh0VG9TcGVlY2guRW5naW5lLktFWV9QQVJBTV9WT0xVTUU7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEF1ZGlvIHBhcmFtZXRlciBmb3IgY29udHJvbGxpbmcgb3V0cHV0IHBhbi4KKyAgICAgICAgICogVmFsdWUgaXMgYSBmbG9hdCByYW5naW5nIGZyb20gLTEgdG8gKzEgd2hlcmUgLTEgbWFwcyB0byBhIGhhcmQtbGVmdCBwYW4sCisgICAgICAgICAqIDAgdG8gY2VudGVyICh0aGUgZGVmYXVsdCBiZWhhdmlvciksIGFuZCArMSB0byBoYXJkLXJpZ2h0LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fUEFSQU1fUEFOID0gVGV4dFRvU3BlZWNoLkVuZ2luZS5LRVlfUEFSQU1fUEFOOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBBdWRpbyBwYXJhbWV0ZXIgZm9yIHNwZWNpZnlpbmcgdGhlIGF1ZGlvIHN0cmVhbSB0eXBlIHRvIGJlIHVzZWQgd2hlbiBzcGVha2luZyB0ZXh0CisgICAgICAgICAqIG9yIHBsYXlpbmcgYmFjayBhIGZpbGUuIFRoZSB2YWx1ZSBzaG91bGQgYmUgb25lIG9mIHRoZSBTVFJFQU1fIGNvbnN0YW50cworICAgICAgICAgKiBkZWZpbmVkIGluIHtAbGluayBBdWRpb01hbmFnZXJ9LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fUEFSQU1fU1RSRUFNID0gVGV4dFRvU3BlZWNoLkVuZ2luZS5LRVlfUEFSQU1fU1RSRUFNOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc3VsdCBjb2RlcyBmb3IgVFRTIG9wZXJhdGlvbnMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBTdGF0dXMgeworICAgICAgICBwcml2YXRlIFN0YXR1cygpIHt9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlbm90ZXMgYSBzdWNjZXNzZnVsIG9wZXJhdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVQ0NFU1MgPSAwOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZW5vdGVzIGEgc3RvcCByZXF1ZXN0ZWQgYnkgYSBjbGllbnQuIEl0J3MgdXNlZCBvbmx5IG9uIHRoZSBzZXJ2aWNlIHNpZGUgb2YgdGhlIEFQSSwKKyAgICAgICAgICogY2xpZW50IHNob3VsZCBuZXZlciBleHBlY3QgdG8gc2VlIHRoaXMgcmVzdWx0IGNvZGUuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVE9QUEVEID0gMTAwOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZW5vdGVzIGEgZ2VuZXJpYyBmYWlsdXJlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfVU5LTk9XTiA9IC0xOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZW5vdGVzIGEgZmFpbHVyZSBvZiBhIFRUUyBlbmdpbmUgdG8gc3ludGhlc2l6ZSB0aGUgZ2l2ZW4gaW5wdXQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9TWU5USEVTSVMgPSAxMDsKKworICAgICAgICAvKioKKyAgICAgICAgICogRGVub3RlcyBhIGZhaWx1cmUgb2YgYSBUVFMgc2VydmljZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX1NFUlZJQ0UgPSAxMTsKKworICAgICAgICAvKioKKyAgICAgICAgICogRGVub3RlcyBhIGZhaWx1cmUgcmVsYXRlZCB0byB0aGUgb3V0cHV0IChhdWRpbyBkZXZpY2Ugb3IgYSBmaWxlKS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX09VVFBVVCA9IDEyOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZW5vdGVzIGEgZmFpbHVyZSBjYXVzZWQgYnkgYSBuZXR3b3JrIGNvbm5lY3Rpdml0eSBwcm9ibGVtcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX05FVFdPUksgPSAxMzsKKworICAgICAgICAvKioKKyAgICAgICAgICogRGVub3RlcyBhIGZhaWx1cmUgY2F1c2VkIGJ5IG5ldHdvcmsgdGltZW91dC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX05FVFdPUktfVElNRU9VVCA9IDE0OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZW5vdGVzIGEgZmFpbHVyZSBjYXVzZWQgYnkgYW4gaW52YWxpZCByZXF1ZXN0LgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfSU5WQUxJRF9SRVFVRVNUID0gMTU7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlbm90ZXMgYSBmYWlsdXJlIHJlbGF0ZWQgdG8gcGFzc2luZyBhIG5vbi11bmlxdWUgdXR0ZXJhbmNlIGlkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfTk9OX1VOSVFVRV9VVFRFUkFOQ0VfSUQgPSAxNjsKKworICAgICAgICAvKioKKyAgICAgICAgICogRGVub3RlcyBhIGZhaWx1cmUgcmVsYXRlZCB0byBtaXNzaW5nIGRhdGEuIFRoZSBUVFMgaW1wbGVtZW50YXRpb24gbWF5IGRvd25sb2FkCisgICAgICAgICAqIHRoZSBtaXNzaW5nIGRhdGEsIGFuZCBpZiBzbywgcmVxdWVzdCB3aWxsIHN1Y2NlZWQgaW4gZnV0dXJlLiBUaGlzIGVycm9yIGNhbiBvbmx5IGhhcHBlbgorICAgICAgICAgKiBmb3Igdm9pY2VzIHdpdGgge0BsaW5rIFZvaWNlSW5mbyNGRUFUVVJFX01BWV9BVVRPSU5TVEFMTH0gZmVhdHVyZS4KKyAgICAgICAgICogTm90ZTogdGhlIHJlY29tbWVuZGVkIHdheSB0byBhdm9pZCB0aGlzIGVycm9yIGlzIHRvIGNyZWF0ZSBhIHJlcXVlc3Qgd2l0aCB0aGUgZmFsbGJhY2sKKyAgICAgICAgICogdm9pY2UuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ET1dOTE9BRElOR19BRERJVElPTkFMX0RBVEEgPSAxNzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgb2YgY2FsbGJhY2tzIGZvciB0aGUgZXZlbnRzIHJlbGF0ZWQgdG8gdGhlIHByb2dyZXNzIG9mIGEgc3ludGhlc2lzIHJlcXVlc3QKKyAgICAgKiB0aHJvdWdoIHRoZSBzeW50aGVzaXMgcXVldWUuIEVhY2ggc3ludGhlc2lzIHJlcXVlc3QgaXMgYXNzb2NpYXRlZCB3aXRoIGEgY2FsbCB0bworICAgICAqIHtAbGluayAjcXVldWVTcGVha30gb3Ige0BsaW5rICNxdWV1ZVN5bnRoZXNpemVUb0ZpbGV9LgorICAgICAqCisgICAgICogVGhlIGNhbGxiYWNrcyBzcGVjaWZpZWQgaW4gdGhpcyBtZXRob2Qgd2lsbCBOT1QgYmUgY2FsbGVkIG9uIFVJIHRocmVhZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIFJlcXVlc3RDYWxsYmFja3MgIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxlZCBhZnRlciBzeW50aGVzaXMgb2YgdXR0ZXJhbmNlIHN1Y2Nlc3NmdWxseSBzdGFydHMuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvblN5bnRoZXNpc1N0YXJ0KFV0dGVyYW5jZUlkIHV0dGVyYW5jZUlkKSB7fQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgYWZ0ZXIgc3ludGhlc2lzIHN1Y2Nlc3NmdWxseSBmaW5pc2hlcy4KKyAgICAgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkCisgICAgICAgICAqICAgICAgICAgICAgVW5pcXVlIGlkZW50aWZpZXIgb2Ygc3ludGhlc2l6ZWQgdXR0ZXJhbmNlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25TeW50aGVzaXNTdWNjZXNzKFV0dGVyYW5jZUlkIHV0dGVyYW5jZUlkKSB7fQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgYWZ0ZXIgc3ludGhlc2lzIHdhcyBzdG9wcGVkIGluIG1pZGRsZSBvZiBzeW50aGVzaXMgcHJvY2Vzcy4KKyAgICAgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkCisgICAgICAgICAqICAgICAgICAgICAgVW5pcXVlIGlkZW50aWZpZXIgb2Ygc3ludGhlc2l6ZWQgdXR0ZXJhbmNlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25TeW50aGVzaXNTdG9wKFV0dGVyYW5jZUlkIHV0dGVyYW5jZUlkKSB7fQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgd2hlbiByZXF1ZXN0ZWQgc3ludGhlc2lzIGZhaWxlZCBhbmQgZmFsbGJhY2sgc3ludGhlc2lzIGlzIGFib3V0IHRvIGJlIGF0dGVtcHRlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogUmVxdWlyZXMgdm9pY2Ugd2l0aCBhdmFpbGFibGUge0BsaW5rIFRleHRUb1NwZWVjaENsaWVudC5QYXJhbXMjRkFMTEJBQ0tfVk9JQ0VfTkFNRX0KKyAgICAgICAgICogcGFyYW1ldGVyLCBhbmQgcmVxdWVzdCB3aXRoIHRoaXMgcGFyYW1ldGVyIGVuYWJsZWQuCisgICAgICAgICAqCisgICAgICAgICAqIFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBmb2xsb3dlZCBieSBjYWxsYmFjayB0byB0aGUge0BsaW5rICNvblN5bnRoZXNpc1N0YXJ0fSwKKyAgICAgICAgICoge0BsaW5rICNvblN5bnRoZXNpc0ZhaWx1cmV9IG9yIHtAbGluayAjb25TeW50aGVzaXNTdWNjZXNzfSB0aGF0IGRlcGVuZHMgb24gdGhlCisgICAgICAgICAqIGZhbGxiYWNrIG91dGNvbWUuCisgICAgICAgICAqCisgICAgICAgICAqIEZvciBtb3JlIGZhbGxiYWNrIGZlYXR1cmUgcmVmZXJlbmNlLCBsb29rIGF0IHRoZQorICAgICAgICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcyNGQUxMQkFDS19WT0lDRV9OQU1FfS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkCisgICAgICAgICAqICAgICAgICAgICAgVW5pcXVlIGlkZW50aWZpZXIgb2Ygc3ludGhlc2l6ZWQgdXR0ZXJhbmNlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25TeW50aGVzaXNGYWxsYmFjayhVdHRlcmFuY2VJZCB1dHRlcmFuY2VJZCkge30KKworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGVkIGFmdGVyIHN5bnRoZXNpcyBvZiB1dHRlcmFuY2UgZmFpbHMuCisgICAgICAgICAqCisgICAgICAgICAqIEl0IG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvciBhZnRlciBhIHtAbGluayAjb25TeW50aGVzaXNTdGFydH0gY2FsbGJhY2suCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB1dHRlcmFuY2VJZAorICAgICAgICAgKiAgICAgICAgICAgIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHN5bnRoZXNpemVkIHV0dGVyYW5jZS4KKyAgICAgICAgICogQHBhcmFtIGVycm9yQ29kZQorICAgICAgICAgKiAgICAgICAgICAgIE9uZSBvZiB0aGUgdmFsdWVzIGZyb20ge0BsaW5rIFN0YXR1c30uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvblN5bnRoZXNpc0ZhaWx1cmUoVXR0ZXJhbmNlSWQgdXR0ZXJhbmNlSWQsIGludCBlcnJvckNvZGUpIHt9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxlZCBkdXJpbmcgc3ludGhlc2lzIHRvIG1hcmsgc3ludGhlc2lzIHByb2dyZXNzLgorICAgICAgICAgKgorICAgICAgICAgKiBSZXF1aXJlcyB2b2ljZSB3aXRoIGF2YWlsYWJsZQorICAgICAgICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcyNUUkFDS19TVUJVVFRFUkFOQ0VfUFJPR1JFU1N9IHBhcmFtZXRlciwgYW5kCisgICAgICAgICAqIHJlcXVlc3Qgd2l0aCB0aGlzIHBhcmFtZXRlciBlbmFibGVkLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWQKKyAgICAgICAgICogICAgICAgICAgICBVbmlxdWUgaWRlbnRpZmllciBvZiBzeW50aGVzaXplZCB1dHRlcmFuY2UuCisgICAgICAgICAqIEBwYXJhbSBjaGFySW5kZXgKKyAgICAgICAgICogICAgICAgICAgICBTdHJpbmcgaW5kZXggKGphdmEgY2hhciBvZmZzZXQpIG9mIHJlY2VudGx5IHN5bnRoZXNpemVkIGNoYXJhY3Rlci4KKyAgICAgICAgICogQHBhcmFtIG1zRnJvbVN0YXJ0CisgICAgICAgICAqICAgICAgICAgICAgTWlsaXNlY29uZHMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHN5bnRoZXNpcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU3ludGhlc2lzUHJvZ3Jlc3MoVXR0ZXJhbmNlSWQgdXR0ZXJhbmNlSWQsIGludCBjaGFySW5kZXgsIGludCBtc0Zyb21TdGFydCkge30KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbnRlcmZhY2UgZGVmaW5pdGlvbiBvZiBjYWxsYmFja3MgdGhhdCBhcmUgY2FsbGVkIHdoZW4gdGhlIGNsaWVudCBpcworICAgICAqIGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgVFRTIHNlcnZpY2UuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgQ29ubmVjdGlvbkNhbGxiYWNrcyB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBBZnRlciBjYWxsaW5nIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQjY29ubmVjdCgpfSwgdGhpcyBtZXRob2Qgd2lsbCBiZSBpbnZva2VkCisgICAgICAgICAqIGFzeW5jaHJvbm91c2x5IHdoZW4gdGhlIGNvbm5lY3QgcmVxdWVzdCBoYXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQ2xpZW50cyBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byBjYWxsIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQjZ2V0RW5naW5lU3RhdHVzKCl9CisgICAgICAgICAqIGFuZCBjcmVhdGUge0BsaW5rIFJlcXVlc3RDb25maWd9IG9iamVjdHMgdXNlZCBpbiBzdWJzZXF1ZW50IHN5bnRoZXNpcyByZXF1ZXN0cy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ29ubmVjdGlvblN1Y2Nlc3MoKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQWZ0ZXIgY2FsbGluZyB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50I2Nvbm5lY3QoKX0sIHRoaXMgbWV0aG9kIG1heSBiZSBpbnZva2VkCisgICAgICAgICAqIGFzeW5jaHJvbm91c2x5IHdoZW4gdGhlIGNvbm5lY3QgcmVxdWVzdCBoYXMgZmFpbGVkIHRvIGNvbXBsZXRlLgorICAgICAgICAgKgorICAgICAgICAgKiBJdCBtYXkgYmUgYWxzbyBpbnZva2VkIHN5bmNocm9ub3VzbHksIGZyb20gdGhlIGJvZHkgb2YKKyAgICAgICAgICoge0BsaW5rIFRleHRUb1NwZWVjaENsaWVudCNjb25uZWN0KCl9IG1ldGhvZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ29ubmVjdGlvbkZhaWx1cmUoKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZpY2UgaXMgbG9zdC4gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZXJlIGlzIGEgcHJvYmxlbQorICAgICAgICAgKiB3aXRoIHRoZSBzcGVlY2ggc2VydmljZSAoZS5nLiBhIGNyYXNoIG9yIHJlc291cmNlIHByb2JsZW0gY2F1c2VzIGl0IHRvIGJlIGtpbGxlZCBieSB0aGUKKyAgICAgICAgICogc3lzdGVtKS4gV2hlbiBjYWxsZWQsIGFsbCByZXF1ZXN0cyBoYXZlIGJlZW4gY2FuY2VsZWQgYW5kIG5vIG91dHN0YW5kaW5nIGxpc3RlbmVycyB3aWxsCisgICAgICAgICAqIGJlIGV4ZWN1dGVkLiBBcHBsaWNhdGlvbnMgc2hvdWxkIGRpc2FibGUgVUkgY29tcG9uZW50cyB0aGF0IHJlcXVpcmUgdGhlIHNlcnZpY2UuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VEaXNjb25uZWN0ZWQoKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQWZ0ZXIgcmVjZWl2aW5nIHtAbGluayAjb25Db25uZWN0aW9uU3VjY2VzcygpfSBjYWxsYmFjaywgdGhpcyBtZXRob2QgbWF5IGJlIGludm9rZWQKKyAgICAgICAgICogaWYgZW5naW5lIHN0YXR1cyBvYnRhaW5lZCBmcm9tIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQjZ2V0RW5naW5lU3RhdHVzKCl9KSBjaGFuZ2VzLgorICAgICAgICAgKiBJdCB1c3VhbGx5IG1lYW5zIHRoYXQgc29tZSB2b2ljZXMgd2VyZSByZW1vdmVkLCBjaGFuZ2VkIG9yIGFkZGVkLgorICAgICAgICAgKgorICAgICAgICAgKiBDbGllbnRzIGFyZSByZXF1aXJlZCB0byByZWNyZWF0ZSB7QGxpbmsgUmVxdWVzdENvbmZpZ30gb2JqZWN0cyB1c2VkIGluIHN1YnNlcXVlbnQKKyAgICAgICAgICogc3ludGhlc2lzIHJlcXVlc3RzLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25FbmdpbmVTdGF0dXNDaGFuZ2UoRW5naW5lU3RhdHVzIG5ld0VuZ2luZVN0YXR1cyk7CisgICAgfQorCisgICAgLyoqIFN0YXRlIG9mIHZvaWNlcyBhcyBwcm92aWRlZCBieSBlbmdpbmUgYW5kIHVzZXIuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBFbmdpbmVTdGF0dXMgeworICAgICAgICAvKiogQWxsIGF2YWlsYWJsZSB2b2ljZXMuICovCisgICAgICAgIHByaXZhdGUgZmluYWwgTGlzdDxWb2ljZUluZm8+IG1Wb2ljZXM7CisKKyAgICAgICAgLyoqIE5hbWUgb2YgdGhlIFRUUyBlbmdpbmUgcGFja2FnZSAqLworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtUGFja2FnZU5hbWU7CisKKyAgICAgICAgcHJpdmF0ZSBFbmdpbmVTdGF0dXMoU3RyaW5nIHBhY2thZ2VOYW1lLCBMaXN0PFZvaWNlSW5mbz4gdm9pY2VzKSB7CisgICAgICAgICAgICB0aGlzLm1Wb2ljZXMgPSAgQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdCh2b2ljZXMpOworICAgICAgICAgICAgdGhpcy5tUGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgYW4gaW1tdXRhYmxlIGxpc3Qgb2YgYWxsIFZvaWNlcyBleHBvc2VkIGJ5IHRoZSBUVFMgZW5naW5lLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIExpc3Q8Vm9pY2VJbmZvPiBnZXRWb2ljZXMoKSB7CisgICAgICAgICAgICByZXR1cm4gbVZvaWNlczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXQgbmFtZSBvZiB0aGUgVFRTIGVuZ2luZSBwYWNrYWdlIGN1cnJlbnRseSBpbiB1c2UuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldEVuZ2luZVBhY2thZ2UoKSB7CisgICAgICAgICAgICByZXR1cm4gbVBhY2thZ2VOYW1lOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIFVuaXF1ZSBzeW50aGVzaXMgcmVxdWVzdCBpZGVudGlmaWVyLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgVXR0ZXJhbmNlSWQgeworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtRGVzY3JpcHRpb247CisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGUgbmV3LCB1bmlxdWUgVXR0ZXJhbmNlSWQgaW5zdGFuY2UuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgVXR0ZXJhbmNlSWQoKSB7CisgICAgICAgICAgICBtRGVzY3JpcHRpb24gPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZSBuZXcsIHVuaXF1ZSBVdHRlcmFuY2VJZCBpbnN0YW5jZS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIEFkZGl0aW9uYWwgc3RyaW5nLCB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8KKyAgICAgICAgICoge0BsaW5rICN0b1VuaXF1ZVN0cmluZygpfSBvdXRwdXQsIGFsbG93aW5nIGVhc2llciBpZGVudGlmaWNhdGlvbiBvZiB0aGUgdXR0ZXJhbmNlIGluCisgICAgICAgICAqIGNhbGxiYWNrcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBVdHRlcmFuY2VJZChTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgIG1EZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgYSB1bmlxdWUgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiB0aGlzIG9iamVjdC4KKyAgICAgICAgICoKKyAgICAgICAgICogSWYgeW91IHN1YmNsYXNzIHtAbGluayBVdHRlcmFuY2VJZH0gbWFrZSBzdXJlIHRoYXQgb3V0cHV0IG9mIHRoaXMgbWV0aG9kIGlzCisgICAgICAgICAqIGNvbnNpc3RlbnQgYWNyb3NzIG11bHRpcGxlIGNhbGxzIGFuZCB1bmlxdWUgZm9yIHRoZSBpbnN0YW5jZS4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhpcyBzdHJpbmcgd2lsbCBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzeW50aGVzaXMgcmVxdWVzdC91dHRlcmFuY2UgaW5zaWRlIHRoZQorICAgICAgICAgKiBUVFMgc2VydmljZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9VbmlxdWVTdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gbURlc2NyaXB0aW9uID09IG51bGwgPyAiVXR0ZXJhbmNlSWQiICsgU3lzdGVtLmlkZW50aXR5SGFzaENvZGUodGhpcykgOgorICAgICAgICAgICAgICAgICAgICAiVXR0ZXJhbmNlSWQiICsgU3lzdGVtLmlkZW50aXR5SGFzaENvZGUodGhpcykgKyAiOiAiICsgbURlc2NyaXB0aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIFRleHRUb1NwZWVjaCBzZXJ2aWNlIGNsaWVudC4KKyAgICAgKgorICAgICAqIFdpbGwgY29ubmVjdCB0byB0aGUgZGVmYXVsdCBUVFMgc2VydmljZS4gSW4gb3JkZXIgdG8gYmUgdXNhYmxlLCB7QGxpbmsgI2Nvbm5lY3QoKX0gbmVlZAorICAgICAqIHRvIGJlIGNhbGxlZCBmaXJzdCBhbmQgc3VjY2Vzc2Z1bCBjb25uZWN0aW9uIGNhbGxiYWNrIG5lZWQgdG8gYmUgcmVjZWl2ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dAorICAgICAqICAgICAgICAgICAgVGhlIGNvbnRleHQgdGhpcyBpbnN0YW5jZSBpcyBydW5uaW5nIGluLgorICAgICAqIEBwYXJhbSBlbmdpbmUKKyAgICAgKiAgICAgICAgICAgIFBhY2thZ2UgbmFtZSBvZiByZXF1ZXN0ZWQgVFRTIGVuZ2luZS4gSWYgaXQncyBudWxsLCB0aGVuIGRlZmF1bHQgZW5naW5lIHdpbGwKKyAgICAgKiAgICAgICAgICAgIGJlIHNlbGVjdGVkIHJlZ2FyZGxlc3Mgb2Yge0Bjb2RlIGZhbGxiYWNrVG9EZWZhdWx0RW5naW5lfSBwYXJhbWV0ZXIgdmFsdWUuCisgICAgICogQHBhcmFtIGZhbGxiYWNrVG9EZWZhdWx0RW5naW5lCisgICAgICogICAgICAgICAgICBJZiByZXF1ZXN0ZWQgZW5naW5lIGlzIG5vdCBhdmFpbGFibGUsIHNob3VsZCB3ZSBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBlbmdpbmU/CisgICAgICogQHBhcmFtIGRlZmF1bHRSZXF1ZXN0Q2FsbGJhY2tzCisgICAgICogICAgICAgICAgICBEZWZhdWx0IHJlcXVlc3QgY2FsbGJhY2tzLCBpdCB3aWxsIGJlIHVzZWQgZm9yIGFsbCBzeW50aGVzaXMgcmVxdWVzdHMgd2l0aG91dAorICAgICAqICAgICAgICAgICAgc3VwcGxpZWQgUmVxdWVzdENhbGxiYWNrcyBpbnN0YW5jZS4gQ2FuJ3QgYmUgbnVsbC4KKyAgICAgKiBAcGFyYW0gY29ubmVjdGlvbkNhbGxiYWNrcworICAgICAqICAgICAgICAgICAgQ2FsbGJhY2tzIGZvciBjb25uZWN0aW5nIGFuZCBkaXNjb25uZWN0aW5nIGZyb20gdGhlIHNlcnZpY2UuIENhbid0IGJlIG51bGwuCisgICAgICovCisgICAgcHVibGljIFRleHRUb1NwZWVjaENsaWVudChDb250ZXh0IGNvbnRleHQsCisgICAgICAgICAgICBTdHJpbmcgZW5naW5lLCBib29sZWFuIGZhbGxiYWNrVG9EZWZhdWx0RW5naW5lLAorICAgICAgICAgICAgUmVxdWVzdENhbGxiYWNrcyBkZWZhdWx0UmVxdWVzdENhbGxiYWNrcywKKyAgICAgICAgICAgIENvbm5lY3Rpb25DYWxsYmFja3MgY29ubmVjdGlvbkNhbGxiYWNrcykgeworICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29udGV4dCBjYW4ndCBiZSBudWxsIik7CisgICAgICAgIGlmIChkZWZhdWx0UmVxdWVzdENhbGxiYWNrcyA9PSBudWxsKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZGVmYXVsdFJlcXVlc3RDYWxsYmFja3MgY2FuJ3QgYmUgbnVsbCIpOworICAgICAgICBpZiAoY29ubmVjdGlvbkNhbGxiYWNrcyA9PSBudWxsKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29ubmVjdGlvbkNhbGxiYWNrcyBjYW4ndCBiZSBudWxsIik7CisgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgbUVuZ2luZXNIZWxwZXIgPSBuZXcgVHRzRW5naW5lcyhtQ29udGV4dCk7CisgICAgICAgIG1DYWxsYmFja3MgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFBhaXI8VXR0ZXJhbmNlSWQsIFJlcXVlc3RDYWxsYmFja3M+PigpOworICAgICAgICBtRGVmYXVsdFJlcXVlc3RDYWxsYmFja3MgPSBkZWZhdWx0UmVxdWVzdENhbGxiYWNrczsKKyAgICAgICAgbUNvbm5lY3Rpb25DYWxsYmFja3MgPSBjb25uZWN0aW9uQ2FsbGJhY2tzOworCisgICAgICAgIG1SZXF1ZXN0ZWRFbmdpbmUgPSBlbmdpbmU7CisgICAgICAgIG1GYWxsYmFja1RvRGVmYXVsdCA9IGZhbGxiYWNrVG9EZWZhdWx0RW5naW5lOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBUZXh0VG9TcGVlY2ggc2VydmljZSBjbGllbnQuIFdpbGwgY29ubmVjdCB0byB0aGUgZGVmYXVsdCBUVFMKKyAgICAgKiBzZXJ2aWNlLiBJbiBvcmRlciB0byBiZSB1c2FibGUsIHtAbGluayAjY29ubmVjdCgpfSBuZWVkIHRvIGJlIGNhbGxlZAorICAgICAqIGZpcnN0IGFuZCBzdWNjZXNzZnVsIGNvbm5lY3Rpb24gY2FsbGJhY2sgbmVlZCB0byBiZSByZWNlaXZlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdGhpcyBpbnN0YW5jZSBpcyBydW5uaW5nIGluLgorICAgICAqIEBwYXJhbSBkZWZhdWx0UmVxdWVzdENhbGxiYWNrcyBEZWZhdWx0IHJlcXVlc3QgY2FsbGJhY2tzLCBpdAorICAgICAqICAgICAgICAgICAgd2lsbCBiZSB1c2VkIGZvciBhbGwgc3ludGhlc2lzIHJlcXVlc3RzIHdpdGhvdXQgc3VwcGxpZWQKKyAgICAgKiAgICAgICAgICAgIFJlcXVlc3RDYWxsYmFja3MgaW5zdGFuY2UuIENhbid0IGJlIG51bGwuCisgICAgICogQHBhcmFtIGNvbm5lY3Rpb25DYWxsYmFja3MgQ2FsbGJhY2tzIGZvciBjb25uZWN0aW5nIGFuZCBkaXNjb25uZWN0aW5nCisgICAgICogICAgICAgICAgICBmcm9tIHRoZSBzZXJ2aWNlLiBDYW4ndCBiZSBudWxsLgorICAgICAqLworICAgIHB1YmxpYyBUZXh0VG9TcGVlY2hDbGllbnQoQ29udGV4dCBjb250ZXh0LCBSZXF1ZXN0Q2FsbGJhY2tzIGRlZmF1bHRSZXF1ZXN0Q2FsbGJhY2tzLAorICAgICAgICAgICAgQ29ubmVjdGlvbkNhbGxiYWNrcyBjb25uZWN0aW9uQ2FsbGJhY2tzKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCwgdHJ1ZSwgZGVmYXVsdFJlcXVlc3RDYWxsYmFja3MsIGNvbm5lY3Rpb25DYWxsYmFja3MpOworICAgIH0KKworCisgICAgcHJpdmF0ZSBib29sZWFuIGluaXRUdHMoU3RyaW5nIHJlcXVlc3RlZEVuZ2luZSwgYm9vbGVhbiBmYWxsYmFja1RvRGVmYXVsdEVuZ2luZSkgeworICAgICAgICAvLyBTdGVwIDE6IFRyeSBjb25uZWN0aW5nIHRvIHRoZSBlbmdpbmUgdGhhdCB3YXMgcmVxdWVzdGVkLgorICAgICAgICBpZiAocmVxdWVzdGVkRW5naW5lICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChtRW5naW5lc0hlbHBlci5pc0VuZ2luZUluc3RhbGxlZChyZXF1ZXN0ZWRFbmdpbmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKChtU2VydmljZUNvbm5lY3Rpb24gPSBjb25uZWN0VG9FbmdpbmUocmVxdWVzdGVkRW5naW5lKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmYWxsYmFja1RvRGVmYXVsdEVuZ2luZSkgeworICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZG4ndCBjb25uZWN0IHRvIHJlcXVlc3RlZCBlbmdpbmU6ICIgKyByZXF1ZXN0ZWRFbmdpbmUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICghZmFsbGJhY2tUb0RlZmF1bHRFbmdpbmUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJSZXF1ZXN0ZWQgZW5naW5lIG5vdCBpbnN0YWxsZWQ6ICIgKyByZXF1ZXN0ZWRFbmdpbmUpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0ZXAgMjogVHJ5IGNvbm5lY3RpbmcgdG8gdGhlIHVzZXIncyBkZWZhdWx0IGVuZ2luZS4KKyAgICAgICAgZmluYWwgU3RyaW5nIGRlZmF1bHRFbmdpbmUgPSBtRW5naW5lc0hlbHBlci5nZXREZWZhdWx0RW5naW5lKCk7CisgICAgICAgIGlmIChkZWZhdWx0RW5naW5lICE9IG51bGwgJiYgIWRlZmF1bHRFbmdpbmUuZXF1YWxzKHJlcXVlc3RlZEVuZ2luZSkpIHsKKyAgICAgICAgICAgIGlmICgobVNlcnZpY2VDb25uZWN0aW9uID0gY29ubmVjdFRvRW5naW5lKGRlZmF1bHRFbmdpbmUpKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTdGVwIDM6IFRyeSBjb25uZWN0aW5nIHRvIHRoZSBoaWdoZXN0IHJhbmtlZCBlbmdpbmUgaW4gdGhlCisgICAgICAgIC8vIHN5c3RlbS4KKyAgICAgICAgZmluYWwgU3RyaW5nIGhpZ2hlc3RSYW5rZWQgPSBtRW5naW5lc0hlbHBlci5nZXRIaWdoZXN0UmFua2VkRW5naW5lTmFtZSgpOworICAgICAgICBpZiAoaGlnaGVzdFJhbmtlZCAhPSBudWxsICYmICFoaWdoZXN0UmFua2VkLmVxdWFscyhyZXF1ZXN0ZWRFbmdpbmUpICYmCisgICAgICAgICAgICAgICAgIWhpZ2hlc3RSYW5rZWQuZXF1YWxzKGRlZmF1bHRFbmdpbmUpKSB7CisgICAgICAgICAgICBpZiAoKG1TZXJ2aWNlQ29ubmVjdGlvbiA9IGNvbm5lY3RUb0VuZ2luZShoaWdoZXN0UmFua2VkKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTG9nLncoVEFHLCAiQ291bGRuJ3QgZmluZCB3b3JraW5nIFRUUyBlbmdpbmUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgQ29ubmVjdGlvbiBjb25uZWN0VG9FbmdpbmUoU3RyaW5nIGVuZ2luZSkgeworICAgICAgICBDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihlbmdpbmUpOworICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChUZXh0VG9TcGVlY2guRW5naW5lLklOVEVOVF9BQ1RJT05fVFRTX1NFUlZJQ0UpOworICAgICAgICBpbnRlbnQuc2V0UGFja2FnZShlbmdpbmUpOworICAgICAgICBib29sZWFuIGJvdW5kID0gbUNvbnRleHQuYmluZFNlcnZpY2UoaW50ZW50LCBjb25uZWN0aW9uLCBDb250ZXh0LkJJTkRfQVVUT19DUkVBVEUpOworICAgICAgICBpZiAoIWJvdW5kKSB7CisgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gYmluZCB0byAiICsgZW5naW5lKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTG9nLmkoVEFHLCAiU3VjY2Vzc2Z1bGx5IGJvdW5kIHRvICIgKyBlbmdpbmUpOworICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENvbm5lY3RzIHRoZSBjbGllbnQgdG8gVFRTIHNlcnZpY2UuIFRoaXMgbWV0aG9kIHJldHVybnMgaW1tZWRpYXRlbHksIGFuZCBjb25uZWN0cyB0byB0aGUKKyAgICAgKiBzZXJ2aWNlIGluIHRoZSBiYWNrZ3JvdW5kLgorICAgICAqCisgICAgICogQWZ0ZXIgY29ubmVjdGlvbiBpbml0aWFsaXplcyBzdWNjZXNzZnVsbHksIHtAbGluayBDb25uZWN0aW9uQ2FsbGJhY2tzI29uQ29ubmVjdGlvblN1Y2Nlc3MoKX0KKyAgICAgKiBpcyBjYWxsZWQuIE9uIGEgZmFpbHVyZSB7QGxpbmsgQ29ubmVjdGlvbkNhbGxiYWNrcyNvbkNvbm5lY3Rpb25GYWlsdXJlfSBpcyBjYWxsZWQuCisgICAgICoKKyAgICAgKiBCb3RoIG9mIHRob3NlIGNhbGxiYWNrIG1heSBiZSBjYWxsZWQgYXN5bmNocm9ub3VzbHkgb24gdGhlIG1haW4gdGhyZWFkLAorICAgICAqIHtAbGluayBDb25uZWN0aW9uQ2FsbGJhY2tzI29uQ29ubmVjdGlvbkZhaWx1cmV9IG1heSBiZSBjYWxsZWQgc3luY2hyb25vdXNseSwgYmVmb3JlCisgICAgICogdGhpcyBtZXRob2QgcmV0dXJucy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb25uZWN0KCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBpZiAobVNlcnZpY2VDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZighaW5pdFR0cyhtUmVxdWVzdGVkRW5naW5lLCBtRmFsbGJhY2tUb0RlZmF1bHQpKSB7CisgICAgICAgICAgICAgICAgbUNvbm5lY3Rpb25DYWxsYmFja3Mub25Db25uZWN0aW9uRmFpbHVyZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBjbGllbnQgaXMgY3VycmVudGx5IGNvbm5lY3RlZCB0byB0aGUgc2VydmljZSwgc28gdGhhdAorICAgICAqIHJlcXVlc3RzIHRvIG90aGVyIG1ldGhvZHMgd2lsbCBzdWNjZWVkLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQ29ubmVjdGVkKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2VDb25uZWN0aW9uICE9IG51bGwgJiYgbVNlcnZpY2VDb25uZWN0aW9uLmlzRXN0YWJsaXNoZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENsb3NlcyB0aGUgY29ubmVjdGlvbiB0byBUZXh0VG9TcGVlY2ggc2VydmljZS4gTm8gY2FsbHMgY2FuIGJlIG1hZGUgb24gdGhpcyBvYmplY3QgYWZ0ZXIKKyAgICAgKiBjYWxsaW5nIHRoaXMgbWV0aG9kLgorICAgICAqIEl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gY2FsbCB0aGlzIG1ldGhvZCBpbiB0aGUgb25EZXN0cm95KCkgbWV0aG9kIG9mIGFuIEFjdGl2aXR5CisgICAgICogc28gdGhlIFRleHRUb1NwZWVjaCBlbmdpbmUgY2FuIGJlIGNsZWFubHkgc3RvcHBlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0KCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBpZiAobVNlcnZpY2VDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtU2VydmljZUNvbm5lY3Rpb24uZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgIG1TZXJ2aWNlQ29ubmVjdGlvbiA9IG51bGw7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrcy5jbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVnaXN0ZXIgY2FsbGJhY2suCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWQgTm9uLW51bGwgVXR0ZXJhbmNlSWQgaW5zdGFuY2UuCisgICAgICogQHBhcmFtIGNhbGxiYWNrIE5vbi1udWxsIGNhbGxiYWNrcyBmb3IgdGhlIHJlcXVlc3QKKyAgICAgKiBAcmV0dXJuIFN0YXR1cy5TVUNDRVNTIG9yIGVycm9yIGNvZGUgaW4gY2FzZSBvZiBpbnZhbGlkIGFyZ3VtZW50cy4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBhZGRDYWxsYmFjayhVdHRlcmFuY2VJZCB1dHRlcmFuY2VJZCwgUmVxdWVzdENhbGxiYWNrcyBjYWxsYmFjaykgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBpZiAodXR0ZXJhbmNlSWQgPT0gbnVsbCB8fCBjYWxsYmFjayA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5FUlJPUl9JTlZBTElEX1JFUVVFU1Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobUNhbGxiYWNrcy5wdXQodXR0ZXJhbmNlSWQudG9VbmlxdWVTdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFBhaXI8VXR0ZXJhbmNlSWQsIFJlcXVlc3RDYWxsYmFja3M+KHV0dGVyYW5jZUlkLCBjYWxsYmFjaykpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzLkVSUk9SX05PTl9VTklRVUVfVVRURVJBTkNFX0lEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5TVUNDRVNTOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlIGFuZCByZXR1cm4gY2FsbGJhY2suCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWRTdHIgVW5pcXVlIHN0cmluZyBvYnRhaW5lZCBmcm9tIHtAbGluayBVdHRlcmFuY2VJZCN0b1VuaXF1ZVN0cmluZ30uCisgICAgICovCisgICAgcHJpdmF0ZSBQYWlyPFV0dGVyYW5jZUlkLCBSZXF1ZXN0Q2FsbGJhY2tzPiByZW1vdmVDYWxsYmFjayhTdHJpbmcgdXR0ZXJhbmNlSWRTdHIpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG1DYWxsYmFja3MucmVtb3ZlKHV0dGVyYW5jZUlkU3RyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBjYWxsYmFjayBhbmQgdXR0ZXJhbmNlIGlkLgorICAgICAqCisgICAgICogQHBhcmFtIHV0dGVyYW5jZUlkU3RyIFVuaXF1ZSBzdHJpbmcgb2J0YWluZWQgZnJvbSB7QGxpbmsgVXR0ZXJhbmNlSWQjdG9VbmlxdWVTdHJpbmd9LgorICAgICAqLworICAgIHByaXZhdGUgUGFpcjxVdHRlcmFuY2VJZCwgUmVxdWVzdENhbGxiYWNrcz4gZ2V0Q2FsbGJhY2soU3RyaW5nIHV0dGVyYW5jZUlkU3RyKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgIHJldHVybiBtQ2FsbGJhY2tzLmdldCh1dHRlcmFuY2VJZFN0cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgY2FsbGJhY2sgYW5kIGNhbGwge0BsaW5rIFJlcXVlc3RDYWxsYmFja3Mjb25TeW50aGVzaXNGYWlsdXJlfSB3aXRoIHBhc3NlZAorICAgICAqIGVycm9yIGNvZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWRTdHIgVW5pcXVlIHN0cmluZyBvYnRhaW5lZCBmcm9tIHtAbGluayBVdHRlcmFuY2VJZCN0b1VuaXF1ZVN0cmluZ30uCisgICAgICogQHBhcmFtIGVycm9yQ29kZSBhcmd1bWVudCB0byB7QGxpbmsgUmVxdWVzdENhbGxiYWNrcyNvblN5bnRoZXNpc0ZhaWx1cmV9IGNhbGwuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHJlbW92ZUNhbGxiYWNrQW5kRXJyKFN0cmluZyB1dHRlcmFuY2VJZFN0ciwgaW50IGVycm9yQ29kZSkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBQYWlyPFV0dGVyYW5jZUlkLCBSZXF1ZXN0Q2FsbGJhY2tzPiBjID0gbUNhbGxiYWNrcy5yZW1vdmUodXR0ZXJhbmNlSWRTdHIpOworICAgICAgICAgICAgYy5zZWNvbmQub25TeW50aGVzaXNGYWlsdXJlKGMuZmlyc3QsIGVycm9yQ29kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZSBUVFMgZW5naW5lIHN0YXR1cyB7QGxpbmsgRW5naW5lU3RhdHVzfS4gUmVxdWlyZXMgY29ubmVjdGVkIGNsaWVudC4KKyAgICAgKi8KKyAgICBwdWJsaWMgRW5naW5lU3RhdHVzIGdldEVuZ2luZVN0YXR1cygpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIG1FbmdpbmVTdGF0dXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBRdWVyeSBUVFMgZW5naW5lIGFib3V0IGF2YWlsYWJsZSB2b2ljZXMgYW5kIGRlZmF1bHRzLgorICAgICAqCisgICAgICogQHJldHVybiBFbmdpbmVTdGF0dXMgaXMgY29ubmVjdGVkIG9yIG51bGwgaWYgY2xpZW50IGlzIGRpc2Nvbm5lY3RlZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIEVuZ2luZVN0YXR1cyByZXF1ZXN0RW5naW5lU3RhdHVzKElUZXh0VG9TcGVlY2hTZXJ2aWNlIHNlcnZpY2UpCisgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgTGlzdDxWb2ljZUluZm8+IHZvaWNlcyA9IHNlcnZpY2UuZ2V0Vm9pY2VzSW5mbygpOworICAgICAgICBpZiAodm9pY2VzID09IG51bGwpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIlJlcXVlc3RlZCBlbmdpbmUgZG9lc24ndCBzdXBwb3J0IFRUUyBWMiBBUEkiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBFbmdpbmVTdGF0dXMobVNlcnZpY2VDb25uZWN0aW9uLmdldEVuZ2luZU5hbWUoKSwgdm9pY2VzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIENvbm5lY3Rpb24gaW1wbGVtZW50cyBTZXJ2aWNlQ29ubmVjdGlvbiB7CisgICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1FbmdpbmVOYW1lOworCisgICAgICAgIHByaXZhdGUgSVRleHRUb1NwZWVjaFNlcnZpY2UgbVNlcnZpY2U7CisKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Fc3RhYmxpc2hlZDsKKworICAgICAgICBwcml2YXRlIFByZXBhcmVDb25uZWN0aW9uQXN5bmNUYXNrIG1TZXR1cENvbm5lY3Rpb25Bc3luY1Rhc2s7CisKKyAgICAgICAgcHVibGljIENvbm5lY3Rpb24oU3RyaW5nIGVuZ2luZU5hbWUpIHsKKyAgICAgICAgICAgIHRoaXMubUVuZ2luZU5hbWUgPSBlbmdpbmVOYW1lOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBJVGV4dFRvU3BlZWNoQ2FsbGJhY2suU3R1YiBtQ2FsbGJhY2sgPSBuZXcgSVRleHRUb1NwZWVjaENhbGxiYWNrLlN0dWIoKSB7CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25TdGFydChTdHJpbmcgdXR0ZXJhbmNlSWRTdHIpIHsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIFBhaXI8VXR0ZXJhbmNlSWQsIFJlcXVlc3RDYWxsYmFja3M+IGNhbGxiYWNrcyA9IGdldENhbGxiYWNrKHV0dGVyYW5jZUlkU3RyKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnNlY29uZC5vblN5bnRoZXNpc1N0YXJ0KGNhbGxiYWNrcy5maXJzdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblN0b3AoU3RyaW5nIHV0dGVyYW5jZUlkU3RyKSB7CisgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgICAgICAgICBQYWlyPFV0dGVyYW5jZUlkLCBSZXF1ZXN0Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSByZW1vdmVDYWxsYmFjayh1dHRlcmFuY2VJZFN0cik7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5zZWNvbmQub25TeW50aGVzaXNTdG9wKGNhbGxiYWNrcy5maXJzdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU3VjY2VzcyhTdHJpbmcgdXR0ZXJhbmNlSWRTdHIpIHsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIFBhaXI8VXR0ZXJhbmNlSWQsIFJlcXVlc3RDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHJlbW92ZUNhbGxiYWNrKHV0dGVyYW5jZUlkU3RyKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnNlY29uZC5vblN5bnRoZXNpc1N1Y2Nlc3MoY2FsbGJhY2tzLmZpcnN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uRmFsbGJhY2soU3RyaW5nIHV0dGVyYW5jZUlkU3RyKSB7CisgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgICAgICAgICBQYWlyPFV0dGVyYW5jZUlkLCBSZXF1ZXN0Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBnZXRDYWxsYmFjayh1dHRlcmFuY2VJZFN0cik7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5zZWNvbmQub25TeW50aGVzaXNGYWxsYmFjayhjYWxsYmFja3MuZmlyc3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25FcnJvcihTdHJpbmcgdXR0ZXJhbmNlSWRTdHIsIGludCBlcnJvckNvZGUpIHsKKyAgICAgICAgICAgICAgICByZW1vdmVDYWxsYmFja0FuZEVycih1dHRlcmFuY2VJZFN0ciwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblZvaWNlc0luZm9DaGFuZ2UoTGlzdDxWb2ljZUluZm8+IHZvaWNlc0luZm8pIHsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIG1FbmdpbmVTdGF0dXMgPSBuZXcgRW5naW5lU3RhdHVzKG1TZXJ2aWNlQ29ubmVjdGlvbi5nZXRFbmdpbmVOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pY2VzSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uQ2FsbGJhY2tzLm9uRW5naW5lU3RhdHVzQ2hhbmdlKG1FbmdpbmVTdGF0dXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIGNsYXNzIFByZXBhcmVDb25uZWN0aW9uQXN5bmNUYXNrIGV4dGVuZHMgQXN5bmNUYXNrPFZvaWQsIFZvaWQsIEVuZ2luZVN0YXR1cz4geworCisgICAgICAgICAgICBwcml2YXRlIGZpbmFsIENvbXBvbmVudE5hbWUgbU5hbWU7CisKKyAgICAgICAgICAgIHB1YmxpYyBQcmVwYXJlQ29ubmVjdGlvbkFzeW5jVGFzayhDb21wb25lbnROYW1lIG5hbWUpIHsKKyAgICAgICAgICAgICAgICBtTmFtZSA9IG5hbWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHJvdGVjdGVkIEVuZ2luZVN0YXR1cyBkb0luQmFja2dyb3VuZChWb2lkLi4uIHBhcmFtcykgeworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZChtTG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNDYW5jZWxsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldENhbGxiYWNrKGdldENhbGxlcklkZW50aXR5KCksIG1DYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdEVuZ2luZVN0YXR1cyhtU2VydmljZSk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRXJyb3Igc2V0dGluZyB1cCB0aGUgVFRTIHNlcnZpY2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uUG9zdEV4ZWN1dGUoRW5naW5lU3RhdHVzIHJlc3VsdCkgeworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZChtTG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAobVNldHVwQ29ubmVjdGlvbkFzeW5jVGFzayA9PSB0aGlzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtU2V0dXBDb25uZWN0aW9uQXN5bmNUYXNrID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlNldHVwIHRhc2sgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNjb25uZWN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbkNhbGxiYWNrcy5vbkNvbm5lY3Rpb25GYWlsdXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBtRW5naW5lU3RhdHVzID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBtRXN0YWJsaXNoZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbkNhbGxiYWNrcy5vbkNvbm5lY3Rpb25TdWNjZXNzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQ29ubmVjdGVkKENvbXBvbmVudE5hbWUgbmFtZSwgSUJpbmRlciBzZXJ2aWNlKSB7CisgICAgICAgICAgICBMb2cuaShUQUcsICJDb25uZWN0ZWQgdG8gIiArIG5hbWUpOworCisgICAgICAgICAgICBzeW5jaHJvbml6ZWQobUxvY2spIHsKKyAgICAgICAgICAgICAgICBtRXN0YWJsaXNoZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBtU2VydmljZSA9IElUZXh0VG9TcGVlY2hTZXJ2aWNlLlN0dWIuYXNJbnRlcmZhY2Uoc2VydmljZSk7CisgICAgICAgICAgICAgICAgc3RhcnRTZXR1cENvbm5lY3Rpb25UYXNrKG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUpIHsKKyAgICAgICAgICAgIExvZy5pKFRBRywgIkFza2VkIHRvIGRpc2Nvbm5lY3QgZnJvbSAiICsgbmFtZSk7CisKKyAgICAgICAgICAgIHN5bmNocm9uaXplZChtTG9jaykgeworICAgICAgICAgICAgICAgIHN0b3BTZXR1cENvbm5lY3Rpb25UYXNrKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQ29ubmVjdGlvbkNhbGxiYWNrcy5vblNlcnZpY2VEaXNjb25uZWN0ZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBzdGFydFNldHVwQ29ubmVjdGlvblRhc2soQ29tcG9uZW50TmFtZSBuYW1lKSB7CisgICAgICAgICAgICBzdG9wU2V0dXBDb25uZWN0aW9uVGFzaygpOworICAgICAgICAgICAgbVNldHVwQ29ubmVjdGlvbkFzeW5jVGFzayA9IG5ldyBQcmVwYXJlQ29ubmVjdGlvbkFzeW5jVGFzayhuYW1lKTsKKyAgICAgICAgICAgIG1TZXR1cENvbm5lY3Rpb25Bc3luY1Rhc2suZXhlY3V0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIHN0b3BTZXR1cENvbm5lY3Rpb25UYXNrKCkgeworICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtU2V0dXBDb25uZWN0aW9uQXN5bmNUYXNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtU2V0dXBDb25uZWN0aW9uQXN5bmNUYXNrLmNhbmNlbChmYWxzZSk7CisgICAgICAgICAgICAgICAgbVNldHVwQ29ubmVjdGlvbkFzeW5jVGFzayA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgSUJpbmRlciBnZXRDYWxsZXJJZGVudGl0eSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ2FsbGJhY2s7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIGlzRXN0YWJsaXNoZWQoKSB7CisgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UgIT0gbnVsbCAmJiBtRXN0YWJsaXNoZWQ7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIHJ1bkFjdGlvbihBY3Rpb24gYWN0aW9uKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bihtU2VydmljZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsIGFjdGlvbi5nZXROYW1lKCkgKyAiIGZhaWxlZCIsIGV4KTsKKyAgICAgICAgICAgICAgICAgICAgZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0KCkgeworICAgICAgICAgICAgbUNvbnRleHQudW5iaW5kU2VydmljZSh0aGlzKTsKKyAgICAgICAgICAgIHN0b3BTZXR1cENvbm5lY3Rpb25UYXNrKCk7CisgICAgICAgICAgICBtU2VydmljZSA9IG51bGw7CisgICAgICAgICAgICBtRXN0YWJsaXNoZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtU2VydmljZUNvbm5lY3Rpb24gPT0gdGhpcykgeworICAgICAgICAgICAgICAgIG1TZXJ2aWNlQ29ubmVjdGlvbiA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgZ2V0RW5naW5lTmFtZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtRW5naW5lTmFtZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgYWJzdHJhY3QgY2xhc3MgQWN0aW9uIHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU5hbWU7CisKKyAgICAgICAgcHVibGljIEFjdGlvbihTdHJpbmcgbmFtZSkgeworICAgICAgICAgICAgbU5hbWUgPSBuYW1lOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkge3JldHVybiBtTmFtZTt9CisgICAgICAgIGFic3RyYWN0IHZvaWQgcnVuKElUZXh0VG9TcGVlY2hTZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgfQorCisgICAgcHJpdmF0ZSBJQmluZGVyIGdldENhbGxlcklkZW50aXR5KCkgeworICAgICAgICBpZiAobVNlcnZpY2VDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBtU2VydmljZUNvbm5lY3Rpb24uZ2V0Q2FsbGVySWRlbnRpdHkoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gcnVuQWN0aW9uKEFjdGlvbiBhY3Rpb24pIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgaWYgKG1TZXJ2aWNlQ29ubmVjdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtU2VydmljZUNvbm5lY3Rpb24uaXNFc3RhYmxpc2hlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVNlcnZpY2VDb25uZWN0aW9uLnJ1bkFjdGlvbihhY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX1NUT1BfTkFNRSA9ICJzdG9wIjsKKworICAgIC8qKgorICAgICAqIEludGVycnVwdHMgdGhlIGN1cnJlbnQgdXR0ZXJhbmNlIHNwb2tlbiAod2hldGhlciBwbGF5ZWQgb3IgcmVuZGVyZWQgdG8gZmlsZSkgYW5kIGRpc2NhcmRzCisgICAgICogb3RoZXIgdXR0ZXJhbmNlcyBpbiB0aGUgcXVldWUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKKyAgICAgICAgcnVuQWN0aW9uKG5ldyBBY3Rpb24oQUNUSU9OX1NUT1BfTkFNRSkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVRleHRUb1NwZWVjaFNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICBpZiAoc2VydmljZS5zdG9wKGdldENhbGxlcklkZW50aXR5KCkpICE9IFN0YXR1cy5TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiU3RvcCBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIG1DYWxsYmFja3MuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9RVUVVRV9TUEVBS19OQU1FID0gInF1ZXVlU3BlYWsiOworCisgICAgLyoqCisgICAgICogU3BlYWtzIHRoZSBzdHJpbmcgdXNpbmcgdGhlIHNwZWNpZmllZCBxdWV1aW5nIHN0cmF0ZWd5IHVzaW5nIGN1cnJlbnQKKyAgICAgKiB2b2ljZS4gVGhpcyBtZXRob2QgaXMgYXN5bmNocm9ub3VzLCBpLmUuIHRoZSBtZXRob2QganVzdCBhZGRzIHRoZSByZXF1ZXN0CisgICAgICogdG8gdGhlIHF1ZXVlIG9mIFRUUyByZXF1ZXN0cyBhbmQgdGhlbiByZXR1cm5zLiBUaGUgc3ludGhlc2lzIG1pZ2h0IG5vdAorICAgICAqIGhhdmUgZmluaXNoZWQgKG9yIGV2ZW4gc3RhcnRlZCEpIGF0IHRoZSB0aW1lIHdoZW4gdGhpcyBtZXRob2QgcmV0dXJucy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1dHRlcmFuY2UgVGhlIHN0cmluZyBvZiB0ZXh0IHRvIGJlIHNwb2tlbi4gTm8gbG9uZ2VyIHRoYW4KKyAgICAgKiAgICAgICAgICAgIDEwMDAgY2hhcmFjdGVycy4KKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWQgVW5pcXVlIGlkZW50aWZpY2F0b3IgdXNlZCB0byB0cmFjayB0aGUgc3ludGhlc2lzIHByb2dyZXNzCisgICAgICogICAgICAgICAgICBpbiB7QGxpbmsgUmVxdWVzdENhbGxiYWNrc30uCisgICAgICogQHBhcmFtIGNvbmZpZyBTeW50aGVzaXMgcmVxdWVzdCBjb25maWd1cmF0aW9uLiBDYW4ndCBiZSBudWxsLiBIYXMgdG8gY29udGFpbiBhCisgICAgICogICAgICAgICAgICB2b2ljZS4KKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tzIFN5bnRoZXNpcyByZXF1ZXN0IGNhbGxiYWNrcy4gSWYgbnVsbCwgZGVmYXVsdCByZXF1ZXN0CisgICAgICogICAgICAgICAgICBjYWxsYmFja3Mgb2JqZWN0IHdpbGwgYmUgdXNlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBxdWV1ZVNwZWFrKGZpbmFsIFN0cmluZyB1dHRlcmFuY2UsIGZpbmFsIFV0dGVyYW5jZUlkIHV0dGVyYW5jZUlkLAorICAgICAgICAgICAgZmluYWwgUmVxdWVzdENvbmZpZyBjb25maWcsCisgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0Q2FsbGJhY2tzIGNhbGxiYWNrcykgeworICAgICAgICBydW5BY3Rpb24obmV3IEFjdGlvbihBQ1RJT05fUVVFVUVfU1BFQUtfTkFNRSkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVRleHRUb1NwZWVjaFNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgUmVxdWVzdENhbGxiYWNrcyBjID0gbURlZmF1bHRSZXF1ZXN0Q2FsbGJhY2tzOworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBjID0gY2FsbGJhY2tzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgYWRkQ2FsbGJhY2tTdGF0dXMgPSBhZGRDYWxsYmFjayh1dHRlcmFuY2VJZCwgYyk7CisgICAgICAgICAgICAgICAgaWYgKGFkZENhbGxiYWNrU3RhdHVzICE9IFN0YXR1cy5TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIGMub25TeW50aGVzaXNGYWlsdXJlKHV0dGVyYW5jZUlkLCBTdGF0dXMuRVJST1JfSU5WQUxJRF9SRVFVRVNUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGludCBxdWV1ZVJlc3VsdCA9IHNlcnZpY2Uuc3BlYWtWMigKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldENhbGxlcklkZW50aXR5KCksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3ludGhlc2lzUmVxdWVzdFYyKHV0dGVyYW5jZSwgdXR0ZXJhbmNlSWQudG9VbmlxdWVTdHJpbmcoKSwgY29uZmlnKSk7CisgICAgICAgICAgICAgICAgaWYgKHF1ZXVlUmVzdWx0ICE9IFN0YXR1cy5TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNhbGxiYWNrQW5kRXJyKHV0dGVyYW5jZUlkLnRvVW5pcXVlU3RyaW5nKCksIHF1ZXVlUmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fUVVFVUVfU1lOVEhFU0laRV9UT19GSUxFID0gInF1ZXVlU3ludGhlc2l6ZVRvRmlsZSI7CisKKyAgICAvKioKKyAgICAgKiBTeW50aGVzaXplcyB0aGUgZ2l2ZW4gdGV4dCB0byBhIGZpbGUgdXNpbmcgdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLiBUaGlzCisgICAgICogbWV0aG9kIGlzIGFzeW5jaHJvbm91cywgaS5lLiB0aGUgbWV0aG9kIGp1c3QgYWRkcyB0aGUgcmVxdWVzdCB0byB0aGUKKyAgICAgKiBxdWV1ZSBvZiBUVFMgcmVxdWVzdHMgYW5kIHRoZW4gcmV0dXJucy4gVGhlIHN5bnRoZXNpcyBtaWdodCBub3QgaGF2ZQorICAgICAqIGZpbmlzaGVkIChvciBldmVuIHN0YXJ0ZWQhKSBhdCB0aGUgdGltZSB3aGVuIHRoaXMgbWV0aG9kIHJldHVybnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlIFRoZSB0ZXh0IHRoYXQgc2hvdWxkIGJlIHN5bnRoZXNpemVkLiBObyBsb25nZXIgdGhhbgorICAgICAqICAgICAgICAgICAgMTAwMCBjaGFyYWN0ZXJzLgorICAgICAqIEBwYXJhbSB1dHRlcmFuY2VJZCBVbmlxdWUgaWRlbnRpZmljYXRvciB1c2VkIHRvIHRyYWNrIHRoZSBzeW50aGVzaXMgcHJvZ3Jlc3MKKyAgICAgKiAgICAgICAgICAgIGluIHtAbGluayBSZXF1ZXN0Q2FsbGJhY2tzfS4KKyAgICAgKiBAcGFyYW0gb3V0cHV0RmlsZSBGaWxlIHRvIHdyaXRlIHRoZSBnZW5lcmF0ZWQgYXVkaW8gZGF0YSB0by4KKyAgICAgKiBAcGFyYW0gY29uZmlnIFN5bnRoZXNpcyByZXF1ZXN0IGNvbmZpZ3VyYXRpb24uIENhbid0IGJlIG51bGwuIEhhdmUgdG8gY29udGFpbiBhCisgICAgICogICAgICAgICAgICB2b2ljZS4KKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tzIFN5bnRoZXNpcyByZXF1ZXN0IGNhbGxiYWNrcy4gSWYgbnVsbCwgZGVmYXVsdCByZXF1ZXN0CisgICAgICogICAgICAgICAgICBjYWxsYmFja3Mgb2JqZWN0IHdpbGwgYmUgdXNlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBxdWV1ZVN5bnRoZXNpemVUb0ZpbGUoZmluYWwgU3RyaW5nIHV0dGVyYW5jZSwgZmluYWwgVXR0ZXJhbmNlSWQgdXR0ZXJhbmNlSWQsCisgICAgICAgICAgICBmaW5hbCBGaWxlIG91dHB1dEZpbGUsIGZpbmFsIFJlcXVlc3RDb25maWcgY29uZmlnLAorICAgICAgICAgICAgZmluYWwgUmVxdWVzdENhbGxiYWNrcyBjYWxsYmFja3MpIHsKKyAgICAgICAgcnVuQWN0aW9uKG5ldyBBY3Rpb24oQUNUSU9OX1FVRVVFX1NZTlRIRVNJWkVfVE9fRklMRSkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVRleHRUb1NwZWVjaFNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgUmVxdWVzdENhbGxiYWNrcyBjID0gbURlZmF1bHRSZXF1ZXN0Q2FsbGJhY2tzOworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBjID0gY2FsbGJhY2tzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgYWRkQ2FsbGJhY2tTdGF0dXMgPSBhZGRDYWxsYmFjayh1dHRlcmFuY2VJZCwgYyk7CisgICAgICAgICAgICAgICAgaWYgKGFkZENhbGxiYWNrU3RhdHVzICE9IFN0YXR1cy5TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIGMub25TeW50aGVzaXNGYWlsdXJlKHV0dGVyYW5jZUlkLCBTdGF0dXMuRVJST1JfSU5WQUxJRF9SRVFVRVNUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpZiAob3V0cHV0RmlsZS5leGlzdHMoKSAmJiAhb3V0cHV0RmlsZS5jYW5Xcml0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJObyBwZXJtaXNzaW9ucyB0byB3cml0ZSB0byAiICsgb3V0cHV0RmlsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDYWxsYmFja0FuZEVycih1dHRlcmFuY2VJZC50b1VuaXF1ZVN0cmluZygpLCBTdGF0dXMuRVJST1JfT1VUUFVUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmaWxlRGVzY3JpcHRvciA9IFBhcmNlbEZpbGVEZXNjcmlwdG9yLm9wZW4ob3V0cHV0RmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRvci5NT0RFX1dSSVRFX09OTFkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfQ1JFQVRFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRvci5NT0RFX1RSVU5DQVRFKTsKKworICAgICAgICAgICAgICAgICAgICBpbnQgcXVldWVSZXN1bHQgPSBzZXJ2aWNlLnN5bnRoZXNpemVUb0ZpbGVEZXNjcmlwdG9yVjIoZ2V0Q2FsbGVySWRlbnRpdHkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlRGVzY3JpcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3ludGhlc2lzUmVxdWVzdFYyKHV0dGVyYW5jZSwgdXR0ZXJhbmNlSWQudG9VbmlxdWVTdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZykpOworICAgICAgICAgICAgICAgICAgICBmaWxlRGVzY3JpcHRvci5jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAocXVldWVSZXN1bHQgIT0gU3RhdHVzLlNVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNhbGxiYWNrQW5kRXJyKHV0dGVyYW5jZUlkLnRvVW5pcXVlU3RyaW5nKCksIHF1ZXVlUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIk9wZW5pbmcgZmlsZSAiICsgb3V0cHV0RmlsZSArICIgZmFpbGVkIiwgZSk7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNhbGxiYWNrQW5kRXJyKHV0dGVyYW5jZUlkLnRvVW5pcXVlU3RyaW5nKCksIFN0YXR1cy5FUlJPUl9PVVRQVVQpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ2xvc2luZyBmaWxlICIgKyBvdXRwdXRGaWxlICsgIiBmYWlsZWQiLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2FsbGJhY2tBbmRFcnIodXR0ZXJhbmNlSWQudG9VbmlxdWVTdHJpbmcoKSwgU3RhdHVzLkVSUk9SX09VVFBVVCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX1FVRVVFX1NJTEVOQ0VfTkFNRSA9ICJxdWV1ZVNpbGVuY2UiOworCisgICAgLyoqCisgICAgICogUGxheXMgc2lsZW5jZSBmb3IgdGhlIHNwZWNpZmllZCBhbW91bnQgb2YgdGltZS4gVGhpcyBtZXRob2QgaXMgYXN5bmNocm9ub3VzLAorICAgICAqIGkuZS4gdGhlIG1ldGhvZCBqdXN0IGFkZHMgdGhlIHJlcXVlc3QgdG8gdGhlIHF1ZXVlIG9mIFRUUyByZXF1ZXN0cyBhbmQgdGhlbgorICAgICAqIHJldHVybnMuIFRoZSBzeW50aGVzaXMgbWlnaHQgbm90IGhhdmUgZmluaXNoZWQgKG9yIGV2ZW4gc3RhcnRlZCEpIGF0IHRoZSB0aW1lCisgICAgICogd2hlbiB0aGlzIG1ldGhvZCByZXR1cm5zLgorICAgICAqCisgICAgICogQHBhcmFtIGR1cmF0aW9uSW5NcyBUaGUgZHVyYXRpb24gb2YgdGhlIHNpbGVuY2UgaW4gbWlsbGlzZWNvbmRzLgorICAgICAqIEBwYXJhbSB1dHRlcmFuY2VJZCBVbmlxdWUgaWRlbnRpZmljYXRvciB1c2VkIHRvIHRyYWNrIHRoZSBzeW50aGVzaXMgcHJvZ3Jlc3MKKyAgICAgKiAgICAgICAgICAgIGluIHtAbGluayBSZXF1ZXN0Q2FsbGJhY2tzfS4KKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tzIFN5bnRoZXNpcyByZXF1ZXN0IGNhbGxiYWNrcy4gSWYgbnVsbCwgZGVmYXVsdCByZXF1ZXN0CisgICAgICogICAgICAgICAgICBjYWxsYmFja3Mgb2JqZWN0IHdpbGwgYmUgdXNlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBxdWV1ZVNpbGVuY2UoZmluYWwgbG9uZyBkdXJhdGlvbkluTXMsIGZpbmFsIFV0dGVyYW5jZUlkIHV0dGVyYW5jZUlkLAorICAgICAgICAgICAgZmluYWwgUmVxdWVzdENhbGxiYWNrcyBjYWxsYmFja3MpIHsKKyAgICAgICAgcnVuQWN0aW9uKG5ldyBBY3Rpb24oQUNUSU9OX1FVRVVFX1NJTEVOQ0VfTkFNRSkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVRleHRUb1NwZWVjaFNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgUmVxdWVzdENhbGxiYWNrcyBjID0gbURlZmF1bHRSZXF1ZXN0Q2FsbGJhY2tzOworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3MgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBjID0gY2FsbGJhY2tzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgYWRkQ2FsbGJhY2tTdGF0dXMgPSBhZGRDYWxsYmFjayh1dHRlcmFuY2VJZCwgYyk7CisgICAgICAgICAgICAgICAgaWYgKGFkZENhbGxiYWNrU3RhdHVzICE9IFN0YXR1cy5TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIGMub25TeW50aGVzaXNGYWlsdXJlKHV0dGVyYW5jZUlkLCBTdGF0dXMuRVJST1JfSU5WQUxJRF9SRVFVRVNUKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpbnQgcXVldWVSZXN1bHQgPSBzZXJ2aWNlLnBsYXlTaWxlbmNlKGdldENhbGxlcklkZW50aXR5KCksIGR1cmF0aW9uSW5NcywKKyAgICAgICAgICAgICAgICAgICAgICAgIFRleHRUb1NwZWVjaC5RVUVVRV9BREQsIHV0dGVyYW5jZUlkLnRvVW5pcXVlU3RyaW5nKCkpOworCisgICAgICAgICAgICAgICAgaWYgKHF1ZXVlUmVzdWx0ICE9IFN0YXR1cy5TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNhbGxiYWNrQW5kRXJyKHV0dGVyYW5jZUlkLnRvVW5pcXVlU3RyaW5nKCksIHF1ZXVlUmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9RVUVVRV9BVURJT19OQU1FID0gInF1ZXVlQXVkaW8iOworCisgICAgLyoqCisgICAgICogUGxheXMgdGhlIGF1ZGlvIHJlc291cmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4KKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBhc3luY2hyb25vdXMsIGkuZS4gdGhlIG1ldGhvZCBqdXN0IGFkZHMgdGhlIHJlcXVlc3QgdG8gdGhlIHF1ZXVlIG9mIFRUUworICAgICAqIHJlcXVlc3RzIGFuZCB0aGVuIHJldHVybnMuIFRoZSBzeW50aGVzaXMgbWlnaHQgbm90IGhhdmUgZmluaXNoZWQgKG9yIGV2ZW4gc3RhcnRlZCEpIGF0IHRoZQorICAgICAqIHRpbWUgd2hlbiB0aGlzIG1ldGhvZCByZXR1cm5zLgorICAgICAqCisgICAgICogQHBhcmFtIGF1ZGlvVXJsIFRoZSBhdWRpbyByZXNvdXJjZSB0aGF0IHNob3VsZCBiZSBwbGF5ZWQKKyAgICAgKiBAcGFyYW0gdXR0ZXJhbmNlSWQgVW5pcXVlIGlkZW50aWZpY2F0b3IgdXNlZCB0byB0cmFjayBzeW50aGVzaXMgcHJvZ3Jlc3MKKyAgICAgKiAgICAgICAgICAgIGluIHtAbGluayBSZXF1ZXN0Q2FsbGJhY2tzfS4KKyAgICAgKiBAcGFyYW0gY29uZmlnIFN5bnRoZXNpcyByZXF1ZXN0IGNvbmZpZ3VyYXRpb24uIENhbid0IGJlIG51bGwuIERvZXNuJ3QgaGF2ZSB0byBjb250YWluIGEKKyAgICAgKiAgICAgICAgICAgIHZvaWNlIChvbmx5IHN5c3RlbSBwYXJhbWV0ZXJzIGFyZSB1c2VkKS4KKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tzIFN5bnRoZXNpcyByZXF1ZXN0IGNhbGxiYWNrcy4gSWYgbnVsbCwgZGVmYXVsdCByZXF1ZXN0CisgICAgICogICAgICAgICAgICBjYWxsYmFja3Mgb2JqZWN0IHdpbGwgYmUgdXNlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBxdWV1ZUF1ZGlvKGZpbmFsIFVyaSBhdWRpb1VybCwgZmluYWwgVXR0ZXJhbmNlSWQgdXR0ZXJhbmNlSWQsCisgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0Q29uZmlnIGNvbmZpZywgZmluYWwgUmVxdWVzdENhbGxiYWNrcyBjYWxsYmFja3MpIHsKKyAgICAgICAgcnVuQWN0aW9uKG5ldyBBY3Rpb24oQUNUSU9OX1FVRVVFX0FVRElPX05BTUUpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKElUZXh0VG9TcGVlY2hTZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgICAgIFJlcXVlc3RDYWxsYmFja3MgYyA9IG1EZWZhdWx0UmVxdWVzdENhbGxiYWNrczsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgYyA9IGNhbGxiYWNrczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50IGFkZENhbGxiYWNrU3RhdHVzID0gYWRkQ2FsbGJhY2sodXR0ZXJhbmNlSWQsIGMpOworICAgICAgICAgICAgICAgIGlmIChhZGRDYWxsYmFja1N0YXR1cyAhPSBTdGF0dXMuU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICBjLm9uU3ludGhlc2lzRmFpbHVyZSh1dHRlcmFuY2VJZCwgU3RhdHVzLkVSUk9SX0lOVkFMSURfUkVRVUVTVCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaW50IHF1ZXVlUmVzdWx0ID0gc2VydmljZS5wbGF5QXVkaW9WMihnZXRDYWxsZXJJZGVudGl0eSgpLCBhdWRpb1VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHV0dGVyYW5jZUlkLnRvVW5pcXVlU3RyaW5nKCksIGNvbmZpZy5nZXRWb2ljZVBhcmFtcygpKTsKKworICAgICAgICAgICAgICAgIGlmIChxdWV1ZVJlc3VsdCAhPSBTdGF0dXMuU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICByZW1vdmVDYWxsYmFja0FuZEVycih1dHRlcmFuY2VJZC50b1VuaXF1ZVN0cmluZygpLCBxdWV1ZVJlc3VsdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1RleHRUb1NwZWVjaFNlcnZpY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVGV4dFRvU3BlZWNoU2VydmljZS5qYXZhCmluZGV4IDU3NTg1NWMuLmQ3YzUxZmMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVGV4dFRvU3BlZWNoU2VydmljZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVGV4dFRvU3BlZWNoU2VydmljZS5qYXZhCkBAIC0zNCwyNiArMzQsMjcgQEAKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKLWltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLlNldDsKIAogCiAvKioKICAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIFRUUyBlbmdpbmUgaW1wbGVtZW50YXRpb25zLiBUaGUgZm9sbG93aW5nIG1ldGhvZHMKLSAqIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQuCi0gKgorICogbmVlZCB0byBiZSBpbXBsZW1lbnRlZCBmb3IgVjEgQVBJICh7QGxpbmsgVGV4dFRvU3BlZWNofSkgaW1wbGVtZW50YXRpb24uCiAgKiA8dWw+Ci0gKiAgIDxsaT57QGxpbmsgI29uSXNMYW5ndWFnZUF2YWlsYWJsZX08L2xpPgotICogICA8bGk+e0BsaW5rICNvbkxvYWRMYW5ndWFnZX08L2xpPgotICogICA8bGk+e0BsaW5rICNvbkdldExhbmd1YWdlfTwvbGk+Ci0gKiAgIDxsaT57QGxpbmsgI29uU3ludGhlc2l6ZVRleHR9PC9saT4KLSAqICAgPGxpPntAbGluayAjb25TdG9wfTwvbGk+CisgKiA8bGk+e0BsaW5rICNvbklzTGFuZ3VhZ2VBdmFpbGFibGV9PC9saT4KKyAqIDxsaT57QGxpbmsgI29uTG9hZExhbmd1YWdlfTwvbGk+CisgKiA8bGk+e0BsaW5rICNvbkdldExhbmd1YWdlfTwvbGk+CisgKiA8bGk+e0BsaW5rICNvblN5bnRoZXNpemVUZXh0fTwvbGk+CisgKiA8bGk+e0BsaW5rICNvblN0b3B9PC9saT4KICAqIDwvdWw+Ci0gKgogICogVGhlIGZpcnN0IHRocmVlIGRlYWwgcHJpbWFyaWx5IHdpdGggbGFuZ3VhZ2UgbWFuYWdlbWVudCwgYW5kIGFyZSB1c2VkIHRvCiAgKiBxdWVyeSB0aGUgZW5naW5lIGZvciBpdCdzIHN1cHBvcnQgZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2UgYW5kIGluZGljYXRlIHRvIGl0CiAgKiB0aGF0IHJlcXVlc3RzIGluIGEgZ2l2ZW4gbGFuZ3VhZ2UgYXJlIGltbWluZW50LgpAQCAtNjEsMjIgKzYyLDQ0IEBACiAgKiB7QGxpbmsgI29uU3ludGhlc2l6ZVRleHR9IGlzIGNlbnRyYWwgdG8gdGhlIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi4gVGhlCiAgKiBpbXBsZW1lbnRhdGlvbiBzaG91bGQgc3ludGhlc2l6ZSB0ZXh0IGFzIHBlciB0aGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGFuZAogICogcmV0dXJuIHN5bnRoZXNpemVkIGRhdGEgdmlhIHRoZSBzdXBwbGllZCBjYWxsYmFjay4gVGhpcyBjbGFzcyBhbmQgaXRzIGhlbHBlcnMKLSAqIHdpbGwgdGhlbiBjb25zdW1lIHRoYXQgZGF0YSwgd2hpY2ggbWlnaHQgbWVhbiBxdWV1ZWluZyBpdCBmb3IgcGxheWJhY2sgb3Igd3JpdGluZwotICogaXQgdG8gYSBmaWxlIG9yIHNpbWlsYXIuIEFsbCBjYWxscyB0byB0aGlzIG1ldGhvZCB3aWxsIGJlIG9uIGEgc2luZ2xlCi0gKiB0aHJlYWQsIHdoaWNoIHdpbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIG1haW4gdGhyZWFkIG9mIHRoZSBzZXJ2aWNlLiBTeW50aGVzaXMKLSAqIG11c3QgYmUgc3luY2hyb25vdXMgd2hpY2ggbWVhbnMgdGhlIGVuZ2luZSBtdXN0IE5PVCBob2xkIG9uIHRoZSBjYWxsYmFjayBvciBjYWxsCi0gKiBhbnkgbWV0aG9kcyBvbiBpdCBhZnRlciB0aGUgbWV0aG9kIHJldHVybnMKKyAqIHdpbGwgdGhlbiBjb25zdW1lIHRoYXQgZGF0YSwgd2hpY2ggbWlnaHQgbWVhbiBxdWV1aW5nIGl0IGZvciBwbGF5YmFjayBvciB3cml0aW5nCisgKiBpdCB0byBhIGZpbGUgb3Igc2ltaWxhci4gQWxsIGNhbGxzIHRvIHRoaXMgbWV0aG9kIHdpbGwgYmUgb24gYSBzaW5nbGUgdGhyZWFkLAorICogd2hpY2ggd2lsbCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbWFpbiB0aHJlYWQgb2YgdGhlIHNlcnZpY2UuIFN5bnRoZXNpcyBtdXN0IGJlCisgKiBzeW5jaHJvbm91cyB3aGljaCBtZWFucyB0aGUgZW5naW5lIG11c3QgTk9UIGhvbGQgb24gdG8gdGhlIGNhbGxiYWNrIG9yIGNhbGwgYW55CisgKiBtZXRob2RzIG9uIGl0IGFmdGVyIHRoZSBtZXRob2QgcmV0dXJucy4KICAqCi0gKiB7QGxpbmsgI29uU3RvcH0gdGVsbHMgdGhlIGVuZ2luZSB0aGF0IGl0IHNob3VsZCBzdG9wIGFsbCBvbmdvaW5nIHN5bnRoZXNpcywgaWYKLSAqIGFueS4gQW55IHBlbmRpbmcgZGF0YSBmcm9tIHRoZSBjdXJyZW50IHN5bnRoZXNpcyB3aWxsIGJlIGRpc2NhcmRlZC4KKyAqIHtAbGluayAjb25TdG9wfSB0ZWxscyB0aGUgZW5naW5lIHRoYXQgaXQgc2hvdWxkIHN0b3AKKyAqIGFsbCBvbmdvaW5nIHN5bnRoZXNpcywgaWYgYW55LiBBbnkgcGVuZGluZyBkYXRhIGZyb20gdGhlIGN1cnJlbnQgc3ludGhlc2lzCisgKiB3aWxsIGJlIGRpc2NhcmRlZC4KICAqCisgKiB7QGxpbmsgI29uR2V0TGFuZ3VhZ2V9IGlzIG5vdCByZXF1aXJlZCBhcyBvZiBKRUxMWUJFQU5fTVIyIChBUEkgMTgpIGFuZCBsYXRlciwgaXQgaXMgb25seQorICogY2FsbGVkIG9uIGVhcmxpZXIgdmVyc2lvbnMgb2YgQW5kcm9pZC4KKyAqIDxwPgorICogSW4gb3JkZXIgdG8gZnVsbHkgc3VwcG9ydCB0aGUgVjIgQVBJICh7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50fSksCisgKiB0aGVzZSBtZXRob2RzIG11c3QgYmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rICNvblN5bnRoZXNpemVUZXh0VjJ9PC9saT4KKyAqIDxsaT57QGxpbmsgI2NoZWNrVm9pY2VzSW5mb308L2xpPgorICogPGxpPntAbGluayAjb25Wb2ljZXNJbmZvQ2hhbmdlfTwvbGk+CisgKiA8bGk+e0BsaW5rICNpbXBsZW1lbnRzVjJBUEl9PC9saT4KKyAqIDwvdWw+CisgKiBJbiBhZGRpdGlvbiB7QGxpbmsgI2ltcGxlbWVudHNWMkFQSX0gaGFzIHRvIHJldHVybiB0cnVlLgorICogPHA+CisgKiBJZiB0aGUgc2VydmljZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlc2UgbWV0aG9kcyBhbmQge0BsaW5rICNpbXBsZW1lbnRzVjJBUEl9IHJldHVybnMgZmFsc2UsCisgKiB0aGVuIHRoZSBWMiBBUEkgd2lsbCBiZSBwcm92aWRlZCBieSBjb252ZXJ0aW5nIFYyIHJlcXVlc3RzICh7QGxpbmsgI29uU3ludGhlc2l6ZVRleHRWMn0pCisgKiB0byBWMSByZXF1ZXN0cyAoe0BsaW5rICNvblN5bnRoZXNpemVUZXh0fSkuIE9uIHNlcnZpY2Ugc2V0dXAsIGFsbCBvZiB0aGUgYXZhaWxhYmxlIGRldmljZQorICogbG9jYWxlcyB3aWxsIGJlIGZlZCB0byB7QGxpbmsgI29uSXNMYW5ndWFnZUF2YWlsYWJsZX0gdG8gY2hlY2sgaWYgdGhleSBhcmUgc3VwcG9ydGVkLgorICogSWYgdGhleSBhcmUsIGVtYmVkZGVkIGFuZC9vciBuZXR3b3JrIHZvaWNlcyB3aWxsIGJlIGNyZWF0ZWQgZGVwZW5kaW5nIG9uIHRoZSByZXN1bHQgb2YKKyAqIHtAbGluayAjb25HZXRGZWF0dXJlc0Zvckxhbmd1YWdlfS4KKyAqIDxwPgorICogTm90ZSB0aGF0IGEgVjIgc2VydmljZSB3aWxsIHN0aWxsIHJlY2VpdmUgcmVxdWVzdHMgZnJvbSBWMSBjbGllbnRzIGFuZCBoYXMgdG8gaW1wbGVtZW50IGFsbAorICogb2YgdGhlIFYxIEFQSSBtZXRob2RzLgogICovCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVGV4dFRvU3BlZWNoU2VydmljZSBleHRlbmRzIFNlcnZpY2UgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBEQkcgPSBmYWxzZTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlRleHRUb1NwZWVjaFNlcnZpY2UiOwogCi0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lOVEhfVEhSRUFEX05BTUUgPSAiU3ludGhUaHJlYWQiOwogCiAgICAgcHJpdmF0ZSBTeW50aEhhbmRsZXIgbVN5bnRoSGFuZGxlcjsKQEAgLTg5LDYgKzExMiwxMSBAQAogICAgIHByaXZhdGUgQ2FsbGJhY2tNYXAgbUNhbGxiYWNrczsKICAgICBwcml2YXRlIFN0cmluZyBtUGFja2FnZU5hbWU7CiAKKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBtVm9pY2VzSW5mb0xvY2sgPSBuZXcgT2JqZWN0KCk7CisKKyAgICBwcml2YXRlIExpc3Q8Vm9pY2VJbmZvPiBtVm9pY2VzSW5mb0xpc3Q7CisgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBWb2ljZUluZm8+IG1Wb2ljZXNJbmZvTG9va3VwOworCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25DcmVhdGUoKSB7CiAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIm9uQ3JlYXRlKCkiKTsKQEAgLTEwOCw2ICsxMzYsNyBAQAogICAgICAgICBtUGFja2FnZU5hbWUgPSBnZXRBcHBsaWNhdGlvbkluZm8oKS5wYWNrYWdlTmFtZTsKIAogICAgICAgICBTdHJpbmdbXSBkZWZhdWx0TG9jYWxlID0gZ2V0U2V0dGluZ3NMb2NhbGUoKTsKKwogICAgICAgICAvLyBMb2FkIGRlZmF1bHQgbGFuZ3VhZ2UKICAgICAgICAgb25Mb2FkTGFuZ3VhZ2UoZGVmYXVsdExvY2FsZVswXSwgZGVmYXVsdExvY2FsZVsxXSwgZGVmYXVsdExvY2FsZVsyXSk7CiAgICAgfQpAQCAtMTQ4LDYgKzE3Nyw5IEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgbGFuZ3VhZ2UsIGNvdW50cnkgYW5kIHZhcmlhbnQgY3VycmVudGx5IGJlaW5nIHVzZWQgYnkgdGhlIFRUUyBlbmdpbmUuCiAgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uIEFuZHJvaWQgNC4yIGFuZCBiZWZvcmUgKEFQSSA8PSAxNykuIEluIGxhdGVyIHZlcnNpb25zCisgICAgICogdGhpcyBtZXRob2QgaXMgbm90IGNhbGxlZCBieSB0aGUgQW5kcm9pZCBUVFMgZnJhbWV3b3JrLgorICAgICAqCiAgICAgICogQ2FuIGJlIGNhbGxlZCBvbiBtdWx0aXBsZSB0aHJlYWRzLgogICAgICAqCiAgICAgICogQHJldHVybiBBIDMtZWxlbWVudCBhcnJheSwgY29udGFpbmluZyBsYW5ndWFnZSAoSVNPIDMtbGV0dGVyIGNvZGUpLApAQCAtMTkxLDIxICsyMjMsMTU5IEBACiAgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgb25TdG9wKCk7CiAKICAgICAvKioKLSAgICAgKiBUZWxscyB0aGUgc2VydmljZSB0byBzeW50aGVzaXplIHNwZWVjaCBmcm9tIHRoZSBnaXZlbiB0ZXh0LiBUaGlzIG1ldGhvZCBzaG91bGQKLSAgICAgKiBibG9jayB1bnRpbCB0aGUgc3ludGhlc2lzIGlzIGZpbmlzaGVkLgotICAgICAqCi0gICAgICogQ2FsbGVkIG9uIHRoZSBzeW50aGVzaXMgdGhyZWFkLgorICAgICAqIFRlbGxzIHRoZSBzZXJ2aWNlIHRvIHN5bnRoZXNpemUgc3BlZWNoIGZyb20gdGhlIGdpdmVuIHRleHQuIFRoaXMgbWV0aG9kCisgICAgICogc2hvdWxkIGJsb2NrIHVudGlsIHRoZSBzeW50aGVzaXMgaXMgZmluaXNoZWQuIFVzZWQgZm9yIHJlcXVlc3RzIGZyb20gVjEKKyAgICAgKiBjbGllbnRzICh7QGxpbmsgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaH0pLiBDYWxsZWQgb24gdGhlIHN5bnRoZXNpcworICAgICAqIHRocmVhZC4KICAgICAgKgogICAgICAqIEBwYXJhbSByZXF1ZXN0IFRoZSBzeW50aGVzaXMgcmVxdWVzdC4KLSAgICAgKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRoZSB0aGUgZW5naW5lIG11c3QgdXNlIHRvIG1ha2UgZGF0YSBhdmFpbGFibGUgZm9yCi0gICAgICogICAgICAgICBwbGF5YmFjayBvciBmb3Igd3JpdGluZyB0byBhIGZpbGUuCisgICAgICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0aGF0IHRoZSBlbmdpbmUgbXVzdCB1c2UgdG8gbWFrZSBkYXRhCisgICAgICogICAgICAgICAgICBhdmFpbGFibGUgZm9yIHBsYXliYWNrIG9yIGZvciB3cml0aW5nIHRvIGEgZmlsZS4KICAgICAgKi8KICAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBvblN5bnRoZXNpemVUZXh0KFN5bnRoZXNpc1JlcXVlc3QgcmVxdWVzdCwKICAgICAgICAgICAgIFN5bnRoZXNpc0NhbGxiYWNrIGNhbGxiYWNrKTsKIAogICAgIC8qKgorICAgICAqIENoZWNrIHRoZSBhdmFpbGFibGUgdm9pY2VzIGRhdGEgYW5kIHJldHVybiBhbiBpbW11dGFibGUgbGlzdCBvZiB0aGUgYXZhaWxhYmxlIHZvaWNlcy4KKyAgICAgKiBUaGUgb3V0cHV0IG9mIHRoaXMgbWV0aG9kIHdpbGwgYmUgcGFzc2VkIHRvIGNsaWVudHMgdG8gYWxsb3cgdGhlbSB0byBjb25maWd1cmUgc3ludGhlc2lzCisgICAgICogcmVxdWVzdHMuCisgICAgICoKKyAgICAgKiBDYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlIHRocmVhZHMuCisgICAgICoKKyAgICAgKiBUaGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIHdpbGwgYmUgc2F2ZWQgYW5kIHNlcnZlZCB0byBhbGwgVFRTIGNsaWVudHMuIElmIGEgVFRTIHNlcnZpY2Ugd2FudHMKKyAgICAgKiB0byB1cGRhdGUgdGhlIHNldCBvZiBhdmFpbGFibGUgdm9pY2VzLCBpdCBzaG91bGQgY2FsbCB0aGUge0BsaW5rICNmb3JjZVZvaWNlc0luZm9DaGVjaygpfQorICAgICAqIG1ldGhvZC4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgTGlzdDxWb2ljZUluZm8+IGNoZWNrVm9pY2VzSW5mbygpIHsKKyAgICAgICAgaWYgKGltcGxlbWVudHNWMkFQSSgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJGb3IgcHJvcGVyIFYyIEFQSSBpbXBsZW1lbnRhdGlvbiB0aGlzIG1ldGhvZCBoYXMgdG8iICsKKyAgICAgICAgICAgICAgICAgICAgIiAgYmUgaW1wbGVtZW50ZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFYyIHRvIFYxIGludGVyZmFjZSBhZGFwdGVyLiBUaGlzIGFsbG93cyB1c2luZyBWMiBjbGllbnQgaW50ZXJmYWNlIG9uIFYxLW9ubHkgc2VydmljZXMuCisgICAgICAgIEJ1bmRsZSBkZWZhdWx0UGFyYW1zID0gbmV3IEJ1bmRsZSgpOworICAgICAgICBkZWZhdWx0UGFyYW1zLnB1dEZsb2F0KFRleHRUb1NwZWVjaENsaWVudC5QYXJhbXMuU1BFRUNIX1BJVENILCAxLjBmKTsKKyAgICAgICAgZGVmYXVsdFBhcmFtcy5wdXRGbG9hdChUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLlNQRUVDSF9TUEVFRCwgLTEuMGYpOworCisgICAgICAgIC8vIEVudW1lcmF0ZSBhbGwgbG9jYWxlcyBhbmQgY2hlY2sgaWYgdGhleSBhcmUgYXZhaWxhYmxlCisgICAgICAgIEFycmF5TGlzdDxWb2ljZUluZm8+IHZvaWNlc0luZm8gPSBuZXcgQXJyYXlMaXN0PFZvaWNlSW5mbz4oKTsKKyAgICAgICAgaW50IGlkID0gMDsKKyAgICAgICAgZm9yIChMb2NhbGUgbG9jYWxlIDogTG9jYWxlLmdldEF2YWlsYWJsZUxvY2FsZXMoKSkgeworICAgICAgICAgICAgaW50IGV4cGVjdGVkU3RhdHVzID0gVGV4dFRvU3BlZWNoLkxBTkdfQ09VTlRSWV9WQVJfQVZBSUxBQkxFOworICAgICAgICAgICAgaWYgKGxvY2FsZS5nZXRWYXJpYW50KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxvY2FsZS5nZXRDb3VudHJ5KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkU3RhdHVzID0gVGV4dFRvU3BlZWNoLkxBTkdfQVZBSUxBQkxFOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkU3RhdHVzID0gVGV4dFRvU3BlZWNoLkxBTkdfQ09VTlRSWV9BVkFJTEFCTEU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpbnQgbG9jYWxlU3RhdHVzID0gb25Jc0xhbmd1YWdlQXZhaWxhYmxlKGxvY2FsZS5nZXRJU08zTGFuZ3VhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZS5nZXRJU08zQ291bnRyeSgpLCBsb2NhbGUuZ2V0VmFyaWFudCgpKTsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxlU3RhdHVzICE9IGV4cGVjdGVkU3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgLy8gSWdub3JlIGxvY2FsZSB3aXRob3V0IGlzbyAzIGNvZGVzCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNldDxTdHJpbmc+IGZlYXR1cmVzID0gb25HZXRGZWF0dXJlc0Zvckxhbmd1YWdlKGxvY2FsZS5nZXRJU08zTGFuZ3VhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZS5nZXRJU08zQ291bnRyeSgpLCBsb2NhbGUuZ2V0VmFyaWFudCgpKTsKKworICAgICAgICAgICAgVm9pY2VJbmZvLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBWb2ljZUluZm8uQnVpbGRlcigpOworICAgICAgICAgICAgYnVpbGRlci5zZXRMYXRlbmN5KFZvaWNlSW5mby5MQVRFTkNZX05PUk1BTCk7CisgICAgICAgICAgICBidWlsZGVyLnNldFF1YWxpdHkoVm9pY2VJbmZvLlFVQUxJVFlfTk9STUFMKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0TG9jYWxlKGxvY2FsZSk7CisgICAgICAgICAgICBidWlsZGVyLnNldFBhcmFtc1dpdGhEZWZhdWx0cyhkZWZhdWx0UGFyYW1zKTsKKworICAgICAgICAgICAgaWYgKGZlYXR1cmVzID09IG51bGwgfHwgZmVhdHVyZXMuY29udGFpbnMoCisgICAgICAgICAgICAgICAgICAgIFRleHRUb1NwZWVjaC5FbmdpbmUuS0VZX0ZFQVRVUkVfRU1CRURERURfU1lOVEhFU0lTKSkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0TmFtZShsb2NhbGUudG9TdHJpbmcoKSArICItZW1iZWRkZWQiKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLnNldFJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb24oZmFsc2UpOworICAgICAgICAgICAgICAgIHZvaWNlc0luZm8uYWRkKGJ1aWxkZXIuYnVpbGQoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmZWF0dXJlcyAhPSBudWxsICYmIGZlYXR1cmVzLmNvbnRhaW5zKAorICAgICAgICAgICAgICAgICAgICBUZXh0VG9TcGVlY2guRW5naW5lLktFWV9GRUFUVVJFX05FVFdPUktfU1lOVEhFU0lTKSkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0TmFtZShsb2NhbGUudG9TdHJpbmcoKSArICItbmV0d29yayIpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0UmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbih0cnVlKTsKKyAgICAgICAgICAgICAgICB2b2ljZXNJbmZvLmFkZChidWlsZGVyLmJ1aWxkKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHZvaWNlc0luZm87CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVsbHMgdGhlIHN5bnRoZXNpcyB0aHJlYWQgdGhhdCBpdCBzaG91bGQgcmVsb2FkIHZvaWNlIGRhdGEuCisgICAgICogVGhlcmUncyBhIGhpZ2ggcHJvYmFiaWxpdHkgdGhhdCB0aGUgdW5kZXJseWluZyBzZXQgb2YgYXZhaWxhYmxlIHZvaWNlIGRhdGEgaGFzIGNoYW5nZWQuCisgICAgICogQ2FsbGVkIG9ubHkgb24gdGhlIHN5bnRoZXNpcyB0aHJlYWQuCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgb25Wb2ljZXNJbmZvQ2hhbmdlKCkgeworCisgICAgfQorCisgICAgLyoqCisgICAgICogVGVsbHMgdGhlIHNlcnZpY2UgdG8gc3ludGhlc2l6ZSBzcGVlY2ggZnJvbSB0aGUgZ2l2ZW4gdGV4dC4gVGhpcyBtZXRob2QKKyAgICAgKiBzaG91bGQgYmxvY2sgdW50aWwgdGhlIHN5bnRoZXNpcyBpcyBmaW5pc2hlZC4gVXNlZCBmb3IgcmVxdWVzdHMgZnJvbSBWMgorICAgICAqIGNsaWVudCB7QGxpbmsgYW5kcm9pZC5zcGVlY2gudHRzLlRleHRUb1NwZWVjaENsaWVudH0uIENhbGxlZCBvbiB0aGUKKyAgICAgKiBzeW50aGVzaXMgdGhyZWFkLgorICAgICAqCisgICAgICogQHBhcmFtIHJlcXVlc3QgVGhlIHN5bnRoZXNpcyByZXF1ZXN0LgorICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdGhlIHRoZSBlbmdpbmUgbXVzdCB1c2UgdG8gbWFrZSBkYXRhCisgICAgICogICAgICAgICAgICBhdmFpbGFibGUgZm9yIHBsYXliYWNrIG9yIGZvciB3cml0aW5nIHRvIGEgZmlsZS4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBvblN5bnRoZXNpemVUZXh0VjIoU3ludGhlc2lzUmVxdWVzdFYyIHJlcXVlc3QsCisgICAgICAgICAgICBWb2ljZUluZm8gc2VsZWN0ZWRWb2ljZSwKKyAgICAgICAgICAgIFN5bnRoZXNpc0NhbGxiYWNrIGNhbGxiYWNrKSB7CisgICAgICAgIGlmIChpbXBsZW1lbnRzVjJBUEkoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiRm9yIHByb3BlciBWMiBBUEkgaW1wbGVtZW50YXRpb24gdGhpcyBtZXRob2QgaGFzIHRvIiArCisgICAgICAgICAgICAgICAgICAgICIgIGJlIGltcGxlbWVudGVkIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBDb252ZXJ0IHRvIFYxIHBhcmFtcworICAgICAgICBpbnQgc3BlZWNoUmF0ZSA9IChpbnQpIChyZXF1ZXN0LmdldFZvaWNlUGFyYW1zKCkuZ2V0RmxvYXQoCisgICAgICAgICAgICAgICAgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcy5TUEVFQ0hfU1BFRUQsIDEuMGYpICogMTAwKTsKKyAgICAgICAgaW50IHNwZWVjaFBpdGNoID0gKGludCkgKHJlcXVlc3QuZ2V0Vm9pY2VQYXJhbXMoKS5nZXRGbG9hdCgKKyAgICAgICAgICAgICAgICBUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLlNQRUVDSF9QSVRDSCwgMS4wZikgKiAxMDApOworCisgICAgICAgIC8vIFByb3ZpZGUgYWRhcHRlciB0byBWMSBBUEkKKyAgICAgICAgQnVuZGxlIHBhcmFtcyA9IG5ldyBCdW5kbGUoKTsKKyAgICAgICAgcGFyYW1zLnB1dFN0cmluZyhUZXh0VG9TcGVlY2guRW5naW5lLktFWV9QQVJBTV9VVFRFUkFOQ0VfSUQsIHJlcXVlc3QuZ2V0VXR0ZXJhbmNlSWQoKSk7CisgICAgICAgIHBhcmFtcy5wdXRJbnQoVGV4dFRvU3BlZWNoLkVuZ2luZS5LRVlfUEFSQU1fUElUQ0gsIHNwZWVjaFBpdGNoKTsKKyAgICAgICAgcGFyYW1zLnB1dEludChUZXh0VG9TcGVlY2guRW5naW5lLktFWV9QQVJBTV9SQVRFLCBzcGVlY2hSYXRlKTsKKyAgICAgICAgaWYgKHNlbGVjdGVkVm9pY2UuZ2V0UmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbigpKSB7CisgICAgICAgICAgICBwYXJhbXMucHV0U3RyaW5nKFRleHRUb1NwZWVjaC5FbmdpbmUuS0VZX0ZFQVRVUkVfTkVUV09SS19TWU5USEVTSVMsICJ0cnVlIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXJhbXMucHV0U3RyaW5nKFRleHRUb1NwZWVjaC5FbmdpbmUuS0VZX0ZFQVRVUkVfRU1CRURERURfU1lOVEhFU0lTLCAidHJ1ZSIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQnVpbGQgVjEgcmVxdWVzdAorICAgICAgICBTeW50aGVzaXNSZXF1ZXN0IHJlcXVlc3RWMSA9IG5ldyBTeW50aGVzaXNSZXF1ZXN0KHJlcXVlc3QuZ2V0VGV4dCgpLCBwYXJhbXMpOworICAgICAgICBMb2NhbGUgbG9jYWxlID0gc2VsZWN0ZWRWb2ljZS5nZXRMb2NhbGUoKTsKKyAgICAgICAgcmVxdWVzdFYxLnNldExhbmd1YWdlKGxvY2FsZS5nZXRJU08zTGFuZ3VhZ2UoKSwgbG9jYWxlLmdldElTTzNDb3VudHJ5KCksCisgICAgICAgICAgICAgICAgbG9jYWxlLmdldFZhcmlhbnQoKSk7CisgICAgICAgIHJlcXVlc3RWMS5zZXRTcGVlY2hSYXRlKHNwZWVjaFJhdGUpOworICAgICAgICByZXF1ZXN0VjEuc2V0UGl0Y2goc3BlZWNoUGl0Y2gpOworCisgICAgICAgIC8vIFN5bnRoZXNpemUgdXNpbmcgVjEgaW50ZXJmYWNlCisgICAgICAgIG9uU3ludGhlc2l6ZVRleHQocmVxdWVzdFYxLCBjYWxsYmFjayk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSWYgdHJ1ZSwgdGhpcyBzZXJ2aWNlIGltcGxlbWVudHMgcHJvcGVyIFYyIFRUUyBBUEkgc2VydmljZS4gSWYgaXQncyBmYWxzZSwKKyAgICAgKiBWMiBBUEkgd2lsbCBiZSBwcm92aWRlZCB0aHJvdWdoIGFkYXB0ZXIuCisgICAgICovCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gaW1wbGVtZW50c1YyQVBJKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCiAgICAgICogUXVlcmllcyB0aGUgc2VydmljZSBmb3IgYSBzZXQgb2YgZmVhdHVyZXMgc3VwcG9ydGVkIGZvciBhIGdpdmVuIGxhbmd1YWdlLgogICAgICAqCisgICAgICogQ2FuIGJlIGNhbGxlZCBvbiBtdWx0aXBsZSB0aHJlYWRzLgorICAgICAqCiAgICAgICogQHBhcmFtIGxhbmcgSVNPLTMgbGFuZ3VhZ2UgY29kZS4KICAgICAgKiBAcGFyYW0gY291bnRyeSBJU08tMyBjb3VudHJ5IGNvZGUuIE1heSBiZSBlbXB0eSBvciBudWxsLgogICAgICAqIEBwYXJhbSB2YXJpYW50IExhbmd1YWdlIHZhcmlhbnQuIE1heSBiZSBlbXB0eSBvciBudWxsLgpAQCAtMjE1LDYgKzM4NSw2OSBAQAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKKyAgICBwcml2YXRlIExpc3Q8Vm9pY2VJbmZvPiBnZXRWb2ljZXNJbmZvKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Wb2ljZXNJbmZvTG9jaykgeworICAgICAgICAgICAgaWYgKG1Wb2ljZXNJbmZvTGlzdCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gR2V0IHZvaWNlcy4gRGVmZW5zaXZlIGNvcHkgdG8gbWFrZSBzdXJlIFRUUyBlbmdpbmUgd29uJ3QgYWx0ZXIgdGhlIGxpc3QuCisgICAgICAgICAgICAgICAgbVZvaWNlc0luZm9MaXN0ID0gbmV3IEFycmF5TGlzdDxWb2ljZUluZm8+KGNoZWNrVm9pY2VzSW5mbygpKTsKKyAgICAgICAgICAgICAgICAvLyBCdWlsZCBsb29rdXAgbWFwCisgICAgICAgICAgICAgICAgbVZvaWNlc0luZm9Mb29rdXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFZvaWNlSW5mbz4oKGludCkgKAorICAgICAgICAgICAgICAgICAgICAgICAgbVZvaWNlc0luZm9MaXN0LnNpemUoKSoxLjVmKSk7CisgICAgICAgICAgICAgICAgZm9yIChWb2ljZUluZm8gdm9pY2VJbmZvIDogbVZvaWNlc0luZm9MaXN0KSB7CisgICAgICAgICAgICAgICAgICAgIFZvaWNlSW5mbyBwcmV2ID0gbVZvaWNlc0luZm9Mb29rdXAucHV0KHZvaWNlSW5mby5nZXROYW1lKCksIHZvaWNlSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkR1cGxpY2F0ZSBuYW1lICgiICsgdm9pY2VJbmZvLmdldE5hbWUoKSArICIpIG9mIHRoZSB2b2ljZSAiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtVm9pY2VzSW5mb0xpc3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgVm9pY2VJbmZvIGdldFZvaWNlc0luZm9XaXRoTmFtZShTdHJpbmcgbmFtZSkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Wb2ljZXNJbmZvTG9jaykgeworICAgICAgICAgICAgaWYgKG1Wb2ljZXNJbmZvTG9va3VwICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbVZvaWNlc0luZm9Mb29rdXAuZ2V0KG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZvcmNlIFRUUyBzZXJ2aWNlIHRvIHJlZXZhbHVhdGUgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLiBXaWxsIHJlc3VsdCBpbgorICAgICAqIGEgY2FsbCB0byB7QGxpbmsgI2NoZWNrVm9pY2VzSW5mbygpfSBvbiB0aGUgc2FtZSB0aHJlYWQsIHtAbGluayAjb25Wb2ljZXNJbmZvQ2hhbmdlfQorICAgICAqIG9uIHRoZSBzeW50aGVzaXplciB0aHJlYWQgYW5kIGNhbGxiYWNrIHRvCisgICAgICoge0BsaW5rIFRleHRUb1NwZWVjaENsaWVudC5Db25uZWN0aW9uQ2FsbGJhY2tzI29uRW5naW5lU3RhdHVzQ2hhbmdlfSBvZiBhbGwgY29ubmVjdGVkCisgICAgICogVFRTIGNsaWVudHMuCisgICAgICoKKyAgICAgKiBVc2UgdGhpcyBtZXRob2Qgb25seSBpZiB5b3Uga25vdyB0aGF0IHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIGNoYW5nZWQuCisgICAgICoKKyAgICAgKiBDYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlIHRocmVhZHMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yY2VWb2ljZXNJbmZvQ2hlY2soKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVZvaWNlc0luZm9Mb2NrKSB7CisgICAgICAgICAgICBMaXN0PFZvaWNlSW5mbz4gb2xkID0gbVZvaWNlc0luZm9MaXN0OworCisgICAgICAgICAgICBtVm9pY2VzSW5mb0xpc3QgPSBudWxsOyAvLyBGb3JjZSByZWNyZWF0aW9uIG9mIHZvaWNlcyBpbmZvIGxpc3QKKyAgICAgICAgICAgIGdldFZvaWNlc0luZm8oKTsKKworICAgICAgICAgICAgaWYgKG1Wb2ljZXNJbmZvTGlzdCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVGhpcyBtZXRob2QgYXBwbGllcyBvbmx5IHRvIHNlcnZpY2VzICIgKworICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRpbmcgVjIgVFRTIEFQSS4gVGhpcyBzZXJ2aWNlcyBkb2Vzbid0IHN1cHBvcnQgVjIgVFRTIEFQSS4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG9sZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gRmx1c2ggYWxsIGV4aXN0aW5nIGl0ZW1zLCBhbmQgaW5mb3JtIHN5bnRoZXNpcyB0aHJlYWQgYWJvdXQgdGhlIGNoYW5nZS4KKyAgICAgICAgICAgICAgICBtU3ludGhIYW5kbGVyLmVucXVldWVTcGVlY2hJdGVtKFRleHRUb1NwZWVjaC5RVUVVRV9GTFVTSCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBWb2ljZXNJbmZvQ2hhbmdlSXRlbSgpKTsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgaXRlbXMgdGhhdCBtYXkgYmUgYWRkZWQgdG8gcXVldWUgYWZ0ZXIgU3ludGhlc2l6ZXJSZXN0YXJ0SXRlbQorICAgICAgICAgICAgICAgIC8vIGJ1dCBiZWZvcmUgY2xpZW50IHJlY29ubmVjdGlvbgorICAgICAgICAgICAgICAgIC8vIERpc2Nvbm5lY3QgYWxsIG9mIHRoZW0KKyAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLmRpc3BhdGNoVm9pY2VzSW5mb0NoYW5nZShtVm9pY2VzSW5mb0xpc3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgcHJpdmF0ZSBpbnQgZ2V0RGVmYXVsdFNwZWVjaFJhdGUoKSB7CiAgICAgICAgIHJldHVybiBnZXRTZWN1cmVTZXR0aW5nSW50KFNldHRpbmdzLlNlY3VyZS5UVFNfREVGQVVMVF9SQVRFLCBFbmdpbmUuREVGQVVMVF9SQVRFKTsKICAgICB9CkBAIC0zMTcsNyArNTUwLDggQEAKIAogICAgICAgICAgICAgaWYgKCFzcGVlY2hJdGVtLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgICAgIGlmICh1dHRlcmVuY2VQcm9ncmVzcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHV0dGVyZW5jZVByb2dyZXNzLmRpc3BhdGNoT25FcnJvcigpOworICAgICAgICAgICAgICAgICAgICB1dHRlcmVuY2VQcm9ncmVzcy5kaXNwYXRjaE9uRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cy5FUlJPUl9JTlZBTElEX1JFUVVFU1QpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQpAQCAtMzQyLDEyICs1NzYsMTMgQEAKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBzdHJpbmcgaXMgaW50ZXJuZWQsIHNvIHRoZSA9PSBjb21wYXJpc29uIHdvcmtzLgogICAgICAgICAgICAgbXNnLm9iaiA9IHNwZWVjaEl0ZW0uZ2V0Q2FsbGVySWRlbnRpdHkoKTsKKwogICAgICAgICAgICAgaWYgKHNlbmRNZXNzYWdlKG1zZykpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLlNVQ0NFU1M7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIExvZy53KFRBRywgIlN5bnRoVGhyZWFkIGhhcyBxdWl0Iik7CiAgICAgICAgICAgICAgICAgaWYgKHV0dGVyZW5jZVByb2dyZXNzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdXR0ZXJlbmNlUHJvZ3Jlc3MuZGlzcGF0Y2hPbkVycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIHV0dGVyZW5jZVByb2dyZXNzLmRpc3BhdGNoT25FcnJvcihUZXh0VG9TcGVlY2hDbGllbnQuU3RhdHVzLkVSUk9SX1NFUlZJQ0UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQpAQCAtMzk5LDkgKzYzNCwxMSBAQAogICAgIH0KIAogICAgIGludGVyZmFjZSBVdHRlcmFuY2VQcm9ncmVzc0Rpc3BhdGNoZXIgewotICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uRG9uZSgpOworICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uRmFsbGJhY2soKTsKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPblN0b3AoKTsKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPblN1Y2Nlc3MoKTsKICAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPblN0YXJ0KCk7Ci0gICAgICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoT25FcnJvcigpOworICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uRXJyb3IoaW50IGVycm9yQ29kZSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MDksMTUgKzY0NiwxMyBAQAogICAgICAqLwogICAgIHByaXZhdGUgYWJzdHJhY3QgY2xhc3MgU3BlZWNoSXRlbSB7CiAgICAgICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1DYWxsZXJJZGVudGl0eTsKLSAgICAgICAgcHJvdGVjdGVkIGZpbmFsIEJ1bmRsZSBtUGFyYW1zOwogICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtQ2FsbGVyVWlkOwogICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtQ2FsbGVyUGlkOwogICAgICAgICBwcml2YXRlIGJvb2xlYW4gbVN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1TdG9wcGVkID0gZmFsc2U7CiAKLSAgICAgICAgcHVibGljIFNwZWVjaEl0ZW0oT2JqZWN0IGNhbGxlciwgaW50IGNhbGxlclVpZCwgaW50IGNhbGxlclBpZCwgQnVuZGxlIHBhcmFtcykgeworICAgICAgICBwdWJsaWMgU3BlZWNoSXRlbShPYmplY3QgY2FsbGVyLCBpbnQgY2FsbGVyVWlkLCBpbnQgY2FsbGVyUGlkKSB7CiAgICAgICAgICAgICBtQ2FsbGVySWRlbnRpdHkgPSBjYWxsZXI7Ci0gICAgICAgICAgICBtUGFyYW1zID0gcGFyYW1zOwogICAgICAgICAgICAgbUNhbGxlclVpZCA9IGNhbGxlclVpZDsKICAgICAgICAgICAgIG1DYWxsZXJQaWQgPSBjYWxsZXJQaWQ7CiAgICAgICAgIH0KQEAgLTQ0NiwyMCArNjgxLDE4IEBACiAgICAgICAgICAqIE11c3Qgbm90IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4KICAgICAgICAgICoKICAgICAgICAgICogT25seSBjYWxsZWQgb24gdGhlIHN5bnRoZXNpcyB0aHJlYWQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4ge0BsaW5rIFRleHRUb1NwZWVjaCNTVUNDRVNTfSBvciB7QGxpbmsgVGV4dFRvU3BlZWNoI0VSUk9SfS4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgcGxheSgpIHsKKyAgICAgICAgcHVibGljIHZvaWQgcGxheSgpIHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgICAgIGlmIChtU3RhcnRlZCkgewogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJwbGF5KCkgY2FsbGVkIHR3aWNlIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1TdGFydGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBwbGF5SW1wbCgpOworICAgICAgICAgICAgcGxheUltcGwoKTsKICAgICAgICAgfQogCi0gICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBpbnQgcGxheUltcGwoKTsKKyAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgcGxheUltcGwoKTsKIAogICAgICAgICAvKioKICAgICAgICAgICogU3RvcHMgdGhlIHNwZWVjaCBpdGVtLgpAQCAtNDg1LDIwICs3MTgsMzcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBBbiBpdGVtIGluIHRoZSBzeW50aCB0aHJlYWQgcXVldWUgdGhhdCBwcm9jZXNzIHV0dGVyYW5jZS4KKyAgICAgKiBBbiBpdGVtIGluIHRoZSBzeW50aCB0aHJlYWQgcXVldWUgdGhhdCBwcm9jZXNzIHV0dGVyYW5jZSAoYW5kIGNhbGwgYmFjayB0byBjbGllbnQgYWJvdXQKKyAgICAgKiBwcm9ncmVzcykuCiAgICAgICovCiAgICAgcHJpdmF0ZSBhYnN0cmFjdCBjbGFzcyBVdHRlcmFuY2VTcGVlY2hJdGVtIGV4dGVuZHMgU3BlZWNoSXRlbQogICAgICAgICBpbXBsZW1lbnRzIFV0dGVyYW5jZVByb2dyZXNzRGlzcGF0Y2hlciAgewogCi0gICAgICAgIHB1YmxpYyBVdHRlcmFuY2VTcGVlY2hJdGVtKE9iamVjdCBjYWxsZXIsIGludCBjYWxsZXJVaWQsIGludCBjYWxsZXJQaWQsIEJ1bmRsZSBwYXJhbXMpIHsKLSAgICAgICAgICAgIHN1cGVyKGNhbGxlciwgY2FsbGVyVWlkLCBjYWxsZXJQaWQsIHBhcmFtcyk7CisgICAgICAgIHB1YmxpYyBVdHRlcmFuY2VTcGVlY2hJdGVtKE9iamVjdCBjYWxsZXIsIGludCBjYWxsZXJVaWQsIGludCBjYWxsZXJQaWQpIHsKKyAgICAgICAgICAgIHN1cGVyKGNhbGxlciwgY2FsbGVyVWlkLCBjYWxsZXJQaWQpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoT25Eb25lKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uU3VjY2VzcygpIHsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB1dHRlcmFuY2VJZCA9IGdldFV0dGVyYW5jZUlkKCk7CiAgICAgICAgICAgICBpZiAodXR0ZXJhbmNlSWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1DYWxsYmFja3MuZGlzcGF0Y2hPbkRvbmUoZ2V0Q2FsbGVySWRlbnRpdHkoKSwgdXR0ZXJhbmNlSWQpOworICAgICAgICAgICAgICAgIG1DYWxsYmFja3MuZGlzcGF0Y2hPblN1Y2Nlc3MoZ2V0Q2FsbGVySWRlbnRpdHkoKSwgdXR0ZXJhbmNlSWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoT25TdG9wKCkgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHV0dGVyYW5jZUlkID0gZ2V0VXR0ZXJhbmNlSWQoKTsKKyAgICAgICAgICAgIGlmICh1dHRlcmFuY2VJZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrcy5kaXNwYXRjaE9uU3RvcChnZXRDYWxsZXJJZGVudGl0eSgpLCB1dHRlcmFuY2VJZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPbkZhbGxiYWNrKCkgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHV0dGVyYW5jZUlkID0gZ2V0VXR0ZXJhbmNlSWQoKTsKKyAgICAgICAgICAgIGlmICh1dHRlcmFuY2VJZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrcy5kaXNwYXRjaE9uRmFsbGJhY2soZ2V0Q2FsbGVySWRlbnRpdHkoKSwgdXR0ZXJhbmNlSWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTUxMSw0NCArNzYxLDI2MCBAQAogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoT25FcnJvcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPbkVycm9yKGludCBlcnJvckNvZGUpIHsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB1dHRlcmFuY2VJZCA9IGdldFV0dGVyYW5jZUlkKCk7CiAgICAgICAgICAgICBpZiAodXR0ZXJhbmNlSWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1DYWxsYmFja3MuZGlzcGF0Y2hPbkVycm9yKGdldENhbGxlcklkZW50aXR5KCksIHV0dGVyYW5jZUlkKTsKKyAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLmRpc3BhdGNoT25FcnJvcihnZXRDYWxsZXJJZGVudGl0eSgpLCB1dHRlcmFuY2VJZCwgZXJyb3JDb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0U3RyZWFtVHlwZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbShFbmdpbmUuS0VZX1BBUkFNX1NUUkVBTSwgRW5naW5lLkRFRkFVTFRfU1RSRUFNKTsKKyAgICAgICAgYWJzdHJhY3QgcHVibGljIFN0cmluZyBnZXRVdHRlcmFuY2VJZCgpOworCisgICAgICAgIFN0cmluZyBnZXRTdHJpbmdQYXJhbShCdW5kbGUgcGFyYW1zLCBTdHJpbmcga2V5LCBTdHJpbmcgZGVmYXVsdFZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gcGFyYW1zID09IG51bGwgPyBkZWZhdWx0VmFsdWUgOiBwYXJhbXMuZ2V0U3RyaW5nKGtleSwgZGVmYXVsdFZhbHVlKTsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBmbG9hdCBnZXRWb2x1bWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbShFbmdpbmUuS0VZX1BBUkFNX1ZPTFVNRSwgRW5naW5lLkRFRkFVTFRfVk9MVU1FKTsKKyAgICAgICAgaW50IGdldEludFBhcmFtKEJ1bmRsZSBwYXJhbXMsIFN0cmluZyBrZXksIGludCBkZWZhdWx0VmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJhbXMgPT0gbnVsbCA/IGRlZmF1bHRWYWx1ZSA6IHBhcmFtcy5nZXRJbnQoa2V5LCBkZWZhdWx0VmFsdWUpOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIGZsb2F0IGdldFBhbigpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtKEVuZ2luZS5LRVlfUEFSQU1fUEFOLCBFbmdpbmUuREVGQVVMVF9QQU4pOworICAgICAgICBmbG9hdCBnZXRGbG9hdFBhcmFtKEJ1bmRsZSBwYXJhbXMsIFN0cmluZyBrZXksIGZsb2F0IGRlZmF1bHRWYWx1ZSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcmFtcyA9PSBudWxsID8gZGVmYXVsdFZhbHVlIDogcGFyYW1zLmdldEZsb2F0KGtleSwgZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFV0dGVyYW5jZVNwZWVjaEl0ZW0gZm9yIFYxIEFQSSBzcGVlY2ggaXRlbXMuIFYxIEFQSSBzcGVlY2ggaXRlbXMga2VlcAorICAgICAqIHN5bnRoZXNpcyBwYXJhbWV0ZXJzIGluIGEgc2luZ2xlIEJ1bmRsZSBwYXNzZWQgYXMgcGFyYW1ldGVyLiBUaGlzIGNsYXNzCisgICAgICogYWxsb3cgc3ViY2xhc3NlcyB0byBhY2Nlc3MgdGhlbSBjb252ZW5pZW50bHkuCisgICAgICovCisgICAgcHJpdmF0ZSBhYnN0cmFjdCBjbGFzcyBTcGVlY2hJdGVtVjEgZXh0ZW5kcyBVdHRlcmFuY2VTcGVlY2hJdGVtIHsKKyAgICAgICAgcHJvdGVjdGVkIGZpbmFsIEJ1bmRsZSBtUGFyYW1zOworCisgICAgICAgIFNwZWVjaEl0ZW1WMShPYmplY3QgY2FsbGVySWRlbnRpdHksIGludCBjYWxsZXJVaWQsIGludCBjYWxsZXJQaWQsCisgICAgICAgICAgICAgICAgQnVuZGxlIHBhcmFtcykgeworICAgICAgICAgICAgc3VwZXIoY2FsbGVySWRlbnRpdHksIGNhbGxlclVpZCwgY2FsbGVyUGlkKTsKKyAgICAgICAgICAgIG1QYXJhbXMgPSBwYXJhbXM7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIGhhc0xhbmd1YWdlKCkgeworICAgICAgICAgICAgcmV0dXJuICFUZXh0VXRpbHMuaXNFbXB0eShnZXRTdHJpbmdQYXJhbShtUGFyYW1zLCBFbmdpbmUuS0VZX1BBUkFNX0xBTkdVQUdFLCBudWxsKSk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgZ2V0U3BlZWNoUmF0ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbShtUGFyYW1zLCBFbmdpbmUuS0VZX1BBUkFNX1JBVEUsIGdldERlZmF1bHRTcGVlY2hSYXRlKCkpOworICAgICAgICB9CisKKyAgICAgICAgaW50IGdldFBpdGNoKCkgeworICAgICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtKG1QYXJhbXMsIEVuZ2luZS5LRVlfUEFSQU1fUElUQ0gsIEVuZ2luZS5ERUZBVUxUX1BJVENIKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFV0dGVyYW5jZUlkKCkgeworICAgICAgICAgICAgcmV0dXJuIGdldFN0cmluZ1BhcmFtKG1QYXJhbXMsIEVuZ2luZS5LRVlfUEFSQU1fVVRURVJBTkNFX0lELCBudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBnZXRTdHJlYW1UeXBlKCkgeworICAgICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtKG1QYXJhbXMsIEVuZ2luZS5LRVlfUEFSQU1fU1RSRUFNLCBFbmdpbmUuREVGQVVMVF9TVFJFQU0pOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgZ2V0Vm9sdW1lKCkgeworICAgICAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW0obVBhcmFtcywgRW5naW5lLktFWV9QQVJBTV9WT0xVTUUsIEVuZ2luZS5ERUZBVUxUX1ZPTFVNRSk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBnZXRQYW4oKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbShtUGFyYW1zLCBFbmdpbmUuS0VZX1BBUkFNX1BBTiwgRW5naW5lLkRFRkFVTFRfUEFOKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFN5bnRoZXNpc1NwZWVjaEl0ZW1WMiBleHRlbmRzIFV0dGVyYW5jZVNwZWVjaEl0ZW0geworICAgICAgICBwcml2YXRlIGZpbmFsIFN5bnRoZXNpc1JlcXVlc3RWMiBtU3ludGhlc2lzUmVxdWVzdDsKKyAgICAgICAgcHJpdmF0ZSBBYnN0cmFjdFN5bnRoZXNpc0NhbGxiYWNrIG1TeW50aGVzaXNDYWxsYmFjazsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBFdmVudExvZ2dlclYyIG1FdmVudExvZ2dlcjsKKworICAgICAgICBwdWJsaWMgU3ludGhlc2lzU3BlZWNoSXRlbVYyKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgaW50IGNhbGxlclVpZCwgaW50IGNhbGxlclBpZCwKKyAgICAgICAgICAgICAgICBTeW50aGVzaXNSZXF1ZXN0VjIgc3ludGhlc2lzUmVxdWVzdCkgeworICAgICAgICAgICAgc3VwZXIoY2FsbGVySWRlbnRpdHksIGNhbGxlclVpZCwgY2FsbGVyUGlkKTsKKworICAgICAgICAgICAgbVN5bnRoZXNpc1JlcXVlc3QgPSBzeW50aGVzaXNSZXF1ZXN0OworICAgICAgICAgICAgbUV2ZW50TG9nZ2VyID0gbmV3IEV2ZW50TG9nZ2VyVjIoc3ludGhlc2lzUmVxdWVzdCwgY2FsbGVyVWlkLCBjYWxsZXJQaWQsCisgICAgICAgICAgICAgICAgICAgIG1QYWNrYWdlTmFtZSk7CisKKyAgICAgICAgICAgIHVwZGF0ZVNwZWVjaFNwZWVkUGFyYW0oc3ludGhlc2lzUmVxdWVzdCk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlU3BlZWNoU3BlZWRQYXJhbShTeW50aGVzaXNSZXF1ZXN0VjIgc3ludGhlc2lzUmVxdWVzdCkgeworICAgICAgICAgICAgQnVuZGxlIHZvaWNlUGFyYW1zID0gbVN5bnRoZXNpc1JlcXVlc3QuZ2V0Vm9pY2VQYXJhbXMoKTsKKworICAgICAgICAgICAgLy8gSW5qZWN0IGRlZmF1bHQgc3BlZWNoIHNwZWVkIGlmIG5lZWRlZAorICAgICAgICAgICAgaWYgKHZvaWNlUGFyYW1zLmNvbnRhaW5zS2V5KFRleHRUb1NwZWVjaENsaWVudC5QYXJhbXMuU1BFRUNIX1NQRUVEKSkgeworICAgICAgICAgICAgICAgIGlmICh2b2ljZVBhcmFtcy5nZXRGbG9hdChUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLlNQRUVDSF9TUEVFRCkgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICB2b2ljZVBhcmFtcy5wdXRGbG9hdChUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLlNQRUVDSF9TUEVFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREZWZhdWx0U3BlZWNoUmF0ZSgpIC8gMTAwLjBmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpIHsKKyAgICAgICAgICAgIGlmIChtU3ludGhlc2lzUmVxdWVzdC5nZXRUZXh0KCkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIm51bGwgc3ludGhlc2lzIHRleHQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobVN5bnRoZXNpc1JlcXVlc3QuZ2V0VGV4dCgpLmxlbmd0aCgpID49IFRleHRUb1NwZWVjaC5nZXRNYXhTcGVlY2hJbnB1dExlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiVGV4dCB0b28gbG9uZzogIiArIG1TeW50aGVzaXNSZXF1ZXN0LmdldFRleHQoKS5sZW5ndGgoKSArICIgY2hhcnMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHBsYXlJbXBsKCkgeworICAgICAgICAgICAgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBzeW50aGVzaXNDYWxsYmFjazsKKyAgICAgICAgICAgIGlmIChtRXZlbnRMb2dnZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1FdmVudExvZ2dlci5vblJlcXVlc3RQcm9jZXNzaW5nU3RhcnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgICAgICAgICAgIC8vIHN0b3AoKSBtaWdodCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZSB3ZSBlbnRlciB0aGlzCisgICAgICAgICAgICAgICAgLy8gc3luY2hyb25pemVkIGJsb2NrLgorICAgICAgICAgICAgICAgIGlmIChpc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1TeW50aGVzaXNDYWxsYmFjayA9IGNyZWF0ZVN5bnRoZXNpc0NhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgc3ludGhlc2lzQ2FsbGJhY2sgPSBtU3ludGhlc2lzQ2FsbGJhY2s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEdldCB2b2ljZSBpbmZvCisgICAgICAgICAgICBWb2ljZUluZm8gdm9pY2VJbmZvID0gZ2V0Vm9pY2VzSW5mb1dpdGhOYW1lKG1TeW50aGVzaXNSZXF1ZXN0LmdldFZvaWNlTmFtZSgpKTsKKyAgICAgICAgICAgIGlmICh2b2ljZUluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIFByaW1hcnkgdm9pY2UKKyAgICAgICAgICAgICAgICBUZXh0VG9TcGVlY2hTZXJ2aWNlLnRoaXMub25TeW50aGVzaXplVGV4dFYyKG1TeW50aGVzaXNSZXF1ZXN0LCB2b2ljZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICBzeW50aGVzaXNDYWxsYmFjayk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVua25vd24gdm9pY2UgbmFtZToiICsgbVN5bnRoZXNpc1JlcXVlc3QuZ2V0Vm9pY2VOYW1lKCkpOworICAgICAgICAgICAgICAgIHN5bnRoZXNpc0NhbGxiYWNrLmVycm9yKFRleHRUb1NwZWVjaENsaWVudC5TdGF0dXMuRVJST1JfSU5WQUxJRF9SRVFVRVNUKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRml4IGZvciBjYXNlIHdoZXJlIGNsaWVudCBjYWxsZWQgLnN0YXJ0KCkgJiAuZXJyb3IoKSwgYnV0IGRpZCBub3QgY2FsbGVkIC5kb25lKCkKKyAgICAgICAgICAgIGlmICghc3ludGhlc2lzQ2FsbGJhY2suaGFzRmluaXNoZWQoKSkgeworICAgICAgICAgICAgICAgIHN5bnRoZXNpc0NhbGxiYWNrLmRvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBzdG9wSW1wbCgpIHsKKyAgICAgICAgICAgIEFic3RyYWN0U3ludGhlc2lzQ2FsbGJhY2sgc3ludGhlc2lzQ2FsbGJhY2s7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXNDYWxsYmFjayA9IG1TeW50aGVzaXNDYWxsYmFjazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzeW50aGVzaXNDYWxsYmFjayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHN5bnRoZXNpcyBjYWxsYmFjayBpcyBudWxsLCBpdCBpbXBsaWVzIHRoYXQgd2UgaGF2ZW4ndAorICAgICAgICAgICAgICAgIC8vIGVudGVyZWQgdGhlIHN5bmNocm9uaXplZCh0aGlzKSBibG9jayBpbiBwbGF5SW1wbCB3aGljaCBpbgorICAgICAgICAgICAgICAgIC8vIHR1cm4gaW1wbGllcyB0aGF0IHN5bnRoZXNpcyB3b3VsZCBub3QgaGF2ZSBzdGFydGVkLgorICAgICAgICAgICAgICAgIHN5bnRoZXNpc0NhbGxiYWNrLnN0b3AoKTsKKyAgICAgICAgICAgICAgICBUZXh0VG9TcGVlY2hTZXJ2aWNlLnRoaXMub25TdG9wKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBjcmVhdGVTeW50aGVzaXNDYWxsYmFjaygpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUGxheWJhY2tTeW50aGVzaXNDYWxsYmFjayhnZXRTdHJlYW1UeXBlKCksIGdldFZvbHVtZSgpLCBnZXRQYW4oKSwKKyAgICAgICAgICAgICAgICAgICAgbUF1ZGlvUGxheWJhY2tIYW5kbGVyLCB0aGlzLCBnZXRDYWxsZXJJZGVudGl0eSgpLCBtRXZlbnRMb2dnZXIsCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudHNWMkFQSSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgaW50IGdldFN0cmVhbVR5cGUoKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW0obVN5bnRoZXNpc1JlcXVlc3QuZ2V0QXVkaW9QYXJhbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcy5BVURJT19QQVJBTV9TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgIEVuZ2luZS5ERUZBVUxUX1NUUkVBTSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGZsb2F0IGdldFZvbHVtZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtKG1TeW50aGVzaXNSZXF1ZXN0LmdldEF1ZGlvUGFyYW1zKCksCisgICAgICAgICAgICAgICAgICAgIFRleHRUb1NwZWVjaENsaWVudC5QYXJhbXMuQVVESU9fUEFSQU1fVk9MVU1FLAorICAgICAgICAgICAgICAgICAgICBFbmdpbmUuREVGQVVMVF9WT0xVTUUpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBmbG9hdCBnZXRQYW4oKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbShtU3ludGhlc2lzUmVxdWVzdC5nZXRBdWRpb1BhcmFtcygpLAorICAgICAgICAgICAgICAgICAgICBUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLkFVRElPX1BBUkFNX1BBTiwKKyAgICAgICAgICAgICAgICAgICAgRW5naW5lLkRFRkFVTFRfUEFOKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFV0dGVyYW5jZUlkKCkgeworICAgICAgICAgICAgcmV0dXJuIG1TeW50aGVzaXNSZXF1ZXN0LmdldFV0dGVyYW5jZUlkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFN5bnRoZXNpc1RvRmlsZU91dHB1dFN0cmVhbVNwZWVjaEl0ZW1WMiBleHRlbmRzIFN5bnRoZXNpc1NwZWVjaEl0ZW1WMiB7CisgICAgICAgIHByaXZhdGUgZmluYWwgRmlsZU91dHB1dFN0cmVhbSBtRmlsZU91dHB1dFN0cmVhbTsKKworICAgICAgICBwdWJsaWMgU3ludGhlc2lzVG9GaWxlT3V0cHV0U3RyZWFtU3BlZWNoSXRlbVYyKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgaW50IGNhbGxlclVpZCwKKyAgICAgICAgICAgICAgICBpbnQgY2FsbGVyUGlkLAorICAgICAgICAgICAgICAgIFN5bnRoZXNpc1JlcXVlc3RWMiBzeW50aGVzaXNSZXF1ZXN0LAorICAgICAgICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZmlsZU91dHB1dFN0cmVhbSkgeworICAgICAgICAgICAgc3VwZXIoY2FsbGVySWRlbnRpdHksIGNhbGxlclVpZCwgY2FsbGVyUGlkLCBzeW50aGVzaXNSZXF1ZXN0KTsKKyAgICAgICAgICAgIG1GaWxlT3V0cHV0U3RyZWFtID0gZmlsZU91dHB1dFN0cmVhbTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBjcmVhdGVTeW50aGVzaXNDYWxsYmFjaygpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN5bnRoZXNpc0NhbGxiYWNrKG1GaWxlT3V0cHV0U3RyZWFtLmdldENoYW5uZWwoKSwKKyAgICAgICAgICAgICAgICAgICAgdGhpcywgZ2V0Q2FsbGVySWRlbnRpdHkoKSwgaW1wbGVtZW50c1YyQVBJKCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHBsYXlJbXBsKCkgeworICAgICAgICAgICAgc3VwZXIucGxheUltcGwoKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIG1GaWxlT3V0cHV0U3RyZWFtLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIGNsb3NlIG91dHB1dCBmaWxlIiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIEF1ZGlvU3BlZWNoSXRlbVYyIGV4dGVuZHMgVXR0ZXJhbmNlU3BlZWNoSXRlbSB7CisgICAgICAgIHByaXZhdGUgZmluYWwgQXVkaW9QbGF5YmFja1F1ZXVlSXRlbSBtSXRlbTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBCdW5kbGUgbUF1ZGlvUGFyYW1zOworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtVXR0ZXJhbmNlSWQ7CisKKyAgICAgICAgcHVibGljIEF1ZGlvU3BlZWNoSXRlbVYyKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgaW50IGNhbGxlclVpZCwgaW50IGNhbGxlclBpZCwKKyAgICAgICAgICAgICAgICBTdHJpbmcgdXR0ZXJhbmNlSWQsIEJ1bmRsZSBhdWRpb1BhcmFtcywgVXJpIHVyaSkgeworICAgICAgICAgICAgc3VwZXIoY2FsbGVySWRlbnRpdHksIGNhbGxlclVpZCwgY2FsbGVyUGlkKTsKKyAgICAgICAgICAgIG1VdHRlcmFuY2VJZCA9IHV0dGVyYW5jZUlkOworICAgICAgICAgICAgbUF1ZGlvUGFyYW1zID0gYXVkaW9QYXJhbXM7CisgICAgICAgICAgICBtSXRlbSA9IG5ldyBBdWRpb1BsYXliYWNrUXVldWVJdGVtKHRoaXMsIGdldENhbGxlcklkZW50aXR5KCksCisgICAgICAgICAgICAgICAgICAgIFRleHRUb1NwZWVjaFNlcnZpY2UudGhpcywgdXJpLCBnZXRTdHJlYW1UeXBlKCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBwbGF5SW1wbCgpIHsKKyAgICAgICAgICAgIG1BdWRpb1BsYXliYWNrSGFuZGxlci5lbnF1ZXVlKG1JdGVtKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBzdG9wSW1wbCgpIHsKKyAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuCisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQgaW50IGdldFN0cmVhbVR5cGUoKSB7CisgICAgICAgICAgICByZXR1cm4gbUF1ZGlvUGFyYW1zLmdldEludChUZXh0VG9TcGVlY2hDbGllbnQuUGFyYW1zLkFVRElPX1BBUkFNX1NUUkVBTSk7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFV0dGVyYW5jZUlkKCkgewotICAgICAgICAgICAgcmV0dXJuIGdldFN0cmluZ1BhcmFtKEVuZ2luZS5LRVlfUEFSQU1fVVRURVJBTkNFX0lELCBudWxsKTsKKyAgICAgICAgICAgIHJldHVybiBtVXR0ZXJhbmNlSWQ7CiAgICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN0cmluZ1BhcmFtKFN0cmluZyBrZXksIFN0cmluZyBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVybiBtUGFyYW1zID09IG51bGwgPyBkZWZhdWx0VmFsdWUgOiBtUGFyYW1zLmdldFN0cmluZyhrZXksIGRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgaW50IGdldEludFBhcmFtKFN0cmluZyBrZXksIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVybiBtUGFyYW1zID09IG51bGwgPyBkZWZhdWx0VmFsdWUgOiBtUGFyYW1zLmdldEludChrZXksIGRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgZmxvYXQgZ2V0RmxvYXRQYXJhbShTdHJpbmcga2V5LCBmbG9hdCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVybiBtUGFyYW1zID09IG51bGwgPyBkZWZhdWx0VmFsdWUgOiBtUGFyYW1zLmdldEZsb2F0KGtleSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgfQotCiAgICAgfQogCi0gICAgY2xhc3MgU3ludGhlc2lzU3BlZWNoSXRlbSBleHRlbmRzIFV0dGVyYW5jZVNwZWVjaEl0ZW0geworCisgICAgY2xhc3MgU3ludGhlc2lzU3BlZWNoSXRlbVYxIGV4dGVuZHMgU3BlZWNoSXRlbVYxIHsKICAgICAgICAgLy8gTmV2ZXIgbnVsbC4KICAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVRleHQ7CiAgICAgICAgIHByaXZhdGUgZmluYWwgU3ludGhlc2lzUmVxdWVzdCBtU3ludGhlc2lzUmVxdWVzdDsKQEAgLTU1NiwxMCArMTAyMiwxMCBAQAogICAgICAgICAvLyBOb24gbnVsbCBhZnRlciBzeW50aGVzaXMgaGFzIHN0YXJ0ZWQsIGFuZCBhbGwgYWNjZXNzZXMKICAgICAgICAgLy8gZ3VhcmRlZCBieSAndGhpcycuCiAgICAgICAgIHByaXZhdGUgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBtU3ludGhlc2lzQ2FsbGJhY2s7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgRXZlbnRMb2dnZXIgbUV2ZW50TG9nZ2VyOworICAgICAgICBwcml2YXRlIGZpbmFsIEV2ZW50TG9nZ2VyVjEgbUV2ZW50TG9nZ2VyOwogICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtQ2FsbGVyVWlkOwogCi0gICAgICAgIHB1YmxpYyBTeW50aGVzaXNTcGVlY2hJdGVtKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgaW50IGNhbGxlclVpZCwgaW50IGNhbGxlclBpZCwKKyAgICAgICAgcHVibGljIFN5bnRoZXNpc1NwZWVjaEl0ZW1WMShPYmplY3QgY2FsbGVySWRlbnRpdHksIGludCBjYWxsZXJVaWQsIGludCBjYWxsZXJQaWQsCiAgICAgICAgICAgICAgICAgQnVuZGxlIHBhcmFtcywgU3RyaW5nIHRleHQpIHsKICAgICAgICAgICAgIHN1cGVyKGNhbGxlcklkZW50aXR5LCBjYWxsZXJVaWQsIGNhbGxlclBpZCwgcGFyYW1zKTsKICAgICAgICAgICAgIG1UZXh0ID0gdGV4dDsKQEAgLTU2Nyw3ICsxMDMzLDcgQEAKICAgICAgICAgICAgIG1TeW50aGVzaXNSZXF1ZXN0ID0gbmV3IFN5bnRoZXNpc1JlcXVlc3QobVRleHQsIG1QYXJhbXMpOwogICAgICAgICAgICAgbURlZmF1bHRMb2NhbGUgPSBnZXRTZXR0aW5nc0xvY2FsZSgpOwogICAgICAgICAgICAgc2V0UmVxdWVzdFBhcmFtcyhtU3ludGhlc2lzUmVxdWVzdCk7Ci0gICAgICAgICAgICBtRXZlbnRMb2dnZXIgPSBuZXcgRXZlbnRMb2dnZXIobVN5bnRoZXNpc1JlcXVlc3QsIGNhbGxlclVpZCwgY2FsbGVyUGlkLAorICAgICAgICAgICAgbUV2ZW50TG9nZ2VyID0gbmV3IEV2ZW50TG9nZ2VyVjEobVN5bnRoZXNpc1JlcXVlc3QsIGNhbGxlclVpZCwgY2FsbGVyUGlkLAogICAgICAgICAgICAgICAgICAgICBtUGFja2FnZU5hbWUpOwogICAgICAgICB9CiAKQEAgLTU4OSwyNSArMTA1NSwzMCBAQAogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBpbnQgcGxheUltcGwoKSB7CisgICAgICAgIHByb3RlY3RlZCB2b2lkIHBsYXlJbXBsKCkgewogICAgICAgICAgICAgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBzeW50aGVzaXNDYWxsYmFjazsKICAgICAgICAgICAgIG1FdmVudExvZ2dlci5vblJlcXVlc3RQcm9jZXNzaW5nU3RhcnQoKTsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgICAgIC8vIHN0b3AoKSBtaWdodCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZSB3ZSBlbnRlciB0aGlzCiAgICAgICAgICAgICAgICAgLy8gc3luY2hyb25pemVkIGJsb2NrLgogICAgICAgICAgICAgICAgIGlmIChpc1N0b3BwZWQoKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1TeW50aGVzaXNDYWxsYmFjayA9IGNyZWF0ZVN5bnRoZXNpc0NhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgc3ludGhlc2lzQ2FsbGJhY2sgPSBtU3ludGhlc2lzQ2FsbGJhY2s7CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIFRleHRUb1NwZWVjaFNlcnZpY2UudGhpcy5vblN5bnRoZXNpemVUZXh0KG1TeW50aGVzaXNSZXF1ZXN0LCBzeW50aGVzaXNDYWxsYmFjayk7Ci0gICAgICAgICAgICByZXR1cm4gc3ludGhlc2lzQ2FsbGJhY2suaXNEb25lKCkgPyBUZXh0VG9TcGVlY2guU1VDQ0VTUyA6IFRleHRUb1NwZWVjaC5FUlJPUjsKKworICAgICAgICAgICAgLy8gRml4IGZvciBjYXNlIHdoZXJlIGNsaWVudCBjYWxsZWQgLnN0YXJ0KCkgJiAuZXJyb3IoKSwgYnV0IGRpZCBub3QgY2FsbGVkIC5kb25lKCkKKyAgICAgICAgICAgIGlmIChzeW50aGVzaXNDYWxsYmFjay5oYXNTdGFydGVkKCkgJiYgIXN5bnRoZXNpc0NhbGxiYWNrLmhhc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXNDYWxsYmFjay5kb25lKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBwcm90ZWN0ZWQgQWJzdHJhY3RTeW50aGVzaXNDYWxsYmFjayBjcmVhdGVTeW50aGVzaXNDYWxsYmFjaygpIHsKICAgICAgICAgICAgIHJldHVybiBuZXcgUGxheWJhY2tTeW50aGVzaXNDYWxsYmFjayhnZXRTdHJlYW1UeXBlKCksIGdldFZvbHVtZSgpLCBnZXRQYW4oKSwKLSAgICAgICAgICAgICAgICAgICAgbUF1ZGlvUGxheWJhY2tIYW5kbGVyLCB0aGlzLCBnZXRDYWxsZXJJZGVudGl0eSgpLCBtRXZlbnRMb2dnZXIpOworICAgICAgICAgICAgICAgICAgICBtQXVkaW9QbGF5YmFja0hhbmRsZXIsIHRoaXMsIGdldENhbGxlcklkZW50aXR5KCksIG1FdmVudExvZ2dlciwgZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZSB2b2lkIHNldFJlcXVlc3RQYXJhbXMoU3ludGhlc2lzUmVxdWVzdCByZXF1ZXN0KSB7CkBAIC02MzIsMzcgKzExMDMsMjUgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFuZ3VhZ2UoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U3RyaW5nUGFyYW0oRW5naW5lLktFWV9QQVJBTV9MQU5HVUFHRSwgbURlZmF1bHRMb2NhbGVbMF0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGhhc0xhbmd1YWdlKCkgewotICAgICAgICAgICAgcmV0dXJuICFUZXh0VXRpbHMuaXNFbXB0eShnZXRTdHJpbmdQYXJhbShFbmdpbmUuS0VZX1BBUkFNX0xBTkdVQUdFLCBudWxsKSk7Ci0gICAgICAgIH0KLQogICAgICAgICBwcml2YXRlIFN0cmluZyBnZXRDb3VudHJ5KCkgewogICAgICAgICAgICAgaWYgKCFoYXNMYW5ndWFnZSgpKSByZXR1cm4gbURlZmF1bHRMb2NhbGVbMV07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U3RyaW5nUGFyYW0oRW5naW5lLktFWV9QQVJBTV9DT1VOVFJZLCAiIik7CisgICAgICAgICAgICByZXR1cm4gZ2V0U3RyaW5nUGFyYW0obVBhcmFtcywgRW5naW5lLktFWV9QQVJBTV9DT1VOVFJZLCAiIik7CiAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlIFN0cmluZyBnZXRWYXJpYW50KCkgewogICAgICAgICAgICAgaWYgKCFoYXNMYW5ndWFnZSgpKSByZXR1cm4gbURlZmF1bHRMb2NhbGVbMl07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U3RyaW5nUGFyYW0oRW5naW5lLktFWV9QQVJBTV9WQVJJQU5ULCAiIik7CisgICAgICAgICAgICByZXR1cm4gZ2V0U3RyaW5nUGFyYW0obVBhcmFtcywgRW5naW5lLktFWV9QQVJBTV9WQVJJQU5ULCAiIik7CiAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIGludCBnZXRTcGVlY2hSYXRlKCkgewotICAgICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtKEVuZ2luZS5LRVlfUEFSQU1fUkFURSwgZ2V0RGVmYXVsdFNwZWVjaFJhdGUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGludCBnZXRQaXRjaCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbShFbmdpbmUuS0VZX1BBUkFNX1BJVENILCBFbmdpbmUuREVGQVVMVF9QSVRDSCk7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFuZ3VhZ2UoKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0U3RyaW5nUGFyYW0obVBhcmFtcywgRW5naW5lLktFWV9QQVJBTV9MQU5HVUFHRSwgbURlZmF1bHRMb2NhbGVbMF0pOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBjbGFzcyBTeW50aGVzaXNUb0ZpbGVPdXRwdXRTdHJlYW1TcGVlY2hJdGVtIGV4dGVuZHMgU3ludGhlc2lzU3BlZWNoSXRlbSB7CisgICAgcHJpdmF0ZSBjbGFzcyBTeW50aGVzaXNUb0ZpbGVPdXRwdXRTdHJlYW1TcGVlY2hJdGVtVjEgZXh0ZW5kcyBTeW50aGVzaXNTcGVlY2hJdGVtVjEgewogICAgICAgICBwcml2YXRlIGZpbmFsIEZpbGVPdXRwdXRTdHJlYW0gbUZpbGVPdXRwdXRTdHJlYW07CiAKLSAgICAgICAgcHVibGljIFN5bnRoZXNpc1RvRmlsZU91dHB1dFN0cmVhbVNwZWVjaEl0ZW0oT2JqZWN0IGNhbGxlcklkZW50aXR5LCBpbnQgY2FsbGVyVWlkLAorICAgICAgICBwdWJsaWMgU3ludGhlc2lzVG9GaWxlT3V0cHV0U3RyZWFtU3BlZWNoSXRlbVYxKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgaW50IGNhbGxlclVpZCwKICAgICAgICAgICAgICAgICBpbnQgY2FsbGVyUGlkLCBCdW5kbGUgcGFyYW1zLCBTdHJpbmcgdGV4dCwgRmlsZU91dHB1dFN0cmVhbSBmaWxlT3V0cHV0U3RyZWFtKSB7CiAgICAgICAgICAgICBzdXBlcihjYWxsZXJJZGVudGl0eSwgY2FsbGVyVWlkLCBjYWxsZXJQaWQsIHBhcmFtcywgdGV4dCk7CiAgICAgICAgICAgICBtRmlsZU91dHB1dFN0cmVhbSA9IGZpbGVPdXRwdXRTdHJlYW07CkBAIC02NzAsMzAgKzExMjksMjYgQEAKIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHJvdGVjdGVkIEFic3RyYWN0U3ludGhlc2lzQ2FsbGJhY2sgY3JlYXRlU3ludGhlc2lzQ2FsbGJhY2soKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTeW50aGVzaXNDYWxsYmFjayhtRmlsZU91dHB1dFN0cmVhbS5nZXRDaGFubmVsKCkpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3ludGhlc2lzQ2FsbGJhY2sobUZpbGVPdXRwdXRTdHJlYW0uZ2V0Q2hhbm5lbCgpLAorICAgICAgICAgICAgICAgICAgICB0aGlzLCBnZXRDYWxsZXJJZGVudGl0eSgpLCBmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIGludCBwbGF5SW1wbCgpIHsKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgcGxheUltcGwoKSB7CiAgICAgICAgICAgICBkaXNwYXRjaE9uU3RhcnQoKTsKLSAgICAgICAgICAgIGludCBzdGF0dXMgPSBzdXBlci5wbGF5SW1wbCgpOwotICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBUZXh0VG9TcGVlY2guU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIGRpc3BhdGNoT25Eb25lKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRpc3BhdGNoT25FcnJvcigpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc3VwZXIucGxheUltcGwoKTsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgIG1GaWxlT3V0cHV0U3RyZWFtLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIGNsb3NlIG91dHB1dCBmaWxlIiwgZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBjbGFzcyBBdWRpb1NwZWVjaEl0ZW0gZXh0ZW5kcyBVdHRlcmFuY2VTcGVlY2hJdGVtIHsKKyAgICBwcml2YXRlIGNsYXNzIEF1ZGlvU3BlZWNoSXRlbVYxIGV4dGVuZHMgU3BlZWNoSXRlbVYxIHsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBBdWRpb1BsYXliYWNrUXVldWVJdGVtIG1JdGVtOwotICAgICAgICBwdWJsaWMgQXVkaW9TcGVlY2hJdGVtKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgaW50IGNhbGxlclVpZCwgaW50IGNhbGxlclBpZCwKKworICAgICAgICBwdWJsaWMgQXVkaW9TcGVlY2hJdGVtVjEoT2JqZWN0IGNhbGxlcklkZW50aXR5LCBpbnQgY2FsbGVyVWlkLCBpbnQgY2FsbGVyUGlkLAogICAgICAgICAgICAgICAgIEJ1bmRsZSBwYXJhbXMsIFVyaSB1cmkpIHsKICAgICAgICAgICAgIHN1cGVyKGNhbGxlcklkZW50aXR5LCBjYWxsZXJVaWQsIGNhbGxlclBpZCwgcGFyYW1zKTsKICAgICAgICAgICAgIG1JdGVtID0gbmV3IEF1ZGlvUGxheWJhY2tRdWV1ZUl0ZW0odGhpcywgZ2V0Q2FsbGVySWRlbnRpdHkoKSwKQEAgLTcwNiwyMyArMTE2MSwyOSBAQAogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBpbnQgcGxheUltcGwoKSB7CisgICAgICAgIHByb3RlY3RlZCB2b2lkIHBsYXlJbXBsKCkgewogICAgICAgICAgICAgbUF1ZGlvUGxheWJhY2tIYW5kbGVyLmVucXVldWUobUl0ZW0pOwotICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5TVUNDRVNTOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHByb3RlY3RlZCB2b2lkIHN0b3BJbXBsKCkgewogICAgICAgICAgICAgLy8gRG8gbm90aGluZy4KICAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFV0dGVyYW5jZUlkKCkgeworICAgICAgICAgICAgcmV0dXJuIGdldFN0cmluZ1BhcmFtKG1QYXJhbXMsIEVuZ2luZS5LRVlfUEFSQU1fVVRURVJBTkNFX0lELCBudWxsKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgY2xhc3MgU2lsZW5jZVNwZWVjaEl0ZW0gZXh0ZW5kcyBVdHRlcmFuY2VTcGVlY2hJdGVtIHsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBsb25nIG1EdXJhdGlvbjsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVV0dGVyYW5jZUlkOwogCiAgICAgICAgIHB1YmxpYyBTaWxlbmNlU3BlZWNoSXRlbShPYmplY3QgY2FsbGVySWRlbnRpdHksIGludCBjYWxsZXJVaWQsIGludCBjYWxsZXJQaWQsCi0gICAgICAgICAgICAgICAgQnVuZGxlIHBhcmFtcywgbG9uZyBkdXJhdGlvbikgewotICAgICAgICAgICAgc3VwZXIoY2FsbGVySWRlbnRpdHksIGNhbGxlclVpZCwgY2FsbGVyUGlkLCBwYXJhbXMpOworICAgICAgICAgICAgICAgIFN0cmluZyB1dHRlcmFuY2VJZCwgbG9uZyBkdXJhdGlvbikgeworICAgICAgICAgICAgc3VwZXIoY2FsbGVySWRlbnRpdHksIGNhbGxlclVpZCwgY2FsbGVyUGlkKTsKKyAgICAgICAgICAgIG1VdHRlcmFuY2VJZCA9IHV0dGVyYW5jZUlkOwogICAgICAgICAgICAgbUR1cmF0aW9uID0gZHVyYXRpb247CiAgICAgICAgIH0KIApAQCAtNzMyLDI2ICsxMTkzLDU3IEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIGludCBwbGF5SW1wbCgpIHsKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgcGxheUltcGwoKSB7CiAgICAgICAgICAgICBtQXVkaW9QbGF5YmFja0hhbmRsZXIuZW5xdWV1ZShuZXcgU2lsZW5jZVBsYXliYWNrUXVldWVJdGVtKAogICAgICAgICAgICAgICAgICAgICB0aGlzLCBnZXRDYWxsZXJJZGVudGl0eSgpLCBtRHVyYXRpb24pKTsKLSAgICAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guU1VDQ0VTUzsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwcm90ZWN0ZWQgdm9pZCBzdG9wSW1wbCgpIHsKLSAgICAgICAgICAgIC8vIERvIG5vdGhpbmcsIGhhbmRsZWQgYnkgQXVkaW9QbGF5YmFja0hhbmRsZXIjc3RvcEZvckFwcAorCisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRVdHRlcmFuY2VJZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtVXR0ZXJhbmNlSWQ7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBDYWxsIHtAbGluayBUZXh0VG9TcGVlY2hTZXJ2aWNlI29uVm9pY2VzSW5mb0NoYW5nZX0gb24gc3ludGhlc2lzIHRocmVhZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGNsYXNzIFZvaWNlc0luZm9DaGFuZ2VJdGVtIGV4dGVuZHMgU3BlZWNoSXRlbSB7CisgICAgICAgIHB1YmxpYyBWb2ljZXNJbmZvQ2hhbmdlSXRlbSgpIHsKKyAgICAgICAgICAgIHN1cGVyKG51bGwsIDAsIDApOyAvLyBJdCdzIG5ldmVyIGluaXRpYXRlZCBieSBhbiB1c2VyCisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHBsYXlJbXBsKCkgeworICAgICAgICAgICAgVGV4dFRvU3BlZWNoU2VydmljZS50aGlzLm9uVm9pY2VzSW5mb0NoYW5nZSgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHN0b3BJbXBsKCkgeworICAgICAgICAgICAgLy8gTm8tb3AKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGwge0BsaW5rIFRleHRUb1NwZWVjaFNlcnZpY2Ujb25Mb2FkTGFuZ3VhZ2V9IG9uIHN5bnRoIHRocmVhZC4KKyAgICAgKi8KICAgICBwcml2YXRlIGNsYXNzIExvYWRMYW5ndWFnZUl0ZW0gZXh0ZW5kcyBTcGVlY2hJdGVtIHsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUxhbmd1YWdlOwogICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtQ291bnRyeTsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVZhcmlhbnQ7CiAKICAgICAgICAgcHVibGljIExvYWRMYW5ndWFnZUl0ZW0oT2JqZWN0IGNhbGxlcklkZW50aXR5LCBpbnQgY2FsbGVyVWlkLCBpbnQgY2FsbGVyUGlkLAotICAgICAgICAgICAgICAgIEJ1bmRsZSBwYXJhbXMsIFN0cmluZyBsYW5ndWFnZSwgU3RyaW5nIGNvdW50cnksIFN0cmluZyB2YXJpYW50KSB7Ci0gICAgICAgICAgICBzdXBlcihjYWxsZXJJZGVudGl0eSwgY2FsbGVyVWlkLCBjYWxsZXJQaWQsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGxhbmd1YWdlLCBTdHJpbmcgY291bnRyeSwgU3RyaW5nIHZhcmlhbnQpIHsKKyAgICAgICAgICAgIHN1cGVyKGNhbGxlcklkZW50aXR5LCBjYWxsZXJVaWQsIGNhbGxlclBpZCk7CiAgICAgICAgICAgICBtTGFuZ3VhZ2UgPSBsYW5ndWFnZTsKICAgICAgICAgICAgIG1Db3VudHJ5ID0gY291bnRyeTsKICAgICAgICAgICAgIG1WYXJpYW50ID0gdmFyaWFudDsKQEAgLTc2MywxNCArMTI1NSw4IEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIGludCBwbGF5SW1wbCgpIHsKLSAgICAgICAgICAgIGludCByZXN1bHQgPSBUZXh0VG9TcGVlY2hTZXJ2aWNlLnRoaXMub25Mb2FkTGFuZ3VhZ2UobUxhbmd1YWdlLCBtQ291bnRyeSwgbVZhcmlhbnQpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBUZXh0VG9TcGVlY2guTEFOR19BVkFJTEFCTEUgfHwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID09IFRleHRUb1NwZWVjaC5MQU5HX0NPVU5UUllfQVZBSUxBQkxFIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9PSBUZXh0VG9TcGVlY2guTEFOR19DT1VOVFJZX1ZBUl9BVkFJTEFCTEUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLlNVQ0NFU1M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOworICAgICAgICBwcm90ZWN0ZWQgdm9pZCBwbGF5SW1wbCgpIHsKKyAgICAgICAgICAgIFRleHRUb1NwZWVjaFNlcnZpY2UudGhpcy5vbkxvYWRMYW5ndWFnZShtTGFuZ3VhZ2UsIG1Db3VudHJ5LCBtVmFyaWFudCk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTgwMCw3ICsxMjg2LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTcGVlY2hJdGVtIGl0ZW0gPSBuZXcgU3ludGhlc2lzU3BlZWNoSXRlbShjYWxsZXIsCisgICAgICAgICAgICBTcGVlY2hJdGVtIGl0ZW0gPSBuZXcgU3ludGhlc2lzU3BlZWNoSXRlbVYxKGNhbGxlciwKICAgICAgICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdVaWQoKSwgQmluZGVyLmdldENhbGxpbmdQaWQoKSwgcGFyYW1zLCB0ZXh0KTsKICAgICAgICAgICAgIHJldHVybiBtU3ludGhIYW5kbGVyLmVucXVldWVTcGVlY2hJdGVtKHF1ZXVlTW9kZSwgaXRlbSk7CiAgICAgICAgIH0KQEAgLTgxOCw3ICsxMzA0LDcgQEAKICAgICAgICAgICAgIGZpbmFsIFBhcmNlbEZpbGVEZXNjcmlwdG9yIHNhbWVGaWxlRGVzY3JpcHRvciA9IFBhcmNlbEZpbGVEZXNjcmlwdG9yLmFkb3B0RmQoCiAgICAgICAgICAgICAgICAgICAgIGZpbGVEZXNjcmlwdG9yLmRldGFjaEZkKCkpOwogCi0gICAgICAgICAgICBTcGVlY2hJdGVtIGl0ZW0gPSBuZXcgU3ludGhlc2lzVG9GaWxlT3V0cHV0U3RyZWFtU3BlZWNoSXRlbShjYWxsZXIsCisgICAgICAgICAgICBTcGVlY2hJdGVtIGl0ZW0gPSBuZXcgU3ludGhlc2lzVG9GaWxlT3V0cHV0U3RyZWFtU3BlZWNoSXRlbVYxKGNhbGxlciwKICAgICAgICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdVaWQoKSwgQmluZGVyLmdldENhbGxpbmdQaWQoKSwgcGFyYW1zLCB0ZXh0LAogICAgICAgICAgICAgICAgICAgICBuZXcgUGFyY2VsRmlsZURlc2NyaXB0b3IuQXV0b0Nsb3NlT3V0cHV0U3RyZWFtKHNhbWVGaWxlRGVzY3JpcHRvcikpOwogICAgICAgICAgICAgcmV0dXJuIG1TeW50aEhhbmRsZXIuZW5xdWV1ZVNwZWVjaEl0ZW0oVGV4dFRvU3BlZWNoLlFVRVVFX0FERCwgaXRlbSk7CkBAIC04MzAsMTkgKzEzMTYsMTkgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFRvU3BlZWNoLkVSUk9SOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTcGVlY2hJdGVtIGl0ZW0gPSBuZXcgQXVkaW9TcGVlY2hJdGVtKGNhbGxlciwKKyAgICAgICAgICAgIFNwZWVjaEl0ZW0gaXRlbSA9IG5ldyBBdWRpb1NwZWVjaEl0ZW1WMShjYWxsZXIsCiAgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIHBhcmFtcywgYXVkaW9VcmkpOwogICAgICAgICAgICAgcmV0dXJuIG1TeW50aEhhbmRsZXIuZW5xdWV1ZVNwZWVjaEl0ZW0ocXVldWVNb2RlLCBpdGVtKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IHBsYXlTaWxlbmNlKElCaW5kZXIgY2FsbGVyLCBsb25nIGR1cmF0aW9uLCBpbnQgcXVldWVNb2RlLCBCdW5kbGUgcGFyYW1zKSB7Ci0gICAgICAgICAgICBpZiAoIWNoZWNrTm9uTnVsbChjYWxsZXIsIHBhcmFtcykpIHsKKyAgICAgICAgcHVibGljIGludCBwbGF5U2lsZW5jZShJQmluZGVyIGNhbGxlciwgbG9uZyBkdXJhdGlvbiwgaW50IHF1ZXVlTW9kZSwgU3RyaW5nIHV0dGVyYW5jZUlkKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrTm9uTnVsbChjYWxsZXIpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3BlZWNoSXRlbSBpdGVtID0gbmV3IFNpbGVuY2VTcGVlY2hJdGVtKGNhbGxlciwKLSAgICAgICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdVaWQoKSwgQmluZGVyLmdldENhbGxpbmdQaWQoKSwgcGFyYW1zLCBkdXJhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIHV0dGVyYW5jZUlkLCBkdXJhdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gbVN5bnRoSGFuZGxlci5lbnF1ZXVlU3BlZWNoSXRlbShxdWV1ZU1vZGUsIGl0ZW0pOwogICAgICAgICB9CiAKQEAgLTkxMiw3ICsxMzk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0VmFsID09IFRleHRUb1NwZWVjaC5MQU5HX0NPVU5UUllfVkFSX0FWQUlMQUJMRSkgewogCiAgICAgICAgICAgICAgICAgU3BlZWNoSXRlbSBpdGVtID0gbmV3IExvYWRMYW5ndWFnZUl0ZW0oY2FsbGVyLCBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLAotICAgICAgICAgICAgICAgICAgICBCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpLCBudWxsLCBsYW5nLCBjb3VudHJ5LCB2YXJpYW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIGxhbmcsIGNvdW50cnksIHZhcmlhbnQpOwogCiAgICAgICAgICAgICAgICAgaWYgKG1TeW50aEhhbmRsZXIuZW5xdWV1ZVNwZWVjaEl0ZW0oVGV4dFRvU3BlZWNoLlFVRVVFX0FERCwgaXRlbSkgIT0KICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRUb1NwZWVjaC5TVUNDRVNTKSB7CkBAIC05NDMsNiArMTQyOSw1OCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIExpc3Q8Vm9pY2VJbmZvPiBnZXRWb2ljZXNJbmZvKCkgeworICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaFNlcnZpY2UudGhpcy5nZXRWb2ljZXNJbmZvKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBzcGVha1YyKElCaW5kZXIgY2FsbGluZ0luc3RhbmNlLAorICAgICAgICAgICAgICAgIFN5bnRoZXNpc1JlcXVlc3RWMiByZXF1ZXN0KSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrTm9uTnVsbChjYWxsaW5nSW5zdGFuY2UsIHJlcXVlc3QpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRUb1NwZWVjaC5FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3BlZWNoSXRlbSBpdGVtID0gbmV3IFN5bnRoZXNpc1NwZWVjaEl0ZW1WMihjYWxsaW5nSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIHJlcXVlc3QpOworICAgICAgICAgICAgcmV0dXJuIG1TeW50aEhhbmRsZXIuZW5xdWV1ZVNwZWVjaEl0ZW0oVGV4dFRvU3BlZWNoLlFVRVVFX0FERCwgaXRlbSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBzeW50aGVzaXplVG9GaWxlRGVzY3JpcHRvclYyKElCaW5kZXIgY2FsbGluZ0luc3RhbmNlLAorICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yIGZpbGVEZXNjcmlwdG9yLAorICAgICAgICAgICAgICAgIFN5bnRoZXNpc1JlcXVlc3RWMiByZXF1ZXN0KSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrTm9uTnVsbChjYWxsaW5nSW5zdGFuY2UsIHJlcXVlc3QsIGZpbGVEZXNjcmlwdG9yKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEluIHRlc3QgZW52LCBQYXJjZWxGaWxlRGVzY3JpcHRvciBpbnN0YW5jZSBtYXkgYmUgRVhBQ1RMWSB0aGUgc2FtZQorICAgICAgICAgICAgLy8gb25lIHRoYXQgaXMgdXNlZCBieSBjbGllbnQuIEFuZCBpdCB3aWxsIGJlIGNsb3NlZCBieSBhIGNsaWVudCwgdGh1cworICAgICAgICAgICAgLy8gcHJldmVudGluZyB1cyBmcm9tIHdyaXRpbmcgYW55dGhpbmcgdG8gaXQuCisgICAgICAgICAgICBmaW5hbCBQYXJjZWxGaWxlRGVzY3JpcHRvciBzYW1lRmlsZURlc2NyaXB0b3IgPSBQYXJjZWxGaWxlRGVzY3JpcHRvci5hZG9wdEZkKAorICAgICAgICAgICAgICAgICAgICBmaWxlRGVzY3JpcHRvci5kZXRhY2hGZCgpKTsKKworICAgICAgICAgICAgU3BlZWNoSXRlbSBpdGVtID0gbmV3IFN5bnRoZXNpc1RvRmlsZU91dHB1dFN0cmVhbVNwZWVjaEl0ZW1WMihjYWxsaW5nSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgIG5ldyBQYXJjZWxGaWxlRGVzY3JpcHRvci5BdXRvQ2xvc2VPdXRwdXRTdHJlYW0oc2FtZUZpbGVEZXNjcmlwdG9yKSk7CisgICAgICAgICAgICByZXR1cm4gbVN5bnRoSGFuZGxlci5lbnF1ZXVlU3BlZWNoSXRlbShUZXh0VG9TcGVlY2guUVVFVUVfQURELCBpdGVtKTsKKworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgcGxheUF1ZGlvVjIoCisgICAgICAgICAgICAgICAgSUJpbmRlciBjYWxsaW5nSW5zdGFuY2UsIFVyaSBhdWRpb1VyaSwgU3RyaW5nIHV0dGVyYW5jZUlkLAorICAgICAgICAgICAgICAgIEJ1bmRsZSBzeXN0ZW1QYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrTm9uTnVsbChjYWxsaW5nSW5zdGFuY2UsIGF1ZGlvVXJpLCBzeXN0ZW1QYXJhbWV0ZXJzKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBUZXh0VG9TcGVlY2guRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNwZWVjaEl0ZW0gaXRlbSA9IG5ldyBBdWRpb1NwZWVjaEl0ZW1WMihjYWxsaW5nSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIHV0dGVyYW5jZUlkLCBzeXN0ZW1QYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICBhdWRpb1VyaSk7CisgICAgICAgICAgICByZXR1cm4gbVN5bnRoSGFuZGxlci5lbnF1ZXVlU3BlZWNoSXRlbShUZXh0VG9TcGVlY2guUVVFVUVfQURELCBpdGVtKTsKKyAgICAgICAgfQogICAgIH07CiAKICAgICBwcml2YXRlIGNsYXNzIENhbGxiYWNrTWFwIGV4dGVuZHMgUmVtb3RlQ2FsbGJhY2tMaXN0PElUZXh0VG9TcGVlY2hDYWxsYmFjaz4gewpAQCAtOTY0LDExICsxNTAyLDMxIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uRG9uZShPYmplY3QgY2FsbGVySWRlbnRpdHksIFN0cmluZyB1dHRlcmFuY2VJZCkgeworICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uRmFsbGJhY2soT2JqZWN0IGNhbGxlcklkZW50aXR5LCBTdHJpbmcgdXR0ZXJhbmNlSWQpIHsKICAgICAgICAgICAgIElUZXh0VG9TcGVlY2hDYWxsYmFjayBjYiA9IGdldENhbGxiYWNrRm9yKGNhbGxlcklkZW50aXR5KTsKICAgICAgICAgICAgIGlmIChjYiA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNiLm9uRG9uZSh1dHRlcmFuY2VJZCk7CisgICAgICAgICAgICAgICAgY2Iub25GYWxsYmFjayh1dHRlcmFuY2VJZCk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhbGxiYWNrIG9uRmFsbGJhY2sgZmFpbGVkOiAiICsgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uU3RvcChPYmplY3QgY2FsbGVySWRlbnRpdHksIFN0cmluZyB1dHRlcmFuY2VJZCkgeworICAgICAgICAgICAgSVRleHRUb1NwZWVjaENhbGxiYWNrIGNiID0gZ2V0Q2FsbGJhY2tGb3IoY2FsbGVySWRlbnRpdHkpOworICAgICAgICAgICAgaWYgKGNiID09IG51bGwpIHJldHVybjsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY2Iub25TdG9wKHV0dGVyYW5jZUlkKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ2FsbGJhY2sgb25TdG9wIGZhaWxlZDogIiArIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPblN1Y2Nlc3MoT2JqZWN0IGNhbGxlcklkZW50aXR5LCBTdHJpbmcgdXR0ZXJhbmNlSWQpIHsKKyAgICAgICAgICAgIElUZXh0VG9TcGVlY2hDYWxsYmFjayBjYiA9IGdldENhbGxiYWNrRm9yKGNhbGxlcklkZW50aXR5KTsKKyAgICAgICAgICAgIGlmIChjYiA9PSBudWxsKSByZXR1cm47CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNiLm9uU3VjY2Vzcyh1dHRlcmFuY2VJZCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhbGxiYWNrIG9uRG9uZSBmYWlsZWQ6ICIgKyBlKTsKICAgICAgICAgICAgIH0KQEAgLTk4NSwxMSArMTU0MywxMiBAQAogCiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaE9uRXJyb3IoT2JqZWN0IGNhbGxlcklkZW50aXR5LCBTdHJpbmcgdXR0ZXJhbmNlSWQpIHsKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hPbkVycm9yKE9iamVjdCBjYWxsZXJJZGVudGl0eSwgU3RyaW5nIHV0dGVyYW5jZUlkLAorICAgICAgICAgICAgICAgIGludCBlcnJvckNvZGUpIHsKICAgICAgICAgICAgIElUZXh0VG9TcGVlY2hDYWxsYmFjayBjYiA9IGdldENhbGxiYWNrRm9yKGNhbGxlcklkZW50aXR5KTsKICAgICAgICAgICAgIGlmIChjYiA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNiLm9uRXJyb3IodXR0ZXJhbmNlSWQpOworICAgICAgICAgICAgICAgIGNiLm9uRXJyb3IodXR0ZXJhbmNlSWQsIGVycm9yQ29kZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhbGxiYWNrIG9uRXJyb3IgZmFpbGVkOiAiICsgZSk7CiAgICAgICAgICAgICB9CkBAIC0xMDAxLDcgKzE1NjAsNyBAQAogICAgICAgICAgICAgc3luY2hyb25pemVkIChtQ2FsbGVyVG9DYWxsYmFjaykgewogICAgICAgICAgICAgICAgIG1DYWxsZXJUb0NhbGxiYWNrLnJlbW92ZShjYWxsZXIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbVN5bnRoSGFuZGxlci5zdG9wRm9yQXBwKGNhbGxlcik7CisgICAgICAgICAgICAvL21TeW50aEhhbmRsZXIuc3RvcEZvckFwcChjYWxsZXIpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC0xMDEyLDYgKzE1NzEsMTggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoVm9pY2VzSW5mb0NoYW5nZShMaXN0PFZvaWNlSW5mbz4gdm9pY2VzSW5mbykgeworICAgICAgICAgICAgc3luY2hyb25pemVkIChtQ2FsbGVyVG9DYWxsYmFjaykgeworICAgICAgICAgICAgICAgIGZvciAoSVRleHRUb1NwZWVjaENhbGxiYWNrIGNhbGxiYWNrIDogbUNhbGxlclRvQ2FsbGJhY2sudmFsdWVzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLm9uVm9pY2VzSW5mb0NoYW5nZSh2b2ljZXNJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byByZXF1ZXN0IHJlY29ubmVjdCIsIGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgcHJpdmF0ZSBJVGV4dFRvU3BlZWNoQ2FsbGJhY2sgZ2V0Q2FsbGJhY2tGb3IoT2JqZWN0IGNhbGxlcikgewogICAgICAgICAgICAgSVRleHRUb1NwZWVjaENhbGxiYWNrIGNiOwogICAgICAgICAgICAgSUJpbmRlciBhc0JpbmRlciA9IChJQmluZGVyKSBjYWxsZXI7CkBAIC0xMDIxLDcgKzE1OTIsNSBAQAogCiAgICAgICAgICAgICByZXR1cm4gY2I7CiAgICAgICAgIH0KLQogICAgIH0KLQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc3BlZWNoL3R0cy9Wb2ljZUluZm8uYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVm9pY2VJbmZvLmFpZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwNWY4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVm9pY2VJbmZvLmFpZGwKQEAgLTAsMCArMSwyMCBAQAorLyoKKyoqCisqKiBDb3B5cmlnaHQgMjAxMywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBhbmRyb2lkLnNwZWVjaC50dHM7CisKK3BhcmNlbGFibGUgVm9pY2VJbmZvOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NwZWVjaC90dHMvVm9pY2VJbmZvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1ZvaWNlSW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YjlhOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zcGVlY2gvdHRzL1ZvaWNlSW5mby5qYXZhCkBAIC0wLDAgKzEsMzI1IEBACitwYWNrYWdlIGFuZHJvaWQuc3BlZWNoLnR0czsKKworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKKworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKKy8qKgorICogQ2hhcmFjdGVyaXN0aWNzIGFuZCBmZWF0dXJlcyBvZiBhIFRleHQtVG8tU3BlZWNoIFZvaWNlLiBFYWNoIFRUUyBFbmdpbmUgY2FuIGV4cG9zZQorICogbXVsdGlwbGUgdm9pY2VzIGZvciBtdWx0aXBsZSBsb2NhbGVzLCB3aXRoIGRpZmZlcmVudCBzZXQgb2YgZmVhdHVyZXMuCisgKgorICogRWFjaCBWb2ljZUluZm8gaGFzIGFuIHVuaXF1ZSBuYW1lLiBUaGlzIG5hbWUgY2FuIGJlIG9idGFpbmVkIHVzaW5nIHRoZSB7QGxpbmsgI2dldE5hbWUoKX0gbWV0aG9kCisgKiBhbmQgd2lsbCBwZXJzaXN0IHVudGlsIHRoZSBjbGllbnQgaXMgYXNrZWQgdG8gcmUtZXZhbHVhdGUgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHZvaWNlcyBpbiB0aGUKKyAqIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuQ29ubmVjdGlvbkNhbGxiYWNrcyNvbkVuZ2luZVN0YXR1c0NoYW5nZShhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LkVuZ2luZVN0YXR1cyl9CisgKiBjYWxsYmFjay4gVGhlIG5hbWUgY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNlIGEgVm9pY2VJbmZvIGluIGFuIGluc3RhbmNlIG9mIHtAbGluayBSZXF1ZXN0Q29uZmlnfTsKKyAqIHRoZSB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcyNGQUxMQkFDS19WT0lDRV9OQU1FfSB2b2ljZSBwYXJhbWV0ZXIgaXMgYW4gZXhhbXBsZSBvZiB0aGlzLgorICogSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgdm9pY2UgbmFtZSBuZXZlciBjaGFuZ2UgZHVyaW5nIHRoZSBUVFMgc2VydmljZSBsaWZldGltZS4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFZvaWNlSW5mbyBpbXBsZW1lbnRzIFBhcmNlbGFibGUgeworICAgIC8qKiBWZXJ5IGxvdywgYnV0IHN0aWxsIGludGVsbGlnaWJsZSBxdWFsaXR5IG9mIHNwZWVjaCBzeW50aGVzaXMgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVUFMSVRZX1ZFUllfTE9XID0gMTAwOworCisgICAgLyoqIExvdywgbm90IGh1bWFuLWxpa2UgcXVhbGl0eSBvZiBzcGVlY2ggc3ludGhlc2lzICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVBTElUWV9MT1cgPSAyMDA7CisKKyAgICAvKiogTm9ybWFsIHF1YWxpdHkgb2Ygc3BlZWNoIHN5bnRoZXNpcyAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVQUxJVFlfTk9STUFMID0gMzAwOworCisgICAgLyoqIEhpZ2gsIGh1bWFuLWxpa2UgcXVhbGl0eSBvZiBzcGVlY2ggc3ludGhlc2lzICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVBTElUWV9ISUdIID0gNDAwOworCisgICAgLyoqIFZlcnkgaGlnaCwgYWxtb3N0IGh1bWFuLWluZGlzdGluZ3Vpc2hhYmxlIHF1YWxpdHkgb2Ygc3BlZWNoIHN5bnRoZXNpcyAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVQUxJVFlfVkVSWV9ISUdIID0gNTAwOworCisgICAgLyoqIFZlcnkgbG93IGV4cGVjdGVkIHN5bnRoZXNpemVyIGxhdGVuY3kgKDwgMjBtcykgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQVRFTkNZX1ZFUllfTE9XID0gMTAwOworCisgICAgLyoqIExvdyBleHBlY3RlZCBzeW50aGVzaXplciBsYXRlbmN5ICh+MjBtcykgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQVRFTkNZX0xPVyA9IDIwMDsKKworICAgIC8qKiBOb3JtYWwgZXhwZWN0ZWQgc3ludGhlc2l6ZXIgbGF0ZW5jeSAofjUwbXMpICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEFURU5DWV9OT1JNQUwgPSAzMDA7CisKKyAgICAvKiogTmV0d29yayBiYXNlZCBleHBlY3RlZCBzeW50aGVzaXplciBsYXRlbmN5ICh+MjAwbXMpICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEFURU5DWV9ISUdIID0gNDAwOworCisgICAgLyoqIFZlcnkgc2xvdyBuZXR3b3JrIGJhc2VkIGV4cGVjdGVkIHN5bnRoZXNpemVyIGxhdGVuY3kgKD4gMjAwbXMpICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEFURU5DWV9WRVJZX0hJR0ggPSA1MDA7CisKKyAgICAvKiogQWRkaXRpb25hbCBmZWF0dXJlIGtleSwgd2l0aCBzdHJpbmcgdmFsdWUsIGdlbmRlciBvZiB0aGUgc3BlYWtlciAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZFQVRVUkVfU1BFQUtFUl9HRU5ERVIgPSAic3BlYWtlckdlbmRlciI7CisKKyAgICAvKiogQWRkaXRpb25hbCBmZWF0dXJlIGtleSwgd2l0aCBpbnRlZ2VyIHZhbHVlLCBzcGVha2luZyBzcGVlZCBpbiB3b3JkcyBwZXIgbWludXRlCisgICAgICogd2hlbiB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcyNTUEVFQ0hfU1BFRUR9IHBhcmFtZXRlciBpcyBzZXQgdG8ge0Bjb2RlIDEuMH0gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGRUFUVVJFX1dPUkRTX1BFUl9NSU5VVEUgPSAid29yZHNQZXJNaW51dGUiOworCisgICAgLyoqCisgICAgICogQWRkaXRpb25hbCBmZWF0dXJlIGtleSwgd2l0aCBib29sZWFuIHZhbHVlLCB0aGF0IGluZGljYXRlcyB0aGF0IHZvaWNlIG1heSBuZWVkIHRvCisgICAgICogZG93bmxvYWQgYWRkaXRpb25hbCBkYXRhIGlmIHVzZWQgZm9yIHN5bnRoZXNpcy4KKyAgICAgKgorICAgICAqIE1ha2luZyBhIHJlcXVlc3Qgd2l0aCBhIHZvaWNlIHRoYXQgaGFzIHRoaXMgZmVhdHVyZSBtYXkgcmVzdWx0IGluIGEKKyAgICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlN0YXR1cyNFUlJPUl9ET1dOTE9BRElOR19BRERJVElPTkFMX0RBVEF9IGVycm9yLiBJdCdzIHJlY29tbWVuZGVkCisgICAgICogdG8gc2V0IHRoZSB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtcyNGQUxMQkFDS19WT0lDRV9OQU1FfSB2b2ljZSBwYXJhbWV0ZXIgdG8gcmVmZXJlbmNlCisgICAgICogYSBmdWxseSBpbnN0YWxsZWQgdm9pY2UgKG9yIG5ldHdvcmsgdm9pY2UpIHRoYXQgY2FuIHNlcnZlIGFzIHJlcGxhY2VtZW50LgorICAgICAqCisgICAgICogTm90ZTogSXQncyBhIGdvb2QgcHJhY3RpY2UgZm9yIGEgVFRTIGVuZ2luZSB0byBwcm92aWRlIGEgc2Vuc2libGUgZmFsbGJhY2sgdm9pY2UgYXMgdGhlCisgICAgICogZGVmYXVsdCB2YWx1ZSBmb3Ige0BsaW5rIFRleHRUb1NwZWVjaENsaWVudC5QYXJhbXMjRkFMTEJBQ0tfVk9JQ0VfTkFNRX0gcGFyYW1ldGVyIGlmIHRoaXMKKyAgICAgKiBmZWF0dXJlIGlzIHByZXNlbnQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkVBVFVSRV9NQVlfQVVUT0lOU1RBTEwgPSAibWF5QXV0b0luc3RhbGwiOworCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU5hbWU7CisgICAgcHJpdmF0ZSBmaW5hbCBMb2NhbGUgbUxvY2FsZTsKKyAgICBwcml2YXRlIGZpbmFsIGludCBtUXVhbGl0eTsKKyAgICBwcml2YXRlIGZpbmFsIGludCBtTGF0ZW5jeTsKKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb247CisgICAgcHJpdmF0ZSBmaW5hbCBCdW5kbGUgbVBhcmFtczsKKyAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtQWRkaXRpb25hbEZlYXR1cmVzOworCisgICAgcHJpdmF0ZSBWb2ljZUluZm8oUGFyY2VsIGluKSB7CisgICAgICAgIHRoaXMubU5hbWUgPSBpbi5yZWFkU3RyaW5nKCk7CisgICAgICAgIFN0cmluZ1tdIGxvY2FsZXNEYXRhID0gbmV3IFN0cmluZ1szXTsKKyAgICAgICAgaW4ucmVhZFN0cmluZ0FycmF5KGxvY2FsZXNEYXRhKTsKKyAgICAgICAgdGhpcy5tTG9jYWxlID0gbmV3IExvY2FsZShsb2NhbGVzRGF0YVswXSwgbG9jYWxlc0RhdGFbMV0sIGxvY2FsZXNEYXRhWzJdKTsKKworICAgICAgICB0aGlzLm1RdWFsaXR5ID0gaW4ucmVhZEludCgpOworICAgICAgICB0aGlzLm1MYXRlbmN5ID0gaW4ucmVhZEludCgpOworICAgICAgICB0aGlzLm1SZXF1aXJlc05ldHdvcmtDb25uZWN0aW9uID0gKGluLnJlYWRCeXRlKCkgPT0gMSk7CisKKyAgICAgICAgdGhpcy5tUGFyYW1zID0gaW4ucmVhZEJ1bmRsZSgpOworICAgICAgICB0aGlzLm1BZGRpdGlvbmFsRmVhdHVyZXMgPSBpbi5yZWFkQnVuZGxlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBWb2ljZUluZm8oU3RyaW5nIG5hbWUsCisgICAgICAgICAgICBMb2NhbGUgbG9jYWxlLAorICAgICAgICAgICAgaW50IHF1YWxpdHksCisgICAgICAgICAgICBpbnQgbGF0ZW5jeSwKKyAgICAgICAgICAgIGJvb2xlYW4gcmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbiwKKyAgICAgICAgICAgIEJ1bmRsZSBwYXJhbXMsCisgICAgICAgICAgICBCdW5kbGUgYWRkaXRpb25hbEZlYXR1cmVzKSB7CisgICAgICAgIHRoaXMubU5hbWUgPSBuYW1lOworICAgICAgICB0aGlzLm1Mb2NhbGUgPSBsb2NhbGU7CisgICAgICAgIHRoaXMubVF1YWxpdHkgPSBxdWFsaXR5OworICAgICAgICB0aGlzLm1MYXRlbmN5ID0gbGF0ZW5jeTsKKyAgICAgICAgdGhpcy5tUmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbiA9IHJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb247CisgICAgICAgIHRoaXMubVBhcmFtcyA9IHBhcmFtczsKKyAgICAgICAgdGhpcy5tQWRkaXRpb25hbEZlYXR1cmVzID0gYWRkaXRpb25hbEZlYXR1cmVzOworICAgIH0KKworICAgIC8qKiBCdWlsZGVyLCBhbGxvd3MgVFRTIGVuZ2luZXMgdG8gY3JlYXRlIFZvaWNlSW5mbyBpbnN0YW5jZXMuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBCdWlsZGVyIHsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKyAgICAgICAgcHJpdmF0ZSBMb2NhbGUgbG9jYWxlOworICAgICAgICBwcml2YXRlIGludCBxdWFsaXR5ID0gVm9pY2VJbmZvLlFVQUxJVFlfTk9STUFMOworICAgICAgICBwcml2YXRlIGludCBsYXRlbmN5ID0gVm9pY2VJbmZvLkxBVEVOQ1lfTk9STUFMOworICAgICAgICBwcml2YXRlIGJvb2xlYW4gcmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbjsKKyAgICAgICAgcHJpdmF0ZSBCdW5kbGUgcGFyYW1zOworICAgICAgICBwcml2YXRlIEJ1bmRsZSBhZGRpdGlvbmFsRmVhdHVyZXM7CisKKyAgICAgICAgcHVibGljIEJ1aWxkZXIoKSB7CisKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb3B5IGZpZWxkcyBmcm9tIGdpdmVuIFZvaWNlSW5mbyBpbnN0YW5jZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyKFZvaWNlSW5mbyB2b2ljZUluZm8pIHsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IHZvaWNlSW5mby5tTmFtZTsKKyAgICAgICAgICAgIHRoaXMubG9jYWxlID0gdm9pY2VJbmZvLm1Mb2NhbGU7CisgICAgICAgICAgICB0aGlzLnF1YWxpdHkgPSB2b2ljZUluZm8ubVF1YWxpdHk7CisgICAgICAgICAgICB0aGlzLmxhdGVuY3kgPSB2b2ljZUluZm8ubUxhdGVuY3k7CisgICAgICAgICAgICB0aGlzLnJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb24gPSB2b2ljZUluZm8ubVJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb247CisgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IChCdW5kbGUpdm9pY2VJbmZvLm1QYXJhbXMuY2xvbmUoKTsKKyAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbEZlYXR1cmVzID0gKEJ1bmRsZSkgdm9pY2VJbmZvLm1BZGRpdGlvbmFsRmVhdHVyZXMuY2xvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB2b2ljZSdzIHVuaXF1ZSBuYW1lLiBJdCB3aWxsIGJlIHVzZWQgYnkgY2xpZW50cyB0byByZWZlcmVuY2UgdGhlIHZvaWNlIHVzZWQgYnkgYQorICAgICAgICAgKiByZXF1ZXN0LgorICAgICAgICAgKgorICAgICAgICAgKiBJdCdzIHJlY29tbWVuZGVkIHRoYXQgZWFjaCB2b2ljZSB1c2UgdGhlIHNhbWUgY29uc2lzdGVudCBuYW1lIGR1cmluZyB0aGUgVFRTIHNlcnZpY2UKKyAgICAgICAgICogbGlmZXRpbWUuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXROYW1lKFN0cmluZyBuYW1lKSB7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB2b2ljZSBsb2NhbGUuIFRoaXMgaGFzIHRvIGJlIGEgdmFsaWQgbG9jYWxlLCBidWlsdCBmcm9tIElTTyA2MzktMSBhbmQgSVNPIDMxNjYtMQorICAgICAgICAgKiB0d28gbGV0dGVyIGNvZGVzLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0TG9jYWxlKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyBtYXAgb2YgYWxsIGF2YWlsYWJsZSByZXF1ZXN0IHBhcmFtZXRlcnMgd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgICogU29tZSBjb21tb24gcGFyYW1ldGVyIG5hbWVzIGNhbiBiZSBmb3VuZCBpbiB7QGxpbmsgVGV4dFRvU3BlZWNoQ2xpZW50LlBhcmFtc30gc3RhdGljCisgICAgICAgICAqIG1lbWJlcnMuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRQYXJhbXNXaXRoRGVmYXVsdHMoQnVuZGxlIHBhcmFtcykgeworICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIG1hcCBvZiBhZGRpdGlvbmFsIHZvaWNlIGZlYXR1cmVzLiBTb21lIGNvbW1vbiBmZWF0dXJlIG5hbWVzIGNhbiBiZSBmb3VuZCBpbgorICAgICAgICAgKiB7QGxpbmsgVm9pY2VJbmZvfSBzdGF0aWMgbWVtYmVycy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEFkZGl0aW9uYWxGZWF0dXJlcyhCdW5kbGUgYWRkaXRpb25hbEZlYXR1cmVzKSB7CisgICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxGZWF0dXJlcyA9IGFkZGl0aW9uYWxGZWF0dXJlczsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHZvaWNlIHF1YWxpdHkgKGhpZ2hlciBpcyBiZXR0ZXIpLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0UXVhbGl0eShpbnQgcXVhbGl0eSkgeworICAgICAgICAgICAgdGhpcy5xdWFsaXR5ID0gcXVhbGl0eTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHZvaWNlIGxhdGVuY3kgKGxvd2VyIGlzIGJldHRlcikuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRMYXRlbmN5KGludCBsYXRlbmN5KSB7CisgICAgICAgICAgICB0aGlzLmxhdGVuY3kgPSBsYXRlbmN5OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB3aGV0aGVyIHRoZSB2b2ljZSByZXF1aXJlcyBuZXR3b3JrIGNvbm5lY3Rpb24gdG8gd29yayBwcm9wZXJseS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb24oYm9vbGVhbiByZXF1aXJlc05ldHdvcmtDb25uZWN0aW9uKSB7CisgICAgICAgICAgICB0aGlzLnJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb24gPSByZXF1aXJlc05ldHdvcmtDb25uZWN0aW9uOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQHJldHVybiBUaGUgYnVpbHQgVm9pY2VJbmZvIGluc3RhbmNlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFZvaWNlSW5mbyBidWlsZCgpIHsKKyAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJOYW1lIGNhbid0IGJlIG51bGwgb3IgZW1wdHkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsb2NhbGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkxvY2FsZSBjYW4ndCBiZSBudWxsIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgVm9pY2VJbmZvKG5hbWUsIGxvY2FsZSwgcXVhbGl0eSwgbGF0ZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzTmV0d29ya0Nvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAoKHBhcmFtcyA9PSBudWxsKSA/IG5ldyBCdW5kbGUoKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJ1bmRsZSlwYXJhbXMuY2xvbmUoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAoKGFkZGl0aW9uYWxGZWF0dXJlcyA9PSBudWxsKSA/IG5ldyBCdW5kbGUoKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJ1bmRsZSlhZGRpdGlvbmFsRmVhdHVyZXMuY2xvbmUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgZGVzdCwgaW50IGZsYWdzKSB7CisgICAgICAgIGRlc3Qud3JpdGVTdHJpbmcobU5hbWUpOworICAgICAgICBTdHJpbmdbXSBsb2NhbGVzRGF0YSA9IG5ldyBTdHJpbmdbXXttTG9jYWxlLmdldExhbmd1YWdlKCksIG1Mb2NhbGUuZ2V0Q291bnRyeSgpLCBtTG9jYWxlLmdldFZhcmlhbnQoKX07CisgICAgICAgIGRlc3Qud3JpdGVTdHJpbmdBcnJheShsb2NhbGVzRGF0YSk7CisgICAgICAgIGRlc3Qud3JpdGVJbnQobVF1YWxpdHkpOworICAgICAgICBkZXN0LndyaXRlSW50KG1MYXRlbmN5KTsKKyAgICAgICAgZGVzdC53cml0ZUJ5dGUoKGJ5dGUpIChtUmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbiA/IDEgOiAwKSk7CisgICAgICAgIGRlc3Qud3JpdGVCdW5kbGUobVBhcmFtcyk7CisgICAgICAgIGRlc3Qud3JpdGVCdW5kbGUobUFkZGl0aW9uYWxGZWF0dXJlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhcmNlbGFibGUuQ3JlYXRvcjxWb2ljZUluZm8+IENSRUFUT1IgPSBuZXcgUGFyY2VsYWJsZS5DcmVhdG9yPFZvaWNlSW5mbz4oKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgVm9pY2VJbmZvIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIGluKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFZvaWNlSW5mbyhpbik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFZvaWNlSW5mb1tdIG5ld0FycmF5KGludCBzaXplKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFZvaWNlSW5mb1tzaXplXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFRoZSB2b2ljZSdzIGxvY2FsZQorICAgICAqLworICAgIHB1YmxpYyBMb2NhbGUgZ2V0TG9jYWxlKCkgeworICAgICAgICByZXR1cm4gbUxvY2FsZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFRoZSB2b2ljZSdzIHF1YWxpdHkgKGhpZ2hlciBpcyBiZXR0ZXIpCisgICAgICovCisgICAgcHVibGljIGludCBnZXRRdWFsaXR5KCkgeworICAgICAgICByZXR1cm4gbVF1YWxpdHk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBUaGUgdm9pY2UncyBsYXRlbmN5IChsb3dlciBpcyBiZXR0ZXIpCisgICAgICovCisgICAgcHVibGljIGludCBnZXRMYXRlbmN5KCkgeworICAgICAgICByZXR1cm4gbUxhdGVuY3k7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBEb2VzIHRoZSBWb2ljZSByZXF1aXJlIGEgbmV0d29yayBjb25uZWN0aW9uIHRvIHdvcmsuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZ2V0UmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIG1SZXF1aXJlc05ldHdvcmtDb25uZWN0aW9uOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gQnVuZGxlIG9mIGFsbCBhdmFpbGFibGUgcGFyYW1ldGVycyB3aXRoIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorICAgICAqLworICAgIHB1YmxpYyBCdW5kbGUgZ2V0UGFyYW1zV2l0aERlZmF1bHRzKCkgeworICAgICAgICByZXR1cm4gbVBhcmFtczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFVuaXF1ZSB2b2ljZSBuYW1lLgorICAgICAqCisgICAgICogRWFjaCBWb2ljZUluZm8gaGFzIGFuIHVuaXF1ZSBuYW1lLCB0aGF0IHBlcnNpc3RzIHVudGlsIGNsaWVudCBpcyBhc2tlZCB0byByZS1ldmFsdWF0ZSB0aGUKKyAgICAgKiBzZXQgb2YgdGhlIGF2YWlsYWJsZSBsYW5ndWFnZXMgaW4gdGhlIHtAbGluayBUZXh0VG9TcGVlY2hDbGllbnQuQ29ubmVjdGlvbkNhbGxiYWNrcyNvbkVuZ2luZVN0YXR1c0NoYW5nZShhbmRyb2lkLnNwZWVjaC50dHMuVGV4dFRvU3BlZWNoQ2xpZW50LkVuZ2luZVN0YXR1cyl9CisgICAgICogY2FsbGJhY2sgKFZvaWNlIG1heSBkaXNhcHBlYXIgZnJvbSB0aGUgc2V0IGlmIHZvaWNlIHdhcyByZW1vdmVkIGJ5IHRoZSB1c2VyKS4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgIHJldHVybiBtTmFtZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIEFkZGl0aW9uYWwgZmVhdHVyZXMgb2YgdGhlIHZvaWNlLgorICAgICAqLworICAgIHB1YmxpYyBCdW5kbGUgZ2V0QWRkaXRpb25hbEZlYXR1cmVzKCkgeworICAgICAgICByZXR1cm4gbUFkZGl0aW9uYWxGZWF0dXJlczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcig2NCk7CisgICAgICAgIHJldHVybiBidWlsZGVyLmFwcGVuZCgiVm9pY2VJbmZvW05hbWU6ICIpLmFwcGVuZChtTmFtZSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCIgLGxvY2FsZTogIikuYXBwZW5kKG1Mb2NhbGUpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiICxxdWFsaXR5OiAiKS5hcHBlbmQobVF1YWxpdHkpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiICxsYXRlbmN5OiAiKS5hcHBlbmQobUxhdGVuY3kpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiICxyZXF1aXJlc05ldHdvcms6ICIpLmFwcGVuZChtUmVxdWlyZXNOZXR3b3JrQ29ubmVjdGlvbikKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCIgLHBhcmFtc1dpdGhEZWZhdWx0czogIikuYXBwZW5kKG1QYXJhbXMudG9TdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCIgLGFkZGl0aW9uYWxGZWF0dXJlczogIikuYXBwZW5kKG1BZGRpdGlvbmFsRmVhdHVyZXMudG9TdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCJdIikudG9TdHJpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L0h0bWwuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvSHRtbC5qYXZhCmluZGV4IGY4MzlkNTIuLmM4MDMyMWMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvSHRtbC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvSHRtbC5qYXZhCkBAIC00OCwxMSArNDgsOCBAQAogaW1wb3J0IGFuZHJvaWQudGV4dC5zdHlsZS5VUkxTcGFuOwogaW1wb3J0IGFuZHJvaWQudGV4dC5zdHlsZS5VbmRlcmxpbmVTcGFuOwogCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5YbWxVdGlsczsKLQogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiAKIC8qKgogICogVGhpcyBjbGFzcyBwcm9jZXNzZXMgSFRNTCBzdHJpbmdzIGludG8gZGlzcGxheWFibGUgc3R5bGVkIHRleHQuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L2Zvcm1hdC9EYXRlVXRpbHMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvZm9ybWF0L0RhdGVVdGlscy5qYXZhCmluZGV4IDIyNjc1YjQuLmQwZWQ4NzEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvZm9ybWF0L0RhdGVVdGlscy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvZm9ybWF0L0RhdGVVdGlscy5qYXZhCkBAIC0yOCw3ICsyOCw2IEBACiBpbXBvcnQgamF2YS51dGlsLkZvcm1hdHRlcjsKIGltcG9ydCBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuVGltZVpvbmU7CiAKIGltcG9ydCBsaWJjb3JlLmljdS5EYXRlSW50ZXJ2YWxGb3JtYXQ7CiBpbXBvcnQgbGliY29yZS5pY3UuTG9jYWxlRGF0YTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvbWV0aG9kL0hpZGVSZXR1cm5zVHJhbnNmb3JtYXRpb25NZXRob2QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvbWV0aG9kL0hpZGVSZXR1cm5zVHJhbnNmb3JtYXRpb25NZXRob2QuamF2YQppbmRleCBjZTE4NjkyLi5jNmE5MGNhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L21ldGhvZC9IaWRlUmV0dXJuc1RyYW5zZm9ybWF0aW9uTWV0aG9kLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvSGlkZVJldHVybnNUcmFuc2Zvcm1hdGlvbk1ldGhvZC5qYXZhCkBAIC0xNiwxMyArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQudGV4dC5tZXRob2Q7CiAKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LkdldENoYXJzOwotaW1wb3J0IGFuZHJvaWQudGV4dC5TcGFubmVkOwotaW1wb3J0IGFuZHJvaWQudGV4dC5TcGFubmVkU3RyaW5nOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7IAotCiAvKioKICAqIFRoaXMgdHJhbnNmb3JtYXRpb24gbWV0aG9kIGNhdXNlcyBhbnkgY2FycmlhZ2UgcmV0dXJuIGNoYXJhY3RlcnMgKFxyKQogICogdG8gYmUgaGlkZGVuIGJ5IGRpc3BsYXlpbmcgdGhlbSBhcyB6ZXJvLXdpZHRoIG5vbi1icmVha2luZyBzcGFjZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvUGFzc3dvcmRUcmFuc2Zvcm1hdGlvbk1ldGhvZC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvUGFzc3dvcmRUcmFuc2Zvcm1hdGlvbk1ldGhvZC5qYXZhCmluZGV4IGI3NjliNzYuLjg4YTY5YjkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvbWV0aG9kL1Bhc3N3b3JkVHJhbnNmb3JtYXRpb25NZXRob2QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L21ldGhvZC9QYXNzd29yZFRyYW5zZm9ybWF0aW9uTWV0aG9kLmphdmEKQEAgLTI1LDcgKzI1LDYgQEAKIGltcG9ydCBhbmRyb2lkLnRleHQuTm9Db3B5U3BhbjsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0V2F0Y2hlcjsKLWltcG9ydCBhbmRyb2lkLnRleHQuU2VsZWN0aW9uOwogaW1wb3J0IGFuZHJvaWQudGV4dC5TcGFubmVkOwogaW1wb3J0IGFuZHJvaWQudGV4dC5TcGFubmFibGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLlVwZGF0ZUxheW91dDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvbWV0aG9kL1NpbmdsZUxpbmVUcmFuc2Zvcm1hdGlvbk1ldGhvZC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvU2luZ2xlTGluZVRyYW5zZm9ybWF0aW9uTWV0aG9kLmphdmEKaW5kZXggNmEwNWZlNC4uODE4NTI2YSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvU2luZ2xlTGluZVRyYW5zZm9ybWF0aW9uTWV0aG9kLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvU2luZ2xlTGluZVRyYW5zZm9ybWF0aW9uTWV0aG9kLmphdmEKQEAgLTE2LDE1ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC50ZXh0Lm1ldGhvZDsKIAotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLnRleHQuRWRpdGFibGU7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LkdldENoYXJzOwotaW1wb3J0IGFuZHJvaWQudGV4dC5TcGFubmFibGU7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uZWQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uZWRTdHJpbmc7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLQogLyoqCiAgKiBUaGlzIHRyYW5zZm9ybWF0aW9uIG1ldGhvZCBjYXVzZXMgYW55IG5ld2xpbmUgY2hhcmFjdGVycyAoXG4pIHRvIGJlCiAgKiBkaXNwbGF5ZWQgYXMgc3BhY2VzIGluc3RlYWQgb2YgY2F1c2luZyBsaW5lIGJyZWFrcywgYW5kIGNhdXNlcwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9EcmF3YWJsZU1hcmdpblNwYW4uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvc3R5bGUvRHJhd2FibGVNYXJnaW5TcGFuLmphdmEKaW5kZXggYzI1NjRkNS4uMjBiNjg4NiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9EcmF3YWJsZU1hcmdpblNwYW4uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL0RyYXdhYmxlTWFyZ2luU3Bhbi5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uZWQ7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LkxheW91dDsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9EeW5hbWljRHJhd2FibGVTcGFuLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL0R5bmFtaWNEcmF3YWJsZVNwYW4uamF2YQppbmRleCA4OWRjNDViLi41YjhhNmRkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL0R5bmFtaWNEcmF3YWJsZVNwYW4uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL0R5bmFtaWNEcmF3YWJsZVNwYW4uamF2YQpAQCAtMTcsMTIgKzE3LDkgQEAKIHBhY2thZ2UgYW5kcm9pZC50ZXh0LnN0eWxlOwogCiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50LlN0eWxlOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9JY29uTWFyZ2luU3Bhbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9JY29uTWFyZ2luU3Bhbi5qYXZhCmluZGV4IGM3ODZhMTcuLmNmOWE3MDUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvc3R5bGUvSWNvbk1hcmdpblNwYW4uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL0ljb25NYXJnaW5TcGFuLmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uZWQ7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LkxheW91dDsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9MaW5lSGVpZ2h0U3Bhbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9MaW5lSGVpZ2h0U3Bhbi5qYXZhCmluZGV4IDQ0YTE3MDYuLjFlYmVlODIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvc3R5bGUvTGluZUhlaWdodFNwYW4uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL0xpbmVIZWlnaHRTcGFuLmphdmEKQEAgLTE3LDggKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC50ZXh0LnN0eWxlOwogCiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLnRleHQuTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0UGFpbnQ7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTGluZUhlaWdodFNwYW4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvc3R5bGUvTWV0cmljQWZmZWN0aW5nU3Bhbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9NZXRyaWNBZmZlY3RpbmdTcGFuLmphdmEKaW5kZXggOTI1NThlYi4uYTAyYjI3NiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9NZXRyaWNBZmZlY3RpbmdTcGFuLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9NZXRyaWNBZmZlY3RpbmdTcGFuLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnRleHQuc3R5bGU7CiAKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0UGFpbnQ7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9TdWdnZXN0aW9uU3Bhbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9zdHlsZS9TdWdnZXN0aW9uU3Bhbi5qYXZhCmluZGV4IDBlYzdlODQuLjhiNDA5NTMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvc3R5bGUvU3VnZ2VzdGlvblNwYW4uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3N0eWxlL1N1Z2dlc3Rpb25TcGFuLmphdmEKQEAgLTE2NiwyNSArMTY2LDI1IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgZGVmU3R5bGUgPSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIudGV4dEFwcGVhcmFuY2VNaXNzcGVsbGVkU3VnZ2VzdGlvbjsKKyAgICAgICAgaW50IGRlZlN0eWxlQXR0ciA9IGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci50ZXh0QXBwZWFyYW5jZU1pc3NwZWxsZWRTdWdnZXN0aW9uOwogICAgICAgICBUeXBlZEFycmF5IHR5cGVkQXJyYXkgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgbnVsbCwgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3VnZ2VzdGlvblNwYW4sIGRlZlN0eWxlLCAwKTsKKyAgICAgICAgICAgICAgICBudWxsLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TdWdnZXN0aW9uU3BhbiwgZGVmU3R5bGVBdHRyLCAwKTsKICAgICAgICAgbU1pc3NwZWxsZWRVbmRlcmxpbmVUaGlja25lc3MgPSB0eXBlZEFycmF5LmdldERpbWVuc2lvbigKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TdWdnZXN0aW9uU3Bhbl90ZXh0VW5kZXJsaW5lVGhpY2tuZXNzLCAwKTsKICAgICAgICAgbU1pc3NwZWxsZWRVbmRlcmxpbmVDb2xvciA9IHR5cGVkQXJyYXkuZ2V0Q29sb3IoCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3VnZ2VzdGlvblNwYW5fdGV4dFVuZGVybGluZUNvbG9yLCBDb2xvci5CTEFDSyk7CiAKLSAgICAgICAgZGVmU3R5bGUgPSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIudGV4dEFwcGVhcmFuY2VFYXN5Q29ycmVjdFN1Z2dlc3Rpb247CisgICAgICAgIGRlZlN0eWxlQXR0ciA9IGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci50ZXh0QXBwZWFyYW5jZUVhc3lDb3JyZWN0U3VnZ2VzdGlvbjsKICAgICAgICAgdHlwZWRBcnJheSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICBudWxsLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TdWdnZXN0aW9uU3BhbiwgZGVmU3R5bGUsIDApOworICAgICAgICAgICAgICAgIG51bGwsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlN1Z2dlc3Rpb25TcGFuLCBkZWZTdHlsZUF0dHIsIDApOwogICAgICAgICBtRWFzeUNvcnJlY3RVbmRlcmxpbmVUaGlja25lc3MgPSB0eXBlZEFycmF5LmdldERpbWVuc2lvbigKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TdWdnZXN0aW9uU3Bhbl90ZXh0VW5kZXJsaW5lVGhpY2tuZXNzLCAwKTsKICAgICAgICAgbUVhc3lDb3JyZWN0VW5kZXJsaW5lQ29sb3IgPSB0eXBlZEFycmF5LmdldENvbG9yKAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlN1Z2dlc3Rpb25TcGFuX3RleHRVbmRlcmxpbmVDb2xvciwgQ29sb3IuQkxBQ0spOwogCi0gICAgICAgIGRlZlN0eWxlID0gY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLnRleHRBcHBlYXJhbmNlQXV0b0NvcnJlY3Rpb25TdWdnZXN0aW9uOworICAgICAgICBkZWZTdHlsZUF0dHIgPSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIudGV4dEFwcGVhcmFuY2VBdXRvQ29ycmVjdGlvblN1Z2dlc3Rpb247CiAgICAgICAgIHR5cGVkQXJyYXkgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgbnVsbCwgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3VnZ2VzdGlvblNwYW4sIGRlZlN0eWxlLCAwKTsKKyAgICAgICAgICAgICAgICBudWxsLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TdWdnZXN0aW9uU3BhbiwgZGVmU3R5bGVBdHRyLCAwKTsKICAgICAgICAgbUF1dG9Db3JyZWN0aW9uVW5kZXJsaW5lVGhpY2tuZXNzID0gdHlwZWRBcnJheS5nZXREaW1lbnNpb24oCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3VnZ2VzdGlvblNwYW5fdGV4dFVuZGVybGluZVRoaWNrbmVzcywgMCk7CiAgICAgICAgIG1BdXRvQ29ycmVjdGlvblVuZGVybGluZUNvbG9yID0gdHlwZWRBcnJheS5nZXRDb2xvcigKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3RyYW5zaXRpb24vUmVjb2xvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9SZWNvbG9yLmphdmEKaW5kZXggNzAxMTFkMS4uMTYzOGY2NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9SZWNvbG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9SZWNvbG9yLmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC50cmFuc2l0aW9uOwogCiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3I7Ci1pbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQXJnYkV2YWx1YXRvcjsKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkNvbG9yRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKQEAgLTc1LDggKzc0LDggQEAKICAgICAgICAgICAgIGlmIChzdGFydENvbG9yLmdldENvbG9yKCkgIT0gZW5kQ29sb3IuZ2V0Q29sb3IoKSkgewogICAgICAgICAgICAgICAgIGVuZENvbG9yLnNldENvbG9yKHN0YXJ0Q29sb3IuZ2V0Q29sb3IoKSk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdEFuaW1hdG9yLm9mT2JqZWN0KGVuZEJhY2tncm91bmQsICJjb2xvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXJnYkV2YWx1YXRvcigpLCBzdGFydENvbG9yLmdldENvbG9yKCksIGVuZENvbG9yLmdldENvbG9yKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RBbmltYXRvci5vZkFyZ2IoZW5kQmFja2dyb3VuZCwgImNvbG9yIiwgc3RhcnRDb2xvci5nZXRDb2xvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kQ29sb3IuZ2V0Q29sb3IoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZpZXcgaW5zdGFuY2VvZiBUZXh0VmlldykgewpAQCAtODYsOCArODUsNyBAQAogICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IGVuZCkgewogICAgICAgICAgICAgICAgIHRleHRWaWV3LnNldFRleHRDb2xvcihlbmQpOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RBbmltYXRvci5vZk9iamVjdCh0ZXh0VmlldywgInRleHRDb2xvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXJnYkV2YWx1YXRvcigpLCBzdGFydCwgZW5kKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0QW5pbWF0b3Iub2ZBcmdiKHRleHRWaWV3LCAidGV4dENvbG9yIiwgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC90cmFuc2l0aW9uL1NjZW5lLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC90cmFuc2l0aW9uL1NjZW5lLmphdmEKaW5kZXggZTFmMTg5Ni4uNDI2N2E2NSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9TY2VuZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3RyYW5zaXRpb24vU2NlbmUuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKICAgICBwcml2YXRlIGludCBtTGF5b3V0SWQgPSAtMTsKICAgICBwcml2YXRlIFZpZXdHcm91cCBtU2NlbmVSb290OwotICAgIHByaXZhdGUgVmlld0dyb3VwIG1MYXlvdXQ7IC8vIGFsdGVybmF0aXZlIHRvIGxheW91dElkCisgICAgcHJpdmF0ZSBWaWV3IG1MYXlvdXQ7IC8vIGFsdGVybmF0aXZlIHRvIGxheW91dElkCiAgICAgUnVubmFibGUgbUVudGVyQWN0aW9uLCBtRXhpdEFjdGlvbjsKIAogICAgIC8qKgpAQCAtMTE0LDYgKzExNCwxNSBAQAogICAgICAqIEBwYXJhbSBsYXlvdXQgVGhlIHZpZXcgaGllcmFyY2h5IG9mIHRoaXMgc2NlbmUsIGFkZGVkIGFzIGEgY2hpbGQKICAgICAgKiBvZiBzY2VuZVJvb3Qgd2hlbiB0aGlzIHNjZW5lIGlzIGVudGVyZWQuCiAgICAgICovCisgICAgcHVibGljIFNjZW5lKFZpZXdHcm91cCBzY2VuZVJvb3QsIFZpZXcgbGF5b3V0KSB7CisgICAgICAgIG1TY2VuZVJvb3QgPSBzY2VuZVJvb3Q7CisgICAgICAgIG1MYXlvdXQgPSBsYXlvdXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayAjU2NlbmUoVmlld0dyb3VwLCBWaWV3KX0uCisgICAgICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgU2NlbmUoVmlld0dyb3VwIHNjZW5lUm9vdCwgVmlld0dyb3VwIGxheW91dCkgewogICAgICAgICBtU2NlbmVSb290ID0gc2NlbmVSb290OwogICAgICAgICBtTGF5b3V0ID0gbGF5b3V0OwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uSW5mbGF0ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3RyYW5zaXRpb24vVHJhbnNpdGlvbkluZmxhdGVyLmphdmEKaW5kZXggOWY3N2Q1ZS4uOWZhNTU0YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uSW5mbGF0ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25JbmZsYXRlci5qYXZhCkBAIC0yMCw2ICsyMCw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuWG1sUmVzb3VyY2VQYXJzZXI7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5YbWw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkluZmxhdGVFeGNlcHRpb247CkBAIC0yOTEsMTkgKzI5Miw0MCBAQAogICAgICAgICBpbnQgdG9JZCA9IGEuZ2V0UmVzb3VyY2VJZCgKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5UcmFuc2l0aW9uTWFuYWdlcl90b1NjZW5lLCAtMSk7CiAgICAgICAgIGlmICh0b0lkID49IDApIHRvU2NlbmUgPSBTY2VuZS5nZXRTY2VuZUZvckxheW91dChzY2VuZVJvb3QsIHRvSWQsIG1Db250ZXh0KTsKKyAgICAgICAgU3RyaW5nIGZyb21OYW1lID0gYS5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVHJhbnNpdGlvbk1hbmFnZXJfZnJvbVNjZW5lTmFtZSk7CisgICAgICAgIFN0cmluZyB0b05hbWUgPSBhLmdldFN0cmluZygKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5UcmFuc2l0aW9uTWFuYWdlcl90b1NjZW5lTmFtZSk7CiAgICAgICAgIGlmICh0cmFuc2l0aW9uSWQgPj0gMCkgewogICAgICAgICAgICAgVHJhbnNpdGlvbiB0cmFuc2l0aW9uID0gaW5mbGF0ZVRyYW5zaXRpb24odHJhbnNpdGlvbklkKTsKICAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBpZiAoZnJvbVNjZW5lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRvU2NlbmUgPT0gbnVsbCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm8gbWF0Y2hpbmcgdG9TY2VuZSBmb3IgZ2l2ZW4gZnJvbVNjZW5lICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIHRyYW5zaXRpb24gSUQgIiArIHRyYW5zaXRpb25JZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaGFzRGVzdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAodG9TY2VuZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uTWFuYWdlci5zZXRUcmFuc2l0aW9uKGZyb21TY2VuZSwgdG9TY2VuZSwgdHJhbnNpdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNEZXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodG9OYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbk1hbmFnZXIuc2V0VHJhbnNpdGlvbihmcm9tU2NlbmUsIHRvTmFtZSwgdHJhbnNpdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNEZXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghaGFzRGVzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vIG1hdGNoaW5nIHRvU2NlbmUgb3IgdG9TY2VuZU5hbWUgZm9yIGdpdmVuICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbVNjZW5lIGZvciB0cmFuc2l0aW9uIElEICIgKyB0cmFuc2l0aW9uSWQpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b0lkID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbk1hbmFnZXIuc2V0VHJhbnNpdGlvbih0b1NjZW5lLCB0cmFuc2l0aW9uKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGZyb21OYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRvU2NlbmUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbk1hbmFnZXIuc2V0VHJhbnNpdGlvbihmcm9tTmFtZSwgdG9TY2VuZSwgdHJhbnNpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm8gbWF0Y2hpbmcgdG9TY2VuZSBmb3IgZ2l2ZW4gZnJvbVNjZW5lTmFtZSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciB0cmFuc2l0aW9uIElEICIgKyB0cmFuc2l0aW9uSWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGEucmVjeWNsZSgpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uTWFuYWdlci5qYXZhCmluZGV4IDNiZjY3OTAuLjAxMDZmN2ZiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC90cmFuc2l0aW9uL1RyYW5zaXRpb25NYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdHJhbnNpdGlvbi9UcmFuc2l0aW9uTWFuYWdlci5qYXZhCkBAIC02Nyw5ICs2NywxNSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgVHJhbnNpdGlvbiBzRGVmYXVsdFRyYW5zaXRpb24gPSBuZXcgQXV0b1RyYW5zaXRpb24oKTsKIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVNUFRZX1NUUklOR1MgPSBuZXcgU3RyaW5nWzBdOworCiAgICAgQXJyYXlNYXA8U2NlbmUsIFRyYW5zaXRpb24+IG1TY2VuZVRyYW5zaXRpb25zID0gbmV3IEFycmF5TWFwPFNjZW5lLCBUcmFuc2l0aW9uPigpOwogICAgIEFycmF5TWFwPFNjZW5lLCBBcnJheU1hcDxTY2VuZSwgVHJhbnNpdGlvbj4+IG1TY2VuZVBhaXJUcmFuc2l0aW9ucyA9CiAgICAgICAgICAgICBuZXcgQXJyYXlNYXA8U2NlbmUsIEFycmF5TWFwPFNjZW5lLCBUcmFuc2l0aW9uPj4oKTsKKyAgICBBcnJheU1hcDxTY2VuZSwgQXJyYXlNYXA8U3RyaW5nLCBUcmFuc2l0aW9uPj4gbVNjZW5lTmFtZVRyYW5zaXRpb25zID0KKyAgICAgICAgICAgIG5ldyBBcnJheU1hcDxTY2VuZSwgQXJyYXlNYXA8U3RyaW5nLCBUcmFuc2l0aW9uPj4oKTsKKyAgICBBcnJheU1hcDxTdHJpbmcsIEFycmF5TWFwPFNjZW5lLCBUcmFuc2l0aW9uPj4gbU5hbWVTY2VuZVRyYW5zaXRpb25zID0KKyAgICAgICAgICAgIG5ldyBBcnJheU1hcDxTdHJpbmcsIEFycmF5TWFwPFNjZW5lLCBUcmFuc2l0aW9uPj4oKTsKICAgICBwcml2YXRlIHN0YXRpYyBUaHJlYWRMb2NhbDxXZWFrUmVmZXJlbmNlPEFycmF5TWFwPFZpZXdHcm91cCwgQXJyYXlMaXN0PFRyYW5zaXRpb24+Pj4+CiAgICAgICAgICAgICBzUnVubmluZ1RyYW5zaXRpb25zID0KICAgICAgICAgICAgIG5ldyBUaHJlYWRMb2NhbDxXZWFrUmVmZXJlbmNlPEFycmF5TWFwPFZpZXdHcm91cCwgQXJyYXlMaXN0PFRyYW5zaXRpb24+Pj4+KCk7CkBAIC0yMTgsNiArMjI0LDE0MSBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSB0cmFuc2l0aW9uIGZyb20gYSBuYW1lZCBzY2VuZSB0byBhIHRhcmdldCBkZWZpbmVkIHNjZW5lIGlmIG9uZSBoYXMgYmVlbgorICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFRyYW5zaXRpb25NYW5hZ2VyLgorICAgICAqCisgICAgICogPHA+QSBuYW1lZCBzY2VuZSBpcyBhbiBpbmRpcmVjdCBsaW5rIGZvciBhIHRyYW5zaXRpb24uIEZ1bmRhbWVudGFsbHkgYSBuYW1lZAorICAgICAqIHNjZW5lIHJlcHJlc2VudHMgYSBwb3RlbnRpYWxseSBhcmJpdHJhcnkgaW50ZXJzZWN0aW9uIHBvaW50IG9mIHR3byBvdGhlcndpc2UgaW5kZXBlbmRlbnQKKyAgICAgKiB0cmFuc2l0aW9ucy4gQWN0aXZpdHkgQSBtYXkgZGVmaW5lIGEgdHJhbnNpdGlvbiBmcm9tIHNjZW5lIFggdG8gImNvbS5leGFtcGxlLnNjZW5lLkZPTyIKKyAgICAgKiB3aGlsZSBhY3Rpdml0eSBCIG1heSBkZWZpbmUgYSB0cmFuc2l0aW9uIGZyb20gc2NlbmUgImNvbS5leGFtcGxlLnNjZW5lLkZPTyIgdG8gc2NlbmUgWS4KKyAgICAgKiBJbiB0aGlzIHdheSBhcHBsaWNhdGlvbnMgbWF5IGRlZmluZSBhbiBBUEkgZm9yIG1vcmUgc29waGlzdGljYXRlZCB0cmFuc2l0aW9ucyBiZXR3ZWVuCisgICAgICogY2FsbGVyIGFuZCBjYWxsZWQgYWN0aXZpdGllcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHdheSB0aGF0IDxjb2RlPkludGVudDwvY29kZT4gZXh0cmFzCisgICAgICogZGVmaW5lIEFQSXMgZm9yIGFyZ3VtZW50cyBhbmQgZGF0YSBwcm9wYWdhdGlvbiBiZXR3ZWVuIGFjdGl2aXRpZXMuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGZyb21OYW1lIE5hbWVkIHNjZW5lIHRoYXQgdGhpcyB0cmFuc2l0aW9uIGNvcnJlc3BvbmRzIHRvCisgICAgICogQHBhcmFtIHRvU2NlbmUgVGFyZ2V0IHNjZW5lIHRoYXQgdGhpcyB0cmFuc2l0aW9uIHdpbGwgbW92ZSB0bworICAgICAqIEByZXR1cm4gVHJhbnNpdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBmcm9tTmFtZSBhbmQgdG9TY2VuZSBvciBudWxsCisgICAgICogICAgICAgICBpZiBubyBhc3NvY2lhdGlvbiBleGlzdHMgaW4gdGhpcyBUcmFuc2l0aW9uTWFuYWdlcgorICAgICAqCisgICAgICogQHNlZSAjc2V0VHJhbnNpdGlvbihTdHJpbmcsIFNjZW5lLCBUcmFuc2l0aW9uKQorICAgICAqLworICAgIHB1YmxpYyBUcmFuc2l0aW9uIGdldE5hbWVkVHJhbnNpdGlvbihTdHJpbmcgZnJvbU5hbWUsIFNjZW5lIHRvU2NlbmUpIHsKKyAgICAgICAgQXJyYXlNYXA8U2NlbmUsIFRyYW5zaXRpb24+IG0gPSBtTmFtZVNjZW5lVHJhbnNpdGlvbnMuZ2V0KGZyb21OYW1lKTsKKyAgICAgICAgaWYgKG0gIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG0uZ2V0KHRvU2NlbmUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSB0cmFuc2l0aW9uIGZyb20gYSBkZWZpbmVkIHNjZW5lIHRvIGEgdGFyZ2V0IG5hbWVkIHNjZW5lIGlmIG9uZSBoYXMgYmVlbgorICAgICAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFRyYW5zaXRpb25NYW5hZ2VyLgorICAgICAqCisgICAgICogPHA+QSBuYW1lZCBzY2VuZSBpcyBhbiBpbmRpcmVjdCBsaW5rIGZvciBhIHRyYW5zaXRpb24uIEZ1bmRhbWVudGFsbHkgYSBuYW1lZAorICAgICAqIHNjZW5lIHJlcHJlc2VudHMgYSBwb3RlbnRpYWxseSBhcmJpdHJhcnkgaW50ZXJzZWN0aW9uIHBvaW50IG9mIHR3byBvdGhlcndpc2UgaW5kZXBlbmRlbnQKKyAgICAgKiB0cmFuc2l0aW9ucy4gQWN0aXZpdHkgQSBtYXkgZGVmaW5lIGEgdHJhbnNpdGlvbiBmcm9tIHNjZW5lIFggdG8gImNvbS5leGFtcGxlLnNjZW5lLkZPTyIKKyAgICAgKiB3aGlsZSBhY3Rpdml0eSBCIG1heSBkZWZpbmUgYSB0cmFuc2l0aW9uIGZyb20gc2NlbmUgImNvbS5leGFtcGxlLnNjZW5lLkZPTyIgdG8gc2NlbmUgWS4KKyAgICAgKiBJbiB0aGlzIHdheSBhcHBsaWNhdGlvbnMgbWF5IGRlZmluZSBhbiBBUEkgZm9yIG1vcmUgc29waGlzdGljYXRlZCB0cmFuc2l0aW9ucyBiZXR3ZWVuCisgICAgICogY2FsbGVyIGFuZCBjYWxsZWQgYWN0aXZpdGllcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHdheSB0aGF0IDxjb2RlPkludGVudDwvY29kZT4gZXh0cmFzCisgICAgICogZGVmaW5lIEFQSXMgZm9yIGFyZ3VtZW50cyBhbmQgZGF0YSBwcm9wYWdhdGlvbiBiZXR3ZWVuIGFjdGl2aXRpZXMuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGZyb21TY2VuZSBTY2VuZSB0aGF0IHRoaXMgdHJhbnNpdGlvbiBzdGFydHMgZnJvbQorICAgICAqIEBwYXJhbSB0b05hbWUgTmFtZSBvZiB0aGUgdGFyZ2V0IHNjZW5lCisgICAgICogQHJldHVybiBUcmFuc2l0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGZyb21TY2VuZSBhbmQgdG9OYW1lIG9yIG51bGwKKyAgICAgKiAgICAgICAgIGlmIG5vIGFzc29jaWF0aW9uIGV4aXN0cyBpbiB0aGlzIFRyYW5zaXRpb25NYW5hZ2VyCisgICAgICovCisgICAgcHVibGljIFRyYW5zaXRpb24gZ2V0TmFtZWRUcmFuc2l0aW9uKFNjZW5lIGZyb21TY2VuZSwgU3RyaW5nIHRvTmFtZSkgeworICAgICAgICBBcnJheU1hcDxTdHJpbmcsIFRyYW5zaXRpb24+IG0gPSBtU2NlbmVOYW1lVHJhbnNpdGlvbnMuZ2V0KGZyb21TY2VuZSk7CisgICAgICAgIGlmIChtICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBtLmdldCh0b05hbWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSBzdXBwb3J0ZWQgdGFyZ2V0IG5hbWVkIHNjZW5lcyB3aGVuIHRyYW5zaXRpb25pbmcgYXdheSBmcm9tIHRoZSBnaXZlbiBzY2VuZS4KKyAgICAgKgorICAgICAqIDxwPkEgbmFtZWQgc2NlbmUgaXMgYW4gaW5kaXJlY3QgbGluayBmb3IgYSB0cmFuc2l0aW9uLiBGdW5kYW1lbnRhbGx5IGEgbmFtZWQKKyAgICAgKiBzY2VuZSByZXByZXNlbnRzIGEgcG90ZW50aWFsbHkgYXJiaXRyYXJ5IGludGVyc2VjdGlvbiBwb2ludCBvZiB0d28gb3RoZXJ3aXNlIGluZGVwZW5kZW50CisgICAgICogdHJhbnNpdGlvbnMuIEFjdGl2aXR5IEEgbWF5IGRlZmluZSBhIHRyYW5zaXRpb24gZnJvbSBzY2VuZSBYIHRvICJjb20uZXhhbXBsZS5zY2VuZS5GT08iCisgICAgICogd2hpbGUgYWN0aXZpdHkgQiBtYXkgZGVmaW5lIGEgdHJhbnNpdGlvbiBmcm9tIHNjZW5lICJjb20uZXhhbXBsZS5zY2VuZS5GT08iIHRvIHNjZW5lIFkuCisgICAgICogSW4gdGhpcyB3YXkgYXBwbGljYXRpb25zIG1heSBkZWZpbmUgYW4gQVBJIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgdHJhbnNpdGlvbnMgYmV0d2VlbgorICAgICAqIGNhbGxlciBhbmQgY2FsbGVkIGFjdGl2aXRpZXMgdmVyeSBzaW1pbGFyIHRvIHRoZSB3YXkgdGhhdCA8Y29kZT5JbnRlbnQ8L2NvZGU+IGV4dHJhcworICAgICAqIGRlZmluZSBBUElzIGZvciBhcmd1bWVudHMgYW5kIGRhdGEgcHJvcGFnYXRpb24gYmV0d2VlbiBhY3Rpdml0aWVzLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmcm9tU2NlbmUgU2NlbmUgdG8gdHJhbnNpdGlvbiBmcm9tCisgICAgICogQHJldHVybiBBbiBhcnJheSBvZiBTdHJpbmdzIG5hbWluZyBlYWNoIHN1cHBvcnRlZCB0cmFuc2l0aW9uIHN0YXJ0aW5nIGZyb20KKyAgICAgKiAgICAgICAgIDxjb2RlPmZyb21TY2VuZTwvY29kZT4uIElmIG5vIHRyYW5zaXRpb25zIHRvIGEgbmFtZWQgc2NlbmUgZnJvbSB0aGUgZ2l2ZW4KKyAgICAgKiAgICAgICAgIHNjZW5lIGFyZSBzdXBwb3J0ZWQgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIFN0cmluZ1tdIG9mIGxlbmd0aCAwLgorICAgICAqCisgICAgICogQHNlZSAjc2V0VHJhbnNpdGlvbihTY2VuZSwgU3RyaW5nLCBUcmFuc2l0aW9uKQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRUYXJnZXRTY2VuZU5hbWVzKFNjZW5lIGZyb21TY2VuZSkgeworICAgICAgICBmaW5hbCBBcnJheU1hcDxTdHJpbmcsIFRyYW5zaXRpb24+IG0gPSBtU2NlbmVOYW1lVHJhbnNpdGlvbnMuZ2V0KGZyb21TY2VuZSk7CisgICAgICAgIGlmIChtID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVFJJTkdTOworICAgICAgICB9CisgICAgICAgIGZpbmFsIGludCBjb3VudCA9IG0uc2l6ZSgpOworICAgICAgICBmaW5hbCBTdHJpbmdbXSByZXN1bHQgPSBuZXcgU3RyaW5nW2NvdW50XTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICByZXN1bHRbaV0gPSBtLmtleUF0KGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IGEgdHJhbnNpdGlvbiBmcm9tIGEgc3BlY2lmaWMgc2NlbmUgdG8gYSBuYW1lZCBzY2VuZS4KKyAgICAgKgorICAgICAqIDxwPkEgbmFtZWQgc2NlbmUgaXMgYW4gaW5kaXJlY3QgbGluayBmb3IgYSB0cmFuc2l0aW9uLiBGdW5kYW1lbnRhbGx5IGEgbmFtZWQKKyAgICAgKiBzY2VuZSByZXByZXNlbnRzIGEgcG90ZW50aWFsbHkgYXJiaXRyYXJ5IGludGVyc2VjdGlvbiBwb2ludCBvZiB0d28gb3RoZXJ3aXNlIGluZGVwZW5kZW50CisgICAgICogdHJhbnNpdGlvbnMuIEFjdGl2aXR5IEEgbWF5IGRlZmluZSBhIHRyYW5zaXRpb24gZnJvbSBzY2VuZSBYIHRvICJjb20uZXhhbXBsZS5zY2VuZS5GT08iCisgICAgICogd2hpbGUgYWN0aXZpdHkgQiBtYXkgZGVmaW5lIGEgdHJhbnNpdGlvbiBmcm9tIHNjZW5lICJjb20uZXhhbXBsZS5zY2VuZS5GT08iIHRvIHNjZW5lIFkuCisgICAgICogSW4gdGhpcyB3YXkgYXBwbGljYXRpb25zIG1heSBkZWZpbmUgYW4gQVBJIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgdHJhbnNpdGlvbnMgYmV0d2VlbgorICAgICAqIGNhbGxlciBhbmQgY2FsbGVkIGFjdGl2aXRpZXMgdmVyeSBzaW1pbGFyIHRvIHRoZSB3YXkgdGhhdCA8Y29kZT5JbnRlbnQ8L2NvZGU+IGV4dHJhcworICAgICAqIGRlZmluZSBBUElzIGZvciBhcmd1bWVudHMgYW5kIGRhdGEgcHJvcGFnYXRpb24gYmV0d2VlbiBhY3Rpdml0aWVzLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmcm9tU2NlbmUgU2NlbmUgdG8gdHJhbnNpdGlvbiBmcm9tCisgICAgICogQHBhcmFtIHRvTmFtZSBOYW1lZCBzY2VuZSB0byB0cmFuc2l0aW9uIHRvCisgICAgICogQHBhcmFtIHRyYW5zaXRpb24gVHJhbnNpdGlvbiB0byB1c2UKKyAgICAgKgorICAgICAqIEBzZWUgI2dldFRhcmdldFNjZW5lTmFtZXMoU2NlbmUpCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VHJhbnNpdGlvbihTY2VuZSBmcm9tU2NlbmUsIFN0cmluZyB0b05hbWUsIFRyYW5zaXRpb24gdHJhbnNpdGlvbikgeworICAgICAgICBBcnJheU1hcDxTdHJpbmcsIFRyYW5zaXRpb24+IG0gPSBtU2NlbmVOYW1lVHJhbnNpdGlvbnMuZ2V0KGZyb21TY2VuZSk7CisgICAgICAgIGlmIChtID09IG51bGwpIHsKKyAgICAgICAgICAgIG0gPSBuZXcgQXJyYXlNYXA8U3RyaW5nLCBUcmFuc2l0aW9uPigpOworICAgICAgICAgICAgbVNjZW5lTmFtZVRyYW5zaXRpb25zLnB1dChmcm9tU2NlbmUsIG0pOworICAgICAgICB9CisgICAgICAgIG0ucHV0KHRvTmFtZSwgdHJhbnNpdGlvbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IGEgdHJhbnNpdGlvbiBmcm9tIGEgbmFtZWQgc2NlbmUgdG8gYSBjb25jcmV0ZSBzY2VuZS4KKyAgICAgKgorICAgICAqIDxwPkEgbmFtZWQgc2NlbmUgaXMgYW4gaW5kaXJlY3QgbGluayBmb3IgYSB0cmFuc2l0aW9uLiBGdW5kYW1lbnRhbGx5IGEgbmFtZWQKKyAgICAgKiBzY2VuZSByZXByZXNlbnRzIGEgcG90ZW50aWFsbHkgYXJiaXRyYXJ5IGludGVyc2VjdGlvbiBwb2ludCBvZiB0d28gb3RoZXJ3aXNlIGluZGVwZW5kZW50CisgICAgICogdHJhbnNpdGlvbnMuIEFjdGl2aXR5IEEgbWF5IGRlZmluZSBhIHRyYW5zaXRpb24gZnJvbSBzY2VuZSBYIHRvICJjb20uZXhhbXBsZS5zY2VuZS5GT08iCisgICAgICogd2hpbGUgYWN0aXZpdHkgQiBtYXkgZGVmaW5lIGEgdHJhbnNpdGlvbiBmcm9tIHNjZW5lICJjb20uZXhhbXBsZS5zY2VuZS5GT08iIHRvIHNjZW5lIFkuCisgICAgICogSW4gdGhpcyB3YXkgYXBwbGljYXRpb25zIG1heSBkZWZpbmUgYW4gQVBJIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgdHJhbnNpdGlvbnMgYmV0d2VlbgorICAgICAqIGNhbGxlciBhbmQgY2FsbGVkIGFjdGl2aXRpZXMgdmVyeSBzaW1pbGFyIHRvIHRoZSB3YXkgdGhhdCA8Y29kZT5JbnRlbnQ8L2NvZGU+IGV4dHJhcworICAgICAqIGRlZmluZSBBUElzIGZvciBhcmd1bWVudHMgYW5kIGRhdGEgcHJvcGFnYXRpb24gYmV0d2VlbiBhY3Rpdml0aWVzLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmcm9tTmFtZSBOYW1lZCBzY2VuZSB0byB0cmFuc2l0aW9uIGZyb20KKyAgICAgKiBAcGFyYW0gdG9TY2VuZSBTY2VuZSB0byB0cmFuc2l0aW9uIHRvCisgICAgICogQHBhcmFtIHRyYW5zaXRpb24gVHJhbnNpdGlvbiB0byB1c2UKKyAgICAgKgorICAgICAqIEBzZWUgI2dldE5hbWVkVHJhbnNpdGlvbihTdHJpbmcsIFNjZW5lKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zaXRpb24oU3RyaW5nIGZyb21OYW1lLCBTY2VuZSB0b1NjZW5lLCBUcmFuc2l0aW9uIHRyYW5zaXRpb24pIHsKKyAgICAgICAgQXJyYXlNYXA8U2NlbmUsIFRyYW5zaXRpb24+IG0gPSBtTmFtZVNjZW5lVHJhbnNpdGlvbnMuZ2V0KGZyb21OYW1lKTsKKyAgICAgICAgaWYgKG0gPT0gbnVsbCkgeworICAgICAgICAgICAgbSA9IG5ldyBBcnJheU1hcDxTY2VuZSwgVHJhbnNpdGlvbj4oKTsKKyAgICAgICAgICAgIG1OYW1lU2NlbmVUcmFuc2l0aW9ucy5wdXQoZnJvbU5hbWUsIG0pOworICAgICAgICB9CisgICAgICAgIG0ucHV0KHRvU2NlbmUsIHRyYW5zaXRpb24pOworICAgIH0KKworICAgIC8qKgogICAgICAqIFRoaXMgcHJpdmF0ZSB1dGlsaXR5IGNsYXNzIGlzIHVzZWQgdG8gbGlzdGVuIGZvciBib3RoIE9uUHJlRHJhdyBhbmQKICAgICAgKiBPbkF0dGFjaFN0YXRlQ2hhbmdlIGV2ZW50cy4gT25QcmVEcmF3IGV2ZW50cyBhcmUgdGhlIG1haW4gb25lcyB3ZSBjYXJlCiAgICAgICogYWJvdXQgc2luY2UgdGhhdCdzIHdoYXQgdHJpZ2dlcnMgdGhlIHRyYW5zaXRpb24gdG8gdGFrZSBwbGFjZS4KQEAgLTMyOSw3ICs0NzAsNiBAQAogICAgICAgICAvLyBBdXRvIHRyYW5zaXRpb24gaWYgdGhlcmUgaXMgbm8gdHJhbnNpdGlvbiBkZWNsYXJlZCBmb3IgdGhlIFNjZW5lLCBidXQgdGhlcmUgaXMKICAgICAgICAgLy8gYSByb290IG9yIHBhcmVudCB2aWV3CiAgICAgICAgIGNoYW5nZVNjZW5lKHNjZW5lLCBnZXRUcmFuc2l0aW9uKHNjZW5lKSk7Ci0KICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvRXZlbnRMb2dUYWdzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0V2ZW50TG9nVGFncy5qYXZhCmluZGV4IDhjMTg0MTcuLmY0Y2U0ZmQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvRXZlbnRMb2dUYWdzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9FdmVudExvZ1RhZ3MuamF2YQpAQCAtMTYsMTQgKzE2LDggQEAKIAogcGFja2FnZSBhbmRyb2lkLnV0aWw7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKIAogLyoqCiAgKiBAZGVwcmVjYXRlZCBUaGlzIGNsYXNzIGlzIG5vIGxvbmdlciBmdW5jdGlvbmFsLgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9Mb2NhbExvZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9Mb2NhbExvZy5qYXZhCmluZGV4IDY0MWQxYjQuLmVlYjZkNTggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9jYWxMb2cuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0xvY2FsTG9nLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIAogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9uZ0FycmF5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0xvbmdBcnJheS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MGE4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0xvbmdBcnJheS5qYXZhCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLnV0aWw7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFycmF5VXRpbHM7CisKKy8qKgorICogSW1wbGVtZW50cyBhIGdyb3dpbmcgYXJyYXkgb2YgbG9uZyBwcmltaXRpdmVzLgorICoKKyAqIEBoaWRlCisgKi8KK3B1YmxpYyBjbGFzcyBMb25nQXJyYXkgaW1wbGVtZW50cyBDbG9uZWFibGUgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNSU5fQ0FQQUNJVFlfSU5DUkVNRU5UID0gMTI7CisKKyAgICBwcml2YXRlIGxvbmdbXSBtVmFsdWVzOworICAgIHByaXZhdGUgaW50IG1TaXplOworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBlbXB0eSBMb25nQXJyYXkgd2l0aCB0aGUgZGVmYXVsdCBpbml0aWFsIGNhcGFjaXR5LgorICAgICAqLworICAgIHB1YmxpYyBMb25nQXJyYXkoKSB7CisgICAgICAgIHRoaXMoMTApOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gZW1wdHkgTG9uZ0FycmF5IHdpdGggdGhlIHNwZWNpZmllZCBpbml0aWFsIGNhcGFjaXR5LgorICAgICAqLworICAgIHB1YmxpYyBMb25nQXJyYXkoaW50IGluaXRpYWxDYXBhY2l0eSkgeworICAgICAgICBpZiAoaW5pdGlhbENhcGFjaXR5ID09IDApIHsKKyAgICAgICAgICAgIG1WYWx1ZXMgPSBDb250YWluZXJIZWxwZXJzLkVNUFRZX0xPTkdTOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5pdGlhbENhcGFjaXR5ID0gQXJyYXlVdGlscy5pZGVhbExvbmdBcnJheVNpemUoaW5pdGlhbENhcGFjaXR5KTsKKyAgICAgICAgICAgIG1WYWx1ZXMgPSBuZXcgbG9uZ1tpbml0aWFsQ2FwYWNpdHldOworICAgICAgICB9CisgICAgICAgIG1TaXplID0gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBcHBlbmRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGlzIGFycmF5LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZChsb25nIHZhbHVlKSB7CisgICAgICAgIGFkZChtU2l6ZSwgdmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEluc2VydHMgYSB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIGluIHRoaXMgYXJyYXkuCisgICAgICoKKyAgICAgKiBAdGhyb3dzIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gd2hlbiBpbmRleCAmbHQ7IDAgfHwgaW5kZXggJmd0OyBzaXplKCkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGQoaW50IGluZGV4LCBsb25nIHZhbHVlKSB7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiBtU2l6ZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGVuc3VyZUNhcGFjaXR5KDEpOworCisgICAgICAgIGlmIChtU2l6ZSAtIGluZGV4ICE9IDApIHsKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobVZhbHVlcywgaW5kZXgsIG1WYWx1ZXMsIGluZGV4ICsgMSwgbVNpemUgLSBpbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBtVmFsdWVzW2luZGV4XSA9IHZhbHVlOworICAgICAgICBtU2l6ZSsrOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZHMgdGhlIHZhbHVlcyBpbiB0aGUgc3BlY2lmaWVkIGFycmF5IHRvIHRoaXMgYXJyYXkuCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkQWxsKExvbmdBcnJheSB2YWx1ZXMpIHsKKyAgICAgICAgZmluYWwgaW50IGNvdW50ID0gdmFsdWVzLm1TaXplOworICAgICAgICBlbnN1cmVDYXBhY2l0eShjb3VudCk7CisKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weSh2YWx1ZXMubVZhbHVlcywgMCwgbVZhbHVlcywgbVNpemUsIGNvdW50KTsKKyAgICAgICAgbVNpemUgKz0gY291bnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogRW5zdXJlcyBjYXBhY2l0eSB0byBhcHBlbmQgYXQgbGVhc3QgPGNvZGU+Y291bnQ8L2NvZGU+IHZhbHVlcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZW5zdXJlQ2FwYWNpdHkoaW50IGNvdW50KSB7CisgICAgICAgIGZpbmFsIGludCBjdXJyZW50U2l6ZSA9IG1TaXplOworICAgICAgICBmaW5hbCBpbnQgbWluQ2FwYWNpdHkgPSBjdXJyZW50U2l6ZSArIGNvdW50OworICAgICAgICBpZiAobWluQ2FwYWNpdHkgPj0gbVZhbHVlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGZpbmFsIGludCB0YXJnZXRDYXAgPSBjdXJyZW50U2l6ZSArIChjdXJyZW50U2l6ZSA8IChNSU5fQ0FQQUNJVFlfSU5DUkVNRU5UIC8gMikgPworICAgICAgICAgICAgICAgICAgICBNSU5fQ0FQQUNJVFlfSU5DUkVNRU5UIDogY3VycmVudFNpemUgPj4gMSk7CisgICAgICAgICAgICBmaW5hbCBpbnQgbmV3Q2FwYWNpdHkgPSB0YXJnZXRDYXAgPiBtaW5DYXBhY2l0eSA/IHRhcmdldENhcCA6IG1pbkNhcGFjaXR5OworICAgICAgICAgICAgZmluYWwgbG9uZ1tdIG5ld1ZhbHVlcyA9IG5ldyBsb25nW0FycmF5VXRpbHMuaWRlYWxMb25nQXJyYXlTaXplKG5ld0NhcGFjaXR5KV07CisgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1WYWx1ZXMsIDAsIG5ld1ZhbHVlcywgMCwgY3VycmVudFNpemUpOworICAgICAgICAgICAgbVZhbHVlcyA9IG5ld1ZhbHVlczsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZXMgYWxsIHZhbHVlcyBmcm9tIHRoaXMgYXJyYXkuCisgICAgICovCisgICAgcHVibGljIHZvaWQgY2xlYXIoKSB7CisgICAgICAgIG1TaXplID0gMDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKyAgICBwdWJsaWMgTG9uZ0FycmF5IGNsb25lKCkgeworICAgICAgICBMb25nQXJyYXkgY2xvbmUgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY2xvbmUgPSAoTG9uZ0FycmF5KSBzdXBlci5jbG9uZSgpOworICAgICAgICAgICAgY2xvbmUubVZhbHVlcyA9IG1WYWx1ZXMuY2xvbmUoKTsKKyAgICAgICAgfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gY25zZSkgeworICAgICAgICAgICAgLyogaWdub3JlICovCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNsb25lOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24gaW4gdGhpcyBhcnJheS4KKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBnZXQoaW50IGluZGV4KSB7CisgICAgICAgIGlmIChpbmRleCA+PSBtU2l6ZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihtU2l6ZSwgaW5kZXgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtVmFsdWVzW2luZGV4XTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGluIHRoaXMKKyAgICAgKiBhcnJheSwgb3IgLTEgaWYgdGhpcyBhcnJheSBkb2VzIG5vdCBjb250YWluIHRoZSB2YWx1ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGluZGV4T2YobG9uZyB2YWx1ZSkgeworICAgICAgICBmaW5hbCBpbnQgbiA9IG1TaXplOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgaWYgKG1WYWx1ZXNbaV0gPT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlcyB0aGUgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBmcm9tIHRoaXMgYXJyYXkuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVtb3ZlKGludCBpbmRleCkgeworICAgICAgICBpZiAoaW5kZXggPj0gbVNpemUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24obVNpemUsIGluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1WYWx1ZXMsIGluZGV4LCBtVmFsdWVzLCBpbmRleCArIDEsIG1TaXplIC0gaW5kZXgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB2YWx1ZXMgaW4gdGhpcyBhcnJheS4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHNpemUoKSB7CisgICAgICAgIHJldHVybiBtU2l6ZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0xvbmdTcGFyc2VMb25nQXJyYXkuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9uZ1NwYXJzZUxvbmdBcnJheS5qYXZhCmluZGV4IDY2NTQ4OTkuLmI4MDczZGQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9uZ1NwYXJzZUxvbmdBcnJheS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9uZ1NwYXJzZUxvbmdBcnJheS5qYXZhCkBAIC0xOCw4ICsxOCw2IEBACiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFycmF5VXRpbHM7CiAKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCiAvKioKICAqIE1hcCBvZiB7QGNvZGUgbG9uZ30gdG8ge0Bjb2RlIGxvbmd9LiBVbmxpa2UgYSBub3JtYWwgYXJyYXkgb2YgbG9uZ3MsIHRoZXJlCiAgKiBjYW4gYmUgZ2FwcyBpbiB0aGUgaW5kaWNlcy4gSXQgaXMgaW50ZW5kZWQgdG8gYmUgbW9yZSBtZW1vcnkgZWZmaWNpZW50IHRoYW4gdXNpbmcgYQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9TbG9nLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL1Nsb2cuamF2YQppbmRleCA3MDc5NWJiLi5iMjVkODBmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC91dGlsL1Nsb2cuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL1Nsb2cuamF2YQpAQCAtMTYsMTEgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnV0aWw7CiAKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5SdW50aW1lSW5pdDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KIC8qKgogICogQGhpZGUKICAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9BY2Nlc3NpYmlsaXR5SW50ZXJhY3Rpb25Db250cm9sbGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0FjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNvbnRyb2xsZXIuamF2YQppbmRleCA0MWQzNzAwLi4zODU5YWQ0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0FjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNvbnRyb2xsZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0FjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNvbnRyb2xsZXIuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUxvbmdBcnJheTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5BdHRhY2hJbmZvOwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNsaWVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CkBAIC04ODEsMTMgKzg4MCwxMiBAQAogICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBwYXJlbnQgPQogICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5jcmVhdGVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8ocGFyZW50VmlydHVhbERlc2NlbmRhbnRJZCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNwYXJzZUxvbmdBcnJheSBjaGlsZE5vZGVJZHMgPSBwYXJlbnQuZ2V0Q2hpbGROb2RlSWRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gY2hpbGROb2RlSWRzLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBwYXJlbnQuZ2V0Q2hpbGRDb3VudCgpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG91dEluZm9zLnNpemUoKSA+PSBNQVhfQUNDRVNTSUJJTElUWV9OT0RFX0lORk9fQkFUQ0hfU0laRSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY2hpbGROb2RlSWQgPSBjaGlsZE5vZGVJZHMuZ2V0KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBjaGlsZE5vZGVJZCA9IHBhcmVudC5nZXRDaGlsZElkKGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZUlkICE9IGN1cnJlbnQuZ2V0U291cmNlTm9kZUlkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgY2hpbGRWaXJ0dWFsRGVzY2VuZGFudElkID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLmdldFZpcnR1YWxEZXNjZW5kYW50SWQoY2hpbGROb2RlSWQpOwpAQCAtOTA2LDE0ICs5MDQsMTMgQEAKIAogICAgICAgICBwcml2YXRlIHZvaWQgcHJlZmV0Y2hEZXNjZW5kYW50c09mVmlydHVhbE5vZGUoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIHJvb3QsCiAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVQcm92aWRlciBwcm92aWRlciwgTGlzdDxBY2Nlc3NpYmlsaXR5Tm9kZUluZm8+IG91dEluZm9zKSB7Ci0gICAgICAgICAgICBTcGFyc2VMb25nQXJyYXkgY2hpbGROb2RlSWRzID0gcm9vdC5nZXRDaGlsZE5vZGVJZHMoKTsKICAgICAgICAgICAgIGZpbmFsIGludCBpbml0aWFsT3V0SW5mb3NTaXplID0gb3V0SW5mb3Muc2l6ZSgpOwotICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBjaGlsZE5vZGVJZHMuc2l6ZSgpOworICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSByb290LmdldENoaWxkQ291bnQoKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKG91dEluZm9zLnNpemUoKSA+PSBNQVhfQUNDRVNTSUJJTElUWV9OT0RFX0lORk9fQkFUQ0hfU0laRSkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY2hpbGROb2RlSWQgPSBjaGlsZE5vZGVJZHMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY2hpbGROb2RlSWQgPSByb290LmdldENoaWxkSWQoaSk7CiAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGNoaWxkID0gcHJvdmlkZXIuY3JlYXRlQWNjZXNzaWJpbGl0eU5vZGVJbmZvKAogICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU5vZGVJbmZvLmdldFZpcnR1YWxEZXNjZW5kYW50SWQoY2hpbGROb2RlSWQpKTsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQgIT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9BY2Nlc3NpYmlsaXR5SXRlcmF0b3JzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0FjY2Vzc2liaWxpdHlJdGVyYXRvcnMuamF2YQppbmRleCAxN2NlNGY2Li5lNTk5MzdkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0FjY2Vzc2liaWxpdHlJdGVyYXRvcnMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0FjY2Vzc2liaWxpdHlJdGVyYXRvcnMuamF2YQpAQCAtMTcsOCArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLnZpZXc7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50Q2FsbGJhY2tzOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogCiBpbXBvcnQgamF2YS50ZXh0LkJyZWFrSXRlcmF0b3I7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0NvbnRleHRUaGVtZVdyYXBwZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvQ29udGV4dFRoZW1lV3JhcHBlci5qYXZhCmluZGV4IDZjNzMzZjkuLjFkZTljMzUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvQ29udGV4dFRoZW1lV3JhcHBlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvQ29udGV4dFRoZW1lV3JhcHBlci5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHRXcmFwcGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwogCiAvKioKICAqIEEgQ29udGV4dFdyYXBwZXIgdGhhdCBhbGxvd3MgeW91IHRvIG1vZGlmeSB0aGUgdGhlbWUgZnJvbSB3aGF0IGlzIGluIHRoZSAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRGlzcGxheS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9EaXNwbGF5LmphdmEKaW5kZXggN2QzMTBhMi4uZDNmNjNiNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9EaXNwbGF5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9EaXNwbGF5LmphdmEKQEAgLTUyOCw2ICs1MjgsNyBAQAogICAgICAqIDkwIGRlZ3JlZXMgY2xvY2t3aXNlIGFuZCB0aHVzIHRoZSByZXR1cm5lZCB2YWx1ZSBoZXJlIHdpbGwgYmUKICAgICAgKiB7QGxpbmsgU3VyZmFjZSNST1RBVElPTl85MCBTdXJmYWNlLlJPVEFUSU9OXzkwfS4KICAgICAgKi8KKyAgICBAU3VyZmFjZS5Sb3RhdGlvbgogICAgIHB1YmxpYyBpbnQgZ2V0Um90YXRpb24oKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgdXBkYXRlRGlzcGxheUluZm9Mb2NrZWQoKTsKQEAgLTU0MCw2ICs1NDEsNyBAQAogICAgICAqIEByZXR1cm4gb3JpZW50YXRpb24gb2YgdGhpcyBkaXNwbGF5LgogICAgICAqLwogICAgIEBEZXByZWNhdGVkCisgICAgQFN1cmZhY2UuUm90YXRpb24KICAgICBwdWJsaWMgaW50IGdldE9yaWVudGF0aW9uKCkgewogICAgICAgICByZXR1cm4gZ2V0Um90YXRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0Rpc3BsYXlJbmZvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0Rpc3BsYXlJbmZvLmphdmEKaW5kZXggODk0NDIwNy4uN2ZkN2I4MyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9EaXNwbGF5SW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRGlzcGxheUluZm8uamF2YQpAQCAtMjAsNyArMjAsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKIAogaW1wb3J0IGxpYmNvcmUudXRpbC5PYmplY3RzOwpAQCAtMTQ0LDYgKzE0Myw3IEBACiAgICAgICogbW9yZSB0aGFuIG9uZSBwaHlzaWNhbCBkaXNwbGF5LgogICAgICAqIDwvcD4KICAgICAgKi8KKyAgICBAU3VyZmFjZS5Sb3RhdGlvbgogICAgIHB1YmxpYyBpbnQgcm90YXRpb247CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRGlzcGxheUxpc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRGlzcGxheUxpc3QuamF2YQppbmRleCA0M2ZkNjI4Li4yODI5MjE1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0Rpc3BsYXlMaXN0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9EaXNwbGF5TGlzdC5qYXZhCkBAIC04NiwxOCArODYsMTUgQEAKICAqCiAgKiA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCI+CiAgKiAgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZURpc3BsYXlMaXN0KCkgewotICogICAgICAgICBIYXJkd2FyZVJlbmRlcmVyIHJlbmRlcmVyID0gZ2V0SGFyZHdhcmVSZW5kZXJlcigpOwotICogICAgICAgICBpZiAocmVuZGVyZXIgIT0gbnVsbCkgewotICogICAgICAgICAgICAgbURpc3BsYXlMaXN0ID0gcmVuZGVyZXIuY3JlYXRlRGlzcGxheUxpc3QoKTsKLSAqICAgICAgICAgICAgIEhhcmR3YXJlQ2FudmFzIGNhbnZhcyA9IG1EaXNwbGF5TGlzdC5zdGFydCh3aWR0aCwgaGVpZ2h0KTsKLSAqICAgICAgICAgICAgIHRyeSB7Ci0gKiAgICAgICAgICAgICAgICAgZm9yIChCaXRtYXAgYiA6IG1CaXRtYXBzKSB7Ci0gKiAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKGIsIDAuMGYsIDAuMGYsIG51bGwpOwotICogICAgICAgICAgICAgICAgICAgICBjYW52YXMudHJhbnNsYXRlKDAuMGYsIGIuZ2V0SGVpZ2h0KCkpOwotICogICAgICAgICAgICAgICAgIH0KLSAqICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gKiAgICAgICAgICAgICAgICAgZGlzcGxheUxpc3QuZW5kKCk7CisgKiAgICAgICAgIG1EaXNwbGF5TGlzdCA9IERpc3BsYXlMaXN0LmNyZWF0ZSgiTXlEaXNwbGF5TGlzdCIpOworICogICAgICAgICBIYXJkd2FyZUNhbnZhcyBjYW52YXMgPSBtRGlzcGxheUxpc3Quc3RhcnQod2lkdGgsIGhlaWdodCk7CisgKiAgICAgICAgIHRyeSB7CisgKiAgICAgICAgICAgICBmb3IgKEJpdG1hcCBiIDogbUJpdG1hcHMpIHsKKyAqICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd0JpdG1hcChiLCAwLjBmLCAwLjBmLCBudWxsKTsKKyAqICAgICAgICAgICAgICAgICBjYW52YXMudHJhbnNsYXRlKDAuMGYsIGIuZ2V0SGVpZ2h0KCkpOwogICogICAgICAgICAgICAgfQorICogICAgICAgICB9IGZpbmFsbHkgeworICogICAgICAgICAgICAgZGlzcGxheUxpc3QuZW5kKCk7CiAgKiAgICAgICAgIH0KICAqICAgICB9CiAgKgpAQCAtMTc3LDYgKzE3NCwyMCBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRVU19EUkVXID0gMHg0OwogCiAgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBkaXNwbGF5IGxpc3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZWNvcmQgYmF0Y2hlcyBvZgorICAgICAqIGRyYXdpbmcgb3BlcmF0aW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBkaXNwbGF5IGxpc3QsIHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLiBNYXkgYmUgbnVsbC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gQSBuZXcgZGlzcGxheSBsaXN0LgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIERpc3BsYXlMaXN0IGNyZWF0ZShTdHJpbmcgbmFtZSkgeworICAgICAgICByZXR1cm4gbmV3IEdMRVMyMERpc3BsYXlMaXN0KG5hbWUpOworICAgIH0KKworICAgIC8qKgogICAgICAqIFN0YXJ0cyByZWNvcmRpbmcgdGhlIGRpc3BsYXkgbGlzdC4gQWxsIG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIHRoZQogICAgICAqIHJldHVybmVkIGNhbnZhcyBhcmUgcmVjb3JkZWQgYW5kIHN0b3JlZCBpbiB0aGlzIGRpc3BsYXkgbGlzdC4KICAgICAgKgpAQCAtNjgzLDQgKzY5NCwxMiBAQAogICAgICAqIEBzZWUgVmlldyNvZmZzZXRUb3BBbmRCb3R0b20oaW50KQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9mZnNldFRvcEFuZEJvdHRvbShmbG9hdCBvZmZzZXQpOworCisgICAgLyoqCisgICAgICogT3V0cHV0cyB0aGUgZGlzcGxheSBsaXN0IHRvIHRoZSBsb2cuIFRoaXMgbWV0aG9kIGV4aXN0cyBmb3IgdXNlIGJ5CisgICAgICogdG9vbHMgdG8gb3V0cHV0IGRpc3BsYXkgbGlzdHMgZm9yIHNlbGVjdGVkIG5vZGVzIHRvIHRoZSBsb2cuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG91dHB1dCgpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9HTEVTMjBDYW52YXMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvR0xFUzIwQ2FudmFzLmphdmEKaW5kZXggYmVlZmMyMS4uYzAyMzM3OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9HTEVTMjBDYW52YXMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0dMRVMyMENhbnZhcy5qYXZhCkBAIC00MDksMTMgKzQwOSw2IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGludCBuR2V0RGlzcGxheUxpc3QoaW50IHJlbmRlcmVyLCBpbnQgZGlzcGxheUxpc3QpOwogCiAgICAgQE92ZXJyaWRlCi0gICAgdm9pZCBvdXRwdXREaXNwbGF5TGlzdChEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCkgewotICAgICAgICBuT3V0cHV0RGlzcGxheUxpc3QobVJlbmRlcmVyLCAoKEdMRVMyMERpc3BsYXlMaXN0KSBkaXNwbGF5TGlzdCkuZ2V0TmF0aXZlRGlzcGxheUxpc3QoKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbk91dHB1dERpc3BsYXlMaXN0KGludCByZW5kZXJlciwgaW50IGRpc3BsYXlMaXN0KTsKLQotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZHJhd0Rpc3BsYXlMaXN0KERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBSZWN0IGRpcnR5LCBpbnQgZmxhZ3MpIHsKICAgICAgICAgcmV0dXJuIG5EcmF3RGlzcGxheUxpc3QobVJlbmRlcmVyLCAoKEdMRVMyMERpc3BsYXlMaXN0KSBkaXNwbGF5TGlzdCkuZ2V0TmF0aXZlRGlzcGxheUxpc3QoKSwKICAgICAgICAgICAgICAgICBkaXJ0eSwgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9HTEVTMjBEaXNwbGF5TGlzdC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9HTEVTMjBEaXNwbGF5TGlzdC5qYXZhCmluZGV4IGM2NTJiYWMuLjU3NGI3YmIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvR0xFUzIwRGlzcGxheUxpc3QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0dMRVMyMERpc3BsYXlMaXN0LmphdmEKQEAgLTQ0MCw2ICs0NDAsMTMgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG91dHB1dCgpIHsKKyAgICAgICAgaWYgKGhhc05hdGl2ZURpc3BsYXlMaXN0KCkpIHsKKyAgICAgICAgICAgIG5PdXRwdXQobUZpbmFsaXplci5tTmF0aXZlRGlzcGxheUxpc3QpOworICAgICAgICB9CisgICAgfQorCiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblJlc2V0KGludCBkaXNwbGF5TGlzdCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbk9mZnNldFRvcEFuZEJvdHRvbShpbnQgZGlzcGxheUxpc3QsIGZsb2F0IG9mZnNldCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbk9mZnNldExlZnRBbmRSaWdodChpbnQgZGlzcGxheUxpc3QsIGZsb2F0IG9mZnNldCk7CkBAIC00ODcsNiArNDk0LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFJvdGF0aW9uWShpbnQgZGlzcGxheUxpc3QpOwogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0UGl2b3RYKGludCBkaXNwbGF5TGlzdCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRQaXZvdFkoaW50IGRpc3BsYXlMaXN0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuT3V0cHV0KGludCBkaXNwbGF5TGlzdCk7CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgICAvLyBGaW5hbGl6YXRpb24KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvR0xSZW5kZXJlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9HTFJlbmRlcmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0MjhiYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvR0xSZW5kZXJlci5qYXZhCkBAIC0wLDAgKzEsMTY2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC52aWV3OworCitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfQUxQSEFfU0laRTsKK2ltcG9ydCBzdGF0aWMgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwLkVHTF9CQURfTkFUSVZFX1dJTkRPVzsKK2ltcG9ydCBzdGF0aWMgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwLkVHTF9CTFVFX1NJWkU7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfQ09ORklHX0NBVkVBVDsKK2ltcG9ydCBzdGF0aWMgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwLkVHTF9ERUZBVUxUX0RJU1BMQVk7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfREVQVEhfU0laRTsKK2ltcG9ydCBzdGF0aWMgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwLkVHTF9EUkFXOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX0dSRUVOX1NJWkU7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfSEVJR0hUOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX05PTkU7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfTk9fQ09OVEVYVDsKK2ltcG9ydCBzdGF0aWMgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwLkVHTF9OT19ESVNQTEFZOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX05PX1NVUkZBQ0U7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfUkVEX1NJWkU7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfUkVOREVSQUJMRV9UWVBFOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX1NBTVBMRVM7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfU0FNUExFX0JVRkZFUlM7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfU1RFTkNJTF9TSVpFOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX1NVQ0NFU1M7CitpbXBvcnQgc3RhdGljIGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMC5FR0xfU1VSRkFDRV9UWVBFOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX1dJRFRIOworaW1wb3J0IHN0YXRpYyBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTAuRUdMX1dJTkRPV19CSVQ7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50Q2FsbGJhY2tzMjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuRUdMMTQ7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xVdGlsczsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5NYW5hZ2VkRUdMQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKK2ltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CitpbXBvcnQgYW5kcm9pZC5vcy5UcmFjZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZS5PdXRPZlJlc291cmNlc0V4Y2VwdGlvbjsKKworaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5nbGVzX2puaS5FR0xJbXBsOworCitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrOworCitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwOworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMTsKK2ltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMQ29uZmlnOworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0xDb250ZXh0OworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0xEaXNwbGF5OworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0xTdXJmYWNlOworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLm9wZW5nbGVzLkdMOworCisvKioKKyAqIEhhcmR3YXJlIHJlbmRlcmVyIHVzaW5nIE9wZW5HTAorICoKKyAqIEBoaWRlCisgKi8KK3B1YmxpYyBjbGFzcyBHTFJlbmRlcmVyIGV4dGVuZHMgSGFyZHdhcmVSZW5kZXJlciB7CisgICAgc3RhdGljIGZpbmFsIGludCBTVVJGQUNFX1NUQVRFX0VSUk9SID0gMDsKKyAgICBzdGF0aWMgZmluYWwgaW50IFNVUkZBQ0VfU1RBVEVfU1VDQ0VTUyA9IDE7CisgICAgc3RhdGljIGZpbmFsIGludCBTVVJGQUNFX1NUQVRFX1VQREFURUQgPSAyOworCisgICAgc3RhdGljIGZpbmFsIGludCBGVU5DVE9SX1BST0NFU1NfREVMQVkgPSA0OworCisgICAgLyoqCisgICAgICogTnVtYmVyIG9mIGZyYW1lcyB0byBwcm9maWxlLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX01BWF9GUkFNRVMgPSAxMjg7CisKKyAgICAvKioKKyAgICAgKiBOdW1iZXIgb2YgZmxvYXRzIHBlciBwcm9maWxlZCBmcmFtZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UID0gMzsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX0RSQVdfTUFSR0lOID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9EUkFXX1dJRFRIID0gMzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBQUk9GSUxFX0RSQVdfQ09MT1JTID0geyAweGNmM2U2NmNjLCAweGNmZGMzOTEyLCAweGNmZTY5ODAwIH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBST0ZJTEVfRFJBV19DVVJSRU5UX0ZSQU1FX0NPTE9SID0gMHhjZjVmYWE0ZDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9EUkFXX1RIUkVTSE9MRF9DT0xPUiA9IDB4ZmY1ZmFhNGQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBST0ZJTEVfRFJBV19USFJFU0hPTERfU1RST0tFX1dJRFRIID0gMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9EUkFXX0RQX1BFUl9NUyA9IDc7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBWSVNVQUxJWkVSUyA9IHsKKyAgICAgICAgICAgIFBST0ZJTEVfUFJPUEVSVFlfVklTVUFMSVpFX0JBUlMsCisgICAgICAgICAgICBQUk9GSUxFX1BST1BFUlRZX1ZJU1VBTElaRV9MSU5FUworICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBPVkVSRFJBVyA9IHsKKyAgICAgICAgICAgIE9WRVJEUkFXX1BST1BFUlRZX1NIT1csCisgICAgICAgICAgICBPVkVSRFJBV19QUk9QRVJUWV9DT1VOVAorICAgIH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE9WRVJEUkFXX1RZUEVfQ09VTlQgPSAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBHTF9WRVJTSU9OID0gMjsKKworICAgIHN0YXRpYyBFR0wxMCBzRWdsOworICAgIHN0YXRpYyBFR0xEaXNwbGF5IHNFZ2xEaXNwbGF5OworICAgIHN0YXRpYyBFR0xDb25maWcgc0VnbENvbmZpZzsKKyAgICBzdGF0aWMgZmluYWwgT2JqZWN0W10gc0VnbExvY2sgPSBuZXcgT2JqZWN0WzBdOworICAgIGludCBtV2lkdGggPSAtMSwgbUhlaWdodCA9IC0xOworCisgICAgc3RhdGljIGZpbmFsIFRocmVhZExvY2FsPE1hbmFnZWRFR0xDb250ZXh0PiBzRWdsQ29udGV4dFN0b3JhZ2UKKyAgICAgICAgICAgID0gbmV3IFRocmVhZExvY2FsPE1hbmFnZWRFR0xDb250ZXh0PigpOworCisgICAgRUdMQ29udGV4dCBtRWdsQ29udGV4dDsKKyAgICBUaHJlYWQgbUVnbFRocmVhZDsKKworICAgIEVHTFN1cmZhY2UgbUVnbFN1cmZhY2U7CisKKyAgICBHTCBtR2w7CisgICAgSGFyZHdhcmVDYW52YXMgbUNhbnZhczsKKworICAgIFN0cmluZyBtTmFtZTsKKworICAgIGxvbmcgbUZyYW1lQ291bnQ7CisgICAgUGFpbnQgbURlYnVnUGFpbnQ7CisKKyAgICBzdGF0aWMgYm9vbGVhbiBzRGlydHlSZWdpb25zOworICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIHNEaXJ0eVJlZ2lvbnNSZXF1ZXN0ZWQ7CisgICAgc3RhdGljIHsKKyAgICAgICAgU3RyaW5nIGRpcnR5UHJvcGVydHkgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldChSRU5ERVJfRElSVFlfUkVHSU9OU19QUk9QRVJUWSwgInRydWUiKTsKKyAgICAgICAgLy9ub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb24sQ29uc3RhbnRDb25kaXRpb25zCisgICAgICAgIHNEaXJ0eVJlZ2lvbnMgPSAidHJ1ZSIuZXF1YWxzSWdub3JlQ2FzZShkaXJ0eVByb3BlcnR5KTsKKyAgICAgICAgc0RpcnR5UmVnaW9uc1JlcXVlc3RlZCA9IHNEaXJ0eVJlZ2lvbnM7CisgICAgfQorCisgICAgYm9vbGVhbiBtRGlydHlSZWdpb25zRW5hYmxlZDsKKyAgICBib29sZWFuIG1VcGRhdGVEaXJ0eVJlZ2lvbnM7CisKKyAgICBib29sZWFuIG1Qcm9maWxlRW5hYmxlZDsKKyAgICBpbnQgbVByb2ZpbGVWaXN1YWxpemVyVHlwZSA9IC0xOworICAgIGZsb2F0W10gbVByb2ZpbGVEYXRhOworICAgIFJlZW50cmFudExvY2sgbVByb2ZpbGVMb2NrOworICAgIGludCBtUHJvZmlsZUN1cnJlbnRGcmFtZSA9IC1QUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlQ7CisKKyAgICBHcmFwaERhdGFQcm92aWRlciBtRGVidWdEYXRhUHJvdmlkZXI7CisgICAgZmxvYXRbXVtdIG1Qcm9maWxlU2hhcGVzOworICAgIFBhaW50IG1Qcm9maWxlUGFpbnQ7CisKKyAgICBib29sZWFuIG1EZWJ1Z0RpcnR5UmVnaW9uczsKKyAgICBpbnQgbURlYnVnT3ZlcmRyYXcgPSAtMTsKKyAgICBIYXJkd2FyZUxheWVyIG1EZWJ1Z092ZXJkcmF3TGF5ZXI7CisgICAgUGFpbnQgbURlYnVnT3ZlcmRyYXdQYWludDsKKworICAgIGZpbmFsIGJvb2xlYW4gbVRyYW5zbHVjZW50OworCisgICAgcHJpdmF0ZSBib29sZWFuIG1EZXN0cm95ZWQ7CisKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVJlZHJhd0NsaXAgPSBuZXcgUmVjdCgpOworCisgICAgcHJpdmF0ZSBmaW5hbCBpbnRbXSBtU3VyZmFjZVNpemUgPSBuZXcgaW50WzJdOworICAgIHByaXZhdGUgZmluYWwgRnVuY3RvcnNSdW5uYWJsZSBtRnVuY3RvcnNSdW5uYWJsZSA9IG5ldyBGdW5jdG9yc1J1bm5hYmxlKCk7CisKKyAgICBwcml2YXRlIGxvbmcgbURyYXdEZWx0YSA9IExvbmcuTUFYX1ZBTFVFOworCisgICAgcHJpdmF0ZSBHTEVTMjBDYW52YXMgbUdsQ2FudmFzOworCisgICAgcHJpdmF0ZSBEaXNwbGF5TWV0cmljcyBtRGlzcGxheU1ldHJpY3M7CisKKyAgICBwcml2YXRlIHN0YXRpYyBFR0xTdXJmYWNlIHNQYnVmZmVyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdFtdIHNQYnVmZmVyTG9jayA9IG5ldyBPYmplY3RbMF07CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBHTFJlbmRlcmVyRWdsQ29udGV4dCBleHRlbmRzIE1hbmFnZWRFR0xDb250ZXh0IHsKKyAgICAgICAgZmluYWwgSGFuZGxlciBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKCk7CisKKyAgICAgICAgcHVibGljIEdMUmVuZGVyZXJFZ2xDb250ZXh0KEVHTENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25UZXJtaW5hdGUoZmluYWwgRUdMQ29udGV4dCBlZ2xDb250ZXh0KSB7CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG8gdGhpcyBvbiB0aGUgY29ycmVjdCB0aHJlYWQuCisgICAgICAgICAgICBpZiAobUhhbmRsZXIuZ2V0TG9vcGVyKCkgIT0gTG9vcGVyLm15TG9vcGVyKCkpIHsKKyAgICAgICAgICAgICAgICBtSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uVGVybWluYXRlKGVnbENvbnRleHQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHNFZ2xMb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKHNFZ2wgPT0gbnVsbCkgcmV0dXJuOworCisgICAgICAgICAgICAgICAgaWYgKEVHTEltcGwuZ2V0SW5pdENvdW50KHNFZ2xEaXNwbGF5KSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHVzZVBidWZmZXJTdXJmYWNlKGVnbENvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBHTEVTMjBDYW52YXMudGVybWluYXRlQ2FjaGVzKCk7CisKKyAgICAgICAgICAgICAgICAgICAgc0VnbC5lZ2xEZXN0cm95Q29udGV4dChzRWdsRGlzcGxheSwgZWdsQ29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIHNFZ2xDb250ZXh0U3RvcmFnZS5zZXQobnVsbCk7CisgICAgICAgICAgICAgICAgICAgIHNFZ2xDb250ZXh0U3RvcmFnZS5yZW1vdmUoKTsKKworICAgICAgICAgICAgICAgICAgICBzRWdsLmVnbERlc3Ryb3lTdXJmYWNlKHNFZ2xEaXNwbGF5LCBzUGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIHNFZ2wuZWdsTWFrZUN1cnJlbnQoc0VnbERpc3BsYXksIEVHTF9OT19TVVJGQUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7CisKKyAgICAgICAgICAgICAgICAgICAgc0VnbC5lZ2xSZWxlYXNlVGhyZWFkKCk7CisgICAgICAgICAgICAgICAgICAgIHNFZ2wuZWdsVGVybWluYXRlKHNFZ2xEaXNwbGF5KTsKKworICAgICAgICAgICAgICAgICAgICBzRWdsID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgc0VnbERpc3BsYXkgPSBudWxsOworICAgICAgICAgICAgICAgICAgICBzRWdsQ29uZmlnID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgc1BidWZmZXIgPSBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEhhcmR3YXJlQ2FudmFzIGNyZWF0ZUNhbnZhcygpIHsKKyAgICAgICAgcmV0dXJuIG1HbENhbnZhcyA9IG5ldyBHTEVTMjBDYW52YXMobVRyYW5zbHVjZW50KTsKKyAgICB9CisKKyAgICBNYW5hZ2VkRUdMQ29udGV4dCBjcmVhdGVNYW5hZ2VkQ29udGV4dChFR0xDb250ZXh0IGVnbENvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBHTFJlbmRlcmVyRWdsQ29udGV4dChtRWdsQ29udGV4dCk7CisgICAgfQorCisgICAgaW50W10gZ2V0Q29uZmlnKGJvb2xlYW4gZGlydHlSZWdpb25zKSB7CisgICAgICAgIC8vbm9pbnNwZWN0aW9uIFBvaW50bGVzc0Jvb2xlYW5FeHByZXNzaW9uLENvbnN0YW50Q29uZGl0aW9ucworICAgICAgICBmaW5hbCBpbnQgc3RlbmNpbFNpemUgPSBHTEVTMjBDYW52YXMuZ2V0U3RlbmNpbFNpemUoKTsKKyAgICAgICAgZmluYWwgaW50IHN3YXBCZWhhdmlvciA9IGRpcnR5UmVnaW9ucyA/IEVHTDE0LkVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQgOiAwOworCisgICAgICAgIHJldHVybiBuZXcgaW50W10geworICAgICAgICAgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTDE0LkVHTF9PUEVOR0xfRVMyX0JJVCwKKyAgICAgICAgICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAgICAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAgICAgICAgICAgRUdMX0JMVUVfU0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfREVQVEhfU0laRSwgMCwKKyAgICAgICAgICAgICAgICBFR0xfQ09ORklHX0NBVkVBVCwgRUdMX05PTkUsCisgICAgICAgICAgICAgICAgRUdMX1NURU5DSUxfU0laRSwgc3RlbmNpbFNpemUsCisgICAgICAgICAgICAgICAgRUdMX1NVUkZBQ0VfVFlQRSwgRUdMX1dJTkRPV19CSVQgfCBzd2FwQmVoYXZpb3IsCisgICAgICAgICAgICAgICAgRUdMX05PTkUKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICB2b2lkIGluaXRDYWNoZXMoKSB7CisgICAgICAgIGlmIChHTEVTMjBDYW52YXMuaW5pdENhY2hlcygpKSB7CisgICAgICAgICAgICAvLyBDYWNoZXMgd2VyZSAocmUpaW5pdGlhbGl6ZWQsIHJlYmluZCBhdGxhcworICAgICAgICAgICAgaW5pdEF0bGFzKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGluaXRBdGxhcygpIHsKKyAgICAgICAgSUJpbmRlciBiaW5kZXIgPSBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKCJhc3NldGF0bGFzIik7CisgICAgICAgIGlmIChiaW5kZXIgPT0gbnVsbCkgcmV0dXJuOworCisgICAgICAgIElBc3NldEF0bGFzIGF0bGFzID0gSUFzc2V0QXRsYXMuU3R1Yi5hc0ludGVyZmFjZShiaW5kZXIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKGF0bGFzLmlzQ29tcGF0aWJsZShhbmRyb2lkLm9zLlByb2Nlc3MubXlQcGlkKCkpKSB7CisgICAgICAgICAgICAgICAgR3JhcGhpY0J1ZmZlciBidWZmZXIgPSBhdGxhcy5nZXRCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50W10gbWFwID0gYXRsYXMuZ2V0TWFwKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXAgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgR0xFUzIwQ2FudmFzLmluaXRBdGxhcyhidWZmZXIsIG1hcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgSUFzc2V0QXRsYXMgaXMgbm90IHRoZSBzYW1lIGNsYXNzIGFzIHRoZSBJQmluZGVyCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGFyZSB1c2luZyBhIHJlbW90ZSBzZXJ2aWNlIGFuZCB3ZSBjYW4gc2FmZWx5CisgICAgICAgICAgICAgICAgICAgIC8vIGRlc3Ryb3kgdGhlIGdyYXBoaWMgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgIGlmIChhdGxhcy5nZXRDbGFzcygpICE9IGJpbmRlci5nZXRDbGFzcygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuZGVzdHJveSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIkNvdWxkIG5vdCBhY3F1aXJlIGF0bGFzIiwgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sZWFuIGNhbkRyYXcoKSB7CisgICAgICAgIHJldHVybiBtR2wgIT0gbnVsbCAmJiBtQ2FudmFzICE9IG51bGwgJiYgbUdsQ2FudmFzICE9IG51bGw7CisgICAgfQorCisgICAgaW50IG9uUHJlRHJhdyhSZWN0IGRpcnR5KSB7CisgICAgICAgIHJldHVybiBtR2xDYW52YXMub25QcmVEcmF3KGRpcnR5KTsKKyAgICB9CisKKyAgICB2b2lkIG9uUG9zdERyYXcoKSB7CisgICAgICAgIG1HbENhbnZhcy5vblBvc3REcmF3KCk7CisgICAgfQorCisgICAgdm9pZCBkcmF3UHJvZmlsZURhdGEoVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8pIHsKKyAgICAgICAgaWYgKG1EZWJ1Z0RhdGFQcm92aWRlciAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBHcmFwaERhdGFQcm92aWRlciBwcm92aWRlciA9IG1EZWJ1Z0RhdGFQcm92aWRlcjsKKyAgICAgICAgICAgIGluaXRQcm9maWxlRHJhd0RhdGEoYXR0YWNoSW5mbywgcHJvdmlkZXIpOworCisgICAgICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gcHJvdmlkZXIuZ2V0VmVydGljYWxVbml0U2l6ZSgpOworICAgICAgICAgICAgZmluYWwgaW50IG1hcmdpbiA9IHByb3ZpZGVyLmdldEhvcml6b250YVVuaXRNYXJnaW4oKTsKKyAgICAgICAgICAgIGZpbmFsIGludCB3aWR0aCA9IHByb3ZpZGVyLmdldEhvcml6b250YWxVbml0U2l6ZSgpOworCisgICAgICAgICAgICBpbnQgeCA9IDA7CisgICAgICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICAgICAgaW50IGN1cnJlbnQgPSAwOworCisgICAgICAgICAgICBmaW5hbCBmbG9hdFtdIGRhdGEgPSBwcm92aWRlci5nZXREYXRhKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgZWxlbWVudENvdW50ID0gcHJvdmlkZXIuZ2V0RWxlbWVudENvdW50KCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgZ3JhcGhUeXBlID0gcHJvdmlkZXIuZ2V0R3JhcGhUeXBlKCk7CisKKyAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0gcHJvdmlkZXIuZ2V0RnJhbWVDb3VudCgpICogZWxlbWVudENvdW50OworICAgICAgICAgICAgaWYgKGdyYXBoVHlwZSA9PSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0xJTkVTKSB7CisgICAgICAgICAgICAgICAgdG90YWxDb3VudCAtPSBlbGVtZW50Q291bnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxDb3VudDsgaSArPSBlbGVtZW50Q291bnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YVtpXSA8IDAuMGYpIGJyZWFrOworCisgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gY291bnQgKiA0OworICAgICAgICAgICAgICAgIGlmIChpID09IHByb3ZpZGVyLmdldEN1cnJlbnRGcmFtZSgpICogZWxlbWVudENvdW50KSBjdXJyZW50ID0gaW5kZXg7CisKKyAgICAgICAgICAgICAgICB4ICs9IG1hcmdpbjsKKyAgICAgICAgICAgICAgICBpbnQgeDIgPSB4ICsgd2lkdGg7CisKKyAgICAgICAgICAgICAgICBpbnQgeTIgPSBtSGVpZ2h0OworICAgICAgICAgICAgICAgIGludCB5MSA9IChpbnQpICh5MiAtIGRhdGFbaV0gKiBoZWlnaHQpOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChncmFwaFR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0JBUlM6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZWxlbWVudENvdW50OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBNaXNtYXRjaGVkUmVhZEFuZFdyaXRlT2ZBcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0W10gciA9IG1Qcm9maWxlU2hhcGVzW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbaW5kZXhdID0geDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4ICsgMV0gPSB5MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4ICsgMl0gPSB4MjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4ICsgM10gPSB5MjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyID0geTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBlbGVtZW50Q291bnQgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gKGludCkgKHkyIC0gZGF0YVtpICsgaiArIDFdICogaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgR3JhcGhEYXRhUHJvdmlkZXIuR1JBUEhfVFlQRV9MSU5FUzogeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBlbGVtZW50Q291bnQ7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIE1pc21hdGNoZWRSZWFkQW5kV3JpdGVPZkFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgZmxvYXRbXSByID0gbVByb2ZpbGVTaGFwZXNbal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleF0gPSAoeCArIHgyKSAqIDAuNWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleCArIDFdID0gaW5kZXggPT0gMCA/IHkxIDogcltpbmRleCAtIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbaW5kZXggKyAyXSA9IHJbaW5kZXhdICsgd2lkdGg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleCArIDNdID0geTE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MiA9IHkxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgZWxlbWVudENvdW50IC0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSA9IChpbnQpICh5MiAtIGRhdGFbaSArIGogKyAxXSAqIGhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICAgICAgeCArPSB3aWR0aDsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB4ICs9IG1hcmdpbjsKKworICAgICAgICAgICAgZHJhd0dyYXBoKGdyYXBoVHlwZSwgY291bnQpOworICAgICAgICAgICAgZHJhd0N1cnJlbnRGcmFtZShncmFwaFR5cGUsIGN1cnJlbnQpOworICAgICAgICAgICAgZHJhd1RocmVzaG9sZCh4LCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRyYXdHcmFwaChpbnQgZ3JhcGhUeXBlLCBpbnQgY291bnQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtUHJvZmlsZVNoYXBlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgbURlYnVnRGF0YVByb3ZpZGVyLnNldHVwR3JhcGhQYWludChtUHJvZmlsZVBhaW50LCBpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoZ3JhcGhUeXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0JBUlM6CisgICAgICAgICAgICAgICAgICAgIG1HbENhbnZhcy5kcmF3UmVjdHMobVByb2ZpbGVTaGFwZXNbaV0sIGNvdW50ICogNCwgbVByb2ZpbGVQYWludCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgR3JhcGhEYXRhUHJvdmlkZXIuR1JBUEhfVFlQRV9MSU5FUzoKKyAgICAgICAgICAgICAgICAgICAgbUdsQ2FudmFzLmRyYXdMaW5lcyhtUHJvZmlsZVNoYXBlc1tpXSwgMCwgY291bnQgKiA0LCBtUHJvZmlsZVBhaW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZHJhd0N1cnJlbnRGcmFtZShpbnQgZ3JhcGhUeXBlLCBpbnQgaW5kZXgpIHsKKyAgICAgICAgaWYgKGluZGV4ID49IDApIHsKKyAgICAgICAgICAgIG1EZWJ1Z0RhdGFQcm92aWRlci5zZXR1cEN1cnJlbnRGcmFtZVBhaW50KG1Qcm9maWxlUGFpbnQpOworICAgICAgICAgICAgc3dpdGNoIChncmFwaFR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfQkFSUzoKKyAgICAgICAgICAgICAgICAgICAgbUdsQ2FudmFzLmRyYXdSZWN0KG1Qcm9maWxlU2hhcGVzWzJdW2luZGV4XSwgbVByb2ZpbGVTaGFwZXNbMl1baW5kZXggKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZVNoYXBlc1syXVtpbmRleCArIDJdLCBtUHJvZmlsZVNoYXBlc1swXVtpbmRleCArIDNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlUGFpbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfTElORVM6CisgICAgICAgICAgICAgICAgICAgIG1HbENhbnZhcy5kcmF3TGluZShtUHJvZmlsZVNoYXBlc1syXVtpbmRleF0sIG1Qcm9maWxlU2hhcGVzWzJdW2luZGV4ICsgMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVTaGFwZXNbMl1baW5kZXhdLCBtSGVpZ2h0LCBtUHJvZmlsZVBhaW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZHJhd1RocmVzaG9sZChpbnQgeCwgaW50IGhlaWdodCkgeworICAgICAgICBmbG9hdCB0aHJlc2hvbGQgPSBtRGVidWdEYXRhUHJvdmlkZXIuZ2V0VGhyZXNob2xkKCk7CisgICAgICAgIGlmICh0aHJlc2hvbGQgPiAwLjBmKSB7CisgICAgICAgICAgICBtRGVidWdEYXRhUHJvdmlkZXIuc2V0dXBUaHJlc2hvbGRQYWludChtUHJvZmlsZVBhaW50KTsKKyAgICAgICAgICAgIGludCB5ID0gKGludCkgKG1IZWlnaHQgLSB0aHJlc2hvbGQgKiBoZWlnaHQpOworICAgICAgICAgICAgbUdsQ2FudmFzLmRyYXdMaW5lKDAuMGYsIHksIHgsIHksIG1Qcm9maWxlUGFpbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGluaXRQcm9maWxlRHJhd0RhdGEoVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8sIEdyYXBoRGF0YVByb3ZpZGVyIHByb3ZpZGVyKSB7CisgICAgICAgIGlmIChtUHJvZmlsZVNoYXBlcyA9PSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgZWxlbWVudENvdW50ID0gcHJvdmlkZXIuZ2V0RWxlbWVudENvdW50KCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgZnJhbWVDb3VudCA9IHByb3ZpZGVyLmdldEZyYW1lQ291bnQoKTsKKworICAgICAgICAgICAgbVByb2ZpbGVTaGFwZXMgPSBuZXcgZmxvYXRbZWxlbWVudENvdW50XVtdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50Q291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIG1Qcm9maWxlU2hhcGVzW2ldID0gbmV3IGZsb2F0W2ZyYW1lQ291bnQgKiA0XTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVByb2ZpbGVQYWludCA9IG5ldyBQYWludCgpOworICAgICAgICB9CisKKyAgICAgICAgbVByb2ZpbGVQYWludC5yZXNldCgpOworICAgICAgICBpZiAocHJvdmlkZXIuZ2V0R3JhcGhUeXBlKCkgPT0gR3JhcGhEYXRhUHJvdmlkZXIuR1JBUEhfVFlQRV9MSU5FUykgeworICAgICAgICAgICAgbVByb2ZpbGVQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobURpc3BsYXlNZXRyaWNzID09IG51bGwpIHsKKyAgICAgICAgICAgIG1EaXNwbGF5TWV0cmljcyA9IG5ldyBEaXNwbGF5TWV0cmljcygpOworICAgICAgICB9CisKKyAgICAgICAgYXR0YWNoSW5mby5tRGlzcGxheS5nZXRNZXRyaWNzKG1EaXNwbGF5TWV0cmljcyk7CisgICAgICAgIHByb3ZpZGVyLnByZXBhcmUobURpc3BsYXlNZXRyaWNzKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGRlc3Ryb3koYm9vbGVhbiBmdWxsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoZnVsbCAmJiBtQ2FudmFzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtQ2FudmFzID0gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQoKSB8fCBtRGVzdHJveWVkKSB7CisgICAgICAgICAgICAgICAgc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZXN0cm95U3VyZmFjZSgpOworICAgICAgICAgICAgc2V0RW5hYmxlZChmYWxzZSk7CisKKyAgICAgICAgICAgIG1EZXN0cm95ZWQgPSB0cnVlOworICAgICAgICAgICAgbUdsID0gbnVsbDsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmIChmdWxsICYmIG1HbENhbnZhcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUdsQ2FudmFzID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgcHVzaExheWVyVXBkYXRlKEhhcmR3YXJlTGF5ZXIgbGF5ZXIpIHsKKyAgICAgICAgbUdsQ2FudmFzLnB1c2hMYXllclVwZGF0ZShsYXllcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBjYW5jZWxMYXllclVwZGF0ZShIYXJkd2FyZUxheWVyIGxheWVyKSB7CisgICAgICAgIG1HbENhbnZhcy5jYW5jZWxMYXllclVwZGF0ZShsYXllcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBmbHVzaExheWVyVXBkYXRlcygpIHsKKyAgICAgICAgbUdsQ2FudmFzLmZsdXNoTGF5ZXJVcGRhdGVzKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgSGFyZHdhcmVMYXllciBjcmVhdGVIYXJkd2FyZUxheWVyKGJvb2xlYW4gaXNPcGFxdWUpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBHTEVTMjBUZXh0dXJlTGF5ZXIoaXNPcGFxdWUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBIYXJkd2FyZUxheWVyIGNyZWF0ZUhhcmR3YXJlTGF5ZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sZWFuIGlzT3BhcXVlKSB7CisgICAgICAgIHJldHVybiBuZXcgR0xFUzIwUmVuZGVyTGF5ZXIod2lkdGgsIGhlaWdodCwgaXNPcGFxdWUpOworICAgIH0KKworICAgIHZvaWQgY291bnRPdmVyZHJhdyhIYXJkd2FyZUNhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgKChHTEVTMjBDYW52YXMpIGNhbnZhcykuc2V0Q291bnRPdmVyZHJhd0VuYWJsZWQodHJ1ZSk7CisgICAgfQorCisgICAgZmxvYXQgZ2V0T3ZlcmRyYXcoSGFyZHdhcmVDYW52YXMgY2FudmFzKSB7CisgICAgICAgIHJldHVybiAoKEdMRVMyMENhbnZhcykgY2FudmFzKS5nZXRPdmVyZHJhdygpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdXJmYWNlVGV4dHVyZSBjcmVhdGVTdXJmYWNlVGV4dHVyZShIYXJkd2FyZUxheWVyIGxheWVyKSB7CisgICAgICAgIHJldHVybiAoKEdMRVMyMFRleHR1cmVMYXllcikgbGF5ZXIpLmdldFN1cmZhY2VUZXh0dXJlKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBzZXRTdXJmYWNlVGV4dHVyZShIYXJkd2FyZUxheWVyIGxheWVyLCBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSkgeworICAgICAgICAoKEdMRVMyMFRleHR1cmVMYXllcikgbGF5ZXIpLnNldFN1cmZhY2VUZXh0dXJlKHN1cmZhY2VUZXh0dXJlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBib29sZWFuIHNhZmVseVJ1bihSdW5uYWJsZSBhY3Rpb24pIHsKKyAgICAgICAgYm9vbGVhbiBuZWVkc0NvbnRleHQgPSAhaXNFbmFibGVkKCkgfHwgY2hlY2tSZW5kZXJDb250ZXh0KCkgPT0gU1VSRkFDRV9TVEFURV9FUlJPUjsKKworICAgICAgICBpZiAobmVlZHNDb250ZXh0KSB7CisgICAgICAgICAgICBHTFJlbmRlcmVyRWdsQ29udGV4dCBtYW5hZ2VkQ29udGV4dCA9CisgICAgICAgICAgICAgICAgICAgIChHTFJlbmRlcmVyRWdsQ29udGV4dCkgc0VnbENvbnRleHRTdG9yYWdlLmdldCgpOworICAgICAgICAgICAgaWYgKG1hbmFnZWRDb250ZXh0ID09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVzZVBidWZmZXJTdXJmYWNlKG1hbmFnZWRDb250ZXh0LmdldENvbnRleHQoKSk7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgYWN0aW9uLnJ1bigpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKG5lZWRzQ29udGV4dCkgeworICAgICAgICAgICAgICAgIHNFZ2wuZWdsTWFrZUN1cnJlbnQoc0VnbERpc3BsYXksIEVHTF9OT19TVVJGQUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZGVzdHJveUxheWVycyhmaW5hbCBWaWV3IHZpZXcpIHsKKyAgICAgICAgaWYgKHZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgc2FmZWx5UnVuKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtQ2FudmFzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1DYW52YXMuY2xlYXJMYXllclVwZGF0ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZXN0cm95SGFyZHdhcmVMYXllcih2aWV3KTsKKyAgICAgICAgICAgICAgICAgICAgR0xFUzIwQ2FudmFzLmZsdXNoQ2FjaGVzKEdMRVMyMENhbnZhcy5GTFVTSF9DQUNIRVNfTEFZRVJTKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZGVzdHJveUhhcmR3YXJlTGF5ZXIoVmlldyB2aWV3KSB7CisgICAgICAgIHZpZXcuZGVzdHJveUxheWVyKHRydWUpOworCisgICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7CisgICAgICAgICAgICBWaWV3R3JvdXAgZ3JvdXAgPSAoVmlld0dyb3VwKSB2aWV3OworCisgICAgICAgICAgICBpbnQgY291bnQgPSBncm91cC5nZXRDaGlsZENvdW50KCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBkZXN0cm95SGFyZHdhcmVMYXllcihncm91cC5nZXRDaGlsZEF0KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZGVzdHJveUhhcmR3YXJlUmVzb3VyY2VzKGZpbmFsIFZpZXcgdmlldykgeworICAgICAgICBpZiAodmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICBzYWZlbHlSdW4obmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1DYW52YXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUNhbnZhcy5jbGVhckxheWVyVXBkYXRlcygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lSZXNvdXJjZXModmlldyk7CisgICAgICAgICAgICAgICAgICAgIEdMRVMyMENhbnZhcy5mbHVzaENhY2hlcyhHTEVTMjBDYW52YXMuRkxVU0hfQ0FDSEVTX0xBWUVSUyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRlc3Ryb3lSZXNvdXJjZXMoVmlldyB2aWV3KSB7CisgICAgICAgIHZpZXcuZGVzdHJveUhhcmR3YXJlUmVzb3VyY2VzKCk7CisKKyAgICAgICAgaWYgKHZpZXcgaW5zdGFuY2VvZiBWaWV3R3JvdXApIHsKKyAgICAgICAgICAgIFZpZXdHcm91cCBncm91cCA9IChWaWV3R3JvdXApIHZpZXc7CisKKyAgICAgICAgICAgIGludCBjb3VudCA9IGdyb3VwLmdldENoaWxkQ291bnQoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGRlc3Ryb3lSZXNvdXJjZXMoZ3JvdXAuZ2V0Q2hpbGRBdChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBzdGFydFRyaW1NZW1vcnkoaW50IGxldmVsKSB7CisgICAgICAgIGlmIChzRWdsID09IG51bGwgfHwgc0VnbENvbmZpZyA9PSBudWxsKSByZXR1cm47CisKKyAgICAgICAgR0xSZW5kZXJlckVnbENvbnRleHQgbWFuYWdlZENvbnRleHQgPQorICAgICAgICAgICAgICAgIChHTFJlbmRlcmVyRWdsQ29udGV4dCkgc0VnbENvbnRleHRTdG9yYWdlLmdldCgpOworICAgICAgICAvLyBXZSBkbyBub3QgaGF2ZSBPcGVuR0wgb2JqZWN0cworICAgICAgICBpZiAobWFuYWdlZENvbnRleHQgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdXNlUGJ1ZmZlclN1cmZhY2UobWFuYWdlZENvbnRleHQuZ2V0Q29udGV4dCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZXZlbCA+PSBDb21wb25lbnRDYWxsYmFja3MyLlRSSU1fTUVNT1JZX0NPTVBMRVRFKSB7CisgICAgICAgICAgICBHTEVTMjBDYW52YXMuZmx1c2hDYWNoZXMoR0xFUzIwQ2FudmFzLkZMVVNIX0NBQ0hFU19GVUxMKTsKKyAgICAgICAgfSBlbHNlIGlmIChsZXZlbCA+PSBDb21wb25lbnRDYWxsYmFja3MyLlRSSU1fTUVNT1JZX1VJX0hJRERFTikgeworICAgICAgICAgICAgR0xFUzIwQ2FudmFzLmZsdXNoQ2FjaGVzKEdMRVMyMENhbnZhcy5GTFVTSF9DQUNIRVNfTU9ERVJBVEUpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZW5kVHJpbU1lbW9yeSgpIHsKKyAgICAgICAgaWYgKHNFZ2wgIT0gbnVsbCAmJiBzRWdsRGlzcGxheSAhPSBudWxsKSB7CisgICAgICAgICAgICBzRWdsLmVnbE1ha2VDdXJyZW50KHNFZ2xEaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdXNlUGJ1ZmZlclN1cmZhY2UoRUdMQ29udGV4dCBlZ2xDb250ZXh0KSB7CisgICAgICAgIHN5bmNocm9uaXplZCAoc1BidWZmZXJMb2NrKSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgMXgxIHBidWZmZXIgc28gd2UgaGF2ZSBhIGNvbnRleHQKKyAgICAgICAgICAgIC8vIHRvIGNsZWFyIG91ciBPcGVuR0wgb2JqZWN0cworICAgICAgICAgICAgaWYgKHNQYnVmZmVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzUGJ1ZmZlciA9IHNFZ2wuZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2Uoc0VnbERpc3BsYXksIHNFZ2xDb25maWcsIG5ldyBpbnRbXSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFR0xfV0lEVEgsIDEsIEVHTF9IRUlHSFQsIDEsIEVHTF9OT05FCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc0VnbC5lZ2xNYWtlQ3VycmVudChzRWdsRGlzcGxheSwgc1BidWZmZXIsIHNQYnVmZmVyLCBlZ2xDb250ZXh0KTsKKyAgICB9CisKKyAgICBHTFJlbmRlcmVyKGJvb2xlYW4gdHJhbnNsdWNlbnQpIHsKKyAgICAgICAgbVRyYW5zbHVjZW50ID0gdHJhbnNsdWNlbnQ7CisKKyAgICAgICAgbG9hZFN5c3RlbVByb3BlcnRpZXMoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBib29sZWFuIGxvYWRTeXN0ZW1Qcm9wZXJ0aWVzKCkgeworICAgICAgICBib29sZWFuIHZhbHVlOworICAgICAgICBib29sZWFuIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICBTdHJpbmcgcHJvZmlsaW5nID0gU3lzdGVtUHJvcGVydGllcy5nZXQoUFJPRklMRV9QUk9QRVJUWSk7CisgICAgICAgIGludCBncmFwaFR5cGUgPSBzZWFyY2goVklTVUFMSVpFUlMsIHByb2ZpbGluZyk7CisgICAgICAgIHZhbHVlID0gZ3JhcGhUeXBlID49IDA7CisKKyAgICAgICAgaWYgKGdyYXBoVHlwZSAhPSBtUHJvZmlsZVZpc3VhbGl6ZXJUeXBlKSB7CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1Qcm9maWxlVmlzdWFsaXplclR5cGUgPSBncmFwaFR5cGU7CisKKyAgICAgICAgICAgIG1Qcm9maWxlU2hhcGVzID0gbnVsbDsKKyAgICAgICAgICAgIG1Qcm9maWxlUGFpbnQgPSBudWxsOworCisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICBtRGVidWdEYXRhUHJvdmlkZXIgPSBuZXcgRHJhd1BlcmZvcm1hbmNlRGF0YVByb3ZpZGVyKGdyYXBoVHlwZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1EZWJ1Z0RhdGFQcm92aWRlciA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBvbi1zY3JlZW4gcHJvZmlsaW5nIGlzIG5vdCBlbmFibGVkLCB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIKKyAgICAgICAgLy8gY29uc29sZSBwcm9maWxpbmcgb25seSBpcyBlbmFibGVkCisgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgIHZhbHVlID0gQm9vbGVhbi5wYXJzZUJvb2xlYW4ocHJvZmlsaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YWx1ZSAhPSBtUHJvZmlsZUVuYWJsZWQpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgbVByb2ZpbGVFbmFibGVkID0gdmFsdWU7CisKKyAgICAgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBMb2cuZChMT0dfVEFHLCAiUHJvZmlsaW5nIGhhcmR3YXJlIHJlbmRlcmVyIik7CisKKyAgICAgICAgICAgICAgICBpbnQgbWF4UHJvZmlsZUZyYW1lcyA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0SW50KFBST0ZJTEVfTUFYRlJBTUVTX1BST1BFUlRZLAorICAgICAgICAgICAgICAgICAgICAgICAgUFJPRklMRV9NQVhfRlJBTUVTKTsKKyAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGEgPSBuZXcgZmxvYXRbbWF4UHJvZmlsZUZyYW1lcyAqIFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVF07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtUHJvZmlsZURhdGEubGVuZ3RoOyBpICs9IFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVCkgeworICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGFbaV0gPSBtUHJvZmlsZURhdGFbaSArIDFdID0gbVByb2ZpbGVEYXRhW2kgKyAyXSA9IC0xOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1Qcm9maWxlTG9jayA9IG5ldyBSZWVudHJhbnRMb2NrKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1Qcm9maWxlRGF0YSA9IG51bGw7CisgICAgICAgICAgICAgICAgbVByb2ZpbGVMb2NrID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtUHJvZmlsZVZpc3VhbGl6ZXJUeXBlID0gLTE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1Qcm9maWxlQ3VycmVudEZyYW1lID0gLVBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVDsKKyAgICAgICAgfQorCisgICAgICAgIHZhbHVlID0gU3lzdGVtUHJvcGVydGllcy5nZXRCb29sZWFuKERFQlVHX0RJUlRZX1JFR0lPTlNfUFJPUEVSVFksIGZhbHNlKTsKKyAgICAgICAgaWYgKHZhbHVlICE9IG1EZWJ1Z0RpcnR5UmVnaW9ucykgeworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICBtRGVidWdEaXJ0eVJlZ2lvbnMgPSB2YWx1ZTsKKworICAgICAgICAgICAgaWYgKG1EZWJ1Z0RpcnR5UmVnaW9ucykgeworICAgICAgICAgICAgICAgIExvZy5kKExPR19UQUcsICJEZWJ1Z2dpbmcgZGlydHkgcmVnaW9ucyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIG92ZXJkcmF3ID0gU3lzdGVtUHJvcGVydGllcy5nZXQoSGFyZHdhcmVSZW5kZXJlci5ERUJVR19PVkVSRFJBV19QUk9QRVJUWSk7CisgICAgICAgIGludCBkZWJ1Z092ZXJkcmF3ID0gc2VhcmNoKE9WRVJEUkFXLCBvdmVyZHJhdyk7CisgICAgICAgIGlmIChkZWJ1Z092ZXJkcmF3ICE9IG1EZWJ1Z092ZXJkcmF3KSB7CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3ID0gZGVidWdPdmVyZHJhdzsKKworICAgICAgICAgICAgaWYgKG1EZWJ1Z092ZXJkcmF3ICE9IE9WRVJEUkFXX1RZUEVfQ09VTlQpIHsKKyAgICAgICAgICAgICAgICBpZiAobURlYnVnT3ZlcmRyYXdMYXllciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3TGF5ZXIuZGVzdHJveSgpOworICAgICAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd0xheWVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdQYWludCA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvYWRQcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHNlYXJjaChTdHJpbmdbXSB2YWx1ZXMsIFN0cmluZyB2YWx1ZSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHZhbHVlc1tpXS5lcXVhbHModmFsdWUpKSByZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBkdW1wR2Z4SW5mbyhQcmludFdyaXRlciBwdykgeworICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7CisgICAgICAgICAgICBwdy5wcmludGYoIlxuXHREcmF3XHRQcm9jZXNzXHRFeGVjdXRlXG4iKTsKKworICAgICAgICAgICAgbVByb2ZpbGVMb2NrLmxvY2soKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtUHJvZmlsZURhdGEubGVuZ3RoOyBpICs9IFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobVByb2ZpbGVEYXRhW2ldIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRmKCJcdCUzLjJmXHQlMy4yZlx0JTMuMmZcbiIsIG1Qcm9maWxlRGF0YVtpXSwgbVByb2ZpbGVEYXRhW2kgKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGFbaSArIDJdKTsKKyAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVEYXRhW2ldID0gbVByb2ZpbGVEYXRhW2kgKyAxXSA9IG1Qcm9maWxlRGF0YVtpICsgMl0gPSAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbVByb2ZpbGVDdXJyZW50RnJhbWUgPSBtUHJvZmlsZURhdGEubGVuZ3RoOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBtUHJvZmlsZUxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBsb25nIGdldEZyYW1lQ291bnQoKSB7CisgICAgICAgIHJldHVybiBtRnJhbWVDb3VudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHJlbmRlcmVyIGluc3RhbmNlIGNhbiB0cmFjayBhbmQgdXBkYXRlIGRpcnR5IHJlZ2lvbnMuCisgICAgICovCisgICAgYm9vbGVhbiBoYXNEaXJ0eVJlZ2lvbnMoKSB7CisgICAgICAgIHJldHVybiBtRGlydHlSZWdpb25zRW5hYmxlZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgZm9yIE9wZW5HTCBlcnJvcnMuIElmIGFuIGVycm9yIGhhcyBvY2N1cmVkLCB7QGxpbmsgI2Rlc3Ryb3koYm9vbGVhbil9CisgICAgICogaXMgaW52b2tlZCBhbmQgdGhlIHJlcXVlc3RlZCBmbGFnIGlzIHR1cm5lZCBvZmYuIFRoZSBlcnJvciBjb2RlIGlzCisgICAgICogYWxzbyBsb2dnZWQgYXMgYSB3YXJuaW5nLgorICAgICAqLworICAgIHZvaWQgY2hlY2tFZ2xFcnJvcnMoKSB7CisgICAgICAgIGlmIChpc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgY2hlY2tFZ2xFcnJvcnNGb3JjZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjaGVja0VnbEVycm9yc0ZvcmNlZCgpIHsKKyAgICAgICAgaW50IGVycm9yID0gc0VnbC5lZ2xHZXRFcnJvcigpOworICAgICAgICBpZiAoZXJyb3IgIT0gRUdMX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIC8vIHNvbWV0aGluZyBiYWQgaGFzIGhhcHBlbmVkIHJldmVydCB0bworICAgICAgICAgICAgLy8gbm9ybWFsIHJlbmRlcmluZy4KKyAgICAgICAgICAgIExvZy53KExPR19UQUcsICJFR0wgZXJyb3I6ICIgKyBHTFV0aWxzLmdldEVHTEVycm9yU3RyaW5nKGVycm9yKSk7CisgICAgICAgICAgICBmYWxsYmFjayhlcnJvciAhPSBFR0wxMS5FR0xfQ09OVEVYVF9MT1NUKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBmYWxsYmFjayhib29sZWFuIGZhbGxiYWNrKSB7CisgICAgICAgIGRlc3Ryb3kodHJ1ZSk7CisgICAgICAgIGlmIChmYWxsYmFjaykgeworICAgICAgICAgICAgLy8gd2UnbGwgdHJ5IGFnYWluIGlmIGl0IHdhcyBjb250ZXh0IGxvc3QKKyAgICAgICAgICAgIHNldFJlcXVlc3RlZChmYWxzZSk7CisgICAgICAgICAgICBMb2cudyhMT0dfVEFHLCAiTW91bnRhaW4gVmlldywgd2UndmUgaGFkIGEgcHJvYmxlbSBoZXJlLiAiCisgICAgICAgICAgICAgICAgICAgICsgIlN3aXRjaGluZyBiYWNrIHRvIHNvZnR3YXJlIHJlbmRlcmluZy4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGJvb2xlYW4gaW5pdGlhbGl6ZShTdXJmYWNlIHN1cmZhY2UpIHRocm93cyBPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChpc1JlcXVlc3RlZCgpICYmICFpc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgYm9vbGVhbiBjb250ZXh0Q3JlYXRlZCA9IGluaXRpYWxpemVFZ2woKTsKKyAgICAgICAgICAgIG1HbCA9IGNyZWF0ZUVnbFN1cmZhY2Uoc3VyZmFjZSk7CisgICAgICAgICAgICBtRGVzdHJveWVkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChtR2wgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGludCBlcnIgPSBzRWdsLmVnbEdldEVycm9yKCk7CisgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBFR0xfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICBkZXN0cm95KHRydWUpOworICAgICAgICAgICAgICAgICAgICBzZXRSZXF1ZXN0ZWQoZmFsc2UpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtQ2FudmFzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1DYW52YXMgPSBjcmVhdGVDYW52YXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1DYW52YXMuc2V0TmFtZShtTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc2V0RW5hYmxlZCh0cnVlKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dENyZWF0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRBdGxhcygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIG1DYW52YXMgIT0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCB1cGRhdGVTdXJmYWNlKFN1cmZhY2Ugc3VyZmFjZSkgdGhyb3dzIE91dE9mUmVzb3VyY2VzRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKGlzUmVxdWVzdGVkKCkgJiYgaXNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIGNyZWF0ZUVnbFN1cmZhY2Uoc3VyZmFjZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sZWFuIGluaXRpYWxpemVFZ2woKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAoc0VnbExvY2spIHsKKyAgICAgICAgICAgIGlmIChzRWdsID09IG51bGwgJiYgc0VnbENvbmZpZyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgc0VnbCA9IChFR0wxMCkgRUdMQ29udGV4dC5nZXRFR0woKTsKKworICAgICAgICAgICAgICAgIC8vIEdldCB0byB0aGUgZGVmYXVsdCBkaXNwbGF5LgorICAgICAgICAgICAgICAgIHNFZ2xEaXNwbGF5ID0gc0VnbC5lZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOworCisgICAgICAgICAgICAgICAgaWYgKHNFZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJlZ2xHZXREaXNwbGF5IGZhaWxlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBHTFV0aWxzLmdldEVHTEVycm9yU3RyaW5nKHNFZ2wuZWdsR2V0RXJyb3IoKSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBub3cgaW5pdGlhbGl6ZSBFR0wgZm9yIHRoYXQgZGlzcGxheQorICAgICAgICAgICAgICAgIGludFtdIHZlcnNpb24gPSBuZXcgaW50WzJdOworICAgICAgICAgICAgICAgIGlmICghc0VnbC5lZ2xJbml0aWFsaXplKHNFZ2xEaXNwbGF5LCB2ZXJzaW9uKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZWdsSW5pdGlhbGl6ZSBmYWlsZWQgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xVdGlscy5nZXRFR0xFcnJvclN0cmluZyhzRWdsLmVnbEdldEVycm9yKCkpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjaGVja0VnbEVycm9yc0ZvcmNlZCgpOworCisgICAgICAgICAgICAgICAgc0VnbENvbmZpZyA9IGxvYWRFZ2xDb25maWcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIE1hbmFnZWRFR0xDb250ZXh0IG1hbmFnZWRDb250ZXh0ID0gc0VnbENvbnRleHRTdG9yYWdlLmdldCgpOworICAgICAgICBtRWdsQ29udGV4dCA9IG1hbmFnZWRDb250ZXh0ICE9IG51bGwgPyBtYW5hZ2VkQ29udGV4dC5nZXRDb250ZXh0KCkgOiBudWxsOworICAgICAgICBtRWdsVGhyZWFkID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKKworICAgICAgICBpZiAobUVnbENvbnRleHQgPT0gbnVsbCkgeworICAgICAgICAgICAgbUVnbENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHNFZ2wsIHNFZ2xEaXNwbGF5LCBzRWdsQ29uZmlnKTsKKyAgICAgICAgICAgIHNFZ2xDb250ZXh0U3RvcmFnZS5zZXQoY3JlYXRlTWFuYWdlZENvbnRleHQobUVnbENvbnRleHQpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgRUdMQ29uZmlnIGxvYWRFZ2xDb25maWcoKSB7CisgICAgICAgIEVHTENvbmZpZyBlZ2xDb25maWcgPSBjaG9vc2VFZ2xDb25maWcoKTsKKyAgICAgICAgaWYgKGVnbENvbmZpZyA9PSBudWxsKSB7CisgICAgICAgICAgICAvLyBXZSB0cmllZCB0byB1c2UgRUdMX1NXQVBfQkVIQVZJT1JfUFJFU0VSVkVEX0JJVCwgdHJ5IGFnYWluIHdpdGhvdXQKKyAgICAgICAgICAgIGlmIChzRGlydHlSZWdpb25zKSB7CisgICAgICAgICAgICAgICAgc0RpcnR5UmVnaW9ucyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGVnbENvbmZpZyA9IGNob29zZUVnbENvbmZpZygpOworICAgICAgICAgICAgICAgIGlmIChlZ2xDb25maWcgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZWdsQ29uZmlnIG5vdCBpbml0aWFsaXplZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbENvbmZpZyBub3QgaW5pdGlhbGl6ZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZWdsQ29uZmlnOworICAgIH0KKworICAgIHByaXZhdGUgRUdMQ29uZmlnIGNob29zZUVnbENvbmZpZygpIHsKKyAgICAgICAgRUdMQ29uZmlnW10gY29uZmlncyA9IG5ldyBFR0xDb25maWdbMV07CisgICAgICAgIGludFtdIGNvbmZpZ3NDb3VudCA9IG5ldyBpbnRbMV07CisgICAgICAgIGludFtdIGNvbmZpZ1NwZWMgPSBnZXRDb25maWcoc0RpcnR5UmVnaW9ucyk7CisKKyAgICAgICAgLy8gRGVidWcKKyAgICAgICAgZmluYWwgU3RyaW5nIGRlYnVnID0gU3lzdGVtUHJvcGVydGllcy5nZXQoUFJJTlRfQ09ORklHX1BST1BFUlRZLCAiIik7CisgICAgICAgIGlmICgiYWxsIi5lcXVhbHNJZ25vcmVDYXNlKGRlYnVnKSkgeworICAgICAgICAgICAgc0VnbC5lZ2xDaG9vc2VDb25maWcoc0VnbERpc3BsYXksIGNvbmZpZ1NwZWMsIG51bGwsIDAsIGNvbmZpZ3NDb3VudCk7CisKKyAgICAgICAgICAgIEVHTENvbmZpZ1tdIGRlYnVnQ29uZmlncyA9IG5ldyBFR0xDb25maWdbY29uZmlnc0NvdW50WzBdXTsKKyAgICAgICAgICAgIHNFZ2wuZWdsQ2hvb3NlQ29uZmlnKHNFZ2xEaXNwbGF5LCBjb25maWdTcGVjLCBkZWJ1Z0NvbmZpZ3MsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3NDb3VudFswXSwgY29uZmlnc0NvdW50KTsKKworICAgICAgICAgICAgZm9yIChFR0xDb25maWcgY29uZmlnIDogZGVidWdDb25maWdzKSB7CisgICAgICAgICAgICAgICAgcHJpbnRDb25maWcoY29uZmlnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghc0VnbC5lZ2xDaG9vc2VDb25maWcoc0VnbERpc3BsYXksIGNvbmZpZ1NwZWMsIGNvbmZpZ3MsIDEsIGNvbmZpZ3NDb3VudCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImVnbENob29zZUNvbmZpZyBmYWlsZWQgIiArCisgICAgICAgICAgICAgICAgICAgIEdMVXRpbHMuZ2V0RUdMRXJyb3JTdHJpbmcoc0VnbC5lZ2xHZXRFcnJvcigpKSk7CisgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnc0NvdW50WzBdID4gMCkgeworICAgICAgICAgICAgaWYgKCJjaG9pY2UiLmVxdWFsc0lnbm9yZUNhc2UoZGVidWcpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRDb25maWcoY29uZmlnc1swXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY29uZmlnc1swXTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRDb25maWcoRUdMQ29uZmlnIGNvbmZpZykgeworICAgICAgICBpbnRbXSB2YWx1ZSA9IG5ldyBpbnRbMV07CisKKyAgICAgICAgTG9nLmQoTE9HX1RBRywgIkVHTCBjb25maWd1cmF0aW9uICIgKyBjb25maWcgKyAiOiIpOworCisgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9SRURfU0laRSwgdmFsdWUpOworICAgICAgICBMb2cuZChMT0dfVEFHLCAiICBSRURfU0laRSA9ICIgKyB2YWx1ZVswXSk7CisKKyAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX0dSRUVOX1NJWkUsIHZhbHVlKTsKKyAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgR1JFRU5fU0laRSA9ICIgKyB2YWx1ZVswXSk7CisKKyAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX0JMVUVfU0laRSwgdmFsdWUpOworICAgICAgICBMb2cuZChMT0dfVEFHLCAiICBCTFVFX1NJWkUgPSAiICsgdmFsdWVbMF0pOworCisgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9BTFBIQV9TSVpFLCB2YWx1ZSk7CisgICAgICAgIExvZy5kKExPR19UQUcsICIgIEFMUEhBX1NJWkUgPSAiICsgdmFsdWVbMF0pOworCisgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9ERVBUSF9TSVpFLCB2YWx1ZSk7CisgICAgICAgIExvZy5kKExPR19UQUcsICIgIERFUFRIX1NJWkUgPSAiICsgdmFsdWVbMF0pOworCisgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9TVEVOQ0lMX1NJWkUsIHZhbHVlKTsKKyAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgU1RFTkNJTF9TSVpFID0gIiArIHZhbHVlWzBdKTsKKworICAgICAgICBzRWdsLmVnbEdldENvbmZpZ0F0dHJpYihzRWdsRGlzcGxheSwgY29uZmlnLCBFR0xfU0FNUExFX0JVRkZFUlMsIHZhbHVlKTsKKyAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgU0FNUExFX0JVRkZFUlMgPSAiICsgdmFsdWVbMF0pOworCisgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9TQU1QTEVTLCB2YWx1ZSk7CisgICAgICAgIExvZy5kKExPR19UQUcsICIgIFNBTVBMRVMgPSAiICsgdmFsdWVbMF0pOworCisgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9TVVJGQUNFX1RZUEUsIHZhbHVlKTsKKyAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgU1VSRkFDRV9UWVBFID0gMHgiICsgSW50ZWdlci50b0hleFN0cmluZyh2YWx1ZVswXSkpOworCisgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9DT05GSUdfQ0FWRUFULCB2YWx1ZSk7CisgICAgICAgIExvZy5kKExPR19UQUcsICIgIENPTkZJR19DQVZFQVQgPSAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHZhbHVlWzBdKSk7CisgICAgfQorCisgICAgR0wgY3JlYXRlRWdsU3VyZmFjZShTdXJmYWNlIHN1cmZhY2UpIHRocm93cyBPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiB7CisgICAgICAgIC8vIENoZWNrIHByZWNvbmRpdGlvbnMuCisgICAgICAgIGlmIChzRWdsID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJlZ2wgbm90IGluaXRpYWxpemVkIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNFZ2xEaXNwbGF5ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJlZ2xEaXNwbGF5IG5vdCBpbml0aWFsaXplZCIpOworICAgICAgICB9CisgICAgICAgIGlmIChzRWdsQ29uZmlnID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJlZ2xDb25maWcgbm90IGluaXRpYWxpemVkIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFRocmVhZC5jdXJyZW50VGhyZWFkKCkgIT0gbUVnbFRocmVhZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSGFyZHdhcmVSZW5kZXJlciBjYW5ub3QgYmUgdXNlZCAiCisgICAgICAgICAgICAgICAgICAgICsgImZyb20gbXVsdGlwbGUgdGhyZWFkcyIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSW4gY2FzZSB3ZSBuZWVkIHRvIGRlc3Ryb3kgYW4gZXhpc3Rpbmcgc3VyZmFjZQorICAgICAgICBkZXN0cm95U3VyZmFjZSgpOworCisgICAgICAgIC8vIENyZWF0ZSBhbiBFR0wgc3VyZmFjZSB3ZSBjYW4gcmVuZGVyIGludG8uCisgICAgICAgIGlmICghY3JlYXRlU3VyZmFjZShzdXJmYWNlKSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBpbml0Q2FjaGVzKCk7CisKKyAgICAgICAgcmV0dXJuIG1FZ2xDb250ZXh0LmdldEdMKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGVuYWJsZURpcnR5UmVnaW9ucygpIHsKKyAgICAgICAgLy8gSWYgbURpcnR5UmVnaW9ucyBpcyBzZXQsIHRoaXMgbWVhbnMgd2UgaGF2ZSBhbiBFR0wgY29uZmlndXJhdGlvbgorICAgICAgICAvLyB3aXRoIEVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQgc2V0CisgICAgICAgIGlmIChzRGlydHlSZWdpb25zKSB7CisgICAgICAgICAgICBpZiAoIShtRGlydHlSZWdpb25zRW5hYmxlZCA9IHByZXNlcnZlQmFja0J1ZmZlcigpKSkgeworICAgICAgICAgICAgICAgIExvZy53KExPR19UQUcsICJCYWNrYnVmZmVyIGNhbm5vdCBiZSBwcmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzRGlydHlSZWdpb25zUmVxdWVzdGVkKSB7CisgICAgICAgICAgICAvLyBJZiBtRGlydHlSZWdpb25zIGlzIG5vdCBzZXQsIG91ciBFR0wgY29uZmlndXJhdGlvbiBkb2VzIG5vdAorICAgICAgICAgICAgLy8gaGF2ZSBFR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklUOyBob3dldmVyLCB0aGUgZGVmYXVsdAorICAgICAgICAgICAgLy8gc3dhcCBiZWhhdmlvciBtaWdodCBiZSBFR0xfQlVGRkVSX1BSRVNFUlZFRCwgd2hpY2ggbWVhbnMgd2UKKyAgICAgICAgICAgIC8vIHdhbnQgdG8gc2V0IG1EaXJ0eVJlZ2lvbnMuIFdlIHRyeSB0byBkbyB0aGlzIG9ubHkgaWYgZGlydHkKKyAgICAgICAgICAgIC8vIHJlZ2lvbnMgd2VyZSBpbml0aWFsbHkgcmVxdWVzdGVkIGFzIHBhcnQgb2YgdGhlIGRldmljZQorICAgICAgICAgICAgLy8gY29uZmlndXJhdGlvbiAoc2VlIFJFTkRFUl9ESVJUWV9SRUdJT05TKQorICAgICAgICAgICAgbURpcnR5UmVnaW9uc0VuYWJsZWQgPSBpc0JhY2tCdWZmZXJQcmVzZXJ2ZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEVHTENvbnRleHQgY3JlYXRlQ29udGV4dChFR0wxMCBlZ2wsIEVHTERpc3BsYXkgZWdsRGlzcGxheSwgRUdMQ29uZmlnIGVnbENvbmZpZykgeworICAgICAgICBmaW5hbCBpbnRbXSBhdHRyaWJzID0geyBFR0wxNC5FR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwgR0xfVkVSU0lPTiwgRUdMX05PTkUgfTsKKworICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBlZ2wuZWdsQ3JlYXRlQ29udGV4dChlZ2xEaXNwbGF5LCBlZ2xDb25maWcsIEVHTF9OT19DT05URVhULAorICAgICAgICAgICAgICAgIGF0dHJpYnMpOworICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsIHx8IGNvbnRleHQgPT0gRUdMX05PX0NPTlRFWFQpIHsKKyAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIENvbnN0YW50Q29uZGl0aW9ucworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgYW4gRUdMIGNvbnRleHQuIGVnbENyZWF0ZUNvbnRleHQgZmFpbGVkIHdpdGggZXJyb3I6ICIgKworICAgICAgICAgICAgICAgICAgICBHTFV0aWxzLmdldEVHTEVycm9yU3RyaW5nKHNFZ2wuZWdsR2V0RXJyb3IoKSkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNvbnRleHQ7CisgICAgfQorCisgICAgdm9pZCBkZXN0cm95U3VyZmFjZSgpIHsKKyAgICAgICAgaWYgKG1FZ2xTdXJmYWNlICE9IG51bGwgJiYgbUVnbFN1cmZhY2UgIT0gRUdMX05PX1NVUkZBQ0UpIHsKKyAgICAgICAgICAgIGlmIChtRWdsU3VyZmFjZS5lcXVhbHMoc0VnbC5lZ2xHZXRDdXJyZW50U3VyZmFjZShFR0xfRFJBVykpKSB7CisgICAgICAgICAgICAgICAgc0VnbC5lZ2xNYWtlQ3VycmVudChzRWdsRGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc0VnbC5lZ2xEZXN0cm95U3VyZmFjZShzRWdsRGlzcGxheSwgbUVnbFN1cmZhY2UpOworICAgICAgICAgICAgbUVnbFN1cmZhY2UgPSBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBpbnZhbGlkYXRlKFN1cmZhY2Ugc3VyZmFjZSkgeworICAgICAgICAvLyBDYW5jZWxzIGFueSBleGlzdGluZyBidWZmZXIgdG8gZW5zdXJlIHdlJ2xsIGdldCBhIGJ1ZmZlcgorICAgICAgICAvLyBvZiB0aGUgcmlnaHQgc2l6ZSBiZWZvcmUgd2UgY2FsbCBlZ2xTd2FwQnVmZmVycworICAgICAgICBzRWdsLmVnbE1ha2VDdXJyZW50KHNFZ2xEaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKKworICAgICAgICBpZiAobUVnbFN1cmZhY2UgIT0gbnVsbCAmJiBtRWdsU3VyZmFjZSAhPSBFR0xfTk9fU1VSRkFDRSkgeworICAgICAgICAgICAgc0VnbC5lZ2xEZXN0cm95U3VyZmFjZShzRWdsRGlzcGxheSwgbUVnbFN1cmZhY2UpOworICAgICAgICAgICAgbUVnbFN1cmZhY2UgPSBudWxsOworICAgICAgICAgICAgc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3VyZmFjZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmICghY3JlYXRlU3VyZmFjZShzdXJmYWNlKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVVwZGF0ZURpcnR5UmVnaW9ucyA9IHRydWU7CisKKyAgICAgICAgICAgIGlmIChtQ2FudmFzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzZXRFbmFibGVkKHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGNyZWF0ZVN1cmZhY2UoU3VyZmFjZSBzdXJmYWNlKSB7CisgICAgICAgIG1FZ2xTdXJmYWNlID0gc0VnbC5lZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKHNFZ2xEaXNwbGF5LCBzRWdsQ29uZmlnLCBzdXJmYWNlLCBudWxsKTsKKworICAgICAgICBpZiAobUVnbFN1cmZhY2UgPT0gbnVsbCB8fCBtRWdsU3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkgeworICAgICAgICAgICAgaW50IGVycm9yID0gc0VnbC5lZ2xHZXRFcnJvcigpOworICAgICAgICAgICAgaWYgKGVycm9yID09IEVHTF9CQURfTkFUSVZFX1dJTkRPVykgeworICAgICAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJjcmVhdGVXaW5kb3dTdXJmYWNlIHJldHVybmVkIEVHTF9CQURfTkFUSVZFX1dJTkRPVy4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiY3JlYXRlV2luZG93U3VyZmFjZSBmYWlsZWQgIgorICAgICAgICAgICAgICAgICAgICArIEdMVXRpbHMuZ2V0RUdMRXJyb3JTdHJpbmcoZXJyb3IpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc0VnbC5lZ2xNYWtlQ3VycmVudChzRWdsRGlzcGxheSwgbUVnbFN1cmZhY2UsIG1FZ2xTdXJmYWNlLCBtRWdsQ29udGV4dCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImVnbE1ha2VDdXJyZW50IGZhaWxlZCAiICsKKyAgICAgICAgICAgICAgICAgICAgR0xVdGlscy5nZXRFR0xFcnJvclN0cmluZyhzRWdsLmVnbEdldEVycm9yKCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVuYWJsZURpcnR5UmVnaW9ucygpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisgICAgICAgIHJldHVybiBjaGVja1JlbmRlckNvbnRleHQoKSAhPSBTVVJGQUNFX1NUQVRFX0VSUk9SOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgc2V0dXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgICAgIGlmICh2YWxpZGF0ZSgpKSB7CisgICAgICAgICAgICBtQ2FudmFzLnNldFZpZXdwb3J0KHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgbVdpZHRoID0gd2lkdGg7CisgICAgICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgaW50IGdldFdpZHRoKCkgeworICAgICAgICByZXR1cm4gbVdpZHRoOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGludCBnZXRIZWlnaHQoKSB7CisgICAgICAgIHJldHVybiBtSGVpZ2h0OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgeworICAgICAgICBtTmFtZSA9IG5hbWU7CisgICAgfQorCisgICAgY2xhc3MgRnVuY3RvcnNSdW5uYWJsZSBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKyAgICAgICAgVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm87CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIGZpbmFsIEhhcmR3YXJlUmVuZGVyZXIgcmVuZGVyZXIgPSBhdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyOworICAgICAgICAgICAgaWYgKHJlbmRlcmVyID09IG51bGwgfHwgIXJlbmRlcmVyLmlzRW5hYmxlZCgpIHx8IHJlbmRlcmVyICE9IEdMUmVuZGVyZXIudGhpcykgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNoZWNrUmVuZGVyQ29udGV4dCgpICE9IFNVUkZBQ0VfU1RBVEVfRVJST1IpIHsKKyAgICAgICAgICAgICAgICBpbnQgc3RhdHVzID0gbUNhbnZhcy5pbnZva2VGdW5jdG9ycyhtUmVkcmF3Q2xpcCk7CisgICAgICAgICAgICAgICAgaGFuZGxlRnVuY3RvclN0YXR1cyhhdHRhY2hJbmZvLCBzdGF0dXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBkcmF3RGlzcGxheUxpc3QoRGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIFZpZXcuQXR0YWNoSW5mbyBhdHRhY2hJbmZvLAorICAgICAgICAgICAgSGFyZHdhcmVEcmF3Q2FsbGJhY2tzIGNhbGxiYWNrcywgUmVjdCBkaXJ0eSkgeworICAgICAgICBpZiAoY2FuRHJhdygpKSB7CisgICAgICAgICAgICBpZiAoIWhhc0RpcnR5UmVnaW9ucygpKSB7CisgICAgICAgICAgICAgICAgZGlydHkgPSBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBhcmUgYWxyZWFkeSBvbiB0aGUgY29ycmVjdCB0aHJlYWQKKyAgICAgICAgICAgIGZpbmFsIGludCBzdXJmYWNlU3RhdGUgPSBjaGVja1JlbmRlckNvbnRleHRVbnNhZmUoKTsKKyAgICAgICAgICAgIGlmIChzdXJmYWNlU3RhdGUgIT0gU1VSRkFDRV9TVEFURV9FUlJPUikgeworICAgICAgICAgICAgICAgIEhhcmR3YXJlQ2FudmFzIGNhbnZhcyA9IG1DYW52YXM7CisKKyAgICAgICAgICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlTG9jay5sb2NrKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGlydHkgPSBiZWdpbkZyYW1lKGNhbnZhcywgZGlydHksIHN1cmZhY2VTdGF0ZSk7CisKKyAgICAgICAgICAgICAgICBpbnQgc2F2ZUNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgc3RhdHVzID0gRGlzcGxheUxpc3QuU1RBVFVTX0RPTkU7CisKKyAgICAgICAgICAgICAgICBsb25nIHN0YXJ0ID0gZ2V0U3lzdGVtVGltZSgpOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHByZXBhcmVGcmFtZShkaXJ0eSk7CisKKyAgICAgICAgICAgICAgICAgICAgc2F2ZUNvdW50ID0gY2FudmFzLnNhdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uSGFyZHdhcmVQcmVEcmF3KGNhbnZhcyk7CisKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzIHw9IGRyYXdEaXNwbGF5TGlzdChhdHRhY2hJbmZvLCBjYW52YXMsIGRpc3BsYXlMaXN0LCBzdGF0dXMpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgZHJhd2luZzoiLCBlKTsKKyAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3Mub25IYXJkd2FyZVBvc3REcmF3KGNhbnZhcyk7CisgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlVG9Db3VudChzYXZlQ291bnQpOworCisgICAgICAgICAgICAgICAgICAgIG1EcmF3RGVsdGEgPSBnZXRTeXN0ZW1UaW1lKCkgLSBzdGFydDsKKworICAgICAgICAgICAgICAgICAgICBpZiAobURyYXdEZWx0YSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1GcmFtZUNvdW50Kys7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnT3ZlcmRyYXcoYXR0YWNoSW5mbywgZGlydHksIGNhbnZhcywgZGlzcGxheUxpc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdEaXJ0eVJlZ2lvbnMoZGlydHksIGNhbnZhcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkcmF3UHJvZmlsZURhdGEoYXR0YWNoSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvblBvc3REcmF3KCk7CisKKyAgICAgICAgICAgICAgICBzd2FwQnVmZmVycyhzdGF0dXMpOworCisgICAgICAgICAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZUxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tSWdub3JlRGlydHlTdGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBkcmF3KFZpZXcgdmlldywgVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8sIEhhcmR3YXJlRHJhd0NhbGxiYWNrcyBjYWxsYmFja3MsCisgICAgICAgICAgICBSZWN0IGRpcnR5KSB7CisgICAgICAgIGlmIChjYW5EcmF3KCkpIHsKKyAgICAgICAgICAgIGlmICghaGFzRGlydHlSZWdpb25zKCkpIHsKKyAgICAgICAgICAgICAgICBkaXJ0eSA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdHRhY2hJbmZvLm1JZ25vcmVEaXJ0eVN0YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIGF0dGFjaEluZm8ubURyYXdpbmdUaW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCk7CisKKyAgICAgICAgICAgIHZpZXcubVByaXZhdGVGbGFncyB8PSBWaWV3LlBGTEFHX0RSQVdOOworCisgICAgICAgICAgICAvLyBXZSBhcmUgYWxyZWFkeSBvbiB0aGUgY29ycmVjdCB0aHJlYWQKKyAgICAgICAgICAgIGZpbmFsIGludCBzdXJmYWNlU3RhdGUgPSBjaGVja1JlbmRlckNvbnRleHRVbnNhZmUoKTsKKyAgICAgICAgICAgIGlmIChzdXJmYWNlU3RhdGUgIT0gU1VSRkFDRV9TVEFURV9FUlJPUikgeworICAgICAgICAgICAgICAgIEhhcmR3YXJlQ2FudmFzIGNhbnZhcyA9IG1DYW52YXM7CisKKyAgICAgICAgICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlTG9jay5sb2NrKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGlydHkgPSBiZWdpbkZyYW1lKGNhbnZhcywgZGlydHksIHN1cmZhY2VTdGF0ZSk7CisKKyAgICAgICAgICAgICAgICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCA9IGJ1aWxkRGlzcGxheUxpc3QodmlldywgY2FudmFzKTsKKworICAgICAgICAgICAgICAgIC8vIGJ1aWxkRGlzcGxheUxpc3QoKSBjYWxscyBpbnRvIHVzZXIgY29kZSB3aGljaCBjYW4gY2F1c2UKKyAgICAgICAgICAgICAgICAvLyBhbiBlZ2xNYWtlQ3VycmVudCB0byBoYXBwZW4gd2l0aCBhIGRpZmZlcmVudCBzdXJmYWNlL2NvbnRleHQuCisgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCB0aGVyZWZvcmUgY2hlY2sgYWdhaW4gaGVyZS4KKyAgICAgICAgICAgICAgICBpZiAoY2hlY2tSZW5kZXJDb250ZXh0VW5zYWZlKCkgPT0gU1VSRkFDRV9TVEFURV9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaW50IHNhdmVDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgaW50IHN0YXR1cyA9IERpc3BsYXlMaXN0LlNUQVRVU19ET05FOworCisgICAgICAgICAgICAgICAgbG9uZyBzdGFydCA9IGdldFN5c3RlbVRpbWUoKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBwcmVwYXJlRnJhbWUoZGlydHkpOworCisgICAgICAgICAgICAgICAgICAgIHNhdmVDb3VudCA9IGNhbnZhcy5zYXZlKCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkhhcmR3YXJlUHJlRHJhdyhjYW52YXMpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5TGlzdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgfD0gZHJhd0Rpc3BsYXlMaXN0KGF0dGFjaEluZm8sIGNhbnZhcywgZGlzcGxheUxpc3QsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGRuJ3QgcmVhY2ggaGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5kcmF3KGNhbnZhcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdoaWxlIGRyYXdpbmc6IiwgZSk7CisgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uSGFyZHdhcmVQb3N0RHJhdyhjYW52YXMpOworICAgICAgICAgICAgICAgICAgICBjYW52YXMucmVzdG9yZVRvQ291bnQoc2F2ZUNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgdmlldy5tUmVjcmVhdGVEaXNwbGF5TGlzdCA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIG1EcmF3RGVsdGEgPSBnZXRTeXN0ZW1UaW1lKCkgLSBzdGFydDsKKworICAgICAgICAgICAgICAgICAgICBpZiAobURyYXdEZWx0YSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1GcmFtZUNvdW50Kys7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnT3ZlcmRyYXcoYXR0YWNoSW5mbywgZGlydHksIGNhbnZhcywgZGlzcGxheUxpc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdEaXJ0eVJlZ2lvbnMoZGlydHksIGNhbnZhcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkcmF3UHJvZmlsZURhdGEoYXR0YWNoSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvblBvc3REcmF3KCk7CisKKyAgICAgICAgICAgICAgICBzd2FwQnVmZmVycyhzdGF0dXMpOworCisgICAgICAgICAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZUxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tSWdub3JlRGlydHlTdGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRlYnVnT3ZlcmRyYXcoVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8sIFJlY3QgZGlydHksCisgICAgICAgICAgICBIYXJkd2FyZUNhbnZhcyBjYW52YXMsIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0KSB7CisKKyAgICAgICAgaWYgKG1EZWJ1Z092ZXJkcmF3ID09IE9WRVJEUkFXX1RZUEVfQ09VTlQpIHsKKyAgICAgICAgICAgIGlmIChtRGVidWdPdmVyZHJhd0xheWVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd0xheWVyID0gY3JlYXRlSGFyZHdhcmVMYXllcihtV2lkdGgsIG1IZWlnaHQsIHRydWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtRGVidWdPdmVyZHJhd0xheWVyLmdldFdpZHRoKCkgIT0gbVdpZHRoIHx8CisgICAgICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3TGF5ZXIuZ2V0SGVpZ2h0KCkgIT0gbUhlaWdodCkgeworICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3TGF5ZXIucmVzaXplKG1XaWR0aCwgbUhlaWdodCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbURlYnVnT3ZlcmRyYXdMYXllci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhdyA9IC0xOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSGFyZHdhcmVDYW52YXMgbGF5ZXJDYW52YXMgPSBtRGVidWdPdmVyZHJhd0xheWVyLnN0YXJ0KGNhbnZhcywgZGlydHkpOworICAgICAgICAgICAgY291bnRPdmVyZHJhdyhsYXllckNhbnZhcyk7CisgICAgICAgICAgICBmaW5hbCBpbnQgcmVzdG9yZUNvdW50ID0gbGF5ZXJDYW52YXMuc2F2ZSgpOworICAgICAgICAgICAgbGF5ZXJDYW52YXMuZHJhd0Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0LCBudWxsLCBEaXNwbGF5TGlzdC5GTEFHX0NMSVBfQ0hJTERSRU4pOworICAgICAgICAgICAgbGF5ZXJDYW52YXMucmVzdG9yZVRvQ291bnQocmVzdG9yZUNvdW50KTsKKyAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3TGF5ZXIuZW5kKGNhbnZhcyk7CisKKyAgICAgICAgICAgIGZsb2F0IG92ZXJkcmF3ID0gZ2V0T3ZlcmRyYXcobGF5ZXJDYW52YXMpOworICAgICAgICAgICAgRGlzcGxheU1ldHJpY3MgbWV0cmljcyA9IGF0dGFjaEluZm8ubVJvb3RWaWV3LmdldFJlc291cmNlcygpLmdldERpc3BsYXlNZXRyaWNzKCk7CisKKyAgICAgICAgICAgIGRyYXdPdmVyZHJhd0NvdW50ZXIoY2FudmFzLCBvdmVyZHJhdywgbWV0cmljcy5kZW5zaXR5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcmF3T3ZlcmRyYXdDb3VudGVyKEhhcmR3YXJlQ2FudmFzIGNhbnZhcywgZmxvYXQgb3ZlcmRyYXcsIGZsb2F0IGRlbnNpdHkpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHRleHQgPSBTdHJpbmcuZm9ybWF0KCIlLjJmeCIsIG92ZXJkcmF3KTsKKyAgICAgICAgZmluYWwgUGFpbnQgcGFpbnQgPSBzZXR1cFBhaW50KGRlbnNpdHkpOworICAgICAgICAvLyBIU0J0b0NvbG9yIHdpbGwgY2xhbXAgdGhlIHZhbHVlcyBpbiB0aGUgMC4uMSByYW5nZQorICAgICAgICBwYWludC5zZXRDb2xvcihDb2xvci5IU0J0b0NvbG9yKDAuMjhmIC0gMC4yOGYgKiBvdmVyZHJhdyAvIDMuNWYsIDAuOGYsIDEuMGYpKTsKKworICAgICAgICBjYW52YXMuZHJhd1RleHQodGV4dCwgZGVuc2l0eSAqIDQuMGYsIG1IZWlnaHQgLSBwYWludC5nZXRGb250TWV0cmljcygpLmJvdHRvbSwgcGFpbnQpOworICAgIH0KKworICAgIHByaXZhdGUgUGFpbnQgc2V0dXBQYWludChmbG9hdCBkZW5zaXR5KSB7CisgICAgICAgIGlmIChtRGVidWdPdmVyZHJhd1BhaW50ID09IG51bGwpIHsKKyAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3UGFpbnQgPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3UGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdQYWludC5zZXRTaGFkb3dMYXllcihkZW5zaXR5ICogMy4wZiwgMC4wZiwgMC4wZiwgMHhmZjAwMDAwMCk7CisgICAgICAgICAgICBtRGVidWdPdmVyZHJhd1BhaW50LnNldFRleHRTaXplKGRlbnNpdHkgKiAyMC4wZik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1EZWJ1Z092ZXJkcmF3UGFpbnQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBEaXNwbGF5TGlzdCBidWlsZERpc3BsYXlMaXN0KFZpZXcgdmlldywgSGFyZHdhcmVDYW52YXMgY2FudmFzKSB7CisgICAgICAgIGlmIChtRHJhd0RlbHRhIDw9IDApIHsKKyAgICAgICAgICAgIHJldHVybiB2aWV3Lm1EaXNwbGF5TGlzdDsKKyAgICAgICAgfQorCisgICAgICAgIHZpZXcubVJlY3JlYXRlRGlzcGxheUxpc3QgPSAodmlldy5tUHJpdmF0ZUZsYWdzICYgVmlldy5QRkxBR19JTlZBTElEQVRFRCkKKyAgICAgICAgICAgICAgICA9PSBWaWV3LlBGTEFHX0lOVkFMSURBVEVEOworICAgICAgICB2aWV3Lm1Qcml2YXRlRmxhZ3MgJj0gflZpZXcuUEZMQUdfSU5WQUxJREFURUQ7CisKKyAgICAgICAgbG9uZyBidWlsZERpc3BsYXlMaXN0U3RhcnRUaW1lID0gc3RhcnRCdWlsZERpc3BsYXlMaXN0UHJvZmlsaW5nKCk7CisgICAgICAgIGNhbnZhcy5jbGVhckxheWVyVXBkYXRlcygpOworCisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oVHJhY2UuVFJBQ0VfVEFHX1ZJRVcsICJnZXREaXNwbGF5TGlzdCIpOworICAgICAgICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCA9IHZpZXcuZ2V0RGlzcGxheUxpc3QoKTsKKyAgICAgICAgVHJhY2UudHJhY2VFbmQoVHJhY2UuVFJBQ0VfVEFHX1ZJRVcpOworCisgICAgICAgIGVuZEJ1aWxkRGlzcGxheUxpc3RQcm9maWxpbmcoYnVpbGREaXNwbGF5TGlzdFN0YXJ0VGltZSk7CisKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlMaXN0OworICAgIH0KKworICAgIHByaXZhdGUgUmVjdCBiZWdpbkZyYW1lKEhhcmR3YXJlQ2FudmFzIGNhbnZhcywgUmVjdCBkaXJ0eSwgaW50IHN1cmZhY2VTdGF0ZSkgeworICAgICAgICAvLyBXZSBoYWQgdG8gY2hhbmdlIHRoZSBjdXJyZW50IHN1cmZhY2UgYW5kL29yIGNvbnRleHQsIHJlZHJhdyBldmVyeXRoaW5nCisgICAgICAgIGlmIChzdXJmYWNlU3RhdGUgPT0gU1VSRkFDRV9TVEFURV9VUERBVEVEKSB7CisgICAgICAgICAgICBkaXJ0eSA9IG51bGw7CisgICAgICAgICAgICBiZWdpbkZyYW1lKG51bGwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50W10gc2l6ZSA9IG1TdXJmYWNlU2l6ZTsKKyAgICAgICAgICAgIGJlZ2luRnJhbWUoc2l6ZSk7CisKKyAgICAgICAgICAgIGlmIChzaXplWzFdICE9IG1IZWlnaHQgfHwgc2l6ZVswXSAhPSBtV2lkdGgpIHsKKyAgICAgICAgICAgICAgICBtV2lkdGggPSBzaXplWzBdOworICAgICAgICAgICAgICAgIG1IZWlnaHQgPSBzaXplWzFdOworCisgICAgICAgICAgICAgICAgY2FudmFzLnNldFZpZXdwb3J0KG1XaWR0aCwgbUhlaWdodCk7CisKKyAgICAgICAgICAgICAgICBkaXJ0eSA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobURlYnVnRGF0YVByb3ZpZGVyICE9IG51bGwpIGRpcnR5ID0gbnVsbDsKKworICAgICAgICByZXR1cm4gZGlydHk7CisgICAgfQorCisgICAgcHJpdmF0ZSBsb25nIHN0YXJ0QnVpbGREaXNwbGF5TGlzdFByb2ZpbGluZygpIHsKKyAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgeworICAgICAgICAgICAgbVByb2ZpbGVDdXJyZW50RnJhbWUgKz0gUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UOworICAgICAgICAgICAgaWYgKG1Qcm9maWxlQ3VycmVudEZyYW1lID49IG1Qcm9maWxlRGF0YS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBtUHJvZmlsZUN1cnJlbnRGcmFtZSA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBTeXN0ZW0ubmFub1RpbWUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZW5kQnVpbGREaXNwbGF5TGlzdFByb2ZpbGluZyhsb25nIGdldERpc3BsYXlMaXN0U3RhcnRUaW1lKSB7CisgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKKyAgICAgICAgICAgIGxvbmcgbm93ID0gU3lzdGVtLm5hbm9UaW1lKCk7CisgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IChub3cgLSBnZXREaXNwbGF5TGlzdFN0YXJ0VGltZSkgKiAwLjAwMDAwMWY7CisgICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBQb2ludGxlc3NBcml0aG1ldGljRXhwcmVzc2lvbgorICAgICAgICAgICAgbVByb2ZpbGVEYXRhW21Qcm9maWxlQ3VycmVudEZyYW1lXSA9IHRvdGFsOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgcHJlcGFyZUZyYW1lKFJlY3QgZGlydHkpIHsKKyAgICAgICAgaW50IHN0YXR1czsKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfVklFVywgInByZXBhcmVGcmFtZSIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RhdHVzID0gb25QcmVEcmF3KGRpcnR5KTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIFRyYWNlLnRyYWNlRW5kKFRyYWNlLlRSQUNFX1RBR19WSUVXKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHByaXZhdGUgaW50IGRyYXdEaXNwbGF5TGlzdChWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbywgSGFyZHdhcmVDYW52YXMgY2FudmFzLAorICAgICAgICAgICAgRGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIGludCBzdGF0dXMpIHsKKworICAgICAgICBsb25nIGRyYXdEaXNwbGF5TGlzdFN0YXJ0VGltZSA9IDA7CisgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKKyAgICAgICAgICAgIGRyYXdEaXNwbGF5TGlzdFN0YXJ0VGltZSA9IFN5c3RlbS5uYW5vVGltZSgpOworICAgICAgICB9CisKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfVklFVywgImRyYXdEaXNwbGF5TGlzdCIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RhdHVzIHw9IGNhbnZhcy5kcmF3RGlzcGxheUxpc3QoZGlzcGxheUxpc3QsIG1SZWRyYXdDbGlwLAorICAgICAgICAgICAgICAgICAgICBEaXNwbGF5TGlzdC5GTEFHX0NMSVBfQ0hJTERSRU4pOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVHJhY2UuVFJBQ0VfVEFHX1ZJRVcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgeworICAgICAgICAgICAgbG9uZyBub3cgPSBTeXN0ZW0ubmFub1RpbWUoKTsKKyAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gKG5vdyAtIGRyYXdEaXNwbGF5TGlzdFN0YXJ0VGltZSkgKiAwLjAwMDAwMWY7CisgICAgICAgICAgICBtUHJvZmlsZURhdGFbbVByb2ZpbGVDdXJyZW50RnJhbWUgKyAxXSA9IHRvdGFsOworICAgICAgICB9CisKKyAgICAgICAgaGFuZGxlRnVuY3RvclN0YXR1cyhhdHRhY2hJbmZvLCBzdGF0dXMpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzd2FwQnVmZmVycyhpbnQgc3RhdHVzKSB7CisgICAgICAgIGlmICgoc3RhdHVzICYgRGlzcGxheUxpc3QuU1RBVFVTX0RSRVcpID09IERpc3BsYXlMaXN0LlNUQVRVU19EUkVXKSB7CisgICAgICAgICAgICBsb25nIGVnbFN3YXBCdWZmZXJzU3RhcnRUaW1lID0gMDsKKyAgICAgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBlZ2xTd2FwQnVmZmVyc1N0YXJ0VGltZSA9IFN5c3RlbS5uYW5vVGltZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzRWdsLmVnbFN3YXBCdWZmZXJzKHNFZ2xEaXNwbGF5LCBtRWdsU3VyZmFjZSk7CisKKyAgICAgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBsb25nIG5vdyA9IFN5c3RlbS5uYW5vVGltZSgpOworICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gKG5vdyAtIGVnbFN3YXBCdWZmZXJzU3RhcnRUaW1lKSAqIDAuMDAwMDAxZjsKKyAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGFbbVByb2ZpbGVDdXJyZW50RnJhbWUgKyAyXSA9IHRvdGFsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjaGVja0VnbEVycm9ycygpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRlYnVnRGlydHlSZWdpb25zKFJlY3QgZGlydHksIEhhcmR3YXJlQ2FudmFzIGNhbnZhcykgeworICAgICAgICBpZiAobURlYnVnRGlydHlSZWdpb25zKSB7CisgICAgICAgICAgICBpZiAobURlYnVnUGFpbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1EZWJ1Z1BhaW50ID0gbmV3IFBhaW50KCk7CisgICAgICAgICAgICAgICAgbURlYnVnUGFpbnQuc2V0Q29sb3IoMHg3ZmZmMDAwMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkaXJ0eSAhPSBudWxsICYmIChtRnJhbWVDb3VudCAmIDEpID09IDApIHsKKyAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1JlY3QoZGlydHksIG1EZWJ1Z1BhaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVGdW5jdG9yU3RhdHVzKFZpZXcuQXR0YWNoSW5mbyBhdHRhY2hJbmZvLCBpbnQgc3RhdHVzKSB7CisgICAgICAgIC8vIElmIHRoZSBkcmF3IGZsYWcgaXMgc2V0LCBmdW5jdG9ycyB3aWxsIGJlIGludm9rZWQgd2hpbGUgZXhlY3V0aW5nCisgICAgICAgIC8vIHRoZSB0cmVlIG9mIGRpc3BsYXkgbGlzdHMKKyAgICAgICAgaWYgKChzdGF0dXMgJiBEaXNwbGF5TGlzdC5TVEFUVVNfRFJBVykgIT0gMCkgeworICAgICAgICAgICAgaWYgKG1SZWRyYXdDbGlwLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubVZpZXdSb290SW1wbC5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubVZpZXdSb290SW1wbC5pbnZhbGlkYXRlQ2hpbGRJblBhcmVudChudWxsLCBtUmVkcmF3Q2xpcCk7CisgICAgICAgICAgICAgICAgbVJlZHJhd0NsaXAuc2V0RW1wdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc3RhdHVzICYgRGlzcGxheUxpc3QuU1RBVFVTX0lOVk9LRSkgIT0gMCB8fAorICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubUhhbmRsZXIuaGFzQ2FsbGJhY2tzKG1GdW5jdG9yc1J1bm5hYmxlKSkgeworICAgICAgICAgICAgYXR0YWNoSW5mby5tSGFuZGxlci5yZW1vdmVDYWxsYmFja3MobUZ1bmN0b3JzUnVubmFibGUpOworICAgICAgICAgICAgbUZ1bmN0b3JzUnVubmFibGUuYXR0YWNoSW5mbyA9IGF0dGFjaEluZm87CisgICAgICAgICAgICBhdHRhY2hJbmZvLm1IYW5kbGVyLnBvc3REZWxheWVkKG1GdW5jdG9yc1J1bm5hYmxlLCBGVU5DVE9SX1BST0NFU1NfREVMQVkpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBkZXRhY2hGdW5jdG9yKGludCBmdW5jdG9yKSB7CisgICAgICAgIGlmIChtQ2FudmFzICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1DYW52YXMuZGV0YWNoRnVuY3RvcihmdW5jdG9yKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGJvb2xlYW4gYXR0YWNoRnVuY3RvcihWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbywgaW50IGZ1bmN0b3IpIHsKKyAgICAgICAgaWYgKG1DYW52YXMgIT0gbnVsbCkgeworICAgICAgICAgICAgbUNhbnZhcy5hdHRhY2hGdW5jdG9yKGZ1bmN0b3IpOworICAgICAgICAgICAgbUZ1bmN0b3JzUnVubmFibGUuYXR0YWNoSW5mbyA9IGF0dGFjaEluZm87CisgICAgICAgICAgICBhdHRhY2hJbmZvLm1IYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhtRnVuY3RvcnNSdW5uYWJsZSk7CisgICAgICAgICAgICBhdHRhY2hJbmZvLm1IYW5kbGVyLnBvc3REZWxheWVkKG1GdW5jdG9yc1J1bm5hYmxlLCAgMCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogRW5zdXJlcyB0aGUgY3VycmVudCBFR0wgY29udGV4dCBhbmQgc3VyZmFjZSBhcmUgdGhlIG9uZXMgd2UgZXhwZWN0LgorICAgICAqIFRoaXMgbWV0aG9kIHRocm93cyBhbiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgaW52b2tlZCBmcm9tIGEgdGhyZWFkCisgICAgICogdGhhdCBkaWQgbm90IGluaXRpYWxpemUgRUdMLgorICAgICAqCisgICAgICogQHJldHVybiB7QGxpbmsgI1NVUkZBQ0VfU1RBVEVfRVJST1J9IGlmIHRoZSBjb3JyZWN0IEVHTCBjb250ZXh0IGNhbm5vdCBiZSBtYWRlIGN1cnJlbnQsCisgICAgICogICAgICAgICB7QGxpbmsgI1NVUkZBQ0VfU1RBVEVfVVBEQVRFRH0gaWYgdGhlIEVHTCBjb250ZXh0IHdhcyBjaGFuZ2VkIG9yCisgICAgICogICAgICAgICB7QGxpbmsgI1NVUkZBQ0VfU1RBVEVfU1VDQ0VTU30gaWYgdGhlIEVHTCBjb250ZXh0IHdhcyB0aGUgY29ycmVjdCBvbmUKKyAgICAgKgorICAgICAqIEBzZWUgI2NoZWNrUmVuZGVyQ29udGV4dFVuc2FmZSgpCisgICAgICovCisgICAgaW50IGNoZWNrUmVuZGVyQ29udGV4dCgpIHsKKyAgICAgICAgaWYgKG1FZ2xUaHJlYWQgIT0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSGFyZHdhcmUgYWNjZWxlcmF0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBhICIgKworICAgICAgICAgICAgICAgICAgICAic2luZ2xlIFVJIHRocmVhZC5cbk9yaWdpbmFsIHRocmVhZDogIiArIG1FZ2xUaHJlYWQgKyAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIkN1cnJlbnQgdGhyZWFkOiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2hlY2tSZW5kZXJDb250ZXh0VW5zYWZlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRW5zdXJlcyB0aGUgY3VycmVudCBFR0wgY29udGV4dCBhbmQgc3VyZmFjZSBhcmUgdGhlIG9uZXMgd2UgZXhwZWN0LgorICAgICAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IGNoZWNrIHRoZSBjdXJyZW50IHRocmVhZC4KKyAgICAgKgorICAgICAqIEByZXR1cm4ge0BsaW5rICNTVVJGQUNFX1NUQVRFX0VSUk9SfSBpZiB0aGUgY29ycmVjdCBFR0wgY29udGV4dCBjYW5ub3QgYmUgbWFkZSBjdXJyZW50LAorICAgICAqICAgICAgICAge0BsaW5rICNTVVJGQUNFX1NUQVRFX1VQREFURUR9IGlmIHRoZSBFR0wgY29udGV4dCB3YXMgY2hhbmdlZCBvcgorICAgICAqICAgICAgICAge0BsaW5rICNTVVJGQUNFX1NUQVRFX1NVQ0NFU1N9IGlmIHRoZSBFR0wgY29udGV4dCB3YXMgdGhlIGNvcnJlY3Qgb25lCisgICAgICoKKyAgICAgKiBAc2VlICNjaGVja1JlbmRlckNvbnRleHQoKQorICAgICAqLworICAgIHByaXZhdGUgaW50IGNoZWNrUmVuZGVyQ29udGV4dFVuc2FmZSgpIHsKKyAgICAgICAgaWYgKCFtRWdsU3VyZmFjZS5lcXVhbHMoc0VnbC5lZ2xHZXRDdXJyZW50U3VyZmFjZShFR0xfRFJBVykpIHx8CisgICAgICAgICAgICAgICAgIW1FZ2xDb250ZXh0LmVxdWFscyhzRWdsLmVnbEdldEN1cnJlbnRDb250ZXh0KCkpKSB7CisgICAgICAgICAgICBpZiAoIXNFZ2wuZWdsTWFrZUN1cnJlbnQoc0VnbERpc3BsYXksIG1FZ2xTdXJmYWNlLCBtRWdsU3VyZmFjZSwgbUVnbENvbnRleHQpKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoTE9HX1RBRywgImVnbE1ha2VDdXJyZW50IGZhaWxlZCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMVXRpbHMuZ2V0RUdMRXJyb3JTdHJpbmcoc0VnbC5lZ2xHZXRFcnJvcigpKSk7CisgICAgICAgICAgICAgICAgZmFsbGJhY2sodHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNVUkZBQ0VfU1RBVEVfRVJST1I7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChtVXBkYXRlRGlydHlSZWdpb25zKSB7CisgICAgICAgICAgICAgICAgICAgIGVuYWJsZURpcnR5UmVnaW9ucygpOworICAgICAgICAgICAgICAgICAgICBtVXBkYXRlRGlydHlSZWdpb25zID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBTVVJGQUNFX1NUQVRFX1VQREFURUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFNVUkZBQ0VfU1RBVEVfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZHBUb1B4KGludCBkcCwgZmxvYXQgZGVuc2l0eSkgeworICAgICAgICByZXR1cm4gKGludCkgKGRwICogZGVuc2l0eSArIDAuNWYpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIGxvYWRQcm9wZXJ0aWVzKCk7CisKKyAgICBzdGF0aWMgbmF0aXZlIHZvaWQgc2V0dXBTaGFkZXJzRGlza0NhY2hlKFN0cmluZyBjYWNoZUZpbGUpOworCisgICAgLyoqCisgICAgICogTm90aWZpZXMgRUdMIHRoYXQgdGhlIGZyYW1lIGlzIGFib3V0IHRvIGJlIHJlbmRlcmVkLgorICAgICAqIEBwYXJhbSBzaXplCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgYmVnaW5GcmFtZShpbnRbXSBzaXplKTsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgYWNjb3JkaW5nIHRvIHRoZSByZW5kZXJlci4KKyAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgb25seSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCisgICAgICogYXMgYSBjbG9jay4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBnZXRTeXN0ZW1UaW1lKCk7CisKKyAgICAvKioKKyAgICAgKiBQcmVzZXJ2ZXMgdGhlIGJhY2sgYnVmZmVyIG9mIHRoZSBjdXJyZW50IHN1cmZhY2UgYWZ0ZXIgYSBidWZmZXIgc3dhcC4KKyAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHNldHMgdGhlIEVHTF9TV0FQX0JFSEFWSU9SIGF0dHJpYnV0ZSBvZiB0aGUgY3VycmVudAorICAgICAqIHN1cmZhY2UgdG8gRUdMX0JVRkZFUl9QUkVTRVJWRUQuIENhbGxpbmcgdGhpcyBtZXRob2QgcmVxdWlyZXMgYW4gRUdMCisgICAgICogY29uZmlnIHRoYXQgc3VwcG9ydHMgRUdMX1NXQVBfQkVIQVZJT1JfUFJFU0VSVkVEX0JJVC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3dhcCBiZWhhdmlvciB3YXMgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQsCisgICAgICogICAgICAgICBmYWxzZSBvdGhlcndpc2UuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gcHJlc2VydmVCYWNrQnVmZmVyKCk7CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY3VycmVudCBzdXJmYWNlIHByZXNlcnZlcyBpdHMgYmFjayBidWZmZXIKKyAgICAgKiBhZnRlciBhIGJ1ZmZlciBzd2FwLgorICAgICAqCisgICAgICogQHJldHVybiBUcnVlLCBpZiB0aGUgc3VyZmFjZSdzIEVHTF9TV0FQX0JFSEFWSU9SIGlzIEVHTF9CVUZGRVJfUFJFU0VSVkVELAorICAgICAqICAgICAgICAgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gaXNCYWNrQnVmZmVyUHJlc2VydmVkKCk7CisKKyAgICBjbGFzcyBEcmF3UGVyZm9ybWFuY2VEYXRhUHJvdmlkZXIgZXh0ZW5kcyBHcmFwaERhdGFQcm92aWRlciB7CisgICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1HcmFwaFR5cGU7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVZlcnRpY2FsVW5pdDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUhvcml6b250YWxVbml0OworICAgICAgICBwcml2YXRlIGludCBtSG9yaXpvbnRhbE1hcmdpbjsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVRocmVzaG9sZFN0cm9rZTsKKworICAgICAgICBEcmF3UGVyZm9ybWFuY2VEYXRhUHJvdmlkZXIoaW50IGdyYXBoVHlwZSkgeworICAgICAgICAgICAgbUdyYXBoVHlwZSA9IGdyYXBoVHlwZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICB2b2lkIHByZXBhcmUoRGlzcGxheU1ldHJpY3MgbWV0cmljcykgeworICAgICAgICAgICAgZmluYWwgZmxvYXQgZGVuc2l0eSA9IG1ldHJpY3MuZGVuc2l0eTsKKworICAgICAgICAgICAgbVZlcnRpY2FsVW5pdCA9IGRwVG9QeChQUk9GSUxFX0RSQVdfRFBfUEVSX01TLCBkZW5zaXR5KTsKKyAgICAgICAgICAgIG1Ib3Jpem9udGFsVW5pdCA9IGRwVG9QeChQUk9GSUxFX0RSQVdfV0lEVEgsIGRlbnNpdHkpOworICAgICAgICAgICAgbUhvcml6b250YWxNYXJnaW4gPSBkcFRvUHgoUFJPRklMRV9EUkFXX01BUkdJTiwgZGVuc2l0eSk7CisgICAgICAgICAgICBtVGhyZXNob2xkU3Ryb2tlID0gZHBUb1B4KFBST0ZJTEVfRFJBV19USFJFU0hPTERfU1RST0tFX1dJRFRILCBkZW5zaXR5KTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBpbnQgZ2V0R3JhcGhUeXBlKCkgeworICAgICAgICAgICAgcmV0dXJuIG1HcmFwaFR5cGU7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgaW50IGdldFZlcnRpY2FsVW5pdFNpemUoKSB7CisgICAgICAgICAgICByZXR1cm4gbVZlcnRpY2FsVW5pdDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBpbnQgZ2V0SG9yaXpvbnRhbFVuaXRTaXplKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Ib3Jpem9udGFsVW5pdDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBpbnQgZ2V0SG9yaXpvbnRhVW5pdE1hcmdpbigpIHsKKyAgICAgICAgICAgIHJldHVybiBtSG9yaXpvbnRhbE1hcmdpbjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBmbG9hdFtdIGdldERhdGEoKSB7CisgICAgICAgICAgICByZXR1cm4gbVByb2ZpbGVEYXRhOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIGZsb2F0IGdldFRocmVzaG9sZCgpIHsKKyAgICAgICAgICAgIHJldHVybiAxNjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBpbnQgZ2V0RnJhbWVDb3VudCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtUHJvZmlsZURhdGEubGVuZ3RoIC8gUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIGludCBnZXRFbGVtZW50Q291bnQoKSB7CisgICAgICAgICAgICByZXR1cm4gUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIGludCBnZXRDdXJyZW50RnJhbWUoKSB7CisgICAgICAgICAgICByZXR1cm4gbVByb2ZpbGVDdXJyZW50RnJhbWUgLyBQUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlQ7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCBzZXR1cEdyYXBoUGFpbnQoUGFpbnQgcGFpbnQsIGludCBlbGVtZW50SW5kZXgpIHsKKyAgICAgICAgICAgIHBhaW50LnNldENvbG9yKFBST0ZJTEVfRFJBV19DT0xPUlNbZWxlbWVudEluZGV4XSk7CisgICAgICAgICAgICBpZiAobUdyYXBoVHlwZSA9PSBHUkFQSF9UWVBFX0xJTkVTKSBwYWludC5zZXRTdHJva2VXaWR0aChtVGhyZXNob2xkU3Ryb2tlKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICB2b2lkIHNldHVwVGhyZXNob2xkUGFpbnQoUGFpbnQgcGFpbnQpIHsKKyAgICAgICAgICAgIHBhaW50LnNldENvbG9yKFBST0ZJTEVfRFJBV19USFJFU0hPTERfQ09MT1IpOworICAgICAgICAgICAgcGFpbnQuc2V0U3Ryb2tlV2lkdGgobVRocmVzaG9sZFN0cm9rZSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCBzZXR1cEN1cnJlbnRGcmFtZVBhaW50KFBhaW50IHBhaW50KSB7CisgICAgICAgICAgICBwYWludC5zZXRDb2xvcihQUk9GSUxFX0RSQVdfQ1VSUkVOVF9GUkFNRV9DT0xPUik7CisgICAgICAgICAgICBpZiAobUdyYXBoVHlwZSA9PSBHUkFQSF9UWVBFX0xJTkVTKSBwYWludC5zZXRTdHJva2VXaWR0aChtVGhyZXNob2xkU3Ryb2tlKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSGFwdGljRmVlZGJhY2tDb25zdGFudHMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSGFwdGljRmVlZGJhY2tDb25zdGFudHMuamF2YQppbmRleCA4ZjQwMjYwLi4yNmY0N2Y5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0hhcHRpY0ZlZWRiYWNrQ29uc3RhbnRzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9IYXB0aWNGZWVkYmFja0NvbnN0YW50cy5qYXZhCkBAIC00MSw2ICs0MSwxMSBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtFWUJPQVJEX1RBUCA9IDM7CiAKICAgICAvKioKKyAgICAgKiBUaGUgdXNlciBoYXMgcHJlc3NlZCBlaXRoZXIgYW4gaG91ciBvciBtaW51dGUgdGljayBvZiBhIENsb2NrLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMT0NLX1RJQ0sgPSA0OworCisgICAgLyoqCiAgICAgICogVGhpcyBpcyBhIHByaXZhdGUgY29uc3RhbnQuICBGZWVsIGZyZWUgdG8gcmVudW1iZXIgYXMgZGVzaXJlZC4KICAgICAgKiBAaGlkZQogICAgICAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9IYXJkd2FyZUNhbnZhcy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9IYXJkd2FyZUNhbnZhcy5qYXZhCmluZGV4IDI1OWUxY2QuLmQyM2M3NzAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSGFyZHdhcmVDYW52YXMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0hhcmR3YXJlQ2FudmFzLmphdmEKQEAgLTExMiwxNiArMTEyLDYgQEAKICAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGRyYXdEaXNwbGF5TGlzdChEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgUmVjdCBkaXJ0eSwgaW50IGZsYWdzKTsKIAogICAgIC8qKgotICAgICAqIE91dHB1dHMgdGhlIHNwZWNpZmllZCBkaXNwbGF5IGxpc3QgdG8gdGhlIGxvZy4gVGhpcyBtZXRob2QgZXhpc3RzIGZvciB1c2UgYnkKLSAgICAgKiB0b29scyB0byBvdXRwdXQgZGlzcGxheSBsaXN0cyBmb3Igc2VsZWN0ZWQgbm9kZXMgdG8gdGhlIGxvZy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkaXNwbGF5TGlzdCBUaGUgZGlzcGxheSBsaXN0IHRvIGJlIGxvZ2dlZC4KLSAgICAgKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgYWJzdHJhY3Qgdm9pZCBvdXRwdXREaXNwbGF5TGlzdChEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCk7Ci0KLSAgICAvKioKICAgICAgKiBEcmF3cyB0aGUgc3BlY2lmaWVkIGxheWVyIG9udG8gdGhpcyBjYW52YXMuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbGF5ZXIgVGhlIGxheWVyIHRvIGNvbXBvc2l0ZSBvbiB0aGlzIGNhbnZhcwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9IYXJkd2FyZVJlbmRlcmVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0hhcmR3YXJlUmVuZGVyZXIuamF2YQppbmRleCBmMjE1MTg5Li40MzRkNDczIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0hhcmR3YXJlUmVuZGVyZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0hhcmR3YXJlUmVuZGVyZXIuamF2YQpAQCAtMTYsNDEgKzE2LDE0IEBACiAKIHBhY2thZ2UgYW5kcm9pZC52aWV3OwogCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudENhbGxiYWNrczI7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkVHTDE0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMVXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuTWFuYWdlZEVHTENvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwotaW1wb3J0IGFuZHJvaWQub3MuVHJhY2U7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2UuT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb247CiAKLWltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuZ2xlc19qbmkuRUdMSW1wbDsKLQotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMDsKLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTE7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTENvbmZpZzsKLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMQ29udGV4dDsKLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMRGlzcGxheTsKLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMU3VyZmFjZTsKLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5vcGVuZ2xlcy5HTDsKLQogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLlJlZW50cmFudExvY2s7Ci0KLWltcG9ydCBzdGF0aWMgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwLio7CiAKIC8qKgogICogSW50ZXJmYWNlIGZvciByZW5kZXJpbmcgYSB2aWV3IGhpZXJhcmNoeSB1c2luZyBoYXJkd2FyZSBhY2NlbGVyYXRpb24uCkBAIC02NiwxMyArMzksNiBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDQUNIRV9QQVRIX1NIQURFUlMgPSAiY29tLmFuZHJvaWQub3BlbmdsLnNoYWRlcnNfY2FjaGUiOwogCiAgICAgLyoqCi0gICAgICogVHVybiBvbiB0byBvbmx5IHJlZnJlc2ggdGhlIHBhcnRzIG9mIHRoZSBzY3JlZW4gdGhhdCBuZWVkIHVwZGF0aW5nLgotICAgICAqIFdoZW4gdHVybmVkIG9uIHRoZSBwcm9wZXJ0eSBkZWZpbmVkIGJ5IHtAbGluayAjUkVOREVSX0RJUlRZX1JFR0lPTlNfUFJPUEVSVFl9Ci0gICAgICogbXVzdCBhbHNvIGhhdmUgdGhlIHZhbHVlICJ0cnVlIi4KLSAgICAgKi8KLSAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBSRU5ERVJfRElSVFlfUkVHSU9OUyA9IHRydWU7Ci0KLSAgICAvKioKICAgICAgKiBTeXN0ZW0gcHJvcGVydHkgdXNlZCB0byBlbmFibGUgb3IgZGlzYWJsZSBkaXJ0eSByZWdpb25zIGludmFsaWRhdGlvbi4KICAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgcXVlcmllZCBpZiB7QGxpbmsgI1JFTkRFUl9ESVJUWV9SRUdJT05TfSBpcyB0cnVlLgogICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgaXMgYXNzdW1lZCB0byBiZSB0cnVlLgpAQCAtMjIyLDE1ICsxODgsOCBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzU3lzdGVtUmVuZGVyZXJEaXNhYmxlZCA9IGZhbHNlOwogCi0gICAgLyoqCi0gICAgICogTnVtYmVyIG9mIGZyYW1lcyB0byBwcm9maWxlLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX01BWF9GUkFNRVMgPSAxMjg7Ci0KLSAgICAvKioKLSAgICAgKiBOdW1iZXIgb2YgZmxvYXRzIHBlciBwcm9maWxlZCBmcmFtZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UID0gMzsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc1VzZVJlbmRlclRocmVhZCA9IGZhbHNlOwogCiAgICAgcHJpdmF0ZSBib29sZWFuIG1FbmFibGVkOwogICAgIHByaXZhdGUgYm9vbGVhbiBtUmVxdWVzdGVkID0gdHJ1ZTsKQEAgLTM1MCwxMyArMzA5LDYgQEAKICAgICBhYnN0cmFjdCBpbnQgZ2V0SGVpZ2h0KCk7CiAKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNhbnZhcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBIYXJkd2FyZVJlbmRlcmVyLgotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgY3VycmVudCBIYXJkd2FyZUNhbnZhcwotICAgICAqLwotICAgIGFic3RyYWN0IEhhcmR3YXJlQ2FudmFzIGdldENhbnZhcygpOwotCi0gICAgLyoqCiAgICAgICogT3V0cHV0cyBleHRyYSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCiAgICAgICogQHBhcmFtIHB3CiAgICAgICovCkBAIC0zNzksOSArMzMxLDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVHJ1ZSBpZiBhIHByb3BlcnR5IGhhcyBjaGFuZ2VkLgogICAgICAqLwotICAgIGFic3RyYWN0IGJvb2xlYW4gbG9hZFN5c3RlbVByb3BlcnRpZXMoU3VyZmFjZSBzdXJmYWNlKTsKLQotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5Mb2FkUHJvcGVydGllcygpOworICAgIGFic3RyYWN0IGJvb2xlYW4gbG9hZFN5c3RlbVByb3BlcnRpZXMoKTsKIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRpcmVjdG9yeSB0byB1c2UgYXMgYSBwZXJzaXN0ZW50IHN0b3JhZ2UgZm9yIGhhcmR3YXJlIHJlbmRlcmluZwpAQCAtMzkyLDYwICszNDIsOSBAQAogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwRGlza0NhY2hlKEZpbGUgY2FjaGVEaXIpIHsKLSAgICAgICAgblNldHVwU2hhZGVyc0Rpc2tDYWNoZShuZXcgRmlsZShjYWNoZURpciwgQ0FDSEVfUEFUSF9TSEFERVJTKS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgICAgIEdMUmVuZGVyZXIuc2V0dXBTaGFkZXJzRGlza0NhY2hlKG5ldyBGaWxlKGNhY2hlRGlyLCBDQUNIRV9QQVRIX1NIQURFUlMpLmdldEFic29sdXRlUGF0aCgpKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0dXBTaGFkZXJzRGlza0NhY2hlKFN0cmluZyBjYWNoZUZpbGUpOwotCi0gICAgLyoqCi0gICAgICogTm90aWZpZXMgRUdMIHRoYXQgdGhlIGZyYW1lIGlzIGFib3V0IHRvIGJlIHJlbmRlcmVkLgotICAgICAqIEBwYXJhbSBzaXplCi0gICAgICovCi0gICAgc3RhdGljIHZvaWQgYmVnaW5GcmFtZShpbnRbXSBzaXplKSB7Ci0gICAgICAgIG5CZWdpbkZyYW1lKHNpemUpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5CZWdpbkZyYW1lKGludFtdIHNpemUpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzeXN0ZW0gdGltZSBhY2NvcmRpbmcgdG8gdGhlIHJlbmRlcmVyLgotICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5IGFuZCBzaG91bGQgbm90IGJlIHVzZWQKLSAgICAgKiBhcyBhIGNsb2NrLgotICAgICAqLwotICAgIHN0YXRpYyBsb25nIGdldFN5c3RlbVRpbWUoKSB7Ci0gICAgICAgIHJldHVybiBuR2V0U3lzdGVtVGltZSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5HZXRTeXN0ZW1UaW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBQcmVzZXJ2ZXMgdGhlIGJhY2sgYnVmZmVyIG9mIHRoZSBjdXJyZW50IHN1cmZhY2UgYWZ0ZXIgYSBidWZmZXIgc3dhcC4KLSAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHNldHMgdGhlIEVHTF9TV0FQX0JFSEFWSU9SIGF0dHJpYnV0ZSBvZiB0aGUgY3VycmVudAotICAgICAqIHN1cmZhY2UgdG8gRUdMX0JVRkZFUl9QUkVTRVJWRUQuIENhbGxpbmcgdGhpcyBtZXRob2QgcmVxdWlyZXMgYW4gRUdMCi0gICAgICogY29uZmlnIHRoYXQgc3VwcG9ydHMgRUdMX1NXQVBfQkVIQVZJT1JfUFJFU0VSVkVEX0JJVC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3dhcCBiZWhhdmlvciB3YXMgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQsCi0gICAgICogICAgICAgICBmYWxzZSBvdGhlcndpc2UuCi0gICAgICovCi0gICAgc3RhdGljIGJvb2xlYW4gcHJlc2VydmVCYWNrQnVmZmVyKCkgewotICAgICAgICByZXR1cm4gblByZXNlcnZlQmFja0J1ZmZlcigpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5QcmVzZXJ2ZUJhY2tCdWZmZXIoKTsKLQotICAgIC8qKgotICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjdXJyZW50IHN1cmZhY2UgcHJlc2VydmVzIGl0cyBiYWNrIGJ1ZmZlcgotICAgICAqIGFmdGVyIGEgYnVmZmVyIHN3YXAuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRydWUsIGlmIHRoZSBzdXJmYWNlJ3MgRUdMX1NXQVBfQkVIQVZJT1IgaXMgRUdMX0JVRkZFUl9QUkVTRVJWRUQsCi0gICAgICogICAgICAgICBmYWxzZSBvdGhlcndpc2UKLSAgICAgKi8KLSAgICBzdGF0aWMgYm9vbGVhbiBpc0JhY2tCdWZmZXJQcmVzZXJ2ZWQoKSB7Ci0gICAgICAgIHJldHVybiBuSXNCYWNrQnVmZmVyUHJlc2VydmVkKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbklzQmFja0J1ZmZlclByZXNlcnZlZCgpOwotCiAgICAgLyoqCiAgICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwZWNpZmllZCBoYXJkd2FyZSBsYXllciBuZWVkcyB0byBiZSB1cGRhdGVkCiAgICAgICogYXMgc29vbiBhcyBwb3NzaWJsZS4KQEAgLTUwOSwxNiArNDA4LDE2IEBACiAgICAgICAgICAgICBSZWN0IGRpcnR5KTsKIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgZGlzcGxheSBsaXN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVjb3JkIGJhdGNoZXMgb2YKLSAgICAgKiBkcmF3aW5nIG9wZXJhdGlvbnMuCisgICAgICogVGVtcG9yYXJ5IGhvb2sgdG8gZHJhdyBhIGRpc3BsYXkgbGlzdCBkaXJlY3RseSwgb25seSB1c2VkIGlmIHNVc2VSZW5kZXJUaHJlYWQKKyAgICAgKiBpcyB0cnVlLgogICAgICAqCi0gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGRpc3BsYXkgbGlzdCwgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2UuIE1heSBiZSBudWxsLgotICAgICAqCi0gICAgICogQHJldHVybiBBIG5ldyBkaXNwbGF5IGxpc3QuCi0gICAgICoKLSAgICAgKiBAaGlkZQorICAgICAqIEBwYXJhbSBkaXNwbGF5TGlzdCBUaGUgZGlzcGxheSBsaXN0IHRvIGRyYXcKKyAgICAgKiBAcGFyYW0gYXR0YWNoSW5mbyBBdHRhY2hJbmZvIHRpZWQgdG8gdGhlIHNwZWNpZmllZCB2aWV3LgorICAgICAqIEBwYXJhbSBjYWxsYmFja3MgQ2FsbGJhY2tzIGludm9rZWQgd2hlbiBkcmF3aW5nIGhhcHBlbnMuCisgICAgICogQHBhcmFtIGRpcnR5IFRoZSBkaXJ0eSByZWN0YW5nbGUgdG8gdXBkYXRlLCBjYW4gYmUgbnVsbC4KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgRGlzcGxheUxpc3QgY3JlYXRlRGlzcGxheUxpc3QoU3RyaW5nIG5hbWUpOworICAgIGFic3RyYWN0IHZvaWQgZHJhd0Rpc3BsYXlMaXN0KERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbywKKyAgICAgICAgICAgIEhhcmR3YXJlRHJhd0NhbGxiYWNrcyBjYWxsYmFja3MsIFJlY3QgZGlydHkpOwogCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBoYXJkd2FyZSBsYXllci4gQSBoYXJkd2FyZSBsYXllciBidWlsdCBieSBjYWxsaW5nIHRoaXMKQEAgLTYyMSwxNyArNTIwLDE5IEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIGhhcmR3YXJlIHJlbmRlcmVyIHVzaW5nIE9wZW5HTC4KICAgICAgKgotICAgICAqIEBwYXJhbSBnbFZlcnNpb24gVGhlIHZlcnNpb24gb2YgT3BlbkdMIHRvIHVzZSAoMSBmb3IgT3BlbkdMIDEsIDExIGZvciBPcGVuR0wgMS4xLCBldGMuKQogICAgICAqIEBwYXJhbSB0cmFuc2x1Y2VudCBUcnVlIGlmIHRoZSBzdXJmYWNlIGlzIHRyYW5zbHVjZW50LCBmYWxzZSBvdGhlcndpc2UKICAgICAgKgogICAgICAqIEByZXR1cm4gQSBoYXJkd2FyZSByZW5kZXJlciBiYWNrZWQgYnkgT3BlbkdMLgogICAgICAqLwotICAgIHN0YXRpYyBIYXJkd2FyZVJlbmRlcmVyIGNyZWF0ZUdsUmVuZGVyZXIoaW50IGdsVmVyc2lvbiwgYm9vbGVhbiB0cmFuc2x1Y2VudCkgewotICAgICAgICBzd2l0Y2ggKGdsVmVyc2lvbikgewotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIHJldHVybiBHbDIwUmVuZGVyZXIuY3JlYXRlKHRyYW5zbHVjZW50KTsKKyAgICBzdGF0aWMgSGFyZHdhcmVSZW5kZXJlciBjcmVhdGUoYm9vbGVhbiB0cmFuc2x1Y2VudCkgeworICAgICAgICBIYXJkd2FyZVJlbmRlcmVyIHJlbmRlcmVyID0gbnVsbDsKKyAgICAgICAgaWYgKEdMRVMyMENhbnZhcy5pc0F2YWlsYWJsZSgpKSB7CisgICAgICAgICAgICByZW5kZXJlciA9IG5ldyBHTFJlbmRlcmVyKHRyYW5zbHVjZW50KTsKICAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmtub3duIEdMIHZlcnNpb246ICIgKyBnbFZlcnNpb24pOworICAgICAgICBpZiAocmVuZGVyZXIgIT0gbnVsbCAmJiBzVXNlUmVuZGVyVGhyZWFkKSB7CisgICAgICAgICAgICByZW5kZXJlciA9IG5ldyBUaHJlYWRlZFJlbmRlcmVyKChHTFJlbmRlcmVyKXJlbmRlcmVyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVuZGVyZXI7CiAgICAgfQogCiAgICAgLyoqCkBAIC02NTYsNyArNTU3LDcgQEAKICAgICAgKiAgICAgICAgICAgICAgc2VlIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50Q2FsbGJhY2tzfQogICAgICAqLwogICAgIHN0YXRpYyB2b2lkIHN0YXJ0VHJpbU1lbW9yeShpbnQgbGV2ZWwpIHsKLSAgICAgICAgR2wyMFJlbmRlcmVyLnN0YXJ0VHJpbU1lbW9yeShsZXZlbCk7CisgICAgICAgIEdMUmVuZGVyZXIuc3RhcnRUcmltTWVtb3J5KGxldmVsKTsKICAgICB9CiAKICAgICAvKioKQEAgLTY2NCw3ICs1NjUsNyBAQAogICAgICAqIGNsZWFudXAgc3BlY2lhbCByZXNvdXJjZXMgdXNlZCBieSB0aGUgbWVtb3J5IHRyaW1taW5nIHByb2Nlc3MuCiAgICAgICovCiAgICAgc3RhdGljIHZvaWQgZW5kVHJpbU1lbW9yeSgpIHsKLSAgICAgICAgR2wyMFJlbmRlcmVyLmVuZFRyaW1NZW1vcnkoKTsKKyAgICAgICAgR0xSZW5kZXJlci5lbmRUcmltTWVtb3J5KCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC03OTgsMTU1MyArNjk5LDQgQEAKICAgICAgICAgICovCiAgICAgICAgIGFic3RyYWN0IHZvaWQgc2V0dXBDdXJyZW50RnJhbWVQYWludChQYWludCBwYWludCk7CiAgICAgfQotCi0gICAgQFN1cHByZXNzV2FybmluZ3MoeyJkZXByZWNhdGlvbiJ9KQotICAgIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBHbFJlbmRlcmVyIGV4dGVuZHMgSGFyZHdhcmVSZW5kZXJlciB7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgU1VSRkFDRV9TVEFURV9FUlJPUiA9IDA7Ci0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgU1VSRkFDRV9TVEFURV9TVUNDRVNTID0gMTsKLSAgICAgICAgc3RhdGljIGZpbmFsIGludCBTVVJGQUNFX1NUQVRFX1VQREFURUQgPSAyOwotCi0gICAgICAgIHN0YXRpYyBmaW5hbCBpbnQgRlVOQ1RPUl9QUk9DRVNTX0RFTEFZID0gNDsKLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPRklMRV9EUkFXX01BUkdJTiA9IDA7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX0RSQVdfV0lEVEggPSAzOwotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBQUk9GSUxFX0RSQVdfQ09MT1JTID0geyAweGNmM2U2NmNjLCAweGNmZGMzOTEyLCAweGNmZTY5ODAwIH07Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX0RSQVdfQ1VSUkVOVF9GUkFNRV9DT0xPUiA9IDB4Y2Y1ZmFhNGQ7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQUk9GSUxFX0RSQVdfVEhSRVNIT0xEX0NPTE9SID0gMHhmZjVmYWE0ZDsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBST0ZJTEVfRFJBV19USFJFU0hPTERfU1RST0tFX1dJRFRIID0gMjsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBST0ZJTEVfRFJBV19EUF9QRVJfTVMgPSA3OwotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFZJU1VBTElaRVJTID0gewotICAgICAgICAgICAgICAgIFBST0ZJTEVfUFJPUEVSVFlfVklTVUFMSVpFX0JBUlMsCi0gICAgICAgICAgICAgICAgUFJPRklMRV9QUk9QRVJUWV9WSVNVQUxJWkVfTElORVMKLSAgICAgICAgfTsKLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBPVkVSRFJBVyA9IHsKLSAgICAgICAgICAgICAgICBPVkVSRFJBV19QUk9QRVJUWV9TSE9XLAotICAgICAgICAgICAgICAgIE9WRVJEUkFXX1BST1BFUlRZX0NPVU5UCi0gICAgICAgIH07Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPVkVSRFJBV19UWVBFX0NPVU5UID0gMTsKLQotICAgICAgICBzdGF0aWMgRUdMMTAgc0VnbDsKLSAgICAgICAgc3RhdGljIEVHTERpc3BsYXkgc0VnbERpc3BsYXk7Ci0gICAgICAgIHN0YXRpYyBFR0xDb25maWcgc0VnbENvbmZpZzsKLSAgICAgICAgc3RhdGljIGZpbmFsIE9iamVjdFtdIHNFZ2xMb2NrID0gbmV3IE9iamVjdFswXTsKLSAgICAgICAgaW50IG1XaWR0aCA9IC0xLCBtSGVpZ2h0ID0gLTE7Ci0KLSAgICAgICAgc3RhdGljIGZpbmFsIFRocmVhZExvY2FsPE1hbmFnZWRFR0xDb250ZXh0PiBzRWdsQ29udGV4dFN0b3JhZ2UKLSAgICAgICAgICAgICAgICA9IG5ldyBUaHJlYWRMb2NhbDxNYW5hZ2VkRUdMQ29udGV4dD4oKTsKLQotICAgICAgICBFR0xDb250ZXh0IG1FZ2xDb250ZXh0OwotICAgICAgICBUaHJlYWQgbUVnbFRocmVhZDsKLQotICAgICAgICBFR0xTdXJmYWNlIG1FZ2xTdXJmYWNlOwotCi0gICAgICAgIEdMIG1HbDsKLSAgICAgICAgSGFyZHdhcmVDYW52YXMgbUNhbnZhczsKLQotICAgICAgICBTdHJpbmcgbU5hbWU7Ci0KLSAgICAgICAgbG9uZyBtRnJhbWVDb3VudDsKLSAgICAgICAgUGFpbnQgbURlYnVnUGFpbnQ7Ci0KLSAgICAgICAgc3RhdGljIGJvb2xlYW4gc0RpcnR5UmVnaW9uczsKLSAgICAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gc0RpcnR5UmVnaW9uc1JlcXVlc3RlZDsKLSAgICAgICAgc3RhdGljIHsKLSAgICAgICAgICAgIFN0cmluZyBkaXJ0eVByb3BlcnR5ID0gU3lzdGVtUHJvcGVydGllcy5nZXQoUkVOREVSX0RJUlRZX1JFR0lPTlNfUFJPUEVSVFksICJ0cnVlIik7Ci0gICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBQb2ludGxlc3NCb29sZWFuRXhwcmVzc2lvbixDb25zdGFudENvbmRpdGlvbnMKLSAgICAgICAgICAgIHNEaXJ0eVJlZ2lvbnMgPSBSRU5ERVJfRElSVFlfUkVHSU9OUyAmJiAidHJ1ZSIuZXF1YWxzSWdub3JlQ2FzZShkaXJ0eVByb3BlcnR5KTsKLSAgICAgICAgICAgIHNEaXJ0eVJlZ2lvbnNSZXF1ZXN0ZWQgPSBzRGlydHlSZWdpb25zOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbGVhbiBtRGlydHlSZWdpb25zRW5hYmxlZDsKLSAgICAgICAgYm9vbGVhbiBtVXBkYXRlRGlydHlSZWdpb25zOwotCi0gICAgICAgIGJvb2xlYW4gbVByb2ZpbGVFbmFibGVkOwotICAgICAgICBpbnQgbVByb2ZpbGVWaXN1YWxpemVyVHlwZSA9IC0xOwotICAgICAgICBmbG9hdFtdIG1Qcm9maWxlRGF0YTsKLSAgICAgICAgUmVlbnRyYW50TG9jayBtUHJvZmlsZUxvY2s7Ci0gICAgICAgIGludCBtUHJvZmlsZUN1cnJlbnRGcmFtZSA9IC1QUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlQ7Ci0KLSAgICAgICAgR3JhcGhEYXRhUHJvdmlkZXIgbURlYnVnRGF0YVByb3ZpZGVyOwotICAgICAgICBmbG9hdFtdW10gbVByb2ZpbGVTaGFwZXM7Ci0gICAgICAgIFBhaW50IG1Qcm9maWxlUGFpbnQ7Ci0KLSAgICAgICAgYm9vbGVhbiBtRGVidWdEaXJ0eVJlZ2lvbnM7Ci0gICAgICAgIGludCBtRGVidWdPdmVyZHJhdyA9IC0xOwotICAgICAgICBIYXJkd2FyZUxheWVyIG1EZWJ1Z092ZXJkcmF3TGF5ZXI7Ci0gICAgICAgIFBhaW50IG1EZWJ1Z092ZXJkcmF3UGFpbnQ7Ci0KLSAgICAgICAgZmluYWwgaW50IG1HbFZlcnNpb247Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gbVRyYW5zbHVjZW50OwotCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBtRGVzdHJveWVkOwotCi0gICAgICAgIHByaXZhdGUgZmluYWwgUmVjdCBtUmVkcmF3Q2xpcCA9IG5ldyBSZWN0KCk7Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnRbXSBtU3VyZmFjZVNpemUgPSBuZXcgaW50WzJdOwotICAgICAgICBwcml2YXRlIGZpbmFsIEZ1bmN0b3JzUnVubmFibGUgbUZ1bmN0b3JzUnVubmFibGUgPSBuZXcgRnVuY3RvcnNSdW5uYWJsZSgpOwotCi0gICAgICAgIHByaXZhdGUgbG9uZyBtRHJhd0RlbHRhID0gTG9uZy5NQVhfVkFMVUU7Ci0KLSAgICAgICAgR2xSZW5kZXJlcihpbnQgZ2xWZXJzaW9uLCBib29sZWFuIHRyYW5zbHVjZW50KSB7Ci0gICAgICAgICAgICBtR2xWZXJzaW9uID0gZ2xWZXJzaW9uOwotICAgICAgICAgICAgbVRyYW5zbHVjZW50ID0gdHJhbnNsdWNlbnQ7Ci0KLSAgICAgICAgICAgIGxvYWRTeXN0ZW1Qcm9wZXJ0aWVzKG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIGJvb2xlYW4gbG9hZFN5c3RlbVByb3BlcnRpZXMoU3VyZmFjZSBzdXJmYWNlKSB7Ci0gICAgICAgICAgICBib29sZWFuIHZhbHVlOwotICAgICAgICAgICAgYm9vbGVhbiBjaGFuZ2VkID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIFN0cmluZyBwcm9maWxpbmcgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldChQUk9GSUxFX1BST1BFUlRZKTsKLSAgICAgICAgICAgIGludCBncmFwaFR5cGUgPSBzZWFyY2goVklTVUFMSVpFUlMsIHByb2ZpbGluZyk7Ci0gICAgICAgICAgICB2YWx1ZSA9IGdyYXBoVHlwZSA+PSAwOwotCi0gICAgICAgICAgICBpZiAoZ3JhcGhUeXBlICE9IG1Qcm9maWxlVmlzdWFsaXplclR5cGUpIHsKLSAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBtUHJvZmlsZVZpc3VhbGl6ZXJUeXBlID0gZ3JhcGhUeXBlOwotCi0gICAgICAgICAgICAgICAgbVByb2ZpbGVTaGFwZXMgPSBudWxsOwotICAgICAgICAgICAgICAgIG1Qcm9maWxlUGFpbnQgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZWJ1Z0RhdGFQcm92aWRlciA9IG5ldyBEcmF3UGVyZm9ybWFuY2VEYXRhUHJvdmlkZXIoZ3JhcGhUeXBlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtRGVidWdEYXRhUHJvdmlkZXIgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgb24tc2NyZWVuIHByb2ZpbGluZyBpcyBub3QgZW5hYmxlZCwgd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyCi0gICAgICAgICAgICAvLyBjb25zb2xlIHByb2ZpbGluZyBvbmx5IGlzIGVuYWJsZWQKLSAgICAgICAgICAgIGlmICghdmFsdWUpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IEJvb2xlYW4ucGFyc2VCb29sZWFuKHByb2ZpbGluZyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBtUHJvZmlsZUVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBtUHJvZmlsZUVuYWJsZWQgPSB2YWx1ZTsKLQotICAgICAgICAgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoTE9HX1RBRywgIlByb2ZpbGluZyBoYXJkd2FyZSByZW5kZXJlciIpOwotCi0gICAgICAgICAgICAgICAgICAgIGludCBtYXhQcm9maWxlRnJhbWVzID0gU3lzdGVtUHJvcGVydGllcy5nZXRJbnQoUFJPRklMRV9NQVhGUkFNRVNfUFJPUEVSVFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPRklMRV9NQVhfRlJBTUVTKTsKLSAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVEYXRhID0gbmV3IGZsb2F0W21heFByb2ZpbGVGcmFtZXMgKiBQUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlRdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Qcm9maWxlRGF0YS5sZW5ndGg7IGkgKz0gUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGFbaV0gPSBtUHJvZmlsZURhdGFbaSArIDFdID0gbVByb2ZpbGVEYXRhW2kgKyAyXSA9IC0xOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVMb2NrID0gbmV3IFJlZW50cmFudExvY2soKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGEgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZUxvY2sgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZVZpc3VhbGl6ZXJUeXBlID0gLTE7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbVByb2ZpbGVDdXJyZW50RnJhbWUgPSAtUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YWx1ZSA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0Qm9vbGVhbihERUJVR19ESVJUWV9SRUdJT05TX1BST1BFUlRZLCBmYWxzZSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgIT0gbURlYnVnRGlydHlSZWdpb25zKSB7Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbURlYnVnRGlydHlSZWdpb25zID0gdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAobURlYnVnRGlydHlSZWdpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5kKExPR19UQUcsICJEZWJ1Z2dpbmcgZGlydHkgcmVnaW9ucyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nIG92ZXJkcmF3ID0gU3lzdGVtUHJvcGVydGllcy5nZXQoSGFyZHdhcmVSZW5kZXJlci5ERUJVR19PVkVSRFJBV19QUk9QRVJUWSk7Ci0gICAgICAgICAgICBpbnQgZGVidWdPdmVyZHJhdyA9IHNlYXJjaChPVkVSRFJBVywgb3ZlcmRyYXcpOwotICAgICAgICAgICAgaWYgKGRlYnVnT3ZlcmRyYXcgIT0gbURlYnVnT3ZlcmRyYXcpIHsKLSAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhdyA9IGRlYnVnT3ZlcmRyYXc7Ci0KLSAgICAgICAgICAgICAgICBpZiAobURlYnVnT3ZlcmRyYXcgIT0gT1ZFUkRSQVdfVFlQRV9DT1VOVCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobURlYnVnT3ZlcmRyYXdMYXllciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd0xheWVyLmRlc3Ryb3koKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3TGF5ZXIgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdQYWludCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChuTG9hZFByb3BlcnRpZXMoKSkgewotICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGludCBzZWFyY2goU3RyaW5nW10gdmFsdWVzLCBTdHJpbmcgdmFsdWUpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlc1tpXS5lcXVhbHModmFsdWUpKSByZXR1cm4gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICB2b2lkIGR1bXBHZnhJbmZvKFByaW50V3JpdGVyIHB3KSB7Ci0gICAgICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnRmKCJcblx0RHJhd1x0UHJvY2Vzc1x0RXhlY3V0ZVxuIik7Ci0KLSAgICAgICAgICAgICAgICBtUHJvZmlsZUxvY2subG9jaygpOwotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVByb2ZpbGVEYXRhLmxlbmd0aDsgaSArPSBQUk9GSUxFX0ZSQU1FX0RBVEFfQ09VTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtUHJvZmlsZURhdGFbaV0gPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludGYoIlx0JTMuMmZcdCUzLjJmXHQlMy4yZlxuIiwgbVByb2ZpbGVEYXRhW2ldLCBtUHJvZmlsZURhdGFbaSArIDFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGFbaSArIDJdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlRGF0YVtpXSA9IG1Qcm9maWxlRGF0YVtpICsgMV0gPSBtUHJvZmlsZURhdGFbaSArIDJdID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVDdXJyZW50RnJhbWUgPSBtUHJvZmlsZURhdGEubGVuZ3RoOwotICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlTG9jay51bmxvY2soKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgbG9uZyBnZXRGcmFtZUNvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIG1GcmFtZUNvdW50OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgcmVuZGVyZXIgaW5zdGFuY2UgY2FuIHRyYWNrIGFuZCB1cGRhdGUgZGlydHkgcmVnaW9ucy4KLSAgICAgICAgICovCi0gICAgICAgIGJvb2xlYW4gaGFzRGlydHlSZWdpb25zKCkgewotICAgICAgICAgICAgcmV0dXJuIG1EaXJ0eVJlZ2lvbnNFbmFibGVkOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENoZWNrcyBmb3IgT3BlbkdMIGVycm9ycy4gSWYgYW4gZXJyb3IgaGFzIG9jY3VyZWQsIHtAbGluayAjZGVzdHJveShib29sZWFuKX0KLSAgICAgICAgICogaXMgaW52b2tlZCBhbmQgdGhlIHJlcXVlc3RlZCBmbGFnIGlzIHR1cm5lZCBvZmYuIFRoZSBlcnJvciBjb2RlIGlzCi0gICAgICAgICAqIGFsc28gbG9nZ2VkIGFzIGEgd2FybmluZy4KLSAgICAgICAgICovCi0gICAgICAgIHZvaWQgY2hlY2tFZ2xFcnJvcnMoKSB7Ci0gICAgICAgICAgICBpZiAoaXNFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBjaGVja0VnbEVycm9yc0ZvcmNlZCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrRWdsRXJyb3JzRm9yY2VkKCkgewotICAgICAgICAgICAgaW50IGVycm9yID0gc0VnbC5lZ2xHZXRFcnJvcigpOwotICAgICAgICAgICAgaWYgKGVycm9yICE9IEVHTF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIGJhZCBoYXMgaGFwcGVuZWQgcmV2ZXJ0IHRvCi0gICAgICAgICAgICAgICAgLy8gbm9ybWFsIHJlbmRlcmluZy4KLSAgICAgICAgICAgICAgICBMb2cudyhMT0dfVEFHLCAiRUdMIGVycm9yOiAiICsgR0xVdGlscy5nZXRFR0xFcnJvclN0cmluZyhlcnJvcikpOwotICAgICAgICAgICAgICAgIGZhbGxiYWNrKGVycm9yICE9IEVHTDExLkVHTF9DT05URVhUX0xPU1QpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGZhbGxiYWNrKGJvb2xlYW4gZmFsbGJhY2spIHsKLSAgICAgICAgICAgIGRlc3Ryb3kodHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoZmFsbGJhY2spIHsKLSAgICAgICAgICAgICAgICAvLyB3ZSdsbCB0cnkgYWdhaW4gaWYgaXQgd2FzIGNvbnRleHQgbG9zdAotICAgICAgICAgICAgICAgIHNldFJlcXVlc3RlZChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIk1vdW50YWluIFZpZXcsIHdlJ3ZlIGhhZCBhIHByb2JsZW0gaGVyZS4gIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiU3dpdGNoaW5nIGJhY2sgdG8gc29mdHdhcmUgcmVuZGVyaW5nLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIGJvb2xlYW4gaW5pdGlhbGl6ZShTdXJmYWNlIHN1cmZhY2UpIHRocm93cyBPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBpZiAoaXNSZXF1ZXN0ZWQoKSAmJiAhaXNFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIGNvbnRleHRDcmVhdGVkID0gaW5pdGlhbGl6ZUVnbCgpOwotICAgICAgICAgICAgICAgIG1HbCA9IGNyZWF0ZUVnbFN1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgICAgICAgICAgICAgbURlc3Ryb3llZCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgaWYgKG1HbCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBlcnIgPSBzRWdsLmVnbEdldEVycm9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gRUdMX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3kodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXF1ZXN0ZWQoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1DYW52YXMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DYW52YXMgPSBjcmVhdGVDYW52YXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2FudmFzLnNldE5hbWUobU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0RW5hYmxlZCh0cnVlKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHRDcmVhdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdEF0bGFzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbUNhbnZhcyAhPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICB2b2lkIHVwZGF0ZVN1cmZhY2UoU3VyZmFjZSBzdXJmYWNlKSB0aHJvd3MgT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24gewotICAgICAgICAgICAgaWYgKGlzUmVxdWVzdGVkKCkgJiYgaXNFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBjcmVhdGVFZ2xTdXJmYWNlKHN1cmZhY2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYWJzdHJhY3QgSGFyZHdhcmVDYW52YXMgY3JlYXRlQ2FudmFzKCk7Ci0KLSAgICAgICAgYWJzdHJhY3QgaW50W10gZ2V0Q29uZmlnKGJvb2xlYW4gZGlydHlSZWdpb25zKTsKLQotICAgICAgICBib29sZWFuIGluaXRpYWxpemVFZ2woKSB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHNFZ2xMb2NrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNFZ2wgPT0gbnVsbCAmJiBzRWdsQ29uZmlnID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc0VnbCA9IChFR0wxMCkgRUdMQ29udGV4dC5nZXRFR0woKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdG8gdGhlIGRlZmF1bHQgZGlzcGxheS4KLSAgICAgICAgICAgICAgICAgICAgc0VnbERpc3BsYXkgPSBzRWdsLmVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNFZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZWdsR2V0RGlzcGxheSBmYWlsZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEdMVXRpbHMuZ2V0RUdMRXJyb3JTdHJpbmcoc0VnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gbm93IGluaXRpYWxpemUgRUdMIGZvciB0aGF0IGRpc3BsYXkKLSAgICAgICAgICAgICAgICAgICAgaW50W10gdmVyc2lvbiA9IG5ldyBpbnRbMl07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc0VnbC5lZ2xJbml0aWFsaXplKHNFZ2xEaXNwbGF5LCB2ZXJzaW9uKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbEluaXRpYWxpemUgZmFpbGVkICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTFV0aWxzLmdldEVHTEVycm9yU3RyaW5nKHNFZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgY2hlY2tFZ2xFcnJvcnNGb3JjZWQoKTsKLQotICAgICAgICAgICAgICAgICAgICBzRWdsQ29uZmlnID0gbG9hZEVnbENvbmZpZygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTWFuYWdlZEVHTENvbnRleHQgbWFuYWdlZENvbnRleHQgPSBzRWdsQ29udGV4dFN0b3JhZ2UuZ2V0KCk7Ci0gICAgICAgICAgICBtRWdsQ29udGV4dCA9IG1hbmFnZWRDb250ZXh0ICE9IG51bGwgPyBtYW5hZ2VkQ29udGV4dC5nZXRDb250ZXh0KCkgOiBudWxsOwotICAgICAgICAgICAgbUVnbFRocmVhZCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0KLSAgICAgICAgICAgIGlmIChtRWdsQ29udGV4dCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUVnbENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHNFZ2wsIHNFZ2xEaXNwbGF5LCBzRWdsQ29uZmlnKTsKLSAgICAgICAgICAgICAgICBzRWdsQ29udGV4dFN0b3JhZ2Uuc2V0KGNyZWF0ZU1hbmFnZWRDb250ZXh0KG1FZ2xDb250ZXh0KSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgRUdMQ29uZmlnIGxvYWRFZ2xDb25maWcoKSB7Ci0gICAgICAgICAgICBFR0xDb25maWcgZWdsQ29uZmlnID0gY2hvb3NlRWdsQ29uZmlnKCk7Ci0gICAgICAgICAgICBpZiAoZWdsQ29uZmlnID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCB0byB1c2UgRUdMX1NXQVBfQkVIQVZJT1JfUFJFU0VSVkVEX0JJVCwgdHJ5IGFnYWluIHdpdGhvdXQKLSAgICAgICAgICAgICAgICBpZiAoc0RpcnR5UmVnaW9ucykgewotICAgICAgICAgICAgICAgICAgICBzRGlydHlSZWdpb25zID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGVnbENvbmZpZyA9IGNob29zZUVnbENvbmZpZygpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZWdsQ29uZmlnID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJlZ2xDb25maWcgbm90IGluaXRpYWxpemVkIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZWdsQ29uZmlnIG5vdCBpbml0aWFsaXplZCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBlZ2xDb25maWc7Ci0gICAgICAgIH0KLQotICAgICAgICBhYnN0cmFjdCBNYW5hZ2VkRUdMQ29udGV4dCBjcmVhdGVNYW5hZ2VkQ29udGV4dChFR0xDb250ZXh0IGVnbENvbnRleHQpOwotCi0gICAgICAgIHByaXZhdGUgRUdMQ29uZmlnIGNob29zZUVnbENvbmZpZygpIHsKLSAgICAgICAgICAgIEVHTENvbmZpZ1tdIGNvbmZpZ3MgPSBuZXcgRUdMQ29uZmlnWzFdOwotICAgICAgICAgICAgaW50W10gY29uZmlnc0NvdW50ID0gbmV3IGludFsxXTsKLSAgICAgICAgICAgIGludFtdIGNvbmZpZ1NwZWMgPSBnZXRDb25maWcoc0RpcnR5UmVnaW9ucyk7Ci0KLSAgICAgICAgICAgIC8vIERlYnVnCi0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgZGVidWcgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldChQUklOVF9DT05GSUdfUFJPUEVSVFksICIiKTsKLSAgICAgICAgICAgIGlmICgiYWxsIi5lcXVhbHNJZ25vcmVDYXNlKGRlYnVnKSkgewotICAgICAgICAgICAgICAgIHNFZ2wuZWdsQ2hvb3NlQ29uZmlnKHNFZ2xEaXNwbGF5LCBjb25maWdTcGVjLCBudWxsLCAwLCBjb25maWdzQ291bnQpOwotCi0gICAgICAgICAgICAgICAgRUdMQ29uZmlnW10gZGVidWdDb25maWdzID0gbmV3IEVHTENvbmZpZ1tjb25maWdzQ291bnRbMF1dOwotICAgICAgICAgICAgICAgIHNFZ2wuZWdsQ2hvb3NlQ29uZmlnKHNFZ2xEaXNwbGF5LCBjb25maWdTcGVjLCBkZWJ1Z0NvbmZpZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdzQ291bnRbMF0sIGNvbmZpZ3NDb3VudCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKEVHTENvbmZpZyBjb25maWcgOiBkZWJ1Z0NvbmZpZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRDb25maWcoY29uZmlnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc0VnbC5lZ2xDaG9vc2VDb25maWcoc0VnbERpc3BsYXksIGNvbmZpZ1NwZWMsIGNvbmZpZ3MsIDEsIGNvbmZpZ3NDb3VudCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJlZ2xDaG9vc2VDb25maWcgZmFpbGVkICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgR0xVdGlscy5nZXRFR0xFcnJvclN0cmluZyhzRWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnc0NvdW50WzBdID4gMCkgewotICAgICAgICAgICAgICAgIGlmICgiY2hvaWNlIi5lcXVhbHNJZ25vcmVDYXNlKGRlYnVnKSkgewotICAgICAgICAgICAgICAgICAgICBwcmludENvbmZpZyhjb25maWdzWzBdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ3NbMF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludENvbmZpZyhFR0xDb25maWcgY29uZmlnKSB7Ci0gICAgICAgICAgICBpbnRbXSB2YWx1ZSA9IG5ldyBpbnRbMV07Ci0KLSAgICAgICAgICAgIExvZy5kKExPR19UQUcsICJFR0wgY29uZmlndXJhdGlvbiAiICsgY29uZmlnICsgIjoiKTsKLQotICAgICAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX1JFRF9TSVpFLCB2YWx1ZSk7Ci0gICAgICAgICAgICBMb2cuZChMT0dfVEFHLCAiICBSRURfU0laRSA9ICIgKyB2YWx1ZVswXSk7Ci0KLSAgICAgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9HUkVFTl9TSVpFLCB2YWx1ZSk7Ci0gICAgICAgICAgICBMb2cuZChMT0dfVEFHLCAiICBHUkVFTl9TSVpFID0gIiArIHZhbHVlWzBdKTsKLQotICAgICAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX0JMVUVfU0laRSwgdmFsdWUpOwotICAgICAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgQkxVRV9TSVpFID0gIiArIHZhbHVlWzBdKTsKLQotICAgICAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX0FMUEhBX1NJWkUsIHZhbHVlKTsKLSAgICAgICAgICAgIExvZy5kKExPR19UQUcsICIgIEFMUEhBX1NJWkUgPSAiICsgdmFsdWVbMF0pOwotCi0gICAgICAgICAgICBzRWdsLmVnbEdldENvbmZpZ0F0dHJpYihzRWdsRGlzcGxheSwgY29uZmlnLCBFR0xfREVQVEhfU0laRSwgdmFsdWUpOwotICAgICAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgREVQVEhfU0laRSA9ICIgKyB2YWx1ZVswXSk7Ci0KLSAgICAgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9TVEVOQ0lMX1NJWkUsIHZhbHVlKTsKLSAgICAgICAgICAgIExvZy5kKExPR19UQUcsICIgIFNURU5DSUxfU0laRSA9ICIgKyB2YWx1ZVswXSk7Ci0KLSAgICAgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9TQU1QTEVfQlVGRkVSUywgdmFsdWUpOwotICAgICAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgU0FNUExFX0JVRkZFUlMgPSAiICsgdmFsdWVbMF0pOwotCi0gICAgICAgICAgICBzRWdsLmVnbEdldENvbmZpZ0F0dHJpYihzRWdsRGlzcGxheSwgY29uZmlnLCBFR0xfU0FNUExFUywgdmFsdWUpOwotICAgICAgICAgICAgTG9nLmQoTE9HX1RBRywgIiAgU0FNUExFUyA9ICIgKyB2YWx1ZVswXSk7Ci0KLSAgICAgICAgICAgIHNFZ2wuZWdsR2V0Q29uZmlnQXR0cmliKHNFZ2xEaXNwbGF5LCBjb25maWcsIEVHTF9TVVJGQUNFX1RZUEUsIHZhbHVlKTsKLSAgICAgICAgICAgIExvZy5kKExPR19UQUcsICIgIFNVUkZBQ0VfVFlQRSA9IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcodmFsdWVbMF0pKTsKLQotICAgICAgICAgICAgc0VnbC5lZ2xHZXRDb25maWdBdHRyaWIoc0VnbERpc3BsYXksIGNvbmZpZywgRUdMX0NPTkZJR19DQVZFQVQsIHZhbHVlKTsKLSAgICAgICAgICAgIExvZy5kKExPR19UQUcsICIgIENPTkZJR19DQVZFQVQgPSAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHZhbHVlWzBdKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBHTCBjcmVhdGVFZ2xTdXJmYWNlKFN1cmZhY2Ugc3VyZmFjZSkgdGhyb3dzIE91dE9mUmVzb3VyY2VzRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHByZWNvbmRpdGlvbnMuCi0gICAgICAgICAgICBpZiAoc0VnbCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbCBub3QgaW5pdGlhbGl6ZWQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzRWdsRGlzcGxheSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbERpc3BsYXkgbm90IGluaXRpYWxpemVkIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc0VnbENvbmZpZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbENvbmZpZyBub3QgaW5pdGlhbGl6ZWQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChUaHJlYWQuY3VycmVudFRocmVhZCgpICE9IG1FZ2xUaHJlYWQpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJIYXJkd2FyZVJlbmRlcmVyIGNhbm5vdCBiZSB1c2VkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgImZyb20gbXVsdGlwbGUgdGhyZWFkcyIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJbiBjYXNlIHdlIG5lZWQgdG8gZGVzdHJveSBhbiBleGlzdGluZyBzdXJmYWNlCi0gICAgICAgICAgICBkZXN0cm95U3VyZmFjZSgpOwotCi0gICAgICAgICAgICAvLyBDcmVhdGUgYW4gRUdMIHN1cmZhY2Ugd2UgY2FuIHJlbmRlciBpbnRvLgotICAgICAgICAgICAgaWYgKCFjcmVhdGVTdXJmYWNlKHN1cmZhY2UpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGluaXRDYWNoZXMoKTsKLQotICAgICAgICAgICAgcmV0dXJuIG1FZ2xDb250ZXh0LmdldEdMKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZW5hYmxlRGlydHlSZWdpb25zKCkgewotICAgICAgICAgICAgLy8gSWYgbURpcnR5UmVnaW9ucyBpcyBzZXQsIHRoaXMgbWVhbnMgd2UgaGF2ZSBhbiBFR0wgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgLy8gd2l0aCBFR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklUIHNldAotICAgICAgICAgICAgaWYgKHNEaXJ0eVJlZ2lvbnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIShtRGlydHlSZWdpb25zRW5hYmxlZCA9IHByZXNlcnZlQmFja0J1ZmZlcigpKSkgewotICAgICAgICAgICAgICAgICAgICBMb2cudyhMT0dfVEFHLCAiQmFja2J1ZmZlciBjYW5ub3QgYmUgcHJlc2VydmVkIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChzRGlydHlSZWdpb25zUmVxdWVzdGVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgbURpcnR5UmVnaW9ucyBpcyBub3Qgc2V0LCBvdXIgRUdMIGNvbmZpZ3VyYXRpb24gZG9lcyBub3QKLSAgICAgICAgICAgICAgICAvLyBoYXZlIEVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQ7IGhvd2V2ZXIsIHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgLy8gc3dhcCBiZWhhdmlvciBtaWdodCBiZSBFR0xfQlVGRkVSX1BSRVNFUlZFRCwgd2hpY2ggbWVhbnMgd2UKLSAgICAgICAgICAgICAgICAvLyB3YW50IHRvIHNldCBtRGlydHlSZWdpb25zLiBXZSB0cnkgdG8gZG8gdGhpcyBvbmx5IGlmIGRpcnR5Ci0gICAgICAgICAgICAgICAgLy8gcmVnaW9ucyB3ZXJlIGluaXRpYWxseSByZXF1ZXN0ZWQgYXMgcGFydCBvZiB0aGUgZGV2aWNlCi0gICAgICAgICAgICAgICAgLy8gY29uZmlndXJhdGlvbiAoc2VlIFJFTkRFUl9ESVJUWV9SRUdJT05TKQotICAgICAgICAgICAgICAgIG1EaXJ0eVJlZ2lvbnNFbmFibGVkID0gaXNCYWNrQnVmZmVyUHJlc2VydmVkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBhYnN0cmFjdCB2b2lkIGluaXRDYWNoZXMoKTsKLSAgICAgICAgYWJzdHJhY3Qgdm9pZCBpbml0QXRsYXMoKTsKLQotICAgICAgICBFR0xDb250ZXh0IGNyZWF0ZUNvbnRleHQoRUdMMTAgZWdsLCBFR0xEaXNwbGF5IGVnbERpc3BsYXksIEVHTENvbmZpZyBlZ2xDb25maWcpIHsKLSAgICAgICAgICAgIGludFtdIGF0dHJpYnMgPSB7IEVHTDE0LkVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCBtR2xWZXJzaW9uLCBFR0xfTk9ORSB9OwotCi0gICAgICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBlZ2wuZWdsQ3JlYXRlQ29udGV4dChlZ2xEaXNwbGF5LCBlZ2xDb25maWcsIEVHTF9OT19DT05URVhULAotICAgICAgICAgICAgICAgICAgICBtR2xWZXJzaW9uICE9IDAgPyBhdHRyaWJzIDogbnVsbCk7Ci0gICAgICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsIHx8IGNvbnRleHQgPT0gRUdMX05PX0NPTlRFWFQpIHsKLSAgICAgICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBDb25zdGFudENvbmRpdGlvbnMKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgYW4gRUdMIGNvbnRleHQuIGVnbENyZWF0ZUNvbnRleHQgZmFpbGVkIHdpdGggZXJyb3I6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgR0xVdGlscy5nZXRFR0xFcnJvclN0cmluZyhzRWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCBkZXN0cm95KGJvb2xlYW4gZnVsbCkgewotICAgICAgICAgICAgaWYgKGZ1bGwgJiYgbUNhbnZhcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNhbnZhcyA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghaXNFbmFibGVkKCkgfHwgbURlc3Ryb3llZCkgewotICAgICAgICAgICAgICAgIHNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVzdHJveVN1cmZhY2UoKTsKLSAgICAgICAgICAgIHNldEVuYWJsZWQoZmFsc2UpOwotCi0gICAgICAgICAgICBtRGVzdHJveWVkID0gdHJ1ZTsKLSAgICAgICAgICAgIG1HbCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGRlc3Ryb3lTdXJmYWNlKCkgewotICAgICAgICAgICAgaWYgKG1FZ2xTdXJmYWNlICE9IG51bGwgJiYgbUVnbFN1cmZhY2UgIT0gRUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgICAgICAgICAgICBpZiAobUVnbFN1cmZhY2UuZXF1YWxzKHNFZ2wuZWdsR2V0Q3VycmVudFN1cmZhY2UoRUdMX0RSQVcpKSkgewotICAgICAgICAgICAgICAgICAgICBzRWdsLmVnbE1ha2VDdXJyZW50KHNFZ2xEaXNwbGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzRWdsLmVnbERlc3Ryb3lTdXJmYWNlKHNFZ2xEaXNwbGF5LCBtRWdsU3VyZmFjZSk7Ci0gICAgICAgICAgICAgICAgbUVnbFN1cmZhY2UgPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgaW52YWxpZGF0ZShTdXJmYWNlIHN1cmZhY2UpIHsKLSAgICAgICAgICAgIC8vIENhbmNlbHMgYW55IGV4aXN0aW5nIGJ1ZmZlciB0byBlbnN1cmUgd2UnbGwgZ2V0IGEgYnVmZmVyCi0gICAgICAgICAgICAvLyBvZiB0aGUgcmlnaHQgc2l6ZSBiZWZvcmUgd2UgY2FsbCBlZ2xTd2FwQnVmZmVycwotICAgICAgICAgICAgc0VnbC5lZ2xNYWtlQ3VycmVudChzRWdsRGlzcGxheSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0KLSAgICAgICAgICAgIGlmIChtRWdsU3VyZmFjZSAhPSBudWxsICYmIG1FZ2xTdXJmYWNlICE9IEVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICAgICAgICAgICAgc0VnbC5lZ2xEZXN0cm95U3VyZmFjZShzRWdsRGlzcGxheSwgbUVnbFN1cmZhY2UpOwotICAgICAgICAgICAgICAgIG1FZ2xTdXJmYWNlID0gbnVsbDsKLSAgICAgICAgICAgICAgICBzZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHN1cmZhY2UuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjcmVhdGVTdXJmYWNlKHN1cmZhY2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtVXBkYXRlRGlydHlSZWdpb25zID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIGlmIChtQ2FudmFzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlU3VyZmFjZShTdXJmYWNlIHN1cmZhY2UpIHsKLSAgICAgICAgICAgIG1FZ2xTdXJmYWNlID0gc0VnbC5lZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKHNFZ2xEaXNwbGF5LCBzRWdsQ29uZmlnLCBzdXJmYWNlLCBudWxsKTsKLQotICAgICAgICAgICAgaWYgKG1FZ2xTdXJmYWNlID09IG51bGwgfHwgbUVnbFN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgICAgICAgICAgICBpbnQgZXJyb3IgPSBzRWdsLmVnbEdldEVycm9yKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVycm9yID09IEVHTF9CQURfTkFUSVZFX1dJTkRPVykgewotICAgICAgICAgICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiY3JlYXRlV2luZG93U3VyZmFjZSByZXR1cm5lZCBFR0xfQkFEX05BVElWRV9XSU5ET1cuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImNyZWF0ZVdpbmRvd1N1cmZhY2UgZmFpbGVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgR0xVdGlscy5nZXRFR0xFcnJvclN0cmluZyhlcnJvcikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXNFZ2wuZWdsTWFrZUN1cnJlbnQoc0VnbERpc3BsYXksIG1FZ2xTdXJmYWNlLCBtRWdsU3VyZmFjZSwgbUVnbENvbnRleHQpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiZWdsTWFrZUN1cnJlbnQgZmFpbGVkICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgR0xVdGlscy5nZXRFR0xFcnJvclN0cmluZyhzRWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZW5hYmxlRGlydHlSZWdpb25zKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIGJvb2xlYW4gdmFsaWRhdGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tSZW5kZXJDb250ZXh0KCkgIT0gU1VSRkFDRV9TVEFURV9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICB2b2lkIHNldHVwKGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICAgICAgaWYgKHZhbGlkYXRlKCkpIHsKLSAgICAgICAgICAgICAgICBtQ2FudmFzLnNldFZpZXdwb3J0KHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgICAgIG1XaWR0aCA9IHdpZHRoOwotICAgICAgICAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgaW50IGdldFdpZHRoKCkgewotICAgICAgICAgICAgcmV0dXJuIG1XaWR0aDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBpbnQgZ2V0SGVpZ2h0KCkgewotICAgICAgICAgICAgcmV0dXJuIG1IZWlnaHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgSGFyZHdhcmVDYW52YXMgZ2V0Q2FudmFzKCkgewotICAgICAgICAgICAgcmV0dXJuIG1DYW52YXM7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICBtTmFtZSA9IG5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIGNhbkRyYXcoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUdsICE9IG51bGwgJiYgbUNhbnZhcyAhPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IG9uUHJlRHJhdyhSZWN0IGRpcnR5KSB7Ci0gICAgICAgICAgICByZXR1cm4gRGlzcGxheUxpc3QuU1RBVFVTX0RPTkU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIG9uUG9zdERyYXcoKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBjbGFzcyBGdW5jdG9yc1J1bm5hYmxlIGltcGxlbWVudHMgUnVubmFibGUgewotICAgICAgICAgICAgVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm87Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgIGZpbmFsIEhhcmR3YXJlUmVuZGVyZXIgcmVuZGVyZXIgPSBhdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyOwotICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlciA9PSBudWxsIHx8ICFyZW5kZXJlci5pc0VuYWJsZWQoKSB8fCByZW5kZXJlciAhPSBHbFJlbmRlcmVyLnRoaXMpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChjaGVja1JlbmRlckNvbnRleHQoKSAhPSBTVVJGQUNFX1NUQVRFX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBzdGF0dXMgPSBtQ2FudmFzLmludm9rZUZ1bmN0b3JzKG1SZWRyYXdDbGlwKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlRnVuY3RvclN0YXR1cyhhdHRhY2hJbmZvLCBzdGF0dXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICB2b2lkIGRyYXcoVmlldyB2aWV3LCBWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbywgSGFyZHdhcmVEcmF3Q2FsbGJhY2tzIGNhbGxiYWNrcywKLSAgICAgICAgICAgICAgICBSZWN0IGRpcnR5KSB7Ci0gICAgICAgICAgICBpZiAoY2FuRHJhdygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNEaXJ0eVJlZ2lvbnMoKSkgewotICAgICAgICAgICAgICAgICAgICBkaXJ0eSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubUlnbm9yZURpcnR5U3RhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubURyYXdpbmdUaW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCk7Ci0KLSAgICAgICAgICAgICAgICB2aWV3Lm1Qcml2YXRlRmxhZ3MgfD0gVmlldy5QRkxBR19EUkFXTjsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBhbHJlYWR5IG9uIHRoZSBjb3JyZWN0IHRocmVhZAotICAgICAgICAgICAgICAgIGZpbmFsIGludCBzdXJmYWNlU3RhdGUgPSBjaGVja1JlbmRlckNvbnRleHRVbnNhZmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc3VyZmFjZVN0YXRlICE9IFNVUkZBQ0VfU1RBVEVfRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgSGFyZHdhcmVDYW52YXMgY2FudmFzID0gbUNhbnZhczsKLSAgICAgICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tSGFyZHdhcmVDYW52YXMgPSBjYW52YXM7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVMb2NrLmxvY2soKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRpcnR5ID0gYmVnaW5GcmFtZShjYW52YXMsIGRpcnR5LCBzdXJmYWNlU3RhdGUpOwotCi0gICAgICAgICAgICAgICAgICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0ID0gYnVpbGREaXNwbGF5TGlzdCh2aWV3LCBjYW52YXMpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGJ1aWxkRGlzcGxheUxpc3QoKSBjYWxscyBpbnRvIHVzZXIgY29kZSB3aGljaCBjYW4gY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gYW4gZWdsTWFrZUN1cnJlbnQgdG8gaGFwcGVuIHdpdGggYSBkaWZmZXJlbnQgc3VyZmFjZS9jb250ZXh0LgotICAgICAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IHRoZXJlZm9yZSBjaGVjayBhZ2FpbiBoZXJlLgotICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tSZW5kZXJDb250ZXh0VW5zYWZlKCkgPT0gU1VSRkFDRV9TVEFURV9FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaW50IHNhdmVDb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGludCBzdGF0dXMgPSBEaXNwbGF5TGlzdC5TVEFUVVNfRE9ORTsKLQotICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXJ0ID0gZ2V0U3lzdGVtVGltZSgpOwotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gcHJlcGFyZUZyYW1lKGRpcnR5KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUNvdW50ID0gY2FudmFzLnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkhhcmR3YXJlUHJlRHJhdyhjYW52YXMpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcGxheUxpc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyB8PSBkcmF3RGlzcGxheUxpc3QoYXR0YWNoSW5mbywgY2FudmFzLCBkaXNwbGF5TGlzdCwgc3RhdHVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkbid0IHJlYWNoIGhlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmRyYXcoY2FudmFzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgZHJhd2luZzoiLCBlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkhhcmR3YXJlUG9zdERyYXcoY2FudmFzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlVG9Db3VudChzYXZlQ291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5tUmVjcmVhdGVEaXNwbGF5TGlzdCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBtRHJhd0RlbHRhID0gZ2V0U3lzdGVtVGltZSgpIC0gc3RhcnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtRHJhd0RlbHRhID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GcmFtZUNvdW50Kys7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z092ZXJkcmF3KGF0dGFjaEluZm8sIGRpcnR5LCBjYW52YXMsIGRpc3BsYXlMaXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0RpcnR5UmVnaW9ucyhkaXJ0eSwgY2FudmFzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3UHJvZmlsZURhdGEoYXR0YWNoSW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBvblBvc3REcmF3KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3dhcEJ1ZmZlcnMoc3RhdHVzKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZUxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBhdHRhY2hJbmZvLm1JZ25vcmVEaXJ0eVN0YXRlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYWJzdHJhY3Qgdm9pZCBjb3VudE92ZXJkcmF3KEhhcmR3YXJlQ2FudmFzIGNhbnZhcyk7Ci0gICAgICAgIGFic3RyYWN0IGZsb2F0IGdldE92ZXJkcmF3KEhhcmR3YXJlQ2FudmFzIGNhbnZhcyk7Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnT3ZlcmRyYXcoVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8sIFJlY3QgZGlydHksCi0gICAgICAgICAgICAgICAgSGFyZHdhcmVDYW52YXMgY2FudmFzLCBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCkgewotCi0gICAgICAgICAgICBpZiAobURlYnVnT3ZlcmRyYXcgPT0gT1ZFUkRSQVdfVFlQRV9DT1VOVCkgewotICAgICAgICAgICAgICAgIGlmIChtRGVidWdPdmVyZHJhd0xheWVyID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXdMYXllciA9IGNyZWF0ZUhhcmR3YXJlTGF5ZXIobVdpZHRoLCBtSGVpZ2h0LCB0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1EZWJ1Z092ZXJkcmF3TGF5ZXIuZ2V0V2lkdGgoKSAhPSBtV2lkdGggfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3TGF5ZXIuZ2V0SGVpZ2h0KCkgIT0gbUhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd0xheWVyLnJlc2l6ZShtV2lkdGgsIG1IZWlnaHQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghbURlYnVnT3ZlcmRyYXdMYXllci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbURlYnVnT3ZlcmRyYXcgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEhhcmR3YXJlQ2FudmFzIGxheWVyQ2FudmFzID0gbURlYnVnT3ZlcmRyYXdMYXllci5zdGFydChjYW52YXMsIGRpcnR5KTsKLSAgICAgICAgICAgICAgICBjb3VudE92ZXJkcmF3KGxheWVyQ2FudmFzKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcmVzdG9yZUNvdW50ID0gbGF5ZXJDYW52YXMuc2F2ZSgpOwotICAgICAgICAgICAgICAgIGxheWVyQ2FudmFzLmRyYXdEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCwgbnVsbCwgRGlzcGxheUxpc3QuRkxBR19DTElQX0NISUxEUkVOKTsKLSAgICAgICAgICAgICAgICBsYXllckNhbnZhcy5yZXN0b3JlVG9Db3VudChyZXN0b3JlQ291bnQpOwotICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3TGF5ZXIuZW5kKGNhbnZhcyk7Ci0KLSAgICAgICAgICAgICAgICBmbG9hdCBvdmVyZHJhdyA9IGdldE92ZXJkcmF3KGxheWVyQ2FudmFzKTsKLSAgICAgICAgICAgICAgICBEaXNwbGF5TWV0cmljcyBtZXRyaWNzID0gYXR0YWNoSW5mby5tUm9vdFZpZXcuZ2V0UmVzb3VyY2VzKCkuZ2V0RGlzcGxheU1ldHJpY3MoKTsKLQotICAgICAgICAgICAgICAgIGRyYXdPdmVyZHJhd0NvdW50ZXIoY2FudmFzLCBvdmVyZHJhdywgbWV0cmljcy5kZW5zaXR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBkcmF3T3ZlcmRyYXdDb3VudGVyKEhhcmR3YXJlQ2FudmFzIGNhbnZhcywgZmxvYXQgb3ZlcmRyYXcsIGZsb2F0IGRlbnNpdHkpIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyB0ZXh0ID0gU3RyaW5nLmZvcm1hdCgiJS4yZngiLCBvdmVyZHJhdyk7Ci0gICAgICAgICAgICBmaW5hbCBQYWludCBwYWludCA9IHNldHVwUGFpbnQoZGVuc2l0eSk7Ci0gICAgICAgICAgICAvLyBIU0J0b0NvbG9yIHdpbGwgY2xhbXAgdGhlIHZhbHVlcyBpbiB0aGUgMC4uMSByYW5nZQotICAgICAgICAgICAgcGFpbnQuc2V0Q29sb3IoQ29sb3IuSFNCdG9Db2xvcigwLjI4ZiAtIDAuMjhmICogb3ZlcmRyYXcgLyAzLjVmLCAwLjhmLCAxLjBmKSk7Ci0KLSAgICAgICAgICAgIGNhbnZhcy5kcmF3VGV4dCh0ZXh0LCBkZW5zaXR5ICogNC4wZiwgbUhlaWdodCAtIHBhaW50LmdldEZvbnRNZXRyaWNzKCkuYm90dG9tLCBwYWludCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFBhaW50IHNldHVwUGFpbnQoZmxvYXQgZGVuc2l0eSkgewotICAgICAgICAgICAgaWYgKG1EZWJ1Z092ZXJkcmF3UGFpbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1EZWJ1Z092ZXJkcmF3UGFpbnQgPSBuZXcgUGFpbnQoKTsKLSAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd1BhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKLSAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd1BhaW50LnNldFNoYWRvd0xheWVyKGRlbnNpdHkgKiAzLjBmLCAwLjBmLCAwLjBmLCAweGZmMDAwMDAwKTsKLSAgICAgICAgICAgICAgICBtRGVidWdPdmVyZHJhd1BhaW50LnNldFRleHRTaXplKGRlbnNpdHkgKiAyMC4wZik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbURlYnVnT3ZlcmRyYXdQYWludDsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgRGlzcGxheUxpc3QgYnVpbGREaXNwbGF5TGlzdChWaWV3IHZpZXcsIEhhcmR3YXJlQ2FudmFzIGNhbnZhcykgewotICAgICAgICAgICAgaWYgKG1EcmF3RGVsdGEgPD0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiB2aWV3Lm1EaXNwbGF5TGlzdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmlldy5tUmVjcmVhdGVEaXNwbGF5TGlzdCA9ICh2aWV3Lm1Qcml2YXRlRmxhZ3MgJiBWaWV3LlBGTEFHX0lOVkFMSURBVEVEKQotICAgICAgICAgICAgICAgICAgICA9PSBWaWV3LlBGTEFHX0lOVkFMSURBVEVEOwotICAgICAgICAgICAgdmlldy5tUHJpdmF0ZUZsYWdzICY9IH5WaWV3LlBGTEFHX0lOVkFMSURBVEVEOwotCi0gICAgICAgICAgICBsb25nIGJ1aWxkRGlzcGxheUxpc3RTdGFydFRpbWUgPSBzdGFydEJ1aWxkRGlzcGxheUxpc3RQcm9maWxpbmcoKTsKLSAgICAgICAgICAgIGNhbnZhcy5jbGVhckxheWVyVXBkYXRlcygpOwotCi0gICAgICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFRyYWNlLlRSQUNFX1RBR19WSUVXLCAiZ2V0RGlzcGxheUxpc3QiKTsKLSAgICAgICAgICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0ID0gdmlldy5nZXREaXNwbGF5TGlzdCgpOwotICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVHJhY2UuVFJBQ0VfVEFHX1ZJRVcpOwotCi0gICAgICAgICAgICBlbmRCdWlsZERpc3BsYXlMaXN0UHJvZmlsaW5nKGJ1aWxkRGlzcGxheUxpc3RTdGFydFRpbWUpOwotCi0gICAgICAgICAgICByZXR1cm4gZGlzcGxheUxpc3Q7Ci0gICAgICAgIH0KLQotICAgICAgICBhYnN0cmFjdCB2b2lkIGRyYXdQcm9maWxlRGF0YShWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbyk7Ci0KLSAgICAgICAgcHJpdmF0ZSBSZWN0IGJlZ2luRnJhbWUoSGFyZHdhcmVDYW52YXMgY2FudmFzLCBSZWN0IGRpcnR5LCBpbnQgc3VyZmFjZVN0YXRlKSB7Ci0gICAgICAgICAgICAvLyBXZSBoYWQgdG8gY2hhbmdlIHRoZSBjdXJyZW50IHN1cmZhY2UgYW5kL29yIGNvbnRleHQsIHJlZHJhdyBldmVyeXRoaW5nCi0gICAgICAgICAgICBpZiAoc3VyZmFjZVN0YXRlID09IFNVUkZBQ0VfU1RBVEVfVVBEQVRFRCkgewotICAgICAgICAgICAgICAgIGRpcnR5ID0gbnVsbDsKLSAgICAgICAgICAgICAgICBiZWdpbkZyYW1lKG51bGwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbnRbXSBzaXplID0gbVN1cmZhY2VTaXplOwotICAgICAgICAgICAgICAgIGJlZ2luRnJhbWUoc2l6ZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2l6ZVsxXSAhPSBtSGVpZ2h0IHx8IHNpemVbMF0gIT0gbVdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1XaWR0aCA9IHNpemVbMF07Ci0gICAgICAgICAgICAgICAgICAgIG1IZWlnaHQgPSBzaXplWzFdOwotCi0gICAgICAgICAgICAgICAgICAgIGNhbnZhcy5zZXRWaWV3cG9ydChtV2lkdGgsIG1IZWlnaHQpOwotCi0gICAgICAgICAgICAgICAgICAgIGRpcnR5ID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtRGVidWdEYXRhUHJvdmlkZXIgIT0gbnVsbCkgZGlydHkgPSBudWxsOwotCi0gICAgICAgICAgICByZXR1cm4gZGlydHk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGxvbmcgc3RhcnRCdWlsZERpc3BsYXlMaXN0UHJvZmlsaW5nKCkgewotICAgICAgICAgICAgaWYgKG1Qcm9maWxlRW5hYmxlZCkgewotICAgICAgICAgICAgICAgIG1Qcm9maWxlQ3VycmVudEZyYW1lICs9IFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVDsKLSAgICAgICAgICAgICAgICBpZiAobVByb2ZpbGVDdXJyZW50RnJhbWUgPj0gbVByb2ZpbGVEYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBtUHJvZmlsZUN1cnJlbnRGcmFtZSA9IDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN5c3RlbS5uYW5vVGltZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZW5kQnVpbGREaXNwbGF5TGlzdFByb2ZpbGluZyhsb25nIGdldERpc3BsYXlMaXN0U3RhcnRUaW1lKSB7Ci0gICAgICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgbG9uZyBub3cgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IChub3cgLSBnZXREaXNwbGF5TGlzdFN0YXJ0VGltZSkgKiAwLjAwMDAwMWY7Ci0gICAgICAgICAgICAgICAgLy9ub2luc3BlY3Rpb24gUG9pbnRsZXNzQXJpdGhtZXRpY0V4cHJlc3Npb24KLSAgICAgICAgICAgICAgICBtUHJvZmlsZURhdGFbbVByb2ZpbGVDdXJyZW50RnJhbWVdID0gdG90YWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGludCBwcmVwYXJlRnJhbWUoUmVjdCBkaXJ0eSkgewotICAgICAgICAgICAgaW50IHN0YXR1czsKLSAgICAgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oVHJhY2UuVFJBQ0VfVEFHX1ZJRVcsICJwcmVwYXJlRnJhbWUiKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gb25QcmVEcmF3KGRpcnR5KTsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVHJhY2UuVFJBQ0VfVEFHX1ZJRVcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgaW50IGRyYXdEaXNwbGF5TGlzdChWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbywgSGFyZHdhcmVDYW52YXMgY2FudmFzLAotICAgICAgICAgICAgICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBpbnQgc3RhdHVzKSB7Ci0KLSAgICAgICAgICAgIGxvbmcgZHJhd0Rpc3BsYXlMaXN0U3RhcnRUaW1lID0gMDsKLSAgICAgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBkcmF3RGlzcGxheUxpc3RTdGFydFRpbWUgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfVklFVywgImRyYXdEaXNwbGF5TGlzdCIpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBzdGF0dXMgfD0gY2FudmFzLmRyYXdEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCwgbVJlZHJhd0NsaXAsCi0gICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5TGlzdC5GTEFHX0NMSVBfQ0hJTERSRU4pOwotICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICBUcmFjZS50cmFjZUVuZChUcmFjZS5UUkFDRV9UQUdfVklFVyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBsb25nIG5vdyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gKG5vdyAtIGRyYXdEaXNwbGF5TGlzdFN0YXJ0VGltZSkgKiAwLjAwMDAwMWY7Ci0gICAgICAgICAgICAgICAgbVByb2ZpbGVEYXRhW21Qcm9maWxlQ3VycmVudEZyYW1lICsgMV0gPSB0b3RhbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaGFuZGxlRnVuY3RvclN0YXR1cyhhdHRhY2hJbmZvLCBzdGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBzd2FwQnVmZmVycyhpbnQgc3RhdHVzKSB7Ci0gICAgICAgICAgICBpZiAoKHN0YXR1cyAmIERpc3BsYXlMaXN0LlNUQVRVU19EUkVXKSA9PSBEaXNwbGF5TGlzdC5TVEFUVVNfRFJFVykgewotICAgICAgICAgICAgICAgIGxvbmcgZWdsU3dhcEJ1ZmZlcnNTdGFydFRpbWUgPSAwOwotICAgICAgICAgICAgICAgIGlmIChtUHJvZmlsZUVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgZWdsU3dhcEJ1ZmZlcnNTdGFydFRpbWUgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzRWdsLmVnbFN3YXBCdWZmZXJzKHNFZ2xEaXNwbGF5LCBtRWdsU3VyZmFjZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobVByb2ZpbGVFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvbmcgbm93ID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gKG5vdyAtIGVnbFN3YXBCdWZmZXJzU3RhcnRUaW1lKSAqIDAuMDAwMDAxZjsKLSAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVEYXRhW21Qcm9maWxlQ3VycmVudEZyYW1lICsgMl0gPSB0b3RhbDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGVja0VnbEVycm9ycygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnRGlydHlSZWdpb25zKFJlY3QgZGlydHksIEhhcmR3YXJlQ2FudmFzIGNhbnZhcykgewotICAgICAgICAgICAgaWYgKG1EZWJ1Z0RpcnR5UmVnaW9ucykgewotICAgICAgICAgICAgICAgIGlmIChtRGVidWdQYWludCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZWJ1Z1BhaW50ID0gbmV3IFBhaW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1EZWJ1Z1BhaW50LnNldENvbG9yKDB4N2ZmZjAwMDApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChkaXJ0eSAhPSBudWxsICYmIChtRnJhbWVDb3VudCAmIDEpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdSZWN0KGRpcnR5LCBtRGVidWdQYWludCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUZ1bmN0b3JTdGF0dXMoVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8sIGludCBzdGF0dXMpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBkcmF3IGZsYWcgaXMgc2V0LCBmdW5jdG9ycyB3aWxsIGJlIGludm9rZWQgd2hpbGUgZXhlY3V0aW5nCi0gICAgICAgICAgICAvLyB0aGUgdHJlZSBvZiBkaXNwbGF5IGxpc3RzCi0gICAgICAgICAgICBpZiAoKHN0YXR1cyAmIERpc3BsYXlMaXN0LlNUQVRVU19EUkFXKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1SZWRyYXdDbGlwLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBhdHRhY2hJbmZvLm1WaWV3Um9vdEltcGwuaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubVZpZXdSb290SW1wbC5pbnZhbGlkYXRlQ2hpbGRJblBhcmVudChudWxsLCBtUmVkcmF3Q2xpcCk7Ci0gICAgICAgICAgICAgICAgICAgIG1SZWRyYXdDbGlwLnNldEVtcHR5KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKHN0YXR1cyAmIERpc3BsYXlMaXN0LlNUQVRVU19JTlZPS0UpICE9IDAgfHwKLSAgICAgICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tSGFuZGxlci5oYXNDYWxsYmFja3MobUZ1bmN0b3JzUnVubmFibGUpKSB7Ci0gICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tSGFuZGxlci5yZW1vdmVDYWxsYmFja3MobUZ1bmN0b3JzUnVubmFibGUpOwotICAgICAgICAgICAgICAgIG1GdW5jdG9yc1J1bm5hYmxlLmF0dGFjaEluZm8gPSBhdHRhY2hJbmZvOwotICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubUhhbmRsZXIucG9zdERlbGF5ZWQobUZ1bmN0b3JzUnVubmFibGUsIEZVTkNUT1JfUFJPQ0VTU19ERUxBWSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCBkZXRhY2hGdW5jdG9yKGludCBmdW5jdG9yKSB7Ci0gICAgICAgICAgICBpZiAobUNhbnZhcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNhbnZhcy5kZXRhY2hGdW5jdG9yKGZ1bmN0b3IpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIGJvb2xlYW4gYXR0YWNoRnVuY3RvcihWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbywgaW50IGZ1bmN0b3IpIHsKLSAgICAgICAgICAgIGlmIChtQ2FudmFzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQ2FudmFzLmF0dGFjaEZ1bmN0b3IoZnVuY3Rvcik7Ci0gICAgICAgICAgICAgICAgbUZ1bmN0b3JzUnVubmFibGUuYXR0YWNoSW5mbyA9IGF0dGFjaEluZm87Ci0gICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tSGFuZGxlci5yZW1vdmVDYWxsYmFja3MobUZ1bmN0b3JzUnVubmFibGUpOwotICAgICAgICAgICAgICAgIGF0dGFjaEluZm8ubUhhbmRsZXIucG9zdERlbGF5ZWQobUZ1bmN0b3JzUnVubmFibGUsICAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBFbnN1cmVzIHRoZSBjdXJyZW50IEVHTCBjb250ZXh0IGFuZCBzdXJmYWNlIGFyZSB0aGUgb25lcyB3ZSBleHBlY3QuCi0gICAgICAgICAqIFRoaXMgbWV0aG9kIHRocm93cyBhbiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgaW52b2tlZCBmcm9tIGEgdGhyZWFkCi0gICAgICAgICAqIHRoYXQgZGlkIG5vdCBpbml0aWFsaXplIEVHTC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiB7QGxpbmsgI1NVUkZBQ0VfU1RBVEVfRVJST1J9IGlmIHRoZSBjb3JyZWN0IEVHTCBjb250ZXh0IGNhbm5vdCBiZSBtYWRlIGN1cnJlbnQsCi0gICAgICAgICAqICAgICAgICAge0BsaW5rICNTVVJGQUNFX1NUQVRFX1VQREFURUR9IGlmIHRoZSBFR0wgY29udGV4dCB3YXMgY2hhbmdlZCBvcgotICAgICAgICAgKiAgICAgICAgIHtAbGluayAjU1VSRkFDRV9TVEFURV9TVUNDRVNTfSBpZiB0aGUgRUdMIGNvbnRleHQgd2FzIHRoZSBjb3JyZWN0IG9uZQotICAgICAgICAgKgotICAgICAgICAgKiBAc2VlICNjaGVja1JlbmRlckNvbnRleHRVbnNhZmUoKQotICAgICAgICAgKi8KLSAgICAgICAgaW50IGNoZWNrUmVuZGVyQ29udGV4dCgpIHsKLSAgICAgICAgICAgIGlmIChtRWdsVGhyZWFkICE9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJIYXJkd2FyZSBhY2NlbGVyYXRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGEgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAic2luZ2xlIFVJIHRocmVhZC5cbk9yaWdpbmFsIHRocmVhZDogIiArIG1FZ2xUaHJlYWQgKyAiXG4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJDdXJyZW50IHRocmVhZDogIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gY2hlY2tSZW5kZXJDb250ZXh0VW5zYWZlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogRW5zdXJlcyB0aGUgY3VycmVudCBFR0wgY29udGV4dCBhbmQgc3VyZmFjZSBhcmUgdGhlIG9uZXMgd2UgZXhwZWN0LgotICAgICAgICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBjaGVjayB0aGUgY3VycmVudCB0aHJlYWQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4ge0BsaW5rICNTVVJGQUNFX1NUQVRFX0VSUk9SfSBpZiB0aGUgY29ycmVjdCBFR0wgY29udGV4dCBjYW5ub3QgYmUgbWFkZSBjdXJyZW50LAotICAgICAgICAgKiAgICAgICAgIHtAbGluayAjU1VSRkFDRV9TVEFURV9VUERBVEVEfSBpZiB0aGUgRUdMIGNvbnRleHQgd2FzIGNoYW5nZWQgb3IKLSAgICAgICAgICogICAgICAgICB7QGxpbmsgI1NVUkZBQ0VfU1RBVEVfU1VDQ0VTU30gaWYgdGhlIEVHTCBjb250ZXh0IHdhcyB0aGUgY29ycmVjdCBvbmUKLSAgICAgICAgICoKLSAgICAgICAgICogQHNlZSAjY2hlY2tSZW5kZXJDb250ZXh0KCkKLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgaW50IGNoZWNrUmVuZGVyQ29udGV4dFVuc2FmZSgpIHsKLSAgICAgICAgICAgIGlmICghbUVnbFN1cmZhY2UuZXF1YWxzKHNFZ2wuZWdsR2V0Q3VycmVudFN1cmZhY2UoRUdMX0RSQVcpKSB8fAotICAgICAgICAgICAgICAgICAgICAhbUVnbENvbnRleHQuZXF1YWxzKHNFZ2wuZWdsR2V0Q3VycmVudENvbnRleHQoKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNFZ2wuZWdsTWFrZUN1cnJlbnQoc0VnbERpc3BsYXksIG1FZ2xTdXJmYWNlLCBtRWdsU3VyZmFjZSwgbUVnbENvbnRleHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJlZ2xNYWtlQ3VycmVudCBmYWlsZWQgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xVdGlscy5nZXRFR0xFcnJvclN0cmluZyhzRWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2sodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTVVJGQUNFX1NUQVRFX0VSUk9SOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtVXBkYXRlRGlydHlSZWdpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVEaXJ0eVJlZ2lvbnMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1VcGRhdGVEaXJ0eVJlZ2lvbnMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1VSRkFDRV9TVEFURV9VUERBVEVEOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBTVVJGQUNFX1NUQVRFX1NVQ0NFU1M7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBpbnQgZHBUb1B4KGludCBkcCwgZmxvYXQgZGVuc2l0eSkgewotICAgICAgICAgICAgcmV0dXJuIChpbnQpIChkcCAqIGRlbnNpdHkgKyAwLjVmKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNsYXNzIERyYXdQZXJmb3JtYW5jZURhdGFQcm92aWRlciBleHRlbmRzIEdyYXBoRGF0YVByb3ZpZGVyIHsKLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1HcmFwaFR5cGU7Ci0KLSAgICAgICAgICAgIHByaXZhdGUgaW50IG1WZXJ0aWNhbFVuaXQ7Ci0gICAgICAgICAgICBwcml2YXRlIGludCBtSG9yaXpvbnRhbFVuaXQ7Ci0gICAgICAgICAgICBwcml2YXRlIGludCBtSG9yaXpvbnRhbE1hcmdpbjsKLSAgICAgICAgICAgIHByaXZhdGUgaW50IG1UaHJlc2hvbGRTdHJva2U7Ci0KLSAgICAgICAgICAgIERyYXdQZXJmb3JtYW5jZURhdGFQcm92aWRlcihpbnQgZ3JhcGhUeXBlKSB7Ci0gICAgICAgICAgICAgICAgbUdyYXBoVHlwZSA9IGdyYXBoVHlwZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICB2b2lkIHByZXBhcmUoRGlzcGxheU1ldHJpY3MgbWV0cmljcykgewotICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IGRlbnNpdHkgPSBtZXRyaWNzLmRlbnNpdHk7Ci0KLSAgICAgICAgICAgICAgICBtVmVydGljYWxVbml0ID0gZHBUb1B4KFBST0ZJTEVfRFJBV19EUF9QRVJfTVMsIGRlbnNpdHkpOwotICAgICAgICAgICAgICAgIG1Ib3Jpem9udGFsVW5pdCA9IGRwVG9QeChQUk9GSUxFX0RSQVdfV0lEVEgsIGRlbnNpdHkpOwotICAgICAgICAgICAgICAgIG1Ib3Jpem9udGFsTWFyZ2luID0gZHBUb1B4KFBST0ZJTEVfRFJBV19NQVJHSU4sIGRlbnNpdHkpOwotICAgICAgICAgICAgICAgIG1UaHJlc2hvbGRTdHJva2UgPSBkcFRvUHgoUFJPRklMRV9EUkFXX1RIUkVTSE9MRF9TVFJPS0VfV0lEVEgsIGRlbnNpdHkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIGludCBnZXRHcmFwaFR5cGUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1HcmFwaFR5cGU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgaW50IGdldFZlcnRpY2FsVW5pdFNpemUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1WZXJ0aWNhbFVuaXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgaW50IGdldEhvcml6b250YWxVbml0U2l6ZSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbUhvcml6b250YWxVbml0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIGludCBnZXRIb3Jpem9udGFVbml0TWFyZ2luKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtSG9yaXpvbnRhbE1hcmdpbjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBmbG9hdFtdIGdldERhdGEoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1Qcm9maWxlRGF0YTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBmbG9hdCBnZXRUaHJlc2hvbGQoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE2OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIGludCBnZXRGcmFtZUNvdW50KCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtUHJvZmlsZURhdGEubGVuZ3RoIC8gUFJPRklMRV9GUkFNRV9EQVRBX0NPVU5UOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIGludCBnZXRFbGVtZW50Q291bnQoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBpbnQgZ2V0Q3VycmVudEZyYW1lKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtUHJvZmlsZUN1cnJlbnRGcmFtZSAvIFBST0ZJTEVfRlJBTUVfREFUQV9DT1VOVDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICB2b2lkIHNldHVwR3JhcGhQYWludChQYWludCBwYWludCwgaW50IGVsZW1lbnRJbmRleCkgewotICAgICAgICAgICAgICAgIHBhaW50LnNldENvbG9yKFBST0ZJTEVfRFJBV19DT0xPUlNbZWxlbWVudEluZGV4XSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1HcmFwaFR5cGUgPT0gR1JBUEhfVFlQRV9MSU5FUykgcGFpbnQuc2V0U3Ryb2tlV2lkdGgobVRocmVzaG9sZFN0cm9rZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgdm9pZCBzZXR1cFRocmVzaG9sZFBhaW50KFBhaW50IHBhaW50KSB7Ci0gICAgICAgICAgICAgICAgcGFpbnQuc2V0Q29sb3IoUFJPRklMRV9EUkFXX1RIUkVTSE9MRF9DT0xPUik7Ci0gICAgICAgICAgICAgICAgcGFpbnQuc2V0U3Ryb2tlV2lkdGgobVRocmVzaG9sZFN0cm9rZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgdm9pZCBzZXR1cEN1cnJlbnRGcmFtZVBhaW50KFBhaW50IHBhaW50KSB7Ci0gICAgICAgICAgICAgICAgcGFpbnQuc2V0Q29sb3IoUFJPRklMRV9EUkFXX0NVUlJFTlRfRlJBTUVfQ09MT1IpOwotICAgICAgICAgICAgICAgIGlmIChtR3JhcGhUeXBlID09IEdSQVBIX1RZUEVfTElORVMpIHBhaW50LnNldFN0cm9rZVdpZHRoKG1UaHJlc2hvbGRTdHJva2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSGFyZHdhcmUgcmVuZGVyZXIgdXNpbmcgT3BlbkdMIEVTIDIuMC4KLSAgICAgKi8KLSAgICBzdGF0aWMgY2xhc3MgR2wyMFJlbmRlcmVyIGV4dGVuZHMgR2xSZW5kZXJlciB7Ci0gICAgICAgIHByaXZhdGUgR0xFUzIwQ2FudmFzIG1HbENhbnZhczsKLQotICAgICAgICBwcml2YXRlIERpc3BsYXlNZXRyaWNzIG1EaXNwbGF5TWV0cmljczsKLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBFR0xTdXJmYWNlIHNQYnVmZmVyOwotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3RbXSBzUGJ1ZmZlckxvY2sgPSBuZXcgT2JqZWN0WzBdOwotCi0gICAgICAgIHN0YXRpYyBjbGFzcyBHbDIwUmVuZGVyZXJFZ2xDb250ZXh0IGV4dGVuZHMgTWFuYWdlZEVHTENvbnRleHQgewotICAgICAgICAgICAgZmluYWwgSGFuZGxlciBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKCk7Ci0KLSAgICAgICAgICAgIHB1YmxpYyBHbDIwUmVuZGVyZXJFZ2xDb250ZXh0KEVHTENvbnRleHQgY29udGV4dCkgewotICAgICAgICAgICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVGVybWluYXRlKGZpbmFsIEVHTENvbnRleHQgZWdsQ29udGV4dCkgewotICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyB0aGlzIG9uIHRoZSBjb3JyZWN0IHRocmVhZC4KLSAgICAgICAgICAgICAgICBpZiAobUhhbmRsZXIuZ2V0TG9vcGVyKCkgIT0gTG9vcGVyLm15TG9vcGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblRlcm1pbmF0ZShlZ2xDb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHNFZ2xMb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzRWdsID09IG51bGwpIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoRUdMSW1wbC5nZXRJbml0Q291bnQoc0VnbERpc3BsYXkpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZVBidWZmZXJTdXJmYWNlKGVnbENvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgR0xFUzIwQ2FudmFzLnRlcm1pbmF0ZUNhY2hlcygpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBzRWdsLmVnbERlc3Ryb3lDb250ZXh0KHNFZ2xEaXNwbGF5LCBlZ2xDb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNFZ2xDb250ZXh0U3RvcmFnZS5zZXQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzRWdsQ29udGV4dFN0b3JhZ2UucmVtb3ZlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNFZ2wuZWdsRGVzdHJveVN1cmZhY2Uoc0VnbERpc3BsYXksIHNQYnVmZmVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNFZ2wuZWdsTWFrZUN1cnJlbnQoc0VnbERpc3BsYXksIEVHTF9OT19TVVJGQUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBzRWdsLmVnbFJlbGVhc2VUaHJlYWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNFZ2wuZWdsVGVybWluYXRlKHNFZ2xEaXNwbGF5KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgc0VnbCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzRWdsRGlzcGxheSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzRWdsQ29uZmlnID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNQYnVmZmVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEdsMjBSZW5kZXJlcihib29sZWFuIHRyYW5zbHVjZW50KSB7Ci0gICAgICAgICAgICBzdXBlcigyLCB0cmFuc2x1Y2VudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgSGFyZHdhcmVDYW52YXMgY3JlYXRlQ2FudmFzKCkgewotICAgICAgICAgICAgcmV0dXJuIG1HbENhbnZhcyA9IG5ldyBHTEVTMjBDYW52YXMobVRyYW5zbHVjZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBNYW5hZ2VkRUdMQ29udGV4dCBjcmVhdGVNYW5hZ2VkQ29udGV4dChFR0xDb250ZXh0IGVnbENvbnRleHQpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgR2wyMFJlbmRlcmVyLkdsMjBSZW5kZXJlckVnbENvbnRleHQobUVnbENvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIGludFtdIGdldENvbmZpZyhib29sZWFuIGRpcnR5UmVnaW9ucykgewotICAgICAgICAgICAgLy9ub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb24sQ29uc3RhbnRDb25kaXRpb25zCi0gICAgICAgICAgICBmaW5hbCBpbnQgc3RlbmNpbFNpemUgPSBHTEVTMjBDYW52YXMuZ2V0U3RlbmNpbFNpemUoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBzd2FwQmVoYXZpb3IgPSBkaXJ0eVJlZ2lvbnMgPyBFR0wxNC5FR0xfU1dBUF9CRUhBVklPUl9QUkVTRVJWRURfQklUIDogMDsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBpbnRbXSB7Ci0gICAgICAgICAgICAgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTDE0LkVHTF9PUEVOR0xfRVMyX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgRUdMX1JFRF9TSVpFLCA4LAotICAgICAgICAgICAgICAgICAgICBFR0xfR1JFRU5fU0laRSwgOCwKLSAgICAgICAgICAgICAgICAgICAgRUdMX0JMVUVfU0laRSwgOCwKLSAgICAgICAgICAgICAgICAgICAgRUdMX0FMUEhBX1NJWkUsIDgsCi0gICAgICAgICAgICAgICAgICAgIEVHTF9ERVBUSF9TSVpFLCAwLAotICAgICAgICAgICAgICAgICAgICBFR0xfQ09ORklHX0NBVkVBVCwgRUdMX05PTkUsCi0gICAgICAgICAgICAgICAgICAgIEVHTF9TVEVOQ0lMX1NJWkUsIHN0ZW5jaWxTaXplLAotICAgICAgICAgICAgICAgICAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfV0lORE9XX0JJVCB8IHN3YXBCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAgRUdMX05PTkUKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCBpbml0Q2FjaGVzKCkgewotICAgICAgICAgICAgaWYgKEdMRVMyMENhbnZhcy5pbml0Q2FjaGVzKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBDYWNoZXMgd2VyZSAocmUpaW5pdGlhbGl6ZWQsIHJlYmluZCBhdGxhcwotICAgICAgICAgICAgICAgIGluaXRBdGxhcygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgaW5pdEF0bGFzKCkgewotICAgICAgICAgICAgSUJpbmRlciBiaW5kZXIgPSBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKCJhc3NldGF0bGFzIik7Ci0gICAgICAgICAgICBpZiAoYmluZGVyID09IG51bGwpIHJldHVybjsKLQotICAgICAgICAgICAgSUFzc2V0QXRsYXMgYXRsYXMgPSBJQXNzZXRBdGxhcy5TdHViLmFzSW50ZXJmYWNlKGJpbmRlcik7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGlmIChhdGxhcy5pc0NvbXBhdGlibGUoYW5kcm9pZC5vcy5Qcm9jZXNzLm15UHBpZCgpKSkgewotICAgICAgICAgICAgICAgICAgICBHcmFwaGljQnVmZmVyIGJ1ZmZlciA9IGF0bGFzLmdldEJ1ZmZlcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIG1hcCA9IGF0bGFzLmdldE1hcCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xFUzIwQ2FudmFzLmluaXRBdGxhcyhidWZmZXIsIG1hcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBJQXNzZXRBdGxhcyBpcyBub3QgdGhlIHNhbWUgY2xhc3MgYXMgdGhlIElCaW5kZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGFyZSB1c2luZyBhIHJlbW90ZSBzZXJ2aWNlIGFuZCB3ZSBjYW4gc2FmZWx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXN0cm95IHRoZSBncmFwaGljIGJ1ZmZlcgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0bGFzLmdldENsYXNzKCkgIT0gYmluZGVyLmdldENsYXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuZGVzdHJveSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhMT0dfVEFHLCAiQ291bGQgbm90IGFjcXVpcmUgYXRsYXMiLCBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBib29sZWFuIGNhbkRyYXcoKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIuY2FuRHJhdygpICYmIG1HbENhbnZhcyAhPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIGludCBvblByZURyYXcoUmVjdCBkaXJ0eSkgewotICAgICAgICAgICAgcmV0dXJuIG1HbENhbnZhcy5vblByZURyYXcoZGlydHkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgb25Qb3N0RHJhdygpIHsKLSAgICAgICAgICAgIG1HbENhbnZhcy5vblBvc3REcmF3KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCBkcmF3UHJvZmlsZURhdGEoVmlldy5BdHRhY2hJbmZvIGF0dGFjaEluZm8pIHsKLSAgICAgICAgICAgIGlmIChtRGVidWdEYXRhUHJvdmlkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZpbmFsIEdyYXBoRGF0YVByb3ZpZGVyIHByb3ZpZGVyID0gbURlYnVnRGF0YVByb3ZpZGVyOwotICAgICAgICAgICAgICAgIGluaXRQcm9maWxlRHJhd0RhdGEoYXR0YWNoSW5mbywgcHJvdmlkZXIpOwotCi0gICAgICAgICAgICAgICAgZmluYWwgaW50IGhlaWdodCA9IHByb3ZpZGVyLmdldFZlcnRpY2FsVW5pdFNpemUoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbWFyZ2luID0gcHJvdmlkZXIuZ2V0SG9yaXpvbnRhVW5pdE1hcmdpbigpOwotICAgICAgICAgICAgICAgIGZpbmFsIGludCB3aWR0aCA9IHByb3ZpZGVyLmdldEhvcml6b250YWxVbml0U2l6ZSgpOwotCi0gICAgICAgICAgICAgICAgaW50IHggPSAwOwotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgaW50IGN1cnJlbnQgPSAwOwotCi0gICAgICAgICAgICAgICAgZmluYWwgZmxvYXRbXSBkYXRhID0gcHJvdmlkZXIuZ2V0RGF0YSgpOwotICAgICAgICAgICAgICAgIGZpbmFsIGludCBlbGVtZW50Q291bnQgPSBwcm92aWRlci5nZXRFbGVtZW50Q291bnQoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZ3JhcGhUeXBlID0gcHJvdmlkZXIuZ2V0R3JhcGhUeXBlKCk7Ci0KLSAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IHByb3ZpZGVyLmdldEZyYW1lQ291bnQoKSAqIGVsZW1lbnRDb3VudDsKLSAgICAgICAgICAgICAgICBpZiAoZ3JhcGhUeXBlID09IEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfTElORVMpIHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxDb3VudCAtPSBlbGVtZW50Q291bnQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbENvdW50OyBpICs9IGVsZW1lbnRDb3VudCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtpXSA8IDAuMGYpIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IGNvdW50ICogNDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gcHJvdmlkZXIuZ2V0Q3VycmVudEZyYW1lKCkgKiBlbGVtZW50Q291bnQpIGN1cnJlbnQgPSBpbmRleDsKLQotICAgICAgICAgICAgICAgICAgICB4ICs9IG1hcmdpbjsKLSAgICAgICAgICAgICAgICAgICAgaW50IHgyID0geCArIHdpZHRoOwotCi0gICAgICAgICAgICAgICAgICAgIGludCB5MiA9IG1IZWlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCB5MSA9IChpbnQpICh5MiAtIGRhdGFbaV0gKiBoZWlnaHQpOwotCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ3JhcGhUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfQkFSUzogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZWxlbWVudENvdW50OyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ub2luc3BlY3Rpb24gTWlzbWF0Y2hlZFJlYWRBbmRXcml0ZU9mQXJyYXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgZmxvYXRbXSByID0gbVByb2ZpbGVTaGFwZXNbal07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbaW5kZXhdID0geDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleCArIDFdID0geTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbaW5kZXggKyAyXSA9IHgyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4ICsgM10gPSB5MjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MiA9IHkxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IGVsZW1lbnRDb3VudCAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gKGludCkgKHkyIC0gZGF0YVtpICsgaiArIDFdICogaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfTElORVM6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVsZW1lbnRDb3VudDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIE1pc21hdGNoZWRSZWFkQW5kV3JpdGVPZkFycmF5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0W10gciA9IG1Qcm9maWxlU2hhcGVzW2pdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4XSA9ICh4ICsgeDIpICogMC41ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltpbmRleCArIDFdID0gaW5kZXggPT0gMCA/IHkxIDogcltpbmRleCAtIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4ICsgMl0gPSByW2luZGV4XSArIHdpZHRoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2luZGV4ICsgM10gPSB5MTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MiA9IHkxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IGVsZW1lbnRDb3VudCAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gKGludCkgKHkyIC0gZGF0YVtpICsgaiArIDFdICogaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotCi0gICAgICAgICAgICAgICAgICAgIHggKz0gd2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgeCArPSBtYXJnaW47Ci0KLSAgICAgICAgICAgICAgICBkcmF3R3JhcGgoZ3JhcGhUeXBlLCBjb3VudCk7Ci0gICAgICAgICAgICAgICAgZHJhd0N1cnJlbnRGcmFtZShncmFwaFR5cGUsIGN1cnJlbnQpOwotICAgICAgICAgICAgICAgIGRyYXdUaHJlc2hvbGQoeCwgaGVpZ2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBkcmF3R3JhcGgoaW50IGdyYXBoVHlwZSwgaW50IGNvdW50KSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Qcm9maWxlU2hhcGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbURlYnVnRGF0YVByb3ZpZGVyLnNldHVwR3JhcGhQYWludChtUHJvZmlsZVBhaW50LCBpKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGdyYXBoVHlwZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfQkFSUzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1HbENhbnZhcy5kcmF3UmVjdHMobVByb2ZpbGVTaGFwZXNbaV0sIGNvdW50ICogNCwgbVByb2ZpbGVQYWludCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaERhdGFQcm92aWRlci5HUkFQSF9UWVBFX0xJTkVTOgotICAgICAgICAgICAgICAgICAgICAgICAgbUdsQ2FudmFzLmRyYXdMaW5lcyhtUHJvZmlsZVNoYXBlc1tpXSwgMCwgY291bnQgKiA0LCBtUHJvZmlsZVBhaW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBkcmF3Q3VycmVudEZyYW1lKGludCBncmFwaFR5cGUsIGludCBpbmRleCkgewotICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICBtRGVidWdEYXRhUHJvdmlkZXIuc2V0dXBDdXJyZW50RnJhbWVQYWludChtUHJvZmlsZVBhaW50KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGdyYXBoVHlwZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfQkFSUzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1HbENhbnZhcy5kcmF3UmVjdChtUHJvZmlsZVNoYXBlc1syXVtpbmRleF0sIG1Qcm9maWxlU2hhcGVzWzJdW2luZGV4ICsgMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlU2hhcGVzWzJdW2luZGV4ICsgMl0sIG1Qcm9maWxlU2hhcGVzWzBdW2luZGV4ICsgM10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlUGFpbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgR3JhcGhEYXRhUHJvdmlkZXIuR1JBUEhfVFlQRV9MSU5FUzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1HbENhbnZhcy5kcmF3TGluZShtUHJvZmlsZVNoYXBlc1syXVtpbmRleF0sIG1Qcm9maWxlU2hhcGVzWzJdW2luZGV4ICsgMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Qcm9maWxlU2hhcGVzWzJdW2luZGV4XSwgbUhlaWdodCwgbVByb2ZpbGVQYWludCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZHJhd1RocmVzaG9sZChpbnQgeCwgaW50IGhlaWdodCkgewotICAgICAgICAgICAgZmxvYXQgdGhyZXNob2xkID0gbURlYnVnRGF0YVByb3ZpZGVyLmdldFRocmVzaG9sZCgpOwotICAgICAgICAgICAgaWYgKHRocmVzaG9sZCA+IDAuMGYpIHsKLSAgICAgICAgICAgICAgICBtRGVidWdEYXRhUHJvdmlkZXIuc2V0dXBUaHJlc2hvbGRQYWludChtUHJvZmlsZVBhaW50KTsKLSAgICAgICAgICAgICAgICBpbnQgeSA9IChpbnQpIChtSGVpZ2h0IC0gdGhyZXNob2xkICogaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBtR2xDYW52YXMuZHJhd0xpbmUoMC4wZiwgeSwgeCwgeSwgbVByb2ZpbGVQYWludCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgaW5pdFByb2ZpbGVEcmF3RGF0YShWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbywgR3JhcGhEYXRhUHJvdmlkZXIgcHJvdmlkZXIpIHsKLSAgICAgICAgICAgIGlmIChtUHJvZmlsZVNoYXBlcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IGVsZW1lbnRDb3VudCA9IHByb3ZpZGVyLmdldEVsZW1lbnRDb3VudCgpOwotICAgICAgICAgICAgICAgIGZpbmFsIGludCBmcmFtZUNvdW50ID0gcHJvdmlkZXIuZ2V0RnJhbWVDb3VudCgpOwotCi0gICAgICAgICAgICAgICAgbVByb2ZpbGVTaGFwZXMgPSBuZXcgZmxvYXRbZWxlbWVudENvdW50XVtdOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudENvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgbVByb2ZpbGVTaGFwZXNbaV0gPSBuZXcgZmxvYXRbZnJhbWVDb3VudCAqIDRdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1Qcm9maWxlUGFpbnQgPSBuZXcgUGFpbnQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVByb2ZpbGVQYWludC5yZXNldCgpOwotICAgICAgICAgICAgaWYgKHByb3ZpZGVyLmdldEdyYXBoVHlwZSgpID09IEdyYXBoRGF0YVByb3ZpZGVyLkdSQVBIX1RZUEVfTElORVMpIHsKLSAgICAgICAgICAgICAgICBtUHJvZmlsZVBhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1EaXNwbGF5TWV0cmljcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbURpc3BsYXlNZXRyaWNzID0gbmV3IERpc3BsYXlNZXRyaWNzKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGF0dGFjaEluZm8ubURpc3BsYXkuZ2V0TWV0cmljcyhtRGlzcGxheU1ldHJpY3MpOwotICAgICAgICAgICAgcHJvdmlkZXIucHJlcGFyZShtRGlzcGxheU1ldHJpY3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgZGVzdHJveShib29sZWFuIGZ1bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc3VwZXIuZGVzdHJveShmdWxsKTsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZ1bGwgJiYgbUdsQ2FudmFzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbUdsQ2FudmFzID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCBwdXNoTGF5ZXJVcGRhdGUoSGFyZHdhcmVMYXllciBsYXllcikgewotICAgICAgICAgICAgbUdsQ2FudmFzLnB1c2hMYXllclVwZGF0ZShsYXllcik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCBjYW5jZWxMYXllclVwZGF0ZShIYXJkd2FyZUxheWVyIGxheWVyKSB7Ci0gICAgICAgICAgICBtR2xDYW52YXMuY2FuY2VsTGF5ZXJVcGRhdGUobGF5ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgZmx1c2hMYXllclVwZGF0ZXMoKSB7Ci0gICAgICAgICAgICBtR2xDYW52YXMuZmx1c2hMYXllclVwZGF0ZXMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgRGlzcGxheUxpc3QgY3JlYXRlRGlzcGxheUxpc3QoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgR0xFUzIwRGlzcGxheUxpc3QobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgSGFyZHdhcmVMYXllciBjcmVhdGVIYXJkd2FyZUxheWVyKGJvb2xlYW4gaXNPcGFxdWUpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgR0xFUzIwVGV4dHVyZUxheWVyKGlzT3BhcXVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgSGFyZHdhcmVMYXllciBjcmVhdGVIYXJkd2FyZUxheWVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbGVhbiBpc09wYXF1ZSkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBHTEVTMjBSZW5kZXJMYXllcih3aWR0aCwgaGVpZ2h0LCBpc09wYXF1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCBjb3VudE92ZXJkcmF3KEhhcmR3YXJlQ2FudmFzIGNhbnZhcykgewotICAgICAgICAgICAgKChHTEVTMjBDYW52YXMpIGNhbnZhcykuc2V0Q291bnRPdmVyZHJhd0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgZmxvYXQgZ2V0T3ZlcmRyYXcoSGFyZHdhcmVDYW52YXMgY2FudmFzKSB7Ci0gICAgICAgICAgICByZXR1cm4gKChHTEVTMjBDYW52YXMpIGNhbnZhcykuZ2V0T3ZlcmRyYXcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3VyZmFjZVRleHR1cmUgY3JlYXRlU3VyZmFjZVRleHR1cmUoSGFyZHdhcmVMYXllciBsYXllcikgewotICAgICAgICAgICAgcmV0dXJuICgoR0xFUzIwVGV4dHVyZUxheWVyKSBsYXllcikuZ2V0U3VyZmFjZVRleHR1cmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICB2b2lkIHNldFN1cmZhY2VUZXh0dXJlKEhhcmR3YXJlTGF5ZXIgbGF5ZXIsIFN1cmZhY2VUZXh0dXJlIHN1cmZhY2VUZXh0dXJlKSB7Ci0gICAgICAgICAgICAoKEdMRVMyMFRleHR1cmVMYXllcikgbGF5ZXIpLnNldFN1cmZhY2VUZXh0dXJlKHN1cmZhY2VUZXh0dXJlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBib29sZWFuIHNhZmVseVJ1bihSdW5uYWJsZSBhY3Rpb24pIHsKLSAgICAgICAgICAgIGJvb2xlYW4gbmVlZHNDb250ZXh0ID0gIWlzRW5hYmxlZCgpIHx8IGNoZWNrUmVuZGVyQ29udGV4dCgpID09IFNVUkZBQ0VfU1RBVEVfRVJST1I7Ci0KLSAgICAgICAgICAgIGlmIChuZWVkc0NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBHbDIwUmVuZGVyZXJFZ2xDb250ZXh0IG1hbmFnZWRDb250ZXh0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIChHbDIwUmVuZGVyZXJFZ2xDb250ZXh0KSBzRWdsQ29udGV4dFN0b3JhZ2UuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hbmFnZWRDb250ZXh0ID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB1c2VQYnVmZmVyU3VyZmFjZShtYW5hZ2VkQ29udGV4dC5nZXRDb250ZXh0KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGFjdGlvbi5ydW4oKTsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzQ29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICBzRWdsLmVnbE1ha2VDdXJyZW50KHNFZ2xEaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgdm9pZCBkZXN0cm95TGF5ZXJzKGZpbmFsIFZpZXcgdmlldykgewotICAgICAgICAgICAgaWYgKHZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHNhZmVseVJ1bihuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUNhbnZhcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNhbnZhcy5jbGVhckxheWVyVXBkYXRlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveUhhcmR3YXJlTGF5ZXIodmlldyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHTEVTMjBDYW52YXMuZmx1c2hDYWNoZXMoR0xFUzIwQ2FudmFzLkZMVVNIX0NBQ0hFU19MQVlFUlMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRlc3Ryb3lIYXJkd2FyZUxheWVyKFZpZXcgdmlldykgewotICAgICAgICAgICAgdmlldy5kZXN0cm95TGF5ZXIodHJ1ZSk7Ci0KLSAgICAgICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7Ci0gICAgICAgICAgICAgICAgVmlld0dyb3VwIGdyb3VwID0gKFZpZXdHcm91cCkgdmlldzsKLQotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IGdyb3VwLmdldENoaWxkQ291bnQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdHJveUhhcmR3YXJlTGF5ZXIoZ3JvdXAuZ2V0Q2hpbGRBdChpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHZvaWQgZGVzdHJveUhhcmR3YXJlUmVzb3VyY2VzKGZpbmFsIFZpZXcgdmlldykgewotICAgICAgICAgICAgaWYgKHZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHNhZmVseVJ1bihuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUNhbnZhcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNhbnZhcy5jbGVhckxheWVyVXBkYXRlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveVJlc291cmNlcyh2aWV3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdMRVMyMENhbnZhcy5mbHVzaENhY2hlcyhHTEVTMjBDYW52YXMuRkxVU0hfQ0FDSEVTX0xBWUVSUyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZGVzdHJveVJlc291cmNlcyhWaWV3IHZpZXcpIHsKLSAgICAgICAgICAgIHZpZXcuZGVzdHJveUhhcmR3YXJlUmVzb3VyY2VzKCk7Ci0KLSAgICAgICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7Ci0gICAgICAgICAgICAgICAgVmlld0dyb3VwIGdyb3VwID0gKFZpZXdHcm91cCkgdmlldzsKLQotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IGdyb3VwLmdldENoaWxkQ291bnQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdHJveVJlc291cmNlcyhncm91cC5nZXRDaGlsZEF0KGkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgSGFyZHdhcmVSZW5kZXJlciBjcmVhdGUoYm9vbGVhbiB0cmFuc2x1Y2VudCkgewotICAgICAgICAgICAgaWYgKEdMRVMyMENhbnZhcy5pc0F2YWlsYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBHbDIwUmVuZGVyZXIodHJhbnNsdWNlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBzdGFydFRyaW1NZW1vcnkoaW50IGxldmVsKSB7Ci0gICAgICAgICAgICBpZiAoc0VnbCA9PSBudWxsIHx8IHNFZ2xDb25maWcgPT0gbnVsbCkgcmV0dXJuOwotCi0gICAgICAgICAgICBHbDIwUmVuZGVyZXJFZ2xDb250ZXh0IG1hbmFnZWRDb250ZXh0ID0KLSAgICAgICAgICAgICAgICAgICAgKEdsMjBSZW5kZXJlckVnbENvbnRleHQpIHNFZ2xDb250ZXh0U3RvcmFnZS5nZXQoKTsKLSAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBoYXZlIE9wZW5HTCBvYmplY3RzCi0gICAgICAgICAgICBpZiAobWFuYWdlZENvbnRleHQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdXNlUGJ1ZmZlclN1cmZhY2UobWFuYWdlZENvbnRleHQuZ2V0Q29udGV4dCgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxldmVsID49IENvbXBvbmVudENhbGxiYWNrczIuVFJJTV9NRU1PUllfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICBHTEVTMjBDYW52YXMuZmx1c2hDYWNoZXMoR0xFUzIwQ2FudmFzLkZMVVNIX0NBQ0hFU19GVUxMKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGV2ZWwgPj0gQ29tcG9uZW50Q2FsbGJhY2tzMi5UUklNX01FTU9SWV9VSV9ISURERU4pIHsKLSAgICAgICAgICAgICAgICBHTEVTMjBDYW52YXMuZmx1c2hDYWNoZXMoR0xFUzIwQ2FudmFzLkZMVVNIX0NBQ0hFU19NT0RFUkFURSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBlbmRUcmltTWVtb3J5KCkgewotICAgICAgICAgICAgaWYgKHNFZ2wgIT0gbnVsbCAmJiBzRWdsRGlzcGxheSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc0VnbC5lZ2xNYWtlQ3VycmVudChzRWdsRGlzcGxheSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHVzZVBidWZmZXJTdXJmYWNlKEVHTENvbnRleHQgZWdsQ29udGV4dCkgewotICAgICAgICAgICAgc3luY2hyb25pemVkIChzUGJ1ZmZlckxvY2spIHsKLSAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgMXgxIHBidWZmZXIgc28gd2UgaGF2ZSBhIGNvbnRleHQKLSAgICAgICAgICAgICAgICAvLyB0byBjbGVhciBvdXIgT3BlbkdMIG9iamVjdHMKLSAgICAgICAgICAgICAgICBpZiAoc1BidWZmZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBzUGJ1ZmZlciA9IHNFZ2wuZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2Uoc0VnbERpc3BsYXksIHNFZ2xDb25maWcsIG5ldyBpbnRbXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX1dJRFRILCAxLCBFR0xfSEVJR0hULCAxLCBFR0xfTk9ORQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzRWdsLmVnbE1ha2VDdXJyZW50KHNFZ2xEaXNwbGF5LCBzUGJ1ZmZlciwgc1BidWZmZXIsIGVnbENvbnRleHQpOwotICAgICAgICB9Ci0gICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JbnB1dFF1ZXVlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lucHV0UXVldWUuamF2YQppbmRleCBlM2RlODlkLi5iNTUyYzIwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lucHV0UXVldWUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lucHV0UXVldWUuamF2YQpAQCAtMTgsNyArMTgsNiBAQAogCiBpbXBvcnQgZGFsdmlrLnN5c3RlbS5DbG9zZUd1YXJkOwogCi1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZVF1ZXVlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Qb29scy5Qb29sOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9LZXlFdmVudC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9LZXlFdmVudC5qYXZhCmluZGV4IDVhNWZjMTAuLjMwYjFlNTIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvS2V5RXZlbnQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0tleUV2ZW50LmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0Lm1ldGhvZC5NZXRhS2V5S2V5TGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUludEFycmF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5LZXlDaGFyYWN0ZXJNYXA7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1N1cmZhY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvU3VyZmFjZS5qYXZhCmluZGV4IDFiZmRhMmQuLmEyNzc1ZDQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvU3VyZmFjZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvU3VyZmFjZS5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC52aWV3OwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbXBhdGliaWxpdHlJbmZvLlRyYW5zbGF0b3I7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXg7CkBAIC0yNCw2ICsyNSwxMCBAQAogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKKwogaW1wb3J0IGRhbHZpay5zeXN0ZW0uQ2xvc2VHdWFyZDsKIAogLyoqCkBAIC04MCw2ICs4NSwxMSBAQAogICAgIC8vIG5vbiBjb21wYXRpYmlsaXR5IG1vZGUuCiAgICAgcHJpdmF0ZSBNYXRyaXggbUNvbXBhdGlibGVNYXRyaXg7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHtST1RBVElPTl8wLCBST1RBVElPTl85MCwgUk9UQVRJT05fMTgwLCBST1RBVElPTl8yNzB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBSb3RhdGlvbiB7fQorCiAgICAgLyoqCiAgICAgICogUm90YXRpb24gY29uc3RhbnQ6IDAgZGVncmVlIHJvdGF0aW9uIChuYXR1cmFsIG9yaWVudGF0aW9uKQogICAgICAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlQ29udHJvbC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlQ29udHJvbC5qYXZhCmluZGV4IGEwNmEyMGIuLjkxNGE1Y2EgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvU3VyZmFjZUNvbnRyb2wuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1N1cmZhY2VDb250cm9sLmphdmEKQEAgLTIyLDcgKzIyLDYgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlZ2lvbjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2UuT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvU3VyZmFjZVZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvU3VyZmFjZVZpZXcuamF2YQppbmRleCAyMmQ0YzliLi42NWQzZjZkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1N1cmZhY2VWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlVmlldy5qYXZhCkBAIC0xODgsOCArMTg4LDEzIEBACiAgICAgICAgIGluaXQoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgU3VyZmFjZVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBTdXJmYWNlVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyKTsKKyAgICAgICAgaW5pdCgpOworICAgIH0KKworICAgIHB1YmxpYyBTdXJmYWNlVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgaW5pdCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9UZXh0dXJlVmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9UZXh0dXJlVmlldy5qYXZhCmluZGV4IDQ3Zjc2MjguLmJmODE4MTEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVGV4dHVyZVZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1RleHR1cmVWaWV3LmphdmEKQEAgLTE1NiwxNCArMTU2LDMyIEBACiAgICAgICogCiAgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gYXNzb2NpYXRlIHRoaXMgdmlldyB3aXRoLgogICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgWE1MIHRhZyB0aGF0IGlzIGluZmxhdGluZyB0aGUgdmlldy4KLSAgICAgKiBAcGFyYW0gZGVmU3R5bGUgVGhlIGRlZmF1bHQgc3R5bGUgdG8gYXBwbHkgdG8gdGhpcyB2aWV3LiBJZiAwLCBubyBzdHlsZQotICAgICAqICAgICAgICB3aWxsIGJlIGFwcGxpZWQgKGJleW9uZCB3aGF0IGlzIGluY2x1ZGVkIGluIHRoZSB0aGVtZSkuIFRoaXMgbWF5Ci0gICAgICogICAgICAgIGVpdGhlciBiZSBhbiBhdHRyaWJ1dGUgcmVzb3VyY2UsIHdob3NlIHZhbHVlIHdpbGwgYmUgcmV0cmlldmVkCi0gICAgICogICAgICAgIGZyb20gdGhlIGN1cnJlbnQgdGhlbWUsIG9yIGFuIGV4cGxpY2l0IHN0eWxlIHJlc291cmNlLgorICAgICAqIEBwYXJhbSBkZWZTdHlsZUF0dHIgQW4gYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IHRoZW1lIHRoYXQgY29udGFpbnMgYQorICAgICAqICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICB0aGUgdmlldy4gQ2FuIGJlIDAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgogICAgICAqLwogICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsiVW51c2VkRGVjbGFyYXRpb24ifSkKLSAgICBwdWJsaWMgVGV4dHVyZVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBUZXh0dXJlVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyKTsKKyAgICAgICAgaW5pdCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgVGV4dHVyZVZpZXcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBhc3NvY2lhdGUgdGhpcyB2aWV3IHdpdGguCisgICAgICogQHBhcmFtIGF0dHJzIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBYTUwgdGFnIHRoYXQgaXMgaW5mbGF0aW5nIHRoZSB2aWV3LgorICAgICAqIEBwYXJhbSBkZWZTdHlsZUF0dHIgQW4gYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IHRoZW1lIHRoYXQgY29udGFpbnMgYQorICAgICAqICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICB0aGUgdmlldy4gQ2FuIGJlIDAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgorICAgICAqIEBwYXJhbSBkZWZTdHlsZVJlcyBBIHJlc291cmNlIGlkZW50aWZpZXIgb2YgYSBzdHlsZSByZXNvdXJjZSB0aGF0CisgICAgICogICAgICAgIHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgdmlldywgdXNlZCBvbmx5IGlmCisgICAgICogICAgICAgIGRlZlN0eWxlQXR0ciBpcyAwIG9yIGNhbiBub3QgYmUgZm91bmQgaW4gdGhlIHRoZW1lLiBDYW4gYmUgMAorICAgICAqICAgICAgICB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCisgICAgICovCisgICAgQFN1cHByZXNzV2FybmluZ3MoeyJVbnVzZWREZWNsYXJhdGlvbiJ9KQorICAgIHB1YmxpYyBUZXh0dXJlVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgaW5pdCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9UaHJlYWRlZFJlbmRlcmVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1RocmVhZGVkUmVuZGVyZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDg3MzEzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9UaHJlYWRlZFJlbmRlcmVyLmphdmEKQEAgLTAsMCArMSwzMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQudmlldzsKKworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOworaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CitpbXBvcnQgYW5kcm9pZC5vcy5UcmFjZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlLk91dE9mUmVzb3VyY2VzRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3LkF0dGFjaEluZm87CisKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKKworLyoqCisgKiBIYXJkd2FyZSByZW5kZXJlciB0aGF0IHByb3hpZXMgdGhlIHJlbmRlcmluZyB0byBhIHJlbmRlciB0aHJlYWQuIE1vc3QgY2FsbHMKKyAqIGFyZSBzeW5jaHJvbm91cywgaG93ZXZlciBhIGZldyBzdWNoIGFzIGRyYXcoKSBhcmUgcG9zdGVkIGFzeW5jLiBUaGUgZGlzcGxheSBsaXN0CisgKiBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgdHdvIHRocmVhZHMgYW5kIGlzIGd1YXJkZWQgYnkgYSB0b3AgbGV2ZWwgbG9jay4KKyAqCisgKiBUaGUgVUkgdGhyZWFkIGNhbiBibG9jayBvbiB0aGUgUmVuZGVyVGhyZWFkLCBidXQgUmVuZGVyVGhyZWFkIG11c3QgbmV2ZXIKKyAqIGJsb2NrIG9uIHRoZSBVSSB0aHJlYWQuCisgKgorICogTm90ZSB0aGF0IGFsdGhvdWdoIGN1cnJlbnRseSB0aGUgRUdMIGNvbnRleHQgJiBzdXJmYWNlcyBhcmUgY3JlYXRlZCAmIG1hbmFnZWQKKyAqIGJ5IHRoZSByZW5kZXIgdGhyZWFkLCB0aGUgZ29hbCBpcyB0byBtb3ZlIHRoYXQgaW50byBhIHNoYXJlZCBzdHJ1Y3R1cmUgdGhhdCBjYW4KKyAqIGJlIG1hbmFnZWQgYnkgYm90aCB0aHJlYWRzLiBFR0xTdXJmYWNlIGNyZWF0aW9uICYgZGVsZXRpb24gc2hvdWxkIGlkZWFsbHkgYmUKKyAqIGRvbmUgb24gdGhlIFVJIHRocmVhZCBhbmQgbm90IHRoZSBSZW5kZXJUaHJlYWQgdG8gYXZvaWQgc3RhbGxpbmcgdGhlCisgKiBSZW5kZXJUaHJlYWQgd2l0aCBzdXJmYWNlIGJ1ZmZlciBhbGxvY2F0aW9uLgorICoKKyAqIEBoaWRlCisgKi8KK3B1YmxpYyBjbGFzcyBUaHJlYWRlZFJlbmRlcmVyIGV4dGVuZHMgSGFyZHdhcmVSZW5kZXJlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPR1RBRyA9ICJUaHJlYWRlZFJlbmRlcmVyIjsKKworICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJzZXJpYWwiKQorICAgIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgTWV0aG9kPiBzTWV0aG9kTHV0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBNZXRob2Q+KCkge3sKKyAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IEhhcmR3YXJlUmVuZGVyZXIuY2xhc3MuZ2V0RGVjbGFyZWRNZXRob2RzKCk7CisgICAgICAgIGZvciAoTWV0aG9kIG0gOiBtZXRob2RzKSB7CisgICAgICAgICAgICBwdXQobS5nZXROYW1lKCksIG0pOworICAgICAgICB9CisgICAgfX07CisgICAgc3RhdGljIGJvb2xlYW4gc05lZWRzSW5pdCA9IHRydWU7CisKKyAgICBwcml2YXRlIEhhcmR3YXJlUmVuZGVyZXIgbVJlbW90ZVJlbmRlcmVyOworICAgIHByaXZhdGUgaW50IG1XaWR0aCwgbUhlaWdodDsKKyAgICBwcml2YXRlIFJUSm9iIG1QcmV2aW91c0RyYXc7CisKKyAgICBUaHJlYWRlZFJlbmRlcmVyKEdMUmVuZGVyZXIgYmFja2luZ1JlbmRlcmVyKSB7CisgICAgICAgIG1SZW1vdGVSZW5kZXJlciA9IGJhY2tpbmdSZW5kZXJlcjsKKyAgICAgICAgc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgaWYgKHNOZWVkc0luaXQpIHsKKyAgICAgICAgICAgIHNOZWVkc0luaXQgPSBmYWxzZTsKKyAgICAgICAgICAgIHBvc3RUb1JlbmRlclRocmVhZChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICAvLyBIYWNrIHRvIGFsbG93IEdMUmVuZGVyZXIgdG8gY3JlYXRlIGEgaGFuZGxlciB0byBwb3N0IHRoZSBFR0wKKyAgICAgICAgICAgICAgICAgICAgLy8gZGVzdHJ1Y3Rpb24gdG8sIGFsdGhvdWdoIGl0J2xsIG5ldmVyIHJ1bgorICAgICAgICAgICAgICAgICAgICBMb29wZXIucHJlcGFyZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBkZXN0cm95KGJvb2xlYW4gZnVsbCkgeworICAgICAgICBydW4oImRlc3Ryb3kiLCBmdWxsKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBib29sZWFuIGluaXRpYWxpemUoU3VyZmFjZSBzdXJmYWNlKSB0aHJvd3MgT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24geworICAgICAgICByZXR1cm4gKEJvb2xlYW4pIHJ1bigiaW5pdGlhbGl6ZSIsIHN1cmZhY2UpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgdXBkYXRlU3VyZmFjZShTdXJmYWNlIHN1cmZhY2UpIHRocm93cyBPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiB7CisgICAgICAgIHBvc3QoInVwZGF0ZVN1cmZhY2UiLCBzdXJmYWNlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGRlc3Ryb3lMYXllcnMoVmlldyB2aWV3KSB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hNZXRob2RFcnJvcigpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZGVzdHJveUhhcmR3YXJlUmVzb3VyY2VzKFZpZXcgdmlldykgeworICAgICAgICBydW4oImRlc3Ryb3lIYXJkd2FyZVJlc291cmNlcyIsIHZpZXcpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgaW52YWxpZGF0ZShTdXJmYWNlIHN1cmZhY2UpIHsKKyAgICAgICAgcG9zdCgiaW52YWxpZGF0ZSIsIHN1cmZhY2UpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisgICAgICAgIC8vIFRPRE8gUmVtb3ZlIHVzZXJzIG9mIHRoaXMgQVBJCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBib29sZWFuIHNhZmVseVJ1bihSdW5uYWJsZSBhY3Rpb24pIHsKKyAgICAgICAgcmV0dXJuIChCb29sZWFuKSBydW4oInNhZmVseVJ1biIsIGFjdGlvbik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBzZXR1cChpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKyAgICAgICAgbVdpZHRoID0gd2lkdGg7CisgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIHBvc3QoInNldHVwIiwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgaW50IGdldFdpZHRoKCkgeworICAgICAgICByZXR1cm4gbVdpZHRoOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGludCBnZXRIZWlnaHQoKSB7CisgICAgICAgIHJldHVybiBtSGVpZ2h0OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgZHVtcEdmeEluZm8oUHJpbnRXcml0ZXIgcHcpIHsKKyAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGxvbmcgZ2V0RnJhbWVDb3VudCgpIHsKKyAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBib29sZWFuIGxvYWRTeXN0ZW1Qcm9wZXJ0aWVzKCkgeworICAgICAgICByZXR1cm4gKEJvb2xlYW4pIHJ1bigibG9hZFN5c3RlbVByb3BlcnRpZXMiKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIHB1c2hMYXllclVwZGF0ZShIYXJkd2FyZUxheWVyIGxheWVyKSB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hNZXRob2RFcnJvcigpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgY2FuY2VsTGF5ZXJVcGRhdGUoSGFyZHdhcmVMYXllciBsYXllcikgeworICAgICAgICB0aHJvdyBuZXcgTm9TdWNoTWV0aG9kRXJyb3IoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGZsdXNoTGF5ZXJVcGRhdGVzKCkgeworICAgICAgICB0aHJvdyBuZXcgTm9TdWNoTWV0aG9kRXJyb3IoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIGRyYXdEaXNwbGF5TGlzdChEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgQXR0YWNoSW5mbyBhdHRhY2hJbmZvLAorICAgICAgICAgICAgSGFyZHdhcmVEcmF3Q2FsbGJhY2tzIGNhbGxiYWNrcywgUmVjdCBkaXJ0eSkgeworICAgICAgICB0aHJvdyBuZXcgTm9TdWNoTWV0aG9kRXJyb3IoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUT0RPOiBSZW1vdmUKKyAgICAgKiBUZW1wb3JhcnkgaGFjayB0byBhbGxvdyBSZW5kZXJUaHJlYWRUZXN0IHByb3RvdHlwZSBhcHAgdG8gdHJpZ2dlcgorICAgICAqIHJlcGxheWluZyBhIERpc3BsYXlMaXN0IGFmdGVyIG1vZGlmeWluZyB0aGUgZGlzcGxheWxpc3QgcHJvcGVydGllcworICAgICAqCisgICAgICogIEBoaWRlICovCisgICAgcHVibGljIHZvaWQgcmVwZWF0TGFzdERyYXcoKSB7CisgICAgICAgIGlmIChtUHJldmlvdXNEcmF3ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlRoZXJlIGlzbid0IGEgcHJldmlvdXMgZHJhdyIpOworICAgICAgICB9CisgICAgICAgIHN5bmNocm9uaXplZCAobVByZXZpb3VzRHJhdykgeworICAgICAgICAgICAgbVByZXZpb3VzRHJhdy5jb21wbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtUHJldmlvdXNEcmF3LmFyZ3NbM10gPSBudWxsOworICAgICAgICBwb3N0VG9SZW5kZXJUaHJlYWQobVByZXZpb3VzRHJhdyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBkcmF3KFZpZXcgdmlldywgQXR0YWNoSW5mbyBhdHRhY2hJbmZvLCBIYXJkd2FyZURyYXdDYWxsYmFja3MgY2FsbGJhY2tzLCBSZWN0IGRpcnR5KSB7CisgICAgICAgIHJlcXVpcmVDb21wbGV0aW9uKG1QcmV2aW91c0RyYXcpOworCisgICAgICAgIGF0dGFjaEluZm8ubUlnbm9yZURpcnR5U3RhdGUgPSB0cnVlOworICAgICAgICBhdHRhY2hJbmZvLm1EcmF3aW5nVGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOworICAgICAgICB2aWV3Lm1Qcml2YXRlRmxhZ3MgfD0gVmlldy5QRkxBR19EUkFXTjsKKworICAgICAgICB2aWV3Lm1SZWNyZWF0ZURpc3BsYXlMaXN0ID0gKHZpZXcubVByaXZhdGVGbGFncyAmIFZpZXcuUEZMQUdfSU5WQUxJREFURUQpCisgICAgICAgICAgICAgICAgPT0gVmlldy5QRkxBR19JTlZBTElEQVRFRDsKKyAgICAgICAgdmlldy5tUHJpdmF0ZUZsYWdzICY9IH5WaWV3LlBGTEFHX0lOVkFMSURBVEVEOworCisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oVHJhY2UuVFJBQ0VfVEFHX1ZJRVcsICJnZXREaXNwbGF5TGlzdCIpOworICAgICAgICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCA9IHZpZXcuZ2V0RGlzcGxheUxpc3QoKTsKKyAgICAgICAgVHJhY2UudHJhY2VFbmQoVHJhY2UuVFJBQ0VfVEFHX1ZJRVcpOworCisgICAgICAgIHZpZXcubVJlY3JlYXRlRGlzcGxheUxpc3QgPSBmYWxzZTsKKworICAgICAgICBtUHJldmlvdXNEcmF3ID0gcG9zdCgiZHJhd0Rpc3BsYXlMaXN0IiwgZGlzcGxheUxpc3QsIGF0dGFjaEluZm8sCisgICAgICAgICAgICAgICAgY2FsbGJhY2tzLCBkaXJ0eSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgSGFyZHdhcmVMYXllciBjcmVhdGVIYXJkd2FyZUxheWVyKGJvb2xlYW4gaXNPcGFxdWUpIHsKKyAgICAgICAgdGhyb3cgbmV3IE5vU3VjaE1ldGhvZEVycm9yKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgSGFyZHdhcmVMYXllciBjcmVhdGVIYXJkd2FyZUxheWVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbGVhbiBpc09wYXF1ZSkgeworICAgICAgICB0aHJvdyBuZXcgTm9TdWNoTWV0aG9kRXJyb3IoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBTdXJmYWNlVGV4dHVyZSBjcmVhdGVTdXJmYWNlVGV4dHVyZShIYXJkd2FyZUxheWVyIGxheWVyKSB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hNZXRob2RFcnJvcigpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgc2V0U3VyZmFjZVRleHR1cmUoSGFyZHdhcmVMYXllciBsYXllciwgU3VyZmFjZVRleHR1cmUgc3VyZmFjZVRleHR1cmUpIHsKKyAgICAgICAgdGhyb3cgbmV3IE5vU3VjaE1ldGhvZEVycm9yKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCBkZXRhY2hGdW5jdG9yKGludCBmdW5jdG9yKSB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hNZXRob2RFcnJvcigpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGJvb2xlYW4gYXR0YWNoRnVuY3RvcihBdHRhY2hJbmZvIGF0dGFjaEluZm8sIGludCBmdW5jdG9yKSB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hNZXRob2RFcnJvcigpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgeworICAgICAgICBwb3N0KCJzZXROYW1lIiwgbmFtZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCByZXF1aXJlQ29tcGxldGlvbihSVEpvYiBqb2IpIHsKKyAgICAgICAgaWYgKGpvYiAhPSBudWxsKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKGpvYikgeworICAgICAgICAgICAgICAgIGlmICgham9iLmNvbXBsZXRlZCkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgam9iLndhaXQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIFJUSm9iIHBvc3QoU3RyaW5nIG1ldGhvZCwgT2JqZWN0Li4uIGFyZ3MpIHsKKyAgICAgICAgUlRKb2Igam9iID0gbmV3IFJUSm9iKCk7CisgICAgICAgIGpvYi5tZXRob2QgPSBzTWV0aG9kTHV0LmdldChtZXRob2QpOworICAgICAgICBqb2IuYXJncyA9IGFyZ3M7CisgICAgICAgIGpvYi50YXJnZXQgPSBtUmVtb3RlUmVuZGVyZXI7CisgICAgICAgIGlmIChqb2IubWV0aG9kID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigiQ291bGRuJ3QgZmluZCBtZXRob2Q6ICIgKyBtZXRob2QpOworICAgICAgICB9CisgICAgICAgIHBvc3RUb1JlbmRlclRocmVhZChqb2IpOworICAgICAgICByZXR1cm4gam9iOworICAgIH0KKworICAgIHByaXZhdGUgT2JqZWN0IHJ1bihTdHJpbmcgbWV0aG9kLCBPYmplY3QuLi4gYXJncykgeworICAgICAgICBSVEpvYiBqb2IgPSBuZXcgUlRKb2IoKTsKKyAgICAgICAgam9iLm1ldGhvZCA9IHNNZXRob2RMdXQuZ2V0KG1ldGhvZCk7CisgICAgICAgIGpvYi5hcmdzID0gYXJnczsKKyAgICAgICAgam9iLnRhcmdldCA9IG1SZW1vdGVSZW5kZXJlcjsKKyAgICAgICAgaWYgKGpvYi5tZXRob2QgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCJDb3VsZG4ndCBmaW5kIG1ldGhvZDogIiArIG1ldGhvZCk7CisgICAgICAgIH0KKyAgICAgICAgc3luY2hyb25pemVkIChqb2IpIHsKKyAgICAgICAgICAgIHBvc3RUb1JlbmRlclRocmVhZChqb2IpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBqb2Iud2FpdCgpOworICAgICAgICAgICAgICAgIHJldHVybiBqb2IucmV0OworICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIFJUSm9iIGltcGxlbWVudHMgUnVubmFibGUgeworICAgICAgICBNZXRob2QgbWV0aG9kOworICAgICAgICBPYmplY3RbXSBhcmdzOworICAgICAgICBPYmplY3QgdGFyZ2V0OworICAgICAgICBPYmplY3QgcmV0OworICAgICAgICBib29sZWFuIGNvbXBsZXRlZCA9IGZhbHNlOworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldCA9IG1ldGhvZC5pbnZva2UodGFyZ2V0LCBhcmdzKTsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbm90aWZ5KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShMT0dUQUcsICJGYWlsZWQgdG8gaW52b2tlOiAiICsgbWV0aG9kLmdldE5hbWUoKSwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIHBvc3RUb1JlbmRlclRocmVhZChSdW5uYWJsZSBydW5uYWJsZSk7Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlldy5qYXZhCmluZGV4IGIwYmFlNDYuLmE2OTNlZDQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlldy5qYXZhCkBAIC0xNiw2ICsxNiw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC52aWV3OwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNsaXBEYXRhOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKQEAgLTg2LDYgKzg5LDggQEAKIGltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuY29sbGVjdC5MaXN0czsKIGltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuY29sbGVjdC5NYXBzOwogCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKIGltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7CiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7CiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKQEAgLTcyOSw2ICs3MzQsMTEgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRklUU19TWVNURU1fV0lORE9XUyA9IDB4MDAwMDAwMDI7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHtWSVNJQkxFLCBJTlZJU0lCTEUsIEdPTkV9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBWaXNpYmlsaXR5IHt9CisKICAgICAvKioKICAgICAgKiBUaGlzIHZpZXcgaXMgdmlzaWJsZS4KICAgICAgKiBVc2Ugd2l0aCB7QGxpbmsgI3NldFZpc2liaWxpdHl9IGFuZCA8YSBocmVmPSIjYXR0cl9hbmRyb2lkOnZpc2liaWxpdHkiPntAY29kZQpAQCAtODk2LDYgKzkwNiwxMSBAQAogICAgICAqLwogICAgIHN0YXRpYyBmaW5hbCBpbnQgRk9DVVNBQkxFX0lOX1RPVUNIX01PREUgPSAweDAwMDQwMDAwOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIEBJbnREZWYoe0RSQVdJTkdfQ0FDSEVfUVVBTElUWV9MT1csIERSQVdJTkdfQ0FDSEVfUVVBTElUWV9ISUdILCBEUkFXSU5HX0NBQ0hFX1FVQUxJVFlfQVVUT30pCisgICAgcHVibGljIEBpbnRlcmZhY2UgRHJhd2luZ0NhY2hlUXVhbGl0eSB7fQorCiAgICAgLyoqCiAgICAgICogPHA+RW5hYmxlcyBsb3cgcXVhbGl0eSBtb2RlIGZvciB0aGUgZHJhd2luZyBjYWNoZS48L3A+CiAgICAgICovCkBAIC05NDAsNiArOTU1LDE2IEBACiAgICAgICovCiAgICAgc3RhdGljIGZpbmFsIGludCBEVVBMSUNBVEVfUEFSRU5UX1NUQVRFID0gMHgwMDQwMDAwMDsKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoeworICAgICAgICBTQ1JPTExCQVJTX0lOU0lERV9PVkVSTEFZLAorICAgICAgICBTQ1JPTExCQVJTX0lOU0lERV9JTlNFVCwKKyAgICAgICAgU0NST0xMQkFSU19PVVRTSURFX09WRVJMQVksCisgICAgICAgIFNDUk9MTEJBUlNfT1VUU0lERV9JTlNFVAorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFNjcm9sbEJhclN0eWxlIHt9CisKICAgICAvKioKICAgICAgKiBUaGUgc2Nyb2xsYmFyIHN0eWxlIHRvIGRpc3BsYXkgdGhlIHNjcm9sbGJhcnMgaW5zaWRlIHRoZSBjb250ZW50IGFyZWEsCiAgICAgICogd2l0aG91dCBpbmNyZWFzaW5nIHRoZSBwYWRkaW5nLiBUaGUgc2Nyb2xsYmFycyB3aWxsIGJlIG92ZXJsYWlkIHdpdGgKQEAgLTEwMjAsNiArMTA0NSwxNSBAQAogICAgICAqLwogICAgIHN0YXRpYyBmaW5hbCBpbnQgUEFSRU5UX1NBVkVfRElTQUJMRURfTUFTSyA9IDB4MjAwMDAwMDA7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLAorICAgICAgICAgICAgdmFsdWUgPSB7CisgICAgICAgICAgICAgICAgRk9DVVNBQkxFU19BTEwsCisgICAgICAgICAgICAgICAgRk9DVVNBQkxFU19UT1VDSF9NT0RFCisgICAgICAgICAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBGb2N1c2FibGVNb2RlIHt9CisKICAgICAvKioKICAgICAgKiBWaWV3IGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHtAbGluayAjYWRkRm9jdXNhYmxlcyhBcnJheUxpc3QsIGludCwgaW50KX0KICAgICAgKiBzaG91bGQgYWRkIGFsbCBmb2N1c2FibGUgVmlld3MgcmVnYXJkbGVzcyBpZiB0aGV5IGFyZSBmb2N1c2FibGUgaW4gdG91Y2ggbW9kZS4KQEAgLTEwMzIsNiArMTA2NiwyOCBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPQ1VTQUJMRVNfVE9VQ0hfTU9ERSA9IDB4MDAwMDAwMDE7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHsKKyAgICAgICAgICAgIEZPQ1VTX0JBQ0tXQVJELAorICAgICAgICAgICAgRk9DVVNfRk9SV0FSRCwKKyAgICAgICAgICAgIEZPQ1VTX0xFRlQsCisgICAgICAgICAgICBGT0NVU19VUCwKKyAgICAgICAgICAgIEZPQ1VTX1JJR0hULAorICAgICAgICAgICAgRk9DVVNfRE9XTgorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIEZvY3VzRGlyZWN0aW9uIHt9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHsKKyAgICAgICAgICAgIEZPQ1VTX0xFRlQsCisgICAgICAgICAgICBGT0NVU19VUCwKKyAgICAgICAgICAgIEZPQ1VTX1JJR0hULAorICAgICAgICAgICAgRk9DVVNfRE9XTgorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIEZvY3VzUmVhbERpcmVjdGlvbiB7fSAvLyBMaWtlIEBGb2N1c0RpcmVjdGlvbiwgYnV0IHdpdGhvdXQgZm9yd2FyZC9iYWNrd2FyZAorCiAgICAgLyoqCiAgICAgICogVXNlIHdpdGgge0BsaW5rICNmb2N1c1NlYXJjaChpbnQpfS4gTW92ZSBmb2N1cyB0byB0aGUgcHJldmlvdXMgc2VsZWN0YWJsZQogICAgICAqIGl0ZW0uCkBAIC0xODA0LDYgKzE4NjAsMjUgQEAKICAgICAgKi8KICAgICBzdGF0aWMgZmluYWwgaW50IFBGTEFHMl9EUkFHX0hPVkVSRUQgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDI7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHsKKyAgICAgICAgTEFZT1VUX0RJUkVDVElPTl9MVFIsCisgICAgICAgIExBWU9VVF9ESVJFQ1RJT05fUlRMLAorICAgICAgICBMQVlPVVRfRElSRUNUSU9OX0lOSEVSSVQsCisgICAgICAgIExBWU9VVF9ESVJFQ1RJT05fTE9DQUxFCisgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgLy8gTm90IGNhbGxlZCBMYXlvdXREaXJlY3Rpb24gdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBhbmRyb2lkLnV0aWwuTGF5b3V0RGlyZWN0aW9uCisgICAgcHVibGljIEBpbnRlcmZhY2UgTGF5b3V0RGlyIHt9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHsKKyAgICAgICAgTEFZT1VUX0RJUkVDVElPTl9MVFIsCisgICAgICAgIExBWU9VVF9ESVJFQ1RJT05fUlRMCisgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgUmVzb2x2ZWRMYXlvdXREaXIge30KKwogICAgIC8qKgogICAgICAqIEhvcml6b250YWwgbGF5b3V0IGRpcmVjdGlvbiBvZiB0aGlzIHZpZXcgaXMgZnJvbSBMZWZ0IHRvIFJpZ2h0LgogICAgICAqIFVzZSB3aXRoIHtAbGluayAjc2V0TGF5b3V0RGlyZWN0aW9ufS4KQEAgLTE5ODIsNyArMjA1NywyMCBAQAogICAgIHN0YXRpYyBmaW5hbCBpbnQgUEZMQUcyX1RFWFRfRElSRUNUSU9OX1JFU09MVkVEX0RFRkFVTFQgPQogICAgICAgICAgICAgVEVYVF9ESVJFQ1RJT05fUkVTT0xWRURfREVGQVVMVCA8PCBQRkxBRzJfVEVYVF9ESVJFQ1RJT05fUkVTT0xWRURfTUFTS19TSElGVDsKIAotICAgIC8qCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7CisgICAgICAgIFRFWFRfQUxJR05NRU5UX0lOSEVSSVQsCisgICAgICAgIFRFWFRfQUxJR05NRU5UX0dSQVZJVFksCisgICAgICAgIFRFWFRfQUxJR05NRU5UX0NFTlRFUiwKKyAgICAgICAgVEVYVF9BTElHTk1FTlRfVEVYVF9TVEFSVCwKKyAgICAgICAgVEVYVF9BTElHTk1FTlRfVEVYVF9FTkQsCisgICAgICAgIFRFWFRfQUxJR05NRU5UX1ZJRVdfU1RBUlQsCisgICAgICAgIFRFWFRfQUxJR05NRU5UX1ZJRVdfRU5ECisgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgVGV4dEFsaWdubWVudCB7fQorCisgICAgLyoqCiAgICAgICogRGVmYXVsdCB0ZXh0IGFsaWdubWVudC4gVGhlIHRleHQgYWxpZ25tZW50IG9mIHRoaXMgVmlldyBpcyBpbmhlcml0ZWQgZnJvbSBpdHMgcGFyZW50LgogICAgICAqIFVzZSB3aXRoIHtAbGluayAjc2V0VGV4dEFsaWdubWVudChpbnQpfQogICAgICAqLwpAQCAtMjY2NCw2ICsyNzUyLDEyIEBACiAgICAgICAgICAgICBTWVNURU1fVUlfRkxBR19MQVlPVVRfSElERV9OQVZJR0FUSU9OCiAgICAgICAgICAgICB8IFNZU1RFTV9VSV9GTEFHX0xBWU9VVF9GVUxMU0NSRUVOOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZihmbGFnID0gdHJ1ZSwKKyAgICAgICAgICAgIHZhbHVlID0geyBGSU5EX1ZJRVdTX1dJVEhfVEVYVCwgRklORF9WSUVXU19XSVRIX0NPTlRFTlRfREVTQ1JJUFRJT04gfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgRmluZFZpZXdGbGFncyB7fQorCiAgICAgLyoqCiAgICAgICogRmluZCB2aWV3cyB0aGF0IHJlbmRlciB0aGUgc3BlY2lmaWVkIHRleHQuCiAgICAgICoKQEAgLTI2ODUsNyArMjc3OSw3IEBACiAgICAgICogYWRkZWQgYW5kIGl0IGlzIGEgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNsaWVudCB0byBjYWxsIHRoZSBBUElzIG9mCiAgICAgICogdGhlIHByb3ZpZGVyIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB2aXJ0dWFsIHRyZWUgcm9vdGVkIGF0IHRoaXMgVmlldwogICAgICAqIGNvbnRhaW5zIHRoZSB0ZXh0LCBpLmUuIGdldHRpbmcgdGhlIGxpc3Qgb2Yge0BsaW5rIEFjY2Vzc2liaWxpdHlOb2RlSW5mb31zCi0gICAgICogcmVwcmVzZXRpbmcgdGhlIHZpcnR1YWwgdmlld3Mgd2l0aCB0aGlzIHRleHQuCisgICAgICogcmVwcmVzZW50aW5nIHRoZSB2aXJ0dWFsIHZpZXdzIHdpdGggdGhpcyB0ZXh0LgogICAgICAqCiAgICAgICogQHNlZSAjZmluZFZpZXdzV2l0aFRleHQoQXJyYXlMaXN0LCBDaGFyU2VxdWVuY2UsIGludCkKICAgICAgKgpAQCAtMzQ4NSwyNyArMzU3OSw2NCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFBlcmZvcm0gaW5mbGF0aW9uIGZyb20gWE1MIGFuZCBhcHBseSBhIGNsYXNzLXNwZWNpZmljIGJhc2Ugc3R5bGUuIFRoaXMKLSAgICAgKiBjb25zdHJ1Y3RvciBvZiBWaWV3IGFsbG93cyBzdWJjbGFzc2VzIHRvIHVzZSB0aGVpciBvd24gYmFzZSBzdHlsZSB3aGVuCi0gICAgICogdGhleSBhcmUgaW5mbGF0aW5nLiBGb3IgZXhhbXBsZSwgYSBCdXR0b24gY2xhc3MncyBjb25zdHJ1Y3RvciB3b3VsZCBjYWxsCi0gICAgICogdGhpcyB2ZXJzaW9uIG9mIHRoZSBzdXBlciBjbGFzcyBjb25zdHJ1Y3RvciBhbmQgc3VwcGx5Ci0gICAgICogPGNvZGU+Ui5hdHRyLmJ1dHRvblN0eWxlPC9jb2RlPiBmb3IgPHZhcj5kZWZTdHlsZTwvdmFyPjsgdGhpcyBhbGxvd3MKLSAgICAgKiB0aGUgdGhlbWUncyBidXR0b24gc3R5bGUgdG8gbW9kaWZ5IGFsbCBvZiB0aGUgYmFzZSB2aWV3IGF0dHJpYnV0ZXMgKGluCi0gICAgICogcGFydGljdWxhciBpdHMgYmFja2dyb3VuZCkgYXMgd2VsbCBhcyB0aGUgQnV0dG9uIGNsYXNzJ3MgYXR0cmlidXRlcy4KKyAgICAgKiBQZXJmb3JtIGluZmxhdGlvbiBmcm9tIFhNTCBhbmQgYXBwbHkgYSBjbGFzcy1zcGVjaWZpYyBiYXNlIHN0eWxlIGZyb20gYQorICAgICAqIHRoZW1lIGF0dHJpYnV0ZS4gVGhpcyBjb25zdHJ1Y3RvciBvZiBWaWV3IGFsbG93cyBzdWJjbGFzc2VzIHRvIHVzZSB0aGVpcgorICAgICAqIG93biBiYXNlIHN0eWxlIHdoZW4gdGhleSBhcmUgaW5mbGF0aW5nLiBGb3IgZXhhbXBsZSwgYSBCdXR0b24gY2xhc3MncworICAgICAqIGNvbnN0cnVjdG9yIHdvdWxkIGNhbGwgdGhpcyB2ZXJzaW9uIG9mIHRoZSBzdXBlciBjbGFzcyBjb25zdHJ1Y3RvciBhbmQKKyAgICAgKiBzdXBwbHkgPGNvZGU+Ui5hdHRyLmJ1dHRvblN0eWxlPC9jb2RlPiBmb3IgPHZhcj5kZWZTdHlsZUF0dHI8L3Zhcj47IHRoaXMKKyAgICAgKiBhbGxvd3MgdGhlIHRoZW1lJ3MgYnV0dG9uIHN0eWxlIHRvIG1vZGlmeSBhbGwgb2YgdGhlIGJhc2UgdmlldyBhdHRyaWJ1dGVzCisgICAgICogKGluIHBhcnRpY3VsYXIgaXRzIGJhY2tncm91bmQpIGFzIHdlbGwgYXMgdGhlIEJ1dHRvbiBjbGFzcydzIGF0dHJpYnV0ZXMuCiAgICAgICoKICAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dCB0aGUgdmlldyBpcyBydW5uaW5nIGluLCB0aHJvdWdoIHdoaWNoIGl0IGNhbgogICAgICAqICAgICAgICBhY2Nlc3MgdGhlIGN1cnJlbnQgdGhlbWUsIHJlc291cmNlcywgZXRjLgogICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgWE1MIHRhZyB0aGF0IGlzIGluZmxhdGluZyB0aGUgdmlldy4KICAgICAgKiBAcGFyYW0gZGVmU3R5bGVBdHRyIEFuIGF0dHJpYnV0ZSBpbiB0aGUgY3VycmVudCB0aGVtZSB0aGF0IGNvbnRhaW5zIGEKLSAgICAgKiAgICAgICAgcmVmZXJlbmNlIHRvIGEgc3R5bGUgcmVzb3VyY2UgdG8gYXBwbHkgdG8gdGhpcyB2aWV3LiBJZiAwLCBubwotICAgICAqICAgICAgICBkZWZhdWx0IHN0eWxlIHdpbGwgYmUgYXBwbGllZC4KKyAgICAgKiAgICAgICAgcmVmZXJlbmNlIHRvIGEgc3R5bGUgcmVzb3VyY2UgdGhhdCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgKiAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KICAgICAgKiBAc2VlICNWaWV3KENvbnRleHQsIEF0dHJpYnV0ZVNldCkKICAgICAgKi8KICAgICBwdWJsaWMgVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFBlcmZvcm0gaW5mbGF0aW9uIGZyb20gWE1MIGFuZCBhcHBseSBhIGNsYXNzLXNwZWNpZmljIGJhc2Ugc3R5bGUgZnJvbSBhCisgICAgICogdGhlbWUgYXR0cmlidXRlIG9yIHN0eWxlIHJlc291cmNlLiBUaGlzIGNvbnN0cnVjdG9yIG9mIFZpZXcgYWxsb3dzCisgICAgICogc3ViY2xhc3NlcyB0byB1c2UgdGhlaXIgb3duIGJhc2Ugc3R5bGUgd2hlbiB0aGV5IGFyZSBpbmZsYXRpbmcuCisgICAgICogPHA+CisgICAgICogV2hlbiBkZXRlcm1pbmluZyB0aGUgZmluYWwgdmFsdWUgb2YgYSBwYXJ0aWN1bGFyIGF0dHJpYnV0ZSwgdGhlcmUgYXJlCisgICAgICogZm91ciBpbnB1dHMgdGhhdCBjb21lIGludG8gcGxheToKKyAgICAgKiA8b2w+CisgICAgICogPGxpPkFueSBhdHRyaWJ1dGUgdmFsdWVzIGluIHRoZSBnaXZlbiBBdHRyaWJ1dGVTZXQuCisgICAgICogPGxpPlRoZSBzdHlsZSByZXNvdXJjZSBzcGVjaWZpZWQgaW4gdGhlIEF0dHJpYnV0ZVNldCAobmFtZWQgInN0eWxlIikuCisgICAgICogPGxpPlRoZSBkZWZhdWx0IHN0eWxlIHNwZWNpZmllZCBieSA8dmFyPmRlZlN0eWxlQXR0cjwvdmFyPi4KKyAgICAgKiA8bGk+VGhlIGRlZmF1bHQgc3R5bGUgc3BlY2lmaWVkIGJ5IDx2YXI+ZGVmU3R5bGVSZXM8L3Zhcj4uCisgICAgICogPGxpPlRoZSBiYXNlIHZhbHVlcyBpbiB0aGlzIHRoZW1lLgorICAgICAqIDwvb2w+CisgICAgICogPHA+CisgICAgICogRWFjaCBvZiB0aGVzZSBpbnB1dHMgaXMgY29uc2lkZXJlZCBpbi1vcmRlciwgd2l0aCB0aGUgZmlyc3QgbGlzdGVkIHRha2luZworICAgICAqIHByZWNlZGVuY2Ugb3ZlciB0aGUgZm9sbG93aW5nIG9uZXMuIEluIG90aGVyIHdvcmRzLCBpZiBpbiB0aGUKKyAgICAgKiBBdHRyaWJ1dGVTZXQgeW91IGhhdmUgc3VwcGxpZWQgPGNvZGU+Jmx0O0J1dHRvbiAqIHRleHRDb2xvcj0iI2ZmMDAwMDAwIiZndDs8L2NvZGU+CisgICAgICogLCB0aGVuIHRoZSBidXR0b24ncyB0ZXh0IHdpbGwgPGVtPmFsd2F5czwvZW0+IGJlIGJsYWNrLCByZWdhcmRsZXNzIG9mCisgICAgICogd2hhdCBpcyBzcGVjaWZpZWQgaW4gYW55IG9mIHRoZSBzdHlsZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dCB0aGUgdmlldyBpcyBydW5uaW5nIGluLCB0aHJvdWdoIHdoaWNoIGl0IGNhbgorICAgICAqICAgICAgICBhY2Nlc3MgdGhlIGN1cnJlbnQgdGhlbWUsIHJlc291cmNlcywgZXRjLgorICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgWE1MIHRhZyB0aGF0IGlzIGluZmxhdGluZyB0aGUgdmlldy4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVBdHRyIEFuIGF0dHJpYnV0ZSBpbiB0aGUgY3VycmVudCB0aGVtZSB0aGF0IGNvbnRhaW5zIGEKKyAgICAgKiAgICAgICAgcmVmZXJlbmNlIHRvIGEgc3R5bGUgcmVzb3VyY2UgdGhhdCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgKiAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVSZXMgQSByZXNvdXJjZSBpZGVudGlmaWVyIG9mIGEgc3R5bGUgcmVzb3VyY2UgdGhhdAorICAgICAqICAgICAgICBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHZpZXcsIHVzZWQgb25seSBpZgorICAgICAqICAgICAgICBkZWZTdHlsZUF0dHIgaXMgMCBvciBjYW4gbm90IGJlIGZvdW5kIGluIHRoZSB0aGVtZS4gQ2FuIGJlIDAKKyAgICAgKiAgICAgICAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgorICAgICAqIEBzZWUgI1ZpZXcoQ29udGV4dCwgQXR0cmlidXRlU2V0LCBpbnQpCisgICAgICovCisgICAgcHVibGljIFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgewogICAgICAgICB0aGlzKGNvbnRleHQpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVmlldywKLSAgICAgICAgICAgICAgICBkZWZTdHlsZUF0dHIsIDApOworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIERyYXdhYmxlIGJhY2tncm91bmQgPSBudWxsOwogCkBAIC00NTk2LDcgKzQ3MjcsNyBAQAogICAgICAqIEBwYXJhbSBwcmV2aW91c2x5Rm9jdXNlZFJlY3QgVGhlIHJlY3RhbmdsZSBvZiB0aGUgdmlldyB0aGF0IGhhZCBmb2N1cwogICAgICAqICAgICAgICBwcmlvciBpbiB0aGlzIFZpZXcncyBjb29yZGluYXRlIHN5c3RlbS4KICAgICAgKi8KLSAgICB2b2lkIGhhbmRsZUZvY3VzR2FpbkludGVybmFsKGludCBkaXJlY3Rpb24sIFJlY3QgcHJldmlvdXNseUZvY3VzZWRSZWN0KSB7CisgICAgdm9pZCBoYW5kbGVGb2N1c0dhaW5JbnRlcm5hbChARm9jdXNSZWFsRGlyZWN0aW9uIGludCBkaXJlY3Rpb24sIFJlY3QgcHJldmlvdXNseUZvY3VzZWRSZWN0KSB7CiAgICAgICAgIGlmIChEQkcpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0aGlzICsgIiByZXF1ZXN0Rm9jdXMoKSIpOwogICAgICAgICB9CkBAIC00ODA3LDcgKzQ5MzgsOCBAQAogICAgICAqICAgICAgICBwYXNzZWQgaW4gYXMgZmluZXIgZ3JhaW5lZCBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0aGUgZm9jdXMgaXMgY29taW5nCiAgICAgICogICAgICAgIGZyb20gKGluIGFkZGl0aW9uIHRvIGRpcmVjdGlvbikuICBXaWxsIGJlIDxjb2RlPm51bGw8L2NvZGU+IG90aGVyd2lzZS4KICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkZvY3VzQ2hhbmdlZChib29sZWFuIGdhaW5Gb2N1cywgaW50IGRpcmVjdGlvbiwgUmVjdCBwcmV2aW91c2x5Rm9jdXNlZFJlY3QpIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkZvY3VzQ2hhbmdlZChib29sZWFuIGdhaW5Gb2N1cywgQEZvY3VzRGlyZWN0aW9uIGludCBkaXJlY3Rpb24sCisgICAgICAgICAgICBATnVsbGFibGUgUmVjdCBwcmV2aW91c2x5Rm9jdXNlZFJlY3QpIHsKICAgICAgICAgaWYgKGdhaW5Gb2N1cykgewogICAgICAgICAgICAgc2VuZEFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9WSUVXX0ZPQ1VTRUQpOwogICAgICAgICB9IGVsc2UgewpAQCAtNTY2Nyw2ICs1Nzk5LDcgQEAKICAgICAgKgogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI1ZpZXdfZHJhd2luZ0NhY2hlUXVhbGl0eQogICAgICAqLworICAgIEBEcmF3aW5nQ2FjaGVRdWFsaXR5CiAgICAgcHVibGljIGludCBnZXREcmF3aW5nQ2FjaGVRdWFsaXR5KCkgewogICAgICAgICByZXR1cm4gbVZpZXdGbGFncyAmIERSQVdJTkdfQ0FDSEVfUVVBTElUWV9NQVNLOwogICAgIH0KQEAgLTU2ODQsNyArNTgxNyw3IEBACiAgICAgICoKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNWaWV3X2RyYXdpbmdDYWNoZVF1YWxpdHkKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXREcmF3aW5nQ2FjaGVRdWFsaXR5KGludCBxdWFsaXR5KSB7CisgICAgcHVibGljIHZvaWQgc2V0RHJhd2luZ0NhY2hlUXVhbGl0eShARHJhd2luZ0NhY2hlUXVhbGl0eSBpbnQgcXVhbGl0eSkgewogICAgICAgICBzZXRGbGFncyhxdWFsaXR5LCBEUkFXSU5HX0NBQ0hFX1FVQUxJVFlfTUFTSyk7CiAgICAgfQogCkBAIC02MDIxLDYgKzYxNTQsNyBAQAogICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBJTlZJU0lCTEUsIHRvID0gIklOVklTSUJMRSIpLAogICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBHT05FLCAgICAgIHRvID0gIkdPTkUiKQogICAgIH0pCisgICAgQFZpc2liaWxpdHkKICAgICBwdWJsaWMgaW50IGdldFZpc2liaWxpdHkoKSB7CiAgICAgICAgIHJldHVybiBtVmlld0ZsYWdzICYgVklTSUJJTElUWV9NQVNLOwogICAgIH0KQEAgLTYwMzIsNyArNjE2Niw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjVmlld192aXNpYmlsaXR5CiAgICAgICovCiAgICAgQFJlbW90YWJsZVZpZXdNZXRob2QKLSAgICBwdWJsaWMgdm9pZCBzZXRWaXNpYmlsaXR5KGludCB2aXNpYmlsaXR5KSB7CisgICAgcHVibGljIHZvaWQgc2V0VmlzaWJpbGl0eShAVmlzaWJpbGl0eSBpbnQgdmlzaWJpbGl0eSkgewogICAgICAgICBzZXRGbGFncyh2aXNpYmlsaXR5LCBWSVNJQklMSVRZX01BU0spOwogICAgICAgICBpZiAobUJhY2tncm91bmQgIT0gbnVsbCkgbUJhY2tncm91bmQuc2V0VmlzaWJsZSh2aXNpYmlsaXR5ID09IFZJU0lCTEUsIGZhbHNlKTsKICAgICB9CkBAIC02MTkxLDYgKzYzMjUsNyBAQAogICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBMQVlPVVRfRElSRUNUSU9OX0lOSEVSSVQsIHRvID0gIklOSEVSSVQiKSwKICAgICAgICAgQFZpZXdEZWJ1Zy5JbnRUb1N0cmluZyhmcm9tID0gTEFZT1VUX0RJUkVDVElPTl9MT0NBTEUsICB0byA9ICJMT0NBTEUiKQogICAgIH0pCisgICAgQExheW91dERpcgogICAgIHB1YmxpYyBpbnQgZ2V0UmF3TGF5b3V0RGlyZWN0aW9uKCkgewogICAgICAgICByZXR1cm4gKG1Qcml2YXRlRmxhZ3MyICYgUEZMQUcyX0xBWU9VVF9ESVJFQ1RJT05fTUFTSykgPj4gUEZMQUcyX0xBWU9VVF9ESVJFQ1RJT05fTUFTS19TSElGVDsKICAgICB9CkBAIC02MjEzLDcgKzYzNDgsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI1ZpZXdfbGF5b3V0RGlyZWN0aW9uCiAgICAgICovCiAgICAgQFJlbW90YWJsZVZpZXdNZXRob2QKLSAgICBwdWJsaWMgdm9pZCBzZXRMYXlvdXREaXJlY3Rpb24oaW50IGxheW91dERpcmVjdGlvbikgeworICAgIHB1YmxpYyB2b2lkIHNldExheW91dERpcmVjdGlvbihATGF5b3V0RGlyIGludCBsYXlvdXREaXJlY3Rpb24pIHsKICAgICAgICAgaWYgKGdldFJhd0xheW91dERpcmVjdGlvbigpICE9IGxheW91dERpcmVjdGlvbikgewogICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgbGF5b3V0IGRpcmVjdGlvbiBhbmQgdGhlIHJlc29sdmVkIG9uZQogICAgICAgICAgICAgbVByaXZhdGVGbGFnczIgJj0gflBGTEFHMl9MQVlPVVRfRElSRUNUSU9OX01BU0s7CkBAIC02MjQzLDYgKzYzNzgsNyBAQAogICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBMQVlPVVRfRElSRUNUSU9OX0xUUiwgdG8gPSAiUkVTT0xWRURfRElSRUNUSU9OX0xUUiIpLAogICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBMQVlPVVRfRElSRUNUSU9OX1JUTCwgdG8gPSAiUkVTT0xWRURfRElSRUNUSU9OX1JUTCIpCiAgICAgfSkKKyAgICBAUmVzb2x2ZWRMYXlvdXREaXIKICAgICBwdWJsaWMgaW50IGdldExheW91dERpcmVjdGlvbigpIHsKICAgICAgICAgZmluYWwgaW50IHRhcmdldFNka1ZlcnNpb24gPSBnZXRDb250ZXh0KCkuZ2V0QXBwbGljYXRpb25JbmZvKCkudGFyZ2V0U2RrVmVyc2lvbjsKICAgICAgICAgaWYgKHRhcmdldFNka1ZlcnNpb24gPCBKRUxMWV9CRUFOX01SMSkgewpAQCAtNjYxMiw3ICs2NzQ4LDcgQEAKICAgICAgKiBAcmV0dXJuIFRoZSBuZWFyZXN0IGZvY3VzYWJsZSBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdGlvbiwgb3IgbnVsbCBpZiBub25lCiAgICAgICogICAgICAgICBjYW4gYmUgZm91bmQuCiAgICAgICovCi0gICAgcHVibGljIFZpZXcgZm9jdXNTZWFyY2goaW50IGRpcmVjdGlvbikgeworICAgIHB1YmxpYyBWaWV3IGZvY3VzU2VhcmNoKEBGb2N1c1JlYWxEaXJlY3Rpb24gaW50IGRpcmVjdGlvbikgewogICAgICAgICBpZiAobVBhcmVudCAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gbVBhcmVudC5mb2N1c1NlYXJjaCh0aGlzLCBkaXJlY3Rpb24pOwogICAgICAgICB9IGVsc2UgewpAQCAtNjYzMSw3ICs2NzY3LDcgQEAKICAgICAgKiAgICAgICAgRk9DVVNfRE9XTiwgRk9DVVNfTEVGVCwgYW5kIEZPQ1VTX1JJR0hULgogICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdGhpcyB2aWV3IGNvbnN1bWVkIHRoaXMgdW5oYW5kbGVkIG1vdmUuCiAgICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gZGlzcGF0Y2hVbmhhbmRsZWRNb3ZlKFZpZXcgZm9jdXNlZCwgaW50IGRpcmVjdGlvbikgeworICAgIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoVW5oYW5kbGVkTW92ZShWaWV3IGZvY3VzZWQsIEBGb2N1c1JlYWxEaXJlY3Rpb24gaW50IGRpcmVjdGlvbikgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC02NjQzLDcgKzY3NzksNyBAQAogICAgICAqIG9yIEZPQ1VTX0JBQ0tXQVJELgogICAgICAqIEByZXR1cm4gVGhlIHVzZXIgc3BlY2lmaWVkIG5leHQgdmlldywgb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgogICAgICAqLwotICAgIFZpZXcgZmluZFVzZXJTZXROZXh0Rm9jdXMoVmlldyByb290LCBpbnQgZGlyZWN0aW9uKSB7CisgICAgVmlldyBmaW5kVXNlclNldE5leHRGb2N1cyhWaWV3IHJvb3QsIEBGb2N1c0RpcmVjdGlvbiBpbnQgZGlyZWN0aW9uKSB7CiAgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgICAgICAgICBjYXNlIEZPQ1VTX0xFRlQ6CiAgICAgICAgICAgICAgICAgaWYgKG1OZXh0Rm9jdXNMZWZ0SWQgPT0gVmlldy5OT19JRCkgcmV0dXJuIG51bGw7CkBAIC02NjkzLDcgKzY4MjksNyBAQAogICAgICAqIEBwYXJhbSBkaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiBvZiB0aGUgZm9jdXMKICAgICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBmb2N1c2FibGUgdmlld3MKICAgICAgKi8KLSAgICBwdWJsaWMgQXJyYXlMaXN0PFZpZXc+IGdldEZvY3VzYWJsZXMoaW50IGRpcmVjdGlvbikgeworICAgIHB1YmxpYyBBcnJheUxpc3Q8Vmlldz4gZ2V0Rm9jdXNhYmxlcyhARm9jdXNEaXJlY3Rpb24gaW50IGRpcmVjdGlvbikgewogICAgICAgICBBcnJheUxpc3Q8Vmlldz4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxWaWV3PigyNCk7CiAgICAgICAgIGFkZEZvY3VzYWJsZXMocmVzdWx0LCBkaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjcwNyw3ICs2ODQzLDcgQEAKICAgICAgKiBAcGFyYW0gdmlld3MgRm9jdXNhYmxlIHZpZXdzIGZvdW5kIHNvIGZhcgogICAgICAqIEBwYXJhbSBkaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiBvZiB0aGUgZm9jdXMKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRGb2N1c2FibGVzKEFycmF5TGlzdDxWaWV3PiB2aWV3cywgaW50IGRpcmVjdGlvbikgeworICAgIHB1YmxpYyB2b2lkIGFkZEZvY3VzYWJsZXMoQXJyYXlMaXN0PFZpZXc+IHZpZXdzLCBARm9jdXNEaXJlY3Rpb24gaW50IGRpcmVjdGlvbikgewogICAgICAgICBhZGRGb2N1c2FibGVzKHZpZXdzLCBkaXJlY3Rpb24sIEZPQ1VTQUJMRVNfVE9VQ0hfTU9ERSk7CiAgICAgfQogCkBAIC02NzI3LDcgKzY4NjMsOCBAQAogICAgICAqIEBzZWUgI0ZPQ1VTQUJMRVNfQUxMCiAgICAgICogQHNlZSAjRk9DVVNBQkxFU19UT1VDSF9NT0RFCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkRm9jdXNhYmxlcyhBcnJheUxpc3Q8Vmlldz4gdmlld3MsIGludCBkaXJlY3Rpb24sIGludCBmb2N1c2FibGVNb2RlKSB7CisgICAgcHVibGljIHZvaWQgYWRkRm9jdXNhYmxlcyhBcnJheUxpc3Q8Vmlldz4gdmlld3MsIEBGb2N1c0RpcmVjdGlvbiBpbnQgZGlyZWN0aW9uLAorICAgICAgICAgICAgQEZvY3VzYWJsZU1vZGUgaW50IGZvY3VzYWJsZU1vZGUpIHsKICAgICAgICAgaWYgKHZpZXdzID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjc1Niw3ICs2ODkzLDggQEAKICAgICAgKiBAc2VlICNGSU5EX1ZJRVdTX1dJVEhfQ09OVEVOVF9ERVNDUklQVElPTgogICAgICAqIEBzZWUgI3NldENvbnRlbnREZXNjcmlwdGlvbihDaGFyU2VxdWVuY2UpCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgZmluZFZpZXdzV2l0aFRleHQoQXJyYXlMaXN0PFZpZXc+IG91dFZpZXdzLCBDaGFyU2VxdWVuY2Ugc2VhcmNoZWQsIGludCBmbGFncykgeworICAgIHB1YmxpYyB2b2lkIGZpbmRWaWV3c1dpdGhUZXh0KEFycmF5TGlzdDxWaWV3PiBvdXRWaWV3cywgQ2hhclNlcXVlbmNlIHNlYXJjaGVkLAorICAgICAgICAgICAgQEZpbmRWaWV3RmxhZ3MgaW50IGZsYWdzKSB7CiAgICAgICAgIGlmIChnZXRBY2Nlc3NpYmlsaXR5Tm9kZVByb3ZpZGVyKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKChmbGFncyAmIEZJTkRfVklFV1NfV0lUSF9BQ0NFU1NJQklMSVRZX05PREVfUFJPVklERVJTKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgb3V0Vmlld3MuYWRkKHRoaXMpOwpAQCAtNjgwMyw3ICs2OTQxLDYgQEAKICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBWaWV3IGlzIGFjY2Vzc2liaWxpdHkgZm9jdXNlZC4KICAgICAgKgogICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIFZpZXcgaXMgYWNjZXNzaWJpbGl0eSBmb2N1c2VkLgotICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNBY2Nlc3NpYmlsaXR5Rm9jdXNlZCgpIHsKICAgICAgICAgcmV0dXJuIChtUHJpdmF0ZUZsYWdzMiAmIFBGTEFHMl9BQ0NFU1NJQklMSVRZX0ZPQ1VTRUQpICE9IDA7CkBAIC03MTUxLDExICs3Mjg4LDM4IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogR2V0cyB3aGV0aGVyIHRoaXMgdmlldyBzaG91bGQgYmUgZXhwb3NlZCBmb3IgYWNjZXNzaWJpbGl0eS4KKyAgICAgKiBDb21wdXRlcyB3aGV0aGVyIHRoaXMgdmlldyBzaG91bGQgYmUgZXhwb3NlZCBmb3IgYWNjZXNzaWJpbGl0eS4gSW4KKyAgICAgKiBnZW5lcmFsLCB2aWV3cyB0aGF0IGFyZSBpbnRlcmFjdGl2ZSBvciBwcm92aWRlIGluZm9ybWF0aW9uIGFyZSBleHBvc2VkCisgICAgICogd2hpbGUgdmlld3MgdGhhdCBzZXJ2ZSBvbmx5IGFzIGNvbnRhaW5lcnMgYXJlIGhpZGRlbi4KKyAgICAgKiA8cD4KKyAgICAgKiBJZiBhbiBhbmNlc3RvciBvZiB0aGlzIHZpZXcgaGFzIGltcG9ydGFuY2UKKyAgICAgKiB7QGxpbmsgI0lNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9OT19ISURFX0RFU0NFTkRBTlRTfSwgdGhpcyBtZXRob2QKKyAgICAgKiByZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPi4KKyAgICAgKiA8cD4KKyAgICAgKiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBpcyBjb21wdXRlZCBhY2NvcmRpbmcgdG8gdGhlIHZpZXcncworICAgICAqIHtAbGluayAjZ2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSgpfSB2YWx1ZToKKyAgICAgKiA8b2w+CisgICAgICogPGxpPntAbGluayAjSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX05PfSBvcgorICAgICAqIHtAbGluayAjSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX05PX0hJREVfREVTQ0VOREFOVFN9LCByZXR1cm4gPGNvZGU+ZmFsc2UKKyAgICAgKiA8L2NvZGU+CisgICAgICogPGxpPntAbGluayAjSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX1lFU30sIHJldHVybiA8Y29kZT50cnVlPC9jb2RlPgorICAgICAqIDxsaT57QGxpbmsgI0lNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9BVVRPfSwgcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmCisgICAgICogdmlldyBzYXRpc2ZpZXMgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICogPHVsPgorICAgICAqIDxsaT5JcyBhY3Rpb25hYmxlLCBlLmcuIHtAbGluayAjaXNDbGlja2FibGUoKX0sCisgICAgICoge0BsaW5rICNpc0xvbmdDbGlja2FibGUoKX0sIG9yIHtAbGluayAjaXNGb2N1c2FibGUoKX0KKyAgICAgKiA8bGk+SGFzIGFuIHtAbGluayBBY2Nlc3NpYmlsaXR5RGVsZWdhdGV9CisgICAgICogPGxpPkhhcyBhbiBpbnRlcmFjdGlvbiBsaXN0ZW5lciwgZS5nLiB7QGxpbmsgT25Ub3VjaExpc3RlbmVyfSwKKyAgICAgKiB7QGxpbmsgT25LZXlMaXN0ZW5lcn0sIGV0Yy4KKyAgICAgKiA8bGk+SXMgYW4gYWNjZXNzaWJpbGl0eSBsaXZlIHJlZ2lvbiwgZS5nLgorICAgICAqIHtAbGluayAjZ2V0QWNjZXNzaWJpbGl0eUxpdmVSZWdpb24oKX0gaXMgbm90CisgICAgICoge0BsaW5rICNBQ0NFU1NJQklMSVRZX0xJVkVfUkVHSU9OX05PTkV9LgorICAgICAqIDwvdWw+CisgICAgICogPC9vbD4KICAgICAgKgogICAgICAqIEByZXR1cm4gV2hldGhlciB0aGUgdmlldyBpcyBleHBvc2VkIGZvciBhY2Nlc3NpYmlsaXR5LgotICAgICAqCi0gICAgICogQGhpZGUKKyAgICAgKiBAc2VlICNzZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KGludCkKKyAgICAgKiBAc2VlICNnZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KCkKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0ltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkoKSB7CiAgICAgICAgIGZpbmFsIGludCBtb2RlID0gKG1Qcml2YXRlRmxhZ3MyICYgUEZMQUcyX0lNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9NQVNLKQpAQCAtNzI0Nyw3ICs3NDExLDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFZpZXcgaGFzIHJlZ2lzdGVyZWQgY2FsbGJhY2tzIHdpY2ggbWFrZXMgaXQKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFZpZXcgaGFzIHJlZ2lzdGVyZWQgY2FsbGJhY2tzIHdoaWNoIG1ha2VzIGl0CiAgICAgICogaW1wb3J0YW50IGZvciBhY2Nlc3NpYmlsaXR5LgogICAgICAqCiAgICAgICogQHJldHVybiBUcnVlIGlmIHRoZSB2aWV3IGlzIGFjdGlvbmFibGUgZm9yIGFjY2Vzc2liaWxpdHkuCkBAIC03MjY2LDcgKzc0MzAsNyBAQAogICAgICAqIG5vdGlmaWNhdGlvbiBpcyBhdCBhdCBtb3N0IG9uY2UgZXZlcnkKICAgICAgKiB7QGxpbmsgVmlld0NvbmZpZ3VyYXRpb24jZ2V0U2VuZFJlY3VycmluZ0FjY2Vzc2liaWxpdHlFdmVudHNJbnRlcnZhbCgpfQogICAgICAqIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGxvYWQgdG8gdGhlIHN5c3RlbS4gQWxzbyBvbmNlIGEgdmlldyBoYXMgYSBwZW5kaW5nCi0gICAgICogbm90aWZ1Y2F0aW9uIHRoaXMgbWV0aG9kIGlzIGEgTk9QIHVudGlsIHRoZSBub3RpZmljYXRpb24gaGFzIGJlZW4gc2VudC4KKyAgICAgKiBub3RpZmljYXRpb24gdGhpcyBtZXRob2QgaXMgYSBOT1AgdW50aWwgdGhlIG5vdGlmaWNhdGlvbiBoYXMgYmVlbiBzZW50LgogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KQEAgLTc5NDYsNyArODExMCw4IEBACiAgICAgICogQHBhcmFtIHZpc2liaWxpdHkgVGhlIG5ldyB2aXNpYmlsaXR5IG9mIGNoYW5nZWRWaWV3OiB7QGxpbmsgI1ZJU0lCTEV9LAogICAgICAqIHtAbGluayAjSU5WSVNJQkxFfSBvciB7QGxpbmsgI0dPTkV9LgogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGRpc3BhdGNoVmlzaWJpbGl0eUNoYW5nZWQoVmlldyBjaGFuZ2VkVmlldywgaW50IHZpc2liaWxpdHkpIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCBkaXNwYXRjaFZpc2liaWxpdHlDaGFuZ2VkKEBOb25OdWxsIFZpZXcgY2hhbmdlZFZpZXcsCisgICAgICAgICAgICBAVmlzaWJpbGl0eSBpbnQgdmlzaWJpbGl0eSkgewogICAgICAgICBvblZpc2liaWxpdHlDaGFuZ2VkKGNoYW5nZWRWaWV3LCB2aXNpYmlsaXR5KTsKICAgICB9CiAKQEAgLTc5NTcsNyArODEyMiw3IEBACiAgICAgICogQHBhcmFtIHZpc2liaWxpdHkgVGhlIG5ldyB2aXNpYmlsaXR5IG9mIGNoYW5nZWRWaWV3OiB7QGxpbmsgI1ZJU0lCTEV9LAogICAgICAqIHtAbGluayAjSU5WSVNJQkxFfSBvciB7QGxpbmsgI0dPTkV9LgogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIG9uVmlzaWJpbGl0eUNoYW5nZWQoVmlldyBjaGFuZ2VkVmlldywgaW50IHZpc2liaWxpdHkpIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblZpc2liaWxpdHlDaGFuZ2VkKEBOb25OdWxsIFZpZXcgY2hhbmdlZFZpZXcsIEBWaXNpYmlsaXR5IGludCB2aXNpYmlsaXR5KSB7CiAgICAgICAgIGlmICh2aXNpYmlsaXR5ID09IFZJU0lCTEUpIHsKICAgICAgICAgICAgIGlmIChtQXR0YWNoSW5mbyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaW5pdGlhbEF3YWtlblNjcm9sbEJhcnMoKTsKQEAgLTc5NzYsNyArODE0MSw3IEBACiAgICAgICogQHBhcmFtIGhpbnQgQSBoaW50IGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgdmlldyBpcyBkaXNwbGF5ZWQ6CiAgICAgICoge0BsaW5rICNWSVNJQkxFfSBvciB7QGxpbmsgI0lOVklTSUJMRX0uCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgZGlzcGF0Y2hEaXNwbGF5SGludChpbnQgaGludCkgeworICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoRGlzcGxheUhpbnQoQFZpc2liaWxpdHkgaW50IGhpbnQpIHsKICAgICAgICAgb25EaXNwbGF5SGludChoaW50KTsKICAgICB9CiAKQEAgLTc5ODksNyArODE1NCw3IEBACiAgICAgICogQHBhcmFtIGhpbnQgQSBoaW50IGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgdmlldyBpcyBkaXNwbGF5ZWQ6CiAgICAgICoge0BsaW5rICNWSVNJQkxFfSBvciB7QGxpbmsgI0lOVklTSUJMRX0uCiAgICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgb25EaXNwbGF5SGludChpbnQgaGludCkgeworICAgIHByb3RlY3RlZCB2b2lkIG9uRGlzcGxheUhpbnQoQFZpc2liaWxpdHkgaW50IGhpbnQpIHsKICAgICB9CiAKICAgICAvKioKQEAgLTgwMDAsNyArODE2NSw3IEBACiAgICAgICoKICAgICAgKiBAc2VlICNvbldpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGludCkKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaFdpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGludCB2aXNpYmlsaXR5KSB7CisgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hXaW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChAVmlzaWJpbGl0eSBpbnQgdmlzaWJpbGl0eSkgewogICAgICAgICBvbldpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKHZpc2liaWxpdHkpOwogICAgIH0KIApAQCAtODAxNCw3ICs4MTc5LDcgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSB2aXNpYmlsaXR5IFRoZSBuZXcgdmlzaWJpbGl0eSBvZiB0aGUgd2luZG93LgogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIG9uV2luZG93VmlzaWJpbGl0eUNoYW5nZWQoaW50IHZpc2liaWxpdHkpIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbldpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKEBWaXNpYmlsaXR5IGludCB2aXNpYmlsaXR5KSB7CiAgICAgICAgIGlmICh2aXNpYmlsaXR5ID09IFZJU0lCTEUpIHsKICAgICAgICAgICAgIGluaXRpYWxBd2FrZW5TY3JvbGxCYXJzKCk7CiAgICAgICAgIH0KQEAgLTgwMjYsNiArODE5MSw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgdmlzaWJpbGl0eSBvZiB0aGUgdmlldydzIHdpbmRvdy4KICAgICAgKi8KKyAgICBAVmlzaWJpbGl0eQogICAgIHB1YmxpYyBpbnQgZ2V0V2luZG93VmlzaWJpbGl0eSgpIHsKICAgICAgICAgcmV0dXJuIG1BdHRhY2hJbmZvICE9IG51bGwgPyBtQXR0YWNoSW5mby5tV2luZG93VmlzaWJpbGl0eSA6IEdPTkU7CiAgICAgfQpAQCAtMTA4MTgsMTUgKzEwOTg0LDYgQEAKICAgICAgICAgICAgIG1Qcml2YXRlRmxhZ3MgfD0gUEZMQUdfRElSVFk7CiAgICAgICAgICAgICBmaW5hbCBWaWV3UGFyZW50IHAgPSBtUGFyZW50OwogICAgICAgICAgICAgZmluYWwgQXR0YWNoSW5mbyBhaSA9IG1BdHRhY2hJbmZvOwotICAgICAgICAgICAgLy9ub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb24sQ29uc3RhbnRDb25kaXRpb25zCi0gICAgICAgICAgICBpZiAoIUhhcmR3YXJlUmVuZGVyZXIuUkVOREVSX0RJUlRZX1JFR0lPTlMpIHsKLSAgICAgICAgICAgICAgICBpZiAocCAhPSBudWxsICYmIGFpICE9IG51bGwgJiYgYWkubUhhcmR3YXJlQWNjZWxlcmF0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmFzdC10cmFjayBmb3IgR0wtZW5hYmxlZCBhcHBsaWNhdGlvbnM7IGp1c3QgaW52YWxpZGF0ZSB0aGUgd2hvbGUgaGllcmFyY2h5Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSBudWxsIGRpcnR5IHJlY3QsIHdoaWNoIHRlbGxzIHRoZSBWaWV3QW5jZXN0b3IgdG8gcmVkcmF3IGV2ZXJ5dGhpbmcKLSAgICAgICAgICAgICAgICAgICAgcC5pbnZhbGlkYXRlQ2hpbGQodGhpcywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocCAhPSBudWxsICYmIGFpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc2Nyb2xsWCA9IG1TY3JvbGxYOwogICAgICAgICAgICAgICAgIGZpbmFsIGludCBzY3JvbGxZID0gbVNjcm9sbFk7CkBAIC0xMDg2MSwxNSArMTEwMTgsNiBAQAogICAgICAgICAgICAgbVByaXZhdGVGbGFncyB8PSBQRkxBR19ESVJUWTsKICAgICAgICAgICAgIGZpbmFsIFZpZXdQYXJlbnQgcCA9IG1QYXJlbnQ7CiAgICAgICAgICAgICBmaW5hbCBBdHRhY2hJbmZvIGFpID0gbUF0dGFjaEluZm87Ci0gICAgICAgICAgICAvL25vaW5zcGVjdGlvbiBQb2ludGxlc3NCb29sZWFuRXhwcmVzc2lvbixDb25zdGFudENvbmRpdGlvbnMKLSAgICAgICAgICAgIGlmICghSGFyZHdhcmVSZW5kZXJlci5SRU5ERVJfRElSVFlfUkVHSU9OUykgewotICAgICAgICAgICAgICAgIGlmIChwICE9IG51bGwgJiYgYWkgIT0gbnVsbCAmJiBhaS5tSGFyZHdhcmVBY2NlbGVyYXRlZCkgewotICAgICAgICAgICAgICAgICAgICAvLyBmYXN0LXRyYWNrIGZvciBHTC1lbmFibGVkIGFwcGxpY2F0aW9uczsganVzdCBpbnZhbGlkYXRlIHRoZSB3aG9sZSBoaWVyYXJjaHkKLSAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCBhIG51bGwgZGlydHkgcmVjdCwgd2hpY2ggdGVsbHMgdGhlIFZpZXdBbmNlc3RvciB0byByZWRyYXcgZXZlcnl0aGluZwotICAgICAgICAgICAgICAgICAgICBwLmludmFsaWRhdGVDaGlsZCh0aGlzLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChwICE9IG51bGwgJiYgYWkgIT0gbnVsbCAmJiBsIDwgciAmJiB0IDwgYikgewogICAgICAgICAgICAgICAgIGZpbmFsIGludCBzY3JvbGxYID0gbVNjcm9sbFg7CiAgICAgICAgICAgICAgICAgZmluYWwgaW50IHNjcm9sbFkgPSBtU2Nyb2xsWTsKQEAgLTEwOTE3LDE1ICsxMTA2NSw2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmaW5hbCBBdHRhY2hJbmZvIGFpID0gbUF0dGFjaEluZm87CiAgICAgICAgICAgICBmaW5hbCBWaWV3UGFyZW50IHAgPSBtUGFyZW50OwotICAgICAgICAgICAgLy9ub2luc3BlY3Rpb24gUG9pbnRsZXNzQm9vbGVhbkV4cHJlc3Npb24sQ29uc3RhbnRDb25kaXRpb25zCi0gICAgICAgICAgICBpZiAoIUhhcmR3YXJlUmVuZGVyZXIuUkVOREVSX0RJUlRZX1JFR0lPTlMpIHsKLSAgICAgICAgICAgICAgICBpZiAocCAhPSBudWxsICYmIGFpICE9IG51bGwgJiYgYWkubUhhcmR3YXJlQWNjZWxlcmF0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmFzdC10cmFjayBmb3IgR0wtZW5hYmxlZCBhcHBsaWNhdGlvbnM7IGp1c3QgaW52YWxpZGF0ZSB0aGUgd2hvbGUgaGllcmFyY2h5Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSBudWxsIGRpcnR5IHJlY3QsIHdoaWNoIHRlbGxzIHRoZSBWaWV3QW5jZXN0b3IgdG8gcmVkcmF3IGV2ZXJ5dGhpbmcKLSAgICAgICAgICAgICAgICAgICAgcC5pbnZhbGlkYXRlQ2hpbGQodGhpcywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChwICE9IG51bGwgJiYgYWkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGZpbmFsIFJlY3QgciA9IGFpLm1UbXBJbnZhbFJlY3Q7CkBAIC0xMTA5Niw2ICsxMTIzNSwxMyBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIEhhcmR3YXJlUmVuZGVyZXIgZ2V0SGFyZHdhcmVSZW5kZXJlcigpIHsKKyAgICAgICAgcmV0dXJuIG1BdHRhY2hJbmZvICE9IG51bGwgPyBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlciA6IG51bGw7CisgICAgfQorCisgICAgLyoqCiAgICAgICogPHA+Q2F1c2VzIHRoZSBSdW5uYWJsZSB0byBiZSBhZGRlZCB0byB0aGUgbWVzc2FnZSBxdWV1ZS4KICAgICAgKiBUaGUgcnVubmFibGUgd2lsbCBiZSBydW4gb24gdGhlIHVzZXIgaW50ZXJmYWNlIHRocmVhZC48L3A+CiAgICAgICoKQEAgLTExMjEyLDEwICsxMTM1OCw5IEBACiAgICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tSGFuZGxlci5yZW1vdmVDYWxsYmFja3MoYWN0aW9uKTsKICAgICAgICAgICAgICAgICBhdHRhY2hJbmZvLm1WaWV3Um9vdEltcGwubUNob3Jlb2dyYXBoZXIucmVtb3ZlQ2FsbGJhY2tzKAogICAgICAgICAgICAgICAgICAgICAgICAgQ2hvcmVvZ3JhcGhlci5DQUxMQkFDS19BTklNQVRJT04sIGFjdGlvbiwgbnVsbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IHBvc3Qgd2lsbCBzdWNjZWVkIGxhdGVyCi0gICAgICAgICAgICAgICAgVmlld1Jvb3RJbXBsLmdldFJ1blF1ZXVlKCkucmVtb3ZlQ2FsbGJhY2tzKGFjdGlvbik7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBBc3N1bWUgdGhhdCBwb3N0IHdpbGwgc3VjY2VlZCBsYXRlcgorICAgICAgICAgICAgVmlld1Jvb3RJbXBsLmdldFJ1blF1ZXVlKCkucmVtb3ZlQ2FsbGJhY2tzKGFjdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTE3MDYsNyArMTE4NTEsNyBAQAogICAgICAqCiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjVmlld19zY3JvbGxiYXJTdHlsZQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFNjcm9sbEJhclN0eWxlKGludCBzdHlsZSkgeworICAgIHB1YmxpYyB2b2lkIHNldFNjcm9sbEJhclN0eWxlKEBTY3JvbGxCYXJTdHlsZSBpbnQgc3R5bGUpIHsKICAgICAgICAgaWYgKHN0eWxlICE9IChtVmlld0ZsYWdzICYgU0NST0xMQkFSU19TVFlMRV9NQVNLKSkgewogICAgICAgICAgICAgbVZpZXdGbGFncyA9IChtVmlld0ZsYWdzICYgflNDUk9MTEJBUlNfU1RZTEVfTUFTSykgfCAoc3R5bGUgJiBTQ1JPTExCQVJTX1NUWUxFX01BU0spOwogICAgICAgICAgICAgY29tcHV0ZU9wYXF1ZUZsYWdzKCk7CkBAIC0xMTczMCw2ICsxMTg3NSw3IEBACiAgICAgICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBTQ1JPTExCQVJTX09VVFNJREVfT1ZFUkxBWSwgdG8gPSAiT1VUU0lERV9PVkVSTEFZIiksCiAgICAgICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBTQ1JPTExCQVJTX09VVFNJREVfSU5TRVQsIHRvID0gIk9VVFNJREVfSU5TRVQiKQogICAgIH0pCisgICAgQFNjcm9sbEJhclN0eWxlCiAgICAgcHVibGljIGludCBnZXRTY3JvbGxCYXJTdHlsZSgpIHsKICAgICAgICAgcmV0dXJuIG1WaWV3RmxhZ3MgJiBTQ1JPTExCQVJTX1NUWUxFX01BU0s7CiAgICAgfQpAQCAtMTIyMzEsNyArMTIzNzcsNyBAQAogICAgICAqIEBzZWUgI0xBWU9VVF9ESVJFQ1RJT05fTFRSCiAgICAgICogQHNlZSAjTEFZT1VUX0RJUkVDVElPTl9SVEwKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvblJ0bFByb3BlcnRpZXNDaGFuZ2VkKGludCBsYXlvdXREaXJlY3Rpb24pIHsKKyAgICBwdWJsaWMgdm9pZCBvblJ0bFByb3BlcnRpZXNDaGFuZ2VkKEBSZXNvbHZlZExheW91dERpciBpbnQgbGF5b3V0RGlyZWN0aW9uKSB7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMzI2MCwyMCArMTM0MDYsNiBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIEByZXR1cm4gVGhlIHtAbGluayBIYXJkd2FyZVJlbmRlcmVyfSBhc3NvY2lhdGVkIHdpdGggdGhhdCB2aWV3IG9yIG51bGwgaWYKLSAgICAgKiAgICAgICAgIGhhcmR3YXJlIHJlbmRlcmluZyBpcyBub3Qgc3VwcG9ydGVkIG9yIHRoaXMgdmlldyBpcyBub3QgYXR0YWNoZWQKLSAgICAgKiAgICAgICAgIHRvIGEgd2luZG93LgotICAgICAqCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICBwdWJsaWMgSGFyZHdhcmVSZW5kZXJlciBnZXRIYXJkd2FyZVJlbmRlcmVyKCkgewotICAgICAgICBpZiAobUF0dGFjaEluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgogICAgICAqIFJldHVybnMgYSBEaXNwbGF5TGlzdC4gSWYgdGhlIGluY29taW5nIGRpc3BsYXlMaXN0IGlzIG51bGwsIG9uZSB3aWxsIGJlIGNyZWF0ZWQuCiAgICAgICogT3RoZXJ3aXNlLCB0aGUgc2FtZSBkaXNwbGF5IGxpc3Qgd2lsbCBiZSByZXR1cm5lZCAoYWZ0ZXIgaGF2aW5nIGJlZW4gcmVuZGVyZWQgaW50bwogICAgICAqIGFsb25nIHRoZSB3YXksIGRlcGVuZGluZyBvbiB0aGUgaW52YWxpZGF0aW9uIHN0YXRlIG9mIHRoZSB2aWV3KS4KQEAgLTEzMzA4LDcgKzEzNDQwLDcgQEAKICAgICAgICAgICAgICAgICBtUmVjcmVhdGVEaXNwbGF5TGlzdCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZGlzcGxheUxpc3QgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGRpc3BsYXlMaXN0ID0gbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIuY3JlYXRlRGlzcGxheUxpc3QoZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGRpc3BsYXlMaXN0ID0gRGlzcGxheUxpc3QuY3JlYXRlKGdldENsYXNzKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBjcmVhdGluZyBhIG5ldyBkaXNwbGF5IGxpc3QsIG1ha2Ugc3VyZSBvdXIgcGFyZW50IGdldHMgaW52YWxpZGF0ZWQKICAgICAgICAgICAgICAgICAvLyBzaW5jZSB0aGV5IHdpbGwgbmVlZCB0byByZWNyZWF0ZSB0aGVpciBkaXNwbGF5IGxpc3QgdG8gYWNjb3VudCBmb3IgdGhpcwogICAgICAgICAgICAgICAgIC8vIG5ldyBjaGlsZCBkaXNwbGF5IGxpc3QuCkBAIC0xNTAwMyw5ICsxNTEzNSw4IEBACiAgICAgICAgICAgICBpZiAobUF0dGFjaEluZm8gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1WaWV3Um9vdEltcGwubUNob3Jlb2dyYXBoZXIucmVtb3ZlQ2FsbGJhY2tzKAogICAgICAgICAgICAgICAgICAgICAgICAgQ2hvcmVvZ3JhcGhlci5DQUxMQkFDS19BTklNQVRJT04sIHdoYXQsIHdobyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFZpZXdSb290SW1wbC5nZXRSdW5RdWV1ZSgpLnJlbW92ZUNhbGxiYWNrcyh3aGF0KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFZpZXdSb290SW1wbC5nZXRSdW5RdWV1ZSgpLnJlbW92ZUNhbGxiYWNrcyh3aGF0KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTUwNjgsNyArMTUxOTksNyBAQAogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvblJlc29sdmVEcmF3YWJsZXMoaW50IGxheW91dERpcmVjdGlvbikgeworICAgIHB1YmxpYyB2b2lkIG9uUmVzb2x2ZURyYXdhYmxlcyhAUmVzb2x2ZWRMYXlvdXREaXIgaW50IGxheW91dERpcmVjdGlvbikgewogICAgIH0KIAogICAgIC8qKgpAQCAtMTU4MzUsOCArMTU5NjYsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIHRyYW5zZm9ybU1vdGlvbkV2ZW50VG9HbG9iYWwoZXYpOwotICAgICAgICBldi5vZmZzZXRMb2NhdGlvbihpbmZvLm1XaW5kb3dMZWZ0LCBpbmZvLm1XaW5kb3dUb3ApOworICAgICAgICBmaW5hbCBNYXRyaXggbSA9IGluZm8ubVRtcE1hdHJpeDsKKyAgICAgICAgbS5zZXQoTWF0cml4LklERU5USVRZX01BVFJJWCk7CisgICAgICAgIHRyYW5zZm9ybU1hdHJpeFRvR2xvYmFsKG0pOworICAgICAgICBldi50cmFuc2Zvcm0obSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTU4NTQsNTQgKzE1OTg3LDYwIEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBldi5vZmZzZXRMb2NhdGlvbigtaW5mby5tV2luZG93TGVmdCwgLWluZm8ubVdpbmRvd1RvcCk7Ci0gICAgICAgIHRyYW5zZm9ybU1vdGlvbkV2ZW50VG9Mb2NhbChldik7CisgICAgICAgIGZpbmFsIE1hdHJpeCBtID0gaW5mby5tVG1wTWF0cml4OworICAgICAgICBtLnNldChNYXRyaXguSURFTlRJVFlfTUFUUklYKTsKKyAgICAgICAgdHJhbnNmb3JtTWF0cml4VG9Mb2NhbChtKTsKKyAgICAgICAgZXYudHJhbnNmb3JtKG0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZWN1cnNpdmUgaGVscGVyIG1ldGhvZCB0aGF0IGFwcGxpZXMgdHJhbnNmb3JtYXRpb25zIGluIHBvc3Qtb3JkZXIuCisgICAgICogTW9kaWZpZXMgdGhlIGlucHV0IG1hdHJpeCBzdWNoIHRoYXQgaXQgbWFwcyB2aWV3LWxvY2FsIGNvb3JkaW5hdGVzIHRvCisgICAgICogb24tc2NyZWVuIGNvb3JkaW5hdGVzLgogICAgICAqCi0gICAgICogQHBhcmFtIGV2IHRoZSBvbi1zY3JlZW4gbW90aW9uIGV2ZW50CisgICAgICogQHBhcmFtIG0gaW5wdXQgbWF0cml4IHRvIG1vZGlmeQogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCB0cmFuc2Zvcm1Nb3Rpb25FdmVudFRvTG9jYWwoTW90aW9uRXZlbnQgZXYpIHsKKyAgICB2b2lkIHRyYW5zZm9ybU1hdHJpeFRvR2xvYmFsKE1hdHJpeCBtKSB7CiAgICAgICAgIGZpbmFsIFZpZXdQYXJlbnQgcGFyZW50ID0gbVBhcmVudDsKICAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFZpZXcpIHsKICAgICAgICAgICAgIGZpbmFsIFZpZXcgdnAgPSAoVmlldykgcGFyZW50OwotICAgICAgICAgICAgdnAudHJhbnNmb3JtTW90aW9uRXZlbnRUb0xvY2FsKGV2KTsKLSAgICAgICAgICAgIGV2Lm9mZnNldExvY2F0aW9uKHZwLm1TY3JvbGxYLCB2cC5tU2Nyb2xsWSk7CisgICAgICAgICAgICB2cC50cmFuc2Zvcm1NYXRyaXhUb0dsb2JhbChtKTsKKyAgICAgICAgICAgIG0ucG9zdFRyYW5zbGF0ZSgtdnAubVNjcm9sbFgsIC12cC5tU2Nyb2xsWSk7CiAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgVmlld1Jvb3RJbXBsKSB7CiAgICAgICAgICAgICBmaW5hbCBWaWV3Um9vdEltcGwgdnIgPSAoVmlld1Jvb3RJbXBsKSBwYXJlbnQ7Ci0gICAgICAgICAgICBldi5vZmZzZXRMb2NhdGlvbigwLCB2ci5tQ3VyU2Nyb2xsWSk7CisgICAgICAgICAgICB2ci50cmFuc2Zvcm1NYXRyaXhUb0dsb2JhbChtKTsKKyAgICAgICAgICAgIG0ucG9zdFRyYW5zbGF0ZSgwLCAtdnIubUN1clNjcm9sbFkpOwogICAgICAgICB9CiAKLSAgICAgICAgZXYub2Zmc2V0TG9jYXRpb24oLW1MZWZ0LCAtbVRvcCk7CisgICAgICAgIG0ucG9zdFRyYW5zbGF0ZShtTGVmdCwgbVRvcCk7CiAKICAgICAgICAgaWYgKCFoYXNJZGVudGl0eU1hdHJpeCgpKSB7Ci0gICAgICAgICAgICBldi50cmFuc2Zvcm0oZ2V0SW52ZXJzZU1hdHJpeCgpKTsKKyAgICAgICAgICAgIG0ucG9zdENvbmNhdChnZXRNYXRyaXgoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZWN1cnNpdmUgaGVscGVyIG1ldGhvZCB0aGF0IGFwcGxpZXMgdHJhbnNmb3JtYXRpb25zIGluIHByZS1vcmRlci4KKyAgICAgKiBNb2RpZmllcyB0aGUgaW5wdXQgbWF0cml4IHN1Y2ggdGhhdCBpdCBtYXBzIG9uLXNjcmVlbiBjb29yZGluYXRlcyB0bworICAgICAqIHZpZXctbG9jYWwgY29vcmRpbmF0ZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gZXYgdGhlIG9uLXNjcmVlbiBtb3Rpb24gZXZlbnQKKyAgICAgKiBAcGFyYW0gbSBpbnB1dCBtYXRyaXggdG8gbW9kaWZ5CiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHRyYW5zZm9ybU1vdGlvbkV2ZW50VG9HbG9iYWwoTW90aW9uRXZlbnQgZXYpIHsKLSAgICAgICAgaWYgKCFoYXNJZGVudGl0eU1hdHJpeCgpKSB7Ci0gICAgICAgICAgICBldi50cmFuc2Zvcm0oZ2V0TWF0cml4KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZXYub2Zmc2V0TG9jYXRpb24obUxlZnQsIG1Ub3ApOwotCisgICAgdm9pZCB0cmFuc2Zvcm1NYXRyaXhUb0xvY2FsKE1hdHJpeCBtKSB7CiAgICAgICAgIGZpbmFsIFZpZXdQYXJlbnQgcGFyZW50ID0gbVBhcmVudDsKICAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFZpZXcpIHsKICAgICAgICAgICAgIGZpbmFsIFZpZXcgdnAgPSAoVmlldykgcGFyZW50OwotICAgICAgICAgICAgZXYub2Zmc2V0TG9jYXRpb24oLXZwLm1TY3JvbGxYLCAtdnAubVNjcm9sbFkpOwotICAgICAgICAgICAgdnAudHJhbnNmb3JtTW90aW9uRXZlbnRUb0dsb2JhbChldik7CisgICAgICAgICAgICB2cC50cmFuc2Zvcm1NYXRyaXhUb0xvY2FsKG0pOworICAgICAgICAgICAgbS5wcmVUcmFuc2xhdGUodnAubVNjcm9sbFgsIHZwLm1TY3JvbGxZKTsKICAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBWaWV3Um9vdEltcGwpIHsKICAgICAgICAgICAgIGZpbmFsIFZpZXdSb290SW1wbCB2ciA9IChWaWV3Um9vdEltcGwpIHBhcmVudDsKLSAgICAgICAgICAgIGV2Lm9mZnNldExvY2F0aW9uKDAsIC12ci5tQ3VyU2Nyb2xsWSk7CisgICAgICAgICAgICB2ci50cmFuc2Zvcm1NYXRyaXhUb0xvY2FsKG0pOworICAgICAgICAgICAgbS5wcmVUcmFuc2xhdGUoMCwgdnIubUN1clNjcm9sbFkpOworICAgICAgICB9CisKKyAgICAgICAgbS5wcmVUcmFuc2xhdGUoLW1MZWZ0LCAtbVRvcCk7CisKKyAgICAgICAgaWYgKCFoYXNJZGVudGl0eU1hdHJpeCgpKSB7CisgICAgICAgICAgICBtLnByZUNvbmNhdChnZXRJbnZlcnNlTWF0cml4KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNzg3MCw2ICsxODAwOSw3IEBACiAgICAgICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBURVhUX0FMSUdOTUVOVF9WSUVXX1NUQVJULCB0byA9ICJWSUVXX1NUQVJUIiksCiAgICAgICAgICAgICBAVmlld0RlYnVnLkludFRvU3RyaW5nKGZyb20gPSBURVhUX0FMSUdOTUVOVF9WSUVXX0VORCwgdG8gPSAiVklFV19FTkQiKQogICAgIH0pCisgICAgQFRleHRBbGlnbm1lbnQKICAgICBwdWJsaWMgaW50IGdldFJhd1RleHRBbGlnbm1lbnQoKSB7CiAgICAgICAgIHJldHVybiAobVByaXZhdGVGbGFnczIgJiBQRkxBRzJfVEVYVF9BTElHTk1FTlRfTUFTSykgPj4gUEZMQUcyX1RFWFRfQUxJR05NRU5UX01BU0tfU0hJRlQ7CiAgICAgfQpAQCAtMTc4OTMsNyArMTgwMzMsNyBAQAogICAgICAqCiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjVmlld190ZXh0QWxpZ25tZW50CiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0VGV4dEFsaWdubWVudChpbnQgdGV4dEFsaWdubWVudCkgeworICAgIHB1YmxpYyB2b2lkIHNldFRleHRBbGlnbm1lbnQoQFRleHRBbGlnbm1lbnQgaW50IHRleHRBbGlnbm1lbnQpIHsKICAgICAgICAgaWYgKHRleHRBbGlnbm1lbnQgIT0gZ2V0UmF3VGV4dEFsaWdubWVudCgpKSB7CiAgICAgICAgICAgICAvLyBSZXNldCB0aGUgY3VycmVudCBhbmQgcmVzb2x2ZWQgdGV4dCBhbGlnbm1lbnQKICAgICAgICAgICAgIG1Qcml2YXRlRmxhZ3MyICY9IH5QRkxBRzJfVEVYVF9BTElHTk1FTlRfTUFTSzsKQEAgLTE3OTM0LDYgKzE4MDc0LDcgQEAKICAgICAgICAgICAgIEBWaWV3RGVidWcuSW50VG9TdHJpbmcoZnJvbSA9IFRFWFRfQUxJR05NRU5UX1ZJRVdfU1RBUlQsIHRvID0gIlZJRVdfU1RBUlQiKSwKICAgICAgICAgICAgIEBWaWV3RGVidWcuSW50VG9TdHJpbmcoZnJvbSA9IFRFWFRfQUxJR05NRU5UX1ZJRVdfRU5ELCB0byA9ICJWSUVXX0VORCIpCiAgICAgfSkKKyAgICBAVGV4dEFsaWdubWVudAogICAgIHB1YmxpYyBpbnQgZ2V0VGV4dEFsaWdubWVudCgpIHsKICAgICAgICAgcmV0dXJuIChtUHJpdmF0ZUZsYWdzMiAmIFBGTEFHMl9URVhUX0FMSUdOTUVOVF9SRVNPTFZFRF9NQVNLKSA+PgogICAgICAgICAgICAgICAgIFBGTEFHMl9URVhUX0FMSUdOTUVOVF9SRVNPTFZFRF9NQVNLX1NISUZUOwpAQCAtMTg3MzUsOCArMTg4NzYsNiBAQAogCiAgICAgICAgIGZpbmFsIENhbGxiYWNrcyBtUm9vdENhbGxiYWNrczsKIAotICAgICAgICBIYXJkd2FyZUNhbnZhcyBtSGFyZHdhcmVDYW52YXM7Ci0KICAgICAgICAgSVdpbmRvd0lkIG1JV2luZG93SWQ7CiAgICAgICAgIFdpbmRvd0lkIG1XaW5kb3dJZDsKIApAQCAtMTg3NDYsNyArMTg4ODUsNiBAQAogICAgICAgICBWaWV3IG1Sb290VmlldzsKIAogICAgICAgICBJQmluZGVyIG1QYW5lbFBhcmVudFdpbmRvd1Rva2VuOwotICAgICAgICBTdXJmYWNlIG1TdXJmYWNlOwogCiAgICAgICAgIGJvb2xlYW4gbUhhcmR3YXJlQWNjZWxlcmF0ZWQ7CiAgICAgICAgIGJvb2xlYW4gbUhhcmR3YXJlQWNjZWxlcmF0aW9uUmVxdWVzdGVkOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3Q29uZmlndXJhdGlvbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3Q29uZmlndXJhdGlvbi5qYXZhCmluZGV4IGMzZjA2NGYuLmU2NzY1OWMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld0NvbmZpZ3VyYXRpb24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdDb25maWd1cmF0aW9uLmphdmEKQEAgLTIxMiw2ICsyMTIsMTQgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgT1ZFUkZMSU5HX0RJU1RBTkNFID0gNjsKIAorICAgIC8qKgorICAgICAqIENvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciBvdmVycmlkaW5nIHtAbGluayAjaGFzUGVybWFuZW50TWVudUtleSgpfSBiZWhhdmlvci4KKyAgICAgKiBUaGVzZSBjb25zdGFudHMgbXVzdCBtYXRjaCB0aGUgZGVmaW5pdGlvbiBpbiByZXMvdmFsdWVzL2NvbmZpZy54bWwuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhBU19QRVJNQU5FTlRfTUVOVV9LRVlfQVVUT0RFVEVDVCA9IDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhBU19QRVJNQU5FTlRfTUVOVV9LRVlfVFJVRSA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhBU19QRVJNQU5FTlRfTUVOVV9LRVlfRkFMU0UgPSAyOworCiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUVkZ2VTbG9wOwogICAgIHByaXZhdGUgZmluYWwgaW50IG1GYWRpbmdFZGdlTGVuZ3RoOwogICAgIHByaXZhdGUgZmluYWwgaW50IG1NaW5pbXVtRmxpbmdWZWxvY2l0eTsKQEAgLTI5NiwxMiArMzA0LDMxIEBACiAgICAgICAgIG1PdmVyZmxpbmdEaXN0YW5jZSA9IChpbnQpIChzaXplQW5kRGVuc2l0eSAqIE9WRVJGTElOR19ESVNUQU5DRSArIDAuNWYpOwogCiAgICAgICAgIGlmICghc0hhc1Blcm1hbmVudE1lbnVLZXlTZXQpIHsKLSAgICAgICAgICAgIElXaW5kb3dNYW5hZ2VyIHdtID0gV2luZG93TWFuYWdlckdsb2JhbC5nZXRXaW5kb3dNYW5hZ2VyU2VydmljZSgpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBzSGFzUGVybWFuZW50TWVudUtleSA9ICF3bS5oYXNOYXZpZ2F0aW9uQmFyKCk7Ci0gICAgICAgICAgICAgICAgc0hhc1Blcm1hbmVudE1lbnVLZXlTZXQgPSB0cnVlOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgc0hhc1Blcm1hbmVudE1lbnVLZXkgPSBmYWxzZTsKKyAgICAgICAgICAgIGZpbmFsIGludCBjb25maWdWYWwgPSByZXMuZ2V0SW50ZWdlcigKKyAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pbnRlZ2VyLmNvbmZpZ19vdmVycmlkZUhhc1Blcm1hbmVudE1lbnVLZXkpOworCisgICAgICAgICAgICBzd2l0Y2ggKGNvbmZpZ1ZhbCkgeworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgY2FzZSBIQVNfUEVSTUFORU5UX01FTlVfS0VZX0FVVE9ERVRFQ1Q6IHsKKyAgICAgICAgICAgICAgICAgICAgSVdpbmRvd01hbmFnZXIgd20gPSBXaW5kb3dNYW5hZ2VyR2xvYmFsLmdldFdpbmRvd01hbmFnZXJTZXJ2aWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzSGFzUGVybWFuZW50TWVudUtleSA9ICF3bS5oYXNOYXZpZ2F0aW9uQmFyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzSGFzUGVybWFuZW50TWVudUtleVNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc0hhc1Blcm1hbmVudE1lbnVLZXkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgSEFTX1BFUk1BTkVOVF9NRU5VX0tFWV9UUlVFOgorICAgICAgICAgICAgICAgICAgICBzSGFzUGVybWFuZW50TWVudUtleSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHNIYXNQZXJtYW5lbnRNZW51S2V5U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEhBU19QRVJNQU5FTlRfTUVOVV9LRVlfRkFMU0U6CisgICAgICAgICAgICAgICAgICAgIHNIYXNQZXJtYW5lbnRNZW51S2V5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNIYXNQZXJtYW5lbnRNZW51S2V5U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3R3JvdXAuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld0dyb3VwLmphdmEKaW5kZXggOTQxNDIzNy4uYTFiN2VmNiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3R3JvdXAuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdHcm91cC5qYXZhCkBAIC0zOCw3ICszOCw2IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlBvb2xzLlN5bmNocm9uaXplZFBvb2w7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BbmltYXRpb247CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BbmltYXRpb25VdGlsczsKQEAgLTQ1NiwyMCArNDU1LDIxIEBACiAgICAgcHJpdmF0ZSBpbnQgbUNoaWxkQ291bnRXaXRoVHJhbnNpZW50U3RhdGUgPSAwOwogCiAgICAgcHVibGljIFZpZXdHcm91cChDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0gICAgICAgIGluaXRWaWV3R3JvdXAoKTsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBudWxsKTsKICAgICB9CiAKICAgICBwdWJsaWMgVmlld0dyb3VwKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKLSAgICAgICAgaW5pdFZpZXdHcm91cCgpOwotICAgICAgICBpbml0RnJvbUF0dHJpYnV0ZXMoY29udGV4dCwgYXR0cnMpOworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CiAKLSAgICBwdWJsaWMgVmlld0dyb3VwKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgVmlld0dyb3VwKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIFZpZXdHcm91cChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgaW5pdFZpZXdHcm91cCgpOwotICAgICAgICBpbml0RnJvbUF0dHJpYnV0ZXMoY29udGV4dCwgYXR0cnMpOworICAgICAgICBpbml0RnJvbUF0dHJpYnV0ZXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1Z0RyYXcoKSB7CkBAIC00OTksOSArNDk5LDkgQEAKICAgICAgICAgbVBlcnNpc3RlbnREcmF3aW5nQ2FjaGUgPSBQRVJTSVNURU5UX1NDUk9MTElOR19DQUNIRTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgaW5pdEZyb21BdHRyaWJ1dGVzKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WaWV3R3JvdXApOworICAgIHByaXZhdGUgdm9pZCBpbml0RnJvbUF0dHJpYnV0ZXMoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywgUi5zdHlsZWFibGUuVmlld0dyb3VwKTsKIAogICAgICAgICBmaW5hbCBpbnQgTiA9IGEuZ2V0SW5kZXhDb3VudCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewpAQCAtMjUxMCwxMyArMjUxMCwxMyBAQAogICAgIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvSW50ZXJuYWwoQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGluZm8pIHsKICAgICAgICAgc3VwZXIub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvSW50ZXJuYWwoaW5mbyk7CiAgICAgICAgIGlmIChtQXR0YWNoSW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBBcnJheUxpc3Q8Vmlldz4gY2hpbGRyZW5Gb3JBY2Nlc3NpYmlsaXR5ID0gbUF0dGFjaEluZm8ubVRlbXBBcnJheUxpc3Q7CisgICAgICAgICAgICBmaW5hbCBBcnJheUxpc3Q8Vmlldz4gY2hpbGRyZW5Gb3JBY2Nlc3NpYmlsaXR5ID0gbUF0dGFjaEluZm8ubVRlbXBBcnJheUxpc3Q7CiAgICAgICAgICAgICBjaGlsZHJlbkZvckFjY2Vzc2liaWxpdHkuY2xlYXIoKTsKICAgICAgICAgICAgIGFkZENoaWxkcmVuRm9yQWNjZXNzaWJpbGl0eShjaGlsZHJlbkZvckFjY2Vzc2liaWxpdHkpOwogICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkcmVuRm9yQWNjZXNzaWJpbGl0eUNvdW50ID0gY2hpbGRyZW5Gb3JBY2Nlc3NpYmlsaXR5LnNpemUoKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW5Gb3JBY2Nlc3NpYmlsaXR5Q291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIFZpZXcgY2hpbGQgPSBjaGlsZHJlbkZvckFjY2Vzc2liaWxpdHkuZ2V0KGkpOwotICAgICAgICAgICAgICAgIGluZm8uYWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBjaGlsZHJlbkZvckFjY2Vzc2liaWxpdHkuZ2V0KGkpOworICAgICAgICAgICAgICAgIGluZm8uYWRkQ2hpbGRVbmNoZWNrZWQoY2hpbGQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2hpbGRyZW5Gb3JBY2Nlc3NpYmlsaXR5LmNsZWFyKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld092ZXJsYXkuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld092ZXJsYXkuamF2YQppbmRleCA5NzU5MzFhLi40N2RlNzgwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdPdmVybGF5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3T3ZlcmxheS5qYXZhCkBAIC0xNTUsNiArMTU1LDExIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gdmVyaWZ5RHJhd2FibGUoRHJhd2FibGUgd2hvKSB7CisgICAgICAgICAgICByZXR1cm4gc3VwZXIudmVyaWZ5RHJhd2FibGUod2hvKSB8fCAobURyYXdhYmxlcyAhPSBudWxsICYmIG1EcmF3YWJsZXMuY29udGFpbnMod2hvKSk7CisgICAgICAgIH0KKwogICAgICAgICBwdWJsaWMgdm9pZCBhZGQoVmlldyBjaGlsZCkgewogICAgICAgICAgICAgaWYgKGNoaWxkLmdldFBhcmVudCgpIGluc3RhbmNlb2YgVmlld0dyb3VwKSB7CiAgICAgICAgICAgICAgICAgVmlld0dyb3VwIHBhcmVudCA9IChWaWV3R3JvdXApIGNoaWxkLmdldFBhcmVudCgpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3Um9vdEltcGwuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld1Jvb3RJbXBsLmphdmEKaW5kZXggYmMwZDdlMy4uMjJjMDMzNiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3Um9vdEltcGwuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdSb290SW1wbC5qYXZhCkBAIC0yOCw2ICsyOCw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QaXhlbEZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50OwpAQCAtMTA4LDcgKzEwOSw2IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19JTUYgPSBmYWxzZSB8fCBMT0NBTF9MT0dWOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfQ09ORklHVVJBVElPTiA9IGZhbHNlIHx8IExPQ0FMX0xPR1Y7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19GUFMgPSBmYWxzZTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0lOUFVUX1BST0NFU1NJTkcgPSBmYWxzZSB8fCBMT0NBTF9MT0dWOwogCiAgICAgLyoqCiAgICAgICogU2V0IHRoaXMgc3lzdGVtIHByb3BlcnR5IHRvIHRydWUgdG8gZm9yY2UgdGhlIHZpZXcgaGllcmFyY2h5IHRvIHJlbmRlcgpAQCAtMjY2LDEwICsyNjYsMTAgQEAKICAgICBpbnQgbVNjcm9sbFk7CiAgICAgaW50IG1DdXJTY3JvbGxZOwogICAgIFNjcm9sbGVyIG1TY3JvbGxlcjsKLSAgICBIYXJkd2FyZUxheWVyIG1SZXNpemVCdWZmZXI7Ci0gICAgbG9uZyBtUmVzaXplQnVmZmVyU3RhcnRUaW1lOwotICAgIGludCBtUmVzaXplQnVmZmVyRHVyYXRpb247Ci0gICAgc3RhdGljIGZpbmFsIEludGVycG9sYXRvciBtUmVzaXplSW50ZXJwb2xhdG9yID0gbmV3IEFjY2VsZXJhdGVEZWNlbGVyYXRlSW50ZXJwb2xhdG9yKCk7CisvLyAgICBIYXJkd2FyZUxheWVyIG1SZXNpemVCdWZmZXI7CisvLyAgICBsb25nIG1SZXNpemVCdWZmZXJTdGFydFRpbWU7CisvLyAgICBpbnQgbVJlc2l6ZUJ1ZmZlckR1cmF0aW9uOworLy8gICAgc3RhdGljIGZpbmFsIEludGVycG9sYXRvciBtUmVzaXplSW50ZXJwb2xhdG9yID0gbmV3IEFjY2VsZXJhdGVEZWNlbGVyYXRlSW50ZXJwb2xhdG9yKCk7CiAgICAgcHJpdmF0ZSBBcnJheUxpc3Q8TGF5b3V0VHJhbnNpdGlvbj4gbVBlbmRpbmdUcmFuc2l0aW9uczsKIAogICAgIGZpbmFsIFZpZXdDb25maWd1cmF0aW9uIG1WaWV3Q29uZmlndXJhdGlvbjsKQEAgLTcxOSw3ICs3MTksNyBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdHJhbnNsdWNlbnQgPSBhdHRycy5mb3JtYXQgIT0gUGl4ZWxGb3JtYXQuT1BBUVVFOwotICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyID0gSGFyZHdhcmVSZW5kZXJlci5jcmVhdGVHbFJlbmRlcmVyKDIsIHRyYW5zbHVjZW50KTsKKyAgICAgICAgICAgICAgICBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlciA9IEhhcmR3YXJlUmVuZGVyZXIuY3JlYXRlKHRyYW5zbHVjZW50KTsKICAgICAgICAgICAgICAgICBpZiAobUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci5zZXROYW1lKGF0dHJzLmdldFRpdGxlKCkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZUFjY2VsZXJhdGVkID0KQEAgLTkzMywxNyArOTMzLDE3IEBACiAgICAgICAgIHJldHVybiBtQXBwVmlzaWJsZSA/IG1WaWV3LmdldFZpc2liaWxpdHkoKSA6IFZpZXcuR09ORTsKICAgICB9CiAKLSAgICB2b2lkIGRpc3Bvc2VSZXNpemVCdWZmZXIoKSB7Ci0gICAgICAgIGlmIChtUmVzaXplQnVmZmVyICE9IG51bGwgJiYgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIuc2FmZWx5UnVuKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1SZXNpemVCdWZmZXIuZGVzdHJveSgpOwotICAgICAgICAgICAgICAgICAgICBtUmVzaXplQnVmZmVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0KKy8vICAgIHZvaWQgZGlzcG9zZVJlc2l6ZUJ1ZmZlcigpIHsKKy8vICAgICAgICBpZiAobVJlc2l6ZUJ1ZmZlciAhPSBudWxsICYmIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyICE9IG51bGwpIHsKKy8vICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIuc2FmZWx5UnVuKG5ldyBSdW5uYWJsZSgpIHsKKy8vICAgICAgICAgICAgICAgIEBPdmVycmlkZQorLy8gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworLy8gICAgICAgICAgICAgICAgICAgIG1SZXNpemVCdWZmZXIuZGVzdHJveSgpOworLy8gICAgICAgICAgICAgICAgICAgIG1SZXNpemVCdWZmZXIgPSBudWxsOworLy8gICAgICAgICAgICAgICAgfQorLy8gICAgICAgICAgICB9KTsKKy8vICAgICAgICB9CisvLyAgICB9CiAKICAgICAvKioKICAgICAgKiBBZGQgTGF5b3V0VHJhbnNpdGlvbiB0byB0aGUgbGlzdCBvZiB0cmFuc2l0aW9ucyB0byBiZSBzdGFydGVkIGluIHRoZSBuZXh0IHRyYXZlcnNhbC4KQEAgLTExMjUsNiArMTEyNSwyOCBAQAogICAgICAgICByZXR1cm4gd2luZG93U2l6ZU1heUNoYW5nZTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBNb2RpZmllcyB0aGUgaW5wdXQgbWF0cml4IHN1Y2ggdGhhdCBpdCBtYXBzIHZpZXctbG9jYWwgY29vcmRpbmF0ZXMgdG8KKyAgICAgKiBvbi1zY3JlZW4gY29vcmRpbmF0ZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbSBpbnB1dCBtYXRyaXggdG8gbW9kaWZ5CisgICAgICovCisgICAgdm9pZCB0cmFuc2Zvcm1NYXRyaXhUb0dsb2JhbChNYXRyaXggbSkgeworICAgICAgICBmaW5hbCBWaWV3LkF0dGFjaEluZm8gYXR0YWNoSW5mbyA9IG1BdHRhY2hJbmZvOworICAgICAgICBtLnBvc3RUcmFuc2xhdGUoYXR0YWNoSW5mby5tV2luZG93TGVmdCwgYXR0YWNoSW5mby5tV2luZG93VG9wKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNb2RpZmllcyB0aGUgaW5wdXQgbWF0cml4IHN1Y2ggdGhhdCBpdCBtYXBzIG9uLXNjcmVlbiBjb29yZGluYXRlcyB0bworICAgICAqIHZpZXctbG9jYWwgY29vcmRpbmF0ZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbSBpbnB1dCBtYXRyaXggdG8gbW9kaWZ5CisgICAgICovCisgICAgdm9pZCB0cmFuc2Zvcm1NYXRyaXhUb0xvY2FsKE1hdHJpeCBtKSB7CisgICAgICAgIGZpbmFsIFZpZXcuQXR0YWNoSW5mbyBhdHRhY2hJbmZvID0gbUF0dGFjaEluZm87CisgICAgICAgIG0ucHJlVHJhbnNsYXRlKC1hdHRhY2hJbmZvLm1XaW5kb3dMZWZ0LCAtYXR0YWNoSW5mby5tV2luZG93VG9wKTsKKyAgICB9CisKICAgICBwcml2YXRlIHZvaWQgcGVyZm9ybVRyYXZlcnNhbHMoKSB7CiAgICAgICAgIC8vIGNhY2hlIG1WaWV3IHNpbmNlIGl0IGlzIHVzZWQgc28gbXVjaCBiZWxvdy4uLgogICAgICAgICBmaW5hbCBWaWV3IGhvc3QgPSBtVmlldzsKQEAgLTExOTUsMTEgKzEyMTcsNiBAQAogICAgICAgICAgICAgICAgIGRlc2lyZWRXaW5kb3dIZWlnaHQgPSBwYWNrYWdlTWV0cmljcy5oZWlnaHRQaXhlbHM7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIEZvciB0aGUgdmVyeSBmaXJzdCB0aW1lLCB0ZWxsIHRoZSB2aWV3IGhpZXJhcmNoeSB0aGF0IGl0Ci0gICAgICAgICAgICAvLyBpcyBhdHRhY2hlZCB0byB0aGUgd2luZG93LiAgTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQgdGhlIHN1cmZhY2UKLSAgICAgICAgICAgIC8vIG9iamVjdCBpcyBub3QgaW5pdGlhbGl6ZWQgdG8gaXRzIGJhY2tpbmcgc3RvcmUsIGJ1dCBzb29uIGl0Ci0gICAgICAgICAgICAvLyB3aWxsIGJlIChhc3N1bWluZyB0aGUgd2luZG93IGlzIHZpc2libGUpLgotICAgICAgICAgICAgYXR0YWNoSW5mby5tU3VyZmFjZSA9IG1TdXJmYWNlOwogICAgICAgICAgICAgLy8gV2UgdXNlZCB0byB1c2UgdGhlIGZvbGxvd2luZyBjb25kaXRpb24gdG8gY2hvb3NlIDMyIGJpdHMgZHJhd2luZyBjYWNoZXM6CiAgICAgICAgICAgICAvLyBQaXhlbEZvcm1hdC5oYXNBbHBoYShscC5mb3JtYXQpIHx8IGxwLmZvcm1hdCA9PSBQaXhlbEZvcm1hdC5SR0JYXzg4ODgKICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdpbmRvd3MgYXJlIG5vdyBhbHdheXMgMzIgYml0cyBieSBkZWZhdWx0LCBzbyBjaG9vc2UgMzIgYml0cwpAQCAtMTQzNyw3NSArMTQ1NCw3NiBAQAogICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdmlzaWJsZUluc2V0c0NoYW5nZWQgPSAhbVBlbmRpbmdWaXNpYmxlSW5zZXRzLmVxdWFscygKICAgICAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1WaXNpYmxlSW5zZXRzKTsKICAgICAgICAgICAgICAgICBpZiAoY29udGVudEluc2V0c0NoYW5nZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWR0aCA+IDAgJiYgbUhlaWdodCA+IDAgJiYgbHAgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobHAuc3lzdGVtVWlWaXNpYmlsaXR5fGxwLnN1YnRyZWVTeXN0ZW1VaVZpc2liaWxpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFZpZXcuU1lTVEVNX1VJX0xBWU9VVF9GTEFHUykgPT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXJmYWNlICE9IG51bGwgJiYgbVN1cmZhY2UuaXNWYWxpZCgpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIW1BdHRhY2hJbmZvLm1UdXJuT2ZmV2luZG93UmVzaXplQW5pbSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyICE9IG51bGwgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci5pc0VuYWJsZWQoKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLnZhbGlkYXRlKCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBscCAhPSBudWxsICYmICFQaXhlbEZvcm1hdC5mb3JtYXRIYXNBbHBoYShscC5mb3JtYXQpKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2VSZXNpemVCdWZmZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBjb21wbGV0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEhhcmR3YXJlQ2FudmFzIGh3UmVuZGVyZXJDYW52YXMgPSBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci5nZXRDYW52YXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEhhcmR3YXJlQ2FudmFzIGxheWVyQ2FudmFzID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1SZXNpemVCdWZmZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVzaXplQnVmZmVyID0gbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIuY3JlYXRlSGFyZHdhcmVMYXllcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lkdGgsIG1IZWlnaHQsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1SZXNpemVCdWZmZXIuZ2V0V2lkdGgoKSAhPSBtV2lkdGggfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNpemVCdWZmZXIuZ2V0SGVpZ2h0KCkgIT0gbUhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVzaXplQnVmZmVyLnJlc2l6ZShtV2lkdGgsIG1IZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgaGFuZGxlIGNyZWF0ZS9yZXNpemUgZmFpbHVyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQ2FudmFzID0gbVJlc2l6ZUJ1ZmZlci5zdGFydChod1JlbmRlcmVyQ2FudmFzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcmVzdG9yZUNvdW50ID0gbGF5ZXJDYW52YXMuc2F2ZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHlvZmY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBzY3JvbGxpbmcgPSBtU2Nyb2xsZXIgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbVNjcm9sbGVyLmNvbXB1dGVTY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvZmYgPSBtU2Nyb2xsZXIuZ2V0Q3VyclkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNjcm9sbGVyLmFib3J0QW5pbWF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW9mZiA9IG1TY3JvbGxZOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQ2FudmFzLnRyYW5zbGF0ZSgwLCAteW9mZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1UcmFuc2xhdG9yICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRyYW5zbGF0b3IudHJhbnNsYXRlQ2FudmFzKGxheWVyQ2FudmFzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCA9IG1WaWV3Lm1EaXNwbGF5TGlzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcGxheUxpc3QgIT0gbnVsbCAmJiBkaXNwbGF5TGlzdC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJDYW52YXMuZHJhd0Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0LCBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXlMaXN0LkZMQUdfQ0xJUF9DSElMRFJFTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXcuZHJhdyhsYXllckNhbnZhcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0FjY2Vzc2liaWxpdHlGb2N1c2VkRHJhd2FibGVJZk5lZWRlZChsYXllckNhbnZhcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVzaXplQnVmZmVyU3RhcnRUaW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlc2l6ZUJ1ZmZlckR1cmF0aW9uID0gbVZpZXcuZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuaW50ZWdlci5jb25maWdfbWVkaXVtQW5pbVRpbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckNhbnZhcy5yZXN0b3JlVG9Db3VudChyZXN0b3JlQ291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoT3V0T2ZNZW1vcnlFcnJvciBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiTm90IGVub3VnaCBtZW1vcnkgZm9yIGNvbnRlbnQgY2hhbmdlIGFuaW0gYnVmZmVyIiwgZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtUmVzaXplQnVmZmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlc2l6ZUJ1ZmZlci5lbmQoaHdSZW5kZXJlckNhbnZhcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29tcGxldGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NlUmVzaXplQnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KKy8vICAgICAgICAgICAgICAgICAgICBUT0RPOiBEbyBzb21ldGhpbmcgd2l0aCB0aGlzLi4uCisvLyAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWR0aCA+IDAgJiYgbUhlaWdodCA+IDAgJiYgbHAgIT0gbnVsbCAmJgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChscC5zeXN0ZW1VaVZpc2liaWxpdHl8bHAuc3VidHJlZVN5c3RlbVVpVmlzaWJpbGl0eSkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBWaWV3LlNZU1RFTV9VSV9MQVlPVVRfRkxBR1MpID09IDAgJiYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXJmYWNlICE9IG51bGwgJiYgbVN1cmZhY2UuaXNWYWxpZCgpICYmCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbUF0dGFjaEluZm8ubVR1cm5PZmZXaW5kb3dSZXNpemVBbmltICYmCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlciAhPSBudWxsICYmCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci5pc0VuYWJsZWQoKSAmJgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIudmFsaWRhdGUoKSAmJgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgbHAgIT0gbnVsbCAmJiAhUGl4ZWxGb3JtYXQuZm9ybWF0SGFzQWxwaGEobHAuZm9ybWF0KSkgeworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zZVJlc2l6ZUJ1ZmZlcigpOworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBjb21wbGV0ZWQgPSBmYWxzZTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgSGFyZHdhcmVDYW52YXMgaHdSZW5kZXJlckNhbnZhcyA9IG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLmdldENhbnZhcygpOworLy8gICAgICAgICAgICAgICAgICAgICAgICBIYXJkd2FyZUNhbnZhcyBsYXllckNhbnZhcyA9IG51bGw7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVJlc2l6ZUJ1ZmZlciA9PSBudWxsKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlc2l6ZUJ1ZmZlciA9IG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLmNyZWF0ZUhhcmR3YXJlTGF5ZXIoCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lkdGgsIG1IZWlnaHQsIGZhbHNlKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobVJlc2l6ZUJ1ZmZlci5nZXRXaWR0aCgpICE9IG1XaWR0aCB8fAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVzaXplQnVmZmVyLmdldEhlaWdodCgpICE9IG1IZWlnaHQpIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVzaXplQnVmZmVyLnJlc2l6ZShtV2lkdGgsIG1IZWlnaHQpOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogc2hvdWxkIGhhbmRsZSBjcmVhdGUvcmVzaXplIGZhaWx1cmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQ2FudmFzID0gbVJlc2l6ZUJ1ZmZlci5zdGFydChod1JlbmRlcmVyQ2FudmFzKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCByZXN0b3JlQ291bnQgPSBsYXllckNhbnZhcy5zYXZlKCk7CisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHlvZmY7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHNjcm9sbGluZyA9IG1TY3JvbGxlciAhPSBudWxsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1TY3JvbGxlci5jb21wdXRlU2Nyb2xsT2Zmc2V0KCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsaW5nKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW9mZiA9IG1TY3JvbGxlci5nZXRDdXJyWSgpOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TY3JvbGxlci5hYm9ydEFuaW1hdGlvbigpOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b2ZmID0gbVNjcm9sbFk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJDYW52YXMudHJhbnNsYXRlKDAsIC15b2ZmKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtVHJhbnNsYXRvciAhPSBudWxsKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRyYW5zbGF0b3IudHJhbnNsYXRlQ2FudmFzKGxheWVyQ2FudmFzKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCA9IG1WaWV3Lm1EaXNwbGF5TGlzdDsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5TGlzdCAhPSBudWxsICYmIGRpc3BsYXlMaXN0LmlzVmFsaWQoKSkgeworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQ2FudmFzLmRyYXdEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCwgbnVsbCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXlMaXN0LkZMQUdfQ0xJUF9DSElMRFJFTik7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1WaWV3LmRyYXcobGF5ZXJDYW52YXMpOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdBY2Nlc3NpYmlsaXR5Rm9jdXNlZERyYXdhYmxlSWZOZWVkZWQobGF5ZXJDYW52YXMpOworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNpemVCdWZmZXJTdGFydFRpbWUgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNpemVCdWZmZXJEdXJhdGlvbiA9IG1WaWV3LmdldFJlc291cmNlcygpLmdldEludGVnZXIoCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuaW50ZWdlci5jb25maWdfbWVkaXVtQW5pbVRpbWUpOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckNhbnZhcy5yZXN0b3JlVG9Db3VudChyZXN0b3JlQ291bnQpOworLy8gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChPdXRPZk1lbW9yeUVycm9yIGUpIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBjb250ZW50IGNoYW5nZSBhbmltIGJ1ZmZlciIsIGUpOworLy8gICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1SZXNpemVCdWZmZXIgIT0gbnVsbCkgeworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNpemVCdWZmZXIuZW5kKGh3UmVuZGVyZXJDYW52YXMpOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29tcGxldGVkKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2VSZXNpemVCdWZmZXIoKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisvLyAgICAgICAgICAgICAgICAgICAgICAgIH0KKy8vICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1Db250ZW50SW5zZXRzLnNldChtUGVuZGluZ0NvbnRlbnRJbnNldHMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfTEFZT1VUKSBMb2cudihUQUcsICJDb250ZW50IGluc2V0cyBjaGFuZ2luZyB0bzogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbUF0dGFjaEluZm8ubUNvbnRlbnRJbnNldHMpOwpAQCAtMTU0OCw3ICsxNTY2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdJbml0aWFsaXplZCA9IG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLmluaXRpYWxpemUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUhvbGRlci5nZXRTdXJmYWNlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXJmYWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU91dE9mUmVzb3VyY2VzRXhjZXB0aW9uKGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTY1LDcgKzE1ODMsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAobVNjcm9sbGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1TY3JvbGxlci5hYm9ydEFuaW1hdGlvbigpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRpc3Bvc2VSZXNpemVCdWZmZXIoKTsKKy8vICAgICAgICAgICAgICAgICAgICBkaXNwb3NlUmVzaXplQnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIE91ciBzdXJmYWNlIGlzIGdvbmUKICAgICAgICAgICAgICAgICAgICAgaWYgKG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyICE9IG51bGwgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci5pc0VuYWJsZWQoKSkgewpAQCAtMTU3NSw3ICsxNTkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXJmYWNlSG9sZGVyID09IG51bGwgJiYgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBtRnVsbFJlZHJhd05lZWRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci51cGRhdGVTdXJmYWNlKG1Ib2xkZXIuZ2V0U3VyZmFjZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLnVwZGF0ZVN1cmZhY2UobVN1cmZhY2UpOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPdXRPZlJlc291cmNlc0V4Y2VwdGlvbihlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2NTgsNyArMTY3Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBtSGVpZ2h0ICE9IG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLmdldEhlaWdodCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLnNldHVwKG1XaWR0aCwgbUhlaWdodCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaHdJbml0aWFsaXplZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIuaW52YWxpZGF0ZShtSG9sZGVyLmdldFN1cmZhY2UoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci5pbnZhbGlkYXRlKG1TdXJmYWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1GdWxsUmVkcmF3TmVlZGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTIxNjQsMjIgKzIxODIsMjMgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uSGFyZHdhcmVQb3N0RHJhdyhIYXJkd2FyZUNhbnZhcyBjYW52YXMpIHsKLSAgICAgICAgaWYgKG1SZXNpemVCdWZmZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbVJlc2l6ZVBhaW50LnNldEFscGhhKG1SZXNpemVBbHBoYSk7Ci0gICAgICAgICAgICBjYW52YXMuZHJhd0hhcmR3YXJlTGF5ZXIobVJlc2l6ZUJ1ZmZlciwgMC4wZiwgbUhhcmR3YXJlWU9mZnNldCwgbVJlc2l6ZVBhaW50KTsKKy8vICAgICAgICBpZiAobVJlc2l6ZUJ1ZmZlciAhPSBudWxsKSB7CisvLyAgICAgICAgICAgIG1SZXNpemVQYWludC5zZXRBbHBoYShtUmVzaXplQWxwaGEpOworLy8gICAgICAgICAgICBjYW52YXMuZHJhd0hhcmR3YXJlTGF5ZXIobVJlc2l6ZUJ1ZmZlciwgMC4wZiwgbUhhcmR3YXJlWU9mZnNldCwgbVJlc2l6ZVBhaW50KTsKKy8vICAgICAgICB9CisgICAgICAgIC8vIFRPRE86IHRoaXMKKyAgICAgICAgaWYgKCFIYXJkd2FyZVJlbmRlcmVyLnNVc2VSZW5kZXJUaHJlYWQpIHsKKyAgICAgICAgICAgIGRyYXdBY2Nlc3NpYmlsaXR5Rm9jdXNlZERyYXdhYmxlSWZOZWVkZWQoY2FudmFzKTsKICAgICAgICAgfQotICAgICAgICBkcmF3QWNjZXNzaWJpbGl0eUZvY3VzZWREcmF3YWJsZUlmTmVlZGVkKGNhbnZhcyk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICB2b2lkIG91dHB1dERpc3BsYXlMaXN0KFZpZXcgdmlldykgewotICAgICAgICBpZiAobUF0dGFjaEluZm8gIT0gbnVsbCAmJiBtQXR0YWNoSW5mby5tSGFyZHdhcmVDYW52YXMgIT0gbnVsbCkgewotICAgICAgICAgICAgRGlzcGxheUxpc3QgZGlzcGxheUxpc3QgPSB2aWV3LmdldERpc3BsYXlMaXN0KCk7Ci0gICAgICAgICAgICBpZiAoZGlzcGxheUxpc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZUNhbnZhcy5vdXRwdXREaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0ID0gdmlldy5nZXREaXNwbGF5TGlzdCgpOworICAgICAgICBpZiAoZGlzcGxheUxpc3QgIT0gbnVsbCkgeworICAgICAgICAgICAgZGlzcGxheUxpc3Qub3V0cHV0KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIzMjUsMTcgKzIzNDQsMTcgQEAKICAgICAgICAgZmluYWwgYm9vbGVhbiBzY2FsaW5nUmVxdWlyZWQgPSBhdHRhY2hJbmZvLm1TY2FsaW5nUmVxdWlyZWQ7CiAKICAgICAgICAgaW50IHJlc2l6ZUFscGhhID0gMDsKLSAgICAgICAgaWYgKG1SZXNpemVCdWZmZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbG9uZyBkZWx0YVRpbWUgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSAtIG1SZXNpemVCdWZmZXJTdGFydFRpbWU7Ci0gICAgICAgICAgICBpZiAoZGVsdGFUaW1lIDwgbVJlc2l6ZUJ1ZmZlckR1cmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgYW10ID0gZGVsdGFUaW1lLyhmbG9hdCkgbVJlc2l6ZUJ1ZmZlckR1cmF0aW9uOwotICAgICAgICAgICAgICAgIGFtdCA9IG1SZXNpemVJbnRlcnBvbGF0b3IuZ2V0SW50ZXJwb2xhdGlvbihhbXQpOwotICAgICAgICAgICAgICAgIGFuaW1hdGluZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVzaXplQWxwaGEgPSAyNTUgLSAoaW50KShhbXQqMjU1KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGlzcG9zZVJlc2l6ZUJ1ZmZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisvLyAgICAgICAgaWYgKG1SZXNpemVCdWZmZXIgIT0gbnVsbCkgeworLy8gICAgICAgICAgICBsb25nIGRlbHRhVGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpIC0gbVJlc2l6ZUJ1ZmZlclN0YXJ0VGltZTsKKy8vICAgICAgICAgICAgaWYgKGRlbHRhVGltZSA8IG1SZXNpemVCdWZmZXJEdXJhdGlvbikgeworLy8gICAgICAgICAgICAgICAgZmxvYXQgYW10ID0gZGVsdGFUaW1lLyhmbG9hdCkgbVJlc2l6ZUJ1ZmZlckR1cmF0aW9uOworLy8gICAgICAgICAgICAgICAgYW10ID0gbVJlc2l6ZUludGVycG9sYXRvci5nZXRJbnRlcnBvbGF0aW9uKGFtdCk7CisvLyAgICAgICAgICAgICAgICBhbmltYXRpbmcgPSB0cnVlOworLy8gICAgICAgICAgICAgICAgcmVzaXplQWxwaGEgPSAyNTUgLSAoaW50KShhbXQqMjU1KTsKKy8vICAgICAgICAgICAgfSBlbHNlIHsKKy8vICAgICAgICAgICAgICAgIGRpc3Bvc2VSZXNpemVCdWZmZXIoKTsKKy8vICAgICAgICAgICAgfQorLy8gICAgICAgIH0KIAogICAgICAgICBmaW5hbCBSZWN0IGRpcnR5ID0gbURpcnR5OwogICAgICAgICBpZiAobVN1cmZhY2VIb2xkZXIgIT0gbnVsbCkgewpAQCAtMjM0NSw3ICsyMzY0LDcgQEAKICAgICAgICAgICAgICAgICBpZiAobVNjcm9sbGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgbVNjcm9sbGVyLmFib3J0QW5pbWF0aW9uKCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRpc3Bvc2VSZXNpemVCdWZmZXIoKTsKKy8vICAgICAgICAgICAgICAgIGRpc3Bvc2VSZXNpemVCdWZmZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjM5NSw3ICsyNDE0LDcgQEAKIAogICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci5pbml0aWFsaXplSWZOZWVkZWQobVdpZHRoLCBtSGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSG9sZGVyLmdldFN1cmZhY2UoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXJmYWNlKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24oZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yNTMwLDI4ICsyNTQ5LDM1IEBACiAgICAgICogQHBhcmFtIGNhbnZhcyBUaGUgY2FudmFzIG9uIHdoaWNoIHRvIGRyYXcuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGRyYXdBY2Nlc3NpYmlsaXR5Rm9jdXNlZERyYXdhYmxlSWZOZWVkZWQoQ2FudmFzIGNhbnZhcykgewotICAgICAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlciBtYW5hZ2VyID0gQWNjZXNzaWJpbGl0eU1hbmFnZXIuZ2V0SW5zdGFuY2UobVZpZXcubUNvbnRleHQpOworICAgICAgICBpZiAoIW1BdHRhY2hJbmZvLm1IYXNXaW5kb3dGb2N1cykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgQWNjZXNzaWJpbGl0eU1hbmFnZXIgbWFuYWdlciA9IEFjY2Vzc2liaWxpdHlNYW5hZ2VyLmdldEluc3RhbmNlKG1WaWV3Lm1Db250ZXh0KTsKICAgICAgICAgaWYgKCFtYW5hZ2VyLmlzRW5hYmxlZCgpIHx8ICFtYW5hZ2VyLmlzVG91Y2hFeHBsb3JhdGlvbkVuYWJsZWQoKSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtQWNjZXNzaWJpbGl0eUZvY3VzZWRIb3N0ID09IG51bGwgfHwgbUFjY2Vzc2liaWxpdHlGb2N1c2VkSG9zdC5tQXR0YWNoSW5mbyA9PSBudWxsKSB7CisKKyAgICAgICAgZmluYWwgVmlldyBob3N0ID0gbUFjY2Vzc2liaWxpdHlGb2N1c2VkSG9zdDsKKyAgICAgICAgaWYgKGhvc3QgPT0gbnVsbCB8fCBob3N0Lm1BdHRhY2hJbmZvID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBEcmF3YWJsZSBkcmF3YWJsZSA9IGdldEFjY2Vzc2liaWxpdHlGb2N1c2VkRHJhd2FibGUoKTsKKworICAgICAgICBmaW5hbCBEcmF3YWJsZSBkcmF3YWJsZSA9IGdldEFjY2Vzc2liaWxpdHlGb2N1c2VkRHJhd2FibGUoKTsKICAgICAgICAgaWYgKGRyYXdhYmxlID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZVByb3ZpZGVyIHByb3ZpZGVyID0KLSAgICAgICAgICAgIG1BY2Nlc3NpYmlsaXR5Rm9jdXNlZEhvc3QuZ2V0QWNjZXNzaWJpbGl0eU5vZGVQcm92aWRlcigpOwotICAgICAgICBSZWN0IGJvdW5kcyA9IG1WaWV3Lm1BdHRhY2hJbmZvLm1UbXBJbnZhbFJlY3Q7CisKKyAgICAgICAgZmluYWwgQWNjZXNzaWJpbGl0eU5vZGVQcm92aWRlciBwcm92aWRlciA9IGhvc3QuZ2V0QWNjZXNzaWJpbGl0eU5vZGVQcm92aWRlcigpOworICAgICAgICBmaW5hbCBSZWN0IGJvdW5kcyA9IG1WaWV3Lm1BdHRhY2hJbmZvLm1UbXBJbnZhbFJlY3Q7CiAgICAgICAgIGlmIChwcm92aWRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtQWNjZXNzaWJpbGl0eUZvY3VzZWRIb3N0LmdldEJvdW5kc09uU2NyZWVuKGJvdW5kcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobUFjY2Vzc2liaWxpdHlGb2N1c2VkVmlydHVhbFZpZXcgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhvc3QuZ2V0Qm91bmRzT25TY3JlZW4oYm91bmRzKTsKKyAgICAgICAgfSBlbHNlIGlmIChtQWNjZXNzaWJpbGl0eUZvY3VzZWRWaXJ0dWFsVmlldyAhPSBudWxsKSB7CiAgICAgICAgICAgICBtQWNjZXNzaWJpbGl0eUZvY3VzZWRWaXJ0dWFsVmlldy5nZXRCb3VuZHNJblNjcmVlbihib3VuZHMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAgYm91bmRzLm9mZnNldCgtbUF0dGFjaEluZm8ubVdpbmRvd0xlZnQsIC1tQXR0YWNoSW5mby5tV2luZG93VG9wKTsKICAgICAgICAgYm91bmRzLmludGVyc2VjdCgwLCAwLCBtQXR0YWNoSW5mby5tVmlld1Jvb3RJbXBsLm1XaWR0aCwgbUF0dGFjaEluZm8ubVZpZXdSb290SW1wbC5tSGVpZ2h0KTsKICAgICAgICAgZHJhd2FibGUuc2V0Qm91bmRzKGJvdW5kcyk7CkBAIC0yNzAxLDcgKzI3MjcsNyBAQAogICAgICAgICBpZiAoc2Nyb2xsWSAhPSBtU2Nyb2xsWSkgewogICAgICAgICAgICAgaWYgKERFQlVHX0lOUFVUX1JFU0laRSkgTG9nLnYoVEFHLCAiUGFuIHNjcm9sbCBjaGFuZ2VkOiBvbGQ9IgogICAgICAgICAgICAgICAgICAgICArIG1TY3JvbGxZICsgIiAsIG5ldz0iICsgc2Nyb2xsWSk7Ci0gICAgICAgICAgICBpZiAoIWltbWVkaWF0ZSAmJiBtUmVzaXplQnVmZmVyID09IG51bGwpIHsKKyAgICAgICAgICAgIGlmICghaW1tZWRpYXRlIC8qJiYgbVJlc2l6ZUJ1ZmZlciA9PSBudWxsKi8pIHsKICAgICAgICAgICAgICAgICBpZiAobVNjcm9sbGVyID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgbVNjcm9sbGVyID0gbmV3IFNjcm9sbGVyKG1WaWV3LmdldENvbnRleHQoKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjg1MCw3ICsyODc2LDYgQEAKICAgICAgICAgbVZpZXcuYXNzaWduUGFyZW50KG51bGwpOwogICAgICAgICBtVmlldyA9IG51bGw7CiAgICAgICAgIG1BdHRhY2hJbmZvLm1Sb290VmlldyA9IG51bGw7Ci0gICAgICAgIG1BdHRhY2hJbmZvLm1TdXJmYWNlID0gbnVsbDsKIAogICAgICAgICBtU3VyZmFjZS5yZWxlYXNlKCk7CiAKQEAgLTMxMTAsNyArMzEzNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZ1bGxSZWRyYXdOZWVkZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLmluaXRpYWxpemVJZk5lZWRlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lkdGgsIG1IZWlnaHQsIG1Ib2xkZXIuZ2V0U3VyZmFjZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lkdGgsIG1IZWlnaHQsIG1TdXJmYWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIk91dE9mUmVzb3VyY2VzRXhjZXB0aW9uIGxvY2tpbmcgc3VyZmFjZSIsIGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewpAQCAtMzE1OSw4ICszMTg0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG1IYXNIYWRXaW5kb3dGb2N1cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBzZXRBY2Nlc3NpYmlsaXR5Rm9jdXMobnVsbCwgbnVsbCk7Ci0KICAgICAgICAgICAgICAgICAgICAgaWYgKG1WaWV3ICE9IG51bGwgJiYgbUFjY2Vzc2liaWxpdHlNYW5hZ2VyLmlzRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzV2luZG93Rm9jdXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVmlldy5zZW5kQWNjZXNzaWJpbGl0eUV2ZW50KApAQCAtNDUwNiw4ICs0NTI5LDcgQEAKICAgICAgICAgLy8gVGhlIGFjdGl2ZSBwb2ludGVyIGlkLCBvciAtMSBpZiBub25lLgogICAgICAgICBwcml2YXRlIGludCBtQWN0aXZlUG9pbnRlcklkID0gLTE7CiAKLSAgICAgICAgLy8gVGltZSBhbmQgbG9jYXRpb24gd2hlcmUgdHJhY2tpbmcgc3RhcnRlZC4KLSAgICAgICAgcHJpdmF0ZSBsb25nIG1TdGFydFRpbWU7CisgICAgICAgIC8vIExvY2F0aW9uIHdoZXJlIHRyYWNraW5nIHN0YXJ0ZWQuCiAgICAgICAgIHByaXZhdGUgZmxvYXQgbVN0YXJ0WDsKICAgICAgICAgcHJpdmF0ZSBmbG9hdCBtU3RhcnRZOwogCkBAIC00NTM1LDkgKzQ1NTcsNiBAQAogICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUZsaW5naW5nOwogICAgICAgICBwcml2YXRlIGZsb2F0IG1GbGluZ1ZlbG9jaXR5OwogCi0gICAgICAgIC8vIFRoZSBsYXN0IHRpbWUgYSBjb25maXJtIGtleSB3YXMgcHJlc3NlZCBvbiB0aGUgdG91Y2ggbmF2IGRldmljZQotICAgICAgICBwcml2YXRlIGxvbmcgbUxhc3RDb25maXJtS2V5VGltZSA9IExvbmcuTUFYX1ZBTFVFOwotCiAgICAgICAgIHB1YmxpYyBTeW50aGV0aWNUb3VjaE5hdmlnYXRpb25IYW5kbGVyKCkgewogICAgICAgICAgICAgc3VwZXIodHJ1ZSk7CiAgICAgICAgIH0KQEAgLTQ2MDQsNyArNDYyMyw2IEBACiAgICAgICAgICAgICAgICAgICAgIG1BY3RpdmVQb2ludGVySWQgPSBldmVudC5nZXRQb2ludGVySWQoMCk7CiAgICAgICAgICAgICAgICAgICAgIG1WZWxvY2l0eVRyYWNrZXIgPSBWZWxvY2l0eVRyYWNrZXIub2J0YWluKCk7CiAgICAgICAgICAgICAgICAgICAgIG1WZWxvY2l0eVRyYWNrZXIuYWRkTW92ZW1lbnQoZXZlbnQpOwotICAgICAgICAgICAgICAgICAgICBtU3RhcnRUaW1lID0gdGltZTsKICAgICAgICAgICAgICAgICAgICAgbVN0YXJ0WCA9IGV2ZW50LmdldFgoKTsKICAgICAgICAgICAgICAgICAgICAgbVN0YXJ0WSA9IGV2ZW50LmdldFkoKTsKICAgICAgICAgICAgICAgICAgICAgbUxhc3RYID0gbVN0YXJ0WDsKQEAgLTQ4NDMsNTkgKzQ4NjEsNjcgQEAKICAgICAgICAgfTsKICAgICB9CiAKKyAgICBwcml2YXRlIEtleUV2ZW50IGdldFN5bnRoZXRpY0ZhbGxiYWNrS2V5KEtleUV2ZW50IGV2ZW50KSB7CisgICAgICAgIC8vIEluIHNvbWUgbG9jYWxlcyAobGlrZSBKYXBhbikgY29udHJvbGxlcnMgdXNlIEIgZm9yIGNvbmZpcm0gYW5kIEEgZm9yIGJhY2ssIHJhdGhlcgorICAgICAgICAvLyB0aGFuIHZpY2UgdmVyc2EsIHNvIHdlIG5lZWQgdG8gc3BlY2lhbCBjYXNlIHRoaXMgaGVyZSBzaW5jZSB0aGUgaW5wdXQgc3lzdGVtIGl0c2VsZgorICAgICAgICAvLyBpcyBub3QgbG9jYWxlLWF3YXJlLgorICAgICAgICBpbnQga2V5Q29kZTsKKyAgICAgICAgc3dpdGNoKGV2ZW50LmdldEtleUNvZGUoKSkgeworICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9BOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9DOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9YOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9aOgorICAgICAgICAgICAgICAgIGtleUNvZGUgPSBtRmxpcENvbnRyb2xsZXJGYWxsYmFja0tleXMgPworICAgICAgICAgICAgICAgICAgICBLZXlFdmVudC5LRVlDT0RFX0JBQ0sgOiBLZXlFdmVudC5LRVlDT0RFX0RQQURfQ0VOVEVSOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9COgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9ZOgorICAgICAgICAgICAgICAgIGtleUNvZGUgPSBtRmxpcENvbnRyb2xsZXJGYWxsYmFja0tleXMgPworICAgICAgICAgICAgICAgICAgICBLZXlFdmVudC5LRVlDT0RFX0RQQURfQ0VOVEVSIDogS2V5RXZlbnQuS0VZQ09ERV9CQUNLOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9USFVNQkw6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OX1RIVU1CUjoKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fU1RBUlQ6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzE6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzI6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzM6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzQ6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzU6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzY6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzc6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzg6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzk6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzEwOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8xMToKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fMTI6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzEzOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8xNDoKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fMTU6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzE2OgorICAgICAgICAgICAgICAgIGtleUNvZGUgPSBLZXlFdmVudC5LRVlDT0RFX0RQQURfQ0VOVEVSOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9TRUxFQ1Q6CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OX01PREU6CisgICAgICAgICAgICAgICAga2V5Q29kZSA9IEtleUV2ZW50LktFWUNPREVfTUVOVTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEtleUV2ZW50Lm9idGFpbihldmVudC5nZXREb3duVGltZSgpLCBldmVudC5nZXRFdmVudFRpbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmdldEFjdGlvbigpLCBrZXlDb2RlLCBldmVudC5nZXRSZXBlYXRDb3VudCgpLCBldmVudC5nZXRNZXRhU3RhdGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmdldERldmljZUlkKCksIGV2ZW50LmdldFNjYW5Db2RlKCksCisgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRGbGFncygpIHwgS2V5RXZlbnQuRkxBR19GQUxMQkFDSywgZXZlbnQuZ2V0U291cmNlKCksIG51bGwpOworICAgIH0KKworCiAgICAgZmluYWwgY2xhc3MgU3ludGhldGljS2V5SGFuZGxlciB7CiAKICAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2VzcyhLZXlFdmVudCBldmVudCkgewotICAgICAgICAgICAgLy8gSW4gc29tZSBsb2NhbGVzIChsaWtlIEphcGFuKSBjb250cm9sbGVycyB1c2UgQiBmb3IgY29uZmlybSBhbmQgQSBmb3IgYmFjaywgcmF0aGVyCi0gICAgICAgICAgICAvLyB0aGFuIHZpY2UgdmVyc2EsIHNvIHdlIG5lZWQgdG8gc3BlY2lhbCBjYXNlIHRoaXMgaGVyZSBzaW5jZSB0aGUgaW5wdXQgc3lzdGVtIGl0c2VsZgotICAgICAgICAgICAgLy8gaXMgbm90IGxvY2FsZS1hd2FyZS4KLSAgICAgICAgICAgIGludCBrZXlDb2RlOwotICAgICAgICAgICAgc3dpdGNoKGV2ZW50LmdldEtleUNvZGUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fQToKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OX0M6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9YOgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fWjoKLSAgICAgICAgICAgICAgICAgICAga2V5Q29kZSA9IG1GbGlwQ29udHJvbGxlckZhbGxiYWNrS2V5cyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBLZXlFdmVudC5LRVlDT0RFX0JBQ0sgOiBLZXlFdmVudC5LRVlDT0RFX0RQQURfQ0VOVEVSOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OX0I6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl9ZOgotICAgICAgICAgICAgICAgICAgICBrZXlDb2RlID0gbUZsaXBDb250cm9sbGVyRmFsbGJhY2tLZXlzID8KLSAgICAgICAgICAgICAgICAgICAgICAgIEtleUV2ZW50LktFWUNPREVfRFBBRF9DRU5URVIgOiBLZXlFdmVudC5LRVlDT0RFX0JBQ0s7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fVEhVTUJMOgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fVEhVTUJSOgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fU1RBUlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8xOgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fMjoKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzM6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl80OgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fNToKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzY6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl83OgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fODoKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzk6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8xMDoKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzExOgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fMTI6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8xMzoKLSAgICAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfQlVUVE9OXzE0OgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fMTU6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0JVVFRPTl8xNjoKLSAgICAgICAgICAgICAgICAgICAga2V5Q29kZSA9IEtleUV2ZW50LktFWUNPREVfRFBBRF9DRU5URVI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fU0VMRUNUOgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9CVVRUT05fTU9ERToKLSAgICAgICAgICAgICAgICAgICAga2V5Q29kZSA9IEtleUV2ZW50LktFWUNPREVfTUVOVTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBLZXlFdmVudCBzeW50aGV0aWNLZXkgPSBnZXRTeW50aGV0aWNGYWxsYmFja0tleShldmVudCk7CisgICAgICAgICAgICBpZiAoc3ludGhldGljS2V5ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBlbnF1ZXVlSW5wdXRFdmVudChzeW50aGV0aWNLZXkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbnF1ZXVlSW5wdXRFdmVudChuZXcgS2V5RXZlbnQoZXZlbnQuZ2V0RG93blRpbWUoKSwgZXZlbnQuZ2V0RXZlbnRUaW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRBY3Rpb24oKSwga2V5Q29kZSwgZXZlbnQuZ2V0UmVwZWF0Q291bnQoKSwgZXZlbnQuZ2V0TWV0YVN0YXRlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5nZXREZXZpY2VJZCgpLCBldmVudC5nZXRTY2FuQ29kZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0RmxhZ3MoKSB8IEtleUV2ZW50LkZMQUdfRkFMTEJBQ0ssIGV2ZW50LmdldFNvdXJjZSgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCiAgICAgfQpAQCAtNTM4OCw3ICs1NDE0LDcgQEAKIAogICAgICAgICAgICAgICAgIC8vIEhhcmR3YXJlIHJlbmRlcmluZwogICAgICAgICAgICAgICAgIGlmIChtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtQXR0YWNoSW5mby5tSGFyZHdhcmVSZW5kZXJlci5sb2FkU3lzdGVtUHJvcGVydGllcyhtSG9sZGVyLmdldFN1cmZhY2UoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1BdHRhY2hJbmZvLm1IYXJkd2FyZVJlbmRlcmVyLmxvYWRTeXN0ZW1Qcm9wZXJ0aWVzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTU4MzUsMjMgKzU4NjEsMzIgQEAKIAogICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoVW5oYW5kbGVkS2V5KEtleUV2ZW50IGV2ZW50KSB7CiAgICAgICAgIGlmICgoZXZlbnQuZ2V0RmxhZ3MoKSAmIEtleUV2ZW50LkZMQUdfRkFMTEJBQ0spID09IDApIHsKLSAgICAgICAgICAgIGZpbmFsIEtleUNoYXJhY3Rlck1hcCBrY20gPSBldmVudC5nZXRLZXlDaGFyYWN0ZXJNYXAoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBrZXlDb2RlID0gZXZlbnQuZ2V0S2V5Q29kZSgpOwotICAgICAgICAgICAgZmluYWwgaW50IG1ldGFTdGF0ZSA9IGV2ZW50LmdldE1ldGFTdGF0ZSgpOworICAgICAgICAgICAgLy8gU29tZSBmYWxsYmFjayBrZXlzIGFyZSBkZWNpZGVkIGJ5IHRoZSBWaWV3Um9vdCBhcyB0aGV5IG1pZ2h0IGhhdmUgc3BlY2lhbAorICAgICAgICAgICAgLy8gcHJvcGVydGllcyAoZS5nLiBhcmUgbG9jYWxlIGF3YXJlKS4gVGhlc2UgdGFrZSBwcmVjZWRlbmNlIG92ZXIgZmFsbGJhY2tzIGRlZmluZWQgYnkKKyAgICAgICAgICAgIC8vIHRoZSBrY20uCisgICAgICAgICAgICBLZXlFdmVudCBmYWxsYmFja0V2ZW50ID0gZ2V0U3ludGhldGljRmFsbGJhY2tLZXkoZXZlbnQpOwogCi0gICAgICAgICAgICAvLyBDaGVjayBmb3IgZmFsbGJhY2sgYWN0aW9ucyBzcGVjaWZpZWQgYnkgdGhlIGtleSBjaGFyYWN0ZXIgbWFwLgotICAgICAgICAgICAgS2V5Q2hhcmFjdGVyTWFwLkZhbGxiYWNrQWN0aW9uIGZhbGxiYWNrQWN0aW9uID0KLSAgICAgICAgICAgICAgICAgICAga2NtLmdldEZhbGxiYWNrQWN0aW9uKGtleUNvZGUsIG1ldGFTdGF0ZSk7Ci0gICAgICAgICAgICBpZiAoZmFsbGJhY2tBY3Rpb24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZpbmFsIGludCBmbGFncyA9IGV2ZW50LmdldEZsYWdzKCkgfCBLZXlFdmVudC5GTEFHX0ZBTExCQUNLOwotICAgICAgICAgICAgICAgIEtleUV2ZW50IGZhbGxiYWNrRXZlbnQgPSBLZXlFdmVudC5vYnRhaW4oCi0gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5nZXREb3duVGltZSgpLCBldmVudC5nZXRFdmVudFRpbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmdldEFjdGlvbigpLCBmYWxsYmFja0FjdGlvbi5rZXlDb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0UmVwZWF0Q291bnQoKSwgZmFsbGJhY2tBY3Rpb24ubWV0YVN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0RGV2aWNlSWQoKSwgZXZlbnQuZ2V0U2NhbkNvZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBldmVudC5nZXRTb3VyY2UoKSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgZmFsbGJhY2tBY3Rpb24ucmVjeWNsZSgpOworICAgICAgICAgICAgaWYgKGZhbGxiYWNrRXZlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZpbmFsIEtleUNoYXJhY3Rlck1hcCBrY20gPSBldmVudC5nZXRLZXlDaGFyYWN0ZXJNYXAoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQga2V5Q29kZSA9IGV2ZW50LmdldEtleUNvZGUoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbWV0YVN0YXRlID0gZXZlbnQuZ2V0TWV0YVN0YXRlKCk7CiAKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgZmFsbGJhY2sgYWN0aW9ucyBzcGVjaWZpZWQgYnkgdGhlIGtleSBjaGFyYWN0ZXIgbWFwLgorICAgICAgICAgICAgICAgIEtleUNoYXJhY3Rlck1hcC5GYWxsYmFja0FjdGlvbiBmYWxsYmFja0FjdGlvbiA9CisgICAgICAgICAgICAgICAgICAgICAgICBrY20uZ2V0RmFsbGJhY2tBY3Rpb24oa2V5Q29kZSwgbWV0YVN0YXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbGJhY2tBY3Rpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBldmVudC5nZXRGbGFncygpIHwgS2V5RXZlbnQuRkxBR19GQUxMQkFDSzsKKyAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tFdmVudCA9IEtleUV2ZW50Lm9idGFpbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5nZXREb3duVGltZSgpLCBldmVudC5nZXRFdmVudFRpbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRBY3Rpb24oKSwgZmFsbGJhY2tBY3Rpb24ua2V5Q29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRSZXBlYXRDb3VudCgpLCBmYWxsYmFja0FjdGlvbi5tZXRhU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0RGV2aWNlSWQoKSwgZXZlbnQuZ2V0U2NhbkNvZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgZXZlbnQuZ2V0U291cmNlKCksIG51bGwpOworICAgICAgICAgICAgICAgICAgICBmYWxsYmFja0FjdGlvbi5yZWN5Y2xlKCk7CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmFsbGJhY2tFdmVudCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZGlzcGF0Y2hJbnB1dEV2ZW50KGZhbGxiYWNrRXZlbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02MzM1LDY4ICs2MzcwLDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgZmluYWwgU3VyZmFjZUhvbGRlciBtSG9sZGVyID0gbmV3IFN1cmZhY2VIb2xkZXIoKSB7Ci0gICAgICAgIC8vIHdlIG9ubHkgbmVlZCBhIFN1cmZhY2VIb2xkZXIgZm9yIG9wZW5nbC4gaXQgd291bGQgYmUgbmljZQotICAgICAgICAvLyB0byBpbXBsZW1lbnQgZXZlcnl0aGluZyBlbHNlIHRob3VnaCwgZXNwZWNpYWxseSB0aGUgY2FsbGJhY2sKLSAgICAgICAgLy8gc3VwcG9ydCAob3BlbmdsIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgaXQgcmlnaHQgbm93LCBidXQgZXZlbnR1YWxseQotICAgICAgICAvLyB3aWxsKS4KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTdXJmYWNlIGdldFN1cmZhY2UoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVN1cmZhY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNDcmVhdGluZygpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBhZGRDYWxsYmFjayhDYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZUNhbGxiYWNrKENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0Rml4ZWRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldFNpemVGcm9tTGF5b3V0KCkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEZvcm1hdChpbnQgZm9ybWF0KSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0VHlwZShpbnQgdHlwZSkgewotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEtlZXBTY3JlZW5Pbihib29sZWFuIHNjcmVlbk9uKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIENhbnZhcyBsb2NrQ2FudmFzKCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIENhbnZhcyBsb2NrQ2FudmFzKFJlY3QgZGlydHkpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHVubG9ja0NhbnZhc0FuZFBvc3QoQ2FudmFzIGNhbnZhcykgewotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgUmVjdCBnZXRTdXJmYWNlRnJhbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH07Ci0KICAgICBzdGF0aWMgUnVuUXVldWUgZ2V0UnVuUXVldWUoKSB7CiAgICAgICAgIFJ1blF1ZXVlIHJxID0gc1J1blF1ZXVlcy5nZXQoKTsKICAgICAgICAgaWYgKHJxICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld1N0dWIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld1N0dWIuamF2YQppbmRleCBhNWRjM2FlLi5kNjhhODYwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdTdHViLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3U3R1Yi5qYXZhCkBAIC05NywxNiArOTcsMjEgQEAKICAgICB9CiAKICAgICBAU3VwcHJlc3NXYXJuaW5ncyh7IlVudXNlZERlY2xhcmF0aW9uIn0pCi0gICAgcHVibGljIFZpZXdTdHViKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5WaWV3U3R1YiwKLSAgICAgICAgICAgICAgICBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIFZpZXdTdHViKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIFZpZXdTdHViKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5WaWV3U3R1YiwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgbUluZmxhdGVkSWQgPSBhLmdldFJlc291cmNlSWQoUi5zdHlsZWFibGUuVmlld1N0dWJfaW5mbGF0ZWRJZCwgTk9fSUQpOwogICAgICAgICBtTGF5b3V0UmVzb3VyY2UgPSBhLmdldFJlc291cmNlSWQoUi5zdHlsZWFibGUuVmlld1N0dWJfbGF5b3V0LCAwKTsKIAogICAgICAgICBhLnJlY3ljbGUoKTsKIAotICAgICAgICBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5WaWV3LCBkZWZTdHlsZSwgMCk7CisgICAgICAgIGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBtSUQgPSBhLmdldFJlc291cmNlSWQoUi5zdHlsZWFibGUuVmlld19pZCwgTk9fSUQpOwogICAgICAgICBhLnJlY3ljbGUoKTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9Wb2x1bWVQYW5lbC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9Wb2x1bWVQYW5lbC5qYXZhCmluZGV4IGYwZTY2NzcuLjUyZjljMGIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVm9sdW1lUGFuZWwuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZvbHVtZVBhbmVsLmphdmEKQEAgLTMxMSw3ICszMTEsNiBAQAogICAgICAgICBscC50eXBlID0gTGF5b3V0UGFyYW1zLlRZUEVfVk9MVU1FX09WRVJMQVk7CiAgICAgICAgIGxwLndpZHRoID0gTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVDsKICAgICAgICAgbHAuaGVpZ2h0ID0gTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVDsKLSAgICAgICAgbHAucHJpdmF0ZUZsYWdzIHw9IExheW91dFBhcmFtcy5QUklWQVRFX0ZMQUdfRk9SQ0VfU0hPV19OQVZfQkFSOwogICAgICAgICB3aW5kb3cuc2V0QXR0cmlidXRlcyhscCk7CiAgICAgICAgIHdpbmRvdy5hZGRGbGFncyhMYXlvdXRQYXJhbXMuRkxBR19OT1RfRk9DVVNBQkxFIHwgTGF5b3V0UGFyYW1zLkZMQUdfTk9UX1RPVUNIX01PREFMCiAgICAgICAgICAgICAgICAgfCBMYXlvdXRQYXJhbXMuRkxBR19XQVRDSF9PVVRTSURFX1RPVUNIKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvdy5qYXZhCmluZGV4IGIzYTA2OTkuLjJmNjI0MzEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3cuamF2YQpAQCAtMTYsNiArMTYsOCBAQAogCiBwYWNrYWdlIGFuZHJvaWQudmlldzsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OwpAQCAtMjUsNiArMjcsOCBAQAogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CitpbXBvcnQgYW5kcm9pZC50cmFuc2l0aW9uLlNjZW5lOworaW1wb3J0IGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CiAKIC8qKgpAQCAtODksMTIgKzkzLDIxIEBACiAgICAgICogSWYgb3ZlcmxheSBpcyBlbmFibGVkLCB0aGUgYWN0aW9uIG1vZGUgVUkgd2lsbCBiZSBhbGxvd2VkIHRvIGNvdmVyIGV4aXN0aW5nIHdpbmRvdyBjb250ZW50LgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZFQVRVUkVfQUNUSU9OX01PREVfT1ZFUkxBWSA9IDEwOworICAgIC8qKgorICAgICAqIEZsYWcgZm9yIHJlcXVlc3RpbmcgdGhhdCB3aW5kb3cgY29udGVudCBjaGFuZ2VzIHNob3VsZCBiZSByZXByZXNlbnRlZAorICAgICAqIHdpdGggc2NlbmVzIGFuZCB0cmFuc2l0aW9ucy4KKyAgICAgKgorICAgICAqIFRPRE8gQWRkIGRvY3MKKyAgICAgKgorICAgICAqIEBzZWUgI3NldENvbnRlbnRWaWV3CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TID0gMTE7CiAKICAgICAvKioKICAgICAgKiBNYXggdmFsdWUgdXNlZCBhcyBhIGZlYXR1cmUgSUQKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZFQVRVUkVfTUFYID0gRkVBVFVSRV9BQ1RJT05fTU9ERV9PVkVSTEFZOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZFQVRVUkVfTUFYID0gRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TOwogCiAgICAgLyoqIEZsYWcgZm9yIHNldHRpbmcgdGhlIHByb2dyZXNzIGJhcidzIHZpc2liaWxpdHkgdG8gVklTSUJMRSAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST0dSRVNTX1ZJU0lCSUxJVFlfT04gPSAtMTsKQEAgLTI0MCw2ICsyNTMsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAc2VlICNvblByZXBhcmVQYW5lbAogICAgICAgICAgKi8KKyAgICAgICAgQE51bGxhYmxlCiAgICAgICAgIHB1YmxpYyBWaWV3IG9uQ3JlYXRlUGFuZWxWaWV3KGludCBmZWF0dXJlSWQpOwogCiAgICAgICAgIC8qKgpAQCAtMzY4LDYgKzM4Miw3IEBACiAgICAgICAgICAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayB0byBjb250cm9sIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBhY3Rpb24gbW9kZQogICAgICAgICAgKiBAcmV0dXJuIFRoZSBBY3Rpb25Nb2RlIHRoYXQgd2FzIHN0YXJ0ZWQsIG9yIG51bGwgaWYgdGhlIHN5c3RlbSBzaG91bGQgcHJlc2VudCBpdAogICAgICAgICAgKi8KKyAgICAgICAgQE51bGxhYmxlCiAgICAgICAgIHB1YmxpYyBBY3Rpb25Nb2RlIG9uV2luZG93U3RhcnRpbmdBY3Rpb25Nb2RlKEFjdGlvbk1vZGUuQ2FsbGJhY2sgY2FsbGJhY2spOwogCiAgICAgICAgIC8qKgpAQCAtOTY5LDYgKzk4NCw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFZpZXcgVGhlIGN1cnJlbnQgVmlldyB3aXRoIGZvY3VzIG9yIG51bGwuCiAgICAgICovCisgICAgQE51bGxhYmxlCiAgICAgcHVibGljIGFic3RyYWN0IFZpZXcgZ2V0Q3VycmVudEZvY3VzKCk7CiAKICAgICAvKioKQEAgLTk3NywxMCArOTkzLDEyIEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIExheW91dEluZmxhdGVyIFRoZSBzaGFyZWQgTGF5b3V0SW5mbGF0ZXIuCiAgICAgICovCisgICAgQE5vbk51bGwKICAgICBwdWJsaWMgYWJzdHJhY3QgTGF5b3V0SW5mbGF0ZXIgZ2V0TGF5b3V0SW5mbGF0ZXIoKTsKIAogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFRpdGxlKENoYXJTZXF1ZW5jZSB0aXRsZSk7CiAKKyAgICBARGVwcmVjYXRlZAogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFRpdGxlQ29sb3IoaW50IHRleHRDb2xvcik7CiAKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvcGVuUGFuZWwoaW50IGZlYXR1cmVJZCwgS2V5RXZlbnQgZXZlbnQpOwpAQCAtMTMxNyw0ICsxMzM1LDQ3IEBACiAgICAgICogQHBhcmFtIGV2ZW50IEEga2V5IG9yIHRvdWNoIGV2ZW50IHRvIGluamVjdCB0byB0aGlzIHdpbmRvdy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbmplY3RJbnB1dEV2ZW50KElucHV0RXZlbnQgZXZlbnQpIHsgfQorCisgICAgLyoqCisgICAgICogUmV0cmlldmUgdGhlIHtAbGluayBUcmFuc2l0aW9uTWFuYWdlcn0gcmVzcG9uc2libGUgZm9yICBmb3IgZGVmYXVsdCB0cmFuc2l0aW9ucworICAgICAqIGluIHRoaXMgd2luZG93LiBSZXF1aXJlcyB7QGxpbmsgI0ZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OU30uCisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCB3aWxsIHJldHVybiBub24tbnVsbCBhZnRlciBjb250ZW50IGhhcyBiZWVuIGluaXRpYWxpemVkIChlLmcuIGJ5IHVzaW5nCisgICAgICoge0BsaW5rICNzZXRDb250ZW50Vmlld30pIGlmIHtAbGluayAjRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TfSBoYXMgYmVlbiBncmFudGVkLjwvcD4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhpcyB3aW5kb3cncyBjb250ZW50IFRyYW5zaXRpb25NYW5hZ2VyIG9yIG51bGwgaWYgbm9uZSBpcyBzZXQuCisgICAgICovCisgICAgcHVibGljIFRyYW5zaXRpb25NYW5hZ2VyIGdldFRyYW5zaXRpb25NYW5hZ2VyKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHtAbGluayBUcmFuc2l0aW9uTWFuYWdlcn0gdG8gdXNlIGZvciBkZWZhdWx0IHRyYW5zaXRpb25zIGluIHRoaXMgd2luZG93LgorICAgICAqIFJlcXVpcmVzIHtAbGluayAjRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TfS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0bSBUaGUgVHJhbnNpdGlvbk1hbmFnZXIgdG8gdXNlIGZvciBzY2VuZSBjaGFuZ2VzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zaXRpb25NYW5hZ2VyKFRyYW5zaXRpb25NYW5hZ2VyIHRtKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSB7QGxpbmsgU2NlbmV9IHJlcHJlc2VudGluZyB0aGlzIHdpbmRvdydzIGN1cnJlbnQgY29udGVudC4KKyAgICAgKiBSZXF1aXJlcyB7QGxpbmsgI0ZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OU30uCisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCB3aWxsIHJldHVybiBudWxsIGlmIHRoZSBjdXJyZW50IGNvbnRlbnQgaXMgbm90IHJlcHJlc2VudGVkIGJ5IGEgU2NlbmUuPC9wPgorICAgICAqCisgICAgICogQHJldHVybiBDdXJyZW50IFNjZW5lIGJlaW5nIHNob3duIG9yIG51bGwKKyAgICAgKi8KKyAgICBwdWJsaWMgU2NlbmUgZ2V0Q29udGVudFNjZW5lKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgb3B0aW9ucyB0aGF0IGNhbiBhZmZlY3QgdGhlIHRyYW5zaXRpb24gYmVoYXZpb3Igd2l0aGluIHRoaXMgd2luZG93LgorICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgdG8gc2V0IG9yIG51bGwgZm9yIG5vbmUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2l0aW9uT3B0aW9ucyhCdW5kbGUgb3B0aW9ucykgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlci5qYXZhCmluZGV4IDBjZTRkYTUuLjUzYTRjMGQwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXIuamF2YQpAQCAtMTA2MywxMyArMTA2Myw2IEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBSSVZBVEVfRkxBR19TSE9XX0ZPUl9BTExfVVNFUlMgPSAweDAwMDAwMDEwOwogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBTcGVjaWFsIGZsYWcgZm9yIHRoZSB2b2x1bWUgb3ZlcmxheTogZm9yY2UgdGhlIHdpbmRvdyBtYW5hZ2VyIG91dCBvZiAiaGlkZSBuYXYgYmFyIgotICAgICAgICAgKiBtb2RlIHdoaWxlIHRoZSB3aW5kb3cgaXMgb24gc2NyZWVuLgotICAgICAgICAgKgotICAgICAgICAgKiB7QGhpZGV9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBSSVZBVEVfRkxBR19GT1JDRV9TSE9XX05BVl9CQVIgPSAweDAwMDAwMDIwOwotCi0gICAgICAgIC8qKgogICAgICAgICAgKiBOZXZlciBhbmltYXRlIHBvc2l0aW9uIGNoYW5nZXMgb2YgdGhlIHdpbmRvdy4KICAgICAgICAgICoKICAgICAgICAgICoge0BoaWRlfSAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyUG9saWN5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXJQb2xpY3kuamF2YQppbmRleCBjNWExYjg2Yy4uZDllMTQwZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyUG9saWN5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyUG9saWN5LmphdmEKQEAgLTE2LDcgKzE2LDkgQEAKIAogcGFja2FnZSBhbmRyb2lkLnZpZXc7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db21wYXRpYmlsaXR5SW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwpAQCAtMjcsNiArMjksOCBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uQW5pbWF0aW9uOwogCiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OwogCiAvKioKICAqIFRoaXMgaW50ZXJmYWNlIHN1cHBsaWVzIGFsbCBVSS1zcGVjaWZpYyBiZWhhdmlvciBvZiB0aGUgd2luZG93IG1hbmFnZXIuICBBbgpAQCAtNDY0LDYgKzQ2OCwxMSBAQAogICAgIC8qKiBTY3JlZW4gdHVybmVkIG9mZiBiZWNhdXNlIG9mIHByb3hpbWl0eSBzZW5zb3IgKi8KICAgICBwdWJsaWMgZmluYWwgaW50IE9GRl9CRUNBVVNFX09GX1BST1hfU0VOU09SID0gNDsKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoe1VTRVJfUk9UQVRJT05fRlJFRSwgVVNFUl9ST1RBVElPTl9MT0NLRUR9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBVc2VyUm90YXRpb25Nb2RlIHt9CisKICAgICAvKiogV2hlbiBub3Qgb3RoZXJ3aXNlIHNwZWNpZmllZCBieSB0aGUgYWN0aXZpdHkncyBzY3JlZW5PcmllbnRhdGlvbiwgcm90YXRpb24gc2hvdWxkIGJlCiAgICAgICogZGV0ZXJtaW5lZCBieSB0aGUgc3lzdGVtICh0aGF0IGlzLCB1c2luZyBzZW5zb3JzKS4gKi8KICAgICBwdWJsaWMgZmluYWwgaW50IFVTRVJfUk9UQVRJT05fRlJFRSA9IDA7CkBAIC0xMDIyLDcgKzEwMzEsOCBAQAogICAgICAqIEBwYXJhbSBsYXN0Um90YXRpb24gVGhlIG1vc3QgcmVjZW50bHkgdXNlZCByb3RhdGlvbi4KICAgICAgKiBAcmV0dXJuIFRoZSBzdXJmYWNlIHJvdGF0aW9uIHRvIHVzZS4KICAgICAgKi8KLSAgICBwdWJsaWMgaW50IHJvdGF0aW9uRm9yT3JpZW50YXRpb25MdyhpbnQgb3JpZW50YXRpb24sIGludCBsYXN0Um90YXRpb24pOworICAgIHB1YmxpYyBpbnQgcm90YXRpb25Gb3JPcmllbnRhdGlvbkx3KEBBY3Rpdml0eUluZm8uU2NyZWVuT3JpZW50YXRpb24gaW50IG9yaWVudGF0aW9uLAorICAgICAgICAgICAgaW50IGxhc3RSb3RhdGlvbik7CiAKICAgICAvKioKICAgICAgKiBHaXZlbiBhbiBvcmllbnRhdGlvbiBjb25zdGFudCBhbmQgYSByb3RhdGlvbiwgcmV0dXJucyB0cnVlIGlmIHRoZSByb3RhdGlvbgpAQCAtMTAzNyw3ICsxMDQ3LDggQEAKICAgICAgKiBAcGFyYW0gcm90YXRpb24gVGhlIHJvdGF0aW9uIHRvIGNoZWNrLgogICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcm90YXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSByZXF1ZXN0ZWQgb3JpZW50YXRpb24uCiAgICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gcm90YXRpb25IYXNDb21wYXRpYmxlTWV0cmljc0x3KGludCBvcmllbnRhdGlvbiwgaW50IHJvdGF0aW9uKTsKKyAgICBwdWJsaWMgYm9vbGVhbiByb3RhdGlvbkhhc0NvbXBhdGlibGVNZXRyaWNzTHcoQEFjdGl2aXR5SW5mby5TY3JlZW5PcmllbnRhdGlvbiBpbnQgb3JpZW50YXRpb24sCisgICAgICAgICAgICBpbnQgcm90YXRpb24pOwogCiAgICAgLyoqCiAgICAgICogQ2FsbGVkIGJ5IHRoZSB3aW5kb3cgbWFuYWdlciB3aGVuIHRoZSByb3RhdGlvbiBjaGFuZ2VzLgpAQCAtMTA4Niw3ICsxMDk3LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmFibGVTY3JlZW5BZnRlckJvb3QoKTsKICAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50T3JpZW50YXRpb25MdyhpbnQgbmV3T3JpZW50YXRpb24pOworICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRPcmllbnRhdGlvbkx3KEBBY3Rpdml0eUluZm8uU2NyZWVuT3JpZW50YXRpb24gaW50IG5ld09yaWVudGF0aW9uKTsKICAgICAKICAgICAvKioKICAgICAgKiBDYWxsIGZyb20gYXBwbGljYXRpb24gdG8gcGVyZm9ybSBoYXB0aWMgZmVlZGJhY2sgb24gaXRzIHdpbmRvdy4KQEAgLTExMTMsNiArMTEyNCw3IEBACiAgICAgICogQHNlZSBXaW5kb3dNYW5hZ2VyUG9saWN5I1VTRVJfUk9UQVRJT05fTE9DS0VECiAgICAgICogQHNlZSBXaW5kb3dNYW5hZ2VyUG9saWN5I1VTRVJfUk9UQVRJT05fRlJFRSAKICAgICAgKi8KKyAgICBAVXNlclJvdGF0aW9uTW9kZQogICAgIHB1YmxpYyBpbnQgZ2V0VXNlclJvdGF0aW9uTW9kZSgpOwogCiAgICAgLyoqCkBAIC0xMTIzLDEyICsxMTM1LDEyIEBACiAgICAgICogQHBhcmFtIHJvdGF0aW9uIE9uZSBvZiB7QGxpbmsgU3VyZmFjZSNST1RBVElPTl8wfSwge0BsaW5rIFN1cmZhY2UjUk9UQVRJT05fOTB9LAogICAgICAqICAgICAgICAgICAgICAgICB7QGxpbmsgU3VyZmFjZSNST1RBVElPTl8xODB9LCB7QGxpbmsgU3VyZmFjZSNST1RBVElPTl8yNzB9LgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFVzZXJSb3RhdGlvbk1vZGUoaW50IG1vZGUsIGludCByb3RhdGlvbik7CisgICAgcHVibGljIHZvaWQgc2V0VXNlclJvdGF0aW9uTW9kZShAVXNlclJvdGF0aW9uTW9kZSBpbnQgbW9kZSwgQFN1cmZhY2UuUm90YXRpb24gaW50IHJvdGF0aW9uKTsKIAogICAgIC8qKgogICAgICAqIENhbGxlZCB3aGVuIGEgbmV3IHN5c3RlbSBVSSB2aXNpYmlsaXR5IGlzIGJlaW5nIHJlcG9ydGVkLCBhbGxvd2luZwogICAgICAqIHRoZSBwb2xpY3kgdG8gYWRqdXN0IHdoYXQgaXMgYWN0dWFsbHkgcmVwb3J0ZWQuCi0gICAgICogQHBhcmFtIHZpc2liaWxpdHkgVGhlIHJhdyB2aXNpYmxpdHkgcmVwb3J0ZWQgYnkgdGhlIHN0YXR1cyBiYXIuCisgICAgICogQHBhcmFtIHZpc2liaWxpdHkgVGhlIHJhdyB2aXNpYmlsaXR5IHJlcG9ydGVkIGJ5IHRoZSBzdGF0dXMgYmFyLgogICAgICAqIEByZXR1cm4gVGhlIG5ldyBkZXNpcmVkIHZpc2liaWxpdHkuCiAgICAgICovCiAgICAgcHVibGljIGludCBhZGp1c3RTeXN0ZW1VaVZpc2liaWxpdHlMdyhpbnQgdmlzaWJpbGl0eSk7CkBAIC0xMTUxLDYgKzExNjMsMTEgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRMYXN0SW5wdXRNZXRob2RXaW5kb3dMdyhXaW5kb3dTdGF0ZSBpbWUsIFdpbmRvd1N0YXRlIHRhcmdldCk7CiAKICAgICAvKioKKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGhlaWdodCBvZiB0aGUgaW5wdXQgbWV0aG9kIHdpbmRvdy4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldElucHV0TWV0aG9kV2luZG93VmlzaWJsZUhlaWdodEx3KCk7CisKKyAgICAvKioKICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgY3VycmVudCB1c2VyIGNoYW5nZXMuIEd1YXJhbnRlZWQgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgYnJvYWRjYXN0CiAgICAgICogb2YgdGhlIG5ldyB1c2VyIGlkIGlzIG1hZGUgdG8gYWxsIGxpc3RlbmVycy4KICAgICAgKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFdmVudC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlFdmVudC5qYXZhCmluZGV4IGY2MzVlZWUuLjhiOTExNTUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5RXZlbnQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUV2ZW50LmphdmEKQEAgLTcyMiw3ICs3MjIsNyBAQAogICAgIGludCBtQWN0aW9uOwogICAgIGludCBtQ29udGVudENoYW5nZVR5cGVzOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8QWNjZXNzaWJpbGl0eVJlY29yZD4gbVJlY29yZHMgPSBuZXcgQXJyYXlMaXN0PEFjY2Vzc2liaWxpdHlSZWNvcmQ+KCk7CisgICAgcHJpdmF0ZSBBcnJheUxpc3Q8QWNjZXNzaWJpbGl0eVJlY29yZD4gbVJlY29yZHM7CiAKICAgICAvKgogICAgICAqIEhpZGUgY29uc3RydWN0b3IgZnJvbSBjbGllbnRzLgpAQCAtNzU1LDExICs3NTUsMTMgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRTZWFsZWQoYm9vbGVhbiBzZWFsZWQpIHsKICAgICAgICAgc3VwZXIuc2V0U2VhbGVkKHNlYWxlZCk7Ci0gICAgICAgIExpc3Q8QWNjZXNzaWJpbGl0eVJlY29yZD4gcmVjb3JkcyA9IG1SZWNvcmRzOwotICAgICAgICBmaW5hbCBpbnQgcmVjb3JkQ291bnQgPSByZWNvcmRzLnNpemUoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWNvcmRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5UmVjb3JkIHJlY29yZCA9IHJlY29yZHMuZ2V0KGkpOwotICAgICAgICAgICAgcmVjb3JkLnNldFNlYWxlZChzZWFsZWQpOworICAgICAgICBmaW5hbCBMaXN0PEFjY2Vzc2liaWxpdHlSZWNvcmQ+IHJlY29yZHMgPSBtUmVjb3JkczsKKyAgICAgICAgaWYgKHJlY29yZHMgIT0gbnVsbCkgeworICAgICAgICAgICAgZmluYWwgaW50IHJlY29yZENvdW50ID0gcmVjb3Jkcy5zaXplKCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY29yZENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5UmVjb3JkIHJlY29yZCA9IHJlY29yZHMuZ2V0KGkpOworICAgICAgICAgICAgICAgIHJlY29yZC5zZXRTZWFsZWQoc2VhbGVkKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtNzY5LDcgKzc3MSw3IEBACiAgICAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIHJlY29yZHMuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRSZWNvcmRDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIG1SZWNvcmRzLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1SZWNvcmRzID09IG51bGwgPyAwIDogbVJlY29yZHMuc2l6ZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNzgxLDYgKzc4Myw5IEBACiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYXBwZW5kUmVjb3JkKEFjY2Vzc2liaWxpdHlSZWNvcmQgcmVjb3JkKSB7CiAgICAgICAgIGVuZm9yY2VOb3RTZWFsZWQoKTsKKyAgICAgICAgaWYgKG1SZWNvcmRzID09IG51bGwpIHsKKyAgICAgICAgICAgIG1SZWNvcmRzID0gbmV3IEFycmF5TGlzdDxBY2Nlc3NpYmlsaXR5UmVjb3JkPigpOworICAgICAgICB9CiAgICAgICAgIG1SZWNvcmRzLmFkZChyZWNvcmQpOwogICAgIH0KIApAQCAtNzkxLDYgKzc5Niw5IEBACiAgICAgICogQHJldHVybiBUaGUgcmVjb3JkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguCiAgICAgICovCiAgICAgcHVibGljIEFjY2Vzc2liaWxpdHlSZWNvcmQgZ2V0UmVjb3JkKGludCBpbmRleCkgeworICAgICAgICBpZiAobVJlY29yZHMgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oIkludmFsaWQgaW5kZXggIiArIGluZGV4ICsgIiwgc2l6ZSBpcyAwIik7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1SZWNvcmRzLmdldChpbmRleCk7CiAgICAgfQogCkBAIC05NjQsMTEgKzk3MiwxNCBAQAogICAgICAgICBBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnRDbG9uZSA9IEFjY2Vzc2liaWxpdHlFdmVudC5vYnRhaW4oKTsKICAgICAgICAgZXZlbnRDbG9uZS5pbml0KGV2ZW50KTsKIAotICAgICAgICBmaW5hbCBpbnQgcmVjb3JkQ291bnQgPSBldmVudC5tUmVjb3Jkcy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjb3JkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVJlY29yZCByZWNvcmQgPSBldmVudC5tUmVjb3Jkcy5nZXQoaSk7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5UmVjb3JkIHJlY29yZENsb25lID0gQWNjZXNzaWJpbGl0eVJlY29yZC5vYnRhaW4ocmVjb3JkKTsKLSAgICAgICAgICAgIGV2ZW50Q2xvbmUubVJlY29yZHMuYWRkKHJlY29yZENsb25lKTsKKyAgICAgICAgaWYgKGV2ZW50Lm1SZWNvcmRzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIGludCByZWNvcmRDb3VudCA9IGV2ZW50Lm1SZWNvcmRzLnNpemUoKTsKKyAgICAgICAgICAgIGV2ZW50Q2xvbmUubVJlY29yZHMgPSBuZXcgQXJyYXlMaXN0PEFjY2Vzc2liaWxpdHlSZWNvcmQ+KHJlY29yZENvdW50KTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjb3JkQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGZpbmFsIEFjY2Vzc2liaWxpdHlSZWNvcmQgcmVjb3JkID0gZXZlbnQubVJlY29yZHMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGZpbmFsIEFjY2Vzc2liaWxpdHlSZWNvcmQgcmVjb3JkQ2xvbmUgPSBBY2Nlc3NpYmlsaXR5UmVjb3JkLm9idGFpbihyZWNvcmQpOworICAgICAgICAgICAgICAgIGV2ZW50Q2xvbmUubVJlY29yZHMuYWRkKHJlY29yZENsb25lKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBldmVudENsb25lOwpAQCAtMTAxMyw5ICsxMDI0LDExIEBACiAgICAgICAgIG1Db250ZW50Q2hhbmdlVHlwZXMgPSAwOwogICAgICAgICBtUGFja2FnZU5hbWUgPSBudWxsOwogICAgICAgICBtRXZlbnRUaW1lID0gMDsKLSAgICAgICAgd2hpbGUgKCFtUmVjb3Jkcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlSZWNvcmQgcmVjb3JkID0gbVJlY29yZHMucmVtb3ZlKDApOwotICAgICAgICAgICAgcmVjb3JkLnJlY3ljbGUoKTsKKyAgICAgICAgaWYgKG1SZWNvcmRzICE9IG51bGwpIHsKKyAgICAgICAgICAgIHdoaWxlICghbVJlY29yZHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVJlY29yZCByZWNvcmQgPSBtUmVjb3Jkcy5yZW1vdmUoMCk7CisgICAgICAgICAgICAgICAgcmVjb3JkLnJlY3ljbGUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMTAzNywxMSArMTA1MCwxNCBAQAogCiAgICAgICAgIC8vIFJlYWQgdGhlIHJlY29yZHMuCiAgICAgICAgIGZpbmFsIGludCByZWNvcmRDb3VudCA9IHBhcmNlbC5yZWFkSW50KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjb3JkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVJlY29yZCByZWNvcmQgPSBBY2Nlc3NpYmlsaXR5UmVjb3JkLm9idGFpbigpOwotICAgICAgICAgICAgcmVhZEFjY2Vzc2liaWxpdHlSZWNvcmRGcm9tUGFyY2VsKHJlY29yZCwgcGFyY2VsKTsKLSAgICAgICAgICAgIHJlY29yZC5tQ29ubmVjdGlvbklkID0gbUNvbm5lY3Rpb25JZDsKLSAgICAgICAgICAgIG1SZWNvcmRzLmFkZChyZWNvcmQpOworICAgICAgICBpZiAocmVjb3JkQ291bnQgPiAwKSB7CisgICAgICAgICAgICBtUmVjb3JkcyA9IG5ldyBBcnJheUxpc3Q8QWNjZXNzaWJpbGl0eVJlY29yZD4ocmVjb3JkQ291bnQpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWNvcmRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVJlY29yZCByZWNvcmQgPSBBY2Nlc3NpYmlsaXR5UmVjb3JkLm9idGFpbigpOworICAgICAgICAgICAgICAgIHJlYWRBY2Nlc3NpYmlsaXR5UmVjb3JkRnJvbVBhcmNlbChyZWNvcmQsIHBhcmNlbCk7CisgICAgICAgICAgICAgICAgcmVjb3JkLm1Db25uZWN0aW9uSWQgPSBtQ29ubmVjdGlvbklkOworICAgICAgICAgICAgICAgIG1SZWNvcmRzLmFkZChyZWNvcmQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0xMTQ3LDggKzExNjMsOCBAQAogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIjsgQ29udGVudENoYW5nZVR5cGVzOiAiKS5hcHBlbmQobUNvbnRlbnRDaGFuZ2VUeXBlcyk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiOyBzb3VyY2VXaW5kb3dJZDogIikuYXBwZW5kKG1Tb3VyY2VXaW5kb3dJZCk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiOyBtU291cmNlTm9kZUlkOiAiKS5hcHBlbmQobVNvdXJjZU5vZGVJZCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1SZWNvcmRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVJlY29yZCByZWNvcmQgPSBtUmVjb3Jkcy5nZXQoaSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdldFJlY29yZENvdW50KCk7IGkrKykgeworICAgICAgICAgICAgICAgIGZpbmFsIEFjY2Vzc2liaWxpdHlSZWNvcmQgcmVjb3JkID0gZ2V0UmVjb3JkKGkpOwogICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgIFJlY29yZCAiKTsKICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChpKTsKICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiOiIpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNsaWVudC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNsaWVudC5qYXZhCmluZGV4IDEzOWRmM2UuLjVhNTVlMzQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW50ZXJhY3Rpb25DbGllbnQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUludGVyYWN0aW9uQ2xpZW50LmphdmEKQEAgLTI3LDcgKzI3LDYgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb25nU3BhcnNlQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwotaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VMb25nQXJyYXk7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKQEAgLTcxOCwxMCArNzE3LDkgQEAKICAgICAgICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiRHVwbGljYXRlIG5vZGUuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3BhcnNlTG9uZ0FycmF5IGNoaWxkSWRzID0gY3VycmVudC5nZXRDaGlsZE5vZGVJZHMoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gY2hpbGRJZHMuc2l6ZSgpOworICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBjdXJyZW50LmdldENoaWxkQ291bnQoKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgbG9uZyBjaGlsZElkID0gY2hpbGRJZHMudmFsdWVBdChpKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGNoaWxkSWQgPSBjdXJyZW50LmdldENoaWxkSWQoaSk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpbmZvQ291bnQ7IGorKykgewogICAgICAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gY2hpbGQgPSBpbmZvcy5nZXQoaik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRTb3VyY2VOb2RlSWQoKSA9PSBjaGlsZElkKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qYXZhCmluZGV4IDAwZjRhZGIuLjMyNGJhNzcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlci5qYXZhCkBAIC03NSw2ICs3NSw0MiBAQAogICAgIC8qKiBAaGlkZSAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0ZMQUdfVE9VQ0hfRVhQTE9SQVRJT05fRU5BQkxFRCA9IDB4MDAwMDAwMDI7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlZFUlNJT05fRElTQUJMRUQgPSAtMTsKKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVkVSU0lPTl9TVEFOREFSRCA9IDA7CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlZFUlNJT05fSFVFX09OTFkgPSAxOworCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5WRVJTSU9OX1ZBTFVFX09OTFkgPSAyOworCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFMVE9OSVpFUl9ESVNBQkxFRCA9IC0xOworCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFMVE9OSVpFUl9TSU1VTEFURV9NT05PQ0hST01BQ1kgPSAwOworCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFMVE9OSVpFUl9TSU1VTEFURV9QUk9UQU5PTUFMWSA9IDE7CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQUxUT05JWkVSX1NJTVVMQVRFX0RFVVRFUkFOT01BTFkgPSAyOworCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFMVE9OSVpFUl9TSU1VTEFURV9UUklUQU5PTUFMWSA9IDM7CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQUxUT05JWkVSX0NPUlJFQ1RfUFJPVEFOT01BTFkgPSAxMTsKKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBTFRPTklaRVJfQ09SUkVDVF9ERVVURVJBTk9NQUxZID0gMTI7CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQUxUT05JWkVSX0NPUlJFQ1RfVFJJVEFOT01BTFkgPSAxMzsKKwogICAgIHN0YXRpYyBmaW5hbCBPYmplY3Qgc0luc3RhbmNlU3luYyA9IG5ldyBPYmplY3QoKTsKIAogICAgIHByaXZhdGUgc3RhdGljIEFjY2Vzc2liaWxpdHlNYW5hZ2VyIHNJbnN0YW5jZTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm8uamF2YQppbmRleCA0ZjUzYzFlLi42MWFhYmVhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mby5qYXZhCkBAIC0yMiw4ICsyMiw4IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5JbnB1dFR5cGU7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvbmdBcnJheTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuUG9vbHMuU3luY2hyb25pemVkUG9vbDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlTG9uZ0FycmF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogCiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwpAQCAtNTAzLDcgKzUwMyw3IEBACiAgICAgcHJpdmF0ZSBDaGFyU2VxdWVuY2UgbUNvbnRlbnREZXNjcmlwdGlvbjsKICAgICBwcml2YXRlIFN0cmluZyBtVmlld0lkUmVzb3VyY2VOYW1lOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBTcGFyc2VMb25nQXJyYXkgbUNoaWxkTm9kZUlkcyA9IG5ldyBTcGFyc2VMb25nQXJyYXkoKTsKKyAgICBwcml2YXRlIExvbmdBcnJheSBtQ2hpbGROb2RlSWRzOwogICAgIHByaXZhdGUgaW50IG1BY3Rpb25zOwogCiAgICAgcHJpdmF0ZSBpbnQgbU1vdmVtZW50R3JhbnVsYXJpdGllczsKQEAgLTY2NiwyMSArNjY2LDM1IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQHJldHVybiBUaGUgaWRzIG9mIHRoZSBjaGlsZHJlbi4KKyAgICAgKiBSZXR1cm5zIHRoZSBhcnJheSBjb250YWluaW5nIHRoZSBJRHMgb2YgdGhpcyBub2RlJ3MgY2hpbGRyZW4uCiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBTcGFyc2VMb25nQXJyYXkgZ2V0Q2hpbGROb2RlSWRzKCkgeworICAgIHB1YmxpYyBMb25nQXJyYXkgZ2V0Q2hpbGROb2RlSWRzKCkgewogICAgICAgICByZXR1cm4gbUNoaWxkTm9kZUlkczsKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleC4KKyAgICAgKgorICAgICAqIEB0aHJvd3MgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiB3aGVuIGluZGV4ICZsdDsgMCB8fCBpbmRleCAmZ3Q7PQorICAgICAqICAgICAgICAgICAgIGdldENoaWxkQ291bnQoKQorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIGxvbmcgZ2V0Q2hpbGRJZChpbnQgaW5kZXgpIHsKKyAgICAgICAgaWYgKG1DaGlsZE5vZGVJZHMgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbUNoaWxkTm9kZUlkcy5nZXQoaW5kZXgpOworICAgIH0KKworICAgIC8qKgogICAgICAqIEdldHMgdGhlIG51bWJlciBvZiBjaGlsZHJlbi4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGNoaWxkIGNvdW50LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0Q2hpbGRDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIG1DaGlsZE5vZGVJZHMuc2l6ZSgpOworICAgICAgICByZXR1cm4gbUNoaWxkTm9kZUlkcyA9PSBudWxsID8gMCA6IG1DaGlsZE5vZGVJZHMuc2l6ZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNjk5LDYgKzcxMyw5IEBACiAgICAgICovCiAgICAgcHVibGljIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBnZXRDaGlsZChpbnQgaW5kZXgpIHsKICAgICAgICAgZW5mb3JjZVNlYWxlZCgpOworICAgICAgICBpZiAobUNoaWxkTm9kZUlkcyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWNhblBlcmZvcm1SZXF1ZXN0T3ZlckNvbm5lY3Rpb24obVNvdXJjZU5vZGVJZCkpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CkBAIC03MjEsNyArNzM4LDM1IEBACiAgICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gSWYgY2FsbGVkIGZyb20gYW4gQWNjZXNzaWJpbGl0eVNlcnZpY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYWRkQ2hpbGQoVmlldyBjaGlsZCkgewotICAgICAgICBhZGRDaGlsZChjaGlsZCwgVU5ERUZJTkVEKTsKKyAgICAgICAgYWRkQ2hpbGRJbnRlcm5hbChjaGlsZCwgVU5ERUZJTkVELCB0cnVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbmNoZWNrZWQgdmVyc2lvbiBvZiB7QGxpbmsgI2FkZENoaWxkKFZpZXcpfSB0aGF0IGRvZXMgbm90IHZlcmlmeQorICAgICAqIHVuaXF1ZW5lc3MuIEZvciBmcmFtZXdvcmsgdXNlIG9ubHkuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZENoaWxkVW5jaGVja2VkKFZpZXcgY2hpbGQpIHsKKyAgICAgICAgYWRkQ2hpbGRJbnRlcm5hbChjaGlsZCwgVU5ERUZJTkVELCBmYWxzZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhIGNoaWxkLiBJZiB0aGUgY2hpbGQgd2FzIG5vdCBwcmV2aW91c2x5IGFkZGVkIHRvIHRoZSBub2RlLAorICAgICAqIGNhbGxpbmcgdGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdC4KKyAgICAgKiA8cD4KKyAgICAgKiA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+IENhbm5vdCBiZSBjYWxsZWQgZnJvbSBhbgorICAgICAqIHtAbGluayBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkFjY2Vzc2liaWxpdHlTZXJ2aWNlfS4KKyAgICAgKiBUaGlzIGNsYXNzIGlzIG1hZGUgaW1tdXRhYmxlIGJlZm9yZSBiZWluZyBkZWxpdmVyZWQgdG8gYW4gQWNjZXNzaWJpbGl0eVNlcnZpY2UuCisgICAgICogPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGNoaWxkIFRoZSBjaGlsZC4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNoaWxkIHdhcyBwcmVzZW50CisgICAgICoKKyAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBJZiBjYWxsZWQgZnJvbSBhbiBBY2Nlc3NpYmlsaXR5U2VydmljZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmVDaGlsZChWaWV3IGNoaWxkKSB7CisgICAgICAgIHJldHVybiByZW1vdmVDaGlsZChjaGlsZCwgVU5ERUZJTkVEKTsKICAgICB9CiAKICAgICAvKioKQEAgLTczOSwxMiArNzg0LDQ5IEBACiAgICAgICogQHBhcmFtIHZpcnR1YWxEZXNjZW5kYW50SWQgVGhlIGlkIG9mIHRoZSB2aXJ0dWFsIGNoaWxkLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZENoaWxkKFZpZXcgcm9vdCwgaW50IHZpcnR1YWxEZXNjZW5kYW50SWQpIHsKKyAgICAgICAgYWRkQ2hpbGRJbnRlcm5hbChyb290LCB2aXJ0dWFsRGVzY2VuZGFudElkLCB0cnVlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYWRkQ2hpbGRJbnRlcm5hbChWaWV3IHJvb3QsIGludCB2aXJ0dWFsRGVzY2VuZGFudElkLCBib29sZWFuIGNoZWNrZWQpIHsKICAgICAgICAgZW5mb3JjZU5vdFNlYWxlZCgpOwotICAgICAgICBmaW5hbCBpbnQgaW5kZXggPSBtQ2hpbGROb2RlSWRzLnNpemUoKTsKKyAgICAgICAgaWYgKG1DaGlsZE5vZGVJZHMgPT0gbnVsbCkgeworICAgICAgICAgICAgbUNoaWxkTm9kZUlkcyA9IG5ldyBMb25nQXJyYXkoKTsKKyAgICAgICAgfQogICAgICAgICBmaW5hbCBpbnQgcm9vdEFjY2Vzc2liaWxpdHlWaWV3SWQgPQogICAgICAgICAgICAgKHJvb3QgIT0gbnVsbCkgPyByb290LmdldEFjY2Vzc2liaWxpdHlWaWV3SWQoKSA6IFVOREVGSU5FRDsKICAgICAgICAgZmluYWwgbG9uZyBjaGlsZE5vZGVJZCA9IG1ha2VOb2RlSWQocm9vdEFjY2Vzc2liaWxpdHlWaWV3SWQsIHZpcnR1YWxEZXNjZW5kYW50SWQpOwotICAgICAgICBtQ2hpbGROb2RlSWRzLnB1dChpbmRleCwgY2hpbGROb2RlSWQpOworICAgICAgICAvLyBJZiB3ZSdyZSBjaGVja2luZyB1bmlxdWVuZXNzIGFuZCB0aGUgSUQgYWxyZWFkeSBleGlzdHMsIGFib3J0LgorICAgICAgICBpZiAoY2hlY2tlZCAmJiBtQ2hpbGROb2RlSWRzLmluZGV4T2YoY2hpbGROb2RlSWQpID49IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtQ2hpbGROb2RlSWRzLmFkZChjaGlsZE5vZGVJZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhIHZpcnR1YWwgY2hpbGQgd2hpY2ggaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBnaXZlbgorICAgICAqIDxjb2RlPnJvb3Q8L2NvZGU+LiBJZiB0aGUgY2hpbGQgd2FzIG5vdCBwcmV2aW91c2x5IGFkZGVkIHRvIHRoZSBub2RlLAorICAgICAqIGNhbGxpbmcgdGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSByb290IFRoZSByb290IG9mIHRoZSB2aXJ0dWFsIHN1YnRyZWUuCisgICAgICogQHBhcmFtIHZpcnR1YWxEZXNjZW5kYW50SWQgVGhlIGlkIG9mIHRoZSB2aXJ0dWFsIGNoaWxkLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY2hpbGQgd2FzIHByZXNlbnQKKyAgICAgKiBAc2VlICNhZGRDaGlsZChWaWV3LCBpbnQpCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQ2hpbGQoVmlldyByb290LCBpbnQgdmlydHVhbERlc2NlbmRhbnRJZCkgeworICAgICAgICBlbmZvcmNlTm90U2VhbGVkKCk7CisgICAgICAgIGZpbmFsIExvbmdBcnJheSBjaGlsZElkcyA9IG1DaGlsZE5vZGVJZHM7CisgICAgICAgIGlmIChjaGlsZElkcyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgaW50IHJvb3RBY2Nlc3NpYmlsaXR5Vmlld0lkID0KKyAgICAgICAgICAgICAgICAocm9vdCAhPSBudWxsKSA/IHJvb3QuZ2V0QWNjZXNzaWJpbGl0eVZpZXdJZCgpIDogVU5ERUZJTkVEOworICAgICAgICBmaW5hbCBsb25nIGNoaWxkTm9kZUlkID0gbWFrZU5vZGVJZChyb290QWNjZXNzaWJpbGl0eVZpZXdJZCwgdmlydHVhbERlc2NlbmRhbnRJZCk7CisgICAgICAgIGZpbmFsIGludCBpbmRleCA9IGNoaWxkSWRzLmluZGV4T2YoY2hpbGROb2RlSWQpOworICAgICAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgY2hpbGRJZHMucmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgLyoqCkBAIC03ODksNiArODcxLDI0IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogUmVtb3ZlcyBhbiBhY3Rpb24gdGhhdCBjYW4gYmUgcGVyZm9ybWVkIG9uIHRoZSBub2RlLiBJZiB0aGUgYWN0aW9uIHdhcworICAgICAqIG5vdCBhbHJlYWR5IGFkZGVkIHRvIHRoZSBub2RlLCBjYWxsaW5nIHRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QuCisgICAgICogPHA+CisgICAgICogICA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+IENhbm5vdCBiZSBjYWxsZWQgZnJvbSBhbgorICAgICAqICAge0BsaW5rIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2V9LgorICAgICAqICAgVGhpcyBjbGFzcyBpcyBtYWRlIGltbXV0YWJsZSBiZWZvcmUgYmVpbmcgZGVsaXZlcmVkIHRvIGFuIEFjY2Vzc2liaWxpdHlTZXJ2aWNlLgorICAgICAqIDwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhY3Rpb24gVGhlIGFjdGlvbi4KKyAgICAgKgorICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIElmIGNhbGxlZCBmcm9tIGFuIEFjY2Vzc2liaWxpdHlTZXJ2aWNlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlbW92ZUFjdGlvbihpbnQgYWN0aW9uKSB7CisgICAgICAgIGVuZm9yY2VOb3RTZWFsZWQoKTsKKyAgICAgICAgbUFjdGlvbnMgJj0gfmFjdGlvbjsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBTZXRzIHRoZSBtb3ZlbWVudCBncmFudWxhcml0aWVzIGZvciB0cmF2ZXJzaW5nIHRoZSB0ZXh0IG9mIHRoaXMgbm9kZS4KICAgICAgKiA8cD4KICAgICAgKiAgIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gQ2Fubm90IGJlIGNhbGxlZCBmcm9tIGFuCkBAIC0xNDA4LDggKzE1MDgsNiBAQAogICAgICAqICAge0BsaW5rIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2V9LgogICAgICAqICAgVGhpcyBjbGFzcyBpcyBtYWRlIGltbXV0YWJsZSBiZWZvcmUgYmVpbmcgZGVsaXZlcmVkIHRvIGFuIEFjY2Vzc2liaWxpdHlTZXJ2aWNlLgogICAgICAqIDwvcD4KLSAgICAgKgotICAgICAqIEByZXR1cm4gY29sbGVjdGlvbkl0ZW0gVHJ1ZSBpZiB0aGUgbm9kZSBpcyBhbiBpdGVtLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbGxlY3Rpb25JdGVtSW5mbyhDb2xsZWN0aW9uSXRlbUluZm8gY29sbGVjdGlvbkl0ZW1JbmZvKSB7CiAgICAgICAgIGVuZm9yY2VOb3RTZWFsZWQoKTsKQEAgLTE5NTEsNiArMjA0OSw3IEBACiAgICAgLyoqCiAgICAgICoge0Bpbmhlcml0RG9jfQogICAgICAqLworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMjExNCw2ICsyMjEzLDcgQEAKICAgICAgKiAgICAgIGlzIHJlY3ljbGVkLiBZb3UgbXVzdCBub3QgdG91Y2ggdGhlIG9iamVjdCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgICAgICogPC9wPgogICAgICAqLworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIHBhcmNlbCwgaW50IGZsYWdzKSB7CiAgICAgICAgIHBhcmNlbC53cml0ZUludChpc1NlYWxlZCgpID8gMSA6IDApOwogICAgICAgICBwYXJjZWwud3JpdGVMb25nKG1Tb3VyY2VOb2RlSWQpOwpAQCAtMjEyMywxMSArMjIyMywxNSBAQAogICAgICAgICBwYXJjZWwud3JpdGVMb25nKG1MYWJlbGVkQnlJZCk7CiAgICAgICAgIHBhcmNlbC53cml0ZUludChtQ29ubmVjdGlvbklkKTsKIAotICAgICAgICBTcGFyc2VMb25nQXJyYXkgY2hpbGRJZHMgPSBtQ2hpbGROb2RlSWRzOwotICAgICAgICBmaW5hbCBpbnQgY2hpbGRJZHNTaXplID0gY2hpbGRJZHMuc2l6ZSgpOwotICAgICAgICBwYXJjZWwud3JpdGVJbnQoY2hpbGRJZHNTaXplKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZElkc1NpemU7IGkrKykgewotICAgICAgICAgICAgcGFyY2VsLndyaXRlTG9uZyhjaGlsZElkcy52YWx1ZUF0KGkpKTsKKyAgICAgICAgZmluYWwgTG9uZ0FycmF5IGNoaWxkSWRzID0gbUNoaWxkTm9kZUlkczsKKyAgICAgICAgaWYgKGNoaWxkSWRzID09IG51bGwpIHsKKyAgICAgICAgICAgIHBhcmNlbC53cml0ZUludCgwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZElkc1NpemUgPSBjaGlsZElkcy5zaXplKCk7CisgICAgICAgICAgICBwYXJjZWwud3JpdGVJbnQoY2hpbGRJZHNTaXplKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRJZHNTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBwYXJjZWwud3JpdGVMb25nKGNoaWxkSWRzLmdldChpKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBwYXJjZWwud3JpdGVJbnQobUJvdW5kc0luUGFyZW50LnRvcCk7CkBAIC0yMjIyLDEwICsyMzI2LDE2IEBACiAgICAgICAgIG1BY3Rpb25zPSBvdGhlci5tQWN0aW9uczsKICAgICAgICAgbUJvb2xlYW5Qcm9wZXJ0aWVzID0gb3RoZXIubUJvb2xlYW5Qcm9wZXJ0aWVzOwogICAgICAgICBtTW92ZW1lbnRHcmFudWxhcml0aWVzID0gb3RoZXIubU1vdmVtZW50R3JhbnVsYXJpdGllczsKLSAgICAgICAgZmluYWwgaW50IG90aGVyQ2hpbGRJZENvdW50ID0gb3RoZXIubUNoaWxkTm9kZUlkcy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3RoZXJDaGlsZElkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgbUNoaWxkTm9kZUlkcy5wdXQoaSwgb3RoZXIubUNoaWxkTm9kZUlkcy52YWx1ZUF0KGkpKTsKKworICAgICAgICBmaW5hbCBMb25nQXJyYXkgb3RoZXJDaGlsZE5vZGVJZHMgPSBvdGhlci5tQ2hpbGROb2RlSWRzOworICAgICAgICBpZiAob3RoZXJDaGlsZE5vZGVJZHMgIT0gbnVsbCAmJiBvdGhlckNoaWxkTm9kZUlkcy5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICBpZiAobUNoaWxkTm9kZUlkcyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUNoaWxkTm9kZUlkcyA9IG90aGVyQ2hpbGROb2RlSWRzLmNsb25lKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1DaGlsZE5vZGVJZHMuYWRkQWxsKG90aGVyQ2hpbGROb2RlSWRzKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIG1UZXh0U2VsZWN0aW9uU3RhcnQgPSBvdGhlci5tVGV4dFNlbGVjdGlvblN0YXJ0OwogICAgICAgICBtVGV4dFNlbGVjdGlvbkVuZCA9IG90aGVyLm1UZXh0U2VsZWN0aW9uRW5kOwogICAgICAgICBtSW5wdXRUeXBlID0gb3RoZXIubUlucHV0VHlwZTsKQEAgLTIyNTUsMTEgKzIzNjUsMTUgQEAKICAgICAgICAgbUxhYmVsZWRCeUlkID0gcGFyY2VsLnJlYWRMb25nKCk7CiAgICAgICAgIG1Db25uZWN0aW9uSWQgPSBwYXJjZWwucmVhZEludCgpOwogCi0gICAgICAgIFNwYXJzZUxvbmdBcnJheSBjaGlsZElkcyA9IG1DaGlsZE5vZGVJZHM7CiAgICAgICAgIGZpbmFsIGludCBjaGlsZHJlblNpemUgPSBwYXJjZWwucmVhZEludCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBsb25nIGNoaWxkSWQgPSBwYXJjZWwucmVhZExvbmcoKTsKLSAgICAgICAgICAgIGNoaWxkSWRzLnB1dChpLCBjaGlsZElkKTsKKyAgICAgICAgaWYgKGNoaWxkcmVuU2l6ZSA8PSAwKSB7CisgICAgICAgICAgICBtQ2hpbGROb2RlSWRzID0gbnVsbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1DaGlsZE5vZGVJZHMgPSBuZXcgTG9uZ0FycmF5KGNoaWxkcmVuU2l6ZSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuU2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBjaGlsZElkID0gcGFyY2VsLnJlYWRMb25nKCk7CisgICAgICAgICAgICAgICAgbUNoaWxkTm9kZUlkcy5hZGQoY2hpbGRJZCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBtQm91bmRzSW5QYXJlbnQudG9wID0gcGFyY2VsLnJlYWRJbnQoKTsKQEAgLTIzMzEsNyArMjQ0NSw5IEBACiAgICAgICAgIG1XaW5kb3dJZCA9IFVOREVGSU5FRDsKICAgICAgICAgbUNvbm5lY3Rpb25JZCA9IFVOREVGSU5FRDsKICAgICAgICAgbU1vdmVtZW50R3JhbnVsYXJpdGllcyA9IDA7Ci0gICAgICAgIG1DaGlsZE5vZGVJZHMuY2xlYXIoKTsKKyAgICAgICAgaWYgKG1DaGlsZE5vZGVJZHMgIT0gbnVsbCkgeworICAgICAgICAgICAgbUNoaWxkTm9kZUlkcy5jbGVhcigpOworICAgICAgICB9CiAgICAgICAgIG1Cb3VuZHNJblBhcmVudC5zZXQoMCwgMCwgMCwgMCk7CiAgICAgICAgIG1Cb3VuZHNJblNjcmVlbi5zZXQoMCwgMCwgMCwgMCk7CiAgICAgICAgIG1Cb29sZWFuUHJvcGVydGllcyA9IDA7CkBAIC0yNDkzLDEyICsyNjA5LDE0IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiXSIpOwogCi0gICAgICAgICAgICBTcGFyc2VMb25nQXJyYXkgY2hpbGRJZHMgPSBtQ2hpbGROb2RlSWRzOwogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIjsgY2hpbGRBY2Nlc3NpYmlsaXR5SWRzOiBbIik7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMCwgY291bnQgPSBjaGlsZElkcy5zaXplKCk7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoY2hpbGRJZHMudmFsdWVBdChpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPCBjb3VudCAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICBmaW5hbCBMb25nQXJyYXkgY2hpbGRJZHMgPSBtQ2hpbGROb2RlSWRzOworICAgICAgICAgICAgaWYgKGNoaWxkSWRzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMCwgY291bnQgPSBjaGlsZElkcy5zaXplKCk7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGNoaWxkSWRzLmdldChpKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgY291bnQgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJdIik7CkBAIC0yODkzLDE2ICszMDExLDE4IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQHNlZSBQYXJjZWxhYmxlLkNyZWF0b3IKKyAgICAgKiBAc2VlIGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYXJjZWxhYmxlLkNyZWF0b3I8QWNjZXNzaWJpbGl0eU5vZGVJbmZvPiBDUkVBVE9SID0KICAgICAgICAgICAgIG5ldyBQYXJjZWxhYmxlLkNyZWF0b3I8QWNjZXNzaWJpbGl0eU5vZGVJbmZvPigpIHsKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgcGFyY2VsKSB7CiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gaW5mbyA9IEFjY2Vzc2liaWxpdHlOb2RlSW5mby5vYnRhaW4oKTsKICAgICAgICAgICAgIGluZm8uaW5pdEZyb21QYXJjZWwocGFyY2VsKTsKICAgICAgICAgICAgIHJldHVybiBpbmZvOwogICAgICAgICB9CiAKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBBY2Nlc3NpYmlsaXR5Tm9kZUluZm9bXSBuZXdBcnJheShpbnQgc2l6ZSkgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBBY2Nlc3NpYmlsaXR5Tm9kZUluZm9bc2l6ZV07CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm9DYWNoZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mb0NhY2hlLmphdmEKaW5kZXggYTk0NzNhOC4uM2Y3OWI0NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mb0NhY2hlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlSW5mb0NhY2hlLmphdmEKQEAgLTE4LDggKzE4LDggQEAKIAogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9uZ0FycmF5OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb25nU3BhcnNlQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUxvbmdBcnJheTsKIAogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwpAQCAtMTcyLDEyICsxNzIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5ldyBvbmUgcmVwcmVzZW50cyBhIHNvdXJjZSBzdGF0ZSB3aGVyZSBzb21lIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZHJlbiBoYXZlIGJlZW4gcmVtb3ZlZCB0byBhdm9pZCBoYXZpbmcgZGlzY29ubmVjdGVkCiAgICAgICAgICAgICAgICAgICAgIC8vIHN1YnRyZWVzIGluIHRoZSBjYWNoZS4KLSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTG9uZ0FycmF5IG9sZENoaWxkcmVuSWRzID0gb2xkSW5mby5nZXRDaGlsZE5vZGVJZHMoKTsKLSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTG9uZ0FycmF5IG5ld0NoaWxkcmVuSWRzID0gaW5mby5nZXRDaGlsZE5vZGVJZHMoKTsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IG9sZENoaWxkQ291bnQgPSBvbGRDaGlsZHJlbklkcy5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFJ1bnMgaW4gTyhuXjIpLCBjb3VsZCBvcHRpbWl6ZSB0byBPKG4gKyBuIGxvZyBuKQorICAgICAgICAgICAgICAgICAgICBmaW5hbCBMb25nQXJyYXkgbmV3Q2hpbGRyZW5JZHMgPSBpbmZvLmdldENoaWxkTm9kZUlkcygpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgb2xkQ2hpbGRDb3VudCA9IG9sZEluZm8uZ2V0Q2hpbGRDb3VudCgpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9sZENoaWxkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBvbGRDaGlsZElkID0gb2xkQ2hpbGRyZW5JZHMudmFsdWVBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZHJlbklkcy5pbmRleE9mVmFsdWUob2xkQ2hpbGRJZCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIG9sZENoaWxkSWQgPSBvbGRJbmZvLmdldENoaWxkSWQoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGRyZW5JZHMuaW5kZXhPZihvbGRDaGlsZElkKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclN1YlRyZWVMb2NrZWQob2xkQ2hpbGRJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzNywxMCArMjM3LDkgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtQ2FjaGVJbXBsLnJlbW92ZShyb290Tm9kZUlkKTsKLSAgICAgICAgU3BhcnNlTG9uZ0FycmF5IGNoaWxkTm9kZUlkcyA9IGN1cnJlbnQuZ2V0Q2hpbGROb2RlSWRzKCk7Ci0gICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gY2hpbGROb2RlSWRzLnNpemUoKTsKKyAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBjdXJyZW50LmdldENoaWxkQ291bnQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGZpbmFsIGxvbmcgY2hpbGROb2RlSWQgPSBjaGlsZE5vZGVJZHMudmFsdWVBdChpKTsKKyAgICAgICAgICAgIGZpbmFsIGxvbmcgY2hpbGROb2RlSWQgPSBjdXJyZW50LmdldENoaWxkSWQoaSk7CiAgICAgICAgICAgICBjbGVhclN1YlRyZWVSZWN1cnNpdmVMb2NrZWQoY2hpbGROb2RlSWQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzAxLDExICszMDAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIFNwYXJzZUxvbmdBcnJheSBjaGlsZElkcyA9IGN1cnJlbnQuZ2V0Q2hpbGROb2RlSWRzKCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBjaGlsZElkcy5zaXplKCk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBjdXJyZW50LmdldENoaWxkQ291bnQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGNoaWxkSWQgPSBjaGlsZElkcy52YWx1ZUF0KGkpOwotICAgICAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gY2hpbGQgPSBtQ2FjaGVJbXBsLmdldChjaGlsZElkKTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBjaGlsZElkID0gY3VycmVudC5nZXRDaGlsZElkKGkpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gY2hpbGQgPSBtQ2FjaGVJbXBsLmdldChjaGlsZElkKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZyaW5nZS5hZGQoY2hpbGQpOwogICAgICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQ2FwdGlvbmluZ01hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9DYXB0aW9uaW5nTWFuYWdlci5qYXZhCmluZGV4IDU1NzIzOWYuLjAyOTI5ZWQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9DYXB0aW9uaW5nTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9DYXB0aW9uaW5nTWFuYWdlci5qYXZhCkBAIC0yOTMsNiArMjkzLDkgQEAKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgZWRnZUNvbG9yOwogCisgICAgICAgIC8qKiBUaGUgcHJlZmVycmVkIHdpbmRvdyBjb2xvciBmb3IgdmlkZW8gY2FwdGlvbnMuICovCisgICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgd2luZG93Q29sb3I7CisKICAgICAgICAgLyoqCiAgICAgICAgICAqIEBoaWRlCiAgICAgICAgICAqLwpAQCAtMzAxLDExICszMDQsMTIgQEAKICAgICAgICAgcHJpdmF0ZSBUeXBlZmFjZSBtUGFyc2VkVHlwZWZhY2U7CiAKICAgICAgICAgcHJpdmF0ZSBDYXB0aW9uU3R5bGUoaW50IGZvcmVncm91bmRDb2xvciwgaW50IGJhY2tncm91bmRDb2xvciwgaW50IGVkZ2VUeXBlLCBpbnQgZWRnZUNvbG9yLAotICAgICAgICAgICAgICAgIFN0cmluZyByYXdUeXBlZmFjZSkgeworICAgICAgICAgICAgICAgIGludCB3aW5kb3dDb2xvciwgU3RyaW5nIHJhd1R5cGVmYWNlKSB7CiAgICAgICAgICAgICB0aGlzLmZvcmVncm91bmRDb2xvciA9IGZvcmVncm91bmRDb2xvcjsKICAgICAgICAgICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZENvbG9yOwogICAgICAgICAgICAgdGhpcy5lZGdlVHlwZSA9IGVkZ2VUeXBlOwogICAgICAgICAgICAgdGhpcy5lZGdlQ29sb3IgPSBlZGdlQ29sb3I7CisgICAgICAgICAgICB0aGlzLndpbmRvd0NvbG9yID0gd2luZG93Q29sb3I7CiAKICAgICAgICAgICAgIG1SYXdUeXBlZmFjZSA9IHJhd1R5cGVmYWNlOwogICAgICAgICB9CkBAIC0zMzQsMjUgKzMzOCwyNyBAQAogICAgICAgICAgICAgICAgICAgICBjciwgU2VjdXJlLkFDQ0VTU0lCSUxJVFlfQ0FQVElPTklOR19FREdFX1RZUEUsIGRlZlN0eWxlLmVkZ2VUeXBlKTsKICAgICAgICAgICAgIGZpbmFsIGludCBlZGdlQ29sb3IgPSBTZWN1cmUuZ2V0SW50KAogICAgICAgICAgICAgICAgICAgICBjciwgU2VjdXJlLkFDQ0VTU0lCSUxJVFlfQ0FQVElPTklOR19FREdFX0NPTE9SLCBkZWZTdHlsZS5lZGdlQ29sb3IpOworICAgICAgICAgICAgZmluYWwgaW50IHdpbmRvd0NvbG9yID0gU2VjdXJlLmdldEludCgKKyAgICAgICAgICAgICAgICAgICAgY3IsIFNlY3VyZS5BQ0NFU1NJQklMSVRZX0NBUFRJT05JTkdfV0lORE9XX0NPTE9SLCBkZWZTdHlsZS53aW5kb3dDb2xvcik7CiAKICAgICAgICAgICAgIFN0cmluZyByYXdUeXBlZmFjZSA9IFNlY3VyZS5nZXRTdHJpbmcoY3IsIFNlY3VyZS5BQ0NFU1NJQklMSVRZX0NBUFRJT05JTkdfVFlQRUZBQ0UpOwogICAgICAgICAgICAgaWYgKHJhd1R5cGVmYWNlID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByYXdUeXBlZmFjZSA9IGRlZlN0eWxlLm1SYXdUeXBlZmFjZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIG5ldyBDYXB0aW9uU3R5bGUoCi0gICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmRDb2xvciwgYmFja2dyb3VuZENvbG9yLCBlZGdlVHlwZSwgZWRnZUNvbG9yLCByYXdUeXBlZmFjZSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IENhcHRpb25TdHlsZShmb3JlZ3JvdW5kQ29sb3IsIGJhY2tncm91bmRDb2xvciwgZWRnZVR5cGUsIGVkZ2VDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgd2luZG93Q29sb3IsIHJhd1R5cGVmYWNlKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB7Ci0gICAgICAgICAgICBXSElURV9PTl9CTEFDSyA9IG5ldyBDYXB0aW9uU3R5bGUoCi0gICAgICAgICAgICAgICAgICAgIENvbG9yLldISVRFLCBDb2xvci5CTEFDSywgRURHRV9UWVBFX05PTkUsIENvbG9yLkJMQUNLLCBudWxsKTsKLSAgICAgICAgICAgIEJMQUNLX09OX1dISVRFID0gbmV3IENhcHRpb25TdHlsZSgKLSAgICAgICAgICAgICAgICAgICAgQ29sb3IuQkxBQ0ssIENvbG9yLldISVRFLCBFREdFX1RZUEVfTk9ORSwgQ29sb3IuQkxBQ0ssIG51bGwpOwotICAgICAgICAgICAgWUVMTE9XX09OX0JMQUNLID0gbmV3IENhcHRpb25TdHlsZSgKLSAgICAgICAgICAgICAgICAgICAgQ29sb3IuWUVMTE9XLCBDb2xvci5CTEFDSywgRURHRV9UWVBFX05PTkUsIENvbG9yLkJMQUNLLCBudWxsKTsKLSAgICAgICAgICAgIFlFTExPV19PTl9CTFVFID0gbmV3IENhcHRpb25TdHlsZSgKLSAgICAgICAgICAgICAgICAgICAgQ29sb3IuWUVMTE9XLCBDb2xvci5CTFVFLCBFREdFX1RZUEVfTk9ORSwgQ29sb3IuQkxBQ0ssIG51bGwpOworICAgICAgICAgICAgV0hJVEVfT05fQkxBQ0sgPSBuZXcgQ2FwdGlvblN0eWxlKENvbG9yLldISVRFLCBDb2xvci5CTEFDSywgRURHRV9UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgIENvbG9yLkJMQUNLLCBDb2xvci5UUkFOU1BBUkVOVCwgbnVsbCk7CisgICAgICAgICAgICBCTEFDS19PTl9XSElURSA9IG5ldyBDYXB0aW9uU3R5bGUoQ29sb3IuQkxBQ0ssIENvbG9yLldISVRFLCBFREdFX1RZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgQ29sb3IuQkxBQ0ssIENvbG9yLlRSQU5TUEFSRU5ULCBudWxsKTsKKyAgICAgICAgICAgIFlFTExPV19PTl9CTEFDSyA9IG5ldyBDYXB0aW9uU3R5bGUoQ29sb3IuWUVMTE9XLCBDb2xvci5CTEFDSywgRURHRV9UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgIENvbG9yLkJMQUNLLCBDb2xvci5UUkFOU1BBUkVOVCwgbnVsbCk7CisgICAgICAgICAgICBZRUxMT1dfT05fQkxVRSA9IG5ldyBDYXB0aW9uU3R5bGUoQ29sb3IuWUVMTE9XLCBDb2xvci5CTFVFLCBFREdFX1RZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgQ29sb3IuQkxBQ0ssIENvbG9yLlRSQU5TUEFSRU5ULCBudWxsKTsKIAogICAgICAgICAgICAgUFJFU0VUUyA9IG5ldyBDYXB0aW9uU3R5bGVbXSB7CiAgICAgICAgICAgICAgICAgICAgIFdISVRFX09OX0JMQUNLLCBCTEFDS19PTl9XSElURSwgWUVMTE9XX09OX0JMQUNLLCBZRUxMT1dfT05fQkxVRQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hbmltYXRpb24vQm91bmNlSW50ZXJwb2xhdG9yLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9Cb3VuY2VJbnRlcnBvbGF0b3IuamF2YQppbmRleCBmNzllNzMwLi5lY2Y5OWE3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9Cb3VuY2VJbnRlcnBvbGF0b3IuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2FuaW1hdGlvbi9Cb3VuY2VJbnRlcnBvbGF0b3IuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uOwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9CYXNlSW5wdXRDb25uZWN0aW9uLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0Jhc2VJbnB1dENvbm5lY3Rpb24uamF2YQppbmRleCBmNzMwY2Y3Li41NTUyOTUyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0Jhc2VJbnB1dENvbm5lY3Rpb24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0Jhc2VJbnB1dENvbm5lY3Rpb24uamF2YQpAQCAtNjAxLDcgKzYwMSwxMSBAQAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBiZWdpbkJhdGNoRWRpdCgpOwotICAgICAgICAKKyAgICAgICAgaWYgKCFjb21wb3NpbmcgJiYgIVRleHRVdGlscy5pc0VtcHR5KHRleHQpKSB7CisgICAgICAgICAgICAvLyBOb3RpZnkgdGhlIHRleHQgaXMgY29tbWl0dGVkIGJ5IHRoZSB1c2VyIHRvIElucHV0TWV0aG9kTWFuYWdlclNlcnZpY2UKKyAgICAgICAgICAgIG1JTU0ubm90aWZ5VGV4dENvbW1pdHRlZCgpOworICAgICAgICB9CisKICAgICAgICAgLy8gZGVsZXRlIGNvbXBvc2luZyB0ZXh0IHNldCBwcmV2aW91c2x5LgogICAgICAgICBpbnQgYSA9IGdldENvbXBvc2luZ1NwYW5TdGFydChjb250ZW50KTsKICAgICAgICAgaW50IGIgPSBnZXRDb21wb3NpbmdTcGFuRW5kKGNvbnRlbnQpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9FeHRyYWN0ZWRUZXh0UmVxdWVzdC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9FeHRyYWN0ZWRUZXh0UmVxdWVzdC5qYXZhCmluZGV4IGY2NThiODcuLmJmMGJlZjMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvRXh0cmFjdGVkVGV4dFJlcXVlc3QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0V4dHJhY3RlZFRleHRSZXF1ZXN0LmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogCiAvKioKICAqIERlc2NyaXB0aW9uIG9mIHdoYXQgYW4gaW5wdXQgbWV0aG9kIHdvdWxkIGxpa2UgZnJvbSBhbiBhcHBsaWNhdGlvbiB3aGVuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0QmluZGluZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dEJpbmRpbmcuamF2YQppbmRleCBmNDIwOWVmLi5iY2Q0NTllIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0QmluZGluZy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRCaW5kaW5nLmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiAKIC8qKgogICogSW5mb3JtYXRpb24gZ2l2ZW4gdG8gYW4ge0BsaW5rIElucHV0TWV0aG9kfSBhYm91dCBhIGNsaWVudCBjb25uZWN0aW5nCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZE1hbmFnZXIuamF2YQppbmRleCA1M2Y3Yzc5Li43MGM1M2QyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RNYW5hZ2VyLmphdmEKQEAgLTE4MDUsNiArMTgwNSwyMCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIE5vdGlmeSB0aGUgY3VycmVudCBJTUUgY29tbWl0cyB0ZXh0CisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBub3RpZnlUZXh0Q29tbWl0dGVkKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1IKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1TZXJ2aWNlLm5vdGlmeVRleHRDb21taXR0ZWQoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiSU1FIGRpZWQ6ICIgKyBtQ3VySWQsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIG1hcCBvZiBhbGwgc2hvcnRjdXQgaW5wdXQgbWV0aG9kIGluZm8gYW5kIHRoZWlyIHN1YnR5cGVzLgogICAgICAqLwogICAgIHB1YmxpYyBNYXA8SW5wdXRNZXRob2RJbmZvLCBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4+IGdldFNob3J0Y3V0SW5wdXRNZXRob2RzQW5kU3VidHlwZXMoKSB7CkBAIC0xODQwLDYgKzE4NTQsMjEgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGhlaWdodCBvZiB0aGUgaW5wdXQgbWV0aG9kIHdpbmRvdy4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0SW5wdXRNZXRob2RXaW5kb3dWaXNpYmxlSGVpZ2h0KCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1IKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRJbnB1dE1ldGhvZFdpbmRvd1Zpc2libGVIZWlnaHQoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiSU1FIGRpZWQ6ICIgKyBtQ3VySWQsIGUpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogRm9yY2Ugc3dpdGNoIHRvIHRoZSBsYXN0IHVzZWQgaW5wdXQgbWV0aG9kIGFuZCBzdWJ0eXBlLiBJZiB0aGUgbGFzdCBpbnB1dCBtZXRob2QgZGlkbid0IGhhdmUKICAgICAgKiBhbnkgc3VidHlwZXMsIHRoZSBmcmFtZXdvcmsgd2lsbCBzaW1wbHkgc3dpdGNoIHRvIHRoZSBsYXN0IGlucHV0IG1ldGhvZCB3aXRoIG5vIHN1YnR5cGUKICAgICAgKiBzcGVjaWZpZWQuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFN1YnR5cGUuamF2YQppbmRleCAyYWIzMDI0Li5lN2FkYTI3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlLmphdmEKQEAgLTQ3MiwxMiArNDcyLDEyIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIChzdWJ0eXBlLmhhc2hDb2RlKCkgPT0gaGFzaENvZGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gKHN1YnR5cGUuaGFzaENvZGUoKSA9PSBoYXNoQ29kZSgpKQotICAgICAgICAgICAgICAgICYmIChzdWJ0eXBlLmdldE5hbWVSZXNJZCgpID09IGdldE5hbWVSZXNJZCgpKQotICAgICAgICAgICAgICAgICYmIChzdWJ0eXBlLmdldE1vZGUoKS5lcXVhbHMoZ2V0TW9kZSgpKSkKLSAgICAgICAgICAgICAgICAmJiAoc3VidHlwZS5nZXRJY29uUmVzSWQoKSA9PSBnZXRJY29uUmVzSWQoKSkKICAgICAgICAgICAgICAgICAmJiAoc3VidHlwZS5nZXRMb2NhbGUoKS5lcXVhbHMoZ2V0TG9jYWxlKCkpKQorICAgICAgICAgICAgICAgICYmIChzdWJ0eXBlLmdldE1vZGUoKS5lcXVhbHMoZ2V0TW9kZSgpKSkKICAgICAgICAgICAgICAgICAmJiAoc3VidHlwZS5nZXRFeHRyYVZhbHVlKCkuZXF1YWxzKGdldEV4dHJhVmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgJiYgKHN1YnR5cGUuaXNBdXhpbGlhcnkoKSA9PSBpc0F1eGlsaWFyeSgpKQorICAgICAgICAgICAgICAgICYmIChzdWJ0eXBlLm92ZXJyaWRlc0ltcGxpY2l0bHlFbmFibGVkU3VidHlwZSgpCisgICAgICAgICAgICAgICAgICAgICAgICA9PSBvdmVycmlkZXNJbXBsaWNpdGx5RW5hYmxlZFN1YnR5cGUoKSkKICAgICAgICAgICAgICAgICAmJiAoc3VidHlwZS5pc0FzY2lpQ2FwYWJsZSgpID09IGlzQXNjaWlDYXBhYmxlKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9DYWNoZU1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9DYWNoZU1hbmFnZXIuamF2YQppbmRleCBiYmQzZjJiLi40NWU2ZWIzIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvQ2FjaGVNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L0NhY2hlTWFuYWdlci5qYXZhCkBAIC0xNiwxMyArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQud2Via2l0OwogCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuaHR0cC5IZWFkZXJzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIGltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L0RhdGVTb3J0ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9EYXRlU29ydGVyLmphdmEKaW5kZXggODJjMTNhZS4uZmVkZTI0NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L0RhdGVTb3J0ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvRGF0ZVNvcnRlci5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiAKIGltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKIAogaW1wb3J0IGxpYmNvcmUuaWN1LkxvY2FsZURhdGE7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvUGx1Z2luLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvUGx1Z2luLmphdmEKaW5kZXggNTI5ODIwYi4uMDcyZTAyYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1BsdWdpbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9QbHVnaW4uamF2YQpAQCAtMjEsNyArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC53ZWJraXQuV2ViVmlldzsKIAogLyoqCiAgKiBSZXByZXNlbnRzIGEgcGx1Z2luIChKYXZhIGVxdWl2YWxlbnQgb2YgdGhlIFBsdWdpblBhY2thZ2VBbmRyb2lkCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViUmVzb3VyY2VSZXNwb25zZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlJlc291cmNlUmVzcG9uc2UuamF2YQppbmRleCBiNzE3MWVlLi5mMjFlMmI0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViUmVzb3VyY2VSZXNwb25zZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJSZXNvdXJjZVJlc3BvbnNlLmphdmEKQEAgLTE2LDggKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLndlYmtpdDsKIAotaW1wb3J0IGFuZHJvaWQubmV0Lmh0dHAuSGVhZGVyczsKLQogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3LmphdmEKaW5kZXggNWJjMzlmMTUuLjdlZTMzYzEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXcuamF2YQpAQCAtMjgsNyArMjgsNiBAQAogaW1wb3J0IGFuZHJvaWQubmV0Lmh0dHAuU3NsQ2VydGlmaWNhdGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLkNhbmNlbGxhdGlvblNpZ25hbDsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5TdHJpY3RNb2RlOwpAQCAtMjU1LDcgKzI1NCw3IEBACiAgICAgLy8gVGhyb3dpbmcgYW4gZXhjZXB0aW9uIGZvciBpbmNvcnJlY3QgdGhyZWFkIHVzYWdlIGlmIHRoZQogICAgIC8vIGJ1aWxkIHRhcmdldCBpcyBKQiBNUjIgb3IgbmV3ZXIuIERlZmF1bHRzIHRvIGZhbHNlLCBhbmQgaXMKICAgICAvLyBzZXQgaW4gdGhlIFdlYlZpZXcgY29uc3RydWN0b3IuCi0gICAgcHJpdmF0ZSBzdGF0aWMgQm9vbGVhbiBzRW5mb3JjZVRocmVhZENoZWNraW5nID0gZmFsc2U7CisgICAgcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBzRW5mb3JjZVRocmVhZENoZWNraW5nID0gZmFsc2U7CiAKICAgICAvKioKICAgICAgKiAgVHJhbnNwb3J0YXRpb24gb2JqZWN0IGZvciByZXR1cm5pbmcgV2ViVmlldyBhY3Jvc3MgdGhyZWFkIGJvdW5kYXJpZXMuCkBAIC00NDksMTAgKzQ0OCwxMiBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGNvbnRleHQgYSBDb250ZXh0IG9iamVjdCB1c2VkIHRvIGFjY2VzcyBhcHBsaWNhdGlvbiBhc3NldHMKICAgICAgKiBAcGFyYW0gYXR0cnMgYW4gQXR0cmlidXRlU2V0IHBhc3NlZCB0byBvdXIgcGFyZW50Ci0gICAgICogQHBhcmFtIGRlZlN0eWxlIHRoZSBkZWZhdWx0IHN0eWxlIHJlc291cmNlIElECisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBhbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCiAgICAgICovCi0gICAgcHVibGljIFdlYlZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSwgZmFsc2UpOworICAgIHB1YmxpYyBXZWJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC00NjAsNyArNDYxLDI2IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gY29udGV4dCBhIENvbnRleHQgb2JqZWN0IHVzZWQgdG8gYWNjZXNzIGFwcGxpY2F0aW9uIGFzc2V0cwogICAgICAqIEBwYXJhbSBhdHRycyBhbiBBdHRyaWJ1dGVTZXQgcGFzc2VkIHRvIG91ciBwYXJlbnQKLSAgICAgKiBAcGFyYW0gZGVmU3R5bGUgdGhlIGRlZmF1bHQgc3R5bGUgcmVzb3VyY2UgSUQKKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVBdHRyIGFuIGF0dHJpYnV0ZSBpbiB0aGUgY3VycmVudCB0aGVtZSB0aGF0IGNvbnRhaW5zIGEKKyAgICAgKiAgICAgICAgcmVmZXJlbmNlIHRvIGEgc3R5bGUgcmVzb3VyY2UgdGhhdCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgKiAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVSZXMgYSByZXNvdXJjZSBpZGVudGlmaWVyIG9mIGEgc3R5bGUgcmVzb3VyY2UgdGhhdAorICAgICAqICAgICAgICBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHZpZXcsIHVzZWQgb25seSBpZgorICAgICAqICAgICAgICBkZWZTdHlsZUF0dHIgaXMgMCBvciBjYW4gbm90IGJlIGZvdW5kIGluIHRoZSB0aGVtZS4gQ2FuIGJlIDAKKyAgICAgKiAgICAgICAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgorICAgICAqLworICAgIHB1YmxpYyBXZWJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcywgbnVsbCwgZmFsc2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBuZXcgV2ViVmlldyB3aXRoIGxheW91dCBwYXJhbWV0ZXJzIGFuZCBhIGRlZmF1bHQgc3R5bGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dCBhIENvbnRleHQgb2JqZWN0IHVzZWQgdG8gYWNjZXNzIGFwcGxpY2F0aW9uIGFzc2V0cworICAgICAqIEBwYXJhbSBhdHRycyBhbiBBdHRyaWJ1dGVTZXQgcGFzc2VkIHRvIG91ciBwYXJlbnQKKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVBdHRyIGFuIGF0dHJpYnV0ZSBpbiB0aGUgY3VycmVudCB0aGVtZSB0aGF0IGNvbnRhaW5zIGEKKyAgICAgKiAgICAgICAgcmVmZXJlbmNlIHRvIGEgc3R5bGUgcmVzb3VyY2UgdGhhdCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgKiAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KICAgICAgKiBAcGFyYW0gcHJpdmF0ZUJyb3dzaW5nIHdoZXRoZXIgdGhpcyBXZWJWaWV3IHdpbGwgYmUgaW5pdGlhbGl6ZWQgaW4KICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGUgbW9kZQogICAgICAqCkBAIC00NzAsOSArNDkwLDkgQEAKICAgICAgKiBhbmQge0BsaW5rIFdlYlN0b3JhZ2V9IGZvciBmaW5lLWdyYWluZWQgY29udHJvbCBvZiBwcml2YWN5IGRhdGEuCiAgICAgICovCiAgICAgQERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgV2ViVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlLAorICAgIHB1YmxpYyBXZWJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLAogICAgICAgICAgICAgYm9vbGVhbiBwcml2YXRlQnJvd3NpbmcpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGUsIG51bGwsIHByaXZhdGVCcm93c2luZyk7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCwgbnVsbCwgcHJpdmF0ZUJyb3dzaW5nKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQ4Myw3ICs1MDMsOSBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGNvbnRleHQgYSBDb250ZXh0IG9iamVjdCB1c2VkIHRvIGFjY2VzcyBhcHBsaWNhdGlvbiBhc3NldHMKICAgICAgKiBAcGFyYW0gYXR0cnMgYW4gQXR0cmlidXRlU2V0IHBhc3NlZCB0byBvdXIgcGFyZW50Ci0gICAgICogQHBhcmFtIGRlZlN0eWxlIHRoZSBkZWZhdWx0IHN0eWxlIHJlc291cmNlIElECisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBhbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCiAgICAgICogQHBhcmFtIGphdmFTY3JpcHRJbnRlcmZhY2VzIGEgTWFwIG9mIGludGVyZmFjZSBuYW1lcywgYXMga2V5cywgYW5kCiAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhvc2UgaW50ZXJmYWNlcywgYXMKICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzCkBAIC00OTIsMTAgKzUxNCwxOCBAQAogICAgICAqIEBoaWRlIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IGR1bXByZW5kZXJ0cmVlLCBhcyBpdCByZXF1aXJlcyB0aGUgamF2YVNjcmlwdCBpbnRlcmZhY2VzIHRvCiAgICAgICogICAgICAgYmUgYWRkZWQgc3luY2hyb25vdXNseSwgYmVmb3JlIGEgc3Vic2VxdWVudCBsb2FkVXJsIGNhbGwgdGFrZXMgZWZmZWN0LgogICAgICAqLwotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpICAvLyBmb3Igc3VwZXIoKSBjYWxsIGludG8gZGVwcmVjYXRlZCBiYXNlIGNsYXNzIGNvbnN0cnVjdG9yLgotICAgIHByb3RlY3RlZCBXZWJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUsCisgICAgcHJvdGVjdGVkIFdlYlZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsCiAgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IGphdmFTY3JpcHRJbnRlcmZhY2VzLCBib29sZWFuIHByaXZhdGVCcm93c2luZykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDAsIGphdmFTY3JpcHRJbnRlcmZhY2VzLCBwcml2YXRlQnJvd3NpbmcpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikgIC8vIGZvciBzdXBlcigpIGNhbGwgaW50byBkZXByZWNhdGVkIGJhc2UgY2xhc3MgY29uc3RydWN0b3IuCisgICAgcHJvdGVjdGVkIFdlYlZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcywKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gamF2YVNjcmlwdEludGVyZmFjZXMsIGJvb2xlYW4gcHJpdmF0ZUJyb3dzaW5nKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBjb250ZXh0IGFyZ3VtZW50Iik7CiAgICAgICAgIH0KQEAgLTY4Niw2ICs3MTYsMTUgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBVc2VkIG9ubHkgYnkgaW50ZXJuYWwgdGVzdHMgdG8gZnJlZSB1cCBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmcmVlTWVtb3J5Rm9yVGVzdHMoKSB7CisgICAgICAgIGdldEZhY3RvcnkoKS5nZXRTdGF0aWNzKCkuZnJlZU1lbW9yeUZvclRlc3RzKCk7CisgICAgfQorCisgICAgLyoqCiAgICAgICogSW5mb3JtcyBXZWJWaWV3IG9mIHRoZSBuZXR3b3JrIHN0YXRlLiBUaGlzIGlzIHVzZWQgdG8gc2V0CiAgICAgICogdGhlIEphdmFTY3JpcHQgcHJvcGVydHkgd2luZG93Lm5hdmlnYXRvci5pc09ubGluZSBhbmQKICAgICAgKiBnZW5lcmF0ZXMgdGhlIG9ubGluZS9vZmZsaW5lIGV2ZW50IGFzIHNwZWNpZmllZCBpbiBIVE1MNSwgc2VjLiA1LjcuNwpAQCAtNzgxLDcgKzgyMCwxNSBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGxvYWRVcmwoU3RyaW5nIHVybCwgTWFwPFN0cmluZywgU3RyaW5nPiBhZGRpdGlvbmFsSHR0cEhlYWRlcnMpIHsKICAgICAgICAgY2hlY2tUaHJlYWQoKTsKLSAgICAgICAgaWYgKERlYnVnRmxhZ3MuVFJBQ0VfQVBJKSBMb2cuZChMT0dUQUcsICJsb2FkVXJsKGV4dHJhIGhlYWRlcnMpPSIgKyB1cmwpOworICAgICAgICBpZiAoRGVidWdGbGFncy5UUkFDRV9BUEkpIHsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgaGVhZGVycyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgICAgICBpZiAoYWRkaXRpb25hbEh0dHBIZWFkZXJzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gZW50cnkgOiBhZGRpdGlvbmFsSHR0cEhlYWRlcnMuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLmFwcGVuZChlbnRyeS5nZXRLZXkoKSArICI6IiArIGVudHJ5LmdldFZhbHVlKCkgKyAiXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBMb2cuZChMT0dUQUcsICJsb2FkVXJsKGV4dHJhIGhlYWRlcnMpPSIgKyB1cmwgKyAiXG4iICsgaGVhZGVycyk7CisgICAgICAgIH0KICAgICAgICAgbVByb3ZpZGVyLmxvYWRVcmwodXJsLCBhZGRpdGlvbmFsSHR0cEhlYWRlcnMpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdGYWN0b3J5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViVmlld0ZhY3RvcnkuamF2YQppbmRleCBiOTEzMWJmLi4yNWJjZDQ0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViVmlld0ZhY3RvcnkuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViVmlld0ZhY3RvcnkuamF2YQpAQCAtMTYsOSArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQud2Via2l0OwogCi1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKIGltcG9ydCBhbmRyb2lkLm9zLlN0cmljdE1vZGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BbmRyb2lkUnVudGltZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViVmlld0ZhY3RvcnlQcm92aWRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdGYWN0b3J5UHJvdmlkZXIuamF2YQppbmRleCA5ZDlkODgyLi5lMzkxYWFmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViVmlld0ZhY3RvcnlQcm92aWRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3RmFjdG9yeVByb3ZpZGVyLmphdmEKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgICAgIFN0cmluZyBnZXREZWZhdWx0VXNlckFnZW50KENvbnRleHQgY29udGV4dCk7CiAKICAgICAgICAgLyoqCisgICAgICAgICAqIFVzZWQgZm9yIHRlc3RzIG9ubHkuCisgICAgICAgICAqLworICAgICAgICAgdm9pZCBmcmVlTWVtb3J5Rm9yVGVzdHMoKTsKKworICAgICAgICAvKioKICAgICAgICAgICogSW1wbGVtZW50cyB0aGUgQVBJIG1ldGhvZDoKICAgICAgICAgICoge0BsaW5rIGFuZHJvaWQud2Via2l0LldlYlZpZXcjc2V0V2ViQ29udGVudHNEZWJ1Z2dpbmdFbmFibGVkKGJvb2xlYW4pIH0KICAgICAgICAgICovCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzTGlzdFZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BYnNMaXN0Vmlldy5qYXZhCmluZGV4IDA5MmY0NzQuLjQxM2Q2Y2ZiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzTGlzdFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzTGlzdFZpZXcuamF2YQpAQCAtNTUsNiArNTUsNyBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3RGVidWc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1BhcmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1Jvb3RJbXBsOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3VHJlZU9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlcjsKQEAgLTU4MSw3ICs1ODIsMTMgQEAKICAgICAvKioKICAgICAgKiBIZWxwZXIgb2JqZWN0IHRoYXQgcmVuZGVycyBhbmQgY29udHJvbHMgdGhlIGZhc3Qgc2Nyb2xsIHRodW1iLgogICAgICAqLwotICAgIHByaXZhdGUgRmFzdFNjcm9sbGVyIG1GYXN0U2Nyb2xsZXI7CisgICAgcHJpdmF0ZSBGYXN0U2Nyb2xsZXIgbUZhc3RTY3JvbGw7CisKKyAgICAvKioKKyAgICAgKiBUZW1wb3JhcnkgaG9sZGVyIGZvciBmYXN0IHNjcm9sbGVyIHN0eWxlIHVudGlsIGEgRmFzdFNjcm9sbGVyIG9iamVjdAorICAgICAqIGlzIGNyZWF0ZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbUZhc3RTY3JvbGxTdHlsZTsKIAogICAgIHByaXZhdGUgYm9vbGVhbiBtR2xvYmFsTGF5b3V0TGlzdGVuZXJBZGRlZEZpbHRlcjsKIApAQCAtNzczLDE0ICs3ODAsMTggQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmFic0xpc3RWaWV3U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBBYnNMaXN0VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEFic0xpc3RWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEFic0xpc3RWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBpbml0QWJzTGlzdFZpZXcoKTsKIAogICAgICAgICBtT3duZXJUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BYnNMaXN0VmlldywgZGVmU3R5bGUsIDApOworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkFic0xpc3RWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBEcmF3YWJsZSBkID0gYS5nZXREcmF3YWJsZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BYnNMaXN0Vmlld19saXN0U2VsZWN0b3IpOwogICAgICAgICBpZiAoZCAhPSBudWxsKSB7CkBAIC04MDksNiArODIwLDkgQEAKICAgICAgICAgYm9vbGVhbiBlbmFibGVGYXN0U2Nyb2xsID0gYS5nZXRCb29sZWFuKFIuc3R5bGVhYmxlLkFic0xpc3RWaWV3X2Zhc3RTY3JvbGxFbmFibGVkLCBmYWxzZSk7CiAgICAgICAgIHNldEZhc3RTY3JvbGxFbmFibGVkKGVuYWJsZUZhc3RTY3JvbGwpOwogCisgICAgICAgIGludCBmYXN0U2Nyb2xsU3R5bGUgPSBhLmdldFJlc291cmNlSWQoUi5zdHlsZWFibGUuQWJzTGlzdFZpZXdfZmFzdFNjcm9sbFN0eWxlLCAwKTsKKyAgICAgICAgc2V0RmFzdFNjcm9sbFN0eWxlKGZhc3RTY3JvbGxTdHlsZSk7CisKICAgICAgICAgYm9vbGVhbiBzbW9vdGhTY3JvbGxiYXIgPSBhLmdldEJvb2xlYW4oUi5zdHlsZWFibGUuQWJzTGlzdFZpZXdfc21vb3RoU2Nyb2xsYmFyLCB0cnVlKTsKICAgICAgICAgc2V0U21vb3RoU2Nyb2xsYmFyRW5hYmxlZChzbW9vdGhTY3JvbGxiYXIpOwogCkBAIC0xMjM4LDE3ICsxMjUyLDMxIEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNldEZhc3RTY3JvbGxlckVuYWJsZWRVaVRocmVhZChib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICAgaWYgKG1GYXN0U2Nyb2xsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbUZhc3RTY3JvbGxlci5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgICAgICBpZiAobUZhc3RTY3JvbGwgIT0gbnVsbCkgeworICAgICAgICAgICAgbUZhc3RTY3JvbGwuc2V0RW5hYmxlZChlbmFibGVkKTsKICAgICAgICAgfSBlbHNlIGlmIChlbmFibGVkKSB7Ci0gICAgICAgICAgICBtRmFzdFNjcm9sbGVyID0gbmV3IEZhc3RTY3JvbGxlcih0aGlzKTsKLSAgICAgICAgICAgIG1GYXN0U2Nyb2xsZXIuc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgIG1GYXN0U2Nyb2xsID0gbmV3IEZhc3RTY3JvbGxlcih0aGlzLCBtRmFzdFNjcm9sbFN0eWxlKTsKKyAgICAgICAgICAgIG1GYXN0U2Nyb2xsLnNldEVuYWJsZWQodHJ1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICByZXNvbHZlUGFkZGluZygpOwogCi0gICAgICAgIGlmIChtRmFzdFNjcm9sbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1GYXN0U2Nyb2xsZXIudXBkYXRlTGF5b3V0KCk7CisgICAgICAgIGlmIChtRmFzdFNjcm9sbCAhPSBudWxsKSB7CisgICAgICAgICAgICBtRmFzdFNjcm9sbC51cGRhdGVMYXlvdXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB0aGUgc3R5bGUgb2YgdGhlIGZhc3Qgc2Nyb2xsZXIgZGVjb3JhdGlvbnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3R5bGVSZXNJZCBzdHlsZSByZXNvdXJjZSBjb250YWluaW5nIGZhc3Qgc2Nyb2xsZXIgcHJvcGVydGllcworICAgICAqIEBzZWUgYW5kcm9pZC5SLnN0eWxlYWJsZSNGYXN0U2Nyb2xsCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RmFzdFNjcm9sbFN0eWxlKGludCBzdHlsZVJlc0lkKSB7CisgICAgICAgIGlmIChtRmFzdFNjcm9sbCA9PSBudWxsKSB7CisgICAgICAgICAgICBtRmFzdFNjcm9sbFN0eWxlID0gc3R5bGVSZXNJZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1GYXN0U2Nyb2xsLnNldFN0eWxlKHN0eWxlUmVzSWQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjg4LDggKzEzMTYsOCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzZXRGYXN0U2Nyb2xsZXJBbHdheXNWaXNpYmxlVWlUaHJlYWQoYm9vbGVhbiBhbHdheXNTaG93KSB7Ci0gICAgICAgIGlmIChtRmFzdFNjcm9sbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1GYXN0U2Nyb2xsZXIuc2V0QWx3YXlzU2hvdyhhbHdheXNTaG93KTsKKyAgICAgICAgaWYgKG1GYXN0U2Nyb2xsICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1GYXN0U2Nyb2xsLnNldEFsd2F5c1Nob3coYWx3YXlzU2hvdyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEzMDcsMTcgKzEzMzUsMTcgQEAKICAgICAgKiBAc2VlICNzZXRGYXN0U2Nyb2xsQWx3YXlzVmlzaWJsZShib29sZWFuKQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzRmFzdFNjcm9sbEFsd2F5c1Zpc2libGUoKSB7Ci0gICAgICAgIGlmIChtRmFzdFNjcm9sbGVyID09IG51bGwpIHsKKyAgICAgICAgaWYgKG1GYXN0U2Nyb2xsID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBtRmFzdFNjcm9sbEVuYWJsZWQgJiYgbUZhc3RTY3JvbGxBbHdheXNWaXNpYmxlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG1GYXN0U2Nyb2xsZXIuaXNFbmFibGVkKCkgJiYgbUZhc3RTY3JvbGxlci5pc0Fsd2F5c1Nob3dFbmFibGVkKCk7CisgICAgICAgICAgICByZXR1cm4gbUZhc3RTY3JvbGwuaXNFbmFibGVkKCkgJiYgbUZhc3RTY3JvbGwuaXNBbHdheXNTaG93RW5hYmxlZCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBnZXRWZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgewotICAgICAgICBpZiAobUZhc3RTY3JvbGxlciAhPSBudWxsICYmIG1GYXN0U2Nyb2xsZXIuaXNFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChzdXBlci5nZXRWZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCksIG1GYXN0U2Nyb2xsZXIuZ2V0V2lkdGgoKSk7CisgICAgICAgIGlmIChtRmFzdFNjcm9sbCAhPSBudWxsICYmIG1GYXN0U2Nyb2xsLmlzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoc3VwZXIuZ2V0VmVydGljYWxTY3JvbGxiYXJXaWR0aCgpLCBtRmFzdFNjcm9sbC5nZXRXaWR0aCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3VwZXIuZ2V0VmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwogICAgIH0KQEAgLTEzMzAsMjYgKzEzNTgsMjYgQEAKICAgICAgKi8KICAgICBAVmlld0RlYnVnLkV4cG9ydGVkUHJvcGVydHkKICAgICBwdWJsaWMgYm9vbGVhbiBpc0Zhc3RTY3JvbGxFbmFibGVkKCkgewotICAgICAgICBpZiAobUZhc3RTY3JvbGxlciA9PSBudWxsKSB7CisgICAgICAgIGlmIChtRmFzdFNjcm9sbCA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gbUZhc3RTY3JvbGxFbmFibGVkOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG1GYXN0U2Nyb2xsZXIuaXNFbmFibGVkKCk7CisgICAgICAgICAgICByZXR1cm4gbUZhc3RTY3JvbGwuaXNFbmFibGVkKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRWZXJ0aWNhbFNjcm9sbGJhclBvc2l0aW9uKGludCBwb3NpdGlvbikgewogICAgICAgICBzdXBlci5zZXRWZXJ0aWNhbFNjcm9sbGJhclBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICAgICAgaWYgKG1GYXN0U2Nyb2xsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbUZhc3RTY3JvbGxlci5zZXRTY3JvbGxiYXJQb3NpdGlvbihwb3NpdGlvbik7CisgICAgICAgIGlmIChtRmFzdFNjcm9sbCAhPSBudWxsKSB7CisgICAgICAgICAgICBtRmFzdFNjcm9sbC5zZXRTY3JvbGxiYXJQb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRTY3JvbGxCYXJTdHlsZShpbnQgc3R5bGUpIHsKICAgICAgICAgc3VwZXIuc2V0U2Nyb2xsQmFyU3R5bGUoc3R5bGUpOwotICAgICAgICBpZiAobUZhc3RTY3JvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRmFzdFNjcm9sbGVyLnNldFNjcm9sbEJhclN0eWxlKHN0eWxlKTsKKyAgICAgICAgaWYgKG1GYXN0U2Nyb2xsICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1GYXN0U2Nyb2xsLnNldFNjcm9sbEJhclN0eWxlKHN0eWxlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQxMCw4ICsxNDM4LDggQEAKICAgICAgKiBOb3RpZnkgb3VyIHNjcm9sbCBsaXN0ZW5lciAoaWYgdGhlcmUgaXMgb25lKSBvZiBhIGNoYW5nZSBpbiBzY3JvbGwgc3RhdGUKICAgICAgKi8KICAgICB2b2lkIGludm9rZU9uSXRlbVNjcm9sbExpc3RlbmVyKCkgewotICAgICAgICBpZiAobUZhc3RTY3JvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRmFzdFNjcm9sbGVyLm9uU2Nyb2xsKG1GaXJzdFBvc2l0aW9uLCBnZXRDaGlsZENvdW50KCksIG1JdGVtQ291bnQpOworICAgICAgICBpZiAobUZhc3RTY3JvbGwgIT0gbnVsbCkgeworICAgICAgICAgICAgbUZhc3RTY3JvbGwub25TY3JvbGwobUZpcnN0UG9zaXRpb24sIGdldENoaWxkQ291bnQoKSwgbUl0ZW1Db3VudCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1PblNjcm9sbExpc3RlbmVyICE9IG51bGwpIHsKICAgICAgICAgICAgIG1PblNjcm9sbExpc3RlbmVyLm9uU2Nyb2xsKHRoaXMsIG1GaXJzdFBvc2l0aW9uLCBnZXRDaGlsZENvdW50KCksIG1JdGVtQ291bnQpOwpAQCAtMjA4NCw4ICsyMTEyLDggQEAKICAgICAgICAgICAgIG1SZWN5Y2xlci5tYXJrQ2hpbGRyZW5EaXJ0eSgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1GYXN0U2Nyb2xsZXIgIT0gbnVsbCAmJiAobUl0ZW1Db3VudCAhPSBtT2xkSXRlbUNvdW50IHx8IG1EYXRhQ2hhbmdlZCkpIHsKLSAgICAgICAgICAgIG1GYXN0U2Nyb2xsZXIub25JdGVtQ291bnRDaGFuZ2VkKG1JdGVtQ291bnQpOworICAgICAgICBpZiAobUZhc3RTY3JvbGwgIT0gbnVsbCAmJiAobUl0ZW1Db3VudCAhPSBtT2xkSXRlbUNvdW50IHx8IG1EYXRhQ2hhbmdlZCkpIHsKKyAgICAgICAgICAgIG1GYXN0U2Nyb2xsLm9uSXRlbUNvdW50Q2hhbmdlZChtSXRlbUNvdW50KTsKICAgICAgICAgfQogCiAgICAgICAgIGxheW91dENoaWxkcmVuKCk7CkBAIC0yMTIwLDYgKzIxNDgsMzQgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBsYXlvdXRDaGlsZHJlbigpIHsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHRoZSBkaXJlY3QgY2hpbGQgdGhhdCBjb250YWlucyBhY2Nlc3NpYmlsaXR5IGZvY3VzLCBvciBudWxsIGlmIG5vCisgICAgICogICAgICAgICBjaGlsZCBjb250YWlucyBhY2Nlc3NpYmlsaXR5IGZvY3VzCisgICAgICovCisgICAgVmlldyBnZXRBY2Nlc3NpYmlsaXR5Rm9jdXNlZENoaWxkKCkgeworICAgICAgICBmaW5hbCBWaWV3Um9vdEltcGwgdmlld1Jvb3RJbXBsID0gZ2V0Vmlld1Jvb3RJbXBsKCk7CisgICAgICAgIGlmICh2aWV3Um9vdEltcGwgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBWaWV3IGZvY3VzZWRWaWV3ID0gdmlld1Jvb3RJbXBsLmdldEFjY2Vzc2liaWxpdHlGb2N1c2VkSG9zdCgpOworICAgICAgICBpZiAoZm9jdXNlZFZpZXcgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBWaWV3UGFyZW50IHZpZXdQYXJlbnQgPSBmb2N1c2VkVmlldy5nZXRQYXJlbnQoKTsKKyAgICAgICAgd2hpbGUgKCh2aWV3UGFyZW50IGluc3RhbmNlb2YgVmlldykgJiYgKHZpZXdQYXJlbnQgIT0gdGhpcykpIHsKKyAgICAgICAgICAgIGZvY3VzZWRWaWV3ID0gKFZpZXcpIHZpZXdQYXJlbnQ7CisgICAgICAgICAgICB2aWV3UGFyZW50ID0gdmlld1BhcmVudC5nZXRQYXJlbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKHZpZXdQYXJlbnQgaW5zdGFuY2VvZiBWaWV3KSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZm9jdXNlZFZpZXc7CisgICAgfQorCiAgICAgdm9pZCB1cGRhdGVTY3JvbGxJbmRpY2F0b3JzKCkgewogICAgICAgICBpZiAobVNjcm9sbFVwICE9IG51bGwpIHsKICAgICAgICAgICAgIGJvb2xlYW4gY2FuU2Nyb2xsVXA7CkBAIC0yNDk5LDggKzI1NTUsOCBAQAogICAgICAgICAgICAgcmVtZW1iZXJTeW5jU3RhdGUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtRmFzdFNjcm9sbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1GYXN0U2Nyb2xsZXIub25TaXplQ2hhbmdlZCh3LCBoLCBvbGR3LCBvbGRoKTsKKyAgICAgICAgaWYgKG1GYXN0U2Nyb2xsICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1GYXN0U2Nyb2xsLm9uU2l6ZUNoYW5nZWQodywgaCwgb2xkdywgb2xkaCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI4MjksOCArMjg4NSw4IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25SdGxQcm9wZXJ0aWVzQ2hhbmdlZChpbnQgbGF5b3V0RGlyZWN0aW9uKSB7CiAgICAgICAgIHN1cGVyLm9uUnRsUHJvcGVydGllc0NoYW5nZWQobGF5b3V0RGlyZWN0aW9uKTsKLSAgICAgICAgaWYgKG1GYXN0U2Nyb2xsZXIgIT0gbnVsbCkgewotICAgICAgICAgICBtRmFzdFNjcm9sbGVyLnNldFNjcm9sbGJhclBvc2l0aW9uKGdldFZlcnRpY2FsU2Nyb2xsYmFyUG9zaXRpb24oKSk7CisgICAgICAgIGlmIChtRmFzdFNjcm9sbCAhPSBudWxsKSB7CisgICAgICAgICAgIG1GYXN0U2Nyb2xsLnNldFNjcm9sbGJhclBvc2l0aW9uKGdldFZlcnRpY2FsU2Nyb2xsYmFyUG9zaXRpb24oKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM0MDMsOCArMzQ1OSw4IEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobUZhc3RTY3JvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBib29sZWFuIGludGVyY2VwdGVkID0gbUZhc3RTY3JvbGxlci5vblRvdWNoRXZlbnQoZXYpOworICAgICAgICBpZiAobUZhc3RTY3JvbGwgIT0gbnVsbCkgeworICAgICAgICAgICAgYm9vbGVhbiBpbnRlcmNlcHRlZCA9IG1GYXN0U2Nyb2xsLm9uVG91Y2hFdmVudChldik7CiAgICAgICAgICAgICBpZiAoaW50ZXJjZXB0ZWQpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTM4OTMsNyArMzk0OSw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBvbkludGVyY2VwdEhvdmVyRXZlbnQoTW90aW9uRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgaWYgKG1GYXN0U2Nyb2xsZXIgIT0gbnVsbCAmJiBtRmFzdFNjcm9sbGVyLm9uSW50ZXJjZXB0SG92ZXJFdmVudChldmVudCkpIHsKKyAgICAgICAgaWYgKG1GYXN0U2Nyb2xsICE9IG51bGwgJiYgbUZhc3RTY3JvbGwub25JbnRlcmNlcHRIb3ZlckV2ZW50KGV2ZW50KSkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtMzkxNyw3ICszOTczLDcgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtRmFzdFNjcm9sbGVyICE9IG51bGwgJiYgbUZhc3RTY3JvbGxlci5vbkludGVyY2VwdFRvdWNoRXZlbnQoZXYpKSB7CisgICAgICAgIGlmIChtRmFzdFNjcm9sbCAhPSBudWxsICYmIG1GYXN0U2Nyb2xsLm9uSW50ZXJjZXB0VG91Y2hFdmVudChldikpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTYyNzgsMTYgKzYzMzQsMTYgQEAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hhbmdlZCgpIHsKICAgICAgICAgICAgIHN1cGVyLm9uQ2hhbmdlZCgpOwotICAgICAgICAgICAgaWYgKG1GYXN0U2Nyb2xsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1GYXN0U2Nyb2xsZXIub25TZWN0aW9uc0NoYW5nZWQoKTsKKyAgICAgICAgICAgIGlmIChtRmFzdFNjcm9sbCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUZhc3RTY3JvbGwub25TZWN0aW9uc0NoYW5nZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBvbkludmFsaWRhdGVkKCkgewogICAgICAgICAgICAgc3VwZXIub25JbnZhbGlkYXRlZCgpOwotICAgICAgICAgICAgaWYgKG1GYXN0U2Nyb2xsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1GYXN0U2Nyb2xsZXIub25TZWN0aW9uc0NoYW5nZWQoKTsKKyAgICAgICAgICAgIGlmIChtRmFzdFNjcm9sbCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUZhc3RTY3JvbGwub25TZWN0aW9uc0NoYW5nZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BYnNTZWVrQmFyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzU2Vla0Jhci5qYXZhCmluZGV4IDc2NzQ4MzcuLjk0MWNkZDAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BYnNTZWVrQmFyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Fic1NlZWtCYXIuamF2YQpAQCAtNjUsMTEgKzY1LDE1IEBACiAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKICAgICB9CiAKLSAgICBwdWJsaWMgQWJzU2Vla0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEFic1NlZWtCYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlNlZWtCYXIsIGRlZlN0eWxlLCAwKTsKKyAgICBwdWJsaWMgQWJzU2Vla0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlNlZWtCYXIsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBEcmF3YWJsZSB0aHVtYiA9IGEuZ2V0RHJhd2FibGUoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU2Vla0Jhcl90aHVtYik7CiAgICAgICAgIHNldFRodW1iKHRodW1iKTsgLy8gd2lsbCBndWVzcyBtVGh1bWJPZmZzZXQgaWYgdGh1bWIgIT0gbnVsbC4uLgogICAgICAgICAvLyAuLi5idXQgYWxsb3cgbGF5b3V0IHRvIG92ZXJyaWRlIHRoaXMKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BYnNTcGlubmVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzU3Bpbm5lci5qYXZhCmluZGV4IGYyNjUyN2YuLjZhNGFkNzUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BYnNTcGlubmVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Fic1NwaW5uZXIuamF2YQpAQCAtNjQsMTIgKzY0LDE2IEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KIAotICAgIHB1YmxpYyBBYnNTcGlubmVyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgQWJzU3Bpbm5lcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBBYnNTcGlubmVyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBpbml0QWJzU3Bpbm5lcigpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BYnNTcGlubmVyLCBkZWZTdHlsZSwgMCk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQWJzU3Bpbm5lciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgQ2hhclNlcXVlbmNlW10gZW50cmllcyA9IGEuZ2V0VGV4dEFycmF5KFIuc3R5bGVhYmxlLkFic1NwaW5uZXJfZW50cmllcyk7CiAgICAgICAgIGlmIChlbnRyaWVzICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BYnNvbHV0ZUxheW91dC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Fic29sdXRlTGF5b3V0LmphdmEKaW5kZXggN2RmNmFhYi4uNGNlMGQ1ZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Fic29sdXRlTGF5b3V0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Fic29sdXRlTGF5b3V0LmphdmEKQEAgLTQwLDE2ICs0MCwxOSBAQAogQFJlbW90ZVZpZXcKIHB1YmxpYyBjbGFzcyBBYnNvbHV0ZUxheW91dCBleHRlbmRzIFZpZXdHcm91cCB7CiAgICAgcHVibGljIEFic29sdXRlTGF5b3V0KENvbnRleHQgY29udGV4dCkgewotICAgICAgICBzdXBlcihjb250ZXh0KTsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBudWxsKTsKICAgICB9CiAKICAgICBwdWJsaWMgQWJzb2x1dGVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CiAKLSAgICBwdWJsaWMgQWJzb2x1dGVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsCi0gICAgICAgICAgICBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgQWJzb2x1dGVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQWJzb2x1dGVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWN0aXZpdHlDaG9vc2VyVmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FjdGl2aXR5Q2hvb3NlclZpZXcuamF2YQppbmRleCA4NjEyOTY0Li5mOWFmMmY5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWN0aXZpdHlDaG9vc2VyVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BY3Rpdml0eUNob29zZXJWaWV3LmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQWN0aXZpdHlOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKQEAgLTMxLDcgKzMwLDYgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5BY3Rpb25Qcm92aWRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdUcmVlT2JzZXJ2ZXI7CkBAIC0yMDQsMTMgKzIwMiwzMiBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIGFwcGxpY2F0aW9uIGVudmlyb25tZW50LgogICAgICAqIEBwYXJhbSBhdHRycyBBIGNvbGxlY3Rpb24gb2YgYXR0cmlidXRlcy4KLSAgICAgKiBAcGFyYW0gZGVmU3R5bGUgVGhlIGRlZmF1bHQgc3R5bGUgdG8gYXBwbHkgdG8gdGhpcyB2aWV3LgorICAgICAqIEBwYXJhbSBkZWZTdHlsZUF0dHIgQW4gYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IHRoZW1lIHRoYXQgY29udGFpbnMgYQorICAgICAqICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICB0aGUgdmlldy4gQ2FuIGJlIDAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgogICAgICAqLwotICAgIHB1YmxpYyBBY3Rpdml0eUNob29zZXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgQWN0aXZpdHlDaG9vc2VyVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudC4KKyAgICAgKiBAcGFyYW0gYXR0cnMgQSBjb2xsZWN0aW9uIG9mIGF0dHJpYnV0ZXMuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCisgICAgICogQHBhcmFtIGRlZlN0eWxlUmVzIEEgcmVzb3VyY2UgaWRlbnRpZmllciBvZiBhIHN0eWxlIHJlc291cmNlIHRoYXQKKyAgICAgKiAgICAgICAgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSB2aWV3LCB1c2VkIG9ubHkgaWYKKyAgICAgKiAgICAgICAgZGVmU3R5bGVBdHRyIGlzIDAgb3IgY2FuIG5vdCBiZSBmb3VuZCBpbiB0aGUgdGhlbWUuIENhbiBiZSAwCisgICAgICogICAgICAgIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgQWN0aXZpdHlDaG9vc2VyVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBUeXBlZEFycmF5IGF0dHJpYnV0ZXNBcnJheSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5BY3Rpdml0eUNob29zZXJWaWV3LCBkZWZTdHlsZSwgMCk7CisgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuQWN0aXZpdHlDaG9vc2VyVmlldywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgbUluaXRpYWxBY3Rpdml0eUNvdW50ID0gYXR0cmlidXRlc0FycmF5LmdldEludCgKICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5BY3Rpdml0eUNob29zZXJWaWV3X2luaXRpYWxBY3Rpdml0eUNvdW50LApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXcuamF2YQppbmRleCBhNWZhZDYwLi45NjJmZmJhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXcuamF2YQpAQCAtMjIzLDE1ICsyMjMsMTkgQEAKICAgICBib29sZWFuIG1CbG9ja0xheW91dFJlcXVlc3RzID0gZmFsc2U7CiAKICAgICBwdWJsaWMgQWRhcHRlclZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwogICAgIH0KIAogICAgIHB1YmxpYyBBZGFwdGVyVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KIAotICAgIHB1YmxpYyBBZGFwdGVyVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEFkYXB0ZXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEFkYXB0ZXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCB0aGlzIHZpZXcgaXMgaW1wb3J0YW50IGZvciBhY2Nlc3NpYmlsaXR5LgogICAgICAgICBpZiAoZ2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSgpID09IElNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9BVVRPKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXdBbmltYXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3QW5pbWF0b3IuamF2YQppbmRleCA5MGU5NDlhLi4xYmMyZjRiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXdBbmltYXRvci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlld0FuaW1hdG9yLmphdmEKQEAgLTE3MywxMCArMTczLDE1IEBACiAgICAgfQogCiAgICAgcHVibGljIEFkYXB0ZXJWaWV3QW5pbWF0b3IoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0cik7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BZGFwdGVyVmlld0FuaW1hdG9yLCBkZWZTdHlsZUF0dHIsIDApOworICAgIHB1YmxpYyBBZGFwdGVyVmlld0FuaW1hdG9yKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkFkYXB0ZXJWaWV3QW5pbWF0b3IsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBpbnQgcmVzb3VyY2UgPSBhLmdldFJlc291cmNlSWQoCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQWRhcHRlclZpZXdBbmltYXRvcl9pbkFuaW1hdGlvbiwgMCk7CiAgICAgICAgIGlmIChyZXNvdXJjZSA+IDApIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlld0ZsaXBwZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BZGFwdGVyVmlld0ZsaXBwZXIuamF2YQppbmRleCBhZWEwMjliLi4zYjAyNmJkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWRhcHRlclZpZXdGbGlwcGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FkYXB0ZXJWaWV3RmxpcHBlci5qYXZhCkBAIC01OSwxMCArNTksMTkgQEAKICAgICB9CiAKICAgICBwdWJsaWMgQWRhcHRlclZpZXdGbGlwcGVyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BZGFwdGVyVmlld0ZsaXBwZXIpOworICAgIHB1YmxpYyBBZGFwdGVyVmlld0ZsaXBwZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQWRhcHRlclZpZXdGbGlwcGVyKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkFkYXB0ZXJWaWV3RmxpcHBlciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1GbGlwSW50ZXJ2YWwgPSBhLmdldEludCgKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BZGFwdGVyVmlld0ZsaXBwZXJfZmxpcEludGVydmFsLCBERUZBVUxUX0lOVEVSVkFMKTsKICAgICAgICAgbUF1dG9TdGFydCA9IGEuZ2V0Qm9vbGVhbigKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BbmFsb2dDbG9jay5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FuYWxvZ0Nsb2NrLmphdmEKaW5kZXggYzdkYTgxOC4uM2M4OGU5NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FuYWxvZ0Nsb2NrLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FuYWxvZ0Nsb2NrLmphdmEKQEAgLTY3LDEzICs2NywxNiBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CiAKLSAgICBwdWJsaWMgQW5hbG9nQ2xvY2soQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwotICAgICAgICBSZXNvdXJjZXMgciA9IG1Db250ZXh0LmdldFJlc291cmNlcygpOwotICAgICAgICBUeXBlZEFycmF5IGEgPQotICAgICAgICAgICAgICAgIGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BbmFsb2dDbG9jaywgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBBbmFsb2dDbG9jayhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBBbmFsb2dDbG9jayhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBSZXNvdXJjZXMgciA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQW5hbG9nQ2xvY2ssIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIG1EaWFsID0gYS5nZXREcmF3YWJsZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BbmFsb2dDbG9ja19kaWFsKTsKICAgICAgICAgaWYgKG1EaWFsID09IG51bGwpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BdXRvQ29tcGxldGVUZXh0Vmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0F1dG9Db21wbGV0ZVRleHRWaWV3LmphdmEKaW5kZXggZjBlYjk0Zi4uMjU5YzY2YjkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BdXRvQ29tcGxldGVUZXh0Vmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BdXRvQ29tcGxldGVUZXh0Vmlldy5qYXZhCkBAIC0xMzMsMTcgKzEzMywyMSBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuYXV0b0NvbXBsZXRlVGV4dFZpZXdTdHlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIEF1dG9Db21wbGV0ZVRleHRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgQXV0b0NvbXBsZXRlVGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQXV0b0NvbXBsZXRlVGV4dFZpZXcoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBtUG9wdXAgPSBuZXcgTGlzdFBvcHVwV2luZG93KGNvbnRleHQsIGF0dHJzLAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5hdXRvQ29tcGxldGVUZXh0Vmlld1N0eWxlKTsKICAgICAgICAgbVBvcHVwLnNldFNvZnRJbnB1dE1vZGUoV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuU09GVF9JTlBVVF9BREpVU1RfUkVTSVpFKTsKICAgICAgICAgbVBvcHVwLnNldFByb21wdFBvc2l0aW9uKExpc3RQb3B1cFdpbmRvdy5QT1NJVElPTl9QUk9NUFRfQkVMT1cpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9Ci0gICAgICAgICAgICBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkF1dG9Db21wbGV0ZVRleHRWaWV3LCBkZWZTdHlsZSwgMCk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BdXRvQ29tcGxldGVUZXh0VmlldywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgbVRocmVzaG9sZCA9IGEuZ2V0SW50KAogICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkF1dG9Db21wbGV0ZVRleHRWaWV3X2NvbXBsZXRpb25UaHJlc2hvbGQsIDIpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0J1dHRvbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0J1dHRvbi5qYXZhCmluZGV4IDJhYzU2YWMuLjE2NjM2MjAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9CdXR0b24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQnV0dG9uLmphdmEKQEAgLTEwMyw4ICsxMDMsMTIgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmJ1dHRvblN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9DYWxlbmRhclZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9DYWxlbmRhclZpZXcuamF2YQppbmRleCAwOTU3YWI0Li5hODdjN2QyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2FsZW5kYXJWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0NhbGVuZGFyVmlldy5qYXZhCkBAIC04MCwyMzQgKzgwLDcgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HX1RBRyA9IENhbGVuZGFyVmlldy5jbGFzcy5nZXRTaW1wbGVOYW1lKCk7CiAKLSAgICAvKioKLSAgICAgKiBEZWZhdWx0IHZhbHVlIHdoZXRoZXIgdG8gc2hvdyB3ZWVrIG51bWJlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfU0hPV19XRUVLX05VTUJFUiA9IHRydWU7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIGRheS5lCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBNSUxMSVNfSU5fREFZID0gODY0MDAwMDBMOwotCi0gICAgLyoqCi0gICAgICogVGhlIG51bWJlciBvZiBkYXkgaW4gYSB3ZWVrLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEQVlTX1BFUl9XRUVLID0gNzsKLQotICAgIC8qKgotICAgICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2Vlay4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIE1JTExJU19JTl9XRUVLID0gREFZU19QRVJfV0VFSyAqIE1JTExJU19JTl9EQVk7Ci0KLSAgICAvKioKLSAgICAgKiBBZmZlY3RzIHdoZW4gdGhlIG1vbnRoIHNlbGVjdGlvbiB3aWxsIGNoYW5nZSB3aGlsZSBzY3JvbGxpbmcgdXBlCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDUk9MTF9IWVNUX1dFRUtTID0gMjsKLQotICAgIC8qKgotICAgICAqIEhvdyBsb25nIHRoZSBHb1RvIGZsaW5nIGFuaW1hdGlvbiBzaG91bGQgbGFzdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgR09UT19TQ1JPTExfRFVSQVRJT04gPSAxMDAwOwotCi0gICAgLyoqCi0gICAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSBhZGp1c3RtZW50IHVwb24gYSB1c2VyIHNjcm9sbCBpbiBtaWxsaXNlY29uZHMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFESlVTVE1FTlRfU0NST0xMX0RVUkFUSU9OID0gNTAwOwotCi0gICAgLyoqCi0gICAgICogSG93IGxvbmcgdG8gd2FpdCBhZnRlciByZWNlaXZpbmcgYW4gb25TY3JvbGxTdGF0ZUNoYW5nZWQgbm90aWZpY2F0aW9uCi0gICAgICogYmVmb3JlIGFjdGluZyBvbiBpdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0NST0xMX0NIQU5HRV9ERUxBWSA9IDQwOwotCi0gICAgLyoqCi0gICAgICogU3RyaW5nIGZvciBwYXJzaW5nIGRhdGVzLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRFX0ZPUk1BVCA9ICJNTS9kZC95eXl5IjsKLQotICAgIC8qKgotICAgICAqIFRoZSBkZWZhdWx0IG1pbmltYWwgZGF0ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9NSU5fREFURSA9ICIwMS8wMS8xOTAwIjsKLQotICAgIC8qKgotICAgICAqIFRoZSBkZWZhdWx0IG1heGltYWwgZGF0ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9NQVhfREFURSA9ICIwMS8wMS8yMTAwIjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NIT1dOX1dFRUtfQ09VTlQgPSA2OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfREFURV9URVhUX1NJWkUgPSAxNDsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNDQUxFRF9TRUxFQ1RFRF9EQVRFX1ZFUlRJQ0FMX0JBUl9XSURUSCA9IDY7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5TQ0FMRURfV0VFS19NSU5fVklTSUJMRV9IRUlHSFQgPSAxMjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNDQUxFRF9MSVNUX1NDUk9MTF9UT1BfT0ZGU0VUID0gMjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNDQUxFRF9CT1RUT01fQlVGRkVSID0gMjA7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5TQ0FMRURfV0VFS19TRVBBUkFUT1JfTElORV9XSURUSCA9IDE7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9XRUVLX0RBWV9URVhUX0FQUEVBUkFOQ0VfUkVTX0lEID0gLTE7Ci0KLSAgICBwcml2YXRlIGZpbmFsIGludCBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aDsKLQotICAgIHByaXZhdGUgaW50IG1EYXRlVGV4dFNpemU7Ci0KLSAgICBwcml2YXRlIERyYXdhYmxlIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhcjsKLQotICAgIHByaXZhdGUgZmluYWwgaW50IG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhcldpZHRoOwotCi0gICAgcHJpdmF0ZSBpbnQgbVNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvcjsKLQotICAgIHByaXZhdGUgaW50IG1Gb2N1c2VkTW9udGhEYXRlQ29sb3I7Ci0KLSAgICBwcml2YXRlIGludCBtVW5mb2N1c2VkTW9udGhEYXRlQ29sb3I7Ci0KLSAgICBwcml2YXRlIGludCBtV2Vla1NlcGFyYXRvckxpbmVDb2xvcjsKLQotICAgIHByaXZhdGUgaW50IG1XZWVrTnVtYmVyQ29sb3I7Ci0KLSAgICBwcml2YXRlIGludCBtV2Vla0RheVRleHRBcHBlYXJhbmNlUmVzSWQ7Ci0KLSAgICBwcml2YXRlIGludCBtRGF0ZVRleHRBcHBlYXJhbmNlUmVzSWQ7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgdG9wIG9mZnNldCBvZiB0aGUgd2Vla3MgbGlzdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGludCBtTGlzdFNjcm9sbFRvcE9mZnNldCA9IDI7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgdmlzaWJsZSBoZWlnaHQgb2YgYSB3ZWVrIHZpZXcuCi0gICAgICovCi0gICAgcHJpdmF0ZSBpbnQgbVdlZWtNaW5WaXNpYmxlSGVpZ2h0ID0gMTI7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgdmlzaWJsZSBoZWlnaHQgb2YgYSB3ZWVrIHZpZXcuCi0gICAgICovCi0gICAgcHJpdmF0ZSBpbnQgbUJvdHRvbUJ1ZmZlciA9IDIwOwotCi0gICAgLyoqCi0gICAgICogVGhlIG51bWJlciBvZiBzaG93biB3ZWVrcy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGludCBtU2hvd25XZWVrQ291bnQ7Ci0KLSAgICAvKioKLSAgICAgKiBGbGFnIHdoZXRoZXIgdG8gc2hvdyB0aGUgd2VlayBudW1iZXIuCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIG1TaG93V2Vla051bWJlcjsKLQotICAgIC8qKgotICAgICAqIFRoZSBudW1iZXIgb2YgZGF5IHBlciB3ZWVrIHRvIGJlIHNob3duLgotICAgICAqLwotICAgIHByaXZhdGUgaW50IG1EYXlzUGVyV2VlayA9IDc7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgZnJpY3Rpb24gb2YgdGhlIHdlZWsgbGlzdCB3aGlsZSBmbGluZ2luZy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZsb2F0IG1GcmljdGlvbiA9IC4wNWY7Ci0KLSAgICAvKioKLSAgICAgKiBTY2FsZSBmb3IgYWRqdXN0aW5nIHZlbG9jaXR5IG9mIHRoZSB3ZWVrIGxpc3Qgd2hpbGUgZmxpbmdpbmcuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmbG9hdCBtVmVsb2NpdHlTY2FsZSA9IDAuMzMzZjsKLQotICAgIC8qKgotICAgICAqIFRoZSBhZGFwdGVyIGZvciB0aGUgd2Vla3MgbGlzdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIFdlZWtzQWRhcHRlciBtQWRhcHRlcjsKLQotICAgIC8qKgotICAgICAqIFRoZSB3ZWVrcyBsaXN0LgotICAgICAqLwotICAgIHByaXZhdGUgTGlzdFZpZXcgbUxpc3RWaWV3OwotCi0gICAgLyoqCi0gICAgICogVGhlIG5hbWUgb2YgdGhlIG1vbnRoIHRvIGRpc3BsYXkuCi0gICAgICovCi0gICAgcHJpdmF0ZSBUZXh0VmlldyBtTW9udGhOYW1lOwotCi0gICAgLyoqCi0gICAgICogVGhlIGhlYWRlciB3aXRoIHdlZWsgZGF5IG5hbWVzLgotICAgICAqLwotICAgIHByaXZhdGUgVmlld0dyb3VwIG1EYXlOYW1lc0hlYWRlcjsKLQotICAgIC8qKgotICAgICAqIENhY2hlZCBsYWJlbHMgZm9yIHRoZSB3ZWVrIG5hbWVzIGhlYWRlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIFN0cmluZ1tdIG1EYXlMYWJlbHM7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLgotICAgICAqLwotICAgIHByaXZhdGUgaW50IG1GaXJzdERheU9mV2VlazsKLQotICAgIC8qKgotICAgICAqIFdoaWNoIG1vbnRoIHNob3VsZCBiZSBkaXNwbGF5ZWQvaGlnaGxpZ2h0ZWQgWzAtMTFdLgotICAgICAqLwotICAgIHByaXZhdGUgaW50IG1DdXJyZW50TW9udGhEaXNwbGF5ZWQgPSAtMTsKLQotICAgIC8qKgotICAgICAqIFVzZWQgZm9yIHRyYWNraW5nIGR1cmluZyBhIHNjcm9sbC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGxvbmcgbVByZXZpb3VzU2Nyb2xsUG9zaXRpb247Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIGZvciB0cmFja2luZyB3aGljaCBkaXJlY3Rpb24gdGhlIHZpZXcgaXMgc2Nyb2xsaW5nLgotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNTY3JvbGxpbmdVcCA9IGZhbHNlOwotCi0gICAgLyoqCi0gICAgICogVGhlIHByZXZpb3VzIHNjcm9sbCBzdGF0ZSBvZiB0aGUgd2Vla3MgTGlzdFZpZXcuCi0gICAgICovCi0gICAgcHJpdmF0ZSBpbnQgbVByZXZpb3VzU2Nyb2xsU3RhdGUgPSBPblNjcm9sbExpc3RlbmVyLlNDUk9MTF9TVEFURV9JRExFOwotCi0gICAgLyoqCi0gICAgICogVGhlIGN1cnJlbnQgc2Nyb2xsIHN0YXRlIG9mIHRoZSB3ZWVrcyBMaXN0Vmlldy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGludCBtQ3VycmVudFNjcm9sbFN0YXRlID0gT25TY3JvbGxMaXN0ZW5lci5TQ1JPTExfU1RBVEVfSURMRTsKLQotICAgIC8qKgotICAgICAqIExpc3RlbmVyIGZvciBjaGFuZ2VzIGluIHRoZSBzZWxlY3RlZCBkYXkuCi0gICAgICovCi0gICAgcHJpdmF0ZSBPbkRhdGVDaGFuZ2VMaXN0ZW5lciBtT25EYXRlQ2hhbmdlTGlzdGVuZXI7Ci0KLSAgICAvKioKLSAgICAgKiBDb21tYW5kIGZvciBhZGp1c3RpbmcgdGhlIHBvc2l0aW9uIGFmdGVyIGEgc2Nyb2xsL2ZsaW5nLgotICAgICAqLwotICAgIHByaXZhdGUgU2Nyb2xsU3RhdGVSdW5uYWJsZSBtU2Nyb2xsU3RhdGVDaGFuZ2VkUnVubmFibGUgPSBuZXcgU2Nyb2xsU3RhdGVSdW5uYWJsZSgpOwotCi0gICAgLyoqCi0gICAgICogVGVtcG9yYXJ5IGluc3RhbmNlIHRvIGF2b2lkIG11bHRpcGxlIGluc3RhbnRpYXRpb25zLgotICAgICAqLwotICAgIHByaXZhdGUgQ2FsZW5kYXIgbVRlbXBEYXRlOwotCi0gICAgLyoqCi0gICAgICogVGhlIGZpcnN0IGRheSBvZiB0aGUgZm9jdXNlZCBtb250aC4KLSAgICAgKi8KLSAgICBwcml2YXRlIENhbGVuZGFyIG1GaXJzdERheU9mTW9udGg7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgc3RhcnQgZGF0ZSBvZiB0aGUgcmFuZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgcGlja2VyLgotICAgICAqLwotICAgIHByaXZhdGUgQ2FsZW5kYXIgbU1pbkRhdGU7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgZW5kIGRhdGUgb2YgdGhlIHJhbmdlIHN1cHBvcnRlZCBieSB0aGlzIHBpY2tlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIENhbGVuZGFyIG1NYXhEYXRlOwotCi0gICAgLyoqCi0gICAgICogRGF0ZSBmb3JtYXQgZm9yIHBhcnNpbmcgZGF0ZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBqYXZhLnRleHQuRGF0ZUZvcm1hdCBtRGF0ZUZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KERBVEVfRk9STUFUKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBjdXJyZW50IGxvY2FsZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIExvY2FsZSBtQ3VycmVudExvY2FsZTsKKyAgICBwcml2YXRlIENhbGVuZGFyVmlld0RlbGVnYXRlIG1EZWxlZ2F0ZTsKIAogICAgIC8qKgogICAgICAqIFRoZSBjYWxsYmFjayB1c2VkIHRvIGluZGljYXRlIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGRhdGUuCkBAIC0zMzAsOTEgKzEwMywxNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBDYWxlbmRhclZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIFIuYXR0ci5jYWxlbmRhclZpZXdTdHlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIENhbGVuZGFyVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCAwKTsKKyAgICBwdWJsaWMgQ2FsZW5kYXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIC8vIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIGxvY2FsZQotICAgICAgICBzZXRDdXJyZW50TG9jYWxlKExvY2FsZS5nZXREZWZhdWx0KCkpOworICAgIHB1YmxpYyBDYWxlbmRhclZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKLSAgICAgICAgVHlwZWRBcnJheSBhdHRyaWJ1dGVzQXJyYXkgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlldywKLSAgICAgICAgICAgICAgICBSLmF0dHIuY2FsZW5kYXJWaWV3U3R5bGUsIDApOwotICAgICAgICBtU2hvd1dlZWtOdW1iZXIgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfc2hvd1dlZWtOdW1iZXIsCi0gICAgICAgICAgICAgICAgREVGQVVMVF9TSE9XX1dFRUtfTlVNQkVSKTsKLSAgICAgICAgbUZpcnN0RGF5T2ZXZWVrID0gYXR0cmlidXRlc0FycmF5LmdldEludChSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfZmlyc3REYXlPZldlZWssCi0gICAgICAgICAgICAgICAgTG9jYWxlRGF0YS5nZXQoTG9jYWxlLmdldERlZmF1bHQoKSkuZmlyc3REYXlPZldlZWspOwotICAgICAgICBTdHJpbmcgbWluRGF0ZSA9IGF0dHJpYnV0ZXNBcnJheS5nZXRTdHJpbmcoUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X21pbkRhdGUpOwotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkobWluRGF0ZSkgfHwgIXBhcnNlRGF0ZShtaW5EYXRlLCBtTWluRGF0ZSkpIHsKLSAgICAgICAgICAgIHBhcnNlRGF0ZShERUZBVUxUX01JTl9EQVRFLCBtTWluRGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIG1heERhdGUgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlld19tYXhEYXRlKTsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG1heERhdGUpIHx8ICFwYXJzZURhdGUobWF4RGF0ZSwgbU1heERhdGUpKSB7Ci0gICAgICAgICAgICBwYXJzZURhdGUoREVGQVVMVF9NQVhfREFURSwgbU1heERhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtTWF4RGF0ZS5iZWZvcmUobU1pbkRhdGUpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNYXggZGF0ZSBjYW5ub3QgYmUgYmVmb3JlIG1pbiBkYXRlLiIpOwotICAgICAgICB9Ci0gICAgICAgIG1TaG93bldlZWtDb3VudCA9IGF0dHJpYnV0ZXNBcnJheS5nZXRJbnQoUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X3Nob3duV2Vla0NvdW50LAotICAgICAgICAgICAgICAgIERFRkFVTFRfU0hPV05fV0VFS19DT1VOVCk7Ci0gICAgICAgIG1TZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Q29sb3IoCi0gICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X3NlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvciwgMCk7Ci0gICAgICAgIG1Gb2N1c2VkTW9udGhEYXRlQ29sb3IgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Q29sb3IoCi0gICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X2ZvY3VzZWRNb250aERhdGVDb2xvciwgMCk7Ci0gICAgICAgIG1VbmZvY3VzZWRNb250aERhdGVDb2xvciA9IGF0dHJpYnV0ZXNBcnJheS5nZXRDb2xvcigKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfdW5mb2N1c2VkTW9udGhEYXRlQ29sb3IsIDApOwotICAgICAgICBtV2Vla1NlcGFyYXRvckxpbmVDb2xvciA9IGF0dHJpYnV0ZXNBcnJheS5nZXRDb2xvcigKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfd2Vla1NlcGFyYXRvckxpbmVDb2xvciwgMCk7Ci0gICAgICAgIG1XZWVrTnVtYmVyQ29sb3IgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Q29sb3IoUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X3dlZWtOdW1iZXJDb2xvciwgMCk7Ci0gICAgICAgIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhciA9IGF0dHJpYnV0ZXNBcnJheS5nZXREcmF3YWJsZSgKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfc2VsZWN0ZWREYXRlVmVydGljYWxCYXIpOwotCi0gICAgICAgIG1EYXRlVGV4dEFwcGVhcmFuY2VSZXNJZCA9IGF0dHJpYnV0ZXNBcnJheS5nZXRSZXNvdXJjZUlkKAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlld19kYXRlVGV4dEFwcGVhcmFuY2UsIFIuc3R5bGUuVGV4dEFwcGVhcmFuY2VfU21hbGwpOwotICAgICAgICB1cGRhdGVEYXRlVGV4dFNpemUoKTsKLQotICAgICAgICBtV2Vla0RheVRleHRBcHBlYXJhbmNlUmVzSWQgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0UmVzb3VyY2VJZCgKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfd2Vla0RheVRleHRBcHBlYXJhbmNlLAotICAgICAgICAgICAgICAgIERFRkFVTFRfV0VFS19EQVlfVEVYVF9BUFBFQVJBTkNFX1JFU19JRCk7Ci0gICAgICAgIGF0dHJpYnV0ZXNBcnJheS5yZWN5Y2xlKCk7Ci0KLSAgICAgICAgRGlzcGxheU1ldHJpY3MgZGlzcGxheU1ldHJpY3MgPSBnZXRSZXNvdXJjZXMoKS5nZXREaXNwbGF5TWV0cmljcygpOwotICAgICAgICBtV2Vla01pblZpc2libGVIZWlnaHQgPSAoaW50KSBUeXBlZFZhbHVlLmFwcGx5RGltZW5zaW9uKFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX0RJUCwKLSAgICAgICAgICAgICAgICBVTlNDQUxFRF9XRUVLX01JTl9WSVNJQkxFX0hFSUdIVCwgZGlzcGxheU1ldHJpY3MpOwotICAgICAgICBtTGlzdFNjcm9sbFRvcE9mZnNldCA9IChpbnQpIFR5cGVkVmFsdWUuYXBwbHlEaW1lbnNpb24oVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfRElQLAotICAgICAgICAgICAgICAgIFVOU0NBTEVEX0xJU1RfU0NST0xMX1RPUF9PRkZTRVQsIGRpc3BsYXlNZXRyaWNzKTsKLSAgICAgICAgbUJvdHRvbUJ1ZmZlciA9IChpbnQpIFR5cGVkVmFsdWUuYXBwbHlEaW1lbnNpb24oVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfRElQLAotICAgICAgICAgICAgICAgIFVOU0NBTEVEX0JPVFRPTV9CVUZGRVIsIGRpc3BsYXlNZXRyaWNzKTsKLSAgICAgICAgbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyV2lkdGggPSAoaW50KSBUeXBlZFZhbHVlLmFwcGx5RGltZW5zaW9uKFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX0RJUCwKLSAgICAgICAgICAgICAgICBVTlNDQUxFRF9TRUxFQ1RFRF9EQVRFX1ZFUlRJQ0FMX0JBUl9XSURUSCwgZGlzcGxheU1ldHJpY3MpOwotICAgICAgICBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aCA9IChpbnQpIFR5cGVkVmFsdWUuYXBwbHlEaW1lbnNpb24oVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfRElQLAotICAgICAgICAgICAgICAgIFVOU0NBTEVEX1dFRUtfU0VQQVJBVE9SX0xJTkVfV0lEVEgsIGRpc3BsYXlNZXRyaWNzKTsKLQotICAgICAgICBMYXlvdXRJbmZsYXRlciBsYXlvdXRJbmZsYXRlciA9IChMYXlvdXRJbmZsYXRlcikgY29udGV4dAotICAgICAgICAgICAgICAgIC5nZXRTeXN0ZW1TZXJ2aWNlKFNlcnZpY2UuTEFZT1VUX0lORkxBVEVSX1NFUlZJQ0UpOwotICAgICAgICBWaWV3IGNvbnRlbnQgPSBsYXlvdXRJbmZsYXRlci5pbmZsYXRlKFIubGF5b3V0LmNhbGVuZGFyX3ZpZXcsIG51bGwsIGZhbHNlKTsKLSAgICAgICAgYWRkVmlldyhjb250ZW50KTsKLQotICAgICAgICBtTGlzdFZpZXcgPSAoTGlzdFZpZXcpIGZpbmRWaWV3QnlJZChSLmlkLmxpc3QpOwotICAgICAgICBtRGF5TmFtZXNIZWFkZXIgPSAoVmlld0dyb3VwKSBjb250ZW50LmZpbmRWaWV3QnlJZChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLmRheV9uYW1lcyk7Ci0gICAgICAgIG1Nb250aE5hbWUgPSAoVGV4dFZpZXcpIGNvbnRlbnQuZmluZFZpZXdCeUlkKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQubW9udGhfbmFtZSk7Ci0KLSAgICAgICAgc2V0VXBIZWFkZXIoKTsKLSAgICAgICAgc2V0VXBMaXN0VmlldygpOwotICAgICAgICBzZXRVcEFkYXB0ZXIoKTsKLQotICAgICAgICAvLyBnbyB0byB0b2RheSBvciB3aGljaGV2ZXIgaXMgY2xvc2UgdG8gdG9kYXkgbWluIG9yIG1heCBkYXRlCi0gICAgICAgIG1UZW1wRGF0ZS5zZXRUaW1lSW5NaWxsaXMoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwotICAgICAgICBpZiAobVRlbXBEYXRlLmJlZm9yZShtTWluRGF0ZSkpIHsKLSAgICAgICAgICAgIGdvVG8obU1pbkRhdGUsIGZhbHNlLCB0cnVlLCB0cnVlKTsKLSAgICAgICAgfSBlbHNlIGlmIChtTWF4RGF0ZS5iZWZvcmUobVRlbXBEYXRlKSkgewotICAgICAgICAgICAgZ29UbyhtTWF4RGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ29UbyhtVGVtcERhdGUsIGZhbHNlLCB0cnVlLCB0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgbURlbGVnYXRlID0gbmV3IExlZ2FjeUNhbGVuZGFyVmlld0RlbGVnYXRlKHRoaXMsIGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQyNSwxMCArMTI0LDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfc2hvd25XZWVrQ291bnQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTaG93bldlZWtDb3VudChpbnQgY291bnQpIHsKLSAgICAgICAgaWYgKG1TaG93bldlZWtDb3VudCAhPSBjb3VudCkgewotICAgICAgICAgICAgbVNob3duV2Vla0NvdW50ID0gY291bnQ7Ci0gICAgICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgbURlbGVnYXRlLnNldFNob3duV2Vla0NvdW50KGNvdW50KTsKICAgICB9CiAKICAgICAvKioKQEAgLTQzOSw3ICsxMzUsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld19zaG93bldlZWtDb3VudAogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0U2hvd25XZWVrQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtU2hvd25XZWVrQ291bnQ7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0U2hvd25XZWVrQ291bnQoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQ1MCwxNiArMTQ2LDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfc2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yKGludCBjb2xvcikgewotICAgICAgICBpZiAobVNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvciAhPSBjb2xvcikgewotICAgICAgICAgICAgbVNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvciA9IGNvbG9yOwotICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRDb3VudCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBXZWVrVmlldyB3ZWVrVmlldyA9IChXZWVrVmlldykgbUxpc3RWaWV3LmdldENoaWxkQXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHdlZWtWaWV3Lm1IYXNTZWxlY3RlZERheSkgewotICAgICAgICAgICAgICAgICAgICB3ZWVrVmlldy5pbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIG1EZWxlZ2F0ZS5zZXRTZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IoY29sb3IpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDcwLDcgKzE1Nyw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjQ2FsZW5kYXJWaWV3X3NlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvcgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0U2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yKCkgewotICAgICAgICByZXR1cm4gbVNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvcjsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXRTZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQ4MSwxNiArMTY4LDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfZm9jdXNlZE1vbnRoRGF0ZUNvbG9yCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Rm9jdXNlZE1vbnRoRGF0ZUNvbG9yKGludCBjb2xvcikgewotICAgICAgICBpZiAobUZvY3VzZWRNb250aERhdGVDb2xvciAhPSBjb2xvcikgewotICAgICAgICAgICAgbUZvY3VzZWRNb250aERhdGVDb2xvciA9IGNvbG9yOwotICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRDb3VudCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBXZWVrVmlldyB3ZWVrVmlldyA9IChXZWVrVmlldykgbUxpc3RWaWV3LmdldENoaWxkQXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHdlZWtWaWV3Lm1IYXNGb2N1c2VkRGF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3LmludmFsaWRhdGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbURlbGVnYXRlLnNldEZvY3VzZWRNb250aERhdGVDb2xvcihjb2xvcik7CiAgICAgfQogCiAgICAgLyoqCkBAIC01MDEsNyArMTc5LDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfZm9jdXNlZE1vbnRoRGF0ZUNvbG9yCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRGb2N1c2VkTW9udGhEYXRlQ29sb3IoKSB7Ci0gICAgICAgIHJldHVybiBtRm9jdXNlZE1vbnRoRGF0ZUNvbG9yOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldEZvY3VzZWRNb250aERhdGVDb2xvcigpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTEyLDE2ICsxOTAsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld191bmZvY3VzZWRNb250aERhdGVDb2xvcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yKGludCBjb2xvcikgewotICAgICAgICBpZiAobVVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yICE9IGNvbG9yKSB7Ci0gICAgICAgICAgICBtVW5mb2N1c2VkTW9udGhEYXRlQ29sb3IgPSBjb2xvcjsKLSAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gbUxpc3RWaWV3LmdldENoaWxkQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgV2Vla1ZpZXcgd2Vla1ZpZXcgPSAoV2Vla1ZpZXcpIG1MaXN0Vmlldy5nZXRDaGlsZEF0KGkpOwotICAgICAgICAgICAgICAgIGlmICh3ZWVrVmlldy5tSGFzVW5mb2N1c2VkRGF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3LmludmFsaWRhdGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbURlbGVnYXRlLnNldFVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yKGNvbG9yKTsKICAgICB9CiAKICAgICAvKioKQEAgLTUzMiw3ICsyMDEsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld191bmZvY3VzZWRNb250aERhdGVDb2xvcgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VW5mb2N1c2VkTW9udGhEYXRlQ29sb3IoKSB7Ci0gICAgICAgIHJldHVybiBtRm9jdXNlZE1vbnRoRGF0ZUNvbG9yOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldFVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC01NDMsMTIgKzIxMiw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjQ2FsZW5kYXJWaWV3X3dlZWtOdW1iZXJDb2xvcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFdlZWtOdW1iZXJDb2xvcihpbnQgY29sb3IpIHsKLSAgICAgICAgaWYgKG1XZWVrTnVtYmVyQ29sb3IgIT0gY29sb3IpIHsKLSAgICAgICAgICAgIG1XZWVrTnVtYmVyQ29sb3IgPSBjb2xvcjsKLSAgICAgICAgICAgIGlmIChtU2hvd1dlZWtOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICBpbnZhbGlkYXRlQWxsV2Vla1ZpZXdzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbURlbGVnYXRlLnNldFdlZWtOdW1iZXJDb2xvcihjb2xvcik7CiAgICAgfQogCiAgICAgLyoqCkBAIC01NTksNyArMjIzLDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfd2Vla051bWJlckNvbG9yCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRXZWVrTnVtYmVyQ29sb3IoKSB7Ci0gICAgICAgIHJldHVybiBtV2Vla051bWJlckNvbG9yOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldFdlZWtOdW1iZXJDb2xvcigpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTcwLDEwICsyMzQsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld193ZWVrU2VwYXJhdG9yTGluZUNvbG9yCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0V2Vla1NlcGFyYXRvckxpbmVDb2xvcihpbnQgY29sb3IpIHsKLSAgICAgICAgaWYgKG1XZWVrU2VwYXJhdG9yTGluZUNvbG9yICE9IGNvbG9yKSB7Ci0gICAgICAgICAgICBtV2Vla1NlcGFyYXRvckxpbmVDb2xvciA9IGNvbG9yOwotICAgICAgICAgICAgaW52YWxpZGF0ZUFsbFdlZWtWaWV3cygpOwotICAgICAgICB9CisgICAgICAgIG1EZWxlZ2F0ZS5zZXRXZWVrU2VwYXJhdG9yTGluZUNvbG9yKGNvbG9yKTsKICAgICB9CiAKICAgICAvKioKQEAgLTU4NCw3ICsyNDUsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld193ZWVrU2VwYXJhdG9yTGluZUNvbG9yCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRXZWVrU2VwYXJhdG9yTGluZUNvbG9yKCkgewotICAgICAgICByZXR1cm4gbVdlZWtTZXBhcmF0b3JMaW5lQ29sb3I7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0V2Vla1NlcGFyYXRvckxpbmVDb2xvcigpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTk2LDggKzI1Nyw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjQ2FsZW5kYXJWaWV3X3NlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoaW50IHJlc291cmNlSWQpIHsKLSAgICAgICAgRHJhd2FibGUgZHJhd2FibGUgPSBnZXRSZXNvdXJjZXMoKS5nZXREcmF3YWJsZShyZXNvdXJjZUlkKTsKLSAgICAgICAgc2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoZHJhd2FibGUpOworICAgICAgICBtRGVsZWdhdGUuc2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIocmVzb3VyY2VJZCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC02MDksMTYgKzI2OSw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjQ2FsZW5kYXJWaWV3X3NlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoRHJhd2FibGUgZHJhd2FibGUpIHsKLSAgICAgICAgaWYgKG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhciAhPSBkcmF3YWJsZSkgewotICAgICAgICAgICAgbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyID0gZHJhd2FibGU7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY2hpbGRDb3VudCA9IG1MaXN0Vmlldy5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIFdlZWtWaWV3IHdlZWtWaWV3ID0gKFdlZWtWaWV3KSBtTGlzdFZpZXcuZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgICAgICBpZiAod2Vla1ZpZXcubUhhc1NlbGVjdGVkRGF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3LmludmFsaWRhdGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbURlbGVnYXRlLnNldFNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyKGRyYXdhYmxlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTYyOCw3ICsyNzksNyBAQAogICAgICAqIEByZXR1cm4gVGhlIHZlcnRpY2FsIGJhciBkcmF3YWJsZS4KICAgICAgKi8KICAgICBwdWJsaWMgRHJhd2FibGUgZ2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoKSB7Ci0gICAgICAgIHJldHVybiBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXI7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTYzOSwxMCArMjkwLDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfd2Vla0RheVRleHRBcHBlYXJhbmNlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0V2Vla0RheVRleHRBcHBlYXJhbmNlKGludCByZXNvdXJjZUlkKSB7Ci0gICAgICAgIGlmIChtV2Vla0RheVRleHRBcHBlYXJhbmNlUmVzSWQgIT0gcmVzb3VyY2VJZCkgewotICAgICAgICAgICAgbVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkID0gcmVzb3VyY2VJZDsKLSAgICAgICAgICAgIHNldFVwSGVhZGVyKCk7Ci0gICAgICAgIH0KKyAgICAgICAgbURlbGVnYXRlLnNldFdlZWtEYXlUZXh0QXBwZWFyYW5jZShyZXNvdXJjZUlkKTsKICAgICB9CiAKICAgICAvKioKQEAgLTY1Myw3ICszMDEsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld193ZWVrRGF5VGV4dEFwcGVhcmFuY2UKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFdlZWtEYXlUZXh0QXBwZWFyYW5jZSgpIHsKLSAgICAgICAgcmV0dXJuIG1XZWVrRGF5VGV4dEFwcGVhcmFuY2VSZXNJZDsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXRXZWVrRGF5VGV4dEFwcGVhcmFuY2UoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTY2NCwxMSArMzEyLDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfZGF0ZVRleHRBcHBlYXJhbmNlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGF0ZVRleHRBcHBlYXJhbmNlKGludCByZXNvdXJjZUlkKSB7Ci0gICAgICAgIGlmIChtRGF0ZVRleHRBcHBlYXJhbmNlUmVzSWQgIT0gcmVzb3VyY2VJZCkgewotICAgICAgICAgICAgbURhdGVUZXh0QXBwZWFyYW5jZVJlc0lkID0gcmVzb3VyY2VJZDsKLSAgICAgICAgICAgIHVwZGF0ZURhdGVUZXh0U2l6ZSgpOwotICAgICAgICAgICAgaW52YWxpZGF0ZUFsbFdlZWtWaWV3cygpOwotICAgICAgICB9CisgICAgICAgIG1EZWxlZ2F0ZS5zZXREYXRlVGV4dEFwcGVhcmFuY2UocmVzb3VyY2VJZCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC02NzksMzUgKzMyMywxNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld19kYXRlVGV4dEFwcGVhcmFuY2UKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldERhdGVUZXh0QXBwZWFyYW5jZSgpIHsKLSAgICAgICAgcmV0dXJuIG1EYXRlVGV4dEFwcGVhcmFuY2VSZXNJZDsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXREYXRlVGV4dEFwcGVhcmFuY2UoKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgICBtTGlzdFZpZXcuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgbURlbGVnYXRlLnNldEVuYWJsZWQoZW5hYmxlZCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgewotICAgICAgICByZXR1cm4gbUxpc3RWaWV3LmlzRW5hYmxlZCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQoQ29uZmlndXJhdGlvbiBuZXdDb25maWcpIHsKLSAgICAgICAgc3VwZXIub25Db25maWd1cmF0aW9uQ2hhbmdlZChuZXdDb25maWcpOwotICAgICAgICBzZXRDdXJyZW50TG9jYWxlKG5ld0NvbmZpZy5sb2NhbGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKLSAgICAgICAgc3VwZXIub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKLSAgICAgICAgZXZlbnQuc2V0Q2xhc3NOYW1lKENhbGVuZGFyVmlldy5jbGFzcy5nZXROYW1lKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gaW5mbykgewotICAgICAgICBzdXBlci5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oaW5mbyk7Ci0gICAgICAgIGluZm8uc2V0Q2xhc3NOYW1lKENhbGVuZGFyVmlldy5jbGFzcy5nZXROYW1lKCkpOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmlzRW5hYmxlZCgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNzIzLDcgKzM0OSw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjQ2FsZW5kYXJWaWV3X21pbkRhdGUKICAgICAgKi8KICAgICBwdWJsaWMgbG9uZyBnZXRNaW5EYXRlKCkgewotICAgICAgICByZXR1cm4gbU1pbkRhdGUuZ2V0VGltZUluTWlsbGlzKCk7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0TWluRGF0ZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNzM2LDMwICszNjIsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld19taW5EYXRlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWluRGF0ZShsb25nIG1pbkRhdGUpIHsKLSAgICAgICAgbVRlbXBEYXRlLnNldFRpbWVJbk1pbGxpcyhtaW5EYXRlKTsKLSAgICAgICAgaWYgKGlzU2FtZURhdGUobVRlbXBEYXRlLCBtTWluRGF0ZSkpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtTWluRGF0ZS5zZXRUaW1lSW5NaWxsaXMobWluRGF0ZSk7Ci0gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgY3VycmVudCBkYXRlIGlzIG5vdCBlYXJsaWVyIHRoYW4KLSAgICAgICAgLy8gdGhlIG5ldyBtaW4gZGF0ZSBzaW5jZSB0aGUgbGF0dGVyIGlzIHVzZWQgZm9yCi0gICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBpbmRpY2VzIGluIHRoZSBhZGFwdGVyIHRodXMKLSAgICAgICAgLy8gYXZvaWRpbmcgb3V0IG9mIGJvdW5kcyBlcnJvcgotICAgICAgICBDYWxlbmRhciBkYXRlID0gbUFkYXB0ZXIubVNlbGVjdGVkRGF0ZTsKLSAgICAgICAgaWYgKGRhdGUuYmVmb3JlKG1NaW5EYXRlKSkgewotICAgICAgICAgICAgbUFkYXB0ZXIuc2V0U2VsZWN0ZWREYXkobU1pbkRhdGUpOwotICAgICAgICB9Ci0gICAgICAgIC8vIHJlaW5pdGlhbGl6ZSB0aGUgYWRhcHRlciBzaW5jZSBpdHMgcmFuZ2UgZGVwZW5kcyBvbiBtaW4gZGF0ZQotICAgICAgICBtQWRhcHRlci5pbml0KCk7Ci0gICAgICAgIGlmIChkYXRlLmJlZm9yZShtTWluRGF0ZSkpIHsKLSAgICAgICAgICAgIHNldERhdGUobVRlbXBEYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHdlIGdvIHRvIHRoZSBjdXJyZW50IGRhdGUgdG8gZm9yY2UgdGhlIExpc3RWaWV3IHRvIHF1ZXJ5IGl0cwotICAgICAgICAgICAgLy8gYWRhcHRlciBmb3IgdGhlIHNob3duIHZpZXdzIHNpbmNlIHdlIGhhdmUgY2hhbmdlZCB0aGUgYWRhcHRlcgotICAgICAgICAgICAgLy8gcmFuZ2UgYW5kIHRoZSBiYXNlIGZyb20gd2hpY2ggdGhlIGxhdGVyIGNhbGN1bGF0ZXMgaXRlbSBpbmRpY2VzCi0gICAgICAgICAgICAvLyBub3RlIHRoYXQgY2FsbGluZyBzZXREYXRlIHdpbGwgbm90IHdvcmsgc2luY2UgdGhlIGRhdGUgaXMgdGhlIHNhbWUKLSAgICAgICAgICAgIGdvVG8oZGF0ZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICBtRGVsZWdhdGUuc2V0TWluRGF0ZShtaW5EYXRlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTc3NSw3ICszNzgsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld19tYXhEYXRlCiAgICAgICovCiAgICAgcHVibGljIGxvbmcgZ2V0TWF4RGF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1NYXhEYXRlLmdldFRpbWVJbk1pbGxpcygpOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldE1heERhdGUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTc4OCwyMyArMzkxLDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfbWF4RGF0ZQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE1heERhdGUobG9uZyBtYXhEYXRlKSB7Ci0gICAgICAgIG1UZW1wRGF0ZS5zZXRUaW1lSW5NaWxsaXMobWF4RGF0ZSk7Ci0gICAgICAgIGlmIChpc1NhbWVEYXRlKG1UZW1wRGF0ZSwgbU1heERhdGUpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbU1heERhdGUuc2V0VGltZUluTWlsbGlzKG1heERhdGUpOwotICAgICAgICAvLyByZWluaXRpYWxpemUgdGhlIGFkYXB0ZXIgc2luY2UgaXRzIHJhbmdlIGRlcGVuZHMgb24gbWF4IGRhdGUKLSAgICAgICAgbUFkYXB0ZXIuaW5pdCgpOwotICAgICAgICBDYWxlbmRhciBkYXRlID0gbUFkYXB0ZXIubVNlbGVjdGVkRGF0ZTsKLSAgICAgICAgaWYgKGRhdGUuYWZ0ZXIobU1heERhdGUpKSB7Ci0gICAgICAgICAgICBzZXREYXRlKG1NYXhEYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHdlIGdvIHRvIHRoZSBjdXJyZW50IGRhdGUgdG8gZm9yY2UgdGhlIExpc3RWaWV3IHRvIHF1ZXJ5IGl0cwotICAgICAgICAgICAgLy8gYWRhcHRlciBmb3IgdGhlIHNob3duIHZpZXdzIHNpbmNlIHdlIGhhdmUgY2hhbmdlZCB0aGUgYWRhcHRlcgotICAgICAgICAgICAgLy8gcmFuZ2UgYW5kIHRoZSBiYXNlIGZyb20gd2hpY2ggdGhlIGxhdGVyIGNhbGN1bGF0ZXMgaXRlbSBpbmRpY2VzCi0gICAgICAgICAgICAvLyBub3RlIHRoYXQgY2FsbGluZyBzZXREYXRlIHdpbGwgbm90IHdvcmsgc2luY2UgdGhlIGRhdGUgaXMgdGhlIHNhbWUKLSAgICAgICAgICAgIGdvVG8oZGF0ZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICBtRGVsZWdhdGUuc2V0TWF4RGF0ZShtYXhEYXRlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTgxNSwxMiArNDAyLDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfc2hvd1dlZWtOdW1iZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTaG93V2Vla051bWJlcihib29sZWFuIHNob3dXZWVrTnVtYmVyKSB7Ci0gICAgICAgIGlmIChtU2hvd1dlZWtOdW1iZXIgPT0gc2hvd1dlZWtOdW1iZXIpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtU2hvd1dlZWtOdW1iZXIgPSBzaG93V2Vla051bWJlcjsKLSAgICAgICAgbUFkYXB0ZXIubm90aWZ5RGF0YVNldENoYW5nZWQoKTsKLSAgICAgICAgc2V0VXBIZWFkZXIoKTsKKyAgICAgICAgbURlbGVnYXRlLnNldFNob3dXZWVrTnVtYmVyKHNob3dXZWVrTnVtYmVyKTsKICAgICB9CiAKICAgICAvKioKQEAgLTgzMSw3ICs0MTMsNyBAQAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0NhbGVuZGFyVmlld19zaG93V2Vla051bWJlcgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGdldFNob3dXZWVrTnVtYmVyKCkgewotICAgICAgICByZXR1cm4gbVNob3dXZWVrTnVtYmVyOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldFNob3dXZWVrTnVtYmVyKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC04NTAsNyArNDMyLDcgQEAKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNDYWxlbmRhclZpZXdfZmlyc3REYXlPZldlZWsKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldEZpcnN0RGF5T2ZXZWVrKCkgewotICAgICAgICByZXR1cm4gbUZpcnN0RGF5T2ZXZWVrOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldEZpcnN0RGF5T2ZXZWVrKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC04NjksMTIgKzQ1MSw3IEBACiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjQ2FsZW5kYXJWaWV3X2ZpcnN0RGF5T2ZXZWVrCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Rmlyc3REYXlPZldlZWsoaW50IGZpcnN0RGF5T2ZXZWVrKSB7Ci0gICAgICAgIGlmIChtRmlyc3REYXlPZldlZWsgPT0gZmlyc3REYXlPZldlZWspIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtRmlyc3REYXlPZldlZWsgPSBmaXJzdERheU9mV2VlazsKLSAgICAgICAgbUFkYXB0ZXIuaW5pdCgpOwotICAgICAgICBzZXRVcEhlYWRlcigpOworICAgICAgICBtRGVsZWdhdGUuc2V0Rmlyc3REYXlPZldlZWsoZmlyc3REYXlPZldlZWspOwogICAgIH0KIAogICAgIC8qKgpAQCAtODgzLDcgKzQ2MCw3IEBACiAgICAgICogQHBhcmFtIGxpc3RlbmVyIFRoZSBsaXN0ZW5lciB0byBiZSBub3RpZmllZC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRPbkRhdGVDaGFuZ2VMaXN0ZW5lcihPbkRhdGVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICBtT25EYXRlQ2hhbmdlTGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICAgICAgbURlbGVnYXRlLnNldE9uRGF0ZUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyKTsKICAgICB9CiAKICAgICAvKioKQEAgLTg5Myw3ICs0NzAsNyBAQAogICAgICAqIEByZXR1cm4gVGhlIHNlbGVjdGVkIGRhdGUuCiAgICAgICovCiAgICAgcHVibGljIGxvbmcgZ2V0RGF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1BZGFwdGVyLm1TZWxlY3RlZERhdGUuZ2V0VGltZUluTWlsbGlzKCk7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0RGF0ZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtOTEwLDcgKzQ4Nyw3IEBACiAgICAgICogQHNlZSAjc2V0TWF4RGF0ZShsb25nKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGUobG9uZyBkYXRlKSB7Ci0gICAgICAgIHNldERhdGUoZGF0ZSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgbURlbGVnYXRlLnNldERhdGUoZGF0ZSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC05MjgsOTM0ICs1MDUsMTY0NSBAQAogICAgICAqIEBzZWUgI3NldE1heERhdGUobG9uZykKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRlKGxvbmcgZGF0ZSwgYm9vbGVhbiBhbmltYXRlLCBib29sZWFuIGNlbnRlcikgewotICAgICAgICBtVGVtcERhdGUuc2V0VGltZUluTWlsbGlzKGRhdGUpOwotICAgICAgICBpZiAoaXNTYW1lRGF0ZShtVGVtcERhdGUsIG1BZGFwdGVyLm1TZWxlY3RlZERhdGUpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZ29UbyhtVGVtcERhdGUsIGFuaW1hdGUsIHRydWUsIGNlbnRlcik7CisgICAgICAgIG1EZWxlZ2F0ZS5zZXREYXRlKGRhdGUsIGFuaW1hdGUsIGNlbnRlcik7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZURhdGVUZXh0U2l6ZSgpIHsKLSAgICAgICAgVHlwZWRBcnJheSBkYXRlVGV4dEFwcGVhcmFuY2UgPSBtQ29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAotICAgICAgICAgICAgICAgIG1EYXRlVGV4dEFwcGVhcmFuY2VSZXNJZCwgUi5zdHlsZWFibGUuVGV4dEFwcGVhcmFuY2UpOwotICAgICAgICBtRGF0ZVRleHRTaXplID0gZGF0ZVRleHRBcHBlYXJhbmNlLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5UZXh0QXBwZWFyYW5jZV90ZXh0U2l6ZSwgREVGQVVMVF9EQVRFX1RFWFRfU0laRSk7Ci0gICAgICAgIGRhdGVUZXh0QXBwZWFyYW5jZS5yZWN5Y2xlKCk7CisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25Db25maWd1cmF0aW9uQ2hhbmdlZChDb25maWd1cmF0aW9uIG5ld0NvbmZpZykgeworICAgICAgICBzdXBlci5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKG5ld0NvbmZpZyk7CisgICAgICAgIG1EZWxlZ2F0ZS5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKG5ld0NvbmZpZyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgICAgICBzdXBlci5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOworICAgICAgICBtRGVsZWdhdGUub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGluZm8pIHsKKyAgICAgICAgc3VwZXIub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKGluZm8pOworICAgICAgICBtRGVsZWdhdGUub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKGluZm8pOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIEludmFsaWRhdGVzIGFsbCB3ZWVrIHZpZXdzLgorICAgICAqIEEgZGVsZWdhdGUgaW50ZXJmYWNlIHRoYXQgZGVmaW5lZCB0aGUgcHVibGljIEFQSSBvZiB0aGUgQ2FsZW5kYXJWaWV3LiBBbGxvd3MgZGlmZmVyZW50CisgICAgICogQ2FsZW5kYXJWaWV3IGltcGxlbWVudGF0aW9ucy4gVGhpcyB3b3VsZCBuZWVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBDYWxlbmRhclZpZXcgZGVsZWdhdGVzCisgICAgICogZm9yIHRoZSByZWFsIGJlaGF2aW9yLgogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlQWxsV2Vla1ZpZXdzKCkgewotICAgICAgICBmaW5hbCBpbnQgY2hpbGRDb3VudCA9IG1MaXN0Vmlldy5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBWaWV3IHZpZXcgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgIHZpZXcuaW52YWxpZGF0ZSgpOworICAgIHByaXZhdGUgaW50ZXJmYWNlIENhbGVuZGFyVmlld0RlbGVnYXRlIHsKKyAgICAgICAgdm9pZCBzZXRTaG93bldlZWtDb3VudChpbnQgY291bnQpOworICAgICAgICBpbnQgZ2V0U2hvd25XZWVrQ291bnQoKTsKKworICAgICAgICB2b2lkIHNldFNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvcihpbnQgY29sb3IpOworICAgICAgICBpbnQgZ2V0U2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yKCk7CisKKyAgICAgICAgdm9pZCBzZXRGb2N1c2VkTW9udGhEYXRlQ29sb3IoaW50IGNvbG9yKTsKKyAgICAgICAgaW50IGdldEZvY3VzZWRNb250aERhdGVDb2xvcigpOworCisgICAgICAgIHZvaWQgc2V0VW5mb2N1c2VkTW9udGhEYXRlQ29sb3IoaW50IGNvbG9yKTsKKyAgICAgICAgaW50IGdldFVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yKCk7CisKKyAgICAgICAgdm9pZCBzZXRXZWVrTnVtYmVyQ29sb3IoaW50IGNvbG9yKTsKKyAgICAgICAgaW50IGdldFdlZWtOdW1iZXJDb2xvcigpOworCisgICAgICAgIHZvaWQgc2V0V2Vla1NlcGFyYXRvckxpbmVDb2xvcihpbnQgY29sb3IpOworICAgICAgICBpbnQgZ2V0V2Vla1NlcGFyYXRvckxpbmVDb2xvcigpOworCisgICAgICAgIHZvaWQgc2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoaW50IHJlc291cmNlSWQpOworICAgICAgICB2b2lkIHNldFNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyKERyYXdhYmxlIGRyYXdhYmxlKTsKKyAgICAgICAgRHJhd2FibGUgZ2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoKTsKKworICAgICAgICB2b2lkIHNldFdlZWtEYXlUZXh0QXBwZWFyYW5jZShpbnQgcmVzb3VyY2VJZCk7CisgICAgICAgIGludCBnZXRXZWVrRGF5VGV4dEFwcGVhcmFuY2UoKTsKKworICAgICAgICB2b2lkIHNldERhdGVUZXh0QXBwZWFyYW5jZShpbnQgcmVzb3VyY2VJZCk7CisgICAgICAgIGludCBnZXREYXRlVGV4dEFwcGVhcmFuY2UoKTsKKworICAgICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKTsKKyAgICAgICAgYm9vbGVhbiBpc0VuYWJsZWQoKTsKKworICAgICAgICB2b2lkIHNldE1pbkRhdGUobG9uZyBtaW5EYXRlKTsKKyAgICAgICAgbG9uZyBnZXRNaW5EYXRlKCk7CisKKyAgICAgICAgdm9pZCBzZXRNYXhEYXRlKGxvbmcgbWF4RGF0ZSk7CisgICAgICAgIGxvbmcgZ2V0TWF4RGF0ZSgpOworCisgICAgICAgIHZvaWQgc2V0U2hvd1dlZWtOdW1iZXIoYm9vbGVhbiBzaG93V2Vla051bWJlcik7CisgICAgICAgIGJvb2xlYW4gZ2V0U2hvd1dlZWtOdW1iZXIoKTsKKworICAgICAgICB2b2lkIHNldEZpcnN0RGF5T2ZXZWVrKGludCBmaXJzdERheU9mV2Vlayk7CisgICAgICAgIGludCBnZXRGaXJzdERheU9mV2VlaygpOworCisgICAgICAgIHZvaWQgc2V0RGF0ZShsb25nIGRhdGUpOworICAgICAgICB2b2lkIHNldERhdGUobG9uZyBkYXRlLCBib29sZWFuIGFuaW1hdGUsIGJvb2xlYW4gY2VudGVyKTsKKyAgICAgICAgbG9uZyBnZXREYXRlKCk7CisKKyAgICAgICAgdm9pZCBzZXRPbkRhdGVDaGFuZ2VMaXN0ZW5lcihPbkRhdGVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lcik7CisKKyAgICAgICAgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKTsKKyAgICAgICAgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KTsKKyAgICAgICAgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGluZm8pOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFuIGFic3RyYWN0IGNsYXNzIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGEgc3RhcnQgZm9yIENhbGVuZGFyVmlldyBpbXBsZW1lbnRhdGlvbnMKKyAgICAgKi8KKyAgICBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgQWJzdHJhY3RDYWxlbmRhclZpZXdEZWxlZ2F0ZSBpbXBsZW1lbnRzIENhbGVuZGFyVmlld0RlbGVnYXRlIHsKKyAgICAgICAgLy8gVGhlIGRlbGVnYXRvcgorICAgICAgICBwcm90ZWN0ZWQgQ2FsZW5kYXJWaWV3IG1EZWxlZ2F0b3I7CisKKyAgICAgICAgLy8gVGhlIGNvbnRleHQKKyAgICAgICAgcHJvdGVjdGVkIENvbnRleHQgbUNvbnRleHQ7CisKKyAgICAgICAgLy8gVGhlIGN1cnJlbnQgbG9jYWxlCisgICAgICAgIHByb3RlY3RlZCBMb2NhbGUgbUN1cnJlbnRMb2NhbGU7CisKKyAgICAgICAgQWJzdHJhY3RDYWxlbmRhclZpZXdEZWxlZ2F0ZShDYWxlbmRhclZpZXcgZGVsZWdhdG9yLCBDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgIG1EZWxlZ2F0b3IgPSBkZWxlZ2F0b3I7CisgICAgICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisKKyAgICAgICAgICAgIC8vIEluaXRpYWxpemF0aW9uIGJhc2VkIG9uIGxvY2FsZQorICAgICAgICAgICAgc2V0Q3VycmVudExvY2FsZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHNldEN1cnJlbnRMb2NhbGUoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICAgICAgaWYgKGxvY2FsZS5lcXVhbHMobUN1cnJlbnRMb2NhbGUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUN1cnJlbnRMb2NhbGUgPSBsb2NhbGU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGxvY2FsZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBsb2NhbGUgVGhlIGN1cnJlbnQgbG9jYWxlLgorICAgICAqIEEgZGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBsZWdhY3kgQ2FsZW5kYXJWaWV3CiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNldEN1cnJlbnRMb2NhbGUoTG9jYWxlIGxvY2FsZSkgewotICAgICAgICBpZiAobG9jYWxlLmVxdWFscyhtQ3VycmVudExvY2FsZSkpIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBMZWdhY3lDYWxlbmRhclZpZXdEZWxlZ2F0ZSBleHRlbmRzIEFic3RyYWN0Q2FsZW5kYXJWaWV3RGVsZWdhdGUgeworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZhdWx0IHZhbHVlIHdoZXRoZXIgdG8gc2hvdyB3ZWVrIG51bWJlci4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9TSE9XX1dFRUtfTlVNQkVSID0gdHJ1ZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSBkYXkuZQorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBNSUxMSVNfSU5fREFZID0gODY0MDAwMDBMOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIGRheSBpbiBhIHdlZWsuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREFZU19QRVJfV0VFSyA9IDc7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2Vlay4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgTUlMTElTX0lOX1dFRUsgPSBEQVlTX1BFUl9XRUVLICogTUlMTElTX0lOX0RBWTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQWZmZWN0cyB3aGVuIHRoZSBtb250aCBzZWxlY3Rpb24gd2lsbCBjaGFuZ2Ugd2hpbGUgc2Nyb2xsaW5nIHVwZQorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDUk9MTF9IWVNUX1dFRUtTID0gMjsKKworICAgICAgICAvKioKKyAgICAgICAgICogSG93IGxvbmcgdGhlIEdvVG8gZmxpbmcgYW5pbWF0aW9uIHNob3VsZCBsYXN0LgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEdPVE9fU0NST0xMX0RVUkFUSU9OID0gMTAwMDsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSBhZGp1c3RtZW50IHVwb24gYSB1c2VyIHNjcm9sbCBpbiBtaWxsaXNlY29uZHMuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQURKVVNUTUVOVF9TQ1JPTExfRFVSQVRJT04gPSA1MDA7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEhvdyBsb25nIHRvIHdhaXQgYWZ0ZXIgcmVjZWl2aW5nIGFuIG9uU2Nyb2xsU3RhdGVDaGFuZ2VkIG5vdGlmaWNhdGlvbgorICAgICAgICAgKiBiZWZvcmUgYWN0aW5nIG9uIGl0LgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDUk9MTF9DSEFOR0VfREVMQVkgPSA0MDsKKworICAgICAgICAvKioKKyAgICAgICAgICogU3RyaW5nIGZvciBwYXJzaW5nIGRhdGVzLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEVfRk9STUFUID0gIk1NL2RkL3l5eXkiOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZGVmYXVsdCBtaW5pbWFsIGRhdGUuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9NSU5fREFURSA9ICIwMS8wMS8xOTAwIjsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGRlZmF1bHQgbWF4aW1hbCBkYXRlLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTUFYX0RBVEUgPSAiMDEvMDEvMjEwMCI7CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfU0hPV05fV0VFS19DT1VOVCA9IDY7CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfREFURV9URVhUX1NJWkUgPSAxNDsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5TQ0FMRURfU0VMRUNURURfREFURV9WRVJUSUNBTF9CQVJfV0lEVEggPSA2OworCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNDQUxFRF9XRUVLX01JTl9WSVNJQkxFX0hFSUdIVCA9IDEyOworCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNDQUxFRF9MSVNUX1NDUk9MTF9UT1BfT0ZGU0VUID0gMjsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5TQ0FMRURfQk9UVE9NX0JVRkZFUiA9IDIwOworCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTlNDQUxFRF9XRUVLX1NFUEFSQVRPUl9MSU5FX1dJRFRIID0gMTsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9XRUVLX0RBWV9URVhUX0FQUEVBUkFOQ0VfUkVTX0lEID0gLTE7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVdlZWtTZXBlcmF0b3JMaW5lV2lkdGg7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgbURhdGVUZXh0U2l6ZTsKKworICAgICAgICBwcml2YXRlIERyYXdhYmxlIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhcjsKKworICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXJXaWR0aDsKKworICAgICAgICBwcml2YXRlIGludCBtU2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yOworCisgICAgICAgIHByaXZhdGUgaW50IG1Gb2N1c2VkTW9udGhEYXRlQ29sb3I7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yOworCisgICAgICAgIHByaXZhdGUgaW50IG1XZWVrU2VwYXJhdG9yTGluZUNvbG9yOworCisgICAgICAgIHByaXZhdGUgaW50IG1XZWVrTnVtYmVyQ29sb3I7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkOworCisgICAgICAgIHByaXZhdGUgaW50IG1EYXRlVGV4dEFwcGVhcmFuY2VSZXNJZDsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHRvcCBvZmZzZXQgb2YgdGhlIHdlZWtzIGxpc3QuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtTGlzdFNjcm9sbFRvcE9mZnNldCA9IDI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB2aXNpYmxlIGhlaWdodCBvZiBhIHdlZWsgdmlldy4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgaW50IG1XZWVrTWluVmlzaWJsZUhlaWdodCA9IDEyOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgdmlzaWJsZSBoZWlnaHQgb2YgYSB3ZWVrIHZpZXcuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtQm90dG9tQnVmZmVyID0gMjA7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBudW1iZXIgb2Ygc2hvd24gd2Vla3MuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtU2hvd25XZWVrQ291bnQ7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZsYWcgd2hldGhlciB0byBzaG93IHRoZSB3ZWVrIG51bWJlci4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtU2hvd1dlZWtOdW1iZXI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBudW1iZXIgb2YgZGF5IHBlciB3ZWVrIHRvIGJlIHNob3duLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBpbnQgbURheXNQZXJXZWVrID0gNzsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGZyaWN0aW9uIG9mIHRoZSB3ZWVrIGxpc3Qgd2hpbGUgZmxpbmdpbmcuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGZsb2F0IG1GcmljdGlvbiA9IC4wNWY7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNjYWxlIGZvciBhZGp1c3RpbmcgdmVsb2NpdHkgb2YgdGhlIHdlZWsgbGlzdCB3aGlsZSBmbGluZ2luZy4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgZmxvYXQgbVZlbG9jaXR5U2NhbGUgPSAwLjMzM2Y7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBhZGFwdGVyIGZvciB0aGUgd2Vla3MgbGlzdC4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgV2Vla3NBZGFwdGVyIG1BZGFwdGVyOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgd2Vla3MgbGlzdC4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgTGlzdFZpZXcgbUxpc3RWaWV3OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgbW9udGggdG8gZGlzcGxheS4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgVGV4dFZpZXcgbU1vbnRoTmFtZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGhlYWRlciB3aXRoIHdlZWsgZGF5IG5hbWVzLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBWaWV3R3JvdXAgbURheU5hbWVzSGVhZGVyOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWNoZWQgbGFiZWxzIGZvciB0aGUgd2VlayBuYW1lcyBoZWFkZXIuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIFN0cmluZ1tdIG1EYXlMYWJlbHM7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtRmlyc3REYXlPZldlZWs7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFdoaWNoIG1vbnRoIHNob3VsZCBiZSBkaXNwbGF5ZWQvaGlnaGxpZ2h0ZWQgWzAtMTFdLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBpbnQgbUN1cnJlbnRNb250aERpc3BsYXllZCA9IC0xOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBVc2VkIGZvciB0cmFja2luZyBkdXJpbmcgYSBzY3JvbGwuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGxvbmcgbVByZXZpb3VzU2Nyb2xsUG9zaXRpb247CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVzZWQgZm9yIHRyYWNraW5nIHdoaWNoIGRpcmVjdGlvbiB0aGUgdmlldyBpcyBzY3JvbGxpbmcuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUlzU2Nyb2xsaW5nVXAgPSBmYWxzZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHByZXZpb3VzIHNjcm9sbCBzdGF0ZSBvZiB0aGUgd2Vla3MgTGlzdFZpZXcuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtUHJldmlvdXNTY3JvbGxTdGF0ZSA9IE9uU2Nyb2xsTGlzdGVuZXIuU0NST0xMX1NUQVRFX0lETEU7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBjdXJyZW50IHNjcm9sbCBzdGF0ZSBvZiB0aGUgd2Vla3MgTGlzdFZpZXcuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBtQ3VycmVudFNjcm9sbFN0YXRlID0gT25TY3JvbGxMaXN0ZW5lci5TQ1JPTExfU1RBVEVfSURMRTsKKworICAgICAgICAvKioKKyAgICAgICAgICogTGlzdGVuZXIgZm9yIGNoYW5nZXMgaW4gdGhlIHNlbGVjdGVkIGRheS4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgT25EYXRlQ2hhbmdlTGlzdGVuZXIgbU9uRGF0ZUNoYW5nZUxpc3RlbmVyOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb21tYW5kIGZvciBhZGp1c3RpbmcgdGhlIHBvc2l0aW9uIGFmdGVyIGEgc2Nyb2xsL2ZsaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBTY3JvbGxTdGF0ZVJ1bm5hYmxlIG1TY3JvbGxTdGF0ZUNoYW5nZWRSdW5uYWJsZSA9IG5ldyBTY3JvbGxTdGF0ZVJ1bm5hYmxlKCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRlbXBvcmFyeSBpbnN0YW5jZSB0byBhdm9pZCBtdWx0aXBsZSBpbnN0YW50aWF0aW9ucy4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgQ2FsZW5kYXIgbVRlbXBEYXRlOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZmlyc3QgZGF5IG9mIHRoZSBmb2N1c2VkIG1vbnRoLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBDYWxlbmRhciBtRmlyc3REYXlPZk1vbnRoOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc3RhcnQgZGF0ZSBvZiB0aGUgcmFuZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgcGlja2VyLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBDYWxlbmRhciBtTWluRGF0ZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGVuZCBkYXRlIG9mIHRoZSByYW5nZSBzdXBwb3J0ZWQgYnkgdGhpcyBwaWNrZXIuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIENhbGVuZGFyIG1NYXhEYXRlOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBEYXRlIGZvcm1hdCBmb3IgcGFyc2luZyBkYXRlcy4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgZmluYWwgamF2YS50ZXh0LkRhdGVGb3JtYXQgbURhdGVGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChEQVRFX0ZPUk1BVCk7CisKKyAgICAgICAgTGVnYWN5Q2FsZW5kYXJWaWV3RGVsZWdhdGUoQ2FsZW5kYXJWaWV3IGRlbGVnYXRvciwgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICAgICAgc3VwZXIoZGVsZWdhdG9yLCBjb250ZXh0KTsKKworICAgICAgICAgICAgLy8gaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gbG9jYWxlCisgICAgICAgICAgICBzZXRDdXJyZW50TG9jYWxlKExvY2FsZS5nZXREZWZhdWx0KCkpOworCisgICAgICAgICAgICBUeXBlZEFycmF5IGF0dHJpYnV0ZXNBcnJheSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKyAgICAgICAgICAgIG1TaG93V2Vla051bWJlciA9IGF0dHJpYnV0ZXNBcnJheS5nZXRCb29sZWFuKFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlld19zaG93V2Vla051bWJlciwKKyAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9TSE9XX1dFRUtfTlVNQkVSKTsKKyAgICAgICAgICAgIG1GaXJzdERheU9mV2VlayA9IGF0dHJpYnV0ZXNBcnJheS5nZXRJbnQoUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X2ZpcnN0RGF5T2ZXZWVrLAorICAgICAgICAgICAgICAgICAgICBMb2NhbGVEYXRhLmdldChMb2NhbGUuZ2V0RGVmYXVsdCgpKS5maXJzdERheU9mV2Vlayk7CisgICAgICAgICAgICBTdHJpbmcgbWluRGF0ZSA9IGF0dHJpYnV0ZXNBcnJheS5nZXRTdHJpbmcoUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X21pbkRhdGUpOworICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG1pbkRhdGUpIHx8ICFwYXJzZURhdGUobWluRGF0ZSwgbU1pbkRhdGUpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VEYXRlKERFRkFVTFRfTUlOX0RBVEUsIG1NaW5EYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBtYXhEYXRlID0gYXR0cmlidXRlc0FycmF5LmdldFN0cmluZyhSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfbWF4RGF0ZSk7CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkobWF4RGF0ZSkgfHwgIXBhcnNlRGF0ZShtYXhEYXRlLCBtTWF4RGF0ZSkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZURhdGUoREVGQVVMVF9NQVhfREFURSwgbU1heERhdGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1NYXhEYXRlLmJlZm9yZShtTWluRGF0ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNYXggZGF0ZSBjYW5ub3QgYmUgYmVmb3JlIG1pbiBkYXRlLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVNob3duV2Vla0NvdW50ID0gYXR0cmlidXRlc0FycmF5LmdldEludChSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfc2hvd25XZWVrQ291bnQsCisgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfU0hPV05fV0VFS19DT1VOVCk7CisgICAgICAgICAgICBtU2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yID0gYXR0cmlidXRlc0FycmF5LmdldENvbG9yKAorICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfc2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yLCAwKTsKKyAgICAgICAgICAgIG1Gb2N1c2VkTW9udGhEYXRlQ29sb3IgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Q29sb3IoCisgICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlld19mb2N1c2VkTW9udGhEYXRlQ29sb3IsIDApOworICAgICAgICAgICAgbVVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yID0gYXR0cmlidXRlc0FycmF5LmdldENvbG9yKAorICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfdW5mb2N1c2VkTW9udGhEYXRlQ29sb3IsIDApOworICAgICAgICAgICAgbVdlZWtTZXBhcmF0b3JMaW5lQ29sb3IgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Q29sb3IoCisgICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlld193ZWVrU2VwYXJhdG9yTGluZUNvbG9yLCAwKTsKKyAgICAgICAgICAgIG1XZWVrTnVtYmVyQ29sb3IgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Q29sb3IoUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X3dlZWtOdW1iZXJDb2xvciwgMCk7CisgICAgICAgICAgICBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXIgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0RHJhd2FibGUoCisgICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkNhbGVuZGFyVmlld19zZWxlY3RlZERhdGVWZXJ0aWNhbEJhcik7CisKKyAgICAgICAgICAgIG1EYXRlVGV4dEFwcGVhcmFuY2VSZXNJZCA9IGF0dHJpYnV0ZXNBcnJheS5nZXRSZXNvdXJjZUlkKAorICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5DYWxlbmRhclZpZXdfZGF0ZVRleHRBcHBlYXJhbmNlLCBSLnN0eWxlLlRleHRBcHBlYXJhbmNlX1NtYWxsKTsKKyAgICAgICAgICAgIHVwZGF0ZURhdGVUZXh0U2l6ZSgpOworCisgICAgICAgICAgICBtV2Vla0RheVRleHRBcHBlYXJhbmNlUmVzSWQgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0UmVzb3VyY2VJZCgKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuQ2FsZW5kYXJWaWV3X3dlZWtEYXlUZXh0QXBwZWFyYW5jZSwKKyAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9XRUVLX0RBWV9URVhUX0FQUEVBUkFOQ0VfUkVTX0lEKTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXNBcnJheS5yZWN5Y2xlKCk7CisKKyAgICAgICAgICAgIERpc3BsYXlNZXRyaWNzIGRpc3BsYXlNZXRyaWNzID0gbURlbGVnYXRvci5nZXRSZXNvdXJjZXMoKS5nZXREaXNwbGF5TWV0cmljcygpOworICAgICAgICAgICAgbVdlZWtNaW5WaXNpYmxlSGVpZ2h0ID0gKGludCkgVHlwZWRWYWx1ZS5hcHBseURpbWVuc2lvbihUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9ESVAsCisgICAgICAgICAgICAgICAgICAgIFVOU0NBTEVEX1dFRUtfTUlOX1ZJU0lCTEVfSEVJR0hULCBkaXNwbGF5TWV0cmljcyk7CisgICAgICAgICAgICBtTGlzdFNjcm9sbFRvcE9mZnNldCA9IChpbnQpIFR5cGVkVmFsdWUuYXBwbHlEaW1lbnNpb24oVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfRElQLAorICAgICAgICAgICAgICAgICAgICBVTlNDQUxFRF9MSVNUX1NDUk9MTF9UT1BfT0ZGU0VULCBkaXNwbGF5TWV0cmljcyk7CisgICAgICAgICAgICBtQm90dG9tQnVmZmVyID0gKGludCkgVHlwZWRWYWx1ZS5hcHBseURpbWVuc2lvbihUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9ESVAsCisgICAgICAgICAgICAgICAgICAgIFVOU0NBTEVEX0JPVFRPTV9CVUZGRVIsIGRpc3BsYXlNZXRyaWNzKTsKKyAgICAgICAgICAgIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhcldpZHRoID0gKGludCkgVHlwZWRWYWx1ZS5hcHBseURpbWVuc2lvbihUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9ESVAsCisgICAgICAgICAgICAgICAgICAgIFVOU0NBTEVEX1NFTEVDVEVEX0RBVEVfVkVSVElDQUxfQkFSX1dJRFRILCBkaXNwbGF5TWV0cmljcyk7CisgICAgICAgICAgICBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aCA9IChpbnQpIFR5cGVkVmFsdWUuYXBwbHlEaW1lbnNpb24oVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfRElQLAorICAgICAgICAgICAgICAgICAgICBVTlNDQUxFRF9XRUVLX1NFUEFSQVRPUl9MSU5FX1dJRFRILCBkaXNwbGF5TWV0cmljcyk7CisKKyAgICAgICAgICAgIExheW91dEluZmxhdGVyIGxheW91dEluZmxhdGVyID0gKExheW91dEluZmxhdGVyKSBtQ29udGV4dAorICAgICAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShTZXJ2aWNlLkxBWU9VVF9JTkZMQVRFUl9TRVJWSUNFKTsKKyAgICAgICAgICAgIFZpZXcgY29udGVudCA9IGxheW91dEluZmxhdGVyLmluZmxhdGUoUi5sYXlvdXQuY2FsZW5kYXJfdmlldywgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgbURlbGVnYXRvci5hZGRWaWV3KGNvbnRlbnQpOworCisgICAgICAgICAgICBtTGlzdFZpZXcgPSAoTGlzdFZpZXcpIG1EZWxlZ2F0b3IuZmluZFZpZXdCeUlkKFIuaWQubGlzdCk7CisgICAgICAgICAgICBtRGF5TmFtZXNIZWFkZXIgPSAoVmlld0dyb3VwKSBjb250ZW50LmZpbmRWaWV3QnlJZChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLmRheV9uYW1lcyk7CisgICAgICAgICAgICBtTW9udGhOYW1lID0gKFRleHRWaWV3KSBjb250ZW50LmZpbmRWaWV3QnlJZChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLm1vbnRoX25hbWUpOworCisgICAgICAgICAgICBzZXRVcEhlYWRlcigpOworICAgICAgICAgICAgc2V0VXBMaXN0VmlldygpOworICAgICAgICAgICAgc2V0VXBBZGFwdGVyKCk7CisKKyAgICAgICAgICAgIC8vIGdvIHRvIHRvZGF5IG9yIHdoaWNoZXZlciBpcyBjbG9zZSB0byB0b2RheSBtaW4gb3IgbWF4IGRhdGUKKyAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXRUaW1lSW5NaWxsaXMoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOworICAgICAgICAgICAgaWYgKG1UZW1wRGF0ZS5iZWZvcmUobU1pbkRhdGUpKSB7CisgICAgICAgICAgICAgICAgZ29UbyhtTWluRGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtTWF4RGF0ZS5iZWZvcmUobVRlbXBEYXRlKSkgeworICAgICAgICAgICAgICAgIGdvVG8obU1heERhdGUsIGZhbHNlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZ29UbyhtVGVtcERhdGUsIGZhbHNlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbURlbGVnYXRvci5pbnZhbGlkYXRlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBtQ3VycmVudExvY2FsZSA9IGxvY2FsZTsKLQotICAgICAgICBtVGVtcERhdGUgPSBnZXRDYWxlbmRhckZvckxvY2FsZShtVGVtcERhdGUsIGxvY2FsZSk7Ci0gICAgICAgIG1GaXJzdERheU9mTW9udGggPSBnZXRDYWxlbmRhckZvckxvY2FsZShtRmlyc3REYXlPZk1vbnRoLCBsb2NhbGUpOwotICAgICAgICBtTWluRGF0ZSA9IGdldENhbGVuZGFyRm9yTG9jYWxlKG1NaW5EYXRlLCBsb2NhbGUpOwotICAgICAgICBtTWF4RGF0ZSA9IGdldENhbGVuZGFyRm9yTG9jYWxlKG1NYXhEYXRlLCBsb2NhbGUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgYSBjYWxlbmRhciBmb3IgbG9jYWxlIGJvb3RzdHJhcHBlZCB3aXRoIHRoZSB2YWx1ZSBvZiBhIGdpdmVuIGNhbGVuZGFyLgotICAgICAqCi0gICAgICogQHBhcmFtIG9sZENhbGVuZGFyIFRoZSBvbGQgY2FsZW5kYXIuCi0gICAgICogQHBhcmFtIGxvY2FsZSBUaGUgbG9jYWxlLgotICAgICAqLwotICAgIHByaXZhdGUgQ2FsZW5kYXIgZ2V0Q2FsZW5kYXJGb3JMb2NhbGUoQ2FsZW5kYXIgb2xkQ2FsZW5kYXIsIExvY2FsZSBsb2NhbGUpIHsKLSAgICAgICAgaWYgKG9sZENhbGVuZGFyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2NhbGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmluYWwgbG9uZyBjdXJyZW50VGltZU1pbGxpcyA9IG9sZENhbGVuZGFyLmdldFRpbWVJbk1pbGxpcygpOwotICAgICAgICAgICAgQ2FsZW5kYXIgbmV3Q2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2NhbGUpOwotICAgICAgICAgICAgbmV3Q2FsZW5kYXIuc2V0VGltZUluTWlsbGlzKGN1cnJlbnRUaW1lTWlsbGlzKTsKLSAgICAgICAgICAgIHJldHVybiBuZXdDYWxlbmRhcjsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldFNob3duV2Vla0NvdW50KGludCBjb3VudCkgeworICAgICAgICAgICAgaWYgKG1TaG93bldlZWtDb3VudCAhPSBjb3VudCkgeworICAgICAgICAgICAgICAgIG1TaG93bldlZWtDb3VudCA9IGNvdW50OworICAgICAgICAgICAgICAgIG1EZWxlZ2F0b3IuaW52YWxpZGF0ZSgpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQogCi0gICAgLyoqCi0gICAgICogQHJldHVybiBUcnVlIGlmIHRoZSA8Y29kZT5maXJzdERhdGU8L2NvZGU+IGlzIHRoZSBzYW1lIGFzIHRoZSA8Y29kZT4KLSAgICAgKiBzZWNvbmREYXRlPC9jb2RlPi4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNTYW1lRGF0ZShDYWxlbmRhciBmaXJzdERhdGUsIENhbGVuZGFyIHNlY29uZERhdGUpIHsKLSAgICAgICAgcmV0dXJuIChmaXJzdERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSA9PSBzZWNvbmREYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikKLSAgICAgICAgICAgICAgICAmJiBmaXJzdERhdGUuZ2V0KENhbGVuZGFyLllFQVIpID09IHNlY29uZERhdGUuZ2V0KENhbGVuZGFyLllFQVIpKTsKLSAgICB9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGdldFNob3duV2Vla0NvdW50KCkgeworICAgICAgICAgICAgcmV0dXJuIG1TaG93bldlZWtDb3VudDsKKyAgICAgICAgfQogCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGlmIG5lY2Vzc2FyeSBhbmQgc2V0cyB1cCBpdHMgcGFyYW1ldGVycy4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2V0VXBBZGFwdGVyKCkgewotICAgICAgICBpZiAobUFkYXB0ZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgbUFkYXB0ZXIgPSBuZXcgV2Vla3NBZGFwdGVyKCk7Ci0gICAgICAgICAgICBtQWRhcHRlci5yZWdpc3RlckRhdGFTZXRPYnNlcnZlcihuZXcgRGF0YVNldE9ic2VydmVyKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hhbmdlZCgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1PbkRhdGVDaGFuZ2VMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhciBzZWxlY3RlZERheSA9IG1BZGFwdGVyLmdldFNlbGVjdGVkRGF5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtT25EYXRlQ2hhbmdlTGlzdGVuZXIub25TZWxlY3RlZERheUNoYW5nZShDYWxlbmRhclZpZXcudGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWREYXkuZ2V0KENhbGVuZGFyLllFQVIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZERheS5nZXQoQ2FsZW5kYXIuTU9OVEgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZERheS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IoaW50IGNvbG9yKSB7CisgICAgICAgICAgICBpZiAobVNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvciAhPSBjb2xvcikgeworICAgICAgICAgICAgICAgIG1TZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgY2hpbGRDb3VudCA9IG1MaXN0Vmlldy5nZXRDaGlsZENvdW50KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgV2Vla1ZpZXcgd2Vla1ZpZXcgPSAoV2Vla1ZpZXcpIG1MaXN0Vmlldy5nZXRDaGlsZEF0KGkpOworICAgICAgICAgICAgICAgICAgICBpZiAod2Vla1ZpZXcubUhhc1NlbGVjdGVkRGF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZWVrVmlldy5pbnZhbGlkYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIG1MaXN0Vmlldy5zZXRBZGFwdGVyKG1BZGFwdGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHJlZnJlc2ggdGhlIHZpZXcgd2l0aCB0aGUgbmV3IHBhcmFtZXRlcnMKLSAgICAgICAgbUFkYXB0ZXIubm90aWZ5RGF0YVNldENoYW5nZWQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHVwIHRoZSBzdHJpbmdzIHRvIGJlIHVzZWQgYnkgdGhlIGhlYWRlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2V0VXBIZWFkZXIoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZ1tdIHRpbnlXZWVrZGF5TmFtZXMgPSBMb2NhbGVEYXRhLmdldChMb2NhbGUuZ2V0RGVmYXVsdCgpKS50aW55V2Vla2RheU5hbWVzOwotICAgICAgICBtRGF5TGFiZWxzID0gbmV3IFN0cmluZ1ttRGF5c1BlcldlZWtdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1EYXlzUGVyV2VlazsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgaiA9IGkgKyBtRmlyc3REYXlPZldlZWs7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY2FsZW5kYXJEYXkgPSAoaiA+IENhbGVuZGFyLlNBVFVSREFZKSA/IGogLSBDYWxlbmRhci5TQVRVUkRBWSA6IGo7Ci0gICAgICAgICAgICBtRGF5TGFiZWxzW2ldID0gdGlueVdlZWtkYXlOYW1lc1tjYWxlbmRhckRheV07Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRGVhbCB3aXRoIHdlZWsgbnVtYmVyCi0gICAgICAgIFRleHRWaWV3IGxhYmVsID0gKFRleHRWaWV3KSBtRGF5TmFtZXNIZWFkZXIuZ2V0Q2hpbGRBdCgwKTsKLSAgICAgICAgaWYgKG1TaG93V2Vla051bWJlcikgewotICAgICAgICAgICAgbGFiZWwuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbGFiZWwuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICB9Ci0gICAgICAgIC8vIERlYWwgd2l0aCBkYXkgbGFiZWxzCi0gICAgICAgIGZpbmFsIGludCBjb3VudCA9IG1EYXlOYW1lc0hlYWRlci5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgLSAxOyBpKyspIHsKLSAgICAgICAgICAgIGxhYmVsID0gKFRleHRWaWV3KSBtRGF5TmFtZXNIZWFkZXIuZ2V0Q2hpbGRBdChpICsgMSk7Ci0gICAgICAgICAgICBpZiAobVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkID4gLTEpIHsKLSAgICAgICAgICAgICAgICBsYWJlbC5zZXRUZXh0QXBwZWFyYW5jZShtQ29udGV4dCwgbVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpIDwgbURheXNQZXJXZWVrKSB7Ci0gICAgICAgICAgICAgICAgbGFiZWwuc2V0VGV4dChtRGF5TGFiZWxzW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGdldFNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvcigpIHsKKyAgICAgICAgICAgIHJldHVybiBtU2VsZWN0ZWRXZWVrQmFja2dyb3VuZENvbG9yOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEZvY3VzZWRNb250aERhdGVDb2xvcihpbnQgY29sb3IpIHsKKyAgICAgICAgICAgIGlmIChtRm9jdXNlZE1vbnRoRGF0ZUNvbG9yICE9IGNvbG9yKSB7CisgICAgICAgICAgICAgICAgbUZvY3VzZWRNb250aERhdGVDb2xvciA9IGNvbG9yOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZENvdW50ID0gbUxpc3RWaWV3LmdldENoaWxkQ291bnQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBXZWVrVmlldyB3ZWVrVmlldyA9IChXZWVrVmlldykgbUxpc3RWaWV3LmdldENoaWxkQXQoaSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh3ZWVrVmlldy5tSGFzRm9jdXNlZERheSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd2Vla1ZpZXcuaW52YWxpZGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0Rm9jdXNlZE1vbnRoRGF0ZUNvbG9yKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Gb2N1c2VkTW9udGhEYXRlQ29sb3I7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0VW5mb2N1c2VkTW9udGhEYXRlQ29sb3IoaW50IGNvbG9yKSB7CisgICAgICAgICAgICBpZiAobVVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yICE9IGNvbG9yKSB7CisgICAgICAgICAgICAgICAgbVVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yID0gY29sb3I7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRDb3VudCgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFdlZWtWaWV3IHdlZWtWaWV3ID0gKFdlZWtWaWV3KSBtTGlzdFZpZXcuZ2V0Q2hpbGRBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdlZWtWaWV3Lm1IYXNVbmZvY3VzZWREYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3LmludmFsaWRhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGdldFVuZm9jdXNlZE1vbnRoRGF0ZUNvbG9yKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Gb2N1c2VkTW9udGhEYXRlQ29sb3I7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0V2Vla051bWJlckNvbG9yKGludCBjb2xvcikgeworICAgICAgICAgICAgaWYgKG1XZWVrTnVtYmVyQ29sb3IgIT0gY29sb3IpIHsKKyAgICAgICAgICAgICAgICBtV2Vla051bWJlckNvbG9yID0gY29sb3I7CisgICAgICAgICAgICAgICAgaWYgKG1TaG93V2Vla051bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlQWxsV2Vla1ZpZXdzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0V2Vla051bWJlckNvbG9yKCkgeworICAgICAgICAgICAgcmV0dXJuIG1XZWVrTnVtYmVyQ29sb3I7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0V2Vla1NlcGFyYXRvckxpbmVDb2xvcihpbnQgY29sb3IpIHsKKyAgICAgICAgICAgIGlmIChtV2Vla1NlcGFyYXRvckxpbmVDb2xvciAhPSBjb2xvcikgeworICAgICAgICAgICAgICAgIG1XZWVrU2VwYXJhdG9yTGluZUNvbG9yID0gY29sb3I7CisgICAgICAgICAgICAgICAgaW52YWxpZGF0ZUFsbFdlZWtWaWV3cygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0V2Vla1NlcGFyYXRvckxpbmVDb2xvcigpIHsKKyAgICAgICAgICAgIHJldHVybiBtV2Vla1NlcGFyYXRvckxpbmVDb2xvcjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZERhdGVWZXJ0aWNhbEJhcihpbnQgcmVzb3VyY2VJZCkgeworICAgICAgICAgICAgRHJhd2FibGUgZHJhd2FibGUgPSBtRGVsZWdhdG9yLmdldFJlc291cmNlcygpLmdldERyYXdhYmxlKHJlc291cmNlSWQpOworICAgICAgICAgICAgc2V0U2VsZWN0ZWREYXRlVmVydGljYWxCYXIoZHJhd2FibGUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyKERyYXdhYmxlIGRyYXdhYmxlKSB7CisgICAgICAgICAgICBpZiAobVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyICE9IGRyYXdhYmxlKSB7CisgICAgICAgICAgICAgICAgbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyID0gZHJhd2FibGU7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRDb3VudCgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFdlZWtWaWV3IHdlZWtWaWV3ID0gKFdlZWtWaWV3KSBtTGlzdFZpZXcuZ2V0Q2hpbGRBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdlZWtWaWV3Lm1IYXNTZWxlY3RlZERheSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd2Vla1ZpZXcuaW52YWxpZGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBEcmF3YWJsZSBnZXRTZWxlY3RlZERhdGVWZXJ0aWNhbEJhcigpIHsKKyAgICAgICAgICAgIHJldHVybiBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0V2Vla0RheVRleHRBcHBlYXJhbmNlKGludCByZXNvdXJjZUlkKSB7CisgICAgICAgICAgICBpZiAobVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkICE9IHJlc291cmNlSWQpIHsKKyAgICAgICAgICAgICAgICBtV2Vla0RheVRleHRBcHBlYXJhbmNlUmVzSWQgPSByZXNvdXJjZUlkOworICAgICAgICAgICAgICAgIHNldFVwSGVhZGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBnZXRXZWVrRGF5VGV4dEFwcGVhcmFuY2UoKSB7CisgICAgICAgICAgICByZXR1cm4gbVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldERhdGVUZXh0QXBwZWFyYW5jZShpbnQgcmVzb3VyY2VJZCkgeworICAgICAgICAgICAgaWYgKG1EYXRlVGV4dEFwcGVhcmFuY2VSZXNJZCAhPSByZXNvdXJjZUlkKSB7CisgICAgICAgICAgICAgICAgbURhdGVUZXh0QXBwZWFyYW5jZVJlc0lkID0gcmVzb3VyY2VJZDsKKyAgICAgICAgICAgICAgICB1cGRhdGVEYXRlVGV4dFNpemUoKTsKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlQWxsV2Vla1ZpZXdzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBnZXREYXRlVGV4dEFwcGVhcmFuY2UoKSB7CisgICAgICAgICAgICByZXR1cm4gbURhdGVUZXh0QXBwZWFyYW5jZVJlc0lkOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgICAgICBtTGlzdFZpZXcuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisgICAgICAgICAgICByZXR1cm4gbUxpc3RWaWV3LmlzRW5hYmxlZCgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldE1pbkRhdGUobG9uZyBtaW5EYXRlKSB7CisgICAgICAgICAgICBtVGVtcERhdGUuc2V0VGltZUluTWlsbGlzKG1pbkRhdGUpOworICAgICAgICAgICAgaWYgKGlzU2FtZURhdGUobVRlbXBEYXRlLCBtTWluRGF0ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtTWluRGF0ZS5zZXRUaW1lSW5NaWxsaXMobWluRGF0ZSk7CisgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGN1cnJlbnQgZGF0ZSBpcyBub3QgZWFybGllciB0aGFuCisgICAgICAgICAgICAvLyB0aGUgbmV3IG1pbiBkYXRlIHNpbmNlIHRoZSBsYXR0ZXIgaXMgdXNlZCBmb3IKKyAgICAgICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBpbmRpY2VzIGluIHRoZSBhZGFwdGVyIHRodXMKKyAgICAgICAgICAgIC8vIGF2b2lkaW5nIG91dCBvZiBib3VuZHMgZXJyb3IKKyAgICAgICAgICAgIENhbGVuZGFyIGRhdGUgPSBtQWRhcHRlci5tU2VsZWN0ZWREYXRlOworICAgICAgICAgICAgaWYgKGRhdGUuYmVmb3JlKG1NaW5EYXRlKSkgeworICAgICAgICAgICAgICAgIG1BZGFwdGVyLnNldFNlbGVjdGVkRGF5KG1NaW5EYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHJlaW5pdGlhbGl6ZSB0aGUgYWRhcHRlciBzaW5jZSBpdHMgcmFuZ2UgZGVwZW5kcyBvbiBtaW4gZGF0ZQorICAgICAgICAgICAgbUFkYXB0ZXIuaW5pdCgpOworICAgICAgICAgICAgaWYgKGRhdGUuYmVmb3JlKG1NaW5EYXRlKSkgeworICAgICAgICAgICAgICAgIHNldERhdGUobVRlbXBEYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gd2UgZ28gdG8gdGhlIGN1cnJlbnQgZGF0ZSB0byBmb3JjZSB0aGUgTGlzdFZpZXcgdG8gcXVlcnkgaXRzCisgICAgICAgICAgICAgICAgLy8gYWRhcHRlciBmb3IgdGhlIHNob3duIHZpZXdzIHNpbmNlIHdlIGhhdmUgY2hhbmdlZCB0aGUgYWRhcHRlcgorICAgICAgICAgICAgICAgIC8vIHJhbmdlIGFuZCB0aGUgYmFzZSBmcm9tIHdoaWNoIHRoZSBsYXRlciBjYWxjdWxhdGVzIGl0ZW0gaW5kaWNlcworICAgICAgICAgICAgICAgIC8vIG5vdGUgdGhhdCBjYWxsaW5nIHNldERhdGUgd2lsbCBub3Qgd29yayBzaW5jZSB0aGUgZGF0ZSBpcyB0aGUgc2FtZQorICAgICAgICAgICAgICAgIGdvVG8oZGF0ZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgbG9uZyBnZXRNaW5EYXRlKCkgeworICAgICAgICAgICAgcmV0dXJuIG1NaW5EYXRlLmdldFRpbWVJbk1pbGxpcygpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldE1heERhdGUobG9uZyBtYXhEYXRlKSB7CisgICAgICAgICAgICBtVGVtcERhdGUuc2V0VGltZUluTWlsbGlzKG1heERhdGUpOworICAgICAgICAgICAgaWYgKGlzU2FtZURhdGUobVRlbXBEYXRlLCBtTWF4RGF0ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtTWF4RGF0ZS5zZXRUaW1lSW5NaWxsaXMobWF4RGF0ZSk7CisgICAgICAgICAgICAvLyByZWluaXRpYWxpemUgdGhlIGFkYXB0ZXIgc2luY2UgaXRzIHJhbmdlIGRlcGVuZHMgb24gbWF4IGRhdGUKKyAgICAgICAgICAgIG1BZGFwdGVyLmluaXQoKTsKKyAgICAgICAgICAgIENhbGVuZGFyIGRhdGUgPSBtQWRhcHRlci5tU2VsZWN0ZWREYXRlOworICAgICAgICAgICAgaWYgKGRhdGUuYWZ0ZXIobU1heERhdGUpKSB7CisgICAgICAgICAgICAgICAgc2V0RGF0ZShtTWF4RGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIHdlIGdvIHRvIHRoZSBjdXJyZW50IGRhdGUgdG8gZm9yY2UgdGhlIExpc3RWaWV3IHRvIHF1ZXJ5IGl0cworICAgICAgICAgICAgICAgIC8vIGFkYXB0ZXIgZm9yIHRoZSBzaG93biB2aWV3cyBzaW5jZSB3ZSBoYXZlIGNoYW5nZWQgdGhlIGFkYXB0ZXIKKyAgICAgICAgICAgICAgICAvLyByYW5nZSBhbmQgdGhlIGJhc2UgZnJvbSB3aGljaCB0aGUgbGF0ZXIgY2FsY3VsYXRlcyBpdGVtIGluZGljZXMKKyAgICAgICAgICAgICAgICAvLyBub3RlIHRoYXQgY2FsbGluZyBzZXREYXRlIHdpbGwgbm90IHdvcmsgc2luY2UgdGhlIGRhdGUgaXMgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICBnb1RvKGRhdGUsIGZhbHNlLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0TWF4RGF0ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtTWF4RGF0ZS5nZXRUaW1lSW5NaWxsaXMoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRTaG93V2Vla051bWJlcihib29sZWFuIHNob3dXZWVrTnVtYmVyKSB7CisgICAgICAgICAgICBpZiAobVNob3dXZWVrTnVtYmVyID09IHNob3dXZWVrTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVNob3dXZWVrTnVtYmVyID0gc2hvd1dlZWtOdW1iZXI7CisgICAgICAgICAgICBtQWRhcHRlci5ub3RpZnlEYXRhU2V0Q2hhbmdlZCgpOworICAgICAgICAgICAgc2V0VXBIZWFkZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBnZXRTaG93V2Vla051bWJlcigpIHsKKyAgICAgICAgICAgIHJldHVybiBtU2hvd1dlZWtOdW1iZXI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0Rmlyc3REYXlPZldlZWsoaW50IGZpcnN0RGF5T2ZXZWVrKSB7CisgICAgICAgICAgICBpZiAobUZpcnN0RGF5T2ZXZWVrID09IGZpcnN0RGF5T2ZXZWVrKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUZpcnN0RGF5T2ZXZWVrID0gZmlyc3REYXlPZldlZWs7CisgICAgICAgICAgICBtQWRhcHRlci5pbml0KCk7CisgICAgICAgICAgICBtQWRhcHRlci5ub3RpZnlEYXRhU2V0Q2hhbmdlZCgpOworICAgICAgICAgICAgc2V0VXBIZWFkZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGdldEZpcnN0RGF5T2ZXZWVrKCkgeworICAgICAgICAgICAgcmV0dXJuIG1GaXJzdERheU9mV2VlazsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXREYXRlKGxvbmcgZGF0ZSkgeworICAgICAgICAgICAgc2V0RGF0ZShkYXRlLCBmYWxzZSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldERhdGUobG9uZyBkYXRlLCBib29sZWFuIGFuaW1hdGUsIGJvb2xlYW4gY2VudGVyKSB7CisgICAgICAgICAgICBtVGVtcERhdGUuc2V0VGltZUluTWlsbGlzKGRhdGUpOworICAgICAgICAgICAgaWYgKGlzU2FtZURhdGUobVRlbXBEYXRlLCBtQWRhcHRlci5tU2VsZWN0ZWREYXRlKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvVG8obVRlbXBEYXRlLCBhbmltYXRlLCB0cnVlLCBjZW50ZXIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBsb25nIGdldERhdGUoKSB7CisgICAgICAgICAgICByZXR1cm4gbUFkYXB0ZXIubVNlbGVjdGVkRGF0ZS5nZXRUaW1lSW5NaWxsaXMoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRPbkRhdGVDaGFuZ2VMaXN0ZW5lcihPbkRhdGVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lcikgeworICAgICAgICAgICAgbU9uRGF0ZUNoYW5nZUxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Db25maWd1cmF0aW9uQ2hhbmdlZChDb25maWd1cmF0aW9uIG5ld0NvbmZpZykgeworICAgICAgICAgICAgc2V0Q3VycmVudExvY2FsZShuZXdDb25maWcubG9jYWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CisgICAgICAgICAgICBldmVudC5zZXRDbGFzc05hbWUoQ2FsZW5kYXJWaWV3LmNsYXNzLmdldE5hbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBpbmZvKSB7CisgICAgICAgICAgICBpbmZvLnNldENsYXNzTmFtZShDYWxlbmRhclZpZXcuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGxvY2FsZS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGxvY2FsZSBUaGUgY3VycmVudCBsb2NhbGUuCisgICAgICAgICAqLworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgc2V0Q3VycmVudExvY2FsZShMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgICAgICBzdXBlci5zZXRDdXJyZW50TG9jYWxlKGxvY2FsZSk7CisKKyAgICAgICAgICAgIG1UZW1wRGF0ZSA9IGdldENhbGVuZGFyRm9yTG9jYWxlKG1UZW1wRGF0ZSwgbG9jYWxlKTsKKyAgICAgICAgICAgIG1GaXJzdERheU9mTW9udGggPSBnZXRDYWxlbmRhckZvckxvY2FsZShtRmlyc3REYXlPZk1vbnRoLCBsb2NhbGUpOworICAgICAgICAgICAgbU1pbkRhdGUgPSBnZXRDYWxlbmRhckZvckxvY2FsZShtTWluRGF0ZSwgbG9jYWxlKTsKKyAgICAgICAgICAgIG1NYXhEYXRlID0gZ2V0Q2FsZW5kYXJGb3JMb2NhbGUobU1heERhdGUsIGxvY2FsZSk7CisgICAgICAgIH0KKyAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZURhdGVUZXh0U2l6ZSgpIHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXkgZGF0ZVRleHRBcHBlYXJhbmNlID0gbURlbGVnYXRvci5nZXRDb250ZXh0KCkub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICAgICAgbURhdGVUZXh0QXBwZWFyYW5jZVJlc0lkLCBSLnN0eWxlYWJsZS5UZXh0QXBwZWFyYW5jZSk7CisgICAgICAgICAgICBtRGF0ZVRleHRTaXplID0gZGF0ZVRleHRBcHBlYXJhbmNlLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVGV4dEFwcGVhcmFuY2VfdGV4dFNpemUsIERFRkFVTFRfREFURV9URVhUX1NJWkUpOworICAgICAgICAgICAgZGF0ZVRleHRBcHBlYXJhbmNlLnJlY3ljbGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBJbnZhbGlkYXRlcyBhbGwgd2VlayB2aWV3cy4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlQWxsV2Vla1ZpZXdzKCkgeworICAgICAgICAgICAgZmluYWwgaW50IGNoaWxkQ291bnQgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRDb3VudCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBWaWV3IHZpZXcgPSBtTGlzdFZpZXcuZ2V0Q2hpbGRBdChpKTsKKyAgICAgICAgICAgICAgICB2aWV3LmludmFsaWRhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIGEgY2FsZW5kYXIgZm9yIGxvY2FsZSBib290c3RyYXBwZWQgd2l0aCB0aGUgdmFsdWUgb2YgYSBnaXZlbiBjYWxlbmRhci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIG9sZENhbGVuZGFyIFRoZSBvbGQgY2FsZW5kYXIuCisgICAgICAgICAqIEBwYXJhbSBsb2NhbGUgVGhlIGxvY2FsZS4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgc3RhdGljIENhbGVuZGFyIGdldENhbGVuZGFyRm9yTG9jYWxlKENhbGVuZGFyIG9sZENhbGVuZGFyLCBMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgICAgICBpZiAob2xkQ2FsZW5kYXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2NhbGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGN1cnJlbnRUaW1lTWlsbGlzID0gb2xkQ2FsZW5kYXIuZ2V0VGltZUluTWlsbGlzKCk7CisgICAgICAgICAgICAgICAgQ2FsZW5kYXIgbmV3Q2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2NhbGUpOworICAgICAgICAgICAgICAgIG5ld0NhbGVuZGFyLnNldFRpbWVJbk1pbGxpcyhjdXJyZW50VGltZU1pbGxpcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0NhbGVuZGFyOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgPGNvZGU+Zmlyc3REYXRlPC9jb2RlPiBpcyB0aGUgc2FtZSBhcyB0aGUgPGNvZGU+CisgICAgICAgICAqIHNlY29uZERhdGU8L2NvZGU+LgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NhbWVEYXRlKENhbGVuZGFyIGZpcnN0RGF0ZSwgQ2FsZW5kYXIgc2Vjb25kRGF0ZSkgeworICAgICAgICAgICAgcmV0dXJuIChmaXJzdERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSA9PSBzZWNvbmREYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikKKyAgICAgICAgICAgICAgICAgICAgJiYgZmlyc3REYXRlLmdldChDYWxlbmRhci5ZRUFSKSA9PSBzZWNvbmREYXRlLmdldChDYWxlbmRhci5ZRUFSKSk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGlmIG5lY2Vzc2FyeSBhbmQgc2V0cyB1cCBpdHMgcGFyYW1ldGVycy4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCBzZXRVcEFkYXB0ZXIoKSB7CisgICAgICAgICAgICBpZiAobUFkYXB0ZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1BZGFwdGVyID0gbmV3IFdlZWtzQWRhcHRlcihtQ29udGV4dCk7CisgICAgICAgICAgICAgICAgbUFkYXB0ZXIucmVnaXN0ZXJEYXRhU2V0T2JzZXJ2ZXIobmV3IERhdGFTZXRPYnNlcnZlcigpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hhbmdlZCgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtT25EYXRlQ2hhbmdlTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyIHNlbGVjdGVkRGF5ID0gbUFkYXB0ZXIuZ2V0U2VsZWN0ZWREYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT25EYXRlQ2hhbmdlTGlzdGVuZXIub25TZWxlY3RlZERheUNoYW5nZShtRGVsZWdhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWREYXkuZ2V0KENhbGVuZGFyLllFQVIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWREYXkuZ2V0KENhbGVuZGFyLk1PTlRIKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRGF5LmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIG1MaXN0Vmlldy5zZXRBZGFwdGVyKG1BZGFwdGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gcmVmcmVzaCB0aGUgdmlldyB3aXRoIHRoZSBuZXcgcGFyYW1ldGVycworICAgICAgICAgICAgbUFkYXB0ZXIubm90aWZ5RGF0YVNldENoYW5nZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHVwIHRoZSBzdHJpbmdzIHRvIGJlIHVzZWQgYnkgdGhlIGhlYWRlci4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCBzZXRVcEhlYWRlcigpIHsKKyAgICAgICAgICAgIG1EYXlMYWJlbHMgPSBuZXcgU3RyaW5nW21EYXlzUGVyV2Vla107CisgICAgICAgICAgICBmb3IgKGludCBpID0gbUZpcnN0RGF5T2ZXZWVrLCBjb3VudCA9IG1GaXJzdERheU9mV2VlayArIG1EYXlzUGVyV2VlazsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgY2FsZW5kYXJEYXkgPSAoaSA+IENhbGVuZGFyLlNBVFVSREFZKSA/IGkgLSBDYWxlbmRhci5TQVRVUkRBWSA6IGk7CisgICAgICAgICAgICAgICAgbURheUxhYmVsc1tpIC0gbUZpcnN0RGF5T2ZXZWVrXSA9IERhdGVVdGlscy5nZXREYXlPZldlZWtTdHJpbmcoY2FsZW5kYXJEYXksCisgICAgICAgICAgICAgICAgICAgICAgICBEYXRlVXRpbHMuTEVOR1RIX1NIT1JURVNUKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVGV4dFZpZXcgbGFiZWwgPSAoVGV4dFZpZXcpIG1EYXlOYW1lc0hlYWRlci5nZXRDaGlsZEF0KDApOworICAgICAgICAgICAgaWYgKG1TaG93V2Vla051bWJlcikgewogICAgICAgICAgICAgICAgIGxhYmVsLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbGFiZWwuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1EYXlOYW1lc0hlYWRlci5pbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyBhbGwgdGhlIHJlcXVpcmVkIGZpZWxkcyBmb3IgdGhlIGxpc3Qgdmlldy4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2V0VXBMaXN0VmlldygpIHsKLSAgICAgICAgLy8gQ29uZmlndXJlIHRoZSBsaXN0dmlldwotICAgICAgICBtTGlzdFZpZXcuc2V0RGl2aWRlcihudWxsKTsKLSAgICAgICAgbUxpc3RWaWV3LnNldEl0ZW1zQ2FuRm9jdXModHJ1ZSk7Ci0gICAgICAgIG1MaXN0Vmlldy5zZXRWZXJ0aWNhbFNjcm9sbEJhckVuYWJsZWQoZmFsc2UpOwotICAgICAgICBtTGlzdFZpZXcuc2V0T25TY3JvbGxMaXN0ZW5lcihuZXcgT25TY3JvbGxMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2Nyb2xsU3RhdGVDaGFuZ2VkKEFic0xpc3RWaWV3IHZpZXcsIGludCBzY3JvbGxTdGF0ZSkgewotICAgICAgICAgICAgICAgIENhbGVuZGFyVmlldy50aGlzLm9uU2Nyb2xsU3RhdGVDaGFuZ2VkKHZpZXcsIHNjcm9sbFN0YXRlKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxLCBjb3VudCA9IG1EYXlOYW1lc0hlYWRlci5nZXRDaGlsZENvdW50KCk7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgbGFiZWwgPSAoVGV4dFZpZXcpIG1EYXlOYW1lc0hlYWRlci5nZXRDaGlsZEF0KGkpOworICAgICAgICAgICAgICAgIGlmIChtV2Vla0RheVRleHRBcHBlYXJhbmNlUmVzSWQgPiAtMSkgeworICAgICAgICAgICAgICAgICAgICBsYWJlbC5zZXRUZXh0QXBwZWFyYW5jZShtQ29udGV4dCwgbVdlZWtEYXlUZXh0QXBwZWFyYW5jZVJlc0lkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGkgPCBtRGF5c1BlcldlZWsgKyAxKSB7CisgICAgICAgICAgICAgICAgICAgIGxhYmVsLnNldFRleHQobURheUxhYmVsc1tpIC0gMV0pOworICAgICAgICAgICAgICAgICAgICBsYWJlbC5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGFiZWwuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25TY3JvbGwoCi0gICAgICAgICAgICAgICAgICAgIEFic0xpc3RWaWV3IHZpZXcsIGludCBmaXJzdFZpc2libGVJdGVtLCBpbnQgdmlzaWJsZUl0ZW1Db3VudCwKLSAgICAgICAgICAgICAgICAgICAgaW50IHRvdGFsSXRlbUNvdW50KSB7Ci0gICAgICAgICAgICAgICAgQ2FsZW5kYXJWaWV3LnRoaXMub25TY3JvbGwodmlldywgZmlyc3RWaXNpYmxlSXRlbSwgdmlzaWJsZUl0ZW1Db3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbUNvdW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIC8vIE1ha2UgdGhlIHNjcm9sbGluZyBiZWhhdmlvciBuaWNlcgotICAgICAgICBtTGlzdFZpZXcuc2V0RnJpY3Rpb24obUZyaWN0aW9uKTsKLSAgICAgICAgbUxpc3RWaWV3LnNldFZlbG9jaXR5U2NhbGUobVZlbG9jaXR5U2NhbGUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgbW92ZXMgdG8gdGhlIHNwZWNpZmllZCB0aW1lIGluIHRoZSB2aWV3LiBJZiB0aGUgdGltZSBpcyBub3QgYWxyZWFkeQotICAgICAqIGluIHJhbmdlIGl0IHdpbGwgbW92ZSB0aGUgbGlzdCBzbyB0aGF0IHRoZSBmaXJzdCBvZiB0aGUgbW9udGggY29udGFpbmluZwotICAgICAqIHRoZSB0aW1lIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcuIElmIHRoZSBuZXcgdGltZSBpcyBhbHJlYWR5IGluIHZpZXcKLSAgICAgKiB0aGUgbGlzdCB3aWxsIG5vdCBiZSBzY3JvbGxlZCB1bmxlc3MgZm9yY2VTY3JvbGwgaXMgdHJ1ZS4gVGhpcyB0aW1lIG1heQotICAgICAqIG9wdGlvbmFsbHkgYmUgaGlnaGxpZ2h0ZWQgYXMgc2VsZWN0ZWQgYXMgd2VsbC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkYXRlIFRoZSB0aW1lIHRvIG1vdmUgdG8uCi0gICAgICogQHBhcmFtIGFuaW1hdGUgV2hldGhlciB0byBzY3JvbGwgdG8gdGhlIGdpdmVuIHRpbWUgb3IganVzdCByZWRyYXcgYXQgdGhlCi0gICAgICogICAgICAgICAgICBuZXcgbG9jYXRpb24uCi0gICAgICogQHBhcmFtIHNldFNlbGVjdGVkIFdoZXRoZXIgdG8gc2V0IHRoZSBnaXZlbiB0aW1lIGFzIHNlbGVjdGVkLgotICAgICAqIEBwYXJhbSBmb3JjZVNjcm9sbCBXaGV0aGVyIHRvIHJlY2VudGVyIGV2ZW4gaWYgdGhlIHRpbWUgaXMgYWxyZWFkeQotICAgICAqICAgICAgICAgICAgdmlzaWJsZS4KLSAgICAgKgotICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIG9mIHRoZSBwcm92aWRlZCBkYXRlIGlzIGJlZm9yZSB0aGUKLSAgICAgKiAgICAgICAgcmFuZ2Ugc3RhcnQgb2YgYWZ0ZXIgdGhlIHJhbmdlIGVuZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgZ29UbyhDYWxlbmRhciBkYXRlLCBib29sZWFuIGFuaW1hdGUsIGJvb2xlYW4gc2V0U2VsZWN0ZWQsIGJvb2xlYW4gZm9yY2VTY3JvbGwpIHsKLSAgICAgICAgaWYgKGRhdGUuYmVmb3JlKG1NaW5EYXRlKSB8fCBkYXRlLmFmdGVyKG1NYXhEYXRlKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGltZSBub3QgYmV0d2VlbiAiICsgbU1pbkRhdGUuZ2V0VGltZSgpCi0gICAgICAgICAgICAgICAgICAgICsgIiBhbmQgIiArIG1NYXhEYXRlLmdldFRpbWUoKSk7CisgICAgICAgICAgICBtRGF5TmFtZXNIZWFkZXIuaW52YWxpZGF0ZSgpOwogICAgICAgICB9Ci0gICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IGFuZCBsYXN0IGVudGlyZWx5IHZpc2libGUgd2Vla3MKLSAgICAgICAgaW50IGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24gPSBtTGlzdFZpZXcuZ2V0Rmlyc3RWaXNpYmxlUG9zaXRpb24oKTsKLSAgICAgICAgVmlldyBmaXJzdENoaWxkID0gbUxpc3RWaWV3LmdldENoaWxkQXQoMCk7Ci0gICAgICAgIGlmIChmaXJzdENoaWxkICE9IG51bGwgJiYgZmlyc3RDaGlsZC5nZXRUb3AoKSA8IDApIHsKLSAgICAgICAgICAgIGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24rKzsKLSAgICAgICAgfQotICAgICAgICBpbnQgbGFzdEZ1bGx5VmlzaWJsZVBvc2l0aW9uID0gZmlyc3RGdWxseVZpc2libGVQb3NpdGlvbiArIG1TaG93bldlZWtDb3VudCAtIDE7Ci0gICAgICAgIGlmIChmaXJzdENoaWxkICE9IG51bGwgJiYgZmlyc3RDaGlsZC5nZXRUb3AoKSA+IG1Cb3R0b21CdWZmZXIpIHsKLSAgICAgICAgICAgIGxhc3RGdWxseVZpc2libGVQb3NpdGlvbi0tOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzZXRTZWxlY3RlZCkgewotICAgICAgICAgICAgbUFkYXB0ZXIuc2V0U2VsZWN0ZWREYXkoZGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR2V0IHRoZSB3ZWVrIHdlJ3JlIGdvaW5nIHRvCi0gICAgICAgIGludCBwb3NpdGlvbiA9IGdldFdlZWtzU2luY2VNaW5EYXRlKGRhdGUpOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBzZWxlY3RlZCBkYXkgaXMgbm93IG91dHNpZGUgb2Ygb3VyIHZpc2libGUgcmFuZ2UKLSAgICAgICAgLy8gYW5kIGlmIHNvIHNjcm9sbCB0byB0aGUgbW9udGggdGhhdCBjb250YWlucyBpdAotICAgICAgICBpZiAocG9zaXRpb24gPCBmaXJzdEZ1bGx5VmlzaWJsZVBvc2l0aW9uIHx8IHBvc2l0aW9uID4gbGFzdEZ1bGx5VmlzaWJsZVBvc2l0aW9uCi0gICAgICAgICAgICAgICAgfHwgZm9yY2VTY3JvbGwpIHsKLSAgICAgICAgICAgIG1GaXJzdERheU9mTW9udGguc2V0VGltZUluTWlsbGlzKGRhdGUuZ2V0VGltZUluTWlsbGlzKCkpOwotICAgICAgICAgICAgbUZpcnN0RGF5T2ZNb250aC5zZXQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAxKTsKLQotICAgICAgICAgICAgc2V0TW9udGhEaXNwbGF5ZWQobUZpcnN0RGF5T2ZNb250aCk7Ci0KLSAgICAgICAgICAgIC8vIHRoZSBlYXJsaWVzdCB0aW1lIHdlIGNhbiBzY3JvbGwgdG8gaXMgdGhlIG1pbiBkYXRlCi0gICAgICAgICAgICBpZiAobUZpcnN0RGF5T2ZNb250aC5iZWZvcmUobU1pbkRhdGUpKSB7Ci0gICAgICAgICAgICAgICAgcG9zaXRpb24gPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGdldFdlZWtzU2luY2VNaW5EYXRlKG1GaXJzdERheU9mTW9udGgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtUHJldmlvdXNTY3JvbGxTdGF0ZSA9IE9uU2Nyb2xsTGlzdGVuZXIuU0NST0xMX1NUQVRFX0ZMSU5HOwotICAgICAgICAgICAgaWYgKGFuaW1hdGUpIHsKLSAgICAgICAgICAgICAgICBtTGlzdFZpZXcuc21vb3RoU2Nyb2xsVG9Qb3NpdGlvbkZyb21Ub3AocG9zaXRpb24sIG1MaXN0U2Nyb2xsVG9wT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgR09UT19TQ1JPTExfRFVSQVRJT04pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtTGlzdFZpZXcuc2V0U2VsZWN0aW9uRnJvbVRvcChwb3NpdGlvbiwgbUxpc3RTY3JvbGxUb3BPZmZzZXQpOwotICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0gYW55IGFmdGVyIHNjcm9sbCBvcGVyYXRpb25zIHRoYXQgYXJlIG5lZWRlZAotICAgICAgICAgICAgICAgIG9uU2Nyb2xsU3RhdGVDaGFuZ2VkKG1MaXN0VmlldywgT25TY3JvbGxMaXN0ZW5lci5TQ1JPTExfU1RBVEVfSURMRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc2V0U2VsZWN0ZWQpIHsKLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IHNldCB0aGUgc2VsZWN0aW9uCi0gICAgICAgICAgICBzZXRNb250aERpc3BsYXllZChkYXRlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBhcnNlcyB0aGUgZ2l2ZW4gPGNvZGU+ZGF0ZTwvY29kZT4gYW5kIGluIGNhc2Ugb2Ygc3VjY2VzcyBzZXRzCi0gICAgICogdGhlIHJlc3VsdCB0byB0aGUgPGNvZGU+b3V0RGF0ZTwvY29kZT4uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGRhdGUgd2FzIHBhcnNlZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gcGFyc2VEYXRlKFN0cmluZyBkYXRlLCBDYWxlbmRhciBvdXREYXRlKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBvdXREYXRlLnNldFRpbWUobURhdGVGb3JtYXQucGFyc2UoZGF0ZSkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy53KExPR19UQUcsICJEYXRlOiAiICsgZGF0ZSArICIgbm90IGluIGZvcm1hdDogIiArIERBVEVfRk9STUFUKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCB3aGVuIGEgPGNvZGU+dmlldzwvY29kZT4gdHJhbnNpdGlvbnMgdG8gYSBuZXcgPGNvZGU+c2Nyb2xsU3RhdGUKLSAgICAgKiA8L2NvZGU+LgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBvblNjcm9sbFN0YXRlQ2hhbmdlZChBYnNMaXN0VmlldyB2aWV3LCBpbnQgc2Nyb2xsU3RhdGUpIHsKLSAgICAgICAgbVNjcm9sbFN0YXRlQ2hhbmdlZFJ1bm5hYmxlLmRvU2Nyb2xsU3RhdGVDaGFuZ2Uodmlldywgc2Nyb2xsU3RhdGUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVwZGF0ZXMgdGhlIHRpdGxlIGFuZCBzZWxlY3RlZCBtb250aCBpZiB0aGUgPGNvZGU+dmlldzwvY29kZT4gaGFzIG1vdmVkIHRvIGEgbmV3Ci0gICAgICogbW9udGguCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIG9uU2Nyb2xsKEFic0xpc3RWaWV3IHZpZXcsIGludCBmaXJzdFZpc2libGVJdGVtLCBpbnQgdmlzaWJsZUl0ZW1Db3VudCwKLSAgICAgICAgICAgIGludCB0b3RhbEl0ZW1Db3VudCkgewotICAgICAgICBXZWVrVmlldyBjaGlsZCA9IChXZWVrVmlldykgdmlldy5nZXRDaGlsZEF0KDApOwotICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmlndXJlIG91dCB3aGVyZSB3ZSBhcmUKLSAgICAgICAgbG9uZyBjdXJyU2Nyb2xsID0gdmlldy5nZXRGaXJzdFZpc2libGVQb3NpdGlvbigpICogY2hpbGQuZ2V0SGVpZ2h0KCkgLSBjaGlsZC5nZXRCb3R0b20oKTsKLQotICAgICAgICAvLyBJZiB3ZSBoYXZlIG1vdmVkIHNpbmNlIG91ciBsYXN0IGNhbGwgdXBkYXRlIHRoZSBkaXJlY3Rpb24KLSAgICAgICAgaWYgKGN1cnJTY3JvbGwgPCBtUHJldmlvdXNTY3JvbGxQb3NpdGlvbikgewotICAgICAgICAgICAgbUlzU2Nyb2xsaW5nVXAgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGN1cnJTY3JvbGwgPiBtUHJldmlvdXNTY3JvbGxQb3NpdGlvbikgewotICAgICAgICAgICAgbUlzU2Nyb2xsaW5nVXAgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVzZSBzb21lIGh5c3RlcmVzaXMgZm9yIGNoZWNraW5nIHdoaWNoIG1vbnRoIHRvIGhpZ2hsaWdodC4gVGhpcwotICAgICAgICAvLyBjYXVzZXMgdGhlIG1vbnRoIHRvIHRyYW5zaXRpb24gd2hlbiB0d28gZnVsbCB3ZWVrcyBvZiBhIG1vbnRoIGFyZQotICAgICAgICAvLyB2aXNpYmxlIHdoZW4gc2Nyb2xsaW5nIHVwLCBhbmQgd2hlbiB0aGUgZmlyc3QgZGF5IGluIGEgbW9udGggcmVhY2hlcwotICAgICAgICAvLyB0aGUgdG9wIG9mIHRoZSBzY3JlZW4gd2hlbiBzY3JvbGxpbmcgZG93bi4KLSAgICAgICAgaW50IG9mZnNldCA9IGNoaWxkLmdldEJvdHRvbSgpIDwgbVdlZWtNaW5WaXNpYmxlSGVpZ2h0ID8gMSA6IDA7Ci0gICAgICAgIGlmIChtSXNTY3JvbGxpbmdVcCkgewotICAgICAgICAgICAgY2hpbGQgPSAoV2Vla1ZpZXcpIHZpZXcuZ2V0Q2hpbGRBdChTQ1JPTExfSFlTVF9XRUVLUyArIG9mZnNldCk7Ci0gICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ICE9IDApIHsKLSAgICAgICAgICAgIGNoaWxkID0gKFdlZWtWaWV3KSB2aWV3LmdldENoaWxkQXQob2Zmc2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZpbmQgb3V0IHdoaWNoIG1vbnRoIHdlJ3JlIG1vdmluZyBpbnRvCi0gICAgICAgIGludCBtb250aDsKLSAgICAgICAgaWYgKG1Jc1Njcm9sbGluZ1VwKSB7Ci0gICAgICAgICAgICBtb250aCA9IGNoaWxkLmdldE1vbnRoT2ZGaXJzdFdlZWtEYXkoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1vbnRoID0gY2hpbGQuZ2V0TW9udGhPZkxhc3RXZWVrRGF5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3VyIGN1cnJlbnQgaGlnaGxpZ2h0ZWQgbW9udGgKLSAgICAgICAgaW50IG1vbnRoRGlmZjsKLSAgICAgICAgaWYgKG1DdXJyZW50TW9udGhEaXNwbGF5ZWQgPT0gMTEgJiYgbW9udGggPT0gMCkgewotICAgICAgICAgICAgbW9udGhEaWZmID0gMTsKLSAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudE1vbnRoRGlzcGxheWVkID09IDAgJiYgbW9udGggPT0gMTEpIHsKLSAgICAgICAgICAgIG1vbnRoRGlmZiA9IC0xOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbW9udGhEaWZmID0gbW9udGggLSBtQ3VycmVudE1vbnRoRGlzcGxheWVkOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT25seSBzd2l0Y2ggbW9udGhzIGlmIHdlJ3JlIHNjcm9sbGluZyBhd2F5IGZyb20gdGhlIGN1cnJlbnRseQotICAgICAgICAvLyBzZWxlY3RlZCBtb250aAotICAgICAgICBpZiAoKCFtSXNTY3JvbGxpbmdVcCAmJiBtb250aERpZmYgPiAwKSB8fCAobUlzU2Nyb2xsaW5nVXAgJiYgbW9udGhEaWZmIDwgMCkpIHsKLSAgICAgICAgICAgIENhbGVuZGFyIGZpcnN0RGF5ID0gY2hpbGQuZ2V0Rmlyc3REYXkoKTsKLSAgICAgICAgICAgIGlmIChtSXNTY3JvbGxpbmdVcCkgewotICAgICAgICAgICAgICAgIGZpcnN0RGF5LmFkZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIC1EQVlTX1BFUl9XRUVLKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmlyc3REYXkuYWRkKENhbGVuZGFyLkRBWV9PRl9NT05USCwgREFZU19QRVJfV0VFSyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRNb250aERpc3BsYXllZChmaXJzdERheSk7Ci0gICAgICAgIH0KLSAgICAgICAgbVByZXZpb3VzU2Nyb2xsUG9zaXRpb24gPSBjdXJyU2Nyb2xsOwotICAgICAgICBtUHJldmlvdXNTY3JvbGxTdGF0ZSA9IG1DdXJyZW50U2Nyb2xsU3RhdGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbW9udGggZGlzcGxheWVkIGF0IHRoZSB0b3Agb2YgdGhpcyB2aWV3IGJhc2VkIG9uIHRpbWUuIE92ZXJyaWRlCi0gICAgICogdG8gYWRkIGN1c3RvbSBldmVudHMgd2hlbiB0aGUgdGl0bGUgaXMgY2hhbmdlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjYWxlbmRhciBBIGRheSBpbiB0aGUgbmV3IGZvY3VzIG1vbnRoLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZXRNb250aERpc3BsYXllZChDYWxlbmRhciBjYWxlbmRhcikgewotICAgICAgICBtQ3VycmVudE1vbnRoRGlzcGxheWVkID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1PTlRIKTsKLSAgICAgICAgbUFkYXB0ZXIuc2V0Rm9jdXNNb250aChtQ3VycmVudE1vbnRoRGlzcGxheWVkKTsKLSAgICAgICAgZmluYWwgaW50IGZsYWdzID0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX0RBVEUgfCBEYXRlVXRpbHMuRk9STUFUX05PX01PTlRIX0RBWQotICAgICAgICAgICAgICAgIHwgRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX1lFQVI7Ci0gICAgICAgIGZpbmFsIGxvbmcgbWlsbGlzID0gY2FsZW5kYXIuZ2V0VGltZUluTWlsbGlzKCk7Ci0gICAgICAgIFN0cmluZyBuZXdNb250aE5hbWUgPSBEYXRlVXRpbHMuZm9ybWF0RGF0ZVJhbmdlKG1Db250ZXh0LCBtaWxsaXMsIG1pbGxpcywgZmxhZ3MpOwotICAgICAgICBtTW9udGhOYW1lLnNldFRleHQobmV3TW9udGhOYW1lKTsKLSAgICAgICAgbU1vbnRoTmFtZS5pbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2Vla3MgYmV0d2VlbiB0aGUgY3VycmVudCA8Y29kZT5kYXRlPC9jb2RlPgotICAgICAqICAgICAgICAgYW5kIHRoZSA8Y29kZT5tTWluRGF0ZTwvY29kZT4uCi0gICAgICovCi0gICAgcHJpdmF0ZSBpbnQgZ2V0V2Vla3NTaW5jZU1pbkRhdGUoQ2FsZW5kYXIgZGF0ZSkgewotICAgICAgICBpZiAoZGF0ZS5iZWZvcmUobU1pbkRhdGUpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJmcm9tRGF0ZTogIiArIG1NaW5EYXRlLmdldFRpbWUoKQotICAgICAgICAgICAgICAgICAgICArICIgZG9lcyBub3QgcHJlY2VkZSB0b0RhdGU6ICIgKyBkYXRlLmdldFRpbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbG9uZyBlbmRUaW1lTWlsbGlzID0gZGF0ZS5nZXRUaW1lSW5NaWxsaXMoKQotICAgICAgICAgICAgICAgICsgZGF0ZS5nZXRUaW1lWm9uZSgpLmdldE9mZnNldChkYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKLSAgICAgICAgbG9uZyBzdGFydFRpbWVNaWxsaXMgPSBtTWluRGF0ZS5nZXRUaW1lSW5NaWxsaXMoKQotICAgICAgICAgICAgICAgICsgbU1pbkRhdGUuZ2V0VGltZVpvbmUoKS5nZXRPZmZzZXQobU1pbkRhdGUuZ2V0VGltZUluTWlsbGlzKCkpOwotICAgICAgICBsb25nIGRheU9mZnNldE1pbGxpcyA9IChtTWluRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspIC0gbUZpcnN0RGF5T2ZXZWVrKQotICAgICAgICAgICAgICAgICogTUlMTElTX0lOX0RBWTsKLSAgICAgICAgcmV0dXJuIChpbnQpICgoZW5kVGltZU1pbGxpcyAtIHN0YXJ0VGltZU1pbGxpcyArIGRheU9mZnNldE1pbGxpcykgLyBNSUxMSVNfSU5fV0VFSyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tbWFuZCByZXNwb25zaWJsZSBmb3IgYWN0aW5nIHVwb24gc2Nyb2xsIHN0YXRlIGNoYW5nZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBjbGFzcyBTY3JvbGxTdGF0ZVJ1bm5hYmxlIGltcGxlbWVudHMgUnVubmFibGUgewotICAgICAgICBwcml2YXRlIEFic0xpc3RWaWV3IG1WaWV3OwotCi0gICAgICAgIHByaXZhdGUgaW50IG1OZXdTdGF0ZTsKIAogICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyB1cCB0aGUgcnVubmFibGUgd2l0aCBhIHNob3J0IGRlbGF5IGluIGNhc2UgdGhlIHNjcm9sbCBzdGF0ZQotICAgICAgICAgKiBpbW1lZGlhdGVseSBjaGFuZ2VzIGFnYWluLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gdmlldyBUaGUgbGlzdCB2aWV3IHRoYXQgY2hhbmdlZCBzdGF0ZQotICAgICAgICAgKiBAcGFyYW0gc2Nyb2xsU3RhdGUgVGhlIG5ldyBzdGF0ZSBpdCBjaGFuZ2VkIHRvCisgICAgICAgICAqIFNldHMgYWxsIHRoZSByZXF1aXJlZCBmaWVsZHMgZm9yIHRoZSBsaXN0IHZpZXcuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBkb1Njcm9sbFN0YXRlQ2hhbmdlKEFic0xpc3RWaWV3IHZpZXcsIGludCBzY3JvbGxTdGF0ZSkgewotICAgICAgICAgICAgbVZpZXcgPSB2aWV3OwotICAgICAgICAgICAgbU5ld1N0YXRlID0gc2Nyb2xsU3RhdGU7Ci0gICAgICAgICAgICByZW1vdmVDYWxsYmFja3ModGhpcyk7Ci0gICAgICAgICAgICBwb3N0RGVsYXllZCh0aGlzLCBTQ1JPTExfQ0hBTkdFX0RFTEFZKTsKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHNldFVwTGlzdFZpZXcoKSB7CisgICAgICAgICAgICAvLyBDb25maWd1cmUgdGhlIGxpc3R2aWV3CisgICAgICAgICAgICBtTGlzdFZpZXcuc2V0RGl2aWRlcihudWxsKTsKKyAgICAgICAgICAgIG1MaXN0Vmlldy5zZXRJdGVtc0NhbkZvY3VzKHRydWUpOworICAgICAgICAgICAgbUxpc3RWaWV3LnNldFZlcnRpY2FsU2Nyb2xsQmFyRW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICBtTGlzdFZpZXcuc2V0T25TY3JvbGxMaXN0ZW5lcihuZXcgT25TY3JvbGxMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNjcm9sbFN0YXRlQ2hhbmdlZChBYnNMaXN0VmlldyB2aWV3LCBpbnQgc2Nyb2xsU3RhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgTGVnYWN5Q2FsZW5kYXJWaWV3RGVsZWdhdGUudGhpcy5vblNjcm9sbFN0YXRlQ2hhbmdlZCh2aWV3LCBzY3JvbGxTdGF0ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TY3JvbGwoCisgICAgICAgICAgICAgICAgICAgICAgICBBYnNMaXN0VmlldyB2aWV3LCBpbnQgZmlyc3RWaXNpYmxlSXRlbSwgaW50IHZpc2libGVJdGVtQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxJdGVtQ291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgTGVnYWN5Q2FsZW5kYXJWaWV3RGVsZWdhdGUudGhpcy5vblNjcm9sbCh2aWV3LCBmaXJzdFZpc2libGVJdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVJdGVtQ291bnQsIHRvdGFsSXRlbUNvdW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIE1ha2UgdGhlIHNjcm9sbGluZyBiZWhhdmlvciBuaWNlcgorICAgICAgICAgICAgbUxpc3RWaWV3LnNldEZyaWN0aW9uKG1GcmljdGlvbik7CisgICAgICAgICAgICBtTGlzdFZpZXcuc2V0VmVsb2NpdHlTY2FsZShtVmVsb2NpdHlTY2FsZSk7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBtQ3VycmVudFNjcm9sbFN0YXRlID0gbU5ld1N0YXRlOwotICAgICAgICAgICAgLy8gRml4IHRoZSBwb3NpdGlvbiBhZnRlciBhIHNjcm9sbCBvciBhIGZsaW5nIGVuZHMKLSAgICAgICAgICAgIGlmIChtTmV3U3RhdGUgPT0gT25TY3JvbGxMaXN0ZW5lci5TQ1JPTExfU1RBVEVfSURMRQotICAgICAgICAgICAgICAgICAgICAmJiBtUHJldmlvdXNTY3JvbGxTdGF0ZSAhPSBPblNjcm9sbExpc3RlbmVyLlNDUk9MTF9TVEFURV9JRExFKSB7Ci0gICAgICAgICAgICAgICAgVmlldyBjaGlsZCA9IG1WaWV3LmdldENoaWxkQXQoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHZpZXcgaXMgbm8gbG9uZ2VyIHZpc2libGUsIGp1c3QgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbW92ZXMgdG8gdGhlIHNwZWNpZmllZCB0aW1lIGluIHRoZSB2aWV3LiBJZiB0aGUgdGltZSBpcyBub3QgYWxyZWFkeQorICAgICAgICAgKiBpbiByYW5nZSBpdCB3aWxsIG1vdmUgdGhlIGxpc3Qgc28gdGhhdCB0aGUgZmlyc3Qgb2YgdGhlIG1vbnRoIGNvbnRhaW5pbmcKKyAgICAgICAgICogdGhlIHRpbWUgaXMgYXQgdGhlIHRvcCBvZiB0aGUgdmlldy4gSWYgdGhlIG5ldyB0aW1lIGlzIGFscmVhZHkgaW4gdmlldworICAgICAgICAgKiB0aGUgbGlzdCB3aWxsIG5vdCBiZSBzY3JvbGxlZCB1bmxlc3MgZm9yY2VTY3JvbGwgaXMgdHJ1ZS4gVGhpcyB0aW1lIG1heQorICAgICAgICAgKiBvcHRpb25hbGx5IGJlIGhpZ2hsaWdodGVkIGFzIHNlbGVjdGVkIGFzIHdlbGwuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBkYXRlIFRoZSB0aW1lIHRvIG1vdmUgdG8uCisgICAgICAgICAqIEBwYXJhbSBhbmltYXRlIFdoZXRoZXIgdG8gc2Nyb2xsIHRvIHRoZSBnaXZlbiB0aW1lIG9yIGp1c3QgcmVkcmF3IGF0IHRoZQorICAgICAgICAgKiAgICAgICAgICAgIG5ldyBsb2NhdGlvbi4KKyAgICAgICAgICogQHBhcmFtIHNldFNlbGVjdGVkIFdoZXRoZXIgdG8gc2V0IHRoZSBnaXZlbiB0aW1lIGFzIHNlbGVjdGVkLgorICAgICAgICAgKiBAcGFyYW0gZm9yY2VTY3JvbGwgV2hldGhlciB0byByZWNlbnRlciBldmVuIGlmIHRoZSB0aW1lIGlzIGFscmVhZHkKKyAgICAgICAgICogICAgICAgICAgICB2aXNpYmxlLgorICAgICAgICAgKgorICAgICAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBvZiB0aGUgcHJvdmlkZWQgZGF0ZSBpcyBiZWZvcmUgdGhlCisgICAgICAgICAqICAgICAgICByYW5nZSBzdGFydCBvZiBhZnRlciB0aGUgcmFuZ2UgZW5kLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSB2b2lkIGdvVG8oQ2FsZW5kYXIgZGF0ZSwgYm9vbGVhbiBhbmltYXRlLCBib29sZWFuIHNldFNlbGVjdGVkLAorICAgICAgICAgICAgICAgIGJvb2xlYW4gZm9yY2VTY3JvbGwpIHsKKyAgICAgICAgICAgIGlmIChkYXRlLmJlZm9yZShtTWluRGF0ZSkgfHwgZGF0ZS5hZnRlcihtTWF4RGF0ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaW1lIG5vdCBiZXR3ZWVuICIgKyBtTWluRGF0ZS5nZXRUaW1lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhbmQgIiArIG1NYXhEYXRlLmdldFRpbWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBhbmQgbGFzdCBlbnRpcmVseSB2aXNpYmxlIHdlZWtzCisgICAgICAgICAgICBpbnQgZmlyc3RGdWxseVZpc2libGVQb3NpdGlvbiA9IG1MaXN0Vmlldy5nZXRGaXJzdFZpc2libGVQb3NpdGlvbigpOworICAgICAgICAgICAgVmlldyBmaXJzdENoaWxkID0gbUxpc3RWaWV3LmdldENoaWxkQXQoMCk7CisgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAhPSBudWxsICYmIGZpcnN0Q2hpbGQuZ2V0VG9wKCkgPCAwKSB7CisgICAgICAgICAgICAgICAgZmlyc3RGdWxseVZpc2libGVQb3NpdGlvbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGxhc3RGdWxseVZpc2libGVQb3NpdGlvbiA9IGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24gKyBtU2hvd25XZWVrQ291bnQgLSAxOworICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgIT0gbnVsbCAmJiBmaXJzdENoaWxkLmdldFRvcCgpID4gbUJvdHRvbUJ1ZmZlcikgeworICAgICAgICAgICAgICAgIGxhc3RGdWxseVZpc2libGVQb3NpdGlvbi0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNldFNlbGVjdGVkKSB7CisgICAgICAgICAgICAgICAgbUFkYXB0ZXIuc2V0U2VsZWN0ZWREYXkoZGF0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBHZXQgdGhlIHdlZWsgd2UncmUgZ29pbmcgdG8KKyAgICAgICAgICAgIGludCBwb3NpdGlvbiA9IGdldFdlZWtzU2luY2VNaW5EYXRlKGRhdGUpOworCisgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2VsZWN0ZWQgZGF5IGlzIG5vdyBvdXRzaWRlIG9mIG91ciB2aXNpYmxlIHJhbmdlCisgICAgICAgICAgICAvLyBhbmQgaWYgc28gc2Nyb2xsIHRvIHRoZSBtb250aCB0aGF0IGNvbnRhaW5zIGl0CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBmaXJzdEZ1bGx5VmlzaWJsZVBvc2l0aW9uIHx8IHBvc2l0aW9uID4gbGFzdEZ1bGx5VmlzaWJsZVBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgIHx8IGZvcmNlU2Nyb2xsKSB7CisgICAgICAgICAgICAgICAgbUZpcnN0RGF5T2ZNb250aC5zZXRUaW1lSW5NaWxsaXMoZGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICAgICAgbUZpcnN0RGF5T2ZNb250aC5zZXQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAxKTsKKworICAgICAgICAgICAgICAgIHNldE1vbnRoRGlzcGxheWVkKG1GaXJzdERheU9mTW9udGgpOworCisgICAgICAgICAgICAgICAgLy8gdGhlIGVhcmxpZXN0IHRpbWUgd2UgY2FuIHNjcm9sbCB0byBpcyB0aGUgbWluIGRhdGUKKyAgICAgICAgICAgICAgICBpZiAobUZpcnN0RGF5T2ZNb250aC5iZWZvcmUobU1pbkRhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGdldFdlZWtzU2luY2VNaW5EYXRlKG1GaXJzdERheU9mTW9udGgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnQgZGlzdCA9IGNoaWxkLmdldEJvdHRvbSgpIC0gbUxpc3RTY3JvbGxUb3BPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaWYgKGRpc3QgPiBtTGlzdFNjcm9sbFRvcE9mZnNldCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobUlzU2Nyb2xsaW5nVXApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WaWV3LnNtb290aFNjcm9sbEJ5KGRpc3QgLSBjaGlsZC5nZXRIZWlnaHQoKSwgQURKVVNUTUVOVF9TQ1JPTExfRFVSQVRJT04pOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXcuc21vb3RoU2Nyb2xsQnkoZGlzdCwgQURKVVNUTUVOVF9TQ1JPTExfRFVSQVRJT04pOworCisgICAgICAgICAgICAgICAgbVByZXZpb3VzU2Nyb2xsU3RhdGUgPSBPblNjcm9sbExpc3RlbmVyLlNDUk9MTF9TVEFURV9GTElORzsKKyAgICAgICAgICAgICAgICBpZiAoYW5pbWF0ZSkgeworICAgICAgICAgICAgICAgICAgICBtTGlzdFZpZXcuc21vb3RoU2Nyb2xsVG9Qb3NpdGlvbkZyb21Ub3AocG9zaXRpb24sIG1MaXN0U2Nyb2xsVG9wT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPVE9fU0NST0xMX0RVUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtTGlzdFZpZXcuc2V0U2VsZWN0aW9uRnJvbVRvcChwb3NpdGlvbiwgbUxpc3RTY3JvbGxUb3BPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIGFueSBhZnRlciBzY3JvbGwgb3BlcmF0aW9ucyB0aGF0IGFyZSBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgb25TY3JvbGxTdGF0ZUNoYW5nZWQobUxpc3RWaWV3LCBPblNjcm9sbExpc3RlbmVyLlNDUk9MTF9TVEFURV9JRExFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNldFNlbGVjdGVkKSB7CisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzZWxlY3Rpb24KKyAgICAgICAgICAgICAgICBzZXRNb250aERpc3BsYXllZChkYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBQYXJzZXMgdGhlIGdpdmVuIDxjb2RlPmRhdGU8L2NvZGU+IGFuZCBpbiBjYXNlIG9mIHN1Y2Nlc3Mgc2V0cworICAgICAgICAgKiB0aGUgcmVzdWx0IHRvIHRoZSA8Y29kZT5vdXREYXRlPC9jb2RlPi4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBkYXRlIHdhcyBwYXJzZWQuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGJvb2xlYW4gcGFyc2VEYXRlKFN0cmluZyBkYXRlLCBDYWxlbmRhciBvdXREYXRlKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG91dERhdGUuc2V0VGltZShtRGF0ZUZvcm1hdC5wYXJzZShkYXRlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIkRhdGU6ICIgKyBkYXRlICsgIiBub3QgaW4gZm9ybWF0OiAiICsgREFURV9GT1JNQVQpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgd2hlbiBhIDxjb2RlPnZpZXc8L2NvZGU+IHRyYW5zaXRpb25zIHRvIGEgbmV3IDxjb2RlPnNjcm9sbFN0YXRlCisgICAgICAgICAqIDwvY29kZT4uCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgb25TY3JvbGxTdGF0ZUNoYW5nZWQoQWJzTGlzdFZpZXcgdmlldywgaW50IHNjcm9sbFN0YXRlKSB7CisgICAgICAgICAgICBtU2Nyb2xsU3RhdGVDaGFuZ2VkUnVubmFibGUuZG9TY3JvbGxTdGF0ZUNoYW5nZSh2aWV3LCBzY3JvbGxTdGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVXBkYXRlcyB0aGUgdGl0bGUgYW5kIHNlbGVjdGVkIG1vbnRoIGlmIHRoZSA8Y29kZT52aWV3PC9jb2RlPiBoYXMgbW92ZWQgdG8gYSBuZXcKKyAgICAgICAgICogbW9udGguCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgb25TY3JvbGwoQWJzTGlzdFZpZXcgdmlldywgaW50IGZpcnN0VmlzaWJsZUl0ZW0sIGludCB2aXNpYmxlSXRlbUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvdGFsSXRlbUNvdW50KSB7CisgICAgICAgICAgICBXZWVrVmlldyBjaGlsZCA9IChXZWVrVmlldykgdmlldy5nZXRDaGlsZEF0KDApOworICAgICAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hlcmUgd2UgYXJlCisgICAgICAgICAgICBsb25nIGN1cnJTY3JvbGwgPQorICAgICAgICAgICAgICAgICAgICB2aWV3LmdldEZpcnN0VmlzaWJsZVBvc2l0aW9uKCkgKiBjaGlsZC5nZXRIZWlnaHQoKSAtIGNoaWxkLmdldEJvdHRvbSgpOworCisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG1vdmVkIHNpbmNlIG91ciBsYXN0IGNhbGwgdXBkYXRlIHRoZSBkaXJlY3Rpb24KKyAgICAgICAgICAgIGlmIChjdXJyU2Nyb2xsIDwgbVByZXZpb3VzU2Nyb2xsUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICBtSXNTY3JvbGxpbmdVcCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJTY3JvbGwgPiBtUHJldmlvdXNTY3JvbGxQb3NpdGlvbikgeworICAgICAgICAgICAgICAgIG1Jc1Njcm9sbGluZ1VwID0gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVXNlIHNvbWUgaHlzdGVyZXNpcyBmb3IgY2hlY2tpbmcgd2hpY2ggbW9udGggdG8gaGlnaGxpZ2h0LiBUaGlzCisgICAgICAgICAgICAvLyBjYXVzZXMgdGhlIG1vbnRoIHRvIHRyYW5zaXRpb24gd2hlbiB0d28gZnVsbCB3ZWVrcyBvZiBhIG1vbnRoIGFyZQorICAgICAgICAgICAgLy8gdmlzaWJsZSB3aGVuIHNjcm9sbGluZyB1cCwgYW5kIHdoZW4gdGhlIGZpcnN0IGRheSBpbiBhIG1vbnRoIHJlYWNoZXMKKyAgICAgICAgICAgIC8vIHRoZSB0b3Agb2YgdGhlIHNjcmVlbiB3aGVuIHNjcm9sbGluZyBkb3duLgorICAgICAgICAgICAgaW50IG9mZnNldCA9IGNoaWxkLmdldEJvdHRvbSgpIDwgbVdlZWtNaW5WaXNpYmxlSGVpZ2h0ID8gMSA6IDA7CisgICAgICAgICAgICBpZiAobUlzU2Nyb2xsaW5nVXApIHsKKyAgICAgICAgICAgICAgICBjaGlsZCA9IChXZWVrVmlldykgdmlldy5nZXRDaGlsZEF0KFNDUk9MTF9IWVNUX1dFRUtTICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ICE9IDApIHsKKyAgICAgICAgICAgICAgICBjaGlsZCA9IChXZWVrVmlldykgdmlldy5nZXRDaGlsZEF0KG9mZnNldCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZpbmQgb3V0IHdoaWNoIG1vbnRoIHdlJ3JlIG1vdmluZyBpbnRvCisgICAgICAgICAgICBpbnQgbW9udGg7CisgICAgICAgICAgICBpZiAobUlzU2Nyb2xsaW5nVXApIHsKKyAgICAgICAgICAgICAgICBtb250aCA9IGNoaWxkLmdldE1vbnRoT2ZGaXJzdFdlZWtEYXkoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbW9udGggPSBjaGlsZC5nZXRNb250aE9mTGFzdFdlZWtEYXkoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQW5kIGhvdyBpdCByZWxhdGVzIHRvIG91ciBjdXJyZW50IGhpZ2hsaWdodGVkIG1vbnRoCisgICAgICAgICAgICBpbnQgbW9udGhEaWZmOworICAgICAgICAgICAgaWYgKG1DdXJyZW50TW9udGhEaXNwbGF5ZWQgPT0gMTEgJiYgbW9udGggPT0gMCkgeworICAgICAgICAgICAgICAgIG1vbnRoRGlmZiA9IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1DdXJyZW50TW9udGhEaXNwbGF5ZWQgPT0gMCAmJiBtb250aCA9PSAxMSkgeworICAgICAgICAgICAgICAgIG1vbnRoRGlmZiA9IC0xOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb250aERpZmYgPSBtb250aCAtIG1DdXJyZW50TW9udGhEaXNwbGF5ZWQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9ubHkgc3dpdGNoIG1vbnRocyBpZiB3ZSdyZSBzY3JvbGxpbmcgYXdheSBmcm9tIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgIC8vIHNlbGVjdGVkIG1vbnRoCisgICAgICAgICAgICBpZiAoKCFtSXNTY3JvbGxpbmdVcCAmJiBtb250aERpZmYgPiAwKSB8fCAobUlzU2Nyb2xsaW5nVXAgJiYgbW9udGhEaWZmIDwgMCkpIHsKKyAgICAgICAgICAgICAgICBDYWxlbmRhciBmaXJzdERheSA9IGNoaWxkLmdldEZpcnN0RGF5KCk7CisgICAgICAgICAgICAgICAgaWYgKG1Jc1Njcm9sbGluZ1VwKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0RGF5LmFkZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIC1EQVlTX1BFUl9XRUVLKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmaXJzdERheS5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCBEQVlTX1BFUl9XRUVLKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0TW9udGhEaXNwbGF5ZWQoZmlyc3REYXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVByZXZpb3VzU2Nyb2xsUG9zaXRpb24gPSBjdXJyU2Nyb2xsOworICAgICAgICAgICAgbVByZXZpb3VzU2Nyb2xsU3RhdGUgPSBtQ3VycmVudFNjcm9sbFN0YXRlOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIG1vbnRoIGRpc3BsYXllZCBhdCB0aGUgdG9wIG9mIHRoaXMgdmlldyBiYXNlZCBvbiB0aW1lLiBPdmVycmlkZQorICAgICAgICAgKiB0byBhZGQgY3VzdG9tIGV2ZW50cyB3aGVuIHRoZSB0aXRsZSBpcyBjaGFuZ2VkLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gY2FsZW5kYXIgQSBkYXkgaW4gdGhlIG5ldyBmb2N1cyBtb250aC4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCBzZXRNb250aERpc3BsYXllZChDYWxlbmRhciBjYWxlbmRhcikgeworICAgICAgICAgICAgbUN1cnJlbnRNb250aERpc3BsYXllZCA9IGNhbGVuZGFyLmdldChDYWxlbmRhci5NT05USCk7CisgICAgICAgICAgICBtQWRhcHRlci5zZXRGb2N1c01vbnRoKG1DdXJyZW50TW9udGhEaXNwbGF5ZWQpOworICAgICAgICAgICAgZmluYWwgaW50IGZsYWdzID0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX0RBVEUgfCBEYXRlVXRpbHMuRk9STUFUX05PX01PTlRIX0RBWQorICAgICAgICAgICAgICAgICAgICB8IERhdGVVdGlscy5GT1JNQVRfU0hPV19ZRUFSOworICAgICAgICAgICAgZmluYWwgbG9uZyBtaWxsaXMgPSBjYWxlbmRhci5nZXRUaW1lSW5NaWxsaXMoKTsKKyAgICAgICAgICAgIFN0cmluZyBuZXdNb250aE5hbWUgPSBEYXRlVXRpbHMuZm9ybWF0RGF0ZVJhbmdlKG1Db250ZXh0LCBtaWxsaXMsIG1pbGxpcywgZmxhZ3MpOworICAgICAgICAgICAgbU1vbnRoTmFtZS5zZXRUZXh0KG5ld01vbnRoTmFtZSk7CisgICAgICAgICAgICBtTW9udGhOYW1lLmludmFsaWRhdGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIG51bWJlciBvZiB3ZWVrcyBiZXR3ZWVuIHRoZSBjdXJyZW50IDxjb2RlPmRhdGU8L2NvZGU+CisgICAgICAgICAqICAgICAgICAgYW5kIHRoZSA8Y29kZT5tTWluRGF0ZTwvY29kZT4uCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGludCBnZXRXZWVrc1NpbmNlTWluRGF0ZShDYWxlbmRhciBkYXRlKSB7CisgICAgICAgICAgICBpZiAoZGF0ZS5iZWZvcmUobU1pbkRhdGUpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZnJvbURhdGU6ICIgKyBtTWluRGF0ZS5nZXRUaW1lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBkb2VzIG5vdCBwcmVjZWRlIHRvRGF0ZTogIiArIGRhdGUuZ2V0VGltZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvbmcgZW5kVGltZU1pbGxpcyA9IGRhdGUuZ2V0VGltZUluTWlsbGlzKCkKKyAgICAgICAgICAgICAgICAgICAgKyBkYXRlLmdldFRpbWVab25lKCkuZ2V0T2Zmc2V0KGRhdGUuZ2V0VGltZUluTWlsbGlzKCkpOworICAgICAgICAgICAgbG9uZyBzdGFydFRpbWVNaWxsaXMgPSBtTWluRGF0ZS5nZXRUaW1lSW5NaWxsaXMoKQorICAgICAgICAgICAgICAgICAgICArIG1NaW5EYXRlLmdldFRpbWVab25lKCkuZ2V0T2Zmc2V0KG1NaW5EYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKKyAgICAgICAgICAgIGxvbmcgZGF5T2Zmc2V0TWlsbGlzID0gKG1NaW5EYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfV0VFSykgLSBtRmlyc3REYXlPZldlZWspCisgICAgICAgICAgICAgICAgICAgICogTUlMTElTX0lOX0RBWTsKKyAgICAgICAgICAgIHJldHVybiAoaW50KSAoKGVuZFRpbWVNaWxsaXMgLSBzdGFydFRpbWVNaWxsaXMgKyBkYXlPZmZzZXRNaWxsaXMpIC8gTUlMTElTX0lOX1dFRUspOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbW1hbmQgcmVzcG9uc2libGUgZm9yIGFjdGluZyB1cG9uIHNjcm9sbCBzdGF0ZSBjaGFuZ2VzLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBjbGFzcyBTY3JvbGxTdGF0ZVJ1bm5hYmxlIGltcGxlbWVudHMgUnVubmFibGUgeworICAgICAgICAgICAgcHJpdmF0ZSBBYnNMaXN0VmlldyBtVmlldzsKKworICAgICAgICAgICAgcHJpdmF0ZSBpbnQgbU5ld1N0YXRlOworCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFNldHMgdXAgdGhlIHJ1bm5hYmxlIHdpdGggYSBzaG9ydCBkZWxheSBpbiBjYXNlIHRoZSBzY3JvbGwgc3RhdGUKKyAgICAgICAgICAgICAqIGltbWVkaWF0ZWx5IGNoYW5nZXMgYWdhaW4uCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogQHBhcmFtIHZpZXcgVGhlIGxpc3QgdmlldyB0aGF0IGNoYW5nZWQgc3RhdGUKKyAgICAgICAgICAgICAqIEBwYXJhbSBzY3JvbGxTdGF0ZSBUaGUgbmV3IHN0YXRlIGl0IGNoYW5nZWQgdG8KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIHZvaWQgZG9TY3JvbGxTdGF0ZUNoYW5nZShBYnNMaXN0VmlldyB2aWV3LCBpbnQgc2Nyb2xsU3RhdGUpIHsKKyAgICAgICAgICAgICAgICBtVmlldyA9IHZpZXc7CisgICAgICAgICAgICAgICAgbU5ld1N0YXRlID0gc2Nyb2xsU3RhdGU7CisgICAgICAgICAgICAgICAgbURlbGVnYXRvci5yZW1vdmVDYWxsYmFja3ModGhpcyk7CisgICAgICAgICAgICAgICAgbURlbGVnYXRvci5wb3N0RGVsYXllZCh0aGlzLCBTQ1JPTExfQ0hBTkdFX0RFTEFZKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIG1DdXJyZW50U2Nyb2xsU3RhdGUgPSBtTmV3U3RhdGU7CisgICAgICAgICAgICAgICAgLy8gRml4IHRoZSBwb3NpdGlvbiBhZnRlciBhIHNjcm9sbCBvciBhIGZsaW5nIGVuZHMKKyAgICAgICAgICAgICAgICBpZiAobU5ld1N0YXRlID09IE9uU2Nyb2xsTGlzdGVuZXIuU0NST0xMX1NUQVRFX0lETEUKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1QcmV2aW91c1Njcm9sbFN0YXRlICE9IE9uU2Nyb2xsTGlzdGVuZXIuU0NST0xMX1NUQVRFX0lETEUpIHsKKyAgICAgICAgICAgICAgICAgICAgVmlldyBjaGlsZCA9IG1WaWV3LmdldENoaWxkQXQoMCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdmlldyBpcyBubyBsb25nZXIgdmlzaWJsZSwganVzdCByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpbnQgZGlzdCA9IGNoaWxkLmdldEJvdHRvbSgpIC0gbUxpc3RTY3JvbGxUb3BPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0ID4gbUxpc3RTY3JvbGxUb3BPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtSXNTY3JvbGxpbmdVcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1WaWV3LnNtb290aFNjcm9sbEJ5KGRpc3QgLSBjaGlsZC5nZXRIZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVE1FTlRfU0NST0xMX0RVUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXcuc21vb3RoU2Nyb2xsQnkoZGlzdCwgQURKVVNUTUVOVF9TQ1JPTExfRFVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1QcmV2aW91c1Njcm9sbFN0YXRlID0gbU5ld1N0YXRlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbVByZXZpb3VzU2Nyb2xsU3RhdGUgPSBtTmV3U3RhdGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGlzIGEgc3BlY2lhbGl6ZWQgYWRhcHRlciBmb3IgY3JlYXRpbmcgYSBsaXN0IG9mIHdlZWtzIHdpdGgKLSAgICAgKiBzZWxlY3RhYmxlIGRheXMuIEl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGRpc3BsYXkgdGhlIHdlZWsgbnVtYmVyLCBzdGFydAotICAgICAqIHRoZSB3ZWVrIG9uIGEgZ2l2ZW4gZGF5LCBzaG93IGEgcmVkdWNlZCBudW1iZXIgb2YgZGF5cywgb3IgZGlzcGxheSBhbgotICAgICAqIGFyYml0cmFyeSBudW1iZXIgb2Ygd2Vla3MgYXQgYSB0aW1lLgotICAgICAqIDwvcD4KLSAgICAgKi8KLSAgICBwcml2YXRlIGNsYXNzIFdlZWtzQWRhcHRlciBleHRlbmRzIEJhc2VBZGFwdGVyIGltcGxlbWVudHMgT25Ub3VjaExpc3RlbmVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBDYWxlbmRhciBtU2VsZWN0ZWREYXRlID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBHZXN0dXJlRGV0ZWN0b3IgbUdlc3R1cmVEZXRlY3RvcjsKLQotICAgICAgICBwcml2YXRlIGludCBtU2VsZWN0ZWRXZWVrOwotCi0gICAgICAgIHByaXZhdGUgaW50IG1Gb2N1c2VkTW9udGg7Ci0KLSAgICAgICAgcHJpdmF0ZSBpbnQgbVRvdGFsV2Vla0NvdW50OwotCi0gICAgICAgIHB1YmxpYyBXZWVrc0FkYXB0ZXIoKSB7Ci0gICAgICAgICAgICBtR2VzdHVyZURldGVjdG9yID0gbmV3IEdlc3R1cmVEZXRlY3RvcihtQ29udGV4dCwgbmV3IENhbGVuZGFyR2VzdHVyZUxpc3RlbmVyKCkpOwotICAgICAgICAgICAgaW5pdCgpOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFNldCB1cCB0aGUgZ2VzdHVyZSBkZXRlY3RvciBhbmQgc2VsZWN0ZWQgdGltZQorICAgICAgICAgKiA8cD4KKyAgICAgICAgICogVGhpcyBpcyBhIHNwZWNpYWxpemVkIGFkYXB0ZXIgZm9yIGNyZWF0aW5nIGEgbGlzdCBvZiB3ZWVrcyB3aXRoCisgICAgICAgICAqIHNlbGVjdGFibGUgZGF5cy4gSXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZGlzcGxheSB0aGUgd2VlayBudW1iZXIsIHN0YXJ0CisgICAgICAgICAqIHRoZSB3ZWVrIG9uIGEgZ2l2ZW4gZGF5LCBzaG93IGEgcmVkdWNlZCBudW1iZXIgb2YgZGF5cywgb3IgZGlzcGxheSBhbgorICAgICAgICAgKiBhcmJpdHJhcnkgbnVtYmVyIG9mIHdlZWtzIGF0IGEgdGltZS4KKyAgICAgICAgICogPC9wPgogICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0gICAgICAgICAgICBtU2VsZWN0ZWRXZWVrID0gZ2V0V2Vla3NTaW5jZU1pbkRhdGUobVNlbGVjdGVkRGF0ZSk7Ci0gICAgICAgICAgICBtVG90YWxXZWVrQ291bnQgPSBnZXRXZWVrc1NpbmNlTWluRGF0ZShtTWF4RGF0ZSk7Ci0gICAgICAgICAgICBpZiAobU1pbkRhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLKSAhPSBtRmlyc3REYXlPZldlZWsKLSAgICAgICAgICAgICAgICB8fCBtTWF4RGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspICE9IG1GaXJzdERheU9mV2VlaykgewotICAgICAgICAgICAgICAgIG1Ub3RhbFdlZWtDb3VudCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbm90aWZ5RGF0YVNldENoYW5nZWQoKTsKLSAgICAgICAgfQorICAgICAgICBwcml2YXRlIGNsYXNzIFdlZWtzQWRhcHRlciBleHRlbmRzIEJhc2VBZGFwdGVyIGltcGxlbWVudHMgT25Ub3VjaExpc3RlbmVyIHsKIAotICAgICAgICAvKioKLSAgICAgICAgICogVXBkYXRlcyB0aGUgc2VsZWN0ZWQgZGF5IGFuZCByZWxhdGVkIHBhcmFtZXRlcnMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBzZWxlY3RlZERheSBUaGUgdGltZSB0byBoaWdobGlnaHQKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkRGF5KENhbGVuZGFyIHNlbGVjdGVkRGF5KSB7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXkuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSA9PSBtU2VsZWN0ZWREYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikKLSAgICAgICAgICAgICAgICAgICAgJiYgc2VsZWN0ZWREYXkuZ2V0KENhbGVuZGFyLllFQVIpID09IG1TZWxlY3RlZERhdGUuZ2V0KENhbGVuZGFyLllFQVIpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVNlbGVjdGVkRGF0ZS5zZXRUaW1lSW5NaWxsaXMoc2VsZWN0ZWREYXkuZ2V0VGltZUluTWlsbGlzKCkpOwotICAgICAgICAgICAgbVNlbGVjdGVkV2VlayA9IGdldFdlZWtzU2luY2VNaW5EYXRlKG1TZWxlY3RlZERhdGUpOwotICAgICAgICAgICAgbUZvY3VzZWRNb250aCA9IG1TZWxlY3RlZERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKTsKLSAgICAgICAgICAgIG5vdGlmeURhdGFTZXRDaGFuZ2VkKCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHByaXZhdGUgaW50IG1TZWxlY3RlZFdlZWs7CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEByZXR1cm4gVGhlIHNlbGVjdGVkIGRheSBvZiBtb250aC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBDYWxlbmRhciBnZXRTZWxlY3RlZERheSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtU2VsZWN0ZWREYXRlOwotICAgICAgICB9CisgICAgICAgICAgICBwcml2YXRlIEdlc3R1cmVEZXRlY3RvciBtR2VzdHVyZURldGVjdG9yOwogCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IGdldENvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIG1Ub3RhbFdlZWtDb3VudDsKLSAgICAgICAgfQorICAgICAgICAgICAgcHJpdmF0ZSBpbnQgbUZvY3VzZWRNb250aDsKIAotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIE9iamVjdCBnZXRJdGVtKGludCBwb3NpdGlvbikgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHByaXZhdGUgZmluYWwgQ2FsZW5kYXIgbVNlbGVjdGVkRGF0ZSA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CiAKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBsb25nIGdldEl0ZW1JZChpbnQgcG9zaXRpb24pIHsKLSAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKLSAgICAgICAgfQorICAgICAgICAgICAgcHJpdmF0ZSBpbnQgbVRvdGFsV2Vla0NvdW50OwogCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVmlldyBnZXRWaWV3KGludCBwb3NpdGlvbiwgVmlldyBjb252ZXJ0VmlldywgVmlld0dyb3VwIHBhcmVudCkgewotICAgICAgICAgICAgV2Vla1ZpZXcgd2Vla1ZpZXcgPSBudWxsOwotICAgICAgICAgICAgaWYgKGNvbnZlcnRWaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB3ZWVrVmlldyA9IChXZWVrVmlldykgY29udmVydFZpZXc7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHdlZWtWaWV3ID0gbmV3IFdlZWtWaWV3KG1Db250ZXh0KTsKLSAgICAgICAgICAgICAgICBhbmRyb2lkLndpZGdldC5BYnNMaXN0Vmlldy5MYXlvdXRQYXJhbXMgcGFyYW1zID0KLSAgICAgICAgICAgICAgICAgICAgbmV3IGFuZHJvaWQud2lkZ2V0LkFic0xpc3RWaWV3LkxheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpOwotICAgICAgICAgICAgICAgIHdlZWtWaWV3LnNldExheW91dFBhcmFtcyhwYXJhbXMpOwotICAgICAgICAgICAgICAgIHdlZWtWaWV3LnNldENsaWNrYWJsZSh0cnVlKTsKLSAgICAgICAgICAgICAgICB3ZWVrVmlldy5zZXRPblRvdWNoTGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBwdWJsaWMgV2Vla3NBZGFwdGVyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgICAgICAgICBtR2VzdHVyZURldGVjdG9yID0gbmV3IEdlc3R1cmVEZXRlY3RvcihtQ29udGV4dCwgbmV3IENhbGVuZGFyR2VzdHVyZUxpc3RlbmVyKCkpOworICAgICAgICAgICAgICAgIGluaXQoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaW50IHNlbGVjdGVkV2Vla0RheSA9IChtU2VsZWN0ZWRXZWVrID09IHBvc2l0aW9uKSA/IG1TZWxlY3RlZERhdGUuZ2V0KAotICAgICAgICAgICAgICAgICAgICBDYWxlbmRhci5EQVlfT0ZfV0VFSykgOiAtMTsKLSAgICAgICAgICAgIHdlZWtWaWV3LmluaXQocG9zaXRpb24sIHNlbGVjdGVkV2Vla0RheSwgbUZvY3VzZWRNb250aCk7Ci0KLSAgICAgICAgICAgIHJldHVybiB3ZWVrVmlldzsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDaGFuZ2VzIHdoaWNoIG1vbnRoIGlzIGluIGZvY3VzIGFuZCB1cGRhdGVzIHRoZSB2aWV3LgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gbW9udGggVGhlIG1vbnRoIHRvIHNob3cgYXMgaW4gZm9jdXMgWzAtMTFdCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBzZXRGb2N1c01vbnRoKGludCBtb250aCkgewotICAgICAgICAgICAgaWYgKG1Gb2N1c2VkTW9udGggPT0gbW9udGgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtRm9jdXNlZE1vbnRoID0gbW9udGg7Ci0gICAgICAgICAgICBub3RpZnlEYXRhU2V0Q2hhbmdlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIG9uVG91Y2goVmlldyB2LCBNb3Rpb25FdmVudCBldmVudCkgewotICAgICAgICAgICAgaWYgKG1MaXN0Vmlldy5pc0VuYWJsZWQoKSAmJiBtR2VzdHVyZURldGVjdG9yLm9uVG91Y2hFdmVudChldmVudCkpIHsKLSAgICAgICAgICAgICAgICBXZWVrVmlldyB3ZWVrVmlldyA9IChXZWVrVmlldykgdjsKLSAgICAgICAgICAgICAgICAvLyBpZiB3ZSBjYW5ub3QgZmluZCBhIGRheSBmb3IgdGhlIGdpdmVuIGxvY2F0aW9uIHdlIGFyZSBkb25lCi0gICAgICAgICAgICAgICAgaWYgKCF3ZWVrVmlldy5nZXREYXlGcm9tTG9jYXRpb24oZXZlbnQuZ2V0WCgpLCBtVGVtcERhdGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBTZXQgdXAgdGhlIGdlc3R1cmUgZGV0ZWN0b3IgYW5kIHNlbGVjdGVkIHRpbWUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7CisgICAgICAgICAgICAgICAgbVNlbGVjdGVkV2VlayA9IGdldFdlZWtzU2luY2VNaW5EYXRlKG1TZWxlY3RlZERhdGUpOworICAgICAgICAgICAgICAgIG1Ub3RhbFdlZWtDb3VudCA9IGdldFdlZWtzU2luY2VNaW5EYXRlKG1NYXhEYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAobU1pbkRhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9XRUVLKSAhPSBtRmlyc3REYXlPZldlZWsKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1NYXhEYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfV0VFSykgIT0gbUZpcnN0RGF5T2ZXZWVrKSB7CisgICAgICAgICAgICAgICAgICAgIG1Ub3RhbFdlZWtDb3VudCsrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSB0b3VjaGVkIGRheSBpcyBvdXRzaWRlIHRoZSB2YWxpZCByYW5nZQotICAgICAgICAgICAgICAgIC8vIHdlIGRyYXcgd2hvbGUgd2Vla3MgYnV0IHJhbmdlIGVuZCBjYW4gZmFsbCBub3Qgb24gdGhlIHdlZWsgZW5kCi0gICAgICAgICAgICAgICAgaWYgKG1UZW1wRGF0ZS5iZWZvcmUobU1pbkRhdGUpIHx8IG1UZW1wRGF0ZS5hZnRlcihtTWF4RGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9uRGF0ZVRhcHBlZChtVGVtcERhdGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIE1haW50YWlucyB0aGUgc2FtZSBob3VyL21pbi9zZWMgYnV0IG1vdmVzIHRoZSBkYXkgdG8gdGhlIHRhcHBlZCBkYXkuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBkYXkgVGhlIGRheSB0aGF0IHdhcyB0YXBwZWQKLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgdm9pZCBvbkRhdGVUYXBwZWQoQ2FsZW5kYXIgZGF5KSB7Ci0gICAgICAgICAgICBzZXRTZWxlY3RlZERheShkYXkpOwotICAgICAgICAgICAgc2V0TW9udGhEaXNwbGF5ZWQoZGF5KTsKLSAgICAgICAgfQorICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBVcGRhdGVzIHRoZSBzZWxlY3RlZCBkYXkgYW5kIHJlbGF0ZWQgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBAcGFyYW0gc2VsZWN0ZWREYXkgVGhlIHRpbWUgdG8gaGlnaGxpZ2h0CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkRGF5KENhbGVuZGFyIHNlbGVjdGVkRGF5KSB7CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRGF5LmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikgPT0gbVNlbGVjdGVkRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1lFQVIpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWxlY3RlZERheS5nZXQoQ2FsZW5kYXIuWUVBUikgPT0gbVNlbGVjdGVkRGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtU2VsZWN0ZWREYXRlLnNldFRpbWVJbk1pbGxpcyhzZWxlY3RlZERheS5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICAgICAgbVNlbGVjdGVkV2VlayA9IGdldFdlZWtzU2luY2VNaW5EYXRlKG1TZWxlY3RlZERhdGUpOworICAgICAgICAgICAgICAgIG1Gb2N1c2VkTW9udGggPSBtU2VsZWN0ZWREYXRlLmdldChDYWxlbmRhci5NT05USCk7CisgICAgICAgICAgICAgICAgbm90aWZ5RGF0YVNldENoYW5nZWQoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAvKioKLSAgICAgICAgICogVGhpcyBpcyBoZXJlIHNvIHdlIGNhbiBpZGVudGlmeSBzaW5nbGUgdGFwIGV2ZW50cyBhbmQgc2V0IHRoZQotICAgICAgICAgKiBzZWxlY3RlZCBkYXkgY29ycmVjdGx5Ci0gICAgICAgICAqLwotICAgICAgICBjbGFzcyBDYWxlbmRhckdlc3R1cmVMaXN0ZW5lciBleHRlbmRzIEdlc3R1cmVEZXRlY3Rvci5TaW1wbGVPbkdlc3R1cmVMaXN0ZW5lciB7CisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIEByZXR1cm4gVGhlIHNlbGVjdGVkIGRheSBvZiBtb250aC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIENhbGVuZGFyIGdldFNlbGVjdGVkRGF5KCkgeworICAgICAgICAgICAgICAgIHJldHVybiBtU2VsZWN0ZWREYXRlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uU2luZ2xlVGFwVXAoTW90aW9uRXZlbnQgZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogPHA+Ci0gICAgICogVGhpcyBpcyBhIGR5bmFtaWMgdmlldyBmb3IgZHJhd2luZyBhIHNpbmdsZSB3ZWVrLiBJdCBjYW4gYmUgY29uZmlndXJlZCB0bwotICAgICAqIGRpc3BsYXkgdGhlIHdlZWsgbnVtYmVyLCBzdGFydCB0aGUgd2VlayBvbiBhIGdpdmVuIGRheSwgb3Igc2hvdyBhIHJlZHVjZWQKLSAgICAgKiBudW1iZXIgb2YgZGF5cy4gSXQgaXMgaW50ZW5kZWQgZm9yIHVzZSBhcyBhIHNpbmdsZSB2aWV3IHdpdGhpbiBhCi0gICAgICogTGlzdFZpZXcuIFNlZSB7QGxpbmsgV2Vla3NBZGFwdGVyfSBmb3IgdXNhZ2UuCi0gICAgICogPC9wPgotICAgICAqLwotICAgIHByaXZhdGUgY2xhc3MgV2Vla1ZpZXcgZXh0ZW5kcyBWaWV3IHsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRlbXBSZWN0ID0gbmV3IFJlY3QoKTsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIFBhaW50IG1EcmF3UGFpbnQgPSBuZXcgUGFpbnQoKTsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIFBhaW50IG1Nb250aE51bURyYXdQYWludCA9IG5ldyBQYWludCgpOwotCi0gICAgICAgIC8vIENhY2hlIHRoZSBudW1iZXIgc3RyaW5ncyBzbyB3ZSBkb24ndCBoYXZlIHRvIHJlY29tcHV0ZSB0aGVtIGVhY2ggdGltZQotICAgICAgICBwcml2YXRlIFN0cmluZ1tdIG1EYXlOdW1iZXJzOwotCi0gICAgICAgIC8vIFF1aWNrIGxvb2t1cCBmb3IgY2hlY2tpbmcgd2hpY2ggZGF5cyBhcmUgaW4gdGhlIGZvY3VzIG1vbnRoCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbltdIG1Gb2N1c0RheTsKLQotICAgICAgICAvLyBXaGV0aGVyIHRoaXMgdmlldyBoYXMgYSBmb2N1c2VkIGRheS4KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXNGb2N1c2VkRGF5OwotCi0gICAgICAgIC8vIFdoZXRoZXIgdGhpcyB2aWV3IGhhcyBvbmx5IGZvY3VzZWQgZGF5cy4KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXNVbmZvY3VzZWREYXk7Ci0KLSAgICAgICAgLy8gVGhlIGZpcnN0IGRheSBkaXNwbGF5ZWQgYnkgdGhpcyBpdGVtCi0gICAgICAgIHByaXZhdGUgQ2FsZW5kYXIgbUZpcnN0RGF5OwotCi0gICAgICAgIC8vIFRoZSBtb250aCBvZiB0aGUgZmlyc3QgZGF5IGluIHRoaXMgd2VlawotICAgICAgICBwcml2YXRlIGludCBtTW9udGhPZkZpcnN0V2Vla0RheSA9IC0xOwotCi0gICAgICAgIC8vIFRoZSBtb250aCBvZiB0aGUgbGFzdCBkYXkgaW4gdGhpcyB3ZWVrCi0gICAgICAgIHByaXZhdGUgaW50IG1MYXN0V2Vla0RheU1vbnRoID0gLTE7Ci0KLSAgICAgICAgLy8gVGhlIHBvc2l0aW9uIG9mIHRoaXMgd2VlaywgZXF1aXZhbGVudCB0byB3ZWVrcyBzaW5jZSB0aGUgd2VlayBvZiBKYW4KLSAgICAgICAgLy8gMXN0LCAxOTAwCi0gICAgICAgIHByaXZhdGUgaW50IG1XZWVrID0gLTE7Ci0KLSAgICAgICAgLy8gUXVpY2sgcmVmZXJlbmNlIHRvIHRoZSB3aWR0aCBvZiB0aGlzIHZpZXcsIG1hdGNoZXMgcGFyZW50Ci0gICAgICAgIHByaXZhdGUgaW50IG1XaWR0aDsKLQotICAgICAgICAvLyBUaGUgaGVpZ2h0IHRoaXMgdmlldyBzaG91bGQgZHJhdyBhdCBpbiBwaXhlbHMsIHNldCBieSBoZWlnaHQgcGFyYW0KLSAgICAgICAgcHJpdmF0ZSBpbnQgbUhlaWdodDsKLQotICAgICAgICAvLyBJZiB0aGlzIHZpZXcgY29udGFpbnMgdGhlIHNlbGVjdGVkIGRheQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUhhc1NlbGVjdGVkRGF5ID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gV2hpY2ggZGF5IGlzIHNlbGVjdGVkIFswLTZdIG9yIC0xIGlmIG5vIGRheSBpcyBzZWxlY3RlZAotICAgICAgICBwcml2YXRlIGludCBtU2VsZWN0ZWREYXkgPSAtMTsKLQotICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGRheXMgKyBhIHNwb3QgZm9yIHdlZWsgbnVtYmVyIGlmIGl0IGlzIGRpc3BsYXllZAotICAgICAgICBwcml2YXRlIGludCBtTnVtQ2VsbHM7Ci0KLSAgICAgICAgLy8gVGhlIGxlZnQgZWRnZSBvZiB0aGUgc2VsZWN0ZWQgZGF5Ci0gICAgICAgIHByaXZhdGUgaW50IG1TZWxlY3RlZExlZnQgPSAtMTsKLQotICAgICAgICAvLyBUaGUgcmlnaHQgZWRnZSBvZiB0aGUgc2VsZWN0ZWQgZGF5Ci0gICAgICAgIHByaXZhdGUgaW50IG1TZWxlY3RlZFJpZ2h0ID0gLTE7Ci0KLSAgICAgICAgcHVibGljIFdlZWtWaWV3KENvbnRleHQgY29udGV4dCkgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0KLSAgICAgICAgICAgIC8vIFNldHMgdXAgYW55IHN0YW5kYXJkIHBhaW50cyB0aGF0IHdpbGwgYmUgdXNlZAotICAgICAgICAgICAgaW5pdGlsYWl6ZVBhaW50cygpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEluaXRpYWxpemVzIHRoaXMgd2VlayB2aWV3LgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gd2Vla051bWJlciBUaGUgbnVtYmVyIG9mIHRoZSB3ZWVrIHRoaXMgdmlldyByZXByZXNlbnRzLiBUaGUKLSAgICAgICAgICogICAgICAgICAgICB3ZWVrIG51bWJlciBpcyBhIHplcm8gYmFzZWQgaW5kZXggb2YgdGhlIHdlZWtzIHNpbmNlCi0gICAgICAgICAqICAgICAgICAgICAge0BsaW5rIENhbGVuZGFyVmlldyNnZXRNaW5EYXRlKCl9LgotICAgICAgICAgKiBAcGFyYW0gc2VsZWN0ZWRXZWVrRGF5IFRoZSBzZWxlY3RlZCBkYXkgb2YgdGhlIHdlZWsgZnJvbSAwIHRvIDYsIC0xIGlmIG5vCi0gICAgICAgICAqICAgICAgICAgICAgc2VsZWN0ZWQgZGF5LgotICAgICAgICAgKiBAcGFyYW0gZm9jdXNlZE1vbnRoIFRoZSBtb250aCB0aGF0IGlzIGN1cnJlbnRseSBpbiBmb2N1cyBpLmUuCi0gICAgICAgICAqICAgICAgICAgICAgaGlnaGxpZ2h0ZWQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBpbml0KGludCB3ZWVrTnVtYmVyLCBpbnQgc2VsZWN0ZWRXZWVrRGF5LCBpbnQgZm9jdXNlZE1vbnRoKSB7Ci0gICAgICAgICAgICBtU2VsZWN0ZWREYXkgPSBzZWxlY3RlZFdlZWtEYXk7Ci0gICAgICAgICAgICBtSGFzU2VsZWN0ZWREYXkgPSBtU2VsZWN0ZWREYXkgIT0gLTE7Ci0gICAgICAgICAgICBtTnVtQ2VsbHMgPSBtU2hvd1dlZWtOdW1iZXIgPyBtRGF5c1BlcldlZWsgKyAxIDogbURheXNQZXJXZWVrOwotICAgICAgICAgICAgbVdlZWsgPSB3ZWVrTnVtYmVyOwotICAgICAgICAgICAgbVRlbXBEYXRlLnNldFRpbWVJbk1pbGxpcyhtTWluRGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7Ci0KLSAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuV0VFS19PRl9ZRUFSLCBtV2Vlayk7Ci0gICAgICAgICAgICBtVGVtcERhdGUuc2V0Rmlyc3REYXlPZldlZWsobUZpcnN0RGF5T2ZXZWVrKTsKLQotICAgICAgICAgICAgLy8gQWxsb2NhdGUgc3BhY2UgZm9yIGNhY2hpbmcgdGhlIGRheSBudW1iZXJzIGFuZCBmb2N1cyB2YWx1ZXMKLSAgICAgICAgICAgIG1EYXlOdW1iZXJzID0gbmV3IFN0cmluZ1ttTnVtQ2VsbHNdOwotICAgICAgICAgICAgbUZvY3VzRGF5ID0gbmV3IGJvb2xlYW5bbU51bUNlbGxzXTsKLQotICAgICAgICAgICAgLy8gSWYgd2UncmUgc2hvd2luZyB0aGUgd2VlayBudW1iZXIgY2FsY3VsYXRlIGl0IGJhc2VkIG9uIE1vbmRheQotICAgICAgICAgICAgaW50IGkgPSAwOwotICAgICAgICAgICAgaWYgKG1TaG93V2Vla051bWJlcikgewotICAgICAgICAgICAgICAgIG1EYXlOdW1iZXJzWzBdID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuZ2V0RGVmYXVsdCgpLCAiJWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLmdldChDYWxlbmRhci5XRUVLX09GX1lFQVIpKTsKLSAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICBwdWJsaWMgaW50IGdldENvdW50KCkgeworICAgICAgICAgICAgICAgIHJldHVybiBtVG90YWxXZWVrQ291bnQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIE5vdyBhZGp1c3Qgb3VyIHN0YXJ0aW5nIGRheSBiYXNlZCBvbiB0aGUgc3RhcnQgZGF5IG9mIHRoZSB3ZWVrCi0gICAgICAgICAgICBpbnQgZGlmZiA9IG1GaXJzdERheU9mV2VlayAtIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspOwotICAgICAgICAgICAgbVRlbXBEYXRlLmFkZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIGRpZmYpOworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgT2JqZWN0IGdldEl0ZW0oaW50IHBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1GaXJzdERheSA9IChDYWxlbmRhcikgbVRlbXBEYXRlLmNsb25lKCk7Ci0gICAgICAgICAgICBtTW9udGhPZkZpcnN0V2Vla0RheSA9IG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpOworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRJdGVtSWQoaW50IHBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtSGFzVW5mb2N1c2VkRGF5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAoOyBpIDwgbU51bUNlbGxzOyBpKyspIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGlzRm9jdXNlZERheSA9IChtVGVtcERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKSA9PSBmb2N1c2VkTW9udGgpOwotICAgICAgICAgICAgICAgIG1Gb2N1c0RheVtpXSA9IGlzRm9jdXNlZERheTsKLSAgICAgICAgICAgICAgICBtSGFzRm9jdXNlZERheSB8PSBpc0ZvY3VzZWREYXk7Ci0gICAgICAgICAgICAgICAgbUhhc1VuZm9jdXNlZERheSAmPSAhaXNGb2N1c2VkRGF5OwotICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBkcmF3IGRhdGVzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlIHRvIGF2b2lkIHVzZXIgY29uZnVzaW9uCi0gICAgICAgICAgICAgICAgaWYgKG1UZW1wRGF0ZS5iZWZvcmUobU1pbkRhdGUpIHx8IG1UZW1wRGF0ZS5hZnRlcihtTWF4RGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbURheU51bWJlcnNbaV0gPSAiIjsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFZpZXcgZ2V0VmlldyhpbnQgcG9zaXRpb24sIFZpZXcgY29udmVydFZpZXcsIFZpZXdHcm91cCBwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICBXZWVrVmlldyB3ZWVrVmlldyA9IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgd2Vla1ZpZXcgPSAoV2Vla1ZpZXcpIGNvbnZlcnRWaWV3OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1EYXlOdW1iZXJzW2ldID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuZ2V0RGVmYXVsdCgpLCAiJWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CisgICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3ID0gbmV3IFdlZWtWaWV3KG1Db250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZC53aWRnZXQuQWJzTGlzdFZpZXcuTGF5b3V0UGFyYW1zIHBhcmFtcyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGFuZHJvaWQud2lkZ2V0LkFic0xpc3RWaWV3LkxheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCk7CisgICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3LnNldExheW91dFBhcmFtcyhwYXJhbXMpOworICAgICAgICAgICAgICAgICAgICB3ZWVrVmlldy5zZXRDbGlja2FibGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHdlZWtWaWV3LnNldE9uVG91Y2hMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbVRlbXBEYXRlLmFkZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gV2UgZG8gb25lIGV4dHJhIGFkZCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wLCBpZiB0aGF0IHB1c2hlZCB1cyB0bwotICAgICAgICAgICAgLy8gbmV3IG1vbnRoIHVuZG8gaXQKLSAgICAgICAgICAgIGlmIChtVGVtcERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkgPT0gMSkgewotICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtTGFzdFdlZWtEYXlNb250aCA9IG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpOwogCi0gICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb25Qb3NpdGlvbnMoKTsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIGludCBzZWxlY3RlZFdlZWtEYXkgPSAobVNlbGVjdGVkV2VlayA9PSBwb3NpdGlvbikgPyBtU2VsZWN0ZWREYXRlLmdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGVuZGFyLkRBWV9PRl9XRUVLKSA6IC0xOworICAgICAgICAgICAgICAgIHdlZWtWaWV3LmluaXQocG9zaXRpb24sIHNlbGVjdGVkV2Vla0RheSwgbUZvY3VzZWRNb250aCk7CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEluaXRpYWxpemUgdGhlIHBhaW50IGluc3RhbmNlcy4KLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgdm9pZCBpbml0aWxhaXplUGFpbnRzKCkgewotICAgICAgICAgICAgbURyYXdQYWludC5zZXRGYWtlQm9sZFRleHQoZmFsc2UpOwotICAgICAgICAgICAgbURyYXdQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0gICAgICAgICAgICBtRHJhd1BhaW50LnNldFN0eWxlKFN0eWxlLkZJTEwpOwotCi0gICAgICAgICAgICBtTW9udGhOdW1EcmF3UGFpbnQuc2V0RmFrZUJvbGRUZXh0KHRydWUpOwotICAgICAgICAgICAgbU1vbnRoTnVtRHJhd1BhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKLSAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRTdHlsZShTdHlsZS5GSUxMKTsKLSAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRUZXh0QWxpZ24oQWxpZ24uQ0VOVEVSKTsKLSAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRUZXh0U2l6ZShtRGF0ZVRleHRTaXplKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIHRoZSBtb250aCBvZiB0aGUgZmlyc3QgZGF5IGluIHRoaXMgd2Vlay4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBUaGUgbW9udGggdGhlIGZpcnN0IGRheSBvZiB0aGlzIHZpZXcgaXMgaW4uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldE1vbnRoT2ZGaXJzdFdlZWtEYXkoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU1vbnRoT2ZGaXJzdFdlZWtEYXk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0aGUgbW9udGggb2YgdGhlIGxhc3QgZGF5IGluIHRoaXMgd2VlawotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIFRoZSBtb250aCB0aGUgbGFzdCBkYXkgb2YgdGhpcyB2aWV3IGlzIGluCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldE1vbnRoT2ZMYXN0V2Vla0RheSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtTGFzdFdlZWtEYXlNb250aDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBkYXkgaW4gdGhpcyB2aWV3LgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJuIFRoZSBmaXJzdCBkYXkgaW4gdGhlIHZpZXcuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQ2FsZW5kYXIgZ2V0Rmlyc3REYXkoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUZpcnN0RGF5OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGN1bGF0ZXMgdGhlIGRheSB0aGF0IHRoZSBnaXZlbiB4IHBvc2l0aW9uIGlzIGluLCBhY2NvdW50aW5nIGZvcgotICAgICAgICAgKiB3ZWVrIG51bWJlci4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHggVGhlIHggcG9zaXRpb24gb2YgdGhlIHRvdWNoIGV2ZW50LgotICAgICAgICAgKiBAcmV0dXJuIFRydWUgaWYgYSBkYXkgd2FzIGZvdW5kIGZvciB0aGUgZ2l2ZW4gbG9jYXRpb24uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBnZXREYXlGcm9tTG9jYXRpb24oZmxvYXQgeCwgQ2FsZW5kYXIgb3V0Q2FsZW5kYXIpIHsKLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMYXlvdXRSdGwgPSBpc0xheW91dFJ0bCgpOwotCi0gICAgICAgICAgICBpbnQgc3RhcnQ7Ci0gICAgICAgICAgICBpbnQgZW5kOwotCi0gICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwpIHsKLSAgICAgICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgICAgICAgICAgZW5kID0gbVNob3dXZWVrTnVtYmVyID8gbVdpZHRoIC0gbVdpZHRoIC8gbU51bUNlbGxzIDogbVdpZHRoOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdGFydCA9IG1TaG93V2Vla051bWJlciA/IG1XaWR0aCAvIG1OdW1DZWxscyA6IDA7Ci0gICAgICAgICAgICAgICAgZW5kID0gbVdpZHRoOworICAgICAgICAgICAgICAgIHJldHVybiB3ZWVrVmlldzsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHggPCBzdGFydCB8fCB4ID4gZW5kKSB7Ci0gICAgICAgICAgICAgICAgb3V0Q2FsZW5kYXIuY2xlYXIoKTsKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ2hhbmdlcyB3aGljaCBtb250aCBpcyBpbiBmb2N1cyBhbmQgdXBkYXRlcyB0aGUgdmlldy4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBAcGFyYW0gbW9udGggVGhlIG1vbnRoIHRvIHNob3cgYXMgaW4gZm9jdXMgWzAtMTFdCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldEZvY3VzTW9udGgoaW50IG1vbnRoKSB7CisgICAgICAgICAgICAgICAgaWYgKG1Gb2N1c2VkTW9udGggPT0gbW9udGgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtRm9jdXNlZE1vbnRoID0gbW9udGg7CisgICAgICAgICAgICAgICAgbm90aWZ5RGF0YVNldENoYW5nZWQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvblRvdWNoKFZpZXcgdiwgTW90aW9uRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAobUxpc3RWaWV3LmlzRW5hYmxlZCgpICYmIG1HZXN0dXJlRGV0ZWN0b3Iub25Ub3VjaEV2ZW50KGV2ZW50KSkgeworICAgICAgICAgICAgICAgICAgICBXZWVrVmlldyB3ZWVrVmlldyA9IChXZWVrVmlldykgdjsKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgY2Fubm90IGZpbmQgYSBkYXkgZm9yIHRoZSBnaXZlbiBsb2NhdGlvbiB3ZSBhcmUgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiAoIXdlZWtWaWV3LmdldERheUZyb21Mb2NhdGlvbihldmVudC5nZXRYKCksIG1UZW1wRGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHRvdWNoZWQgZGF5IGlzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRyYXcgd2hvbGUgd2Vla3MgYnV0IHJhbmdlIGVuZCBjYW4gZmFsbCBub3Qgb24gdGhlIHdlZWsgZW5kCisgICAgICAgICAgICAgICAgICAgIGlmIChtVGVtcERhdGUuYmVmb3JlKG1NaW5EYXRlKSB8fCBtVGVtcERhdGUuYWZ0ZXIobU1heERhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvbkRhdGVUYXBwZWQobVRlbXBEYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gU2VsZWN0aW9uIGlzICh4IC0gc3RhcnQpIC8gKHBpeGVscy9kYXkpIHdoaWNoIGlzICh4IC0gc3RhcnQpICogZGF5IC8gcGl4ZWxzCi0gICAgICAgICAgICBpbnQgZGF5UG9zaXRpb24gPSAoaW50KSAoKHggLSBzdGFydCkgKiBtRGF5c1BlcldlZWsgLyAoZW5kIC0gc3RhcnQpKTsKLQotICAgICAgICAgICAgaWYgKGlzTGF5b3V0UnRsKSB7Ci0gICAgICAgICAgICAgICAgZGF5UG9zaXRpb24gPSBtRGF5c1BlcldlZWsgLSAxIC0gZGF5UG9zaXRpb247CisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIE1haW50YWlucyB0aGUgc2FtZSBob3VyL21pbi9zZWMgYnV0IG1vdmVzIHRoZSBkYXkgdG8gdGhlIHRhcHBlZCBkYXkuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogQHBhcmFtIGRheSBUaGUgZGF5IHRoYXQgd2FzIHRhcHBlZAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwcml2YXRlIHZvaWQgb25EYXRlVGFwcGVkKENhbGVuZGFyIGRheSkgeworICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRGF5KGRheSk7CisgICAgICAgICAgICAgICAgc2V0TW9udGhEaXNwbGF5ZWQoZGF5KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgb3V0Q2FsZW5kYXIuc2V0VGltZUluTWlsbGlzKG1GaXJzdERheS5nZXRUaW1lSW5NaWxsaXMoKSk7Ci0gICAgICAgICAgICBvdXRDYWxlbmRhci5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCBkYXlQb3NpdGlvbik7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIG9uRHJhdyhDYW52YXMgY2FudmFzKSB7Ci0gICAgICAgICAgICBkcmF3QmFja2dyb3VuZChjYW52YXMpOwotICAgICAgICAgICAgZHJhd1dlZWtOdW1iZXJzQW5kRGF0ZXMoY2FudmFzKTsKLSAgICAgICAgICAgIGRyYXdXZWVrU2VwYXJhdG9ycyhjYW52YXMpOwotICAgICAgICAgICAgZHJhd1NlbGVjdGVkRGF0ZVZlcnRpY2FsQmFycyhjYW52YXMpOworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBUaGlzIGlzIGhlcmUgc28gd2UgY2FuIGlkZW50aWZ5IHNpbmdsZSB0YXAgZXZlbnRzIGFuZCBzZXQgdGhlCisgICAgICAgICAgICAgKiBzZWxlY3RlZCBkYXkgY29ycmVjdGx5CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGNsYXNzIENhbGVuZGFyR2VzdHVyZUxpc3RlbmVyIGV4dGVuZHMgR2VzdHVyZURldGVjdG9yLlNpbXBsZU9uR2VzdHVyZUxpc3RlbmVyIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvblNpbmdsZVRhcFVwKE1vdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFRoaXMgZHJhd3MgdGhlIHNlbGVjdGlvbiBoaWdobGlnaHQgaWYgYSBkYXkgaXMgc2VsZWN0ZWQgaW4gdGhpcyB3ZWVrLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gY2FudmFzIFRoZSBjYW52YXMgdG8gZHJhdyBvbgorICAgICAgICAgKiA8cD4KKyAgICAgICAgICogVGhpcyBpcyBhIGR5bmFtaWMgdmlldyBmb3IgZHJhd2luZyBhIHNpbmdsZSB3ZWVrLiBJdCBjYW4gYmUgY29uZmlndXJlZCB0bworICAgICAgICAgKiBkaXNwbGF5IHRoZSB3ZWVrIG51bWJlciwgc3RhcnQgdGhlIHdlZWsgb24gYSBnaXZlbiBkYXksIG9yIHNob3cgYSByZWR1Y2VkCisgICAgICAgICAqIG51bWJlciBvZiBkYXlzLiBJdCBpcyBpbnRlbmRlZCBmb3IgdXNlIGFzIGEgc2luZ2xlIHZpZXcgd2l0aGluIGEKKyAgICAgICAgICogTGlzdFZpZXcuIFNlZSB7QGxpbmsgV2Vla3NBZGFwdGVyfSBmb3IgdXNhZ2UuCisgICAgICAgICAqIDwvcD4KICAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgdm9pZCBkcmF3QmFja2dyb3VuZChDYW52YXMgY2FudmFzKSB7Ci0gICAgICAgICAgICBpZiAoIW1IYXNTZWxlY3RlZERheSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJpdmF0ZSBjbGFzcyBXZWVrVmlldyBleHRlbmRzIFZpZXcgeworCisgICAgICAgICAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRlbXBSZWN0ID0gbmV3IFJlY3QoKTsKKworICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtRHJhd1BhaW50ID0gbmV3IFBhaW50KCk7CisKKyAgICAgICAgICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbU1vbnRoTnVtRHJhd1BhaW50ID0gbmV3IFBhaW50KCk7CisKKyAgICAgICAgICAgIC8vIENhY2hlIHRoZSBudW1iZXIgc3RyaW5ncyBzbyB3ZSBkb24ndCBoYXZlIHRvIHJlY29tcHV0ZSB0aGVtIGVhY2ggdGltZQorICAgICAgICAgICAgcHJpdmF0ZSBTdHJpbmdbXSBtRGF5TnVtYmVyczsKKworICAgICAgICAgICAgLy8gUXVpY2sgbG9va3VwIGZvciBjaGVja2luZyB3aGljaCBkYXlzIGFyZSBpbiB0aGUgZm9jdXMgbW9udGgKKyAgICAgICAgICAgIHByaXZhdGUgYm9vbGVhbltdIG1Gb2N1c0RheTsKKworICAgICAgICAgICAgLy8gV2hldGhlciB0aGlzIHZpZXcgaGFzIGEgZm9jdXNlZCBkYXkuCisgICAgICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUhhc0ZvY3VzZWREYXk7CisKKyAgICAgICAgICAgIC8vIFdoZXRoZXIgdGhpcyB2aWV3IGhhcyBvbmx5IGZvY3VzZWQgZGF5cy4KKyAgICAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtSGFzVW5mb2N1c2VkRGF5OworCisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgZGF5IGRpc3BsYXllZCBieSB0aGlzIGl0ZW0KKyAgICAgICAgICAgIHByaXZhdGUgQ2FsZW5kYXIgbUZpcnN0RGF5OworCisgICAgICAgICAgICAvLyBUaGUgbW9udGggb2YgdGhlIGZpcnN0IGRheSBpbiB0aGlzIHdlZWsKKyAgICAgICAgICAgIHByaXZhdGUgaW50IG1Nb250aE9mRmlyc3RXZWVrRGF5ID0gLTE7CisKKyAgICAgICAgICAgIC8vIFRoZSBtb250aCBvZiB0aGUgbGFzdCBkYXkgaW4gdGhpcyB3ZWVrCisgICAgICAgICAgICBwcml2YXRlIGludCBtTGFzdFdlZWtEYXlNb250aCA9IC0xOworCisgICAgICAgICAgICAvLyBUaGUgcG9zaXRpb24gb2YgdGhpcyB3ZWVrLCBlcXVpdmFsZW50IHRvIHdlZWtzIHNpbmNlIHRoZSB3ZWVrIG9mIEphbgorICAgICAgICAgICAgLy8gMXN0LCAxOTAwCisgICAgICAgICAgICBwcml2YXRlIGludCBtV2VlayA9IC0xOworCisgICAgICAgICAgICAvLyBRdWljayByZWZlcmVuY2UgdG8gdGhlIHdpZHRoIG9mIHRoaXMgdmlldywgbWF0Y2hlcyBwYXJlbnQKKyAgICAgICAgICAgIHByaXZhdGUgaW50IG1XaWR0aDsKKworICAgICAgICAgICAgLy8gVGhlIGhlaWdodCB0aGlzIHZpZXcgc2hvdWxkIGRyYXcgYXQgaW4gcGl4ZWxzLCBzZXQgYnkgaGVpZ2h0IHBhcmFtCisgICAgICAgICAgICBwcml2YXRlIGludCBtSGVpZ2h0OworCisgICAgICAgICAgICAvLyBJZiB0aGlzIHZpZXcgY29udGFpbnMgdGhlIHNlbGVjdGVkIGRheQorICAgICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXNTZWxlY3RlZERheSA9IGZhbHNlOworCisgICAgICAgICAgICAvLyBXaGljaCBkYXkgaXMgc2VsZWN0ZWQgWzAtNl0gb3IgLTEgaWYgbm8gZGF5IGlzIHNlbGVjdGVkCisgICAgICAgICAgICBwcml2YXRlIGludCBtU2VsZWN0ZWREYXkgPSAtMTsKKworICAgICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBkYXlzICsgYSBzcG90IGZvciB3ZWVrIG51bWJlciBpZiBpdCBpcyBkaXNwbGF5ZWQKKyAgICAgICAgICAgIHByaXZhdGUgaW50IG1OdW1DZWxsczsKKworICAgICAgICAgICAgLy8gVGhlIGxlZnQgZWRnZSBvZiB0aGUgc2VsZWN0ZWQgZGF5CisgICAgICAgICAgICBwcml2YXRlIGludCBtU2VsZWN0ZWRMZWZ0ID0gLTE7CisKKyAgICAgICAgICAgIC8vIFRoZSByaWdodCBlZGdlIG9mIHRoZSBzZWxlY3RlZCBkYXkKKyAgICAgICAgICAgIHByaXZhdGUgaW50IG1TZWxlY3RlZFJpZ2h0ID0gLTE7CisKKyAgICAgICAgICAgIHB1YmxpYyBXZWVrVmlldyhDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBzdXBlcihjb250ZXh0KTsKKworICAgICAgICAgICAgICAgIC8vIFNldHMgdXAgYW55IHN0YW5kYXJkIHBhaW50cyB0aGF0IHdpbGwgYmUgdXNlZAorICAgICAgICAgICAgICAgIGluaXRpbGFpemVQYWludHMoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0Q29sb3IobVNlbGVjdGVkV2Vla0JhY2tncm91bmRDb2xvcik7CiAKLSAgICAgICAgICAgIG1UZW1wUmVjdC50b3AgPSBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aDsKLSAgICAgICAgICAgIG1UZW1wUmVjdC5ib3R0b20gPSBtSGVpZ2h0OworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBJbml0aWFsaXplcyB0aGlzIHdlZWsgdmlldy4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBAcGFyYW0gd2Vla051bWJlciBUaGUgbnVtYmVyIG9mIHRoZSB3ZWVrIHRoaXMgdmlldyByZXByZXNlbnRzLiBUaGUKKyAgICAgICAgICAgICAqICAgICAgICAgICAgd2VlayBudW1iZXIgaXMgYSB6ZXJvIGJhc2VkIGluZGV4IG9mIHRoZSB3ZWVrcyBzaW5jZQorICAgICAgICAgICAgICogICAgICAgICAgICB7QGxpbmsgQ2FsZW5kYXJWaWV3I2dldE1pbkRhdGUoKX0uCisgICAgICAgICAgICAgKiBAcGFyYW0gc2VsZWN0ZWRXZWVrRGF5IFRoZSBzZWxlY3RlZCBkYXkgb2YgdGhlIHdlZWsgZnJvbSAwIHRvIDYsIC0xIGlmIG5vCisgICAgICAgICAgICAgKiAgICAgICAgICAgIHNlbGVjdGVkIGRheS4KKyAgICAgICAgICAgICAqIEBwYXJhbSBmb2N1c2VkTW9udGggVGhlIG1vbnRoIHRoYXQgaXMgY3VycmVudGx5IGluIGZvY3VzIGkuZS4KKyAgICAgICAgICAgICAqICAgICAgICAgICAgaGlnaGxpZ2h0ZWQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGluaXQoaW50IHdlZWtOdW1iZXIsIGludCBzZWxlY3RlZFdlZWtEYXksIGludCBmb2N1c2VkTW9udGgpIHsKKyAgICAgICAgICAgICAgICBtU2VsZWN0ZWREYXkgPSBzZWxlY3RlZFdlZWtEYXk7CisgICAgICAgICAgICAgICAgbUhhc1NlbGVjdGVkRGF5ID0gbVNlbGVjdGVkRGF5ICE9IC0xOworICAgICAgICAgICAgICAgIG1OdW1DZWxscyA9IG1TaG93V2Vla051bWJlciA/IG1EYXlzUGVyV2VlayArIDEgOiBtRGF5c1BlcldlZWs7CisgICAgICAgICAgICAgICAgbVdlZWsgPSB3ZWVrTnVtYmVyOworICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXRUaW1lSW5NaWxsaXMobU1pbkRhdGUuZ2V0VGltZUluTWlsbGlzKCkpOwogCi0gICAgICAgICAgICBmaW5hbCBib29sZWFuIGlzTGF5b3V0UnRsID0gaXNMYXlvdXRSdGwoKTsKKyAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLldFRUtfT0ZfWUVBUiwgbVdlZWspOworICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXRGaXJzdERheU9mV2VlayhtRmlyc3REYXlPZldlZWspOwogCi0gICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwpIHsKLSAgICAgICAgICAgICAgICBtVGVtcFJlY3QubGVmdCA9IDA7Ci0gICAgICAgICAgICAgICAgbVRlbXBSZWN0LnJpZ2h0ID0gbVNlbGVjdGVkTGVmdCAtIDI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1UZW1wUmVjdC5sZWZ0ID0gbVNob3dXZWVrTnVtYmVyID8gbVdpZHRoIC8gbU51bUNlbGxzIDogMDsKLSAgICAgICAgICAgICAgICBtVGVtcFJlY3QucmlnaHQgPSBtU2VsZWN0ZWRMZWZ0IC0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhbnZhcy5kcmF3UmVjdChtVGVtcFJlY3QsIG1EcmF3UGFpbnQpOworICAgICAgICAgICAgICAgIC8vIEFsbG9jYXRlIHNwYWNlIGZvciBjYWNoaW5nIHRoZSBkYXkgbnVtYmVycyBhbmQgZm9jdXMgdmFsdWVzCisgICAgICAgICAgICAgICAgbURheU51bWJlcnMgPSBuZXcgU3RyaW5nW21OdW1DZWxsc107CisgICAgICAgICAgICAgICAgbUZvY3VzRGF5ID0gbmV3IGJvb2xlYW5bbU51bUNlbGxzXTsKIAotICAgICAgICAgICAgaWYgKGlzTGF5b3V0UnRsKSB7Ci0gICAgICAgICAgICAgICAgbVRlbXBSZWN0LmxlZnQgPSBtU2VsZWN0ZWRSaWdodCArIDM7Ci0gICAgICAgICAgICAgICAgbVRlbXBSZWN0LnJpZ2h0ID0gbVNob3dXZWVrTnVtYmVyID8gbVdpZHRoIC0gbVdpZHRoIC8gbU51bUNlbGxzIDogbVdpZHRoOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtVGVtcFJlY3QubGVmdCA9IG1TZWxlY3RlZFJpZ2h0ICsgMzsKLSAgICAgICAgICAgICAgICBtVGVtcFJlY3QucmlnaHQgPSBtV2lkdGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYW52YXMuZHJhd1JlY3QobVRlbXBSZWN0LCBtRHJhd1BhaW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBEcmF3cyB0aGUgd2VlayBhbmQgbW9udGggZGF5IG51bWJlcnMgZm9yIHRoaXMgd2Vlay4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGNhbnZhcyBUaGUgY2FudmFzIHRvIGRyYXcgb24KLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgdm9pZCBkcmF3V2Vla051bWJlcnNBbmREYXRlcyhDYW52YXMgY2FudmFzKSB7Ci0gICAgICAgICAgICBmaW5hbCBmbG9hdCB0ZXh0SGVpZ2h0ID0gbURyYXdQYWludC5nZXRUZXh0U2l6ZSgpOwotICAgICAgICAgICAgZmluYWwgaW50IHkgPSAoaW50KSAoKG1IZWlnaHQgKyB0ZXh0SGVpZ2h0KSAvIDIpIC0gbVdlZWtTZXBlcmF0b3JMaW5lV2lkdGg7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbkRheXMgPSBtTnVtQ2VsbHM7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgZGl2aXNvciA9IDIgKiBuRGF5czsKLQotICAgICAgICAgICAgbURyYXdQYWludC5zZXRUZXh0QWxpZ24oQWxpZ24uQ0VOVEVSKTsKLSAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0VGV4dFNpemUobURhdGVUZXh0U2l6ZSk7Ci0KLSAgICAgICAgICAgIGludCBpID0gMDsKLQotICAgICAgICAgICAgaWYgKGlzTGF5b3V0UnRsKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IG5EYXlzIC0gMTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRDb2xvcihtRm9jdXNEYXlbaV0gPyBtRm9jdXNlZE1vbnRoRGF0ZUNvbG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtVW5mb2N1c2VkTW9udGhEYXRlQ29sb3IpOwotICAgICAgICAgICAgICAgICAgICBpbnQgeCA9ICgyICogaSArIDEpICogbVdpZHRoIC8gZGl2aXNvcjsKLSAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KG1EYXlOdW1iZXJzW25EYXlzIC0gMSAtIGldLCB4LCB5LCBtTW9udGhOdW1EcmF3UGFpbnQpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBzaG93aW5nIHRoZSB3ZWVrIG51bWJlciBjYWxjdWxhdGUgaXQgYmFzZWQgb24gTW9uZGF5CisgICAgICAgICAgICAgICAgaW50IGkgPSAwOwogICAgICAgICAgICAgICAgIGlmIChtU2hvd1dlZWtOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgbURyYXdQYWludC5zZXRDb2xvcihtV2Vla051bWJlckNvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IHggPSBtV2lkdGggLSBtV2lkdGggLyBkaXZpc29yOwotICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQobURheU51bWJlcnNbMF0sIHgsIHksIG1EcmF3UGFpbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1TaG93V2Vla051bWJlcikgewotICAgICAgICAgICAgICAgICAgICBtRHJhd1BhaW50LnNldENvbG9yKG1XZWVrTnVtYmVyQ29sb3IpOwotICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IG1XaWR0aCAvIGRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3VGV4dChtRGF5TnVtYmVyc1swXSwgeCwgeSwgbURyYXdQYWludCk7CisgICAgICAgICAgICAgICAgICAgIG1EYXlOdW1iZXJzWzBdID0gU3RyaW5nLmZvcm1hdChMb2NhbGUuZ2V0RGVmYXVsdCgpLCAiJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuV0VFS19PRl9ZRUFSKSk7CiAgICAgICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yICg7IGkgPCBuRGF5czsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRDb2xvcihtRm9jdXNEYXlbaV0gPyBtRm9jdXNlZE1vbnRoRGF0ZUNvbG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtVW5mb2N1c2VkTW9udGhEYXRlQ29sb3IpOwotICAgICAgICAgICAgICAgICAgICBpbnQgeCA9ICgyICogaSArIDEpICogbVdpZHRoIC8gZGl2aXNvcjsKLSAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KG1EYXlOdW1iZXJzW2ldLCB4LCB5LCBtTW9udGhOdW1EcmF3UGFpbnQpOworCisgICAgICAgICAgICAgICAgLy8gTm93IGFkanVzdCBvdXIgc3RhcnRpbmcgZGF5IGJhc2VkIG9uIHRoZSBzdGFydCBkYXkgb2YgdGhlIHdlZWsKKyAgICAgICAgICAgICAgICBpbnQgZGlmZiA9IG1GaXJzdERheU9mV2VlayAtIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspOworICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCBkaWZmKTsKKworICAgICAgICAgICAgICAgIG1GaXJzdERheSA9IChDYWxlbmRhcikgbVRlbXBEYXRlLmNsb25lKCk7CisgICAgICAgICAgICAgICAgbU1vbnRoT2ZGaXJzdFdlZWtEYXkgPSBtVGVtcERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKTsKKworICAgICAgICAgICAgICAgIG1IYXNVbmZvY3VzZWREYXkgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgbU51bUNlbGxzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0ZvY3VzZWREYXkgPSAobVRlbXBEYXRlLmdldChDYWxlbmRhci5NT05USCkgPT0gZm9jdXNlZE1vbnRoKTsKKyAgICAgICAgICAgICAgICAgICAgbUZvY3VzRGF5W2ldID0gaXNGb2N1c2VkRGF5OworICAgICAgICAgICAgICAgICAgICBtSGFzRm9jdXNlZERheSB8PSBpc0ZvY3VzZWREYXk7CisgICAgICAgICAgICAgICAgICAgIG1IYXNVbmZvY3VzZWREYXkgJj0gIWlzRm9jdXNlZERheTsKKyAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90IGRyYXcgZGF0ZXMgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UgdG8gYXZvaWQgdXNlciBjb25mdXNpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1UZW1wRGF0ZS5iZWZvcmUobU1pbkRhdGUpIHx8IG1UZW1wRGF0ZS5hZnRlcihtTWF4RGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1EYXlOdW1iZXJzW2ldID0gIiI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtRGF5TnVtYmVyc1tpXSA9IFN0cmluZy5mb3JtYXQoTG9jYWxlLmdldERlZmF1bHQoKSwgIiVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLkRBWV9PRl9NT05USCwgMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gV2UgZG8gb25lIGV4dHJhIGFkZCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wLCBpZiB0aGF0IHB1c2hlZCB1cyB0bworICAgICAgICAgICAgICAgIC8vIG5ldyBtb250aCB1bmRvIGl0CisgICAgICAgICAgICAgICAgaWYgKG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1MYXN0V2Vla0RheU1vbnRoID0gbVRlbXBEYXRlLmdldChDYWxlbmRhci5NT05USCk7CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIERyYXdzIGEgaG9yaXpvbnRhbCBsaW5lIGZvciBzZXBhcmF0aW5nIHRoZSB3ZWVrcy4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGNhbnZhcyBUaGUgY2FudmFzIHRvIGRyYXcgb24uCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIHZvaWQgZHJhd1dlZWtTZXBhcmF0b3JzKENhbnZhcyBjYW52YXMpIHsKLSAgICAgICAgICAgIC8vIElmIGl0IGlzIHRoZSB0b3Btb3N0IGZ1bGx5IHZpc2libGUgY2hpbGQgZG8gbm90IGRyYXcgc2VwYXJhdG9yIGxpbmUKLSAgICAgICAgICAgIGludCBmaXJzdEZ1bGx5VmlzaWJsZVBvc2l0aW9uID0gbUxpc3RWaWV3LmdldEZpcnN0VmlzaWJsZVBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAobUxpc3RWaWV3LmdldENoaWxkQXQoMCkuZ2V0VG9wKCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgZmlyc3RGdWxseVZpc2libGVQb3NpdGlvbisrOworICAgICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvblBvc2l0aW9ucygpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24gPT0gbVdlZWspIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtRHJhd1BhaW50LnNldENvbG9yKG1XZWVrU2VwYXJhdG9yTGluZUNvbG9yKTsKLSAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0U3Ryb2tlV2lkdGgobVdlZWtTZXBlcmF0b3JMaW5lV2lkdGgpOwotICAgICAgICAgICAgZmxvYXQgc3RhcnRYOwotICAgICAgICAgICAgZmxvYXQgc3RvcFg7Ci0gICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwoKSkgewotICAgICAgICAgICAgICAgIHN0YXJ0WCA9IDA7Ci0gICAgICAgICAgICAgICAgc3RvcFggPSBtU2hvd1dlZWtOdW1iZXIgPyBtV2lkdGggLSBtV2lkdGggLyBtTnVtQ2VsbHMgOiBtV2lkdGg7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0YXJ0WCA9IG1TaG93V2Vla051bWJlciA/IG1XaWR0aCAvIG1OdW1DZWxscyA6IDA7Ci0gICAgICAgICAgICAgICAgc3RvcFggPSBtV2lkdGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYW52YXMuZHJhd0xpbmUoc3RhcnRYLCAwLCBzdG9wWCwgMCwgbURyYXdQYWludCk7Ci0gICAgICAgIH0KIAotICAgICAgICAvKioKLSAgICAgICAgICogRHJhd3MgdGhlIHNlbGVjdGVkIGRhdGUgYmFycyBpZiB0aGlzIHdlZWsgaGFzIGEgc2VsZWN0ZWQgZGF5LgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gY2FudmFzIFRoZSBjYW52YXMgdG8gZHJhdyBvbgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGRyYXdTZWxlY3RlZERhdGVWZXJ0aWNhbEJhcnMoQ2FudmFzIGNhbnZhcykgewotICAgICAgICAgICAgaWYgKCFtSGFzU2VsZWN0ZWREYXkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIEluaXRpYWxpemUgdGhlIHBhaW50IGluc3RhbmNlcy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGluaXRpbGFpemVQYWludHMoKSB7CisgICAgICAgICAgICAgICAgbURyYXdQYWludC5zZXRGYWtlQm9sZFRleHQoZmFsc2UpOworICAgICAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0U3R5bGUoU3R5bGUuRklMTCk7CisKKyAgICAgICAgICAgICAgICBtTW9udGhOdW1EcmF3UGFpbnQuc2V0RmFrZUJvbGRUZXh0KHRydWUpOworICAgICAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgICAgICAgICAgbU1vbnRoTnVtRHJhd1BhaW50LnNldFN0eWxlKFN0eWxlLkZJTEwpOworICAgICAgICAgICAgICAgIG1Nb250aE51bURyYXdQYWludC5zZXRUZXh0QWxpZ24oQWxpZ24uQ0VOVEVSKTsKKyAgICAgICAgICAgICAgICBtTW9udGhOdW1EcmF3UGFpbnQuc2V0VGV4dFNpemUobURhdGVUZXh0U2l6ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXIuc2V0Qm91bmRzKG1TZWxlY3RlZExlZnQgLSBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXJXaWR0aCAvIDIsCi0gICAgICAgICAgICAgICAgICAgIG1XZWVrU2VwZXJhdG9yTGluZVdpZHRoLAotICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRMZWZ0ICsgbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyV2lkdGggLyAyLCBtSGVpZ2h0KTsKLSAgICAgICAgICAgIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhci5kcmF3KGNhbnZhcyk7Ci0gICAgICAgICAgICBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXIuc2V0Qm91bmRzKG1TZWxlY3RlZFJpZ2h0IC0gbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyV2lkdGggLyAyLAotICAgICAgICAgICAgICAgICAgICBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGVkUmlnaHQgKyBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXJXaWR0aCAvIDIsIG1IZWlnaHQpOwotICAgICAgICAgICAgbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyLmRyYXcoY2FudmFzKTsKLSAgICAgICAgfQogCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblNpemVDaGFuZ2VkKGludCB3LCBpbnQgaCwgaW50IG9sZHcsIGludCBvbGRoKSB7Ci0gICAgICAgICAgICBtV2lkdGggPSB3OwotICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uUG9zaXRpb25zKCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogUmV0dXJucyB0aGUgbW9udGggb2YgdGhlIGZpcnN0IGRheSBpbiB0aGlzIHdlZWsuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogQHJldHVybiBUaGUgbW9udGggdGhlIGZpcnN0IGRheSBvZiB0aGlzIHZpZXcgaXMgaW4uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHB1YmxpYyBpbnQgZ2V0TW9udGhPZkZpcnN0V2Vla0RheSgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbU1vbnRoT2ZGaXJzdFdlZWtEYXk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFRoaXMgY2FsY3VsYXRlcyB0aGUgcG9zaXRpb25zIGZvciB0aGUgc2VsZWN0ZWQgZGF5IGxpbmVzLgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVNlbGVjdGlvblBvc2l0aW9ucygpIHsKLSAgICAgICAgICAgIGlmIChtSGFzU2VsZWN0ZWREYXkpIHsKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogUmV0dXJucyB0aGUgbW9udGggb2YgdGhlIGxhc3QgZGF5IGluIHRoaXMgd2VlaworICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEByZXR1cm4gVGhlIG1vbnRoIHRoZSBsYXN0IGRheSBvZiB0aGlzIHZpZXcgaXMgaW4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIGludCBnZXRNb250aE9mTGFzdFdlZWtEYXkoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1MYXN0V2Vla0RheU1vbnRoOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGRheSBpbiB0aGlzIHZpZXcuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogQHJldHVybiBUaGUgZmlyc3QgZGF5IGluIHRoZSB2aWV3LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwdWJsaWMgQ2FsZW5kYXIgZ2V0Rmlyc3REYXkoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1GaXJzdERheTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBDYWxjdWxhdGVzIHRoZSBkYXkgdGhhdCB0aGUgZ2l2ZW4geCBwb3NpdGlvbiBpcyBpbiwgYWNjb3VudGluZyBmb3IKKyAgICAgICAgICAgICAqIHdlZWsgbnVtYmVyLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEBwYXJhbSB4IFRoZSB4IHBvc2l0aW9uIG9mIHRoZSB0b3VjaCBldmVudC4KKyAgICAgICAgICAgICAqIEByZXR1cm4gVHJ1ZSBpZiBhIGRheSB3YXMgZm91bmQgZm9yIHRoZSBnaXZlbiBsb2NhdGlvbi4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZ2V0RGF5RnJvbUxvY2F0aW9uKGZsb2F0IHgsIENhbGVuZGFyIG91dENhbGVuZGFyKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0xheW91dFJ0bCA9IGlzTGF5b3V0UnRsKCk7Ci0gICAgICAgICAgICAgICAgaW50IHNlbGVjdGVkUG9zaXRpb24gPSBtU2VsZWN0ZWREYXkgLSBtRmlyc3REYXlPZldlZWs7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUG9zaXRpb24gPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUG9zaXRpb24gKz0gNzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1TaG93V2Vla051bWJlciAmJiAhaXNMYXlvdXRSdGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQb3NpdGlvbisrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGVkTGVmdCA9IChtRGF5c1BlcldlZWsgLSAxIC0gc2VsZWN0ZWRQb3NpdGlvbikgKiBtV2lkdGggLyBtTnVtQ2VsbHM7CiAKKyAgICAgICAgICAgICAgICBpbnQgc3RhcnQ7CisgICAgICAgICAgICAgICAgaW50IGVuZDsKKworICAgICAgICAgICAgICAgIGlmIChpc0xheW91dFJ0bCkgeworICAgICAgICAgICAgICAgICAgICBzdGFydCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZCA9IG1TaG93V2Vla051bWJlciA/IG1XaWR0aCAtIG1XaWR0aCAvIG1OdW1DZWxscyA6IG1XaWR0aDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRMZWZ0ID0gc2VsZWN0ZWRQb3NpdGlvbiAqIG1XaWR0aCAvIG1OdW1DZWxsczsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBtU2hvd1dlZWtOdW1iZXIgPyBtV2lkdGggLyBtTnVtQ2VsbHMgOiAwOworICAgICAgICAgICAgICAgICAgICBlbmQgPSBtV2lkdGg7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1TZWxlY3RlZFJpZ2h0ID0gbVNlbGVjdGVkTGVmdCArIG1XaWR0aCAvIG1OdW1DZWxsczsKKworICAgICAgICAgICAgICAgIGlmICh4IDwgc3RhcnQgfHwgeCA+IGVuZCkgeworICAgICAgICAgICAgICAgICAgICBvdXRDYWxlbmRhci5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gU2VsZWN0aW9uIGlzICh4IC0gc3RhcnQpIC8gKHBpeGVscy9kYXkpIHdoaWNoIGlzICh4IC0gc3RhcnQpICogZGF5IC8gcGl4ZWxzCisgICAgICAgICAgICAgICAgaW50IGRheVBvc2l0aW9uID0gKGludCkgKCh4IC0gc3RhcnQpICogbURheXNQZXJXZWVrIC8gKGVuZCAtIHN0YXJ0KSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF5UG9zaXRpb24gPSBtRGF5c1BlcldlZWsgLSAxIC0gZGF5UG9zaXRpb247CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0Q2FsZW5kYXIuc2V0VGltZUluTWlsbGlzKG1GaXJzdERheS5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICAgICAgb3V0Q2FsZW5kYXIuYWRkKENhbGVuZGFyLkRBWV9PRl9NT05USCwgZGF5UG9zaXRpb24pOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgICAgICAgICBkcmF3QmFja2dyb3VuZChjYW52YXMpOworICAgICAgICAgICAgICAgIGRyYXdXZWVrTnVtYmVyc0FuZERhdGVzKGNhbnZhcyk7CisgICAgICAgICAgICAgICAgZHJhd1dlZWtTZXBhcmF0b3JzKGNhbnZhcyk7CisgICAgICAgICAgICAgICAgZHJhd1NlbGVjdGVkRGF0ZVZlcnRpY2FsQmFycyhjYW52YXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFRoaXMgZHJhd3MgdGhlIHNlbGVjdGlvbiBoaWdobGlnaHQgaWYgYSBkYXkgaXMgc2VsZWN0ZWQgaW4gdGhpcyB3ZWVrLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEBwYXJhbSBjYW52YXMgVGhlIGNhbnZhcyB0byBkcmF3IG9uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHByaXZhdGUgdm9pZCBkcmF3QmFja2dyb3VuZChDYW52YXMgY2FudmFzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtSGFzU2VsZWN0ZWREYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtRHJhd1BhaW50LnNldENvbG9yKG1TZWxlY3RlZFdlZWtCYWNrZ3JvdW5kQ29sb3IpOworCisgICAgICAgICAgICAgICAgbVRlbXBSZWN0LnRvcCA9IG1XZWVrU2VwZXJhdG9yTGluZVdpZHRoOworICAgICAgICAgICAgICAgIG1UZW1wUmVjdC5ib3R0b20gPSBtSGVpZ2h0OworCisgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0xheW91dFJ0bCA9IGlzTGF5b3V0UnRsKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbVRlbXBSZWN0LmxlZnQgPSAwOworICAgICAgICAgICAgICAgICAgICBtVGVtcFJlY3QucmlnaHQgPSBtU2VsZWN0ZWRMZWZ0IC0gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtVGVtcFJlY3QubGVmdCA9IG1TaG93V2Vla051bWJlciA/IG1XaWR0aCAvIG1OdW1DZWxscyA6IDA7CisgICAgICAgICAgICAgICAgICAgIG1UZW1wUmVjdC5yaWdodCA9IG1TZWxlY3RlZExlZnQgLSAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1JlY3QobVRlbXBSZWN0LCBtRHJhd1BhaW50KTsKKworICAgICAgICAgICAgICAgIGlmIChpc0xheW91dFJ0bCkgeworICAgICAgICAgICAgICAgICAgICBtVGVtcFJlY3QubGVmdCA9IG1TZWxlY3RlZFJpZ2h0ICsgMzsKKyAgICAgICAgICAgICAgICAgICAgbVRlbXBSZWN0LnJpZ2h0ID0gbVNob3dXZWVrTnVtYmVyID8gbVdpZHRoIC0gbVdpZHRoIC8gbU51bUNlbGxzIDogbVdpZHRoOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1UZW1wUmVjdC5sZWZ0ID0gbVNlbGVjdGVkUmlnaHQgKyAzOworICAgICAgICAgICAgICAgICAgICBtVGVtcFJlY3QucmlnaHQgPSBtV2lkdGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3UmVjdChtVGVtcFJlY3QsIG1EcmF3UGFpbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIERyYXdzIHRoZSB3ZWVrIGFuZCBtb250aCBkYXkgbnVtYmVycyBmb3IgdGhpcyB3ZWVrLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEBwYXJhbSBjYW52YXMgVGhlIGNhbnZhcyB0byBkcmF3IG9uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHByaXZhdGUgdm9pZCBkcmF3V2Vla051bWJlcnNBbmREYXRlcyhDYW52YXMgY2FudmFzKSB7CisgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgdGV4dEhlaWdodCA9IG1EcmF3UGFpbnQuZ2V0VGV4dFNpemUoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgeSA9IChpbnQpICgobUhlaWdodCArIHRleHRIZWlnaHQpIC8gMikgLSBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aDsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbkRheXMgPSBtTnVtQ2VsbHM7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGRpdmlzb3IgPSAyICogbkRheXM7CisKKyAgICAgICAgICAgICAgICBtRHJhd1BhaW50LnNldFRleHRBbGlnbihBbGlnbi5DRU5URVIpOworICAgICAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0VGV4dFNpemUobURhdGVUZXh0U2l6ZSk7CisKKyAgICAgICAgICAgICAgICBpbnQgaSA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IG5EYXlzIC0gMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtTW9udGhOdW1EcmF3UGFpbnQuc2V0Q29sb3IobUZvY3VzRGF5W2ldID8gbUZvY3VzZWRNb250aERhdGVDb2xvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1VbmZvY3VzZWRNb250aERhdGVDb2xvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCA9ICgyICogaSArIDEpICogbVdpZHRoIC8gZGl2aXNvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3VGV4dChtRGF5TnVtYmVyc1tuRGF5cyAtIDEgLSBpXSwgeCwgeSwgbU1vbnRoTnVtRHJhd1BhaW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobVNob3dXZWVrTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtRHJhd1BhaW50LnNldENvbG9yKG1XZWVrTnVtYmVyQ29sb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHggPSBtV2lkdGggLSBtV2lkdGggLyBkaXZpc29yOworICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KG1EYXlOdW1iZXJzWzBdLCB4LCB5LCBtRHJhd1BhaW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtU2hvd1dlZWtOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1EcmF3UGFpbnQuc2V0Q29sb3IobVdlZWtOdW1iZXJDb2xvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IG1XaWR0aCAvIGRpdmlzb3I7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQobURheU51bWJlcnNbMF0sIHgsIHksIG1EcmF3UGFpbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgbkRheXM7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgbU1vbnRoTnVtRHJhd1BhaW50LnNldENvbG9yKG1Gb2N1c0RheVtpXSA/IG1Gb2N1c2VkTW9udGhEYXRlQ29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtVW5mb2N1c2VkTW9udGhEYXRlQ29sb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHggPSAoMiAqIGkgKyAxKSAqIG1XaWR0aCAvIGRpdmlzb3I7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQobURheU51bWJlcnNbaV0sIHgsIHksIG1Nb250aE51bURyYXdQYWludCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogRHJhd3MgYSBob3Jpem9udGFsIGxpbmUgZm9yIHNlcGFyYXRpbmcgdGhlIHdlZWtzLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEBwYXJhbSBjYW52YXMgVGhlIGNhbnZhcyB0byBkcmF3IG9uLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwcml2YXRlIHZvaWQgZHJhd1dlZWtTZXBhcmF0b3JzKENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBpdCBpcyB0aGUgdG9wbW9zdCBmdWxseSB2aXNpYmxlIGNoaWxkIGRvIG5vdCBkcmF3IHNlcGFyYXRvciBsaW5lCisgICAgICAgICAgICAgICAgaW50IGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24gPSBtTGlzdFZpZXcuZ2V0Rmlyc3RWaXNpYmxlUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBpZiAobUxpc3RWaWV3LmdldENoaWxkQXQoMCkuZ2V0VG9wKCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0RnVsbHlWaXNpYmxlUG9zaXRpb24gPT0gbVdlZWspIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtRHJhd1BhaW50LnNldENvbG9yKG1XZWVrU2VwYXJhdG9yTGluZUNvbG9yKTsKKyAgICAgICAgICAgICAgICBtRHJhd1BhaW50LnNldFN0cm9rZVdpZHRoKG1XZWVrU2VwZXJhdG9yTGluZVdpZHRoKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBzdGFydFg7CisgICAgICAgICAgICAgICAgZmxvYXQgc3RvcFg7CisgICAgICAgICAgICAgICAgaWYgKGlzTGF5b3V0UnRsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRYID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc3RvcFggPSBtU2hvd1dlZWtOdW1iZXIgPyBtV2lkdGggLSBtV2lkdGggLyBtTnVtQ2VsbHMgOiBtV2lkdGg7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRYID0gbVNob3dXZWVrTnVtYmVyID8gbVdpZHRoIC8gbU51bUNlbGxzIDogMDsKKyAgICAgICAgICAgICAgICAgICAgc3RvcFggPSBtV2lkdGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3TGluZShzdGFydFgsIDAsIHN0b3BYLCAwLCBtRHJhd1BhaW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBEcmF3cyB0aGUgc2VsZWN0ZWQgZGF0ZSBiYXJzIGlmIHRoaXMgd2VlayBoYXMgYSBzZWxlY3RlZCBkYXkuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogQHBhcmFtIGNhbnZhcyBUaGUgY2FudmFzIHRvIGRyYXcgb24KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGRyYXdTZWxlY3RlZERhdGVWZXJ0aWNhbEJhcnMoQ2FudmFzIGNhbnZhcykgeworICAgICAgICAgICAgICAgIGlmICghbUhhc1NlbGVjdGVkRGF5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbVNlbGVjdGVkRGF0ZVZlcnRpY2FsQmFyLnNldEJvdW5kcygKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZExlZnQgLSBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXJXaWR0aCAvIDIsCisgICAgICAgICAgICAgICAgICAgICAgICBtV2Vla1NlcGVyYXRvckxpbmVXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZExlZnQgKyBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXJXaWR0aCAvIDIsCisgICAgICAgICAgICAgICAgICAgICAgICBtSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXIuZHJhdyhjYW52YXMpOworICAgICAgICAgICAgICAgIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhci5zZXRCb3VuZHMoCisgICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0ZWRSaWdodCAtIG1TZWxlY3RlZERhdGVWZXJ0aWNhbEJhcldpZHRoIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1XZWVrU2VwZXJhdG9yTGluZVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGVkUmlnaHQgKyBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXJXaWR0aCAvIDIsCisgICAgICAgICAgICAgICAgICAgICAgICBtSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBtU2VsZWN0ZWREYXRlVmVydGljYWxCYXIuZHJhdyhjYW52YXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uU2l6ZUNoYW5nZWQoaW50IHcsIGludCBoLCBpbnQgb2xkdywgaW50IG9sZGgpIHsKKyAgICAgICAgICAgICAgICBtV2lkdGggPSB3OworICAgICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvblBvc2l0aW9ucygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFRoaXMgY2FsY3VsYXRlcyB0aGUgcG9zaXRpb25zIGZvciB0aGUgc2VsZWN0ZWQgZGF5IGxpbmVzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlU2VsZWN0aW9uUG9zaXRpb25zKCkgeworICAgICAgICAgICAgICAgIGlmIChtSGFzU2VsZWN0ZWREYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0xheW91dFJ0bCA9IGlzTGF5b3V0UnRsKCk7CisgICAgICAgICAgICAgICAgICAgIGludCBzZWxlY3RlZFBvc2l0aW9uID0gbVNlbGVjdGVkRGF5IC0gbUZpcnN0RGF5T2ZXZWVrOworICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRQb3NpdGlvbiA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUG9zaXRpb24gKz0gNzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobVNob3dXZWVrTnVtYmVyICYmICFpc0xheW91dFJ0bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQb3NpdGlvbisrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0xheW91dFJ0bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGVkTGVmdCA9IChtRGF5c1BlcldlZWsgLSAxIC0gc2VsZWN0ZWRQb3NpdGlvbikgKiBtV2lkdGggLyBtTnVtQ2VsbHM7CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZExlZnQgPSBzZWxlY3RlZFBvc2l0aW9uICogbVdpZHRoIC8gbU51bUNlbGxzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1TZWxlY3RlZFJpZ2h0ID0gbVNlbGVjdGVkTGVmdCArIG1XaWR0aCAvIG1OdW1DZWxsczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKKyAgICAgICAgICAgICAgICBtSGVpZ2h0ID0gKG1MaXN0Vmlldy5nZXRIZWlnaHQoKSAtIG1MaXN0Vmlldy5nZXRQYWRkaW5nVG9wKCkgLSBtTGlzdFZpZXcKKyAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRQYWRkaW5nQm90dG9tKCkpIC8gbVNob3duV2Vla0NvdW50OworICAgICAgICAgICAgICAgIHNldE1lYXN1cmVkRGltZW5zaW9uKE1lYXN1cmVTcGVjLmdldFNpemUod2lkdGhNZWFzdXJlU3BlYyksIG1IZWlnaHQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIG9uTWVhc3VyZShpbnQgd2lkdGhNZWFzdXJlU3BlYywgaW50IGhlaWdodE1lYXN1cmVTcGVjKSB7Ci0gICAgICAgICAgICBtSGVpZ2h0ID0gKG1MaXN0Vmlldy5nZXRIZWlnaHQoKSAtIG1MaXN0Vmlldy5nZXRQYWRkaW5nVG9wKCkgLSBtTGlzdFZpZXcKLSAgICAgICAgICAgICAgICAgICAgLmdldFBhZGRpbmdCb3R0b20oKSkgLyBtU2hvd25XZWVrQ291bnQ7Ci0gICAgICAgICAgICBzZXRNZWFzdXJlZERpbWVuc2lvbihNZWFzdXJlU3BlYy5nZXRTaXplKHdpZHRoTWVhc3VyZVNwZWMpLCBtSGVpZ2h0KTsKLSAgICAgICAgfQogICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0NoZWNrQm94LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2hlY2tCb3guamF2YQppbmRleCBmMTgwNGY4Li43MTQzOGM5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2hlY2tCb3guamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2hlY2tCb3guamF2YQpAQCAtNjQsOCArNjQsMTIgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmNoZWNrYm94U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBDaGVja0JveChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIENoZWNrQm94KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIENoZWNrQm94KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0NoZWNrZWRUZXh0Vmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0NoZWNrZWRUZXh0Vmlldy5qYXZhCmluZGV4IDVjMTBhNzcuLjc4YjFiNzUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9DaGVja2VkVGV4dFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2hlY2tlZFRleHRWaWV3LmphdmEKQEAgLTU4LDExICs1OCwxNSBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBSLmF0dHIuY2hlY2tlZFRleHRWaWV3U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBDaGVja2VkVGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBDaGVja2VkVGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLkNoZWNrZWRUZXh0VmlldywgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBDaGVja2VkVGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBSLnN0eWxlYWJsZS5DaGVja2VkVGV4dFZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIERyYXdhYmxlIGQgPSBhLmdldERyYXdhYmxlKFIuc3R5bGVhYmxlLkNoZWNrZWRUZXh0Vmlld19jaGVja01hcmspOwogICAgICAgICBpZiAoZCAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ2hyb25vbWV0ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9DaHJvbm9tZXRlci5qYXZhCmluZGV4IGI3YTEyNmUuLmY5NDc4OWQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9DaHJvbm9tZXRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9DaHJvbm9tZXRlci5qYXZhCkBAIC0xOCwxNCArMTgsMTIgQEAKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LmZvcm1hdC5EYXRlVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuUmVtb3RlVmlld3MuUmVtb3RlVmlldzsKQEAgLTk2LDEyICs5NCwxNSBAQAogICAgICAqIEluaXRpYWxpemUgd2l0aCBzdGFuZGFyZCB2aWV3IGxheW91dCBpbmZvcm1hdGlvbiBhbmQgc3R5bGUuCiAgICAgICogU2V0cyB0aGUgYmFzZSB0byB0aGUgY3VycmVudCB0aW1lLgogICAgICAqLwotICAgIHB1YmxpYyBDaHJvbm9tZXRlcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIENocm9ub21ldGVyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICBhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5DaHJvbm9tZXRlciwgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBDaHJvbm9tZXRlcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkNocm9ub21ldGVyLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgc2V0Rm9ybWF0KGEuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkNocm9ub21ldGVyX2Zvcm1hdCkpOwogICAgICAgICBhLnJlY3ljbGUoKTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0NvbXBvdW5kQnV0dG9uLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ29tcG91bmRCdXR0b24uamF2YQppbmRleCAwODJmZjNkLi5iZGI1MDQ2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ29tcG91bmRCdXR0b24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQ29tcG91bmRCdXR0b24uamF2YQpAQCAtNjQsMTIgKzY0LDE1IEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KIAotICAgIHB1YmxpYyBDb21wb3VuZEJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIENvbXBvdW5kQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9Ci0gICAgICAgICAgICAgICAgY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAotICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkNvbXBvdW5kQnV0dG9uLCBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIENvbXBvdW5kQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQ29tcG91bmRCdXR0b24sIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIERyYXdhYmxlIGQgPSBhLmdldERyYXdhYmxlKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkNvbXBvdW5kQnV0dG9uX2J1dHRvbik7CiAgICAgICAgIGlmIChkICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9EYXRlUGlja2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRGF0ZVBpY2tlci5qYXZhCmluZGV4IGQwMzE2MWUuLjI2NWRiY2QgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9EYXRlUGlja2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0RhdGVQaWNrZXIuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudGV4dC5JbnB1dFR5cGU7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LmZvcm1hdC5EYXRlRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZVV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKQEAgLTc2LDUzICs3NSw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HX1RBRyA9IERhdGVQaWNrZXIuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEVfRk9STUFUID0gIk1NL2RkL3l5eXkiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfU1RBUlRfWUVBUiA9IDE5MDA7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9FTkRfWUVBUiA9IDIxMDA7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfQ0FMRU5EQVJfVklFV19TSE9XTiA9IHRydWU7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfU1BJTk5FUlNfU0hPV04gPSB0cnVlOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX0VOQUJMRURfU1RBVEUgPSB0cnVlOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBMaW5lYXJMYXlvdXQgbVNwaW5uZXJzOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBOdW1iZXJQaWNrZXIgbURheVNwaW5uZXI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIE51bWJlclBpY2tlciBtTW9udGhTcGlubmVyOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBOdW1iZXJQaWNrZXIgbVllYXJTcGlubmVyOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBFZGl0VGV4dCBtRGF5U3Bpbm5lcklucHV0OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBFZGl0VGV4dCBtTW9udGhTcGlubmVySW5wdXQ7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEVkaXRUZXh0IG1ZZWFyU3Bpbm5lcklucHV0OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBDYWxlbmRhclZpZXcgbUNhbGVuZGFyVmlldzsKLQotICAgIHByaXZhdGUgTG9jYWxlIG1DdXJyZW50TG9jYWxlOwotCi0gICAgcHJpdmF0ZSBPbkRhdGVDaGFuZ2VkTGlzdGVuZXIgbU9uRGF0ZUNoYW5nZWRMaXN0ZW5lcjsKLQotICAgIHByaXZhdGUgU3RyaW5nW10gbVNob3J0TW9udGhzOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBqYXZhLnRleHQuRGF0ZUZvcm1hdCBtRGF0ZUZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KERBVEVfRk9STUFUKTsKLQotICAgIHByaXZhdGUgaW50IG1OdW1iZXJPZk1vbnRoczsKLQotICAgIHByaXZhdGUgQ2FsZW5kYXIgbVRlbXBEYXRlOwotCi0gICAgcHJpdmF0ZSBDYWxlbmRhciBtTWluRGF0ZTsKLQotICAgIHByaXZhdGUgQ2FsZW5kYXIgbU1heERhdGU7Ci0KLSAgICBwcml2YXRlIENhbGVuZGFyIG1DdXJyZW50RGF0ZTsKLQotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNFbmFibGVkID0gREVGQVVMVF9FTkFCTEVEX1NUQVRFOworICAgIHByaXZhdGUgRGF0ZVBpY2tlckRlbGVnYXRlIG1EZWxlZ2F0ZTsKIAogICAgIC8qKgogICAgICAqIFRoZSBjYWxsYmFjayB1c2VkIHRvIGluZGljYXRlIHRoZSB1c2VyIGNoYW5nZXNcZCB0aGUgZGF0ZS4KQEAgLTE0OSw0NDMgKzEwMiwxNCBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBSLmF0dHIuZGF0ZVBpY2tlclN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGF0ZVBpY2tlcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7Ci0KLSAgICAgICAgLy8gaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gbG9jYWxlCi0gICAgICAgIHNldEN1cnJlbnRMb2NhbGUoTG9jYWxlLmdldERlZmF1bHQoKSk7Ci0KLSAgICAgICAgVHlwZWRBcnJheSBhdHRyaWJ1dGVzQXJyYXkgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLkRhdGVQaWNrZXIsCi0gICAgICAgICAgICAgICAgZGVmU3R5bGUsIDApOwotICAgICAgICBib29sZWFuIHNwaW5uZXJzU2hvd24gPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5EYXRlUGlja2VyX3NwaW5uZXJzU2hvd24sCi0gICAgICAgICAgICAgICAgREVGQVVMVF9TUElOTkVSU19TSE9XTik7Ci0gICAgICAgIGJvb2xlYW4gY2FsZW5kYXJWaWV3U2hvd24gPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Qm9vbGVhbigKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5EYXRlUGlja2VyX2NhbGVuZGFyVmlld1Nob3duLCBERUZBVUxUX0NBTEVOREFSX1ZJRVdfU0hPV04pOwotICAgICAgICBpbnQgc3RhcnRZZWFyID0gYXR0cmlidXRlc0FycmF5LmdldEludChSLnN0eWxlYWJsZS5EYXRlUGlja2VyX3N0YXJ0WWVhciwKLSAgICAgICAgICAgICAgICBERUZBVUxUX1NUQVJUX1lFQVIpOwotICAgICAgICBpbnQgZW5kWWVhciA9IGF0dHJpYnV0ZXNBcnJheS5nZXRJbnQoUi5zdHlsZWFibGUuRGF0ZVBpY2tlcl9lbmRZZWFyLCBERUZBVUxUX0VORF9ZRUFSKTsKLSAgICAgICAgU3RyaW5nIG1pbkRhdGUgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLkRhdGVQaWNrZXJfbWluRGF0ZSk7Ci0gICAgICAgIFN0cmluZyBtYXhEYXRlID0gYXR0cmlidXRlc0FycmF5LmdldFN0cmluZyhSLnN0eWxlYWJsZS5EYXRlUGlja2VyX21heERhdGUpOwotICAgICAgICBpbnQgbGF5b3V0UmVzb3VyY2VJZCA9IGF0dHJpYnV0ZXNBcnJheS5nZXRSZXNvdXJjZUlkKFIuc3R5bGVhYmxlLkRhdGVQaWNrZXJfaW50ZXJuYWxMYXlvdXQsCi0gICAgICAgICAgICAgICAgUi5sYXlvdXQuZGF0ZV9waWNrZXIpOwotICAgICAgICBhdHRyaWJ1dGVzQXJyYXkucmVjeWNsZSgpOwotCi0gICAgICAgIExheW91dEluZmxhdGVyIGluZmxhdGVyID0gKExheW91dEluZmxhdGVyKSBjb250ZXh0Ci0gICAgICAgICAgICAgICAgLmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5MQVlPVVRfSU5GTEFURVJfU0VSVklDRSk7Ci0gICAgICAgIGluZmxhdGVyLmluZmxhdGUobGF5b3V0UmVzb3VyY2VJZCwgdGhpcywgdHJ1ZSk7Ci0KLSAgICAgICAgT25WYWx1ZUNoYW5nZUxpc3RlbmVyIG9uQ2hhbmdlTGlzdGVuZXIgPSBuZXcgT25WYWx1ZUNoYW5nZUxpc3RlbmVyKCkgewotICAgICAgICAgICAgcHVibGljIHZvaWQgb25WYWx1ZUNoYW5nZShOdW1iZXJQaWNrZXIgcGlja2VyLCBpbnQgb2xkVmFsLCBpbnQgbmV3VmFsKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlSW5wdXRTdGF0ZSgpOwotICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXRUaW1lSW5NaWxsaXMobUN1cnJlbnREYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKLSAgICAgICAgICAgICAgICAvLyB0YWtlIGNhcmUgb2Ygd3JhcHBpbmcgb2YgZGF5cyBhbmQgbW9udGhzIHRvIHVwZGF0ZSBncmVhdGVyIGZpZWxkcwotICAgICAgICAgICAgICAgIGlmIChwaWNrZXIgPT0gbURheVNwaW5uZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IG1heERheU9mTW9udGggPSBtVGVtcERhdGUuZ2V0QWN0dWFsTWF4aW11bShDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOwotICAgICAgICAgICAgICAgICAgICBpZiAob2xkVmFsID09IG1heERheU9mTW9udGggJiYgbmV3VmFsID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAxKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvbGRWYWwgPT0gMSAmJiBuZXdWYWwgPT0gbWF4RGF5T2ZNb250aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLmFkZChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIC0xKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCBuZXdWYWwgLSBvbGRWYWwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwaWNrZXIgPT0gbU1vbnRoU3Bpbm5lcikgewotICAgICAgICAgICAgICAgICAgICBpZiAob2xkVmFsID09IDExICYmIG5ld1ZhbCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLk1PTlRILCAxKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvbGRWYWwgPT0gMCAmJiBuZXdWYWwgPT0gMTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuTU9OVEgsIC0xKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuTU9OVEgsIG5ld1ZhbCAtIG9sZFZhbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBpY2tlciA9PSBtWWVhclNwaW5uZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLnNldChDYWxlbmRhci5ZRUFSLCBuZXdWYWwpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gbm93IHNldCB0aGUgZGF0ZSB0byB0aGUgYWRqdXN0ZWQgb25lCi0gICAgICAgICAgICAgICAgc2V0RGF0ZShtVGVtcERhdGUuZ2V0KENhbGVuZGFyLllFQVIpLCBtVGVtcERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlU3Bpbm5lcnMoKTsKLSAgICAgICAgICAgICAgICB1cGRhdGVDYWxlbmRhclZpZXcoKTsKLSAgICAgICAgICAgICAgICBub3RpZnlEYXRlQ2hhbmdlZCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIG1TcGlubmVycyA9IChMaW5lYXJMYXlvdXQpIGZpbmRWaWV3QnlJZChSLmlkLnBpY2tlcnMpOwotCi0gICAgICAgIC8vIGNhbGVuZGFyIHZpZXcgZGF5LXBpY2tlcgotICAgICAgICBtQ2FsZW5kYXJWaWV3ID0gKENhbGVuZGFyVmlldykgZmluZFZpZXdCeUlkKFIuaWQuY2FsZW5kYXJfdmlldyk7Ci0gICAgICAgIG1DYWxlbmRhclZpZXcuc2V0T25EYXRlQ2hhbmdlTGlzdGVuZXIobmV3IENhbGVuZGFyVmlldy5PbkRhdGVDaGFuZ2VMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VsZWN0ZWREYXlDaGFuZ2UoQ2FsZW5kYXJWaWV3IHZpZXcsIGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBtb250aERheSkgewotICAgICAgICAgICAgICAgIHNldERhdGUoeWVhciwgbW9udGgsIG1vbnRoRGF5KTsKLSAgICAgICAgICAgICAgICB1cGRhdGVTcGlubmVycygpOwotICAgICAgICAgICAgICAgIG5vdGlmeURhdGVDaGFuZ2VkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIGRheQotICAgICAgICBtRGF5U3Bpbm5lciA9IChOdW1iZXJQaWNrZXIpIGZpbmRWaWV3QnlJZChSLmlkLmRheSk7Ci0gICAgICAgIG1EYXlTcGlubmVyLnNldEZvcm1hdHRlcihOdW1iZXJQaWNrZXIuZ2V0VHdvRGlnaXRGb3JtYXR0ZXIoKSk7Ci0gICAgICAgIG1EYXlTcGlubmVyLnNldE9uTG9uZ1ByZXNzVXBkYXRlSW50ZXJ2YWwoMTAwKTsKLSAgICAgICAgbURheVNwaW5uZXIuc2V0T25WYWx1ZUNoYW5nZWRMaXN0ZW5lcihvbkNoYW5nZUxpc3RlbmVyKTsKLSAgICAgICAgbURheVNwaW5uZXJJbnB1dCA9IChFZGl0VGV4dCkgbURheVNwaW5uZXIuZmluZFZpZXdCeUlkKFIuaWQubnVtYmVycGlja2VyX2lucHV0KTsKLQotICAgICAgICAvLyBtb250aAotICAgICAgICBtTW9udGhTcGlubmVyID0gKE51bWJlclBpY2tlcikgZmluZFZpZXdCeUlkKFIuaWQubW9udGgpOwotICAgICAgICBtTW9udGhTcGlubmVyLnNldE1pblZhbHVlKDApOwotICAgICAgICBtTW9udGhTcGlubmVyLnNldE1heFZhbHVlKG1OdW1iZXJPZk1vbnRocyAtIDEpOwotICAgICAgICBtTW9udGhTcGlubmVyLnNldERpc3BsYXllZFZhbHVlcyhtU2hvcnRNb250aHMpOwotICAgICAgICBtTW9udGhTcGlubmVyLnNldE9uTG9uZ1ByZXNzVXBkYXRlSW50ZXJ2YWwoMjAwKTsKLSAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRPblZhbHVlQ2hhbmdlZExpc3RlbmVyKG9uQ2hhbmdlTGlzdGVuZXIpOwotICAgICAgICBtTW9udGhTcGlubmVySW5wdXQgPSAoRWRpdFRleHQpIG1Nb250aFNwaW5uZXIuZmluZFZpZXdCeUlkKFIuaWQubnVtYmVycGlja2VyX2lucHV0KTsKLQotICAgICAgICAvLyB5ZWFyCi0gICAgICAgIG1ZZWFyU3Bpbm5lciA9IChOdW1iZXJQaWNrZXIpIGZpbmRWaWV3QnlJZChSLmlkLnllYXIpOwotICAgICAgICBtWWVhclNwaW5uZXIuc2V0T25Mb25nUHJlc3NVcGRhdGVJbnRlcnZhbCgxMDApOwotICAgICAgICBtWWVhclNwaW5uZXIuc2V0T25WYWx1ZUNoYW5nZWRMaXN0ZW5lcihvbkNoYW5nZUxpc3RlbmVyKTsKLSAgICAgICAgbVllYXJTcGlubmVySW5wdXQgPSAoRWRpdFRleHQpIG1ZZWFyU3Bpbm5lci5maW5kVmlld0J5SWQoUi5pZC5udW1iZXJwaWNrZXJfaW5wdXQpOwotCi0gICAgICAgIC8vIHNob3cgb25seSB3aGF0IHRoZSB1c2VyIHJlcXVpcmVkIGJ1dCBtYWtlIHN1cmUgd2UKLSAgICAgICAgLy8gc2hvdyBzb21ldGhpbmcgYW5kIHRoZSBzcGlubmVycyBoYXZlIGhpZ2hlciBwcmlvcml0eQotICAgICAgICBpZiAoIXNwaW5uZXJzU2hvd24gJiYgIWNhbGVuZGFyVmlld1Nob3duKSB7Ci0gICAgICAgICAgICBzZXRTcGlubmVyc1Nob3duKHRydWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2V0U3Bpbm5lcnNTaG93bihzcGlubmVyc1Nob3duKTsKLSAgICAgICAgICAgIHNldENhbGVuZGFyVmlld1Nob3duKGNhbGVuZGFyVmlld1Nob3duKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHNldCB0aGUgbWluIGRhdGUgZ2l2aW5nIHByaW9yaXR5IG9mIHRoZSBtaW5EYXRlIG92ZXIgc3RhcnRZZWFyCi0gICAgICAgIG1UZW1wRGF0ZS5jbGVhcigpOwotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KG1pbkRhdGUpKSB7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlRGF0ZShtaW5EYXRlLCBtVGVtcERhdGUpKSB7Ci0gICAgICAgICAgICAgICAgbVRlbXBEYXRlLnNldChzdGFydFllYXIsIDAsIDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVRlbXBEYXRlLnNldChzdGFydFllYXIsIDAsIDEpOwotICAgICAgICB9Ci0gICAgICAgIHNldE1pbkRhdGUobVRlbXBEYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKLQotICAgICAgICAvLyBzZXQgdGhlIG1heCBkYXRlIGdpdmluZyBwcmlvcml0eSBvZiB0aGUgbWF4RGF0ZSBvdmVyIGVuZFllYXIKLSAgICAgICAgbVRlbXBEYXRlLmNsZWFyKCk7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkobWF4RGF0ZSkpIHsKLSAgICAgICAgICAgIGlmICghcGFyc2VEYXRlKG1heERhdGUsIG1UZW1wRGF0ZSkpIHsKLSAgICAgICAgICAgICAgICBtVGVtcERhdGUuc2V0KGVuZFllYXIsIDExLCAzMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtVGVtcERhdGUuc2V0KGVuZFllYXIsIDExLCAzMSk7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0TWF4RGF0ZShtVGVtcERhdGUuZ2V0VGltZUluTWlsbGlzKCkpOwotCi0gICAgICAgIC8vIGluaXRpYWxpemUgdG8gY3VycmVudCBkYXRlCi0gICAgICAgIG1DdXJyZW50RGF0ZS5zZXRUaW1lSW5NaWxsaXMoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwotICAgICAgICBpbml0KG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUiksIG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpLCBtQ3VycmVudERhdGUKLSAgICAgICAgICAgICAgICAuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCksIG51bGwpOwotCi0gICAgICAgIC8vIHJlLW9yZGVyIHRoZSBudW1iZXIgc3Bpbm5lcnMgdG8gbWF0Y2ggdGhlIGN1cnJlbnQgZGF0ZSBmb3JtYXQKLSAgICAgICAgcmVvcmRlclNwaW5uZXJzKCk7Ci0KLSAgICAgICAgLy8gYWNjZXNzaWJpbGl0eQotICAgICAgICBzZXRDb250ZW50RGVzY3JpcHRpb25zKCk7Ci0KLSAgICAgICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIHRoaXMgdmlldyBpcyBpbXBvcnRhbnQgZm9yIGFjY2Vzc2liaWxpdHkuCi0gICAgICAgIGlmIChnZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KCkgPT0gSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX0FVVE8pIHsKLSAgICAgICAgICAgIHNldEltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkoSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX1lFUyk7Ci0gICAgICAgIH0KKyAgICBwdWJsaWMgRGF0ZVBpY2tlcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1pbmltYWwgZGF0ZSBzdXBwb3J0ZWQgYnkgdGhpcyB7QGxpbmsgRGF0ZVBpY2tlcn0gaW4KLSAgICAgKiBtaWxsaXNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwIDAwOjAwOjAwIGluCi0gICAgICoge0BsaW5rIFRpbWVab25lI2dldERlZmF1bHQoKX0gdGltZSB6b25lLgotICAgICAqIDxwPgotICAgICAqIE5vdGU6IFRoZSBkZWZhdWx0IG1pbmltYWwgZGF0ZSBpcyAwMS8wMS8xOTAwLgotICAgICAqIDxwPgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbWluaW1hbCBzdXBwb3J0ZWQgZGF0ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgbG9uZyBnZXRNaW5EYXRlKCkgewotICAgICAgICByZXR1cm4gbUNhbGVuZGFyVmlldy5nZXRNaW5EYXRlKCk7Ci0gICAgfQorICAgIHB1YmxpYyBEYXRlUGlja2VyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbWluaW1hbCBkYXRlIHN1cHBvcnRlZCBieSB0aGlzIHtAbGluayBOdW1iZXJQaWNrZXJ9IGluCi0gICAgICogbWlsbGlzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTk3MCAwMDowMDowMCBpbgotICAgICAqIHtAbGluayBUaW1lWm9uZSNnZXREZWZhdWx0KCl9IHRpbWUgem9uZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBtaW5EYXRlIFRoZSBtaW5pbWFsIHN1cHBvcnRlZCBkYXRlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE1pbkRhdGUobG9uZyBtaW5EYXRlKSB7Ci0gICAgICAgIG1UZW1wRGF0ZS5zZXRUaW1lSW5NaWxsaXMobWluRGF0ZSk7Ci0gICAgICAgIGlmIChtVGVtcERhdGUuZ2V0KENhbGVuZGFyLllFQVIpID09IG1NaW5EYXRlLmdldChDYWxlbmRhci5ZRUFSKQotICAgICAgICAgICAgICAgICYmIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1lFQVIpICE9IG1NaW5EYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtTWluRGF0ZS5zZXRUaW1lSW5NaWxsaXMobWluRGF0ZSk7Ci0gICAgICAgIG1DYWxlbmRhclZpZXcuc2V0TWluRGF0ZShtaW5EYXRlKTsKLSAgICAgICAgaWYgKG1DdXJyZW50RGF0ZS5iZWZvcmUobU1pbkRhdGUpKSB7Ci0gICAgICAgICAgICBtQ3VycmVudERhdGUuc2V0VGltZUluTWlsbGlzKG1NaW5EYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKLSAgICAgICAgICAgIHVwZGF0ZUNhbGVuZGFyVmlldygpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZVNwaW5uZXJzKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWF4aW1hbCBkYXRlIHN1cHBvcnRlZCBieSB0aGlzIHtAbGluayBEYXRlUGlja2VyfSBpbgotICAgICAqIG1pbGxpc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEsIDE5NzAgMDA6MDA6MDAgaW4KLSAgICAgKiB7QGxpbmsgVGltZVpvbmUjZ2V0RGVmYXVsdCgpfSB0aW1lIHpvbmUuCi0gICAgICogPHA+Ci0gICAgICogTm90ZTogVGhlIGRlZmF1bHQgbWF4aW1hbCBkYXRlIGlzIDEyLzMxLzIxMDAuCi0gICAgICogPHA+Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBtYXhpbWFsIHN1cHBvcnRlZCBkYXRlLgotICAgICAqLwotICAgIHB1YmxpYyBsb25nIGdldE1heERhdGUoKSB7Ci0gICAgICAgIHJldHVybiBtQ2FsZW5kYXJWaWV3LmdldE1heERhdGUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBtYXhpbWFsIGRhdGUgc3VwcG9ydGVkIGJ5IHRoaXMge0BsaW5rIERhdGVQaWNrZXJ9IGluCi0gICAgICogbWlsbGlzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTk3MCAwMDowMDowMCBpbgotICAgICAqIHtAbGluayBUaW1lWm9uZSNnZXREZWZhdWx0KCl9IHRpbWUgem9uZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBtYXhEYXRlIFRoZSBtYXhpbWFsIHN1cHBvcnRlZCBkYXRlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE1heERhdGUobG9uZyBtYXhEYXRlKSB7Ci0gICAgICAgIG1UZW1wRGF0ZS5zZXRUaW1lSW5NaWxsaXMobWF4RGF0ZSk7Ci0gICAgICAgIGlmIChtVGVtcERhdGUuZ2V0KENhbGVuZGFyLllFQVIpID09IG1NYXhEYXRlLmdldChDYWxlbmRhci5ZRUFSKQotICAgICAgICAgICAgICAgICYmIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1lFQVIpICE9IG1NYXhEYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtTWF4RGF0ZS5zZXRUaW1lSW5NaWxsaXMobWF4RGF0ZSk7Ci0gICAgICAgIG1DYWxlbmRhclZpZXcuc2V0TWF4RGF0ZShtYXhEYXRlKTsKLSAgICAgICAgaWYgKG1DdXJyZW50RGF0ZS5hZnRlcihtTWF4RGF0ZSkpIHsKLSAgICAgICAgICAgIG1DdXJyZW50RGF0ZS5zZXRUaW1lSW5NaWxsaXMobU1heERhdGUuZ2V0VGltZUluTWlsbGlzKCkpOwotICAgICAgICAgICAgdXBkYXRlQ2FsZW5kYXJWaWV3KCk7Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlU3Bpbm5lcnMoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgICBpZiAobUlzRW5hYmxlZCA9PSBlbmFibGVkKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc3VwZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICAgICAgbURheVNwaW5uZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRFbmFibGVkKGVuYWJsZWQpOwotICAgICAgICBtWWVhclNwaW5uZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICAgICAgbUNhbGVuZGFyVmlldy5zZXRFbmFibGVkKGVuYWJsZWQpOwotICAgICAgICBtSXNFbmFibGVkID0gZW5hYmxlZDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7Ci0gICAgICAgIHJldHVybiBtSXNFbmFibGVkOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIG9uUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgewotICAgICAgICBzdXBlci5vblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKLQotICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBEYXRlVXRpbHMuRk9STUFUX1NIT1dfREFURSB8IERhdGVVdGlscy5GT1JNQVRfU0hPV19ZRUFSOwotICAgICAgICBTdHJpbmcgc2VsZWN0ZWREYXRlVXR0ZXJhbmNlID0gRGF0ZVV0aWxzLmZvcm1hdERhdGVUaW1lKG1Db250ZXh0LAotICAgICAgICAgICAgICAgIG1DdXJyZW50RGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSwgZmxhZ3MpOwotICAgICAgICBldmVudC5nZXRUZXh0KCkuYWRkKHNlbGVjdGVkRGF0ZVV0dGVyYW5jZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgewotICAgICAgICBzdXBlci5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOwotICAgICAgICBldmVudC5zZXRDbGFzc05hbWUoRGF0ZVBpY2tlci5jbGFzcy5nZXROYW1lKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gaW5mbykgewotICAgICAgICBzdXBlci5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oaW5mbyk7Ci0gICAgICAgIGluZm8uc2V0Q2xhc3NOYW1lKERhdGVQaWNrZXIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKSB7Ci0gICAgICAgIHN1cGVyLm9uQ29uZmlndXJhdGlvbkNoYW5nZWQobmV3Q29uZmlnKTsKLSAgICAgICAgc2V0Q3VycmVudExvY2FsZShuZXdDb25maWcubG9jYWxlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHtAbGluayBDYWxlbmRhclZpZXd9IGlzIHNob3duLgotICAgICAqCi0gICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBjYWxlbmRhciB2aWV3IGlzIHNob3duLgotICAgICAqIEBzZWUgI2dldENhbGVuZGFyVmlldygpCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0Q2FsZW5kYXJWaWV3U2hvd24oKSB7Ci0gICAgICAgIHJldHVybiAobUNhbGVuZGFyVmlldy5nZXRWaXNpYmlsaXR5KCkgPT0gVmlldy5WSVNJQkxFKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSB7QGxpbmsgQ2FsZW5kYXJWaWV3fS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIGNhbGVuZGFyIHZpZXcuCi0gICAgICogQHNlZSAjZ2V0Q2FsZW5kYXJWaWV3U2hvd24oKQotICAgICAqLwotICAgIHB1YmxpYyBDYWxlbmRhclZpZXcgZ2V0Q2FsZW5kYXJWaWV3ICgpIHsKLSAgICAgICAgcmV0dXJuIG1DYWxlbmRhclZpZXc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB3aGV0aGVyIHRoZSB7QGxpbmsgQ2FsZW5kYXJWaWV3fSBpcyBzaG93bi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzaG93biBUcnVlIGlmIHRoZSBjYWxlbmRhciB2aWV3IGlzIHRvIGJlIHNob3duLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldENhbGVuZGFyVmlld1Nob3duKGJvb2xlYW4gc2hvd24pIHsKLSAgICAgICAgbUNhbGVuZGFyVmlldy5zZXRWaXNpYmlsaXR5KHNob3duID8gVklTSUJMRSA6IEdPTkUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgd2hldGhlciB0aGUgc3Bpbm5lcnMgYXJlIHNob3duLgotICAgICAqCi0gICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBzcGlubmVycyBhcmUgc2hvd24uCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0U3Bpbm5lcnNTaG93bigpIHsKLSAgICAgICAgcmV0dXJuIG1TcGlubmVycy5pc1Nob3duKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB3aGV0aGVyIHRoZSBzcGlubmVycyBhcmUgc2hvd24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc2hvd24gVHJ1ZSBpZiB0aGUgc3Bpbm5lcnMgYXJlIHRvIGJlIHNob3duLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFNwaW5uZXJzU2hvd24oYm9vbGVhbiBzaG93bikgewotICAgICAgICBtU3Bpbm5lcnMuc2V0VmlzaWJpbGl0eShzaG93biA/IFZJU0lCTEUgOiBHT05FKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGxvY2FsZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBsb2NhbGUgVGhlIGN1cnJlbnQgbG9jYWxlLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZXRDdXJyZW50TG9jYWxlKExvY2FsZSBsb2NhbGUpIHsKLSAgICAgICAgaWYgKGxvY2FsZS5lcXVhbHMobUN1cnJlbnRMb2NhbGUpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtQ3VycmVudExvY2FsZSA9IGxvY2FsZTsKLQotICAgICAgICBtVGVtcERhdGUgPSBnZXRDYWxlbmRhckZvckxvY2FsZShtVGVtcERhdGUsIGxvY2FsZSk7Ci0gICAgICAgIG1NaW5EYXRlID0gZ2V0Q2FsZW5kYXJGb3JMb2NhbGUobU1pbkRhdGUsIGxvY2FsZSk7Ci0gICAgICAgIG1NYXhEYXRlID0gZ2V0Q2FsZW5kYXJGb3JMb2NhbGUobU1heERhdGUsIGxvY2FsZSk7Ci0gICAgICAgIG1DdXJyZW50RGF0ZSA9IGdldENhbGVuZGFyRm9yTG9jYWxlKG1DdXJyZW50RGF0ZSwgbG9jYWxlKTsKLQotICAgICAgICBtTnVtYmVyT2ZNb250aHMgPSBtVGVtcERhdGUuZ2V0QWN0dWFsTWF4aW11bShDYWxlbmRhci5NT05USCkgKyAxOwotICAgICAgICBtU2hvcnRNb250aHMgPSBuZXcgRGF0ZUZvcm1hdFN5bWJvbHMoKS5nZXRTaG9ydE1vbnRocygpOwotCi0gICAgICAgIGlmICh1c2luZ051bWVyaWNNb250aHMoKSkgewotICAgICAgICAgICAgLy8gV2UncmUgaW4gYSBsb2NhbGUgd2hlcmUgYSBkYXRlIHNob3VsZCBlaXRoZXIgYmUgYWxsLW51bWVyaWMsIG9yIGFsbC10ZXh0LgotICAgICAgICAgICAgLy8gQWxsLXRleHQgd291bGQgcmVxdWlyZSBjdXN0b20gTnVtYmVyUGlja2VyIGZvcm1hdHRlcnMgZm9yIGRheSBhbmQgeWVhci4KLSAgICAgICAgICAgIG1TaG9ydE1vbnRocyA9IG5ldyBTdHJpbmdbbU51bWJlck9mTW9udGhzXTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU51bWJlck9mTW9udGhzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBtU2hvcnRNb250aHNbaV0gPSBTdHJpbmcuZm9ybWF0KCIlZCIsIGkgKyAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRlc3RzIHdoZXRoZXIgdGhlIGN1cnJlbnQgbG9jYWxlIGlzIG9uZSB3aGVyZSB0aGVyZSBhcmUgbm8gcmVhbCBtb250aCBuYW1lcywKLSAgICAgKiBzdWNoIGFzIENoaW5lc2UsIEphcGFuZXNlLCBvciBLb3JlYW4gbG9jYWxlcy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gdXNpbmdOdW1lcmljTW9udGhzKCkgewotICAgICAgICByZXR1cm4gQ2hhcmFjdGVyLmlzRGlnaXQobVNob3J0TW9udGhzW0NhbGVuZGFyLkpBTlVBUlldLmNoYXJBdCgwKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyBhIGNhbGVuZGFyIGZvciBsb2NhbGUgYm9vdHN0cmFwcGVkIHdpdGggdGhlIHZhbHVlIG9mIGEgZ2l2ZW4gY2FsZW5kYXIuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gb2xkQ2FsZW5kYXIgVGhlIG9sZCBjYWxlbmRhci4KLSAgICAgKiBAcGFyYW0gbG9jYWxlIFRoZSBsb2NhbGUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBDYWxlbmRhciBnZXRDYWxlbmRhckZvckxvY2FsZShDYWxlbmRhciBvbGRDYWxlbmRhciwgTG9jYWxlIGxvY2FsZSkgewotICAgICAgICBpZiAob2xkQ2FsZW5kYXIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIENhbGVuZGFyLmdldEluc3RhbmNlKGxvY2FsZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmaW5hbCBsb25nIGN1cnJlbnRUaW1lTWlsbGlzID0gb2xkQ2FsZW5kYXIuZ2V0VGltZUluTWlsbGlzKCk7Ci0gICAgICAgICAgICBDYWxlbmRhciBuZXdDYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKGxvY2FsZSk7Ci0gICAgICAgICAgICBuZXdDYWxlbmRhci5zZXRUaW1lSW5NaWxsaXMoY3VycmVudFRpbWVNaWxsaXMpOwotICAgICAgICAgICAgcmV0dXJuIG5ld0NhbGVuZGFyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVvcmRlcnMgdGhlIHNwaW5uZXJzIGFjY29yZGluZyB0byB0aGUgZGF0ZSBmb3JtYXQgdGhhdCBpcwotICAgICAqIGV4cGxpY2l0bHkgc2V0IGJ5IHRoZSB1c2VyIGFuZCBpZiBubyBzdWNoIGlzIHNldCBmYWxsIGJhY2sKLSAgICAgKiB0byB0aGUgY3VycmVudCBsb2NhbGUncyBkZWZhdWx0IGZvcm1hdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcmVvcmRlclNwaW5uZXJzKCkgewotICAgICAgICBtU3Bpbm5lcnMucmVtb3ZlQWxsVmlld3MoKTsKLSAgICAgICAgLy8gV2UgdXNlIG51bWVyaWMgc3Bpbm5lcnMgZm9yIHllYXIgYW5kIGRheSwgYnV0IHRleHR1YWwgbW9udGhzLiBBc2sgaWN1NGMgd2hhdAotICAgICAgICAvLyBvcmRlciB0aGUgdXNlcidzIGxvY2FsZSB1c2VzIGZvciB0aGF0IGNvbWJpbmF0aW9uLiBodHRwOi8vYi83MjA3MTAzLgotICAgICAgICBTdHJpbmcgcGF0dGVybiA9IElDVS5nZXRCZXN0RGF0ZVRpbWVQYXR0ZXJuKCJ5eXl5TU1NZGQiLCBMb2NhbGUuZ2V0RGVmYXVsdCgpLnRvU3RyaW5nKCkpOwotICAgICAgICBjaGFyW10gb3JkZXIgPSBJQ1UuZ2V0RGF0ZUZvcm1hdE9yZGVyKHBhdHRlcm4pOwotICAgICAgICBmaW5hbCBpbnQgc3Bpbm5lckNvdW50ID0gb3JkZXIubGVuZ3RoOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNwaW5uZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG9yZGVyW2ldKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICAgICAgICAgIG1TcGlubmVycy5hZGRWaWV3KG1EYXlTcGlubmVyKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0SW1lT3B0aW9ucyhtRGF5U3Bpbm5lciwgc3Bpbm5lckNvdW50LCBpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnTSc6Ci0gICAgICAgICAgICAgICAgICAgIG1TcGlubmVycy5hZGRWaWV3KG1Nb250aFNwaW5uZXIpOwotICAgICAgICAgICAgICAgICAgICBzZXRJbWVPcHRpb25zKG1Nb250aFNwaW5uZXIsIHNwaW5uZXJDb3VudCwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJ3knOgotICAgICAgICAgICAgICAgICAgICBtU3Bpbm5lcnMuYWRkVmlldyhtWWVhclNwaW5uZXIpOwotICAgICAgICAgICAgICAgICAgICBzZXRJbWVPcHRpb25zKG1ZZWFyU3Bpbm5lciwgc3Bpbm5lckNvdW50LCBpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihBcnJheXMudG9TdHJpbmcob3JkZXIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgZGF0ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSB5ZWFyIFRoZSB5ZWFyLgotICAgICAqIEBwYXJhbSBtb250aCBUaGUgbW9udGggd2hpY2ggaXMgPHN0cm9uZz5zdGFydGluZyBmcm9tIHplcm88L3N0cm9uZz4uCi0gICAgICogQHBhcmFtIGRheU9mTW9udGggVGhlIGRheSBvZiB0aGUgbW9udGguCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdXBkYXRlRGF0ZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5T2ZNb250aCkgewotICAgICAgICBpZiAoIWlzTmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5T2ZNb250aCkpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzZXREYXRlKHllYXIsIG1vbnRoLCBkYXlPZk1vbnRoKTsKLSAgICAgICAgdXBkYXRlU3Bpbm5lcnMoKTsKLSAgICAgICAgdXBkYXRlQ2FsZW5kYXJWaWV3KCk7Ci0gICAgICAgIG5vdGlmeURhdGVDaGFuZ2VkKCk7Ci0gICAgfQotCi0gICAgLy8gT3ZlcnJpZGUgc28gd2UgYXJlIGluIGNvbXBsZXRlIGNvbnRyb2wgb2Ygc2F2ZSAvIHJlc3RvcmUgZm9yIHRoaXMgd2lkZ2V0LgotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGRpc3BhdGNoUmVzdG9yZUluc3RhbmNlU3RhdGUoU3BhcnNlQXJyYXk8UGFyY2VsYWJsZT4gY29udGFpbmVyKSB7Ci0gICAgICAgIGRpc3BhdGNoVGhhd1NlbGZPbmx5KGNvbnRhaW5lcik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFBhcmNlbGFibGUgb25TYXZlSW5zdGFuY2VTdGF0ZSgpIHsKLSAgICAgICAgUGFyY2VsYWJsZSBzdXBlclN0YXRlID0gc3VwZXIub25TYXZlSW5zdGFuY2VTdGF0ZSgpOwotICAgICAgICByZXR1cm4gbmV3IFNhdmVkU3RhdGUoc3VwZXJTdGF0ZSwgZ2V0WWVhcigpLCBnZXRNb250aCgpLCBnZXREYXlPZk1vbnRoKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdG9yZUluc3RhbmNlU3RhdGUoUGFyY2VsYWJsZSBzdGF0ZSkgewotICAgICAgICBTYXZlZFN0YXRlIHNzID0gKFNhdmVkU3RhdGUpIHN0YXRlOwotICAgICAgICBzdXBlci5vblJlc3RvcmVJbnN0YW5jZVN0YXRlKHNzLmdldFN1cGVyU3RhdGUoKSk7Ci0gICAgICAgIHNldERhdGUoc3MubVllYXIsIHNzLm1Nb250aCwgc3MubURheSk7Ci0gICAgICAgIHVwZGF0ZVNwaW5uZXJzKCk7Ci0gICAgICAgIHVwZGF0ZUNhbGVuZGFyVmlldygpOworICAgICAgICBtRGVsZWdhdGUgPSBuZXcgTGVnYWN5RGF0ZVBpY2tlckRlbGVnYXRlKHRoaXMsIGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICAvKioKQEAgLTU5OSwxOTEgKzEyMyw4ODEgQEAKICAgICAgKiAgICAgICAgICAgIHVzZXIsIGNhbiBiZSBudWxsLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGluaXQoaW50IHllYXIsIGludCBtb250aE9mWWVhciwgaW50IGRheU9mTW9udGgsCi0gICAgICAgICAgICBPbkRhdGVDaGFuZ2VkTGlzdGVuZXIgb25EYXRlQ2hhbmdlZExpc3RlbmVyKSB7Ci0gICAgICAgIHNldERhdGUoeWVhciwgbW9udGhPZlllYXIsIGRheU9mTW9udGgpOwotICAgICAgICB1cGRhdGVTcGlubmVycygpOwotICAgICAgICB1cGRhdGVDYWxlbmRhclZpZXcoKTsKLSAgICAgICAgbU9uRGF0ZUNoYW5nZWRMaXN0ZW5lciA9IG9uRGF0ZUNoYW5nZWRMaXN0ZW5lcjsKKyAgICAgICAgICAgICAgICAgICAgIE9uRGF0ZUNoYW5nZWRMaXN0ZW5lciBvbkRhdGVDaGFuZ2VkTGlzdGVuZXIpIHsKKyAgICAgICAgbURlbGVnYXRlLmluaXQoeWVhciwgbW9udGhPZlllYXIsIGRheU9mTW9udGgsIG9uRGF0ZUNoYW5nZWRMaXN0ZW5lcik7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUGFyc2VzIHRoZSBnaXZlbiA8Y29kZT5kYXRlPC9jb2RlPiBhbmQgaW4gY2FzZSBvZiBzdWNjZXNzIHNldHMgdGhlIHJlc3VsdAotICAgICAqIHRvIHRoZSA8Y29kZT5vdXREYXRlPC9jb2RlPi4KKyAgICAgKiBVcGRhdGVzIHRoZSBjdXJyZW50IGRhdGUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGRhdGUgd2FzIHBhcnNlZC4KKyAgICAgKiBAcGFyYW0geWVhciBUaGUgeWVhci4KKyAgICAgKiBAcGFyYW0gbW9udGggVGhlIG1vbnRoIHdoaWNoIGlzIDxzdHJvbmc+c3RhcnRpbmcgZnJvbSB6ZXJvPC9zdHJvbmc+LgorICAgICAqIEBwYXJhbSBkYXlPZk1vbnRoIFRoZSBkYXkgb2YgdGhlIG1vbnRoLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBwYXJzZURhdGUoU3RyaW5nIGRhdGUsIENhbGVuZGFyIG91dERhdGUpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG91dERhdGUuc2V0VGltZShtRGF0ZUZvcm1hdC5wYXJzZShkYXRlKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIkRhdGU6ICIgKyBkYXRlICsgIiBub3QgaW4gZm9ybWF0OiAiICsgREFURV9GT1JNQVQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzTmV3RGF0ZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5T2ZNb250aCkgewotICAgICAgICByZXR1cm4gKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikgIT0geWVhcgotICAgICAgICAgICAgICAgIHx8IG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpICE9IGRheU9mTW9udGgKLSAgICAgICAgICAgICAgICB8fCBtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkgIT0gbW9udGgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXREYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoKSB7Ci0gICAgICAgIG1DdXJyZW50RGF0ZS5zZXQoeWVhciwgbW9udGgsIGRheU9mTW9udGgpOwotICAgICAgICBpZiAobUN1cnJlbnREYXRlLmJlZm9yZShtTWluRGF0ZSkpIHsKLSAgICAgICAgICAgIG1DdXJyZW50RGF0ZS5zZXRUaW1lSW5NaWxsaXMobU1pbkRhdGUuZ2V0VGltZUluTWlsbGlzKCkpOwotICAgICAgICB9IGVsc2UgaWYgKG1DdXJyZW50RGF0ZS5hZnRlcihtTWF4RGF0ZSkpIHsKLSAgICAgICAgICAgIG1DdXJyZW50RGF0ZS5zZXRUaW1lSW5NaWxsaXMobU1heERhdGUuZ2V0VGltZUluTWlsbGlzKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVNwaW5uZXJzKCkgewotICAgICAgICAvLyBzZXQgdGhlIHNwaW5uZXIgcmFuZ2VzIHJlc3BlY3RpbmcgdGhlIG1pbiBhbmQgbWF4IGRhdGVzCi0gICAgICAgIGlmIChtQ3VycmVudERhdGUuZXF1YWxzKG1NaW5EYXRlKSkgewotICAgICAgICAgICAgbURheVNwaW5uZXIuc2V0TWluVmFsdWUobUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKLSAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldE1heFZhbHVlKG1DdXJyZW50RGF0ZS5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLkRBWV9PRl9NT05USCkpOwotICAgICAgICAgICAgbURheVNwaW5uZXIuc2V0V3JhcFNlbGVjdG9yV2hlZWwoZmFsc2UpOwotICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXREaXNwbGF5ZWRWYWx1ZXMobnVsbCk7Ci0gICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldE1pblZhbHVlKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpKTsKLSAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0TWF4VmFsdWUobUN1cnJlbnREYXRlLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuTU9OVEgpKTsKLSAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0V3JhcFNlbGVjdG9yV2hlZWwoZmFsc2UpOwotICAgICAgICB9IGVsc2UgaWYgKG1DdXJyZW50RGF0ZS5lcXVhbHMobU1heERhdGUpKSB7Ci0gICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRNaW5WYWx1ZShtQ3VycmVudERhdGUuZ2V0QWN0dWFsTWluaW11bShDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKLSAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldE1heFZhbHVlKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7Ci0gICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRXcmFwU2VsZWN0b3JXaGVlbChmYWxzZSk7Ci0gICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldERpc3BsYXllZFZhbHVlcyhudWxsKTsKLSAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0TWluVmFsdWUobUN1cnJlbnREYXRlLmdldEFjdHVhbE1pbmltdW0oQ2FsZW5kYXIuTU9OVEgpKTsKLSAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0TWF4VmFsdWUobUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5NT05USCkpOwotICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRXcmFwU2VsZWN0b3JXaGVlbChmYWxzZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRNaW5WYWx1ZSgxKTsKLSAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldE1heFZhbHVlKG1DdXJyZW50RGF0ZS5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLkRBWV9PRl9NT05USCkpOwotICAgICAgICAgICAgbURheVNwaW5uZXIuc2V0V3JhcFNlbGVjdG9yV2hlZWwodHJ1ZSk7Ci0gICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldERpc3BsYXllZFZhbHVlcyhudWxsKTsKLSAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0TWluVmFsdWUoMCk7Ci0gICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldE1heFZhbHVlKDExKTsKLSAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0V3JhcFNlbGVjdG9yV2hlZWwodHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIG1vbnRoIG5hbWVzIGFyZSBhIHplcm8gYmFzZWQgYXJyYXkKLSAgICAgICAgLy8gd2l0aCB0aGUgbW9udGhzIGluIHRoZSBtb250aCBzcGlubmVyCi0gICAgICAgIFN0cmluZ1tdIGRpc3BsYXllZFZhbHVlcyA9IEFycmF5cy5jb3B5T2ZSYW5nZShtU2hvcnRNb250aHMsCi0gICAgICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5nZXRNaW5WYWx1ZSgpLCBtTW9udGhTcGlubmVyLmdldE1heFZhbHVlKCkgKyAxKTsKLSAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXREaXNwbGF5ZWRWYWx1ZXMoZGlzcGxheWVkVmFsdWVzKTsKLQotICAgICAgICAvLyB5ZWFyIHNwaW5uZXIgcmFuZ2UgZG9lcyBub3QgY2hhbmdlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRhdGUKLSAgICAgICAgbVllYXJTcGlubmVyLnNldE1pblZhbHVlKG1NaW5EYXRlLmdldChDYWxlbmRhci5ZRUFSKSk7Ci0gICAgICAgIG1ZZWFyU3Bpbm5lci5zZXRNYXhWYWx1ZShtTWF4RGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikpOwotICAgICAgICBtWWVhclNwaW5uZXIuc2V0V3JhcFNlbGVjdG9yV2hlZWwoZmFsc2UpOwotCi0gICAgICAgIC8vIHNldCB0aGUgc3Bpbm5lciB2YWx1ZXMKLSAgICAgICAgbVllYXJTcGlubmVyLnNldFZhbHVlKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikpOwotICAgICAgICBtTW9udGhTcGlubmVyLnNldFZhbHVlKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpKTsKLSAgICAgICAgbURheVNwaW5uZXIuc2V0VmFsdWUobUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKLQotICAgICAgICBpZiAodXNpbmdOdW1lcmljTW9udGhzKCkpIHsKLSAgICAgICAgICAgIG1Nb250aFNwaW5uZXJJbnB1dC5zZXRSYXdJbnB1dFR5cGUoSW5wdXRUeXBlLlRZUEVfQ0xBU1NfTlVNQkVSKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVwZGF0ZXMgdGhlIGNhbGVuZGFyIHZpZXcgd2l0aCB0aGUgY3VycmVudCBkYXRlLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVDYWxlbmRhclZpZXcoKSB7Ci0gICAgICAgICBtQ2FsZW5kYXJWaWV3LnNldERhdGUobUN1cnJlbnREYXRlLmdldFRpbWVJbk1pbGxpcygpLCBmYWxzZSwgZmFsc2UpOworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZURhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheU9mTW9udGgpIHsKKyAgICAgICAgbURlbGVnYXRlLnVwZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheU9mTW9udGgpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIEByZXR1cm4gVGhlIHNlbGVjdGVkIHllYXIuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRZZWFyKCkgewotICAgICAgICByZXR1cm4gbUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5ZRUFSKTsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXRZZWFyKCk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQHJldHVybiBUaGUgc2VsZWN0ZWQgbW9udGguCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRNb250aCgpIHsKLSAgICAgICAgcmV0dXJuIG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpOworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldE1vbnRoKCk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQHJldHVybiBUaGUgc2VsZWN0ZWQgZGF5IG9mIG1vbnRoLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0RGF5T2ZNb250aCgpIHsKLSAgICAgICAgcmV0dXJuIG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXREYXlPZk1vbnRoKCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogTm90aWZpZXMgdGhlIGxpc3RlbmVyLCBpZiBzdWNoLCBmb3IgYSBjaGFuZ2UgaW4gdGhlIHNlbGVjdGVkIGRhdGUuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIG5vdGlmeURhdGVDaGFuZ2VkKCkgewotICAgICAgICBzZW5kQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1ZJRVdfU0VMRUNURUQpOwotICAgICAgICBpZiAobU9uRGF0ZUNoYW5nZWRMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT25EYXRlQ2hhbmdlZExpc3RlbmVyLm9uRGF0ZUNoYW5nZWQodGhpcywgZ2V0WWVhcigpLCBnZXRNb250aCgpLCBnZXREYXlPZk1vbnRoKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgSU1FIG9wdGlvbnMgZm9yIGEgc3Bpbm5lciBiYXNlZCBvbiBpdHMgb3JkZXJpbmcuCisgICAgICogR2V0cyB0aGUgbWluaW1hbCBkYXRlIHN1cHBvcnRlZCBieSB0aGlzIHtAbGluayBEYXRlUGlja2VyfSBpbgorICAgICAqIG1pbGxpc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEsIDE5NzAgMDA6MDA6MDAgaW4KKyAgICAgKiB7QGxpbmsgVGltZVpvbmUjZ2V0RGVmYXVsdCgpfSB0aW1lIHpvbmUuCisgICAgICogPHA+CisgICAgICogTm90ZTogVGhlIGRlZmF1bHQgbWluaW1hbCBkYXRlIGlzIDAxLzAxLzE5MDAuCisgICAgICogPHA+CiAgICAgICoKLSAgICAgKiBAcGFyYW0gc3Bpbm5lciBUaGUgc3Bpbm5lci4KLSAgICAgKiBAcGFyYW0gc3Bpbm5lckNvdW50IFRoZSB0b3RhbCBzcGlubmVyIGNvdW50LgotICAgICAqIEBwYXJhbSBzcGlubmVySW5kZXggVGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzcGlubmVyLgorICAgICAqIEByZXR1cm4gVGhlIG1pbmltYWwgc3VwcG9ydGVkIGRhdGUuCiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNldEltZU9wdGlvbnMoTnVtYmVyUGlja2VyIHNwaW5uZXIsIGludCBzcGlubmVyQ291bnQsIGludCBzcGlubmVySW5kZXgpIHsKLSAgICAgICAgZmluYWwgaW50IGltZU9wdGlvbnM7Ci0gICAgICAgIGlmIChzcGlubmVySW5kZXggPCBzcGlubmVyQ291bnQgLSAxKSB7Ci0gICAgICAgICAgICBpbWVPcHRpb25zID0gRWRpdG9ySW5mby5JTUVfQUNUSU9OX05FWFQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbWVPcHRpb25zID0gRWRpdG9ySW5mby5JTUVfQUNUSU9OX0RPTkU7CisgICAgcHVibGljIGxvbmcgZ2V0TWluRGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXRNaW5EYXRlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgbWluaW1hbCBkYXRlIHN1cHBvcnRlZCBieSB0aGlzIHtAbGluayBOdW1iZXJQaWNrZXJ9IGluCisgICAgICogbWlsbGlzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTk3MCAwMDowMDowMCBpbgorICAgICAqIHtAbGluayBUaW1lWm9uZSNnZXREZWZhdWx0KCl9IHRpbWUgem9uZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtaW5EYXRlIFRoZSBtaW5pbWFsIHN1cHBvcnRlZCBkYXRlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1pbkRhdGUobG9uZyBtaW5EYXRlKSB7CisgICAgICAgIG1EZWxlZ2F0ZS5zZXRNaW5EYXRlKG1pbkRhdGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIG1heGltYWwgZGF0ZSBzdXBwb3J0ZWQgYnkgdGhpcyB7QGxpbmsgRGF0ZVBpY2tlcn0gaW4KKyAgICAgKiBtaWxsaXNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwIDAwOjAwOjAwIGluCisgICAgICoge0BsaW5rIFRpbWVab25lI2dldERlZmF1bHQoKX0gdGltZSB6b25lLgorICAgICAqIDxwPgorICAgICAqIE5vdGU6IFRoZSBkZWZhdWx0IG1heGltYWwgZGF0ZSBpcyAxMi8zMS8yMTAwLgorICAgICAqIDxwPgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgbWF4aW1hbCBzdXBwb3J0ZWQgZGF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBnZXRNYXhEYXRlKCkgeworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldE1heERhdGUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBtYXhpbWFsIGRhdGUgc3VwcG9ydGVkIGJ5IHRoaXMge0BsaW5rIERhdGVQaWNrZXJ9IGluCisgICAgICogbWlsbGlzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTk3MCAwMDowMDowMCBpbgorICAgICAqIHtAbGluayBUaW1lWm9uZSNnZXREZWZhdWx0KCl9IHRpbWUgem9uZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtYXhEYXRlIFRoZSBtYXhpbWFsIHN1cHBvcnRlZCBkYXRlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1heERhdGUobG9uZyBtYXhEYXRlKSB7CisgICAgICAgIG1EZWxlZ2F0ZS5zZXRNYXhEYXRlKG1heERhdGUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgIGlmIChtRGVsZWdhdGUuaXNFbmFibGVkKCkgPT0gZW5hYmxlZCkgeworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFRleHRWaWV3IGlucHV0ID0gKFRleHRWaWV3KSBzcGlubmVyLmZpbmRWaWV3QnlJZChSLmlkLm51bWJlcnBpY2tlcl9pbnB1dCk7Ci0gICAgICAgIGlucHV0LnNldEltZU9wdGlvbnMoaW1lT3B0aW9ucyk7CisgICAgICAgIHN1cGVyLnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgICAgIG1EZWxlZ2F0ZS5zZXRFbmFibGVkKGVuYWJsZWQpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBzZXRDb250ZW50RGVzY3JpcHRpb25zKCkgewotICAgICAgICAvLyBEYXkKLSAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1EYXlTcGlubmVyLCBSLmlkLmluY3JlbWVudCwKLSAgICAgICAgICAgICAgICBSLnN0cmluZy5kYXRlX3BpY2tlcl9pbmNyZW1lbnRfZGF5X2J1dHRvbik7Ci0gICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtRGF5U3Bpbm5lciwgUi5pZC5kZWNyZW1lbnQsCi0gICAgICAgICAgICAgICAgUi5zdHJpbmcuZGF0ZV9waWNrZXJfZGVjcmVtZW50X2RheV9idXR0b24pOwotICAgICAgICAvLyBNb250aAotICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obU1vbnRoU3Bpbm5lciwgUi5pZC5pbmNyZW1lbnQsCi0gICAgICAgICAgICAgICAgUi5zdHJpbmcuZGF0ZV9waWNrZXJfaW5jcmVtZW50X21vbnRoX2J1dHRvbik7Ci0gICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtTW9udGhTcGlubmVyLCBSLmlkLmRlY3JlbWVudCwKLSAgICAgICAgICAgICAgICBSLnN0cmluZy5kYXRlX3BpY2tlcl9kZWNyZW1lbnRfbW9udGhfYnV0dG9uKTsKLSAgICAgICAgLy8gWWVhcgotICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obVllYXJTcGlubmVyLCBSLmlkLmluY3JlbWVudCwKLSAgICAgICAgICAgICAgICBSLnN0cmluZy5kYXRlX3BpY2tlcl9pbmNyZW1lbnRfeWVhcl9idXR0b24pOwotICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obVllYXJTcGlubmVyLCBSLmlkLmRlY3JlbWVudCwKLSAgICAgICAgICAgICAgICBSLnN0cmluZy5kYXRlX3BpY2tlcl9kZWNyZW1lbnRfeWVhcl9idXR0b24pOworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5pc0VuYWJsZWQoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKFZpZXcgcm9vdCwgaW50IHZpZXdJZCwgaW50IGNvbnREZXNjUmVzSWQpIHsKLSAgICAgICAgVmlldyB0YXJnZXQgPSByb290LmZpbmRWaWV3QnlJZCh2aWV3SWQpOwotICAgICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRhcmdldC5zZXRDb250ZW50RGVzY3JpcHRpb24obUNvbnRleHQuZ2V0U3RyaW5nKGNvbnREZXNjUmVzSWQpKTsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBkaXNwYXRjaFBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmRpc3BhdGNoUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CisgICAgICAgIHN1cGVyLm9uUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOworICAgICAgICBtRGVsZWdhdGUub25Qb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgICAgICBzdXBlci5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOworICAgICAgICBtRGVsZWdhdGUub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGluZm8pIHsKKyAgICAgICAgc3VwZXIub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKGluZm8pOworICAgICAgICBtRGVsZWdhdGUub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKGluZm8pOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQoQ29uZmlndXJhdGlvbiBuZXdDb25maWcpIHsKKyAgICAgICAgc3VwZXIub25Db25maWd1cmF0aW9uQ2hhbmdlZChuZXdDb25maWcpOworICAgICAgICBtRGVsZWdhdGUub25Db25maWd1cmF0aW9uQ2hhbmdlZChuZXdDb25maWcpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgd2hldGhlciB0aGUge0BsaW5rIENhbGVuZGFyVmlld30gaXMgc2hvd24uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGNhbGVuZGFyIHZpZXcgaXMgc2hvd24uCisgICAgICogQHNlZSAjZ2V0Q2FsZW5kYXJWaWV3KCkKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRDYWxlbmRhclZpZXdTaG93bigpIHsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5nZXRDYWxlbmRhclZpZXdTaG93bigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHtAbGluayBDYWxlbmRhclZpZXd9LgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgY2FsZW5kYXIgdmlldy4KKyAgICAgKiBAc2VlICNnZXRDYWxlbmRhclZpZXdTaG93bigpCisgICAgICovCisgICAgcHVibGljIENhbGVuZGFyVmlldyBnZXRDYWxlbmRhclZpZXcgKCkgeworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldENhbGVuZGFyVmlldygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgd2hldGhlciB0aGUge0BsaW5rIENhbGVuZGFyVmlld30gaXMgc2hvd24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gc2hvd24gVHJ1ZSBpZiB0aGUgY2FsZW5kYXIgdmlldyBpcyB0byBiZSBzaG93bi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDYWxlbmRhclZpZXdTaG93bihib29sZWFuIHNob3duKSB7CisgICAgICAgIG1EZWxlZ2F0ZS5zZXRDYWxlbmRhclZpZXdTaG93bihzaG93bik7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB3aGV0aGVyIHRoZSBzcGlubmVycyBhcmUgc2hvd24uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHNwaW5uZXJzIGFyZSBzaG93bi4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRTcGlubmVyc1Nob3duKCkgeworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldFNwaW5uZXJzU2hvd24oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHNwaW5uZXJzIGFyZSBzaG93bi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzaG93biBUcnVlIGlmIHRoZSBzcGlubmVycyBhcmUgdG8gYmUgc2hvd24uCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U3Bpbm5lcnNTaG93bihib29sZWFuIHNob3duKSB7CisgICAgICAgIG1EZWxlZ2F0ZS5zZXRTcGlubmVyc1Nob3duKHNob3duKTsKKyAgICB9CisKKyAgICAvLyBPdmVycmlkZSBzbyB3ZSBhcmUgaW4gY29tcGxldGUgY29udHJvbCBvZiBzYXZlIC8gcmVzdG9yZSBmb3IgdGhpcyB3aWRnZXQuCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgZGlzcGF0Y2hSZXN0b3JlSW5zdGFuY2VTdGF0ZShTcGFyc2VBcnJheTxQYXJjZWxhYmxlPiBjb250YWluZXIpIHsKKyAgICAgICAgbURlbGVnYXRlLmRpc3BhdGNoUmVzdG9yZUluc3RhbmNlU3RhdGUoY29udGFpbmVyKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgUGFyY2VsYWJsZSBvblNhdmVJbnN0YW5jZVN0YXRlKCkgeworICAgICAgICBQYXJjZWxhYmxlIHN1cGVyU3RhdGUgPSBzdXBlci5vblNhdmVJbnN0YW5jZVN0YXRlKCk7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUub25TYXZlSW5zdGFuY2VTdGF0ZShzdXBlclN0YXRlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblJlc3RvcmVJbnN0YW5jZVN0YXRlKFBhcmNlbGFibGUgc3RhdGUpIHsKKyAgICAgICAgU2F2ZWRTdGF0ZSBzcyA9IChTYXZlZFN0YXRlKSBzdGF0ZTsKKyAgICAgICAgc3VwZXIub25SZXN0b3JlSW5zdGFuY2VTdGF0ZShzcy5nZXRTdXBlclN0YXRlKCkpOworICAgICAgICBtRGVsZWdhdGUub25SZXN0b3JlSW5zdGFuY2VTdGF0ZShzcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQSBkZWxlZ2F0ZSBpbnRlcmZhY2UgdGhhdCBkZWZpbmVkIHRoZSBwdWJsaWMgQVBJIG9mIHRoZSBEYXRlUGlja2VyLiBBbGxvd3MgZGlmZmVyZW50CisgICAgICogRGF0ZVBpY2tlciBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgd291bGQgbmVlZCB0byBiZSBpbXBsZW1lbnRlZCBieSB0aGUgRGF0ZVBpY2tlciBkZWxlZ2F0ZXMKKyAgICAgKiBmb3IgdGhlIHJlYWwgYmVoYXZpb3IuCisgICAgICovCisgICAgaW50ZXJmYWNlIERhdGVQaWNrZXJEZWxlZ2F0ZSB7CisgICAgICAgIHZvaWQgaW5pdChpbnQgeWVhciwgaW50IG1vbnRoT2ZZZWFyLCBpbnQgZGF5T2ZNb250aCwKKyAgICAgICAgICAgICAgICAgIE9uRGF0ZUNoYW5nZWRMaXN0ZW5lciBvbkRhdGVDaGFuZ2VkTGlzdGVuZXIpOworCisgICAgICAgIHZvaWQgdXBkYXRlRGF0ZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5T2ZNb250aCk7CisKKyAgICAgICAgaW50IGdldFllYXIoKTsKKyAgICAgICAgaW50IGdldE1vbnRoKCk7CisgICAgICAgIGludCBnZXREYXlPZk1vbnRoKCk7CisKKyAgICAgICAgdm9pZCBzZXRNaW5EYXRlKGxvbmcgbWluRGF0ZSk7CisgICAgICAgIGxvbmcgZ2V0TWluRGF0ZSgpOworCisgICAgICAgIHZvaWQgc2V0TWF4RGF0ZShsb25nIG1heERhdGUpOworICAgICAgICBsb25nIGdldE1heERhdGUoKTsKKworICAgICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKTsKKyAgICAgICAgYm9vbGVhbiBpc0VuYWJsZWQoKTsKKworICAgICAgICBDYWxlbmRhclZpZXcgZ2V0Q2FsZW5kYXJWaWV3ICgpOworCisgICAgICAgIHZvaWQgc2V0Q2FsZW5kYXJWaWV3U2hvd24oYm9vbGVhbiBzaG93bik7CisgICAgICAgIGJvb2xlYW4gZ2V0Q2FsZW5kYXJWaWV3U2hvd24oKTsKKworICAgICAgICB2b2lkIHNldFNwaW5uZXJzU2hvd24oYm9vbGVhbiBzaG93bik7CisgICAgICAgIGJvb2xlYW4gZ2V0U3Bpbm5lcnNTaG93bigpOworCisgICAgICAgIHZvaWQgb25Db25maWd1cmF0aW9uQ2hhbmdlZChDb25maWd1cmF0aW9uIG5ld0NvbmZpZyk7CisKKyAgICAgICAgdm9pZCBkaXNwYXRjaFJlc3RvcmVJbnN0YW5jZVN0YXRlKFNwYXJzZUFycmF5PFBhcmNlbGFibGU+IGNvbnRhaW5lcik7CisgICAgICAgIFBhcmNlbGFibGUgb25TYXZlSW5zdGFuY2VTdGF0ZShQYXJjZWxhYmxlIHN1cGVyU3RhdGUpOworICAgICAgICB2b2lkIG9uUmVzdG9yZUluc3RhbmNlU3RhdGUoUGFyY2VsYWJsZSBzdGF0ZSk7CisKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaFBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCk7CisgICAgICAgIHZvaWQgb25Qb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpOworICAgICAgICB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpOworICAgICAgICB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gaW5mbyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQW4gYWJzdHJhY3QgY2xhc3Mgd2hpY2ggY2FuIGJlIHVzZWQgYXMgYSBzdGFydCBmb3IgRGF0ZVBpY2tlciBpbXBsZW1lbnRhdGlvbnMKKyAgICAgKi8KKyAgICBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgQWJzdHJhY3RUaW1lUGlja2VyRGVsZWdhdGUgaW1wbGVtZW50cyBEYXRlUGlja2VyRGVsZWdhdGUgeworICAgICAgICAvLyBUaGUgZGVsZWdhdG9yCisgICAgICAgIHByb3RlY3RlZCBEYXRlUGlja2VyIG1EZWxlZ2F0b3I7CisKKyAgICAgICAgLy8gVGhlIGNvbnRleHQKKyAgICAgICAgcHJvdGVjdGVkIENvbnRleHQgbUNvbnRleHQ7CisKKyAgICAgICAgLy8gVGhlIGN1cnJlbnQgbG9jYWxlCisgICAgICAgIHByb3RlY3RlZCBMb2NhbGUgbUN1cnJlbnRMb2NhbGU7CisKKyAgICAgICAgLy8gQ2FsbGJhY2tzCisgICAgICAgIHByb3RlY3RlZCAgT25EYXRlQ2hhbmdlZExpc3RlbmVyIG1PbkRhdGVDaGFuZ2VkTGlzdGVuZXI7CisKKyAgICAgICAgcHVibGljIEFic3RyYWN0VGltZVBpY2tlckRlbGVnYXRlKERhdGVQaWNrZXIgZGVsZWdhdG9yLCBDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgIG1EZWxlZ2F0b3IgPSBkZWxlZ2F0b3I7CisgICAgICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisKKyAgICAgICAgICAgIC8vIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIGxvY2FsZQorICAgICAgICAgICAgc2V0Q3VycmVudExvY2FsZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHByb3RlY3RlZCB2b2lkIHNldEN1cnJlbnRMb2NhbGUoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICAgICAgaWYgKGxvY2FsZS5lcXVhbHMobUN1cnJlbnRMb2NhbGUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUN1cnJlbnRMb2NhbGUgPSBsb2NhbGU7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlSW5wdXRTdGF0ZSgpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgaWYgdGhlIHVzZXIgY2hhbmdlcyB0aGUgdmFsdWUgYW5kIHRoZSBJTUUgaXMgYWN0aXZlCi0gICAgICAgIC8vIGZvciBvbmUgb2YgdGhlIGlucHV0cyBpZiB0aGlzIHdpZGdldCwgdGhlIElNRSBpcyBjbG9zZWQuIElmIHRoZSB1c2VyCi0gICAgICAgIC8vIGNoYW5nZWQgdGhlIHZhbHVlIHZpYSB0aGUgSU1FIGFuZCB0aGVyZSBpcyBhIG5leHQgaW5wdXQgdGhlIElNRSB3aWxsCi0gICAgICAgIC8vIGJlIHNob3duLCBvdGhlcndpc2UgdGhlIHVzZXIgY2hvc2UgYW5vdGhlciBtZWFucyBvZiBjaGFuZ2luZyB0aGUKLSAgICAgICAgLy8gdmFsdWUgYW5kIGhhdmluZyB0aGUgSU1FIHVwIG1ha2VzIG5vIHNlbnNlLgotICAgICAgICBJbnB1dE1ldGhvZE1hbmFnZXIgaW5wdXRNZXRob2RNYW5hZ2VyID0gSW5wdXRNZXRob2RNYW5hZ2VyLnBlZWtJbnN0YW5jZSgpOwotICAgICAgICBpZiAoaW5wdXRNZXRob2RNYW5hZ2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChpbnB1dE1ldGhvZE1hbmFnZXIuaXNBY3RpdmUobVllYXJTcGlubmVySW5wdXQpKSB7Ci0gICAgICAgICAgICAgICAgbVllYXJTcGlubmVySW5wdXQuY2xlYXJGb2N1cygpOwotICAgICAgICAgICAgICAgIGlucHV0TWV0aG9kTWFuYWdlci5oaWRlU29mdElucHV0RnJvbVdpbmRvdyhnZXRXaW5kb3dUb2tlbigpLCAwKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRNZXRob2RNYW5hZ2VyLmlzQWN0aXZlKG1Nb250aFNwaW5uZXJJbnB1dCkpIHsKLSAgICAgICAgICAgICAgICBtTW9udGhTcGlubmVySW5wdXQuY2xlYXJGb2N1cygpOwotICAgICAgICAgICAgICAgIGlucHV0TWV0aG9kTWFuYWdlci5oaWRlU29mdElucHV0RnJvbVdpbmRvdyhnZXRXaW5kb3dUb2tlbigpLCAwKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRNZXRob2RNYW5hZ2VyLmlzQWN0aXZlKG1EYXlTcGlubmVySW5wdXQpKSB7Ci0gICAgICAgICAgICAgICAgbURheVNwaW5uZXJJbnB1dC5jbGVhckZvY3VzKCk7Ci0gICAgICAgICAgICAgICAgaW5wdXRNZXRob2RNYW5hZ2VyLmhpZGVTb2Z0SW5wdXRGcm9tV2luZG93KGdldFdpbmRvd1Rva2VuKCksIDApOworICAgIC8qKgorICAgICAqIEEgZGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBiYXNpYyBEYXRlUGlja2VyCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTGVnYWN5RGF0ZVBpY2tlckRlbGVnYXRlIGV4dGVuZHMgQWJzdHJhY3RUaW1lUGlja2VyRGVsZWdhdGUgeworCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRFX0ZPUk1BVCA9ICJNTS9kZC95eXl5IjsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9TVEFSVF9ZRUFSID0gMTkwMDsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9FTkRfWUVBUiA9IDIxMDA7CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX0NBTEVOREFSX1ZJRVdfU0hPV04gPSB0cnVlOworCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9TUElOTkVSU19TSE9XTiA9IHRydWU7CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX0VOQUJMRURfU1RBVEUgPSB0cnVlOworCisgICAgICAgIHByaXZhdGUgZmluYWwgTGluZWFyTGF5b3V0IG1TcGlubmVyczsKKworICAgICAgICBwcml2YXRlIGZpbmFsIE51bWJlclBpY2tlciBtRGF5U3Bpbm5lcjsKKworICAgICAgICBwcml2YXRlIGZpbmFsIE51bWJlclBpY2tlciBtTW9udGhTcGlubmVyOworCisgICAgICAgIHByaXZhdGUgZmluYWwgTnVtYmVyUGlja2VyIG1ZZWFyU3Bpbm5lcjsKKworICAgICAgICBwcml2YXRlIGZpbmFsIEVkaXRUZXh0IG1EYXlTcGlubmVySW5wdXQ7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBFZGl0VGV4dCBtTW9udGhTcGlubmVySW5wdXQ7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBFZGl0VGV4dCBtWWVhclNwaW5uZXJJbnB1dDsKKworICAgICAgICBwcml2YXRlIGZpbmFsIENhbGVuZGFyVmlldyBtQ2FsZW5kYXJWaWV3OworCisgICAgICAgIHByaXZhdGUgU3RyaW5nW10gbVNob3J0TW9udGhzOworCisgICAgICAgIHByaXZhdGUgZmluYWwgamF2YS50ZXh0LkRhdGVGb3JtYXQgbURhdGVGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChEQVRFX0ZPUk1BVCk7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgbU51bWJlck9mTW9udGhzOworCisgICAgICAgIHByaXZhdGUgQ2FsZW5kYXIgbVRlbXBEYXRlOworCisgICAgICAgIHByaXZhdGUgQ2FsZW5kYXIgbU1pbkRhdGU7CisKKyAgICAgICAgcHJpdmF0ZSBDYWxlbmRhciBtTWF4RGF0ZTsKKworICAgICAgICBwcml2YXRlIENhbGVuZGFyIG1DdXJyZW50RGF0ZTsKKworICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUlzRW5hYmxlZCA9IERFRkFVTFRfRU5BQkxFRF9TVEFURTsKKworICAgICAgICBMZWdhY3lEYXRlUGlja2VyRGVsZWdhdGUoRGF0ZVBpY2tlciBkZWxlZ2F0b3IsIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLAorICAgICAgICAgICAgICAgIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICAgICAgc3VwZXIoZGVsZWdhdG9yLCBjb250ZXh0KTsKKworICAgICAgICAgICAgbURlbGVnYXRvciA9IGRlbGVnYXRvcjsKKyAgICAgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKworICAgICAgICAgICAgLy8gaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gbG9jYWxlCisgICAgICAgICAgICBzZXRDdXJyZW50TG9jYWxlKExvY2FsZS5nZXREZWZhdWx0KCkpOworCisgICAgICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGF0dHJpYnV0ZXNBcnJheSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuRGF0ZVBpY2tlciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisgICAgICAgICAgICBib29sZWFuIHNwaW5uZXJzU2hvd24gPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5EYXRlUGlja2VyX3NwaW5uZXJzU2hvd24sCisgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfU1BJTk5FUlNfU0hPV04pOworICAgICAgICAgICAgYm9vbGVhbiBjYWxlbmRhclZpZXdTaG93biA9IGF0dHJpYnV0ZXNBcnJheS5nZXRCb29sZWFuKAorICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5EYXRlUGlja2VyX2NhbGVuZGFyVmlld1Nob3duLCBERUZBVUxUX0NBTEVOREFSX1ZJRVdfU0hPV04pOworICAgICAgICAgICAgaW50IHN0YXJ0WWVhciA9IGF0dHJpYnV0ZXNBcnJheS5nZXRJbnQoUi5zdHlsZWFibGUuRGF0ZVBpY2tlcl9zdGFydFllYXIsCisgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfU1RBUlRfWUVBUik7CisgICAgICAgICAgICBpbnQgZW5kWWVhciA9IGF0dHJpYnV0ZXNBcnJheS5nZXRJbnQoUi5zdHlsZWFibGUuRGF0ZVBpY2tlcl9lbmRZZWFyLCBERUZBVUxUX0VORF9ZRUFSKTsKKyAgICAgICAgICAgIFN0cmluZyBtaW5EYXRlID0gYXR0cmlidXRlc0FycmF5LmdldFN0cmluZyhSLnN0eWxlYWJsZS5EYXRlUGlja2VyX21pbkRhdGUpOworICAgICAgICAgICAgU3RyaW5nIG1heERhdGUgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLkRhdGVQaWNrZXJfbWF4RGF0ZSk7CisgICAgICAgICAgICBpbnQgbGF5b3V0UmVzb3VyY2VJZCA9IGF0dHJpYnV0ZXNBcnJheS5nZXRSZXNvdXJjZUlkKAorICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5EYXRlUGlja2VyX2ludGVybmFsTGF5b3V0LCBSLmxheW91dC5kYXRlX3BpY2tlcik7CisgICAgICAgICAgICBhdHRyaWJ1dGVzQXJyYXkucmVjeWNsZSgpOworCisgICAgICAgICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IChMYXlvdXRJbmZsYXRlcikgY29udGV4dAorICAgICAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkxBWU9VVF9JTkZMQVRFUl9TRVJWSUNFKTsKKyAgICAgICAgICAgIGluZmxhdGVyLmluZmxhdGUobGF5b3V0UmVzb3VyY2VJZCwgbURlbGVnYXRvciwgdHJ1ZSk7CisKKyAgICAgICAgICAgIE9uVmFsdWVDaGFuZ2VMaXN0ZW5lciBvbkNoYW5nZUxpc3RlbmVyID0gbmV3IE9uVmFsdWVDaGFuZ2VMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblZhbHVlQ2hhbmdlKE51bWJlclBpY2tlciBwaWNrZXIsIGludCBvbGRWYWwsIGludCBuZXdWYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlSW5wdXRTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuc2V0VGltZUluTWlsbGlzKG1DdXJyZW50RGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICAgICAgICAgIC8vIHRha2UgY2FyZSBvZiB3cmFwcGluZyBvZiBkYXlzIGFuZCBtb250aHMgdG8gdXBkYXRlIGdyZWF0ZXIgZmllbGRzCisgICAgICAgICAgICAgICAgICAgIGlmIChwaWNrZXIgPT0gbURheVNwaW5uZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhEYXlPZk1vbnRoID0gbVRlbXBEYXRlLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRWYWwgPT0gbWF4RGF5T2ZNb250aCAmJiBuZXdWYWwgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuREFZX09GX01PTlRILCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2xkVmFsID09IDEgJiYgbmV3VmFsID09IG1heERheU9mTW9udGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLkRBWV9PRl9NT05USCwgLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLkRBWV9PRl9NT05USCwgbmV3VmFsIC0gb2xkVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwaWNrZXIgPT0gbU1vbnRoU3Bpbm5lcikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFZhbCA9PSAxMSAmJiBuZXdWYWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuTU9OVEgsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvbGRWYWwgPT0gMCAmJiBuZXdWYWwgPT0gMTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGVtcERhdGUuYWRkKENhbGVuZGFyLk1PTlRILCAtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5hZGQoQ2FsZW5kYXIuTU9OVEgsIG5ld1ZhbCAtIG9sZFZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGlja2VyID09IG1ZZWFyU3Bpbm5lcikgeworICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLnNldChDYWxlbmRhci5ZRUFSLCBuZXdWYWwpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIG5vdyBzZXQgdGhlIGRhdGUgdG8gdGhlIGFkanVzdGVkIG9uZQorICAgICAgICAgICAgICAgICAgICBzZXREYXRlKG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUiksIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVNwaW5uZXJzKCk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNhbGVuZGFyVmlldygpOworICAgICAgICAgICAgICAgICAgICBub3RpZnlEYXRlQ2hhbmdlZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIG1TcGlubmVycyA9IChMaW5lYXJMYXlvdXQpIG1EZWxlZ2F0b3IuZmluZFZpZXdCeUlkKFIuaWQucGlja2Vycyk7CisKKyAgICAgICAgICAgIC8vIGNhbGVuZGFyIHZpZXcgZGF5LXBpY2tlcgorICAgICAgICAgICAgbUNhbGVuZGFyVmlldyA9IChDYWxlbmRhclZpZXcpIG1EZWxlZ2F0b3IuZmluZFZpZXdCeUlkKFIuaWQuY2FsZW5kYXJfdmlldyk7CisgICAgICAgICAgICBtQ2FsZW5kYXJWaWV3LnNldE9uRGF0ZUNoYW5nZUxpc3RlbmVyKG5ldyBDYWxlbmRhclZpZXcuT25EYXRlQ2hhbmdlTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZWxlY3RlZERheUNoYW5nZShDYWxlbmRhclZpZXcgdmlldywgaW50IHllYXIsIGludCBtb250aCwgaW50IG1vbnRoRGF5KSB7CisgICAgICAgICAgICAgICAgICAgIHNldERhdGUoeWVhciwgbW9udGgsIG1vbnRoRGF5KTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3Bpbm5lcnMoKTsKKyAgICAgICAgICAgICAgICAgICAgbm90aWZ5RGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gZGF5CisgICAgICAgICAgICBtRGF5U3Bpbm5lciA9IChOdW1iZXJQaWNrZXIpIG1EZWxlZ2F0b3IuZmluZFZpZXdCeUlkKFIuaWQuZGF5KTsKKyAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldEZvcm1hdHRlcihOdW1iZXJQaWNrZXIuZ2V0VHdvRGlnaXRGb3JtYXR0ZXIoKSk7CisgICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRPbkxvbmdQcmVzc1VwZGF0ZUludGVydmFsKDEwMCk7CisgICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRPblZhbHVlQ2hhbmdlZExpc3RlbmVyKG9uQ2hhbmdlTGlzdGVuZXIpOworICAgICAgICAgICAgbURheVNwaW5uZXJJbnB1dCA9IChFZGl0VGV4dCkgbURheVNwaW5uZXIuZmluZFZpZXdCeUlkKFIuaWQubnVtYmVycGlja2VyX2lucHV0KTsKKworICAgICAgICAgICAgLy8gbW9udGgKKyAgICAgICAgICAgIG1Nb250aFNwaW5uZXIgPSAoTnVtYmVyUGlja2VyKSBtRGVsZWdhdG9yLmZpbmRWaWV3QnlJZChSLmlkLm1vbnRoKTsKKyAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0TWluVmFsdWUoMCk7CisgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldE1heFZhbHVlKG1OdW1iZXJPZk1vbnRocyAtIDEpOworICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXREaXNwbGF5ZWRWYWx1ZXMobVNob3J0TW9udGhzKTsKKyAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0T25Mb25nUHJlc3NVcGRhdGVJbnRlcnZhbCgyMDApOworICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRPblZhbHVlQ2hhbmdlZExpc3RlbmVyKG9uQ2hhbmdlTGlzdGVuZXIpOworICAgICAgICAgICAgbU1vbnRoU3Bpbm5lcklucHV0ID0gKEVkaXRUZXh0KSBtTW9udGhTcGlubmVyLmZpbmRWaWV3QnlJZChSLmlkLm51bWJlcnBpY2tlcl9pbnB1dCk7CisKKyAgICAgICAgICAgIC8vIHllYXIKKyAgICAgICAgICAgIG1ZZWFyU3Bpbm5lciA9IChOdW1iZXJQaWNrZXIpIG1EZWxlZ2F0b3IuZmluZFZpZXdCeUlkKFIuaWQueWVhcik7CisgICAgICAgICAgICBtWWVhclNwaW5uZXIuc2V0T25Mb25nUHJlc3NVcGRhdGVJbnRlcnZhbCgxMDApOworICAgICAgICAgICAgbVllYXJTcGlubmVyLnNldE9uVmFsdWVDaGFuZ2VkTGlzdGVuZXIob25DaGFuZ2VMaXN0ZW5lcik7CisgICAgICAgICAgICBtWWVhclNwaW5uZXJJbnB1dCA9IChFZGl0VGV4dCkgbVllYXJTcGlubmVyLmZpbmRWaWV3QnlJZChSLmlkLm51bWJlcnBpY2tlcl9pbnB1dCk7CisKKyAgICAgICAgICAgIC8vIHNob3cgb25seSB3aGF0IHRoZSB1c2VyIHJlcXVpcmVkIGJ1dCBtYWtlIHN1cmUgd2UKKyAgICAgICAgICAgIC8vIHNob3cgc29tZXRoaW5nIGFuZCB0aGUgc3Bpbm5lcnMgaGF2ZSBoaWdoZXIgcHJpb3JpdHkKKyAgICAgICAgICAgIGlmICghc3Bpbm5lcnNTaG93biAmJiAhY2FsZW5kYXJWaWV3U2hvd24pIHsKKyAgICAgICAgICAgICAgICBzZXRTcGlubmVyc1Nob3duKHRydWUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZXRTcGlubmVyc1Nob3duKHNwaW5uZXJzU2hvd24pOworICAgICAgICAgICAgICAgIHNldENhbGVuZGFyVmlld1Nob3duKGNhbGVuZGFyVmlld1Nob3duKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gc2V0IHRoZSBtaW4gZGF0ZSBnaXZpbmcgcHJpb3JpdHkgb2YgdGhlIG1pbkRhdGUgb3ZlciBzdGFydFllYXIKKyAgICAgICAgICAgIG1UZW1wRGF0ZS5jbGVhcigpOworICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShtaW5EYXRlKSkgeworICAgICAgICAgICAgICAgIGlmICghcGFyc2VEYXRlKG1pbkRhdGUsIG1UZW1wRGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLnNldChzdGFydFllYXIsIDAsIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVRlbXBEYXRlLnNldChzdGFydFllYXIsIDAsIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0TWluRGF0ZShtVGVtcERhdGUuZ2V0VGltZUluTWlsbGlzKCkpOworCisgICAgICAgICAgICAvLyBzZXQgdGhlIG1heCBkYXRlIGdpdmluZyBwcmlvcml0eSBvZiB0aGUgbWF4RGF0ZSBvdmVyIGVuZFllYXIKKyAgICAgICAgICAgIG1UZW1wRGF0ZS5jbGVhcigpOworICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShtYXhEYXRlKSkgeworICAgICAgICAgICAgICAgIGlmICghcGFyc2VEYXRlKG1heERhdGUsIG1UZW1wRGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbVRlbXBEYXRlLnNldChlbmRZZWFyLCAxMSwgMzEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVRlbXBEYXRlLnNldChlbmRZZWFyLCAxMSwgMzEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0TWF4RGF0ZShtVGVtcERhdGUuZ2V0VGltZUluTWlsbGlzKCkpOworCisgICAgICAgICAgICAvLyBpbml0aWFsaXplIHRvIGN1cnJlbnQgZGF0ZQorICAgICAgICAgICAgbUN1cnJlbnREYXRlLnNldFRpbWVJbk1pbGxpcyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CisgICAgICAgICAgICBpbml0KG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUiksIG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpLCBtQ3VycmVudERhdGUKKyAgICAgICAgICAgICAgICAgICAgLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpLCBudWxsKTsKKworICAgICAgICAgICAgLy8gcmUtb3JkZXIgdGhlIG51bWJlciBzcGlubmVycyB0byBtYXRjaCB0aGUgY3VycmVudCBkYXRlIGZvcm1hdAorICAgICAgICAgICAgcmVvcmRlclNwaW5uZXJzKCk7CisKKyAgICAgICAgICAgIC8vIGFjY2Vzc2liaWxpdHkKKyAgICAgICAgICAgIHNldENvbnRlbnREZXNjcmlwdGlvbnMoKTsKKworICAgICAgICAgICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIHRoaXMgdmlldyBpcyBpbXBvcnRhbnQgZm9yIGFjY2Vzc2liaWxpdHkuCisgICAgICAgICAgICBpZiAobURlbGVnYXRvci5nZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KCkgPT0gSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX0FVVE8pIHsKKyAgICAgICAgICAgICAgICBtRGVsZWdhdG9yLnNldEltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkoSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX1lFUyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgaW5pdChpbnQgeWVhciwgaW50IG1vbnRoT2ZZZWFyLCBpbnQgZGF5T2ZNb250aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBPbkRhdGVDaGFuZ2VkTGlzdGVuZXIgb25EYXRlQ2hhbmdlZExpc3RlbmVyKSB7CisgICAgICAgICAgICBzZXREYXRlKHllYXIsIG1vbnRoT2ZZZWFyLCBkYXlPZk1vbnRoKTsKKyAgICAgICAgICAgIHVwZGF0ZVNwaW5uZXJzKCk7CisgICAgICAgICAgICB1cGRhdGVDYWxlbmRhclZpZXcoKTsKKyAgICAgICAgICAgIG1PbkRhdGVDaGFuZ2VkTGlzdGVuZXIgPSBvbkRhdGVDaGFuZ2VkTGlzdGVuZXI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlRGF0ZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5T2ZNb250aCkgeworICAgICAgICAgICAgaWYgKCFpc05ld0RhdGUoeWVhciwgbW9udGgsIGRheU9mTW9udGgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0RGF0ZSh5ZWFyLCBtb250aCwgZGF5T2ZNb250aCk7CisgICAgICAgICAgICB1cGRhdGVTcGlubmVycygpOworICAgICAgICAgICAgdXBkYXRlQ2FsZW5kYXJWaWV3KCk7CisgICAgICAgICAgICBub3RpZnlEYXRlQ2hhbmdlZCgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0WWVhcigpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLllFQVIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0TW9udGgoKSB7CisgICAgICAgICAgICByZXR1cm4gbUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5NT05USCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBnZXREYXlPZk1vbnRoKCkgeworICAgICAgICAgICAgcmV0dXJuIG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRNaW5EYXRlKGxvbmcgbWluRGF0ZSkgeworICAgICAgICAgICAgbVRlbXBEYXRlLnNldFRpbWVJbk1pbGxpcyhtaW5EYXRlKTsKKyAgICAgICAgICAgIGlmIChtVGVtcERhdGUuZ2V0KENhbGVuZGFyLllFQVIpID09IG1NaW5EYXRlLmdldChDYWxlbmRhci5ZRUFSKQorICAgICAgICAgICAgICAgICAgICAmJiBtVGVtcERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSAhPSBtTWluRGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX1lFQVIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbU1pbkRhdGUuc2V0VGltZUluTWlsbGlzKG1pbkRhdGUpOworICAgICAgICAgICAgbUNhbGVuZGFyVmlldy5zZXRNaW5EYXRlKG1pbkRhdGUpOworICAgICAgICAgICAgaWYgKG1DdXJyZW50RGF0ZS5iZWZvcmUobU1pbkRhdGUpKSB7CisgICAgICAgICAgICAgICAgbUN1cnJlbnREYXRlLnNldFRpbWVJbk1pbGxpcyhtTWluRGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICAgICAgdXBkYXRlQ2FsZW5kYXJWaWV3KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1cGRhdGVTcGlubmVycygpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBsb25nIGdldE1pbkRhdGUoKSB7CisgICAgICAgICAgICByZXR1cm4gbUNhbGVuZGFyVmlldy5nZXRNaW5EYXRlKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0TWF4RGF0ZShsb25nIG1heERhdGUpIHsKKyAgICAgICAgICAgIG1UZW1wRGF0ZS5zZXRUaW1lSW5NaWxsaXMobWF4RGF0ZSk7CisgICAgICAgICAgICBpZiAobVRlbXBEYXRlLmdldChDYWxlbmRhci5ZRUFSKSA9PSBtTWF4RGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikKKyAgICAgICAgICAgICAgICAgICAgJiYgbVRlbXBEYXRlLmdldChDYWxlbmRhci5EQVlfT0ZfWUVBUikgIT0gbU1heERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1NYXhEYXRlLnNldFRpbWVJbk1pbGxpcyhtYXhEYXRlKTsKKyAgICAgICAgICAgIG1DYWxlbmRhclZpZXcuc2V0TWF4RGF0ZShtYXhEYXRlKTsKKyAgICAgICAgICAgIGlmIChtQ3VycmVudERhdGUuYWZ0ZXIobU1heERhdGUpKSB7CisgICAgICAgICAgICAgICAgbUN1cnJlbnREYXRlLnNldFRpbWVJbk1pbGxpcyhtTWF4RGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICAgICAgdXBkYXRlQ2FsZW5kYXJWaWV3KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1cGRhdGVTcGlubmVycygpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBsb25nIGdldE1heERhdGUoKSB7CisgICAgICAgICAgICByZXR1cm4gbUNhbGVuZGFyVmlldy5nZXRNYXhEYXRlKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgICAgICAgICBtWWVhclNwaW5uZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgICAgIG1DYWxlbmRhclZpZXcuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgICAgIG1Jc0VuYWJsZWQgPSBlbmFibGVkOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtSXNFbmFibGVkOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBDYWxlbmRhclZpZXcgZ2V0Q2FsZW5kYXJWaWV3KCkgeworICAgICAgICAgICAgcmV0dXJuIG1DYWxlbmRhclZpZXc7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0Q2FsZW5kYXJWaWV3U2hvd24oYm9vbGVhbiBzaG93bikgeworICAgICAgICAgICAgbUNhbGVuZGFyVmlldy5zZXRWaXNpYmlsaXR5KHNob3duID8gVklTSUJMRSA6IEdPTkUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGdldENhbGVuZGFyVmlld1Nob3duKCkgeworICAgICAgICAgICAgcmV0dXJuIChtQ2FsZW5kYXJWaWV3LmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LlZJU0lCTEUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNldFNwaW5uZXJzU2hvd24oYm9vbGVhbiBzaG93bikgeworICAgICAgICAgICAgbVNwaW5uZXJzLnNldFZpc2liaWxpdHkoc2hvd24gPyBWSVNJQkxFIDogR09ORSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZ2V0U3Bpbm5lcnNTaG93bigpIHsKKyAgICAgICAgICAgIHJldHVybiBtU3Bpbm5lcnMuaXNTaG93bigpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQoQ29uZmlndXJhdGlvbiBuZXdDb25maWcpIHsKKyAgICAgICAgICAgIHNldEN1cnJlbnRMb2NhbGUobmV3Q29uZmlnLmxvY2FsZSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hSZXN0b3JlSW5zdGFuY2VTdGF0ZShTcGFyc2VBcnJheTxQYXJjZWxhYmxlPiBjb250YWluZXIpIHsKKyAgICAgICAgICAgIG1EZWxlZ2F0b3IuZGlzcGF0Y2hUaGF3U2VsZk9ubHkoY29udGFpbmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgUGFyY2VsYWJsZSBvblNhdmVJbnN0YW5jZVN0YXRlKFBhcmNlbGFibGUgc3VwZXJTdGF0ZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBTYXZlZFN0YXRlKHN1cGVyU3RhdGUsIGdldFllYXIoKSwgZ2V0TW9udGgoKSwgZ2V0RGF5T2ZNb250aCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblJlc3RvcmVJbnN0YW5jZVN0YXRlKFBhcmNlbGFibGUgc3RhdGUpIHsKKyAgICAgICAgICAgIFNhdmVkU3RhdGUgc3MgPSAoU2F2ZWRTdGF0ZSkgc3RhdGU7CisgICAgICAgICAgICBzZXREYXRlKHNzLm1ZZWFyLCBzcy5tTW9udGgsIHNzLm1EYXkpOworICAgICAgICAgICAgdXBkYXRlU3Bpbm5lcnMoKTsKKyAgICAgICAgICAgIHVwZGF0ZUNhbGVuZGFyVmlldygpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CisgICAgICAgICAgICBvblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBEYXRlVXRpbHMuRk9STUFUX1NIT1dfREFURSB8IERhdGVVdGlscy5GT1JNQVRfU0hPV19ZRUFSOworICAgICAgICAgICAgU3RyaW5nIHNlbGVjdGVkRGF0ZVV0dGVyYW5jZSA9IERhdGVVdGlscy5mb3JtYXREYXRlVGltZShtQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnREYXRlLmdldFRpbWVJbk1pbGxpcygpLCBmbGFncyk7CisgICAgICAgICAgICBldmVudC5nZXRUZXh0KCkuYWRkKHNlbGVjdGVkRGF0ZVV0dGVyYW5jZSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgICAgICAgICAgZXZlbnQuc2V0Q2xhc3NOYW1lKERhdGVQaWNrZXIuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGluZm8pIHsKKyAgICAgICAgICAgIGluZm8uc2V0Q2xhc3NOYW1lKERhdGVQaWNrZXIuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGxvY2FsZS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGxvY2FsZSBUaGUgY3VycmVudCBsb2NhbGUuCisgICAgICAgICAqLworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgc2V0Q3VycmVudExvY2FsZShMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgICAgICBzdXBlci5zZXRDdXJyZW50TG9jYWxlKGxvY2FsZSk7CisKKyAgICAgICAgICAgIG1UZW1wRGF0ZSA9IGdldENhbGVuZGFyRm9yTG9jYWxlKG1UZW1wRGF0ZSwgbG9jYWxlKTsKKyAgICAgICAgICAgIG1NaW5EYXRlID0gZ2V0Q2FsZW5kYXJGb3JMb2NhbGUobU1pbkRhdGUsIGxvY2FsZSk7CisgICAgICAgICAgICBtTWF4RGF0ZSA9IGdldENhbGVuZGFyRm9yTG9jYWxlKG1NYXhEYXRlLCBsb2NhbGUpOworICAgICAgICAgICAgbUN1cnJlbnREYXRlID0gZ2V0Q2FsZW5kYXJGb3JMb2NhbGUobUN1cnJlbnREYXRlLCBsb2NhbGUpOworCisgICAgICAgICAgICBtTnVtYmVyT2ZNb250aHMgPSBtVGVtcERhdGUuZ2V0QWN0dWFsTWF4aW11bShDYWxlbmRhci5NT05USCkgKyAxOworICAgICAgICAgICAgbVNob3J0TW9udGhzID0gbmV3IERhdGVGb3JtYXRTeW1ib2xzKCkuZ2V0U2hvcnRNb250aHMoKTsKKworICAgICAgICAgICAgaWYgKHVzaW5nTnVtZXJpY01vbnRocygpKSB7CisgICAgICAgICAgICAgICAgLy8gV2UncmUgaW4gYSBsb2NhbGUgd2hlcmUgYSBkYXRlIHNob3VsZCBlaXRoZXIgYmUgYWxsLW51bWVyaWMsIG9yIGFsbC10ZXh0LgorICAgICAgICAgICAgICAgIC8vIEFsbC10ZXh0IHdvdWxkIHJlcXVpcmUgY3VzdG9tIE51bWJlclBpY2tlciBmb3JtYXR0ZXJzIGZvciBkYXkgYW5kIHllYXIuCisgICAgICAgICAgICAgICAgbVNob3J0TW9udGhzID0gbmV3IFN0cmluZ1ttTnVtYmVyT2ZNb250aHNdOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU51bWJlck9mTW9udGhzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgbVNob3J0TW9udGhzW2ldID0gU3RyaW5nLmZvcm1hdCgiJWQiLCBpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRlc3RzIHdoZXRoZXIgdGhlIGN1cnJlbnQgbG9jYWxlIGlzIG9uZSB3aGVyZSB0aGVyZSBhcmUgbm8gcmVhbCBtb250aCBuYW1lcywKKyAgICAgICAgICogc3VjaCBhcyBDaGluZXNlLCBKYXBhbmVzZSwgb3IgS29yZWFuIGxvY2FsZXMuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGJvb2xlYW4gdXNpbmdOdW1lcmljTW9udGhzKCkgeworICAgICAgICAgICAgcmV0dXJuIENoYXJhY3Rlci5pc0RpZ2l0KG1TaG9ydE1vbnRoc1tDYWxlbmRhci5KQU5VQVJZXS5jaGFyQXQoMCkpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldHMgYSBjYWxlbmRhciBmb3IgbG9jYWxlIGJvb3RzdHJhcHBlZCB3aXRoIHRoZSB2YWx1ZSBvZiBhIGdpdmVuIGNhbGVuZGFyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gb2xkQ2FsZW5kYXIgVGhlIG9sZCBjYWxlbmRhci4KKyAgICAgICAgICogQHBhcmFtIGxvY2FsZSBUaGUgbG9jYWxlLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBDYWxlbmRhciBnZXRDYWxlbmRhckZvckxvY2FsZShDYWxlbmRhciBvbGRDYWxlbmRhciwgTG9jYWxlIGxvY2FsZSkgeworICAgICAgICAgICAgaWYgKG9sZENhbGVuZGFyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UobG9jYWxlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBjdXJyZW50VGltZU1pbGxpcyA9IG9sZENhbGVuZGFyLmdldFRpbWVJbk1pbGxpcygpOworICAgICAgICAgICAgICAgIENhbGVuZGFyIG5ld0NhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UobG9jYWxlKTsKKyAgICAgICAgICAgICAgICBuZXdDYWxlbmRhci5zZXRUaW1lSW5NaWxsaXMoY3VycmVudFRpbWVNaWxsaXMpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXdDYWxlbmRhcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZW9yZGVycyB0aGUgc3Bpbm5lcnMgYWNjb3JkaW5nIHRvIHRoZSBkYXRlIGZvcm1hdCB0aGF0IGlzCisgICAgICAgICAqIGV4cGxpY2l0bHkgc2V0IGJ5IHRoZSB1c2VyIGFuZCBpZiBubyBzdWNoIGlzIHNldCBmYWxsIGJhY2sKKyAgICAgICAgICogdG8gdGhlIGN1cnJlbnQgbG9jYWxlJ3MgZGVmYXVsdCBmb3JtYXQuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgcmVvcmRlclNwaW5uZXJzKCkgeworICAgICAgICAgICAgbVNwaW5uZXJzLnJlbW92ZUFsbFZpZXdzKCk7CisgICAgICAgICAgICAvLyBXZSB1c2UgbnVtZXJpYyBzcGlubmVycyBmb3IgeWVhciBhbmQgZGF5LCBidXQgdGV4dHVhbCBtb250aHMuIEFzayBpY3U0YyB3aGF0CisgICAgICAgICAgICAvLyBvcmRlciB0aGUgdXNlcidzIGxvY2FsZSB1c2VzIGZvciB0aGF0IGNvbWJpbmF0aW9uLiBodHRwOi8vYi83MjA3MTAzLgorICAgICAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSBJQ1UuZ2V0QmVzdERhdGVUaW1lUGF0dGVybigieXl5eU1NTWRkIiwKKyAgICAgICAgICAgICAgICAgICAgTG9jYWxlLmdldERlZmF1bHQoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGNoYXJbXSBvcmRlciA9IElDVS5nZXREYXRlRm9ybWF0T3JkZXIocGF0dGVybik7CisgICAgICAgICAgICBmaW5hbCBpbnQgc3Bpbm5lckNvdW50ID0gb3JkZXIubGVuZ3RoOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcGlubmVyQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3JkZXJbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgICAgICAgICBtU3Bpbm5lcnMuYWRkVmlldyhtRGF5U3Bpbm5lcik7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbWVPcHRpb25zKG1EYXlTcGlubmVyLCBzcGlubmVyQ291bnQsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ00nOgorICAgICAgICAgICAgICAgICAgICAgICAgbVNwaW5uZXJzLmFkZFZpZXcobU1vbnRoU3Bpbm5lcik7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbWVPcHRpb25zKG1Nb250aFNwaW5uZXIsIHNwaW5uZXJDb3VudCwgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAneSc6CisgICAgICAgICAgICAgICAgICAgICAgICBtU3Bpbm5lcnMuYWRkVmlldyhtWWVhclNwaW5uZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW1lT3B0aW9ucyhtWWVhclNwaW5uZXIsIHNwaW5uZXJDb3VudCwgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oQXJyYXlzLnRvU3RyaW5nKG9yZGVyKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBhcnNlcyB0aGUgZ2l2ZW4gPGNvZGU+ZGF0ZTwvY29kZT4gYW5kIGluIGNhc2Ugb2Ygc3VjY2VzcyBzZXRzIHRoZSByZXN1bHQKKyAgICAgICAgICogdG8gdGhlIDxjb2RlPm91dERhdGU8L2NvZGU+LgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGRhdGUgd2FzIHBhcnNlZC4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBwYXJzZURhdGUoU3RyaW5nIGRhdGUsIENhbGVuZGFyIG91dERhdGUpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgb3V0RGF0ZS5zZXRUaW1lKG1EYXRlRm9ybWF0LnBhcnNlKGRhdGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhMT0dfVEFHLCAiRGF0ZTogIiArIGRhdGUgKyAiIG5vdCBpbiBmb3JtYXQ6ICIgKyBEQVRFX0ZPUk1BVCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIGlzTmV3RGF0ZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5T2ZNb250aCkgeworICAgICAgICAgICAgcmV0dXJuIChtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLllFQVIpICE9IHllYXIKKyAgICAgICAgICAgICAgICAgICAgfHwgbUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5NT05USCkgIT0gZGF5T2ZNb250aAorICAgICAgICAgICAgICAgICAgICB8fCBtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkgIT0gbW9udGgpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHNldERhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheU9mTW9udGgpIHsKKyAgICAgICAgICAgIG1DdXJyZW50RGF0ZS5zZXQoeWVhciwgbW9udGgsIGRheU9mTW9udGgpOworICAgICAgICAgICAgaWYgKG1DdXJyZW50RGF0ZS5iZWZvcmUobU1pbkRhdGUpKSB7CisgICAgICAgICAgICAgICAgbUN1cnJlbnREYXRlLnNldFRpbWVJbk1pbGxpcyhtTWluRGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1DdXJyZW50RGF0ZS5hZnRlcihtTWF4RGF0ZSkpIHsKKyAgICAgICAgICAgICAgICBtQ3VycmVudERhdGUuc2V0VGltZUluTWlsbGlzKG1NYXhEYXRlLmdldFRpbWVJbk1pbGxpcygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCB1cGRhdGVTcGlubmVycygpIHsKKyAgICAgICAgICAgIC8vIHNldCB0aGUgc3Bpbm5lciByYW5nZXMgcmVzcGVjdGluZyB0aGUgbWluIGFuZCBtYXggZGF0ZXMKKyAgICAgICAgICAgIGlmIChtQ3VycmVudERhdGUuZXF1YWxzKG1NaW5EYXRlKSkgeworICAgICAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldE1pblZhbHVlKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CisgICAgICAgICAgICAgICAgbURheVNwaW5uZXIuc2V0TWF4VmFsdWUobUN1cnJlbnREYXRlLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CisgICAgICAgICAgICAgICAgbURheVNwaW5uZXIuc2V0V3JhcFNlbGVjdG9yV2hlZWwoZmFsc2UpOworICAgICAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0RGlzcGxheWVkVmFsdWVzKG51bGwpOworICAgICAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0TWluVmFsdWUobUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5NT05USCkpOworICAgICAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0TWF4VmFsdWUobUN1cnJlbnREYXRlLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuTU9OVEgpKTsKKyAgICAgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldFdyYXBTZWxlY3RvcldoZWVsKGZhbHNlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobUN1cnJlbnREYXRlLmVxdWFscyhtTWF4RGF0ZSkpIHsKKyAgICAgICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRNaW5WYWx1ZShtQ3VycmVudERhdGUuZ2V0QWN0dWFsTWluaW11bShDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKKyAgICAgICAgICAgICAgICBtRGF5U3Bpbm5lci5zZXRNYXhWYWx1ZShtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkpOworICAgICAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldFdyYXBTZWxlY3RvcldoZWVsKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldERpc3BsYXllZFZhbHVlcyhudWxsKTsKKyAgICAgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldE1pblZhbHVlKG1DdXJyZW50RGF0ZS5nZXRBY3R1YWxNaW5pbXVtKENhbGVuZGFyLk1PTlRIKSk7CisgICAgICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRNYXhWYWx1ZShtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKSk7CisgICAgICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRXcmFwU2VsZWN0b3JXaGVlbChmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldE1pblZhbHVlKDEpOworICAgICAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldE1heFZhbHVlKG1DdXJyZW50RGF0ZS5nZXRBY3R1YWxNYXhpbXVtKENhbGVuZGFyLkRBWV9PRl9NT05USCkpOworICAgICAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldFdyYXBTZWxlY3RvcldoZWVsKHRydWUpOworICAgICAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0RGlzcGxheWVkVmFsdWVzKG51bGwpOworICAgICAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuc2V0TWluVmFsdWUoMCk7CisgICAgICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRNYXhWYWx1ZSgxMSk7CisgICAgICAgICAgICAgICAgbU1vbnRoU3Bpbm5lci5zZXRXcmFwU2VsZWN0b3JXaGVlbCh0cnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBtb250aCBuYW1lcyBhcmUgYSB6ZXJvIGJhc2VkIGFycmF5CisgICAgICAgICAgICAvLyB3aXRoIHRoZSBtb250aHMgaW4gdGhlIG1vbnRoIHNwaW5uZXIKKyAgICAgICAgICAgIFN0cmluZ1tdIGRpc3BsYXllZFZhbHVlcyA9IEFycmF5cy5jb3B5T2ZSYW5nZShtU2hvcnRNb250aHMsCisgICAgICAgICAgICAgICAgICAgIG1Nb250aFNwaW5uZXIuZ2V0TWluVmFsdWUoKSwgbU1vbnRoU3Bpbm5lci5nZXRNYXhWYWx1ZSgpICsgMSk7CisgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldERpc3BsYXllZFZhbHVlcyhkaXNwbGF5ZWRWYWx1ZXMpOworCisgICAgICAgICAgICAvLyB5ZWFyIHNwaW5uZXIgcmFuZ2UgZG9lcyBub3QgY2hhbmdlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRhdGUKKyAgICAgICAgICAgIG1ZZWFyU3Bpbm5lci5zZXRNaW5WYWx1ZShtTWluRGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikpOworICAgICAgICAgICAgbVllYXJTcGlubmVyLnNldE1heFZhbHVlKG1NYXhEYXRlLmdldChDYWxlbmRhci5ZRUFSKSk7CisgICAgICAgICAgICBtWWVhclNwaW5uZXIuc2V0V3JhcFNlbGVjdG9yV2hlZWwoZmFsc2UpOworCisgICAgICAgICAgICAvLyBzZXQgdGhlIHNwaW5uZXIgdmFsdWVzCisgICAgICAgICAgICBtWWVhclNwaW5uZXIuc2V0VmFsdWUobUN1cnJlbnREYXRlLmdldChDYWxlbmRhci5ZRUFSKSk7CisgICAgICAgICAgICBtTW9udGhTcGlubmVyLnNldFZhbHVlKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpKTsKKyAgICAgICAgICAgIG1EYXlTcGlubmVyLnNldFZhbHVlKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CisKKyAgICAgICAgICAgIGlmICh1c2luZ051bWVyaWNNb250aHMoKSkgeworICAgICAgICAgICAgICAgIG1Nb250aFNwaW5uZXJJbnB1dC5zZXRSYXdJbnB1dFR5cGUoSW5wdXRUeXBlLlRZUEVfQ0xBU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBVcGRhdGVzIHRoZSBjYWxlbmRhciB2aWV3IHdpdGggdGhlIGN1cnJlbnQgZGF0ZS4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCB1cGRhdGVDYWxlbmRhclZpZXcoKSB7CisgICAgICAgICAgICBtQ2FsZW5kYXJWaWV3LnNldERhdGUobUN1cnJlbnREYXRlLmdldFRpbWVJbk1pbGxpcygpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICB9CisKKworICAgICAgICAvKioKKyAgICAgICAgICogTm90aWZpZXMgdGhlIGxpc3RlbmVyLCBpZiBzdWNoLCBmb3IgYSBjaGFuZ2UgaW4gdGhlIHNlbGVjdGVkIGRhdGUuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgbm90aWZ5RGF0ZUNoYW5nZWQoKSB7CisgICAgICAgICAgICBtRGVsZWdhdG9yLnNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVklFV19TRUxFQ1RFRCk7CisgICAgICAgICAgICBpZiAobU9uRGF0ZUNoYW5nZWRMaXN0ZW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbU9uRGF0ZUNoYW5nZWRMaXN0ZW5lci5vbkRhdGVDaGFuZ2VkKG1EZWxlZ2F0b3IsIGdldFllYXIoKSwgZ2V0TW9udGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldERheU9mTW9udGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgSU1FIG9wdGlvbnMgZm9yIGEgc3Bpbm5lciBiYXNlZCBvbiBpdHMgb3JkZXJpbmcuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBzcGlubmVyIFRoZSBzcGlubmVyLgorICAgICAgICAgKiBAcGFyYW0gc3Bpbm5lckNvdW50IFRoZSB0b3RhbCBzcGlubmVyIGNvdW50LgorICAgICAgICAgKiBAcGFyYW0gc3Bpbm5lckluZGV4IFRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gc3Bpbm5lci4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCBzZXRJbWVPcHRpb25zKE51bWJlclBpY2tlciBzcGlubmVyLCBpbnQgc3Bpbm5lckNvdW50LCBpbnQgc3Bpbm5lckluZGV4KSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgaW1lT3B0aW9uczsKKyAgICAgICAgICAgIGlmIChzcGlubmVySW5kZXggPCBzcGlubmVyQ291bnQgLSAxKSB7CisgICAgICAgICAgICAgICAgaW1lT3B0aW9ucyA9IEVkaXRvckluZm8uSU1FX0FDVElPTl9ORVhUOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbWVPcHRpb25zID0gRWRpdG9ySW5mby5JTUVfQUNUSU9OX0RPTkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUZXh0VmlldyBpbnB1dCA9IChUZXh0Vmlldykgc3Bpbm5lci5maW5kVmlld0J5SWQoUi5pZC5udW1iZXJwaWNrZXJfaW5wdXQpOworICAgICAgICAgICAgaW5wdXQuc2V0SW1lT3B0aW9ucyhpbWVPcHRpb25zKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBzZXRDb250ZW50RGVzY3JpcHRpb25zKCkgeworICAgICAgICAgICAgLy8gRGF5CisgICAgICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obURheVNwaW5uZXIsIFIuaWQuaW5jcmVtZW50LAorICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5kYXRlX3BpY2tlcl9pbmNyZW1lbnRfZGF5X2J1dHRvbik7CisgICAgICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obURheVNwaW5uZXIsIFIuaWQuZGVjcmVtZW50LAorICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5kYXRlX3BpY2tlcl9kZWNyZW1lbnRfZGF5X2J1dHRvbik7CisgICAgICAgICAgICAvLyBNb250aAorICAgICAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1Nb250aFNwaW5uZXIsIFIuaWQuaW5jcmVtZW50LAorICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5kYXRlX3BpY2tlcl9pbmNyZW1lbnRfbW9udGhfYnV0dG9uKTsKKyAgICAgICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtTW9udGhTcGlubmVyLCBSLmlkLmRlY3JlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuZGF0ZV9waWNrZXJfZGVjcmVtZW50X21vbnRoX2J1dHRvbik7CisgICAgICAgICAgICAvLyBZZWFyCisgICAgICAgICAgICB0cnlTZXRDb250ZW50RGVzY3JpcHRpb24obVllYXJTcGlubmVyLCBSLmlkLmluY3JlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuZGF0ZV9waWNrZXJfaW5jcmVtZW50X3llYXJfYnV0dG9uKTsKKyAgICAgICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtWWVhclNwaW5uZXIsIFIuaWQuZGVjcmVtZW50LAorICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5kYXRlX3BpY2tlcl9kZWNyZW1lbnRfeWVhcl9idXR0b24pOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihWaWV3IHJvb3QsIGludCB2aWV3SWQsIGludCBjb250RGVzY1Jlc0lkKSB7CisgICAgICAgICAgICBWaWV3IHRhcmdldCA9IHJvb3QuZmluZFZpZXdCeUlkKHZpZXdJZCk7CisgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXQuc2V0Q29udGVudERlc2NyaXB0aW9uKG1Db250ZXh0LmdldFN0cmluZyhjb250RGVzY1Jlc0lkKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlSW5wdXRTdGF0ZSgpIHsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGlmIHRoZSB1c2VyIGNoYW5nZXMgdGhlIHZhbHVlIGFuZCB0aGUgSU1FIGlzIGFjdGl2ZQorICAgICAgICAgICAgLy8gZm9yIG9uZSBvZiB0aGUgaW5wdXRzIGlmIHRoaXMgd2lkZ2V0LCB0aGUgSU1FIGlzIGNsb3NlZC4gSWYgdGhlIHVzZXIKKyAgICAgICAgICAgIC8vIGNoYW5nZWQgdGhlIHZhbHVlIHZpYSB0aGUgSU1FIGFuZCB0aGVyZSBpcyBhIG5leHQgaW5wdXQgdGhlIElNRSB3aWxsCisgICAgICAgICAgICAvLyBiZSBzaG93biwgb3RoZXJ3aXNlIHRoZSB1c2VyIGNob3NlIGFub3RoZXIgbWVhbnMgb2YgY2hhbmdpbmcgdGhlCisgICAgICAgICAgICAvLyB2YWx1ZSBhbmQgaGF2aW5nIHRoZSBJTUUgdXAgbWFrZXMgbm8gc2Vuc2UuCisgICAgICAgICAgICBJbnB1dE1ldGhvZE1hbmFnZXIgaW5wdXRNZXRob2RNYW5hZ2VyID0gSW5wdXRNZXRob2RNYW5hZ2VyLnBlZWtJbnN0YW5jZSgpOworICAgICAgICAgICAgaWYgKGlucHV0TWV0aG9kTWFuYWdlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0TWV0aG9kTWFuYWdlci5pc0FjdGl2ZShtWWVhclNwaW5uZXJJbnB1dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbVllYXJTcGlubmVySW5wdXQuY2xlYXJGb2N1cygpOworICAgICAgICAgICAgICAgICAgICBpbnB1dE1ldGhvZE1hbmFnZXIuaGlkZVNvZnRJbnB1dEZyb21XaW5kb3cobURlbGVnYXRvci5nZXRXaW5kb3dUb2tlbigpLCAwKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0TWV0aG9kTWFuYWdlci5pc0FjdGl2ZShtTW9udGhTcGlubmVySW5wdXQpKSB7CisgICAgICAgICAgICAgICAgICAgIG1Nb250aFNwaW5uZXJJbnB1dC5jbGVhckZvY3VzKCk7CisgICAgICAgICAgICAgICAgICAgIGlucHV0TWV0aG9kTWFuYWdlci5oaWRlU29mdElucHV0RnJvbVdpbmRvdyhtRGVsZWdhdG9yLmdldFdpbmRvd1Rva2VuKCksIDApOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRNZXRob2RNYW5hZ2VyLmlzQWN0aXZlKG1EYXlTcGlubmVySW5wdXQpKSB7CisgICAgICAgICAgICAgICAgICAgIG1EYXlTcGlubmVySW5wdXQuY2xlYXJGb2N1cygpOworICAgICAgICAgICAgICAgICAgICBpbnB1dE1ldGhvZE1hbmFnZXIuaGlkZVNvZnRJbnB1dEZyb21XaW5kb3cobURlbGVnYXRvci5nZXRXaW5kb3dUb2tlbigpLCAwKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRGF0ZVRpbWVWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRGF0ZVRpbWVWaWV3LmphdmEKaW5kZXggYWY2YmJjYi4uNDVkMTQwMyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0RhdGVUaW1lVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9EYXRlVGltZVZpZXcuamF2YQpAQCAtMjcsMTIgKzI3LDkgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLlNldHRpbmdOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5SZW1vdGVWaWV3cy5SZW1vdGVWaWV3OwogCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKLQogaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0OwogaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwogaW1wb3J0IGphdmEudXRpbC5EYXRlOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0RpYWxlckZpbHRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0RpYWxlckZpbHRlci5qYXZhCmluZGV4IDIwYmMxMTQuLjc4Nzg2ZTEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9EaWFsZXJGaWx0ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRGlhbGVyRmlsdGVyLmphdmEKQEAgLTI4LDggKzI4LDYgQEAKIGltcG9ydCBhbmRyb2lkLnRleHQubWV0aG9kLktleUxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudGV4dC5tZXRob2QuVGV4dEtleUxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuS2V5Q2hhcmFjdGVyTWFwOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0VkaXRUZXh0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRWRpdFRleHQuamF2YQppbmRleCA1N2U1MWMyLi4zYTdjYzg3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRWRpdFRleHQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRWRpdFRleHQuamF2YQpAQCAtNTYsOCArNTYsMTIgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmVkaXRUZXh0U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBFZGl0VGV4dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEVkaXRUZXh0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEVkaXRUZXh0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0VkaXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0VkaXRvci5qYXZhCmluZGV4IDlkYWI3YjQuLjhlYTM1ZmYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9FZGl0b3IuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRWRpdG9yLmphdmEKQEAgLTQ1LDggKzQ1LDYgQEAKIGltcG9ydCBhbmRyb2lkLmlucHV0bWV0aG9kc2VydmljZS5FeHRyYWN0RWRpdFRleHQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NlbmdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LkR5bmFtaWNMYXlvdXQ7CkBAIC0xMzQ2LDcgKzEzNDQsNyBAQAogICAgICAgICAgICAgICAgIERpc3BsYXlMaXN0IGJsb2NrRGlzcGxheUxpc3QgPSBtVGV4dERpc3BsYXlMaXN0c1tibG9ja0luZGV4XTsKICAgICAgICAgICAgICAgICBpZiAoYmxvY2tEaXNwbGF5TGlzdCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGJsb2NrRGlzcGxheUxpc3QgPSBtVGV4dERpc3BsYXlMaXN0c1tibG9ja0luZGV4XSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRleHRWaWV3LmdldEhhcmR3YXJlUmVuZGVyZXIoKS5jcmVhdGVEaXNwbGF5TGlzdCgiVGV4dCAiICsgYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheUxpc3QuY3JlYXRlKCJUZXh0ICIgKyBibG9ja0luZGV4KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tJc0ludmFsaWQpIGJsb2NrRGlzcGxheUxpc3QuY2xlYXIoKTsKICAgICAgICAgICAgICAgICB9CkBAIC0yMzIxLDggKzIzMTksOCBAQAogICAgICAgICBwcml2YXRlIGZpbmFsIEhhc2hNYXA8U3VnZ2VzdGlvblNwYW4sIEludGVnZXI+IG1TcGFuc0xlbmd0aHM7CiAKICAgICAgICAgcHJpdmF0ZSBjbGFzcyBDdXN0b21Qb3B1cFdpbmRvdyBleHRlbmRzIFBvcHVwV2luZG93IHsKLSAgICAgICAgICAgIHB1YmxpYyBDdXN0b21Qb3B1cFdpbmRvdyhDb250ZXh0IGNvbnRleHQsIGludCBkZWZTdHlsZSkgewotICAgICAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIG51bGwsIGRlZlN0eWxlKTsKKyAgICAgICAgICAgIHB1YmxpYyBDdXN0b21Qb3B1cFdpbmRvdyhDb250ZXh0IGNvbnRleHQsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgICAgICAgICBzdXBlcihjb250ZXh0LCBudWxsLCBkZWZTdHlsZUF0dHIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9FeHBhbmRhYmxlTGlzdFZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9FeHBhbmRhYmxlTGlzdFZpZXcuamF2YQppbmRleCA3YjgxYWE4Li43MDA4OWUwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRXhwYW5kYWJsZUxpc3RWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0V4cGFuZGFibGVMaXN0Vmlldy5qYXZhCkBAIC0yMjcsMTIgKzIyNywxNiBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuZXhwYW5kYWJsZUxpc3RWaWV3U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBFeHBhbmRhYmxlTGlzdFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBFeHBhbmRhYmxlTGlzdFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0KLSAgICAgICAgICAgIGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRXhwYW5kYWJsZUxpc3RWaWV3LCBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIEV4cGFuZGFibGVMaXN0VmlldygKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5FeHBhbmRhYmxlTGlzdFZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIG1Hcm91cEluZGljYXRvciA9IGEuZ2V0RHJhd2FibGUoCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRXhwYW5kYWJsZUxpc3RWaWV3X2dyb3VwSW5kaWNhdG9yKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9GYXN0U2Nyb2xsZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9GYXN0U2Nyb2xsZXIuamF2YQppbmRleCAwMWFjOGZkLi4yZDQyZmExIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRmFzdFNjcm9sbGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Zhc3RTY3JvbGxlci5qYXZhCkBAIC0yNCwxMSArMjQsMTEgQEAKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzLlRydW5jYXRlQXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkludFByb3BlcnR5OwpAQCAtNDMsNyArNDMsNyBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXAuTGF5b3V0UGFyYW1zOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXBPdmVybGF5OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFic0xpc3RWaWV3Lk9uU2Nyb2xsTGlzdGVuZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXcuU2NhbGVUeXBlOwogCiAvKioKICAqIEhlbHBlciBjbGFzcyBmb3IgQWJzTGlzdFZpZXcgdG8gZHJhdyBhbmQgY29udHJvbCB0aGUgRmFzdCBTY3JvbGwgdGh1bWIKQEAgLTc2LDI0ICs3Niw2IEBACiAgICAgLyoqIFNjcm9sbCB0aHVtYiBhbmQgcHJldmlldyBiZWluZyBkcmFnZ2VkIGJ5IHVzZXIuICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0RSQUdHSU5HID0gMjsKIAotICAgIC8qKiBTdHlsZWFibGUgYXR0cmlidXRlcy4gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBBVFRSUyA9IG5ldyBpbnRbXSB7Ci0gICAgICAgIGFuZHJvaWQuUi5hdHRyLmZhc3RTY3JvbGxUZXh0Q29sb3IsCi0gICAgICAgIGFuZHJvaWQuUi5hdHRyLmZhc3RTY3JvbGxUaHVtYkRyYXdhYmxlLAotICAgICAgICBhbmRyb2lkLlIuYXR0ci5mYXN0U2Nyb2xsVHJhY2tEcmF3YWJsZSwKLSAgICAgICAgYW5kcm9pZC5SLmF0dHIuZmFzdFNjcm9sbFByZXZpZXdCYWNrZ3JvdW5kTGVmdCwKLSAgICAgICAgYW5kcm9pZC5SLmF0dHIuZmFzdFNjcm9sbFByZXZpZXdCYWNrZ3JvdW5kUmlnaHQsCi0gICAgICAgIGFuZHJvaWQuUi5hdHRyLmZhc3RTY3JvbGxPdmVybGF5UG9zaXRpb24KLSAgICB9OwotCi0gICAgLy8gU3R5bGVhYmxlIGF0dHJpYnV0ZSBpbmRpY2VzLgotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVhUX0NPTE9SID0gMDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEhVTUJfRFJBV0FCTEUgPSAxOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUUkFDS19EUkFXQUJMRSA9IDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBSRVZJRVdfQkFDS0dST1VORF9MRUZUID0gMzsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJFVklFV19CQUNLR1JPVU5EX1JJR0hUID0gNDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgT1ZFUkxBWV9QT1NJVElPTiA9IDU7Ci0KICAgICAvLyBQb3NpdGlvbnMgZm9yIHByZXZpZXcgaW1hZ2UgYW5kIHRleHQuCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE9WRVJMQVlfRkxPQVRJTkcgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPVkVSTEFZX0FUX1RIVU1CID0gMTsKQEAgLTExNSw3ICs5Nyw3IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBUZXh0VmlldyBtU2Vjb25kYXJ5VGV4dDsKICAgICBwcml2YXRlIGZpbmFsIEltYWdlVmlldyBtVGh1bWJJbWFnZTsKICAgICBwcml2YXRlIGZpbmFsIEltYWdlVmlldyBtVHJhY2tJbWFnZTsKLSAgICBwcml2YXRlIGZpbmFsIEltYWdlVmlldyBtUHJldmlld0ltYWdlOworICAgIHByaXZhdGUgZmluYWwgVmlldyBtUHJldmlld0ltYWdlOwogCiAgICAgLyoqCiAgICAgICogUHJldmlldyBpbWFnZSByZXNvdXJjZSBJRHMgZm9yIGxlZnQtIGFuZCByaWdodC1hbGlnbmVkIGxheW91dHMuIFNlZQpAQCAtMTI3LDEzICsxMDksMjUgQEAKICAgICAgKiBQYWRkaW5nIGluIHBpeGVscyBhcm91bmQgdGhlIHByZXZpZXcgdGV4dC4gQXBwbGllZCBhcyBsYXlvdXQgbWFyZ2lucyB0bwogICAgICAqIHRoZSBwcmV2aWV3IHRleHQgYW5kIHBhZGRpbmcgdG8gdGhlIHByZXZpZXcgaW1hZ2UuCiAgICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVByZXZpZXdQYWRkaW5nOworICAgIHByaXZhdGUgaW50IG1QcmV2aWV3UGFkZGluZzsKIAotICAgIC8qKiBXaGV0aGVyIHRoZXJlIGlzIGEgdHJhY2sgaW1hZ2UgdG8gZGlzcGxheS4gKi8KLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbUhhc1RyYWNrSW1hZ2U7CisgICAgcHJpdmF0ZSBpbnQgbVByZXZpZXdNaW5XaWR0aDsKKyAgICBwcml2YXRlIGludCBtUHJldmlld01pbkhlaWdodDsKKyAgICBwcml2YXRlIGludCBtVGh1bWJNaW5XaWR0aDsKKyAgICBwcml2YXRlIGludCBtVGh1bWJNaW5IZWlnaHQ7CisKKyAgICAvKiogVGhlbWUtc3BlY2lmaWVkIHRleHQgc2l6ZS4gVXNlZCBvbmx5IGlmIHRleHQgYXBwZWFyYW5jZSBpcyBub3Qgc2V0LiAqLworICAgIHByaXZhdGUgZmxvYXQgbVRleHRTaXplOworCisgICAgLyoqIFRoZW1lLXNwZWNpZmllZCB0ZXh0IGNvbG9yLiBVc2VkIG9ubHkgaWYgdGV4dCBhcHBlYXJhbmNlIGlzIG5vdCBzZXQuICovCisgICAgcHJpdmF0ZSBDb2xvclN0YXRlTGlzdCBtVGV4dENvbG9yOworCisgICAgcHJpdmF0ZSBEcmF3YWJsZSBtVGh1bWJEcmF3YWJsZTsKKyAgICBwcml2YXRlIERyYXdhYmxlIG1UcmFja0RyYXdhYmxlOworICAgIHByaXZhdGUgaW50IG1UZXh0QXBwZWFyYW5jZTsKIAogICAgIC8qKiBUb3RhbCB3aWR0aCBvZiBkZWNvcmF0aW9ucy4gKi8KLSAgICBwcml2YXRlIGZpbmFsIGludCBtV2lkdGg7CisgICAgcHJpdmF0ZSBpbnQgbVdpZHRoOwogCiAgICAgLyoqIFNldCBjb250YWluaW5nIGRlY29yYXRpb24gdHJhbnNpdGlvbiBhbmltYXRpb25zLiAqLwogICAgIHByaXZhdGUgQW5pbWF0b3JTZXQgbURlY29yQW5pbWF0aW9uOwpAQCAtMjA4LDIzICsyMDIsOSBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBtTWF0Y2hEcmFnUG9zaXRpb247CiAKICAgICBwcml2YXRlIGZsb2F0IG1Jbml0aWFsVG91Y2hZOwotICAgIHByaXZhdGUgYm9vbGVhbiBtSGFzUGVuZGluZ0RyYWc7CisgICAgcHJpdmF0ZSBsb25nIG1QZW5kaW5nRHJhZyA9IC0xOwogICAgIHByaXZhdGUgaW50IG1TY2FsZWRUb3VjaFNsb3A7CiAKLSAgICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIG1EZWZlclN0YXJ0RHJhZyA9IG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIGlmIChtTGlzdC5pc0F0dGFjaGVkVG9XaW5kb3coKSkgewotICAgICAgICAgICAgICAgIGJlZ2luRHJhZygpOwotCi0gICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgcG9zID0gZ2V0UG9zRnJvbU1vdGlvbkV2ZW50KG1Jbml0aWFsVG91Y2hZKTsKLSAgICAgICAgICAgICAgICBzY3JvbGxUbyhwb3MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtSGFzUGVuZGluZ0RyYWcgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH07Ci0KICAgICAvKioKICAgICAgKiBVc2VkIHRvIGRlbGF5IGhpZGluZyBmYXN0IHNjcm9sbCBkZWNvcmF0aW9ucy4KICAgICAgKi8KQEAgLTI0NSw4OSArMjI1LDE0MyBAQAogICAgICAgICB9CiAgICAgfTsKIAotICAgIHB1YmxpYyBGYXN0U2Nyb2xsZXIoQWJzTGlzdFZpZXcgbGlzdFZpZXcpIHsKKyAgICBwdWJsaWMgRmFzdFNjcm9sbGVyKEFic0xpc3RWaWV3IGxpc3RWaWV3LCBpbnQgc3R5bGVSZXNJZCkgewogICAgICAgICBtTGlzdCA9IGxpc3RWaWV3OwotICAgICAgICBtT3ZlcmxheSA9IGxpc3RWaWV3LmdldE92ZXJsYXkoKTsKIAogICAgICAgICBmaW5hbCBDb250ZXh0IGNvbnRleHQgPSBsaXN0Vmlldy5nZXRDb250ZXh0KCk7CiAgICAgICAgIG1TY2FsZWRUb3VjaFNsb3AgPSBWaWV3Q29uZmlndXJhdGlvbi5nZXQoY29udGV4dCkuZ2V0U2NhbGVkVG91Y2hTbG9wKCk7CisgICAgICAgIG1TY3JvbGxCYXJTdHlsZSA9IGxpc3RWaWV3LmdldFNjcm9sbEJhclN0eWxlKCk7CiAKLSAgICAgICAgZmluYWwgUmVzb3VyY2VzIHJlcyA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7Ci0gICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgdGEgPSBjb250ZXh0LmdldFRoZW1lKCkub2J0YWluU3R5bGVkQXR0cmlidXRlcyhBVFRSUyk7CisgICAgICAgIG1TY3JvbGxDb21wbGV0ZWQgPSB0cnVlOworICAgICAgICBtU3RhdGUgPSBTVEFURV9WSVNJQkxFOworICAgICAgICBtTWF0Y2hEcmFnUG9zaXRpb24gPQorICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0QXBwbGljYXRpb25JbmZvKCkudGFyZ2V0U2RrVmVyc2lvbiA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkhPTkVZQ09NQjsKIAotICAgICAgICBmaW5hbCBJbWFnZVZpZXcgdHJhY2tJbWFnZSA9IG5ldyBJbWFnZVZpZXcoY29udGV4dCk7Ci0gICAgICAgIG1UcmFja0ltYWdlID0gdHJhY2tJbWFnZTsKKyAgICAgICAgbVRyYWNrSW1hZ2UgPSBuZXcgSW1hZ2VWaWV3KGNvbnRleHQpOworICAgICAgICBtVHJhY2tJbWFnZS5zZXRTY2FsZVR5cGUoU2NhbGVUeXBlLkZJVF9YWSk7CisgICAgICAgIG1UaHVtYkltYWdlID0gbmV3IEltYWdlVmlldyhjb250ZXh0KTsKKyAgICAgICAgbVRodW1iSW1hZ2Uuc2V0U2NhbGVUeXBlKFNjYWxlVHlwZS5GSVRfWFkpOworICAgICAgICBtUHJldmlld0ltYWdlID0gbmV3IFZpZXcoY29udGV4dCk7CisgICAgICAgIG1QcmV2aWV3SW1hZ2Uuc2V0QWxwaGEoMGYpOwogCisgICAgICAgIG1QcmltYXJ5VGV4dCA9IGNyZWF0ZVByZXZpZXdUZXh0Vmlldyhjb250ZXh0KTsKKyAgICAgICAgbVNlY29uZGFyeVRleHQgPSBjcmVhdGVQcmV2aWV3VGV4dFZpZXcoY29udGV4dCk7CisKKyAgICAgICAgc2V0U3R5bGUoc3R5bGVSZXNJZCk7CisKKyAgICAgICAgZmluYWwgVmlld0dyb3VwT3ZlcmxheSBvdmVybGF5ID0gbGlzdFZpZXcuZ2V0T3ZlcmxheSgpOworICAgICAgICBtT3ZlcmxheSA9IG92ZXJsYXk7CisgICAgICAgIG92ZXJsYXkuYWRkKG1UcmFja0ltYWdlKTsKKyAgICAgICAgb3ZlcmxheS5hZGQobVRodW1iSW1hZ2UpOworICAgICAgICBvdmVybGF5LmFkZChtUHJldmlld0ltYWdlKTsKKyAgICAgICAgb3ZlcmxheS5hZGQobVByaW1hcnlUZXh0KTsKKyAgICAgICAgb3ZlcmxheS5hZGQobVNlY29uZGFyeVRleHQpOworCisgICAgICAgIGdldFNlY3Rpb25zRnJvbUluZGV4ZXIoKTsKKyAgICAgICAgdXBkYXRlTG9uZ0xpc3QobGlzdFZpZXcuZ2V0Q2hpbGRDb3VudCgpLCBsaXN0Vmlldy5nZXRDb3VudCgpKTsKKyAgICAgICAgc2V0U2Nyb2xsYmFyUG9zaXRpb24obGlzdFZpZXcuZ2V0VmVydGljYWxTY3JvbGxiYXJQb3NpdGlvbigpKTsKKyAgICAgICAgcG9zdEF1dG9IaWRlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUFwcGVhcmFuY2UoKSB7CisgICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dCA9IG1MaXN0LmdldENvbnRleHQoKTsKICAgICAgICAgaW50IHdpZHRoID0gMDsKIAogICAgICAgICAvLyBBZGQgdHJhY2sgdG8gb3ZlcmxheSBpZiBpdCBoYXMgYW4gaW1hZ2UuCi0gICAgICAgIGZpbmFsIERyYXdhYmxlIHRyYWNrRHJhd2FibGUgPSB0YS5nZXREcmF3YWJsZShUUkFDS19EUkFXQUJMRSk7Ci0gICAgICAgIGlmICh0cmFja0RyYXdhYmxlICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1IYXNUcmFja0ltYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgIHRyYWNrSW1hZ2Uuc2V0QmFja2dyb3VuZCh0cmFja0RyYXdhYmxlKTsKLSAgICAgICAgICAgIG1PdmVybGF5LmFkZCh0cmFja0ltYWdlKTsKLSAgICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIHRyYWNrRHJhd2FibGUuZ2V0SW50cmluc2ljV2lkdGgoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtSGFzVHJhY2tJbWFnZSA9IGZhbHNlOworICAgICAgICBtVHJhY2tJbWFnZS5zZXRJbWFnZURyYXdhYmxlKG1UcmFja0RyYXdhYmxlKTsKKyAgICAgICAgaWYgKG1UcmFja0RyYXdhYmxlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIG1UcmFja0RyYXdhYmxlLmdldEludHJpbnNpY1dpZHRoKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgZmluYWwgSW1hZ2VWaWV3IHRodW1iSW1hZ2UgPSBuZXcgSW1hZ2VWaWV3KGNvbnRleHQpOwotICAgICAgICBtVGh1bWJJbWFnZSA9IHRodW1iSW1hZ2U7Ci0KICAgICAgICAgLy8gQWRkIHRodW1iIHRvIG92ZXJsYXkgaWYgaXQgaGFzIGFuIGltYWdlLgotICAgICAgICBmaW5hbCBEcmF3YWJsZSB0aHVtYkRyYXdhYmxlID0gdGEuZ2V0RHJhd2FibGUoVEhVTUJfRFJBV0FCTEUpOwotICAgICAgICBpZiAodGh1bWJEcmF3YWJsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0aHVtYkltYWdlLnNldEltYWdlRHJhd2FibGUodGh1bWJEcmF3YWJsZSk7Ci0gICAgICAgICAgICBtT3ZlcmxheS5hZGQodGh1bWJJbWFnZSk7Ci0gICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCB0aHVtYkRyYXdhYmxlLmdldEludHJpbnNpY1dpZHRoKCkpOworICAgICAgICBtVGh1bWJJbWFnZS5zZXRJbWFnZURyYXdhYmxlKG1UaHVtYkRyYXdhYmxlKTsKKyAgICAgICAgbVRodW1iSW1hZ2Uuc2V0TWluaW11bVdpZHRoKG1UaHVtYk1pbldpZHRoKTsKKyAgICAgICAgbVRodW1iSW1hZ2Uuc2V0TWluaW11bUhlaWdodChtVGh1bWJNaW5IZWlnaHQpOworICAgICAgICBpZiAobVRodW1iRHJhd2FibGUgIT0gbnVsbCkgeworICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgbVRodW1iRHJhd2FibGUuZ2V0SW50cmluc2ljV2lkdGgoKSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBJZiBuZWNlc3NhcnksIGFwcGx5IG1pbmltdW0gdGh1bWIgd2lkdGggYW5kIGhlaWdodC4KLSAgICAgICAgaWYgKHRodW1iRHJhd2FibGUuZ2V0SW50cmluc2ljV2lkdGgoKSA8PSAwIHx8IHRodW1iRHJhd2FibGUuZ2V0SW50cmluc2ljSGVpZ2h0KCkgPD0gMCkgewotICAgICAgICAgICAgZmluYWwgaW50IG1pbldpZHRoID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLmZhc3RzY3JvbGxfdGh1bWJfd2lkdGgpOwotICAgICAgICAgICAgdGh1bWJJbWFnZS5zZXRNaW5pbXVtV2lkdGgobWluV2lkdGgpOwotICAgICAgICAgICAgdGh1bWJJbWFnZS5zZXRNaW5pbXVtSGVpZ2h0KAotICAgICAgICAgICAgICAgICAgICByZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4uZmFzdHNjcm9sbF90aHVtYl9oZWlnaHQpKTsKLSAgICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIG1pbldpZHRoKTsKKyAgICAgICAgLy8gQWNjb3VudCBmb3IgbWluaW11bSB0aHVtYiB3aWR0aC4KKyAgICAgICAgbVdpZHRoID0gTWF0aC5tYXgod2lkdGgsIG1UaHVtYk1pbldpZHRoKTsKKworICAgICAgICBtUHJldmlld0ltYWdlLnNldE1pbmltdW1XaWR0aChtUHJldmlld01pbldpZHRoKTsKKyAgICAgICAgbVByZXZpZXdJbWFnZS5zZXRNaW5pbXVtSGVpZ2h0KG1QcmV2aWV3TWluSGVpZ2h0KTsKKworICAgICAgICBpZiAobVRleHRBcHBlYXJhbmNlICE9IDApIHsKKyAgICAgICAgICAgIG1QcmltYXJ5VGV4dC5zZXRUZXh0QXBwZWFyYW5jZShjb250ZXh0LCBtVGV4dEFwcGVhcmFuY2UpOworICAgICAgICAgICAgbVNlY29uZGFyeVRleHQuc2V0VGV4dEFwcGVhcmFuY2UoY29udGV4dCwgbVRleHRBcHBlYXJhbmNlKTsKICAgICAgICAgfQogCi0gICAgICAgIG1XaWR0aCA9IHdpZHRoOworICAgICAgICBpZiAobVRleHRDb2xvciAhPSBudWxsKSB7CisgICAgICAgICAgICBtUHJpbWFyeVRleHQuc2V0VGV4dENvbG9yKG1UZXh0Q29sb3IpOworICAgICAgICAgICAgbVNlY29uZGFyeVRleHQuc2V0VGV4dENvbG9yKG1UZXh0Q29sb3IpOworICAgICAgICB9CiAKLSAgICAgICAgZmluYWwgaW50IHByZXZpZXdTaXplID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLmZhc3RzY3JvbGxfb3ZlcmxheV9zaXplKTsKLSAgICAgICAgbVByZXZpZXdJbWFnZSA9IG5ldyBJbWFnZVZpZXcoY29udGV4dCk7Ci0gICAgICAgIG1QcmV2aWV3SW1hZ2Uuc2V0TWluaW11bVdpZHRoKHByZXZpZXdTaXplKTsKLSAgICAgICAgbVByZXZpZXdJbWFnZS5zZXRNaW5pbXVtSGVpZ2h0KHByZXZpZXdTaXplKTsKLSAgICAgICAgbVByZXZpZXdJbWFnZS5zZXRBbHBoYSgwZik7Ci0gICAgICAgIG1PdmVybGF5LmFkZChtUHJldmlld0ltYWdlKTsKKyAgICAgICAgaWYgKG1UZXh0U2l6ZSA+IDApIHsKKyAgICAgICAgICAgIG1QcmltYXJ5VGV4dC5zZXRUZXh0U2l6ZShUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9QWCwgbVRleHRTaXplKTsKKyAgICAgICAgICAgIG1TZWNvbmRhcnlUZXh0LnNldFRleHRTaXplKFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX1BYLCBtVGV4dFNpemUpOworICAgICAgICB9CiAKLSAgICAgICAgbVByZXZpZXdQYWRkaW5nID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLmZhc3RzY3JvbGxfb3ZlcmxheV9wYWRkaW5nKTsKLQotICAgICAgICBmaW5hbCBpbnQgdGV4dE1pblNpemUgPSBNYXRoLm1heCgwLCBwcmV2aWV3U2l6ZSAtIG1QcmV2aWV3UGFkZGluZyk7Ci0gICAgICAgIG1QcmltYXJ5VGV4dCA9IGNyZWF0ZVByZXZpZXdUZXh0Vmlldyhjb250ZXh0LCB0YSk7CisgICAgICAgIGZpbmFsIGludCB0ZXh0TWluU2l6ZSA9IE1hdGgubWF4KDAsIG1QcmV2aWV3TWluSGVpZ2h0KTsKICAgICAgICAgbVByaW1hcnlUZXh0LnNldE1pbmltdW1XaWR0aCh0ZXh0TWluU2l6ZSk7CiAgICAgICAgIG1QcmltYXJ5VGV4dC5zZXRNaW5pbXVtSGVpZ2h0KHRleHRNaW5TaXplKTsKLSAgICAgICAgbU92ZXJsYXkuYWRkKG1QcmltYXJ5VGV4dCk7Ci0gICAgICAgIG1TZWNvbmRhcnlUZXh0ID0gY3JlYXRlUHJldmlld1RleHRWaWV3KGNvbnRleHQsIHRhKTsKICAgICAgICAgbVNlY29uZGFyeVRleHQuc2V0TWluaW11bVdpZHRoKHRleHRNaW5TaXplKTsKICAgICAgICAgbVNlY29uZGFyeVRleHQuc2V0TWluaW11bUhlaWdodCh0ZXh0TWluU2l6ZSk7Ci0gICAgICAgIG1PdmVybGF5LmFkZChtU2Vjb25kYXJ5VGV4dCk7CiAKLSAgICAgICAgbVByZXZpZXdSZXNJZFtQUkVWSUVXX0xFRlRdID0gdGEuZ2V0UmVzb3VyY2VJZChQUkVWSUVXX0JBQ0tHUk9VTkRfTEVGVCwgMCk7Ci0gICAgICAgIG1QcmV2aWV3UmVzSWRbUFJFVklFV19SSUdIVF0gPSB0YS5nZXRSZXNvdXJjZUlkKFBSRVZJRVdfQkFDS0dST1VORF9SSUdIVCwgMCk7Ci0gICAgICAgIG1PdmVybGF5UG9zaXRpb24gPSB0YS5nZXRJbnQoT1ZFUkxBWV9QT1NJVElPTiwgT1ZFUkxBWV9GTE9BVElORyk7Ci0gICAgICAgIHRhLnJlY3ljbGUoKTsKLQotICAgICAgICBtU2Nyb2xsQmFyU3R5bGUgPSBsaXN0Vmlldy5nZXRTY3JvbGxCYXJTdHlsZSgpOwotICAgICAgICBtU2Nyb2xsQ29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAgbVN0YXRlID0gU1RBVEVfVklTSUJMRTsKLSAgICAgICAgbU1hdGNoRHJhZ1Bvc2l0aW9uID0gY29udGV4dC5nZXRBcHBsaWNhdGlvbkluZm8oKS50YXJnZXRTZGtWZXJzaW9uCi0gICAgICAgICAgICAgICAgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5IT05FWUNPTUI7Ci0KLSAgICAgICAgZ2V0U2VjdGlvbnNGcm9tSW5kZXhlcigpOwogICAgICAgICByZWZyZXNoRHJhd2FibGVQcmVzc2VkU3RhdGUoKTsKLSAgICAgICAgdXBkYXRlTG9uZ0xpc3QobGlzdFZpZXcuZ2V0Q2hpbGRDb3VudCgpLCBsaXN0Vmlldy5nZXRDb3VudCgpKTsKLSAgICAgICAgc2V0U2Nyb2xsYmFyUG9zaXRpb24obUxpc3QuZ2V0VmVydGljYWxTY3JvbGxiYXJQb3NpdGlvbigpKTsKLSAgICAgICAgcG9zdEF1dG9IaWRlKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0U3R5bGUoaW50IHJlc0lkKSB7CisgICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dCA9IG1MaXN0LmdldENvbnRleHQoKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSB0YSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhudWxsLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZhc3RTY3JvbGwsIGFuZHJvaWQuUi5hdHRyLmZhc3RTY3JvbGxTdHlsZSwgcmVzSWQpOworICAgICAgICBmaW5hbCBpbnQgTiA9IHRhLmdldEluZGV4Q291bnQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgIGZpbmFsIGludCBpbmRleCA9IHRhLmdldEluZGV4KGkpOworICAgICAgICAgICAgc3dpdGNoIChpbmRleCkgeworICAgICAgICAgICAgICAgIGNhc2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRmFzdFNjcm9sbF9wb3NpdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgbU92ZXJsYXlQb3NpdGlvbiA9IHRhLmdldEludChpbmRleCwgT1ZFUkxBWV9GTE9BVElORyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRmFzdFNjcm9sbF9iYWNrZ3JvdW5kTGVmdDoKKyAgICAgICAgICAgICAgICAgICAgbVByZXZpZXdSZXNJZFtQUkVWSUVXX0xFRlRdID0gdGEuZ2V0UmVzb3VyY2VJZChpbmRleCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRmFzdFNjcm9sbF9iYWNrZ3JvdW5kUmlnaHQ6CisgICAgICAgICAgICAgICAgICAgIG1QcmV2aWV3UmVzSWRbUFJFVklFV19SSUdIVF0gPSB0YS5nZXRSZXNvdXJjZUlkKGluZGV4LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GYXN0U2Nyb2xsX3RodW1iRHJhd2FibGU6CisgICAgICAgICAgICAgICAgICAgIG1UaHVtYkRyYXdhYmxlID0gdGEuZ2V0RHJhd2FibGUoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZhc3RTY3JvbGxfdHJhY2tEcmF3YWJsZToKKyAgICAgICAgICAgICAgICAgICAgbVRyYWNrRHJhd2FibGUgPSB0YS5nZXREcmF3YWJsZShpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRmFzdFNjcm9sbF90ZXh0QXBwZWFyYW5jZToKKyAgICAgICAgICAgICAgICAgICAgbVRleHRBcHBlYXJhbmNlID0gdGEuZ2V0UmVzb3VyY2VJZChpbmRleCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRmFzdFNjcm9sbF90ZXh0Q29sb3I6CisgICAgICAgICAgICAgICAgICAgIG1UZXh0Q29sb3IgPSB0YS5nZXRDb2xvclN0YXRlTGlzdChpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRmFzdFNjcm9sbF90ZXh0U2l6ZToKKyAgICAgICAgICAgICAgICAgICAgbVRleHRTaXplID0gdGEuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKGluZGV4LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GYXN0U2Nyb2xsX21pbldpZHRoOgorICAgICAgICAgICAgICAgICAgICBtUHJldmlld01pbldpZHRoID0gdGEuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKGluZGV4LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GYXN0U2Nyb2xsX21pbkhlaWdodDoKKyAgICAgICAgICAgICAgICAgICAgbVByZXZpZXdNaW5IZWlnaHQgPSB0YS5nZXREaW1lbnNpb25QaXhlbFNpemUoaW5kZXgsIDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZhc3RTY3JvbGxfdGh1bWJNaW5XaWR0aDoKKyAgICAgICAgICAgICAgICAgICAgbVRodW1iTWluV2lkdGggPSB0YS5nZXREaW1lbnNpb25QaXhlbFNpemUoaW5kZXgsIDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZhc3RTY3JvbGxfdGh1bWJNaW5IZWlnaHQ6CisgICAgICAgICAgICAgICAgICAgIG1UaHVtYk1pbkhlaWdodCA9IHRhLmdldERpbWVuc2lvblBpeGVsU2l6ZShpbmRleCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuRmFzdFNjcm9sbF9wYWRkaW5nOgorICAgICAgICAgICAgICAgICAgICBtUHJldmlld1BhZGRpbmcgPSB0YS5nZXREaW1lbnNpb25QaXhlbFNpemUoaW5kZXgsIDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQ2OSwxNyArNTAzLDExIEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHZpZXcgaW50byB3aGljaCBwcmV2aWV3IHRleHQgY2FuIGJlIHBsYWNlZC4KICAgICAgKi8KLSAgICBwcml2YXRlIFRleHRWaWV3IGNyZWF0ZVByZXZpZXdUZXh0VmlldyhDb250ZXh0IGNvbnRleHQsIFR5cGVkQXJyYXkgdGEpIHsKKyAgICBwcml2YXRlIFRleHRWaWV3IGNyZWF0ZVByZXZpZXdUZXh0VmlldyhDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgZmluYWwgTGF5b3V0UGFyYW1zIHBhcmFtcyA9IG5ldyBMYXlvdXRQYXJhbXMoCiAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCwgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCk7Ci0gICAgICAgIGZpbmFsIFJlc291cmNlcyByZXMgPSBjb250ZXh0LmdldFJlc291cmNlcygpOwotICAgICAgICBmaW5hbCBpbnQgbWluU2l6ZSA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5mYXN0c2Nyb2xsX292ZXJsYXlfc2l6ZSk7Ci0gICAgICAgIGZpbmFsIENvbG9yU3RhdGVMaXN0IHRleHRDb2xvciA9IHRhLmdldENvbG9yU3RhdGVMaXN0KFRFWFRfQ09MT1IpOwotICAgICAgICBmaW5hbCBmbG9hdCB0ZXh0U2l6ZSA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5mYXN0c2Nyb2xsX292ZXJsYXlfdGV4dF9zaXplKTsKICAgICAgICAgZmluYWwgVGV4dFZpZXcgdGV4dFZpZXcgPSBuZXcgVGV4dFZpZXcoY29udGV4dCk7CiAgICAgICAgIHRleHRWaWV3LnNldExheW91dFBhcmFtcyhwYXJhbXMpOwotICAgICAgICB0ZXh0Vmlldy5zZXRUZXh0Q29sb3IodGV4dENvbG9yKTsKLSAgICAgICAgdGV4dFZpZXcuc2V0VGV4dFNpemUoVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfUFgsIHRleHRTaXplKTsKICAgICAgICAgdGV4dFZpZXcuc2V0U2luZ2xlTGluZSh0cnVlKTsKICAgICAgICAgdGV4dFZpZXcuc2V0RWxsaXBzaXplKFRydW5jYXRlQXQuTUlERExFKTsKICAgICAgICAgdGV4dFZpZXcuc2V0R3Jhdml0eShHcmF2aXR5LkNFTlRFUik7CkBAIC02MDMsNyArNjMxLDcgQEAKICAgICAgICAgdmlldy5tZWFzdXJlKHdpZHRoTWVhc3VyZVNwZWMsIGhlaWdodE1lYXN1cmVTcGVjKTsKIAogICAgICAgICAvLyBBbGlnbiB0byB0aGUgbGVmdCBvciByaWdodC4KLSAgICAgICAgZmluYWwgaW50IHdpZHRoID0gdmlldy5nZXRNZWFzdXJlZFdpZHRoKCk7CisgICAgICAgIGZpbmFsIGludCB3aWR0aCA9IE1hdGgubWluKGFkak1heFdpZHRoLCB2aWV3LmdldE1lYXN1cmVkV2lkdGgoKSk7CiAgICAgICAgIGZpbmFsIGludCBsZWZ0OwogICAgICAgICBmaW5hbCBpbnQgcmlnaHQ7CiAgICAgICAgIGlmIChtTGF5b3V0RnJvbVJpZ2h0KSB7CkBAIC0xMDIwLDcgKzEwNDgsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgZmluYWwgUmVjdCBib3VuZHMgPSBtVGVtcEJvdW5kczsKLSAgICAgICAgZmluYWwgSW1hZ2VWaWV3IHByZXZpZXcgPSBtUHJldmlld0ltYWdlOworICAgICAgICBmaW5hbCBWaWV3IHByZXZpZXcgPSBtUHJldmlld0ltYWdlOwogICAgICAgICBmaW5hbCBUZXh0VmlldyBzaG93aW5nOwogICAgICAgICBmaW5hbCBUZXh0VmlldyB0YXJnZXQ7CiAgICAgICAgIGlmIChtU2hvd2luZ1ByaW1hcnkpIHsKQEAgLTEwNDYsMTAgKzEwNzQsMTAgQEAKICAgICAgICAgaGlkZVNob3dpbmcuYWRkTGlzdGVuZXIobVN3aXRjaFByaW1hcnlMaXN0ZW5lcik7CiAKICAgICAgICAgLy8gQXBwbHkgcHJldmlldyBpbWFnZSBwYWRkaW5nIGFuZCBhbmltYXRlIGJvdW5kcywgaWYgbmVjZXNzYXJ5LgotICAgICAgICBib3VuZHMubGVmdCAtPSBtUHJldmlld0ltYWdlLmdldFBhZGRpbmdMZWZ0KCk7Ci0gICAgICAgIGJvdW5kcy50b3AgLT0gbVByZXZpZXdJbWFnZS5nZXRQYWRkaW5nVG9wKCk7Ci0gICAgICAgIGJvdW5kcy5yaWdodCArPSBtUHJldmlld0ltYWdlLmdldFBhZGRpbmdSaWdodCgpOwotICAgICAgICBib3VuZHMuYm90dG9tICs9IG1QcmV2aWV3SW1hZ2UuZ2V0UGFkZGluZ0JvdHRvbSgpOworICAgICAgICBib3VuZHMubGVmdCAtPSBwcmV2aWV3LmdldFBhZGRpbmdMZWZ0KCk7CisgICAgICAgIGJvdW5kcy50b3AgLT0gcHJldmlldy5nZXRQYWRkaW5nVG9wKCk7CisgICAgICAgIGJvdW5kcy5yaWdodCArPSBwcmV2aWV3LmdldFBhZGRpbmdSaWdodCgpOworICAgICAgICBib3VuZHMuYm90dG9tICs9IHByZXZpZXcuZ2V0UGFkZGluZ0JvdHRvbSgpOwogICAgICAgICBmaW5hbCBBbmltYXRvciByZXNpemVQcmV2aWV3ID0gYW5pbWF0ZUJvdW5kcyhwcmV2aWV3LCBib3VuZHMpOwogICAgICAgICByZXNpemVQcmV2aWV3LnNldER1cmF0aW9uKERVUkFUSU9OX1JFU0laRSk7CiAKQEAgLTEwOTcsOCArMTEyNSw4IEBACiAgICAgICAgIGZpbmFsIGludCB0b3AgPSBjb250YWluZXIudG9wOwogICAgICAgICBmaW5hbCBpbnQgYm90dG9tID0gY29udGFpbmVyLmJvdHRvbTsKIAotICAgICAgICBmaW5hbCBJbWFnZVZpZXcgdHJhY2tJbWFnZSA9IG1UcmFja0ltYWdlOwotICAgICAgICBmaW5hbCBJbWFnZVZpZXcgdGh1bWJJbWFnZSA9IG1UaHVtYkltYWdlOworICAgICAgICBmaW5hbCBWaWV3IHRyYWNrSW1hZ2UgPSBtVHJhY2tJbWFnZTsKKyAgICAgICAgZmluYWwgVmlldyB0aHVtYkltYWdlID0gbVRodW1iSW1hZ2U7CiAgICAgICAgIGZpbmFsIGZsb2F0IG1pbiA9IHRyYWNrSW1hZ2UuZ2V0VG9wKCk7CiAgICAgICAgIGZpbmFsIGZsb2F0IG1heCA9IHRyYWNrSW1hZ2UuZ2V0Qm90dG9tKCk7CiAgICAgICAgIGZpbmFsIGZsb2F0IG9mZnNldCA9IG1pbjsKQEAgLTExMDksNyArMTEzNyw3IEBACiAgICAgICAgIGZpbmFsIGZsb2F0IHByZXZpZXdQb3MgPSBtT3ZlcmxheVBvc2l0aW9uID09IE9WRVJMQVlfQVRfVEhVTUIgPyB0aHVtYk1pZGRsZSA6IDA7CiAKICAgICAgICAgLy8gQ2VudGVyIHRoZSBwcmV2aWV3IG9uIHRoZSB0aHVtYiwgY29uc3RyYWluZWQgdG8gdGhlIGxpc3QgYm91bmRzLgotICAgICAgICBmaW5hbCBJbWFnZVZpZXcgcHJldmlld0ltYWdlID0gbVByZXZpZXdJbWFnZTsKKyAgICAgICAgZmluYWwgVmlldyBwcmV2aWV3SW1hZ2UgPSBtUHJldmlld0ltYWdlOwogICAgICAgICBmaW5hbCBmbG9hdCBwcmV2aWV3SGFsZkhlaWdodCA9IHByZXZpZXdJbWFnZS5nZXRIZWlnaHQoKSAvIDJmOwogICAgICAgICBmaW5hbCBmbG9hdCBtaW5QID0gdG9wICsgcHJldmlld0hhbGZIZWlnaHQ7CiAgICAgICAgIGZpbmFsIGZsb2F0IG1heFAgPSBib3R0b20gLSBwcmV2aWV3SGFsZkhlaWdodDsKQEAgLTExMjIsMTEgKzExNTAsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgZmxvYXQgZ2V0UG9zRnJvbU1vdGlvbkV2ZW50KGZsb2F0IHkpIHsKLSAgICAgICAgZmluYWwgUmVjdCBjb250YWluZXIgPSBtQ29udGFpbmVyUmVjdDsKLSAgICAgICAgZmluYWwgaW50IHRvcCA9IGNvbnRhaW5lci50b3A7Ci0gICAgICAgIGZpbmFsIGludCBib3R0b20gPSBjb250YWluZXIuYm90dG9tOwotCi0gICAgICAgIGZpbmFsIEltYWdlVmlldyB0cmFja0ltYWdlID0gbVRyYWNrSW1hZ2U7CisgICAgICAgIGZpbmFsIFZpZXcgdHJhY2tJbWFnZSA9IG1UcmFja0ltYWdlOwogICAgICAgICBmaW5hbCBmbG9hdCBtaW4gPSB0cmFja0ltYWdlLmdldFRvcCgpOwogICAgICAgICBmaW5hbCBmbG9hdCBtYXggPSB0cmFja0ltYWdlLmdldEJvdHRvbSgpOwogICAgICAgICBmaW5hbCBmbG9hdCBvZmZzZXQgPSBtaW47CkBAIC0xMjI3LDggKzEyNTEsNyBAQAogICAgICAqIEBzZWUgI3N0YXJ0UGVuZGluZ0RyYWcoKQogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBjYW5jZWxQZW5kaW5nRHJhZygpIHsKLSAgICAgICAgbUxpc3QucmVtb3ZlQ2FsbGJhY2tzKG1EZWZlclN0YXJ0RHJhZyk7Ci0gICAgICAgIG1IYXNQZW5kaW5nRHJhZyA9IGZhbHNlOworICAgICAgICBtUGVuZGluZ0RyYWcgPSAtMTsKICAgICB9CiAKICAgICAvKioKQEAgLTEyMzYsMTEgKzEyNTksMTIgQEAKICAgICAgKiBzY3JvbGxpbmcsIHJhdGhlciB0aGFuIHRhcHBpbmcuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHN0YXJ0UGVuZGluZ0RyYWcoKSB7Ci0gICAgICAgIG1IYXNQZW5kaW5nRHJhZyA9IHRydWU7Ci0gICAgICAgIG1MaXN0LnBvc3REZWxheWVkKG1EZWZlclN0YXJ0RHJhZywgVEFQX1RJTUVPVVQpOworICAgICAgICBtUGVuZGluZ0RyYWcgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSArIFRBUF9USU1FT1VUOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBiZWdpbkRyYWcoKSB7CisgICAgICAgIG1QZW5kaW5nRHJhZyA9IC0xOworCiAgICAgICAgIHNldFN0YXRlKFNUQVRFX0RSQUdHSU5HKTsKIAogICAgICAgICBpZiAobUxpc3RBZGFwdGVyID09IG51bGwgJiYgbUxpc3QgIT0gbnVsbCkgewpAQCAtMTI4MCw2ICsxMzA0LDEzIEBACiAgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9NT1ZFOgogICAgICAgICAgICAgICAgIGlmICghaXNQb2ludEluc2lkZShldi5nZXRYKCksIGV2LmdldFkoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FuY2VsUGVuZGluZ0RyYWcoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1QZW5kaW5nRHJhZyA+PSAwICYmIG1QZW5kaW5nRHJhZyA8PSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSkgeworICAgICAgICAgICAgICAgICAgICBiZWdpbkRyYWcoKTsKKworICAgICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCBwb3MgPSBnZXRQb3NGcm9tTW90aW9uRXZlbnQobUluaXRpYWxUb3VjaFkpOworICAgICAgICAgICAgICAgICAgICBzY3JvbGxUbyhwb3MpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvblRvdWNoRXZlbnQoZXYpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX1VQOgpAQCAtMTMxNCw3ICsxMzQ1LDcgQEAKIAogICAgICAgICBzd2l0Y2ggKG1lLmdldEFjdGlvbk1hc2tlZCgpKSB7CiAgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9VUDogewotICAgICAgICAgICAgICAgIGlmIChtSGFzUGVuZGluZ0RyYWcpIHsKKyAgICAgICAgICAgICAgICBpZiAobVBlbmRpbmdEcmFnID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgYSB0YXAgdG8gc2Nyb2xsLgogICAgICAgICAgICAgICAgICAgICBiZWdpbkRyYWcoKTsKIApAQCAtMTMyMiw3ICsxMzUzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgc2V0VGh1bWJQb3MocG9zKTsKICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG8ocG9zKTsKIAotICAgICAgICAgICAgICAgICAgICBjYW5jZWxQZW5kaW5nRHJhZygpOwogICAgICAgICAgICAgICAgICAgICAvLyBXaWxsIGhpdCB0aGUgU1RBVEVfRFJBR0dJTkcgY2hlY2sgYmVsb3cKICAgICAgICAgICAgICAgICB9CiAKQEAgLTEzNDMsMjAgKzEzNzMsOSBAQAogICAgICAgICAgICAgfSBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fTU9WRTogewotICAgICAgICAgICAgICAgIGlmIChtSGFzUGVuZGluZ0RyYWcgJiYgTWF0aC5hYnMobWUuZ2V0WSgpIC0gbUluaXRpYWxUb3VjaFkpID4gbVNjYWxlZFRvdWNoU2xvcCkgewotICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZShTVEFURV9EUkFHR0lORyk7CisgICAgICAgICAgICAgICAgaWYgKG1QZW5kaW5nRHJhZyA+PSAwICYmIE1hdGguYWJzKG1lLmdldFkoKSAtIG1Jbml0aWFsVG91Y2hZKSA+IG1TY2FsZWRUb3VjaFNsb3ApIHsKKyAgICAgICAgICAgICAgICAgICAgYmVnaW5EcmFnKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1MaXN0QWRhcHRlciA9PSBudWxsICYmIG1MaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldFNlY3Rpb25zRnJvbUluZGV4ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtTGlzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTGlzdC5yZXF1ZXN0RGlzYWxsb3dJbnRlcmNlcHRUb3VjaEV2ZW50KHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbUxpc3QucmVwb3J0U2Nyb2xsU3RhdGVDaGFuZ2UoT25TY3JvbGxMaXN0ZW5lci5TQ1JPTExfU1RBVEVfVE9VQ0hfU0NST0xMKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNhbmNlbEZsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbmNlbFBlbmRpbmdEcmFnKCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdpbGwgaGl0IHRoZSBTVEFURV9EUkFHR0lORyBjaGVjayBiZWxvdwogICAgICAgICAgICAgICAgIH0KIApAQCAtMTM5Myw3ICsxNDEyLDcgQEAKICAgICAgKiBAcmV0dXJuIFdoZXRoZXIgdGhlIGNvb3JkaW5hdGUgaXMgaW5zaWRlIHRoZSBzY3JvbGxlcidzIGFjdGl2YXRpb24gYXJlYS4KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gaXNQb2ludEluc2lkZShmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIHJldHVybiBpc1BvaW50SW5zaWRlWCh4KSAmJiAobUhhc1RyYWNrSW1hZ2UgfHwgaXNQb2ludEluc2lkZVkoeSkpOworICAgICAgICByZXR1cm4gaXNQb2ludEluc2lkZVgoeCkgJiYgKG1UcmFja0RyYXdhYmxlICE9IG51bGwgfHwgaXNQb2ludEluc2lkZVkoeSkpOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc1BvaW50SW5zaWRlWChmbG9hdCB4KSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRnJhbWVMYXlvdXQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9GcmFtZUxheW91dC5qYXZhCmluZGV4IGQ5ZDRhZDcuLmIwMjkzMjggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9GcmFtZUxheW91dC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9GcmFtZUxheW91dC5qYXZhCkBAIC05NywxMSArOTcsMTUgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CiAgICAgfQogCi0gICAgcHVibGljIEZyYW1lTGF5b3V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgRnJhbWVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GcmFtZUxheW91dCwKLSAgICAgICAgICAgICAgICAgICAgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBGcmFtZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkZyYW1lTGF5b3V0LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBtRm9yZWdyb3VuZEdyYXZpdHkgPSBhLmdldEludCgKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5GcmFtZUxheW91dF9mb3JlZ3JvdW5kR3Jhdml0eSwgbUZvcmVncm91bmRHcmF2aXR5KTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9HYWxsZXJ5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR2FsbGVyeS5qYXZhCmluZGV4IDc4YmE2ZTAuLmY3YzgzOWYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9HYWxsZXJ5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0dhbGxlcnkuamF2YQpAQCAtMTk2LDE0ICsxOTYsMTggQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgUi5hdHRyLmdhbGxlcnlTdHlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIEdhbGxlcnkoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBHYWxsZXJ5KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEdhbGxlcnkoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIAogICAgICAgICBtR2VzdHVyZURldGVjdG9yID0gbmV3IEdlc3R1cmVEZXRlY3Rvcihjb250ZXh0LCB0aGlzKTsKICAgICAgICAgbUdlc3R1cmVEZXRlY3Rvci5zZXRJc0xvbmdwcmVzc0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdhbGxlcnksIGRlZlN0eWxlLCAwKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdhbGxlcnksIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIGludCBpbmRleCA9IGEuZ2V0SW50KGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdhbGxlcnlfZ3Jhdml0eSwgLTEpOwogICAgICAgICBpZiAoaW5kZXggPj0gMCkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0dyaWRMYXlvdXQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9HcmlkTGF5b3V0LmphdmEKaW5kZXggNTRjYzNmNC4uODUxMTYwMSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0dyaWRMYXlvdXQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR3JpZExheW91dC5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC53aWRnZXQ7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKQEAgLTM1LDYgKzM2LDggQEAKIGltcG9ydCBhbmRyb2lkLndpZGdldC5SZW1vdGVWaWV3cy5SZW1vdGVWaWV3OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkFycmF5OwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKQEAgLTE2NSw2ICsxNjgsMTEgQEAKIAogICAgIC8vIFB1YmxpYyBjb25zdGFudHMKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoe0hPUklaT05UQUwsIFZFUlRJQ0FMfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgT3JpZW50YXRpb24ge30KKwogICAgIC8qKgogICAgICAqIFRoZSBob3Jpem9udGFsIG9yaWVudGF0aW9uLgogICAgICAqLwpAQCAtMTg2LDYgKzE5NCwxMSBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOREVGSU5FRCA9IEludGVnZXIuTUlOX1ZBTFVFOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7QUxJR05fQk9VTkRTLCBBTElHTl9NQVJHSU5TfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgQWxpZ25tZW50TW9kZSB7fQorCiAgICAgLyoqCiAgICAgICogVGhpcyBjb25zdGFudCBpcyBhbiB7QGxpbmsgI3NldEFsaWdubWVudE1vZGUoaW50KSBhbGlnbm1lbnRNb2RlfS4KICAgICAgKiBXaGVuIHRoZSB7QGNvZGUgYWxpZ25tZW50TW9kZX0gaXMgc2V0IHRvIHtAbGluayAjQUxJR05fQk9VTkRTfSwgYWxpZ25tZW50CkBAIC0yNjIsMTMgKzI3NSwyMyBAQAogCiAgICAgLy8gQ29uc3RydWN0b3JzCiAKLSAgICAvKioKLSAgICAgKiB7QGluaGVyaXREb2N9Ci0gICAgICovCi0gICAgcHVibGljIEdyaWRMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBHcmlkTGF5b3V0KENvbnRleHQgY29udGV4dCkgeworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOworICAgIH0KKworICAgIHB1YmxpYyBHcmlkTGF5b3V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOworICAgIH0KKworICAgIHB1YmxpYyBHcmlkTGF5b3V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEdyaWRMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1EZWZhdWx0R2FwID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbE9mZnNldChSLmRpbWVuLmRlZmF1bHRfZ2FwKTsKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5HcmlkTGF5b3V0KTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBSLnN0eWxlYWJsZS5HcmlkTGF5b3V0LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNldFJvd0NvdW50KGEuZ2V0SW50KFJPV19DT1VOVCwgREVGQVVMVF9DT1VOVCkpOwogICAgICAgICAgICAgc2V0Q29sdW1uQ291bnQoYS5nZXRJbnQoQ09MVU1OX0NPVU5ULCBERUZBVUxUX0NPVU5UKSk7CkBAIC0yODIsMjEgKzMwNSw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKioKLSAgICAgKiB7QGluaGVyaXREb2N9Ci0gICAgICovCi0gICAgcHVibGljIEdyaWRMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoge0Bpbmhlcml0RG9jfQotICAgICAqLwotICAgIHB1YmxpYyBHcmlkTGF5b3V0KENvbnRleHQgY29udGV4dCkgewotICAgICAgICAvL25vaW5zcGVjdGlvbiBOdWxsYWJsZVByb2JsZW1zCi0gICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7Ci0gICAgfQotCiAgICAgLy8gSW1wbGVtZW50YXRpb24KIAogICAgIC8qKgpAQCAtMzA4LDYgKzMxNiw3IEBACiAgICAgICoKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNHcmlkTGF5b3V0X29yaWVudGF0aW9uCiAgICAgICovCisgICAgQE9yaWVudGF0aW9uCiAgICAgcHVibGljIGludCBnZXRPcmllbnRhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1PcmllbnRhdGlvbjsKICAgICB9CkBAIC0zNDgsNyArMzU3LDcgQEAKICAgICAgKgogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0dyaWRMYXlvdXRfb3JpZW50YXRpb24KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRPcmllbnRhdGlvbihpbnQgb3JpZW50YXRpb24pIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRPcmllbnRhdGlvbihAT3JpZW50YXRpb24gaW50IG9yaWVudGF0aW9uKSB7CiAgICAgICAgIGlmICh0aGlzLm1PcmllbnRhdGlvbiAhPSBvcmllbnRhdGlvbikgewogICAgICAgICAgICAgdGhpcy5tT3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKICAgICAgICAgICAgIGludmFsaWRhdGVTdHJ1Y3R1cmUoKTsKQEAgLTQ3OSw2ICs0ODgsNyBAQAogICAgICAqCiAgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjR3JpZExheW91dF9hbGlnbm1lbnRNb2RlCiAgICAgICovCisgICAgQEFsaWdubWVudE1vZGUKICAgICBwdWJsaWMgaW50IGdldEFsaWdubWVudE1vZGUoKSB7CiAgICAgICAgIHJldHVybiBtQWxpZ25tZW50TW9kZTsKICAgICB9CkBAIC00OTgsNyArNTA4LDcgQEAKICAgICAgKgogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0dyaWRMYXlvdXRfYWxpZ25tZW50TW9kZQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEFsaWdubWVudE1vZGUoaW50IGFsaWdubWVudE1vZGUpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRBbGlnbm1lbnRNb2RlKEBBbGlnbm1lbnRNb2RlIGludCBhbGlnbm1lbnRNb2RlKSB7CiAgICAgICAgIHRoaXMubUFsaWdubWVudE1vZGUgPSBhbGlnbm1lbnRNb2RlOwogICAgICAgICByZXF1ZXN0TGF5b3V0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0dyaWRWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR3JpZFZpZXcuamF2YQppbmRleCAxNWRhZjgzLi5hY2Q3MTFkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR3JpZFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR3JpZFZpZXcuamF2YQpAQCAtMTYsMTIgKzE2LDE0IEBACiAKIHBhY2thZ2UgYW5kcm9pZC53aWRnZXQ7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLm9zLlRyYWNlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLk1hdGhVdGlsczsKIGltcG9ydCBhbmRyb2lkLnZpZXcuR3Jhdml0eTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlNvdW5kRWZmZWN0Q29uc3RhbnRzOwpAQCAtMzMsOSArMzUsMTEgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQ29sbGVjdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkNvbGxlY3Rpb25JdGVtSW5mbzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkdyaWRMYXlvdXRBbmltYXRpb25Db250cm9sbGVyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFic0xpc3RWaWV3LkxheW91dFBhcmFtczsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5SZW1vdGVWaWV3cy5SZW1vdGVWaWV3OwogCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKKwogCiAvKioKICAqIEEgdmlldyB0aGF0IHNob3dzIGl0ZW1zIGluIHR3by1kaW1lbnNpb25hbCBzY3JvbGxpbmcgZ3JpZC4gVGhlIGl0ZW1zIGluIHRoZQpAQCAtNTMsNiArNTcsMTEgQEAKICAqLwogQFJlbW90ZVZpZXcKIHB1YmxpYyBjbGFzcyBHcmlkVmlldyBleHRlbmRzIEFic0xpc3RWaWV3IHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHtOT19TVFJFVENILCBTVFJFVENIX1NQQUNJTkcsIFNUUkVUQ0hfQ09MVU1OX1dJRFRILCBTVFJFVENIX1NQQUNJTkdfVU5JRk9STX0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFN0cmV0Y2hNb2RlIHt9CisKICAgICAvKioKICAgICAgKiBEaXNhYmxlcyBzdHJldGNoaW5nLgogICAgICAqIApAQCAtMTEwLDExICsxMTksMTUgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmdyaWRWaWV3U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBHcmlkVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEdyaWRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5HcmlkVmlldywgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBHcmlkVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdyaWRWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBpbnQgaFNwYWNpbmcgPSBhLmdldERpbWVuc2lvblBpeGVsT2Zmc2V0KAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdyaWRWaWV3X2hvcml6b250YWxTcGFjaW5nLCAwKTsKQEAgLTEyMDIsNiArMTIxNSwyNCBAQAogCiAgICAgICAgICAgICBzZXRTZWxlY3RlZFBvc2l0aW9uSW50KG1OZXh0U2VsZWN0ZWRQb3NpdGlvbik7CiAKKyAgICAgICAgICAgIC8vIFJlbWVtYmVyIHdoaWNoIGNoaWxkLCBpZiBhbnksIGhhZCBhY2Nlc3NpYmlsaXR5IGZvY3VzLgorICAgICAgICAgICAgZmluYWwgaW50IGFjY2Vzc2liaWxpdHlGb2N1c1Bvc2l0aW9uOworICAgICAgICAgICAgZmluYWwgVmlldyBhY2Nlc3NGb2N1c2VkQ2hpbGQgPSBnZXRBY2Nlc3NpYmlsaXR5Rm9jdXNlZENoaWxkKCk7CisgICAgICAgICAgICBpZiAoYWNjZXNzRm9jdXNlZENoaWxkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Rm9jdXNQb3NpdGlvbiA9IGdldFBvc2l0aW9uRm9yVmlldyhhY2Nlc3NGb2N1c2VkQ2hpbGQpOworICAgICAgICAgICAgICAgIGFjY2Vzc0ZvY3VzZWRDaGlsZC5zZXRIYXNUcmFuc2llbnRTdGF0ZSh0cnVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eUZvY3VzUG9zaXRpb24gPSBJTlZBTElEX1BPU0lUSU9OOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIGNoaWxkIGNvbnRhaW5pbmcgZm9jdXMsIGlmIGFueSwgaGFzIHRyYW5zaWVudCBzdGF0ZS4KKyAgICAgICAgICAgIC8vIElmIHRoZSBsaXN0IGRhdGEgaGFzbid0IGNoYW5nZWQsIG9yIGlmIHRoZSBhZGFwdGVyIGhhcyBzdGFibGUKKyAgICAgICAgICAgIC8vIElEcywgdGhpcyB3aWxsIG1haW50YWluIGZvY3VzLgorICAgICAgICAgICAgZmluYWwgVmlldyBmb2N1c2VkQ2hpbGQgPSBnZXRGb2N1c2VkQ2hpbGQoKTsKKyAgICAgICAgICAgIGlmIChmb2N1c2VkQ2hpbGQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZvY3VzZWRDaGlsZC5zZXRIYXNUcmFuc2llbnRTdGF0ZSh0cnVlKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gUHVsbCBhbGwgY2hpbGRyZW4gaW50byB0aGUgUmVjeWNsZUJpbi4KICAgICAgICAgICAgIC8vIFRoZXNlIHZpZXdzIHdpbGwgYmUgcmV1c2VkIGlmIHBvc3NpYmxlCiAgICAgICAgICAgICBmaW5hbCBpbnQgZmlyc3RQb3NpdGlvbiA9IG1GaXJzdFBvc2l0aW9uOwpAQCAtMTIxNiw3ICsxMjQ3LDYgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gQ2xlYXIgb3V0IG9sZCB2aWV3cwotICAgICAgICAgICAgLy9yZW1vdmVBbGxWaWV3c0luTGF5b3V0KCk7CiAgICAgICAgICAgICBkZXRhY2hBbGxWaWV3c0Zyb21QYXJlbnQoKTsKICAgICAgICAgICAgIHJlY3ljbGVCaW4ucmVtb3ZlU2tpcHBlZFNjcmFwKCk7CiAKQEAgLTEyODcsNiArMTMxNywyNyBAQAogICAgICAgICAgICAgICAgIG1TZWxlY3RvclJlY3Quc2V0RW1wdHkoKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKGFjY2Vzc0ZvY3VzZWRDaGlsZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYWNjZXNzRm9jdXNlZENoaWxkLnNldEhhc1RyYW5zaWVudFN0YXRlKGZhbHNlKTsKKworICAgICAgICAgICAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBtYWludGFpbiBhY2Nlc3NpYmlsaXR5IGZvY3VzIG9uIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgIC8vIHZpZXcsIGF0dGVtcHQgdG8gcmVzdG9yZSBpdCB0byB0aGUgcHJldmlvdXMgcG9zaXRpb24uCisgICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3NGb2N1c2VkQ2hpbGQuaXNBY2Nlc3NpYmlsaXR5Rm9jdXNlZCgpCisgICAgICAgICAgICAgICAgICAgICYmIGFjY2Vzc2liaWxpdHlGb2N1c1Bvc2l0aW9uICE9IElOVkFMSURfUE9TSVRJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQm91bmQgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgdmlzaWJsZSBjaGlsZHJlbi4KKyAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHBvc2l0aW9uID0gTWF0aFV0aWxzLmNvbnN0cmFpbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5Rm9jdXNQb3NpdGlvbiAtIG1GaXJzdFBvc2l0aW9uLCAwLCBnZXRDaGlsZENvdW50KCkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgVmlldyByZXN0b3JlVmlldyA9IGdldENoaWxkQXQocG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdG9yZVZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZVZpZXcucmVxdWVzdEFjY2Vzc2liaWxpdHlGb2N1cygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZm9jdXNlZENoaWxkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmb2N1c2VkQ2hpbGQuc2V0SGFzVHJhbnNpZW50U3RhdGUoZmFsc2UpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBtTGF5b3V0TW9kZSA9IExBWU9VVF9OT1JNQUw7CiAgICAgICAgICAgICBtRGF0YUNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChtUG9zaXRpb25TY3JvbGxBZnRlckxheW91dCAhPSBudWxsKSB7CkBAIC0yMDU2LDEzICsyMTA3LDE0IEBACiAgICAgICoKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNHcmlkVmlld19zdHJldGNoTW9kZQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFN0cmV0Y2hNb2RlKGludCBzdHJldGNoTW9kZSkgeworICAgIHB1YmxpYyB2b2lkIHNldFN0cmV0Y2hNb2RlKEBTdHJldGNoTW9kZSBpbnQgc3RyZXRjaE1vZGUpIHsKICAgICAgICAgaWYgKHN0cmV0Y2hNb2RlICE9IG1TdHJldGNoTW9kZSkgewogICAgICAgICAgICAgbVN0cmV0Y2hNb2RlID0gc3RyZXRjaE1vZGU7CiAgICAgICAgICAgICByZXF1ZXN0TGF5b3V0SWZOZWNlc3NhcnkoKTsKICAgICAgICAgfQogICAgIH0KIAorICAgIEBTdHJldGNoTW9kZQogICAgIHB1YmxpYyBpbnQgZ2V0U3RyZXRjaE1vZGUoKSB7CiAgICAgICAgIHJldHVybiBtU3RyZXRjaE1vZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0hvcml6b250YWxTY3JvbGxWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvSG9yaXpvbnRhbFNjcm9sbFZpZXcuamF2YQppbmRleCBkYWIwOTYyLi4yNWQ0ZjQyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvSG9yaXpvbnRhbFNjcm9sbFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvSG9yaXpvbnRhbFNjcm9sbFZpZXcuamF2YQpAQCAtMTQ2LDEyICsxNDYsMTcgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmhvcml6b250YWxTY3JvbGxWaWV3U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBIb3Jpem9udGFsU2Nyb2xsVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEhvcml6b250YWxTY3JvbGxWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEhvcml6b250YWxTY3JvbGxWaWV3KAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIGluaXRTY3JvbGxWaWV3KCk7CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGFuZHJvaWQuUi5zdHlsZWFibGUuSG9yaXpvbnRhbFNjcm9sbFZpZXcsIGRlZlN0eWxlLCAwKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBhbmRyb2lkLlIuc3R5bGVhYmxlLkhvcml6b250YWxTY3JvbGxWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBzZXRGaWxsVmlld3BvcnQoYS5nZXRCb29sZWFuKGFuZHJvaWQuUi5zdHlsZWFibGUuSG9yaXpvbnRhbFNjcm9sbFZpZXdfZmlsbFZpZXdwb3J0LCBmYWxzZSkpOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvSW1hZ2VCdXR0b24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9JbWFnZUJ1dHRvbi5qYXZhCmluZGV4IDM3OTM1NGNhLi4zYTIwNjI4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvSW1hZ2VCdXR0b24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvSW1hZ2VCdXR0b24uamF2YQpAQCAtMTcsMTYgKzE3LDExIEBACiBwYWNrYWdlIGFuZHJvaWQud2lkZ2V0OwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlJlbW90ZVZpZXdzLlJlbW90ZVZpZXc7CiAKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCiAvKioKICAqIDxwPgogICogRGlzcGxheXMgYSBidXR0b24gd2l0aCBhbiBpbWFnZSAoaW5zdGVhZCBvZiB0ZXh0KSB0aGF0IGNhbiBiZSBwcmVzc2VkIApAQCAtODMsOCArNzgsMTIgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmltYWdlQnV0dG9uU3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBJbWFnZUJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEltYWdlQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIEltYWdlQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBzZXRGb2N1c2FibGUodHJ1ZSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvSW1hZ2VWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvSW1hZ2VWaWV3LmphdmEKaW5kZXggN2RhZjc5OC4uNzlkNWU1ZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0ltYWdlVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9JbWFnZVZpZXcuamF2YQpAQCAtMTE5LDEyICsxMTksMTcgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CiAgICAgfQogCi0gICAgcHVibGljIEltYWdlVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEltYWdlVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBJbWFnZVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKICAgICAgICAgaW5pdEltYWdlVmlldygpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5JbWFnZVZpZXcsIGRlZlN0eWxlLCAwKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5JbWFnZVZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIERyYXdhYmxlIGQgPSBhLmdldERyYXdhYmxlKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkltYWdlVmlld19zcmMpOwogICAgICAgICBpZiAoZCAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGVnYWN5VGltZVBpY2tlckRlbGVnYXRlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGVnYWN5VGltZVBpY2tlckRlbGVnYXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzNGQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MZWdhY3lUaW1lUGlja2VyRGVsZWdhdGUuamF2YQpAQCAtMCwwICsxLDYzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC53aWRnZXQ7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVGb3JtYXQ7CitpbXBvcnQgYW5kcm9pZC50ZXh0LmZvcm1hdC5EYXRlVXRpbHM7CitpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CitpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvOworaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5FZGl0b3JJbmZvOworaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZE1hbmFnZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKKworaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0U3ltYm9sczsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuVmlldy5JTVBPUlRBTlRfRk9SX0FDQ0VTU0lCSUxJVFlfQVVUTzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LlZpZXcuSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX1lFUzsKKworLyoqCisgKiBBIGRlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgYmFzaWMgVGltZVBpY2tlcgorICovCitjbGFzcyBMZWdhY3lUaW1lUGlja2VyRGVsZWdhdGUgZXh0ZW5kcyBUaW1lUGlja2VyLkFic3RyYWN0VGltZVBpY2tlckRlbGVnYXRlIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9FTkFCTEVEX1NUQVRFID0gdHJ1ZTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIT1VSU19JTl9IQUxGX0RBWSA9IDEyOworCisgICAgLy8gc3RhdGUKKyAgICBwcml2YXRlIGJvb2xlYW4gbUlzMjRIb3VyVmlldzsKKworICAgIHByaXZhdGUgYm9vbGVhbiBtSXNBbTsKKworICAgIC8vIHVpIGNvbXBvbmVudHMKKyAgICBwcml2YXRlIGZpbmFsIE51bWJlclBpY2tlciBtSG91clNwaW5uZXI7CisKKyAgICBwcml2YXRlIGZpbmFsIE51bWJlclBpY2tlciBtTWludXRlU3Bpbm5lcjsKKworICAgIHByaXZhdGUgZmluYWwgTnVtYmVyUGlja2VyIG1BbVBtU3Bpbm5lcjsKKworICAgIHByaXZhdGUgZmluYWwgRWRpdFRleHQgbUhvdXJTcGlubmVySW5wdXQ7CisKKyAgICBwcml2YXRlIGZpbmFsIEVkaXRUZXh0IG1NaW51dGVTcGlubmVySW5wdXQ7CisKKyAgICBwcml2YXRlIGZpbmFsIEVkaXRUZXh0IG1BbVBtU3Bpbm5lcklucHV0OworCisgICAgcHJpdmF0ZSBmaW5hbCBUZXh0VmlldyBtRGl2aWRlcjsKKworICAgIC8vIE5vdGUgdGhhdCB0aGUgbGVnYWN5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBUaW1lUGlja2VyIGlzCisgICAgLy8gdXNpbmcgYSBidXR0b24gZm9yIHRvZ2dsaW5nIGJldHdlZW4gQU0vUE0gd2hpbGUgdGhlIG5ldworICAgIC8vIHZlcnNpb24gdXNlcyBhIE51bWJlclBpY2tlciBzcGlubmVyLiBUaGVyZWZvcmUgdGhlIGNvZGUKKyAgICAvLyBhY2NvbW1vZGF0ZXMgdGhlc2UgdHdvIGNhc2VzIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlLgorICAgIHByaXZhdGUgZmluYWwgQnV0dG9uIG1BbVBtQnV0dG9uOworCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBtQW1QbVN0cmluZ3M7CisKKyAgICBwcml2YXRlIGJvb2xlYW4gbUlzRW5hYmxlZCA9IERFRkFVTFRfRU5BQkxFRF9TVEFURTsKKworICAgIHByaXZhdGUgQ2FsZW5kYXIgbVRlbXBDYWxlbmRhcjsKKworICAgIHByaXZhdGUgYm9vbGVhbiBtSG91cldpdGhUd29EaWdpdDsKKyAgICBwcml2YXRlIGNoYXIgbUhvdXJGb3JtYXQ7CisKKyAgICAvKioKKyAgICAgKiBBIG5vLW9wIGNhbGxiYWNrIHVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIGF2b2lkIG51bGwgY2hlY2tzIGxhdGVyIGluCisgICAgICogdGhlIGNvZGUuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVGltZVBpY2tlci5PblRpbWVDaGFuZ2VkTGlzdGVuZXIgTk9fT1BfQ0hBTkdFX0xJU1RFTkVSID0KKyAgICAgICAgICAgIG5ldyBUaW1lUGlja2VyLk9uVGltZUNoYW5nZWRMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblRpbWVDaGFuZ2VkKFRpbWVQaWNrZXIgdmlldywgaW50IGhvdXJPZkRheSwgaW50IG1pbnV0ZSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICBwdWJsaWMgTGVnYWN5VGltZVBpY2tlckRlbGVnYXRlKFRpbWVQaWNrZXIgZGVsZWdhdG9yLCBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihkZWxlZ2F0b3IsIGNvbnRleHQpOworCisgICAgICAgIC8vIHByb2Nlc3Mgc3R5bGUgYXR0cmlidXRlcworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGF0dHJpYnV0ZXNBcnJheSA9IG1Db250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIFIuc3R5bGVhYmxlLlRpbWVQaWNrZXIsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworICAgICAgICBmaW5hbCBpbnQgbGF5b3V0UmVzb3VyY2VJZCA9IGF0dHJpYnV0ZXNBcnJheS5nZXRSZXNvdXJjZUlkKAorICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbGVnYWN5TGF5b3V0LCBSLmxheW91dC50aW1lX3BpY2tlcl9sZWdhY3kpOworICAgICAgICBhdHRyaWJ1dGVzQXJyYXkucmVjeWNsZSgpOworCisgICAgICAgIGZpbmFsIExheW91dEluZmxhdGVyIGluZmxhdGVyID0gKExheW91dEluZmxhdGVyKSBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKAorICAgICAgICAgICAgICAgIENvbnRleHQuTEFZT1VUX0lORkxBVEVSX1NFUlZJQ0UpOworICAgICAgICBpbmZsYXRlci5pbmZsYXRlKGxheW91dFJlc291cmNlSWQsIG1EZWxlZ2F0b3IsIHRydWUpOworCisgICAgICAgIC8vIGhvdXIKKyAgICAgICAgbUhvdXJTcGlubmVyID0gKE51bWJlclBpY2tlcikgZGVsZWdhdG9yLmZpbmRWaWV3QnlJZChSLmlkLmhvdXIpOworICAgICAgICBtSG91clNwaW5uZXIuc2V0T25WYWx1ZUNoYW5nZWRMaXN0ZW5lcihuZXcgTnVtYmVyUGlja2VyLk9uVmFsdWVDaGFuZ2VMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVmFsdWVDaGFuZ2UoTnVtYmVyUGlja2VyIHNwaW5uZXIsIGludCBvbGRWYWwsIGludCBuZXdWYWwpIHsKKyAgICAgICAgICAgICAgICB1cGRhdGVJbnB1dFN0YXRlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFpczI0SG91clZpZXcoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKG9sZFZhbCA9PSBIT1VSU19JTl9IQUxGX0RBWSAtIDEgJiYgbmV3VmFsID09IEhPVVJTX0lOX0hBTEZfREFZKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbGRWYWwgPT0gSE9VUlNfSU5fSEFMRl9EQVkgJiYgbmV3VmFsID09IEhPVVJTX0lOX0hBTEZfREFZIC0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Jc0FtID0gIW1Jc0FtOworICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQW1QbUNvbnRyb2woKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvblRpbWVDaGFuZ2VkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtSG91clNwaW5uZXJJbnB1dCA9IChFZGl0VGV4dCkgbUhvdXJTcGlubmVyLmZpbmRWaWV3QnlJZChSLmlkLm51bWJlcnBpY2tlcl9pbnB1dCk7CisgICAgICAgIG1Ib3VyU3Bpbm5lcklucHV0LnNldEltZU9wdGlvbnMoRWRpdG9ySW5mby5JTUVfQUNUSU9OX05FWFQpOworCisgICAgICAgIC8vIGRpdmlkZXIgKG9ubHkgZm9yIHRoZSBuZXcgd2lkZ2V0IHN0eWxlKQorICAgICAgICBtRGl2aWRlciA9IChUZXh0VmlldykgbURlbGVnYXRvci5maW5kVmlld0J5SWQoUi5pZC5kaXZpZGVyKTsKKyAgICAgICAgaWYgKG1EaXZpZGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIHNldERpdmlkZXJUZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBtaW51dGUKKyAgICAgICAgbU1pbnV0ZVNwaW5uZXIgPSAoTnVtYmVyUGlja2VyKSBtRGVsZWdhdG9yLmZpbmRWaWV3QnlJZChSLmlkLm1pbnV0ZSk7CisgICAgICAgIG1NaW51dGVTcGlubmVyLnNldE1pblZhbHVlKDApOworICAgICAgICBtTWludXRlU3Bpbm5lci5zZXRNYXhWYWx1ZSg1OSk7CisgICAgICAgIG1NaW51dGVTcGlubmVyLnNldE9uTG9uZ1ByZXNzVXBkYXRlSW50ZXJ2YWwoMTAwKTsKKyAgICAgICAgbU1pbnV0ZVNwaW5uZXIuc2V0Rm9ybWF0dGVyKE51bWJlclBpY2tlci5nZXRUd29EaWdpdEZvcm1hdHRlcigpKTsKKyAgICAgICAgbU1pbnV0ZVNwaW5uZXIuc2V0T25WYWx1ZUNoYW5nZWRMaXN0ZW5lcihuZXcgTnVtYmVyUGlja2VyLk9uVmFsdWVDaGFuZ2VMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVmFsdWVDaGFuZ2UoTnVtYmVyUGlja2VyIHNwaW5uZXIsIGludCBvbGRWYWwsIGludCBuZXdWYWwpIHsKKyAgICAgICAgICAgICAgICB1cGRhdGVJbnB1dFN0YXRlKCk7CisgICAgICAgICAgICAgICAgaW50IG1pblZhbHVlID0gbU1pbnV0ZVNwaW5uZXIuZ2V0TWluVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpbnQgbWF4VmFsdWUgPSBtTWludXRlU3Bpbm5lci5nZXRNYXhWYWx1ZSgpOworICAgICAgICAgICAgICAgIGlmIChvbGRWYWwgPT0gbWF4VmFsdWUgJiYgbmV3VmFsID09IG1pblZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBuZXdIb3VyID0gbUhvdXJTcGlubmVyLmdldFZhbHVlKCkgKyAxOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzMjRIb3VyVmlldygpICYmIG5ld0hvdXIgPT0gSE9VUlNfSU5fSEFMRl9EQVkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Jc0FtID0gIW1Jc0FtOworICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQW1QbUNvbnRyb2woKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0VmFsdWUobmV3SG91cik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvbGRWYWwgPT0gbWluVmFsdWUgJiYgbmV3VmFsID09IG1heFZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBuZXdIb3VyID0gbUhvdXJTcGlubmVyLmdldFZhbHVlKCkgLSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzMjRIb3VyVmlldygpICYmIG5ld0hvdXIgPT0gSE9VUlNfSU5fSEFMRl9EQVkgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtSXNBbSA9ICFtSXNBbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUFtUG1Db250cm9sKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbUhvdXJTcGlubmVyLnNldFZhbHVlKG5ld0hvdXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvblRpbWVDaGFuZ2VkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtTWludXRlU3Bpbm5lcklucHV0ID0gKEVkaXRUZXh0KSBtTWludXRlU3Bpbm5lci5maW5kVmlld0J5SWQoUi5pZC5udW1iZXJwaWNrZXJfaW5wdXQpOworICAgICAgICBtTWludXRlU3Bpbm5lcklucHV0LnNldEltZU9wdGlvbnMoRWRpdG9ySW5mby5JTUVfQUNUSU9OX05FWFQpOworCisgICAgICAgICAgICAvKiBHZXQgdGhlIGxvY2FsaXplZCBhbS9wbSBzdHJpbmdzIGFuZCB1c2UgdGhlbSBpbiB0aGUgc3Bpbm5lciAqLworICAgICAgICBtQW1QbVN0cmluZ3MgPSBuZXcgRGF0ZUZvcm1hdFN5bWJvbHMoKS5nZXRBbVBtU3RyaW5ncygpOworCisgICAgICAgIC8vIGFtL3BtCisgICAgICAgIFZpZXcgYW1QbVZpZXcgPSBtRGVsZWdhdG9yLmZpbmRWaWV3QnlJZChSLmlkLmFtUG0pOworICAgICAgICBpZiAoYW1QbVZpZXcgaW5zdGFuY2VvZiBCdXR0b24pIHsKKyAgICAgICAgICAgIG1BbVBtU3Bpbm5lciA9IG51bGw7CisgICAgICAgICAgICBtQW1QbVNwaW5uZXJJbnB1dCA9IG51bGw7CisgICAgICAgICAgICBtQW1QbUJ1dHRvbiA9IChCdXR0b24pIGFtUG1WaWV3OworICAgICAgICAgICAgbUFtUG1CdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgYnV0dG9uKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5yZXF1ZXN0Rm9jdXMoKTsKKyAgICAgICAgICAgICAgICAgICAgbUlzQW0gPSAhbUlzQW07CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUFtUG1Db250cm9sKCk7CisgICAgICAgICAgICAgICAgICAgIG9uVGltZUNoYW5nZWQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1BbVBtQnV0dG9uID0gbnVsbDsKKyAgICAgICAgICAgIG1BbVBtU3Bpbm5lciA9IChOdW1iZXJQaWNrZXIpIGFtUG1WaWV3OworICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldE1pblZhbHVlKDApOworICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldE1heFZhbHVlKDEpOworICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldERpc3BsYXllZFZhbHVlcyhtQW1QbVN0cmluZ3MpOworICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldE9uVmFsdWVDaGFuZ2VkTGlzdGVuZXIobmV3IE51bWJlclBpY2tlci5PblZhbHVlQ2hhbmdlTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25WYWx1ZUNoYW5nZShOdW1iZXJQaWNrZXIgcGlja2VyLCBpbnQgb2xkVmFsLCBpbnQgbmV3VmFsKSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUlucHV0U3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgcGlja2VyLnJlcXVlc3RGb2N1cygpOworICAgICAgICAgICAgICAgICAgICBtSXNBbSA9ICFtSXNBbTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlQW1QbUNvbnRyb2woKTsKKyAgICAgICAgICAgICAgICAgICAgb25UaW1lQ2hhbmdlZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbUFtUG1TcGlubmVySW5wdXQgPSAoRWRpdFRleHQpIG1BbVBtU3Bpbm5lci5maW5kVmlld0J5SWQoUi5pZC5udW1iZXJwaWNrZXJfaW5wdXQpOworICAgICAgICAgICAgbUFtUG1TcGlubmVySW5wdXQuc2V0SW1lT3B0aW9ucyhFZGl0b3JJbmZvLklNRV9BQ1RJT05fRE9ORSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNBbVBtQXRTdGFydCgpKSB7CisgICAgICAgICAgICAvLyBNb3ZlIHRoZSBhbS9wbSB2aWV3IHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgICAgICAgIFZpZXdHcm91cCBhbVBtUGFyZW50ID0gKFZpZXdHcm91cCkgZGVsZWdhdG9yLmZpbmRWaWV3QnlJZChSLmlkLnRpbWVQaWNrZXJMYXlvdXQpOworICAgICAgICAgICAgYW1QbVBhcmVudC5yZW1vdmVWaWV3KGFtUG1WaWV3KTsKKyAgICAgICAgICAgIGFtUG1QYXJlbnQuYWRkVmlldyhhbVBtVmlldywgMCk7CisgICAgICAgICAgICAvLyBTd2FwIGxheW91dCBtYXJnaW5zIGlmIG5lZWRlZC4gVGhleSBtYXkgYmUgbm90IHN5bW1ldHJpY2FsIChPbGQgU3RhbmRhcmQgVGhlbWUKKyAgICAgICAgICAgIC8vIGZvciBleGFtcGxlIGFuZCBub3QgZm9yIEhvbG8gVGhlbWUpCisgICAgICAgICAgICBWaWV3R3JvdXAuTWFyZ2luTGF5b3V0UGFyYW1zIGxwID0KKyAgICAgICAgICAgICAgICAgICAgKFZpZXdHcm91cC5NYXJnaW5MYXlvdXRQYXJhbXMpIGFtUG1WaWV3LmdldExheW91dFBhcmFtcygpOworICAgICAgICAgICAgZmluYWwgaW50IHN0YXJ0TWFyZ2luID0gbHAuZ2V0TWFyZ2luU3RhcnQoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBlbmRNYXJnaW4gPSBscC5nZXRNYXJnaW5FbmQoKTsKKyAgICAgICAgICAgIGlmIChzdGFydE1hcmdpbiAhPSBlbmRNYXJnaW4pIHsKKyAgICAgICAgICAgICAgICBscC5zZXRNYXJnaW5TdGFydChlbmRNYXJnaW4pOworICAgICAgICAgICAgICAgIGxwLnNldE1hcmdpbkVuZChzdGFydE1hcmdpbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBnZXRIb3VyRm9ybWF0RGF0YSgpOworCisgICAgICAgIC8vIHVwZGF0ZSBjb250cm9scyB0byBpbml0aWFsIHN0YXRlCisgICAgICAgIHVwZGF0ZUhvdXJDb250cm9sKCk7CisgICAgICAgIHVwZGF0ZU1pbnV0ZUNvbnRyb2woKTsKKyAgICAgICAgdXBkYXRlQW1QbUNvbnRyb2woKTsKKworICAgICAgICBzZXRPblRpbWVDaGFuZ2VkTGlzdGVuZXIoTk9fT1BfQ0hBTkdFX0xJU1RFTkVSKTsKKworICAgICAgICAvLyBzZXQgdG8gY3VycmVudCB0aW1lCisgICAgICAgIHNldEN1cnJlbnRIb3VyKG1UZW1wQ2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSk7CisgICAgICAgIHNldEN1cnJlbnRNaW51dGUobVRlbXBDYWxlbmRhci5nZXQoQ2FsZW5kYXIuTUlOVVRFKSk7CisKKyAgICAgICAgaWYgKCFpc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBzZXQgdGhlIGNvbnRlbnQgZGVzY3JpcHRpb25zCisgICAgICAgIHNldENvbnRlbnREZXNjcmlwdGlvbnMoKTsKKworICAgICAgICAvLyBJZiBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQgdGhpcyB2aWV3IGlzIGltcG9ydGFudCBmb3IgYWNjZXNzaWJpbGl0eS4KKyAgICAgICAgaWYgKG1EZWxlZ2F0b3IuZ2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eSgpID09IElNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9BVVRPKSB7CisgICAgICAgICAgICBtRGVsZWdhdG9yLnNldEltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkoSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX1lFUyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZ2V0SG91ckZvcm1hdERhdGEoKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBiZXN0RGF0ZVRpbWVQYXR0ZXJuID0gRGF0ZUZvcm1hdC5nZXRCZXN0RGF0ZVRpbWVQYXR0ZXJuKG1DdXJyZW50TG9jYWxlLAorICAgICAgICAgICAgICAgIChtSXMyNEhvdXJWaWV3KSA/ICJIbSIgOiAiaG0iKTsKKyAgICAgICAgZmluYWwgaW50IGxlbmd0aFBhdHRlcm4gPSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLmxlbmd0aCgpOworICAgICAgICBtSG91cldpdGhUd29EaWdpdCA9IGZhbHNlOworICAgICAgICBjaGFyIGhvdXJGb3JtYXQgPSAnXDAnOworICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmV0dXJuZWQgcGF0dGVybiBpcyBzaW5nbGUgb3IgZG91YmxlICdIJywgJ2gnLCAnSycsICdrJy4gV2UgYWxzbyBzYXZlCisgICAgICAgIC8vIHRoZSBob3VyIGZvcm1hdCB0aGF0IHdlIGZvdW5kLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aFBhdHRlcm47IGkrKykgeworICAgICAgICAgICAgZmluYWwgY2hhciBjID0gYmVzdERhdGVUaW1lUGF0dGVybi5jaGFyQXQoaSk7CisgICAgICAgICAgICBpZiAoYyA9PSAnSCcgfHwgYyA9PSAnaCcgfHwgYyA9PSAnSycgfHwgYyA9PSAnaycpIHsKKyAgICAgICAgICAgICAgICBtSG91ckZvcm1hdCA9IGM7CisgICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgbGVuZ3RoUGF0dGVybiAmJiBjID09IGJlc3REYXRlVGltZVBhdHRlcm4uY2hhckF0KGkgKyAxKSkgeworICAgICAgICAgICAgICAgICAgICBtSG91cldpdGhUd29EaWdpdCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGlzQW1QbUF0U3RhcnQoKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBiZXN0RGF0ZVRpbWVQYXR0ZXJuID0gRGF0ZUZvcm1hdC5nZXRCZXN0RGF0ZVRpbWVQYXR0ZXJuKG1DdXJyZW50TG9jYWxlLAorICAgICAgICAgICAgICAgICJobSIgLyogc2tlbGV0b24gKi8pOworCisgICAgICAgIHJldHVybiBiZXN0RGF0ZVRpbWVQYXR0ZXJuLnN0YXJ0c1dpdGgoImEiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgdGltZSBzZXBhcmF0b3IgaXMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBDTERSIGFuZCBjYW5ub3QgYmUgc3VwcG9zZWQgdG8gYmUgIjoiLgorICAgICAqCisgICAgICogU2VlIGh0dHA6Ly91bmljb2RlLm9yZy9jbGRyL3RyYWMvYnJvd3Nlci90cnVuay9jb21tb24vbWFpbgorICAgICAqCisgICAgICogV2UgcGFzcyB0aGUgY29ycmVjdCAic2tlbGV0b24iIGRlcGVuZGluZyBvbiAxMiBvciAyNCBob3VycyB2aWV3IGFuZCB0aGVuIGV4dHJhY3QgdGhlCisgICAgICogc2VwYXJhdG9yIGFzIHRoZSBjaGFyYWN0ZXIgd2hpY2ggaXMganVzdCBhZnRlciB0aGUgaG91ciBtYXJrZXIgaW4gdGhlIHJldHVybmVkIHBhdHRlcm4uCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHNldERpdmlkZXJUZXh0KCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgc2tlbGV0b24gPSAobUlzMjRIb3VyVmlldykgPyAiSG0iIDogImhtIjsKKyAgICAgICAgZmluYWwgU3RyaW5nIGJlc3REYXRlVGltZVBhdHRlcm4gPSBEYXRlRm9ybWF0LmdldEJlc3REYXRlVGltZVBhdHRlcm4obUN1cnJlbnRMb2NhbGUsCisgICAgICAgICAgICAgICAgc2tlbGV0b24pOworICAgICAgICBmaW5hbCBTdHJpbmcgc2VwYXJhdG9yVGV4dDsKKyAgICAgICAgaW50IGhvdXJJbmRleCA9IGJlc3REYXRlVGltZVBhdHRlcm4ubGFzdEluZGV4T2YoJ0gnKTsKKyAgICAgICAgaWYgKGhvdXJJbmRleCA9PSAtMSkgeworICAgICAgICAgICAgaG91ckluZGV4ID0gYmVzdERhdGVUaW1lUGF0dGVybi5sYXN0SW5kZXhPZignaCcpOworICAgICAgICB9CisgICAgICAgIGlmIChob3VySW5kZXggPT0gLTEpIHsKKyAgICAgICAgICAgIC8vIERlZmF1bHQgY2FzZQorICAgICAgICAgICAgc2VwYXJhdG9yVGV4dCA9ICI6IjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBtaW51dGVJbmRleCA9IGJlc3REYXRlVGltZVBhdHRlcm4uaW5kZXhPZignbScsIGhvdXJJbmRleCArIDEpOworICAgICAgICAgICAgaWYgIChtaW51dGVJbmRleCA9PSAtMSkgeworICAgICAgICAgICAgICAgIHNlcGFyYXRvclRleHQgPSBDaGFyYWN0ZXIudG9TdHJpbmcoYmVzdERhdGVUaW1lUGF0dGVybi5jaGFyQXQoaG91ckluZGV4ICsgMSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZXBhcmF0b3JUZXh0ID0gYmVzdERhdGVUaW1lUGF0dGVybi5zdWJzdHJpbmcoaG91ckluZGV4ICsgMSwgbWludXRlSW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1EaXZpZGVyLnNldFRleHQoc2VwYXJhdG9yVGV4dCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0Q3VycmVudEhvdXIoSW50ZWdlciBjdXJyZW50SG91cikgeworICAgICAgICBzZXRDdXJyZW50SG91cihjdXJyZW50SG91ciwgdHJ1ZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldEN1cnJlbnRIb3VyKEludGVnZXIgY3VycmVudEhvdXIsIGJvb2xlYW4gbm90aWZ5VGltZUNoYW5nZWQpIHsKKyAgICAgICAgLy8gd2h5IHdhcyBJbnRlZ2VyIHVzZWQgaW4gdGhlIGZpcnN0IHBsYWNlPworICAgICAgICBpZiAoY3VycmVudEhvdXIgPT0gbnVsbCB8fCBjdXJyZW50SG91ciA9PSBnZXRDdXJyZW50SG91cigpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpczI0SG91clZpZXcoKSkgeworICAgICAgICAgICAgLy8gY29udmVydCBbMCwyM10gb3JkaW5hbCB0byB3YWxsIGNsb2NrIGRpc3BsYXkKKyAgICAgICAgICAgIGlmIChjdXJyZW50SG91ciA+PSBIT1VSU19JTl9IQUxGX0RBWSkgeworICAgICAgICAgICAgICAgIG1Jc0FtID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRIb3VyID4gSE9VUlNfSU5fSEFMRl9EQVkpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEhvdXIgPSBjdXJyZW50SG91ciAtIEhPVVJTX0lOX0hBTEZfREFZOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbUlzQW0gPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SG91ciA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRIb3VyID0gSE9VUlNfSU5fSEFMRl9EQVk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdXBkYXRlQW1QbUNvbnRyb2woKTsKKyAgICAgICAgfQorICAgICAgICBtSG91clNwaW5uZXIuc2V0VmFsdWUoY3VycmVudEhvdXIpOworICAgICAgICBpZiAobm90aWZ5VGltZUNoYW5nZWQpIHsKKyAgICAgICAgICAgIG9uVGltZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJbnRlZ2VyIGdldEN1cnJlbnRIb3VyKCkgeworICAgICAgICBpbnQgY3VycmVudEhvdXIgPSBtSG91clNwaW5uZXIuZ2V0VmFsdWUoKTsKKyAgICAgICAgaWYgKGlzMjRIb3VyVmlldygpKSB7CisgICAgICAgICAgICByZXR1cm4gY3VycmVudEhvdXI7CisgICAgICAgIH0gZWxzZSBpZiAobUlzQW0pIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50SG91ciAlIEhPVVJTX0lOX0hBTEZfREFZOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIChjdXJyZW50SG91ciAlIEhPVVJTX0lOX0hBTEZfREFZKSArIEhPVVJTX0lOX0hBTEZfREFZOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0Q3VycmVudE1pbnV0ZShJbnRlZ2VyIGN1cnJlbnRNaW51dGUpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRNaW51dGUgPT0gZ2V0Q3VycmVudE1pbnV0ZSgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbU1pbnV0ZVNwaW5uZXIuc2V0VmFsdWUoY3VycmVudE1pbnV0ZSk7CisgICAgICAgIG9uVGltZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRDdXJyZW50TWludXRlKCkgeworICAgICAgICByZXR1cm4gbU1pbnV0ZVNwaW5uZXIuZ2V0VmFsdWUoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRJczI0SG91clZpZXcoQm9vbGVhbiBpczI0SG91clZpZXcpIHsKKyAgICAgICAgaWYgKG1JczI0SG91clZpZXcgPT0gaXMyNEhvdXJWaWV3KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gY2FjaGUgdGhlIGN1cnJlbnQgaG91ciBzaW5jZSBzcGlubmVyIHJhbmdlIGNoYW5nZXMgYW5kIEJFRk9SRSBjaGFuZ2luZyBtSXMyNEhvdXJWaWV3ISEKKyAgICAgICAgaW50IGN1cnJlbnRIb3VyID0gZ2V0Q3VycmVudEhvdXIoKTsKKyAgICAgICAgLy8gT3JkZXIgaXMgaW1wb3J0YW50IGhlcmUuCisgICAgICAgIG1JczI0SG91clZpZXcgPSBpczI0SG91clZpZXc7CisgICAgICAgIGdldEhvdXJGb3JtYXREYXRhKCk7CisgICAgICAgIHVwZGF0ZUhvdXJDb250cm9sKCk7CisgICAgICAgIC8vIHNldCB2YWx1ZSBhZnRlciBzcGlubmVyIHJhbmdlIGlzIHVwZGF0ZWQKKyAgICAgICAgc2V0Q3VycmVudEhvdXIoY3VycmVudEhvdXIsIGZhbHNlKTsKKyAgICAgICAgdXBkYXRlTWludXRlQ29udHJvbCgpOworICAgICAgICB1cGRhdGVBbVBtQ29udHJvbCgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzMjRIb3VyVmlldygpIHsKKyAgICAgICAgcmV0dXJuIG1JczI0SG91clZpZXc7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0T25UaW1lQ2hhbmdlZExpc3RlbmVyKFRpbWVQaWNrZXIuT25UaW1lQ2hhbmdlZExpc3RlbmVyIG9uVGltZUNoYW5nZWRMaXN0ZW5lcikgeworICAgICAgICBtT25UaW1lQ2hhbmdlZExpc3RlbmVyID0gb25UaW1lQ2hhbmdlZExpc3RlbmVyOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgIG1NaW51dGVTcGlubmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgICAgIGlmIChtRGl2aWRlciAhPSBudWxsKSB7CisgICAgICAgICAgICBtRGl2aWRlci5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgICAgICB9CisgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgICAgICBpZiAobUFtUG1TcGlubmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1BbVBtU3Bpbm5lci5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUFtUG1CdXR0b24uc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgfQorICAgICAgICBtSXNFbmFibGVkID0gZW5hYmxlZDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisgICAgICAgIHJldHVybiBtSXNFbmFibGVkOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldFNob3dEb25lQnV0dG9uKGJvb2xlYW4gc2hvd0RvbmVCdXR0b24pIHsKKyAgICAgICAgLy8gTm90aGluZyB0byBkbworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldERpc21pc3NDYWxsYmFjayhUaW1lUGlja2VyLlRpbWVQaWNrZXJEaXNtaXNzQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICAgICAgLy8gTm90aGluZyB0byBkbworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0QmFzZWxpbmUoKSB7CisgICAgICAgIHJldHVybiBtSG91clNwaW5uZXIuZ2V0QmFzZWxpbmUoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKSB7CisgICAgICAgIHNldEN1cnJlbnRMb2NhbGUobmV3Q29uZmlnLmxvY2FsZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFBhcmNlbGFibGUgb25TYXZlSW5zdGFuY2VTdGF0ZShQYXJjZWxhYmxlIHN1cGVyU3RhdGUpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTYXZlZFN0YXRlKHN1cGVyU3RhdGUsIGdldEN1cnJlbnRIb3VyKCksIGdldEN1cnJlbnRNaW51dGUoKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25SZXN0b3JlSW5zdGFuY2VTdGF0ZShQYXJjZWxhYmxlIHN0YXRlKSB7CisgICAgICAgIFNhdmVkU3RhdGUgc3MgPSAoU2F2ZWRTdGF0ZSkgc3RhdGU7CisgICAgICAgIHNldEN1cnJlbnRIb3VyKHNzLmdldEhvdXIoKSk7CisgICAgICAgIHNldEN1cnJlbnRNaW51dGUoc3MuZ2V0TWludXRlKCkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CisgICAgICAgIG9uUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgICAgICBpbnQgZmxhZ3MgPSBEYXRlVXRpbHMuRk9STUFUX1NIT1dfVElNRTsKKyAgICAgICAgaWYgKG1JczI0SG91clZpZXcpIHsKKyAgICAgICAgICAgIGZsYWdzIHw9IERhdGVVdGlscy5GT1JNQVRfMjRIT1VSOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmxhZ3MgfD0gRGF0ZVV0aWxzLkZPUk1BVF8xMkhPVVI7CisgICAgICAgIH0KKyAgICAgICAgbVRlbXBDYWxlbmRhci5zZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVksIGdldEN1cnJlbnRIb3VyKCkpOworICAgICAgICBtVGVtcENhbGVuZGFyLnNldChDYWxlbmRhci5NSU5VVEUsIGdldEN1cnJlbnRNaW51dGUoKSk7CisgICAgICAgIFN0cmluZyBzZWxlY3RlZERhdGVVdHRlcmFuY2UgPSBEYXRlVXRpbHMuZm9ybWF0RGF0ZVRpbWUobUNvbnRleHQsCisgICAgICAgICAgICAgICAgbVRlbXBDYWxlbmRhci5nZXRUaW1lSW5NaWxsaXMoKSwgZmxhZ3MpOworICAgICAgICBldmVudC5nZXRUZXh0KCkuYWRkKHNlbGVjdGVkRGF0ZVV0dGVyYW5jZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgICAgICBldmVudC5zZXRDbGFzc05hbWUoVGltZVBpY2tlci5jbGFzcy5nZXROYW1lKCkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gaW5mbykgeworICAgICAgICBpbmZvLnNldENsYXNzTmFtZShUaW1lUGlja2VyLmNsYXNzLmdldE5hbWUoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUlucHV0U3RhdGUoKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGlmIHRoZSB1c2VyIGNoYW5nZXMgdGhlIHZhbHVlIGFuZCB0aGUgSU1FIGlzIGFjdGl2ZQorICAgICAgICAvLyBmb3Igb25lIG9mIHRoZSBpbnB1dHMgaWYgdGhpcyB3aWRnZXQsIHRoZSBJTUUgaXMgY2xvc2VkLiBJZiB0aGUgdXNlcgorICAgICAgICAvLyBjaGFuZ2VkIHRoZSB2YWx1ZSB2aWEgdGhlIElNRSBhbmQgdGhlcmUgaXMgYSBuZXh0IGlucHV0IHRoZSBJTUUgd2lsbAorICAgICAgICAvLyBiZSBzaG93biwgb3RoZXJ3aXNlIHRoZSB1c2VyIGNob3NlIGFub3RoZXIgbWVhbnMgb2YgY2hhbmdpbmcgdGhlCisgICAgICAgIC8vIHZhbHVlIGFuZCBoYXZpbmcgdGhlIElNRSB1cCBtYWtlcyBubyBzZW5zZS4KKyAgICAgICAgSW5wdXRNZXRob2RNYW5hZ2VyIGlucHV0TWV0aG9kTWFuYWdlciA9IElucHV0TWV0aG9kTWFuYWdlci5wZWVrSW5zdGFuY2UoKTsKKyAgICAgICAgaWYgKGlucHV0TWV0aG9kTWFuYWdlciAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoaW5wdXRNZXRob2RNYW5hZ2VyLmlzQWN0aXZlKG1Ib3VyU3Bpbm5lcklucHV0KSkgeworICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lcklucHV0LmNsZWFyRm9jdXMoKTsKKyAgICAgICAgICAgICAgICBpbnB1dE1ldGhvZE1hbmFnZXIuaGlkZVNvZnRJbnB1dEZyb21XaW5kb3cobURlbGVnYXRvci5nZXRXaW5kb3dUb2tlbigpLCAwKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRNZXRob2RNYW5hZ2VyLmlzQWN0aXZlKG1NaW51dGVTcGlubmVySW5wdXQpKSB7CisgICAgICAgICAgICAgICAgbU1pbnV0ZVNwaW5uZXJJbnB1dC5jbGVhckZvY3VzKCk7CisgICAgICAgICAgICAgICAgaW5wdXRNZXRob2RNYW5hZ2VyLmhpZGVTb2Z0SW5wdXRGcm9tV2luZG93KG1EZWxlZ2F0b3IuZ2V0V2luZG93VG9rZW4oKSwgMCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0TWV0aG9kTWFuYWdlci5pc0FjdGl2ZShtQW1QbVNwaW5uZXJJbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBtQW1QbVNwaW5uZXJJbnB1dC5jbGVhckZvY3VzKCk7CisgICAgICAgICAgICAgICAgaW5wdXRNZXRob2RNYW5hZ2VyLmhpZGVTb2Z0SW5wdXRGcm9tV2luZG93KG1EZWxlZ2F0b3IuZ2V0V2luZG93VG9rZW4oKSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlQW1QbUNvbnRyb2woKSB7CisgICAgICAgIGlmIChpczI0SG91clZpZXcoKSkgeworICAgICAgICAgICAgaWYgKG1BbVBtU3Bpbm5lciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbUFtUG1CdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGluZGV4ID0gbUlzQW0gPyBDYWxlbmRhci5BTSA6IENhbGVuZGFyLlBNOworICAgICAgICAgICAgaWYgKG1BbVBtU3Bpbm5lciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldFZhbHVlKGluZGV4KTsKKyAgICAgICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtQW1QbUJ1dHRvbi5zZXRUZXh0KG1BbVBtU3RyaW5nc1tpbmRleF0pOworICAgICAgICAgICAgICAgIG1BbVBtQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtRGVsZWdhdG9yLnNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVklFV19TRUxFQ1RFRCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY3VycmVudCBsb2NhbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbG9jYWxlIFRoZSBjdXJyZW50IGxvY2FsZS4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50TG9jYWxlKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgc3VwZXIuc2V0Q3VycmVudExvY2FsZShsb2NhbGUpOworICAgICAgICBtVGVtcENhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UobG9jYWxlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgb25UaW1lQ2hhbmdlZCgpIHsKKyAgICAgICAgbURlbGVnYXRvci5zZW5kQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1ZJRVdfU0VMRUNURUQpOworICAgICAgICBpZiAobU9uVGltZUNoYW5nZWRMaXN0ZW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICBtT25UaW1lQ2hhbmdlZExpc3RlbmVyLm9uVGltZUNoYW5nZWQobURlbGVnYXRvciwgZ2V0Q3VycmVudEhvdXIoKSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudE1pbnV0ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVIb3VyQ29udHJvbCgpIHsKKyAgICAgICAgaWYgKGlzMjRIb3VyVmlldygpKSB7CisgICAgICAgICAgICAvLyAnaycgbWVhbnMgMS0yNCBob3VyCisgICAgICAgICAgICBpZiAobUhvdXJGb3JtYXQgPT0gJ2snKSB7CisgICAgICAgICAgICAgICAgbUhvdXJTcGlubmVyLnNldE1pblZhbHVlKDEpOworICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRNYXhWYWx1ZSgyNCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRNaW5WYWx1ZSgwKTsKKyAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0TWF4VmFsdWUoMjMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gJ0snIG1lYW5zIDAtMTEgaG91cgorICAgICAgICAgICAgaWYgKG1Ib3VyRm9ybWF0ID09ICdLJykgeworICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRNaW5WYWx1ZSgwKTsKKyAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0TWF4VmFsdWUoMTEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0TWluVmFsdWUoMSk7CisgICAgICAgICAgICAgICAgbUhvdXJTcGlubmVyLnNldE1heFZhbHVlKDEyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtSG91clNwaW5uZXIuc2V0Rm9ybWF0dGVyKG1Ib3VyV2l0aFR3b0RpZ2l0ID8gTnVtYmVyUGlja2VyLmdldFR3b0RpZ2l0Rm9ybWF0dGVyKCkgOiBudWxsKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlTWludXRlQ29udHJvbCgpIHsKKyAgICAgICAgaWYgKGlzMjRIb3VyVmlldygpKSB7CisgICAgICAgICAgICBtTWludXRlU3Bpbm5lcklucHV0LnNldEltZU9wdGlvbnMoRWRpdG9ySW5mby5JTUVfQUNUSU9OX0RPTkUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbU1pbnV0ZVNwaW5uZXJJbnB1dC5zZXRJbWVPcHRpb25zKEVkaXRvckluZm8uSU1FX0FDVElPTl9ORVhUKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRDb250ZW50RGVzY3JpcHRpb25zKCkgeworICAgICAgICAvLyBNaW51dGUKKyAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1NaW51dGVTcGlubmVyLCBSLmlkLmluY3JlbWVudCwKKyAgICAgICAgICAgICAgICBSLnN0cmluZy50aW1lX3BpY2tlcl9pbmNyZW1lbnRfbWludXRlX2J1dHRvbik7CisgICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtTWludXRlU3Bpbm5lciwgUi5pZC5kZWNyZW1lbnQsCisgICAgICAgICAgICAgICAgUi5zdHJpbmcudGltZV9waWNrZXJfZGVjcmVtZW50X21pbnV0ZV9idXR0b24pOworICAgICAgICAvLyBIb3VyCisgICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtSG91clNwaW5uZXIsIFIuaWQuaW5jcmVtZW50LAorICAgICAgICAgICAgICAgIFIuc3RyaW5nLnRpbWVfcGlja2VyX2luY3JlbWVudF9ob3VyX2J1dHRvbik7CisgICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtSG91clNwaW5uZXIsIFIuaWQuZGVjcmVtZW50LAorICAgICAgICAgICAgICAgIFIuc3RyaW5nLnRpbWVfcGlja2VyX2RlY3JlbWVudF9ob3VyX2J1dHRvbik7CisgICAgICAgIC8vIEFNL1BNCisgICAgICAgIGlmIChtQW1QbVNwaW5uZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1BbVBtU3Bpbm5lciwgUi5pZC5pbmNyZW1lbnQsCisgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLnRpbWVfcGlja2VyX2luY3JlbWVudF9zZXRfcG1fYnV0dG9uKTsKKyAgICAgICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtQW1QbVNwaW5uZXIsIFIuaWQuZGVjcmVtZW50LAorICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy50aW1lX3BpY2tlcl9kZWNyZW1lbnRfc2V0X2FtX2J1dHRvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKFZpZXcgcm9vdCwgaW50IHZpZXdJZCwgaW50IGNvbnREZXNjUmVzSWQpIHsKKyAgICAgICAgVmlldyB0YXJnZXQgPSByb290LmZpbmRWaWV3QnlJZCh2aWV3SWQpOworICAgICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRhcmdldC5zZXRDb250ZW50RGVzY3JpcHRpb24obUNvbnRleHQuZ2V0U3RyaW5nKGNvbnREZXNjUmVzSWQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFVzZWQgdG8gc2F2ZSAvIHJlc3RvcmUgc3RhdGUgb2YgdGltZSBwaWNrZXIKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTYXZlZFN0YXRlIGV4dGVuZHMgVmlldy5CYXNlU2F2ZWRTdGF0ZSB7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUhvdXI7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU1pbnV0ZTsKKworICAgICAgICBwcml2YXRlIFNhdmVkU3RhdGUoUGFyY2VsYWJsZSBzdXBlclN0YXRlLCBpbnQgaG91ciwgaW50IG1pbnV0ZSkgeworICAgICAgICAgICAgc3VwZXIoc3VwZXJTdGF0ZSk7CisgICAgICAgICAgICBtSG91ciA9IGhvdXI7CisgICAgICAgICAgICBtTWludXRlID0gbWludXRlOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBTYXZlZFN0YXRlKFBhcmNlbCBpbikgeworICAgICAgICAgICAgc3VwZXIoaW4pOworICAgICAgICAgICAgbUhvdXIgPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBtTWludXRlID0gaW4ucmVhZEludCgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRIb3VyKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Ib3VyOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRNaW51dGUoKSB7CisgICAgICAgICAgICByZXR1cm4gbU1pbnV0ZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBkZXN0LCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgICAgIHN1cGVyLndyaXRlVG9QYXJjZWwoZGVzdCwgZmxhZ3MpOworICAgICAgICAgICAgZGVzdC53cml0ZUludChtSG91cik7CisgICAgICAgICAgICBkZXN0LndyaXRlSW50KG1NaW51dGUpOworICAgICAgICB9CisKKyAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoeyJ1bnVzZWQiLCAiaGlkaW5nIn0pCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFNhdmVkU3RhdGU+IENSRUFUT1IgPSBuZXcgQ3JlYXRvcjxTYXZlZFN0YXRlPigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBTYXZlZFN0YXRlIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIGluKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTYXZlZFN0YXRlKGluKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIFNhdmVkU3RhdGVbXSBuZXdBcnJheShpbnQgc2l6ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2F2ZWRTdGF0ZVtzaXplXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQuamF2YQppbmRleCBhZDYwYTk1Li42NWYxYWI3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGluZWFyTGF5b3V0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpbmVhckxheW91dC5qYXZhCkBAIC0xOCw2ICsxOCw3IEBACiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CkBAIC0zMSw2ICszMiw5IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlJlbW90ZVZpZXdzLlJlbW90ZVZpZXc7CiAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OworCiAKIC8qKgogICogQSBMYXlvdXQgdGhhdCBhcnJhbmdlcyBpdHMgY2hpbGRyZW4gaW4gYSBzaW5nbGUgY29sdW1uIG9yIGEgc2luZ2xlIHJvdy4gVGhlIGRpcmVjdGlvbiBvZiAKQEAgLTU3LDkgKzYxLDI1IEBACiAgKi8KIEBSZW1vdGVWaWV3CiBwdWJsaWMgY2xhc3MgTGluZWFyTGF5b3V0IGV4dGVuZHMgVmlld0dyb3VwIHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHtIT1JJWk9OVEFMLCBWRVJUSUNBTH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIE9yaWVudGF0aW9uTW9kZSB7fQorCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSE9SSVpPTlRBTCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkVSVElDQUwgPSAxOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZihmbGFnID0gdHJ1ZSwKKyAgICAgICAgICAgIHZhbHVlID0geworICAgICAgICAgICAgICAgIFNIT1dfRElWSURFUl9OT05FLAorICAgICAgICAgICAgICAgIFNIT1dfRElWSURFUl9CRUdJTk5JTkcsCisgICAgICAgICAgICAgICAgU0hPV19ESVZJREVSX01JRERMRSwKKyAgICAgICAgICAgICAgICBTSE9XX0RJVklERVJfRU5ECisgICAgICAgICAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBEaXZpZGVyTW9kZSB7fQorCiAgICAgLyoqCiAgICAgICogRG9uJ3Qgc2hvdyBhbnkgZGl2aWRlcnMuCiAgICAgICovCkBAIC0xNjUsMTggKzE4NSwyMiBAQAogICAgIHByaXZhdGUgaW50IG1EaXZpZGVyUGFkZGluZzsKIAogICAgIHB1YmxpYyBMaW5lYXJMYXlvdXQoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwogICAgIH0KIAogICAgIHB1YmxpYyBMaW5lYXJMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CiAgICAgfQogICAgIAotICAgIHB1YmxpYyBMaW5lYXJMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBMaW5lYXJMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkxpbmVhckxheW91dCwgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBMaW5lYXJMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5MaW5lYXJMYXlvdXQsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIGludCBpbmRleCA9IGEuZ2V0SW50KGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkxpbmVhckxheW91dF9vcmllbnRhdGlvbiwgLTEpOwogICAgICAgICBpZiAoaW5kZXggPj0gMCkgewpAQCAtMjE0LDcgKzIzOCw3IEBACiAgICAgICogICAgICAgICAgICAgICAgICAgICB7QGxpbmsgI1NIT1dfRElWSURFUl9NSURETEV9LCBvciB7QGxpbmsgI1NIT1dfRElWSURFUl9FTkR9LAogICAgICAqICAgICAgICAgICAgICAgICAgICAgb3Ige0BsaW5rICNTSE9XX0RJVklERVJfTk9ORX0gdG8gc2hvdyBubyBkaXZpZGVycy4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRTaG93RGl2aWRlcnMoaW50IHNob3dEaXZpZGVycykgeworICAgIHB1YmxpYyB2b2lkIHNldFNob3dEaXZpZGVycyhARGl2aWRlck1vZGUgaW50IHNob3dEaXZpZGVycykgewogICAgICAgICBpZiAoc2hvd0RpdmlkZXJzICE9IG1TaG93RGl2aWRlcnMpIHsKICAgICAgICAgICAgIHJlcXVlc3RMYXlvdXQoKTsKICAgICAgICAgfQpAQCAtMjMwLDYgKzI1NCw3IEBACiAgICAgICogQHJldHVybiBBIGZsYWcgc2V0IGluZGljYXRpbmcgaG93IGRpdmlkZXJzIHNob3VsZCBiZSBzaG93biBhcm91bmQgaXRlbXMuCiAgICAgICogQHNlZSAjc2V0U2hvd0RpdmlkZXJzKGludCkKICAgICAgKi8KKyAgICBARGl2aWRlck1vZGUKICAgICBwdWJsaWMgaW50IGdldFNob3dEaXZpZGVycygpIHsKICAgICAgICAgcmV0dXJuIG1TaG93RGl2aWRlcnM7CiAgICAgfQpAQCAtMTY3MywxMiArMTY5OCwxMiBAQAogICAgIAogICAgIC8qKgogICAgICAqIFNob3VsZCB0aGUgbGF5b3V0IGJlIGEgY29sdW1uIG9yIGEgcm93LgotICAgICAqIEBwYXJhbSBvcmllbnRhdGlvbiBQYXNzIEhPUklaT05UQUwgb3IgVkVSVElDQUwuIERlZmF1bHQKLSAgICAgKiB2YWx1ZSBpcyBIT1JJWk9OVEFMLgorICAgICAqIEBwYXJhbSBvcmllbnRhdGlvbiBQYXNzIHtAbGluayAjSE9SSVpPTlRBTH0gb3Ige0BsaW5rICNWRVJUSUNBTH0uIERlZmF1bHQKKyAgICAgKiB2YWx1ZSBpcyB7QGxpbmsgI0hPUklaT05UQUx9LgogICAgICAqIAogICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0xpbmVhckxheW91dF9vcmllbnRhdGlvbgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE9yaWVudGF0aW9uKGludCBvcmllbnRhdGlvbikgeworICAgIHB1YmxpYyB2b2lkIHNldE9yaWVudGF0aW9uKEBPcmllbnRhdGlvbk1vZGUgaW50IG9yaWVudGF0aW9uKSB7CiAgICAgICAgIGlmIChtT3JpZW50YXRpb24gIT0gb3JpZW50YXRpb24pIHsKICAgICAgICAgICAgIG1PcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOwogICAgICAgICAgICAgcmVxdWVzdExheW91dCgpOwpAQCAtMTY5MCw2ICsxNzE1LDcgQEAKICAgICAgKiAKICAgICAgKiBAcmV0dXJuIGVpdGhlciB7QGxpbmsgI0hPUklaT05UQUx9IG9yIHtAbGluayAjVkVSVElDQUx9CiAgICAgICovCisgICAgQE9yaWVudGF0aW9uTW9kZQogICAgIHB1YmxpYyBpbnQgZ2V0T3JpZW50YXRpb24oKSB7CiAgICAgICAgIHJldHVybiBtT3JpZW50YXRpb247CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpc3RQb3B1cFdpbmRvdy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpc3RQb3B1cFdpbmRvdy5qYXZhCmluZGV4IDY2ZmU0NmYuLjY0OTUzZjggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MaXN0UG9wdXBXaW5kb3cuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGlzdFBvcHVwV2luZG93LmphdmEKQEAgLTMzLDcgKzMzLDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuTWVhc3VyZVNwZWM7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25BdHRhY2hTdGF0ZUNoYW5nZUxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uVG91Y2hMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0NvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MaXN0Vmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpc3RWaWV3LmphdmEKaW5kZXggNzgyMzdjMy4uYzQ2MTcyMyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpc3RWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpc3RWaWV3LmphdmEKQEAgLTM5LDcgKzM5LDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0RlYnVnOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdQYXJlbnQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdSb290SW1wbDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvOwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mby5Db2xsZWN0aW9uSW5mbzsKQEAgLTE0MiwxMSArMTQxLDE1IEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5saXN0Vmlld1N0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgTGlzdFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBMaXN0VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGlzdFZpZXcsIGRlZlN0eWxlLCAwKTsKKyAgICBwdWJsaWMgTGlzdFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5MaXN0VmlldywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgQ2hhclNlcXVlbmNlW10gZW50cmllcyA9IGEuZ2V0VGV4dEFycmF5KAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkxpc3RWaWV3X2VudHJpZXMpOwpAQCAtMjYzLDYgKzI2Niw3IEBACiAgICAgICAgIGluZm8uZGF0YSA9IGRhdGE7CiAgICAgICAgIGluZm8uaXNTZWxlY3RhYmxlID0gaXNTZWxlY3RhYmxlOwogICAgICAgICBtSGVhZGVyVmlld0luZm9zLmFkZChpbmZvKTsKKyAgICAgICAgbUFyZUFsbEl0ZW1zU2VsZWN0YWJsZSAmPSBpc1NlbGVjdGFibGU7CiAKICAgICAgICAgLy8gV3JhcCB0aGUgYWRhcHRlciBpZiBpdCB3YXNuJ3QgYWxyZWFkeSB3cmFwcGVkLgogICAgICAgICBpZiAobUFkYXB0ZXIgIT0gbnVsbCkgewpAQCAtMzU2LDYgKzM2MCw3IEBACiAgICAgICAgIGluZm8uZGF0YSA9IGRhdGE7CiAgICAgICAgIGluZm8uaXNTZWxlY3RhYmxlID0gaXNTZWxlY3RhYmxlOwogICAgICAgICBtRm9vdGVyVmlld0luZm9zLmFkZChpbmZvKTsKKyAgICAgICAgbUFyZUFsbEl0ZW1zU2VsZWN0YWJsZSAmPSBpc1NlbGVjdGFibGU7CiAKICAgICAgICAgLy8gV3JhcCB0aGUgYWRhcHRlciBpZiBpdCB3YXNuJ3QgYWxyZWFkeSB3cmFwcGVkLgogICAgICAgICBpZiAobUFkYXB0ZXIgIT0gbnVsbCkgewpAQCAtMTcyOSwzNCArMTczNCw2IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQHJldHVybiB0aGUgZGlyZWN0IGNoaWxkIHRoYXQgY29udGFpbnMgYWNjZXNzaWJpbGl0eSBmb2N1cywgb3IgbnVsbCBpZiBubwotICAgICAqICAgICAgICAgY2hpbGQgY29udGFpbnMgYWNjZXNzaWJpbGl0eSBmb2N1cwotICAgICAqLwotICAgIHByaXZhdGUgVmlldyBnZXRBY2Nlc3NpYmlsaXR5Rm9jdXNlZENoaWxkKCkgewotICAgICAgICBmaW5hbCBWaWV3Um9vdEltcGwgdmlld1Jvb3RJbXBsID0gZ2V0Vmlld1Jvb3RJbXBsKCk7Ci0gICAgICAgIGlmICh2aWV3Um9vdEltcGwgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBWaWV3IGZvY3VzZWRWaWV3ID0gdmlld1Jvb3RJbXBsLmdldEFjY2Vzc2liaWxpdHlGb2N1c2VkSG9zdCgpOwotICAgICAgICBpZiAoZm9jdXNlZFZpZXcgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBWaWV3UGFyZW50IHZpZXdQYXJlbnQgPSBmb2N1c2VkVmlldy5nZXRQYXJlbnQoKTsKLSAgICAgICAgd2hpbGUgKCh2aWV3UGFyZW50IGluc3RhbmNlb2YgVmlldykgJiYgKHZpZXdQYXJlbnQgIT0gdGhpcykpIHsKLSAgICAgICAgICAgIGZvY3VzZWRWaWV3ID0gKFZpZXcpIHZpZXdQYXJlbnQ7Ci0gICAgICAgICAgICB2aWV3UGFyZW50ID0gdmlld1BhcmVudC5nZXRQYXJlbnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghKHZpZXdQYXJlbnQgaW5zdGFuY2VvZiBWaWV3KSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZm9jdXNlZFZpZXc7Ci0gICAgfQotCi0gICAgLyoqCiAgICAgICogT2J0YWluIHRoZSB2aWV3IGFuZCBhZGQgaXQgdG8gb3VyIGxpc3Qgb2YgY2hpbGRyZW4uIFRoZSB2aWV3IGNhbiBiZSBtYWRlCiAgICAgICogZnJlc2gsIGNvbnZlcnRlZCBmcm9tIGFuIHVudXNlZCB2aWV3LCBvciB1c2VkIGFzIGlzIGlmIGl0IHdhcyBpbiB0aGUKICAgICAgKiByZWN5Y2xlIGJpbi4KQEAgLTMyNjYsMTQgKzMyNDMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcmF3RGl2aWRlcnMgJiYgKGJvdHRvbSA8IGxpc3RCb3R0b20pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEoZHJhd092ZXJzY3JvbGxGb290ZXIgJiYgaXNMYXN0SXRlbSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbmV4dEluZGV4ID0gKGl0ZW1JbmRleCArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERyYXcgZGl2aWRlcnMgYmV0d2VlbiBlbmFibGVkIGl0ZW1zLCBoZWFkZXJzIGFuZC9vcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvb3RlcnMgd2hlbiBlbmFibGVkLCBhbmQgdGhlIGVuZCBvZiB0aGUgbGlzdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJlQWxsSXRlbXNTZWxlY3RhYmxlIHx8ICgoYWRhcHRlci5pc0VuYWJsZWQoaXRlbUluZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGhlYWRlckRpdmlkZXJzICYmIGlzSGVhZGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGZvb3RlckRpdmlkZXJzICYmIGlzRm9vdGVyKSkgJiYgKGlzTGFzdEl0ZW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGFkYXB0ZXIuaXNFbmFibGVkKG5leHRJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChoZWFkZXJEaXZpZGVycyAmJiAobmV4dEluZGV4IDwgaGVhZGVyQ291bnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGZvb3RlckRpdmlkZXJzICYmIChuZXh0SW5kZXggPj0gZm9vdGVyTGltaXQpKSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRHJhdyBkaXZpZGVycyBiZXR3ZWVuIGVuYWJsZWQgaXRlbXMsIGhlYWRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQvb3IgZm9vdGVycyB3aGVuIGVuYWJsZWQgYW5kIHJlcXVlc3RlZCwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIGxhc3QgZW5hYmxlZCBpdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGFwdGVyLmlzRW5hYmxlZChpdGVtSW5kZXgpICYmIChoZWFkZXJEaXZpZGVycyB8fCAhaXNIZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChuZXh0SW5kZXggPj0gaGVhZGVyQ291bnQpKSAmJiAoaXNMYXN0SXRlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYWRhcHRlci5pc0VuYWJsZWQobmV4dEluZGV4KSAmJiAoZm9vdGVyRGl2aWRlcnMgfHwgIWlzRm9vdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChuZXh0SW5kZXggPCBmb290ZXJMaW1pdCkpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMudG9wID0gYm90dG9tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMuYm90dG9tID0gYm90dG9tICsgZGl2aWRlckhlaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0RpdmlkZXIoY2FudmFzLCBib3VuZHMsIGkpOwpAQCAtMzMxNSwxNCArMzI5MSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRyYXdEaXZpZGVycyAmJiAodG9wID4gZWZmZWN0aXZlUGFkZGluZ1RvcCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGlzRmlyc3RJdGVtID0gKGkgPT0gc3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBwcmV2aW91c0luZGV4ID0gKGl0ZW1JbmRleCAtIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERyYXcgZGl2aWRlcnMgYmV0d2VlbiBlbmFibGVkIGl0ZW1zLCBoZWFkZXJzIGFuZC9vcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvb3RlcnMgd2hlbiBlbmFibGVkLCBhbmQgdGhlIGVuZCBvZiB0aGUgbGlzdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJlQWxsSXRlbXNTZWxlY3RhYmxlIHx8ICgoYWRhcHRlci5pc0VuYWJsZWQoaXRlbUluZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGhlYWRlckRpdmlkZXJzICYmIGlzSGVhZGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGZvb3RlckRpdmlkZXJzICYmIGlzRm9vdGVyKSkgJiYgKGlzRmlyc3RJdGVtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhZGFwdGVyLmlzRW5hYmxlZChwcmV2aW91c0luZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGhlYWRlckRpdmlkZXJzICYmIChwcmV2aW91c0luZGV4IDwgaGVhZGVyQ291bnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGZvb3RlckRpdmlkZXJzICYmIChwcmV2aW91c0luZGV4ID49IGZvb3RlckxpbWl0KSkpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERyYXcgZGl2aWRlcnMgYmV0d2VlbiBlbmFibGVkIGl0ZW1zLCBoZWFkZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kL29yIGZvb3RlcnMgd2hlbiBlbmFibGVkIGFuZCByZXF1ZXN0ZWQsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlZm9yZSB0aGUgZmlyc3QgZW5hYmxlZCBpdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGFwdGVyLmlzRW5hYmxlZChpdGVtSW5kZXgpICYmIChoZWFkZXJEaXZpZGVycyB8fCAhaXNIZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwcmV2aW91c0luZGV4ID49IGhlYWRlckNvdW50KSkgJiYgKGlzRmlyc3RJdGVtIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLmlzRW5hYmxlZChwcmV2aW91c0luZGV4KSAmJiAoZm9vdGVyRGl2aWRlcnMgfHwgIWlzRm9vdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwcmV2aW91c0luZGV4IDwgZm9vdGVyTGltaXQpKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnRvcCA9IHRvcCAtIGRpdmlkZXJIZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5ib3R0b20gPSB0b3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdpdmUgdGhlIG1ldGhvZCB0aGUgY2hpbGQgQUJPVkUgdGhlIGRpdmlkZXIsCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTXVsdGlBdXRvQ29tcGxldGVUZXh0Vmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L011bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXcuamF2YQppbmRleCAwYjMwYzg0Li5jYmQwMWIwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTXVsdGlBdXRvQ29tcGxldGVUZXh0Vmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9NdWx0aUF1dG9Db21wbGV0ZVRleHRWaWV3LmphdmEKQEAgLTY3LDggKzY3LDEzIEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5hdXRvQ29tcGxldGVUZXh0Vmlld1N0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgTXVsdGlBdXRvQ29tcGxldGVUZXh0VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIE11bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTXVsdGlBdXRvQ29tcGxldGVUZXh0VmlldygKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgIH0KIAogICAgIC8qIHBhY2thZ2UgKi8gdm9pZCBmaW5pc2hJbml0KCkgeyB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTnVtYmVyUGlja2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTnVtYmVyUGlja2VyLmphdmEKaW5kZXggYzBmZGUyZS4uNDRjNDk4NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L051bWJlclBpY2tlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9OdW1iZXJQaWNrZXIuamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQud2lkZ2V0OwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uV2lkZ2V0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3Q7CkBAIC01Myw2ICs1NCw4IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIGltcG9ydCBsaWJjb3JlLmljdS5Mb2NhbGVEYXRhOwogCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKQEAgLTQ5Myw2ICs0OTYsMTAgQEAKICAgICAgKiBJbnRlcmZhY2UgdG8gbGlzdGVuIGZvciB0aGUgcGlja2VyIHNjcm9sbCBzdGF0ZS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50ZXJmYWNlIE9uU2Nyb2xsTGlzdGVuZXIgeworICAgICAgICAvKiogQGhpZGUgKi8KKyAgICAgICAgQEludERlZih7U0NST0xMX1NUQVRFX0lETEUsIFNDUk9MTF9TVEFURV9UT1VDSF9TQ1JPTEwsIFNDUk9MTF9TVEFURV9GTElOR30pCisgICAgICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICAgICAgcHVibGljIEBpbnRlcmZhY2UgU2Nyb2xsU3RhdGUge30KIAogICAgICAgICAvKioKICAgICAgICAgICogVGhlIHZpZXcgaXMgbm90IHNjcm9sbGluZy4KQEAgLTUxOCw3ICs1MjUsNyBAQAogICAgICAgICAgKiAgICAgICAgICAgIHtAbGluayAjU0NST0xMX1NUQVRFX1RPVUNIX1NDUk9MTH0gb3IKICAgICAgICAgICogICAgICAgICAgICB7QGxpbmsgI1NDUk9MTF9TVEFURV9JRExFfS4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU2Nyb2xsU3RhdGVDaGFuZ2UoTnVtYmVyUGlja2VyIHZpZXcsIGludCBzY3JvbGxTdGF0ZSk7CisgICAgICAgIHB1YmxpYyB2b2lkIG9uU2Nyb2xsU3RhdGVDaGFuZ2UoTnVtYmVyUGlja2VyIHZpZXcsIEBTY3JvbGxTdGF0ZSBpbnQgc2Nyb2xsU3RhdGUpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTU5LDE0ICs1NjYsMzMgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBjb250ZXh0IHRoZSBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudC4KICAgICAgKiBAcGFyYW0gYXR0cnMgYSBjb2xsZWN0aW9uIG9mIGF0dHJpYnV0ZXMuCi0gICAgICogQHBhcmFtIGRlZlN0eWxlIFRoZSBkZWZhdWx0IHN0eWxlIHRvIGFwcGx5IHRvIHRoaXMgdmlldy4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVBdHRyIEFuIGF0dHJpYnV0ZSBpbiB0aGUgY3VycmVudCB0aGVtZSB0aGF0IGNvbnRhaW5zIGEKKyAgICAgKiAgICAgICAgcmVmZXJlbmNlIHRvIGEgc3R5bGUgcmVzb3VyY2UgdGhhdCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgKiAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KICAgICAgKi8KLSAgICBwdWJsaWMgTnVtYmVyUGlja2VyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgTnVtYmVyUGlja2VyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IG51bWJlciBwaWNrZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IHRoZSBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudC4KKyAgICAgKiBAcGFyYW0gYXR0cnMgYSBjb2xsZWN0aW9uIG9mIGF0dHJpYnV0ZXMuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCisgICAgICogQHBhcmFtIGRlZlN0eWxlUmVzIEEgcmVzb3VyY2UgaWRlbnRpZmllciBvZiBhIHN0eWxlIHJlc291cmNlIHRoYXQKKyAgICAgKiAgICAgICAgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSB2aWV3LCB1c2VkIG9ubHkgaWYKKyAgICAgKiAgICAgICAgZGVmU3R5bGVBdHRyIGlzIDAgb3IgY2FuIG5vdCBiZSBmb3VuZCBpbiB0aGUgdGhlbWUuIENhbiBiZSAwCisgICAgICogICAgICAgIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgTnVtYmVyUGlja2VyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIC8vIHByb2Nlc3Mgc3R5bGUgYXR0cmlidXRlcwotICAgICAgICBUeXBlZEFycmF5IGF0dHJpYnV0ZXNBcnJheSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICBhdHRycywgUi5zdHlsZWFibGUuTnVtYmVyUGlja2VyLCBkZWZTdHlsZSwgMCk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYXR0cmlidXRlc0FycmF5ID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBSLnN0eWxlYWJsZS5OdW1iZXJQaWNrZXIsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBmaW5hbCBpbnQgbGF5b3V0UmVzSWQgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0UmVzb3VyY2VJZCgKICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5OdW1iZXJQaWNrZXJfaW50ZXJuYWxMYXlvdXQsIERFRkFVTFRfTEFZT1VUX1JFU09VUkNFX0lEKTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L092ZXJTY3JvbGxlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L092ZXJTY3JvbGxlci5qYXZhCmluZGV4IGYyMTgxOTkuLjdiM2RkMzEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9PdmVyU2Nyb2xsZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvT3ZlclNjcm9sbGVyLmphdmEKQEAgLTcwLDcgKzcwLDExIEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgT3ZlclNjcm9sbGVyKENvbnRleHQgY29udGV4dCwgSW50ZXJwb2xhdG9yIGludGVycG9sYXRvciwgYm9vbGVhbiBmbHl3aGVlbCkgewotICAgICAgICBtSW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdG9yOworICAgICAgICBpZiAoaW50ZXJwb2xhdG9yID09IG51bGwpIHsKKyAgICAgICAgICAgIG1JbnRlcnBvbGF0b3IgPSBuZXcgU2Nyb2xsZXIuVmlzY291c0ZsdWlkSW50ZXJwb2xhdG9yKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtSW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdG9yOworICAgICAgICB9CiAgICAgICAgIG1GbHl3aGVlbCA9IGZseXdoZWVsOwogICAgICAgICBtU2Nyb2xsZXJYID0gbmV3IFNwbGluZU92ZXJTY3JvbGxlcihjb250ZXh0KTsKICAgICAgICAgbVNjcm9sbGVyWSA9IG5ldyBTcGxpbmVPdmVyU2Nyb2xsZXIoY29udGV4dCk7CkBAIC0xMTIsNyArMTE2LDExIEBACiAgICAgfQogCiAgICAgdm9pZCBzZXRJbnRlcnBvbGF0b3IoSW50ZXJwb2xhdG9yIGludGVycG9sYXRvcikgewotICAgICAgICBtSW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdG9yOworICAgICAgICBpZiAoaW50ZXJwb2xhdG9yID09IG51bGwpIHsKKyAgICAgICAgICAgIG1JbnRlcnBvbGF0b3IgPSBuZXcgU2Nyb2xsZXIuVmlzY291c0ZsdWlkSW50ZXJwb2xhdG9yKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtSW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdG9yOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC0zMDIsMTQgKzMxMCw3IEBACiAKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZHVyYXRpb24gPSBtU2Nyb2xsZXJYLm1EdXJhdGlvbjsKICAgICAgICAgICAgICAgICBpZiAoZWxhcHNlZFRpbWUgPCBkdXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICBmbG9hdCBxID0gKGZsb2F0KSAoZWxhcHNlZFRpbWUpIC8gZHVyYXRpb247Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1JbnRlcnBvbGF0b3IgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcSA9IFNjcm9sbGVyLnZpc2NvdXNGbHVpZChxKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBtSW50ZXJwb2xhdG9yLmdldEludGVycG9sYXRpb24ocSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCBxID0gbUludGVycG9sYXRvci5nZXRJbnRlcnBvbGF0aW9uKGVsYXBzZWRUaW1lIC8gKGZsb2F0KSBkdXJhdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIG1TY3JvbGxlclgudXBkYXRlU2Nyb2xsKHEpOwogICAgICAgICAgICAgICAgICAgICBtU2Nyb2xsZXJZLnVwZGF0ZVNjcm9sbChxKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1BvcHVwV2luZG93LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUG9wdXBXaW5kb3cuamF2YQppbmRleCA1NjYzOTU5Li5lNzdhODEwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUG9wdXBXaW5kb3cuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUG9wdXBXaW5kb3cuamF2YQpAQCAtMTcwLDggKzE3MCw4IEBACiAgICAgICoKICAgICAgKiA8cD5UaGUgcG9wdXAgZG9lcyBwcm92aWRlIGEgYmFja2dyb3VuZC48L3A+CiAgICAgICovCi0gICAgcHVibGljIFBvcHVwV2luZG93KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBQb3B1cFdpbmRvdyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOwogICAgIH0KICAgICAKICAgICAvKioKQEAgLTE4Myw4ICsxODMsNyBAQAogICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1XaW5kb3dNYW5hZ2VyID0gKFdpbmRvd01hbmFnZXIpY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lORE9XX1NFUlZJQ0UpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9Ci0gICAgICAgICAgICBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKICAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuUG9wdXBXaW5kb3csIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIG1CYWNrZ3JvdW5kID0gYS5nZXREcmF3YWJsZShSLnN0eWxlYWJsZS5Qb3B1cFdpbmRvd19wb3B1cEJhY2tncm91bmQpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1Byb2dyZXNzQmFyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUHJvZ3Jlc3NCYXIuamF2YQppbmRleCA1MzkyYTk2Li4xZmJjYmNmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUHJvZ3Jlc3NCYXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUHJvZ3Jlc3NCYXIuamF2YQpAQCAtMjQyLDI5ICsyNDIsMjYgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLnByb2dyZXNzQmFyU3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBQcm9ncmVzc0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlLCAwKTsKKyAgICBwdWJsaWMgUHJvZ3Jlc3NCYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIHB1YmxpYyBQcm9ncmVzc0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlLCBpbnQgc3R5bGVSZXMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgUHJvZ3Jlc3NCYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKICAgICAgICAgbVVpVGhyZWFkSWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldElkKCk7CiAgICAgICAgIGluaXRQcm9ncmVzc0JhcigpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9Ci0gICAgICAgICAgICBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLlByb2dyZXNzQmFyLCBkZWZTdHlsZSwgc3R5bGVSZXMpOworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIFIuc3R5bGVhYmxlLlByb2dyZXNzQmFyLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgCiAgICAgICAgIG1Ob0ludmFsaWRhdGUgPSB0cnVlOwogICAgICAgICAKICAgICAgICAgRHJhd2FibGUgZHJhd2FibGUgPSBhLmdldERyYXdhYmxlKFIuc3R5bGVhYmxlLlByb2dyZXNzQmFyX3Byb2dyZXNzRHJhd2FibGUpOwogICAgICAgICBpZiAoZHJhd2FibGUgIT0gbnVsbCkgewotICAgICAgICAgICAgZHJhd2FibGUgPSB0aWxlaWZ5KGRyYXdhYmxlLCBmYWxzZSk7CiAgICAgICAgICAgICAvLyBDYWxsaW5nIHRoaXMgbWV0aG9kIGNhbiBzZXQgbU1heEhlaWdodCwgbWFrZSBzdXJlIHRoZSBjb3JyZXNwb25kaW5nCiAgICAgICAgICAgICAvLyBYTUwgYXR0cmlidXRlIGZvciBtTWF4SGVpZ2h0IGlzIHJlYWQgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZAotICAgICAgICAgICAgc2V0UHJvZ3Jlc3NEcmF3YWJsZShkcmF3YWJsZSk7CisgICAgICAgICAgICBzZXRQcm9ncmVzc0RyYXdhYmxlVGlsZWQoZHJhd2FibGUpOwogICAgICAgICB9CiAKIApAQCAtMjkzLDggKzI5MCw3IEBACiAKICAgICAgICAgZHJhd2FibGUgPSBhLmdldERyYXdhYmxlKFIuc3R5bGVhYmxlLlByb2dyZXNzQmFyX2luZGV0ZXJtaW5hdGVEcmF3YWJsZSk7CiAgICAgICAgIGlmIChkcmF3YWJsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBkcmF3YWJsZSA9IHRpbGVpZnlJbmRldGVybWluYXRlKGRyYXdhYmxlKTsKLSAgICAgICAgICAgIHNldEluZGV0ZXJtaW5hdGVEcmF3YWJsZShkcmF3YWJsZSk7CisgICAgICAgICAgICBzZXRJbmRldGVybWluYXRlRHJhd2FibGVUaWxlZChkcmF3YWJsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBtT25seUluZGV0ZXJtaW5hdGUgPSBhLmdldEJvb2xlYW4oCkBAIC00NjcsMTEgKzQ2Myw5IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogPHA+RGVmaW5lIHRoZSBkcmF3YWJsZSB1c2VkIHRvIGRyYXcgdGhlIHByb2dyZXNzIGJhciBpbgotICAgICAqIGluZGV0ZXJtaW5hdGUgbW9kZS48L3A+CisgICAgICogRGVmaW5lIHRoZSBkcmF3YWJsZSB1c2VkIHRvIGRyYXcgdGhlIHByb2dyZXNzIGJhciBpbiBpbmRldGVybWluYXRlIG1vZGUuCiAgICAgICoKICAgICAgKiBAcGFyYW0gZCB0aGUgbmV3IGRyYXdhYmxlCi0gICAgICoKICAgICAgKiBAc2VlICNnZXRJbmRldGVybWluYXRlRHJhd2FibGUoKQogICAgICAqIEBzZWUgI3NldEluZGV0ZXJtaW5hdGUoYm9vbGVhbikKICAgICAgKi8KQEAgLTQ4OCw2ICs0ODIsMjUgQEAKICAgICAgICAgICAgIHBvc3RJbnZhbGlkYXRlKCk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWZpbmUgdGhlIHRpbGVhYmxlIGRyYXdhYmxlIHVzZWQgdG8gZHJhdyB0aGUgcHJvZ3Jlc3MgYmFyIGluCisgICAgICogaW5kZXRlcm1pbmF0ZSBtb2RlLgorICAgICAqIDxwPgorICAgICAqIElmIHRoZSBkcmF3YWJsZSBpcyBhIEJpdG1hcERyYXdhYmxlIG9yIGNvbnRhaW5zIEJpdG1hcERyYXdhYmxlcywgYQorICAgICAqIHRpbGVkIGNvcHkgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGRpc3BsYXkgYXMgYSBwcm9ncmVzcyBiYXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZCB0aGUgbmV3IGRyYXdhYmxlCisgICAgICogQHNlZSAjZ2V0SW5kZXRlcm1pbmF0ZURyYXdhYmxlKCkKKyAgICAgKiBAc2VlICNzZXRJbmRldGVybWluYXRlKGJvb2xlYW4pCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0SW5kZXRlcm1pbmF0ZURyYXdhYmxlVGlsZWQoRHJhd2FibGUgZCkgeworICAgICAgICBpZiAoZCAhPSBudWxsKSB7CisgICAgICAgICAgICBkID0gdGlsZWlmeUluZGV0ZXJtaW5hdGUoZCk7CisgICAgICAgIH0KKworICAgICAgICBzZXRJbmRldGVybWluYXRlRHJhd2FibGUoZCk7CisgICAgfQogICAgIAogICAgIC8qKgogICAgICAqIDxwPkdldCB0aGUgZHJhd2FibGUgdXNlZCB0byBkcmF3IHRoZSBwcm9ncmVzcyBiYXIgaW4KQEAgLTUwMywxMSArNTE2LDkgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiA8cD5EZWZpbmUgdGhlIGRyYXdhYmxlIHVzZWQgdG8gZHJhdyB0aGUgcHJvZ3Jlc3MgYmFyIGluCi0gICAgICogcHJvZ3Jlc3MgbW9kZS48L3A+CisgICAgICogRGVmaW5lIHRoZSBkcmF3YWJsZSB1c2VkIHRvIGRyYXcgdGhlIHByb2dyZXNzIGJhciBpbiBwcm9ncmVzcyBtb2RlLgogICAgICAqCiAgICAgICogQHBhcmFtIGQgdGhlIG5ldyBkcmF3YWJsZQotICAgICAqCiAgICAgICogQHNlZSAjZ2V0UHJvZ3Jlc3NEcmF3YWJsZSgpCiAgICAgICogQHNlZSAjc2V0SW5kZXRlcm1pbmF0ZShib29sZWFuKQogICAgICAqLwpAQCAtNTQ2LDYgKzU1NywyNSBAQAogICAgICAgICAgICAgZG9SZWZyZXNoUHJvZ3Jlc3MoUi5pZC5zZWNvbmRhcnlQcm9ncmVzcywgbVNlY29uZGFyeVByb2dyZXNzLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQorCisgICAgLyoqCisgICAgICogRGVmaW5lIHRoZSB0aWxlYWJsZSBkcmF3YWJsZSB1c2VkIHRvIGRyYXcgdGhlIHByb2dyZXNzIGJhciBpbgorICAgICAqIHByb2dyZXNzIG1vZGUuCisgICAgICogPHA+CisgICAgICogSWYgdGhlIGRyYXdhYmxlIGlzIGEgQml0bWFwRHJhd2FibGUgb3IgY29udGFpbnMgQml0bWFwRHJhd2FibGVzLCBhCisgICAgICogdGlsZWQgY29weSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgZGlzcGxheSBhcyBhIHByb2dyZXNzIGJhci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkIHRoZSBuZXcgZHJhd2FibGUKKyAgICAgKiBAc2VlICNnZXRQcm9ncmVzc0RyYXdhYmxlKCkKKyAgICAgKiBAc2VlICNzZXRJbmRldGVybWluYXRlKGJvb2xlYW4pCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UHJvZ3Jlc3NEcmF3YWJsZVRpbGVkKERyYXdhYmxlIGQpIHsKKyAgICAgICAgaWYgKGQgIT0gbnVsbCkgeworICAgICAgICAgICAgZCA9IHRpbGVpZnkoZCwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgc2V0UHJvZ3Jlc3NEcmF3YWJsZShkKTsKKyAgICB9CiAgICAgCiAgICAgLyoqCiAgICAgICogQHJldHVybiBUaGUgZHJhd2FibGUgY3VycmVudGx5IHVzZWQgdG8gZHJhdyB0aGUgcHJvZ3Jlc3MgYmFyCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUXVpY2tDb250YWN0QmFkZ2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9RdWlja0NvbnRhY3RCYWRnZS5qYXZhCmluZGV4IGZkMmY3NTQuLmE0Zjc1OGMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9RdWlja0NvbnRhY3RCYWRnZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9RdWlja0NvbnRhY3RCYWRnZS5qYXZhCkBAIC04NCw4ICs4NCwxMyBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CiAKLSAgICBwdWJsaWMgUXVpY2tDb250YWN0QmFkZ2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBRdWlja0NvbnRhY3RCYWRnZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBRdWlja0NvbnRhY3RCYWRnZSgKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIFR5cGVkQXJyYXkgc3R5bGVkQXR0cmlidXRlcyA9IG1Db250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoUi5zdHlsZWFibGUuVGhlbWUpOwogICAgICAgICBtT3ZlcmxheSA9IHN0eWxlZEF0dHJpYnV0ZXMuZ2V0RHJhd2FibGUoCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUmFkaWFsVGltZVBpY2tlclZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SYWRpYWxUaW1lUGlja2VyVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjOWFiNjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUmFkaWFsVGltZVBpY2tlclZpZXcuamF2YQpAQCAtMCwwICsxLDEzOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQud2lkZ2V0OworCitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3I7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3JTZXQ7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uS2V5ZnJhbWU7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3I7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXI7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uVmFsdWVBbmltYXRvcjsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3VwcHJlc3NMaW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5UeXBlZmFjZTsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3RGOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZVV0aWxzOworaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuVGltZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LkhhcHRpY0ZlZWRiYWNrQ29uc3RhbnRzOworaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKKworaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0U3ltYm9sczsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCisvKioKKyAqIFZpZXcgdG8gc2hvdyBhIGNsb2NrIGNpcmNsZSBwaWNrZXIgKHdpdGggb25lIG9yIHR3byBwaWNraW5nIGNpcmNsZXMpCisgKgorICogQGhpZGUKKyAqLworcHVibGljIGNsYXNzIFJhZGlhbFRpbWVQaWNrZXJWaWV3IGV4dGVuZHMgVmlldyBpbXBsZW1lbnRzIFZpZXcuT25Ub3VjaExpc3RlbmVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNsb2NrVmlldyI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVCVUdfQ09MT1IgPSAweDIwRkYwMDAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUJVR19URVhUX0NPTE9SID0gMHg2MEZGMDAwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVCVUdfU1RST0tFX1dJRFRIID0gMjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIT1VSUyA9IDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1JTlVURVMgPSAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIT1VSU19JTk5FUiA9IDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFNUE0gPSAzOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFTEVDVE9SX0NJUkNMRSA9IDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFTEVDVE9SX0RPVCA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFTEVDVE9SX0xJTkUgPSAyOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFNID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUE0gPSAxOworCisgICAgLy8gT3BhcXVlIGFscGhhIGxldmVsCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFMUEhBX09QQVFVRSA9IDI1NTsKKworICAgIC8vIFRyYW5zcGFyZW50IGFscGhhIGxldmVsCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFMUEhBX1RSQU5TUEFSRU5UID0gMDsKKworICAgIC8vIEFscGhhIGxldmVsIG9mIGNvbG9yIGZvciBzZWxlY3Rvci4KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUxQSEFfU0VMRUNUT1IgPSA1MTsKKworICAgIC8vIEFscGhhIGxldmVsIG9mIGNvbG9yIGZvciBzZWxlY3RlZCBjaXJjbGUuCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFMUEhBX0FNUE1fU0VMRUNURUQgPSBBTFBIQV9TRUxFQ1RPUjsKKworICAgIC8vIEFscGhhIGxldmVsIG9mIGNvbG9yIGZvciBwcmVzc2VkIGNpcmNsZS4KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUxQSEFfQU1QTV9QUkVTU0VEID0gMTc1OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgQ09TSU5FXzMwX0RFR1JFRVMgPSAoKGZsb2F0KSBNYXRoLnNxcnQoMykpICogMC41ZjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBTSU5FXzMwX0RFR1JFRVMgPSAwLjVmOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFR1JFRVNfRk9SX09ORV9IT1VSID0gMzA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFR1JFRVNfRk9SX09ORV9NSU5VVEUgPSA2OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gSE9VUlNfTlVNQkVSUyA9IHsxMiwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBIT1VSU19OVU1CRVJTXzI0ID0gezAsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyM307CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gTUlOVVRFU19OVU1CRVJTID0gezAsIDUsIDEwLCAxNSwgMjAsIDI1LCAzMCwgMzUsIDQwLCA0NSwgNTAsIDU1fTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDRU5URVJfUkFESVVTID0gMjsKKworICAgIHByaXZhdGUgc3RhdGljIGludFtdIHNTbmFwUHJlZmVyMzBzTWFwID0gbmV3IGludFszNjFdOworCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBtSG91cnMxMlRleHRzID0gbmV3IFN0cmluZ1sxMl07CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBtT3V0ZXJIb3VyczI0VGV4dHMgPSBuZXcgU3RyaW5nWzEyXTsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZ1tdIG1Jbm5lckhvdXJzMjRUZXh0cyA9IG5ldyBTdHJpbmdbMTJdOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nW10gbU1pbnV0ZXNUZXh0cyA9IG5ldyBTdHJpbmdbMTJdOworCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBtQW1QbVRleHQgPSBuZXcgU3RyaW5nWzJdOworCisgICAgcHJpdmF0ZSBmaW5hbCBQYWludFtdIG1QYWludCA9IG5ldyBQYWludFsyXTsKKyAgICBwcml2YXRlIGZpbmFsIFBhaW50IG1QYWludENlbnRlciA9IG5ldyBQYWludCgpOworICAgIHByaXZhdGUgZmluYWwgUGFpbnRbXVtdIG1QYWludFNlbGVjdG9yID0gbmV3IFBhaW50WzJdWzNdOworICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbVBhaW50QW1QbVRleHQgPSBuZXcgUGFpbnQoKTsKKyAgICBwcml2YXRlIGZpbmFsIFBhaW50W10gbVBhaW50QW1QbUNpcmNsZSA9IG5ldyBQYWludFsyXTsKKworICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbVBhaW50QmFja2dyb3VuZCA9IG5ldyBQYWludCgpOworICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbVBhaW50RGlzYWJsZWQgPSBuZXcgUGFpbnQoKTsKKyAgICBwcml2YXRlIGZpbmFsIFBhaW50IG1QYWludERlYnVnID0gbmV3IFBhaW50KCk7CisKKyAgICBwcml2YXRlIFR5cGVmYWNlIG1UeXBlZmFjZTsKKworICAgIHByaXZhdGUgYm9vbGVhbiBtSXMyNEhvdXJNb2RlOworICAgIHByaXZhdGUgYm9vbGVhbiBtU2hvd0hvdXJzOworICAgIHByaXZhdGUgYm9vbGVhbiBtSXNPbklubmVyQ2lyY2xlOworCisgICAgcHJpdmF0ZSBpbnQgbVhDZW50ZXI7CisgICAgcHJpdmF0ZSBpbnQgbVlDZW50ZXI7CisKKyAgICBwcml2YXRlIGZsb2F0W10gbUNpcmNsZVJhZGl1cyA9IG5ldyBmbG9hdFszXTsKKworICAgIHByaXZhdGUgaW50IG1NaW5IeXBvdGVudXNlRm9ySW5uZXJOdW1iZXI7CisgICAgcHJpdmF0ZSBpbnQgbU1heEh5cG90ZW51c2VGb3JPdXRlck51bWJlcjsKKyAgICBwcml2YXRlIGludCBtSGFsZndheUh5cG90ZW51c2VQb2ludDsKKworICAgIHByaXZhdGUgZmxvYXRbXSBtVGV4dFNpemUgPSBuZXcgZmxvYXRbMl07CisgICAgcHJpdmF0ZSBmbG9hdCBtSW5uZXJUZXh0U2l6ZTsKKworICAgIHByaXZhdGUgZmxvYXRbXVtdIG1UZXh0R3JpZEhlaWdodHMgPSBuZXcgZmxvYXRbMl1bN107CisgICAgcHJpdmF0ZSBmbG9hdFtdW10gbVRleHRHcmlkV2lkdGhzID0gbmV3IGZsb2F0WzJdWzddOworCisgICAgcHJpdmF0ZSBmbG9hdFtdIG1Jbm5lclRleHRHcmlkSGVpZ2h0cyA9IG5ldyBmbG9hdFs3XTsKKyAgICBwcml2YXRlIGZsb2F0W10gbUlubmVyVGV4dEdyaWRXaWR0aHMgPSBuZXcgZmxvYXRbN107CisKKyAgICBwcml2YXRlIFN0cmluZ1tdIG1PdXRlclRleHRIb3VyczsKKyAgICBwcml2YXRlIFN0cmluZ1tdIG1Jbm5lclRleHRIb3VyczsKKyAgICBwcml2YXRlIFN0cmluZ1tdIG1PdXRlclRleHRNaW51dGVzOworCisgICAgcHJpdmF0ZSBmbG9hdFtdIG1DaXJjbGVSYWRpdXNNdWx0aXBsaWVyID0gbmV3IGZsb2F0WzJdOworICAgIHByaXZhdGUgZmxvYXRbXSBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXIgPSBuZXcgZmxvYXRbM107CisKKyAgICBwcml2YXRlIGZsb2F0W10gbVRleHRTaXplTXVsdGlwbGllciA9IG5ldyBmbG9hdFszXTsKKworICAgIHByaXZhdGUgZmxvYXRbXSBtQW5pbWF0aW9uUmFkaXVzTXVsdGlwbGllciA9IG5ldyBmbG9hdFszXTsKKworICAgIHByaXZhdGUgZmxvYXQgbVRyYW5zaXRpb25NaWRSYWRpdXNNdWx0aXBsaWVyOworICAgIHByaXZhdGUgZmxvYXQgbVRyYW5zaXRpb25FbmRSYWRpdXNNdWx0aXBsaWVyOworCisgICAgcHJpdmF0ZSBBbmltYXRvclNldCBtVHJhbnNpdGlvbjsKKyAgICBwcml2YXRlIEludmFsaWRhdGVVcGRhdGVMaXN0ZW5lciBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyID0gbmV3IEludmFsaWRhdGVVcGRhdGVMaXN0ZW5lcigpOworCisgICAgcHJpdmF0ZSBpbnRbXSBtTGluZUxlbmd0aCA9IG5ldyBpbnRbM107CisgICAgcHJpdmF0ZSBpbnRbXSBtU2VsZWN0aW9uUmFkaXVzID0gbmV3IGludFszXTsKKyAgICBwcml2YXRlIGZsb2F0IG1TZWxlY3Rpb25SYWRpdXNNdWx0aXBsaWVyOworICAgIHByaXZhdGUgaW50W10gbVNlbGVjdGlvbkRlZ3JlZXMgPSBuZXcgaW50WzNdOworCisgICAgcHJpdmF0ZSBpbnQgbUFtUG1DaXJjbGVSYWRpdXM7CisgICAgcHJpdmF0ZSBmbG9hdCBtQW1QbVlDZW50ZXI7CisKKyAgICBwcml2YXRlIGZsb2F0IG1BbVBtQ2lyY2xlUmFkaXVzTXVsdGlwbGllcjsKKyAgICBwcml2YXRlIGludCBtQW1QbVRleHRDb2xvcjsKKworICAgIHByaXZhdGUgZmxvYXQgbUxlZnRJbmRpY2F0b3JYQ2VudGVyOworICAgIHByaXZhdGUgZmxvYXQgbVJpZ2h0SW5kaWNhdG9yWENlbnRlcjsKKworICAgIHByaXZhdGUgaW50IG1BbVBtVW5zZWxlY3RlZENvbG9yOworICAgIHByaXZhdGUgaW50IG1BbVBtU2VsZWN0ZWRDb2xvcjsKKworICAgIHByaXZhdGUgaW50IG1BbU9yUG07CisgICAgcHJpdmF0ZSBpbnQgbUFtT3JQbVByZXNzZWQ7CisKKyAgICBwcml2YXRlIFJlY3RGIG1SZWN0RiA9IG5ldyBSZWN0RigpOworICAgIHByaXZhdGUgYm9vbGVhbiBtSW5wdXRFbmFibGVkID0gdHJ1ZTsKKyAgICBwcml2YXRlIE9uVmFsdWVTZWxlY3RlZExpc3RlbmVyIG1MaXN0ZW5lcjsKKworICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PEFuaW1hdG9yPiBtSG91cnNUb01pbnV0ZXNBbmltcyA9IG5ldyBBcnJheUxpc3Q8QW5pbWF0b3I+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8QW5pbWF0b3I+IG1NaW51dGVUb0hvdXJzQW5pbXMgPSBuZXcgQXJyYXlMaXN0PEFuaW1hdG9yPigpOworCisgICAgcHVibGljIGludGVyZmFjZSBPblZhbHVlU2VsZWN0ZWRMaXN0ZW5lciB7CisgICAgICAgIHZvaWQgb25WYWx1ZVNlbGVjdGVkKGludCBwaWNrZXJJbmRleCwgaW50IG5ld1ZhbHVlLCBib29sZWFuIGF1dG9BZHZhbmNlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgeworICAgICAgICAvLyBQcmVwYXJlIG1hcHBpbmcgdG8gc25hcCB0b3VjaGFibGUgZGVncmVlcyB0byBzZWxlY3RhYmxlIGRlZ3JlZXMuCisgICAgICAgIHByZXBhcmVQcmVmZXIzMHNNYXAoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTcGxpdCB1cCB0aGUgMzYwIGRlZ3JlZXMgb2YgdGhlIGNpcmNsZSBhbW9uZyB0aGUgNjAgc2VsZWN0YWJsZSB2YWx1ZXMuIEFzc2lnbnMgYSBsYXJnZXIKKyAgICAgKiBzZWxlY3RhYmxlIGFyZWEgdG8gZWFjaCBvZiB0aGUgMTIgdmlzaWJsZSB2YWx1ZXMsIHN1Y2ggdGhhdCB0aGUgcmF0aW8gb2Ygc3BhY2UgYXBwb3J0aW9uZWQKKyAgICAgKiB0byBhIHZpc2libGUgdmFsdWUgOiBzcGFjZSBhcHBvcnRpb25lZCB0byBhIG5vbi12aXNpYmxlIHZhbHVlIHdpbGwgYmUgMTQgOiA0LgorICAgICAqIEUuZy4gdGhlIG91dHB1dCBvZiAzMCBkZWdyZWVzIHNob3VsZCBoYXZlIGEgaGlnaGVyIHJhbmdlIG9mIGlucHV0IGFzc29jaWF0ZWQgd2l0aCBpdCB0aGFuCisgICAgICogdGhlIG91dHB1dCBvZiAyNCBkZWdyZWVzLCBiZWNhdXNlIDMwIGRlZ3JlZXMgY29ycmVzcG9uZHMgdG8gYSB2aXNpYmxlIG51bWJlciBvbiB0aGUgY2xvY2sKKyAgICAgKiBjaXJjbGUgKDUgb24gdGhlIG1pbnV0ZXMsIDEgb3IgMTMgb24gdGhlIGhvdXJzKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHByZXBhcmVQcmVmZXIzMHNNYXAoKSB7CisgICAgICAgIC8vIFdlJ2xsIHNwbGl0IHVwIHRoZSB2aXNpYmxlIG91dHB1dCBhbmQgdGhlIG5vbi12aXNpYmxlIG91dHB1dCBzdWNoIHRoYXQgZWFjaCB2aXNpYmxlCisgICAgICAgIC8vIG91dHB1dCB3aWxsIGNvcnJlc3BvbmQgdG8gYSByYW5nZSBvZiAxNCBhc3NvY2lhdGVkIGlucHV0IGRlZ3JlZXMsIGFuZCBlYWNoIG5vbi12aXNpYmxlCisgICAgICAgIC8vIG91dHB1dCB3aWxsIGNvcnJlc3BvbmQgdG8gYSByYW5nZSBvZiA0IGFzc29jaWF0ZSBpbnB1dCBkZWdyZWVzLCBzbyB2aXNpYmxlIG51bWJlcnMKKyAgICAgICAgLy8gYXJlIG1vcmUgdGhhbiAzIHRpbWVzIGVhc2llciB0byBnZXQgdGhhbiBub24tdmlzaWJsZSBudW1iZXJzOgorICAgICAgICAvLyB7MzU0LTM1OSwwLTd9OjAsIHs4LTExfTo2LCB7MTItMTV9OjEyLCB7MTYtMTl9OjE4LCB7MjAtMjN9OjI0LCB7MjQtMzd9OjMwLCBldGMuCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIGFuIG91dHB1dCBvZiAzMCBkZWdyZWVzIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgcmFuZ2Ugb2YgMTQgYXNzb2NpYXRlZCBkZWdyZWVzLCB0aGVuCisgICAgICAgIC8vIHdlJ2xsIG5lZWQgYW55IGlucHV0IGJldHdlZW4gMjQgLSAzNyB0byBzbmFwIHRvIDMwLiBXb3JraW5nIG91dCBmcm9tIHRoZXJlLCAyMC0yMyBzaG91bGQKKyAgICAgICAgLy8gc25hcCB0byAyNCwgd2hpbGUgMzgtNDEgc2hvdWxkIHNuYXAgdG8gMzYuIFRoaXMgaXMgc29tZXdoYXQgY291bnRlci1pbnR1aXRpdmUsIHRoYXQgeW91CisgICAgICAgIC8vIGNhbiBiZSB0b3VjaGluZyAzNiBkZWdyZWVzIGJ1dCBoYXZlIHRoZSBzZWxlY3Rpb24gc25hcHBlZCB0byAzMCBkZWdyZWVzOyBob3dldmVyLCB0aGlzCisgICAgICAgIC8vIGluY29uc2lzdGVuY3kgaXNuJ3Qgbm90aWNlYWJsZSBhdCBzdWNoIGZpbmUtZ3JhaW5lZCBkZWdyZWVzLCBhbmQgaXQgYWZmb3JkcyB1cyB0aGUKKyAgICAgICAgLy8gYWJpbGl0eSB0byBhZ2dyZXNzaXZlbHkgcHJlZmVyIHRoZSB2aXNpYmxlIHZhbHVlcyBieSBhIGZhY3RvciBvZiBtb3JlIHRoYW4gMzoxLCB3aGljaAorICAgICAgICAvLyBncmVhdGx5IGNvbnRyaWJ1dGVzIHRvIHRoZSBzZWxlY3RhYmlsaXR5IG9mIHRoZXNlIHZhbHVlcy4KKworICAgICAgICAvLyBUaGUgZmlyc3Qgb3V0cHV0IGlzIDAsIGFuZCBlYWNoIGZvbGxvd2luZyBvdXRwdXQgd2lsbCBpbmNyZW1lbnQgYnkgNiB7MCwgNiwgMTIsIC4uLn0uCisgICAgICAgIGludCBzbmFwcGVkT3V0cHV0RGVncmVlcyA9IDA7CisgICAgICAgIC8vIENvdW50IG9mIGhvdyBtYW55IGlucHV0cyB3ZSd2ZSBkZXNpZ25hdGVkIHRvIHRoZSBzcGVjaWZpZWQgb3V0cHV0LgorICAgICAgICBpbnQgY291bnQgPSAxOworICAgICAgICAvLyBIb3cgbWFueSBpbnB1dCB3ZSBleHBlY3QgZm9yIGEgc3BlY2lmaWVkIG91dHB1dC4gVGhpcyB3aWxsIGJlIDE0IGZvciBvdXRwdXQgZGl2aXNpYmxlCisgICAgICAgIC8vIGJ5IDMwLCBhbmQgNCBmb3IgdGhlIHJlbWFpbmluZyBvdXRwdXQuIFdlJ2xsIHNwZWNpYWwgY2FzZSB0aGUgb3V0cHV0cyBvZiAwIGFuZCAzNjAsIHNvCisgICAgICAgIC8vIHRoZSBjYWxsZXIgY2FuIGRlY2lkZSB3aGljaCB0aGV5IG5lZWQuCisgICAgICAgIGludCBleHBlY3RlZENvdW50ID0gODsKKyAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBpbnB1dC4KKyAgICAgICAgZm9yIChpbnQgZGVncmVlcyA9IDA7IGRlZ3JlZXMgPCAzNjE7IGRlZ3JlZXMrKykgeworICAgICAgICAgICAgLy8gU2F2ZSB0aGUgaW5wdXQtb3V0cHV0IG1hcHBpbmcuCisgICAgICAgICAgICBzU25hcFByZWZlcjMwc01hcFtkZWdyZWVzXSA9IHNuYXBwZWRPdXRwdXREZWdyZWVzOworICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgbGFzdCBpbnB1dCBmb3IgdGhlIHNwZWNpZmllZCBvdXRwdXQsIGNhbGN1bGF0ZSB0aGUgbmV4dCBvdXRwdXQgYW5kCisgICAgICAgICAgICAvLyB0aGUgbmV4dCBleHBlY3RlZCBjb3VudC4KKyAgICAgICAgICAgIGlmIChjb3VudCA9PSBleHBlY3RlZENvdW50KSB7CisgICAgICAgICAgICAgICAgc25hcHBlZE91dHB1dERlZ3JlZXMgKz0gNjsKKyAgICAgICAgICAgICAgICBpZiAoc25hcHBlZE91dHB1dERlZ3JlZXMgPT0gMzYwKSB7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQ291bnQgPSA3OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc25hcHBlZE91dHB1dERlZ3JlZXMgJSAzMCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQ291bnQgPSAxNDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZENvdW50ID0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY291bnQgPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBtYXBwaW5nIG9mIGFueSBpbnB1dCBkZWdyZWVzICgwIHRvIDM2MCkgdG8gb25lIG9mIDYwIHNlbGVjdGFibGUgb3V0cHV0IGRlZ3JlZXMsCisgICAgICogd2hlcmUgdGhlIGRlZ3JlZXMgY29ycmVzcG9uZGluZyB0byB2aXNpYmxlIG51bWJlcnMgKGkuZS4gdGhvc2UgZGl2aXNpYmxlIGJ5IDMwKSB3aWxsIGJlCisgICAgICogd2VpZ2h0ZWQgaGVhdmllciB0aGFuIHRoZSBkZWdyZWVzIGNvcnJlc3BvbmRpbmcgdG8gbm9uLXZpc2libGUgbnVtYmVycy4KKyAgICAgKiBTZWUge0BsaW5rICNwcmVwYXJlUHJlZmVyMzBzTWFwKCl9IGRvY3VtZW50YXRpb24gZm9yIHRoZSByYXRpb25hbGUgYW5kIGdlbmVyYXRpb24gb2YgdGhlCisgICAgICogbWFwcGluZy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgc25hcFByZWZlcjMwcyhpbnQgZGVncmVlcykgeworICAgICAgICBpZiAoc1NuYXBQcmVmZXIzMHNNYXAgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzU25hcFByZWZlcjMwc01hcFtkZWdyZWVzXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIG1hcHBpbmcgb2YgYW55IGlucHV0IGRlZ3JlZXMgKDAgdG8gMzYwKSB0byBvbmUgb2YgMTIgdmlzaWJsZSBvdXRwdXQgZGVncmVlcyAoYWxsCisgICAgICogbXVsdGlwbGVzIG9mIDMwKSwgd2hlcmUgdGhlIGlucHV0IHdpbGwgYmUgInNuYXBwZWQiIHRvIHRoZSBjbG9zZXN0IHZpc2libGUgZGVncmVlcy4KKyAgICAgKiBAcGFyYW0gZGVncmVlcyBUaGUgaW5wdXQgZGVncmVlcworICAgICAqIEBwYXJhbSBmb3JjZUhpZ2hlck9yTG93ZXIgVGhlIG91dHB1dCBtYXkgYmUgZm9yY2VkIHRvIGVpdGhlciB0aGUgaGlnaGVyIG9yIGxvd2VyIHN0ZXAsIG9yIG1heQorICAgICAqIGJlIGFsbG93ZWQgdG8gc25hcCB0byB3aGljaGV2ZXIgaXMgY2xvc2VyLiBVc2UgMSB0byBmb3JjZSBzdHJpY3RseSBoaWdoZXIsIC0xIHRvIGZvcmNlCisgICAgICogc3RyaWN0bHkgbG93ZXIsIGFuZCAwIHRvIHNuYXAgdG8gdGhlIGNsb3NlciBvbmUuCisgICAgICogQHJldHVybiBvdXRwdXQgZGVncmVlcywgd2lsbCBiZSBhIG11bHRpcGxlIG9mIDMwCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHNuYXBPbmx5MzBzKGludCBkZWdyZWVzLCBpbnQgZm9yY2VIaWdoZXJPckxvd2VyKSB7CisgICAgICAgIGZpbmFsIGludCBzdGVwU2l6ZSA9IERFR1JFRVNfRk9SX09ORV9IT1VSOworICAgICAgICBpbnQgZmxvb3IgPSAoZGVncmVlcyAvIHN0ZXBTaXplKSAqIHN0ZXBTaXplOworICAgICAgICBmaW5hbCBpbnQgY2VpbGluZyA9IGZsb29yICsgc3RlcFNpemU7CisgICAgICAgIGlmIChmb3JjZUhpZ2hlck9yTG93ZXIgPT0gMSkgeworICAgICAgICAgICAgZGVncmVlcyA9IGNlaWxpbmc7CisgICAgICAgIH0gZWxzZSBpZiAoZm9yY2VIaWdoZXJPckxvd2VyID09IC0xKSB7CisgICAgICAgICAgICBpZiAoZGVncmVlcyA9PSBmbG9vcikgeworICAgICAgICAgICAgICAgIGZsb29yIC09IHN0ZXBTaXplOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVncmVlcyA9IGZsb29yOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKChkZWdyZWVzIC0gZmxvb3IpIDwgKGNlaWxpbmcgLSBkZWdyZWVzKSkgeworICAgICAgICAgICAgICAgIGRlZ3JlZXMgPSBmbG9vcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVncmVlcyA9IGNlaWxpbmc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRlZ3JlZXM7CisgICAgfQorCisgICAgcHVibGljIFJhZGlhbFRpbWVQaWNrZXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSAgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBSLmF0dHIudGltZVBpY2tlclN0eWxlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgUmFkaWFsVGltZVBpY2tlclZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOworCisgICAgICAgIC8vIHByb2Nlc3Mgc3R5bGUgYXR0cmlidXRlcworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBtQ29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5UaW1lUGlja2VyLAorICAgICAgICAgICAgICAgIGRlZlN0eWxlLCAwKTsKKworICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gZ2V0UmVzb3VyY2VzKCk7CisKKyAgICAgICAgbUFtUG1VbnNlbGVjdGVkQ29sb3IgPSBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfYW1QbVVuc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3IsCisgICAgICAgICAgICAgICAgcmVzLmdldENvbG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgUi5jb2xvci50aW1lcGlja2VyX2RlZmF1bHRfYW1wbV91bnNlbGVjdGVkX2JhY2tncm91bmRfY29sb3JfaG9sb19saWdodCkpOworCisgICAgICAgIG1BbVBtU2VsZWN0ZWRDb2xvciA9IGEuZ2V0Q29sb3IoUi5zdHlsZWFibGUuVGltZVBpY2tlcl9hbVBtU2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3IsCisgICAgICAgICAgICAgICAgcmVzLmdldENvbG9yKFIuY29sb3IudGltZXBpY2tlcl9kZWZhdWx0X2FtcG1fc2VsZWN0ZWRfYmFja2dyb3VuZF9jb2xvcl9ob2xvX2xpZ2h0KSk7CisKKyAgICAgICAgbUFtUG1UZXh0Q29sb3IgPSBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfYW1QbVRleHRDb2xvciwKKyAgICAgICAgICAgICAgICByZXMuZ2V0Q29sb3IoUi5jb2xvci50aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2xpZ2h0KSk7CisKKyAgICAgICAgZmluYWwgaW50IG51bWJlcnNUZXh0Q29sb3IgPSBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbnVtYmVyc1RleHRDb2xvciwKKyAgICAgICAgICAgICAgICByZXMuZ2V0Q29sb3IoUi5jb2xvci50aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2xpZ2h0KSk7CisKKyAgICAgICAgbVR5cGVmYWNlID0gVHlwZWZhY2UuY3JlYXRlKCJzYW5zLXNlcmlmIiwgVHlwZWZhY2UuTk9STUFMKTsKKworICAgICAgICBtUGFpbnRbSE9VUlNdID0gbmV3IFBhaW50KCk7CisgICAgICAgIG1QYWludFtIT1VSU10uc2V0Q29sb3IobnVtYmVyc1RleHRDb2xvcik7CisgICAgICAgIG1QYWludFtIT1VSU10uc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICBtUGFpbnRbSE9VUlNdLnNldFRleHRBbGlnbihQYWludC5BbGlnbi5DRU5URVIpOworCisgICAgICAgIG1QYWludFtNSU5VVEVTXSA9IG5ldyBQYWludCgpOworICAgICAgICBtUGFpbnRbTUlOVVRFU10uc2V0Q29sb3IobnVtYmVyc1RleHRDb2xvcik7CisgICAgICAgIG1QYWludFtNSU5VVEVTXS5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgIG1QYWludFtNSU5VVEVTXS5zZXRUZXh0QWxpZ24oUGFpbnQuQWxpZ24uQ0VOVEVSKTsKKworICAgICAgICBtUGFpbnRDZW50ZXIuc2V0Q29sb3IobnVtYmVyc1RleHRDb2xvcik7CisgICAgICAgIG1QYWludENlbnRlci5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgIG1QYWludENlbnRlci5zZXRUZXh0QWxpZ24oUGFpbnQuQWxpZ24uQ0VOVEVSKTsKKworICAgICAgICBtUGFpbnRTZWxlY3RvcltIT1VSU11bU0VMRUNUT1JfQ0lSQ0xFXSA9IG5ldyBQYWludCgpOworICAgICAgICBtUGFpbnRTZWxlY3RvcltIT1VSU11bU0VMRUNUT1JfQ0lSQ0xFXS5zZXRDb2xvcigKKyAgICAgICAgICAgICAgICBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbnVtYmVyc1NlbGVjdG9yQ29sb3IsIFIuY29sb3IuaG9sb19ibHVlX2xpZ2h0KSk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9DSVJDTEVdLnNldEFudGlBbGlhcyh0cnVlKTsKKworICAgICAgICBtUGFpbnRTZWxlY3RvcltIT1VSU11bU0VMRUNUT1JfRE9UXSA9IG5ldyBQYWludCgpOworICAgICAgICBtUGFpbnRTZWxlY3RvcltIT1VSU11bU0VMRUNUT1JfRE9UXS5zZXRDb2xvcigKKyAgICAgICAgICAgICAgICBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbnVtYmVyc1NlbGVjdG9yQ29sb3IsIFIuY29sb3IuaG9sb19ibHVlX2xpZ2h0KSk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9ET1RdLnNldEFudGlBbGlhcyh0cnVlKTsKKworICAgICAgICBtUGFpbnRTZWxlY3RvcltIT1VSU11bU0VMRUNUT1JfTElORV0gPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbSE9VUlNdW1NFTEVDVE9SX0xJTkVdLnNldENvbG9yKAorICAgICAgICAgICAgICAgIGEuZ2V0Q29sb3IoUi5zdHlsZWFibGUuVGltZVBpY2tlcl9udW1iZXJzU2VsZWN0b3JDb2xvciwgUi5jb2xvci5ob2xvX2JsdWVfbGlnaHQpKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbSE9VUlNdW1NFTEVDVE9SX0xJTkVdLnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbSE9VUlNdW1NFTEVDVE9SX0xJTkVdLnNldFN0cm9rZVdpZHRoKDIpOworCisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0NJUkNMRV0gPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfQ0lSQ0xFXS5zZXRDb2xvcigKKyAgICAgICAgICAgICAgICBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbnVtYmVyc1NlbGVjdG9yQ29sb3IsIFIuY29sb3IuaG9sb19ibHVlX2xpZ2h0KSk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0NJUkNMRV0uc2V0QW50aUFsaWFzKHRydWUpOworCisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0RPVF0gPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfRE9UXS5zZXRDb2xvcigKKyAgICAgICAgICAgICAgICBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbnVtYmVyc1NlbGVjdG9yQ29sb3IsIFIuY29sb3IuaG9sb19ibHVlX2xpZ2h0KSk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0RPVF0uc2V0QW50aUFsaWFzKHRydWUpOworCisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0xJTkVdID0gbmV3IFBhaW50KCk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0xJTkVdLnNldENvbG9yKAorICAgICAgICAgICAgICAgIGEuZ2V0Q29sb3IoUi5zdHlsZWFibGUuVGltZVBpY2tlcl9udW1iZXJzU2VsZWN0b3JDb2xvciwgUi5jb2xvci5ob2xvX2JsdWVfbGlnaHQpKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfTElORV0uc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICBtUGFpbnRTZWxlY3RvcltNSU5VVEVTXVtTRUxFQ1RPUl9MSU5FXS5zZXRTdHJva2VXaWR0aCgyKTsKKworICAgICAgICBtUGFpbnRBbVBtVGV4dC5zZXRDb2xvcihtQW1QbVRleHRDb2xvcik7CisgICAgICAgIG1QYWludEFtUG1UZXh0LnNldFR5cGVmYWNlKG1UeXBlZmFjZSk7CisgICAgICAgIG1QYWludEFtUG1UZXh0LnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICAgICAgbVBhaW50QW1QbVRleHQuc2V0VGV4dEFsaWduKFBhaW50LkFsaWduLkNFTlRFUik7CisKKyAgICAgICAgbVBhaW50QW1QbUNpcmNsZVtBTV0gPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgbVBhaW50QW1QbUNpcmNsZVtBTV0uc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICBtUGFpbnRBbVBtQ2lyY2xlW1BNXSA9IG5ldyBQYWludCgpOworICAgICAgICBtUGFpbnRBbVBtQ2lyY2xlW1BNXS5zZXRBbnRpQWxpYXModHJ1ZSk7CisKKyAgICAgICAgbVBhaW50QmFja2dyb3VuZC5zZXRDb2xvcigKKyAgICAgICAgICAgICAgICBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbnVtYmVyc0JhY2tncm91bmRDb2xvciwgQ29sb3IuV0hJVEUpKTsKKyAgICAgICAgbVBhaW50QmFja2dyb3VuZC5zZXRBbnRpQWxpYXModHJ1ZSk7CisKKyAgICAgICAgZmluYWwgaW50IGRpc2FibGVkQ29sb3IgPSBhLmdldENvbG9yKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfZGlzYWJsZWRDb2xvciwKKyAgICAgICAgICAgICAgICByZXMuZ2V0Q29sb3IoUi5jb2xvci50aW1lcGlja2VyX2RlZmF1bHRfZGlzYWJsZWRfY29sb3JfaG9sb19saWdodCkpOworICAgICAgICBtUGFpbnREaXNhYmxlZC5zZXRDb2xvcihkaXNhYmxlZENvbG9yKTsKKyAgICAgICAgbVBhaW50RGlzYWJsZWQuc2V0QW50aUFsaWFzKHRydWUpOworCisgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgbVBhaW50RGVidWcuc2V0Q29sb3IoREVCVUdfQ09MT1IpOworICAgICAgICAgICAgbVBhaW50RGVidWcuc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICAgICAgbVBhaW50RGVidWcuc2V0U3Ryb2tlV2lkdGgoREVCVUdfU1RST0tFX1dJRFRIKTsKKyAgICAgICAgICAgIG1QYWludERlYnVnLnNldFN0eWxlKFBhaW50LlN0eWxlLlNUUk9LRSk7CisgICAgICAgICAgICBtUGFpbnREZWJ1Zy5zZXRUZXh0QWxpZ24oUGFpbnQuQWxpZ24uQ0VOVEVSKTsKKyAgICAgICAgfQorCisgICAgICAgIG1TaG93SG91cnMgPSB0cnVlOworICAgICAgICBtSXMyNEhvdXJNb2RlID0gZmFsc2U7CisgICAgICAgIG1BbU9yUG0gPSBBTTsKKyAgICAgICAgbUFtT3JQbVByZXNzZWQgPSAtMTsKKworICAgICAgICBpbml0SG91cnNBbmRNaW51dGVzVGV4dCgpOworICAgICAgICBpbml0RGF0YSgpOworCisgICAgICAgIG1UcmFuc2l0aW9uTWlkUmFkaXVzTXVsdGlwbGllciA9ICBGbG9hdC5wYXJzZUZsb2F0KAorICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl90cmFuc2l0aW9uX21pZF9yYWRpdXNfbXVsdGlwbGllcikpOworICAgICAgICBtVHJhbnNpdGlvbkVuZFJhZGl1c011bHRpcGxpZXIgPSBGbG9hdC5wYXJzZUZsb2F0KAorICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl90cmFuc2l0aW9uX2VuZF9yYWRpdXNfbXVsdGlwbGllcikpOworCisgICAgICAgIG1UZXh0R3JpZEhlaWdodHNbSE9VUlNdID0gbmV3IGZsb2F0WzddOworICAgICAgICBtVGV4dEdyaWRIZWlnaHRzW01JTlVURVNdID0gbmV3IGZsb2F0WzddOworCisgICAgICAgIG1TZWxlY3Rpb25SYWRpdXNNdWx0aXBsaWVyID0gRmxvYXQucGFyc2VGbG9hdCgKKyAgICAgICAgICAgICAgICByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLnRpbWVwaWNrZXJfc2VsZWN0aW9uX3JhZGl1c19tdWx0aXBsaWVyKSk7CisKKyAgICAgICAgc2V0T25Ub3VjaExpc3RlbmVyKHRoaXMpOworCisgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzCisgICAgICAgIGZpbmFsIENhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgICAgIGZpbmFsIGludCBjdXJyZW50SG91ciA9IGNhbGVuZGFyLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSk7CisgICAgICAgIGZpbmFsIGludCBjdXJyZW50TWludXRlID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1JTlVURSk7CisKKyAgICAgICAgc2V0Q3VycmVudEhvdXIoY3VycmVudEhvdXIpOworICAgICAgICBzZXRDdXJyZW50TWludXRlKGN1cnJlbnRNaW51dGUpOworCisgICAgICAgIHNldEhhcHRpY0ZlZWRiYWNrRW5hYmxlZCh0cnVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNZWFzdXJlIHRoZSB2aWV3IHRvIGVuZCB1cCBhcyBhIHNxdWFyZSwgYmFzZWQgb24gdGhlIG1pbmltdW0gb2YgdGhlIGhlaWdodCBhbmQgd2lkdGguCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKKyAgICAgICAgaW50IG1lYXN1cmVkV2lkdGggPSBNZWFzdXJlU3BlYy5nZXRTaXplKHdpZHRoTWVhc3VyZVNwZWMpOworICAgICAgICBpbnQgd2lkdGhNb2RlID0gTWVhc3VyZVNwZWMuZ2V0TW9kZSh3aWR0aE1lYXN1cmVTcGVjKTsKKyAgICAgICAgaW50IG1lYXN1cmVkSGVpZ2h0ID0gTWVhc3VyZVNwZWMuZ2V0U2l6ZShoZWlnaHRNZWFzdXJlU3BlYyk7CisgICAgICAgIGludCBoZWlnaHRNb2RlID0gTWVhc3VyZVNwZWMuZ2V0TW9kZShoZWlnaHRNZWFzdXJlU3BlYyk7CisgICAgICAgIGludCBtaW5EaW1lbnNpb24gPSBNYXRoLm1pbihtZWFzdXJlZFdpZHRoLCBtZWFzdXJlZEhlaWdodCk7CisKKyAgICAgICAgc3VwZXIub25NZWFzdXJlKE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhtaW5EaW1lbnNpb24sIHdpZHRoTW9kZSksCisgICAgICAgICAgICAgICAgTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKG1pbkRpbWVuc2lvbiwgaGVpZ2h0TW9kZSkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoaW50IGhvdXIsIGludCBtaW51dGUsIGJvb2xlYW4gaXMyNEhvdXJNb2RlKSB7CisgICAgICAgIG1JczI0SG91ck1vZGUgPSBpczI0SG91ck1vZGU7CisgICAgICAgIHNldEN1cnJlbnRIb3VyKGhvdXIpOworICAgICAgICBzZXRDdXJyZW50TWludXRlKG1pbnV0ZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q3VycmVudEl0ZW1TaG93aW5nKGludCBpdGVtLCBib29sZWFuIGFuaW1hdGUpIHsKKyAgICAgICAgc3dpdGNoIChpdGVtKXsKKyAgICAgICAgICAgIGNhc2UgSE9VUlM6CisgICAgICAgICAgICAgICAgc2hvd0hvdXJzKGFuaW1hdGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBNSU5VVEVTOgorICAgICAgICAgICAgICAgIHNob3dNaW51dGVzKGFuaW1hdGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJDbG9ja1ZpZXcgZG9lcyBub3Qgc3VwcG9ydCBzaG93aW5nIGl0ZW0gIiArIGl0ZW0pOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRDdXJyZW50SXRlbVNob3dpbmcoKSB7CisgICAgICAgIHJldHVybiBtU2hvd0hvdXJzID8gSE9VUlMgOiBNSU5VVEVTOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldE9uVmFsdWVTZWxlY3RlZExpc3RlbmVyKE9uVmFsdWVTZWxlY3RlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIG1MaXN0ZW5lciA9IGxpc3RlbmVyOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRIb3VyKGludCBob3VyKSB7CisgICAgICAgIGZpbmFsIGludCBkZWdyZWVzID0gKGhvdXIgJSAxMikgKiBERUdSRUVTX0ZPUl9PTkVfSE9VUjsKKyAgICAgICAgbVNlbGVjdGlvbkRlZ3JlZXNbSE9VUlNdID0gZGVncmVlczsKKyAgICAgICAgbVNlbGVjdGlvbkRlZ3JlZXNbSE9VUlNfSU5ORVJdID0gZGVncmVlczsKKyAgICAgICAgbUFtT3JQbSA9ICgoaG91ciAlIDI0KSA8IDEyKSA/IEFNIDogUE07CisgICAgICAgIGlmIChtSXMyNEhvdXJNb2RlKSB7CisgICAgICAgICAgICBtSXNPbklubmVyQ2lyY2xlID0gKG1BbU9yUG0gPT0gQU0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUlzT25Jbm5lckNpcmNsZSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGluaXREYXRhKCk7CisgICAgICAgIHVwZGF0ZUxheW91dERhdGEoKTsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIC8vIFJldHVybiBob3VycyBpbiAwLTIzIHJhbmdlCisgICAgcHVibGljIGludCBnZXRDdXJyZW50SG91cigpIHsKKyAgICAgICAgaW50IGhvdXJzID0KKyAgICAgICAgICAgICAgICBtU2VsZWN0aW9uRGVncmVlc1ttSXNPbklubmVyQ2lyY2xlID8gSE9VUlNfSU5ORVIgOiBIT1VSU10gLyBERUdSRUVTX0ZPUl9PTkVfSE9VUjsKKyAgICAgICAgaWYgKG1JczI0SG91ck1vZGUpIHsKKyAgICAgICAgICAgIGlmIChtSXNPbklubmVyQ2lyY2xlKSB7CisgICAgICAgICAgICAgICAgaG91cnMgPSBob3VycyAlIDEyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaG91cnMgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBob3VycyArPSAxMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBob3VycyA9IGhvdXJzICUgMTI7CisgICAgICAgICAgICBpZiAoaG91cnMgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChtQW1PclBtID09IFBNKSB7CisgICAgICAgICAgICAgICAgICAgIGhvdXJzID0gMTI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobUFtT3JQbSA9PSBQTSkgeworICAgICAgICAgICAgICAgICAgICBob3VycyArPSAxMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhvdXJzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRNaW51dGUoaW50IG1pbnV0ZSkgeworICAgICAgICBtU2VsZWN0aW9uRGVncmVlc1tNSU5VVEVTXSA9IChtaW51dGUgJSA2MCkgKiBERUdSRUVTX0ZPUl9PTkVfTUlOVVRFOworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBtaW51dGVzIGluIDAtNTkgcmFuZ2UKKyAgICBwdWJsaWMgaW50IGdldEN1cnJlbnRNaW51dGUoKSB7CisgICAgICAgIHJldHVybiAobVNlbGVjdGlvbkRlZ3JlZXNbTUlOVVRFU10gLyBERUdSRUVTX0ZPUl9PTkVfTUlOVVRFKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRBbU9yUG0oaW50IHZhbCkgeworICAgICAgICBtQW1PclBtID0gKHZhbCAlIDIpOworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRBbU9yUG0oKSB7CisgICAgICAgIHJldHVybiBtQW1PclBtOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHN3YXBBbVBtKCkgeworICAgICAgICBtQW1PclBtID0gKG1BbU9yUG0gPT0gQU0pID8gUE0gOiBBTTsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNob3dIb3Vycyhib29sZWFuIGFuaW1hdGUpIHsKKyAgICAgICAgaWYgKG1TaG93SG91cnMpIHJldHVybjsKKyAgICAgICAgbVNob3dIb3VycyA9IHRydWU7CisgICAgICAgIGlmIChhbmltYXRlKSB7CisgICAgICAgICAgICBzdGFydE1pbnV0ZXNUb0hvdXJzQW5pbWF0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgaW5pdERhdGEoKTsKKyAgICAgICAgdXBkYXRlTGF5b3V0RGF0YSgpOworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2hvd01pbnV0ZXMoYm9vbGVhbiBhbmltYXRlKSB7CisgICAgICAgIGlmICghbVNob3dIb3VycykgcmV0dXJuOworICAgICAgICBtU2hvd0hvdXJzID0gZmFsc2U7CisgICAgICAgIGlmIChhbmltYXRlKSB7CisgICAgICAgICAgICBzdGFydEhvdXJzVG9NaW51dGVzQW5pbWF0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgaW5pdERhdGEoKTsKKyAgICAgICAgdXBkYXRlTGF5b3V0RGF0YSgpOworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGluaXRIb3Vyc0FuZE1pbnV0ZXNUZXh0KCkgeworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBob3VycyBhbmQgbWludXRlcyBudW1iZXJzLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEyOyBpKyspIHsKKyAgICAgICAgICAgIG1Ib3VyczEyVGV4dHNbaV0gPSBTdHJpbmcuZm9ybWF0KCIlZCIsIEhPVVJTX05VTUJFUlNbaV0pOworICAgICAgICAgICAgbU91dGVySG91cnMyNFRleHRzW2ldID0gU3RyaW5nLmZvcm1hdCgiJTAyZCIsIEhPVVJTX05VTUJFUlNfMjRbaV0pOworICAgICAgICAgICAgbUlubmVySG91cnMyNFRleHRzW2ldID0gU3RyaW5nLmZvcm1hdCgiJWQiLCBIT1VSU19OVU1CRVJTW2ldKTsKKyAgICAgICAgICAgIG1NaW51dGVzVGV4dHNbaV0gPSBTdHJpbmcuZm9ybWF0KCIlMDJkIiwgTUlOVVRFU19OVU1CRVJTW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZ1tdIGFtUG1UZXh0cyA9IG5ldyBEYXRlRm9ybWF0U3ltYm9scygpLmdldEFtUG1TdHJpbmdzKCk7CisgICAgICAgIG1BbVBtVGV4dFtBTV0gPSBhbVBtVGV4dHNbMF07CisgICAgICAgIG1BbVBtVGV4dFtQTV0gPSBhbVBtVGV4dHNbMV07CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGluaXREYXRhKCkgeworICAgICAgICBpZiAobUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgbU91dGVyVGV4dEhvdXJzID0gbU91dGVySG91cnMyNFRleHRzOworICAgICAgICAgICAgbUlubmVyVGV4dEhvdXJzID0gbUlubmVySG91cnMyNFRleHRzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbU91dGVyVGV4dEhvdXJzID0gbUhvdXJzMTJUZXh0czsKKyAgICAgICAgICAgIG1Jbm5lclRleHRIb3VycyA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBtT3V0ZXJUZXh0TWludXRlcyA9IG1NaW51dGVzVGV4dHM7CisKKyAgICAgICAgZmluYWwgUmVzb3VyY2VzIHJlcyA9IGdldFJlc291cmNlcygpOworCisgICAgICAgIGlmIChtU2hvd0hvdXJzKSB7CisgICAgICAgICAgICBpZiAobUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgICAgIG1DaXJjbGVSYWRpdXNNdWx0aXBsaWVyW0hPVVJTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLnRpbWVwaWNrZXJfY2lyY2xlX3JhZGl1c19tdWx0aXBsaWVyXzI0SG91ck1vZGUpKTsKKyAgICAgICAgICAgICAgICBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbSE9VUlNdID0gRmxvYXQucGFyc2VGbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl9udW1iZXJzX3JhZGl1c19tdWx0aXBsaWVyX291dGVyKSk7CisgICAgICAgICAgICAgICAgbVRleHRTaXplTXVsdGlwbGllcltIT1VSU10gPSBGbG9hdC5wYXJzZUZsb2F0KAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmdldFN0cmluZyhSLnN0cmluZy50aW1lcGlja2VyX3RleHRfc2l6ZV9tdWx0aXBsaWVyX291dGVyKSk7CisKKyAgICAgICAgICAgICAgICBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbSE9VUlNfSU5ORVJdID0gRmxvYXQucGFyc2VGbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl9udW1iZXJzX3JhZGl1c19tdWx0aXBsaWVyX2lubmVyKSk7CisgICAgICAgICAgICAgICAgbVRleHRTaXplTXVsdGlwbGllcltIT1VSU19JTk5FUl0gPSBGbG9hdC5wYXJzZUZsb2F0KAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmdldFN0cmluZyhSLnN0cmluZy50aW1lcGlja2VyX3RleHRfc2l6ZV9tdWx0aXBsaWVyX2lubmVyKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1DaXJjbGVSYWRpdXNNdWx0aXBsaWVyW0hPVVJTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLnRpbWVwaWNrZXJfY2lyY2xlX3JhZGl1c19tdWx0aXBsaWVyKSk7CisgICAgICAgICAgICAgICAgbU51bWJlcnNSYWRpdXNNdWx0aXBsaWVyW0hPVVJTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLnRpbWVwaWNrZXJfbnVtYmVyc19yYWRpdXNfbXVsdGlwbGllcl9ub3JtYWwpKTsKKyAgICAgICAgICAgICAgICBtVGV4dFNpemVNdWx0aXBsaWVyW0hPVVJTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLnRpbWVwaWNrZXJfdGV4dF9zaXplX211bHRpcGxpZXJfbm9ybWFsKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQ2lyY2xlUmFkaXVzTXVsdGlwbGllcltNSU5VVEVTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl9jaXJjbGVfcmFkaXVzX211bHRpcGxpZXIpKTsKKyAgICAgICAgICAgIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltNSU5VVEVTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl9udW1iZXJzX3JhZGl1c19tdWx0aXBsaWVyX25vcm1hbCkpOworICAgICAgICAgICAgbVRleHRTaXplTXVsdGlwbGllcltNSU5VVEVTXSA9IEZsb2F0LnBhcnNlRmxvYXQoCisgICAgICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl90ZXh0X3NpemVfbXVsdGlwbGllcl9ub3JtYWwpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1BbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyW0hPVVJTXSA9IDE7CisgICAgICAgIG1BbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyW0hPVVJTX0lOTkVSXSA9IDE7CisgICAgICAgIG1BbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyW01JTlVURVNdID0gMTsKKworICAgICAgICBtQW1QbUNpcmNsZVJhZGl1c011bHRpcGxpZXIgPSBGbG9hdC5wYXJzZUZsb2F0KAorICAgICAgICAgICAgICAgIHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZXBpY2tlcl9hbXBtX2NpcmNsZV9yYWRpdXNfbXVsdGlwbGllcikpOworCisgICAgICAgIG1QYWludFtIT1VSU10uc2V0QWxwaGEobVNob3dIb3VycyA/IEFMUEhBX09QQVFVRSA6IEFMUEhBX1RSQU5TUEFSRU5UKTsKKyAgICAgICAgbVBhaW50W01JTlVURVNdLnNldEFscGhhKG1TaG93SG91cnMgPyBBTFBIQV9UUkFOU1BBUkVOVCA6IEFMUEhBX09QQVFVRSk7CisKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbSE9VUlNdW1NFTEVDVE9SX0NJUkNMRV0uc2V0QWxwaGEoCisgICAgICAgICAgICAgICAgbVNob3dIb3VycyA/QUxQSEFfU0VMRUNUT1IgOiBBTFBIQV9UUkFOU1BBUkVOVCk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9ET1RdLnNldEFscGhhKAorICAgICAgICAgICAgICAgIG1TaG93SG91cnMgPyBBTFBIQV9PUEFRVUUgOiBBTFBIQV9UUkFOU1BBUkVOVCk7CisgICAgICAgIG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9MSU5FXS5zZXRBbHBoYSgKKyAgICAgICAgICAgICAgICBtU2hvd0hvdXJzID8gQUxQSEFfU0VMRUNUT1IgOiBBTFBIQV9UUkFOU1BBUkVOVCk7CisKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfQ0lSQ0xFXS5zZXRBbHBoYSgKKyAgICAgICAgICAgICAgICBtU2hvd0hvdXJzID8gQUxQSEFfVFJBTlNQQVJFTlQgOiBBTFBIQV9TRUxFQ1RPUik7CisgICAgICAgIG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0RPVF0uc2V0QWxwaGEoCisgICAgICAgICAgICAgICAgbVNob3dIb3VycyA/IEFMUEhBX1RSQU5TUEFSRU5UIDogQUxQSEFfT1BBUVVFKTsKKyAgICAgICAgbVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfTElORV0uc2V0QWxwaGEoCisgICAgICAgICAgICAgICAgbVNob3dIb3VycyA/IEFMUEhBX1RSQU5TUEFSRU5UIDogQUxQSEFfU0VMRUNUT1IpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uTGF5b3V0KGJvb2xlYW4gY2hhbmdlZCwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgeworICAgICAgICB1cGRhdGVMYXlvdXREYXRhKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUxheW91dERhdGEoKSB7CisgICAgICAgIG1YQ2VudGVyID0gZ2V0V2lkdGgoKSAvIDI7CisgICAgICAgIG1ZQ2VudGVyID0gZ2V0SGVpZ2h0KCkgLyAyOworCisgICAgICAgIGZpbmFsIGludCBtaW4gPSBNYXRoLm1pbihtWENlbnRlciwgbVlDZW50ZXIpOworCisgICAgICAgIG1DaXJjbGVSYWRpdXNbSE9VUlNdID0gbWluICogbUNpcmNsZVJhZGl1c011bHRpcGxpZXJbSE9VUlNdOworICAgICAgICBtQ2lyY2xlUmFkaXVzW0hPVVJTX0lOTkVSXSA9IG1pbiAqIG1DaXJjbGVSYWRpdXNNdWx0aXBsaWVyW0hPVVJTXTsKKyAgICAgICAgbUNpcmNsZVJhZGl1c1tNSU5VVEVTXSA9IG1pbiAqIG1DaXJjbGVSYWRpdXNNdWx0aXBsaWVyW01JTlVURVNdOworCisgICAgICAgIGlmICghbUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgLy8gV2UnbGwgbmVlZCB0byBkcmF3IHRoZSBBTS9QTSBjaXJjbGVzLCBzbyB0aGUgbWFpbiBjaXJjbGUgd2lsbCBuZWVkIHRvIGhhdmUKKyAgICAgICAgICAgIC8vIGEgc2xpZ2h0bHkgaGlnaGVyIGNlbnRlci4gVG8ga2VlcCB0aGUgZW50aXJlIHZpZXcgY2VudGVyZWQgdmVydGljYWxseSwgd2UnbGwKKyAgICAgICAgICAgIC8vIGhhdmUgdG8gcHVzaCBpdCB1cCBieSBoYWxmIHRoZSByYWRpdXMgb2YgdGhlIEFNL1BNIGNpcmNsZXMuCisgICAgICAgICAgICBpbnQgYW1QbUNpcmNsZVJhZGl1cyA9IChpbnQpIChtQ2lyY2xlUmFkaXVzW0hPVVJTXSAqIG1BbVBtQ2lyY2xlUmFkaXVzTXVsdGlwbGllcik7CisgICAgICAgICAgICBtWUNlbnRlciAtPSBhbVBtQ2lyY2xlUmFkaXVzIC8gMjsKKyAgICAgICAgfQorCisgICAgICAgIG1NaW5IeXBvdGVudXNlRm9ySW5uZXJOdW1iZXIgPSAoaW50KSAobUNpcmNsZVJhZGl1c1tIT1VSU10KKyAgICAgICAgICAgICAgICAqIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltIT1VSU19JTk5FUl0pIC0gbVNlbGVjdGlvblJhZGl1c1tIT1VSU107CisgICAgICAgIG1NYXhIeXBvdGVudXNlRm9yT3V0ZXJOdW1iZXIgPSAoaW50KSAobUNpcmNsZVJhZGl1c1tIT1VSU10KKyAgICAgICAgICAgICAgICAqIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltIT1VSU10pICsgbVNlbGVjdGlvblJhZGl1c1tIT1VSU107CisgICAgICAgIG1IYWxmd2F5SHlwb3RlbnVzZVBvaW50ID0gKGludCkgKG1DaXJjbGVSYWRpdXNbSE9VUlNdCisgICAgICAgICAgICAgICAgKiAoKG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltIT1VSU10gKyBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbSE9VUlNfSU5ORVJdKSAvIDIpKTsKKworICAgICAgICBtVGV4dFNpemVbSE9VUlNdID0gbUNpcmNsZVJhZGl1c1tIT1VSU10gKiBtVGV4dFNpemVNdWx0aXBsaWVyW0hPVVJTXTsKKyAgICAgICAgbVRleHRTaXplW01JTlVURVNdID0gbUNpcmNsZVJhZGl1c1tNSU5VVEVTXSAqIG1UZXh0U2l6ZU11bHRpcGxpZXJbTUlOVVRFU107CisKKyAgICAgICAgaWYgKG1JczI0SG91ck1vZGUpIHsKKyAgICAgICAgICAgIG1Jbm5lclRleHRTaXplID0gbUNpcmNsZVJhZGl1c1tIT1VSU10gKiBtVGV4dFNpemVNdWx0aXBsaWVyW0hPVVJTX0lOTkVSXTsKKyAgICAgICAgfQorCisgICAgICAgIGNhbGN1bGF0ZUdyaWRTaXplc0hvdXJzKCk7CisgICAgICAgIGNhbGN1bGF0ZUdyaWRTaXplc01pbnV0ZXMoKTsKKworICAgICAgICBtU2VsZWN0aW9uUmFkaXVzW0hPVVJTXSA9IChpbnQpIChtQ2lyY2xlUmFkaXVzW0hPVVJTXSAqIG1TZWxlY3Rpb25SYWRpdXNNdWx0aXBsaWVyKTsKKyAgICAgICAgbVNlbGVjdGlvblJhZGl1c1tIT1VSU19JTk5FUl0gPSBtU2VsZWN0aW9uUmFkaXVzW0hPVVJTXTsKKyAgICAgICAgbVNlbGVjdGlvblJhZGl1c1tNSU5VVEVTXSA9IChpbnQpIChtQ2lyY2xlUmFkaXVzW01JTlVURVNdICogbVNlbGVjdGlvblJhZGl1c011bHRpcGxpZXIpOworCisgICAgICAgIG1BbVBtQ2lyY2xlUmFkaXVzID0gKGludCkgKG1DaXJjbGVSYWRpdXNbSE9VUlNdICogbUFtUG1DaXJjbGVSYWRpdXNNdWx0aXBsaWVyKTsKKyAgICAgICAgbVBhaW50QW1QbVRleHQuc2V0VGV4dFNpemUobUFtUG1DaXJjbGVSYWRpdXMgKiAzIC8gNCk7CisKKyAgICAgICAgLy8gTGluZSB1cCB0aGUgdmVydGljYWwgY2VudGVyIG9mIHRoZSBBTS9QTSBjaXJjbGVzIHdpdGggdGhlIGJvdHRvbSBvZiB0aGUgbWFpbiBjaXJjbGUuCisgICAgICAgIG1BbVBtWUNlbnRlciA9IG1ZQ2VudGVyICsgbUNpcmNsZVJhZGl1c1tIT1VSU107CisKKyAgICAgICAgLy8gTGluZSB1cCB0aGUgaG9yaXpvbnRhbCBlZGdlcyBvZiB0aGUgQU0vUE0gY2lyY2xlcyB3aXRoIHRoZSBob3Jpem9udGFsIGVkZ2VzCisgICAgICAgIC8vIG9mIHRoZSBtYWluIGNpcmNsZQorICAgICAgICBtTGVmdEluZGljYXRvclhDZW50ZXIgPSBtWENlbnRlciAtIG1DaXJjbGVSYWRpdXNbSE9VUlNdICsgbUFtUG1DaXJjbGVSYWRpdXM7CisgICAgICAgIG1SaWdodEluZGljYXRvclhDZW50ZXIgPSBtWENlbnRlciArIG1DaXJjbGVSYWRpdXNbSE9VUlNdIC0gbUFtUG1DaXJjbGVSYWRpdXM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgY2FudmFzLnNhdmUoKTsKKworICAgICAgICBjYWxjdWxhdGVHcmlkU2l6ZXNIb3VycygpOworICAgICAgICBjYWxjdWxhdGVHcmlkU2l6ZXNNaW51dGVzKCk7CisKKyAgICAgICAgZHJhd0NpcmNsZUJhY2tncm91bmQoY2FudmFzKTsKKworICAgICAgICBkcmF3VGV4dEVsZW1lbnRzKGNhbnZhcywgbVRleHRTaXplW0hPVVJTXSwgbVR5cGVmYWNlLCBtT3V0ZXJUZXh0SG91cnMsCisgICAgICAgICAgICAgICAgbVRleHRHcmlkV2lkdGhzW0hPVVJTXSwgbVRleHRHcmlkSGVpZ2h0c1tIT1VSU10sIG1QYWludFtIT1VSU10pOworCisgICAgICAgIGlmIChtSXMyNEhvdXJNb2RlICYmIG1Jbm5lclRleHRIb3VycyAhPSBudWxsKSB7CisgICAgICAgICAgICBkcmF3VGV4dEVsZW1lbnRzKGNhbnZhcywgbUlubmVyVGV4dFNpemUsIG1UeXBlZmFjZSwgbUlubmVyVGV4dEhvdXJzLAorICAgICAgICAgICAgICAgICAgICBtSW5uZXJUZXh0R3JpZFdpZHRocywgbUlubmVyVGV4dEdyaWRIZWlnaHRzLCBtUGFpbnRbSE9VUlNdKTsKKyAgICAgICAgfQorCisgICAgICAgIGRyYXdUZXh0RWxlbWVudHMoY2FudmFzLCBtVGV4dFNpemVbTUlOVVRFU10sIG1UeXBlZmFjZSwgbU91dGVyVGV4dE1pbnV0ZXMsCisgICAgICAgICAgICAgICAgbVRleHRHcmlkV2lkdGhzW01JTlVURVNdLCBtVGV4dEdyaWRIZWlnaHRzW01JTlVURVNdLCBtUGFpbnRbTUlOVVRFU10pOworCisgICAgICAgIGRyYXdDZW50ZXIoY2FudmFzKTsKKyAgICAgICAgZHJhd1NlbGVjdG9yKGNhbnZhcyk7CisgICAgICAgIGlmICghbUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgZHJhd0FtUG0oY2FudmFzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCFtSW5wdXRFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBEcmF3IG91dGVyIHZpZXcgcmVjdGFuZ2xlCisgICAgICAgICAgICBtUmVjdEYuc2V0KDAsIDAsIGdldFdpZHRoKCksIGdldEhlaWdodCgpKTsKKyAgICAgICAgICAgIGNhbnZhcy5kcmF3UmVjdChtUmVjdEYsIG1QYWludERpc2FibGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgZHJhd0RlYnVnKGNhbnZhcyk7CisgICAgICAgIH0KKworICAgICAgICBjYW52YXMucmVzdG9yZSgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcmF3Q2lyY2xlQmFja2dyb3VuZChDYW52YXMgY2FudmFzKSB7CisgICAgICAgIGNhbnZhcy5kcmF3Q2lyY2xlKG1YQ2VudGVyLCBtWUNlbnRlciwgbUNpcmNsZVJhZGl1c1tIT1VSU10sIG1QYWludEJhY2tncm91bmQpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcmF3Q2VudGVyKENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgY2FudmFzLmRyYXdDaXJjbGUobVhDZW50ZXIsIG1ZQ2VudGVyLCBDRU5URVJfUkFESVVTLCBtUGFpbnRDZW50ZXIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcmF3U2VsZWN0b3IoQ2FudmFzIGNhbnZhcykgeworICAgICAgICBkcmF3U2VsZWN0b3IoY2FudmFzLCBtSXNPbklubmVyQ2lyY2xlID8gSE9VUlNfSU5ORVIgOiBIT1VSUyk7CisgICAgICAgIGRyYXdTZWxlY3RvcihjYW52YXMsIE1JTlVURVMpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkcmF3QW1QbShDYW52YXMgY2FudmFzKSB7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMYXlvdXRSdGwgPSBpc0xheW91dFJ0bCgpOworCisgICAgICAgIGludCBhbUNvbG9yID0gbUFtUG1VbnNlbGVjdGVkQ29sb3I7CisgICAgICAgIGludCBhbUFscGhhID0gQUxQSEFfT1BBUVVFOworICAgICAgICBpbnQgcG1Db2xvciA9IG1BbVBtVW5zZWxlY3RlZENvbG9yOworICAgICAgICBpbnQgcG1BbHBoYSA9IEFMUEhBX09QQVFVRTsKKyAgICAgICAgaWYgKG1BbU9yUG0gPT0gQU0pIHsKKyAgICAgICAgICAgIGFtQ29sb3IgPSBtQW1QbVNlbGVjdGVkQ29sb3I7CisgICAgICAgICAgICBhbUFscGhhID0gQUxQSEFfQU1QTV9TRUxFQ1RFRDsKKyAgICAgICAgfSBlbHNlIGlmIChtQW1PclBtID09IFBNKSB7CisgICAgICAgICAgICBwbUNvbG9yID0gbUFtUG1TZWxlY3RlZENvbG9yOworICAgICAgICAgICAgcG1BbHBoYSA9IEFMUEhBX0FNUE1fU0VMRUNURUQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1BbU9yUG1QcmVzc2VkID09IEFNKSB7CisgICAgICAgICAgICBhbUNvbG9yID0gbUFtUG1TZWxlY3RlZENvbG9yOworICAgICAgICAgICAgYW1BbHBoYSA9IEFMUEhBX0FNUE1fUFJFU1NFRDsKKyAgICAgICAgfSBlbHNlIGlmIChtQW1PclBtUHJlc3NlZCA9PSBQTSkgeworICAgICAgICAgICAgcG1Db2xvciA9IG1BbVBtU2VsZWN0ZWRDb2xvcjsKKyAgICAgICAgICAgIHBtQWxwaGEgPSBBTFBIQV9BTVBNX1BSRVNTRUQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBEcmF3IHRoZSB0d28gY2lyY2xlcworICAgICAgICBtUGFpbnRBbVBtQ2lyY2xlW0FNXS5zZXRDb2xvcihhbUNvbG9yKTsKKyAgICAgICAgbVBhaW50QW1QbUNpcmNsZVtBTV0uc2V0QWxwaGEoYW1BbHBoYSk7CisgICAgICAgIGNhbnZhcy5kcmF3Q2lyY2xlKGlzTGF5b3V0UnRsID8gbVJpZ2h0SW5kaWNhdG9yWENlbnRlciA6IG1MZWZ0SW5kaWNhdG9yWENlbnRlciwKKyAgICAgICAgICAgICAgICBtQW1QbVlDZW50ZXIsIG1BbVBtQ2lyY2xlUmFkaXVzLCBtUGFpbnRBbVBtQ2lyY2xlW0FNXSk7CisKKyAgICAgICAgbVBhaW50QW1QbUNpcmNsZVtQTV0uc2V0Q29sb3IocG1Db2xvcik7CisgICAgICAgIG1QYWludEFtUG1DaXJjbGVbUE1dLnNldEFscGhhKHBtQWxwaGEpOworICAgICAgICBjYW52YXMuZHJhd0NpcmNsZShpc0xheW91dFJ0bCA/IG1MZWZ0SW5kaWNhdG9yWENlbnRlciA6IG1SaWdodEluZGljYXRvclhDZW50ZXIsCisgICAgICAgICAgICAgICAgbUFtUG1ZQ2VudGVyLCBtQW1QbUNpcmNsZVJhZGl1cywgbVBhaW50QW1QbUNpcmNsZVtQTV0pOworCisgICAgICAgIC8vIERyYXcgdGhlIEFNL1BNIHRleHRzIG9uIHRvcAorICAgICAgICBtUGFpbnRBbVBtVGV4dC5zZXRDb2xvcihtQW1QbVRleHRDb2xvcik7CisgICAgICAgIGZsb2F0IHRleHRZQ2VudGVyID0gbUFtUG1ZQ2VudGVyIC0KKyAgICAgICAgICAgICAgICAoaW50KSAobVBhaW50QW1QbVRleHQuZGVzY2VudCgpICsgbVBhaW50QW1QbVRleHQuYXNjZW50KCkpIC8gMjsKKworICAgICAgICBjYW52YXMuZHJhd1RleHQoaXNMYXlvdXRSdGwgPyBtQW1QbVRleHRbUE1dIDogbUFtUG1UZXh0W0FNXSwgbUxlZnRJbmRpY2F0b3JYQ2VudGVyLAorICAgICAgICAgICAgICAgIHRleHRZQ2VudGVyLCBtUGFpbnRBbVBtVGV4dCk7CisgICAgICAgIGNhbnZhcy5kcmF3VGV4dChpc0xheW91dFJ0bCA/IG1BbVBtVGV4dFtBTV0gOiBtQW1QbVRleHRbUE1dLCBtUmlnaHRJbmRpY2F0b3JYQ2VudGVyLAorICAgICAgICAgICAgICAgIHRleHRZQ2VudGVyLCBtUGFpbnRBbVBtVGV4dCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRyYXdTZWxlY3RvcihDYW52YXMgY2FudmFzLCBpbnQgaW5kZXgpIHsKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjdXJyZW50IHJhZGl1cyBhdCB3aGljaCB0byBwbGFjZSB0aGUgc2VsZWN0aW9uIGNpcmNsZS4KKyAgICAgICAgbUxpbmVMZW5ndGhbaW5kZXhdID0gKGludCkgKG1DaXJjbGVSYWRpdXNbaW5kZXhdCisgICAgICAgICAgICAgICAgKiBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbaW5kZXhdICogbUFuaW1hdGlvblJhZGl1c011bHRpcGxpZXJbaW5kZXhdKTsKKworICAgICAgICBkb3VibGUgc2VsZWN0aW9uUmFkaWFucyA9IE1hdGgudG9SYWRpYW5zKG1TZWxlY3Rpb25EZWdyZWVzW2luZGV4XSk7CisKKyAgICAgICAgaW50IHBvaW50WCA9IG1YQ2VudGVyICsgKGludCkgKG1MaW5lTGVuZ3RoW2luZGV4XSAqIE1hdGguc2luKHNlbGVjdGlvblJhZGlhbnMpKTsKKyAgICAgICAgaW50IHBvaW50WSA9IG1ZQ2VudGVyIC0gKGludCkgKG1MaW5lTGVuZ3RoW2luZGV4XSAqIE1hdGguY29zKHNlbGVjdGlvblJhZGlhbnMpKTsKKworICAgICAgICAvLyBEcmF3IHRoZSBzZWxlY3Rpb24gY2lyY2xlCisgICAgICAgIGNhbnZhcy5kcmF3Q2lyY2xlKHBvaW50WCwgcG9pbnRZLCBtU2VsZWN0aW9uUmFkaXVzW2luZGV4XSwKKyAgICAgICAgICAgICAgICBtUGFpbnRTZWxlY3RvcltpbmRleCAlIDJdW1NFTEVDVE9SX0NJUkNMRV0pOworCisgICAgICAgIC8vIERyYXcgdGhlIGRvdCBpZiBuZWVkZWQKKyAgICAgICAgaWYgKG1TZWxlY3Rpb25EZWdyZWVzW2luZGV4XSAlIDMwICE9IDApIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCBvbiBhIGRpcmVjdCB0aWNrCisgICAgICAgICAgICBjYW52YXMuZHJhd0NpcmNsZShwb2ludFgsIHBvaW50WSwgKG1TZWxlY3Rpb25SYWRpdXNbaW5kZXhdICogMiAvIDcpLAorICAgICAgICAgICAgICAgICAgICBtUGFpbnRTZWxlY3RvcltpbmRleCAlIDJdW1NFTEVDVE9SX0RPVF0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UncmUgbm90IGRyYXdpbmcgdGhlIGRvdCwgc28gc2hvcnRlbiB0aGUgbGluZSB0byBvbmx5IGdvIGFzIGZhciBhcyB0aGUgZWRnZSBvZiB0aGUKKyAgICAgICAgICAgIC8vIHNlbGVjdGlvbiBjaXJjbGUKKyAgICAgICAgICAgIGludCBsaW5lTGVuZ3RoID0gbUxpbmVMZW5ndGhbaW5kZXhdIC0gbVNlbGVjdGlvblJhZGl1c1tpbmRleF07CisgICAgICAgICAgICBwb2ludFggPSBtWENlbnRlciArIChpbnQpIChsaW5lTGVuZ3RoICogTWF0aC5zaW4oc2VsZWN0aW9uUmFkaWFucykpOworICAgICAgICAgICAgcG9pbnRZID0gbVlDZW50ZXIgLSAoaW50KSAobGluZUxlbmd0aCAqIE1hdGguY29zKHNlbGVjdGlvblJhZGlhbnMpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERyYXcgdGhlIGxpbmUKKyAgICAgICAgY2FudmFzLmRyYXdMaW5lKG1YQ2VudGVyLCBtWUNlbnRlciwgcG9pbnRYLCBwb2ludFksCisgICAgICAgICAgICAgICAgbVBhaW50U2VsZWN0b3JbaW5kZXggJSAyXVtTRUxFQ1RPUl9MSU5FXSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRyYXdEZWJ1ZyhDYW52YXMgY2FudmFzKSB7CisgICAgICAgIC8vIERyYXcgb3V0ZXIgbnVtYmVycyBjaXJjbGUKKyAgICAgICAgZmluYWwgZmxvYXQgb3V0ZXJSYWRpdXMgPSBtQ2lyY2xlUmFkaXVzW0hPVVJTXSAqIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltIT1VSU107CisgICAgICAgIGNhbnZhcy5kcmF3Q2lyY2xlKG1YQ2VudGVyLCBtWUNlbnRlciwgb3V0ZXJSYWRpdXMsIG1QYWludERlYnVnKTsKKworICAgICAgICAvLyBEcmF3IGlubmVyIG51bWJlcnMgY2lyY2xlCisgICAgICAgIGZpbmFsIGZsb2F0IGlubmVyUmFkaXVzID0gbUNpcmNsZVJhZGl1c1tIT1VSU10gKiBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbSE9VUlNfSU5ORVJdOworICAgICAgICBjYW52YXMuZHJhd0NpcmNsZShtWENlbnRlciwgbVlDZW50ZXIsIGlubmVyUmFkaXVzLCBtUGFpbnREZWJ1Zyk7CisKKyAgICAgICAgLy8gRHJhdyBvdXRlciBiYWNrZ3JvdW5kIGNpcmNsZQorICAgICAgICBjYW52YXMuZHJhd0NpcmNsZShtWENlbnRlciwgbVlDZW50ZXIsIG1DaXJjbGVSYWRpdXNbSE9VUlNdLCBtUGFpbnREZWJ1Zyk7CisKKyAgICAgICAgLy8gRHJhdyBvdXRlciByZWN0YW5nbGUgZm9yIGNpcmNsZXMKKyAgICAgICAgZmxvYXQgbGVmdCA9IG1YQ2VudGVyIC0gb3V0ZXJSYWRpdXM7CisgICAgICAgIGZsb2F0IHRvcCA9IG1ZQ2VudGVyIC0gb3V0ZXJSYWRpdXM7CisgICAgICAgIGZsb2F0IHJpZ2h0ID0gbVhDZW50ZXIgKyBvdXRlclJhZGl1czsKKyAgICAgICAgZmxvYXQgYm90dG9tID0gbVlDZW50ZXIgKyBvdXRlclJhZGl1czsKKyAgICAgICAgbVJlY3RGID0gbmV3IFJlY3RGKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgIGNhbnZhcy5kcmF3UmVjdChtUmVjdEYsIG1QYWludERlYnVnKTsKKworICAgICAgICAvLyBEcmF3IG91dGVyIHJlY3RhbmdsZSBmb3IgYmFja2dyb3VuZAorICAgICAgICBsZWZ0ID0gbVhDZW50ZXIgLSBtQ2lyY2xlUmFkaXVzW0hPVVJTXTsKKyAgICAgICAgdG9wID0gbVlDZW50ZXIgLSBtQ2lyY2xlUmFkaXVzW0hPVVJTXTsKKyAgICAgICAgcmlnaHQgPSBtWENlbnRlciArIG1DaXJjbGVSYWRpdXNbSE9VUlNdOworICAgICAgICBib3R0b20gPSBtWUNlbnRlciArIG1DaXJjbGVSYWRpdXNbSE9VUlNdOworICAgICAgICBtUmVjdEYuc2V0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgIGNhbnZhcy5kcmF3UmVjdChtUmVjdEYsIG1QYWludERlYnVnKTsKKworICAgICAgICAvLyBEcmF3IG91dGVyIHZpZXcgcmVjdGFuZ2xlCisgICAgICAgIG1SZWN0Ri5zZXQoMCwgMCwgZ2V0V2lkdGgoKSwgZ2V0SGVpZ2h0KCkpOworICAgICAgICBjYW52YXMuZHJhd1JlY3QobVJlY3RGLCBtUGFpbnREZWJ1Zyk7CisKKyAgICAgICAgLy8gRHJhdyBzZWxlY3RlZCB0aW1lCisgICAgICAgIGZpbmFsIFN0cmluZyBzZWxlY3RlZCA9IFN0cmluZy5mb3JtYXQoIiUwMmQ6JTAyZCIsIGdldEN1cnJlbnRIb3VyKCksIGdldEN1cnJlbnRNaW51dGUoKSk7CisKKyAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcyBscCA9IG5ldyBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zKFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5ULAorICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKTsKKyAgICAgICAgVGV4dFZpZXcgdHYgPSBuZXcgVGV4dFZpZXcoZ2V0Q29udGV4dCgpKTsKKyAgICAgICAgdHYuc2V0TGF5b3V0UGFyYW1zKGxwKTsKKyAgICAgICAgdHYuc2V0VGV4dChzZWxlY3RlZCk7CisgICAgICAgIHR2Lm1lYXN1cmUoTWVhc3VyZVNwZWMuVU5TUEVDSUZJRUQsIE1lYXN1cmVTcGVjLlVOU1BFQ0lGSUVEKTsKKyAgICAgICAgUGFpbnQgcGFpbnQgPSB0di5nZXRQYWludCgpOworICAgICAgICBwYWludC5zZXRDb2xvcihERUJVR19URVhUX0NPTE9SKTsKKworICAgICAgICBmaW5hbCBpbnQgd2lkdGggPSB0di5nZXRNZWFzdXJlZFdpZHRoKCk7CisKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gcGFpbnQuZGVzY2VudCgpIC0gcGFpbnQuYXNjZW50KCk7CisgICAgICAgIGZsb2F0IHggPSBtWENlbnRlciAtIHdpZHRoIC8gMjsKKyAgICAgICAgZmxvYXQgeSA9IG1ZQ2VudGVyICsgMS41ZiAqIGhlaWdodDsKKworICAgICAgICBjYW52YXMuZHJhd1RleHQoc2VsZWN0ZWQudG9TdHJpbmcoKSwgeCwgeSwgcGFpbnQpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjYWxjdWxhdGVHcmlkU2l6ZXNIb3VycygpIHsKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0ZXh0IHBvc2l0aW9ucworICAgICAgICBmbG9hdCBudW1iZXJzUmFkaXVzID0gbUNpcmNsZVJhZGl1c1tIT1VSU10KKyAgICAgICAgICAgICAgICAqIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltIT1VSU10gKiBtQW5pbWF0aW9uUmFkaXVzTXVsdGlwbGllcltIT1VSU107CisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBwb3NpdGlvbnMgZm9yIHRoZSAxMiBudW1iZXJzIGluIHRoZSBtYWluIGNpcmNsZS4KKyAgICAgICAgY2FsY3VsYXRlR3JpZFNpemVzKG1QYWludFtIT1VSU10sIG51bWJlcnNSYWRpdXMsIG1YQ2VudGVyLCBtWUNlbnRlciwKKyAgICAgICAgICAgICAgICBtVGV4dFNpemVbSE9VUlNdLCBtVGV4dEdyaWRIZWlnaHRzW0hPVVJTXSwgbVRleHRHcmlkV2lkdGhzW0hPVVJTXSk7CisKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBpbm5lciBjaXJjbGUsIGNhbGN1bGF0ZSB0aG9zZSBwb3NpdGlvbnMgdG9vLgorICAgICAgICBpZiAobUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgZmxvYXQgaW5uZXJOdW1iZXJzUmFkaXVzID0gbUNpcmNsZVJhZGl1c1tIT1VSU19JTk5FUl0KKyAgICAgICAgICAgICAgICAgICAgKiBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbSE9VUlNfSU5ORVJdCisgICAgICAgICAgICAgICAgICAgICogbUFuaW1hdGlvblJhZGl1c011bHRpcGxpZXJbSE9VUlNfSU5ORVJdOworCisgICAgICAgICAgICBjYWxjdWxhdGVHcmlkU2l6ZXMobVBhaW50W0hPVVJTXSwgaW5uZXJOdW1iZXJzUmFkaXVzLCBtWENlbnRlciwgbVlDZW50ZXIsCisgICAgICAgICAgICAgICAgICAgIG1Jbm5lclRleHRTaXplLCBtSW5uZXJUZXh0R3JpZEhlaWdodHMsIG1Jbm5lclRleHRHcmlkV2lkdGhzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjYWxjdWxhdGVHcmlkU2l6ZXNNaW51dGVzKCkgeworICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHRleHQgcG9zaXRpb25zCisgICAgICAgIGZsb2F0IG51bWJlcnNSYWRpdXMgPSBtQ2lyY2xlUmFkaXVzW01JTlVURVNdCisgICAgICAgICAgICAgICAgKiBtTnVtYmVyc1JhZGl1c011bHRpcGxpZXJbTUlOVVRFU10gKiBtQW5pbWF0aW9uUmFkaXVzTXVsdGlwbGllcltNSU5VVEVTXTsKKworICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHBvc2l0aW9ucyBmb3IgdGhlIDEyIG51bWJlcnMgaW4gdGhlIG1haW4gY2lyY2xlLgorICAgICAgICBjYWxjdWxhdGVHcmlkU2l6ZXMobVBhaW50W01JTlVURVNdLCBudW1iZXJzUmFkaXVzLCBtWENlbnRlciwgbVlDZW50ZXIsCisgICAgICAgICAgICAgICAgbVRleHRTaXplW01JTlVURVNdLCBtVGV4dEdyaWRIZWlnaHRzW01JTlVURVNdLCBtVGV4dEdyaWRXaWR0aHNbTUlOVVRFU10pOworICAgIH0KKworCisgICAgLyoqCisgICAgICogVXNpbmcgdGhlIHRyaWdvbm9tZXRyaWMgVW5pdCBDaXJjbGUsIGNhbGN1bGF0ZSB0aGUgcG9zaXRpb25zIHRoYXQgdGhlIHRleHQgd2lsbCBuZWVkIHRvIGJlCisgICAgICogZHJhd24gYXQgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBjaXJjbGUgcmFkaXVzLiBQbGFjZSB0aGUgdmFsdWVzIGluIHRoZSB0ZXh0R3JpZEhlaWdodHMgYW5kCisgICAgICogdGV4dEdyaWRXaWR0aHMgcGFyYW1ldGVycy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUdyaWRTaXplcyhQYWludCBwYWludCwgZmxvYXQgbnVtYmVyc1JhZGl1cywgZmxvYXQgeENlbnRlciwKKyAgICAgICAgICAgIGZsb2F0IHlDZW50ZXIsIGZsb2F0IHRleHRTaXplLCBmbG9hdFtdIHRleHRHcmlkSGVpZ2h0cywgZmxvYXRbXSB0ZXh0R3JpZFdpZHRocykgeworICAgICAgICAvKgorICAgICAgICAgKiBUaGUgbnVtYmVycyBuZWVkIHRvIGJlIGRyYXduIGluIGEgN3g3IGdyaWQsIHJlcHJlc2VudGluZyB0aGUgcG9pbnRzIG9uIHRoZSBVbml0IENpcmNsZS4KKyAgICAgICAgICovCisgICAgICAgIGZpbmFsIGZsb2F0IG9mZnNldDEgPSBudW1iZXJzUmFkaXVzOworICAgICAgICAvLyBjb3MoMzApID0gYSAvIHIgPT4gciAqIGNvcygzMCkKKyAgICAgICAgZmluYWwgZmxvYXQgb2Zmc2V0MiA9IG51bWJlcnNSYWRpdXMgKiBDT1NJTkVfMzBfREVHUkVFUzsKKyAgICAgICAgLy8gc2luKDMwKSA9IG8gLyByID0+IHIgKiBzaW4oMzApCisgICAgICAgIGZpbmFsIGZsb2F0IG9mZnNldDMgPSBudW1iZXJzUmFkaXVzICogU0lORV8zMF9ERUdSRUVTOworCisgICAgICAgIHBhaW50LnNldFRleHRTaXplKHRleHRTaXplKTsKKyAgICAgICAgLy8gV2UnbGwgbmVlZCB5VGV4dEJhc2UgdG8gYmUgc2xpZ2h0bHkgbG93ZXIgdG8gYWNjb3VudCBmb3IgdGhlIHRleHQncyBiYXNlbGluZS4KKyAgICAgICAgeUNlbnRlciAtPSAocGFpbnQuZGVzY2VudCgpICsgcGFpbnQuYXNjZW50KCkpIC8gMjsKKworICAgICAgICB0ZXh0R3JpZEhlaWdodHNbMF0gPSB5Q2VudGVyIC0gb2Zmc2V0MTsKKyAgICAgICAgdGV4dEdyaWRXaWR0aHNbMF0gPSB4Q2VudGVyIC0gb2Zmc2V0MTsKKyAgICAgICAgdGV4dEdyaWRIZWlnaHRzWzFdID0geUNlbnRlciAtIG9mZnNldDI7CisgICAgICAgIHRleHRHcmlkV2lkdGhzWzFdID0geENlbnRlciAtIG9mZnNldDI7CisgICAgICAgIHRleHRHcmlkSGVpZ2h0c1syXSA9IHlDZW50ZXIgLSBvZmZzZXQzOworICAgICAgICB0ZXh0R3JpZFdpZHRoc1syXSA9IHhDZW50ZXIgLSBvZmZzZXQzOworICAgICAgICB0ZXh0R3JpZEhlaWdodHNbM10gPSB5Q2VudGVyOworICAgICAgICB0ZXh0R3JpZFdpZHRoc1szXSA9IHhDZW50ZXI7CisgICAgICAgIHRleHRHcmlkSGVpZ2h0c1s0XSA9IHlDZW50ZXIgKyBvZmZzZXQzOworICAgICAgICB0ZXh0R3JpZFdpZHRoc1s0XSA9IHhDZW50ZXIgKyBvZmZzZXQzOworICAgICAgICB0ZXh0R3JpZEhlaWdodHNbNV0gPSB5Q2VudGVyICsgb2Zmc2V0MjsKKyAgICAgICAgdGV4dEdyaWRXaWR0aHNbNV0gPSB4Q2VudGVyICsgb2Zmc2V0MjsKKyAgICAgICAgdGV4dEdyaWRIZWlnaHRzWzZdID0geUNlbnRlciArIG9mZnNldDE7CisgICAgICAgIHRleHRHcmlkV2lkdGhzWzZdID0geENlbnRlciArIG9mZnNldDE7CisgICAgfQorCisgICAgLyoqCisgICAgICogRHJhdyB0aGUgMTIgdGV4dCB2YWx1ZXMgYXQgdGhlIHBvc2l0aW9ucyBzcGVjaWZpZWQgYnkgdGhlIHRleHRHcmlkIHBhcmFtZXRlcnMuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGRyYXdUZXh0RWxlbWVudHMoQ2FudmFzIGNhbnZhcywgZmxvYXQgdGV4dFNpemUsIFR5cGVmYWNlIHR5cGVmYWNlLCBTdHJpbmdbXSB0ZXh0cywKKyAgICAgICAgICAgIGZsb2F0W10gdGV4dEdyaWRXaWR0aHMsIGZsb2F0W10gdGV4dEdyaWRIZWlnaHRzLCBQYWludCBwYWludCkgeworICAgICAgICBwYWludC5zZXRUZXh0U2l6ZSh0ZXh0U2l6ZSk7CisgICAgICAgIHBhaW50LnNldFR5cGVmYWNlKHR5cGVmYWNlKTsKKyAgICAgICAgY2FudmFzLmRyYXdUZXh0KHRleHRzWzBdLCB0ZXh0R3JpZFdpZHRoc1szXSwgdGV4dEdyaWRIZWlnaHRzWzBdLCBwYWludCk7CisgICAgICAgIGNhbnZhcy5kcmF3VGV4dCh0ZXh0c1sxXSwgdGV4dEdyaWRXaWR0aHNbNF0sIHRleHRHcmlkSGVpZ2h0c1sxXSwgcGFpbnQpOworICAgICAgICBjYW52YXMuZHJhd1RleHQodGV4dHNbMl0sIHRleHRHcmlkV2lkdGhzWzVdLCB0ZXh0R3JpZEhlaWdodHNbMl0sIHBhaW50KTsKKyAgICAgICAgY2FudmFzLmRyYXdUZXh0KHRleHRzWzNdLCB0ZXh0R3JpZFdpZHRoc1s2XSwgdGV4dEdyaWRIZWlnaHRzWzNdLCBwYWludCk7CisgICAgICAgIGNhbnZhcy5kcmF3VGV4dCh0ZXh0c1s0XSwgdGV4dEdyaWRXaWR0aHNbNV0sIHRleHRHcmlkSGVpZ2h0c1s0XSwgcGFpbnQpOworICAgICAgICBjYW52YXMuZHJhd1RleHQodGV4dHNbNV0sIHRleHRHcmlkV2lkdGhzWzRdLCB0ZXh0R3JpZEhlaWdodHNbNV0sIHBhaW50KTsKKyAgICAgICAgY2FudmFzLmRyYXdUZXh0KHRleHRzWzZdLCB0ZXh0R3JpZFdpZHRoc1szXSwgdGV4dEdyaWRIZWlnaHRzWzZdLCBwYWludCk7CisgICAgICAgIGNhbnZhcy5kcmF3VGV4dCh0ZXh0c1s3XSwgdGV4dEdyaWRXaWR0aHNbMl0sIHRleHRHcmlkSGVpZ2h0c1s1XSwgcGFpbnQpOworICAgICAgICBjYW52YXMuZHJhd1RleHQodGV4dHNbOF0sIHRleHRHcmlkV2lkdGhzWzFdLCB0ZXh0R3JpZEhlaWdodHNbNF0sIHBhaW50KTsKKyAgICAgICAgY2FudmFzLmRyYXdUZXh0KHRleHRzWzldLCB0ZXh0R3JpZFdpZHRoc1swXSwgdGV4dEdyaWRIZWlnaHRzWzNdLCBwYWludCk7CisgICAgICAgIGNhbnZhcy5kcmF3VGV4dCh0ZXh0c1sxMF0sIHRleHRHcmlkV2lkdGhzWzFdLCB0ZXh0R3JpZEhlaWdodHNbMl0sIHBhaW50KTsKKyAgICAgICAgY2FudmFzLmRyYXdUZXh0KHRleHRzWzExXSwgdGV4dEdyaWRXaWR0aHNbMl0sIHRleHRHcmlkSGVpZ2h0c1sxXSwgcGFpbnQpOworICAgIH0KKworICAgIC8vIFVzZWQgZm9yIGFuaW1hdGluZyB0aGUgaG91cnMgYnkgY2hhbmdpbmcgdGhlaXIgcmFkaXVzCisgICAgcHJpdmF0ZSB2b2lkIHNldEFuaW1hdGlvblJhZGl1c011bHRpcGxpZXJIb3VycyhmbG9hdCBhbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyKSB7CisgICAgICAgIG1BbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyW0hPVVJTXSA9IGFuaW1hdGlvblJhZGl1c011bHRpcGxpZXI7CisgICAgICAgIG1BbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyW0hPVVJTX0lOTkVSXSA9IGFuaW1hdGlvblJhZGl1c011bHRpcGxpZXI7CisgICAgfQorCisgICAgLy8gVXNlZCBmb3IgYW5pbWF0aW5nIHRoZSBtaW51dGVzIGJ5IGNoYW5naW5nIHRoZWlyIHJhZGl1cworICAgIHByaXZhdGUgdm9pZCBzZXRBbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyTWludXRlcyhmbG9hdCBhbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyKSB7CisgICAgICAgIG1BbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyW01JTlVURVNdID0gYW5pbWF0aW9uUmFkaXVzTXVsdGlwbGllcjsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RBbmltYXRvciBnZXRSYWRpdXNEaXNhcHBlYXJBbmltYXRvcihPYmplY3QgdGFyZ2V0LAorICAgICAgICAgICAgU3RyaW5nIHJhZGl1c1Byb3BlcnR5TmFtZSwgSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyIHVwZGF0ZUxpc3RlbmVyLAorICAgICAgICAgICAgZmxvYXQgbWlkUmFkaXVzTXVsdGlwbGllciwgZmxvYXQgZW5kUmFkaXVzTXVsdGlwbGllcikgeworICAgICAgICBLZXlmcmFtZSBrZjAsIGtmMSwga2YyOworICAgICAgICBmbG9hdCBtaWR3YXlQb2ludCA9IDAuMmY7CisgICAgICAgIGludCBkdXJhdGlvbiA9IDUwMDsKKworICAgICAgICBrZjAgPSBLZXlmcmFtZS5vZkZsb2F0KDBmLCAxKTsKKyAgICAgICAga2YxID0gS2V5ZnJhbWUub2ZGbG9hdChtaWR3YXlQb2ludCwgbWlkUmFkaXVzTXVsdGlwbGllcik7CisgICAgICAgIGtmMiA9IEtleWZyYW1lLm9mRmxvYXQoMWYsIGVuZFJhZGl1c011bHRpcGxpZXIpOworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciByYWRpdXNEaXNhcHBlYXIgPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZktleWZyYW1lKAorICAgICAgICAgICAgICAgIHJhZGl1c1Byb3BlcnR5TmFtZSwga2YwLCBrZjEsIGtmMik7CisKKyAgICAgICAgT2JqZWN0QW5pbWF0b3IgYW5pbWF0b3IgPSBPYmplY3RBbmltYXRvci5vZlByb3BlcnR5VmFsdWVzSG9sZGVyKAorICAgICAgICAgICAgICAgIHRhcmdldCwgcmFkaXVzRGlzYXBwZWFyKS5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgICAgIGFuaW1hdG9yLmFkZFVwZGF0ZUxpc3RlbmVyKHVwZGF0ZUxpc3RlbmVyKTsKKyAgICAgICAgcmV0dXJuIGFuaW1hdG9yOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIE9iamVjdEFuaW1hdG9yIGdldFJhZGl1c1JlYXBwZWFyQW5pbWF0b3IoT2JqZWN0IHRhcmdldCwKKyAgICAgICAgICAgIFN0cmluZyByYWRpdXNQcm9wZXJ0eU5hbWUsIEludmFsaWRhdGVVcGRhdGVMaXN0ZW5lciB1cGRhdGVMaXN0ZW5lciwKKyAgICAgICAgICAgIGZsb2F0IG1pZFJhZGl1c011bHRpcGxpZXIsIGZsb2F0IGVuZFJhZGl1c011bHRpcGxpZXIpIHsKKyAgICAgICAgS2V5ZnJhbWUga2YwLCBrZjEsIGtmMiwga2YzOworICAgICAgICBmbG9hdCBtaWR3YXlQb2ludCA9IDAuMmY7CisgICAgICAgIGludCBkdXJhdGlvbiA9IDUwMDsKKworICAgICAgICAvLyBTZXQgdXAgYW5pbWF0b3IgZm9yIHJlYXBwZWFyaW5nLgorICAgICAgICBmbG9hdCBkZWxheU11bHRpcGxpZXIgPSAwLjI1ZjsKKyAgICAgICAgZmxvYXQgdHJhbnNpdGlvbkR1cmF0aW9uTXVsdGlwbGllciA9IDFmOworICAgICAgICBmbG9hdCB0b3RhbER1cmF0aW9uTXVsdGlwbGllciA9IHRyYW5zaXRpb25EdXJhdGlvbk11bHRpcGxpZXIgKyBkZWxheU11bHRpcGxpZXI7CisgICAgICAgIGludCB0b3RhbER1cmF0aW9uID0gKGludCkgKGR1cmF0aW9uICogdG90YWxEdXJhdGlvbk11bHRpcGxpZXIpOworICAgICAgICBmbG9hdCBkZWxheVBvaW50ID0gKGRlbGF5TXVsdGlwbGllciAqIGR1cmF0aW9uKSAvIHRvdGFsRHVyYXRpb247CisgICAgICAgIG1pZHdheVBvaW50ID0gMSAtIChtaWR3YXlQb2ludCAqICgxIC0gZGVsYXlQb2ludCkpOworCisgICAgICAgIGtmMCA9IEtleWZyYW1lLm9mRmxvYXQoMGYsIGVuZFJhZGl1c011bHRpcGxpZXIpOworICAgICAgICBrZjEgPSBLZXlmcmFtZS5vZkZsb2F0KGRlbGF5UG9pbnQsIGVuZFJhZGl1c011bHRpcGxpZXIpOworICAgICAgICBrZjIgPSBLZXlmcmFtZS5vZkZsb2F0KG1pZHdheVBvaW50LCBtaWRSYWRpdXNNdWx0aXBsaWVyKTsKKyAgICAgICAga2YzID0gS2V5ZnJhbWUub2ZGbG9hdCgxZiwgMSk7CisgICAgICAgIFByb3BlcnR5VmFsdWVzSG9sZGVyIHJhZGl1c1JlYXBwZWFyID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZLZXlmcmFtZSgKKyAgICAgICAgICAgICAgICByYWRpdXNQcm9wZXJ0eU5hbWUsIGtmMCwga2YxLCBrZjIsIGtmMyk7CisKKyAgICAgICAgT2JqZWN0QW5pbWF0b3IgYW5pbWF0b3IgPSBPYmplY3RBbmltYXRvci5vZlByb3BlcnR5VmFsdWVzSG9sZGVyKAorICAgICAgICAgICAgICAgIHRhcmdldCwgcmFkaXVzUmVhcHBlYXIpLnNldER1cmF0aW9uKHRvdGFsRHVyYXRpb24pOworICAgICAgICBhbmltYXRvci5hZGRVcGRhdGVMaXN0ZW5lcih1cGRhdGVMaXN0ZW5lcik7CisgICAgICAgIHJldHVybiBhbmltYXRvcjsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RBbmltYXRvciBnZXRGYWRlT3V0QW5pbWF0b3IoT2JqZWN0IHRhcmdldCwgaW50IHN0YXJ0QWxwaGEsIGludCBlbmRBbHBoYSwKKyAgICAgICAgICAgICAgICBJbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIgdXBkYXRlTGlzdGVuZXIpIHsKKyAgICAgICAgaW50IGR1cmF0aW9uID0gNTAwOworICAgICAgICBPYmplY3RBbmltYXRvciBhbmltYXRvciA9IE9iamVjdEFuaW1hdG9yLm9mSW50KHRhcmdldCwgImFscGhhIiwgc3RhcnRBbHBoYSwgZW5kQWxwaGEpOworICAgICAgICBhbmltYXRvci5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgICAgIGFuaW1hdG9yLmFkZFVwZGF0ZUxpc3RlbmVyKHVwZGF0ZUxpc3RlbmVyKTsKKworICAgICAgICByZXR1cm4gYW5pbWF0b3I7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0QW5pbWF0b3IgZ2V0RmFkZUluQW5pbWF0b3IoT2JqZWN0IHRhcmdldCwgaW50IHN0YXJ0QWxwaGEsIGludCBlbmRBbHBoYSwKKyAgICAgICAgICAgICAgICBJbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIgdXBkYXRlTGlzdGVuZXIpIHsKKyAgICAgICAgS2V5ZnJhbWUga2YwLCBrZjEsIGtmMjsKKyAgICAgICAgaW50IGR1cmF0aW9uID0gNTAwOworCisgICAgICAgIC8vIFNldCB1cCBhbmltYXRvciBmb3IgcmVhcHBlYXJpbmcuCisgICAgICAgIGZsb2F0IGRlbGF5TXVsdGlwbGllciA9IDAuMjVmOworICAgICAgICBmbG9hdCB0cmFuc2l0aW9uRHVyYXRpb25NdWx0aXBsaWVyID0gMWY7CisgICAgICAgIGZsb2F0IHRvdGFsRHVyYXRpb25NdWx0aXBsaWVyID0gdHJhbnNpdGlvbkR1cmF0aW9uTXVsdGlwbGllciArIGRlbGF5TXVsdGlwbGllcjsKKyAgICAgICAgaW50IHRvdGFsRHVyYXRpb24gPSAoaW50KSAoZHVyYXRpb24gKiB0b3RhbER1cmF0aW9uTXVsdGlwbGllcik7CisgICAgICAgIGZsb2F0IGRlbGF5UG9pbnQgPSAoZGVsYXlNdWx0aXBsaWVyICogZHVyYXRpb24pIC8gdG90YWxEdXJhdGlvbjsKKworICAgICAgICBrZjAgPSBLZXlmcmFtZS5vZkludCgwZiwgc3RhcnRBbHBoYSk7CisgICAgICAgIGtmMSA9IEtleWZyYW1lLm9mSW50KGRlbGF5UG9pbnQsIHN0YXJ0QWxwaGEpOworICAgICAgICBrZjIgPSBLZXlmcmFtZS5vZkludCgxZiwgZW5kQWxwaGEpOworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBmYWRlSW4gPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZktleWZyYW1lKCJhbHBoYSIsIGtmMCwga2YxLCBrZjIpOworCisgICAgICAgIE9iamVjdEFuaW1hdG9yIGFuaW1hdG9yID0gT2JqZWN0QW5pbWF0b3Iub2ZQcm9wZXJ0eVZhbHVlc0hvbGRlcigKKyAgICAgICAgICAgICAgICB0YXJnZXQsIGZhZGVJbikuc2V0RHVyYXRpb24odG90YWxEdXJhdGlvbik7CisgICAgICAgIGFuaW1hdG9yLmFkZFVwZGF0ZUxpc3RlbmVyKHVwZGF0ZUxpc3RlbmVyKTsKKyAgICAgICAgcmV0dXJuIGFuaW1hdG9yOworICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyIGltcGxlbWVudHMgVmFsdWVBbmltYXRvci5BbmltYXRvclVwZGF0ZUxpc3RlbmVyIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uVXBkYXRlKFZhbHVlQW5pbWF0b3IgYW5pbWF0aW9uKSB7CisgICAgICAgICAgICBSYWRpYWxUaW1lUGlja2VyVmlldy50aGlzLmludmFsaWRhdGUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzdGFydEhvdXJzVG9NaW51dGVzQW5pbWF0aW9uKCkgeworICAgICAgICBpZiAobUhvdXJzVG9NaW51dGVzQW5pbXMuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIG1Ib3Vyc1RvTWludXRlc0FuaW1zLmFkZChnZXRSYWRpdXNEaXNhcHBlYXJBbmltYXRvcih0aGlzLAorICAgICAgICAgICAgICAgICAgICAiYW5pbWF0aW9uUmFkaXVzTXVsdGlwbGllckhvdXJzIiwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zaXRpb25NaWRSYWRpdXNNdWx0aXBsaWVyLCBtVHJhbnNpdGlvbkVuZFJhZGl1c011bHRpcGxpZXIpKTsKKyAgICAgICAgICAgIG1Ib3Vyc1RvTWludXRlc0FuaW1zLmFkZChnZXRGYWRlT3V0QW5pbWF0b3IobVBhaW50W0hPVVJTXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfT1BBUVVFLCBBTFBIQV9UUkFOU1BBUkVOVCwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lcikpOworICAgICAgICAgICAgbUhvdXJzVG9NaW51dGVzQW5pbXMuYWRkKGdldEZhZGVPdXRBbmltYXRvcihtUGFpbnRTZWxlY3RvcltIT1VSU11bU0VMRUNUT1JfQ0lSQ0xFXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfU0VMRUNUT1IsIEFMUEhBX1RSQU5TUEFSRU5ULCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisgICAgICAgICAgICBtSG91cnNUb01pbnV0ZXNBbmltcy5hZGQoZ2V0RmFkZU91dEFuaW1hdG9yKG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9ET1RdLAorICAgICAgICAgICAgICAgICAgICBBTFBIQV9PUEFRVUUsIEFMUEhBX1RSQU5TUEFSRU5ULCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisgICAgICAgICAgICBtSG91cnNUb01pbnV0ZXNBbmltcy5hZGQoZ2V0RmFkZU91dEFuaW1hdG9yKG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9MSU5FXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfU0VMRUNUT1IsIEFMUEhBX1RSQU5TUEFSRU5ULCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisKKyAgICAgICAgICAgIG1Ib3Vyc1RvTWludXRlc0FuaW1zLmFkZChnZXRSYWRpdXNSZWFwcGVhckFuaW1hdG9yKHRoaXMsCisgICAgICAgICAgICAgICAgICAgICJhbmltYXRpb25SYWRpdXNNdWx0aXBsaWVyTWludXRlcyIsIG1JbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgIG1UcmFuc2l0aW9uTWlkUmFkaXVzTXVsdGlwbGllciwgbVRyYW5zaXRpb25FbmRSYWRpdXNNdWx0aXBsaWVyKSk7CisgICAgICAgICAgICBtSG91cnNUb01pbnV0ZXNBbmltcy5hZGQoZ2V0RmFkZUluQW5pbWF0b3IobVBhaW50W01JTlVURVNdLAorICAgICAgICAgICAgICAgICAgICBBTFBIQV9UUkFOU1BBUkVOVCwgQUxQSEFfT1BBUVVFLCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisgICAgICAgICAgICBtSG91cnNUb01pbnV0ZXNBbmltcy5hZGQoZ2V0RmFkZUluQW5pbWF0b3IobVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfQ0lSQ0xFXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfVFJBTlNQQVJFTlQsIEFMUEhBX1NFTEVDVE9SLCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisgICAgICAgICAgICBtSG91cnNUb01pbnV0ZXNBbmltcy5hZGQoZ2V0RmFkZUluQW5pbWF0b3IobVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfRE9UXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfVFJBTlNQQVJFTlQsIEFMUEhBX09QQVFVRSwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lcikpOworICAgICAgICAgICAgbUhvdXJzVG9NaW51dGVzQW5pbXMuYWRkKGdldEZhZGVJbkFuaW1hdG9yKG1QYWludFNlbGVjdG9yW01JTlVURVNdW1NFTEVDVE9SX0xJTkVdLAorICAgICAgICAgICAgICAgICAgICBBTFBIQV9UUkFOU1BBUkVOVCwgQUxQSEFfU0VMRUNUT1IsIG1JbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtVHJhbnNpdGlvbiAhPSBudWxsICYmIG1UcmFuc2l0aW9uLmlzUnVubmluZygpKSB7CisgICAgICAgICAgICBtVHJhbnNpdGlvbi5lbmQoKTsKKyAgICAgICAgfQorICAgICAgICBtVHJhbnNpdGlvbiA9IG5ldyBBbmltYXRvclNldCgpOworICAgICAgICBtVHJhbnNpdGlvbi5wbGF5VG9nZXRoZXIobUhvdXJzVG9NaW51dGVzQW5pbXMpOworICAgICAgICBtVHJhbnNpdGlvbi5zdGFydCgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzdGFydE1pbnV0ZXNUb0hvdXJzQW5pbWF0aW9uKCkgeworICAgICAgICBpZiAobU1pbnV0ZVRvSG91cnNBbmltcy5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgbU1pbnV0ZVRvSG91cnNBbmltcy5hZGQoZ2V0UmFkaXVzRGlzYXBwZWFyQW5pbWF0b3IodGhpcywKKyAgICAgICAgICAgICAgICAgICAgImFuaW1hdGlvblJhZGl1c011bHRpcGxpZXJNaW51dGVzIiwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zaXRpb25NaWRSYWRpdXNNdWx0aXBsaWVyLCBtVHJhbnNpdGlvbkVuZFJhZGl1c011bHRpcGxpZXIpKTsKKyAgICAgICAgICAgIG1NaW51dGVUb0hvdXJzQW5pbXMuYWRkKGdldEZhZGVPdXRBbmltYXRvcihtUGFpbnRbTUlOVVRFU10sCisgICAgICAgICAgICAgICAgICAgIEFMUEhBX09QQVFVRSwgQUxQSEFfVFJBTlNQQVJFTlQsIG1JbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIpKTsKKyAgICAgICAgICAgIG1NaW51dGVUb0hvdXJzQW5pbXMuYWRkKGdldEZhZGVPdXRBbmltYXRvcihtUGFpbnRTZWxlY3RvcltNSU5VVEVTXVtTRUxFQ1RPUl9DSVJDTEVdLAorICAgICAgICAgICAgICAgICAgICBBTFBIQV9TRUxFQ1RPUiwgQUxQSEFfVFJBTlNQQVJFTlQsIG1JbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIpKTsKKyAgICAgICAgICAgIG1NaW51dGVUb0hvdXJzQW5pbXMuYWRkKGdldEZhZGVPdXRBbmltYXRvcihtUGFpbnRTZWxlY3RvcltNSU5VVEVTXVtTRUxFQ1RPUl9ET1RdLAorICAgICAgICAgICAgICAgICAgICBBTFBIQV9PUEFRVUUsIEFMUEhBX1RSQU5TUEFSRU5ULCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisgICAgICAgICAgICBtTWludXRlVG9Ib3Vyc0FuaW1zLmFkZChnZXRGYWRlT3V0QW5pbWF0b3IobVBhaW50U2VsZWN0b3JbTUlOVVRFU11bU0VMRUNUT1JfTElORV0sCisgICAgICAgICAgICAgICAgICAgIEFMUEhBX1NFTEVDVE9SLCBBTFBIQV9UUkFOU1BBUkVOVCwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lcikpOworCisgICAgICAgICAgICBtTWludXRlVG9Ib3Vyc0FuaW1zLmFkZChnZXRSYWRpdXNSZWFwcGVhckFuaW1hdG9yKHRoaXMsCisgICAgICAgICAgICAgICAgICAgICJhbmltYXRpb25SYWRpdXNNdWx0aXBsaWVySG91cnMiLCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICBtVHJhbnNpdGlvbk1pZFJhZGl1c011bHRpcGxpZXIsIG1UcmFuc2l0aW9uRW5kUmFkaXVzTXVsdGlwbGllcikpOworICAgICAgICAgICAgbU1pbnV0ZVRvSG91cnNBbmltcy5hZGQoZ2V0RmFkZUluQW5pbWF0b3IobVBhaW50W0hPVVJTXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfVFJBTlNQQVJFTlQsIEFMUEhBX09QQVFVRSwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lcikpOworICAgICAgICAgICAgbU1pbnV0ZVRvSG91cnNBbmltcy5hZGQoZ2V0RmFkZUluQW5pbWF0b3IobVBhaW50U2VsZWN0b3JbSE9VUlNdW1NFTEVDVE9SX0NJUkNMRV0sCisgICAgICAgICAgICAgICAgICAgIEFMUEhBX1RSQU5TUEFSRU5ULCBBTFBIQV9TRUxFQ1RPUiwgbUludmFsaWRhdGVVcGRhdGVMaXN0ZW5lcikpOworICAgICAgICAgICAgbU1pbnV0ZVRvSG91cnNBbmltcy5hZGQoZ2V0RmFkZUluQW5pbWF0b3IobVBhaW50U2VsZWN0b3JbSE9VUlNdW1NFTEVDVE9SX0RPVF0sCisgICAgICAgICAgICAgICAgICAgIEFMUEhBX1RSQU5TUEFSRU5ULCBBTFBIQV9PUEFRVUUsIG1JbnZhbGlkYXRlVXBkYXRlTGlzdGVuZXIpKTsKKyAgICAgICAgICAgIG1NaW51dGVUb0hvdXJzQW5pbXMuYWRkKGdldEZhZGVJbkFuaW1hdG9yKG1QYWludFNlbGVjdG9yW0hPVVJTXVtTRUxFQ1RPUl9MSU5FXSwKKyAgICAgICAgICAgICAgICAgICAgQUxQSEFfVFJBTlNQQVJFTlQsIEFMUEhBX1NFTEVDVE9SLCBtSW52YWxpZGF0ZVVwZGF0ZUxpc3RlbmVyKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVRyYW5zaXRpb24gIT0gbnVsbCAmJiBtVHJhbnNpdGlvbi5pc1J1bm5pbmcoKSkgeworICAgICAgICAgICAgbVRyYW5zaXRpb24uZW5kKCk7CisgICAgICAgIH0KKyAgICAgICAgbVRyYW5zaXRpb24gPSBuZXcgQW5pbWF0b3JTZXQoKTsKKyAgICAgICAgbVRyYW5zaXRpb24ucGxheVRvZ2V0aGVyKG1NaW51dGVUb0hvdXJzQW5pbXMpOworICAgICAgICBtVHJhbnNpdGlvbi5zdGFydCgpOworICAgIH0KKworICAgIHByaXZhdGUgaW50IGdldERlZ3JlZXNGcm9tWFkoZmxvYXQgeCwgZmxvYXQgeSkgeworICAgICAgICBmaW5hbCBkb3VibGUgaHlwb3RlbnVzZSA9IE1hdGguc3FydCgKKyAgICAgICAgICAgICAgICAoeSAtIG1ZQ2VudGVyKSAqICh5IC0gbVlDZW50ZXIpICsgKHggLSBtWENlbnRlcikgKiAoeCAtIG1YQ2VudGVyKSk7CisKKyAgICAgICAgLy8gQmFzaWMgY2hlY2sgaWYgd2UncmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIGRpc2sKKyAgICAgICAgaWYgKGh5cG90ZW51c2UgPiBtQ2lyY2xlUmFkaXVzW0hPVVJTXSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIC8vIENoZWNrCisgICAgICAgIGlmIChtSXMyNEhvdXJNb2RlICYmIG1TaG93SG91cnMpIHsKKyAgICAgICAgICAgIGlmIChoeXBvdGVudXNlID49IG1NaW5IeXBvdGVudXNlRm9ySW5uZXJOdW1iZXIKKyAgICAgICAgICAgICAgICAgICAgJiYgaHlwb3RlbnVzZSA8PSBtSGFsZndheUh5cG90ZW51c2VQb2ludCkgeworICAgICAgICAgICAgICAgIG1Jc09uSW5uZXJDaXJjbGUgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChoeXBvdGVudXNlIDw9IG1NYXhIeXBvdGVudXNlRm9yT3V0ZXJOdW1iZXIKKyAgICAgICAgICAgICAgICAgICAgJiYgaHlwb3RlbnVzZSA+PSBtSGFsZndheUh5cG90ZW51c2VQb2ludCkgeworICAgICAgICAgICAgICAgIG1Jc09uSW5uZXJDaXJjbGUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmluYWwgaW50IGluZGV4ID0gIChtU2hvd0hvdXJzKSA/IEhPVVJTIDogTUlOVVRFUzsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IGxlbmd0aCA9IChtQ2lyY2xlUmFkaXVzW2luZGV4XSAqIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltpbmRleF0pOworICAgICAgICAgICAgZmluYWwgaW50IGRpc3RhbmNlVG9OdW1iZXIgPSAoaW50KSBNYXRoLmFicyhoeXBvdGVudXNlIC0gbGVuZ3RoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBtYXhBbGxvd2VkRGlzdGFuY2UgPQorICAgICAgICAgICAgICAgICAgICAoaW50KSAobUNpcmNsZVJhZGl1c1tpbmRleF0gKiAoMSAtIG1OdW1iZXJzUmFkaXVzTXVsdGlwbGllcltpbmRleF0pKTsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZVRvTnVtYmVyID4gbWF4QWxsb3dlZERpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgZmxvYXQgb3Bwb3NpdGUgPSBNYXRoLmFicyh5IC0gbVlDZW50ZXIpOworICAgICAgICBkb3VibGUgZGVncmVlcyA9IE1hdGgudG9EZWdyZWVzKE1hdGguYXNpbihvcHBvc2l0ZSAvIGh5cG90ZW51c2UpKTsKKworICAgICAgICAvLyBOb3cgd2UgaGF2ZSB0byB0cmFuc2xhdGUgdG8gdGhlIGNvcnJlY3QgcXVhZHJhbnQuCisgICAgICAgIGJvb2xlYW4gcmlnaHRTaWRlID0gKHggPiBtWENlbnRlcik7CisgICAgICAgIGJvb2xlYW4gdG9wU2lkZSA9ICh5IDwgbVlDZW50ZXIpOworICAgICAgICBpZiAocmlnaHRTaWRlICYmIHRvcFNpZGUpIHsKKyAgICAgICAgICAgIGRlZ3JlZXMgPSA5MCAtIGRlZ3JlZXM7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHRTaWRlICYmICF0b3BTaWRlKSB7CisgICAgICAgICAgICBkZWdyZWVzID0gOTAgKyBkZWdyZWVzOworICAgICAgICB9IGVsc2UgaWYgKCFyaWdodFNpZGUgJiYgIXRvcFNpZGUpIHsKKyAgICAgICAgICAgIGRlZ3JlZXMgPSAyNzAgLSBkZWdyZWVzOworICAgICAgICB9IGVsc2UgaWYgKCFyaWdodFNpZGUgJiYgdG9wU2lkZSkgeworICAgICAgICAgICAgZGVncmVlcyA9IDI3MCArIGRlZ3JlZXM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChpbnQpIGRlZ3JlZXM7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgZ2V0SXNUb3VjaGluZ0FtT3JQbShmbG9hdCB4LCBmbG9hdCB5KSB7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMYXlvdXRSdGwgPSBpc0xheW91dFJ0bCgpOworICAgICAgICBpbnQgc3F1YXJlZFlEaXN0YW5jZSA9IChpbnQpICgoeSAtIG1BbVBtWUNlbnRlcikgKiAoeSAtIG1BbVBtWUNlbnRlcikpOworCisgICAgICAgIGludCBkaXN0YW5jZVRvQW1DZW50ZXIgPSAoaW50KSBNYXRoLnNxcnQoCisgICAgICAgICAgICAgICAgKHggLSBtTGVmdEluZGljYXRvclhDZW50ZXIpICogKHggLSBtTGVmdEluZGljYXRvclhDZW50ZXIpICsgc3F1YXJlZFlEaXN0YW5jZSk7CisgICAgICAgIGlmIChkaXN0YW5jZVRvQW1DZW50ZXIgPD0gbUFtUG1DaXJjbGVSYWRpdXMpIHsKKyAgICAgICAgICAgIHJldHVybiAoaXNMYXlvdXRSdGwgPyBQTSA6IEFNKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBkaXN0YW5jZVRvUG1DZW50ZXIgPSAoaW50KSBNYXRoLnNxcnQoCisgICAgICAgICAgICAgICAgKHggLSBtUmlnaHRJbmRpY2F0b3JYQ2VudGVyKSAqICh4IC0gbVJpZ2h0SW5kaWNhdG9yWENlbnRlcikgKyBzcXVhcmVkWURpc3RhbmNlKTsKKyAgICAgICAgaWYgKGRpc3RhbmNlVG9QbUNlbnRlciA8PSBtQW1QbUNpcmNsZVJhZGl1cykgeworICAgICAgICAgICAgcmV0dXJuIChpc0xheW91dFJ0bCA/IEFNIDogUE0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gTmVpdGhlciB3YXMgY2xvc2UgZW5vdWdoLgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25Ub3VjaChWaWV3IHYsIE1vdGlvbkV2ZW50IGV2ZW50KSB7CisgICAgICAgIGlmKCFtSW5wdXRFbmFibGVkKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIGZsb2F0IGV2ZW50WCA9IGV2ZW50LmdldFgoKTsKKyAgICAgICAgZmluYWwgZmxvYXQgZXZlbnRZID0gZXZlbnQuZ2V0WSgpOworCisgICAgICAgIGludCBkZWdyZWVzOworICAgICAgICBpbnQgc25hcERlZ3JlZXM7CisgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisKKyAgICAgICAgc3dpdGNoKGV2ZW50LmdldEFjdGlvbigpKSB7CisgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9ET1dOOgorICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fTU9WRToKKyAgICAgICAgICAgICAgICBtQW1PclBtUHJlc3NlZCA9IGdldElzVG91Y2hpbmdBbU9yUG0oZXZlbnRYLCBldmVudFkpOworICAgICAgICAgICAgICAgIGlmIChtQW1PclBtUHJlc3NlZCAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZ3JlZXMgPSBnZXREZWdyZWVzRnJvbVhZKGV2ZW50WCwgZXZlbnRZKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlZ3JlZXMgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBEZWdyZWVzID0gKG1TaG93SG91cnMgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwT25seTMwcyhkZWdyZWVzLCAwKSA6IHNuYXBQcmVmZXIzMHMoZGVncmVlcykpICUgMzYwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1TaG93SG91cnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0aW9uRGVncmVlc1tIT1VSU10gPSBzbmFwRGVncmVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0aW9uRGVncmVlc1tIT1VSU19JTk5FUl0gPSBzbmFwRGVncmVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGlvbkRlZ3JlZXNbTUlOVVRFU10gPSBzbmFwRGVncmVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1IYXB0aWNGZWVkYmFjayhIYXB0aWNGZWVkYmFja0NvbnN0YW50cy5DTE9DS19USUNLKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtU2hvd0hvdXJzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1MaXN0ZW5lci5vblZhbHVlU2VsZWN0ZWQoSE9VUlMsIGdldEN1cnJlbnRIb3VyKCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxpc3RlbmVyLm9uVmFsdWVTZWxlY3RlZChNSU5VVEVTLCBnZXRDdXJyZW50TWludXRlKCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9VUDoKKyAgICAgICAgICAgICAgICBtQW1PclBtUHJlc3NlZCA9IGdldElzVG91Y2hpbmdBbU9yUG0oZXZlbnRYLCBldmVudFkpOworICAgICAgICAgICAgICAgIGlmIChtQW1PclBtUHJlc3NlZCAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobUFtT3JQbSAhPSBtQW1PclBtUHJlc3NlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dhcEFtUG0oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtQW1PclBtUHJlc3NlZCA9IC0xOworICAgICAgICAgICAgICAgICAgICBpZiAobUxpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1MaXN0ZW5lci5vblZhbHVlU2VsZWN0ZWQoQU1QTSwgZ2V0Q3VycmVudEhvdXIoKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWdyZWVzID0gZ2V0RGVncmVlc0Zyb21YWShldmVudFgsIGV2ZW50WSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZWdyZWVzICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzbmFwRGVncmVlcyA9IChtU2hvd0hvdXJzID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcE9ubHkzMHMoZGVncmVlcywgMCkgOiBzbmFwUHJlZmVyMzBzKGRlZ3JlZXMpKSAlIDM2MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtU2hvd0hvdXJzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGlvbkRlZ3JlZXNbSE9VUlNdID0gc25hcERlZ3JlZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGlvbkRlZ3JlZXNbSE9VUlNfSU5ORVJdID0gc25hcERlZ3JlZXM7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3Rpb25EZWdyZWVzW01JTlVURVNdID0gc25hcERlZ3JlZXM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUxpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVNob3dIb3VycykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGlzdGVuZXIub25WYWx1ZVNlbGVjdGVkKEhPVVJTLCBnZXRDdXJyZW50SG91cigpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxpc3RlbmVyLm9uVmFsdWVTZWxlY3RlZChNSU5VVEVTLCBnZXRDdXJyZW50TWludXRlKCksIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIE5lY2Vzc2FyeSBmb3IgYWNjZXNzaWJpbGl0eSwgdG8gZW5zdXJlIHdlIHN1cHBvcnQgInNjcm9sbGluZyIgZm9yd2FyZCBhbmQgYmFja3dhcmQKKyAgICAgKiBpbiB0aGUgY2lyY2xlLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhBY2Nlc3NpYmlsaXR5Tm9kZUluZm8gaW5mbykgeworICAgICAgICBzdXBlci5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oaW5mbyk7CisgICAgICAgIGluZm8uYWRkQWN0aW9uKEFjY2Vzc2liaWxpdHlOb2RlSW5mby5BQ1RJT05fU0NST0xMX0ZPUldBUkQpOworICAgICAgICBpbmZvLmFkZEFjdGlvbihBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX1NDUk9MTF9CQUNLV0FSRCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQW5ub3VuY2UgdGhlIGN1cnJlbnRseS1zZWxlY3RlZCB0aW1lIHdoZW4gbGF1bmNoZWQuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZGlzcGF0Y2hQb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgaWYgKGV2ZW50LmdldEV2ZW50VHlwZSgpID09IEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1dJTkRPV19TVEFURV9DSEFOR0VEKSB7CisgICAgICAgICAgICAvLyBDbGVhciB0aGUgZXZlbnQncyBjdXJyZW50IHRleHQgc28gdGhhdCBvbmx5IHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSBzcG9rZW4uCisgICAgICAgICAgICBldmVudC5nZXRUZXh0KCkuY2xlYXIoKTsKKyAgICAgICAgICAgIFRpbWUgdGltZSA9IG5ldyBUaW1lKCk7CisgICAgICAgICAgICB0aW1lLmhvdXIgPSBnZXRDdXJyZW50SG91cigpOworICAgICAgICAgICAgdGltZS5taW51dGUgPSBnZXRDdXJyZW50TWludXRlKCk7CisgICAgICAgICAgICBsb25nIG1pbGxpcyA9IHRpbWUubm9ybWFsaXplKHRydWUpOworICAgICAgICAgICAgaW50IGZsYWdzID0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX1RJTUU7CisgICAgICAgICAgICBpZiAobUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgICAgIGZsYWdzIHw9IERhdGVVdGlscy5GT1JNQVRfMjRIT1VSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIHRpbWVTdHJpbmcgPSBEYXRlVXRpbHMuZm9ybWF0RGF0ZVRpbWUoZ2V0Q29udGV4dCgpLCBtaWxsaXMsIGZsYWdzKTsKKyAgICAgICAgICAgIGV2ZW50LmdldFRleHQoKS5hZGQodGltZVN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VwZXIuZGlzcGF0Y2hQb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogV2hlbiBzY3JvbGwgZm9yd2FyZC9iYWNrd2FyZCBldmVudHMgYXJlIHJlY2VpdmVkLCBqdW1wIHRoZSB0aW1lIHRvIHRoZSBoaWdoZXIvbG93ZXIKKyAgICAgKiBkaXNjcmV0ZSwgdmlzaWJsZSB2YWx1ZSBvbiB0aGUgY2lyY2xlLgorICAgICAqLworICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gcGVyZm9ybUFjY2Vzc2liaWxpdHlBY3Rpb24oaW50IGFjdGlvbiwgQnVuZGxlIGFyZ3VtZW50cykgeworICAgICAgICBpZiAoc3VwZXIucGVyZm9ybUFjY2Vzc2liaWxpdHlBY3Rpb24oYWN0aW9uLCBhcmd1bWVudHMpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBjaGFuZ2VNdWx0aXBsaWVyID0gMDsKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5Tm9kZUluZm8uQUNUSU9OX1NDUk9MTF9GT1JXQVJEKSB7CisgICAgICAgICAgICBjaGFuZ2VNdWx0aXBsaWVyID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQWNjZXNzaWJpbGl0eU5vZGVJbmZvLkFDVElPTl9TQ1JPTExfQkFDS1dBUkQpIHsKKyAgICAgICAgICAgIGNoYW5nZU11bHRpcGxpZXIgPSAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hhbmdlTXVsdGlwbGllciAhPSAwKSB7CisgICAgICAgICAgICBpbnQgdmFsdWUgPSAwOworICAgICAgICAgICAgaW50IHN0ZXBTaXplID0gMDsKKyAgICAgICAgICAgIGlmIChtU2hvd0hvdXJzKSB7CisgICAgICAgICAgICAgICAgc3RlcFNpemUgPSBERUdSRUVTX0ZPUl9PTkVfSE9VUjsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldEN1cnJlbnRIb3VyKCkgJSAxMjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RlcFNpemUgPSBERUdSRUVTX0ZPUl9PTkVfTUlOVVRFOworICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0Q3VycmVudE1pbnV0ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgZGVncmVlcyA9IHZhbHVlICogc3RlcFNpemU7CisgICAgICAgICAgICBkZWdyZWVzID0gc25hcE9ubHkzMHMoZGVncmVlcywgY2hhbmdlTXVsdGlwbGllcik7CisgICAgICAgICAgICB2YWx1ZSA9IGRlZ3JlZXMgLyBzdGVwU2l6ZTsKKyAgICAgICAgICAgIGludCBtYXhWYWx1ZSA9IDA7CisgICAgICAgICAgICBpbnQgbWluVmFsdWUgPSAwOworICAgICAgICAgICAgaWYgKG1TaG93SG91cnMpIHsKKyAgICAgICAgICAgICAgICBpZiAobUlzMjRIb3VyTW9kZSkgeworICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9IDIzOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1heFZhbHVlID0gMTI7CisgICAgICAgICAgICAgICAgICAgIG1pblZhbHVlID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1heFZhbHVlID0gNTU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsdWUgPiBtYXhWYWx1ZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHdlIHNjcm9sbGVkIGZvcndhcmQgcGFzdCB0aGUgaGlnaGVzdCBudW1iZXIsIHdyYXAgYXJvdW5kIHRvIHRoZSBsb3dlc3QuCisgICAgICAgICAgICAgICAgdmFsdWUgPSBtaW5WYWx1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCBtaW5WYWx1ZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHdlIHNjcm9sbGVkIGJhY2t3YXJkIHBhc3QgdGhlIGxvd2VzdCBudW1iZXIsIHdyYXAgYXJvdW5kIHRvIHRoZSBoaWdoZXN0LgorICAgICAgICAgICAgICAgIHZhbHVlID0gbWF4VmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobVNob3dIb3VycykgeworICAgICAgICAgICAgICAgIHNldEN1cnJlbnRIb3VyKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAobUxpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbUxpc3RlbmVyLm9uVmFsdWVTZWxlY3RlZChIT1VSUywgdmFsdWUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNldEN1cnJlbnRNaW51dGUodmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChtTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBtTGlzdGVuZXIub25WYWx1ZVNlbGVjdGVkKE1JTlVURVMsIHZhbHVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SW5wdXRFbmFibGVkKGJvb2xlYW4gaW5wdXRFbmFibGVkKSB7CisgICAgICAgIG1JbnB1dEVuYWJsZWQgPSBpbnB1dEVuYWJsZWQ7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUmFkaW9CdXR0b24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SYWRpb0J1dHRvbi5qYXZhCmluZGV4IGEwZmVmN2QuLmFmYzQ4MzAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SYWRpb0J1dHRvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SYWRpb0J1dHRvbi5qYXZhCkBAIC0yMSw4ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbzsKIAotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7Ci0KIAogLyoqCiAgKiA8cD4KQEAgLTU5LDggKzU3LDEyIEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5yYWRpb0J1dHRvblN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgUmFkaW9CdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBSYWRpb0J1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBSYWRpb0J1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SYXRpbmdCYXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SYXRpbmdCYXIuamF2YQppbmRleCA0ZDNjNTZjLi44MmI0OTBlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUmF0aW5nQmFyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1JhdGluZ0Jhci5qYXZhCkBAIC04MiwxMSArODIsMTUgQEAKICAgICAKICAgICBwcml2YXRlIE9uUmF0aW5nQmFyQ2hhbmdlTGlzdGVuZXIgbU9uUmF0aW5nQmFyQ2hhbmdlTGlzdGVuZXI7CiAgICAgCi0gICAgcHVibGljIFJhdGluZ0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7Ci0gICAgICAgIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLlJhdGluZ0JhciwKLSAgICAgICAgICAgICAgICBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIFJhdGluZ0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBSYXRpbmdCYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBSLnN0eWxlYWJsZS5SYXRpbmdCYXIsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBmaW5hbCBpbnQgbnVtU3RhcnMgPSBhLmdldEludChSLnN0eWxlYWJsZS5SYXRpbmdCYXJfbnVtU3RhcnMsIG1OdW1TdGFycyk7CiAgICAgICAgIHNldElzSW5kaWNhdG9yKGEuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5SYXRpbmdCYXJfaXNJbmRpY2F0b3IsICFtSXNVc2VyU2Vla2FibGUpKTsKICAgICAgICAgZmluYWwgZmxvYXQgcmF0aW5nID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5SYXRpbmdCYXJfcmF0aW5nLCAtMSk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUmVsYXRpdmVMYXlvdXQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SZWxhdGl2ZUxheW91dC5qYXZhCmluZGV4IGUwM2U4M2QuLmJlYmU2N2YgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SZWxhdGl2ZUxheW91dC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SZWxhdGl2ZUxheW91dC5qYXZhCkBAIC0yMjgsMjQgKzIyOCwyNyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1dJRFRIID0gMHgwMDAxMDAwMDsKIAogICAgIHB1YmxpYyBSZWxhdGl2ZUxheW91dChDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0gICAgICAgIHF1ZXJ5Q29tcGF0aWJpbGl0eU1vZGVzKGNvbnRleHQpOworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwogICAgIH0KIAogICAgIHB1YmxpYyBSZWxhdGl2ZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgICAgIGluaXRGcm9tQXR0cmlidXRlcyhjb250ZXh0LCBhdHRycyk7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOworICAgIH0KKworICAgIHB1YmxpYyBSZWxhdGl2ZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBSZWxhdGl2ZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKyAgICAgICAgaW5pdEZyb21BdHRyaWJ1dGVzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgcXVlcnlDb21wYXRpYmlsaXR5TW9kZXMoY29udGV4dCk7CiAgICAgfQogCi0gICAgcHVibGljIFJlbGF0aXZlTGF5b3V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKLSAgICAgICAgaW5pdEZyb21BdHRyaWJ1dGVzKGNvbnRleHQsIGF0dHJzKTsKLSAgICAgICAgcXVlcnlDb21wYXRpYmlsaXR5TW9kZXMoY29udGV4dCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRGcm9tQXR0cmlidXRlcyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLlJlbGF0aXZlTGF5b3V0KTsKKyAgICBwcml2YXRlIHZvaWQgaW5pdEZyb21BdHRyaWJ1dGVzKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIFIuc3R5bGVhYmxlLlJlbGF0aXZlTGF5b3V0LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgbUlnbm9yZUdyYXZpdHkgPSBhLmdldFJlc291cmNlSWQoUi5zdHlsZWFibGUuUmVsYXRpdmVMYXlvdXRfaWdub3JlR3Jhdml0eSwgVmlldy5OT19JRCk7CiAgICAgICAgIG1HcmF2aXR5ID0gYS5nZXRJbnQoUi5zdHlsZWFibGUuUmVsYXRpdmVMYXlvdXRfZ3Jhdml0eSwgbUdyYXZpdHkpOwogICAgICAgICBhLnJlY3ljbGUoKTsKQEAgLTczOCwxOSArNzQxLDMwIEBACiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q2hpbGRNZWFzdXJlU3BlYyhpbnQgY2hpbGRTdGFydCwgaW50IGNoaWxkRW5kLAogICAgICAgICAgICAgaW50IGNoaWxkU2l6ZSwgaW50IHN0YXJ0TWFyZ2luLCBpbnQgZW5kTWFyZ2luLCBpbnQgc3RhcnRQYWRkaW5nLAogICAgICAgICAgICAgaW50IGVuZFBhZGRpbmcsIGludCBteVNpemUpIHsKLSAgICAgICAgaWYgKG15U2l6ZSA8IDAgJiYgIW1BbGxvd0Jyb2tlbk1lYXN1cmVTcGVjcykgewotICAgICAgICAgICAgaWYgKGNoaWxkU2l6ZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhjaGlsZFNpemUsIE1lYXN1cmVTcGVjLkVYQUNUTFkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gTmVnYXRpdmUgdmFsdWVzIGluIGEgbXlTaXplL215V2lkdGgvbXlXaWR0aCB2YWx1ZSBpbiBSZWxhdGl2ZUxheW91dCBtZWFzdXJlbWVudAotICAgICAgICAgICAgLy8gaXMgY29kZSBmb3IsICJ3ZSBnb3QgYW4gdW5zcGVjaWZpZWQgbW9kZSBpbiB0aGUgUmVsYXRpdmVMYXlvdXQncyBtZWFzdXJlc3BlYy4iCi0gICAgICAgICAgICAvLyBDYXJyeSBpdCBmb3J3YXJkLgotICAgICAgICAgICAgcmV0dXJuIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygwLCBNZWFzdXJlU3BlYy5VTlNQRUNJRklFRCk7Ci0gICAgICAgIH0KLQogICAgICAgICBpbnQgY2hpbGRTcGVjTW9kZSA9IDA7CiAgICAgICAgIGludCBjaGlsZFNwZWNTaXplID0gMDsKIAorICAgICAgICAvLyBOZWdhdGl2ZSB2YWx1ZXMgaW4gYSBteVNpemUvbXlXaWR0aC9teVdpZHRoIHZhbHVlIGluIFJlbGF0aXZlTGF5b3V0CisgICAgICAgIC8vIG1lYXN1cmVtZW50IGlzIGNvZGUgZm9yLCAid2UgZ290IGFuIHVuc3BlY2lmaWVkIG1vZGUgaW4gdGhlCisgICAgICAgIC8vIFJlbGF0aXZlTGF5b3V0J3MgbWVhc3VyZSBzcGVjLiIKKyAgICAgICAgaWYgKG15U2l6ZSA8IDAgJiYgIW1BbGxvd0Jyb2tlbk1lYXN1cmVTcGVjcykgeworICAgICAgICAgICAgaWYgKGNoaWxkU2l6ZSA+PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGNoaWxkIHNwZWNpZmllZCBhbiBleGFjdCBzaXplLgorICAgICAgICAgICAgICAgIGNoaWxkU3BlY1NpemUgPSBjaGlsZFNpemU7CisgICAgICAgICAgICAgICAgY2hpbGRTcGVjTW9kZSA9IE1lYXN1cmVTcGVjLkVYQUNUTFk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkU3RhcnQgPj0gMCAmJiBjaGlsZEVuZCA+PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gQ29uc3RyYWludHMgZml4ZWQgYm90aCBlZGdlcywgc28gY2hpbGQgaGFzIGFuIGV4YWN0IHNpemUuCisgICAgICAgICAgICAgICAgY2hpbGRTcGVjU2l6ZSA9IE1hdGgubWF4KDAsIGNoaWxkRW5kIC0gY2hpbGRTdGFydCk7CisgICAgICAgICAgICAgICAgY2hpbGRTcGVjTW9kZSA9IE1lYXN1cmVTcGVjLkVYQUNUTFk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEFsbG93IHRoZSBjaGlsZCB0byBiZSB3aGF0ZXZlciBzaXplIGl0IHdhbnRzLgorICAgICAgICAgICAgICAgIGNoaWxkU3BlY1NpemUgPSAwOworICAgICAgICAgICAgICAgIGNoaWxkU3BlY01vZGUgPSBNZWFzdXJlU3BlYy5VTlNQRUNJRklFRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhjaGlsZFNwZWNTaXplLCBjaGlsZFNwZWNNb2RlKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIEZpZ3VyZSBvdXQgc3RhcnQgYW5kIGVuZCBib3VuZHMuCiAgICAgICAgIGludCB0ZW1wU3RhcnQgPSBjaGlsZFN0YXJ0OwogICAgICAgICBpbnQgdGVtcEVuZCA9IGNoaWxkRW5kOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1JlbW90ZVZpZXdzQWRhcHRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1JlbW90ZVZpZXdzQWRhcHRlci5qYXZhCmluZGV4IDNmZjBjZWUuLmJiZTZmOWUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9SZW1vdGVWaWV3c0FkYXB0ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvUmVtb3RlVmlld3NBZGFwdGVyLmphdmEKQEAgLTMyLDcgKzMyLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKQEAgLTQ1LDcgKzQ0LDYgQEAKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldC5JUmVtb3RlVmlld3NBZGFwdGVyQ29ubmVjdGlvbjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC53aWRnZXQuSVJlbW90ZVZpZXdzRmFjdG9yeTsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC53aWRnZXQuTG9ja1BhdHRlcm5VdGlsczsKIAogLyoqCiAgKiBBbiBhZGFwdGVyIHRvIGEgUmVtb3RlVmlld3NTZXJ2aWNlIHdoaWNoIGZldGNoZXMgYW5kIGNhY2hlcyBSZW1vdGVWaWV3cwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1Njcm9sbFZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TY3JvbGxWaWV3LmphdmEKaW5kZXggNjY4MDM5My4uMDgyZDcyOCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1Njcm9sbFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2Nyb2xsVmlldy5qYXZhCkBAIC0xNjIsMTIgKzE2MiwxNiBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuc2Nyb2xsVmlld1N0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgU2Nyb2xsVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFNjcm9sbFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2Nyb2xsVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgaW5pdFNjcm9sbFZpZXcoKTsKIAotICAgICAgICBUeXBlZEFycmF5IGEgPQotICAgICAgICAgICAgY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TY3JvbGxWaWV3LCBkZWZTdHlsZSwgMCk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU2Nyb2xsVmlldywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgc2V0RmlsbFZpZXdwb3J0KGEuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5TY3JvbGxWaWV3X2ZpbGxWaWV3cG9ydCwgZmFsc2UpKTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1Njcm9sbGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2Nyb2xsZXIuamF2YQppbmRleCAzYmZkMzlkLi4xYTBjZTljIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2Nyb2xsZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2Nyb2xsZXIuamF2YQpAQCAtNjEsNiArNjEsOCBAQAogICogfTwvcHJlPgogICovCiBwdWJsaWMgY2xhc3MgU2Nyb2xsZXIgIHsKKyAgICBwcml2YXRlIGZpbmFsIEludGVycG9sYXRvciBtSW50ZXJwb2xhdG9yOworCiAgICAgcHJpdmF0ZSBpbnQgbU1vZGU7CiAKICAgICBwcml2YXRlIGludCBtU3RhcnRYOwpAQCAtODEsNyArODMsNiBAQAogICAgIHByaXZhdGUgZmxvYXQgbURlbHRhWDsKICAgICBwcml2YXRlIGZsb2F0IG1EZWx0YVk7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1GaW5pc2hlZDsKLSAgICBwcml2YXRlIEludGVycG9sYXRvciBtSW50ZXJwb2xhdG9yOwogICAgIHByaXZhdGUgYm9vbGVhbiBtRmx5d2hlZWw7CiAKICAgICBwcml2YXRlIGZsb2F0IG1WZWxvY2l0eTsKQEAgLTE0MiwxOCArMTQzLDggQEAKICAgICAgICAgICAgIFNQTElORV9USU1FW2ldID0gY29lZiAqICgoMS4wZiAtIHkpICogUDEgKyB5ICogUDIpICsgeSAqIHkgKiB5OwogICAgICAgICB9CiAgICAgICAgIFNQTElORV9QT1NJVElPTltOQl9TQU1QTEVTXSA9IFNQTElORV9USU1FW05CX1NBTVBMRVNdID0gMS4wZjsKLQotICAgICAgICAvLyBUaGlzIGNvbnRyb2xzIHRoZSB2aXNjb3VzIGZsdWlkIGVmZmVjdCAoaG93IG11Y2ggb2YgaXQpCi0gICAgICAgIHNWaXNjb3VzRmx1aWRTY2FsZSA9IDguMGY7Ci0gICAgICAgIC8vIG11c3QgYmUgc2V0IHRvIDEuMCAodXNlZCBpbiB2aXNjb3VzRmx1aWQoKSkKLSAgICAgICAgc1Zpc2NvdXNGbHVpZE5vcm1hbGl6ZSA9IDEuMGY7Ci0gICAgICAgIHNWaXNjb3VzRmx1aWROb3JtYWxpemUgPSAxLjBmIC8gdmlzY291c0ZsdWlkKDEuMGYpOwotCiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgc1Zpc2NvdXNGbHVpZFNjYWxlOwotICAgIHByaXZhdGUgc3RhdGljIGZsb2F0IHNWaXNjb3VzRmx1aWROb3JtYWxpemU7Ci0KICAgICAvKioKICAgICAgKiBDcmVhdGUgYSBTY3JvbGxlciB3aXRoIHRoZSBkZWZhdWx0IGR1cmF0aW9uIGFuZCBpbnRlcnBvbGF0b3IuCiAgICAgICovCkBAIC0xNzgsNyArMTY5LDExIEBACiAgICAgICovCiAgICAgcHVibGljIFNjcm9sbGVyKENvbnRleHQgY29udGV4dCwgSW50ZXJwb2xhdG9yIGludGVycG9sYXRvciwgYm9vbGVhbiBmbHl3aGVlbCkgewogICAgICAgICBtRmluaXNoZWQgPSB0cnVlOwotICAgICAgICBtSW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdG9yOworICAgICAgICBpZiAoaW50ZXJwb2xhdG9yID09IG51bGwpIHsKKyAgICAgICAgICAgIG1JbnRlcnBvbGF0b3IgPSBuZXcgVmlzY291c0ZsdWlkSW50ZXJwb2xhdG9yKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtSW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdG9yOworICAgICAgICB9CiAgICAgICAgIG1QcGkgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldERpc3BsYXlNZXRyaWNzKCkuZGVuc2l0eSAqIDE2MC4wZjsKICAgICAgICAgbURlY2VsZXJhdGlvbiA9IGNvbXB1dGVEZWNlbGVyYXRpb24oVmlld0NvbmZpZ3VyYXRpb24uZ2V0U2Nyb2xsRnJpY3Rpb24oKSk7CiAgICAgICAgIG1GbHl3aGVlbCA9IGZseXdoZWVsOwpAQCAtMzEyLDEzICszMDcsNyBAQAogICAgICAgICBpZiAodGltZVBhc3NlZCA8IG1EdXJhdGlvbikgewogICAgICAgICAgICAgc3dpdGNoIChtTW9kZSkgewogICAgICAgICAgICAgY2FzZSBTQ1JPTExfTU9ERToKLSAgICAgICAgICAgICAgICBmbG9hdCB4ID0gdGltZVBhc3NlZCAqIG1EdXJhdGlvblJlY2lwcm9jYWw7Ci0gICAgCi0gICAgICAgICAgICAgICAgaWYgKG1JbnRlcnBvbGF0b3IgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgeCA9IHZpc2NvdXNGbHVpZCh4KTsgCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB4ID0gbUludGVycG9sYXRvci5nZXRJbnRlcnBvbGF0aW9uKHgpOwotICAgIAorICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IHggPSBtSW50ZXJwb2xhdG9yLmdldEludGVycG9sYXRpb24odGltZVBhc3NlZCAqIG1EdXJhdGlvblJlY2lwcm9jYWwpOwogICAgICAgICAgICAgICAgIG1DdXJyWCA9IG1TdGFydFggKyBNYXRoLnJvdW5kKHggKiBtRGVsdGFYKTsKICAgICAgICAgICAgICAgICBtQ3VyclkgPSBtU3RhcnRZICsgTWF0aC5yb3VuZCh4ICogbURlbHRhWSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00OTksMjAgKzQ4OCw2IEBACiAgICAgICAgIHJldHVybiBtRmxpbmdGcmljdGlvbiAqIG1QaHlzaWNhbENvZWZmICogTWF0aC5leHAoREVDRUxFUkFUSU9OX1JBVEUgLyBkZWNlbE1pbnVzT25lICogbCk7CiAgICAgfQogCi0gICAgc3RhdGljIGZsb2F0IHZpc2NvdXNGbHVpZChmbG9hdCB4KQotICAgIHsKLSAgICAgICAgeCAqPSBzVmlzY291c0ZsdWlkU2NhbGU7Ci0gICAgICAgIGlmICh4IDwgMS4wZikgewotICAgICAgICAgICAgeCAtPSAoMS4wZiAtIChmbG9hdClNYXRoLmV4cCgteCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmxvYXQgc3RhcnQgPSAwLjM2Nzg3OTQ0MTE3ZjsgICAvLyAxL2UgPT0gZXhwKC0xKQotICAgICAgICAgICAgeCA9IDEuMGYgLSAoZmxvYXQpTWF0aC5leHAoMS4wZiAtIHgpOwotICAgICAgICAgICAgeCA9IHN0YXJ0ICsgeCAqICgxLjBmIC0gc3RhcnQpOwotICAgICAgICB9Ci0gICAgICAgIHggKj0gc1Zpc2NvdXNGbHVpZE5vcm1hbGl6ZTsKLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgfQotICAgIAogICAgIC8qKgogICAgICAqIFN0b3BzIHRoZSBhbmltYXRpb24uIENvbnRyYXJ5IHRvIHtAbGluayAjZm9yY2VGaW5pc2hlZChib29sZWFuKX0sCiAgICAgICogYWJvcnRpbmcgdGhlIGFuaW1hdGluZyBjYXVzZSB0aGUgc2Nyb2xsZXIgdG8gbW92ZSB0byB0aGUgZmluYWwgeCBhbmQgeQpAQCAtNTgzLDQgKzU1OCw0MSBAQAogICAgICAgICByZXR1cm4gIW1GaW5pc2hlZCAmJiBNYXRoLnNpZ251bSh4dmVsKSA9PSBNYXRoLnNpZ251bShtRmluYWxYIC0gbVN0YXJ0WCkgJiYKICAgICAgICAgICAgICAgICBNYXRoLnNpZ251bSh5dmVsKSA9PSBNYXRoLnNpZ251bShtRmluYWxZIC0gbVN0YXJ0WSk7CiAgICAgfQorCisgICAgc3RhdGljIGNsYXNzIFZpc2NvdXNGbHVpZEludGVycG9sYXRvciBpbXBsZW1lbnRzIEludGVycG9sYXRvciB7CisgICAgICAgIC8qKiBDb250cm9scyB0aGUgdmlzY291cyBmbHVpZCBlZmZlY3QgKGhvdyBtdWNoIG9mIGl0KS4gKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgVklTQ09VU19GTFVJRF9TQ0FMRSA9IDguMGY7CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgVklTQ09VU19GTFVJRF9OT1JNQUxJWkU7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0IFZJU0NPVVNfRkxVSURfT0ZGU0VUOworCisgICAgICAgIHN0YXRpYyB7CisKKyAgICAgICAgICAgIC8vIG11c3QgYmUgc2V0IHRvIDEuMCAodXNlZCBpbiB2aXNjb3VzRmx1aWQoKSkKKyAgICAgICAgICAgIFZJU0NPVVNfRkxVSURfTk9STUFMSVpFID0gMS4wZiAvIHZpc2NvdXNGbHVpZCgxLjBmKTsKKyAgICAgICAgICAgIC8vIGFjY291bnQgZm9yIHZlcnkgc21hbGwgZmxvYXRpbmctcG9pbnQgZXJyb3IKKyAgICAgICAgICAgIFZJU0NPVVNfRkxVSURfT0ZGU0VUID0gMS4wZiAtIFZJU0NPVVNfRkxVSURfTk9STUFMSVpFICogdmlzY291c0ZsdWlkKDEuMGYpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgdmlzY291c0ZsdWlkKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHggKj0gVklTQ09VU19GTFVJRF9TQ0FMRTsKKyAgICAgICAgICAgIGlmICh4IDwgMS4wZikgeworICAgICAgICAgICAgICAgIHggLT0gKDEuMGYgLSAoZmxvYXQpTWF0aC5leHAoLXgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmxvYXQgc3RhcnQgPSAwLjM2Nzg3OTQ0MTE3ZjsgICAvLyAxL2UgPT0gZXhwKC0xKQorICAgICAgICAgICAgICAgIHggPSAxLjBmIC0gKGZsb2F0KU1hdGguZXhwKDEuMGYgLSB4KTsKKyAgICAgICAgICAgICAgICB4ID0gc3RhcnQgKyB4ICogKDEuMGYgLSBzdGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgZmxvYXQgZ2V0SW50ZXJwb2xhdGlvbihmbG9hdCBpbnB1dCkgeworICAgICAgICAgICAgZmluYWwgZmxvYXQgaW50ZXJwb2xhdGVkID0gVklTQ09VU19GTFVJRF9OT1JNQUxJWkUgKiB2aXNjb3VzRmx1aWQoaW5wdXQpOworICAgICAgICAgICAgaWYgKGlucHV0ID4gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dCArIFZJU0NPVVNfRkxVSURfT0ZGU0VUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGlucHV0OworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NlYXJjaFZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TZWFyY2hWaWV3LmphdmEKaW5kZXggMDI4MTYwMi4uMzc5MTI1OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NlYXJjaFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2VhcmNoVmlldy5qYXZhCkBAIC0yNDIsNyArMjQyLDE1IEBACiAgICAgfQogCiAgICAgcHVibGljIFNlYXJjaFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2VhcmNoVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBTZWFyY2hWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIExheW91dEluZmxhdGVyIGluZmxhdGVyID0gKExheW91dEluZmxhdGVyKSBjb250ZXh0CiAgICAgICAgICAgICAgICAgLmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5MQVlPVVRfSU5GTEFURVJfU0VSVklDRSk7CkBAIC0yODEsNyArMjg5LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5TZWFyY2hWaWV3LCAwLCAwKTsKKyAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBSLnN0eWxlYWJsZS5TZWFyY2hWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgc2V0SWNvbmlmaWVkQnlEZWZhdWx0KGEuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5TZWFyY2hWaWV3X2ljb25pZmllZEJ5RGVmYXVsdCwgdHJ1ZSkpOwogICAgICAgICBpbnQgbWF4V2lkdGggPSBhLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLnN0eWxlYWJsZS5TZWFyY2hWaWV3X21heFdpZHRoLCAtMSk7CiAgICAgICAgIGlmIChtYXhXaWR0aCAhPSAtMSkgewpAQCAtMzA0LDcgKzMxMyw3IEBACiAKICAgICAgICAgYm9vbGVhbiBmb2N1c2FibGUgPSB0cnVlOwogCi0gICAgICAgIGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLlZpZXcsIDAsIDApOworICAgICAgICBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5WaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgZm9jdXNhYmxlID0gYS5nZXRCb29sZWFuKFIuc3R5bGVhYmxlLlZpZXdfZm9jdXNhYmxlLCBmb2N1c2FibGUpOwogICAgICAgICBhLnJlY3ljbGUoKTsKICAgICAgICAgc2V0Rm9jdXNhYmxlKGZvY3VzYWJsZSk7CkBAIC0xNjYxLDggKzE2NzAsMTQgQEAKICAgICAgICAgICAgIG1UaHJlc2hvbGQgPSBnZXRUaHJlc2hvbGQoKTsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBTZWFyY2hBdXRvQ29tcGxldGUoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICAgICAgcHVibGljIFNlYXJjaEF1dG9Db21wbGV0ZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cnMpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHJzKTsKKyAgICAgICAgICAgIG1UaHJlc2hvbGQgPSBnZXRUaHJlc2hvbGQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTZWFyY2hBdXRvQ29tcGxldGUoCisgICAgICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHJzLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHJzLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgICAgICBtVGhyZXNob2xkID0gZ2V0VGhyZXNob2xkKCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NlZWtCYXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TZWVrQmFyLmphdmEKaW5kZXggMjczN2Y5NC4uZGM3YzA0YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NlZWtCYXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2Vla0Jhci5qYXZhCkBAIC03OSw4ICs3OSwxMiBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIuc2Vla0JhclN0eWxlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgU2Vla0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFNlZWtCYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2Vla0JhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TbGlkaW5nRHJhd2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU2xpZGluZ0RyYXdlci5qYXZhCmluZGV4IDUxNzI0NmIuLmVjMDZjMDIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TbGlkaW5nRHJhd2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NsaWRpbmdEcmF3ZXIuamF2YQpAQCAtMTkyLDExICsxOTIsMzIgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBhcHBsaWNhdGlvbidzIGVudmlyb25tZW50LgogICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIFhNTC4KLSAgICAgKiBAcGFyYW0gZGVmU3R5bGUgVGhlIHN0eWxlIHRvIGFwcGx5IHRvIHRoaXMgd2lkZ2V0LgorICAgICAqIEBwYXJhbSBkZWZTdHlsZUF0dHIgQW4gYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IHRoZW1lIHRoYXQgY29udGFpbnMgYQorICAgICAqICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICB0aGUgdmlldy4gQ2FuIGJlIDAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgogICAgICAqLwotICAgIHB1YmxpYyBTbGlkaW5nRHJhd2VyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5TbGlkaW5nRHJhd2VyLCBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIFNsaWRpbmdEcmF3ZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFNsaWRpbmdEcmF3ZXIgZnJvbSBhIHNwZWNpZmllZCBzZXQgb2YgYXR0cmlidXRlcyBkZWZpbmVkIGluIFhNTC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBhcHBsaWNhdGlvbidzIGVudmlyb25tZW50LgorICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIFhNTC4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVBdHRyIEFuIGF0dHJpYnV0ZSBpbiB0aGUgY3VycmVudCB0aGVtZSB0aGF0IGNvbnRhaW5zIGEKKyAgICAgKiAgICAgICAgcmVmZXJlbmNlIHRvIGEgc3R5bGUgcmVzb3VyY2UgdGhhdCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgKiAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVSZXMgQSByZXNvdXJjZSBpZGVudGlmaWVyIG9mIGEgc3R5bGUgcmVzb3VyY2UgdGhhdAorICAgICAqICAgICAgICBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHZpZXcsIHVzZWQgb25seSBpZgorICAgICAqICAgICAgICBkZWZTdHlsZUF0dHIgaXMgMCBvciBjYW4gbm90IGJlIGZvdW5kIGluIHRoZSB0aGVtZS4gQ2FuIGJlIDAKKyAgICAgKiAgICAgICAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgorICAgICAqLworICAgIHB1YmxpYyBTbGlkaW5nRHJhd2VyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgUi5zdHlsZWFibGUuU2xpZGluZ0RyYXdlciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgaW50IG9yaWVudGF0aW9uID0gYS5nZXRJbnQoUi5zdHlsZWFibGUuU2xpZGluZ0RyYXdlcl9vcmllbnRhdGlvbiwgT1JJRU5UQVRJT05fVkVSVElDQUwpOwogICAgICAgICBtVmVydGljYWwgPSBvcmllbnRhdGlvbiA9PSBPUklFTlRBVElPTl9WRVJUSUNBTDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TcGFjZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NwYWNlLmphdmEKaW5kZXggYmI1M2E3Ny4uYzRlYWViNyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NwYWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NwYWNlLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiAKIC8qKgogICogU3BhY2UgaXMgYSBsaWdodHdlaWdodCBWaWV3IHN1YmNsYXNzIHRoYXQgbWF5IGJlIHVzZWQgdG8gY3JlYXRlIGdhcHMgYmV0d2VlbiBjb21wb25lbnRzCkBAIC0zMCw4ICsyOSw4IEBACiAgICAgLyoqCiAgICAgICoge0Bpbmhlcml0RG9jfQogICAgICAqLwotICAgIHB1YmxpYyBTcGFjZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFNwYWNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBpZiAoZ2V0VmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKICAgICAgICAgICAgIHNldFZpc2liaWxpdHkoSU5WSVNJQkxFKTsKICAgICAgICAgfQpAQCAtNDAsNiArMzksMTMgQEAKICAgICAvKioKICAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgICovCisgICAgcHVibGljIFNwYWNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqLwogICAgIHB1YmxpYyBTcGFjZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU3Bpbm5lci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NwaW5uZXIuamF2YQppbmRleCBiNzVkMzZmLi5hZmU1ODA0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU3Bpbm5lci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TcGlubmVyLmphdmEKQEAgLTEzMCwxOCArMTMwLDE3IEBACiAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgc3Bpbm5lciB3aXRoIHRoZSBnaXZlbiBjb250ZXh0J3MgdGhlbWUsIHRoZSBzdXBwbGllZCBhdHRyaWJ1dGUgc2V0LAotICAgICAqIGFuZCBkZWZhdWx0IHN0eWxlLgorICAgICAqIGFuZCBkZWZhdWx0IHN0eWxlIGF0dHJpYnV0ZS4KICAgICAgKgogICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0IHRoZSB2aWV3IGlzIHJ1bm5pbmcgaW4sIHRocm91Z2ggd2hpY2ggaXQgY2FuCiAgICAgICogICAgICAgIGFjY2VzcyB0aGUgY3VycmVudCB0aGVtZSwgcmVzb3VyY2VzLCBldGMuCiAgICAgICogQHBhcmFtIGF0dHJzIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBYTUwgdGFnIHRoYXQgaXMgaW5mbGF0aW5nIHRoZSB2aWV3LgotICAgICAqIEBwYXJhbSBkZWZTdHlsZSBUaGUgZGVmYXVsdCBzdHlsZSB0byBhcHBseSB0byB0aGlzIHZpZXcuIElmIDAsIG5vIHN0eWxlCi0gICAgICogICAgICAgIHdpbGwgYmUgYXBwbGllZCAoYmV5b25kIHdoYXQgaXMgaW5jbHVkZWQgaW4gdGhlIHRoZW1lKS4gVGhpcyBtYXkKLSAgICAgKiAgICAgICAgZWl0aGVyIGJlIGFuIGF0dHJpYnV0ZSByZXNvdXJjZSwgd2hvc2UgdmFsdWUgd2lsbCBiZSByZXRyaWV2ZWQKLSAgICAgKiAgICAgICAgZnJvbSB0aGUgY3VycmVudCB0aGVtZSwgb3IgYW4gZXhwbGljaXQgc3R5bGUgcmVzb3VyY2UuCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCiAgICAgICovCi0gICAgcHVibGljIFNwaW5uZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSwgTU9ERV9USEVNRSk7CisgICAgcHVibGljIFNwaW5uZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwLCBNT0RFX1RIRU1FKTsKICAgICB9CiAKICAgICAvKioKQEAgLTE1MiwyMCArMTUxLDQ0IEBACiAgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHQgdGhlIHZpZXcgaXMgcnVubmluZyBpbiwgdGhyb3VnaCB3aGljaCBpdCBjYW4KICAgICAgKiAgICAgICAgYWNjZXNzIHRoZSBjdXJyZW50IHRoZW1lLCByZXNvdXJjZXMsIGV0Yy4KICAgICAgKiBAcGFyYW0gYXR0cnMgVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIFhNTCB0YWcgdGhhdCBpcyBpbmZsYXRpbmcgdGhlIHZpZXcuCi0gICAgICogQHBhcmFtIGRlZlN0eWxlIFRoZSBkZWZhdWx0IHN0eWxlIHRvIGFwcGx5IHRvIHRoaXMgdmlldy4gSWYgMCwgbm8gc3R5bGUKLSAgICAgKiAgICAgICAgd2lsbCBiZSBhcHBsaWVkIChiZXlvbmQgd2hhdCBpcyBpbmNsdWRlZCBpbiB0aGUgdGhlbWUpLiBUaGlzIG1heQotICAgICAqICAgICAgICBlaXRoZXIgYmUgYW4gYXR0cmlidXRlIHJlc291cmNlLCB3aG9zZSB2YWx1ZSB3aWxsIGJlIHJldHJpZXZlZAotICAgICAqICAgICAgICBmcm9tIHRoZSBjdXJyZW50IHRoZW1lLCBvciBhbiBleHBsaWNpdCBzdHlsZSByZXNvdXJjZS4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVBdHRyIEFuIGF0dHJpYnV0ZSBpbiB0aGUgY3VycmVudCB0aGVtZSB0aGF0IGNvbnRhaW5zIGEKKyAgICAgKiAgICAgICAgcmVmZXJlbmNlIHRvIGEgc3R5bGUgcmVzb3VyY2UgdGhhdCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgKiAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KICAgICAgKiBAcGFyYW0gbW9kZSBDb25zdGFudCBkZXNjcmliaW5nIGhvdyB0aGUgdXNlciB3aWxsIHNlbGVjdCBjaG9pY2VzIGZyb20gdGhlIHNwaW5uZXIuCi0gICAgICogCisgICAgICoKICAgICAgKiBAc2VlICNNT0RFX0RJQUxPRwogICAgICAqIEBzZWUgI01PREVfRFJPUERPV04KICAgICAgKi8KLSAgICBwdWJsaWMgU3Bpbm5lcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlLCBpbnQgbW9kZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBTcGlubmVyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgbW9kZSkgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDAsIG1vZGUpOworICAgIH0KIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3Bpbm5lciwgZGVmU3R5bGUsIDApOworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIG5ldyBzcGlubmVyIHdpdGggdGhlIGdpdmVuIGNvbnRleHQncyB0aGVtZSwgdGhlIHN1cHBsaWVkIGF0dHJpYnV0ZSBzZXQsCisgICAgICogYW5kIGRlZmF1bHQgc3R5bGUuIDxjb2RlPm1vZGU8L2NvZGU+IG1heSBiZSBvbmUgb2Yge0BsaW5rICNNT0RFX0RJQUxPR30gb3IKKyAgICAgKiB7QGxpbmsgI01PREVfRFJPUERPV059IGFuZCBkZXRlcm1pbmVzIGhvdyB0aGUgdXNlciB3aWxsIHNlbGVjdCBjaG9pY2VzIGZyb20gdGhlIHNwaW5uZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dCB0aGUgdmlldyBpcyBydW5uaW5nIGluLCB0aHJvdWdoIHdoaWNoIGl0IGNhbgorICAgICAqICAgICAgICBhY2Nlc3MgdGhlIGN1cnJlbnQgdGhlbWUsIHJlc291cmNlcywgZXRjLgorICAgICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgWE1MIHRhZyB0aGF0IGlzIGluZmxhdGluZyB0aGUgdmlldy4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVBdHRyIEFuIGF0dHJpYnV0ZSBpbiB0aGUgY3VycmVudCB0aGVtZSB0aGF0IGNvbnRhaW5zIGEKKyAgICAgKiAgICAgICAgcmVmZXJlbmNlIHRvIGEgc3R5bGUgcmVzb3VyY2UgdGhhdCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgKiAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVSZXMgQSByZXNvdXJjZSBpZGVudGlmaWVyIG9mIGEgc3R5bGUgcmVzb3VyY2UgdGhhdAorICAgICAqICAgICAgICBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHZpZXcsIHVzZWQgb25seSBpZgorICAgICAqICAgICAgICBkZWZTdHlsZUF0dHIgaXMgMCBvciBjYW4gbm90IGJlIGZvdW5kIGluIHRoZSB0aGVtZS4gQ2FuIGJlIDAKKyAgICAgKiAgICAgICAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgorICAgICAqIEBwYXJhbSBtb2RlIENvbnN0YW50IGRlc2NyaWJpbmcgaG93IHRoZSB1c2VyIHdpbGwgc2VsZWN0IGNob2ljZXMgZnJvbSB0aGUgc3Bpbm5lci4KKyAgICAgKgorICAgICAqIEBzZWUgI01PREVfRElBTE9HCisgICAgICogQHNlZSAjTU9ERV9EUk9QRE9XTgorICAgICAqLworICAgIHB1YmxpYyBTcGlubmVyKAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcywgaW50IG1vZGUpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3Bpbm5lciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgaWYgKG1vZGUgPT0gTU9ERV9USEVNRSkgewogICAgICAgICAgICAgbW9kZSA9IGEuZ2V0SW50KGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlNwaW5uZXJfc3Bpbm5lck1vZGUsIE1PREVfRElBTE9HKTsKQEAgLTE3OCw3ICsyMDEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBNT0RFX0RST1BET1dOOiB7Ci0gICAgICAgICAgICBmaW5hbCBEcm9wZG93blBvcHVwIHBvcHVwID0gbmV3IERyb3Bkb3duUG9wdXAoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICAgICAgICAgIGZpbmFsIERyb3Bkb3duUG9wdXAgcG9wdXAgPSBuZXcgRHJvcGRvd25Qb3B1cChjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgICAgIG1Ecm9wRG93bldpZHRoID0gYS5nZXRMYXlvdXREaW1lbnNpb24oCiAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlNwaW5uZXJfZHJvcERvd25XaWR0aCwKQEAgLTEwMzEsOCArMTA1NCw5IEBACiAgICAgICAgIHByaXZhdGUgQ2hhclNlcXVlbmNlIG1IaW50VGV4dDsKICAgICAgICAgcHJpdmF0ZSBMaXN0QWRhcHRlciBtQWRhcHRlcjsKIAotICAgICAgICBwdWJsaWMgRHJvcGRvd25Qb3B1cChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlUmVzKSB7Ci0gICAgICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgMCwgZGVmU3R5bGVSZXMpOworICAgICAgICBwdWJsaWMgRHJvcGRvd25Qb3B1cCgKKyAgICAgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgICAgIHNldEFuY2hvclZpZXcoU3Bpbm5lci50aGlzKTsKICAgICAgICAgICAgIHNldE1vZGFsKHRydWUpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1N0YWNrVmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1N0YWNrVmlldy5qYXZhCmluZGV4IDY4NTM2NjAuLmQyZTcxOGMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TdGFja1ZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU3RhY2tWaWV3LmphdmEKQEAgLTE2OCw5ICsxNjgsMTYgQEAKICAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgICovCiAgICAgcHVibGljIFN0YWNrVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyKTsKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlN0YWNrVmlldywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICovCisgICAgcHVibGljIFN0YWNrVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5TdGFja1ZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIG1SZXNPdXRDb2xvciA9IGEuZ2V0Q29sb3IoCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuU3RhY2tWaWV3X3Jlc091dENvbG9yLCAwKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Td2l0Y2guamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Td2l0Y2guamF2YQppbmRleCBlNzU0YzE3Li5jOWExY2E0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU3dpdGNoLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1N3aXRjaC5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC53aWRnZXQ7CiAKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwpAQCAtMzIsNiArMzMsOCBAQAogaW1wb3J0IGFuZHJvaWQudGV4dC5tZXRob2QuQWxsQ2Fwc1RyYW5zZm9ybWF0aW9uTWV0aG9kOwogaW1wb3J0IGFuZHJvaWQudGV4dC5tZXRob2QuVHJhbnNmb3JtYXRpb25NZXRob2QyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkZsb2F0UHJvcGVydHk7CitpbXBvcnQgYW5kcm9pZC51dGlsLk1hdGhVdGlsczsKIGltcG9ydCBhbmRyb2lkLnZpZXcuR3Jhdml0eTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZlbG9jaXR5VHJhY2tlcjsKQEAgLTY2LDYgKzY5LDggQEAKICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI1N3aXRjaF90cmFjawogICovCiBwdWJsaWMgY2xhc3MgU3dpdGNoIGV4dGVuZHMgQ29tcG91bmRCdXR0b24geworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUSFVNQl9BTklNQVRJT05fRFVSQVRJT04gPSAyNTA7CisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVE9VQ0hfTU9ERV9JRExFID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVE9VQ0hfTU9ERV9ET1dOID0gMTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVE9VQ0hfTU9ERV9EUkFHR0lORyA9IDI7CkBAIC0xMDUsNiArMTEwLDcgQEAKICAgICBwcml2YXRlIExheW91dCBtT25MYXlvdXQ7CiAgICAgcHJpdmF0ZSBMYXlvdXQgbU9mZkxheW91dDsKICAgICBwcml2YXRlIFRyYW5zZm9ybWF0aW9uTWV0aG9kMiBtU3dpdGNoVHJhbnNmb3JtYXRpb25NZXRob2Q7CisgICAgcHJpdmF0ZSBPYmplY3RBbmltYXRvciBtUG9zaXRpb25BbmltYXRvcjsKIAogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJoaWRpbmciKQogICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVGVtcFJlY3QgPSBuZXcgUmVjdCgpOwpAQCAtMTM5LDE5ICsxNDUsNDEgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0IHRoYXQgd2lsbCBkZXRlcm1pbmUgdGhpcyB3aWRnZXQncyB0aGVtaW5nLgogICAgICAqIEBwYXJhbSBhdHRycyBTcGVjaWZpY2F0aW9uIG9mIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgZGV2aWF0ZSBmcm9tIHRoZSBkZWZhdWx0IHN0eWxpbmcuCi0gICAgICogQHBhcmFtIGRlZlN0eWxlIEFuIGF0dHJpYnV0ZSBJRCB3aXRoaW4gdGhlIGFjdGl2ZSB0aGVtZSBjb250YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZQotICAgICAqICAgICAgICAgICAgICAgICBkZWZhdWx0IHN0eWxlIGZvciB0aGlzIHdpZGdldC4gZS5nLiBhbmRyb2lkLlIuYXR0ci5zd2l0Y2hTdHlsZS4KKyAgICAgKiBAcGFyYW0gZGVmU3R5bGVBdHRyIEFuIGF0dHJpYnV0ZSBpbiB0aGUgY3VycmVudCB0aGVtZSB0aGF0IGNvbnRhaW5zIGEKKyAgICAgKiAgICAgICAgcmVmZXJlbmNlIHRvIGEgc3R5bGUgcmVzb3VyY2UgdGhhdCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgKiAgICAgICAgdGhlIHZpZXcuIENhbiBiZSAwIHRvIG5vdCBsb29rIGZvciBkZWZhdWx0cy4KICAgICAgKi8KLSAgICBwdWJsaWMgU3dpdGNoKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgU3dpdGNoKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgU3dpdGNoIHdpdGggYSBkZWZhdWx0IHN0eWxlIGRldGVybWluZWQgYnkgdGhlIGdpdmVuIHRoZW1lCisgICAgICogYXR0cmlidXRlIG9yIHN0eWxlIHJlc291cmNlLCBvdmVycmlkaW5nIHNwZWNpZmljIHN0eWxlIGF0dHJpYnV0ZXMgYXMKKyAgICAgKiByZXF1ZXN0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dCB0aGF0IHdpbGwgZGV0ZXJtaW5lIHRoaXMgd2lkZ2V0J3MgdGhlbWluZy4KKyAgICAgKiBAcGFyYW0gYXR0cnMgU3BlY2lmaWNhdGlvbiBvZiBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGRldmlhdGUgZnJvbSB0aGUKKyAgICAgKiAgICAgICAgZGVmYXVsdCBzdHlsaW5nLgorICAgICAqIEBwYXJhbSBkZWZTdHlsZUF0dHIgQW4gYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IHRoZW1lIHRoYXQgY29udGFpbnMgYQorICAgICAqICAgICAgICByZWZlcmVuY2UgdG8gYSBzdHlsZSByZXNvdXJjZSB0aGF0IHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvcgorICAgICAqICAgICAgICB0aGUgdmlldy4gQ2FuIGJlIDAgdG8gbm90IGxvb2sgZm9yIGRlZmF1bHRzLgorICAgICAqIEBwYXJhbSBkZWZTdHlsZVJlcyBBIHJlc291cmNlIGlkZW50aWZpZXIgb2YgYSBzdHlsZSByZXNvdXJjZSB0aGF0CisgICAgICogICAgICAgIHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgdmlldywgdXNlZCBvbmx5IGlmCisgICAgICogICAgICAgIGRlZlN0eWxlQXR0ciBpcyAwIG9yIGNhbiBub3QgYmUgZm91bmQgaW4gdGhlIHRoZW1lLiBDYW4gYmUgMAorICAgICAqICAgICAgICB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCisgICAgICovCisgICAgcHVibGljIFN3aXRjaChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBtVGV4dFBhaW50ID0gbmV3IFRleHRQYWludChQYWludC5BTlRJX0FMSUFTX0ZMQUcpOwogICAgICAgICBSZXNvdXJjZXMgcmVzID0gZ2V0UmVzb3VyY2VzKCk7CiAgICAgICAgIG1UZXh0UGFpbnQuZGVuc2l0eSA9IHJlcy5nZXREaXNwbGF5TWV0cmljcygpLmRlbnNpdHk7CiAgICAgICAgIG1UZXh0UGFpbnQuc2V0Q29tcGF0aWJpbGl0eVNjYWxpbmcocmVzLmdldENvbXBhdGliaWxpdHlJbmZvKCkuYXBwbGljYXRpb25TY2FsZSk7CiAKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlN3aXRjaCwgZGVmU3R5bGUsIDApOworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlN3aXRjaCwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgbVRodW1iRHJhd2FibGUgPSBhLmdldERyYXdhYmxlKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlN3aXRjaF90aHVtYik7CiAgICAgICAgIG1UcmFja0RyYXdhYmxlID0gYS5nZXREcmF3YWJsZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Td2l0Y2hfdHJhY2spOwpAQCAtNTI4LDkgKzU1NiwxMiBAQAogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiAoeCwgeSkgaXMgd2l0aGluIHRoZSB0YXJnZXQgYXJlYSBvZiB0aGUgc3dpdGNoIHRodW1iCiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIGhpdFRodW1iKGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAgLy8gUmVsaWVzIG9uIG1UZW1wUmVjdCwgTVVTVCBiZSBjYWxsZWQgZmlyc3QhCisgICAgICAgIGZpbmFsIGludCB0aHVtYk9mZnNldCA9IGdldFRodW1iT2Zmc2V0KCk7CisKICAgICAgICAgbVRodW1iRHJhd2FibGUuZ2V0UGFkZGluZyhtVGVtcFJlY3QpOwogICAgICAgICBmaW5hbCBpbnQgdGh1bWJUb3AgPSBtU3dpdGNoVG9wIC0gbVRvdWNoU2xvcDsKLSAgICAgICAgZmluYWwgaW50IHRodW1iTGVmdCA9IG1Td2l0Y2hMZWZ0ICsgKGludCkgKG1UaHVtYlBvc2l0aW9uICsgMC41ZikgLSBtVG91Y2hTbG9wOworICAgICAgICBmaW5hbCBpbnQgdGh1bWJMZWZ0ID0gbVN3aXRjaExlZnQgKyB0aHVtYk9mZnNldCAtIG1Ub3VjaFNsb3A7CiAgICAgICAgIGZpbmFsIGludCB0aHVtYlJpZ2h0ID0gdGh1bWJMZWZ0ICsgbVRodW1iV2lkdGggKwogICAgICAgICAgICAgICAgIG1UZW1wUmVjdC5sZWZ0ICsgbVRlbXBSZWN0LnJpZ2h0ICsgbVRvdWNoU2xvcDsKICAgICAgICAgZmluYWwgaW50IHRodW1iQm90dG9tID0gbVN3aXRjaEJvdHRvbSArIG1Ub3VjaFNsb3A7CkBAIC01NzUsMTMgKzYwNiwyMyBAQAogCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgVE9VQ0hfTU9ERV9EUkFHR0lORzogewogICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgeCA9IGV2LmdldFgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IGR4ID0geCAtIG1Ub3VjaFg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBuZXdQb3MgPSBNYXRoLm1heCgwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihtVGh1bWJQb3NpdGlvbiArIGR4LCBnZXRUaHVtYlNjcm9sbFJhbmdlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCB0aHVtYlNjcm9sbFJhbmdlID0gZ2V0VGh1bWJTY3JvbGxSYW5nZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgdGh1bWJTY3JvbGxPZmZzZXQgPSB4IC0gbVRvdWNoWDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRQb3M7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGh1bWJTY3JvbGxSYW5nZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFBvcyA9IHRodW1iU2Nyb2xsT2Zmc2V0IC8gdGh1bWJTY3JvbGxSYW5nZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHRodW1iIHNjcm9sbCByYW5nZSBpcyBlbXB0eSwganVzdCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW92ZW1lbnQgZGlyZWN0aW9uIHRvIHNuYXAgb24gb3Igb2ZmLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRQb3MgPSB0aHVtYlNjcm9sbE9mZnNldCA+IDAgPyAxIDogLTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNMYXlvdXRSdGwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRQb3MgPSAtZFBvczsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IG5ld1BvcyA9IE1hdGhVdGlscy5jb25zdHJhaW4obVRodW1iUG9zaXRpb24gKyBkUG9zLCAwLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdQb3MgIT0gbVRodW1iUG9zaXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGh1bWJQb3NpdGlvbiA9IG5ld1BvczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVG91Y2hYID0geDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGh1bWJQb3NpdGlvbihuZXdQb3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTYxOCw2MiArNjU5LDc3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHN0b3BEcmFnKE1vdGlvbkV2ZW50IGV2KSB7CiAgICAgICAgIG1Ub3VjaE1vZGUgPSBUT1VDSF9NT0RFX0lETEU7Ci0gICAgICAgIC8vIFVwIGFuZCBub3QgY2FuY2VsZWQsIGFsc28gY2hlY2tzIHRoZSBzd2l0Y2ggaGFzIG5vdCBiZWVuIGRpc2FibGVkIGR1cmluZyB0aGUgZHJhZwotICAgICAgICBib29sZWFuIGNvbW1pdENoYW5nZSA9IGV2LmdldEFjdGlvbigpID09IE1vdGlvbkV2ZW50LkFDVElPTl9VUCAmJiBpc0VuYWJsZWQoKTsKIAotICAgICAgICBjYW5jZWxTdXBlclRvdWNoKGV2KTsKLQorICAgICAgICAvLyBDb21taXQgdGhlIGNoYW5nZSBpZiB0aGUgZXZlbnQgaXMgdXAgYW5kIG5vdCBjYW5jZWxlZCBhbmQgdGhlIHN3aXRjaAorICAgICAgICAvLyBoYXMgbm90IGJlZW4gZGlzYWJsZWQgZHVyaW5nIHRoZSBkcmFnLgorICAgICAgICBmaW5hbCBib29sZWFuIGNvbW1pdENoYW5nZSA9IGV2LmdldEFjdGlvbigpID09IE1vdGlvbkV2ZW50LkFDVElPTl9VUCAmJiBpc0VuYWJsZWQoKTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBuZXdTdGF0ZTsKICAgICAgICAgaWYgKGNvbW1pdENoYW5nZSkgewotICAgICAgICAgICAgYm9vbGVhbiBuZXdTdGF0ZTsKICAgICAgICAgICAgIG1WZWxvY2l0eVRyYWNrZXIuY29tcHV0ZUN1cnJlbnRWZWxvY2l0eSgxMDAwKTsKLSAgICAgICAgICAgIGZsb2F0IHh2ZWwgPSBtVmVsb2NpdHlUcmFja2VyLmdldFhWZWxvY2l0eSgpOworICAgICAgICAgICAgZmluYWwgZmxvYXQgeHZlbCA9IG1WZWxvY2l0eVRyYWNrZXIuZ2V0WFZlbG9jaXR5KCk7CiAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoeHZlbCkgPiBtTWluRmxpbmdWZWxvY2l0eSkgewogICAgICAgICAgICAgICAgIG5ld1N0YXRlID0gaXNMYXlvdXRSdGwoKSA/ICh4dmVsIDwgMCkgOiAoeHZlbCA+IDApOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBuZXdTdGF0ZSA9IGdldFRhcmdldENoZWNrZWRTdGF0ZSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYW5pbWF0ZVRodW1iVG9DaGVja2VkU3RhdGUobmV3U3RhdGUpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYW5pbWF0ZVRodW1iVG9DaGVja2VkU3RhdGUoaXNDaGVja2VkKCkpOworICAgICAgICAgICAgbmV3U3RhdGUgPSBpc0NoZWNrZWQoKTsKICAgICAgICAgfQorCisgICAgICAgIHNldENoZWNrZWQobmV3U3RhdGUpOworICAgICAgICBjYW5jZWxTdXBlclRvdWNoKGV2KTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgYW5pbWF0ZVRodW1iVG9DaGVja2VkU3RhdGUoYm9vbGVhbiBuZXdDaGVja2VkU3RhdGUpIHsKLSAgICAgICAgLy8gVE9ETyBhbmltYXRlIQotICAgICAgICAvL2Zsb2F0IHRhcmdldFBvcyA9IG5ld0NoZWNrZWRTdGF0ZSA/IDAgOiBnZXRUaHVtYlNjcm9sbFJhbmdlKCk7Ci0gICAgICAgIC8vbVRodW1iUG9zaXRpb24gPSB0YXJnZXRQb3M7Ci0gICAgICAgIHNldENoZWNrZWQobmV3Q2hlY2tlZFN0YXRlKTsKKyAgICAgICAgZmluYWwgZmxvYXQgdGFyZ2V0UG9zaXRpb24gPSBuZXdDaGVja2VkU3RhdGUgPyAxIDogMDsKKyAgICAgICAgbVBvc2l0aW9uQW5pbWF0b3IgPSBPYmplY3RBbmltYXRvci5vZkZsb2F0KHRoaXMsIFRIVU1CX1BPUywgdGFyZ2V0UG9zaXRpb24pOworICAgICAgICBtUG9zaXRpb25BbmltYXRvci5zZXREdXJhdGlvbihUSFVNQl9BTklNQVRJT05fRFVSQVRJT04pOworICAgICAgICBtUG9zaXRpb25BbmltYXRvci5zZXRBdXRvQ2FuY2VsKHRydWUpOworICAgICAgICBtUG9zaXRpb25BbmltYXRvci5zdGFydCgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjYW5jZWxQb3NpdGlvbkFuaW1hdG9yKCkgeworICAgICAgICBpZiAobVBvc2l0aW9uQW5pbWF0b3IgIT0gbnVsbCkgeworICAgICAgICAgICAgbVBvc2l0aW9uQW5pbWF0b3IuY2FuY2VsKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gZ2V0VGFyZ2V0Q2hlY2tlZFN0YXRlKCkgewotICAgICAgICBpZiAoaXNMYXlvdXRSdGwoKSkgewotICAgICAgICAgICAgcmV0dXJuIG1UaHVtYlBvc2l0aW9uIDw9IGdldFRodW1iU2Nyb2xsUmFuZ2UoKSAvIDI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbVRodW1iUG9zaXRpb24gPj0gZ2V0VGh1bWJTY3JvbGxSYW5nZSgpIC8gMjsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gbVRodW1iUG9zaXRpb24gPiAwLjVmOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBzZXRUaHVtYlBvc2l0aW9uKGJvb2xlYW4gY2hlY2tlZCkgewotICAgICAgICBpZiAoaXNMYXlvdXRSdGwoKSkgewotICAgICAgICAgICAgbVRodW1iUG9zaXRpb24gPSBjaGVja2VkID8gMCA6IGdldFRodW1iU2Nyb2xsUmFuZ2UoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1UaHVtYlBvc2l0aW9uID0gY2hlY2tlZCA/IGdldFRodW1iU2Nyb2xsUmFuZ2UoKSA6IDA7Ci0gICAgICAgIH0KKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSB0aHVtYiBwb3NpdGlvbiBhcyBhIGRlY2ltYWwgdmFsdWUgYmV0d2VlbiAwIChvZmYpIGFuZCAxIChvbikuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcG9zaXRpb24gbmV3IHBvc2l0aW9uIGJldHdlZW4gWzAsMV0KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0VGh1bWJQb3NpdGlvbihmbG9hdCBwb3NpdGlvbikgeworICAgICAgICBtVGh1bWJQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgdG9nZ2xlKCkgeworICAgICAgICBzZXRDaGVja2VkKCFpc0NoZWNrZWQoKSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0Q2hlY2tlZChib29sZWFuIGNoZWNrZWQpIHsKICAgICAgICAgc3VwZXIuc2V0Q2hlY2tlZChjaGVja2VkKTsKLSAgICAgICAgc2V0VGh1bWJQb3NpdGlvbihpc0NoZWNrZWQoKSk7Ci0gICAgICAgIGludmFsaWRhdGUoKTsKKworICAgICAgICBpZiAoaXNBdHRhY2hlZFRvV2luZG93KCkgJiYgaXNMYWlkT3V0KCkpIHsKKyAgICAgICAgICAgIGFuaW1hdGVUaHVtYlRvQ2hlY2tlZFN0YXRlKGNoZWNrZWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSW1tZWRpYXRlbHkgbW92ZSB0aGUgdGh1bWIgdG8gdGhlIG5ldyBwb3NpdGlvbi4KKyAgICAgICAgICAgIGNhbmNlbFBvc2l0aW9uQW5pbWF0b3IoKTsKKyAgICAgICAgICAgIHNldFRodW1iUG9zaXRpb24oY2hlY2tlZCA/IDEgOiAwKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIG9uTGF5b3V0KGJvb2xlYW4gY2hhbmdlZCwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgewogICAgICAgICBzdXBlci5vbkxheW91dChjaGFuZ2VkLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogCi0gICAgICAgIHNldFRodW1iUG9zaXRpb24oaXNDaGVja2VkKCkpOwotCiAgICAgICAgIGludCBzd2l0Y2hSaWdodDsKICAgICAgICAgaW50IHN3aXRjaExlZnQ7CiAKQEAgLTczNCwxMSArNzkwLDEyIEBACiAgICAgICAgIGludCBzd2l0Y2hJbm5lckJvdHRvbSA9IHN3aXRjaEJvdHRvbSAtIG1UZW1wUmVjdC5ib3R0b207CiAgICAgICAgIGNhbnZhcy5jbGlwUmVjdChzd2l0Y2hJbm5lckxlZnQsIHN3aXRjaFRvcCwgc3dpdGNoSW5uZXJSaWdodCwgc3dpdGNoQm90dG9tKTsKIAorICAgICAgICAvLyBSZWxpZXMgb24gbVRlbXBSZWN0LCBNVVNUIGJlIGNhbGxlZCBmaXJzdCEKKyAgICAgICAgZmluYWwgaW50IHRodW1iUG9zID0gZ2V0VGh1bWJPZmZzZXQoKTsKKwogICAgICAgICBtVGh1bWJEcmF3YWJsZS5nZXRQYWRkaW5nKG1UZW1wUmVjdCk7Ci0gICAgICAgIGZpbmFsIGludCB0aHVtYlBvcyA9IChpbnQpIChtVGh1bWJQb3NpdGlvbiArIDAuNWYpOwogICAgICAgICBpbnQgdGh1bWJMZWZ0ID0gc3dpdGNoSW5uZXJMZWZ0IC0gbVRlbXBSZWN0LmxlZnQgKyB0aHVtYlBvczsKICAgICAgICAgaW50IHRodW1iUmlnaHQgPSBzd2l0Y2hJbm5lckxlZnQgKyB0aHVtYlBvcyArIG1UaHVtYldpZHRoICsgbVRlbXBSZWN0LnJpZ2h0OwotCiAgICAgICAgIG1UaHVtYkRyYXdhYmxlLnNldEJvdW5kcyh0aHVtYkxlZnQsIHN3aXRjaFRvcCwgdGh1bWJSaWdodCwgc3dpdGNoQm90dG9tKTsKICAgICAgICAgbVRodW1iRHJhd2FibGUuZHJhdyhjYW52YXMpOwogCkBAIC03ODMsNiArODQwLDIyIEBACiAgICAgICAgIHJldHVybiBwYWRkaW5nOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIFRyYW5zbGF0ZXMgdGh1bWIgcG9zaXRpb24gdG8gb2Zmc2V0IGFjY29yZGluZyB0byBjdXJyZW50IFJUTCBzZXR0aW5nIGFuZAorICAgICAqIHRodW1iIHNjcm9sbCByYW5nZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGh1bWIgb2Zmc2V0CisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0VGh1bWJPZmZzZXQoKSB7CisgICAgICAgIGZpbmFsIGZsb2F0IHRodW1iUG9zaXRpb247CisgICAgICAgIGlmIChpc0xheW91dFJ0bCgpKSB7CisgICAgICAgICAgICB0aHVtYlBvc2l0aW9uID0gMSAtIG1UaHVtYlBvc2l0aW9uOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGh1bWJQb3NpdGlvbiA9IG1UaHVtYlBvc2l0aW9uOworICAgICAgICB9CisgICAgICAgIHJldHVybiAoaW50KSAodGh1bWJQb3NpdGlvbiAqIGdldFRodW1iU2Nyb2xsUmFuZ2UoKSArIDAuNWYpOworICAgIH0KKwogICAgIHByaXZhdGUgaW50IGdldFRodW1iU2Nyb2xsUmFuZ2UoKSB7CiAgICAgICAgIGlmIChtVHJhY2tEcmF3YWJsZSA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTg0OCw0ICs5MjEsMTYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEZsb2F0UHJvcGVydHk8U3dpdGNoPiBUSFVNQl9QT1MgPSBuZXcgRmxvYXRQcm9wZXJ0eTxTd2l0Y2g+KCJ0aHVtYlBvcyIpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBGbG9hdCBnZXQoU3dpdGNoIG9iamVjdCkgeworICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5tVGh1bWJQb3NpdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRWYWx1ZShTd2l0Y2ggb2JqZWN0LCBmbG9hdCB2YWx1ZSkgeworICAgICAgICAgICAgb2JqZWN0LnNldFRodW1iUG9zaXRpb24odmFsdWUpOworICAgICAgICB9CisgICAgfTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UYWJIb3N0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGFiSG9zdC5qYXZhCmluZGV4IDIzOGRjNTUuLjg5ZGY1MWEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UYWJIb3N0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RhYkhvc3QuamF2YQpAQCAtNzcsMTEgKzc3LDE4IEBACiAgICAgfQogCiAgICAgcHVibGljIFRhYkhvc3QoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLnRhYldpZGdldFN0eWxlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgVGFiSG9zdChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBUYWJIb3N0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwogCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5UYWJXaWRnZXQsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLnRhYldpZGdldFN0eWxlLCAwKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5UYWJXaWRnZXQsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIG1UYWJMYXlvdXRJZCA9IGEuZ2V0UmVzb3VyY2VJZChSLnN0eWxlYWJsZS5UYWJXaWRnZXRfdGFiTGF5b3V0LCAwKTsKICAgICAgICAgYS5yZWN5Y2xlKCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGFiV2lkZ2V0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGFiV2lkZ2V0LmphdmEKaW5kZXggNmJjZWQxYy4uNTY4YjNlNmEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UYWJXaWRnZXQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGFiV2lkZ2V0LmphdmEKQEAgLTc0LDExICs3NCwxNSBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIudGFiV2lkZ2V0U3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBUYWJXaWRnZXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBUYWJXaWRnZXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgVGFiV2lkZ2V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVGFiV2lkZ2V0LCBkZWZTdHlsZSwgMCk7CisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlRhYldpZGdldCwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgc2V0U3RyaXBFbmFibGVkKGEuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5UYWJXaWRnZXRfdGFiU3RyaXBFbmFibGVkLCB0cnVlKSk7CiAgICAgICAgIHNldExlZnRTdHJpcERyYXdhYmxlKGEuZ2V0RHJhd2FibGUoUi5zdHlsZWFibGUuVGFiV2lkZ2V0X3RhYlN0cmlwTGVmdCkpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RleHRDbG9jay5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RleHRDbG9jay5qYXZhCmluZGV4IGIzYjk1ZDkuLjRjNWM3MWQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UZXh0Q2xvY2suamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGV4dENsb2NrLmphdmEKQEAgLTE5OCwxNSArMTk4LDE5IEBACiAgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHQgdGhlIHZpZXcgaXMgcnVubmluZyBpbiwgdGhyb3VnaCB3aGljaCBpdCBjYW4KICAgICAgKiAgICAgICAgYWNjZXNzIHRoZSBjdXJyZW50IHRoZW1lLCByZXNvdXJjZXMsIGV0Yy4KICAgICAgKiBAcGFyYW0gYXR0cnMgVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIFhNTCB0YWcgdGhhdCBpcyBpbmZsYXRpbmcgdGhlIHZpZXcKLSAgICAgKiBAcGFyYW0gZGVmU3R5bGUgVGhlIGRlZmF1bHQgc3R5bGUgdG8gYXBwbHkgdG8gdGhpcyB2aWV3LiBJZiAwLCBubyBzdHlsZQotICAgICAqICAgICAgICB3aWxsIGJlIGFwcGxpZWQgKGJleW9uZCB3aGF0IGlzIGluY2x1ZGVkIGluIHRoZSB0aGVtZSkuIFRoaXMgbWF5Ci0gICAgICogICAgICAgIGVpdGhlciBiZSBhbiBhdHRyaWJ1dGUgcmVzb3VyY2UsIHdob3NlIHZhbHVlIHdpbGwgYmUgcmV0cmlldmVkCi0gICAgICogICAgICAgIGZyb20gdGhlIGN1cnJlbnQgdGhlbWUsIG9yIGFuIGV4cGxpY2l0IHN0eWxlIHJlc291cmNlCisgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBBbiBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUgdGhhdCBjb250YWlucyBhCisgICAgICogICAgICAgIHJlZmVyZW5jZSB0byBhIHN0eWxlIHJlc291cmNlIHRoYXQgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICogICAgICAgIHRoZSB2aWV3LiBDYW4gYmUgMCB0byBub3QgbG9vayBmb3IgZGVmYXVsdHMuCiAgICAgICovCi0gICAgcHVibGljIFRleHRDbG9jayhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFRleHRDbG9jayhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLlRleHRDbG9jaywgZGVmU3R5bGUsIDApOworICAgIHB1YmxpYyBUZXh0Q2xvY2soQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBSLnN0eWxlYWJsZS5UZXh0Q2xvY2ssIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbUZvcm1hdDEyID0gYS5nZXRUZXh0KFIuc3R5bGVhYmxlLlRleHRDbG9ja19mb3JtYXQxMkhvdXIpOwogICAgICAgICAgICAgbUZvcm1hdDI0ID0gYS5nZXRUZXh0KFIuc3R5bGVhYmxlLlRleHRDbG9ja19mb3JtYXQyNEhvdXIpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RleHRWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGV4dFZpZXcuamF2YQppbmRleCA3YTk4MDlmLi41ZDQyNTg5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGV4dFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGV4dFZpZXcuamF2YQpAQCAtMTM2LDcgKzEzNiw2IEBACiBpbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrOwogCiBpbXBvcnQgc3RhdGljIGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUy5KRUxMWV9CRUFOX01SMTsKIApAQCAtNjE4LDkgKzYxNywxNCBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIudGV4dFZpZXdTdHlsZSk7CiAgICAgfQogCisgICAgcHVibGljIFRleHRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCiAgICAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLSAgICBwdWJsaWMgVGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBUZXh0VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKwogICAgICAgICBtVGV4dCA9ICIiOwogCiAgICAgICAgIGZpbmFsIFJlc291cmNlcyByZXMgPSBnZXRSZXNvdXJjZXMoKTsKQEAgLTY1Nyw4ICs2NjEsOCBAQAogICAgICAgICAgKiB0byBiZSBhYmxlIHRvIHBhcnNlIHRoZSBhcHBlYXJhbmNlIGZpcnN0IGFuZCB0aGVuIGxldCBzcGVjaWZpYyB0YWdzCiAgICAgICAgICAqIGZvciB0aGlzIFZpZXcgb3ZlcnJpZGUgaXQuCiAgICAgICAgICAqLwotICAgICAgICBUeXBlZEFycmF5IGEgPSB0aGVtZS5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAotICAgICAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVGV4dFZpZXdBcHBlYXJhbmNlLCBkZWZTdHlsZSwgMCk7CisgICAgICAgIFR5cGVkQXJyYXkgYSA9IHRoZW1lLm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVGV4dFZpZXdBcHBlYXJhbmNlLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgVHlwZWRBcnJheSBhcHBlYXJhbmNlID0gbnVsbDsKICAgICAgICAgaW50IGFwID0gYS5nZXRSZXNvdXJjZUlkKAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlRleHRWaWV3QXBwZWFyYW5jZV90ZXh0QXBwZWFyYW5jZSwgLTEpOwpAQCAtNzUxLDcgKzc1NSw3IEBACiAgICAgICAgIGludCBpbnB1dFR5cGUgPSBFZGl0b3JJbmZvLlRZUEVfTlVMTDsKIAogICAgICAgICBhID0gdGhlbWUub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlRleHRWaWV3LCBkZWZTdHlsZSwgMCk7CisgICAgICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5UZXh0VmlldywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgaW50IG4gPSBhLmdldEluZGV4Q291bnQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKQEAgLTEyNzUsOSArMTI3OSw4IEBACiAgICAgICAgICAqIEhvd2V2ZXIsIFRleHRWaWV3cyB0aGF0IGhhdmUgaW5wdXQgb3IgbW92ZW1lbnQgbWV0aG9kcyAqYXJlKgogICAgICAgICAgKiBmb2N1c2FibGUgYnkgZGVmYXVsdC4KICAgICAgICAgICovCi0gICAgICAgIGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZTdHlsZSwgMCk7CisgICAgICAgIGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIGJvb2xlYW4gZm9jdXNhYmxlID0gbU1vdmVtZW50ICE9IG51bGwgfHwgZ2V0S2V5TGlzdGVuZXIoKSAhPSBudWxsOwogICAgICAgICBib29sZWFuIGNsaWNrYWJsZSA9IGZvY3VzYWJsZTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UaW1lUGlja2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGltZVBpY2tlci5qYXZhCmluZGV4IGMyNmNiMjQuLjhlNGJhMGQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UaW1lUGlja2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RpbWVQaWNrZXIuamF2YQpAQCAtMjAsMjYgKzIwLDE3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LmZvcm1hdC5EYXRlRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZVV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuRWRpdG9ySW5mbzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lk51bWJlclBpY2tlci5PblZhbHVlQ2hhbmdlTGlzdGVuZXI7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwogCi1pbXBvcnQgamF2YS50ZXh0LkRhdGVGb3JtYXRTeW1ib2xzOwotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKIGltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwogCitpbXBvcnQgc3RhdGljIGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQ7CisKIC8qKgogICogQSB2aWV3IGZvciBzZWxlY3RpbmcgdGhlIHRpbWUgb2YgZGF5LCBpbiBlaXRoZXIgMjQgaG91ciBvciBBTS9QTSBtb2RlLiBUaGUKICAqIGhvdXIsIGVhY2ggbWludXRlIGRpZ2l0LCBhbmQgQU0vUE0gKGlmIGFwcGxpY2FibGUpIGNhbiBiZSBjb25yb2xsZWQgYnkKQEAgLTU3LDU4ICs0OCwxMiBAQAogQFdpZGdldAogcHVibGljIGNsYXNzIFRpbWVQaWNrZXIgZXh0ZW5kcyBGcmFtZUxheW91dCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfRU5BQkxFRF9TVEFURSA9IHRydWU7CisgICAgcHJpdmF0ZSBUaW1lUGlja2VyRGVsZWdhdGUgbURlbGVnYXRlOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhPVVJTX0lOX0hBTEZfREFZID0gMTI7Ci0KLSAgICAvKioKLSAgICAgKiBBIG5vLW9wIGNhbGxiYWNrIHVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIGF2b2lkIG51bGwgY2hlY2tzIGxhdGVyIGluCi0gICAgICogdGhlIGNvZGUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT25UaW1lQ2hhbmdlZExpc3RlbmVyIE5PX09QX0NIQU5HRV9MSVNURU5FUiA9IG5ldyBPblRpbWVDaGFuZ2VkTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uVGltZUNoYW5nZWQoVGltZVBpY2tlciB2aWV3LCBpbnQgaG91ck9mRGF5LCBpbnQgbWludXRlKSB7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gc3RhdGUKLSAgICBwcml2YXRlIGJvb2xlYW4gbUlzMjRIb3VyVmlldzsKLQotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNBbTsKLQotICAgIC8vIHVpIGNvbXBvbmVudHMKLSAgICBwcml2YXRlIGZpbmFsIE51bWJlclBpY2tlciBtSG91clNwaW5uZXI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIE51bWJlclBpY2tlciBtTWludXRlU3Bpbm5lcjsKLQotICAgIHByaXZhdGUgZmluYWwgTnVtYmVyUGlja2VyIG1BbVBtU3Bpbm5lcjsKLQotICAgIHByaXZhdGUgZmluYWwgRWRpdFRleHQgbUhvdXJTcGlubmVySW5wdXQ7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEVkaXRUZXh0IG1NaW51dGVTcGlubmVySW5wdXQ7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEVkaXRUZXh0IG1BbVBtU3Bpbm5lcklucHV0OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBUZXh0VmlldyBtRGl2aWRlcjsKLQotICAgIC8vIE5vdGUgdGhhdCB0aGUgbGVnYWN5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBUaW1lUGlja2VyIGlzCi0gICAgLy8gdXNpbmcgYSBidXR0b24gZm9yIHRvZ2dsaW5nIGJldHdlZW4gQU0vUE0gd2hpbGUgdGhlIG5ldwotICAgIC8vIHZlcnNpb24gdXNlcyBhIE51bWJlclBpY2tlciBzcGlubmVyLiBUaGVyZWZvcmUgdGhlIGNvZGUKLSAgICAvLyBhY2NvbW1vZGF0ZXMgdGhlc2UgdHdvIGNhc2VzIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlLgotICAgIHByaXZhdGUgZmluYWwgQnV0dG9uIG1BbVBtQnV0dG9uOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBtQW1QbVN0cmluZ3M7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbUlzRW5hYmxlZCA9IERFRkFVTFRfRU5BQkxFRF9TVEFURTsKLQotICAgIC8vIGNhbGxiYWNrcwotICAgIHByaXZhdGUgT25UaW1lQ2hhbmdlZExpc3RlbmVyIG1PblRpbWVDaGFuZ2VkTGlzdGVuZXI7Ci0KLSAgICBwcml2YXRlIENhbGVuZGFyIG1UZW1wQ2FsZW5kYXI7Ci0KLSAgICBwcml2YXRlIExvY2FsZSBtQ3VycmVudExvY2FsZTsKLQotICAgIHByaXZhdGUgYm9vbGVhbiBtSG91cldpdGhUd29EaWdpdDsKLSAgICBwcml2YXRlIGNoYXIgbUhvdXJGb3JtYXQ7CisgICAgcHJpdmF0ZSBBdHRyaWJ1dGVTZXQgbUF0dHJzOworICAgIHByaXZhdGUgaW50IG1EZWZTdHlsZUF0dHI7CisgICAgcHJpdmF0ZSBpbnQgbURlZlN0eWxlUmVzOworICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKIAogICAgIC8qKgogICAgICAqIFRoZSBjYWxsYmFjayBpbnRlcmZhY2UgdXNlZCB0byBpbmRpY2F0ZSB0aGUgdGltZSBoYXMgYmVlbiBhZGp1c3RlZC4KQEAgLTEzMSwzNDUgKzc2LDc5IEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIFIuYXR0ci50aW1lUGlja2VyU3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyBUaW1lUGlja2VyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKLQotICAgICAgICAvLyBpbml0aWFsaXphdGlvbiBiYXNlZCBvbiBsb2NhbGUKLSAgICAgICAgc2V0Q3VycmVudExvY2FsZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLQotICAgICAgICAvLyBwcm9jZXNzIHN0eWxlIGF0dHJpYnV0ZXMKLSAgICAgICAgVHlwZWRBcnJheSBhdHRyaWJ1dGVzQXJyYXkgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgYXR0cnMsIFIuc3R5bGVhYmxlLlRpbWVQaWNrZXIsIGRlZlN0eWxlLCAwKTsKLSAgICAgICAgaW50IGxheW91dFJlc291cmNlSWQgPSBhdHRyaWJ1dGVzQXJyYXkuZ2V0UmVzb3VyY2VJZCgKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5UaW1lUGlja2VyX2ludGVybmFsTGF5b3V0LCBSLmxheW91dC50aW1lX3BpY2tlcik7Ci0gICAgICAgIGF0dHJpYnV0ZXNBcnJheS5yZWN5Y2xlKCk7Ci0KLSAgICAgICAgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIgPSAoTGF5b3V0SW5mbGF0ZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZSgKLSAgICAgICAgICAgICAgICBDb250ZXh0LkxBWU9VVF9JTkZMQVRFUl9TRVJWSUNFKTsKLSAgICAgICAgaW5mbGF0ZXIuaW5mbGF0ZShsYXlvdXRSZXNvdXJjZUlkLCB0aGlzLCB0cnVlKTsKLQotICAgICAgICAvLyBob3VyCi0gICAgICAgIG1Ib3VyU3Bpbm5lciA9IChOdW1iZXJQaWNrZXIpIGZpbmRWaWV3QnlJZChSLmlkLmhvdXIpOwotICAgICAgICBtSG91clNwaW5uZXIuc2V0T25WYWx1ZUNoYW5nZWRMaXN0ZW5lcihuZXcgTnVtYmVyUGlja2VyLk9uVmFsdWVDaGFuZ2VMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVmFsdWVDaGFuZ2UoTnVtYmVyUGlja2VyIHNwaW5uZXIsIGludCBvbGRWYWwsIGludCBuZXdWYWwpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVJbnB1dFN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpczI0SG91clZpZXcoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoKG9sZFZhbCA9PSBIT1VSU19JTl9IQUxGX0RBWSAtIDEgJiYgbmV3VmFsID09IEhPVVJTX0lOX0hBTEZfREFZKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChvbGRWYWwgPT0gSE9VUlNfSU5fSEFMRl9EQVkgJiYgbmV3VmFsID09IEhPVVJTX0lOX0hBTEZfREFZIC0gMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Jc0FtID0gIW1Jc0FtOwotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQW1QbUNvbnRyb2woKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvblRpbWVDaGFuZ2VkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBtSG91clNwaW5uZXJJbnB1dCA9IChFZGl0VGV4dCkgbUhvdXJTcGlubmVyLmZpbmRWaWV3QnlJZChSLmlkLm51bWJlcnBpY2tlcl9pbnB1dCk7Ci0gICAgICAgIG1Ib3VyU3Bpbm5lcklucHV0LnNldEltZU9wdGlvbnMoRWRpdG9ySW5mby5JTUVfQUNUSU9OX05FWFQpOwotCi0gICAgICAgIC8vIGRpdmlkZXIgKG9ubHkgZm9yIHRoZSBuZXcgd2lkZ2V0IHN0eWxlKQotICAgICAgICBtRGl2aWRlciA9IChUZXh0VmlldykgZmluZFZpZXdCeUlkKFIuaWQuZGl2aWRlcik7Ci0gICAgICAgIGlmIChtRGl2aWRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzZXREaXZpZGVyVGV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbWludXRlCi0gICAgICAgIG1NaW51dGVTcGlubmVyID0gKE51bWJlclBpY2tlcikgZmluZFZpZXdCeUlkKFIuaWQubWludXRlKTsKLSAgICAgICAgbU1pbnV0ZVNwaW5uZXIuc2V0TWluVmFsdWUoMCk7Ci0gICAgICAgIG1NaW51dGVTcGlubmVyLnNldE1heFZhbHVlKDU5KTsKLSAgICAgICAgbU1pbnV0ZVNwaW5uZXIuc2V0T25Mb25nUHJlc3NVcGRhdGVJbnRlcnZhbCgxMDApOwotICAgICAgICBtTWludXRlU3Bpbm5lci5zZXRGb3JtYXR0ZXIoTnVtYmVyUGlja2VyLmdldFR3b0RpZ2l0Rm9ybWF0dGVyKCkpOwotICAgICAgICBtTWludXRlU3Bpbm5lci5zZXRPblZhbHVlQ2hhbmdlZExpc3RlbmVyKG5ldyBOdW1iZXJQaWNrZXIuT25WYWx1ZUNoYW5nZUxpc3RlbmVyKCkgewotICAgICAgICAgICAgcHVibGljIHZvaWQgb25WYWx1ZUNoYW5nZShOdW1iZXJQaWNrZXIgc3Bpbm5lciwgaW50IG9sZFZhbCwgaW50IG5ld1ZhbCkgewotICAgICAgICAgICAgICAgIHVwZGF0ZUlucHV0U3RhdGUoKTsKLSAgICAgICAgICAgICAgICBpbnQgbWluVmFsdWUgPSBtTWludXRlU3Bpbm5lci5nZXRNaW5WYWx1ZSgpOwotICAgICAgICAgICAgICAgIGludCBtYXhWYWx1ZSA9IG1NaW51dGVTcGlubmVyLmdldE1heFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZFZhbCA9PSBtYXhWYWx1ZSAmJiBuZXdWYWwgPT0gbWluVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IG5ld0hvdXIgPSBtSG91clNwaW5uZXIuZ2V0VmFsdWUoKSArIDE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXMyNEhvdXJWaWV3KCkgJiYgbmV3SG91ciA9PSBIT1VSU19JTl9IQUxGX0RBWSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbUlzQW0gPSAhbUlzQW07Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBbVBtQ29udHJvbCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRWYWx1ZShuZXdIb3VyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9sZFZhbCA9PSBtaW5WYWx1ZSAmJiBuZXdWYWwgPT0gbWF4VmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IG5ld0hvdXIgPSBtSG91clNwaW5uZXIuZ2V0VmFsdWUoKSAtIDE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXMyNEhvdXJWaWV3KCkgJiYgbmV3SG91ciA9PSBIT1VSU19JTl9IQUxGX0RBWSAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Jc0FtID0gIW1Jc0FtOwotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQW1QbUNvbnRyb2woKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0VmFsdWUobmV3SG91cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9uVGltZUNoYW5nZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIG1NaW51dGVTcGlubmVySW5wdXQgPSAoRWRpdFRleHQpIG1NaW51dGVTcGlubmVyLmZpbmRWaWV3QnlJZChSLmlkLm51bWJlcnBpY2tlcl9pbnB1dCk7Ci0gICAgICAgIG1NaW51dGVTcGlubmVySW5wdXQuc2V0SW1lT3B0aW9ucyhFZGl0b3JJbmZvLklNRV9BQ1RJT05fTkVYVCk7Ci0KLSAgICAgICAgLyogR2V0IHRoZSBsb2NhbGl6ZWQgYW0vcG0gc3RyaW5ncyBhbmQgdXNlIHRoZW0gaW4gdGhlIHNwaW5uZXIgKi8KLSAgICAgICAgbUFtUG1TdHJpbmdzID0gbmV3IERhdGVGb3JtYXRTeW1ib2xzKCkuZ2V0QW1QbVN0cmluZ3MoKTsKLQotICAgICAgICAvLyBhbS9wbQotICAgICAgICBWaWV3IGFtUG1WaWV3ID0gZmluZFZpZXdCeUlkKFIuaWQuYW1QbSk7Ci0gICAgICAgIGlmIChhbVBtVmlldyBpbnN0YW5jZW9mIEJ1dHRvbikgewotICAgICAgICAgICAgbUFtUG1TcGlubmVyID0gbnVsbDsKLSAgICAgICAgICAgIG1BbVBtU3Bpbm5lcklucHV0ID0gbnVsbDsKLSAgICAgICAgICAgIG1BbVBtQnV0dG9uID0gKEJ1dHRvbikgYW1QbVZpZXc7Ci0gICAgICAgICAgICBtQW1QbUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgYnV0dG9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5yZXF1ZXN0Rm9jdXMoKTsKLSAgICAgICAgICAgICAgICAgICAgbUlzQW0gPSAhbUlzQW07Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUFtUG1Db250cm9sKCk7Ci0gICAgICAgICAgICAgICAgICAgIG9uVGltZUNoYW5nZWQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1BbVBtQnV0dG9uID0gbnVsbDsKLSAgICAgICAgICAgIG1BbVBtU3Bpbm5lciA9IChOdW1iZXJQaWNrZXIpIGFtUG1WaWV3OwotICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldE1pblZhbHVlKDApOwotICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldE1heFZhbHVlKDEpOwotICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldERpc3BsYXllZFZhbHVlcyhtQW1QbVN0cmluZ3MpOwotICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldE9uVmFsdWVDaGFuZ2VkTGlzdGVuZXIobmV3IE9uVmFsdWVDaGFuZ2VMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblZhbHVlQ2hhbmdlKE51bWJlclBpY2tlciBwaWNrZXIsIGludCBvbGRWYWwsIGludCBuZXdWYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlSW5wdXRTdGF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBwaWNrZXIucmVxdWVzdEZvY3VzKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1Jc0FtID0gIW1Jc0FtOwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVBbVBtQ29udHJvbCgpOwotICAgICAgICAgICAgICAgICAgICBvblRpbWVDaGFuZ2VkKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBtQW1QbVNwaW5uZXJJbnB1dCA9IChFZGl0VGV4dCkgbUFtUG1TcGlubmVyLmZpbmRWaWV3QnlJZChSLmlkLm51bWJlcnBpY2tlcl9pbnB1dCk7Ci0gICAgICAgICAgICBtQW1QbVNwaW5uZXJJbnB1dC5zZXRJbWVPcHRpb25zKEVkaXRvckluZm8uSU1FX0FDVElPTl9ET05FKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc0FtUG1BdFN0YXJ0KCkpIHsKLSAgICAgICAgICAgIC8vIE1vdmUgdGhlIGFtL3BtIHZpZXcgdG8gdGhlIGJlZ2lubmluZwotICAgICAgICAgICAgVmlld0dyb3VwIGFtUG1QYXJlbnQgPSAoVmlld0dyb3VwKSBmaW5kVmlld0J5SWQoUi5pZC50aW1lUGlja2VyTGF5b3V0KTsKLSAgICAgICAgICAgIGFtUG1QYXJlbnQucmVtb3ZlVmlldyhhbVBtVmlldyk7Ci0gICAgICAgICAgICBhbVBtUGFyZW50LmFkZFZpZXcoYW1QbVZpZXcsIDApOwotICAgICAgICAgICAgLy8gU3dhcCBsYXlvdXQgbWFyZ2lucyBpZiBuZWVkZWQuIFRoZXkgbWF5IGJlIG5vdCBzeW1tZXRyaWNhbCAoT2xkIFN0YW5kYXJkIFRoZW1lIGZvcgotICAgICAgICAgICAgLy8gZXhhbXBsZSBhbmQgbm90IGZvciBIb2xvIFRoZW1lKQotICAgICAgICAgICAgVmlld0dyb3VwLk1hcmdpbkxheW91dFBhcmFtcyBscCA9IChWaWV3R3JvdXAuTWFyZ2luTGF5b3V0UGFyYW1zKSBhbVBtVmlldy5nZXRMYXlvdXRQYXJhbXMoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBzdGFydE1hcmdpbiA9IGxwLmdldE1hcmdpblN0YXJ0KCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgZW5kTWFyZ2luID0gbHAuZ2V0TWFyZ2luRW5kKCk7Ci0gICAgICAgICAgICBpZiAoc3RhcnRNYXJnaW4gIT0gZW5kTWFyZ2luKSB7Ci0gICAgICAgICAgICAgICAgbHAuc2V0TWFyZ2luU3RhcnQoZW5kTWFyZ2luKTsKLSAgICAgICAgICAgICAgICBscC5zZXRNYXJnaW5FbmQoc3RhcnRNYXJnaW4pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZ2V0SG91ckZvcm1hdERhdGEoKTsKLQotICAgICAgICAvLyB1cGRhdGUgY29udHJvbHMgdG8gaW5pdGlhbCBzdGF0ZQotICAgICAgICB1cGRhdGVIb3VyQ29udHJvbCgpOwotICAgICAgICB1cGRhdGVNaW51dGVDb250cm9sKCk7Ci0gICAgICAgIHVwZGF0ZUFtUG1Db250cm9sKCk7Ci0KLSAgICAgICAgc2V0T25UaW1lQ2hhbmdlZExpc3RlbmVyKE5PX09QX0NIQU5HRV9MSVNURU5FUik7Ci0KLSAgICAgICAgLy8gc2V0IHRvIGN1cnJlbnQgdGltZQotICAgICAgICBzZXRDdXJyZW50SG91cihtVGVtcENhbGVuZGFyLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSkpOwotICAgICAgICBzZXRDdXJyZW50TWludXRlKG1UZW1wQ2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1JTlVURSkpOwotCi0gICAgICAgIGlmICghaXNFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIHNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gc2V0IHRoZSBjb250ZW50IGRlc2NyaXB0aW9ucwotICAgICAgICBzZXRDb250ZW50RGVzY3JpcHRpb25zKCk7Ci0KLSAgICAgICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIHRoaXMgdmlldyBpcyBpbXBvcnRhbnQgZm9yIGFjY2Vzc2liaWxpdHkuCi0gICAgICAgIGlmIChnZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KCkgPT0gSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX0FVVE8pIHsKLSAgICAgICAgICAgIHNldEltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkoSU1QT1JUQU5UX0ZPUl9BQ0NFU1NJQklMSVRZX1lFUyk7Ci0gICAgICAgIH0KKyAgICBwdWJsaWMgVGltZVBpY2tlcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBnZXRIb3VyRm9ybWF0RGF0YSgpIHsKLSAgICAgICAgZmluYWwgTG9jYWxlIGRlZmF1bHRMb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOwotICAgICAgICBmaW5hbCBTdHJpbmcgYmVzdERhdGVUaW1lUGF0dGVybiA9IERhdGVGb3JtYXQuZ2V0QmVzdERhdGVUaW1lUGF0dGVybihkZWZhdWx0TG9jYWxlLAotICAgICAgICAgICAgICAgIChtSXMyNEhvdXJWaWV3KSA/ICJIbSIgOiAiaG0iKTsKLSAgICAgICAgZmluYWwgaW50IGxlbmd0aFBhdHRlcm4gPSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLmxlbmd0aCgpOwotICAgICAgICBtSG91cldpdGhUd29EaWdpdCA9IGZhbHNlOwotICAgICAgICBjaGFyIGhvdXJGb3JtYXQgPSAnXDAnOwotICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmV0dXJuZWQgcGF0dGVybiBpcyBzaW5nbGUgb3IgZG91YmxlICdIJywgJ2gnLCAnSycsICdrJy4gV2UgYWxzbyBzYXZlCi0gICAgICAgIC8vIHRoZSBob3VyIGZvcm1hdCB0aGF0IHdlIGZvdW5kLgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aFBhdHRlcm47IGkrKykgewotICAgICAgICAgICAgZmluYWwgY2hhciBjID0gYmVzdERhdGVUaW1lUGF0dGVybi5jaGFyQXQoaSk7Ci0gICAgICAgICAgICBpZiAoYyA9PSAnSCcgfHwgYyA9PSAnaCcgfHwgYyA9PSAnSycgfHwgYyA9PSAnaycpIHsKLSAgICAgICAgICAgICAgICBtSG91ckZvcm1hdCA9IGM7Ci0gICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgbGVuZ3RoUGF0dGVybiAmJiBjID09IGJlc3REYXRlVGltZVBhdHRlcm4uY2hhckF0KGkgKyAxKSkgewotICAgICAgICAgICAgICAgICAgICBtSG91cldpdGhUd29EaWdpdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgcHVibGljIFRpbWVQaWNrZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworICAgICAgICBtQXR0cnMgPSBhdHRyczsKKyAgICAgICAgbURlZlN0eWxlQXR0ciA9IGRlZlN0eWxlQXR0cjsKKyAgICAgICAgbURlZlN0eWxlUmVzID0gZGVmU3R5bGVSZXM7CisKKyAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLCBSLnN0eWxlYWJsZS5UaW1lUGlja2VyLAorICAgICAgICAgICAgICAgIG1EZWZTdHlsZUF0dHIsIG1EZWZTdHlsZVJlcyk7CisKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBjb3JyZWN0IFVJIGRlbGVnYXRlLiBEZWZhdWx0IGlzIHRoZSBsZWdhY3kgb25lLgorICAgICAgICBmaW5hbCBib29sZWFuIGlzTGVnYWN5TW9kZSA9IHNob3VsZEZvcmNlTGVnYWN5TW9kZSgpID8KKyAgICAgICAgICAgICAgICB0cnVlIDogYS5nZXRCb29sZWFuKFIuc3R5bGVhYmxlLlRpbWVQaWNrZXJfbGVnYWN5TW9kZSwgdHJ1ZSk7CisgICAgICAgIHNldExlZ2FjeU1vZGUoaXNMZWdhY3lNb2RlKTsKICAgICB9CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gaXNBbVBtQXRTdGFydCgpIHsKLSAgICAgICAgZmluYWwgTG9jYWxlIGRlZmF1bHRMb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOwotICAgICAgICBmaW5hbCBTdHJpbmcgYmVzdERhdGVUaW1lUGF0dGVybiA9IERhdGVGb3JtYXQuZ2V0QmVzdERhdGVUaW1lUGF0dGVybihkZWZhdWx0TG9jYWxlLAotICAgICAgICAgICAgICAgICJobSIgLyogc2tlbGV0b24gKi8pOwotCi0gICAgICAgIHJldHVybiBiZXN0RGF0ZVRpbWVQYXR0ZXJuLnN0YXJ0c1dpdGgoImEiKTsKKyAgICBwcml2YXRlIGJvb2xlYW4gc2hvdWxkRm9yY2VMZWdhY3lNb2RlKCkgeworICAgICAgICBmaW5hbCBpbnQgdGFyZ2V0U2RrVmVyc2lvbiA9IGdldENvbnRleHQoKS5nZXRBcHBsaWNhdGlvbkluZm8oKS50YXJnZXRTZGtWZXJzaW9uOworICAgICAgICByZXR1cm4gdGFyZ2V0U2RrVmVyc2lvbiA8IEtJVEtBVDsKICAgICB9CiAKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgICBpZiAobUlzRW5hYmxlZCA9PSBlbmFibGVkKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc3VwZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICAgICAgbU1pbnV0ZVNwaW5uZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLSAgICAgICAgaWYgKG1EaXZpZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1EaXZpZGVyLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgbUhvdXJTcGlubmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0gICAgICAgIGlmIChtQW1QbVNwaW5uZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtQW1QbUJ1dHRvbi5zZXRFbmFibGVkKGVuYWJsZWQpOwotICAgICAgICB9Ci0gICAgICAgIG1Jc0VuYWJsZWQgPSBlbmFibGVkOworICAgIHByaXZhdGUgVGltZVBpY2tlckRlbGVnYXRlIGNyZWF0ZUxlZ2FjeVVJRGVsZWdhdGUoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsCisgICAgICAgICAgICBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBMZWdhY3lUaW1lUGlja2VyRGVsZWdhdGUodGhpcywgY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgIH0KIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKLSAgICAgICAgcmV0dXJuIG1Jc0VuYWJsZWQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25Db25maWd1cmF0aW9uQ2hhbmdlZChDb25maWd1cmF0aW9uIG5ld0NvbmZpZykgewotICAgICAgICBzdXBlci5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKG5ld0NvbmZpZyk7Ci0gICAgICAgIHNldEN1cnJlbnRMb2NhbGUobmV3Q29uZmlnLmxvY2FsZSk7CisgICAgcHJpdmF0ZSBUaW1lUGlja2VyRGVsZWdhdGUgY3JlYXRlTmV3VUlEZWxlZ2F0ZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywKKyAgICAgICAgICAgIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICByZXR1cm4gbmV3IGFuZHJvaWQud2lkZ2V0LlRpbWVQaWNrZXJEZWxlZ2F0ZSh0aGlzLCBjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLAorICAgICAgICAgICAgICAgIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGxvY2FsZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBsb2NhbGUgVGhlIGN1cnJlbnQgbG9jYWxlLgorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNldEN1cnJlbnRMb2NhbGUoTG9jYWxlIGxvY2FsZSkgewotICAgICAgICBpZiAobG9jYWxlLmVxdWFscyhtQ3VycmVudExvY2FsZSkpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtQ3VycmVudExvY2FsZSA9IGxvY2FsZTsKLSAgICAgICAgbVRlbXBDYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKGxvY2FsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBzYXZlIC8gcmVzdG9yZSBzdGF0ZSBvZiB0aW1lIHBpY2tlcgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFNhdmVkU3RhdGUgZXh0ZW5kcyBCYXNlU2F2ZWRTdGF0ZSB7Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUhvdXI7Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU1pbnV0ZTsKLQotICAgICAgICBwcml2YXRlIFNhdmVkU3RhdGUoUGFyY2VsYWJsZSBzdXBlclN0YXRlLCBpbnQgaG91ciwgaW50IG1pbnV0ZSkgewotICAgICAgICAgICAgc3VwZXIoc3VwZXJTdGF0ZSk7Ci0gICAgICAgICAgICBtSG91ciA9IGhvdXI7Ci0gICAgICAgICAgICBtTWludXRlID0gbWludXRlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTYXZlZFN0YXRlKFBhcmNlbCBpbikgewotICAgICAgICAgICAgc3VwZXIoaW4pOwotICAgICAgICAgICAgbUhvdXIgPSBpbi5yZWFkSW50KCk7Ci0gICAgICAgICAgICBtTWludXRlID0gaW4ucmVhZEludCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCBnZXRIb3VyKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Ib3VyOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCBnZXRNaW51dGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU1pbnV0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBkZXN0LCBpbnQgZmxhZ3MpIHsKLSAgICAgICAgICAgIHN1cGVyLndyaXRlVG9QYXJjZWwoZGVzdCwgZmxhZ3MpOwotICAgICAgICAgICAgZGVzdC53cml0ZUludChtSG91cik7Ci0gICAgICAgICAgICBkZXN0LndyaXRlSW50KG1NaW51dGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoeyJ1bnVzZWQiLCAiaGlkaW5nIn0pCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFNhdmVkU3RhdGU+IENSRUFUT1IgPSBuZXcgQ3JlYXRvcjxTYXZlZFN0YXRlPigpIHsKLSAgICAgICAgICAgIHB1YmxpYyBTYXZlZFN0YXRlIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIGluKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTYXZlZFN0YXRlKGluKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIFNhdmVkU3RhdGVbXSBuZXdBcnJheShpbnQgc2l6ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2F2ZWRTdGF0ZVtzaXplXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgUGFyY2VsYWJsZSBvblNhdmVJbnN0YW5jZVN0YXRlKCkgewotICAgICAgICBQYXJjZWxhYmxlIHN1cGVyU3RhdGUgPSBzdXBlci5vblNhdmVJbnN0YW5jZVN0YXRlKCk7Ci0gICAgICAgIHJldHVybiBuZXcgU2F2ZWRTdGF0ZShzdXBlclN0YXRlLCBnZXRDdXJyZW50SG91cigpLCBnZXRDdXJyZW50TWludXRlKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdG9yZUluc3RhbmNlU3RhdGUoUGFyY2VsYWJsZSBzdGF0ZSkgewotICAgICAgICBTYXZlZFN0YXRlIHNzID0gKFNhdmVkU3RhdGUpIHN0YXRlOwotICAgICAgICBzdXBlci5vblJlc3RvcmVJbnN0YW5jZVN0YXRlKHNzLmdldFN1cGVyU3RhdGUoKSk7Ci0gICAgICAgIHNldEN1cnJlbnRIb3VyKHNzLmdldEhvdXIoKSk7Ci0gICAgICAgIHNldEN1cnJlbnRNaW51dGUoc3MuZ2V0TWludXRlKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldCB0aGUgY2FsbGJhY2sgdGhhdCBpbmRpY2F0ZXMgdGhlIHRpbWUgaGFzIGJlZW4gYWRqdXN0ZWQgYnkgdGhlIHVzZXIuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gb25UaW1lQ2hhbmdlZExpc3RlbmVyIHRoZSBjYWxsYmFjaywgc2hvdWxkIG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE9uVGltZUNoYW5nZWRMaXN0ZW5lcihPblRpbWVDaGFuZ2VkTGlzdGVuZXIgb25UaW1lQ2hhbmdlZExpc3RlbmVyKSB7Ci0gICAgICAgIG1PblRpbWVDaGFuZ2VkTGlzdGVuZXIgPSBvblRpbWVDaGFuZ2VkTGlzdGVuZXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiBUaGUgY3VycmVudCBob3VyIGluIHRoZSByYW5nZSAoMC0yMykuCi0gICAgICovCi0gICAgcHVibGljIEludGVnZXIgZ2V0Q3VycmVudEhvdXIoKSB7Ci0gICAgICAgIGludCBjdXJyZW50SG91ciA9IG1Ib3VyU3Bpbm5lci5nZXRWYWx1ZSgpOwotICAgICAgICBpZiAoaXMyNEhvdXJWaWV3KCkpIHsKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50SG91cjsKLSAgICAgICAgfSBlbHNlIGlmIChtSXNBbSkgewotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRIb3VyICUgSE9VUlNfSU5fSEFMRl9EQVk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gKGN1cnJlbnRIb3VyICUgSE9VUlNfSU5fSEFMRl9EQVkpICsgSE9VUlNfSU5fSEFMRl9EQVk7Ci0gICAgICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRMZWdhY3lNb2RlKGJvb2xlYW4gaXNMZWdhY3lNb2RlKSB7CisgICAgICAgIHJlbW92ZUFsbFZpZXdzSW5MYXlvdXQoKTsKKyAgICAgICAgbURlbGVnYXRlID0gaXNMZWdhY3lNb2RlID8KKyAgICAgICAgICAgICAgICBjcmVhdGVMZWdhY3lVSURlbGVnYXRlKG1Db250ZXh0LCBtQXR0cnMsIG1EZWZTdHlsZUF0dHIsIG1EZWZTdHlsZVJlcykgOgorICAgICAgICAgICAgICAgIGNyZWF0ZU5ld1VJRGVsZWdhdGUobUNvbnRleHQsIG1BdHRycywgbURlZlN0eWxlQXR0ciwgbURlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGN1cnJlbnQgaG91ci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50SG91cihJbnRlZ2VyIGN1cnJlbnRIb3VyKSB7Ci0gICAgICAgIHNldEN1cnJlbnRIb3VyKGN1cnJlbnRIb3VyLCB0cnVlKTsKKyAgICAgICAgbURlbGVnYXRlLnNldEN1cnJlbnRIb3VyKGN1cnJlbnRIb3VyKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgc2V0Q3VycmVudEhvdXIoSW50ZWdlciBjdXJyZW50SG91ciwgYm9vbGVhbiBub3RpZnlUaW1lQ2hhbmdlZCkgewotICAgICAgICAvLyB3aHkgd2FzIEludGVnZXIgdXNlZCBpbiB0aGUgZmlyc3QgcGxhY2U/Ci0gICAgICAgIGlmIChjdXJyZW50SG91ciA9PSBudWxsIHx8IGN1cnJlbnRIb3VyID09IGdldEN1cnJlbnRIb3VyKCkpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWlzMjRIb3VyVmlldygpKSB7Ci0gICAgICAgICAgICAvLyBjb252ZXJ0IFswLDIzXSBvcmRpbmFsIHRvIHdhbGwgY2xvY2sgZGlzcGxheQotICAgICAgICAgICAgaWYgKGN1cnJlbnRIb3VyID49IEhPVVJTX0lOX0hBTEZfREFZKSB7Ci0gICAgICAgICAgICAgICAgbUlzQW0gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudEhvdXIgPiBIT1VSU19JTl9IQUxGX0RBWSkgewotICAgICAgICAgICAgICAgICAgICBjdXJyZW50SG91ciA9IGN1cnJlbnRIb3VyIC0gSE9VUlNfSU5fSEFMRl9EQVk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtSXNBbSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRIb3VyID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudEhvdXIgPSBIT1VSU19JTl9IQUxGX0RBWTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1cGRhdGVBbVBtQ29udHJvbCgpOwotICAgICAgICB9Ci0gICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRWYWx1ZShjdXJyZW50SG91cik7Ci0gICAgICAgIGlmIChub3RpZnlUaW1lQ2hhbmdlZCkgewotICAgICAgICAgICAgb25UaW1lQ2hhbmdlZCgpOwotICAgICAgICB9CisgICAgLyoqCisgICAgICogQHJldHVybiBUaGUgY3VycmVudCBob3VyIGluIHRoZSByYW5nZSAoMC0yMykuCisgICAgICovCisgICAgcHVibGljIEludGVnZXIgZ2V0Q3VycmVudEhvdXIoKSB7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0Q3VycmVudEhvdXIoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGN1cnJlbnQgbWludXRlICgwLTU5KS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50TWludXRlKEludGVnZXIgY3VycmVudE1pbnV0ZSkgeworICAgICAgICBtRGVsZWdhdGUuc2V0Q3VycmVudE1pbnV0ZShjdXJyZW50TWludXRlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IG1pbnV0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgSW50ZWdlciBnZXRDdXJyZW50TWludXRlKCkgeworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldEN1cnJlbnRNaW51dGUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQ3OCwyMjMgKzE1NywxNzQgQEAKICAgICAgKiBAcGFyYW0gaXMyNEhvdXJWaWV3IFRydWUgPSAyNCBob3VyIG1vZGUuIEZhbHNlID0gQU0vUE0uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0SXMyNEhvdXJWaWV3KEJvb2xlYW4gaXMyNEhvdXJWaWV3KSB7Ci0gICAgICAgIGlmIChtSXMyNEhvdXJWaWV3ID09IGlzMjRIb3VyVmlldykgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIGNhY2hlIHRoZSBjdXJyZW50IGhvdXIgc2luY2Ugc3Bpbm5lciByYW5nZSBjaGFuZ2VzIGFuZCBCRUZPUkUgY2hhbmdpbmcgbUlzMjRIb3VyVmlldyEhCi0gICAgICAgIGludCBjdXJyZW50SG91ciA9IGdldEN1cnJlbnRIb3VyKCk7Ci0gICAgICAgIC8vIE9yZGVyIGlzIGltcG9ydGFudCBoZXJlLgotICAgICAgICBtSXMyNEhvdXJWaWV3ID0gaXMyNEhvdXJWaWV3OwotICAgICAgICBnZXRIb3VyRm9ybWF0RGF0YSgpOwotICAgICAgICB1cGRhdGVIb3VyQ29udHJvbCgpOwotICAgICAgICAvLyBzZXQgdmFsdWUgYWZ0ZXIgc3Bpbm5lciByYW5nZSBpcyB1cGRhdGVkIC0gYmUgYXdhcmUgdGhhdCBiZWNhdXNlIG1JczI0SG91clZpZXcgaGFzCi0gICAgICAgIC8vIGNoYW5nZWQgdGhlbiBnZXRDdXJyZW50SG91cigpIGlzIG5vdCBlcXVhbCB0byB0aGUgY3VycmVudEhvdXIgd2UgY2FjaGVkIGJlZm9yZSBzbwotICAgICAgICAvLyBleHBsaWNpdGx5IGFzayBmb3IgKm5vdCogcHJvcGFnYXRpbmcgYW55IG9uVGltZUNoYW5nZWQoKQotICAgICAgICBzZXRDdXJyZW50SG91cihjdXJyZW50SG91ciwgZmFsc2UgLyogbm8gb25UaW1lQ2hhbmdlZCgpICovKTsKLSAgICAgICAgdXBkYXRlTWludXRlQ29udHJvbCgpOwotICAgICAgICB1cGRhdGVBbVBtQ29udHJvbCgpOworICAgICAgICBtRGVsZWdhdGUuc2V0SXMyNEhvdXJWaWV3KGlzMjRIb3VyVmlldyk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgaXMgaW4gMjQgaG91ciB2aWV3IGVsc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXMyNEhvdXJWaWV3KCkgewotICAgICAgICByZXR1cm4gbUlzMjRIb3VyVmlldzsKKyAgICAgICAgcmV0dXJuIG1EZWxlZ2F0ZS5pczI0SG91clZpZXcoKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IG1pbnV0ZS4KKyAgICAgKiBTZXQgdGhlIGNhbGxiYWNrIHRoYXQgaW5kaWNhdGVzIHRoZSB0aW1lIGhhcyBiZWVuIGFkanVzdGVkIGJ5IHRoZSB1c2VyLgorICAgICAqCisgICAgICogQHBhcmFtIG9uVGltZUNoYW5nZWRMaXN0ZW5lciB0aGUgY2FsbGJhY2ssIHNob3VsZCBub3QgYmUgbnVsbC4KICAgICAgKi8KLSAgICBwdWJsaWMgSW50ZWdlciBnZXRDdXJyZW50TWludXRlKCkgewotICAgICAgICByZXR1cm4gbU1pbnV0ZVNwaW5uZXIuZ2V0VmFsdWUoKTsKKyAgICBwdWJsaWMgdm9pZCBzZXRPblRpbWVDaGFuZ2VkTGlzdGVuZXIoT25UaW1lQ2hhbmdlZExpc3RlbmVyIG9uVGltZUNoYW5nZWRMaXN0ZW5lcikgeworICAgICAgICBtRGVsZWdhdGUuc2V0T25UaW1lQ2hhbmdlZExpc3RlbmVyKG9uVGltZUNoYW5nZWRMaXN0ZW5lcik7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBjdXJyZW50IG1pbnV0ZSAoMC01OSkuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Q3VycmVudE1pbnV0ZShJbnRlZ2VyIGN1cnJlbnRNaW51dGUpIHsKLSAgICAgICAgaWYgKGN1cnJlbnRNaW51dGUgPT0gZ2V0Q3VycmVudE1pbnV0ZSgpKSB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgaWYgKG1EZWxlZ2F0ZS5pc0VuYWJsZWQoKSA9PSBlbmFibGVkKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbU1pbnV0ZVNwaW5uZXIuc2V0VmFsdWUoY3VycmVudE1pbnV0ZSk7Ci0gICAgICAgIG9uVGltZUNoYW5nZWQoKTsKKyAgICAgICAgc3VwZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgbURlbGVnYXRlLnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmlzRW5hYmxlZCgpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIFRoZSB0aW1lIHNlcGFyYXRvciBpcyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIENMRFIgYW5kIGNhbm5vdCBiZSBzdXBwb3NlZCB0byBiZSAiOiIuCi0gICAgICoKLSAgICAgKiBTZWUgaHR0cDovL3VuaWNvZGUub3JnL2NsZHIvdHJhYy9icm93c2VyL3RydW5rL2NvbW1vbi9tYWluCi0gICAgICoKLSAgICAgKiBXZSBwYXNzIHRoZSBjb3JyZWN0ICJza2VsZXRvbiIgZGVwZW5kaW5nIG9uIDEyIG9yIDI0IGhvdXJzIHZpZXcgYW5kIHRoZW4gZXh0cmFjdCB0aGUKLSAgICAgKiBzZXBhcmF0b3IgYXMgdGhlIGNoYXJhY3RlciB3aGljaCBpcyBqdXN0IGFmdGVyIHRoZSBob3VyIG1hcmtlciBpbiB0aGUgcmV0dXJuZWQgcGF0dGVybi4KKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZXREaXZpZGVyVGV4dCgpIHsKLSAgICAgICAgZmluYWwgTG9jYWxlIGRlZmF1bHRMb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOwotICAgICAgICBmaW5hbCBTdHJpbmcgc2tlbGV0b24gPSAobUlzMjRIb3VyVmlldykgPyAiSG0iIDogImhtIjsKLSAgICAgICAgZmluYWwgU3RyaW5nIGJlc3REYXRlVGltZVBhdHRlcm4gPSBEYXRlRm9ybWF0LmdldEJlc3REYXRlVGltZVBhdHRlcm4oZGVmYXVsdExvY2FsZSwKLSAgICAgICAgICAgICAgICBza2VsZXRvbik7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzZXBhcmF0b3JUZXh0OwotICAgICAgICBpbnQgaG91ckluZGV4ID0gYmVzdERhdGVUaW1lUGF0dGVybi5sYXN0SW5kZXhPZignSCcpOwotICAgICAgICBpZiAoaG91ckluZGV4ID09IC0xKSB7Ci0gICAgICAgICAgICBob3VySW5kZXggPSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLmxhc3RJbmRleE9mKCdoJyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhvdXJJbmRleCA9PSAtMSkgewotICAgICAgICAgICAgLy8gRGVmYXVsdCBjYXNlCi0gICAgICAgICAgICBzZXBhcmF0b3JUZXh0ID0gIjoiOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW50IG1pbnV0ZUluZGV4ID0gYmVzdERhdGVUaW1lUGF0dGVybi5pbmRleE9mKCdtJywgaG91ckluZGV4ICsgMSk7Ci0gICAgICAgICAgICBpZiAgKG1pbnV0ZUluZGV4ID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgc2VwYXJhdG9yVGV4dCA9IENoYXJhY3Rlci50b1N0cmluZyhiZXN0RGF0ZVRpbWVQYXR0ZXJuLmNoYXJBdChob3VySW5kZXggKyAxKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNlcGFyYXRvclRleHQgPSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLnN1YnN0cmluZyhob3VySW5kZXggKyAxLCBtaW51dGVJbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbURpdmlkZXIuc2V0VGV4dChzZXBhcmF0b3JUZXh0KTsKKyAgICBwdWJsaWMgdm9pZCBzZXRTaG93RG9uZUJ1dHRvbihib29sZWFuIHNob3dEb25lQnV0dG9uKSB7CisgICAgICAgIG1EZWxlZ2F0ZS5zZXRTaG93RG9uZUJ1dHRvbihzaG93RG9uZUJ1dHRvbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXREaXNtaXNzQ2FsbGJhY2soVGltZVBpY2tlckRpc21pc3NDYWxsYmFjayBjYWxsYmFjaykgeworICAgICAgICBtRGVsZWdhdGUuc2V0RGlzbWlzc0NhbGxiYWNrKGNhbGxiYWNrKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGdldEJhc2VsaW5lKCkgewotICAgICAgICByZXR1cm4gbUhvdXJTcGlubmVyLmdldEJhc2VsaW5lKCk7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZ2V0QmFzZWxpbmUoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKSB7CisgICAgICAgIHN1cGVyLm9uQ29uZmlndXJhdGlvbkNoYW5nZWQobmV3Q29uZmlnKTsKKyAgICAgICAgbURlbGVnYXRlLm9uQ29uZmlndXJhdGlvbkNoYW5nZWQobmV3Q29uZmlnKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgUGFyY2VsYWJsZSBvblNhdmVJbnN0YW5jZVN0YXRlKCkgeworICAgICAgICBQYXJjZWxhYmxlIHN1cGVyU3RhdGUgPSBzdXBlci5vblNhdmVJbnN0YW5jZVN0YXRlKCk7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUub25TYXZlSW5zdGFuY2VTdGF0ZShzdXBlclN0YXRlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblJlc3RvcmVJbnN0YW5jZVN0YXRlKFBhcmNlbGFibGUgc3RhdGUpIHsKKyAgICAgICAgQmFzZVNhdmVkU3RhdGUgc3MgPSAoQmFzZVNhdmVkU3RhdGUpIHN0YXRlOworICAgICAgICBzdXBlci5vblJlc3RvcmVJbnN0YW5jZVN0YXRlKHNzLmdldFN1cGVyU3RhdGUoKSk7CisgICAgICAgIG1EZWxlZ2F0ZS5vblJlc3RvcmVJbnN0YW5jZVN0YXRlKHNzKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBkaXNwYXRjaFBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgewotICAgICAgICBvblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuZGlzcGF0Y2hQb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25Qb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKICAgICAgICAgc3VwZXIub25Qb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7Ci0KLSAgICAgICAgaW50IGZsYWdzID0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX1RJTUU7Ci0gICAgICAgIGlmIChtSXMyNEhvdXJWaWV3KSB7Ci0gICAgICAgICAgICBmbGFncyB8PSBEYXRlVXRpbHMuRk9STUFUXzI0SE9VUjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZsYWdzIHw9IERhdGVVdGlscy5GT1JNQVRfMTJIT1VSOwotICAgICAgICB9Ci0gICAgICAgIG1UZW1wQ2FsZW5kYXIuc2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZLCBnZXRDdXJyZW50SG91cigpKTsKLSAgICAgICAgbVRlbXBDYWxlbmRhci5zZXQoQ2FsZW5kYXIuTUlOVVRFLCBnZXRDdXJyZW50TWludXRlKCkpOwotICAgICAgICBTdHJpbmcgc2VsZWN0ZWREYXRlVXR0ZXJhbmNlID0gRGF0ZVV0aWxzLmZvcm1hdERhdGVUaW1lKG1Db250ZXh0LAotICAgICAgICAgICAgICAgIG1UZW1wQ2FsZW5kYXIuZ2V0VGltZUluTWlsbGlzKCksIGZsYWdzKTsKLSAgICAgICAgZXZlbnQuZ2V0VGV4dCgpLmFkZChzZWxlY3RlZERhdGVVdHRlcmFuY2UpOworICAgICAgICBtRGVsZWdhdGUub25Qb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgewogICAgICAgICBzdXBlci5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5RXZlbnQoZXZlbnQpOwotICAgICAgICBldmVudC5zZXRDbGFzc05hbWUoVGltZVBpY2tlci5jbGFzcy5nZXROYW1lKCkpOworICAgICAgICBtRGVsZWdhdGUub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGluZm8pIHsKICAgICAgICAgc3VwZXIub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKGluZm8pOwotICAgICAgICBpbmZvLnNldENsYXNzTmFtZShUaW1lUGlja2VyLmNsYXNzLmdldE5hbWUoKSk7CisgICAgICAgIG1EZWxlZ2F0ZS5vbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oaW5mbyk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUhvdXJDb250cm9sKCkgewotICAgICAgICBpZiAoaXMyNEhvdXJWaWV3KCkpIHsKLSAgICAgICAgICAgIC8vICdrJyBtZWFucyAxLTI0IGhvdXIKLSAgICAgICAgICAgIGlmIChtSG91ckZvcm1hdCA9PSAnaycpIHsKLSAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0TWluVmFsdWUoMSk7Ci0gICAgICAgICAgICAgICAgbUhvdXJTcGlubmVyLnNldE1heFZhbHVlKDI0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbUhvdXJTcGlubmVyLnNldE1pblZhbHVlKDApOwotICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRNYXhWYWx1ZSgyMyk7CisgICAgLyoqCisgICAgICogQSBkZWxlZ2F0ZSBpbnRlcmZhY2UgdGhhdCBkZWZpbmVkIHRoZSBwdWJsaWMgQVBJIG9mIHRoZSBUaW1lUGlja2VyLiBBbGxvd3MgZGlmZmVyZW50CisgICAgICogVGltZVBpY2tlciBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgd291bGQgbmVlZCB0byBiZSBpbXBsZW1lbnRlZCBieSB0aGUgVGltZVBpY2tlciBkZWxlZ2F0ZXMKKyAgICAgKiBmb3IgdGhlIHJlYWwgYmVoYXZpb3IuCisgICAgICovCisgICAgaW50ZXJmYWNlIFRpbWVQaWNrZXJEZWxlZ2F0ZSB7CisgICAgICAgIHZvaWQgc2V0Q3VycmVudEhvdXIoSW50ZWdlciBjdXJyZW50SG91cik7CisgICAgICAgIEludGVnZXIgZ2V0Q3VycmVudEhvdXIoKTsKKworICAgICAgICB2b2lkIHNldEN1cnJlbnRNaW51dGUoSW50ZWdlciBjdXJyZW50TWludXRlKTsKKyAgICAgICAgSW50ZWdlciBnZXRDdXJyZW50TWludXRlKCk7CisKKyAgICAgICAgdm9pZCBzZXRJczI0SG91clZpZXcoQm9vbGVhbiBpczI0SG91clZpZXcpOworICAgICAgICBib29sZWFuIGlzMjRIb3VyVmlldygpOworCisgICAgICAgIHZvaWQgc2V0T25UaW1lQ2hhbmdlZExpc3RlbmVyKE9uVGltZUNoYW5nZWRMaXN0ZW5lciBvblRpbWVDaGFuZ2VkTGlzdGVuZXIpOworCisgICAgICAgIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpOworICAgICAgICBib29sZWFuIGlzRW5hYmxlZCgpOworCisgICAgICAgIHZvaWQgc2V0U2hvd0RvbmVCdXR0b24oYm9vbGVhbiBzaG93RG9uZUJ1dHRvbik7CisgICAgICAgIHZvaWQgc2V0RGlzbWlzc0NhbGxiYWNrKFRpbWVQaWNrZXJEaXNtaXNzQ2FsbGJhY2sgY2FsbGJhY2spOworCisgICAgICAgIGludCBnZXRCYXNlbGluZSgpOworCisgICAgICAgIHZvaWQgb25Db25maWd1cmF0aW9uQ2hhbmdlZChDb25maWd1cmF0aW9uIG5ld0NvbmZpZyk7CisKKyAgICAgICAgUGFyY2VsYWJsZSBvblNhdmVJbnN0YW5jZVN0YXRlKFBhcmNlbGFibGUgc3VwZXJTdGF0ZSk7CisgICAgICAgIHZvaWQgb25SZXN0b3JlSW5zdGFuY2VTdGF0ZShQYXJjZWxhYmxlIHN0YXRlKTsKKworICAgICAgICBib29sZWFuIGRpc3BhdGNoUG9wdWxhdGVBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KTsKKyAgICAgICAgdm9pZCBvblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCk7CisgICAgICAgIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCk7CisgICAgICAgIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eU5vZGVJbmZvKEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBpbmZvKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBIGNhbGxiYWNrIGludGVyZmFjZSBmb3IgZGlzbWlzc2luZyB0aGUgVGltZVBpY2tlciB3aGVuIGluY2x1ZGVkIGludG8gYSBEaWFsb2cKKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgVGltZVBpY2tlckRpc21pc3NDYWxsYmFjayB7CisgICAgICAgIHZvaWQgZGlzbWlzcyhUaW1lUGlja2VyIHZpZXcsIGJvb2xlYW4gaXNDYW5jZWwsIGludCBob3VyT2ZEYXksIGludCBtaW51dGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFuIGFic3RyYWN0IGNsYXNzIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGEgc3RhcnQgZm9yIFRpbWVQaWNrZXIgaW1wbGVtZW50YXRpb25zCisgICAgICovCisgICAgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIEFic3RyYWN0VGltZVBpY2tlckRlbGVnYXRlIGltcGxlbWVudHMgVGltZVBpY2tlckRlbGVnYXRlIHsKKyAgICAgICAgLy8gVGhlIGRlbGVnYXRvcgorICAgICAgICBwcm90ZWN0ZWQgVGltZVBpY2tlciBtRGVsZWdhdG9yOworCisgICAgICAgIC8vIFRoZSBjb250ZXh0CisgICAgICAgIHByb3RlY3RlZCBDb250ZXh0IG1Db250ZXh0OworCisgICAgICAgIC8vIFRoZSBjdXJyZW50IGxvY2FsZQorICAgICAgICBwcm90ZWN0ZWQgTG9jYWxlIG1DdXJyZW50TG9jYWxlOworCisgICAgICAgIC8vIENhbGxiYWNrcworICAgICAgICBwcm90ZWN0ZWQgIE9uVGltZUNoYW5nZWRMaXN0ZW5lciBtT25UaW1lQ2hhbmdlZExpc3RlbmVyOworCisgICAgICAgIHB1YmxpYyBBYnN0cmFjdFRpbWVQaWNrZXJEZWxlZ2F0ZShUaW1lUGlja2VyIGRlbGVnYXRvciwgQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgICAgICBtRGVsZWdhdG9yID0gZGVsZWdhdG9yOworICAgICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworCisgICAgICAgICAgICAvLyBpbml0aWFsaXphdGlvbiBiYXNlZCBvbiBsb2NhbGUKKyAgICAgICAgICAgIHNldEN1cnJlbnRMb2NhbGUoTG9jYWxlLmdldERlZmF1bHQoKSk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50TG9jYWxlKExvY2FsZSBsb2NhbGUpIHsKKyAgICAgICAgICAgIGlmIChsb2NhbGUuZXF1YWxzKG1DdXJyZW50TG9jYWxlKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vICdLJyBtZWFucyAwLTExIGhvdXIKLSAgICAgICAgICAgIGlmIChtSG91ckZvcm1hdCA9PSAnSycpIHsKLSAgICAgICAgICAgICAgICBtSG91clNwaW5uZXIuc2V0TWluVmFsdWUoMCk7Ci0gICAgICAgICAgICAgICAgbUhvdXJTcGlubmVyLnNldE1heFZhbHVlKDExKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbUhvdXJTcGlubmVyLnNldE1pblZhbHVlKDEpOwotICAgICAgICAgICAgICAgIG1Ib3VyU3Bpbm5lci5zZXRNYXhWYWx1ZSgxMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbUhvdXJTcGlubmVyLnNldEZvcm1hdHRlcihtSG91cldpdGhUd29EaWdpdCA/IE51bWJlclBpY2tlci5nZXRUd29EaWdpdEZvcm1hdHRlcigpIDogbnVsbCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZU1pbnV0ZUNvbnRyb2woKSB7Ci0gICAgICAgIGlmIChpczI0SG91clZpZXcoKSkgewotICAgICAgICAgICAgbU1pbnV0ZVNwaW5uZXJJbnB1dC5zZXRJbWVPcHRpb25zKEVkaXRvckluZm8uSU1FX0FDVElPTl9ET05FKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1NaW51dGVTcGlubmVySW5wdXQuc2V0SW1lT3B0aW9ucyhFZGl0b3JJbmZvLklNRV9BQ1RJT05fTkVYVCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlQW1QbUNvbnRyb2woKSB7Ci0gICAgICAgIGlmIChpczI0SG91clZpZXcoKSkgewotICAgICAgICAgICAgaWYgKG1BbVBtU3Bpbm5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbUFtUG1CdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW50IGluZGV4ID0gbUlzQW0gPyBDYWxlbmRhci5BTSA6IENhbGVuZGFyLlBNOwotICAgICAgICAgICAgaWYgKG1BbVBtU3Bpbm5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUFtUG1TcGlubmVyLnNldFZhbHVlKGluZGV4KTsKLSAgICAgICAgICAgICAgICBtQW1QbVNwaW5uZXIuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtQW1QbUJ1dHRvbi5zZXRUZXh0KG1BbVBtU3RyaW5nc1tpbmRleF0pOwotICAgICAgICAgICAgICAgIG1BbVBtQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzZW5kQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1ZJRVdfU0VMRUNURUQpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBvblRpbWVDaGFuZ2VkKCkgewotICAgICAgICBzZW5kQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudC5UWVBFX1ZJRVdfU0VMRUNURUQpOwotICAgICAgICBpZiAobU9uVGltZUNoYW5nZWRMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT25UaW1lQ2hhbmdlZExpc3RlbmVyLm9uVGltZUNoYW5nZWQodGhpcywgZ2V0Q3VycmVudEhvdXIoKSwgZ2V0Q3VycmVudE1pbnV0ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXRDb250ZW50RGVzY3JpcHRpb25zKCkgewotICAgICAgICAvLyBNaW51dGUKLSAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1NaW51dGVTcGlubmVyLCBSLmlkLmluY3JlbWVudCwKLSAgICAgICAgICAgICAgICBSLnN0cmluZy50aW1lX3BpY2tlcl9pbmNyZW1lbnRfbWludXRlX2J1dHRvbik7Ci0gICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtTWludXRlU3Bpbm5lciwgUi5pZC5kZWNyZW1lbnQsCi0gICAgICAgICAgICAgICAgUi5zdHJpbmcudGltZV9waWNrZXJfZGVjcmVtZW50X21pbnV0ZV9idXR0b24pOwotICAgICAgICAvLyBIb3VyCi0gICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtSG91clNwaW5uZXIsIFIuaWQuaW5jcmVtZW50LAotICAgICAgICAgICAgICAgIFIuc3RyaW5nLnRpbWVfcGlja2VyX2luY3JlbWVudF9ob3VyX2J1dHRvbik7Ci0gICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtSG91clNwaW5uZXIsIFIuaWQuZGVjcmVtZW50LAotICAgICAgICAgICAgICAgIFIuc3RyaW5nLnRpbWVfcGlja2VyX2RlY3JlbWVudF9ob3VyX2J1dHRvbik7Ci0gICAgICAgIC8vIEFNL1BNCi0gICAgICAgIGlmIChtQW1QbVNwaW5uZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKG1BbVBtU3Bpbm5lciwgUi5pZC5pbmNyZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLnRpbWVfcGlja2VyX2luY3JlbWVudF9zZXRfcG1fYnV0dG9uKTsKLSAgICAgICAgICAgIHRyeVNldENvbnRlbnREZXNjcmlwdGlvbihtQW1QbVNwaW5uZXIsIFIuaWQuZGVjcmVtZW50LAotICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy50aW1lX3BpY2tlcl9kZWNyZW1lbnRfc2V0X2FtX2J1dHRvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdHJ5U2V0Q29udGVudERlc2NyaXB0aW9uKFZpZXcgcm9vdCwgaW50IHZpZXdJZCwgaW50IGNvbnREZXNjUmVzSWQpIHsKLSAgICAgICAgVmlldyB0YXJnZXQgPSByb290LmZpbmRWaWV3QnlJZCh2aWV3SWQpOwotICAgICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRhcmdldC5zZXRDb250ZW50RGVzY3JpcHRpb24obUNvbnRleHQuZ2V0U3RyaW5nKGNvbnREZXNjUmVzSWQpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVJbnB1dFN0YXRlKCkgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSBhbmQgdGhlIElNRSBpcyBhY3RpdmUKLSAgICAgICAgLy8gZm9yIG9uZSBvZiB0aGUgaW5wdXRzIGlmIHRoaXMgd2lkZ2V0LCB0aGUgSU1FIGlzIGNsb3NlZC4gSWYgdGhlIHVzZXIKLSAgICAgICAgLy8gY2hhbmdlZCB0aGUgdmFsdWUgdmlhIHRoZSBJTUUgYW5kIHRoZXJlIGlzIGEgbmV4dCBpbnB1dCB0aGUgSU1FIHdpbGwKLSAgICAgICAgLy8gYmUgc2hvd24sIG90aGVyd2lzZSB0aGUgdXNlciBjaG9zZSBhbm90aGVyIG1lYW5zIG9mIGNoYW5naW5nIHRoZQotICAgICAgICAvLyB2YWx1ZSBhbmQgaGF2aW5nIHRoZSBJTUUgdXAgbWFrZXMgbm8gc2Vuc2UuCi0gICAgICAgIElucHV0TWV0aG9kTWFuYWdlciBpbnB1dE1ldGhvZE1hbmFnZXIgPSBJbnB1dE1ldGhvZE1hbmFnZXIucGVla0luc3RhbmNlKCk7Ci0gICAgICAgIGlmIChpbnB1dE1ldGhvZE1hbmFnZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKGlucHV0TWV0aG9kTWFuYWdlci5pc0FjdGl2ZShtSG91clNwaW5uZXJJbnB1dCkpIHsKLSAgICAgICAgICAgICAgICBtSG91clNwaW5uZXJJbnB1dC5jbGVhckZvY3VzKCk7Ci0gICAgICAgICAgICAgICAgaW5wdXRNZXRob2RNYW5hZ2VyLmhpZGVTb2Z0SW5wdXRGcm9tV2luZG93KGdldFdpbmRvd1Rva2VuKCksIDApOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dE1ldGhvZE1hbmFnZXIuaXNBY3RpdmUobU1pbnV0ZVNwaW5uZXJJbnB1dCkpIHsKLSAgICAgICAgICAgICAgICBtTWludXRlU3Bpbm5lcklucHV0LmNsZWFyRm9jdXMoKTsKLSAgICAgICAgICAgICAgICBpbnB1dE1ldGhvZE1hbmFnZXIuaGlkZVNvZnRJbnB1dEZyb21XaW5kb3coZ2V0V2luZG93VG9rZW4oKSwgMCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0TWV0aG9kTWFuYWdlci5pc0FjdGl2ZShtQW1QbVNwaW5uZXJJbnB1dCkpIHsKLSAgICAgICAgICAgICAgICBtQW1QbVNwaW5uZXJJbnB1dC5jbGVhckZvY3VzKCk7Ci0gICAgICAgICAgICAgICAgaW5wdXRNZXRob2RNYW5hZ2VyLmhpZGVTb2Z0SW5wdXRGcm9tV2luZG93KGdldFdpbmRvd1Rva2VuKCksIDApOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbUN1cnJlbnRMb2NhbGUgPSBsb2NhbGU7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGltZVBpY2tlckRlbGVnYXRlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGltZVBpY2tlckRlbGVnYXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyZDM3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UaW1lUGlja2VyRGVsZWdhdGUuamF2YQpAQCAtMCwwICsxLDEzODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQud2lkZ2V0OworCitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uS2V5ZnJhbWU7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3I7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKK2ltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVGb3JtYXQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOworaW1wb3J0IGFuZHJvaWQudmlldy5IYXB0aWNGZWVkYmFja0NvbnN0YW50czsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuS2V5Q2hhcmFjdGVyTWFwOworaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CitpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvOworCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKKworaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0U3ltYm9sczsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKKworLyoqCisgKiBBIHZpZXcgZm9yIHNlbGVjdGluZyB0aGUgdGltZSBvZiBkYXksIGluIGVpdGhlciAyNCBob3VyIG9yIEFNL1BNIG1vZGUuCisgKi8KK2NsYXNzIFRpbWVQaWNrZXJEZWxlZ2F0ZSBleHRlbmRzIFRpbWVQaWNrZXIuQWJzdHJhY3RUaW1lUGlja2VyRGVsZWdhdGUgaW1wbGVtZW50cworICAgICAgICBSYWRpYWxUaW1lUGlja2VyVmlldy5PblZhbHVlU2VsZWN0ZWRMaXN0ZW5lciB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlRpbWVQaWNrZXJEZWxlZ2F0ZSI7CisKKyAgICAvLyBJbmRleCB1c2VkIGJ5IFJhZGlhbFBpY2tlckxheW91dAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIT1VSX0lOREVYID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUlOVVRFX0lOREVYID0gMTsKKworICAgIC8vIE5PVCBhIHJlYWwgaW5kZXggZm9yIHRoZSBwdXJwb3NlIG9mIHdoYXQncyBzaG93aW5nLgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBTVBNX0lOREVYID0gMjsKKworICAgIC8vIEFsc28gTk9UIGEgcmVhbCBpbmRleCwganVzdCB1c2VkIGZvciBrZXlib2FyZCBtb2RlLgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFTkFCTEVfUElDS0VSX0lOREVYID0gMzsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBTSA9IDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBNID0gMTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9FTkFCTEVEX1NUQVRFID0gdHJ1ZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUlzRW5hYmxlZCA9IERFRkFVTFRfRU5BQkxFRF9TVEFURTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIT1VSU19JTl9IQUxGX0RBWSA9IDEyOworCisgICAgLy8gRGVsYXkgaW4gbXMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBwdWxzZSBhbmltYXRpb24KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFVMU0VfQU5JTUFUT1JfREVMQVkgPSAzMDA7CisKKyAgICAvLyBEdXJhdGlvbiBpbiBtcyBvZiB0aGUgcHVsc2UgYW5pbWF0aW9uCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBVTFNFX0FOSU1BVE9SX0RVUkFUSU9OID0gNTQ0OworCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50W10gVEVYVF9BUFBFQVJBTkNFX1RJTUVfTEFCRUxfQVRUUiA9CisgICAgICAgICAgICBuZXcgaW50W10geyBSLmF0dHIudGltZVBpY2tlckhlYWRlclRpbWVMYWJlbFRleHRBcHBlYXJhbmNlIH07CisKKyAgICBwcml2YXRlIGZpbmFsIFZpZXcgbU1haW5WaWV3OworICAgIHByaXZhdGUgVGV4dFZpZXcgbUhvdXJWaWV3OworICAgIHByaXZhdGUgVGV4dFZpZXcgbU1pbnV0ZVZpZXc7CisgICAgcHJpdmF0ZSBUZXh0VmlldyBtQW1QbVRleHRWaWV3OworICAgIHByaXZhdGUgUmFkaWFsVGltZVBpY2tlclZpZXcgbVJhZGlhbFRpbWVQaWNrZXJWaWV3OworICAgIHByaXZhdGUgVGV4dFZpZXcgbVNlcGFyYXRvclZpZXc7CisKKyAgICBwcml2YXRlIFZpZXdHcm91cCBtTGF5b3V0QnV0dG9uczsKKworICAgIHByaXZhdGUgaW50IG1IZWFkZXJTZWxlY3RlZENvbG9yOworICAgIHByaXZhdGUgaW50IG1IZWFkZXJVblNlbGVjdGVkQ29sb3I7CisgICAgcHJpdmF0ZSBTdHJpbmcgbUFtVGV4dDsKKyAgICBwcml2YXRlIFN0cmluZyBtUG1UZXh0OworCisgICAgcHJpdmF0ZSBib29sZWFuIG1BbGxvd0F1dG9BZHZhbmNlOworICAgIHByaXZhdGUgaW50IG1Jbml0aWFsSG91ck9mRGF5OworICAgIHByaXZhdGUgaW50IG1Jbml0aWFsTWludXRlOworICAgIHByaXZhdGUgYm9vbGVhbiBtSXMyNEhvdXJWaWV3OworCisgICAgLy8gRm9yIGhhcmR3YXJlIElNRSBpbnB1dC4KKyAgICBwcml2YXRlIGNoYXIgbVBsYWNlaG9sZGVyVGV4dDsKKyAgICBwcml2YXRlIFN0cmluZyBtRG91YmxlUGxhY2Vob2xkZXJUZXh0OworICAgIHByaXZhdGUgU3RyaW5nIG1EZWxldGVkS2V5Rm9ybWF0OworICAgIHByaXZhdGUgYm9vbGVhbiBtSW5LYk1vZGU7CisgICAgcHJpdmF0ZSBBcnJheUxpc3Q8SW50ZWdlcj4gbVR5cGVkVGltZXMgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCk7CisgICAgcHJpdmF0ZSBOb2RlIG1MZWdhbFRpbWVzVHJlZTsKKyAgICBwcml2YXRlIGludCBtQW1LZXlDb2RlOworICAgIHByaXZhdGUgaW50IG1QbUtleUNvZGU7CisKKyAgICAvLyBGb3Igc2hvd2luZyB0aGUgZG9uZSBidXR0b24gd2hlbiBpbiBhIERpYWxvZworICAgIHByaXZhdGUgQnV0dG9uIG1Eb25lQnV0dG9uOworICAgIHByaXZhdGUgYm9vbGVhbiBtU2hvd0RvbmVCdXR0b247CisgICAgcHJpdmF0ZSBUaW1lUGlja2VyLlRpbWVQaWNrZXJEaXNtaXNzQ2FsbGJhY2sgbURpc21pc3NDYWxsYmFjazsKKworICAgIC8vIEFjY2Vzc2liaWxpdHkgc3RyaW5ncy4KKyAgICBwcml2YXRlIFN0cmluZyBtSG91clBpY2tlckRlc2NyaXB0aW9uOworICAgIHByaXZhdGUgU3RyaW5nIG1TZWxlY3RIb3VyczsKKyAgICBwcml2YXRlIFN0cmluZyBtTWludXRlUGlja2VyRGVzY3JpcHRpb247CisgICAgcHJpdmF0ZSBTdHJpbmcgbVNlbGVjdE1pbnV0ZXM7CisKKyAgICBwdWJsaWMgVGltZVBpY2tlckRlbGVnYXRlKFRpbWVQaWNrZXIgZGVsZWdhdG9yLCBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihkZWxlZ2F0b3IsIGNvbnRleHQpOworCisgICAgICAgIC8vIHByb2Nlc3Mgc3R5bGUgYXR0cmlidXRlcworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBtQ29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAorICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlRpbWVQaWNrZXIsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworCisgICAgICAgIGZpbmFsIFJlc291cmNlcyByZXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKTsKKworICAgICAgICBtSG91clBpY2tlckRlc2NyaXB0aW9uID0gcmVzLmdldFN0cmluZyhSLnN0cmluZy5ob3VyX3BpY2tlcl9kZXNjcmlwdGlvbik7CisgICAgICAgIG1TZWxlY3RIb3VycyA9IHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcuc2VsZWN0X2hvdXJzKTsKKyAgICAgICAgbU1pbnV0ZVBpY2tlckRlc2NyaXB0aW9uID0gcmVzLmdldFN0cmluZyhSLnN0cmluZy5taW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uKTsKKyAgICAgICAgbVNlbGVjdE1pbnV0ZXMgPSByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLnNlbGVjdF9taW51dGVzKTsKKworICAgICAgICBtSGVhZGVyU2VsZWN0ZWRDb2xvciA9IGEuZ2V0Q29sb3IoUi5zdHlsZWFibGUuVGltZVBpY2tlcl9oZWFkZXJTZWxlY3RlZFRleHRDb2xvciwKKyAgICAgICAgICAgICAgICBhbmRyb2lkLlIuY29sb3IuaG9sb19ibHVlX2xpZ2h0KTsKKworICAgICAgICBtSGVhZGVyVW5TZWxlY3RlZENvbG9yID0gZ2V0VW5zZWxlY3RlZENvbG9yKAorICAgICAgICAgICAgICAgIFIuY29sb3IudGltZXBpY2tlcl9kZWZhdWx0X3RleHRfY29sb3JfaG9sb19saWdodCk7CisgICAgICAgIGlmIChtSGVhZGVyVW5TZWxlY3RlZENvbG9yID09IC0xKSB7CisgICAgICAgICAgICBtSGVhZGVyVW5TZWxlY3RlZENvbG9yID0gYS5nZXRDb2xvcihSLnN0eWxlYWJsZS5UaW1lUGlja2VyX2hlYWRlclVuc2VsZWN0ZWRUZXh0Q29sb3IsCisgICAgICAgICAgICAgICAgICAgIFIuY29sb3IudGltZXBpY2tlcl9kZWZhdWx0X3RleHRfY29sb3JfaG9sb19saWdodCk7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBpbnQgaGVhZGVyQmFja2dyb3VuZENvbG9yID0gYS5nZXRDb2xvcigKKyAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5UaW1lUGlja2VyX2hlYWRlckJhY2tncm91bmRDb2xvciwgMCk7CisKKyAgICAgICAgYS5yZWN5Y2xlKCk7CisKKyAgICAgICAgZmluYWwgaW50IGxheW91dFJlc291cmNlSWQgPSBhLmdldFJlc291cmNlSWQoCisgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVGltZVBpY2tlcl9pbnRlcm5hbExheW91dCwgUi5sYXlvdXQudGltZV9waWNrZXJfaG9sbyk7CisKKyAgICAgICAgZmluYWwgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIgPSAoTGF5b3V0SW5mbGF0ZXIpIG1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCisgICAgICAgICAgICAgICAgQ29udGV4dC5MQVlPVVRfSU5GTEFURVJfU0VSVklDRSk7CisKKyAgICAgICAgbU1haW5WaWV3ID0gaW5mbGF0ZXIuaW5mbGF0ZShsYXlvdXRSZXNvdXJjZUlkLCBudWxsKTsKKyAgICAgICAgbURlbGVnYXRvci5hZGRWaWV3KG1NYWluVmlldyk7CisKKyAgICAgICAgaWYgKGhlYWRlckJhY2tncm91bmRDb2xvciAhPSAwKSB7CisgICAgICAgICAgICBSZWxhdGl2ZUxheW91dCBoZWFkZXIgPSAoUmVsYXRpdmVMYXlvdXQpIG1NYWluVmlldy5maW5kVmlld0J5SWQoUi5pZC50aW1lX2hlYWRlcik7CisgICAgICAgICAgICBoZWFkZXIuc2V0QmFja2dyb3VuZENvbG9yKGhlYWRlckJhY2tncm91bmRDb2xvcik7CisgICAgICAgIH0KKworICAgICAgICBtSG91clZpZXcgPSAoVGV4dFZpZXcpIG1NYWluVmlldy5maW5kVmlld0J5SWQoUi5pZC5ob3Vycyk7CisgICAgICAgIG1NaW51dGVWaWV3ID0gKFRleHRWaWV3KSBtTWFpblZpZXcuZmluZFZpZXdCeUlkKFIuaWQubWludXRlcyk7CisgICAgICAgIG1BbVBtVGV4dFZpZXcgPSAoVGV4dFZpZXcpIG1NYWluVmlldy5maW5kVmlld0J5SWQoUi5pZC5hbXBtX2xhYmVsKTsKKyAgICAgICAgbVNlcGFyYXRvclZpZXcgPSAoVGV4dFZpZXcpIG1NYWluVmlldy5maW5kVmlld0J5SWQoUi5pZC5zZXBhcmF0b3IpOworICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcgPSAoUmFkaWFsVGltZVBpY2tlclZpZXcpIG1NYWluVmlldy5maW5kVmlld0J5SWQoUi5pZC5yYWRpYWxfcGlja2VyKTsKKworICAgICAgICBtTGF5b3V0QnV0dG9ucyA9IChWaWV3R3JvdXApIG1NYWluVmlldy5maW5kVmlld0J5SWQoUi5pZC5sYXlvdXRfYnV0dG9ucyk7CisgICAgICAgIG1Eb25lQnV0dG9uID0gKEJ1dHRvbikgbU1haW5WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmRvbmVfYnV0dG9uKTsKKworICAgICAgICBTdHJpbmdbXSBhbVBtVGV4dHMgPSBuZXcgRGF0ZUZvcm1hdFN5bWJvbHMoKS5nZXRBbVBtU3RyaW5ncygpOworICAgICAgICBtQW1UZXh0ID0gYW1QbVRleHRzWzBdOworICAgICAgICBtUG1UZXh0ID0gYW1QbVRleHRzWzFdOworCisgICAgICAgIHNldHVwTGlzdGVuZXJzKCk7CisKKyAgICAgICAgbUFsbG93QXV0b0FkdmFuY2UgPSB0cnVlOworCisgICAgICAgIC8vIFNldCB1cCBmb3Iga2V5Ym9hcmQgbW9kZS4KKyAgICAgICAgbURvdWJsZVBsYWNlaG9sZGVyVGV4dCA9IHJlcy5nZXRTdHJpbmcoUi5zdHJpbmcudGltZV9wbGFjZWhvbGRlcik7CisgICAgICAgIG1EZWxldGVkS2V5Rm9ybWF0ID0gcmVzLmdldFN0cmluZyhSLnN0cmluZy5kZWxldGVkX2tleSk7CisgICAgICAgIG1QbGFjZWhvbGRlclRleHQgPSBtRG91YmxlUGxhY2Vob2xkZXJUZXh0LmNoYXJBdCgwKTsKKyAgICAgICAgbUFtS2V5Q29kZSA9IG1QbUtleUNvZGUgPSAtMTsKKyAgICAgICAgZ2VuZXJhdGVMZWdhbFRpbWVzVHJlZSgpOworCisgICAgICAgIC8vIEluaXRpYWxpemUgd2l0aCBjdXJyZW50IHRpbWUKKyAgICAgICAgZmluYWwgQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZShtQ3VycmVudExvY2FsZSk7CisgICAgICAgIGZpbmFsIGludCBjdXJyZW50SG91ciA9IGNhbGVuZGFyLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSk7CisgICAgICAgIGZpbmFsIGludCBjdXJyZW50TWludXRlID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1JTlVURSk7CisgICAgICAgIGluaXRpYWxpemUoY3VycmVudEhvdXIsIGN1cnJlbnRNaW51dGUsIGZhbHNlIC8qIDEyaCAqLywgSE9VUl9JTkRFWCwgZmFsc2UpOworICAgIH0KKworICAgIHByaXZhdGUgaW50IGdldFVuc2VsZWN0ZWRDb2xvcihpbnQgZGVmQ29sb3IpIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IC0xOworICAgICAgICBmaW5hbCBSZXNvdXJjZXMuVGhlbWUgdGhlbWUgPSBtQ29udGV4dC5nZXRUaGVtZSgpOworICAgICAgICBmaW5hbCBUeXBlZFZhbHVlIG91dFZhbHVlID0gbmV3IFR5cGVkVmFsdWUoKTsKKyAgICAgICAgdGhlbWUucmVzb2x2ZUF0dHJpYnV0ZShSLmF0dHIudGltZVBpY2tlckhlYWRlclRpbWVMYWJlbFRleHRBcHBlYXJhbmNlLCBvdXRWYWx1ZSwgdHJ1ZSk7CisgICAgICAgIGZpbmFsIGludCBhcHBlYXJhbmNlUmVzSWQgPSBvdXRWYWx1ZS5yZXNvdXJjZUlkOworICAgICAgICBUeXBlZEFycmF5IGFwcGVhcmFuY2UgPSBudWxsOworICAgICAgICBpZiAoYXBwZWFyYW5jZVJlc0lkICE9IC0xKSB7CisgICAgICAgICAgICBhcHBlYXJhbmNlID0gdGhlbWUub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhcHBlYXJhbmNlUmVzSWQsCisgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlRleHRBcHBlYXJhbmNlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXBwZWFyYW5jZSAhPSBudWxsKSB7CisgICAgICAgICAgICByZXN1bHQgPSBhcHBlYXJhbmNlLmdldENvbG9yKAorICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5UZXh0QXBwZWFyYW5jZV90ZXh0Q29sb3IsIGRlZkNvbG9yKTsKKyAgICAgICAgICAgIGFwcGVhcmFuY2UucmVjeWNsZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemUoaW50IGhvdXJPZkRheSwgaW50IG1pbnV0ZSwgYm9vbGVhbiBpczI0SG91clZpZXcsIGludCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHNob3dEb25lQnV0dG9uKSB7CisgICAgICAgIG1Jbml0aWFsSG91ck9mRGF5ID0gaG91ck9mRGF5OworICAgICAgICBtSW5pdGlhbE1pbnV0ZSA9IG1pbnV0ZTsKKyAgICAgICAgbUlzMjRIb3VyVmlldyA9IGlzMjRIb3VyVmlldzsKKyAgICAgICAgbUluS2JNb2RlID0gZmFsc2U7CisgICAgICAgIG1TaG93RG9uZUJ1dHRvbiA9IHNob3dEb25lQnV0dG9uOworICAgICAgICB1cGRhdGVVSShpbmRleCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldHVwTGlzdGVuZXJzKCkgeworICAgICAgICBLZXlib2FyZExpc3RlbmVyIGtleWJvYXJkTGlzdGVuZXIgPSBuZXcgS2V5Ym9hcmRMaXN0ZW5lcigpOworICAgICAgICBtRGVsZWdhdG9yLnNldE9uS2V5TGlzdGVuZXIoa2V5Ym9hcmRMaXN0ZW5lcik7CisKKyAgICAgICAgbUhvdXJWaWV3LnNldE9uS2V5TGlzdGVuZXIoa2V5Ym9hcmRMaXN0ZW5lcik7CisgICAgICAgIG1NaW51dGVWaWV3LnNldE9uS2V5TGlzdGVuZXIoa2V5Ym9hcmRMaXN0ZW5lcik7CisgICAgICAgIG1BbVBtVGV4dFZpZXcuc2V0T25LZXlMaXN0ZW5lcihrZXlib2FyZExpc3RlbmVyKTsKKyAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LnNldE9uVmFsdWVTZWxlY3RlZExpc3RlbmVyKHRoaXMpOworICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuc2V0T25LZXlMaXN0ZW5lcihrZXlib2FyZExpc3RlbmVyKTsKKworICAgICAgICBtSG91clZpZXcuc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBzZXRDdXJyZW50SXRlbVNob3dpbmcoSE9VUl9JTkRFWCwgdHJ1ZSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgICAgIHRyeVZpYnJhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1NaW51dGVWaWV3LnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgc2V0Q3VycmVudEl0ZW1TaG93aW5nKE1JTlVURV9JTkRFWCwgdHJ1ZSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgICAgIHRyeVZpYnJhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1Eb25lQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgaWYgKG1JbktiTW9kZSAmJiBpc1R5cGVkVGltZUZ1bGx5TGVnYWwoKSkgeworICAgICAgICAgICAgICAgICAgICBmaW5pc2hLYk1vZGUoZmFsc2UpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRyeVZpYnJhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1EaXNtaXNzQ2FsbGJhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBtRGlzbWlzc0NhbGxiYWNrLmRpc21pc3MobURlbGVnYXRvciwgZmFsc2UsIGdldEN1cnJlbnRIb3VyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudE1pbnV0ZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtRG9uZUJ1dHRvbi5zZXRPbktleUxpc3RlbmVyKGtleWJvYXJkTGlzdGVuZXIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVVSShpbnQgaW5kZXgpIHsKKyAgICAgICAgLy8gVXBkYXRlIFJhZGlhbFBpY2tlciB2YWx1ZXMKKyAgICAgICAgdXBkYXRlUmFkaWFsUGlja2VyKGluZGV4KTsKKyAgICAgICAgLy8gRW5hYmxlIG9yIGRpc2FibGUgdGhlIEFNL1BNIHZpZXcuCisgICAgICAgIHVwZGF0ZUhlYWRlckFtUG0oKTsKKyAgICAgICAgLy8gU2hvdyBvciBoaWRlIERvbmUgYnV0dG9uCisgICAgICAgIHVwZGF0ZURvbmVCdXR0b24oKTsKKyAgICAgICAgLy8gVXBkYXRlIEhvdXIgYW5kIE1pbnV0ZXMKKyAgICAgICAgdXBkYXRlSGVhZGVySG91cihtSW5pdGlhbEhvdXJPZkRheSwgdHJ1ZSk7CisgICAgICAgIC8vIFVwZGF0ZSB0aW1lIHNlcGFyYXRvcgorICAgICAgICB1cGRhdGVIZWFkZXJTZXBhcmF0b3IoKTsKKyAgICAgICAgLy8gVXBkYXRlIE1pbnV0ZXMKKyAgICAgICAgdXBkYXRlSGVhZGVyTWludXRlKG1Jbml0aWFsTWludXRlKTsKKyAgICAgICAgLy8gSW52YWxpZGF0ZSBldmVyeXRoaW5nCisgICAgICAgIG1EZWxlZ2F0b3IuaW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVSYWRpYWxQaWNrZXIoaW50IGluZGV4KSB7CisgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5pbml0aWFsaXplKG1Jbml0aWFsSG91ck9mRGF5LCBtSW5pdGlhbE1pbnV0ZSwgbUlzMjRIb3VyVmlldyk7CisgICAgICAgIHNldEN1cnJlbnRJdGVtU2hvd2luZyhpbmRleCwgZmFsc2UsIHRydWUsIHRydWUpOworICAgIH0KKworICAgIHByaXZhdGUgaW50IGNvbXB1dGVNYXhXaWR0aE9mTnVtYmVycyhpbnQgbWF4KSB7CisgICAgICAgIFRleHRWaWV3IHRlbXBWaWV3ID0gbmV3IFRleHRWaWV3KG1Db250ZXh0KTsKKyAgICAgICAgVHlwZWRBcnJheSBhID0gbUNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhURVhUX0FQUEVBUkFOQ0VfVElNRV9MQUJFTF9BVFRSKTsKKyAgICAgICAgZmluYWwgaW50IHRleHRBcHBlYXJhbmNlUmVzSWQgPSBhLmdldFJlc291cmNlSWQoMCwgMCk7CisgICAgICAgIHRlbXBWaWV3LnNldFRleHRBcHBlYXJhbmNlKG1Db250ZXh0LCAodGV4dEFwcGVhcmFuY2VSZXNJZCAhPSAwKSA/CisgICAgICAgICAgICAgICAgdGV4dEFwcGVhcmFuY2VSZXNJZCA6IFIuc3R5bGUuVGV4dEFwcGVhcmFuY2VfSG9sb19UaW1lUGlja2VyX1RpbWVMYWJlbCk7CisgICAgICAgIGEucmVjeWNsZSgpOworICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zIGxwID0gbmV3IFZpZXdHcm91cC5MYXlvdXRQYXJhbXMoVmlld0dyb3VwLkxheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQsCisgICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpOworICAgICAgICB0ZW1wVmlldy5zZXRMYXlvdXRQYXJhbXMobHApOworICAgICAgICBpbnQgbWF4V2lkdGggPSAwOworICAgICAgICBmb3IgKGludCBtaW51dGVzID0gMDsgbWludXRlcyA8IG1heDsgbWludXRlcysrKSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdGV4dCA9IFN0cmluZy5mb3JtYXQoIiUwMmQiLCBtaW51dGVzKTsKKyAgICAgICAgICAgIHRlbXBWaWV3LnNldFRleHQodGV4dCk7CisgICAgICAgICAgICB0ZW1wVmlldy5tZWFzdXJlKFZpZXcuTWVhc3VyZVNwZWMuVU5TUEVDSUZJRUQsIFZpZXcuTWVhc3VyZVNwZWMuVU5TUEVDSUZJRUQpOworICAgICAgICAgICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgdGVtcFZpZXcuZ2V0TWVhc3VyZWRXaWR0aCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWF4V2lkdGg7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUhlYWRlckFtUG0oKSB7CisgICAgICAgIGlmIChtSXMyNEhvdXJWaWV3KSB7CisgICAgICAgICAgICBtQW1QbVRleHRWaWV3LnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1BbVBtVGV4dFZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGJlc3REYXRlVGltZVBhdHRlcm4gPSBEYXRlRm9ybWF0LmdldEJlc3REYXRlVGltZVBhdHRlcm4obUN1cnJlbnRMb2NhbGUsCisgICAgICAgICAgICAgICAgICAgICJobSIpOworCisgICAgICAgICAgICBib29sZWFuIGFtUG1PbkxlZnQgPSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLnN0YXJ0c1dpdGgoImEiKTsKKyAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuZ2V0TGF5b3V0RGlyZWN0aW9uRnJvbUxvY2FsZShtQ3VycmVudExvY2FsZSkgPT0KKyAgICAgICAgICAgICAgICAgICAgVmlldy5MQVlPVVRfRElSRUNUSU9OX1JUTCkgeworICAgICAgICAgICAgICAgIGFtUG1PbkxlZnQgPSAhYW1QbU9uTGVmdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVsYXRpdmVMYXlvdXQuTGF5b3V0UGFyYW1zIGxheW91dFBhcmFtcyA9IChSZWxhdGl2ZUxheW91dC5MYXlvdXRQYXJhbXMpCisgICAgICAgICAgICAgICAgICAgIG1BbVBtVGV4dFZpZXcuZ2V0TGF5b3V0UGFyYW1zKCk7CisKKyAgICAgICAgICAgIGlmIChhbVBtT25MZWZ0KSB7CisgICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLnJpZ2h0TWFyZ2luID0gY29tcHV0ZU1heFdpZHRoT2ZOdW1iZXJzKDEyIC8qIGZvciBob3VycyAqLyk7CisgICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLnJlbW92ZVJ1bGUoUmVsYXRpdmVMYXlvdXQuUklHSFRfT0YpOworICAgICAgICAgICAgICAgIGxheW91dFBhcmFtcy5hZGRSdWxlKFJlbGF0aXZlTGF5b3V0LkxFRlRfT0YsIFIuaWQuc2VwYXJhdG9yKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLmxlZnRNYXJnaW4gPSBjb21wdXRlTWF4V2lkdGhPZk51bWJlcnMoNjAgLyogZm9yIG1pbnV0ZXMgKi8pOworICAgICAgICAgICAgICAgIGxheW91dFBhcmFtcy5yZW1vdmVSdWxlKFJlbGF0aXZlTGF5b3V0LkxFRlRfT0YpOworICAgICAgICAgICAgICAgIGxheW91dFBhcmFtcy5hZGRSdWxlKFJlbGF0aXZlTGF5b3V0LlJJR0hUX09GLCBSLmlkLnNlcGFyYXRvcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVwZGF0ZUFtUG1EaXNwbGF5KG1Jbml0aWFsSG91ck9mRGF5IDwgMTIgPyBBTSA6IFBNKTsKKyAgICAgICAgICAgIG1BbVBtVGV4dFZpZXcuc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgICAgICB0cnlWaWJyYXRlKCk7CisgICAgICAgICAgICAgICAgICAgIGludCBhbU9yUG0gPSBtUmFkaWFsVGltZVBpY2tlclZpZXcuZ2V0QW1PclBtKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhbU9yUG0gPT0gQU0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFtT3JQbSA9IFBNOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFtT3JQbSA9PSBQTSl7CisgICAgICAgICAgICAgICAgICAgICAgICBhbU9yUG0gPSBBTTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB1cGRhdGVBbVBtRGlzcGxheShhbU9yUG0pOworICAgICAgICAgICAgICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuc2V0QW1PclBtKGFtT3JQbSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlRG9uZUJ1dHRvbigpIHsKKyAgICAgICAgbUxheW91dEJ1dHRvbnMuc2V0VmlzaWJpbGl0eShtU2hvd0RvbmVCdXR0b24gPyBWaWV3LlZJU0lCTEUgOiBWaWV3LkdPTkUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgY3VycmVudCBob3VyLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldEN1cnJlbnRIb3VyKEludGVnZXIgY3VycmVudEhvdXIpIHsKKyAgICAgICAgaWYgKG1Jbml0aWFsSG91ck9mRGF5ID09IGN1cnJlbnRIb3VyKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbUluaXRpYWxIb3VyT2ZEYXkgPSBjdXJyZW50SG91cjsKKyAgICAgICAgdXBkYXRlSGVhZGVySG91cihjdXJyZW50SG91ciwgdHJ1ZSAvKiBhY2Nlc3NpYmlsaXR5IGFubm91bmNlICovKTsKKyAgICAgICAgdXBkYXRlSGVhZGVyQW1QbSgpOworICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuc2V0Q3VycmVudEhvdXIoY3VycmVudEhvdXIpOworICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuc2V0QW1PclBtKG1Jbml0aWFsSG91ck9mRGF5IDwgMTIgPyBBTSA6IFBNKTsKKyAgICAgICAgbURlbGVnYXRvci5pbnZhbGlkYXRlKCk7CisgICAgICAgIG9uVGltZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGhvdXIgaW4gdGhlIHJhbmdlICgwLTIzKS4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRDdXJyZW50SG91cigpIHsKKyAgICAgICAgaW50IGN1cnJlbnRIb3VyID0gbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmdldEN1cnJlbnRIb3VyKCk7CisgICAgICAgIGlmIChtSXMyNEhvdXJWaWV3KSB7CisgICAgICAgICAgICByZXR1cm4gY3VycmVudEhvdXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2gobVJhZGlhbFRpbWVQaWNrZXJWaWV3LmdldEFtT3JQbSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBQTToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjdXJyZW50SG91ciAlIEhPVVJTX0lOX0hBTEZfREFZKSArIEhPVVJTX0lOX0hBTEZfREFZOworICAgICAgICAgICAgICAgIGNhc2UgQU06CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRIb3VyICUgSE9VUlNfSU5fSEFMRl9EQVk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGN1cnJlbnQgbWludXRlICgwLTU5KS4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50TWludXRlKEludGVnZXIgY3VycmVudE1pbnV0ZSkgeworICAgICAgICBpZiAobUluaXRpYWxNaW51dGUgPT0gY3VycmVudE1pbnV0ZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1Jbml0aWFsTWludXRlID0gY3VycmVudE1pbnV0ZTsKKyAgICAgICAgdXBkYXRlSGVhZGVyTWludXRlKGN1cnJlbnRNaW51dGUpOworICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuc2V0Q3VycmVudE1pbnV0ZShjdXJyZW50TWludXRlKTsKKyAgICAgICAgbURlbGVnYXRvci5pbnZhbGlkYXRlKCk7CisgICAgICAgIG9uVGltZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IG1pbnV0ZS4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSW50ZWdlciBnZXRDdXJyZW50TWludXRlKCkgeworICAgICAgICByZXR1cm4gbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmdldEN1cnJlbnRNaW51dGUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgd2hldGhlciBpbiAyNCBob3VyIG9yIEFNL1BNIG1vZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaXMyNEhvdXJWaWV3IFRydWUgPSAyNCBob3VyIG1vZGUuIEZhbHNlID0gQU0vUE0uCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0SXMyNEhvdXJWaWV3KEJvb2xlYW4gaXMyNEhvdXJWaWV3KSB7CisgICAgICAgIGlmIChpczI0SG91clZpZXcgPT0gbUlzMjRIb3VyVmlldykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1JczI0SG91clZpZXcgPSBpczI0SG91clZpZXc7CisgICAgICAgIGdlbmVyYXRlTGVnYWxUaW1lc1RyZWUoKTsKKyAgICAgICAgaW50IGhvdXIgPSBtUmFkaWFsVGltZVBpY2tlclZpZXcuZ2V0Q3VycmVudEhvdXIoKTsKKyAgICAgICAgbUluaXRpYWxIb3VyT2ZEYXkgPSBob3VyOworICAgICAgICB1cGRhdGVIZWFkZXJIb3VyKGhvdXIsIGZhbHNlIC8qIG5vIGFjY2Vzc2liaWxpdHkgYW5ub3VuY2UgKi8pOworICAgICAgICB1cGRhdGVIZWFkZXJBbVBtKCk7CisgICAgICAgIHVwZGF0ZVJhZGlhbFBpY2tlcihtUmFkaWFsVGltZVBpY2tlclZpZXcuZ2V0Q3VycmVudEl0ZW1TaG93aW5nKCkpOworICAgICAgICBtRGVsZWdhdG9yLmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpcyBpbiAyNCBob3VyIHZpZXcgZWxzZSBmYWxzZS4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpczI0SG91clZpZXcoKSB7CisgICAgICAgIHJldHVybiBtSXMyNEhvdXJWaWV3OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldE9uVGltZUNoYW5nZWRMaXN0ZW5lcihUaW1lUGlja2VyLk9uVGltZUNoYW5nZWRMaXN0ZW5lciBjYWxsYmFjaykgeworICAgICAgICBtT25UaW1lQ2hhbmdlZExpc3RlbmVyID0gY2FsbGJhY2s7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgbUhvdXJWaWV3LnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgICAgIG1NaW51dGVWaWV3LnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgICAgIG1BbVBtVGV4dFZpZXcuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgICAgIG1Jc0VuYWJsZWQgPSBlbmFibGVkOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1Jc0VuYWJsZWQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0U2hvd0RvbmVCdXR0b24oYm9vbGVhbiBzaG93RG9uZUJ1dHRvbikgeworICAgICAgICBtU2hvd0RvbmVCdXR0b24gPSBzaG93RG9uZUJ1dHRvbjsKKyAgICAgICAgdXBkYXRlRG9uZUJ1dHRvbigpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldERpc21pc3NDYWxsYmFjayhUaW1lUGlja2VyLlRpbWVQaWNrZXJEaXNtaXNzQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICAgICAgbURpc21pc3NDYWxsYmFjayA9IGNhbGxiYWNrOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0QmFzZWxpbmUoKSB7CisgICAgICAgIC8vIGRvZXMgbm90IHN1cHBvcnQgYmFzZWxpbmUgYWxpZ25tZW50CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKSB7CisgICAgICAgIHVwZGF0ZVVJKG1SYWRpYWxUaW1lUGlja2VyVmlldy5nZXRDdXJyZW50SXRlbVNob3dpbmcoKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFBhcmNlbGFibGUgb25TYXZlSW5zdGFuY2VTdGF0ZShQYXJjZWxhYmxlIHN1cGVyU3RhdGUpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTYXZlZFN0YXRlKHN1cGVyU3RhdGUsIGdldEN1cnJlbnRIb3VyKCksIGdldEN1cnJlbnRNaW51dGUoKSwKKyAgICAgICAgICAgICAgICBpczI0SG91clZpZXcoKSwgaW5LYk1vZGUoKSwgZ2V0VHlwZWRUaW1lcygpLCBnZXRDdXJyZW50SXRlbVNob3dpbmcoKSwKKyAgICAgICAgICAgICAgICBpc1Nob3dEb25lQnV0dG9uKCkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUmVzdG9yZUluc3RhbmNlU3RhdGUoUGFyY2VsYWJsZSBzdGF0ZSkgeworICAgICAgICBTYXZlZFN0YXRlIHNzID0gKFNhdmVkU3RhdGUpIHN0YXRlOworICAgICAgICBzZXRJbktiTW9kZShzcy5pbktiTW9kZSgpKTsKKyAgICAgICAgc2V0VHlwZWRUaW1lcyhzcy5nZXRUeXBlc1RpbWVzKCkpOworICAgICAgICBpbml0aWFsaXplKHNzLmdldEhvdXIoKSwgc3MuZ2V0TWludXRlKCksIHNzLmlzMjRIb3VyTW9kZSgpLCBzcy5nZXRDdXJyZW50SXRlbVNob3dpbmcoKSwKKyAgICAgICAgICAgICAgICBzcy5pc1Nob3dEb25lQnV0dG9uKCkpOworICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuaW52YWxpZGF0ZSgpOworICAgICAgICBpZiAobUluS2JNb2RlKSB7CisgICAgICAgICAgICB0cnlTdGFydGluZ0tiTW9kZSgtMSk7CisgICAgICAgICAgICBtSG91clZpZXcuaW52YWxpZGF0ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZGlzcGF0Y2hQb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgcmV0dXJuIG1SYWRpYWxUaW1lUGlja2VyVmlldy5kaXNwYXRjaFBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblBvcHVsYXRlQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcub25Qb3B1bGF0ZUFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgeworICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcub25Jbml0aWFsaXplQWNjZXNzaWJpbGl0eUV2ZW50KGV2ZW50KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkluaXRpYWxpemVBY2Nlc3NpYmlsaXR5Tm9kZUluZm8oQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGluZm8pIHsKKyAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3Lm9uSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHlOb2RlSW5mbyhpbmZvKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgd2hldGhlciBpbiBrZXlib2FyZCBtb2RlIG9yIG5vdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbktiTW9kZSBUcnVlIG1lYW5zIGluIGtleWJvYXJkIG1vZGUuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHNldEluS2JNb2RlKGJvb2xlYW4gaW5LYk1vZGUpIHsKKyAgICAgICAgbUluS2JNb2RlID0gaW5LYk1vZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0cnVlIGlmIGluIGtleWJvYXJkIG1vZGUKKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaW5LYk1vZGUoKSB7CisgICAgICAgIHJldHVybiBtSW5LYk1vZGU7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldFR5cGVkVGltZXMoQXJyYXlMaXN0PEludGVnZXI+IHR5cGVUaW1lcykgeworICAgICAgICBtVHlwZWRUaW1lcyA9IHR5cGVUaW1lczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIHR5cGVkIHRpbWVzCisgICAgICovCisgICAgcHJpdmF0ZSBBcnJheUxpc3Q8SW50ZWdlcj4gZ2V0VHlwZWRUaW1lcygpIHsKKyAgICAgICAgcmV0dXJuIG1UeXBlZFRpbWVzOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGl0ZW0gc2hvd2luZworICAgICAqLworICAgIHByaXZhdGUgaW50IGdldEN1cnJlbnRJdGVtU2hvd2luZygpIHsKKyAgICAgICAgcmV0dXJuIG1SYWRpYWxUaW1lUGlja2VyVmlldy5nZXRDdXJyZW50SXRlbVNob3dpbmcoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNTaG93RG9uZUJ1dHRvbigpIHsKKyAgICAgICAgcmV0dXJuIG1TaG93RG9uZUJ1dHRvbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcm9wYWdhdGUgdGhlIHRpbWUgY2hhbmdlCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIG9uVGltZUNoYW5nZWQoKSB7CisgICAgICAgIG1EZWxlZ2F0b3Iuc2VuZEFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9WSUVXX1NFTEVDVEVEKTsKKyAgICAgICAgaWYgKG1PblRpbWVDaGFuZ2VkTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgbU9uVGltZUNoYW5nZWRMaXN0ZW5lci5vblRpbWVDaGFuZ2VkKG1EZWxlZ2F0b3IsCisgICAgICAgICAgICAgICAgICAgIGdldEN1cnJlbnRIb3VyKCksIGdldEN1cnJlbnRNaW51dGUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVc2VkIHRvIHNhdmUgLyByZXN0b3JlIHN0YXRlIG9mIHRpbWUgcGlja2VyCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2F2ZWRTdGF0ZSBleHRlbmRzIFZpZXcuQmFzZVNhdmVkU3RhdGUgeworCisgICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1Ib3VyOworICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtTWludXRlOworICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbUlzMjRIb3VyTW9kZTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1JbktiTW9kZTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8SW50ZWdlcj4gbVR5cGVkVGltZXM7CisgICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1DdXJyZW50SXRlbVNob3dpbmc7CisgICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtU2hvd0RvbmVCdXR0b247CisKKyAgICAgICAgcHJpdmF0ZSBTYXZlZFN0YXRlKFBhcmNlbGFibGUgc3VwZXJTdGF0ZSwgaW50IGhvdXIsIGludCBtaW51dGUsIGJvb2xlYW4gaXMyNEhvdXJNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc0tiTW9kZSwgQXJyYXlMaXN0PEludGVnZXI+IHR5cGVkVGltZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3VycmVudEl0ZW1TaG93aW5nLCBib29sZWFuIHNob3dEb25lQnV0dG9uKSB7CisgICAgICAgICAgICBzdXBlcihzdXBlclN0YXRlKTsKKyAgICAgICAgICAgIG1Ib3VyID0gaG91cjsKKyAgICAgICAgICAgIG1NaW51dGUgPSBtaW51dGU7CisgICAgICAgICAgICBtSXMyNEhvdXJNb2RlID0gaXMyNEhvdXJNb2RlOworICAgICAgICAgICAgbUluS2JNb2RlID0gaXNLYk1vZGU7CisgICAgICAgICAgICBtVHlwZWRUaW1lcyA9IHR5cGVkVGltZXM7CisgICAgICAgICAgICBtQ3VycmVudEl0ZW1TaG93aW5nID0gY3VycmVudEl0ZW1TaG93aW5nOworICAgICAgICAgICAgbVNob3dEb25lQnV0dG9uID0gc2hvd0RvbmVCdXR0b247CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIFNhdmVkU3RhdGUoUGFyY2VsIGluKSB7CisgICAgICAgICAgICBzdXBlcihpbik7CisgICAgICAgICAgICBtSG91ciA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIG1NaW51dGUgPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBtSXMyNEhvdXJNb2RlID0gKGluLnJlYWRJbnQoKSA9PSAxKTsKKyAgICAgICAgICAgIG1JbktiTW9kZSA9IChpbi5yZWFkSW50KCkgPT0gMSk7CisgICAgICAgICAgICBtVHlwZWRUaW1lcyA9IGluLnJlYWRBcnJheUxpc3QoZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICAgICAgICAgIG1DdXJyZW50SXRlbVNob3dpbmcgPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBtU2hvd0RvbmVCdXR0b24gPSAoaW4ucmVhZEludCgpID09IDEpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRIb3VyKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Ib3VyOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRNaW51dGUoKSB7CisgICAgICAgICAgICByZXR1cm4gbU1pbnV0ZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzMjRIb3VyTW9kZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtSXMyNEhvdXJNb2RlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaW5LYk1vZGUoKSB7CisgICAgICAgICAgICByZXR1cm4gbUluS2JNb2RlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEFycmF5TGlzdDxJbnRlZ2VyPiBnZXRUeXBlc1RpbWVzKCkgeworICAgICAgICAgICAgcmV0dXJuIG1UeXBlZFRpbWVzOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRDdXJyZW50SXRlbVNob3dpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gbUN1cnJlbnRJdGVtU2hvd2luZzsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzU2hvd0RvbmVCdXR0b24oKSB7CisgICAgICAgICAgICByZXR1cm4gbVNob3dEb25lQnV0dG9uOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIGRlc3QsIGludCBmbGFncykgeworICAgICAgICAgICAgc3VwZXIud3JpdGVUb1BhcmNlbChkZXN0LCBmbGFncyk7CisgICAgICAgICAgICBkZXN0LndyaXRlSW50KG1Ib3VyKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobU1pbnV0ZSk7CisgICAgICAgICAgICBkZXN0LndyaXRlSW50KG1JczI0SG91ck1vZGUgPyAxIDogMCk7CisgICAgICAgICAgICBkZXN0LndyaXRlSW50KG1JbktiTW9kZSA/IDEgOiAwKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVMaXN0KG1UeXBlZFRpbWVzKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobUN1cnJlbnRJdGVtU2hvd2luZyk7CisgICAgICAgICAgICBkZXN0LndyaXRlSW50KG1TaG93RG9uZUJ1dHRvbiA/IDEgOiAwKTsKKyAgICAgICAgfQorCisgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKHsidW51c2VkIiwgImhpZGluZyJ9KQorICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhcmNlbGFibGUuQ3JlYXRvcjxTYXZlZFN0YXRlPiBDUkVBVE9SID0gbmV3IENyZWF0b3I8U2F2ZWRTdGF0ZT4oKSB7CisgICAgICAgICAgICBwdWJsaWMgU2F2ZWRTdGF0ZSBjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBpbikgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2F2ZWRTdGF0ZShpbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBTYXZlZFN0YXRlW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNhdmVkU3RhdGVbc2l6ZV07CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHRyeVZpYnJhdGUoKSB7CisgICAgICAgIG1EZWxlZ2F0b3IucGVyZm9ybUhhcHRpY0ZlZWRiYWNrKEhhcHRpY0ZlZWRiYWNrQ29uc3RhbnRzLkNMT0NLX1RJQ0spOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVBbVBtRGlzcGxheShpbnQgYW1PclBtKSB7CisgICAgICAgIGlmIChhbU9yUG0gPT0gQU0pIHsKKyAgICAgICAgICAgIG1BbVBtVGV4dFZpZXcuc2V0VGV4dChtQW1UZXh0KTsKKyAgICAgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5hbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkobUFtVGV4dCk7CisgICAgICAgIH0gZWxzZSBpZiAoYW1PclBtID09IFBNKXsKKyAgICAgICAgICAgIG1BbVBtVGV4dFZpZXcuc2V0VGV4dChtUG1UZXh0KTsKKyAgICAgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5hbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkobVBtVGV4dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQW1QbVRleHRWaWV3LnNldFRleHQobURvdWJsZVBsYWNlaG9sZGVyVGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHBpY2tlciBmb3IgdXBkYXRpbmcgdGhlIGhlYWRlciBkaXNwbGF5LgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uVmFsdWVTZWxlY3RlZChpbnQgcGlja2VySW5kZXgsIGludCBuZXdWYWx1ZSwgYm9vbGVhbiBhdXRvQWR2YW5jZSkgeworICAgICAgICBpZiAocGlja2VySW5kZXggPT0gSE9VUl9JTkRFWCkgeworICAgICAgICAgICAgdXBkYXRlSGVhZGVySG91cihuZXdWYWx1ZSwgZmFsc2UpOworICAgICAgICAgICAgU3RyaW5nIGFubm91bmNlbWVudCA9IFN0cmluZy5mb3JtYXQoIiVkIiwgbmV3VmFsdWUpOworICAgICAgICAgICAgaWYgKG1BbGxvd0F1dG9BZHZhbmNlICYmIGF1dG9BZHZhbmNlKSB7CisgICAgICAgICAgICAgICAgc2V0Q3VycmVudEl0ZW1TaG93aW5nKE1JTlVURV9JTkRFWCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIGFubm91bmNlbWVudCArPSAiLiAiICsgbVNlbGVjdE1pbnV0ZXM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5zZXRDb250ZW50RGVzY3JpcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBtSG91clBpY2tlckRlc2NyaXB0aW9uICsgIjogIiArIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmFubm91bmNlRm9yQWNjZXNzaWJpbGl0eShhbm5vdW5jZW1lbnQpOworICAgICAgICB9IGVsc2UgaWYgKHBpY2tlckluZGV4ID09IE1JTlVURV9JTkRFWCl7CisgICAgICAgICAgICB1cGRhdGVIZWFkZXJNaW51dGUobmV3VmFsdWUpOworICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LnNldENvbnRlbnREZXNjcmlwdGlvbihtTWludXRlUGlja2VyRGVzY3JpcHRpb24gKyAiOiAiICsgbmV3VmFsdWUpOworICAgICAgICB9IGVsc2UgaWYgKHBpY2tlckluZGV4ID09IEFNUE1fSU5ERVgpIHsKKyAgICAgICAgICAgIHVwZGF0ZUFtUG1EaXNwbGF5KG5ld1ZhbHVlKTsKKyAgICAgICAgfSBlbHNlIGlmIChwaWNrZXJJbmRleCA9PSBFTkFCTEVfUElDS0VSX0lOREVYKSB7CisgICAgICAgICAgICBpZiAoIWlzVHlwZWRUaW1lRnVsbHlMZWdhbCgpKSB7CisgICAgICAgICAgICAgICAgbVR5cGVkVGltZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmlzaEtiTW9kZSh0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVIZWFkZXJIb3VyKGludCB2YWx1ZSwgYm9vbGVhbiBhbm5vdW5jZSkgeworICAgICAgICBmaW5hbCBTdHJpbmcgYmVzdERhdGVUaW1lUGF0dGVybiA9IERhdGVGb3JtYXQuZ2V0QmVzdERhdGVUaW1lUGF0dGVybihtQ3VycmVudExvY2FsZSwKKyAgICAgICAgICAgICAgICAobUlzMjRIb3VyVmlldykgPyAiSG0iIDogImhtIik7CisgICAgICAgIGZpbmFsIGludCBsZW5ndGhQYXR0ZXJuID0gYmVzdERhdGVUaW1lUGF0dGVybi5sZW5ndGgoKTsKKyAgICAgICAgYm9vbGVhbiBob3VyV2l0aFR3b0RpZ2l0ID0gZmFsc2U7CisgICAgICAgIGNoYXIgaG91ckZvcm1hdCA9ICdcMCc7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXR1cm5lZCBwYXR0ZXJuIGlzIHNpbmdsZSBvciBkb3VibGUgJ0gnLCAnaCcsICdLJywgJ2snLiBXZSBhbHNvIHNhdmUKKyAgICAgICAgLy8gdGhlIGhvdXIgZm9ybWF0IHRoYXQgd2UgZm91bmQuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoUGF0dGVybjsgaSsrKSB7CisgICAgICAgICAgICBmaW5hbCBjaGFyIGMgPSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLmNoYXJBdChpKTsKKyAgICAgICAgICAgIGlmIChjID09ICdIJyB8fCBjID09ICdoJyB8fCBjID09ICdLJyB8fCBjID09ICdrJykgeworICAgICAgICAgICAgICAgIGhvdXJGb3JtYXQgPSBjOworICAgICAgICAgICAgICAgIGlmIChpICsgMSA8IGxlbmd0aFBhdHRlcm4gJiYgYyA9PSBiZXN0RGF0ZVRpbWVQYXR0ZXJuLmNoYXJBdChpICsgMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaG91cldpdGhUd29EaWdpdCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZpbmFsIFN0cmluZyBmb3JtYXQ7CisgICAgICAgIGlmIChob3VyV2l0aFR3b0RpZ2l0KSB7CisgICAgICAgICAgICBmb3JtYXQgPSAiJTAyZCI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3JtYXQgPSAiJWQiOworICAgICAgICB9CisgICAgICAgIGlmIChtSXMyNEhvdXJWaWV3KSB7CisgICAgICAgICAgICAvLyAnaycgbWVhbnMgMS0yNCBob3VyCisgICAgICAgICAgICBpZiAoaG91ckZvcm1hdCA9PSAnaycgJiYgdmFsdWUgPT0gMCkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gMjQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyAnSycgbWVhbnMgMC0xMSBob3VyCisgICAgICAgICAgICB2YWx1ZSA9IG1vZHVsbzEyKHZhbHVlLCBob3VyRm9ybWF0ID09ICdLJyk7CisgICAgICAgIH0KKyAgICAgICAgQ2hhclNlcXVlbmNlIHRleHQgPSBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgdmFsdWUpOworICAgICAgICBtSG91clZpZXcuc2V0VGV4dCh0ZXh0KTsKKyAgICAgICAgaWYgKGFubm91bmNlKSB7CisgICAgICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5KHRleHQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IG1vZHVsbzEyKGludCBuLCBib29sZWFuIHN0YXJ0V2l0aFplcm8pIHsKKyAgICAgICAgaW50IHZhbHVlID0gbiAlIDEyOworICAgICAgICBpZiAodmFsdWUgPT0gMCAmJiAhc3RhcnRXaXRoWmVybykgeworICAgICAgICAgICAgdmFsdWUgPSAxMjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhlIHRpbWUgc2VwYXJhdG9yIGlzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgQ0xEUiBhbmQgY2Fubm90IGJlIHN1cHBvc2VkIHRvIGJlICI6Ii4KKyAgICAgKgorICAgICAqIFNlZSBodHRwOi8vdW5pY29kZS5vcmcvY2xkci90cmFjL2Jyb3dzZXIvdHJ1bmsvY29tbW9uL21haW4KKyAgICAgKgorICAgICAqIFdlIHBhc3MgdGhlIGNvcnJlY3QgInNrZWxldG9uIiBkZXBlbmRpbmcgb24gMTIgb3IgMjQgaG91cnMgdmlldyBhbmQgdGhlbiBleHRyYWN0IHRoZQorICAgICAqIHNlcGFyYXRvciBhcyB0aGUgY2hhcmFjdGVyIHdoaWNoIGlzIGp1c3QgYWZ0ZXIgdGhlIGhvdXIgbWFya2VyIGluIHRoZSByZXR1cm5lZCBwYXR0ZXJuLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVIZWFkZXJTZXBhcmF0b3IoKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBiZXN0RGF0ZVRpbWVQYXR0ZXJuID0gRGF0ZUZvcm1hdC5nZXRCZXN0RGF0ZVRpbWVQYXR0ZXJuKG1DdXJyZW50TG9jYWxlLAorICAgICAgICAgICAgICAgIChtSXMyNEhvdXJWaWV3KSA/ICJIbSIgOiAiaG0iKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHNlcGFyYXRvclRleHQ7CisgICAgICAgIC8vIFNlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwgZm9yIGhvdXIgZm9ybWF0cworICAgICAgICBmaW5hbCBjaGFyW10gaG91ckZvcm1hdHMgPSB7J0gnLCAnaCcsICdLJywgJ2snfTsKKyAgICAgICAgaW50IGhJbmRleCA9IGxhc3RJbmRleE9mQW55KGJlc3REYXRlVGltZVBhdHRlcm4sIGhvdXJGb3JtYXRzKTsKKyAgICAgICAgaWYgKGhJbmRleCA9PSAtMSkgeworICAgICAgICAgICAgLy8gRGVmYXVsdCBjYXNlCisgICAgICAgICAgICBzZXBhcmF0b3JUZXh0ID0gIjoiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VwYXJhdG9yVGV4dCA9IENoYXJhY3Rlci50b1N0cmluZyhiZXN0RGF0ZVRpbWVQYXR0ZXJuLmNoYXJBdChoSW5kZXggKyAxKSk7CisgICAgICAgIH0KKyAgICAgICAgbVNlcGFyYXRvclZpZXcuc2V0VGV4dChzZXBhcmF0b3JUZXh0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHJpdmF0ZSBpbnQgbGFzdEluZGV4T2ZBbnkoU3RyaW5nIHN0ciwgY2hhcltdIGFueSkgeworICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoQW55ID0gYW55Lmxlbmd0aDsKKyAgICAgICAgaWYgKGxlbmd0aEFueSA+IDApIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBzdHIubGVuZ3RoKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgIGNoYXIgYyA9IHN0ci5jaGFyQXQoaSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBsZW5ndGhBbnk7IGorKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSBhbnlbal0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlSGVhZGVyTWludXRlKGludCB2YWx1ZSkgeworICAgICAgICBpZiAodmFsdWUgPT0gNjApIHsKKyAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAgfQorICAgICAgICBDaGFyU2VxdWVuY2UgdGV4dCA9IFN0cmluZy5mb3JtYXQobUN1cnJlbnRMb2NhbGUsICIlMDJkIiwgdmFsdWUpOworICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5KHRleHQpOworICAgICAgICBtTWludXRlVmlldy5zZXRUZXh0KHRleHQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNob3cgZWl0aGVyIEhvdXJzIG9yIE1pbnV0ZXMuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHNldEN1cnJlbnRJdGVtU2hvd2luZyhpbnQgaW5kZXgsIGJvb2xlYW4gYW5pbWF0ZUNpcmNsZSwgYm9vbGVhbiBkZWxheUxhYmVsQW5pbWF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYW5ub3VuY2UpIHsKKyAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LnNldEN1cnJlbnRJdGVtU2hvd2luZyhpbmRleCwgYW5pbWF0ZUNpcmNsZSk7CisKKyAgICAgICAgVGV4dFZpZXcgbGFiZWxUb0FuaW1hdGU7CisgICAgICAgIGlmIChpbmRleCA9PSBIT1VSX0lOREVYKSB7CisgICAgICAgICAgICBpbnQgaG91cnMgPSBtUmFkaWFsVGltZVBpY2tlclZpZXcuZ2V0Q3VycmVudEhvdXIoKTsKKyAgICAgICAgICAgIGlmICghbUlzMjRIb3VyVmlldykgeworICAgICAgICAgICAgICAgIGhvdXJzID0gaG91cnMgJSAxMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5zZXRDb250ZW50RGVzY3JpcHRpb24obUhvdXJQaWNrZXJEZXNjcmlwdGlvbiArICI6ICIgKyBob3Vycyk7CisgICAgICAgICAgICBpZiAoYW5ub3VuY2UpIHsKKyAgICAgICAgICAgICAgICBtUmFkaWFsVGltZVBpY2tlclZpZXcuYW5ub3VuY2VGb3JBY2Nlc3NpYmlsaXR5KG1TZWxlY3RIb3Vycyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYWJlbFRvQW5pbWF0ZSA9IG1Ib3VyVmlldzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBtaW51dGVzID0gbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmdldEN1cnJlbnRNaW51dGUoKTsKKyAgICAgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5zZXRDb250ZW50RGVzY3JpcHRpb24obU1pbnV0ZVBpY2tlckRlc2NyaXB0aW9uICsgIjogIiArIG1pbnV0ZXMpOworICAgICAgICAgICAgaWYgKGFubm91bmNlKSB7CisgICAgICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmFubm91bmNlRm9yQWNjZXNzaWJpbGl0eShtU2VsZWN0TWludXRlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYWJlbFRvQW5pbWF0ZSA9IG1NaW51dGVWaWV3OworICAgICAgICB9CisKKyAgICAgICAgaW50IGhvdXJDb2xvciA9IChpbmRleCA9PSBIT1VSX0lOREVYKSA/IG1IZWFkZXJTZWxlY3RlZENvbG9yIDogbUhlYWRlclVuU2VsZWN0ZWRDb2xvcjsKKyAgICAgICAgaW50IG1pbnV0ZUNvbG9yID0gKGluZGV4ID09IE1JTlVURV9JTkRFWCkgPyBtSGVhZGVyU2VsZWN0ZWRDb2xvciA6IG1IZWFkZXJVblNlbGVjdGVkQ29sb3I7CisgICAgICAgIG1Ib3VyVmlldy5zZXRUZXh0Q29sb3IoaG91ckNvbG9yKTsKKyAgICAgICAgbU1pbnV0ZVZpZXcuc2V0VGV4dENvbG9yKG1pbnV0ZUNvbG9yKTsKKworICAgICAgICBPYmplY3RBbmltYXRvciBwdWxzZUFuaW1hdG9yID0gZ2V0UHVsc2VBbmltYXRvcihsYWJlbFRvQW5pbWF0ZSwgMC44NWYsIDEuMWYpOworICAgICAgICBpZiAoZGVsYXlMYWJlbEFuaW1hdGUpIHsKKyAgICAgICAgICAgIHB1bHNlQW5pbWF0b3Iuc2V0U3RhcnREZWxheShQVUxTRV9BTklNQVRPUl9ERUxBWSk7CisgICAgICAgIH0KKyAgICAgICAgcHVsc2VBbmltYXRvci5zdGFydCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZvciBrZXlib2FyZCBtb2RlLCBwcm9jZXNzZXMga2V5IGV2ZW50cy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBrZXlDb2RlIHRoZSBwcmVzc2VkIGtleS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUga2V5IHdhcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIHByb2Nlc3NLZXlVcChpbnQga2V5Q29kZSkgeworICAgICAgICBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX0VTQ0FQRSB8fCBrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfQkFDSykgeworICAgICAgICAgICAgaWYgKG1EaXNtaXNzQ2FsbGJhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1EaXNtaXNzQ2FsbGJhY2suZGlzbWlzcyhtRGVsZWdhdG9yLCB0cnVlLCBnZXRDdXJyZW50SG91cigpLCBnZXRDdXJyZW50TWludXRlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX1RBQikgeworICAgICAgICAgICAgaWYobUluS2JNb2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzVHlwZWRUaW1lRnVsbHlMZWdhbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmlzaEtiTW9kZSh0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX0VOVEVSKSB7CisgICAgICAgICAgICBpZiAobUluS2JNb2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc1R5cGVkVGltZUZ1bGx5TGVnYWwoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmluaXNoS2JNb2RlKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtT25UaW1lQ2hhbmdlZExpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtT25UaW1lQ2hhbmdlZExpc3RlbmVyLm9uVGltZUNoYW5nZWQobURlbGVnYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5nZXRDdXJyZW50SG91cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmdldEN1cnJlbnRNaW51dGUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobURpc21pc3NDYWxsYmFjayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbURpc21pc3NDYWxsYmFjay5kaXNtaXNzKG1EZWxlZ2F0b3IsIGZhbHNlLCBnZXRDdXJyZW50SG91cigpLCBnZXRDdXJyZW50TWludXRlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX0RFTCkgeworICAgICAgICAgICAgaWYgKG1JbktiTW9kZSkgeworICAgICAgICAgICAgICAgIGlmICghbVR5cGVkVGltZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBkZWxldGVkID0gZGVsZXRlTGFzdFR5cGVkS2V5KCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZWxldGVkS2V5U3RyOworICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZXRlZCA9PSBnZXRBbU9yUG1LZXlDb2RlKEFNKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEtleVN0ciA9IG1BbVRleHQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVsZXRlZCA9PSBnZXRBbU9yUG1LZXlDb2RlKFBNKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEtleVN0ciA9IG1QbVRleHQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkS2V5U3RyID0gU3RyaW5nLmZvcm1hdCgiJWQiLCBnZXRWYWxGcm9tS2V5Q29kZShkZWxldGVkKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LmFubm91bmNlRm9yQWNjZXNzaWJpbGl0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KG1EZWxldGVkS2V5Rm9ybWF0LCBkZWxldGVkS2V5U3RyKSk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZURpc3BsYXkodHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV8wIHx8IGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV8xCisgICAgICAgICAgICAgICAgfHwga2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFXzIgfHwga2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFXzMKKyAgICAgICAgICAgICAgICB8fCBrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfNCB8fCBrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfNQorICAgICAgICAgICAgICAgIHx8IGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV82IHx8IGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV83CisgICAgICAgICAgICAgICAgfHwga2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFXzggfHwga2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFXzkKKyAgICAgICAgICAgICAgICB8fCAoIW1JczI0SG91clZpZXcgJiYKKyAgICAgICAgICAgICAgICAoa2V5Q29kZSA9PSBnZXRBbU9yUG1LZXlDb2RlKEFNKSB8fCBrZXlDb2RlID09IGdldEFtT3JQbUtleUNvZGUoUE0pKSkpIHsKKyAgICAgICAgICAgIGlmICghbUluS2JNb2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1SYWRpYWxUaW1lUGlja2VyVmlldyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNvbWV0aGluZydzIHdyb25nLCBiZWNhdXNlIHRpbWUgcGlja2VyIHNob3VsZCBkZWZpbml0ZWx5IG5vdCBiZSBudWxsLgorICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJVbmFibGUgdG8gaW5pdGlhdGUga2V5Ym9hcmQgbW9kZSwgVGltZVBpY2tlciB3YXMgbnVsbC4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1UeXBlZFRpbWVzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgdHJ5U3RhcnRpbmdLYk1vZGUoa2V5Q29kZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IGluIGtleWJvYXJkIG1vZGUuCisgICAgICAgICAgICBpZiAoYWRkS2V5SWZMZWdhbChrZXlDb2RlKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZURpc3BsYXkoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRyeSB0byBzdGFydCBrZXlib2FyZCBtb2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuCisgICAgICoKKyAgICAgKiBAcGFyYW0ga2V5Q29kZSBUaGUga2V5IHRvIHVzZSBhcyB0aGUgZmlyc3QgcHJlc3MuIEtleWJvYXJkIG1vZGUgd2lsbCBub3QgYmUgc3RhcnRlZCBpZiB0aGUKKyAgICAgKiBrZXkgaXMgbm90IGxlZ2FsIHRvIHN0YXJ0IHdpdGguIE9yLCBwYXNzIGluIC0xIHRvIGdldCBpbnRvIGtleWJvYXJkIG1vZGUgd2l0aG91dCBhIHN0YXJ0aW5nCisgICAgICoga2V5LgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB0cnlTdGFydGluZ0tiTW9kZShpbnQga2V5Q29kZSkgeworICAgICAgICBpZiAoa2V5Q29kZSA9PSAtMSB8fCBhZGRLZXlJZkxlZ2FsKGtleUNvZGUpKSB7CisgICAgICAgICAgICBtSW5LYk1vZGUgPSB0cnVlOworICAgICAgICAgICAgbURvbmVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICB1cGRhdGVEaXNwbGF5KGZhbHNlKTsKKyAgICAgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5zZXRJbnB1dEVuYWJsZWQoZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGFkZEtleUlmTGVnYWwoaW50IGtleUNvZGUpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgaW4gMjRob3VyIG1vZGUsIHdlJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGlucHV0IGlzIGZ1bGwuIElmIGluIEFNL1BNIG1vZGUsCisgICAgICAgIC8vIHdlJ2xsIG5lZWQgdG8gc2VlIGlmIEFNL1BNIGhhdmUgYmVlbiB0eXBlZC4KKyAgICAgICAgaWYgKChtSXMyNEhvdXJWaWV3ICYmIG1UeXBlZFRpbWVzLnNpemUoKSA9PSA0KSB8fAorICAgICAgICAgICAgICAgICghbUlzMjRIb3VyVmlldyAmJiBpc1R5cGVkVGltZUZ1bGx5TGVnYWwoKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1UeXBlZFRpbWVzLmFkZChrZXlDb2RlKTsKKyAgICAgICAgaWYgKCFpc1R5cGVkVGltZUxlZ2FsU29GYXIoKSkgeworICAgICAgICAgICAgZGVsZXRlTGFzdFR5cGVkS2V5KCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpbnQgdmFsID0gZ2V0VmFsRnJvbUtleUNvZGUoa2V5Q29kZSk7CisgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5hbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkoU3RyaW5nLmZvcm1hdCgiJWQiLCB2YWwpKTsKKyAgICAgICAgLy8gQXV0b21hdGljYWxseSBmaWxsIGluIDAncyBpZiBBTSBvciBQTSB3YXMgbGVnYWxseSBlbnRlcmVkLgorICAgICAgICBpZiAoaXNUeXBlZFRpbWVGdWxseUxlZ2FsKCkpIHsKKyAgICAgICAgICAgIGlmICghbUlzMjRIb3VyVmlldyAmJiBtVHlwZWRUaW1lcy5zaXplKCkgPD0gMykgeworICAgICAgICAgICAgICAgIG1UeXBlZFRpbWVzLmFkZChtVHlwZWRUaW1lcy5zaXplKCkgLSAxLCBLZXlFdmVudC5LRVlDT0RFXzApOworICAgICAgICAgICAgICAgIG1UeXBlZFRpbWVzLmFkZChtVHlwZWRUaW1lcy5zaXplKCkgLSAxLCBLZXlFdmVudC5LRVlDT0RFXzApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbURvbmVCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRyYXZlcnNlIHRoZSB0cmVlIHRvIHNlZSBpZiB0aGUga2V5cyB0aGF0IGhhdmUgYmVlbiB0eXBlZCBzbyBmYXIgYXJlIGxlZ2FsIGFzIGlzLAorICAgICAqIG9yIG1heSBiZWNvbWUgbGVnYWwgYXMgbW9yZSBrZXlzIGFyZSB0eXBlZCAoZXhjbHVkaW5nIGJhY2tzcGFjZSkuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGlzVHlwZWRUaW1lTGVnYWxTb0ZhcigpIHsKKyAgICAgICAgTm9kZSBub2RlID0gbUxlZ2FsVGltZXNUcmVlOworICAgICAgICBmb3IgKGludCBrZXlDb2RlIDogbVR5cGVkVGltZXMpIHsKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLmNhblJlYWNoKGtleUNvZGUpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgdGltZSB0aGF0IGhhcyBiZWVuIHR5cGVkIHNvIGZhciBpcyBjb21wbGV0ZWx5IGxlZ2FsLCBhcyBpcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaXNUeXBlZFRpbWVGdWxseUxlZ2FsKCkgeworICAgICAgICBpZiAobUlzMjRIb3VyVmlldykgeworICAgICAgICAgICAgLy8gRm9yIDI0LWhvdXIgbW9kZSwgdGhlIHRpbWUgaXMgbGVnYWwgaWYgdGhlIGhvdXJzIGFuZCBtaW51dGVzIGFyZSBlYWNoIGxlZ2FsLiBOb3RlOgorICAgICAgICAgICAgLy8gZ2V0RW50ZXJlZFRpbWUoKSB3aWxsIE9OTFkgY2FsbCBpc1R5cGVkVGltZUZ1bGx5TGVnYWwoKSB3aGVuIE5PVCBpbiAyNGhvdXIgbW9kZS4KKyAgICAgICAgICAgIGludFtdIHZhbHVlcyA9IGdldEVudGVyZWRUaW1lKG51bGwpOworICAgICAgICAgICAgcmV0dXJuICh2YWx1ZXNbMF0gPj0gMCAmJiB2YWx1ZXNbMV0gPj0gMCAmJiB2YWx1ZXNbMV0gPCA2MCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGb3IgQU0vUE0gbW9kZSwgdGhlIHRpbWUgaXMgbGVnYWwgaWYgaXQgY29udGFpbnMgYW4gQU0gb3IgUE0sIGFzIHRob3NlIGNhbiBvbmx5IGJlCisgICAgICAgICAgICAvLyBsZWdhbGx5IGFkZGVkIGF0IHNwZWNpZmljIHRpbWVzIGJhc2VkIG9uIHRoZSB0cmVlJ3MgYWxnb3JpdGhtLgorICAgICAgICAgICAgcmV0dXJuIChtVHlwZWRUaW1lcy5jb250YWlucyhnZXRBbU9yUG1LZXlDb2RlKEFNKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgbVR5cGVkVGltZXMuY29udGFpbnMoZ2V0QW1PclBtS2V5Q29kZShQTSkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgaW50IGRlbGV0ZUxhc3RUeXBlZEtleSgpIHsKKyAgICAgICAgaW50IGRlbGV0ZWQgPSBtVHlwZWRUaW1lcy5yZW1vdmUobVR5cGVkVGltZXMuc2l6ZSgpIC0gMSk7CisgICAgICAgIGlmICghaXNUeXBlZFRpbWVGdWxseUxlZ2FsKCkpIHsKKyAgICAgICAgICAgIG1Eb25lQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBkZWxldGVkOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBvdXQgb2Yga2V5Ym9hcmQgbW9kZS4gSWYgdGhlcmUgaXMgbm90aGluZyBpbiB0eXBlZFRpbWVzLCByZXZlcnQgdG8gVGltZVBpY2tlcidzIHRpbWUuCisgICAgICogQHBhcmFtIHVwZGF0ZURpc3BsYXlzIElmIHRydWUsIHVwZGF0ZSB0aGUgZGlzcGxheXMgd2l0aCB0aGUgcmVsZXZhbnQgdGltZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZmluaXNoS2JNb2RlKGJvb2xlYW4gdXBkYXRlRGlzcGxheXMpIHsKKyAgICAgICAgbUluS2JNb2RlID0gZmFsc2U7CisgICAgICAgIGlmICghbVR5cGVkVGltZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpbnQgdmFsdWVzW10gPSBnZXRFbnRlcmVkVGltZShudWxsKTsKKyAgICAgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5zZXRDdXJyZW50SG91cih2YWx1ZXNbMF0pOworICAgICAgICAgICAgbVJhZGlhbFRpbWVQaWNrZXJWaWV3LnNldEN1cnJlbnRNaW51dGUodmFsdWVzWzFdKTsKKyAgICAgICAgICAgIGlmICghbUlzMjRIb3VyVmlldykgeworICAgICAgICAgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5zZXRBbU9yUG0odmFsdWVzWzJdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1UeXBlZFRpbWVzLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVwZGF0ZURpc3BsYXlzKSB7CisgICAgICAgICAgICB1cGRhdGVEaXNwbGF5KGZhbHNlKTsKKyAgICAgICAgICAgIG1SYWRpYWxUaW1lUGlja2VyVmlldy5zZXRJbnB1dEVuYWJsZWQodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGhvdXJzLCBtaW51dGVzLCBhbmQgQU0vUE0gZGlzcGxheXMgd2l0aCB0aGUgdHlwZWQgdGltZXMuIElmIHRoZSB0eXBlZFRpbWVzIGlzCisgICAgICogZW1wdHksIGVpdGhlciBzaG93IGFuIGVtcHR5IGRpc3BsYXkgKGZpbGxlZCB3aXRoIHRoZSBwbGFjZWhvbGRlciB0ZXh0KSwgb3IgdXBkYXRlIGZyb20gdGhlCisgICAgICogdGltZXBpY2tlcidzIHZhbHVlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhbGxvd0VtcHR5RGlzcGxheSBpZiB0cnVlLCB0aGVuIGlmIHRoZSB0eXBlZFRpbWVzIGlzIGVtcHR5LCB1c2UgdGhlIHBsYWNlaG9sZGVyIHRleHQuCisgICAgICogT3RoZXJ3aXNlLCByZXZlcnQgdG8gdGhlIHRpbWVwaWNrZXIncyB2YWx1ZXMuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZURpc3BsYXkoYm9vbGVhbiBhbGxvd0VtcHR5RGlzcGxheSkgeworICAgICAgICBpZiAoIWFsbG93RW1wdHlEaXNwbGF5ICYmIG1UeXBlZFRpbWVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaW50IGhvdXIgPSBtUmFkaWFsVGltZVBpY2tlclZpZXcuZ2V0Q3VycmVudEhvdXIoKTsKKyAgICAgICAgICAgIGludCBtaW51dGUgPSBtUmFkaWFsVGltZVBpY2tlclZpZXcuZ2V0Q3VycmVudE1pbnV0ZSgpOworICAgICAgICAgICAgdXBkYXRlSGVhZGVySG91cihob3VyLCB0cnVlKTsKKyAgICAgICAgICAgIHVwZGF0ZUhlYWRlck1pbnV0ZShtaW51dGUpOworICAgICAgICAgICAgaWYgKCFtSXMyNEhvdXJWaWV3KSB7CisgICAgICAgICAgICAgICAgdXBkYXRlQW1QbURpc3BsYXkoaG91ciA8IDEyID8gQU0gOiBQTSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRDdXJyZW50SXRlbVNob3dpbmcobVJhZGlhbFRpbWVQaWNrZXJWaWV3LmdldEN1cnJlbnRJdGVtU2hvd2luZygpLCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIG1Eb25lQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib29sZWFuW10gZW50ZXJlZFplcm9zID0ge2ZhbHNlLCBmYWxzZX07CisgICAgICAgICAgICBpbnRbXSB2YWx1ZXMgPSBnZXRFbnRlcmVkVGltZShlbnRlcmVkWmVyb3MpOworICAgICAgICAgICAgU3RyaW5nIGhvdXJGb3JtYXQgPSBlbnRlcmVkWmVyb3NbMF0gPyAiJTAyZCIgOiAiJTJkIjsKKyAgICAgICAgICAgIFN0cmluZyBtaW51dGVGb3JtYXQgPSAoZW50ZXJlZFplcm9zWzFdKSA/ICIlMDJkIiA6ICIlMmQiOworICAgICAgICAgICAgU3RyaW5nIGhvdXJTdHIgPSAodmFsdWVzWzBdID09IC0xKSA/IG1Eb3VibGVQbGFjZWhvbGRlclRleHQgOgorICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KGhvdXJGb3JtYXQsIHZhbHVlc1swXSkucmVwbGFjZSgnICcsIG1QbGFjZWhvbGRlclRleHQpOworICAgICAgICAgICAgU3RyaW5nIG1pbnV0ZVN0ciA9ICh2YWx1ZXNbMV0gPT0gLTEpID8gbURvdWJsZVBsYWNlaG9sZGVyVGV4dCA6CisgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQobWludXRlRm9ybWF0LCB2YWx1ZXNbMV0pLnJlcGxhY2UoJyAnLCBtUGxhY2Vob2xkZXJUZXh0KTsKKyAgICAgICAgICAgIG1Ib3VyVmlldy5zZXRUZXh0KGhvdXJTdHIpOworICAgICAgICAgICAgbUhvdXJWaWV3LnNldFRleHRDb2xvcihtSGVhZGVyVW5TZWxlY3RlZENvbG9yKTsKKyAgICAgICAgICAgIG1NaW51dGVWaWV3LnNldFRleHQobWludXRlU3RyKTsKKyAgICAgICAgICAgIG1NaW51dGVWaWV3LnNldFRleHRDb2xvcihtSGVhZGVyVW5TZWxlY3RlZENvbG9yKTsKKyAgICAgICAgICAgIGlmICghbUlzMjRIb3VyVmlldykgeworICAgICAgICAgICAgICAgIHVwZGF0ZUFtUG1EaXNwbGF5KHZhbHVlc1syXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGludCBnZXRWYWxGcm9tS2V5Q29kZShpbnQga2V5Q29kZSkgeworICAgICAgICBzd2l0Y2ggKGtleUNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV8wOgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFXzE6CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV8zOgorICAgICAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFXzQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfNToKKyAgICAgICAgICAgICAgICByZXR1cm4gNTsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV82OgorICAgICAgICAgICAgICAgIHJldHVybiA2OworICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFXzc6CisgICAgICAgICAgICAgICAgcmV0dXJuIDc7CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfODoKKyAgICAgICAgICAgICAgICByZXR1cm4gODsKKyAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV85OgorICAgICAgICAgICAgICAgIHJldHVybiA5OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnRseS1lbnRlcmVkIHRpbWUsIGFzIGludGVnZXIgdmFsdWVzIG9mIHRoZSBob3VycyBhbmQgbWludXRlcyB0eXBlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBlbnRlcmVkWmVyb3MgQSBzaXplLTIgYm9vbGVhbiBhcnJheSwgd2hpY2ggdGhlIGNhbGxlciBzaG91bGQgaW5pdGlhbGl6ZSwgYW5kIHdoaWNoCisgICAgICogbWF5IHRoZW4gYmUgdXNlZCBmb3IgdGhlIGNhbGxlciB0byBrbm93IHdoZXRoZXIgemVyb3MgaGFkIGJlZW4gZXhwbGljaXRseSBlbnRlcmVkIGFzIGVpdGhlcgorICAgICAqIGhvdXJzIG9mIG1pbnV0ZXMuIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVjaWRpbmcgd2hldGhlciB0byBzaG93IHRoZSBkYXNoZXMsIG9yIGFjdHVhbCAwJ3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgc2l6ZS0zIGludCBhcnJheS4gVGhlIGZpcnN0IHZhbHVlIHdpbGwgYmUgdGhlIGhvdXJzLCB0aGUgc2Vjb25kIHZhbHVlIHdpbGwgYmUgdGhlCisgICAgICogbWludXRlcywgYW5kIHRoZSB0aGlyZCB3aWxsIGJlIGVpdGhlciBBTSBvciBQTS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludFtdIGdldEVudGVyZWRUaW1lKGJvb2xlYW5bXSBlbnRlcmVkWmVyb3MpIHsKKyAgICAgICAgaW50IGFtT3JQbSA9IC0xOworICAgICAgICBpbnQgc3RhcnRJbmRleCA9IDE7CisgICAgICAgIGlmICghbUlzMjRIb3VyVmlldyAmJiBpc1R5cGVkVGltZUZ1bGx5TGVnYWwoKSkgeworICAgICAgICAgICAgaW50IGtleUNvZGUgPSBtVHlwZWRUaW1lcy5nZXQobVR5cGVkVGltZXMuc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICBpZiAoa2V5Q29kZSA9PSBnZXRBbU9yUG1LZXlDb2RlKEFNKSkgeworICAgICAgICAgICAgICAgIGFtT3JQbSA9IEFNOworICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09IGdldEFtT3JQbUtleUNvZGUoUE0pKXsKKyAgICAgICAgICAgICAgICBhbU9yUG0gPSBQTTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAyOworICAgICAgICB9CisgICAgICAgIGludCBtaW51dGUgPSAtMTsKKyAgICAgICAgaW50IGhvdXIgPSAtMTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gbVR5cGVkVGltZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGludCB2YWwgPSBnZXRWYWxGcm9tS2V5Q29kZShtVHlwZWRUaW1lcy5nZXQobVR5cGVkVGltZXMuc2l6ZSgpIC0gaSkpOworICAgICAgICAgICAgaWYgKGkgPT0gc3RhcnRJbmRleCkgeworICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHZhbDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PSBzdGFydEluZGV4KzEpIHsKKyAgICAgICAgICAgICAgICBtaW51dGUgKz0gMTAgKiB2YWw7CisgICAgICAgICAgICAgICAgaWYgKGVudGVyZWRaZXJvcyAhPSBudWxsICYmIHZhbCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGVudGVyZWRaZXJvc1sxXSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpID09IHN0YXJ0SW5kZXgrMikgeworICAgICAgICAgICAgICAgIGhvdXIgPSB2YWw7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT0gc3RhcnRJbmRleCszKSB7CisgICAgICAgICAgICAgICAgaG91ciArPSAxMCAqIHZhbDsKKyAgICAgICAgICAgICAgICBpZiAoZW50ZXJlZFplcm9zICE9IG51bGwgJiYgdmFsID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZW50ZXJlZFplcm9zWzBdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnRbXSByZXQgPSB7aG91ciwgbWludXRlLCBhbU9yUG19OworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUga2V5Y29kZSB2YWx1ZSBmb3IgQU0gYW5kIFBNIGluIHRoZSBjdXJyZW50IGxhbmd1YWdlLgorICAgICAqLworICAgIHByaXZhdGUgaW50IGdldEFtT3JQbUtleUNvZGUoaW50IGFtT3JQbSkgeworICAgICAgICAvLyBDYWNoZSB0aGUgY29kZXMuCisgICAgICAgIGlmIChtQW1LZXlDb2RlID09IC0xIHx8IG1QbUtleUNvZGUgPT0gLTEpIHsKKyAgICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgQU0vUE0gdGV4dCB0aGF0IGlzIHVuaXF1ZS4KKyAgICAgICAgICAgIEtleUNoYXJhY3Rlck1hcCBrY20gPSBLZXlDaGFyYWN0ZXJNYXAubG9hZChLZXlDaGFyYWN0ZXJNYXAuVklSVFVBTF9LRVlCT0FSRCk7CisgICAgICAgICAgICBjaGFyIGFtQ2hhcjsKKyAgICAgICAgICAgIGNoYXIgcG1DaGFyOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNYXRoLm1heChtQW1UZXh0Lmxlbmd0aCgpLCBtUG1UZXh0Lmxlbmd0aCgpKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgYW1DaGFyID0gbUFtVGV4dC50b0xvd2VyQ2FzZShtQ3VycmVudExvY2FsZSkuY2hhckF0KGkpOworICAgICAgICAgICAgICAgIHBtQ2hhciA9IG1QbVRleHQudG9Mb3dlckNhc2UobUN1cnJlbnRMb2NhbGUpLmNoYXJBdChpKTsKKyAgICAgICAgICAgICAgICBpZiAoYW1DaGFyICE9IHBtQ2hhcikgeworICAgICAgICAgICAgICAgICAgICBLZXlFdmVudFtdIGV2ZW50cyA9IGtjbS5nZXRFdmVudHMobmV3IGNoYXJbXXthbUNoYXIsIHBtQ2hhcn0pOworICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBzaG91bGQgYmUgNCBldmVudHM6IGEgZG93biBhbmQgdXAgZm9yIGJvdGggQU0gYW5kIFBNLgorICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnRzICE9IG51bGwgJiYgZXZlbnRzLmxlbmd0aCA9PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtQW1LZXlDb2RlID0gZXZlbnRzWzBdLmdldEtleUNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1QbUtleUNvZGUgPSBldmVudHNbMl0uZ2V0S2V5Q29kZSgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiVW5hYmxlIHRvIGZpbmQga2V5Y29kZXMgZm9yIEFNIGFuZCBQTS4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFtT3JQbSA9PSBBTSkgeworICAgICAgICAgICAgcmV0dXJuIG1BbUtleUNvZGU7CisgICAgICAgIH0gZWxzZSBpZiAoYW1PclBtID09IFBNKSB7CisgICAgICAgICAgICByZXR1cm4gbVBtS2V5Q29kZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSB0cmVlIGZvciBkZWNpZGluZyB3aGF0IGtleXMgY2FuIGxlZ2FsbHkgYmUgdHlwZWQuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGdlbmVyYXRlTGVnYWxUaW1lc1RyZWUoKSB7CisgICAgICAgIC8vIENyZWF0ZSBhIHF1aWNrIGNhY2hlIG9mIG51bWJlcnMgdG8gdGhlaXIga2V5Y29kZXMuCisgICAgICAgIGZpbmFsIGludCBrMCA9IEtleUV2ZW50LktFWUNPREVfMDsKKyAgICAgICAgZmluYWwgaW50IGsxID0gS2V5RXZlbnQuS0VZQ09ERV8xOworICAgICAgICBmaW5hbCBpbnQgazIgPSBLZXlFdmVudC5LRVlDT0RFXzI7CisgICAgICAgIGZpbmFsIGludCBrMyA9IEtleUV2ZW50LktFWUNPREVfMzsKKyAgICAgICAgZmluYWwgaW50IGs0ID0gS2V5RXZlbnQuS0VZQ09ERV80OworICAgICAgICBmaW5hbCBpbnQgazUgPSBLZXlFdmVudC5LRVlDT0RFXzU7CisgICAgICAgIGZpbmFsIGludCBrNiA9IEtleUV2ZW50LktFWUNPREVfNjsKKyAgICAgICAgZmluYWwgaW50IGs3ID0gS2V5RXZlbnQuS0VZQ09ERV83OworICAgICAgICBmaW5hbCBpbnQgazggPSBLZXlFdmVudC5LRVlDT0RFXzg7CisgICAgICAgIGZpbmFsIGludCBrOSA9IEtleUV2ZW50LktFWUNPREVfOTsKKworICAgICAgICAvLyBUaGUgcm9vdCBvZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4gYW55IG51bWJlcnMuCisgICAgICAgIG1MZWdhbFRpbWVzVHJlZSA9IG5ldyBOb2RlKCk7CisgICAgICAgIGlmIChtSXMyNEhvdXJWaWV3KSB7CisgICAgICAgICAgICAvLyBXZSdsbCBiZSByZS11c2luZyB0aGVzZSBub2Rlcywgc28gd2UnbGwgc2F2ZSB0aGVtLgorICAgICAgICAgICAgTm9kZSBtaW51dGVGaXJzdERpZ2l0ID0gbmV3IE5vZGUoazAsIGsxLCBrMiwgazMsIGs0LCBrNSk7CisgICAgICAgICAgICBOb2RlIG1pbnV0ZVNlY29uZERpZ2l0ID0gbmV3IE5vZGUoazAsIGsxLCBrMiwgazMsIGs0LCBrNSwgazYsIGs3LCBrOCwgazkpOworICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGRpZ2l0IG11c3QgYmUgZm9sbG93ZWQgYnkgdGhlIHNlY29uZCBkaWdpdC4KKyAgICAgICAgICAgIG1pbnV0ZUZpcnN0RGlnaXQuYWRkQ2hpbGQobWludXRlU2Vjb25kRGlnaXQpOworCisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgZGlnaXQgbWF5IGJlIDAtMS4KKyAgICAgICAgICAgIE5vZGUgZmlyc3REaWdpdCA9IG5ldyBOb2RlKGswLCBrMSk7CisgICAgICAgICAgICBtTGVnYWxUaW1lc1RyZWUuYWRkQ2hpbGQoZmlyc3REaWdpdCk7CisKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZpcnN0IGRpZ2l0IGlzIDAtMSwgdGhlIHNlY29uZCBkaWdpdCBtYXkgYmUgMC01LgorICAgICAgICAgICAgTm9kZSBzZWNvbmREaWdpdCA9IG5ldyBOb2RlKGswLCBrMSwgazIsIGszLCBrNCwgazUpOworICAgICAgICAgICAgZmlyc3REaWdpdC5hZGRDaGlsZChzZWNvbmREaWdpdCk7CisgICAgICAgICAgICAvLyBXZSBtYXkgbm93IGJlIGZvbGxvd2VkIGJ5IHRoZSBmaXJzdCBtaW51dGUgZGlnaXQuIEUuZy4gMDA6MDksIDE1OjU4LgorICAgICAgICAgICAgc2Vjb25kRGlnaXQuYWRkQ2hpbGQobWludXRlRmlyc3REaWdpdCk7CisKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZpcnN0IGRpZ2l0IGlzIDAtMSwgYW5kIHRoZSBzZWNvbmQgZGlnaXQgaXMgMC01LCB0aGUgdGhpcmQgZGlnaXQgbWF5IGJlIDYtOS4KKyAgICAgICAgICAgIE5vZGUgdGhpcmREaWdpdCA9IG5ldyBOb2RlKGs2LCBrNywgazgsIGs5KTsKKyAgICAgICAgICAgIC8vIFRoZSB0aW1lIG11c3Qgbm93IGJlIGZpbmlzaGVkLiBFLmcuIDA6NTUsIDE6MDguCisgICAgICAgICAgICBzZWNvbmREaWdpdC5hZGRDaGlsZCh0aGlyZERpZ2l0KTsKKworICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3QgZGlnaXQgaXMgMC0xLCB0aGUgc2Vjb25kIGRpZ2l0IG1heSBiZSA2LTkuCisgICAgICAgICAgICBzZWNvbmREaWdpdCA9IG5ldyBOb2RlKGs2LCBrNywgazgsIGs5KTsKKyAgICAgICAgICAgIGZpcnN0RGlnaXQuYWRkQ2hpbGQoc2Vjb25kRGlnaXQpOworICAgICAgICAgICAgLy8gV2UgbXVzdCBub3cgYmUgZm9sbG93ZWQgYnkgdGhlIGZpcnN0IG1pbnV0ZSBkaWdpdC4gRS5nLiAwNjo1MCwgMTg6MjAuCisgICAgICAgICAgICBzZWNvbmREaWdpdC5hZGRDaGlsZChtaW51dGVGaXJzdERpZ2l0KTsKKworICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGRpZ2l0IG1heSBiZSAyLgorICAgICAgICAgICAgZmlyc3REaWdpdCA9IG5ldyBOb2RlKGsyKTsKKyAgICAgICAgICAgIG1MZWdhbFRpbWVzVHJlZS5hZGRDaGlsZChmaXJzdERpZ2l0KTsKKworICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3QgZGlnaXQgaXMgMiwgdGhlIHNlY29uZCBkaWdpdCBtYXkgYmUgMC0zLgorICAgICAgICAgICAgc2Vjb25kRGlnaXQgPSBuZXcgTm9kZShrMCwgazEsIGsyLCBrMyk7CisgICAgICAgICAgICBmaXJzdERpZ2l0LmFkZENoaWxkKHNlY29uZERpZ2l0KTsKKyAgICAgICAgICAgIC8vIFdlIG11c3Qgbm93IGJlIGZvbGxvd2VkIGJ5IHRoZSBmaXJzdCBtaW51dGUgZGlnaXQuIEUuZy4gMjA6NTAsIDIzOjA5LgorICAgICAgICAgICAgc2Vjb25kRGlnaXQuYWRkQ2hpbGQobWludXRlRmlyc3REaWdpdCk7CisKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZpcnN0IGRpZ2l0IGlzIDIsIHRoZSBzZWNvbmQgZGlnaXQgbWF5IGJlIDQtNS4KKyAgICAgICAgICAgIHNlY29uZERpZ2l0ID0gbmV3IE5vZGUoazQsIGs1KTsKKyAgICAgICAgICAgIGZpcnN0RGlnaXQuYWRkQ2hpbGQoc2Vjb25kRGlnaXQpOworICAgICAgICAgICAgLy8gV2UgbXVzdCBub3cgYmUgZm9sbG93ZCBieSB0aGUgbGFzdCBtaW51dGUgZGlnaXQuIEUuZy4gMjo0MCwgMjo1My4KKyAgICAgICAgICAgIHNlY29uZERpZ2l0LmFkZENoaWxkKG1pbnV0ZVNlY29uZERpZ2l0KTsKKworICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGRpZ2l0IG1heSBiZSAzLTkuCisgICAgICAgICAgICBmaXJzdERpZ2l0ID0gbmV3IE5vZGUoazMsIGs0LCBrNSwgazYsIGs3LCBrOCwgazkpOworICAgICAgICAgICAgbUxlZ2FsVGltZXNUcmVlLmFkZENoaWxkKGZpcnN0RGlnaXQpOworICAgICAgICAgICAgLy8gV2UgbXVzdCBub3cgYmUgZm9sbG93ZWQgYnkgdGhlIGZpcnN0IG1pbnV0ZSBkaWdpdC4gRS5nLiAzOjU3LCA4OjEyLgorICAgICAgICAgICAgZmlyc3REaWdpdC5hZGRDaGlsZChtaW51dGVGaXJzdERpZ2l0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlJ2xsIG5lZWQgdG8gdXNlIHRoZSBBTS9QTSBub2RlIGEgbG90LgorICAgICAgICAgICAgLy8gU2V0IHVwIEFNIGFuZCBQTSB0byByZXNwb25kIHRvICJhIiBhbmQgInAiLgorICAgICAgICAgICAgTm9kZSBhbXBtID0gbmV3IE5vZGUoZ2V0QW1PclBtS2V5Q29kZShBTSksIGdldEFtT3JQbUtleUNvZGUoUE0pKTsKKworICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGhvdXIgZGlnaXQgbWF5IGJlIDEuCisgICAgICAgICAgICBOb2RlIGZpcnN0RGlnaXQgPSBuZXcgTm9kZShrMSk7CisgICAgICAgICAgICBtTGVnYWxUaW1lc1RyZWUuYWRkQ2hpbGQoZmlyc3REaWdpdCk7CisgICAgICAgICAgICAvLyBXZSdsbCBhbGxvdyBxdWljayBpbnB1dCBvZiBvbi10aGUtaG91ciB0aW1lcy4gRS5nLiAxcG0uCisgICAgICAgICAgICBmaXJzdERpZ2l0LmFkZENoaWxkKGFtcG0pOworCisgICAgICAgICAgICAvLyBXaGVuIHRoZSBmaXJzdCBkaWdpdCBpcyAxLCB0aGUgc2Vjb25kIGRpZ2l0IG1heSBiZSAwLTIuCisgICAgICAgICAgICBOb2RlIHNlY29uZERpZ2l0ID0gbmV3IE5vZGUoazAsIGsxLCBrMik7CisgICAgICAgICAgICBmaXJzdERpZ2l0LmFkZENoaWxkKHNlY29uZERpZ2l0KTsKKyAgICAgICAgICAgIC8vIEFsc28gZm9yIHF1aWNrIGlucHV0IG9mIG9uLXRoZS1ob3VyIHRpbWVzLiBFLmcuIDEwcG0sIDEyYW0uCisgICAgICAgICAgICBzZWNvbmREaWdpdC5hZGRDaGlsZChhbXBtKTsKKworICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3QgZGlnaXQgaXMgMSwgYW5kIHRoZSBzZWNvbmQgZGlnaXQgaXMgMC0yLCB0aGUgdGhpcmQgZGlnaXQgbWF5IGJlIDAtNS4KKyAgICAgICAgICAgIE5vZGUgdGhpcmREaWdpdCA9IG5ldyBOb2RlKGswLCBrMSwgazIsIGszLCBrNCwgazUpOworICAgICAgICAgICAgc2Vjb25kRGlnaXQuYWRkQ2hpbGQodGhpcmREaWdpdCk7CisgICAgICAgICAgICAvLyBUaGUgdGltZSBtYXkgYmUgZmluaXNoZWQgbm93LiBFLmcuIDE6MDJwbSwgMToyNWFtLgorICAgICAgICAgICAgdGhpcmREaWdpdC5hZGRDaGlsZChhbXBtKTsKKworICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3QgZGlnaXQgaXMgMSwgdGhlIHNlY29uZCBkaWdpdCBpcyAwLTIsIGFuZCB0aGUgdGhpcmQgZGlnaXQgaXMgMC01LAorICAgICAgICAgICAgLy8gdGhlIGZvdXJ0aCBkaWdpdCBtYXkgYmUgMC05LgorICAgICAgICAgICAgTm9kZSBmb3VydGhEaWdpdCA9IG5ldyBOb2RlKGswLCBrMSwgazIsIGszLCBrNCwgazUsIGs2LCBrNywgazgsIGs5KTsKKyAgICAgICAgICAgIHRoaXJkRGlnaXQuYWRkQ2hpbGQoZm91cnRoRGlnaXQpOworICAgICAgICAgICAgLy8gVGhlIHRpbWUgbXVzdCBiZSBmaW5pc2hlZCBub3cuIEUuZy4gMTA6NDlhbSwgMTI6NDBwbS4KKyAgICAgICAgICAgIGZvdXJ0aERpZ2l0LmFkZENoaWxkKGFtcG0pOworCisgICAgICAgICAgICAvLyBXaGVuIHRoZSBmaXJzdCBkaWdpdCBpcyAxLCBhbmQgdGhlIHNlY29uZCBkaWdpdCBpcyAwLTIsIHRoZSB0aGlyZCBkaWdpdCBtYXkgYmUgNi05LgorICAgICAgICAgICAgdGhpcmREaWdpdCA9IG5ldyBOb2RlKGs2LCBrNywgazgsIGs5KTsKKyAgICAgICAgICAgIHNlY29uZERpZ2l0LmFkZENoaWxkKHRoaXJkRGlnaXQpOworICAgICAgICAgICAgLy8gVGhlIHRpbWUgbXVzdCBiZSBmaW5pc2hlZCBub3cuIEUuZy4gMTowOGFtLCAxOjI2cG0uCisgICAgICAgICAgICB0aGlyZERpZ2l0LmFkZENoaWxkKGFtcG0pOworCisgICAgICAgICAgICAvLyBXaGVuIHRoZSBmaXJzdCBkaWdpdCBpcyAxLCB0aGUgc2Vjb25kIGRpZ2l0IG1heSBiZSAzLTUuCisgICAgICAgICAgICBzZWNvbmREaWdpdCA9IG5ldyBOb2RlKGszLCBrNCwgazUpOworICAgICAgICAgICAgZmlyc3REaWdpdC5hZGRDaGlsZChzZWNvbmREaWdpdCk7CisKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZpcnN0IGRpZ2l0IGlzIDEsIGFuZCB0aGUgc2Vjb25kIGRpZ2l0IGlzIDMtNSwgdGhlIHRoaXJkIGRpZ2l0IG1heSBiZSAwLTkuCisgICAgICAgICAgICB0aGlyZERpZ2l0ID0gbmV3IE5vZGUoazAsIGsxLCBrMiwgazMsIGs0LCBrNSwgazYsIGs3LCBrOCwgazkpOworICAgICAgICAgICAgc2Vjb25kRGlnaXQuYWRkQ2hpbGQodGhpcmREaWdpdCk7CisgICAgICAgICAgICAvLyBUaGUgdGltZSBtdXN0IGJlIGZpbmlzaGVkIG5vdy4gRS5nLiAxOjM5YW0sIDE6NTBwbS4KKyAgICAgICAgICAgIHRoaXJkRGlnaXQuYWRkQ2hpbGQoYW1wbSk7CisKKyAgICAgICAgICAgIC8vIFRoZSBob3VyIGRpZ2l0IG1heSBiZSAyLTkuCisgICAgICAgICAgICBmaXJzdERpZ2l0ID0gbmV3IE5vZGUoazIsIGszLCBrNCwgazUsIGs2LCBrNywgazgsIGs5KTsKKyAgICAgICAgICAgIG1MZWdhbFRpbWVzVHJlZS5hZGRDaGlsZChmaXJzdERpZ2l0KTsKKyAgICAgICAgICAgIC8vIFdlJ2xsIGFsbG93IHF1aWNrIGlucHV0IG9mIG9uLXRoZS1ob3VyLXRpbWVzLiBFLmcuIDJhbSwgNXBtLgorICAgICAgICAgICAgZmlyc3REaWdpdC5hZGRDaGlsZChhbXBtKTsKKworICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3QgZGlnaXQgaXMgMi05LCB0aGUgc2Vjb25kIGRpZ2l0IG1heSBiZSAwLTUuCisgICAgICAgICAgICBzZWNvbmREaWdpdCA9IG5ldyBOb2RlKGswLCBrMSwgazIsIGszLCBrNCwgazUpOworICAgICAgICAgICAgZmlyc3REaWdpdC5hZGRDaGlsZChzZWNvbmREaWdpdCk7CisKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZpcnN0IGRpZ2l0IGlzIDItOSwgYW5kIHRoZSBzZWNvbmQgZGlnaXQgaXMgMC01LCB0aGUgdGhpcmQgZGlnaXQgbWF5IGJlIDAtOS4KKyAgICAgICAgICAgIHRoaXJkRGlnaXQgPSBuZXcgTm9kZShrMCwgazEsIGsyLCBrMywgazQsIGs1LCBrNiwgazcsIGs4LCBrOSk7CisgICAgICAgICAgICBzZWNvbmREaWdpdC5hZGRDaGlsZCh0aGlyZERpZ2l0KTsKKyAgICAgICAgICAgIC8vIFRoZSB0aW1lIG11c3QgYmUgZmluaXNoZWQgbm93LiBFLmcuIDI6NTdhbSwgOTozMHBtLgorICAgICAgICAgICAgdGhpcmREaWdpdC5hZGRDaGlsZChhbXBtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNpbXBsZSBub2RlIGNsYXNzIHRvIGJlIHVzZWQgZm9yIHRyYXZlcnNhbCB0byBjaGVjayBmb3IgbGVnYWwgdGltZXMuCisgICAgICogbUxlZ2FsS2V5cyByZXByZXNlbnRzIHRoZSBrZXlzIHRoYXQgY2FuIGJlIHR5cGVkIHRvIGdldCB0byB0aGUgbm9kZS4KKyAgICAgKiBtQ2hpbGRyZW4gYXJlIHRoZSBjaGlsZHJlbiB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gdGhpcyBub2RlLgorICAgICAqLworICAgIHByaXZhdGUgY2xhc3MgTm9kZSB7CisgICAgICAgIHByaXZhdGUgaW50W10gbUxlZ2FsS2V5czsKKyAgICAgICAgcHJpdmF0ZSBBcnJheUxpc3Q8Tm9kZT4gbUNoaWxkcmVuOworCisgICAgICAgIHB1YmxpYyBOb2RlKGludC4uLiBsZWdhbEtleXMpIHsKKyAgICAgICAgICAgIG1MZWdhbEtleXMgPSBsZWdhbEtleXM7CisgICAgICAgICAgICBtQ2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0PE5vZGU+KCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBhZGRDaGlsZChOb2RlIGNoaWxkKSB7CisgICAgICAgICAgICBtQ2hpbGRyZW4uYWRkKGNoaWxkKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zS2V5KGludCBrZXkpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUxlZ2FsS2V5cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChtTGVnYWxLZXlzW2ldID09IGtleSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgTm9kZSBjYW5SZWFjaChpbnQga2V5KSB7CisgICAgICAgICAgICBpZiAobUNoaWxkcmVuID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoTm9kZSBjaGlsZCA6IG1DaGlsZHJlbikgeworICAgICAgICAgICAgICAgIGlmIChjaGlsZC5jb250YWluc0tleShrZXkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgS2V5Ym9hcmRMaXN0ZW5lciBpbXBsZW1lbnRzIFZpZXcuT25LZXlMaXN0ZW5lciB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbktleShWaWV3IHYsIGludCBrZXlDb2RlLCBLZXlFdmVudCBldmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LmdldEFjdGlvbigpID09IEtleUV2ZW50LkFDVElPTl9VUCkgeworICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzS2V5VXAoa2V5Q29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW5kZXIgYW4gYW5pbWF0b3IgdG8gcHVsc2F0ZSBhIHZpZXcgaW4gcGxhY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbGFiZWxUb0FuaW1hdGUgdGhlIHZpZXcgdG8gcHVsc2F0ZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBhbmltYXRvciBvYmplY3QuIFVzZSAuc3RhcnQoKSB0byBiZWdpbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RBbmltYXRvciBnZXRQdWxzZUFuaW1hdG9yKFZpZXcgbGFiZWxUb0FuaW1hdGUsIGZsb2F0IGRlY3JlYXNlUmF0aW8sCisgICAgICAgICAgICBmbG9hdCBpbmNyZWFzZVJhdGlvKSB7CisgICAgICAgIGZpbmFsIEtleWZyYW1lIGswID0gS2V5ZnJhbWUub2ZGbG9hdCgwZiwgMWYpOworICAgICAgICBmaW5hbCBLZXlmcmFtZSBrMSA9IEtleWZyYW1lLm9mRmxvYXQoMC4yNzVmLCBkZWNyZWFzZVJhdGlvKTsKKyAgICAgICAgZmluYWwgS2V5ZnJhbWUgazIgPSBLZXlmcmFtZS5vZkZsb2F0KDAuNjlmLCBpbmNyZWFzZVJhdGlvKTsKKyAgICAgICAgZmluYWwgS2V5ZnJhbWUgazMgPSBLZXlmcmFtZS5vZkZsb2F0KDFmLCAxZik7CisKKyAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIgc2NhbGVYID0gUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZLZXlmcmFtZSgic2NhbGVYIiwgazAsIGsxLCBrMiwgazMpOworICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlciBzY2FsZVkgPSBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZktleWZyYW1lKCJzY2FsZVkiLCBrMCwgazEsIGsyLCBrMyk7CisgICAgICAgIE9iamVjdEFuaW1hdG9yIHB1bHNlQW5pbWF0b3IgPQorICAgICAgICAgICAgICAgIE9iamVjdEFuaW1hdG9yLm9mUHJvcGVydHlWYWx1ZXNIb2xkZXIobGFiZWxUb0FuaW1hdGUsIHNjYWxlWCwgc2NhbGVZKTsKKyAgICAgICAgcHVsc2VBbmltYXRvci5zZXREdXJhdGlvbihQVUxTRV9BTklNQVRPUl9EVVJBVElPTik7CisKKyAgICAgICAgcmV0dXJuIHB1bHNlQW5pbWF0b3I7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RvYXN0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVG9hc3QuamF2YQppbmRleCBlMzhkZmE3Li5iZjVlNDliOSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RvYXN0LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RvYXN0LmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLndpZGdldDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CiBpbXBvcnQgYW5kcm9pZC5hcHAuSU5vdGlmaWNhdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuSVRyYW5zaWVudE5vdGlmaWNhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKQEAgLTI5LDExICszMCwxMyBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwogaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5PbkNsaWNrTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyOwogCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKKwogLyoqCiAgKiBBIHRvYXN0IGlzIGEgdmlldyBjb250YWluaW5nIGEgcXVpY2sgbGl0dGxlIG1lc3NhZ2UgZm9yIHRoZSB1c2VyLiAgVGhlIHRvYXN0IGNsYXNzCiAgKiBoZWxwcyB5b3UgY3JlYXRlIGFuZCBzaG93IHRob3NlLgpAQCAtNjEsNiArNjQsMTEgQEAKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJUb2FzdCI7CiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gbG9jYWxMT0dWID0gZmFsc2U7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKHtMRU5HVEhfU0hPUlQsIExFTkdUSF9MT05HfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgRHVyYXRpb24ge30KKwogICAgIC8qKgogICAgICAqIFNob3cgdGhlIHZpZXcgb3IgdGV4dCBub3RpZmljYXRpb24gZm9yIGEgc2hvcnQgcGVyaW9kIG9mIHRpbWUuICBUaGlzIHRpbWUKICAgICAgKiBjb3VsZCBiZSB1c2VyLWRlZmluYWJsZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCkBAIC0xNTIsNyArMTYwLDcgQEAKICAgICAgKiBAc2VlICNMRU5HVEhfU0hPUlQKICAgICAgKiBAc2VlICNMRU5HVEhfTE9ORwogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldER1cmF0aW9uKGludCBkdXJhdGlvbikgeworICAgIHB1YmxpYyB2b2lkIHNldER1cmF0aW9uKEBEdXJhdGlvbiBpbnQgZHVyYXRpb24pIHsKICAgICAgICAgbUR1cmF0aW9uID0gZHVyYXRpb247CiAgICAgfQogCkBAIC0xNjAsNiArMTY4LDcgQEAKICAgICAgKiBSZXR1cm4gdGhlIGR1cmF0aW9uLgogICAgICAqIEBzZWUgI3NldER1cmF0aW9uCiAgICAgICovCisgICAgQER1cmF0aW9uCiAgICAgcHVibGljIGludCBnZXREdXJhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1EdXJhdGlvbjsKICAgICB9CkBAIC0yMzcsNyArMjQ2LDcgQEAKICAgICAgKiAgICAgICAgICAgICAgICAge0BsaW5rICNMRU5HVEhfTE9OR30KICAgICAgKgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgVG9hc3QgbWFrZVRleHQoQ29udGV4dCBjb250ZXh0LCBDaGFyU2VxdWVuY2UgdGV4dCwgaW50IGR1cmF0aW9uKSB7CisgICAgcHVibGljIHN0YXRpYyBUb2FzdCBtYWtlVGV4dChDb250ZXh0IGNvbnRleHQsIENoYXJTZXF1ZW5jZSB0ZXh0LCBARHVyYXRpb24gaW50IGR1cmF0aW9uKSB7CiAgICAgICAgIFRvYXN0IHJlc3VsdCA9IG5ldyBUb2FzdChjb250ZXh0KTsKIAogICAgICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlID0gKExheW91dEluZmxhdGVyKQpAQCAtMjYzLDcgKzI3Miw3IEBACiAgICAgICoKICAgICAgKiBAdGhyb3dzIFJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbiBpZiB0aGUgcmVzb3VyY2UgY2FuJ3QgYmUgZm91bmQuCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBUb2FzdCBtYWtlVGV4dChDb250ZXh0IGNvbnRleHQsIGludCByZXNJZCwgaW50IGR1cmF0aW9uKQorICAgIHB1YmxpYyBzdGF0aWMgVG9hc3QgbWFrZVRleHQoQ29udGV4dCBjb250ZXh0LCBpbnQgcmVzSWQsIEBEdXJhdGlvbiBpbnQgZHVyYXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbWFrZVRleHQoY29udGV4dCwgY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRUZXh0KHJlc0lkKSwgZHVyYXRpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Ub2dnbGVCdXR0b24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Ub2dnbGVCdXR0b24uamF2YQppbmRleCBjZWRjNzc3Li4yODUxOWQxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVG9nZ2xlQnV0dG9uLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1RvZ2dsZUJ1dHRvbi5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC53aWRnZXQ7CiAKLQogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwpAQCAtMjUsOCArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CiAKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwotCiAvKioKICAqIERpc3BsYXlzIGNoZWNrZWQvdW5jaGVja2VkIHN0YXRlcyBhcyBhIGJ1dHRvbgogICogd2l0aCBhICJsaWdodCIgaW5kaWNhdG9yIGFuZCBieSBkZWZhdWx0IGFjY29tcGFuaWVkIHdpdGggdGhlIHRleHQgIk9OIiBvciAiT0ZGIi4KQEAgLTQ2LDEzICs0MywxMiBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5PX0FMUEhBID0gMHhGRjsKICAgICBwcml2YXRlIGZsb2F0IG1EaXNhYmxlZEFscGhhOwotICAgIAotICAgIHB1YmxpYyBUb2dnbGVCdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwotICAgICAgICAKLSAgICAgICAgVHlwZWRBcnJheSBhID0KLSAgICAgICAgICAgIGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlRvZ2dsZUJ1dHRvbiwgZGVmU3R5bGUsIDApOworCisgICAgcHVibGljIFRvZ2dsZUJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlRvZ2dsZUJ1dHRvbiwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1UZXh0T24gPSBhLmdldFRleHQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVG9nZ2xlQnV0dG9uX3RleHRPbik7CiAgICAgICAgIG1UZXh0T2ZmID0gYS5nZXRUZXh0KGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlRvZ2dsZUJ1dHRvbl90ZXh0T2ZmKTsKICAgICAgICAgbURpc2FibGVkQWxwaGEgPSBhLmdldEZsb2F0KGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlRvZ2dsZUJ1dHRvbl9kaXNhYmxlZEFscGhhLCAwLjVmKTsKQEAgLTYwLDYgKzU2LDEwIEBACiAgICAgICAgIGEucmVjeWNsZSgpOwogICAgIH0KIAorICAgIHB1YmxpYyBUb2dnbGVCdXR0b24oQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKICAgICBwdWJsaWMgVG9nZ2xlQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5idXR0b25TdHlsZVRvZ2dsZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1R3b0xpbmVMaXN0SXRlbS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1R3b0xpbmVMaXN0SXRlbS5qYXZhCmluZGV4IGY3ZTUyNjYuLjU2MDZjNjAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Ud29MaW5lTGlzdEl0ZW0uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVHdvTGluZUxpc3RJdGVtLmphdmEKQEAgLTU2LDExICs1NiwxNSBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsgCiAgICAgfQogCi0gICAgcHVibGljIFR3b0xpbmVMaXN0SXRlbShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIFR3b0xpbmVMaXN0SXRlbShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVHdvTGluZUxpc3RJdGVtLCBkZWZTdHlsZSwgMCk7CisgICAgcHVibGljIFR3b0xpbmVMaXN0SXRlbShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLlR3b0xpbmVMaXN0SXRlbSwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgYS5yZWN5Y2xlKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1ZpZGVvVmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1ZpZGVvVmlldy5qYXZhCmluZGV4IGQ1N2I3MzkuLmYyM2M2NGYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9WaWRlb1ZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVmlkZW9WaWV3LmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIGltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxvZzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7CkBAIC0xMjcsOCArMTI2LDEyIEBACiAgICAgICAgIGluaXRWaWRlb1ZpZXcoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgVmlkZW9WaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgVmlkZW9WaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIFZpZGVvVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgaW5pdFZpZGVvVmlldygpOwogICAgIH0KIApAQCAtMjk3LDExICszMDAsOCBAQAogICAgICAgICAgICAgLy8gbm90IHJlYWR5IGZvciBwbGF5YmFjayBqdXN0IHlldCwgd2lsbCB0cnkgYWdhaW4gbGF0ZXIKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAvLyBUZWxsIHRoZSBtdXNpYyBwbGF5YmFjayBzZXJ2aWNlIHRvIHBhdXNlCi0gICAgICAgIC8vIFRPRE86IHRoZXNlIGNvbnN0YW50cyBuZWVkIHRvIGJlIHB1Ymxpc2hlZCBzb21ld2hlcmUgaW4gdGhlIGZyYW1ld29yay4KLSAgICAgICAgSW50ZW50IGkgPSBuZXcgSW50ZW50KCJjb20uYW5kcm9pZC5tdXNpYy5tdXNpY3NlcnZpY2Vjb21tYW5kIik7Ci0gICAgICAgIGkucHV0RXh0cmEoImNvbW1hbmQiLCAicGF1c2UiKTsKLSAgICAgICAgbUNvbnRleHQuc2VuZEJyb2FkY2FzdChpKTsKKyAgICAgICAgQXVkaW9NYW5hZ2VyIGFtID0gKEF1ZGlvTWFuYWdlcikgbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFVRElPX1NFUlZJQ0UpOworICAgICAgICBhbS5yZXF1ZXN0QXVkaW9Gb2N1cyhudWxsLCBBdWRpb01hbmFnZXIuU1RSRUFNX01VU0lDLCBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19HQUlOKTsKIAogICAgICAgICAvLyB3ZSBzaG91bGRuJ3QgY2xlYXIgdGhlIHRhcmdldCBzdGF0ZSwgYmVjYXVzZSBzb21lYm9keSBtaWdodCBoYXZlCiAgICAgICAgIC8vIGNhbGxlZCBzdGFydCgpIHByZXZpb3VzbHkKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9ab29tQnV0dG9uLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvWm9vbUJ1dHRvbi5qYXZhCmluZGV4IGFmMTdjOTQuLjcxNWU4NjggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9ab29tQnV0dG9uLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1pvb21CdXR0b24uamF2YQpAQCAtNDksOCArNDksMTIgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CiAgICAgfQogICAgIAotICAgIHB1YmxpYyBab29tQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgWm9vbUJ1dHRvbihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKworICAgIHB1YmxpYyBab29tQnV0dG9uKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKCk7CiAgICAgICAgIHNldE9uTG9uZ0NsaWNrTGlzdGVuZXIodGhpcyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1pvb21CdXR0b25zQ29udHJvbGxlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1pvb21CdXR0b25zQ29udHJvbGxlci5qYXZhCmluZGV4IDUwYzgwM2IuLmY3ZTk2NDggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9ab29tQnV0dG9uc0NvbnRyb2xsZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvWm9vbUJ1dHRvbnNDb250cm9sbGVyLmphdmEKQEAgLTMyLDcgKzMyLDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0NvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1BhcmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1Jvb3RJbXBsOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvQWN0aW9uQmFySW1wbC5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9BY3Rpb25CYXJJbXBsLmphdmEKaW5kZXggMDY2ZDZjMy4uMzQ3Zjk1NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9BY3Rpb25CYXJJbXBsLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9BY3Rpb25CYXJJbXBsLmphdmEKQEAgLTQyLDcgKzQyLDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwogaW1wb3J0IGFuZHJvaWQudmlldy5BY3Rpb25Nb2RlOwogaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0VGhlbWVXcmFwcGVyOwpAQCAtNTEsNyArNTAsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvdzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BbmltYXRpb25VdGlsczsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvQWxlcnRDb250cm9sbGVyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0FsZXJ0Q29udHJvbGxlci5qYXZhCmluZGV4IGZlNTMyYjAuLmE3YTdlN2UgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvQWxlcnRDb250cm9sbGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9BbGVydENvbnRyb2xsZXIuamF2YQpAQCAtNzAsNiArNzAsOCBAQAogICAgIAogICAgIHByaXZhdGUgVmlldyBtVmlldzsKIAorICAgIHByaXZhdGUgaW50IG1WaWV3TGF5b3V0UmVzSWQ7CisKICAgICBwcml2YXRlIGludCBtVmlld1NwYWNpbmdMZWZ0OwogICAgIAogICAgIHByaXZhdGUgaW50IG1WaWV3U3BhY2luZ1RvcDsKQEAgLTIzMiwxMSArMjM0LDYgQEAKICAgICBwdWJsaWMgdm9pZCBpbnN0YWxsQ29udGVudCgpIHsKICAgICAgICAgLyogV2UgdXNlIGEgY3VzdG9tIHRpdGxlIHNvIG5ldmVyIHJlcXVlc3QgYSB3aW5kb3cgdGl0bGUgKi8KICAgICAgICAgbVdpbmRvdy5yZXF1ZXN0RmVhdHVyZShXaW5kb3cuRkVBVFVSRV9OT19USVRMRSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobVZpZXcgPT0gbnVsbCB8fCAhY2FuVGV4dElucHV0KG1WaWV3KSkgewotICAgICAgICAgICAgbVdpbmRvdy5zZXRGbGFncyhXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX0FMVF9GT0NVU0FCTEVfSU0sCi0gICAgICAgICAgICAgICAgICAgIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZMQUdfQUxUX0ZPQ1VTQUJMRV9JTSk7Ci0gICAgICAgIH0KICAgICAgICAgbVdpbmRvdy5zZXRDb250ZW50VmlldyhtQWxlcnREaWFsb2dMYXlvdXQpOwogICAgICAgICBzZXR1cFZpZXcoKTsKICAgICB9CkBAIC0yNjMsMTAgKzI2MCwyMCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFNldCB0aGUgdmlldyByZXNvdXJjZSB0byBkaXNwbGF5IGluIHRoZSBkaWFsb2cuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VmlldyhpbnQgbGF5b3V0UmVzSWQpIHsKKyAgICAgICAgbVZpZXcgPSBudWxsOworICAgICAgICBtVmlld0xheW91dFJlc0lkID0gbGF5b3V0UmVzSWQ7CisgICAgICAgIG1WaWV3U3BhY2luZ1NwZWNpZmllZCA9IGZhbHNlOworICAgIH0KKworICAgIC8qKgogICAgICAqIFNldCB0aGUgdmlldyB0byBkaXNwbGF5IGluIHRoZSBkaWFsb2cuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmlldyhWaWV3IHZpZXcpIHsKICAgICAgICAgbVZpZXcgPSB2aWV3OworICAgICAgICBtVmlld0xheW91dFJlc0lkID0gMDsKICAgICAgICAgbVZpZXdTcGFjaW5nU3BlY2lmaWVkID0gZmFsc2U7CiAgICAgfQogICAgIApAQCAtMjc2LDYgKzI4Myw3IEBACiAgICAgcHVibGljIHZvaWQgc2V0VmlldyhWaWV3IHZpZXcsIGludCB2aWV3U3BhY2luZ0xlZnQsIGludCB2aWV3U3BhY2luZ1RvcCwgaW50IHZpZXdTcGFjaW5nUmlnaHQsCiAgICAgICAgICAgICBpbnQgdmlld1NwYWNpbmdCb3R0b20pIHsKICAgICAgICAgbVZpZXcgPSB2aWV3OworICAgICAgICBtVmlld0xheW91dFJlc0lkID0gMDsKICAgICAgICAgbVZpZXdTcGFjaW5nU3BlY2lmaWVkID0gdHJ1ZTsKICAgICAgICAgbVZpZXdTcGFjaW5nTGVmdCA9IHZpZXdTcGFjaW5nTGVmdDsKICAgICAgICAgbVZpZXdTcGFjaW5nVG9wID0gdmlld1NwYWNpbmdUb3A7CkBAIC00MDYsMjAgKzQxNCwzNiBAQAogICAgICAgICAgICAgbVdpbmRvdy5zZXRDbG9zZU9uVG91Y2hPdXRzaWRlSWZOb3RTZXQodHJ1ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBGcmFtZUxheW91dCBjdXN0b21QYW5lbCA9IG51bGw7CisgICAgICAgIGZpbmFsIEZyYW1lTGF5b3V0IGN1c3RvbVBhbmVsID0gKEZyYW1lTGF5b3V0KSBtV2luZG93LmZpbmRWaWV3QnlJZChSLmlkLmN1c3RvbVBhbmVsKTsKKyAgICAgICAgZmluYWwgVmlldyBjdXN0b21WaWV3OwogICAgICAgICBpZiAobVZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgY3VzdG9tUGFuZWwgPSAoRnJhbWVMYXlvdXQpIG1XaW5kb3cuZmluZFZpZXdCeUlkKFIuaWQuY3VzdG9tUGFuZWwpOwotICAgICAgICAgICAgRnJhbWVMYXlvdXQgY3VzdG9tID0gKEZyYW1lTGF5b3V0KSBtV2luZG93LmZpbmRWaWV3QnlJZChSLmlkLmN1c3RvbSk7Ci0gICAgICAgICAgICBjdXN0b20uYWRkVmlldyhtVmlldywgbmV3IExheW91dFBhcmFtcyhNQVRDSF9QQVJFTlQsIE1BVENIX1BBUkVOVCkpOworICAgICAgICAgICAgY3VzdG9tVmlldyA9IG1WaWV3OworICAgICAgICB9IGVsc2UgaWYgKG1WaWV3TGF5b3V0UmVzSWQgIT0gMCkgeworICAgICAgICAgICAgZmluYWwgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIgPSBMYXlvdXRJbmZsYXRlci5mcm9tKG1Db250ZXh0KTsKKyAgICAgICAgICAgIGN1c3RvbVZpZXcgPSBpbmZsYXRlci5pbmZsYXRlKG1WaWV3TGF5b3V0UmVzSWQsIGN1c3RvbVBhbmVsLCBmYWxzZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjdXN0b21WaWV3ID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdXN0b21WaWV3ID09IG51bGwgfHwgIWNhblRleHRJbnB1dChjdXN0b21WaWV3KSkgeworICAgICAgICAgICAgbVdpbmRvdy5zZXRGbGFncyhXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX0FMVF9GT0NVU0FCTEVfSU0sCisgICAgICAgICAgICAgICAgICAgIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZMQUdfQUxUX0ZPQ1VTQUJMRV9JTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3VzdG9tVmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBGcmFtZUxheW91dCBjdXN0b20gPSAoRnJhbWVMYXlvdXQpIG1XaW5kb3cuZmluZFZpZXdCeUlkKFIuaWQuY3VzdG9tKTsKKyAgICAgICAgICAgIGN1c3RvbS5hZGRWaWV3KGN1c3RvbVZpZXcsIG5ldyBMYXlvdXRQYXJhbXMoTUFUQ0hfUEFSRU5ULCBNQVRDSF9QQVJFTlQpKTsKKwogICAgICAgICAgICAgaWYgKG1WaWV3U3BhY2luZ1NwZWNpZmllZCkgewotICAgICAgICAgICAgICAgIGN1c3RvbS5zZXRQYWRkaW5nKG1WaWV3U3BhY2luZ0xlZnQsIG1WaWV3U3BhY2luZ1RvcCwgbVZpZXdTcGFjaW5nUmlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBtVmlld1NwYWNpbmdCb3R0b20pOworICAgICAgICAgICAgICAgIGN1c3RvbS5zZXRQYWRkaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXdTcGFjaW5nTGVmdCwgbVZpZXdTcGFjaW5nVG9wLCBtVmlld1NwYWNpbmdSaWdodCwgbVZpZXdTcGFjaW5nQm90dG9tKTsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKG1MaXN0VmlldyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgKChMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKSBjdXN0b21QYW5lbC5nZXRMYXlvdXRQYXJhbXMoKSkud2VpZ2h0ID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1XaW5kb3cuZmluZFZpZXdCeUlkKFIuaWQuY3VzdG9tUGFuZWwpLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKKyAgICAgICAgICAgIGN1c3RvbVBhbmVsLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLyogT25seSBkaXNwbGF5IHRoZSBkaXZpZGVyIGlmIHdlIGhhdmUgYSB0aXRsZSBhbmQgYSAKQEAgLTQyNyw3ICs0NTEsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgaWYgKGhhc1RpdGxlKSB7CiAgICAgICAgICAgICBWaWV3IGRpdmlkZXIgPSBudWxsOwotICAgICAgICAgICAgaWYgKG1NZXNzYWdlICE9IG51bGwgfHwgbVZpZXcgIT0gbnVsbCB8fCBtTGlzdFZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKG1NZXNzYWdlICE9IG51bGwgfHwgY3VzdG9tVmlldyAhPSBudWxsIHx8IG1MaXN0VmlldyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZGl2aWRlciA9IG1XaW5kb3cuZmluZFZpZXdCeUlkKFIuaWQudGl0bGVEaXZpZGVyKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZGl2aWRlciA9IG1XaW5kb3cuZmluZFZpZXdCeUlkKFIuaWQudGl0bGVEaXZpZGVyVG9wKTsKQEAgLTczNiw4ICs3NjAsMTMgQEAKICAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBSZWN5Y2xlTGlzdFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICAgICAgcHVibGljIFJlY3ljbGVMaXN0VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0cik7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgUmVjeWNsZUxpc3RWaWV3KAorICAgICAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtNzY5LDYgKzc5OCw3IEBACiAgICAgICAgIHB1YmxpYyBDaGFyU2VxdWVuY2VbXSBtSXRlbXM7CiAgICAgICAgIHB1YmxpYyBMaXN0QWRhcHRlciBtQWRhcHRlcjsKICAgICAgICAgcHVibGljIERpYWxvZ0ludGVyZmFjZS5PbkNsaWNrTGlzdGVuZXIgbU9uQ2xpY2tMaXN0ZW5lcjsKKyAgICAgICAgcHVibGljIGludCBtVmlld0xheW91dFJlc0lkOwogICAgICAgICBwdWJsaWMgVmlldyBtVmlldzsKICAgICAgICAgcHVibGljIGludCBtVmlld1NwYWNpbmdMZWZ0OwogICAgICAgICBwdWJsaWMgaW50IG1WaWV3U3BhY2luZ1RvcDsKQEAgLTg1NCw4ICs4ODQsMTAgQEAKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBkaWFsb2cuc2V0VmlldyhtVmlldyk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtVmlld0xheW91dFJlc0lkICE9IDApIHsKKyAgICAgICAgICAgICAgICBkaWFsb2cuc2V0VmlldyhtVmlld0xheW91dFJlc0lkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgZGlhbG9nLnNldENhbmNlbGFibGUobUNhbmNlbGFibGUpOwogICAgICAgICAgICAgZGlhbG9nLnNldE9uQ2FuY2VsTGlzdGVuZXIobU9uQ2FuY2VsTGlzdGVuZXIpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9IZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHkuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvSGVhdnlXZWlnaHRTd2l0Y2hlckFjdGl2aXR5LmphdmEKaW5kZXggM2Q0NmNkZC4uODNhZDlkYyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9IZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHkuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0hlYXZ5V2VpZ2h0U3dpdGNoZXJBY3Rpdml0eS5qYXZhCkBAIC0zMiw3ICszMiw2IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvdzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5PbkNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9JQmF0dGVyeVN0YXRzLmFpZGwgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0lCYXR0ZXJ5U3RhdHMuYWlkbAppbmRleCA0M2M0YjQ5Li4wNzcxMzI5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0lCYXR0ZXJ5U3RhdHMuYWlkbAorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0lCYXR0ZXJ5U3RhdHMuYWlkbApAQCAtMjIsMTcgKzIyLDE1IEBACiBpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuU2lnbmFsU3RyZW5ndGg7CiAKIGludGVyZmFjZSBJQmF0dGVyeVN0YXRzIHsKKyAgICAvLyBUaGVzZSBmaXJzdCBtZXRob2RzIGFyZSBhbHNvIGNhbGxlZCBieSBuYXRpdmUgY29kZSwgc28gbXVzdAorICAgIC8vIGJlIGtlcHQgaW4gc3luYyB3aXRoIGZyYW1ld29ya3MvbmF0aXZlL2luY2x1ZGUvYmluZGVyL0lCYXR0ZXJ5U3RhdHMuaAorICAgIHZvaWQgbm90ZVN0YXJ0U2Vuc29yKGludCB1aWQsIGludCBzZW5zb3IpOworICAgIHZvaWQgbm90ZVN0b3BTZW5zb3IoaW50IHVpZCwgaW50IHNlbnNvcik7CisKKyAgICAvLyBSZW1haW5pbmcgbWV0aG9kcyBhcmUgb25seSB1c2VkIGluIEphdmEuCiAgICAgYnl0ZVtdIGdldFN0YXRpc3RpY3MoKTsKICAgICB2b2lkIG5vdGVTdGFydFdha2Vsb2NrKGludCB1aWQsIGludCBwaWQsIFN0cmluZyBuYW1lLCBpbnQgdHlwZSk7CiAgICAgdm9pZCBub3RlU3RvcFdha2Vsb2NrKGludCB1aWQsIGludCBwaWQsIFN0cmluZyBuYW1lLCBpbnQgdHlwZSk7Ci0gICAgCi0gICAgLyogRE8gTk9UIENIQU5HRSB0aGUgcG9zaXRpb24gb2Ygbm90ZVN0YXJ0U2Vuc29yIHdpdGhvdXQgdXBkYXRpbmcKLSAgICAgICBTZW5zb3JTZXJ2aWNlLmNwcCAqLwotICAgIHZvaWQgbm90ZVN0YXJ0U2Vuc29yKGludCB1aWQsIGludCBzZW5zb3IpOwotCi0gICAgLyogRE8gTk9UIENIQU5HRSB0aGUgcG9zaXRpb24gb2Ygbm90ZVN0b3BTZW5zb3Igd2l0aG91dCB1cGRhdGluZwotICAgICAgIFNlbnNvclNlcnZpY2UuY3BwICovCi0gICAgdm9pZCBub3RlU3RvcFNlbnNvcihpbnQgdWlkLCBpbnQgc2Vuc29yKTsKIAogICAgIHZvaWQgbm90ZVN0YXJ0V2FrZWxvY2tGcm9tU291cmNlKGluIFdvcmtTb3VyY2Ugd3MsIGludCBwaWQsIFN0cmluZyBuYW1lLCBpbnQgdHlwZSk7CiAgICAgdm9pZCBub3RlU3RvcFdha2Vsb2NrRnJvbVNvdXJjZShpbiBXb3JrU291cmNlIHdzLCBpbnQgcGlkLCBTdHJpbmcgbmFtZSwgaW50IHR5cGUpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9NZWRpYVJvdXRlQ2hvb3NlckRpYWxvZ0ZyYWdtZW50LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL01lZGlhUm91dGVDaG9vc2VyRGlhbG9nRnJhZ21lbnQuamF2YQppbmRleCBhZTM2MmFmLi4yMzdmZWVkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL01lZGlhUm91dGVDaG9vc2VyRGlhbG9nRnJhZ21lbnQuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL01lZGlhUm91dGVDaG9vc2VyRGlhbG9nRnJhZ21lbnQuamF2YQpAQCAtMjEsNyArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKIAogLyoqCiAgKiBNZWRpYSByb3V0ZSBjaG9vc2VyIGRpYWxvZyBmcmFnbWVudC4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvUGxhdExvZ29BY3Rpdml0eS5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9QbGF0TG9nb0FjdGl2aXR5LmphdmEKaW5kZXggNDBhNzA1Yy4uOGNkYWY5MSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9QbGF0TG9nb0FjdGl2aXR5LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9QbGF0TG9nb0FjdGl2aXR5LmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5BY3Rpdml0eU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5UeXBlZmFjZTsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwpAQCAtMjYsMTkgKzI1LDE1IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQudGV4dC5tZXRob2QuQWxsQ2Fwc1RyYW5zZm9ybWF0aW9uTWV0aG9kOwotaW1wb3J0IGFuZHJvaWQudGV4dC5tZXRob2QuVHJhbnNmb3JtYXRpb25NZXRob2Q7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOwogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BY2NlbGVyYXRlSW50ZXJwb2xhdG9yOwogaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uQW50aWNpcGF0ZU92ZXJzaG9vdEludGVycG9sYXRvcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkRlY2VsZXJhdGVJbnRlcnBvbGF0b3I7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuRnJhbWVMYXlvdXQ7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKIAogcHVibGljIGNsYXNzIFBsYXRMb2dvQWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSB7CiAgICAgRnJhbWVMYXlvdXQgbUNvbnRlbnQ7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYmFja3VwL0xvY2FsVHJhbnNwb3J0LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYmFja3VwL0xvY2FsVHJhbnNwb3J0LmphdmEKaW5kZXggNDk0YmM3OC4uYTMzMjNlOSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2JhY2t1cC9Mb2NhbFRyYW5zcG9ydC5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9iYWNrdXAvTG9jYWxUcmFuc3BvcnQuamF2YQpAQCAtMjMsMjIgKzIzLDE3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuU0VMaW51eDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgY29tLmFuZHJvaWQub3JnLmJvdW5jeWNhc3RsZS51dGlsLmVuY29kZXJzLkJhc2U2NDsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVGaWx0ZXI7CiBpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIAogLyoqCiAgKiBCYWNrdXAgdHJhbnNwb3J0IGZvciBzdGFzaGluZyBzdHVmZiBpbnRvIGEga25vd24gbG9jYXRpb24gb24gZGlzaywgYW5kCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvY29udGVudC9QYWNrYWdlTW9uaXRvci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2NvbnRlbnQvUGFja2FnZU1vbml0b3IuamF2YQppbmRleCBhYjg3MWZiLi4zNzk4ZDYyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvY29udGVudC9QYWNrYWdlTW9uaXRvci5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9jb250ZW50L1BhY2thZ2VNb25pdG9yLmphdmEKQEAgLTIyLDcgKzIyLDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5CYWNrZ3JvdW5kVGhyZWFkOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZVN3aXRjaGluZ0NvbnRyb2xsZXIuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFN1YnR5cGVTd2l0Y2hpbmdDb250cm9sbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNjMGE0YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFN1YnR5cGVTd2l0Y2hpbmdDb250cm9sbGVyLmphdmEKQEAgLTAsMCArMSwyOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLmlucHV0bWV0aG9kOworCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RVdGlscy5JbnB1dE1ldGhvZFNldHRpbmdzOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kSW5mbzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RTdWJ0eXBlOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5RGVxdWU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKKworLyoqCisgKiBJbnB1dE1ldGhvZFN1YnR5cGVTd2l0Y2hpbmdDb250cm9sbGVyIGNvbnRyb2xzIHRoZSBzd2l0Y2hpbmcgYmVoYXZpb3Igb2YgdGhlIHN1YnR5cGVzLgorICovCitwdWJsaWMgY2xhc3MgSW5wdXRNZXRob2RTdWJ0eXBlU3dpdGNoaW5nQ29udHJvbGxlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9IElucHV0TWV0aG9kU3VidHlwZVN3aXRjaGluZ0NvbnRyb2xsZXIuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKKyAgICAvLyBUT0RPOiBUdXJuIG9uIHRoaXMgZmxhZyBhbmQgYWRkIENUUyB3aGVuIHRoZSBwbGF0Zm9ybSBzdGFydHMgZXhwZWN0aW5nIHRoYXQgYWxsIElNRXMgcmV0dXJuCisgICAgLy8gdHJ1ZSBmb3Igc3VwcG9ydHNTd2l0Y2hpbmdUb05leHRJbnB1dE1ldGhvZCgpLgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gUkVRVUlSRV9TV0lUQ0hJTkdfU1VQUE9SVCA9IGZhbHNlOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfSElTVE9SWV9TSVpFID0gNDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9UX0FfU1VCVFlQRV9JRCA9IElucHV0TWV0aG9kVXRpbHMuTk9UX0FfU1VCVFlQRV9JRDsKKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFN1YnR5cGVQYXJhbXMgeworICAgICAgICBwdWJsaWMgZmluYWwgSW5wdXRNZXRob2RJbmZvIG1JbWk7CisgICAgICAgIHB1YmxpYyBmaW5hbCBJbnB1dE1ldGhvZFN1YnR5cGUgbVN1YnR5cGU7CisgICAgICAgIHB1YmxpYyBmaW5hbCBsb25nIG1UaW1lOworCisgICAgICAgIHB1YmxpYyBTdWJ0eXBlUGFyYW1zKElucHV0TWV0aG9kSW5mbyBpbWksIElucHV0TWV0aG9kU3VidHlwZSBzdWJ0eXBlKSB7CisgICAgICAgICAgICBtSW1pID0gaW1pOworICAgICAgICAgICAgbVN1YnR5cGUgPSBzdWJ0eXBlOworICAgICAgICAgICAgbVRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW1lU3VidHlwZUxpc3RJdGVtIGltcGxlbWVudHMgQ29tcGFyYWJsZTxJbWVTdWJ0eXBlTGlzdEl0ZW0+IHsKKyAgICAgICAgcHVibGljIGZpbmFsIENoYXJTZXF1ZW5jZSBtSW1lTmFtZTsKKyAgICAgICAgcHVibGljIGZpbmFsIENoYXJTZXF1ZW5jZSBtU3VidHlwZU5hbWU7CisgICAgICAgIHB1YmxpYyBmaW5hbCBJbnB1dE1ldGhvZEluZm8gbUltaTsKKyAgICAgICAgcHVibGljIGZpbmFsIGludCBtU3VidHlwZUlkOworICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbUlzU3lzdGVtTG9jYWxlOworICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbUlzU3lzdGVtTGFuZ3VhZ2U7CisKKyAgICAgICAgcHVibGljIEltZVN1YnR5cGVMaXN0SXRlbShDaGFyU2VxdWVuY2UgaW1lTmFtZSwgQ2hhclNlcXVlbmNlIHN1YnR5cGVOYW1lLAorICAgICAgICAgICAgICAgIElucHV0TWV0aG9kSW5mbyBpbWksIGludCBzdWJ0eXBlSWQsIFN0cmluZyBzdWJ0eXBlTG9jYWxlLCBTdHJpbmcgc3lzdGVtTG9jYWxlKSB7CisgICAgICAgICAgICBtSW1lTmFtZSA9IGltZU5hbWU7CisgICAgICAgICAgICBtU3VidHlwZU5hbWUgPSBzdWJ0eXBlTmFtZTsKKyAgICAgICAgICAgIG1JbWkgPSBpbWk7CisgICAgICAgICAgICBtU3VidHlwZUlkID0gc3VidHlwZUlkOworICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHN1YnR5cGVMb2NhbGUpKSB7CisgICAgICAgICAgICAgICAgbUlzU3lzdGVtTG9jYWxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbUlzU3lzdGVtTGFuZ3VhZ2UgPSBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbUlzU3lzdGVtTG9jYWxlID0gc3VidHlwZUxvY2FsZS5lcXVhbHMoc3lzdGVtTG9jYWxlKTsKKyAgICAgICAgICAgICAgICBtSXNTeXN0ZW1MYW5ndWFnZSA9IG1Jc1N5c3RlbUxvY2FsZQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3VidHlwZUxvY2FsZS5zdGFydHNXaXRoKHN5c3RlbUxvY2FsZS5zdWJzdHJpbmcoMCwgMikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKEltZVN1YnR5cGVMaXN0SXRlbSBvdGhlcikgeworICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG1JbWVOYW1lKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG90aGVyLm1JbWVOYW1lKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmVxdWFscyhtSW1lTmFtZSwgb3RoZXIubUltZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1JbWVOYW1lLnRvU3RyaW5nKCkuY29tcGFyZVRvKG90aGVyLm1JbWVOYW1lLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFRleHRVdGlscy5lcXVhbHMobVN1YnR5cGVOYW1lLCBvdGhlci5tU3VidHlwZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobUlzU3lzdGVtTG9jYWxlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG90aGVyLm1Jc1N5c3RlbUxvY2FsZSkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1Jc1N5c3RlbUxhbmd1YWdlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG90aGVyLm1Jc1N5c3RlbUxhbmd1YWdlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkobVN1YnR5cGVOYW1lKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG90aGVyLm1TdWJ0eXBlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbVN1YnR5cGVOYW1lLnRvU3RyaW5nKCkuY29tcGFyZVRvKG90aGVyLm1TdWJ0eXBlTmFtZS50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIElucHV0TWV0aG9kQW5kU3VidHlwZUNpcmN1bGFyTGlzdCB7CisgICAgICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKKyAgICAgICAgLy8gVXNlZCB0byBsb2FkIGxhYmVsCisgICAgICAgIHByaXZhdGUgZmluYWwgUGFja2FnZU1hbmFnZXIgbVBtOworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtU3lzdGVtTG9jYWxlU3RyOworICAgICAgICBwcml2YXRlIGZpbmFsIElucHV0TWV0aG9kU2V0dGluZ3MgbVNldHRpbmdzOworCisgICAgICAgIHB1YmxpYyBJbnB1dE1ldGhvZEFuZFN1YnR5cGVDaXJjdWxhckxpc3QoQ29udGV4dCBjb250ZXh0LCBJbnB1dE1ldGhvZFNldHRpbmdzIHNldHRpbmdzKSB7CisgICAgICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgICAgICBtU2V0dGluZ3MgPSBzZXR0aW5nczsKKyAgICAgICAgICAgIG1QbSA9IGNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKTsKKyAgICAgICAgICAgIGZpbmFsIExvY2FsZSBsb2NhbGUgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldENvbmZpZ3VyYXRpb24oKS5sb2NhbGU7CisgICAgICAgICAgICBtU3lzdGVtTG9jYWxlU3RyID0gbG9jYWxlICE9IG51bGwgPyBsb2NhbGUudG9TdHJpbmcoKSA6ICIiOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBUcmVlTWFwPElucHV0TWV0aG9kSW5mbywgTGlzdDxJbnB1dE1ldGhvZFN1YnR5cGU+PiBtU29ydGVkSW1taXMgPQorICAgICAgICAgICAgICAgIG5ldyBUcmVlTWFwPElucHV0TWV0aG9kSW5mbywgTGlzdDxJbnB1dE1ldGhvZFN1YnR5cGU+PigKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb21wYXJhdG9yPElucHV0TWV0aG9kSW5mbz4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIGludCBjb21wYXJlKElucHV0TWV0aG9kSW5mbyBpbWkxLCBJbnB1dE1ldGhvZEluZm8gaW1pMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1pMiA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWkxID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1QbSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1pMS5nZXRJZCgpLmNvbXBhcmVUbyhpbWkyLmdldElkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBpbWlJZDEgPSBpbWkxLmxvYWRMYWJlbChtUG0pICsgIi8iICsgaW1pMS5nZXRJZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyU2VxdWVuY2UgaW1pSWQyID0gaW1pMi5sb2FkTGFiZWwobVBtKSArICIvIiArIGltaTIuZ2V0SWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltaUlkMS50b1N0cmluZygpLmNvbXBhcmVUbyhpbWlJZDIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgcHVibGljIEltZVN1YnR5cGVMaXN0SXRlbSBnZXROZXh0SW5wdXRNZXRob2QoCisgICAgICAgICAgICAgICAgYm9vbGVhbiBvbmx5Q3VycmVudEltZSwgSW5wdXRNZXRob2RJbmZvIGltaSwgSW5wdXRNZXRob2RTdWJ0eXBlIHN1YnR5cGUpIHsKKyAgICAgICAgICAgIGlmIChpbWkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgTGlzdDxJbWVTdWJ0eXBlTGlzdEl0ZW0+IGltTGlzdCA9CisgICAgICAgICAgICAgICAgICAgIGdldFNvcnRlZElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3QoKTsKKyAgICAgICAgICAgIGlmIChpbUxpc3Quc2l6ZSgpIDw9IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIGludCBOID0gaW1MaXN0LnNpemUoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBjdXJyZW50U3VidHlwZUlkID0KKyAgICAgICAgICAgICAgICAgICAgc3VidHlwZSAhPSBudWxsID8gSW5wdXRNZXRob2RVdGlscy5nZXRTdWJ0eXBlSWRGcm9tSGFzaENvZGUoaW1pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuaGFzaENvZGUoKSkgOiBOT1RfQV9TVUJUWVBFX0lEOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBJbWVTdWJ0eXBlTGlzdEl0ZW0gaXNsaSA9IGltTGlzdC5nZXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGlzbGkubUltaS5lcXVhbHMoaW1pKSAmJiBpc2xpLm1TdWJ0eXBlSWQgPT0gY3VycmVudFN1YnR5cGVJZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW9ubHlDdXJyZW50SW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1MaXN0LmdldCgoaSArIDEpICUgTik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBOIC0gMTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBJbWVTdWJ0eXBlTGlzdEl0ZW0gY2FuZGlkYXRlID0gaW1MaXN0LmdldCgoaSArIGogKyAxKSAlIE4pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5tSW1pLmVxdWFscyhpbWkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBMaXN0PEltZVN1YnR5cGVMaXN0SXRlbT4gZ2V0U29ydGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdCgpIHsKKyAgICAgICAgICAgIHJldHVybiBnZXRTb3J0ZWRJbnB1dE1ldGhvZEFuZFN1YnR5cGVMaXN0KHRydWUsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgTGlzdDxJbWVTdWJ0eXBlTGlzdEl0ZW0+IGdldFNvcnRlZElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3QoCisgICAgICAgICAgICAgICAgYm9vbGVhbiBzaG93U3VidHlwZXMsIGJvb2xlYW4gaW5wdXRTaG93biwgYm9vbGVhbiBpc1NjcmVlbkxvY2tlZCkgeworICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PEltZVN1YnR5cGVMaXN0SXRlbT4gaW1MaXN0ID0KKyAgICAgICAgICAgICAgICAgICAgbmV3IEFycmF5TGlzdDxJbWVTdWJ0eXBlTGlzdEl0ZW0+KCk7CisgICAgICAgICAgICBmaW5hbCBIYXNoTWFwPElucHV0TWV0aG9kSW5mbywgTGlzdDxJbnB1dE1ldGhvZFN1YnR5cGU+PiBpbW1pcyA9CisgICAgICAgICAgICAgICAgICAgIG1TZXR0aW5ncy5nZXRFeHBsaWNpdGx5T3JJbXBsaWNpdGx5RW5hYmxlZElucHV0TWV0aG9kc0FuZFN1YnR5cGVMaXN0TG9ja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0KTsKKyAgICAgICAgICAgIGlmIChpbW1pcyA9PSBudWxsIHx8IGltbWlzLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVNvcnRlZEltbWlzLmNsZWFyKCk7CisgICAgICAgICAgICBtU29ydGVkSW1taXMucHV0QWxsKGltbWlzKTsKKyAgICAgICAgICAgIGZvciAoSW5wdXRNZXRob2RJbmZvIGltaSA6IG1Tb3J0ZWRJbW1pcy5rZXlTZXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChpbWkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTGlzdDxJbnB1dE1ldGhvZFN1YnR5cGU+IGV4cGxpY2l0bHlPckltcGxpY2l0bHlFbmFibGVkU3VidHlwZUxpc3QgPSBpbW1pcy5nZXQoaW1pKTsKKyAgICAgICAgICAgICAgICBIYXNoU2V0PFN0cmluZz4gZW5hYmxlZFN1YnR5cGVTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgICAgICAgICAgZm9yIChJbnB1dE1ldGhvZFN1YnR5cGUgc3VidHlwZSA6IGV4cGxpY2l0bHlPckltcGxpY2l0bHlFbmFibGVkU3VidHlwZUxpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZFN1YnR5cGVTZXQuYWRkKFN0cmluZy52YWx1ZU9mKHN1YnR5cGUuaGFzaENvZGUoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmaW5hbCBDaGFyU2VxdWVuY2UgaW1lTGFiZWwgPSBpbWkubG9hZExhYmVsKG1QbSk7CisgICAgICAgICAgICAgICAgaWYgKHNob3dTdWJ0eXBlcyAmJiBlbmFibGVkU3VidHlwZVNldC5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBzdWJ0eXBlQ291bnQgPSBpbWkuZ2V0U3VidHlwZUNvdW50KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy52KFRBRywgIkFkZCBzdWJ0eXBlczogIiArIHN1YnR5cGVDb3VudCArICIsICIgKyBpbWkuZ2V0SWQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdWJ0eXBlQ291bnQ7ICsraikgeworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgSW5wdXRNZXRob2RTdWJ0eXBlIHN1YnR5cGUgPSBpbWkuZ2V0U3VidHlwZUF0KGopOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHN1YnR5cGVIYXNoQ29kZSA9IFN0cmluZy52YWx1ZU9mKHN1YnR5cGUuaGFzaENvZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBzaG93IGFsbCBlbmFibGVkIElNRXMgYW5kIHN1YnR5cGVzIHdoZW4gYW4gSU1FIGlzIHNob3duLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuYWJsZWRTdWJ0eXBlU2V0LmNvbnRhaW5zKHN1YnR5cGVIYXNoQ29kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChpbnB1dFNob3duICYmICFpc1NjcmVlbkxvY2tlZCkgfHwgIXN1YnR5cGUuaXNBdXhpbGlhcnkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBDaGFyU2VxdWVuY2Ugc3VidHlwZUxhYmVsID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUub3ZlcnJpZGVzSW1wbGljaXRseUVuYWJsZWRTdWJ0eXBlKCkgPyBudWxsIDogc3VidHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RGlzcGxheU5hbWUobUNvbnRleHQsIGltaS5nZXRQYWNrYWdlTmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltaS5nZXRTZXJ2aWNlSW5mbygpLmFwcGxpY2F0aW9uSW5mbyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1MaXN0LmFkZChuZXcgSW1lU3VidHlwZUxpc3RJdGVtKGltZUxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZUxhYmVsLCBpbWksIGosIHN1YnR5cGUuZ2V0TG9jYWxlKCksIG1TeXN0ZW1Mb2NhbGVTdHIpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoaXMgc3VidHlwZSBmcm9tIGVuYWJsZWRTdWJ0eXBlU2V0IGJlY2F1c2Ugd2Ugbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb25nZXIgbmVlZCB0byBhZGQgYW4gZW50cnkgb2YgdGhpcyBzdWJ0eXBlIHRvIGltTGlzdCB0byBhdm9pZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGR1cGxpY2F0ZWQgZW50cmllcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkU3VidHlwZVNldC5yZW1vdmUoc3VidHlwZUhhc2hDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGltTGlzdC5hZGQobmV3IEltZVN1YnR5cGVMaXN0SXRlbShpbWVMYWJlbCwgbnVsbCwgaW1pLCBOT1RfQV9TVUJUWVBFX0lELCBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TeXN0ZW1Mb2NhbGVTdHIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KGltTGlzdCk7CisgICAgICAgICAgICByZXR1cm4gaW1MaXN0OworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheURlcXVlPFN1YnR5cGVQYXJhbXM+IG1UeXBlZFN1YnR5cGVIaXN0b3J5ID0gbmV3IEFycmF5RGVxdWU8U3VidHlwZVBhcmFtcz4oKTsKKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBtTG9jayA9IG5ldyBPYmplY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIElucHV0TWV0aG9kU2V0dGluZ3MgbVNldHRpbmdzOworICAgIHByaXZhdGUgSW5wdXRNZXRob2RBbmRTdWJ0eXBlQ2lyY3VsYXJMaXN0IG1TdWJ0eXBlTGlzdDsKKworICAgIHB1YmxpYyBJbnB1dE1ldGhvZFN1YnR5cGVTd2l0Y2hpbmdDb250cm9sbGVyKElucHV0TWV0aG9kU2V0dGluZ3Mgc2V0dGluZ3MpIHsKKyAgICAgICAgbVNldHRpbmdzID0gc2V0dGluZ3M7CisgICAgfQorCisgICAgLy8gVE9ETzogd3JpdGUgdW5pdCB0ZXN0cyBmb3IgdGhpcyBtZXRob2QgYW5kIHRoZSBsb2dpYyB0aGF0IGRldGVybWluZXMgdGhlIG5leHQgc3VidHlwZQorICAgIHB1YmxpYyB2b2lkIG9uQ29tbWl0VGV4dChJbnB1dE1ldGhvZEluZm8gaW1pLCBJbnB1dE1ldGhvZFN1YnR5cGUgc3VidHlwZSkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1UeXBlZFN1YnR5cGVIaXN0b3J5KSB7CisgICAgICAgICAgICBpZiAoc3VidHlwZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkludmFsaWQgSW5wdXRNZXRob2RTdWJ0eXBlOiAiICsgaW1pLmdldElkKCkgKyAiLCAiICsgc3VidHlwZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgU2xvZy5kKFRBRywgIm9uQ29tbWl0VGV4dDogIiArIGltaS5nZXRJZCgpICsgIiwgIiArIHN1YnR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFJFUVVJUkVfU1dJVENISU5HX1NVUFBPUlQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWltaS5zdXBwb3J0c1N3aXRjaGluZ1RvTmV4dElucHV0TWV0aG9kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgaW1pLmdldElkKCkgKyAiIGRvZXNuJ3Qgc3VwcG9ydCBzd2l0Y2hpbmcgdG8gbmV4dCBpbnB1dCBtZXRob2QuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobVR5cGVkU3VidHlwZUhpc3Rvcnkuc2l6ZSgpID49IE1BWF9ISVNUT1JZX1NJWkUpIHsKKyAgICAgICAgICAgICAgICBtVHlwZWRTdWJ0eXBlSGlzdG9yeS5wb2xsKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtVHlwZWRTdWJ0eXBlSGlzdG9yeS5hZGRGaXJzdChuZXcgU3VidHlwZVBhcmFtcyhpbWksIHN1YnR5cGUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlc2V0Q2lyY3VsYXJMaXN0TG9ja2VkKENvbnRleHQgY29udGV4dCkgeworICAgICAgICBzeW5jaHJvbml6ZWQobUxvY2spIHsKKyAgICAgICAgICAgIG1TdWJ0eXBlTGlzdCA9IG5ldyBJbnB1dE1ldGhvZEFuZFN1YnR5cGVDaXJjdWxhckxpc3QoY29udGV4dCwgbVNldHRpbmdzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBJbWVTdWJ0eXBlTGlzdEl0ZW0gZ2V0TmV4dElucHV0TWV0aG9kKAorICAgICAgICAgICAgYm9vbGVhbiBvbmx5Q3VycmVudEltZSwgSW5wdXRNZXRob2RJbmZvIGltaSwgSW5wdXRNZXRob2RTdWJ0eXBlIHN1YnR5cGUpIHsKKyAgICAgICAgc3luY2hyb25pemVkKG1Mb2NrKSB7CisgICAgICAgICAgICByZXR1cm4gbVN1YnR5cGVMaXN0LmdldE5leHRJbnB1dE1ldGhvZChvbmx5Q3VycmVudEltZSwgaW1pLCBzdWJ0eXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBMaXN0PEltZVN1YnR5cGVMaXN0SXRlbT4gZ2V0U29ydGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdChib29sZWFuIHNob3dTdWJ0eXBlcywKKyAgICAgICAgICAgIGJvb2xlYW4gaW5wdXRTaG93biwgYm9vbGVhbiBpc1NjcmVlbkxvY2tlZCkgeworICAgICAgICBzeW5jaHJvbml6ZWQobUxvY2spIHsKKyAgICAgICAgICAgIHJldHVybiBtU3VidHlwZUxpc3QuZ2V0U29ydGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdCgKKyAgICAgICAgICAgICAgICAgICAgc2hvd1N1YnR5cGVzLCBpbnB1dFNob3duLCBpc1NjcmVlbkxvY2tlZCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RVdGlscy5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2lucHV0bWV0aG9kL0lucHV0TWV0aG9kVXRpbHMuamF2YQppbmRleCA2M2QwMThmLi5iYzA1MWNlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RVdGlscy5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFV0aWxzLmphdmEKQEAgLTk1OSw1ICs5NTksMTYgQEAKICAgICAgICAgICAgICAgICBhZGRTdWJ0eXBlVG9IaXN0b3J5KGN1ck1ldGhvZElkLCBzdWJ0eXBlSWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEhhc2hNYXA8SW5wdXRNZXRob2RJbmZvLCBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4+CisgICAgICAgICAgICAgICAgZ2V0RXhwbGljaXRseU9ySW1wbGljaXRseUVuYWJsZWRJbnB1dE1ldGhvZHNBbmRTdWJ0eXBlTGlzdExvY2tlZChDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgIEhhc2hNYXA8SW5wdXRNZXRob2RJbmZvLCBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4+IGVuYWJsZWRJbnB1dE1ldGhvZEFuZFN1YnR5cGVzID0KKyAgICAgICAgICAgICAgICAgICAgbmV3IEhhc2hNYXA8SW5wdXRNZXRob2RJbmZvLCBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4+KCk7CisgICAgICAgICAgICBmb3IgKElucHV0TWV0aG9kSW5mbyBpbWk6IGdldEVuYWJsZWRJbnB1dE1ldGhvZExpc3RMb2NrZWQoKSkgeworICAgICAgICAgICAgICAgIGVuYWJsZWRJbnB1dE1ldGhvZEFuZFN1YnR5cGVzLnB1dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGltaSwgZ2V0RW5hYmxlZElucHV0TWV0aG9kU3VidHlwZUxpc3RMb2NrZWQoY29udGV4dCwgaW1pLCB0cnVlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZW5hYmxlZElucHV0TWV0aG9kQW5kU3VidHlwZXM7CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvbmV0L1ZwbkNvbmZpZy5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL25ldC9WcG5Db25maWcuamF2YQppbmRleCA5ODU5OWQwLi4wZDAwZjQxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvbmV0L1ZwbkNvbmZpZy5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9uZXQvVnBuQ29uZmlnLmphdmEKQEAgLTI1LDggKzI1LDYgQEAKIGltcG9ydCBhbmRyb2lkLm5ldC5Sb3V0ZUluZm87CiBpbXBvcnQgYW5kcm9pZC5uZXQuTGlua0FkZHJlc3M7CiAKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByZWNvbmRpdGlvbnM7Ci0KIGltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL0JpbmRlckludGVybmFsLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvQmluZGVySW50ZXJuYWwuamF2YQppbmRleCBmNTRhM2U5Li45ODQxZjYyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvQmluZGVySW50ZXJuYWwuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvQmluZGVySW50ZXJuYWwuamF2YQpAQCAtMTYsMTggKzE2LDEwIEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwub3M7CiAKLWltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRXZlbnRMb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7CiAKIC8qKgogICogUHJpdmF0ZSBhbmQgZGVidWdnaW5nIEJpbmRlciBBUElzLgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL1dyYXBwZXJJbml0LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvV3JhcHBlckluaXQuamF2YQppbmRleCBjNmIzZTdjLi4xNzY2ZjdiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvV3JhcHBlckluaXQuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvV3JhcHBlckluaXQuamF2YQpAQCAtMjUsNyArMjUsNiBAQAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiAKIGltcG9ydCBsaWJjb3JlLmlvLklvVXRpbHM7Ci1pbXBvcnQgbGliY29yZS5pby5MaWJjb3JlOwogCiBpbXBvcnQgZGFsdmlrLnN5c3RlbS5aeWdvdGU7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9aeWdvdGVJbml0LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvWnlnb3RlSW5pdC5qYXZhCmluZGV4IDI1MTE4ZTguLjQ4MDkyZjYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9aeWdvdGVJbml0LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL1p5Z290ZUluaXQuamF2YQpAQCAtNDg5LDYgKzQ4OSw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBzdGFydFN5c3RlbVNlcnZlcigpCiAgICAgICAgICAgICB0aHJvd3MgTWV0aG9kQW5kQXJnc0NhbGxlciwgUnVudGltZUV4Y2VwdGlvbiB7CiAgICAgICAgIGxvbmcgY2FwYWJpbGl0aWVzID0gcG9zaXhDYXBhYmlsaXRpZXNBc0JpdHMoCisgICAgICAgICAgICBPc0NvbnN0YW50cy5DQVBfQkxPQ0tfU1VTUEVORCwKICAgICAgICAgICAgIE9zQ29uc3RhbnRzLkNBUF9LSUxMLAogICAgICAgICAgICAgT3NDb25zdGFudHMuQ0FQX05FVF9BRE1JTiwKICAgICAgICAgICAgIE9zQ29uc3RhbnRzLkNBUF9ORVRfQklORF9TRVJWSUNFLApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ByZWZlcmVuY2UvWWVzTm9QcmVmZXJlbmNlLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvcHJlZmVyZW5jZS9ZZXNOb1ByZWZlcmVuY2UuamF2YQppbmRleCBjZjY4YTU4Li43YWJmNDE2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvcHJlZmVyZW5jZS9ZZXNOb1ByZWZlcmVuY2UuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvcHJlZmVyZW5jZS9ZZXNOb1ByZWZlcmVuY2UuamF2YQpAQCAtMzEsMTUgKzMxLDE5IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBZZXNOb1ByZWZlcmVuY2UgZXh0ZW5kcyBEaWFsb2dQcmVmZXJlbmNlIHsKICAgICBwcml2YXRlIGJvb2xlYW4gbVdhc1Bvc2l0aXZlUmVzdWx0OwotICAgIAotICAgIHB1YmxpYyBZZXNOb1ByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworCisgICAgcHVibGljIFllc05vUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgWWVzTm9QcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CiAgICAgfQogCiAgICAgcHVibGljIFllc05vUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmF0dHIueWVzTm9QcmVmZXJlbmNlU3R5bGUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBZZXNOb1ByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvQWN0aW9uQmFyUG9saWN5LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9BY3Rpb25CYXJQb2xpY3kuamF2YQppbmRleCAyNTA4NmM1Li5iZWU1OWRjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9BY3Rpb25CYXJQb2xpY3kuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9BY3Rpb25CYXJQb2xpY3kuamF2YQpAQCAtMTksMTEgKzE5LDkgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbjsKIAogLyoqCiAgKiBBbGxvd3MgY29tcG9uZW50cyB0byBxdWVyeSBmb3IgdmFyaW91cyBjb25maWd1cmF0aW9uIHBvbGljeSBkZWNpc2lvbnMKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L0lJbnB1dE1ldGhvZE1hbmFnZXIuYWlkbCBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L0lJbnB1dE1ldGhvZE1hbmFnZXIuYWlkbAppbmRleCAxMmNlZDY4Li4zMjVhMjdkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9JSW5wdXRNZXRob2RNYW5hZ2VyLmFpZGwKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvSUlucHV0TWV0aG9kTWFuYWdlci5haWRsCkBAIC03NCw0ICs3NCw2IEBACiAgICAgYm9vbGVhbiBzaG91bGRPZmZlclN3aXRjaGluZ1RvTmV4dElucHV0TWV0aG9kKGluIElCaW5kZXIgdG9rZW4pOwogICAgIGJvb2xlYW4gc2V0SW5wdXRNZXRob2RFbmFibGVkKFN0cmluZyBpZCwgYm9vbGVhbiBlbmFibGVkKTsKICAgICBvbmV3YXkgdm9pZCBzZXRBZGRpdGlvbmFsSW5wdXRNZXRob2RTdWJ0eXBlcyhTdHJpbmcgaWQsIGluIElucHV0TWV0aG9kU3VidHlwZVtdIHN1YnR5cGVzKTsKKyAgICBpbnQgZ2V0SW5wdXRNZXRob2RXaW5kb3dWaXNpYmxlSGVpZ2h0KCk7CisgICAgb25ld2F5IHZvaWQgbm90aWZ5VGV4dENvbW1pdHRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvUm90YXRpb25Qb2xpY3kuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L1JvdGF0aW9uUG9saWN5LmphdmEKaW5kZXggNzBlMmJmYy4uZGY0ZTFhNiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvUm90YXRpb25Qb2xpY3kuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9Sb3RhdGlvblBvbGljeS5qYXZhCkBAIC0yMSw3ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5Db250ZW50T2JzZXJ2ZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuQXN5bmNUYXNrOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvQWN0aW9uTWVudUl0ZW1WaWV3LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0FjdGlvbk1lbnVJdGVtVmlldy5qYXZhCmluZGV4IDIzOGE5YzAuLmMxNGQ1ODcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvQWN0aW9uTWVudUl0ZW1WaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9BY3Rpb25NZW51SXRlbVZpZXcuamF2YQpAQCAtNjAsMTMgKzYwLDE3IEBACiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KIAotICAgIHB1YmxpYyBBY3Rpb25NZW51SXRlbVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBBY3Rpb25NZW51SXRlbVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQWN0aW9uTWVudUl0ZW1WaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKTsKICAgICAgICAgbUFsbG93VGV4dFdpdGhJY29uID0gcmVzLmdldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5ib29sLmNvbmZpZ19hbGxvd0FjdGlvbk1lbnVJdGVtVGV4dFdpdGhJY29uKTsKLSAgICAgICAgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGF0dHJzLAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkFjdGlvbk1lbnVJdGVtVmlldywgMCwgMCk7CisgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycywKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BY3Rpb25NZW51SXRlbVZpZXcsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBtTWluV2lkdGggPSBhLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BY3Rpb25NZW51SXRlbVZpZXdfbWluV2lkdGgsIDApOwogICAgICAgICBhLnJlY3ljbGUoKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvQWN0aW9uTWVudVByZXNlbnRlci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9BY3Rpb25NZW51UHJlc2VudGVyLmphdmEKaW5kZXggNDY1NDE3OC4uMTFjNDc3NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9BY3Rpb25NZW51UHJlc2VudGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9BY3Rpb25NZW51UHJlc2VudGVyLmphdmEKQEAgLTIxLDggKzIxLDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb247Ci1pbXBvcnQgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VCb29sZWFuQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkFjdGlvblByb3ZpZGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9JY29uTWVudUl0ZW1WaWV3LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0ljb25NZW51SXRlbVZpZXcuamF2YQppbmRleCA1ZDBiMjVmLi5kZTVlMjc5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0ljb25NZW51SXRlbVZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0ljb25NZW51SXRlbVZpZXcuamF2YQpAQCAtNTcsOCArNTcsOCBAQAogICAgIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBzUHJlcGVuZFNob3J0Y3V0TGFiZWw7CiAKLSAgICBwdWJsaWMgSWNvbk1lbnVJdGVtVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKKyAgICBwdWJsaWMgSWNvbk1lbnVJdGVtVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBpZiAoc1ByZXBlbmRTaG9ydGN1dExhYmVsID09IG51bGwpIHsKICAgICAgICAgICAgIC8qCkBAIC02OCwxMCArNjgsOSBAQAogICAgICAgICAgICAgc1ByZXBlbmRTaG9ydGN1dExhYmVsID0gZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKAogICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5wcmVwZW5kX3Nob3J0Y3V0X2xhYmVsKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVHlwZWRBcnJheSBhID0KLSAgICAgICAgICAgIGNvbnRleHQub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTWVudVZpZXcsIGRlZlN0eWxlLCAwKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLk1lbnVWaWV3LCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKIAogICAgICAgICBtRGlzYWJsZWRBbHBoYSA9IGEuZ2V0RmxvYXQoCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTWVudVZpZXdfaXRlbUljb25EaXNhYmxlZEFscGhhLCAwLjhmKTsKQEAgLTgxLDcgKzgwLDExIEBACiAgICAgICAgIAogICAgICAgICBhLnJlY3ljbGUoKTsKICAgICB9Ci0gICAgCisKKyAgICBwdWJsaWMgSWNvbk1lbnVJdGVtVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKwogICAgIHB1YmxpYyBJY29uTWVudUl0ZW1WaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTGlzdE1lbnVJdGVtVmlldy5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9MaXN0TWVudUl0ZW1WaWV3LmphdmEKaW5kZXggYTJhNGFjYy4uNjkyYmRhYyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9MaXN0TWVudUl0ZW1WaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9MaXN0TWVudUl0ZW1WaWV3LmphdmEKQEAgLTU1LDEzICs1NSwxMyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIG1Gb3JjZVNob3dJY29uOwogCi0gICAgcHVibGljIExpc3RNZW51SXRlbVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgCi0gICAgICAgIFR5cGVkQXJyYXkgYSA9Ci0gICAgICAgICAgICBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICAgICAgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLk1lbnVWaWV3LCBkZWZTdHlsZSwgMCk7Ci0gICAgICAgIAorICAgIHB1YmxpYyBMaXN0TWVudUl0ZW1WaWV3KAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgIGF0dHJzLCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5NZW51VmlldywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisKICAgICAgICAgbUJhY2tncm91bmQgPSBhLmdldERyYXdhYmxlKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLk1lbnVWaWV3X2l0ZW1CYWNrZ3JvdW5kKTsKICAgICAgICAgbVRleHRBcHBlYXJhbmNlID0gYS5nZXRSZXNvdXJjZUlkKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVudVZpZXdfaXRlbVRleHRBcHBlYXJhbmNlLCAtMSk7CkBAIC03Miw2ICs3MiwxMCBAQAogICAgICAgICBhLnJlY3ljbGUoKTsKICAgICB9CiAKKyAgICBwdWJsaWMgTGlzdE1lbnVJdGVtVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOworICAgIH0KKwogICAgIHB1YmxpYyBMaXN0TWVudUl0ZW1WaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTGlzdE1lbnVQcmVzZW50ZXIuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTGlzdE1lbnVQcmVzZW50ZXIuamF2YQppbmRleCA0ODgyYWRjLi5jNDc2MzU0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0xpc3RNZW51UHJlc2VudGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9MaXN0TWVudVByZXNlbnRlci5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudTsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuRGF0YVNldE9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CkBAIC0xNjMsNyArMTYyLDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uSXRlbUNsaWNrKEFkYXB0ZXJWaWV3PD8+IHBhcmVudCwgVmlldyB2aWV3LCBpbnQgcG9zaXRpb24sIGxvbmcgaWQpIHsKLSAgICAgICAgbU1lbnUucGVyZm9ybUl0ZW1BY3Rpb24obUFkYXB0ZXIuZ2V0SXRlbShwb3NpdGlvbiksIDApOworICAgICAgICBtTWVudS5wZXJmb3JtSXRlbUFjdGlvbihtQWRhcHRlci5nZXRJdGVtKHBvc2l0aW9uKSwgdGhpcywgMCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L01lbnVCdWlsZGVyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L01lbnVCdWlsZGVyLmphdmEKaW5kZXggYWZmNjk3YS4uMTk1YTAwZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9NZW51QnVpbGRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTWVudUJ1aWxkZXIuamF2YQpAQCAtMjQ3LDExICsyNDcsMTcgQEAKICAgICAgICAgc3RhcnREaXNwYXRjaGluZ0l0ZW1zQ2hhbmdlZCgpOwogICAgIH0KICAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gZGlzcGF0Y2hTdWJNZW51U2VsZWN0ZWQoU3ViTWVudUJ1aWxkZXIgc3ViTWVudSkgeworICAgIHByaXZhdGUgYm9vbGVhbiBkaXNwYXRjaFN1Yk1lbnVTZWxlY3RlZChTdWJNZW51QnVpbGRlciBzdWJNZW51LAorICAgICAgICAgICAgTWVudVByZXNlbnRlciBwcmVmZXJyZWRQcmVzZW50ZXIpIHsKICAgICAgICAgaWYgKG1QcmVzZW50ZXJzLmlzRW1wdHkoKSkgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAKKyAgICAgICAgLy8gVHJ5IHRoZSBwcmVmZXJyZWQgcHJlc2VudGVyIGZpcnN0LgorICAgICAgICBpZiAocHJlZmVycmVkUHJlc2VudGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHByZWZlcnJlZFByZXNlbnRlci5vblN1Yk1lbnVTZWxlY3RlZChzdWJNZW51KTsKKyAgICAgICAgfQorCiAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZTxNZW51UHJlc2VudGVyPiByZWYgOiBtUHJlc2VudGVycykgewogICAgICAgICAgICAgZmluYWwgTWVudVByZXNlbnRlciBwcmVzZW50ZXIgPSByZWYuZ2V0KCk7CiAgICAgICAgICAgICBpZiAocHJlc2VudGVyID09IG51bGwpIHsKQEAgLTg2NSw2ICs4NzEsMTAgQEAKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtSXRlbUFjdGlvbihNZW51SXRlbSBpdGVtLCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgcmV0dXJuIHBlcmZvcm1JdGVtQWN0aW9uKGl0ZW0sIG51bGwsIGZsYWdzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtSXRlbUFjdGlvbihNZW51SXRlbSBpdGVtLCBNZW51UHJlc2VudGVyIHByZWZlcnJlZFByZXNlbnRlciwgaW50IGZsYWdzKSB7CiAgICAgICAgIE1lbnVJdGVtSW1wbCBpdGVtSW1wbCA9IChNZW51SXRlbUltcGwpIGl0ZW07CiAgICAgICAgIAogICAgICAgICBpZiAoaXRlbUltcGwgPT0gbnVsbCB8fCAhaXRlbUltcGwuaXNFbmFibGVkKCkpIHsKQEAgLTg4OSw3ICs4OTksNyBAQAogICAgICAgICAgICAgaWYgKHByb3ZpZGVySGFzU3ViTWVudSkgewogICAgICAgICAgICAgICAgIHByb3ZpZGVyLm9uUHJlcGFyZVN1Yk1lbnUoc3ViTWVudSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnZva2VkIHw9IGRpc3BhdGNoU3ViTWVudVNlbGVjdGVkKHN1Yk1lbnUpOworICAgICAgICAgICAgaW52b2tlZCB8PSBkaXNwYXRjaFN1Yk1lbnVTZWxlY3RlZChzdWJNZW51LCBwcmVmZXJyZWRQcmVzZW50ZXIpOwogICAgICAgICAgICAgaWYgKCFpbnZva2VkKSBjbG9zZSh0cnVlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX1BFUkZPUk1fTk9fQ0xPU0UpID09IDApIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTWVudVBvcHVwSGVscGVyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L01lbnVQb3B1cEhlbHBlci5qYXZhCmluZGV4IDA1ZTlhNjYuLmQ2NjQwNTggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTWVudVBvcHVwSGVscGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9NZW51UG9wdXBIZWxwZXIuamF2YQpAQCAtMjMsNyArMjMsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwotaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5NZWFzdXJlU3BlYzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9BYnNBY3Rpb25CYXJWaWV3LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0Fic0FjdGlvbkJhclZpZXcuamF2YQppbmRleCBmMzg5MWM3Li42ZWE3MzcyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0Fic0FjdGlvbkJhclZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0Fic0FjdGlvbkJhclZpZXcuamF2YQpAQCAtNDcsMTUgKzQ3LDIwIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZBREVfRFVSQVRJT04gPSAyMDA7CiAKICAgICBwdWJsaWMgQWJzQWN0aW9uQmFyVmlldyhDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCk7CisgICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7CiAgICAgfQogCiAgICAgcHVibGljIEFic0FjdGlvbkJhclZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOworICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CiAKLSAgICBwdWJsaWMgQWJzQWN0aW9uQmFyVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisgICAgcHVibGljIEFic0FjdGlvbkJhclZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQWJzQWN0aW9uQmFyVmlldygKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9BY3Rpb25CYXJDb250YWluZXIuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvQWN0aW9uQmFyQ29udGFpbmVyLmphdmEKaW5kZXggOGE0OTg5OS4uMDNmYTliNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9BY3Rpb25CYXJDb250YWluZXIuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0FjdGlvbkJhckNvbnRhaW5lci5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwud2lkZ2V0OwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aW9uQmFyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvQWN0aW9uQmFyQ29udGV4dFZpZXcuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvQWN0aW9uQmFyQ29udGV4dFZpZXcuamF2YQppbmRleCA4YmMxMDgxLi4wY2FjYWE1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0FjdGlvbkJhckNvbnRleHRWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9BY3Rpb25CYXJDb250ZXh0Vmlldy5qYXZhCkBAIC0yNSw3ICsyNSw2IEBACiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3JTZXQ7CiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CkBAIC03NCwxMCArNzMsMTYgQEAKICAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLmFjdGlvbk1vZGVTdHlsZSk7CiAgICAgfQogICAgIAotICAgIHB1YmxpYyBBY3Rpb25CYXJDb250ZXh0VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7Ci0gICAgICAgIAotICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsIFIuc3R5bGVhYmxlLkFjdGlvbk1vZGUsIGRlZlN0eWxlLCAwKTsKKyAgICBwdWJsaWMgQWN0aW9uQmFyQ29udGV4dFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQWN0aW9uQmFyQ29udGV4dFZpZXcoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCisgICAgICAgICAgICAgICAgYXR0cnMsIFIuc3R5bGVhYmxlLkFjdGlvbk1vZGUsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBzZXRCYWNrZ3JvdW5kRHJhd2FibGUoYS5nZXREcmF3YWJsZSgKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BY3Rpb25Nb2RlX2JhY2tncm91bmQpKTsKICAgICAgICAgbVRpdGxlU3R5bGVSZXMgPSBhLmdldFJlc291cmNlSWQoCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0RpYWxvZ1RpdGxlLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0RpYWxvZ1RpdGxlLmphdmEKaW5kZXggYjg2YzQzOC4uN2VhM2Q2YiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9EaWFsb2dUaXRsZS5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvRGlhbG9nVGl0bGUuamF2YQpAQCAtMjgsMTAgKzI4LDEzIEBACiAgKiB0aGUgdGV4dCB0byB0aGUgYXZhaWxhYmxlIHNwYWNlLgogICovCiBwdWJsaWMgY2xhc3MgRGlhbG9nVGl0bGUgZXh0ZW5kcyBUZXh0VmlldyB7Ci0gICAgCi0gICAgcHVibGljIERpYWxvZ1RpdGxlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLAotICAgICAgICAgICAgaW50IGRlZlN0eWxlKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZSk7CisKKyAgICBwdWJsaWMgRGlhbG9nVGl0bGUoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CisgICAgfQorCisgICAgcHVibGljIERpYWxvZ1RpdGxlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIpOwogICAgIH0KIAogICAgIHB1YmxpYyBEaWFsb2dUaXRsZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9GYWNlVW5sb2NrVmlldy5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9GYWNlVW5sb2NrVmlldy5qYXZhCmluZGV4IGUzYzEyNDcuLjEyMWU2MDEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvRmFjZVVubG9ja1ZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0ZhY2VVbmxvY2tWaWV3LmphdmEKQEAgLTE4LDggKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5SZWxhdGl2ZUxheW91dDsKIAogcHVibGljIGNsYXNzIEZhY2VVbmxvY2tWaWV3IGV4dGVuZHMgUmVsYXRpdmVMYXlvdXQgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9Mb2NrUGF0dGVyblV0aWxzLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0xvY2tQYXR0ZXJuVXRpbHMuamF2YQppbmRleCA4NjAyMjYwLi4zNDE5ZjE1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0xvY2tQYXR0ZXJuVXRpbHMuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0xvY2tQYXR0ZXJuVXRpbHMuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwpAQCAtMTIwMSw3ICsxMjAwLDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBzZXRMb25nKFN0cmluZyBzZWN1cmVTZXR0aW5nS2V5LCBsb25nIHZhbHVlLCBpbnQgdXNlckhhbmRsZSkgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgZ2V0TG9ja1NldHRpbmdzKCkuc2V0TG9uZyhzZWN1cmVTZXR0aW5nS2V5LCB2YWx1ZSwgZ2V0Q3VycmVudE9yQ2FsbGluZ1VzZXJJZCgpKTsKKyAgICAgICAgICAgIGdldExvY2tTZXR0aW5ncygpLnNldExvbmcoc2VjdXJlU2V0dGluZ0tleSwgdmFsdWUsIHVzZXJIYW5kbGUpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKICAgICAgICAgICAgIC8vIFdoYXQgY2FuIHdlIGRvPwogICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ291bGRuJ3Qgd3JpdGUgbG9uZyAiICsgc2VjdXJlU2V0dGluZ0tleSArIHJlKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUGFzc3dvcmRFbnRyeUtleWJvYXJkLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1Bhc3N3b3JkRW50cnlLZXlib2FyZC5qYXZhCmluZGV4IDNjMDFjNjkuLjgzNjgxMzYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUGFzc3dvcmRFbnRyeUtleWJvYXJkLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9QYXNzd29yZEVudHJ5S2V5Ym9hcmQuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldDsKIAotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5YbWxSZXNvdXJjZVBhcnNlcjsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUGFzc3dvcmRFbnRyeUtleWJvYXJkSGVscGVyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1Bhc3N3b3JkRW50cnlLZXlib2FyZEhlbHBlci5qYXZhCmluZGV4IGEzZGYyOTEuLmIyYzlkYzUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUGFzc3dvcmRFbnRyeUtleWJvYXJkSGVscGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9QYXNzd29yZEVudHJ5S2V5Ym9hcmRIZWxwZXIuamF2YQpAQCAtMjEsOSArMjEsNyBAQAogaW1wb3J0IGFuZHJvaWQuaW5wdXRtZXRob2RzZXJ2aWNlLktleWJvYXJkOwogaW1wb3J0IGFuZHJvaWQuaW5wdXRtZXRob2RzZXJ2aWNlLktleWJvYXJkVmlldzsKIGltcG9ydCBhbmRyb2lkLmlucHV0bWV0aG9kc2VydmljZS5LZXlib2FyZFZpZXcuT25LZXlib2FyZEFjdGlvbkxpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQub3MuVmlicmF0b3I7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5IYXB0aWNGZWVkYmFja0NvbnN0YW50czsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUGFzc3dvcmRFbnRyeUtleWJvYXJkVmlldy5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9QYXNzd29yZEVudHJ5S2V5Ym9hcmRWaWV3LmphdmEKaW5kZXggYjM3YWRmZi4uZDI3MzQ2YiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9QYXNzd29yZEVudHJ5S2V5Ym9hcmRWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9QYXNzd29yZEVudHJ5S2V5Ym9hcmRWaWV3LmphdmEKQEAgLTI5LDExICsyOSwxNiBAQAogICAgIHN0YXRpYyBmaW5hbCBpbnQgS0VZQ09ERV9ORVhUX0xBTkdVQUdFID0gLTEwNDsKIAogICAgIHB1YmxpYyBQYXNzd29yZEVudHJ5S2V5Ym9hcmRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgMCk7CiAgICAgfQogCi0gICAgcHVibGljIFBhc3N3b3JkRW50cnlLZXlib2FyZFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBQYXNzd29yZEVudHJ5S2V5Ym9hcmRWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIFBhc3N3b3JkRW50cnlLZXlib2FyZFZpZXcoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUG9pbnRlckxvY2F0aW9uVmlldy5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9Qb2ludGVyTG9jYXRpb25WaWV3LmphdmEKaW5kZXggZDgyODMxZi4uZTMzOWM0NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9Qb2ludGVyTG9jYXRpb25WaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9Qb2ludGVyTG9jYXRpb25WaWV3LmphdmEKQEAgLTMxLDExICszMSwxMyBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WZWxvY2l0eVRyYWNrZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdDb25maWd1cmF0aW9uOworaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyUG9saWN5LlBvaW50ZXJFdmVudExpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudC5Qb2ludGVyQ29vcmRzOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIAotcHVibGljIGNsYXNzIFBvaW50ZXJMb2NhdGlvblZpZXcgZXh0ZW5kcyBWaWV3IGltcGxlbWVudHMgSW5wdXREZXZpY2VMaXN0ZW5lciB7CitwdWJsaWMgY2xhc3MgUG9pbnRlckxvY2F0aW9uVmlldyBleHRlbmRzIFZpZXcgaW1wbGVtZW50cyBJbnB1dERldmljZUxpc3RlbmVyLAorICAgICAgICBQb2ludGVyRXZlbnRMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJQb2ludGVyIjsKIAogICAgIC8vIFRoZSBzeXN0ZW0gcHJvcGVydHkga2V5IHVzZWQgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGUgdmVsb2NpdHkgdHJhY2tlciBzdHJhdGVneQpAQCAtNTIwLDcgKzUyMiw4IEBACiAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKCkpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGFkZFBvaW50ZXJFdmVudChNb3Rpb25FdmVudCBldmVudCkgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUG9pbnRlckV2ZW50KE1vdGlvbkV2ZW50IGV2ZW50KSB7CiAgICAgICAgIGZpbmFsIGludCBhY3Rpb24gPSBldmVudC5nZXRBY3Rpb24oKTsKICAgICAgICAgaW50IE5QID0gbVBvaW50ZXJzLnNpemUoKTsKIApAQCAtNjQ4LDcgKzY1MSw3IEBACiAgICAgCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gb25Ub3VjaEV2ZW50KE1vdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIGFkZFBvaW50ZXJFdmVudChldmVudCk7CisgICAgICAgIG9uUG9pbnRlckV2ZW50KGV2ZW50KTsKIAogICAgICAgICBpZiAoZXZlbnQuZ2V0QWN0aW9uKCkgPT0gTW90aW9uRXZlbnQuQUNUSU9OX0RPV04gJiYgIWlzRm9jdXNlZCgpKSB7CiAgICAgICAgICAgICByZXF1ZXN0Rm9jdXMoKTsKQEAgLTY2MCw3ICs2NjMsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIG9uR2VuZXJpY01vdGlvbkV2ZW50KE1vdGlvbkV2ZW50IGV2ZW50KSB7CiAgICAgICAgIGZpbmFsIGludCBzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKTsKICAgICAgICAgaWYgKChzb3VyY2UgJiBJbnB1dERldmljZS5TT1VSQ0VfQ0xBU1NfUE9JTlRFUikgIT0gMCkgewotICAgICAgICAgICAgYWRkUG9pbnRlckV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIG9uUG9pbnRlckV2ZW50KGV2ZW50KTsKICAgICAgICAgfSBlbHNlIGlmICgoc291cmNlICYgSW5wdXREZXZpY2UuU09VUkNFX0NMQVNTX0pPWVNUSUNLKSAhPSAwKSB7CiAgICAgICAgICAgICBsb2dNb3Rpb25FdmVudCgiSm95c3RpY2siLCBldmVudCk7CiAgICAgICAgIH0gZWxzZSBpZiAoKHNvdXJjZSAmIElucHV0RGV2aWNlLlNPVVJDRV9DTEFTU19QT1NJVElPTikgIT0gMCkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9Sb3RhcnlTZWxlY3Rvci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9Sb3RhcnlTZWxlY3Rvci5qYXZhCmluZGV4IDRlNDA1ZjQuLmY4NTYwMjcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvUm90YXJ5U2VsZWN0b3IuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1JvdGFyeVNlbGVjdG9yLmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXg7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5WaWJyYXRvcjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9TY3JvbGxpbmdUYWJDb250YWluZXJWaWV3LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1Njcm9sbGluZ1RhYkNvbnRhaW5lclZpZXcuamF2YQppbmRleCBmYTI5ZTZlMS4uZDZiZDFkNmYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvU2Nyb2xsaW5nVGFiQ29udGFpbmVyVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvU2Nyb2xsaW5nVGFiQ29udGFpbmVyVmlldy5qYXZhCkBAIC0yMyw3ICsyMyw2IEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aW9uQmFyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHMuVHJ1bmNhdGVBdDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvU2l6ZUFkYXB0aXZlTGF5b3V0LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1NpemVBZGFwdGl2ZUxheW91dC5qYXZhCmluZGV4IGJhMTEzYTMuLjcyNjA2NTY1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1NpemVBZGFwdGl2ZUxheW91dC5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvU2l6ZUFkYXB0aXZlTGF5b3V0LmphdmEKQEAgLTc5LDE3ICs3OSwyMCBAQAogICAgIHByaXZhdGUgaW50IG1Nb2Rlc3R5UGFuZWxUb3A7CiAKICAgICBwdWJsaWMgU2l6ZUFkYXB0aXZlTGF5b3V0KENvbnRleHQgY29udGV4dCkgewotICAgICAgICBzdXBlcihjb250ZXh0KTsKLSAgICAgICAgaW5pdGlhbGl6ZSgpOworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwogICAgIH0KIAogICAgIHB1YmxpYyBTaXplQWRhcHRpdmVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwotICAgICAgICBpbml0aWFsaXplKCk7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KIAotICAgIHB1YmxpYyBTaXplQWRhcHRpdmVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBTaXplQWRhcHRpdmVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2l6ZUFkYXB0aXZlTGF5b3V0KAorICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIGluaXRpYWxpemUoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvU3VidGl0bGVWaWV3LmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1N1YnRpdGxlVmlldy5qYXZhCmluZGV4IDA3MTE5M2MuLjBiNjc5MGMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvU3VidGl0bGVWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9TdWJ0aXRsZVZpZXcuamF2YQpAQCAtMTgsNyArMTgsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcy5UaGVtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CkBAIC0zMyw3ICszMiw2IEBACiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRQYWludDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5DYXB0aW9uaW5nTWFuYWdlci5DYXB0aW9uU3R5bGU7CiAKQEAgLTc5LDEyICs3NywxNSBAQAogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCAwKTsKICAgICB9CiAKLSAgICBwdWJsaWMgU3VidGl0bGVWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKKyAgICBwdWJsaWMgU3VidGl0bGVWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIFN1YnRpdGxlVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CiAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKIAotICAgICAgICBmaW5hbCBUaGVtZSB0aGVtZSA9IGNvbnRleHQuZ2V0VGhlbWUoKTsKLSAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gdGhlbWUub2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgICAgICAgICAgYXR0cnMsIGFuZHJvaWQuUi5zdHlsZWFibGUuVGV4dFZpZXcsIGRlZlN0eWxlLCAwKTsKKyAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gY29udGV4dC5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgICAgICBhdHRycywgYW5kcm9pZC5SLnN0eWxlYWJsZS5UZXh0VmlldywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAKICAgICAgICAgQ2hhclNlcXVlbmNlIHRleHQgPSAiIjsKICAgICAgICAgaW50IHRleHRTaXplID0gMTU7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1RleHRQcm9ncmVzc0Jhci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9UZXh0UHJvZ3Jlc3NCYXIuamF2YQppbmRleCBlODk4YWE0Li43Y2EwN2Q0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1RleHRQcm9ncmVzc0Jhci5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvVGV4dFByb2dyZXNzQmFyLmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuR3Jhdml0eTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwpAQCAtNTksOSArNTgsMTMgQEAKIAogICAgIGJvb2xlYW4gbUNocm9ub21ldGVyRm9sbG93ID0gZmFsc2U7CiAgICAgaW50IG1DaHJvbm9tZXRlckdyYXZpdHkgPSBHcmF2aXR5Lk5PX0dSQVZJVFk7CisKKyAgICBwdWJsaWMgVGV4dFByb2dyZXNzQmFyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOworICAgIH0KICAgICAKLSAgICBwdWJsaWMgVGV4dFByb2dyZXNzQmFyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKKyAgICBwdWJsaWMgVGV4dFByb2dyZXNzQmFyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIpOwogICAgIH0KIAogICAgIHB1YmxpYyBUZXh0UHJvZ3Jlc3NCYXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvV2F2ZVZpZXcuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvV2F2ZVZpZXcuamF2YQppbmRleCBkMzNkNTBjLi4wYzU5OTNiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L1dhdmVWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9XYXZlVmlldy5qYXZhCkBAIC0yOCw3ICsyOCw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuVmlicmF0b3I7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQ7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L211bHRpd2F2ZXZpZXcvVGFyZ2V0RHJhd2FibGUuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvbXVsdGl3YXZldmlldy9UYXJnZXREcmF3YWJsZS5qYXZhCmluZGV4IDE2YmVjMTYuLjVhNGM0NDEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvbXVsdGl3YXZldmlldy9UYXJnZXREcmF3YWJsZS5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvbXVsdGl3YXZldmlldy9UYXJnZXREcmF3YWJsZS5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5TdGF0ZUxpc3REcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvQW5kcm9pZC5tayBiL2NvcmUvam5pL0FuZHJvaWQubWsKaW5kZXggMTk1ODU4NC4uYTU1ODkwOSAxMDA2NDQKLS0tIGEvY29yZS9qbmkvQW5kcm9pZC5taworKysgYi9jb3JlL2puaS9BbmRyb2lkLm1rCkBAIC00LDYgKzQsNyBAQAogTE9DQUxfQ0ZMQUdTICs9IC1ESEFWRV9DT05GSUdfSCAtREtIVE1MX05PX0VYQ0VQVElPTlMgLURHS1dRX05PX0pBVkEKIExPQ0FMX0NGTEFHUyArPSAtRE5PX1NVUFBPUlRfSlNfQklORElORyAtRFFUX05PX1dIRUVMRVZFTlQgLURLSFRNTF9OT19YQkwKIExPQ0FMX0NGTEFHUyArPSAtVV9fQVBQTEVfXworTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tdW51c2VkLXBhcmFtZXRlcgogCiBpZmVxICgkKFRBUkdFVF9BUkNIKSwgYXJtKQogCUxPQ0FMX0NGTEFHUyArPSAtRFBBQ0tFRD0iX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIgpAQCAtNTAsMTAgKzUxLDExIEBACiAJYW5kcm9pZF92aWV3X0lucHV0UXVldWUuY3BwIFwKIAlhbmRyb2lkX3ZpZXdfS2V5RXZlbnQuY3BwIFwKIAlhbmRyb2lkX3ZpZXdfS2V5Q2hhcmFjdGVyTWFwLmNwcCBcCi0JYW5kcm9pZF92aWV3X0hhcmR3YXJlUmVuZGVyZXIuY3BwIFwKIAlhbmRyb2lkX3ZpZXdfR3JhcGhpY0J1ZmZlci5jcHAgXAorCWFuZHJvaWRfdmlld19HTFJlbmRlcmVyLmNwcCBcCiAJYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0LmNwcCBcCiAJYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhcy5jcHAgXAorCWFuZHJvaWRfdmlld19UaHJlYWRlZFJlbmRlcmVyLmNwcCBcCiAJYW5kcm9pZF92aWV3X01vdGlvbkV2ZW50LmNwcCBcCiAJYW5kcm9pZF92aWV3X1BvaW50ZXJJY29uLmNwcCBcCiAJYW5kcm9pZF92aWV3X1ZlbG9jaXR5VHJhY2tlci5jcHAgXApAQCAtMTE0LDYgKzExNiw3IEBACiAJYW5kcm9pZC9ncmFwaGljcy9UZXh0TGF5b3V0LmNwcCBcCiAJYW5kcm9pZC9ncmFwaGljcy9UZXh0TGF5b3V0Q2FjaGUuY3BwIFwKIAlhbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlLmNwcCBcCisJYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZUltcGwuY3BwIFwKIAlhbmRyb2lkL2dyYXBoaWNzL1V0aWxzLmNwcCBcCiAJYW5kcm9pZC9ncmFwaGljcy9YZmVybW9kZS5jcHAgXAogCWFuZHJvaWQvZ3JhcGhpY3MvWXV2VG9KcGVnRW5jb2Rlci5jcHAgXApAQCAtMjE1LDYgKzIxOCwxNiBAQAogCUxPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgKz0gbGliaHd1aQogZW5kaWYKIAoraWZlcSAoJChVU0VfTUlOSUtJTiksIHRydWUpCisJTE9DQUxfQ0ZMQUdTICs9IC1EVVNFX01JTklLSU4KKwlMT0NBTF9DX0lOQ0xVREVTICs9IGZyYW1ld29ya3MvbWluaWtpbi9pbmNsdWRlIFwKKwkJZXh0ZXJuYWwvZnJlZXR5cGUvaW5jbHVkZQorCUxPQ0FMX1NSQ19GSUxFUyArPSAJYW5kcm9pZC9ncmFwaGljcy9NaW5pa2luU2tpYS5jcHAKKyMgbm90ZTogdGhlIGZyZWV0eXBlIGluY2x1ZGUgaXMgc3B1cmlvdXM7IG1pbmlraW4gaXRzZWxmIHByb2JhYmx5CisjIHNob3VsZG4ndCBkZXBlbmQgb24gaXQKKwlMT0NBTF9TSEFSRURfTElCUkFSSUVTICs9IGxpYm1pbmlraW4gbGlic3RscG9ydAorZW5kaWYKKwogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyArPSBcCiAJbGliZGwKICMgd2UgbmVlZCB0byBhY2Nlc3MgdGhlIHByaXZhdGUgQmlvbmljIGhlYWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvQW5kcm9pZFJ1bnRpbWUuY3BwIGIvY29yZS9qbmkvQW5kcm9pZFJ1bnRpbWUuY3BwCmluZGV4IDk3ZWE1ZTYuLmIyMGRjMDkgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL0FuZHJvaWRSdW50aW1lLmNwcAorKysgYi9jb3JlL2puaS9BbmRyb2lkUnVudGltZS5jcHAKQEAgLTEyMiw3ICsxMjIsOCBAQAogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfR3JhcGhpY0J1ZmZlcihKTklFbnYqIGVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdChKTklFbnYqIGVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19HTEVTMjBDYW52YXMoSk5JRW52KiBlbnYpOwotZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlcihKTklFbnYqIGVudik7CitleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19HTFJlbmRlcmVyKEpOSUVudiogZW52KTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF92aWV3X1RocmVhZGVkUmVuZGVyZXIoSk5JRW52KiBlbnYpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfU3VyZmFjZShKTklFbnYqIGVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19TdXJmYWNlQ29udHJvbChKTklFbnYqIGVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19TdXJmYWNlU2Vzc2lvbihKTklFbnYqIGVudik7CkBAIC0xMDMwLDcgKzEwMzEsOCBAQAogICAgIHZvaWQqKiBhcmdzID0gKHZvaWQqKikgbWFsbG9jKDMgKiBzaXplb2Yodm9pZCopKTsgICAvLyBqYXZhVGhyZWFkU2hlbGwgbXVzdCBmcmVlCiAgICAgaW50IHJlc3VsdDsKIAotICAgIGFzc2VydCh0aHJlYWROYW1lICE9IE5VTEwpOworICAgIGlmICghdGhyZWFkTmFtZSkKKyAgICAgICAgdGhyZWFkTmFtZSA9ICJ1bm5hbWVkIHRocmVhZCI7CiAKICAgICBhcmdzWzBdID0gKHZvaWQqKSBlbnRyeUZ1bmN0aW9uOwogICAgIGFyZ3NbMV0gPSB1c2VyRGF0YTsKQEAgLTExMjUsNyArMTEyNyw4IEBACiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfR3JhcGhpY0J1ZmZlciksCiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3QpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhcyksCi0gICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlciksCisgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfR0xSZW5kZXJlciksCisgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfVGhyZWFkZWRSZW5kZXJlciksCiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfU3VyZmFjZSksCiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfU3VyZmFjZUNvbnRyb2wpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF92aWV3X1N1cmZhY2VTZXNzaW9uKSwKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwLmNwcCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwLmNwcAppbmRleCBlZWE5ZWUxLi4wOTQxMjliIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcC5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXAuY3BwCkBAIC0yMjcsNyArMjI3LDcgQEAKICAgICBkbyB7DQogICAgICAgICAqZHN0KysgPSBTa1VuUHJlTXVsdGlwbHk6OlBNQ29sb3JUb0NvbG9yKGNvbG9yc1sqcysrXSk7DQogICAgIH0gd2hpbGUgKC0td2lkdGggIT0gMCk7DQotICAgIGN0YWJsZS0+dW5sb2NrQ29sb3JzKGZhbHNlKTsNCisgICAgY3RhYmxlLT51bmxvY2tDb2xvcnMoKTsNCiB9DQogDQogc3RhdGljIHZvaWQgVG9Db2xvcl9TSThfUmF3KFNrQ29sb3IgZHN0W10sIGNvbnN0IHZvaWQqIHNyYywgaW50IHdpZHRoLA0KQEAgLTI0MCw3ICsyNDAsNyBAQAogICAgICAgICAqZHN0KysgPSBTa0NvbG9yU2V0QVJHQihTa0dldFBhY2tlZEEzMihjKSwgU2tHZXRQYWNrZWRSMzIoYyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0dldFBhY2tlZEczMihjKSwgU2tHZXRQYWNrZWRCMzIoYykpOw0KICAgICB9IHdoaWxlICgtLXdpZHRoICE9IDApOw0KLSAgICBjdGFibGUtPnVubG9ja0NvbG9ycyhmYWxzZSk7DQorICAgIGN0YWJsZS0+dW5sb2NrQ29sb3JzKCk7DQogfQ0KIA0KIHN0YXRpYyB2b2lkIFRvQ29sb3JfU0k4X09wYXF1ZShTa0NvbG9yIGRzdFtdLCBjb25zdCB2b2lkKiBzcmMsIGludCB3aWR0aCwNCkBAIC0yNTMsNyArMjUzLDcgQEAKICAgICAgICAgKmRzdCsrID0gU2tDb2xvclNldFJHQihTa0dldFBhY2tlZFIzMihjKSwgU2tHZXRQYWNrZWRHMzIoYyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrR2V0UGFja2VkQjMyKGMpKTsNCiAgICAgfSB3aGlsZSAoLS13aWR0aCAhPSAwKTsNCi0gICAgY3RhYmxlLT51bmxvY2tDb2xvcnMoZmFsc2UpOw0KKyAgICBjdGFibGUtPnVubG9ja0NvbG9ycygpOw0KIH0NCiANCiAvLyBjYW4gcmV0dXJuIE5VTEwNCkBAIC01NDMsMTQgKzU0MywxNCBAQAogICAgIHAtPndyaXRlSW50MzIoYml0bWFwLT5yb3dCeXRlcygpKTsNCiAgICAgcC0+d3JpdGVJbnQzMihkZW5zaXR5KTsNCiANCi0gICAgaWYgKGJpdG1hcC0+Z2V0Q29uZmlnKCkgPT0gU2tCaXRtYXA6OmtJbmRleDhfQ29uZmlnKSB7DQorICAgIGlmIChiaXRtYXAtPmNvbmZpZygpID09IFNrQml0bWFwOjprSW5kZXg4X0NvbmZpZykgew0KICAgICAgICAgU2tDb2xvclRhYmxlKiBjdGFibGUgPSBiaXRtYXAtPmdldENvbG9yVGFibGUoKTsNCiAgICAgICAgIGlmIChjdGFibGUgIT0gTlVMTCkgew0KICAgICAgICAgICAgIGludCBjb3VudCA9IGN0YWJsZS0+Y291bnQoKTsNCiAgICAgICAgICAgICBwLT53cml0ZUludDMyKGNvdW50KTsNCiAgICAgICAgICAgICBtZW1jcHkocC0+d3JpdGVJbnBsYWNlKGNvdW50ICogc2l6ZW9mKFNrUE1Db2xvcikpLA0KICAgICAgICAgICAgICAgICAgICBjdGFibGUtPmxvY2tDb2xvcnMoKSwgY291bnQgKiBzaXplb2YoU2tQTUNvbG9yKSk7DQotICAgICAgICAgICAgY3RhYmxlLT51bmxvY2tDb2xvcnMoZmFsc2UpOw0KKyAgICAgICAgICAgIGN0YWJsZS0+dW5sb2NrQ29sb3JzKCk7DQogICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgIHAtPndyaXRlSW50MzIoMCk7ICAgLy8gaW5kaWNhdGUgbm8gY3RhYmxlDQogICAgICAgICB9DQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5LmNwcCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5jcHAKaW5kZXggZGE2MjE5Zi4uODBiZDNlMiAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5LmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkuY3BwCkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICB2aXJ0dWFsIGJvb2wgYWxsb2NQaXhlbFJlZihTa0JpdG1hcCogYml0bWFwLCBTa0NvbG9yVGFibGUqIGN0YWJsZSkgewogICAgICAgICAvLyBhY2NvdW50cyBmb3Igc2NhbGUgaW4gZmluYWwgYWxsb2NhdGlvbiwgdXNpbmcgZXZlbnR1YWwgc2l6ZSBhbmQgY29uZmlnCiAgICAgICAgIGNvbnN0IGludCBieXRlc1BlclBpeGVsID0gU2tCaXRtYXA6OkNvbXB1dGVCeXRlc1BlclBpeGVsKAotICAgICAgICAgICAgICAgIGNvbmZpZ0ZvclNjYWxlZE91dHB1dChiaXRtYXAtPmdldENvbmZpZygpKSk7CisgICAgICAgICAgICAgICAgY29uZmlnRm9yU2NhbGVkT3V0cHV0KGJpdG1hcC0+Y29uZmlnKCkpKTsKICAgICAgICAgY29uc3QgaW50IHJlcXVlc3RlZFNpemUgPSBieXRlc1BlclBpeGVsICoKICAgICAgICAgICAgICAgICBpbnQoYml0bWFwLT53aWR0aCgpICogbVNjYWxlICsgMC41ZikgKgogICAgICAgICAgICAgICAgIGludChiaXRtYXAtPmhlaWdodCgpICogbVNjYWxlICsgMC41Zik7CmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcFJlZ2lvbkRlY29kZXIuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBSZWdpb25EZWNvZGVyLmNwcAppbmRleCBlZTQ3YWM0Li5kMDhhYmJhIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcFJlZ2lvbkRlY29kZXIuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwUmVnaW9uRGVjb2Rlci5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJDcmVhdGVKYXZhT3V0cHV0U3RyZWFtQWRhcHRvci5oIgogI2luY2x1ZGUgIlV0aWxzLmgiCiAjaW5jbHVkZSAiSk5JSGVscC5oIgotI2luY2x1ZGUgIlNrVFNjb3BlZFB0ci5oIgogCiAjaW5jbHVkZSA8YW5kcm9pZF9ydW50aW1lL0FuZHJvaWRSdW50aW1lLmg+CiAjaW5jbHVkZSAiYW5kcm9pZF91dGlsX0JpbmRlci5oIgpAQCAtNzYsNyArNzUsNyBAQAogICAgIGludCBmSGVpZ2h0OwogfTsKIAotc3RhdGljIGpvYmplY3QgY3JlYXRlQml0bWFwUmVnaW9uRGVjb2RlcihKTklFbnYqIGVudiwgU2tTdHJlYW0qIHN0cmVhbSkgeworc3RhdGljIGpvYmplY3QgY3JlYXRlQml0bWFwUmVnaW9uRGVjb2RlcihKTklFbnYqIGVudiwgU2tTdHJlYW1SZXdpbmRhYmxlKiBzdHJlYW0pIHsKICAgICBTa0ltYWdlRGVjb2RlciogZGVjb2RlciA9IFNrSW1hZ2VEZWNvZGVyOjpGYWN0b3J5KHN0cmVhbSk7CiAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgaWYgKE5VTEwgPT0gZGVjb2RlcikgewpAQCAtMTA4LDcgKzEwNyw3IEBACiAgICAgICAgIEZvciBub3cgd2UganVzdCBhbHdheXMgY29weSB0aGUgYXJyYXkncyBkYXRhIGlmIGlzU2hhcmVhYmxlLgogICAgICAqLwogICAgIEF1dG9KYXZhQnl0ZUFycmF5IGFyKGVudiwgYnl0ZUFycmF5KTsKLSAgICBTa1N0cmVhbSogc3RyZWFtID0gbmV3IFNrTWVtb3J5U3RyZWFtKGFyLnB0cigpICsgb2Zmc2V0LCBsZW5ndGgsIHRydWUpOworICAgIFNrTWVtb3J5U3RyZWFtKiBzdHJlYW0gPSBuZXcgU2tNZW1vcnlTdHJlYW0oYXIucHRyKCkgKyBvZmZzZXQsIGxlbmd0aCwgdHJ1ZSk7CiAKICAgICBqb2JqZWN0IGJyZCA9IGNyZWF0ZUJpdG1hcFJlZ2lvbkRlY29kZXIoZW52LCBzdHJlYW0pOwogICAgIFNrU2FmZVVucmVmKHN0cmVhbSk7IC8vIHRoZSBkZWNvZGVyIG5vdyBob2xkcyBhIHJlZmVyZW5jZQpAQCAtMjE1LDcgKzIxNCw3IEBACiAgICAgcmVnaW9uLmZSaWdodCA9IHN0YXJ0X3ggKyB3aWR0aDsKICAgICByZWdpb24uZkJvdHRvbSA9IHN0YXJ0X3kgKyBoZWlnaHQ7CiAgICAgU2tCaXRtYXAqIGJpdG1hcCA9IE5VTEw7Ci0gICAgU2tUU2NvcGVkUHRyPFNrQml0bWFwPiBhZGI7CisgICAgU2tBdXRvVERlbGV0ZTxTa0JpdG1hcD4gYWRiOwogCiAgICAgaWYgKHRpbGVCaXRtYXAgIT0gTlVMTCkgewogICAgICAgICAvLyBSZS11c2UgYml0bWFwLgpAQCAtMjQ2LDcgKzI0NSw3IEBACiAgICAgfQogCiAgICAgLy8gZGV0YWNoIGJpdG1hcCBmcm9tIGl0cyBhdXRvZGVsZXRlciwgc2luY2Ugd2Ugd2FudCB0byBvd24gaXQgbm93Ci0gICAgYWRiLnJlbGVhc2UoKTsKKyAgICBhZGIuZGV0YWNoKCk7CiAKICAgICBKYXZhUGl4ZWxBbGxvY2F0b3IqIGFsbG9jYXRvciA9IChKYXZhUGl4ZWxBbGxvY2F0b3IqKSBkZWNvZGVyLT5nZXRBbGxvY2F0b3IoKTsKICAgICBqYnl0ZUFycmF5IGJ1ZmYgPSBhbGxvY2F0b3ItPmdldFN0b3JhZ2VPYmpBbmRSZXNldCgpOwpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9DYW52YXMuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9DYW52YXMuY3BwCmluZGV4IDgxM2RkNWEuLjlhMDBkNTM4IDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0NhbnZhcy5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9DYW52YXMuY3BwCkBAIC0yNyw4ICsyNywxNCBAQAogI2luY2x1ZGUgIlNrU2hhZGVyLmgiCiAjaW5jbHVkZSAiU2tUZW1wbGF0ZXMuaCIKIAorI2lmZGVmIFVTRV9NSU5JS0lOCisjaW5jbHVkZSA8bWluaWtpbi9MYXlvdXQuaD4KKyNpbmNsdWRlICJNaW5pa2luU2tpYS5oIgorI2VuZGlmCisKICNpbmNsdWRlICJUZXh0TGF5b3V0LmgiCiAjaW5jbHVkZSAiVGV4dExheW91dENhY2hlLmgiCisjaW5jbHVkZSAiVHlwZWZhY2VJbXBsLmgiCiAKICNpbmNsdWRlICJ1bmljb2RlL3ViaWRpLmgiCiAjaW5jbHVkZSAidW5pY29kZS91c2hhcGUuaCIKQEAgLTc0MiwzNSArNzQ4LDgzIEBACiAgICAgfQogCiAKLSAgICBzdGF0aWMgdm9pZCBkcmF3VGV4dF9fX0NJSUZGSVBhaW50KEpOSUVudiogZW52LCBqb2JqZWN0LCBTa0NhbnZhcyogY2FudmFzLAorICAgIHN0YXRpYyB2b2lkIGRyYXdUZXh0X19fQ0lJRkZJUGFpbnRUeXBlZmFjZShKTklFbnYqIGVudiwgam9iamVjdCwgU2tDYW52YXMqIGNhbnZhcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamNoYXJBcnJheSB0ZXh0LCBpbnQgaW5kZXgsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZsb2F0IHgsIGpmbG9hdCB5LCBpbnQgZmxhZ3MsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmbG9hdCB4LCBqZmxvYXQgeSwgaW50IGZsYWdzLCBTa1BhaW50KiBwYWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZWZhY2VJbXBsICp0eXBlZmFjZSkgewogICAgICAgICBqY2hhciogdGV4dEFycmF5ID0gZW52LT5HZXRDaGFyQXJyYXlFbGVtZW50cyh0ZXh0LCBOVUxMKTsKLSAgICAgICAgZHJhd1RleHRXaXRoR2x5cGhzKGNhbnZhcywgdGV4dEFycmF5ICsgaW5kZXgsIDAsIGNvdW50LCB4LCB5LCBmbGFncywgcGFpbnQpOworICAgICAgICBkcmF3VGV4dFdpdGhHbHlwaHMoY2FudmFzLCB0ZXh0QXJyYXkgKyBpbmRleCwgMCwgY291bnQsIHgsIHksIGZsYWdzLCBwYWludCwgdHlwZWZhY2UpOwogICAgICAgICBlbnYtPlJlbGVhc2VDaGFyQXJyYXlFbGVtZW50cyh0ZXh0LCB0ZXh0QXJyYXksIEpOSV9BQk9SVCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZHJhd1RleHRfX1N0cmluZ0lJRkZJUGFpbnQoSk5JRW52KiBlbnYsIGpvYmplY3QsCisgICAgc3RhdGljIHZvaWQgZHJhd1RleHRfX1N0cmluZ0lJRkZJUGFpbnRUeXBlZmFjZShKTklFbnYqIGVudiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrQ2FudmFzKiBjYW52YXMsIGpzdHJpbmcgdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgaW50IGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmbG9hdCB4LCBqZmxvYXQgeSwgaW50IGZsYWdzLCBTa1BhaW50KiBwYWludCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZsb2F0IHgsIGpmbG9hdCB5LCBpbnQgZmxhZ3MsIFNrUGFpbnQqIHBhaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZWZhY2VJbXBsICp0eXBlZmFjZSkgewogICAgICAgICBjb25zdCBqY2hhciogdGV4dEFycmF5ID0gZW52LT5HZXRTdHJpbmdDaGFycyh0ZXh0LCBOVUxMKTsKLSAgICAgICAgZHJhd1RleHRXaXRoR2x5cGhzKGNhbnZhcywgdGV4dEFycmF5LCBzdGFydCwgZW5kLCB4LCB5LCBmbGFncywgcGFpbnQpOworICAgICAgICBkcmF3VGV4dFdpdGhHbHlwaHMoY2FudmFzLCB0ZXh0QXJyYXksIHN0YXJ0LCBlbmQsIHgsIHksIGZsYWdzLCBwYWludCwgdHlwZWZhY2UpOwogICAgICAgICBlbnYtPlJlbGVhc2VTdHJpbmdDaGFycyh0ZXh0LCB0ZXh0QXJyYXkpOwogICAgIH0KIAorI2lmZGVmIFVTRV9NSU5JS0lOCisgICAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1RvU2tpYShTa0NhbnZhcyAqY2FudmFzLCBTa1BhaW50ICpwYWludCwgTGF5b3V0ICpsYXlvdXQsIGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAgc2l6ZV90IG5HbHlwaHMgPSBsYXlvdXQtPm5HbHlwaHMoKTsKKyAgICAgICAgdWludDE2X3QgKmdseXBocyA9IG5ldyB1aW50MTZfdFtuR2x5cGhzXTsKKyAgICAgICAgU2tQb2ludCAqcG9zID0gbmV3IFNrUG9pbnRbbkdseXBoc107CisgICAgICAgIFNrVHlwZWZhY2UgKmxhc3RGYWNlID0gTlVMTDsKKyAgICAgICAgU2tUeXBlZmFjZSAqc2tGYWNlID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKKworICAgICAgICBwYWludC0+c2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbkdseXBoczsgaSsrKSB7CisgICAgICAgICAgICBNaW5pa2luRm9udFNraWEgKm1mcyA9IHN0YXRpY19jYXN0PE1pbmlraW5Gb250U2tpYSAqPihsYXlvdXQtPmdldEZvbnQoaSkpOworICAgICAgICAgICAgc2tGYWNlID0gbWZzLT5HZXRTa1R5cGVmYWNlKCk7CisgICAgICAgICAgICBnbHlwaHNbaV0gPSBsYXlvdXQtPmdldEdseXBoSWQoaSk7CisgICAgICAgICAgICBwb3NbaV0uZlggPSBTa0Zsb2F0VG9TY2FsYXIoeCArIGxheW91dC0+Z2V0WChpKSk7CisgICAgICAgICAgICBwb3NbaV0uZlkgPSBTa0Zsb2F0VG9TY2FsYXIoeSArIGxheW91dC0+Z2V0WShpKSk7CisgICAgICAgICAgICBpZiAoaSA+IDAgJiYgc2tGYWNlICE9IGxhc3RGYWNlKSB7CisgICAgICAgICAgICAgICAgcGFpbnQtPnNldFR5cGVmYWNlKGxhc3RGYWNlKTsKKyAgICAgICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0KGdseXBocyArIHN0YXJ0LCAoaSAtIHN0YXJ0KSA8PCAxLCBwb3MgKyBzdGFydCwgKnBhaW50KTsKKyAgICAgICAgICAgICAgICBzdGFydCA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXN0RmFjZSA9IHNrRmFjZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2tGYWNlICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHBhaW50LT5zZXRUeXBlZmFjZShza0ZhY2UpOworICAgICAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChnbHlwaHMgKyBzdGFydCwgKG5HbHlwaHMgLSBzdGFydCkgPDwgMSwgcG9zICsgc3RhcnQsICpwYWludCk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlW10gZ2x5cGhzOworICAgICAgICBkZWxldGVbXSBwb3M7CisgICAgfQorI2VuZGlmCisKICAgICBzdGF0aWMgdm9pZCBkcmF3VGV4dFdpdGhHbHlwaHMoU2tDYW52YXMqIGNhbnZhcywgY29uc3QgamNoYXIqIHRleHRBcnJheSwKICAgICAgICAgICAgIGludCBzdGFydCwgaW50IGVuZCwKLSAgICAgICAgICAgIGpmbG9hdCB4LCBqZmxvYXQgeSwgaW50IGZsYWdzLCBTa1BhaW50KiBwYWludCkgeworICAgICAgICAgICAgamZsb2F0IHgsIGpmbG9hdCB5LCBpbnQgZmxhZ3MsIFNrUGFpbnQqIHBhaW50LCBUeXBlZmFjZUltcGwqIHR5cGVmYWNlKSB7CiAKICAgICAgICAgamludCBjb3VudCA9IGVuZCAtIHN0YXJ0OwotICAgICAgICBkcmF3VGV4dFdpdGhHbHlwaHMoY2FudmFzLCB0ZXh0QXJyYXkgKyBzdGFydCwgMCwgY291bnQsIGNvdW50LCB4LCB5LCBmbGFncywgcGFpbnQpOworICAgICAgICBkcmF3VGV4dFdpdGhHbHlwaHMoY2FudmFzLCB0ZXh0QXJyYXkgKyBzdGFydCwgMCwgY291bnQsIGNvdW50LCB4LCB5LCBmbGFncywgcGFpbnQsIHR5cGVmYWNlKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBkcmF3VGV4dFdpdGhHbHlwaHMoU2tDYW52YXMqIGNhbnZhcywgY29uc3QgamNoYXIqIHRleHRBcnJheSwKICAgICAgICAgICAgIGludCBzdGFydCwgaW50IGNvdW50LCBpbnQgY29udGV4dENvdW50LAotICAgICAgICAgICAgamZsb2F0IHgsIGpmbG9hdCB5LCBpbnQgZmxhZ3MsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgICAgICBqZmxvYXQgeCwgamZsb2F0IHksIGludCBmbGFncywgU2tQYWludCogcGFpbnQsIFR5cGVmYWNlSW1wbCogdHlwZWZhY2UpIHsKIAorI2lmZGVmIFVTRV9NSU5JS0lOCisgICAgICAgIExheW91dCBsYXlvdXQ7CisgICAgICAgIFR5cGVmYWNlSW1wbCogcmVzb2x2ZWRGYWNlID0gVHlwZWZhY2VJbXBsX3Jlc29sdmVEZWZhdWx0KHR5cGVmYWNlKTsKKyAgICAgICAgbGF5b3V0LnNldEZvbnRDb2xsZWN0aW9uKHJlc29sdmVkRmFjZS0+ZkZvbnRDb2xsZWN0aW9uKTsKKyAgICAgICAgRm9udFN0eWxlIHN0eWxlID0gcmVzb2x2ZWRGYWNlLT5mU3R5bGU7CisgICAgICAgIGNoYXIgY3NzWzI1Nl07CisgICAgICAgIHNwcmludGYoY3NzLCAiZm9udC1zaXplOiAlZDsgZm9udC13ZWlnaHQ6ICVkOyBmb250LXN0eWxlOiAlcyIsCisgICAgICAgICAgICAoaW50KXBhaW50LT5nZXRUZXh0U2l6ZSgpLAorICAgICAgICAgICAgc3R5bGUuZ2V0V2VpZ2h0KCkgKiAxMDAsCisgICAgICAgICAgICBzdHlsZS5nZXRJdGFsaWMoKSA/ICJpdGFsaWMiIDogIm5vcm1hbCIpOworICAgICAgICBsYXlvdXQuc2V0UHJvcGVydGllcyhjc3MpOworICAgICAgICBsYXlvdXQuZG9MYXlvdXQodGV4dEFycmF5ICsgc3RhcnQsIGNvdW50KTsKKyAgICAgICAgZHJhd0dseXBoc1RvU2tpYShjYW52YXMsIHBhaW50LCAmbGF5b3V0LCB4LCB5KTsKKyNlbHNlCiAgICAgICAgIHNwPFRleHRMYXlvdXRWYWx1ZT4gdmFsdWUgPSBUZXh0TGF5b3V0RW5naW5lOjpnZXRJbnN0YW5jZSgpLmdldFZhbHVlKHBhaW50LAogICAgICAgICAgICAgICAgIHRleHRBcnJheSwgc3RhcnQsIGNvdW50LCBjb250ZXh0Q291bnQsIGZsYWdzKTsKICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKQEAgLTc4Niw2ICs4NDAsNyBAQAogICAgICAgICBkb0RyYXdHbHlwaHNQb3MoY2FudmFzLCB2YWx1ZS0+Z2V0R2x5cGhzKCksIHZhbHVlLT5nZXRQb3MoKSwgMCwgdmFsdWUtPmdldEdseXBoc0NvdW50KCksIHgsIHksIGZsYWdzLCBwYWludCk7CiAgICAgICAgIGRvRHJhd1RleHREZWNvcmF0aW9ucyhjYW52YXMsIHgsIHksIHZhbHVlLT5nZXRUb3RhbEFkdmFuY2UoKSwgcGFpbnQpOwogICAgICAgICBwYWludC0+c2V0VGV4dEFsaWduKGFsaWduKTsKKyNlbmRpZgogICAgIH0KIAogLy8gU2FtZSB2YWx1ZXMgdXNlZCBieSBTa2lhCkBAIC04NDIsMjcgKzg5NywyOSBAQAogICAgICAgICBkZWxldGVbXSBwb3NQdHI7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZHJhd1RleHRSdW5fX19DSUlJSUZGSVBhaW50KAorICAgIHN0YXRpYyB2b2lkIGRyYXdUZXh0UnVuX19fQ0lJSUlGRklQYWludFR5cGVmYWNlKAogICAgICAgICBKTklFbnYqIGVudiwgam9iamVjdCwgU2tDYW52YXMqIGNhbnZhcywgamNoYXJBcnJheSB0ZXh0LCBpbnQgaW5kZXgsCiAgICAgICAgIGludCBjb3VudCwgaW50IGNvbnRleHRJbmRleCwgaW50IGNvbnRleHRDb3VudCwKLSAgICAgICAgamZsb2F0IHgsIGpmbG9hdCB5LCBpbnQgZGlyRmxhZ3MsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGpmbG9hdCB4LCBqZmxvYXQgeSwgaW50IGRpckZsYWdzLCBTa1BhaW50KiBwYWludCwKKyAgICAgICAgVHlwZWZhY2VJbXBsKiB0eXBlZmFjZSkgewogCiAgICAgICAgIGpjaGFyKiBjaGFycyA9IGVudi0+R2V0Q2hhckFycmF5RWxlbWVudHModGV4dCwgTlVMTCk7CiAgICAgICAgIGRyYXdUZXh0V2l0aEdseXBocyhjYW52YXMsIGNoYXJzICsgY29udGV4dEluZGV4LCBpbmRleCAtIGNvbnRleHRJbmRleCwKLSAgICAgICAgICAgICAgICBjb3VudCwgY29udGV4dENvdW50LCB4LCB5LCBkaXJGbGFncywgcGFpbnQpOworICAgICAgICAgICAgICAgIGNvdW50LCBjb250ZXh0Q291bnQsIHgsIHksIGRpckZsYWdzLCBwYWludCwgdHlwZWZhY2UpOwogICAgICAgICBlbnYtPlJlbGVhc2VDaGFyQXJyYXlFbGVtZW50cyh0ZXh0LCBjaGFycywgSk5JX0FCT1JUKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBkcmF3VGV4dFJ1bl9fU3RyaW5nSUlJSUZGSVBhaW50KAorICAgIHN0YXRpYyB2b2lkIGRyYXdUZXh0UnVuX19TdHJpbmdJSUlJRkZJUGFpbnRUeXBlZmFjZSgKICAgICAgICAgSk5JRW52KiBlbnYsIGpvYmplY3Qgb2JqLCBTa0NhbnZhcyogY2FudmFzLCBqc3RyaW5nIHRleHQsIGppbnQgc3RhcnQsCiAgICAgICAgIGppbnQgZW5kLCBqaW50IGNvbnRleHRTdGFydCwgamludCBjb250ZXh0RW5kLAotICAgICAgICBqZmxvYXQgeCwgamZsb2F0IHksIGppbnQgZGlyRmxhZ3MsIFNrUGFpbnQqIHBhaW50KSB7CisgICAgICAgIGpmbG9hdCB4LCBqZmxvYXQgeSwgamludCBkaXJGbGFncywgU2tQYWludCogcGFpbnQsCisgICAgICAgIFR5cGVmYWNlSW1wbCogdHlwZWZhY2UpIHsKIAogICAgICAgICBqaW50IGNvdW50ID0gZW5kIC0gc3RhcnQ7CiAgICAgICAgIGppbnQgY29udGV4dENvdW50ID0gY29udGV4dEVuZCAtIGNvbnRleHRTdGFydDsKICAgICAgICAgY29uc3QgamNoYXIqIGNoYXJzID0gZW52LT5HZXRTdHJpbmdDaGFycyh0ZXh0LCBOVUxMKTsKICAgICAgICAgZHJhd1RleHRXaXRoR2x5cGhzKGNhbnZhcywgY2hhcnMgKyBjb250ZXh0U3RhcnQsIHN0YXJ0IC0gY29udGV4dFN0YXJ0LAotICAgICAgICAgICAgICAgIGNvdW50LCBjb250ZXh0Q291bnQsIHgsIHksIGRpckZsYWdzLCBwYWludCk7CisgICAgICAgICAgICAgICAgY291bnQsIGNvbnRleHRDb3VudCwgeCwgeSwgZGlyRmxhZ3MsIHBhaW50LCB0eXBlZmFjZSk7CiAgICAgICAgIGVudi0+UmVsZWFzZVN0cmluZ0NoYXJzKHRleHQsIGNoYXJzKTsKICAgICB9CiAKQEAgLTEwNzAsMTQgKzExMjcsMTQgQEAKICAgICAgICAgKHZvaWQqKVNrQ2FudmFzR2x1ZTo6ZHJhd0JpdG1hcE1lc2h9LAogICAgIHsibmF0aXZlRHJhd1ZlcnRpY2VzIiwgIihJSUlbRklbRklbSUlbU0lJSSlWIiwKICAgICAgICAgKHZvaWQqKVNrQ2FudmFzR2x1ZTo6ZHJhd1ZlcnRpY2VzfSwKLSAgICB7Im5hdGl2ZV9kcmF3VGV4dCIsIihJW0NJSUZGSUkpViIsCi0gICAgICAgICh2b2lkKikgU2tDYW52YXNHbHVlOjpkcmF3VGV4dF9fX0NJSUZGSVBhaW50fSwKLSAgICB7Im5hdGl2ZV9kcmF3VGV4dCIsIihJTGphdmEvbGFuZy9TdHJpbmc7SUlGRklJKVYiLAotICAgICAgICAodm9pZCopIFNrQ2FudmFzR2x1ZTo6ZHJhd1RleHRfX1N0cmluZ0lJRkZJUGFpbnR9LAotICAgIHsibmF0aXZlX2RyYXdUZXh0UnVuIiwiKElbQ0lJSUlGRklJKVYiLAotICAgICAgICAodm9pZCopIFNrQ2FudmFzR2x1ZTo6ZHJhd1RleHRSdW5fX19DSUlJSUZGSVBhaW50fSwKLSAgICB7Im5hdGl2ZV9kcmF3VGV4dFJ1biIsIihJTGphdmEvbGFuZy9TdHJpbmc7SUlJSUZGSUkpViIsCi0gICAgICAgICh2b2lkKikgU2tDYW52YXNHbHVlOjpkcmF3VGV4dFJ1bl9fU3RyaW5nSUlJSUZGSVBhaW50fSwKKyAgICB7Im5hdGl2ZV9kcmF3VGV4dCIsIihJW0NJSUZGSUlJKVYiLAorICAgICAgICAodm9pZCopIFNrQ2FudmFzR2x1ZTo6ZHJhd1RleHRfX19DSUlGRklQYWludFR5cGVmYWNlfSwKKyAgICB7Im5hdGl2ZV9kcmF3VGV4dCIsIihJTGphdmEvbGFuZy9TdHJpbmc7SUlGRklJSSlWIiwKKyAgICAgICAgKHZvaWQqKSBTa0NhbnZhc0dsdWU6OmRyYXdUZXh0X19TdHJpbmdJSUZGSVBhaW50VHlwZWZhY2V9LAorICAgIHsibmF0aXZlX2RyYXdUZXh0UnVuIiwiKElbQ0lJSUlGRklJSSlWIiwKKyAgICAgICAgKHZvaWQqKSBTa0NhbnZhc0dsdWU6OmRyYXdUZXh0UnVuX19fQ0lJSUlGRklQYWludFR5cGVmYWNlfSwKKyAgICB7Im5hdGl2ZV9kcmF3VGV4dFJ1biIsIihJTGphdmEvbGFuZy9TdHJpbmc7SUlJSUZGSUlJKVYiLAorICAgICAgICAodm9pZCopIFNrQ2FudmFzR2x1ZTo6ZHJhd1RleHRSdW5fX1N0cmluZ0lJSUlGRklQYWludFR5cGVmYWNlfSwKICAgICB7Im5hdGl2ZV9kcmF3UG9zVGV4dCIsIihJW0NJSVtGSSlWIiwKICAgICAgICAgKHZvaWQqKSBTa0NhbnZhc0dsdWU6OmRyYXdQb3NUZXh0X19fQ0lJX0ZQYWludH0sCiAgICAgeyJuYXRpdmVfZHJhd1Bvc1RleHQiLCIoSUxqYXZhL2xhbmcvU3RyaW5nO1tGSSlWIiwKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JGaWx0ZXIuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlci5jcHAKaW5kZXggZGQxMTc3Yi4uMjYxNjllNyAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlci5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlci5jcHAKQEAgLTMzLDEwICszMywxMCBAQAogY2xhc3MgU2tDb2xvckZpbHRlckdsdWUgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplcihKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwgU2tDb2xvckZpbHRlciogb2JqLCBTa2lhQ29sb3JGaWx0ZXIqIGYpIHsKLSAgICAgICAgU2tTYWZlVW5yZWYob2JqKTsKKyAgICAgICAgaWYgKG9iaikgU2tTYWZlVW5yZWYob2JqKTsKICAgICAgICAgLy8gZiA9PSBOVUxMIHdoZW4gbm90ICFVU0VfT1BFTkdMX1JFTkRFUkVSLCBzbyBubyBuZWVkIHRvIGRlbGV0ZSBvdXRzaWRlIHRoZSBpZmRlZgogI2lmZGVmIFVTRV9PUEVOR0xfUkVOREVSRVIKLSAgICAgICAgaWYgKGFuZHJvaWQ6OnVpcmVuZGVyZXI6OkNhY2hlczo6aGFzSW5zdGFuY2UoKSkgeworICAgICAgICBpZiAoZiAmJiBhbmRyb2lkOjp1aXJlbmRlcmVyOjpDYWNoZXM6Omhhc0luc3RhbmNlKCkpIHsKICAgICAgICAgICAgIGFuZHJvaWQ6OnVpcmVuZGVyZXI6OkNhY2hlczo6Z2V0SW5zdGFuY2UoKS5yZXNvdXJjZUNhY2hlLmRlc3RydWN0b3IoZik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBkZWxldGUgZjsKQEAgLTExMiw3ICsxMTIsNyBAQAogfTsKIAogc3RhdGljIEpOSU5hdGl2ZU1ldGhvZCBjb2xvcmZpbHRlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJmaW5hbGl6ZXIiLCAiKElJKVYiLCAodm9pZCopIFNrQ29sb3JGaWx0ZXJHbHVlOjpmaW5hbGl6ZXJ9CisgICAgeyJkZXN0cm95RmlsdGVyIiwgIihJSSlWIiwgKHZvaWQqKSBTa0NvbG9yRmlsdGVyR2x1ZTo6ZmluYWxpemVyfQogfTsKIAogc3RhdGljIEpOSU5hdGl2ZU1ldGhvZCBwb3J0ZXJkdWZmX21ldGhvZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvTWluaWtpblNraWEuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9NaW5pa2luU2tpYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyYzkzNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvTWluaWtpblNraWEuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8U2tUeXBlZmFjZS5oPgorI2luY2x1ZGUgPFNrUGFpbnQuaD4KKyNpbmNsdWRlIDxTa0ZQLmg+CisKKyNkZWZpbmUgTE9HX1RBRyAiTWluaWtpbiIKKyNpbmNsdWRlIDxjdXRpbHMvbG9nLmg+CisKKyNpbmNsdWRlIDxtaW5pa2luL01pbmlraW5Gb250Lmg+CisjaW5jbHVkZSAiTWluaWtpblNraWEuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitNaW5pa2luRm9udFNraWE6Ok1pbmlraW5Gb250U2tpYShTa1R5cGVmYWNlICp0eXBlZmFjZSkgOgorICAgIG1UeXBlZmFjZSh0eXBlZmFjZSkgeworfQorCitNaW5pa2luRm9udFNraWE6On5NaW5pa2luRm9udFNraWEoKSB7CisgICAgU2tTYWZlVW5yZWYobVR5cGVmYWNlKTsKK30KKworYm9vbCBNaW5pa2luRm9udFNraWE6OkdldEdseXBoKHVpbnQzMl90IGNvZGVwb2ludCwgdWludDMyX3QgKmdseXBoKSBjb25zdCB7CisgICAgU2tQYWludCBwYWludDsKKyAgICBwYWludC5zZXRUeXBlZmFjZShtVHlwZWZhY2UpOworICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMzJfVGV4dEVuY29kaW5nKTsKKyAgICB1aW50MTZfdCBnbHlwaDE2OworICAgIHBhaW50LnRleHRUb0dseXBocygmY29kZXBvaW50LCBzaXplb2YoY29kZXBvaW50KSwgJmdseXBoMTYpOworICAgICpnbHlwaCAgPSBnbHlwaDE2OworICAgIHJldHVybiAhIWdseXBoOworfQorCitmbG9hdCBNaW5pa2luRm9udFNraWE6OkdldEhvcml6b250YWxBZHZhbmNlKHVpbnQzMl90IGdseXBoX2lkLAorICAgIGNvbnN0IE1pbmlraW5QYWludCAmcGFpbnQpIGNvbnN0IHsKKyAgICBTa1BhaW50IHNrcGFpbnQ7CisgICAgc2twYWludC5zZXRUeXBlZmFjZShtVHlwZWZhY2UpOworICAgIHNrcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisgICAgLy8gVE9ETzogc2V0IG1vcmUgcGFpbnQgcGFyYW1ldGVycyBmcm9tIE1pbmlraW4KKyAgICBza3BhaW50LnNldFRleHRTaXplKHBhaW50LnNpemUpOworICAgIHVpbnQxNl90IGdseXBoMTYgPSBnbHlwaF9pZDsKKyAgICBTa1NjYWxhciBza1dpZHRoOworICAgIFNrUmVjdCBza0JvdW5kczsKKyAgICBza3BhaW50LmdldFRleHRXaWR0aHMoJmdseXBoMTYsIHNpemVvZihnbHlwaDE2KSwgJnNrV2lkdGgsICZza0JvdW5kcyk7CisgICAgLy8gVE9ETzogZ2V0IGJvdW5kcyBpbmZvcm1hdGlvbgorICAgIHJldHVybiBTa1NjYWxhclRvRlAoc2tXaWR0aCk7Cit9CisKK2Jvb2wgTWluaWtpbkZvbnRTa2lhOjpHZXRUYWJsZSh1aW50MzJfdCB0YWcsIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90ICpzaXplKSB7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgIGNvbnN0IHNpemVfdCB0YWJsZVNpemUgPSBtVHlwZWZhY2UtPmdldFRhYmxlU2l6ZSh0YWcpOworICAgICAgICAqc2l6ZSA9IHRhYmxlU2l6ZTsKKyAgICAgICAgcmV0dXJuIHRhYmxlU2l6ZSAhPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IHNpemVfdCBhY3R1YWxTaXplID0gbVR5cGVmYWNlLT5nZXRUYWJsZURhdGEodGFnLCAwLCAqc2l6ZSwgYnVmKTsKKyAgICAgICAgKnNpemUgPSBhY3R1YWxTaXplOworICAgICAgICByZXR1cm4gYWN0dWFsU2l6ZSAhPSAwOworICAgIH0KK30KKworU2tUeXBlZmFjZSAqTWluaWtpbkZvbnRTa2lhOjpHZXRTa1R5cGVmYWNlKCkgeworICAgIHJldHVybiBtVHlwZWZhY2U7Cit9CisKK2ludDMyX3QgTWluaWtpbkZvbnRTa2lhOjpHZXRVbmlxdWVJZCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbVR5cGVmYWNlLT51bmlxdWVJRCgpOworfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL01pbmlraW5Ta2lhLmggYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL01pbmlraW5Ta2lhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkYjU1NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvTWluaWtpblNraWEuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworbmFtZXNwYWNlIGFuZHJvaWQgeworCitjbGFzcyBNaW5pa2luRm9udFNraWEgOiBwdWJsaWMgTWluaWtpbkZvbnQgeworcHVibGljOgorICAgIGV4cGxpY2l0IE1pbmlraW5Gb250U2tpYShTa1R5cGVmYWNlICp0eXBlZmFjZSk7CisKKyAgICB+TWluaWtpbkZvbnRTa2lhKCk7CisKKyAgICBib29sIEdldEdseXBoKHVpbnQzMl90IGNvZGVwb2ludCwgdWludDMyX3QgKmdseXBoKSBjb25zdDsKKworICAgIGZsb2F0IEdldEhvcml6b250YWxBZHZhbmNlKHVpbnQzMl90IGdseXBoX2lkLAorICAgICAgICBjb25zdCBNaW5pa2luUGFpbnQgJnBhaW50KSBjb25zdDsKKworICAgIC8vIElmIGJ1ZiBpcyBOVUxMLCBqdXN0IHVwZGF0ZSBzaXplCisgICAgYm9vbCBHZXRUYWJsZSh1aW50MzJfdCB0YWcsIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90ICpzaXplKTsKKworICAgIGludDMyX3QgR2V0VW5pcXVlSWQoKSBjb25zdDsKKworICAgIFNrVHlwZWZhY2UgKkdldFNrVHlwZWZhY2UoKTsKKworcHJpdmF0ZToKKyAgICBTa1R5cGVmYWNlICptVHlwZWZhY2U7CisKK307CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9OaW5lUGF0Y2hJbXBsLmNwcCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvTmluZVBhdGNoSW1wbC5jcHAKaW5kZXggMDFlN2UzZS4uZDQzYzFiZSAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9OaW5lUGF0Y2hJbXBsLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL05pbmVQYXRjaEltcGwuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CiAKIHN0YXRpYyBib29sIGdldENvbG9yKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGludCB4LCBpbnQgeSwgU2tDb2xvciogYykgewotICAgIHN3aXRjaCAoYml0bWFwLmdldENvbmZpZygpKSB7CisgICAgc3dpdGNoIChiaXRtYXAuY29uZmlnKCkpIHsKICAgICAgICAgY2FzZSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWc6CiAgICAgICAgICAgICAqYyA9IFNrVW5QcmVNdWx0aXBseTo6UE1Db2xvclRvQ29sb3IoKmJpdG1hcC5nZXRBZGRyMzIoeCwgeSkpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL05pbmVQYXRjaFBlZWtlci5jcHAgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL05pbmVQYXRjaFBlZWtlci5jcHAKaW5kZXggZGY5OTZhZi4uZDM0ODJkYSAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9OaW5lUGF0Y2hQZWVrZXIuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvTmluZVBhdGNoUGVla2VyLmNwcApAQCAtNDAsMTUgKzQwLDE0IEBACiAgICAgICAgIC8vIG5vdyB1cGRhdGUgb3VyIGhvc3QgdG8gZm9yY2UgaW5kZXggb3IgMzJiaXQgY29uZmlnCiAgICAgICAgIC8vICdjYXVzZSB3ZSBkb24ndCB3YW50IDU2NSBwcmVkaXRoZXJlZCwgc2luY2UgYXMgYSA5cGF0Y2gsIHdlIGtub3cKICAgICAgICAgLy8gd2Ugd2lsbCBiZSBzdHJldGNoZWQsIGFuZCB0aGVyZWZvcmUgd2Ugd2FudCB0byBkaXRoZXIgYWZ0ZXJ3YXJkcy4KLSAgICAgICAgc3RhdGljIGNvbnN0IFNrQml0bWFwOjpDb25maWcgZ05vNTY1UHJlZltdID0gewotICAgICAgICAgICAgU2tCaXRtYXA6OmtJbmRleDhfQ29uZmlnLAotICAgICAgICAgICAgU2tCaXRtYXA6OmtJbmRleDhfQ29uZmlnLAotICAgICAgICAgICAgU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLAotICAgICAgICAgICAgU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLAotICAgICAgICAgICAgU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLAotICAgICAgICAgICAgU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLAotICAgICAgICB9OwotICAgICAgICBmSG9zdC0+c2V0UHJlZkNvbmZpZ1RhYmxlKGdObzU2NVByZWYpOworICAgICAgICBTa0ltYWdlRGVjb2Rlcjo6UHJlZkNvbmZpZ1RhYmxlIHRhYmxlOworICAgICAgICB0YWJsZS5mUHJlZkZvcl84SW5kZXhfTm9BbHBoYV9zcmMgICA9IFNrQml0bWFwOjprSW5kZXg4X0NvbmZpZzsKKyAgICAgICAgdGFibGUuZlByZWZGb3JfOEluZGV4X1llc0FscGhhX3NyYyAgPSBTa0JpdG1hcDo6a0luZGV4OF9Db25maWc7CisgICAgICAgIHRhYmxlLmZQcmVmRm9yXzhHcmF5X3NyYyAgICAgICAgICAgID0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnOworICAgICAgICB0YWJsZS5mUHJlZkZvcl84YnBjX05vQWxwaGFfc3JjICAgICA9IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZzsKKyAgICAgICAgdGFibGUuZlByZWZGb3JfOGJwY19ZZXNBbHBoYV9zcmMgICAgPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWc7CisKKyAgICAgICAgZkhvc3QtPnNldFByZWZDb25maWdUYWJsZSh0YWJsZSk7CiAgICAgfSBlbHNlIGlmIChzdHJjbXAoIm5wTGIiLCB0YWcpID09IDAgJiYgbGVuZ3RoID09IHNpemVvZihpbnQpICogNCkgewogICAgICAgICBmTGF5b3V0Qm91bmRzID0gbmV3IGludFs0XTsKICAgICAgICAgbWVtY3B5KGZMYXlvdXRCb3VuZHMsIGRhdGEsIHNpemVvZihpbnQpICogNCk7CmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1BhaW50LmNwcCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvUGFpbnQuY3BwCmluZGV4IDQwZTA3MzEuLjFjYTNmM2EgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvUGFpbnQuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvUGFpbnQuY3BwCkBAIC0yNDUsNyArMjQ1LDEyIEBACiAgICAgfQogCiAgICAgc3RhdGljIFNrVHlwZWZhY2UqIHNldFR5cGVmYWNlKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LCBTa1BhaW50KiBvYmosIFNrVHlwZWZhY2UqIHR5cGVmYWNlKSB7CisjaWZuZGVmIFVTRV9NSU5JS0lOCiAgICAgICAgIHJldHVybiBvYmotPnNldFR5cGVmYWNlKHR5cGVmYWNlKTsKKyNlbHNlCisgICAgICAgIC8vIFRPRE8ocmFwaCk6IG5vdCB5ZXQgaW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKICAgICB9CiAKICAgICBzdGF0aWMgU2tSYXN0ZXJpemVyKiBzZXRSYXN0ZXJpemVyKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LCBTa1BhaW50KiBvYmosIFNrUmFzdGVyaXplciogcmFzdGVyaXplcikgewpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9QYXRoLmNwcCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aC5jcHAKaW5kZXggYWI3ZjFkYy4uMjEyNmVkNCAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9QYXRoLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1BhdGguY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAicGF0aG9wcy9Ta1BhdGhPcHMuaCIKIAogI2luY2x1ZGUgPENhY2hlcy5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxtYXA+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIApAQCAtMjY1LDYgKzI2NywyNDIgQEAKICAgICBzdGF0aWMgamJvb2xlYW4gb3AoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosIFNrUGF0aCogcDEsIFNrUGF0aCogcDIsIFNrUGF0aE9wIG9wLCBTa1BhdGgqIHIpIHsKICAgICAgICAgIHJldHVybiBPcCgqcDEsICpwMiwgb3AsIHIpOwogICAgICB9CisKKyAgICB0eXBlZGVmIFNrUG9pbnQgKCpiZXppZXJDYWxjdWxhdGlvbikoZmxvYXQgdCwgY29uc3QgU2tQb2ludCogcG9pbnRzKTsKKworICAgIHN0YXRpYyB2b2lkIGFkZE1vdmUoc3RkOjp2ZWN0b3I8U2tQb2ludD4mIHNlZ21lbnRQb2ludHMsIHN0ZDo6dmVjdG9yPGZsb2F0PiYgbGVuZ3RocywKKyAgICAgICAgICAgIGNvbnN0IFNrUG9pbnQmIHBvaW50KSB7CisgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7CisgICAgICAgIGlmICghbGVuZ3Rocy5lbXB0eSgpKSB7CisgICAgICAgICAgICBsZW5ndGggPSBsZW5ndGhzLmJhY2soKTsKKyAgICAgICAgfQorICAgICAgICBzZWdtZW50UG9pbnRzLnB1c2hfYmFjayhwb2ludCk7CisgICAgICAgIGxlbmd0aHMucHVzaF9iYWNrKGxlbmd0aCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYWRkTGluZShzdGQ6OnZlY3RvcjxTa1BvaW50PiYgc2VnbWVudFBvaW50cywgc3RkOjp2ZWN0b3I8ZmxvYXQ+JiBsZW5ndGhzLAorICAgICAgICAgICAgY29uc3QgU2tQb2ludCYgdG9Qb2ludCkgeworICAgICAgICBpZiAoc2VnbWVudFBvaW50cy5lbXB0eSgpKSB7CisgICAgICAgICAgICBzZWdtZW50UG9pbnRzLnB1c2hfYmFjayhTa1BvaW50OjpNYWtlKDAsIDApKTsKKyAgICAgICAgICAgIGxlbmd0aHMucHVzaF9iYWNrKDApOworICAgICAgICB9IGVsc2UgaWYgKHNlZ21lbnRQb2ludHMuYmFjaygpID09IHRvUG9pbnQpIHsKKyAgICAgICAgICAgIHJldHVybjsgLy8gRW1wdHkgbGluZQorICAgICAgICB9CisgICAgICAgIGZsb2F0IGxlbmd0aCA9IGxlbmd0aHMuYmFjaygpICsgU2tQb2ludDo6RGlzdGFuY2Uoc2VnbWVudFBvaW50cy5iYWNrKCksIHRvUG9pbnQpOworICAgICAgICBzZWdtZW50UG9pbnRzLnB1c2hfYmFjayh0b1BvaW50KTsKKyAgICAgICAgbGVuZ3Rocy5wdXNoX2JhY2sobGVuZ3RoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY3ViaWNDb29yZGluYXRlQ2FsY3VsYXRpb24oZmxvYXQgdCwgZmxvYXQgcDAsIGZsb2F0IHAxLCBmbG9hdCBwMiwgZmxvYXQgcDMpIHsKKyAgICAgICAgZmxvYXQgb25lTWludXNUID0gMSAtIHQ7CisgICAgICAgIGZsb2F0IG9uZU1pbnVzVFNxdWFyZWQgPSBvbmVNaW51c1QgKiBvbmVNaW51c1Q7CisgICAgICAgIGZsb2F0IG9uZU1pbnVzVEN1YmVkID0gb25lTWludXNUU3F1YXJlZCAqIG9uZU1pbnVzVDsKKyAgICAgICAgZmxvYXQgdFNxdWFyZWQgPSB0ICogdDsKKyAgICAgICAgZmxvYXQgdEN1YmVkID0gdFNxdWFyZWQgKiB0OworICAgICAgICByZXR1cm4gKG9uZU1pbnVzVEN1YmVkICogcDApICsgKDMgKiBvbmVNaW51c1RTcXVhcmVkICogdCAqIHAxKQorICAgICAgICAgICAgICAgICsgKDMgKiBvbmVNaW51c1QgKiB0U3F1YXJlZCAqIHAyKSArICh0Q3ViZWQgKiBwMyk7CisgICAgfQorCisgICAgc3RhdGljIFNrUG9pbnQgY3ViaWNCZXppZXJDYWxjdWxhdGlvbihmbG9hdCB0LCBjb25zdCBTa1BvaW50KiBwb2ludHMpIHsKKyAgICAgICAgZmxvYXQgeCA9IGN1YmljQ29vcmRpbmF0ZUNhbGN1bGF0aW9uKHQsIHBvaW50c1swXS54KCksIHBvaW50c1sxXS54KCksCisgICAgICAgICAgICBwb2ludHNbMl0ueCgpLCBwb2ludHNbM10ueCgpKTsKKyAgICAgICAgZmxvYXQgeSA9IGN1YmljQ29vcmRpbmF0ZUNhbGN1bGF0aW9uKHQsIHBvaW50c1swXS55KCksIHBvaW50c1sxXS55KCksCisgICAgICAgICAgICBwb2ludHNbMl0ueSgpLCBwb2ludHNbM10ueSgpKTsKKyAgICAgICAgcmV0dXJuIFNrUG9pbnQ6Ok1ha2UoeCwgeSk7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IHF1YWRyYXRpY0Nvb3JkaW5hdGVDYWxjdWxhdGlvbihmbG9hdCB0LCBmbG9hdCBwMCwgZmxvYXQgcDEsIGZsb2F0IHAyKSB7CisgICAgICAgIGZsb2F0IG9uZU1pbnVzVCA9IDEgLSB0OworICAgICAgICByZXR1cm4gb25lTWludXNUICogKChvbmVNaW51c1QgKiBwMCkgKyAodCAqIHAxKSkgKyB0ICogKChvbmVNaW51c1QgKiBwMSkgKyAodCAqIHAyKSk7CisgICAgfQorCisgICAgc3RhdGljIFNrUG9pbnQgcXVhZHJhdGljQmV6aWVyQ2FsY3VsYXRpb24oZmxvYXQgdCwgY29uc3QgU2tQb2ludCogcG9pbnRzKSB7CisgICAgICAgIGZsb2F0IHggPSBxdWFkcmF0aWNDb29yZGluYXRlQ2FsY3VsYXRpb24odCwgcG9pbnRzWzBdLngoKSwgcG9pbnRzWzFdLngoKSwgcG9pbnRzWzJdLngoKSk7CisgICAgICAgIGZsb2F0IHkgPSBxdWFkcmF0aWNDb29yZGluYXRlQ2FsY3VsYXRpb24odCwgcG9pbnRzWzBdLnkoKSwgcG9pbnRzWzFdLnkoKSwgcG9pbnRzWzJdLnkoKSk7CisgICAgICAgIHJldHVybiBTa1BvaW50OjpNYWtlKHgsIHkpOworICAgIH0KKworICAgIC8vIFN1YmRpdmlkZSBhIHNlY3Rpb24gb2YgdGhlIEJlemllciBjdXJ2ZSwgc2V0IHRoZSBtaWQtcG9pbnQgYW5kIHRoZSBtaWQtdCB2YWx1ZS4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgZnVydGhlciBzdWJkaXZpc2lvbiBpcyBuZWNlc3NhcnkgYXMgZGVmaW5lZCBieSBlcnJvclNxdWFyZWQuCisgICAgc3RhdGljIGJvb2wgc3ViZGl2aWRlUG9pbnRzKGNvbnN0IFNrUG9pbnQqIHBvaW50cywgYmV6aWVyQ2FsY3VsYXRpb24gYmV6aWVyRnVuY3Rpb24sCisgICAgICAgICAgICBmbG9hdCB0MCwgY29uc3QgU2tQb2ludCAmcDAsIGZsb2F0IHQxLCBjb25zdCBTa1BvaW50ICZwMSwKKyAgICAgICAgICAgIGZsb2F0JiBtaWRULCBTa1BvaW50ICZtaWRQb2ludCwgZmxvYXQgZXJyb3JTcXVhcmVkKSB7CisgICAgICAgIG1pZFQgPSAodDEgKyB0MCkgLyAyOworICAgICAgICBmbG9hdCBtaWRYID0gKHAxLngoKSArIHAwLngoKSkgLyAyOworICAgICAgICBmbG9hdCBtaWRZID0gKHAxLnkoKSArIHAwLnkoKSkgLyAyOworCisgICAgICAgIG1pZFBvaW50ID0gKCpiZXppZXJGdW5jdGlvbikobWlkVCwgcG9pbnRzKTsKKyAgICAgICAgZmxvYXQgeEVycm9yID0gbWlkUG9pbnQueCgpIC0gbWlkWDsKKyAgICAgICAgZmxvYXQgeUVycm9yID0gbWlkUG9pbnQueSgpIC0gbWlkWTsKKyAgICAgICAgZmxvYXQgbWlkRXJyb3JTcXVhcmVkID0gKHhFcnJvciAqIHhFcnJvcikgKyAoeUVycm9yICogeUVycm9yKTsKKyAgICAgICAgcmV0dXJuIG1pZEVycm9yU3F1YXJlZCA+IGVycm9yU3F1YXJlZDsKKyAgICB9CisKKyAgICAvLyBEaXZpZGVzIEJlemllciBjdXJ2ZXMgdW50aWwgbGluZWFyIGludGVycG9sYXRpb24gaXMgdmVyeSBjbG9zZSB0byBhY2N1cmF0ZSwgdXNpbmcKKyAgICAvLyBlcnJvclNxdWFyZWQgYXMgYSBtZXRyaWMuIEN1YmljIEJlemllciBjdXJ2ZXMgY2FuIGhhdmUgYW4gaW5mbGVjdGlvbiBwb2ludCB0aGF0IGltcHJvcGVybHkKKyAgICAvLyBzaG9ydC1jaXJjdWl0IHN1YmRpdmlzaW9uLiBJZiB5b3UgaW1hZ2luZSBhbiBTIHNoYXBlLCB0aGUgdG9wIGFuZCBib3R0b20gcG9pbnRzIGJlaW5nIHRoZQorICAgIC8vIHN0YXJ0aW5nIGFuZCBlbmQgcG9pbnRzLCBsaW5lYXIgaW50ZXJwb2xhdGlvbiB3b3VsZCBtYXJrIHRoZSBjZW50ZXIgd2hlcmUgdGhlIGN1cnZlIHBsYWNlcworICAgIC8vIHRoZSBwb2ludC4gSXQgaXMgY2xlYXJseSBub3QgdGhlIGNhc2UgdGhhdCB3ZSBjYW4gbGluZWFybHkgaW50ZXJwb2xhdGUgYXQgdGhhdCBwb2ludC4KKyAgICAvLyBkb3VibGVDaGVja0RpdmlzaW9uIGZvcmNlcyBhIHNlY29uZCBleGFtaW5hdGlvbiBiZXR3ZWVuIHN1YmRpdmlzaW9ucyB0byBlbnN1cmUgdGhhdCBsaW5lYXIKKyAgICAvLyBpbnRlcnBvbGF0aW9uIHdvcmtzLgorICAgIHN0YXRpYyB2b2lkIGFkZEJlemllcihjb25zdCBTa1BvaW50KiBwb2ludHMsCisgICAgICAgICAgICBiZXppZXJDYWxjdWxhdGlvbiBiZXppZXJGdW5jdGlvbiwgc3RkOjp2ZWN0b3I8U2tQb2ludD4mIHNlZ21lbnRQb2ludHMsCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxmbG9hdD4mIGxlbmd0aHMsIGZsb2F0IGVycm9yU3F1YXJlZCwgYm9vbCBkb3VibGVDaGVja0RpdmlzaW9uKSB7CisgICAgICAgIHR5cGVkZWYgc3RkOjptYXA8ZmxvYXQsIFNrUG9pbnQ+IFBvaW50TWFwOworICAgICAgICBQb2ludE1hcCB0VG9Qb2ludDsKKworICAgICAgICB0VG9Qb2ludFswXSA9ICgqYmV6aWVyRnVuY3Rpb24pKDAsIHBvaW50cyk7CisgICAgICAgIHRUb1BvaW50WzFdID0gKCpiZXppZXJGdW5jdGlvbikoMSwgcG9pbnRzKTsKKworICAgICAgICBQb2ludE1hcDo6aXRlcmF0b3IgaXRlciA9IHRUb1BvaW50LmJlZ2luKCk7CisgICAgICAgIFBvaW50TWFwOjppdGVyYXRvciBuZXh0ID0gaXRlcjsKKyAgICAgICAgKytuZXh0OworICAgICAgICB3aGlsZSAobmV4dCAhPSB0VG9Qb2ludC5lbmQoKSkgeworICAgICAgICAgICAgYm9vbCBuZWVkc1N1YmRpdmlzaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIFNrUG9pbnQgbWlkUG9pbnQ7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgZmxvYXQgbWlkVDsKKyAgICAgICAgICAgICAgICBuZWVkc1N1YmRpdmlzaW9uID0gc3ViZGl2aWRlUG9pbnRzKHBvaW50cywgYmV6aWVyRnVuY3Rpb24sIGl0ZXItPmZpcnN0LAorICAgICAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQsIG5leHQtPmZpcnN0LCBuZXh0LT5zZWNvbmQsIG1pZFQsIG1pZFBvaW50LCBlcnJvclNxdWFyZWQpOworICAgICAgICAgICAgICAgIGlmICghbmVlZHNTdWJkaXZpc2lvbiAmJiBkb3VibGVDaGVja0RpdmlzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgIFNrUG9pbnQgcXVhcnRlclBvaW50OworICAgICAgICAgICAgICAgICAgICBmbG9hdCBxdWFydGVyVDsKKyAgICAgICAgICAgICAgICAgICAgbmVlZHNTdWJkaXZpc2lvbiA9IHN1YmRpdmlkZVBvaW50cyhwb2ludHMsIGJlemllckZ1bmN0aW9uLCBpdGVyLT5maXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZCwgbWlkVCwgbWlkUG9pbnQsIHF1YXJ0ZXJULCBxdWFydGVyUG9pbnQsIGVycm9yU3F1YXJlZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkc1N1YmRpdmlzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3VuZCBhbiBpbmZsZWN0aW9uIHBvaW50LiBObyBuZWVkIHRvIGRvdWJsZS1jaGVjay4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZUNoZWNrRGl2aXNpb24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobmVlZHNTdWJkaXZpc2lvbikgeworICAgICAgICAgICAgICAgICAgICBuZXh0ID0gdFRvUG9pbnQuaW5zZXJ0KGl0ZXIsIFBvaW50TWFwOjp2YWx1ZV90eXBlKG1pZFQsIG1pZFBvaW50KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAobmVlZHNTdWJkaXZpc2lvbik7CisgICAgICAgICAgICBpdGVyID0gbmV4dDsKKyAgICAgICAgICAgIG5leHQrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyB0aGF0IGVhY2ggZGl2aXNpb24gY2FuIHVzZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiB3aXRoIGxlc3MgdGhhbiB0aGUgYWxsb3dlZCBlcnJvcgorICAgICAgICBmb3IgKGl0ZXIgPSB0VG9Qb2ludC5iZWdpbigpOyBpdGVyICE9IHRUb1BvaW50LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGFkZExpbmUoc2VnbWVudFBvaW50cywgbGVuZ3RocywgaXRlci0+c2Vjb25kKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVZlcmJTZWdtZW50cyhTa1BhdGg6OlZlcmIgdmVyYiwgY29uc3QgU2tQb2ludCogcG9pbnRzLAorICAgICAgICBzdGQ6OnZlY3RvcjxTa1BvaW50PiYgc2VnbWVudFBvaW50cywgc3RkOjp2ZWN0b3I8ZmxvYXQ+JiBsZW5ndGhzLCBmbG9hdCBlcnJvclNxdWFyZWQpIHsKKyAgICAgICAgc3dpdGNoICh2ZXJiKSB7CisgICAgICAgICAgICBjYXNlIFNrUGF0aDo6a01vdmVfVmVyYjoKKyAgICAgICAgICAgICAgICBhZGRNb3ZlKHNlZ21lbnRQb2ludHMsIGxlbmd0aHMsIHBvaW50c1swXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNrUGF0aDo6a0Nsb3NlX1ZlcmI6CisgICAgICAgICAgICAgICAgYWRkTGluZShzZWdtZW50UG9pbnRzLCBsZW5ndGhzLCBwb2ludHNbMF0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTa1BhdGg6OmtMaW5lX1ZlcmI6CisgICAgICAgICAgICAgICAgYWRkTGluZShzZWdtZW50UG9pbnRzLCBsZW5ndGhzLCBwb2ludHNbMV0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTa1BhdGg6OmtRdWFkX1ZlcmI6CisgICAgICAgICAgICAgICAgYWRkQmV6aWVyKHBvaW50cywgcXVhZHJhdGljQmV6aWVyQ2FsY3VsYXRpb24sIHNlZ21lbnRQb2ludHMsIGxlbmd0aHMsCisgICAgICAgICAgICAgICAgICAgIGVycm9yU3F1YXJlZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTa1BhdGg6OmtDdWJpY19WZXJiOgorICAgICAgICAgICAgICAgIGFkZEJlemllcihwb2ludHMsIGN1YmljQmV6aWVyQ2FsY3VsYXRpb24sIHNlZ21lbnRQb2ludHMsIGxlbmd0aHMsCisgICAgICAgICAgICAgICAgICAgIGVycm9yU3F1YXJlZCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIExlYXZlIGVsZW1lbnQgYXMgTlVMTCwgQ29uaWMgc2VjdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIGEgZmxvYXRbXSB3aXRoIGVhY2ggcG9pbnQgYWxvbmcgdGhlIHBhdGggcmVwcmVzZW50ZWQgYnkgMyBmbG9hdHMKKyAgICAvLyAqIGZyYWN0aW9uYWwgbGVuZ3RoIGFsb25nIHRoZSBwYXRoIHRoYXQgdGhlIHBvaW50IHJlc2lkZXMKKyAgICAvLyAqIHggY29vcmRpbmF0ZQorICAgIC8vICogeSBjb29yZGluYXRlCisgICAgLy8gTm90ZSB0aGF0IG1vcmUgdGhhbiBvbmUgcG9pbnQgbWF5IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFsb25nIHRoZSBwYXRoIGluCisgICAgLy8gdGhlIGNhc2Ugb2YgYSBtb3ZlLgorICAgIC8vIE5VTEwgY2FuIGJlIHJldHVybmVkIGlmIHRoZSBQYXRoIGlzIGVtcHR5LgorICAgIHN0YXRpYyBqZmxvYXRBcnJheSBhcHByb3hpbWF0ZShKTklFbnYqIGVudiwgamNsYXNzLCBTa1BhdGgqIHBhdGgsIGZsb2F0IGFjY2VwdGFibGVFcnJvcikKKyAgICB7CisgICAgICAgIFNrQVNTRVJUKHBhdGgpOworICAgICAgICBTa1BhdGg6Okl0ZXIgcGF0aEl0ZXIoKnBhdGgsIGZhbHNlKTsKKyAgICAgICAgU2tQYXRoOjpWZXJiIHZlcmI7CisgICAgICAgIFNrUG9pbnQgcG9pbnRzWzRdOworICAgICAgICBzdGQ6OnZlY3RvcjxTa1BvaW50PiBzZWdtZW50UG9pbnRzOworICAgICAgICBzdGQ6OnZlY3RvcjxmbG9hdD4gbGVuZ3RoczsKKyAgICAgICAgZmxvYXQgZXJyb3JTcXVhcmVkID0gYWNjZXB0YWJsZUVycm9yICogYWNjZXB0YWJsZUVycm9yOworCisgICAgICAgIHdoaWxlICgodmVyYiA9IHBhdGhJdGVyLm5leHQocG9pbnRzKSkgIT0gU2tQYXRoOjprRG9uZV9WZXJiKSB7CisgICAgICAgICAgICBjcmVhdGVWZXJiU2VnbWVudHModmVyYiwgcG9pbnRzLCBzZWdtZW50UG9pbnRzLCBsZW5ndGhzLCBlcnJvclNxdWFyZWQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNlZ21lbnRQb2ludHMuZW1wdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBzaXplX3QgbnVtUG9pbnRzID0gc2VnbWVudFBvaW50cy5zaXplKCk7CisgICAgICAgIHNpemVfdCBhcHByb3hpbWF0aW9uQXJyYXlTaXplID0gbnVtUG9pbnRzICogMzsKKworICAgICAgICBmbG9hdCogYXBwcm94aW1hdGlvbiA9IG5ldyBmbG9hdFthcHByb3hpbWF0aW9uQXJyYXlTaXplXTsKKyAgICAgICAgZmxvYXQgdG90YWxMZW5ndGggPSBsZW5ndGhzLmJhY2soKTsKKworICAgICAgICBpbnQgYXBwcm94aW1hdGlvbkluZGV4ID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Qb2ludHM7IGkrKykgeworICAgICAgICAgICAgY29uc3QgU2tQb2ludCYgcG9pbnQgPSBzZWdtZW50UG9pbnRzW2ldOworICAgICAgICAgICAgYXBwcm94aW1hdGlvblthcHByb3hpbWF0aW9uSW5kZXgrK10gPSBsZW5ndGhzW2ldIC8gdG90YWxMZW5ndGg7CisgICAgICAgICAgICBhcHByb3hpbWF0aW9uW2FwcHJveGltYXRpb25JbmRleCsrXSA9IHBvaW50LngoKTsKKyAgICAgICAgICAgIGFwcHJveGltYXRpb25bYXBwcm94aW1hdGlvbkluZGV4KytdID0gcG9pbnQueSgpOworICAgICAgICB9CisKKyAgICAgICAgamZsb2F0QXJyYXkgcmVzdWx0ID0gZW52LT5OZXdGbG9hdEFycmF5KGFwcHJveGltYXRpb25BcnJheVNpemUpOworICAgICAgICBlbnYtPlNldEZsb2F0QXJyYXlSZWdpb24ocmVzdWx0LCAwLCBhcHByb3hpbWF0aW9uQXJyYXlTaXplLCBhcHByb3hpbWF0aW9uKTsKKyAgICAgICAgZGVsZXRlW10gYXBwcm94aW1hdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgU2tQYXRoTWVhc3VyZSogdHJpbShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwgU2tQYXRoKiBpblBhdGgsIFNrUGF0aCogb3V0UGF0aCwKKyAgICAgICAgICAgIFNrUGF0aE1lYXN1cmUqIHBhdGhNZWFzdXJlLCBqZmxvYXQgdHJpbVN0YXJ0LCBqZmxvYXQgdHJpbUVuZCwgamZsb2F0IHRyaW1PZmZzZXQpIHsKKyAgICAgICAgaWYgKHRyaW1TdGFydCA9PSAwICYmIHRyaW1FbmQgPT0gMSkgeworICAgICAgICAgICAgaWYgKG91dFBhdGggIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICpvdXRQYXRoID0gKmluUGF0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwYXRoTWVhc3VyZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbW9kaWZ5UGF0aCA9IChvdXRQYXRoID09IE5VTEwpOworICAgICAgICBpZiAobW9kaWZ5UGF0aCkgeworICAgICAgICAgICAgb3V0UGF0aCA9IG5ldyBTa1BhdGgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG91dFBhdGgtPnJlc2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhdGhNZWFzdXJlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHBhdGhNZWFzdXJlID0gbmV3IFNrUGF0aE1lYXN1cmUoKmluUGF0aCwgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGZsb2F0IGxlbmd0aCA9IHBhdGhNZWFzdXJlLT5nZXRMZW5ndGgoKTsKKyAgICAgICAgZmxvYXQgc3RhcnQgPSAodHJpbVN0YXJ0ICsgdHJpbU9mZnNldCkgKiBsZW5ndGg7CisgICAgICAgIGZsb2F0IGVuZCA9ICh0cmltRW5kICsgdHJpbU9mZnNldCkgKiBsZW5ndGg7CisKKyAgICAgICAgaWYgKGVuZCA+IGxlbmd0aCAmJiBzdGFydCA8PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIHBhdGhNZWFzdXJlLT5nZXRTZWdtZW50KHN0YXJ0LCBsZW5ndGgsIG91dFBhdGgsIHRydWUpOworICAgICAgICAgICAgcGF0aE1lYXN1cmUtPmdldFNlZ21lbnQoMCwgZW5kIC0gbGVuZ3RoLCBvdXRQYXRoLCB0cnVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzdGFydCA+IGxlbmd0aCkgeworICAgICAgICAgICAgICAgIHN0YXJ0IC09IGxlbmd0aDsKKyAgICAgICAgICAgICAgICBlbmQgLT0gbGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGF0aE1lYXN1cmUtPmdldFNlZ21lbnQoc3RhcnQsIGVuZCwgb3V0UGF0aCwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1vZGlmeVBhdGgpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwYXRoTWVhc3VyZTsKKyAgICAgICAgICAgIHBhdGhNZWFzdXJlID0gTlVMTDsKKyAgICAgICAgICAgICppblBhdGggPSAqb3V0UGF0aDsKKyAgICAgICAgICAgIGRlbGV0ZSBvdXRQYXRoOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwYXRoTWVhc3VyZTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95TWVhc3VyZShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwgU2tQYXRoTWVhc3VyZSogbWVhc3VyZSkgeworICAgICAgICBkZWxldGUgbWVhc3VyZTsKKyAgICB9CiB9OwogCiBzdGF0aWMgSk5JTmF0aXZlTWV0aG9kIG1ldGhvZHNbXSA9IHsKQEAgLTMwNSw3ICs1NDMsMTAgQEAKICAgICB7Im5hdGl2ZV9zZXRMYXN0UG9pbnQiLCIoSUZGKVYiLCAodm9pZCopIFNrUGF0aEdsdWU6OnNldExhc3RQb2ludH0sCiAgICAgeyJuYXRpdmVfdHJhbnNmb3JtIiwiKElJSSlWIiwgKHZvaWQqKSBTa1BhdGhHbHVlOjp0cmFuc2Zvcm1fX01hdHJpeFBhdGh9LAogICAgIHsibmF0aXZlX3RyYW5zZm9ybSIsIihJSSlWIiwgKHZvaWQqKSBTa1BhdGhHbHVlOjp0cmFuc2Zvcm1fX01hdHJpeH0sCi0gICAgeyJuYXRpdmVfb3AiLCIoSUlJSSlaIiwgKHZvaWQqKSBTa1BhdGhHbHVlOjpvcH0KKyAgICB7Im5hdGl2ZV9vcCIsIihJSUlJKVoiLCAodm9pZCopIFNrUGF0aEdsdWU6Om9wfSwKKyAgICB7Im5hdGl2ZV9hcHByb3hpbWF0ZSIsICIoSUYpW0YiLCAodm9pZCopIFNrUGF0aEdsdWU6OmFwcHJveGltYXRlfSwKKyAgICB7Im5hdGl2ZV9kZXN0cm95TWVhc3VyZSIsIihJKVYiLCAodm9pZCopIFNrUGF0aEdsdWU6OmRlc3Ryb3lNZWFzdXJlfSwKKyAgICB7Im5hdGl2ZV90cmltIiwiKElJSUZGRilJIiwgKHZvaWQqKSBTa1BhdGhHbHVlOjp0cmltfSwKIH07CiAKIGludCByZWdpc3Rlcl9hbmRyb2lkX2dyYXBoaWNzX1BhdGgoSk5JRW52KiBlbnYpIHsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVGV4dExheW91dENhY2hlLmNwcCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVGV4dExheW91dENhY2hlLmNwcAppbmRleCA5MmQyNTNmLi4xNDRhYzM5IDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1RleHRMYXlvdXRDYWNoZS5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9UZXh0TGF5b3V0Q2FjaGUuY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRlICJUZXh0TGF5b3V0Q2FjaGUuaCIKICNpbmNsdWRlICJUZXh0TGF5b3V0LmgiCisjaW5jbHVkZSAiU2tHbHlwaENhY2hlLmgiCiAjaW5jbHVkZSAiU2tUeXBlZmFjZV9hbmRyb2lkLmgiCiAjaW5jbHVkZSAiSGFyZkJ1enpOR0ZhY2VTa2lhLmgiCiAjaW5jbHVkZSA8dW5pY29kZS91bmlzdHIuaD4KQEAgLTc1Nyw4ICs3NTgsOCBAQAogICAgICAgICAgICAgb3V0UG9zLT5hZGQoeXBvcyk7CiAgICAgICAgICAgICB0b3RhbEFkdmFuY2UgKz0geEFkdmFuY2U7CiAKLSAgICAgICAgICAgIC8vIFRPRE86IGNvbnNpZGVyIHVzaW5nIGdseXBoIGNhY2hlCi0gICAgICAgICAgICBjb25zdCBTa0dseXBoJiBtZXRyaWNzID0gbVNoYXBpbmdQYWludC5nZXRHbHlwaE1ldHJpY3MoZ2x5cGhJZCwgTlVMTCk7CisgICAgICAgICAgICBTa0F1dG9HbHlwaENhY2hlIGF1dG9DYWNoZShtU2hhcGluZ1BhaW50LCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgIGNvbnN0IFNrR2x5cGgmIG1ldHJpY3MgPSBhdXRvQ2FjaGUuZ2V0Q2FjaGUoKS0+Z2V0R2x5cGhJRE1ldHJpY3MoZ2x5cGhJZCk7CiAgICAgICAgICAgICBvdXRCb3VuZHMtPmpvaW4oeHBvcyArIG1ldHJpY3MuZkxlZnQsIHlwb3MgKyBtZXRyaWNzLmZUb3AsCiAgICAgICAgICAgICAgICAgICAgIHhwb3MgKyBtZXRyaWNzLmZMZWZ0ICsgbWV0cmljcy5mV2lkdGgsIHlwb3MgKyBtZXRyaWNzLmZUb3AgKyBtZXRyaWNzLmZIZWlnaHQpOwogCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlLmNwcCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2UuY3BwCmluZGV4IGNjZDc1ZDUuLjA0ZjlmZTEgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2UuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2UuY3BwCkBAIC0xLDkgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCiAjaW5jbHVkZSAiam5pLmgiCiAjaW5jbHVkZSA8YW5kcm9pZF9ydW50aW1lL0FuZHJvaWRSdW50aW1lLmg+CiAKICNpbmNsdWRlICJHcmFwaGljc0pOSS5oIgogI2luY2x1ZGUgIlNrU3RyZWFtLmgiCiAjaW5jbHVkZSAiU2tUeXBlZmFjZS5oIgorI2luY2x1ZGUgIlR5cGVmYWNlSW1wbC5oIgogI2luY2x1ZGUgPGFuZHJvaWRfcnVudGltZS9hbmRyb2lkX3V0aWxfQXNzZXRNYW5hZ2VyLmg+CiAjaW5jbHVkZSA8YW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5oPgogCkBAIC0yNywxMTIgKzQ0LDQ2IEBACiAgICAgY29uc3QgY2hhciogZkNTdHI7CiB9OwogCi1zdGF0aWMgU2tUeXBlZmFjZSogVHlwZWZhY2VfY3JlYXRlKEpOSUVudiogZW52LCBqb2JqZWN0LCBqc3RyaW5nIG5hbWUsCitzdGF0aWMgVHlwZWZhY2VJbXBsKiBUeXBlZmFjZV9jcmVhdGUoSk5JRW52KiBlbnYsIGpvYmplY3QsIGpzdHJpbmcgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tUeXBlZmFjZTo6U3R5bGUgc3R5bGUpIHsKLSAgICBTa1R5cGVmYWNlKiBmYWNlID0gTlVMTDsKKyAgICBUeXBlZmFjZUltcGwqIGZhY2UgPSBOVUxMOwogCiAgICAgaWYgKE5VTEwgIT0gbmFtZSkgewogICAgICAgICBBdXRvSmF2YVN0cmluZ1RvVVRGOCAgICBzdHIoZW52LCBuYW1lKTsKLSAgICAgICAgZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21OYW1lKHN0ci5jX3N0cigpLCBzdHlsZSk7Ci0gICAgICAgIC8vIFRyeSB0byBmaW5kIHRoZSBjbG9zZXN0IG1hdGNoaW5nIGZvbnQsIHVzaW5nIHRoZSBzdGFuZGFyZCBoZXVyaXN0aWMKLSAgICAgICAgaWYgKE5VTEwgPT0gZmFjZSkgewotICAgICAgICAgICAgZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21OYW1lKHN0ci5jX3N0cigpLCAoU2tUeXBlZmFjZTo6U3R5bGUpKHN0eWxlIF4gU2tUeXBlZmFjZTo6a0l0YWxpYykpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBOVUxMID09IGZhY2UgJiYgaSA8IDQ7IGkrKykgewotICAgICAgICAgICAgZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21OYW1lKHN0ci5jX3N0cigpLCAoU2tUeXBlZmFjZTo6U3R5bGUpaSk7Ci0gICAgICAgIH0KKyAgICAgICAgZmFjZSA9IFR5cGVmYWNlSW1wbF9jcmVhdGVGcm9tTmFtZShzdHIuY19zdHIoKSwgc3R5bGUpOwogICAgIH0KIAogICAgIC8vIHJldHVybiB0aGUgZGVmYXVsdCBmb250IGF0IHRoZSBiZXN0IHN0eWxlIGlmIG5vIGV4YWN0IG1hdGNoIGV4aXN0cwogICAgIGlmIChOVUxMID09IGZhY2UpIHsKLSAgICAgICAgZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21OYW1lKE5VTEwsIHN0eWxlKTsKKyAgICAgICAgZmFjZSA9IFR5cGVmYWNlSW1wbF9jcmVhdGVGcm9tTmFtZShOVUxMLCBzdHlsZSk7CiAgICAgfQogICAgIHJldHVybiBmYWNlOwogfQogCi1zdGF0aWMgU2tUeXBlZmFjZSogVHlwZWZhY2VfY3JlYXRlRnJvbVR5cGVmYWNlKEpOSUVudiogZW52LCBqb2JqZWN0LCBTa1R5cGVmYWNlKiBmYW1pbHksIGludCBzdHlsZSkgewotICAgIFNrVHlwZWZhY2UqIGZhY2UgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tVHlwZWZhY2UoZmFtaWx5LCAoU2tUeXBlZmFjZTo6U3R5bGUpc3R5bGUpOworc3RhdGljIFR5cGVmYWNlSW1wbCogVHlwZWZhY2VfY3JlYXRlRnJvbVR5cGVmYWNlKEpOSUVudiogZW52LCBqb2JqZWN0LCBUeXBlZmFjZUltcGwqIGZhbWlseSwgaW50IHN0eWxlKSB7CisgICAgVHlwZWZhY2VJbXBsKiBmYWNlID0gVHlwZWZhY2VJbXBsX2NyZWF0ZUZyb21UeXBlZmFjZShmYW1pbHksIChTa1R5cGVmYWNlOjpTdHlsZSlzdHlsZSk7CiAgICAgLy8gVHJ5IHRvIGZpbmQgdGhlIGNsb3Nlc3QgbWF0Y2hpbmcgZm9udCwgdXNpbmcgdGhlIHN0YW5kYXJkIGhldXJpc3RpYwogICAgIGlmIChOVUxMID09IGZhY2UpIHsKLSAgICAgICAgZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21UeXBlZmFjZShmYW1pbHksIChTa1R5cGVmYWNlOjpTdHlsZSkoc3R5bGUgXiBTa1R5cGVmYWNlOjprSXRhbGljKSk7CisgICAgICAgIGZhY2UgPSBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbVR5cGVmYWNlKGZhbWlseSwgKFNrVHlwZWZhY2U6OlN0eWxlKShzdHlsZSBeIFNrVHlwZWZhY2U6OmtJdGFsaWMpKTsKICAgICB9CiAgICAgZm9yIChpbnQgaSA9IDA7IE5VTEwgPT0gZmFjZSAmJiBpIDwgNDsgaSsrKSB7Ci0gICAgICAgIGZhY2UgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tVHlwZWZhY2UoZmFtaWx5LCAoU2tUeXBlZmFjZTo6U3R5bGUpaSk7CisgICAgICAgIGZhY2UgPSBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbVR5cGVmYWNlKGZhbWlseSwgKFNrVHlwZWZhY2U6OlN0eWxlKWkpOwogICAgIH0KICAgICBpZiAoTlVMTCA9PSBmYWNlKSB7Ci0gICAgICAgIGZhY2UgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tTmFtZShOVUxMLCAoU2tUeXBlZmFjZTo6U3R5bGUpc3R5bGUpOworICAgICAgICBmYWNlID0gVHlwZWZhY2VJbXBsX2NyZWF0ZUZyb21OYW1lKE5VTEwsIChTa1R5cGVmYWNlOjpTdHlsZSlzdHlsZSk7CiAgICAgfQogICAgIHJldHVybiBmYWNlOwogfQogCi1zdGF0aWMgdm9pZCBUeXBlZmFjZV91bnJlZihKTklFbnYqIGVudiwgam9iamVjdCBvYmosIFNrVHlwZWZhY2UqIGZhY2UpIHsKLSAgICBTa1NhZmVVbnJlZihmYWNlKTsKK3N0YXRpYyB2b2lkIFR5cGVmYWNlX3VucmVmKEpOSUVudiogZW52LCBqb2JqZWN0IG9iaiwgVHlwZWZhY2VJbXBsKiBmYWNlKSB7CisgICAgVHlwZWZhY2VJbXBsX3VucmVmKGZhY2UpOwogfQogCi1zdGF0aWMgaW50IFR5cGVmYWNlX2dldFN0eWxlKEpOSUVudiogZW52LCBqb2JqZWN0IG9iaiwgU2tUeXBlZmFjZSogZmFjZSkgewotICAgIHJldHVybiBmYWNlLT5zdHlsZSgpOworc3RhdGljIGludCBUeXBlZmFjZV9nZXRTdHlsZShKTklFbnYqIGVudiwgam9iamVjdCBvYmosIFR5cGVmYWNlSW1wbCogZmFjZSkgeworICAgIHJldHVybiBUeXBlZmFjZUltcGxfZ2V0U3R5bGUoZmFjZSk7CiB9CiAKLWNsYXNzIEFzc2V0U3RyZWFtIDogcHVibGljIFNrU3RyZWFtIHsKLXB1YmxpYzoKLSAgICBBc3NldFN0cmVhbShBc3NldCogYXNzZXQsIGJvb2wgaGFzTWVtb3J5QmFzZSkgOiBmQXNzZXQoYXNzZXQpCi0gICAgewotICAgICAgICBmTWVtb3J5QmFzZSA9IGhhc01lbW9yeUJhc2UgPyBmQXNzZXQtPmdldEJ1ZmZlcihmYWxzZSkgOiBOVUxMOwotICAgIH0KLQotICAgIHZpcnR1YWwgfkFzc2V0U3RyZWFtKCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBmQXNzZXQ7Ci0gICAgfQotCi0gICAgdmlydHVhbCBjb25zdCB2b2lkKiBnZXRNZW1vcnlCYXNlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmTWVtb3J5QmFzZTsKLSAgICB9Ci0KLQl2aXJ0dWFsIGJvb2wgcmV3aW5kKCkKLSAgICB7Ci0gICAgICAgIG9mZjY0X3QgcG9zID0gZkFzc2V0LT5zZWVrKDAsIFNFRUtfU0VUKTsKLSAgICAgICAgcmV0dXJuIHBvcyAhPSAob2ZmNjRfdCktMTsKLSAgICB9Ci0KLQl2aXJ0dWFsIHNpemVfdCByZWFkKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICBzc2l6ZV90IGFtb3VudDsKLQotICAgICAgICBpZiAoTlVMTCA9PSBidWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgwID09IHNpemUpICAvLyBjYWxsZXIgaXMgYXNraW5nIHVzIGZvciBvdXIgdG90YWwgbGVuZ3RoCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZBc3NldC0+Z2V0TGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIC8vIGFzc2V0LT5zZWVrIHJldHVybnMgbmV3IHRvdGFsIG9mZnNldAotICAgICAgICAgICAgLy8gd2Ugd2FudCB0byByZXR1cm4gYW1vdW50IHRoYXQgd2FzIHNraXBwZWQKLQotICAgICAgICAgICAgb2ZmNjRfdCBvbGRPZmZzZXQgPSBmQXNzZXQtPnNlZWsoMCwgU0VFS19DVVIpOwotICAgICAgICAgICAgaWYgKC0xID09IG9sZE9mZnNldCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIG9mZjY0X3QgbmV3T2Zmc2V0ID0gZkFzc2V0LT5zZWVrKHNpemUsIFNFRUtfQ1VSKTsKLSAgICAgICAgICAgIGlmICgtMSA9PSBuZXdPZmZzZXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIGFtb3VudCA9IG5ld09mZnNldCAtIG9sZE9mZnNldDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFtb3VudCA9IGZBc3NldC0+cmVhZChidWZmZXIsIHNpemUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFtb3VudCA8IDApCi0gICAgICAgICAgICBhbW91bnQgPSAwOwotICAgICAgICByZXR1cm4gYW1vdW50OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBBc3NldCogICAgICBmQXNzZXQ7Ci0gICAgY29uc3Qgdm9pZCogZk1lbW9yeUJhc2U7Ci19OwotCi1zdGF0aWMgU2tUeXBlZmFjZSogVHlwZWZhY2VfY3JlYXRlRnJvbUFzc2V0KEpOSUVudiogZW52LCBqb2JqZWN0LAorc3RhdGljIFR5cGVmYWNlSW1wbCogVHlwZWZhY2VfY3JlYXRlRnJvbUFzc2V0KEpOSUVudiogZW52LCBqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGphc3NldE1nciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganN0cmluZyBqcGF0aCkgewogCkBAIC0xNTAsMjEgKzEwMSwxNSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBTa1N0cmVhbSogc3RyZWFtID0gbmV3IEFzc2V0U3RyZWFtKGFzc2V0LCB0cnVlKTsKLSAgICBTa1R5cGVmYWNlKiBmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbVN0cmVhbShzdHJlYW0pOwotICAgIC8vIFNrVHlwZUZhY2U6OkNyZWF0ZUZyb21TdHJlYW0gY2FsbHMgcmVmKCkgb24gdGhlIHN0cmVhbSwgc28gd2UKLSAgICAvLyBuZWVkIHRvIHVucmVmIGl0IGhlcmUgb3IgaXQgd29uJ3QgYmUgZnJlZWQgbGF0ZXIgb24KLSAgICBzdHJlYW0tPnVucmVmKCk7Ci0KLSAgICByZXR1cm4gZmFjZTsKKyAgICByZXR1cm4gVHlwZWZhY2VJbXBsX2NyZWF0ZUZyb21Bc3NldChhc3NldCk7CiB9CiAKLXN0YXRpYyBTa1R5cGVmYWNlKiBUeXBlZmFjZV9jcmVhdGVGcm9tRmlsZShKTklFbnYqIGVudiwgam9iamVjdCwganN0cmluZyBqcGF0aCkgeworc3RhdGljIFR5cGVmYWNlSW1wbCogVHlwZWZhY2VfY3JlYXRlRnJvbUZpbGUoSk5JRW52KiBlbnYsIGpvYmplY3QsIGpzdHJpbmcganBhdGgpIHsKICAgICBOUEVfQ0hFQ0tfUkVUVVJOX1pFUk8oZW52LCBqcGF0aCk7CiAKICAgICBBdXRvSmF2YVN0cmluZ1RvVVRGOCBzdHIoZW52LCBqcGF0aCk7CiAKLSAgICByZXR1cm4gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbUZpbGUoc3RyLmNfc3RyKCkpOworICAgIHJldHVybiBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbUZpbGUoc3RyLmNfc3RyKCkpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlSW1wbC5jcHAgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3NGRiOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2VJbXBsLmNwcApAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFR5cGVmYWNlIG9iamVjdC4gSGlzdG9yaWNhbGx5LCBpdCBoYXMKKyAqIGp1c3QgYmVlbiBTa1R5cGVmYWNlLCBidXQgd2UgYXJlIG1pZ3JhdGluZyB0byBNaW5pa2luLiBGb3IgdGhlIHRpbWUKKyAqIGJlaW5nLCB0aGF0IGNob2ljZSBpcyBoaWRkZW4gdW5kZXIgdGhlIFVTRV9NSU5JS0lOIGNvbXBpbGUtdGltZSBmbGFnLgorICovCisKKyNpbmNsdWRlICJTa1N0cmVhbS5oIgorI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKKworI2lmZGVmIFVTRV9NSU5JS0lOCisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPG1pbmlraW4vRm9udENvbGxlY3Rpb24uaD4KKyNpbmNsdWRlIDxtaW5pa2luL0ZvbnRGYW1pbHkuaD4KKyNpbmNsdWRlIDxtaW5pa2luL0xheW91dC5oPgorI2luY2x1ZGUgIk1pbmlraW5Ta2lhLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIlR5cGVmYWNlSW1wbC5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NsYXNzIEFzc2V0U3RyZWFtIDogcHVibGljIFNrU3RyZWFtIHsKK3B1YmxpYzoKKyAgICBBc3NldFN0cmVhbShBc3NldCogYXNzZXQsIGJvb2wgaGFzTWVtb3J5QmFzZSkgOiBmQXNzZXQoYXNzZXQpCisgICAgeworICAgICAgICBmTWVtb3J5QmFzZSA9IGhhc01lbW9yeUJhc2UgPyBmQXNzZXQtPmdldEJ1ZmZlcihmYWxzZSkgOiBOVUxMOworICAgIH0KKworICAgIHZpcnR1YWwgfkFzc2V0U3RyZWFtKCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBmQXNzZXQ7CisgICAgfQorCisgICAgdmlydHVhbCBjb25zdCB2b2lkKiBnZXRNZW1vcnlCYXNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBmTWVtb3J5QmFzZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcmV3aW5kKCkKKyAgICB7CisgICAgICAgIG9mZjY0X3QgcG9zID0gZkFzc2V0LT5zZWVrKDAsIFNFRUtfU0VUKTsKKyAgICAgICAgcmV0dXJuIHBvcyAhPSAob2ZmNjRfdCktMTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHNpemVfdCByZWFkKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBzc2l6ZV90IGFtb3VudDsKKworICAgICAgICBpZiAoTlVMTCA9PSBidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgwID09IHNpemUpICAvLyBjYWxsZXIgaXMgYXNraW5nIHVzIGZvciBvdXIgdG90YWwgbGVuZ3RoCisgICAgICAgICAgICAgICAgcmV0dXJuIGZBc3NldC0+Z2V0TGVuZ3RoKCk7CisKKyAgICAgICAgICAgIC8vIGFzc2V0LT5zZWVrIHJldHVybnMgbmV3IHRvdGFsIG9mZnNldAorICAgICAgICAgICAgLy8gd2Ugd2FudCB0byByZXR1cm4gYW1vdW50IHRoYXQgd2FzIHNraXBwZWQKKworICAgICAgICAgICAgb2ZmNjRfdCBvbGRPZmZzZXQgPSBmQXNzZXQtPnNlZWsoMCwgU0VFS19DVVIpOworICAgICAgICAgICAgaWYgKC0xID09IG9sZE9mZnNldCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIG9mZjY0X3QgbmV3T2Zmc2V0ID0gZkFzc2V0LT5zZWVrKHNpemUsIFNFRUtfQ1VSKTsKKyAgICAgICAgICAgIGlmICgtMSA9PSBuZXdPZmZzZXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGFtb3VudCA9IG5ld09mZnNldCAtIG9sZE9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGFtb3VudCA9IGZBc3NldC0+cmVhZChidWZmZXIsIHNpemUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFtb3VudCA8IDApCisgICAgICAgICAgICBhbW91bnQgPSAwOworICAgICAgICByZXR1cm4gYW1vdW50OworICAgIH0KKworcHJpdmF0ZToKKyAgICBBc3NldCogICAgICBmQXNzZXQ7CisgICAgY29uc3Qgdm9pZCogZk1lbW9yeUJhc2U7Cit9OworCisjaWZkZWYgVVNFX01JTklLSU4KKworLy8gQW55IHdlaWdodCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhpcyBpcyBjb25zaWRlcmVkICJib2xkIiBmb3IKKy8vIGxlZ2FjeSBBUEkuCitzdGF0aWMgY29uc3QgaW50IGtCb2xkVGhyZXNob2xkID0gNjsKKworc3RhdGljIEZvbnRTdHlsZSBzdHlsZUZyb21Ta2lhU3R5bGUoU2tUeXBlZmFjZTo6U3R5bGUgc2tpYVN0eWxlKSB7CisgICAgaW50IHdlaWdodCA9IChza2lhU3R5bGUgJiBTa1R5cGVmYWNlOjprQm9sZCkgIT0gMCA/IDcgOiA0OworICAgIGJvb2wgaXRhbGljID0gKHNraWFTdHlsZSAmIFNrVHlwZWZhY2U6OmtJdGFsaWMpICE9IDA7CisgICAgcmV0dXJuIEZvbnRTdHlsZSh3ZWlnaHQsIGl0YWxpYyk7Cit9CisKK1R5cGVmYWNlSW1wbCogZ0RlZmF1bHRUeXBlZmFjZTsKK3B0aHJlYWRfb25jZV90IGdEZWZhdWx0VHlwZWZhY2VPbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7CisKKy8vIFRPRE86IHRoaXMgY3VycmVudGx5IGJ1aWxkcyBhIGZvbnQgY29sbGVjdGlvbiBmcm9tIGhhcmRjb2RlZCBwYXRocy4KKy8vIEl0IHdpbGwgZ2V0IHJlcGxhY2VkIGJ5IGFuIGltcGxlbWVudGF0aW9uIHRoYXQgcGFyc2VzIHRoZSBYTUwgZmlsZXMuCitzdGF0aWMgRm9udENvbGxlY3Rpb24gKm1ha2VGb250Q29sbGVjdGlvbigpIHsKKyAgICBzdGQ6OnZlY3RvcjxGb250RmFtaWx5ICo+dHlwZWZhY2VzOworICAgIGNvbnN0IGNoYXIgKmZuc1tdID0geworICAgICAgICAiL3N5c3RlbS9mb250cy9Sb2JvdG8tUmVndWxhci50dGYiLAorICAgICAgICAiL3N5c3RlbS9mb250cy9Sb2JvdG8tSXRhbGljLnR0ZiIsCisgICAgICAgICIvc3lzdGVtL2ZvbnRzL1JvYm90by1Cb2xkSXRhbGljLnR0ZiIsCisgICAgICAgICIvc3lzdGVtL2ZvbnRzL1JvYm90by1MaWdodC50dGYiLAorICAgICAgICAiL3N5c3RlbS9mb250cy9Sb2JvdG8tVGhpbi50dGYiLAorICAgICAgICAiL3N5c3RlbS9mb250cy9Sb2JvdG8tQm9sZC50dGYiLAorICAgICAgICAiL3N5c3RlbS9mb250cy9Sb2JvdG8tVGhpbkl0YWxpYy50dGYiLAorICAgICAgICAiL3N5c3RlbS9mb250cy9Sb2JvdG8tTGlnaHRJdGFsaWMudHRmIgorICAgIH07CisKKyAgICBGb250RmFtaWx5ICpmYW1pbHkgPSBuZXcgRm9udEZhbWlseSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGZucykvc2l6ZW9mKGZuc1swXSk7IGkrKykgeworICAgICAgICBjb25zdCBjaGFyICpmbiA9IGZuc1tpXTsKKyAgICAgICAgU2tUeXBlZmFjZSAqc2tGYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbUZpbGUoZm4pOworICAgICAgICBNaW5pa2luRm9udCAqZm9udCA9IG5ldyBNaW5pa2luRm9udFNraWEoc2tGYWNlKTsKKyAgICAgICAgZmFtaWx5LT5hZGRGb250KGZvbnQpOworICAgIH0KKyAgICB0eXBlZmFjZXMucHVzaF9iYWNrKGZhbWlseSk7CisKKyAgICBmYW1pbHkgPSBuZXcgRm9udEZhbWlseSgpOworICAgIGNvbnN0IGNoYXIgKmZuID0gIi9zeXN0ZW0vZm9udHMvTm90b1NhbnNEZXZhbmFnYXJpLVJlZ3VsYXIudHRmIjsKKyAgICBTa1R5cGVmYWNlICpza0ZhY2UgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tRmlsZShmbik7CisgICAgTWluaWtpbkZvbnQgKmZvbnQgPSBuZXcgTWluaWtpbkZvbnRTa2lhKHNrRmFjZSk7CisgICAgZmFtaWx5LT5hZGRGb250KGZvbnQpOworICAgIHR5cGVmYWNlcy5wdXNoX2JhY2soZmFtaWx5KTsKKworICAgIHJldHVybiBuZXcgRm9udENvbGxlY3Rpb24odHlwZWZhY2VzKTsKK30KKworc3RhdGljIHZvaWQgZ2V0RGVmYXVsdFR5cGVmYWNlT25jZSgpIHsKKyAgICBMYXlvdXQ6OmluaXQoKTsKKyAgICBnRGVmYXVsdFR5cGVmYWNlID0gbmV3IFR5cGVmYWNlSW1wbDsKKyAgICBnRGVmYXVsdFR5cGVmYWNlLT5mRm9udENvbGxlY3Rpb24gPSBtYWtlRm9udENvbGxlY3Rpb24oKTsKKyAgICBnRGVmYXVsdFR5cGVmYWNlLT5mU3R5bGUgPSBGb250U3R5bGUoKTsKK30KKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfcmVzb2x2ZURlZmF1bHQoVHlwZWZhY2VJbXBsKiBzcmMpIHsKKyAgICBpZiAoc3JjID09IE5VTEwpIHsKKyAgICAgICAgcHRocmVhZF9vbmNlKCZnRGVmYXVsdFR5cGVmYWNlT25jZSwgZ2V0RGVmYXVsdFR5cGVmYWNlT25jZSk7CisgICAgICAgIHJldHVybiBnRGVmYXVsdFR5cGVmYWNlOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBzcmM7CisgICAgfQorfQorCitUeXBlZmFjZUltcGwqIFR5cGVmYWNlSW1wbF9jcmVhdGVGcm9tVHlwZWZhY2UoVHlwZWZhY2VJbXBsKiBzcmMsIFNrVHlwZWZhY2U6OlN0eWxlIHN0eWxlKSB7CisgICAgVHlwZWZhY2VJbXBsKiByZXNvbHZlZEZhY2UgPSBUeXBlZmFjZUltcGxfcmVzb2x2ZURlZmF1bHQoc3JjKTsKKyAgICBUeXBlZmFjZUltcGwqIHJlc3VsdCA9IG5ldyBUeXBlZmFjZUltcGw7CisgICAgaWYgKHJlc3VsdCAhPSAwKSB7CisgICAgICAgIHJlc3VsdC0+ZkZvbnRDb2xsZWN0aW9uID0gcmVzb2x2ZWRGYWNlLT5mRm9udENvbGxlY3Rpb247CisgICAgICAgIHJlc3VsdC0+ZlN0eWxlID0gc3R5bGVGcm9tU2tpYVN0eWxlKHN0eWxlKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFR5cGVmYWNlSW1wbCogY3JlYXRlRnJvbVNrVHlwZWZhY2UoU2tUeXBlZmFjZSogdHlwZWZhY2UpIHsKKyAgICBNaW5pa2luRm9udCogbWluaWtpbkZvbnQgPSBuZXcgTWluaWtpbkZvbnRTa2lhKHR5cGVmYWNlKTsKKyAgICBzdGQ6OnZlY3RvcjxGb250RmFtaWx5ICo+IHR5cGVmYWNlczsKKyAgICBGb250RmFtaWx5KiBmYW1pbHkgPSBuZXcgRm9udEZhbWlseSgpOworICAgIGZhbWlseS0+YWRkRm9udChtaW5pa2luRm9udCk7CisgICAgdHlwZWZhY2VzLnB1c2hfYmFjayhmYW1pbHkpOworICAgIFR5cGVmYWNlSW1wbCogcmVzdWx0ID0gbmV3IFR5cGVmYWNlSW1wbDsKKyAgICByZXN1bHQtPmZGb250Q29sbGVjdGlvbiA9IG5ldyBGb250Q29sbGVjdGlvbih0eXBlZmFjZXMpOworICAgIHJlc3VsdC0+ZlN0eWxlID0gRm9udFN0eWxlKCk7ICAvLyBUT0RPOiBpbXByb3ZlCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbU5hbWUoY29uc3QgY2hhciogbmFtZSwgU2tUeXBlZmFjZTo6U3R5bGUgc3R5bGUpIHsKKyAgICAvLyBUT0RPOiBzaG91bGQgY3JlYXRlIGEgZm9udCBjb2xsZWN0aW9uIHdpdGggYWxsIHN0eWxlcyBjb3JyZXNwb25kaW5nIHRvCisgICAgLy8gdGhlIG5hbWUKKyAgICBTa1R5cGVmYWNlKiBmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbU5hbWUobmFtZSwgc3R5bGUpOworICAgIHJldHVybiBjcmVhdGVGcm9tU2tUeXBlZmFjZShmYWNlKTsKK30KKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbUZpbGUoY29uc3QgY2hhciogZmlsZW5hbWUpIHsKKyAgICBTa1R5cGVmYWNlKiBmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbUZpbGUoZmlsZW5hbWUpOworICAgIHJldHVybiBjcmVhdGVGcm9tU2tUeXBlZmFjZShmYWNlKTsKK30KKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbUFzc2V0KEFzc2V0KiBhc3NldCkgeworICAgIFNrU3RyZWFtKiBzdHJlYW0gPSBuZXcgQXNzZXRTdHJlYW0oYXNzZXQsIHRydWUpOworICAgIFNrVHlwZWZhY2UqIGZhY2UgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tU3RyZWFtKHN0cmVhbSk7CisgICAgLy8gU2tUeXBlRmFjZTo6Q3JlYXRlRnJvbVN0cmVhbSBjYWxscyByZWYoKSBvbiB0aGUgc3RyZWFtLCBzbyB3ZQorICAgIC8vIG5lZWQgdG8gdW5yZWYgaXQgaGVyZSBvciBpdCB3b24ndCBiZSBmcmVlZCBsYXRlciBvbgorICAgIHN0cmVhbS0+dW5yZWYoKTsKKyAgICByZXR1cm4gY3JlYXRlRnJvbVNrVHlwZWZhY2UoZmFjZSk7Cit9CisKK3ZvaWQgVHlwZWZhY2VJbXBsX3VucmVmKFR5cGVmYWNlSW1wbCogZmFjZSkgeworICAgIGRlbGV0ZSBmYWNlOworfQorCitpbnQgVHlwZWZhY2VJbXBsX2dldFN0eWxlKFR5cGVmYWNlSW1wbCogZmFjZSkgeworICAgIEZvbnRTdHlsZSBzdHlsZSA9IGZhY2UtPmZTdHlsZTsKKyAgICBpbnQgcmVzdWx0ID0gc3R5bGUuZ2V0SXRhbGljKCkgPyBTa1R5cGVmYWNlOjprSXRhbGljIDogMDsKKyAgICBpZiAoc3R5bGUuZ2V0V2VpZ2h0KCkgPj0ga0JvbGRUaHJlc2hvbGQpIHsKKyAgICAgICAgcmVzdWx0IHw9IFNrVHlwZWZhY2U6OmtCb2xkOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZWxzZSAgLy8gVVNFX01JTklLSU4KKworLyogSnVzdCB1c2UgU2tUeXBlZmFjZSBpbnN0ZWFkLiAqLworCit0eXBlZGVmIFNrVHlwZWZhY2UgVHlwZWZhY2VJbXBsOworCitUeXBlZmFjZUltcGwqIFR5cGVmYWNlSW1wbF9jcmVhdGVGcm9tVHlwZWZhY2UoVHlwZWZhY2VJbXBsKiBzcmMsIFNrVHlwZWZhY2U6OlN0eWxlIHN0eWxlKSB7CisgICAgcmV0dXJuIFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21UeXBlZmFjZShzcmMsIHN0eWxlKTsKK30KKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbU5hbWUoY29uc3QgY2hhciogbmFtZSwgU2tUeXBlZmFjZTo6U3R5bGUgc3R5bGUpIHsKKyAgICByZXR1cm4gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbU5hbWUobmFtZSwgc3R5bGUpOworfQorCitUeXBlZmFjZUltcGwqIFR5cGVmYWNlSW1wbF9jcmVhdGVGcm9tRmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSkgeworICAgIHJldHVybiBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tRmlsZShmaWxlbmFtZSk7Cit9CisKK1R5cGVmYWNlSW1wbCogVHlwZWZhY2VJbXBsX2NyZWF0ZUZyb21Bc3NldChBc3NldCogYXNzZXQpIHsKKyAgICBTa1N0cmVhbSogc3RyZWFtID0gbmV3IEFzc2V0U3RyZWFtKGFzc2V0LCB0cnVlKTsKKyAgICBTa1R5cGVmYWNlKiBmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbVN0cmVhbShzdHJlYW0pOworICAgIC8vIFNrVHlwZUZhY2U6OkNyZWF0ZUZyb21TdHJlYW0gY2FsbHMgcmVmKCkgb24gdGhlIHN0cmVhbSwgc28gd2UKKyAgICAvLyBuZWVkIHRvIHVucmVmIGl0IGhlcmUgb3IgaXQgd29uJ3QgYmUgZnJlZWQgbGF0ZXIgb24KKyAgICBzdHJlYW0tPnVucmVmKCk7CisKKyAgICByZXR1cm4gZmFjZTsKK30KKwordm9pZCBUeXBlZmFjZUltcGxfdW5yZWYoVHlwZWZhY2VJbXBsKiBmYWNlKSB7CisgICAgU2tTYWZlVW5yZWYoZmFjZSk7Cit9CisKK2ludCBUeXBlZmFjZUltcGxfZ2V0U3R5bGUoVHlwZWZhY2VJbXBsKiBmYWNlKSB7CisgICAgcmV0dXJuIGZhY2UtPnN0eWxlKCk7Cit9CisKKyNlbmRpZiAgLy8gVVNFX01JTklLSU4KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZUltcGwuaCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2VJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1MWJlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2VJbXBsLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKworI2lmbmRlZiBBTkRST0lEX1RZUEVGQUNFX0lNUExfSAorI2RlZmluZSBBTkRST0lEX1RZUEVGQUNFX0lNUExfSAorCisjaW5jbHVkZSA8YW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5oPgorCisjaWZkZWYgVVNFX01JTklLSU4KKyNpbmNsdWRlIDxtaW5pa2luL0ZvbnRDb2xsZWN0aW9uLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisjaWZkZWYgVVNFX01JTklLSU4KK3N0cnVjdCBUeXBlZmFjZUltcGwgeworICAgIEZvbnRDb2xsZWN0aW9uICpmRm9udENvbGxlY3Rpb247CisgICAgRm9udFN0eWxlIGZTdHlsZTsKK307CisKKy8vIE5vdGU6IGl0IHdvdWxkIGJlIGNsZWFuZXIgaWYgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2VyZSBtZW1iZXIKKy8vIGZ1bmN0aW9ucyAoc3RhdGljIG9yIG90aGVyd2lzZSkgb2YgdGhlIFR5cGVmYWNlSW1wbCBjbGFzcy4gSG93ZXZlciwKKy8vIHRoYXQgY2FuJ3QgYmUgZWFzaWx5IGFjY29tbW9kYXRlZCBpbiB0aGUgY2FzZSB3aGVyZSBUeXBlZmFjZUltcGwKKy8vIGlzIGp1c3QgYSBwb2ludGVyIHRvIFNrVHlwZWZhY2UsIGluIHRoZSBub24tVVNFX01JTklLSU4gY2FzZS4KKy8vIFRPRE86IHdoZW4gI2lmZGVmIFVTRV9NSU5JS0lOIGlzIHJlbW92ZWQsIG1vdmUgdG8gbWVtYmVyIGZ1bmN0aW9ucy4KKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfcmVzb2x2ZURlZmF1bHQoVHlwZWZhY2VJbXBsKiBzcmMpOworI2Vsc2UKK3R5cGVkZWYgU2tUeXBlZmFjZSBUeXBlZmFjZUltcGw7CisjZW5kaWYKKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbVR5cGVmYWNlKFR5cGVmYWNlSW1wbCogc3JjLCBTa1R5cGVmYWNlOjpTdHlsZSBzdHlsZSk7CisKK1R5cGVmYWNlSW1wbCogVHlwZWZhY2VJbXBsX2NyZWF0ZUZyb21OYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFNrVHlwZWZhY2U6OlN0eWxlIHN0eWxlKTsKKworVHlwZWZhY2VJbXBsKiBUeXBlZmFjZUltcGxfY3JlYXRlRnJvbUZpbGUoY29uc3QgY2hhciogZmlsZW5hbWUpOworCitUeXBlZmFjZUltcGwqIFR5cGVmYWNlSW1wbF9jcmVhdGVGcm9tQXNzZXQoQXNzZXQqIGFzc2V0KTsKKwordm9pZCBUeXBlZmFjZUltcGxfdW5yZWYoVHlwZWZhY2VJbXBsKiBmYWNlKTsKKworaW50IFR5cGVmYWNlSW1wbF9nZXRTdHlsZShUeXBlZmFjZUltcGwqIGZhY2UpOworCit9CisKKyNlbmRpZiAgLy8gQU5EUk9JRF9UWVBFRkFDRV9JTVBMX0gKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL29wZW5nbC91dGlsLmNwcCBiL2NvcmUvam5pL2FuZHJvaWQvb3BlbmdsL3V0aWwuY3BwCmluZGV4IDQ0YWYxOTkuLjRiYjA5MWQgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWQvb3BlbmdsL3V0aWwuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvb3BlbmdsL3V0aWwuY3BwCkBAIC02MzIsNyArNjMyLDcgQEAKICAgICBTa0JpdG1hcCBjb25zdCAqIG5hdGl2ZUJpdG1hcCA9CiAgICAgICAgICAgICAoU2tCaXRtYXAgY29uc3QgKillbnYtPkdldEludEZpZWxkKGpiaXRtYXAsIG5hdGl2ZUJpdG1hcElEKTsKICAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCpuYXRpdmVCaXRtYXApOwotICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gYml0bWFwLmdldENvbmZpZygpOworICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gYml0bWFwLmNvbmZpZygpOwogICAgIHJldHVybiBnZXRJbnRlcm5hbEZvcm1hdChjb25maWcpOwogfQogCkBAIC02NDIsNyArNjQyLDcgQEAKICAgICBTa0JpdG1hcCBjb25zdCAqIG5hdGl2ZUJpdG1hcCA9CiAgICAgICAgICAgICAoU2tCaXRtYXAgY29uc3QgKillbnYtPkdldEludEZpZWxkKGpiaXRtYXAsIG5hdGl2ZUJpdG1hcElEKTsKICAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCpuYXRpdmVCaXRtYXApOwotICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gYml0bWFwLmdldENvbmZpZygpOworICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gYml0bWFwLmNvbmZpZygpOwogICAgIHJldHVybiBnZXRUeXBlKGNvbmZpZyk7CiB9CiAKQEAgLTY1Myw3ICs2NTMsNyBAQAogICAgIFNrQml0bWFwIGNvbnN0ICogbmF0aXZlQml0bWFwID0KICAgICAgICAgICAgIChTa0JpdG1hcCBjb25zdCAqKWVudi0+R2V0SW50RmllbGQoamJpdG1hcCwgbmF0aXZlQml0bWFwSUQpOwogICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKm5hdGl2ZUJpdG1hcCk7Ci0gICAgU2tCaXRtYXA6OkNvbmZpZyBjb25maWcgPSBiaXRtYXAuZ2V0Q29uZmlnKCk7CisgICAgU2tCaXRtYXA6OkNvbmZpZyBjb25maWcgPSBiaXRtYXAuY29uZmlnKCk7CiAgICAgaWYgKGludGVybmFsZm9ybWF0IDwgMCkgewogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IGdldEludGVybmFsRm9ybWF0KGNvbmZpZyk7CiAgICAgfQpAQCAtNjgxLDcgKzY4MSw3IEBACiAgICAgICAgICAgICBTa0NvbG9yVGFibGUqIGN0YWJsZSA9IGJpdG1hcC5nZXRDb2xvclRhYmxlKCk7CiAgICAgICAgICAgICBtZW1jcHkoZGF0YSwgY3RhYmxlLT5sb2NrQ29sb3JzKCksIGN0YWJsZS0+Y291bnQoKSAqIHNpemVvZihTa1BNQ29sb3IpKTsKICAgICAgICAgICAgIG1lbWNweShwaXhlbHMsIHAsIHNpemUpOwotICAgICAgICAgICAgY3RhYmxlLT51bmxvY2tDb2xvcnMoZmFsc2UpOworICAgICAgICAgICAgY3RhYmxlLT51bmxvY2tDb2xvcnMoKTsKICAgICAgICAgICAgIGdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHcsIGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgIGZyZWUoZGF0YSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC03MDIsNyArNzAyLDcgQEAKICAgICBTa0JpdG1hcCBjb25zdCAqIG5hdGl2ZUJpdG1hcCA9CiAgICAgICAgICAgICAoU2tCaXRtYXAgY29uc3QgKillbnYtPkdldEludEZpZWxkKGpiaXRtYXAsIG5hdGl2ZUJpdG1hcElEKTsKICAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCpuYXRpdmVCaXRtYXApOwotICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gYml0bWFwLmdldENvbmZpZygpOworICAgIFNrQml0bWFwOjpDb25maWcgY29uZmlnID0gYml0bWFwLmNvbmZpZygpOwogICAgIGlmIChmb3JtYXQgPCAwKSB7CiAgICAgICAgIGZvcm1hdCA9IGdldEludGVybmFsRm9ybWF0KGNvbmZpZyk7CiAgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfUEFMRVRURThfUkdCQThfT0VTKQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXIuY3BwIGIvY29yZS9qbmkvYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXIuY3BwCmluZGV4IDU5OTE4MDUuLjczMzQ3ZWEgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlci5jcHAKQEAgLTQ3LDYgKzQ3LDMyIEBACiAgICAgcmV0dXJuIG1pZDsKIH0KIAorc3RhdGljIGptZXRob2RJRCBnZXRNdWx0aXBhcmFtZXRlck1ldGhvZChKTklFbnYqIGVudiwgamNsYXNzIHRhcmdldENsYXNzLCBqc3RyaW5nIG1ldGhvZE5hbWUsCisgICAgamludCBwYXJhbWV0ZXJDb3VudCwgY2hhciBwYXJhbWV0ZXJUeXBlKQoreworICAgIGNvbnN0IGNoYXIgKm5hdGl2ZVN0cmluZyA9IGVudi0+R2V0U3RyaW5nVVRGQ2hhcnMobWV0aG9kTmFtZSwgMCk7CisgICAgY2hhciAqc2lnbmF0dXJlID0gbmV3IGNoYXJbcGFyYW1ldGVyQ291bnQgKyA0XTsKKyAgICBzaWduYXR1cmVbMF0gPSAnKCc7CisgICAgbWVtc2V0KCYoc2lnbmF0dXJlWzFdKSwgcGFyYW1ldGVyVHlwZSwgcGFyYW1ldGVyQ291bnQpOworICAgIHN0cmNweSgmKHNpZ25hdHVyZVtwYXJhbWV0ZXJDb3VudCArIDFdKSwgIilWIik7CisgICAgam1ldGhvZElEIG1pZCA9IGVudi0+R2V0TWV0aG9kSUQodGFyZ2V0Q2xhc3MsIG5hdGl2ZVN0cmluZywgc2lnbmF0dXJlKTsKKyAgICBkZWxldGVbXSBzaWduYXR1cmU7CisgICAgZW52LT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMobWV0aG9kTmFtZSwgbmF0aXZlU3RyaW5nKTsKKyAgICByZXR1cm4gbWlkOworfQorCitzdGF0aWMgam1ldGhvZElEIGFuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyX2dldE11bHRpcGxlRmxvYXRNZXRob2QoCisgICAgICAgIEpOSUVudiogZW52LCBqY2xhc3MgcHZoQ2xhc3MsIGpjbGFzcyB0YXJnZXRDbGFzcywganN0cmluZyBtZXRob2ROYW1lLCBqaW50IHBhcmFtZXRlckNvdW50KQoreworICAgIHJldHVybiBnZXRNdWx0aXBhcmFtZXRlck1ldGhvZChlbnYsIHRhcmdldENsYXNzLCBtZXRob2ROYW1lLCBwYXJhbWV0ZXJDb3VudCwgJ0YnKTsKK30KKworc3RhdGljIGptZXRob2RJRCBhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9nZXRNdWx0aXBsZUludE1ldGhvZCgKKyAgICAgICAgSk5JRW52KiBlbnYsIGpjbGFzcyBwdmhDbGFzcywgamNsYXNzIHRhcmdldENsYXNzLCBqc3RyaW5nIG1ldGhvZE5hbWUsIGppbnQgcGFyYW1ldGVyQ291bnQpCit7CisgICAgcmV0dXJuIGdldE11bHRpcGFyYW1ldGVyTWV0aG9kKGVudiwgdGFyZ2V0Q2xhc3MsIG1ldGhvZE5hbWUsIHBhcmFtZXRlckNvdW50LCAnSScpOworfQorCiBzdGF0aWMgdm9pZCBhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9jYWxsSW50TWV0aG9kKAogICAgICAgICBKTklFbnYqIGVudiwgamNsYXNzIHB2aE9iamVjdCwgam9iamVjdCB0YXJnZXQsIGptZXRob2RJRCBtZXRob2RJRCwgaW50IGFyZykKIHsKQEAgLTU5LDE1ICs4NSw4NSBAQAogICAgIGVudi0+Q2FsbFZvaWRNZXRob2QodGFyZ2V0LCBtZXRob2RJRCwgYXJnKTsKIH0KIAorc3RhdGljIHZvaWQgYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbFR3b0Zsb2F0TWV0aG9kKAorICAgICAgICBKTklFbnYqIGVudiwgamNsYXNzIHB2aE9iamVjdCwgam9iamVjdCB0YXJnZXQsIGptZXRob2RJRCBtZXRob2RJRCwgZmxvYXQgYXJnMSwgZmxvYXQgYXJnMikKK3sKKyAgICBlbnYtPkNhbGxWb2lkTWV0aG9kKHRhcmdldCwgbWV0aG9kSUQsIGFyZzEsIGFyZzIpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9jYWxsRm91ckZsb2F0TWV0aG9kKAorICAgICAgICBKTklFbnYqIGVudiwgamNsYXNzIHB2aE9iamVjdCwgam9iamVjdCB0YXJnZXQsIGptZXRob2RJRCBtZXRob2RJRCwgZmxvYXQgYXJnMSwgZmxvYXQgYXJnMiwKKyAgICAgICAgZmxvYXQgYXJnMywgZmxvYXQgYXJnNCkKK3sKKyAgICBlbnYtPkNhbGxWb2lkTWV0aG9kKHRhcmdldCwgbWV0aG9kSUQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9jYWxsTXVsdGlwbGVGbG9hdE1ldGhvZCgKKyAgICAgICAgSk5JRW52KiBlbnYsIGpjbGFzcyBwdmhPYmplY3QsIGpvYmplY3QgdGFyZ2V0LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGpmbG9hdEFycmF5IGFyZykKK3sKKyAgICBqc2l6ZSBwYXJhbWV0ZXJDb3VudCA9IGVudi0+R2V0QXJyYXlMZW5ndGgoYXJnKTsKKyAgICBqZmxvYXQgKmZsb2F0VmFsdWVzID0gZW52LT5HZXRGbG9hdEFycmF5RWxlbWVudHMoYXJnLCBOVUxMKTsKKyAgICBqdmFsdWUqIHZhbHVlcyA9IG5ldyBqdmFsdWVbcGFyYW1ldGVyQ291bnRdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1ldGVyQ291bnQ7IGkrKykgeworICAgICAgICB2YWx1ZXNbaV0uZiA9IGZsb2F0VmFsdWVzW2ldOworICAgIH0KKyAgICBlbnYtPkNhbGxWb2lkTWV0aG9kQSh0YXJnZXQsIG1ldGhvZElELCB2YWx1ZXMpOworICAgIGRlbGV0ZVtdIHZhbHVlczsKKyAgICBlbnYtPlJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMoYXJnLCBmbG9hdFZhbHVlcywgSk5JX0FCT1JUKTsKK30KKworc3RhdGljIHZvaWQgYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbFR3b0ludE1ldGhvZCgKKyAgICAgICAgSk5JRW52KiBlbnYsIGpjbGFzcyBwdmhPYmplY3QsIGpvYmplY3QgdGFyZ2V0LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGludCBhcmcxLCBpbnQgYXJnMikKK3sKKyAgICBlbnYtPkNhbGxWb2lkTWV0aG9kKHRhcmdldCwgbWV0aG9kSUQsIGFyZzEsIGFyZzIpOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9jYWxsRm91ckludE1ldGhvZCgKKyAgICAgICAgSk5JRW52KiBlbnYsIGpjbGFzcyBwdmhPYmplY3QsIGpvYmplY3QgdGFyZ2V0LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGludCBhcmcxLCBpbnQgYXJnMiwKKyAgICAgICAgaW50IGFyZzMsIGludCBhcmc0KQoreworICAgIGVudi0+Q2FsbFZvaWRNZXRob2QodGFyZ2V0LCBtZXRob2RJRCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyX2NhbGxNdWx0aXBsZUludE1ldGhvZCgKKyAgICAgICAgSk5JRW52KiBlbnYsIGpjbGFzcyBwdmhPYmplY3QsIGpvYmplY3QgdGFyZ2V0LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGppbnRBcnJheSBhcmcpCit7CisgICAganNpemUgcGFyYW1ldGVyQ291bnQgPSBlbnYtPkdldEFycmF5TGVuZ3RoKGFyZyk7CisgICAgamludCAqaW50VmFsdWVzID0gZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGFyZywgTlVMTCk7CisgICAganZhbHVlKiB2YWx1ZXMgPSBuZXcganZhbHVlW3BhcmFtZXRlckNvdW50XTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlckNvdW50OyBpKyspIHsKKyAgICAgICAgdmFsdWVzW2ldLmkgPSBpbnRWYWx1ZXNbaV07CisgICAgfQorICAgIGVudi0+Q2FsbFZvaWRNZXRob2RBKHRhcmdldCwgbWV0aG9kSUQsIHZhbHVlcyk7CisgICAgZGVsZXRlW10gdmFsdWVzOworICAgIGVudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoYXJnLCBpbnRWYWx1ZXMsIEpOSV9BQk9SVCk7Cit9CisKIHN0YXRpYyBKTklOYXRpdmVNZXRob2QgZ01ldGhvZHNbXSA9IHsKICAgICB7ICAgIm5HZXRJbnRNZXRob2QiLCAiKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7KUkiLAogICAgICAgICAgICAgKHZvaWQqKWFuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyX2dldEludE1ldGhvZCB9LAogICAgIHsgICAibkdldEZsb2F0TWV0aG9kIiwgIihMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvU3RyaW5nOylJIiwKICAgICAgICAgICAgICh2b2lkKilhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9nZXRGbG9hdE1ldGhvZCB9LAorICAgIHsgICAibkdldE11bHRpcGxlRmxvYXRNZXRob2QiLCAiKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7SSlJIiwKKyAgICAgICAgICAgICh2b2lkKilhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9nZXRNdWx0aXBsZUZsb2F0TWV0aG9kIH0sCisgICAgeyAgICJuR2V0TXVsdGlwbGVJbnRNZXRob2QiLCAiKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7SSlJIiwKKyAgICAgICAgICAgICh2b2lkKilhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9nZXRNdWx0aXBsZUludE1ldGhvZCB9LAogICAgIHsgICAibkNhbGxJbnRNZXRob2QiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0lJKVYiLAogICAgICAgICAgICAgKHZvaWQqKWFuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyX2NhbGxJbnRNZXRob2QgfSwKICAgICB7ICAgIm5DYWxsRmxvYXRNZXRob2QiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0lGKVYiLAotICAgICAgICAgICAgKHZvaWQqKWFuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyX2NhbGxGbG9hdE1ldGhvZCB9CisgICAgICAgICAgICAodm9pZCopYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbEZsb2F0TWV0aG9kIH0sCisgICAgeyAgICJuQ2FsbFR3b0Zsb2F0TWV0aG9kIiwgIihMamF2YS9sYW5nL09iamVjdDtJRkYpViIsCisgICAgICAgICAgICAodm9pZCopYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbFR3b0Zsb2F0TWV0aG9kIH0sCisgICAgeyAgICJuQ2FsbEZvdXJGbG9hdE1ldGhvZCIsICIoTGphdmEvbGFuZy9PYmplY3Q7SUZGRkYpViIsCisgICAgICAgICAgICAodm9pZCopYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbEZvdXJGbG9hdE1ldGhvZCB9LAorICAgIHsgICAibkNhbGxNdWx0aXBsZUZsb2F0TWV0aG9kIiwgIihMamF2YS9sYW5nL09iamVjdDtJW0YpViIsCisgICAgICAgICAgICAodm9pZCopYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbE11bHRpcGxlRmxvYXRNZXRob2QgfSwKKyAgICB7ICAgIm5DYWxsVHdvSW50TWV0aG9kIiwgIihMamF2YS9sYW5nL09iamVjdDtJSUkpViIsCisgICAgICAgICAgICAodm9pZCopYW5kcm9pZF9hbmltYXRpb25fUHJvcGVydHlWYWx1ZXNIb2xkZXJfY2FsbFR3b0ludE1ldGhvZCB9LAorICAgIHsgICAibkNhbGxGb3VySW50TWV0aG9kIiwgIihMamF2YS9sYW5nL09iamVjdDtJSUlJSSlWIiwKKyAgICAgICAgICAgICh2b2lkKilhbmRyb2lkX2FuaW1hdGlvbl9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9jYWxsRm91ckludE1ldGhvZCB9LAorICAgIHsgICAibkNhbGxNdWx0aXBsZUludE1ldGhvZCIsICIoTGphdmEvbGFuZy9PYmplY3Q7SVtJKVYiLAorICAgICAgICAgICAgKHZvaWQqKWFuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyX2NhbGxNdWx0aXBsZUludE1ldGhvZCB9LAogfTsKIAogaW50IHJlZ2lzdGVyX2FuZHJvaWRfYW5pbWF0aW9uX1Byb3BlcnR5VmFsdWVzSG9sZGVyKEpOSUVudiogZW52KQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF9tZWRpYV9BdWRpb1JlY29yZC5jcHAgYi9jb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvUmVjb3JkLmNwcAppbmRleCAxYzQzY2M1Li4wM2Y5NGI3IDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvUmVjb3JkLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvUmVjb3JkLmNwcApAQCAtMTc1LDcgKzE3NSw3IEBACiAgICAgLy8gY29tcGFyZSB0aGUgZm9ybWF0IGFnYWluc3QgdGhlIEphdmEgY29uc3RhbnRzCiAgICAgaWYgKChhdWRpb0Zvcm1hdCAhPSBFTkNPRElOR19QQ01fMTZCSVQpCiAgICAgICAgICYmIChhdWRpb0Zvcm1hdCAhPSBFTkNPRElOR19QQ01fOEJJVCkpIHsKLSAgICAgICAgQUxPR0UoIkVycm9yIGNyZWF0aW5nIEF1ZGlvUmVjb3JkOiB1bnN1cHBvcnRlZCBhdWRpbyBmb3JtYXQuIik7CisgICAgICAgIEFMT0dFKCJFcnJvciBjcmVhdGluZyBBdWRpb1JlY29yZDogdW5zdXBwb3J0ZWQgYXVkaW8gZm9ybWF0ICVkLiIsIGF1ZGlvRm9ybWF0KTsKICAgICAgICAgcmV0dXJuIEFVRElPUkVDT1JEX0VSUk9SX1NFVFVQX0lOVkFMSURGT1JNQVQ7CiAgICAgfQogCkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICBzaXplX3QgZnJhbWVDb3VudCA9IGJ1ZmZTaXplSW5CeXRlcyAvIGZyYW1lU2l6ZTsKIAogICAgIGlmICgodWludDMyX3Qoc291cmNlKSA+PSBBVURJT19TT1VSQ0VfQ05UKSAmJiAodWludDMyX3Qoc291cmNlKSAhPSBBVURJT19TT1VSQ0VfSE9UV09SRCkpIHsKLSAgICAgICAgQUxPR0UoIkVycm9yIGNyZWF0aW5nIEF1ZGlvUmVjb3JkOiB1bmtub3duIHNvdXJjZS4iKTsKKyAgICAgICAgQUxPR0UoIkVycm9yIGNyZWF0aW5nIEF1ZGlvUmVjb3JkOiB1bmtub3duIHNvdXJjZSAlZC4iLCBzb3VyY2UpOwogICAgICAgICByZXR1cm4gQVVESU9SRUNPUkRfRVJST1JfU0VUVVBfSU5WQUxJRFNPVVJDRTsKICAgICB9CiAKQEAgLTIzNyw4ICsyMzcsMTAgQEAKICAgICAgICAgdHJ1ZSwgICAgICAgICAgLy8gdGhyZWFkQ2FuQ2FsbEphdmEKICAgICAgICAgc2Vzc2lvbklkKTsKIAotICAgIGlmIChscFJlY29yZGVyLT5pbml0Q2hlY2soKSAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HRSgiRXJyb3IgY3JlYXRpbmcgQXVkaW9SZWNvcmQgaW5zdGFuY2U6IGluaXRpYWxpemF0aW9uIGNoZWNrIGZhaWxlZC4iKTsKKyAgICBjb25zdCBzdGF0dXNfdCBzdGF0dXMgPSBscFJlY29yZGVyLT5pbml0Q2hlY2soKTsKKyAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SKSB7CisgICAgICAgIEFMT0dFKCJFcnJvciBjcmVhdGluZyBBdWRpb1JlY29yZCBpbnN0YW5jZTogaW5pdGlhbGl6YXRpb24gY2hlY2sgZmFpbGVkIHdpdGggc3RhdHVzICVkLiIsCisgICAgICAgICAgICAgICAgc3RhdHVzKTsKICAgICAgICAgZ290byBuYXRpdmVfaW5pdF9mYWlsdXJlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF9uZXRfd2lmaV9XaWZpTmF0aXZlLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfbmV0X3dpZmlfV2lmaU5hdGl2ZS5jcHAKaW5kZXggNmUxMTE5Mi4uNGJlY2ZiNiAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZF9uZXRfd2lmaV9XaWZpTmF0aXZlLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX25ldF93aWZpX1dpZmlOYXRpdmUuY3BwCkBAIC0xNjcsNyArMTY3LDcgQEAKIAogaW50IHJlZ2lzdGVyX2FuZHJvaWRfbmV0X3dpZmlfV2lmaU5hdGl2ZShKTklFbnYqIGVudikgewogICAgIHJldHVybiBBbmRyb2lkUnVudGltZTo6cmVnaXN0ZXJOYXRpdmVNZXRob2RzKGVudiwKLSAgICAgICAgICAgICJhbmRyb2lkL25ldC93aWZpL1dpZmlOYXRpdmUiLCBnV2lmaU1ldGhvZHMsIE5FTEVNKGdXaWZpTWV0aG9kcykpOworICAgICAgICAgICAgImNvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlOYXRpdmUiLCBnV2lmaU1ldGhvZHMsIE5FTEVNKGdXaWZpTWV0aG9kcykpOwogfQogCiB9OyAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF91dGlsX1Byb2Nlc3MuY3BwIGIvY29yZS9qbmkvYW5kcm9pZF91dGlsX1Byb2Nlc3MuY3BwCmluZGV4IDYwMTk3NWEuLmNiZWQ5OWYgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9Qcm9jZXNzLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX3V0aWxfUHJvY2Vzcy5jcHAKQEAgLTM0NCwyMyArMzQ0LDYgQEAKICAgICByZXR1cm4gcHJpOwogfQogCi1qYm9vbGVhbiBhbmRyb2lkX29zX1Byb2Nlc3Nfc2V0T29tQWRqKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IHBpZCwgamludCBhZGopCi17Ci0jaWZkZWYgSEFWRV9PT01fQURKCi0gICAgY2hhciB0ZXh0WzY0XTsKLSAgICBzcHJpbnRmKHRleHQsICIvcHJvYy8lZC9vb21fYWRqIiwgcGlkKTsKLSAgICBpbnQgZmQgPSBvcGVuKHRleHQsIE9fV1JPTkxZKTsKLSAgICBpZiAoZmQgPj0gMCkgewotICAgICAgICBzcHJpbnRmKHRleHQsICIlZCIsIGFkaik7Ci0gICAgICAgIHdyaXRlKGZkLCB0ZXh0LCBzdHJsZW4odGV4dCkpOwotICAgICAgICBjbG9zZShmZCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBqYm9vbGVhbiBhbmRyb2lkX29zX1Byb2Nlc3Nfc2V0U3dhcHBpbmVzcyhKTklFbnYgKmVudiwgam9iamVjdCBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgcGlkLCBqYm9vbGVhbiBpc19pbmNyZWFzZWQpCiB7CkBAIC0xMDIzLDcgKzEwMDYsNiBAQAogICAgIHsic2V0VGhyZWFkR3JvdXAiLCAgICAgICIoSUkpViIsICh2b2lkKilhbmRyb2lkX29zX1Byb2Nlc3Nfc2V0VGhyZWFkR3JvdXB9LAogICAgIHsic2V0UHJvY2Vzc0dyb3VwIiwgICAgICIoSUkpViIsICh2b2lkKilhbmRyb2lkX29zX1Byb2Nlc3Nfc2V0UHJvY2Vzc0dyb3VwfSwKICAgICB7ImdldFByb2Nlc3NHcm91cCIsICAgICAiKEkpSSIsICh2b2lkKilhbmRyb2lkX29zX1Byb2Nlc3NfZ2V0UHJvY2Vzc0dyb3VwfSwKLSAgICB7InNldE9vbUFkaiIsICAgIihJSSlaIiwgKHZvaWQqKWFuZHJvaWRfb3NfUHJvY2Vzc19zZXRPb21BZGp9LAogICAgIHsic2V0U3dhcHBpbmVzcyIsICAgIihJWilaIiwgKHZvaWQqKWFuZHJvaWRfb3NfUHJvY2Vzc19zZXRTd2FwcGluZXNzfSwKICAgICB7InNldEFyZ1YwIiwgICAgIihMamF2YS9sYW5nL1N0cmluZzspViIsICh2b2lkKilhbmRyb2lkX29zX1Byb2Nlc3Nfc2V0QXJnVjB9LAogICAgIHsic2V0VWlkIiwgIihJKUkiLCAodm9pZCopYW5kcm9pZF9vc19Qcm9jZXNzX3NldFVpZH0sCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfR0xFUzIwQ2FudmFzLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19HTEVTMjBDYW52YXMuY3BwCmluZGV4IGI3MjBlNzMuLjk2NGYwZDYgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19HTEVTMjBDYW52YXMuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19HTEVTMjBDYW52YXMuY3BwCkBAIC0yOTgsNyArMjk4LDcgQEAKIAogc3RhdGljIGJvb2wgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19xdWlja1JlamVjdChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKICAgICAgICAgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBqZmxvYXQgbGVmdCwgamZsb2F0IHRvcCwgamZsb2F0IHJpZ2h0LCBqZmxvYXQgYm90dG9tKSB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5xdWlja1JlamVjdE5vU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIHJldHVybiByZW5kZXJlci0+cXVpY2tSZWplY3RDb25zZXJ2YXRpdmUobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKIH0KIAogc3RhdGljIGJvb2wgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19jbGlwUmVjdEYoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCkBAIC03ODMsMTEgKzc4Myw2IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19vdXRwdXREaXNwbGF5TGlzdChKTklFbnYqIGVudiwKLSAgICAgICAgam9iamVjdCBjbGF6eiwgT3BlbkdMUmVuZGVyZXIqIHJlbmRlcmVyLCBEaXNwbGF5TGlzdCogZGlzcGxheUxpc3QpIHsKLSAgICByZW5kZXJlci0+b3V0cHV0RGlzcGxheUxpc3QoZGlzcGxheUxpc3QpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBMYXllcnMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExMDMsNyArMTA5OCw2IEBACiAgICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZ2V0Q2xpcEJvdW5kcyB9LAogCiAgICAgeyAibkdldERpc3BsYXlMaXN0IiwgICAgICAgICAiKElJKUkiLCAgICAgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMRVMyMENhbnZhc19nZXREaXNwbGF5TGlzdCB9LAotICAgIHsgIm5PdXRwdXREaXNwbGF5TGlzdCIsICAgICAgIihJSSlWIiwgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfb3V0cHV0RGlzcGxheUxpc3QgfSwKICAgICB7ICJuRHJhd0Rpc3BsYXlMaXN0IiwgICAgICAgICIoSUlMYW5kcm9pZC9ncmFwaGljcy9SZWN0O0kpSSIsCiAgICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBDYW52YXNfZHJhd0Rpc3BsYXlMaXN0IH0sCiAKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdC5jcHAgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfR0xFUzIwRGlzcGxheUxpc3QuY3BwCmluZGV4IDRjZTJlMjQuLmQ2M2E0MTAgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdC5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0LmNwcApAQCAtNjAsNiArNjAsMTEgQEAKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9vdXRwdXQoSk5JRW52KiBlbnYsCisgICAgICAgIGpvYmplY3QgY2xhenosIERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCkgeworICAgIGRpc3BsYXlMaXN0LT5vdXRwdXQoKTsKK30KKwogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0dMRVMyMERpc3BsYXlMaXN0X2Rlc3Ryb3lEaXNwbGF5TGlzdChKTklFbnYqIGVudiwKICAgICAgICAgam9iamVjdCBjbGF6eiwgRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0KSB7CiAgICAgRGlzcGxheUxpc3Q6OmRlc3Ryb3lEaXNwbGF5TGlzdERlZmVycmVkKGRpc3BsYXlMaXN0KTsKQEAgLTMwMyw2ICszMDgsNyBAQAogICAgIHsgIm5HZXREaXNwbGF5TGlzdFNpemUiLCAgICIoSSlJIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9nZXREaXNwbGF5TGlzdFNpemUgfSwKICAgICB7ICJuU2V0RGlzcGxheUxpc3ROYW1lIiwgICAiKElMamF2YS9sYW5nL1N0cmluZzspViIsCiAgICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXREaXNwbGF5TGlzdE5hbWUgfSwKKyAgICB7ICJuT3V0cHV0IiwgICAgICAgICAgICAgICAiKEkpViIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9vdXRwdXQgfSwKIAogICAgIHsgIm5SZXNldCIsICAgICAgICAgICAgICAgICIoSSlWIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9yZXNldCB9LAogICAgIHsgIm5TZXRDYWNoaW5nIiwgICAgICAgICAgICIoSVopViIsICAodm9pZCopIGFuZHJvaWRfdmlld19HTEVTMjBEaXNwbGF5TGlzdF9zZXRDYWNoaW5nIH0sCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfR0xSZW5kZXJlci5jcHAgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfR0xSZW5kZXJlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmOTNkMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19HTFJlbmRlcmVyLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiR0xSZW5kZXJlciIKKworI2luY2x1ZGUgImpuaS5oIgorI2luY2x1ZGUgPG5hdGl2ZWhlbHBlci9KTklIZWxwLmg+CisjaW5jbHVkZSA8YW5kcm9pZF9ydW50aW1lL0FuZHJvaWRSdW50aW1lLmg+CisKKyNpbmNsdWRlIDxFR0wvZWdsLmg+CisjaW5jbHVkZSA8RUdML2VnbGV4dC5oPgorI2luY2x1ZGUgPEVHTC9lZ2xfY2FjaGUuaD4KKworI2luY2x1ZGUgPHV0aWxzL1RpbWVycy5oPgorCisjaW5jbHVkZSA8Q2FjaGVzLmg+CisjaW5jbHVkZSA8RXh0ZW5zaW9ucy5oPgorCisjaWZkZWYgVVNFX09QRU5HTF9SRU5ERVJFUgorICAgIEVHTEFQSSB2b2lkIEVHTEFQSUVOVFJZIGVnbEJlZ2luRnJhbWUoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSk7CisjZW5kaWYKKworbmFtZXNwYWNlIGFuZHJvaWQgeworCisvKioKKyAqIE5vdGU6IE9wZW5HTFJlbmRlcmVyIEpOSSBsYXllciBpcyBnZW5lcmF0ZWQgYW5kIGNvbXBpbGVkIG9ubHkgb24gc3VwcG9ydGVkCisgKiAgICAgICBkZXZpY2VzLiBUaGlzIG1lYW5zIGFsbCB0aGUgbG9naWMgbXVzdCBiZSBjb21waWxlZCBvbmx5IHdoZW4gdGhlCisgKiAgICAgICBwcmVwcm9jZXNzb3IgdmFyaWFibGUgVVNFX09QRU5HTF9SRU5ERVJFUiBpcyBkZWZpbmVkLgorICovCisjaWZkZWYgVVNFX09QRU5HTF9SRU5ERVJFUgorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEZWZpbmVzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIERlYnVnCisjZGVmaW5lIERFQlVHX1JFTkRFUkVSIDAKKworLy8gRGVidWcKKyNpZiBERUJVR19SRU5ERVJFUgorICAgICNkZWZpbmUgUkVOREVSRVJfTE9HRCguLi4pIEFMT0dEKF9fVkFfQVJHU19fKQorI2Vsc2UKKyAgICAjZGVmaW5lIFJFTkRFUkVSX0xPR0QoLi4uKQorI2VuZGlmCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFN1cmZhY2UgYW5kIGRpc3BsYXkgbWFuYWdlbWVudAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgamJvb2xlYW4gYW5kcm9pZF92aWV3X0dMUmVuZGVyZXJfcHJlc2VydmVCYWNrQnVmZmVyKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6KSB7CisgICAgRUdMRGlzcGxheSBkaXNwbGF5ID0gZWdsR2V0Q3VycmVudERpc3BsYXkoKTsKKyAgICBFR0xTdXJmYWNlIHN1cmZhY2UgPSBlZ2xHZXRDdXJyZW50U3VyZmFjZShFR0xfRFJBVyk7CisKKyAgICBlZ2xHZXRFcnJvcigpOworICAgIGVnbFN1cmZhY2VBdHRyaWIoZGlzcGxheSwgc3VyZmFjZSwgRUdMX1NXQVBfQkVIQVZJT1IsIEVHTF9CVUZGRVJfUFJFU0VSVkVEKTsKKworICAgIEVHTGludCBlcnJvciA9IGVnbEdldEVycm9yKCk7CisgICAgaWYgKGVycm9yICE9IEVHTF9TVUNDRVNTKSB7CisgICAgICAgIFJFTkRFUkVSX0xPR0QoIkNvdWxkIG5vdCBlbmFibGUgYnVmZmVyIHByZXNlcnZlZCBzd2FwIGJlaGF2aW9yICgleCkiLCBlcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yID09IEVHTF9TVUNDRVNTOworfQorCitzdGF0aWMgamJvb2xlYW4gYW5kcm9pZF92aWV3X0dMUmVuZGVyZXJfaXNCYWNrQnVmZmVyUHJlc2VydmVkKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6KSB7CisgICAgRUdMRGlzcGxheSBkaXNwbGF5ID0gZWdsR2V0Q3VycmVudERpc3BsYXkoKTsKKyAgICBFR0xTdXJmYWNlIHN1cmZhY2UgPSBlZ2xHZXRDdXJyZW50U3VyZmFjZShFR0xfRFJBVyk7CisgICAgRUdMaW50IHZhbHVlOworCisgICAgZWdsR2V0RXJyb3IoKTsKKyAgICBlZ2xRdWVyeVN1cmZhY2UoZGlzcGxheSwgc3VyZmFjZSwgRUdMX1NXQVBfQkVIQVZJT1IsICZ2YWx1ZSk7CisKKyAgICBFR0xpbnQgZXJyb3IgPSBlZ2xHZXRFcnJvcigpOworICAgIGlmIChlcnJvciAhPSBFR0xfU1VDQ0VTUykgeworICAgICAgICBSRU5ERVJFUl9MT0dEKCJDb3VsZCBub3QgcXVlcnkgYnVmZmVyIHByZXNlcnZlZCBzd2FwIGJlaGF2aW9yICgleCkiLCBlcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yID09IEVHTF9TVUNDRVNTICYmIHZhbHVlID09IEVHTF9CVUZGRVJfUFJFU0VSVkVEOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUcmFjaW5nIGFuZCBkZWJ1Z2dpbmcKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIGJvb2wgYW5kcm9pZF92aWV3X0dMUmVuZGVyZXJfbG9hZFByb3BlcnRpZXMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenopIHsKKyAgICBpZiAodWlyZW5kZXJlcjo6Q2FjaGVzOjpoYXNJbnN0YW5jZSgpKSB7CisgICAgICAgIHJldHVybiB1aXJlbmRlcmVyOjpDYWNoZXM6OmdldEluc3RhbmNlKCkuaW5pdFByb3BlcnRpZXMoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xSZW5kZXJlcl9iZWdpbkZyYW1lKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAorICAgICAgICBqaW50QXJyYXkgc2l6ZSkgeworCisgICAgRUdMRGlzcGxheSBkaXNwbGF5ID0gZWdsR2V0Q3VycmVudERpc3BsYXkoKTsKKyAgICBFR0xTdXJmYWNlIHN1cmZhY2UgPSBlZ2xHZXRDdXJyZW50U3VyZmFjZShFR0xfRFJBVyk7CisKKyAgICBpZiAoc2l6ZSkgeworICAgICAgICBFR0xpbnQgdmFsdWU7CisgICAgICAgIGppbnQqIHN0b3JhZ2UgPSBlbnYtPkdldEludEFycmF5RWxlbWVudHMoc2l6ZSwgTlVMTCk7CisKKyAgICAgICAgZWdsUXVlcnlTdXJmYWNlKGRpc3BsYXksIHN1cmZhY2UsIEVHTF9XSURUSCwgJnZhbHVlKTsKKyAgICAgICAgc3RvcmFnZVswXSA9IHZhbHVlOworCisgICAgICAgIGVnbFF1ZXJ5U3VyZmFjZShkaXNwbGF5LCBzdXJmYWNlLCBFR0xfSEVJR0hULCAmdmFsdWUpOworICAgICAgICBzdG9yYWdlWzFdID0gdmFsdWU7CisKKyAgICAgICAgZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhzaXplLCBzdG9yYWdlLCAwKTsKKyAgICB9CisKKyAgICBlZ2xCZWdpbkZyYW1lKGRpc3BsYXksIHN1cmZhY2UpOworfQorCitzdGF0aWMgamxvbmcgYW5kcm9pZF92aWV3X0dMUmVuZGVyZXJfZ2V0U3lzdGVtVGltZShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eikgeworICAgIGlmICh1aXJlbmRlcmVyOjpFeHRlbnNpb25zOjpnZXRJbnN0YW5jZSgpLmhhc052U3lzdGVtVGltZSgpKSB7CisgICAgICAgIHJldHVybiBlZ2xHZXRTeXN0ZW1UaW1lTlYoKTsKKyAgICB9CisgICAgcmV0dXJuIHN5c3RlbVRpbWUoU1lTVEVNX1RJTUVfTU9OT1RPTklDKTsKK30KKworI2VuZGlmIC8vIFVTRV9PUEVOR0xfUkVOREVSRVIKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU2hhZGVycworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfR0xSZW5kZXJlcl9zZXR1cFNoYWRlcnNEaXNrQ2FjaGUoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCisgICAgICAgIGpzdHJpbmcgZGlza0NhY2hlUGF0aCkgeworCisgICAgY29uc3QgY2hhciogY2FjaGVBcnJheSA9IGVudi0+R2V0U3RyaW5nVVRGQ2hhcnMoZGlza0NhY2hlUGF0aCwgTlVMTCk7CisgICAgZWdsX2NhY2hlX3Q6OmdldCgpLT5zZXRDYWNoZUZpbGVuYW1lKGNhY2hlQXJyYXkpOworICAgIGVudi0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGRpc2tDYWNoZVBhdGgsIGNhY2hlQXJyYXkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBKTkkgR2x1ZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjb25zdCBjaGFyKiBjb25zdCBrQ2xhc3NQYXRoTmFtZSA9ICJhbmRyb2lkL3ZpZXcvR0xSZW5kZXJlciI7CisKK3N0YXRpYyBKTklOYXRpdmVNZXRob2QgZ01ldGhvZHNbXSA9IHsKKyNpZmRlZiBVU0VfT1BFTkdMX1JFTkRFUkVSCisgICAgeyAiaXNCYWNrQnVmZmVyUHJlc2VydmVkIiwgIigpWiIsICAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xSZW5kZXJlcl9pc0JhY2tCdWZmZXJQcmVzZXJ2ZWQgfSwKKyAgICB7ICJwcmVzZXJ2ZUJhY2tCdWZmZXIiLCAgICAiKClaIiwgICAodm9pZCopIGFuZHJvaWRfdmlld19HTFJlbmRlcmVyX3ByZXNlcnZlQmFja0J1ZmZlciB9LAorICAgIHsgImxvYWRQcm9wZXJ0aWVzIiwgICAgICAgICIoKVoiLCAgICh2b2lkKikgYW5kcm9pZF92aWV3X0dMUmVuZGVyZXJfbG9hZFByb3BlcnRpZXMgfSwKKworICAgIHsgImJlZ2luRnJhbWUiLCAgICAgICAgICAgICIoW0kpViIsICh2b2lkKikgYW5kcm9pZF92aWV3X0dMUmVuZGVyZXJfYmVnaW5GcmFtZSB9LAorCisgICAgeyAiZ2V0U3lzdGVtVGltZSIsICAgICAgICAgIigpSiIsICAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xSZW5kZXJlcl9nZXRTeXN0ZW1UaW1lIH0sCisjZW5kaWYKKworICAgIHsgInNldHVwU2hhZGVyc0Rpc2tDYWNoZSIsICIoTGphdmEvbGFuZy9TdHJpbmc7KVYiLAorICAgICAgICAgICAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfR0xSZW5kZXJlcl9zZXR1cFNoYWRlcnNEaXNrQ2FjaGUgfSwKK307CisKK2ludCByZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfR0xSZW5kZXJlcihKTklFbnYqIGVudikgeworICAgIHJldHVybiBBbmRyb2lkUnVudGltZTo6cmVnaXN0ZXJOYXRpdmVNZXRob2RzKGVudiwga0NsYXNzUGF0aE5hbWUsIGdNZXRob2RzLCBORUxFTShnTWV0aG9kcykpOworfQorCit9OwpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X0hhcmR3YXJlUmVuZGVyZXIuY3BwIGIvY29yZS9qbmkvYW5kcm9pZF92aWV3X0hhcmR3YXJlUmVuZGVyZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzlmYmUyLi4wMDAwMDAwCi0tLSBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19IYXJkd2FyZVJlbmRlcmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJIYXJkd2FyZVJlbmRlcmVyIgotCi0jaW5jbHVkZSAiam5pLmgiCi0jaW5jbHVkZSA8bmF0aXZlaGVscGVyL0pOSUhlbHAuaD4KLSNpbmNsdWRlIDxhbmRyb2lkX3J1bnRpbWUvQW5kcm9pZFJ1bnRpbWUuaD4KLQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+Ci0jaW5jbHVkZSA8RUdML2VnbF9jYWNoZS5oPgotCi0jaW5jbHVkZSA8dXRpbHMvVGltZXJzLmg+Ci0KLSNpbmNsdWRlIDxDYWNoZXMuaD4KLSNpbmNsdWRlIDxFeHRlbnNpb25zLmg+Ci0KLSNpZmRlZiBVU0VfT1BFTkdMX1JFTkRFUkVSCi0gICAgRUdMQVBJIHZvaWQgRUdMQVBJRU5UUlkgZWdsQmVnaW5GcmFtZShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLS8qKgotICogTm90ZTogT3BlbkdMUmVuZGVyZXIgSk5JIGxheWVyIGlzIGdlbmVyYXRlZCBhbmQgY29tcGlsZWQgb25seSBvbiBzdXBwb3J0ZWQKLSAqICAgICAgIGRldmljZXMuIFRoaXMgbWVhbnMgYWxsIHRoZSBsb2dpYyBtdXN0IGJlIGNvbXBpbGVkIG9ubHkgd2hlbiB0aGUKLSAqICAgICAgIHByZXByb2Nlc3NvciB2YXJpYWJsZSBVU0VfT1BFTkdMX1JFTkRFUkVSIGlzIGRlZmluZWQuCi0gKi8KLSNpZmRlZiBVU0VfT1BFTkdMX1JFTkRFUkVSCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERlZmluZXMKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gRGVidWcKLSNkZWZpbmUgREVCVUdfUkVOREVSRVIgMAotCi0vLyBEZWJ1ZwotI2lmIERFQlVHX1JFTkRFUkVSCi0gICAgI2RlZmluZSBSRU5ERVJFUl9MT0dEKC4uLikgQUxPR0QoX19WQV9BUkdTX18pCi0jZWxzZQotICAgICNkZWZpbmUgUkVOREVSRVJfTE9HRCguLi4pCi0jZW5kaWYKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU3VyZmFjZSBhbmQgZGlzcGxheSBtYW5hZ2VtZW50Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyBqYm9vbGVhbiBhbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlcl9wcmVzZXJ2ZUJhY2tCdWZmZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenopIHsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBlZ2xHZXRDdXJyZW50RGlzcGxheSgpOwotICAgIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTF9EUkFXKTsKLQotICAgIGVnbEdldEVycm9yKCk7Ci0gICAgZWdsU3VyZmFjZUF0dHJpYihkaXNwbGF5LCBzdXJmYWNlLCBFR0xfU1dBUF9CRUhBVklPUiwgRUdMX0JVRkZFUl9QUkVTRVJWRUQpOwotCi0gICAgRUdMaW50IGVycm9yID0gZWdsR2V0RXJyb3IoKTsKLSAgICBpZiAoZXJyb3IgIT0gRUdMX1NVQ0NFU1MpIHsKLSAgICAgICAgUkVOREVSRVJfTE9HRCgiQ291bGQgbm90IGVuYWJsZSBidWZmZXIgcHJlc2VydmVkIHN3YXAgYmVoYXZpb3IgKCV4KSIsIGVycm9yKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyb3IgPT0gRUdMX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBqYm9vbGVhbiBhbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlcl9pc0JhY2tCdWZmZXJQcmVzZXJ2ZWQoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenopIHsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBlZ2xHZXRDdXJyZW50RGlzcGxheSgpOwotICAgIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTF9EUkFXKTsKLSAgICBFR0xpbnQgdmFsdWU7Ci0KLSAgICBlZ2xHZXRFcnJvcigpOwotICAgIGVnbFF1ZXJ5U3VyZmFjZShkaXNwbGF5LCBzdXJmYWNlLCBFR0xfU1dBUF9CRUhBVklPUiwgJnZhbHVlKTsKLQotICAgIEVHTGludCBlcnJvciA9IGVnbEdldEVycm9yKCk7Ci0gICAgaWYgKGVycm9yICE9IEVHTF9TVUNDRVNTKSB7Ci0gICAgICAgIFJFTkRFUkVSX0xPR0QoIkNvdWxkIG5vdCBxdWVyeSBidWZmZXIgcHJlc2VydmVkIHN3YXAgYmVoYXZpb3IgKCV4KSIsIGVycm9yKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyb3IgPT0gRUdMX1NVQ0NFU1MgJiYgdmFsdWUgPT0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRyYWNpbmcgYW5kIGRlYnVnZ2luZwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgYm9vbCBhbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlcl9sb2FkUHJvcGVydGllcyhKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eikgewotICAgIGlmICh1aXJlbmRlcmVyOjpDYWNoZXM6Omhhc0luc3RhbmNlKCkpIHsKLSAgICAgICAgcmV0dXJuIHVpcmVuZGVyZXI6OkNhY2hlczo6Z2V0SW5zdGFuY2UoKS5pbml0UHJvcGVydGllcygpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19IYXJkd2FyZVJlbmRlcmVyX2JlZ2luRnJhbWUoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCi0gICAgICAgIGppbnRBcnJheSBzaXplKSB7Ci0KLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBlZ2xHZXRDdXJyZW50RGlzcGxheSgpOwotICAgIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTF9EUkFXKTsKLQotICAgIGlmIChzaXplKSB7Ci0gICAgICAgIEVHTGludCB2YWx1ZTsKLSAgICAgICAgamludCogc3RvcmFnZSA9IGVudi0+R2V0SW50QXJyYXlFbGVtZW50cyhzaXplLCBOVUxMKTsKLQotICAgICAgICBlZ2xRdWVyeVN1cmZhY2UoZGlzcGxheSwgc3VyZmFjZSwgRUdMX1dJRFRILCAmdmFsdWUpOwotICAgICAgICBzdG9yYWdlWzBdID0gdmFsdWU7Ci0KLSAgICAgICAgZWdsUXVlcnlTdXJmYWNlKGRpc3BsYXksIHN1cmZhY2UsIEVHTF9IRUlHSFQsICZ2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2VbMV0gPSB2YWx1ZTsKLQotICAgICAgICBlbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKHNpemUsIHN0b3JhZ2UsIDApOwotICAgIH0KLQotICAgIGVnbEJlZ2luRnJhbWUoZGlzcGxheSwgc3VyZmFjZSk7Ci19Ci0KLXN0YXRpYyBqbG9uZyBhbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlcl9nZXRTeXN0ZW1UaW1lKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6KSB7Ci0gICAgaWYgKHVpcmVuZGVyZXI6OkV4dGVuc2lvbnM6OmdldEluc3RhbmNlKCkuaGFzTnZTeXN0ZW1UaW1lKCkpIHsKLSAgICAgICAgcmV0dXJuIGVnbEdldFN5c3RlbVRpbWVOVigpOwotICAgIH0KLSAgICByZXR1cm4gc3lzdGVtVGltZShTWVNURU1fVElNRV9NT05PVE9OSUMpOwotfQotCi0jZW5kaWYgLy8gVVNFX09QRU5HTF9SRU5ERVJFUgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTaGFkZXJzCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19IYXJkd2FyZVJlbmRlcmVyX3NldHVwU2hhZGVyc0Rpc2tDYWNoZShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKLSAgICAgICAganN0cmluZyBkaXNrQ2FjaGVQYXRoKSB7Ci0KLSAgICBjb25zdCBjaGFyKiBjYWNoZUFycmF5ID0gZW52LT5HZXRTdHJpbmdVVEZDaGFycyhkaXNrQ2FjaGVQYXRoLCBOVUxMKTsKLSAgICBlZ2xfY2FjaGVfdDo6Z2V0KCktPnNldENhY2hlRmlsZW5hbWUoY2FjaGVBcnJheSk7Ci0gICAgZW52LT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZGlza0NhY2hlUGF0aCwgY2FjaGVBcnJheSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEpOSSBHbHVlCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNvbnN0IGNoYXIqIGNvbnN0IGtDbGFzc1BhdGhOYW1lID0gImFuZHJvaWQvdmlldy9IYXJkd2FyZVJlbmRlcmVyIjsKLQotc3RhdGljIEpOSU5hdGl2ZU1ldGhvZCBnTWV0aG9kc1tdID0gewotI2lmZGVmIFVTRV9PUEVOR0xfUkVOREVSRVIKLSAgICB7ICJuSXNCYWNrQnVmZmVyUHJlc2VydmVkIiwgIigpWiIsICAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlcl9pc0JhY2tCdWZmZXJQcmVzZXJ2ZWQgfSwKLSAgICB7ICJuUHJlc2VydmVCYWNrQnVmZmVyIiwgICAgIigpWiIsICAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlcl9wcmVzZXJ2ZUJhY2tCdWZmZXIgfSwKLSAgICB7ICJuTG9hZFByb3BlcnRpZXMiLCAgICAgICAgIigpWiIsICAgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfSGFyZHdhcmVSZW5kZXJlcl9sb2FkUHJvcGVydGllcyB9LAotCi0gICAgeyAibkJlZ2luRnJhbWUiLCAgICAgICAgICAgICIoW0kpViIsICh2b2lkKikgYW5kcm9pZF92aWV3X0hhcmR3YXJlUmVuZGVyZXJfYmVnaW5GcmFtZSB9LAotCi0gICAgeyAibkdldFN5c3RlbVRpbWUiLCAgICAgICAgICIoKUoiLCAgICh2b2lkKikgYW5kcm9pZF92aWV3X0hhcmR3YXJlUmVuZGVyZXJfZ2V0U3lzdGVtVGltZSB9LAotI2VuZGlmCi0KLSAgICB7ICJuU2V0dXBTaGFkZXJzRGlza0NhY2hlIiwgIihMamF2YS9sYW5nL1N0cmluZzspViIsCi0gICAgICAgICAgICAodm9pZCopIGFuZHJvaWRfdmlld19IYXJkd2FyZVJlbmRlcmVyX3NldHVwU2hhZGVyc0Rpc2tDYWNoZSB9LAotfTsKLQotaW50IHJlZ2lzdGVyX2FuZHJvaWRfdmlld19IYXJkd2FyZVJlbmRlcmVyKEpOSUVudiogZW52KSB7Ci0gICAgcmV0dXJuIEFuZHJvaWRSdW50aW1lOjpyZWdpc3Rlck5hdGl2ZU1ldGhvZHMoZW52LCBrQ2xhc3NQYXRoTmFtZSwgZ01ldGhvZHMsIE5FTEVNKGdNZXRob2RzKSk7Ci19Ci0KLX07CmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfVGhyZWFkZWRSZW5kZXJlci5jcHAgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfVGhyZWFkZWRSZW5kZXJlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJiNmNiNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19UaHJlYWRlZFJlbmRlcmVyLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJHTFJlbmRlcmVyIgorCisjaW5jbHVkZSAiam5pLmgiCisjaW5jbHVkZSA8bmF0aXZlaGVscGVyL0pOSUhlbHAuaD4KKyNpbmNsdWRlIDxhbmRyb2lkX3J1bnRpbWUvQW5kcm9pZFJ1bnRpbWUuaD4KKworI2luY2x1ZGUgPHJlbmRlcnRocmVhZC9SZW5kZXJUYXNrLmg+CisjaW5jbHVkZSA8cmVuZGVydGhyZWFkL1JlbmRlclRocmVhZC5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKKyNpZmRlZiBVU0VfT1BFTkdMX1JFTkRFUkVSCisKK25hbWVzcGFjZSBSVCA9IGFuZHJvaWQ6OnVpcmVuZGVyZXI6OnJlbmRlcnRocmVhZDsKKworc3RhdGljIGptZXRob2RJRCBnUnVubmFibGVNZXRob2Q7CisKK2NsYXNzIEphdmFUYXNrIDogcHVibGljIFJUOjpSZW5kZXJUYXNrIHsKK3B1YmxpYzoKKyAgICBKYXZhVGFzayhKTklFbnYqIGVudiwgam9iamVjdCBqcnVubmFibGUpIHsKKyAgICAgICAgZW52LT5HZXRKYXZhVk0oJm1WbSk7CisgICAgICAgIG1SdW5uYWJsZSA9IGVudi0+TmV3R2xvYmFsUmVmKGpydW5uYWJsZSk7CisgICAgfQorCisgICAgdmlydHVhbCB+SmF2YVRhc2soKSB7CisgICAgICAgIGVudigpLT5EZWxldGVHbG9iYWxSZWYobVJ1bm5hYmxlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgeworICAgICAgICBlbnYoKS0+Q2FsbFZvaWRNZXRob2QobVJ1bm5hYmxlLCBnUnVubmFibGVNZXRob2QpOworICAgIH07CisKK3ByaXZhdGU6CisgICAgSk5JRW52KiBlbnYoKSB7CisgICAgICAgIEpOSUVudiogZW52OworICAgICAgICBpZiAobVZtLT5HZXRFbnYocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZlbnYpLCBKTklfVkVSU0lPTl8xXzYpICE9IEpOSV9PSykgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGVudjsKKyAgICB9CisKKyAgICBKYXZhVk0qIG1WbTsKKyAgICBqb2JqZWN0IG1SdW5uYWJsZTsKK307CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19UaHJlYWRlZFJlbmRlcmVyX3Bvc3RUb1JlbmRlclRocmVhZChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKKyAgICAgICAgam9iamVjdCBqcnVubmFibGUpIHsKKyAgICBSVDo6UmVuZGVyVGFzayogdGFzayA9IG5ldyBKYXZhVGFzayhlbnYsIGpydW5uYWJsZSk7CisgICAgUlQ6OlJlbmRlclRocmVhZDo6Z2V0SW5zdGFuY2UoKS5xdWV1ZSh0YXNrKTsKK30KKworI2VuZGlmCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEpOSSBHbHVlCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NvbnN0IGNoYXIqIGNvbnN0IGtDbGFzc1BhdGhOYW1lID0gImFuZHJvaWQvdmlldy9UaHJlYWRlZFJlbmRlcmVyIjsKKworc3RhdGljIEpOSU5hdGl2ZU1ldGhvZCBnTWV0aG9kc1tdID0geworI2lmZGVmIFVTRV9PUEVOR0xfUkVOREVSRVIKKyAgICB7ICJwb3N0VG9SZW5kZXJUaHJlYWQiLCAiKExqYXZhL2xhbmcvUnVubmFibGU7KVYiLCAgICh2b2lkKikgYW5kcm9pZF92aWV3X1RocmVhZGVkUmVuZGVyZXJfcG9zdFRvUmVuZGVyVGhyZWFkIH0sCisjZW5kaWYKK307CisKK2ludCByZWdpc3Rlcl9hbmRyb2lkX3ZpZXdfVGhyZWFkZWRSZW5kZXJlcihKTklFbnYqIGVudikgeworI2lmZGVmIFVTRV9PUEVOR0xfUkVOREVSRVIKKyAgICBqY2xhc3MgY2xzID0gZW52LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9SdW5uYWJsZSIpOworICAgIGdSdW5uYWJsZU1ldGhvZCA9IGVudi0+R2V0TWV0aG9kSUQoY2xzLCAicnVuIiwgIigpViIpOworICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoY2xzKTsKKyNlbmRpZgorICAgIHJldHVybiBBbmRyb2lkUnVudGltZTo6cmVnaXN0ZXJOYXRpdmVNZXRob2RzKGVudiwga0NsYXNzUGF0aE5hbWUsIGdNZXRob2RzLCBORUxFTShnTWV0aG9kcykpOworfQorCit9OyAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvY29yZS9yZXMvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL2NvcmUvcmVzL0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggZTU0NjExNy4uYzkyM2UxNCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvQW5kcm9pZE1hbmlmZXN0LnhtbAorKysgYi9jb3JlL3Jlcy9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0yMTAyLDYgKzIxMDIsMTMgQEAKICAgICAgICAgYW5kcm9pZDpkZXNjcmlwdGlvbj0iQHN0cmluZy9wZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiCiAgICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzaWduYXR1cmV8c3lzdGVtIiAvPgogCisgICAgPCEtLSBBbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gdXNlIElucHV0RmxpbmdlcidzIGxvdyBsZXZlbCBmZWF0dXJlcy4KKyAgICA8cD5Ob3QgZm9yIHVzZSBieSB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbnMuIC0tPgorICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19JTlBVVF9GTElOR0VSIgorICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL3Blcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIgorICAgICAgICBhbmRyb2lkOmRlc2NyaXB0aW9uPSJAc3RyaW5nL3Blcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIKKyAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InNpZ25hdHVyZSIgLz4KKwogICAgIDwhLS0gQWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIGNvbmZpZ3VyZSBhbmQgY29ubmVjdCB0byBXaWZpIGRpc3BsYXlzCiAgICAgICAgICBAaGlkZSAtLT4KICAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5DT05GSUdVUkVfV0lGSV9ESVNQTEFZIgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLWhkcGkvbm90aWZ5X3BhbmVsX25vdGlmaWNhdGlvbl9pY29uX2JnLnBuZyBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1oZHBpL25vdGlmeV9wYW5lbF9ub3RpZmljYXRpb25faWNvbl9iZy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMzdhMjIuLjAwMDAwMDAKLS0tIGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLWhkcGkvbm90aWZ5X3BhbmVsX25vdGlmaWNhdGlvbl9pY29uX2JnLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1oZHBpL3Njcm9sbGJhcl9oYW5kbGVfYWNjZWxlcmF0ZWRfYW5pbTIuOS5wbmcgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtaGRwaS9zY3JvbGxiYXJfaGFuZGxlX2FjY2VsZXJhdGVkX2FuaW0yLjkucG5nCmluZGV4IDZlZGRjM2YuLmZiOWU3YWEgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1oZHBpL3Njcm9sbGJhcl9oYW5kbGVfYWNjZWxlcmF0ZWRfYW5pbTIuOS5wbmcKKysrIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlLWhkcGkvc2Nyb2xsYmFyX2hhbmRsZV9hY2NlbGVyYXRlZF9hbmltMi45LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtbGRwaS9zY3JvbGxiYXJfaGFuZGxlX2FjY2VsZXJhdGVkX2FuaW0yLjkucG5nIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlLWxkcGkvc2Nyb2xsYmFyX2hhbmRsZV9hY2NlbGVyYXRlZF9hbmltMi45LnBuZwppbmRleCAwNTYyYzAzLi5hNGNhM2UwIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtbGRwaS9zY3JvbGxiYXJfaGFuZGxlX2FjY2VsZXJhdGVkX2FuaW0yLjkucG5nCisrKyBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1sZHBpL3Njcm9sbGJhcl9oYW5kbGVfYWNjZWxlcmF0ZWRfYW5pbTIuOS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLW1kcGkvbm90aWZ5X3BhbmVsX25vdGlmaWNhdGlvbl9pY29uX2JnLnBuZyBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1tZHBpL25vdGlmeV9wYW5lbF9ub3RpZmljYXRpb25faWNvbl9iZy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyODY4NzUuLjAwMDAwMDAKLS0tIGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLW1kcGkvbm90aWZ5X3BhbmVsX25vdGlmaWNhdGlvbl9pY29uX2JnLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1tZHBpL3Njcm9sbGJhcl9oYW5kbGVfYWNjZWxlcmF0ZWRfYW5pbTIuOS5wbmcgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtbWRwaS9zY3JvbGxiYXJfaGFuZGxlX2FjY2VsZXJhdGVkX2FuaW0yLjkucG5nCmluZGV4IDc2NmU0YzAuLjZkODNiYjQgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1tZHBpL3Njcm9sbGJhcl9oYW5kbGVfYWNjZWxlcmF0ZWRfYW5pbTIuOS5wbmcKKysrIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlLW1kcGkvc2Nyb2xsYmFyX2hhbmRsZV9hY2NlbGVyYXRlZF9hbmltMi45LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUteGhkcGkvbm90aWZ5X3BhbmVsX25vdGlmaWNhdGlvbl9pY29uX2JnLnBuZyBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS14aGRwaS9ub3RpZnlfcGFuZWxfbm90aWZpY2F0aW9uX2ljb25fYmcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTI4ZTYyLi4wMDAwMDAwCi0tLSBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS14aGRwaS9ub3RpZnlfcGFuZWxfbm90aWZpY2F0aW9uX2ljb25fYmcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLXhoZHBpL3Njcm9sbGJhcl9oYW5kbGVfYWNjZWxlcmF0ZWRfYW5pbTIuOS5wbmcgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUteGhkcGkvc2Nyb2xsYmFyX2hhbmRsZV9hY2NlbGVyYXRlZF9hbmltMi45LnBuZwppbmRleCAzY2Y4NGE1Li43MDg1NmMwIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUteGhkcGkvc2Nyb2xsYmFyX2hhbmRsZV9hY2NlbGVyYXRlZF9hbmltMi45LnBuZworKysgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUteGhkcGkvc2Nyb2xsYmFyX2hhbmRsZV9hY2NlbGVyYXRlZF9hbmltMi45LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvbm90aWZ5X3BhbmVsX25vdGlmaWNhdGlvbl9pY29uX2JnX3RpbGUueG1sIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL25vdGlmeV9wYW5lbF9ub3RpZmljYXRpb25faWNvbl9iZ190aWxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEzYzM5OC4uMDAwMDAwMAotLS0gYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvbm90aWZ5X3BhbmVsX25vdGlmaWNhdGlvbl9pY29uX2JnX3RpbGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gIAotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxiaXRtYXAKLSAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDp0aWxlTW9kZT0icmVwZWF0IgotICAgIGFuZHJvaWQ6c3JjPSJAYW5kcm9pZDpkcmF3YWJsZS9ub3RpZnlfcGFuZWxfbm90aWZpY2F0aW9uX2ljb25fYmciCi0gICAgLz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQtbGFuZC90aW1lX3BpY2tlcl9ob2xvLnhtbCBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQtbGFuZC90aW1lX3BpY2tlcl9ob2xvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWNlMWVjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC1sYW5kL3RpbWVfcGlja2VyX2hvbG8ueG1sCkBAIC0wLDAgKzEsNzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisqKgorKiogQ29weXJpZ2h0IDIwMTMsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCistLT4KKworPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luTGVmdD0iQGRpbWVuL3RpbWVwaWNrZXJfbWluaW11bV9tYXJnaW5fc2lkZXMiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblJpZ2h0PSJAZGltZW4vdGltZXBpY2tlcl9taW5pbXVtX21hcmdpbl9zaWRlcyIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSJAZGltZW4vdGltZXBpY2tlcl9taW5pbXVtX21hcmdpbl90b3BfYm90dG9tIgorICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IkBkaW1lbi90aW1lcGlja2VyX21pbmltdW1fbWFyZ2luX3RvcF9ib3R0b20iPgorICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJAZGltZW4vdGltZXBpY2tlcl9sZWZ0X3NpZGVfd2lkdGgiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KKyAgICAgICAgPEZyYW1lTGF5b3V0CisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iP2FuZHJvaWQ6YXR0ci90aW1lUGlja2VySGVhZGVyQmFja2dyb3VuZENvbG9yIj4KKyAgICAgICAgICAgIDxpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgIGxheW91dD0iQGxheW91dC90aW1lX2hlYWRlcl9sYWJlbCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vdGltZXBpY2tlcl9oZWFkZXJfaGVpZ2h0IgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXIiIC8+CisgICAgICAgIDwvRnJhbWVMYXlvdXQ+CisgICAgICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2xheW91dF9idXR0b25zIgorICAgICAgICAgICAgICAgIHN0eWxlPSI/YW5kcm9pZDphdHRyL2J1dHRvbkJhclN0eWxlIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSI/YW5kcm9pZDphdHRyL3RpbWVQaWNrZXJIZWFkZXJCYWNrZ3JvdW5kQ29sb3IiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpkaXZpZGVyPSI/YW5kcm9pZDphdHRyL2RpdmlkZXJIb3Jpem9udGFsIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2hvd0RpdmlkZXJzPSJiZWdpbm5pbmciPgorICAgICAgICAgICAgPEJ1dHRvbgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2RvbmVfYnV0dG9uIgorICAgICAgICAgICAgICAgICAgICBzdHlsZT0iP2FuZHJvaWQ6YXR0ci9idXR0b25CYXJCdXR0b25TdHlsZSIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bWluSGVpZ2h0PSI0OGRwIgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZG9uZV9sYWJlbCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iQGRpbWVuL3RpbWVwaWNrZXJfZG9uZV9sYWJlbF9zaXplIiAvPgorICAgICAgICA8L0xpbmVhckxheW91dD4KKyAgICA8L0xpbmVhckxheW91dD4KKyAgICA8YW5kcm9pZC53aWRnZXQuUmFkaWFsVGltZVBpY2tlclZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcmFkaWFsX3BpY2tlciIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJAZGltZW4vdGltZXBpY2tlcl9yYWRpYWxfcGlja2VyX2RpbWVuIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXIiCisgICAgICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlSW5Ub3VjaE1vZGU9InRydWUiIC8+Cis8L0xpbmVhckxheW91dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L3RpbWVfaGVhZGVyX2xhYmVsLnhtbCBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvdGltZV9oZWFkZXJfbGFiZWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwY2I4MWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L3RpbWVfaGVhZGVyX2xhYmVsLnhtbApAQCAtMCwwICsxLDYwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorICB+IENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgIH4KKyAgfiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlCisgIC0tPgorPFJlbGF0aXZlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RpbWVfaGVhZGVyIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyIiA+CisKKyAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaG91cnMiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF90b0xlZnRPZj0iQCtpZC9zZXBhcmF0b3IiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnbkJhc2VsaW5lPSJAK2lkL3NlcGFyYXRvciIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOmF0dHIvdGltZVBpY2tlckhlYWRlclRpbWVMYWJlbFRleHRBcHBlYXJhbmNlIi8+CisKKyAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvc2VwYXJhdG9yIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iQGRpbWVuL3RpbWVwaWNrZXJfc2VwYXJhdG9yX3BhZGRpbmciCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdSaWdodD0iQGRpbWVuL3RpbWVwaWNrZXJfc2VwYXJhdG9yX3BhZGRpbmciCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9jZW50ZXJJblBhcmVudD0idHJ1ZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOmF0dHIvdGltZVBpY2tlckhlYWRlclRpbWVMYWJlbFRleHRBcHBlYXJhbmNlIgorICAgICAgICAgICAgYW5kcm9pZDppbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5PSJubyIgLz4KKworICAgIDxUZXh0VmlldworICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9taW51dGVzIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfdG9SaWdodE9mPSJAK2lkL3NlcGFyYXRvciIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduQmFzZWxpbmU9IkAraWQvc2VwYXJhdG9yIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6YXR0ci90aW1lUGlja2VySGVhZGVyVGltZUxhYmVsVGV4dEFwcGVhcmFuY2UiIC8+CisKKyAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYW1wbV9sYWJlbCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IkBkaW1lbi90aW1lcGlja2VyX2FtcG1fbGVmdF9wYWRkaW5nIgorICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nUmlnaHQ9IkBkaW1lbi90aW1lcGlja2VyX2FtcG1fbGVmdF9wYWRkaW5nIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfdG9SaWdodE9mPSJAK2lkL3NlcGFyYXRvciIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduQmFzZWxpbmU9IkAraWQvc2VwYXJhdG9yIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6YXR0ci90aW1lUGlja2VySGVhZGVyQW1QbUxhYmVsVGV4dEFwcGVhcmFuY2UiCisgICAgICAgICAgICBhbmRyb2lkOmltcG9ydGFudEZvckFjY2Vzc2liaWxpdHk9Im5vIiAvPgorCis8L1JlbGF0aXZlTGF5b3V0PgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC90aW1lX3BpY2tlcl9ob2xvLnhtbCBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvdGltZV9waWNrZXJfaG9sby54bWwKaW5kZXggYzZiN2QzYS4uMDg5MGZlNSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL2xheW91dC90aW1lX3BpY2tlcl9ob2xvLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L3RpbWVfcGlja2VyX2hvbG8ueG1sCkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDwhLS0KICoqCi0qKiBDb3B5cmlnaHQgMjAxMSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKiogQ29weXJpZ2h0IDIwMTMsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCiAqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTE3LDcwICsxNywzOCBAQAogKi8KIC0tPgogCi08IS0tIExheW91dCBvZiB0aW1lIHBpY2tlciAtLT4KLQogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDppZD0iQCtpZC90aW1lUGlja2VyTGF5b3V0IgotICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iOGRpcCIKLSAgICBhbmRyb2lkOnBhZGRpbmdFbmQ9IjhkaXAiPgotCi0gICAgPExpbmVhckxheW91dCBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpwYWRkaW5nU3RhcnQ9IjhkaXAiCi0gICAgICAgIGFuZHJvaWQ6cGFkZGluZ0VuZD0iOGRpcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXREaXJlY3Rpb249Imx0ciI+Ci0KLSAgICAgICAgPCEtLSBob3VyIC0tPgotICAgICAgICA8TnVtYmVyUGlja2VyCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2hvdXIiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKKyAgICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSIgPgorICAgIDxpbmNsdWRlCisgICAgICAgICAgICBsYXlvdXQ9IkBsYXlvdXQvdGltZV9oZWFkZXJfbGFiZWwiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vdGltZXBpY2tlcl9oZWFkZXJfaGVpZ2h0IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyIiAvPgorICAgIDxhbmRyb2lkLndpZGdldC5SYWRpYWxUaW1lUGlja2VyVmlldworICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9yYWRpYWxfcGlja2VyIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSIxNmRpcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkJvdHRvbT0iMTZkaXAiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi90aW1lcGlja2VyX3JhZGlhbF9waWNrZXJfZGltZW4iCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXIiCiAgICAgICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlSW5Ub3VjaE1vZGU9InRydWUiCi0gICAgICAgICAgICAvPgotCi0gICAgICAgIDwhLS0gZGl2aWRlciAtLT4KLSAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2RpdmlkZXIiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpmb2N1c2FibGVJblRvdWNoTW9kZT0idHJ1ZSIgLz4KKyAgICA8TGluZWFyTGF5b3V0CisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2xheW91dF9idXR0b25zIgorICAgICAgICAgICAgc3R5bGU9Ij9hbmRyb2lkOmF0dHIvYnV0dG9uQmFyU3R5bGUiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iNmRpcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iNmRpcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6aW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eT0ibm8iCi0gICAgICAgICAgICAvPgotCi0gICAgICAgIDwhLS0gbWludXRlIC0tPgotICAgICAgICA8TnVtYmVyUGlja2VyCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL21pbnV0ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iMTZkaXAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjE2ZGlwIgotICAgICAgICAgICAgYW5kcm9pZDpmb2N1c2FibGU9InRydWUiCi0gICAgICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZUluVG91Y2hNb2RlPSJ0cnVlIgotICAgICAgICAgICAgLz4KLQorICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCisgICAgICAgICAgICBhbmRyb2lkOmRpdmlkZXI9Ij9hbmRyb2lkOmF0dHIvZGl2aWRlckhvcml6b250YWwiCisgICAgICAgICAgICBhbmRyb2lkOnNob3dEaXZpZGVycz0iYmVnaW5uaW5nIj4KKyAgICAgICAgPEJ1dHRvbgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZG9uZV9idXR0b24iCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOm1pbkhlaWdodD0iNDhkcCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZG9uZV9sYWJlbCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRTaXplPSJAZGltZW4vdGltZXBpY2tlcl9kb25lX2xhYmVsX3NpemUiCisgICAgICAgICAgICAgICAgc3R5bGU9Ij9hbmRyb2lkOmF0dHIvYnV0dG9uQmFyQnV0dG9uU3R5bGUiIC8+CiAgICAgPC9MaW5lYXJMYXlvdXQ+Ci0KLSAgICA8IS0tIEFNIC8gUE0gLS0+Ci0gICAgPE51bWJlclBpY2tlcgotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FtUG0iCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjE2ZGlwIgotICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjE2ZGlwIgotICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iOGRpcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSI4ZGlwIgotICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSIKLSAgICAgICAgYW5kcm9pZDpmb2N1c2FibGVJblRvdWNoTW9kZT0idHJ1ZSIKLSAgICAgICAgLz4KLQogPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L3RpbWVfcGlja2VyLnhtbCBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvdGltZV9waWNrZXJfbGVnYWN5LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29yZS9yZXMvcmVzL2xheW91dC90aW1lX3BpY2tlci54bWwKcmVuYW1lIHRvIGNvcmUvcmVzL3Jlcy9sYXlvdXQvdGltZV9waWNrZXJfbGVnYWN5LnhtbApkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC90aW1lX3BpY2tlcl9sZWdhY3lfaG9sby54bWwgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L3RpbWVfcGlja2VyX2xlZ2FjeV9ob2xvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmI3ZDNhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC90aW1lX3BpY2tlcl9sZWdhY3lfaG9sby54bWwKQEAgLTAsMCArMSw4NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyoqCisqKiBDb3B5cmlnaHQgMjAxMSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKy0tPgorCis8IS0tIExheW91dCBvZiB0aW1lIHBpY2tlciAtLT4KKworPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgYW5kcm9pZDppZD0iQCtpZC90aW1lUGlja2VyTGF5b3V0IgorICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iOGRpcCIKKyAgICBhbmRyb2lkOnBhZGRpbmdFbmQ9IjhkaXAiPgorCisgICAgPExpbmVhckxheW91dCBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpwYWRkaW5nU3RhcnQ9IjhkaXAiCisgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0VuZD0iOGRpcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXREaXJlY3Rpb249Imx0ciI+CisKKyAgICAgICAgPCEtLSBob3VyIC0tPgorICAgICAgICA8TnVtYmVyUGlja2VyCisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2hvdXIiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjE2ZGlwIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSIxNmRpcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJ0cnVlIgorICAgICAgICAgICAgYW5kcm9pZDpmb2N1c2FibGVJblRvdWNoTW9kZT0idHJ1ZSIKKyAgICAgICAgICAgIC8+CisKKyAgICAgICAgPCEtLSBkaXZpZGVyIC0tPgorICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZGl2aWRlciIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblN0YXJ0PSI2ZGlwIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSI2ZGlwIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsIgorICAgICAgICAgICAgYW5kcm9pZDppbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5PSJubyIKKyAgICAgICAgICAgIC8+CisKKyAgICAgICAgPCEtLSBtaW51dGUgLS0+CisgICAgICAgIDxOdW1iZXJQaWNrZXIKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbWludXRlIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSIxNmRpcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkJvdHRvbT0iMTZkaXAiCisgICAgICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlSW5Ub3VjaE1vZGU9InRydWUiCisgICAgICAgICAgICAvPgorCisgICAgPC9MaW5lYXJMYXlvdXQ+CisKKyAgICA8IS0tIEFNIC8gUE0gLS0+CisgICAgPE51bWJlclBpY2tlcgorICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FtUG0iCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjE2ZGlwIgorICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjE2ZGlwIgorICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iOGRpcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSI4ZGlwIgorICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSIKKyAgICAgICAgYW5kcm9pZDpmb2N1c2FibGVJblRvdWNoTW9kZT0idHJ1ZSIKKyAgICAgICAgLz4KKworPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAppbmRleCAxYTlhY2QzLi4wNDk4MTZlIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IlZvZXIgXCduIFBVSyB2YW4gOCBzeWZlcnMgb2YgbGFuZ2VyIGluLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJKb3UgU0lNLWthYXJ0IGlzIFBVSy1nZXNsdWl0LiBWb2VyIGRpZSBQVUsta29kZSBpbiBvbSBkaXQgdGUgb250c2x1aXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iU2xldXRlbCBQVUsyIGluIG9tIFNJTS1rYWFydCBvb3AgdGUgc2x1aXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iT25zdWtzZXN2b2wsIGFrdGl2ZWVyIFNJTS0vUlVJTS1zbG90LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+Ikp5IGhldCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gb29yYmx5d2VuZGUgcG9naW5nIHZvb3JkYXQgU0lNIGdlc2x1aXQgd29yZC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJKeSBoZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IG9vcmJseXdlbmRlIHBvZ2luZ3Mgdm9vcmRhdCBTSU0gZ2VzbHVpdCB3b3JkLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSW5rb21lbmRlciBiZWxsZXItSUQiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IkRpdCBsYWF0IGRpZSBob3VlciB0b2Ugb20gYWFuIGRpZSB0b3B2bGFrLWtvcHBlbHZsYWsgdmFuIFwnbiBWUE4tZGllbnMgdGUgYmluZC4gRGl0IG1vZXQgbm9vaXQgdmlyIG5vcm1hbGUgcHJvZ3JhbW1lIG5vZGlnIHdlZXMgbmllLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJiaW5kIGFhbiBcJ24gbXV1cnBhcGllciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iRGl0IGxhYXQgZGllIGhvdWVyIHRvZSBvbSBhYW4gZGllIHRvcHZsYWsta29wcGVsdmxhayB2YW4gXCduIG11dXJwYXBpZXIgdGUgYmluZC4gRGl0IG1vZXQgbm9vaXQgdmlyIG5vcm1hbGUgcHJvZ3JhbW1lIG5vZGlnIHdlZXMgbmllLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4ia29wcGVsIGFhbiBcJ24gYWZzdGFuZHNrZXJtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iRGl0IGxhYXQgZGllIGhvdWVyIHRvZSBvbSBhYW4gZGllIHRvcC1rb3BwZWx2bGFrIHZhbiBcJ24gYWZzdGFuZHNrZXJtIHRlIGtvcHBlbC4gQmVob29ydCBub29pdCB2aXIgZ2V3b25lIHByb2dyYW1tZSBub2RpZyB0ZSB3ZWVzIG5pZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJiaW5kIGFhbiBcJ24gbGVnc3R1a2RpZW5zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkRpdCBsYWF0IGRpZSBob3VlciB0b2Ugb20gYWFuIGRpZSB0b3B2bGFrLWtvcHBlbHZsYWsgdmFuIFwnbiBsZWdzdHVrLWRpZW5zIHRlIGJpbmQuIERpdCBtb2V0IG5vb2l0IHZpciBub3JtYWxlIHByb2dyYW1tZSBub2RpZyB3ZWVzIG5pZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJza2FrZWwgbWV0IFwnbiB0b2VzdGVsLWFkbWluIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJMYWF0IGRpZSBwcm9ncmFtIHRvZSBvbSBTdXJmYWNlRmxpbmdlciBzZSBsYWV2bGFrLWtlbm1lcmtlIHRlIGdlYnJ1aWsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ibGVlcyByYWFtYnVmZmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IkxhYXQgZGllIHByb2dyYW0gdG9lIG9tIGRpZSBpbmhvdWQgdmFuIGRpZSByYWFtYnVmZmVyIHRlIGxlZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4ia3J5IHRvZWdhbmcgdG90IElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJMYWF0IGRpZSBwcm9ncmFtIHRvZSBvbSBJbnB1dEZsaW5nZXIgc2UgbGFldmxhay1rZW5tZXJrZSB0ZSBnZWJydWlrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ic3RlbCBXaS1GaS1za2VybXMgb3AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJMYWF0IGRpZSBwcm9ncmFtIHRvZSBvbSBXaS1GaS1za2VybXMgb3AgdGUgc3RlbCBlbiBkYWFyYWFuIHRlIGtvcHBlbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ImJlaGVlciBXaS1GaS1za2VybXMiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+Ikludm9lcnNsZXV0ZWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJLaWVzIFwnbiBwcm9ncmFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iS29uIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4gbmllIGJlZ2luIG5pZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkRlZWwgbWV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkRlZWwgbWV0IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iU2t5ZmlldmF0c2VsLiBSYWFrIGVuIGhvdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iR2x5IG9wIHZpciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iR2x5IGFmIHZpciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iR2x5IGxpbmtzIHZpciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkdseSByZWdzIHZpciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJPbnRzbHVpdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU3RpbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJLbGFuayBhYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlNvZWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJTbGVlcCBvbSB0ZSBvbnRzbHVpdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUHJvcCBcJ24ga29wZm9vbiBpbiBvbSB0ZSBob29yIGhvZSB3YWd3b29yZHNsZXV0ZWxzIGhhcmRvcCBnZXPDqiB3b3JkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlB1bnQuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3RlbHNlbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoLW91ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJEcmFhZGxvc2Ugc2tlcm0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iS2xhYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNZWRpYS11aXR2b2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJLb3BwZWwgYWFuIHRvZXN0ZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJTYWFpIHNrZXJtIHVpdCBuYSB0b2VzdGVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iU29layB0YW5zIHZpciB0b2VzdGVsbGXigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJJbnN0ZWxsaW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJPbnRrb3BwZWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iU2thbmRlZXIgdGFucy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IktvcHBlbCB0YW5zLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJCZXNraWtiYWFyIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iT29ybGVnZ2VyICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IiwgdmVpbGlnIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJEcmFhZGxvc2Ugc2tlcm0gaXMgZ2Vrb3BwZWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iSGllcmRpZSBza2VybSB3b3JkIG9wIFwnbiBhbmRlciB0b2VzdGVsIGdld3lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IlNrZXJtIHdvcmQgdGFucyB1aXRnZXNhYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJLb3BwZWwgdGFucyBhYW4gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iU2tlcm0gd29yZCB0YW5zIHVpdGdlc2FhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iR2Vrb3BwZWwgYWFuIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJPbnRrb3BwZWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+Ik5vb2RvcHJvZXAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJIZXQgankgZGllIHBhdHJvb24gdmVyZ2VldD8iPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTYsMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iUHJvYmVlciB3ZWVyIG9vciA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzZWtvbmRlcyI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJQcm9iZWVyIGxhdGVyIHdlZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iU2xlZXAgdmFuIGJvIGFmIG5hIG9uZGVyIG9tIHZvbHNrZXJtIHRlIHZlcmxhYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlN3aWVwIHZhbiBibyBhZiBuYSBvbmRlciBvbSB2b2xza2VybSB0ZSB2ZXJsYWF0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iS2xhYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJVcmUgc2Ugc2lya2VsZ2x5ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+Ik1pbnV0ZSBzZSBzaXJrZWxnbHllciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJLaWVzIHVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IktpZXMgbWludXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJNYWFuZHJvb3N0ZXIgdmFuIGRhZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IkphYXJseXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IktpZXMgbWFhbmQgZW4gZGFnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iS2llcyBqYWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBnZWtpZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiB1aXRnZXZlZSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKaW5kZXggZTY0YjZmNS4uN2I0ZWM2MyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiI4IOGLiOGLreGInSDhiqjhi5sg4Ymg4YiL4YutIOGLqOGIhuGKkSDhiYHhjKXhiK7hib3hipVQVUsg4Ymw4Yut4Yml4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlNJTSDhiqvhiK3hi7Xhi44gUFVLLeGLqOGJsOGJhuGIiOGNiCDhipDhi43hjaLhi6hQVUsg4Yqu4Yux4YqVIOGJoOGImOGJsOGLqOGJpSDhi63hiq3hjYjhibHhibXhjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiIgU0lNIOGIiOGImOGKreGNiOGJtSBQVUsyIOGJsOGLreGJpeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuGKoOGIjeGJsOGIs+GKq+GIneGNoyDhi6jhiLLhiJ0vUlVJTSDhiYHhiI3hjY3hipUg4Yqg4YqV4YmD4Y2iIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i4Yiy4Yid4YuOIOGKqOGImOGJhuGIiOGNiSDhiaDhjYrhibUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGImeGKqOGIqyDhi63hiYDhiK3hi47hibPhiI3hjaIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLhiLLhiJ3hi44g4Yqo4YiY4YmG4YiI4Y2JIOGJoOGNiuGJtSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YiZ4Yqo4Yir4YuO4Ym9IOGLreGJgOGIqeGLjuGJs+GIjeGNoiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i4Yuo4YyI4YmiIOGLsOGLi+GLrUlEIjwvc3RyaW5nPgpAQCAtMTc1LDcgKzE4MCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21lc3NhZ2VzIiBtc2dpZD0iNzgyMTk5OTA3MTAwMzY5OTIzNiI+IuGKpOGItSDhiqThiJ0g4Yqk4Yi14YiF4YqV4Y2jIOGKouGInOGLreGIjeGIheGKlSDhiqXhipMg4YiM4YiLIOGImOGIjeGLleGKreGJtuGJveGIheGKlSDhiqDhipXhiaXhiaXhipMg4Y2D4Y2N4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3BlcnNvbmFsSW5mbyIgbXNnaWQ9IjM1MTkxNjMxNDEwNzA1MzM0NzQiPiLhi6jhjI3hiI0g4YiY4Yio4YyD4YuOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19wZXJzb25hbEluZm8iIG1zZ2lkPSI4NDI2NDUzMTI5Nzg4ODYxMzM4Ij4i4Ymg4Yql4YuN4YmC4YurIOGKq+GIreGLteGIhSDhiIvhi60g4YuI4Yuw4Ymw4Yqo4Yib4Ym4IOGLqOGKoOGKleGJsCDhiJjhiKjhjIMg4YmA4Yyl4Ymw4YqbIOGImOGLs+GIqOGIu+GNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zb2NpYWxJbmZvIiBtc2dpZD0iNTc5OTA5NjYyMzQxMjA0Mzc5MSI+IuGIm+GIheGJoOGIq+GLiiDhiJjhiKjhjIPhiIUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc29jaWFsSW5mbyIgbXNnaWQ9IjU3OTkwOTY2MjM0MTIwNDM3OTEiPiLhiJvhiIXhiaDhiKvhi4og4YiY4Yio4YyD4YuOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zb2NpYWxJbmZvIiBtc2dpZD0iNzEyOTg0MjQ1NzYxMTY0MzQ5MyI+IuGLiOGLsCDhi6jhiqXhi43hiYLhi6vhi47hib3hiIXhipMg4Yuo4Yib4YiF4Ymg4Yir4YuKIOGMjeGKleGKmeGKkOGJtuGJveGIhSDhiJjhiKjhjIMg4YmA4Yyl4Ymw4YqbIOGImOGLs+GIqOGIu+GNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9sb2NhdGlvbiIgbXNnaWQ9IjYzNTE0OTc0MjQzNjY5MjA0OSI+IuGIteGNjeGIq+GLjiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbG9jYXRpb24iIG1zZ2lkPSI1NzA0Njc5NzYzMTI0MTcwMTAwIj4i4Yur4YiI4YiF4Ymg4Ym14YqVIOGKoOGKq+GJo+GJoiDhibDhiYbhjKPhjKDhiK3hjaIiPC9zdHJpbmc+CkBAIC0yMDUsNyArMjEwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMjkzMzY2NzM3MjI4OTU2NzcxNCI+IuGIiOGKq+GInOGIqyDhiJ3hiLXhiI0g4YuI4Yut4YidIOGJquGLsuGLriDhiIjhiJjhiYXhiKjhjL0g4YmA4Yyl4Ymw4YqbIOGImOGLs+GIqOGIu+GNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zY3JlZW5sb2NrIiBtc2dpZD0iODI3NTUwMDE3MzMzMDcxODE2OCI+IuGIm+GLqyDhjIjhjL0g4YmG4YiN4Y2NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zY3JlZW5sb2NrIiBtc2dpZD0iNzA2NzQ5NzEyODkyNTQ5OTQwMSI+IuGJoOGImOGIo+GIquGLq+GLjiDhiIvhi60g4Yur4YiI4YuN4YqVIOGLqOGImOGJhuGIiOGNiuGLqyDhiJvhi6sg4YyI4Yy9IOGJo+GIheGIquGLq+GJtSDhiIvhi60g4Ymw4Yy94YuV4YqWIOGLqOGImOGNjeGMoOGIrSDhib3hiI7hibPhjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXBwSW5mbyIgbXNnaWQ9IjgwMjg3ODk3NjI2MzQxNDc3MjUiPiLhi6jhiJjhibDhjI3hiaDhiKrhi6vhi47hib3hiIUg4YiY4Yio4YyDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FwcEluZm8iIG1zZ2lkPSI4MDI4Nzg5NzYyNjM0MTQ3NzI1Ij4i4Yuo4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym94YuOIOGImOGIqOGMgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXBwSW5mbyIgbXNnaWQ9IjM5NTAzNzg1MzgwNDk2MjU5MDciPiLhiaDhiJjhiKPhiKrhi6vhiIUg4YiL4YutIOGLq+GIiSDhi6jhiIzhiI7hib0g4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym9IOGJo+GIheGIquGLjuGJvSDhiIvhi60g4Ymw4Y2F4YuV4YqWIOGLqOGIm+GIs+GIqOGNjSDhib3hiI7hibPhjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd2FsbHBhcGVyIiBtc2dpZD0iMzg1MDI4MDE1ODA0MTE3NTk5OCI+IuGIjeGMo+GNjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd2FsbHBhcGVyIiBtc2dpZD0iNTYzMDQxNzg1NDc1MDU0MDE1NCI+IuGLqOGImOGIo+GIquGLq+GLjeGKlSDhiI3hjKPhjY0g4YmF4YqV4Yml4Yiu4Ym9IOGJgOGLreGIreGNoiI8L3N0cmluZz4KQEAgLTI2NCwxNSArMjY5LDE1IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhiqThiLUu4Yqk4YidLuGKpOGItS4g4YiY4YiN4YuV4Yqt4Ym24Ym94YqVIOGKpeGKleGLsuGIjeGKrSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGLq+GIjeGJsOGMoOGJoOGJgSDhi4jhjKrhi47hib3hipUg4YiK4Yur4Yi14Yqo4Ym14YiNIOGLreGJveGIi+GIjeGNoiDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6vhiIvhipXhibAg4Yib4Yio4YyL4YyI4YyrIOGImOGIjeGLleGKreGJtuGJveGKlSDhiaDhiJjhiIvhiq0g4YyI4YqV4YuY4YmlIOGIiuGLq+GIteGLiOGMoeGIhSDhi63hib3hiIvhiInhjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI4NzEzODg5MTA1MzA1OTQzMjAwIj4i4Yuo4Ymg4YiY4YiN4YuV4Yqt4Ym1LeGJoOGKqeGIjS3hiJ3hiIvhiL0t4Yi14YylIOGKreGIteGJsOGJtuGJveGKlSDhi63hiIvhiqkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iNzEwNzY0ODU0ODQ2ODc3ODczNCI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiIzhiI7hib0g4Yuo4YiY4YiN4YuV4Yqt4Ym1IOGImOGIi+GKquGLqyDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4YiI4YiY4YyqIOGMpeGIquGLjuGJvSDhiaDhiJjhiI3hi5Xhiq3hibUt4Ymg4Yqp4YiNLeGIneGIi+GIvS3hiJjhiLXhjKDhibUg4Yi14Yir4YqVIOGKpeGKleGLsuGLreGLmSDhjKXhi6vhiYThi47hib0g4Yql4YqV4Yuy4YiN4Yqt4YiL4Ym44YuNIOGLq+GIteGJveGIiOGLi+GIjeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNtcyIgbXNnaWQ9Ijg3NDUwODY1NzIyMTMyNzA0ODAiPiLhi6jhjL3hiJHhjY0g4YiY4YiN4YuV4Yqt4Ym24Ym94YiF4YqVIOGKoOGKleGJpeGJpSAo4Yqk4Yi1LuGKpOGInS7hiqThiLUuIOGLiOGLreGInSDhiqThiJ0u4Yqk4YidLuGKpOGItS4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+IuGLqOGMveGIkeGNjSDhiJjhiI3hi5Xhiq3hibbhib3hi47hipUg4Yur4YqV4Yml4YmhICjhiqThiLUu4Yqk4YidLuGKpOGItS4g4YuI4Yut4YidIOGKpOGInS7hiqThiJ0u4Yqk4Yi1LikiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4i4YiY4YyI4YiI4Yyr4YuNIOGJoOGMoeGJo+GLiiDhibHhiq7hiIUg4YuI4Yut4YidIOGJoFNJTSDhiqvhiK3hi7XhiIUg4Yuo4Ymw4Yqo4Yib4Ym5IOGLqOGKpOGItS7hiqThiJ0u4Yqk4Yi1LiDhiJjhiI3hiqXhiq3hibbhib3hipUg4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLreGLmOGJtSDhi4jhi63hiJ0g4Yia4Yi14Yyl4Yir4YuK4YqQ4Ym14YqVIOGKqOGMjeGIneGJtSDhiLPhi6vhiLXhjIjhiaMg4YiB4YiJ4YqV4YidIOGLqOGKpOGItS7hiqThiJ0u4Yqk4Yi1LiDhiJjhiI3hiqXhiq3hibbhib0g4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjk1OTY3NTMzNDU3MjQwNTUwIj4i4YiY4YyI4YiI4Yyr4YuNIOGJoOGIteGIjeGKreGIhSDhi4jhi63hiJ0g4YmgU0lNIOGKq+GIreGLteGIhSDhi6jhibDhiqjhiJvhibkg4Yuo4Yqk4Yi1LuGKpOGInS7hiqThiLUuIOGImOGIjeGKpeGKreGJtuGJveGKlSDhiqXhipXhi7Lhi6vhipDhiaUg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4YuY4Ym1IOGLiOGLreGInSDhiJrhiLXhjKXhiKvhi4rhipDhibXhipUg4Yqo4YyN4Yid4Ym1IOGIs+GLq+GIteGMiOGJoyDhiIHhiInhipXhiJ0g4Yuo4Yqk4Yi1LuGKpOGInS7hiqThiLUuIOGImOGIjeGKpeGKreGJtuGJvSDhiqXhipXhi7Lhi6vhipDhiaUg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiLhiJjhjIjhiIjhjKvhi40g4Ymg4Yi14YiN4Yqt4YuOIOGLiOGLreGInSDhiaBTSU0g4Yqr4Yit4Yu14YuOIOGLqOGJsOGKqOGIm+GJuSDhi6jhiqThiLUu4Yqk4YidLuGKpOGItS4g4YiY4YiN4YuV4Yqt4Ym24Ym94YqVIOGKpeGKleGLsuGLq+GKkOGJpSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi63hi5jhibUg4YuI4Yut4YidIOGImuGIteGMpeGIq+GLiuGKkOGJteGKlSDhiqjhjI3hiJ3hibUg4Yiz4Yur4Yi14YyI4YmjIOGIgeGIieGKleGInSDhi6jhiqThiLUu4Yqk4YidLuGKpOGItS4g4YiY4YiN4YuV4Yqt4Ym24Ym9IOGKpeGKleGLsuGLq+GKkOGJpSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+IuGLqOGMveGIkeGNjSDhiJjhiI3hi5Xhiq3hibbhib3hiIXhipUg4Yqg4Yit4Ym14YuVICjhiqThiLUu4Yqk4YidLuGKpOGItS4g4YuI4Yut4YidIOGKpOGInS7hiqThiJ0u4Yqk4Yi1LikiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTE2MDQxMzk0Nzc5NDUwMTUzOCI+IuGJoOGMoeGJo+GLiiDhibDhiq7hiIUg4YuI4Yut4YidIOGIsuGInSDhiqvhiK3hi7XhiIUg4YiL4YutIOGKpOGItSDhiqThiJ0g4Yqk4Yi1IOGImOGIjeGLleGKreGJtuGJveGKlSDhiIjhiJjhjYPhjY0g4YiI4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLreGNiOGJheGLs+GIieGNoeGNoeGImOGIjeGLleGKreGJtuGJveGIheGKlSDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhiIrhiLDhiK3hi5kg4Yut4Ym94YiL4YiJ4Y2h4Y2hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjY4NjY4NzA5MDUyMzI4NTY3Ij4i4Ymg4Yi14YiN4Yqt4YiFIOGLiOGLreGInSDhiLLhiJ0g4Yqr4Yit4Yu14YiFIOGIi+GLrSDhiqThiLUg4Yqk4YidIOGKpOGItSDhiJjhiI3hi5Xhiq3hibbhib3hipUg4YiI4YiY4Y2D4Y2NIOGIiOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi63hjYjhiYXhi7PhiInhjaHhjaHhiJjhiI3hi5Xhiq3hibbhib3hiIXhipUg4Ymw4YqV4Yqu4YiNIOGKoOGLmOGIjSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4YiK4Yiw4Yit4YuZIOGLreGJveGIi+GIieGNoeGNoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2ODY2ODcwOTA1MjMyODU2NyI+IuGJoOGIteGIjeGKreGLjiDhi4jhi63hiJ0g4Yiy4YidIOGKq+GIreGLteGLjiDhiIvhi60g4Yqk4Yi1IOGKpOGInSDhiqThiLUg4YiY4YiN4YuV4Yqt4Ym24Ym94YqVIOGIiOGImOGNg+GNjSDhiIjhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4Y2I4YmF4Yuz4YiJ4Y2iIOGImOGIjeGLleGKreGJtuGJveGLjuGKlSDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhiIrhiLDhiK3hi5kg4Yut4Ym94YiL4YiJ4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9IjU5OTEzOTg3MTE5MzY1OTA0MTAiPiLhi6jhjYXhiIHhjY0g4YiY4YiN4YuV4Yqt4Ym24Ym94YqVIOGJsOGJgOGJoOGIjSAoV0FQKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqFdBUCDhiJjhiI3hiqXhiq3hibbhib3hipUg4Yql4YqV4Yuy4Yur4YqQ4YmlIOGKpeGKkyDhiqXhipXhi7Lhi6vhiqvhiILhi7Ug4Yut4Y2I4YmF4Yuz4YiN4Y2iIOGLreGIhSDhjYjhiYPhi7Ug4Yuo4Ymw4YiL4Yqp4YiN4YiF4YqVIOGImOGIjeGKpeGKreGJtuGJvSDhiIvhipXhibAg4Yiz4Yur4Yiz4Yut4YiFIOGLqOGImOGJhuGMo+GMoOGIrSDhi4jhi63hiJ0g4Yuo4YiY4Yiw4Yio4YudIOGJpeGJg+GJteGKlSDhi6vhjKDhiYPhiI3hiIvhiI3hjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRhc2tzIiBtc2dpZD0iNjQ2NjA5NTM5NjYyMzkzMzkwNiI+IuGKoOGIguGLtSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib3hipUg4Yiw4Yit4Yi14Yio4YiFIOGKoOGLjeGMoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4i4Yqg4YiC4Yu1IOGImOGJsOGMjeGJoOGIquGLq+GLjuGJveGKlSDhiLDhiK3hiLXhiKjhi40g4Yur4YuN4YyhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VGFza3MiIG1zZ2lkPSI3NDU0MjE1OTk1ODQ3NjU4MTAyIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJoOGKoOGIgeGKkSDhjIrhi5zhipMg4Ymg4YmF4Yit4YmhIOGKpeGLqOGJsOGKq+GIhOGLsSDhiLXhiIvhiIkg4Ymw4YyN4Ymj4Yiu4Ym94YqVIOGImOGIqOGMgyDhiLDhiK3hiLXhiK4g4Yql4YqV4Yuy4Yur4YuI4YyjIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJoOGImOGIs+GIquGLq+GLjSDhiIvhi60g4Yuo4Ym14Yqb4YuO4Ym5IOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhjKXhiYXhiJ0g4YiL4YutIOGIteGIiOGImOGLi+GIi+GJuOGLjSDhiJjhiKjhjIMg4Yql4YqV4Yuy4Yur4YyI4YqdIOGIiuGNiOGJheGLteGIiOGJtSDhi63hib3hiIvhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSI3MTE0MjU1MjgxOTQ0MjExNjgyIj4i4Ymg4Ymw4YiI4Yur4YupIOGJsOGMoOGJg+GImuGLjuGJvSDhiJjhiqvhiqjhiI0g4YiY4Yi14Ymw4YyL4Yml4YitIOGImOGNjeGMoOGIrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSIzNjQ2NzA5NjM2MjMzODU3ODYiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Ymg4YiY4Yij4Yiq4Yur4YuNIOGIi+GLrSDhiaDhibDhiIjhi6vhi6kg4Ymw4Yyg4YmD4Yia4YuO4Ym9IOGIi+GLrSDhiqXhiK3hiJ3hjIPhi47hib3hipUg4Yql4YqV4Yuy4Y2I4Yy94YidIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhibDhipXhiq7hiI0t4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi63hiIXhipXhipUg4Ymw4Yyg4YmF4YiY4YuNIOGJoOGJsOGMoOGJg+GImuGLjuGJvSDhiJjhiqvhiqjhiI0g4Yur4YiI4YuN4YqVIOGMpeGJoOGJgyDhiIrhjKXhiLEg4Yut4Ym94YiL4YiJ4Y2iIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLhi6hWUE4g4YyN4YiN4YyL4YiO4Ym14YqVIOGLiOGLsCDhiqjhjY3hibDhipst4Yuw4Yio4YyDIOGJoOGLqOGKkCDhjIjhjL0g4YiI4Yib4Yiz4YitIOGIiOGImOGLq+GLo+GLjSDhi63hjYjhiYXhi7PhiInhjaHhjaHhiIjhibDhiIjhiJjhi7Eg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym9IOGKoOGLq+GIteGNiOGIjeGMjeGIneGNoeGNoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiLhiaDhiI3hjKPhjY0g4Yyg4Yit4YudIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLhi6vhi6Eg4YyN4Ymk4Ym1IOGIteGIjeGJseGKlSDhi4jhi7Ag4Yqo4Y2N4Ymw4YqbLeGLsOGIqOGMgyDhiI3hjKPhjY0g4YiI4YiY4Yyg4Yio4YudIOGLreGNiOGJheGLs+GIieGNoiDhiIjhiJjhi7DhiaDhipsg4Ym14YyN4Ymg4Yir4YuO4Ym9IOGJoOGNjeGNgeGInSDhiqDhi6vhiLXhjYjhiI3hjI3hiJ3hjaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IuGKqOGKoOGKleGLtSDhi6jhiK3hiYDhibUg4Yib4Yiz4YurIOGMi+GIrSDhi63hjKDhiK3hi5vhiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLhi6vhi6Lhi40g4Yqo4Yqg4YqV4Yu1IOGLqOGIreGJgOGJtSDhiJvhiLPhi6sg4Yqo4Y2N4Ymw4YqbLeGLsOGIqOGMgyDhiaDhi63hipDhjIjhjL0g4YyL4YitIOGKpeGKleGLsuGMoOGIreGLnSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4YiI4YiY4Yuw4Ymg4YqbIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhiaDhjK3hiKvhiL0g4Yqg4Yur4Yi14Y2I4YiN4YyN4Yid4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i4YuI4YuwIOGNjeGIreGMjeGInSDhiqDhjIjhiI3hjI3hiI7hibUg4Yqg4Yur4Yut4YudIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IuGLq+GLoSDhjI3hiaThibUg4Yi14YiN4Ymx4YqVIOGLiOGLsCDhiqjhjY3hibDhipst4Yuw4Yio4YyDIOGNjeGIreGMjeGInSDhiqDhjIjhiI3hjI3hiI7hibUg4YiI4YiY4Yyg4Yio4YudICDhi63hjYjhiYXhi7PhiInhjaIg4YiI4YiY4Yuw4Ymg4YqbIOGJteGMjeGJoOGIq+GLjuGJvSDhiaDhjY3hjYHhiJ0g4Yqg4Yur4Yi14Y2I4YiN4YyN4Yid4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i4Yqo4YiY4Yij4Yiq4YurIOGKoOGIteGJsOGLs+GLsOGIrSDhjIvhiK0g4Ymw4YyI4YqT4YqdIjwvc3RyaW5nPgpAQCAtNDM3LDEyICs0NDQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U3RpY2t5IiBtc2dpZD0iNzkxOTEyNjM3MjYwNjg4MTYxNCI+IuGIjeGMpeGNjSDhi53hiK3hi53hiK0g4YiL4YqtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3NzQ5NzYwNDk0Mzk5OTE1NjUxIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGIteGIreGMreGJsSDhiqjhibDhjKDhipPhiYDhiYAg4Ymg4YqL4YiLIOGLqOGImuGJgOGIqSDhiqDhjKPhiaPhiYIg4Yi14Yit4Yyt4Ym24Ym94YqVIOGKpeGKleGLsuGIjeGKrSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yqo4YiN4YqtIOGJoOGIi+GLrSDhiJjhjKDhiYDhiJ0g4Yyh4Ymj4YuKIOGJsOGKruGLjSDhiaXhi5kg4Yib4YiF4Yuw4YioIOGJteGLjeGIteGJs+GKlSDhiqXhipXhi7LhjKDhiYDhiJ0g4Ymg4Yib4Yu14Yio4YyNIOGJgOGIreGNi+GNiyDhi4jhi63hiJ0g4Yur4YiN4Ymw4Yio4YyL4YyLIOGIiuGLq+GLsOGIreGMiOGLjSDhi63hib3hiIvhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGIteGIreGMreGJsSDhiqjhibDhjKDhipPhiYDhiYAg4Ymg4YqL4YiLIOGLqOGImuGJgOGIqSDhiqDhjKPhiaPhiYIg4Yi14Yit4Yyt4Ym24Ym94YqVIOGKpeGKleGLsuGIjeGKrSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yqo4YiN4YqtIOGJoOGIi+GLrSDhiJjhjKDhiYDhiJ0g4Yi14YiN4YqpIOGJpeGLmSDhiJvhiIXhi7DhiKgg4Ym14YuN4Yi14Ymz4YqVIOGKpeGKleGLsuGMoOGJgOGInSDhiaDhiJvhi7XhiKjhjI0g4YmA4Yit4Y2L4Y2LIOGLiOGLreGInSDhi6vhiI3hibDhiKjhjIvhjIsg4YiK4Yur4Yuw4Yit4YyI4YuNIOGLreGJveGIi+GIjeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENvbnRhY3RzIiBtc2dpZD0iODM0ODQ4MTEzMTg5OTg4NjEzMSI+IuGKpeGLjeGJguGLq+GLjuGJveGIheGKlSDhiqDhipXhiaXhiaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDb250YWN0cyIgbXNnaWQ9IjgzNDg0ODExMzE4OTk4ODYxMzEiPiLhiqXhi43hiYLhi6vhi47hib3hi47hipUg4Yur4YqV4Yml4YmhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1Mjk0ODY2ODU2OTQxMTQ5NjM5Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJoOGMoeGJo+GLiiDhibDhiq7hiIUg4Yi14YiI4Ymw4Yqo4Yib4Ym5IOGLleGLjeGJguGLq+GLjuGJvSDhi6vhiInhibXhipUg4YuN4YiC4Ymm4Ym9IOGJoOGImeGIieGNpCDhjKXhiKog4Yur4Yuw4Yio4YyN4Yqt4Ymg4Ym14YqV4Y2jIOGKouGInOGLreGIjSDhi6jhiIvhiq3hiaDhibXhipUg4YuI4Yut4YidIOGKqOGJsOGLiOGIsOGKkSDhjI3hiIjhiLDhiabhib0g4YyL4YitIOGJoOGIjOGIiyDhiJjhipXhjIjhi7Ug4Yuo4Ymw4YyI4YqT4YqY4YiF4Ymg4Ym14YqVIOGLteGMjeGIneGMjeGInuGIvSDhjKjhiJ3hiK7hjaMg4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4Y2I4YmD4Yu1IOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6jhiqXhi43hiYLhi6sg4YuN4YiC4Yml4YiF4YqVIOGKpeGKleGLsuGLq+GIteGJgOGIneGMoSDhi6jhiJrhjYjhiYXhi7XhiIvhibjhi40g4Yiy4YiG4YqVIOGJsOGKleGKruGIjSDhiqDhi5jhiI0g4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym9IOGLqOGKpeGLjeGJguGLq+GIheGKlSDhi43hiILhiaUg4Yiz4Ymz4YuN4YmA4YuNIOGIiuGLq+GMi+GIqeGJtSDhi63hib3hiIvhiInhjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDQwNjU0MTUyNDU3MzAwNjYyIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJoOGIteGIjeGKreGIhSDhiLXhiIjhibDhiqjhiJvhibkg4YuV4YuN4YmC4Yur4YuO4Ym9IOGLq+GIieGJteGKlSDhi43hiILhiabhib0g4Ymg4YiZ4YiJ4Y2kIOGMpeGIqiDhi6vhi7DhiKjhjI3hiq3hiaDhibXhipXhjaMg4Yqi4Yic4Yut4YiNIOGLqOGIi+GKreGJoOGJteGKlSDhi4jhi63hiJ0g4Yqo4Ymw4YuI4Yiw4YqRIOGMjeGIiOGIsOGJpuGJvSDhjIvhiK0g4Ymg4YiM4YiLIOGImOGKleGMiOGLtSDhi6jhibDhjIjhipPhipjhiIXhiaDhibXhipUg4Yu14YyN4Yid4YyN4Yie4Yi9IOGMqOGIneGIruGNoyDhiqXhipXhi7Lhi6vhipDhiaUg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhjYjhiYPhi7Ug4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym9IOGLqOGKpeGLjeGJguGLqyDhi43hiILhiaXhiIXhipUg4Yql4YqV4Yuy4Yur4Yi14YmA4Yid4YyhIOGLqOGImuGNiOGJheGLteGIi+GJuOGLjSDhiLLhiIbhipUg4Ymw4YqV4Yqu4YiNIOGKoOGLmOGIjSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4Yuo4Yql4YuN4YmC4Yur4YiF4YqVIOGLjeGIguGJpSDhiLPhibPhi43hiYDhi40g4YiK4Yur4YyL4Yip4Ym1IOGLreGJveGIi+GIieGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0NDA2NTQxNTI0NTczMDA2NjIiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Ymg4Yi14YiN4Yqt4YuOIOGIteGIiOGJsOGKqOGIm+GJuSDhi5Xhi43hiYLhi6vhi47hib0g4Yur4YiJ4Ym14YqVIOGLjeGIguGJpuGJvSDhiaDhiJnhiInhjaQg4Yyl4YiqIOGLq+GLsOGIqOGMieGJoOGJteGKleGNoyDhiqLhiJzhi63hiI0g4Yuo4YiL4Yqp4Ymg4Ym14YqVIOGLiOGLreGInSDhiqjhibDhi4jhiLDhipEg4YyN4YiI4Yiw4Ymm4Ym9IOGMi+GIrSDhiaDhiIzhiIsg4YiY4YqV4YyI4Yu1IOGLqOGJsOGMiOGKk+GKmeGJoOGJteGKlSDhi7XhjI3hiJ3hjI3hiJ7hiL0g4Yyo4Yid4Yiu4Y2jIOGKpeGKleGLsuGLq+GKkOGJpSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGNiOGJg+GLtSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4Yuo4Yql4YuN4YmC4YurIOGLjeGIguGJpeGLjuGKlSDhiqXhipXhi7Lhi6vhiLXhiYDhiJ3hjKEg4Yuo4Yia4Y2I4YmF4Yu14YiL4Ym44YuNIOGIsuGIhuGKlSDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6jhiqXhi43hiYLhi6vhi47hipUg4YuN4YiC4YmlIOGIs+GLq+GLjeGJgeGJtSDhiIrhi6vhjIvhiKnhibUg4Yut4Ym94YiL4YiJ4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNvbnRhY3RzIiBtc2dpZD0iNTEwNzQ5MjA4NjQxNjc5MzU0NCI+IuGLleGLjeGJguGLq+GLjuGJveGLjuGKlSDhi6vhiLXhibDhiqvhiq3hiIkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTcyNDM5MzI1MjE5NTM2MDIiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Ymg4Yyh4Ymj4YuKIOGJseGKruGIhSDhiLXhiIjhibDhiqjhiJvhibkg4Yuo4YuV4YuN4YmC4Yur4YuO4Ym94YiFIOGLjeGIguGJpSDhiaDhiJnhiInhjaQg4Yyl4YiqIOGLq+GLsOGIqOGMjeGKreGJoOGJteGKleGNoyDhiqLhiJzhi63hiI0g4Yuo4YiL4Yqt4Ymg4Ym14YqVIOGLiOGLreGInSDhiqjhibDhi4jhiLDhipEg4Yql4YuN4YmC4Yur4YuO4Ym9IOGMi+GIrSDhiaDhiIzhiIsg4YiY4YqV4YyI4Yu1IOGLqOGJsOGMiOGKk+GKmOGIheGJoOGJteGKlSDhi7XhjI3hiJ3hjI3hiJ7hiL0g4Yyo4Yid4Yiu4Y2jIOGKpeGKleGLsuGLq+GIteGJsOGKq+GKreGIjSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGNiOGJg+GLtSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4Yuo4Yql4YuN4YmC4YurIOGLjeGIguGJpSDhiqXhipXhi7LhiLDhiK3hi5kg4Yut4Y2I4YmF4Yu14YiL4Ym44YuL4YiN4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU4OTg2OTIyNDYyNTE2MzU1OCI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiaDhiLXhiI3hiq3hiIUg4Yi14YiI4Ymw4Yqo4Yib4Ym5IOGLqOGLleGLjeGJguGLq+GLjuGJveGIhSDhi43hiILhiaUg4Ymg4YiZ4YiJ4Y2kIOGMpeGIqiDhi6vhi7DhiKjhjI3hiq3hiaDhibXhipXhjaMg4Yqi4Yic4Yut4YiNIOGLqOGIi+GKreGJoOGJteGKlSDhi4jhi63hiJ0g4Yqo4Ymw4YuI4Yiw4YqRIOGKpeGLjeGJguGLq+GLjuGJvSDhjIvhiK0g4Ymg4YiM4YiLIOGImOGKleGMiOGLtSDhi6jhibDhjIjhipPhipjhiIXhiaDhibXhipUg4Yu14YyN4Yid4YyN4Yie4Yi9IOGMqOGIneGIruGNoyDhiqXhipXhi7Lhi6vhiLXhibDhiqvhiq3hiI0g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhjYjhiYPhi7Ug4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym9IOGLqOGKpeGLjeGJguGLqyDhi43hiILhiaUg4Yql4YqV4Yuy4Yiw4Yit4YuZIOGLreGNiOGJheGLteGIi+GJuOGLi+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1ODk4NjkyMjQ2MjUxNjM1NTgiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Ymg4Yi14YiN4Yqt4YuOIOGIteGIiOGJsOGKqOGIm+GJuSDhi6jhi5Xhi43hiYLhi6vhi47hib3hi44g4YuN4YiC4YmlIOGJoOGImeGIieGNpCDhjKXhiKog4Yur4Yuw4Yio4YyJ4Ymg4Ym14YqV4Y2jIOGKouGInOGLreGIjSDhi6jhiIvhiqnhiaDhibXhipUg4YuI4Yut4YidIOGKqOGJsOGLiOGIsOGKkSDhiqXhi43hiYLhi6vhi47hib0g4YyL4YitIOGJoOGIjOGIiyDhiJjhipXhjIjhi7Ug4Yuo4Ymw4YyI4YqT4YqZ4Ymg4Ym14YqVIOGLteGMjeGIneGMjeGInuGIvSDhjKjhiJ3hiK7hjaMg4Yql4YqV4Yuy4Yur4Yi14Ymw4Yqr4Yqt4YiNIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4Y2I4YmD4Yu1IOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6jhiqXhi43hiYLhi6sg4YuN4YiC4YmlIOGKpeGKleGLsuGIsOGIreGLmSDhi63hjYjhiYXhi7XhiIvhibjhi4vhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxsTG9nIiBtc2dpZD0iMzQ3ODEzMzE4NDYyNDEwMjczOSI+IuGLqOGMpeGIqiDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi74YqVIOGKoOGKleGJpeGJpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNzAwNjQ1MTg0ODcwNzYwMjg1Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGIteGIiOGMiOGJouGKkyDhi4jhjKog4Yyl4Yiq4YuO4Ym9IOGLq+GIiCDhi43hiILhiaXhipUg4Yyo4Yid4YiuIOGLqOGMoeGJo+GLiiDhibDhiq7hiIXhipUg4Yuo4Yyl4YiqIOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4Y2I4YmD4Yu1IOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhjKXhiKog4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhi43hiILhiaXhiIXhipUg4Yql4YqV4Yuy4Yur4Yi14YmA4Yid4YylIOGLqOGImuGNiOGJheGLteGIiOGJtSDhiLLhiIbhipUg4Ymw4YqV4Yqu4YiNIOGKoOGLmOGIjSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4Yiz4Ymz4YuN4YmA4YuNIOGLqOGMpeGIqiDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi7IOGLjeGIguGJpeGIheGKlSDhiIrhi6vhjIvhiKnhibUg4Yut4Ym94YiL4YiJ4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc3NzI1Nzk2ODEzMjE3MjQ0Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGIteGIiOGMiOGJouGKkyDhi4jhjKog4Yyl4Yiq4YuO4Ym9IOGLq+GIiCDhi43hiILhiaXhipUg4Yyo4Yid4YiuIOGLqOGIteGIjeGKreGIheGKlSDhi6jhjKXhiKog4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhiqXhipXhi7Lhi6vhipDhiaUg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhjYjhiYPhi7Ug4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqOGMpeGIqiDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi7IOGLjeGIguGJpeGIheGKlSDhiqXhipXhi7Lhi6vhiLXhiYDhiJ3hjKUg4Yuo4Yia4Y2I4YmF4Yu14YiI4Ym1IOGIsuGIhuGKlSDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhiLPhibPhi43hiYDhi40g4Yuo4Yyl4YiqIOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4YuN4YiC4Yml4YiF4YqVIOGIiuGLq+GMi+GIqeGJtSDhi63hib3hiIvhiInhjaIiPC9zdHJpbmc+CkBAIC00NTAsMTkgKzQ1NywxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NjYxODA2MDYyMjc0MTE5MjQ1Ij4i4Yi14YiIIOGMiOGJoiDhiqXhipMg4YuI4YyqIOGMpeGIquGLjuGJveGKlSDhi43hiILhiaUg4Yyo4Yid4Yiu4Y2jIOGLqOGMoeGJo+GLiuGJsOGKruGIheGKlSDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi7IOGIiOGImOGJgOGLqOGIrSDhiIjhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4Y2I4YmF4Yuz4YiN4Y2iIOGLreGIhOGKleGKlSDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6jhiLXhiI3hiq3hiIXhipUg4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhiIjhiJjhiLDhiKjhi50g4YuI4Yut4YidIOGIiOGImOGIiOGLiOGMpSDhiIrhjKDhiYDhiJnhiaDhibUg4Yut4Ym94YiL4YiJ4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4i4Yi14YiIIOGMiOGJoiDhiqXhipMg4YuI4YyqIOGMpeGIquGLjuGJveGKlSDhi43hiILhiaUg4Yyo4Yid4Yiu4Y2jIOGLqOGIteGIjeGKreGIheGKlSDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi7IOGIiOGImOGJgOGLqOGIrSDhiIjhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4Y2I4YmF4Yuz4YiN4Y2iIOGLreGIhOGKleGKlSDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6jhiLXhiI3hiq3hiIXhipUg4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhiIjhiJjhiLDhiKjhi50g4YuI4Yut4YidIOGIiOGImOGIiOGLiOGMpSDhiIrhjKDhiYDhiJnhiaDhibUg4Yut4Ym94YiL4YiJ4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUHJvZmlsZSIgbXNnaWQ9IjQ3MDE4ODk4NTI2MTI3MTY2NzgiPiLhi6jhiKvhiLXhiIXhipUg4Yuo4Yql4YuN4YmC4YurIOGKq+GIreGLtSDhiqDhipXhiaXhiaUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NjI0NzUxNTE4NDk4ODg4NDgiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4YiN4YqtIOGKpeGKleGLsCDhiLXhiJ3hiIUg4Yql4YqTIOGLqOGKpeGLjeGJguGLqyDhiJjhiKjhjIPhiIUg4Yur4YiJIOGJoOGImOGIs+GIquGLq+GIhSDhiIvhi60g4Yuo4Ymw4Yqo4Yib4Ym5IOGLqOGMjeGIjSDhiJjhjIjhiIjhjKsg4YiY4Yio4YyD4YuO4Ym94YqVIOGKpeGKleGLsuGLq+GKkOGJpSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiF4YidIOGIm+GIiOGJtSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4YiI4Yut4Ym2IOGIiuGLq+GLjeGJheGIhSDhiqXhipMg4Yuo4YiY4YyI4YiI4YyrIOGImOGIqOGMg+GIheGKlSDhiIjhiIzhiI7hib0g4YiK4YiN4YqtIOGLreGJveGIi+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ2MjQ3NTE1MTg0OTg4ODg0OCI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiI3hiq0g4Yql4YqV4YuwIOGIteGIneGLjiDhiqXhipMg4Yuo4Yql4YuN4YmC4YurIOGImOGIqOGMg+GLjiDhi6vhiIkg4Ymg4YiY4Yiz4Yiq4Yur4YuOIOGIi+GLrSDhi6jhibDhiqjhiJvhibkg4Yuo4YyN4YiNIOGImOGMiOGIiOGMqyDhiJjhiKjhjIPhi47hib3hipUg4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIXhiJ0g4Yib4YiI4Ym1IOGImOGJsOGMjeGJoOGIquGLq+GLjSDhiIjhi63hibYg4YiK4Yur4YuN4YmB4YuOIOGKpeGKkyDhi6jhiJjhjIjhiIjhjKsg4YiY4Yio4YyD4YuO4YqVIOGIiOGIjOGIjuGJvSDhiIrhiI3hiq0g4Yut4Ym94YiL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiLhi6jhiKvhiLXhiIXhipUg4Yuo4YuV4YuN4YmC4YurIOGKq+GIreGLtSDhiqDhiLXhibDhiqvhiq3hiI0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NTUyMDg0Mjk0NTk4NDY1ODk5Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGIjeGKrSDhiqXhipXhi7Ag4Yi14Yid4YiFIOGKpeGKkyDhi6jhiqXhi43hiYLhi6sg4YiY4Yio4YyD4YiFIOGLq+GIiSDhiaDhiJjhiLPhiKrhi6vhiIUg4YiL4YutIOGLqOGJsOGKqOGIm+GJuSDhi6jhjI3hiI0g4YiY4YyI4YiI4YyrIOGImOGIqOGMg+GLjuGJveGKlSDhiqXhipXhi7LhiYDhi63hiK0g4YuI4Yut4YidIOGKpeGKleGLsuGLq+GKreGIjeGJo+GJuOGLjSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiF4YidIOGIm+GIiOGJtSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4YiI4Yut4Ym2IOGIiuGLq+GLjeGJheGIhSDhiqXhipMg4Yuo4YiY4YyI4YiI4YyrIOGImOGIqOGMg+GIheGKlSDhiIjhiIzhiI7hib0g4YiK4YiN4YqtIOGLreGJveGIi+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4YiN4YqtIOGKpeGKleGLsCDhiLXhiJ3hi44g4Yql4YqTIOGLqOGKpeGLjeGJguGLqyDhiJjhiKjhjIPhi44g4Yur4YiJIOGJoOGImOGIs+GIquGLq+GLjiDhiIvhi60g4Yuo4Ymw4Yqo4Yib4Ym5IOGLqOGMjeGIjSDhiJjhjIjhiIjhjKsg4YiY4Yio4YyD4YuO4Ym94YqVIOGKpeGKleGLsuGJgOGLreGIrSDhi4jhi63hiJ0g4Yql4YqV4Yuy4Yur4Yqt4YiN4Ymj4Ym44YuNIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIXhiJ0g4Yib4YiI4Ym1IOGImOGJsOGMjeGJoOGIquGLq+GLjSDhiIjhi63hibYg4YiK4Yur4YuN4YmF4YuOIOGKpeGKkyDhi6jhiJjhjIjhiIjhjKsg4YiY4Yio4YyD4YuO4YqVIOGIiOGIjOGIjuGJvSDhiIrhiI3hiq0g4Yut4Ym94YiL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTI2ODkyMDk1NjE1MjQxOTE3MCI+IuGLqOGKoOGKleGJsOGKlSDhiJvhiIXhiaDhiKvhi4og4Yuo4YuN4Yut4Yut4Ym1IOGKreGNjeGIjuGJvSDhiqDhipXhiaXhiaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDI1NTcwNjAyNzE3MjA1MDg3MiI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhiqDhipXhibDhipXhipMg4Yuo4YyT4Yqe4Ym94YiF4YqVIOGIm+GIheGJoOGIq+GLiiDhi53hiJvhipThi47hib3hipUg4Yql4YqV4Yuy4Yuw4Yit4Yi14Ymj4Ym44YuNIOGKpeGKkyDhiqXhipXhi7Lhi6vhiJjhiLPhiLXhiIvhibjhi40g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGImOGIqOGMgyDhiLXhibPhjIvhiKsg4Ymw4Yyg4YqV4YmA4YmFIC0tIOGLreGIhSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yia4Yi14Yyl4Yir4YuK4YqQ4Ym14YqVIOGKqOGMjeGIneGJtSDhiLPhi6vhiLXhjIjhiaMg4Ymg4Yib4YiF4Ymg4Yir4YuKIOGKoOGLjeGJs+GIqCDhiJjhiKjhiabhib0g4Ymg4Yqg4YqV4YmwIOGKpeGKkyDhiaDhjJPhi7Dhip7hib3hiIUg4YiY4Yqr4Yqo4YiNIOGLqOGImuGLsOGIqOGMiSDhjI3hipXhipnhipDhibbhib3hipUg4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhiJvhiLXhibPhi4jhiLvhjaYg4Yut4YiFIOGNiOGJg+GLtSDhiIjhiIHhiInhiJ0g4Yib4YiF4Ymg4Yir4YuKIOGKoOGLjeGJs+GIrSDhiJjhiKjhiabhib0g4YiL4YutIOGIi+GLreGNiOGMuOGInSDhi63hib3hiIvhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzUwNDE3OTIyMjQ5MzIzNTY0NSI+IuGLiOGLsCDhi6jhiqDhipXhibAgIOGIm+GIheGJoOGIq+GLiiDhi6jhi43hi63hi63hibUg4Yqt4Y2N4YiO4Ym9IOGMu+GNjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzA4NjU1NzU1MjIwNDExNDg0OSI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiqjhjJPhip7hib3hiIXhipUg4Yib4YiF4Ymg4Yir4YuKIOGLneGIm+GKlOGLjuGJveGKlSDhiqXhipXhi7Lhi6vhiLPhi60g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGImOGIqOGMgyDhiLXhibPhjIvhiKsg4Ymw4Yyg4YqV4YmA4YmFIC0tIOGLreGIhSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yqo4YyT4Yuw4YqbIOGLqOGImOGMoSDhi6jhiJrhiJjhiLXhiIkg4YiY4YiN4Yql4Yqt4Ym24Ym94YqVIOGKpeGKleGLsuGLq+GLmOGMi+GMhSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yib4Yi14Ymz4YuI4Yi74Y2mIOGLreGIhSDhjYjhiYPhi7Ug4Ymg4YiB4YiJ4YidIOGIm+GIheGJoOGIq+GLiiDhiqDhi43hibPhiKgg4YiY4Yio4Ymm4Ym9IOGIi+GLrSDhiIvhi63hjYjhjLjhiJ0g4Yut4Ym94YiL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsZW5kYXIiIG1zZ2lkPSI1OTcyNzI3NTYwMjU3NjEyMzk4Ij4i4Yuo4YmA4YqVIOGImOGJgeGMoOGIquGLqyDhiq3hiLXhibDhibbhib0g4Ymw4Yyo4Yib4YiqIOGImuGIteGMpeGIq+GLiiDhiJjhiKjhjIMg4Yqg4YqV4Yml4YmlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MjE2NDYyMDQ5MDU3NjU4NzIzIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqOGMk+GLsOGKnuGJveGKlSDhi4jhi63hiJ0g4Yuo4Yi14YirIOGJo+GIjeGLsOGIqOGJpuGJveGKlSDhjKjhiJ3hiK4g4YiB4YiJ4YqV4YidIOGJoOGMoeGJo+GLiiDhibHhiq7hiIUg4YiL4YutIOGLqOGJsOGKqOGIm+GJuSDhi6jhiYDhipUg4YiY4YmB4Yyg4Yiq4YurIOGKreGIteGJsOGJtuGJvSDhiqXhipXhi7Lhi6vhipDhiaUg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yuo4YmA4YqVIOGImOGJgeGMoOGIquGLqyDhi43hiILhiaXhiIXhipUg4Yia4Yi14Yyl4Yir4YuK4Ymx4YqVIOGKqOGMjeGIneGJtSDhiLPhi6vhiLXhjIjhiaMg4Yql4YqV4Yuy4Yur4YyL4YirIOGLiOGLreGInSDhiqXhipXhi7Lhi6vhiLXhiYDhiJ3hjKUg4YiK4Y2I4YmF4Yu14YiI4Ym1IOGLreGJveGIi+GIjeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc0MzQ1NDg2ODI0NzA4NTE1ODMiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yuo4YyT4Yuw4Yqe4Ym94YqVIOGLiOGLreGInSDhi6jhiLXhiKsg4Ymj4YiN4Yuw4Yio4Ymm4Ym94YqVIOGMqOGIneGIriDhiIHhiInhipXhiJ0g4Ymg4Yi14YiN4Yqt4YiFIOGIi+GLrSDhi6jhibDhiqjhiJvhibkg4Yuo4YmA4YqVIOGImOGJgeGMoOGIquGLqyDhiq3hiLXhibDhibbhib0g4Yql4YqV4Yuy4Yur4YqQ4YmlIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqOGJgOGKlSDhiJjhiYHhjKDhiKrhi6sg4YuN4YiC4Yml4YiF4YqVIOGImuGIteGMpeGIq+GLiuGJseGKlSDhiqjhjI3hiJ3hibUg4Yiz4Yur4Yi14YyI4YmjIOGKpeGKleGLsuGLq+GMi+GIqyDhi4jhi63hiJ0g4Yql4YqV4Yuy4Yur4Yi14YmA4Yid4YylIOGIiuGNiOGJheGLteGIiOGJtSDhi63hib3hiIvhiI3hjaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NDM0NTQ4NjgyNDcwODUxNTgzIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqOGMk+GLsOGKnuGJveGKlSDhi4jhi63hiJ0g4Yuo4Yi14YirIOGJo+GIjeGLsOGIqOGJpuGJveGKlSDhjKjhiJ3hiK4g4YiB4YiJ4YqV4YidIOGJoOGIteGIjeGKreGLjiDhiIvhi60g4Yuo4Ymw4Yqo4Yib4Ym5IOGLqOGJgOGKlSDhiJjhiYHhjKDhiKrhi6sg4Yqt4Yi14Ymw4Ym24Ym9IOGKpeGKleGLsuGLq+GKkOGJpSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhiYDhipUg4YiY4YmB4Yyg4Yiq4YurIOGLjeGIguGJpeGLjuGKlSDhiJrhiLXhjKXhiKvhi4rhipDhibHhipUg4Yqo4YyN4Yid4Ym1IOGIs+GLq+GIteGMiOGJoyDhiqXhipXhi7Lhi6vhjIvhiKsg4YuI4Yut4YidIOGKpeGKleGLsuGLq+GIteGJgOGIneGMpSDhiIrhjYjhiYXhi7XhiIjhibUg4Yut4Ym94YiL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGVuZGFyIiBtc2dpZD0iODQzODg3NDc1NTE5MzgyNTY0NyI+IuGLqOGJgOGKlSDhiJjhiYHhjKDhiKrhi6sg4Yqt4Yi14Ymw4Ym24Ym94YqVIOGJgOGLreGIrSDhi4jhi63hiJ0g4Yqg4Yqt4YiNIOGKpeGKkyDhiIjhiqXhipXhjI3hi7bhib0g4Yqo4Ymj4YiI4Ymk4YmxIOGLleGLjeGJheGKkyDhi43hjKog4YiL4Yqt4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhjJPhi7Dhip7hib3hiIXhipUg4Yql4YqTIOGLqOGIteGIqyDhiaPhiI3hi7DhiKjhiabhib3hiIXhipUg4Yyo4Yid4YiuIOGJoOGMoeGJo+GLiiDhibDhiq7hiIUg4YiL4YutIOGIjeGJs+GIteGJsOGKq+GKreGIi+GJuOGLjSDhi6jhiJ3hibXhib3hiIvhibjhi43hipUg4Yqt4Yi14Ymw4Ym24Ym9IOGKpeGKleGLsuGLq+GKreGIjeGNoyDhiqXhipXhi7Lhi6vhiLXhi4jhjI3hi7XhjaMg4Yql4YqV4Yuy4YiI4YuN4YylIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGKqOGJgOGKlSDhiJjhiYHhjKDhiKrhi6sg4Ymj4YiI4Ymk4Ym24Ym9IOGLqOGImOGMoSDhi6jhiJrhiJjhiLXhiIkg4YiY4YiN4Yql4Yqt4Ym24Ym94YqVIOGKpeGKleGLsuGIjeGKrSDhi4jhi63hiJ0g4Yur4YiI4Ymj4YiI4Ymk4YmxIOGKpeGLjeGJgOGJtSDhiq3hiLXhibDhibbhib3hipUg4Yql4YqV4Yuy4Yur4Yi14Ymw4Yqr4Yqt4YiNIOGIiuGNiOGJheGLteGIiOGJtSDhi63hib3hiIvhiI3hjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhjJPhi7Dhip7hib3hiIXhipUg4Yql4YqTIOGLqOGIteGIqyDhiaPhiI3hi7DhiKjhiabhib3hiIXhipUg4Yyo4Yid4YiuIOGJoOGIteGIjeGKreGIhSDhiIvhi60g4YiN4Ymz4Yi14Ymw4Yqr4Yqt4YiL4Ym44YuNIOGLqOGIneGJteGJveGIi+GJuOGLjeGKlSDhiq3hiLXhibDhibbhib0g4Yql4YqV4Yuy4Yur4Yqt4YiN4Y2jIOGKpeGKleGLsuGLq+GIteGLiOGMjeGLteGNoyDhiqXhipXhi7LhiIjhi43hjKUg4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yqo4YmA4YqVIOGImOGJgeGMoOGIquGLqyDhiaPhiIjhiaThibbhib0g4Yuo4YiY4YyhIOGLqOGImuGImOGIteGIiSDhiJjhiI3hiqXhiq3hibbhib3hipUg4Yql4YqV4Yuy4YiN4YqtIOGLiOGLreGInSDhi6vhiIjhiaPhiIjhiaThibEg4Yql4YuN4YmA4Ym1IOGKreGIteGJsOGJtuGJveGKlSDhiqXhipXhi7Lhi6vhiLXhibDhiqvhiq3hiI0g4YiK4Y2I4YmF4Yu14YiI4Ym1IOGLreGJveGIi+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMzI0NDY5NDk2MzI3MjQ5Mzc2Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqOGMk+GLsOGKnuGJveGLjuGKlSDhiqXhipMg4Yuo4Yi14YirIOGJo+GIjeGLsOGIqOGJpuGJveGLjuGKlSDhjKjhiJ3hiK4g4Ymg4Yi14YiN4Yqt4YuOIOGIi+GLrSDhiIrhi6vhiLXhibDhiqvhiq3hiI/hibjhi40g4Yuo4Yia4Ym94YiP4Ym44YuN4YqVIOGKreGIteGJsOGJtuGJvSDhiqXhipXhi7Lhi6vhiq3hiI3hjaMg4Yql4YqV4Yuy4Yur4Yi14YuI4YyN4Yu14Y2jIOGKpeGKleGLsuGIiOGLjeGMpSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGImOGJsOGMjeGJoOGIquGLq+GLjSDhiqjhiYDhipUg4YiY4YmB4Yyg4Yiq4YurIOGJo+GIiOGJpOGJtuGJvSDhi6jhiJjhjKEg4Yuo4Yia4YiY4Yi14YiJIOGImOGIjeGLleGKreGJtuGJveGKlSDhiqXhipXhi7LhiI3hiq0g4YuI4Yut4YidIOGLq+GIiOGJo+GIiOGJpOGJsSDhiqXhi43hiYDhibUg4Yqt4Yi14Ymw4Ym24Ym94YqVIOGKpeGKleGLsuGLq+GIteGJsOGKq+GKreGIjSDhiIrhjYjhiYXhi7XhiIjhibUg4Yut4Ym94YiL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI4Njg4MzM0OTc0MDM2ODIzMzMwIj4i4YiI4YiZ4Yqo4YirIOGMiuGLnOGLq+GLiiDhiKXhjY3hiKsg4Y2N4Yyg4Yit4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IuGIiOGImeGKqOGIqyDhi6jhiJvhiLXhiJjhiLDhiI0g4Yuo4YiY4YqQ4Yi7IOGIneGKleGMruGJveGKlSDhjY3hjKDhiK0g4YuI4Yut4YidIOGKoOGLsuGItSDhi6jhiqDhiqvhiaPhiaIg4Yqg4YmF4Yir4YmiIOGMq+GKleGNoiDhi63hiIUg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGKoOGKq+GJo+GJouGLjeGKlSDhiqXhipMv4YuI4Yut4YidIOGKpeGKleGLsCBHUFMg4YuI4Yut4YidIOGLqOGKoOGKq+GJo+GJoiDhiqDhiYXhiKvhiaLhi47hib0g4Ymj4YiJIOGIjOGIiyDhi6jhiJjhipDhiLsg4Yid4YqV4Yyu4Ym9IOGLqOGJsOGImOGIiOGIsSDhiIHhipThibPhi47hib3hipUg4Ym94YiLIOGKpeGKleGLsuGIjSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjI4MzYzMDgwNzY3MjA1NTM4MzciPiLhibDhjKjhiJvhiKog4Yil4Y2N4YirIOGKoOGJheGIq+GJoiDhibXhi5Xhi5vhi57hib3hipUg4Yu14Yio4Yi14Y2iIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLhiJjhibDhjI3hiaDhiKrhi6vhi43hipUg4YuoU3VyZmFjZUZsaW5nZXIg4Yud4YmF4Ymw4YqbIOGLsOGIqOGMgyDhiaPhiIXhiKrhi6vhibXhipUg4YiI4YiY4Yyg4YmA4YidIOGLreGNiOGJheGLs+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuGLqOGKleGLkeGItSDhiq3hjYjhjY0g4YmL4Ym1IOGKoOGKleGJpeGJpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLhi6jhiq3hjYjhjY0g4YmL4Ym1IOGLreGLmOGJtSDhiIjhiJvhipXhiaDhiaUg4YiI4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLreGNiOGJheGLs+GIieGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IklucHV0RmxpbmdlciDhipUg4YiY4Yu14Yio4Yi1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiaPhiIjhiqDhipDhiLXhibDhipsg4YuoSW5wdXRGbGluZ2VyIOGJo+GIheGIquGLq+GJtSDhiqXhipXhi7LhjKDhiYDhiJ0g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLhi6hXaWZpIOGIm+GIs+GLq+GLjuGJveGKlSDhiqDhi4vhiYXhiK0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4YuoV2lmaSDhiJvhiLPhi6vhi47hib3hipUg4Yql4YqV4Yuy4Yur4YuL4YmF4Yit4YqTIOGKqOGKpeGKkOGIsSDhjIvhiK0g4Yql4YqV4Yuy4YyI4YqT4YqdIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i4YuoV2lmaSDhiJvhiLPhi6vhi47hib3hipUg4Ymw4YmG4Yyj4Yyg4YitIjwvc3RyaW5nPgpAQCAtNDkzLDkgKzUwMiw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tZWRpYUNvbnRlbnRDb250cm9sIiBtc2dpZD0iMTYzNzQ3ODIwMDI3MjA2MiI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhiJrhi7Lhi6sg4YiY4YiN4Yiw4YiFIOGKoOGMq+GLjeGJteGKlSDhiqXhipXhi7LhiYbhjKPhjKDhiK0g4Yql4YqTIOGLqOGImuGLsuGLqyDhiJjhiKjhjIPhi43hipUgKOGIreGKpeGIteGNoyDhi7DhiKvhiLIuLi4pIOGKpeGKleGLsuGLsOGIreGItSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI2MDk1ODU5OTM3MDY5MTQ2MDg2Ij4i4Yuo4Yu14Yid4Y2FIOGJheGKleGJpeGIruGJveGKlSDhiIjhi43hjKUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhiqDhipXhi7Ag4Yuo4Yu14Yid4Yy9IOGImOGMoOGKlSDhiqXhipMg4YiI4YuN4Yy94Yqg4Ym1IOGLqOGJteGKm+GLjeGKlSDhi6jhi7XhiJ3hjL0g4Yib4YyJ4YurIOGMpeGJheGInSDhiIvhi60g4Yql4YqV4Yuw4YuL4YiIIOGLqOGImOGIs+GIsOGIiSDhiIHhiIjhipXhibDhipPhi4og4Yuo4Yu14Yid4Yy9IOGJheGKleGJpeGIruGJveGKlSDhiqXhipXhi7Lhi6vhiLXhibDhiqvhiq3hiI0g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLhiqbhi7Lhi64g4YmF4YuzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLhiqbhi7Lhi64g4Yut4YmF4YuxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLteGIneGMveGKlSDhiaDhiJvhi63hiq3hiK7hjY7hipUg4Yql4YqV4Yuy4YmA4YuzIOGLreGNiOGJheGLteGIiOGJs+GIjeGNoiDhi63hiIUg4Y2I4YmD4Yu1IOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6vhiIvhipXhibAg4Yib4Yio4YyL4YyI4YyrIOGJoOGIm+GKleGKm+GLjeGInSDhjIrhi5wg4Yu14Yid4Yy9IOGKpeGKleGLsuGJgOGLsyDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLhjY7hibbhi47hib0g4Yql4YqTIOGJquGLsuGLruGLjuGJvSDhiqDhipXhiLMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLhjY7hibbhi47hib0g4Yql4YqTIOGJquGLsuGLruGLjuGJvSDhi6vhipXhiLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJoOGKq+GInOGIq+GLjSDhjY7hibbhi47hib3hipXhipMg4Ymq4Yuy4Yuu4YuO4Ym94YqVIOGKpeGKleGLsuGLq+GKkOGIsyDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGNiOGJg+GLtSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yqr4Yic4Yir4YuN4YqVIOGJoOGIm+GKleGKm+GLjeGInSDhjIrhi5wg4Yur4YiL4YqV4YmwIOGIm+GIqOGMi+GMiOGMqyDhiqXhipXhi7LhjKDhiYDhiJ0g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i4Yqr4Yic4Yir4YuNIOGIteGIqyDhiIvhi60g4Yiy4YiG4YqVIOGLqOGIm+GIteGJsOGIi+GIiOGNjSDhiqDhiJjhiI3hiqvhib0g4Yqk4YiNIOGKoiDhi7LhipUg4Yur4Yiw4YqT4Yqt4YiJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iNDc2NDU4NTQ2NTQ4MDI5NTM0MSI+IuGJgOGLteGIniDhi6jhibDhjKvhipAg4Yuo4Yi14Yit4YuT4Ym1IOGImOGJsOGMjeGJoOGIquGLqyDhiqvhiJzhiKvhi43hipUg4Yqg4YiY4YiL4Yqr4Ym9IOGKpOGIjSDhiqIg4YuyIOGKpeGKleGLs+GLreGMoOGJgOGInSDhiqXhipXhi7Lhi6vhiLDhipPhiq3hiI0g4Yur4Yi14Ym94YiI4YuL4YiN4Y2iIjwvc3RyaW5nPgpAQCAtNTc4LDE2ICs1ODcsMTYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQ5OTk0MzQ4ODQzNjYzMzM5OCI+IiDhi6jhiLXhiI3hiqnhipUg4Yiw4YuT4Ym1IOGImOGIiOGLiOGMpSDhiIjhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4Y2I4YmF4Yuz4YiJ4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSI0ODI5MjYyMzQ5NjkxMzg2OTg2Ij4i4Yql4YqV4YuwIOGKoOGLjeGIreGLteGKoOGLuOGIq+GMheGKoOGMiOGIjeGMjeGIjuGJtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjE5NDg0NTU1NTIzMzM2MTU5NTQiPiIg4YuI4YuwIOGImOGIiOGLqyDhiqDhiKjhjIvhjIvhjK7hib0g4Yyl4YiqIOGIiOGIm+GLteGIqOGMjSDhiIjhiJjhibDhjI3hiaDhiKrhi6sg4Yut4Y2I4YmF4Yuz4YiJ4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBY2NvdW50cyIgbXNnaWQ9IjEwODY3OTU0Njc3NjAxMjIxMTQiPiLhiJjhiKPhiKrhi6vhi40g4YiL4YutIOGLq+GIiSDhiJjhiIjhi6vhi47hib3hipUg4Yqg4YyN4YqdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBY2NvdW50cyIgbXNnaWQ9IjEwODY3OTU0Njc3NjAxMjIxMTQiPiLhiJjhiKPhiKrhi6vhi40g4YiL4YutIOGLq+GIiSDhiJjhiIjhi6vhi47hib3hipUg4Yur4YyN4YqZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3NDE0OTY1MzQ3Njk2NjAwMjciPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Ymg4Yyh4Ymj4YuKIOGJsOGKruGLjSDhi6jhiJrhibPhi4jhiYHhibXhipUg4YiY4YiI4Yur4YuO4Ym9IOGLneGIreGLneGIrSDhiqXhipXhi7Lhi6vhjIjhip0g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhiaDhjKvhipXhi4vhibjhi40g4Yib4YqT4Ym44YuN4YidIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6jhibDhjYjhjKDhiKkg4YiY4YiI4Yur4YuO4Ym94YqVIOGIiuGLq+GMoOGJg+GIjeGIjSDhi63hib3hiIvhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Ymg4Yi14YiN4YqpIOGLqOGImuGJs+GLiOGJgeGJteGKlSDhiJjhiIjhi6vhi47hib0g4Yud4Yit4Yud4YitIOGKpeGKleGLsuGLq+GMiOGKnSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGJoOGMq+GKleGLi+GJuOGLjSDhiJvhipPhibjhi43hiJ0g4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym9IOGLqOGJsOGNiOGMoOGIqSDhiJjhiIjhi6vhi47hib3hipUg4YiK4Yur4Yyg4YmD4YiN4YiNIOGLreGJveGIi+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4i4YiY4YiI4Yur4YuO4Ym94YqVIOGNjeGMoOGIreGKkyDhi6jhi63hiIjhjY0g4YmD4YiL4Ym14YqVIOGKoOGIteGJgOGIneGMpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTQ3MjEyNDI5NjkwODk3NzI2MCI+IuGLqOGImOGIiOGLqyDhiqDhiKjhjIvhjIvhjK0g4YiY4YiI4YurIOGImOGKk+GMhSDhib3hiI7hibPhipUg4YiI4YiY4Yyg4YmA4Yid4Y2jIOGImOGIiOGLqyDhiJjhjY3hjKDhiK0g4Yql4YqTIOGLqOGLreGIiOGNjSDhiYPhiI7hib3hipUg4YiI4Yib4YyN4YqY4Ym1IOGKpeGKkyDhiIjhiJvhiYDhipPhjIDhibUg4Yqg4Yqt4YiOIOGIiOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi63hjYjhiYXhi7PhiIkg4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9IjQ5ODMxMjYzMDQ3NTcxNzczMDUiPiLhiJjhiIjhi6vhi47hib3hipUg4Yqg4Yqt4YiNIOGLiOGLreGInSDhiqDhiLXhi4jhjI3hi7UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFjY291bnRzIiBtc2dpZD0iNDk4MzEyNjMwNDc1NzE3NzMwNSI+IuGImOGIiOGLq+GLjuGJveGKlSDhi6vhiq3hiIkg4YuI4Yut4YidIOGLq+GIteGLiOGMjeGLsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjY291bnRzIiBtc2dpZD0iODY5ODI5NTYyNTQ4ODI5MjUwNiI+IuGImOGIiOGLq+GLjuGJveGKlSDhiqXhipXhi7Ag4Yib4Yqo4YiNIOGKpeGKkyDhiJvhiLXhi4jhjIjhi7Ug4Yqt4YuI4YqT4YuO4Ym94YqVIOGKpeGKkyDhi6jhi63hiIjhjY0g4YmD4YiN4YqVIOGImOGIsOGIqOGLnSDhiIjhiJvhiqjhipPhi4jhipUg4YiI4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLreGNiOGJheGLs+GIieGNoeGNoSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSIyMzU0ODEzOTYxNjM4Nzc2NDIiPiLhiaDhiJjhiKPhiKrhi6vhi40g4YiL4YutIOGLq+GIiSDhiJjhiIjhi6vhi47hib3hipUg4Ymw4Yyg4YmA4YidIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2VDcmVkZW50aWFscyIgbXNnaWQ9IjIzNTQ4MTM5NjE2Mzg3NzY0MiI+IuGJoOGImOGIo+GIquGLq+GLjSDhiIvhi60g4Yur4YiJIOGImOGIiOGLq+GLjuGJveGKlSDhi63hjKDhiYDhiJkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2VDcmVkZW50aWFscyIgbXNnaWQ9Ijc5ODQyMjcxNDc0MDMzNDY0MjIiPiLhi6jhiJvhiKjhjIvhjIjhjKsg4Yuo4Yid4Yi14YyL4YqTIOGLqOGIneGIteGKreGIrSDhi4jhiKjhiYDhibXhipUg4YiI4YiY4Yyg4Yuo4YmFIOGIiOGImOGJsOGMjeGJoOGIquGLq+GLjSDhi63hjYjhiYXhi7PhiInhjaHhjaEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjQ5NTEwMjc5NjQzNDg5NzQ3NzMiPiLhi6jhiqDhi43hibPhiKgg4YiY4Yio4YmlIOGMjeGKkeGKneGKkOGJtuGJveGKlSDhiqXhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjQ5NTEwMjc5NjQzNDg5NzQ3NzMiPiLhi6jhiqDhi43hibPhiKgg4YiY4Yio4YmlIOGMjeGKleGKmeGKkOGJtuGJveGKlSDhi63hiJjhiI3hiqjhibEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI4MzE4OTY0NDI0Njc1OTYwOTc1Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGKpeGKleGLsCDhi6jhibXhipvhi47hibkg4Yqg4YuN4Ymz4YioIOGImOGIqOGJpuGJvSDhiqXhipXhi7PhiIkg4Yql4YqTIOGKpeGKleGLsOGJsOGMiOGKk+GKmSDhi6vhiIkg4Yuo4Yqg4YuN4Ymz4YioIOGImOGIqOGJpSDhjI3hipXhipnhipDhibbhib0g4YiY4Yio4YyD4YuO4Ym94YqVIOGKpeGKleGLsuGLq+GLrSDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iODAxODc1ODEzNjQwNDMyMzY1OCI+IuGImeGIiSDhi6jhiqDhi43hibPhiKgg4YiY4Yio4YmlIOGImOGLs+GIqOGIuyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhiqDhi43hibPhiKgg4YiY4Yio4YmlIOGImOGIsOGKquGLq+GLjuGJveGKlSDhiqXhipXhi7LhjYjhjKXhiK0g4Yql4YqTIOGJpeGMgSDhi6jhiqDhi43hibPhiKgg4YiY4Yio4YmlIOGNleGIruGJtuGKruGIjuGJveGKlSDhiqXhipXhi7LhjKDhiYDhiJ0g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGKoOGIs+GIuSDhiqXhipMg4YiM4YiO4Ym9IOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi43hiILhiaUg4YuI4YuwIOGJoOGLreGKkOGImOGIqOGJpSDhi6jhiJjhiIvhiqrhi6sg4YiY4YqV4YyI4Yu24Ym94YqVIOGIteGIiOGImuGLq+GJgOGIreGJoeGLjeGIguGJpSDhi4jhi7Ag4Ymg4Yut4YqQ4YiY4Yio4YmlIOGIiOGImOGIi+GKrSDhi63hiIUg4Y2N4YmD4Yu1IOGKoOGLq+GIteGNiOGIjeGMjeGIneGNoiI8L3N0cmluZz4KQEAgLTYzOCw3ICs2NDcsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI2NTk2MTQ2MDAzMzg5MDQyNDMiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Ymw4Yyg4YmD4Yia4YuNIOGJoOGJsOGMoOGJg+GImuGLjSDhiJjhi53hjIjhiaAt4YmD4YiL4Ym1IOGKoOGKqOGIm+GJveGJt+GJuOGLjSDhiIrhiIbhipEg4Yuo4Yia4Ym94YiJIOGIgeGIieGKleGInSDhiYPhiIvhibXhjaMg4Yi14Yie4Ym94YqTIOGIkOGIqOGMi+GJtSDhiqXhipXhi7Lhi6vhipDhiaPhibjhi40g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4i4Ymg4Ymw4Yyg4YmD4YiaIOGJoOGJsOGMiOGIiOGMuCDhiJjhi53hjIjhiaAg4YmD4YiL4Ym1IOGIi+GLrSDhiYPhiIvhibXhipUg4Yur4Yqt4YiL4YiNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODE4NTM4NTcxNjI1NTA2NTI5MSI+IuGJoOGJsOGMoOGJg+GImiDhiJjhi53hjIjhiaAg4YmD4YiL4Ym1IOGLjeGIteGMpSDhiqDhi7LhiLUg4YmD4YiNIOGKpeGKleGLsuGMveGNjSDhiIjhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4Y2I4YmF4Yuz4YiJ4Y2h4Y2hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM2NzI3NTA5NTE1OTQwNTQ2OCI+IuGLqFVTQiDhiJvhiqjhiJvhibvhiIXhipUg4Yut4YuY4Ym24Ym9IOGKoOGKleGJpeGJpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNjcyNzUwOTUxNTk0MDU0NjgiPiLhi6hVU0Ig4Yib4Yqo4Yib4Ym74YuO4YqVIOGLreGLmOGJtuGJvSDhi6vhipXhiaXhiaEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg4MTU2NDYyOTM0OTc3OTQwIj4i4YuoU0Qg4Yqr4Yit4Yu14YiF4YqVIOGLreGLmOGJtuGJvSDhiqDhipXhiaXhiaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDY5ODg3MTI1OTgzODYwNzkiPiLhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yuo4Yql4Yit4Yi14YuOIFVTQiDhiJvhiqjhiJvhibsg4Yut4YuY4Ym24Ym94YqVIOGKpeGKleGLsuGLq+GKkOGJpSDhi6vhiLXhib3hiIjhi4vhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYwNzM2MjQ3MzY1NDk3NTQxMSI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6jhiqXhiK3hiLXhi44gU0Qg4Yqr4Yit4Yu1IOGLreGLmOGJtuGJveGKlSDhiqXhipXhi7Lhi6vhipDhiaUg4Yur4Yi14Ym94YiI4YuL4YiN4Y2iIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4i4YmA4Yut4YitIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4i4Yqg4Yi14YyI4YmjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i4YiY4Ymw4YyN4Ymg4Yiq4YurIOGIneGIqOGMpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz7hipUg4Yib4Yi14YyA4YiY4YitIOGKoOGIjeGJsOGJu+GIiOGInSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IuGJsOGMi+GIqyDhiqgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i4YqoIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4g4YyL4YitIOGJsOGMi+GIqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLhiaPhiIjhiLXhiIvhi63hi7Ug4YiY4Yur4Yuj4Y2h4Y2hIOGLs+GItSZhbXA74Yur4Yud4Y2h4Y2hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuGIiDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDhi4jhi7Ag4YiL4YutIOGKoOGKleGIuOGIq+GJteGJteGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IuGIiDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDhi4jhi7Ag4Ymz4Ym9IOGKoOGKleGIuOGIq+GJteGJteGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuGIiDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDhi4jhi7Ag4YyN4YirIOGKoOGKleGIuOGIq+GJteGJteGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLhiIg8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4YuI4YuwIOGJgOGKnSDhiqDhipXhiLjhiKvhibXhibXhjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuGKreGNiOGJtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLhiqvhiJzhiKsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i4Y2A4Yyl4YmzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IuGLteGIneGNhSDhiqDhiaXhiKsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuGNjeGIiOGMiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IuGIi+GIiOGImOGJhuGIiOGNjSDhiqDhipXhiLjhiKvhibXhjaHhjaEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4i4Yuo4Yut4YiI4Y2NIOGJg+GIjSDhiYHhiI3hjY7hib0gIOGIsuGKkOGMiOGIqSDhiIjhiJjhiLXhiJvhibUg4Yuo4YyG4YiuIOGIm+GLs+GImOGMqyDhiLDhiqvhjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLhipDhjKXhiaUuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i4Yi14Yit4YuT4Ym1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLhi6jhiaXhiInhibHhi50g4Yu14Yid4Yy9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLhjIjhiJjhi7Ug4Yqg4YiN4YmjIOGIm+GIs+GLqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLhibDhiqjhipPhi43hipfhiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLhi6jhiJrhi7Lhi6sg4YuN4Yy94YuT4Ym1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLhiqjhiJjhiLPhiKrhi6sg4YyL4YitIOGLq+GMiOGKk+GKmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IuGIm+GLqyDhjIjhjL3hipUg4YuI4YuwIOGImOGIo+GIquGLqyDhi63hi43hiLDhi7EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLhiJjhiLPhiKrhi6vhi47hib3hipUg4Ymg4YiY4Y2I4YiI4YyNIOGIi+GLreKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IuGJheGKleGJpeGIruGJvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiLhjI3hipXhipnhipDhibUg4Yqg4YmL4Yit4YylIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IuGJoOGImOGJg+GKmOGJtSDhiIvhi60uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLhiaDhiJvhjIjhipPhipjhibUg4YiL4YutLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLhi6jhiJrhjIjhipkiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLhibDhi7DhiKvhiaIgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+4Y2mIDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz7hjaMgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IuGNoyDhi6jhibDhjKDhiaDhiYAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IuGMiOGImOGLtSDhiqDhiI3hiaMg4Yib4Yiz4YurIOGJsOGMiOGKk+GKneGJt+GIjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLhi63hiIUg4Yib4YurIOGMiOGMvSDhiaDhiIzhiIsg4YiY4Yij4Yiq4YurIOGIi+GLrSDhiqXhi6vhiLPhi6gg4YqQ4YuNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IuGIm+GLqyDhjIjhjL3hipUg4Ymg4YiY4YuN4Yiw4Yu1IOGIi+GLrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IuGKqDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiDhjIvhiK0g4Ymg4YiY4YyI4YqT4YqY4Ym1IOGIi+GLrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IuGIm+GLqyDhjIjhjL3hipUg4Ymg4YiY4YuN4Yiw4Yu1IOGIi+GLrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4i4YqoPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+IOGMi+GIrSDhibDhjIjhipPhip3hibfhiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i4YyN4YqV4YqZ4YqQ4Ym1IOGKoOGJi+GIreGMpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i4Yuo4Yqg4Yuw4YyLIOGMiuGLnCDhjKXhiKoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLhiLXhiK3hi5PhibAg4Yyl4YiI4Ymx4YqVIOGKpeGIreGIsyI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY1NywxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i4YmG4Yut4Ymw4YuNIOGKpeGKleGLsOGMiOGKkyDhi63hiJ7hiq3hiKkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i4Yqo4YiZ4YiJIOGMiOGMvSDhiJvhi6sg4YiI4YiY4YuN4Yyj4Ym1IOGMo+GJteGLjuGKlSDhiqjhiIvhi60g4YuI4Yuw4Ymz4Ym9IOGLq+GKleGIuOGIq+GJteGJseGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i4Ymw4Yqo4YqT4YuN4YqX4YiNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4i4Yuo4Yiw4YuT4Ymz4Ym1IOGKreGJpSDhibDhipXhiLjhiKvhibPhib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IuGLqOGLsOGJguGJg+GLjuGJvSDhiq3hiaUg4Ymw4YqV4Yi44Yir4Ymz4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IuGIsOGLk+GJs+GJteGKlSDhi63hiJ3hiKjhjKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLhi7DhiYLhiYPhi47hib3hipUg4Yut4Yid4Yio4YyhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLhi6jhiYDhipPhibUg4Yuo4YuI4YitIOGNjeGIreGMjeGIreGMjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IuGLqOGLk+GImOGJtSDhi53hiK3hi53hiK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IuGLiOGIrSDhiqXhipMg4YmA4YqVIOGLreGIneGIqOGMoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IuGLk+GImOGJtSDhi63hiJ3hiKjhjKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IOGJsOGImOGIreGMp+GIjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IOGJsOGIsOGIreGLn+GIjSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKaW5kZXggMmQ5MWUyOC4uZDkzNjA2NiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCkBAIC0yNywxNCArMjcsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InRlcmFieXRlU2hvcnQiIG1zZ2lkPSIyMzE2MTMwMTgxNTkxODY5NjIiPiLYqtmK2LHYp9io2KfZitiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGV0YWJ5dGVTaG9ydCIgbXNnaWQ9IjU2Mzc4MTY2ODAxNDQ5OTAyMTkiPiLYqNmK2KrYp9io2KfZitiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmlsZVNpemVTdWZmaXgiIG1zZ2lkPSI5MTY0MjkyNzkxNTAwNTMxOTQ5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkczwveGxpZmY6Zz4gPHhsaWZmOmcgaWQ9IlVOSVQiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idW50aXRsZWQiIG1zZ2lkPSI0NjM4OTU2OTU0ODUyNzgyNTc2Ij4iJmx0O9io2YTYpyDYudmG2YjYp9mGJmd0OyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IuKAjyZsdDvYqNmE2Kcg2LnZhtmI2KfZhiZndDsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpcyIgbXNnaWQ9Ijc4OTk4Mjk1MTYwNDg4MTMyMzciPiLigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpc190d29fZG90cyIgbXNnaWQ9IjEyMjgwNzg5OTQ4NjYwMzA3MzYiPiLigKUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbXB0eVBob25lTnVtYmVyIiBtc2dpZD0iNzY5NDA2MzA0MjA3OTY3NjUxNyI+IijZhNmK2LMg2YfZhtin2YMg2LHZgtmFINmH2KfYqtmBKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVua25vd25OYW1lIiBtc2dpZD0iMjI3NzU1NjU0Njc0Mjc0NjUyMiI+IijYutmK2LEg2YXYudix2YjZgSkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0Vm9pY2VNYWlsQWxwaGFUYWciIG1zZ2lkPSIyNjYwMDIwOTkwMDk3NzMzMDc3Ij4i2KfZhNio2LHZitivINin2YTYtdmI2KrZiiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRNc2lzZG5BbHBoYVRhZyIgbXNnaWQ9IjI4NTA4ODk3NTQ5MTk1ODQ2NzQiPiJNU0lTRE4xIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibW1pRXJyb3IiIG1zZ2lkPSI1MTU0NDk5NDU3NzM5MDUyOTA3Ij4i2K3Yr9ir2Kog2YXYtNmD2YTYqSDZgdmKINin2YTYp9iq2LXYp9mEINij2Ygg2KPZhiDZg9mI2K8gTU1JINi62YrYsSDYtdit2YrYrS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlFcnJvciIgbXNnaWQ9IjUxNTQ0OTk0NTc3MzkwNTI5MDciPiLigI/Yrdiv2KvYqiDZhdi02YPZhNipINmB2Yog2KfZhNin2KrYtdin2YQg2KPZiCDYo9mGINmD2YjYryBNTUkg2LrZitixINi12K3ZititLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1taUZkbkVycm9yIiBtc2dpZD0iNTIyNDM5ODIxNjM4NTMxNjQ3MSI+Itiq2YUg2KrZgtmK2YrYryDYp9mE2KrYtNi62YrZhCDZhNij2LHZgtin2YUg2KfZhNin2KrYtdin2YQg2KfZhNir2KfYqNiqINmB2YLYty4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZCIgbXNnaWQ9IjgxNDcyNzgzNDY0MTQ3MTQzMTUiPiLYqtmFINiq2YXZg9mK2YYg2KfZhNiu2K/ZhdipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkRm9yIiBtc2dpZD0iNjg1NjIyODE0MDQ1MzQ3MTA0MSI+Itiq2YUg2KrZhdmD2YrZhiDYp9mE2K7Yr9mF2Kkg2YTZgDoiPC9zdHJpbmc+CkBAIC00MiwyMyArNDIsMjggQEAKICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VSZWdpc3RlcmVkIiBtc2dpZD0iNjI3NTAxOTA4MjU5ODEwMjQ5MyI+Itiq2YUg2KfZhNiq2LPYrNmK2YQg2KjZhtis2KfYrS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRXJhc2VkIiBtc2dpZD0iMTI4ODU4NDY5NTI5NzIwMDk3MiI+ItmE2YUg2YrYqtmFINin2YTZhdiz2K0g2KjZhtis2KfYrS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZEluY29ycmVjdCIgbXNnaWQ9Ijc2MTIyMDg4Mzk0NTAxMjg3MTUiPiLZg9mE2YXYqSDZhdix2YjYsSDYutmK2LEg2LXYrdmK2K3YqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtbWlDb21wbGV0ZSIgbXNnaWQ9IjgyMzI1Mjc0OTU0MTE2OTgzNTkiPiLYp9mD2KrZhdmEIE1NSS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWRQaW4iIG1zZ2lkPSI5MDE1Mjc3NjQ1NTQ2NzEwMDE0Ij4i2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2YLYr9mK2YUg2KfZhNiw2Yog2YPYqtio2KrZhyDYutmK2LEg2LXYrdmK2K0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFkUHVrIiBtc2dpZD0iNTQ4NzI1NzY0NzA4MTEzMjIwMSI+Itix2YXYsiBQVUsg2KfZhNiw2Yog2YPYqtio2KrZhyDYutmK2LEg2LXYrdmK2K0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pQ29tcGxldGUiIG1zZ2lkPSI4MjMyNTI3NDk1NDExNjk4MzU5Ij4i4oCP2KfZg9iq2YXZhCBNTUkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkUGluIiBtc2dpZD0iOTAxNTI3NzY0NTU0NjcxMDAxNCI+IuKAj9ix2YXYsiBQSU4g2KfZhNmC2K/ZitmFINin2YTYsNmKINmD2KrYqNiq2Ycg2LrZitixINi12K3ZititLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhZFB1ayIgbXNnaWQ9IjU0ODcyNTc2NDcwODExMzIyMDEiPiLigI/YsdmF2LIgUFVLINin2YTYsNmKINmD2KrYqNiq2Ycg2LrZitixINi12K3ZititLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1pc21hdGNoUGluIiBtc2dpZD0iNjA5Mzc5MDU0NDk2ODYzNDE5Ij4i2KPYsdmC2KfZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YrYqSDYp9mE2KrZiiDZg9iq2KjYqtmH2Kcg2LrZitixINmF2LfYp9io2YLYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUGluIiBtc2dpZD0iMzg1MDAxODQ0NTE4NzQ3NTM3NyI+Itin2YPYqtioINix2YLZhSDYqti52LHZitmBINi02K7YtdmK2YvYpyDZhdmD2YjZhtmL2Kcg2YXZhiA0INil2YTZiSDYq9mF2KfZhtmK2Kkg2KPYudiv2KfYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+Itin2YPYqtioINix2YXYsiBQVUsg2YXZg9mI2YbZi9inINmF2YYgOCDYo9ix2YLYp9mFINij2Ygg2KPZg9ir2LEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+Itio2LfYp9mC2KkgU0lNINmF2KTZhdmR2YbYqSDYqNmD2YjYryBQVUsuINin2YPYqtioINmD2YjYryBQVUsg2YTYpdmE2LrYp9ihINiq2KPZhdmK2YbZh9inLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+Itin2YPYqtioIFBVSzIg2YTYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KjYt9in2YLYqSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLigI/Yp9mD2KrYqCDYsdmF2LIgUFVLINmF2YPZiNmG2YvYpyDZhdmGIDgg2KPYsdmC2KfZhSDYo9mIINij2YPYq9ixLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiLigI/YqNi32KfZgtipIFNJTSDZhdik2YXZkdmG2Kkg2KjZg9mI2K8gUFVLLiDYp9mD2KrYqCDZg9mI2K8gUFVLINmE2KXZhNi62KfYoSDYqtij2YXZitmG2YfYpy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLigI/Yp9mD2KrYqCBQVUsyINmE2KXZhNi62KfYoSDYqtij2YXZitmGINio2LfYp9mC2KkgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuKAj9mF2K3Yp9mI2YTYqSDYutmK2LEg2YbYp9is2K3YqdiMINmF2YPZkdmGINmC2YHZhCBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiLigI/Zitiq2KjZgtmJINmE2K/ZitmDINmF2K3Yp9mI2YTYqSDZiNin2K3Yr9ipICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4pINmK2KrZhSDYqNi52K/Zh9inINmC2YHZhCDYqNi32KfZgtipIFNJTS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLigI/Zitiq2KjZgtmJINmE2K/ZitmDIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDZitiq2YUg2KjYudiv2YfYpyDZgtmB2YQg2KjYt9in2YLYqSBTSU0uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLZhdi52LHZgSDYp9mE2YXYqti12YQg2KfZhNmI2KfYsdivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpck1taSIgbXNnaWQ9Ijc3ODQ2NzM2NzM0NDY4MzMwOTEiPiLZhdi52LHZgSDYp9mE2YXYqti12YQg2KfZhNi12KfYr9ixIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ2ZNbWkiIG1zZ2lkPSI1MTIzMjE4OTg5MTQxNTczNTE1Ij4i2KXYudin2K/YqSDYqtmI2KzZitmHINin2YTYp9iq2LXYp9mEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ2ZNbWkiIG1zZ2lkPSI1MTIzMjE4OTg5MTQxNTczNTE1Ij4i2KfYudin2K/YqSDYqtmI2KzZitmHINin2YTZhdmD2KfZhNmF2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDd01taSIgbXNnaWQ9IjkxMjk2NzgwNTY3OTUwMTY4NjciPiLYp9mG2KrYuNin2LEg2KfZhNmF2YPYp9mE2YXYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkJhTW1pIiBtc2dpZD0iNDU1MTkzMDY3OTI2NzcwNTgxIj4i2K3YuNixINin2YTYp9iq2LXYp9mEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iUHdkTW1pIiBtc2dpZD0iNzA0MzcxNTY4NzkwNTI1NDE5OSI+Itiq2LrZitmK2LEg2YPZhNmF2Kkg2KfZhNmF2LHZiNixIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUGluTW1pIiBtc2dpZD0iMzExMzExNzc4MDM2MTE5MDMwNCI+Itiq2LrZitmK2LEg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlBpbk1taSIgbXNnaWQ9IjMxMTMxMTc3ODAzNjExOTAzMDQiPiLigI/Yqti62YrZitixINix2YXYsiBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbmlwTW1pIiBtc2dpZD0iMzExMDUzNDY4MDU1Nzg1NzE2MiI+Itix2YLZhSDYp9mE2KfYqti12KfZhCDZhdmI2KzZiNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ25pck1taSIgbXNnaWQ9IjMwNjIxMDIxMjE0MzA1NDg3MzEiPiLYsdmC2YUg2KfZhNin2KrYtdin2YQg2YXZgtmK2ZHYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlRocmVlV0NNbWkiIG1zZ2lkPSI5MDUxMDQ3MTcwMzIxMTkwMzY4Ij4i2KfYqti12KfZhCDYq9mE2KfYq9mKIjwvc3RyaW5nPgpAQCAtNzYsMTQgKzgxLDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25FbWVyZ2VuY3kiIG1zZ2lkPSI2NTgxMTYzNzc5MDcyODMzNjY1Ij4i2K7Yr9mF2Kkg2KfZhNi32YjYp9ix2KYg2YXYrdi42YjYsdipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbk5vcm1hbCIgbXNnaWQ9IjQ5NTM4NjcwMTEzODk3NTA2NzMiPiLYp9mE2K7Yr9mF2Kkg2KfZhNi12YjYqtmK2Kkg2YXYrdi42YjYsdipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbFZvaWNlIiBtc2dpZD0iMzM5Njk2MzY1MjEwODE1MTI2MCI+Itis2YXZiti5INin2YTYrtiv2YXYp9iqINin2YTYtdmI2KrZitipINmF2K3YuNmI2LHYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25TbXMiIG1zZ2lkPSI4MzE0MzUyMzI3NDYxNjM4ODk3Ij4i2K7Yr9mF2Kkg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TINmF2K3YuNmI2LHYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25TbXMiIG1zZ2lkPSI4MzE0MzUyMzI3NDYxNjM4ODk3Ij4i4oCP2K7Yr9mF2Kkg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TINmF2K3YuNmI2LHYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Wb2ljZURhdGEiIG1zZ2lkPSI5OTY2MzY0ODcxMDYxNzEzMjAiPiLYrtiv2YXYp9iqINin2YTYtdmI2Kov2KfZhNio2YrYp9mG2KfYqiDZhdit2LjZiNix2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VTbXMiIG1zZ2lkPSIxODg4NTg4MTUyNzkyMDIzODczIj4i2K7Yr9mF2KfYqiDYp9mE2LXZiNiqL9in2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDZhdit2LjZiNix2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsIiBtc2dpZD0iNTY0MzAyODI2NDQ2NjA5MjgyMSI+Itis2YXZiti5INiu2K/Zhdin2Kog2KfZhNi12YjYqi/Yp9mE2KjZitin2YbYp9iqL9in2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDZhdit2LjZiNix2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VTbXMiIG1zZ2lkPSIxODg4NTg4MTUyNzkyMDIzODczIj4i4oCP2K7Yr9mF2KfYqiDYp9mE2LXZiNiqL9in2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDZhdit2LjZiNix2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsIiBtc2dpZD0iNTY0MzAyODI2NDQ2NjA5MjgyMSI+IuKAj9is2YXZiti5INiu2K/Zhdin2Kog2KfZhNi12YjYqi/Yp9mE2KjZitin2YbYp9iqL9in2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDZhdit2LjZiNix2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzVm9pY2UiIG1zZ2lkPSIxMjU4MzkzODEyMzM1MjU4MDE5Ij4i2KfZhNi12YjYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGEiIG1zZ2lkPSI4NzI0NTY3ODIwNzc5Mzc4OTMiPiLYp9mE2KjZitin2YbYp9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRkFYIiBtc2dpZD0iNTU2NjYyNDk5ODg0MDQ4NjQ3NSI+Itin2YTZgdin2YPYsyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1NNUyIgbXNnaWQ9IjIwMTU0NjAzNzM3MDE1Mjc0ODkiPiLYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NTTVMiIG1zZ2lkPSIyMDE1NDYwMzczNzAxNTI3NDg5Ij4i4oCP2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YUFzeW5jIiBtc2dpZD0iNDUyMzQ1NDc4MzQ5ODU1MTQ2OCI+Iti62YrYsSDZhdiq2LLYp9mF2YbYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFTeW5jIiBtc2dpZD0iNzUzMDAwMDUxOTY0NjA1NDc3NiI+ItmF2LLYp9mF2YbYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BhY2tldCIgbXNnaWQ9IjY5OTEwMDY1NTc5OTM0MjM0NTMiPiLYp9mE2K3YstmF2KkiPC9zdHJpbmc+CkBAIC0xMTEsNyArMTE2LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZjRXJyb3IiIG1zZ2lkPSIzMzI3NTYwMTI2NTg4NTAwNzc3Ij4i2K3Yr9ir2Kog2YXYtNmD2YTYqSDYqNin2YTYp9iq2LXYp9mEINij2Ygg2KPZhiDZg9mI2K8g2KfZhNmF2YrYstipINi62YrYsSDYtdit2YrYrS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JPayIgbXNnaWQ9IjExOTE5MTkzNzgwODM0NzIyMDQiPiLZhdmI2KfZgdmCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yIiBtc2dpZD0iNzk1NjM5MjUxMTE0NjY5ODUyMiI+Itit2K/YqyDYrti32KMg2YHZiiDYp9mE2LTYqNmD2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yTG9va3VwIiBtc2dpZD0iNDcxMTY4NzQ1NjExMTk2MzE2MyI+Itiq2LnYsNixINin2YTYudir2YjYsSDYudmE2Ykg2LnZhtmI2KfZhiBVUkwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yTG9va3VwIiBtc2dpZD0iNDcxMTY4NzQ1NjExMTk2MzE2MyI+IuKAj9iq2LnYsNixINin2YTYudir2YjYsSDYudmE2Ykg2LnZhtmI2KfZhiBVUkwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRBdXRoU2NoZW1lIiBtc2dpZD0iNjI5OTk4MDI4MDQ0MjA3Njc5OSI+ItmG2LjYp9mFINmF2LXYp9iv2YLYqSDYp9mE2YXZiNmC2Lkg2LrZitixINmF2LnYqtmF2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQXV0aCIgbXNnaWQ9IjE0MzUwNjU2Mjk0MzgwNDQ1MzQiPiLYqti52LDYsdiqINin2YTZhdi12KfYr9mC2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUHJveHlBdXRoIiBtc2dpZD0iMTc4ODIwNzAxMDU1OTA4MTMzMSI+ItmE2YUg2KrYqtmFINin2YTZhdi12KfYr9mC2Kkg2LnYqNixINin2YTYrtin2K/ZhSDYp9mE2YjZg9mK2YQg2KjZhtis2KfYrS4iPC9zdHJpbmc+CkBAIC0xMjEsNyArMTI2LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclJlZGlyZWN0TG9vcCIgbXNnaWQ9Ijg2Nzk1OTYwOTAzOTI3Nzk1MTYiPiLYqtit2KrZiNmKINmH2LDZhyDYp9mE2LXZgdit2Kkg2LnZhNmJINi52YXZhNmK2KfYqiDYpdi52KfYr9ipINiq2YjYrNmK2Ycg2K7Yp9iv2YUg2YPYq9mK2LHYqSDZhNmE2LrYp9mK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRTY2hlbWUiIG1zZ2lkPSI1MDE1NzMwODEyOTA2MTkyMjA4Ij4i2KfZhNio2LHZiNiq2YjZg9mI2YQg2LrZitixINmF2LnYqtmF2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmFpbGVkU3NsSGFuZHNoYWtlIiBtc2dpZD0iOTY1NDk2MDYwMDA2NTg2NDEiPiLYqti52LDYsSDYpdmG2LTYp9ihINin2KrYtdin2YQg2KLZhdmGLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckJhZFVybCIgbXNnaWQ9IjM2MzY5Mjk3MjI3Mjg4ODE5NzIiPiLYqti52LDYsSDZgdiq2K0g2KfZhNi12YHYrdipINmE2KPZhiDYudmG2YjYp9mGIFVSTCDYutmK2LEg2LXYp9mE2K0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQmFkVXJsIiBtc2dpZD0iMzYzNjkyOTcyMjcyODg4MTk3MiI+IuKAj9iq2LnYsNixINmB2KrYrSDYp9mE2LXZgdit2Kkg2YTYo9mGINi52YbZiNin2YYgVVJMINi62YrYsSDYtdin2YTYrS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlIiBtc2dpZD0iMjE3MDc4ODUxNTA1MjU1ODY3NiI+Itiq2LnYsNixINin2YTYr9iu2YjZhCDYpdmE2Ykg2KfZhNmF2YTZgS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlTm90Rm91bmQiIG1zZ2lkPSI2MjAzODU2NjEyMDQyNjU1MDg0Ij4i2KrYudiw2LEg2KfZhNi52KvZiNixINi52YTZiSDYp9mE2YXZhNmBINin2YTZhdi32YTZiNioLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclRvb01hbnlSZXF1ZXN0cyIgbXNnaWQ9IjEyMzUzOTY5MjcwODcxODgyNTMiPiLYqtiq2YUg2KfZhNii2YYg2YXYudin2YTYrNipINi32YTYqNin2Kog2YPYq9mK2LHYqSDZhNmE2LrYp9mK2KkuINit2KfZiNmEINmF2LHYqSDYo9iu2LHZiSDZgdmKINmI2YLYqiDZhNin2K3Zgi4iPC9zdHJpbmc+CkBAIC0xNjgsMTEgKzE3MywxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfYWlycGxhbmVfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iNTA3NTA3MDQ0Mjg1NDQ5MDI5NiI+ItmI2LbYuSDYp9mE2LfYp9im2LHYqSDZhdiq2YjZgtmBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i2KfZhNmI2LbYuSDYp9mE2KLZhdmGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4i2YbYuNin2YUgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IuKAj9mG2LjYp9mFIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY29zdE1vbmV5IiBtc2dpZD0iNTQyOTgwODIxNzg2MTQ2MDQwMSI+Itin2YTYrtiv2YXYp9iqINin2YTYqtmKINiq2YPZhNmB2YMg2KfZhNmF2KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY29zdE1vbmV5IiBtc2dpZD0iMzI5MzMwMTkwMzQwOTg2OTQ5NSI+ItmK2YXZg9mG2YMg2KrZhtmB2YrYsCDYpdis2LHYp9ih2KfYqiDZitmF2YPZhiDYo9mGINiq2YPZhNmB2YMg2YXYp9mE2KfZiy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWVzc2FnZXMiIG1zZ2lkPSI3NTIxMjQ5MTQ4NDQ1NDU2NjYyIj4i2LHYs9in2KbZhNmDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19tZXNzYWdlcyIgbXNnaWQ9Ijc4MjE5OTkwNzEwMDM2OTkyMzYiPiLZgtix2KfYodipINmI2YPYqtin2KjYqSDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2YjYp9mE2LHYs9in2KbZhCDYp9mE2KXZhNmD2KrYsdmI2YbZitipINmI2KfZhNix2LPYp9im2YQg2KfZhNij2K7YsdmJLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWVzc2FnZXMiIG1zZ2lkPSI3ODIxOTk5MDcxMDAzNjk5MjM2Ij4i4oCP2YLYsdin2KHYqSDZiNmD2KrYp9io2Kkg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TINmI2KfZhNix2LPYp9im2YQg2KfZhNil2YTZg9iq2LHZiNmG2YrYqSDZiNin2YTYsdiz2KfYptmEINin2YTYo9iu2LHZiS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfcGVyc29uYWxJbmZvIiBtc2dpZD0iMzUxOTE2MzE0MTA3MDUzMzQ3NCI+ItmF2LnZhNmI2YXYp9iq2YMg2KfZhNi02K7YtdmK2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3BlcnNvbmFsSW5mbyIgbXNnaWQ9Ijg0MjY0NTMxMjk3ODg4NjEzMzgiPiLYp9mE2K/YrtmI2YQg2KfZhNmF2KjYp9i02LEg2KXZhNmJINmF2LnZhNmI2YXYp9iqINi52YbZg9iMINiq2YUg2KrYrtiy2YrZhtmH2Kcg2YHZiiDYqNi32KfZgtipINin2YTYp9iq2LXYp9mELiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zb2NpYWxJbmZvIiBtc2dpZD0iNTc5OTA5NjYyMzQxMjA0Mzc5MSI+Itin2YTZhdi52YTZiNmF2KfYqiDYp9mE2KfYrNiq2YXYp9i52YrYqSI8L3N0cmluZz4KQEAgLTIyOCw4ICsyMzMsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Rpc3BsYXkiIG1zZ2lkPSI0Mjc5OTA5Njc2MDM2NDAyNjM2Ij4i2YjYp9is2YfYqSDZhdiz2KrYrtiv2YUg2KrYt9io2YrZgtin2Kog2KPYrtix2YkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Rpc3BsYXkiIG1zZ2lkPSI2MDUxMDAyMDMxOTMzMDEzNzE0Ij4i2KfZhNiq2KPYq9mK2LEg2LnZhNmJINmI2KfYrNmH2Kkg2KfZhNmF2LPYqtiu2K/ZhSDYqNin2YTYqti32KjZitmC2KfYqiDYp9mE2KPYrtix2YkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0b3JhZ2UiIG1zZ2lkPSIxOTcxMTE4NzcwNTQ2MzM2OTY2Ij4i2KfZhNiq2K7YstmK2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzQ0MjMxODUwMjQ0Njg3NDk5OSI+Itin2YTYr9iu2YjZhCDYpdmE2Ykg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iOTIwMzMwMjIxNDkxNTM1NTc3NCI+Itin2YTYr9iu2YjZhCDYpdmE2Ykg2KjYt9in2YLYqSBTRC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzQ0MjMxODUwMjQ0Njg3NDk5OSI+IuKAj9in2YTYr9iu2YjZhCDYpdmE2Ykg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iOTIwMzMwMjIxNDkxNTM1NTc3NCI+IuKAj9in2YTYr9iu2YjZhCDYpdmE2Ykg2KjYt9in2YLYqSBTRC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWNjZXNzaWJpbGl0eUZlYXR1cmVzIiBtc2dpZD0iNzkxOTAyNTYwMjI4MzU5MzkwNyI+ItmF2YrYstin2Kog2KXZhdmD2KfZhtmK2Kkg2KfZhNmI2LXZiNmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI0MjA1MTk2ODgxNjc4MTQ0MzM1Ij4i2KfZhNmF2YrYstin2Kog2KfZhNiq2Yog2YrZhdmD2YYg2YTZhNiq2YLZhtmK2Kkg2KfZhNmF2LPYp9i52K/YqSDYt9mE2KjZh9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzOTAxNzE3OTM2OTMwMTcwMzIwIj4i2KfYs9iq2LHYr9in2K8g2YXYrdiq2YjZiSDYp9mE2YbYp9mB2LDYqSI8L3N0cmluZz4KQEAgLTI1MiwyNiArMjU3LDI2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191bmluc3RhbGxfc2hvcnRjdXQiIG1zZ2lkPSI2NzQ1NzQzNDc0MjY1MDU3OTc1Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KXYstin2YTYqSDYp9iu2KrYtdin2LHYp9iqINmF2YYg2KfZhNi02KfYtNipINin2YTYsdim2YrYs9mK2Kkg2KjYr9mI2YYg2KrYr9iu2YQg2KfZhNmF2LPYqtiu2K/ZhS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iMzkwNjAwNzgzMTE5Mjk5MDk0NiI+Itil2LnYp9iv2Kkg2KrZiNis2YrZhyDYp9mE2YXZg9in2YTZhdin2Kog2KfZhNi12KfYr9ix2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjUzMzEzMTg5MzE5Mzc0MDIwNDAiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZhdi52KfZhNis2Kkg2KfZhNmF2YPYp9mE2YXYp9iqINin2YTYtdin2K/YsdipINmI2KrYutmK2YrYsSDYp9mE2LHZgtmFINin2YTZhdi32YTZiNioLiDZitiq2YrYrSDZh9iw2Kcg2KfZhNil2LDZhiDZhNmE2KrYt9io2YrZgiDZhdix2KfZgtio2Kkg2KfZhNmF2YPYp9mE2YXYp9iqINin2YTYtdin2K/YsdipINij2Ygg2KXYudin2K/YqSDYqtmI2KzZitmH2YfYpyDYo9mIINmF2YbYudmH2KcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlU21zIiBtc2dpZD0iODY3MzQ3MTc2ODk0Nzg5NTA4MiI+Itiq2YTZgtmKINix2LPYp9im2YQg2YbYtdmK2KkgKNix2LPYp9im2YQg2YLYtdmK2LHYqSBTTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmE2YLZiiDZiNmF2LnYp9mE2KzYqSDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMuINmI2YfYsNinINmK2LnZhtmKINij2YbZhyDZitmF2YPZhiDZhNmE2KrYt9io2YrZgiDZhdix2KfZgtio2Kkg2KfZhNix2LPYp9im2YQg2KfZhNiq2Yog2YrYqtmFINil2LHYs9in2YTZh9inINil2YTZiSDYrNmH2KfYstmDINij2Ygg2K3YsNmB2YfYpyDYqNiv2YjZhiDYudix2LbZh9inINmE2YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlU21zIiBtc2dpZD0iODY3MzQ3MTc2ODk0Nzg5NTA4MiI+IuKAj9iq2YTZgtmKINix2LPYp9im2YQg2YbYtdmK2KkgKNix2LPYp9im2YQg2YLYtdmK2LHYqSBTTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmE2YLZiiDZiNmF2LnYp9mE2KzYqSDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMuINmI2YfYsNinINmK2LnZhtmKINij2YbZhyDZitmF2YPZhiDZhNmE2KrYt9io2YrZgiDZhdix2KfZgtio2Kkg2KfZhNix2LPYp9im2YQg2KfZhNiq2Yog2YrYqtmFINil2LHYs9in2YTZh9inINil2YTZiSDYrNmH2KfYstmDINij2Ygg2K3YsNmB2YfYpyDYqNiv2YjZhiDYudix2LbZh9inINmE2YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlTW1zIiBtc2dpZD0iMTgyMTMxNzM0NDY2ODI1NzA5OCI+Itiq2YTZgtmKINix2LPYp9im2YQg2YbYtdmK2KkgKNix2LPYp9im2YQg2YjYs9in2KbYtyDZhdiq2LnYr9iv2KkpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YTZgtmKINmI2YXYudin2YTYrNipINix2LPYp9im2YQg2KfZhNmI2LPYp9im2Lcg2KfZhNmF2KrYudiv2K/YqS4g2YjZh9iw2Kcg2YrYudmG2Yog2KPZhtmHINmK2YXZg9mGINmE2YTYqti32KjZitmCINmF2LHYp9mC2KjYqSDYp9mE2LHYs9in2KbZhCDYp9mE2KrZiiDZitiq2YUg2KXYsdiz2KfZhNmH2Kcg2YTYrNmH2KfYstmDINij2Ygg2K3YsNmB2YfYpyDYqNiv2YjZhiDYudix2LbZh9inINmE2YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iMTgwMzQ3NzY2MDg0NjI4ODA4OSI+Itiq2YTZgtmKINio2Ksg2KfZhNi32YjYp9ix2KYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iODQ4NTI0MDcwMjYyNDMxOTc0Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrZhNmC2Yog2LHYs9in2KbZhCDYqNirINin2YTYt9mI2KfYsdimINmI2YXYudin2YTYrNiq2YfYpy4g2YTYpyDZitiq2YjZgdixINmH2LDYpyDYp9mE2KXYsNmGINiz2YjZiSDZhNiq2LfYqNmK2YLYp9iqINin2YTZhti42KfZhS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjE1OTgzMjg4NDM2MTk2NDYxNjYiPiLZgtix2KfYodipINix2LPYp9im2YQg2KjYqyDYp9mE2K7ZhNmK2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4i2KfZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2YLYsdin2KHYqSDYsdiz2KfYptmEINio2Ksg2KfZhNiu2YTZitipINin2YTYqtmKINmK2KrZhNmC2KfZh9inINmH2LDYpyDYp9mE2KzZh9in2LIuINmK2KrZhSDYqtiz2YTZitmFINiq2YbYqNmK2YfYp9iqINio2Ksg2KfZhNiu2YTZitipINmB2Yog2KjYudi2INin2YTZhdmI2KfZgti5INmE2KrYrdiw2YrYsdmDINmF2YYg2K3Yp9mE2KfYqiDYt9in2LHYptipLiDZitmF2YPZhiDYo9mGINiq2KrYr9in2K7ZhCDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINmF2Lkg2KPYr9in2KEg2KPZiCDYqti02LrZitmEINin2YTYrNmH2KfYsiDYudmG2K/ZhdinINmK2KrZhSDYqtmE2YLZiiDYqNirINiu2YTZitipINi32KfYsdimLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFNtcyIgbXNnaWQ9IjU2MDA4MzA2MTIxNDc2NzE1MjkiPiLYpdix2LPYp9mEINix2LPYp9im2YQg2YLYtdmK2LHYqSBTTVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNil2LHYs9in2YQg2LHYs9in2KbZhCDZgti12YrYsdipIFNNUy4g2YjZgtivINmK2KTYr9mKINmH2LDYpyDYpdmE2Ykg2KrYrdmF2YQg2LHYs9mI2YUg2LrZitixINmF2KrZiNmC2LnYqS4g2YjZgtivINiq2YPZhNmB2YMg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYo9mF2YjYp9mE2KfZiyDZhdmGINiu2YTYp9mEINil2LHYs9in2YQg2LHYs9in2KbZhCDYqNiv2YjZhiDZhdmI2KfZgdmC2Kkg2YXZhtmDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiLYp9mE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZgtix2KfYodipINix2LPYp9im2YQg2KjYqyDYp9mE2K7ZhNmK2Kkg2KfZhNiq2Yog2YrYqtmE2YLYp9mH2Kcg2YfYsNinINin2YTYrNmH2KfYsi4g2YrYqtmFINiq2LPZhNmK2YUg2KfYtNi52KfYsdin2Kog2KjYqyDYp9mE2K7ZhNmK2Kkg2YHZiiDYqNi52LYg2KfZhNmF2YjYp9mC2Lkg2YTYqtit2LDZitix2YMg2YXZhiDYrdin2YTYp9iqINi32KfYsdim2KkuINmK2YXZg9mGINij2YYg2KrYqtiv2KfYrtmEINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2YXYuSDYo9iv2KfYoSDYo9mIINiq2LTYutmK2YQg2KfZhNis2YfYp9iyINi52YbYr9mF2Kcg2YrYqtmFINiq2YTZgtmKINio2Ksg2K7ZhNmK2Kkg2LfYp9ix2KYuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kU21zIiBtc2dpZD0iNTYwMDgzMDYxMjE0NzY3MTUyOSI+IuKAj9il2LHYs9in2YQg2LHYs9in2KbZhCDZgti12YrYsdipIFNNUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRTbXMiIG1zZ2lkPSI3MDk0NzI5Mjk4MjA0OTM3NjY3Ij4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KXYsdiz2KfZhCDYsdiz2KfYptmEINmC2LXZitix2KkgU01TLiDZiNmC2K8g2YrYpNiv2Yog2YfYsNinINil2YTZiSDYqtit2YXZhCDYsdiz2YjZhSDYutmK2LEg2YXYqtmI2YLYudipLiDZiNmC2K8g2KrZg9mE2YHZgyDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINij2YXZiNin2YTYp9mLINmF2YYg2K7ZhNin2YQg2KXYsdiz2KfZhCDYsdiz2KfYptmEINio2K/ZiNmGINmF2YjYp9mB2YLYqSDZhdmG2YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iODcxMzg4OTEwNTMwNTk0MzIwMCI+Itil2LHYs9in2YQg2KPYrdiv2KfYqyDZitiq2YUg2KfZhNix2K8g2LnZhNmK2YfYpyDYudio2LEg2LHYs9in2YTYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI3MTA3NjQ4NTQ4NDY4Nzc4NzM0Ij4i2KfZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KXYsdiz2KfZhCDYt9mE2KjYp9iqINil2YTZiSDYqti32KjZitmC2KfYqiDYp9mE2YXYsdin2LPZhNipINin2YTYo9iu2LHZiSDZhNmE2KrYudin2YXZhCDZhdi5INin2YTYo9it2K/Yp9irINin2YTYqtmKINmK2KrZhSDYp9mE2LHYryDYudmE2YrZh9inINi52KjYsSDYp9mE2LHYs9in2KbZhCDZgdmKINin2YTZhdmD2KfZhNmF2KfYqiDYp9mE2YjYp9ix2K/YqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTbXMiIG1zZ2lkPSI4NzQ1MDg2NTcyMjEzMjcwNDgwIj4i2YLYsdin2KHYqSDYp9mE2LHYs9in2KbZhCDYp9mE2YbYtdmK2KkgKNin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDYo9mIINix2LPYp9im2YQg2KfZhNmI2LPYp9im2Lcg2KfZhNmF2KrYudiv2K/YqSkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2YLYsdin2KHYqSDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2KfZhNmF2K7YstmG2Kkg2LnZhNmJINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2Yog2KPZiCDYudmE2Ykg2KjYt9in2YLYqSBTSU0uINmI2YrYqtmK2K0g2YfYsNinINmE2YTYqti32KjZitmCINmC2LHYp9ih2Kkg2KzZhdmK2Lkg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01T2Iwg2KjYuti2INin2YTZhti42LEg2LnZhiDYp9mE2YXYrdiq2YjZiSDYo9mIINmF2K/ZiSDYp9mE2LPYsdmK2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZgtix2KfYodipINin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDYp9mE2YXYrtiy2YbYqSDYudmE2Ykg2YfYp9iq2YHZgyDYo9mIINi52YTZiSDYqNi32KfZgtipIFNJTS4g2YjZitiq2YrYrSDZh9iw2Kcg2YTZhNiq2LfYqNmK2YIg2YLYsdin2KHYqSDYrNmF2YrYuSDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVPYjCDYqNi62LYg2KfZhNmG2LjYsSDYudmGINin2YTZhdit2KrZiNmJINij2Ygg2YXYr9mJINin2YTYs9ix2YrYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+Itiq2LnYr9mK2YQg2KfZhNix2LPYp9im2YQg2KfZhNmG2LXZitipICjYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2KPZiCDYsdiz2KfYptmEINin2YTZiNiz2KfYpti3INin2YTZhdiq2LnYr9iv2KkpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2YPYqtin2KjYqSDYpdmE2Ykg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TINin2YTZhdiu2LLZkdmG2Kkg2LnZhNmJINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2Yog2KPZiCDYqNi32KfZgtipIFNJTS4g2YLYryDYqtit2LDZgSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINix2LPYp9im2YTZgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjg2Njg3MDkwNTIzMjg1NjciPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2YPYqtin2KjYqSDYpdmE2Ykg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TINin2YTZhdiu2LLZkdmG2Kkg2LnZhNmJINin2YTZh9in2KrZgSDYo9mIINio2LfYp9mC2KkgU0lNLiDZgtivINiq2K3YsNmBINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2LHYs9in2KbZhNmDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI1OTkxMzk4NzExOTM2NTkwNDEwIj4i2KrZhNmC2Yog2LHYs9in2KbZhCDZhti12YrYqSAoV0FQKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrZhNmC2Yog2LHYs9in2KbZhCBXQVAg2YjZhdi52KfZhNis2KrZh9inLiDZiNmK2KrYttmF2YYg2YfYsNinINin2YTYpdiw2YYg2KXZhdmD2KfZhtmK2Kkg2YXYsdin2YLYqNipINin2YTYsdiz2KfYptmEINin2YTYqtmKINmK2KrZhSDYpdix2LPYp9mE2YfYpyDYpdmE2YrZgyDYo9mIINit2LDZgdmH2Kcg2KjYr9mI2YYg2LnYsdi22YfYpyDZhNmDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNtcyIgbXNnaWQ9Ijg3NDUwODY1NzIyMTMyNzA0ODAiPiLigI/Zgtix2KfYodipINin2YTYsdiz2KfYptmEINin2YTZhti12YrYqSAo2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TINij2Ygg2LHYs9in2KbZhCDYp9mE2YjYs9in2KbYtyDYp9mE2YXYqti52K/Yr9ipKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI0Njc5ODE1NDg2ODQ3MzU1MjIiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZgtix2KfYodipINin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDYp9mE2YXYrtiy2YbYqSDYudmE2Ykg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDYo9mIINi52YTZiSDYqNi32KfZgtipIFNJTS4g2YjZitiq2YrYrSDZh9iw2Kcg2YTZhNiq2LfYqNmK2YIg2YLYsdin2KHYqSDYrNmF2YrYuSDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVPYjCDYqNi62LYg2KfZhNmG2LjYsSDYudmGINin2YTZhdit2KrZiNmJINij2Ygg2YXYr9mJINin2YTYs9ix2YrYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY5NTk2NzUzMzQ1NzI0MDU1MCI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNmC2LHYp9ih2Kkg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TINin2YTZhdiu2LLZhtipINi52YTZiSDZh9in2KrZgdmDINij2Ygg2LnZhNmJINio2LfYp9mC2KkgU0lNLiDZiNmK2KrZititINmH2LDYpyDZhNmE2KrYt9io2YrZgiDZgtix2KfYodipINis2YXZiti5INin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNU9iMINio2LrYtiDYp9mE2YbYuNixINi52YYg2KfZhNmF2K3YqtmI2Ykg2KPZiCDZhdiv2Ykg2KfZhNiz2LHZitipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTbXMiIG1zZ2lkPSIzMjE2OTUwNDcyNjM2MjE0Nzc0Ij4i4oCP2KrYudiv2YrZhCDYp9mE2LHYs9in2KbZhCDYp9mE2YbYtdmK2KkgKNin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDYo9mIINix2LPYp9im2YQg2KfZhNmI2LPYp9im2Lcg2KfZhNmF2KrYudiv2K/YqSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTE2MDQxMzk0Nzc5NDUwMTUzOCI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTZg9iq2KfYqNipINil2YTZiSDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2KfZhNmF2K7YstmR2YbYqSDYudmE2Ykg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDYo9mIINio2LfYp9mC2KkgU0lNLiDZgtivINiq2K3YsNmBINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2LHYs9in2KbZhNmDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2ODY2ODcwOTA1MjMyODU2NyI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTZg9iq2KfYqNipINil2YTZiSDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2KfZhNmF2K7YstmR2YbYqSDYudmE2Ykg2KfZhNmH2KfYqtmBINij2Ygg2KjYt9in2YLYqSBTSU0uINmC2K8g2KrYrdiw2YEg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYsdiz2KfYptmE2YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9IjU5OTEzOTg3MTE5MzY1OTA0MTAiPiLigI/YqtmE2YLZiiDYsdiz2KfYptmEINmG2LXZitipIChXQVApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmE2YLZiiDYsdiz2KfYptmEIFdBUCDZiNmF2LnYp9mE2KzYqtmH2KcuINmI2YrYqti22YXZhiDZh9iw2Kcg2KfZhNil2LDZhiDYpdmF2YPYp9mG2YrYqSDZhdix2KfZgtio2Kkg2KfZhNix2LPYp9im2YQg2KfZhNiq2Yog2YrYqtmFINil2LHYs9in2YTZh9inINil2YTZitmDINij2Ygg2K3YsNmB2YfYpyDYqNiv2YjZhiDYudix2LbZh9inINmE2YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUYXNrcyIgbXNnaWQ9IjY0NjYwOTUzOTY2MjM5MzM5MDYiPiLYp9iz2KrYsdiv2KfYryDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNiq2Yog2YLZitivINin2YTYqti02LrZitmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VGFza3MiIG1zZ2lkPSI3NDU0MjE1OTk1ODQ3NjU4MTAyIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfYs9iq2LHYr9in2K8g2YXYudmE2YjZhdin2Kog2K3ZiNmEINin2YTZhdmH2KfZhSDYp9mE2KrZiiDZitis2LHZiiDYqti02LrZitmE2YfYpyDYrdin2YTZitmL2Kcg2YjYp9mE2KrZiiDYqtmFINiq2LTYutmK2YTZh9inINmF2KTYrtix2YvYpy4g2YjZgtivINmK2LPZhditINmH2LDYpyDZhNmE2KrYt9io2YrZgiDYqNin2YPYqti02KfZgSDZhdi52YTZiNmF2KfYqiDYrdmI2YQg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTZhdiz2KrYrtiv2YXYqSDYudmE2Ykg2KfZhNis2YfYp9iyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJhY3RBY3Jvc3NVc2VycyIgbXNnaWQ9IjcxMTQyNTUyODE5NDQyMTE2ODIiPiLYp9mE2KrYudin2YXZhCDYqNmK2YYg2KfZhNmF2LPYqtiu2K/ZhdmK2YYiPC9zdHJpbmc+CkBAIC0zMjYsMTAgKzMzMSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iNjAwMzYwMzE2MjU3ODU3NzQwNiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNmF2LHYp9mC2KjYqSDZg9mK2YHZitipINio2K/YoSDYp9mE2YbYuNin2YUg2YTZhNij2YbYtNi32Kkg2YjYp9mE2KrYrdmD2YUg2YHZitmH2KcuINmC2K8g2KrZj9i52LHZkNmR2LYg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYp9mE2YbYuNin2YUg2YTZhNi22LHYsSDYqNi02YPZhCDZg9in2YXZhC4g2YTZhiDYqtmD2YjZhiDZh9mG2KfZgyDYrdin2KzYqSDZhNmH2LDYpyDYp9mE2KXYsNmGINiz2YjZiSDZhNmE2KrYt9mI2YrYsSDZgdmC2LfYjCDZiNmE2YrYsyDZhNmE2KfYs9iq2K7Yr9in2YUg2KfZhNi52KfYr9mKINi52YTZiSDYp9mE2KXYt9mE2KfZgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iMjU3NjMzMzQzNDg5MzUzMjQ3NSI+Itil2LHYs9in2YQg2KjYqyDYp9mE2K3YstmF2Kkg2KfZhNiw2Yog2KrZhdiqINil2LLYp9mE2KrZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNio2Ksg2KrZhtio2YrZhyDZitmB2YrYryDYqNil2LLYp9mE2Kkg2K3YstmF2Kkg2KPYrdivINin2YTYqti32KjZitmC2KfYqi4g2YLYryDYqtiz2KrYrtiv2YUg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDZh9iw2Kcg2YTYpdmG2YfYp9ihINij2YrYqSDYqti32KjZitmC2KfYqiDYo9iu2LHZiSDZgtmK2K8g2KfZhNiq2LTYutmK2YQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjU2ODkwOTUwMDkwMzAzMzY1OTMiPiLYpdix2LPYp9mEINio2KsgU01TINmF2LPYqtmE2YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqNirINil2LTYudin2LEg2KjYp9iz2KrZhNin2YUg2LHYs9in2YTYqSDZgti12YrYsdipIFNNUy4g2YLYryDYqtiz2KrYrtiv2YUg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDZh9iw2Kcg2YTYqtiy2YrZitmBINin2YTYsdiz2KfYptmEINin2YTZgti12YrYsdipIFNNUyDYp9mE2YjYp9ix2K/YqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSIzMTQ1MzQ3NDEzMDI4NTgyMzcxIj4i2KXYsdiz2KfZhCDYqNirIFdBUC1QVVNIINin2YTZhdiz2KrZhNmFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjQ3ODM0MDI1MjUwMzk0NDI3MjkiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqNirINil2LTYudin2LEg2KjYp9iz2KrZhNin2YUg2LHYs9in2YTYqSBXQVAgUFVTSC4g2YrZhdmD2YYg2KPZhiDYqtiz2KrYrtiv2YUg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDZh9iw2Kcg2YTYqtiy2YrZgSDYp9iz2KrZhNin2YUg2LHYs9in2YTYqSDZiNiz2KfYpti3INmF2KrYudiv2K/YqSDYo9mIINmE2KfYs9iq2KjYr9in2YQg2YXYrdiq2YjZiSDYo9mKINi12YHYrdipINmI2YrYqCDYqNmF2KrYutmK2LHYp9iqINi22KfYsdipINio2LTZg9mEINi62YrYsSDZhdmE2K3ZiNi4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI1Njg5MDk1MDA5MDMwMzM2NTkzIj4i4oCP2KXYsdiz2KfZhCDYqNirIFNNUyDZhdiz2KrZhNmFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI0MTUyMDM3NzIwMDM0MzY1NDkyIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KjYqyDYpdi02LnYp9ixINio2KfYs9iq2YTYp9mFINix2LPYp9mE2Kkg2YLYtdmK2LHYqSBTTVMuINmC2K8g2KrYs9iq2K7Yr9mFINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2YfYsNinINmE2KrYstmK2YrZgSDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMg2KfZhNmI2KfYsdiv2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+IuKAj9il2LHYs9in2YQg2KjYqyBXQVAtUFVTSCDYp9mE2YXYs9iq2YTZhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSI0NzgzNDAyNTI1MDM5NDQyNzI5Ij4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KjYqyDYpdi02LnYp9ixINio2KfYs9iq2YTYp9mFINix2LPYp9mE2KkgV0FQIFBVU0guINmK2YXZg9mGINij2YYg2KrYs9iq2K7Yr9mFINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2YfYsNinINmE2KrYstmK2YEg2KfYs9iq2YTYp9mFINix2LPYp9mE2Kkg2YjYs9in2KbYtyDZhdiq2LnYr9iv2Kkg2KPZiCDZhNin2LPYqtio2K/Yp9mEINmF2K3YqtmI2Ykg2KPZiiDYtdmB2K3YqSDZiNmK2Kgg2KjZhdiq2LrZitix2KfYqiDYttin2LHYqSDYqNi02YPZhCDYutmK2LEg2YXZhNit2YjYuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjI0NTE4NzM2NjQzNjM2NjI2NjYiPiLYqtit2K/ZitivINi52K/YryDYp9mE2LnZhdmE2YrYp9iqINmC2YrYryDYp9mE2KrYtNi62YrZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjczMTgwNjEzMTQwNDA4Nzk1NDIiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KrYrdmD2YUg2YHZiiDYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNi52YXZhNmK2KfYqiDYp9mE2KrZiiDYs9mK2KrZhSDYqti02LrZitmE2YfYpy4g2LrZitixINmF2LfZhNmI2Kgg2LnZhNmJINin2YTYpdi32YTYp9mCINmE2YTYqti32KjZitmC2KfYqiDYp9mE2LnYp9iv2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9IjU1MDk1ODUwNzc5ODc5Njk2NSI+ItmB2LHYtiDYpdi62YTYp9mCINiq2LfYqNmK2YLYp9iqINin2YTYrtmE2YHZitipIjwvc3RyaW5nPgpAQCAtMzUzLDcgKzM1OCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iMjgwNTEwMzI0MTE1MzkwNzE3NCI+Itiq2LnYr9mK2YQg2LPYsdi52Kkg2KfZhNix2LPZiNmFINin2YTZhdiq2K3YsdmD2Kkg2KfZhNi52YXZiNmF2YrYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iNzY5MDA2MzQyODkyNDM0MzU3MSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2LrZitmK2LEg2LPYsdi52Kkg2KfZhNix2LPZiNmFINin2YTZhdiq2K3YsdmD2Kkg2KfZhNi52YXZiNmF2YrYqSAo2LHYs9mI2YUg2YXYqtit2LHZg9ipINij2LPYsdi5INij2Ygg2KPYqNi32KMpINmB2Yog2KPZiiDZiNmC2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSIxMjg2NTA1NzE3MDUwMTIxMzcwIj4i2KXYr9in2LHYqSDYp9mE2LHZhdmI2LIg2KfZhNmF2YXZitiy2Kkg2YTZhNiq2LfYqNmK2YLYp9iqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iODA0MzQzMTcxMzAxNDM5NTY3MSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNil2YbYtNin2KEg2YjYpdiv2KfYsdipINix2YXZiNiy2Ycg2KfZhNiu2KfYtdip2Iwg2YjYqtis2KfZiNiyINiq2LHYqtmK2KggWiDYp9mE2LnYp9iv2YouINmE2YYg2KrZg9mI2YYg2YfZhtin2YMg2K3Yp9is2Kkg2KXZhNmK2Ycg2YXYt9mE2YLZi9inINmF2Lkg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYudin2K/ZitipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYpdmG2LTYp9ihINmI2KXYr9in2LHYqSDYsdmF2YjYstmHINin2YTYrtin2LXYqdiMINmI2KrYrNin2YjYsiDYqtix2KrZitioIFog2KfZhNi52KfYr9mKLiDZhNmGINiq2YPZiNmGINmH2YbYp9mDINit2KfYrNipINil2YTZitmHINmF2LfZhNmC2YvYpyDZhdi5INin2YTYqti32KjZitmC2KfYqiDYp9mE2LnYp9iv2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9IjQ3MDgxODExODQ0NDE4ODAxNzUiPiLYqtis2YXZitivINin2YTYtNin2LTYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9Ijg1NTg5MjM3ODkyMjI2NzAwNjQiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtis2YXZitivINin2YTYtNin2LTYqSDZhdik2YLYqtmL2Kcg2YTYpdis2LHYp9ihINin2YbYqtmC2KfZhCDYqNmF2YTYoSDYp9mE2LTYp9i02KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbmplY3RFdmVudHMiIG1zZ2lkPSIxMzc4NzQ2NTg0MDIzNTg2NjAwIj4i2YXZgdin2KrZititINin2YTYtti62Lcg2YjYo9iy2LHYp9ixINin2YTYqtit2YPZhSI8L3N0cmluZz4KQEAgLTM2OSwxNCArMzc0LDE2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iNzk2MDA2NzYyMzIwOTExMTEzNSI+ItmE2YTYs9mF2KfYrSDZhNmE2YXYp9mE2YMg2KjYp9mE2KfZhNiq2LLYp9mFINio2YjYp9is2YfYqSDYp9mE2YXYs9iq2YjZiSDYp9mE2LnZhNmI2Yog2YTYrtiv2YXYqSDYp9mE2LfYqNin2LnYqS4g2YTZhiDYqtmD2YjZhiDZh9mG2KfZgyDYrdin2KzYqSDYpdmE2YrZhyDZhdi32YTZgtmL2Kcg2YXYuSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTcG9vbGVyU2VydmljZSIgbXNnaWQ9IjY4MDc3NjI3ODM3NDQxMjU5NTQiPiLYp9mE2KfZhNiq2LLYp9mFINio2K7Yr9mF2Kkg2KfZhNiq2K7YstmK2YYg2KfZhNmF2KTZgtiqINmE2YTYt9io2KfYudipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFByaW50U3Bvb2xlclNlcnZpY2UiIG1zZ2lkPSIzNjgwNTUyMjg1OTMzMzE4MzcyIj4i2YTZhNiz2YXYp9itINmE2YTZhdin2YTZgyDYqNin2YTYp9mE2KrYstin2YUg2KjZiNin2KzZh9ipINin2YTZhdiz2KrZiNmJINin2YTYudmE2YjZiiDZhNiu2K/ZhdipINin2YTYqtiu2LLZitmGINin2YTZhdik2YLYqiDZhNmE2LfYqNin2LnYqS4g2YTZhiDYqtmD2YjZhiDZh9mG2KfZgyDYrdin2KzYqSDYpdmE2YrZhyDZhdi32YTZgtmL2Kcg2YXYuSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjI3NTI3MzEzMDA0MTk0MTA3MjQiPiLYp9mE2LHYqNi3INio2K7Yr9mF2KkgTkZDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSI2MTIwNjQ3NjI5MTc0MDY2ODYyIj4i2YTZhNiz2YXYp9itINmE2K3Yp9mF2YQg2KfZhNio2LfYp9mC2Kkg2KjYp9mE2LHYqNi3INio2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYqtmKINiq2K3Yp9mD2Yog2KjYt9in2YLYp9iqIE5GQy4g2YTYpyDZitiq2YjYrNioINin2LPYqtiu2K/Yp9mF2Ycg2LnZhNmJINin2YTYpdi32YTYp9mCINmE2YTYqti32KjZitmC2KfYqiDYp9mE2LnYp9iv2YrYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROZmNTZXJ2aWNlIiBtc2dpZD0iMjc1MjczMTMwMDQxOTQxMDcyNCI+IuKAj9in2YTYsdio2Lcg2KjYrtiv2YXYqSBORkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiLigI/ZhNmE2LPZhdin2K0g2YTYrdin2YXZhCDYp9mE2KjYt9in2YLYqSDYqNin2YTYsdio2Lcg2KjYp9mE2KrYt9io2YrZgtin2Kog2KfZhNiq2Yog2KrYrdin2YPZiiDYqNi32KfZgtin2KogTkZDLiDZhNinINmK2KrZiNis2Kgg2KfYs9iq2K7Yr9in2YXZhyDYudmE2Ykg2KfZhNil2LfZhNin2YIg2YTZhNiq2LfYqNmK2YLYp9iqINin2YTYudin2K/ZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iNzM1ODM3ODQwMTkxNTI4NzkzOCI+Itin2YTYp9mE2KrYstin2YUg2KjYrtiv2YXYqSDYpdiv2K7Yp9mEINin2YTZhti12YjYtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiLZhNmE2LPZhdin2K0g2YTZhNmF2KfZhNmDINio2KfZhNin2YTYqtiy2KfZhSDYqNmI2KfYrNmH2Kkg2KfZhNmF2LPYqtmI2Ykg2KfZhNi52YTZiNmKINmE2K7Yr9mF2Kkg2KXYr9iu2KfZhCDYp9mE2YbYtdmI2LUgKNi52YTZiSDYs9io2YrZhCDYp9mE2YXYq9in2YTYjCBTcGVsbENoZWNrZXJTZXJ2aWNlKS4g2YTZhiDYqtmD2YjZhiDZh9mG2KfZgyDYrdin2KzYqSDYpdmE2YrZhyDZhdi32YTZgtmL2Kcg2YXYuSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjQ3MDg1OTYwMjExNjE0NzMyNTUiPiLYp9mE2KfZhNiq2LLYp9mFINio2K7Yr9mF2KkgVlBOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i2YTZhNiz2YXYp9itINmE2YTZhdin2YTZgyDYqNin2YTYp9mE2KrYstin2YUg2KjZiNin2KzZh9ipINin2YTZhdiz2KrZiNmJINin2YTYudmE2YjZiiDZhNiu2K/ZhdipINin2YTYtNio2YPYqSDYp9mE2LjYp9mH2LHZitipINin2YTYrtin2LXYqSAoVlBOKS4g2YTZhiDYqtmD2YjZhiDZh9mG2KfZgyDYrdin2KzYqSDYpdmE2YrZhyDZhdi32YTZgtmL2Kcg2YXYuSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iODE1MTk2ODkxMDk3Mzk5ODY3MCI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2YXYp9mE2YMg2KjYp9mE2KfZhNiq2LLYp9mFINio2YjYp9is2YfYqSDYp9mE2YXYs9iq2YjZiSDYp9mE2LnZhNmI2Yog2YTYrtiv2YXYqSDYpdiv2K7Yp9mEINin2YTZhti12YjYtSAo2LnZhNmJINiz2KjZitmEINin2YTZhdir2KfZhNiMIFNwZWxsQ2hlY2tlclNlcnZpY2UpLiDZhNmGINiq2YPZiNmGINmH2YbYp9mDINit2KfYrNipINil2YTZitmHINmF2LfZhNmC2YvYpyDZhdi5INin2YTYqti32KjZitmC2KfYqiDYp9mE2LnYp9iv2YrYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iNDcwODU5NjAyMTE2MTQ3MzI1NSI+IuKAj9in2YTYp9mE2KrYstin2YUg2KjYrtiv2YXYqSBWUE4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNmF2KfZhNmDINio2KfZhNin2YTYqtiy2KfZhSDYqNmI2KfYrNmH2Kkg2KfZhNmF2LPYqtmI2Ykg2KfZhNi52YTZiNmKINmE2K7Yr9mF2Kkg2KfZhNi02KjZg9ipINin2YTYuNin2YfYsdmK2Kkg2KfZhNiu2KfYtdipIChWUE4pLiDZhNmGINiq2YPZiNmGINmH2YbYp9mDINit2KfYrNipINil2YTZitmHINmF2LfZhNmC2YvYpyDZhdi5INin2YTYqti32KjZitmC2KfYqiDYp9mE2LnYp9iv2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i2KfZhNin2YTYqtiy2KfZhSDYqNiu2YTZgdmK2Kkg2YXYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i2YTZhNiz2YXYp9itINmE2YTZhdin2YTZgyDYqNin2YTYp9mE2KrYstin2YUg2KjZiNin2KzZh9ipINin2YTZhdiz2KrZiNmJINin2YTYudmE2YjZiiDZhNmE2K7ZhNmB2YrYqS4g2YTZhiDYqtmD2YjZhiDZh9mG2KfZgyDYrdin2KzYqSDYpdmE2YrZhyDZhdi32YTZgtmL2Kcg2YXYuSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLYp9mE2LHYqNi3INio2KfZhNi02KfYtNipINi52YYg2KjZj9i52K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLZhNmE2LPZhdin2K0g2YTZhNmF2KfZhNmDINio2KfZhNin2YTYqtiy2KfZhSDYqNmI2KfYrNmH2Kkg2KfZhNmF2LPYqtmI2Ykg2KfZhNi52YTZiNmKINmE2YTYudix2LYg2LnZhiDYqNmP2LnYry4g2YTZhiDYqtmD2YjZhiDZh9mG2KfZgyDYrdin2KzYqSDYpdmE2YrZhyDZhdi32YTZgtmL2Kcg2YXYuSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i2KfZhNin2YTYqtiy2KfZhSDYqNiu2K/ZhdipINij2K/Yp9ipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+ItmE2YTYs9mF2KfYrSDZhNmE2YXYp9mE2YMg2KjYp9mE2KfZhNiq2LLYp9mFINio2YjYp9is2YfYqSDYp9mE2YXYs9iq2YjZiSDYp9mE2LnZhNmI2Yog2YTYrtiv2YXYqSDYp9mE2KPYr9in2KkuINmE2YYg2KrZg9mI2YYg2YfZhtin2YMg2K3Yp9is2Kkg2KXZhNmK2Ycg2YXYt9mE2YLZi9inINmF2Lkg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYudin2K/ZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+Itin2YTYqtmB2KfYudmEINmF2Lkg2YXYtNix2YEg2KfZhNis2YfYp9iyIjwvc3RyaW5nPgpAQCAtMzg5LDEzICszOTYsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjY4NjY1NjMyMzQyNzQxMDQyMzMiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqti62YrZitixINiz2LHYudipINmF2KTYtNixINin2YTZhdin2YjYsyDYo9mIINmE2YjYrdipINin2YTYqtiq2KjYuSDZgdmKINij2Yog2YjZgtiqLiDZhNmGINiq2YPZiNmGINmH2YbYp9mDINit2KfYrNipINil2YTZitmHINmF2LfZhNmC2YvYpyDZhdi5INin2YTYqti32KjZitmC2KfYqiDYp9mE2LnYp9iv2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iNDc3ODczMTcwMzYwMDkwOTM0MCI+Itiq2LrZitmK2LEg2KrZhtiz2YrZgiDZhNmI2K3YqSDZhdmB2KfYqtmK2K0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRLZXlib2FyZExheW91dCIgbXNnaWQ9Ijg0ODAwMTY3NzExMzQxNzU4NzkiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqti62YrZitixINiq2YbYs9mK2YIg2YTZiNit2Kkg2KfZhNmF2YHYp9iq2YrYrS4g2YTZhiDYqtmD2YjZhiDZh9mG2KfZgyDYrdin2KzYqSDYpdmE2YrZhyDZhdi32YTZgtmL2Kcg2YXYuSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+Itil2LHYs9in2YQg2KXYtNin2LHYp9iqIExpbnV4INmE2YTYqti32KjZitmC2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ1MzkwMDI5OTE5NDczNzY2NTkiPiLigI/Ypdix2LPYp9mEINil2LTYp9ix2KfYqiBMaW51eCDZhNmE2KrYt9io2YrZgtin2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDg5Njk5MjA3OTE4MjY0OTE0MSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNi32YTYqCDYpdix2LPYp9mEINin2YTYpdi02KfYsdipINin2YTZhdiy2YjZkdiv2Kkg2YTYrNmF2YrYuSDYp9mE2LnZhdmE2YrYp9iqINin2YTZhdiz2KrZhdix2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4i2KrYtNi62YrZhCDYp9mE2KrYt9io2YrZgiDYr9in2KbZhdmL2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg1MjUxODkyNzIzMjkwODYxMzciPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYrNi52YQg2KPYrNiy2KfYoSDZhdmG2Ycg2KvYp9io2KrYqSDZgdmKINin2YTYsNin2YPYsdipLiDZiNmC2K8g2YrYpNiv2Yog2YfYsNinINil2YTZiSDYqtmC2YrZitivINin2YTYsNin2YPYsdipINin2YTZhdiq2KfYrdipINmE2YTYqti32KjZitmC2KfYqiDYp9mE2KPYrtix2Ykg2YXZhdinINmK2KTYr9mKINil2YTZiSDYrdiv2YjYqyDYqNi32KEg2YHZiiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzODQ3NjAwNDc1MDgyNzgyNzIiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYrNi52YQg2KPYrNiy2KfYoSDZhdmG2Ycg2KvYp9io2KrYqSDZgdmKINin2YTYsNin2YPYsdipLiDZiNmC2K8g2YrYpNiv2Yog2YfYsNinINil2YTZiSDYqtmC2YrZitivINin2YTYsNin2YPYsdipINin2YTZhdiq2KfYrdipINmE2YTYqti32KjZitmC2KfYqiDYp9mE2KPYrtix2Ykg2YXZhdinINmK2KTYr9mKINil2YTZiSDYrdiv2YjYqyDYqNi32KEg2YHZiiDYp9mE2YfYp9iq2YEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVQYWNrYWdlcyIgbXNnaWQ9IjE4NDM4NTEyOTUzNzcwNTkzOCI+Itit2LDZgSDYp9mE2KrYt9io2YrZgtin2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYrdiw2YEg2K3YstmFIEFuZHJvaWQuINmK2YXZg9mGINij2YYg2KrYs9iq2K7Yr9mFINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2LDZhNmDINmE2K3YsNmBINin2YTYqti32KjZitmC2KfYqiDYp9mE2YXZh9mF2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSI3NDExNDgwMjc1MTY3MjA1MDgxIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2K3YsNmBINit2LLZhSBBbmRyb2lkLiDZitmF2YPZhiDYo9mGINiq2LPYqtiu2K/ZhSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINiw2YTZgyDZhNit2LDZgSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNmF2YfZhdipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjI3NDEwOTE5MTg0NTg0Mjc1NiI+Itit2LDZgSDYqNmK2KfZhtin2Kog2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYo9iu2LHZiSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSI0NjI1MzIzNjg0MTI1NDU5NDg4Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2YXYrdmIINio2YrYp9mG2KfYqiDYp9mE2YXYs9iq2K7Yr9mFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjMxMjg2NjU1NzE4Mzc0MDg2NzUiPiLYrdiw2YEg2LDYp9mD2LHYp9iqINin2YTYqtiu2LLZitmGINin2YTZhdik2YLYqiDZhNmE2KrYt9io2YrZgtin2Kog2KfZhNij2K7YsdmJIjwvc3RyaW5nPgpAQCAtNDAzLDcgKzQxMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iNzQ3MjkyMTc2ODM1Nzk4MTk4NiI+ItmC2YrYp9izINmF2LPYp9it2Kkg2KrYrtiy2YrZhiDYp9mE2KrYt9io2YrZgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iMzkyMTA2ODE1NDQyMDczODI5NiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2LPYqtix2K/Yp9ivINi02YHYsdiq2Ycg2YjYqNmK2KfZhtin2KrZhyDZiNij2K3YrNin2YUg2LDYp9mD2LHYp9iqINin2YTYqtiu2LLZitmGINin2YTZhdik2YLYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iMjE5OTEyODQ4MjgyMDMwNjkyNCI+Itiq2KvYqNmK2Kog2KfZhNiq2LfYqNmK2YLYp9iqINmF2KjYp9i02LHYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtir2KjZitiqINit2LLZhSBBbmRyb2lkINin2YTYrNiv2YrYr9ipINij2Ygg2KfZhNmF2K3Yr9mR2KvYqS4g2YrZhdmD2YYg2KPZhiDYqtiz2KrYrtiv2YUg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYsNmE2YMg2YTYpdi22KfZgdipINiq2LfYqNmK2YLYp9iqINis2K/Zitiv2Kkg2LDYp9iqINij2LDZiNmG2KfYqiDZgtmI2YrYqSDYudmE2Ykg2YbYrdmIINi52LTZiNin2KbZii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSI1NjI4NTMwOTcyNTQ4MDcxMjg0Ij4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYq9io2YrYqiDYrdiy2YUgQW5kcm9pZCDYp9mE2KzYr9mK2K/YqSDYo9mIINin2YTZhdit2K/Zkdir2KkuINmK2YXZg9mGINij2YYg2KrYs9iq2K7Yr9mFINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2LDZhNmDINmE2KXYttin2YHYqSDYqti32KjZitmC2KfYqiDYrNiv2YrYr9ipINiw2KfYqiDYo9iw2YjZhtin2Kog2YLZiNmK2Kkg2LnZhNmJINmG2K3ZiCDYudi02YjYp9im2YouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcENhY2hlIiBtc2dpZD0iNzQ4NzI3OTM5MTcyMzUyNjgxNSI+Itit2LDZgSDYrNmF2YrYuSDYqNmK2KfZhtin2Kog2LDYp9mD2LHYqSDYp9mE2KrYrtiy2YrZhiDYp9mE2YXYpNmC2Kog2YTZhNiq2LfYqNmK2YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTc0NjQwODcxOTQ1NDM0NTY1Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrZgdix2YrYuiDYs9i52Kkg2KrYrtiy2YrZhiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINmF2YYg2K7ZhNin2YQg2K3YsNmBINin2YTZhdmE2YHYp9iqINmF2YYg2KPYr9mE2Kkg2LDYp9mD2LHYqSDYp9mE2KrYrtiy2YrZhiDYp9mE2YXYpNmC2Kog2YTZhNiq2LfYqNmK2YLYp9iqINin2YTYo9iu2LHZiS4g2YLYryDZitiq2LPYqNioINmH2LDYpyDZgdmKINiq2LTYutmK2YQg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYo9iu2LHZiSDYqNi02YPZhCDYo9mD2KvYsSDYqNi32KbZi9inINit2YrYqyDZitmE2LLZhdmH2Kcg2KXYudin2K/YqSDYp9iz2KrYsdiv2KfYryDYqNmK2KfZhtin2KrZh9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNDU5NDQxMDIxOTU2NDM2Nzc5Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrZgdix2YrYuiDZhdiz2KfYrdipINiq2K7YstmK2YYg2KfZhNmH2KfYqtmBINmF2YYg2K7ZhNin2YQg2K3YsNmBINin2YTZhdmE2YHYp9iqINmF2YYg2KPYr9mE2Kkg2LDYp9mD2LHYqSDYp9mE2KrYrtiy2YrZhiDYp9mE2YXYpNmC2Kog2YTZhNiq2LfYqNmK2YLYp9iqINin2YTYo9iu2LHZiS4g2YLYryDZitiq2LPYqNioINmH2LDYpyDZgdmKINiq2LTYutmK2YQg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYo9iu2LHZiSDYqNi02YPZhCDYo9mD2KvYsSDYqNi32KbZi9inINit2YrYqyDZitmE2LLZhdmH2Kcg2KXYudin2K/YqSDYp9iz2KrYsdiv2KfYryDYqNmK2KfZhtin2KrZh9inLiI8L3N0cmluZz4KQEAgLTQxNSw5ICs0MjIsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4i2KfYs9iq2K7Yr9in2YUg2KPZiiDYqNix2YbYp9mF2Kwg2YHZgyDYqti02YHZitixINmI2LPYp9im2Lcg2YXZhiDYo9is2YQg2KfZhNiq2LTYutmK2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iODI4MzkxMjQ4ODQzMzE4OTAxMCI+Itin2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2LPYqtiu2K/Yp9mFINij2Yog2KjYsdmG2KfZhdisINmB2YMg2KrYtNmB2YrYsSDZiNiz2KfYpti3INmF2KvYqNiqINmE2YHZgyDYp9mE2KrYtNmB2YrYsSDZhdmGINij2KzZhCDYp9mE2KrYtNi62YrZhC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iMTY3ODM5MTg5Njc4Njg4MjAxNCI+Itil2K/Yp9ix2Kkg2KjZitin2YbYp9iqINin2YTYp9i52KrZhdin2K8g2KfZhNmF2YjYq9mI2YLYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iNDAxNTY0NDA0NzE5NjkzNzAxNCI+Itin2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2KvYqNmK2Kog2LTZh9in2K/Yp9iqIENBINmI2KXZhNi62KfYoSDYqtir2KjZitiq2YfYpyDYqNin2LnYqtio2KfYsdmH2Kcg2KjZitin2YbYp9iqINin2LnYqtmF2KfYryDZhdit2YQg2KvZgtipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iNDAxNTY0NDA0NzE5NjkzNzAxNCI+IuKAj9in2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2KvYqNmK2Kog2LTZh9in2K/Yp9iqIENBINmI2KXZhNi62KfYoSDYqtir2KjZitiq2YfYpyDYqNin2LnYqtio2KfYsdmH2Kcg2KjZitin2YbYp9iqINin2LnYqtmF2KfYryDZhdit2YQg2KvZgtipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlhZ25vc3RpYyIgbXNnaWQ9IjgwNzY3NDM5NTM5MDgwMDAzNDIiPiLZgtix2KfYodipL9mD2KrYp9io2Kkg2KXZhNmJINin2YTZhdmI2KfYsdivINin2YTZhdmF2YTZiNmD2Kkg2KjZiNin2LPYt9ipINin2YTYqti02K7Ziti1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlhZ25vc3RpYyIgbXNnaWQ9IjY2MDgyOTU2OTIwMDI0NTIyODMiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2YLYsdin2KHYqSDZiNin2YTZg9iq2KfYqNipINil2YTZiSDYo9mKINmF2YjYsdivINmF2YXZhNmI2YMg2KjZiNin2LPYt9ipINmF2KzZhdmI2LnYqSDYp9mE2KrYtNiu2YrYtdin2KrYmyDYudmE2Ykg2LPYqNmK2YQg2KfZhNmF2KvYp9mE2Iwg2KfZhNmF2YTZgdin2Kog2YHZiiAvZGV2LiDZhdmGINin2YTZhdit2KrZhdmEINij2YYg2YrYpNir2LEg2LDZhNmDINmB2Yog2KfYs9iq2YLYsdin2LEg2KfZhNmG2LjYp9mFINmI2KPZhdin2YbZhy4g2YrYrNioINij2YTYpyDZitiz2KrYrtiv2YUg2LDZhNmDINiz2YjZiSDZhNmE2KrYtNiu2YrYtdin2Kog2KfZhNiu2KfYtdipINio2KfZhNmG2LjYp9mFINmF2YYg2YLZkNio2YQg2KfZhNmF2LXZhtmQ2ZHYuSDYo9mIINin2YTZhdi02LrZkNmR2YQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlhZ25vc3RpYyIgbXNnaWQ9IjY2MDgyOTU2OTIwMDI0NTIyODMiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2YLYsdin2KHYqSDZiNin2YTZg9iq2KfYqNipINil2YTZiSDYo9mKINmF2YjYsdivINmF2YXZhNmI2YMg2KjZiNin2LPYt9ipINmF2KzZhdmI2LnYqSDYp9mE2KrYtNiu2YrYtdin2KrYmyDYudmE2Ykg2LPYqNmK2YQg2KfZhNmF2KvYp9mE2Iwg2KfZhNmF2YTZgdin2Kog2YHZiiAvZGV2LiDZhdmGINin2YTZhdit2KrZhdmEINij2YYg2YrYpNir2LEg2LDZhNmDINmB2Yog2KfYs9iq2YLYsdin2LEg2KfZhNmG2LjYp9mFINmI2KPZhdin2YbZhy4g2YrYrNioINij2YTYpyDZitiz2KrYrtiv2YUg2LDZhNmDINiz2YjZiSDZhNmE2KrYtNiu2YrYtdin2Kog2KfZhNiu2KfYtdipINio2KfZhNmG2LjYp9mFINmF2YYg2YLZkNio2YQg2KfZhNmF2LXZhtmQ2ZHYuSDYo9mIINin2YTZhdi02LrZkNmR2YQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb21wb25lbnRTdGF0ZSIgbXNnaWQ9IjYzMzU1NzY3NzU3MTEwOTU5MzEiPiLYqtmF2YPZitmGINmF2YPZiNmG2KfYqiDYp9mE2KrYt9io2YrZgiDYo9mIINiq2LnYt9mK2YTZh9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqti62YrZitixINmF2Kcg2KXYsNinINmD2KfZhiDYs9mK2KrZhSDYqtmF2YPZitmGINmF2YPZiNmGINmE2KrYt9io2YrZgiDYotiu2LEg2KPZhSDZhNinLiDZitmF2YPZhiDYo9mGINiq2LPYqtiu2K/ZhSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINiw2YTZgyDZhNiq2LnYt9mK2YQg2YLYr9ix2KfYqiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINin2YTZhdmH2YXYqS4g2YrYrNioINiq2YjYrtmKINin2YTYrdiw2LEg2LnZhtivINin2LPYqtiu2K/Yp9mFINmH2LDYpyDYp9mE2KXYsNmG2Iwg2YjYsNmE2YMg2YTYo9mG2Ycg2YXZhiDYp9mE2YXZhdmD2YYg2KPZhiDZitik2K/ZiiDYsNmE2YMg2KXZhNmJINis2LnZhCDYrdin2YTYqSDZhdmD2YjZhtin2Kog2KfZhNiq2LfYqNmK2YIg2LrZitixINmC2KfYqNmE2Kkg2YTZhNin2LPYqtiu2K/Yp9mFINij2Ygg2LrZitixINmF2KrZhtin2LPZgtipINij2Ygg2LrZitixINmF2LPYqtmC2LHYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4MjcyMzI0ODQ0MTY1MDU2MTUiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqti62YrZitixINmF2Kcg2KXYsNinINmD2KfZhiDYs9mK2KrZhSDYqtmF2YPZitmGINmF2YPZiNmGINmE2KrYt9io2YrZgiDYotiu2LEg2KPZhSDZhNinLiDZitmF2YPZhiDYo9mGINiq2LPYqtiu2K/ZhSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINiw2YTZgyDZhNiq2LnYt9mK2YQg2YLYr9ix2KfYqiDYp9mE2YfYp9iq2YEg2KfZhNmF2YfZhdipLiDZitis2Kgg2KrZiNiu2Yog2KfZhNit2LDYsSDYudmG2K8g2KfYs9iq2K7Yr9in2YUg2YfYsNinINin2YTYpdiw2YbYjCDZiNiw2YTZgyDZhNij2YbZhyDZhdmGINin2YTZhdmF2YPZhiDYo9mGINmK2KTYr9mKINiw2YTZgyDYpdmE2Ykg2KzYudmEINit2KfZhNipINmF2YPZiNmG2KfYqiDYp9mE2KrYt9io2YrZgiDYutmK2LEg2YLYp9io2YTYqSDZhNmE2KfYs9iq2K7Yr9in2YUg2KPZiCDYutmK2LEg2YXYqtmG2KfYs9mC2Kkg2KPZiCDYutmK2LEg2YXYs9iq2YLYsdipLiI8L3N0cmluZz4KQEAgLTQyOSw4ICs0MzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9Ijc3NzU3MjM0NDE1NTg5MDcxODEiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqti52K/ZitmEINio2YrYp9mG2KfYqiDYpdi52K/Yp9iv2KfYqiDYp9mE2YbYuNin2YUuINmK2YXZg9mGINij2YYg2KrYqtmE2YEg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYqtmH2YrYptipINmG2LjYp9mF2YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iMjA0Njc2MjUxODc2NzE4Mjg4Ij4i2KrYudiv2YrZhCDYpdi52K/Yp9iv2KfYqiDYp9mE2YbYuNin2YUg2KfZhNii2YXZhtipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjgxNTk1MzU2MTMwMjAxMzczOTEiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqti52K/ZitmEINio2YrYp9mG2KfYqiDYp9mE2KXYudiv2KfYr9in2Kog2KfZhNii2YXZhtipINmE2YTZhti42KfZhS4g2YTZhiDYqtmD2YjZhiDZh9mG2KfZgyDYrdin2KzYqSDYpdmE2YrZhyDZhdi32YTZgtmL2Kcg2YXYuSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiLYqti52K/ZitmEINiu2LHZiti32Kkg2K7Yr9mF2KfYqiBHb29nbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqti52K/ZitmEINiu2LHZiti32Kkg2K7Yr9mF2KfYqiBHb29nbGUuINmE2YrYsyDZhNmE2KfYs9iq2K7Yr9in2YUg2KjZiNin2LPYt9ipINin2YTYqti32KjZitmC2KfYqiDYp9mE2LnYp9iv2YrYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR3NlcnZpY2VzIiBtc2dpZD0iMjE0OTQyNjY2NDIyNjE1MjE4NSI+IuKAj9iq2LnYr9mK2YQg2K7YsdmK2LfYqSDYrtiv2YXYp9iqIEdvb2dsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlR3NlcnZpY2VzIiBtc2dpZD0iMTI4NzMwOTQzNzYzODM4MDIyOSI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2LnYr9mK2YQg2K7YsdmK2LfYqSDYrtiv2YXYp9iqIEdvb2dsZS4g2YTZitizINmE2YTYp9iz2KrYrtiv2KfZhSDYqNmI2KfYs9i32Kkg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYudin2K/ZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4i2KfZhNi52YXZhCDYudmG2K8g2KjYr9ihINin2YTYqti02LrZitmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczOTAzMDQ2NjQxMTY4ODA3MDQiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqNiv2KEg2KrYtNi62YrZhCDZhtmB2LPZhyDYudmC2Kgg2KfZhtiq2YfYp9ihINin2YTZhti42KfZhSDZhdmGINin2YTYqti02LrZitmELiDZgtivINmK2KTYr9mKINiw2YTZgyDYpdmE2Ykg2KfYs9iq2LrYsdin2YIg2KfZhNmF2LLZitivINmF2YYg2KfZhNmI2YLYqiDYudmG2K8g2KjYr9ihINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2Yog2YjYp9mE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYpdio2LfYp9ihINin2YTYo9iv2KfYoSDYp9mE2KXYrNmF2KfZhNmKINmE2YTYrNmH2KfYsiDYp9mE2YTZiNit2Yog2YXZhiDYrtmE2KfZhCDYqti02LrZitmE2Ycg2K/Yp9im2YXZi9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTEzOTUwNTg5MTAyNjE3NTA0Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KjYr9ihINiq2LTYutmK2YQg2YbZgdiz2Ycg2LnZgtioINin2YbYqtmH2KfYoSDYp9mE2YbYuNin2YUg2YXZhiDYp9mE2KrYtNi62YrZhC4g2YLYryDZitik2K/ZiiDYsNmE2YMg2KXZhNmJINin2LPYqti62LHYp9mCINin2YTZhdiy2YrYryDZhdmGINin2YTZiNmC2Kog2LnZhiDYqNiv2KEg2KfZhNmH2KfYqtmBINmI2KfZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KXYqNi32KfYoSDYp9mE2KPYr9in2KEg2KfZhNil2KzZhdin2YTZiiDZhNmE2YfYp9iq2YEg2K3ZitirINmK2KrZhSDYqti02LrZitmE2Ycg2K/Yp9im2YXZi9inLiI8L3N0cmluZz4KQEAgLTQ2NCwyMyArNDcxLDI1IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2Njc5MDM1NTIwMTEzNjY4NTI4Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KXYttin2YHYqSDYo9mIINil2LLYp9mE2Kkg2KPZiCDYqti62YrZitixINin2YTYo9it2K/Yp9irINin2YTYqtmKINmK2YXZg9mG2YMg2KrYudiv2YrZhNmH2Kcg2LnZhNmJINis2YfYp9iy2YMg2KfZhNmE2YjYrdmK2Iwg2KjZhdinINmB2Yog2LDZhNmDINij2K3Yr9in2Ksg2KfZhNij2LXYr9mC2KfYoSDYo9mIINiy2YXZhNin2KEg2KfZhNi52YXZhC4g2YjZgtivINmK2KrZititINmH2LDYpyDZhNmE2KrYt9io2YrZgiDYpdix2LPYp9mEINix2LPYp9im2YQg2YrYqNiv2Ygg2KPZhtmH2Kcg2YjYp9ix2K/YqSDZhdmGINij2LXYrdin2Kgg2KfZhNiq2YLZiNmK2YUg2KPZiCDYqti52K/ZitmEINin2YTYo9it2K/Yp9irINio2K/ZiNmGINmF2LnYsdmB2Kkg2KfZhNmF2KfZhNmD2YrZhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNil2LbYp9mB2Kkg2KPZiCDYpdiy2KfZhNipINij2Ygg2KrYutmK2YrYsSDYp9mE2KPYrdiv2KfYqyDYp9mE2KrZiiDZitmF2YPZhtmDINiq2LnYr9mK2YTZh9inINi52YTZiSDZh9in2KrZgdmD2Iwg2KjZhdinINmB2Yog2LDZhNmDINij2K3Yr9in2Ksg2KfZhNij2LXYr9mC2KfYoSDYo9mIINiy2YXZhNin2KEg2KfZhNi52YXZhC4g2YjZgtivINmK2KrZititINmH2LDYpyDZhNmE2KrYt9io2YrZgiDYpdix2LPYp9mEINix2LPYp9im2YQg2YrYqNiv2Ygg2KPZhtmH2Kcg2YjYp9ix2K/YqSDZhdmGINij2LXYrdin2Kgg2KfZhNiq2YLZiNmK2YUg2KPZiCDYqti52K/ZitmEINin2YTYo9it2K/Yp9irINio2K/ZiNmGINmF2LnYsdmB2Kkg2KfZhNmF2KfZhNmD2YrZhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9Ijg2ODgzMzQ5NzQwMzY4MjMzMzAiPiLZhdi12KfYr9ixINmF2YjYp9mC2Lkg2YjZh9mF2YrYqSDZhNmE2KfYrtiq2KjYp9ixIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+ItmE2KXZhti02KfYoSDZhdi12KfYr9ixINmF2YjYp9mC2Lkg2LLYp9im2YHYqSDZhNmE2KfYrtiq2KjYp9ixINij2Ygg2KrYq9io2YrYqiDZhdmI2YHYsSDZhdmI2KfZgti5INis2K/ZitivLiDZitiq2YrYrSDZh9iw2Kcg2YTZhNiq2LfYqNmK2YIg2KXZhNi62KfYoSDYp9mE2YXZiNmC2Lkg2Ygv2KPZiCDYp9mE2K3Yp9mE2Kkg2KfZhNiq2Yog2KrYudix2LbZh9inINmF2LXYp9iv2LEg2KfZhNmF2YjYp9mC2Lkg2KfZhNij2K7YsdmJINmF2KvZhCBHUFMg2KPZiCDZhdmI2YHYsdmKINin2YTZhdmI2KfZgti5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9IjU4MDg3MTEwMzk0ODIwNTE4MjQiPiLigI/ZhNil2YbYtNin2KEg2YXYtdin2K/YsSDZhdmI2KfZgti5INiy2KfYptmB2Kkg2YTZhNin2K7Yqtio2KfYsSDYo9mIINiq2KvYqNmK2Kog2YXZiNmB2LEg2YXZiNin2YLYuSDYrNiv2YrYry4g2YrYqtmK2K0g2YfYsNinINmE2YTYqti32KjZitmCINil2YTYutin2KEg2KfZhNmF2YjZgti5INmIL9ij2Ygg2KfZhNit2KfZhNipINin2YTYqtmKINiq2LnYsdi22YfYpyDZhdi12KfYr9ixINin2YTZhdmI2KfZgti5INin2YTYo9iu2LHZiSDZhdir2YQgR1BTINij2Ygg2YXZiNmB2LHZiiDYp9mE2YXZiNin2YLYuS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjI4MzYzMDgwNzY3MjA1NTM4MzciPiLYp9mE2K/YrtmI2YQg2KXZhNmJINin2YTZhdiy2YrYryDZhdmGINij2YjYp9mF2LEg2YXZiNmB2LEg2KfZhNmF2YjZgti5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iNTk0NTE2NjY0MjMzNTgwMDc2MyI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYr9iu2YjZhCDYpdmE2Ykg2KfZhNmF2LLZitivINmF2YYg2KPZiNin2YXYsSDZhdmI2YHYsSDYrtiv2YXYqSDYp9mE2YXZiNmC2LkuINmI2YLYryDZitiq2YrYrSDZh9iw2Kcg2YTZhNiq2LfYqNmK2YIg2KfZhNiq2K/YrtmEINmB2Yog2LnZhdmEIEdQUyDYo9mIINmF2LXYp9iv2LEg2KfZhNmF2YjYp9mC2Lkg2KfZhNij2K7YsdmJLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2K/YrtmI2YQg2KXZhNmJINin2YTZhdiy2YrYryDZhdmGINij2YjYp9mF2LEg2YXZiNmB2LEg2K7Yr9mF2Kkg2KfZhNmF2YjZgti5LiDZiNmC2K8g2YrYqtmK2K0g2YfYsNinINmE2YTYqti32KjZitmCINin2YTYqtiv2K7ZhCDZgdmKINi52YXZhCBHUFMg2KPZiCDZhdi12KfYr9ixINin2YTZhdmI2KfZgti5INin2YTYo9iu2LHZiS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iNjU3ODEwMTE5OTgyNTE5Mzg3MyI+Itil2LDZhiDZhNiq2KvYqNmK2Kog2YXZiNmB2LEg2K7Yr9mF2Kkg2YXZiNmC2LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjkwNjYxNDYxMjA0NzA1OTE1MDkiPiLZhNil2YbYtNin2KEg2YXYtdin2K/YsSDZhdmI2KfZgti5INiy2KfYptmB2Kkg2YTZhNin2K7Yqtio2KfYsSDYo9mIINiq2KvYqNmK2Kog2YXZiNmB2LEg2YXZiNin2YLYuSDYrNiv2YrYry4g2YrYqtmK2K0g2YfYsNinINmE2YTYqti32KjZitmCINil2YTYutin2KEg2KfZhNmF2YjZgti5INmIL9ij2Ygg2KfZhNit2KfZhNipINin2YTYqtmKINiq2LnYsdi22YfYpyDZhdi12KfYr9ixINin2YTZhdmI2KfZgti5INin2YTYo9iu2LHZiSDZhdir2YQgR1BTINij2Ygg2YXZiNmB2LHZiiDYp9mE2YXZiNin2YLYuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjkwNjYxNDYxMjA0NzA1OTE1MDkiPiLigI/ZhNil2YbYtNin2KEg2YXYtdin2K/YsSDZhdmI2KfZgti5INiy2KfYptmB2Kkg2YTZhNin2K7Yqtio2KfYsSDYo9mIINiq2KvYqNmK2Kog2YXZiNmB2LEg2YXZiNin2YLYuSDYrNiv2YrYry4g2YrYqtmK2K0g2YfYsNinINmE2YTYqti32KjZitmCINil2YTYutin2KEg2KfZhNmF2YjZgti5INmIL9ij2Ygg2KfZhNit2KfZhNipINin2YTYqtmKINiq2LnYsdi22YfYpyDZhdi12KfYr9ixINin2YTZhdmI2KfZgti5INin2YTYo9iu2LHZiSDZhdir2YQgR1BTINij2Ygg2YXZiNmB2LHZiiDYp9mE2YXZiNin2YLYuS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiLYp9mE2YXZiNmC2Lkg2KfZhNiv2YLZitmCICjZhdiz2KrZhtivINil2YTZiSDZhti42KfZhSDYqtit2K/ZitivINin2YTZhdmI2KfZgti5INin2YTYudin2YTZhdmKINmI2KfZhNi02KjZg9ipKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjUyOTUwNDc1NjM1NjQ5ODEyNTAiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtit2K/ZitivINmF2YjZgti52YMg2KjYr9mC2Kkg2YjZh9iw2Kcg2KjYp9iz2KrYrtiv2KfZhSDZhti42KfZhSDYqtit2K/ZitivINin2YTZhdmI2KfZgti5INin2YTYudin2YTZhdmKIChHUFMpINij2Ygg2YXYtdin2K/YsSDYp9mE2YXZiNin2YLYuSDYp9mE2KrZiiDYqtiz2KrYrtiv2YUg2KfZhNi02KjZg9in2Kog2YXYq9mEINij2KjYsdin2Kwg2KfZhNis2YjYp9mEINij2Ygg2KrZgtmG2YrYqSBXaS1GaS4g2YrYqti52YrZhiDYqtmI2YHYsSDYrtiv2YXYp9iqINin2YTZhdmI2KfZgti5INmH2LDZhyDZiNiq2LTYutmK2YTZh9inINi52YTZiSDYrNmH2KfYstmDINmE2YTYqti32KjZitmCINmD2Yog2YrYs9iq2K7Yr9mF2YfYpy4g2YjZgtivINiq2LPYqtiu2K/ZhSDYp9mE2KrYt9io2YrZgtin2Kog2YfYsNinINmE2KrYrdiv2YrYryDZhdmI2YLYudmDINmI2YLYryDYqtiz2KrZh9mE2YMg2YXYstmK2K/Zi9inINmF2YYg2LfYp9mC2Kkg2KfZhNio2LfYp9ix2YrYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYrdiv2YrYryDZhdmI2YLYudmDINio2K/ZgtipINmI2YfYsNinINio2KfYs9iq2K7Yr9in2YUg2YbYuNin2YUg2KrYrdiv2YrYryDYp9mE2YXZiNin2YLYuSDYp9mE2LnYp9mE2YXZiiAoR1BTKSDYo9mIINmF2LXYp9iv2LEg2KfZhNmF2YjYp9mC2Lkg2KfZhNiq2Yog2KrYs9iq2K7Yr9mFINin2YTYtNio2YPYp9iqINmF2KvZhCDYo9io2LHYp9isINin2YTYrNmI2KfZhCDYo9mIINiq2YLZhtmK2KkgV2ktRmkuINmK2KrYudmK2YYg2KrZiNmB2LEg2K7Yr9mF2KfYqiDYp9mE2YXZiNin2YLYuSDZh9iw2Ycg2YjYqti02LrZitmE2YfYpyDYudmE2Ykg2KzZh9in2LLZgyDZhNmE2KrYt9io2YrZgiDZg9mKINmK2LPYqtiu2K/ZhdmH2KcuINmI2YLYryDYqtiz2KrYrtiv2YUg2KfZhNiq2LfYqNmK2YLYp9iqINmH2LDYpyDZhNiq2K3Yr9mK2K8g2YXZiNmC2LnZgyDZiNmC2K8g2KrYs9iq2YfZhNmDINmF2LLZitiv2YvYpyDZhdmGINi32KfZgtipINin2YTYqNi32KfYsdmK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjQ4ODc4OTUzNjIzNTQyMzk2MjgiPiLYp9mE2YXZiNmC2Lkg2KfZhNiq2YLYsdmK2KjZiiAo2YXYs9iq2YbYryDYpdmE2Ykg2KfZhNi02KjZg9ipKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2K3Yr9mK2K8g2YXZiNmC2LnZgyDYp9mE2KrZgtix2YrYqNmKINin2YTYsNmKINmK2LPYqtmF2K8g2YXZhiDYrtiv2YXYp9iqINin2YTZhdmI2YLYuSDYqNin2LPYqtiu2K/Yp9mFINmF2LXYp9iv2LEg2KfZhNmF2YjYp9mC2Lkg2KfZhNiq2Yog2KrYs9iq2K7Yr9mFINin2YTYtNio2YPYp9iqINmF2KvZhCDYo9io2LHYp9isINin2YTYrNmI2KfZhCDZiNiq2YLZhtmK2KkgV2ktRmkuINmK2KrYudmK2YYg2KrZiNmB2LEg2K7Yr9mF2KfYqiDYp9mE2YXZiNin2YLYuSDZh9iw2Ycg2YjYqti02LrZitmE2YfYpyDYudmE2Ykg2KzZh9in2LLZgyDZhNmE2KrYt9io2YrZgiDZg9mKINmK2LPYqtiu2K/ZhdmH2KcuINmI2YLYryDYqtiz2KrYrtiv2YUg2KfZhNiq2LfYqNmK2YLYp9iqINmH2LDYpyDZhNiq2K3Yr9mK2K8g2YXZiNmC2LnZgyDYp9mE2KrZgtix2YrYqNmKLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIyMzYzOTY5NjQxNzkyMzg4OTQ3Ij4i2KfZhNiv2K7ZiNmEINil2YTZiSBTdXJmYWNlRmxpbmdlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2LPYqtiu2K/Yp9mFINmF2YrYstin2KogU3VyZmFjZUZsaW5nZXIg2LDYp9iqINin2YTZhdiz2KrZiNmJINin2YTZhdmG2K7Zgdi2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2K3Yr9mK2K8g2YXZiNmC2LnZgyDYp9mE2KrZgtix2YrYqNmKINin2YTYsNmKINmK2LPYqtmF2K8g2YXZhiDYrtiv2YXYp9iqINin2YTZhdmI2YLYuSDYqNin2LPYqtiu2K/Yp9mFINmF2LXYp9iv2LEg2KfZhNmF2YjYp9mC2Lkg2KfZhNiq2Yog2KrYs9iq2K7Yr9mFINin2YTYtNio2YPYp9iqINmF2KvZhCDYo9io2LHYp9isINin2YTYrNmI2KfZhCDZiNiq2YLZhtmK2KkgV2ktRmkuINmK2KrYudmK2YYg2KrZiNmB2LEg2K7Yr9mF2KfYqiDYp9mE2YXZiNin2YLYuSDZh9iw2Ycg2YjYqti02LrZitmE2YfYpyDYudmE2Ykg2KzZh9in2LLZgyDZhNmE2KrYt9io2YrZgiDZg9mKINmK2LPYqtiu2K/ZhdmH2KcuINmI2YLYryDYqtiz2KrYrtiv2YUg2KfZhNiq2LfYqNmK2YLYp9iqINmH2LDYpyDZhNiq2K3Yr9mK2K8g2YXZiNmC2LnZgyDYp9mE2KrZgtix2YrYqNmKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIyMzYzOTY5NjQxNzkyMzg4OTQ3Ij4i4oCP2KfZhNiv2K7ZiNmEINil2YTZiSBTdXJmYWNlRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2LPYqtiu2K/Yp9mFINmF2YrYstin2KogU3VyZmFjZUZsaW5nZXIg2LDYp9iqINin2YTZhdiz2KrZiNmJINin2YTZhdmG2K7Zgdi2LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ItmC2LHYp9ih2Kkg2KfZhNmF2K7YstmGINin2YTZhdik2YLYqiDZhNmE2KXYt9in2LHYp9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNmC2LHYp9ih2Kkg2YXYrdiq2YjZiSDYp9mE2YXYrtiy2YYg2KfZhNmF2KTZgtiqINmE2YTYpdi32KfYsdin2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLYqtmH2YrYptipINi02KfYtNin2KogV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmH2YrYptipINi02KfYtNin2KogV2ktRmkg2YjYp9mE2KfYqti12KfZhCDYqNmH2KcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiLYp9mE2KrYrdmD2YUg2YHZiiDYtNin2LTYp9iqIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYqtit2YPZhSDZgdmKINin2YTZhdmK2LLYp9iqINiw2KfYqiDYp9mE2YXYs9iq2YjZiSDYp9mE2YXZhtiu2YHYtiDZgdmKINi02KfYtNin2KogV2ktRmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4i4oCP2KfZhNiv2K7ZiNmEINil2YTZicKgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2LPYqtiu2K/Yp9mFINmF2YrYstin2KogSW5wdXRGbGluZ2VyINiw2KfYqiDYp9mE2YXYs9iq2YjZiSDYp9mE2YXZhtiu2YHYti4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IuKAj9iq2YfZitim2Kkg2LTYp9i02KfYqiBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YfZitim2Kkg2LTYp9i02KfYqiBXaS1GaSDZiNin2YTYp9iq2LXYp9mEINio2YfYpy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IuKAj9in2YTYqtit2YPZhSDZgdmKINi02KfYtNin2KogV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSI0NTQzOTEyMjkyNjgxODI2OTg2Ij4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfZhNiq2K3Zg9mFINmB2Yog2KfZhNmF2YrYstin2Kog2LDYp9iqINin2YTZhdiz2KrZiNmJINin2YTZhdmG2K7Zgdi2INmB2Yog2LTYp9i02KfYqiBXaS1GaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjY4NTcxMzQ0OTg0MDIzNDY3MDgiPiLYp9mE2KrZgtin2Lcg2KXYrtix2KfYrCDYp9mE2LXZiNiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjIxMDU5Nzc1NDIxMjIwODg1MyI+Itin2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYqtmC2KfYtyDYpdiu2LHYp9isINin2YTYtdmI2Kog2YjYpdi52KfYr9ipINiq2YjYrNmK2YfZhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVBdWRpb0hvdHdvcmQiIG1zZ2lkPSIxODkwNTUzOTM1NjUwMzQ5ODA4Ij4i2KfZg9iq2LTYp9mBINin2YTZg9mE2YXYqSDYp9mE2YXZh9mF2KkiPC9zdHJpbmc+CkBAIC00OTcsOCArNTA2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2LPYrNmK2YQg2KfZhNi12YjYqiDYqNin2LPYqtiu2K/Yp9mFINin2YTZhdmK2YPYsdmI2YHZiNmGLiDZiNmK2KrZititINmH2LDYpyDYp9mE2KXYsNmGINmE2YTYqti32KjZitmCINiq2LPYrNmK2YQg2KfZhNi12YjYqiDZgdmKINij2Yog2YjZgtiqINmI2KjYr9mI2YYg2YXZiNin2YHZgtipINmF2YbZgy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLYp9mE2KrZgtin2Lcg2LXZiNixINmI2YXZgtin2LfYuSDZgdmK2K/ZitmIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYqtmC2KfYtyDYtdmI2LEg2YjZhdmC2KfYt9i5INmB2YrYr9mK2Ygg2YXZhiDYrtmE2KfZhCDYp9mE2YPYp9mF2YrYsdinLiDZiNmK2KrZititINmH2LDYpyDYp9mE2KXYsNmGINmE2YTYqti32KjZitmCINin2LPYqtiu2K/Yp9mFINin2YTZg9in2YXZitix2Kcg2YHZiiDYo9mKINmI2YLYqiDZiNio2K/ZiNmGINmF2YjYp9mB2YLYqSDZhdmG2YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i2KrYudi32YrZhCDZhdik2LTYsSBMRUQg2YTZhNil2LHYs9in2YQg2LnZhtiv2YXYpyDYqtmD2YjZhiDYp9mE2YPYp9mF2YrYsdinINmC2YrYryDYp9mE2KfYs9iq2K7Yr9in2YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4i2YTZhNiz2YXYp9itINmE2KrYt9io2YrZgiDZhti42KfZhSDZhdir2KjYqiDZhdiz2KjZgtmL2Kcg2YTYqti52LfZitmEINmF2KTYtNixIExFRCDZhNin2LPYqtiu2K/Yp9mFINin2YTZg9in2YXZitix2KcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i4oCP2KrYudi32YrZhCDZhdik2LTYsSBMRUQg2YTZhNil2LHYs9in2YQg2LnZhtiv2YXYpyDYqtmD2YjZhiDYp9mE2YPYp9mF2YrYsdinINmC2YrYryDYp9mE2KfYs9iq2K7Yr9in2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4i4oCP2YTZhNiz2YXYp9itINmE2KrYt9io2YrZgiDZhti42KfZhSDZhdir2KjYqiDZhdiz2KjZgtmL2Kcg2YTYqti52LfZitmEINmF2KTYtNixIExFRCDZhNin2LPYqtiu2K/Yp9mFINin2YTZg9in2YXZitix2KcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjk2MTI5MjIwNTc2NDQ4ODMwNCI+Itiq2LnYt9mK2YQg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDZhtmH2KfYptmK2YvYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MzM3ODE3MDkzMzI2MzcwNTM3Ij4i2KrYudi32YrZhCDYp9mE2YfYp9iq2YEg2LnZhNmJINin2YTYr9mI2KfZhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzM0ODE4ODA4MDAxNjk5NTMwIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYudi32YrZhCDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINio2KfZhNmD2KfZhdmEINio2LTZg9mEINiv2KfYptmFLiDZh9iw2Kcg2K7Yt9mK2LEg2YTZhNi62KfZitipLiI8L3N0cmluZz4KQEAgLTUwNywxMSArNTE2LDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4OTg1NjA4NzI0NjI2MzgyNDIiPiLZgdix2LYg2KXYudin2K/YqSDYqti02LrZitmEINin2YTZh9in2KrZgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODE3MjA1NjE4MDA2MzcwMDc0MSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNmB2LHYtiDYpdi52KfYr9ipINiq2LTYutmK2YQg2KfZhNis2YfYp9iyINin2YTZhNmI2K3Zii4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MzI2MDA4MTI0Mjg5OTg5OTY5Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2YHYsdi2INil2LnYp9iv2Kkg2KrYtNi62YrZhCDYp9mE2YfYp9iq2YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjI5MjczNjE1Mzc5NDI1OTE4NDEiPiLYp9mE2K/YrtmI2YQg2KXZhNmJINmG2LjYp9mFINmF2YTZgdin2Kog2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDAyMzA1MDQ5ODkwOTUzODEwIj4i2KfZhNiv2K7ZiNmEINil2YTZiSDZhti42KfZhSDZhdmE2YHYp9iqINio2LfYp9mC2KkgU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjkyNzM2MTUzNzk0MjU5MTg0MSI+IuKAj9in2YTYr9iu2YjZhCDYpdmE2Ykg2YbYuNin2YUg2YXZhNmB2KfYqiDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0MDIzMDUwNDk4OTA5NTM4MTAiPiLigI/Yp9mE2K/YrtmI2YQg2KXZhNmJINmG2LjYp9mFINmF2YTZgdin2Kog2KjYt9in2YLYqSBTRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIG1zZ2lkPSIxODI5MjkwNzAxNjU4OTkyMzQ3Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYrdmF2YrZhCDYo9mG2LjZhdipINin2YTZhdmE2YHYp9iqINmI2KXZhNi62KfYoSDYqtit2YXZitmE2YfYpyDYpdmE2Ykg2YjYrdiv2Kkg2KfZhNiq2K7YstmK2YYg2KfZhNmC2KfYqNmE2Kkg2YTZhNil2LLYp9mE2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjIyNzgxOTU4MjYyNDkwNDk3MiI+ItmF2K3ZiCDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYyNTgyNjk4NjM5Mjc0MDU2Ij4i2YXYrdmIINio2LfYp9mC2KkgU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4i4oCP2YXYrdmIINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjI1ODI2OTg2MzkyNzQwNTYiPiLigI/Zhdit2Ygg2KjYt9in2YLYqSBTRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgbXNnaWQ9Ijg3ODQyNjgyNDY3NzkxOTg2MjciPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmG2LPZitmCINmI2K3Yr9ipINin2YTYqtiu2LLZitmGINin2YTZgtin2KjZhNipINmE2YTYpdiy2KfZhNipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzNDExMzM4NjMyMDAyMTkzODQ2Ij4i2KfZhNit2LXZiNmEINi52YTZiSDZhdi52YTZiNmF2KfYqiDYrdmI2YQg2YjYrdiv2Kkg2KfZhNiq2K7YstmK2YYg2KfZhNiv2KfYrtmE2YrYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzA5NDU2Mzg0NDU5Mzg3ODU0OCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYrdi12YjZhCDYudmE2Ykg2YXYudmE2YjZhdin2Kog2K3ZiNmEINiz2LnYqSDYp9mE2KrYrtiy2YrZhiDYp9mE2K/Yp9iu2YTZitipLiI8L3N0cmluZz4KQEAgLTUyNywxOSArNTM2LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYqtit2YPZhSDZgdmKINin2YTZh9iy2ZHYp9iyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLYp9mE2KrYrdmD2YUg2YHZiiDYp9mE2LbZiNihINin2YTZiNin2YXYtiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfZhNiq2K3Zg9mFINmB2Yog2KfZhNi22YjYoSDYp9mE2YjYp9mF2LYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4i2KXYr9in2LHYqSDYp9mE2KrZgdi22YrZhNin2Kog2YjYp9mE2KPYsNmI2YbYp9iqINmE2KPYrNmH2LLYqSBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2IiIG1zZ2lkPSI3Nzc2MTU1NDMwMjE4MjM5ODMzIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KXYr9in2LHYqSDYp9mE2KrZgdi22YrZhNin2Kog2YjYp9mE2KPYsNmI2YbYp9iqINmE2KPYrNmH2LLYqSBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4i2KrZhtmB2YrYsCDYqNix2YjYqtmI2YPZiNmEIE1UUCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc010cCIgbXNnaWQ9IjY1MzI5NjEyMDA0ODY3OTE1NzAiPiLZhNil2KrYp9it2Kkg2KfZhNiv2K7ZiNmEINil2YTZiSDYqNix2YbYp9mF2Kwg2KrYtNi62YrZhCBrZXJuZWwgTVRQINmE2KrZhtmB2YrYsCDYqNix2YjYqtmI2YPZiNmEIE1UUCBVU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4i4oCP2KXYr9in2LHYqSDYp9mE2KrZgdi22YrZhNin2Kog2YjYp9mE2KPYsNmI2YbYp9iqINmE2KPYrNmH2LLYqSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2IiIG1zZ2lkPSI3Nzc2MTU1NDMwMjE4MjM5ODMzIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KXYr9in2LHYqSDYp9mE2KrZgdi22YrZhNin2Kog2YjYp9mE2KPYsNmI2YbYp9iqINmE2KPYrNmH2LLYqSBVU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4i4oCP2KrZhtmB2YrYsCDYqNix2YjYqtmI2YPZiNmEIE1UUCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc010cCIgbXNnaWQ9IjY1MzI5NjEyMDA0ODY3OTE1NzAiPiLigI/ZhNil2KrYp9it2Kkg2KfZhNiv2K7ZiNmEINil2YTZiSDYqNix2YbYp9mF2Kwg2KrYtNi62YrZhCBrZXJuZWwgTVRQINmE2KrZhtmB2YrYsCDYqNix2YjYqtmI2YPZiNmEIE1UUCBVU0IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNDE0ODI5MDg2MDQwMDY1OTE0NiI+Itin2K7Yqtio2KfYsSDYp9mE2KPYrNmH2LLYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI2NTk3OTY0MTkxMjA4MDE2NjA1Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfZhNiq2K3Zg9mFINmB2Yog2KfZhNij2KzZh9iy2Kkg2KfZhNi32LHZgdmK2Kkg2KfZhNmF2KrZhtmI2LnYqSDYqNi62LHYtiDYp9iu2KrYqNin2LEg2KfZhNij2KzZh9iy2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i2KfYqti12KfZhCDZhdio2KfYtNixINio2KPYsdmC2KfZhSDYp9mE2YfZiNin2KrZgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYt9mE2Kgg2KPYsdmC2KfZhSDZh9in2KrZgdmK2Kkg2KjYr9mI2YYg2KrYr9iu2YQg2YXZhtmDLiDZiNmC2K8g2YrYpNiv2Yog2LDZhNmDINil2YTZiSDYqtit2YXZhCDYsdiz2YjZhSDYutmK2LEg2YXYqtmI2YLYudipINij2Ygg2KXYrNix2KfYoSDZhdmD2KfZhNmF2KfYqiDYutmK2LEg2YXYqtmI2YLYudipLiDZiNmF2YYg2KfZhNis2K/ZitixINio2KfZhNiw2YPYsSDYo9mGINiw2YTZgyDZhNinINmK2KrZititINmE2YTYqti32KjZitmCINin2YTYp9iq2LXYp9mEINio2KPYsdmC2KfZhSDYp9mE2LfZiNin2LHYpi4g2YjZgtivINiq2KTYr9mKINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2KXZhNmJINiq2K3ZhdmE2YMg2KrZg9in2YTZitmBINmF2KfZhNmK2Kkg2YXZhiDYrtmE2KfZhCDYpdis2LHYp9ihINmF2YPYp9mE2YXYp9iqINio2K/ZiNmGINmF2YjYp9mB2YLYqSDZhdmG2YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjQxOTgzNDkyMTExMDg0OTc4NzkiPiLYp9iq2LXYp9mEINmF2KjYp9i02LEg2KjYo9mKINix2YLZhSDZhdmGINij2LHZgtin2YUg2KfZhNmH2YjYp9iq2YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KfYqti12KfZhCDYqNij2Yog2LHZgtmFINmH2KfYqtmB2Iwg2KjZhdinINmB2Yog2LDZhNmDINij2LHZgtin2YUg2KfZhNi32YjYp9ix2KbYjCDYqNiv2YjZhiDYqtiv2K7ZhCDZhdmG2YMuINmC2K8g2KrYrNix2Yog2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYp9iq2LXYp9mE2KfYqiDYutmK2LEg2LbYsdmI2LHZitipINmI2LrZitixINmC2KfZhtmI2YbZitipINio2K7Yr9mF2KfYqiDYp9mE2LfZiNin2LHYpi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4i2KjYr9ihINil2LnYr9in2K8g2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiBDRE1BINmF2KjYp9i02LHYqdmLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2MDQ4NDgwOTUzMTU0MjE0MjUiPiLYqNiv2KEg2KXYudiv2KfYryDZh9in2KrZgSBDRE1BINmF2KjYp9i02LHYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBtc2dpZD0iMTk5NDE5MzUzODgwMjMxNDE4NiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNio2K/YoSDYqtmI2YHZitixIENETUEuINmC2K8g2KrYqNiv2KMg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYqtmI2YHZitixIENETUEg2KjYr9mI2YYg2KfZhNit2KfYrNipINil2YTZiSDYsNmE2YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDg0MjU3Njk5NDE0NDYwNDgyMSI+IuKAj9io2K/YoSDYpdi52K/Yp9ivINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2YogQ0RNQSDZhdio2KfYtNix2KnZiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NjA0ODQ4MDk1MzE1NDIxNDI1Ij4i4oCP2KjYr9ihINil2LnYr9in2K8g2YfYp9iq2YEgQ0RNQSDZhdio2KfYtNix2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgbXNnaWQ9IjE5OTQxOTM1Mzg4MDIzMTQxODYiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqNiv2KEg2KrZiNmB2YrYsSBDRE1BLiDZgtivINiq2KjYr9ijINin2YTYqti32KjZitmC2KfYqiDYp9mE2LbYp9ix2Kkg2KrZiNmB2YrYsSBDRE1BINio2K/ZiNmGINin2YTYrdin2KzYqSDYpdmE2Ykg2LDZhNmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iNzc4NTQwODI1MzM2NDMzNTc0MCI+Itin2YTYqtit2YPZhSDZgdmKINin2LTYudin2LHYp9iqINiq2K3Yr9mK2Ksg2KfZhNmF2YjZgti5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iMTEyMDc0MTU1Nzg5MTQzODg3NiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YXZg9mK2YYv2KrYudi32YrZhCDYpdi02LnYp9ix2KfYqiDYqtit2K/ZitirINin2YTZhdmI2YLYuSDZhdmGINin2YTZhNin2LPZhNmD2YouINmE2YrYsyDZhNmE2KfYs9iq2K7Yr9in2YUg2KjZiNin2LPYt9ipINin2YTYqti32KjZitmC2KfYqiDYp9mE2LnYp9iv2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+Itin2YTYr9iu2YjZhCDYpdmE2Ykg2K7Ytdin2KbYtSDYp9mE2KXZitiv2KfYuSI8L3N0cmluZz4KQEAgLTU4Miw3ICs1OTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3NDE0OTY1MzQ3Njk2NjAwMjciPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2K3YtdmI2YQg2LnZhNmJINmC2KfYptmF2Kkg2KjYp9mE2K3Ys9in2KjYp9iqINin2YTYqtmKINmK2LnYsdmB2YfYpyDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKLiDZiNmC2K8g2YrYqti22YXZhiDYsNmE2YMg2KPZitipINit2LPYp9io2KfYqiDYqtmFINil2YbYtNin2KTZh9inINio2YjYp9iz2LfYqSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNiq2Yog2KvYqNiq2YfYpy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2K3YtdmI2YQg2LnZhNmJINmC2KfYptmF2Kkg2KjYp9mE2K3Ys9in2KjYp9iqINin2YTYqtmKINmK2LnYsdmB2YfYpyDYp9mE2YfYp9iq2YEuINmI2YLYryDZitiq2LbZhdmGINiw2YTZgyDYo9mK2Kkg2K3Ys9in2KjYp9iqINiq2YUg2KXZhti02KfYpNmH2Kcg2KjZiNin2LPYt9ipINin2YTYqti32KjZitmC2KfYqiDYp9mE2KrZiiDYq9io2KrZh9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4i2KXZhti02KfYoSDYrdiz2KfYqNin2Kog2YjYqti52YrZitmGINmD2YTZhdin2Kog2YXYsdmI2LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjU0NzIxMjQyOTY5MDg5NzcyNjAiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9iz2KrYrtiv2KfZhSDYpdmF2YPYp9mG2YrYp9iqINmF2LXYr9mQ2ZHZgiDYp9mE2K3Ys9in2Kgg2YTZgCBBY2NvdW50TWFuYWdlctiMINio2YXYpyDZgdmKINiw2YTZgyDYpdmG2LTYp9ihINit2LPYp9io2KfYqiDZiNin2YTYrdi12YjZhCDYudmE2Ykg2YPZhNmF2KfYqiDZhdix2YjYsdmH2Kcg2YjYqti52YrZhtmH2KcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1NDcyMTI0Mjk2OTA4OTc3MjYwIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfYs9iq2K7Yr9in2YUg2KXZhdmD2KfZhtmK2KfYqiDZhdi12K/ZkNmR2YIg2KfZhNit2LPYp9ioINmE2YAgQWNjb3VudE1hbmFnZXLYjCDYqNmF2Kcg2YHZiiDYsNmE2YMg2KXZhti02KfYoSDYrdiz2KfYqNin2Kog2YjYp9mE2K3YtdmI2YQg2LnZhNmJINmD2YTZhdin2Kog2YXYsdmI2LHZh9inINmI2KrYudmK2YbZh9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4i2KXYttin2YHYqSDYrdiz2KfYqNin2Kog2KPZiCDYpdiy2KfZhNiq2YfYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjY291bnRzIiBtc2dpZD0iODY5ODI5NTYyNTQ4ODI5MjUwNiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNil2KzYsdin2KEg2LnZhdmE2YrYp9iqINmF2KvZhCDYpdi22KfZgdipINit2LPYp9io2KfYqiDZiNil2LLYp9mE2KrZh9inINmI2K3YsNmBINmD2YTZhdin2Kog2YXYsdmI2LHZh9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSIyMzU0ODEzOTYxNjM4Nzc2NDIiPiLYp9iz2KrYrtiv2KfZhSDYp9mE2K3Ys9in2KjYp9iqINi52YTZiSDYp9mE2KzZh9in2LIiPC9zdHJpbmc+CkBAIC01OTIsMzYgKzYwMSwzNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjgwMTg3NTgxMzY0MDQzMjM2NTgiPiLYpdmF2YPYp9mG2YrYqSDYr9iu2YjZhCDZg9in2YXZhNipINil2YTZiSDYp9mE2LTYqNmD2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjM0MDMwNjIxODc3Nzk3MjQxODUiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYpdmG2LTYp9ihINmF2YLYp9io2LMg2LTYqNmD2KfYqiDZiNin2LPYqtiu2K/Yp9mFINio2LHZiNiq2YjZg9mI2YTYp9iqINi02KjZg9in2Kog2YXYrti12LXYqS4g2YjZitmI2YHYsSDYp9mE2YXYqti12YHYrSDZiNiq2LfYqNmK2YLYp9iqINij2K7YsdmJINi32LHZgtmL2Kcg2YTYpdix2LPYp9mEINin2YTYqNmK2KfZhtin2Kog2KXZhNmJINin2YTYpdmG2KrYsdmG2KrYjCDZiNmE2LDZhNmDINmE2Kcg2YrYudivINmH2LDYpyDYp9mE2KXYsNmGINmF2LfZhNmI2KjZi9inINmE2KXYsdiz2KfZhCDYp9mE2KjZitin2YbYp9iqINil2YTZiSDYp9mE2KXZhtiq2LHZhtiqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUwNTY2MDE1OTY3NTc1MTg5NiI+Itiq2LrZitmK2LEv2KfYudiq2LHYp9i2INil2LnYr9in2K/Yp9iqINin2YTYtNio2YPYqSDZiNit2LHZg9ipINin2YTZhdix2YjYsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MzMzNzk4ODg2NDEyNzE0MTkzIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYutmK2YrYsSDYpdi52K/Yp9iv2KfYqiDYp9mE2LTYqNmD2Kkg2YjZhdmC2KfYt9i52Kkg2YjZgdit2LUg2KzZhdmK2Lkg2K3YsdmD2Kkg2KfZhNmF2LHZiNixINmB2Yog2KfZhNi02KjZg9ip2Iwg2LnZhNmJINiz2KjZitmEINin2YTZhdir2KfZhNiMINiq2LrZitmK2LEg2KfZhNiu2KfYr9mFINin2YTZiNmD2YrZhCDZiNmF2YbZgdiwINij2YogQVBOLiDZgtivINiq2LHYp9mC2Kgg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYrdiy2YUg2KfZhNi02KjZg9ipINij2Ygg2KrYudmK2K8g2KrZiNis2YrZh9mH2Kcg2KPZiCDYqti52K/ZhNmH2Kcg2KjYr9mI2YYg2YXYudix2YHYqtmDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MzMzNzk4ODg2NDEyNzE0MTkzIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYutmK2YrYsSDYpdi52K/Yp9iv2KfYqiDYp9mE2LTYqNmD2Kkg2YjZhdmC2KfYt9i52Kkg2YjZgdit2LUg2KzZhdmK2Lkg2K3YsdmD2Kkg2KfZhNmF2LHZiNixINmB2Yog2KfZhNi02KjZg9ip2Iwg2LnZhNmJINiz2KjZitmEINin2YTZhdir2KfZhNiMINiq2LrZitmK2LEg2KfZhNiu2KfYr9mFINin2YTZiNmD2YrZhCDZiNmF2YbZgdiwINij2YogQVBOLiDZgtivINiq2LHYp9mC2Kgg2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYttin2LHYqSDYrdiy2YUg2KfZhNi02KjZg9ipINij2Ygg2KrYudmK2K8g2KrZiNis2YrZh9mH2Kcg2KPZiCDYqti52K/ZhNmH2Kcg2KjYr9mI2YYg2YXYudix2YHYqtmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iOTU4ODg0MjkxNDU0MzI3MzA5Ij4i2KrYutmK2YrYsSDYp9iq2LXYp9mEINin2YTYtNio2YPYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9IjY3ODkxMjM5MTI0NzY0MTYyMTQiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqti62YrZitixINit2KfZhNipINin2KrYtdin2YQg2KfZhNi02KjZg9ipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSI1OTUyNTg0OTY0MzczMDE3OTYwIj4i2KrYutmK2YrYsSDYp9mE2KfYqti12KfZhCDYp9mE2YXYsdio2YjYtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iMTUyNDQ0MTM0NDQxMjMxOTc4MCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2LrZitmK2LEg2K3Yp9mE2Kkg2KfYqti12KfZhCDYp9mE2LTYqNmD2Kkg2KfZhNmF2LHYqNmI2LfYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjE0MDA2NjYwMTI2NzE2NDg3NDEiPiLYqti62YrZitixINil2LnYr9in2K8g2KfYs9iq2K7Yr9in2YUg2KjZitin2YbYp9iqINin2YTYrtmE2YHZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iNTM0NzcyOTU3ODQ2ODc0NDM3OSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2LrZitmK2LEg2KXYudiv2KfYryDYp9iz2KrYrtiv2KfZhSDYqNmK2KfZhtin2Kog2KfZhNiu2YTZgdmK2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MjAyMDEyOTQ5MjQ3MDQwMDExIj4i2LnYsdi2INin2KrYtdin2YTYp9iqIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTAwMjc5ODA3NzM4NzgwMzcyNiI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNi52LHYtiDZhdi52YTZiNmF2KfYqiDYrdmI2YQg2LTYqNmD2KfYqiBXaS1GadiMINmD2LnYsdi2INmF2LnZhNmI2YXYp9iqINit2YjZhCDZhdinINil2LDYpyDYqtmFINiq2YXZg9mK2YYgV2ktRmkg2YjYp9iz2YUg2KPYrNmH2LLYqSBXaS1GaSDYp9mE2YXYqti12YTYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjY1NTA2NDExODg3NDkxMjgwMzUiPiLYp9mE2KrZiNi12YrZhCDZiNin2YTZgdi12YQg2YXZhiBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjcxMzc5NTAyOTczODYxMjc1MzMiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KfYqti12KfZhCDYqNmG2YLYp9i3INin2YTZiNi12YjZhCDYpdmE2YkgV2ktRmkg2YjZgti32Lkg2KfZhNin2KrYtdin2YQg2KjZh9in2Iwg2YjYpdis2LHYp9ihINiq2LrZitmK2LHYp9iqINi52YTZiSDYqtmH2YrYptipINin2YTYrNmH2KfYsiDZhNi02KjZg9in2KogV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4i2KfZhNiz2YXYp9itINio2KfYs9iq2YLYqNin2YQg2KjYqyBXaS1GaSDZhdiq2LnYr9ivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3OTY5Nzc0MDIxMjU2MzM2NTQ4Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrZhNmC2Yog2KfZhNit2LLZhSDYp9mE2KrZiiDZitiq2YUg2KXYsdiz2KfZhNmH2Kcg2KXZhNmJINis2YXZiti5INin2YTYo9is2YfYstipINi52YTZiSDYtNio2YPYqSBXaS1GaSDYqNin2LPYqtiu2K/Yp9mFINi52YbYp9mI2YrZhiDYqNirINmF2KrYudiv2K/YjCDZiNmE2YrYsyDYqNin2LPYqtiu2K/Yp9mFINis2YfYp9iy2YMg2KfZhNmE2YjYrdmKINmB2YLYty4g2YjZitik2K/ZiiDYsNmE2YMg2KXZhNmJINin2LPYqtiu2K/Yp9mFINmC2K/YsSDYo9mD2KjYsSDZhdmGINin2YTYt9in2YLYqSDZitmB2YjZgiDZiNi22Lkg2KfZhNio2Ksg2LrZitixINin2YTZhdiq2LnYr9ivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTE5NDk3MDYwMjUzNDk5MjYiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmE2YLZiiDYp9mE2K3YstmFINin2YTYqtmKINmK2KrZhSDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KzZhdmK2Lkg2KfZhNij2KzZh9iy2Kkg2LnZhNmJINi02KjZg9ipIFdpLUZpINio2KfYs9iq2K7Yr9in2YUg2LnZhtin2YjZitmGINio2Ksg2YXYqti52K/Yr9iMINmI2YTZitizINio2KfYs9iq2K7Yr9in2YUg2YfYp9iq2YHZgyDZgdmC2LcuINmI2YrYpNiv2Yog2LDZhNmDINil2YTZiSDYp9iz2KrYrtiv2KfZhSDZgtiv2LEg2KPZg9io2LEg2YXZhiDYp9mE2LfYp9mC2Kkg2YrZgdmI2YIg2YjYtti5INin2YTYqNirINi62YrYsSDYp9mE2YXYqti52K/Yry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUyMDIwMTI5NDkyNDcwNDAwMTEiPiLigI/Yudix2LYg2KfYqti12KfZhNin2KogV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MDAyNzk4MDc3Mzg3ODAzNzI2Ij4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2LnYsdi2INmF2LnZhNmI2YXYp9iqINit2YjZhCDYtNio2YPYp9iqIFdpLUZp2Iwg2YPYudix2LYg2YXYudmE2YjZhdin2Kog2K3ZiNmEINmF2Kcg2KXYsNinINiq2YUg2KrZhdmD2YrZhiBXaS1GaSDZiNin2LPZhSDYo9is2YfYstipIFdpLUZpINin2YTZhdiq2LXZhNipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNjU1MDY0MTE4ODc0OTEyODAzNSI+IuKAj9in2YTYqtmI2LXZitmEINmI2KfZhNmB2LXZhCDZhdmGIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYp9iq2LXYp9mEINio2YbZgtin2Lcg2KfZhNmI2LXZiNmEINil2YTZiSBXaS1GaSDZiNmC2LfYuSDYp9mE2KfYqti12KfZhCDYqNmH2KfYjCDZiNil2KzYsdin2KEg2KrYutmK2YrYsdin2Kog2LnZhNmJINiq2YfZitim2Kkg2KfZhNis2YfYp9iyINmE2LTYqNmD2KfYqiBXaS1GaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgbXNnaWQ9IjEzNjgyNTM4NzE0ODMyNTQ3ODQiPiLigI/Yp9mE2LPZhdin2K0g2KjYp9iz2KrZgtio2KfZhCDYqNirIFdpLUZpINmF2KrYudiv2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmE2YLZiiDYp9mE2K3YstmFINin2YTYqtmKINmK2KrZhSDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KzZhdmK2Lkg2KfZhNij2KzZh9iy2Kkg2LnZhNmJINi02KjZg9ipIFdpLUZpINio2KfYs9iq2K7Yr9in2YUg2LnZhtin2YjZitmGINio2Ksg2YXYqti52K/Yr9iMINmI2YTZitizINio2KfYs9iq2K7Yr9in2YUg2KzZh9in2LLZgyDYp9mE2YTZiNit2Yog2YHZgti3LiDZiNmK2KTYr9mKINiw2YTZgyDYpdmE2Ykg2KfYs9iq2K7Yr9in2YUg2YLYr9ixINij2YPYqNixINmF2YYg2KfZhNi32KfZgtipINmK2YHZiNmCINmI2LbYuSDYp9mE2KjYqyDYutmK2LEg2KfZhNmF2KrYudiv2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MTk0OTcwNjAyNTM0OTkyNiI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YTZgtmKINin2YTYrdiy2YUg2KfZhNiq2Yog2YrYqtmFINil2LHYs9in2YTZh9inINil2YTZiSDYrNmF2YrYuSDYp9mE2KPYrNmH2LLYqSDYudmE2Ykg2LTYqNmD2KkgV2ktRmkg2KjYp9iz2KrYrtiv2KfZhSDYudmG2KfZiNmK2YYg2KjYqyDZhdiq2LnYr9iv2Iwg2YjZhNmK2LMg2KjYp9iz2KrYrtiv2KfZhSDZh9in2KrZgdmDINmB2YLYty4g2YjZitik2K/ZiiDYsNmE2YMg2KXZhNmJINin2LPYqtiu2K/Yp9mFINmC2K/YsSDYo9mD2KjYsSDZhdmGINin2YTYt9in2YLYqSDZitmB2YjZgiDZiNi22Lkg2KfZhNio2Ksg2LrZitixINin2YTZhdiq2LnYr9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoQWRtaW4iIG1zZ2lkPSI2MDA2OTY3MzczOTM1OTI2NjU5Ij4i2KfZhNiv2K7ZiNmEINil2YTZiSDYpdi52K/Yp9iv2KfYqiDYqNmE2YjYqtmI2KsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjkyMTE3NzQ3MTc0ODg4MjEzNyI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YfZitim2Kkg2YTZiNit2Kkg2KfZhNio2YTZiNiq2YjYqyDYp9mE2YXYrdmE2YrYjCDZiNin2YPYqti02KfZgSDYo9is2YfYstipINin2YTYqtit2YPZhSDYudmGINio2LnYryDZiNin2YTYp9mC2KrYsdin2YYg2KjZh9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YfZitim2Kkg2YfYp9iq2YEg2KfZhNio2YTZiNiq2YjYqyDYp9mE2YXYrdmE2YrYjCDZiNin2YPYqti02KfZgSDYo9is2YfYstipINin2YTYqtit2YPZhSDYudmGINio2LnYryDZiNin2YTYp9mC2KrYsdin2YYg2KjZh9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoUHJpdiIgbXNnaWQ9IjQwMDk0OTQyNDYwMDk1MTM4MjgiPiLYp9mE2LPZhdin2K0g2KjYpdmC2LHYp9mGINin2YTYqNmE2YjYqtmI2Ksg2YXYuSDYp9mE2KrYt9io2YrZgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aFByaXYiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgwNDU3MzUxOTM0MTc0Njg4NTciPiLZhNmE2LPZhdin2K0g2KjYpdmC2LHYp9mGINmE2KrYt9io2YrZgiDZhdi5INin2YTYo9is2YfYstipINin2YTYqNi52YrYr9ipINio2K/ZiNmGINiq2K/YrtmEINin2YTZhdiz2KrYrtiv2YUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoUHJpdiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNDU3MzUxOTM0MTc0Njg4NTciPiLZhNmE2LPZhdin2K0g2KjYpdmC2LHYp9mGINmE2KrYt9io2YrZgiDZhdi5INin2YTYo9is2YfYstipINin2YTYqNi52YrYr9ipINio2K/ZiNmGINiq2K/YrtmEINin2YTZhdiz2KrYrtiv2YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+Itin2YTYp9iq2LXYp9mEINio2YDYtNio2YPYqSBXaU1BWCDZiNmC2LfYuSDYp9mE2KfYqti12KfZhCDYqNmH2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNjM2MDEwMjg3NzI2MTk3ODg4NyI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2K3Yr9mK2K8g2YXYpyDYpdiw2Kcg2KrZhSDYqtmF2YPZitmGIFdpTUFYINmI2KrYrdiv2YrYryDZhdi52YTZiNmF2KfYqiDYrdmI2YQg2KPZitipINi02KjZg9in2KogV2lNQVgg2YXYqti12YTYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpbWF4U3RhdGUiIG1zZ2lkPSIyNDA1MDQyMjY3MTMxNDk2NTc5Ij4i2KrYutmK2YrYsSDYrdin2YTYqSBXaU1BWCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMxNTY0NTY1MDQwODQyMDE4MDUiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmI2LXZitmEINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2Yog2KjYtNio2YPYp9iqIFdpTUFYINmI2YLYt9i5INin2KrYtdin2YTZhyDYqNmH2KcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NzAyNTA0MzAwNDkyMzc5OCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2YjYtdmK2YQg2KfZhNmH2KfYqtmBINio2LTYqNmD2KfYqiBXaU1BWCDZiNmC2LfYuSDYp9iq2LXYp9mE2Ycg2KjZh9inLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjQxOTU5MDcwMTA2MTAyMDU3MDMiPiLigI/Yp9mE2KfYqti12KfZhCDYqNmA2LTYqNmD2KkgV2lNQVgg2YjZgti32Lkg2KfZhNin2KrYtdin2YQg2KjZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtit2K/ZitivINmF2Kcg2KXYsNinINiq2YUg2KrZhdmD2YrZhiBXaU1BWCDZiNiq2K3Yr9mK2K8g2YXYudmE2YjZhdin2Kog2K3ZiNmEINij2YrYqSDYtNio2YPYp9iqIFdpTUFYINmF2KrYtdmE2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMjQwNTA0MjI2NzEzMTQ5NjU3OSI+IuKAj9iq2LrZitmK2LEg2K3Yp9mE2KkgV2lNQVgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMTU2NDU2NTA0MDg0MjAxODA1Ij4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrZiNi12YrZhCDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINio2LTYqNmD2KfYqiBXaU1BWCDZiNmC2LfYuSDYp9iq2LXYp9mE2Ycg2KjZh9inLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqtmI2LXZitmEINin2YTZh9in2KrZgSDYqNi02KjZg9in2KogV2lNQVgg2YjZgti32Lkg2KfYqti12KfZhNmHINio2YfYpy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aCIgbXNnaWQ9IjYxMjc3NjkzMzYzMzkyNzY4MjgiPiLYp9mE2KfYqti12KfZhCDYqNij2KzZh9iy2Kkg2KjZhNmI2KrZiNirIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDgwNzIyMTgxODUyNDM4NjI4Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2LnYsdi2INiq2YfZitim2Kkg2KfZhNio2YTZiNiq2YjYqyDYudmE2Ykg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDZiNil2KzYsdin2KEg2KfYqti12KfZhNin2Kog2YjZgtio2YjZhNmH2Kcg2YXYuSDYp9mE2KPYrNmH2LLYqSDYp9mE2YXZgtiq2LHZhtipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYudix2LYg2KrZh9mK2KbYqSDYp9mE2KjZhNmI2KrZiNirINi52YTZiSDYp9mE2YfYp9iq2YEg2YjYpdis2LHYp9ihINin2KrYtdin2YTYp9iqINmI2YLYqNmI2YTZh9inINmF2Lkg2KfZhNij2KzZh9iy2Kkg2KfZhNmF2YLYqtix2YbYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX25mYyIgbXNnaWQ9IjQ0MjMzNTEyNzQ3NTc4NzY5NTMiPiLYp9mE2KrYrdmD2YUg2YHZiiDYp9iq2LXYp9mEINin2YTYrdmC2YQg2KfZhNmC2LHZitioIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbmZjIiBtc2dpZD0iNzEyMDYxMTgxOTQwMTc4OTkwNyI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYp9iq2LXYp9mEINio2LnZhNin2YXYp9iqINin2YTYp9iq2LXYp9mEINmC2LHZitioINin2YTZhdiv2YkgKE5GQynYjCDZiNin2YTYqNi32KfZgtin2Kog2YjYqNix2KfZhdisINin2YTZgtix2KfYodipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KfYqti12KfZhCDYqNi52YTYp9mF2KfYqiDYp9mE2KfYqti12KfZhCDZgtix2YrYqCDYp9mE2YXYr9mJIChORkMp2Iwg2YjYp9mE2KjYt9in2YLYp9iqINmI2KjYsdin2YXYrCDYp9mE2YLYsdin2KHYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjM1OTg0OTYzMDE0ODY0MzkyNTgiPiLYqti52LfZitmEINmC2YHZhCDYp9mE2LTYp9i02KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSI2MDM0MjAzMDY1MDc3MTIyOTkyIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYudi32YrZhCDYqtij2YXZitmGINin2YTZhdmB2KfYqtmK2K0g2YjYo9mKINij2YXYp9mGINmE2YPZhNmF2Kkg2YXYsdmI2LEg2YXYsdiq2KjYt9ipLiDYudmE2Ykg2LPYqNmK2YQg2KfZhNmF2KvYp9mE2Iwg2YrYudi32YQg2KfZhNmH2KfYqtmBINiq2KPZhdmK2YYg2KfZhNmF2YHYp9iq2YrYrSDYudmG2K8g2KfYs9iq2YLYqNin2YQg2YXZg9in2YTZhdipINmH2KfYqtmB2YrYqSDZiNin2LHYr9ip2Iwg2KvZhSDZiti52YrYryDYqtmF2YPZitmGINiq2KPZhdmK2YYg2KfZhNmF2YHYp9iq2YrYrSDYudmG2K8g2KfZhtiq2YfYp9ihINin2YTZhdmD2KfZhNmF2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iNjIwMTgxMDAwODIzMDUwMzA1MiI+ItmC2LHYp9ih2Kkg2KXYudiv2KfYr9in2Kog2KfZhNmF2LLYp9mF2YbYqSI8L3N0cmluZz4KQEAgLTYzOCwxNCArNjQ3LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjY1OTYxNDYwMDMzODkwNDI0MyI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNmC2LHYp9ih2Kkg2KzZhdmK2Lkg2KfZhNmD2YTZhdin2Kog2YjYp9mE2KPYs9mF2KfYoSDZiNin2YTYudio2KfYsdin2Kog2KfZhNiq2Yog2LHYqNmF2Kcg2YrZg9mI2YYg2KfZhNmF2LPYqtiu2K/ZhSDZgtivINiu2LLZhtmH2Kcg2YHZiiDZgtin2YXZiNizINin2YTZhdiz2KrYrtiv2YUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4i2KXYttin2YHYqSDZg9mE2YXYp9iqINil2YTZiSDYp9mE2YLYp9mF2YjYsyDYp9mE2YXYudix2ZHZgSDYqNmI2KfYs9i32Kkg2KfZhNmF2LPYqtiu2K/ZhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgxODUzODU3MTYyNTUwNjUyOTEiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZg9iq2KfYqNipINmD2YTZhdin2Kog2KzYr9mK2K/YqSDZgdmKINmC2KfZhdmI2LMg2KfZhNmF2LPYqtiu2K/ZhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY3Mjc1MDk1MTU5NDA1NDY4Ij4i2YLYsdin2KHYqSDZhdit2KrZiNmK2KfYqiDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODgxNTY0NjI5MzQ5Nzc5NDAiPiLZgtix2KfYodipINmF2K3YqtmI2YrYp9iqINio2LfYp9mC2KkgU0QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDY5ODg3MTI1OTgzODYwNzkiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZgtix2KfYodipINmF2K3YqtmI2YrYp9iqINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjA3MzYyNDczNjU0OTc1NDExIj4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2YLYsdin2KHYqSDZhdit2KrZiNmK2KfYqiDYqNi32KfZgtipIFNELiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+Itiq2LnYr9mK2YQg2YXYrdiq2YjZitin2Kog2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2KPZiCDYrdiw2YHZh9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiLYqti52K/ZitmEINmF2K3YqtmI2YrYp9iqINio2LfYp9mC2KkgU0Qg2KPZiCDYrdiw2YHZh9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTZg9iq2KfYqNipINil2YTZiSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2YPYqtin2KjYqSDYpdmE2Ykg2KjYt9in2YLYqSBTRC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY3Mjc1MDk1MTU5NDA1NDY4Ij4i4oCP2YLYsdin2KHYqSDZhdit2KrZiNmK2KfYqiDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODgxNTY0NjI5MzQ5Nzc5NDAiPiLigI/Zgtix2KfYodipINmF2K3YqtmI2YrYp9iqINio2LfYp9mC2KkgU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDY5ODg3MTI1OTgzODYwNzkiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZgtix2KfYodipINmF2K3YqtmI2YrYp9iqINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjA3MzYyNDczNjU0OTc1NDExIj4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2YLYsdin2KHYqSDZhdit2KrZiNmK2KfYqiDYqNi32KfZgtipIFNELiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+IuKAj9iq2LnYr9mK2YQg2YXYrdiq2YjZitin2Kog2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2KPZiCDYrdiw2YHZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiLigI/Yqti52K/ZitmEINmF2K3YqtmI2YrYp9iqINio2LfYp9mC2KkgU0Qg2KPZiCDYrdiw2YHZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTZg9iq2KfYqNipINil2YTZiSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiLigI/ZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2YPYqtin2KjYqSDYpdmE2Ykg2KjYt9in2YLYqSBTRC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1OTgzOTE5OTcwNjg3OTAxNSI+Itiq2LnYr9mK2YQv2K3YsNmBINmF2K3YqtmI2YrYp9iqINmI2K3Yr9ipINiq2K7YstmK2YYg2KfZhNmI2LPYp9im2Lcg2KfZhNiv2KfYrtmE2YrYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODE4OTE2MDU5NzY5ODUyOTE4NSI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNiq2LnYr9mK2YQg2YXYrdiq2YjZitin2Kog2YjYrdiv2Kkg2KrYrtiy2YrZhiDYp9mE2YjYs9in2KbYtyDYp9mE2K/Yp9iu2YTZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3NzgzMTg1OTg0NDg4NDk4MjkiPiLYpdiv2KfYsdipINin2YTYs9i52Kkg2KfZhNiq2K7YstmK2YbZitipINmE2YTZhdiz2KrZhtivIjwvc3RyaW5nPgpAQCAtNjU1LDcgKzY2NCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NjU2NDg3MjY0ODE5NjY5ODI0Ij4i2KfZhNiv2K7ZiNmEINil2YTZiSDZhti42KfZhSDZhdmE2YHYp9iqINiw2KfZg9ix2Kkg2KfZhNiq2K7YstmK2YYg2KfZhNmF2KTZgtiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjZgtix2KfYodipINmG2LjYp9mFINmF2YTZgdin2Kog2LDYp9mD2LHYqSDYp9mE2KrYrtiy2YrZhiDYp9mE2YXYpNmC2Kog2YjYp9mE2YPYqtin2KjYqSDYqNmHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlX3NpcCIgbXNnaWQ9IjU5ODY5NTIzNjI3OTU4NzA1MDIiPiLYpdis2LHYp9ihL9iq2YTZgtmKINmF2YPYp9mE2YXYp9iqINi52KjYsSDYp9mE2KXZhtiq2LHZhtiqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlX3NpcCIgbXNnaWQ9IjQ3MTc2MzIwMDAwNjI2NzQyOTQiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9iz2KrYrtiv2KfZhSDYrtiv2YXYqSBTSVAg2YTYpdis2LHYp9ihL9iq2YTZgtmKINmF2YPYp9mE2YXYp9iqINi52KjYsSDYp9mE2KXZhtiq2LHZhtiqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZV9zaXAiIG1zZ2lkPSI0NzE3NjMyMDAwMDYyNjc0Mjk0Ij4i4oCP2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KfYs9iq2K7Yr9in2YUg2K7Yr9mF2KkgU0lQINmE2KXYrNix2KfYoS/YqtmE2YLZiiDZhdmD2KfZhNmF2KfYqiDYudio2LEg2KfZhNil2YbYqtix2YbYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRfY2FsbF9zZXJ2aWNlIiBtc2dpZD0iNjcyNDAwOTcyNjY3MTI0NjU1MSI+Itin2YTYqtmB2KfYudmEINmF2Lkg2KfZhNi02KfYtNipINij2KvZhtin2KEg2KfZhNin2KrYtdin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kX2NhbGxfc2VydmljZSIgbXNnaWQ9Ijg3MzI1NDc2NjI0NDI1NzI0MzUiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KrYrdmD2YUg2YHZiiDZiNmC2Kog2YjZg9mK2YHZitipINmF2LTYp9mH2K/YqSDYp9mE2YXYs9iq2K7Yr9mFINmE2YTYtNin2LTYqSDYo9ir2YbYp9ihINin2YTYp9iq2LXYp9mELiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3ODYyNTkzMjgzNjExNDkzMjMyIj4i2YLYsdin2KHYqSDYqNmK2KfZhtin2Kog2KfZhNin2LPYqtiu2K/Yp9mFINin2YTYs9in2KjZgtipINmE2YTYtNio2YPYqSI8L3N0cmluZz4KQEAgLTgwOSwxNCArODE4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4i2KfZhNmF2YbYstmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+Itin2YTYudmF2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+Iti62YrYsSDYsNmE2YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLYp9mD2KrYqCDYsdmF2LIg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+Itin2YPYqtioINix2YXYsiBQVUsg2YjYsdmF2LIg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2KzYr9mK2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+Itix2YXYsiBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Itix2YXYsiDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINin2YTYrNiv2YrYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IuKAj9in2YPYqtioINix2YXYsiDYsdmF2LIgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4i4oCP2KfZg9iq2Kgg2LHZhdiyIFBVSyDZiNix2YXYsiDYsdmF2LIgUElOINin2YTYrNiv2YrYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4i4oCP2LHZhdiyIFBVSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i4oCP2LHZhdiyINix2YXYsiBQSU4g2KfZhNis2K/ZitivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i2KfZhNmF2LMg2YTZg9iq2KfYqNipINmD2YTZhdipINin2YTZhdix2YjYsSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+Itin2YPYqtioINmD2YTZhdipINin2YTZhdix2YjYsSDZhNil2YTYutin2KEg2KfZhNiq2KPZhdmK2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLYp9mD2KrYqCDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINmE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+Itix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2LrZitixINi12K3ZititLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuKAj9in2YPYqtioINix2YXYsiBQSU4g2YTYpdmE2LrYp9ihINin2YTYqtij2YXZitmGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4oCP2LHZhdiyIFBJTiDYutmK2LEg2LXYrdmK2K0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+ItmE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhtiMINin2LbYuti3INi52YTZiSBcItin2YTZgtin2KbZhdipXCIg2KvZhSDYudmE2YkgMC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbF9kaWFsb2dfbnVtYmVyX2Zvcl9kaXNwbGF5IiBtc2dpZD0iNjk2MTkyMTAzMTk1MDkwOTcwIj4i2LHZgtmFINin2YTYt9mI2KfYsdimIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4OTYzODM5MjQyNTY1NjUzMTkyIj4i2YTYpyDYqtiq2YjZgdixINiu2K/ZhdipIjwvc3RyaW5nPgpAQCAtODM0LDEzICs4NDMsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fY2hhcmdlZCIgbXNnaWQ9IjMyMTYzNTc0NTY4NDA2MDYyNCI+Itiq2YUg2KfZhNi02K3ZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYmF0dGVyeV9zaG9ydCIgbXNnaWQ9IjQ0NzcyNjQ4NDkzODY4NTAyNjYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9sb3dfYmF0dGVyeSIgbXNnaWQ9IjE0ODI4NzM5ODE5MTkyNDk3NDAiPiLYqtmI2LXZitmEINis2YfYp9iyINin2YTYtNit2YYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5OTQzOTI3NzgxOTIxNTM5OSI+ItmE2YrYs9iqINmH2YbYp9mDINio2LfYp9mC2KkgU0lNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTE2NTkxOTYwOTU3OTE0NzQiPiLZhNmK2LMg2YfZhtin2YMg2KjYt9in2YLYqSBTSU0g2YHZiiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODY5MjA1ODU2OTUxNjkwNzgiPiLZhNmK2LMg2YfZhtin2YMg2KjYt9in2YLYqSBTSU0g2YHZiiDYp9mE2YfYp9iq2YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4i2KPYr9iu2YQg2KjYt9in2YLYqSBTSU0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjM1MjY1NzMwOTkwMTkzMTk0NzIiPiLYqNi32KfZgtipIFNJTSDZhdmB2YLZiNiv2Kkg2KPZiCDYutmK2LEg2YLYp9io2YTYqSDZhNmE2YLYsdin2KHYqS4g2KPYr9iu2YQg2KjYt9in2YLYqSBTSU0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk2MTQ5NjY1MTM4OTE2MTg0Ij4i2KjYt9in2YLYqSBTSU0g2LrZitixINmC2KfYqNmE2Kkg2YTZhNin2LPYqtiu2K/Yp9mFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiLYqtmFINiq2LnYt9mK2YQg2KjYt9in2YLYqSBTSU0g2KjYtNmD2YQg2K/Yp9im2YUuXG4g2KfYqti12YQg2KjZhdmC2K/ZhSDYrtiv2YXYqSDYp9mE2YTYp9iz2YTZg9mKINmE2YTYrdi12YjZhCDYudmE2Ykg2KjYt9in2YLYqSBTSU0g2KPYrtix2YkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5OTQzOTI3NzgxOTIxNTM5OSI+IuKAj9mE2YrYs9iqINmH2YbYp9mDINio2LfYp9mC2KkgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTE2NTkxOTYwOTU3OTE0NzQiPiLigI/ZhNmK2LMg2YfZhtin2YMg2KjYt9in2YLYqSBTSU0g2YHZiiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODY5MjA1ODU2OTUxNjkwNzgiPiLigI/ZhNmK2LMg2YfZhtin2YMg2KjYt9in2YLYqSBTSU0g2YHZiiDYp9mE2YfYp9iq2YEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4i4oCP2KPYr9iu2YQg2KjYt9in2YLYqSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjM1MjY1NzMwOTkwMTkzMTk0NzIiPiLigI/YqNi32KfZgtipIFNJTSDZhdmB2YLZiNiv2Kkg2KPZiCDYutmK2LEg2YLYp9io2YTYqSDZhNmE2YLYsdin2KHYqS4g2KPYr9iu2YQg2KjYt9in2YLYqSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk2MTQ5NjY1MTM4OTE2MTg0Ij4i4oCP2KjYt9in2YLYqSBTSU0g2LrZitixINmC2KfYqNmE2Kkg2YTZhNin2LPYqtiu2K/Yp9mFLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiLigI/YqtmFINiq2LnYt9mK2YQg2KjYt9in2YLYqSBTSU0g2KjYtNmD2YQg2K/Yp9im2YUuXG4g2KfYqti12YQg2KjZhdmC2K/ZhSDYrtiv2YXYqSDYp9mE2YTYp9iz2YTZg9mKINmE2YTYrdi12YjZhCDYudmE2Ykg2KjYt9in2YLYqSBTSU0g2KPYrtix2YkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwMTU5NDkwNTE1Mjc0Njg4NiI+Itiy2LEg2KfZhNmF2YLYt9i5INin2YTYtdmI2KrZiiDYp9mE2LPYp9io2YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjA4OTI5NzY1MDQ4MTI5MjM2MyI+Itiy2LEg2KfZhNmF2YLYt9i5INin2YTYtdmI2KrZiiDYp9mE2KrYp9mE2YoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTkwODg3ODY3ODAxMjgwMDEiPiLYstixINin2YTYpdmK2YLYp9mBINin2YTZhdik2YLYqiI8L3N0cmluZz4KQEAgLTg0OCwxNSArODU3LDE1IEBACiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDU2MjMxODM3ODc2Njk4NzYwMSI+Itiy2LEg2KfZhNil2YrZgtin2YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbHNfb25seSIgbXNnaWQ9IjY3MzM5NzgzMDQzODYzNjU0MDciPiLZhdmD2KfZhNmF2KfYqiDYt9mI2KfYsdimINmB2YLYtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjE0MzM4OTIyNDk4NjAyODUwMSI+Itin2YTYtNio2YPYqSDZhdik2YXZkdmG2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4i2KjYt9in2YLYqSBTSU0g2YXYpNmF2ZHZhtipINio2YPZiNivIFBVSy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4i4oCP2KjYt9in2YLYqSBTSU0g2YXYpNmF2ZHZhtipINio2YPZiNivIFBVSy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiLYsdin2KzYuSDYr9mE2YrZhCDYp9mE2YXYs9iq2K7Yr9mFINij2Ygg2KfYqti12YQg2KjYrtiv2YXYqSDYp9mE2LnZhdmE2KfYoS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjgwNjY2NjAxMjkyMDYwMDEwMzkiPiLYqNi32KfZgtipIFNJTSDZhdik2YXZkdmG2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNTk1MzIzMjE0MDUyODgxMjY0Ij4i2KzYp9ix2Y0g2KXZhNi62KfYoSDYqtij2YXZitmGINio2LfYp9mC2KkgU0lN4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI4MDY2NjYwMTI5MjA2MDAxMDM5Ij4i4oCP2KjYt9in2YLYqSBTSU0g2YXYpNmF2ZHZhtipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjU5NTMyMzIxNDA1Mjg4MTI2NCI+IuKAj9is2KfYsdmNINil2YTYutin2KEg2KrYo9mF2YrZhiDYqNi32KfZgtipIFNJTeKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjQ4MTYyMzgzMDM0NDEwNzIyMiI+ItmE2YLYryDYsdiz2YXYqiDZhtmC2LQg2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiDYqNi32LHZitmC2Kkg2LrZitixINi12K3Zitit2KkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLlxuXG7Yp9mE2LHYrNin2KEg2KXYudin2K/YqSDYp9mE2YXYrdin2YjZhNipINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSIyNzI1OTczMjg2MjM5MzQ0NTU1Ij4i2YTZgtivINmD2KrYqNiqINmD2YTZhdipINin2YTZhdix2YjYsSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdix2Kkg2KjYtNmD2YQg2LrZitixINi12K3ZititLiBcblxu2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2MjE2NjcyNzA2NTQ1Njk2OTU1Ij4i2YTZgtivINmD2KrYqNiqINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipINio2LTZg9mEINi62YrYsSDYtdit2YrYrS4gXG5cbtij2LnYryDYp9mE2YXYrdin2YjZhNipINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+ItmE2YLYryDYsdiz2YXYqiDZhtmC2LQg2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiDYqNi52K8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYrdin2YjZhNin2Kog2LrZitixINin2YTZhtin2KzYrdipINin2YTYo9iu2LHZidiMINiz2KrZj9i32KfZhNioINio2KXZhNi62KfYoSDYqtij2YXZitmGINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2Yog2KjYp9iz2KrYrtiv2KfZhSDZhdi52YTZiNmF2KfYqiDYqtiz2KzZitmEINin2YTYr9iu2YjZhCDYpdmE2YkgR29vZ2xlLlxuXG4g2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjU5MDIyNzU1OTc2Mzc2Mjc1MSI+ItmE2YLYryDYsdiz2YXYqiDZhtmC2LQg2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiDYqNi52K8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYrdin2YjZhNin2Kog2LrZitixINin2YTZhtin2KzYrdipINin2YTYo9iu2LHZidiMINiz2KrZj9i32KfZhNioINio2KXZhNi62KfYoSDYqtij2YXZitmGINin2YTZh9in2KrZgSDYqNin2LPYqtiu2K/Yp9mFINmF2LnZhNmI2YXYp9iqINiq2LPYrNmK2YQg2KfZhNiv2K7ZiNmEINil2YTZiSBHb29nbGUuXG5cbiDYo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjYyMTY2NzI3MDY1NDU2OTY5NTUiPiLigI/ZhNmC2K8g2YPYqtio2Kog2LHZhdiyIFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdix2Kkg2KjYtNmD2YQg2LrZitixINi12K3ZititLiBcblxu2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI5MTkxNjExOTg0NjI1NDYwODIwIj4i4oCP2YTZgtivINix2LPZhdiqINmG2YLYtCDYpdmE2LrYp9ihINin2YTYqtij2YXZitmGINio2LTZg9mEINi62YrYsSDYtdit2YrYrSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdix2KkuINio2LnYryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2Kkg2KfZhNij2K7YsdmJ2Iwg2LPYqtmP2LfYp9mE2Kgg2KjYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDYqNin2LPYqtiu2K/Yp9mFINmF2LnZhNmI2YXYp9iqINiq2LPYrNmK2YQg2KfZhNiv2K7ZiNmEINil2YTZiSBHb29nbGUuXG5cbiDYo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNTkwMjI3NTU5NzYzNzYyNzUxIj4i4oCP2YTZgtivINix2LPZhdiqINmG2YLYtCDYpdmE2LrYp9ihINin2YTYqtij2YXZitmGINio2LTZg9mEINi62YrYsSDYtdit2YrYrSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdix2KkuINio2LnYryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2Kkg2KfZhNij2K7YsdmJ2Iwg2LPYqtmP2LfYp9mE2Kgg2KjYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KfZhNmH2KfYqtmBINio2KfYs9iq2K7Yr9in2YUg2YXYudmE2YjZhdin2Kog2KrYs9is2YrZhCDYp9mE2K/YrtmI2YQg2KXZhNmJIEdvb2dsZS5cblxuINij2LnYryDYp9mE2YXYrdin2YjZhNipINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxMjgxMDYzOTk3NDU3NTU2MDQiPiLZhNmC2K8g2K3Yp9mI2YTYqiDYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdix2KfYqi4g2KjYudivIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2K3Yp9mI2YTYp9iqINi62YrYsSDYp9mE2YbYp9is2K3YqdiMINiz2KrYqtmFINil2LnYp9iv2Kkg2KrYudmK2YrZhiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINil2YTZiSDYp9mE2KXYudiv2KfYr9in2Kog2KfZhNin2YHYqtix2KfYttmK2Kkg2YTZhNmF2LXZhti5INmI2LPZitiq2YUg2YHZgtivINis2YXZiti5INio2YrYp9mG2KfYqiDYp9mE2YXYs9iq2K7Yr9mFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODYwMzU2NTE0MjE1NjgyNjU2NSI+ItmE2YLYryDYrdin2YjZhNiqINil2YTYutin2KEg2KrYo9mF2YrZhiDYp9mE2YfYp9iq2YEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYsdin2KouINio2LnYryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2KnYjCDYs9iq2KrZhSDYpdi52KfYr9ipINiq2LnZitmK2YYg2KfZhNmH2KfYqtmBINil2YTZiSDYp9mE2KXYudiv2KfYr9in2Kog2KfZhNin2YHYqtix2KfYttmK2Kkg2YTZhNmF2LXZhti5INmI2LPZitiq2YUg2YHZgtivINis2YXZiti5INio2YrYp9mG2KfYqiDYp9mE2YXYs9iq2K7Yr9mFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI4MDg3MzUxNjQ5MzkzNDM2NSI+ItmE2YLYryDYrdin2YjZhNiqINil2YTYutin2KEg2KrYo9mF2YrZhiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdix2KfYqiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0uINiz2YrYqtmFINin2YTYotmGINil2LnYp9iv2Kkg2KrYudmK2YrZhiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINil2YTZiSDYp9mE2KXYudiv2KfYr9in2Kog2KfZhNin2YHYqtix2KfYttmK2Kkg2YTZhNmF2LXZhti5LiI8L3N0cmluZz4KQEAgLTg2NSwxMiArODc0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iMjYyNjk5OTQ0OTYxMDY5NTkzMCI+ItmH2YQg2YbYs9mK2Kog2KfZhNmG2YXYt9ifIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fZm9yZ290X3BhdHRlcm4iIG1zZ2lkPSIyNTg4NTIxNTAxMTY2MDMyNzQ3Ij4i2KXZhNi62KfYoSDYqtij2YXZitmGINin2YTYrdiz2KfYqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iMjc1MTM2ODYwNTI4NzI4ODgwOCI+ItmF2K3Yp9mI2YTYp9iqINin2YTZhtmC2LQg2YPYq9mK2LHYqSDYrNiv2YvYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiLZhNil2YTYutin2KEg2KfZhNiq2KPZhdmK2YbYjCDYs9is2ZHZhCDYp9mE2K/YrtmI2YQg2KjYrdiz2KfYqNmDINmB2YogR29vZ2xlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiLigI/ZhNil2YTYutin2KEg2KfZhNiq2KPZhdmK2YbYjCDYs9is2ZHZhCDYp9mE2K/YrtmI2YQg2KjYrdiz2KfYqNmDINmB2YogR29vZ2xlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI4ODQ2ODgxNDI0MTA2NDg0NDQ3Ij4i2KfYs9mFINin2YTZhdiz2KrYrtiv2YUgKNin2YTYqNix2YrYryDYpdmE2YPYqtix2YjZhtmKKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI1OTU4MDI4MzgzOTU0NzM4NTI4Ij4i2YPZhNmF2Kkg2KfZhNmF2LHZiNixIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjcxMzA4OTM2OTQ3OTU3ODYzMDAiPiLYqtiz2KzZitmEINin2YTYr9iu2YjZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSIxMzY0MDUxNDczMzQ3NDg1OTA4Ij4i2KfYs9mFINin2YTZhdiz2KrYrtiv2YUg2LrZitixINi12K3ZititINij2Ygg2YPZhNmF2Kkg2KfZhNmF2LHZiNixINi62YrYsSDYtdit2YrYrdipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjE2OTY5MjQ3NjM2OTAzNzkwNzMiPiLZh9mEINmG2LPZitiqINin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFINij2Ygg2YPZhNmF2Kkg2KfZhNmF2LHZiNix2J9cbtin2YbYqtmC2YQg2KXZhNmJICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSIxNjk2OTI0NzYzNjkwMzc5MDczIj4i4oCP2YfZhCDZhtiz2YrYqiDYp9iz2YUg2KfZhNmF2LPYqtiu2K/ZhSDYo9mIINmD2YTZhdipINin2YTZhdix2YjYsdifXG7Yp9mG2KrZgtmEINil2YTZiSAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSI3MTE0NjI3MzUxMjg2OTMzODY3Ij4i2KzYp9ix2Y0g2KfZhNiq2K3ZgtmCLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl91bmxvY2tfbGFiZWwiIG1zZ2lkPSI3Mzc0NDA0ODMyMjA2NjcwNTQiPiLYpdmE2LrYp9ihINiq2KPZhdmK2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29uX2xhYmVsIiBtc2dpZD0iOTA2ODg3NzU3NjUxMzQyNTk3MCI+Itiq2LTYutmK2YQg2KfZhNi12YjYqiI8L3N0cmluZz4KQEAgLTg3OSw3ICs4ODgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jbGVhcmVkIiBtc2dpZD0iNTU4MzQ3OTcyMTAwMTYzOTU3OSI+Itiq2YUg2YXYrdmIINin2YTZhtmF2LciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NlbGxfYWRkZWQiIG1zZ2lkPSI2NzU2MDMxMjA4MzU5MjkyNDg3Ij4i2KrZhdiqINil2LbYp9mB2Kkg2KfZhNiu2YTZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9kZXRlY3RlZCIgbXNnaWQ9IjQ5ODg3MzA4OTU1NTQwNTcwNTgiPiLYp9mD2KrZhdmEINin2YTZhtmF2LciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuINin2YTYo9iv2KfYqSAlMiRkINmF2YYgJTMkZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IuKAjyUxJHMuINin2YTYo9iv2KfYqSAlMiRkINmF2YYgJTMkZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i2KXYttin2YHYqSDYo9iv2KfYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+ItmB2KfYsdi62KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+Itiq2YUg2KrZiNiz2YrYuSDZhdmG2LfZgtipINil2YTYutin2KEg2KfZhNmC2YHZhC4iPC9zdHJpbmc+CkBAIC04OTYsNyArOTA1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+Itil2YTYutin2KEg2KfZhNmC2YHZhCDYqNin2LPYqtiu2K/Yp9mFINin2YTYqtmF2LHZitixLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i2KXZhNi62KfYoSDYp9mE2YLZgdmEINio2KfYs9iq2K7Yr9in2YUg2KfZhNmG2YLYtC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+Itiq2KPZhdmK2YYg2KfZhNis2YfYp9iyINio2KfZhNmI2KzZhy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4i2KXZhNi62KfYoSDYp9mE2YLZgdmEINio2KfYs9iq2K7Yr9in2YUg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4i4oCP2KXZhNi62KfYoSDYp9mE2YLZgdmEINio2KfYs9iq2K7Yr9in2YUg2LHZhdiyIFBJTi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLYpdmE2LrYp9ihINin2YTZgtmB2YQg2KjYp9iz2KrYrtiv2KfZhSDZg9mE2YXYqSDYp9mE2YXYsdmI2LEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i2YXZhti32YLYqSDYp9mE2YbZgti0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiLZhdmG2LfZgtipINin2YTYqtmF2LHZitixLiI8L3N0cmluZz4KQEAgLTkxMCw4ICs5MTksOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iaG91cl9hbXBtIiBtc2dpZD0iNDU4NDMzODA4MzUyOTM1NTk4MiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IkFNUE0iPiVQPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImhvdXJfY2FwX2FtcG0iIG1zZ2lkPSIyMDgzNDY1OTkyOTQwNDQ0MzY2Ij4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JXA8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3RfZmFpbGVkIiBtc2dpZD0iNTQxMDI3MDMyOTExNDIxMjA0MSI+Itij2K7ZgdmCINin2K7Yqtio2KfYsSDYp9mE2YXYtdmG2LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub3Rfc3lzdGVtIiBtc2dpZD0iNDQzNTIwMTY1Njc2NzI3NjcyMyI+Itil2KzYsdin2KEgRkFDVE9SWV9URVNUINi62YrYsSDZhdiq2KfYrSDYs9mI2Ykg2YTZhNit2LLZhSDYp9mE2YXYq9io2KrYqSDZgdmKIC9zeXN0ZW0vYXBwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+ItmE2YUg2YrYqtmFINin2YTYudir2YjYsSDYudmE2Ykg2KPZitipINit2LLZhdipINiq2YjZgdixINil2KzYsdin2KEgRkFDVE9SWV9URVNULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vdF9zeXN0ZW0iIG1zZ2lkPSI0NDM1MjAxNjU2NzY3Mjc2NzIzIj4i4oCP2KXYrNix2KfYoSBGQUNUT1JZX1RFU1Qg2LrZitixINmF2KrYp9itINiz2YjZiSDZhNmE2K3YstmFINin2YTZhdir2KjYqtipINmB2YogL3N5c3RlbS9hcHAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm9fYWN0aW9uIiBtc2dpZD0iODcyOTkxODc0Nzk5OTk4NTYxIj4i4oCP2YTZhSDZitiq2YUg2KfZhNi52KvZiNixINi52YTZiSDYo9mK2Kkg2K3YstmF2Kkg2KrZiNmB2LEg2KXYrNix2KfYoSBGQUNUT1JZX1RFU1QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3RfcmVib290IiBtc2dpZD0iNjMyMDE2ODIwMzA1MDc5MTY0MyI+Itil2LnYp9iv2Kkg2KrYtNi62YrZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjE5ODc0ODM5Nzc4MzQ2MDM4NzIiPiLYqti52LHYtiDYp9mE2LXZgdit2Kkg2YHZiiBcIjx4bGlmZjpnIGlkPSJUSVRMRSI+JXM8L3hsaWZmOmc+XCI6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI2OTYxOTAzMjEzNzI5NjY3NTczIj4i2KzYp9mB2Kcg2LPZg9ix2YrYqNiqIjwvc3RyaW5nPgpAQCAtOTQwLDcgKzk0OSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hcmVhIiBtc2dpZD0iMzU0NzQwOTA1MDg4OTk1MjQyMyI+Itin2YTZhdmG2LfZgtipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZW1pcmF0ZSIgbXNnaWQ9IjI4OTM4ODA5Nzg4MzU2OTg4MTgiPiLYp9mE2KXZhdin2LHYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzc1MjY1Nzc1NDA1MTA2OTgzIj4i2YLYsdin2KHYqSDYpdi02KfYsdin2Kog2YjZitioINmI2KfZhNiz2KzZhCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iODQ2MjM3ODIyNjYwMDQzOTY1OCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNmC2LHYp9ih2Kkg2LPYrNmEINis2YXZiti5INi52YbYp9mI2YrZhiBVUkwg2KfZhNiq2Yog2LLYp9ix2YfYpyDYp9mE2YXYqti12YHYrdiMINmI2KzZhdmK2Lkg2KfZhNil2LTYp9ix2KfYqiDYp9mE2YXYsdis2LnZitipINmB2Yog2KfZhNmF2KrYtdmB2K0uINmF2YTYp9it2LjYqTog2YTYpyDZitis2YjYsiDZgdix2LYg2YfYsNinINin2YTYpdiw2YYg2YXZhiDZgtmQ2KjZhCDZhdiq2LXZgdit2KfYqiDYrNmH2Kkg2K7Yp9ix2KzZitipINij2Ygg2KrYt9io2YrZgtin2Kog2KPYrtix2Ykg2KrYqtmI2YHYsSDYqNmH2Kcg2KXZhdmD2KfZhtmK2KfYqiDYqti12YHYrSDYp9mE2YjZitioLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iODQ2MjM3ODIyNjYwMDQzOTY1OCI+IuKAj9mE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNmC2LHYp9ih2Kkg2LPYrNmEINis2YXZiti5INi52YbYp9mI2YrZhiBVUkwg2KfZhNiq2Yog2LLYp9ix2YfYpyDYp9mE2YXYqti12YHYrdiMINmI2KzZhdmK2Lkg2KfZhNil2LTYp9ix2KfYqiDYp9mE2YXYsdis2LnZitipINmB2Yog2KfZhNmF2KrYtdmB2K0uINmF2YTYp9it2LjYqTog2YTYpyDZitis2YjYsiDZgdix2LYg2YfYsNinINin2YTYpdiw2YYg2YXZhiDZgtmQ2KjZhCDZhdiq2LXZgdit2KfYqiDYrNmH2Kkg2K7Yp9ix2KzZitipINij2Ygg2KrYt9io2YrZgtin2Kog2KPYrtix2Ykg2KrYqtmI2YHYsSDYqNmH2Kcg2KXZhdmD2KfZhtmK2KfYqiDYqti12YHYrSDYp9mE2YjZitioLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzcxNDc4NTE2NTI3MzMxNDQ5MCI+ItmD2KrYp9io2Kkg2KXYtNin2LHYp9iqINmI2YrYqCDZiNin2YTYs9is2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY4MjU1Mjc0NjkxNDU3NjA5MjIiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqti52K/ZitmEINiz2KzZhCDYp9mE2YXYqti12YHYrSDYo9mIINin2YTYpdi02KfYsdin2Kog2KfZhNmF2LHYrNi52YrYqSDYp9mE2YXYrtiy2YbYqSDYudmE2Ykg2KzZh9in2LLZgyDYp9mE2YTZiNit2YouINmI2YLYryDZitiq2YrYrSDZh9iw2Kcg2YTZhNiq2LfYqNmK2YIg2YXYrdmIINio2YrYp9mG2KfYqiDYp9mE2YXYqti12YHYrSDYo9mIINiq2LnYr9mK2YTZh9inLiDZhdmE2KfYrdi42Kk6INmE2Kcg2YrYrNmI2LIg2YHYsdi2INmH2LDYpyDYp9mE2KXYsNmGINmF2YYg2YLZkNio2YQg2YXYqti12YHYrdin2Kog2KzZh9in2Kog2K7Yp9ix2KzZitipINij2Ygg2KrYt9io2YrZgtin2Kog2KPYrtix2Ykg2KjZh9inINil2YXZg9in2YbZitin2Kog2KrYtdmB2K0g2KfZhNmI2YrYqC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDk3Mzg5NTMxMDE0MTg1NTA5Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYudiv2YrZhCDYs9is2YQg2KfZhNmF2KrYtdmB2K0g2KPZiCDYp9mE2KXYtNin2LHYp9iqINin2YTZhdix2KzYudmK2Kkg2KfZhNmF2K7YstmG2Kkg2LnZhNmJINmH2KfYqtmB2YMuINmI2YLYryDZitiq2YrYrSDZh9iw2Kcg2YTZhNiq2LfYqNmK2YIg2YXYrdmIINio2YrYp9mG2KfYqiDYp9mE2YXYqti12YHYrSDYo9mIINiq2LnYr9mK2YTZh9inLiDZhdmE2KfYrdi42Kk6INmE2Kcg2YrYrNmI2LIg2YHYsdi2INmH2LDYpyDYp9mE2KXYsNmGINmF2YYg2YLZkNio2YQg2YXYqti12YHYrdin2Kog2KzZh9in2Kog2K7Yp9ix2KzZitipINij2Ygg2KrYt9io2YrZgtin2Kog2KPYrtix2Ykg2KjZh9inINil2YXZg9in2YbZitin2Kog2KrYtdmB2K0g2KfZhNmI2YrYqC4iPC9zdHJpbmc+CkBAIC05NzcsOSArOTg2LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fY2xlYXIiIG1zZ2lkPSIxMzMwMjgxOTkwOTUxODMzMDMzIj4i2YXYrdmIINi32YTYqCDYp9mE2KjYrdirIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zdWJtaXQiIG1zZ2lkPSIyNjg4NDUwMTMzMjk3OTgzNTQyIj4i2KXYsdiz2KfZhCDYt9mE2Kgg2KfZhNio2K3YqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fdm9pY2UiIG1zZ2lkPSIyNDUzMjAzNjk1Njc0OTk0NDQwIj4i2KfZhNio2K3YqyDYp9mE2LXZiNiq2YoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX3RpdGxlIiBtc2dpZD0iNzQ2MDY5NDA3MDMwOTczMDE0OSI+ItmH2YQg2KrYsdmK2K8g2KrZhdmD2YrZhiDZhdmK2LLYqSBFeHBsb3JlIGJ5IFRvdWNo2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg2NTU4ODc1MzkwODk5MTA1NzciPiLZitix2YrYryA8eGxpZmY6ZyBpZD0iQUNDRVNTSUJJTElUWV9TRVJWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+INiq2YXZg9mK2YYg2YXZitiy2KkgRXhwbG9yZSBieSBUb3VjaC4g2LnZhtivINiq2LTYutmK2YQg2YXZitiy2KkgRXhwbG9yZSBieSBUb3VjaNiMINiz2YrZg9mI2YYg2KjYpdmF2YPYp9mG2YMg2LPZhdin2Lkg2KPZiCDZhdi02KfZh9iv2Kkg2KPZiNi12KfZgSDZhNmF2Kcg2KrYrdiqINil2LXYqNi52YMg2KPZiCDYpdis2LHYp9ihINil2YrZhdin2KHYp9iqINmE2YTYqtmB2KfYudmEINmF2Lkg2KfZhNis2YfYp9iyINin2YTZhNmI2K3Zii4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNzA4MTk5NjcyODUyMzczMTk1Ij4i2YrYsdmK2K8gPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDYqtmF2YPZitmGINmF2YrYstipIEV4cGxvcmUgYnkgVG91Y2guINi52YbYryDYqti02LrZitmEINmF2YrYstipIEV4cGxvcmUgYnkgVG91Y2jYjCDYs9mK2YPZiNmGINio2KXZhdmD2KfZhtmDINiz2YXYp9i5INij2Ygg2YXYtNin2YfYr9ipINij2YjYtdin2YEg2YTZhdinINiq2K3YqiDYpdi12KjYudmDINij2Ygg2KXYrNix2KfYoSDYpdmK2YXYp9ih2KfYqiDZhNmE2KrZgdin2LnZhCDZhdi5INin2YTZh9in2KrZgS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX3RpdGxlIiBtc2dpZD0iNzQ2MDY5NDA3MDMwOTczMDE0OSI+IuKAj9mH2YQg2KrYsdmK2K8g2KrZhdmD2YrZhiDZhdmK2LLYqSBFeHBsb3JlIGJ5IFRvdWNo2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg2NTU4ODc1MzkwODk5MTA1NzciPiLigI/Zitix2YrYryA8eGxpZmY6ZyBpZD0iQUNDRVNTSUJJTElUWV9TRVJWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+INiq2YXZg9mK2YYg2YXZitiy2KkgRXhwbG9yZSBieSBUb3VjaC4g2LnZhtivINiq2LTYutmK2YQg2YXZitiy2KkgRXhwbG9yZSBieSBUb3VjaNiMINiz2YrZg9mI2YYg2KjYpdmF2YPYp9mG2YMg2LPZhdin2Lkg2KPZiCDZhdi02KfZh9iv2Kkg2KPZiNi12KfZgSDZhNmF2Kcg2KrYrdiqINil2LXYqNi52YMg2KPZiCDYpdis2LHYp9ihINil2YrZhdin2KHYp9iqINmE2YTYqtmB2KfYudmEINmF2Lkg2KfZhNis2YfYp9iyINin2YTZhNmI2K3Zii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNzA4MTk5NjcyODUyMzczMTk1Ij4i4oCP2YrYsdmK2K8gPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDYqtmF2YPZitmGINmF2YrYstipIEV4cGxvcmUgYnkgVG91Y2guINi52YbYryDYqti02LrZitmEINmF2YrYstipIEV4cGxvcmUgYnkgVG91Y2jYjCDYs9mK2YPZiNmGINio2KXZhdmD2KfZhtmDINiz2YXYp9i5INij2Ygg2YXYtNin2YfYr9ipINij2YjYtdin2YEg2YTZhdinINiq2K3YqiDYpdi12KjYudmDINij2Ygg2KXYrNix2KfYoSDYpdmK2YXYp9ih2KfYqiDZhNmE2KrZgdin2LnZhCDZhdi5INin2YTZh9in2KrZgS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjczOTYzODQ1MDg5NTM3Nzk5MjUiPiLZgtio2YQg2LTZh9ixINmI2KfYrdivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmVmb3JlT25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI5MDkxMzQ1NDY4MzY0OTk4MjYiPiLZgtio2YQg2LTZh9ixINmI2KfYrdivIjwvc3RyaW5nPgogICA8cGx1cmFscyBuYW1lPSJudW1fc2Vjb25kc19hZ28iPgpAQCAtMTA5NSw3ICsxMTA0LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+ItmE2LXZgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i2KfYs9iq2KjYr9in2YQuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i2K3YsNmBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLZhtiz2K4g2LnZhtmI2KfZhiBVUkwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IuKAj9mG2LPYriDYudmG2YjYp9mGIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+Itiq2K3Yr9mK2K8g2YbYtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLYqtit2K/ZitivINin2YTZhti1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+Itil2LbYp9mB2Kkg2KXZhNmJINin2YTZgtin2YXZiNizIjwvc3RyaW5nPgpAQCAtMTExNyw5ICsxMTI2LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9IndoaWNoQXBwbGljYXRpb24iIG1zZ2lkPSI0NTMzMTg1OTQ3MDY0NzczMzg2Ij4i2KXZg9mF2KfZhCDYp9mE2KXYrNix2KfYoSDYqNin2LPYqtiu2K/Yp9mFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2hpY2hIb21lQXBwbGljYXRpb24iIG1zZ2lkPSI0NjE2NDIwMTcyNzI3MzI2NzgyIj4i2KrYrdiv2YrYryDYqti32KjZitmCINin2YTYtNin2LTYqSDYp9mE2LHYptmK2LPZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+Itin2YTYp9iz2KrYrtiv2KfZhSDYqNi02YPZhCDYp9mB2KrYsdin2LbZiiDZhNmH2LDYpyDYp9mE2KXYrNix2KfYoS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjbGVhckRlZmF1bHRIaW50TXNnIiBtc2dpZD0iMzI1MjU4NDY4OTUxMjA3NzI1NyI+ItmK2YXZg9mG2YMg2YXYrdmIINin2YTYpdi52K/Yp9iv2KfYqiDYp9mE2KfZgdiq2LHYp9i22YrYqSDZgdmKINil2LnYr9in2K/Yp9iqINin2YTZhti42KfZhSAmZ3Q7INin2YTYqti32KjZitmC2KfYqiAmZ3Q7INmF2Kcg2KrZhSDYqtmG2LLZitmE2YcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLigI/ZitmF2YPZhtmDINmF2K3ZiCDYp9mE2KXYudiv2KfYr9in2Kog2KfZhNin2YHYqtix2KfYttmK2Kkg2YHZiiDYpdi52K/Yp9iv2KfYqiDYp9mE2YbYuNin2YUgJmd0OyDYp9mE2KrYt9io2YrZgtin2KogJmd0OyDZhdinINiq2YUg2KrZhtiy2YrZhNmHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZUFjdGl2aXR5IiBtc2dpZD0iNzQ4Njg3NjE0Nzc1MTgwMzMzMyI+Itin2K7YqtmK2KfYsSDYpdis2LHYp9ihIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4i2KfYrtiq2YrYp9ixINij2K3YryDYp9mE2KrYt9io2YrZgtin2Kog2YTYrNmH2KfYsiBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VVc2JBY3Rpdml0eSIgbXNnaWQ9IjY4OTQ3NDg0MTYwNzM1ODM1MDkiPiLigI/Yp9iu2KrZitin2LEg2KPYrdivINin2YTYqti32KjZitmC2KfYqiDZhNis2YfYp9iyIFVTQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vQXBwbGljYXRpb25zIiBtc2dpZD0iMjk5MTgxNDI3MzkzNjUwNDY4OSI+ItmE2YrYs9iqINmH2YbYp9mDINiq2LfYqNmK2YLYp9iqINmK2YXZg9mG2YfYpyDYqtmG2YHZitiwINmH2LDYpyDYp9mE2KXYrNix2KfYoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZXJyX3RpdGxlIiBtc2dpZD0iMTkwNTgwMDU2MDMxNzEzNzc1MiI+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZXJyX2FwcGxpY2F0aW9uIiBtc2dpZD0iOTMyNjI4NDg4MDEzMDkyNzc2Ij4i2YTZhNij2LPZgdiMINiq2YjZgtmBIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgpAQCAtMTEzOCwxMCArMTE0NywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfb3JpZ2luYWwiIG1zZ2lkPSIxODgxMDIwMjMwMjE2Njg2ODMiPiLYqtmFINiq2LTYutmK2YQgPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDZhdmGINin2YTYo9i12YQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3NjYWxlIiBtc2dpZD0iMzIwMjk1NTY2NzY3NTk0NDQ5OSI+Itiq2K/YsdisIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3Nob3ciIG1zZ2lkPSI0MDEzODc4ODc2NDg2NjU1ODkyIj4i2KfZhNil2LjZh9in2LEg2K/Yp9im2YXZi9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX2hpbnQiIG1zZ2lkPSIxMDY0NTI0MDg0NTQzMzA0NDU5Ij4i2YrZhdmD2YbZgyDYpdi52KfYr9ipINiq2YXZg9mK2YYg2YfYsNinINmB2Yog2KXYudiv2KfYr9in2Kog2KfZhNmG2LjYp9mFICZndDsg2KfZhNiq2LfYqNmK2YLYp9iqICZndDsg2YXYpyDYqtmFINiq2YbYstmK2YTZhy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXZfYXBwbGljYXRpb24iIG1zZ2lkPSIzMzA3MjA5MTkyMTU1NDQyODI5Ij4i2KfZhtiq2YfZgyDYp9mE2KrYt9io2YrZgiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+ICjYp9mE2LnZhdmE2YrYqSA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTIkczwveGxpZmY6Zz4pINiz2YrYp9iz2KkgU3RyaWN0TW9kZSDYp9mE2YXZgdix2YjYttipINiw2KfYqtmK2YvYpy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiLYp9mG2KrZh9mD2Kog2KfZhNi52YXZhNmK2KkgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+INiz2YrYp9iz2KkgU3RyaWN0TW9kZSDYp9mE2YXZgdix2YjYttipINiw2KfYqtmK2YvYpy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ190aXRsZSIgbXNnaWQ9IjE1ODQxOTIyODU0NDE0MDU3NDYiPiLYrNin2LHZjSDYqtix2YLZitipIEFuZHJvaWQuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfaGludCIgbXNnaWQ9IjEwNjQ1MjQwODQ1NDMzMDQ0NTkiPiLigI/ZitmF2YPZhtmDINil2LnYp9iv2Kkg2KrZhdmD2YrZhiDZh9iw2Kcg2YHZiiDYpdi52K/Yp9iv2KfYqiDYp9mE2YbYuNin2YUgJmd0OyDYp9mE2KrYt9io2YrZgtin2KogJmd0OyDZhdinINiq2YUg2KrZhtiy2YrZhNmHLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtdl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjMzMDcyMDkxOTIxNTU0NDI4MjkiPiLigI/Yp9mG2KrZh9mDINin2YTYqti32KjZitmCIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gKNin2YTYudmF2YTZitipIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMiRzPC94bGlmZjpnPikg2LPZitin2LPYqSBTdHJpY3RNb2RlINin2YTZhdmB2LHZiNi22Kkg2LDYp9iq2YrZi9inLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtdl9wcm9jZXNzIiBtc2dpZD0iNTEyMDM5NzAxMjA0NzQ2MjQ0NiI+IuKAj9in2YbYqtmH2YPYqiDYp9mE2LnZhdmE2YrYqSA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g2LPZitin2LPYqSBTdHJpY3RNb2RlINin2YTZhdmB2LHZiNi22Kkg2LDYp9iq2YrZi9inLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3RpdGxlIiBtc2dpZD0iMTU4NDE5MjI4NTQ0MTQwNTc0NiI+IuKAj9is2KfYsdmNINiq2LHZgtmK2KkgQW5kcm9pZC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2FwayIgbXNnaWQ9Ijc5MDQwNDI2ODIxMTE1MjYxNjkiPiLYrNin2LHZjSDYqtit2LPZitmGINin2YTYqti32KjZitmCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g2YXZhiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3N0YXJ0aW5nX2FwcHMiIG1zZ2lkPSI0NTE0NjQ1MTYzNDY5MjY3MTMiPiLYqNiv2KEg2KfZhNiq2LfYqNmK2YLYp9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2NvbXBsZXRlIiBtc2dpZD0iMTQwNTk1NDc1NDExMjk5OTIyOSI+Itis2KfYsdmNINil2LnYp9iv2Kkg2KfZhNiq2LTYutmK2YQuIjwvc3RyaW5nPgpAQCAtMTE3NCwyMyArMTE4MywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfcGlja2VyX3RpdGxlIiBtc2dpZD0iMzUxNTE0MzkzOTE3NTExOTA5NCI+ItmG2LrZhdin2Kog2KfZhNix2YbZitmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfdW5rbm93biIgbXNnaWQ9IjU0Nzc5MTk5ODg3MDE3ODQ3ODgiPiLZhti62YXYqSDYsdmG2YrZhiDYutmK2LEg2YXYudix2YjZgdipIjwvc3RyaW5nPgogICA8cGx1cmFscyBuYW1lPSJ3aWZpX2F2YWlsYWJsZSI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY2NTQxMjM5ODc0MTgxNjg2OTMiPiLYtNio2YPYqSBXaS1GaSDZhdiq2KfYrdipIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MTkyNDI0NDg5MTY4Mzk3Mzg2Ij4i2LTYqNmD2KfYqiBXaS1GaSDZhdiq2KfYrdipIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjY1NDEyMzk4NzQxODE2ODY5MyI+IuKAj9i02KjZg9ipIFdpLUZpINmF2KrYp9it2KkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQxOTI0MjQ0ODkxNjgzOTczODYiPiLigI/YtNio2YPYp9iqIFdpLUZpINmF2KrYp9it2KkiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlX2RldGFpbGVkIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTYzNDEwMTQ1MDM0MzI3NzM0NSI+ItmH2YbYp9mDINi02KjZg9ipIFdpLUZpINmF2YHYqtmI2K3YqSDZhdiq2KfYrdipIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3OTE1ODk1MzIzNjQ0MjkyNzY4Ij4i2YfZhtin2YMg2LTYqNmD2KfYqiBXaS1GaSDZhdmB2KrZiNit2Kkg2YXYqtin2K3YqSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjE2MzQxMDE0NTAzNDMyNzczNDUiPiLigI/Zh9mG2KfZgyDYtNio2YPYqSBXaS1GaSDZhdmB2KrZiNit2Kkg2YXYqtin2K3YqSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzkxNTg5NTMyMzY0NDI5Mjc2OCI+IuKAj9mH2YbYp9mDINi02KjZg9in2KogV2ktRmkg2YXZgdiq2YjYrdipINmF2KrYp9it2KkiPC9pdGVtPgogICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iNDAyOTQ4OTcxNjYwNTI1NTM4NiI+Itiq2LPYrNmK2YQg2KfZhNiv2K7ZiNmEINil2YTZiSDYtNio2YPYqSBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4i4oCP2KrYs9is2YrZhCDYp9mE2K/YrtmI2YQg2KXZhNmJINi02KjZg9ipIFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmV0d29ya19hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9Ijg0OTUxNTU1OTMzNTgwNTQ2NzYiPiLYqtiz2KzZitmEINin2YTYr9iu2YjZhCDYpdmE2Ykg2KfZhNi02KjZg9ipIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW5fZGV0YWlsZWQgKDgwMDAwODE5NDE0NDc5NzYxMTgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3dhdGNoZG9nX25ldHdvcmtfZGlzYWJsZWQiIG1zZ2lkPSI3OTA0MjE0MjMxNjUxNTQ2MzQ3Ij4i2KrYudiw2LEg2KfZhNin2KrYtdin2YQg2KjZgCBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZCIgbXNnaWQ9Ijc5MDQyMTQyMzE2NTE1NDYzNDciPiLigI/Yqti52LDYsSDYp9mE2KfYqti12KfZhCDYqNmAIFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiDZhNiv2YrZh9inINin2KrYtdin2YQg2KXZhtiq2LHZhtiqINix2K/ZitihLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijk3NjExNzgyNjU5MzI0NTE3Ij4i2KfYqti12KfZhCBXaS1GaSDZhdio2KfYtNixIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4i2KfYqNiv2KMgV2ktRmkgRGlyZWN0LiDZitik2K/ZiiDZh9iw2Kcg2KXZhNmJINil2YrZgtin2YEg2LnZhdmK2YQv2YbZgti32Kkg2KfYqti12KfZhCBXaS1GaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mYWlsZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NjM2Njk2Nzc5MzU2MjMwODQiPiLYqti52LDYsSDYqNiv2KEgV2ktRmkgRGlyZWN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjA2ODMyMTg4MTY3MzczNDg4NiI+Itiq2YUg2KrYtNi62YrZhCDYp9iq2LXYp9mEIFdpLUZpINin2YTZhdio2KfYtNixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZGlhbG9nX3RpdGxlIiBtc2dpZD0iOTc2MTE3ODI2NTkzMjQ1MTciPiLigI/Yp9iq2LXYp9mEIFdpLUZpINmF2KjYp9i02LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90dXJub25fbWVzc2FnZSIgbXNnaWQ9IjI5MDkyNTA5NDIyOTk2MjcyNDQiPiLigI/Yp9io2K/YoyBXaS1GaSBEaXJlY3QuINmK2KTYr9mKINmH2LDYpyDYpdmE2Ykg2KXZitmC2KfZgSDYudmF2YrZhC/ZhtmC2LfYqSDYp9iq2LXYp9mEIFdpLUZpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZhaWxlZF9tZXNzYWdlIiBtc2dpZD0iMzc2MzY2OTY3NzkzNTYyMzA4NCI+IuKAj9iq2LnYsNixINio2K/YoSBXaS1GaSBEaXJlY3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMDY4MzIxODgxNjczNzM0ODg2Ij4i4oCP2KrZhSDYqti02LrZitmEINin2KrYtdin2YQgV2ktRmkg2KfZhNmF2KjYp9i02LEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTYzODk0OTk1Mzk5Mzg5NDMzNSI+Itin2YTZhdizINmE2YTYrdi12YjZhCDYudmE2Ykg2KfZhNil2LnYr9in2K/Yp9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMTY0NTI2NzI1OTI3MjgyOTU1OSI+ItmC2KjZiNmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVjbGluZSIgbXNnaWQ9IjIxMTIyMjU0NTE3MDYxMzc4OTQiPiLYsdmB2LYiPC9zdHJpbmc+CkBAIC0xMTk4LDI4ICsxMjA3LDI4IEBACiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3RvX2Nvbm5lY3RfdGl0bGUiIG1zZ2lkPSI0OTU4ODAzOTQ4NjU4NTMzNjM3Ij4i2K/YudmI2Kkg2YTZhNin2KrYtdin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcm9tX21lc3NhZ2UiIG1zZ2lkPSI1NzAzODkxNzQ3MzE5NTE3NjkiPiLZhdmGOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3RvX21lc3NhZ2UiIG1zZ2lkPSIyNDg5Njg5NzQ1MjIwNDQwOTkiPiLYpdmE2Yk6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW50ZXJfcGluX21lc3NhZ2UiIG1zZ2lkPSI1OTIwOTI5NTUwMzY3ODI4OTcwIj4i2KfZg9iq2Kgg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2YXYt9mE2YjYqDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9zaG93X3Bpbl9tZXNzYWdlIiBtc2dpZD0iODUzMDU2MzMyMzg4MDkyMTA5NCI+Itix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yo6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgwMTI5ODEyNTc3NDIyMzI0NzUiPiLYs9mK2KrZhSDZgti32Lkg2KfYqti12KfZhCDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINmF2KTZgtiq2YvYpyDYqNi02KjZg9ipIFdpLUZpINmB2Yog2KfZhNmI2YLYqiDYp9mE2LDZiiDZitmD2YjZhiDZgdmK2Ycg2YXYqti12YTYp9mLINio2YAgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzM2MzkwNzIxMzc4NzQ2OTE1MSI+Itiz2YrYqtmFINmC2LfYuSDYp9iq2LXYp9mEINin2YTZh9in2KrZgSDZhdik2YLYqtmL2Kcg2KjYtNio2YPYqSBXaS1GaSDZgdmKINin2YTZiNmC2Kog2KfZhNiw2Yog2YrZg9mI2YYg2YHZitmHINmF2KrYtdmE2KfZiyDYqNmAIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbnRlcl9waW5fbWVzc2FnZSIgbXNnaWQ9IjU5MjA5Mjk1NTAzNjc4Mjg5NzAiPiLigI/Yp9mD2KrYqCDYsdmF2LIgUElOINin2YTZhdi32YTZiNioOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UiIG1zZ2lkPSI4NTMwNTYzMzIzODgwOTIxMDk0Ij4i4oCP2LHZhdiyIFBJTjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODAxMjk4MTI1Nzc0MjIzMjQ3NSI+IuKAj9iz2YrYqtmFINmC2LfYuSDYp9iq2LXYp9mEINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2Yog2YXYpNmC2KrZi9inINio2LTYqNmD2KkgV2ktRmkg2YHZiiDYp9mE2YjZgtiqINin2YTYsNmKINmK2YPZiNmGINmB2YrZhyDZhdiq2LXZhNin2Ysg2KjZgCA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4i4oCP2LPZitiq2YUg2YLYt9i5INin2KrYtdin2YQg2KfZhNmH2KfYqtmBINmF2KTZgtiq2YvYpyDYqNi02KjZg9ipIFdpLUZpINmB2Yog2KfZhNmI2YLYqiDYp9mE2LDZiiDZitmD2YjZhiDZgdmK2Ycg2YXYqti12YTYp9mLINio2YAgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9jaGFyYWN0ZXIiIG1zZ2lkPSIzMzY1NTUwMTIwNjE3NzAxNzQ1Ij4i2KXYr9ix2KfYrCDYrdix2YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF90aXRsZSIgbXNnaWQ9IjcyOTY2MTI3ODExMjg5MTc3MTkiPiLYpdix2LPYp9mEINix2LPYp9im2YQg2YLYtdmK2LHYqSBTTVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9tZXNzYWdlIiBtc2dpZD0iMzg2Nzg5OTE2OTY1MTQ5NjQzMyI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7INmK2LHYs9mEINi52K/Yr9mL2Kcg2YPYqNmK2LHZi9inINmF2YYg2KfZhNix2LPYp9im2YQg2KfZhNmC2LXZitix2KkgU01TLiDZh9mEINiq2LHZitivINin2YTYs9mF2KfYrSDZhNmH2LDYpyDYp9mE2KrYt9io2YrZgiDYqNin2YTYp9iz2KrZhdix2KfYsSDZgdmKINil2LHYs9in2YQg2KfZhNix2LPYp9im2YTYnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+IuKAj9il2LHYs9in2YQg2LHYs9in2KbZhCDZgti12YrYsdipIFNNUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4i4oCPJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsg2YrYsdiz2YQg2LnYr9iv2YvYpyDZg9io2YrYsdmL2Kcg2YXZhiDYp9mE2LHYs9in2KbZhCDYp9mE2YLYtdmK2LHYqSBTTVMuINmH2YQg2KrYsdmK2K8g2KfZhNiz2YXYp9itINmE2YfYsNinINin2YTYqti32KjZitmCINio2KfZhNin2LPYqtmF2LHYp9ixINmB2Yog2KXYsdiz2KfZhCDYp9mE2LHYs9in2KbZhNifIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfeWVzIiBtc2dpZD0iMzY2MzcyNTk5Mzg1NTgxNjgwNyI+Itin2YTYs9mF2KfYrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4i2LHZgdi2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9tZXNzYWdlIiBtc2dpZD0iMTY0NTQzNjQ2NjI4NTMxMDg1NSI+ItmH2YbYp9mDINix2LrYqNipINmF2YYgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsg2YHZiiDYpdix2LPYp9mEINix2LPYp9mE2Kkg2KXZhNmJICZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJERVNUX0FERFJFU1MiPiUyJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0Oy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX21lc3NhZ2UiIG1zZ2lkPSIxNjQ1NDM2NDY2Mjg1MzEwODU1Ij4i4oCP2YfZhtin2YMg2LHYutio2Kkg2YXZhiAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDZgdmKINil2LHYs9in2YQg2LHYs9in2YTYqSDYpdmE2YkgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkRFU1RfQUREUkVTUyI+JTIkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSIzNDkyMDI1NzE5ODY4MDc4NDU3Ij4i2YfYsNinICI8Zm9udCBmZ2NvbG9yPSIjZmZmZmIwNjAiPiLZgtivINmK2KTYr9mKINil2YTZiSDZgdix2LYg2LHYs9mI2YUiPC9mb250PiIg2LnZhNmJINit2LPYp9io2YMg2LnZhNmJINin2YTYrNmI2KfZhC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfcHJlbWl1bV9zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSI1NTIzODI2MzQ5MTA1MTIzNjg3Ij48Zm9udCBmZ2NvbG9yPSIjZmZmZmIwNjAiPiLYs9mK2KTYr9mKINmH2LDYpyDYpdmE2Ykg2YHYsdi2INix2LPZiNmFINi52YTZiSDYrdiz2KfYqNmDINi52YTZiSDYp9mE2KzZiNin2YQuIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWxsb3ciIG1zZ2lkPSI0NDU4ODc4NjM3MTExMDIzNDEzIj4i2KXYsdiz2KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiLYpdmE2LrYp9ihIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfY2hvaWNlIiBtc2dpZD0iNTI4OTUzODU5MjI3MjIxODEzNiI+Itiq2LDZg9ixINin2K7YqtmK2KfYsdmKIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfdW5kb19pbnN0cnVjdGlvbiIgbXNnaWQ9IjQ5NjA5NDQxMzMwNTIyODc0ODQiPiLZitmF2YPZhtmDINiq2LrZitmK2LEg2LDZhNmDINmE2KfYrdmC2YvYpyDZhdmGINil2LnYr9in2K/Yp9iqwqAmZ3Q7wqDYqti32KjZitmC2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4i4oCP2YrZhdmD2YbZgyDYqti62YrZitixINiw2YTZgyDZhNin2K3ZgtmL2Kcg2YXZhiDYpdi52K/Yp9iv2KfYqsKgJmd0O8Kg2KrYt9io2YrZgtin2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2Fsd2F5c19hbGxvdyIgbXNnaWQ9IjMyNDExODExNTQ4Njk0OTMzNjgiPiLYp9mE2LPZhdin2K0g2K/ZiNmF2YvYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbmV2ZXJfYWxsb3ciIG1zZ2lkPSI0NDY5OTI3NjU3NzQyNjk2NzMiPiLYudiv2YUg2KfZhNiz2YXYp9itINmF2LfZhNmC2YvYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX3RpdGxlIiBtc2dpZD0iNjIyNzcxMjMxOTIyMzIyNjE4NSI+Itiq2YXYqiDYpdiy2KfZhNipINio2LfYp9mC2KkgU0lNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfbWVzc2FnZSIgbXNnaWQ9IjIzMzMxNjQ1NTk5NzA5NTg2NDUiPiLZhNmGINiq2YPZiNmGINi02KjZg9ipINin2YTYrNmI2KfZhCDZhdiq2KfYrdipINit2KrZiSDYqtiq2YUg2KXYudin2K/YqSDYp9mE2KrYtNi62YrZhCDZiNil2K/Yrtin2YQg2KjYt9in2YLYqSBTSU0g2LXYp9mE2K3YqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiLigI/YqtmF2Kog2KXYstin2YTYqSDYqNi32KfZgtipIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4i4oCP2YTZhiDYqtmD2YjZhiDYtNio2YPYqSDYp9mE2KzZiNin2YQg2YXYqtin2K3YqSDYrdiq2Ykg2KrYqtmFINil2LnYp9iv2Kkg2KfZhNiq2LTYutmK2YQg2YjYpdiv2K7Yp9mEINio2LfYp9mC2KkgU0lNINi12KfZhNit2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2ltX2RvbmVfYnV0dG9uIiBtc2dpZD0iODI3OTQ5OTg5MzY5OTYzNzc1Ij4i2KrZhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF90aXRsZSIgbXNnaWQ9IjM3MTk2NzA1MTI4ODk2NzQ2OTMiPiLYqtmF2Kog2KXYttin2YHYqSDYqNi32KfZgtipIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF90aXRsZSIgbXNnaWQ9IjM3MTk2NzA1MTI4ODk2NzQ2OTMiPiLigI/YqtmF2Kog2KXYttin2YHYqSDYqNi32KfZgtipIFNJTSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF9tZXNzYWdlIiBtc2dpZD0iNjU5OTk0NTMwMTE0MTA1MDIxNiI+Itij2LnYryDYqti02LrZitmEINis2YfYp9iy2YMg2YTZhNiv2K7ZiNmEINil2YTZiSDYtNio2YPYqSDYp9mE2KzZiNin2YQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2ltX3Jlc3RhcnRfYnV0dG9uIiBtc2dpZD0iNDcyMjQwNzg0MjgxNTIzMjM0NyI+Itil2LnYp9iv2Kkg2KfZhNiq2LTYutmK2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4MzQ5MzYyNjIzMDY4ODE5Mjk1Ij4i2KrYudmK2YrZhiDYp9mE2YjZgtiqIjwvc3RyaW5nPgpAQCAtMTIzMCwzOCArMTIzOSwzOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybXNfZGVzY3JpcHRpb25fYXBwIiBtc2dpZD0iNTEzOTgzNjE0MzI5MzI5OTQxNyI+ItmK2YLYr9mF2YcgPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19wZXJtaXNzaW9ucyIgbXNnaWQ9IjcyODMzNTc3MjgyMTkzMzgxMTIiPiLZhNinINij2LDZiNmG2KfYqiDZhdi32YTZiNio2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtX2Nvc3RzX21vbmV5IiBtc2dpZD0iNDkwMjQ3MDMyNDE0MjE1MTExNiI+ItmC2K8g2YrZg9mE2YHZgyDZh9iw2Kcg2YXYp9mE2KfZiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9hY3Rpdml0eV90aXRsZSIgbXNnaWQ9IjQ0NjUwNTUxNTcyMDk2NDg2NDEiPiLYqtiu2LLZitmGIFVTQiDZg9io2YrYsSDYp9mE2LPYudipIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1OTAxNDU5MDQxMzk4NzUxNDk1Ij4iVVNCINmF2KrYtdmEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMzA4NTM4MDk0MzE2NDc3ODM5Ij4i2YTZgtivINin2KrYtdmE2Kog2KjYrNmH2KfYsiDYp9mE2YPZhdio2YrZiNiq2LEg2YXZhiDYrtmE2KfZhCBVU0IuINin2YTZhdizINin2YTYstixINij2K/Zhtin2Ycg2KXYsNinINmD2YbYqiDYqtix2YrYryDZhtiz2K4g2KfZhNmF2YTZgdin2Kog2KjZitmGINis2YfYp9iyINin2YTZg9mF2KjZitmI2KrYsSDZiNmI2K3Yr9ipINiq2K7YstmK2YYgVVNCINmB2YogQW5kcm9pZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA1MzUxMDAwNDQ2MDM3ODExIj4i2YTZgtivINin2KrYtdmE2Kog2KjYrNmH2KfYsiDYp9mE2YPZhdio2YrZiNiq2LEg2YXZhiDYrtmE2KfZhCBVU0IuINin2YTZhdizINin2YTYstixINij2K/Zhtin2Ycg2KXYsNinINmD2YbYqiDYqtix2YrYryDZhtiz2K4g2KfZhNmF2YTZgdin2Kog2KjZitmGINis2YfYp9iyINin2YTZg9mF2KjZitmI2KrYsSDZiNio2LfYp9mC2KkgU0Qg2YTZgCBBbmRyb2lkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjEwNTIyNTk5MzAzNjk1MDgyMzUiPiLYqti02LrZitmEINiz2LnYqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzAxNzA0NTIxNzM2NTU0MDY1OCI+Itit2K/Yq9iqINmF2LTZg9mE2Kkg2KPYq9mG2KfYoSDYp9iz2KrYrtiv2KfZhSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDZhNiq2K7YstmK2YYg2YPYqNmK2LEg2KfZhNiz2LnYqSDYudio2LEgVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4i2K3Yr9ir2Kog2YXYtNmD2YTYqSDYo9ir2YbYp9ihINin2LPYqtiu2K/Yp9mFINio2LfYp9mC2KkgU0Qg2YTYqtiu2LLZitmGINmD2KjZitixINin2YTYs9i52Kkg2LnYqNixIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4MTc1ODkyNTU0NzU3MjE2NTI1Ij4iVVNCINmF2KrYtdmEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4i4oCP2KrYrtiy2YrZhiBVU0Ig2YPYqNmK2LEg2KfZhNiz2LnYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTkwMTQ1OTA0MTM5ODc1MTQ5NSI+IuKAj1VTQiDZhdiq2LXZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+IuKAj9mE2YLYryDYp9iq2LXZhNiqINio2KzZh9in2LIg2KfZhNmD2YXYqNmK2YjYqtixINmF2YYg2K7ZhNin2YQgVVNCLiDYp9mE2YXYsyDYp9mE2LLYsSDYo9iv2YbYp9mHINil2LDYpyDZg9mG2Kog2KrYsdmK2K8g2YbYs9iuINin2YTZhdmE2YHYp9iqINio2YrZhiDYrNmH2KfYsiDYp9mE2YPZhdio2YrZiNiq2LEg2YjZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDZgdmKIEFuZHJvaWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNTM1MTAwMDQ0NjAzNzgxMSI+IuKAj9mE2YLYryDYp9iq2LXZhNiqINio2KzZh9in2LIg2KfZhNmD2YXYqNmK2YjYqtixINmF2YYg2K7ZhNin2YQgVVNCLiDYp9mE2YXYsyDYp9mE2LLYsSDYo9iv2YbYp9mHINil2LDYpyDZg9mG2Kog2KrYsdmK2K8g2YbYs9iuINin2YTZhdmE2YHYp9iqINio2YrZhiDYrNmH2KfYsiDYp9mE2YPZhdio2YrZiNiq2LEg2YjYqNi32KfZgtipIFNEINmE2YAgQW5kcm9pZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9idXR0b25fbW91bnQiIG1zZ2lkPSIxMDUyMjU5OTMwMzY5NTA4MjM1Ij4i4oCP2KrYtNi62YrZhCDYs9i52Kkg2KrYrtiy2YrZhiBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiLigI/Yrdiv2KvYqiDZhdi02YPZhNipINij2KvZhtin2KEg2KfYs9iq2K7Yr9in2YUg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2YTYqtiu2LLZitmGINmD2KjZitixINin2YTYs9i52Kkg2LnYqNixIFVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg3NjAxODUxMjcxNjk3MDMxMyI+IuKAj9it2K/Yq9iqINmF2LTZg9mE2Kkg2KPYq9mG2KfYoSDYp9iz2KrYrtiv2KfZhSDYqNi32KfZgtipIFNEINmE2KrYrtiy2YrZhiDZg9io2YrYsSDYp9mE2LPYudipINi52KjYsSBVU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODE3NTg5MjU1NDc1NzIxNjUyNSI+IuKAj1VTQiDZhdiq2LXZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTM5ODIyNzgzODI4MTgzNzYzIj4i2KfZhNmF2LMg2YTZhtiz2K4g2KfZhNmF2YTZgdin2Kog2KXZhNmJL9mF2YYg2KzZh9in2LIg2KfZhNmD2YXYqNmK2YjYqtixLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjMzNjA1ODM5NjY2MzUxNjAxNyI+Itil2YrZgtin2YEg2KrYtNi62YrZhCDYs9i52Kkg2KrYrtiy2YrZhiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTY1Njg1MjA5ODU1NTYyMzgyMiI+Itin2YTZhdizINmE2KXZitmC2KfZgSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX3RpdGxlIiBtc2dpZD0iNjYwMTI5ODUxNzA4Nzc1ODUzIj4i2LPYudipIFVTQiDYp9mE2KrYrtiy2YrZhtmK2Kkg2KfZhNmF2LPYqtiu2K/ZhdipIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQyNjQwMjUyODA3NzcyMTk1MjEiPiLZgtio2YQg2KXZitmC2KfZgSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQtiMINin2YTYuiDYqtit2YXZitmEIChcItij2K7YsdisXCIpINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCINmE2YAgQW5kcm9pZCDZhdmGINin2YTZg9mF2KjZitmI2KrYsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQzOTY5NzgyNDYwNjEzMTE0Ij4i2YLYqNmEINil2YrZgtin2YEg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0LYjCDYp9mE2Log2KrYrdmF2YrZhCAoXCLYo9iu2LHYrFwiKSDYqNi32KfZgtipIFNEINmE2YAgQW5kcm9pZCDZhdmGINin2YTZg9mF2KjZitmI2KrYsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiLYpdmK2YLYp9mBINiq2LTYutmK2YQg2LPYudipINiq2K7YstmK2YYgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMTk3MDM3NDg5ODI2MzA2MzgzNiI+Itit2K/Yq9iqINmF2LTZg9mE2Kkg2KPYq9mG2KfYoSDYpdmK2YLYp9mBINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiDYqtit2YLZgiDZhdmGINil2YTYutin2KEg2KrYrdmF2YrZhCDZhdi22YrZgSBVU0LYjCDYq9mFINij2LnYryDYp9mE2YXYrdin2YjZhNipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190aXRsZSIgbXNnaWQ9Ijk2MzAzOTAzMzQ3MDQ3ODY5NyI+Itiq2LTYutmK2YQg2LPYudipINiq2K7YstmK2YYgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RleHQiIG1zZ2lkPSI1MTAwNDI4NzU3MTA3NDY5NDU0Ij4i2KXYsNinINiq2YUg2KrYtNi62YrZhCDZiNit2K/YqSDYqtiu2LLZitmGIFVTQtiMINmB2LPYqtiq2YjZgtmBINio2LnYtiDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNiq2Yog2KrYs9iq2K7Yr9mF2YfYpyDZiNix2KjZhdinINiq2LXYqNitINi62YrYsSDZhdiq2KfYrdipINil2YTZiSDYo9mGINmK2KrZhSDYpdmK2YLYp9mBINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19lcnJvcl90aXRsZSIgbXNnaWQ9IjczMjM2NTg0Njk2MjY1MTQyMDciPiLZhNmFINiq2KrZhSDYudmF2YTZitipIFVTQiDYqNmG2KzYp9itIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzM2MDU4Mzk2NjYzNTE2MDE3Ij4i4oCP2KXZitmC2KfZgSDYqti02LrZitmEINiz2LnYqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjU2ODUyMDk4NTU1NjIzODIyIj4i4oCP2KfZhNmF2LMg2YTYpdmK2YLYp9mBINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiLigI/Ys9i52KkgVVNCINin2YTYqtiu2LLZitmG2YrYqSDYp9mE2YXYs9iq2K7Yr9mF2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+IuKAj9mC2KjZhCDYpdmK2YLYp9mBINmI2K3Yr9ipINiq2K7YstmK2YYgVVNC2Iwg2KfZhNi6INiq2K3ZhdmK2YQgKFwi2KPYrtix2KxcIikg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2YTZgCBBbmRyb2lkINmF2YYg2KfZhNmD2YXYqNmK2YjYqtixLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNDM5Njk3ODI0NjA2MTMxMTQiPiLigI/Zgtio2YQg2KXZitmC2KfZgSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQtiMINin2YTYuiDYqtit2YXZitmEIChcItij2K7YsdisXCIpINio2LfYp9mC2KkgU0Qg2YTZgCBBbmRyb2lkINmF2YYg2KfZhNmD2YXYqNmK2YjYqtixLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfYnV0dG9uX21vdW50IiBtc2dpZD0iNzA2MDIxODAzNDkwMDY5NjAyOSI+IuKAj9il2YrZgtin2YEg2KrYtNi62YrZhCDYs9i52Kkg2KrYrtiy2YrZhiBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIxOTcwMzc0ODk4MjYzMDYzODM2Ij4i4oCP2K3Yr9ir2Kog2YXYtNmD2YTYqSDYo9ir2YbYp9ihINil2YrZgtin2YEg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IuINiq2K3ZgtmCINmF2YYg2KXZhNi62KfYoSDYqtit2YXZitmEINmF2LbZitmBIFVTQtiMINir2YUg2KPYudivINin2YTZhdit2KfZiNmE2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RpdGxlIiBtc2dpZD0iOTYzMDM5MDMzNDcwNDc4Njk3Ij4i4oCP2KrYtNi62YrZhCDYs9i52Kkg2KrYrtiy2YrZhiBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGV4dCIgbXNnaWQ9IjUxMDA0Mjg3NTcxMDc0Njk0NTQiPiLigI/Ypdiw2Kcg2KrZhSDYqti02LrZitmEINmI2K3Yr9ipINiq2K7YstmK2YYgVVNC2Iwg2YHYs9iq2KrZiNmC2YEg2KjYudi2INin2YTYqti32KjZitmC2KfYqiDYp9mE2KrZiiDYqtiz2KrYrtiv2YXZh9inINmI2LHYqNmF2Kcg2KrYtdio2K0g2LrZitixINmF2KrYp9it2Kkg2KXZhNmJINij2YYg2YrYqtmFINil2YrZgtin2YEg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2Vycm9yX3RpdGxlIiBtc2dpZD0iNzMyMzY1ODQ2OTYyNjUxNDIwNyI+IuKAj9mE2YUg2KrYqtmFINi52YXZhNmK2KkgVVNCINio2YbYrNin2K0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkbGdfb2siIG1zZ2lkPSI3Mzc2OTUzMTY3MDM5ODY1NzAxIj4i2YXZiNin2YHZgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9tdHBfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzY5OTkxMzA5NzM5MTU1MDM5NCI+Itin2YTYqtmI2LXZitmEINmD2KzZh9in2LIg2YjYs9in2KbYtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9wdHBfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMTk2MDgxNzE5MjIxNjA2NDgzMyI+Itin2YTYqtmI2LXZitmEINmD2YPYp9mF2YrYsdinIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX2NkX2luc3RhbGxlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2Nzc0NzEyODI3ODkyMDkwNzU0Ij4i2KfZhNiq2YjYtdmK2YQg2YPYo9iv2KfYqSDYqtir2KjZitiqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI3ODQ4MjM2OTc0MDg3NjUzNjY2Ij4i2KfZhNin2KrYtdin2YQg2KjYrNmH2KfYsiBVU0Ig2YXZhNit2YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIyMjkwODU5Mzk5OTgzNzIwMjcxIj4i2KfZhNmF2LMg2YTZhNin2LfZhNin2Lkg2LnZhNmJINiu2YrYp9ix2KfYqiBVU0Ig2KfZhNij2K7YsdmJLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI5MDIwMDkyMTk2MDYxMDA3MjYyIj4i2KrZh9mK2KbYqSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQtifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+ItmH2YQg2KrYsdmK2K8g2KrZhtiz2YrZgiDYqNi32KfZgtipIFNE2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTM0MDE2ODUzNDI1NzYxMDc4Ij4i2LPZitiq2YUg2YXYs9itINis2YXZiti5INin2YTZhdmE2YHYp9iqINin2YTZhdiu2LLZhtipINi52YTZiSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4g2YTYpyDZitmF2YPZhiDYudmD2LMg2YfYsNinINin2YTYpdis2LHYp9ihISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3Nvcnlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNzg0ODIzNjk3NDA4NzY1MzY2NiI+IuKAj9in2YTYp9iq2LXYp9mEINio2KzZh9in2LIgVVNCINmF2YTYrdmCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+IuKAj9in2YTZhdizINmE2YTYp9i32YTYp9i5INi52YTZiSDYrtmK2KfYsdin2KogVVNCINin2YTYo9iu2LHZiS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iOTAyMDA5MjE5NjA2MTAwNzI2MiI+IuKAj9iq2YfZitim2Kkg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0LYnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2NDg0MTU5MjE1MjY1MjYwNjkiPiLigI/Zh9mEINiq2LHZitivINiq2YbYs9mK2YIg2KjYt9in2YLYqSBTRNifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkzNDAxNjg1MzQyNTc2MTA3OCI+IuKAj9iz2YrYqtmFINmF2LPYrSDYrNmF2YrYuSDYp9mE2YXZhNmB2KfYqiDYp9mE2YXYrtiy2YbYqSDYudmE2Ykg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IuINmE2Kcg2YrZhdmD2YYg2LnZg9izINmH2LDYpyDYp9mE2KXYrNix2KfYoSEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4i2LPYqtmB2YLYryDYrNmF2YrYuSDYp9mE2KjZitin2YbYp9iqINi52YTZiSDYqNi32KfZgtiq2YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X2J1dHRvbl9mb3JtYXQiIG1zZ2lkPSI0MTMxMDY0NTYwMTI3NDc4Njk1Ij4i2KrZhtiz2YrZgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+Itiq2YUg2KrZiNi12YrZhCDYqti12K3ZititINij2K7Yt9in2KEgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjEwMTY2NTQ2Mjc2MjY0NzYxNDIiPiLYp9mE2YXYsyDZhNiq2LnYt9mK2YQg2KrYtdit2YrYrSDYo9iu2LfYp9ihIFVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY3MjkwNDQ3Nzg5NDkxODk5MTgiPiLigI/YqtmFINiq2YjYtdmK2YQg2KrYtdit2YrYrSDYo9iu2LfYp9ihIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxMDE2NjU0NjI3NjI2NDc2MTQyIj4i4oCP2KfZhNmF2LMg2YTYqti52LfZitmEINiq2LXYrdmK2K0g2KPYrti32KfYoSBVU0IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2lucHV0X21ldGhvZCIgbXNnaWQ9IjQ2NTMzODczMzY3OTEyMjI5NzgiPiLYp9iu2KrZitin2LEg2KPYs9mE2YjYqCDYp9mE2KXYr9iu2KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iOTA5MTY1MjE1NzcyMjQ5NTExNiI+Itil2LnYr9in2K8g2KPYs9mE2YjYqCDYp9mE2KXYr9iu2KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiLZhNmI2K3YqSDZhdmB2KfYqtmK2K0g2YHYudmE2YrYqSI8L3N0cmluZz4KQEAgLTEyNzEsMjkgKzEyODAsMjkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX2FscGhhYmV0IiBtc2dpZD0iNTQzMzI3NTQ4NTQ5OTAzOTE5OSI+IiDYoyDYqCDYqiDYqyDYrCDYrSDYriDYryDYsCDYsSDYsiDYsyDYtCDYtSDYtiDYtyDYuCDYuSDYuiDZgSDZgiDZgyDZhCDZhSDZhiDZhyDZiCDZiiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX251bWVyaWNfYWxwaGFiZXQiIG1zZ2lkPSI0MDMwMTcwNTI0NTk1MTIzNjEwIj4iIDAxMjM0NTY3ODkg2KMg2Kgg2Kog2Ksg2Kwg2K0g2K4g2K8g2LAg2LEg2LIg2LMg2LQg2LUg2LYg2Lcg2Lgg2Lkg2Log2YEg2YIg2YMg2YQg2YUg2YYg2Ycg2Ygg2YoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5kaWRhdGVzX3N0eWxlIiBtc2dpZD0iNDMzMzkxMzA4OTYzNzA2MjI1NyI+PHU+Itin2YTYudmG2KfYtdixINin2YTZhdix2LTYrdipIjwvdT48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0OTgxNjAwNTM1MTQ2ODU2MCI+Itiq2K3YttmK2LEg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ1NzYwMzQxODk3MDk5NDA1MCI+Itiq2K3YttmK2LEg2KjYt9in2YLYqSBTRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0OTgxNjAwNTM1MTQ2ODU2MCI+IuKAj9iq2K3YttmK2LEg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ1NzYwMzQxODk3MDk5NDA1MCI+IuKAj9iq2K3YttmK2LEg2KjYt9in2YLYqSBTRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgyODczMTk4ODI5MjY3MzcwNTMiPiLYp9mE2KrYrdmC2YIg2YXZhiDYp9mE2KPYrti32KfYoS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzc4ODA0MDc0NTY4NjIyOTMwNyI+ItmI2K3Yr9ipINiq2K7YstmK2YYgVVNCINmB2KfYsdi62KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3ODA0Nzc4MzgyNDEyMTI5OTciPiLYqNi32KfZgtipIFNEINmB2KfYsdi62KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4i2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2YHYp9ix2LrYqSDYo9mIINiq2LTYqtmF2YQg2LnZhNmJINmG2LjYp9mFINmF2YTZgdin2Kog2LrZitixINmF2LnYqtmF2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjQxMDY1NjQxNzg2OTIzNjA0Ij4i2KjYt9in2YLYqSBTRCDZgdin2LHYutipINij2Ygg2KrYtNiq2YXZhCDYudmE2Ykg2YbYuNin2YUg2YXZhNmB2KfYqiDYutmK2LEg2YXYudiq2YXYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjIwOTAwNDY3Njk1MzI3MTM1NjMiPiLZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDYqtin2YTZgdipIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY0MTA3MjM5MDYwMTkxMDAxODkiPiLYqNi32KfZgtipIFNEINiq2KfZhNmB2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTc5NTkxNzU3ODM5NTMzMzI4MCI+Itiq2LnYt9mE2Kog2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IuINis2LHZkdioINil2LnYp9iv2Kkg2KrZhtiz2YrZgtmH2KcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTc1Mzg5ODU2NzUyNTU2ODI1MyI+Itiq2LnYt9mE2Kog2KjYt9in2YLYqSBTRC4g2KzYsdmR2Kgg2KXYudin2K/YqSDYqtmG2LPZitmC2YfYpy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTY2MTY4MzAzMTMzMDk1MTA3MyI+Itiq2YXYqiDYpdiy2KfZhNipINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCINi52YTZiSDYutmK2LEg2KfZhNmF2KrZiNmC2LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODcyMTUyODgyNjA0NDA3ODM3Ij4i2KrZhdiqINil2LLYp9mE2Kkg2KjYt9in2YLYqSBTRCDYudmE2Ykg2YbYrdmIINi62YrYsSDZhdiq2YjZgti5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDMyOTg0ODgxOTg2NTU5NDI0MSI+Itil2YTYutin2KEg2KrYsdmD2YrYqCDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDZgtio2YQg2KfZhNil2LLYp9mE2Kkg2YTYqtis2YbYqCDZgdmC2K8g2KfZhNio2YrYp9mG2KfYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjAxODMyOTM3NDc0NDgyNDEiPiLYo9mE2Log2KrYrdmF2YrZhCDYqNi32KfZgtipIFNEINmC2KjZhCDYp9mE2KXYstin2YTYqSDZhNiq2KzZhtioINmB2YLYr9in2YYg2KfZhNio2YrYp9mG2KfYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTY3OTczODkzMjcwMzYwMjMwIj4i2YrZhdmD2YbZgyDYpdiy2KfZhNipINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCINio2LTZg9mEINii2YXZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjcyOTgwMTEzMDc5MDYxNjIwMCI+ItmK2YXZg9mGINil2LLYp9mE2Kkg2KjYt9in2YLYqSBTRCDYqNij2YXYp9mGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTQyMTk1MzYxNjA2NDkzNTMwIj4i2YrZhdmD2YbZgyDYpdiy2KfZhNipINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCINio2LTZg9mEINii2YXZhi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTY4ODQxMjc4MTM4Mzc3NjA0Ij4i2YrZhdmD2YbZgyDYpdiy2KfZhNipINio2LfYp9mC2KkgU0Qg2KjYo9mF2KfZhi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDQ4NjM3NzIzMDE0MDIyNzY1MSI+Itiq2YXYqiDYpdiy2KfZhNipINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkwMjUxODAzMDQwNDM4MTMxOCI+Itiq2YXYqiDYpdiy2KfZhNipINio2LfYp9mC2KkgU0QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4i2KrZhdiqINil2LLYp9mE2Kkg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IuINij2K/YsdisINmI2LPYp9im2Lcg2KzYr9mK2K/YqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiLYqtmF2Kog2KXYstin2YTYqSDYqNi32KfZgtipIFNELiDYo9iv2K7ZhCDYqNi32KfZgtipINis2K/Zitiv2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiLigI/ZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDZgdin2LHYutipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzgwNDc3ODM4MjQxMjEyOTk3Ij4i4oCP2KjYt9in2YLYqSBTRCDZgdin2LHYutipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzg0MDEyMTA2NzQyNzI2OTUwMCI+IuKAj9mI2K3Yr9ipINiq2K7YstmK2YYgVVNCINmB2KfYsdi62Kkg2KPZiCDYqti02KrZhdmEINi52YTZiSDZhti42KfZhSDZhdmE2YHYp9iqINi62YrYsSDZhdi52KrZhdivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODY0MTA2NTY0MTc4NjkyMzYwNCI+IuKAj9io2LfYp9mC2KkgU0Qg2YHYp9ix2LrYqSDYo9mIINiq2LTYqtmF2YQg2LnZhNmJINmG2LjYp9mFINmF2YTZgdin2Kog2LrZitixINmF2LnYqtmF2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4i4oCP2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2KrYp9mE2YHYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDEwNzIzOTA2MDE5MTAwMTg5Ij4i4oCP2KjYt9in2YLYqSBTRCDYqtin2YTZgdipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE3OTU5MTc1NzgzOTUzMzMyODAiPiLigI/Yqti52LfZhNiqINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiDYrNix2ZHYqCDYpdi52KfYr9ipINiq2YbYs9mK2YLZh9inLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE3NTM4OTg1Njc1MjU1NjgyNTMiPiLigI/Yqti52LfZhNiqINio2LfYp9mC2KkgU0QuINis2LHZkdioINil2LnYp9iv2Kkg2KrZhtiz2YrZgtmH2KcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE2NjE2ODMwMzEzMzA5NTEwNzMiPiLigI/YqtmF2Kog2KXYstin2YTYqSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDYudmE2Ykg2LrZitixINin2YTZhdiq2YjZgti5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+IuKAj9iq2YXYqiDYpdiy2KfZhNipINio2LfYp9mC2KkgU0Qg2LnZhNmJINmG2K3ZiCDYutmK2LEg2YXYqtmI2YLYuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiLigI/YpdmE2LrYp9ihINiq2LHZg9mK2Kgg2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0Ig2YLYqNmEINin2YTYpdiy2KfZhNipINmE2KrYrNmG2Kgg2YHZgtivINin2YTYqNmK2KfZhtin2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjYwMTgzMjkzNzQ3NDQ4MjQxIj4i4oCP2KPZhNi6INiq2K3ZhdmK2YQg2KjYt9in2YLYqSBTRCDZgtio2YQg2KfZhNil2LLYp9mE2Kkg2YTYqtis2YbYqCDZgdmC2K/Yp9mGINin2YTYqNmK2KfZhtin2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzk2Nzk3Mzg5MzI3MDM2MDIzMCI+IuKAj9mK2YXZg9mG2YMg2KXYstin2YTYqSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDYqNi02YPZhCDYotmF2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY3Mjk4MDExMzA3OTA2MTYyMDAiPiLigI/ZitmF2YPZhiDYpdiy2KfZhNipINio2LfYp9mC2KkgU0Qg2KjYo9mF2KfZhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE0MjE5NTM2MTYwNjQ5MzUzMCI+IuKAj9mK2YXZg9mG2YMg2KXYstin2YTYqSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiDYqNi02YPZhCDYotmF2YYuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2ODg0MTI3ODEzODM3NzYwNCI+IuKAj9mK2YXZg9mG2YMg2KXYstin2YTYqSDYqNi32KfZgtipIFNEINio2KPZhdin2YYuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ0ODYzNzcyMzAxNDAyMjc2NTEiPiLigI/YqtmF2Kog2KXYstin2YTYqSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MDI1MTgwMzA0MDQzODEzMTgiPiLigI/YqtmF2Kog2KXYstin2YTYqSDYqNi32KfZgtipIFNEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjkyMTEyNjE2MjU4MDU3NDE0MyI+IuKAj9iq2YXYqiDYpdiy2KfZhNipINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiDYo9iv2LHYrCDZiNiz2KfYpti3INis2K/Zitiv2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzODcwMTIwNjUyOTgzNjU5NjQxIj4i4oCP2KrZhdiqINil2LLYp9mE2Kkg2KjYt9in2YLYqSBTRC4g2KPYr9iu2YQg2KjYt9in2YLYqSDYrNiv2YrYr9ipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2xpc3RfZW1wdHkiIG1zZ2lkPSIxNjc1Mzg4MzMwNzg2ODQxMDY2Ij4i2YTZhSDZitiq2YUg2KfZhNi52KvZiNixINi52YTZiSDYo9mKINij2YbYtNi32Kkg2YXYqti32KfYqNmC2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wa2dVc2FnZVN0YXRzIiBtc2dpZD0iODc4NzM1MjA3NDMyNjc0ODg5MiI+Itiq2K3Yr9mK2Ksg2KXYrdi12KfYodin2Kog2KfYs9iq2K7Yr9in2YUg2KfZhNmF2YPZiNmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9IjExMDY2MTI0MjQyNTQyNzc2MzAiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYqti52K/ZitmEINil2K3Ytdin2KHYp9iqINin2LPYqtiu2K/Yp9mFINin2YTZhdmD2YjZhiDYp9mE2YXYrNmF2ZHYudipLiDZhNmK2LMg2YTZhNin2LPYqtiu2K/Yp9mFINio2YjYp9iz2LfYqSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi52KfYr9mK2KkuIjwvc3RyaW5nPgpAQCAtMTMyOSwxMyArMTMzOCwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4i2KfZhNiu2YTZgdmK2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLYqti62YrZitixINin2YTYrtmE2YHZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i2KjYsdmG2KfZhdisINiq2YTZgtmR2Yog2KfZhNil2LTYudin2LHYp9iqINin2YTYtdmI2KrZitipIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLYqtmFINiq2YbYtNmK2Lcg2KfZhNi02KjZg9ipINin2YTYuNin2YfYsdmK2Kkg2KfZhNiu2KfYtdipIChWUE4pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4i2KrZhSDYqtmG2LTZiti3IFZQTiDYqNmI2KfYs9i32KkgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLigI/YqtmFINiq2YbYtNmK2Lcg2KfZhNi02KjZg9ipINin2YTYuNin2YfYsdmK2Kkg2KfZhNiu2KfYtdipIChWUE4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4i4oCP2KrZhSDYqtmG2LTZiti3IFZQTiDYqNmI2KfYs9i32KkgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i2KfZhNmF2LMg2YTYpdiv2KfYsdipINin2YTYtNio2YPYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dF9sb25nIiBtc2dpZD0iNjQwNzM1MTAwNjI0OTE3NDQ3MyI+Itiq2YUg2KfZhNin2KrYtdin2YQg2KjZgCA8eGxpZmY6ZyBpZD0iU0VTU0lPTiI+JXM8L3hsaWZmOmc+LiDYp9mE2YXYsyDZhNil2K/Yp9ix2Kkg2KfZhNi02KjZg9ipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0aW5nIiBtc2dpZD0iNjQ0MzQzODk2NDQ0MDk2MDc0NSI+Itis2KfYsdmNINin2YTYp9iq2LXYp9mEINio2LTYqNmD2Kkg2LjYp9mH2LHZitipINiu2KfYtdipIChWUE4pINiv2KfYptmF2Kkg2KfZhNiq2LTYutmK2YQuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGVkIiBtc2dpZD0iODIwMjY3OTY3NDgxOTIxMzkzMSI+Itiq2YUg2KfZhNin2KrYtdin2YQg2KjYtNio2YPYqSDYuNin2YfYsdmK2Kkg2K7Yp9i12KkgKFZQTikg2K/Yp9im2YXYqSDYp9mE2KrYtNi62YrZhCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9lcnJvciIgbXNnaWQ9IjYwMDkyNDk4MTQwMzQ3MDgxNzUiPiLYrti32KMg2KjYtNio2YPYqSDYuNin2YfYsdmK2Kkg2K7Yp9i12KkgKFZQTikg2K/Yp9im2YXYqSDYp9mE2KrYtNi62YrZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0aW5nIiBtc2dpZD0iNjQ0MzQzODk2NDQ0MDk2MDc0NSI+IuKAj9is2KfYsdmNINin2YTYp9iq2LXYp9mEINio2LTYqNmD2Kkg2LjYp9mH2LHZitipINiu2KfYtdipIChWUE4pINiv2KfYptmF2Kkg2KfZhNiq2LTYutmK2YQuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGVkIiBtc2dpZD0iODIwMjY3OTY3NDgxOTIxMzkzMSI+IuKAj9iq2YUg2KfZhNin2KrYtdin2YQg2KjYtNio2YPYqSDYuNin2YfYsdmK2Kkg2K7Yp9i12KkgKFZQTikg2K/Yp9im2YXYqSDYp9mE2KrYtNi62YrZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9lcnJvciIgbXNnaWQ9IjYwMDkyNDk4MTQwMzQ3MDgxNzUiPiLigI/Yrti32KMg2KjYtNio2YPYqSDYuNin2YfYsdmK2Kkg2K7Yp9i12KkgKFZQTikg2K/Yp9im2YXYqSDYp9mE2KrYtNi62YrZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25maWciIG1zZ2lkPSI2NDE1ODk5MTUwNjcxNTM3OTcwIj4i2KfZhNmF2LMg2YTZhNiq2YfZitim2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1cGxvYWRfZmlsZSIgbXNnaWQ9IjI4OTc5NTcxNzIzNjY3MzA0MTYiPiLYp9iu2KrZitin2LEg2YXZhNmBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fZmlsZV9jaG9zZW4iIG1zZ2lkPSI2MzYzNjQ4NTYyMTcwNzU5NDY1Ij4i2YTZhSDZitiq2YUg2KfYrtiq2YrYp9ixINij2Yog2YXZhNmBIjwvc3RyaW5nPgpAQCAtMTM1OSwxOCArMTM2OCwxOCBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ2NDE4NzI3OTcwNjc2MDkxNzciPiI8eGxpZmY6ZyBpZD0iSU5ERVgiPiVkPC94bGlmZjpnPiDZhdmGIDx4bGlmZjpnIGlkPSJUT1RBTCI+JWQ8L3hsaWZmOmc+IjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21vZGVfZG9uZSIgbXNnaWQ9IjcyMTc1ODE2NDA0NjE5MjIyODkiPiLYqtmFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4i2KzYp9ix2Y0g2KXZhNi62KfYoSDYqtit2YXZitmEINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMjc4OTQ5OTg0MDk1MzcxOTAiPiLYrNin2LHZjSDYpdmE2LrYp9ihINiq2K3ZhdmK2YQg2KjYt9in2YLYqSBTRC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDUyMTU3MzMyMTUyNDM0MDA1OCI+Itis2KfYsdmNINmF2K3ZiCDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTk2OTg4ODc1NTA3MDQzMDQyIj4i2KzYp9ix2Y0g2YXYrdmIINio2LfYp9mC2KkgU0QuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZXJyb3IiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjI5OTc2OTU2MzYyNDc3Njk0OCI+Itiq2LnYsNixINmF2LPYrSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZXJyb3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzE1MjQ4Njk2NjQ0NTEwOTM1Ij4i2KrYudiw2LEg2YXYs9itINio2LfYp9mC2KkgU0QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4i2KrZhdiqINil2LLYp9mE2Kkg2KjYt9in2YLYqSBTRCDZgtio2YQg2KPZhiDZitiq2YUg2KXZhNi62KfYoSDYqtix2YPZitio2YfYpy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MTgxODg3MjAwMDk1Njk2OTMiPiLZitiq2YUg2K3Yp9mE2YrZi9inINin2YTYqtit2YLZgiDZhdmGINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMzNDc2MjUwMzkwNDgyNzQ4MSI+ItmK2KrZhSDYp9mE2KLZhiDYp9mE2KrYrdmC2YIg2YXZhiDYqNi32KfZgtipIFNELiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JlbW92ZWQiIG1zZ2lkPSI3MDAxNTI2OTA1MDU3OTUyMDk3Ij4i2KrZhdiqINil2LLYp9mE2Kkg2KjYt9in2YLYqSBTRC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNTgzMDgxNDM0OTI1MDgzNDIyNSI+ItmI2K3Yr9ipINiq2K7YstmK2YYgVVNCINmC2YrYryDYp9mE2KfYs9iq2K7Yr9in2YUg2KjZiNin2LPYt9ipINmD2YXYqNmK2YjYqtixINit2KfZhNmK2YvYpy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzA2MTMwNTY4MTMzNTQwNDM1Ij4i2KjYt9in2YLYqSBTRCDZgtmK2K8g2KfZhNin2LPYqtiu2K/Yp9mFINit2KfZhNmK2YvYpyDYqNmI2KfYs9i32Kkg2YPZhdio2YrZiNiq2LEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4i4oCP2KzYp9ix2Y0g2KXZhNi62KfYoSDYqtit2YXZitmEINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMjc4OTQ5OTg0MDk1MzcxOTAiPiLigI/YrNin2LHZjSDYpdmE2LrYp9ihINiq2K3ZhdmK2YQg2KjYt9in2YLYqSBTRC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDUyMTU3MzMyMTUyNDM0MDA1OCI+IuKAj9is2KfYsdmNINmF2K3ZiCDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTk2OTg4ODc1NTA3MDQzMDQyIj4i4oCP2KzYp9ix2Y0g2YXYrdmIINio2LfYp9mC2KkgU0QuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZXJyb3IiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjI5OTc2OTU2MzYyNDc3Njk0OCI+IuKAj9iq2LnYsNixINmF2LPYrSDZiNit2K/YqSDYqtiu2LLZitmGIFVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZXJyb3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzE1MjQ4Njk2NjQ0NTEwOTM1Ij4i4oCP2KrYudiw2LEg2YXYs9itINio2LfYp9mC2KkgU0QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4i4oCP2KrZhdiqINil2LLYp9mE2Kkg2KjYt9in2YLYqSBTRCDZgtio2YQg2KPZhiDZitiq2YUg2KXZhNi62KfYoSDYqtix2YPZitio2YfYpy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MTgxODg3MjAwMDk1Njk2OTMiPiLigI/Zitiq2YUg2K3Yp9mE2YrZi9inINin2YTYqtit2YLZgiDZhdmGINmI2K3Yr9ipINiq2K7YstmK2YYgVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMzNDc2MjUwMzkwNDgyNzQ4MSI+IuKAj9mK2KrZhSDYp9mE2KLZhiDYp9mE2KrYrdmC2YIg2YXZhiDYqNi32KfZgtipIFNELiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JlbW92ZWQiIG1zZ2lkPSI3MDAxNTI2OTA1MDU3OTUyMDk3Ij4i4oCP2KrZhdiqINil2LLYp9mE2Kkg2KjYt9in2YLYqSBTRC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNTgzMDgxNDM0OTI1MDgzNDIyNSI+IuKAj9mI2K3Yr9ipINiq2K7YstmK2YYgVVNCINmC2YrYryDYp9mE2KfYs9iq2K7Yr9in2YUg2KjZiNin2LPYt9ipINmD2YXYqNmK2YjYqtixINit2KfZhNmK2YvYpy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzA2MTMwNTY4MTMzNTQwNDM1Ij4i4oCP2KjYt9in2YLYqSBTRCDZgtmK2K8g2KfZhNin2LPYqtiu2K/Yp9mFINit2KfZhNmK2YvYpyDYqNmI2KfYs9i32Kkg2YPZhdio2YrZiNiq2LEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfdW5rbm93bl9zdGF0ZSIgbXNnaWQ9IjcyOTE5Mjc4MjE5NzI5MDM4NSI+ItmI2LPYp9im2Lcg2K7Yp9ix2KzZitipINmB2Yog2K3Yp9mE2Kkg2LrZitixINmF2LnYsdmI2YHYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZSIgbXNnaWQ9IjE3Nzg2ODY2MTgyMzAwMTE5NjQiPiLZhdi02KfYsdmD2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmaW5kIiBtc2dpZD0iNDgwODI3MDkwMDMyMjk4NTk2MCI+Itio2K3YqyI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+Itin2YTYudin2YTZiiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i2KfYrtiq2YrYp9ixINiq2LfYqNmK2YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiLYqti52LDYsSDYqti02LrZitmEIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLZhdi02KfYsdmD2Kkg2YXYuSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiLZhdi02KfYsdmD2Kkg2YXYuSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+ItmF2YLYqNi2INin2YTYqtmF2LHZitixLiDYp9mE2YXYsyDZhdi5INin2YTYp9iz2KrZhdix2KfYsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i2KrZhdix2YrYsSDZhNij2LnZhNmJINmE2YAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Itiq2YXYsdmK2LEg2YTYo9iz2YHZhCDZhNmAIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLYqtmF2LHZitixINmE2YTZitiz2KfYsSDZhNmAIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4i2KrZhdix2YrYsSDZhNmE2YrZhdmK2YYg2YTZgCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLYpdmE2LrYp9ihINiq2KPZhdmK2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i2KfZhNmD2KfZhdmK2LHYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLYtdin2YXYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLYqti02LrZitmEINin2YTYtdmI2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Itio2K3YqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+ItmF2LHYsSDYqNiz2LHYudipINmE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4i2YrZhdmD2YbZgyDYqtmI2LXZitmEINiz2YXYp9i52Kkg2LHYo9izINmE2LPZhdin2Lkg2YXZgdin2KrZititINmD2YTZhdipINin2YTZhdix2YjYsSDYudmG2K/ZhdinINmK2KrZhSDZhti32YLZh9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+ItmG2YLYt9ipIjwvc3RyaW5nPgpAQCAtMTQzNSwyMCArMTQzNiwyMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9Ijc5NjU5ODQzNjA5MDM2OTM5MDMiPiIlMSRz2IwgJTIkcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9zdWJ0aXRsZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI2OTg1NTQ2NTMwNDcxNzgwNzI3Ij4iJTEkc9iMICUyJHPYjCAlMyRzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9pbnRlcm5hbCIgbXNnaWQ9IjQ4OTE5MTY4MzM2NTc5MjkyNjMiPiLZiNit2K/YqSDYqtiu2LLZitmGINiv2KfYrtmE2YrYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2Vfc2RfY2FyZCIgbXNnaWQ9IjMyODI5NDg4NjEzNzgyODY3NDUiPiLYqNi32KfZgtipIFNEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV91c2IiIG1zZ2lkPSIzMDE3OTU0MDU5NTM4NTE3Mjc4Ij4i2YjYrdiv2Kkg2KrYrtiy2YrZhiBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3NkX2NhcmQiIG1zZ2lkPSIzMjgyOTQ4ODYxMzc4Mjg2NzQ1Ij4i4oCP2KjYt9in2YLYqSBTRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiIiBtc2dpZD0iMzAxNzk1NDA1OTUzODUxNzI3OCI+IuKAj9mI2K3Yr9ipINiq2K7YstmK2YYgVVNCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXh0cmFjdF9lZGl0X21lbnVfYnV0dG9uIiBtc2dpZD0iODk0MDQ3ODczMDQ5NjYxMDEzNyI+Itiq2LnYr9mK2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSIxOTU1NjM4ODYyMTIyMjMyMzQyIj4i2KrYrdiw2YrYsSDYp9iz2KrYrtiv2KfZhSDYp9mE2KjZitin2YbYp9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX2JvZHkiIG1zZ2lkPSIyODE0NjczNTUxNDcxOTY5OTU0Ij4i2KfZhNmF2LMg2YTYudix2LYg2KfZhNin2LPYqtiu2K/Yp9mFINmI2KfZhNil2LnYr9in2K/Yp9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfdGl0bGUiIG1zZ2lkPSI3MDkzMzM0NDE5NTE4NzA2Njg2Ij4i2KrZhSDYqti52LfZitmEINio2YrYp9mG2KfYqiDYtNio2YPYp9iqINin2YTYrNmK2YQg2KfZhNir2KfZhtmKINmI2KfZhNis2YrZhCDYp9mE2KvYp9mE2KsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzYzNjQ4OTQzNjgxOTQ3MDc2MSI+Itiq2YUg2KrYudi32YrZhCDYqNmK2KfZhtin2Kog2LTYqNmD2Kkg2KfZhNis2YrZhCDYp9mE2LHYp9io2LkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF90aXRsZSIgbXNnaWQ9Ijc4Njk0MDI1MTkzOTE2MzE4ODQiPiLYqtmFINiq2LnYt9mK2YQg2KjZitin2YbYp9iqINin2YTYrNmI2KfZhCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF90aXRsZSIgbXNnaWQ9Ijg5OTIxNTQ3MzY0NDEyODQ4NjUiPiLYqtmFINiq2LnYt9mK2YQg2KjZitin2YbYp9iqIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3RpdGxlIiBtc2dpZD0iODk5MjE1NDczNjQ0MTI4NDg2NSI+IuKAj9iq2YUg2KrYudi32YrZhCDYqNmK2KfZhtin2KogV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2xpbWl0X2JvZHkiIG1zZ2lkPSIzMzE3OTY0NzA2OTczNjAxMzg2Ij4i2KfZhNmF2LMg2YTZhNiq2YXZg9mK2YYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iNzAyNjczOTEyMTEzODAwNTIzMSI+Itiq2YUg2KrYrNin2YjYsiDYrdivINio2YrYp9mG2KfYqiDYtNio2YPYp9iqIDJHLTNHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMTEwNjU2Mjc3OTMxMTIwOTAzOSI+Itiq2YUg2KrYrNin2YjYsiDYrdivINio2YrYp9mG2KfYqiA0RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjcwMjY3MzkxMjExMzgwMDUyMzEiPiLigI/YqtmFINiq2KzYp9mI2LIg2K3YryDYqNmK2KfZhtin2Kog2LTYqNmD2KfYqiAyRy0zRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjExMDY1NjI3NzkzMTEyMDkwMzkiPiLigI/YqtmFINiq2KzYp9mI2LIg2K3YryDYqNmK2KfZhtin2KogNEciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMjc5MjQwNTcyMTY1NDEyMTY4Ij4i2KrZhSDYqtis2KfZiNiyINit2K8g2KjZitin2YbYp9iqINin2YTYrNmI2KfZhCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+Itiq2YUg2KrYrNin2YjYsiDYrdivINio2YrYp9mG2KfYqiDYtNio2YPYqSBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+IuKAj9iq2YUg2KrYrNin2YjYsiDYrdivINio2YrYp9mG2KfYqiDYtNio2YPYqSBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfc25vb3plZF9ib2R5IiBtc2dpZD0iNzAzNTQ5MDI3ODI5ODQ0MTc2NyI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lczwveGxpZmY6Zz4g2YHZiNmCINin2YTYrdivINin2YTZhdi52YrZhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfdGl0bGUiIG1zZ2lkPSI1OTY1MTU3MzYxMDM2MzIxOTE0Ij4i2KrZhSDYqtmC2YrZitivINio2YrYp9mG2KfYqiDYp9mE2K7ZhNmB2YrYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF9ib2R5IiBtc2dpZD0iNjc0MTUyMTMzMDk5NzQ1Mjk5MCI+Itin2YTZhdizINmE2KXYstin2YTYqSDYp9mE2KrZgtmK2YrYry4iPC9zdHJpbmc+CkBAIC0xNDY0LDggKzE0NjUsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZXhwaXJlc19vbiIgbXNnaWQ9IjM2NzYyNDI5NDk5MTU5NTk4MjEiPiLYqtmG2KrZh9mKINin2YTYtdmE2KfYrdmK2Kkg2YHZijoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4i2KfZhNix2YLZhSDYp9mE2YXYs9mE2LPZhDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmaW5nZXJwcmludHMiIG1zZ2lkPSI0NTE2MDE5NjE5ODUwNzYzMDQ5Ij4i2KjYtdmF2KfYqiDYp9mE2KPYtdin2KjYuToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGEyNTZfZmluZ2VycHJpbnQiIG1zZ2lkPSI0MzkxMjcxMjg2NDc3Mjc5MjYzIj4i2KjYtdmF2Kkg2KPYtdio2LkgU0hBLTI1NjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+Itio2LXZhdipINij2LXYqNi5IFNIQS0xOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTI1Nl9maW5nZXJwcmludCIgbXNnaWQ9IjQzOTEyNzEyODY0NzcyNzkyNjMiPiLigI/YqNi12YXYqSDYo9i12KjYuSBTSEEtMjU2OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTFfZmluZ2VycHJpbnQiIG1zZ2lkPSI3OTMwMzMwMjM1MjY5NDA0NTgxIj4i4oCP2KjYtdmF2Kkg2KPYtdio2LkgU0hBLTE6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X3NlZV9hbGwiIG1zZ2lkPSI0MjkyNTY5MzgzOTc2NjM2MjAwIj4i2LnYsdi2INin2YTZg9mEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNDcxMDAxMzg2NDk3NDA0MDYxNSI+Itin2K7YqtmK2KfYsSDZhti02KfYtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlX2FjdGlvbl9wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iNTI0NzY4NDQzNTk3OTE0OTIxNiI+ItmF2LTYp9ix2YPYqSDZhdi5Ijwvc3RyaW5nPgpAQCAtMTQ4MywyMCArMTQ4NCwyNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+Itin2YTZhti42KfZhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i2LXZiNiqINio2YTZiNiq2YjYqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i2LnYsdi2INi02KfYtNipINmE2KfYs9mE2YPZiiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLYqtmFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i2KfZhNmF2YbZgdiwINin2YTYpdi52YTYp9mF2YoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+Itin2YTYp9iq2LXYp9mEINio2KzZh9in2LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLYqNirINin2YTYtNin2LTYqSDYudmE2Ykg2KfZhNis2YfYp9iyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i2KzYp9ix2Y0g2KfZhNio2K3YqyDYudmGINin2YTYo9is2YfYstip4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4i2KfZhNil2LnYr9in2K/Yp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+ItmC2LfYuSDYp9mE2KfYqti12KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLYrNin2LHZjSDYp9mE2YHYrdi1Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i2KzYp9ix2Y0g2KfZhNin2KrYtdin2YQuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+ItmF2KrYp9itIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI2NzM5ODk5OTYyNjgxODg2NDAxIj4i2LrZitixINmF2KrYp9itIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiLZgtmK2K8g2KfZhNin2LPYqtiu2K/Yp9mFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2J1aWx0X2luX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjI1ODMxMzQyOTQyOTI1NjM5NDEiPiLYtNin2LTYqSDZhdiv2YXYrNipIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2hkbWlfZGlzcGxheV9uYW1lIiBtc2dpZD0iMTU1NTI2NDU1OTIyNzQ3MDEwOSI+Iti02KfYtNipIEhETUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfaGRtaV9kaXNwbGF5X25hbWUiIG1zZ2lkPSIxNTU1MjY0NTU5MjI3NDcwMTA5Ij4i4oCP2LTYp9i02KkgSERNSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLYp9mE2YXYsdmD2KggIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+2IwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4g2YbZgti32Kkg2YTZg9mEINio2YjYtdipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+IuKAjzx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPtiMIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+INmG2YLYt9ipINmE2YPZhCDYqNmI2LXYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiLYotmF2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+Itiq2YUg2KfZhNiq2YjYtdmK2YQg2KjYtNin2LTYqSDZhNin2LPZhNmD2YrYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLZitiq2YUg2LnYsdi2INmH2LDZhyDYp9mE2LTYp9i02Kkg2LnZhNmJINis2YfYp9iyINii2K7YsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiLYrNin2LHZjSDYqNirINin2YTYtNin2LTYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Itis2KfYsdmNINin2YTYp9iq2LXYp9mEINio2YAgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4i2KzYp9ix2Y0g2KjYqyDYp9mE2LTYp9i02KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+ItmF2KrYtdmEINio2YAgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+ItmC2LfYuSDYp9mE2KfYqti12KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i2KfZhNin2KrYtdin2YQg2KjYp9mE2LfZiNin2LHYpiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+ItmG2LPZitiqINin2YTZhtmC2LQiPC9zdHJpbmc+CkBAIC0xNTA1LDI3ICsxNTEyLDI3IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4i2LHZgtmFINiq2LnYsdmK2YEg2LTYrti12Yog2K7Yp9i32KYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+Itit2KfZiNmEINmF2LHYqSDYo9iu2LHZiSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i2KfYsdiz2YUg2YbZgti02YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiLYo9iv2K7ZhCDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINmE2KjYt9in2YLYqSBTSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+Itij2K/YrtmEINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiLigI/Yo9iv2K7ZhCDYsdmF2LIgUElOINmE2KjYt9in2YLYqSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IuKAj9ij2K/YrtmEINix2YXYsiBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i2KPYr9iu2YQg2YPZhNmF2Kkg2KfZhNmF2LHZiNixIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4i2KjYt9in2YLYqSBTSU0g2YXYudi32YTYqSDYp9mE2KLZhi4g2KPYr9iu2YQg2LHZhdiyIFBVSyDZhNmE2YXYqtin2KjYudipLiDYp9iq2LXZhCDYqNmF2LTYutmEINi02KjZg9ipINin2YTYrNmI2KfZhCDZhNmE2KfYt9mE2KfYuSDYudmE2Ykg2KfZhNiq2YHYp9i12YrZhC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i2KXYr9iu2KfZhCDYsdmF2LIg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2YXYsdin2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i2KrYo9mD2YrYryDYsdmF2LIg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2YXYsdin2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Itis2KfYsdmNINil2YTYutin2KEg2KrYo9mF2YrZhiDYqNi32KfZgtipIFNJTeKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Itix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2LrZitixINi12K3ZititLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+Itin2YPYqtioINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KfZhNmF2YPZiNmGINmF2YYgNCDYpdmE2YkgOCDYo9ix2YLYp9mFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+ItmK2KzYqCDYo9mGINmK2KrYttmF2YYg2LHZhdiyIFBVS+KAjyA4INij2LHZgtin2YUg2KPZiCDYo9mD2KvYsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLYo9i52K8g2KXYr9iu2KfZhCDYsdmF2LIgUFVLINin2YTYtdit2YrYrS4g2YjYs9iq2KTYr9mKINin2YTZhdit2KfZiNmE2KfYqiDYp9mE2YXYqtmD2LHYsdipINil2YTZiSDYqti52LfZitmEINio2LfYp9mC2KkgU0lNINmG2YfYp9im2YrZi9inLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLZhNinINmK2KrYt9in2KjZgiDYsdmF2LLYpyDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4i4oCP2KjYt9in2YLYqSBTSU0g2YXYudi32YTYqSDYp9mE2KLZhi4g2KPYr9iu2YQg2LHZhdiyIFBVSyDZhNmE2YXYqtin2KjYudipLiDYp9iq2LXZhCDYqNmF2LTYutmEINi02KjZg9ipINin2YTYrNmI2KfZhCDZhNmE2KfYt9mE2KfYuSDYudmE2Ykg2KfZhNiq2YHYp9i12YrZhC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i4oCP2KXYr9iu2KfZhCDYsdmF2LIg2LHZhdiyIFBJTiDYp9mE2YXYsdin2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4oCP2KrYo9mD2YrYryDYsdmF2LIg2LHZhdiyIFBJTiDYp9mE2YXYsdin2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IuKAj9is2KfYsdmNINil2YTYutin2KEg2KrYo9mF2YrZhiDYqNi32KfZgtipIFNJTeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IuKAj9ix2YXYsiBQSU4g2LrZitixINi12K3ZititLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IuKAj9in2YPYqtioINix2YXYsiBQSU4g2KfZhNmF2YPZiNmGINmF2YYgNCDYpdmE2YkgOCDYo9ix2YLYp9mFLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IuKAj9mK2KzYqCDYo9mGINmK2KrYttmF2YYg2LHZhdiyIFBVS+KAjyA4INij2LHZgtin2YUg2KPZiCDYo9mD2KvYsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLigI/Yo9i52K8g2KXYr9iu2KfZhCDYsdmF2LIgUFVLINin2YTYtdit2YrYrS4g2YjYs9iq2KTYr9mKINin2YTZhdit2KfZiNmE2KfYqiDYp9mE2YXYqtmD2LHYsdipINil2YTZiSDYqti52LfZitmEINio2LfYp9mC2KkgU0lNINmG2YfYp9im2YrZi9inLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLigI/ZhNinINmK2KrYt9in2KjZgiDYsdmF2LLYpyDYsdmF2LIgUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i2YXYrdin2YjZhNin2Kog2KfZhNmG2YLYtCDZg9ir2YrYsdipINis2K/Zi9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+ItmE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhtiMINiz2KzZkdmEINin2YTYr9iu2YjZhCDYqNit2LPYp9io2YMg2YHZiiBHb29nbGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IuKAj9mE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhtiMINiz2KzZkdmEINin2YTYr9iu2YjZhCDYqNit2LPYp9io2YMg2YHZiiBHb29nbGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLYp9iz2YUg2KfZhNmF2LPYqtiu2K/ZhSAo2KfZhNio2LHZitivINil2YTZg9iq2LHZiNmG2YopIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLZg9mE2YXYqSDYp9mE2YXYsdmI2LEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+Itiq2LPYrNmK2YQg2KfZhNiv2K7ZiNmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLYp9iz2YUg2YXYs9iq2K7Yr9mFINi62YrYsSDYtdit2YrYrSDYo9mIINmD2YTZhdipINmF2LHZiNixINi62YrYsSDYtdin2YTYrdipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLZh9mEINmG2LPZitiqINin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFINij2Ygg2YPZhNmF2Kkg2KfZhNmF2LHZiNix2J9cbtin2YbYqtmC2YQg2KXZhNmJICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+Ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4oCP2YfZhCDZhtiz2YrYqiDYp9iz2YUg2KfZhNmF2LPYqtiu2K/ZhSDYo9mIINmD2YTZhdipINin2YTZhdix2YjYsdifXG7Yp9mG2KrZgtmEINil2YTZiSAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i2KzYp9ix2Y0g2YHYrdi1INin2YTYrdiz2KfYqOKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i2YTZgtivINmD2KrYqNiqINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KjYtNmD2YQg2LrZitixINi12K3ZititIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INmF2LHYqS4gXG5cbtij2LnYryDYp9mE2YXYrdin2YjZhNipINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLigI/ZhNmC2K8g2YPYqtio2Kog2LHZhdiyIFBJTiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiBcblxu2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i2YTZgtivINmD2KrYqNiqINmD2YTZhdipINin2YTZhdix2YjYsSDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiBcblxu2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i2YTZgtivINix2LPZhdiqINmG2YLYtCDYpdmE2LrYp9ihINin2YTYqtij2YXZitmGINio2LfYsdmK2YLYqSDYutmK2LEg2LXYrdmK2K3YqSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdix2KkuIFxuXG7Yo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+ItmE2YLYryDYrdin2YjZhNiqINil2YTYutin2KEg2KrYo9mF2YrZhiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINio2LTZg9mEINi62YrYsSDYtdit2YrYrSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdix2KkuINio2LnYryDYpdis2LHYp9ihIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2K3Yp9mI2YTYp9iqINi62YrYsSDYp9mE2YbYp9is2K3YqSDYp9mE2KPYrtix2YnYjCDYs9iq2KrZhSDYpdi52KfYr9ipINiq2LnZitmK2YYg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDYudmE2Ykg2KfZhNil2LnYr9in2K/Yp9iqINin2YTYp9mB2KrYsdin2LbZitipINmE2YTZhdi12YbYuSDZiNiz2YrYqtmFINmB2YLYryDYrNmF2YrYuSDYqNmK2KfZhtin2Kog2KfZhNmF2LPYqtiu2K/ZhS4iPC9zdHJpbmc+CkBAIC0xNjM1LDE5ICsxNjQyLDMwIEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fc2VydmljZV91bmF2YWlsYWJsZSIgbXNnaWQ9Ijc4MjQwMDg3MzIyNDM5MDMyNjgiPiLYrtiv2YXYqSDYp9mE2LfYqNin2LnYqSDZhNmK2LPYqiDZhdmF2YPZkdmG2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlX2luc3RhbGxlZF90aXRsZSIgbXNnaWQ9IjIyNDYzMTcxNjk0NDQwODE2MjgiPiLYqtmFINiq2KvYqNmK2Kog2K7Yr9mF2KkgPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VfaW5zdGFsbGVkX21lc3NhZ2UiIG1zZ2lkPSI1ODk3MzYyOTMxMDcwNDU5MTUyIj4i2KfZhtmC2LEg2YTZhNiq2YXZg9mK2YYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX2FkbWluX3BpbiIgbXNnaWQ9Ijc4MzY0MzczMTg5NTE0Mzk3MCI+Itij2K/YrtmEINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2YTZhNmF2LTYsdmBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX3BpbiIgbXNnaWQ9IjMzOTU5NTM0MjEzNjg0NzYxMDMiPiLYpdiv2K7Yp9mEwqDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX2FkbWluX3BpbiIgbXNnaWQ9Ijc4MzY0MzczMTg5NTE0Mzk3MCI+IuKAj9ij2K/YrtmEINix2YXYsiBQSU4g2YTZhNmF2LTYsdmBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX3BpbiIgbXNnaWQ9IjMzOTU5NTM0MjEzNjg0NzYxMDMiPiLigI/Ypdiv2K7Yp9mEwqDYsdmF2LIgUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2luY29ycmVjdCIgbXNnaWQ9Ijg1NzE1MTIwMDM5NTUwNzc5MjQiPiLYutmK2LEg2LXYrdmK2K0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfb2xkX3BpbiIgbXNnaWQ9IjE0NjIyMDYyMjU1MTI5MTA3NTciPiLYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINin2YTYrdin2YTZiiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9uZXdfcGluIiBtc2dpZD0iNTk1OTYwNjY5MTYxOTk1OTE4NCI+Itix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KfZhNis2K/ZitivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NvbmZpcm1fcGluIiBtc2dpZD0iODUwMTUyMzgyOTYzMzE0NjIzOSI+Itiq2KPZg9mK2K8g2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2KzYr9mK2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfb2xkX3BpbiIgbXNnaWQ9IjE0NjIyMDYyMjU1MTI5MTA3NTciPiLigI/YsdmF2LIgUElOINin2YTYrdin2YTZiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9uZXdfcGluIiBtc2dpZD0iNTk1OTYwNjY5MTYxOTk1OTE4NCI+IuKAj9ix2YXYsiBQSU4g2KfZhNis2K/ZitivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NvbmZpcm1fcGluIiBtc2dpZD0iODUwMTUyMzgyOTYzMzE0NjIzOSI+IuKAj9iq2KPZg9mK2K8g2LHZhdiyIFBJTiDYp9mE2KzYr9mK2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY3JlYXRlX3BpbiIgbXNnaWQ9IjgwMTc2MDAwMDAyNjM0NTAzMzciPiLYpdmG2LTYp9ihINix2YLZhSDYqti52LHZitmBINi02K7YtdmKINmE2KrYudiv2YrZhCDYp9mE2YLZitmI2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfZG9lc250X21hdGNoIiBtc2dpZD0iMjIyNDIxNDE5MDkwNjk5NDU0OCI+Itij2LHZgtin2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmK2Kkg2YTYpyDYqtiq2LfYp9io2YLYjCDYo9i52K8g2KfZhNmF2K3Yp9mI2YTYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfdG9vX3Nob3J0IiBtc2dpZD0iODE3Mzk4Mjc1NjI2NTc3Nzc5MiI+Itix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KPZgti12LEg2YXZhdinINmK2YTYstmF2Iwg2YrYrNioINij2YTYpyDZitmC2YQg2LnZhiA0INij2LHZgtin2YUuwqAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfdG9vX3Nob3J0IiBtc2dpZD0iODE3Mzk4Mjc1NjI2NTc3Nzc5MiI+IuKAj9ix2YXYsiBQSU4g2KPZgti12LEg2YXZhdinINmK2YTYstmF2Iwg2YrYrNioINij2YTYpyDZitmC2YQg2LnZhiA0INij2LHZgtin2YUuwqAiPC9zdHJpbmc+CiAgIDxwbHVyYWxzIG5hbWU9InJlc3RyX3Bpbl9jb3VudGRvd24iPgogICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMTEwNTA5OTUxOTg1NDg2NzUiPiLYo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCDYq9in2YbZitipINmI2KfYrdiv2KkuIjwvaXRlbT4KICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4i2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqSI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLYo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDZhNin2K3ZgtmL2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i2YXYsdixINio2LPYsdi52Kkg2YXZhiDYo9i52YTZiSDZhNij2LPZgdmEINmE2YTYrtix2YjYrCDZhdmGINmI2LbYuSDZhdmE2KEg2KfZhNi02KfYtNipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i2KrZhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+Iti02LHZiti3INin2YTYqtmF2LHZitixINin2YTYr9in2KbYsdmKINmE2YTYs9in2LnYp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLYtNix2YrYtyDYp9mE2KrZhdix2YrYsSDYp9mE2K/Yp9im2LHZiiDZhNmE2K/Zgtin2KbZgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLYqtit2K/ZitivINin2YTYs9in2LnYp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4i2KrYrdiv2YrYryDYp9mE2K/Zgtin2KbZgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i2LTYqNmD2Kkg2KfZhNi02YfYsSDZhdmD2YjZhtipINmF2YYg2KfZhNij2YrYp9mFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i2YLYp9im2YXYqSDYp9mE2KPYudmI2KfZhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4i2KrYrdiv2YrYryDYp9mE2LTZh9ixINmI2KfZhNmK2YjZhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+Itiq2K3Yr9mK2K8g2KfZhNi52KfZhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiLYqtmFINiq2K3Yr9mK2K8gPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4i2KrZhSDYrdiw2YEgPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc5Y2ZjZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTU5MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJieXRlU2hvcnQiIG1zZ2lkPSI4MzQwOTczODkyNzQyMDE5MTAxIj4iQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtpbG9ieXRlU2hvcnQiIG1zZ2lkPSI1OTczNzg5NzgzNTA0NzcxODc4Ij4iS0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWdhYnl0ZVNob3J0IiBtc2dpZD0iNjM1NTg1MTU3Njc3MDQyODkyMiI+Ik1CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2lnYWJ5dGVTaG9ydCIgbXNnaWQ9IjMyNTk4ODI0NTUyMTIxOTMyMTQiPiJHQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRlcmFieXRlU2hvcnQiIG1zZ2lkPSIyMzE2MTMwMTgxNTkxODY5NjIiPiJUQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBldGFieXRlU2hvcnQiIG1zZ2lkPSI1NjM3ODE2NjgwMTQ0OTkwMjE5Ij4iUEIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaWxlU2l6ZVN1ZmZpeCIgbXNnaWQ9IjkxNjQyOTI3OTE1MDA1MzE5NDkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRzPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IkJhxZ9sxLFxc8SxeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzIiBtc2dpZD0iNzg5OTgyOTUxNjA0ODgxMzIzNyI+Ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzX3R3b19kb3RzIiBtc2dpZD0iMTIyODA3ODk5NDg2NjAzMDczNiI+IuKApSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5UGhvbmVOdW1iZXIiIG1zZ2lkPSI3Njk0MDYzMDQyMDc5Njc2NTE3Ij4iKFRlbGVmb24gbsO2bXLJmXNpIHlveGR1cikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmtub3duTmFtZSIgbXNnaWQ9IjIyNzc1NTY1NDY3NDI3NDY1MjIiPiIoTmFtyZlsdW0pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdFZvaWNlTWFpbEFscGhhVGFnIiBtc2dpZD0iMjY2MDAyMDk5MDA5NzczMzA3NyI+IlPJmXNsaSBwb8OndCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRNc2lzZG5BbHBoYVRhZyIgbXNnaWQ9IjI4NTA4ODk3NTQ5MTk1ODQ2NzQiPiJNU0lTRE4xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pRXJyb3IiIG1zZ2lkPSI1MTU0NDk5NDU3NzM5MDUyOTA3Ij4iQmHEn2xhbnTEsSBwcm9ibGVtaSB2yZkgeWEgeWFsbsSxxZ8gTU0ga29kdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlGZG5FcnJvciIgbXNnaWQ9IjUyMjQzOTgyMTYzODUzMTY0NzEiPiLGj23JmWxpeXlhdCB5YWxuxLF6IHNhYml0IG7Dtm1yyZlsyZlyyZkgecSxxJ/EsW1sYSBtyZloZHVkbGHFn8SxYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZCIgbXNnaWQ9IjgxNDcyNzgzNDY0MTQ3MTQzMTUiPiJTZXJ2aXMgacWfyZkgc2FsxLFuZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkRm9yIiBtc2dpZD0iNjg1NjIyODE0MDQ1MzQ3MTA0MSI+IlhpZG3JmXQgYWt0aXYgZWRpbG1pxZ9kaXI6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZURpc2FibGVkIiBtc2dpZD0iMTkzNzU1MzIyNjU5MjUxNjQxMSI+IlhpZG3JmXQgZGVha3RpdiBlZGlsaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZVJlZ2lzdGVyZWQiIG1zZ2lkPSI2Mjc1MDE5MDgyNTk4MTAyNDkzIj4iUWV5ZGl5eWF0IHXEn3VybHUgb2xkdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRXJhc2VkIiBtc2dpZD0iMTI4ODU4NDY5NTI5NzIwMDk3MiI+IlNpbGlubcmZIHXEn3VybHUgb2xtdcWfZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkSW5jb3JyZWN0IiBtc2dpZD0iNzYxMjIwODgzOTQ1MDEyODcxNSI+IllhbmzEscWfIHBhcm9sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pQ29tcGxldGUiIG1zZ2lkPSI4MjMyNTI3NDk1NDExNjk4MzU5Ij4iTU1JIHRhbWFtZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQaW4iIG1zZ2lkPSI5MDE1Mjc3NjQ1NTQ2NzEwMDE0Ij4iRGF4aWwgZXRkaXlpbml6IGvDtmhuyZkgUMSwTiBkw7x6Z8O8biBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQdWsiIG1zZ2lkPSI1NDg3MjU3NjQ3MDgxMTMyMjAxIj4iRGF4aWwgZXRkaXlpbml6IFBVSyBkw7x6Z8O8biBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+IkRheGlsIGV0ZGl5aW5peiBQxLBOIGtvZGxhciB1ecSfdW4gZ8mZbG1pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUGluIiBtc2dpZD0iMzg1MDAxODQ0NTE4NzQ3NTM3NyI+IjQtZMmZbiA4LcmZIHHJmWTJmXIgcsmZccmZbWkgb2xhbiBQSU4geWF6xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iOCB2yZkgZGFoYSDDp294IHLJmXHJmW1pIG9sYW4gUFVLIHlhesSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iU2l6aW4gU8SwTSBrYXJ0IFBVSyBpbMmZIGtpbGlkbMmZbmliLiBPbnUgYcOnbWFxIMO8w6fDvG4gUFVLIGtvZHUgeWF6xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNJTSBrYXJ0xLFuIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIFBVSzIgeWF6xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJEYXhpbCBvbGFuIHrJmW5nIGVkyZluaW4gSURcJ3NpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ2xpck1taSIgbXNnaWQ9Ijc3ODQ2NzM2NzM0NDY4MzMwOTEiPiJHZWTJmW4gWsmZbmcgSUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDZk1taSIgbXNnaWQ9IjUxMjMyMTg5ODkxNDE1NzM1MTUiPiJayZluZyB5w7ZubMmZbmRpcm3JmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkN3TW1pIiBtc2dpZD0iOTEyOTY3ODA1Njc5NTAxNjg2NyI+IlrJmW5nIGfDtnpsyZl5aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJCYU1taSIgbXNnaWQ9IjQ1NTE5MzA2NzkyNjc3MDU4MSI+IlrJmW5nIHFhZGHEn2FzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJQd2RNbWkiIG1zZ2lkPSI3MDQzNzE1Njg3OTA1MjU0MTk5Ij4iUGFyb2x1IGTJmXlpxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJQaW5NbWkiIG1zZ2lkPSIzMTEzMTE3NzgwMzYxMTkwMzA0Ij4iUMSwTiBkyZl5acWfbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNuaXBNbWkiIG1zZ2lkPSIzMTEwNTM0NjgwNTU3ODU3MTYyIj4iSGF6xLFyZGFrxLEgbsO2bXLJmXnJmSB6yZluZyBlZGlsaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmlyTW1pIiBtc2dpZD0iMzA2MjEwMjEyMTQzMDU0ODczMSI+IlrJmW5nbMmZcmluIHNhecSxIG3JmWhkdWRsYcWfZMSxcsSxbMSxYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlRocmVlV0NNbWkiIG1zZ2lkPSI5MDUxMDQ3MTcwMzIxMTkwMzY4Ij4iw5zDpyB5b2xsdSB6yZluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJ1YWNNbWkiIG1zZ2lkPSI3ODI3ODg3NDU5MTM4MzA4ODg2Ij4iWG/Fn2FnyZlsbcmZeiB6yZluZ2zJmXJkyZluIGltdGluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNuZE1taSIgbXNnaWQ9IjMxMTY0NDYyMzcwODE1NzU4MDgiPiLDh2F0ZMSxcsSxbG1hIHrJmW5naSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkRuZE1taSIgbXNnaWQ9IjEyNjU0Nzg5MzI0MTgzMzQzMzEiPiJOYXJhaGF0IGV0bcmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPbk5leHRDYWxsT24iIG1zZ2lkPSI0Mjk0MTU0MDkxNDU3ODE5MjMiPiJBZMmZdMmZbiB6yZluZyBlZMmZbmluIElEXCdzaSBtyZloZHVkbGHFn2TEsXLEsWzEsXIuIE7DtnZiyZl0aSB6yZluZzogTcmZaGR1ZGxhxZ9kxLFyxLFsxLFiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPbk5leHRDYWxsT2ZmIiBtc2dpZD0iMzA5MjkxODAwNjA3Nzg2NDYyNCI+IkFkyZl0yZluIHrJmW5nIGVkyZluaW4gSURcJ3NpIG3JmWhkdWRsYcWfZMSxcsSxbMSxci4gTsO2dmLJmXRpIHrJmW5nOiBNyZloZHVkbGHFn2TEsXLEsWxtYXnEsWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT24iIG1zZ2lkPSI2MTc5NDI1MTgyODU2NDE4NDY1Ij4iQWTJmXTJmW4gesmZbmcgZWTJmW5pbiBJRFwnc2kgbcmZaGR1ZGxhxZ9kxLFyxLFsbcSxci4gTsO2dmLJmXRpIHrJmW5nOiBNyZloZHVkbGHFn2TEsXLEsWzEsWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT2ZmIiBtc2dpZD0iMjU2Nzk5ODYzMzEyNDQwODU1MiI+IkFkyZl0yZluIHrJmW5nIGVkyZluaW4gSURcJ3NpIG3JmWhkdWRsYcWfZMSxcsSxbG3EsXIuIE7DtnZiyZl0aSB6yZluZzogTcmZaGR1ZGxhxZ9kxLFyxLFsbWF5xLFiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZU5vdFByb3Zpc2lvbmVkIiBtc2dpZD0iODYxNDgzMDE4MDUwODY4NjY2NiI+IlhpZG3JmXQgdMmZbWluIGVkaWxtyZl5aWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUlBlcm1hbmVudCIgbXNnaWQ9IjMzNzczNzExNDU5MjY4MzU2NzEiPiJTaXogesmZbmcgZWTJmW5pbiBJRCBuaXphbWxhcsSxbsSxIGTJmXlpxZ/JmSBiaWxtyZl6c2l6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRDaGFuZ2VkVGl0bGUiIG1zZ2lkPSI1NTkyMTg5Mzk4OTU2MTg3NDk4Ij4iTcmZaGR1ZGxhxZ9kxLFyxLFsbcSxxZ8ga2XDp2lkIGTJmXlpxZ9kaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkRhdGEiIG1zZ2lkPSI4NjUzNzk0Nzg0NjkwMDY1NTQwIj4iRGF0YSB4aWRtyZl0IGJhxJ9sxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkVtZXJnZW5jeSIgbXNnaWQ9IjY1ODExNjM3NzkwNzI4MzM2NjUiPiJUyZljaWxpIHhpZG3JmXQgYmHEn2zEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uTm9ybWFsIiBtc2dpZD0iNDk1Mzg2NzAxMTM4OTc1MDY3MyI+IlPJmXMgeGlkbcmZdGkgYmHEn2zEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsVm9pY2UiIG1zZ2lkPSIzMzk2OTYzNjUyMTA4MTUxMjYwIj4iQsO8dMO8biBTyZlzIHhpZG3JmXRsyZlyaSBiYcSfbMSxZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblNtcyIgbXNnaWQ9IjgzMTQzNTIzMjc0NjE2Mzg4OTciPiJTTVMgeGlkbcmZdGkgYmxva2xhbsSxYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Wb2ljZURhdGEiIG1zZ2lkPSI5OTY2MzY0ODcxMDYxNzEzMjAiPiJTyZlzL2RhdGEgeGlkbcmZdGzJmXJpIGJsb2tsYW7EsWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VTbXMiIG1zZ2lkPSIxODg4NTg4MTUyNzkyMDIzODczIj4iU8mZcy9TTVMgeGlkbcmZdGzJmXJpIGJsb2tsYW7EsWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsIiBtc2dpZD0iNTY0MzAyODI2NDQ2NjA5MjgyMSI+IkLDvHTDvG4gc8mZcy9kYXRhL1NNUyB4aWRtyZl0bMmZcmkgYmHEn2zEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzVm9pY2UiIG1zZ2lkPSIxMjU4MzkzODEyMzM1MjU4MDE5Ij4iU8mZcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGEiIG1zZ2lkPSI4NzI0NTY3ODIwNzc5Mzc4OTMiPiJNyZlsdW1hdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0ZBWCIgbXNnaWQ9IjU1NjY2MjQ5OTg4NDA0ODY0NzUiPiJGQUtTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzU01TIiBtc2dpZD0iMjAxNTQ2MDM3MzcwMTUyNzQ4OSI+IlNNUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFBc3luYyIgbXNnaWQ9IjQ1MjM0NTQ3ODM0OTg1NTE0NjgiPiJBc3luYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFTeW5jIiBtc2dpZD0iNzUzMDAwMDUxOTY0NjA1NDc3NiI+IlNpbngiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NQYWNrZXQiIG1zZ2lkPSI2OTkxMDA2NTU3OTkzNDIzNDUzIj4iUGFrZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NQQUQiIG1zZ2lkPSIzMjM1MjU5MDg1NjQ4MjcxMDM3Ij4iUEFEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQwIiBtc2dpZD0iNzE3MDMzNTQ3MjE5ODY5NDk0NSI+IlJvbWlucSBnw7ZzdMmZcmljaXNpIGnFn2zJmWtkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEiIG1zZ2lkPSI1MzE0ODYxNTE5NzUyNTM4OTIyIj4iUm9taW5xIGfDtnN0yZlyaWNpc2kgacWfbMmZayBkZXlpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MiIgbXNnaWQ9Ijg5Njk5MjkwNDkwODEyNjgxMTUiPiJSb21pbnEgZ8O2c3TJmXJpY2lzaSB5YW7EsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDMiIG1zZ2lkPSI1MTQ4MjU1MDI3MDQzOTQzMzE3Ij4iUW9uxZ91bHVxZGFuIEvJmW5hciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NCIgbXNnaWQ9Ijg4MDg0NTY2ODI1NTA3OTY1MzAiPiJCaW5hZGFuIGvJmW5hciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NSIgbXNnaWQ9Ijc2MDQwNjMyNTI4NTAzNTQzNTAiPiJSb21pbnEgLSBBcnp1b2x1bmFuIHNpc3RlbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NiIgbXNnaWQ9IjIwNTk0NDA4MjU3ODI4NzE1MTMiPiJSb21pbnEgLSBNw7xta8O8biBzaXN0ZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDciIG1zZ2lkPSI3MTEyMDc4NzI0MDk3MjMzNjA1Ij4iUm9taW5xIC0gQWx5YW5zIHBhcnRueW9ydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0OCIgbXNnaWQ9IjU5ODk1Njk3Nzg2MDQwODkyOTEiPiJSb21pbnEgLSBQcmVtaXVtIHBhcnRueW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ5IiBtc2dpZD0iNzk2OTI5NjgxMTM1NTE1MjQ5MSI+IlJvdW1pbnEgLSBUYW0gWGlkbcmZdCBGdW5rc2lvbmFsbMSxxJ/EsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTAiIG1zZ2lkPSIzOTkyOTA2OTk5ODE1MzE2NDE3Ij4iUm91bWlucSAtIFFpc23JmW4gWGlkbcmZdCBGdW5rc2lvbmFsbMSxxJ/EsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTEiIG1zZ2lkPSI0MTU0NDc2ODU0NDI2OTIwOTcwIj4iUm91bWlucSBCYW5uZXJpIEHDp8SxcWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEyIiBtc2dpZD0iMTE4OTA3MTExOTk5MjcyNjMyMCI+IlJvYW1pbmcgQmFubmVyIE9mZiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0U2VhcmNoaW5nIiBtc2dpZD0iODM2MDE0MTg4NTk3MjI3OTk2MyI+IlhpZG3JmXQgYXh0YXLEsWzEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlTm90Rm9yd2FyZGVkIiBtc2dpZD0iMTY4MzY4NTg4Mzg0MTI3MjU2MCI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBZw7ZubMmZbmRpcmlsbcmZZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlRm9yd2FyZGVkIiBtc2dpZD0iMTMwMjkyMjExNzQ5ODU5MDUyMSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iRElBTElOR19OVU1CRVIiPnsxfTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlRm9yd2FyZGVkVGltZSIgbXNnaWQ9IjkyMDYyNTE3MzY1MjcwODUyNTYiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IkRJQUxJTkdfTlVNQkVSIj57MX08L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJUSU1FX0RFTEFZIj57Mn08L3hsaWZmOmc+IHNhbml5yZkgc29ucmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlUmVnaXN0ZXJlZCIgbXNnaWQ9IjUwNzMyMzc4Mjc2MjAxNjYyODUiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogWcO2bmzJmW5kaXJpbG3JmWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZVJlZ2lzdGVyZWRUaW1lIiBtc2dpZD0iNjc4MTYyMTk2NDMyMDYzNTE3MiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBZw7ZubMmZbmRpcmlsbcmZZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmY0NvbXBsZXRlIiBtc2dpZD0iMzExODg0ODIzMDk2Njg4NjU3NSI+IsOWesmZbGxpayBrb2R1IHRhbWFtbGFuZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZjRXJyb3IiIG1zZ2lkPSIzMzI3NTYwMTI2NTg4NTAwNzc3Ij4ixo9sYXHJmSBwcm9ibGVtaSB2yZkgeWEgeWFubMSxxZ8gZnVua3NpeWEga29kdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JPayIgbXNnaWQ9IjExOTE5MTkzNzgwODM0NzIyMDQiPiJPSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvciIgbXNnaWQ9Ijc5NTYzOTI1MTExNDY2OTg1MjIiPiLFnsmZYsmZa8mZIHjJmXRhc8SxIHZhciBpZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yTG9va3VwIiBtc2dpZD0iNDcxMTY4NzQ1NjExMTk2MzE2MyI+IlVSTCB0YXDEsWxhIGJpbG3JmWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiJTYXl0IGF1dGVudGlmaWthc2l5YSBzeGVtaSBkyZlzdMmZa2zJmW5taXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQXV0aCIgbXNnaWQ9IjE0MzUwNjU2Mjk0MzgwNDQ1MzQiPiJUyZlzZGlxIGVkaWzJmSBiaWxtyZlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JQcm94eUF1dGgiIG1zZ2lkPSIxNzg4MjA3MDEwNTU5MDgxMzMxIj4iUHJva3NpIHNlcnZlciB2YXNpdMmZc2lsyZkgdMmZc2RpcWzJmW5tyZkgdcSfdXJzdXogb2xkdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JDb25uZWN0IiBtc2dpZD0iODcxNDI3MzIzNjM2NDY0MDU0OSI+IlNlcnZlcsmZIHFvxZ91bGEgYmlsbcmZZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9ySU8iIG1zZ2lkPSIyMzQwNTU4MTk3NDg5MzAyMTg4Ij4iU2VydmVybMmZIMmZbGFxyZkgYWzEsW5tYWTEsS4gU29ucmEgY8mZaGQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUaW1lb3V0IiBtc2dpZD0iNDc0MzQwMzcwMzc2Mjg4Mzk1NCI+IlNlcnZlciBpbMmZIG9sYW4gyZlsYXHJmSB6YW1hbiBhxZ/EsW3EsW5hIG3JmXJ1eiBxYWxkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUmVkaXJlY3RMb29wIiBtc2dpZD0iODY3OTU5NjA5MDM5Mjc3OTUxNiI+IkJ1IHPJmWhpZsmZZMmZIGjJmWRkaW5kyZluIMOnb3ggc2VydmVyIHnDtm5syZluZGlyaWxtyZlsyZlyaSB2YXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRTY2hlbWUiIG1zZ2lkPSI1MDE1NzMwODEyOTA2MTkyMjA4Ij4iUHJvdG9rb2wgZMmZc3TJmWtsyZlubWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZhaWxlZFNzbEhhbmRzaGFrZSIgbXNnaWQ9Ijk2NTQ5NjA2MDAwNjU4NjQxIj4iR8O8dsmZbmxpIGJhxJ9sYW50xLEgeWFyYWTEsWxhIGJpbG3JmWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckJhZFVybCIgbXNnaWQ9IjM2MzY5Mjk3MjI3Mjg4ODE5NzIiPiJVUkwgeWFubMSxxZ8gb2xkdcSfdSDDvMOnw7xuIHPJmWhpZsmZbmkgYcOnbWFxIG3DvG1rw7xuIG9sbWFkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZSIgbXNnaWQ9IjIxNzA3ODg1MTUwNTI1NTg2NzYiPiJGYXlsYSBnaXJpxZ8gYmHFnyB0dXRtYWTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlTm90Rm91bmQiIG1zZ2lkPSI2MjAzODU2NjEyMDQyNjU1MDg0Ij4iVMmZbMmZYiBvbHVuYW4gZmF5bCB0YXDEsWxtYWTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUb29NYW55UmVxdWVzdHMiIG1zZ2lkPSIxMjM1Mzk2OTI3MDg3MTg4MjUzIj4iSMmZZGRpbmTJmW4gw6dveCBzb3LEn3UgacWfbMmZbmlsaXIuIERhaGEgc29ucmEgeW94bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg5Njc3MTAwMjUwMzYxNjM4MjIiPiI8eGxpZmY6ZyBpZD0iQUNDT1VOVCI+JTEkczwveGxpZmY6Zz4gw7zDp8O8biBnaXJpxZ8geMmZdGFzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVN5bmMiIG1zZ2lkPSI4MzUzNTIzMDYwMjY5MzM1NjY3Ij4iU2lueHJvbmxhxZ9kxLFybWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVN5bmNOb3RpZmljYXRpb25UaXRsZSIgbXNnaWQ9IjM5Nzc0MzM0OTE5MTkwMTQ1OCI+IlNpbnhyb25sYcWfZMSxcm1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VUb29NYW55RGVsZXRlc05vdGlmaWNhdGlvbkRlc2MiIG1zZ2lkPSI4MTAwOTgxNDM1MDgwNjk2NDMxIj4iSMmZZGRpbmTJmW4gw6dveCA8eGxpZmY6ZyBpZD0iQ09OVEVOVF9UWVBFIj4lczwveGxpZmY6Zz4gc2lsaW5tyZlsyZlyaSB2YXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjQ5NDAxOTIzNDEwMjE1NDg5NiI+IlBsYW7Fn2V0aW4geWFkZGHFn8SxIGRvbHVkdXIuIEJvxZ8geWVyIMO8w6fDvG4gYsmZemkgZmF5bGxhcsSxIHNpbGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDc1OTk5Mjg2NjgwMDAwNTQxIj4iVGVsZWZvbnVuIHlhZGRhxZ/EsSBkb2x1ZHVyLiBCb8WfIHllciDDvMOnw7xuIGLJmXppIGZheWxsYXLEsSBzaWxpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZSIgbXNnaWQ9IjY1NDU2OTYwMDc2MzE0MDQyOTIiPiJNyZluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTQ1MzUxNDIwODY1MjAyODUzIj4iUGxhbsWfZXQgc2XDp2ltbMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaWFsb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzE5OTE5MDc1NDYzOTg4NjM4Ij4iVGVsZWZvbiBzZcOnaW1syZlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlIiBtc2dpZD0iNzE2NzcwMzM4OTgwMjYxODY2MyI+IlPJmXNzaXogcmVqaW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXJuX29uX3JhZGlvIiBtc2dpZD0iMzkxMjc5MzA5MjMzOTk2MjM3MSI+IlNpbXNpemkgacWfyZkgc2FsxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHVybl9vZmZfcmFkaW8iIG1zZ2lkPSI4MTk4Nzg0OTQ5OTg3MDYyMzQ2Ij4iU2ltc2l6IHJhYml0yZluaSBzw7ZuZMO8csO8biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9sb2NrIiBtc2dpZD0iNzk5MDk0NjU1NDk2MDk4MTUzIj4iRWtyYW4ga2lsaWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfb2ZmIiBtc2dpZD0iNDI2NjYxNDEwNzQxMjg2NTA0OCI+IlPDtm5kw7xyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfc2lsZW50IiBtc2dpZD0iMzE5Mjk4MTYzMDE4NDczMDc4Ij4iWsmZbmcgZGVha3RpdmRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3ZpYnJhdGUiIG1zZ2lkPSI3MDcyMDQzMzg4NTgxNTUxMzk1Ij4iWsmZbmcgdmlicmFzaXlhZGFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfcmluZyIgbXNnaWQ9Ijg1OTIyNDE4MTYxOTQwNzQzNTMiPiJayZluZ3Z1cmFuIGHDp8SxcWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9wcm9ncmVzcyIgbXNnaWQ9IjIyODEwNzkyNTczMjk5ODEyMDMiPiJTw7ZuZMO8csO8bMO8ci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMzODU3NDUxNzk1NTU3MzE0NzAiPiJQbGFuxZ9ldGluaXogc8O2bsmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQ5NzkyMTc1MjQyODIxMzUzIj4iVGVsZWZvbnVudXogc8O2bsmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtX3F1ZXN0aW9uIiBtc2dpZD0iMjkwNjU0NDc2ODg4MTEzNjE4MyI+IlPDtm5kw7xybcmZayBpc3TJmXlpcnNpej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfdGl0bGUiIG1zZ2lkPSI3MDU0NTA5OTE0NTAwMTQwMzYxIj4iVMmZaGzDvGvJmXNpeiByZWppbWTJmSB5ZW5pZMmZbiBiYcWfbGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX2NvbmZpcm0iIG1zZ2lkPSI1NTI5Mzk0NDUwMjc4NDY2OCI+IlTJmWhsw7xryZlzaXogcmVqaW1kyZkgeWVuaWTJmW4gYmHFn2xhbWFxIGlzdMmZeWlyc2luaXogbWk/IEJ1LCBxdXJhxZ9kxLFyZMSxxJ/EsW7EsXogYsO8dMO8biDDvMOnw7xuY8O8IHTJmXLJmWYgdMmZdGJpcWzJmXJpbmkgZGVha3RpdiBlZMmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRfdGFza3NfdGl0bGUiIG1zZ2lkPSIzNjkxNzY0NjIzNjM4MTI3ODg4Ij4iU29uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+Ikhlw6cgYmlyIHNvbiB0yZl0YmlxIHlveGR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDA4NDc3MTQwMDg4MDUzNjY1Ij4iUGxhbsWfZXQgc2XDp2ltbMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiJUZWxlZm9uIHNlw6dpbWzJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrIiBtc2dpZD0iMjg0NDk0NTE5MTc5MjExOTcxMiI+IkVrcmFuIGtpbGlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fcG93ZXJfb2ZmIiBtc2dpZD0iNDQ3MTg3OTQ0MDgzOTg3OTcyMiI+IlPDtm5kw7xyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9idWdfcmVwb3J0IiBtc2dpZD0iNzkzNDAxMDU3ODkyMjMwNDc5OSI+IkJhcSBoZXNhYmF0xLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdGl0bGUiIG1zZ2lkPSIyNjY3NDk0ODAzNzQyNTQ4NTMzIj4iQmFxxLEgeMmZYsmZciB2ZXJpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9tZXNzYWdlIiBtc2dpZD0iMzk4NDQ3MDQ4NzUwMzUwNDU2Ij4iQnUsIHNpemluIGhhesSxcmvEsSBjaWhheiBkdXJ1bXUgaGFxccSxbmRhIG3JmWx1bWF0IHRvcGxheWFjYXEga2ksIGVsZWt0cm9uIG3JmWt0dWIgxZ/JmWtsaW5kyZkgZ8O2bmTJmXJzaW4uIEJhcSByYXBvcnR1bmEgYmHFn2xhbWFxIMO8w6fDvG4gYmlyIGF6IHZheHQgbGF6xLFtIG9sYSBiaWzJmXIsIGJpciBheiBzyZliciBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fdG9nZ2xlX3NpbGVudF9tb2RlIiBtc2dpZD0iODIxOTUyNTM0NDI0NjgxMDkyNSI+IlPJmXNzaXogcmVqaW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjMyODk4NDE5MzcwMDM3NTg4MDYiPiJTyZlzIHFhcGFsxLFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iMTUwNjA0NjU3OTE3NzA2NjQxOSI+IlPJmXMgQWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc190b2dnbGVfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjU4ODQzMzAzMDY5MjYzMDc0NTYiPiJUyZl5eWFyyZkgcmVqaW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfYWlycGxhbmVfbW9kZV9vbl9zdGF0dXMiIG1zZ2lkPSIyNzE5NTU3OTgyNjA4OTE5NzUwIj4iVcOndcWfIHJlamltaSBhw6fEsXFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfYWlycGxhbmVfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iNTA3NTA3MDQ0Mjg1NDQ5MDI5NiI+IlTJmXl5YXLJmSByZWppbWkgcWFwYWzEsWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJUyZlobMO8a8mZc2l6IHJlamltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCBzaXN0ZW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Nvc3RNb25leSIgbXNnaWQ9IjU0Mjk4MDgyMTc4NjE0NjA0MDEiPiLDlmTJmW5pxZ9saSB4aWRtyZl0bMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY29zdE1vbmV5IiBtc2dpZD0iMzI5MzMwMTkwMzQwOTg2OTQ5NSI+IljJmXJjIHR1dHVsYWNhcSDJmW3JmWxpeXlhdGxhciBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21lc3NhZ2VzIiBtc2dpZD0iNzUyMTI0OTE0ODQ0NTQ1NjY2MiI+IlNpemluIG1lc2FqbGFyxLFuxLF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19tZXNzYWdlcyIgbXNnaWQ9Ijc4MjE5OTkwNzEwMDM2OTkyMzYiPiJTTVMsIGVsZWt0cm9uIHBvw6d0IHbJmSBkaWfJmXIgbWVzYWpsYXLEsSBveHV5dXIgdsmZIHlhesSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfcGVyc29uYWxJbmZvIiBtc2dpZD0iMzUxOTE2MzE0MTA3MDUzMzQ3NCI+IsWeyZl4c2kgbcmZbHVtYXTEsW7EsXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3BlcnNvbmFsSW5mbyIgbXNnaWQ9Ijg0MjY0NTMxMjk3ODg4NjEzMzgiPiJLb250YWt0IGthcnTEsW7EsXpkYSBzYXhsYW7EsWxhbiBtyZlsdW1hdGxhcsSxbsSxemEgYmlyYmHFn2EgZ2lyacWfLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zb2NpYWxJbmZvIiBtc2dpZD0iNTc5OTA5NjYyMzQxMjA0Mzc5MSI+IlNvc2lhbCBtyZlsdW1hdMSxbsSxeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc29jaWFsSW5mbyIgbXNnaWQ9IjcxMjk4NDI0NTc2MTE2NDM0OTMiPiJLb250YWt0bGFyxLFuxLF6IHbJmSBzb3NpYWwgyZlsYXHJmWzJmXJpbml6IGhhcXHEsW5kYSBtyZlsdW1hdGEgYmlyYmHFn2EgZ2lyacWfLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9sb2NhdGlvbiIgbXNnaWQ9IjYzNTE0OTc0MjQzNjY5MjA0OSI+IlllcmzJmcWfbcmZbml6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19sb2NhdGlvbiIgbXNnaWQ9IjU3MDQ2Nzk3NjMxMjQxNzAxMDAiPiJGaXppa2kgYWRyZXNpbml6aSBtb25pdG9yaW5xIGVkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX25ldHdvcmsiIG1zZ2lkPSI1ODA4OTgzMzc3NzI3MTA5ODMxIj4ixZ7JmWLJmWvJmSBrb21tdW5pa2FzaXlhc8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19uZXR3b3JrIiBtc2dpZD0iNDQ3ODI5OTQxMzI0MTg2MTk4NyI+Ik3DvHh0yZlsaWYgxZ/JmWLJmWvJmSB4w7xzdXNpeXnJmXRsyZlyaW7JmSBkYXhpbCBvbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYmx1ZXRvb3RoTmV0d29yayIgbXNnaWQ9IjE1ODU0MDM1NDQxNjIxMjgxMDkiPiJCbHVldG9vdGgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSI1NjI1Mjg4NTc3MTY0MjgyMzkxIj4iQmx1ZXRvb3RoIMO8esmZcmluZMmZbiBjaWhhemxhcmEgdsmZIMWfyZliyZlryZlsyZlyyZkgZGF4aWwgb2wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI4MzI5MjYxNjcwMTUxODcxMjM1Ij4iQXVkaW8gQXlhcmxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjI2NDE1MTU0MDMzNDc1NjgxMzAiPiJBdWRpbyBheWFybGFyxLEgZMmZeWnFn2luLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hZmZlY3RzQmF0dGVyeSIgbXNnaWQ9IjYyMDkyNDY2NTM0MjQ3OTgwMzMiPiJCYXRhcmV5YXlhIHTJmXNpciBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hZmZlY3RzQmF0dGVyeSIgbXNnaWQ9IjY0NDEyNzUzMjA2Mzg5MTY5NDciPiJCYXRhcmV5YW7EsXrEsW4gdGV6IHF1cnRhcm1hc8SxbmEgc8mZYsmZYiBvbGFuIGZ1bmtzaXlhbGFyIGlzdGlmYWTJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2NhbGVuZGFyIiBtc2dpZD0iNTg2MzUwODQzNzc4MzY4MzkwMiI+IlTJmXF2aW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2NhbGVuZGFyIiBtc2dpZD0iNTc3NzUzNDMxNjk4MjE4NDQxNiI+IlTJmXF2aW3JmSB2yZkgdMmZZGJpcmzJmXLJmSBiaXJiYcWfYSBnaXJpxZ8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RpY3Rpb25hcnkiIG1zZ2lkPSI0MTQ4NTk3MTI4ODQzNjQxMzc5Ij4ixLBzdGlmYWTJmcOnaSBMw7zEn8mZdGluaSBPeHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RpY3Rpb25hcnkiIG1zZ2lkPSI3OTIxMTY2MzU1OTY0NzY0NDkwIj4ixLBzdGlmYWTJmcOnaSBsw7zEn8mZdGluZMmZa2kgc8O2emzJmXJpIG94dXl1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODA5MDIzNzcwMjQzMjU3Njc4OCI+IsSwc3RpZmFkyZnDp2kgTMO8xJ/JmXRpbmkgWWF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyNzExNTYxOTk0NDk3MzYxNjQ2Ij4ixLBzdGlmYWTJmcOnaSBsw7zEn8mZdGluyZkgc8O2emzJmXIgyZlsYXbJmSBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ib29rbWFya3MiIG1zZ2lkPSIxOTQ5NTE5NjczMTAzOTY4MjI5Ij4ixo9sZsmZY2lubMmZciB2yZkgVGFyaXjDp8mZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ib29rbWFya3MiIG1zZ2lkPSI0MTY5NzcxNjA2MjU3OTYzMDI4Ij4ixo9sZsmZY2lubMmZcsmZIHbJmSBicmF1emVyIHRhcml4aW7JmSBiaXJiYcWfYSBpY2F6yZkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmljZUFsYXJtcyIgbXNnaWQ9IjYxMTc3MDQ2Mjk3Mjg4MjQxMDEiPiJayZluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2aWNlQWxhcm1zIiBtc2dpZD0iNDc2OTM1NjM2MjI1MTY0MTE3NSI+IkFsYXJtIHF1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfdm9pY2VtYWlsIiBtc2dpZD0iNDE2MjIzNzE0NTAyNzU5MjEzMyI+IlPJmXNsaSBwb8OndCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfdm9pY2VtYWlsIiBtc2dpZD0iMjQ5ODQwMzk2OTg2Mjk1MTM5MyI+IlPJmXMgcG/Dp3R1bmEgYmlyYmHFn2Egw6fEsXjEscWfLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9taWNyb3Bob25lIiBtc2dpZD0iMTcxNTM5OTAwMjUwMDQzNDY0Ij4iTWlrcm9mb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21pY3JvcGhvbmUiIG1zZ2lkPSI3MTA2NjE4Mjg2OTA1NzM4NDA4Ij4iQXVkaW8geWF6bWFxIMO8w6fDvG4gbWlrcm9mb25hIGJpcmJhxZ9hIGdpcmnFny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FtZXJhIiBtc2dpZD0iNDgyMDM3MjQ5NTg5NDU4NjYxNSI+IkthbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMjkzMzY2NzM3MjI4OTU2NzcxNCI+IsWeyZlraWwgdsmZIHlhIHZpZGVvIMOnyZlrbcmZayDDvMOnw7xuIGthbWVyYXlhIGJpcmJhxZ9hIMOnxLF4xLHFny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc2NyZWVubG9jayIgbXNnaWQ9IjgyNzU1MDAxNzMzMzA3MTgxNjgiPiJFa3JhbiBraWxpZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NjcmVlbmxvY2siIG1zZ2lkPSI3MDY3NDk3MTI4OTI1NDk5NDAxIj4iQ2loYXrEsW7EsXpkYWvEsSBraWxpZCBla3JhbsSxbsSxbiBoyZlyyZlryZl0aW7JmSB0yZlzaXIgZXRtyZkgYmFjYXLEscSfxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXBwSW5mbyIgbXNnaWQ9IjgwMjg3ODk3NjI2MzQxNDc3MjUiPiJUyZl0YmlxIG3JmWx1bWF0bGFyxLFuxLF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hcHBJbmZvIiBtc2dpZD0iMzk1MDM3ODUzODA0OTYyNTkwNyI+IkNpaGF6xLFuxLF6ZGFrxLEgZGlnyZlyIHTJmXRiaXFsyZlyaW4gZGF2cmFuxLHFn8SxbmEgdMmZc2lyIGV0bcmZayBiYWNhcsSxxJ/EsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd2FsbHBhcGVyIiBtc2dpZD0iMzg1MDI4MDE1ODA0MTE3NTk5OCI+IkRpdmFyIGthxJ/EsXrEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd2FsbHBhcGVyIiBtc2dpZD0iNTYzMDQxNzg1NDc1MDU0MDE1NCI+IkNpaGF6xLFuIGRpdmFyIGthxJ/EsXrEsSBheWFybGFyxLFuxLEgZMmZeWnFn2luLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1DbG9jayIgbXNnaWQ9IjQwNjUzNTc1OTIzNjYxMjk5MiI+IlNhYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbUNsb2NrIiBtc2dpZD0iMzk0NDM1OTgzMzYyNDA5NDk5MiI+IkNpaGF6xLFuIHZheHQgdsmZIHphbWFuIHpvbGHEn8SxbsSxIGTJmXlpxZ9pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RhdHVzQmFyIiBtc2dpZD0iMjA5NTg2MjU2ODExMzk0NTM5OCI+IlN0YXR1cyBwYW5lbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0YXR1c0JhciIgbXNnaWQ9IjYyNDI1OTM0MzIyMjY4MDcxNzEiPiJDaWhhesSxbiBzdGF0dXMgcGFuZWxpIGF5YXJsYXLEsW7EsXrEsSBkyZl5acWfaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5bmNTZXR0aW5ncyIgbXNnaWQ9IjMzNDE5OTA5ODYxNDc4MjY1NDEiPiJTaW54IEF5YXJsYXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3luY1NldHRpbmdzIiBtc2dpZD0iNzYwMzE5NTI2NTEyOTAzMTc5NyI+IlNpbnhyb25pemFzaXlhIG5pemFtbGFyxLFuYSDDp8SxeMSxxZ8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY291bnRzIiBtc2dpZD0iMzM1OTY0NjI5MTEyNTMyNTUxOSI+Ikhlc2FibGFyxLFuxLF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2NvdW50cyIgbXNnaWQ9IjQ5NDg3MzI2NDE4MjcwOTEzMTIiPiLGj2zDp2F0xLFtbMSxIGhlc2FibGFyYSBkYXhpbCBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNzk5ODIxNDk2ODc5MTU5OTMyNiI+IkhhcmR3YXJlIGtvbnRyb2xsYXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfaGFyZHdhcmVDb250cm9scyIgbXNnaWQ9IjQzNTcwNTc4NjEyMjU0NjI3MDIiPiJEyZlzdMmZa2TJmWtpIGF2YWRhbmzEscSfYSBiaXJiYcWfYSBnaXJpxZ8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3Bob25lQ2FsbHMiIG1zZ2lkPSI5MDY3MTczOTg4MzI1ODY1OTIzIj4iVGVsZWZvbiB6yZluZ2zJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19waG9uZUNhbGxzIiBtc2dpZD0iNzQ4OTcwMTYyMDQ0NjE4Mzc3MCI+IlRlbGVmb24gesmZbmdsyZlyaW7JmSBuyZl6YXLJmXQgZWRpbiwgcWV5ZMmZIGFsxLFuIHbJmSBpZGFyyZkgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3lzdGVtVG9vbHMiIG1zZ2lkPSI0NjUyMTkxNjQ0MDgyNzE0MDQ4Ij4iU2lzdGVtIGFsyZl0bMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbVRvb2xzIiBtc2dpZD0iODE2MjEwMjYwMjE5MDczNDMwNSI+IkHFn2HEn8SxIHPJmXZpeXnJmWxpIMOnxLF4xLHFnyB2yZkgc2lzdGVtIGlkYXLJmWV0bcmZc2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSIzNDQ2MTY0NTg0NzEwNTk2NTEzIj4ixLBua2nFn2FmIGFsyZl0bMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSI3MDU4ODI4MDMyMzU4MTQyMDE4Ij4iw5Z6yZlsbGlrbMmZciB5YWxuxLF6IHTJmXRiaXEgZGV2ZWxvcGVybMmZcmkgw7zDp8O8biBsYXrEsW1kxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaXNwbGF5IiBtc2dpZD0iNDI3OTkwOTY3NjAzNjQwMjYzNiI+IkRpZ8mZciB0yZl0YmlxIMSwc3RpZmFkyZnDp2kgxLBudGVyZmV5c2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Rpc3BsYXkiIG1zZ2lkPSI2MDUxMDAyMDMxOTMzMDEzNzE0Ij4iRGlnyZlyIHTJmXRiaXFsyZlyaW4gxLBzdGlmYWTJmcOnaSDEsG50ZXJmZXlzaW7JmSB0yZlzaXIgZWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RvcmFnZSIgbXNnaWQ9IjE5NzExMTg3NzA1NDYzMzY5NjYiPiJZYWRkYcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc0NDIzMTg1MDI0NDY4NzQ5OTkiPiJVU0IgeWFkZGHFn2EgZGF4aWwgb2wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iOTIwMzMwMjIxNDkxNTM1NTc3NCI+IlNEIGthcnRhIGRheGlsIG9sLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI3OTE5MDI1NjAyMjgzNTkzOTA3Ij4ixo9sw6dhdMSxbWzEsWzEsXEgZnVua3NpeWFsYXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWNjZXNzaWJpbGl0eUZlYXR1cmVzIiBtc2dpZD0iNDIwNTE5Njg4MTY3ODE0NDMzNSI+IllhcmTEsW3Dp8SxIHRleG5vbG9naXlhIHTJmWzJmWIgZWTJmSBiaWzJmWPJmXlpIGZ1bmtzaXlhbGFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzkwMTcxNzkzNjkzMDE3MDMyMCI+IlDJmW5jyZlyyZluaW4gbcmZem11bnVudSDJmWxkyZkgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzNzcyMjI1MDA4NjA1MzEwNjcyIj4ixo9sYXHJmWTJmSBvbGR1xJ91bnV6IHDJmW5jyZlyyZluaW4gbcmZem11bnVudSBuyZl6yZlyZMmZbiBrZcOnaXJpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iMzEwODcyMzM2NDY3NjY2NzMyMCI+IlRveHVuYXJhcSBLyZnFn2YgZXQgZnVua3NpeWFzxLFuxLEgeWFuZMSxcsSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjU4MDA1NTI1MTY3NzkyNDkzNTYiPiJUb3h1bnVsYW4gaGlzc8mZbMmZciBzyZlzbMmZbmRpcmlsyZljyZlrIHbJmSBla3JhbiBqZXN0bMmZcmzJmSBpZGFyyZkgb2x1bmEgYmlsyZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE3Mzk4ODE3NjY1MjI1OTQwNzMiPiLEsG5racWfYWYgZXRtacWfIHZlYiDJmWzDp2F0xLFtbMSxbMSxxJ/EsSB5YW5kxLFyxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSI3ODgxMDYzOTYxNTA3NTExNzY1Ij4iU2tyaXB0bMmZciB0yZl0YmlxIG3JmXptdW51bnVuIGRhaGEgyZlsw6dhdMSxbWzEsSBvbG1hc8SxIMO8w6fDvG4gcXVyYcWfZMSxcsSxbGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9IjIxMDM0NDAzOTE5MDI0MTIxNzQiPiJZYXpkxLHEn8SxbsSxeiBtyZl0bmkgaXpsyZl5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJLcmVkaXQga2FydMSxIG7Dtm1yyZlsyZlyaSB2yZkgcGFyb2xsYXIga2ltaSDFn8mZeHNpIG3JmWx1bWF0bGFyIGRheGlsZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+InN0YXR1cyBwYW5lbGluaSBkZWFrdGl2bMmZxZ9kaXIgdsmZIHlhIGTJmXlpxZ9kaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iVMmZdGJpccmZIHN0YXR1cyBwYW5lbGluaSBkZWFrdGl2IGV0bcmZecmZIHbJmSB5YSBzaXN0ZW0gaWtvbmFsYXLEsW7EsSDJmWxhdsmZIGV0bcmZayB2yZkgeWEgc2lsbcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcyNDcyODE5MTEzODc5MzE0ODUiPiJzdGF0dXMgcGFuZWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcxNjExMzY2MDc5NTk3NjA2MCI+IlTJmXRiaXHJmSBzdGF0dXMgcGFuZWxpIG9sbWHEn2EgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSIxMTQ4MTk4Nzg1OTM3NDg5MjY0Ij4ic3RhdHVzIHBhbmVsaW5pIGdlbmnFn2zJmXRtyZlrIHbJmSB5YSB5xLHEn21hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjY5MTc1NDk0MzcxMjk0MDExMzIiPiJUyZl0YmlxyZkgc3RhdHVzIHBhbmVsaW5pIGdlbmnFn2zJmW5kaXJtyZl5yZkgdsmZIHlhIHlveCBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iMzkwNjAwNzgzMTE5Mjk5MDk0NiI+ImdlZMmZbiB6yZluZ2zJmXJpbiBtYXLFn3J1dHVudSBkyZl5acWfbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iNTMzMTMxODkzMTkzNzQwMjA0MCI+IlTJmXRiaXHJmSB6yZluZyBldG3JmXnJmSB2yZkgesmZbmcgZWRpbMmZbiBuw7ZtcsmZbmkgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgZ2VkyZluIHrJmW5nbMmZcmkgaXpsyZl5yZksIHnDtm5syZluZGlyyZkgdsmZIHlhIHFhcsWfxLFzxLFuxLEgYWxhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVTbXMiIG1zZ2lkPSI4NjczNDcxNzY4OTQ3ODk1MDgyIj4iU01TIHHJmWJ1bCBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlU21zIiBtc2dpZD0iNjQyNDM4Nzc1NDIyODc2NjkzOSI+IlTJmXRiaXHJmSBNTVMgbWVzYWpsYXLEsW7EsSBhbG1hcSB2yZkgZW1hbCBldG3JmWsgaWNhesmZc2kgdmVyaXIuIEJ1IG8gZGVtyZlrZGlyIGtpLCB0yZl0YmlxIHNpemluIG1lc2FqbGFyxLFuxLF6xLEgc2l6yZkgZ8O2c3TJmXJtyZlkyZluIG1vbml0b3JpbnEgZWTJmSB2yZkgeWEgc2lsyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZU1tcyIgbXNnaWQ9IjE4MjEzMTczNDQ2NjgyNTcwOTgiPiJtyZl0biBtZXNhamxhcsSxbsSxIHHJmWJ1bCBlZGlyIChNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+IlTJmXRiaXHJmSBNTVMgbWVzYWpsYXLEsW7EsSBxyZlidWwgdsmZIGVtYWwgw7zDp8O8biBpbWthbiB2ZXJpci4gQnUgbyBkZW3JmWtkaXIga2ksIGJ1IHTJmXRiaXEgc2l6yZkgZ8O2c3TJmXJtyZlkyZluIGNpaGF6xLFuxLF6YSBnw7ZuZMmZcmlsyZluIG1lc2FqbGFyxLHCoHNpbMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4idMmZY2lsaSB5YXnEsW1sYXLEsSBxyZlidWwgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSI4NDg1MjQwNzAyNjI0MzE5NzQiPiJUyZl0YmlxyZkgdMmZY2lsaSB5YXnEsW0gbWVzYWpsYXLEsW7EsSBxyZlidWwgdsmZIGVtYWwgZXRtyZlrIGljYXrJmXNpIHZlcmlyLiBCdSBpY2F6yZkgYW5jYXEgc2lzdGVtIHTJmXRiaXFsyZlyaSDDvMOnw7xuIG3DvG1rw7xuZMO8ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjE1OTgzMjg4NDM2MTk2NDYxNjYiPiJtb2JpbCB5YXnEsW0gbWVzYWpsYXLEsW7EsSBveHV5dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4iVMmZdGJpccmZIHNpemluIHRlbGVmb251bnV6IHTJmXLJmWZpbmTJmW4gYWzEsW5txLHFnyB5YXnEsW0gbWVzYWpsYXLEsW7EsSBveHVtYSBpY2F6yZlzaSB2ZXJpci4gVGVsZWZvbiB5YXnEsW3EsSBiyZl6aSBtyZlrYW5sYXJkYSBvbGFuIGbDtnZxyZlsYWTJmSBoYWRpc8mZbMmZcmzJmSBiYcSfbMSxIHNpemkgeMmZYsmZcmRhciBldG3JmWsgw7zDp8O8biBxyZlidWwgZWRpbGlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgZsO2dnHJmWxhZMmZIG1vYmlsIHlhecSxbSBxyZlidWwgZWRpbGRpeWkgemFtYW4gdGVsZWZvbnVudW4gcGVyZm9ybWFuc8SxbmEgdsmZIMmZbcmZbGl5eWF0xLFuYSBtw7xkYXhpbMmZIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFNtcyIgbXNnaWQ9IjU2MDA4MzA2MTIxNDc2NzE1MjkiPiJTTVMgbWVzYWpsYXLEsW7EsSBnw7ZuZMmZcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFNtcyIgbXNnaWQ9IjcwOTQ3MjkyOTgyMDQ5Mzc2NjciPiJUyZl0YmlxyZkgU01TIG1lc2FqxLEgZ8O2bmTJmXJtyZkgaWNhesmZc2kgdmVyaXIuIEJ1IGfDtnpsyZluaWxtyZl5yZluIMO2ZMmZbmnFn2zJmXLJmSBzyZliyZliIG9sYSBiaWzJmXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBzaXppbiB0yZlzZGlxaW5peiBvbG1hZGFuIG1lc2FqIGfDtm5kyZlybcmZa2zJmSBzaXrJmSDDtmTJmW5pxZ/JmSBzyZliyZliIG9sYSBiaWzJmXJsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9Ijg3MTM4ODkxMDUzMDU5NDMyMDAiPiJtZXNhamxhIGNhdmFiIHZlcmlsbcmZbGkgdMmZZGJpcmzJmXIgZ8O2bmTJmXJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9IjcxMDc2NDg1NDg0Njg3Nzg3MzQiPiJUyZl0YmlxyZkgesmZbmdsyZlyIMO8w6fDvG4gXCJtZXNhamxhIGNhdmFibGFcIiBoYWRpc8mZbMmZcmluaSBpZGFyyZkgZXRtyZlrIMO8w6fDvG4gZGlnyZlyIG1lc2FqbGHFn21hIHTJmXRiaXFsyZlyaW7JmSBzb3LEn3VsYXLEsW4gZ8O2bmTJmXJpbG3JmXNpIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNtcyIgbXNnaWQ9Ijg3NDUwODY1NzIyMTMyNzA0ODAiPiJ0ZWtzdCBtZXNhamxhcsSxbsSxesSxIG94dXl1ciAoU01TIHbJmSB5YSBNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjQ2Nzk4MTU0ODY4NDczNTUyMiI+IlTJmXRiaXHJmSBwbGFuxZ9ldGluaXpkyZkgdsmZIHlhIFNJTSBrYXJ0xLFuxLF6ZGEgc2F4bGFuYW4gU01TIG1lc2FqbGFyxLEgb3h1bWHEn2EgaW1rYW4gdmVyaXIuIEJ1IGLDvHTDvG4gU01TIG1lc2FqbGFyxLFuLCBvbmxhcsSxbiBtyZl6bXVudW5kYW4gdsmZIGtvbmZpZGVuc2lhbGzEscSfxLFuZGFuIGFzxLFsxLEgb2xtYWRhbiBveHVubWFzxLEgaW1rYW7EsSBkZW3JmWtkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiJUyZl0YmlxyZkgdGVsZWZvbnVudXpkYSB2yZkgeWEgU0lNIGthcnTEsW7EsXpkYSBzYXhsYW5hbiBTTVMgbWVzYWpsYXLEsSBveHVtYcSfYSBpbWthbiB2ZXJpci4gQnUgYsO8dMO8biBTTVMgbWVzYWpsYXLEsW4sIG9ubGFyxLFuIG3JmXptdW51bmRhbiB2yZkga29uZmlkZW5zaWFsbMSxxJ/EsW5kYW4gYXPEsWzEsSBvbG1hZGFuIG94dW5tYXPEsSBpbWthbsSxIGRlbcmZa2Rpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+Im3JmXRuIG1lc2FqbGFyxLFuxLF6xLEgcmVkYWt0yZkgZWRpciAoU01TIHbJmSB5YSBNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiJUyZl0YmlxyZkgdGVsZWZvbnVudXpkYSB2yZkgeWEgU8SwTSBrYXJ0xLFuxLF6ZGEgeWVybMmZxZ/JmW4gU01TIG1lc2FqbGFyYSB5YXptYSBpY2F6yZlzaSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIHNpemluIG1lc2FqbGFyxLFuxLF6xLEgc2lsyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2ODY2ODcwOTA1MjMyODU2NyI+IlTJmXRiaXHJmSB0ZWxlZm9udW51emRhIHbJmSB5YSBTxLBNIGthcnTEsW7EsXpkYSB5ZXJsyZnFn8mZbiBTTVMgbWVzYWpsYXJhIHlhem1hIGljYXrJmXNpIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgc2l6aW4gbWVzYWpsYXLEsW7EsXrEsSBzaWzJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9IjU5OTEzOTg3MTE5MzY1OTA0MTAiPiJtyZl0biBtZXNhamxhcsSxIHHJmWJ1bCBldG3JmWsgKFdBUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9Ijc0ODIzMjE5MDIyMDU4MzM4NSI+IlTJmXRiaXHJmSBXQVAgbWVzYWpsYXIgZ8O2bmTJmXJtyZlrIHbJmSB5YSBxyZlidWwgZXRtyZlrIGlta2FuxLEgdmVyaXIuIEJ1bmEgbWVzYWpsYXLEsSBpemzJmW3JmWsgdsmZIFNpesmZIHjJmWLJmXIgdmVybcmZZMmZbiBzaWxtyZlrIGlta2FubGFyxLEgZGEgZGF4aWxkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUYXNrcyIgbXNnaWQ9IjY0NjYwOTUzOTY2MjM5MzM5MDYiPiJpxZ9syZluyZluIHTJmXRiaXFsyZlyIMmZbGTJmSBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUYXNrcyIgbXNnaWQ9Ijc0NTQyMTU5OTU4NDc2NTgxMDIiPiJUyZl0YmlxyZkgaGF6xLFyZGEgdsmZIGF6IMO2bmPJmSBpxZ9syZl5yZluIHRhcMWfxLFyxLFxbGFyIGhhcXHEsW5kYSDJmXRyYWZsxLEgbcmZbHVtYXQgyZlsZMmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiBCdSBkYSBjaWhhemRhIGhhbnPEsSB0yZl0YmlxbMmZcmluIGlzdGlmYWTJmSBvbHVubWFzxLEgaGFxccSxbmRhIG3JmWx1bWF0bGFyxLFuIMmZbGTJmSBlZGlsbcmZc2luyZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iNzExNDI1NTI4MTk0NDIxMTY4MiI+ImlzdGlmYWTJmcOnaWzJmXIgYXJhc8SxbmRhIMmZbGFxyZkgcXVydXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iMzY0NjcwOTYzNjIzMzg1Nzg2Ij4iVMmZdGJpccmZIGJ1IGNpaGF6ZGFrxLEgZGlnyZlyIGlzdGlmYWTJmcOnaWzJmXJsyZkgbcO8eHTJmWxpZiBpxZ9syZlyaSBnw7ZybcmZecmZIGljYXrJmSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZnDp2lsyZlyIGFyYXPEsW5kYWvEsSBxb3J1bm1hbsSxIHBvem1hcSDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMjU2NzczNDI4NTU0NTA3NDEwNSI+ImLDvHTDvG4gaXN0aWZhZMmZw6dpbMmZciBpbMmZIMmZbGFxyZkgc2F4bGFtYXEgw7zDp8O8biB0YW0gaMO8cXVxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJhY3RBY3Jvc3NVc2Vyc0Z1bGwiIG1zZ2lkPSIzNzY4NDEzNjgzOTU1MDIzNjYiPiLEsHN0aWZhZMmZw6dpbMmZciBhcmFzxLFuZGEgYsO8dMO8biBtw7xta8O8biDJmWxhccmZbMmZcsmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNlcnMiIG1zZ2lkPSIxNjc2MTUwOTExNjcyMjgyNDI4Ij4iaXN0aWZhZMmZw6dpbMmZcmkgaWRhcsmZIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2VycyIgbXNnaWQ9Ijg0MDkzMDY2Njc2NDUzNTU2MzgiPiJUyZl0YmlxbMmZcsmZIGNpaGF6ZGEgb2xhbiBpc3RpZmFkyZnDp2lsyZlyaSwgaGFiZWzJmSBzb3LEn3UgZ8O2bmTJmXJtyZksIHlhcmF0bWEgdsmZIHNpbG3JmSBpem5pIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjYyMjk0Njg2NzQ3NTM1Mjk1MDEiPiJpxZ9syZluyZluIHTJmXRiaXFsyZlyaW4gZGV0YWxsYXLEsW7EsSDJmWxkyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjE1MzgyNDc0MTQ0MDcxNzU5OSI+IlTJmXRiaXHJmSBoYXrEsXJkYSB2yZkgYXogw7ZuY8mZIGnFn2zJmXnJmW4gdGFwxZ/EsXLEsXFsYXIgaGFxccSxbmRhIMmZdHJhZmzEsSBtyZlsdW1hdCDJmWxkyZkgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrIMWfyZl4c2kgbcmZbHVtYXRsYXLEsSBvxJ91cmxheWEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVvcmRlclRhc2tzIiBtc2dpZD0iMjAxODU3NTUyNjkzNDQyMjc3OSI+ImnFn2zJmW7JmW4gdMmZdGJpcWzJmXJpbiBzxLFyYXPEsW7EsSBkyZl5acWfbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9Ijc3MzQyMTc3NTQ4Nzc0MzkzNTEiPiJUyZl0YmlxyZkgdGFwxZ/EsXLEsXFsYXLEsSDDtm4gcGxhbmRhbiBhcnhhIHBsYW5hIGtlw6dpcm3JmXnJmSBpbWthbiB2ZXJpci4gVMmZdGJpcSBidW51IFNpemluIGRheGlsZXRtyZluaXogb2xtYWRhbiBkYSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlbW92ZVRhc2tzIiBtc2dpZD0iNjgyMTUxMzQwMTg3MDM3NzQwMyI+ImnFn2zJmWsgdMmZdGJpcWzJmXJpIGRheWFuZMSxcsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlbW92ZVRhc2tzIiBtc2dpZD0iMTM5NDcxNDM1MjA2MjYzNTQ5MyI+IlTJmXRiaXHJmSB0YXDFn8SxcsSxcWxhcsSxIHNpbG3JmXnJmSB2yZkgb25sYXLEsW4gdMmZdGJpcWzJmXJpbmkgbcmZaHYgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrIGRpZ8mZciB0yZl0YmlxbMmZcmluIGnFn2zJmXJpbmkgZGF5YW5kxLFyYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY3Rpdml0eVN0YWNrcyIgbXNnaWQ9IjczOTExOTEzODQwMjczMDMwNjUiPiJmyZlhbGl5ecmZdCB0b3BsdWxhcsSxbsSxIGlkYXLJmSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSIxNjE1ODgxOTMzMDM0MDg0NDQwIj4iVMmZdGJpccmZIGRpZ8mZciB0yZl0YmlxbMmZcmluIGbJmWFsaXl5yZl0aSBkYXhpbGluZMmZIGbJmWFsaXl5yZl0IHRvcGx1bGFyxLFuxLEgyZlsYXbJmSBldG3JmWssIHNpbG3JmWsgdsmZIGTJmXlpxZ9tyZlrIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iMjkxODc2ODIzODA0NTIwNjQ1NiI+ImjJmXIgaGFuc8SxIGJpciBmyZlhbGl5ecmZdCBiYcWfbGF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9Ijk5NzgyMzY5NTM0MzU4NDAwMSI+IsSwY2F6yZkgcW9ydW5tYXPEsSB2yZkgeWEgZWtzcG9ydCBlZGlsbWnFnyBzdGF0dXNkYW4gYXPEsWzEsSBvbG1heWFyYXEsIHTJmXRiaXHJmSBoyZlyIGhhbnPEsSBmyZlhbGl5ecmZdGkgYmHFn2xhdG1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5NzUzODcxMTg4NjE4NDIwNjEiPiJla3JhbiB1ecSfdW5sdcSfdW51IHllcmzJmcWfZGlyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRTY3JlZW5Db21wYXRpYmlsaXR5IiBtc2dpZD0iNjkyMDQzNjE4NjkzOTE3Mzc0Ij4iVMmZdGJpccmZIGRpZ8mZciB0yZl0YmlxbMmZcmluIGVrcmFuIHV5xJ91bmx1xJ91bnUgeW94bGFtYXEgaW1rYW7EsSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGRpZ8mZciB0yZl0YmlxbMmZcmluIGbJmWFsaXl5yZl0aW5pIHBvemEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0RGVidWdBcHAiIG1zZ2lkPSIzMDIyMTA3MTk4Njg2NTg0MDUyIj4idMmZdGJpcSBzYXpsYW5tYXPEsW7EsSBha3RpdiBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0RGVidWdBcHAiIG1zZ2lkPSI0NDc0NTEyNDE2Mjk5MDEzMjU2Ij4iVMmZdGJpccmZIGRpZ8mZciBiaXIgdMmZdGJpcSDDvMOnw7xuIHNhemxhbWFuxLEgYcOnbWFxIMO8w6fDvG4gaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW51IGRpZ8mZciB0yZl0YmlxbMmZcmkgeW94IGV0bcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MTYyMDkyMTg1MTI0MjM0NDgwIj4ic2lzdGVtIGVrcmFuIG5pemFtbGFyxLFuxLEgZMmZeWnFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MzcyMjIzODczMTU0Mjk2MDc2Ij4iVMmZdGJpccmZIHllcmxpIHBhcmFtZXRybMmZciB2yZkgeWEgxZ9yaWZ0aW4gw7Zsw6fDvHPDvCBraW1pIGNhcmkga29uZmlxdXJhc2l5YW7EsSBkyZl5acWfbcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjU2ODQ1MDQwNTgxOTI5MjEwOTgiPiJhdnRvbW9iaWwgcmVqaW1pbmkgYWt0aXZsyZnFn2RpcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiJUyZl0YmlxyZkgYXZ0b21vYmlsIHJlamltaW5pIGFrdGl2bMmZxZ9kaXJtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9raWxsQmFja2dyb3VuZFByb2Nlc3NlcyIgbXNnaWQ9IjM5MTQwMjY2ODc0MjAxNzcyMDIiPiJkaWfJmXIgdMmZdGJpcWzJmXJpIHFhcGF0bWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSI0NTkzMzUzMjM1OTU5NzMzMTE5Ij4iVMmZdGJpccmZIGJhxZ9xYSB0yZl0YmlxbMmZcmluIGFyeGFmb24gcHJvc2VzbMmZcmluaSBkYXlhbmTEsXJtYXEgaWNhesmZc2kgdmVyaXIuIEJ1IGRpZ8mZciB0yZl0YmlxbMmZcmluIGRheWFubWFzxLFuYSBzyZliyZliIG9sYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjIzMjk2Mjc0Mjg4MzIwNjc3MDAiPiJEaWfJmXIgdMmZdGJpcWzJmXJpIGRheWFubWHEn2EgbcmZY2J1ciBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iNTI1MzE1NzI5NjE4Mzk0MDgxMiI+IlTJmXRiaXHJmSBkaWfJmXIgdMmZdGJpcWzJmXJpIG3JmWNidXJpIMWfyZlraWxkyZkgZGF5YW5kxLFybWHEn2EgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZUJhY2siIG1zZ2lkPSI2NTI5MzUyMDQwNzI1ODQ2MTYiPiJ0yZl0YmlxaSBxYXBhbm1hxJ9hIG3JmWNidXIgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZm9yY2VCYWNrIiBtc2dpZD0iMzg5MjI5NTgzMDQxOTUxMzYyMyI+IlTJmXRiaXHJmSDDtm4gcGxhbmRhIG9sYW4gaXN0yZluaWzJmW4gdMmZdGJpcWkgYmHEn2xheWFyYXEgZ2VyaXnJmSBkw7ZubcmZecmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBoZcOnIHZheHQgaXN0aWZhZMmZIG9sdW5tYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2R1bXAiIG1zZ2lkPSIxNjgxNzk5ODYyNDM4OTU0NzUyIj4ic2lzdGVtaW4gZGF4aWxpIGR1cnVtdW51IGLJmXJwYSBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2R1bXAiIG1zZ2lkPSIxNzc4Mjk5MDg4NjkyMjkwMzI5Ij4iVMmZdGJpccmZIHNpc3RlbWluIGRheGlsaSBzdGF0dXN1bnUgYsmZcnBhIGV0bcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgbGF6xLFtIG9sbWFkxLHEn8SxIGhhbGRhIG3DvHh0yZlsaWYgxZ/JmXhzaSB2yZkgZ8O8dsmZbmxpIG3JmWx1bWF0bGFyxLEgYsmZcnBhIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSI4MDIyNTg4NjA4OTk0NTg5OTM4Ij4iZWtyYW4ga29udGVudGluaSBiyZlycGEgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iMzE5MzI2OTA2OTQ2OTcwMDI2NSI+IlTJmXRiaXHJmSBha3RpdiBwyZluY8mZcsmZbmluIG3JmXptdW51bnUgyZlsZMmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZayBwyZluY8mZcsmZIG3JmXptdW51bnUgyZlsyZkga2XDp2lyaWIgcGFyb2xsbGFyxLEgb3h1eWEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMjMxMjYxMjEzNTEyNzMxMDI1NCI+ImdpcmnFnyBpbWthbsSxbsSxIG3DvHbJmXFxyZl0aSBhw6dtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSI4MDc5NDU2MjkzMTgyOTc1NDY0Ij4iVMmZdGJpccmZIGNpaGF6YSBnaXJpxZ9pIG3DvHbJmXFxyZl0aSBvbGFyYXEgYWt0aXZsyZnFn2Rpcm3JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGlzdGlmYWTJmcOnaSByYXrEsWzEscSfxLEgb2xtYWRhbiBnaXJpxZ9pIGFrdGl2bMmZxZ9kaXLJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9Ijg1MzIyOTUxOTkxMTI1MTkzNzgiPiJwyZluY8mZcsmZIGluZm9zdW51IGLJmXJwYSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI0OTk4ODM2MzcwNDI0MTg2ODQ5Ij4iVMmZdGJpccmZIHDJmW5jyZlyyZkgaWRhcsmZw6dpc2luZMmZbiBnyZlsyZluIHdpbmRvd3MgaGFxccSxbmRhIG9sYW4gbcmZbHVtYXTEsSBiyZlycGEgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBkYXhpbGkgc2lzdGVtIGlzdGlmYWTJmXNpIMO8w6fDvG4gbsmZesmZcmTJmSB0dXR1bGFuIG3JmWx1bWF0xLEgYsmZcnBhIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmlsdGVyX2V2ZW50cyIgbXNnaWQ9Ijg2NzU1MzU2NDg4MDc0MjczODkiPiJ0yZlkYmlybMmZcmkgZmlsdHIgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4MDA2MjM2MzE1ODg4MzQ3NjgwIj4iVMmZdGJpccmZIGRheGlsZXRtyZkgZmlsdHJpbmkgcWV5ZGl5eWF0IGV0ZGlybcmZecmZIGlta2FuIHZlcmlyLCBidSBmaWx0ciBiw7x0w7xuIGlzdGlmYWTJmcOnaSB0yZlkYmlybMmZcmluaSBnw7ZuZMmZcmlsbcmZbWnFn2TJmW4gyZl2dsmZbCBmaWx0cmTJmW4ga2XDp2lyaXIuIFrJmXLJmXJsaSB0yZl0YmlxIGlzdGlmYWTJmcOnaSBtw7xkYXhpbMmZc2kgb2xtYWRhbiDEsHN0aWZhZMmZw6dpIMSwbnRlcmZleXNpIHNpc3RlbWluyZkgbsmZemFyyZl0IGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNTk3MzYyNjczODE3MDYxODc3NSI+ImVrcmFuxLEgYsO2ecO8ZMO8ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjcxMjEyMzU2ODQ1MTUwMDM3OTIiPiJUyZl0YmlxyZkgZWtyYW4ga29udGVudGluaSBiw7Z5w7x0bcmZayBpY2F6yZlzaSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgZWtyYW5kYSBrb250ZW50aSBiw7Z5w7xkyZlyyZlrIGNpaGF6xLFuIHFleXJpLXN0YWJpbGxpeWluyZkgc8mZYsmZYiBvbGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2h1dGRvd24iIG1zZ2lkPSI3MTg1NzQ3ODI0MDM4OTA5MDE2Ij4icWlzbcmZbiBzw7ZuZMO8csO8ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NodXRkb3duIiBtc2dpZD0iNzA0NjUwMDgzODc0NjI5MTc3NSI+IkFrdGl2bGlrIGlkYXLJmcOnaWxpeWluaSBxYXBhbm3EscWfIGhhbGEgZ8mZdGlyaXIuIFRhbSBxYXBhbm1hbsSxIGjJmXlhdGEga2XDp2lybWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iNDEzODYwODYxMDcxNzQyNTU3MyI+InTJmXRiaXFkyZluIHTJmXRiaXHJmSBrZcOnaWRpbiBxYXLFn8Sxc8SxbsSxIGFsbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iODI2MjE5NTgwMjU4MjI1NTAyMSI+IsSwc3RpZmFkyZnDp2luaW4gYmHFn3FhIHTJmXRiaXHJmSBrZcOnbcmZc2luaW4gcWFyxZ/EsXPEsW7EsSBhbMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjI1Mzc5MjIzMTE0MTE1NDYwMTYiPiJjYXJpIHTJmXRiaXEgaW5mb3JtYXNpeWFzxLEgyZlsZMmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjgxNTM2NTE0MzQxNDUxMzI1MDUiPiJTYWhpYsmZIGVrcmFuIMO2bsO8bmTJmSBjYXJpIHTJmXRiaXEgdsmZIHhpZG3JmXRsyZlyIGhhcXHEsW5kYSDFn8mZeHNpIG3JmWx1bWF0IMmZbGTJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9Ijg5MjIzOTA5NDg2NzE4MjY1NiI+ImnFn8mZIHNhbMSxbmFuIGLDvHTDvG4gdMmZdGJpcWzJmXJpIGl6bMmZeWlyIHbJmSBpZGFyyZkgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiJUyZl0YmlxyZkgc2lzdGVtaW4gZsmZYWxpeXnJmXRsyZlyaSBuZWPJmSBiYcWfbGF0ZMSxxJ/EsW7EsSBuyZl6YXLJmXQgdsmZIGtvbnRyb2wgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBzaXN0ZW1pIHRhbWFtaWzJmSBrb21wcm9taXMgZWTJmSBiaWzJmXIuIEJ1IGljYXrJmSB5YWxuxLF6IGlua2nFn2FmIMO8w6fDvG5kw7xyLCBoZcOnIHZheHQgbm9ybWFsIGlzdGlmYWTJmSDDvMOnw7xuIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSIyNTc2MzMzNDM0ODkzNTMyNDc1Ij4icWFsZMSxcsSxbG3EscWfIHlhecSxbSBwYWtldGluaSBnw7ZuZMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+IlTJmXRiaXHJmSB0yZl0YmlxIHBha2V0aW5pbiBzaWxpbm3JmXNpIGhhcXHEsW5kYSBiaWxkaXJpxZ8gdHJhbnNsYXNpeWEgZXRtyZkgaWNhesmZc2kgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gZGlnyZlyIGnFn2zJmWsgdMmZdGJpcWzJmXJpIGRheWFuZMSxcm1hcSDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNTY4OTA5NTAwOTAzMDMzNjU5MyI+IlNNUyB0yZlyyZlmaW5kyZluIHHJmWJ1bCBlZGlsyZluIHlhecSxbSBnw7ZuZMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNDE1MjAzNzcyMDAzNDM2NTQ5MiI+IlTJmXRiaXHJmSBtZXNhaiBnyZlsbcmZc2kgaGFxccSxbmRhIGJpbGRpcmnFn2kgeWF5xLFtbGFtYXEgaW1rYW7EsSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBnyZlsyZluIFNNUyBtZXNhamxhcsSxbsSxIHNheHRhbGHFn2TEsXJtYXEgw7zDp8O8biBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+IldBUC1QVVNIIHTJmXLJmWZpbmTJmW4gccmZYnVsIGVkaWzJmW4geWF5xLFtIGfDtm5kyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjQ3ODM0MDI1MjUwMzk0NDI3MjkiPiJUyZl0YmlxyZkgV0FQIFBVU0ggbWVzYWrEsW4gYWzEsW5kxLHEn8SxIGhhcWRhIGJpbGRpcmnFnyB0cmFuc2xhc2l5YSBldG3JmXnJmSBpY2F6yZkgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrIHNheHRhIE1NUyBtZXNhaiBhbMSxxZ/EsSB2yZkgeWEgc8mZc3NpemPJmSBpc3TJmW5pbMmZbiB2ZWIgc8mZaGlmyZluaSB6yZlyyZlydmVyaWNpIHZhcmlhbnRsYXJsYSBkyZl5acWfbcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjI0NTE4NzM2NjQzNjM2NjI2NjYiPiLDp2FsxLHFn2FuIHByb3Nlc2zJmXJpbiBzYXnEsW7EsSBtyZloZHVkbGHFn2TEsXLEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4iVMmZdGJpccmZIGnFn2zJmWRpbMmZY8mZayBtYWtzaW11bSBwcm9zZXMgc2F5xLFuxLEgaWRhcsmZIGV0bcmZIGl6bmkgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIHTJmWzJmWIgb2x1bm11ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9IjU1MDk1ODUwNzc5ODc5Njk2NSI+ImFyeGFmb24gdMmZdGJpcWzJmXJpbmkgZGF5YW5tYcSfYSBtyZljYnVyIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI3NDcxMzEwNjUyODY4ODQxNDk5Ij4iVMmZdGJpccmZIGFrdGl2aXRpbMmZcmluIGFyeGEgZm9uYSBnZXRkaXlpIHphbWFuIGJpdG3JmXNpbmkgeW94bGF5xLFyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiB0yZlsyZluIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIyNzg5NjEwNjczNTE0MTAzMzY0Ij4iYmF0YXJleWEgc3RhdGlzdGlrYWxhcsSxbsSxIG94dW1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjU4OTczNDY1ODI4ODI5MTUxMTQiPiJUyZl0YmlxyZkgY2FyaSBhxZ9hxJ/EsSBzyZl2aXl5yZlsaSBkYXRhIHNpdGlmYWTJmXNpbmkgb3h1bWFxIGlta2FuxLEgdmVyaXIuIFTJmXRiaXHJmSBoYW5zxLEgdMmZdGJpcWkgaXN0aWZhZMmZIGV0ZGl5aW5peiBoYXFxxLFuZGEgyZl0cmFmbMSxIG3JmWx1bWF0IHRhcG1hxJ9hIGlta2FuIHZlcsmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjM3MTk2ODk3NjQ1MzYzNzk1NTciPiJiYXRhcmV5YSBzdGF0aXN0aWthbGFyxLFuxLEgZMmZeWnFn23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI2ODYyODE3ODU3MTc4MDI1MDAyIj4iVMmZdGJpccmZIHnEscSfxLFsbcSxxZ8gYmF0YXJleWEgc3RhdGlzdGlrYXPEsW7EsSByZWRha3TJmSBldG3JmSBpY2F6yZlzaSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIGVkaWxtaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBcHBPcHNTdGF0cyIgbXNnaWQ9IjE1MDg3Nzk2ODc0MzY1ODU3NDQiPiJ0yZl0YmlxIMmZbcmZbGl5eWF0IHN0YXRpc3Rpa2FsYXLEsW7EsSDJmWxkyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSI2MjQzODg3MDQxNTc3OTEyODc3Ij4iVG9wbGFubcSxxZ8gdMmZdGJpcSDJmW3JmWxpeXlhdCBzdGF0aXN0aWthbGFyxLFuxLFuIGLJmXJwYSBlZGlsbcmZc2luyZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSDDvMOnw7xuIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI4ODI5MDk3MzczODUxNTIxNTA1Ij4idMmZdGJpcSDJmW3JmWxpeXlhdCBzdGF0aXN0aWthc8SxbsSxIGTJmXlpxZ9tyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI1MDc4NDU5NjU5NDQwMzQ4MyI+IlTJmXRiaXHJmSB0b3BsYW5txLHFnyB0yZl0YmlxIMmZbcmZbGl5eWF0IHN0YXRpc3Rpa2FzxLFuxLEgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYWNrdXAiIG1zZ2lkPSI0NzAwMTMwMjI4NjU0NTM5MjAiPiJzaXN0ZW0geWVkyZlrbMmZbcmZc2kgdsmZIGLJmXJwYXPEsW7EsSBpZGFyyZkgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhY2t1cCIgbXNnaWQ9IjY5MTIyMzA1MjUxNDA1ODk4OTEiPiJUyZl0YmlxyZkgc2lzdGVtaSByZXplcnYgZXRtyZl5yZkgdsmZIG1leGFuaXptaSBiyZlycGEgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsbcmZayDDvMOnw7xuIG7JmXrJmXJkyZkgdHV0dWxtYXnEsWIuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjU1NTcwNzEzMjU4MDQ0NjkxMDIiPiJ0YW0gcmV6ZXJ2aSB0yZlzZGlxIGV0bcmZayB2yZkgeWEgyZltyZlsaXl5YXTEsSBiyZlycGEgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjE3NDg3NjIxNzE2Mzc2OTk1NjIiPiJUyZl0YmlxyZkgxLBzdGlmYWTJmcOnaSDEsG50ZXJmZXlzaSB0YW0gcmV6ZXJ2IHTJmXNkaXFpbmkgacWfyZkgc2FsbWHEn2EgaW1rYW4gdmVyaXIuIEhlw6cgYmlyIHTJmXRiaXEgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgb2x1bm1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSIyMTQ4NTYzNjI4MTQwMTkzMjMxIj4iaWNhesmZc2l6IHDJmW5jyZlyyZlsyZlyaSBnw7Zyw7xudMO8bMmZeWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4iVMmZdGJpccmZIGRheGlsaSBzaXN0ZW0gaW50ZXJmZXlzaSB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsbcmZc2kgw7zDp8O8biBuyZl6yZlyZMmZIHR1dHVsbXXFnyBwyZluY8mZcsmZbMmZcmkgeWFyYXRtYcSfYSBpY2F6yZkgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsbWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSIzNTQzMzQ3OTgwODM5NTE4NjEzIj4iZGlnyZlyIHTJmXRiaXFsyZlyIMO8esmZcmluZMmZIMOnyZlrbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iODU4NDY3ODM4MTk3MjgyMDExOCI+IlTJmXRiaXHJmSBkaWfJmXIgdMmZdGJpcWzJmXJpbiB2yZkgeWEgb25sYXLEsW4gaGlzc8mZbMmZcmluaW4geXV4YXLEsXPEsW5kYSDFn8mZa2lsIMOnyZlrbcmZecmZIGlta2FuIHZlcmlyLiBPbmxhciBpc3TJmW5pbMmZbiB0yZl0YmlxaW4gaW50ZXJmZXlzaW5pbiBpc3RpZmFkyZlzaW7JmSBtw7xkYXhpbMmZIGVkyZkgdsmZIHlhIGRpZ8mZciB0yZl0YmlxbMmZcmTJmSBheHRhcmTEsXFsYXLEsW7EsXrEsSBkyZl5acWfyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSIyODA1MTAzMjQxMTUzOTA3MTc0Ij4icWxvYmFsIGFuaW1hc2l5YSBzw7xyyZl0aW5pIGTJmXlpxZ9pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iNzY5MDA2MzQyODkyNDM0MzU3MSI+IlTJmXRiaXHJmSBpc3TJmW5pbMmZbiB2YXh0IHFsb2JhbCBhbmltYXNpeWEgc8O8csmZdGluaSAoc8O8csmZdGxpIHbJmSB5YSB5YXZhxZ8gYW5pbWFzaXlhbGFyKSBkyZl5acWfZGlybcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iMTI4NjUwNTcxNzA1MDEyMTM3MCI+InTJmXRiaXEgbmnFn2FubGFyxLFuxLEgaWRhcsmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiJUyZl0YmlxbMmZcsmZIG9ubGFyxLFuIG5vcm1hbCBaLW9yZGVyaW5xaSBrZcOnyZlyyZlrIG1hcmtlcmzJmXJpbmkgeWFyYXRtYSB2yZkgaWRhcsmZZXRtyZkgaWNhesmZc2kgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBvbHVubXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZnJlZXplU2NyZWVuIiBtc2dpZD0iNDcwODE4MTE4NDQ0MTg4MDE3NSI+ImVrcmFuxLEgZG9uZHVydXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mcmVlemVTY3JlZW4iIG1zZ2lkPSI4NTU4OTIzNzg5MjIyNjcwMDY0Ij4iVMmZdGJpccmZIHRhbSBla3JhbmzEsSB5YXnEsW0gw7zDp8O8biBla3JhbsSxIG3DvHbJmXFxyZl0aSBvbGFyYXEgZG9uZHVybWEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbmplY3RFdmVudHMiIG1zZ2lkPSIxMzc4NzQ2NTg0MDIzNTg2NjAwIj4iZMO8eW3JmWzJmXJpIHbJmSBpZGFyyZlldG3JmSBkw7x5bcmZbMmZcmluaSBiYXPEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNjM1MjU2NTU5OTk2ODYzMiI+IlTJmXRiaXHJmSDDtnrDvG7DvG4gZGF4aWxldG3JmSB0yZlkYmlybMmZcmluaSBkaWfJmXIgdMmZdGJpcWzJmXLJmSDDp2F0ZMSxcm1hxJ9hIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgcGxhbsWfZXRpIMmZbMmZIGtlw6dpcm3JmWsgw7zDp8O8biBidW5kYW4gaXN0aWZhZMmZIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1MzEyODA1NzU3MjMyNjI1MyI+IlTJmXRiaXHJmSDDtnrDvG7DvG4gZGF4aWxldG3JmSB0yZlkYmlybMmZcmluaSBkaWfJmXIgdMmZdGJpcWzJmXLJmSDDp2F0ZMSxcm1hxJ9hIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgdGVsZWZvbnUgyZlsyZkga2XDp2lybcmZayDDvMOnw7xuIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjQ2OTQyODkwMDA0MTI0OTIzNCI+InlhemTEsXFsYXLEsW7EsXrEsSB2yZkgZXRkaWtsyZlyaW5pemkgaXpsyZl5aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjgzODc3NTQ5MDE2ODg3MjgwNDMiPiJUyZl0YmlxyZkgYmFzZMSxxJ/EsW7EsXogZMO8eW3JmWzJmXJpIGl6bMmZbcmZayBpbWthbsSxIHZlcmlsaXIuIEJ1bmEgcGFyb2xsYXLEsW4gdsmZIGtyZWRpdCBrYXJ0xLEgbsO2bXLJmWzJmXJpbmluIHlhesSxbG1hc8SxIGRhIGFpZGRpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMzYwMDY0NjIwMjMwNTE1Nzc2Ij4iZGF4aWxldG3JmSBtZXRvZHVuYSBiYcSfbGFuxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzI1MDQ0MDMyMjgwNzI4NjMzMSI+IlNhaGliaW7JmSBkYXhpbGV0bcmZIG1ldG9kdW51biDJmW4gw7xzdCBzyZl2aXl5yZkgaW50ZXJmZXlzaW7JmSBiYcSfbGFtYXEgaW1rYW7EsSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gaGXDpyB2YXh0IGxhesSxbSBvbG1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNTM1NzczMzk0MjU1NjAzMTU5MyI+ImdpcmnFnyB4aWRtyZl0aW7JmSBiYcSfbMSxIHFhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjcwMzQ2MTU5Mjg2MDkzMzEzNjgiPiJTYWhpYsmZIGdpcmnFnyB4aWRtyZl0aW4gyZluIMO8c3Qgc8mZdml5ecmZIGludGVyZmV5c2kgYmHEn2xhbWHEn2EgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGhlw6cgdmF4dCBsYXrEsW0gb2xtYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI4NDYyODE1MTc5NTcyNzQ4NzYxIj4iw6dhcCBzZXJ2aXNpbmkgcW/Fn21hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFByaW50U2VydmljZSIgbXNnaWQ9Ijc5NjAwNjc2MjMyMDkxMTExMzUiPiJTYWhpYmluyZkgYmlyIMOnYXAgeGlkbcmZdGluaW4gyZluIMO8c3Qgc8mZdml5yZkgYXJhw7x6w7xuw7wgYmHEn2xhbWHEn2EgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGhlw6cgdmF4dCBsYXrEsW0gb2xtYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlIiBtc2dpZD0iNjgwNzc2Mjc4Mzc0NDEyNTk1NCI+IsOnYXAgc3B1bGVyIHNlcnZpc2luyZkgcW/FnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlIiBtc2dpZD0iMzY4MDU1MjI4NTkzMzMxODM3MiI+IlNhaGliaW7JmSDDp2FwIHNwdWxlciB4aWRtyZl0aW5pbiDJmW4gw7xzdCBzyZl2aXl5yZkgaW50ZXJmZXlzaW7JmSBiYcSfbGFtYcSfYSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gaGXDpyB2YXh0IGxhesSxbSBvbG1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSIyNzUyNzMxMzAwNDE5NDEwNzI0Ij4iTkZDIHhpZG3JmXRsyZlyaW7JmSBxb8WfdW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiJTYWhpYmluyZkgTkZDIGthcnRsYXLEsW7EsSBlbXVseWFzaXlhIGVkyZluIHTJmXRiaXFsyZlyaSBiaXItYmlyaW7JmSBxb8WfbWHEn2EgaWNhesmZIHZlcmluLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBsYXrEsW0gZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI3MzU4Mzc4NDAxOTE1Mjg3OTM4Ij4ibcmZdG4gc2VydmlzaW5pIHFvxZ9tYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiJTYWhpYmluyZkgYmlyIG3JmXRuIHhpZG3JmXRpbmluIMmZbiDDvHN0IHPJmXZpeXnJmSBhcmHDvHrDvG7DvCBiYcSfbGFtYcSfYSBpbWthbiB2ZXJpcihtyZlzyZlsyZluLCBTcGVsbENoZWNrZXJTZXJ2aWNlKS4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gaGXDpyB2YXh0IGxhesSxbSBvbG1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSI0NzA4NTk2MDIxMTYxNDczMjU1Ij4iVlBOIHhpZG3JmXTJmSDJmWxhccmZbMmZbmRpcm3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJTYWhpYmluyZkgYmlyIFZwbiB4aWRtyZl0aW5pbiDJmW4gw7xzdCBzyZl2aXl5yZkgYXJhw7x6w7xuw7wgYmHEn2xhbWHEn2EgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGhlw6cgdmF4dCBsYXrEsW0gb2xtYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iZGl2YXIga2HEn8SxesSxbmEgYmHEn2xhbsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iQ2loYXogc2FoaWJpbsmZIHl1eGFyxLEgc8mZdml5ecmZbGkgZGl2YXIga2HEn8SxesSxIGludGVyZmV5c2luaSBjaWxkbMmZbcmZecmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgb2x1bm1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IndpZGdldCBzZXJ2aXNpbmkgcW/Fn21hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IlNhaGliaW7JmSB2aWRjZXQgc2VydmlzaW4gecO8a3PJmWsgc8mZdml5ecmZbGkgaW50ZXJmZXlzaSBpbMmZIMmZbGFxyZkgc2F4bGFtYXEgaWNhesmZc2kgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGhlw6cgdmF4dCBpc3TJmW5pbG3JmW3JmWxpZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImNpaGF6IGFkbWluaSBpbMmZIMO8bnNpeXnJmXQgcXVybWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4iU2FoaWJpbsmZIGJpciBjaWhheiBpZGFyyZnDp2lzaW7JmSBwbGFubGFyIGfDtm5kyZlybcmZayDDvMOnw7xuIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBoZcOnIHZheHQgbGF6xLFtIG9sbWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4iY2loYXogYWRtaW5pIMmZbGF2yZkgZWRpbiB2yZkgeWEgc2lsaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI1MDI1NjA4MTY3NzA5OTQyNDg1Ij4iU2FoaWJpbsmZIGFrdGl2IGNpaGF6IGFkbWluaXN0cmF0b3JsYXLEsW7EsSDJmWxhdsmZIGV0bcmZecmZIHbJmSB5YSBzaWxtyZl5yZkgaWNhesmZIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biB0yZlsyZliIG9sdW5tYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldE9yaWVudGF0aW9uIiBtc2dpZD0iMzM2NTk0NzcxNzE2Mzg2Njg0NCI+ImVrcmFuIG9yaXllbnRhc2l5YXPEsW7EsSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiJUyZl0YmlxyZkgaXN0yZluaWzJmW4gemFtYW4gZWtyYW7EsW4gdsmZeml5ecmZdGluaSBkyZl5acWfbcmZIGljYXrJmXNpIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiB0yZlsyZliIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI5MTc1MzcxNjEzMzIyNTYyOTM0Ij4ia3Vyc29yIHPDvHLJmXRpbmkgZMmZeWnFn23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI2ODY2NTYzMjM0Mjc0MTA0MjMzIj4iVMmZdGJpccmZIG1hdXN1biB2yZkgeWEgdHJla3BlZGluIGt1cnNvciBzw7xyyZl0aW5pIGlzdMmZbmlsyZluIHphbWFuIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBvbHVubWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRLZXlib2FyZExheW91dCIgbXNnaWQ9IjQ3Nzg3MzE3MDM2MDA5MDkzNDAiPiJrbGF2aWF0dXJhIHN4ZW1pbmkgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI4NDgwMDE2NzcxMTM0MTc1ODc5Ij4iVMmZdGJpccmZIGtsYXZpYXR1cmEgc3hlbWluaSBkyZl5acWfbcmZayBpbWthbsSxIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiB0yZlsyZliIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+InTJmXRiaXFsyZlyyZkgTGludXggc2lxbmFsbGFyxLEgZ8O2bmTJmXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0ODk2OTkyMDc5MTgyNjQ5MTQxIj4iVMmZdGJpccmZIGLDvHTDvG4gZGF2YW1sxLEgcHJvc2VzbMmZcsmZIHNpcW5hbCBzb8SfcnVzdSBnw7ZuZMmZcm3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcnNpc3RlbnRBY3Rpdml0eSIgbXNnaWQ9Ijg4NDExMTM2Mjc5NTU1NjM5MzgiPiJ0yZliaXFpIGjJmW1pxZ/JmSDDp2FsxLHFn2TEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg1MjUxODkyNzIzMjkwODYxMzciPiJUyZl0YmlxyZkgw7Z6IGtvbXBvbmVudGzJmXJpbmkgeWFkZGHFn2RhIHNheGxhbWEgaWNhesmZc2kgdmVyaXIuIEJ1IHBsYW7Fn2V0aW4gc8O8csmZdGluaSB6yZlpZmzJmXRtyZlrbMmZLCBkaWfJmXIgdMmZdGJpcWzJmXIgw7zDp8O8biBtw7Z2Y3VkIG9sYW4geWFkZGHFn8SxIGxpbWl0bMmZecmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0Mzg0NzYwMDQ3NTA4Mjc4MjcyIj4iVMmZdGJpccmZIMO2eiBrb21wb25lbnRsyZlyaW5pIHlhZGRhxZ9kYSBzYXhsYW1hIGljYXrJmXNpIHZlcmlyLiBCdSBkaWfJmXIgdMmZdGJpcWzJmXIgw7zDp8O8biBtw7Z2Y3VkIG9sYW4geWFkZGHFn8SxIGxpbWl0bMmZecmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iMTg0Mzg1MTI5NTM3NzA1OTM4Ij4idMmZdGJpcWzJmXJpIHNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iNzQxMTQ4MDI3NTE2NzIwNTA4MSI+IlTJmXRiaXHJmSBBbmRyb2lkIHBha2V0bMmZcmkgc2lsbcmZIGljYXrJmXNpIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGRpZ8mZciB2YWNpYiB0yZl0YmlxbMmZcmkgc2lsbcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSIyNzQxMDkxOTE4NDU4NDI3NTYiPiJkaWfJmXIgdMmZdGJpcWzJmXJpbiBtyZlsdW1hdMSxbsSxIHNpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjQ2MjUzMjM2ODQxMjU0NTk0ODgiPiJUyZl0YmlxyZkgaXN0aWZhZMmZw6dpIGRhdGFzxLFuxLEgdMmZbWl6bMmZbcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjMxMjg2NjU1NzE4Mzc0MDg2NzUiPiJkaWfJmXIgdMmZdGJpcWzJmXJpbiBrZcWfaW5pIHNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzODEyOTk4NTk5MDA2NzMwMTk2Ij4iVMmZdGJpccmZIGtlxZ8gZmF5bGxhcsSxIHNpbG3JmSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iNzQ3MjkyMTc2ODM1Nzk4MTk4NiI+InTJmXRiaXEgc2F4bGFtYSB5YWRkYcWfxLFuxLEgw7Zsw6dtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4iVMmZdGJpccmZIMO2esO8bsO8biBrb2R1bnUsIG3JmWx1bWF0xLFuxLEgdsmZIGtlxZ8gw7Zsw6fDvHPDvG7DvCBhbG1hIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iMjE5OTEyODQ4MjgyMDMwNjkyNCI+ImJpcmJhxZ9hIHTJmXRiaXFsyZlyIHF1cmHFn2TEsXJtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSI1NjI4NTMwOTcyNTQ4MDcxMjg0Ij4iVMmZdGJpccmZIHllbmkgdsmZIHlhIGfDvG5jyZlsbMmZbm1pxZ8gQW5kcm9pZCBwYWtldGzJmXJpbmkgcXVyYcWfZMSxcm1hxJ9hIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZayBnw7xjbMO8IHPJmWxhaGl5ecmZdGzJmXLJmSBtYWxpayB0yZl0YmlxbMmZcmkgZW5kaXLJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcENhY2hlIiBtc2dpZD0iNzQ4NzI3OTM5MTcyMzUyNjgxNSI+ImLDvHTDvG4gdMmZdGJpcSBrZcWfIGRhdGFzxLFuxLEgc2lsaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTc0NjQwODcxOTQ1NDM0NTY1Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aW4geWFkZGHFn8SxbsSxIGJvxZ9hbHRtYXEgw7zDp8O8biBkaWfJmXIgdMmZdGJpcWzJmXJpbiBrZcWfIGZheWxsYXLEsW7EsSBzaWxtyZlrIGlta2FuxLEgdmVyaXIuIEJ1IGRhIGRpZ8mZciB0yZl0YmlxbMmZcmluIGRhdGFsYXLEsSB5ZW5pZMmZbiDJmWxkyZkgZXRtyZlsyZlyaSBzyZliyZliaW5kyZluIGRhaGEgeWF2YcWfIGnFn2zJmW3JmWzJmXJpbsmZIHPJmWLJmWIgb2xhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjQ1OTQ0MTAyMTk1NjQzNjc3OSI+IlTJmXRiaXHJmSBkaWfJmXIgdMmZdGJpcWzJmXJpbiBrZcWfIHFvdmx1xJ91bnUgdMmZbWl6bMmZecmZcsmZayB0ZWxlZm9udW4geWFkZGHFn8SxbsSxIGJvxZ9hbHRtYXEgaWNhesmZc2kgdmVyaXIuIEJ1IGRpZ8mZciB0yZl0YmlxbMmZcmluIG3JmWx1bWF0bGFyxLFuxLEgeWVuaWTJmW4gyZlsZMmZIGV0bcmZbGkgb2xkdXFsYXLEsW5hIGfDtnLJmSBkYWhhIHlhdmHFnyBiYcWfbGFtYXPEsW5hIHPJmWLJmWIgb2x1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdmVQYWNrYWdlIiBtc2dpZD0iMzI4OTg5MDI3MTY0NTkyMTQxMSI+InTJmXRiaXEgcmVzdXJzbGFyxLFuxLFuIHllcmluaSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3ZlUGFja2FnZSIgbXNnaWQ9IjMxOTU2MjIxNzc3ODI0NDUyNCI+IlTJmXRiaXHJmSB0yZl0YmlxIHJlc3Vyc2xhcsSxbsSxIGRheGlsaSBtZWRpYWRhbiB4YXJpY2kgbWVkaWF5YSB2yZkgyZlrc2luyZkgZGHFn8SxbWHEn2EgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTG9ncyIgbXNnaWQ9IjY2MTU3Nzg1NDMxOTg5Njc2MTQiPiJtyZl4ZmkgbG9xIGRhdGFzxLFuxLEgb3h1eXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4iVMmZdGJpccmZIHNpc3RlbWluIG3DvHh0yZlsaWYganVybmFsIGZheWxsYXLEsW7EsSBveHVtYcSfYSBpbWthbiB2ZXJpci4gQnUgZGEgU2l6aW4gcGxhbsWfZXRkyZkgZXRkaWtsyZlyaW5peiBoYXFxxLFuZGEgbcmZbHVtYXRsYXIsIGjJmW3Dp2luaW4gxZ/JmXhzaSB2yZkga29uZmlkZW5zaWFsIG3JmWx1bWF0bGFyIG9sYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMDYzNDM4MTQwMjQxNTYwNDQzIj4iVMmZdGJpccmZIHNpc3RlbWluIG3DvHh0yZlsaWYganVybmFsIGZheWxsYXLEsW7EsSBveHVtYcSfYSBpbWthbiB2ZXJpci4gQnUgZGEgU2l6aW4gcGxhbsWfZXRkyZkgZXRkaWtsyZlyaW5peiBoYXFxxLFuZGEgbcmZbHVtYXRsYXIsIGjJmW3Dp2luaW4gxZ/JmXhzaSB2yZkga29uZmlkZW5zaWFsIG3JmWx1bWF0bGFyIG9sYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4ib3h1dG1hcSDDvMOnw7xuIGlzdMmZbmlsyZluIG1lZGlhIGRla29kZXJpIGlzdGlmYWTJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiJUyZl0YmlxyZkgcGxheWJhY2tcJ2kgZGXFn2lmcsmZIGV0bcmZayDDvMOnw7xuIGjJmXIgaGFuc8SxIGJpciBxdXJhxZ9kxLFyxLFsbcSxxZ8gbWVkaWEgZGXFn2lmcsmZbMmZeWljaXNpbmkgaXN0aWZhZMmZIGV0bcSxayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQ2FDZXJ0aWZpY2F0ZXMiIG1zZ2lkPSIxNjc4MzkxODk2Nzg2ODgyMDE0Ij4iZXRpYmFybMSxIGV0aW1hZG5hbcmZbMmZcmkgaWRhcsmZIGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQ2FDZXJ0aWZpY2F0ZXMiIG1zZ2lkPSI0MDE1NjQ0MDQ3MTk2OTM3MDE0Ij4iVMmZdGJpccmZIGV0aWJhcmzEsSBldGltYWRuYW3JmWzJmXIga2ltaSBDQSBzZXJ0aWZpa2F0bGFyxLFuxLEgcXVyYcWfZMSxcm1hcSB2yZkgc2lzdGVtZMmZbiBzaWxtyZl5yZkgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlhZ25vc3RpYyIgbXNnaWQ9IjgwNzY3NDM5NTM5MDgwMDAzNDIiPiJkaWFnYSBtyZl4c3VzIG9sYW4gbcmZbmLJmWzJmXJpIHlhei9veHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaWFnbm9zdGljIiBtc2dpZD0iNjYwODI5NTY5MjAwMjQ1MjI4MyI+IlTJmXRiaXHJmSBkaWFnIHFydXBhIG3JmXN1cyBvbGFuIHJlc3Vyc2xhcsSxIHlhem1hcSB2yZkgb3h1bWFxIGljYXrJmXNpIHZlcmlyOyBtyZlzyZlsyZluICAvZGV2IHFvdmx1xJ91bmRha8SxIGZheWxsYXIuIEJ1IHNpc3RlbWluIHN0YWJpbGxpeWluyZkgdsmZIHTJmWhsw7xryZlzaXpsaXlpbsmZIHTJmXNpciBlZMmZIGJpbMmZci4gQnUgYW5jYXEgaXN0ZWhzYWzDp8SxIHbJmSB5YSBvcGVyYXRvciB0yZlyyZlmaW5kyZluIGF2YWRhbmzEscSfYSB4YXMgZGlhcW5vc3Rpa2Egw7zDp8O8biBvbG1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBtc2dpZD0iNjMzNTU3Njc3NTcxMTA5NTkzMSI+InTJmXRiaXEga29tcG9uZW50bMmZcmluaSBha3RpdmzJmcWfZGlybcmZIHbJmSB5YSBkZWFrdGl2bMmZxZ9kaXJtyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODg4NzQzNTc0MDk4MjIzNzI5NCI+IlTJmXRiaXHJmSBkaWfJmXIgdMmZdGJpcSBrb21wb25lbnRpbmluIGFrdGl2IG9sdWItb2xtYWTEscSfxLFuxLEgZMmZeWnFn23JmWsgaW1rYW7EsSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiDJmWjJmW1peXnJmXRsaSBwbGFuxZ9ldCBpbWthbmxhcsSxbsSxIGRlYWt0aXYgZXRtyZlrIMO8w6fDvG4gaXN0aWZhZMmZIGVkyZkgYmlsyZlyLiBCdSBpY2F6yZkgaWzJmSBlaHRpeWF0bMSxIG9sbWFxIGxhesSxbWTEsXIsIMOnw7xua2kgdMmZdGJpcSBrb21wb25lbnRsyZlyaSB5YXJhcnPEsXosIHppZGRpeXnJmXRsaSwgdsmZIHlhIHFleXJpLXNhYml0IHN0YXR1c2Egw6dldnJpbMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4MjcyMzI0ODQ0MTY1MDU2MTUiPiJUyZl0YmlxyZkgZGlnyZlyIHTJmXRiaXEga29tcG9uZW50aW5pbiBha3RpdiBvbHViLW9sbWFkxLHEn8SxbsSxIGTJmXlpxZ9tyZlrIGlta2FuxLEgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gyZloyZltaXl5yZl0bGkgdGVsZWZvbiBpbWthbmxhcsSxbsSxIGRlYWt0aXYgZXRtyZlrIMO8w6fDvG4gaXN0aWZhZMmZIGVkyZkgYmlsyZlyLiBCdSBpY2F6yZkgaWzJmSBlaHRpeWF0bMSxIG9sbWFxIGxhesSxbWTEsXIsIMOnw7xua2kgdMmZdGJpcSBrb21wb25lbnRsyZlyaSB5YXJhcnPEsXosIHppZGRpeXnJmXRsaSwgdsmZIHlhIHFleXJpLXNhYml0IHN0YXR1c2Egw6dldnJpbMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dyYW50UmV2b2tlUGVybWlzc2lvbnMiIG1zZ2lkPSI0NjI3MzE1MzUxMDkzNTA4Nzk1Ij4iaWNhesmZbMmZciB2ZXJtyZlrIHbJmSB5YSBsyZnEn3YgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQwODg2NDI2NTQwODU4NTA2NjIiPiJUyZl0YmlxyZkgYnUgdsmZIHlhIGRpZ8mZciB0yZl0YmlxbMmZcsmZIHjDvHN1c2kgaXpubMmZciB2ZXJtyZl5yZkgaWNhesmZIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgIGJ1bmRhbiBpemluIHZlcm3JmWRpeWluaXogw7Z6yZlsbGlrbMmZcmkgw7Z6bMmZcmluyZkgdmVybcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9Ijg0NjMxODE2Mjg2OTUzOTYzOTEiPiJ0yZlyY2loIGVkaWzJmW4gdMmZdGJpcWzJmXIgcXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iNDk3Mzk4Njc2MjI0MTc4MzcxMiI+IlTJmXRiaXHJmSB0yZlyY2loIGV0ZGl5aW5peiB0yZl0YmlxbMmZcmkgZMmZeWnFn23JmWsgaW1rYW7EsSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIMWfyZl4c2kgbcmZbHVtYXRsYXLEsW7EsXrEsSB0b3BsYW1hcSDDvMOnw7xuIGNhcmkgdMmZdGJpcWzJmXJpbml6aSBhbGRhZGFyYXEgacWfbMmZecmZbiB0yZl0YmlxbMmZcmkgeMmZYsmZcnNpeiBkyZl5acWfyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9IjIyMjYxOTUyOTA5NTUyMjQ3MzAiPiJzaXN0ZW0gYXlhcmxhcsSxbmRhIGTJmXlpxZ9pa2xpayBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNldHRpbmdzIiBtc2dpZD0iNzc3NTcyMzQ0MTU1ODkwNzE4MSI+IlTJmXRiaXHJmSBzaXN0ZW0gYXlhcmxhcsSxIGRhdGFzxLFuxLEgcmVkYWt0yZkgZXRtyZkgaWNhesmZc2kgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBzaXN0ZW0gYXlhcmxhcsSxbsSxIGtvcmxheWEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjIwNDY3NjI1MTg3NjcxODI4OCI+InTJmWhsw7xryZlzaXogc2lzdGVtIG5pemFtbGFyxLFuxLEgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjgxNTk1MzU2MTMwMjAxMzczOTEiPiJUyZl0YmlxyZkgc2lzdGVtaW4gdMmZaGzDvGvJmXNpeiBheWFybGFyIGRhdGFzxLFuxLEgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIMO8w6fDvG4gZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiJHb29nbGUgeGlkbcmZdGzJmXIgeMmZcml0yZlzaW5pIGTJmXlpxZ9kaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiJUyZl0YmlxyZkgR29vZ2xlIHhpZG3JmXRsyZlyIHjJmXJpdMmZc2luaSBkyZl5acWfZGlybcmZayBpbWthbsSxIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXJpbiBpc3RpZmFkyZlzaSDDvMOnw7xuIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4iYmHFn2xhbsSfxLFjZGEgacWfbMmZeWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczOTAzMDQ2NjQxMTY4ODA3MDQiPiJUyZl0YmlxyZkgc2lzdGVtIHnDvGtsyZltyZluaSBiaXRpcmRpeWkgemFtYW4gZMmZcmhhbCDDtnrDvG7DvCBiYcWfbGF0bWHEn2EgaW1rYW4gdmVyaXIuIEJ1IHBsYW7Fn2V0aSBiYcWfbGF0bWHEn8SxbiB1enVuIMOnyZlrbcmZc2luyZkgc8mZYsmZYiBvbGEgYmlsyZlyIHbJmSB0yZl0YmlxyZkgaMmZbWnFn8mZIMOnYWzEscWfZMSxcmFyYXEgYsO8dMO8biBwbGFuxZ9ldGkgeWF2YcWfbGF0bWHEn2EgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MTM5NTA1ODkxMDI2MTc1MDQiPiJUyZl0YmlxyZkgc2lzdGVtIGJvb3RpbnFpIGJpdGlyZGlrZMmZbiBkyZlyaGFsIHNvbnJhIMO2esO8bsO8IGJhxZ9sYXRtYXEgaWNhesmZc2kgdmVyaXIuIEJ1IHRlbGVmb251biBhw6fEsWxtYXPEsW7EsSBsyZluZ2lkyZkgdsmZIGRhaW1hIGnFn2zJmWsgcWFsYXJhcSB0ZWxlZm9udW4gc8O8csmZdGluaSBhxZ9hxJ/EsSBzYWxhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFN0aWNreSIgbXNnaWQ9Ijc5MTkxMjYzNzI2MDY4ODE2MTQiPiJkYWltaSBzaXFuYWwgZ8O2bmTJmXJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3NzQ5NzYwNDk0Mzk5OTE1NjUxIj4iVMmZdGJpccmZIHlhecSxbSBiaXRkaWtkyZluIHNvbnJhIGRhIHFhbGFuIMOnyZl0aW4geWF5xLFtbGFyIGfDtm5kyZlybcmZecmZIGlta2FuIHZlcmlyLiBIyZlkc2l6IGlzdGlmYWTJmSDDp294IHlhZGRhxZ8gaXN0aWZhZMmZc2luyZkgc8mZYsmZYiBvbG1hcWxhIHBsYW7Fn2V0aSB5YXZhxZ8gdsmZIHFleXJpLXN0YWJpbCBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4iVMmZdGJpccmZIHlhecSxbSBiaXRkaWtkyZluIHNvbnJhIGRhIHFhbGFuIMOnyZl0aW4geWF5xLFtbGFyIGfDtm5kyZlybcmZecmZIGlta2FuIHZlcmlyLiBIyZlkc2l6IGlzdGlmYWTJmSDDp294IHlhZGRhxZ8gaXN0aWZhZMmZc2luyZkgc8mZYsmZYiBvbG1hcWxhIHRlbGVmb251IHlhdmHFnyB2yZkgcWV5cmktc3RhYmlsIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENvbnRhY3RzIiBtc2dpZD0iODM0ODQ4MTEzMTg5OTg4NjEzMSI+ImtvbnRha3JsYXTEsW7EsXrEsSBveHVtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUyOTQ4NjY4NTY5NDExNDk2MzkiPiJUyZl0YmlxyZkgcGxhbsWfZXRpbml6ZMmZIHllcmzJmcWfyZluIGtvbnRha3RsYXLEsSBveHVtYXEgaWNhesmZc2kgdmVyaXIsIHRlei10ZXogesmZbmcgZWzJmWRpeWluaXosIGVtYWlsbMmZxZ9kaXlpbml6IHbJmSB5YSDJmWxhccmZIHNheGxhZMSxxJ/EsW7EsXogeMO8c3VzaSBpbmRpdmlkdWFsbGFyIGRheGlsIG9sbWFxbGEuIEJ1IGljYXrJmSB0yZl0YmlxbMmZcsmZIGtvbnRha3QgbcmZbHVtYXRsYXLEsW7EsXrEsSBzYXhsYW1hxJ9hIHbJmSB6yZlyyZlybGkgdMmZdGJpcWzJmXLJmSBrb250YWt0IG3JmWx1bWF0bGFyxLFuxLEgc2l6aW4gYmlsZ2luaXogb2xtYWRhIHBheWxhxZ9tYSBpbWthbsSxIHlhcmFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0NDA2NTQxNTI0NTczMDA2NjIiPiJUyZl0YmlxyZnCoHRlei10ZXogesmZbmcgZWzJmWRpeWluaXosIGUtbcmZa3R1YiBnw7ZuZMmZcmRpeWluaXogdsmZIHlhIMmZbGFxyZkgc2F4bGFkxLHEn8SxbsSxeiB4w7xzdXNpIGluZGl2aWR1YWxsYXIgZGF4aWwgb2xtYXFsYSB0ZWxlZm9udW51emRhIHllcmzJmcWfyZluIGtvbnRha3RsYXLEsSBveHVtYXEgaWNhesmZc2kgdmVyaXIuIEJ1IGljYXrJmSB0yZl0YmlxbMmZcsmZIGtvbnRha3QgbcmZbHVtYXRsYXLEsW7EsXrEsSBzYXhsYW1hxJ9hIHbJmSB6yZlyyZlybGkgdMmZdGJpcWzJmXLJmSBrb250YWt0IG3JmWx1bWF0bGFyxLFuxLEgc2l6aW4geMmZYsmZcmluaXogb2xtYWRhIHBheWxhxZ9tYSBpbWthbsSxIHlhcmFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDb250YWN0cyIgbXNnaWQ9IjUxMDc0OTIwODY0MTY3OTM1NDQiPiJrb250YWt0bGFyxLFuxLF6xLEgZMmZeWnFn2RpcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDb250YWN0cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODk3MjQzOTMyNTIxOTUzNjAyIj4iVMmZdGJpccmZIHBsYW7Fn2V0aW5pemTJmWtpIHrJmW5nIGV0bcmZayB0ZXpsaXlpbml6LCBlbGVrdHJvbiBwb8OndGxhcsSxbsSxeiwgw7xuc2l5ecmZdGzJmXJpbml6IGhhcXHEsW5kYSBtyZlsdW1hdGxhcsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIEJ1IGljYXrJmSBrb250YWt0IG3JmWx1bWF0bGFyxLFuxLFuIHNpbGlubcmZc2luyZkgZMmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1ODk4NjkyMjQ2MjUxNjM1NTgiPiJUyZl0YmlxyZkgU2l6aW4gesmZbmcgZXRtyZlrIHRlemxpeWluaXosIGVsZWt0cm9uIHBvw6d0bGFyxLFuxLF6LCDDvG5zaXl5yZl0bMmZcmluaXogaGFxccSxbmRhIG3JmWx1bWF0bGFyxLEgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4gQnVuYSBrb250YWt0bGFyxLFuIHNpbGlubcmZc2kgaW1rYW7EsSBkyZkgZGF4aWxkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsbExvZyIgbXNnaWQ9IjM0NzgxMzMxODQ2MjQxMDI3MzkiPiJ6yZluZyBxZXlkaXl5YXTEsW7EsSBveHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzcwMDY0NTE4NDg3MDc2MDI4NSI+IlTJmXRiaXHJmSBnyZlsyZluIHbJmSBnZWTJmW4gesmZbmdsyZlyIGhhcXHEsW5kYSBvbGFuIGRhdGEgZGF4aWwgb2xtYXFsYSBiyZlyYWLJmXIgcGxhbsWfZXRpbml6aW4gesmZbmcgcWV5ZGl5eWF0xLFuxLEgb3h1bWHEn2EgaW1rYW4gdmVyaXIuIEJ1IGljYXrJmSB0yZl0YmlxbMmZcsmZIHrJmW5nIHFleWRpeXlhdMSxbsSxesSxIHNheGxhbWHEn2EgaW1rYW4gdmVyaXIgdsmZIHrJmXLJmXJsaSB0yZl0YmlxbMmZciB6yZluZyBxZXlkaXl5YXQgZGF0YXPEsW7EsSBzaXpkyZluIHjJmWLJmXJzaXogcGF5bGHFn2EgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3NzcyNTc5NjgxMzIxNzI0NCI+IlTJmXRiaXHJmSB0ZWxlZm9uIGp1cm5hbMSxbsSxesSxIG94dW1hxJ9hIGlta2FuIHZlcmlyLCBidW5hIGfJmWzJmW4gdsmZIGdlZMmZbiB6yZluZ2zJmXIgaGFxccSxbmRhIG3JmWx1bWF0bGFyIGRhIGRheGlsZGlyLiBCdSBpY2F6yZkgdMmZdGJpccmZIHrJmW5nIGp1cm5hbMSxIGRhdGFzxLFuxLEgc2F4bGFtYcSfYSBpbWthbiB2ZXJpciBraSwgWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgU2l6ZMmZbiB4yZliyZlyc2l6IGLDvHTDvG4gbcmZbHVtYXRsYXJuxLF6xLEgcGF5bGHFn2EgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDYWxsTG9nIiBtc2dpZD0iODU1MjA0NTY2NDc0MzQ5OTM1NCI+InrJmW5nIGxvcXUgeWF6xLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NjYxODA2MDYyMjc0MTE5MjQ1Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aW5pemTJmWtpIHrJmW5nIGp1cm5hbMSxbsSxLCBoyZltw6dpbmluIGdlZMmZbiB2yZkgZ8mZbMmZbiB6yZluZ2zJmXJpbiBzaXlhaMSxc8SxbsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrLCB6yZluZyBqdXJuYWzEsW7EsXphIGTJmXlpxZ9pa2xpayBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODM5NDE3MzYzNTI3ODc4NDIiPiJUyZl0YmlxyZkgc2l6aW4gZGF4aWwgb2xhbiB2yZkgZ2VkyZluIHrJmW5nbMmZciBkYXhpbCBvbG1hcWxhIHRlbGVmb24gesmZbmdpIGxvcWxhcsSxbsSxesSxIHJlZGFrdMmZIGV0bcmZayBpY2F6yZlzaSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiB0ZWxlZm9uIGxvcWxhcsSxbsSxesSxIHNpbG3JmWsgdsmZIHlhIHJlZGFrdMmZIGV0bcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQcm9maWxlIiBtc2dpZD0iNDcwMTg4OTg1MjYxMjcxNjY3OCI+IsO2eiBrb250YWt0IGthcnTEsW7EsXrEsSBveHV5dW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NjI0NzUxNTE4NDk4ODg4NDgiPiJUyZl0YmlxyZkgY2loYXrEsW7EsXpkYSB5ZXJsyZnFn8mZbiBhZMSxbsSxeiB2yZkga29udGFrdCBtyZlsdW1hdGxhcsSxbsSxeiBraW1pIMWfyZl4c2kgcHJvZmlsIG3JmWx1bWF0bGFyxLFuxLEgb3h1bWEgaWNhesmZc2kgdmVyaXIuIEJ1IG8gZGVtyZlrZGlyIGtpLCB0yZl0YmlxIHNpemkgdGFuxLF5YSB2yZkgc2l6aW4gcHJvZmlsIG3JmWx1bWF0bGFyxLFuxLF6xLEgYmHFn3FhbGFyxLFuYSBnw7ZuZMmZcsmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlUHJvZmlsZSIgbXNnaWQ9IjkwNzc5MzYyODc3NzM5NzY0MyI+InNpemluIGtvbnRha3Qga2FydMSxbsSxemRhIGTJmXlpxZ9pa2xpayBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NTUyMDg0Mjk0NTk4NDY1ODk5Ij4iVMmZdGJpccmZIGNpaGF6xLFuxLF6ZGEgeWVybMmZxZ/JmW4gYWTEsW7EsXogdsmZIGtvbnRha3QgbcmZbHVtYXRsYXLEsW7EsXoga2ltaSDFn8mZeHNpIHByb2ZpbCBtyZlsdW1hdGxhcsSxbsSxIGTJmXlpxZ9tyZlrIHbJmSB5YSDJmWxhdsmZIGV0bcmZayBpY2F6yZlzaSB2ZXJpci4gQnUgbyBkZW3JmWtkaXIga2ksIHTJmXRiaXEgc2l6aSB0YW7EsXlhIHbJmSBzaXppbiBwcm9maWwgbcmZbHVtYXRsYXLEsW7EsXrEsSBiYcWfcWFsYXLEsW5hIGfDtm5kyZlyyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEyNjg5MjA5NTYxNTI0MTkxNzAiPiJzb3NpYWwgbGVudGluaXppIG94dXl1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4iVMmZdGJpccmZIFNpemluIHbJmSBkb3N0bGFyxLFuxLF6xLFuIHNvc2lhbCBnw7xuY8mZbGzJmXJpbmkgyZlsZMmZIGV0bcmZayB2yZkgc2lueHJvbml6yZkgZXRtyZlrIGljYXrJmXNpIHZlcmlyLiBNyZlsdW1hdCBwYXlsYcWfYXJryZluIGRpcXHJmXRsaSBvbHVuIC0ga29uZmlkZW5zaWFsbMSxcWRhbiBhc8SxbMSxIG9sbWF5YXJhcSBidSwgU2l6IHbJmSBkb3N0bGFyxLFuxLF6IGFyYXPEsW5kYSBzb3NpYWwgxZ/JmWLJmWvJmWzJmXJkyZlraSBkYW7EscWfxLHEn8SxIG94dW1hcSBpbWthbsSxIHZlcmlyLiBRZXlkOiBidSBpY2F6yZkgYsO8dMO8biBzb3NpYWwgxZ/JmWLJmWvJmWzJmXJkyZkgaWNyYSBlZGlsyZkgYmlsbcmZei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzUwNDE3OTIyMjQ5MzIzNTY0NSI+InNvc2lhbCBheMSxbsSxbsSxemEgeWF6xLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDg2NTU3NTUyMjA0MTE0ODQ5Ij4iVMmZdGJpccmZIGRvc3RsYXLEsW7EsXpkYW4gc29zaWFsIHllbmlsyZlubcmZbMmZcmkgZ8O2c3TJmXJtyZkgaWNhesmZc2kgdmVyaXIuIE3JmWx1bWF0IHBheWxhxZ9hcmvJmW4gZGlxccmZdGxpIG9sdW4gLSBidSBkb3N0bGFyxLFuxLF6ZGFuIGfJmWzJmW4gbWVzYWrEsSBlbWFsIGV0bcmZecmZIGl6biB2ZXJpci4gUWV5ZDogYnUgaWNhesmZIGLDvHTDvG4gc29zaWFsIMWfyZliyZlryZlsyZlyyZkgxZ9hbWlsIG9sdW5tYXlhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxlbmRhciIgbXNnaWQ9IjU5NzI3Mjc1NjAyNTc2MTIzOTgiPiJ0yZlxdmltIHTJmWRiaXJsyZlyaW5pIHbJmSBrb25maWRlbnNpYWwgbcmZbHVtYXRsYXLEsSBveHV5dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQyMTY0NjIwNDkwNTc2NTg3MjMiPiJUyZl0YmlxyZkgZG9zdGxhcsSxbsSxesSxbiB2yZkgyZltyZlrZGHFn2xhcsSxbsSxesSxbiBwbGFuxZ9ldGluaXpkyZkgeWVybMmZxZ/JmW4ga2FsZW5kYXIgdMmZZGJpcmzJmXJpbmkgb3h1bWHEn2EgaWNhesmZIHZlcmlyLiBCdSB0yZl0YmlxyZkga29uZmlkZW5zaWFsbMSxcSB2yZkgeWEgaMmZc3Nhc2zEsXFkYW4gYXPEsWzEsSBvbG1heWFyYXEgc2l6aW4ga2FsZW5kYXIgbcmZbHVtYXRsYXLEsW7EsXrEsSBwYXlsYcWfbWFxIHbJmSB5YSBzYXhsYW1hxJ9hIGlta2FuIHlhcmFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc0MzQ1NDg2ODI0NzA4NTE1ODMiPiJUyZl0YmlxyZkgZG9zdCB2yZkgyZltyZlrZGHFn2xhcmEgbcmZeHN1cyBvbGFubGFyIGRheGlsIG9sbWFxbGEgcGxhbsWfZXRkyZkgeWVybMmZxZ/JmW4gYsO8dMO8biBrYWxlbmRhciB0yZl0YmlxbMmZcmluaSBveHVtYXEgaWNhesmZc2kgdmVyaXIuIEJ1IHTJmXRiaXHJmSBrb25maWRlbnNpYWxsxLFxIHbJmSB5YSBoyZlzc2FzbMSxcWRhbiBhc8SxbMSxIG9sbWF5YXJhcSwgU2l6aW4ga2FsZW5kYXIgbcmZbHVtYXRsYXLEsW7EsXrEsSBwYXlsYcWfbWFxIHbJmSB5YSBzYXhsYW1hcSBpbWthbsSxIHlhcmFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDYWxlbmRhciIgbXNnaWQ9Ijg0Mzg4NzQ3NTUxOTM4MjU2NDciPiJjaWhheiBzYWhpYmluaW4gaWNhesmZc2kgb2xtYWRhbiB0yZlxdmltIHTJmWRiaXJsyZlyaSDJmWxhdsmZIGV0bcmZayB2yZkgeWEgZMmZeWnFn23JmWssIGJ1bnVuIGhhcXHEsW5kYSBiaWxkaXJpxZ9syZlyIGfDtm5kyZlybcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NzkwMzU1MjAxMTM2Njg1MjgiPiJUyZl0YmlxyZkgcGxhbsWfZXRpbml6ZMmZa2kgdMmZZGJpcmzJmXJpIGTJmXlpxZ9tyZl5yZksIHTJmWRiaXIgyZlsYXbJmSBldG3JmXnJmSB2yZkgeWEgc2lsbcmZecmZIGlta2FuIHZlcmlyLiBCdW5hIFNpemluIGRvc3RsYXLEsW7EsXpsYSB2yZkgaMmZbWthcmxhcsSxbsSxemxhIGJpcmxpa2TJmSBoYXrEsXJsYWTEscSfxLFuxLF6IHTJmWRiaXJsyZlyIGTJmSBkYXhpbGRpci4gQnUsIHTJmWRiaXLJmSBTaXppbiBhZMSxbsSxemRhbiB2yZkgU2l6ZMmZbiB4yZliyZlyc2l6LCB0yZlxdmltIHNhaGliaSBraW1pIG1lc2FqIGfDtm5kyZlybcmZayBpbWthbsSxbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMzI0NDY5NDk2MzI3MjQ5Mzc2Ij4iRG9zdGxhcsSxbsSxeiB2yZkgaMmZbWthcmxhcsSxbsSxemEgbcmZeHN1cyBvbGFubGFyIGRhIGRheGlsIG9sbWFxbGEsIHTJmXRiaXHJmSB0ZWxlZm9udW51emRha8SxIHTJmWRiaXJsyZlyaSBkyZl5acWfbcmZecmZLCB0yZlkYmlyIMmZbGF2yZkgZXRtyZl5yZkgdsmZIHlhIHNpbG3JmXnJmSBpbWthbiB2ZXJpci4gQnUsIHTJmWRiaXLJmSBTaXppbiBhZMSxbsSxemRhbiB2yZkgU2l6ZMmZbiB4yZliyZlyc2l6LCB0yZlxdmltIHNhaGliaSBraW1pIG1lc2FqIGfDtm5kyZlybcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iODY4ODMzNDk3NDAzNjgyMzMzMCI+InRlc3Qgw7zDp8O8biBzYXh0YSBtyZlrYW4gbcmZbmLJmWzJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IlRlc3Qgw7zDp8O8biBzYXh0YSBtyZlrYW4gbcmZbmLJmWzJmXJpIHlhcmFkxLFuIHbJmSB5YSB5ZW5pIG3JmWthbiBwcm92YXlkZXJpIHF1cmHFn2TEsXLEsW4uIEJ1IHTJmXRiaXFsyZlyyZkgR1BTIHbJmSBtyZlrYW4gcHJvdmF5ZGVybMmZcmkga2ltaSBtyZlrYW4gbcmZbmLJmWzJmXJpbmTJmW4gYWzEsW5hbiBtyZlrYW4gdsmZL3lhIHN0YXR1c2xhcsSxIHllbmlkyZluIHlhem1hxJ9hIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjI4MzYzMDgwNzY3MjA1NTM4MzciPiLJmWxhdsmZIG3JmWthbiBwcm92YXlkZXJpIMmZbXJsyZlyaW7JmSDDp8SxeMSxxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSI1OTQ1MTY2NjQyMzM1ODAwNzYzIj4iVMmZdGJpccmZIMmZbGF2yZkgbcmZa2FuIHByb3ZheWRlcmkgyZltcmzJmXJpbsmZIGRheGlsIG9sbWFxIGlta2FuxLEgdmVyaXIuIEJ1IHTJmXRiaXHJmSBHUFMgyZltyZlsaXl5YXTEsW5hIHbJmSB5YSBkaWfJmXIgbcmZa2FuIG3JmW5iyZlsyZlyaW7JmSBtYW5lIG9sbWFxIGlta2FuxLEgdmVyyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI2NTc4MTAxMTk5ODI1MTkzODczIj4iTcmZa2FuIHByb3ZheWRlcmluaSBxdXJhxZ9kxLFybWFxIGljYXrJmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI5MDY2MTQ2MTIwNDcwNTkxNTA5Ij4iWWVuaSB5ZXJsyZnFn23JmSB0yZljaGl6YXTDp8Sxc8SxbsSxIHRlc3QgZXRtyZlrIHbJmSB5YSBxdXJhxZ9kxLFybWFxIMO8w6fDvG4gbW9jayB5ZXJsyZnFn23JmSBtyZluYsmZbMmZcmkgeWFyYXQuIEJ1IHTJmXRiaXHJmSB5ZXJsyZnFn23JmW5pbiB2yZkveWEgZGlnyZlyIHllcmzJmcWfbcmZIG3JmW5iyZlsyZlyaW5kyZluIEdQUyB2yZkgeWEgeWVybMmZxZ9tyZkgdMmZY2hpemF0w6fEsWxhcsSxIHFhecSxdG3EscWfIHN0YXR1c2xhcsSxbiBsyZnEn3YgZXRtyZlzaW7JmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiJkyZlxaXEgeWVyaSAoR1BTIHbJmSDFn8mZYsmZa8mZLcmZc2FzbMSxKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjUyOTUwNDc1NjM1NjQ5ODEyNTAiPiJRbG9iYWwgUG96aXNpeWEgU2lzdGVtaW5pIHbJmSB5YSDFn8mZYsmZa8mZIHHDvGxsyZlsyZlyaSB2yZkgV2ktRmkga2ltaSDFn8mZYsmZa8mZIG3JmWthbsSxbsSxIGlzdGlmYWTJmSBlZMmZcsmZayB0yZl0YmlxyZkgU2l6aW4gZMmZcWlxIHllcmluaXppIHTJmXlpbiBldG3JmXnJmSBpbWthbiB2ZXJpci4gQnUgbcmZa2FuIHhpZG3JmXRsyZlyaSBha3RpdmzJmcWfZGlyaWxtyZlsaWRpcmzJmXIga2ksIFNpeiB0yZl0YmlxaSBpc3RpZmFkyZkgZWTJmW4gemFtYW4gdMmZdGJpcSBvbmxhcsSxIGlzdGlmYWTJmSBlZMmZIGJpbHNpbi4gVMmZdGJpcWzJmXIgU2l6aW4gaGFyYWRhIG9sbWHEn8SxbsSxesSxIGJ1bnVuIHZhc2l0yZlzaWzJmSB0yZl5aW4gZWTJmWPJmWssIGV5bmkgemFtYW5kYSwgYnUgeGlkbcmZdCDJmWxhdsmZIGJhdGFyZXlhIGVuZXJqaXNpIGFwYXJhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iNDg4Nzg5NTM2MjM1NDIzOTYyOCI+InTJmXhtaW5pIG3JmWthbiAoxZ/JmWLJmWvJmSDJmXNhc2zEsSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjI1MzgyMDAxODQzNzMzMDIyOTUiPiJUyZl0YmlxyZkgdMmZeG1pbmkgeWVyaW5pemkgYWxtYXEgw7zDp8O8biBpbWthbiB2ZXJpci4gQnUgeWVyLCB5ZXJsyZnFn23JmSB4aWRtyZl0bMmZcmkgdMmZcsmZZmluZMmZbiBtb2JpbCBxw7xsbMmZbMmZciB2yZkgV2ktRmkga2ltaSDFn8mZYsmZa8mZIHllcmzJmcWfbcmZIG3JmW5iyZlsyZlyZMmZbiBpc3RpZmFkyZkgZXRtyZlrbMmZIMmZbGTJmSBlZGlsaXIuIEJ1IHllcmzJmcWfbcmZIHhpZG3JmXRsyZlyaSB0yZl0YmlxaW4gb25sYXJkYW4gaXN0aWZhZMmZc2kgw7zDp8O8biBhw6fEsXEgdsmZIGNpaGF6xLFuxLF6xLFuIG9ubGFyxLEgaXN0aWZhZMmZc2kgw7zDp8O8biBtw7Z2Y3VkIG9sbWFsxLFkxLFyLiBUyZl0YmlxbMmZciBidW5kYW4gc2l6aW4gdMmZeG1pbsmZbiBoYXJhZGEgb2xkdcSfdW51enUgbcO8yZl5ecmZbmzJmcWfZGlybcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMjM2Mzk2OTY0MTc5MjM4ODk0NyI+IlN1cmZhY2VGbGluZ2VyXCfJmSBkYXhpbCBvbG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlTJmXRiaXHJmSBhxZ9hxJ/EsSBzyZl2aXl5yZlsaSBTdXJmYWNlRm5nZXIgw7Z6yZlsbGlrbMmZcmluaSBpc3RpZmFkyZkgZXRtyZl5yZkgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImZyZXltIGJ1ZmVyaSBveHV5dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iVMmZdGJpccmZIGZyZXltIGJ1ZmVyaW5pbiBrb250ZW50aW5pIG94dW1hcSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJJbnB1dEZsaW5nZXIga2XDp2lkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJUyZl0YmlxyZkgYcWfYcSfxLEgc8mZdml5ecmZbGkgSW5wdXRGbGluZ2VyIGZ1bmtzaXlhbGFyxLFuxLEgaXN0aWZhZMmZIGV0bcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IldpZmkgZ8O2csO8bnTDvGzJmXJpbmkgcXVyYcWfZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IlTJmXRiaXHJmSBXaWZpIGfDtnLDvG50w7xsyZlyaW5pIHF1cmHFn2TEsXJtYcSfYSB2yZkgb25sYXJhIHFvxZ91bG1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iV2lGaSBnw7Zyw7xudMO8bMmZcmluaSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSI0NTQzOTEyMjkyNjgxODI2OTg2Ij4iVMmZdGJpccmZIFdpZmkgZGlzcGxleWzJmXJpbmluIGHFn2HEn8SxIHPJmXZpeXnJmWxpIGZ1bmtzaXlhbGFyxLFuxLEgaWRhcsmZIGV0bcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjg1NzEzNDQ5ODQwMjM0NjcwOCI+ImF1ZGlvIMOnxLF4xLHFn8SxIGFsxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjIxMDU5Nzc1NDIxMjIwODg1MyI+IlTJmXRiaXHJmSBhdWRpbyDDp8SxeMSxxZ/EsSBhbG1hcSB2yZkgeWVuaWTJmW4gecO2bmzJmW5kaXJtyZlrIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIyMjQ2ODI4NzczNTg5MDk0MDIzIj4idmlkZW8gw6fEsXjEscWfxLEgYWzEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIzNTk0ODE2NTgwMzQxNDk4NjAiPiJUyZl0YmlxyZkgdmlkZW8gw6fEsXjEscWfxLEgYWxtYXEgdsmZIHllbmlkyZluIHnDtm5syZluZGlybcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iNzgxNTM5ODk2OTMwMzM4MjAxNiI+InTJmWhsw7xryZlzaXogdmlkZW8gw6fEsXjEscWfxLEgYWzEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlU2VjdXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIyNzc5NzkzMDY0NzA5MzUwMjg5Ij4iVMmZdGJpccmZIGfDvHbJmW5saSB2aWRlbyDDp8SxeMSxxZ/EsSBhbG1hcSB2yZkgeWVuaWTJmW4gecO2bmzJmW5kaXJtyZlrIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iNjA5NTg1OTkzNzA2OTE0NjA4NiI+ImF1ZGlvIGF5YXJsYXLEsW7EsXrEsSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IlTJmXRiaXHJmSBzyZlzIHbJmSBoYW5zxLEgc3Bpa2VyaW4gw6fEsXjEscWfIMO8w6fDvG4gaXN0aWZhZMmZIG9sdW5kdcSfdSBraW1pIHFsb2JhbCBzyZlzIGF5YXJsYXLEsW7EsSBkyZl5acWfZGlybcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4ic8mZcyB5YXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiJUyZl0YmlxyZkgbWlrcm9mb25sYSBhdWRpbyB5YXptYXEgaWNhesmZc2kgdmVyaXIuIMSwY2F6yZkgdMmZdGJpccmZIHNpemluIHTJmXNkaXFpbml6IG9sbWFkYW4gaXN0yZluaWzJmW4gemFtYW4gc8mZcyB5YXptYSBpem5pIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+IsWfyZlraWwgdsmZIHZpZGVvIMOnyZlrbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJUyZl0YmlxyZkga2FtZXJhIGlsyZkgxZ/JmWtpbCB2yZkgdmlkZW8gw6fJmWttyZl5yZkgaW1rYW4geWFyYWTEsXIuIEJ1IGljYXrJmSB0yZl0YmlxyZkgc2l6aW4gdMmZc2RpcWluaXogb2xtYWRhbiBrYW1lcmFkYW4gaXN0aWZhZMmZIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ImthbWVyYSBpc3RpZmFkyZkgZWRpbGRpa2TJmSBMRUQgZ8O2c3TJmXJpY2kgw7Z0w7xyw7xsbcmZc2luaSBkZWFrdGl2IGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4iw5ZuY8mZZMmZbiBxdXJhxZ9kxLFyxLFsbcSxxZ8gc2lzdGVtIHTJmXRiaXFpbsmZIGthbWVyYSB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsyZluIExFRCBpbmRpa2F0b3J1bnUgc8O2bmTDvHJtyZlrIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI5NjEyOTIyMDU3NjQ0ODgzMDQiPiJwbGFuxZ9ldGkgZGFpbWkgb2xhcmFxIGFyYWRhbiBxYWxkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgzMzc4MTcwOTMzMjYzNzA1MzciPiJ0ZWxlZm9udSBoyZltacWfyZlsaWsgZGVha3RpdiBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMzNDgxODgwODAwMTY5OTUzMCI+IlTJmXRiaXHJmSBwbGFuxZ9ldGkgYmlyZMmZZsmZbGlrIGRlYWt0aXYgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIEJ1IGRhIMOnb3ggdMmZaGzDvGvJmWxpZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc4ODkwMzI5NzYyNzI4MzA5OSI+IlTJmXRiaXHJmSBiw7x0w7xuIHRlbGVmb251IGJpcmTJmWbJmWxpayBkZWFrdGl2bMmZxZ9kaXJtyZl5yZkgaW1rYW4gdmVyaXIuIEJ1IMOnb3ggdMmZaGzDvGvJmWxpZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDM2NjM0OTcyNTYxNzk1MDAyIj4icGxhbsWfZXRpIHllbmlkyZluIHnDvGtsyZlubcmZecmZIG3JmWNidXIgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg5ODU2MDg3MjQ2MjYzODI0MiI+InRlbGVmb251IHllbmlkyZluIHnDvGtsyZlubcmZecmZIG3JmWNidXIgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODE3MjA1NjE4MDA2MzcwMDc0MSI+IlTJmXRiaXHJmSBwbGFuxZ9ldGkgeWVuaWTJmW4gecO8a2zJmW3JmXnJmSBtyZljYnVyIGV0bcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiJUyZl0YmlxyZkgdGVsZWZvbnUgeWVuaWTJmW4gecO8a2zJmW3JmXnJmSBtyZljYnVyIGV0bcmZayDDvMOnw7xuIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyOTI3MzYxNTM3OTQyNTkxODQxIj4iVVNCIHlhZGRhxZ8gZmF5bCBzaXN0ZW1pbsmZIGRheGlsIG9sbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQwMjMwNTA0OTg5MDk1MzgxMCI+IlNEIEthcnQgZmF5bCBzaXN0ZW1pbsmZIGRheGlsIG9sbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgbXNnaWQ9IjE4MjkyOTA3MDE2NTg5OTIzNDciPiJUyZl0YmlxyZkgc2lsaW7JmWJpbMmZbiB5YWRkYcWfbGFyxLEgdsmZIHlhIGZheWwgc2lzdGVtaW5pIHF1cmHFn2TEsXJtYSB2yZkgYXnEsXJtYSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4iVVNCIHlhZGRhxZ/EsSBzaWxpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYyNTgyNjk4NjM5Mjc0MDU2Ij4iU0Qga2FydMSxIHNpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iODc4NDI2ODI0Njc3OTE5ODYyNyI+IlTJmXRiaXHJmSDDp8SxeGFyxLFsYSBiaWzJmW4geWFkZGHFn8SxIGZvcm1hdCBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzQxMTMzODYzMjAwMjE5Mzg0NiI+ImRheGlsaSB5YWRkYcWfxLFuxLF6IGhhcXHEsW5kYSBtyZlsdW1hdCDJmWxkyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzMDk0NTYzODQ0NTkzODc4NTQ4Ij4iVMmZdGJpccmZIGRheGlsaSB5YWRkYcWfIGhhcXHEsW5kYSBtyZlsdW1hdCBhbG1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19jcmVhdGUiIG1zZ2lkPSI2NDE0NzU3MjM0Nzg5MzM2MzI3Ij4iZGF4aWxpIHlhZGRhxZ8geWFyYXRtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2NyZWF0ZSIgbXNnaWQ9IjQ1NTg4NjkyNzM1ODU4NTY4NzYiPiJUyZl0YmlxyZkgZGF4aWxpIHlhZGRhxZ8geWFyYXRtYXEgw7zDp8O8biBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjUyNjkyODMyODMwMTYxODAyMiI+ImRheGlsaSB5YWRkYcWfxLEgbcmZaHYgZXRtyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI3MjE4NzQ5Mjg2MTQ1NTI2NTM3Ij4iVMmZdGJpccmZIGRheGlsaSB5YWRkYcWfxLEgbcmZaHYgZXRtyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSI4ODc3OTk4MTAxOTQ0OTk5Mzg2Ij4iZGF4aWxpIHlhZGRhxZ/EsSBtb250YWogdsmZIHlhIGRlbW9udGFqIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9IjM0NTEzNjAxMTQ5MDI0OTA5MjkiPiJUyZl0YmlxyZkgZGF4aWxpIHlhZGRhxZ/EsSBxdXJhxZ9kxLFybWEvYXnEsXJtYSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfcmVuYW1lIiBtc2dpZD0iNzQ5NjYzMzk1NDA4MDQ3MjQxNyI+ImRheGlsaSB5YWRkYcWfxLFuIGFkxLFuxLEgZMmZeWnFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfcmVuYW1lIiBtc2dpZD0iMTc5NDc1NzU4ODQ3MjEyNzY3NSI+IlTJmXRiaXHJmSBkYXhpbGkgeWFkZGHFn8SxbiBhZMSxbsSxIGTJmXlpxZ9tyZlrIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+InZpYnJhc2l5YXlhIG7JmXphcsmZdCBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJUyZl0YmlxyZkgdmlicmF0b3J1IGlkYXLJmSBldG3JmSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4iRmxhc2ggacWfxLHEn8SxbsSxIGlkYXLJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJUyZl0YmlxyZkgc2lxbmFsIGnFn8SxxJ/EsSBuYSBuyZl6YXLJmXQgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4iVVNCIGNpaGF6bGFyIMO8w6fDvG4gdMmZcmNpaGzJmXJpIHbJmSBpY2F6yZlsyZlyaSBpZGFyyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNiIiBtc2dpZD0iNzc3NjE1NTQzMDIxODIzOTgzMyI+IlTJmXRiaXHJmSBVU0IgY2loYXpsYXIgw7zDp8O8biBvbGFuIHTJmXJjaWhsyZlyaSB2yZkgaWNhesmZbMmZcmkgaWRhcsmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTXRwIiBtc2dpZD0iNDk1MzQ2ODY3Njc5NTkxNzA0MiI+Ik1UUCBwcm90b2tvbCBoyZl5YXRhIGtlw6dpcm3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNdHAiIG1zZ2lkPSI2NTMyOTYxMjAwNDg2NzkxNTcwIj4iS2VybmVsIE1UUCBkcmF5dmVyyZkgZ2lyacWfyZkgaW1rYW4gdmVyaXIga2ksIE1UUCBVU0IgcHJvdG9rb2x1bnUgaMmZeWF0YSBrZcOnaXJzaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNDE0ODI5MDg2MDQwMDY1OTE0NiI+ImF2YWRhbmzEscSfxLEgc8SxbmFxIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNjU5Nzk2NDE5MTIwODAxNjYwNSI+IlTJmXRiaXHJmSBhdmFkYW5sxLHEn8SxIHlveGxhbWFxIMO8w6fDvG4gbcO8eHTJmWxpZiBwZXJpZmVyaXlhbGFyxLEga29udHJvbCBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJ0ZWxlZm9uIG7Dtm1yyZlsyZlyaW7JmSBiaXJiYcWfYSB6yZluZyBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlTJmXRiaXHJmSBTaXppbiBtw7xkYXhpbMmZbml6IG9sbWFkYW4gdGVsZWZvbiB6yZluZ2zJmXJpIGV0bcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgU2l6ZMmZbiB4yZliyZlyc2l6IMWfyZlraWxkyZkgbcO8eHTJmWxpZiB6yZluZ2zJmXIgZWTJmXLJmWssIFNpesmZIG1hZGRpIHppeWFuIHZ1cmEgYmlsyZlyLiBRZXlkOiBCdSwgdMmZdGJpcWzJmXLJmSB0yZljaWxpIG7Dtm1yyZlsyZlyyZkgesmZbmcgZXRtyZl5yZkgaWNhesmZIHZlcm1pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iNDE5ODM0OTIxMTEwODQ5Nzg3OSI+ImlzdMmZbmlsyZluIG7Dtm1yyZl5yZkgYmlyYmHFn2EgesmZbmcgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iMTY4OTAyNDkwMTUwOTk5NjgxMCI+IlTJmXRiaXHJmSBTaXppbiBtw7xkYXhpbMmZbml6IG9sbWFkYW4sIHTJmWNpbGkgesmZbmdsyZlyIGTJmSBkYXhpbCBvbG1hcWxhLCBpc3TJmW5pbMmZbiB0ZWxlZm9uIHrJmW5naW5pIGV0bcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZaywgdMmZY2lsaSBuw7ZtcsmZbMmZcsmZIHFhbnVuc3V6IHrJmW5nIHZ1cm1hcWxhIFNpemluIMO8w6fDvG4gaMO8cXVxaSBwcm9ibGVtbMmZciB5YXJhZGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ4NDI1NzY5OTQxNDQ2MDQ4MjEiPiJDRE1BIHBsYW7Fn2V0IGF5YXJsYXLEsW5hIGJpcmJhxZ9hIGJhxZ9sYW1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NjA0ODQ4MDk1MzE1NDIxNDI1Ij4iQ0RNQSB0ZWxlZm9uIHF1cmHFn2TEsXJtYWxhcsSxbmEgYmlyYmHFn2EgYmHFn2xhbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIG1zZ2lkPSIxOTk0MTkzNTM4ODAyMzE0MTg2Ij4iVMmZdGJpccmZIENETUEgaGF6xLFybMSxxJ/EsW7EsSBiYcWfbGF0bWEgaWNhesmZc2kgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBlaHRpeWFjIG9sbWFkxLFxZGEgQ0RNQSBoYXrEsXJsxLHEn8SxbsSxIGJhxZ9sYWRhIGJpbMmZcmzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSI3Nzg1NDA4MjUzMzY0MzM1NzQwIj4ibcmZa2FuIGfDvG5jyZlsbMmZbcmZIGJpbGRpcmnFn2zJmXJpbmkgaWRhcsmZIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSIxMTIwNzQxNTU3ODkxNDM4ODc2Ij4iVMmZdGJpccmZIHJhZGlvZGFuIGfJmWzJmW4gbcmZa2FuIGfDvG5jyZlsbMmZbm3JmWzJmXJpbmkgYWt0aXYgdsmZIHlhIGRlYWt0aXYgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBvbHVubXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI3ODU1MjU5NDYxMjY4NzM0OTE0Ij4icWV5ZGl5eWF0IHjDvHN1c2l5ecmZdGzJmXJpbmkgyZlsZMmZIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9IjQwMjQ1MjY5Njg2MzAxOTQxMjgiPiJUyZl0YmlxyZkgZ2lyacWfIHFleWRpIHNlcnZpc2kgdMmZcsmZZmluZMmZbiB5w7xrbMmZbm1pxZ8gbcO8bGtpeXnJmXTJmSBnaXJpxZ9pIG94dW1hcS95YXptYXEgaW1rYW5sIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBuyZl6yZlyZMmZIHR1dHVsbWF5xLFiLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEdhZGdldCIgbXNnaWQ9Ijc3NjkwNTMzOTAxNTg2MzQ3MSI+InZpZGNldGzJmXIgc2XDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4iVMmZdGJpccmZIHNpc3RlbcmZIGhhbnPEsSB2aWRjZXRpbiBoYW5zxLEgdMmZdGJpcSB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsyZkgYmlsbcmZc2luaSBkZW3JmXnJmSBpY2F6yZkgdmVyaXIuIEJ1IGljYXrJmWxpIHTJmXRiaXFsyZlyIMWfyZl4c2kgbcmZbHVtYXRsYXJhIHbJmSBkaWfJmXIgdMmZdGJpcWzJmXLJmSDDp8SxeMSxxZ8gdmVyyZkgYmlsyZlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgw7zDp8O8biBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSI4NDIzOTIzNzc3NjU5MjkyMjI4Ij4idGVsZWZvbiBzdGF0dXN1bnUgZMmZeWnFn23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+IlTJmXRiaXHJmSBjaWhhesSxbiB0ZWxlZm9uIGZ1bmtzaXlhbGFyxLFuxLEgaWRhcsmZIGV0bcmZayBpbWthbsSxIHZlcmlyLiBCZWzJmSBpY2F6yZlsaSB0yZl0YmlxIFNpemkgeMmZYsmZcmRhciBldG3JmWTJmW4gxZ/JmWLJmWvJmWzJmXJpIHFvxZ9hLCB0ZWxlZm9uIHJhZGlvc3VudSB5YW5kxLFyxLFiLXPDtm5kw7xyyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSI5MTc4MjI4NTI0NTA3NjEwNDg2Ij4idGVsZWZvbiBzdGF0dXN1bnUgdsmZIGlkZW50aWZpa2FzaXlhbsSxIG94dXl1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iMTYzOTIxMjc3MTgyNjEyNTUyOCI+IlTJmXRiaXHJmSBjaWhhesSxbiB0ZWxlZm9uIGZ1bmtzaXlhbGFyxLFuYSBnaXJpxZ8gaWNhesmZc2kgdmVyaXIuIEJlbMmZIGljYXrJmWxpIHTJmXRiaXEgYnUgdGVsZWZvbnVuIG7Dtm1yyZlzaW5pIHbJmSBjaWhheiDEsERcJ25pLCB6yZluZ2luIGFrdGl2IG9sdWItb2xtYWTEscSfxLFuxLEgdsmZIHrJmW5nIGVkaWzJmW4gbsO2bXLJmW5pIG3DvMmZeXnJmW4gZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUzMTczMTQzNTAxMTQ5NTAxNSI+InBsYW7Fn2V0aW4geXV4dSByZWppbWluaW4gcWFyxZ/EsXPEsW7EsSBhbG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzM0ODAxODc5NDE0OTYxMzAiPiJ0ZWxlZm9udW4geXV4dSByZWppbWluyZkga2XDp23JmXNpbmkgyZluZ8mZbGzJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzExMzE5ODI0NDAwNDQ3ODY4Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aW4geXV4dSByZWppbWluaSBxYWRhxJ9hbiBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg1NTkxMDA2NzczNzI5Mjg3NTQiPiJUyZl0YmlxyZkgdGVsZWZvbnVuIHl1eHUgcmVqaW1pbmkgcWFkYcSfYW4gZXRtyZlrIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc4NzAzNDcyMjYxNjM1MDQxNyI+InBsYW7Fn2V0aSB5YW5kxLFybWEgdsmZIHlhIHPDtm5kw7xybcmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5Mjg2MjI0NzA5ODA5NDMyMDYiPiJ0ZWxlZm9udSB5YW5kxLFybWFxIHbJmSB5YSBzw7ZuZMO8cm3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY4OTg2Mjg3ODk4NDYzMTgzMSI+IlTJmXRiaXHJmSBwbGFuxZ9ldGkgeWFuZMSxcm1hxJ9hIHbJmSBzw7ZuZMO8cm3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjYwMzcwNTczNDg0NjMxMzEwMzIiPiJUyZl0YmlxyZkgdGVsZWZvbnUgeWFuZMSxcsSxYiBzw7ZuZMO8cm3JmSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZhY3RvcnlUZXN0IiBtc2dpZD0iMzcxNTIyNTQ5MjY5NjQxNjE4NyI+Inphdm9kIHRlc3QgcmVqaW1pbmTJmSBpxZ9syZl5aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk1MjA1OTMxODM1OTY1MzA5MSI+IlBsYW7Fn2V0IGF2YWRhbmzEscSfxLFuYSB0YW0gZ2lyacWfyZkgaW1rYW4gdmVybcmZa2zJmSBhxZ9hxJ/EsSBzyZl2aXl5yZlsaSBpc3RlaHNhbMOnxLEgc8SxbmHEn8SxIGtpbWkgacWfbMmZeWlyLiBZYWxuxLF6IHBsYW7Fn2V0IGlzdGVoc2Fsw6fEsSBzxLFuYXEgcmVqaW1pbmTJmSBvbGR1cWRhIGnFn2zJmXlpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxMzY2NDQ5OTAzMTkyNDQ4MDIiPiJCaXIgYcWfYcSfxLEgc8mZdml5ecmZbGkgaXN0ZWhzYWzDp8SxIHRlc3RpIGtpbWkgw6dhbMSxxZ9kxLFyxLFuLCB0ZWxlZm9uIGhhcmR3YXJlIMO8w6fDvG4gdGFtIGdpcmnFnyBpbWthbsSxIHZlcmlyLiBBbmNhcSB0ZWxlZm9uLCBpc3RlaHNhbMOnxLEgdGVzdCByZWppbWluZMmZIMOnYWzEscWfZMSxxJ/EsSB6YW1hbiBha3RpdmRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlciIgbXNnaWQ9IjY2MjcxOTIzMzMzNzM0NjUxNDMiPiJkaXZhciBrYcSfxLF6xLEgeWVybMmZxZ9kaXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlciIgbXNnaWQ9IjczNzM0NDc5MjA5Nzc2MjQ3NDUiPiJUyZl0YmlxyZkgc2lzdGVtyZkgZGl2YXIga2HEn8SxesSxIHllcmzJmcWfZGlybcmZayBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iMzI3ODYwODE2NTk3NzczNjUzOCI+ImRpdmFyIGthxJ/EsXrEsSDDtmzDp8O8c8O8bsO8IHZlcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVySGludHMiIG1zZ2lkPSI4MjM1Nzg0Mzg0MjIzNzMwMDkxIj4iVMmZdGJpccmZIHNpc3RlbSBkaXZhciBrYcSfxLF6xLEgw7Zsw6fDvHPDvCBnw7ZzdMmZcmnFn2zJmXJpbmkgbcO8yZl5ecmZbiBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hc3RlckNsZWFyIiBtc2dpZD0iMjMxNTc1MDQyMzEzOTY5NzM5NyI+ImZhYnJpayBkZWZvbHR1bmEgc8SxZsSxcmxhbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIzNjY1MzgwNDkyNjMzOTEwMjI2Ij4iVMmZdGJpccmZIGLDvHTDvG4gbcmZbHVtYXRsYXLEsSwgbml6YW1sYXLEsSB2yZkgcXVyYcWfZMSxcsSxbG3EscWfIHTJmXRiaXFsyZlyaSBzaWzJmXLJmWsgc2lzdGVtaSBmYWJyaWsgbml6YW1sYXLEsW5hIHFheXRhcm1hcSBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZSIgbXNnaWQ9IjIwMjE2MTQ4Mjk1OTE3NzU2NDYiPiJ2YXh0xLEgdMmZeWluIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxODk2MzQxNDM4MTUxMTUyODgxIj4iVMmZdGJpccmZIHBsYW7Fn2V0aW4gc2FhdCB2YXh0xLFuxLEgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg1NTcwMjczMDczODAyMCI+IlTJmXRiaXHJmSB0ZWxlZm9udW4gc2FhdCB2YXh0xLFuxLEgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWVab25lIiBtc2dpZD0iMjk0NTA3OTgwMTAxMzA3NzM0MCI+InZheHQgem9uYXPEsW7EsSBxdXJhxZ9kxLFyxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE2NzY5ODM3MTIzMTU4Mjc2NDUiPiJUyZl0YmlxyZkgcGxhbsWfZXRpbiB2YXh0IHpvbmFzxLFuxLEgZMmZeWnFn23JmSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0OTk5NDM0ODg0MzY2MzMzOTgiPiJUyZl0YmlxyZkgdGVsZWZvbiBzYWF0IHpvbGHEn8SxbsSxIGTJmXlpxZ9tyZlrIMO8w6fDvG4gaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSI0ODI5MjYyMzQ5NjkxMzg2OTg2Ij4iQWNjb3VudE1hbmFnZXJTZXJ2aWNlIGtpbWkgZGF2cmFuxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iMTk0ODQ1NTU1MjMzMzYxNTk1NCI+IlTJmXRiaXHJmSBBY2NvdW50QXV0aGVudGljYXRvcnNcJ8mZIHrJmW5nIGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QWNjb3VudHMiIG1zZ2lkPSIxMDg2Nzk1NDY3NzYwMTIyMTE0Ij4iY2loYXpkYSBoZXNhYmxhcsSxIHRhcMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNzQxNDk2NTM0NzY5NjYwMDI3Ij4iVMmZdGJpccmZIHBsYW7Fn2V0IHTJmXLJmWZpbmTJmW4gYmlsaW7JmW4gaGVzYWJsYXLEsW4gc2l5YWjEsXPEsW7EsSBhbG1hIGljYXrJmXNpIHZlcmlyLiBCdSBxdXJhxZ9kxLFyZMSxxJ/EsW7EsXogdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiB5YXJhZMSxbG3EscWfIGlzdMmZbmlsyZluIGhlc2FiIG9sYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDQ4MzE2ODIyNDUxODA3MzgyIj4iVMmZdGJpccmZIHRlbGVmb25kYSBvbGFuIGhlc2FibGFyxLFuIHNpeWFoxLFzxLFuxLEgyZlsZMmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiBCdW5hIHF1cmHFn2TEsXJkxLHEn8SxbsSxeiBpc3TJmW5pbMmZbiB0yZl0YmlxIHTJmXLJmWZpbmTJmW4geWFyYWTEsWxhbiBoZXNhYmxhciBkYSBhaWRkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjUyNjU5MDg0ODExNzI3MzY5MzMiPiJoZXNhYmxhciB5YXJhZMSxciB2yZkgcGFyb2xsYXIgdMmZeWluIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjU0NzIxMjQyOTY5MDg5NzcyNjAiPiJUyZl0YmlxyZkgQWNjb3VudE1hbmFnZXJcJ2luIGhlc2FiIHlhcmF0bWFxIHbJmSBwYXJvbCBhbG1hcSB2yZkgYcOnbWFxIGRheGlsIG9sbWFxbGEgYsmZcmFiyZlyLCBoZXNhYiB0yZlzZGlxbMmZeWljaSBpbWthbmxhcsSxbsSxIGlzdGlmYWTJmSBldG3JmXnJmSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9IjQ5ODMxMjYzMDQ3NTcxNzczMDUiPiJoZXNhYmxhcsSxIMmZbGF2yZkgZWRpciB2yZkgeWEgc2lsaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9Ijg2OTgyOTU2MjU0ODgyOTI1MDYiPiJUyZl0YmlxyZkgaGVzYWJsYXLEsW4gyZlsYXbJmSBvbHVubWFzxLEgdsmZIHlhIHNpbGlubcmZc2ksIGjJmW3Dp2luaW4gb25sYXLEsW4gcGFyb2xsYXLEsW7EsW4gc2lsaW5tyZlzaSBraW1pIMmZbcmZbGl5eWF0bGFyxLEgaWNyYSBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iMjM1NDgxMzk2MTYzODc3NjQyIj4iY2loYXpkYSBoZXNhYmxhciBpc3RpZmFkyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSI3OTg0MjI3MTQ3NDAzMzQ2NDIyIj4iVMmZdGJpccmZIGF1dGVudGlmaWthc2l5YSB0b2tlbmzJmXJpIHNvcsSfdWxhcsSxbsSxIGfDtm5kyZlybcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjQ5NTEwMjc5NjQzNDg5NzQ3NzMiPiLFn8mZYsmZa8mZIGJhxJ9sYW50xLFsYXLEsW5hIGJheG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiJUyZl0YmlxyZkgbcO2dmN1ZCBvbGFuIHbJmSBxb8WfdWxhbiDFn8mZYsmZa8mZbMmZciBraW1pIHFvxZ91bG1hbGFyIGhhcXHEsW5kYSBtyZlsdW1hdMSxIGfDtnJtyZl5yZkgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSI4MDE4NzU4MTM2NDA0MzIzNjU4Ij4idGFtIMWfyZliyZlryZkgZ2lyacWfaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+IlTJmXRiaXHJmSDFn8mZYsmZa8mZIHNva2V0bMmZcmluaSB5YXJhdG1hxJ9hIHbJmSBmyZlyZGkgxZ/JmWLJmWvJmSBwcm90b2tvbGxhcsSxbsSxIGlzdGlmYWTJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4gQnJhdXplciB2yZkgZGlnyZlyIHTJmXRiaXFsyZlyIGRhdGFuxLFuIGludGVybmV0yZkgw7Z0w7xyw7xsbcmZc2luaSB0yZltaW4gZWTJmW4gdsmZc2FpdGzJmXIgdmVyaXIsIG9uYSBnw7ZyyZkgZMmZIGRhdGFuxLFuIGludGVybmV0yZkgZ8O2bnLJmWRpbG3JmXNpIMO8w6fDvG4gYnUgaWNhesmZIHTJmWzJmWIgb2x1bm11ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MDU2NjAxNTk2NzU3NTE4OTYiPiLFn8mZYsmZa8mZIG5pemFtbGFyxLFuxLEgdsmZIHRyYWZpa2kgZMmZeWnFn2RpcmlyL3FhcsWfxLFzxLFuxLEgYWzEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTMzMzc5ODg4NjQxMjcxNDE5MyI+IlTJmXRiaXHJmSDFn8mZYsmZa8mZIHRyYWZpa2luaW4gcWFyxZ/EsXPEsW7EsSBhbG1hcSDDvMOnw7xuIMWfyZliyZlryZkgbml6YW1sYXLEsW7EsSBkyZl5acWfbcmZIGljYXrJmXNpIHZlcmlyLCBtyZlzyZlsyZluIHByb2tzaW5pIHbJmSB5YSBpc3TJmW5pbMmZbiBBUE4taW4gcG9ydHVudS4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIMWfyZliyZlryZkgcGFrZXRsyZlyaW5pIHNpemluIGJpbGdpbml6IG9sbWFkYW4gbW9uaXRvcmlucSBlZMmZLCB5w7ZubMmZbmRpcsmZIHbJmSB5YSByZWRha3TJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9Ijk1ODg4NDI5MTQ1NDMyNzMwOSI+IsWfyZliyZlryZkgYmHEn2xhbnTEsXPEsW7EsSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VOZXR3b3JrU3RhdGUiIG1zZ2lkPSI2Nzg5MTIzOTEyNDc2NDE2MjE0Ij4iVMmZdGJpccmZIMWfyZliyZlryZkgdsmZeml5ecmZdGluaSBkyZl5acWfbcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iNTk1MjU4NDk2NDM3MzAxNzk2MCI+IlPJmXJoyZlkbGkgYmHEn2xhbnTEsW7EsSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjE1MjQ0NDEzNDQ0MTIzMTk3ODAiPiJUyZl0YmlxyZkgYmlybMmZxZ9pbG1pxZ8gxZ/JmWLJmWvJmSBiYcSfbGFudMSxc8SxbsSxbiBzdGF0dXN1bnUgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjE0MDA2NjYwMTI2NzE2NDg3NDEiPiJhcnhhZm9uIGRhdGEgaXN0aWZhZMmZc2kgYXlhcsSxbsSxIGTJmXlpxZ9pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjUzNDc3Mjk1Nzg0Njg3NDQzNzkiPiJUyZl0YmlxyZkgZm9uIHJlamltaSBuaXphbWxhcsSxbsSxIGTJmXlpxZ9tyZl5yZkgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTIwMjAxMjk0OTI0NzA0MDAxMSI+IldpLUZpIGJhxJ9sYW50xLFsYXLEsW5hIGJheG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUwMDI3OTgwNzczODc4MDM3MjYiPiJUyZl0YmlxyZkgV2ktRmkgxZ/JmWLJmWvJmWzJmXJpIGhhcXHEsW5kYSBtyZlsdW1hdMSxIGfDtnJtyZl5yZkgaWNhesmZIHZlcmlyLCBtyZlzyZlsyZluLCBXaS1GaSBtw7Z2Y3VkbHXEn3UgdsmZIHFvxZ91bG11xZ8gV2ktRmkgY2loYXpsYXLEsW7EsW4gYWRsYXLEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjY1NTA2NDExODg3NDkxMjgwMzUiPiJXaS1GaSDFn8mZYsmZa8mZc2luyZkgcW/Fn3VsbWFxIHbJmSB5YSBheXLEsWxtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI3MTM3OTUwMjk3Mzg2MTI3NTMzIj4iVMmZdGJpccmZIFdpLUZpIMOnxLF4xLHFnyBuw7ZxdMmZc2luyZkgcW/Fn3VsbWFxIHbJmSBvbmRhbiBheXLEsWxtYXEgdsmZIGNpaGF6xLFuIFdpLUZpIMWfyZliyZlryZkgbml6YW1sYXLEsW7EsSBkyZl5acWfbcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgbXNnaWQ9IjEzNjgyNTM4NzE0ODMyNTQ3ODQiPiJXaS1GaSBNdWx0aWNhc3QgccmZYnVsdW5hIGljYXrJmSB2ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiJUyZl0YmlxyZkgV2ktRmkgxZ/JmWLJmWvJmWTJmSBzaXppbiBwbGFuxZ9ldGTJmW4gYmHFn3FhIGRpZ8mZciBtdWx0aWthc3QgYWRyZXNsyZlyyZkgecO2bmzJmW5kaXJpbG1pxZ8gcGFrZXRsyZlyaSBhbG1hcSBpY2F6yZlzaSB2ZXJpci4gQnUgcWV5cmktw6dveGFkcmVzbGkgcmVqaW1kyZluIGbJmXFsaSBvbGFyYXEgZGFoYSDDp294IGVuZXJqaSBpxZ9syZlkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MTk0OTcwNjAyNTM0OTkyNiI+IlTJmXRiaXHJmSBxcnVwIMO8bnZhbmxhciBpc3RpZmFkyZkgZXRtyZlrbMmZLCBXaS1GaSDFn8mZYsmZa8mZc2luZMmZIG9sYW4gYsO8dMO8biBjaWhhemxhcmEgZ8O2bmTJmXJpbG1pxZ8gcGFrZXRsyZlyaSBxyZlidWwgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIEJ1bmEgZGFoYSDDp294IGVuZXJqaSBzyZlyZiBvbHVudXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGhBZG1pbiIgbXNnaWQ9IjYwMDY5NjczNzM5MzU5MjY2NTkiPiJCbHVldG9vdGggYXlhcmxhcsSxbsSxIMmZbGTJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY5MjExNzc0NzE3NDg4ODIxMzciPiJUyZl0YmlxyZkgeWVybGkgQmx1ZXRvb3RoIHBsYW7Fn2V0aW5pbiBrb25maXF1cmFzaXlhc8SxbsSxIGfDtnJtyZl5yZkgdsmZIG3JmXNhZsmZZMmZbiBjaWhhemxhcsSxIHRhcG1hxJ9hIHbJmSBjw7x0bMmZbcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+IlTJmXRiaXHJmSBsb2thbCBCbHVldG9vdGggdGVsZWZvbnVudSBrb25maXF1csmZIGV0bcmZecmZIHbJmSB1emFxIGNpaGF6bGFyxLEga8mZxZ9mIGV0bcmZayB2yZkgb25sYXJhIHFvxZ91bG1hcSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI0MTk1OTA3MDEwNjEwMjA1NzAzIj4iV2lNQVhcJ2EgcW/Fn3VsIHbJmSBiYcSfbGFudMSxbsSxIGvJmXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNjM2MDEwMjg3NzI2MTk3ODg4NyI+IlTJmXRiaXHJmSBXaU1BWCBtw7Z2Y3VkbHXEn3UgdsmZIHFvxZ91bG11xZ8gV2lNQVggxZ/JmWLJmWvJmWzJmXJpbmkgdMmZeWluIGV0bcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpbWF4U3RhdGUiIG1zZ2lkPSIyNDA1MDQyMjY3MTMxNDk2NTc5Ij4iV2lNQVggdsmZeml5ecmZdGluaSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMTU2NDU2NTA0MDg0MjAxODA1Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aSBXaU1BWCDFn8mZYsmZa8mZbMmZcmluyZkgcW/Fn21hcSB2yZkgb25sYXJkYW4gYXnEsXJtYXEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NzAyNTA0MzAwNDkyMzc5OCI+IlTJmXRiaXHJmSB0ZWxlZm9udSBXaU1BWCDFn8mZYsmZa8mZc2luyZkgcW/Fn21hxJ9hIHbJmSB5YSBXaU1BWCDFn8mZYsmZa8mZc2luZMmZbiBhecSxcm1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoIiBtc2dpZD0iNjEyNzc2OTMzNjMzOTI3NjgyOCI+IkJsdWV0b290aCBjaWhhemxhcsSxIGlsyZkgY8O8dGzJmW5kaXJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDgwNzIyMTgxODUyNDM4NjI4Ij4iVMmZdGJpccmZIHllcmxpIEJsdWV0b290aCBwbGFuxZ9ldGluaW4ga29uZmlxdXJhc2l5YXPEsW7EsSBnw7ZybcmZecmZIHbJmSBjw7x0bMmZbm1pxZ8gY2loYXpsYXJsYSBiYcSfbGFudMSxbGFyIGV0bcmZecmZIHbJmSBxyZlidWwgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzIwNzEwNjMyNDQ1MjMxMjczOSI+IlTJmXRiaXHJmSBCbHVldG9vdGggdsmZIHlhIHRlbGVmb24ga29uZmlxdXJhc2l5YWxhcsSxbsSxIGfDtnJtyZl5yZkgdsmZIHFvxZ91bG11xZ8gY2loYXpsYXJsYSDJmWxhccmZIHF1cm1hxJ9hIHbJmSBxyZlidWwgZXRtyZl5yZkgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbmZjIiBtc2dpZD0iNDQyMzM1MTI3NDc1Nzg3Njk1MyI+Ik5lYXIgRmllbGQgQ29tbXVuaWNhdGlvblwnxLEga29udHJvbCBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiJUyZl0YmlxyZkgWWF4xLFuIE3JmXNhZsmZIEtvbW11bmlrYXNpeWFzxLEgKE5GQykgdGVxbMmZcmksIGthcnRsYXLEsSB2yZkgb3h1eXVjdWxhcsSxIGlsyZkgyZlsYXHJmSBxdXJtYcSfYSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSIzNTk4NDk2MzAxNDg2NDM5MjU4Ij4iRWtyYW4ga2lsaWRpbmkgZGVha3RpdiBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iNjAzNDIwMzA2NTA3NzEyMjk5MiI+IlTJmXRiaXHJmSBraWxpZCBhw6dhcsSxbsSxIHbJmSB0yZlobMO8a8mZc2l6bGlrIHBhcm9sdW51IGRlYWt0aXYgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIFFhbnVuaSBtaXNhbCBidWR1ciBraSwgdGVsZWZvbiB6yZluZyBxyZlidWwgZWTJmW4gemFtYW4ga2lsaWRpIGHDp8SxciB2yZkgesmZbmcgcXVydGFyYW5kYW4gc29ucmEga2lsaWRpIGJhxJ9sYXnEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iNjIwMTgxMDAwODIzMDUwMzA1MiI+InNpbnggYXlhcmxhcsSxbsSxIG94dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSIyNzA2NzQ1Njc0NTY5Njc4NjQ0Ij4iVMmZdGJpccmZIGhlc2FibGFyIMO8w6fDvG4gc2lueHJvbml6YXNpeWEgbml6YW1sYXLEsW7EsSBveHVtYSBpY2F6yZlzaSB2ZXJpci4gTcmZc8mZbMmZbiwgYnUgxZ7JmXhzbMmZciB0yZl0YmlxaW5pbiBzaW54cm9uaXrJmSBvbHVudWItb2x1bm1hZMSxxJ/EsW7EsSB0yZl5aW4gZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9IjU0MDg2OTQ4NzU3OTM5NDUzMTQiPiJzaW54cm9uaXphc2l5YXlhIGRhdmFtIGVkaXIgdsmZIG9udSBzw7ZuZMO8csO8ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU3luY1NldHRpbmdzIiBtc2dpZD0iODk1NjI2MjU5MTMwNjM2OTg2OCI+IlTJmXRiaXHJmSBoZXNhYiDDvMOnw7xuIHNpbnhyb25pemFzaXlhIG5pemFtbGFyxLFuxLEgZMmZeWnFn23JmXnJmSBpY2F6yZkgdmVyaXIuIE3JmXPJmWzJmW4sIGJ1IGlzdGlmYWTJmcOnaSBoZXNhYmzEsSDFnsmZeHNsyZlyIHTJmXRiaXFpbmluIHNpbnhyb25pemFzaXlhc8SxbsSxIGJhxZ9sYW1hcSDDvMOnw7xuIGlzdGlmYWTJmSBlZGlsyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFN5bmNTdGF0cyIgbXNnaWQ9IjczOTY1Nzc0NTEzNjAyMDI0NDgiPiJzaW54cm9uaXphc2l5YSBzdGF0aXN0aWthc8SxbsSxIG94dW1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSIxNTEwMTQzNzYxNzU3NjA2MTU2Ij4iVMmZdGJpccmZIHN5bmMgdMmZZGJpcmzJmXJpbmluIHRhcml4w6fJmXNpIHbJmSBuyZkgccmZZMmZciBkYXRhbsSxbiBzaW54IG9sZHXEn3UgZGEgZGF4aWwgb2xtYXFsYSBiyZlyYWLJmXIsIGjJmXIgaGFuc8SxIGJpciBoZXNhYiDDvMOnw7xuIG9sYW4gc2lueCBzdGF0bGFyxLFuxLEgb3h1bWHEn2EgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNDc1NjYwOTYzNzA1MzM1MzMxOCI+ImFidW7JmSBvbHVubXXFnyB4yZliyZlybMmZcmkgb3h1eXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjU1NTcwNTg5MDc5MDYxNDQ1MDUiPiJUyZl0YmlxyZkgaGF6xLFyZGEgc2lueHJvbiBsZW50bMmZciBoYXFxxLFuZGEgyZl0cmFmbMSxIG3JmWx1bWF0IGFsbWFxIMO8w6fDvG4gaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjkwMTUyNDYzMjU0MDgyMDkyOTYiPiJhYnVuyZkgb2x1bm11xZ8geMmZYsmZcmzJmXJpIHlhesSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1dyaXRlIiBtc2dpZD0iNjkyODkzMDE4ODgyNjA4OTQxMyI+IlTJmXRiaXHJmSBjYXJpIHNpbnhyb25sYcWfbcSxxZ8gbGVudGzJmXJpbml6yZkgZMmZeWnFn2lrbGlrIGV0bcmZayBpbWthbsSxIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgc2l4cm9ubGHFn23EscWfIGxlbnRsyZlyaW5pemkgZMmZeWnFn8mZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNDEwNzEwMTUyNTc0NjAzNTcxOCI+ImzDvMSfyZl0yZkgyZlsYXbJmSBldGRpeWluaXogxZ/JmXJ0bMmZcmkgb3h1bWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI2NTk2MTQ2MDAzMzg5MDQyNDMiPiJUyZl0YmlxyZkgaXN0aWZhZMmZw6dpbmluIGzDvMSfyZl0ZMmZIHNheGxhZMSxxJ/EsSBiw7x0w7xuIHPDtnpsyZlyaSwgYWRsYXLEsSB2yZkgZnJhemFsYXLEsSBveHVtYXEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4iaXN0aWZhZMmZw6dpIGzDvMSfyZl0aW7JmSBzw7Z6bMmZciDJmWxhdsmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgxODUzODU3MTYyNTUwNjUyOTEiPiJUyZl0YmlxyZkgaXN0aWZhZMmZw6dpIGzDvMSfyZl0aW7JmSB5ZW5pIHPDtnpsyZlyIHlhem1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4icW9ydW5tdcWfIHlhZGRhxZ9hIGRheGlsIG9sbWHEn2EgY8mZaGQgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODIzNTM0MTUxNTYwNTU1OTY3NyI+InFvcnVubXXFnyB5YWRkYcWfYSBkYXhpbCBvbG1hxJ9hIGPJmWhkIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY0MjQ3MzI5MjM0ODEzMjA3MiI+IlTJmXRiaXHJmSBnyZlsyZljyZlrIGNpaGF6bGFyZGEgyZlsw6dhdMSxbWzEsSBvbGFjYXEgVVNCIHlhZGRhxZ8gw7zDp8O8biBpY2F6yZkgdGVzdGkgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU5MTQ0MDI2ODQ2ODU4NDg4MjgiPiJUyZl0YmlxyZkgZ8mZbMmZY8mZayBjaWhhemxhcmRhIG3DtnZjdWQgb2xhY2FxIFNEIGthcnQgw7zDp8O8biBpY2F6yZluaSB0ZXN0IGV0bcmZayDDvMOnw7xuIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+IlVTQiB5YWRkYcWfxLFuxLF6xLFuIG3JmXptdW51bnUgZMmZeWnFn23JmWsgdsmZIHlhIHNpbG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODgwNTY5MzYzMDA1MDQ1ODc2MyI+IlNEIGthcnQga29udGVudGzJmXJpbmkgZMmZeWnFn2lyIHbJmSB5YSBzaWxpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNzU0MDYyOTk0NDU3MTA4ODgiPiJUyZl0YmlxyZkgVVNCIHlhZGRhxZ9hIHlhem1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDMzNzQxNzc5MDkzNjYzMjA5MCI+IlTJmXRiaXHJmSBTRCBrYXJ0YSB5YXptYSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1OTgzOTE5OTcwNjg3OTAxNSI+ImRheGlsaSBtZWRpYSB5YWRkYcWfxLEga29udGVudGluaSBkyZl5acWfaXIvc2lsaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxODkxNjA1OTc2OTg1MjkxODUiPiJUyZl0YmlxyZkgZGF4aWxpIG1lZGlhIHlhZGRhxZ9kYWvEsSBrb250ZW50aSByZWRha3TJmSBldG3JmWsgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3ODMxODU5ODQ0ODg0OTgyOSI+InPJmW7JmWQgeWFkZGHFn8SxbsSxIG5pemFtbGF5xLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg3MDQzMjMxNzY5MTQxMjE0ODQiPiJUyZl0YmlxyZkgc8mZbsmZZCB5YWRkYcWfxLFuxLEgaWRhcsmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iODE1MDYxMzgyMzkwMDQ2MDU3NiI+ImLDvHTDvG4gaXN0aWZhZMmZw6dpbMmZcmluIHhhcmljaSB5YWRkYcWfxLFuYSBkYXhpbCBvbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZEFjY2Vzc0FsbCIgbXNnaWQ9IjMyMTUyMDgzNTc0MTU4OTEzMjAiPiJUyZl0YmlxyZkgYsO8dMO8biBpc3RpZmFkyZnDp2lsyZlyIMO8w6fDvG4gb2xhbiB4YXJpY2kgeWFkZGHFn2EgZ2lyacWfIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTY1NjQ4NzI2NDgxOTY2OTgyNCI+ImtlxZ8gZmF5bCBzaXN0ZW1pbsmZIGdpcm3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTU3ODk2NzY0MjI2NTU1MDk1NSI+IlTJmXRiaXHJmSBrZcWfIGZheWwgc2lzdGVtaW5pIG94dW1hxJ9hIHbJmSB5YXptYcSfYSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2Vfc2lwIiBtc2dpZD0iNTk4Njk1MjM2Mjc5NTg3MDUwMiI+IsSwbnRlcm5ldCB6yZluZ2zJmXJpIGV0bcmZayB2yZkgeWEgccmZYnVsIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZV9zaXAiIG1zZ2lkPSI0NzE3NjMyMDAwMDYyNjc0Mjk0Ij4iVMmZdGJpccmZIGludGVybmV0IHrJmW5nbMmZcmluaW4gZ8O2bmTJmXJpbG3JmXNpIHbJmSBxyZlidWwgZWRpbG3JmXNpIMO8w6fDvG4gU0lQIHNlcnZpc2luZMmZbiBpc3RpZmFkyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc4NjI1OTMyODM2MTE0OTMyMzIiPiJ0YXJpeGkgxZ/JmWLJmWvJmSBpc3RpZmFkyZlzaW5pIG94dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWROZXR3b3JrVXNhZ2VIaXN0b3J5IiBtc2dpZD0iNzY4OTA2MDc0OTgxOTEyNjQ3MiI+IlTJmXRiaXHJmSB4w7xzdXNpIMWfyZliyZlryZlsyZlyIHbJmSB0yZl0YmlxbMmZciDDvMOnw7xuIHRhcml4aSDFn8mZYsmZa8mZIGlzdGlmYWTJmXNpbmkgb3h1bWHEn2EgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9IjI1NjIwNTM1OTIzMzk4NTk5OTAiPiLFn8mZYsmZa8mZIHNpeWFzyZl0aW5pIGlkYXLJmSBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iNzUzNzU4Njc3MTU1OTM3MDY2OCI+IlTJmXRiaXHJmSDFn8mZYsmZa8mZIHFhbnVubGFyxLFuxLEgdsmZIHTJmXRiaXFpbiB4w7xzdXNpIHFheWRhbGFyxLFuxLEgaWRhcsmZIGV0bcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1MDg4MjE3MzA5MDg4NzI5NjUwIj4ixZ/JmWLJmWvJmSBpc3RpZmFkyZkgaGVzYWLEsW7EsSBkyZl5acWfbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTQ0MzQxMjg2Njc0NjE5ODEyMyI+IlTJmXRiaXHJmSDFn8mZYsmZa8mZIGlzdGlmYWTJmXNpbmluIHTJmXRiaXFsyZlyyZkgcWFyxZ/EsSBuaXphbWxhcsSxbsSxIHJlZGFrdMmZIGV0bcmZecmZIGljYXrJmSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIGVkaWxtaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9IjM2NTg1MjcyMTQ5MTQ5NTk3NDkiPiJzb2tldCBpxZ9hcsmZbMmZcmluaSBkyZl5acWfaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9Ijc2NTU1Njg0MzM2OTYzNTY1NzgiPiJUyZl0YmlxyZkgYXJhxZ9kxLFybWEgw7zDp8O8biBzb2tldCBpxZ9hcsmZbMmZcmluaSBkyZl5acWfbcmZayBpbWthbsSxIHZlcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNzY3MzQxNjQ4Nzg3MzQzMjI2OCI+ImJpbGRpcmnFn2zJmXLJmSBkYXhpbCBvbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI0NTg0NTc3NDI2ODM0MzEzODciPiJUyZl0YmlxyZkgYmlsZGlyacWfbMmZcmkgyZlsZMmZIGV0bcmZecmZLCBzxLFuYW1hxJ9hIHbJmSB0yZltaXpsyZltyZl5yZkgaW1rYW4gdmVyaXIsIGJ1bmEgZGlnyZlyIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gdmVyaWxtacWfIGJpbGRpcmnFn2zJmXIgZMmZIGRheGlsZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9IjcwNTc3NjQ3NDIyMTE2NTY2NTQiPiJiaWxkaXJpxZ8gZGlubMmZbcmZIHhpZG3JmXRpbsmZIGJhxJ9sYW7EsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIiBtc2dpZD0iOTg1Njk3OTE4NTc2OTAyOTg2Ij4iU2FoaWJpbsmZIHnDvGtzyZlrIHPJmXZpeXnJmWxpIGJpbGRpcmnFnyBkaW5syZltyZkgc2VydmlzaSBpbMmZIMmZbGFxyZkgc2F4bGFtYcSfYSBpY2F6yZkgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGhlw6cgdmF4dCBpc3TJmW5pbG3JmW3JmWxpZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iMzY5OTYwMDgzMzk3NTExNzQ3OCI+Im9wZXJhdG9yIHhpZG3JmXRsaSBrb25maXVyYXNpeWEgdMmZdGJpcWluyZkgbcO8cmFjacmZdCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iNDE1OTU0OTE1MjUyOTExMTkyMCI+IlNhaGliaW7JmSBvcGVyYXRvciB4aWRtyZl0bGkgdMmZdGJpcSBrb25maXF1cmFzaXlhc8SxbmEgIG3DvHJhY2nJmXQgaW1rYW7EsSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gdMmZbMmZYiBvbHVubWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjgyMDYwNzc0NDc4Mzg5MDk1MTYiPiLFn8mZYsmZa8mZIMWfyZlyYWl0aSBoYXFxxLFuZGEgbcO8xZ9haGlkyZlsyZlyIMO8w6fDvG4gcXVsYXEgYXNtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjY4OTkxMDIwNzU4MjUyNzIyMTEiPiJUyZl0YmlxyZkgxZ/JmWLJmWvJmSDFn8mZcmFpdGkgw7x6csmZIG3DvMWfYWhpZMmZbMmZciDDvMOnw7xuIHF1bGFxIGFzbWFxIGlta2FuxLEgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGhlw6cgdmF4dCBsYXrEsW0gb2xtYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2hvdHdvcmRSZWNvZ25pdGlvbiIgbXNnaWQ9IjMyMjUwODA0MDg3NDYzNjEzMTMiPiJpc3RpIHPDtnogdGFuxLFubWFzxLEgdMmZbMmZYiBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hvdHdvcmRSZWNvZ25pdGlvbiIgbXNnaWQ9IjM3MTY3NDEyNjAxOTUzNjQyNTIiPiJUyZl0YmlxyZkgaXN0aSBzw7Z6IHRhbsSxbm1hc8SxIHTJmWzJmWIgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxIMO8w6fDvG4gbGF6xLFtIG9sYSBiaWxtyZl6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9saW1pdFBhc3N3b3JkIiBtc2dpZD0iNDQ5NzQyMDcyODg1NzU4NTc5MSI+IlBhcm9sIHFheWRhbGFyxLFuxLEgdMmZeWluIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2xpbWl0UGFzc3dvcmQiIG1zZ2lkPSIzMjUyMTE0MjAzOTE5NTEwMzk0Ij4iRWtyYW4ga2lsaWRpbmkgYcOnYW4gxZ9pZnLJmWzJmXJpbiB1enVubHXEn3VudSB2yZkgb25sYXJkYWvEsSBpY2F6yZkgdmVyaWzJmW4gacWfYXLJmWzJmXLJmSBuyZl6YXLJmXQgZWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2F0Y2hMb2dpbiIgbXNnaWQ9IjkxNDEzMDY0Njk0MjE5OTUwMyI+IkVrcmFuIGtpbGlkaSBjyZloZGzJmXJpbmkgbW9uaXRvcmlucSBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzIxNTcyOTI5NDIxNTA3MDA3MiI+IkVrYW4ga2lsaWRpbmkgYcOnYXJryZluIGRheGlsIGVkaWxtacWfIHlhbmzEscWfIHBhcm9sbGFyYSBiYXjEsW4gdsmZIMmZZ8mZciBoyZlkZGluZMmZbiDDp294IHlhbmzEscWfIHBhcm9sbGFyIGRheGlsIGVkaWxpYnPJmSwgcGxhbsWfZXRpIGtpbGlkbMmZeWluIHbJmSB5YSBiw7x0w7xuIHBsYW7Fn2V0IGRhdGFzxLFuxLEgc2lsaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193YXRjaExvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcxMjMyMzA5MTg0Njc2MTA3MyI+IkVrYW4ga2lsaWRpbmkgYcOnYXJryZluIGRheGlsIGVkaWxtacWfIHlhbmzEscWfIHBhcm9sbGFyYSBiYXjEsW4gdsmZIMmZZ8mZciBoyZlkZGluZMmZbiDDp294IHlhbmzEscWfIHBhcm9sbGFyIGRheGlsIGVkaWxpYnPJmSwgdGVsZWZvbnUga2lsaWRsyZl5aW4gdsmZIHlhIGLDvHTDvG4gdGVsZWZvbiBkYXRhc8SxbsSxIHNpbGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9yZXNldFBhc3N3b3JkIiBtc2dpZD0iMjYyMDA3NzE5MTI0MjY4ODk1NSI+IkVrcmFuIGtpbGlkIHBhcm9sdW51IGTJmXlpxZ9pbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjYwNTk2Mzk2MjMwMTkwNDQ1OCI+IkVrcmFuIGtpbGlkaW5pIGHDp2FuIMWfaWZyyZluaSBkyZl5acWfZGlyaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2ZvcmNlTG9jayIgbXNnaWQ9IjIyNzQwODUzODQ3MDQyNDg0MzEiPiJFa3JhbsSxIGtpbGlkbMmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19mb3JjZUxvY2siIG1zZ2lkPSIxMTQxNzk3NTg4NDAzODI3MTM4Ij4iRWtyYW7EsW4gbsmZIHZheHQgdsmZIG5lY8mZIGtpbGlkbMmZbm3JmXNpbsmZIG7JmXphcsmZdCBlZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93aXBlRGF0YSIgbXNnaWQ9IjM5MTA1NDU0NDY3NTg2Mzk3MTMiPiJCw7x0w7xuIG3JmWx1bWF0bGFyxLEgc2lsaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzA2MTg0MDk2MDY3NzU2ODc2Ij4iUGxhbsWfZXRpbiBkYXRhc8SxbsSxIHjJmWLJmXJkYXJsxLFxIG9sbWFkYW4sIHphdm9kIGRhdGEgc8SxZsSxcmxhbWFzxLEgaWzJmSBzaWxpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTA5Njg5NTYwNDU3NDE4ODM5MSI+IlRlbGVmb251biBkYXRhc8SxbsSxIHjJmWLJmXJkYXJsxLFxIG9sbWFkYW4sIHphdm9kIGRhdGEgc8SxZsSxcmxhbWFzxLEgaWzJmSBzaWxpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9zZXRHbG9iYWxQcm94eSIgbXNnaWQ9IjI3ODQ4MjgyOTM3NDc3OTE0NDYiPiJDaWhhesSxbiBxbG9iYWwgcHJva3Npc2luaSBheWFybGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19zZXRHbG9iYWxQcm94eSIgbXNnaWQ9IjYzODc0OTc0NjY2NjAxNTQ5MzEiPiJTaXlhc8mZdCBha3RpdiBvbGFya8mZbiBjaWhhesSxbiBxbG9iYWwgcHJva3Npc2luaSBpc3RpZmFkyZkgw7zDp8O8biBxdXJ1bi4gWWFsbsSxeiBpbGsgY2loYXogYWRtaW5pIGVmZmVrdGl2IHFsb2JhbCBwcm9rc2luaSB0yZl5aW4gZWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSI4ODUyNzkxNTE4NDcyNTQwNTYiPiJFa3JhbiBraWxpZGkgxZ9pZnLJmXNpbsmZIHNvbiB6YW1hbiBzZcOnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19leHBpcmVQYXNzd29yZCIgbXNnaWQ9IjE3Mjk3MjUyMjYzMTQ2OTE1OTEiPiJFa3JhbiBraWxpZGkgcGFyb2x1bnVuIG7JmSBxyZlkyZlyIHRlei10ZXogZMmZeWnFn23JmXNpbmkga29udHJvbCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iODkwMTMyNjE5OTkwOTEzMjkxNSI+IllhZGRhxZ8gxZ9pZnLJmWzJmW5tyZlzaW5pIGF5YXJsYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSIyNjM3NzMyMTE1MzI1MzE2OTkyIj4iVMmZdGJpcSBtyZlsdW1hdGxhcsSxbsSxbiDFn2lmcsmZbMmZbm3JmXNpbmkgdMmZbMmZYiBlZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iNjM5NTMwMTAyMzE1MjI5NzgyNiI+IkthbWVyYWxhcsSxIGRla2F0aXYgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZGlzYWJsZUNhbWVyYSIgbXNnaWQ9IjIzMDYzNDkwNDI4MzQ3NTQ1OTciPiJCw7x0w7xuIGNpaGF6IGthbWVyYWxhcsSxbsSxbiBpc3RpZmFkyZlzaW5pIMmZbmfJmWxsyZkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2Rpc2FibGVLZXlndWFyZEZlYXR1cmVzIiBtc2dpZD0iMjY2MzI5MTA0NTQyNjM4ODAyIj4iS2xhdmlhdHVyYSBraWxpZGluZMmZIGZ1bmtzaXlhbGFyxLEgZGVha3RpdiBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjM0NjcwODIyNzIxODY1MzQ2MTQiPiJLbGF2aWF0dXJhIGtpbGlkaW5kyZkgYsmZemkgZnVua3NpeWFsYXLEsW4gcWFyxZ/EsXPEsW7EsSBhbMSxbi4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGhvbmVUeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijg5MDEwOTgzMzY2NTg3MTAzNTkiPiLGj3NhcyBzyZloaWbJmSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2OTkyMzY1MDUyNzEzNjYxNSI+Ik1vYmlsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzg5NzU0NDY1NDI0Mjg3NDU0MyI+IsSwxZ8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMTAzNjAxNDMzMzgyMTU4MTU1Ij4ixLDFnyBGYWtzxLEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzM1MTc3MTQ0OTQ4MzI5MzcwIj4iRXYgRmFrc8SxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjAzODc4Njc0NDc3MjA3Mzk0Ij4iUGV5Y2VyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTY1MDgyNDI3NTE3NzkzMTYzNyI+IkRpZ8mZciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiLFnsmZeHNpIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iZW1haWxBZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI4MDczOTk0MzUyOTU2MTI5MTI3Ij4iQW5hIHPJmWhpZsmZIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzA4NDIzNzM1NjYwMjYyNTYwNCI+IsSwxZ8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMTEyMDQ0NDEwNjU5MDExMDIzIj4iRGlnyZlyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjM3NDkxMzk1Mjg3MDExMDYxOCI+IkbJmXJkaSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBvc3RhbEFkZHJlc3NUeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9IjY4ODAyNTc2MjY3NDAwNDcyODYiPiLGj3NhcyBzyZloaWbJmSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU2MjkxNTM5NTYwNDUxMDkyNTEiPiLEsMWfIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDk2NjYwNDI2NDUwMDM0MzQ2OSI+IkRpZ8mZciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ5MzI2ODI4NDc1OTUyOTkzNjkiPiJEw7x6yZlubMmZeWluIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1BZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSIxNzM4NTg1MTk0NjAxNDc2Njk0Ij4ixo9zYXMgc8mZaGlmyZkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzU5NjQ0NTY1NjQ3MzgzNzA4Ij4ixLDFnyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4Njg1NDk0MDEwNTM2MTU2NzciPiJEaWfJmXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTQ1MTE4OTQ0NjM5ODY5ODA5Ij4iRsmZcmRpIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JnYW5pemF0aW9uVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NTQ2MzM1NjEyMTg5MTE1NjE1Ij4ixLDFnyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQzNzgwNzQxMjkwNDk1MjAzNzMiPiJEaWfJmXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNDU1MDQ3NDY4NTgzOTY1MTA0Ij4iRsmZcmRpIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1Qcm90b2NvbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI4NTk1MjYxMzYzNTE4NDU5NTY1Ij4iQUlNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzM5MDQ3MzYyODI3NTQ5MDcwMCI+IldpbmRvd3MgTGl2ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4ODI4NzcxMzQ5MzE0NTgyMTciPiJZYWhvbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjUwMzUzNzYzMTMyMDA1ODUyNDIiPiJTa3lwZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc1MzIzNjMxNzg0NTk0NDQ5NDMiPiJRUSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM3MTM0NDEwMzQyOTk2NjA3NDkiPiJHb29nbGUgU8O2aGLJmXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNTA2ODU3MzEyNzE4NjMwODIzIj4iSUNRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTY0ODc5NzkwMzc4NTI3OTM1MyI+IkphYmJlciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ3VzdG9tIiBtc2dpZD0iMTY0NDczODA1OTA1MzM1NTgyMCI+IsWeyZl4c2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVIb21lIiBtc2dpZD0iMjU3MDkyMzQ2MzAzMzk4NTg4NyI+IkV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW9iaWxlIiBtc2dpZD0iNjUwMTQ2MzU1Nzc1NDc1MTAzNyI+Ik1vYmlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29yayIgbXNnaWQ9Ijg4NjM5Mzk2NjcwNTk5MTE2MzMiPiLEsMWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4V29yayIgbXNnaWQ9IjM1MTc3OTIxNjAwMDg4OTA5MTIiPiLEsMWfIEZha3PEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUZheEhvbWUiIG1zZ2lkPSIyMDY3MjY1OTcyMzIyOTcxNDY3Ij4iRXYgRmFrc8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlUGFnZXIiIG1zZ2lkPSI3NTgyMzU5OTU1Mzk0OTIxNzMyIj4iUGV5Y2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXIiIG1zZ2lkPSIxNTQ0NDI1ODQ3ODY4NzY1OTkwIj4iRGlnyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FsbGJhY2siIG1zZ2lkPSIyNzEyMTc1MjAzMDY1Njc4MjA2Ij4iR2VyaXnJmSB6yZluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNhciIgbXNnaWQ9Ijg3MzgzNjA2ODk2MTY3MTY5ODIiPiJBdnRvbW9iaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDb21wYW55TWFpbiIgbXNnaWQ9IjU0MDQzNDM1NjQ2MTQ3ODkxNiI+IsWeaXJryZl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlSXNkbiIgbXNnaWQ9IjgwMjI0NTMxOTMxNzEzNzAzMzciPiJJU0ROIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTWFpbiIgbXNnaWQ9IjY3NjYxMzcwMTA2MjgzMjY5MTYiPiLGj3NhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU90aGVyRmF4IiBtc2dpZD0iODU4NzY1NzE0NTA3MjQ0NjU2NSI+IkRpZ8mZciBmYWtzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlUmFkaW8iIG1zZ2lkPSI0MDkzNzM4MDc5OTA4NjY3NTEzIj4iUmFkaW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVUZWxleCIgbXNnaWQ9IjMzNjc4Nzk5NTI0NzYyNTA1MTIiPiJUZWxla3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVUdHlUZGQiIG1zZ2lkPSI4NjA2NTE0Mzc4NTg1MDAwMDQ0Ij4iVFRZIFRERCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmtNb2JpbGUiIG1zZ2lkPSIxMzExNDI2OTg5MTg0MDY1NzA5Ij4iTW9iaWwgacWfIHRlbGVmb251Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya1BhZ2VyIiBtc2dpZD0iNjQ5OTM4NzMxMjMxMTU3MDU2Ij4ixLDFnyBQZXljZXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQXNzaXN0YW50IiBtc2dpZD0iNTU5Njc3MjYzNjEyODU2Mjg4NCI+IkvDtm3JmWvDp2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNbXMiIG1zZ2lkPSI3MjU0NDkyMjc1NTAyNzY4OTkyIj4iTU1TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQ3VzdG9tIiBtc2dpZD0iNzgzNzU4NjE5ODQ1ODA3MzQwNCI+IkbJmXJkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUJpcnRoZGF5IiBtc2dpZD0iMjgxMzM3OTg0NDIxMTM5MDc0MCI+IkRvxJ91bSBnw7xuw7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVBbm5pdmVyc2FyeSIgbXNnaWQ9IjM4NzY3Nzk3NDQ1MTgyODQwMDAiPiLEsGxkw7Zuw7xtw7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVPdGhlciIgbXNnaWQ9IjczODgxNzg5MzkwMTAxNDMwNzciPiJEaWfJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVDdXN0b20iIG1zZ2lkPSI4NTI1OTYwMjU3ODA0MjEzODQ2Ij4iRsmZcmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlSG9tZSIgbXNnaWQ9IjQ0OTIyNzIzNjE0MDQzMzkxOSI+IsaPc2FzIHPJmWhpZsmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlV29yayIgbXNnaWQ9IjM1NDgwNTgwNTk2MDExNDk5NzMiPiLEsMWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlT3RoZXIiIG1zZ2lkPSIyOTIzMDA4Njk1MjcyNjM5NTQ5Ij4iRGlnyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlTW9iaWxlIiBtc2dpZD0iMTE5OTE5MDA1MzIxMTY2MjA1Ij4iTW9iaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlQ3VzdG9tIiBtc2dpZD0iODkwMzIwNjkwMzA2MDQ3OTkwMiI+IkbJmXJkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVIb21lIiBtc2dpZD0iODE2NTc1Njk3NzE4NDQ4MzA5NyI+IsaPc2FzIHPJmWhpZsmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZVdvcmsiIG1zZ2lkPSI1MjY4MTcyNzcyMzg3Njk0NDk1Ij4ixLDFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVPdGhlciIgbXNnaWQ9IjI3MjYxMTE5NjY2MjM1ODQzNDEiPiJEaWfJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVDdXN0b20iIG1zZ2lkPSIyMDc0MDI4NzU1NTI3ODI2MDQ2Ij4iRsmZcmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlSG9tZSIgbXNnaWQ9IjYyNDExODEwMzI5NTQyNjM4OTIiPiJBbmEgc8mZaGlmyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVXb3JrIiBtc2dpZD0iMTM3MTQ4OTI5MDI0MjQzMzA5MCI+IsSwxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVPdGhlciIgbXNnaWQ9IjUzNzcwMDc0OTU3MzU5MTU0NzgiPiJEaWfJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQ3VzdG9tIiBtc2dpZD0iNjkxOTQ1MzgzNjYxODc0OTk5MiI+IsWeyZl4c2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQWltIiBtc2dpZD0iNzA1MDM2MDYxMjM2ODM4MzQxNyI+IkFJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xNc24iIG1zZ2lkPSIxNDQ1NTY1NDU0MjA3Njk0NDIiPiJXaW5kb3dzIExpdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sWWFob28iIG1zZ2lkPSI4MjcxNDM5NDA4NDY5MDIxMjczIj4iWWFob28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sU2t5cGUiIG1zZ2lkPSI5MDE5Mjk2NzQ0NjIyODMyOTUxIj4iU2t5cGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sUXEiIG1zZ2lkPSI4ODg3NDg0Mzc5NDk0MTExODg0Ij4iUVEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sR29vZ2xlVGFsayIgbXNnaWQ9IjQ5MzkwMjMyMTE0MDI3NzMwNCI+IkfDtnLDvMWfbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xJY3EiIG1zZ2lkPSIxNTc0ODcwNDMzNjA2NTE3MzE1Ij4iSUNRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEphYmJlciIgbXNnaWQ9IjIyNzk5MTc2MzA4NzU3NzE3MjIiPiJKYWJiZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTmV0TWVldGluZyIgbXNnaWQ9IjgyODc2MjU2NTU5ODY4Mjc5NzEiPiJOZXRNZWV0aW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZVdvcmsiIG1zZ2lkPSIyOTI2ODg3MDUwNTM2Mzg3MiI+IsSwxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdUeXBlT3RoZXIiIG1zZ2lkPSIzOTUxNzgxMTMxNTcwMTI0MDgyIj4iRGlnyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZUN1c3RvbSIgbXNnaWQ9IjIyNTUyMzQxNTM3MjA4ODMyMiI+IkbJmXJkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUN1c3RvbSIgbXNnaWQ9IjM1NDI0MDM2Nzk4MjcyOTczMDAiPiLFnsmZeHNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQXNzaXN0YW50IiBtc2dpZD0iNjI3NDMzNDgyNTE5NTM3OTA3NiI+IkvDtm3JmWvDp2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVCcm90aGVyIiBtc2dpZD0iODc1NzkxMzUwNjc4NDA2NzcxMyI+IlFhcmRhxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVDaGlsZCIgbXNnaWQ9IjE4OTA3NDYyNzcyNzY4ODE2MjYiPiJVxZ9hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZURvbWVzdGljUGFydG5lciIgbXNnaWQ9IjY5MDQ4MDcxMTIxMjExMjIxMzMiPiJFdiB5b2xkYcWfxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVGYXRoZXIiIG1zZ2lkPSI1MjI4MDM0Njg3MDgyMDUwNzI1Ij4iQXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRnJpZW5kIiBtc2dpZD0iNzMxMzEwNjc2MjQ4MzM5MTI2MiI+IkRvc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNYW5hZ2VyIiBtc2dpZD0iNjM2NTY3Nzg2MTYxMDEzNzg5NSI+Ik3DvGRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZU1vdGhlciIgbXNnaWQ9IjQ1Nzg1NzEzNTI5NjI3NTgzMDQiPiJBbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVQYXJlbnQiIG1zZ2lkPSI0NzU1NjM1NTY3NTYyOTI1MjI2Ij4iVmFsaWRleW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVQYXJ0bmVyIiBtc2dpZD0iNzI2NjQ5MDI4NTEyMDI2Mjc4MSI+Ik9ydGFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUmVmZXJyZWRCeSIgbXNnaWQ9IjEwMTU3MzA1OTg0NDEzNTUyNCI+IkTJmXbJmXQgZWTJmW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVSZWxhdGl2ZSIgbXNnaWQ9IjE3OTk4MTk5MzAwODU2MTAyNzEiPiJRb2h1bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVNpc3RlciIgbXNnaWQ9IjE3MzU5ODM1NTQ0NzkwNzY0ODEiPiJCYWPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVNwb3VzZSIgbXNnaWQ9IjM5NDEzNjkzOTQyODY5ODExNyI+IkjJmXlhdCB5b2xkYcWfxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUN1c3RvbSIgbXNnaWQ9IjI0NzM1ODA1OTMxMTE1OTA5NDUiPiJGyZlyZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4ixo9zYXMgc8mZaGlmyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4ixLDFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4iRGlnyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iUMSwTiBrb2R1IGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUsgdsmZIHllbmkgUMSwTiBrb2QgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIGtvZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iWWVuaSBQSU4ga29kdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IsWeaWZyyZkgZGF4aWwgZXRtyZlrIMO8w6fDvG4gdG94dW51biI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBwYXJvbCB5YXrEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gUElOIGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiJZYW5sxLHFnyBQSU4ga29kdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIE1lbnl1LCBzb25yYSAwIGJhc8Sxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbF9kaWFsb2dfbnVtYmVyX2Zvcl9kaXNwbGF5IiBtc2dpZD0iNjk2MTkyMTAzMTk1MDkwOTcwIj4iVMmZY2lsaSBuw7ZtcsmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4OTYzODM5MjQyNTY1NjUzMTkyIj4iWGlkbcmZdCB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zY3JlZW5fbG9ja2VkIiBtc2dpZD0iNzI4ODQ0MzA3NDgwNjgzMjkwNCI+IkVrcmFuIGtpbGlkbMmZbmliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5faW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9lbmFibGVkIiBtc2dpZD0iNDYxNTQwNTE2MTQxMjYwNDkiPiJUyZljaWxpIHrJmW5nIGtpbGlkaW5pIGHDp21hcSB2yZkgeWEgeWVybMmZxZ9kaXJtyZlrIMO8w6fDvG4gTWVueXUgZMO8eW3JmXNpbsmZIGJhc8Sxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSI2ODYyNjAwMjg3OTcxNTgzNjQiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gTWVueXUgZMO8eW3JmXNpbsmZIGJhc8Sxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNzQ3ODcwMzI1NDk2NDgxMDMwMiI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBtb2RlbCDDp8mZa2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9lbWVyZ2VuY3lfY2FsbCIgbXNnaWQ9IjUzNDc2MzM3ODQ0MDEyODUyMjUiPiJUyZljaWxpIHrJmW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9yZXR1cm5fdG9fY2FsbCIgbXNnaWQ9IjUyNDQyNTk3ODU1MDAwNDAwMjEiPiJayZluZ8mZIHFhecSxdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9jb3JyZWN0IiBtc2dpZD0iOTAzOTAwODY1MDM2MjI2MTIzNyI+IkTDvHpkw7xyISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl93cm9uZyIgbXNnaWQ9IjQzMTc5NTUwMTQ5NDgxMDg3OTQiPiJCaXIgZMmZIGPJmWhkIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Bhc3N3b3JkX3dyb25nIiBtc2dpZD0iNTczNzgxNTM5MzI1MzE2NTMwMSI+IkJpciBkYWhhIGPJmWhkIGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+IlNpZsmZdCBraWxpZGkgY8mZaGRsyZlyaW5peiBiaXRkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGx1Z2dlZF9pbiIgbXNnaWQ9IjgwNTc3NjI4MjgzNTU1NzIzMTUiPiJCYXRhcmV5YSB5xLHEn8SxbMSxciwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fY2hhcmdlZCIgbXNnaWQ9IjMyMTYzNTc0NTY4NDA2MDYyNCI+IkRvbHViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9iYXR0ZXJ5X3Nob3J0IiBtc2dpZD0iNDQ3NzI2NDg0OTM4Njg1MDI2NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2xvd19iYXR0ZXJ5IiBtc2dpZD0iMTQ4Mjg3Mzk4MTkxOTI0OTc0MCI+IkVsZWt0cmlryZkgcW/Fn3VuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTk0MzkyNzc4MTkyMTUzOTkiPiJTSU0ga2FydCB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTE2NTkxOTYwOTU3OTE0NzQiPiJQbGFuxZ9ldGTJmSBTSU0ga2FydCB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjE4NjkyMDU4NTY5NTE2OTA3OCI+IlRlbGVmb25kYSBTxLBNIGthcnQgeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTM3Mjc4NzEzODAyMzI3MjYxNSI+IlPEsE0ga2FydCBkYXhpbCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSIzNTI2NTczMDk5MDE5MzE5NDcyIj4iU8SwTSBrYXJ0IHlveGR1ciB2yZkgeWEgb3h1bmEgYmlsaW5taXIuIFPEsE0ga2FydCBkYXhpbCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5NjE0OTY2NTEzODkxNjE4NCI+IllhcmFyc8SxeiBTSU0ga2FydC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iOTEwOTA0NjQzNDMzMTUxMzcxIj4iU2l6aW4gU8SwTSBrYXJ0xLFuxLF6IGRhaW1pIG9sYXJhcSBkZWFrdGl2bMmZxZ9pYi5cbiBCYcWfcWEgU8SwTSBrYXJ0IMO8w6fDvG4gc2ltc2l6IHhpZG3JmXQgcHJvdmF5ZGVyaW5pesmZIG3DvHJhY2nJmXQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjAxNTk0OTA1MTUyNzQ2ODg2Ij4ixo92dsmZbGtpIHRyZWsgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjYwODkyOTc2NTA0ODEyOTIzNjMiPiJOw7Z2YsmZdGkgdHJlayBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTkwODg3ODY3ODAxMjgwMDEiPiJQYXV6YSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTg4ODQyMjkzODM1MTAxOTQyNiI+Ik94dXRtYSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDU2MjMxODM3ODc2Njk4NzYwMSI+IkRheWFuZMSxcm1hIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsc19vbmx5IiBtc2dpZD0iNjczMzk3ODMwNDM4NjM2NTQwNyI+IllhbG7EsXogdMmZY2lsaSB6yZluZ2zJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIxNDMzODkyMjQ5ODYwMjg1MDEiPiLFnsmZYsmZa8mZIGtpbGlkbGlkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4iU0lNIGthcnQgUFVLIGlsyZkga2lsaWRsyZluaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI4MTI3OTE2MjU1MjQ1MTgxMDYzIj4ixLBzdGlmYWTJmcOnaSBUyZlsaW1hdGxhcsSxbmEgYmF4xLFuIHbJmSB5YSBNw7zFn3TJmXJpIFhpZG3JmXRsyZlyaW7JmSBtw7xyYWNpyZl0IGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI4MDY2NjYwMTI5MjA2MDAxMDM5Ij4iU0lNIGthcnQga2lsaWRsyZluaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNTk1MzIzMjE0MDUyODgxMjY0Ij4iU8SwTSBrYXJ0xLFuIGtpbGlkaSBhw6fEsWzEsXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjY0ODE2MjM4MzAzNDQxMDcyMjIiPiJTaXoga2lsaWQgbW9kZWxpbmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIMOnyZlrZGluaXouIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSBpw6dpbmTJmSB5ZW5pZMmZbiBzxLFuYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSIyNzI1OTczMjg2MjM5MzQ0NTU1Ij4ixZ5pZnLJmW5pemkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIGRheGlsIGV0ZGluaXouXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSB5ZW5pZMmZbiB5b3hsYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2MjE2NjcyNzA2NTQ1Njk2OTU1Ij4iU2l6IFBJTiBuw7ZtcsmZbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gZGF4aWwgZXRkaW5pei4gXG4gXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSBpw6dpbmTJmSB0yZlrcmFyIHPEsW5hecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI5MTkxNjExOTg0NjI1NDYwODIwIj4iU2l6IGtpbGlkaSBhw6dtYXEgw7zDp8O8biDFn2FibG9udSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgc8mZaHYgw6fJmWtkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZGFoYSB1xJ91cnN1eiBjyZloZGTJmW4gc29ucmEgcGxhbsWfZXRpbiBraWxpZGluaSBHb29nbGUgaGVzYWLEsW7EsXphIGRheGlsIG9sbWFxbGEgYcOnbWHEn8SxbsSxeiBpc3TJmW5pbMmZY8mZay5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIGJpciBkYWhhIHlveGxhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjU5MDIyNzU1OTc2Mzc2Mjc1MSI+IlNpeiBraWxpZGkgYcOnbWFxIMO8w6fDvG4gxZ9hYmxvbnUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHPJmWh2IMOnyZlrZGluaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGRhaGEgdcSfdXJzdXogY8mZaGRkyZluIHNvbnJhIHBsYW7Fn2V0aW4ga2lsaWRpbmkgR29vZ2xlIGhlc2FixLFuxLF6YSBkYXhpbCBvbG1hcWxhIGHDp21hxJ/EsW7EsXogdMmZbMmZYiBvbHVuYWNhcS5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIGJpciBkYWhhIHlveGxhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjEyODEwNjM5OTc0NTc1NTYwNCI+IlNpeiBwbGFuxZ9ldCBraWxpZGluaSBhw6dtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgdcSfdXJzdXogY8mZaGQgZXRtaXNpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkyZlmyZkgZMmZIHXEn3Vyc3V6IGPJmWhkIGV0c8mZbml6LCBwbGFuxZ9ldCBmYWJyaWsgYXlhcmxhcsSxbmEgc8SxZsSxcmxhbmFjYXEgdsmZIGLDvHTDvG4gbcmZbHVtYXRsYXLEsW7EsXogaXTJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjAzNTY1MTQyMTU2ODI2NTY1Ij4iU2l6IHRlbGVmb24ga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHXEn3Vyc3V6IGPJmWhkIGV0bWlzaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZMmZZsmZIGTJmSB1xJ91cnN1eiBjyZloZCBldHPJmW5peiwgdGVsZWZvbiB6YXZvZCBheWFybGFyxLFuYSBzxLFmxLFybGFuYWNhcSB2yZkgYsO8dMO8biBtyZlsdW1hdGxhcsSxbsSxeiBpdMmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyODA4NzM1MTY0OTM5MzQzNjUiPiJTaXogcGxhbsWfZXRpbiBraWxpZGluaSBhw6dtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4geWFubMSxxZ8gY8mZaGQgZXRtaXNpbml6LiBQbGFuxZ9ldCBhcnTEsXEgZGVmb2x0IHphdm9kIGhhbMSxbmEgc8SxZsSxcmxhbmFjYXEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiJTaXogdGVsZWZvbnVuIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBkyZlmyZkgc8mZaHYgY8mZaGQgZXRkaW5pei4gVGVsZWZvbnVudXogaW5kaSB6YXZvZCBuaXphbWxhcsSxbmEgeWVuaWzJmW7JmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjI1MTQ4MDM0MzM5NDM4OTY2NSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSBiaXIgZGFoYSBjyZloZCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSIyNjI2OTk5NDQ5NjEwNjk1OTMwIj4ixZ5hYmxvbnUgdW51dGR1bnV6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+Ikhlc2FiIGtpbGlkIGHDp21hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSIyNzUxMzY4NjA1Mjg3Mjg4ODA4Ij4iSMmZZGRpbmTJmW4gw6dveCBjyZloZCBlZGlsZGkhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzkzMTgxNjI1NjEwMDcwNzc4NCI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBHb29nbGUgaGVzYWLEsW7EsXogaWzJmSBkYXhpbCBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI4ODQ2ODgxNDI0MTA2NDg0NDQ3Ij4ixLBzdGlmYWTJmcOnaSBhZMSxIChlLXBvw6d0KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI1OTU4MDI4MzgzOTU0NzM4NTI4Ij4ixZ5pZnLJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4iRGF4aWwgb2x1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSIxMzY0MDUxNDczMzQ3NDg1OTA4Ij4iWWFubMSxxZ8gaXN0aWZhZMmZw6dpIGFkxLEgdsmZIHBhcm9sLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjE2OTY5MjQ3NjM2OTAzNzkwNzMiPiLEsHN0aWZhZMmZw6dpIGFkxLFuxLF6xLEgdsmZIHlhIHBhcm9sdW51enUgdW51dG11c3VudXo/XG4gIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iIGxpbmtpbsmZIGRheGlsIG9sdW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSI3MTE0NjI3MzUxMjg2OTMzODY3Ij4iWW94bGFuxLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl91bmxvY2tfbGFiZWwiIG1zZ2lkPSI3Mzc0NDA0ODMyMjA2NjcwNTQiPiJLaWxpZGkgYcOnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zb3VuZF9vbl9sYWJlbCIgbXNnaWQ9IjkwNjg4Nzc1NzY1MTM0MjU5NzAiPiJTyZlzIGHDp8SxcWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29mZl9sYWJlbCIgbXNnaWQ9Ijk5NjgyMjgyNTE1NDMxOTAyNiI+IlPJmXMgc8O2bsO8bMO8ZMO8ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fc3RhcnQiIG1zZ2lkPSIzOTQxMDQ1NTAyOTMzMTQyODQ3Ij4iTW9kZWwgYmHFn2xhbmTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fY2xlYXJlZCIgbXNnaWQ9IjU1ODM0Nzk3MjEwMDE2Mzk1NzkiPiJNb2RlbCB0yZltaXpsyZluZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NlbGxfYWRkZWQiIG1zZ2lkPSI2NzU2MDMxMjA4MzU5MjkyNDg3Ij4iWGFuYSDJmWxhdsmZIGVkaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fZGV0ZWN0ZWQiIG1zZ2lkPSI0OTg4NzMwODk1NTU0MDU3MDU4Ij4iTW9kZWwgdGFtYW1sYW5kxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuIFdpZGdldCAlMiRkIG9mICUzJGQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IldpZGdldCDJmWxhdsmZIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiJCb8WfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiJLaWxpZGkgYcOnbWEgc2FoyZlzaSBnZW5pxZ9syZluZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4iS2lsaWRpIGHDp21hIHNhaMmZc2kgw6fDtmtkw7wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gdmlkY2V0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiLEsHN0aWZhZMmZw6dpIHNlbGVrdG9ydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IlN0YXR1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+IkthbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJNZWRpYSBrb250cm9sbGFyxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+IlllbmlkyZluIHPEsXJhbGFtYSB2aWRjZXRpIGJhxZ9sYWTEsWxkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4iVmlkY2V0aW4gdMmZa3JhciBzaWZhcmnFn2kgc29uYSDDp2F0ZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4iVmlkY2V0IDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHNpbGluZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4iS2lsaWRpIGHDp21hIHNhaMmZc2luaSBnZW5pxZ9syZluZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IlPDvHLDvMWfZMO8cm3JmSBraWxpZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiJLaWxkIGHDp21hIG1vZGVsaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IlNpZsmZdCBLaWxpZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUGluIGtpbGlkIGHDp21hc8SxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IsWeaWZyyZkga2lsaWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+Ik1vZGVsIHNhaMmZc2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IlPDvHLDvMWfZMO8cm3JmSBzYWjJmXNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfY2hhcmFjdGVyIiBtc2dpZD0iNzMzNjQ3MDUzNTM4NTAwOTUyMyI+InNpbXZvbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX3dvcmQiIG1zZ2lkPSI3MDc1NTcwMzI4Mzc0OTE4NjYwIj4ic8O2eiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2xpbmsiIG1zZ2lkPSI1ODE1NTA4ODgwNzgyNDg4MjY3Ij4ibGluayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2xpbmUiIG1zZ2lkPSI1NzY0MjY3MjM1MDI2MTIwODg4Ij4ieMmZdHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX2FtcG0iIG1zZ2lkPSI0NTg0MzM4MDgzNTI5MzU1OTgyIj4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JVA8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9jYXBfYW1wbSIgbXNnaWQ9IjIwODM0NjU5OTI5NDA0NDQzNjYiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lcDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9mYWlsZWQiIG1zZ2lkPSI1NDEwMjcwMzI5MTE0MjEyMDQxIj4iWmF2b2QgdGVzdGkgYWzEsW5tYWTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vdF9zeXN0ZW0iIG1zZ2lkPSI0NDM1MjAxNjU2NzY3Mjc2NzIzIj4iQnUgRkFDVE9SWV9URVNUIGbJmWFsaXl5yZl0aSB5YWxuxLF6Y2Evc2lzdGVtZMmZL3TJmXRiaXFkyZkgcXVyYcWfZMSxcsSxbG3EscWfIHBha2V0bMmZciDDvMOnw7xuIGTJmXN0yZlrbMmZbmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+IkZBQ1RPUllfVEVTVCDJmW3JmWxpeXlhdMSxbsSxIHTJmXNkaXFsyZl5yZluIGhlw6cgYmlyIHBha2V0IHRhcMSxbG1hZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X3JlYm9vdCIgbXNnaWQ9IjYzMjAxNjgyMDMwNTA3OTE2NDMiPiJZZW5pZMmZbiB5w7xrbMmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMTk4NzQ4Mzk3NzgzNDYwMzg3MiI+IlwiPHhsaWZmOmcgaWQ9IlRJVExFIj4lczwveGxpZmY6Zz5cImRha8SxIHPJmWhpZsmZZMmZIGRleWlsaXI6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI2OTYxOTAzMjEzNzI5NjY3NTczIj4iSmF2YVNjcmlwdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3RpdGxlIiBtc2dpZD0iMjYxOTM3NjU1NTUyNTExNjU5MyI+Ik5hdmlxYXNpeWFuxLEgVMmZc2RpcSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfcG9zaXRpdmVfYnV0dG9uIiBtc2dpZD0iMzExMjc1MjAxMDYwMDQ4NDEzMCI+IkJ1IFPJmWhpZsmZbmkgVMmZcmsgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX25lZ2F0aXZlX2J1dHRvbiIgbXNnaWQ9IjU2MTQ4NjEyOTMwMjYwOTk3MTUiPiJCdSBzyZloaWbJmWTJmSBxYWzEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZCIgbXNnaWQ9IjM0Njg4MTYzNTcwOTUzNzg1OTAiPiI8eGxpZmY6ZyBpZD0iTUVTU0FHRSI+JXM8L3hsaWZmOmc+XG5cbkJ1IHPJmWhpZsmZZMmZbiBryZluYXJhIG5hdmlxYXNpeWEgZXRtyZlrIGlzdMmZZGl5aW5pesmZIMmZbWluc2luaXogbWk/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9sYWJlbCIgbXNnaWQ9IjY4NjAyNjE3NTg2NjU4MjUwNjkiPiJUyZlzZGlxbMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG91YmxlX3RhcF90b2FzdCIgbXNnaWQ9IjQ1OTUwNDY1MTU0MDAyNjg4ODEiPiJNyZlzbMmZaMmZdDogQsO2ecO8dG3JmWsgdsmZIGtpw6dpbHRtyZlrIMO8w6fDvG4gaWtpIGTJmWbJmSB0xLFrbGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3RoaXNfZm9ybSIgbXNnaWQ9IjQ2MTY3NTg4NDExNTc4MTY2NzYiPiJBdnRvZG9sZHVybWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXR1cF9hdXRvZmlsbCIgbXNnaWQ9IjcxMDM0OTUwNzAxODA1OTA4MTQiPiJBdnRvRG9sZHVybWFuxLEgYXlhcmxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19uYW1lX3NlcGFyYXRvciIgbXNnaWQ9IjYzNTAxNDUxNTQ3Nzk3MDY3NzIiPiIgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X25hbWVfZm9ybWF0IiBtc2dpZD0iMzI2ODA0MTA1NDg5OTIxNDk0NSI+IiQxJDIkMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9zZXBhcmF0b3IiIG1zZ2lkPSI3NDgzMzA3ODkzMTcwMzI0MTI5Ij4iLCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfZm9ybWF0IiBtc2dpZD0iNDg3NDQ1OTQ1NTc4NjgyNzM0NCI+IiQxJDIkMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3Byb3ZpbmNlIiBtc2dpZD0iMjIzMTgwNjU1Mzg2MzQyMjMwMCI+IlZpbGF5yZl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcG9zdGFsX2NvZGUiIG1zZ2lkPSI0Njk2NDMwNDA3Njg5Mzc3MTA4Ij4iUG/Dp3Qga29kdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3N0YXRlIiBtc2dpZD0iNjk4ODg5NDE5NTUyMDA0NDYxMyI+IkTDtnZsyZl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfemlwX2NvZGUiIG1zZ2lkPSI4Njk3NTQ0NTkyNjI3MzIyOTQ2Ij4iUG/Dp3QgaW5kZWtzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2NvdW50eSIgbXNnaWQ9IjIzNzA3Mzc3MTAyMDM2Mjg5MSI+IsOWbGvJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2lzbGFuZCIgbXNnaWQ9IjQwMjAxMDA4NzU5ODQ2NjcwMjUiPiJBZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kaXN0cmljdCIgbXNnaWQ9Ijg0MDA3MzUwNzMzOTIyNjc2NzIiPiJTYWjJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2RlcGFydG1lbnQiIG1zZ2lkPSI1MzQzMjc5NDYyNTY0NDUzMzA5Ij4iRGVwYXJ0YW1lbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcmVmZWN0dXJlIiBtc2dpZD0iMjAyODQ5OTQ4NTA2NTgwMDQxOSI+IlByZWZla3R1cmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wYXJpc2giIG1zZ2lkPSI4MjAyMjA2MTA1NDY4ODIwMDU3Ij4iUGFyacWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYXJlYSIgbXNnaWQ9IjM1NDc0MDkwNTA4ODk5NTI0MjMiPiJTYWjJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2VtaXJhdGUiIG1zZ2lkPSIyODkzODgwOTc4ODM1Njk4ODE4Ij4ixo9taXJsaWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzc3NTI2NTc3NTQwNTEwNjk4MyI+IlZlYiDJmWxmyZljaW5syZlyaW5pemkgdsmZIHRhcml4w6fJmWzJmXJpbml6aSBveHVtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9Ijg0NjIzNzgyMjY2MDA0Mzk2NTgiPiJUyZl0YmlxyZkgQnJhdXplcmluIGRheGlsIG9sZHXEn3UgYsO8dMO8biBsaW5rbMmZcmkgdsmZIGLDvHTDvG4gQnJhdXplciDJmWxmyZljaW5syZlyaW5pIG94dW1hcSBpbWthbsSxIHZlcmlyLiBRZXlkOiBidSBpY2F6yZkgdmViIGJyYXV6ZXIgaW1rYW5sYXLEsSBvbGFuIMO8w6fDvG5jw7wgdMmZcsmZZiBicmF6dWVybMmZcmkgdsmZIGRpZ8mZciB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIHllcmluyZkgeWV0aXJpbMmZIGJpbG3JmXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzE0Nzg1MTY1MjczMzE0NDkwIj4idmViIMmZbGbJmWNpbmzJmXJpIHbJmSB0YXJpeMOnyZlzaSB5YXptYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY4MjU1Mjc0NjkxNDU3NjA5MjIiPiJUyZl0YmlxyZkgcGxhbsWfZXRpbml6ZMmZa2kgYnJhdXplciB0YXJpeGluaSB2yZkgyZlsZsmZY2lubMmZcmkgcmVkYWt0yZkgZXRtyZlrIGljYXrJmXNpIHZlcmlyLiBCdSB0yZl0Yml6yZkgYnJhdXplciBtyZlsdW1hdGxhcsSxbsSxIHNpbG3JmWsgdsmZIHlhIHJlZGFrdMmZIGV0bcmZayBpbWthbsSxIHZlcsmZIGJpbMmZci4gUWV5ZDogQnUgaWNhesmZIDMtY8O8IHBhcnRpeWEgYnJhdXplcmzJmXLJmSB2yZkgeWEgdmViIGJyYXV6aW5nIHjDvHN1c2l5ecmZdGxpIGRpZ8mZciB0yZl0YmlxbMmZcsmZIMWfYW1pbCBvbHVubWF5YSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ5NzM4OTUzMTAxNDE4NTUwOSI+IlTJmXRiaXHJmSBCcmF1emVyIHRhcml4w6fJmXNpIHbJmSB0ZWxlZm9udW51emRhIHNheGxhbsSxbGFuIMmZbGbJmWNpbmzJmXLJmSBkyZl5acWfaWtsaWsgZXRtyZlrIGlta2FuxLEgdmVyaXIuIEJ1bnVubGEgdMmZdGJpcWzJmSBCcmF1emVyIGRhdGFuxLF6xLEgc2lsyZkgdsmZIHlhIGTJmXlpxZ9kaXLJmSBiaWzJmXIuIFFleWQ6IGJ1IGljYXrJmSB2ZWIgYnJhdXplciBpbWthbmxhcsSxIG9sYW4gw7zDp8O8bmPDvCB0yZlyyZlmIGJyYXp1ZXJsyZlyaSB2yZkgZGlnyZlyIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4geWVyaW7JmSB5ZXRpcmlsyZkgYmlsbcmZei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsYXJtIiBtc2dpZD0iMTM3OTI5NDU1NjM2MjA5MTgxNCI+InNpcW5hbCBxdXJ1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsYXJtIiBtc2dpZD0iMzE2MzkyMDM5MTU3NDczODQ4Ij4iVMmZdGJpccmZIHF1cmHFn2TEsXJsbcSxxZ8gesmZbmdsaSBzYWF0YSBhbGFybSBheWFybGFtYcSfYSBpbWthbiB2ZXJpci4gQsmZemkgesmZbmdsaSBzYWF0IHTJmXRiaXFsyZlyaSBidSDDtnrJmWxsaXlpIGTJmXN0yZlrbMmZbcmZecmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjU1MjU2NjAwMjYwOTA5NTkwNDQiPiJTyZlzbGkgcG/Dp3QgyZlsYXbJmSBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjY2MDQ1MDg2NTE0MjgyNTI0MzciPiJUyZl0YmlxyZkgc8mZc2xpIHBvw6d0IHF1dHVudXphIG1lc2FqIMmZbGF2yZkgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSI1OTYyMjI0MTU4OTU1MjczOTMyIj4iQnJhdXplcmluIGdlb2xva2FzaXlhIGljYXrJmWzJmXJpbmkgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iMTA4Mzc0MzIzNDUyMjYzODc0NyI+IlTJmXRiaXHJmSBCcmF1emVyaW4gZ2VvbG9rYXNpeWEgaWNhesmZbMmZcmluaSBkyZl5acWfbcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZayBtyZlrYW4gbcmZbHVtYXRsYXLEsW7EsSB0yZlzYWTDvGZpIHNheXRsYXJhIGfDtm5kyZlyyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iNTU2ODEzOTEwMDY0NTgyOTExNyI+InBha2V0bMmZcmkgdMmZc2RpcWzJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9Ijg0Mzc1OTAxOTA5OTA4NDMzODEiPiJUyZl0YmlxyZkgcGFrZXRpbiBxdXJhxZ9kxLFyxLFsYWJpbMmZbiBvbG1hc8SxbsSxIHlveGxhbWHEn2EgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iNDE4Nzc4Njc5MzM2MDMyNjY1NCI+InBha2V0IGRvxJ9ydWxhecSxY8SxeWEgYmHEn2xhbsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSIzMTgwNzQxNzczMjMzODYyMTI2Ij4iU2FoaWJpbsmZIHBha2V0IHlveGxhecSxY8SxbGFyxLFuYSBzb3LEn3UgZ8O2bmTJmXJtyZlrIGljYXrJmXNpIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBoZcOnIHZheHQgaXN0yZluaWxtyZltyZlsaWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlcmlhbFBvcnQiIG1zZ2lkPSI1NDYwODMzMjc2NTQ2MzEwNzYiPiJzZXJpYWwgcG9ydGEgw6fEsXjEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXJpYWxQb3J0IiBtc2dpZD0iMjk5MTYzOTk4NTIyNDU5ODE5MyI+IlNhaGliaW7JmSBTZXJpYWxNYW5hZ2VyIEFQSSB2YXNpdMmZc2lsyZkgc2VyaWFsIHBvcnRsYXJhIGljYXrJmSBpem5pIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI1MDc3Nzc0Mjk3OTQzNDA5Mjg1Ij4ieGFyaWNpIGtvbnRlbnQgcHJvdmF5ZGVybMmZcmluyZkgZ2lyacWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI0NTQ0MzQ2NDg2Njk3ODUzNjg1Ij4iTcmZem11biBwcm92YXlkZXJsyZlyaW7JmSDDtnJ0w7xrZMmZbiBkYXhpbCBvbG1hcSDDvMOnw7xuIGNpaGF6IHNhaGliaW7JmSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gbGF6xLFtIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlTG9jayIgbXNnaWQ9IjM1Mjc1NTgzNjY2MTY2ODA4ODkiPiJhdnRvbWF0aWsgY2loYXogeWVuaWzJmW5tyZlsyZlyaW5pIHBvenVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlTG9jayIgbXNnaWQ9IjE2NTU2MjU4MzIxNjY3Nzg0OTIiPiJTYWhpYmluyZkgeWVuaSB2ZXJzaXlheWEgeWVuaWzJmW5tyZlrIMO8w6fDvG4gbsmZIHZheHQgcWV5cmktaW50ZXJha3RpdiByZWJvb3QgbcmZbHVtYXTEsW7EsSBzaXN0ZW3JmSB0yZlrbGlmIGV0bcmZIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbWVzc2FnZSIgbXNnaWQ9Ijc2NzM0NDY4NzEzOTE5NTc5MCI+IkJyYXV6ZXJpbiBidSDFn2lmcsmZbmkgeWFkZGEgc2F4bGFtYXPEsW7EsSBpc3TJmXlpcnNpej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25vdG5vdyIgbXNnaWQ9IjYzODk2NzUzMTY3MDY2OTk3NTgiPiLEsG5kaSB5b3giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX3JlbWVtYmVyIiBtc2dpZD0iNjQ5MTg3OTY3ODk5Njc0OTQ2NiI+IllhZGRhIHNheGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9uZXZlciIgbXNnaWQ9IjgyNzQzMzAyOTY3ODU4NTUxMDUiPiJIZcOnIHZheHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcGVuX3Blcm1pc3Npb25fZGVueSIgbXNnaWQ9IjczNzQwMzY3MDgzMTY2Mjk4MDAiPiJCdSBzyZloaWbJmW5pIGHDp21hcSDDvMOnw7xuIGljYXrJmW5peiB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV4dF9jb3BpZWQiIG1zZ2lkPSI0OTg1NzI5NTI0NjcwMTMxMzg1Ij4iTcmZdG4gcGFub3lhIGtvcHlhbGFuZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vcmVfaXRlbV9sYWJlbCIgbXNnaWQ9IjQ2NTA5MTg5MjMwODMzMjA0OTUiPiJEYWhhIMOnb3giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwZW5kX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjU3MjIxNDQ2MTY3NjAxNTY0MiI+Ik1lbnl1KyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc3BhY2Vfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIyNDEwMzI4NjM5MjcyMTYyNTM3Ij4iYm/Fn2x1cSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZW50ZXJfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIyNzQzMzYyNzg1MTExMzA5NjY4Ij4iZGF4aWwgb2x1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMzY1ODE3ODAwNzIwMjc0ODE2NCI+InNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaF9nbyIgbXNnaWQ9IjgyOTgwMTY2Njk4MjIxNDE3MTkiPiJBeHRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc2VhcmNoIiBtc2dpZD0iNjc0OTgyNjYzOTA5ODUxMjEyMCI+IkF4dGFyxLHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fcXVlcnkiIG1zZ2lkPSI1OTExNzc4NTkzMTI1MzU1MTI0Ij4iQXh0YXLEscWfIHNvcsSfdXN1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9jbGVhciIgbXNnaWQ9IjEzMzAyODE5OTA5NTE4MzMwMzMiPiJTb3LEn3VudSB0yZltaXpsyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3N1Ym1pdCIgbXNnaWQ9IjI2ODg0NTAxMzMyOTc5ODM1NDIiPiJTb3LEn3VudSBnw7ZuZMmZcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl92b2ljZSIgbXNnaWQ9IjI0NTMyMDM2OTU2NzQ5OTQ0NDAiPiJTyZlzbGkgYXh0YXLEscWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ190aXRsZSIgbXNnaWQ9Ijc0NjA2OTQwNzAzMDk3MzAxNDkiPiJUb3h1bmFyYXEgS8mZxZ9mIGV0IGZ1bmtzaXlhc8SxIGFrdGl2IGVkaWxzaW4/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NjU1ODg3NTM5MDg5OTEwNTc3Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBUb3h1bmFyYXEgS8mZxZ9mIEV0IHJlamltaW5pIGFrdGl2bMmZxZ9kaXJtyZlrIGlzdMmZeWlyLiBUb3h1bmFyYXEgS8mZxZ9mIEV0IGHDp8SxbGTEscSfxLEgemFtYW4sIGJhcm1hxJ/EsW7EsXrEsW4gYWx0xLFuZGEgbsmZIG9sZHXEn3UgaGFxZGEgb2xhbiB0yZlzdmlybMmZcmkgZcWfaWTJmSB2yZkgeWEgZ8O2csmZIGJpbMmZcnNpbml6IHbJmSB5YXBsYW7Fn2V0ZMmZIGluc2FubGFybGEgyZlsYXHJmXnJmSBrZcOnbcmZayDDvMOnw7xuIGplc3RsyZlyIGjJmXlhdGEga2XDp2lyyZkgYmlsyZlyc2luaXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjcwODE5OTY3Mjg1MjM3MzE5NSI+Ijx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gVG94dW5hcmFxIEvJmcWfZiBFdCByZWppbWluaSBha3RpdmzJmcWfZGlybcmZayBpc3TJmXlpci4gVG94dW5hcmFxIEvJmcWfZiBFdCBhw6fEsWxkxLHEn8SxIHphbWFuLCBiYXJtYcSfxLFuxLF6xLFuIGFsdMSxbmRhIG7JmSBvbGR1xJ91IGhhcWRhIG9sYW4gdMmZc3ZpcmzJmXJpIGXFn2lkyZkgdsmZIHlhIGfDtnLJmSBiaWzJmXJzaW5peiB2yZkgeWEgdGVsZWZvbmRhIGluc2FubGFybGEgyZlsYXHJmXnJmSBrZcOnbcmZayDDvMOnw7xuIGplc3RsyZlyIGjJmXlhdGEga2XDp2lyyZkgYmlsyZlyc2luaXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjczOTYzODQ1MDg5NTM3Nzk5MjUiPiIxIGF5IMO2bmPJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJlZm9yZU9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iOTA5MTM0NTQ2ODM2NDk5ODI2Ij4iMSBheSDJmXZ2yZlsIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJudW1fc2Vjb25kc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0ODY5ODcwMDU2NTQ3ODk2MDExIj4iMSBzYW5pecmZIMmZdnbJmWwiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM5MDM3MDY4MDQzNDk1NTYzNzkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZdnbJmWwiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9taW51dGVzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMzMDY3ODc0MzMwODg4MTAxOTEiPiIxIGTJmXFpccmZIMmZdnbJmWwiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIxNzY5NDIwMDg5MTU0NTUxMTYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBkyZlxaXHJmSDJmXZ2yZlsIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJudW1faG91cnNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iOTE1MDc5Nzk0NDYxMDgyMTg0OSI+IjEgc2FhdCDJmXZ2yZlsIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDY3MjczMjM5NTg3NTg3NTY5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FhdCDJmXZ2yZlsIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJsYXN0X251bV9kYXlzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMDY5OTkyODA4MTY0MzE4MjY4Ij4iU29uIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGfDvG4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJsYXN0X21vbnRoIiBtc2dpZD0iMzk1OTM0NjczOTk3OTA1NTQzMiI+Iktlw6fJmW4gYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRlciIgbXNnaWQ9IjUyMTE5NzUwMjI4MTU1NTQ4NDAiPiJLw7ZobsmZIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJudW1fZGF5c19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NjEzNTg1MzQzOTgxMTU4MjAiPiJkw7xuyZluIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDc5NTg2NDY2MTUzMzE0NjMzIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gZ8O8biDJmXZ2yZlsIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJpbl9udW1fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjI3Mjk3NDU1NjA5NTQ5MDUxMDIiPiIxIHNhbml5yZkgyZlyemluZMmZIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMjQxOTI2MTE2NDQzOTc0Njg3Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSBpw6dpbmTJmSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX21pbnV0ZXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NzkzMDk1MjUxMzI1MjAwMzk1Ij4iMSBkyZlxaXHJmSBpw6dpbmTJmSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzMzMDcxMzkzNjM5OTQ0ODc0OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGTJmXFpccmZIMmZcnppbmTJmSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNzE2NDM1MzM0MjQ3Nzc2OTk5OSI+IjEgc2FhdGEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzI5MDY3NzM1MzcyNzM4OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhYXRhIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJpbl9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU0MTMwODg3NDMwMDk4Mzk1MTgiPiJzYWJhaCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTEwOTQ0OTM3NTEwMDk1MzI0NyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGfDvG4gyZlyemluZMmZIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX3NlY29uZHNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTg0OTAzNjg0MDIwMDA2OTExOCI+IjEgc2FuaXnJmSDJmXZ2yZlsIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNjk5MTY5MzY2NjUwOTMwNDE1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FuIMmZdnbJmWwiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9udW1fbWludXRlc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2MzYxNDkwMTQ3MTEzODcxNTQ1Ij4iMSBkyZlxaXHJmSDJmXZ2yZlsIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NTExNjQ5Njg1OTcxNTA3MTAiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBkyZlxaXHJmSDJmXZ2yZlsIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2hvdXJzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ3OTYyMTIwMzk3MjQ3MjIxMTYiPiIxIHNhYXQgyZl2dsmZbCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjg4OTk3MDc0NTc0ODUzODkwMSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhYXQgyZl2dsmZbCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9kYXlzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg0NjMxNjE3MTE0OTI2ODAzMDkiPiJkw7xuyZluIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNDUzMzQyNjM5NjE2NDgxMTkxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gZ8O8biDJmXZ2yZlsIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX3NlY29uZHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODQyMjI1MzcwNzk1MDY2Mjk5Ij4iMSBzYW4gyZlyemluZMmZIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDk1ODgwMTA4ODI1ODA1MTA4Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FuIMmZcnppbmTJmSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTYyNzg2MTQ5OTI4Mjg0ODc4Ij4iMSBkyZlxIMmZcnppbmTJmSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDIxNjExMzI5MjcwNjU2ODcyNiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGTJmXFpccmZecmZIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI3NDcwODExODEyNDA0NTI0NiI+IjEgc2FhdCDJmXJ6aW5kyZkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM3MDUzNzM3NjY3OTgwMTM0MDYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYWF0YSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9kYXlzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjE3ODU3NjI1NDM4NTczOTg1NSI+InNhYmFoIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyOTczMDYyOTY4MDM4MzU1OTkxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gZ8O8bsmZIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX2RhdGUiIG1zZ2lkPSI5MDkzOTQ5NzU3NzU3NDQ1MTE3Ij4iPHhsaWZmOmcgaWQ9IkRBVEUiPiVzPC94bGlmZjpnPiB0YXJpeGluZMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3RpbWUiIG1zZ2lkPSI1NTA2ODMxMjQ0MjYzMDgzNzkzIj4ic2FhdCA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3llYXIiIG1zZ2lkPSI1MDQwMzk1NjQwNzExODY3MTc3Ij4iPHhsaWZmOmcgaWQ9IllFQVIiPiVzPC94bGlmZjpnPiBpbGluZMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5IiBtc2dpZD0iODE0NDE5NTc3NjA1ODExOTQyNCI+ImfDvG4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlzIiBtc2dpZD0iNDc3NDU0NzY2MTAyMTM0NDYwMiI+ImfDvG5syZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91ciIgbXNnaWQ9IjIxMjY3NzE5MTY0MjYxODk0ODEiPiJzYWF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cnMiIG1zZ2lkPSI4OTQ0MjQwMDUyNjY4NTI5OTMiPiJzYWF0bGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlIiBtc2dpZD0iOTE0ODg3ODY1NzcwMzc2OTg2OCI+ImTJmXEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlcyIgbXNnaWQ9IjU2NDYwMDEwMDU4MjcwMzQ1MDkiPiJkyZlxaXHJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlY29uZCIgbXNnaWQ9IjMxODQyMzU4MDgwMjE0NzgiPiJzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlY29uZHMiIG1zZ2lkPSIzMTYxNTE1MzQ3MjE2NTg5MjM1Ij4ic2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VlayIgbXNnaWQ9IjU2MTc5NjE1MzcxNzMwNjE1ODMiPiJoyZlmdMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2Vla3MiIG1zZ2lkPSI2NTA5NjIzODM0NTgzOTQ0NTE4Ij4iaMmZZnTJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXIiIG1zZ2lkPSI0MDAxMTE4MjIxMDEzODkyMDc2Ij4iaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFycyIgbXNnaWQ9IjY4ODE1Nzc3MTc5OTMyMTM1MjIiPiJpbCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY5NjIwMTU1MjgzNzI5Njk0ODEiPiIxIHNhbml5yZkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjE4ODYxMDc3NjY1NzcxNjY3ODYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYW5pecmZIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJkdXJhdGlvbl9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDkxNTQxNDAwMjU0NjA4NTYxNyI+IjEgZMmZcWlxyZkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMxNjUxODcxNjkyMjQ5MDg3NzUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBkyZlxaXHJmSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25faG91cnMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4OTE3NDY3NDkxMjQ4ODA5OTcyIj4iMSBzYWF0IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzODYzOTYyODU0MjQ2NzczOTMwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FhdCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90aXRsZSIgbXNnaWQ9IjM1MzQ1MDkxMzU0MzgzNTMwNzciPiJWaWRlbyBwcm9ibGVtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X2ludmFsaWRfcHJvZ3Jlc3NpdmVfcGxheWJhY2siIG1zZ2lkPSIzMTg2NjcwMzM1OTM4NjcwNDQ0Ij4iQnUgdmlkZW8gYnUgY2loYXphIHN0cmltIG9sdW5tYXEgw7zDp8O8biB1ecSfdW4gZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX3RleHRfdW5rbm93biIgbXNnaWQ9IjM0NTA0MzkxNTUxODc4MTAwODUiPiJCdSB2aWRlbyBveHVtdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfYnV0dG9uIiBtc2dpZD0iMjgyMjIzODIxNTEwMDY3OTU5MiI+Ik9LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpdmVfdGltZSIgbXNnaWQ9IjE4MTg1NTcxNzc4Mjk0MTE0MTciPiI8eGxpZmY6ZyBpZD0iREFURSI+JTEkczwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vb24iIG1zZ2lkPSI3MjQ1MzUzNTI4ODE4NTg3OTA4Ij4iZ8O8bm9ydGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJOb29uIiBtc2dpZD0iMzM0MjEyNzc0NTIzMDAxMzEyNyI+IkfDvG5vcnRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWlkbmlnaHQiIG1zZ2lkPSI3MTY2MjU5NTA4ODUwNDU3NTk1Ij4iZ2VjyZl5YXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Ik1pZG5pZ2h0IiBtc2dpZD0iNTYzMDgwNjkwNjg5Nzg5MjIwMSI+IkdlY8mZeWFyxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGFwc2VkX3RpbWVfc2hvcnRfZm9ybWF0X21tX3NzIiBtc2dpZD0iNDQzMTU1NTk0MzgyODcxMTQ3MyI+Ijx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMSQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMiQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9oX21tX3NzIiBtc2dpZD0iMTg0NjA3MTk5NzYxNjY1NDEyNCI+Ijx4bGlmZjpnIGlkPSJIT1VSUyI+JTEkZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUyJDAyZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUzJDAyZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RBbGwiIG1zZ2lkPSI2ODc2NTE4OTI1ODQ0MTI5MzMxIj4iSGFtxLFzxLFuxLEgc2XDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJLyZlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3B5YWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iWWVybMmZxZ9kaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IsaPdsmZeiBldC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJTaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCBrb3B5YWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iTcmZdG4gc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Ik3JmXRuIHNlw6dpbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iTMO8xJ/JmXTJmSDJmWxhdsmZIGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJTaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnB1dE1ldGhvZCIgbXNnaWQ9IjE2NTM2MzAwNjIzMDQ1Njc4NzkiPiJEYXhpbGV0bcmZIG1ldG9kdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVkaXRUZXh0TWVudVRpdGxlIiBtc2dpZD0iNDkwOTEzNTU2NDk0MTgxNTQ5NCI+Ik3JmXRuIMmZbcmZbGl5eWF0bGFyxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RpdGxlIiBtc2dpZD0iNTU3NjI3MjQ5NjM2NTY4NDgzNCI+IllhZGRhxZ8geWVyaSBiaXRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGV4dCIgbXNnaWQ9IjY2NDA1MDU4MTc2MTc0MTQzNzEiPiJCyZl6aSBzaXN0ZW0gZnVua3NpeWFsYXLEsSBpxZ9syZltyZl5yZkgYmlsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX3J1bm5pbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODcxODMzNTEyMTA2MDc4NzkxNCI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gacWfbMmZbmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX3J1bm5pbmdfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI0NjUzNTg2OTQ3NzQ3MzMwMDU4Ij4iRGFoYSDDp294IG3JmWx1bWF0IMO8w6fDvG4gdsmZIHlhIHTJmXRiaXFpIGRheWFuZMSxcm1hcSDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2siIG1zZ2lkPSI1OTcwMDYwNDMwNTYyNTI0OTEwIj4iT0siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI2NDQyNTYwNTcxMjU5OTM1MTMwIj4iTMmZxJ92IGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVzIiBtc2dpZD0iNTM2Mjk4MjMwMzMzNzk2OTMxMiI+Ik9LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm8iIG1zZ2lkPSI1MTQxNTMxMDQ0OTM1NTQxNDk3Ij4iTMmZxJ92IGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlhbG9nX2FsZXJ0X3RpdGxlIiBtc2dpZD0iMjA0OTY1ODcwODYwOTA0MzEwMyI+IkRpcXHJmXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2FkaW5nIiBtc2dpZD0iNzkzMzY4MTI2MDI5NjAyMTE4MCI+IlnDvGtsyZluaXLigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29uIiBtc2dpZD0iMTU0NDY4Mjc1NTUxNDQ5NDI5OCI+IkHDh0lRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vZmYiIG1zZ2lkPSI2ODE1ODcwMzg2OTcyODA1ODMyIj4iUUFQQUxJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2hpY2hBcHBsaWNhdGlvbiIgbXNnaWQ9IjQ1MzMxODU5NDcwNjQ3NzMzODYiPiLGj23JmWxpeXlhdMSxIHRhbWFtbGF5xLFuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c1VzZSIgbXNnaWQ9IjQ1ODMwMTgzNjgwMDA2MTA0MzgiPiJCdSBmyZlhbGl5ecmZdCDDvMOnw7xuIGRlZm9sdCBpc3RpZmFkyZkgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNsZWFyRGVmYXVsdEhpbnRNc2ciIG1zZ2lkPSIzMjUyNTg0Njg5NTEyMDc3MjU3Ij4iU2lzdGVtIGF5YXJsYXLEsW5kYSwgVMmZdGJpcWzJmXJkyZkgdsmZIEVuZGlyaWxtacWfbMmZcmTJmSBkZWZvbHR1IHTJmW1pemzJmXlpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiJGyZlhbGl5ecmZdCBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VVc2JBY3Rpdml0eSIgbXNnaWQ9IjY4OTQ3NDg0MTYwNzM1ODM1MDkiPiJVU0IgY2loYXogw7zDp8O8biB0yZl0YmlxIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vQXBwbGljYXRpb25zIiBtc2dpZD0iMjk5MTgxNDI3MzkzNjUwNDY4OSI+Ikhlw6cgYmlyIHTJmXRiaXEgYnUgyZltyZlsaXl5YXTEsSBhcGFyYSBiaWxtaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWVycl90aXRsZSIgbXNnaWQ9IjE5MDU4MDA1NjAzMTcxMzc3NTIiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWVycl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjkzMjYyODQ4ODAxMzA5Mjc3NiI+IlTJmcmZc3PDvGYga2ksIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gZGF5YW5kxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWVycl9wcm9jZXNzIiBtc2dpZD0iNDUwNzA1ODk5NzAzNTY5NzU3OSI+IlTJmcmZc3PDvGYga2ksIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiBwcm9zZXNpIGRheWFuZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl90aXRsZSIgbXNnaWQ9IjQzNTE5NDg0ODE0NTkxMzU3MDkiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X2FwcGxpY2F0aW9uIiBtc2dpZD0iMTkwNDQ3NzE4OTA1NzE5OTA2NiI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTIkczwveGxpZmY6Zz4gY2F2YWIgdmVybWlyLlxuXG5PbnUgYmHEn2xhbWFxIGlzdMmZeWlyc2luaXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X3Byb2Nlc3MiIG1zZ2lkPSI1Nzc2MjA5ODgzMjk5MDg5NzY3Ij4iPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiBha3Rpdml0aXNpIGNhdmFiIHZlcm1pci4gXG5cbk9udSBiYcSfbGFtYXEgaXN0yZl5aXJzaW5pej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfYXBwbGljYXRpb25fcHJvY2VzcyIgbXNnaWQ9Ijg5NDE3NTc2MDczNDA0ODEwNTciPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IGNhdmFiIHZlcm1pci4gT251IGJhxJ9sYW1hcSBpc3TJmXlpcnNpbml6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9wcm9jZXNzIiBtc2dpZD0iNjUxMzIwOTg3NDg4MDUxNzEyNSI+IlByb3NlcyA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4gY2F2YWIgdmVybWlyLiBcbiBcbiBPbnUgYmHEn2xhbWFxIGlzdMmZeWlyc2luaXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfY2xvc2UiIG1zZ2lkPSI4MzQ2MDcyMDk0NTIxMjY1NjA1Ij4iT0siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXBvcnQiIG1zZ2lkPSI0MDYwMjE4MjYwOTg0Nzk1NzA2Ij4ixZ5pa2F5yZl0IGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YWl0IiBtc2dpZD0iNzE0NzExODIxNzIyNjMxNzczMiI+IkfDtnpsyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWJwYWdlX3VucmVzcG9uc2l2ZSIgbXNnaWQ9IjMyNzI3NTgzNTExMzgxMjI1MDMiPiJCdSBzyZloaWbJmSB5YXJhcnPEsXpsYcWfxLFiLlxuXG5CYcSfbGFtYXEgaXN0yZl5aXJzaXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSIxNTQ3OTk3NzgwNTA2NzEzNTgxIj4iVMmZdGJpcSB5w7ZubMmZbmRpcmlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ19yZXBsYWNlIiBtc2dpZD0iNjIwMjQ5ODk0OTk3MDI4MTQxMiI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gaW5kaSDDp2FsxLHFn8Sxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ19vcmlnaW5hbCIgbXNnaWQ9IjE4ODEwMjAyMzAyMTY2ODY4MyI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gaWxrIGJhxZ9sYWTEsWxkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3NjYWxlIiBtc2dpZD0iMzIwMjk1NTY2NzY3NTk0NDQ5OSI+Ik1pcXlhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zaG93IiBtc2dpZD0iNDAxMzg3ODg3NjQ4NjY1NTg5MiI+IkjJmW1pxZ/JmSBnw7ZzdMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+IkJ1bmxhcsSxIFNpc3RlbSBheWFybGFyxLFuZGEgeWVuaWTJmW4gYWt0aXZsyZnFn2RpciBZw7xrbMmZbm1pxZ8gJmd0OyBUyZl0YmlxbMmZciAmZ3Q7LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtdl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjMzMDcyMDkxOTIxNTU0NDI4MjkiPiJUyZl0YmlxIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gKHByb3NlcyA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTIkczwveGxpZmY6Zz4pIFN0cmljdE1vZGUgc2l5YXPJmXRpbmkgcG96ZHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic212X3Byb2Nlc3MiIG1zZ2lkPSI1MTIwMzk3MDEyMDQ3NDYyNDQ2Ij4iPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IHByb3Nlc2kgU3RyaWN0TW9kZSBzaXlhc8mZdGluaSBwb3pkdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ190aXRsZSIgbXNnaWQ9IjE1ODQxOTIyODU0NDE0MDU3NDYiPiJBbmRyb2lkIHTJmWttaWxsyZnFn2RpcmlsaXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19hcGsiIG1zZ2lkPSI3OTA0MDQyNjgyMTExNTI2MTY5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDJmWRkyZlkyZluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdMmZdGJpcSBvcHRpbWFsbGHFn8Sxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19zdGFydGluZ19hcHBzIiBtc2dpZD0iNDUxNDY0NTE2MzQ2OTI2NzEzIj4iVMmZdGJpcWzJmXIgYmHFn2xhZMSxbMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19jb21wbGV0ZSIgbXNnaWQ9IjE0MDU5NTQ3NTQxMTI5OTkyMjkiPiJZw7xrbMmZbcmZIGJhxZ9hIMOnYXTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbiIgbXNnaWQ9IjkwODcwNjM5ODU3NzY2MjYxNjYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lMSRzPC94bGlmZjpnPiDDp2FsxLHFn8SxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb25fZGV0YWlsIiBtc2dpZD0iMTcyMTY4MTc0MTYxNzg5ODg2NSI+IlTJmXRiaXHJmSBrZcOnbcmZayDDvMOnw7xuIHRveHVudW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGl0bGUiIG1zZ2lkPSI3MTUzMTY3MDg1NDAzMjk4MTY5Ij4iVMmZdGJpcWzJmXLJmSBrZcOnaWxzaW4/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RleHQiIG1zZ2lkPSI3MDIyNjMxOTI0NTM0NDA2NDAzIj4iQmlyIHTJmXRiaXEgYXJ0xLFxIGnFn2zJmXlpci4gRGlnyZlyaW5pIGJhxZ9sYXRtYXEgw7zDp8O8biBvbnUgZGF5YW5kxLFybWFsxLFzxLFuxLF6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfYWN0aW9uIiBtc2dpZD0iNDkzMTI5MTcyMjM4NTY2MjgyIj4iPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+IGLDtmxtyZlzaW7JmSBxYXnEsWTEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjA4MjA5NDI3NTU4MDM1ODA0OSI+IlllbmkgdMmZdGJpcWkgYmHFn2xhdG1hecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2FjdGlvbiIgbXNnaWQ9IjU0NzI3NTY5MjY5NDU0NDA3MDYiPiI8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4gdMmZdGJpcWluaSBiYcWfbGFkxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5MzIxNDM1OTgzNzE1MzczNDAiPiJLw7ZobsmZIHTJmXRiaXFpIHlhZGRhIHNheGxhbWFkYW4gZGF5YW5kxLFyxLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbmRUZXh0IiBtc2dpZD0iNTIwOTg3NDU3MTk1OTQ2OTE0MiI+Ik3JmXRuIMO8w6fDvG4gyZltyZlsaXl5YXQgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Jpbmd0b25lIiBtc2dpZD0iNjg4NTQyMTQwNjg0NTczNDY1MCI+IlrJmW5naW4gc8mZcyBnw7xjw7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWMiIG1zZ2lkPSI1NDIxNjUxMTU3MTM4NjI4MTcxIj4iTWVkaWEgaMmZY21pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfcGxheWluZ190aHJvdWdoX2JsdWV0b290aCIgbXNnaWQ9IjkxNjU5ODQzNzkzOTQ2MDE1MzMiPiJCbHVldG9vdGggdmFzaXTJmXNpbMmZIG95bmFkxLFsxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfc2lsZW50X3Jpbmd0b25lX3NlbGVjdGVkIiBtc2dpZD0iODMxMDczOTk2MDk3MzE1NjI3MiI+IlPJmXNzaXogesmZbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfY2FsbCIgbXNnaWQ9IjM5NDE2ODAwNDEyODI3ODg3MTEiPiJEYXhpbGkgesmZbmcgc8mZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYmx1ZXRvb3RoX2NhbGwiIG1zZ2lkPSIyMDAyODkxOTI2MzUxMTUxNTM0Ij4iQmx1ZXRvb3RoIHrJmW5nIGjJmWNtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9hbGFybSIgbXNnaWQ9IjE5ODUxOTE2MTYwNDI2ODkxMDAiPiJTaXFuYWwgc8mZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMjQyMjI2NTY1Njc0NDI3NjcxNSI+IkJpbGRpcmnFnyBzyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV91bmtub3duIiBtc2dpZD0iMTQwMDIxOTY2OTc3MDQ0NTkwMiI+IkjJmWNtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fYmx1ZXRvb3RoIiBtc2dpZD0iNjUzODg5NDE3NzI1NTk2NDM0MCI+IkJsdWV0b290aCBoyZljbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9yaW5nZXIiIG1zZ2lkPSIzMzI2MDAzODQ3MDA2MTYyNDk2Ij4iWsmZbmcgc8mZc2kgZ8O8Y8O8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25faW5jYWxsIiBtc2dpZD0iODg5MDA3MzIxODE1NDU0MzM5NyI+IlrJmW5nIGjJmWNtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX21lZGlhIiBtc2dpZD0iNDIxNzMxMTcxOTY2NTE5NDIxNSI+Ik1lZGlhIGjJmWNtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjcwNDQ5ODY1NDY0NzcyODIyNzQiPiJCaWxkaXJpxZ8gc8mZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9kZWZhdWx0IiBtc2dpZD0iMzc4OTc1ODk4MDM1NzY5NjkzNiI+IkRlZm9sdCByaW5xdG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdF93aXRoX2FjdHVhbCIgbXNnaWQ9IjgxMjk1NjM0ODA4OTU5OTAzNzIiPiJEZWZvbHQgcmlucXRvbiAoPHhsaWZmOmcgaWQ9IkFDVFVBTF9SSU5HVE9ORSI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfc2lsZW50IiBtc2dpZD0iNzkzNzYzNDM5MjQwODk3NzA2MiI+Ikhlw6cgYmlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3BpY2tlcl90aXRsZSIgbXNnaWQ9IjM1MTUxNDM5MzkxNzUxMTkwOTQiPiJayZluZyBzyZlzbMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV91bmtub3duIiBtc2dpZD0iNTQ3NzkxOTk4ODcwMTc4NDc4OCI+Ik5hbcmZbHVtIHJpbnF0b24iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjY1NDEyMzk4NzQxODE2ODY5MyI+IldpLUZpIMWfyZliyZlryZlzaSBtw7Z2Y3VkZHVyIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MTkyNDI0NDg5MTY4Mzk3Mzg2Ij4iV2ktRmkgxZ/JmWLJmWvJmWzJmXJpIG3DtnZjdWRkdXIiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlX2RldGFpbGVkIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTYzNDEwMTQ1MDM0MzI3NzM0NSI+IldpLUZpIMWfyZliyZlryZluaSBhw6fEsW4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc5MTU4OTUzMjM2NDQyOTI3NjgiPiJBw6fEsXEgV2ktRmkgxZ/JmWLJmWvJmWzJmXJpIG3DtnZjdWRkdXIiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iNDAyOTQ4OTcxNjYwNTI1NTM4NiI+IldpLUZpIMWfyZliyZlryZlzaW7JmSBkYXhpbCBvbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4ixZ7JmWLJmWvJmXnJmSBkYXhpbCBvbHVuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW5fZGV0YWlsZWQgKDgwMDAwODE5NDE0NDc5NzYxMTgpIC0tPgorICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3dhdGNoZG9nX25ldHdvcmtfZGlzYWJsZWQiIG1zZ2lkPSI3OTA0MjE0MjMxNjUxNTQ2MzQ3Ij4iV2ktRmlcJ2EgcW/Fn3VsbWFxIGFsxLFubWFkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3dhdGNoZG9nX25ldHdvcmtfZGlzYWJsZWRfZGV0YWlsZWQiIG1zZ2lkPSI1NTQ4NzgwNzc2NDE4MzMyNjc1Ij4iIGludGVybmV0IGJhxJ9sYW50xLFzxLEga2V5Zml5ecmZdHNpemRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI5NzYxMTc4MjY1OTMyNDUxNyI+IldpLUZpIERpcmVjdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3R1cm5vbl9tZXNzYWdlIiBtc2dpZD0iMjkwOTI1MDk0MjI5OTYyNzI0NCI+IldpLUZpIERpcmVjdCDJmW3JmWxpeXlhdMSxbsSxIGJhxZ9sYXQuIEJ1IFdpLUZpIG3DvMWfdMmZcmkvaG90c3BvdHUgYmHEn2xheWFjYXEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UiIG1zZ2lkPSIzNzYzNjY5Njc3OTM1NjIzMDg0Ij4iV2ktRmkgRGlyZWN0IGJhxZ9sYWTEsWxhIGJpbG3JmWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjA2ODMyMTg4MTY3MzczNDg4NiI+IldpLUZpIERpcmVjdCBha3RpdmRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjM4OTQ5OTUzOTkzODk0MzM1Ij4iQXlhcmxhciDDvMOnw7xuIHRveHVudW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIxNjQ1MjY3MjU5MjcyODI5NTU5Ij4iUcmZYnVsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWNsaW5lIiBtc2dpZD0iMjExMjIyNTQ1MTcwNjEzNzg5NCI+IsSwbXRpbmEgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ludml0YXRpb25fc2VudF90aXRsZSIgbXNnaWQ9IjEzMTg5NzUxODUxMTIwNzA3MzQiPiJEyZl2yZl0bmFtyZkgZ8O2bmTJmXJpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl90b19jb25uZWN0X3RpdGxlIiBtc2dpZD0iNDk1ODgwMzk0ODY1ODUzMzYzNyI+IlFvxZ91bG1hcSDDvMOnw7xuIGTJmXbJmXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcm9tX21lc3NhZ2UiIG1zZ2lkPSI1NzAzODkxNzQ3MzE5NTE3NjkiPiJLaW1kyZluOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3RvX21lc3NhZ2UiIG1zZ2lkPSIyNDg5Njg5NzQ1MjIwNDQwOTkiPiJLaW3JmToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbnRlcl9waW5fbWVzc2FnZSIgbXNnaWQ9IjU5MjA5Mjk1NTAzNjc4Mjg5NzAiPiJUyZlsyZliIG9sdW5hbiBQxLBOIGtvZHUgZGF4aWwgZWRpbjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9zaG93X3Bpbl9tZXNzYWdlIiBtc2dpZD0iODUzMDU2MzMyMzg4MDkyMTA5NCI+IlDEsE46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgwMTI5ODEyNTc3NDIyMzI0NzUiPiJCdSBwbGFuxZ9ldCA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IGNpaGF6xLFuYSBxb8WfdWxhbiB6YW1hbiBXaS1GaSDFn8mZYsmZa8mZc2luZMmZbiBtw7x2yZlxccmZdGkgYXlyxLFsbcSxxZ8gb2xhY2FxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4iQnUgdGVsZWZvbiA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IGNpaGF6xLFuYSBxb8WfdWxhbiB6YW1hbiBXaS1GaSDFn8mZYsmZa8mZc2luZMmZbiBtw7x2yZlxccmZdGkgYXlyxLFsbcSxxZ8gb2xhY2FxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiJTaW12b2wgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+IlNNUyBtZXNhaiBnw7ZuZMmZcmlsaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9tZXNzYWdlIiBtc2dpZD0iMzg2Nzg5OTE2OTY1MTQ5NjQzMyI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IMOnb3ggc2F5ZGEgU01TIG1lc2FqIGfDtm5kyZlyaXIuIEJ1IHTJmXRiaXFpbiBtZXNhaiBnw7ZuZMmZcm3JmXnJmSBkYXZhbSBldG3JmXNpbsmZIGljYXrJmSB2ZXJpcnNpbml6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3llcyIgbXNnaWQ9IjM2NjM3MjU5OTM4NTU4MTY4MDciPiLEsGNhesmZIHZlcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbm8iIG1zZ2lkPSI2MjU0Mzg1NjEzOTU1MzQ5ODIiPiJSyZlkZCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9tZXNzYWdlIiBtc2dpZD0iMTY0NTQzNjQ2NjI4NTMxMDg1NSI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7wqAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDsvYiZndDsgw7xudmFuxLFuYSBtZXNhaiBnw7ZuZMmZcm3JmWsgaXN0yZl5aXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjM0OTIwMjU3MTk4NjgwNzg0NTciPiJCdSwgbW9iaWwgaGVzYWLEsW7EsXphICI8Zm9udCBmZ2NvbG9yPSIjZmZmZmIwNjAiPiLJmWxhdsmZIHRhcmlmbMmZcmluIHTJmXRiaXEgb2x1bm1hc8SxIjwvZm9udD4iIGlsyZkgbsmZdGljyZlsyZluyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19wcmVtaXVtX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjU1MjM4MjYzNDkxMDUxMjM2ODciPjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IkJ1IG1vYmlsIGhlc2FixLFuxLF6ZGEgw7ZkyZluacWfbMmZcsmZIHPJmWLJmWIgb2xhY2FxLiI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2FsbG93IiBtc2dpZD0iNDQ1ODg3ODYzNzExMTAyMzQxMyI+IkfDtm5kyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9kZW55IiBtc2dpZD0iMjkyNzM4OTg0MDIwOTE3MDcwNiI+IkzJmcSfdiBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX2Nob2ljZSIgbXNnaWQ9IjUyODk1Mzg1OTIyNzIyMTgxMzYiPiJNyZluaW0gc2XDp2ltaW1pIHlhZGRhIHNheGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfdW5kb19pbnN0cnVjdGlvbiIgbXNnaWQ9IjQ5NjA5NDQxMzMwNTIyODc0ODQiPiJCdW51IHNvbnJhIEF5YXJsYXJkYSBkyZl5acWfyZkgYmlsyZlyc2luaXrCoCZndDvCoFTJmXRiaXFsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbHdheXNfYWxsb3ciIG1zZ2lkPSIzMjQxMTgxMTU0ODY5NDkzMzY4Ij4iSMmZbWnFn8mZIGljYXrJmSB2ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX25ldmVyX2FsbG93IiBtc2dpZD0iNDQ2OTkyNzY1Nzc0MjY5NjczIj4iSGXDpyB2YXh0IGljYXrJmSB2ZXJtyZl5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiJTSU0ga2FydCDDp8SxeGFyxLFsZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfbWVzc2FnZSIgbXNnaWQ9IjIzMzMxNjQ1NTk5NzA5NTg2NDUiPiJDaWhhesSxbsSxesSxIGV0aWJhcmzEsSBTSU0ga2FydCBpbMmZIGJhxZ9sYWRhbmEga2ltaSBtb2JpbCDFn8mZYsmZa8mZIMmZbMOnYXRtYXogb2xhY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9kb25lX2J1dHRvbiIgbXNnaWQ9IjgyNzk0OTk4OTM2OTk2Mzc3NSI+IkJpdGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX3RpdGxlIiBtc2dpZD0iMzcxOTY3MDUxMjg4OTY3NDY5MyI+IlPEsE0ga2FydCDJmWxhdsmZIGVkaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF9tZXNzYWdlIiBtc2dpZD0iNjU5OTk0NTMwMTE0MTA1MDIxNiI+Ik1vYmlsIMWfyZliyZlryZl5yZkgcW/Fn3VsbWFxIMO8w6fDvG4gY2loYXrEsW7EsXrEsSB5ZW5pZMmZbiBiYcWfbGFkxLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZXN0YXJ0X2J1dHRvbiIgbXNnaWQ9IjQ3MjI0MDc4NDI4MTUyMzIzNDciPiJZZW5pZMmZbiBiYcWfbGF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODM0OTM2MjYyMzA2ODgxOTI5NSI+IlZheHQgYXlhcmxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjU4Nzk0NTA2NTk0NTM3ODIyNzgiPiJUYXJpeGkgcXVyYcWfZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9zZXQiIG1zZ2lkPSI1Nzc3MDc1NjE0MzIxMDg3NzU4Ij4iQXlhcmxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9kb25lIiBtc2dpZD0iMjUwNzY4Mzc1MTc1OTMwODgyOCI+IkhhesSxcmTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtc19uZXdfcGVybV9wcmVmaXgiIG1zZ2lkPSI4MjU3NzQwNzEwNzU0MzAxNDA3Ij48Zm9udCBzaXplPSIxMiIgZmdjb2xvcj0iI2ZmMzNiNWU1Ij4iWUVOxLA6ICI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtc19kZXNjcmlwdGlvbl9hcHAiIG1zZ2lkPSI1MTM5ODM2MTQzMjkzMjk5NDE3Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiB0yZlyyZlmaW5kyZluIHTJmW1pbiBlZGlsaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fcGVybWlzc2lvbnMiIG1zZ2lkPSI3MjgzMzU3NzI4MjE5MzM4MTEyIj4iSGXDpyBiaXIgaWNhesmZIHTJmWzJmWIgb2x1bm11ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1fY29zdHNfbW9uZXkiIG1zZ2lkPSI0OTAyNDcwMzI0MTQyMTUxMTE2Ij4iYnVudW5sYSBzaXpkyZluIHjJmXJjIHR1dHVsYSBiaWzJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9hY3Rpdml0eV90aXRsZSIgbXNnaWQ9IjQ0NjUwNTUxNTcyMDk2NDg2NDEiPiJVU0IgdG9wbHUgeWFkZGHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTkwMTQ1OTA0MTM5ODc1MTQ5NSI+IlVTQiBxb8WfdWx1ZHVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMzA4NTM4MDk0MzE2NDc3ODM5Ij4iU2l6IFVTQiB2YXNpdMmZc2lsyZkga29tcMO8dGVyZSBiYcSfbGFuZMSxbsSxei4gS29tcMO8dGVyIHbJmSBBbmRyb2lkaW5pemluIFVTQiB5YWRkYcWfxLEgYXJhc8SxbmRhIGZheWxsYXLEsSBrb3B5YWxhbWFxIGlzdMmZeWlyc2luaXpzyZksIGHFn2HEn8SxZGFrxLEgZMO8eW3JmXnJmSB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiJLb21ww7x0ZXJpbml6yZkgVVNCIGlsyZkgcW/Fn3VsbXVzdW51ei4gRmF5bGxhcsSxIEFuZHJvaWRpbml6aW4gU0Qga2FydMSxIGlsyZkga29tcMO8dGVyaW5peiBhcmFzxLFuZGEga29weWFsYW1hcSBpc3TJmXlpcnNpbml6c8mZIGHFn2HEn8SxZGFrxLEgZMO8eW3JmXnJmSB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjEwNTIyNTk5MzAzNjk1MDgyMzUiPiJVU0IgeWFkZGHFn8SxIGFrdGl2bMmZxZ9kaXJpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzAxNzA0NTIxNzM2NTU0MDY1OCI+IlVTQiB5YWRkYcWfxLFuxLF6xLEgVVNCIGvDvHRsyZl2aSB5YWRkYcWfxLEgw7zDp8O8biBpc3RpZmFkyZkgZWTJmW4gemFtYW4gcHJvYmxlbSB5YXJhbmTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg3NjAxODUxMjcxNjk3MDMxMyI+IlNEIGthcnTEsW7EsXrEsSBVU0Iga8O8dGzJmXZpIHlhZGRhxZ/EsSDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZbiB6YW1hbiBwcm9ibGVtIHlhcmFuZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0IgcW/Fn3VsdWR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTM5ODIyNzgzODI4MTgzNzYzIj4iRmF5bGxhcsSxIGtvbXDDvHRlcmluaXrJmSBrb3B5YWxhbWFxIHbJmSB5YSBrb21ww7x0ZXJpbml6ZMmZbiBrb3B5YWxhbWFxIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzMzYwNTgzOTY2NjM1MTYwMTciPiJVU0IgeWFkZGHFn8SxIHPDtm5kw7xyw7xuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2NTY4NTIwOTg1NTU2MjM4MjIiPiJVU0IgeWFkZGHFn8SxIHPDtm5kw7xybcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF90aXRsZSIgbXNnaWQ9IjY2MDEyOTg1MTcwODc3NTg1MyI+IlVTQiB5YWRkYcWfIGlzdGlmYWTJmSBvbHVudXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+IlVTQiB5YWRkYcWfxLEgc8O2bmTDvHJtyZlkyZluIMO2bmPJmSBBbmRyb2lkXCdpbiBVU0IgeWFkZGHFn8SxbsSxIGtvbXDDvHRlcmTJmW4gZGVtb250YWogZXRkaXlpbml6yZkgKMOnxLF4YXJkxLHEn8SxbsSxemEpIMmZbWluIG9sdW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+IlVTQiB5YWRkYcWfxLEgc8O2bmTDvHJtyZlkyZluIMO2bmPJmSBBbmRyb2lkXCdpbiBVU0IgeWFkZGHFn8SxbsSxIGtvbXDDvHRlcmTJmW4gZGVtb250YWogZXRkaXlpbml6yZkgKMOnxLF4YXJkxLHEn8SxbsSxemEpIMmZbWluIG9sdW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9idXR0b25fbW91bnQiIG1zZ2lkPSI3MDYwMjE4MDM0OTAwNjk2MDI5Ij4iVVNCIHlhZGRhxZ/EsW7EsSBzw7ZuZMO8ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjE5NzAzNzQ4OTgyNjMwNjM4MzYiPiJVU0IgeWFkZGHFn8SxIHPDtm5kw7xyyZluIHphbWFuIHByb2JsZW0gb2xkdS4gVVNCIGhvc3R1IGRlbW9udGFqIGV0bcmZbml6aSB5b3hsYXnEsW4gdsmZIHllbmlkyZluIGPJmWhkIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RpdGxlIiBtc2dpZD0iOTYzMDM5MDMzNDcwNDc4Njk3Ij4iVVNCIHlhZGRhxZ/EsSBha3RpdmzJmcWfZGlyaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGV4dCIgbXNnaWQ9IjUxMDA0Mjg3NTcxMDc0Njk0NTQiPiJVU0IgeWFkZGHFn8SxIGFrdGl2bMmZxZ9kaXJzyZluaXosIGlzdGlmYWTJmSBldGRpeWluaXogYsmZemkgdMmZdGJpcWzJmXIgZGF5YW5hIGJpbMmZciB2yZkgVVNCIHlhZGRhxZ8gZGVha3RpdiBlZGlsyZluyZkgccmZZMmZciBpxZ9syZltyZl5yZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19lcnJvcl90aXRsZSIgbXNnaWQ9IjczMjM2NTg0Njk2MjY1MTQyMDciPiJVU0IgyZltyZlsaXl5YXTEsSB1xJ91cnN1emR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19vayIgbXNnaWQ9IjczNzY5NTMxNjcwMzk4NjU3MDEiPiJPSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9tdHBfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzY5OTkxMzA5NzM5MTU1MDM5NCI+Ik1lZGlhIGNpaGF6xLEga2ltaSBxb8WfdWxkdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wdHBfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMTk2MDgxNzE5MjIxNjA2NDgzMyI+IkthbWVyYSBraW1pIGJhxJ9sYW7EsWxkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfY2RfaW5zdGFsbGVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY3NzQ3MTI4Mjc4OTIwOTA3NTQiPiJRdXJhxZ9kxLFyxLFjxLEga2ltaSBxb8WfdWx1YiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3Nvcnlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNzg0ODIzNjk3NDA4NzY1MzY2NiI+IlVTQiBha3Nlc3VhcmEgcW/Fn3VsZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIyMjkwODU5Mzk5OTgzNzIwMjcxIj4iRGlnyZlyIFVTQiBzZcOnaW1syZlyaSDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiJVU0IgeWFkZGHFn8SxbmEgZm9ybWF0IGF0xLFsc8Sxbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjQ4NDE1OTIxNTI2NTI2MDY5Ij4iU0Qga2FydCBmb3JtYXQgZWRpbHNpbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTM0MDE2ODUzNDI1NzYxMDc4Ij4iVVNCIHlhZGRhxZ/EsW7EsXpkYSB5ZXJsyZnFn2RpcmlsbWnFnyBiw7x0w7xuIGZheWxsYXIgc2lsaW7JmWPJmWsuIEJ1IGFkZMSxbSBnZXJpIGTDtm7DvGxtyZl6ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQxMzE4OTUwMjc1NDM4MzAiPiJLYXJ0xLFuxLF6ZGFrxLEgYsO8dMO8biBtyZlsdW1hdGxhciBpdMmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfYnV0dG9uX2Zvcm1hdCIgbXNnaWQ9IjQxMzEwNjQ1NjAxMjc0Nzg2OTUiPiJGb3JtYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY3MjkwNDQ3Nzg5NDkxODk5MTgiPiJVU0Igc2F6bGFtYSBxb8WfdWx1ZHVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjEwMTY2NTQ2Mjc2MjY0NzYxNDIiPiJVU0IgZGViYXHEsSBkZWFrdGl2YXNpeWEgZXRtyZlrIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaW5wdXRfbWV0aG9kIiBtc2dpZD0iNDY1MzM4NzMzNjc5MTIyMjk3OCI+IkRheGlsZXRtyZkgbWV0b2R1bnUgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSI5MDkxNjUyMTU3NzIyNDk1MTE2Ij4iRGF4aWxldG3JmSDDvHN1bGxhcsSxbsSxIGF5YXJsYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI2MjAzMTEyNDc4MDk1MTE3NjI1Ij4iRml6aWtpIGtsYXZpYXR1cmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoYXJkd2FyZSIgbXNnaWQ9Ijc1MTc4MjEwODY4ODg5OTAyNzgiPiJIYXJkd2FyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9rZXlib2FyZF9sYXlvdXRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMTQwNzM2NzAxNzI2MzAzMDc3MyI+IktsYXZpYXR1cmEgc3hlbWkgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0NjU5MDc3MDA0NDkyNTcwNjMiPiJLbGF2aWF0dXJhIHTJmXJ0aWJhdMSxIHNlw6dtyZlrIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYXN0X3Njcm9sbF9hbHBoYWJldCIgbXNnaWQ9IjU0MzMyNzU0ODU0OTkwMzkxOTkiPiIgQUJDw4dERcaPRkfEnkhYScSwSktRTE1OT8OWUFJTxZ5UVcOcVllaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfbnVtZXJpY19hbHBoYWJldCIgbXNnaWQ9IjQwMzAxNzA1MjQ1OTUxMjM2MTAiPiIgMDEyMzQ1Njc4OUFCQ8OHREXGj0ZHxJ5IxLBJSktMTU5Pw5ZQUVJTxZ5UVcOcVldYWVoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5kaWRhdGVzX3N0eWxlIiBtc2dpZD0iNDMzMzkxMzA4OTYzNzA2MjI1NyI+PHU+Im5hbWl6yZlkbMmZciI8L3U+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDk4MTYwMDUzNTE0Njg1NjAiPiJVU0IgeWFkZGHFnyBoYXrEsXJsYW7EsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ1NzYwMzQxODk3MDk5NDA1MCI+IlNEIGthcnQgaGF6xLFybGFuxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iODI4NzMxOTg4MjkyNjczNzA1MyI+IlPJmWh2bMmZciB5b3hsYW7EsWzEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiJCb8WfIFVTQiB5YWRkYcWfxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3ODA0Nzc4MzgyNDEyMTI5OTciPiJCb8WfIFNEIGthcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4iVVNCIHlhZGRhxZ8gYm/Fn2R1ciB2yZkgeWEgc2lzdGVtIHTJmXLJmWZpbmTJmW4gZMmZc3TJmWtsyZlubcmZecmZbiBmYXlsIHNpc3RlbWluyZkgbWFsaWtkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjQxMDY1NjQxNzg2OTIzNjA0Ij4iU0Qga2FydCBib8WfZHVyIHbJmSB5YSBzaXN0ZW0gdMmZcsmZZmluZMmZbiBkyZlzdMmZa2zJmW5tyZl5yZluIGZheWwgc2lzdGVtaW7JmSBtYWxpa2Rpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjIwOTAwNDY3Njk1MzI3MTM1NjMiPiJayZlkyZlsaSBVU0IgeWFkZGHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDEwNzIzOTA2MDE5MTAwMTg5Ij4iWsmZZMmZbGkgU0Qga2FydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNzk1OTE3NTc4Mzk1MzMzMjgwIj4iU0QgeWFkZGHFnyB6yZlkyZlsyZluaWIuIE9udSBmb3JtYXQgZXRtyZl5yZkgw6dhbMSxxZ/EsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTc1Mzg5ODU2NzUyNTU2ODI1MyI+IlNEIGthcnQgesmZZMmZbMmZbmliLiBPbnUgZm9ybWF0IGV0bcmZecmZIMOnYWzEscWfxLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNjYxNjgzMDMxMzMwOTUxMDczIj4iVVNCIHlhZGRhxZ/EsSBnw7Z6bMmZbmlsbcmZZMmZbiDDp8SxeGFyxLFsZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+IlNEIGthcnQgZ8O2emzJmW5pbG3JmWTJmW4gw6fEsXhhcsSxbGTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiJNyZlsdW1hdCBpdGtpc2luaW4gcWFyxZ/EsXPEsW7EsSBhbG1hcSDDvMOnw7xuIFVTQiB5YWRkYcWfxLEgw6fEsXhhcm1hemRhbiDJmXZ2yZlsIG9udSBkZW1vbnRhaiBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+IkRhdGEgaXRraXNpbmluIHFhcsWfxLFzxLFuxLEgYWxtYXEgw7zDp8O8biBTRCBrYXJ0xLEgw6fEsXhhcm1hZGFuIMO2bmPJmSBkZW1vbnRhaiBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5Njc5NzM4OTMyNzAzNjAyMzAiPiJVU0IgeWFkZGHFnyDDp8SxeGFybWFxIMO8w6fDvG4gdMmZaGzDvGvJmXNpemRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjcyOTgwMTEzMDc5MDYxNjIwMCI+IlNEIGthcnQgdMmZaGzDvGvJmXNpeiDDp8SxeGFyxLFsYSBiaWzJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNDIxOTUzNjE2MDY0OTM1MzAiPiJTaXogVVNCIHlhZGRhxZ/EsSB0yZlobMO8a8mZc2l6IMOnxLF4YXJhIGJpbMmZcnNpbml6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Njg4NDEyNzgxMzgzNzc2MDQiPiJTaXogU0Qga2FydMSxIHTJmWhsw7xryZlzaXogw6fEsXhhcmEgYmlsyZlyc2luaXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ0ODYzNzcyMzAxNDAyMjc2NTEiPiJTaWxpbm1pxZ8gVVNCIHlhZGRhxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTAyNTE4MDMwNDA0MzgxMzE4Ij4iU0Qga2FydCDDp8SxeGFyxLFsZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjkyMTEyNjE2MjU4MDU3NDE0MyI+IlVTQiB5YWRkYcWfIMOnxLF4YXLEsWxkxLEuIFllbmkgbWVkaWEgyZlsYXbJmSBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzg3MDEyMDY1Mjk4MzY1OTY0MSI+IlNEIGthcnQgw6fEsXhhcsSxbGTEsS4gWWVuaXNpbmkgZGF4aWwgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9saXN0X2VtcHR5IiBtc2dpZD0iMTY3NTM4ODMzMDc4Njg0MTA2NiI+IlV5xJ91biBnyZlsyZluIGbJmWFsaXl5yZl0IHRhcMSxbG1hZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9Ijg3ODczNTIwNzQzMjY3NDg4OTIiPiJrb21wb25lbnQgaXN0aWZhZMmZc2kgc3RhdGlzdGlrYXPEsW7EsSBnw7xuY8mZbGzJmXlpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSIxMTA2NjEyNDI0MjU0Mjc3NjMwIj4iVMmZdGJpccmZIHRvcGxhbm3EscWfIGlzdGlmYWTJmSBzdGF0aXN0aWthc8SxbsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBvbHVubXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzQxMDM2MzExMjExNDA2NjkyIj4ibcmZem11bnUga29weWFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM5MDY5NzEyNDI4ODMxNzgzMSI+IlTJmXRiaXHJmSBrb250ZW50aSBrb3B5YWxhbWFxIMO8w6fDvG4gZGVmb2x0IGtvbnRleW5lciBzZXJ2aXNpbmkgw6dhxJ/EsXJtYXEgaWNhesmZc2kgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsbWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iMTY0MjAyNDQ1NTc1MDQxNDY5NCI+Ik1lZGlhIMOnxLF4xLHFn8SxbsSxIHnDtm5syZluZGlyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSI0OTMyODE4NzQ5NTQ3MjQ0MzQ2Ij4iVMmZdGJpccmZIG1lZGlhIMOnxLF4xLHFn8SxbsSxIGRpZ8mZciB4YXJpY2kgY2loYXpsYXJhIHnDtm5syZluZGlybcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNzU2NTU1MjIzNzk3NzgxNTA0NyI+IktleWd1YXJkIHTJmWhsw7xryZlzaXogeWFkZGHFn2Egw6fEsXjEscWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNTg2NjI0NTQ4NDMwMzI4NTc2MiI+IlTJmXRiaXHJmSBrZWd1YXJkIHTJmWhsw7xryZlzaXogeWFkZGHFn2Egw6dhdG1hxJ9hIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIxNzIxOTUxODQyMDc4MjgzODciPiJLbGF2aWF0dXJhIGtpbGlkaW5pbiBnw7Zyw7xsbcmZc2luaSB2yZkgZ2l6bMmZZGlsbcmZc2luaSBpZGFyyZkgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIzMDQzNzMyMjkwNTE4NjI5MDYxIj4iVMmZdGJpccmZIGtlZ3VhcmTEsSBpZGFyyZkgZXRtyZlrIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR1dG9yaWFsX2RvdWJsZV90YXBfdG9fem9vbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDA3MDQzMzIwODE2MDA2MzUzOCI+Ilpvb20gbsmZemFyyZl0aSDDvMOnw7xuIGlraSBkyZlmyZkgdG94dW51biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdhZGdldF9ob3N0X2Vycm9yX2luZmxhdGluZyIgbXNnaWQ9IjQ4ODIwMDQzMTQ5MDY0NjYxNjIiPiJXaWRnZXQgyZlsYXbJmSBlZGlsyZkgYmlsbcmZZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9nbyIgbXNnaWQ9IjgzMjA4NDU2NTE3MzczNjkwMjciPiJHZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlYXJjaCIgbXNnaWQ9IjY1ODExMDI3MTgyMjgwNzgxMSI+IkF4dGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9zZW5kIiBtc2dpZD0iMjMxNjE2NjU1NjM0OTMxNDQyNCI+IkfDtm5kyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9uZXh0IiBtc2dpZD0iMzEzODg0MzkwNDAwOTgxMzgzNCI+Ik7DtnZiyZl0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZG9uZSIgbXNnaWQ9Ijg5NzE1MTYxMTc5MTA5MzQ2MDUiPiJUYW1hbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fcHJldmlvdXMiIG1zZ2lkPSIxNDQzNTUwMDM5MjUwMTA1OTQ4Ij4ixo92dsmZbGtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kZWZhdWx0IiBtc2dpZD0iMjg0MDkyMTg4NTU1ODA0NTcyMSI+IsSwY3JhIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaWFsX251bWJlcl91c2luZyIgbXNnaWQ9IjU3ODkxNzY0MjUxNjc1NzM1ODYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz4gaXN0aWZhZMmZIGV0bcmZa2zJmVxubsO2bXLJmSB5xLHEn8SxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9jb250YWN0X3VzaW5nIiBtc2dpZD0iNDk0NzQwNTIyNjc4ODEwNDUzOCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPmlzdGlmYWTJmSBlZMmZcsmZayBrb250YWt0IHlhcmFkxLFuXG4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudF9jcmVkZW50aWFsc19wZXJtaXNzaW9uX21lc3NhZ2VfaGVhZGVyIiBtc2dpZD0iMjEwNjEwMzgxNzkzNzg1OTY2MiI+IkHFn2HEn8SxZGFrxLEgYmlyIHbJmSB5YSBkYWhhIMOnb3ggdMmZdGJpcWzJmXLCoGluZGkgdsmZIGfJmWzJmWPJmWtkyZkgaGVzYWLEsW7EsXphIGRheGlsIG9sbWFxIMO8w6fDvG4gaWNhesmZIGlzdMmZeWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9mb290ZXIiIG1zZ2lkPSIzMTI1MjExMzQzMzc5Mzc2NTYxIj4iQnUgaXN0yZl5yZkgaXpuIHZlcm3JmWsgaXN0yZl5aXJzaW5pej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudF9wZXJtaXNzaW9uc19oZWFkZXJfdGV4dCIgbXNnaWQ9IjY4NzQ0OTc0MDgyMDE4MjY3MDgiPiJHaXJpxZ8gc29yxJ91c3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvdyIgbXNnaWQ9IjcyMjU5NDg4MTEyOTYzODY1NTEiPiLEsGNhesmZIHZlcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueSIgbXNnaWQ9IjIwODE4Nzk4ODU3NTU0MzQ1MDYiPiJSyZlkZCBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1pc3Npb25fcmVxdWVzdF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NDg2NzU5Nzk1OTI2MjM3OTA3Ij4ixLBjYXrJmSB0yZlsyZliIG9sdW51ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1pc3Npb25fcmVxdWVzdF9ub3RpZmljYXRpb25fd2l0aF9zdWJ0aXRsZSIgbXNnaWQ9Ijg1MzAzOTMxMzk2Mzk1NjAxODkiPlxuIiBoZXNhYsSxIMO8w6fDvG48eGxpZmY6ZyBpZD0iQUNDT1VOVCI+JXM8L3hsaWZmOmc+IGljYXrJmSBzb3LEn3VzdSBnw7ZuZMmZcmlsZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRfbWV0aG9kX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjgzNTU3MTc5OTQ0OTkyNjQ5Ij4iRGF4aWxldG3JmSBtZXRvZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIzNjg3OTY5MTM4Mzc1MDkyNDIzIj4iU2lueHJvbml6YXNpeWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI0MTQ4MTIwNzQyMDk2NDc0NjQxIj4ixo9sw6dhdMSxbWzEsWzEsXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YWxscGFwZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyNDAwODc4NDQzMDQ2ODc2NjIiPiJEaXZhciBrYcSfxLF6xLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJEaXZhciBrYcSfxLF6xLFuxLEgZMmZeWnFn2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iQmlsZGlyacWfIGRpbmzJmXnJmW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBha3RpdmzJmcWfZGlyaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gdMmZcsmZZmluZMmZbiBha3RpdmzJmcWfZGlyaWxpYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IsWeyZliyZlryZluaSBpZGFyyZkgZXRtyZlrIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dF9sb25nIiBtc2dpZD0iNjQwNzM1MTAwNjI0OTE3NDQ3MyI+Ijx4bGlmZjpnIGlkPSJTRVNTSU9OIj4lczwveGxpZmY6Zz4gc2Vzc2l5YXlhIHFvxZ91bHVkdXIuIMWeyZliyZlryZluaSBpZGFyyZkgZXRtyZlrIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGluZyIgbXNnaWQ9IjY0NDM0Mzg5NjQ0NDA5NjA3NDUiPiJIyZltacWfyZkgYWt0aXYgVlBOIGJhxJ9sYW7EsXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGVkIiBtc2dpZD0iODIwMjY3OTY3NDgxOTIxMzkzMSI+IlZQTiBiYcSfbGFudMSxc8SxIGjJmW1pxZ/JmSBha3RpdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9lcnJvciIgbXNnaWQ9IjYwMDkyNDk4MTQwMzQ3MDgxNzUiPiJIyZltacWfyZkgYWt0aXYgVlBOIHjJmXRhc8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2NvbmZpZyIgbXNnaWQ9IjY0MTU4OTkxNTA2NzE1Mzc5NzAiPiJLb25maXF1csmZIGV0bcmZayDDvMOnw7xuIHRveHVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXBsb2FkX2ZpbGUiIG1zZ2lkPSIyODk3OTU3MTcyMzY2NzMwNDE2Ij4iRmF5bCBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19maWxlX2Nob3NlbiIgbXNnaWQ9IjYzNjM2NDg1NjIxNzA3NTk0NjUiPiJIZcOnIGJpciBmYXlsIHNlw6dpbG3JmXlpYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc2V0IiBtc2dpZD0iMjQ0ODE2ODA4MDk2NDIwOTkwOCI+IlPEsWbEsXJsYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdWJtaXQiIG1zZ2lkPSIxNjAyMzM1NTcyMDg5OTExOTQxIj4iR8O2bmTJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXJfbW9kZV9kaXNhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjMxNjQ3NjgyMTIwMDM4NjQzMTYiPiJBdnRvbW9iaWwgcmVqaW1pIGFrdGl2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FyX21vZGVfZGlzYWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgwMzUyMzA1Mzc1NjM1MDMyNjIiPiJBdnRvbW9iaWwgcmVqaW1pbmTJmW4gw6fEsXhtYXEgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRldGhlcmVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjMxNDY2OTQyMzQzOTgyMDI2MDEiPiJUZXplcmlucSB2yZkgeWEgaG90c3BvdCBha3RpdmRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRldGhlcmVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNjg1NzAzMTc2MDEwMzA2Mjk4MiI+IlF1cmHFn2TEsXJtYXEgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2tfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjMwMDQ3MDAwNDUwMzM0MzQzOSI+IkdlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXh0X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEwODA1NTUxMDQ2Nzc5OTI0MDgiPiJOw7Z2YsmZdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJza2lwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEyNzUzNjIyOTk0NzE2MzE4MTkiPiJLZcOnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVfd2FybmluZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0ODkwODk0MjY3NDU0ODY3Mjc2Ij4iWcO8a3PJmWsgbW9iaWwgZGF0YSBpc3RpZmFkyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlX3dhcm5pbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIzMzQwODIyMjI4NTk5MzM3NzQzIj4iTW9iaWwgZGF0YSBpc3RpZmFkyZlzaSBoYXFxxLFuZGEgZGFoYSDDp294IMO2eXLJmW5tyZlrIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjI2OTU0MTg5NzcyOTc4MTMzMiI+Ik1vYmlsIGRhdGEgbGltaXRpIGtlw6dpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNTQ0MzQ1NzMyMTM1NDkwNzE4MSI+Ik1vYmlsIGRhdGEgaXN0aWZhZMmZc2kgaGFxccSxbmRhIGRhaGEgw6dveCDDtnlyyZlubcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fbWF0Y2hlcyIgbXNnaWQ9IjgxMjk0MjE5MDg5MTU4NDA3MzciPiJVecSfdW5sdXEgeW94ZHVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZF9vbl9wYWdlIiBtc2dpZD0iMTk0Njc5OTIzMzgyMjgyMDM4NCI+IlPJmWhpZsmZZMmZIHRhcCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ibWF0Y2hlc19mb3VuZCI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxNjcxNDcwODExMzY1Nzk0MzkiPiIxIHV5xJ91bmx1cSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDY0MTg3Mjc5NzA2NzYwOTE3NyI+Ijx4bGlmZjpnIGlkPSJJTkRFWCI+JWQ8L3hsaWZmOmc+IMmZZMmZZGTJmW4gPHhsaWZmOmcgaWQ9IlRPVEFMIj4lZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbW9kZV9kb25lIiBtc2dpZD0iNzIxNzU4MTY0MDQ2MTkyMjI4OSI+IkhhesSxcmTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MjM4MTA0NDg1MDc2MTI3NDYiPiJVU0IgeWFkZGHFn8SxIHFhbGTEsXLEsWzEsXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMyNzg5NDk5ODQwOTUzNzE5MCI+IlNEIGthcnQgZGVtb250YWogZWRpbGlyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NTIxNTczMzIxNTI0MzQwMDU4Ij4iVVNCIHlhZGRhxZ8gc2lsaW5pci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTk2OTg4ODc1NTA3MDQzMDQyIj4iU0Qga2FydCBzaWxpbmlyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiJVU0IgeWFkZGHFn8SxIHNpbGluyZkgYmlsbcmZZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IlNEIGthcnTEsSBzaWxtyZlrIG3DvG1rw7xuIG9sbWFkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4iU0Qga2FydCBkZW1vbnRhaiBlZGlsbcmZZMmZbiDDtm5jyZkgw6fEsXhhcsSxbGTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MTgxODg3MjAwMDk1Njk2OTMiPiJVU0IgeWFkZGHFnyBoYXrEsXJkYSB5b3hsYW7EsWzEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzM0NzYyNTAzOTA0ODI3NDgxIj4iU0Qga2FydCBoYXrEsXJkYSB5b3hsYW7EsWzEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcmVtb3ZlZCIgbXNnaWQ9IjcwMDE1MjY5MDUwNTc5NTIwOTciPiJTRCBrYXJ0IMOnxLF4YXLEsWzEsWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjU4MzA4MTQzNDkyNTA4MzQyMjUiPiJTRCBrYXJ0IGhhesSxcmRhIGtvbXDDvHRlciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcwNjEzMDU2ODEzMzU0MDQzNSI+IlNEIGthcnQgaGFsLWhhesSxcmRhIGtvbXDDvHRlciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfdW5rbm93bl9zdGF0ZSIgbXNnaWQ9IjcyOTE5Mjc4MjE5NzI5MDM4NSI+Ik5hbcmZbHVtIHbJmXppeXnJmXRkyZkgeGFyaWNpIG1lZGlhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlIiBtc2dpZD0iMTc3ODY4NjYxODIzMDAxMTk2NCI+IlBheWxhxZ/EsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kIiBtc2dpZD0iNDgwODI3MDkwMDMyMjk4NTk2MCI+IlRhcMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndlYnNlYXJjaCIgbXNnaWQ9IjQzMzcxNTc5Nzc0MDAyMTE1ODkiPiJWZWIgQXh0YXLEscWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZF9uZXh0IiBtc2dpZD0iNTc0MjEyNDYxODk0MjE5Mzk3OCI+IlNvbnJha8SxbsSxIHRhcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmRfcHJldmlvdXMiIG1zZ2lkPSIyMTk2NzIzNjY5Mzg4MzYwNTA2Ij4ixo92dsmZbGtpbmkgdGFwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZUaWNrZXIiIG1zZ2lkPSI1NjIyNjgzOTEyNjE2NDk2MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiB0yZlyyZlmaW5kyZluIG3JmWthbiBzb3LEn3VzdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGl0bGUiIG1zZ2lkPSI1NDQ2ODU4NzE3MTU3NDE2ODM5Ij4iTcmZa2FuIHNvcsSfdXN1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZNZXNzYWdlIiBtc2dpZD0iMTM3NDcxODAyMzIyNDAwMDcwMiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiAoPHhsaWZmOmcgaWQ9IlNFUlZJQ0UiPiUyJHM8L3hsaWZmOmc+KSB0yZlyyZlmaW5kyZluIHTJmWzJmWIgZWRpbGliIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZZZXMiIG1zZ2lkPSIyMzQ2NTY2MDcyODY3MjEzNTYzIj4iQsmZbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNWZXJpZk5vIiBtc2dpZD0iMTE0NjU2NDkzNzM0NjQ1NDg2NSI+IlhleXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXMiIG1zZ2lkPSI1Mjk2MzIxODUwNjYyNzQ2ODkwIj4iTGltaXRpIGtlw6fJmW5pIHNpbGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY190b29fbWFueV9kZWxldGVzX2Rlc2MiIG1zZ2lkPSI0OTY1NTE2NzEwMDg2OTQyNDUiPiI8eGxpZmY6ZyBpZD0iVFlQRV9PRl9TWU5DIj4lMiRzPC94bGlmZjpnPiDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVJfT0ZfREVMRVRFRF9JVEVNUyI+JTEkZDwveGxpZmY6Zz4gc2lsaW5tacWfIGZheWwgdmFyLCA8eGxpZmY6ZyBpZD0iQUNDT1VOVF9OQU1FIj4lMyRzPC94bGlmZjpnPiBoZXNhYsSxLiBOyZkgZXRtyZlrIGlzdMmZeWlyc2luaXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19yZWFsbHlfZGVsZXRlIiBtc2dpZD0iMjU3MjYwMDEwMzEyMjU5NjI0MyI+IkVsZW1lbnRsyZlyaSBzaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3VuZG9fZGVsZXRlcyIgbXNnaWQ9IjI5NDEzMTczNjA2MDAzMzg2MDIiPiJTaWxpbsmZbmzJmXJpIGdlcmkgcWF5dGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19kb19ub3RoaW5nIiBtc2dpZD0iMzc0Mzc2NDc0MDQzMDgyMTg0NSI+IsSwbmRpbGlrIGhlw6cgbsmZIGV0bcmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX2FjY291bnRfbGFiZWwiIG1zZ2lkPSI1NjU1MjAzMDg5NzQ2NDIzOTI3Ij4iSGVzYWIgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX2FjY291bnRfbGFiZWwiIG1zZ2lkPSIyOTM1MjY3MzQ0ODQ5OTkzNTUzIj4iSGVzYWIgyZlsYXbJmSBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjM2MTE5ODI4OTQ4NTM0MzU4NzQiPiJIZXNhYiDJmWxhdsmZIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9idXR0b24iIG1zZ2lkPSIyNDEyMDcyMjcyODMyMjg0MzEzIj4iQXJ0xLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9kZWNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iNDc2MDUwNzc4Mzg2Nzc5MDY3Ij4iQXphbGTEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfbW9kZSIgbXNnaWQ9IjMwNzMxMDEwNjc0NDE2Mzg0MjgiPiI8eGxpZmY6ZyBpZD0iVkFMVUUiPiVzPC94bGlmZjpnPiB0b3h1bnVuIHbJmSBiYXNhcmFxIHNheGxhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfYWN0aW9uIiBtc2dpZD0iOTEwMTQ3MzA0NTg5MTgzNTQ5MCI+IkFydMSxcm1hcSDDvMOnw7xuIHl1eGFyxLEsIGF6YWx0bWFxIMO8w6fDvG4gYcWfYcSfxLEgc8O8csO8xZ9kw7xyw7xuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iODg2NTg4NTExNDAyODYxNDMyMSI+IkTJmXFpccmZIGFydMSxcsSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iNjI0NjgzNDkzNzA4MDY4NDc5MSI+IkTJmXFpccmZbmkgYXphbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIzNjUyMDU2MDU1ODEwMjIzMTM5Ij4iU2FhdMSxIGFydMSxcsSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjEzNzc0Nzk4NjM0MjkyMTQ3OTIiPiJTYWF0xLEgYXphbGTEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfc2V0X3BtX2J1dHRvbiIgbXNnaWQ9IjQxNDc1OTA2OTYxNTEyMzA4NjMiPiJQTSBxdXJ1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9zZXRfYW1fYnV0dG9uIiBtc2dpZD0iODMwMjE0MDM1MzUzOTQ4Njc1MiI+IkFNIHF1cnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfaW5jcmVtZW50X21vbnRoX2J1dHRvbiIgbXNnaWQ9IjUzNjk5OTg0NzkwNjc5MzQxMTAiPiJBcnRtYSBhecSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X21vbnRoX2J1dHRvbiIgbXNnaWQ9IjE4MzI2OTg5OTU1NDE3MjYwMTkiPiJBecSxIGF6YWxkxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfaW5jcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI3MTMwNDY1NDEyMzA4MTczOTAzIj4iQXJ0bWEgZ8O8bsO8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI0MTMxODgxNTIxODE4NzUwMDMxIj4iQXphbG1hIGfDvG7DvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF95ZWFyX2J1dHRvbiIgbXNnaWQ9IjYzMTg2OTczODQzMTA4MDg4OTkiPiJBcnTEsW0gaWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X3llYXJfYnV0dG9uIiBtc2dpZD0iNDQ4MjAyMTgxMzQ5MTEyMTcxNyI+IkF6YWxtYSBpbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IkzJmcSfdiBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiJTaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IkhhesSxcmTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiJSZWppbSBkyZl5acWfaWtsaXlpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJEYXhpbCBvbHVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iVMmZdGJpcSBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJCdW51bmxhIHBheWxhxZ/EsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiBpbMmZIHBheWxhxZ/EsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iU8O8csO8xZ/JmW4gcXVscC4gVG94dW5hcmFxIGJhc8SxbMSxIHR1dHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gw7zDp8O8biB5dXhhcsSxIHPDvHLDvMWfZMO8csO8bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gw7zDp8O8biBhxZ9hxJ/EsSBzw7xyw7zFn2TDvHLDvG4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IMO8w6fDvG4gc29sYSBzw7xyw7zFn2TDvHIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDDvMOnw7xuIHNhxJ9hIHPDvHLDvMWfZMO8ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IktpbGlkaSBhw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iS2FtZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlPJmXNzaXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU8mZcyBhw6fEsXFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJBeHRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biB2dXJ1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUGFyb2xsYXLEsW4gc8mZc2zJmW5kaXJpbG3JmXNpIMO8w6fDvG4gcXVsYXFsxLFxbGFyxLEgdGF4xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+Ik7DtnF0yZkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTI5MzYwMDQ5NjYwMTQ5MDIxNiI+IkV2yZkgZ2VkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjIzNzQ5NjU2Mjk1MjE1MjU4OSI+Ill1eGFyxLEgZ2VkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbWVudV9vdmVyZmxvd19kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyOTU2NTkwMzc1MDkwMDg0NTMiPiLGj2xhdsmZIHNlw6dpbWzJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNzk2NTk4NDM2MDkwMzY5MzkwMyI+IiUxJHMsICUyJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfc3VidGl0bGVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNjk4NTU0NjUzMDQ3MTc4MDcyNyI+IiUxJHMsICUyJHMsICUzJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX2ludGVybmFsIiBtc2dpZD0iNDg5MTkxNjgzMzY1NzkyOTI2MyI+IkRheGlsaSB5YWRkYcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9zZF9jYXJkIiBtc2dpZD0iMzI4Mjk0ODg2MTM3ODI4Njc0NSI+IlNEIGthcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3VzYiIgbXNnaWQ9IjMwMTc5NTQwNTk1Mzg1MTcyNzgiPiJVU0IgeWFkZGHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dHJhY3RfZWRpdF9tZW51X2J1dHRvbiIgbXNnaWQ9Ijg5NDA0Nzg3MzA0OTY2MTAxMzciPiJSZWRha3TJmSBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE5NTU2Mzg4NjIxMjIyMzIzNDIiPiJEYXRhIGlzdGlmYWTJmSB4yZliyZlyZGFybMSxxJ/EsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ19ib2R5IiBtc2dpZD0iMjgxNDY3MzU1MTQ3MTk2OTk1NCI+IsSwc3RpZmFkyZkgdsmZIGF5YXJsYXLEsSBnw7ZybcmZayDDvMOnw7xuIHRveHVudW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzA5MzMzNDQxOTUxODcwNjY4NiI+IjJHLTNHIGRhdGEgZGVha3RpdmRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfdGl0bGUiIG1zZ2lkPSI3NjM2NDg5NDM2ODE5NDcwNzYxIj4iNEcgZGF0YSBkZWFrdGl2IGVkaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzg2OTQwMjUxOTM5MTYzMTg4NCI+Ik1vYmlsIGRhdGEgZGVha3RpdmRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF90aXRsZSIgbXNnaWQ9Ijg5OTIxNTQ3MzY0NDEyODQ4NjUiPiJXaS1GaSBkYXRhIGRlYWt0aXYgZWRpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+IkFrdGl2bMmZxZ9kaXJtyZlrIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI3MDI2NzM5MTIxMTM4MDA1MjMxIj4iMkctM0cgZGF0YSBsaW1pdGkgYcWfxLFsxLFiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMTEwNjU2Mjc3OTMxMTIwOTAzOSI+IjRHIGRhdGEgbGltaXRpIGtlw6dpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjI3OTI0MDU3MjE2NTQxMjE2OCI+Ik1vYmlsIGRhdGEgbGltaXRpIGtlw6dpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI4NzQzODU2MDA2Mzg0ODI1OTc0Ij4iV2ktRmkgZGF0YSBsaW1pdGkga2XDp2lsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2xpbWl0X3Nub296ZWRfYm9keSIgbXNnaWQ9IjcwMzU0OTAyNzgyOTg0NDE3NjciPiI8eGxpZmY6ZyBpZD0iU0laRSI+JXM8L3hsaWZmOmc+IG3DvMmZeXnJmW4gZWRpbG1pxZ8gbGltaXQgYcWfxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF90aXRsZSIgbXNnaWQ9IjU5NjUxNTczNjEwMzYzMjE5MTQiPiJBcnhhcGxhbiBkYXRhc8SxIG3JmWhkdWRsYcWfZMSxcsSxbGTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF9ib2R5IiBtc2dpZD0iNjc0MTUyMTMzMDk5NzQ1Mjk5MCI+Ik3JmWhkdWRpeXnJmXRpIGFyYWRhbiBxYWxkxLFybWFxIMO8w6fDvG4gdG94dW51biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jZXJ0aWZpY2F0ZSIgbXNnaWQ9IjY1MTAwNDA0ODYwNDkyMzc2MzkiPiJUyZlobMO8a8mZc2l6bGlrIHNlcnRpZmlrYXTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jZXJ0aWZpY2F0ZV9pc192YWxpZCIgbXNnaWQ9IjY4MjUyNjMyNTA3NzQ1NjkzNzMiPiJCdSBzZXJ0aWZpa2F0IGV0aWJhcmzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX3RvIiBtc2dpZD0iNDU0MjM5NDgwMjc0OTIxMDMyIj4iVmVyaWxpYjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21tb25fbmFtZSIgbXNnaWQ9IjIyMzMyMDkyOTk0MzQxNzI2NDYiPiLDnG11bWkgYWQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnX25hbWUiIG1zZ2lkPSI2OTczNTYxMTkwNzYyMDg1MjM2Ij4iVMmZxZ9raWxhdDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdfdW5pdCIgbXNnaWQ9IjcyNjU5ODE4OTA0MjIwNzAzODMiPiJUyZnFn2tpbGF0aSB2YWhpZDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfYnkiIG1zZ2lkPSIyNjQ3NTg0OTg4MDU3NDgxNTY2Ij4iVMmZcsmZZmluZMmZbiB2ZXJpbGliOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZhbGlkaXR5X3BlcmlvZCIgbXNnaWQ9Ijg4MTg4ODYxMzc1NDU5ODMxMTAiPiJLZcOnyZlybGlsaWs6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX29uIiBtc2dpZD0iNTg5NTAxNzQwNDM2MTM5NzIzMiI+IkTJmXJjIG9sdW51YjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHBpcmVzX29uIiBtc2dpZD0iMzY3NjI0Mjk0OTkxNTk1OTgyMSI+IkJpdG3JmSB2YXh0xLE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VyaWFsX251bWJlciIgbXNnaWQ9Ijc1ODgxNDA2NzY2MDg2MjQ5MyI+IlNlcml5YSBuw7ZtcsmZc2k6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZ2VycHJpbnRzIiBtc2dpZD0iNDUxNjAxOTYxOTg1MDc2MzA0OSI+IkJhcm1hcSBpemzJmXJpOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTI1Nl9maW5nZXJwcmludCIgbXNnaWQ9IjQzOTEyNzEyODY0NzcyNzkyNjMiPiJTSEEtMjU2IGJhcm1hcSBpemk6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhMV9maW5nZXJwcmludCIgbXNnaWQ9Ijc5MzAzMzAyMzUyNjk0MDQ1ODEiPiJTSEEtMSBiYXJtYXEgaXppOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2Nob29zZXJfdmlld19zZWVfYWxsIiBtc2dpZD0iNDI5MjU2OTM4Mzk3NjYzNjIwMCI+IkhhbcSxc8SxbsSxIHNlw6fEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI0NzEwMDEzODY0OTc0MDQwNjE1Ij4iRsmZYWxpeXnJmXRpIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX2FjdGlvbl9wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iNTI0NzY4NDQzNTk3OTE0OTIxNiI+IkJ1bnVubGEgcGF5bGHFn8SxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxpc3RfZGVsaW1ldGVyIiBtc2dpZD0iMzk3NTExNzU3MjE4NTQ5NDE1MiI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VuZGluZyIgbXNnaWQ9IjMyNDU2NTM2ODEwMDgyMTgwMzAiPiJHw7ZuZMmZcmlsaXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hCcm93c2VyRGVmYXVsdCIgbXNnaWQ9IjIwNTc5NTE5NDcyOTc2MTQ3MjUiPiJCcmF1emVyIGnFn8mZIHNhbMSxbnPEsW4/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iU2V0dXBDYWxsRGVmYXVsdCIgbXNnaWQ9IjU4MzQ5NDg0NjkyNTM3NTg1NzUiPiJayZluZ2kgccmZYnVsIGVkyZlrPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9hbHdheXMiIG1zZ2lkPSI4MDE3NzcwNzQ3ODAxNDk0OTMzIj4iSMmZbWnFn8mZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfcmVzb2x2ZXJfdXNlX29uY2UiIG1zZ2lkPSIyNDA0NjQ0Nzk3MTQ5MTczNzU4Ij4iU2FkyZljyZkgYmlyIGTJmWbJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYxNzA1Mzg5ODE2NzEyNzQ3MSI+IlBsYW7Fn2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDIzOTI5MTI3MzQyMDE0MDEyMyI+IlRlbGVmb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWVfaGVhZHBob25lcyIgbXNnaWQ9IjgxMTk5NzE4NDM4MDM0MzkxMTAiPiJRdWxhcWzEsXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWVfZG9ja19zcGVha2VycyIgbXNnaWQ9IjYyNDA2MDI5ODIyNzY1OTE4NjQiPiJEb2sgc3Bpa2VybMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbWVkaWFfcm91dGVfbmFtZV9oZG1pIiBtc2dpZD0iMjQ1MDk3MDM5OTAyMzQ3ODA1NSI+IkhETUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGggYXVkaW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlNpbXNpeiBla3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJIYXrEsXJkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iTWVkaWEgw6fEsXjEscWfxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iU2thbiBlZGlsaXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJRb8WfdWx1ci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4ixo9sw6dhdMSxbWzEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNjczOTg5OTk2MjY4MTg4NjQwMSI+IsaPbMOnYXTEsW1sxLEgZGV5aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfaW5fdXNlIiBtc2dpZD0iNDUzMzc4NjAzMTA5MDE5ODA2MyI+IsSwc3RpZmFkyZkgb2x1bnVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2J1aWx0X2luX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjI1ODMxMzQyOTQyOTI1NjM5NDEiPiJEYXhpbGkgZWtyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfaGRtaV9kaXNwbGF5X25hbWUiIG1zZ2lkPSIxNTU1MjY0NTU5MjI3NDcwMTA5Ij4iSERNSSBFa3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLDlnJ0w7xrICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IiwgdMmZaGzDvGvJmXNpeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iU2ltc2l6IGVrcmFuIHFvxZ91bHViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkJ1IGVrcmFuIGRpZ8mZciBjaWhhemRhIGfDtnN0yZlyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iQmHEn2xhbnTEsW7EsSBryZlzaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IlTJmWNpbGkgesmZbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLFnmFibG9udSB1bnV0bXXFn2FtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiJZYW5sxLHFnyBNb2RlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IllhbmzEscWfIMWeaWZyyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUElOIHPJmWh2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRkPC94bGlmZjpnPiBzYW5pecmZIHNvbnJhIHllbmlkyZluIGPJmWhkIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLFnmFibG9udW51enUgw6fJmWtpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNJTSBQSU4ga29kdSBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJQxLBOIGtvZHUgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiJQYXJvbCBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNIGluZGkgZGVha3RpdmRpci4gRGF2YW0gZXRtyZlrIMO8w6fDvG4gUFVLIGtvZHUgZGF4aWwgZWRpbi4gxo9sYXbJmSBtyZlsdW1hdCDDvMOnw7xuIG9wZXJhdG9yYSBtw7xyYWNpyZl0IGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IsSwc3TJmWRpeWluaXogUMSwTiBrb2R1IGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4ixLBzdMmZZGl5aW5peiBQSU4ga29kdSB0yZlzZGlxbMmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJTxLBNIGthcnTEsW4ga2lsaWRpIGHDp8SxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IllhbmzEscWfIFDEsE4ga29kLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IjQtZMmZbiA4LcmZIHHJmWTJmXIgcsmZccmZbWkgb2xhbiBQSU4geWF6xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyBrb2QgOCByyZlxyZltIHbJmSB5YSBkYWhhIMOnb3ggb2xtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iRMO8emfDvG4gUFVLIGtvZHUgeWVuaWTJmW4gZGF4aWwgZWRpbi4gVMmZa3JhcmxhbmFuIGPJmWhkbMmZciBTSU1cJ2kgYmlyZMmZZsmZbGlrIHPEsXJhZGFuIMOnxLF4YXJhY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ga29kbGFyxLEgdXnEn3VuIGRleWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iSMmZZGRpbmTJmW4gw6dveCBjyZloZCBlZGlsZGkhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBHb29nbGUgaGVzYWLEsW7EsXogaWzJmSBkYXhpbCBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4ixLBzdGlmYWTJmcOnaSBhZMSxIChlLXBvw6d0KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4ixZ5pZnLJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4iRGF4aWwgb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+IllhbmzEscWfIGlzdGlmYWTJmcOnaSBhZMSxIHbJmSB5YSBwYXJvbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4ixLBzdGlmYWTJmcOnaSBhZMSxbsSxesSxIHbJmSB5YSBwYXJvbHVudXp1IHVudXRtdXN1bnV6P1xuICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiBsaW5raW7JmSBkYXhpbCBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+Ikhlc2FiIHlveGxhbsSxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iUElOIGtvZHVudXp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldGRpbml6LlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IsWeaWZyyZluaXppIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldGRpbml6LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIHlveGxhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iTW9kZWxpbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gw6fJmWttaXNpbml6LlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4iU2l6IHBsYW7Fn2V0IGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgdcSfdXJzdXogY8mZaGQgZXRzyZluaXosIHBsYW7Fn2V0IGZhYnJpayBheWFybGFyxLFuYSBzxLFmxLFybGFuYWNhcSB2yZkgYsO8dMO8biBtyZlsdW1hdGxhcsSxbsSxeiBpdMmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4iU2l6IHRlbGVmb24ga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHXEn3Vyc3V6IGPJmWhkIGV0bWlzaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZMmZZsmZIGTJmSB1xJ91cnN1eiBjyZloZCBldHPJmW5peiwgdGVsZWZvbiBmYWJyaWsgYXlhcmxhcsSxbmEgc8SxZsSxcmxhbmFjYXEgdsmZIGLDvHTDvG4gbcmZbHVtYXRsYXLEsW7EsXogaXTJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiJTaXogcGxhbsWfZXQga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIFBsYW7Fn2V0IGZhYnJpayBheWFybGFyxLFuYSBzxLFmxLFybGFuYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiJTaXogdGVsZWZvbnVuIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB5YW5sxLHFnyBjyZloZCBldG1pc2luaXouIFRlbGVmb24gYXJ0xLFxIGRlZm9sdCB6YXZvZCBoYWzEsW5hIHPEsWbEsXJsYW5hY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJTaXoga2lsaWRpIGHDp21hcSDDvMOnw7xuIMWfYWJsb251IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBzyZlodiDDp8mZa2Rpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkYWhhIHXEn3Vyc3V6IGPJmWhkZMmZbiBzb25yYSBwbGFuxZ9ldGluaXppbiBraWxpZGluaSBlLXBvw6d0IGhlc2FixLFuxLF6bGEgYcOnbWFxIHTJmWzJmWIgb2x1bmFjYXEuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSBiaXIgZGFoYSB5b3hsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJTaXogYXJ0xLFxIG1vZGVsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gZGF4aWwgZXRtaXNpbml6Ljx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgeWFubMSxxZ8gZGF4aWwgZXRzyZluaXosIHRlbGVmb251biBraWxpZGluaW4gYcOnxLFsbWFzxLEgw7zDp8O8biBlbGVrdHJvbiBwb8OndCDDvG52YW7EsW7EsXogdMmZbMmZYiBvbHVuYWNhcS5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIGPJmWhkIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIgLSAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IlnEscSfxLHFn2TEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYWZlX21lZGlhX3ZvbHVtZV93YXJuaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMyNDE2MTkzOTQ3NTQ3ODA2NiI+IlPJmXMgZ8O8Y8O8IHTDtnZzaXnJmSBlZGlsyZluIHPJmXZpeXnJmWTJmW4gYXJ0xLFyxLFsc8Sxbj9cblV6dW4gbcO8ZGTJmXQgecO8a3PJmWsgc8mZcyBnw7xjw7wgaWzJmSBkaW5syZltyZkgU2l6aW4gZcWfaXRtyZkgcWFiaWxpeXnJmXRpbml6yZkgbcmZbmZpIHTJmXNpciBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250aW51ZV90b19lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE2MjY0MjczNzIzMTYwNzAyNTgiPiLGj2zDp2F0xLFtbMSxxJ/EsSBha3RpdmzJmcWfZGlybcmZayDDvMOnw7xuIGlraSBiYXJtYcSfxLFuxLF6xLEgYmFzxLFsxLEgc2F4bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZW5hYmxlZCIgbXNnaWQ9IjEzODE5NzIwNDg1NjQ1NDc2ODUiPiLGj2zDp2F0xLFtbMSxbMSxcSBha3RpdmzJmcWfZGlyaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9hY2Nlc3NpYmlsaXR5X2NhbmNlbGVkIiBtc2dpZD0iMzgzMzkyMzI1Nzk2NjYzNTY3MyI+IkdpcmnFnyBpbWthbsSxIGzJmcSfdiBlZGlsaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiJDYXJpIGlzdGlmYWTJmcOnaSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3duZXJfbmFtZSIgbXNnaWQ9IjI3MTY3NTU0NjAzNzYwMjgxNTQiPiJTYWhpYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVycm9yX21lc3NhZ2VfdGl0bGUiIG1zZ2lkPSI0NTEwMzczMDgzMDgyNTAwMTk1Ij4iWMmZdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbm9fcmVzdHJpY3RlZF9hY2NvdW50cyIgbXNnaWQ9IjU3Mzk0NjMyNDk2NzM3Mjc3MzYiPiJCdSB0yZl0YmlxIG3JmWhkdWQgcHJvZmlsbMmZciDDvMOnw7xuIGhlc2FibGFyxLEgZMmZc3TJmWtsyZltaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX25vdF9mb3VuZCIgbXNnaWQ9IjM0MjkxNDE4NTM0OTg5MjczNzkiPiJCdSDJmW3JmWxpeXlhdMSxIGlkYXLJmSBldG3JmWsgw7zDp8O8biBoZcOnIGJpciB0yZl0YmlxIHRhcMSxbG1hZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJldm9rZSIgbXNnaWQ9IjU0MDQ0NzkxODUyMjgyNzE1ODYiPiJMyZnEn3YgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTAiIG1zZ2lkPSI3ODc1NDI3NDg5NDIwODIxNzkzIj4iSVNPIEEwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMSIgbXNnaWQ9IjM3NjA3MzQ0OTkwNTA4NzUzNTYiPiJJU08gQTEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EyIiBtc2dpZD0iNTk3MzI2NjM3ODAyMDE0NDM4MiI+IklTTyBBMiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTMiIG1zZ2lkPSIxMzczNDA3MTA1Njg3MzAwODg0Ij4iSVNPIEEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNCIgbXNnaWQ9IjY2ODk3NzI4MDc5ODI1OTcyNTQiPiJJU08gQTQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E1IiBtc2dpZD0iNTM1MzU0OTY1MjAxNTc0MTA0MCI+IklTTyBBNSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTYiIG1zZ2lkPSI4NTg1MDM4MDQ4Njc0OTExOTA3Ij4iSVNPIEE2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNyIgbXNnaWQ9IjY2NDE4MzY3MTY5NjM4MzkxMTkiPiJJU08gQTciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E4IiBtc2dpZD0iNzU3MTEzOTQzNzQ2NTY5MzM1NSI+IklTTyBBOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTkiIG1zZ2lkPSIxMzc4NDU1ODkxOTU3MTE1MDc5Ij4iSVNPIEE5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMTAiIG1zZ2lkPSIyNDgwNzQ3NDU3NDI5NDc1MzQ0Ij4iSVNPIEExMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjAiIG1zZ2lkPSIzOTY1OTM1MDk3NjYxMTA4MDM5Ij4iSVNPIEIwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMSIgbXNnaWQ9IjI1MDU3NTMyODUwMTAxMTU0MzciPiJJU08gQjEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IyIiBtc2dpZD0iODc2Mzg3NDcwOTg1OTQ1ODQ1MyI+IklTTyBCMiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjMiIG1zZ2lkPSI0MjEwNTA2Njg4MTkxNzY0MDc2Ij4iSVNPIEIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNCIgbXNnaWQ9IjU3NDk0MDQxNjU4ODg1MjYwMzQiPiJCNCBJU08iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I1IiBtc2dpZD0iNzY0MDYyNzQxNDYyMTkwNDczMyI+IklTTyBCNSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjYiIG1zZ2lkPSI3MzQyOTg4ODY0NzEyNzQ4NTQ0Ij4iSVNPIEI2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNyIgbXNnaWQ9IjUwNjk4NDQwNjUyMzUzODI0MjkiPiJJU08gQjciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I4IiBtc2dpZD0iNzMxNjgxODkyMjI3ODc3OTc3NCI+IklTTyBCOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjkiIG1zZ2lkPSI1NDE0NzI3MDk0MDI2NTMyMzQxIj4iSVNPIEI5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMTAiIG1zZ2lkPSI1MjUxMjUzNzMxODMyMDQ4MTg1Ij4iSVNPIEIxMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzAiIG1zZ2lkPSI0MDAzMTM4MzQyNjcxOTY0MjE3Ij4iSVNPIEMwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMSIgbXNnaWQ9IjE5MzUxODgwNjMzOTM1NTMwMDgiPiJJU08gQzEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MyIiBtc2dpZD0iMzE5NzMwNzk2OTcxMjA2OTkwNCI+IklTTyBDMiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzMiIG1zZ2lkPSI0MzM1ODI2MDg3MzIxOTEzNTA4Ij4iSVNPIEMzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNCIgbXNnaWQ9IjM3NDU2Mzk1OTgyODEwMTUwMDUiPiJJU08gQzQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M1IiBtc2dpZD0iODI2OTQ1Nzc2NTgyMjc5MTAxMyI+IklTTyBDNSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzYiIG1zZ2lkPSI1NjY2NjYxMDUyNjAzNDY5MzAiPiJJU08gQzYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M3IiBtc2dpZD0iODY3ODQxMzE4MDc4MjYwODQ5OCI+IklTTyBDNyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzgiIG1zZ2lkPSI4MzkyMzc2MjA2NjI3MDQxNzMwIj4iSVNPIEM4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jOSIgbXNnaWQ9IjkxOTE2MTMzNzIzMjQ4NDU0MDUiPiJJU08gQzkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MxMCIgbXNnaWQ9IjczMjc3MDk2OTkxODQ5MjA4MjIiPiJJU08gQzEwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2xldHRlciIgbXNnaWQ9IjQxOTE4MDU2MTU4Mjk0NzI5NTMiPiJNyZlrdHViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2d2cm5tdF9sZXR0ZXIiIG1zZ2lkPSI3ODUzMzgyMTkyNjQ5NDA1NTA3Ij4iSMO2a3VtyZl0IE3JmWt0dWJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2xlZ2FsIiBtc2dpZD0iNjY5Nzk4Mjk4ODI4MzgyMzE1MCI+IkjDvHF1cWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfanVuaW9yX2xlZ2FsIiBtc2dpZD0iMzcyNzc0Mzk2OTkwMjc1ODk0OCI+Iktpw6dpayBIw7xxdXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGVkZ2VyIiBtc2dpZD0iMjgxODcxNDY0ODk2NjAxMjM2Ij4iUW92bHVxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX3RhYmxvaWQiIG1zZ2lkPSI1Nzc1OTY2NDE2MzMzNTc4MTI3Ij4iUcSxc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3cml0ZV9mYWlsX3JlYXNvbl9jYW5jZWxsZWQiIG1zZ2lkPSI3MDkxMjU4Mzc4MTIxNjI3NjI0Ij4iTMmZxJ92IGVkaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndyaXRlX2ZhaWxfcmVhc29uX2Nhbm5vdF93cml0ZSIgbXNnaWQ9IjgxMzI1MDU0MTc5MzUzMzc3MjQiPiJLb250ZW50IHlhem1uYSB4yZl0YXPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNjA0ODkxMzg4MDE4NDYyODExOSI+Im5hbcmZbHVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX2FkbWluX3BpbiIgbXNnaWQ9Ijc4MzY0MzczMTg5NTE0Mzk3MCI+IkFkbWluaXN0cmF0b3IgUElOIGtvZHVudSBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX3BpbiIgbXNnaWQ9IjMzOTU5NTM0MjEzNjg0NzYxMDMiPiJQSU4gZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9pbmNvcnJlY3QiIG1zZ2lkPSI4NTcxNTEyMDAzOTU1MDc3OTI0Ij4iU8mZaHYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfb2xkX3BpbiIgbXNnaWQ9IjE0NjIyMDYyMjU1MTI5MTA3NTciPiJDYXJpIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9uZXdfcGluIiBtc2dpZD0iNTk1OTYwNjY5MTYxOTk1OTE4NCI+IlllbmkgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NvbmZpcm1fcGluIiBtc2dpZD0iODUwMTUyMzgyOTYzMzE0NjIzOSI+IlllbmkgUElOXCdpIHTJmXNkaXEgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jcmVhdGVfcGluIiBtc2dpZD0iODAxNzYwMDAwMDI2MzQ1MDMzNyI+IkTJmXlpxZ9tyZkgbcmZaGR1ZGl5ecmZdGzJmXJpIMO8w6fDvG4gUMSwTiB5YXJhZMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lcnJvcl9kb2VzbnRfbWF0Y2giIG1zZ2lkPSIyMjI0MjE0MTkwOTA2OTk0NTQ4Ij4iUMSwTiB1ecSfdW4gZ8mZbG1pci4gWWVuaWTJmW4gY8mZaGQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfdG9vX3Nob3J0IiBtc2dpZD0iODE3Mzk4Mjc1NjI2NTc3Nzc5MiI+IlDEsE4gw6dveCBxxLFzYWTEsXIuIMaPbiBhesSxIDQgcsmZccmZbSBvbG1hbMSxZMSxci4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InJlc3RyX3Bpbl9jb3VudGRvd24iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMTEwNTA5OTUxOTg1NDg2NzUiPiIxIHNhbml5yZkgc29ucmEgdMmZa3JhciB5b3hsYXnEsW4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYW5pecmZIHNvbnJhIHTJmWtyYXIgeW94bGF5xLFuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IkRhaGEgc29ucmEgeWVuaWTJmW4geW94bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRyYW5zaWVudF9uYXZpZ2F0aW9uX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjQ5MDc4NDQwNDM2MTExMjM0MjYiPiJQYW5lbGkgZ8O2c3TJmXJtyZlrIMO8w6fDvG4gZWtyYW7EsW4ga8O8bmPDvG7DvCBzw7xyw7zFn2TDvHLDvG4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0cmFuc2llbnRfbmF2aWdhdGlvbl9jb25maXJtYXRpb25fbG9uZyIgbXNnaWQ9IjgwNjE2ODU5MjA1MDgwODY2OTciPiJTaXN0ZW0gcGFuZWxpbmkgZ8O2c3TJmXJtyZlrIMO8w6fDvG4gZWtyYW7EsW4ga8O8bmPDvG5kyZluIHPDvHLDvMWfZMO8csO8biI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlNzliYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxNTg2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCisqKgorKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImJ5dGVTaG9ydCIgbXNnaWQ9IjgzNDA5NzM4OTI3NDIwMTkxMDEiPiJCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2lsb2J5dGVTaG9ydCIgbXNnaWQ9IjU5NzM3ODk3ODM1MDQ3NzE4NzgiPiJLQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZ2FieXRlU2hvcnQiIG1zZ2lkPSI2MzU1ODUxNTc2NzcwNDI4OTIyIj4iTUIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnaWdhYnl0ZVNob3J0IiBtc2dpZD0iMzI1OTg4MjQ1NTIxMjE5MzIxNCI+IkdCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGVyYWJ5dGVTaG9ydCIgbXNnaWQ9IjIzMTYxMzAxODE1OTE4Njk2MiI+IlRCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGV0YWJ5dGVTaG9ydCIgbXNnaWQ9IjU2Mzc4MTY2ODAxNDQ5OTAyMTkiPiJQQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbGVTaXplU3VmZml4IiBtc2dpZD0iOTE2NDI5Mjc5MTUwMDUzMTk0OSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJHM8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlVOSVQiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW50aXRsZWQiIG1zZ2lkPSI0NjM4OTU2OTU0ODUyNzgyNTc2Ij4iQmHFn2zEsXFzxLF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxsaXBzaXMiIG1zZ2lkPSI3ODk5ODI5NTE2MDQ4ODEzMjM3Ij4iLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxsaXBzaXNfdHdvX2RvdHMiIG1zZ2lkPSIxMjI4MDc4OTk0ODY2MDMwNzM2Ij4i4oClIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHlQaG9uZU51bWJlciIgbXNnaWQ9Ijc2OTQwNjMwNDIwNzk2NzY1MTciPiIoVGVsZWZvbiBuw7ZtcsmZc2kgeW94ZHVyKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVua25vd25OYW1lIiBtc2dpZD0iMjI3NzU1NjU0Njc0Mjc0NjUyMiI+IihOYW3JmWx1bSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0Vm9pY2VNYWlsQWxwaGFUYWciIG1zZ2lkPSIyNjYwMDIwOTkwMDk3NzMzMDc3Ij4iU8mZc2xpIHBvw6d0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdE1zaXNkbkFscGhhVGFnIiBtc2dpZD0iMjg1MDg4OTc1NDkxOTU4NDY3NCI+Ik1TSVNETjEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlFcnJvciIgbXNnaWQ9IjUxNTQ0OTk0NTc3MzkwNTI5MDciPiJCYcSfbGFudMSxIHByb2JsZW1pIHbJmSB5YSB5YWxuxLHFnyBNTSBrb2R1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUZkbkVycm9yIiBtc2dpZD0iNTIyNDM5ODIxNjM4NTMxNjQ3MSI+IsaPbcmZbGl5eWF0IHlhbG7EsXogc2FiaXQgbsO2bXLJmWzJmXLJmSB5xLHEn8SxbWxhIG3JmWhkdWRsYcWfxLFiLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkIiBtc2dpZD0iODE0NzI3ODM0NjQxNDcxNDMxNSI+IlNlcnZpcyBpxZ/JmSBzYWzEsW5kxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWRGb3IiIG1zZ2lkPSI2ODU2MjI4MTQwNDUzNDcxMDQxIj4iWGlkbcmZdCBha3RpdiBlZGlsbWnFn2RpcjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRGlzYWJsZWQiIG1zZ2lkPSIxOTM3NTUzMjI2NTkyNTE2NDExIj4iWGlkbcmZdCBkZWFrdGl2IGVkaWxpYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlUmVnaXN0ZXJlZCIgbXNnaWQ9IjYyNzUwMTkwODI1OTgxMDI0OTMiPiJRZXlkaXl5YXQgdcSfdXJsdSBvbGR1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFcmFzZWQiIG1zZ2lkPSIxMjg4NTg0Njk1Mjk3MjAwOTcyIj4iU2lsaW5tyZkgdcSfdXJsdSBvbG11xZ9kdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRJbmNvcnJlY3QiIG1zZ2lkPSI3NjEyMjA4ODM5NDUwMTI4NzE1Ij4iWWFubMSxxZ8gcGFyb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlDb21wbGV0ZSIgbXNnaWQ9IjgyMzI1Mjc0OTU0MTE2OTgzNTkiPiJNTUkgdGFtYW1kxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhZFBpbiIgbXNnaWQ9IjkwMTUyNzc2NDU1NDY3MTAwMTQiPiJEYXhpbCBldGRpeWluaXoga8O2aG7JmSBQxLBOIGTDvHpnw7xuIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhZFB1ayIgbXNnaWQ9IjU0ODcyNTc2NDcwODExMzIyMDEiPiJEYXhpbCBldGRpeWluaXogUFVLIGTDvHpnw7xuIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pc21hdGNoUGluIiBtc2dpZD0iNjA5Mzc5MDU0NDk2ODYzNDE5Ij4iRGF4aWwgZXRkaXlpbml6IFDEsE4ga29kbGFyIHV5xJ91biBnyZlsbWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQaW4iIG1zZ2lkPSIzODUwMDE4NDQ1MTg3NDc1Mzc3Ij4iNC1kyZluIDgtyZkgccmZZMmZciByyZlxyZltaSBvbGFuIFBJTiB5YXrEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiI4IHbJmSBkYWhhIMOnb3ggcsmZccmZbWkgb2xhbiBQVUsgeWF6xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTaXppbiBTxLBNIGthcnQgUFVLIGlsyZkga2lsaWRsyZluaWIuIE9udSBhw6dtYXEgw7zDp8O8biBQVUsga29kdSB5YXrEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iU0lNIGthcnTEsW4ga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gUFVLMiB5YXrEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IkRheGlsIG9sYW4gesmZbmcgZWTJmW5pbiBJRFwnc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbGlyTW1pIiBtc2dpZD0iNzc4NDY3MzY3MzQ0NjgzMzA5MSI+IkdlZMmZbiBayZluZyBJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNmTW1pIiBtc2dpZD0iNTEyMzIxODk4OTE0MTU3MzUxNSI+IlrJmW5nIHnDtm5syZluZGlybcmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ3dNbWkiIG1zZ2lkPSI5MTI5Njc4MDU2Nzk1MDE2ODY3Ij4iWsmZbmcgZ8O2emzJmXlpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkJhTW1pIiBtc2dpZD0iNDU1MTkzMDY3OTI2NzcwNTgxIj4iWsmZbmcgcWFkYcSfYXPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlB3ZE1taSIgbXNnaWQ9IjcwNDM3MTU2ODc5MDUyNTQxOTkiPiJQYXJvbHUgZMmZeWnFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlBpbk1taSIgbXNnaWQ9IjMxMTMxMTc3ODAzNjExOTAzMDQiPiJQxLBOIGTJmXlpxZ9tyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ25pcE1taSIgbXNnaWQ9IjMxMTA1MzQ2ODA1NTc4NTcxNjIiPiJIYXrEsXJkYWvEsSBuw7ZtcsmZecmZIHrJmW5nIGVkaWxpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNuaXJNbWkiIG1zZ2lkPSIzMDYyMTAyMTIxNDMwNTQ4NzMxIj4iWsmZbmdsyZlyaW4gc2F5xLEgbcmZaGR1ZGxhxZ9kxLFyxLFsxLFiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iVGhyZWVXQ01taSIgbXNnaWQ9IjkwNTEwNDcxNzAzMjExOTAzNjgiPiLDnMOnIHlvbGx1IHrJmW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUnVhY01taSIgbXNnaWQ9Ijc4Mjc4ODc0NTkxMzgzMDg4ODYiPiJYb8WfYWfJmWxtyZl6IHrJmW5nbMmZcmTJmW4gaW10aW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ25kTW1pIiBtc2dpZD0iMzExNjQ0NjIzNzA4MTU3NTgwOCI+IsOHYXRkxLFyxLFsbWEgesmZbmdpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iRG5kTW1pIiBtc2dpZD0iMTI2NTQ3ODkzMjQxODMzNDMzMSI+Ik5hcmFoYXQgZXRtyZl5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPbiIgbXNnaWQ9IjQyOTQxNTQwOTE0NTc4MTkyMyI+IkFkyZl0yZluIHrJmW5nIGVkyZluaW4gSURcJ3NpIG3JmWhkdWRsYcWfZMSxcsSxbMSxci4gTsO2dmLJmXRpIHrJmW5nOiBNyZloZHVkbGHFn2TEsXLEsWzEsWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPZmYiIG1zZ2lkPSIzMDkyOTE4MDA2MDc3ODY0NjI0Ij4iQWTJmXTJmW4gesmZbmcgZWTJmW5pbiBJRFwnc2kgbcmZaGR1ZGxhxZ9kxLFyxLFsxLFyLiBOw7Z2YsmZdGkgesmZbmc6IE3JmWhkdWRsYcWfZMSxcsSxbG1hecSxYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPbiIgbXNnaWQ9IjYxNzk0MjUxODI4NTY0MTg0NjUiPiJBZMmZdMmZbiB6yZluZyBlZMmZbmluIElEXCdzaSBtyZloZHVkbGHFn2TEsXLEsWxtxLFyLiBOw7Z2YsmZdGkgesmZbmc6IE3JmWhkdWRsYcWfZMSxcsSxbMSxYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPZmYiIG1zZ2lkPSIyNTY3OTk4NjMzMTI0NDA4NTUyIj4iQWTJmXTJmW4gesmZbmcgZWTJmW5pbiBJRFwnc2kgbcmZaGR1ZGxhxZ9kxLFyxLFsbcSxci4gTsO2dmLJmXRpIHrJmW5nOiBNyZloZHVkbGHFn2TEsXLEsWxtYXnEsWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlTm90UHJvdmlzaW9uZWQiIG1zZ2lkPSI4NjE0ODMwMTgwNTA4Njg2NjY2Ij4iWGlkbcmZdCB0yZltaW4gZWRpbG3JmXlpYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSUGVybWFuZW50IiBtc2dpZD0iMzM3NzM3MTE0NTkyNjgzNTY3MSI+IlNpeiB6yZluZyBlZMmZbmluIElEIG5pemFtbGFyxLFuxLEgZMmZeWnFn8mZIGJpbG3JmXpzaXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZENoYW5nZWRUaXRsZSIgbXNnaWQ9IjU1OTIxODkzOTg5NTYxODc0OTgiPiJNyZloZHVkbGHFn2TEsXLEsWxtxLHFnyBrZcOnaWQgZMmZeWnFn2RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRGF0YSIgbXNnaWQ9Ijg2NTM3OTQ3ODQ2OTAwNjU1NDAiPiJEYXRhIHhpZG3JmXQgYmHEn2zEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRW1lcmdlbmN5IiBtc2dpZD0iNjU4MTE2Mzc3OTA3MjgzMzY2NSI+IlTJmWNpbGkgeGlkbcmZdCBiYcSfbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Ob3JtYWwiIG1zZ2lkPSI0OTUzODY3MDExMzg5NzUwNjczIj4iU8mZcyB4aWRtyZl0aSBiYcSfbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGxWb2ljZSIgbXNnaWQ9IjMzOTY5NjM2NTIxMDgxNTEyNjAiPiJCw7x0w7xuIFPJmXMgeGlkbcmZdGzJmXJpIGJhxJ9sxLFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uU21zIiBtc2dpZD0iODMxNDM1MjMyNzQ2MTYzODg5NyI+IlNNUyB4aWRtyZl0aSBibG9rbGFuxLFiLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlRGF0YSIgbXNnaWQ9Ijk5NjYzNjQ4NzEwNjE3MTMyMCI+IlPJmXMvZGF0YSB4aWRtyZl0bMmZcmkgYmxva2xhbsSxYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Wb2ljZVNtcyIgbXNnaWQ9IjE4ODg1ODgxNTI3OTIwMjM4NzMiPiJTyZlzL1NNUyB4aWRtyZl0bMmZcmkgYmxva2xhbsSxYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGwiIG1zZ2lkPSI1NjQzMDI4MjY0NDY2MDkyODIxIj4iQsO8dMO8biBzyZlzL2RhdGEvU01TIHhpZG3JmXRsyZlyaSBiYcSfbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NWb2ljZSIgbXNnaWQ9IjEyNTgzOTM4MTIzMzUyNTgwMTkiPiJTyZlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YSIgbXNnaWQ9Ijg3MjQ1Njc4MjA3NzkzNzg5MyI+Ik3JmWx1bWF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRkFYIiBtc2dpZD0iNTU2NjYyNDk5ODg0MDQ4NjQ3NSI+IkZBS1MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NTTVMiIG1zZ2lkPSIyMDE1NDYwMzczNzAxNTI3NDg5Ij4iU01TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YUFzeW5jIiBtc2dpZD0iNDUyMzQ1NDc4MzQ5ODU1MTQ2OCI+IkFzeW5jIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YVN5bmMiIG1zZ2lkPSI3NTMwMDAwNTE5NjQ2MDU0Nzc2Ij4iU2lueCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BhY2tldCIgbXNnaWQ9IjY5OTEwMDY1NTc5OTM0MjM0NTMiPiJQYWtldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BBRCIgbXNnaWQ9IjMyMzUyNTkwODU2NDgyNzEwMzciPiJQQUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDAiIG1zZ2lkPSI3MTcwMzM1NDcyMTk4Njk0OTQ1Ij4iUm9taW5xIGfDtnN0yZlyaWNpc2kgacWfbMmZa2RpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MSIgbXNnaWQ9IjUzMTQ4NjE1MTk3NTI1Mzg5MjIiPiJSb21pbnEgZ8O2c3TJmXJpY2lzaSBpxZ9syZlrIGRleWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQyIiBtc2dpZD0iODk2OTkyOTA0OTA4MTI2ODExNSI+IlJvbWlucSBnw7ZzdMmZcmljaXNpIHlhbsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MyIgbXNnaWQ9IjUxNDgyNTUwMjcwNDM5NDMzMTciPiJRb27Fn3VsdXFkYW4gS8mZbmFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ0IiBtc2dpZD0iODgwODQ1NjY4MjU1MDc5NjUzMCI+IkJpbmFkYW4ga8mZbmFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ1IiBtc2dpZD0iNzYwNDA2MzI1Mjg1MDM1NDM1MCI+IlJvbWlucSAtIEFyenVvbHVuYW4gc2lzdGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ2IiBtc2dpZD0iMjA1OTQ0MDgyNTc4Mjg3MTUxMyI+IlJvbWlucSAtIE3DvG1rw7xuIHNpc3RlbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NyIgbXNnaWQ9IjcxMTIwNzg3MjQwOTcyMzM2MDUiPiJSb21pbnEgLSBBbHlhbnMgcGFydG55b3J1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ4IiBtc2dpZD0iNTk4OTU2OTc3ODYwNDA4OTI5MSI+IlJvbWlucSAtIFByZW1pdW0gcGFydG55b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDkiIG1zZ2lkPSI3OTY5Mjk2ODExMzU1MTUyNDkxIj4iUm91bWlucSAtIFRhbSBYaWRtyZl0IEZ1bmtzaW9uYWxsxLHEn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMCIgbXNnaWQ9IjM5OTI5MDY5OTk4MTUzMTY0MTciPiJSb3VtaW5xIC0gUWlzbcmZbiBYaWRtyZl0IEZ1bmtzaW9uYWxsxLHEn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMSIgbXNnaWQ9IjQxNTQ0NzY4NTQ0MjY5MjA5NzAiPiJSb3VtaW5xIEJhbm5lcmkgQcOnxLFxZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTIiIG1zZ2lkPSIxMTg5MDcxMTE5OTkyNzI2MzIwIj4iUm9hbWluZyBCYW5uZXIgT2ZmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHRTZWFyY2hpbmciIG1zZ2lkPSI4MzYwMTQxODg1OTcyMjc5OTYzIj4iWGlkbcmZdCBheHRhcsSxbMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVOb3RGb3J3YXJkZWQiIG1zZ2lkPSIxNjgzNjg1ODgzODQxMjcyNTYwIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IFnDtm5syZluZGlyaWxtyZlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWQiIG1zZ2lkPSIxMzAyOTIyMTE3NDk4NTkwNTIxIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJESUFMSU5HX05VTUJFUiI+ezF9PC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWRUaW1lIiBtc2dpZD0iOTIwNjI1MTczNjUyNzA4NTI1NiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iRElBTElOR19OVU1CRVIiPnsxfTwveGxpZmY6Zz4gPHhsaWZmOmcgaWQ9IlRJTUVfREVMQVkiPnsyfTwveGxpZmY6Zz4gc2FuaXnJmSBzb25yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkIiBtc2dpZD0iNTA3MzIzNzgyNzYyMDE2NjI4NSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBZw7ZubMmZbmRpcmlsbcmZZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlUmVnaXN0ZXJlZFRpbWUiIG1zZ2lkPSI2NzgxNjIxOTY0MzIwNjM1MTcyIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IFnDtm5syZluZGlyaWxtyZlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZjQ29tcGxldGUiIG1zZ2lkPSIzMTE4ODQ4MjMwOTY2ODg2NTc1Ij4iw5Z6yZlsbGlrIGtvZHUgdGFtYW1sYW5kxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmNFcnJvciIgbXNnaWQ9IjMzMjc1NjAxMjY1ODg1MDA3NzciPiLGj2xhccmZIHByb2JsZW1pIHbJmSB5YSB5YW5sxLHFnyBmdW5rc2l5YSBrb2R1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvck9rIiBtc2dpZD0iMTE5MTkxOTM3ODA4MzQ3MjIwNCI+Ik9LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yIiBtc2dpZD0iNzk1NjM5MjUxMTE0NjY5ODUyMiI+IsWeyZliyZlryZkgeMmZdGFzxLEgdmFyIGlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JMb29rdXAiIG1zZ2lkPSI0NzExNjg3NDU2MTExOTYzMTYzIj4iVVJMIHRhcMSxbGEgYmlsbcmZZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRBdXRoU2NoZW1lIiBtc2dpZD0iNjI5OTk4MDI4MDQ0MjA3Njc5OSI+IlNheXQgYXV0ZW50aWZpa2FzaXlhIHN4ZW1pIGTJmXN0yZlrbMmZbm1pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JBdXRoIiBtc2dpZD0iMTQzNTA2NTYyOTQzODA0NDUzNCI+IlTJmXNkaXEgZWRpbMmZIGJpbG3JmWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclByb3h5QXV0aCIgbXNnaWQ9IjE3ODgyMDcwMTA1NTkwODEzMzEiPiJQcm9rc2kgc2VydmVyIHZhc2l0yZlzaWzJmSB0yZlzZGlxbMmZbm3JmSB1xJ91cnN1eiBvbGR1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckNvbm5lY3QiIG1zZ2lkPSI4NzE0MjczMjM2MzY0NjQwNTQ5Ij4iU2VydmVyyZkgcW/Fn3VsYSBiaWxtyZlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JJTyIgbXNnaWQ9IjIzNDA1NTgxOTc0ODkzMDIxODgiPiJTZXJ2ZXJsyZkgyZlsYXHJmSBhbMSxbm1hZMSxLiBTb25yYSBjyZloZCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclRpbWVvdXQiIG1zZ2lkPSI0NzQzNDAzNzAzNzYyODgzOTU0Ij4iU2VydmVyIGlsyZkgb2xhbiDJmWxhccmZIHphbWFuIGHFn8SxbcSxbmEgbcmZcnV6IHFhbGTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JSZWRpcmVjdExvb3AiIG1zZ2lkPSI4Njc5NTk2MDkwMzkyNzc5NTE2Ij4iQnUgc8mZaGlmyZlkyZkgaMmZZGRpbmTJmW4gw6dveCBzZXJ2ZXIgecO2bmzJmW5kaXJpbG3JmWzJmXJpIHZhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JVbnN1cHBvcnRlZFNjaGVtZSIgbXNnaWQ9IjUwMTU3MzA4MTI5MDYxOTIyMDgiPiJQcm90b2tvbCBkyZlzdMmZa2zJmW5taXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmFpbGVkU3NsSGFuZHNoYWtlIiBtc2dpZD0iOTY1NDk2MDYwMDA2NTg2NDEiPiJHw7x2yZlubGkgYmHEn2xhbnTEsSB5YXJhZMSxbGEgYmlsbcmZZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQmFkVXJsIiBtc2dpZD0iMzYzNjkyOTcyMjcyODg4MTk3MiI+IlVSTCB5YW5sxLHFnyBvbGR1xJ91IMO8w6fDvG4gc8mZaGlmyZluaSBhw6dtYXEgbcO8bWvDvG4gb2xtYWTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlIiBtc2dpZD0iMjE3MDc4ODUxNTA1MjU1ODY3NiI+IkZheWxhIGdpcmnFnyBiYcWfIHR1dG1hZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZpbGVOb3RGb3VuZCIgbXNnaWQ9IjYyMDM4NTY2MTIwNDI2NTUwODQiPiJUyZlsyZliIG9sdW5hbiBmYXlsIHRhcMSxbG1hZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclRvb01hbnlSZXF1ZXN0cyIgbXNnaWQ9IjEyMzUzOTY5MjcwODcxODgyNTMiPiJIyZlkZGluZMmZbiDDp294IHNvcsSfdSBpxZ9syZluaWxpci4gRGFoYSBzb25yYSB5b3hsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODk2NzcxMDAyNTAzNjE2MzgyMiI+Ijx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lMSRzPC94bGlmZjpnPiDDvMOnw7xuIGdpcmnFnyB4yZl0YXPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luYyIgbXNnaWQ9IjgzNTM1MjMwNjAyNjkzMzU2NjciPiJTaW54cm9ubGHFn2TEsXJtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luY05vdGlmaWNhdGlvblRpdGxlIiBtc2dpZD0iMzk3NzQzMzQ5MTkxOTAxNDU4Ij4iU2lueHJvbmxhxZ9kxLFybWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVRvb01hbnlEZWxldGVzTm90aWZpY2F0aW9uRGVzYyIgbXNnaWQ9IjgxMDA5ODE0MzUwODA2OTY0MzEiPiJIyZlkZGluZMmZbiDDp294IDx4bGlmZjpnIGlkPSJDT05URU5UX1RZUEUiPiVzPC94bGlmZjpnPiBzaWxpbm3JmWzJmXJpIHZhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NDk0MDE5MjM0MTAyMTU0ODk2Ij4iUGxhbsWfZXRpbiB5YWRkYcWfxLEgZG9sdWR1ci4gQm/FnyB5ZXIgw7zDp8O8biBiyZl6aSBmYXlsbGFyxLEgc2lsaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NzU5OTkyODY2ODAwMDA1NDEiPiJUZWxlZm9udW4geWFkZGHFn8SxIGRvbHVkdXIuIEJvxZ8geWVyIMO8w6fDvG4gYsmZemkgZmF5bGxhcsSxIHNpbGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lIiBtc2dpZD0iNjU0NTY5NjAwNzYzMTQwNDI5MiI+Ik3JmW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaWFsb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg1NDUzNTE0MjA4NjUyMDI4NTMiPiJQbGFuxZ9ldCBzZcOnaW1syZlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2RpYWxvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMTk5MTkwNzU0NjM5ODg2MzgiPiJUZWxlZm9uIHNlw6dpbWzJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGUiIG1zZ2lkPSI3MTY3NzAzMzg5ODAyNjE4NjYzIj4iU8mZc3NpeiByZWppbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR1cm5fb25fcmFkaW8iIG1zZ2lkPSIzOTEyNzkzMDkyMzM5OTYyMzcxIj4iU2ltc2l6aSBpxZ/JmSBzYWzEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXJuX29mZl9yYWRpbyIgbXNnaWQ9IjgxOTg3ODQ5NDk5ODcwNjIzNDYiPiJTaW1zaXogcmFiaXTJmW5pIHPDtm5kw7xyw7xuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2xvY2siIG1zZ2lkPSI3OTkwOTQ2NTU0OTYwOTgxNTMiPiJFa3JhbiBraWxpZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9vZmYiIG1zZ2lkPSI0MjY2NjE0MTA3NDEyODY1MDQ4Ij4iU8O2bmTDvHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9zaWxlbnQiIG1zZ2lkPSIzMTkyOTgxNjMwMTg0NzMwNzgiPiJayZluZyBkZWFrdGl2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfdmlicmF0ZSIgbXNnaWQ9IjcwNzIwNDMzODg1ODE1NTEzOTUiPiJayZluZyB2aWJyYXNpeWFkYWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9yaW5nIiBtc2dpZD0iODU5MjI0MTgxNjE5NDA3NDM1MyI+IlrJmW5ndnVyYW4gYcOnxLFxZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX3Byb2dyZXNzIiBtc2dpZD0iMjI4MTA3OTI1NzMyOTk4MTIwMyI+IlPDtm5kw7xyw7xsw7xyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzM4NTc0NTE3OTU1NTczMTQ3MCI+IlBsYW7Fn2V0aW5peiBzw7ZuyZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDk3OTIxNzUyNDI4MjEzNTMiPiJUZWxlZm9udW51eiBzw7ZuyZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm1fcXVlc3Rpb24iIG1zZ2lkPSIyOTA2NTQ0NzY4ODgxMTM2MTgzIj4iU8O2bmTDvHJtyZlrIGlzdMmZeWlyc2l6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV90aXRsZSIgbXNnaWQ9IjcwNTQ1MDk5MTQ1MDAxNDAzNjEiPiJUyZlobMO8a8mZc2l6IHJlamltZMmZIHllbmlkyZluIGJhxZ9sYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfY29uZmlybSIgbXNnaWQ9IjU1MjkzOTQ0NTAyNzg0NjY4Ij4iVMmZaGzDvGvJmXNpeiByZWppbWTJmSB5ZW5pZMmZbiBiYcWfbGFtYXEgaXN0yZl5aXJzaW5peiBtaT8gQnUsIHF1cmHFn2TEsXJkxLHEn8SxbsSxeiBiw7x0w7xuIMO8w6fDvG5jw7wgdMmZcsmZZiB0yZl0YmlxbMmZcmluaSBkZWFrdGl2IGVkyZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiJTb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19yZWNlbnRfdGFza3MiIG1zZ2lkPSI4Nzk0OTA2NjU4NzMyMTkzNDczIj4iSGXDpyBiaXIgc29uIHTJmXRiaXEgeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MDg0NzcxNDAwODgwNTM2NjUiPiJQbGFuxZ9ldCBzZcOnaW1syZlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjQwNjQxNjgzMTU0MTYxNTI1OCI+IlRlbGVmb24gc2XDp2ltbMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2siIG1zZ2lkPSIyODQ0OTQ1MTkxNzkyMTE5NzEyIj4iRWtyYW4ga2lsaWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9wb3dlcl9vZmYiIG1zZ2lkPSI0NDcxODc5NDQwODM5ODc5NzIyIj4iU8O2bmTDvHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2J1Z19yZXBvcnQiIG1zZ2lkPSI3OTM0MDEwNTc4OTIyMzA0Nzk5Ij4iQmFxIGhlc2FiYXTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF90aXRsZSIgbXNnaWQ9IjI2Njc0OTQ4MDM3NDI1NDg1MzMiPiJCYXHEsSB4yZliyZlyIHZlcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X21lc3NhZ2UiIG1zZ2lkPSIzOTg0NDcwNDg3NTAzNTA0NTYiPiJCdSwgc2l6aW4gaGF6xLFya8SxIGNpaGF6IGR1cnVtdSBoYXFxxLFuZGEgbcmZbHVtYXQgdG9wbGF5YWNhcSBraSwgZWxla3Ryb24gbcmZa3R1YiDFn8mZa2xpbmTJmSBnw7ZuZMmZcnNpbi4gQmFxIHJhcG9ydHVuYSBiYcWfbGFtYXEgw7zDp8O8biBiaXIgYXogdmF4dCBsYXrEsW0gb2xhIGJpbMmZciwgYmlyIGF6IHPJmWJyIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl90b2dnbGVfc2lsZW50X21vZGUiIG1zZ2lkPSI4MjE5NTI1MzQ0MjQ2ODEwOTI1Ij4iU8mZc3NpeiByZWppbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2lsZW50X21vZGVfb25fc3RhdHVzIiBtc2dpZD0iMzI4OTg0MTkzNzAwMzc1ODgwNiI+IlPJmXMgcWFwYWzEsWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSIxNTA2MDQ2NTc5MTc3MDY2NDE5Ij4iU8mZcyBBa3RpdmRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX3RvZ2dsZV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iNTg4NDMzMDMwNjkyNjMwNzQ1NiI+IlTJmXl5YXLJmSByZWppbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjI3MTk1NTc5ODI2MDg5MTk3NTAiPiJVw6d1xZ8gcmVqaW1pIGHDp8SxcWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSI1MDc1MDcwNDQyODU0NDkwMjk2Ij4iVMmZeXlhcsmZIHJlamltaSBxYXBhbMSxZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IlTJmWhsw7xryZlzaXogcmVqaW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIHNpc3RlbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY29zdE1vbmV5IiBtc2dpZD0iNTQyOTgwODIxNzg2MTQ2MDQwMSI+IsOWZMmZbmnFn2xpIHhpZG3JmXRsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jb3N0TW9uZXkiIG1zZ2lkPSIzMjkzMzAxOTAzNDA5ODY5NDk1Ij4iWMmZcmMgdHV0dWxhY2FxIMmZbcmZbGl5eWF0bGFyIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWVzc2FnZXMiIG1zZ2lkPSI3NTIxMjQ5MTQ4NDQ1NDU2NjYyIj4iU2l6aW4gbWVzYWpsYXLEsW7EsXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21lc3NhZ2VzIiBtc2dpZD0iNzgyMTk5OTA3MTAwMzY5OTIzNiI+IlNNUywgZWxla3Ryb24gcG/Dp3QgdsmZIGRpZ8mZciBtZXNhamxhcsSxIG94dXl1ciB2yZkgeWF6xLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9wZXJzb25hbEluZm8iIG1zZ2lkPSIzNTE5MTYzMTQxMDcwNTMzNDc0Ij4ixZ7JmXhzaSBtyZlsdW1hdMSxbsSxeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfcGVyc29uYWxJbmZvIiBtc2dpZD0iODQyNjQ1MzEyOTc4ODg2MTMzOCI+IktvbnRha3Qga2FydMSxbsSxemRhIHNheGxhbsSxbGFuIG3JmWx1bWF0bGFyxLFuxLF6YSBiaXJiYcWfYSBnaXJpxZ8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NvY2lhbEluZm8iIG1zZ2lkPSI1Nzk5MDk2NjIzNDEyMDQzNzkxIj4iU29zaWFsIG3JmWx1bWF0xLFuxLF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zb2NpYWxJbmZvIiBtc2dpZD0iNzEyOTg0MjQ1NzYxMTY0MzQ5MyI+IktvbnRha3RsYXLEsW7EsXogdsmZIHNvc2lhbCDJmWxhccmZbMmZcmluaXogaGFxccSxbmRhIG3JmWx1bWF0YSBiaXJiYcWfYSBnaXJpxZ8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2xvY2F0aW9uIiBtc2dpZD0iNjM1MTQ5NzQyNDM2NjkyMDQ5Ij4iWWVybMmZxZ9tyZluaXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2xvY2F0aW9uIiBtc2dpZD0iNTcwNDY3OTc2MzEyNDE3MDEwMCI+IkZpemlraSBhZHJlc2luaXppIG1vbml0b3JpbnEgZWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbmV0d29yayIgbXNnaWQ9IjU4MDg5ODMzNzc3MjcxMDk4MzEiPiLFnsmZYsmZa8mZIGtvbW11bmlrYXNpeWFzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX25ldHdvcmsiIG1zZ2lkPSI0NDc4Mjk5NDEzMjQxODYxOTg3Ij4iTcO8eHTJmWxpZiDFn8mZYsmZa8mZIHjDvHN1c2l5ecmZdGzJmXJpbsmZIGRheGlsIG9sLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iMTU4NTQwMzU0NDE2MjEyODEwOSI+IkJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYmx1ZXRvb3RoTmV0d29yayIgbXNnaWQ9IjU2MjUyODg1NzcxNjQyODIzOTEiPiJCbHVldG9vdGggw7x6yZlyaW5kyZluIGNpaGF6bGFyYSB2yZkgxZ/JmWLJmWvJmWzJmXLJmSBkYXhpbCBvbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjgzMjkyNjE2NzAxNTE4NzEyMzUiPiJBdWRpbyBBeWFybGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hdWRpb1NldHRpbmdzIiBtc2dpZD0iMjY0MTUxNTQwMzM0NzU2ODEzMCI+IkF1ZGlvIGF5YXJsYXLEsSBkyZl5acWfaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjIwOTI0NjY1MzQyNDc5ODAzMyI+IkJhdGFyZXlheWEgdMmZc2lyIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjQ0MTI3NTMyMDYzODkxNjk0NyI+IkJhdGFyZXlhbsSxesSxbiB0ZXogcXVydGFybWFzxLFuYSBzyZliyZliIG9sYW4gZnVua3NpeWFsYXIgaXN0aWZhZMmZIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FsZW5kYXIiIG1zZ2lkPSI1ODYzNTA4NDM3NzgzNjgzOTAyIj4iVMmZcXZpbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FsZW5kYXIiIG1zZ2lkPSI1Nzc3NTM0MzE2OTgyMTg0NDE2Ij4iVMmZcXZpbcmZIHbJmSB0yZlkYmlybMmZcsmZIGJpcmJhxZ9hIGdpcmnFny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGljdGlvbmFyeSIgbXNnaWQ9IjQxNDg1OTcxMjg4NDM2NDEzNzkiPiLEsHN0aWZhZMmZw6dpIEzDvMSfyZl0aW5pIE94dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGljdGlvbmFyeSIgbXNnaWQ9Ijc5MjExNjYzNTU5NjQ3NjQ0OTAiPiLEsHN0aWZhZMmZw6dpIGzDvMSfyZl0aW5kyZlraSBzw7Z6bMmZcmkgb3h1eXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MDkwMjM3NzAyNDMyNTc2Nzg4Ij4ixLBzdGlmYWTJmcOnaSBMw7zEn8mZdGluaSBZYXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjI3MTE1NjE5OTQ0OTczNjE2NDYiPiLEsHN0aWZhZMmZw6dpIGzDvMSfyZl0aW7JmSBzw7Z6bMmZciDJmWxhdsmZIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Jvb2ttYXJrcyIgbXNnaWQ9IjE5NDk1MTk2NzMxMDM5NjgyMjkiPiLGj2xmyZljaW5syZlyIHbJmSBUYXJpeMOnyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Jvb2ttYXJrcyIgbXNnaWQ9IjQxNjk3NzE2MDYyNTc5NjMwMjgiPiLGj2xmyZljaW5syZlyyZkgdsmZIGJyYXV6ZXIgdGFyaXhpbsmZIGJpcmJhxZ9hIGljYXrJmS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGV2aWNlQWxhcm1zIiBtc2dpZD0iNjExNzcwNDYyOTcyODgyNDEwMSI+IlrJmW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZpY2VBbGFybXMiIG1zZ2lkPSI0NzY5MzU2MzYyMjUxNjQxMTc1Ij4iQWxhcm0gcXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl92b2ljZW1haWwiIG1zZ2lkPSI0MTYyMjM3MTQ1MDI3NTkyMTMzIj4iU8mZc2xpIHBvw6d0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY192b2ljZW1haWwiIG1zZ2lkPSIyNDk4NDAzOTY5ODYyOTUxMzkzIj4iU8mZcyBwb8OndHVuYSBiaXJiYcWfYSDDp8SxeMSxxZ8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21pY3JvcGhvbmUiIG1zZ2lkPSIxNzE1Mzk5MDAyNTAwNDM0NjQiPiJNaWtyb2ZvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWljcm9waG9uZSIgbXNnaWQ9IjcxMDY2MTgyODY5MDU3Mzg0MDgiPiJBdWRpbyB5YXptYXEgw7zDp8O8biBtaWtyb2ZvbmEgYmlyYmHFn2EgZ2lyacWfLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jYW1lcmEiIG1zZ2lkPSI0ODIwMzcyNDk1ODk0NTg2NjE1Ij4iS2FtZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jYW1lcmEiIG1zZ2lkPSIyOTMzNjY3MzcyMjg5NTY3NzE0Ij4ixZ7JmWtpbCB2yZkgeWEgdmlkZW8gw6fJmWttyZlrIMO8w6fDvG4ga2FtZXJheWEgYmlyYmHFn2Egw6fEsXjEscWfLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zY3JlZW5sb2NrIiBtc2dpZD0iODI3NTUwMDE3MzMzMDcxODE2OCI+IkVrcmFuIGtpbGlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc2NyZWVubG9jayIgbXNnaWQ9IjcwNjc0OTcxMjg5MjU0OTk0MDEiPiJDaWhhesSxbsSxemRha8SxIGtpbGlkIGVrcmFuxLFuxLFuIGjJmXLJmWvJmXRpbsmZIHTJmXNpciBldG3JmSBiYWNhcsSxxJ/EsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hcHBJbmZvIiBtc2dpZD0iODAyODc4OTc2MjYzNDE0NzcyNSI+IlTJmXRiaXEgbcmZbHVtYXRsYXLEsW7EsXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FwcEluZm8iIG1zZ2lkPSIzOTUwMzc4NTM4MDQ5NjI1OTA3Ij4iQ2loYXrEsW7EsXpkYWvEsSBkaWfJmXIgdMmZdGJpcWzJmXJpbiBkYXZyYW7EscWfxLFuYSB0yZlzaXIgZXRtyZlrIGJhY2FyxLHEn8SxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl93YWxscGFwZXIiIG1zZ2lkPSIzODUwMjgwMTU4MDQxMTc1OTk4Ij4iRGl2YXIga2HEn8SxesSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY193YWxscGFwZXIiIG1zZ2lkPSI1NjMwNDE3ODU0NzUwNTQwMTU0Ij4iQ2loYXrEsW4gZGl2YXIga2HEn8SxesSxIGF5YXJsYXLEsW7EsSBkyZl5acWfaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbUNsb2NrIiBtc2dpZD0iNDA2NTM1NzU5MjM2NjEyOTkyIj4iU2FhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3lzdGVtQ2xvY2siIG1zZ2lkPSIzOTQ0MzU5ODMzNjI0MDk0OTkyIj4iQ2loYXrEsW4gdmF4dCB2yZkgemFtYW4gem9sYcSfxLFuxLEgZMmZeWnFn2lyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdGF0dXNCYXIiIG1zZ2lkPSIyMDk1ODYyNTY4MTEzOTQ1Mzk4Ij4iU3RhdHVzIHBhbmVsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iNjI0MjU5MzQzMjIyNjgwNzE3MSI+IkNpaGF6xLFuIHN0YXR1cyBwYW5lbGkgYXlhcmxhcsSxbsSxesSxIGTJmXlpxZ9pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3luY1NldHRpbmdzIiBtc2dpZD0iMzM0MTk5MDk4NjE0NzgyNjU0MSI+IlNpbnggQXlhcmxhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeW5jU2V0dGluZ3MiIG1zZ2lkPSI3NjAzMTk1MjY1MTI5MDMxNzk3Ij4iU2lueHJvbml6YXNpeWEgbml6YW1sYXLEsW5hIMOnxLF4xLHFny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWNjb3VudHMiIG1zZ2lkPSIzMzU5NjQ2MjkxMTI1MzI1NTE5Ij4iSGVzYWJsYXLEsW7EsXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FjY291bnRzIiBtc2dpZD0iNDk0ODczMjY0MTgyNzA5MTMxMiI+IsaPbMOnYXTEsW1sxLEgaGVzYWJsYXJhIGRheGlsIG9sdW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2hhcmR3YXJlQ29udHJvbHMiIG1zZ2lkPSI3OTk4MjE0OTY4NzkxNTk5MzI2Ij4iSGFyZHdhcmUga29udHJvbGxhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNDM1NzA1Nzg2MTIyNTQ2MjcwMiI+IkTJmXN0yZlrZMmZa2kgYXZhZGFubMSxxJ9hIGJpcmJhxZ9hIGdpcmnFny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfcGhvbmVDYWxscyIgbXNnaWQ9IjkwNjcxNzM5ODgzMjU4NjU5MjMiPiJUZWxlZm9uIHrJmW5nbMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3Bob25lQ2FsbHMiIG1zZ2lkPSI3NDg5NzAxNjIwNDQ2MTgzNzcwIj4iVGVsZWZvbiB6yZluZ2zJmXJpbsmZIG7JmXphcsmZdCBlZGluLCBxZXlkyZkgYWzEsW4gdsmZIGlkYXLJmSBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1Ub29scyIgbXNnaWQ9IjQ2NTIxOTE2NDQwODI3MTQwNDgiPiJTaXN0ZW0gYWzJmXRsyZlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3lzdGVtVG9vbHMiIG1zZ2lkPSI4MTYyMTAyNjAyMTkwNzM0MzA1Ij4iQcWfYcSfxLEgc8mZdml5ecmZbGkgw6fEsXjEscWfIHbJmSBzaXN0ZW0gaWRhcsmZZXRtyZlzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGV2ZWxvcG1lbnRUb29scyIgbXNnaWQ9IjM0NDYxNjQ1ODQ3MTA1OTY1MTMiPiLEsG5racWfYWYgYWzJmXRsyZlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2ZWxvcG1lbnRUb29scyIgbXNnaWQ9IjcwNTg4MjgwMzIzNTgxNDIwMTgiPiLDlnrJmWxsaWtsyZlyIHlhbG7EsXogdMmZdGJpcSBkZXZlbG9wZXJsyZlyaSDDvMOnw7xuIGxhesSxbWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Rpc3BsYXkiIG1zZ2lkPSI0Mjc5OTA5Njc2MDM2NDAyNjM2Ij4iRGlnyZlyIHTJmXRiaXEgxLBzdGlmYWTJmcOnaSDEsG50ZXJmZXlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGlzcGxheSIgbXNnaWQ9IjYwNTEwMDIwMzE5MzMwMTM3MTQiPiJEaWfJmXIgdMmZdGJpcWzJmXJpbiDEsHN0aWZhZMmZw6dpIMSwbnRlcmZleXNpbsmZIHTJmXNpciBlZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdG9yYWdlIiBtc2dpZD0iMTk3MTExODc3MDU0NjMzNjk2NiI+IllhZGRhxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzQ0MjMxODUwMjQ0Njg3NDk5OSI+IlVTQiB5YWRkYcWfYSBkYXhpbCBvbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI5MjAzMzAyMjE0OTE1MzU1Nzc0Ij4iU0Qga2FydGEgZGF4aWwgb2wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiLGj2zDp2F0xLFtbMSxbMSxcSBmdW5rc2l5YWxhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI0MjA1MTk2ODgxNjc4MTQ0MzM1Ij4iWWFyZMSxbcOnxLEgdGV4bm9sb2dpeWEgdMmZbMmZYiBlZMmZIGJpbMmZY8mZeWkgZnVua3NpeWFsYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzOTAxNzE3OTM2OTMwMTcwMzIwIj4iUMmZbmPJmXLJmW5pbiBtyZl6bXVudW51IMmZbGTJmSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJldHJpZXZlV2luZG93Q29udGVudCIgbXNnaWQ9IjM3NzIyMjUwMDg2MDUzMTA2NzIiPiLGj2xhccmZZMmZIG9sZHXEn3VudXogcMmZbmPJmXLJmW5pbiBtyZl6bXVudW51IG7JmXrJmXJkyZluIGtlw6dpcmluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdFRvdWNoRXhwbG9yYXRpb24iIG1zZ2lkPSIzMTA4NzIzMzY0Njc2NjY3MzIwIj4iVG94dW5hcmFxIEvJmcWfZiBldCBmdW5rc2l5YXPEsW7EsSB5YW5kxLFyxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iNTgwMDU1MjUxNjc3OTI0OTM1NiI+IlRveHVudWxhbiBoaXNzyZlsyZlyIHPJmXNsyZluZGlyaWzJmWPJmWsgdsmZIGVrcmFuIGplc3RsyZlybMmZIGlkYXLJmSBvbHVuYSBiaWzJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTczOTg4MTc2NjUyMjU5NDA3MyI+IsSwbmtpxZ9hZiBldG1pxZ8gdmViIMmZbMOnYXTEsW1sxLFsxLHEn8SxIHlhbmTEsXLEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9Ijc4ODEwNjM5NjE1MDc1MTE3NjUiPiJTa3JpcHRsyZlyIHTJmXRiaXEgbcmZem11bnVudW4gZGFoYSDJmWzDp2F0xLFtbMSxIG9sbWFzxLEgw7zDp8O8biBxdXJhxZ9kxLFyxLFsYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iMjEwMzQ0MDM5MTkwMjQxMjE3NCI+IllhemTEscSfxLFuxLF6IG3JmXRuaSBpemzJmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IktyZWRpdCBrYXJ0xLEgbsO2bXLJmWzJmXJpIHbJmSBwYXJvbGxhciBraW1pIMWfyZl4c2kgbcmZbHVtYXRsYXIgZGF4aWxkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4ic3RhdHVzIHBhbmVsaW5pIGRlYWt0aXZsyZnFn2RpciB2yZkgeWEgZMmZeWnFn2RpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiJUyZl0YmlxyZkgc3RhdHVzIHBhbmVsaW5pIGRlYWt0aXYgZXRtyZl5yZkgdsmZIHlhIHNpc3RlbSBpa29uYWxhcsSxbsSxIMmZbGF2yZkgZXRtyZlrIHbJmSB5YSBzaWxtyZlrIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzI0NzI4MTkxMTM4NzkzMTQ4NSI+InN0YXR1cyBwYW5lbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzE2MTEzNjYwNzk1OTc2MDYwIj4iVMmZdGJpccmZIHN0YXR1cyBwYW5lbGkgb2xtYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjExNDgxOTg3ODU5Mzc0ODkyNjQiPiJzdGF0dXMgcGFuZWxpbmkgZ2VuacWfbMmZdG3JmWsgdsmZIHlhIHnEscSfbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iNjkxNzU0OTQzNzEyOTQwMTEzMiI+IlTJmXRiaXHJmSBzdGF0dXMgcGFuZWxpbmkgZ2VuacWfbMmZbmRpcm3JmXnJmSB2yZkgeWEgeW94IGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSIzOTA2MDA3ODMxMTkyOTkwOTQ2Ij4iZ2VkyZluIHrJmW5nbMmZcmluIG1hcsWfcnV0dW51IGTJmXlpxZ9tyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSI1MzMxMzE4OTMxOTM3NDAyMDQwIj4iVMmZdGJpccmZIHrJmW5nIGV0bcmZecmZIHbJmSB6yZluZyBlZGlsyZluIG7Dtm1yyZluaSBkyZl5acWfbcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZayBnZWTJmW4gesmZbmdsyZlyaSBpemzJmXnJmSwgecO2bmzJmW5kaXLJmSB2yZkgeWEgcWFyxZ/EsXPEsW7EsSBhbGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVNtcyIgbXNnaWQ9Ijg2NzM0NzE3Njg5NDc4OTUwODIiPiJTTVMgccmZYnVsIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVTbXMiIG1zZ2lkPSI2NDI0Mzg3NzU0MjI4NzY2OTM5Ij4iVMmZdGJpccmZIE1NUyBtZXNhamxhcsSxbsSxIGFsbWFxIHbJmSBlbWFsIGV0bcmZayBpY2F6yZlzaSB2ZXJpci4gQnUgbyBkZW3JmWtkaXIga2ksIHTJmXRiaXEgc2l6aW4gbWVzYWpsYXLEsW7EsXrEsSBzaXrJmSBnw7ZzdMmZcm3JmWTJmW4gbW9uaXRvcmlucSBlZMmZIHbJmSB5YSBzaWzJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlTW1zIiBtc2dpZD0iMTgyMTMxNzM0NDY2ODI1NzA5OCI+Im3JmXRuIG1lc2FqbGFyxLFuxLEgccmZYnVsIGVkaXIgKE1NUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlTW1zIiBtc2dpZD0iNTMzMDE5NDM3MjYzMjEyMjYwIj4iVMmZdGJpccmZIE1NUyBtZXNhamxhcsSxbsSxIHHJmWJ1bCB2yZkgZW1hbCDDvMOnw7xuIGlta2FuIHZlcmlyLiBCdSBvIGRlbcmZa2RpciBraSwgYnUgdMmZdGJpcSBzaXrJmSBnw7ZzdMmZcm3JmWTJmW4gY2loYXrEsW7EsXphIGfDtm5kyZlyaWzJmW4gbWVzYWpsYXLEscKgc2lsyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9IjE4MDM0Nzc2NjA4NDYyODgwODkiPiJ0yZljaWxpIHlhecSxbWxhcsSxIHHJmWJ1bCBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9Ijg0ODUyNDA3MDI2MjQzMTk3NCI+IlTJmXRiaXHJmSB0yZljaWxpIHlhecSxbSBtZXNhamxhcsSxbsSxIHHJmWJ1bCB2yZkgZW1hbCBldG3JmWsgaWNhesmZc2kgdmVyaXIuIEJ1IGljYXrJmSBhbmNhcSBzaXN0ZW0gdMmZdGJpcWzJmXJpIMO8w6fDvG4gbcO8bWvDvG5kw7xyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iMTU5ODMyODg0MzYxOTY0NjE2NiI+Im1vYmlsIHlhecSxbSBtZXNhamxhcsSxbsSxIG94dXl1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiJUyZl0YmlxyZkgc2l6aW4gdGVsZWZvbnVudXogdMmZcsmZZmluZMmZbiBhbMSxbm3EscWfIHlhecSxbSBtZXNhamxhcsSxbsSxIG94dW1hIGljYXrJmXNpIHZlcmlyLiBUZWxlZm9uIHlhecSxbcSxIGLJmXppIG3JmWthbmxhcmRhIG9sYW4gZsO2dnHJmWxhZMmZIGhhZGlzyZlsyZlybMmZIGJhxJ9sxLEgc2l6aSB4yZliyZlyZGFyIGV0bcmZayDDvMOnw7xuIHHJmWJ1bCBlZGlsaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBmw7Z2ccmZbGFkyZkgbW9iaWwgeWF5xLFtIHHJmWJ1bCBlZGlsZGl5aSB6YW1hbiB0ZWxlZm9udW51biBwZXJmb3JtYW5zxLFuYSB2yZkgyZltyZlsaXl5YXTEsW5hIG3DvGRheGlsyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kU21zIiBtc2dpZD0iNTYwMDgzMDYxMjE0NzY3MTUyOSI+IlNNUyBtZXNhamxhcsSxbsSxIGfDtm5kyZlyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+IlTJmXRiaXHJmSBTTVMgbWVzYWrEsSBnw7ZuZMmZcm3JmSBpY2F6yZlzaSB2ZXJpci4gQnUgZ8O2emzJmW5pbG3JmXnJmW4gw7ZkyZluacWfbMmZcsmZIHPJmWLJmWIgb2xhIGJpbMmZci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIHNpemluIHTJmXNkaXFpbml6IG9sbWFkYW4gbWVzYWogZ8O2bmTJmXJtyZlrbMmZIHNpesmZIMO2ZMmZbmnFn8mZIHPJmWLJmWIgb2xhIGJpbMmZcmzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iODcxMzg4OTEwNTMwNTk0MzIwMCI+Im1lc2FqbGEgY2F2YWIgdmVyaWxtyZlsaSB0yZlkYmlybMmZciBnw7ZuZMmZcm3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iNzEwNzY0ODU0ODQ2ODc3ODczNCI+IlTJmXRiaXHJmSB6yZluZ2zJmXIgw7zDp8O8biBcIm1lc2FqbGEgY2F2YWJsYVwiIGhhZGlzyZlsyZlyaW5pIGlkYXLJmSBldG3JmWsgw7zDp8O8biBkaWfJmXIgbWVzYWpsYcWfbWEgdMmZdGJpcWzJmXJpbsmZIHNvcsSfdWxhcsSxbiBnw7ZuZMmZcmlsbcmZc2kgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+InRla3N0IG1lc2FqbGFyxLFuxLF6xLEgb3h1eXVyIChTTVMgdsmZIHlhIE1NUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4iVMmZdGJpccmZIHBsYW7Fn2V0aW5pemTJmSB2yZkgeWEgU0lNIGthcnTEsW7EsXpkYSBzYXhsYW5hbiBTTVMgbWVzYWpsYXLEsSBveHVtYcSfYSBpbWthbiB2ZXJpci4gQnUgYsO8dMO8biBTTVMgbWVzYWpsYXLEsW4sIG9ubGFyxLFuIG3JmXptdW51bmRhbiB2yZkga29uZmlkZW5zaWFsbMSxxJ/EsW5kYW4gYXPEsWzEsSBvbG1hZGFuIG94dW5tYXPEsSBpbWthbsSxIGRlbcmZa2Rpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY5NTk2NzUzMzQ1NzI0MDU1MCI+IlTJmXRiaXHJmSB0ZWxlZm9udW51emRhIHbJmSB5YSBTSU0ga2FydMSxbsSxemRhIHNheGxhbmFuIFNNUyBtZXNhamxhcsSxIG94dW1hxJ9hIGlta2FuIHZlcmlyLiBCdSBiw7x0w7xuIFNNUyBtZXNhamxhcsSxbiwgb25sYXLEsW4gbcmZem11bnVuZGFuIHbJmSBrb25maWRlbnNpYWxsxLHEn8SxbmRhbiBhc8SxbMSxIG9sbWFkYW4gb3h1bm1hc8SxIGlta2FuxLEgZGVtyZlrZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTbXMiIG1zZ2lkPSIzMjE2OTUwNDcyNjM2MjE0Nzc0Ij4ibcmZdG4gbWVzYWpsYXLEsW7EsXrEsSByZWRha3TJmSBlZGlyIChTTVMgdsmZIHlhIE1NUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTE2MDQxMzk0Nzc5NDUwMTUzOCI+IlTJmXRiaXHJmSB0ZWxlZm9udW51emRhIHbJmSB5YSBTxLBNIGthcnTEsW7EsXpkYSB5ZXJsyZnFn8mZbiBTTVMgbWVzYWpsYXJhIHlhem1hIGljYXrJmXNpIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgc2l6aW4gbWVzYWpsYXLEsW7EsXrEsSBzaWzJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjY4NjY4NzA5MDUyMzI4NTY3Ij4iVMmZdGJpccmZIHRlbGVmb251bnV6ZGEgdsmZIHlhIFPEsE0ga2FydMSxbsSxemRhIHllcmzJmcWfyZluIFNNUyBtZXNhamxhcmEgeWF6bWEgaWNhesmZc2kgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBzaXppbiBtZXNhamxhcsSxbsSxesSxIHNpbMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+Im3JmXRuIG1lc2FqbGFyxLEgccmZYnVsIGV0bcmZayAoV0FQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4iVMmZdGJpccmZIFdBUCBtZXNhamxhciBnw7ZuZMmZcm3JmWsgdsmZIHlhIHHJmWJ1bCBldG3JmWsgaW1rYW7EsSB2ZXJpci4gQnVuYSBtZXNhamxhcsSxIGl6bMmZbcmZayB2yZkgU2l6yZkgeMmZYsmZciB2ZXJtyZlkyZluIHNpbG3JmWsgaW1rYW5sYXLEsSBkYSBkYXhpbGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRhc2tzIiBtc2dpZD0iNjQ2NjA5NTM5NjYyMzkzMzkwNiI+ImnFn2zJmW7JmW4gdMmZdGJpcWzJmXIgyZlsZMmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+IlTJmXRiaXHJmSBoYXrEsXJkYSB2yZkgYXogw7ZuY8mZIGnFn2zJmXnJmW4gdGFwxZ/EsXLEsXFsYXIgaGFxccSxbmRhIMmZdHJhZmzEsSBtyZlsdW1hdCDJmWxkyZkgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIEJ1IGRhIGNpaGF6ZGEgaGFuc8SxIHTJmXRiaXFsyZlyaW4gaXN0aWZhZMmZIG9sdW5tYXPEsSBoYXFxxLFuZGEgbcmZbHVtYXRsYXLEsW4gyZlsZMmZIGVkaWxtyZlzaW7JmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSI3MTE0MjU1MjgxOTQ0MjExNjgyIj4iaXN0aWZhZMmZw6dpbMmZciBhcmFzxLFuZGEgyZlsYXHJmSBxdXJ1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSIzNjQ2NzA5NjM2MjMzODU3ODYiPiJUyZl0YmlxyZkgYnUgY2loYXpkYWvEsSBkaWfJmXIgaXN0aWZhZMmZw6dpbMmZcmzJmSBtw7x4dMmZbGlmIGnFn2zJmXJpIGfDtnJtyZl5yZkgaWNhesmZIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmcOnaWzJmXIgYXJhc8SxbmRha8SxIHFvcnVubWFuxLEgcG96bWFxIMO8w6fDvG4gaXN0aWZhZMmZIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJhY3RBY3Jvc3NVc2Vyc0Z1bGwiIG1zZ2lkPSIyNTY3NzM0Mjg1NTQ1MDc0MTA1Ij4iYsO8dMO8biBpc3RpZmFkyZnDp2lsyZlyIGlsyZkgyZlsYXHJmSBzYXhsYW1hcSDDvMOnw7xuIHRhbSBow7xxdXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjM3Njg0MTM2ODM5NTUwMjM2NiI+IsSwc3RpZmFkyZnDp2lsyZlyIGFyYXPEsW5kYSBiw7x0w7xuIG3DvG1rw7xuIMmZbGFxyZlsyZlyyZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2VycyIgbXNnaWQ9IjE2NzYxNTA5MTE2NzIyODI0MjgiPiJpc3RpZmFkyZnDp2lsyZlyaSBpZGFyyZkgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzZXJzIiBtc2dpZD0iODQwOTMwNjY2NzY0NTM1NTYzOCI+IlTJmXRiaXFsyZlyyZkgY2loYXpkYSBvbGFuIGlzdGlmYWTJmcOnaWzJmXJpLCBoYWJlbMmZIHNvcsSfdSBnw7ZuZMmZcm3JmSwgeWFyYXRtYSB2yZkgc2lsbcmZIGl6bmkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXREZXRhaWxlZFRhc2tzIiBtc2dpZD0iNjIyOTQ2ODY3NDc1MzUyOTUwMSI+ImnFn2zJmW7JmW4gdMmZdGJpcWzJmXJpbiBkZXRhbGxhcsSxbsSxIMmZbGTJmSBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXREZXRhaWxlZFRhc2tzIiBtc2dpZD0iMTUzODI0NzQxNDQwNzE3NTk5Ij4iVMmZdGJpccmZIGhhesSxcmRhIHbJmSBheiDDtm5jyZkgacWfbMmZecmZbiB0YXDFn8SxcsSxcWxhciBoYXFxxLFuZGEgyZl0cmFmbMSxIG3JmWx1bWF0IMmZbGTJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgxZ/JmXhzaSBtyZlsdW1hdGxhcsSxIG/En3VybGF5YSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW9yZGVyVGFza3MiIG1zZ2lkPSIyMDE4NTc1NTI2OTM0NDIyNzc5Ij4iacWfbMmZbsmZbiB0yZl0YmlxbMmZcmluIHPEsXJhc8SxbsSxIGTJmXlpxZ9tyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVvcmRlclRhc2tzIiBtc2dpZD0iNzczNDIxNzc1NDg3NzQzOTM1MSI+IlTJmXRiaXHJmSB0YXDFn8SxcsSxcWxhcsSxIMO2biBwbGFuZGFuIGFyeGEgcGxhbmEga2XDp2lybcmZecmZIGlta2FuIHZlcmlyLiBUyZl0YmlxIGJ1bnUgU2l6aW4gZGF4aWxldG3JmW5peiBvbG1hZGFuIGRhIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVtb3ZlVGFza3MiIG1zZ2lkPSI2ODIxNTEzNDAxODcwMzc3NDAzIj4iacWfbMmZayB0yZl0YmlxbMmZcmkgZGF5YW5kxLFyxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVtb3ZlVGFza3MiIG1zZ2lkPSIxMzk0NzE0MzUyMDYyNjM1NDkzIj4iVMmZdGJpccmZIHRhcMWfxLFyxLFxbGFyxLEgc2lsbcmZecmZIHbJmSBvbmxhcsSxbiB0yZl0YmlxbMmZcmluaSBtyZlodiBldG3JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgZGlnyZlyIHTJmXRiaXFsyZlyaW4gacWfbMmZcmluaSBkYXlhbmTEsXJhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iNzM5MTE5MTM4NDAyNzMwMzA2NSI+ImbJmWFsaXl5yZl0IHRvcGx1bGFyxLFuxLEgaWRhcsmZIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY3Rpdml0eVN0YWNrcyIgbXNnaWQ9IjE2MTU4ODE5MzMwMzQwODQ0NDAiPiJUyZl0YmlxyZkgZGlnyZlyIHTJmXRiaXFsyZlyaW4gZsmZYWxpeXnJmXRpIGRheGlsaW5kyZkgZsmZYWxpeXnJmXQgdG9wbHVsYXLEsW7EsSDJmWxhdsmZIGV0bcmZaywgc2lsbcmZayB2yZkgZMmZeWnFn23JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSIyOTE4NzY4MjM4MDQ1MjA2NDU2Ij4iaMmZciBoYW5zxLEgYmlyIGbJmWFsaXl5yZl0IGJhxZ9sYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iOTk3ODIzNjk1MzQzNTg0MDAxIj4ixLBjYXrJmSBxb3J1bm1hc8SxIHbJmSB5YSBla3Nwb3J0IGVkaWxtacWfIHN0YXR1c2RhbiBhc8SxbMSxIG9sbWF5YXJhcSwgdMmZdGJpccmZIGjJmXIgaGFuc8SxIGbJmWFsaXl5yZl0aSBiYcWfbGF0bWHEn2EgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRTY3JlZW5Db21wYXRpYmlsaXR5IiBtc2dpZD0iNjk3NTM4NzExODg2MTg0MjA2MSI+ImVrcmFuIHV5xJ91bmx1xJ91bnUgeWVybMmZxZ9kaXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFNjcmVlbkNvbXBhdGliaWxpdHkiIG1zZ2lkPSI2OTIwNDM2MTg2OTM5MTczNzQiPiJUyZl0YmlxyZkgZGlnyZlyIHTJmXRiaXFsyZlyaW4gZWtyYW4gdXnEn3VubHXEn3VudSB5b3hsYW1hcSBpbWthbsSxIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgZGlnyZlyIHTJmXRiaXFsyZlyaW4gZsmZYWxpeXnJmXRpbmkgcG96YSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXREZWJ1Z0FwcCIgbXNnaWQ9IjMwMjIxMDcxOTg2ODY1ODQwNTIiPiJ0yZl0YmlxIHNhemxhbm1hc8SxbsSxIGFrdGl2IGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXREZWJ1Z0FwcCIgbXNnaWQ9IjQ0NzQ1MTI0MTYyOTkwMTMyNTYiPiJUyZl0YmlxyZkgZGlnyZlyIGJpciB0yZl0YmlxIMO8w6fDvG4gc2F6bGFtYW7EsSBhw6dtYXEgw7zDp8O8biBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bnUgZGlnyZlyIHTJmXRiaXFsyZlyaSB5b3ggZXRtyZlrIMO8w6fDvG4gaXN0aWZhZMmZIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQxNjIwOTIxODUxMjQyMzQ0ODAiPiJzaXN0ZW0gZWtyYW4gbml6YW1sYXLEsW7EsSBkyZl5acWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQzNzIyMjM4NzMxNTQyOTYwNzYiPiJUyZl0YmlxyZkgeWVybGkgcGFyYW1ldHJsyZlyIHbJmSB5YSDFn3JpZnRpbiDDtmzDp8O8c8O8IGtpbWkgY2FyaSBrb25maXF1cmFzaXlhbsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9lbmFibGVDYXJNb2RlIiBtc2dpZD0iNTY4NDUwNDA1ODE5MjkyMTA5OCI+ImF2dG9tb2JpbCByZWppbWluaSBha3RpdmzJmcWfZGlyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19lbmFibGVDYXJNb2RlIiBtc2dpZD0iNDg1MzE4NzQyNTc1MTQxOTQ2NyI+IlTJmXRiaXHJmSBhdnRvbW9iaWwgcmVqaW1pbmkgYWt0aXZsyZnFn2Rpcm3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iMzkxNDAyNjY4NzQyMDE3NzIwMiI+ImRpZ8mZciB0yZl0YmlxbMmZcmkgcWFwYXRtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19raWxsQmFja2dyb3VuZFByb2Nlc3NlcyIgbXNnaWQ9IjQ1OTMzNTMyMzU5NTk3MzMxMTkiPiJUyZl0YmlxyZkgYmHFn3FhIHTJmXRiaXFsyZlyaW4gYXJ4YWZvbiBwcm9zZXNsyZlyaW5pIGRheWFuZMSxcm1hcSBpY2F6yZlzaSB2ZXJpci4gQnUgZGlnyZlyIHTJmXRiaXFsyZlyaW4gZGF5YW5tYXPEsW5hIHPJmWLJmWIgb2xhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iMjMyOTYyNzQyODgzMjA2NzcwMCI+IkRpZ8mZciB0yZl0YmlxbMmZcmkgZGF5YW5tYcSfYSBtyZljYnVyIGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZm9yY2VTdG9wUGFja2FnZXMiIG1zZ2lkPSI1MjUzMTU3Mjk2MTgzOTQwODEyIj4iVMmZdGJpccmZIGRpZ8mZciB0yZl0YmlxbMmZcmkgbcmZY2J1cmkgxZ/JmWtpbGTJmSBkYXlhbmTEsXJtYcSfYSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlQmFjayIgbXNnaWQ9IjY1MjkzNTIwNDA3MjU4NDYxNiI+InTJmXRiaXFpIHFhcGFubWHEn2EgbcmZY2J1ciBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZUJhY2siIG1zZ2lkPSIzODkyMjk1ODMwNDE5NTEzNjIzIj4iVMmZdGJpccmZIMO2biBwbGFuZGEgb2xhbiBpc3TJmW5pbMmZbiB0yZl0YmlxaSBiYcSfbGF5YXJhcSBnZXJpecmZIGTDtm5tyZl5yZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGhlw6cgdmF4dCBpc3RpZmFkyZkgb2x1bm1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZHVtcCIgbXNnaWQ9IjE2ODE3OTk4NjI0Mzg5NTQ3NTIiPiJzaXN0ZW1pbiBkYXhpbGkgZHVydW11bnUgYsmZcnBhIGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZHVtcCIgbXNnaWQ9IjE3NzgyOTkwODg2OTIyOTAzMjkiPiJUyZl0YmlxyZkgc2lzdGVtaW4gZGF4aWxpIHN0YXR1c3VudSBiyZlycGEgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBsYXrEsW0gb2xtYWTEscSfxLEgaGFsZGEgbcO8eHTJmWxpZiDFn8mZeHNpIHbJmSBnw7x2yZlubGkgbcmZbHVtYXRsYXLEsSBiyZlycGEgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjgwMjI1ODg2MDg5OTQ1ODk5MzgiPiJla3JhbiBrb250ZW50aW5pIGLJmXJwYSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSIzMTkzMjY5MDY5NDY5NzAwMjY1Ij4iVMmZdGJpccmZIGFrdGl2IHDJmW5jyZlyyZluaW4gbcmZem11bnVudSDJmWxkyZkgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrIHDJmW5jyZlyyZkgbcmZem11bnVudSDJmWzJmSBrZcOnaXJpYiBwYXJvbGxsYXLEsSBveHV5YSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl90ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIyMzEyNjEyMTM1MTI3MzEwMjU0Ij4iZ2lyacWfIGlta2FuxLFuxLEgbcO8dsmZcXHJmXRpIGHDp21hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjgwNzk0NTYyOTMxODI5NzU0NjQiPiJUyZl0YmlxyZkgY2loYXphIGdpcmnFn2kgbcO8dsmZcXHJmXRpIG9sYXJhcSBha3RpdmzJmcWfZGlybcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgaXN0aWZhZMmZw6dpIHJhesSxbMSxxJ/EsSBvbG1hZGFuIGdpcmnFn2kgYWt0aXZsyZnFn2RpcsmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iODUzMjI5NTE5OTExMjUxOTM3OCI+InDJmW5jyZlyyZkgaW5mb3N1bnUgYsmZcnBhIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9IjQ5OTg4MzYzNzA0MjQxODY4NDkiPiJUyZl0YmlxyZkgcMmZbmPJmXLJmSBpZGFyyZnDp2lzaW5kyZluIGfJmWzJmW4gd2luZG93cyBoYXFxxLFuZGEgb2xhbiBtyZlsdW1hdMSxIGLJmXJwYSBldG3JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGRheGlsaSBzaXN0ZW0gaXN0aWZhZMmZc2kgw7zDp8O8biBuyZl6yZlyZMmZIHR1dHVsYW4gbcmZbHVtYXTEsSBiyZlycGEgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODY3NTUzNTY0ODgwNzQyNzM4OSI+InTJmWRiaXJsyZlyaSBmaWx0ciBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmlsdGVyX2V2ZW50cyIgbXNnaWQ9IjgwMDYyMzYzMTU4ODgzNDc2ODAiPiJUyZl0YmlxyZkgZGF4aWxldG3JmSBmaWx0cmluaSBxZXlkaXl5YXQgZXRkaXJtyZl5yZkgaW1rYW4gdmVyaXIsIGJ1IGZpbHRyIGLDvHTDvG4gaXN0aWZhZMmZw6dpIHTJmWRiaXJsyZlyaW5pIGfDtm5kyZlyaWxtyZltacWfZMmZbiDJmXZ2yZlsIGZpbHRyZMmZbiBrZcOnaXJpci4gWsmZcsmZcmxpIHTJmXRiaXEgaXN0aWZhZMmZw6dpIG3DvGRheGlsyZlzaSBvbG1hZGFuIMSwc3RpZmFkyZnDp2kgxLBudGVyZmV5c2kgc2lzdGVtaW7JmSBuyZl6YXLJmXQgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI1OTczNjI2NzM4MTcwNjE4Nzc1Ij4iZWtyYW7EsSBiw7Z5w7xkw7xyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNzEyMTIzNTY4NDUxNTAwMzc5MiI+IlTJmXRiaXHJmSBla3JhbiBrb250ZW50aW5pIGLDtnnDvHRtyZlrIGljYXrJmXNpIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZayBla3JhbmRhIGtvbnRlbnRpIGLDtnnDvGTJmXLJmWsgY2loYXrEsW4gcWV5cmktc3RhYmlsbGl5aW7JmSBzyZliyZliIG9sYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaHV0ZG93biIgbXNnaWQ9IjcxODU3NDc4MjQwMzg5MDkwMTYiPiJxaXNtyZluIHPDtm5kw7xyw7xyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2h1dGRvd24iIG1zZ2lkPSI3MDQ2NTAwODM4NzQ2MjkxNzc1Ij4iQWt0aXZsaWsgaWRhcsmZw6dpbGl5aW5pIHFhcGFubcSxxZ8gaGFsYSBnyZl0aXJpci4gVGFtIHFhcGFubWFuxLEgaMmZeWF0YSBrZcOnaXJtaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI0MTM4NjA4NjEwNzE3NDI1NTczIj4idMmZdGJpcWTJmW4gdMmZdGJpccmZIGtlw6dpZGluIHFhcsWfxLFzxLFuxLEgYWxtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI4MjYyMTk1ODAyNTgyMjU1MDIxIj4ixLBzdGlmYWTJmcOnaW5pbiBiYcWfcWEgdMmZdGJpccmZIGtlw6dtyZlzaW5pbiBxYXLFn8Sxc8SxbsSxIGFsxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUzNzkyMjMxMTQxMTU0NjAxNiI+ImNhcmkgdMmZdGJpcSBpbmZvcm1hc2l5YXPEsSDJmWxkyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iODE1MzY1MTQzNDE0NTEzMjUwNSI+IlNhaGliyZkgZWtyYW4gw7Zuw7xuZMmZIGNhcmkgdMmZdGJpcSB2yZkgeGlkbcmZdGzJmXIgaGFxccSxbmRhIMWfyZl4c2kgbcmZbHVtYXQgyZlsZMmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iODkyMjM5MDk0ODY3MTgyNjU2Ij4iacWfyZkgc2FsxLFuYW4gYsO8dMO8biB0yZl0YmlxbMmZcmkgaXpsyZl5aXIgdsmZIGlkYXLJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iNjAwMzYwMzE2MjU3ODU3NzQwNiI+IlTJmXRiaXHJmSBzaXN0ZW1pbiBmyZlhbGl5ecmZdGzJmXJpIG5lY8mZIGJhxZ9sYXRkxLHEn8SxbsSxIG7JmXphcsmZdCB2yZkga29udHJvbCBldG3JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIHNpc3RlbWkgdGFtYW1pbMmZIGtvbXByb21pcyBlZMmZIGJpbMmZci4gQnUgaWNhesmZIHlhbG7EsXogaW5racWfYWYgw7zDp8O8bmTDvHIsIGhlw6cgdmF4dCBub3JtYWwgaXN0aWZhZMmZIMO8w6fDvG4gZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjI1NzYzMzM0MzQ4OTM1MzI0NzUiPiJxYWxkxLFyxLFsbcSxxZ8geWF5xLFtIHBha2V0aW5pIGfDtm5kyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSI2NjIxOTAxMjE2MjA3OTMxMDg5Ij4iVMmZdGJpccmZIHTJmXRiaXEgcGFrZXRpbmluIHNpbGlubcmZc2kgaGFxccSxbmRhIGJpbGRpcmnFnyB0cmFuc2xhc2l5YSBldG3JmSBpY2F6yZlzaSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBkaWfJmXIgacWfbMmZayB0yZl0YmlxbMmZcmkgZGF5YW5kxLFybWFxIMO8w6fDvG4gaXN0aWZhZMmZIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI1Njg5MDk1MDA5MDMwMzM2NTkzIj4iU01TIHTJmXLJmWZpbmTJmW4gccmZYnVsIGVkaWzJmW4geWF5xLFtIGfDtm5kyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI0MTUyMDM3NzIwMDM0MzY1NDkyIj4iVMmZdGJpccmZIG1lc2FqIGfJmWxtyZlzaSBoYXFxxLFuZGEgYmlsZGlyacWfaSB5YXnEsW1sYW1hcSBpbWthbsSxIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGfJmWzJmW4gU01TIG1lc2FqbGFyxLFuxLEgc2F4dGFsYcWfZMSxcm1hcSDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSIzMTQ1MzQ3NDEzMDI4NTgyMzcxIj4iV0FQLVBVU0ggdMmZcsmZZmluZMmZbiBxyZlidWwgZWRpbMmZbiB5YXnEsW0gZ8O2bmTJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iNDc4MzQwMjUyNTAzOTQ0MjcyOSI+IlTJmXRiaXHJmSBXQVAgUFVTSCBtZXNhasSxbiBhbMSxbmTEscSfxLEgaGFxZGEgYmlsZGlyacWfIHRyYW5zbGFzaXlhIGV0bcmZecmZIGljYXrJmSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgc2F4dGEgTU1TIG1lc2FqIGFsxLHFn8SxIHbJmSB5YSBzyZlzc2l6Y8mZIGlzdMmZbmlsyZluIHZlYiBzyZloaWbJmW5pIHrJmXLJmXJ2ZXJpY2kgdmFyaWFudGxhcmxhIGTJmXlpxZ9tyZlrIMO8w6fDvG4gaXN0aWZhZMmZIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iMjQ1MTg3MzY2NDM2MzY2MjY2NiI+IsOnYWzEscWfYW4gcHJvc2VzbMmZcmluIHNhecSxbsSxIG3JmWhkdWRsYcWfZMSxcsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjczMTgwNjEzMTQwNDA4Nzk1NDIiPiJUyZl0YmlxyZkgacWfbMmZZGlsyZljyZlrIG1ha3NpbXVtIHByb3NlcyBzYXnEsW7EsSBpZGFyyZkgZXRtyZkgaXpuaSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gdMmZbMmZYiBvbHVubXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNTUwOTU4NTA3Nzk4Nzk2OTY1Ij4iYXJ4YWZvbiB0yZl0YmlxbMmZcmluaSBkYXlhbm1hxJ9hIG3JmWNidXIgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiJUyZl0YmlxyZkgYWt0aXZpdGlsyZlyaW4gYXJ4YSBmb25hIGdldGRpeWkgemFtYW4gYml0bcmZc2luaSB5b3hsYXnEsXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIHTJmWzJmW4gb2x1bm11ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjI3ODk2MTA2NzM1MTQxMDMzNjQiPiJiYXRhcmV5YSBzdGF0aXN0aWthbGFyxLFuxLEgb3h1bWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmF0dGVyeVN0YXRzIiBtc2dpZD0iNTg5NzM0NjU4Mjg4MjkxNTExNCI+IlTJmXRiaXHJmSBjYXJpIGHFn2HEn8SxIHPJmXZpeXnJmWxpIGRhdGEgc2l0aWZhZMmZc2luaSBveHVtYXEgaW1rYW7EsSB2ZXJpci4gVMmZdGJpccmZIGhhbnPEsSB0yZl0YmlxaSBpc3RpZmFkyZkgZXRkaXlpbml6IGhhcXHEsW5kYSDJmXRyYWZsxLEgbcmZbHVtYXQgdGFwbWHEn2EgaW1rYW4gdmVyyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQmF0dGVyeVN0YXRzIiBtc2dpZD0iMzcxOTY4OTc2NDUzNjM3OTU1NyI+ImJhdGFyZXlhIHN0YXRpc3Rpa2FsYXLEsW7EsSBkyZl5acWfbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjY4NjI4MTc4NTcxNzgwMjUwMDIiPiJUyZl0YmlxyZkgecSxxJ/EsWxtxLHFnyBiYXRhcmV5YSBzdGF0aXN0aWthc8SxbsSxIHJlZGFrdMmZIGV0bcmZIGljYXrJmXNpIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbG1pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iMTUwODc3OTY4NzQzNjU4NTc0NCI+InTJmXRiaXEgyZltyZlsaXl5YXQgc3RhdGlzdGlrYWxhcsSxbsSxIMmZbGTJmSBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBcHBPcHNTdGF0cyIgbXNnaWQ9IjYyNDM4ODcwNDE1Nzc5MTI4NzciPiJUb3BsYW5txLHFnyB0yZl0YmlxIMmZbcmZbGl5eWF0IHN0YXRpc3Rpa2FsYXLEsW7EsW4gYsmZcnBhIGVkaWxtyZlzaW7JmSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIMO8w6fDvG4gZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9Ijg4MjkwOTczNzM4NTE1MjE1MDUiPiJ0yZl0YmlxIMmZbcmZbGl5eWF0IHN0YXRpc3Rpa2FzxLFuxLEgZMmZeWnFn23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9IjUwNzg0NTk2NTk0NDAzNDgzIj4iVMmZdGJpccmZIHRvcGxhbm3EscWfIHTJmXRiaXEgyZltyZlsaXl5YXQgc3RhdGlzdGlrYXPEsW7EsSBkyZl5acWfbcmZecmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgb2x1bm11ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhY2t1cCIgbXNnaWQ9IjQ3MDAxMzAyMjg2NTQ1MzkyMCI+InNpc3RlbSB5ZWTJmWtsyZltyZlzaSB2yZkgYsmZcnBhc8SxbsSxIGlkYXLJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmFja3VwIiBtc2dpZD0iNjkxMjIzMDUyNTE0MDU4OTg5MSI+IlTJmXRiaXHJmSBzaXN0ZW1pIHJlemVydiBldG3JmXnJmSB2yZkgbWV4YW5pem1pIGLJmXJwYSBldG3JmXnJmSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIGVkaWxtyZlrIMO8w6fDvG4gbsmZesmZcmTJmSB0dXR1bG1hecSxYi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maXJtX2Z1bGxfYmFja3VwIiBtc2dpZD0iNTU1NzA3MTMyNTgwNDQ2OTEwMiI+InRhbSByZXplcnZpIHTJmXNkaXEgZXRtyZlrIHbJmSB5YSDJmW3JmWxpeXlhdMSxIGLJmXJwYSBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maXJtX2Z1bGxfYmFja3VwIiBtc2dpZD0iMTc0ODc2MjE3MTYzNzY5OTU2MiI+IlTJmXRiaXHJmSDEsHN0aWZhZMmZw6dpIMSwbnRlcmZleXNpIHRhbSByZXplcnYgdMmZc2RpcWluaSBpxZ/JmSBzYWxtYcSfYSBpbWthbiB2ZXJpci4gSGXDpyBiaXIgdMmZdGJpcSB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBvbHVubWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9IjIxNDg1NjM2MjgxNDAxOTMyMzEiPiJpY2F6yZlzaXogcMmZbmPJmXLJmWzJmXJpIGfDtnLDvG50w7xsyZl5aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9Ijc0NTgzODc3NTk0NjE0NjYzOTciPiJUyZl0YmlxyZkgZGF4aWxpIHNpc3RlbSBpbnRlcmZleXNpIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIGVkaWxtyZlzaSDDvMOnw7xuIG7JmXrJmXJkyZkgdHV0dWxtdcWfIHDJmW5jyZlyyZlsyZlyaSB5YXJhdG1hxJ9hIGljYXrJmSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIGVkaWxtaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9IjM1NDMzNDc5ODA4Mzk1MTg2MTMiPiJkaWfJmXIgdMmZdGJpcWzJmXIgw7x6yZlyaW5kyZkgw6fJmWttyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSI4NTg0Njc4MzgxOTcyODIwMTE4Ij4iVMmZdGJpccmZIGRpZ8mZciB0yZl0YmlxbMmZcmluIHbJmSB5YSBvbmxhcsSxbiBoaXNzyZlsyZlyaW5pbiB5dXhhcsSxc8SxbmRhIMWfyZlraWwgw6fJmWttyZl5yZkgaW1rYW4gdmVyaXIuIE9ubGFyIGlzdMmZbmlsyZluIHTJmXRiaXFpbiBpbnRlcmZleXNpbmluIGlzdGlmYWTJmXNpbsmZIG3DvGRheGlsyZkgZWTJmSB2yZkgeWEgZGlnyZlyIHTJmXRiaXFsyZlyZMmZIGF4dGFyZMSxcWxhcsSxbsSxesSxIGTJmXlpxZ/JmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9IjI4MDUxMDMyNDExNTM5MDcxNzQiPiJxbG9iYWwgYW5pbWFzaXlhIHPDvHLJmXRpbmkgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4iVMmZdGJpccmZIGlzdMmZbmlsyZluIHZheHQgcWxvYmFsIGFuaW1hc2l5YSBzw7xyyZl0aW5pIChzw7xyyZl0bGkgdsmZIHlhIHlhdmHFnyBhbmltYXNpeWFsYXIpIGTJmXlpxZ9kaXJtyZlrIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSIxMjg2NTA1NzE3MDUwMTIxMzcwIj4idMmZdGJpcSBuacWfYW5sYXLEsW7EsSBpZGFyyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iODA0MzQzMTcxMzAxNDM5NTY3MSI+IlTJmXRiaXFsyZlyyZkgb25sYXLEsW4gbm9ybWFsIFotb3JkZXJpbnFpIGtlw6fJmXLJmWsgbWFya2VybMmZcmluaSB5YXJhdG1hIHbJmSBpZGFyyZlldG3JmSBpY2F6yZlzaSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mcmVlemVTY3JlZW4iIG1zZ2lkPSI0NzA4MTgxMTg0NDQxODgwMTc1Ij4iZWtyYW7EsSBkb25kdXJ1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9Ijg1NTg5MjM3ODkyMjI2NzAwNjQiPiJUyZl0YmlxyZkgdGFtIGVrcmFubMSxIHlhecSxbSDDvMOnw7xuIGVrcmFuxLEgbcO8dsmZcXHJmXRpIG9sYXJhcSBkb25kdXJtYSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luamVjdEV2ZW50cyIgbXNnaWQ9IjEzNzg3NDY1ODQwMjM1ODY2MDAiPiJkw7x5bcmZbMmZcmkgdsmZIGlkYXLJmWV0bcmZIGTDvHltyZlsyZlyaW5pIGJhc8SxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4iVMmZdGJpccmZIMO2esO8bsO8biBkYXhpbGV0bcmZIHTJmWRiaXJsyZlyaW5pIGRpZ8mZciB0yZl0YmlxbMmZcsmZIMOnYXRkxLFybWHEn2EgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBwbGFuxZ9ldGkgyZlsyZkga2XDp2lybcmZayDDvMOnw7xuIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5qZWN0RXZlbnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjUzMTI4MDU3NTcyMzI2MjUzIj4iVMmZdGJpccmZIMO2esO8bsO8biBkYXhpbGV0bcmZIHTJmWRiaXJsyZlyaW5pIGRpZ8mZciB0yZl0YmlxbMmZcsmZIMOnYXRkxLFybWHEn2EgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciB0ZWxlZm9udSDJmWzJmSBrZcOnaXJtyZlrIMO8w6fDvG4gYnVuZGFuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iNDY5NDI4OTAwMDQxMjQ5MjM0Ij4ieWF6ZMSxcWxhcsSxbsSxesSxIHbJmSBldGRpa2zJmXJpbml6aSBpemzJmXlpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iODM4Nzc1NDkwMTY4ODcyODA0MyI+IlTJmXRiaXHJmSBiYXNkxLHEn8SxbsSxeiBkw7x5bcmZbMmZcmkgaXpsyZltyZlrIGlta2FuxLEgdmVyaWxpci4gQnVuYSBwYXJvbGxhcsSxbiB2yZkga3JlZGl0IGthcnTEsSBuw7ZtcsmZbMmZcmluaW4geWF6xLFsbWFzxLEgZGEgYWlkZGlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgb2x1bm11ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMzNjAwNjQ2MjAyMzA1MTU3NzYiPiJkYXhpbGV0bcmZIG1ldG9kdW5hIGJhxJ9sYW7EsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMjUwNDQwMzIyODA3Mjg2MzMxIj4iU2FoaWJpbsmZIGRheGlsZXRtyZkgbWV0b2R1bnVuIMmZbiDDvHN0IHPJmXZpeXnJmSBpbnRlcmZleXNpbsmZIGJhxJ9sYW1hcSBpbWthbsSxIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBoZcOnIHZheHQgbGF6xLFtIG9sbWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI1MzU3NzMzOTQyNTU2MDMxNTkzIj4iZ2lyacWfIHhpZG3JmXRpbsmZIGJhxJ9sxLEgcWFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNzAzNDYxNTkyODYwOTMzMTM2OCI+IlNhaGliyZkgZ2lyacWfIHhpZG3JmXRpbiDJmW4gw7xzdCBzyZl2aXl5yZkgaW50ZXJmZXlzaSBiYcSfbGFtYcSfYSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gaGXDpyB2YXh0IGxhesSxbSBvbG1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFByaW50U2VydmljZSIgbXNnaWQ9Ijg0NjI4MTUxNzk1NzI3NDg3NjEiPiLDp2FwIHNlcnZpc2luaSBxb8WfbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iNzk2MDA2NzYyMzIwOTExMTEzNSI+IlNhaGliaW7JmSBiaXIgw6dhcCB4aWRtyZl0aW5pbiDJmW4gw7xzdCBzyZl2aXnJmSBhcmHDvHrDvG7DvCBiYcSfbGFtYcSfYSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gaGXDpyB2YXh0IGxhesSxbSBvbG1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQWxsUHJpbnRKb2JzIiBtc2dpZD0iMTEyMDc5MjQ2ODQ2NTcxMTE1OSI+ImLDvHTDvG4gw6dhcCBpxZ9syZlyaW7JmSBnaXJpxZ8gyZlsZMmZIGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQWxsUHJpbnRKb2JzIiBtc2dpZD0iMjk3ODE4NTMxMTA0MTg2NDc2MiI+IlNhaGliaW7JmSBkaWfJmXIgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiB5YXJhZMSxbGFuIMOnYXAgacWfbMmZcmluyZkgZ2lyacWfIGjDvHF1cXUgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIHTJmWzJmWIgb2x1bm1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSIyNzUyNzMxMzAwNDE5NDEwNzI0Ij4iTkZDIHhpZG3JmXRsyZlyaW7JmSBxb8WfdW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiJTYWhpYmluyZkgTkZDIGthcnRsYXLEsW7EsSBlbXVseWFzaXlhIGVkyZluIHTJmXRiaXFsyZlyaSBiaXItYmlyaW7JmSBxb8WfbWHEn2EgaWNhesmZIHZlcmluLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBsYXrEsW0gZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI3MzU4Mzc4NDAxOTE1Mjg3OTM4Ij4ibcmZdG4gc2VydmlzaW5pIHFvxZ9tYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiJTYWhpYmluyZkgYmlyIG3JmXRuIHhpZG3JmXRpbmluIMmZbiDDvHN0IHPJmXZpeXnJmSBhcmHDvHrDvG7DvCBiYcSfbGFtYcSfYSBpbWthbiB2ZXJpcihtyZlzyZlsyZluLCBTcGVsbENoZWNrZXJTZXJ2aWNlKS4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gaGXDpyB2YXh0IGxhesSxbSBvbG1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSI0NzA4NTk2MDIxMTYxNDczMjU1Ij4iVlBOIHhpZG3JmXTJmSDJmWxhccmZbMmZbmRpcm3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJTYWhpYmluyZkgYmlyIFZwbiB4aWRtyZl0aW5pbiDJmW4gw7xzdCBzyZl2aXl5yZkgYXJhw7x6w7xuw7wgYmHEn2xhbWHEn2EgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGhlw6cgdmF4dCBsYXrEsW0gb2xtYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iZGl2YXIga2HEn8SxesSxbmEgYmHEn2xhbsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iQ2loYXogc2FoaWJpbsmZIHl1eGFyxLEgc8mZdml5ecmZbGkgZGl2YXIga2HEn8SxesSxIGludGVyZmV5c2luaSBjaWxkbMmZbcmZecmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgb2x1bm1hbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IndpZGdldCBzZXJ2aXNpbmkgcW/Fn21hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IlNhaGliaW7JmSB2aWRjZXQgc2VydmlzaW4gecO8a3PJmWsgc8mZdml5ecmZbGkgaW50ZXJmZXlzaSBpbMmZIMmZbGFxyZkgc2F4bGFtYXEgaWNhesmZc2kgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGhlw6cgdmF4dCBpc3TJmW5pbG3JmW3JmWxpZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImNpaGF6IGFkbWluaSBpbMmZIMO8bnNpeXnJmXQgcXVybWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4iU2FoaWJpbsmZIGJpciBjaWhheiBpZGFyyZnDp2lzaW7JmSBwbGFubGFyIGfDtm5kyZlybcmZayDDvMOnw7xuIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBoZcOnIHZheHQgbGF6xLFtIG9sbWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4iY2loYXogYWRtaW5pIMmZbGF2yZkgZWRpbiB2yZkgeWEgc2lsaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI1MDI1NjA4MTY3NzA5OTQyNDg1Ij4iU2FoaWJpbsmZIGFrdGl2IGNpaGF6IGFkbWluaXN0cmF0b3JsYXLEsW7EsSDJmWxhdsmZIGV0bcmZecmZIHbJmSB5YSBzaWxtyZl5yZkgaWNhesmZIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biB0yZlsyZliIG9sdW5tYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldE9yaWVudGF0aW9uIiBtc2dpZD0iMzM2NTk0NzcxNzE2Mzg2Njg0NCI+ImVrcmFuIG9yaXllbnRhc2l5YXPEsW7EsSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiJUyZl0YmlxyZkgaXN0yZluaWzJmW4gemFtYW4gZWtyYW7EsW4gdsmZeml5ecmZdGluaSBkyZl5acWfbcmZIGljYXrJmXNpIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiB0yZlsyZliIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI5MTc1MzcxNjEzMzIyNTYyOTM0Ij4ia3Vyc29yIHPDvHLJmXRpbmkgZMmZeWnFn23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI2ODY2NTYzMjM0Mjc0MTA0MjMzIj4iVMmZdGJpccmZIG1hdXN1biB2yZkgeWEgdHJla3BlZGluIGt1cnNvciBzw7xyyZl0aW5pIGlzdMmZbmlsyZluIHphbWFuIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBvbHVubWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRLZXlib2FyZExheW91dCIgbXNnaWQ9IjQ3Nzg3MzE3MDM2MDA5MDkzNDAiPiJrbGF2aWF0dXJhIHN4ZW1pbmkgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI4NDgwMDE2NzcxMTM0MTc1ODc5Ij4iVMmZdGJpccmZIGtsYXZpYXR1cmEgc3hlbWluaSBkyZl5acWfbcmZayBpbWthbsSxIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiB0yZlsyZliIG9sdW5tdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+InTJmXRiaXFsyZlyyZkgTGludXggc2lxbmFsbGFyxLEgZ8O2bmTJmXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0ODk2OTkyMDc5MTgyNjQ5MTQxIj4iVMmZdGJpccmZIGLDvHTDvG4gZGF2YW1sxLEgcHJvc2VzbMmZcsmZIHNpcW5hbCBzb8SfcnVzdSBnw7ZuZMmZcm3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcnNpc3RlbnRBY3Rpdml0eSIgbXNnaWQ9Ijg4NDExMTM2Mjc5NTU1NjM5MzgiPiJ0yZliaXFpIGjJmW1pxZ/JmSDDp2FsxLHFn2TEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg1MjUxODkyNzIzMjkwODYxMzciPiJUyZl0YmlxyZkgw7Z6IGtvbXBvbmVudGzJmXJpbmkgeWFkZGHFn2RhIHNheGxhbWEgaWNhesmZc2kgdmVyaXIuIEJ1IHBsYW7Fn2V0aW4gc8O8csmZdGluaSB6yZlpZmzJmXRtyZlrbMmZLCBkaWfJmXIgdMmZdGJpcWzJmXIgw7zDp8O8biBtw7Z2Y3VkIG9sYW4geWFkZGHFn8SxIGxpbWl0bMmZecmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0Mzg0NzYwMDQ3NTA4Mjc4MjcyIj4iVMmZdGJpccmZIMO2eiBrb21wb25lbnRsyZlyaW5pIHlhZGRhxZ9kYSBzYXhsYW1hIGljYXrJmXNpIHZlcmlyLiBCdSBkaWfJmXIgdMmZdGJpcWzJmXIgw7zDp8O8biBtw7Z2Y3VkIG9sYW4geWFkZGHFn8SxIGxpbWl0bMmZecmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iMTg0Mzg1MTI5NTM3NzA1OTM4Ij4idMmZdGJpcWzJmXJpIHNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iNzQxMTQ4MDI3NTE2NzIwNTA4MSI+IlTJmXRiaXHJmSBBbmRyb2lkIHBha2V0bMmZcmkgc2lsbcmZIGljYXrJmXNpIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGRpZ8mZciB2YWNpYiB0yZl0YmlxbMmZcmkgc2lsbcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSIyNzQxMDkxOTE4NDU4NDI3NTYiPiJkaWfJmXIgdMmZdGJpcWzJmXJpbiBtyZlsdW1hdMSxbsSxIHNpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjQ2MjUzMjM2ODQxMjU0NTk0ODgiPiJUyZl0YmlxyZkgaXN0aWZhZMmZw6dpIGRhdGFzxLFuxLEgdMmZbWl6bMmZbcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjMxMjg2NjU1NzE4Mzc0MDg2NzUiPiJkaWfJmXIgdMmZdGJpcWzJmXJpbiBrZcWfaW5pIHNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzODEyOTk4NTk5MDA2NzMwMTk2Ij4iVMmZdGJpccmZIGtlxZ8gZmF5bGxhcsSxIHNpbG3JmSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iNzQ3MjkyMTc2ODM1Nzk4MTk4NiI+InTJmXRiaXEgc2F4bGFtYSB5YWRkYcWfxLFuxLEgw7Zsw6dtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4iVMmZdGJpccmZIMO2esO8bsO8biBrb2R1bnUsIG3JmWx1bWF0xLFuxLEgdsmZIGtlxZ8gw7Zsw6fDvHPDvG7DvCBhbG1hIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iMjE5OTEyODQ4MjgyMDMwNjkyNCI+ImJpcmJhxZ9hIHTJmXRiaXFsyZlyIHF1cmHFn2TEsXJtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSI1NjI4NTMwOTcyNTQ4MDcxMjg0Ij4iVMmZdGJpccmZIHllbmkgdsmZIHlhIGfDvG5jyZlsbMmZbm1pxZ8gQW5kcm9pZCBwYWtldGzJmXJpbmkgcXVyYcWfZMSxcm1hxJ9hIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZayBnw7xjbMO8IHPJmWxhaGl5ecmZdGzJmXLJmSBtYWxpayB0yZl0YmlxbMmZcmkgZW5kaXLJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcENhY2hlIiBtc2dpZD0iNzQ4NzI3OTM5MTcyMzUyNjgxNSI+ImLDvHTDvG4gdMmZdGJpcSBrZcWfIGRhdGFzxLFuxLEgc2lsaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTc0NjQwODcxOTQ1NDM0NTY1Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aW4geWFkZGHFn8SxbsSxIGJvxZ9hbHRtYXEgw7zDp8O8biBkaWfJmXIgdMmZdGJpcWzJmXJpbiBrZcWfIGZheWxsYXLEsW7EsSBzaWxtyZlrIGlta2FuxLEgdmVyaXIuIEJ1IGRhIGRpZ8mZciB0yZl0YmlxbMmZcmluIGRhdGFsYXLEsSB5ZW5pZMmZbiDJmWxkyZkgZXRtyZlsyZlyaSBzyZliyZliaW5kyZluIGRhaGEgeWF2YcWfIGnFn2zJmW3JmWzJmXJpbsmZIHPJmWLJmWIgb2xhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjQ1OTQ0MTAyMTk1NjQzNjc3OSI+IlTJmXRiaXHJmSBkaWfJmXIgdMmZdGJpcWzJmXJpbiBrZcWfIHFvdmx1xJ91bnUgdMmZbWl6bMmZecmZcsmZayB0ZWxlZm9udW4geWFkZGHFn8SxbsSxIGJvxZ9hbHRtYXEgaWNhesmZc2kgdmVyaXIuIEJ1IGRpZ8mZciB0yZl0YmlxbMmZcmluIG3JmWx1bWF0bGFyxLFuxLEgeWVuaWTJmW4gyZlsZMmZIGV0bcmZbGkgb2xkdXFsYXLEsW5hIGfDtnLJmSBkYWhhIHlhdmHFnyBiYcWfbGFtYXPEsW5hIHPJmWLJmWIgb2x1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdmVQYWNrYWdlIiBtc2dpZD0iMzI4OTg5MDI3MTY0NTkyMTQxMSI+InTJmXRiaXEgcmVzdXJzbGFyxLFuxLFuIHllcmluaSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3ZlUGFja2FnZSIgbXNnaWQ9IjMxOTU2MjIxNzc3ODI0NDUyNCI+IlTJmXRiaXHJmSB0yZl0YmlxIHJlc3Vyc2xhcsSxbsSxIGRheGlsaSBtZWRpYWRhbiB4YXJpY2kgbWVkaWF5YSB2yZkgyZlrc2luyZkgZGHFn8SxbWHEn2EgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTG9ncyIgbXNnaWQ9IjY2MTU3Nzg1NDMxOTg5Njc2MTQiPiJtyZl4ZmkgbG9xIGRhdGFzxLFuxLEgb3h1eXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4iVMmZdGJpccmZIHNpc3RlbWluIG3DvHh0yZlsaWYganVybmFsIGZheWxsYXLEsW7EsSBveHVtYcSfYSBpbWthbiB2ZXJpci4gQnUgZGEgU2l6aW4gcGxhbsWfZXRkyZkgZXRkaWtsyZlyaW5peiBoYXFxxLFuZGEgbcmZbHVtYXRsYXIsIGjJmW3Dp2luaW4gxZ/JmXhzaSB2yZkga29uZmlkZW5zaWFsIG3JmWx1bWF0bGFyIG9sYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMDYzNDM4MTQwMjQxNTYwNDQzIj4iVMmZdGJpccmZIHNpc3RlbWluIG3DvHh0yZlsaWYganVybmFsIGZheWxsYXLEsW7EsSBveHVtYcSfYSBpbWthbiB2ZXJpci4gQnUgZGEgU2l6aW4gcGxhbsWfZXRkyZkgZXRkaWtsyZlyaW5peiBoYXFxxLFuZGEgbcmZbHVtYXRsYXIsIGjJmW3Dp2luaW4gxZ/JmXhzaSB2yZkga29uZmlkZW5zaWFsIG3JmWx1bWF0bGFyIG9sYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4ib3h1dG1hcSDDvMOnw7xuIGlzdMmZbmlsyZluIG1lZGlhIGRla29kZXJpIGlzdGlmYWTJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiJUyZl0YmlxyZkgcGxheWJhY2tcJ2kgZGXFn2lmcsmZIGV0bcmZayDDvMOnw7xuIGjJmXIgaGFuc8SxIGJpciBxdXJhxZ9kxLFyxLFsbcSxxZ8gbWVkaWEgZGXFn2lmcsmZbMmZeWljaXNpbmkgaXN0aWZhZMmZIGV0bcSxayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQ2FDZXJ0aWZpY2F0ZXMiIG1zZ2lkPSIxNjc4MzkxODk2Nzg2ODgyMDE0Ij4iZXRpYmFybMSxIGV0aW1hZG5hbcmZbMmZcmkgaWRhcsmZIGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQ2FDZXJ0aWZpY2F0ZXMiIG1zZ2lkPSI0MDE1NjQ0MDQ3MTk2OTM3MDE0Ij4iVMmZdGJpccmZIGV0aWJhcmzEsSBldGltYWRuYW3JmWzJmXIga2ltaSBDQSBzZXJ0aWZpa2F0bGFyxLFuxLEgcXVyYcWfZMSxcm1hcSB2yZkgc2lzdGVtZMmZbiBzaWxtyZl5yZkgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlhZ25vc3RpYyIgbXNnaWQ9IjgwNzY3NDM5NTM5MDgwMDAzNDIiPiJkaWFnYSBtyZl4c3VzIG9sYW4gbcmZbmLJmWzJmXJpIHlhei9veHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaWFnbm9zdGljIiBtc2dpZD0iNjYwODI5NTY5MjAwMjQ1MjI4MyI+IlTJmXRiaXHJmSBkaWFnIHFydXBhIG3JmXN1cyBvbGFuIHJlc3Vyc2xhcsSxIHlhem1hcSB2yZkgb3h1bWFxIGljYXrJmXNpIHZlcmlyOyBtyZlzyZlsyZluICAvZGV2IHFvdmx1xJ91bmRha8SxIGZheWxsYXIuIEJ1IHNpc3RlbWluIHN0YWJpbGxpeWluyZkgdsmZIHTJmWhsw7xryZlzaXpsaXlpbsmZIHTJmXNpciBlZMmZIGJpbMmZci4gQnUgYW5jYXEgaXN0ZWhzYWzDp8SxIHbJmSB5YSBvcGVyYXRvciB0yZlyyZlmaW5kyZluIGF2YWRhbmzEscSfYSB4YXMgZGlhcW5vc3Rpa2Egw7zDp8O8biBvbG1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBtc2dpZD0iNjMzNTU3Njc3NTcxMTA5NTkzMSI+InTJmXRiaXEga29tcG9uZW50bMmZcmluaSBha3RpdmzJmcWfZGlybcmZIHbJmSB5YSBkZWFrdGl2bMmZxZ9kaXJtyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODg4NzQzNTc0MDk4MjIzNzI5NCI+IlTJmXRiaXHJmSBkaWfJmXIgdMmZdGJpcSBrb21wb25lbnRpbmluIGFrdGl2IG9sdWItb2xtYWTEscSfxLFuxLEgZMmZeWnFn23JmWsgaW1rYW7EsSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiDJmWjJmW1peXnJmXRsaSBwbGFuxZ9ldCBpbWthbmxhcsSxbsSxIGRlYWt0aXYgZXRtyZlrIMO8w6fDvG4gaXN0aWZhZMmZIGVkyZkgYmlsyZlyLiBCdSBpY2F6yZkgaWzJmSBlaHRpeWF0bMSxIG9sbWFxIGxhesSxbWTEsXIsIMOnw7xua2kgdMmZdGJpcSBrb21wb25lbnRsyZlyaSB5YXJhcnPEsXosIHppZGRpeXnJmXRsaSwgdsmZIHlhIHFleXJpLXNhYml0IHN0YXR1c2Egw6dldnJpbMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4MjcyMzI0ODQ0MTY1MDU2MTUiPiJUyZl0YmlxyZkgZGlnyZlyIHTJmXRiaXEga29tcG9uZW50aW5pbiBha3RpdiBvbHViLW9sbWFkxLHEn8SxbsSxIGTJmXlpxZ9tyZlrIGlta2FuxLEgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gyZloyZltaXl5yZl0bGkgdGVsZWZvbiBpbWthbmxhcsSxbsSxIGRlYWt0aXYgZXRtyZlrIMO8w6fDvG4gaXN0aWZhZMmZIGVkyZkgYmlsyZlyLiBCdSBpY2F6yZkgaWzJmSBlaHRpeWF0bMSxIG9sbWFxIGxhesSxbWTEsXIsIMOnw7xua2kgdMmZdGJpcSBrb21wb25lbnRsyZlyaSB5YXJhcnPEsXosIHppZGRpeXnJmXRsaSwgdsmZIHlhIHFleXJpLXNhYml0IHN0YXR1c2Egw6dldnJpbMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dyYW50UmV2b2tlUGVybWlzc2lvbnMiIG1zZ2lkPSI0NjI3MzE1MzUxMDkzNTA4Nzk1Ij4iaWNhesmZbMmZciB2ZXJtyZlrIHbJmSB5YSBsyZnEn3YgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQwODg2NDI2NTQwODU4NTA2NjIiPiJUyZl0YmlxyZkgYnUgdsmZIHlhIGRpZ8mZciB0yZl0YmlxbMmZcsmZIHjDvHN1c2kgaXpubMmZciB2ZXJtyZl5yZkgaWNhesmZIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgIGJ1bmRhbiBpemluIHZlcm3JmWRpeWluaXogw7Z6yZlsbGlrbMmZcmkgw7Z6bMmZcmluyZkgdmVybcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9Ijg0NjMxODE2Mjg2OTUzOTYzOTEiPiJ0yZlyY2loIGVkaWzJmW4gdMmZdGJpcWzJmXIgcXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iNDk3Mzk4Njc2MjI0MTc4MzcxMiI+IlTJmXRiaXHJmSB0yZlyY2loIGV0ZGl5aW5peiB0yZl0YmlxbMmZcmkgZMmZeWnFn23JmWsgaW1rYW7EsSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIMWfyZl4c2kgbcmZbHVtYXRsYXLEsW7EsXrEsSB0b3BsYW1hcSDDvMOnw7xuIGNhcmkgdMmZdGJpcWzJmXJpbml6aSBhbGRhZGFyYXEgacWfbMmZecmZbiB0yZl0YmlxbMmZcmkgeMmZYsmZcnNpeiBkyZl5acWfyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9IjIyMjYxOTUyOTA5NTUyMjQ3MzAiPiJzaXN0ZW0gYXlhcmxhcsSxbmRhIGTJmXlpxZ9pa2xpayBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNldHRpbmdzIiBtc2dpZD0iNzc3NTcyMzQ0MTU1ODkwNzE4MSI+IlTJmXRiaXHJmSBzaXN0ZW0gYXlhcmxhcsSxIGRhdGFzxLFuxLEgcmVkYWt0yZkgZXRtyZkgaWNhesmZc2kgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBzaXN0ZW0gYXlhcmxhcsSxbsSxIGtvcmxheWEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjIwNDY3NjI1MTg3NjcxODI4OCI+InTJmWhsw7xryZlzaXogc2lzdGVtIG5pemFtbGFyxLFuxLEgZMmZeWnFn2lyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjgxNTk1MzU2MTMwMjAxMzczOTEiPiJUyZl0YmlxyZkgc2lzdGVtaW4gdMmZaGzDvGvJmXNpeiBheWFybGFyIGRhdGFzxLFuxLEgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIMO8w6fDvG4gZGV5aWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiJHb29nbGUgeGlkbcmZdGzJmXIgeMmZcml0yZlzaW5pIGTJmXlpxZ9kaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiJUyZl0YmlxyZkgR29vZ2xlIHhpZG3JmXRsyZlyIHjJmXJpdMmZc2luaSBkyZl5acWfZGlybcmZayBpbWthbsSxIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXJpbiBpc3RpZmFkyZlzaSDDvMOnw7xuIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4iYmHFn2xhbsSfxLFjZGEgacWfbMmZeWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczOTAzMDQ2NjQxMTY4ODA3MDQiPiJUyZl0YmlxyZkgc2lzdGVtIHnDvGtsyZltyZluaSBiaXRpcmRpeWkgemFtYW4gZMmZcmhhbCDDtnrDvG7DvCBiYcWfbGF0bWHEn2EgaW1rYW4gdmVyaXIuIEJ1IHBsYW7Fn2V0aSBiYcWfbGF0bWHEn8SxbiB1enVuIMOnyZlrbcmZc2luyZkgc8mZYsmZYiBvbGEgYmlsyZlyIHbJmSB0yZl0YmlxyZkgaMmZbWnFn8mZIMOnYWzEscWfZMSxcmFyYXEgYsO8dMO8biBwbGFuxZ9ldGkgeWF2YcWfbGF0bWHEn2EgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MTM5NTA1ODkxMDI2MTc1MDQiPiJUyZl0YmlxyZkgc2lzdGVtIGJvb3RpbnFpIGJpdGlyZGlrZMmZbiBkyZlyaGFsIHNvbnJhIMO2esO8bsO8IGJhxZ9sYXRtYXEgaWNhesmZc2kgdmVyaXIuIEJ1IHRlbGVmb251biBhw6fEsWxtYXPEsW7EsSBsyZluZ2lkyZkgdsmZIGRhaW1hIGnFn2zJmWsgcWFsYXJhcSB0ZWxlZm9udW4gc8O8csmZdGluaSBhxZ9hxJ/EsSBzYWxhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFN0aWNreSIgbXNnaWQ9Ijc5MTkxMjYzNzI2MDY4ODE2MTQiPiJkYWltaSBzaXFuYWwgZ8O2bmTJmXJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3NzQ5NzYwNDk0Mzk5OTE1NjUxIj4iVMmZdGJpccmZIHlhecSxbSBiaXRkaWtkyZluIHNvbnJhIGRhIHFhbGFuIMOnyZl0aW4geWF5xLFtbGFyIGfDtm5kyZlybcmZecmZIGlta2FuIHZlcmlyLiBIyZlkc2l6IGlzdGlmYWTJmSDDp294IHlhZGRhxZ8gaXN0aWZhZMmZc2luyZkgc8mZYsmZYiBvbG1hcWxhIHBsYW7Fn2V0aSB5YXZhxZ8gdsmZIHFleXJpLXN0YWJpbCBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4iVMmZdGJpccmZIHlhecSxbSBiaXRkaWtkyZluIHNvbnJhIGRhIHFhbGFuIMOnyZl0aW4geWF5xLFtbGFyIGfDtm5kyZlybcmZecmZIGlta2FuIHZlcmlyLiBIyZlkc2l6IGlzdGlmYWTJmSDDp294IHlhZGRhxZ8gaXN0aWZhZMmZc2luyZkgc8mZYsmZYiBvbG1hcWxhIHRlbGVmb251IHlhdmHFnyB2yZkgcWV5cmktc3RhYmlsIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENvbnRhY3RzIiBtc2dpZD0iODM0ODQ4MTEzMTg5OTg4NjEzMSI+ImtvbnRha3JsYXTEsW7EsXrEsSBveHVtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUyOTQ4NjY4NTY5NDExNDk2MzkiPiJUyZl0YmlxyZkgcGxhbsWfZXRpbml6ZMmZIHllcmzJmcWfyZluIGtvbnRha3RsYXLEsSBveHVtYXEgaWNhesmZc2kgdmVyaXIsIHRlei10ZXogesmZbmcgZWzJmWRpeWluaXosIGVtYWlsbMmZxZ9kaXlpbml6IHbJmSB5YSDJmWxhccmZIHNheGxhZMSxxJ/EsW7EsXogeMO8c3VzaSBpbmRpdmlkdWFsbGFyIGRheGlsIG9sbWFxbGEuIEJ1IGljYXrJmSB0yZl0YmlxbMmZcsmZIGtvbnRha3QgbcmZbHVtYXRsYXLEsW7EsXrEsSBzYXhsYW1hxJ9hIHbJmSB6yZlyyZlybGkgdMmZdGJpcWzJmXLJmSBrb250YWt0IG3JmWx1bWF0bGFyxLFuxLEgc2l6aW4gYmlsZ2luaXogb2xtYWRhIHBheWxhxZ9tYSBpbWthbsSxIHlhcmFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0NDA2NTQxNTI0NTczMDA2NjIiPiJUyZl0YmlxyZnCoHRlei10ZXogesmZbmcgZWzJmWRpeWluaXosIGUtbcmZa3R1YiBnw7ZuZMmZcmRpeWluaXogdsmZIHlhIMmZbGFxyZkgc2F4bGFkxLHEn8SxbsSxeiB4w7xzdXNpIGluZGl2aWR1YWxsYXIgZGF4aWwgb2xtYXFsYSB0ZWxlZm9udW51emRhIHllcmzJmcWfyZluIGtvbnRha3RsYXLEsSBveHVtYXEgaWNhesmZc2kgdmVyaXIuIEJ1IGljYXrJmSB0yZl0YmlxbMmZcsmZIGtvbnRha3QgbcmZbHVtYXRsYXLEsW7EsXrEsSBzYXhsYW1hxJ9hIHbJmSB6yZlyyZlybGkgdMmZdGJpcWzJmXLJmSBrb250YWt0IG3JmWx1bWF0bGFyxLFuxLEgc2l6aW4geMmZYsmZcmluaXogb2xtYWRhIHBheWxhxZ9tYSBpbWthbsSxIHlhcmFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDb250YWN0cyIgbXNnaWQ9IjUxMDc0OTIwODY0MTY3OTM1NDQiPiJrb250YWt0bGFyxLFuxLF6xLEgZMmZeWnFn2RpcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDb250YWN0cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODk3MjQzOTMyNTIxOTUzNjAyIj4iVMmZdGJpccmZIHBsYW7Fn2V0aW5pemTJmWtpIHrJmW5nIGV0bcmZayB0ZXpsaXlpbml6LCBlbGVrdHJvbiBwb8OndGxhcsSxbsSxeiwgw7xuc2l5ecmZdGzJmXJpbml6IGhhcXHEsW5kYSBtyZlsdW1hdGxhcsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIEJ1IGljYXrJmSBrb250YWt0IG3JmWx1bWF0bGFyxLFuxLFuIHNpbGlubcmZc2luyZkgZMmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1ODk4NjkyMjQ2MjUxNjM1NTgiPiJUyZl0YmlxyZkgU2l6aW4gesmZbmcgZXRtyZlrIHRlemxpeWluaXosIGVsZWt0cm9uIHBvw6d0bGFyxLFuxLF6LCDDvG5zaXl5yZl0bMmZcmluaXogaGFxccSxbmRhIG3JmWx1bWF0bGFyxLEgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4gQnVuYSBrb250YWt0bGFyxLFuIHNpbGlubcmZc2kgaW1rYW7EsSBkyZkgZGF4aWxkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsbExvZyIgbXNnaWQ9IjM0NzgxMzMxODQ2MjQxMDI3MzkiPiJ6yZluZyBxZXlkaXl5YXTEsW7EsSBveHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzcwMDY0NTE4NDg3MDc2MDI4NSI+IlTJmXRiaXHJmSBnyZlsyZluIHbJmSBnZWTJmW4gesmZbmdsyZlyIGhhcXHEsW5kYSBvbGFuIGRhdGEgZGF4aWwgb2xtYXFsYSBiyZlyYWLJmXIgcGxhbsWfZXRpbml6aW4gesmZbmcgcWV5ZGl5eWF0xLFuxLEgb3h1bWHEn2EgaW1rYW4gdmVyaXIuIEJ1IGljYXrJmSB0yZl0YmlxbMmZcsmZIHrJmW5nIHFleWRpeXlhdMSxbsSxesSxIHNheGxhbWHEn2EgaW1rYW4gdmVyaXIgdsmZIHrJmXLJmXJsaSB0yZl0YmlxbMmZciB6yZluZyBxZXlkaXl5YXQgZGF0YXPEsW7EsSBzaXpkyZluIHjJmWLJmXJzaXogcGF5bGHFn2EgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3NzcyNTc5NjgxMzIxNzI0NCI+IlTJmXRiaXHJmSB0ZWxlZm9uIGp1cm5hbMSxbsSxesSxIG94dW1hxJ9hIGlta2FuIHZlcmlyLCBidW5hIGfJmWzJmW4gdsmZIGdlZMmZbiB6yZluZ2zJmXIgaGFxccSxbmRhIG3JmWx1bWF0bGFyIGRhIGRheGlsZGlyLiBCdSBpY2F6yZkgdMmZdGJpccmZIHrJmW5nIGp1cm5hbMSxIGRhdGFzxLFuxLEgc2F4bGFtYcSfYSBpbWthbiB2ZXJpciBraSwgWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgU2l6ZMmZbiB4yZliyZlyc2l6IGLDvHTDvG4gbcmZbHVtYXRsYXJuxLF6xLEgcGF5bGHFn2EgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDYWxsTG9nIiBtc2dpZD0iODU1MjA0NTY2NDc0MzQ5OTM1NCI+InrJmW5nIGxvcXUgeWF6xLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NjYxODA2MDYyMjc0MTE5MjQ1Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aW5pemTJmWtpIHrJmW5nIGp1cm5hbMSxbsSxLCBoyZltw6dpbmluIGdlZMmZbiB2yZkgZ8mZbMmZbiB6yZluZ2zJmXJpbiBzaXlhaMSxc8SxbsSxIGTJmXlpxZ9tyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBidW5kYW4gaXN0aWZhZMmZIGVkyZlyyZlrLCB6yZluZyBqdXJuYWzEsW7EsXphIGTJmXlpxZ9pa2xpayBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODM5NDE3MzYzNTI3ODc4NDIiPiJUyZl0YmlxyZkgc2l6aW4gZGF4aWwgb2xhbiB2yZkgZ2VkyZluIHrJmW5nbMmZciBkYXhpbCBvbG1hcWxhIHRlbGVmb24gesmZbmdpIGxvcWxhcsSxbsSxesSxIHJlZGFrdMmZIGV0bcmZayBpY2F6yZlzaSB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiB0ZWxlZm9uIGxvcWxhcsSxbsSxesSxIHNpbG3JmWsgdsmZIHlhIHJlZGFrdMmZIGV0bcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQcm9maWxlIiBtc2dpZD0iNDcwMTg4OTg1MjYxMjcxNjY3OCI+IsO2eiBrb250YWt0IGthcnTEsW7EsXrEsSBveHV5dW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NjI0NzUxNTE4NDk4ODg4NDgiPiJUyZl0YmlxyZkgY2loYXrEsW7EsXpkYSB5ZXJsyZnFn8mZbiBhZMSxbsSxeiB2yZkga29udGFrdCBtyZlsdW1hdGxhcsSxbsSxeiBraW1pIMWfyZl4c2kgcHJvZmlsIG3JmWx1bWF0bGFyxLFuxLEgb3h1bWEgaWNhesmZc2kgdmVyaXIuIEJ1IG8gZGVtyZlrZGlyIGtpLCB0yZl0YmlxIHNpemkgdGFuxLF5YSB2yZkgc2l6aW4gcHJvZmlsIG3JmWx1bWF0bGFyxLFuxLF6xLEgYmHFn3FhbGFyxLFuYSBnw7ZuZMmZcsmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlUHJvZmlsZSIgbXNnaWQ9IjkwNzc5MzYyODc3NzM5NzY0MyI+InNpemluIGtvbnRha3Qga2FydMSxbsSxemRhIGTJmXlpxZ9pa2xpayBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NTUyMDg0Mjk0NTk4NDY1ODk5Ij4iVMmZdGJpccmZIGNpaGF6xLFuxLF6ZGEgeWVybMmZxZ/JmW4gYWTEsW7EsXogdsmZIGtvbnRha3QgbcmZbHVtYXRsYXLEsW7EsXoga2ltaSDFn8mZeHNpIHByb2ZpbCBtyZlsdW1hdGxhcsSxbsSxIGTJmXlpxZ9tyZlrIHbJmSB5YSDJmWxhdsmZIGV0bcmZayBpY2F6yZlzaSB2ZXJpci4gQnUgbyBkZW3JmWtkaXIga2ksIHTJmXRiaXEgc2l6aSB0YW7EsXlhIHbJmSBzaXppbiBwcm9maWwgbcmZbHVtYXRsYXLEsW7EsXrEsSBiYcWfcWFsYXLEsW5hIGfDtm5kyZlyyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEyNjg5MjA5NTYxNTI0MTkxNzAiPiJzb3NpYWwgbGVudGluaXppIG94dXl1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4iVMmZdGJpccmZIFNpemluIHbJmSBkb3N0bGFyxLFuxLF6xLFuIHNvc2lhbCBnw7xuY8mZbGzJmXJpbmkgyZlsZMmZIGV0bcmZayB2yZkgc2lueHJvbml6yZkgZXRtyZlrIGljYXrJmXNpIHZlcmlyLiBNyZlsdW1hdCBwYXlsYcWfYXJryZluIGRpcXHJmXRsaSBvbHVuIC0ga29uZmlkZW5zaWFsbMSxcWRhbiBhc8SxbMSxIG9sbWF5YXJhcSBidSwgU2l6IHbJmSBkb3N0bGFyxLFuxLF6IGFyYXPEsW5kYSBzb3NpYWwgxZ/JmWLJmWvJmWzJmXJkyZlraSBkYW7EscWfxLHEn8SxIG94dW1hcSBpbWthbsSxIHZlcmlyLiBRZXlkOiBidSBpY2F6yZkgYsO8dMO8biBzb3NpYWwgxZ/JmWLJmWvJmWzJmXJkyZkgaWNyYSBlZGlsyZkgYmlsbcmZei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzUwNDE3OTIyMjQ5MzIzNTY0NSI+InNvc2lhbCBheMSxbsSxbsSxemEgeWF6xLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDg2NTU3NTUyMjA0MTE0ODQ5Ij4iVMmZdGJpccmZIGRvc3RsYXLEsW7EsXpkYW4gc29zaWFsIHllbmlsyZlubcmZbMmZcmkgZ8O2c3TJmXJtyZkgaWNhesmZc2kgdmVyaXIuIE3JmWx1bWF0IHBheWxhxZ9hcmvJmW4gZGlxccmZdGxpIG9sdW4gLSBidSBkb3N0bGFyxLFuxLF6ZGFuIGfJmWzJmW4gbWVzYWrEsSBlbWFsIGV0bcmZecmZIGl6biB2ZXJpci4gUWV5ZDogYnUgaWNhesmZIGLDvHTDvG4gc29zaWFsIMWfyZliyZlryZlsyZlyyZkgxZ9hbWlsIG9sdW5tYXlhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxlbmRhciIgbXNnaWQ9IjU5NzI3Mjc1NjAyNTc2MTIzOTgiPiJ0yZlxdmltIHTJmWRiaXJsyZlyaW5pIHbJmSBrb25maWRlbnNpYWwgbcmZbHVtYXRsYXLEsSBveHV5dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQyMTY0NjIwNDkwNTc2NTg3MjMiPiJUyZl0YmlxyZkgZG9zdGxhcsSxbsSxesSxbiB2yZkgyZltyZlrZGHFn2xhcsSxbsSxesSxbiBwbGFuxZ9ldGluaXpkyZkgeWVybMmZxZ/JmW4ga2FsZW5kYXIgdMmZZGJpcmzJmXJpbmkgb3h1bWHEn2EgaWNhesmZIHZlcmlyLiBCdSB0yZl0YmlxyZkga29uZmlkZW5zaWFsbMSxcSB2yZkgeWEgaMmZc3Nhc2zEsXFkYW4gYXPEsWzEsSBvbG1heWFyYXEgc2l6aW4ga2FsZW5kYXIgbcmZbHVtYXRsYXLEsW7EsXrEsSBwYXlsYcWfbWFxIHbJmSB5YSBzYXhsYW1hxJ9hIGlta2FuIHlhcmFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc0MzQ1NDg2ODI0NzA4NTE1ODMiPiJUyZl0YmlxyZkgZG9zdCB2yZkgyZltyZlrZGHFn2xhcmEgbcmZeHN1cyBvbGFubGFyIGRheGlsIG9sbWFxbGEgcGxhbsWfZXRkyZkgeWVybMmZxZ/JmW4gYsO8dMO8biBrYWxlbmRhciB0yZl0YmlxbMmZcmluaSBveHVtYXEgaWNhesmZc2kgdmVyaXIuIEJ1IHTJmXRiaXHJmSBrb25maWRlbnNpYWxsxLFxIHbJmSB5YSBoyZlzc2FzbMSxcWRhbiBhc8SxbMSxIG9sbWF5YXJhcSwgU2l6aW4ga2FsZW5kYXIgbcmZbHVtYXRsYXLEsW7EsXrEsSBwYXlsYcWfbWFxIHbJmSB5YSBzYXhsYW1hcSBpbWthbsSxIHlhcmFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDYWxlbmRhciIgbXNnaWQ9Ijg0Mzg4NzQ3NTUxOTM4MjU2NDciPiJjaWhheiBzYWhpYmluaW4gaWNhesmZc2kgb2xtYWRhbiB0yZlxdmltIHTJmWRiaXJsyZlyaSDJmWxhdsmZIGV0bcmZayB2yZkgeWEgZMmZeWnFn23JmWssIGJ1bnVuIGhhcXHEsW5kYSBiaWxkaXJpxZ9syZlyIGfDtm5kyZlybcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NzkwMzU1MjAxMTM2Njg1MjgiPiJUyZl0YmlxyZkgcGxhbsWfZXRpbml6ZMmZa2kgdMmZZGJpcmzJmXJpIGTJmXlpxZ9tyZl5yZksIHTJmWRiaXIgyZlsYXbJmSBldG3JmXnJmSB2yZkgeWEgc2lsbcmZecmZIGlta2FuIHZlcmlyLiBCdW5hIFNpemluIGRvc3RsYXLEsW7EsXpsYSB2yZkgaMmZbWthcmxhcsSxbsSxemxhIGJpcmxpa2TJmSBoYXrEsXJsYWTEscSfxLFuxLF6IHTJmWRiaXJsyZlyIGTJmSBkYXhpbGRpci4gQnUsIHTJmWRiaXLJmSBTaXppbiBhZMSxbsSxemRhbiB2yZkgU2l6ZMmZbiB4yZliyZlyc2l6LCB0yZlxdmltIHNhaGliaSBraW1pIG1lc2FqIGfDtm5kyZlybcmZayBpbWthbsSxbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMzI0NDY5NDk2MzI3MjQ5Mzc2Ij4iRG9zdGxhcsSxbsSxeiB2yZkgaMmZbWthcmxhcsSxbsSxemEgbcmZeHN1cyBvbGFubGFyIGRhIGRheGlsIG9sbWFxbGEsIHTJmXRiaXHJmSB0ZWxlZm9udW51emRha8SxIHTJmWRiaXJsyZlyaSBkyZl5acWfbcmZecmZLCB0yZlkYmlyIMmZbGF2yZkgZXRtyZl5yZkgdsmZIHlhIHNpbG3JmXnJmSBpbWthbiB2ZXJpci4gQnUsIHTJmWRiaXLJmSBTaXppbiBhZMSxbsSxemRhbiB2yZkgU2l6ZMmZbiB4yZliyZlyc2l6LCB0yZlxdmltIHNhaGliaSBraW1pIG1lc2FqIGfDtm5kyZlybcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iODY4ODMzNDk3NDAzNjgyMzMzMCI+InRlc3Qgw7zDp8O8biBzYXh0YSBtyZlrYW4gbcmZbmLJmWzJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IlRlc3Qgw7zDp8O8biBzYXh0YSBtyZlrYW4gbcmZbmLJmWzJmXJpIHlhcmFkxLFuIHbJmSB5YSB5ZW5pIG3JmWthbiBwcm92YXlkZXJpIHF1cmHFn2TEsXLEsW4uIEJ1IHTJmXRiaXFsyZlyyZkgR1BTIHbJmSBtyZlrYW4gcHJvdmF5ZGVybMmZcmkga2ltaSBtyZlrYW4gbcmZbmLJmWzJmXJpbmTJmW4gYWzEsW5hbiBtyZlrYW4gdsmZL3lhIHN0YXR1c2xhcsSxIHllbmlkyZluIHlhem1hxJ9hIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjI4MzYzMDgwNzY3MjA1NTM4MzciPiLJmWxhdsmZIG3JmWthbiBwcm92YXlkZXJpIMmZbXJsyZlyaW7JmSDDp8SxeMSxxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSI1OTQ1MTY2NjQyMzM1ODAwNzYzIj4iVMmZdGJpccmZIMmZbGF2yZkgbcmZa2FuIHByb3ZheWRlcmkgyZltcmzJmXJpbsmZIGRheGlsIG9sbWFxIGlta2FuxLEgdmVyaXIuIEJ1IHTJmXRiaXHJmSBHUFMgyZltyZlsaXl5YXTEsW5hIHbJmSB5YSBkaWfJmXIgbcmZa2FuIG3JmW5iyZlsyZlyaW7JmSBtYW5lIG9sbWFxIGlta2FuxLEgdmVyyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI2NTc4MTAxMTk5ODI1MTkzODczIj4iTcmZa2FuIHByb3ZheWRlcmluaSBxdXJhxZ9kxLFybWFxIGljYXrJmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI5MDY2MTQ2MTIwNDcwNTkxNTA5Ij4iWWVuaSB5ZXJsyZnFn23JmSB0yZljaGl6YXTDp8Sxc8SxbsSxIHRlc3QgZXRtyZlrIHbJmSB5YSBxdXJhxZ9kxLFybWFxIMO8w6fDvG4gbW9jayB5ZXJsyZnFn23JmSBtyZluYsmZbMmZcmkgeWFyYXQuIEJ1IHTJmXRiaXHJmSB5ZXJsyZnFn23JmW5pbiB2yZkveWEgZGlnyZlyIHllcmzJmcWfbcmZIG3JmW5iyZlsyZlyaW5kyZluIEdQUyB2yZkgeWEgeWVybMmZxZ9tyZkgdMmZY2hpemF0w6fEsWxhcsSxIHFhecSxdG3EscWfIHN0YXR1c2xhcsSxbiBsyZnEn3YgZXRtyZlzaW7JmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiJkyZlxaXEgeWVyaSAoR1BTIHbJmSDFn8mZYsmZa8mZLcmZc2FzbMSxKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjUyOTUwNDc1NjM1NjQ5ODEyNTAiPiJRbG9iYWwgUG96aXNpeWEgU2lzdGVtaW5pIHbJmSB5YSDFn8mZYsmZa8mZIHHDvGxsyZlsyZlyaSB2yZkgV2ktRmkga2ltaSDFn8mZYsmZa8mZIG3JmWthbsSxbsSxIGlzdGlmYWTJmSBlZMmZcsmZayB0yZl0YmlxyZkgU2l6aW4gZMmZcWlxIHllcmluaXppIHTJmXlpbiBldG3JmXnJmSBpbWthbiB2ZXJpci4gQnUgbcmZa2FuIHhpZG3JmXRsyZlyaSBha3RpdmzJmcWfZGlyaWxtyZlsaWRpcmzJmXIga2ksIFNpeiB0yZl0YmlxaSBpc3RpZmFkyZkgZWTJmW4gemFtYW4gdMmZdGJpcSBvbmxhcsSxIGlzdGlmYWTJmSBlZMmZIGJpbHNpbi4gVMmZdGJpcWzJmXIgU2l6aW4gaGFyYWRhIG9sbWHEn8SxbsSxesSxIGJ1bnVuIHZhc2l0yZlzaWzJmSB0yZl5aW4gZWTJmWPJmWssIGV5bmkgemFtYW5kYSwgYnUgeGlkbcmZdCDJmWxhdsmZIGJhdGFyZXlhIGVuZXJqaXNpIGFwYXJhIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iNDg4Nzg5NTM2MjM1NDIzOTYyOCI+InTJmXhtaW5pIG3JmWthbiAoxZ/JmWLJmWvJmSDJmXNhc2zEsSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjI1MzgyMDAxODQzNzMzMDIyOTUiPiJUyZl0YmlxyZkgdMmZeG1pbmkgeWVyaW5pemkgYWxtYXEgw7zDp8O8biBpbWthbiB2ZXJpci4gQnUgeWVyLCB5ZXJsyZnFn23JmSB4aWRtyZl0bMmZcmkgdMmZcsmZZmluZMmZbiBtb2JpbCBxw7xsbMmZbMmZciB2yZkgV2ktRmkga2ltaSDFn8mZYsmZa8mZIHllcmzJmcWfbcmZIG3JmW5iyZlsyZlyZMmZbiBpc3RpZmFkyZkgZXRtyZlrbMmZIMmZbGTJmSBlZGlsaXIuIEJ1IHllcmzJmcWfbcmZIHhpZG3JmXRsyZlyaSB0yZl0YmlxaW4gb25sYXJkYW4gaXN0aWZhZMmZc2kgw7zDp8O8biBhw6fEsXEgdsmZIGNpaGF6xLFuxLF6xLFuIG9ubGFyxLEgaXN0aWZhZMmZc2kgw7zDp8O8biBtw7Z2Y3VkIG9sbWFsxLFkxLFyLiBUyZl0YmlxbMmZciBidW5kYW4gc2l6aW4gdMmZeG1pbsmZbiBoYXJhZGEgb2xkdcSfdW51enUgbcO8yZl5ecmZbmzJmcWfZGlybcmZayDDvMOnw7xuIGlzdGlmYWTJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMjM2Mzk2OTY0MTc5MjM4ODk0NyI+IlN1cmZhY2VGbGluZ2VyXCfJmSBkYXhpbCBvbG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlTJmXRiaXHJmSBhxZ9hxJ/EsSBzyZl2aXl5yZlsaSBTdXJmYWNlRm5nZXIgw7Z6yZlsbGlrbMmZcmluaSBpc3RpZmFkyZkgZXRtyZl5yZkgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImZyZXltIGJ1ZmVyaSBveHV5dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iVMmZdGJpccmZIGZyZXltIGJ1ZmVyaW5pbiBrb250ZW50aW5pIG94dW1hcSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJJbnB1dEZsaW5nZXIga2XDp2lkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJUyZl0YmlxyZkgYcWfYcSfxLEgc8mZdml5ecmZbGkgSW5wdXRGbGluZ2VyIGZ1bmtzaXlhbGFyxLFuxLEgaXN0aWZhZMmZIGV0bcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IldpZmkgZ8O2csO8bnTDvGzJmXJpbmkgcXVyYcWfZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IlTJmXRiaXHJmSBXaWZpIGfDtnLDvG50w7xsyZlyaW5pIHF1cmHFn2TEsXJtYcSfYSB2yZkgb25sYXJhIHFvxZ91bG1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iV2lGaSBnw7Zyw7xudMO8bMmZcmluaSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSI0NTQzOTEyMjkyNjgxODI2OTg2Ij4iVMmZdGJpccmZIFdpZmkgZGlzcGxleWzJmXJpbmluIGHFn2HEn8SxIHPJmXZpeXnJmWxpIGZ1bmtzaXlhbGFyxLFuxLEgaWRhcsmZIGV0bcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjg1NzEzNDQ5ODQwMjM0NjcwOCI+ImF1ZGlvIMOnxLF4xLHFn8SxIGFsxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjIxMDU5Nzc1NDIxMjIwODg1MyI+IlTJmXRiaXHJmSBhdWRpbyDDp8SxeMSxxZ/EsSBhbG1hcSB2yZkgeWVuaWTJmW4gecO2bmzJmW5kaXJtyZlrIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIyMjQ2ODI4NzczNTg5MDk0MDIzIj4idmlkZW8gw6fEsXjEscWfxLEgYWzEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIzNTk0ODE2NTgwMzQxNDk4NjAiPiJUyZl0YmlxyZkgdmlkZW8gw6fEsXjEscWfxLEgYWxtYXEgdsmZIHllbmlkyZluIHnDtm5syZluZGlybcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iNzgxNTM5ODk2OTMwMzM4MjAxNiI+InTJmWhsw7xryZlzaXogdmlkZW8gw6fEsXjEscWfxLEgYWzEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlU2VjdXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIyNzc5NzkzMDY0NzA5MzUwMjg5Ij4iVMmZdGJpccmZIGfDvHbJmW5saSB2aWRlbyDDp8SxeMSxxZ/EsSBhbG1hcSB2yZkgeWVuaWTJmW4gecO2bmzJmW5kaXJtyZlrIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iNjA5NTg1OTkzNzA2OTE0NjA4NiI+ImF1ZGlvIGF5YXJsYXLEsW7EsXrEsSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IlTJmXRiaXHJmSBzyZlzIHbJmSBoYW5zxLEgc3Bpa2VyaW4gw6fEsXjEscWfIMO8w6fDvG4gaXN0aWZhZMmZIG9sdW5kdcSfdSBraW1pIHFsb2JhbCBzyZlzIGF5YXJsYXLEsW7EsSBkyZl5acWfZGlybcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4ic8mZcyB5YXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiJUyZl0YmlxyZkgbWlrcm9mb25sYSBhdWRpbyB5YXptYXEgaWNhesmZc2kgdmVyaXIuIMSwY2F6yZkgdMmZdGJpccmZIHNpemluIHTJmXNkaXFpbml6IG9sbWFkYW4gaXN0yZluaWzJmW4gemFtYW4gc8mZcyB5YXptYSBpem5pIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+IsWfyZlraWwgdsmZIHZpZGVvIMOnyZlrbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJUyZl0YmlxyZkga2FtZXJhIGlsyZkgxZ/JmWtpbCB2yZkgdmlkZW8gw6fJmWttyZl5yZkgaW1rYW4geWFyYWTEsXIuIEJ1IGljYXrJmSB0yZl0YmlxyZkgc2l6aW4gdMmZc2RpcWluaXogb2xtYWRhbiBrYW1lcmFkYW4gaXN0aWZhZMmZIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ImthbWVyYSBpc3RpZmFkyZkgZWRpbGRpa2TJmSBMRUQgZ8O2c3TJmXJpY2kgw7Z0w7xyw7xsbcmZc2luaSBkZWFrdGl2IGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4iw5ZuY8mZZMmZbiBxdXJhxZ9kxLFyxLFsbcSxxZ8gc2lzdGVtIHTJmXRiaXFpbsmZIGthbWVyYSB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsyZluIExFRCBpbmRpa2F0b3J1bnUgc8O2bmTDvHJtyZlrIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI5NjEyOTIyMDU3NjQ0ODgzMDQiPiJwbGFuxZ9ldGkgZGFpbWkgb2xhcmFxIGFyYWRhbiBxYWxkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgzMzc4MTcwOTMzMjYzNzA1MzciPiJ0ZWxlZm9udSBoyZltacWfyZlsaWsgZGVha3RpdiBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMzNDgxODgwODAwMTY5OTUzMCI+IlTJmXRiaXHJmSBwbGFuxZ9ldGkgYmlyZMmZZsmZbGlrIGRlYWt0aXYgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIEJ1IGRhIMOnb3ggdMmZaGzDvGvJmWxpZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc4ODkwMzI5NzYyNzI4MzA5OSI+IlTJmXRiaXHJmSBiw7x0w7xuIHRlbGVmb251IGJpcmTJmWbJmWxpayBkZWFrdGl2bMmZxZ9kaXJtyZl5yZkgaW1rYW4gdmVyaXIuIEJ1IMOnb3ggdMmZaGzDvGvJmWxpZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDM2NjM0OTcyNTYxNzk1MDAyIj4icGxhbsWfZXRpIHllbmlkyZluIHnDvGtsyZlubcmZecmZIG3JmWNidXIgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg5ODU2MDg3MjQ2MjYzODI0MiI+InRlbGVmb251IHllbmlkyZluIHnDvGtsyZlubcmZecmZIG3JmWNidXIgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODE3MjA1NjE4MDA2MzcwMDc0MSI+IlTJmXRiaXHJmSBwbGFuxZ9ldGkgeWVuaWTJmW4gecO8a2zJmW3JmXnJmSBtyZljYnVyIGV0bcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiJUyZl0YmlxyZkgdGVsZWZvbnUgeWVuaWTJmW4gecO8a2zJmW3JmXnJmSBtyZljYnVyIGV0bcmZayDDvMOnw7xuIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyOTI3MzYxNTM3OTQyNTkxODQxIj4iVVNCIHlhZGRhxZ8gZmF5bCBzaXN0ZW1pbsmZIGRheGlsIG9sbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQwMjMwNTA0OTg5MDk1MzgxMCI+IlNEIEthcnQgZmF5bCBzaXN0ZW1pbsmZIGRheGlsIG9sbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgbXNnaWQ9IjE4MjkyOTA3MDE2NTg5OTIzNDciPiJUyZl0YmlxyZkgc2lsaW7JmWJpbMmZbiB5YWRkYcWfbGFyxLEgdsmZIHlhIGZheWwgc2lzdGVtaW5pIHF1cmHFn2TEsXJtYSB2yZkgYXnEsXJtYSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4iVVNCIHlhZGRhxZ/EsSBzaWxpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYyNTgyNjk4NjM5Mjc0MDU2Ij4iU0Qga2FydMSxIHNpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iODc4NDI2ODI0Njc3OTE5ODYyNyI+IlTJmXRiaXHJmSDDp8SxeGFyxLFsYSBiaWzJmW4geWFkZGHFn8SxIGZvcm1hdCBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzQxMTMzODYzMjAwMjE5Mzg0NiI+ImRheGlsaSB5YWRkYcWfxLFuxLF6IGhhcXHEsW5kYSBtyZlsdW1hdCDJmWxkyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzMDk0NTYzODQ0NTkzODc4NTQ4Ij4iVMmZdGJpccmZIGRheGlsaSB5YWRkYcWfIGhhcXHEsW5kYSBtyZlsdW1hdCBhbG1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19jcmVhdGUiIG1zZ2lkPSI2NDE0NzU3MjM0Nzg5MzM2MzI3Ij4iZGF4aWxpIHlhZGRhxZ8geWFyYXRtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2NyZWF0ZSIgbXNnaWQ9IjQ1NTg4NjkyNzM1ODU4NTY4NzYiPiJUyZl0YmlxyZkgZGF4aWxpIHlhZGRhxZ8geWFyYXRtYXEgw7zDp8O8biBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjUyNjkyODMyODMwMTYxODAyMiI+ImRheGlsaSB5YWRkYcWfxLEgbcmZaHYgZXRtyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI3MjE4NzQ5Mjg2MTQ1NTI2NTM3Ij4iVMmZdGJpccmZIGRheGlsaSB5YWRkYcWfxLEgbcmZaHYgZXRtyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSI4ODc3OTk4MTAxOTQ0OTk5Mzg2Ij4iZGF4aWxpIHlhZGRhxZ/EsSBtb250YWogdsmZIHlhIGRlbW9udGFqIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9IjM0NTEzNjAxMTQ5MDI0OTA5MjkiPiJUyZl0YmlxyZkgZGF4aWxpIHlhZGRhxZ/EsSBxdXJhxZ9kxLFybWEvYXnEsXJtYSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfcmVuYW1lIiBtc2dpZD0iNzQ5NjYzMzk1NDA4MDQ3MjQxNyI+ImRheGlsaSB5YWRkYcWfxLFuIGFkxLFuxLEgZMmZeWnFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfcmVuYW1lIiBtc2dpZD0iMTc5NDc1NzU4ODQ3MjEyNzY3NSI+IlTJmXRiaXHJmSBkYXhpbGkgeWFkZGHFn8SxbiBhZMSxbsSxIGTJmXlpxZ9tyZlrIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+InZpYnJhc2l5YXlhIG7JmXphcsmZdCBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJUyZl0YmlxyZkgdmlicmF0b3J1IGlkYXLJmSBldG3JmSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4iRmxhc2ggacWfxLHEn8SxbsSxIGlkYXLJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJUyZl0YmlxyZkgc2lxbmFsIGnFn8SxxJ/EsSBuYSBuyZl6YXLJmXQgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4iVVNCIGNpaGF6bGFyIMO8w6fDvG4gdMmZcmNpaGzJmXJpIHbJmSBpY2F6yZlsyZlyaSBpZGFyyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNiIiBtc2dpZD0iNzc3NjE1NTQzMDIxODIzOTgzMyI+IlTJmXRiaXHJmSBVU0IgY2loYXpsYXIgw7zDp8O8biBvbGFuIHTJmXJjaWhsyZlyaSB2yZkgaWNhesmZbMmZcmkgaWRhcsmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTXRwIiBtc2dpZD0iNDk1MzQ2ODY3Njc5NTkxNzA0MiI+Ik1UUCBwcm90b2tvbCBoyZl5YXRhIGtlw6dpcm3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNdHAiIG1zZ2lkPSI2NTMyOTYxMjAwNDg2NzkxNTcwIj4iS2VybmVsIE1UUCBkcmF5dmVyyZkgZ2lyacWfyZkgaW1rYW4gdmVyaXIga2ksIE1UUCBVU0IgcHJvdG9rb2x1bnUgaMmZeWF0YSBrZcOnaXJzaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNDE0ODI5MDg2MDQwMDY1OTE0NiI+ImF2YWRhbmzEscSfxLEgc8SxbmFxIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNjU5Nzk2NDE5MTIwODAxNjYwNSI+IlTJmXRiaXHJmSBhdmFkYW5sxLHEn8SxIHlveGxhbWFxIMO8w6fDvG4gbcO8eHTJmWxpZiBwZXJpZmVyaXlhbGFyxLEga29udHJvbCBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJ0ZWxlZm9uIG7Dtm1yyZlsyZlyaW7JmSBiaXJiYcWfYSB6yZluZyBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlTJmXRiaXHJmSBTaXppbiBtw7xkYXhpbMmZbml6IG9sbWFkYW4gdGVsZWZvbiB6yZluZ2zJmXJpIGV0bcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgU2l6ZMmZbiB4yZliyZlyc2l6IMWfyZlraWxkyZkgbcO8eHTJmWxpZiB6yZluZ2zJmXIgZWTJmXLJmWssIFNpesmZIG1hZGRpIHppeWFuIHZ1cmEgYmlsyZlyLiBRZXlkOiBCdSwgdMmZdGJpcWzJmXLJmSB0yZljaWxpIG7Dtm1yyZlsyZlyyZkgesmZbmcgZXRtyZl5yZkgaWNhesmZIHZlcm1pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iNDE5ODM0OTIxMTEwODQ5Nzg3OSI+ImlzdMmZbmlsyZluIG7Dtm1yyZl5yZkgYmlyYmHFn2EgesmZbmcgZWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iMTY4OTAyNDkwMTUwOTk5NjgxMCI+IlTJmXRiaXHJmSBTaXppbiBtw7xkYXhpbMmZbml6IG9sbWFkYW4sIHTJmWNpbGkgesmZbmdsyZlyIGTJmSBkYXhpbCBvbG1hcWxhLCBpc3TJmW5pbMmZbiB0ZWxlZm9uIHrJmW5naW5pIGV0bcmZecmZIGlta2FuIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgYnVuZGFuIGlzdGlmYWTJmSBlZMmZcsmZaywgdMmZY2lsaSBuw7ZtcsmZbMmZcsmZIHFhbnVuc3V6IHrJmW5nIHZ1cm1hcWxhIFNpemluIMO8w6fDvG4gaMO8cXVxaSBwcm9ibGVtbMmZciB5YXJhZGEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ4NDI1NzY5OTQxNDQ2MDQ4MjEiPiJDRE1BIHBsYW7Fn2V0IGF5YXJsYXLEsW5hIGJpcmJhxZ9hIGJhxZ9sYW1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NjA0ODQ4MDk1MzE1NDIxNDI1Ij4iQ0RNQSB0ZWxlZm9uIHF1cmHFn2TEsXJtYWxhcsSxbmEgYmlyYmHFn2EgYmHFn2xhbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIG1zZ2lkPSIxOTk0MTkzNTM4ODAyMzE0MTg2Ij4iVMmZdGJpccmZIENETUEgaGF6xLFybMSxxJ/EsW7EsSBiYcWfbGF0bWEgaWNhesmZc2kgdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBlaHRpeWFjIG9sbWFkxLFxZGEgQ0RNQSBoYXrEsXJsxLHEn8SxbsSxIGJhxZ9sYWRhIGJpbMmZcmzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSI3Nzg1NDA4MjUzMzY0MzM1NzQwIj4ibcmZa2FuIGfDvG5jyZlsbMmZbcmZIGJpbGRpcmnFn2zJmXJpbmkgaWRhcsmZIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSIxMTIwNzQxNTU3ODkxNDM4ODc2Ij4iVMmZdGJpccmZIHJhZGlvZGFuIGfJmWzJmW4gbcmZa2FuIGfDvG5jyZlsbMmZbm3JmWzJmXJpbmkgYWt0aXYgdsmZIHlhIGRlYWt0aXYgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBvbHVubXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI3ODU1MjU5NDYxMjY4NzM0OTE0Ij4icWV5ZGl5eWF0IHjDvHN1c2l5ecmZdGzJmXJpbmkgyZlsZMmZIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9IjQwMjQ1MjY5Njg2MzAxOTQxMjgiPiJUyZl0YmlxyZkgZ2lyacWfIHFleWRpIHNlcnZpc2kgdMmZcsmZZmluZMmZbiB5w7xrbMmZbm1pxZ8gbcO8bGtpeXnJmXTJmSBnaXJpxZ9pIG94dW1hcS95YXptYXEgaW1rYW5sIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgw7zDp8O8biBuyZl6yZlyZMmZIHR1dHVsbWF5xLFiLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEdhZGdldCIgbXNnaWQ9Ijc3NjkwNTMzOTAxNTg2MzQ3MSI+InZpZGNldGzJmXIgc2XDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4iVMmZdGJpccmZIHNpc3RlbcmZIGhhbnPEsSB2aWRjZXRpbiBoYW5zxLEgdMmZdGJpcSB0yZlyyZlmaW5kyZluIGlzdGlmYWTJmSBlZGlsyZkgYmlsbcmZc2luaSBkZW3JmXnJmSBpY2F6yZkgdmVyaXIuIEJ1IGljYXrJmWxpIHTJmXRiaXFsyZlyIMWfyZl4c2kgbcmZbHVtYXRsYXJhIHbJmSBkaWfJmXIgdMmZdGJpcWzJmXLJmSDDp8SxeMSxxZ8gdmVyyZkgYmlsyZlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgw7zDp8O8biBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSI4NDIzOTIzNzc3NjU5MjkyMjI4Ij4idGVsZWZvbiBzdGF0dXN1bnUgZMmZeWnFn23JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+IlTJmXRiaXHJmSBjaWhhesSxbiB0ZWxlZm9uIGZ1bmtzaXlhbGFyxLFuxLEgaWRhcsmZIGV0bcmZayBpbWthbsSxIHZlcmlyLiBCZWzJmSBpY2F6yZlsaSB0yZl0YmlxIFNpemkgeMmZYsmZcmRhciBldG3JmWTJmW4gxZ/JmWLJmWvJmWzJmXJpIHFvxZ9hLCB0ZWxlZm9uIHJhZGlvc3VudSB5YW5kxLFyxLFiLXPDtm5kw7xyyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSI5MTc4MjI4NTI0NTA3NjEwNDg2Ij4idGVsZWZvbiBzdGF0dXN1bnUgdsmZIGlkZW50aWZpa2FzaXlhbsSxIG94dXl1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iMTYzOTIxMjc3MTgyNjEyNTUyOCI+IlTJmXRiaXHJmSBjaWhhesSxbiB0ZWxlZm9uIGZ1bmtzaXlhbGFyxLFuYSBnaXJpxZ8gaWNhesmZc2kgdmVyaXIuIEJlbMmZIGljYXrJmWxpIHTJmXRiaXEgYnUgdGVsZWZvbnVuIG7Dtm1yyZlzaW5pIHbJmSBjaWhheiDEsERcJ25pLCB6yZluZ2luIGFrdGl2IG9sdWItb2xtYWTEscSfxLFuxLEgdsmZIHrJmW5nIGVkaWzJmW4gbsO2bXLJmW5pIG3DvMmZeXnJmW4gZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUzMTczMTQzNTAxMTQ5NTAxNSI+InBsYW7Fn2V0aW4geXV4dSByZWppbWluaW4gcWFyxZ/EsXPEsW7EsSBhbG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzM0ODAxODc5NDE0OTYxMzAiPiJ0ZWxlZm9udW4geXV4dSByZWppbWluyZkga2XDp23JmXNpbmkgyZluZ8mZbGzJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzExMzE5ODI0NDAwNDQ3ODY4Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aW4geXV4dSByZWppbWluaSBxYWRhxJ9hbiBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg1NTkxMDA2NzczNzI5Mjg3NTQiPiJUyZl0YmlxyZkgdGVsZWZvbnVuIHl1eHUgcmVqaW1pbmkgcWFkYcSfYW4gZXRtyZlrIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc4NzAzNDcyMjYxNjM1MDQxNyI+InBsYW7Fn2V0aSB5YW5kxLFybWEgdsmZIHlhIHPDtm5kw7xybcmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5Mjg2MjI0NzA5ODA5NDMyMDYiPiJ0ZWxlZm9udSB5YW5kxLFybWFxIHbJmSB5YSBzw7ZuZMO8cm3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY4OTg2Mjg3ODk4NDYzMTgzMSI+IlTJmXRiaXHJmSBwbGFuxZ9ldGkgeWFuZMSxcm1hxJ9hIHbJmSBzw7ZuZMO8cm3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjYwMzcwNTczNDg0NjMxMzEwMzIiPiJUyZl0YmlxyZkgdGVsZWZvbnUgeWFuZMSxcsSxYiBzw7ZuZMO8cm3JmSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZhY3RvcnlUZXN0IiBtc2dpZD0iMzcxNTIyNTQ5MjY5NjQxNjE4NyI+Inphdm9kIHRlc3QgcmVqaW1pbmTJmSBpxZ9syZl5aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk1MjA1OTMxODM1OTY1MzA5MSI+IlBsYW7Fn2V0IGF2YWRhbmzEscSfxLFuYSB0YW0gZ2lyacWfyZkgaW1rYW4gdmVybcmZa2zJmSBhxZ9hxJ/EsSBzyZl2aXl5yZlsaSBpc3RlaHNhbMOnxLEgc8SxbmHEn8SxIGtpbWkgacWfbMmZeWlyLiBZYWxuxLF6IHBsYW7Fn2V0IGlzdGVoc2Fsw6fEsSBzxLFuYXEgcmVqaW1pbmTJmSBvbGR1cWRhIGnFn2zJmXlpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxMzY2NDQ5OTAzMTkyNDQ4MDIiPiJCaXIgYcWfYcSfxLEgc8mZdml5ecmZbGkgaXN0ZWhzYWzDp8SxIHRlc3RpIGtpbWkgw6dhbMSxxZ9kxLFyxLFuLCB0ZWxlZm9uIGhhcmR3YXJlIMO8w6fDvG4gdGFtIGdpcmnFnyBpbWthbsSxIHZlcmlyLiBBbmNhcSB0ZWxlZm9uLCBpc3RlaHNhbMOnxLEgdGVzdCByZWppbWluZMmZIMOnYWzEscWfZMSxxJ/EsSB6YW1hbiBha3RpdmRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlciIgbXNnaWQ9IjY2MjcxOTIzMzMzNzM0NjUxNDMiPiJkaXZhciBrYcSfxLF6xLEgeWVybMmZxZ9kaXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlciIgbXNnaWQ9IjczNzM0NDc5MjA5Nzc2MjQ3NDUiPiJUyZl0YmlxyZkgc2lzdGVtyZkgZGl2YXIga2HEn8SxesSxIHllcmzJmcWfZGlybcmZayBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iMzI3ODYwODE2NTk3NzczNjUzOCI+ImRpdmFyIGthxJ/EsXrEsSDDtmzDp8O8c8O8bsO8IHZlcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVySGludHMiIG1zZ2lkPSI4MjM1Nzg0Mzg0MjIzNzMwMDkxIj4iVMmZdGJpccmZIHNpc3RlbSBkaXZhciBrYcSfxLF6xLEgw7Zsw6fDvHPDvCBnw7ZzdMmZcmnFn2zJmXJpbmkgbcO8yZl5ecmZbiBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hc3RlckNsZWFyIiBtc2dpZD0iMjMxNTc1MDQyMzEzOTY5NzM5NyI+ImZhYnJpayBkZWZvbHR1bmEgc8SxZsSxcmxhbWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIzNjY1MzgwNDkyNjMzOTEwMjI2Ij4iVMmZdGJpccmZIGLDvHTDvG4gbcmZbHVtYXRsYXLEsSwgbml6YW1sYXLEsSB2yZkgcXVyYcWfZMSxcsSxbG3EscWfIHTJmXRiaXFsyZlyaSBzaWzJmXLJmWsgc2lzdGVtaSBmYWJyaWsgbml6YW1sYXLEsW5hIHFheXRhcm1hcSBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZSIgbXNnaWQ9IjIwMjE2MTQ4Mjk1OTE3NzU2NDYiPiJ2YXh0xLEgdMmZeWluIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxODk2MzQxNDM4MTUxMTUyODgxIj4iVMmZdGJpccmZIHBsYW7Fn2V0aW4gc2FhdCB2YXh0xLFuxLEgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg1NTcwMjczMDczODAyMCI+IlTJmXRiaXHJmSB0ZWxlZm9udW4gc2FhdCB2YXh0xLFuxLEgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWVab25lIiBtc2dpZD0iMjk0NTA3OTgwMTAxMzA3NzM0MCI+InZheHQgem9uYXPEsW7EsSBxdXJhxZ9kxLFyxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE2NzY5ODM3MTIzMTU4Mjc2NDUiPiJUyZl0YmlxyZkgcGxhbsWfZXRpbiB2YXh0IHpvbmFzxLFuxLEgZMmZeWnFn23JmSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0OTk5NDM0ODg0MzY2MzMzOTgiPiJUyZl0YmlxyZkgdGVsZWZvbiBzYWF0IHpvbGHEn8SxbsSxIGTJmXlpxZ9tyZlrIMO8w6fDvG4gaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSI0ODI5MjYyMzQ5NjkxMzg2OTg2Ij4iQWNjb3VudE1hbmFnZXJTZXJ2aWNlIGtpbWkgZGF2cmFuxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iMTk0ODQ1NTU1MjMzMzYxNTk1NCI+IlTJmXRiaXHJmSBBY2NvdW50QXV0aGVudGljYXRvcnNcJ8mZIHrJmW5nIGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QWNjb3VudHMiIG1zZ2lkPSIxMDg2Nzk1NDY3NzYwMTIyMTE0Ij4iY2loYXpkYSBoZXNhYmxhcsSxIHRhcMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNzQxNDk2NTM0NzY5NjYwMDI3Ij4iVMmZdGJpccmZIHBsYW7Fn2V0IHTJmXLJmWZpbmTJmW4gYmlsaW7JmW4gaGVzYWJsYXLEsW4gc2l5YWjEsXPEsW7EsSBhbG1hIGljYXrJmXNpIHZlcmlyLiBCdSBxdXJhxZ9kxLFyZMSxxJ/EsW7EsXogdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiB5YXJhZMSxbG3EscWfIGlzdMmZbmlsyZluIGhlc2FiIG9sYSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDQ4MzE2ODIyNDUxODA3MzgyIj4iVMmZdGJpccmZIHRlbGVmb25kYSBvbGFuIGhlc2FibGFyxLFuIHNpeWFoxLFzxLFuxLEgyZlsZMmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiBCdW5hIHF1cmHFn2TEsXJkxLHEn8SxbsSxeiBpc3TJmW5pbMmZbiB0yZl0YmlxIHTJmXLJmWZpbmTJmW4geWFyYWTEsWxhbiBoZXNhYmxhciBkYSBhaWRkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjUyNjU5MDg0ODExNzI3MzY5MzMiPiJoZXNhYmxhciB5YXJhZMSxciB2yZkgcGFyb2xsYXIgdMmZeWluIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjU0NzIxMjQyOTY5MDg5NzcyNjAiPiJUyZl0YmlxyZkgQWNjb3VudE1hbmFnZXJcJ2luIGhlc2FiIHlhcmF0bWFxIHbJmSBwYXJvbCBhbG1hcSB2yZkgYcOnbWFxIGRheGlsIG9sbWFxbGEgYsmZcmFiyZlyLCBoZXNhYiB0yZlzZGlxbMmZeWljaSBpbWthbmxhcsSxbsSxIGlzdGlmYWTJmSBldG3JmXnJmSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9IjQ5ODMxMjYzMDQ3NTcxNzczMDUiPiJoZXNhYmxhcsSxIMmZbGF2yZkgZWRpciB2yZkgeWEgc2lsaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9Ijg2OTgyOTU2MjU0ODgyOTI1MDYiPiJUyZl0YmlxyZkgaGVzYWJsYXLEsW4gyZlsYXbJmSBvbHVubWFzxLEgdsmZIHlhIHNpbGlubcmZc2ksIGjJmW3Dp2luaW4gb25sYXLEsW4gcGFyb2xsYXLEsW7EsW4gc2lsaW5tyZlzaSBraW1pIMmZbcmZbGl5eWF0bGFyxLEgaWNyYSBldG3JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iMjM1NDgxMzk2MTYzODc3NjQyIj4iY2loYXpkYSBoZXNhYmxhciBpc3RpZmFkyZkgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSI3OTg0MjI3MTQ3NDAzMzQ2NDIyIj4iVMmZdGJpccmZIGF1dGVudGlmaWthc2l5YSB0b2tlbmzJmXJpIHNvcsSfdWxhcsSxbsSxIGfDtm5kyZlybcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjQ5NTEwMjc5NjQzNDg5NzQ3NzMiPiLFn8mZYsmZa8mZIGJhxJ9sYW50xLFsYXLEsW5hIGJheG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiJUyZl0YmlxyZkgbcO2dmN1ZCBvbGFuIHbJmSBxb8WfdWxhbiDFn8mZYsmZa8mZbMmZciBraW1pIHFvxZ91bG1hbGFyIGhhcXHEsW5kYSBtyZlsdW1hdMSxIGfDtnJtyZl5yZkgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSI4MDE4NzU4MTM2NDA0MzIzNjU4Ij4idGFtIMWfyZliyZlryZkgZ2lyacWfaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+IlTJmXRiaXHJmSDFn8mZYsmZa8mZIHNva2V0bMmZcmluaSB5YXJhdG1hxJ9hIHbJmSBmyZlyZGkgxZ/JmWLJmWvJmSBwcm90b2tvbGxhcsSxbsSxIGlzdGlmYWTJmSBldG3JmXnJmSBpbWthbiB2ZXJpci4gQnJhdXplciB2yZkgZGlnyZlyIHTJmXRiaXFsyZlyIGRhdGFuxLFuIGludGVybmV0yZkgw7Z0w7xyw7xsbcmZc2luaSB0yZltaW4gZWTJmW4gdsmZc2FpdGzJmXIgdmVyaXIsIG9uYSBnw7ZyyZkgZMmZIGRhdGFuxLFuIGludGVybmV0yZkgZ8O2bnLJmWRpbG3JmXNpIMO8w6fDvG4gYnUgaWNhesmZIHTJmWzJmWIgb2x1bm11ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MDU2NjAxNTk2NzU3NTE4OTYiPiLFn8mZYsmZa8mZIG5pemFtbGFyxLFuxLEgdsmZIHRyYWZpa2kgZMmZeWnFn2RpcmlyL3FhcsWfxLFzxLFuxLEgYWzEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTMzMzc5ODg4NjQxMjcxNDE5MyI+IlTJmXRiaXHJmSDFn8mZYsmZa8mZIHRyYWZpa2luaW4gcWFyxZ/EsXPEsW7EsSBhbG1hcSDDvMOnw7xuIMWfyZliyZlryZkgbml6YW1sYXLEsW7EsSBkyZl5acWfbcmZIGljYXrJmXNpIHZlcmlyLCBtyZlzyZlsyZluIHByb2tzaW5pIHbJmSB5YSBpc3TJmW5pbMmZbiBBUE4taW4gcG9ydHVudS4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIMWfyZliyZlryZkgcGFrZXRsyZlyaW5pIHNpemluIGJpbGdpbml6IG9sbWFkYW4gbW9uaXRvcmlucSBlZMmZLCB5w7ZubMmZbmRpcsmZIHbJmSB5YSByZWRha3TJmSBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9Ijk1ODg4NDI5MTQ1NDMyNzMwOSI+IsWfyZliyZlryZkgYmHEn2xhbnTEsXPEsW7EsSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VOZXR3b3JrU3RhdGUiIG1zZ2lkPSI2Nzg5MTIzOTEyNDc2NDE2MjE0Ij4iVMmZdGJpccmZIMWfyZliyZlryZkgdsmZeml5ecmZdGluaSBkyZl5acWfbcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iNTk1MjU4NDk2NDM3MzAxNzk2MCI+IlPJmXJoyZlkbGkgYmHEn2xhbnTEsW7EsSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjE1MjQ0NDEzNDQ0MTIzMTk3ODAiPiJUyZl0YmlxyZkgYmlybMmZxZ9pbG1pxZ8gxZ/JmWLJmWvJmSBiYcSfbGFudMSxc8SxbsSxbiBzdGF0dXN1bnUgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjE0MDA2NjYwMTI2NzE2NDg3NDEiPiJhcnhhZm9uIGRhdGEgaXN0aWZhZMmZc2kgYXlhcsSxbsSxIGTJmXlpxZ9pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjUzNDc3Mjk1Nzg0Njg3NDQzNzkiPiJUyZl0YmlxyZkgZm9uIHJlamltaSBuaXphbWxhcsSxbsSxIGTJmXlpxZ9tyZl5yZkgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTIwMjAxMjk0OTI0NzA0MDAxMSI+IldpLUZpIGJhxJ9sYW50xLFsYXLEsW5hIGJheG1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUwMDI3OTgwNzczODc4MDM3MjYiPiJUyZl0YmlxyZkgV2ktRmkgxZ/JmWLJmWvJmWzJmXJpIGhhcXHEsW5kYSBtyZlsdW1hdMSxIGfDtnJtyZl5yZkgaWNhesmZIHZlcmlyLCBtyZlzyZlsyZluLCBXaS1GaSBtw7Z2Y3VkbHXEn3UgdsmZIHFvxZ91bG11xZ8gV2ktRmkgY2loYXpsYXLEsW7EsW4gYWRsYXLEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjY1NTA2NDExODg3NDkxMjgwMzUiPiJXaS1GaSDFn8mZYsmZa8mZc2luyZkgcW/Fn3VsbWFxIHbJmSB5YSBheXLEsWxtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI3MTM3OTUwMjk3Mzg2MTI3NTMzIj4iVMmZdGJpccmZIFdpLUZpIMOnxLF4xLHFnyBuw7ZxdMmZc2luyZkgcW/Fn3VsbWFxIHbJmSBvbmRhbiBheXLEsWxtYXEgdsmZIGNpaGF6xLFuIFdpLUZpIMWfyZliyZlryZkgbml6YW1sYXLEsW7EsSBkyZl5acWfbcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgbXNnaWQ9IjEzNjgyNTM4NzE0ODMyNTQ3ODQiPiJXaS1GaSBNdWx0aWNhc3QgccmZYnVsdW5hIGljYXrJmSB2ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiJUyZl0YmlxyZkgV2ktRmkgxZ/JmWLJmWvJmWTJmSBzaXppbiBwbGFuxZ9ldGTJmW4gYmHFn3FhIGRpZ8mZciBtdWx0aWthc3QgYWRyZXNsyZlyyZkgecO2bmzJmW5kaXJpbG1pxZ8gcGFrZXRsyZlyaSBhbG1hcSBpY2F6yZlzaSB2ZXJpci4gQnUgcWV5cmktw6dveGFkcmVzbGkgcmVqaW1kyZluIGbJmXFsaSBvbGFyYXEgZGFoYSDDp294IGVuZXJqaSBpxZ9syZlkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MTk0OTcwNjAyNTM0OTkyNiI+IlTJmXRiaXHJmSBxcnVwIMO8bnZhbmxhciBpc3RpZmFkyZkgZXRtyZlrbMmZLCBXaS1GaSDFn8mZYsmZa8mZc2luZMmZIG9sYW4gYsO8dMO8biBjaWhhemxhcmEgZ8O2bmTJmXJpbG1pxZ8gcGFrZXRsyZlyaSBxyZlidWwgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIEJ1bmEgZGFoYSDDp294IGVuZXJqaSBzyZlyZiBvbHVudXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGhBZG1pbiIgbXNnaWQ9IjYwMDY5NjczNzM5MzU5MjY2NTkiPiJCbHVldG9vdGggYXlhcmxhcsSxbsSxIMmZbGTJmSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY5MjExNzc0NzE3NDg4ODIxMzciPiJUyZl0YmlxyZkgeWVybGkgQmx1ZXRvb3RoIHBsYW7Fn2V0aW5pbiBrb25maXF1cmFzaXlhc8SxbsSxIGfDtnJtyZl5yZkgdsmZIG3JmXNhZsmZZMmZbiBjaWhhemxhcsSxIHRhcG1hxJ9hIHbJmSBjw7x0bMmZbcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+IlTJmXRiaXHJmSBsb2thbCBCbHVldG9vdGggdGVsZWZvbnVudSBrb25maXF1csmZIGV0bcmZecmZIHbJmSB1emFxIGNpaGF6bGFyxLEga8mZxZ9mIGV0bcmZayB2yZkgb25sYXJhIHFvxZ91bG1hcSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI0MTk1OTA3MDEwNjEwMjA1NzAzIj4iV2lNQVhcJ2EgcW/Fn3VsIHbJmSBiYcSfbGFudMSxbsSxIGvJmXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNjM2MDEwMjg3NzI2MTk3ODg4NyI+IlTJmXRiaXHJmSBXaU1BWCBtw7Z2Y3VkbHXEn3UgdsmZIHFvxZ91bG11xZ8gV2lNQVggxZ/JmWLJmWvJmWzJmXJpbmkgdMmZeWluIGV0bcmZecmZIGljYXrJmSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpbWF4U3RhdGUiIG1zZ2lkPSIyNDA1MDQyMjY3MTMxNDk2NTc5Ij4iV2lNQVggdsmZeml5ecmZdGluaSBkyZl5acWfaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMTU2NDU2NTA0MDg0MjAxODA1Ij4iVMmZdGJpccmZIHBsYW7Fn2V0aSBXaU1BWCDFn8mZYsmZa8mZbMmZcmluyZkgcW/Fn21hcSB2yZkgb25sYXJkYW4gYXnEsXJtYXEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NzAyNTA0MzAwNDkyMzc5OCI+IlTJmXRiaXHJmSB0ZWxlZm9udSBXaU1BWCDFn8mZYsmZa8mZc2luyZkgcW/Fn21hxJ9hIHbJmSB5YSBXaU1BWCDFn8mZYsmZa8mZc2luZMmZbiBhecSxcm1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoIiBtc2dpZD0iNjEyNzc2OTMzNjMzOTI3NjgyOCI+IkJsdWV0b290aCBjaWhhemxhcsSxIGlsyZkgY8O8dGzJmW5kaXJtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDgwNzIyMTgxODUyNDM4NjI4Ij4iVMmZdGJpccmZIHllcmxpIEJsdWV0b290aCBwbGFuxZ9ldGluaW4ga29uZmlxdXJhc2l5YXPEsW7EsSBnw7ZybcmZecmZIHbJmSBjw7x0bMmZbm1pxZ8gY2loYXpsYXJsYSBiYcSfbGFudMSxbGFyIGV0bcmZecmZIHbJmSBxyZlidWwgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzIwNzEwNjMyNDQ1MjMxMjczOSI+IlTJmXRiaXHJmSBCbHVldG9vdGggdsmZIHlhIHRlbGVmb24ga29uZmlxdXJhc2l5YWxhcsSxbsSxIGfDtnJtyZl5yZkgdsmZIHFvxZ91bG11xZ8gY2loYXpsYXJsYSDJmWxhccmZIHF1cm1hxJ9hIHbJmSBxyZlidWwgZXRtyZl5yZkgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbmZjIiBtc2dpZD0iNDQyMzM1MTI3NDc1Nzg3Njk1MyI+Ik5lYXIgRmllbGQgQ29tbXVuaWNhdGlvblwnxLEga29udHJvbCBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiJUyZl0YmlxyZkgWWF4xLFuIE3JmXNhZsmZIEtvbW11bmlrYXNpeWFzxLEgKE5GQykgdGVxbMmZcmksIGthcnRsYXLEsSB2yZkgb3h1eXVjdWxhcsSxIGlsyZkgyZlsYXHJmSBxdXJtYcSfYSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSIzNTk4NDk2MzAxNDg2NDM5MjU4Ij4iRWtyYW4ga2lsaWRpbmkgZGVha3RpdiBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iNjAzNDIwMzA2NTA3NzEyMjk5MiI+IlTJmXRiaXHJmSBraWxpZCBhw6dhcsSxbsSxIHbJmSB0yZlobMO8a8mZc2l6bGlrIHBhcm9sdW51IGRlYWt0aXYgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIFFhbnVuaSBtaXNhbCBidWR1ciBraSwgdGVsZWZvbiB6yZluZyBxyZlidWwgZWTJmW4gemFtYW4ga2lsaWRpIGHDp8SxciB2yZkgesmZbmcgcXVydGFyYW5kYW4gc29ucmEga2lsaWRpIGJhxJ9sYXnEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iNjIwMTgxMDAwODIzMDUwMzA1MiI+InNpbnggYXlhcmxhcsSxbsSxIG94dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSIyNzA2NzQ1Njc0NTY5Njc4NjQ0Ij4iVMmZdGJpccmZIGhlc2FibGFyIMO8w6fDvG4gc2lueHJvbml6YXNpeWEgbml6YW1sYXLEsW7EsSBveHVtYSBpY2F6yZlzaSB2ZXJpci4gTcmZc8mZbMmZbiwgYnUgxZ7JmXhzbMmZciB0yZl0YmlxaW5pbiBzaW54cm9uaXrJmSBvbHVudWItb2x1bm1hZMSxxJ/EsW7EsSB0yZl5aW4gZWTJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9IjU0MDg2OTQ4NzU3OTM5NDUzMTQiPiJzaW54cm9uaXphc2l5YXlhIGRhdmFtIGVkaXIgdsmZIG9udSBzw7ZuZMO8csO8ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU3luY1NldHRpbmdzIiBtc2dpZD0iODk1NjI2MjU5MTMwNjM2OTg2OCI+IlTJmXRiaXHJmSBoZXNhYiDDvMOnw7xuIHNpbnhyb25pemFzaXlhIG5pemFtbGFyxLFuxLEgZMmZeWnFn23JmXnJmSBpY2F6yZkgdmVyaXIuIE3JmXPJmWzJmW4sIGJ1IGlzdGlmYWTJmcOnaSBoZXNhYmzEsSDFnsmZeHNsyZlyIHTJmXRiaXFpbmluIHNpbnhyb25pemFzaXlhc8SxbsSxIGJhxZ9sYW1hcSDDvMOnw7xuIGlzdGlmYWTJmSBlZGlsyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFN5bmNTdGF0cyIgbXNnaWQ9IjczOTY1Nzc0NTEzNjAyMDI0NDgiPiJzaW54cm9uaXphc2l5YSBzdGF0aXN0aWthc8SxbsSxIG94dW1hcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSIxNTEwMTQzNzYxNzU3NjA2MTU2Ij4iVMmZdGJpccmZIHN5bmMgdMmZZGJpcmzJmXJpbmluIHRhcml4w6fJmXNpIHbJmSBuyZkgccmZZMmZciBkYXRhbsSxbiBzaW54IG9sZHXEn3UgZGEgZGF4aWwgb2xtYXFsYSBiyZlyYWLJmXIsIGjJmXIgaGFuc8SxIGJpciBoZXNhYiDDvMOnw7xuIG9sYW4gc2lueCBzdGF0bGFyxLFuxLEgb3h1bWHEn2EgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNDc1NjYwOTYzNzA1MzM1MzMxOCI+ImFidW7JmSBvbHVubXXFnyB4yZliyZlybMmZcmkgb3h1eXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjU1NTcwNTg5MDc5MDYxNDQ1MDUiPiJUyZl0YmlxyZkgaGF6xLFyZGEgc2lueHJvbiBsZW50bMmZciBoYXFxxLFuZGEgyZl0cmFmbMSxIG3JmWx1bWF0IGFsbWFxIMO8w6fDvG4gaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjkwMTUyNDYzMjU0MDgyMDkyOTYiPiJhYnVuyZkgb2x1bm11xZ8geMmZYsmZcmzJmXJpIHlhesSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1dyaXRlIiBtc2dpZD0iNjkyODkzMDE4ODgyNjA4OTQxMyI+IlTJmXRiaXHJmSBjYXJpIHNpbnhyb25sYcWfbcSxxZ8gbGVudGzJmXJpbml6yZkgZMmZeWnFn2lrbGlrIGV0bcmZayBpbWthbsSxIHZlcmlyLiBayZlyyZlybGkgdMmZdGJpcWzJmXIgc2l4cm9ubGHFn23EscWfIGxlbnRsyZlyaW5pemkgZMmZeWnFn8mZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNDEwNzEwMTUyNTc0NjAzNTcxOCI+ImzDvMSfyZl0yZkgyZlsYXbJmSBldGRpeWluaXogxZ/JmXJ0bMmZcmkgb3h1bWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI2NTk2MTQ2MDAzMzg5MDQyNDMiPiJUyZl0YmlxyZkgaXN0aWZhZMmZw6dpbmluIGzDvMSfyZl0ZMmZIHNheGxhZMSxxJ/EsSBiw7x0w7xuIHPDtnpsyZlyaSwgYWRsYXLEsSB2yZkgZnJhemFsYXLEsSBveHVtYXEgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4iaXN0aWZhZMmZw6dpIGzDvMSfyZl0aW7JmSBzw7Z6bMmZciDJmWxhdsmZIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgxODUzODU3MTYyNTUwNjUyOTEiPiJUyZl0YmlxyZkgaXN0aWZhZMmZw6dpIGzDvMSfyZl0aW7JmSB5ZW5pIHPDtnpsyZlyIHlhem1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4icW9ydW5tdcWfIHlhZGRhxZ9hIGRheGlsIG9sbWHEn2EgY8mZaGQgZXRtyZlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODIzNTM0MTUxNTYwNTU1OTY3NyI+InFvcnVubXXFnyB5YWRkYcWfYSBkYXhpbCBvbG1hxJ9hIGPJmWhkIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY0MjQ3MzI5MjM0ODEzMjA3MiI+IlTJmXRiaXHJmSBnyZlsyZljyZlrIGNpaGF6bGFyZGEgyZlsw6dhdMSxbWzEsSBvbGFjYXEgVVNCIHlhZGRhxZ8gw7zDp8O8biBpY2F6yZkgdGVzdGkgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU5MTQ0MDI2ODQ2ODU4NDg4MjgiPiJUyZl0YmlxyZkgZ8mZbMmZY8mZayBjaWhhemxhcmRhIG3DtnZjdWQgb2xhY2FxIFNEIGthcnQgw7zDp8O8biBpY2F6yZluaSB0ZXN0IGV0bcmZayDDvMOnw7xuIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+IlVTQiB5YWRkYcWfxLFuxLF6xLFuIG3JmXptdW51bnUgZMmZeWnFn23JmWsgdsmZIHlhIHNpbG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODgwNTY5MzYzMDA1MDQ1ODc2MyI+IlNEIGthcnQga29udGVudGzJmXJpbmkgZMmZeWnFn2lyIHbJmSB5YSBzaWxpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNzU0MDYyOTk0NDU3MTA4ODgiPiJUyZl0YmlxyZkgVVNCIHlhZGRhxZ9hIHlhem1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDMzNzQxNzc5MDkzNjYzMjA5MCI+IlTJmXRiaXHJmSBTRCBrYXJ0YSB5YXptYSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1OTgzOTE5OTcwNjg3OTAxNSI+ImRheGlsaSBtZWRpYSB5YWRkYcWfxLEga29udGVudGluaSBkyZl5acWfaXIvc2lsaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxODkxNjA1OTc2OTg1MjkxODUiPiJUyZl0YmlxyZkgZGF4aWxpIG1lZGlhIHlhZGRhxZ9kYWvEsSBrb250ZW50aSByZWRha3TJmSBldG3JmWsgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3ODMxODU5ODQ0ODg0OTgyOSI+InPJmW7JmWQgeWFkZGHFn8SxbsSxIG5pemFtbGF5xLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg3MDQzMjMxNzY5MTQxMjE0ODQiPiJUyZl0YmlxyZkgc8mZbsmZZCB5YWRkYcWfxLFuxLEgaWRhcsmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iODE1MDYxMzgyMzkwMDQ2MDU3NiI+ImLDvHTDvG4gaXN0aWZhZMmZw6dpbMmZcmluIHhhcmljaSB5YWRkYcWfxLFuYSBkYXhpbCBvbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZEFjY2Vzc0FsbCIgbXNnaWQ9IjMyMTUyMDgzNTc0MTU4OTEzMjAiPiJUyZl0YmlxyZkgYsO8dMO8biBpc3RpZmFkyZnDp2lsyZlyIMO8w6fDvG4gb2xhbiB4YXJpY2kgeWFkZGHFn2EgZ2lyacWfIGlta2FuxLEgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTY1NjQ4NzI2NDgxOTY2OTgyNCI+ImtlxZ8gZmF5bCBzaXN0ZW1pbsmZIGdpcm3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTU3ODk2NzY0MjI2NTU1MDk1NSI+IlTJmXRiaXHJmSBrZcWfIGZheWwgc2lzdGVtaW5pIG94dW1hxJ9hIHbJmSB5YXptYcSfYSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2Vfc2lwIiBtc2dpZD0iNTk4Njk1MjM2Mjc5NTg3MDUwMiI+IsSwbnRlcm5ldCB6yZluZ2zJmXJpIGV0bcmZayB2yZkgeWEgccmZYnVsIGV0bcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZV9zaXAiIG1zZ2lkPSI0NzE3NjMyMDAwMDYyNjc0Mjk0Ij4iVMmZdGJpccmZIGludGVybmV0IHrJmW5nbMmZcmluaW4gZ8O2bmTJmXJpbG3JmXNpIHbJmSBxyZlidWwgZWRpbG3JmXNpIMO8w6fDvG4gU0lQIHNlcnZpc2luZMmZbiBpc3RpZmFkyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc4NjI1OTMyODM2MTE0OTMyMzIiPiJ0YXJpeGkgxZ/JmWLJmWvJmSBpc3RpZmFkyZlzaW5pIG94dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWROZXR3b3JrVXNhZ2VIaXN0b3J5IiBtc2dpZD0iNzY4OTA2MDc0OTgxOTEyNjQ3MiI+IlTJmXRiaXHJmSB4w7xzdXNpIMWfyZliyZlryZlsyZlyIHbJmSB0yZl0YmlxbMmZciDDvMOnw7xuIHRhcml4aSDFn8mZYsmZa8mZIGlzdGlmYWTJmXNpbmkgb3h1bWHEn2EgaWNhesmZIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9IjI1NjIwNTM1OTIzMzk4NTk5OTAiPiLFn8mZYsmZa8mZIHNpeWFzyZl0aW5pIGlkYXLJmSBldG3JmWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iNzUzNzU4Njc3MTU1OTM3MDY2OCI+IlTJmXRiaXHJmSDFn8mZYsmZa8mZIHFhbnVubGFyxLFuxLEgdsmZIHTJmXRiaXFpbiB4w7xzdXNpIHFheWRhbGFyxLFuxLEgaWRhcsmZIGV0bcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1MDg4MjE3MzA5MDg4NzI5NjUwIj4ixZ/JmWLJmWvJmSBpc3RpZmFkyZkgaGVzYWLEsW7EsSBkyZl5acWfbcmZayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTQ0MzQxMjg2Njc0NjE5ODEyMyI+IlTJmXRiaXHJmSDFn8mZYsmZa8mZIGlzdGlmYWTJmXNpbmluIHTJmXRiaXFsyZlyyZkgcWFyxZ/EsSBuaXphbWxhcsSxbsSxIHJlZGFrdMmZIGV0bcmZecmZIGljYXrJmSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZIGVkaWxtaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9IjM2NTg1MjcyMTQ5MTQ5NTk3NDkiPiJzb2tldCBpxZ9hcsmZbMmZcmluaSBkyZl5acWfaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9Ijc2NTU1Njg0MzM2OTYzNTY1NzgiPiJUyZl0YmlxyZkgYXJhxZ9kxLFybWEgw7zDp8O8biBzb2tldCBpxZ9hcsmZbMmZcmluaSBkyZl5acWfbcmZayBpbWthbsSxIHZlcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNzY3MzQxNjQ4Nzg3MzQzMjI2OCI+ImJpbGRpcmnFn2zJmXLJmSBkYXhpbCBvbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI0NTg0NTc3NDI2ODM0MzEzODciPiJUyZl0YmlxyZkgYmlsZGlyacWfbMmZcmkgyZlsZMmZIGV0bcmZecmZLCBzxLFuYW1hxJ9hIHbJmSB0yZltaXpsyZltyZl5yZkgaW1rYW4gdmVyaXIsIGJ1bmEgZGlnyZlyIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gdmVyaWxtacWfIGJpbGRpcmnFn2zJmXIgZMmZIGRheGlsZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9IjcwNTc3NjQ3NDIyMTE2NTY2NTQiPiJiaWxkaXJpxZ8gZGlubMmZbcmZIHhpZG3JmXRpbsmZIGJhxJ9sYW7EsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIiBtc2dpZD0iOTg1Njk3OTE4NTc2OTAyOTg2Ij4iU2FoaWJpbsmZIHnDvGtzyZlrIHPJmXZpeXnJmWxpIGJpbGRpcmnFnyBkaW5syZltyZkgc2VydmlzaSBpbMmZIMmZbGFxyZkgc2F4bGFtYcSfYSBpY2F6yZkgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIGhlw6cgdmF4dCBpc3TJmW5pbG3JmW3JmWxpZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iMzY5OTYwMDgzMzk3NTExNzQ3OCI+Im9wZXJhdG9yIHhpZG3JmXRsaSBrb25maXVyYXNpeWEgdMmZdGJpcWluyZkgbcO8cmFjacmZdCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iNDE1OTU0OTE1MjUyOTExMTkyMCI+IlNhaGliaW7JmSBvcGVyYXRvciB4aWRtyZl0bGkgdMmZdGJpcSBrb25maXF1cmFzaXlhc8SxbmEgIG3DvHJhY2nJmXQgaW1rYW7EsSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIMO8w6fDvG4gdMmZbMmZYiBvbHVubWFtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjgyMDYwNzc0NDc4Mzg5MDk1MTYiPiLFn8mZYsmZa8mZIMWfyZlyYWl0aSBoYXFxxLFuZGEgbcO8xZ9haGlkyZlsyZlyIMO8w6fDvG4gcXVsYXEgYXNtYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjY4OTkxMDIwNzU4MjUyNzIyMTEiPiJUyZl0YmlxyZkgxZ/JmWLJmWvJmSDFn8mZcmFpdGkgw7x6csmZIG3DvMWfYWhpZMmZbMmZciDDvMOnw7xuIHF1bGFxIGFzbWFxIGlta2FuxLEgdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGhlw6cgdmF4dCBsYXrEsW0gb2xtYW1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjQ0OTc0MjA3Mjg4NTc1ODU3OTEiPiJQYXJvbCBxYXlkYWxhcsSxbsSxIHTJmXlpbiBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19saW1pdFBhc3N3b3JkIiBtc2dpZD0iMzI1MjExNDIwMzkxOTUxMDM5NCI+IkVrcmFuIGtpbGlkaW5pIGHDp2FuIMWfaWZyyZlsyZlyaW4gdXp1bmx1xJ91bnUgdsmZIG9ubGFyZGFrxLEgaWNhesmZIHZlcmlsyZluIGnFn2FyyZlsyZlyyZkgbsmZemFyyZl0IGVkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dhdGNoTG9naW4iIG1zZ2lkPSI5MTQxMzA2NDY5NDIxOTk1MDMiPiJFa3JhbiBraWxpZGkgY8mZaGRsyZlyaW5pIG1vbml0b3JpbnEgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyMTU3MjkyOTQyMTUwNzAwNzIiPiJFa2FuIGtpbGlkaW5pIGHDp2Fya8mZbiBkYXhpbCBlZGlsbWnFnyB5YW5sxLHFnyBwYXJvbGxhcmEgYmF4xLFuIHbJmSDJmWfJmXIgaMmZZGRpbmTJmW4gw6dveCB5YW5sxLHFnyBwYXJvbGxhciBkYXhpbCBlZGlsaWJzyZksIHBsYW7Fn2V0aSBraWxpZGzJmXlpbiB2yZkgeWEgYsO8dMO8biBwbGFuxZ9ldCBkYXRhc8SxbsSxIHNpbGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MTIzMjMwOTE4NDY3NjEwNzMiPiJFa2FuIGtpbGlkaW5pIGHDp2Fya8mZbiBkYXhpbCBlZGlsbWnFnyB5YW5sxLHFnyBwYXJvbGxhcmEgYmF4xLFuIHbJmSDJmWfJmXIgaMmZZGRpbmTJmW4gw6dveCB5YW5sxLHFnyBwYXJvbGxhciBkYXhpbCBlZGlsaWJzyZksIHRlbGVmb251IGtpbGlkbMmZeWluIHbJmSB5YSBiw7x0w7xuIHRlbGVmb24gZGF0YXPEsW7EsSBzaWxpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjI2MjAwNzcxOTEyNDI2ODg5NTUiPiJFa3JhbiBraWxpZCBwYXJvbHVudSBkyZl5acWfaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSI2MDU5NjM5NjIzMDE5MDQ0NTgiPiJFa3JhbiBraWxpZGluaSBhw6dhbiDFn2lmcsmZbmkgZMmZeWnFn2RpcmluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9mb3JjZUxvY2siIG1zZ2lkPSIyMjc0MDg1Mzg0NzA0MjQ4NDMxIj4iRWtyYW7EsSBraWxpZGzJmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZm9yY2VMb2NrIiBtc2dpZD0iMTE0MTc5NzU4ODQwMzgyNzEzOCI+IkVrcmFuxLFuIG7JmSB2YXh0IHbJmSBuZWPJmSBraWxpZGzJmW5tyZlzaW7JmSBuyZl6YXLJmXQgZWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2lwZURhdGEiIG1zZ2lkPSIzOTEwNTQ1NDQ2NzU4NjM5NzEzIj4iQsO8dMO8biBtyZlsdW1hdGxhcsSxIHNpbGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMwNjE4NDA5NjA2Nzc1Njg3NiI+IlBsYW7Fn2V0aW4gZGF0YXPEsW7EsSB4yZliyZlyZGFybMSxcSBvbG1hZGFuLCB6YXZvZCBkYXRhIHPEsWbEsXJsYW1hc8SxIGlsyZkgc2lsaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUwOTY4OTU2MDQ1NzQxODgzOTEiPiJUZWxlZm9udW4gZGF0YXPEsW7EsSB4yZliyZlyZGFybMSxcSBvbG1hZGFuLCB6YXZvZCBkYXRhIHPEsWbEsXJsYW1hc8SxIGlsyZkgc2lsaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSIyNzg0ODI4MjkzNzQ3NzkxNDQ2Ij4iQ2loYXrEsW4gcWxvYmFsIHByb2tzaXNpbmkgYXlhcmxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSI2Mzg3NDk3NDY2NjYwMTU0OTMxIj4iU2l5YXPJmXQgYWt0aXYgb2xhcmvJmW4gY2loYXrEsW4gcWxvYmFsIHByb2tzaXNpbmkgaXN0aWZhZMmZIMO8w6fDvG4gcXVydW4uIFlhbG7EsXogaWxrIGNpaGF6IGFkbWluaSBlZmZla3RpdiBxbG9iYWwgcHJva3NpbmkgdMmZeWluIGVkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iODg1Mjc5MTUxODQ3MjU0MDU2Ij4iRWtyYW4ga2lsaWRpIMWfaWZyyZlzaW7JmSBzb24gemFtYW4gc2XDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSIxNzI5NzI1MjI2MzE0NjkxNTkxIj4iRWtyYW4ga2lsaWRpIHBhcm9sdW51biBuyZkgccmZZMmZciB0ZXotdGV6IGTJmXlpxZ9tyZlzaW5pIGtvbnRyb2wgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZW5jcnlwdGVkU3RvcmFnZSIgbXNnaWQ9Ijg5MDEzMjYxOTk5MDkxMzI5MTUiPiJZYWRkYcWfIMWfaWZyyZlsyZlubcmZc2luaSBheWFybGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iMjYzNzczMjExNTMyNTMxNjk5MiI+IlTJmXRiaXEgbcmZbHVtYXRsYXLEsW7EsW4gxZ9pZnLJmWzJmW5tyZlzaW5pIHTJmWzJmWIgZWRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUNhbWVyYSIgbXNnaWQ9IjYzOTUzMDEwMjMxNTIyOTc4MjYiPiJLYW1lcmFsYXLEsSBkZWthdGl2IGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSIyMzA2MzQ5MDQyODM0NzU0NTk3Ij4iQsO8dMO8biBjaWhheiBrYW1lcmFsYXLEsW7EsW4gaXN0aWZhZMmZc2luaSDJmW5nyZlsbMmZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjI2NjMyOTEwNDU0MjYzODgwMiI+IktsYXZpYXR1cmEga2lsaWRpbmTJmSBmdW5rc2l5YWxhcsSxIGRlYWt0aXYgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIzNDY3MDgyMjcyMTg2NTM0NjE0Ij4iS2xhdmlhdHVyYSBraWxpZGluZMmZIGLJmXppIGZ1bmtzaXlhbGFyxLFuIHFhcsWfxLFzxLFuxLEgYWzEsW4uIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBob25lVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI4OTAxMDk4MzM2NjU4NzEwMzU5Ij4ixo9zYXMgc8mZaGlmyZkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4Njk5MjM2NTA1MjcxMzY2MTUiPiJNb2JpbCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4OTc1NDQ2NTQyNDI4NzQ1NDMiPiLEsMWfIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTEwMzYwMTQzMzM4MjE1ODE1NSI+IsSwxZ8gRmFrc8SxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTczNTE3NzE0NDk0ODMyOTM3MCI+IkV2IEZha3PEsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwMzg3ODY3NDQ3NzIwNzM5NCI+IlBleWNlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE2NTA4MjQyNzUxNzc5MzE2MzciPiJEaWfJmXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI5MTkyNTE0ODA2OTc1ODk4OTYxIj4ixZ7JmXhzaSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImVtYWlsQWRkcmVzc1R5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iODA3Mzk5NDM1Mjk1NjEyOTEyNyI+IkFuYSBzyZloaWbJmSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjcwODQyMzczNTY2MDI2MjU2MDQiPiLEsMWfIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTExMjA0NDQxMDY1OTAxMTAyMyI+IkRpZ8mZciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIzNzQ5MTM5NTI4NzAxMTA2MTgiPiJGyZlyZGkiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwb3N0YWxBZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI2ODgwMjU3NjI2NzQwMDQ3Mjg2Ij4ixo9zYXMgc8mZaGlmyZkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NjI5MTUzOTU2MDQ1MTA5MjUxIj4ixLDFnyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ5NjY2MDQyNjQ1MDAzNDM0NjkiPiJEaWfJmXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0OTMyNjgyODQ3NTk1Mjk5MzY5Ij4iRMO8esmZbmzJmXlpbiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImltQWRkcmVzc1R5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iMTczODU4NTE5NDYwMTQ3NjY5NCI+IsaPc2FzIHPJmWhpZsmZIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM1OTY0NDU2NTY0NzM4MzcwOCI+IsSwxZ8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3ODY4NTQ5NDAxMDUzNjE1Njc3Ij4iRGlnyZlyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE0NTExODk0NDYzOTg2OTgwOSI+IkbJmXJkaSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yZ2FuaXphdGlvblR5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzU0NjMzNTYxMjE4OTExNTYxNSI+IsSwxZ8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0Mzc4MDc0MTI5MDQ5NTIwMzczIj4iRGlnyZlyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzQ1NTA0NzQ2ODU4Mzk2NTEwNCI+IkbJmXJkaSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImltUHJvdG9jb2xzIj4KKyAgICA8aXRlbSBtc2dpZD0iODU5NTI2MTM2MzUxODQ1OTU2NSI+IkFJTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjczOTA0NzM2MjgyNzU0OTA3MDAiPiJXaW5kb3dzIExpdmUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3ODgyODc3MTM0OTMxNDU4MjE3Ij4iWWFob28iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1MDM1Mzc2MzEzMjAwNTg1MjQyIj4iU2t5cGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3NTMyMzYzMTc4NDU5NDQ0OTQzIj4iUVEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNzEzNDQxMDM0Mjk5NjYwNzQ5Ij4iR29vZ2xlIFPDtmhiyZl0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjUwNjg1NzMxMjcxODYzMDgyMyI+IklDUSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE2NDg3OTc5MDM3ODUyNzkzNTMiPiJKYWJiZXIiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUN1c3RvbSIgbXNnaWQ9IjE2NDQ3MzgwNTkwNTMzNTU4MjAiPiLFnsmZeHNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlSG9tZSIgbXNnaWQ9IjI1NzA5MjM0NjMwMzM5ODU4ODciPiJFdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1vYmlsZSIgbXNnaWQ9IjY1MDE0NjM1NTc3NTQ3NTEwMzciPiJNb2JpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmsiIG1zZ2lkPSI4ODYzOTM5NjY3MDU5OTExNjMzIj4ixLDFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUZheFdvcmsiIG1zZ2lkPSIzNTE3NzkyMTYwMDA4ODkwOTEyIj4ixLDFnyBGYWtzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVGYXhIb21lIiBtc2dpZD0iMjA2NzI2NTk3MjMyMjk3MTQ2NyI+IkV2IEZha3PEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVBhZ2VyIiBtc2dpZD0iNzU4MjM1OTk1NTM5NDkyMTczMiI+IlBleWNlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU90aGVyIiBtc2dpZD0iMTU0NDQyNTg0Nzg2ODc2NTk5MCI+IkRpZ8mZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNhbGxiYWNrIiBtc2dpZD0iMjcxMjE3NTIwMzA2NTY3ODIwNiI+Ikdlcml5yZkgesmZbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDYXIiIG1zZ2lkPSI4NzM4MzYwNjg5NjE2NzE2OTgyIj4iQXZ0b21vYmlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ29tcGFueU1haW4iIG1zZ2lkPSI1NDA0MzQzNTY0NjE0Nzg5MTYiPiLFnmlya8mZdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUlzZG4iIG1zZ2lkPSI4MDIyNDUzMTkzMTcxMzcwMzM3Ij4iSVNETiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1haW4iIG1zZ2lkPSI2NzY2MTM3MDEwNjI4MzI2OTE2Ij4ixo9zYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVPdGhlckZheCIgbXNnaWQ9Ijg1ODc2NTcxNDUwNzI0NDY1NjUiPiJEaWfJmXIgZmFrcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVJhZGlvIiBtc2dpZD0iNDA5MzczODA3OTkwODY2NzUxMyI+IlJhZGlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlVGVsZXgiIG1zZ2lkPSIzMzY3ODc5OTUyNDc2MjUwNTEyIj4iVGVsZWtzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlVHR5VGRkIiBtc2dpZD0iODYwNjUxNDM3ODU4NTAwMDA0NCI+IlRUWSBUREQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrTW9iaWxlIiBtc2dpZD0iMTMxMTQyNjk4OTE4NDA2NTcwOSI+Ik1vYmlsIGnFnyB0ZWxlZm9udSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmtQYWdlciIgbXNnaWQ9IjY0OTkzODczMTIzMTE1NzA1NiI+IsSwxZ8gUGV5Y2VyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjU1OTY3NzI2MzYxMjg1NjI4ODQiPiJLw7ZtyZlrw6dpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW1zIiBtc2dpZD0iNzI1NDQ5MjI3NTUwMjc2ODk5MiI+Ik1NUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUN1c3RvbSIgbXNnaWQ9Ijc4Mzc1ODYxOTg0NTgwNzM0MDQiPiJGyZlyZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVCaXJ0aGRheSIgbXNnaWQ9IjI4MTMzNzk4NDQyMTEzOTA3NDAiPiJEb8SfdW0gZ8O8bsO8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQW5uaXZlcnNhcnkiIG1zZ2lkPSIzODc2Nzc5NzQ0NTE4Mjg0MDAwIj4ixLBsZMO2bsO8bcO8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlT3RoZXIiIG1zZ2lkPSI3Mzg4MTc4OTM5MDEwMTQzMDc3Ij4iRGlnyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlQ3VzdG9tIiBtc2dpZD0iODUyNTk2MDI1NzgwNDIxMzg0NiI+IkbJmXJkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUhvbWUiIG1zZ2lkPSI0NDkyMjcyMzYxNDA0MzM5MTkiPiLGj3NhcyBzyZloaWbJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZVdvcmsiIG1zZ2lkPSIzNTQ4MDU4MDU5NjAxMTQ5OTczIj4ixLDFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZU90aGVyIiBtc2dpZD0iMjkyMzAwODY5NTI3MjYzOTU0OSI+IkRpZ8mZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZU1vYmlsZSIgbXNnaWQ9IjExOTkxOTAwNTMyMTE2NjIwNSI+Ik1vYmlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg5MDMyMDY5MDMwNjA0Nzk5MDIiPiJGyZlyZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlSG9tZSIgbXNnaWQ9IjgxNjU3NTY5NzcxODQ0ODMwOTciPiLGj3NhcyBzyZloaWbJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVXb3JrIiBtc2dpZD0iNTI2ODE3Mjc3MjM4NzY5NDQ5NSI+IsSwxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlT3RoZXIiIG1zZ2lkPSIyNzI2MTExOTY2NjIzNTg0MzQxIj4iRGlnyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlQ3VzdG9tIiBtc2dpZD0iMjA3NDAyODc1NTUyNzgyNjA0NiI+IkbJmXJkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZUhvbWUiIG1zZ2lkPSI2MjQxMTgxMDMyOTU0MjYzODkyIj4iQW5hIHPJmWhpZsmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlV29yayIgbXNnaWQ9IjEzNzE0ODkyOTAyNDI0MzMwOTAiPiLEsMWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlT3RoZXIiIG1zZ2lkPSI1Mzc3MDA3NDk1NzM1OTE1NDc4Ij4iRGlnyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEN1c3RvbSIgbXNnaWQ9IjY5MTk0NTM4MzY2MTg3NDk5OTIiPiLFnsmZeHNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEFpbSIgbXNnaWQ9IjcwNTAzNjA2MTIzNjgzODM0MTciPiJBSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTXNuIiBtc2dpZD0iMTQ0NTU2NTQ1NDIwNzY5NDQyIj4iV2luZG93cyBMaXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFlhaG9vIiBtc2dpZD0iODI3MTQzOTQwODQ2OTAyMTI3MyI+IllhaG9vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFNreXBlIiBtc2dpZD0iOTAxOTI5Njc0NDYyMjgzMjk1MSI+IlNreXBlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFFxIiBtc2dpZD0iODg4NzQ4NDM3OTQ5NDExMTg4NCI+IlFRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEdvb2dsZVRhbGsiIG1zZ2lkPSI0OTM5MDIzMjExNDAyNzczMDQiPiJHw7Zyw7zFn2zJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSWNxIiBtc2dpZD0iMTU3NDg3MDQzMzYwNjUxNzMxNSI+IklDUSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xKYWJiZXIiIG1zZ2lkPSIyMjc5OTE3NjMwODc1NzcxNzIyIj4iSmFiYmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE5ldE1lZXRpbmciIG1zZ2lkPSI4Mjg3NjI1NjU1OTg2ODI3OTcxIj4iTmV0TWVldGluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVXb3JrIiBtc2dpZD0iMjkyNjg4NzA1MDUzNjM4NzIiPiLEsMWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZU90aGVyIiBtc2dpZD0iMzk1MTc4MTEzMTU3MDEyNDA4MiI+IkRpZ8mZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVDdXN0b20iIG1zZ2lkPSIyMjU1MjM0MTUzNzIwODgzMjIiPiJGyZlyZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVDdXN0b20iIG1zZ2lkPSIzNTQyNDAzNjc5ODI3Mjk3MzAwIj4ixZ7JmXhzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjYyNzQzMzQ4MjUxOTUzNzkwNzYiPiJLw7ZtyZlrw6dpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQnJvdGhlciIgbXNnaWQ9Ijg3NTc5MTM1MDY3ODQwNjc3MTMiPiJRYXJkYcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ2hpbGQiIG1zZ2lkPSIxODkwNzQ2Mjc3Mjc2ODgxNjI2Ij4iVcWfYXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVEb21lc3RpY1BhcnRuZXIiIG1zZ2lkPSI2OTA0ODA3MTEyMTIxMTIyMTMzIj4iRXYgeW9sZGHFn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRmF0aGVyIiBtc2dpZD0iNTIyODAzNDY4NzA4MjA1MDcyNSI+IkF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUZyaWVuZCIgbXNnaWQ9IjczMTMxMDY3NjI0ODMzOTEyNjIiPiJEb3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlTWFuYWdlciIgbXNnaWQ9IjYzNjU2Nzc4NjE2MTAxMzc4OTUiPiJNw7xkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNb3RoZXIiIG1zZ2lkPSI0NTc4NTcxMzUyOTYyNzU4MzA0Ij4iQW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFyZW50IiBtc2dpZD0iNDc1NTYzNTU2NzU2MjkyNTIyNiI+IlZhbGlkZXluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFydG5lciIgbXNnaWQ9IjcyNjY0OTAyODUxMjAyNjI3ODEiPiJPcnRhcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVJlZmVycmVkQnkiIG1zZ2lkPSIxMDE1NzMwNTk4NDQxMzU1MjQiPiJEyZl2yZl0IGVkyZluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUmVsYXRpdmUiIG1zZ2lkPSIxNzk5ODE5OTMwMDg1NjEwMjcxIj4iUW9odW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTaXN0ZXIiIG1zZ2lkPSIxNzM1OTgzNTU0NDc5MDc2NDgxIj4iQmFjxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTcG91c2UiIG1zZ2lkPSIzOTQxMzY5Mzk0Mjg2OTgxMTciPiJIyZl5YXQgeW9sZGHFn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVDdXN0b20iIG1zZ2lkPSIyNDczNTgwNTkzMTExNTkwOTQ1Ij4iRsmZcmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IsaPc2FzIHPJmWhpZsmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IsSwxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IkRpZ8mZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlDEsE4ga29kdSBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIHbJmSB5ZW5pIFDEsE4ga29kIGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyBrb2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IlllbmkgUElOIGtvZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLFnmlmcsmZIGRheGlsIGV0bcmZayDDvMOnw7xuIHRveHVudW4iPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gcGFyb2wgeWF6xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIFBJTiBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iWWFubMSxxZ8gUElOIGtvZHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBNZW55dSwgc29ucmEgMCBiYXPEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxfZGlhbG9nX251bWJlcl9mb3JfZGlzcGxheSIgbXNnaWQ9IjY5NjE5MjEwMzE5NTA5MDk3MCI+IlTJmWNpbGkgbsO2bXLJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODk2MzgzOTI0MjU2NTY1MzE5MiI+IlhpZG3JmXQgeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2NyZWVuX2xvY2tlZCIgbXNnaWQ9IjcyODg0NDMwNzQ4MDY4MzI5MDQiPiJFa3JhbiBraWxpZGzJmW5pYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZW5hYmxlZCIgbXNnaWQ9IjQ2MTU0MDUxNjE0MTI2MDQ5Ij4iVMmZY2lsaSB6yZluZyBraWxpZGluaSBhw6dtYXEgdsmZIHlhIHllcmzJmcWfZGlybcmZayDDvMOnw7xuIE1lbnl1IGTDvHltyZlzaW7JmSBiYXPEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iNjg2MjYwMDI4Nzk3MTU4MzY0Ij4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIE1lbnl1IGTDvHltyZlzaW7JmSBiYXPEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9Ijc0Nzg3MDMyNTQ5NjQ4MTAzMDIiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gbW9kZWwgw6fJmWtpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZW1lcmdlbmN5X2NhbGwiIG1zZ2lkPSI1MzQ3NjMzNzg0NDAxMjg1MjI1Ij4iVMmZY2lsaSB6yZluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcmV0dXJuX3RvX2NhbGwiIG1zZ2lkPSI1MjQ0MjU5Nzg1NTAwMDQwMDIxIj4iWsmZbmfJmSBxYXnEsXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fY29ycmVjdCIgbXNnaWQ9IjkwMzkwMDg2NTAzNjIyNjEyMzciPiJEw7x6ZMO8ciEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fd3JvbmciIG1zZ2lkPSI0MzE3OTU1MDE0OTQ4MTA4Nzk0Ij4iQmlyIGTJmSBjyZloZCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXNzd29yZF93cm9uZyIgbXNnaWQ9IjU3Mzc4MTUzOTMyNTMxNjUzMDEiPiJCaXIgZGFoYSBjyZloZCBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiJTaWbJmXQga2lsaWRpIGPJmWhkbMmZcmluaXogYml0ZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MDU3NzYyODI4MzU1NTcyMzE1Ij4iQmF0YXJleWEgecSxxJ/EsWzEsXIsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiJEb2x1YiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYmF0dGVyeV9zaG9ydCIgbXNnaWQ9IjQ0NzcyNjQ4NDkzODY4NTAyNjYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9sb3dfYmF0dGVyeSIgbXNnaWQ9IjE0ODI4NzM5ODE5MTkyNDk3NDAiPiJFbGVrdHJpa8mZIHFvxZ91bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk5NDM5Mjc3ODE5MjE1Mzk5Ij4iU0lNIGthcnQgeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUxNjU5MTk2MDk1NzkxNDc0Ij4iUGxhbsWfZXRkyZkgU0lNIGthcnQgeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODY5MjA1ODU2OTUxNjkwNzgiPiJUZWxlZm9uZGEgU8SwTSBrYXJ0IHlveGR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUzNzI3ODcxMzgwMjMyNzI2MTUiPiJTxLBNIGthcnQgZGF4aWwgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IlPEsE0ga2FydCB5b3hkdXIgdsmZIHlhIG94dW5hIGJpbGlubWlyLiBTxLBNIGthcnQgZGF4aWwgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTYxNDk2NjUxMzg5MTYxODQiPiJZYXJhcnPEsXogU0lNIGthcnQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjkxMDkwNDY0MzQzMzE1MTM3MSI+IlNpemluIFPEsE0ga2FydMSxbsSxeiBkYWltaSBvbGFyYXEgZGVha3RpdmzJmcWfaWIuXG4gQmHFn3FhIFPEsE0ga2FydCDDvMOnw7xuIHNpbXNpeiB4aWRtyZl0IHByb3ZheWRlcmluaXrJmSBtw7xyYWNpyZl0IGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwMTU5NDkwNTE1Mjc0Njg4NiI+IsaPdnbJmWxraSB0cmVrIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI2MDg5Mjk3NjUwNDgxMjkyMzYzIj4iTsO2dmLJmXRpIHRyZWsgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU5MDg4Nzg2NzgwMTI4MDAxIj4iUGF1emEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU4ODg0MjI5MzgzNTEwMTk0MjYiPiJPeHV0bWEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1NjIzMTgzNzg3NjY5ODc2MDEiPiJEYXlhbmTEsXJtYSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbHNfb25seSIgbXNnaWQ9IjY3MzM5NzgzMDQzODYzNjU0MDciPiJZYWxuxLF6IHTJmWNpbGkgesmZbmdsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMTQzMzg5MjI0OTg2MDI4NTAxIj4ixZ7JmWLJmWvJmSBraWxpZGxpZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNzQ0MTc5NzMzOTk3NjIzMCI+IlNJTSBrYXJ0IFBVSyBpbMmZIGtpbGlkbMmZbmliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iODEyNzkxNjI1NTI0NTE4MTA2MyI+IsSwc3RpZmFkyZnDp2kgVMmZbGltYXRsYXLEsW5hIGJheMSxbiB2yZkgeWEgTcO8xZ90yZlyaSBYaWRtyZl0bMmZcmluyZkgbcO8cmFjacmZdCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iODA2NjY2MDEyOTIwNjAwMTAzOSI+IlNJTSBrYXJ0IGtpbGlkbMmZbmliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjU5NTMyMzIxNDA1Mjg4MTI2NCI+IlPEsE0ga2FydMSxbiBraWxpZGkgYcOnxLFsxLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2NDgxNjIzODMwMzQ0MTA3MjIyIj4iU2l6IGtpbGlkIG1vZGVsaW5pIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyDDp8mZa2Rpbml6LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgacOnaW5kyZkgeWVuaWTJmW4gc8SxbmF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iMjcyNTk3MzI4NjIzOTM0NDU1NSI+IsWeaWZyyZluaXppIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldGRpbml6LlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+IlNpeiBQSU4gbsO2bXLJmW5pemkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIGRheGlsIGV0ZGluaXouIFxuIFxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgacOnaW5kyZkgdMmZa3JhciBzxLFuYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+IlNpeiBraWxpZGkgYcOnbWFxIMO8w6fDvG4gxZ9hYmxvbnUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHPJmWh2IMOnyZlrZGluaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGRhaGEgdcSfdXJzdXogY8mZaGRkyZluIHNvbnJhIHBsYW7Fn2V0aW4ga2lsaWRpbmkgR29vZ2xlIGhlc2FixLFuxLF6YSBkYXhpbCBvbG1hcWxhIGHDp21hxJ/EsW7EsXogaXN0yZluaWzJmWPJmWsuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSBiaXIgZGFoYSB5b3hsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI1OTAyMjc1NTk3NjM3NjI3NTEiPiJTaXoga2lsaWRpIGHDp21hcSDDvMOnw7xuIMWfYWJsb251IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBzyZlodiDDp8mZa2Rpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkYWhhIHXEn3Vyc3V6IGPJmWhkZMmZbiBzb25yYSBwbGFuxZ9ldGluIGtpbGlkaW5pIEdvb2dsZSBoZXNhYsSxbsSxemEgZGF4aWwgb2xtYXFsYSBhw6dtYcSfxLFuxLF6IHTJmWzJmWIgb2x1bmFjYXEuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSBiaXIgZGFoYSB5b3hsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxMjgxMDYzOTk3NDU3NTU2MDQiPiJTaXogcGxhbsWfZXQga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHXEn3Vyc3V6IGPJmWhkIGV0bWlzaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZMmZZsmZIGTJmSB1xJ91cnN1eiBjyZloZCBldHPJmW5peiwgcGxhbsWfZXQgZmFicmlrIGF5YXJsYXLEsW5hIHPEsWbEsXJsYW5hY2FxIHbJmSBiw7x0w7xuIG3JmWx1bWF0bGFyxLFuxLF6IGl0yZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODYwMzU2NTE0MjE1NjgyNjU2NSI+IlNpeiB0ZWxlZm9uIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgdcSfdXJzdXogY8mZaGQgZXRzyZluaXosIHRlbGVmb24gemF2b2QgYXlhcmxhcsSxbmEgc8SxZsSxcmxhbmFjYXEgdsmZIGLDvHTDvG4gbcmZbHVtYXRsYXLEsW7EsXogaXTJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjgwODczNTE2NDkzOTM0MzY1Ij4iU2l6IHBsYW7Fn2V0aW4ga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHlhbmzEscWfIGPJmWhkIGV0bWlzaW5pei4gUGxhbsWfZXQgYXJ0xLFxIGRlZm9sdCB6YXZvZCBoYWzEsW5hIHPEsWbEsXJsYW5hY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDI1NTA0NzIxNzY0OTIyMjQ2Ij4iU2l6IHRlbGVmb251biBraWxpZGluaSBhw6dtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHPJmWh2IGPJmWhkIGV0ZGluaXouIFRlbGVmb251bnV6IGluZGkgemF2b2Qgbml6YW1sYXLEsW5hIHllbmlsyZluyZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYyNTE0ODAzNDMzOTQzODk2NjUiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgYmlyIGRhaGEgY8mZaGQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iMjYyNjk5OTQ0OTYxMDY5NTkzMCI+IsWeYWJsb251IHVudXRkdW51ej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9mb3Jnb3RfcGF0dGVybiIgbXNnaWQ9IjI1ODg1MjE1MDExNjYwMzI3NDciPiJIZXNhYiBraWxpZCBhw6dtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iMjc1MTM2ODYwNTI4NzI4ODgwOCI+IkjJmWRkaW5kyZluIMOnb3ggY8mZaGQgZWRpbGRpISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gR29vZ2xlIGhlc2FixLFuxLF6IGlsyZkgZGF4aWwgb2x1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iODg0Njg4MTQyNDEwNjQ4NDQ0NyI+IsSwc3RpZmFkyZnDp2kgYWTEsSAoZS1wb8OndCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iNTk1ODAyODM4Mzk1NDczODUyOCI+IsWeaWZyyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNzEzMDg5MzY5NDc5NTc4NjMwMCI+IkRheGlsIG9sdW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iMTM2NDA1MTQ3MzM0NzQ4NTkwOCI+IllhbmzEscWfIGlzdGlmYWTJmcOnaSBhZMSxIHbJmSBwYXJvbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSIxNjk2OTI0NzYzNjkwMzc5MDczIj4ixLBzdGlmYWTJmcOnaSBhZMSxbsSxesSxIHbJmSB5YSBwYXJvbHVudXp1IHVudXRtdXN1bnV6P1xuICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiBsaW5raW7JmSBkYXhpbCBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iNzExNDYyNzM1MTI4NjkzMzg2NyI+IllveGxhbsSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdW5sb2NrX2xhYmVsIiBtc2dpZD0iNzM3NDQwNDgzMjIwNjY3MDU0Ij4iS2lsaWRpIGHDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4iU8mZcyBhw6fEsXFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zb3VuZF9vZmZfbGFiZWwiIG1zZ2lkPSI5OTY4MjI4MjUxNTQzMTkwMjYiPiJTyZlzIHPDtm7DvGzDvGTDvHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX3N0YXJ0IiBtc2dpZD0iMzk0MTA0NTUwMjkzMzE0Mjg0NyI+Ik1vZGVsIGJhxZ9sYW5kxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NsZWFyZWQiIG1zZ2lkPSI1NTgzNDc5NzIxMDAxNjM5NTc5Ij4iTW9kZWwgdMmZbWl6bMmZbmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jZWxsX2FkZGVkIiBtc2dpZD0iNjc1NjAzMTIwODM1OTI5MjQ4NyI+IlhhbmEgyZlsYXbJmSBlZGlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2RldGVjdGVkIiBtc2dpZD0iNDk4ODczMDg5NTU1NDA1NzA1OCI+Ik1vZGVsIHRhbWFtbGFuZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiBXaWRnZXQgJTIkZCBvZiAlMyRkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiJXaWRnZXQgyZlsYXbJmSBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4iQm/FnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4iS2lsaWRpIGHDp21hIHNhaMmZc2kgZ2VuacWfbMmZbmRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IktpbGlkaSBhw6dtYSBzYWjJmXNpIMOnw7ZrZMO8LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHZpZGNldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4ixLBzdGlmYWTJmcOnaSBzZWxla3RvcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJTdGF0dXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiJLYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4iTWVkaWEga29udHJvbGxhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJZZW5pZMmZbiBzxLFyYWxhbWEgdmlkY2V0aSBiYcWfbGFkxLFsZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IlZpZGNldGluIHTJmWtyYXIgc2lmYXJpxZ9pIHNvbmEgw6dhdGTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IlZpZGNldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBzaWxpbmRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IktpbGlkaSBhw6dtYSBzYWjJmXNpbmkgZ2VuacWfbMmZbmRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiJTw7xyw7zFn2TDvHJtyZkga2lsaWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4iS2lsZCBhw6dtYSBtb2RlbGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiJTaWbJmXQgS2lsaWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+IlBpbiBraWxpZCBhw6dtYXPEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLFnmlmcsmZIGtpbGlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiJNb2RlbCBzYWjJmXNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiJTw7xyw7zFn2TDvHJtyZkgc2FoyZlzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2NoYXJhY3RlciIgbXNnaWQ9IjczMzY0NzA1MzUzODUwMDk1MjMiPiJzaW12b2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF93b3JkIiBtc2dpZD0iNzA3NTU3MDMyODM3NDkxODY2MCI+InPDtnoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF9saW5rIiBtc2dpZD0iNTgxNTUwODg4MDc4MjQ4ODI2NyI+ImxpbmsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF9saW5lIiBtc2dpZD0iNTc2NDI2NzIzNTAyNjEyMDg4OCI+InjJmXR0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9hbXBtIiBtc2dpZD0iNDU4NDMzODA4MzUyOTM1NTk4MiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IkFNUE0iPiVQPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfY2FwX2FtcG0iIG1zZ2lkPSIyMDgzNDY1OTkyOTQwNDQ0MzY2Ij4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JXA8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3RfZmFpbGVkIiBtc2dpZD0iNTQxMDI3MDMyOTExNDIxMjA0MSI+Ilphdm9kIHRlc3RpIGFsxLFubWFkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub3Rfc3lzdGVtIiBtc2dpZD0iNDQzNTIwMTY1Njc2NzI3NjcyMyI+IkJ1IEZBQ1RPUllfVEVTVCBmyZlhbGl5ecmZdGkgeWFsbsSxemNhL3Npc3RlbWTJmS90yZl0YmlxZMmZIHF1cmHFn2TEsXLEsWxtxLHFnyBwYWtldGzJmXIgw7zDp8O8biBkyZlzdMmZa2zJmW5pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub19hY3Rpb24iIG1zZ2lkPSI4NzI5OTE4NzQ3OTk5OTg1NjEiPiJGQUNUT1JZX1RFU1QgyZltyZlsaXl5YXTEsW7EsSB0yZlzZGlxbMmZecmZbiBoZcOnIGJpciBwYWtldCB0YXDEsWxtYWTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9yZWJvb3QiIG1zZ2lkPSI2MzIwMTY4MjAzMDUwNzkxNjQzIj4iWWVuaWTJmW4gecO8a2zJmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjE5ODc0ODM5Nzc4MzQ2MDM4NzIiPiJcIjx4bGlmZjpnIGlkPSJUSVRMRSI+JXM8L3hsaWZmOmc+XCJkYWvEsSBzyZloaWbJmWTJmSBkZXlpbGlyOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNjk2MTkwMzIxMzcyOTY2NzU3MyI+IkphdmFTY3JpcHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZF90aXRsZSIgbXNnaWQ9IjI2MTkzNzY1NTU1MjUxMTY1OTMiPiJOYXZpcWFzaXlhbsSxIFTJmXNkaXEgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3Bvc2l0aXZlX2J1dHRvbiIgbXNnaWQ9IjMxMTI3NTIwMTA2MDA0ODQxMzAiPiJCdSBTyZloaWbJmW5pIFTJmXJrIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZF9uZWdhdGl2ZV9idXR0b24iIG1zZ2lkPSI1NjE0ODYxMjkzMDI2MDk5NzE1Ij4iQnUgc8mZaGlmyZlkyZkgcWFsxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWQiIG1zZ2lkPSIzNDY4ODE2MzU3MDk1Mzc4NTkwIj4iPHhsaWZmOmcgaWQ9Ik1FU1NBR0UiPiVzPC94bGlmZjpnPlxuXG5CdSBzyZloaWbJmWTJmW4ga8mZbmFyYSBuYXZpcWFzaXlhIGV0bcmZayBpc3TJmWRpeWluaXrJmSDJmW1pbnNpbml6IG1pPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbGFiZWwiIG1zZ2lkPSI2ODYwMjYxNzU4NjY1ODI1MDY5Ij4iVMmZc2RpcWzJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvdWJsZV90YXBfdG9hc3QiIG1zZ2lkPSI0NTk1MDQ2NTE1NDAwMjY4ODgxIj4iTcmZc2zJmWjJmXQ6IELDtnnDvHRtyZlrIHbJmSBracOnaWx0bcmZayDDvMOnw7xuIGlraSBkyZlmyZkgdMSxa2xhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF90aGlzX2Zvcm0iIG1zZ2lkPSI0NjE2NzU4ODQxMTU3ODE2Njc2Ij4iQXZ0b2RvbGR1cm1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2V0dXBfYXV0b2ZpbGwiIG1zZ2lkPSI3MTAzNDk1MDcwMTgwNTkwODE0Ij4iQXZ0b0RvbGR1cm1hbsSxIGF5YXJsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3NfbmFtZV9zZXBhcmF0b3IiIG1zZ2lkPSI2MzUwMTQ1MTU0Nzc5NzA2NzcyIj4iICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9uYW1lX2Zvcm1hdCIgbXNnaWQ9IjMyNjgwNDEwNTQ4OTkyMTQ5NDUiPiIkMSQyJDMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfc2VwYXJhdG9yIiBtc2dpZD0iNzQ4MzMwNzg5MzE3MDMyNDEyOSI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X2Zvcm1hdCIgbXNnaWQ9IjQ4NzQ0NTk0NTU3ODY4MjczNDQiPiIkMSQyJDMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcm92aW5jZSIgbXNnaWQ9IjIyMzE4MDY1NTM4NjM0MjIzMDAiPiJWaWxhecmZdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3Bvc3RhbF9jb2RlIiBtc2dpZD0iNDY5NjQzMDQwNzY4OTM3NzEwOCI+IlBvw6d0IGtvZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9zdGF0ZSIgbXNnaWQ9IjY5ODg4OTQxOTU1MjAwNDQ2MTMiPiJEw7Z2bMmZdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ppcF9jb2RlIiBtc2dpZD0iODY5NzU0NDU5MjYyNzMyMjk0NiI+IlBvw6d0IGluZGVrc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9jb3VudHkiIG1zZ2lkPSIyMzcwNzM3NzEwMjAzNjI4OTEiPiLDlmxryZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9pc2xhbmQiIG1zZ2lkPSI0MDIwMTAwODc1OTg0NjY3MDI1Ij4iQWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZGlzdHJpY3QiIG1zZ2lkPSI4NDAwNzM1MDczMzkyMjY3NjcyIj4iU2FoyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kZXBhcnRtZW50IiBtc2dpZD0iNTM0MzI3OTQ2MjU2NDQ1MzMwOSI+IkRlcGFydGFtZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcHJlZmVjdHVyZSIgbXNnaWQ9IjIwMjg0OTk0ODUwNjU4MDA0MTkiPiJQcmVmZWt0dXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcGFyaXNoIiBtc2dpZD0iODIwMjIwNjEwNTQ2ODgyMDA1NyI+IlBhcmnFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FyZWEiIG1zZ2lkPSIzNTQ3NDA5MDUwODg5OTUyNDIzIj4iU2FoyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9lbWlyYXRlIiBtc2dpZD0iMjg5Mzg4MDk3ODgzNTY5ODgxOCI+IsaPbWlybGlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3NzUyNjU3NzU0MDUxMDY5ODMiPiJWZWIgyZlsZsmZY2lubMmZcmluaXppIHbJmSB0YXJpeMOnyZlsyZlyaW5pemkgb3h1bWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4iVMmZdGJpccmZIEJyYXV6ZXJpbiBkYXhpbCBvbGR1xJ91IGLDvHTDvG4gbGlua2zJmXJpIHbJmSBiw7x0w7xuIEJyYXV6ZXIgyZlsZsmZY2lubMmZcmluaSBveHVtYXEgaW1rYW7EsSB2ZXJpci4gUWV5ZDogYnUgaWNhesmZIHZlYiBicmF1emVyIGlta2FubGFyxLEgb2xhbiDDvMOnw7xuY8O8IHTJmXLJmWYgYnJhenVlcmzJmXJpIHbJmSBkaWfJmXIgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiB5ZXJpbsmZIHlldGlyaWzJmSBiaWxtyZl6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzcxNDc4NTE2NTI3MzMxNDQ5MCI+InZlYiDJmWxmyZljaW5syZlyaSB2yZkgdGFyaXjDp8mZc2kgeWF6bWFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2ODI1NTI3NDY5MTQ1NzYwOTIyIj4iVMmZdGJpccmZIHBsYW7Fn2V0aW5pemTJmWtpIGJyYXV6ZXIgdGFyaXhpbmkgdsmZIMmZbGbJmWNpbmzJmXJpIHJlZGFrdMmZIGV0bcmZayBpY2F6yZlzaSB2ZXJpci4gQnUgdMmZdGJpesmZIGJyYXV6ZXIgbcmZbHVtYXRsYXLEsW7EsSBzaWxtyZlrIHbJmSB5YSByZWRha3TJmSBldG3JmWsgaW1rYW7EsSB2ZXLJmSBiaWzJmXIuIFFleWQ6IEJ1IGljYXrJmSAzLWPDvCBwYXJ0aXlhIGJyYXV6ZXJsyZlyyZkgdsmZIHlhIHZlYiBicmF1emluZyB4w7xzdXNpeXnJmXRsaSBkaWfJmXIgdMmZdGJpcWzJmXLJmSDFn2FtaWwgb2x1bm1heWEgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0OTczODk1MzEwMTQxODU1MDkiPiJUyZl0YmlxyZkgQnJhdXplciB0YXJpeMOnyZlzaSB2yZkgdGVsZWZvbnVudXpkYSBzYXhsYW7EsWxhbiDJmWxmyZljaW5syZlyyZkgZMmZeWnFn2lrbGlrIGV0bcmZayBpbWthbsSxIHZlcmlyLiBCdW51bmxhIHTJmXRiaXFsyZkgQnJhdXplciBkYXRhbsSxesSxIHNpbMmZIHbJmSB5YSBkyZl5acWfZGlyyZkgYmlsyZlyLiBRZXlkOiBidSBpY2F6yZkgdmViIGJyYXV6ZXIgaW1rYW5sYXLEsSBvbGFuIMO8w6fDvG5jw7wgdMmZcsmZZiBicmF6dWVybMmZcmkgdsmZIGRpZ8mZciB0yZl0YmlxbMmZciB0yZlyyZlmaW5kyZluIHllcmluyZkgeWV0aXJpbMmZIGJpbG3JmXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbGFybSIgbXNnaWQ9IjEzNzkyOTQ1NTYzNjIwOTE4MTQiPiJzaXFuYWwgcXVydXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbGFybSIgbXNnaWQ9IjMxNjM5MjAzOTE1NzQ3Mzg0OCI+IlTJmXRiaXHJmSBxdXJhxZ9kxLFybG3EscWfIHrJmW5nbGkgc2FhdGEgYWxhcm0gYXlhcmxhbWHEn2EgaW1rYW4gdmVyaXIuIELJmXppIHrJmW5nbGkgc2FhdCB0yZl0YmlxbMmZcmkgYnUgw7Z6yZlsbGl5aSBkyZlzdMmZa2zJmW3JmXnJmSBiaWzJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hZGRWb2ljZW1haWwiIG1zZ2lkPSI1NTI1NjYwMDI2MDkwOTU5MDQ0Ij4iU8mZc2xpIHBvw6d0IMmZbGF2yZkgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hZGRWb2ljZW1haWwiIG1zZ2lkPSI2NjA0NTA4NjUxNDI4MjUyNDM3Ij4iVMmZdGJpccmZIHPJmXNsaSBwb8OndCBxdXR1bnV6YSBtZXNhaiDJmWxhdsmZIGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iNTk2MjIyNDE1ODk1NTI3MzkzMiI+IkJyYXV6ZXJpbiBnZW9sb2thc2l5YSBpY2F6yZlsyZlyaW5pIGTJmXlpxZ9pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjEwODM3NDMyMzQ1MjI2Mzg3NDciPiJUyZl0YmlxyZkgQnJhdXplcmluIGdlb2xva2FzaXlhIGljYXrJmWzJmXJpbmkgZMmZeWnFn23JmXnJmSBpbWthbiB2ZXJpci4gWsmZcsmZcmxpIHTJmXRiaXFsyZlyIGJ1bmRhbiBpc3RpZmFkyZkgZWTJmXLJmWsgbcmZa2FuIG3JmWx1bWF0bGFyxLFuxLEgdMmZc2Fkw7xmaSBzYXl0bGFyYSBnw7ZuZMmZcsmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9IjU1NjgxMzkxMDA2NDU4MjkxMTciPiJwYWtldGzJmXJpIHTJmXNkaXFsyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wYWNrYWdlVmVyaWZpY2F0aW9uQWdlbnQiIG1zZ2lkPSI4NDM3NTkwMTkwOTkwODQzMzgxIj4iVMmZdGJpccmZIHBha2V0aW4gcXVyYcWfZMSxcsSxbGFiaWzJmW4gb2xtYXPEsW7EsSB5b3hsYW1hxJ9hIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjQxODc3ODY3OTMzNjAzMjY2NTQiPiJwYWtldCBkb8SfcnVsYXnEsWPEsXlhIGJhxJ9sYW7EsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iMzE4MDc0MTc3MzIzMzg2MjEyNiI+IlNhaGliaW7JmSBwYWtldCB5b3hsYXnEsWPEsWxhcsSxbmEgc29yxJ91IGfDtm5kyZlybcmZayBpY2F6yZlzaSB2ZXJpci4gTm9ybWFsIHTJmXRiaXFsyZlyIHTJmXLJmWZpbmTJmW4gaGXDpyB2YXh0IGlzdMmZbmlsbcmZbcmZbGlkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXJpYWxQb3J0IiBtc2dpZD0iNTQ2MDgzMzI3NjU0NjMxMDc2Ij4ic2VyaWFsIHBvcnRhIMOnxLF4xLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiJTYWhpYmluyZkgU2VyaWFsTWFuYWdlciBBUEkgdmFzaXTJmXNpbMmZIHNlcmlhbCBwb3J0bGFyYSBpY2F6yZkgaXpuaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNTA3Nzc3NDI5Nzk0MzQwOTI4NSI+InhhcmljaSBrb250ZW50IHByb3ZheWRlcmzJmXJpbsmZIGdpcmnFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNDU0NDM0NjQ4NjY5Nzg1MzY4NSI+Ik3JmXptdW4gcHJvdmF5ZGVybMmZcmluyZkgw7ZydMO8a2TJmW4gZGF4aWwgb2xtYXEgw7zDp8O8biBjaWhheiBzYWhpYmluyZkgaW1rYW4gdmVyaXIuIE5vcm1hbCB0yZl0YmlxbMmZciDDvMOnw7xuIGxhesSxbSBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4iYXZ0b21hdGlrIGNpaGF6IHllbmlsyZlubcmZbMmZcmluaSBwb3p1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUxvY2siIG1zZ2lkPSIxNjU1NjI1ODMyMTY2Nzc4NDkyIj4iU2FoaWJpbsmZIHllbmkgdmVyc2l5YXlhIHllbmlsyZlubcmZayDDvMOnw7xuIG7JmSB2YXh0IHFleXJpLWludGVyYWt0aXYgcmVib290IG3JmWx1bWF0xLFuxLEgc2lzdGVtyZkgdMmZa2xpZiBldG3JmSBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX21lc3NhZ2UiIG1zZ2lkPSI3NjczNDQ2ODcxMzkxOTU3OTAiPiJCcmF1emVyaW4gYnUgxZ9pZnLJmW5pIHlhZGRhIHNheGxhbWFzxLFuxLEgaXN0yZl5aXJzaXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9ub3Rub3ciIG1zZ2lkPSI2Mzg5Njc1MzE2NzA2Njk5NzU4Ij4ixLBuZGkgeW94Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9yZW1lbWJlciIgbXNnaWQ9IjY0OTE4Nzk2Nzg5OTY3NDk0NjYiPiJZYWRkYSBzYXhsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbmV2ZXIiIG1zZ2lkPSI4Mjc0MzMwMjk2Nzg1ODU1MTA1Ij4iSGXDpyB2YXh0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4iQnUgc8mZaGlmyZluaSBhw6dtYXEgw7zDp8O8biBpY2F6yZluaXogeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRleHRfY29waWVkIiBtc2dpZD0iNDk4NTcyOTUyNDY3MDEzMTM4NSI+Ik3JmXRuIHBhbm95YSBrb3B5YWxhbmTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb3JlX2l0ZW1fbGFiZWwiIG1zZ2lkPSI0NjUwOTE4OTIzMDgzMzIwNDk1Ij4iRGFoYSDDp294Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcGVuZF9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI1NzIyMTQ0NjE2NzYwMTU2NDIiPiJNZW55dSsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NwYWNlX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjQxMDMyODYzOTI3MjE2MjUzNyI+ImJvxZ9sdXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2VudGVyX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjc0MzM2Mjc4NTExMTMwOTY2OCI+ImRheGlsIG9sdW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjM2NTgxNzgwMDcyMDI3NDgxNjQiPiJzaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2hfZ28iIG1zZ2lkPSI4Mjk4MDE2NjY5ODIyMTQxNzE5Ij4iQXh0YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3NlYXJjaCIgbXNnaWQ9IjY3NDk4MjY2MzkwOTg1MTIxMjAiPiJBeHRhcsSxxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3F1ZXJ5IiBtc2dpZD0iNTkxMTc3ODU5MzEyNTM1NTEyNCI+IkF4dGFyxLHFnyBzb3LEn3VzdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fY2xlYXIiIG1zZ2lkPSIxMzMwMjgxOTkwOTUxODMzMDMzIj4iU29yxJ91bnUgdMmZbWl6bMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zdWJtaXQiIG1zZ2lkPSIyNjg4NDUwMTMzMjk3OTgzNTQyIj4iU29yxJ91bnUgZ8O2bmTJmXJpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fdm9pY2UiIG1zZ2lkPSIyNDUzMjAzNjk1Njc0OTk0NDQwIj4iU8mZc2xpIGF4dGFyxLHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSI3NDYwNjk0MDcwMzA5NzMwMTQ5Ij4iVG94dW5hcmFxIEvJmcWfZiBldCBmdW5rc2l5YXPEsSBha3RpdiBlZGlsc2luPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODY1NTg4NzUzOTA4OTkxMDU3NyI+Ijx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gVG94dW5hcmFxIEvJmcWfZiBFdCByZWppbWluaSBha3RpdmzJmcWfZGlybcmZayBpc3TJmXlpci4gVG94dW5hcmFxIEvJmcWfZiBFdCBhw6fEsWxkxLHEn8SxIHphbWFuLCBiYXJtYcSfxLFuxLF6xLFuIGFsdMSxbmRhIG7JmSBvbGR1xJ91IGhhcWRhIG9sYW4gdMmZc3ZpcmzJmXJpIGXFn2lkyZkgdsmZIHlhIGfDtnLJmSBiaWzJmXJzaW5peiB2yZkgeWFwbGFuxZ9ldGTJmSBpbnNhbmxhcmxhIMmZbGFxyZl5yZkga2XDp23JmWsgw7zDp8O8biBqZXN0bMmZciBoyZl5YXRhIGtlw6dpcsmZIGJpbMmZcnNpbml6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI3MDgxOTk2NzI4NTIzNzMxOTUiPiI8eGxpZmY6ZyBpZD0iQUNDRVNTSUJJTElUWV9TRVJWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IFRveHVuYXJhcSBLyZnFn2YgRXQgcmVqaW1pbmkgYWt0aXZsyZnFn2Rpcm3JmWsgaXN0yZl5aXIuIFRveHVuYXJhcSBLyZnFn2YgRXQgYcOnxLFsZMSxxJ/EsSB6YW1hbiwgYmFybWHEn8SxbsSxesSxbiBhbHTEsW5kYSBuyZkgb2xkdcSfdSBoYXFkYSBvbGFuIHTJmXN2aXJsyZlyaSBlxZ9pZMmZIHbJmSB5YSBnw7ZyyZkgYmlsyZlyc2luaXogdsmZIHlhIHRlbGVmb25kYSBpbnNhbmxhcmxhIMmZbGFxyZl5yZkga2XDp23JmWsgw7zDp8O8biBqZXN0bMmZciBoyZl5YXRhIGtlw6dpcsmZIGJpbMmZcnNpbml6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI3Mzk2Mzg0NTA4OTUzNzc5OTI1Ij4iMSBheSDDtm5jyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiZWZvcmVPbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjkwOTEzNDU0NjgzNjQ5OTgyNiI+IjEgYXkgyZl2dsmZbCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX3NlY29uZHNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDg2OTg3MDA1NjU0Nzg5NjAxMSI+IjEgc2FuaXnJmSDJmXZ2yZlsIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzOTAzNzA2ODA0MzQ5NTU2Mzc5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXZ2yZlsIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJudW1fbWludXRlc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMzA2Nzg3NDMzMDg4ODEwMTkxIj4iMSBkyZlxaXHJmSDJmXZ2yZlsIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMTc2OTQyMDA4OTE1NDU1MTE2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gZMmZcWlxyZkgyZl2dsmZbCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX2hvdXJzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjkxNTA3OTc5NDQ2MTA4MjE4NDkiPiIxIHNhYXQgyZl2dsmZbCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjQ2NzI3MzIzOTU4NzU4NzU2OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhYXQgyZl2dsmZbCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0ibGFzdF9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzA2OTk5MjgwODE2NDMxODI2OCI+IlNvbiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBnw7xuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ibGFzdF9tb250aCIgbXNnaWQ9IjM5NTkzNDY3Mzk5NzkwNTU0MzIiPiJLZcOnyZluIGF5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkZXIiIG1zZ2lkPSI1MjExOTc1MDIyODE1NTU0ODQwIj4iS8O2aG7JmSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX2RheXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODYxMzU4NTM0Mzk4MTE1ODIwIj4iZMO8bsmZbiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjQ3OTU4NjQ2NjE1MzMxNDYzMyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGfDvG4gyZl2dsmZbCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX3NlY29uZHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIyNzI5NzQ1NTYwOTU0OTA1MTAyIj4iMSBzYW5pecmZIMmZcnppbmTJmSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTI0MTkyNjExNjQ0Mzk3NDY4NyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgacOnaW5kyZkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODc5MzA5NTI1MTMyNTIwMDM5NSI+IjEgZMmZcWlxyZkgacOnaW5kyZkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMzMzA3MTM5MzYzOTk0NDg3NDkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBkyZlxaXHJmSDJmXJ6aW5kyZkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9ob3VycyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjcxNjQzNTMzNDI0Nzc3Njk5OTkiPiIxIHNhYXRhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDcyOTA2NzczNTM3MjczODkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYWF0YSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NDEzMDg4NzQzMDA5ODM5NTE4Ij4ic2FiYWgiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjUxMDk0NDkzNzUxMDA5NTMyNDciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBnw7xuIMmZcnppbmTJmSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9zZWNvbmRzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjE4NDkwMzY4NDAyMDAwNjkxMTgiPiIxIHNhbml5yZkgyZl2dsmZbCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzY5OTE2OTM2NjY1MDkzMDQxNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhbiDJmXZ2yZlsIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX21pbnV0ZXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjM2MTQ5MDE0NzExMzg3MTU0NSI+IjEgZMmZcWlxyZkgyZl2dsmZbCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODUxMTY0OTY4NTk3MTUwNzEwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gZMmZcWlxyZkgyZl2dsmZbCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9ob3Vyc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0Nzk2MjEyMDM5NzI0NzIyMTE2Ij4iMSBzYWF0IMmZdnbJmWwiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY4ODk5NzA3NDU3NDg1Mzg5MDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYWF0IMmZdnbJmWwiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9udW1fZGF5c19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NDYzMTYxNzExNDkyNjgwMzA5Ij4iZMO8bsmZbiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzQ1MzM0MjYzOTYxNjQ4MTE5MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGfDvG4gyZl2dsmZbCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9zZWNvbmRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg0MjIyNTM3MDc5NTA2NjI5OSI+IjEgc2FuIMmZcnppbmTJmSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ5NTg4MDEwODgyNTgwNTEwOCI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhbiDJmXJ6aW5kyZkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fbWludXRlcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU2Mjc4NjE0OTkyODI4NDg3OCI+IjEgZMmZcSDJmXJ6aW5kyZkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQyMTYxMTMyOTI3MDY1Njg3MjYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBkyZlxaXHJmXnJmSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9ob3VycyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNzQ3MDgxMTgxMjQwNDUyNDYiPiIxIHNhYXQgyZlyemluZMmZIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNzA1MzczNzY2Nzk4MDEzNDA2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FhdGEiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjIxNzg1NzYyNTQzODU3Mzk4NTUiPiJzYWJhaCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjk3MzA2Mjk2ODAzODM1NTk5MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGfDvG7JmSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl9kYXRlIiBtc2dpZD0iOTA5Mzk0OTc1Nzc1NzQ0NTExNyI+Ijx4bGlmZjpnIGlkPSJEQVRFIj4lczwveGxpZmY6Zz4gdGFyaXhpbmTJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl90aW1lIiBtc2dpZD0iNTUwNjgzMTI0NDI2MzA4Mzc5MyI+InNhYXQgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl95ZWFyIiBtc2dpZD0iNTA0MDM5NTY0MDcxMTg2NzE3NyI+Ijx4bGlmZjpnIGlkPSJZRUFSIj4lczwveGxpZmY6Zz4gaWxpbmTJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheSIgbXNnaWQ9IjgxNDQxOTU3NzYwNTgxMTk0MjQiPiJnw7xuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5cyIgbXNnaWQ9IjQ3NzQ1NDc2NjEwMjEzNDQ2MDIiPiJnw7xubMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXIiIG1zZ2lkPSIyMTI2NzcxOTE2NDI2MTg5NDgxIj4ic2FhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJzIiBtc2dpZD0iODk0NDI0MDA1MjY2ODUyOTkzIj4ic2FhdGxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZSIgbXNnaWQ9IjkxNDg4Nzg2NTc3MDM3Njk4NjgiPiJkyZlxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZXMiIG1zZ2lkPSI1NjQ2MDAxMDA1ODI3MDM0NTA5Ij4iZMmZcWlxyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWNvbmQiIG1zZ2lkPSIzMTg0MjM1ODA4MDIxNDc4Ij4ic24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWNvbmRzIiBtc2dpZD0iMzE2MTUxNTM0NzIxNjU4OTIzNSI+InNhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndlZWsiIG1zZ2lkPSI1NjE3OTYxNTM3MTczMDYxNTgzIj4iaMmZZnTJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndlZWtzIiBtc2dpZD0iNjUwOTYyMzgzNDU4Mzk0NDUxOCI+ImjJmWZ0yZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyIiBtc2dpZD0iNDAwMTExODIyMTAxMzg5MjA3NiI+ImlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcnMiIG1zZ2lkPSI2ODgxNTc3NzE3OTkzMjEzNTIyIj4iaWwiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX3NlY29uZHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2OTYyMDE1NTI4MzcyOTY5NDgxIj4iMSBzYW5pecmZIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxODg2MTA3NzY2NTc3MTY2Nzg2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fbWludXRlcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ5MTU0MTQwMDI1NDYwODU2MTciPiIxIGTJmXFpccmZIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMTY1MTg3MTY5MjI0OTA4Nzc1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gZMmZcWlxyZkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODkxNzQ2NzQ5MTI0ODgwOTk3MiI+IjEgc2FhdCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzg2Mzk2Mjg1NDI0Njc3MzkzMCI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhYXQiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGl0bGUiIG1zZ2lkPSIzNTM0NTA5MTM1NDM4MzUzMDc3Ij4iVmlkZW8gcHJvYmxlbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF9pbnZhbGlkX3Byb2dyZXNzaXZlX3BsYXliYWNrIiBtc2dpZD0iMzE4NjY3MDMzNTkzODY3MDQ0NCI+IkJ1IHZpZGVvIGJ1IGNpaGF6YSBzdHJpbSBvbHVubWFxIMO8w6fDvG4gdXnEn3VuIGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X3Vua25vd24iIG1zZ2lkPSIzNDUwNDM5MTU1MTg3ODEwMDg1Ij4iQnUgdmlkZW8gb3h1bXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX2J1dHRvbiIgbXNnaWQ9IjI4MjIyMzgyMTUxMDA2Nzk1OTIiPiJPSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aXZlX3RpbWUiIG1zZ2lkPSIxODE4NTU3MTc3ODI5NDExNDE3Ij4iPHhsaWZmOmcgaWQ9IkRBVEUiPiUxJHM8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub29uIiBtc2dpZD0iNzI0NTM1MzUyODgxODU4NzkwOCI+ImfDvG5vcnRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iTm9vbiIgbXNnaWQ9IjMzNDIxMjc3NDUyMzAwMTMxMjciPiJHw7xub3J0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pZG5pZ2h0IiBtc2dpZD0iNzE2NjI1OTUwODg1MDQ1NzU5NSI+ImdlY8mZeWFyxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJNaWRuaWdodCIgbXNnaWQ9IjU2MzA4MDY5MDY4OTc4OTIyMDEiPiJHZWPJmXlhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9tbV9zcyIgbXNnaWQ9IjQ0MzE1NTU5NDM4Mjg3MTE0NzMiPiI8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTEkMDJkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iU0VDT05EUyI+JTIkMDJkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsYXBzZWRfdGltZV9zaG9ydF9mb3JtYXRfaF9tbV9zcyIgbXNnaWQ9IjE4NDYwNzE5OTc2MTY2NTQxMjQiPiI8eGxpZmY6ZyBpZD0iSE9VUlMiPiUxJGQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMiQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMyQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0QWxsIiBtc2dpZD0iNjg3NjUxODkyNTg0NDEyOTMzMSI+IkhhbcSxc8SxbsSxIHNlw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iS8mZcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29weWFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlllcmzJmcWfZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLGj3bJmXogZXQuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iU2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwga29weWFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+Ik3JmXRuIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJNyZl0biBzZcOnaW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkzDvMSfyZl0yZkgyZlsYXbJmSBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iU2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRNZXRob2QiIG1zZ2lkPSIxNjUzNjMwMDYyMzA0NTY3ODc5Ij4iRGF4aWxldG3JmSBtZXRvZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlZGl0VGV4dE1lbnVUaXRsZSIgbXNnaWQ9IjQ5MDkxMzU1NjQ5NDE4MTU0OTQiPiJNyZl0biDJmW3JmWxpeXlhdGxhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190aXRsZSIgbXNnaWQ9IjU1NzYyNzI0OTYzNjU2ODQ4MzQiPiJZYWRkYcWfIHllcmkgYml0aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RleHQiIG1zZ2lkPSI2NjQwNTA1ODE3NjE3NDE0MzcxIj4iQsmZemkgc2lzdGVtIGZ1bmtzaXlhbGFyxLEgacWfbMmZbcmZecmZIGJpbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg3MTgzMzUxMjEwNjA3ODc5MTQiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IGnFn2zJmW5pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iNDY1MzU4Njk0Nzc0NzMzMDA1OCI+IkRhaGEgw6dveCBtyZlsdW1hdCDDvMOnw7xuIHbJmSB5YSB0yZl0YmlxaSBkYXlhbmTEsXJtYXEgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9rIiBtc2dpZD0iNTk3MDA2MDQzMDU2MjUyNDkxMCI+Ik9LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNjQ0MjU2MDU3MTI1OTkzNTEzMCI+IkzJmcSfdiBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllcyIgbXNnaWQ9IjUzNjI5ODIzMDMzMzc5NjkzMTIiPiJPSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vIiBtc2dpZD0iNTE0MTUzMTA0NDkzNTU0MTQ5NyI+IkzJmcSfdiBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpYWxvZ19hbGVydF90aXRsZSIgbXNnaWQ9IjIwNDk2NTg3MDg2MDkwNDMxMDMiPiJEaXFxyZl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9hZGluZyIgbXNnaWQ9Ijc5MzM2ODEyNjAyOTYwMjExODAiPiJZw7xrbMmZbmly4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vbiIgbXNnaWQ9IjE1NDQ2ODI3NTU1MTQ0OTQyOTgiPiJBw4dJUSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb2ZmIiBtc2dpZD0iNjgxNTg3MDM4Njk3MjgwNTgzMiI+IlFBUEFMSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndoaWNoQXBwbGljYXRpb24iIG1zZ2lkPSI0NTMzMTg1OTQ3MDY0NzczMzg2Ij4ixo9tyZlsaXl5YXTEsSB0YW1hbWxhecSxbjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNVc2UiIG1zZ2lkPSI0NTgzMDE4MzY4MDAwNjEwNDM4Ij4iQnUgZsmZYWxpeXnJmXQgw7zDp8O8biBkZWZvbHQgaXN0aWZhZMmZIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjbGVhckRlZmF1bHRIaW50TXNnIiBtc2dpZD0iMzI1MjU4NDY4OTUxMjA3NzI1NyI+IlNpc3RlbSBheWFybGFyxLFuZGEsIFTJmXRiaXFsyZlyZMmZIHbJmSBFbmRpcmlsbWnFn2zJmXJkyZkgZGVmb2x0dSB0yZltaXpsyZl5aW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlQWN0aXZpdHkiIG1zZ2lkPSI3NDg2ODc2MTQ3NzUxODAzMzMzIj4iRsmZYWxpeXnJmXQgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4iVVNCIGNpaGF6IMO8w6fDvG4gdMmZdGJpcSBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub0FwcGxpY2F0aW9ucyIgbXNnaWQ9IjI5OTE4MTQyNzM5MzY1MDQ2ODkiPiJIZcOnIGJpciB0yZl0YmlxIGJ1IMmZbcmZbGl5eWF0xLEgYXBhcmEgYmlsbWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfdGl0bGUiIG1zZ2lkPSIxOTA1ODAwNTYwMzE3MTM3NzUyIj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfYXBwbGljYXRpb24iIG1zZ2lkPSI5MzI2Mjg0ODgwMTMwOTI3NzYiPiJUyZnJmXNzw7xmIGtpLCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IGRheWFuZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfcHJvY2VzcyIgbXNnaWQ9IjQ1MDcwNTg5OTcwMzU2OTc1NzkiPiJUyZnJmXNzw7xmIGtpLCA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4gcHJvc2VzaSBkYXlhbmTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfdGl0bGUiIG1zZ2lkPSI0MzUxOTQ4NDgxNDU5MTM1NzA5Ij48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjE5MDQ0NzcxODkwNTcxOTkwNjYiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUyJHM8L3hsaWZmOmc+IGNhdmFiIHZlcm1pci5cblxuT251IGJhxJ9sYW1hcSBpc3TJmXlpcnNpbml6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+Ijx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4gYWt0aXZpdGlzaSBjYXZhYiB2ZXJtaXIuIFxuXG5PbnUgYmHEn2xhbWFxIGlzdMmZeWlyc2luaXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FwcGxpY2F0aW9uX3Byb2Nlc3MiIG1zZ2lkPSI4OTQxNzU3NjA3MzQwNDgxMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiBjYXZhYiB2ZXJtaXIuIE9udSBiYcSfbGFtYXEgaXN0yZl5aXJzaW5pej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfcHJvY2VzcyIgbXNnaWQ9IjY1MTMyMDk4NzQ4ODA1MTcxMjUiPiJQcm9zZXMgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IGNhdmFiIHZlcm1pci4gXG4gXG4gT251IGJhxJ9sYW1hcSBpc3TJmXlpcnNpbml6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2Nsb3NlIiBtc2dpZD0iODM0NjA3MjA5NDUyMTI2NTYwNSI+Ik9LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVwb3J0IiBtc2dpZD0iNDA2MDIxODI2MDk4NDc5NTcwNiI+IsWeaWthecmZdCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FpdCIgbXNnaWQ9IjcxNDcxMTgyMTcyMjYzMTc3MzIiPiJHw7Z6bMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VicGFnZV91bnJlc3BvbnNpdmUiIG1zZ2lkPSIzMjcyNzU4MzUxMTM4MTIyNTAzIj4iQnUgc8mZaGlmyZkgeWFyYXJzxLF6bGHFn8SxYi5cblxuQmHEn2xhbWFxIGlzdMmZeWlyc2l6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTU0Nzk5Nzc4MDUwNjcxMzU4MSI+IlTJmXRiaXEgecO2bmzJmW5kaXJpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfcmVwbGFjZSIgbXNnaWQ9IjYyMDI0OTg5NDk5NzAyODE0MTIiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IGluZGkgw6dhbMSxxZ/EsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfb3JpZ2luYWwiIG1zZ2lkPSIxODgxMDIwMjMwMjE2Njg2ODMiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IGlsayBiYcWfbGFkxLFsZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zY2FsZSIgbXNnaWQ9IjMyMDI5NTU2Njc2NzU5NDQ0OTkiPiJNaXF5YXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2hvdyIgbXNnaWQ9IjQwMTM4Nzg4NzY0ODY2NTU4OTIiPiJIyZltacWfyZkgZ8O2c3TJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfaGludCIgbXNnaWQ9IjEwNjQ1MjQwODQ1NDMzMDQ0NTkiPiJCdW5sYXLEsSBTaXN0ZW0gYXlhcmxhcsSxbmRhIHllbmlkyZluIGFrdGl2bMmZxZ9kaXIgWcO8a2zJmW5tacWfICZndDsgVMmZdGJpcWzJmXIgJmd0Oy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfYXBwbGljYXRpb24iIG1zZ2lkPSIzMzA3MjA5MTkyMTU1NDQyODI5Ij4iVMmZdGJpcSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IChwcm9zZXMgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSBTdHJpY3RNb2RlIHNpeWFzyZl0aW5pIHBvemR1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtdl9wcm9jZXNzIiBtc2dpZD0iNTEyMDM5NzAxMjA0NzQ2MjQ0NiI+Ijx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiBwcm9zZXNpIFN0cmljdE1vZGUgc2l5YXPJmXRpbmkgcG96ZHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfdGl0bGUiIG1zZ2lkPSIxNTg0MTkyMjg1NDQxNDA1NzQ2Ij4iQW5kcm9pZCB0yZlrbWlsbMmZxZ9kaXJpbGlyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfYXBrIiBtc2dpZD0iNzkwNDA0MjY4MjExMTUyNjE2OSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gyZlkZMmZZMmZbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHTJmXRiaXEgb3B0aW1hbGxhxZ/EsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfc3RhcnRpbmdfYXBwcyIgbXNnaWQ9IjQ1MTQ2NDUxNjM0NjkyNjcxMyI+IlTJmXRiaXFsyZlyIGJhxZ9sYWTEsWzEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfY29tcGxldGUiIG1zZ2lkPSIxNDA1OTU0NzU0MTEyOTk5MjI5Ij4iWcO8a2zJmW3JmSBiYcWfYSDDp2F0xLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb24iIG1zZ2lkPSI5MDg3MDYzOTg1Nzc2NjI2MTY2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JTEkczwveGxpZmY6Zz4gw6dhbMSxxZ/EsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uX2RldGFpbCIgbXNnaWQ9IjE3MjE2ODE3NDE2MTc4OTg4NjUiPiJUyZl0YmlxyZkga2XDp23JmWsgw7zDp8O8biB0b3h1bnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RpdGxlIiBtc2dpZD0iNzE1MzE2NzA4NTQwMzI5ODE2OSI+IlTJmXRiaXFsyZlyyZkga2XDp2lsc2luPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90ZXh0IiBtc2dpZD0iNzAyMjYzMTkyNDUzNDQwNjQwMyI+IkJpciB0yZl0YmlxIGFydMSxcSBpxZ9syZl5aXIuIERpZ8mZcmluaSBiYcWfbGF0bWFxIMO8w6fDvG4gb251IGRheWFuZMSxcm1hbMSxc8SxbsSxei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2FjdGlvbiIgbXNnaWQ9IjQ5MzEyOTE3MjIzODU2NjI4MiI+Ijx4bGlmZjpnIGlkPSJPTERfQVBQIj4lMSRzPC94bGlmZjpnPiBiw7ZsbcmZc2luyZkgcWF5xLFkxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwODIwOTQyNzU1ODAzNTgwNDkiPiJZZW5pIHTJmXRiaXFpIGJhxZ9sYXRtYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9hY3Rpb24iIG1zZ2lkPSI1NDcyNzU2OTI2OTQ1NDQwNzA2Ij4iPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+IHTJmXRiaXFpbmkgYmHFn2xhZMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ld19hcHBfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTMyMTQzNTk4MzcxNTM3MzQwIj4iS8O2aG7JmSB0yZl0YmlxaSB5YWRkYSBzYXhsYW1hZGFuIGRheWFuZMSxcsSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZW5kVGV4dCIgbXNnaWQ9IjUyMDk4NzQ1NzE5NTk0NjkxNDIiPiJNyZl0biDDvMOnw7xuIMmZbcmZbGl5eWF0IHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9yaW5ndG9uZSIgbXNnaWQ9IjY4ODU0MjE0MDY4NDU3MzQ2NTAiPiJayZluZ2luIHPJmXMgZ8O8Y8O8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljIiBtc2dpZD0iNTQyMTY1MTE1NzEzODYyODE3MSI+Ik1lZGlhIGjJmWNtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3BsYXlpbmdfdGhyb3VnaF9ibHVldG9vdGgiIG1zZ2lkPSI5MTY1OTg0Mzc5Mzk0NjAxNTMzIj4iQmx1ZXRvb3RoIHZhc2l0yZlzaWzJmSBveW5hZMSxbMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3NpbGVudF9yaW5ndG9uZV9zZWxlY3RlZCIgbXNnaWQ9IjgzMTA3Mzk5NjA5NzMxNTYyNzIiPiJTyZlzc2l6IHrJmW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2NhbGwiIG1zZ2lkPSIzOTQxNjgwMDQxMjgyNzg4NzExIj4iRGF4aWxpIHrJmW5nIHPJmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2JsdWV0b290aF9jYWxsIiBtc2dpZD0iMjAwMjg5MTkyNjM1MTE1MTUzNCI+IkJsdWV0b290aCB6yZluZyBoyZljbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYWxhcm0iIG1zZ2lkPSIxOTg1MTkxNjE2MDQyNjg5MTAwIj4iU2lxbmFsIHPJmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjI0MjIyNjU2NTY3NDQyNzY3MTUiPiJCaWxkaXJpxZ8gc8mZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfdW5rbm93biIgbXNnaWQ9IjE0MDAyMTk2Njk3NzA0NDU5MDIiPiJIyZljbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2JsdWV0b290aCIgbXNnaWQ9IjY1Mzg4OTQxNzcyNTU5NjQzNDAiPiJCbHVldG9vdGggaMmZY21pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fcmluZ2VyIiBtc2dpZD0iMzMyNjAwMzg0NzAwNjE2MjQ5NiI+IlrJmW5nIHPJmXNpIGfDvGPDvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2luY2FsbCIgbXNnaWQ9Ijg4OTAwNzMyMTgxNTQ1NDMzOTciPiJayZluZyBoyZljbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9tZWRpYSIgbXNnaWQ9IjQyMTczMTE3MTk2NjUxOTQyMTUiPiJNZWRpYSBoyZljbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ub3RpZmljYXRpb24iIG1zZ2lkPSI3MDQ0OTg2NTQ2NDc3MjgyMjc0Ij4iQmlsZGlyacWfIHPJmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdCIgbXNnaWQ9IjM3ODk3NTg5ODAzNTc2OTY5MzYiPiJEZWZvbHQgcmlucXRvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX2RlZmF1bHRfd2l0aF9hY3R1YWwiIG1zZ2lkPSI4MTI5NTYzNDgwODk1OTkwMzcyIj4iRGVmb2x0IHJpbnF0b24gKDx4bGlmZjpnIGlkPSJBQ1RVQUxfUklOR1RPTkUiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3NpbGVudCIgbXNnaWQ9Ijc5Mzc2MzQzOTI0MDg5NzcwNjIiPiJIZcOnIGJpcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9waWNrZXJfdGl0bGUiIG1zZ2lkPSIzNTE1MTQzOTM5MTc1MTE5MDk0Ij4iWsmZbmcgc8mZc2zJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfdW5rbm93biIgbXNnaWQ9IjU0Nzc5MTk5ODg3MDE3ODQ3ODgiPiJOYW3JmWx1bSByaW5xdG9uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJ3aWZpX2F2YWlsYWJsZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY2NTQxMjM5ODc0MTgxNjg2OTMiPiJXaS1GaSDFn8mZYsmZa8mZc2kgbcO2dmN1ZGR1ciI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+IldpLUZpIMWfyZliyZlryZlsyZlyaSBtw7Z2Y3VkZHVyIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9kZXRhaWxlZCI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjE2MzQxMDE0NTAzNDMyNzczNDUiPiJXaS1GaSDFn8mZYsmZa8mZbmkgYcOnxLFuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3OTE1ODk1MzIzNjQ0MjkyNzY4Ij4iQcOnxLFxIFdpLUZpIMWfyZliyZlryZlsyZlyaSBtw7Z2Y3VkZHVyIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9IjQwMjk0ODk3MTY2MDUyNTUzODYiPiJXaS1GaSDFn8mZYsmZa8mZc2luyZkgZGF4aWwgb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iODQ5NTE1NTU5MzM1ODA1NDY3NiI+IsWeyZliyZlryZl5yZkgZGF4aWwgb2x1biI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luX2RldGFpbGVkICg4MDAwMDgxOTQxNDQ3OTc2MTE4KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkIiBtc2dpZD0iNzkwNDIxNDIzMTY1MTU0NjM0NyI+IldpLUZpXCdhIHFvxZ91bG1hcSBhbMSxbm1hZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiBpbnRlcm5ldCBiYcSfbGFudMSxc8SxIGtleWZpeXnJmXRzaXpkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZGlhbG9nX3RpdGxlIiBtc2dpZD0iOTc2MTE3ODI2NTkzMjQ1MTciPiJXaS1GaSBEaXJlY3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90dXJub25fbWVzc2FnZSIgbXNnaWQ9IjI5MDkyNTA5NDIyOTk2MjcyNDQiPiJXaS1GaSBEaXJlY3QgyZltyZlsaXl5YXTEsW7EsSBiYcWfbGF0LiBCdSBXaS1GaSBtw7zFn3TJmXJpL2hvdHNwb3R1IGJhxJ9sYXlhY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZhaWxlZF9tZXNzYWdlIiBtc2dpZD0iMzc2MzY2OTY3NzkzNTYyMzA4NCI+IldpLUZpIERpcmVjdCBiYcWfbGFkxLFsYSBiaWxtyZlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIwNjgzMjE4ODE2NzM3MzQ4ODYiPiJXaS1GaSBEaXJlY3QgYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTYzODk0OTk1Mzk5Mzg5NDMzNSI+IkF5YXJsYXIgw7zDp8O8biB0b3h1bnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMTY0NTI2NzI1OTI3MjgyOTU1OSI+IlHJmWJ1bCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVjbGluZSIgbXNnaWQ9IjIxMTIyMjU0NTE3MDYxMzc4OTQiPiLEsG10aW5hIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3NlbnRfdGl0bGUiIG1zZ2lkPSIxMzE4OTc1MTg1MTEyMDcwNzM0Ij4iRMmZdsmZdG5hbcmZIGfDtm5kyZlyaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ludml0YXRpb25fdG9fY29ubmVjdF90aXRsZSIgbXNnaWQ9IjQ5NTg4MDM5NDg2NTg1MzM2MzciPiJRb8WfdWxtYXEgw7zDp8O8biBkyZl2yZl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJvbV9tZXNzYWdlIiBtc2dpZD0iNTcwMzg5MTc0NzMxOTUxNzY5Ij4iS2ltZMmZbjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90b19tZXNzYWdlIiBtc2dpZD0iMjQ4OTY4OTc0NTIyMDQ0MDk5Ij4iS2ltyZk6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW50ZXJfcGluX21lc3NhZ2UiIG1zZ2lkPSI1OTIwOTI5NTUwMzY3ODI4OTcwIj4iVMmZbMmZYiBvbHVuYW4gUMSwTiBrb2R1IGRheGlsIGVkaW46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfc2hvd19waW5fbWVzc2FnZSIgbXNnaWQ9Ijg1MzA1NjMzMjM4ODA5MjEwOTQiPiJQxLBOOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDEyOTgxMjU3NzQyMjMyNDc1Ij4iQnUgcGxhbsWfZXQgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBjaWhhesSxbmEgcW/Fn3VsYW4gemFtYW4gV2ktRmkgxZ/JmWLJmWvJmXNpbmTJmW4gbcO8dsmZcXHJmXRpIGF5csSxbG3EscWfIG9sYWNhcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzM2MzkwNzIxMzc4NzQ2OTE1MSI+IkJ1IHRlbGVmb24gPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBjaWhhesSxbmEgcW/Fn3VsYW4gemFtYW4gV2ktRmkgxZ/JmWLJmWvJmXNpbmTJmW4gbcO8dsmZcXHJmXRpIGF5csSxbG3EscWfIG9sYWNhcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9jaGFyYWN0ZXIiIG1zZ2lkPSIzMzY1NTUwMTIwNjE3NzAxNzQ1Ij4iU2ltdm9sIGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF90aXRsZSIgbXNnaWQ9IjcyOTY2MTI3ODExMjg5MTc3MTkiPiJTTVMgbWVzYWogZ8O2bmTJmXJpbGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDDp294IHNheWRhIFNNUyBtZXNhaiBnw7ZuZMmZcmlyLiBCdSB0yZl0YmlxaW4gbWVzYWogZ8O2bmTJmXJtyZl5yZkgZGF2YW0gZXRtyZlzaW7JmSBpY2F6yZkgdmVyaXJzaW5pej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF95ZXMiIG1zZ2lkPSIzNjYzNzI1OTkzODU1ODE2ODA3Ij4ixLBjYXrJmSB2ZXJpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4iUsmZZGQgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0O8KgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkRFU1RfQUREUkVTUyI+JTIkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IMO8bnZhbsSxbmEgbWVzYWogZ8O2bmTJmXJtyZlrIGlzdMmZeWlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSIzNDkyMDI1NzE5ODY4MDc4NDU3Ij4iQnUsIG1vYmlsIGhlc2FixLFuxLF6YSAiPGZvbnQgZmdjb2xvcj0iI2ZmZmZiMDYwIj4iyZlsYXbJmSB0YXJpZmzJmXJpbiB0yZl0YmlxIG9sdW5tYXPEsSI8L2ZvbnQ+IiBpbMmZIG7JmXRpY8mZbMmZbsmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfcHJlbWl1bV9zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSI1NTIzODI2MzQ5MTA1MTIzNjg3Ij48Zm9udCBmZ2NvbG9yPSIjZmZmZmIwNjAiPiJCdSBtb2JpbCBoZXNhYsSxbsSxemRhIMO2ZMmZbmnFn2zJmXLJmSBzyZliyZliIG9sYWNhcS4iPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbGxvdyIgbXNnaWQ9IjQ0NTg4Nzg2MzcxMTEwMjM0MTMiPiJHw7ZuZMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiJMyZnEn3YgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl9jaG9pY2UiIG1zZ2lkPSI1Mjg5NTM4NTkyMjcyMjE4MTM2Ij4iTcmZbmltIHNlw6dpbWltaSB5YWRkYSBzYXhsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4iQnVudSBzb25yYSBBeWFybGFyZGEgZMmZeWnFn8mZIGJpbMmZcnNpbml6wqAmZ3Q7wqBUyZl0YmlxbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWx3YXlzX2FsbG93IiBtc2dpZD0iMzI0MTE4MTE1NDg2OTQ5MzM2OCI+IkjJmW1pxZ/JmSBpY2F6yZkgdmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9uZXZlcl9hbGxvdyIgbXNnaWQ9IjQ0Njk5Mjc2NTc3NDI2OTY3MyI+Ikhlw6cgdmF4dCBpY2F6yZkgdmVybcmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfdGl0bGUiIG1zZ2lkPSI2MjI3NzEyMzE5MjIzMjI2MTg1Ij4iU0lNIGthcnQgw6fEsXhhcsSxbGTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4iQ2loYXrEsW7EsXrEsSBldGliYXJsxLEgU0lNIGthcnQgaWzJmSBiYcWfbGFkYW5hIGtpbWkgbW9iaWwgxZ/JmWLJmWvJmSDJmWzDp2F0bWF6IG9sYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiJCaXRkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF90aXRsZSIgbXNnaWQ9IjM3MTk2NzA1MTI4ODk2NzQ2OTMiPiJTxLBNIGthcnQgyZlsYXbJmSBlZGlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfbWVzc2FnZSIgbXNnaWQ9IjY1OTk5NDUzMDExNDEwNTAyMTYiPiJNb2JpbCDFn8mZYsmZa8mZecmZIHFvxZ91bG1hcSDDvMOnw7xuIGNpaGF6xLFuxLF6xLEgeWVuaWTJmW4gYmHFn2xhZMSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVzdGFydF9idXR0b24iIG1zZ2lkPSI0NzIyNDA3ODQyODE1MjMyMzQ3Ij4iWWVuaWTJmW4gYmHFn2xhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjgzNDkzNjI2MjMwNjg4MTkyOTUiPiJWYXh0IGF5YXJsYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI1ODc5NDUwNjU5NDUzNzgyMjc4Ij4iVGFyaXhpIHF1cmHFn2TEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfc2V0IiBtc2dpZD0iNTc3NzA3NTYxNDMyMTA4Nzc1OCI+IkF5YXJsYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfZG9uZSIgbXNnaWQ9IjI1MDc2ODM3NTE3NTkzMDg4MjgiPiJIYXrEsXJkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybXNfbmV3X3Blcm1fcHJlZml4IiBtc2dpZD0iODI1Nzc0MDcxMDc1NDMwMTQwNyI+PGZvbnQgc2l6ZT0iMTIiIGZnY29sb3I9IiNmZjMzYjVlNSI+IllFTsSwOiAiPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybXNfZGVzY3JpcHRpb25fYXBwIiBtc2dpZD0iNTEzOTgzNjE0MzI5MzI5OTQxNyI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gdMmZcsmZZmluZMmZbiB0yZltaW4gZWRpbGliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX3Blcm1pc3Npb25zIiBtc2dpZD0iNzI4MzM1NzcyODIxOTMzODExMiI+Ikhlw6cgYmlyIGljYXrJmSB0yZlsyZliIG9sdW5tdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtX2Nvc3RzX21vbmV5IiBtc2dpZD0iNDkwMjQ3MDMyNDE0MjE1MTExNiI+ImJ1bnVubGEgc2l6ZMmZbiB4yZlyYyB0dXR1bGEgYmlsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4iVVNCIHRvcGx1IHlhZGRhxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjU5MDE0NTkwNDEzOTg3NTE0OTUiPiJVU0IgcW/Fn3VsdWR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+IlNpeiBVU0IgdmFzaXTJmXNpbMmZIGtvbXDDvHRlcmUgYmHEn2xhbmTEsW7EsXouIEtvbXDDvHRlciB2yZkgQW5kcm9pZGluaXppbiBVU0IgeWFkZGHFn8SxIGFyYXPEsW5kYSBmYXlsbGFyxLEga29weWFsYW1hcSBpc3TJmXlpcnNpbml6c8mZLCBhxZ9hxJ/EsWRha8SxIGTDvHltyZl5yZkgdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA1MzUxMDAwNDQ2MDM3ODExIj4iS29tcMO8dGVyaW5pesmZIFVTQiBpbMmZIHFvxZ91bG11c3VudXouIEZheWxsYXLEsSBBbmRyb2lkaW5pemluIFNEIGthcnTEsSBpbMmZIGtvbXDDvHRlcmluaXogYXJhc8SxbmRhIGtvcHlhbGFtYXEgaXN0yZl5aXJzaW5penPJmSBhxZ9hxJ/EsWRha8SxIGTDvHltyZl5yZkgdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9idXR0b25fbW91bnQiIG1zZ2lkPSIxMDUyMjU5OTMwMzY5NTA4MjM1Ij4iVVNCIHlhZGRhxZ/EsSBha3RpdmzJmcWfZGlyaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiJVU0IgeWFkZGHFn8SxbsSxesSxIFVTQiBrw7x0bMmZdmkgeWFkZGHFn8SxIMO8w6fDvG4gaXN0aWZhZMmZIGVkyZluIHphbWFuIHByb2JsZW0geWFyYW5kxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4NzYwMTg1MTI3MTY5NzAzMTMiPiJTRCBrYXJ0xLFuxLF6xLEgVVNCIGvDvHRsyZl2aSB5YWRkYcWfxLEgw7zDp8O8biBpc3RpZmFkyZkgZWTJmW4gemFtYW4gcHJvYmxlbSB5YXJhbmTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4MTc1ODkyNTU0NzU3MjE2NTI1Ij4iVVNCIHFvxZ91bHVkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkzOTgyMjc4MzgyODE4Mzc2MyI+IkZheWxsYXLEsSBrb21ww7x0ZXJpbml6yZkga29weWFsYW1hcSB2yZkgeWEga29tcMO8dGVyaW5pemTJmW4ga29weWFsYW1hcSDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzM2MDU4Mzk2NjYzNTE2MDE3Ij4iVVNCIHlhZGRhxZ/EsSBzw7ZuZMO8csO8biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjU2ODUyMDk4NTU1NjIzODIyIj4iVVNCIHlhZGRhxZ/EsSBzw7ZuZMO8cm3JmWsgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiJVU0IgeWFkZGHFnyBpc3RpZmFkyZkgb2x1bnVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQyNjQwMjUyODA3NzcyMTk1MjEiPiJVU0IgeWFkZGHFn8SxIHPDtm5kw7xybcmZZMmZbiDDtm5jyZkgQW5kcm9pZFwnaW4gVVNCIHlhZGRhxZ/EsW7EsSBrb21ww7x0ZXJkyZluIGRlbW9udGFqIGV0ZGl5aW5pesmZICjDp8SxeGFyZMSxxJ/EsW7EsXphKSDJmW1pbiBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNDM5Njk3ODI0NjA2MTMxMTQiPiJVU0IgeWFkZGHFn8SxIHPDtm5kw7xybcmZZMmZbiDDtm5jyZkgQW5kcm9pZFwnaW4gVVNCIHlhZGRhxZ/EsW7EsSBrb21ww7x0ZXJkyZluIGRlbW9udGFqIGV0ZGl5aW5pesmZICjDp8SxeGFyZMSxxJ/EsW7EsXphKSDJmW1pbiBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfYnV0dG9uX21vdW50IiBtc2dpZD0iNzA2MDIxODAzNDkwMDY5NjAyOSI+IlVTQiB5YWRkYcWfxLFuxLEgc8O2bmTDvHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIxOTcwMzc0ODk4MjYzMDYzODM2Ij4iVVNCIHlhZGRhxZ/EsSBzw7ZuZMO8csmZbiB6YW1hbiBwcm9ibGVtIG9sZHUuIFVTQiBob3N0dSBkZW1vbnRhaiBldG3JmW5pemkgeW94bGF5xLFuIHbJmSB5ZW5pZMmZbiBjyZloZCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190aXRsZSIgbXNnaWQ9Ijk2MzAzOTAzMzQ3MDQ3ODY5NyI+IlVTQiB5YWRkYcWfxLEgYWt0aXZsyZnFn2RpcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RleHQiIG1zZ2lkPSI1MTAwNDI4NzU3MTA3NDY5NDU0Ij4iVVNCIHlhZGRhxZ/EsSBha3RpdmzJmcWfZGlyc8mZbml6LCBpc3RpZmFkyZkgZXRkaXlpbml6IGLJmXppIHTJmXRiaXFsyZlyIGRheWFuYSBiaWzJmXIgdsmZIFVTQiB5YWRkYcWfIGRlYWt0aXYgZWRpbMmZbsmZIHHJmWTJmXIgacWfbMmZbcmZecmZIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfZXJyb3JfdGl0bGUiIG1zZ2lkPSI3MzIzNjU4NDY5NjI2NTE0MjA3Ij4iVVNCIMmZbcmZbGl5eWF0xLEgdcSfdXJzdXpkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfb2siIG1zZ2lkPSI3Mzc2OTUzMTY3MDM5ODY1NzAxIj4iT0siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiJNZWRpYSBjaWhhesSxIGtpbWkgcW/Fn3VsZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE5NjA4MTcxOTIyMTYwNjQ4MzMiPiJLYW1lcmEga2ltaSBiYcSfbGFuxLFsZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2NkX2luc3RhbGxlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2Nzc0NzEyODI3ODkyMDkwNzU0Ij4iUXVyYcWfZMSxcsSxY8SxIGtpbWkgcW/Fn3VsdWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijc4NDgyMzY5NzQwODc2NTM2NjYiPiJVU0IgYWtzZXN1YXJhIHFvxZ91bGR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+IkRpZ8mZciBVU0Igc2XDp2ltbMmZcmkgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI5MDIwMDkyMTk2MDYxMDA3MjYyIj4iVVNCIHlhZGRhxZ/EsW5hIGZvcm1hdCBhdMSxbHPEsW4/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+IlNEIGthcnQgZm9ybWF0IGVkaWxzaW4/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkzNDAxNjg1MzQyNTc2MTA3OCI+IlVTQiB5YWRkYcWfxLFuxLF6ZGEgeWVybMmZxZ9kaXJpbG1pxZ8gYsO8dMO8biBmYXlsbGFyIHNpbGluyZljyZlrLiBCdSBhZGTEsW0gZ2VyaSBkw7Zuw7xsbcmZemRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4iS2FydMSxbsSxemRha8SxIGLDvHTDvG4gbcmZbHVtYXRsYXIgaXTJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X2J1dHRvbl9mb3JtYXQiIG1zZ2lkPSI0MTMxMDY0NTYwMTI3NDc4Njk1Ij4iRm9ybWF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NzI5MDQ0Nzc4OTQ5MTg5OTE4Ij4iVVNCIHNhemxhbWEgcW/Fn3VsdWR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxMDE2NjU0NjI3NjI2NDc2MTQyIj4iVVNCIGRlYmFxxLEgZGVha3RpdmFzaXlhIGV0bcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2lucHV0X21ldGhvZCIgbXNnaWQ9IjQ2NTMzODczMzY3OTEyMjI5NzgiPiJEYXhpbGV0bcmZIG1ldG9kdW51IHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iOTA5MTY1MjE1NzcyMjQ5NTExNiI+IkRheGlsZXRtyZkgw7xzdWxsYXLEsW7EsSBheWFybGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNjIwMzExMjQ3ODA5NTExNzYyNSI+IkZpemlraSBrbGF2aWF0dXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGFyZHdhcmUiIG1zZ2lkPSI3NTE3ODIxMDg2ODg4OTkwMjc4Ij4iSGFyZHdhcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfa2V5Ym9hcmRfbGF5b3V0X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE0MDczNjcwMTcyNjMwMzA3NzMiPiJLbGF2aWF0dXJhIHN4ZW1pIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9rZXlib2FyZF9sYXlvdXRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDY1OTA3NzAwNDQ5MjU3MDYzIj4iS2xhdmlhdHVyYSB0yZlydGliYXTEsSBzZcOnbcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfYWxwaGFiZXQiIG1zZ2lkPSI1NDMzMjc1NDg1NDk5MDM5MTk5Ij4iIEFCQ8OHREXGj0ZHxJ5IWEnEsEpLUUxNTk/DllBSU8WeVFXDnFZZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX251bWVyaWNfYWxwaGFiZXQiIG1zZ2lkPSI0MDMwMTcwNTI0NTk1MTIzNjEwIj4iIDAxMjM0NTY3ODlBQkPDh0RFxo9GR8SeSMSwSUpLTE1OT8OWUFFSU8WeVFXDnFZXWFlaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuZGlkYXRlc19zdHlsZSIgbXNnaWQ9IjQzMzM5MTMwODk2MzcwNjIyNTciPjx1PiJuYW1pesmZZGzJmXIiPC91Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ5ODE2MDA1MzUxNDY4NTYwIj4iVVNCIHlhZGRhxZ8gaGF6xLFybGFuxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NTc2MDM0MTg5NzA5OTQwNTAiPiJTRCBrYXJ0IGhhesSxcmxhbsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgyODczMTk4ODI5MjY3MzcwNTMiPiJTyZlodmzJmXIgeW94bGFuxLFsxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3Nzg4MDQwNzQ1Njg2MjI5MzA3Ij4iQm/FnyBVU0IgeWFkZGHFn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzgwNDc3ODM4MjQxMjEyOTk3Ij4iQm/FnyBTRCBrYXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzg0MDEyMTA2NzQyNzI2OTUwMCI+IlVTQiB5YWRkYcWfIGJvxZ9kdXIgdsmZIHlhIHNpc3RlbSB0yZlyyZlmaW5kyZluIGTJmXN0yZlrbMmZbm3JmXnJmW4gZmF5bCBzaXN0ZW1pbsmZIG1hbGlrZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODY0MTA2NTY0MTc4NjkyMzYwNCI+IlNEIGthcnQgYm/Fn2R1ciB2yZkgeWEgc2lzdGVtIHTJmXLJmWZpbmTJmW4gZMmZc3TJmWtsyZlubcmZecmZbiBmYXlsIHNpc3RlbWluyZkgbWFsaWtkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4iWsmZZMmZbGkgVVNCIHlhZGRhxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQxMDcyMzkwNjAxOTEwMDE4OSI+IlrJmWTJmWxpIFNEIGthcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTc5NTkxNzU3ODM5NTMzMzI4MCI+IlNEIHlhZGRhxZ8gesmZZMmZbMmZbmliLiBPbnUgZm9ybWF0IGV0bcmZecmZIMOnYWzEscWfxLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE3NTM4OTg1Njc1MjU1NjgyNTMiPiJTRCBrYXJ0IHrJmWTJmWzJmW5pYi4gT251IGZvcm1hdCBldG3JmXnJmSDDp2FsxLHFn8Sxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTY2MTY4MzAzMTMzMDk1MTA3MyI+IlVTQiB5YWRkYcWfxLEgZ8O2emzJmW5pbG3JmWTJmW4gw6fEsXhhcsSxbGTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NzIxNTI4ODI2MDQ0MDc4MzciPiJTRCBrYXJ0IGfDtnpsyZluaWxtyZlkyZluIMOnxLF4YXLEsWxkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MzI5ODQ4ODE5ODY1NTk0MjQxIj4iTcmZbHVtYXQgaXRraXNpbmluIHFhcsWfxLFzxLFuxLEgYWxtYXEgw7zDp8O8biBVU0IgeWFkZGHFn8SxIMOnxLF4YXJtYXpkYW4gyZl2dsmZbCBvbnUgZGVtb250YWogZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjAxODMyOTM3NDc0NDgyNDEiPiJEYXRhIGl0a2lzaW5pbiBxYXLFn8Sxc8SxbsSxIGFsbWFxIMO8w6fDvG4gU0Qga2FydMSxIMOnxLF4YXJtYWRhbiDDtm5jyZkgZGVtb250YWogZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTY3OTczODkzMjcwMzYwMjMwIj4iVVNCIHlhZGRhxZ8gw6fEsXhhcm1hcSDDvMOnw7xuIHTJmWhsw7xryZlzaXpkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY3Mjk4MDExMzA3OTA2MTYyMDAiPiJTRCBrYXJ0IHTJmWhsw7xryZlzaXogw6fEsXhhcsSxbGEgYmlsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTQyMTk1MzYxNjA2NDkzNTMwIj4iU2l6IFVTQiB5YWRkYcWfxLEgdMmZaGzDvGvJmXNpeiDDp8SxeGFyYSBiaWzJmXJzaW5pei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTY4ODQxMjc4MTM4Mzc3NjA0Ij4iU2l6IFNEIGthcnTEsSB0yZlobMO8a8mZc2l6IMOnxLF4YXJhIGJpbMmZcnNpbml6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NDg2Mzc3MjMwMTQwMjI3NjUxIj4iU2lsaW5tacWfIFVTQiB5YWRkYcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkwMjUxODAzMDQwNDM4MTMxOCI+IlNEIGthcnQgw6fEsXhhcsSxbGTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjY5MjExMjYxNjI1ODA1NzQxNDMiPiJVU0IgeWFkZGHFnyDDp8SxeGFyxLFsZMSxLiBZZW5pIG1lZGlhIMmZbGF2yZkgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiJTRCBrYXJ0IMOnxLF4YXLEsWxkxLEuIFllbmlzaW5pIGRheGlsIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbGlzdF9lbXB0eSIgbXNnaWQ9IjE2NzUzODgzMzA3ODY4NDEwNjYiPiJVecSfdW4gZ8mZbMmZbiBmyZlhbGl5ecmZdCB0YXDEsWxtYWTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSI4Nzg3MzUyMDc0MzI2NzQ4ODkyIj4ia29tcG9uZW50IGlzdGlmYWTJmXNpIHN0YXRpc3Rpa2FzxLFuxLEgZ8O8bmPJmWxsyZl5aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wa2dVc2FnZVN0YXRzIiBtc2dpZD0iMTEwNjYxMjQyNDI1NDI3NzYzMCI+IlTJmXRiaXHJmSB0b3BsYW5txLHFnyBpc3RpZmFkyZkgc3RhdGlzdGlrYXPEsW7EsSBkyZl5acWfbcmZecmZIGlta2FuIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgb2x1bm11ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM0MTAzNjMxMTIxMTQwNjY5MiI+Im3JmXptdW51IGtvcHlhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzOTA2OTcxMjQyODgzMTc4MzEiPiJUyZl0YmlxyZkga29udGVudGkga29weWFsYW1hcSDDvMOnw7xuIGRlZm9sdCBrb250ZXluZXIgc2VydmlzaW5pIMOnYcSfxLFybWFxIGljYXrJmXNpIHZlcmlyLiBOb3JtYWwgdMmZdGJpcWzJmXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbG1pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JvdXRlX21lZGlhX291dHB1dCIgbXNnaWQ9IjE2NDIwMjQ0NTU3NTA0MTQ2OTQiPiJNZWRpYSDDp8SxeMSxxZ/EsW7EsSB5w7ZubMmZbmRpcmlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iNDkzMjgxODc0OTU0NzI0NDM0NiI+IlTJmXRiaXHJmSBtZWRpYSDDp8SxeMSxxZ/EsW7EsSBkaWfJmXIgeGFyaWNpIGNpaGF6bGFyYSB5w7ZubMmZbmRpcm3JmWsgaW1rYW7EsSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9Ijc1NjU1NTIyMzc5Nzc4MTUwNDciPiJLZXlndWFyZCB0yZlobMO8a8mZc2l6IHlhZGRhxZ9hIMOnxLF4xLHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9IjU4NjYyNDU0ODQzMDMyODU3NjIiPiJUyZl0YmlxyZkga2VndWFyZCB0yZlobMO8a8mZc2l6IHlhZGRhxZ9hIMOnYXRtYcSfYSBpY2F6yZkgdmVyaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sX2tleWd1YXJkIiBtc2dpZD0iMTcyMTk1MTg0MjA3ODI4Mzg3Ij4iS2xhdmlhdHVyYSBraWxpZGluaW4gZ8O2csO8bG3JmXNpbmkgdsmZIGdpemzJmWRpbG3JmXNpbmkgaWRhcsmZIGVkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sX2tleWd1YXJkIiBtc2dpZD0iMzA0MzczMjI5MDUxODYyOTA2MSI+IlTJmXRiaXHJmSBrZWd1YXJkxLEgaWRhcsmZIGV0bcmZayBpY2F6yZlzaSB2ZXJpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiJab29tIG7JmXphcsmZdGkgw7zDp8O8biBpa2kgZMmZZsmZIHRveHVudW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnYWRnZXRfaG9zdF9lcnJvcl9pbmZsYXRpbmciIG1zZ2lkPSI0ODgyMDA0MzE0OTA2NDY2MTYyIj4iV2lkZ2V0IMmZbGF2yZkgZWRpbMmZIGJpbG3JmWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZ28iIG1zZ2lkPSI4MzIwODQ1NjUxNzM3MzY5MDI3Ij4iR2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9zZWFyY2giIG1zZ2lkPSI2NTgxMTAyNzE4MjI4MDc4MTEiPiJBeHRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fc2VuZCIgbXNnaWQ9IjIzMTYxNjY1NTYzNDkzMTQ0MjQiPiJHw7ZuZMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fbmV4dCIgbXNnaWQ9IjMxMzg4NDM5MDQwMDk4MTM4MzQiPiJOw7Z2YsmZdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX2RvbmUiIG1zZ2lkPSI4OTcxNTE2MTE3OTEwOTM0NjA1Ij4iVGFtYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3ByZXZpb3VzIiBtc2dpZD0iMTQ0MzU1MDAzOTI1MDEwNTk0OCI+IsaPdnbJmWxraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZGVmYXVsdCIgbXNnaWQ9IjI4NDA5MjE4ODU1NTgwNDU3MjEiPiLEsGNyYSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlhbF9udW1iZXJfdXNpbmciIG1zZ2lkPSI1Nzg5MTc2NDI1MTY3NTczNTg2Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JXM8L3hsaWZmOmc+IGlzdGlmYWTJmSBldG3JmWtsyZlcbm7Dtm1yyZkgecSxxJ/EsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfY29udGFjdF91c2luZyIgbXNnaWQ9IjQ5NDc0MDUyMjY3ODgxMDQ1MzgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz5pc3RpZmFkyZkgZWTJmXLJmWsga29udGFrdCB5YXJhZMSxblxuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2hlYWRlciIgbXNnaWQ9IjIxMDYxMDM4MTc5Mzc4NTk2NjIiPiJBxZ9hxJ/EsWRha8SxIGJpciB2yZkgeWEgZGFoYSDDp294IHTJmXRiaXFsyZlywqBpbmRpIHbJmSBnyZlsyZljyZlrZMmZIGhlc2FixLFuxLF6YSBkYXhpbCBvbG1hcSDDvMOnw7xuIGljYXrJmSBpc3TJmXlpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudF9jcmVkZW50aWFsc19wZXJtaXNzaW9uX21lc3NhZ2VfZm9vdGVyIiBtc2dpZD0iMzEyNTIxMTM0MzM3OTM3NjU2MSI+IkJ1IGlzdMmZecmZIGl6biB2ZXJtyZlrIGlzdMmZeWlyc2luaXo/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfcGVybWlzc2lvbnNfaGVhZGVyX3RleHQiIG1zZ2lkPSI2ODc0NDk3NDA4MjAxODI2NzA4Ij4iR2lyacWfIHNvcsSfdXN1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3ciIG1zZ2lkPSI3MjI1OTQ4ODExMjk2Mzg2NTUxIj4ixLBjYXrJmSB2ZXJpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4iUsmZZGQgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjQ4Njc1OTc5NTkyNjIzNzkwNyI+IsSwY2F6yZkgdMmZbMmZYiBvbHVudXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIG1zZ2lkPSI4NTMwMzkzMTM5NjM5NTYwMTg5Ij5cbiIgaGVzYWLEsSDDvMOnw7xuPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiVzPC94bGlmZjpnPiBpY2F6yZkgc29yxJ91c3UgZ8O2bmTJmXJpbGRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImlucHV0X21ldGhvZF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTI4MzU1NzE3OTk0NDk5MjY0OSI+IkRheGlsZXRtyZkgbWV0b2R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMzY4Nzk2OTEzODM3NTA5MjQyMyI+IlNpbnhyb25pemFzaXlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iNDE0ODEyMDc0MjA5NjQ3NDY0MSI+IsaPbMOnYXTEsW1sxLFsxLFxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4iRGl2YXIga2HEn8SxesSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iRGl2YXIga2HEn8SxesSxbsSxIGTJmXlpxZ9pbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IkJpbGRpcmnFnyBkaW5syZl5yZluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gYWt0aXZsyZnFn2RpcmlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IHTJmXLJmWZpbmTJmW4gYWt0aXZsyZnFn2RpcmlsaWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLFnsmZYsmZa8mZbmkgaWRhcsmZIGV0bcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHRfbG9uZyIgbXNnaWQ9IjY0MDczNTEwMDYyNDkxNzQ0NzMiPiI8eGxpZmY6ZyBpZD0iU0VTU0lPTiI+JXM8L3hsaWZmOmc+IHNlc3NpeWF5YSBxb8WfdWx1ZHVyLiDFnsmZYsmZa8mZbmkgaWRhcsmZIGV0bcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDQzNDM4OTY0NDQwOTYwNzQ1Ij4iSMmZbWnFn8mZIGFrdGl2IFZQTiBiYcSfbGFuxLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiJWUE4gYmHEn2xhbnTEsXPEsSBoyZltacWfyZkgYWt0aXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fZXJyb3IiIG1zZ2lkPSI2MDA5MjQ5ODE0MDM0NzA4MTc1Ij4iSMmZbWnFn8mZIGFrdGl2IFZQTiB4yZl0YXPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25maWciIG1zZ2lkPSI2NDE1ODk5MTUwNjcxNTM3OTcwIj4iS29uZmlxdXLJmSBldG3JmWsgw7zDp8O8biB0b3h1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVwbG9hZF9maWxlIiBtc2dpZD0iMjg5Nzk1NzE3MjM2NjczMDQxNiI+IkZheWwgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fZmlsZV9jaG9zZW4iIG1zZ2lkPSI2MzYzNjQ4NTYyMTcwNzU5NDY1Ij4iSGXDpyBiaXIgZmF5bCBzZcOnaWxtyZl5aWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXNldCIgbXNnaWQ9IjI0NDgxNjgwODA5NjQyMDk5MDgiPiJTxLFmxLFybGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3VibWl0IiBtc2dpZD0iMTYwMjMzNTU3MjA4OTkxMTk0MSI+IkfDtm5kyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FyX21vZGVfZGlzYWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzMTY0NzY4MjEyMDAzODY0MzE2Ij4iQXZ0b21vYmlsIHJlamltaSBha3RpdmRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4MDM1MjMwNTM3NTYzNTAzMjYyIj4iQXZ0b21vYmlsIHJlamltaW5kyZluIMOnxLF4bWFxIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzMTQ2Njk0MjM0Mzk4MjAyNjAxIj4iVGV6ZXJpbnEgdsmZIHlhIGhvdHNwb3QgYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjY4NTcwMzE3NjAxMDMwNjI5ODIiPiJRdXJhxZ9kxLFybWFxIMO8w6fDvG4gdG94dW51bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjIzMDA0NzAwMDQ1MDMzNDM0MzkiPiJHZXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV4dF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMDgwNTU1MTA0Njc3OTkyNDA4Ij4iTsO2dmLJmXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2tpcF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMjc1MzYyMjk5NDcxNjMxODE5Ij4iS2XDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlX3dhcm5pbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDg5MDg5NDI2NzQ1NDg2NzI3NiI+IlnDvGtzyZlrIG1vYmlsIGRhdGEgaXN0aWZhZMmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMzM0MDgyMjIyODU5OTMzNzc0MyI+Ik1vYmlsIGRhdGEgaXN0aWZhZMmZc2kgaGFxccSxbmRhIGRhaGEgw6dveCDDtnlyyZlubcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjYyNjk1NDE4OTc3Mjk3ODEzMzIiPiJNb2JpbCBkYXRhIGxpbWl0aSBrZcOnaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjU0NDM0NTczMjEzNTQ5MDcxODEiPiJNb2JpbCBkYXRhIGlzdGlmYWTJmXNpIGhhcXHEsW5kYSBkYWhhIMOnb3ggw7Z5csmZbm3JmWsgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX21hdGNoZXMiIG1zZ2lkPSI4MTI5NDIxOTA4OTE1ODQwNzM3Ij4iVXnEn3VubHVxIHlveGR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmRfb25fcGFnZSIgbXNnaWQ9IjE5NDY3OTkyMzM4MjI4MjAzODQiPiJTyZloaWbJmWTJmSB0YXAiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im1hdGNoZXNfZm91bmQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTY3MTQ3MDgxMTM2NTc5NDM5Ij4iMSB1ecSfdW5sdXEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ2NDE4NzI3OTcwNjc2MDkxNzciPiI8eGxpZmY6ZyBpZD0iSU5ERVgiPiVkPC94bGlmZjpnPiDJmWTJmWRkyZluIDx4bGlmZjpnIGlkPSJUT1RBTCI+JWQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21vZGVfZG9uZSIgbXNnaWQ9IjcyMTc1ODE2NDA0NjE5MjIyODkiPiJIYXrEsXJkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4iVVNCIHlhZGRhxZ/EsSBxYWxkxLFyxLFsxLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMjc4OTQ5OTg0MDk1MzcxOTAiPiJTRCBrYXJ0IGRlbW9udGFqIGVkaWxpci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDUyMTU3MzMyMTUyNDM0MDA1OCI+IlVTQiB5YWRkYcWfIHNpbGluaXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjU5Njk4ODg3NTUwNzA0MzA0MiI+IlNEIGthcnQgc2lsaW5pci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2Mjk5NzY5NTYzNjI0Nzc2OTQ4Ij4iVVNCIHlhZGRhxZ/EsSBzaWxpbsmZIGJpbG3JmWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMTUyNDg2OTY2NDQ1MTA5MzUiPiJTRCBrYXJ0xLEgc2lsbcmZayBtw7xta8O8biBvbG1hZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2JhZF9yZW1vdmFsIiBtc2dpZD0iNzk2MDg2NDA2MTAxNjYwMzI4MSI+IlNEIGthcnQgZGVtb250YWogZWRpbG3JmWTJmW4gw7ZuY8mZIMOnxLF4YXLEsWxkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDE4MTg4NzIwMDA5NTY5NjkzIj4iVVNCIHlhZGRhxZ8gaGF6xLFyZGEgeW94bGFuxLFsxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMzNDc2MjUwMzkwNDgyNzQ4MSI+IlNEIGthcnQgaGF6xLFyZGEgeW94bGFuxLFsxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JlbW92ZWQiIG1zZ2lkPSI3MDAxNTI2OTA1MDU3OTUyMDk3Ij4iU0Qga2FydCDDp8SxeGFyxLFsxLFiLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI1ODMwODE0MzQ5MjUwODM0MjI1Ij4iU0Qga2FydCBoYXrEsXJkYSBrb21ww7x0ZXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MDYxMzA1NjgxMzM1NDA0MzUiPiJTRCBrYXJ0IGhhbC1oYXrEsXJkYSBrb21ww7x0ZXIgdMmZcsmZZmluZMmZbiBpc3RpZmFkyZkgZWRpbGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Vua25vd25fc3RhdGUiIG1zZ2lkPSI3MjkxOTI3ODIxOTcyOTAzODUiPiJOYW3JmWx1bSB2yZl6aXl5yZl0ZMmZIHhhcmljaSBtZWRpYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZSIgbXNnaWQ9IjE3Nzg2ODY2MTgyMzAwMTE5NjQiPiJQYXlsYcWfxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZCIgbXNnaWQ9IjQ4MDgyNzA5MDAzMjI5ODU5NjAiPiJUYXDEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWJzZWFyY2giIG1zZ2lkPSI0MzM3MTU3OTc3NDAwMjExNTg5Ij4iVmViIEF4dGFyxLHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmRfbmV4dCIgbXNnaWQ9IjU3NDIxMjQ2MTg5NDIxOTM5NzgiPiJTb25yYWvEsW7EsSB0YXAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX3ByZXZpb3VzIiBtc2dpZD0iMjE5NjcyMzY2OTM4ODM2MDUwNiI+IsaPdnbJmWxraW5pIHRhcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGlja2VyIiBtc2dpZD0iNTYyMjY4MzkxMjYxNjQ5NjE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4gdMmZcsmZZmluZMmZbiBtyZlrYW4gc29yxJ91c3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZlRpdGxlIiBtc2dpZD0iNTQ0Njg1ODcxNzE1NzQxNjgzOSI+Ik3JmWthbiBzb3LEn3VzdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmTWVzc2FnZSIgbXNnaWQ9IjEzNzQ3MTgwMjMyMjQwMDA3MDIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4gKDx4bGlmZjpnIGlkPSJTRVJWSUNFIj4lMiRzPC94bGlmZjpnPikgdMmZcsmZZmluZMmZbiB0yZlsyZliIGVkaWxpYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc1ZlcmlmWWVzIiBtc2dpZD0iMjM0NjU2NjA3Mjg2NzIxMzU2MyI+IkLJmWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZObyIgbXNnaWQ9IjExNDY1NjQ5MzczNDY0NTQ4NjUiPiJYZXlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY190b29fbWFueV9kZWxldGVzIiBtc2dpZD0iNTI5NjMyMTg1MDY2Mjc0Njg5MCI+IkxpbWl0aSBrZcOnyZluaSBzaWxpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlc19kZXNjIiBtc2dpZD0iNDk2NTUxNjcxMDA4Njk0MjQ1Ij4iPHhsaWZmOmcgaWQ9IlRZUEVfT0ZfU1lOQyI+JTIkczwveGxpZmY6Zz4gw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSX09GX0RFTEVURURfSVRFTVMiPiUxJGQ8L3hsaWZmOmc+IHNpbGlubWnFnyBmYXlsIHZhciwgPHhsaWZmOmcgaWQ9IkFDQ09VTlRfTkFNRSI+JTMkczwveGxpZmY6Zz4gaGVzYWLEsS4gTsmZIGV0bcmZayBpc3TJmXlpcnNpbml6PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfcmVhbGx5X2RlbGV0ZSIgbXNnaWQ9IjI1NzI2MDAxMDMxMjI1OTYyNDMiPiJFbGVtZW50bMmZcmkgc2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY191bmRvX2RlbGV0ZXMiIG1zZ2lkPSIyOTQxMzE3MzYwNjAwMzM4NjAyIj4iU2lsaW7JmW5syZlyaSBnZXJpIHFheXRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfZG9fbm90aGluZyIgbXNnaWQ9IjM3NDM3NjQ3NDA0MzA4MjE4NDUiPiLEsG5kaWxpayBoZcOnIG7JmSBldG3JmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9hY2NvdW50X2xhYmVsIiBtc2dpZD0iNTY1NTIwMzA4OTc0NjQyMzkyNyI+Ikhlc2FiIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2xhYmVsIiBtc2dpZD0iMjkzNTI2NzM0NDg0OTk5MzU1MyI+Ikhlc2FiIMmZbGF2yZkgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfYWNjb3VudF9idXR0b25fbGFiZWwiIG1zZ2lkPSIzNjExOTgyODk0ODUzNDM1ODc0Ij4iSGVzYWIgyZlsYXbJmSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iMjQxMjA3MjI3MjgzMjI4NDMxMyI+IkFydMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfZGVjcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjQ3NjA1MDc3ODM4Njc3OTA2NyI+IkF6YWxkxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfc2Nyb2xsX21vZGUiIG1zZ2lkPSIzMDczMTAxMDY3NDQxNjM4NDI4Ij4iPHhsaWZmOmcgaWQ9IlZBTFVFIj4lczwveGxpZmY6Zz4gdG94dW51biB2yZkgYmFzYXJhcSBzYXhsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfc2Nyb2xsX2FjdGlvbiIgbXNnaWQ9IjkxMDE0NzMwNDU4OTE4MzU0OTAiPiJBcnTEsXJtYXEgw7zDp8O8biB5dXhhcsSxLCBhemFsdG1hcSDDvMOnw7xuIGHFn2HEn8SxIHPDvHLDvMWfZMO8csO8bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfbWludXRlX2J1dHRvbiIgbXNnaWQ9Ijg4NjU4ODUxMTQwMjg2MTQzMjEiPiJEyZlxaXHJmSBhcnTEsXLEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfbWludXRlX2J1dHRvbiIgbXNnaWQ9IjYyNDY4MzQ5MzcwODA2ODQ3OTEiPiJEyZlxaXHJmW5pIGF6YWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X2hvdXJfYnV0dG9uIiBtc2dpZD0iMzY1MjA1NjA1NTgxMDIyMzEzOSI+IlNhYXTEsSBhcnTEsXLEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIxMzc3NDc5ODYzNDI5MjE0NzkyIj4iU2FhdMSxIGF6YWxkxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X3NldF9wbV9idXR0b24iIG1zZ2lkPSI0MTQ3NTkwNjk2MTUxMjMwODYzIj4iUE0gcXVydW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfc2V0X2FtX2J1dHRvbiIgbXNnaWQ9IjgzMDIxNDAzNTM1Mzk0ODY3NTIiPiJBTSBxdXJ1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9tb250aF9idXR0b24iIG1zZ2lkPSI1MzY5OTk4NDc5MDY3OTM0MTEwIj4iQXJ0bWEgYXnEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF9tb250aF9idXR0b24iIG1zZ2lkPSIxODMyNjk4OTk1NTQxNzI2MDE5Ij4iQXnEsSBhemFsZMSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNzEzMDQ2NTQxMjMwODE3MzkwMyI+IkFydG1hIGfDvG7DvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNDEzMTg4MTUyMTgxODc1MDAzMSI+IkF6YWxtYSBnw7xuw7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfeWVhcl9idXR0b24iIG1zZ2lkPSI2MzE4Njk3Mzg0MzEwODA4ODk5Ij4iQXJ0xLFtIGlsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF95ZWFyX2J1dHRvbiIgbXNnaWQ9IjQ0ODIwMjE4MTM0OTExMjE3MTciPiJBemFsbWEgaWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiJMyZnEn3YgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4iU2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiJIYXrEsXJkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4iUmVqaW0gZMmZeWnFn2lrbGl5aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRGF4aWwgb2x1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlTJmXRiaXEgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iQnVudW5sYSBwYXlsYcWfxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4gaWzJmSBwYXlsYcWfxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IlPDvHLDvMWfyZluIHF1bHAuIFRveHVuYXJhcSBiYXPEsWzEsSB0dXR1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IMO8w6fDvG4geXV4YXLEsSBzw7xyw7zFn2TDvHLDvG4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IMO8w6fDvG4gYcWfYcSfxLEgc8O8csO8xZ9kw7xyw7xuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDDvMOnw7xuIHNvbGEgc8O8csO8xZ9kw7xyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gw7zDp8O8biBzYcSfYSBzw7xyw7zFn2TDvHIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJLaWxpZGkgYcOnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTyZlzc2l6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IlPJmXMgYcOnxLFxZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iQXh0YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gdnVydW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IlBhcm9sbGFyxLFuIHPJmXNsyZluZGlyaWxtyZlzaSDDvMOnw7xuIHF1bGFxbMSxcWxhcsSxIHRheMSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJOw7ZxdMmZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUyOTM2MDA0OTY2MDE0OTAyMTYiPiJFdsmZIGdlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl91cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyMzc0OTY1NjI5NTIxNTI1ODkiPiJZdXhhcsSxIGdlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21lbnVfb3ZlcmZsb3dfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMjk1NjU5MDM3NTA5MDA4NDUzIj4ixo9sYXbJmSBzZcOnaW1syZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9Ijc5NjU5ODQzNjA5MDM2OTM5MDMiPiIlMSRzLCAlMiRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX3N1YnRpdGxlX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9IjY5ODU1NDY1MzA0NzE3ODA3MjciPiIlMSRzLCAlMiRzLCAlMyRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9pbnRlcm5hbCIgbXNnaWQ9IjQ4OTE5MTY4MzM2NTc5MjkyNjMiPiJEYXhpbGkgeWFkZGHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2Vfc2RfY2FyZCIgbXNnaWQ9IjMyODI5NDg4NjEzNzgyODY3NDUiPiJTRCBrYXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV91c2IiIG1zZ2lkPSIzMDE3OTU0MDU5NTM4NTE3Mjc4Ij4iVVNCIHlhZGRhxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRyYWN0X2VkaXRfbWVudV9idXR0b24iIG1zZ2lkPSI4OTQwNDc4NzMwNDk2NjEwMTM3Ij4iUmVkYWt0yZkgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSIxOTU1NjM4ODYyMTIyMjMyMzQyIj4iRGF0YSBpc3RpZmFkyZkgeMmZYsmZcmRhcmzEscSfxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfYm9keSIgbXNnaWQ9IjI4MTQ2NzM1NTE0NzE5Njk5NTQiPiLEsHN0aWZhZMmZIHbJmSBheWFybGFyxLEgZ8O2cm3JmWsgw7zDp8O8biB0b3h1bnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF90aXRsZSIgbXNnaWQ9IjcwOTMzMzQ0MTk1MTg3MDY2ODYiPiIyRy0zRyBkYXRhIGRlYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzYzNjQ4OTQzNjgxOTQ3MDc2MSI+IjRHIGRhdGEgZGVha3RpdiBlZGlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF90aXRsZSIgbXNnaWQ9Ijc4Njk0MDI1MTkzOTE2MzE4ODQiPiJNb2JpbCBkYXRhIGRlYWt0aXZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfdGl0bGUiIG1zZ2lkPSI4OTkyMTU0NzM2NDQxMjg0ODY1Ij4iV2ktRmkgZGF0YSBkZWFrdGl2IGVkaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfYm9keSIgbXNnaWQ9IjMzMTc5NjQ3MDY5NzM2MDEzODYiPiJBa3RpdmzJmcWfZGlybcmZayDDvMOnw7xuIHRveHVudW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iNzAyNjczOTEyMTEzODAwNTIzMSI+IjJHLTNHIGRhdGEgbGltaXRpIGHFn8SxbMSxYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjExMDY1NjI3NzkzMTEyMDkwMzkiPiI0RyBkYXRhIGxpbWl0aSBrZcOnaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIyNzkyNDA1NzIxNjU0MTIxNjgiPiJNb2JpbCBkYXRhIGxpbWl0aSBrZcOnaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+IldpLUZpIGRhdGEgbGltaXRpIGtlw6dpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9zbm9vemVkX2JvZHkiIG1zZ2lkPSI3MDM1NDkwMjc4Mjk4NDQxNzY3Ij4iPHhsaWZmOmcgaWQ9IlNJWkUiPiVzPC94bGlmZjpnPiBtw7zJmXl5yZluIGVkaWxtacWfIGxpbWl0IGHFn8Sxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfdGl0bGUiIG1zZ2lkPSI1OTY1MTU3MzYxMDM2MzIxOTE0Ij4iQXJ4YXBsYW4gZGF0YXPEsSBtyZloZHVkbGHFn2TEsXLEsWxkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfYm9keSIgbXNnaWQ9IjY3NDE1MjEzMzA5OTc0NTI5OTAiPiJNyZloZHVkaXl5yZl0aSBhcmFkYW4gcWFsZMSxcm1hcSDDvMOnw7xuIHRveHVudW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGUiIG1zZ2lkPSI2NTEwMDQwNDg2MDQ5MjM3NjM5Ij4iVMmZaGzDvGvJmXNpemxpayBzZXJ0aWZpa2F0xLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGVfaXNfdmFsaWQiIG1zZ2lkPSI2ODI1MjYzMjUwNzc0NTY5MzczIj4iQnUgc2VydGlmaWthdCBldGliYXJsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF90byIgbXNnaWQ9IjQ1NDIzOTQ4MDI3NDkyMTAzMiI+IlZlcmlsaWI6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tbW9uX25hbWUiIG1zZ2lkPSIyMjMzMjA5Mjk5NDM0MTcyNjQ2Ij4iw5xtdW1pIGFkOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ19uYW1lIiBtc2dpZD0iNjk3MzU2MTE5MDc2MjA4NTIzNiI+IlTJmcWfa2lsYXQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnX3VuaXQiIG1zZ2lkPSI3MjY1OTgxODkwNDIyMDcwMzgzIj4iVMmZxZ9raWxhdGkgdmFoaWQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX2J5IiBtc2dpZD0iMjY0NzU4NDk4ODA1NzQ4MTU2NiI+IlTJmXLJmWZpbmTJmW4gdmVyaWxpYjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2YWxpZGl0eV9wZXJpb2QiIG1zZ2lkPSI4ODE4ODg2MTM3NTQ1OTgzMTEwIj4iS2XDp8mZcmxpbGlrOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9vbiIgbXNnaWQ9IjU4OTUwMTc0MDQzNjEzOTcyMzIiPiJEyZlyYyBvbHVudWI6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXhwaXJlc19vbiIgbXNnaWQ9IjM2NzYyNDI5NDk5MTU5NTk4MjEiPiJCaXRtyZkgdmF4dMSxOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcmlhbF9udW1iZXIiIG1zZ2lkPSI3NTg4MTQwNjc2NjA4NjI0OTMiPiJTZXJpeWEgbsO2bXLJmXNpOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50cyIgbXNnaWQ9IjQ1MTYwMTk2MTk4NTA3NjMwNDkiPiJCYXJtYXEgaXpsyZlyaToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGEyNTZfZmluZ2VycHJpbnQiIG1zZ2lkPSI0MzkxMjcxMjg2NDc3Mjc5MjYzIj4iU0hBLTI1NiBiYXJtYXEgaXppOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTFfZmluZ2VycHJpbnQiIG1zZ2lkPSI3OTMwMzMwMjM1MjY5NDA0NTgxIj4iU0hBLTEgYmFybWFxIGl6aToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfc2VlX2FsbCIgbXNnaWQ9IjQyOTI1NjkzODM5NzY2MzYyMDAiPiJIYW3EsXPEsW7EsSBzZcOnxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNDcxMDAxMzg2NDk3NDA0MDYxNSI+IkbJmWFsaXl5yZl0aSBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV9hY3Rpb25fcHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjUyNDc2ODQ0MzU5NzkxNDkyMTYiPiJCdW51bmxhIHBheWxhxZ/EsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2RldmljZV9sb2NrZWQiIG1zZ2lkPSIzMDkyNzAzNDQ4NjkwNjY5NzY4Ij4iQ2loYXoga2lsaWRsyZluZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGlzdF9kZWxpbWV0ZXIiIG1zZ2lkPSIzOTc1MTE3NTcyMTg1NDk0MTUyIj4iLCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZW5kaW5nIiBtc2dpZD0iMzI0NTY1MzY4MTAwODIxODAzMCI+IkfDtm5kyZlyaWxpci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaEJyb3dzZXJEZWZhdWx0IiBtc2dpZD0iMjA1Nzk1MTk0NzI5NzYxNDcyNSI+IkJyYXV6ZXIgacWfyZkgc2FsxLFuc8Sxbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJTZXR1cENhbGxEZWZhdWx0IiBtc2dpZD0iNTgzNDk0ODQ2OTI1Mzc1ODU3NSI+IlrJmW5naSBxyZlidWwgZWTJmWs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfcmVzb2x2ZXJfdXNlX2Fsd2F5cyIgbXNnaWQ9IjgwMTc3NzA3NDc4MDE0OTQ5MzMiPiJIyZltacWfyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9yZXNvbHZlcl91c2Vfb25jZSIgbXNnaWQ9IjI0MDQ2NDQ3OTcxNDkxNzM3NTgiPiJTYWTJmWPJmSBiaXIgZMmZZsmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjE3MDUzODk4MTY3MTI3NDcxIj4iUGxhbsWfZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjM5MjkxMjczNDIwMTQwMTIzIj4iVGVsZWZvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9oZWFkcGhvbmVzIiBtc2dpZD0iODExOTk3MTg0MzgwMzQzOTExMCI+IlF1bGFxbMSxcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9kb2NrX3NwZWFrZXJzIiBtc2dpZD0iNjI0MDYwMjk4MjI3NjU5MTg2NCI+IkRvayBzcGlrZXJsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9tZWRpYV9yb3V0ZV9uYW1lX2hkbWkiIG1zZ2lkPSIyNDUwOTcwMzk5MDIzNDc4MDU1Ij4iSERNSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTaXN0ZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkJsdWV0b290aCBhdWRpbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iU2ltc2l6IGVrcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IkhhesSxcmTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNZWRpYSDDp8SxeMSxxZ/EsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJTa2FuIGVkaWxpci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IlFvxZ91bHVyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLGj2zDp2F0xLFtbMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI2NzM5ODk5OTYyNjgxODg2NDAxIj4ixo9sw6dhdMSxbWzEsSBkZXlpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19pbl91c2UiIG1zZ2lkPSI0NTMzNzg2MDMxMDkwMTk4MDYzIj4ixLBzdGlmYWTJmSBvbHVudXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfYnVpbHRfaW5fZGlzcGxheV9uYW1lIiBtc2dpZD0iMjU4MzEzNDI5NDI5MjU2Mzk0MSI+IkRheGlsaSBla3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9oZG1pX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjE1NTUyNjQ1NTkyMjc0NzAxMDkiPiJIRE1JIEVrcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IsOWcnTDvGsgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCB0yZlobMO8a8mZc2l6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJTaW1zaXogZWtyYW4gcW/Fn3VsdWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iQnUgZWtyYW4gZGlnyZlyIGNpaGF6ZGEgZ8O2c3TJmXJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJCYcSfbGFudMSxbsSxIGvJmXNpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iVMmZY2lsaSB6yZluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IsWeYWJsb251IHVudXRtdcWfYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IllhbmzEscWfIE1vZGVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4iWWFubMSxxZ8gxZ5pZnLJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJQSU4gc8mZaHZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJGQ8L3hsaWZmOmc+IHNhbml5yZkgc29ucmEgeWVuaWTJmW4gY8mZaGQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+IsWeYWJsb251bnV6dSDDp8mZa2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iU0lNIFBJTiBrb2R1IGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IlDEsE4ga29kdSBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IlBhcm9sIGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJTSU0gaW5kaSBkZWFrdGl2ZGlyLiBEYXZhbSBldG3JmWsgw7zDp8O8biBQVUsga29kdSBkYXhpbCBlZGluLiDGj2xhdsmZIG3JmWx1bWF0IMO8w6fDvG4gb3BlcmF0b3JhIG3DvHJhY2nJmXQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4ixLBzdMmZZGl5aW5peiBQxLBOIGtvZHUgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLEsHN0yZlkaXlpbml6IFBJTiBrb2R1IHTJmXNkaXFsyZl5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlPEsE0ga2FydMSxbiBraWxpZGkgYcOnxLFsxLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iWWFubMSxxZ8gUMSwTiBrb2QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iNC1kyZluIDgtyZkgccmZZMmZciByyZlxyZltaSBvbGFuIFBJTiB5YXrEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIGtvZCA4IHLJmXHJmW0gdsmZIHlhIGRhaGEgw6dveCBvbG1hbMSxZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJEw7x6Z8O8biBQVUsga29kdSB5ZW5pZMmZbiBkYXhpbCBlZGluLiBUyZlrcmFybGFuYW4gY8mZaGRsyZlyIFNJTVwnaSBiaXJkyZlmyZlsaWsgc8SxcmFkYW4gw6fEsXhhcmFjYXEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiBrb2RsYXLEsSB1ecSfdW4gZGV5aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJIyZlkZGluZMmZbiDDp294IGPJmWhkIGVkaWxkaSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIEdvb2dsZSBoZXNhYsSxbsSxeiBpbMmZIGRheGlsIG9sdW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLEsHN0aWZhZMmZw6dpIGFkxLEgKGUtcG/Dp3QpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLFnmlmcsmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiJEYXhpbCBvbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4iWWFubMSxxZ8gaXN0aWZhZMmZw6dpIGFkxLEgdsmZIHlhIHBhcm9sLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLEsHN0aWZhZMmZw6dpIGFkxLFuxLF6xLEgdsmZIHlhIHBhcm9sdW51enUgdW51dG11c3VudXo/XG4gIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iIGxpbmtpbsmZIGRheGlsIG9sdW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4iSGVzYWIgeW94bGFuxLFsxLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJQSU4ga29kdW51enUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIGRheGlsIGV0ZGluaXouXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSB5ZW5pZMmZbiB5b3hsYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4ixZ5pZnLJmW5pemkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIGRheGlsIGV0ZGluaXouIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJNb2RlbGluaXppIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyDDp8mZa21pc2luaXouXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSB5ZW5pZMmZbiB5b3hsYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiJTaXogcGxhbsWfZXQga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHXEn3Vyc3V6IGPJmWhkIGV0bWlzaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZMmZZsmZIGTJmSB1xJ91cnN1eiBjyZloZCBldHPJmW5peiwgcGxhbsWfZXQgZmFicmlrIGF5YXJsYXLEsW5hIHPEsWbEsXJsYW5hY2FxIHbJmSBiw7x0w7xuIG3JmWx1bWF0bGFyxLFuxLF6IGl0yZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiJTaXogdGVsZWZvbiBraWxpZGluaSBhw6dtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgdcSfdXJzdXogY8mZaGQgZXRtaXNpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkyZlmyZkgZMmZIHXEn3Vyc3V6IGPJmWhkIGV0c8mZbml6LCB0ZWxlZm9uIGZhYnJpayBheWFybGFyxLFuYSBzxLFmxLFybGFuYWNhcSB2yZkgYsO8dMO8biBtyZlsdW1hdGxhcsSxbsSxeiBpdMmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IlNpeiBwbGFuxZ9ldCBraWxpZGluaSBhw6dtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHXEn3Vyc3V6IGPJmWhkIGV0bWlzaW5pei4gUGxhbsWfZXQgZmFicmlrIGF5YXJsYXLEsW5hIHPEsWbEsXJsYW5hY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IlNpeiB0ZWxlZm9udW4ga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHlhbmzEscWfIGPJmWhkIGV0bWlzaW5pei4gVGVsZWZvbiBhcnTEsXEgZGVmb2x0IHphdm9kIGhhbMSxbmEgc8SxZsSxcmxhbmFjYXEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IlNpeiBraWxpZGkgYcOnbWFxIMO8w6fDvG4gxZ9hYmxvbnUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHPJmWh2IMOnyZlrZGluaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGRhaGEgdcSfdXJzdXogY8mZaGRkyZluIHNvbnJhIHBsYW7Fn2V0aW5pemluIGtpbGlkaW5pIGUtcG/Dp3QgaGVzYWLEsW7EsXpsYSBhw6dtYXEgdMmZbMmZYiBvbHVuYWNhcS5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIGJpciBkYWhhIHlveGxhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlNpeiBhcnTEsXEgbW9kZWxpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldG1pc2luaXouPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZMmZZsmZIGTJmSB5YW5sxLHFnyBkYXhpbCBldHPJmW5peiwgdGVsZWZvbnVuIGtpbGlkaW5pbiBhw6fEsWxtYXPEsSDDvMOnw7xuIGVsZWt0cm9uIHBvw6d0IMO8bnZhbsSxbsSxeiB0yZlsyZliIG9sdW5hY2FxLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4gY8mZaGQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiAtICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iWcSxxJ/EscWfZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhZmVfbWVkaWFfdm9sdW1lX3dhcm5pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzI0MTYxOTM5NDc1NDc4MDY2Ij4iU8mZcyBnw7xjw7wgdMO2dnNpecmZIGVkaWzJmW4gc8mZdml5ecmZZMmZbiBhcnTEsXLEsWxzxLFuP1xuVXp1biBtw7xkZMmZdCB5w7xrc8mZayBzyZlzIGfDvGPDvCBpbMmZIGRpbmzJmW3JmSBTaXppbiBlxZ9pdG3JmSBxYWJpbGl5ecmZdGluaXrJmSBtyZluZmkgdMmZc2lyIGVkyZkgYmlsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRpbnVlX3RvX2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTYyNjQyNzM3MjMxNjA3MDI1OCI+IsaPbMOnYXTEsW1sxLHEn8SxIGFrdGl2bMmZxZ9kaXJtyZlrIMO8w6fDvG4gaWtpIGJhcm1hxJ/EsW7EsXrEsSBiYXPEsWzEsSBzYXhsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9lbmFibGVkIiBtc2dpZD0iMTM4MTk3MjA0ODU2NDU0NzY4NSI+IsaPbMOnYXTEsW1sxLFsxLFxIGFrdGl2bMmZxZ9kaXJpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2FjY2Vzc2liaWxpdHlfY2FuY2VsZWQiIG1zZ2lkPSIzODMzOTIzMjU3OTY2NjM1NjczIj4iR2lyacWfIGlta2FuxLEgbMmZxJ92IGVkaWxpYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IkNhcmkgaXN0aWZhZMmZw6dpIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvd25lcl9uYW1lIiBtc2dpZD0iMjcxNjc1NTQ2MDM3NjAyODE1NCI+IlNhaGliIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXJyb3JfbWVzc2FnZV90aXRsZSIgbXNnaWQ9IjQ1MTAzNzMwODMwODI1MDAxOTUiPiJYyZl0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub19yZXN0cmljdGVkX2FjY291bnRzIiBtc2dpZD0iNTczOTQ2MzI0OTY3MzcyNzczNiI+IkJ1IHTJmXRiaXEgbcmZaGR1ZCBwcm9maWxsyZlyIMO8w6fDvG4gaGVzYWJsYXLEsSBkyZlzdMmZa2zJmW1pci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbm90X2ZvdW5kIiBtc2dpZD0iMzQyOTE0MTg1MzQ5ODkyNzM3OSI+IkJ1IMmZbcmZbGl5eWF0xLEgaWRhcsmZIGV0bcmZayDDvMOnw7xuIGhlw6cgYmlyIHTJmXRiaXEgdGFwxLFsbWFkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmV2b2tlIiBtc2dpZD0iNTQwNDQ3OTE4NTIyODI3MTU4NiI+IkzJmcSfdiBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMCIgbXNnaWQ9Ijc4NzU0Mjc0ODk0MjA4MjE3OTMiPiJJU08gQTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2ExIiBtc2dpZD0iMzc2MDczNDQ5OTA1MDg3NTM1NiI+IklTTyBBMSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTIiIG1zZ2lkPSI1OTczMjY2Mzc4MDIwMTQ0MzgyIj4iSVNPIEEyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMyIgbXNnaWQ9IjEzNzM0MDcxMDU2ODczMDA4ODQiPiJJU08gQTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E0IiBtc2dpZD0iNjY4OTc3MjgwNzk4MjU5NzI1NCI+IklTTyBBNCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTUiIG1zZ2lkPSI1MzUzNTQ5NjUyMDE1NzQxMDQwIj4iSVNPIEE1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNiIgbXNnaWQ9Ijg1ODUwMzgwNDg2NzQ5MTE5MDciPiJJU08gQTYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E3IiBtc2dpZD0iNjY0MTgzNjcxNjk2MzgzOTExOSI+IklTTyBBNyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTgiIG1zZ2lkPSI3NTcxMTM5NDM3NDY1NjkzMzU1Ij4iSVNPIEE4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hOSIgbXNnaWQ9IjEzNzg0NTU4OTE5NTcxMTUwNzkiPiJJU08gQTkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2ExMCIgbXNnaWQ9IjI0ODA3NDc0NTc0Mjk0NzUzNDQiPiJJU08gQTEwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMCIgbXNnaWQ9IjM5NjU5MzUwOTc2NjExMDgwMzkiPiJJU08gQjAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IxIiBtc2dpZD0iMjUwNTc1MzI4NTAxMDExNTQzNyI+IklTTyBCMSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjIiIG1zZ2lkPSI4NzYzODc0NzA5ODU5NDU4NDUzIj4iSVNPIEIyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMyIgbXNnaWQ9IjQyMTA1MDY2ODgxOTE3NjQwNzYiPiJJU08gQjMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I0IiBtc2dpZD0iNTc0OTQwNDE2NTg4ODUyNjAzNCI+IkI0IElTTyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjUiIG1zZ2lkPSI3NjQwNjI3NDE0NjIxOTA0NzMzIj4iSVNPIEI1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNiIgbXNnaWQ9IjczNDI5ODg4NjQ3MTI3NDg1NDQiPiJJU08gQjYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I3IiBtc2dpZD0iNTA2OTg0NDA2NTIzNTM4MjQyOSI+IklTTyBCNyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjgiIG1zZ2lkPSI3MzE2ODE4OTIyMjc4Nzc5Nzc0Ij4iSVNPIEI4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iOSIgbXNnaWQ9IjU0MTQ3MjcwOTQwMjY1MzIzNDEiPiJJU08gQjkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IxMCIgbXNnaWQ9IjUyNTEyNTM3MzE4MzIwNDgxODUiPiJJU08gQjEwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMCIgbXNnaWQ9IjQwMDMxMzgzNDI2NzE5NjQyMTciPiJJU08gQzAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MxIiBtc2dpZD0iMTkzNTE4ODA2MzM5MzU1MzAwOCI+IklTTyBDMSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzIiIG1zZ2lkPSIzMTk3MzA3OTY5NzEyMDY5OTA0Ij4iSVNPIEMyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMyIgbXNnaWQ9IjQzMzU4MjYwODczMjE5MTM1MDgiPiJJU08gQzMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M0IiBtc2dpZD0iMzc0NTYzOTU5ODI4MTAxNTAwNSI+IklTTyBDNCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzUiIG1zZ2lkPSI4MjY5NDU3NzY1ODIyNzkxMDEzIj4iSVNPIEM1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNiIgbXNnaWQ9IjU2NjY2NjEwNTI2MDM0NjkzMCI+IklTTyBDNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzciIG1zZ2lkPSI4Njc4NDEzMTgwNzgyNjA4NDk4Ij4iSVNPIEM3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jOCIgbXNnaWQ9IjgzOTIzNzYyMDY2MjcwNDE3MzAiPiJJU08gQzgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M5IiBtc2dpZD0iOTE5MTYxMzM3MjMyNDg0NTQwNSI+IklTTyBDOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzEwIiBtc2dpZD0iNzMyNzcwOTY5OTE4NDkyMDgyMiI+IklTTyBDMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGV0dGVyIiBtc2dpZD0iNDE5MTgwNTYxNTgyOTQ3Mjk1MyI+Ik3JmWt0dWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfZ3Zybm10X2xldHRlciIgbXNnaWQ9Ijc4NTMzODIxOTI2NDk0MDU1MDciPiJIw7ZrdW3JmXQgTcmZa3R1YnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGVnYWwiIG1zZ2lkPSI2Njk3OTgyOTg4MjgzODIzMTUwIj4iSMO8cXVxaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9qdW5pb3JfbGVnYWwiIG1zZ2lkPSIzNzI3NzQzOTY5OTAyNzU4OTQ4Ij4iS2nDp2lrIEjDvHF1cSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZWRnZXIiIG1zZ2lkPSIyODE4NzE0NjQ4OTY2MDEyMzYiPiJRb3ZsdXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfdGFibG9pZCIgbXNnaWQ9IjU3NzU5NjY0MTYzMzM1NzgxMjciPiJRxLFzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndyaXRlX2ZhaWxfcmVhc29uX2NhbmNlbGxlZCIgbXNnaWQ9IjcwOTEyNTgzNzgxMjE2Mjc2MjQiPiJMyZnEn3YgZWRpbGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id3JpdGVfZmFpbF9yZWFzb25fY2Fubm90X3dyaXRlIiBtc2dpZD0iODEzMjUwNTQxNzkzNTMzNzcyNCI+IktvbnRlbnQgeWF6bW5hIHjJmXRhc8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX3BpbiIgbXNnaWQ9IjMzOTU5NTM0MjEzNjg0NzYxMDMiPiJQSU4gZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9vbGRfcGluIiBtc2dpZD0iMTQ2MjIwNjIyNTUxMjkxMDc1NyI+IkNhcmkgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX25ld19waW4iIG1zZ2lkPSI1OTU5NjA2NjkxNjE5OTU5MTg0Ij4iWWVuaSBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY29uZmlybV9waW4iIG1zZ2lkPSI4NTAxNTIzODI5NjMzMTQ2MjM5Ij4iWWVuaSBQSU5cJ2kgdMmZc2RpcSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NyZWF0ZV9waW4iIG1zZ2lkPSI4MDE3NjAwMDAwMjYzNDUwMzM3Ij4iRMmZeWnFn23JmSBtyZloZHVkaXl5yZl0bMmZcmkgw7zDp8O8biBQxLBOIHlhcmFkxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCIgbXNnaWQ9IjIyMjQyMTQxOTA5MDY5OTQ1NDgiPiJQxLBOIHV5xJ91biBnyZlsbWlyLiBZZW5pZMmZbiBjyZloZCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lcnJvcl90b29fc2hvcnQiIG1zZ2lkPSI4MTczOTgyNzU2MjY1Nzc3NzkyIj4iUMSwTiDDp294IHHEsXNhZMSxci4gxo9uIGF6xLEgNCByyZlxyZltIG9sbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icmVzdHJfcGluX2NvdW50ZG93biI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ4MzU2Mzk5Njk1MDM3Mjk4NzQiPiJZYW5sxLHFnyBQxLBOLiAxIHNhbml5yZkgc29ucmEgdMmZa3JhciBzxLFuYXnEsW4uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4MDMwNjA3MzQzMjIzMjg3NjU0Ij4iWWFubMSxxZ8gUMSwTi4gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSBzb25yYSB0yZlrcmFyIHPEsW5hecSxbi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJ0cmFuc2llbnRfbmF2aWdhdGlvbl9jb25maXJtYXRpb24iIG1zZ2lkPSI0OTA3ODQ0MDQzNjExMTIzNDI2Ij4iUGFuZWxpIGfDtnN0yZlybcmZayDDvMOnw7xuIGVrcmFuxLFuIGvDvG5jw7xuw7wgc8O8csO8xZ9kw7xyw7xuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHJhbnNpZW50X25hdmlnYXRpb25fY29uZmlybWF0aW9uX2xvbmciIG1zZ2lkPSI4MDYxNjg1OTIwNTA4MDg2Njk3Ij4iU2lzdGVtIHBhbmVsaW5pIGfDtnN0yZlybcmZayDDvMOnw7xuIGVrcmFuxLFuIGvDvG5jw7xuZMmZbiBzw7xyw7zFn2TDvHLDvG4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYmUvZG9ub3R0cmFuc2xhdGUtY2xkci54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWJlL2Rvbm90dHJhbnNsYXRlLWNsZHIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjYjc0OTQyLi4wMDAwMDAwCi0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYmUvZG9ub3R0cmFuc2xhdGUtY2xkci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1lcmljX2RhdGVfdGVtcGxhdGUiPiIlcy4lcy4lcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1vbnRoX2RheV95ZWFyIj4lLWUgJUIgJVk8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfb2ZfZGF5Ij4lSC4lTS4lUzwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9hbmRfdGltZSI+JUguJU0uJVMgJS1lLiUtbS4lWTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV90aW1lIj4lMiRzICUxJHM8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjYzI5ODYuLjAwMDAwMDAKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4MDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0vKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAotKioKLSoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0qKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0qKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qKgotKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJieXRlU2hvcnQiIG1zZ2lkPSI4MzQwOTczODkyNzQyMDE5MTAxIj4iQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtpbG9ieXRlU2hvcnQiIG1zZ2lkPSI1OTczNzg5NzgzNTA0NzcxODc4Ij4i0JrQsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZ2FieXRlU2hvcnQiIG1zZ2lkPSI2MzU1ODUxNTc2NzcwNDI4OTIyIj4i0JzQsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdpZ2FieXRlU2hvcnQiIG1zZ2lkPSIzMjU5ODgyNDU1MjEyMTkzMjE0Ij4i0JPQsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRlcmFieXRlU2hvcnQiIG1zZ2lkPSIyMzE2MTMwMTgxNTkxODY5NjIiPiLQotCxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGV0YWJ5dGVTaG9ydCIgbXNnaWQ9IjU2Mzc4MTY2ODAxNDQ5OTAyMTkiPiLQn9CxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmlsZVNpemVTdWZmaXgiIG1zZ2lkPSI5MTY0MjkyNzkxNTAwNTMxOTQ5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkczwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iVU5JVCI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1bnRpdGxlZCIgbXNnaWQ9IjQ2Mzg5NTY5NTQ4NTI3ODI1NzYiPiImbHQ70JHQtdC3INC90LDQt9Cy0YsmZ3Q7Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZWxsaXBzaXMiIG1zZ2lkPSI3ODk5ODI5NTE2MDQ4ODEzMjM3Ij4iLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZWxsaXBzaXNfdHdvX2RvdHMiIG1zZ2lkPSIxMjI4MDc4OTk0ODY2MDMwNzM2Ij4iLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbXB0eVBob25lTnVtYmVyIiBtc2dpZD0iNzY5NDA2MzA0MjA3OTY3NjUxNyI+IijQndGP0LzQsCDQvdGD0LzQsNGA0LAg0YLRjdC70LXRhNC+0L3QsCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1bmtub3duTmFtZSIgbXNnaWQ9IjIyNzc1NTY1NDY3NDI3NDY1MjIiPiIo0J3QtdCy0Y/QtNC+0LzRiykiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0Vm9pY2VNYWlsQWxwaGFUYWciIG1zZ2lkPSIyNjYwMDIwOTkwMDk3NzMzMDc3Ij4i0JPQsNC70LDRgdCw0LLQsNGPINC/0L7RiNGC0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0TXNpc2RuQWxwaGFUYWciIG1zZ2lkPSIyODUwODg5NzU0OTE5NTg0Njc0Ij4iTVNJU0ROMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+ItCf0YDQsNCx0LvQtdC80LAg0L/QsNC00LvRg9GH0Y3QvdC90Y8g0YbRliDQvdGP0L/RgNCw0LLRltC70YzQvdGLINC60L7QtCBNTUkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibW1pRmRuRXJyb3IiIG1zZ2lkPSI1MjI0Mzk4MjE2Mzg1MzE2NDcxIj4i0JLRi9C60LDRgNGL0YHRgtCw0L3QvdC1INCw0LHQvNC10LbQsNCy0LDQvdCw0LUg0YLQvtC70YzQutGWINC00LDQt9Cy0L7Qu9C10L3Ri9C80ZYg0L3Rg9C80LDRgNCw0LzRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZCIgbXNnaWQ9IjgxNDcyNzgzNDY0MTQ3MTQzMTUiPiLQodC70YPQttCx0LAg0LHRi9C70LAg0Z7QutC70Y7Rh9Cw0L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZEZvciIgbXNnaWQ9IjY4NTYyMjgxNDA0NTM0NzEwNDEiPiLQodC70YPQttCx0LAg0LHRi9C70LAg0Z7QutC70Y7Rh9Cw0L3QsCDQtNC70Y86Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZURpc2FibGVkIiBtc2dpZD0iMTkzNzU1MzIyNjU5MjUxNjQxMSI+ItCh0LvRg9C20LHQsCDQsdGL0LvQsCDQsNC00LrQu9GO0YfQsNC90LDRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlUmVnaXN0ZXJlZCIgbXNnaWQ9IjYyNzUwMTkwODI1OTgxMDI0OTMiPiLQoNGN0LPRltGB0YLRgNCw0YbRi9GPINC/0YDQsNC50YjQu9CwINC/0LDRgdC/0Y/RhdC+0LLQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRXJhc2VkIiBtc2dpZD0iMTI4ODU4NDY5NTI5NzIwMDk3MiI+ItCf0LDRgdC/0Y/RhdC+0LLQsCDQstGL0LTQsNC70LXQvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkSW5jb3JyZWN0IiBtc2dpZD0iNzYxMjIwODgzOTQ1MDEyODcxNSI+ItCd0Y/Qv9GA0LDQstGW0LvRjNC90Ysg0L/QsNGA0L7Qu9GMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUNvbXBsZXRlIiBtc2dpZD0iODIzMjUyNzQ5NTQxMTY5ODM1OSI+Ik1NSSDQt9Cw0LLQtdGA0YjQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFkUGluIiBtc2dpZD0iOTAxNTI3NzY0NTU0NjcxMDAxNCI+ItCh0YLQsNGA0YsgUElOLdC60L7QtCDRg9Cy0LXQtNC30LXQvdGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFkUHVrIiBtc2dpZD0iNTQ4NzI1NzY0NzA4MTEzMjIwMSI+ItCd0Y/Qv9GA0LDQstGW0LvRjNC90YsgUFVLLdC60L7QtC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+ItCj0LLQtdC00LfQtdC90YvRjyBQSU4t0LrQvtC00Ysg0L3QtSDRgdGD0L/QsNC00LDRjtGG0YwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFBpbiIgbXNnaWQ9IjM4NTAwMTg0NDUxODc0NzUzNzciPiLQo9Cy0Y/QtNC30ZbRhtC1IFBJTi3QutC+0LQsINGP0LrRliDQt9C80Y/RiNGH0LDQtSDQsNC0IDQg0LTQsCA4INC70ZbRh9Cx0LDRni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+ItCj0LLRj9C00LfRltGG0LUgUFVLINC3IDgg0LvRltGH0LHQsNGeINGG0ZYg0LHQvtC70YzRiC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4i0JLQsNGI0LAgU0lNLdC60LDRgNGC0LAg0LfQsNCx0LvQsNC60LDQstCw0L3QsCBQVUst0LrQvtC00LDQvC4g0KPQstGP0LTQt9GW0YbQtSBQVUssINC60LDQsSDRgNCw0LfQsdC70LDQutCw0LLQsNGG0Ywg0LrQsNGA0YLRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLQo9Cy0Y/QtNC30ZbRhtC1IFBVSzIg0LTQu9GPINGA0LDQt9Cx0LvQsNC60LDQstCw0L3QvdGPIFNJTS3QutCw0YDRgtGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i0IbQtNGN0L3RgtGL0YTRltC60LDRgtCw0YAg0JDQktCdIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ2xpck1taSIgbXNnaWQ9Ijc3ODQ2NzM2NzM0NDY4MzMwOTEiPiLQhtC00Y3QvdGC0YvRhNGW0LrQsNGC0LDRgCDQkNCS0J0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDZk1taSIgbXNnaWQ9IjUxMjMyMTg5ODkxNDE1NzM1MTUiPiLQn9C10YDQsNCw0LTRgNCw0YHQsNGG0YvRjyDQstGL0LrQu9GW0LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkN3TW1pIiBtc2dpZD0iOTEyOTY3ODA1Njc5NTAxNjg2NyI+ItCn0LDQutCw0L3QvdC1INCy0YvQutC70ZbQutGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQmFNbWkiIG1zZ2lkPSI0NTUxOTMwNjc5MjY3NzA1ODEiPiLQl9Cw0LHQsNGA0L7QvdCwINCy0YvQutC70ZbQutGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUHdkTW1pIiBtc2dpZD0iNzA0MzcxNTY4NzkwNTI1NDE5OSI+ItCX0LzQtdC90LAg0L/QsNGA0L7Qu9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUGluTW1pIiBtc2dpZD0iMzExMzExNzc4MDM2MTE5MDMwNCI+ItCX0LzQtdC90LAgUElOLdC60L7QtNGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ25pcE1taSIgbXNnaWQ9IjMxMTA1MzQ2ODA1NTc4NTcxNjIiPiLQptGP0L/QtdGA0LDRiNC90ZYg0L3Rg9C80LDRgCDQstGL0LrQu9GW0LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNuaXJNbWkiIG1zZ2lkPSIzMDYyMTAyMTIxNDMwNTQ4NzMxIj4i0J3Rg9C80LDRgCDQstGL0LrQu9GW0LrRgyDQsNCx0LzQtdC20LDQstCw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlRocmVlV0NNbWkiIG1zZ2lkPSI5MDUxMDQ3MTcwMzIxMTkwMzY4Ij4i0KLRgNC+0YXQsdCw0LrQvtCy0Ysg0LLRi9C60LvRltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUnVhY01taSIgbXNnaWQ9Ijc4Mjc4ODc0NTkxMzgzMDg4ODYiPiLQkNC00LzQvtCy0LAg0LDQtCDQvdC10L/QsNC20LDQtNCw0L3Ri9GFINGA0LDQt9C00YDQsNC20L3Rj9GO0YfRi9GFINCy0YvQutC70ZbQutCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDbmRNbWkiIG1zZ2lkPSIzMTE2NDQ2MjM3MDgxNTc1ODA4Ij4i0JTQsNGB0YLQsNGe0LrQsCDQvdGD0LzQsNGA0YMg0LLRi9C60LvRltC60YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJEbmRNbWkiIG1zZ2lkPSIxMjY1NDc4OTMyNDE4MzM0MzMxIj4i0J3QtSDRgtGD0YDQsdCw0LLQsNGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPbiIgbXNnaWQ9IjQyOTQxNTQwOTE0NTc4MTkyMyI+ItCd0LDQu9Cw0LTRiyDRltC00Y3QvdGC0YvRhNGW0LrQsNGC0LDRgNGDINCQ0JLQnSDQv9CwINC30LzQsNGe0YfQsNC90L3RliDQsNCx0LzQtdC20LDQstCw0L3Ri9GPLiDQndCw0YHRgtGD0L/QvdGLINCy0YvQutC70ZbQujog0LDQsdC80LXQttCw0LLQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPZmYiIG1zZ2lkPSIzMDkyOTE4MDA2MDc3ODY0NjI0Ij4i0IbQtNGN0L3RgtGL0YTRltC60LDRgtCw0YAg0JDQktCdINC/0LAg0LfQvNCw0Z7Rh9Cw0L3QvdGWINCw0LHQvNC10LbQsNCy0LDQvdGLLiDQndCw0YHRgtGD0L/QvdGLINCy0YvQutC70ZbQujog0L3QtSDQsNCx0LzQtdC20LDQstCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPbiIgbXNnaWQ9IjYxNzk0MjUxODI4NTY0MTg0NjUiPiLQn9CwINC30LzQsNGe0YfQsNC90L3RliDRltC00Y3QvdGC0YvRhNGW0LrQsNGC0LDRgCDQkNCS0J0g0L3QtSDQsNCx0LzQtdC20LDQstCw0L3Riy4g0J3QsNGB0YLRg9C/0L3RiyDQstGL0LrQu9GW0Lo6INCw0LHQvNC10LbQsNCy0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9mZiIgbXNnaWQ9IjI1Njc5OTg2MzMxMjQ0MDg1NTIiPiLQndCw0LvQsNC00Ysg0ZbQtNGN0L3RgtGL0YTRltC60LDRgtCw0YDRgyDQkNCS0J0g0L/QsCDQt9C80LDRntGH0LDQvdC90ZY6INC90LUg0LDQsdC80Y/QttCw0LLQsNC90LAuINCd0LDRgdGC0YPQv9C90Ysg0LLRi9C60LvRltC6OiDQvdC1INCw0LHQvNC10LbQsNCy0LDQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZU5vdFByb3Zpc2lvbmVkIiBtc2dpZD0iODYxNDgzMDE4MDUwODY4NjY2NiI+ItCh0LvRg9C20LHQsCDQvdC1INC/0YDQsNC00LDRgdGC0LDRntC70Y/QtdGG0YbQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDTElSUGVybWFuZW50IiBtc2dpZD0iMzM3NzM3MTE0NTkyNjgzNTY3MSI+ItCS0Ysg0L3QtSDQvNC+0LbQsNGG0LUg0LfQvNGP0L3RltGG0Ywg0L3QsNC70LDQtNGLINGW0LTRjdC90YLRi9GE0ZbQutCw0YLQsNGA0LAg0LDQsdCw0L3QtdC90YLQsCwg0Y/Qumkg0YLRjdC70LXRhNCw0L3Rg9C1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRDaGFuZ2VkVGl0bGUiIG1zZ2lkPSI1NTkyMTg5Mzk4OTU2MTg3NDk4Ij4i0JDQsdC80LXQttCw0LLQsNC90Ysg0LTQvtGB0YLRg9C/INC30LzRj9C90ZbRntGB0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25EYXRhIiBtc2dpZD0iODY1Mzc5NDc4NDY5MDA2NTU0MCI+ItCh0LvRg9C20LHQsCDQtNCw0LTQt9C10L3Ri9GFINCx0LvQsNC60YPQtdGG0YbQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25FbWVyZ2VuY3kiIG1zZ2lkPSI2NTgxMTYzNzc5MDcyODMzNjY1Ij4i0JDQstCw0YDRi9C50L3QsNGPINGB0LvRg9C20LHQsCDQsdC70LDQutGD0LXRhtGG0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uTm9ybWFsIiBtc2dpZD0iNDk1Mzg2NzAxMTM4OTc1MDY3MyI+ItCT0LDQu9Cw0YHQsNCy0LDRjyDRgdC70YPQttCx0LAg0LfQsNCx0LvQsNC60LDQstCw0L3QsNGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbFZvaWNlIiBtc2dpZD0iMzM5Njk2MzY1MjEwODE1MTI2MCI+ItCj0YHQtSDQs9Cw0LvQsNGB0LDQstGL0Y8g0YHQu9GD0LbQsdGLINC30LDQsdC70LDQutCw0LLQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uU21zIiBtc2dpZD0iODMxNDM1MjMyNzQ2MTYzODg5NyI+ItCh0LvRg9C20LHQsCBTTVMg0LfQsNCx0LvQsNC60LDQstCw0L3QsNGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlRGF0YSIgbXNnaWQ9Ijk5NjYzNjQ4NzEwNjE3MTMyMCI+ItCh0LvRg9C20LHRiyDQv9C10YDQsNC00LDRh9GLINCz0L7Qu9Cw0YHQsC/QtNCw0LTQt9C10L3Ri9GFINC30LDQsdC70LDQutCw0LLQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VTbXMiIG1zZ2lkPSIxODg4NTg4MTUyNzkyMDIzODczIj4i0KHQu9GD0LbQsdGLINC/0LXRgNCw0LTQsNGH0Ysg0LPQvtC70LDRgdCwINGWIFNNUyDQt9Cw0LHQu9Cw0LrQsNCy0LDQvdGL0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsIiBtc2dpZD0iNTY0MzAyODI2NDQ2NjA5MjgyMSI+ItCj0YHQtSDRgdC70YPQttCx0Ysg0L/QtdGA0LDQtNCw0YfRiyDQtNCw0LTQt9C10L3Ri9GFLCDQs9Cw0LvQsNGB0LDQstGL0Y8g0ZYgU01TLdGB0LvRg9C20LHRiyDQt9Cw0LHQu9Cw0LrQsNCy0LDQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1ZvaWNlIiBtc2dpZD0iMTI1ODM5MzgxMjMzNTI1ODAxOSI+ItCT0L7Qu9Cw0YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhIiBtc2dpZD0iODcyNDU2NzgyMDc3OTM3ODkzIj4i0JTQsNC00LfQtdC90YvRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0ZBWCIgbXNnaWQ9IjU1NjY2MjQ5OTg4NDA0ODY0NzUiPiLQpNCw0LrRgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1NNUyIgbXNnaWQ9IjIwMTU0NjAzNzM3MDE1Mjc0ODkiPiJTTVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhQXN5bmMiIG1zZ2lkPSI0NTIzNDU0NzgzNDk4NTUxNDY4Ij4i0JDRgdGW0L3RhdGA0L7QvdC90YvRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFTeW5jIiBtc2dpZD0iNzUzMDAwMDUxOTY0NjA1NDc3NiI+ItCh0ZbQvdGF0YDQvtC90L3Ri9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzUGFja2V0IiBtc2dpZD0iNjk5MTAwNjU1Nzk5MzQyMzQ1MyI+ItCf0LDQutC10YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NQQUQiIG1zZ2lkPSIzMjM1MjU5MDg1NjQ4MjcxMDM3Ij4iUEFEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQwIiBtc2dpZD0iNzE3MDMzNTQ3MjE5ODY5NDk0NSI+ItCG0L3QtNGL0LrQsNGC0LDRgCDRgNC+0Z7QvNGW0L3Qs9GDINGe0LrQu9GO0YfQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEiIG1zZ2lkPSI1MzE0ODYxNTE5NzUyNTM4OTIyIj4i0IbQvdC00YvQutCw0YLQsNGAINGA0L7RntC80ZbQvdCz0YMg0LDQtNC60LvRjtGH0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQyIiBtc2dpZD0iODk2OTkyOTA0OTA4MTI2ODExNSI+ItCG0L3QtNGL0LrQsNGC0LDRgCDRgNC+0Z7QvNGW0L3Qs9GDINC80ZbRgNCz0LDQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MyIgbXNnaWQ9IjUxNDgyNTUwMjcwNDM5NDMzMTciPiLQlyDRgNCw0ZHQvdGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ0IiBtc2dpZD0iODgwODQ1NjY4MjU1MDc5NjUzMCI+ItCXINCx0YPQtNGL0L3QutGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ1IiBtc2dpZD0iNzYwNDA2MzI1Mjg1MDM1NDM1MCI+ItCg0L7RntC80ZbQvdCzOiDQv9C10YDQsNCy0LDQttC90LDRjyDRgdGW0YHRgtGN0LzQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NiIgbXNnaWQ9IjIwNTk0NDA4MjU3ODI4NzE1MTMiPiLQoNC+0Z7QvNGW0L3Qszog0LTQsNGB0YLRg9C/0L3QsNGPINGB0ZbRgdGC0Y3QvNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ3IiBtc2dpZD0iNzExMjA3ODcyNDA5NzIzMzYwNSI+ItCg0L7RntC80ZbQvdCzOiDQsNGB0LDRhtGL0Y/RgtGL0Z7QvdGLINC/0LDRgNGC0L3RkdGAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ4IiBtc2dpZD0iNTk4OTU2OTc3ODYwNDA4OTI5MSI+ItCg0L7RntC80ZbQvdCzOiDQv9GA0Y3QvGnRg9C8LdC/0LDRgNGC0L3RkdGAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ5IiBtc2dpZD0iNzk2OTI5NjgxMTM1NTE1MjQ5MSI+ItCg0L7RntC80ZbQvdCzOiDQv9C+0Z7QvdCw0Y8g0YTRg9C90LrRhtGL0Y/QvdCw0LvRjNC90LDRgdGG0Ywg0YHQu9GD0LbQsdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMCIgbXNnaWQ9IjM5OTI5MDY5OTk4MTUzMTY0MTciPiLQoNC+0Z7QvNGW0L3Qs8Kg4oCTwqDRh9Cw0YHRgtC60L7QstCw0Y8g0YTRg9C90LrRhtGL0Y/QvdCw0LvRjNC90LDRgdGG0Ywg0YHQu9GD0LbQsdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMSIgbXNnaWQ9IjQxNTQ0NzY4NTQ0MjY5MjA5NzAiPiLQkdCw0L3RjdGAINGA0L7RntC80ZbQvdCz0YMg0Z7QutC70Y7Rh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTIiIG1zZ2lkPSIxMTg5MDcxMTE5OTkyNzI2MzIwIj4i0JHQsNC90Y3RgCDRgNC+0Z7QvNGW0L3Qs9GDINCw0LTQutC70Y7Rh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0U2VhcmNoaW5nIiBtc2dpZD0iODM2MDE0MTg4NTk3MjI3OTk2MyI+ItCf0L7RiNGD0Log0YHQu9GD0LbQsdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZU5vdEZvcndhcmRlZCIgbXNnaWQ9IjE2ODM2ODU4ODM4NDEyNzI1NjAiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjog0L3QtSDQv9C10YDQsNCw0LTRgNCw0YHQvtGe0LLQsNC10YbRhtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZUZvcndhcmRlZCIgbXNnaWQ9IjEzMDI5MjIxMTc0OTg1OTA1MjEiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IkRJQUxJTkdfTlVNQkVSIj57MX08L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZUZvcndhcmRlZFRpbWUiIG1zZ2lkPSI5MjA2MjUxNzM2NTI3MDg1MjU2Ij4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJESUFMSU5HX05VTUJFUiI+ezF9PC94bGlmZjpnPiDQv9GA0LDQtyA8eGxpZmY6ZyBpZD0iVElNRV9ERUxBWSI+ezJ9PC94bGlmZjpnPiDRgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlUmVnaXN0ZXJlZCIgbXNnaWQ9IjUwNzMyMzc4Mjc2MjAxNjYyODUiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjog0L3QtSDQv9C10YDQsNCw0LTRgNCw0YHQvtGe0LLQsNC10YbRhtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZVJlZ2lzdGVyZWRUaW1lIiBtc2dpZD0iNjc4MTYyMTk2NDMyMDYzNTE3MiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiDQvdC1INC/0LXRgNCw0LDQtNGA0LDRgdC+0Z7QstCw0LXRhtGG0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmY0NvbXBsZXRlIiBtc2dpZD0iMzExODg0ODIzMDk2Njg4NjU3NSI+ItCa0L7QtCDQsNCxXCfQtdC60YLQsCDQt9Cw0LLQtdGA0YjQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmNFcnJvciIgbXNnaWQ9IjMzMjc1NjAxMjY1ODg1MDA3NzciPiLQn9GA0LDQsdC70LXQvNCwINC/0LDQtNC70YPRh9GN0L3QvdGPINGG0ZYg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3RiyDQutC+0LQg0YTRg9C90LrRhtGL0ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yT2siIG1zZ2lkPSIxMTkxOTE5Mzc4MDgzNDcyMjA0Ij4i0J7QmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvciIgbXNnaWQ9Ijc5NTYzOTI1MTExNDY2OTg1MjIiPiLQkNC00LHRi9C70LDRgdGPINC/0LDQvNGL0LvQutCwINGB0LXRgtC60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yTG9va3VwIiBtc2dpZD0iNDcxMTY4NzQ1NjExMTk2MzE2MyI+ItCd0LUg0LDRgtGA0YvQvNCw0LvQsNGB0Y8g0LfQvdCw0LnRgdGG0ZYgVVJMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiLQodGF0LXQvNCwINCw0Z7RgtGN0L3RgtGL0YTRltC60LDRhtGL0ZYg0YHQsNC50YLQsCDQvdC1INC/0LDQtNGC0YDRi9C80LvRltCy0LDQtdGG0YbQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JBdXRoIiBtc2dpZD0iMTQzNTA2NTYyOTQzODA0NDUzNCI+ItCf0LDQvNGL0LvQutCwINCw0Z7RgtGN0L3RgtGL0YTRltC60LDRhtGL0ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUHJveHlBdXRoIiBtc2dpZD0iMTc4ODIwNzAxMDU1OTA4MTMzMSI+ItCf0YDQsNCy0LXRgNC60LAg0YHQsNC/0YDQsNGe0LTQvdCw0YHRhtGWINC/0YDQsNC3INC/0YDQvtC60YHRli3RgdC10YDQstC10YAg0YHQutC+0L3Rh9GL0LvQsNGB0Y8g0L3Rj9Ge0LTQsNC70LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQ29ubmVjdCIgbXNnaWQ9Ijg3MTQyNzMyMzYzNjQ2NDA1NDkiPiLQndC10LzQsNCz0YfRi9C80LAg0L/QsNC00LvRg9GH0YvRhtGG0LAg0LTQsCDRgdC10YDQstC10YDQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JJTyIgbXNnaWQ9IjIzNDA1NTgxOTc0ODkzMDIxODgiPiLQndC10LzQsNCz0YfRi9C80LAg0LfQstGP0LfQsNGG0YbQsCDQtyDRgdC10YDQstC10YDQsNC8LiDQn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDINC/0LDQt9C90LXQuS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUaW1lb3V0IiBtc2dpZD0iNDc0MzQwMzcwMzc2Mjg4Mzk1NCI+ItCn0LDRgSDRh9Cw0LrQsNC90L3RjyDQt9C70YPRh9GN0L3QvdGPINC3INGB0LXRgNCy0LXRgNCw0Lwg0YHQutC+0L3Rh9GL0Z7RgdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclJlZGlyZWN0TG9vcCIgbXNnaWQ9Ijg2Nzk1OTYwOTAzOTI3Nzk1MTYiPiLQodGC0LDRgNC+0L3QutCwINC30LzRj9GI0YfQsNC1INC30LDRiNC80LDRgiDQv9C10YDQsNC90LDQutGW0YDQsNCy0LDQvdC90Y/RniDRgdC10YDQstC10YDQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JVbnN1cHBvcnRlZFNjaGVtZSIgbXNnaWQ9IjUwMTU3MzA4MTI5MDYxOTIyMDgiPiLQn9GA0LDRgtCw0LrQvtC7INC90LUg0L/QsNC00YLRgNGL0LzQu9GW0LLQsNC10YbRhtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZhaWxlZFNzbEhhbmRzaGFrZSIgbXNnaWQ9Ijk2NTQ5NjA2MDAwNjU4NjQxIj4i0J3QtdC80LDQs9GH0YvQvNCwINGe0YHRgtCw0LvRj9Cy0LDRhtGMINCx0Y/RgdC/0LXRh9C90LDQtSDQt9C70YPRh9GN0L3QvdC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckJhZFVybCIgbXNnaWQ9IjM2MzY5Mjk3MjI3Mjg4ODE5NzIiPiLQndC10LzQsNCz0YfRi9C80LAg0LDQtNC60YDRi9GG0Ywg0YHRgtCw0YDQvtC90LrRgywg0YLQsNC80YMg0YjRgtC+IFVSTCDQvdC10YHQsNC/0YDQsNGe0LTQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZpbGUiIG1zZ2lkPSIyMTcwNzg4NTE1MDUyNTU4Njc2Ij4i0J3QtdC80LDQs9GH0YvQvNCwINCw0YLRgNGL0LzQsNGG0Ywg0LTQvtGB0YLRg9C/INC00LAg0YTQsNC50LvQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlTm90Rm91bmQiIG1zZ2lkPSI2MjAzODU2NjEyMDQyNjU1MDg0Ij4i0J3QtdC80LDQs9GH0YvQvNCwINC30L3QsNC50YHRhtGWINC/0LDRgtGA0LDQsdCw0LLQsNC90Ysg0YTQsNC50LsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVG9vTWFueVJlcXVlc3RzIiBtc2dpZD0iMTIzNTM5NjkyNzA4NzE4ODI1MyI+ItCQ0L/RgNCw0YbQvtGe0LLQsNC10YbRhtCwINC30LDQvdCw0LTRgtCwINGI0LzQsNGCINC30LDQv9GL0YLQsNGeLiDQn9Cw0YHQv9GA0LDQsdGD0LnRhtC1INGP0YjRh9GNINGA0LDQtyDQv9Cw0LfQvdC10LkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODk2NzcxMDAyNTAzNjE2MzgyMiI+ItCf0LDQvNGL0LvQutCwINGe0LLQsNGF0L7QtNGDINCy0LAg0Z7Qu2nQutC+0LLRiyDQt9Cw0L9p0YEgPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jIiBtc2dpZD0iODM1MzUyMzA2MDI2OTMzNTY2NyI+ItCh0ZbQvdGF0YDQsNC90ZbQt9Cw0YbRi9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jTm90aWZpY2F0aW9uVGl0bGUiIG1zZ2lkPSIzOTc3NDMzNDkxOTE5MDE0NTgiPiLQodGW0L3RhdGA0LDQvdGW0LfQsNGG0YvRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlVG9vTWFueURlbGV0ZXNOb3RpZmljYXRpb25EZXNjIiBtc2dpZD0iODEwMDk4MTQzNTA4MDY5NjQzMSI+ItCX0LDQvdCw0LTRgtCwINGI0LzQsNGCINCy0YvQtNCw0LvQtdC90L3Rj9GeIDx4bGlmZjpnIGlkPSJDT05URU5UX1RZUEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NDk0MDE5MjM0MTAyMTU0ODk2Ij4i0J/QsNC80Y/RhtGMINC/0LvQsNC90YjRjdGC0LAg0L/QvtGe0L3QsNGPLiDQktGL0LTQsNC70ZbRhtC1INC90LXQutCw0YLQvtGA0YvRjyDRhNCw0LnQu9GLLCDQutCw0LEg0LLRi9C30LLQsNC70ZbRhtGMINC80LXRgdGG0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NzU5OTkyODY2ODAwMDA1NDEiPiLQn9Cw0LzRj9GG0Ywg0YLRjdC70LXRhNC+0L3QsCDQv9C+0Z7QvdCw0Y8uINCS0YvQtNCw0LvRltGG0LUg4oCL4oCL0L3QtdC60LDRgtC+0YDRi9GPINGE0LDQudC70YssINC60LDQsSDQstGL0LfQstCw0LvRltGG0Ywg0LzQtdGB0YbQsC4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc3NsX2NhX2NlcnRfd2FybmluZyAoNTg0ODQwMjEyNzQ1NTAyMTcxNCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzc2xfY2FfY2VydF9ub3RpX2J5X3Vua25vd24gKDQ0NzU0Mzc4NjIxODk4NTA2MDIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc3NsX2NhX2NlcnRfbm90aV9tYW5hZ2VkICg0MDMwMjYzNDk3Njg2ODY3MTQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0ibWUiIG1zZ2lkPSI2NTQ1Njk2MDA3NjMxNDA0MjkyIj4i0K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaWFsb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg1NDUzNTE0MjA4NjUyMDI4NTMiPiLQn9Cw0YDQsNC80LXRgtGA0Ysg0L/Qu9Cw0L3RiNGN0YLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2RpYWxvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMTk5MTkwNzU0NjM5ODg2MzgiPiLQn9Cw0YDQsNC80LXRgtGA0Ysg0YLRjdC70LXRhNC+0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlIiBtc2dpZD0iNzE2NzcwMzM4OTgwMjYxODY2MyI+ItCR0Y/Qt9Cz0YPRh9C90Ysg0YDRjdC20YvQvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InR1cm5fb25fcmFkaW8iIG1zZ2lkPSIzOTEyNzkzMDkyMzM5OTYyMzcxIj4i0KPQutC70Y7Rh9GL0YbRjCDQsdC10YHQv9GA0LDQstCw0LTQvdGD0Y4g0YHQtdGC0LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InR1cm5fb2ZmX3JhZGlvIiBtc2dpZD0iODE5ODc4NDk0OTk4NzA2MjM0NiI+ItCQ0LTQutC70Y7Rh9GL0YbRjCDQsdC10YHQv9GA0LDQstCw0LTQvdGD0Y4g0YHQtdGC0LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9sb2NrIiBtc2dpZD0iNzk5MDk0NjU1NDk2MDk4MTUzIj4i0JHQu9Cw0LrRltGA0L7RntC60LAg0Y3QutGA0LDQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfb2ZmIiBtc2dpZD0iNDI2NjYxNDEwNzQxMjg2NTA0OCI+ItCS0YvQutC70Y7Rh9GL0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3NpbGVudCIgbXNnaWQ9IjMxOTI5ODE2MzAxODQ3MzA3OCI+ItCX0LLQsNC90L7QuiDQstGL0LrQuy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV92aWJyYXRlIiBtc2dpZD0iNzA3MjA0MzM4ODU4MTU1MTM5NSI+ItCX0LLQsNC90L7QuiDQtyDQstGW0LHRgNCw0YbRi9GP0LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9yaW5nIiBtc2dpZD0iODU5MjI0MTgxNjE5NDA3NDM1MyI+ItCX0LLQsNC90L7QuiDRg9C60LsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fcHJvZ3Jlc3MiIG1zZ2lkPSIyMjgxMDc5MjU3MzI5OTgxMjAzIj4i0JLRi9C60LvRjtGH0Y3QvdC90LUuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMzg1NzQ1MTc5NTU1NzMxNDcwIj4i0J/Qu9Cw0L3RiNGN0YIg0LHRg9C00LfQtSDQsNC00LrQu9GO0YfQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY0OTc5MjE3NTI0MjgyMTM1MyI+ItCS0LDRiCDRgtGN0LvQtdGE0L7QvSDQsdGD0LTQt9C1INCy0YvQutC70Y7Rh9Cw0L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtX3F1ZXN0aW9uIiBtc2dpZD0iMjkwNjU0NDc2ODg4MTEzNjE4MyI+ItCX0LDQutGA0YvRhtGMPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV90aXRsZSIgbXNnaWQ9IjcwNTQ1MDk5MTQ1MDAxNDAzNjEiPiLQn9C10YDQsNC30LDQs9GA0YPQt9C60LAg0Z4g0LHRj9GB0L/QtdGH0L3Ri9C8INGA0Y3QttGL0LzQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV9jb25maXJtIiBtc2dpZD0iNTUyOTM5NDQ1MDI3ODQ2NjgiPiLQpdC+0YfQsNGG0LUg0L/QtdGA0LDQt9Cw0LPRgNGD0LfRltGG0YbQsCDRniDQsdGP0YHQv9C10YfQvdGL0Lwg0YDRjdC20YvQvNC1PyDQk9GN0YLQsCDQtNCw0LfQstC+0LvRltGG0Ywg0LDQtNC60LvRjtGH0YvRhtGMINGD0YHQtSDRltC90YjRi9GPINGe0YHRgtCw0LvRj9Cy0LDQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3Rli4g0J/QsNGB0LvRjyDQv9C10YDQsNC30LDQs9GA0YPQt9C6aSBp0YUg0L/RgNCw0YbQsCDQsdGD0LTQt9C1INCw0LTQvdC+0Z7Qu9C10L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRfdGFza3NfdGl0bGUiIG1zZ2lkPSIzNjkxNzY0NjIzNjM4MTI3ODg4Ij4i0JDQv9C+0YjQvdGW0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub19yZWNlbnRfdGFza3MiIG1zZ2lkPSI4Nzk0OTA2NjU4NzMyMTkzNDczIj4i0J3Rj9C80LAg0LDQv9C+0YjQvdGW0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MDg0NzcxNDAwODgwNTM2NjUiPiLQn9Cw0YDQsNC80LXRgtGA0Ysg0L/Qu9Cw0L3RiNGN0YLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjQwNjQxNjgzMTU0MTYxNTI1OCI+ItCf0LDRgNCw0LzQtdGC0YDRiyDRgtGN0LvQtdGE0L7QvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrIiBtc2dpZD0iMjg0NDk0NTE5MTc5MjExOTcxMiI+ItCR0LvQsNC60ZbRgNC+0Z7QutCwINGN0LrRgNCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fcG93ZXJfb2ZmIiBtc2dpZD0iNDQ3MTg3OTQ0MDgzOTg3OTcyMiI+ItCS0YvQutC70Y7Rh9GL0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fYnVnX3JlcG9ydCIgbXNnaWQ9Ijc5MzQwMTA1Nzg5MjIzMDQ3OTkiPiLQodC/0YDQsNCy0LDQt9C00LDRh9CwINC/0YDQsCDQv9Cw0LzRi9C70LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF90aXRsZSIgbXNnaWQ9IjI2Njc0OTQ4MDM3NDI1NDg1MzMiPiLQodC/0YDQsNCy0LDQt9C00LDRh9CwINC/0YDQsCDQv9Cw0LzRi9C70LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9tZXNzYWdlIiBtc2dpZD0iMzk4NDQ3MDQ4NzUwMzUwNDU2Ij4i0JHRg9C00LfQtSDQt9CxadGA0LDRhtGG0LAgadC90YTQsNGA0LzQsNGG0YvRjyDQv9GA0LAg0LHRj9Cz0YPRh9GLINGB0YLQsNC9INC/0YDRi9C70LDQtNGLLCDRj9C60LDRjyDQsdGD0LTQt9C1INCw0LTQv9GA0LDRntC70Y/RhtGG0LAg0L3QsCDRjdC70LXQutGC0YDQvtC90L3Rg9GOINC/0L7RiNGC0YMuINCh0YLQstCw0YDRjdC90L3QtSDRgdC/0YDQsNCy0LDQt9C00LDRh9GLINC/0YDQsCDQv9Cw0LzRi9C70LppINC30L7QudC80LUg0L3QtdC60LDRgtC+0YDRiyDRh9Cw0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl90b2dnbGVfc2lsZW50X21vZGUiIG1zZ2lkPSI4MjE5NTI1MzQ0MjQ2ODEwOTI1Ij4i0JHRj9C30LPRg9GH0L3RiyDRgNGN0LbRi9C8Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vbl9zdGF0dXMiIG1zZ2lkPSIzMjg5ODQxOTM3MDAzNzU4ODA2Ij4i0JPRg9C6INCy0YvQutC7LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2lsZW50X21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjE1MDYwNDY1NzkxNzcwNjY0MTkiPiLQk9GD0Log0YPQutC70Y7Rh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX3RvZ2dsZV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iNTg4NDMzMDMwNjkyNjMwNzQ1NiI+ItCg0Y3QttGL0LwgXCLQoyDRgdCw0LzQsNC70ZHRhtC1XCIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjI3MTk1NTc5ODI2MDg5MTk3NTAiPiLQo9C60LvRjtGH0LDQvdGLINGA0Y3QttGL0LwgXCLQoyDRgdCw0LzQsNC70ZHRhtC1XCIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSI1MDc1MDcwNDQyODU0NDkwMjk2Ij4i0KDRjdC20YvQvCBcItCjINGB0LDQvNCw0LvRkdGG0LVcIiDQsNC00LrQu9GO0YfQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLQkdGP0YHQv9C10YfQvdGLINGA0Y3QttGL0LwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLQodGW0YHRgtGN0LzQsCBBbmRyb2lkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Nvc3RNb25leSIgbXNnaWQ9IjU0Mjk4MDgyMTc4NjE0NjA0MDEiPiLQn9C70LDRgtC90YvRjyDQv9Cw0YHQu9GD0LPRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY29zdE1vbmV5IiBtc2dpZD0iMzI5MzMwMTkwMzQwOTg2OTQ5NSI+ItCg0LDQsdGW0YbRjCDRgdC/0YDQsNCy0YssINGP0LrRltGPINC80L7Qs9GD0YbRjCDQutCw0YjRgtCw0LLQsNGG0Ywg0LLQsNC8INCz0YDQvtGI0LDQuS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWVzc2FnZXMiIG1zZ2lkPSI3NTIxMjQ5MTQ4NDQ1NDU2NjYyIj4i0JLQsNGI0YvRjyDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21lc3NhZ2VzIiBtc2dpZD0iNzgyMTk5OTA3MTAwMzY5OTIzNiI+ItCh0YfRi9GC0LLQsNGG0Ywg0ZYg0LfQsNC/0ZbRgdCy0LDRhtGMINCy0LDRiNGLIFNNUy3Qv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYsINC/0LDQstC10LTQsNC80LvQtdC90L3RliDRjdC70LXQutGC0YDQvtC90L3QsNC5INC/0L7RiNGC0Ysg0ZYg0ZbQvdGI0YvRjyDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3BlcnNvbmFsSW5mbyIgbXNnaWQ9IjM1MTkxNjMxNDEwNzA1MzM0NzQiPiLQktCw0YjQsNGPINC/0LXRgNGB0LDQvdCw0LvRjNC90LDRjyDRltC90YTQsNGA0LzQsNGG0YvRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfcGVyc29uYWxJbmZvIiBtc2dpZD0iODQyNjQ1MzEyOTc4ODg2MTMzOCI+ItCf0YDQsNC80Ysg0LTQvtGB0YLRg9C/INC00LAg0ZbQvdGE0LDRgNC80LDRhtGL0ZYg0L/RgNCwINCy0LDRgSwg0Y/QutCw0Y8g0LfQsNGF0L7RntCy0LDQtdGG0YbQsCDQvdCwINCy0LDRiNCw0Lkg0LrQsNC90YLQsNC60YLQvdCw0Lkg0LrQsNGA0YbQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc29jaWFsSW5mbyIgbXNnaWQ9IjU3OTkwOTY2MjM0MTIwNDM3OTEiPiLQktCw0YjQsCDRgdCw0YbRi9GP0LvRjNC90LDRjyDRltC90YTQsNGA0LzQsNGG0YvRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc29jaWFsSW5mbyIgbXNnaWQ9IjcxMjk4NDI0NTc2MTE2NDM0OTMiPiLQn9GA0LDQvNGLINC00L7RgdGC0YPQvyDQtNCwINGW0L3RhNCw0YDQvNCw0YbRi9GWINCw0LEg0LLQsNGI0YvRhSDQutCw0L3RgtCw0LrRgtCw0YUg0ZYg0YHQsNGG0YvRj9C70YzQvdGL0YUg0YHRg9Cy0Y/Qt9GP0YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2xvY2F0aW9uIiBtc2dpZD0iNjM1MTQ5NzQyNDM2NjkyMDQ5Ij4i0JLQsNGI0LAg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2xvY2F0aW9uIiBtc2dpZD0iNTcwNDY3OTc2MzEyNDE3MDEwMCI+ItCa0LDQvdGC0YDQsNC70Y/QstCw0YbRjCDRgdCy0LDRkSDRhNGW0LfRltGH0L3QsNC1INC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9uZXR3b3JrIiBtc2dpZD0iNTgwODk4MzM3NzcyNzEwOTgzMSI+ItCh0LXRgtC60LDQstCw0Y8g0YHRg9Cy0Y/Qt9GMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19uZXR3b3JrIiBtc2dpZD0iNDQ3ODI5OTQxMzI0MTg2MTk4NyI+ItCU0L7RgdGC0YPQvyDQtNCwINGA0L7Qt9C90YvRhSDRhNGD0L3QutGG0YvQuSDRgdC10YLQutGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iMTU4NTQwMzU0NDE2MjEyODEwOSI+IkJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYmx1ZXRvb3RoTmV0d29yayIgbXNnaWQ9IjU2MjUyODg1NzcxNjQyODIzOTEiPiLQlNC+0YHRgtGD0L8g0LTQsCDQv9GA0YvQu9Cw0LQg0ZYg0YHQtdGC0LDQuiDQv9GA0LDQtyBCbHVldG9vdGguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI4MzI5MjYxNjcwMTUxODcxMjM1Ij4i0J3QsNC70LDQtNGLINCz0YPQutGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hdWRpb1NldHRpbmdzIiBtc2dpZD0iMjY0MTUxNTQwMzM0NzU2ODEzMCI+ItCX0LzQtdC90LAg0L3QsNC70LDQtCDQs9GD0LrRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWZmZWN0c0JhdHRlcnkiIG1zZ2lkPSI2MjA5MjQ2NjUzNDI0Nzk4MDMzIj4i0KPQv9C70YvQstCw0LUg0L3QsCDQsdCw0YLQsNGA0Y3RjiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWZmZWN0c0JhdHRlcnkiIG1zZ2lkPSI2NDQxMjc1MzIwNjM4OTE2OTQ3Ij4i0JLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0LnRhtGMINC80LDQs9GH0YvQvNCw0YHRhtGWLCDRj9C60ZbRjyDQvNC+0LPRg9GG0Ywg0YXRg9GC0LrQsCDRgNCw0LfRgNCw0LTQt9GW0YbRjCDQsdCw0YLQsNGA0Y3Rji4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FsZW5kYXIiIG1zZ2lkPSI1ODYzNTA4NDM3NzgzNjgzOTAyIj4i0JrQsNC70Y/QvdC00LDRgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FsZW5kYXIiIG1zZ2lkPSI1Nzc3NTM0MzE2OTgyMTg0NDE2Ij4i0J/RgNCw0LzRiyDQtNC+0YHRgtGD0L8g0LTQsCDQutCw0LvQtdC90LTQsNGA0LAg0ZYg0LzQtdGA0LDQv9GA0YvQtdC80YHRgtCy0LDRni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGljdGlvbmFyeSIgbXNnaWQ9IjQxNDg1OTcxMjg4NDM2NDEzNzkiPiLQp9GL0YLQsNGG0Ywg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRliDRgdC70L7RntC90ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGljdGlvbmFyeSIgbXNnaWQ9Ijc5MjExNjYzNTU5NjQ3NjQ0OTAiPiLQp9GL0YLQsNGG0Ywg0YHQu9C+0LLRiyDRniDQutCw0YDRi9GB0YLQsNC70YzQvdGW0YbQutGW0Lwg0YHQu9C+0Z7QvdGW0LrRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODA5MDIzNzcwMjQzMjU3Njc4OCI+ItCX0LDQv9GW0YHQsNGG0Ywg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRliDRgdC70L7RntC90ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iMjcxMTU2MTk5NDQ5NzM2MTY0NiI+ItCU0LDQtNCw0YbRjCDRgdC70L7QstGLINGeINC60LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYg0YHQu9C+0Z7QvdGW0LouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Jvb2ttYXJrcyIgbXNnaWQ9IjE5NDk1MTk2NzMxMDM5NjgyMjkiPiLQl9Cw0LrQu9Cw0LTQutGWINGWINCz0ZbRgdGC0L7RgNGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Jvb2ttYXJrcyIgbXNnaWQ9IjQxNjk3NzE2MDYyNTc5NjMwMjgiPiLQn9GA0LDQvNGLINC00L7RgdGC0YPQvyDQtNCwINC30LDQutC70LDQtNCw0Log0ZYg0LPRltGB0YLQvtGA0YvRliDQsdGA0LDRntC30LXRgNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kZXZpY2VBbGFybXMiIG1zZ2lkPSI2MTE3NzA0NjI5NzI4ODI0MTAxIj4i0JHRg9C00LfRltC70YzQvdGW0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RldmljZUFsYXJtcyIgbXNnaWQ9IjQ3NjkzNTYzNjIyNTE2NDExNzUiPiLQo9GB0YLQsNC70Y/QstCw0YbRjCDQsdGD0LTQt9GW0LvRjNC90ZbQui4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfdm9pY2VtYWlsIiBtc2dpZD0iNDE2MjIzNzE0NTAyNzU5MjEzMyI+ItCT0LDQu9Cw0YHQsNCy0LDRjyDQv9C+0YjRgtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY192b2ljZW1haWwiIG1zZ2lkPSIyNDk4NDAzOTY5ODYyOTUxMzkzIj4i0J/RgNCw0LzRiyDQtNC+0YHRgtGD0L8g0LTQsCDQs9Cw0LvQsNGB0LDQstC+0Lkg0L/QvtGI0YLRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWljcm9waG9uZSIgbXNnaWQ9IjE3MTUzOTkwMDI1MDA0MzQ2NCI+ItCc0ZbQutGA0LDRhNC+0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21pY3JvcGhvbmUiIG1zZ2lkPSI3MTA2NjE4Mjg2OTA1NzM4NDA4Ij4i0J/RgNCw0LzRiyDQtNC+0YHRgtGD0L8g0LTQsCDQvNGW0LrRgNCw0YTQvtC90YMg0LTQu9GPINC30LDQv9GW0YHRgyDQs9GD0LrRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FtZXJhIiBtc2dpZD0iNDgyMDM3MjQ5NTg5NDU4NjYxNSI+ItCa0LDQvNC10YDQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMjkzMzY2NzM3MjI4OTU2NzcxNCI+ItCf0YDQsNC80Ysg0LTQvtGB0YLRg9C/INC00LAg0LrQsNC80LXRgNGLLCDQutCw0LEg0LfRgNCw0LHRltGG0Ywg0LfQtNGL0LzQsNC6INGG0ZYg0LfQvdGP0YbRjCDQstGW0LTRjdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zY3JlZW5sb2NrIiBtc2dpZD0iODI3NTUwMDE3MzMzMDcxODE2OCI+ItCt0LrRgNCw0L0g0LHQu9Cw0LrRltGA0L7RntC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NjcmVlbmxvY2siIG1zZ2lkPSI3MDY3NDk3MTI4OTI1NDk5NDAxIj4i0JzQsNCz0YfRi9C80LDRgdGG0Ywg0YPQv9C70YvQstCw0YbRjCDQvdCwINC/0LDQstC+0LTQt9GW0L3RiyDRjdC60YDQsNC90LAg0LHQu9Cw0LrRltGA0L7RntC6aSDQvdCwINCy0LDRiNCw0Lkg0L/RgNGL0LvQsNC00LfQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXBwSW5mbyIgbXNnaWQ9IjgwMjg3ODk3NjI2MzQxNDc3MjUiPiLQhtC90YTQsNGA0LzQsNGG0YvRjyDQsNCxINCy0LDRiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hcHBJbmZvIiBtc2dpZD0iMzk1MDM3ODUzODA0OTYyNTkwNyI+ItCc0LDQs9GH0YvQvNCw0YHRhtGMINGD0L/Qu9GL0LLQsNGG0Ywg0L3QsCDQv9Cw0LLQvtC00LfRltC90Ysg0ZbQvdGI0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4g0L3QsCDQstCw0YjQsNC5INC/0YDRi9C70LDQtNC30LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dhbGxwYXBlciIgbXNnaWQ9IjM4NTAyODAxNTgwNDExNzU5OTgiPiLQqNC/0LDQu9C10YDRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd2FsbHBhcGVyIiBtc2dpZD0iNTYzMDQxNzg1NDc1MDU0MDE1NCI+ItCX0LzRj9C90ZbRhtGMINC90LDQu9Cw0LTRiyDRiNC/0LDQu9C10YAg0L/RgNGL0LvQsNC00YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbUNsb2NrIiBtc2dpZD0iNDA2NTM1NzU5MjM2NjEyOTkyIj4i0JPQsNC00LfRltC90L3RltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1DbG9jayIgbXNnaWQ9IjM5NDQzNTk4MzM2MjQwOTQ5OTIiPiLQl9C80Y/QvdGW0YbRjCDRh9Cw0YEg0LDQsdC+INGH0LDRgdCw0LLRiyDQv9C+0Y/RgSDQv9GA0YvQu9Cw0LTRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RhdHVzQmFyIiBtc2dpZD0iMjA5NTg2MjU2ODExMzk0NTM5OCI+ItCg0LDQtNC+0Log0YHRgtCw0L3RgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iNjI0MjU5MzQzMjIyNjgwNzE3MSI+ItCX0LzRj9C90ZbRhtGMINC90LDQu9Cw0LTRiyDQv9GA0YvQu9Cw0LTRiyDRniDRgNCw0LTQutGDINGB0YLQsNC90YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5bmNTZXR0aW5ncyIgbXNnaWQ9IjMzNDE5OTA5ODYxNDc4MjY1NDEiPiLQndCw0LvQsNC00Ysg0YHRltC90YXRgNCw0L3RltC30LDRhtGL0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5bmNTZXR0aW5ncyIgbXNnaWQ9Ijc2MDMxOTUyNjUxMjkwMzE3OTciPiLQlNC+0YHRgtGD0L8g0LTQsCDQvdCw0LvQsNC0INGB0ZbQvdGF0YDQsNC90ZbQt9Cw0YbRi9GWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hY2NvdW50cyIgbXNnaWQ9IjMzNTk2NDYyOTExMjUzMjU1MTkiPiLQktCw0YjRi9GPINGe0LvRltC60L7QstGL0Y8g0LfQsNC/0ZbRgdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2NvdW50cyIgbXNnaWQ9IjQ5NDg3MzI2NDE4MjcwOTEzMTIiPiLQlNC+0YHRgtGD0L8g0LTQsCDQtNC30LXRjtGH0YvRhSDRg9C70ZbQutC+0LLRi9GFINC30LDQv9GW0YHQsNGeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNzk5ODIxNDk2ODc5MTU5OTMyNiI+ItCa0ZbRgNCw0LLQsNC90L3QtSDQsNC/0LDRgNCw0YLQvdGL0Lwg0LfQsNCx0LXRgdC/0Y/Rh9GN0L3QvdC10LwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2hhcmR3YXJlQ29udHJvbHMiIG1zZ2lkPSI0MzU3MDU3ODYxMjI1NDYyNzAyIj4i0J/RgNCw0LzRiyDQtNC+0YHRgtGD0L8g0LTQsCDQsNC/0LDRgNCw0YLQvdCw0LPQsCDQt9Cw0LHQtdGB0L/Rj9GH0Y3QvdC90Y8g0Lcg0YLRjdC70LXRhNC+0L3QvdCw0Lkg0YLRgNGD0LHQutGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9waG9uZUNhbGxzIiBtc2dpZD0iOTA2NzE3Mzk4ODMyNTg2NTkyMyI+ItCi0Y3Qu9C10YTQvtC90L3Ri9GPINCy0YvQutC70ZbQutGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19waG9uZUNhbGxzIiBtc2dpZD0iNzQ4OTcwMTYyMDQ0NjE4Mzc3MCI+ItCQ0LTRgdC+0YfQstCw0YbRjCwg0LfQsNC/0ZbRgdCy0LDRhtGMINGWINCw0L/RgNCw0YbQvtGe0LLQsNGG0Ywg0LLRi9C60LvRltC60ZYg0YLRjdC70LXRhNC+0L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3lzdGVtVG9vbHMiIG1zZ2lkPSI0NjUyMTkxNjQ0MDgyNzE0MDQ4Ij4i0KHRltGB0YLRjdC80L3Ri9GPINGW0L3RgdGC0YDRg9C80LXQvdGC0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbVRvb2xzIiBtc2dpZD0iODE2MjEwMjYwMjE5MDczNDMwNSI+ItCd0ZbQttC90ZYg0Z7Qt9GA0L7QstC10L3RjCDQtNC+0YHRgtGD0L/RgyDRliDQutGW0YDQsNCy0LDQvdC90Y8g0YHRltGB0YLRjdC80LDQuS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGV2ZWxvcG1lbnRUb29scyIgbXNnaWQ9IjM0NDYxNjQ1ODQ3MTA1OTY1MTMiPiLQodGA0L7QtNC60ZYg0YDQsNGB0L/RgNCw0YbQvtGe0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2ZWxvcG1lbnRUb29scyIgbXNnaWQ9IjcwNTg4MjgwMzIzNTgxNDIwMTgiPiLQpNGD0L3QutGG0YtpLCDQv9Cw0YLRgNGN0LHQvdGL0Y8g0YLQvtC70YzQutGWINC00LvRjyDRgNCw0YHQv9GA0LDRhtC+0Z7RiNGH0YvQutCw0Z4g0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaXNwbGF5IiBtc2dpZD0iNDI3OTkwOTY3NjAzNjQwMjYzNiI+ItCa0LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYg0ZbQvdGC0Y3RgNGE0LXQudGBINGW0L3RiNCw0LPQsCDQv9GA0YvQutC70LDQtNCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaXNwbGF5IiBtc2dpZD0iNjA1MTAwMjAzMTkzMzAxMzcxNCI+ItCj0L/Qu9GL0Z4g0LrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRltGFINGW0L3RgtGN0YDRhNC10LnRgdCw0Z4g0ZbQvdGI0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0b3JhZ2UiIG1zZ2lkPSIxOTcxMTE4NzcwNTQ2MzM2OTY2Ij4i0KHRhdC+0LLRltGI0YfQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3NDQyMzE4NTAyNDQ2ODc0OTk5Ij4i0JDRgtGA0YvQvNCw0YbRjCDQtNC+0YHRgtGD0L8g0LTQsCBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC60LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iOTIwMzMwMjIxNDkxNTM1NTc3NCI+ItCU0L7RgdGC0YPQvyDQtNCwIFNELdC60LDRgNGC0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiLQodC/0LXRhtGL0Y/Qu9GM0L3Ri9GPINC80LDQs9GH0YvQvNCw0YHRhtGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI0MjA1MTk2ODgxNjc4MTQ0MzM1Ij4i0KTRg9C90LrRhtGL0ZYsINGP0LrRltGPINC80L7Qs9GD0YbRjCDQt9Cw0L/Ri9GC0LDRhtGMINC00LDQtNCw0YLQutC+0LLRi9GPINGC0Y3RhdC90LDQu9C+0LNpaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJldHJpZXZlV2luZG93Q29udGVudCIgbXNnaWQ9IjM5MDE3MTc5MzY5MzAxNzAzMjAiPiLQkNGC0YDRi9C80LDQudGG0LUg0LfQvNC10YHRhmnQstCwINCw0LrQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJldHJpZXZlV2luZG93Q29udGVudCIgbXNnaWQ9IjM3NzIyMjUwMDg2MDUzMTA2NzIiPiLQktGL0LLRg9GH0YvRhtC1INC30LzQtdGB0YZp0LLQsCDQsNC60L3QsCwg0Lcg0Y/QumnQvCDQstGLINC/0YDQsNGG0YPQtdGG0LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjMxMDg3MjMzNjQ2NzY2NjczMjAiPiLQo9C60LvRjtGH0YvRhtC1IEV4cGxvcmUgYnkgVG91Y2giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdFRvdWNoRXhwbG9yYXRpb24iIG1zZ2lkPSI1ODAwNTUyNTE2Nzc5MjQ5MzU2Ij4i0K3Qu9C10LzQtdC90YIsINC00LAg0Y/QumnRhSDQtNCw0LrRgNCw0L3QsNC7adGB0Y8sINC80L7Qs9GD0YbRjCDQsdGL0YbRjCDQsNCz0YPRh9Cw0L3Riywg0LAg0Y3QutGA0LDQvSDQsdGD0LTQt9C1INC/0YDQsNGG0LDQstCw0YbRjCDQtyDQttGN0YHRgtCw0LxpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE3Mzk4ODE3NjY1MjI1OTQwNzMiPiLQo9C60LvRjtGH0YvRhtC1INC/0LDQu9GP0L/RiNGN0L3QvdC1INCy0Y3QsS3QtNCw0YHRgtGD0L/QvdCw0YHRhtGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSI3ODgxMDYzOTYxNTA3NTExNzY1Ij4i0KHRhtGN0L3QsNGA0YtpINC80L7Qs9GD0YbRjCDQsdGL0YbRjCDRg9GB0YLQsNC70Y/QstCw0L3Riywg0LrQsNCxINC30YDQsNCx0ZbRhtGMINC30LzQtdGB0YZp0LLQsCDQv9GA0YvQutC70LDQtNCw0L3QvdGPINCx0L7Qu9GM0Ygg0LTQsNGB0YLRg9C/0L3Ri9C8LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9IjIxMDM0NDAzOTE5MDI0MTIxNzQiPiLQk9C70Y/QtNC3adGG0LUsINGI0YLQviDQvdCw0LFp0YDQsNC10YbQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+ItCj0LrQu9GO0YfQsNC1INGeINGB0Y/QsdC1INCw0YHQsNCx0ZbRgdGC0YvRjyDQtNCw0LTQt9C10L3Ri9GPLCDRgtCw0LrRltGPINGP0Log0L3Rg9C80LDRgNGLINC60YDRjdC00YvRgtC90YvRhSDQutCw0YDRgiDRliDQv9Cw0YDQvtC70ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i0LDQtNC60LvRjtGH0LDRhtGMINGG0ZYg0LfQvNGP0L3Rj9GG0Ywg0YDQsNC00L7QuiDRgdGC0LDQvdGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCw0LTQutC70Y7Rh9Cw0YbRjCDRgNCw0LTQvtC6INGB0YLQsNC90YMg0LDQsdC+INC00LDQtNCw0LLQsNGG0Ywg0ZYg0LLRi9C00LDQu9GP0YbRjCDRgdGW0YHRgtGN0LzQvdGL0Y8g0LfQvdCw0YfQutGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcyNDcyODE5MTEzODc5MzE0ODUiPiLRgNCw0LTQvtC6INGB0YLQsNC90YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzE2MTEzNjYwNzk1OTc2MDYwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LHRi9GG0Ywg0YDQsNC00LrQvtC8INGB0YLQsNC90YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSIxMTQ4MTk4Nzg1OTM3NDg5MjY0Ij4i0YDQsNC30LPQsNGA0L3Rg9GG0Ywv0LfQs9Cw0YDQvdGD0YbRjCDRgNCw0LTQvtC6INGB0YLQsNC90YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSI2OTE3NTQ5NDM3MTI5NDAxMTMyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINGA0LDQt9Cz0L7RgNGC0LLQsNGG0Ywg0YbRliDQt9Cz0L7RgNGC0LLQsNGG0Ywg0YDQsNC00L7QuiDRgdGC0LDQvdGDLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2luc3RhbGxfc2hvcnRjdXQgKDQyNzkwNzAyMTYzNzE1NjQyMzQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfaW5zdGFsbF9zaG9ydGN1dCAoODM0MTI5NTkxNjI4NjczNjk5NikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX3VuaW5zdGFsbF9zaG9ydGN1dCAoNDcyOTYzNDUyNDA0NDAwMzY5OSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY191bmluc3RhbGxfc2hvcnRjdXQgKDY3NDU3NDM0NzQyNjUwNTc5NzUpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iMzkwNjAwNzgzMTE5Mjk5MDk0NiI+ItC/0LXRgNCw0L3QsNC60ZbRgNCw0LLQsNC90L3QtSDQt9GL0YXQvtC00LfRj9GH0YvRhSDQstGL0LrQu9GW0LrRltCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjUzMzEzMTg5MzE5Mzc0MDIwNDAiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNC/0YDQsNGG0L7RntCy0LDRhtGMINCy0YvRhdC+0LTQvdGL0Y8g0LLRi9C60LvRltC60ZYg0ZYg0LfQvNGP0L3Rj9GG0Ywg0L3QsNCx0ZbRgNCw0L3RiyDQvdGD0LzQsNGALiDQlNC30Y/QutGD0Y7Rh9GLINCz0Y3RgtCw0LzRgyDQtNCw0LfQstC+0LvRgyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0LzQvtCz0YPRhtGMINCw0LTRgdC+0YfQstCw0YbRjCwg0L/QtdGA0LDQvdCw0LrRltGA0L7RntCy0LDRhtGMINGG0ZYg0L/RgNCw0LTRg9GF0ZbQu9GP0YbRjCDQstGL0YXQvtC00L3Ri9GPINCy0YvQutC70ZbQutGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVNtcyIgbXNnaWQ9Ijg2NzM0NzE3Njg5NDc4OTUwODIiPiLQsNGC0YDRi9C80LDQvdC90LUg0YLRjdC60YHRgtCw0LLRi9GFINC/0LDQstC10LTQsNC80LvQtdC90L3Rj9GeIChTTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNGC0YDRi9C80LvRltCy0LDRhtGMINGWINCw0L/RgNCw0YbQvtGe0LLQsNGG0YwgU01TLdC/0LDQstC10LTQsNC80LvQtdC90L3Rli4g0JPRjdGC0LAg0LfQvdCw0YfRi9GG0YwsINGI0YLQviDQv9GA0YvQutC70LDQtNCw0L3QvdC1INC80L7QttCwINC60LDQvdGC0YDQsNC70Y/QstCw0YbRjCDQsNCx0L4g0LLRi9C00LDQu9GP0YbRjCDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYsINCw0LTQv9GA0LDRntC70LXQvdGL0Y8g0L3QsCDQv9GA0YvQu9Cw0LTRgywg0L3QtSDQv9Cw0LrQsNC30LLQsNGO0YfRiyDRltGFINCy0LDQvC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVNbXMiIG1zZ2lkPSIxODIxMzE3MzQ0NjY4MjU3MDk4Ij4i0LDRgtGA0YvQvNCw0L3QvdC1INGC0Y3QutGB0YLQsNCy0YvRhSDQv9Cw0LLQtdC00LDQvNC70LXQvdC90Y/RniAoTU1TKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVNbXMiIG1zZ2lkPSI1MzMwMTk0MzcyNjMyMTIyNjAiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNGC0YDRi9C80LvRltCy0LDRhtGMINGWINCw0L/RgNCw0YbQvtGe0LLQsNGG0YwgTU1TLdC/0LDQstC10LTQsNC80LvQtdC90L1pLiDQk9GN0YLQsCDQt9C90LDRh9GL0YbRjCwg0YjRgtC+INC/0YDRi9C60LvQsNC00LDQvdC90LUg0LzQvtC20LAg0LrQsNC90YLRgNCw0LvRj9Cy0LDRhtGMINCw0LHQviDQstGL0LTQsNC70Y/RhtGMINC/0LDQstC10LTQsNC80LvQtdC90L3Rliwg0LDQtNC/0YDQsNGe0LvQtdC90YvRjyDQvdCwINC/0YDRi9C70LDQtNGDLCDQvdC1INC/0LDQutCw0LfQstCw0Y7Rh9GLINGW0YUg0LLQsNC8LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9IjE4MDM0Nzc2NjA4NDYyODgwODkiPiLQsNGC0YDRi9C80LvRltCy0LDRhtGMINGN0LrRgdGC0YDQsNC90YvRjyDRgtGA0LDQvdGB0LvRj9GG0YvRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSI4NDg1MjQwNzAyNjI0MzE5NzQiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNGC0YDRi9C80LvRltCy0LDRhtGMINGWINCw0L/RgNCw0YbQvtGe0LLQsNGG0Ywg0Y3QutGB0YLRgNCw0L3Ri9GPINC/0LDQstC10LTQsNC80LvQtdC90L3Rli4g0JPRjdGC0Ysg0LTQsNC30LLQvtC7INC00LDRgdGC0YPQv9C90Ysg0YLQvtC70YzQutGWINC00LvRjyDRgdGW0YHRgtGN0LzQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iMTU5ODMyODg0MzYxOTY0NjE2NiI+ItGH0YvRgtCw0YbRjCDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYg0LHQsNC30LDQstCw0Lkg0YHRgtCw0L3RhtGL0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINGH0YvRgtCw0YbRjCDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYg0LHQsNC30LDQstCw0Lkg0YHRgtCw0L3RhtGL0ZYsINCw0YLRgNGL0LzQsNC90YvRjyDQv9GA0YvQu9Cw0LTQsNC5LiDQn9Cw0L/Rj9GA0Y3QtNC20LDQvdC90ZYg0LHQsNC30LDQstCw0Lkg0YHRgtCw0L3RhtGL0ZYg0LTQsNGB0YvQu9Cw0Y7RhtGG0LAg0Z4g0L3QtdC60LDRgtC+0YDRi9GPINC80LXRgdGG0YssINC60LDQsSDQv9Cw0L/Rj9GA0Y3QtNC30ZbRhtGMINCy0LDRgSDQsNCxINC90LDQtNC30LLRi9GH0LDQudC90YvRhSDRgdGW0YLRg9Cw0YbRi9GP0YUuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINGD0L/Qu9GL0LLQsNGG0Ywg0L3QsCDQv9GA0LDQtNGD0LrRhtGL0LnQvdCw0YHRhtGMINGG0ZYg0L/RgNCw0YbRgyDQv9GA0YvQu9Cw0LTRiyDQv9GA0Ysg0LDRgtGA0YvQvNCw0L3QvdGWINC/0LDQstC10LTQsNC80LvQtdC90L3RjyDQsdCw0LfQsNCy0LDQuSDRgdGC0LDQvdGG0YvRliDQsNCxINC90LDQtNC30LLRi9GH0LDQudC90LDQuSDRgdGW0YLRg9Cw0YbRi9GWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFNtcyIgbXNnaWQ9IjU2MDA4MzA2MTIxNDc2NzE1MjkiPiLQsNC00L/RgNCw0Z7Qu9GP0YbRjCBTTVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQtNC70Y8g0LDQtNC/0YDQsNGe0LrRliBTTVMg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGP0Z4uINCT0Y3RgtCwINC80L7QttCwINC/0YDRi9Cy0LXRgdGG0ZYg0LTQsCDQvdC10YfQsNC60LDQvdGL0YUg0LDQsdCy0ZbQvdCw0LLQsNGH0LLQsNC90L3Rj9GeLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0LDQs9GA0LDQvNGLINC80L7Qs9GD0YbRjCDQutCw0YjRgtCw0LLQsNGG0Ywg0LLQsNC8INCz0YDQvtGI0LDQuSDQvdCwINCw0LTQv9GA0LDRntC60YMg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGP0Z4g0LHQtdC3INCy0LDRiNCw0LPQsCDQv9Cw0YbQstGP0YDQtNC20Y3QvdC90Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iODcxMzg4OTEwNTMwNTk0MzIwMCI+ItCw0LTQv9GA0LDQsmnRhtGMINC80LXRgNCw0L/RgNGL0LXQvNGB0YLQstCwIFwi0LDQtNC60LDQtyDQv9GA0LDQtyDQv9Cw0LLQtdC00LDQvNC70LXQvdC90LVcIiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI3MTA3NjQ4NTQ4NDY4Nzc4NzM0Ij4i0J/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQt9C80L7QttCwINCw0LTQv9GA0LDRntC70Y/RhtGMINC30LDQv9GL0YLRiyDRniDRltC90YjRi9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LTQu9GPINCw0L/RgNCw0YbQvtGe0LrRliDQv9Cw0LLQtdC00LDQvNC70LXQvdC90Y/RniDQv9GA0LAg0LzQtdGA0LDQv9GA0YvQtdC80YHRgtCy0Ysg0YLRg9GLIFwi0YDRjdCw0LPQsNCy0LDRhtGMLdC/0YDQsNC3LdC/0LDQstC10LTQsNC80LvQtdC90L3QtVwiINC00LvRjyDRntCy0LDRhdC+0LTQvdGL0YUg0LLRi9C60LvRltC60LDRni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTbXMiIG1zZ2lkPSI4NzQ1MDg2NTcyMjEzMjcwNDgwIj4i0YfRi9GC0LDQvdC90LUg0YHQstCwadGFINGC0Y3QutGB0YLQsNCy0YvRhSDQv9Cw0LLQtdC00LDQvNC70LXQvdC90Y/RniAoU01TINGG0ZYgTU1TKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI0Njc5ODE1NDg2ODQ3MzU1MjIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YfRi9GC0LDRhtGMIFNNUy3Qv9Cw0LLQtdC00LDQvNC70LXQvdC9aSwg0Y/QutGW0Y8g0LfQsNGF0L7RntCy0LDRjtGG0YbQsCDQvdCwINC/0LvQsNC90YjRjdGG0LUg0YbRliBTSU0t0LrQsNGA0YbQtS4g0JPRjdGC0LAg0LTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YfRi9GC0LDRhtGMINGe0YHQtSBTTVMt0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWLCDQvdC10LfQsNC70LXQttC90LAg0LDQtCDQt9C80LXRgdGGadCy0LAg0LDQsdC+INC/0YDRi9Cy0LDRgtC90LDRgdGG0ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YfRi9GC0LDRhtGMIFNNUy3Qv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYsINGP0LrRltGPINC30LDRhdC+0Z7QstCw0Y7RhtGG0LAg0Z4g0YLRjdC70LXRhNC+0L3QtSDQsNCx0L4g0L3QsCBTSU0t0LrQsNGA0YbQtS4g0JPRjdGC0LAg0LTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YfRi9GC0LDRhtGMINGe0YHQtSBTTVMt0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWLCDQvdC10LfQsNC70LXQttC90LAg0LDQtCDQt9C80LXRgdGGadCy0LAg0LDQsdC+INC/0YDRi9Cy0LDRgtC90LDRgdGG0ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNtcyIgbXNnaWQ9IjMyMTY5NTA0NzI2MzYyMTQ3NzQiPiLRgNGN0LTQsNCz0LDQstCw0L3QvdC1INGC0Y3QutGB0YLQsNCy0YvRhSDQv9Cw0LLQtdC00LDQvNC70LXQvdC90Y/RniAoU01TINGG0ZYgTU1TKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC30LDQv9GW0YHQstCw0YbRjCDQtNCw0LTQt9C10L3Ri9GPINGeIFNNUy3Qv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYsINGP0LrRltGPINC30LDRhdC+0Z7QstCw0Y7RhtGG0LAg0L3QsCDQv9C70LDQvdGI0Y3RhtC1INCw0LHQviDQvdCwIFNJTS3QutCw0YDRhtC1LiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQstGL0LTQsNC70Y/RhtGMINCy0LDRiNGLINC/0LDQstC10LTQsNC80LvQtdC90L3Rli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjg2Njg3MDkwNTIzMjg1NjciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9Cw0L/RltGB0LLQsNGG0Ywg0LTQsNC00LfQtdC90YvRjyDRniBTTVMt0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWLCDRj9C60ZbRjyDQt9Cw0YXQvtGe0LLQsNGO0YbRhtCwINGeINGC0Y3Qu9C10YTQvtC90LUg0LDQsdC+INC90LAgU0lNLdC60LDRgNGG0LUuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINCy0YvQtNCw0LvRj9GG0Ywg0LLQsNGI0Ysg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI1OTkxMzk4NzExOTM2NTkwNDEwIj4i0LDRgtGA0YvQvNCw0L3QvdC1INGC0Y3QutGB0YLQsNCy0YvRhSDQv9Cw0LLQtdC00LDQvNC70LXQvdC90Y/RniAoV0FQKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDRliDQsNC/0YDQsNGG0L7RntCy0LDRhtGMINC/0LDQstC10LTQsNC80LvQtdC90L3RliBXQVAuINCU0LfRj9C60YPRjtGH0Ysg0LPRjdGC0LDQvNGDINC00LDQt9Cy0L7Qu9GDINC80L7QttC90LAg0LrQsNC90YLRgNCw0LvRj9Cy0LDRhtGMINCw0LHQviDQstGL0LTQsNC70Y/RhtGMINC/0LDQstC10LTQsNC80LvQtdC90L3Rliwg0L/QsNGB0LvQsNC90YvRjyDQstCw0LwsINC90LUg0L/QsNC60LDQt9Cy0LDRjtGH0Ysg0ZbRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRhc2tzIiBtc2dpZD0iNjQ2NjA5NTM5NjYyMzkzMzkwNiI+ItCw0YLRgNGL0LzQsNGG0Ywg0LfQsNC/0YPRiNGH0LDQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQsNGC0YDRi9C80Ltp0LLQsNGG0Ywg0LfQstC10YHRgtC6aSDQv9GA0LAg0L/RgNGL0LrQu9Cw0LTQsNC90L1pLCDQt9Cw0L/Rg9GI0YfQsNC90YvRjyDQt9Cw0YDQsNC3IGkg0L3Rj9C00LDRntC90LAuINCf0YDRi9C60LvQsNC00LDQvdC90LUg0LzQvtC20LAg0LfQvdCw0LnRgdGGaSBp0L3RhNCw0YDQvNCw0YbRi9GOINC/0YDQsCDRgtC+0LUsINGP0Lpp0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L1pINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGO0YbRhtCwINC90LAg0L/RgNGL0LvQsNC00LfQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSI3MTE0MjU1MjgxOTQ0MjExNjgyIj4i0YPQt9Cw0LXQvNCw0LTQt9C10Y/QvdC90LUg0L/QsNC80ZbQtiDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsNC80ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iMzY0NjcwOTYzNjIzMzg1Nzg2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINCy0YvQutC+0L3QstCw0YbRjCDQtNC30LXRj9C90L1pINGB0Y/RgNC+0LQg0YDQvtC30L3Ri9GFINC60LDRgNGL0YHRgtCw0LvRjNC9adC60LDRniDQv9GA0YvQu9Cw0LTRiy4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINCz0Y3RgtCwLCDQutCw0LEg0L/QsNGA0YPRiNGL0YbRjCDQsNCx0LDRgNC+0L3RgyDQv9Cw0Lxp0LYg0LrQsNGA0YvRgdGC0LDQu9GM0L1p0LrQsNC8aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMjU2NzczNDI4NTU0NTA3NDEwNSI+ItC/0L7RntC90LDRjyDQu9GW0YbRjdC90LfRltGPINC00LvRjyDRntC30LDQtdC80LDQtNC30LXRj9C90L3RjyDQv9Cw0LzRltC2INC60LDRgNGL0YHRgtCw0LvRjNC9adC60LDQvGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjM3Njg0MTM2ODM5NTUwMjM2NiI+ItCU0LDQt9Cy0LDQu9GP0LUg0Z7RgdC1INC80LDQs9GH0YvQvNGL0Y8g0Z7Qt9Cw0LXQvNCw0LTQt9C10Y/QvdC9aSDQv9Cw0LzRltC2INC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCw0LzRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZVVzZXJzIiBtc2dpZD0iMTY3NjE1MDkxMTY3MjI4MjQyOCI+ItC60ZbRgNCw0LLQsNC90L3QtSDQtNCw0LTQt9C10L3Ri9C8aSDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsNGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNlcnMiIG1zZ2lkPSI4NDA5MzA2NjY3NjQ1MzU1NjM4Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LrRltGA0LDQstCw0YbRjCDQt9Cy0LXRgdGC0LrQsNC8aSDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsNGeINC90LAg0L/RgNGL0LvQsNC00LfQtSwg0YMg0YLRi9C8INC70ZbQutGDINC30LDQv9GL0YLQsNC8aSwg0L/RgNCw0YbRjdGB0LDQvGkg0YHRgtCy0LDRgNGN0L3QvdGPINGWINCy0YvQtNCw0LvQtdC90L3Rjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4i0LDRgtGA0YvQvNCw0YbRjCDQv9Cw0LTRgNCw0LHRj9C30L3Ri9GPINC00LDQtNC30LXQvdGL0Y8g0L/RgNCwINC30LDQv9GD0YjRh9Cw0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSIxNTM4MjQ3NDE0NDA3MTc1OTkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDQv9Cw0LTRgNCw0LHRj9C30L3Rg9GOINGW0L3RhNCw0YDQvNCw0YbRi9GOINC/0YDQsCDQsdGP0LPRg9GH0YvRjyDRliDQvdGP0LTQsNGe0L3QsCDQt9Cw0L/Rg9GI0YfQsNC90YvRjyDQt9Cw0LTQsNGH0YsuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINCw0YLRgNGL0LzQu9GW0LLQsNGG0Ywg0LDRgdCw0LHRltGB0YLRg9GOINGW0L3RhNCw0YDQvNCw0YbRi9GOINC/0YDQsCDRltC90YjRi9GPINC/0YDRi9C60LvQsNC00LDQvdC9aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9IjIwMTg1NzU1MjY5MzQ0MjI3NzkiPiLQt9C80Y/QvdGW0YbRjCDQv9Cw0YDQsNC00LDQuiDQt9Cw0L/Rg9GI0YfQsNC90YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW9yZGVyVGFza3MiIG1zZ2lkPSI3NzM0MjE3NzU0ODc3NDM5MzUxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC/0LXRgNCw0LzRj9GI0YfQsNGG0Ywg0LfQsNC00LDQvdC90ZYg0L3QsCDigIvigIvQv9GP0YDRjdC00L3RliDQv9C70LDQvSDRliDRniDRhNC+0L0uINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINC/0YDRi9C80YPRgdC+0LLQsCDRgNCw0LHRltGG0Ywg0YHRj9Cx0LUg0LDRgdC90L7RntC90YvQvNGWINCx0LXQtyDQstCw0YjQsNCz0LAg0LLQtdC00LDQvNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVtb3ZlVGFza3MiIG1zZ2lkPSI2ODIxNTEzNDAxODcwMzc3NDAzIj4i0YHQv9GL0L3RltGG0Ywg0LfQsNC/0YPRiNGH0LDQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlbW92ZVRhc2tzIiBtc2dpZD0iMTM5NDcxNDM1MjA2MjYzNTQ5MyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCy0YvQtNCw0LvRj9GG0Ywg0LfQsNC00LDQvdC90ZYg0ZYg0YHQv9GL0L3Rj9GG0Ywg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rliwg0Y/QutGW0Y8g0ZbRhSDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRjtGG0YwuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0L/QtdGA0LDRiNC60L7QtNC3adGG0Ywg0L/RgNCw0YbRiyDRltC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9tYW5hZ2VBY3Rpdml0eVN0YWNrcyAoNzM5MTE5MTM4NDAyNzMwMzA2NSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19tYW5hZ2VBY3Rpdml0eVN0YWNrcyAoMTYxNTg4MTkzMzAzNDA4NDQ0MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9IjI5MTg3NjgyMzgwNDUyMDY0NTYiPiLQv9Cw0YfRi9C90LDRhtGMINC70Y7QsdGLINC/0YDQsNGG0Y3RgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSI5OTc4MjM2OTUzNDM1ODQwMDEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0L/QsNGH0YvQvdCw0YbRjCDQu9GO0LHRiyDQv9GA0LDRhtGN0YEsINC90LXQt9Cw0LvQtdC20L3QsCDQsNC0INCw0LHQsNGA0L7QvdGLINC00LDQt9Cy0L7Qu9Cw0Lwg0YbRliDRgdGC0LDQvdGDINGN0LrRgdC/0LDRgNGC0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRTY3JlZW5Db21wYXRpYmlsaXR5IiBtc2dpZD0iNjk3NTM4NzExODg2MTg0MjA2MSI+ItGD0YHRgtCw0LvRj9Cy0LDRhtGMINGB0YPQvNGP0YjRh9Cw0LvRjNC90LDRgdGG0Ywg0Y3QutGA0LDQvdCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRTY3JlZW5Db21wYXRpYmlsaXR5IiBtc2dpZD0iNjkyMDQzNjE4NjkzOTE3Mzc0Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC60ZbRgNCw0LLQsNGG0Ywg0YDRjdC20YvQvNCw0Lwg0YHRg9C80Y/RiNGH0LDQu9GM0L3QsNGB0YbRliDRjdC60YDQsNC90LDRniDRltC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4g0KjQutC+0LTQvdCw0YHQvdCw0LUg0J/QlyDQvNC+0LbQsCDQv9C10YDQsNGI0LrQvtC00Ldp0YbRjCDQv9GA0LDRhtGLINGW0L3RiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0RGVidWdBcHAiIG1zZ2lkPSIzMDIyMTA3MTk4Njg2NTg0MDUyIj4i0YPQutC70Y7Rh9GL0YbRjCDQsNC00LvQsNC00LrRgyDQv9GA0YvQutC70LDQtNCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0RGVidWdBcHAiIG1zZ2lkPSI0NDc0NTEyNDE2Mjk5MDEzMjU2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YPQutC70Y7Rh9Cw0YbRjCDQsNC00LvQsNC00LrRgyDQtNC70Y8g0ZbQvdGI0LDQs9CwINC/0YDRi9C60LvQsNC00LDQvdC90Y8uINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LPRjdGC0LAsINC60LDQsSDRgdC/0YvQvdGP0YbRjCDRltC90YjRi9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb25maWd1cmF0aW9uIiBtc2dpZD0iNDE2MjA5MjE4NTEyNDIzNDQ4MCI+ItC30LzQtdC90LAg0L3QsNC70LDQtCDQsNC00LvRjtGB0YLRgNCw0LLQsNC90L3RjyDRniDRgdGW0YHRgtGN0LzQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MzcyMjIzODczMTU0Mjk2MDc2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0LHRj9Cz0YPRh9GD0Y4g0LrQsNC90YTRltCz0YPRgNCw0YbRi9GOLCDQvdCw0L/RgNGL0LrQu9Cw0LQg0LzQvtCy0YMg0YZpINCw0LPRg9C70YzQvdGLINC/0LDQvNC10YAg0YjRgNGL0YTRgtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjU2ODQ1MDQwNTgxOTI5MjEwOTgiPiLQtNCw0LfQstCw0LvRj9GG0Ywg0YDRjdC20YvQvCBcItCjINCw0Z7RgtCw0LzQsNCx0ZbQu9GWXCIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19lbmFibGVDYXJNb2RlIiBtc2dpZD0iNDg1MzE4NzQyNTc1MTQxOTQ2NyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDRntC60LvRjtGH0LDRhtGMINGA0Y3QttGL0Lwg0LPRg9GH0L3QsNC5INGB0YPQstGP0LdpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSIzOTE0MDI2Njg3NDIwMTc3MjAyIj4i0LfQsNC60YDRi9GG0YbRkSDRltC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iNDU5MzM1MzIzNTk1OTczMzExOSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQt9Cw0LLRj9GA0YjQsNGG0Ywg0YTQvtC90LDQstGL0Y8g0L/RgNCw0YbRjdGB0Ysg0ZbQvdGI0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uINCT0Y3RgtCwINC80L7QttCwINGB0L/Ri9C9adGG0Ywg0L/RgNCw0YbRgyBp0L3RiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VTdG9wUGFja2FnZXMiIG1zZ2lkPSIyMzI5NjI3NDI4ODMyMDY3NzAwIj4i0L/RgNGL0LzRg9GB0L7QstCwINGB0L/Ri9C90ZbRhtGMINGW0L3RiNGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iNTI1MzE1NzI5NjE4Mzk0MDgxMiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC/0YDRi9C80YPRgdC+0LLQsCDRgdC/0YvQvdGP0YbRjCDRltC90YjRi9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZUJhY2siIG1zZ2lkPSI2NTI5MzUyMDQwNzI1ODQ2MTYiPiLQv9GA0YvQvNGD0YHQvtCy0LAg0LfQsNC60YDRi9GG0Ywg0L/RgNGL0LrQu9Cw0LTQsNC90L3QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlQmFjayIgbXNnaWQ9IjM4OTIyOTU4MzA0MTk1MTM2MjMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9GA0YvQvNGD0YHQvtCy0LAg0LfQsNC60YDRi9Cy0LDRhtGMINC70Y7QsdGLINCw0YHQvdC+0Z7QvdGLINC/0YDQsNGG0Y3RgS4g0J3QtSDQv9Cw0YLRgNCw0LHRg9C10YbRhtCwINC00LvRjyDQt9Cy0YvRh9Cw0LnQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZHVtcCIgbXNnaWQ9IjE2ODE3OTk4NjI0Mzg5NTQ3NTIiPiLQsNGC0YDRi9C80LvRltCy0LDRhtGMINGD0L3Rg9GC0YDQsNC90Ysg0YHRgtCw0L0g0YHRltGB0YLRjdC80YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kdW1wIiBtc2dpZD0iMTc3ODI5OTA4ODY5MjI5MDMyOSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCw0YLRgNGL0LzQu9GW0LLQsNGG0Ywg0ZbQvdGE0LDRgNC80LDRhtGL0Y4g0LDQsSDRg9C90YPRgtGA0LDQvdGL0Lwg0YHRgtCw0L3QtSDRgdGW0YHRgtGN0LzRiy4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQvNC+0LPRg9GG0Ywg0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDRiNGL0YDQvtC60ZYg0YHQv9C10LrRgtGAINC/0YDRi9Cy0LDRgtC90YvRhSDQtNCw0LTQt9C10L3Ri9GFINGWINC00LDQtNC30LXQvdGL0YUsINC/0YDRi9C30L3QsNGH0LDQvdGL0YUg0LTQu9GPINC30LDQsdC10YHQv9GP0YfRjdC90L3RjyDQsdGP0YHQv9C10LrRliDRltC90YTQsNGA0LzQsNGG0YvRliwg0Y/QutGW0Y8g0LfQstGL0YfQsNC50L3QsCDRltC8INC90LUg0L/QsNGC0YDRjdCx0L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iODAyMjU4ODYwODk5NDU4OTkzOCI+ItCw0YLRgNGL0LzQsNC90L3QtSDQt9C80LXRgdGC0YMg0Y3QutGA0LDQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSIzMTkzMjY5MDY5NDY5NzAwMjY1Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDQt9C80LXRgdGG0ZbQstCwINCw0LrRgtGL0Z7QvdCw0LPQsCDQsNC60L3QsC4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQvNC+0LPRg9GG0Ywg0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDRg9GB0ZEg0LfQvNC10YHRhtGW0LLQsCDQsNC60L3QsCDRliDRgNCw0LfQs9C70Y/QtNCw0YbRjCDRg9Cy0LXRgdGMINGP0LPQviDRgtGN0LrRgdGCLCDQsNC60YDQsNC80Y8g0L/QsNGA0L7Qu9GP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl90ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIyMzEyNjEyMTM1MTI3MzEwMjU0Ij4i0YfQsNGB0L7QstCwINGe0LrQu9GO0YfRi9GG0Ywg0LTQsNGB0YLRg9C/0L3QsNGB0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjgwNzk0NTYyOTMxODI5NzU0NjQiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YfQsNGB0L7QstCwINGe0LrQu9GO0YfQsNGG0Ywg0LTQsNGB0YLRg9C/0L3QsNGB0YbRjCDQv9GA0YvQu9Cw0LTRiy4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDRg9C60LvRjtGH0YvRhtGMINC00LDRgdGC0YPQv9C90LDRgdGG0Ywg0LHQtdC3INC30LPQvtC00Ysg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9Ijg1MzIyOTUxOTkxMTI1MTkzNzgiPiLQsNGC0YDRi9C80LDRhtGMINC30LLQtdGB0YLQumkg0L/RgNCwINCw0LrQvdC+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI0OTk4ODM2MzcwNDI0MTg2ODQ5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LLRi9C80LDRhtGMIGnQvdGE0LDRgNC80LDRhtGL0Y4g0L/RgNCwINCy0L7QutC90Ysg0LcgadC90YHRgtGA0YPQvNC10L3RgtCwINC6adGA0LDQstCw0L3QvdGPINCy0L7QutC90LDQvGkuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LLRi9C80LDRhtGMIGnQvdGE0LDRgNC80LDRhtGL0Y4sINGP0LrQsNGPINC/0YDRi9C30L3QsNGH0LDQvdCwINC00LvRjyDRntC90YPRgtGA0LDQvdCw0LPQsCDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0Z4g0YFp0YHRgtGN0LzQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4Njc1NTM1NjQ4ODA3NDI3Mzg5Ij4i0YTRltC70YzRgtGAINC/0LDQtNC30LXQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4MDA2MjM2MzE1ODg4MzQ3NjgwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINGA0Y3Qs2nRgdGC0YDQsNCy0LDRhtGMINGEadC70YzRgtGAINGD0LLQvtC00YMsINGP0LppINC/0LXRgNCw0LTQsNC1INC/0LDRgtC+0Log0YPRgWnRhSDQtNC30LXRj9C90L3Rj9GeINC60LDRgNGL0YHRgtCw0LvRjNC9adC60LAsINC/0LXRgNGIINGH0YvQvCDQsdGD0LTRg9GG0Ywg0LDQtNC/0YDQsNGe0LvQtdC90YvRjyDQt9Cy0LXRgdGC0LppINC/0YDQsCBp0YUuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LrQsNC90YLRgNCw0LvRj9Cy0LDRhtGMIGnQvdGC0Y3RgNGE0LXQudGBINCx0LXQtyDRg9C80Y/RiNCw0LvRjNC9adGG0YLQstCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNTk3MzYyNjczODE3MDYxODc3NSI+ItC/0LDQstGP0LvRltGH0YvRhtGMINCw0LTQu9GO0YHRgtGA0LDQstCw0L3QvdC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNzEyMTIzNTY4NDUxNTAwMzc5MiI+ItCf0YDRi9C60LvQsNC00LDQvdC90LUg0LfQvNC+0LbQsCDQv9Cw0LLRj9C70ZbRh9GL0YbRjCDRntGC0YDRi9C80LDQvdC90LUg0LTRi9GB0L/Qu9C10Y8uINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDQsNCz0YDQsNC80Ysg0LzQvtCz0YPRhtGMINC/0LXRgNCw0Z7RgtCy0LDRgNGL0YbRjCDQt9C80LXRgdGG0ZbQstCwINC00YvRgdC/0LvQtdGPINGC0LDQutGW0Lwg0YfRi9C90LDQvCwg0YjRgtC+INGP0L3QviDQt9GA0L7QsdGW0YbRjCDQv9GA0YvQu9Cw0LTRgyDQvdC10L/RgNGL0LTQsNGC0L3QsNC5INC00LvRjyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaHV0ZG93biIgbXNnaWQ9IjcxODU3NDc4MjQwMzg5MDkwMTYiPiLRh9Cw0YHRgtC60L7QstCw0LUg0LDQtNC60LvRjtGH0Y3QvdC90LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaHV0ZG93biIgbXNnaWQ9IjcwNDY1MDA4Mzg3NDYyOTE3NzUiPiLQodC/0YvQvdGP0LUg0LTQt9C10LnQvdCw0YHRhtGMINC80LXQvdC10LTQttGN0YDQsC4g0J3QtSDQstGL0LrQvtC90LLQsNC1INC/0L7RntC90LDQtSDQsNC00LrQu9GO0YfRjdC90L3QtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0b3BBcHBTd2l0Y2hlcyIgbXNnaWQ9IjQxMzg2MDg2MTA3MTc0MjU1NzMiPiLQv9GA0LDQtNGD0YXRltC70Y/RhtGMINC/0LXRgNCw0LrQu9GO0YfRjdC90L3QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI4MjYyMTk1ODAyNTgyMjU1MDIxIj4i0J3QtSDQtNCw0LfQstCw0LvRj9C1INC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutGDINC/0LXRgNCw0YXQvtC00LfRltGG0Ywg0LTQsCDRltC90YjQsNCz0LAg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjI1Mzc5MjIzMTE0MTE1NDYwMTYiPiLQsNGC0YDRi9C80LDRhtGMINCx0Y/Qs9GD0YfRg9GOINGW0L3RhNCw0YDQvNCw0YbRi9GOINC/0YDRi9C60LvQsNC00LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSIyNTEyNDQ4ODU1NDk2MDY3MTMxIj4i0JTQsNC30LLQsNC70Y/QtSDRntC70LDQtNCw0LvRjNC90ZbQutGDINCw0YLRgNGL0LzQu2nQstCw0YbRjCDQsNGB0LDQsdGW0YHRgtGD0Y4g0ZbQvdGE0LDRgNC80LDRhtGL0Y4g0LDQsSDQsdGP0LPRg9GH0YvQvCDQv9GA0YvQutC70LDQtNCw0L3QvWkg0L3QsCDQv9GP0YDRjdC00L3RltC8INC/0LvQsNC90LUg0Y3QutGA0LDQvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iODkyMjM5MDk0ODY3MTgyNjU2Ij4i0LDQtNGB0L7Rh9Cy0LDRhtGMINGWINC60LDQvdGC0YDQsNC70Y/QstCw0YbRjCDQt9Cw0L/Rg9GB0Log0YPRgdGW0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iNjAwMzYwMzE2MjU3ODU3NzQwNiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDRgdCw0YfRi9GG0Ywg0ZYg0LrQsNC90YLRgNCw0LvRj9Cy0LDRhtGMLCDRj9C6INGB0ZbRgdGC0Y3QvNCwINC30LDQv9GD0YHQutCw0LUg0L/RgNCw0YbRjdGB0YsuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINGG0LDQu9C60LDQvCDQv9Cw0YDRg9GI0YvRhtGMINC/0YDQsNGG0YMg0YHRltGB0YLRjdC80YsuINCT0Y3RgtGLINC00LDQt9Cy0L7QuyDQv9Cw0YLRgNGN0LHQvdGLINGC0L7Qu9GM0LrRliDQtNC70Y8g0YDQsNGB0L/RgNCw0YbQvtGe0LrRliwg0L3RltC60L7Qu9GWINC00LvRjyDQt9Cy0YvRh9Cw0LnQvdCw0LPQsCDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjI1NzYzMzM0MzQ4OTM1MzI0NzUiPiLRgtGA0LDQvdGB0LvRj9Cy0LDRhtGMINC/0LDQstC10LTQsNC80LvQtdC90L3RliDQsNCxINCy0YvQtNCw0LvQtdC90L3RliDQv9Cw0LrQtdGC0LDRniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC/0LXRgNCw0LTQsNCy0LDRhtGMINCw0L/QsNCy0Y/RiNGH0Y3QvdC90LUsINGI0YLQviDQv9Cw0LrQtdGCINC/0YDRi9C60LvQsNC00LDQvdC90Y/RniDQsdGL0Z4g0LLRi9C00LDQu9C10L3Riy4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQvNC+0LPRg9GG0Ywg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQs9GN0YLQsCwg0LrQsNCxINGB0L/Ri9C90Y/RhtGMINC70Y7QsdGL0Y8g0ZbQvdGI0YvRjyDQt9Cw0L/Rg9GI0YfQsNC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI1Njg5MDk1MDA5MDMwMzM2NTkzIj4i0L/QtdGA0LDRgdGL0LvQsNGG0Ywg0YLRgNCw0L3RgdC70Y/RhtGL0ZYsINCw0YLRgNGL0LzQsNC90YvRjyDQv9CwIFNNUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNDE1MjAzNzcyMDAzNDM2NTQ5MiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC/0LXRgNCw0LTQsNCy0LDRhtGMINCw0L/QsNCy0Y/RiNGH0Y3QvdC90LUg0L/RgNCwINCw0YLRgNGL0LzQsNC90L3QtSBTTVMt0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGPLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINCz0Y3RgtCwLCDQutCw0LEg0L/QsNC00YDQsNCx0LvRj9GG0Ywg0YPQstCw0YXQvtC00L3Ri9GPIFNNUy3Qv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+ItC/0LDRgdGL0LvQsNGG0Ywg0YHRltCz0L3QsNC7IFdBUC1QVVNILXJlY2VpdmVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjQ3ODM0MDI1MjUwMzk0NDI3MjkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9C10YDQsNC00LDQstCw0YbRjCDQsNC/0LDQstGP0YjRh9GN0L3QvdC1LCDRiNGC0L4g0L/QsNCy0LXQtNCw0LzQu9C10L3QvdC1IFdBUCBQVVNIINC90LUg0LHRi9C70L4g0LDRgtGA0YvQvNCw0L3QsC4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQvNC+0LPRg9GG0Ywg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQs9GN0YLQsCwg0LrQsNCxINC/0LDQtNGA0LDQsdC70Y/RhtGMINCw0YLRgNGL0LzQsNC90L3QtSBNTVMt0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGPINCw0LHQviDQvdC10L/RgNGL0LrQvNC10YLQvdCwINC30LDQvNGP0L3Rj9GG0Ywg0LfQvNC10YHRhtGW0LLQsCDQu9GO0LHQvtC5INCy0Y3QsS3RgdGC0LDRgNC+0L3QutGWINC90LAg0YjQutC+0LTQvdCw0YHQvdGD0Y4g0LLQtdGA0YFp0Y4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSIyNDUxODczNjY0MzYzNjYyNjY2Ij4i0LDQsdC80Y/QttC+0Z7QstCw0YbRjCDQutC+0LvRjNC60LDRgdGG0Ywg0LfQsNC/0YPRiNGH0LDQvdGL0YUg0L/RgNCw0YbRjdGB0LDRniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjczMTgwNjEzMTQwNDA4Nzk1NDIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQutCw0L3RgtGA0LDQu9GP0LLQsNGG0Ywg0LzQsNC60YHRltC80LDQu9GM0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDQt9Cw0L/Rg9GI0YfQsNC90YvRhSDQv9GA0LDRhtGN0YHQsNGeLiDQndC1INC/0LDRgtGA0LDQsdGD0LXRhtGG0LAg0LTQu9GPINC30LLRi9GH0LDQudC90YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI1NTA5NTg1MDc3OTg3OTY5NjUiPiLQv9GA0YvQvNGD0YHQvtCy0LDQtSDQt9Cw0LrRgNGL0YbRhtGRINGE0L7QvdCw0LLRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQutCw0L3RgtGA0LDQu9GP0LLQsNGG0YwsINGG0ZYg0LHRg9C00YPRhtGMINC/0YDQsNGG0Y3RgdGLINC30LDRntGB0ZHQtNGLINC30LDQstGP0YDRiNCw0YbRhtCwLCDRj9C6INGC0L7Qu9GM0LrRliDRj9C90Ysg0L/QtdGA0LDRhdC+0LTQt9GP0YbRjCDRgyDRhNC+0L3QsNCy0Ysg0YDRjdC20YvQvC4g0J3QtSDQv9Cw0YLRgNCw0LHRg9C10YbRhtCwINC00LvRjyDQt9Cy0YvRh9Cw0LnQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmF0dGVyeVN0YXRzIiBtc2dpZD0iMjc4OTYxMDY3MzUxNDEwMzM2NCI+ItGH0YvRgtCw0YbRjCDRgdGC0LDRgtGL0YHRgtGL0LrRgyDQsdCw0YLQsNGA0Y3RliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjU4OTczNDY1ODI4ODI5MTUxMTQiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1INC80L7QttCwINGB0YfRi9GC0LLQsNGG0Ywg0LHRj9Cz0YPRh9GL0Y8g0LfQstC10YHRgtC6aSDQv9GA0Ysg0L1p0LfQumkg0LfQsNGA0LDQtCDQsNC60YPQvNGD0LvRj9GC0LDRgNCwLiDQn9GA0YvQutC70LDQtNCw0L3QvdC1INC80L7QttCwINC30L3QsNC50YHRhmkg0L/QsNC00YDQsNCx0Y/Qt9C90YPRjiBp0L3RhNCw0YDQvNCw0YbRiy4g0L/RgNCwINC/0YDRi9C60LvQsNC00LDQvdC9aSwg0Y/QumnRjyDQstGLINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNC10YbQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjM3MTk2ODk3NjQ1MzYzNzk1NTciPiLQt9C80Y/QvdGP0YbRjCDRgdGC0LDRgtGL0YHRgtGL0LrRgyDQsdCw0YLQsNGA0Y3RliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjY4NjI4MTc4NTcxNzgwMjUwMDIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDRgdCw0LHRgNCw0L3Rg9GOINGB0YLQsNGC0YvRgdGC0YvQutGDINCx0LDRgtCw0YDRjWkuINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iMTUwODc3OTY4NzQzNjU4NTc0NCI+ItCw0YLRgNGL0LzQu2nQstCw0YbRjCDRgdGC0LDRgtGL0YHRgtGL0LrRgyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iNjI0Mzg4NzA0MTU3NzkxMjg3NyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQsNGC0YDRi9C80Ltp0LLQsNGG0Ywg0YHQsNCx0YDQsNC90YPRjiDRgdGC0LDRgtGL0YHRgtGL0LrRgyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3Rjy4g0J3QtSDQtNC70Y8g0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC30LLRi9GH0LDQudC90YvQvNGWINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvNGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI4ODI5MDk3MzczODUxNTIxNTA1Ij4i0LfQvNGP0L3Rj9GG0Ywg0YHRgtCw0YLRi9GB0YLRi9C60YMg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC/0YDRi9C60LvQsNC00LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9IjUwNzg0NTk2NTk0NDAzNDgzIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC30LzRj9C90Y/RhtGMINGB0LDQsdGA0LDQvdGD0Y4g0YHRgtCw0YLRi9GB0YLRi9C60YMg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC/0YDRi9C60LvQsNC00LDQvdC90Y8uINCd0LUg0LTQu9GPINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDQt9Cy0YvRh9Cw0LnQvdGL0LzRliDQv9GA0YvQutC70LDQtNCw0L3QvdGP0LzRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhY2t1cCIgbXNnaWQ9IjQ3MDAxMzAyMjg2NTQ1MzkyMCI+ItC60LDQvdGC0YDQsNC70Y/QstCw0YbRjCDRgNGN0LfQtdGA0LLQvtCy0LDQtSDQutCw0L/RltGP0LLQsNC90L3QtSDRliDQsNC00L3QsNGe0LvQtdC90L3QtSDRgdGW0YHRgtGN0LzRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhY2t1cCIgbXNnaWQ9IjY5MTIyMzA1MjUxNDA1ODk4OTEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQutCw0L3RgtGA0LDQu9GP0LLQsNGG0Ywg0YDRjdC30LXRgNCy0L7QstCw0LUg0LrQsNC/0ZbRj9Cy0LDQvdC90LUg0YHRltGB0YLRjdC80Ysg0ZYg0LzQtdGF0LDQvdGW0LfQvCDQsNC00L3QsNGe0LvQtdC90L3Rjy4g0J3QtSDQv9Cw0YLRgNCw0LHRg9C10YbRhtCwINC00LvRjyDQt9Cy0YvRh9Cw0LnQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjU1NTcwNzEzMjU4MDQ0NjkxMDIiPiLQv9Cw0YbQstC10YDQtNC20LDQvdC90LUg0L/QvtGe0L3QsNCz0LAg0YDRjdC30LXRgNCy0L7QstCw0LPQsCDQutCw0L/RltGP0LLQsNC90L3RjyDQsNCx0L4g0LDQtNC90LDRntC70LXQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maXJtX2Z1bGxfYmFja3VwIiBtc2dpZD0iMTc0ODc2MjE3MTYzNzY5OTU2MiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LDQv9GD0YHQutCw0YbRjCDQv9C+0Z7QvdGLINGW0L3RgtGN0YDRhNC10LnRgSDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCDQv9Cw0YbQstGP0YDQtNC20Y3QvdC90Y8g0YDRjdC30LXRgNCy0LDQstCw0L3QvdGPLiDQndC1INC00LvRjyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0LfQstGL0YfQsNC50L3Ri9C80ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C80ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9IjIxNDg1NjM2MjgxNDAxOTMyMzEiPiLQv9Cw0LrQsNC30LLQsNGG0Ywg0L3QtdGB0LDQvdC60YbRi9GP0L3QsNCy0LDQvdGL0Y8g0LLQvtC60L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVybmFsU3lzdGVtV2luZG93IiBtc2dpZD0iNzQ1ODM4Nzc1OTQ2MTQ2NjM5NyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGB0YLQstCw0YDQsNGG0Ywg0LLQvtC60L3Riywg0L/RgNGL0LfQvdCw0YfQsNC90YvRjyDQtNC70Y8g0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINGe0L3Rg9GC0YDQsNC90YvQvCDRltC90YLRjdGA0YTQtdC50YHQsNC8INC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCwINGB0ZbRgdGC0Y3QvNGLLiDQndC1INC00LvRjyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0LfQstGL0YfQsNC50L3Ri9C80ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C80ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9IjM1NDMzNDc5ODA4Mzk1MTg2MTMiPiLQv9GA0YvQsNGA0YvRgtGN0YIg0L/QtdGA0LDQtCDRltC90YjRi9C80ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C80ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9Ijg1ODQ2NzgzODE5NzI4MjAxMTgiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1INC80L7QttCwINC3XCfRj9Ge0LvRj9GG0YbQsCDQv9Cw0LLQtdGA0YUgadC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4g0K/QvdGLINC80L7Qs9GD0YbRjCDRiNC60L7QtNC3adGG0Ywg0LDQtNC90L4g0LDQtNC90LDQvNGDINC/0LDQtNGH0LDRgSDQv9GA0LDRhtGLIGnQvdGC0Y3RgNGE0LXQudGB0LDRniDQsNCx0L4g0LfQvNGP0L3Rj9GG0Ywg0YLQvtC1LCDRiNGC0L4g0LLRiyDQsdCw0YfRi9GG0LUg0Z4gadC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/RhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iMjgwNTEwMzI0MTE1MzkwNzE3NCI+ItC30LzQtdC90Y/RhtGMINCw0LPRg9C70YzQvdGD0Y4g0YXRg9GC0LrQsNGB0YbRjCDQsNC90ZbQvNCw0YbRi9GWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YMg0LvRjtCx0Ysg0YfQsNGBINC30LzRj9C90Y/RhtGMINCw0LPRg9C70YzQvdGD0Y4g0YXRg9GC0LrQsNGB0YbRjCDQsNC90ZbQvNCw0YbRi9GWICjRhdGD0YLRh9GN0Lkg0YbRliDQv9Cw0LLQvtC70YzQvdC10LkpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iMTI4NjUwNTcxNzA1MDEyMTM3MCI+ItC60ZbRgNCw0LLQsNGG0Ywg0LrQu9GO0YfQsNC80ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRgdGC0LLQsNGA0LDRhtGMICDRgdCy0LDRltC80ZYg0Z7Qu9Cw0YHQvdGL0LzRliDQutC70Y7Rh9Cw0LzRliwg0LDQsdGL0YXQvtC00LfRj9GH0Ysg0ZbRhSDQt9Cy0YvRh9Cw0LnQvdGLIFot0L/QsNGA0LDQtNCw0LouINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9IjQ3MDgxODExODQ0NDE4ODAxNzUiPiLQt9Cw0LzQsNGA0L7Qt9GW0YbRjCDRjdC60YDQsNC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZnJlZXplU2NyZWVuIiBtc2dpZD0iODU1ODkyMzc4OTIyMjY3MDA2NCI+ItCf0YDRi9C60LvQsNC00LDQvdC90LUg0LfQvNC+0LbQsCDRh9Cw0YHQvtCy0LAg0LfQsNC80LDRgNC+0LfRltGG0Ywg0Y3QutGA0LDQvSDQtNC70Y8g0L/QtdGA0LDRhdC+0LTRgyDRniDQv9C+0Z7QvdCw0Y3QutGA0LDQvdC90Ysg0YDRjdC20YvQvC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luamVjdEV2ZW50cyIgbXNnaWQ9IjEzNzg3NDY1ODQwMjM1ODY2MDAiPiLQvdCw0YbRltGB0LrQsNGG0Ywg0LrQu9Cw0LLRltGI0Ysg0ZYg0LrQvdC+0L/QutGWINC60ZbRgNCw0LLQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LDQttGL0YbRhtGP0Z7Qu9GP0YbRjCDRgdCy0LDQtSDRntC70LDRgdC90YvRjyDQv9Cw0LTQt9C10ZYg0Z7QstC+0LTRgyAo0L3QsNGG0ZbRgdC60YMg0LrQu9Cw0LLRltGIINGWINCzLtC0Likg0LTQu9GPINGW0L3RiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINCz0Y3RgtCwLCDQutCw0LEg0LfQsNGF0LDQv9GW0YbRjCDQutGW0YDQsNCy0LDQvdC90LUg0L/Qu9Cw0L3RiNGN0YLQsNC8LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1MzEyODA1NzU3MjMyNjI1MyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQsNC20YvRhtGG0Y/RntC70Y/RhtGMINGB0LLQsNC1INGe0LvQsNGB0L3Ri9GPINC/0LDQtNC30LXRliDRntCy0L7QtNGDICjQvdCw0YbRltGB0LrRgyDQutC70LDQstGW0Ygg0ZYg0LMuwqDQtC4pINC00LvRjyDRltC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQvNC+0LPRg9GG0Ywg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQs9GN0YLQsCwg0LrQsNCxINC30LDRhdCw0L/RltGG0Ywg0LrRltGA0LDQstCw0L3QvdC1INGC0Y3Qu9C10YTQvtC90LDQvC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iNDY5NDI4OTAwMDQxMjQ5MjM0Ij4i0LfQsNC/0ZbRgdCy0LDRhtGMLCDRiNGC0L4g0LLRiyDQtNGA0YPQutGD0LXRhtC1LCDRliDQtNC30LXRj9C90L3Rliwg0Y/QutGW0Y8g0LLRiyDQv9GA0LDQtNC/0YDRi9C80LDQtdGG0LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjgzODc3NTQ5MDE2ODg3MjgwNDMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNC00YHQvtGH0LLQsNGG0Ywg0LrQu9Cw0LLRltGI0YssINGP0LrRltGPINCy0Ysg0L3QsNGG0ZbRgdC60LDQtdGG0LUsINC90LDQstCw0YIg0L/QsNC00YfQsNGBINGD0LfQsNC10LzQsNC00LfQtdGP0L3QvdGPINC3INGW0L3RiNGL0Lwg0L/RgNGL0LrQu9Cw0LTQsNC90L3QtdC8ICjQvdCw0L/RgNGL0LrQu9Cw0LQsINC/0YDRiyDRntCy0L7QtNC30LUg0L/QsNGA0L7Qu9GPKS4g0J3QtSDQv9Cw0YLRgNCw0LHRg9C10YbRhtCwINC00LvRjyDQt9Cy0YvRh9Cw0LnQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzM2MDA2NDYyMDIzMDUxNTc3NiI+ItC30LLRj9C30LDRhtGG0LAg0Lcg0LzQtdGC0LDQtNCw0Lwg0YPQstC+0LTRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMyNTA0NDAzMjI4MDcyODYzMzEiPiLQlNCw0LfQstCw0LvRj9C1INGe0LvQsNC00LDQu9GM0L3RltC60YMg0L/RgNGL0LLRj9C30LLQsNGG0YbQsCDQtNCwINGW0L3RgtGN0YDRhNC10LnRgdGDINCy0LXRgNGF0L3Rj9Cz0LAg0Z7Qt9GA0L7RntC90Y4g0LzQtdGC0LDQtNCwINGe0LLQvtC00YMuINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjUzNTc3MzM5NDI1NTYwMzE1OTMiPiLQv9GA0YvQstGP0LfQsNGG0YbQsCDQtNCwINGB0LvRg9C20LHRiyDQtNC+0YHRgtGD0L/RgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjcwMzQ2MTU5Mjg2MDkzMzEzNjgiPiLQlNCw0LfQstCw0LvRj9C1INGe0LvQsNC00LDQu9GM0L3RltC60YMg0L/RgNGL0LLRj9C30LLQsNGG0YbQsCDQtNCwINGW0L3RgtGN0YDRhNC10LnRgdGDINCy0LXRgNGF0L3Rj9Cz0LAg0Z7Qt9GA0L7RntC90Y4g0YHQu9GD0LbQsdGLINC00L7RgdGC0YPQv9GDLiDQndC1INC/0LDRgtGA0LDQsdGD0LXRhtGG0LAg0LTQu9GPINC30LLRi9GH0LDQudC90YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfYmluZFByaW50U2VydmljZSAoODQ2MjgxNTE3OTU3Mjc0ODc2MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19iaW5kUHJpbnRTZXJ2aWNlICg3OTYwMDY3NjIzMjA5MTExMTM1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfYmluZFByaW50U3Bvb2xlclNlcnZpY2UgKDY4MDc3NjI3ODM3NDQxMjU5NTQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfYmluZFByaW50U3Bvb2xlclNlcnZpY2UgKDM2ODA1NTIyODU5MzMzMTgzNzIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9iaW5kTmZjU2VydmljZSAoMjc1MjczMTMwMDQxOTQxMDcyNCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19iaW5kTmZjU2VydmljZSAoNjEyMDY0NzYyOTE3NDA2Njg2MikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iNzM1ODM3ODQwMTkxNTI4NzkzOCI+ItC30LLRj9C30LDRhtGMINC3INGC0Y3QutGB0YLQsNCy0LDQuSDRgdC70YPQttCx0LDQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiLQlNCw0LfQstCw0LvRj9C1INGe0LvQsNC00LDQu9GM0L3RltC60YMg0L/RgNGL0LLRj9C30LLQsNGG0YbQsCDQtNCwINGW0L3RgtGN0YDRhNC10LnRgdGDINCy0LXRgNGF0L3Rj9Cz0LAg0Z7Qt9GA0L7RntC90Y4g0YLRjdC60YHRgtCw0LLQsNC5INC/0LDRgdC70YPQs9GWICjQvdCw0L/RgNGL0LrQu9Cw0LQsIFNwZWxsQ2hlY2tlclNlcnZpY2UpLiDQndGW0LrQvtC70ZYg0L3QtSDQv9Cw0YLRgNCw0LHRg9C10YbRhtCwINC00LvRjyDQt9Cy0YvRh9Cw0LnQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSI0NzA4NTk2MDIxMTYxNDczMjU1Ij4i0LfQstGP0LfQstCw0YbRhtCwINC3IFZQTiDRgdGN0YDQstGW0YHQsNC8Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i0JTQsNC30LLQsNC70Y/QtSDRntC70LDQtNCw0LvRjNC90ZbQutGDINC30LLRj9C30LLQsNGG0YbQsCDQtyDRltC90YLRjdGA0YTQtdC50YHQsNC8INGB0LvRg9C20LHRiyBWUE4g0LLRi9GI0Y3QudGI0LDQs9CwINGe0LfRgNC+0Z7QvdGOLiDQndC1INC/0LDRgtGA0Y3QsdC90LAg0LTQu9GPINC30LLRi9GH0LDQudC90YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ItC/0YDRi9Cy0Y/Qt9Cw0YbRjCDQtNCwINGI0L/QsNC70LXRgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i0JTQsNC30LLQsNC70Y/QtSDRntC70LDQtNCw0LvRjNC90ZbQutGDINGe0YHRgtCw0LvRkdGe0LLQsNGG0Ywg0L/RgNGL0LLRj9C30LrRgyDQtNCwINGW0L3RgtGN0YDRhNC10LnRgdGDINGI0L/QsNC70LXRgCDQstC10YDRhdC90Y/Qs9CwINGe0LfRgNC+0Z7QvdGOLiDQndC1INC/0LDRgtGA0LDQsdGD0LXRhtGG0LAg0LTQu9GPINC30LLRi9GH0LDQudC90YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i0L/RgNGL0LLRj9C30LDRhtGMINC00LAg0YHQu9GD0LbQsdGLINCy0ZbQtNC20Y3RgtGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+ItCU0LDQt9Cy0LDQu9GP0LUg0Z7Qu9Cw0LTQsNC70YzQvdGW0LrRgyDQv9GA0YvQstGP0LfQstCw0YbRhtCwINC00LAg0ZbQvdGC0Y3RgNGE0LXQudGB0YMg0LLQtdGA0YXQvdGP0LPQsCDRntC30YDQvtGe0L3RjiDRgdC70YPQttCx0Ysg0LLRltC00LbRjdGC0LAuINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiLRg9C30LDQtdC80LDQtNC30LXQudC90ZbRh9Cw0YbRjCDQtyDQsNC00LzRltC90ZbRgdGC0YDQsNGC0LDRgNCw0Lwg0L/RgNGL0LvQsNC00YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI1Njk3MTU0MTk1NDM5MDc5MzAiPiLQlNCw0LfQstCw0LvRj9C1INGe0LvQsNC00LDQu9GM0L3RltC60YMg0LDQtNC/0YDQsNGe0LvRj9GG0Ywg0L3QsNC80LXRgNGLINC00LAg0LDQtNC80ZbQvdGW0YHRgtGA0LDRgtCw0YDQsCDQv9GA0YvQu9Cw0LTRiy4g0J3QtSDQv9Cw0YLRgNCw0LHRg9C10YbRhtCwINC00LvRjyDQt9Cy0YvRh9Cw0LnQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX21hbmFnZURldmljZUFkbWlucyAoNDI0ODgyODkwMDA0NTgwODcyMikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19tYW5hZ2VEZXZpY2VBZG1pbnMgKDUwMjU2MDgxNjc3MDk5NDI0ODUpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldE9yaWVudGF0aW9uIiBtc2dpZD0iMzM2NTk0NzcxNzE2Mzg2Njg0NCI+ItC30LzRj9C90Y/RhtGMINCw0YDRi9C10L3RgtCw0YbRi9GOINGN0LrRgNCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldE9yaWVudGF0aW9uIiBtc2dpZD0iMzA0NjEyNjYxOTMxNjY3MTQ3NiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINC/0LDQstCw0YDQvtGCINGN0LrRgNCw0L3QsCDRniDQu9GO0LHRiyDRh9Cw0YEuINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjkxNzUzNzE2MTMzMjI1NjI5MzQiPiLQt9C80LXQvdCwINGF0YPRgtC6LiDQv9C10YDQsNC80Y/RiNGHLiDRntC60LDQty4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI2ODY2NTYzMjM0Mjc0MTA0MjMzIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0YXRg9GC0LrQsNGB0YbRjCDQutGD0YDRgdC+0YDRgyDQvNGL0YjRiyDQsNCx0L4g0YLRgNGN0LrQv9Cw0LTQsCDRniDQu9GO0LHRiyDRh9Cw0YEuINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iNDc3ODczMTcwMzYwMDkwOTM0MCI+ItC30LzRj9C90ZbRhtGMINGA0LDRgdC60LvQsNC00LrRgyDQutC70LDQstGW0Y/RgtGD0YDRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iODQ4MDAxNjc3MTEzNDE3NTg3OSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQt9C80Y/QvdGP0YbRjCDRgNCw0YHQutC70LDQtNC60YMg0LrQu9Cw0LLRltGP0YLRg9GA0YsuINCd0LUg0L/QsNGC0YDQsNCx0YPQtdGG0YbQsCDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0NTM5MDAyOTkxOTQ3Mzc2NjU5Ij4i0LDQtNC/0YDQsNCy0ZbRhtGMINGB0ZbQs9C90LDQu9GLIExpbnV4INC00LAg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ4OTY5OTIwNzkxODI2NDkxNDEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9Cw0L/Ri9GC0LLQsNGG0Ywg0LDQtNC/0YDQsNGe0LrRgyDQv9Cw0LTQsNCy0LDQtdC80LDQs9CwINGB0ZbQs9C90LDQu9CwINC00LvRjyDRntGBadGFINC/0LDRgdGC0LDRj9C90L3Ri9GFINC/0YDQsNGG0Y3RgdCw0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4i0L/RgNGL0LzRg9GB0ZbRhtGMINC/0YDRi9C60LvQsNC00LDQvdC90LUg0L/RgNCw0YbQsNCy0LDRhtGMINC30LDRntGB0ZHQtNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTI1MTg5MjcyMzI5MDg2MTM3Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC30LDRhdC+0Z7QstCw0YbRjCDQvdC10LrQsNGC0L7RgNGL0Y8g0L/QsNGB0YLQsNGP0L3QvdGL0Y8g0YfQsNGB0YLQumkg0Z4g0L/QsNC80Y/RhmkuINCT0Y3RgtCwINC80L7QttCwINCw0LHQvNC10LbQsNCy0LDRhtGMINCw0LFcJ9GR0Lwg0L/QsNC80Y/RhtGWLCDQtNCw0YHRgtGD0L/QvdCw0Lkg0LTQu9GPINGW0L3RiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLCBpINC30LDQv9Cw0LLQvtC7adGG0Ywg0L/RgNCw0YbRgyDQv9C70LDQvdGI0Y3RgtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzODQ3NjAwNDc1MDgyNzgyNzIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LfQsNGF0L7RntCy0LDRhtGMINC90LXQutCw0YLQvtGA0YvRjyDQv9Cw0YHRgtCw0Y/QvdC90YvRjyDRh9Cw0YHRgtC6aSDRniDQv9Cw0LzRj9GGaS4g0JPRjdGC0LAg0LzQvtC20LAg0LDQsdC80LXQttCw0LLQsNGG0Ywg0LDQsVwn0ZHQvCDQv9Cw0LzRj9GG0ZYsINC00LDRgdGC0YPQv9C90LDQuSDQtNC70Y8g0ZbQvdGI0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4sIGkg0LfQsNC/0LDQstC+0Ltp0YbRjCDQv9GA0LDRhtGDINGC0Y3Qu9C10YTQvtC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVQYWNrYWdlcyIgbXNnaWQ9IjE4NDM4NTEyOTUzNzcwNTkzOCI+ItCy0YvQtNCw0LvRltGG0Ywg0L/RgNGL0LrQu9Cw0LTQsNC90L3RliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iNzQxMTQ4MDI3NTE2NzIwNTA4MSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQstGL0LTQsNC70Y/RhtGMINC/0LDQutC10YLRiyBBbmRyb2lkLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINCz0Y3RgtCwLCDQutCw0LEg0LLRi9C00LDQu9GP0YbRjCDQstCw0LbQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3Rli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSIyNzQxMDkxOTE4NDU4NDI3NTYiPiLQstGL0LTQsNC70ZbRhtGMINC00LDQtNC30LXQvdGL0Y8g0ZbQvdGI0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iNDYyNTMyMzY4NDEyNTQ1OTQ4OCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCy0YvQtNCw0LvRj9GG0Ywg0LTQsNC00LfQtdC90YvRjyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4i0LLRi9C00LDQu9GW0YbRjCDQutGN0Ygt0L/QsNC80Y/RhtGMINGW0L3RiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjM4MTI5OTg1OTkwMDY3MzAxOTYiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LLRi9C00LDQu9GP0YbRjCDRhNCw0LnQu9GLINC60Y3RiC3Qv9Cw0LzRj9GG0ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9Ijc0NzI5MjE3NjgzNTc5ODE5ODYiPiLQstGL0LzQtdGA0YvRhtGMINC/0YDQsNGB0YLQvtGA0YMg0LTQu9GPINC30LDRhdC+0Z7QstCw0L3QvdGPINC/0YDRi9C60LvQsNC00LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9IjM5MjEwNjgxNTQ0MjA3MzgyOTYiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNGC0YDRi9C80LvRltCy0LDRhtGMINGP0LPQviDQutC+0LQsINC00LDQtNC30LXQvdGL0Y8g0ZYg0LDQsVwn0ZHQvCDQutGN0Ygt0L/QsNC80Y/RhtGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSIyMTk5MTI4NDgyODIwMzA2OTI0Ij4i0YPRgdGC0LDQu9GP0LLQsNGG0Ywg0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQvdC10L/QsNGB0YDRjdC00L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQutGB0YLQsNC70ZHRntCy0LDRhtGMINC90L7QstGL0Y8g0LDQsdC+INCw0LHQvdC+0Z7Qu9C10L3Ri9GPINC/0LDQutC10YLRiyBBbmRyb2lkLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINC80L7Qs9GD0YbRjCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINCz0Y3RgtCwLCDQutCw0LEg0LTQsNC00LDQstCw0YbRjCDQvdC+0LLRi9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQtyDQtNCw0LfQstC+0LvQsNC80ZYg0LDQtNCy0L7Qu9GM0L3QsNC5INGB0YLRg9C/0LXQvdGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBDYWNoZSIgbXNnaWQ9Ijc0ODcyNzkzOTE3MjM1MjY4MTUiPiLQstGL0LTQsNC70ZbRhtGMINGD0YHQtSDQtNCw0LTQt9C10L3Ri9GPINC3INC60Y3RiC3Qv9Cw0LzRj9GG0ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzQ2NDA4NzE5NDU0MzQ1NjUiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1INC00LDQt9Cy0LDQu9GP0LUg0LLRi9C30LLQsNC70Y/RhtGMINGB0YXQvtCyadGI0YfQsCDQv9C70LDQvdGI0Y3RgtCwLCDQstGL0LTQsNC70Y/RjtGH0Ysg0YTQsNC50LvRiyDQtyDQtNGL0YDRjdC60YLQvtGA0YvQuSDQutGN0YjQsCBp0L3RiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiDQk9GN0YLQsCDQvNC+0LbQsCDQv9GA0YvQstC10YHRhmkg0LTQsCDRgtCw0LPQviwg0YjRgtC+IGnQvdGI0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0L/QsNGH0L3Rg9GG0Ywg0L/RgNCw0YbQsNCy0LDRhtGMINC/0LDQstC+0LvRjNC90LXQuSwg0YLQsNC80YMg0YjRgtC+IGnQvCDRgtGA0Y3QsdCwINCx0YPQtNC30LUg0L/QsNGe0YLQvtGA0L3QsCDQsNGC0YDRi9C80Ltp0LLQsNGG0Ywg0YHQstCw0LUg0LTQsNC00LfQtdC90YvRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjQ1OTQ0MTAyMTk1NjQzNjc3OSI+ItCf0YDRi9C60LvQsNC00LDQvdC90LUg0LTQsNC30LLQsNC70Y/QtSDQstGL0LfQstCw0LvRj9GG0Ywg0YHRhdC+0LJp0YjRh9CwINGC0Y3Qu9C10YTQvtC90LAsINCy0YvQtNCw0LvRj9GO0YfRiyDRhNCw0LnQu9GLINC3INC00YvRgNGN0LrRgtC+0YDRi9C5INC60Y3RiNCwIGnQvdGI0YvRhSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uINCT0Y3RgtCwINC80L7QttCwINC/0YDRi9Cy0LXRgdGGaSDQtNCwINGC0LDQs9C+LCDRiNGC0L4gadC90YjRi9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQv9Cw0YfQvdGD0YbRjCDQv9GA0LDRhtCw0LLQsNGG0Ywg0L/QsNCy0L7Qu9GM0L3QtdC5LCDRgtCw0LzRgyDRiNGC0L4gadC8INGC0YDRjdCx0LAg0LHRg9C00LfQtSDQv9Cw0Z7RgtC+0YDQvdCwINCw0YLRgNGL0LzQu2nQstCw0YbRjCDRgdCy0LDQtSDQtNCw0LTQt9C10L3Ri9GPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMjg5ODkwMjcxNjQ1OTIxNDExIj4i0L/QtdGA0LDQvNGP0YHRhtGW0YbRjCDRgNGN0YHRg9GA0YHRiyDQv9GA0YvQutC70LDQtNCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMTk1NjIyMTc3NzgyNDQ1MjQiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9C10YDQsNC80Y/RiNGH0LDRhtGMINGA0Y3RgdGD0YDRgdGLINC/0YDRi9C60LvQsNC00LDQvdC90Y8g0Lcg0YPQvdGD0YLRgNCw0L3Ri9GFINC90LAg0LfQvdC10YjQvdGW0Y8g0L3QvtGB0YzQsdGW0YLRiyDRliDQvdCw0LDQtNCy0LDRgNC+0YIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTG9ncyIgbXNnaWQ9IjY2MTU3Nzg1NDMxOTg5Njc2MTQiPiLRh9GL0YLQsNGG0Ywg0LrQsNC90YTRltC00Y3QvdGG0YvQudC90YvRjyDQtNCw0LTQt9C10L3Ri9GPINC00LfRkdC90L1p0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MjA2MTMxMzI5MzQ1NTE1MSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGB0YfRi9GC0LLQsNGG0Ywg0YDQvtC30L3Ri9GPINGE0LDQudC70Ysg0YFp0YHRgtGN0LzQvdCw0Lkg0LNp0YHRgtC+0YDRi2kuINCi0LDQumnQvCDRh9GL0L3QsNC8LCDQvNC+0LbQvdCwINCy0YvRj9CyadGG0Ywg0LDQs9GD0LvRjNC90YPRjiDRltC90YTQsNGA0LzQsNGG0YvRjiDQv9GA0LAg0YLQvtC1LCDRiNGC0L4g0LLRiyDRgNC+0LHRltGG0LUg0Lcg0L/Qu9Cw0L3RiNGN0YLQsNC8LCDRgyDRgtGL0Lwg0LvRltC60YMsINC80LDQs9GH0YvQvNCwLCDQsNGB0LDQsdGW0YHRgtGL0Y8g0LDQsdC+INC60LDQvdGEadC00Y3QvdGG0YvQudC90YvRjyDQt9Cy0LXRgdGC0LppLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjA2MzQzODE0MDI0MTU2MDQ0MyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDRgdGH0YvRgtCy0LDRhtGMINGA0L7Qt9C90YvRjyDRgdGW0YHRgtGN0LzQvdGL0Y8g0YTQsNC50LvRiyDQs2nRgdGC0L7RgNGL0LkuINCT0Y3RgtCwINC00LDQt9Cy0LDQu9GP0LUg0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDQsNCz0YPQu9GM0L3Rg9GOINGW0L3RhNCw0YDQvNCw0YbRi9GOINCw0LEg0YLRi9C8LCDRj9C6INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNC10YbRhtCwINGC0Y3Qu9C10YTQvtC9LCDRgyDRgtGL0Lwg0LvRltC60YMsINC80LDQs9GH0YvQvNCwLCDQsNGB0LDQsdGW0YHRgtGD0Y4g0LDQsdC+INC/0YDRi9Cy0LDRgtC90YPRjiDRltC90YTQsNGA0LzQsNGG0YvRji4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI3MTU4MDU1NTU4MjM4ODE4MTgiPiLQtNC70Y8g0L/RgNCw0LnQs9GA0LDQstCw0L3QvdGPINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LvRjtCx0Ysg0LzRg9C70YzRgtGL0LzQtdC00YvQudC90Ysg0LTRjdC60L7QtNGN0YAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iODI4MzkxMjQ4ODQzMzE4OTAxMCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LvRjtCx0Ysg0Z7RgdGC0LDQu9GP0LLQsNC90YsgadC90YHRgtGA0YPQvNC10L3RgiDQtNC70Y8g0LzRg9C70YzRgtGL0LzQtdC00YvQudC90LDQs9CwINC00Y3QutCw0LTQsNCy0LDQvdC90Y8sINC60LDQsSDQv9GA0LDQudCz0YDQsNGG0YwuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfbWFuYWdlQ2FDZXJ0aWZpY2F0ZXMgKDE2NzgzOTE4OTY3ODY4ODIwMTQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfbWFuYWdlQ2FDZXJ0aWZpY2F0ZXMgKDQwMTU2NDQwNDcxOTY5MzcwMTQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RpYWdub3N0aWMiIG1zZ2lkPSI4MDc2NzQzOTUzOTA4MDAwMzQyIj4i0YfRi9GC0LDRhtGML9C30LDQv9GW0YHQstCw0YbRjCDQvdCwINC00YvRj9Cz0L3QsNGB0YLRi9GH0L3Ri9GPINGA0Y3RgdGD0YDRgdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlhZ25vc3RpYyIgbXNnaWQ9IjY2MDgyOTU2OTIwMDI0NTIyODMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRgdGH0YvRgtCy0LDRhtGMINGWINC30LDQv9GW0YHQstCw0YbRjCDQu9GO0LHRiyDRgNGN0YHRg9GA0YEsINGP0LrRliDQvdCw0LvQtdC20YvRhtGMINC00YvRj9Cz0L3QsNGB0YLRi9GH0L3QsNC5INCz0YDRg9C/0LUsINC90LDQv9GA0YvQutC70LDQtCDRhNCw0LnQu9GLINGA0LDRgdC/0YDQsNGG0L7RntGI0YfRi9C60LAg0Z4g0YLRjdGH0YbRiyAvZGV2LiDQn9Cw0YLRjdC90YbRi9C50L3QsCDQs9GN0YLQsCDQvNC+0LbQsCDQv9Cw0Z7Qv9C70YvQstCw0YbRjCDQvdCwINGB0YLQsNCx0ZbQu9GM0L3QsNGB0YbRjCDRliDQsdGP0YHQv9C10LrRgyDRgdGW0YHRgtGN0LzRiy4g0JPRjdGC0LAg0L/QsNCy0ZbQvdC90LAg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRhtCwINCi0J7Qm9Cs0JrQhiDQtNC70Y8g0LDQv9Cw0YDQsNGC0L3QsNC5INC00YvRj9Cz0L3QvtGB0YLRi9C60ZYg0LLRi9GC0LLQvtGA0YbQsNC8INCw0LHQviDQsNC/0LXRgNCw0YLQsNGA0LDQvC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBtc2dpZD0iNjMzNTU3Njc3NTcxMTA5NTkzMSI+ItGD0LrQu9GO0YfRi9GG0Ywg0LDQsdC+INCw0LTQutC70Y7Rh9GL0YbRjCDQutCw0LzQv9Cw0L3QtdC90YLRiyDQv9GA0YvQutC70LDQtNCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDQstGL0LfQvdCw0YfRjdC90L3QtSDRgtCw0LPQviwg0LHRg9C00LfQtSDRntC60LvRjtGH0LDQvdGLINC60LDQvNC/0LDQvdC10L3RgiDRltC90YjQsNCz0LAg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyDRhtGWINC90LUuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LPRjdGC0LAg0LTQu9GPINCw0LTQutC70Y7Rh9GN0L3QvdGPINCy0LDQttC90YvRhSDQvNCw0LPRh9GL0LzQsNGB0YbRj9GeINC/0LvQsNC90YjRjdGC0LAuINCXINCz0Y3RgtGL0Lwg0LTQsNC30LLQvtC70LDQvCDRgtGA0Y3QsdCwINCx0YvRhtGMINGD0LLQsNC20LvRltCy0YvQvCwg0LHQviDQvNC+0LbQvdCwINC/0YDRi9Cy0LXRgdGG0ZYg0LrQsNC80L/QsNC90LXQvdGC0Ysg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyDRniDQvdC10L/RgNGL0LTQsNGC0L3Riywg0YHRg9C/0Y/RgNGN0YfQu9GW0LLRiyDQsNCx0L4g0L3Rj9Ge0YHRgtC+0LnQu9GW0LLRiyDRgdGC0LDQvS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4MjcyMzI0ODQ0MTY1MDU2MTUiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDQstGL0LfQvdCw0YfRjdC90L3QtSDRgtCw0LPQviwg0LHRg9C00LfQtSDRntC60LvRjtGH0LDQvdGLINC60LDQvNC/0LDQvdC10L3RgiDRltC90YjQsNCz0LAg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyDRhtGWINC90LUuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LPRjdGC0LAg0LTQu9GPINCw0LTQutC70Y7Rh9GN0L3QvdGPINCy0LDQttC90YvRhSDQvNCw0LPRh9GL0LzQsNGB0YbRj9GeINGC0Y3Qu9C10YTQvtC90LAuINCXINCz0Y3RgtGL0Lwg0LTQsNC30LLQvtC70LDQvCDRgtGA0Y3QsdCwINCx0YvRhtGMINGD0LLQsNC20LvRltCy0YvQvCwg0LHQviDQvNC+0LbQvdCwINC/0YDRi9Cy0LXRgdGG0ZYg0LrQsNC80L/QsNC90LXQvdGC0Ysg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjyDRniDQvdC10L/RgNGL0LTQsNGC0L3Riywg0YHRg9C/0Y/RgNGN0YfQu9GW0LLRiyDQsNCx0L4g0L3Rj9Ge0YHRgtC+0LnQu9GW0LLRiyDRgdGC0LDQvS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dyYW50UmV2b2tlUGVybWlzc2lvbnMiIG1zZ2lkPSI0NjI3MzE1MzUxMDkzNTA4Nzk1Ij4i0L/RgNCw0LTQsNGB0YLQsNCyadGG0Ywg0LDQsdC+INCw0LTQvNGP0L3RltGG0Ywg0LTQsNC30LLQvtC7Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQwODg2NDI2NTQwODU4NTA2NjIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0L/RgNCw0LTQsNGB0YLQsNGe0LvRj9GG0Ywg0LDQsdC+INCw0LTQvNGP0L3Rj9GG0Ywg0L/RjdGe0L3Ri9GPINC00LDQt9Cy0L7Qu9GLINC00LvRjyDQs9GN0YLQsNCz0LAg0LDQsdC+INGW0L3RiNGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0LzQvtCz0YPRhtGMINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LPRjdGC0LAsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMINC00L7RgdGC0YPQvyDQtNCwINGE0YPQvdC60YbRi9C5LCDRj9C6adGPINCy0YsgadC8INC90LUg0L/RgNCw0LTQsNGB0YLQsNCyadC7aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9Ijg0NjMxODE2Mjg2OTUzOTYzOTEiPiLRg9GB0YLQsNC70Y/QstCw0YbRjCDQv9Cw0LbQsNC00LDQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9IjQ5NzM5ODY3NjIyNDE3ODM3MTIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDQstCw0YjRiyDQv9Cw0LbQsNC00LDQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3Rli4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQvNC+0LPRg9GG0Ywg0L3QtdC/0YDRi9C60LzQtdGC0L3QsCDQt9C80Y/QvdGP0YbRjCDQt9Cw0L/Rg9GI0YfQsNC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWLCDQv9Cw0LTQvNGP0L3Rj9GO0YfRiyDRltGB0L3Rg9GO0YfRi9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYsINC60LDQsSDQt9CxadGA0LDRhtGMINCy0LDRiNGLINCw0YHQsNCx0ZbRgdGC0YvRjyDQtNCw0LTQt9C10L3Ri9GPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9IjIyMjYxOTUyOTA5NTUyMjQ3MzAiPiLQt9C80LXQvdCwINGB0ZbRgdGC0Y3QvNC90YvRhSDQvdCw0LvQsNC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9Ijc3NzU3MjM0NDE1NTg5MDcxODEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90LXQvCDQt9C80Y/QvdGP0YbRjCDQtNCw0LTQt9C10L3Ri9GPINC90LDQu9Cw0LQg0YHRltGB0YLRjdC80YsuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINC/0LDRiNC60L7QtNC30ZbRhtGMINC60LDQvdGE0ZbQs9GD0YDQsNGG0YvRjiDQstCw0YjQsNC5INGB0ZbRgdGC0Y3QvNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjIwNDY3NjI1MTg3NjcxODI4OCI+ItC30LzRj9C90Y/RhtGMINC/0LDRgNCw0LzQtdGC0YDRiyDQsdGP0YHQv9C10LrRliDRgdGW0YHRgtGN0LzRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSI4MTU5NTM1NjEzMDIwMTM3MzkxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0LTQsNC00LfQtdC90YvRjyDQv9Cw0YDQsNC80LXRgtGA0LDRniDQsdGP0YHQv9C10LrRliDRgdGW0YHRgtGN0LzRiy4g0J3QtSDQtNC70Y8g0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC30LLRi9GH0LDQudC90YvQvNGWINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvNGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIyMTQ5NDI2NjY0MjI2MTUyMTg1Ij4i0LfQvNGP0L3Rj9GG0Ywg0LrQsNGA0YLRgyDRgdC70YPQttCx0LDRniBHb29nbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDQutCw0YDRgtGDINGB0LvRg9C20LHQsNGeIEdvb2dsZS4g0J3QtSDQtNC70Y8g0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC30LLRi9GH0LDQudC90YvQvNGWINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvNGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4i0LfQsNC/0YPRgdC6INC/0YDRiyDQt9Cw0LPRgNGD0LfRhtGLINGB0ZbRgdGC0Y3QvNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczOTAzMDQ2NjQxMTY4ODA3MDQiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YHQsNC80LDRgdGC0L7QudC90LAg0LfQsNC/0YPRgdC60LDRhtGG0LAsINGP0Log0YLQvtC70YzQutGWINGB0ZbRgdGC0Y3QvNCwINCx0YPQtNC30LUg0YbQsNC70LrQsNC8INC30LDQs9GA0YPQttCw0L3QsC4g0JPRjdGC0LAg0LzQvtC20LAg0L/QsNCy0Y/Qu9GW0YfRi9GG0Ywg0YfQsNGBINC30LDQv9GD0YHQutGDINC/0LvQsNC90YjRjdGC0YMg0ZYg0LTQsNC30LLQvtC70ZbRhtGMINC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LfQsNC/0LDQstC+0LvRltGG0Ywg0YPQstC10YHRjCDQv9C70LDQvdGI0Y3Rgiwg0L/RgNGL0LzRg9GI0LDRjtGH0Ysg0Y/Qs9C+INC/0YDQsNGG0LDQstCw0YbRjCDQt9Cw0Z7RgdGR0LTRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUxMzk1MDU4OTEwMjYxNzUwNCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGB0LDQvNCw0YHRgtC+0LnQvdCwINC30LDQv9GD0YHQutCw0YbRhtCwLCDRj9C6INGC0L7Qu9GM0LrRliDRgdGW0YHRgtGN0LzQsCDQsdGD0LTQt9C1INGG0LDQu9C60LDQvCDQt9Cw0L/Rg9GI0YfQsNC90LAuINCT0Y3RgtCwINC80L7QttCwINC/0LDQstGP0LvRltGH0YvRhtGMINGH0LDRgSDQt9Cw0L/Rg9GB0LrRgyDRgtGN0LvQtdGE0L7QvdGDINGWINC00LDQt9Cy0L7Qu9GW0YbRjCDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC30LDQv9Cw0LLQvtC70ZbRhtGMINGD0LLQtdGB0Ywg0YLRjdC70LXRhNC+0L0sINC/0YDRi9C80YPRiNCw0Y7Rh9GLINGP0LPQviDQv9GA0LDRhtCw0LLQsNGG0Ywg0LfQsNGe0YHRkdC00YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTdGlja3kiIG1zZ2lkPSI3OTE5MTI2MzcyNjA2ODgxNjE0Ij4i0LDQtNC/0YDQsNGe0LvRj9GG0Ywg0L3QtdGC0Y3RgNC8adC90L7QstGD0Y4g0YDQsNGB0YHRi9C70LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCw0LTQv9GA0LDRntC70Y/RhtGMINC00LDQu9C10LnRiNGL0Y8g0LfQstGP0LfQsNC90YvRjyDQv9C10YDQsNC00LDRh9GLLCDRj9C60ZbRjyDQt9Cw0YHRgtCw0Y7RhtGG0LAg0L/QsNGB0LvRjyDQt9Cw0LrQsNC90YfRjdC90L3RjyDQsNGB0L3QvtGe0L3QsNC5INC/0LXRgNCw0LTQsNGH0YsuINCX0LvQvtGe0LbRi9Cy0LDQvdC90LUg0LzQvtC20LAg0LfRgNCw0LHRltGG0Ywg0L/RgNCw0YbRgyDQv9C70LDQvdGI0Y3RgtCwINC/0LDQstC+0LvRjNC90LDQuSDQsNCx0L4g0L3Rj9Ge0YHRgtC+0LnQu9GW0LLQsNC5LCDQv9GA0YvQvNGD0YjQsNGO0YfRiyDRj9Cz0L4g0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQt9Cw0L3QsNC00YLQsCDRiNC80LDRgiDQv9Cw0LzRj9GG0ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjgyNTgwMzc2NDIzMjQ0NTA5MSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQsNC00L/RgNCw0Z7Qu9GP0YbRjCDQtNCw0LvQtdC50YjRi9GPINC30LLRj9C30LDQvdGL0Y8g0L/QtdGA0LDQtNCw0YfRiywg0Y/QutGW0Y8g0LfQsNGB0YLQsNGO0YbRhtCwINC/0LDRgdC70Y8g0LfQsNC60LDQvdGH0Y3QvdC90Y8g0LDRgdC90L7RntC90LDQuSDQv9C10YDQsNC00LDRh9GLLiDQl9C70L7RntC20YvQstCw0L3QvdC1INC80L7QttCwINC30YDQsNCx0ZbRhtGMINC/0YDQsNGG0YMg0YLRjdC70LXRhNC+0L3QsCDQv9Cw0LLQvtC70YzQvdCw0Lkg0LDQsdC+INC90Y/RntGB0YLQvtC50LvRltCy0LDQuSwg0L/RgNGL0LzRg9GI0LDRjtGH0Ysg0Y/Qs9C+INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LfQsNC90LDQtNGC0LAg0YjQvNCw0YIg0L/QsNC80Y/RhtGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENvbnRhY3RzIiBtc2dpZD0iODM0ODQ4MTEzMTg5OTg4NjEzMSI+ItGH0YvRgtCw0L3QvdC1INC60LDQvdGC0LDQutGC0LDRniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTI5NDg2Njg1Njk0MTE0OTYzOSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGB0YfRi9GC0LLQsNGG0Ywg0LTQsNC00LfQtdC90YvRjyDQsNCxINC60LDQvdGC0LDQutGC0LDRhSwg0Y/QutGW0Y8g0LfQsNGF0L7RntCy0LDRjtGG0YbQsCDQvdCwINC/0LvQsNC90YjRjdGG0LUsINGDINGC0YvQvCDQu9GW0LrRgyDQt9Cy0LXRgdGC0LppINC/0YDQsCDRgtC+0LUsINGP0Log0YfQsNGB0YLQsCDQstGLINCy0YvQutC7adC60LDQu2kg0LrQsNC90LrRgNGN0YLQvdGL0YUg0LDQsdCw0L3QtdC90YLQsNGeLCDQv2nRgdCw0LtpIGnQvCDQv9CwINGN0LvQtdC60YLRgNC+0L3QvdCw0Lkg0L/QvtGI0YbQtSDQsNCx0L4g0LrQsNC90YLQsNC60YLQsNCy0LDQu2kg0ZbQvdGI0YvQvGkg0YHQv9C+0YHQsNCx0LDQvNGWLiDQlNC30Y/QutGD0Y7Rh9GLINCz0Y3RgtCw0LzRgyDQtNCw0LfQstC+0LvRgyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0LzQvtCz0YPRhtGMINC30LDRhdC+0Z7QstCw0YbRjCDQtNCw0LTQt9C10L3Ri9GPINCzadGB0YLQvtGA0YtpINCy0YvQutC7adC60LDRniwg0LAg0YjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDQsNC00L/RgNCw0Z7Qu9GP0YbRjCDQutCw0L3RgtCw0LrRgtC90YvRjyDQtNCw0LTQt9C10L3Ri9GPINCx0LXQtyDQstCw0YjQsNCz0LAg0LLQtdC00LDQvNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0NDA2NTQxNTI0NTczMDA2NjIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRgdGH0YvRgtCy0LDRhtGMINC00LDQtNC30LXQvdGL0Y8g0LDQsSDQutCw0L3RgtCw0LrRgtCw0YUsINGP0LrRltGPINC30LDRhdC+0Z7QstCw0Y7RhtGG0LAg0L3QsCDRgtGN0LvQtdGE0L7QvdC1LCDRgyDRgtGL0Lwg0LvRltC60YMg0LfQstC10YHRgtC6aSDQv9GA0LAg0YfQsNGB0YLQsNGC0YMsINC3INGP0LrQvtC5INCy0Ysg0LLRi9C60Ltp0LrQsNC7aSBp0YUsINC/adGB0LDQu2kgadC8INC/0LAg0Y3Qu9C10LrRgtGA0L7QvdC90LDQuSDQv9C+0YjRhtC1INGG0ZYg0LrQsNC90YLQsNC60YLQsNCy0LDQu2kg0ZbQvdGI0YvQvCDRgdC/0L7RgdCw0LHQsNC8LiDQlNC30Y/QutGD0Y7Rh9GLINCz0Y3RgtCw0LzRgyDQtNCw0LfQstC+0LvRgyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0LzQvtCz0YPRhtGMINC30LDRhdC+0Z7QstCw0YbRjCDQtNCw0LTQt9C10L3Ri9GPINCzadGB0YLQvtGA0YtpINCy0YvQutC7adC60LDRniwg0LAg0YjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDQsNC00L/RgNCw0Z7Qu9GP0YbRjCDQutCw0L3RgtCw0LrRgtC90YvRjyDQtNCw0LTQt9C10L3Ri9GPINCx0LXQtyDQstCw0YjQsNCz0LAg0LLQtdC00LDQvNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDb250YWN0cyIgbXNnaWQ9IjUxMDc0OTIwODY0MTY3OTM1NDQiPiLQt9C80LXQvdCwINC60LDQvdGC0LDQutGC0LDRniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzI0MzkzMjUyMTk1MzYwMiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINC00LDQtNC30LXQvdGL0Y8g0LDQsSDQutCw0L3RgtCw0LrRgtCw0YUsINGP0LrRltGPINC30LDRhdC+0Z7QstCw0Y7RhtGG0LAg0L3QsCDQv9C70LDQvdGI0Y3RhtC1LCDRgyDRgtGL0Lwg0LvRltC60YMg0YfQsNGB0YLQsNGC0LAsINC3INGP0LrQvtC5INCy0Ysg0LLRi9C60Ltp0LrQsNC7aSDQsNGB0L7QsSwg0L9p0YHQsNC7aSDQv9CwINGN0LvQtdC60YLRgNC+0L3QvdCw0Lkg0L/QvtGI0YbQtSDRhtGWINGW0L3RiNGL0Lwg0YHQv9C+0YHQsNCx0LDQvCDQutCw0L3RgtCw0LrRgtCw0LLQsNC7aSDQtyBp0LzRli4g0Jcg0LPRjdGC0YvQvCDQtNCw0LfQstC+0LvQsNC8INC/0YDRi9C60LvQsNC00LDQvdC9aSDQt9C80L7Qs9GD0YbRjCDQstGL0LTQsNC70Y/RhtGMINC60LDQvdGC0LDQutGC0L3Ri9GPINC00LDQtNC30LXQvdGL0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU4OTg2OTIyNDYyNTE2MzU1OCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINC00LDQtNC30LXQvdGL0Y8g0LDQsSDQutCw0L3RgtCw0LrRgtCw0YUsINGP0LrRltGPINC30LDRhdC+0Z7QstCw0Y7RhtGG0LAg0L3QsCDRgtGN0LvQtdGE0L7QvdC1LCDRgyDRgtGL0Lwg0LvRltC60YMg0YfQsNGB0YLQsNGC0LAsINC3INGP0LrQvtC5INCy0Ysg0LLRi9C60Ltp0LrQsNC7aSDQsNGB0L7QsSwg0L9p0YHQsNC7aSDQv9CwINGN0LvQtdC60YLRgNC+0L3QvdCw0Lkg0L/QvtGI0YbQtSDRhtGWINGW0L3RiNGL0Lwg0YHQv9C+0YHQsNCx0LDQvCDQutCw0L3RgtCw0LrRgtCw0LLQsNC7aSDQtyBp0LzRli4g0Jcg0LPRjdGC0YvQvCDQtNCw0LfQstC+0LvQsNC8INC/0YDRi9C60LvQsNC00LDQvdC9aSDQt9C80L7Qs9GD0YbRjCDQstGL0LTQsNC70Y/RhtGMINC60LDQvdGC0LDQutGC0L3Ri9GPINC00LDQtNC30LXQvdGL0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsbExvZyIgbXNnaWQ9IjM0NzgxMzMxODQ2MjQxMDI3MzkiPiLRh9GL0YLQsNC90L3QtSDQs2nRgdGC0L7RgNGLaSDQstGL0LrQu9GW0LrQsNGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM3MDA2NDUxODQ4NzA3NjAyODUiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRh9GL0YLQsNGG0Ywg0LNp0YHRgtC+0YDRi9GOINCy0YvQutC7adC60LDRniDQv9C70LDQvdGI0Y3RgtCwLCDRgyDRgtGL0Lwg0Ltp0LrRgyDQtNCw0LTQt9C10L3Ri9GPINC/0YDQsCDRntCy0LDRhdC+0LTQvdGL0Y8gaSDQstGL0YXQvtC00L3Ri9GPINCy0YvQutC7adC6aS4g0JTQt9GP0LrRg9GO0YfRiyDQs9GN0YLQsNC80YMg0LTQsNC30LLQvtC70YMg0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDQt9Cw0YXQvtGe0LLQsNGG0Ywg0LTQsNC00LfQtdC90YvRjyDQs2nRgdGC0L7RgNGLaSDQstGL0LrQu2nQutCw0Z4sINCwINGI0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LDQtNC/0YDQsNGe0LvRj9GG0Ywg0LNp0YHRgtC+0YDRi9GOINCy0YvQutC7adC60LDRniDQsdC10Lcg0LLQsNGI0LDQs9CwINCy0LXQtNCw0LzQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3Nzc3MjU3OTY4MTMyMTcyNDQiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRh9GL0YLQsNGG0Ywg0LNp0YHRgtC+0YDRi9GOINCy0YvQutC7adC60LDRniDRgtGN0LvQtdGE0L7QvdCwLCDRgyDRgtGL0Lwg0Ltp0LrRgyDQtNCw0LTQt9C10L3Ri9GPINC/0YDQsCDRntCy0LDRhdC+0LTQvdGL0Y8gaSDQstGL0YXQvtC00L3Ri9GPINCy0YvQutC7adC6aS4g0JTQt9GP0LrRg9GO0YfRiyDQs9GN0YLQsNC80YMg0LTQsNC30LLQvtC70YMg0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDQt9Cw0YXQvtGe0LLQsNGG0Ywg0LTQsNC00LfQtdC90YvRjyDQs2nRgdGC0L7RgNGLaSDQstGL0LrQu2nQutCw0Z4sINCwINGI0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LDQtNC/0YDQsNGe0LvRj9GG0Ywg0LNp0YHRgtC+0YDRi9GOINCy0YvQutC7adC60LDRniDQsdC10Lcg0LLQsNGI0LDQs9CwINCy0LXQtNCw0LzQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsbExvZyIgbXNnaWQ9Ijg1NTIwNDU2NjQ3NDM0OTkzNTQiPiLQt9Cw0L/RltGBINCzadGB0YLQvtGA0YtpINCy0YvQutC70ZbQutCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NjE4MDYwNjIyNzQxMTkyNDUiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LfQvNGP0L3Rj9GG0Ywg0LNp0YHRgtC+0YDRi9GOINCy0YvQutC7adC60LDRniDQv9C70LDQvdGI0Y3RgtCwLCDRgyDRgtGL0Lwg0Ltp0LrRgyDQtNCw0LTQt9C10L3Ri9GPINC/0YDQsCDRntCy0LDRhdC+0LTQvdGL0Y8gaSDQt9GL0YXQvtC00L3Ri9GPINCy0YvQutC7adC6aS4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINCz0Y3RgtCwLCDQutCw0LEg0LLRi9C00LDQu9GP0YbRjCDQsNCx0L4g0LfQvNGP0L3Rj9GG0Ywg0LNp0YHRgtC+0YDRi9GOINCy0YvQutC70ZbQutCw0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0LNp0YHRgtC+0YDRi9GOINCy0YvQutC7adC60LDRniDRgtGN0LvQtdGE0L7QvdGDLCDRgyDRgtGL0Lwg0Ltp0LrRgyDQtNCw0LTQt9C10L3Ri9GPINC/0YDQsCDRntCy0LDRhdC+0LTQvdGL0Y8g0ZYg0LfRi9GF0L7QtNC90YvRjyDQstGL0LrQu2nQumkuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQvNC+0LPRg9GG0Ywg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQs9GN0YLQsCwg0LrQsNCxINCy0YvQtNCw0LvRj9GG0Ywg0LDQsdC+INC30LzRj9C90Y/RhtGMINCzadGB0YLQvtGA0YvRjiDQstGL0LrQu9GW0LrQsNGeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFByb2ZpbGUiIG1zZ2lkPSI0NzAxODg5ODUyNjEyNzE2Njc4Ij4i0YfRi9GC0LDQvdC90LUg0YHQstCw0ZHQuSDQutCw0L3RgtCw0LrRgtC90LDQuSDQutCw0YDRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDYyNDc1MTUxODQ5ODg4ODQ4Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YHRh9GL0YLQstCw0YbRjCDQsNGB0LDQsdGW0YHRgtGD0Y4g0ZbQvdGE0LDRgNC80LDRhtGL0Y4g0Z4g0L/RgNC+0YTRltC70Y/RhSwg0Y/QutCw0Y8g0LfQsNGF0L7RntCy0LDQtdGG0YbQsCDQvdCwINCy0LDRiNCw0Lkg0L/RgNGL0LvQsNC00LfQtSwg0L3QsNC/0YDRi9C60LvQsNC0INCy0LDRiNCwINGW0LzRjyDRliDQutCw0L3RgtCw0LrRgtC90YPRjiDRltC90YTQsNGA0LzQsNGG0YvRji4g0JPRjdGC0LAg0LfQvdCw0YfRi9GG0YwsINGI0YLQviDQv9GA0YvQutC70LDQtNCw0L3QvdC1INC80L7QttCwINGW0LTRjdC90YLRi9GE0ZbQutCw0LLQsNGG0Ywg0LLQsNGBINGWINCw0LTQv9GA0LDRntC70Y/RhtGMINGW0L3RhNCw0YDQvNCw0YbRi9GOINCy0LDRiNCw0LPQsCDQv9GA0L7RhNGW0LvRjiDRgtGA0Y3RhtGW0Lwg0LDRgdC+0LHQsNC8LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVQcm9maWxlIiBtc2dpZD0iOTA3NzkzNjI4Nzc3Mzk3NjQzIj4i0LfQvNC10L3QsCDRgdCy0LDRkdC5INC60LDQvdGC0LDQutGC0L3QsNC5INC60LDRgNGC0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NTUyMDg0Mjk0NTk4NDY1ODk5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0YbRliDQtNCw0LTQsNCy0LDRhtGMINCw0YHQsNCx0ZbRgdGC0YPRjiDRltC90YTQsNGA0LzQsNGG0YvRjiDQv9GA0L7RhNGW0LvRj9GeLCDQt9Cw0YXQsNCy0LDQvdGL0YUg0L3QsCDQv9GA0YvQu9Cw0LTQt9C1LCDQvdCw0L/RgNGL0LrQu9Cw0LQg0LLQsNGI0LAg0ZbQvNGPINGWINC60LDQvdGC0LDQutGC0L3Rg9GOINGW0L3RhNCw0YDQvNCw0YbRi9GOLiDQotCw0LrRltC8INGH0YvQvdCw0LwsINC/0YDRi9C60LvQsNC00LDQvdC90LUg0LzQvtC20LAg0ZbQtNGN0L3RgtGL0YTRltC60LDQstCw0YbRjCDQstCw0YEg0ZYg0LDQtNC/0YDQsNGe0LvRj9GG0Ywg0ZbQvdGE0LDRgNC80LDRhtGL0Y4g0LLQsNGI0LDQs9CwINC/0YDQvtGE0ZbQu9GPINGC0YDRjdGG0ZbQvCDQsNGB0L7QsdCw0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTI2ODkyMDk1NjE1MjQxOTE3MCI+ItGH0YvRgtCw0YbRjCDQvNC+0Lkg0L/QsNGC0L7QuiDQsNCx0L3QsNGe0LvQtdC90L3Rj9GeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQyNTU3MDYwMjcxNzIwNTA4NzIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDRgtGA0YvQvNC7adCy0LDRhtGMINC00L7RgdGC0YPQvyDQtNCwINCw0LHQvdCw0Z7Qu9C10L3QvdGP0Z4g0YMg0YHQsNGG0YvRj9C70YzQvdGL0YUg0YHQu9GD0LbQsdCw0YUg0LDQtCDQstCw0YEg0ZYg0LLQsNGI0YvRhSDRgdGP0LHRgNC+0Z4uINCR0YPQtNC30YzRhtC1INCw0YHRhtGP0YDQvtC20L3RiyDQv9Cw0LTRh9Cw0YEg0LDQtNC/0YDQsNGe0LppIGnQvdGE0LDRgNC80LDRhtGLacKg4oCTINCz0Y3RgtCwINC00LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDRh9GL0YLQsNGG0Ywg0YHRg9Cy0Y/Qt9GWINC/0LDQvNGW0LYg0LLQsNC80ZYg0ZYg0LLQsNGI0YvQvNGWINGB0Y/QsdGA0LDQvNGWINGeINGB0LDRhtGL0Y/Qu9GM0L3Ri9GFINGB0LXRgtC60LDRhSwg0L3QtdC30LDQu9C10LbQvdCwINCw0LQg0L/RgNGL0LLQsNGC0L3QsNGB0YbRli4g0KPQstCw0LPQsDog0LPRjdGC0Ysg0LTQsNC30LLQvtC7INC90LUg0YDQsNGB0L/QsNGe0YHRjtC00LbQstCw0LXRhtGG0LAg0L3QsCDRntGB0LUg0YHQsNGG0YvRj9C70YzQvdGL0Y8g0YHQtdGC0LppLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNTA0MTc5MjIyNDkzMjM1NjQ1Ij4i0LfQsNC/0ZbRgdCw0YbRjCDRgyDQvNC+0Lkg0L/QsNGC0L7QuiDQsNCx0L3QsNGe0LvQtdC90L3Rj9GeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDg2NTU3NTUyMjA0MTE0ODQ5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINCw0LTQu9GO0YHRgtGA0L7RntCy0LDRhtGMINCw0LHQvdCw0Z7Qu9C10L3QvWkgINCw0LQg0LLQsNGI0YvRhSDRgdGP0LHRgNC+0Z4g0YMg0YHQsNGG0YvRj9C70YzQvdGL0YUg0YHQu9GD0LbQsdCw0YUuINCR0YPQtNC30YzRhtC1INCw0YHRhtGP0YDQvtC20L3RiyDQv9Cw0LTRh9Cw0YEg0LDQsdC80LXQvdGDIGnQvdGE0LDRgNC80LDRhtGL0Y/QuTog0LPRjdGC0LAg0L/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQsNC00L/RgNCw0Z7Qu9GP0LUg0L/QsNCy0LXQtNCw0LzQu9C10L3QvWksINGP0Lpp0Y8g0L/QsNC00L7QsdC90Ysg0L3QsCDRgtC+0LUsINGI0YLQviBp0YUg0LTQsNGB0LvQsNC7aSDRgdGP0LHRgNGLLiDQo9Cy0LDQs9CwOiDQs9GN0YLRiyDQtNCw0LfQstC+0Lsg0L3QtSDRgNCw0YHQv9Cw0Z7RgdGO0LTQttCy0LDQtdC10YbQsCDQvdCwINGe0YHQtSDRgdCw0YbRi9GP0LvRjNC90YvRjyDRgdC10YLQumkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsZW5kYXIiIG1zZ2lkPSI1OTcyNzI3NTYwMjU3NjEyMzk4Ij4i0YfRi9GC0LDRhtGMINC/0LDQtNC30LXRliDQutCw0LvQtdC90LTQsNGA0LAsINCwINGC0LDQutGB0LDQvNCwINC/0YDRi9Cy0LDRgtC90YPRjiDRltC90YTQsNGA0LzQsNGG0YvRjiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDIxNjQ2MjA0OTA1NzY1ODcyMyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDRh9GL0YLQsNGG0Ywg0YPRgdC1INC80LXRgNCw0L/RgNGL0LXQvNGB0YLQstGLINC3INC60LDQu9C10L3QtNCw0YDQsCwg0LfQsNGF0LDQstCw0L3Ri9GPINC90LAg0LLQsNGI0YvQvCDQv9C70LDQvdGI0Y3RhtC1LCDRgyDRgtGL0Lwg0LvRltC60YMg0Lcg0YHRj9Cx0YDQsNC8aSDQsNCx0L4g0LrQsNC70LXQs9Cw0LxpLiDQk9GN0YLQsCDQtNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDQtNC/0YDQsNGe0LvRj9GG0Ywg0LTQsNC00LfQtdC90YvRjyDQutCw0LvQtdC90LTQsNGA0LAsINC90Y/Qs9C70LXQtNC30Y/Rh9GLINC90LAg0L/RgNGL0LLQsNGC0L3QsNGB0YbRjCBpINCw0LTRh9GD0LLQsNC70YzQvdCw0YHRhtGMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc0MzQ1NDg2ODI0NzA4NTE1ODMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YfRi9GC0LDRhtGMINGD0YHQtSDQvNC10YDQsNC/0YDRi9C10LzRgdGC0LLRiyDQtyDQutCw0LvQtdC90LTQsNGA0LAsINC30LDRhdCw0LLQsNC90YvRjyDQvdCwINCy0LDRiNGL0Lwg0YLRjdC70LXRhNC+0L3QtSwg0YMg0YLRi9C8INC70ZbQutGDINC3INGB0Y/QsdGA0LDQvGkg0LDQsdC+INC60LDQu9C10LPQsNC8aS4g0JPRjdGC0LAg0LTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINCw0LTQv9GA0LDRntC70Y/RhtGMINC00LDQtNC30LXQvdGL0Y8g0LrQsNC70LXQvdC00LDRgNCwLCDQvdGP0LPQu9C10LTQt9GP0YfRiyDQvdCwINC/0YDRi9Cy0LDRgtC90LDRgdGG0YwgaSDQsNC00YfRg9Cy0LDQu9GM0L3QsNGB0YbRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsZW5kYXIiIG1zZ2lkPSI4NDM4ODc0NzU1MTkzODI1NjQ3Ij4i0LTQsNC00LDQstCw0YbRjCDRhtGWINC30LzRj9C90Y/RhtGMINC/0LDQtNC30LXRliDQutCw0LvQtdC90LTQsNGA0LAg0ZYg0LDQtNC/0YDQsNGe0LvRj9GG0Ywg0Y3Qu9C10LrRgtGA0L7QvdC90YPRjiDQv9C+0YjRgtGDINC00LAg0LPQsNGB0YbQtdC5INCx0LXQtyDQstC10LTQsNC80LAg0Z7Qu9Cw0LTQsNC70YzQvdGW0LrQsNGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQtNCw0LTQsNCy0LDRhtGMLCDQstGL0LTQsNC70Y/RhtGMLCDQt9C80Y/QvdGP0YbRjCDQvNC10YDQsNC/0YDRi9C10LzRgdGC0LLRiywg0Y/QutGW0Y8g0LzQvtC20L3QsCDRgNGN0LTQsNCz0LDQstCw0YbRjCDQvdCwINC/0LvQsNC90YjRjdGG0LUsINGDINGC0YvQvCDQu9GW0LrRgyDRgdGD0YHRgtGA0Y3Rh9GLINGBINGB0Y/QsdGA0LDQvGkgaSDQutCw0LvQtdCz0LDQvGkuINCT0Y3RgtCwINC00LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQsNC00L/RgNCw0Z7Qu9GP0YbRjCDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYg0LDQtCDRg9C70LDQtNCw0LvRjNC9adC60LDRniDQutCw0LvQtdC90LTQsNGA0L7RniDQsNCx0L4g0LfQvNGP0L3Rj9GG0Ywg0LzQtdGA0LDQv9GA0YvQtdC80YHRgtCy0Ysg0LHQtdC3INCy0LXQtNCw0LzQsCDRg9C70LDQtNCw0LvRjNC9adC60LDRni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQtNCw0LTQsNCy0LDRhtGMLCDQstGL0LTQsNC70Y/RhtGMLCDQt9C80Y/QvdGP0YbRjCDQvNC10YDQsNC/0YDRi9C10LzRgdGC0LLRiywg0Y/QutGW0Y8g0LzQvtC20L3QsCDRgNGN0LTQsNCz0LDQstCw0YbRjCDQvdCwINGC0Y3Qu9C10YTQvtC90LUsINGDINGC0YvQvCDQu9GW0LrRgyDRgdGD0YHRgtGA0Y3Rh9GLINGBINGB0Y/QsdGA0LDQvGkgaSDQutCw0LvQtdCz0LDQvGkuINCT0Y3RgtCwINC00LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQsNC00L/RgNCw0Z7Qu9GP0YbRjCDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZYg0LDQtCDRg9C70LDQtNCw0LvRjNC9adC60LDRniDQutCw0LvQtdC90LTQsNGA0L7RniDQsNCx0L4g0LfQvNGP0L3Rj9GG0Ywg0LzQtdGA0LDQv9GA0YvQtdC80YHRgtCy0Ysg0LHQtdC3INCy0LXQtNCw0LzQsCDRg9C70LDQtNCw0LvRjNC9adC60LDRni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9Ijg2ODgzMzQ5NzQwMzY4MjMzMzAiPiLQvNCw0LrQtdGCINC60YDRi9C90ZbRhiDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3RjyDQtNC70Y8g0YLRjdGB0YLQsNCy0LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI1ODA4NzExMDM5NDgyMDUxODI0Ij4i0KHRgtCy0LDRgNGL0YbRjCDQvNCw0LrQtdGCINC60YDRi9C90ZbRhiDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3RjyDQtNC70Y8g0YLRjdGB0YLQsNCy0LDQvdC90Y8g0ZYg0Z7RgdGC0LDQu9GR0Z7QutGWINC90L7QstCw0LPQsCDQv9GA0LDQstCw0LnQtNCw0YDQsCDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3Rjy4g0JPRjdGC0LAg0LTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC/0LXRgNCw0LLRi9C30L3QsNGH0YvRhtGMINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdC1INGWL9Cw0LHQviDRgdGC0LDRgtGD0YEsINCy0LXRgNC90YPRgtGLINGW0L3RiNGL0LxpINC60YDRi9C90ZbRhtCw0LxpLCDQvdCw0L/RgNGL0LrQu9Cw0LQg0LPQtdCw0L/QsNC3adGG0YvQudC90LDQuSDRgdC70YPQttCx0LDQuSBpINC/0YDQsNCy0LDQudC00LDRgNCw0LxpINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iMjgzNjMwODA3NjcyMDU1MzgzNyI+ItC00L7RgdGC0YPQvyDQtNCwINC00LDQtNCw0YLQutC+0LLRi9GFINC60LDQvNCw0L3QtNCw0Z4g0L/QsNGB0YLQsNGe0YjRh9GL0LrQsCDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNGC0YDRi9C80LvRltCy0LDRhtGMINC00L7RgdGC0YPQvyDQtNCwINC00LDQtNCw0YLQutC+0LLRi9GFINC60LDQvNCw0L3QtCDQv9GA0LDQstCw0LnQtNCw0YDQsCDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3Rjy4g0JPRjdGC0LAg0LzQvtC20LAg0LTQsNC30LLQvtC7adGG0Ywg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDRntC80LXRiNCy0LDRhtGG0LAg0Z4g0L/RgNCw0YbRgyBHUFMg0LDQsdC+INGW0L3RiNGL0YUg0LrRgNGL0L3RltGGINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI2NTc4MTAxMTk5ODI1MTkzODczIj4i0LTQsNC30LLQvtC7INC90LAg0Z7RgdGC0LDQu9GP0LLQsNC90L3QtSDQv9Cw0YHRgtCw0Z7RiNGH0YvQutCwINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI5MDY2MTQ2MTIwNDcwNTkxNTA5Ij4i0KHRgtCy0LDRgNGL0YbRjCDQvNCw0LrQtdGCINC60YDRi9C90ZbRhiDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3RjyDQtNC70Y8g0YLRjdGB0YLQsNCy0LDQvdC90Y8g0ZYg0Z7RgdGC0LDQu9GR0Z7QutGWINC90L7QstCw0LPQsCDQv9GA0LDQstCw0LnQtNCw0YDQsCDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3Rjy4g0JPRjdGC0LAg0LTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC/0LXRgNCw0LLRi9C30L3QsNGH0YvRhtGMINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdC1INGWL9Cw0LHQviDRgdGC0LDRgtGD0YEsINCy0LXRgNC90YPRgtGLINGW0L3RiNGL0LxpINC60YDRi9C90ZbRhtCw0LxpLCDQvdCw0L/RgNGL0LrQu9Cw0LQg0LPQtdCw0L/QsNC3adGG0YvQudC90LDQuSDRgdC70YPQttCx0LDQuSBpINC/0YDQsNCy0LDQudC00LDRgNCw0LxpINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iMTE5MTg5ODA2MTk2NTI3MzM3MiI+ItC00LDQutC70LDQtNC90LDQtSDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3QtSAo0L3QsCDQsNGB0L3QvtCy0LUgR1BTINGWINGB0LXRgtC60ZYpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iNTI5NTA0NzU2MzU2NDk4MTI1MCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQstGL0LfQvdCw0YfQsNGG0Ywg0LTQsNC60LvQsNC00L3QsNC1INC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdC1INC3INC00LDQv9Cw0LzQvtCz0LDQuSBHUFMg0LDQsdC+INGB0LXRgtC60LDQstGL0YUg0LrRgNGL0L1p0YYg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90Y8sINC90LDQv9GA0YvQutC70LDQtCDQstC10LYg0YHQvtGC0LDQstCw0Lkg0YHRg9Cy0Y/Qt2kgaSBXaS1GaS4g0JPRjdGC0YvRjyDRgdC70YPQttCx0Ysg0LLRi9C30L3QsNGH0Y3QvdC90Y8g0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90Y8g0L/QsNCyadC90L3RiyDQsdGL0YbRjCDRg9C60LvRjtGH0LDQvdGLIGkg0LTQsNGB0YLRg9C/0L3Ri9GPINC00LvRjyDQstCw0YjQsNC5INC/0YDRi9C70LDQtNGLIGkg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rjy4g0J/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINCz0Y3RgtCwLCDQutCw0LEg0LLRi9C30L3QsNGH0LDRhtGMINCy0LDRiNCwINC/0YDRi9Cx0Ltp0LfQvdCw0LUg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90LUsINCwINGC0LDQutGB0LDQvNCwINGB0L/QsNC20YvQstCw0YbRjCDQtNCw0LTQsNGC0LrQvtCy0LDQtSDRgWnQu9C60LDQstCw0L3QvdC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSI0ODg3ODk1MzYyMzU0MjM5NjI4Ij4i0L/RgNGL0LHQu9GW0LfQvdCw0LUg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90LUgKNC/0LAg0LTQsNC00LfQtdC90YvRhSDRgdC10YLQutGWKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQstGL0LfQvdCw0YfQsNGG0Ywg0L/RgNGL0LHQu2nQt9C90LDQtSDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3QtS4g0JPRjdGC0LAg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90LUg0LLRi9C30L3QsNGH0LDQtdGG0YbQsCDRgdC/0LXRhtGL0Y/Qu9GM0L3Ri9C8aSDRgdC70YPQttCx0LDQvGkg0Lcg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdC10Lwg0YHQtdGC0LrQsNCy0YvRhSDQutGA0YvQvWnRhiDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3Rjywg0L3QsNC/0YDRi9C60LvQsNC0INCy0LXQtiDRgdC+0YLQsNCy0LDQuSDRgdGD0LLRj9C3aSBpIFdpLUZpLiDQodC70YPQttCx0Ysg0LLRi9C30L3QsNGH0Y3QvdC90Y8g0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90Y8g0L/QsNCyadC90L3RiyDQsdGL0YbRjCDRg9C60LvRjtGH0LDQvdGLIGkg0LTQsNGB0YLRg9C/0L3Ri9GPINC00LvRjyDQstCw0YjQsNC5INC/0YDRi9C70LDQtNGLIGkg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rjy4g0J/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINCz0Y3RgtCwLCDQutCw0LEg0LLRi9C30L3QsNGH0LDRhtGMINCy0LDRiNCwINC/0YDRi9Cx0Ltp0LfQvdCw0LUg0LzQtdGB0YbQsNC30L3QsNGF0L7QtNC20LDQvdC90LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjIzNjM5Njk2NDE3OTIzODg5NDciPiLQtNC+0YHRgtGD0L8g0LTQsCBTdXJmYWNlRmxpbmdlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0L3RltC30LrQsNGe0LfRgNC+0Z7QvdC10LLRi9GPINGE0YPQvdC60YbRi9GWIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ItGH0YvRgtCw0YbRjCDQsdGD0YTQtdGAINC60LDQtNGA0LDRniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRgdGH0YvRgtCy0LDRhtGMINC30LzQtdGB0YbRltCy0LAg0LHRg9GE0LXRgNGDINC60LDQtNGA0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLQvdCw0LvQsNC00LAg0LTRi9GB0L/Qu9C10Y/RniBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+ItCU0LDQt9Cy0L7Qu2nRhtGMINC/0YDRi9C60LvQsNC00LDQvdC90Y4g0L3QsNC70LDQtNC20LLQsNGG0YbQsCBpINC/0LDQtNC60LvRjtGH0LDRhtGG0LAg0LTQsCDQtNGL0YHQv9C70LXRj9GeIFdpLUZpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i0LrRltGA0LDQstCw0L3QvdC1INC00YvRgdC/0LvQtdGP0LxpIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+ItCf0YDRi9C60LvQsNC00LDQvdC90LUg0LfQvNC+0LbQsCDQutGW0YDQsNCy0LDRhtGMINC90ZbQt9C60ZbQvCDRg9C30YDQvtGe0L3QtdC8INGE0YPQvdC60YbRi9C5INC00YvRgdC/0LvQtdGP0Z4gV2ktRmkuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfY2FwdHVyZUF1ZGlvT3V0cHV0ICg2ODU3MTM0NDk4NDAyMzQ2NzA4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCAoNjIxMDU5Nzc1NDIxMjIwODg1MykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2NhcHR1cmVBdWRpb0hvdHdvcmQgKDE4OTA1NTM5MzU2NTAzNDk4MDgpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfY2FwdHVyZUF1ZGlvSG90d29yZCAoOTE1MTgwNzk1ODE1MzA1NjgxMCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2NhcHR1cmVWaWRlb091dHB1dCAoMjI0NjgyODc3MzU4OTA5NDAyMykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19jYXB0dXJlVmlkZW9PdXRwdXQgKDM1OTQ4MTY1ODAzNDE0OTg2MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCAoNzgxNTM5ODk2OTMwMzM4MjAxNikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19jYXB0dXJlU2VjdXJlVmlkZW9PdXRwdXQgKDI3Nzk3OTMwNjQ3MDkzNTAyODkpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9tZWRpYUNvbnRlbnRDb250cm9sICg4NzQ5NzkwNTYwNzIwNTYyNTExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX21lZGlhQ29udGVudENvbnRyb2wgKDE2Mzc0NzgyMDAyNzIwNjIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI2MDk1ODU5OTM3MDY5MTQ2MDg2Ij4i0LfQvNGP0L3Rj9GG0Ywg0L3QsNC70LDQtNGLINCw0YPQtNGL0ZEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINCz0LvQsNCx0LDQu9GM0L3Ri9GPINC90LDQu9Cw0LTRiyDQs9GD0LrRgywg0YLQsNC60ZbRjyDRj9C6INC80L7RhiDRliDRgtC+0LUsINGI0YLQviDQtNGL0L3QsNC80ZbQuiDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDQtdGG0YbQsCDQtNC70Y8g0LLRi9GF0LDQtNGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4i0LfQsNC/0ZbRgdCy0LDRhtGMINCw0Z7QtNGL0ZEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LfQsNC/0ZbRgdCy0LDRhtGMINCw0Z7QtNGL0ZEg0Lcg0LTQsNC/0LDQvNC+0LPQsNC5INC80ZbQutGA0LDRhNC+0L3QsC4g0JTQt9GP0LrRg9GO0YfRiyDQs9GN0YLQsNC80YMg0LTQsNC30LLQvtC70YMg0L/RgNGL0LrQu9Cw0LTQsNC90L1pINC80L7Qs9GD0YbRjCDQt9Cw0L9p0YHQstCw0YbRjCDQsNGe0LTRi9GRINGeINC70Y7QsdGLINGH0LDRgSDQsdC10Lcg0LLQsNGI0LDQs9CwINC/0LDRhtCy0Y/RgNC00LbRjdC90L3Rjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLRgNCw0LHRltGG0Ywg0YTQsNGC0LDQs9GA0LDRhNGW0ZYg0ZYg0LLRltC00Y3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YDQsNCxadGG0Ywg0YTQvtGC0LDQt9C00YvQvNC6aSDRliDQt9C00YvQvNCw0YbRjCDQstGW0LTRjdCwINC3INC00LDQv9Cw0LzQvtCz0LDQuSDQutCw0LzQtdGA0YsuINCU0LfRj9C60YPRjtGH0Ysg0LPQs9GN0YLQsNC80YMg0LTQsNC30LLQvtC70YMg0L/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQvNC+0LbQsCDRniDQu9GO0LHRiyDRh9Cw0YEg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQutCw0LzQtdGA0YMg0LHQtdC3INCy0LDRiNCw0LPQsCDQv9Cw0YbQstC10YDQtNC20LDQvdC90Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i0LDQtNC60LvRjtGH0YvRhtGMINGB0LLRj9GC0LvQvtC00YvRkdC00L3RiyDRltC90LTRi9C60LDRgtCw0YAg0L/QtdGA0LDQtNCw0YfRiywg0LrQsNC70ZYg0LrQsNC80LXRgNCwINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNC10YbRhtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iNDc2NDU4NTQ2NTQ4MDI5NTM0MSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/QsNC/0Y/RgNGN0LTQvdC1INGe0YHRgtCw0LvRj9Cy0LDQvdCw0LzRgyDRgdGW0YHRgtGN0LzQvdCw0LzRgyDQv9GA0YvQutC70LDQtNCw0L3QvdGOINCw0LTQutC70Y7Rh9GL0YbRjCDRgdCy0Y/RgtC70L7QtNGL0ZHQtNC90Ysg0ZbQvdC00YvQutCw0YLQsNGAINC/0YDQsNGG0Ysg0LrQsNC80LXRgNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI5NjEyOTIyMDU3NjQ0ODgzMDQiPiLRhtCw0LvQutCw0Lwg0LDQtNC60LvRjtGH0YvRhtGMINC/0LvQsNC90YjRjdGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgzMzc4MTcwOTMzMjYzNzA1MzciPiLRhtCw0LvQutCw0Lwg0LDQtNC60LvRjtGH0LDRhtGMINGC0Y3Qu9C10YTQvtC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMzQ4MTg4MDgwMDE2OTk1MzAiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRhtCw0LvQutCw0Lwg0LDQtNC60LvRjtGH0LDRhtGMINC/0LvQsNC90YjRjdGCLiDQk9GN0YLQsCDQstC10LvRjNC80ZYg0L3QtdCx0Y/RgdC/0LXRh9C90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzg4OTAzMjk3NjI3MjgzMDk5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YbQsNC70LrQsNC8INCw0LTQutC70Y7Rh9Cw0YbRjCDRgtGN0LvQtdGE0L7QvS4g0JPRjdGC0LAg0LLQtdC70YzQvNGWINC90LXQsdGP0YHQv9C10YfQvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDM2NjM0OTcyNTYxNzk1MDAyIj4i0L/RgNGL0LzRg9GB0L7QstCw0Y8g0L/QtdGA0LDQt9Cw0LPRgNGD0LfQutCwINC/0LvQsNC90YjRjdGC0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4OTg1NjA4NzI0NjI2MzgyNDIiPiLQv9GA0YvQvNGD0YHQvtCy0LAg0L/QtdGA0LDQt9Cw0LPRgNGD0LbQsNGG0Ywg0YLRjdC70LXRhNC+0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgxNzIwNTYxODAwNjM3MDA3NDEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9GA0YvQvNGD0YHQvtCy0LAg0L/QtdGA0LDQt9Cw0LPRgNGD0LbQsNGG0Ywg0L/Qu9Cw0L3RiNGN0YIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTMyNjAwODEyNDI4OTk4OTk2OSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC/0YDRi9C80YPRgdC+0LLQsCDQv9C10YDQsNC30LDQs9GA0YPQttCw0YbRjCDRgtGN0LvQtdGE0L7QvS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjkyNzM2MTUzNzk0MjU5MTg0MSI+ItGE0LDQudC70LDQstCw0Y8g0YHRltGB0YIuIFVTQi3QvdCw0LfQsNC/0LDRiNCyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0MDIzMDUwNDk4OTA5NTM4MTAiPiLQtNC+0YHRgtGD0L8g0LTQsCDRhNCw0LnQu9Cw0LLQsNC5INGB0ZbRgdGC0Y3QvNGLIFNELdC60LDRgNGC0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iMTgyOTI5MDcwMTY1ODk5MjM0NyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC/0LDQtNC60LvRjtGH0LDRhtGMINGWINCw0LTQutC70Y7Rh9Cw0YbRjCDRhNCw0LnQu9Cw0LLRi9GPINGB0ZbRgdGC0Y3QvNGLINC00LvRjyDQt9C00YvQvNC90YvRhSDQvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L3RltC60LDRni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4i0LLRi9C00LDQu9C10L3QvdC1INC00LDQtNC30LXQvdGL0YUg0LcgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvdGW0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYyNTgyNjk4NjM5Mjc0MDU2Ij4i0LLRi9C00LDQu9C10L3QvdC1INC00LDQtNC30LXQvdGL0YUg0LcgU0Qt0LrQsNGA0YLRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgbXNnaWQ9Ijg3ODQyNjgyNDY3NzkxOTg2MjciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRhNCw0YDQvNCw0YLQsNCy0LDRhtGMINC30LTRi9C80L3RiyDQvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L1p0LouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2FjY2VzcyIgbXNnaWQ9IjM0MTEzMzg2MzIwMDIxOTM4NDYiPiLQsNGC0YDRi9C80LDRhtGMINGW0L3RhNCw0YDQvNCw0YbRi9GOINCw0LEg0YPQvdGD0YLRgNCw0L3QsNC5INC/0LDQvNGP0YbRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzA5NDU2Mzg0NDU5Mzg3ODU0OCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQsNGC0YDRi9C80LvRltCy0LDRhtGMINGW0L3RhNCw0YDQvNCw0YbRi9GOINC/0YDQsCDRntC90YPRgtGA0LDQvdGD0Y4g0L/QsNC80Y/RhtGMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19jcmVhdGUiIG1zZ2lkPSI2NDE0NzU3MjM0Nzg5MzM2MzI3Ij4i0YHRgtCy0LDRgNGL0YbRjCDRg9C90YPRgtGA0LDQvdGD0Y4g0L/QsNC80Y/RhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19jcmVhdGUiIG1zZ2lkPSI0NTU4ODY5MjczNTg1ODU2ODc2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YHRgtCy0LDRgNCw0YbRjCDRg9C90YPRgtGA0LDQvdGD0Y4g0L/QsNC80Y/RhtGMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19kZXN0cm95IiBtc2dpZD0iNTI2OTI4MzI4MzAxNjE4MDIyIj4i0LfQvdGW0YjRh9GL0YbRjCDRg9C90YPRgtGA0LDQvdGD0Y4g0L/QsNC80Y/RhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19kZXN0cm95IiBtc2dpZD0iNzIxODc0OTI4NjE0NTUyNjUzNyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCy0YvQtNCw0LvRj9GG0Ywg0YPQvdGD0YLRgNCw0L3Rg9GOINC/0LDQvNGP0YbRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9Ijg4Nzc5OTgxMDE5NDQ5OTkzODYiPiLQv9Cw0LTQutC70Y7Rh9GN0L3QvdC1L9Cw0LTQutC70Y7Rh9GN0L3QvdC1INGe0L3Rg9GC0YDQsNC90LDQuSDQv9Cw0LzRj9GG0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSIzNDUxMzYwMTE0OTAyNDkwOTI5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0L/QsNC00LvRg9GH0LDRhtGMIGkg0LDQtNC70YPRh9Cw0YbRjCDRg9C90YPRgtGA0LDQvdGD0Y4g0L/QsNC80Y/RhtGMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19yZW5hbWUiIG1zZ2lkPSI3NDk2NjMzOTU0MDgwNDcyNDE3Ij4i0L/QtdGA0LDQudC80LXQvdCw0LLQsNGG0Ywg0YPQvdGD0YLRgNCw0L3Rg9GOINC/0LDQvNGP0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfcmVuYW1lIiBtc2dpZD0iMTc5NDc1NzU4ODQ3MjEyNzY3NSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINGW0LzRjyDRntC90YPRgtGA0LDQvdCw0Lkg0L/QsNC80Y/RhtGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLQutGW0YDQsNCy0LDQvdC90LUg0LLRltCx0YDQsNGG0YvRj9C5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQutGW0YDQsNCy0LDRhtGMINCy0ZbQsdGA0LDRhtGL0Y/QuS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i0LrRltGA0LDQstCw0YbRjCDRntGB0L/Ri9GI0LrQsNC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LrRltGA0LDQstCw0YbRjCDQu9GW0YXRgtCw0YDRi9C60LDQvC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZVVzYiIgbXNnaWQ9IjExMTM0NTM0MzA2NDU0MDI3MjMiPiLQutGW0YDQsNCy0LDRhtGMINGB0L/RltGB0LDQvCDQv9Cw0LbQsNC00LDQvdGL0YUg0ZYg0LTQsNC30LLQvtC70LXQvdGL0YUgVVNCLdC/0YDRi9C70LDQtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzYiIgbXNnaWQ9Ijc3NzYxNTU0MzAyMTgyMzk4MzMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQutGW0YDQsNCy0LDRhtGMINC90LDQu9Cw0LTQsNC80ZYg0ZYg0LTQsNC30LLQvtC70LDQvNGWIFVTQi3Qv9GA0YvQu9Cw0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4i0YDRjdCw0LvRltC30LDQstCw0YbRjCDQv9GA0LDRgtCw0LrQvtC7IE1UUCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc010cCIgbXNnaWQ9IjY1MzI5NjEyMDA0ODY3OTE1NzAiPiLQlNCw0LfQstCw0LvRj9C1INCw0YLRgNGL0LzQsNGG0Ywg0LTQvtGB0YLRg9C/INC00LAg0LTRgNCw0LnQstC10YAg0Y/QtNGA0LAgTVRQLCDQutCw0LEg0YDRjdCw0LvRltC30LDQstCw0YbRjCBVU0It0L/RgNCw0YLQsNC60L7QuyBNVFAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNDE0ODI5MDg2MDQwMDY1OTE0NiI+ItGC0Y3RgdGC0LDQstCw0YbRjCDQsNC/0LDRgNCw0YLQvdCw0LUg0LfQsNCx0LXRgdC/0Y/Rh9GN0L3QvdC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjY1OTc5NjQxOTEyMDgwMTY2MDUiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQutGW0YDQsNCy0LDRhtGMINGA0L7Qt9C90YvQvNGWINC/0LXRgNGL0YTQtdGA0YvQudC90YvQvNGWINC/0YDRi9C70LDQtNCw0LzRliDQtNC70Y8g0YLRjdGB0YLQsNCy0LDQvdC90Y8g0LDQv9Cw0YDQsNGC0L3QsNCz0LAg0LDQsdGB0YLQsNC70Y/QstCw0L3QvdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ItC90LXQv9Cw0YHRgNGN0LTQvdCwINC90LDQsdGW0YDQsNGG0Ywg0YLRjdC70LXRhNC+0L3QvdGL0Y8g0L3Rg9C80LDRgNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LLQsNC9adGG0Ywg0L3QsCDRgtGN0LvQtdGE0L7QvdC90YvRjyDQvdGD0LzQsNGA0Ysg0LHQtdC3INCy0LDRiNCw0LPQsCDRntC80Y/RiNCw0L3QvdGPLiDQk9GN0YLQsCDQvNC+0LbQsCDQv9GA0YvQstC10YHRhtGWINC00LAg0L3QtdGH0LDQutCw0L3QsNCz0LAg0YHQv9Cw0LPQvdCw0L3QvdGPINGB0YDQvtC00LrQsNGeINCw0LHQviDQt9Cy0LDQvdC60L7Rni4g0JfQstGP0YDQvdGW0YbQtSDRntCy0LDQs9GDLCDRiNGC0L4g0L/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQvdC1INC80L7QttCwINGA0LDQsWnRhtGMINGN0LrRgdGC0YDQsNC90YvRjyDQstGL0LrQu9GW0LppLiDQqNC60L7QtNC90LDRgdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0LzQvtCz0YPRhtGMINGB0L/QsNCz0LDQvdGP0YbRjCDQtyDQstCw0YEg0YHRgNC+0LTQumksINGA0L7QsdGP0YfRiyDQt9Cy0LDQvdC60ZYg0LHQtdC3INCy0LDRiNCw0LPQsCDQv9Cw0YbQstC10YDQtNC20LDQvdC90Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjQxOTgzNDkyMTExMDg0OTc4NzkiPiLQvdC10L/QsNGB0YDRjdC00L3QsCDQstGL0LrQu9GW0LrQsNGG0Ywg0LvRjtCx0YvRjyDRgtGN0LvQtdGE0L7QvdC90YvRjyDQvdGD0LzQsNGA0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YLRjdC70LXRhNCw0L3QsNCy0LDRhtGMINC90LAg0LvRjtCx0Ysg0YLRjdC70LXRhNC+0L3QvdGLINC90YPQvNCw0YAsINGDINGC0YvQvCDQu2nQutGDINC90LAg0Y3QutGB0YLRgNCw0L3Ri9GPINC90YPQvNCw0YDRiywg0LHQtdC3INCy0LDRiNCw0LPQsCDQstC10LTQsNC80LAuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINGA0LDQsdGW0YbRjCDQvdC10L/QsNGC0YDRjdCx0L3Ri9GPINGWINC90LXQt9Cw0LrQvtC90L3Ri9GPINGN0LrRgdGC0YDQsNC90YvRjyDQstGL0LrQu9GW0LrRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4i0L3QtdC/0LDRgdGA0Y3QtNC90LAg0L/QsNGH0LDRhtGMINC90LDQu9Cw0LTRgyBDRE1BLdC/0LvQsNC90YjRjdGC0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTYwNDg0ODA5NTMxNTQyMTQyNSI+ItC90LXQv9Cw0YHRgNGN0LTQvdCwINC30LDQv9GD0YHQutCw0YbRjCDQvdCw0LvQsNC00Ysg0YLRjdC70LXRhNC+0L3QsCBDRE1BIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIG1zZ2lkPSIxOTk0MTkzNTM4ODAyMzE0MTg2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQsNC/0YPRgdC60LDRhtGMINGA0Y3Qt9C10YDQstGLIENETUEuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINC30LDQv9GD0YHQutCw0YbRjCDQt9Cw0LvRltGI0L3RltGPINGA0Y3Qt9C10YDQstGLIENETUEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSI3Nzg1NDA4MjUzMzY0MzM1NzQwIj4i0LrRltGA0LDQstCw0YbRjCDQsNCx0LLQtdGB0YLQutCw0LzRliDQsNCx0L3QsNGe0LvQtdC90L3RjyDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9IjExMjA3NDE1NTc4OTE0Mzg4NzYiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDRg9C60LvRjtGH0LDRhtGMIGkg0LDQtNC60LvRjtGH0LDRhtGMINCw0L/QsNCy0Y/RiNGH0Y3QvdC9aSDQsNCxINCw0LHQvdCw0Z7Qu9C10L3QvdGWINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdGPINCw0LQg0YDQsNC00YvRkS4g0J3QtSDQtNC70Y8g0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC30LLRi9GH0LDQudC90YvQvNGWINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvNGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI3ODU1MjU5NDYxMjY4NzM0OTE0Ij4i0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDQtNC+0YHRgtGD0L8g0LTQsCDRntC70LDRgdGG0ZbQstCw0YHRhtGP0Z4g0L/RgNCw0LLQtdGA0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNDAyNDUyNjk2ODYzMDE5NDEyOCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGB0YvRgtCy0LDRhtGML9C30LDQv9GW0YHQstCw0YbRjCDQtNC+0YHRgtGD0L8g0LTQsCDRntC70LDRgdGG0ZbQstCw0YHRhtGP0Z4sINC30LDQv9Cw0LzQv9Cw0LLQsNC90YvRhSDRgdC70YPQttCx0LDQuSDQv9GA0LDQstC10YDQutGWLiDQndC1INC00LvRjyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0LfQstGL0YfQsNC50L3Ri9C80ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C80ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kR2FkZ2V0IiBtc2dpZD0iNzc2OTA1MzM5MDE1ODYzNDcxIj4i0LLRi9Cx0ZbRgNCw0YbRjCDQstGW0LTQttGN0YLRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0L/QsNCy0LXQtNCw0LzQu9GP0YbRjCDRgdGW0YHRgtGN0LzQtSwg0Y/QutCw0Y8g0LLRltC00LbRjdGC0Ysg0LzQvtCz0YPRhtGMINCx0YvRhtGMINCy0YvQutCw0YDRi9GB0YLQsNC90Ysg0L/RjdGe0L3Ri9C80ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C80ZYuINCf0YDRi9C60LvQsNC00LDQvdC90LUg0Lcg0LPRjdGC0YvQvCDQtNCw0LfQstC+0LvQsNC8INC80L7QttCwINC/0YDQsNC00LDRgdGC0LDRntC70Y/RhtGMINC00L7RgdGC0YPQvyDQtNCwINC/0LXRgNGB0LDQvdCw0LvRjNC90YvRhSDQtNCw0LTQt9C10L3Ri9GFINGW0L3RiNGL0Lwg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8LiDQndC1INC00LvRjyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0LfQstGL0YfQsNC50L3Ri9C80ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C80ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iODQyMzkyMzc3NzY1OTI5MjIyOCI+ItC30LzRj9C90Y/RhtGMINGB0YLQsNC9INGC0Y3Qu9C10YTQvtC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC60ZbRgNCw0LLQsNGG0Ywg0YLRjdC70LXRhNC+0L3QvdGL0LzRliDRhNGD0L3QutGG0YvRj9C80ZYg0L/RgNGL0LvQsNC00YsuINCf0YDRi9C60LvQsNC00LDQvdC90LUg0Lcg0LPRjdGC0YvQvCDQtNCw0LfQstC+0LvQsNC8INC80L7QttCwINC/0LXRgNCw0LrQu9GO0YfQsNGG0Ywg0YHQtdGC0LrRliwg0YPQutC70Y7Rh9Cw0YbRjCDRliDQstGL0LrQu9GO0YfQsNGG0Ywg0YDQsNC00YvRkSDQvdCwINGC0Y3Qu9C10YTQvtC90LUg0ZYg0LMuwqDQtC4sINC90LDQstCw0YIg0L3QtSDQv9Cw0LLQtdC00LDQvNC70Y/RjtGH0Ysg0L/RgNCwINCz0Y3RgtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSI5MTc4MjI4NTI0NTA3NjEwNDg2Ij4i0YfRi9GC0LDQvdC90LUg0YHRgtCw0YLRg9GB0YMg0YLRjdC70LXRhNC+0L3QsCDRliDRltC00Y3QvdGC0YvRhNGW0LrQsNGG0YvRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iMTYzOTIxMjc3MTgyNjEyNTUyOCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCw0YLRgNGL0LzQu2nQstCw0YbRjCDQtNC+0YHRgtGD0L8g0LTQsCDRhNGD0L3QutGG0YvQuSDRgtGN0LvQtdGE0L7QvdCwINC90LAg0L/RgNGL0LvQsNC00LfQtS4g0JTQt9GP0LrRg9GO0YfRiyDQs9GN0YLQsNC80YMg0LTQsNC30LLQvtC70YMg0L/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQvNC+0LbQsCDQstGL0LfQvdCw0YfQsNGG0YwgadC00Y3QvdGC0YvRhGnQutCw0YLQsNGA0Ysg0L3Rg9C80LDRgNGDINGC0Y3Qu9C10YTQvtC90LAgaSDQv9GA0YvQu9Cw0LTRiywg0L3QtdC30LDQu9C10LbQvdCwINCw0LQg0YLQsNCz0L4sINGGaSDQsNC60YLRi9Ge0L3RiyDQstGL0LrQu2nQuiwgaSDQsNC00LTQsNC70LXQvdGLINC90YPQvNCw0YAsINC90LAg0Y/Qumkg0YDQvtCxadGG0YbQsCDQstGL0LrQu2nQui4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTMxNzMxNDM1MDExNDk1MDE1Ij4i0L/RgNCw0LTRg9GF0ZbQu9GW0YbRjCDQv9C70LDQvdGI0Y3RgiDQsNC0INC/0LXRgNCw0YXQvtC00YMg0Z4g0YDRjdC20YvQvCDRgdC90YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTczNDgwMTg3OTQxNDk2MTMwIj4i0LfQsNCx0LDRgNCw0L3Rj9GG0Ywg0YLRjdC70LXRhNC+0L3RgyDQv9C10YDQsNGF0L7QtNC30ZbRhtGMINGeINGA0Y3QttGL0Lwg0YHQvdGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczMTEzMTk4MjQ0MDA0NDc4NjgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9GA0LDQtNGD0YXRltC70Y/RhtGMINC/0LXRgNCw0YXQvtC0INC/0LvQsNC90YjRjdGC0LAg0Z4g0YDRjdC20YvQvCDRgdC90YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NTU5MTAwNjc3MzcyOTI4NzU0Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0L/RgNCw0LTRg9GF0ZbQu9GP0YbRjCDRgtGN0LvQtdGE0L7QvSDQsNC0INC/0LXRgNCw0YXQvtC00YMg0Z4g0YDRjdC20YvQvCDRgdC90YMuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfdHJhbnNtaXRJciAoNzU0NTg1ODUwNDIzODUzMDEwNSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY190cmFuc21pdElyICg1MzU4MzA4ODU0MzA2NTI5MTcwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX3RyYW5zbWl0SXIgKDc5NTc3NjM3NDUwMjAzMDA3MjUpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RldmljZVBvd2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNzg3MDM0NzIyNjE2MzUwNDE3Ij4i0KPQutC70Y7Rh9GL0YbRjCDQsNCx0L4g0LLRi9C60LvRjtGH0YvRhtGMINC/0LvQsNC90YjRjdGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5Mjg2MjI0NzA5ODA5NDMyMDYiPiLRg9C60LvRjtGH0LDRhtGMINCw0LHQviDQstGL0LrQu9GO0YfQsNGG0Ywg0YLRjdC70LXRhNC+0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY4OTg2Mjg3ODk4NDYzMTgzMSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGD0LrQu9GO0YfQsNGG0Ywg0YbRliDQsNC00LrQu9GO0YfQsNGG0Ywg0L/Qu9Cw0L3RiNGN0YIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2MDM3MDU3MzQ4NDYzMTMxMDMyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YPQutC70Y7Rh9Cw0YbRjCDQsNCx0L4g0LDQtNC60LvRjtGH0LDRhtGMINGC0Y3Qu9C10YTQvtC9LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmFjdG9yeVRlc3QiIG1zZ2lkPSIzNzE1MjI1NDkyNjk2NDE2MTg3Ij4i0LfQsNC/0YPRgdGG0ZbRhtGMINGDINGA0Y3QttGL0LzQtSDQt9Cw0LLQvtC00YHQutCw0LPQsCDRgtGN0YHRgtCw0LLQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZhY3RvcnlUZXN0IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTUyMDU5MzE4MzU5NjUzMDkxIj4i0JfQsNC/0YPRgdC6INGDINGP0LrQsNGB0YbRliDQvdGW0LfQutCw0Z7Qt9GA0L7RntC90LXQstCw0LPQsCDRgtGN0YHRgtGLINCy0YvRgtCy0L7RgNGG0YssINGI0YLQviDQtNCw0LfQstCw0LvRj9C1INCw0YLRgNGL0LzQsNGG0Ywg0L/QvtGe0L3RiyDQtNC+0YHRgtGD0L8g0LTQsCDQsNCx0YHRgtCw0LvRj9Cy0LDQvdC90Y8g0L/Qu9Cw0L3RiNGN0YLQsC4g0JTQsNGB0YLRg9C/0L3QsCwg0YLQvtC70YzQutGWINC60LDQu9GWINC/0LvQsNC90YjRjdGCINC/0YDQsNGG0YPQtSDRniDRgNGN0LbRi9C80LUg0YLRjdGB0YLQsNCy0LDQvdC90Y8g0LLRi9GC0LLQvtGA0YbRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxMzY2NDQ5OTAzMTkyNDQ4MDIiPiLQl9Cw0L/Rg9GB0YbRltGG0Ywg0Y/QuiDQvdGW0LfQutCw0Z7Qt9GA0L7RntC90LXQstGLINGC0Y3RgdGCINCy0YvRgtCy0L7RgNGG0YssINGI0YLQviDQtNCw0LfQstCw0LvRj9C1INCw0YLRgNGL0LzQsNGG0Ywg0L/QvtGe0L3RiyDQtNC+0YHRgtGD0L8g0LTQsCDQsNCx0YHRgtCw0LvRj9Cy0LDQvdC90Y8g0YLRjdC70LXRhNC+0L3QsC4g0JTQsNGB0YLRg9C/0L3QsCwg0YLQvtC70YzQutGWINC60LDQu9GWINC/0YDRi9C70LDQtNCwINC/0YDQsNGG0YPQtSDRniDRgNGN0LbRi9C80LUg0YLRjdGB0YLQsCDQstGL0YLQstC+0YDRhtGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0V2FsbHBhcGVyIiBtc2dpZD0iNjYyNzE5MjMzMzM3MzQ2NTE0MyI+ItGD0YHRgtCw0LvRkdGe0LLQsNGG0Ywg0YjQv9Cw0LvQtdGA0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXIiIG1zZ2lkPSI3MzczNDQ3OTIwOTc3NjI0NzQ1Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LrRgdGC0LDQu9GR0Z7QstCw0YbRjCDRgWnRgdGC0Y3QvNC90YvRjyDRiNC/0LDQu9C10YDRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iMzI3ODYwODE2NTk3NzczNjUzOCI+ItC90LDQu9Cw0LTQutCwINC/0LDQvNC10YDRgyDRiNC/0LDQu9C10YAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjgyMzU3ODQzODQyMjM3MzAwOTEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9Cw0LTQsNCy0LDRhtGMINC/0LDQtNC60LDQt9C60ZYg0L/QsCDQv9Cw0LzQtdGA0Ysg0YHRltGB0YLRjdC80L3Ri9GFINGI0L/QsNC70LXRgC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hc3RlckNsZWFyIiBtc2dpZD0iMjMxNTc1MDQyMzEzOTY5NzM5NyI+ItGB0LrRltC00LDRhtGMINGB0ZbRgdGC0Y3QvNGDINC00LAg0LfQsNCy0LDQtNGB0LrRltGFINC90LDQu9Cw0LTQsNGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIzNjY1MzgwNDkyNjMzOTEwMjI2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINGG0LDQu9C60LDQvCDRgdC60ZbQtNCy0LDRhtGMINGB0ZbRgdGC0Y3QvNGDINC00LAg0LfQsNCy0L7QtNGB0LrRltGFINC90LDQu9Cw0LQsINCy0YvQtNCw0LvRj9GO0YfRiyDRntGB0LUg0LTQsNC00LfQtdC90YvRjywg0L3QsNC70LDQtNGLINGWINGe0YHRgtCw0LvRj9Cy0LDQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3Rli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWUiIG1zZ2lkPSIyMDIxNjE0ODI5NTkxNzc1NjQ2Ij4i0LfQsNC00LDRhtGMINGH0LDRgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE4OTYzNDE0MzgxNTExNTI4ODEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDRh9Cw0YEg0L3QsCDQs9Cw0LTQt9GW0L3QvdGW0LrRgyDQv9C70LDQvdGI0Y3RgtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODU1NzAyNzMwNzM4MDIwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdCcINC30LzRj9C90Y/RhtGMINGH0LDRgSDQvdCwINCz0LDQtNC30ZbQvdC90ZbQutGDINGC0Y3Qu9C10YTQvtC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lWm9uZSIgbXNnaWQ9IjI5NDUwNzk4MDEwMTMwNzczNDAiPiLRg9GB0YLQsNC70ZHRntCy0LDRhtGMINGH0LDRgdCw0LLRiyDQv9C+0Y/RgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0LPQsNC00LfRltC90L3RiyDQv9C+0Y/RgSDQv9C70LDQvdGI0Y3RgtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQ5OTk0MzQ4ODQzNjYzMzM5OCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQt9C80Y/QvdGP0YbRjCDQs9Cw0LTQt9GW0L3QvdGLINC/0L7Rj9GBINGC0Y3Qu9C10YTQvtC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSI0ODI5MjYyMzQ5NjkxMzg2OTg2Ij4i0LLRi9GB0YLRg9C/0LDRhtGMINGDINGP0LrQsNGB0YbRliDRgdC70YPQttCx0YsgQWNjb3VudE1hbmFnZXJTZXJ2aWNlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iMTk0ODQ1NTU1MjMzMzYxNTk1NCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGC0Y3Qu9C10YTQsNC90LDQstCw0YbRjCDQvdCwIEFjY291bnRBdXRoZW50aWNhdG9ycy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFjY291bnRzIiBtc2dpZD0iMTA4Njc5NTQ2Nzc2MDEyMjExNCI+ItC/0L7RiNGD0Log0YPQu9GW0LrQvtCy0YvRhSDQt9Cw0L/RltGB0LDRniDQvdCwINC/0YDRi9C70LDQtNC30LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc0MTQ5NjUzNDc2OTY2MDAyNyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQsNGC0YDRi9C80Ltp0LLQsNGG0Ywg0YHQv9GW0YEg0YPQu9GW0LrQvtCy0YvRhSDQt9Cw0L/RltGB0LDRniwg0LLRj9C00L7QvNGL0YUg0L/Qu9Cw0L3RiNGN0YLRgy4g0KHRj9GA0L7QtCBp0YUg0LzQvtCz0YPRhtGMINCx0YvRhtGMINGD0Ltp0LrQvtCy0YvRjyDQt9Cw0L9p0YHRiywg0YHRgtCy0L7RgNCw0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvGksINGP0Lpp0Y8g0LLRiyDRntGB0YLQsNC70Y/QstCw0LtpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ0ODMxNjgyMjQ1MTgwNzM4MiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQsNGC0YDRi9C80Ltp0LLQsNGG0Ywg0YHQv9GW0YEg0YPQu9GW0LrQvtCy0YvRhSDQt9Cw0L/RltGB0LDRniwg0LLRj9C00L7QvNGL0YUg0YLRjdC70LXRhNC+0L3Rgy4g0KHRj9GA0L7QtCBp0YUg0LzQvtCz0YPRhtGMINCx0YvRhtGMINGD0Ltp0LrQvtCy0YvRjyDQt9Cw0L9p0YHRiywg0YHRgtCy0L7RgNCw0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvGksINGP0Lpp0Y8g0LLRiyDRntGB0YLQsNC70Y/QstCw0LtpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4i0YHRgtCy0LDRgNGN0L3QvdC1INGe0LvRltC60L7QstGL0YUg0LfQsNC/0ZbRgdCw0Z4g0ZYg0Z7RgdGC0LDQu9GR0Z7QutCwINC/0LDRgNC+0LvRj9GeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1NDcyMTI0Mjk2OTA4OTc3MjYwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDQvNCw0LPRh9GL0LzQsNGB0YbRliDRgdGA0L7QtNC60YMg0L/RgNCw0LLQtdGA0LrRliDRgdCw0L/RgNCw0Z7QtNC90LDRgdGG0ZYg0Z7Qu9GW0LrQvtCy0YvRhSDQt9Cw0L/RltGB0LDRniBBY2NvdW50TWFuYWdlciwg0YMg0YLRi9C8INC70ZbQutGDINGB0YLQstCw0YDQsNGG0Ywg0YPQu9GW0LrQvtCy0YvRjyDQt9Cw0L/RltGB0YssINCw0YLRgNGL0LzQu9GW0LLQsNGG0Ywg0ZYg0L3QsNC70LDQtNC20LLQsNGG0Ywg0L/QsNGA0L7Qu9GWINC00LvRjyDRltGFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4i0LTQsNC00LDQvdC90LUg0LDQsdC+INCy0YvQtNCw0LvQtdC90L3QtSDRntC70ZbQutC+0LLRi9GFINC30LDQv9GW0YHQsNGeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI4Njk4Mjk1NjI1NDg4MjkyNTA2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LLRi9C60L7QvdCy0LDRhtGMINC00LDQtNCw0L3QvdC1INGWINCy0YvQtNCw0LvQtdC90L3QtSDRntC70ZbQutC+0LLRi9GFINC30LDQv9GW0YHQsNGeINCw0LHQviDQstGL0LTQsNC70LXQvdC90LUg0ZbRhSDQv9Cw0YDQvtC70Y/Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iMjM1NDgxMzk2MTYzODc3NjQyIj4i0LLRi9C60LDRgNGL0YHRgtCw0L3QvdC1INGe0LvRltC60L7QstGL0YUg0LfQsNC/0ZbRgdCw0Z4g0L3QsCDQv9GA0YvQu9Cw0LTQt9C1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSI3OTg0MjI3MTQ3NDAzMzQ2NDIyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQsNC/0YvRgtCy0LDRhtGMINC60LvRjtGH0Ysg0LDRntGC0Y3QvdGC0YvRhNGW0LrQsNGG0ZbRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjQ5NTEwMjc5NjQzNDg5NzQ3NzMiPiLQv9GA0LDQs9C70Y/QtCDRgdC10YLQutCw0LLRi9GFINC30LvRg9GH0Y3QvdC90Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0L/RgNCw0LPQu9GP0LTQsNGG0Ywg0LfQstC10YHRgtC6aSDQv9GA0LAg0L/QsNC00LrQu9GO0YfRjdC90L1pINC00LAg0YHQtdGC0LppLCDQvdCw0L/RgNGL0LrQu9Cw0LQg0L/RgNCwINGC0L7QtSwg0Y/QumnRjyDRgdC10YLQumkgadGB0L3Rg9GO0YbRjCBpINC3INGP0Lpp0LxpINGR0YHRhtGMINGB0YPQstGP0LfRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iODAxODc1ODEzNjQwNDMyMzY1OCI+ItC/0L7RntC90Ysg0LTQvtGB0YLRg9C/INC00LAg0YHQtdGC0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGB0YLQstCw0YDQsNGG0Ywg0YHQtdGC0LrQsNCy0YvRjyDRgdC+0LrQtdGC0Ysg0ZYg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRjCDRg9C70LDRgdC90YvRjyDRgdC10YLQutCw0LLRi9GPINC/0YDQsNGC0LDQutC+0LvRiy4g0LHRgNCw0Z7Qt9C10YAg0ZYg0ZbQvdGI0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvWkg0L/RgNCw0LTQsNGB0YLQsNGe0LvRj9GO0YbRjCDRgdGA0L7QtNC60ZYg0LTQu9GPINC/0LXRgNCw0LTQsNGH0Ysg0LTQsNC00LfQtdC90YvRhSDRgyBJ0L3RgtGN0YDQvdGN0YIsINGC0LDQuiDRiNGC0L4g0LPRjdGC0Ysg0LTQsNC30LLQvtC7INC00LvRjyDQv9C10YDQsNC00LDRh9GLINC00LDQtNC30LXQvdGL0YUg0YMgSdC90YLRjdGA0L3RjdGG0LUg0L3QtSDQv9Cw0YLRgNCw0LHRg9C10YbRhtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUwNTY2MDE1OTY3NTc1MTg5NiI+ItC30LzRj9C90Y/RhtGML9C/0LXRgNCw0YXQvtC/0LvRltCy0LDRhtGMINGB0LXRgtC60LDQstGL0Y8g0L3QsNC70LDQtNGLINGWINGC0YDQsNGE0ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MzMzNzk4ODg2NDEyNzE0MTkzIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0L3QsNC70LDQtNGLINGB0LXRgtC60ZYsINC/0LXRgNCw0YXQsNC/0LvRj9GG0Ywg0ZYg0L/RgNCw0LLRj9GA0LDRhtGMINGD0LLQtdGB0Ywg0YHQtdGC0LrQsNCy0Ysg0YLRgNCw0YTRltC6LCDQvdCw0L/RgNGL0LrQu9Cw0LQg0LTQu9GPINC30LzQtdC90Ysg0L/RgNC+0LrRgdGWLdGB0LXRgNCy0LXRgNCwINGWINC/0L7RgNGC0LAg0LvRjtCx0L7Qs9CwIEFQTi4g0KjQutC+0LTQvdCw0YHQvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQvNC+0LPRg9GG0Ywg0LDQtNGB0L7Rh9Cy0LDRhtGMLCDQv9C10YDQsNC90LDQutGW0YDQvtGe0LLQsNGG0Ywg0LDQsdC+INC30LzRj9C90Y/RhtGMINGB0LXRgtC60LDQstGL0Y8g0L/QsNC60LXRgtGLINCx0LXQtyDQstCw0YjQsNCz0LAg0LLQtdC00LDQvNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iOTU4ODg0MjkxNDU0MzI3MzA5Ij4i0LfQvNGP0L3RltGG0Ywg0L/QsNC00LvRg9GH0Y3QvdC90LUg0LTQsCDRgdC10YLQutGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINGB0YLQsNC9INGB0LXRgtC60LDQstCw0LPQsCDQv9Cw0LTQutC70Y7Rh9GN0L3QvdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSI1OTUyNTg0OTY0MzczMDE3OTYwIj4i0LfQvNGP0L3RltGG0Ywg0L/RgNGL0LLRj9C30LrRgyDQtNCwINC/0LDQtNC70YPRh9GN0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSIxNTI0NDQxMzQ0NDEyMzE5NzgwIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0YHRgtCw0L0g0L/RgNGL0LLRj9C30LrRliDQtNCwINGB0LXRgtC60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSIxNDAwNjY2MDEyNjcxNjQ4NzQxIj4i0LfQvNGP0L3Rj9GG0Ywg0L3QsNC70LDQtNGLINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDRhNC+0L3QsNCy0YvRhSDQtNCw0LTQt9C10L3Ri9GFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iNTM0NzcyOTU3ODQ2ODc0NDM3OSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINC90LDQu9Cw0LTRiyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0LfRi9GF0L7QtNC90YvRhSDQtNCw0LTQt9C10L3Ri9GFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTIwMjAxMjk0OTI0NzA0MDAxMSI+ItC/0YDQsNCz0LvRj9C0INC30LvRg9GH0Y3QvdC90Y/RniBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUwMDI3OTgwNzczODc4MDM3MjYiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0L/RgNCw0LPQu9GP0LTQsNGG0Ywg0LfQstC10YHRgtC6aSDQv9GA0LAg0L/QsNC00LrQu9GO0YfRjdC90L1pINC00LAg0YHQtdGC0LppLCDQvdCw0L/RgNGL0LrQu9Cw0LQg0L/RgNCwINGC0L7QtSwg0LTQt9C1INGR0YHRhtGMINGB0LXRgtC6aSBXaS1GaSBpINGP0Lpp0Y8g0L/RgNGL0LvQsNC00YsgV2ktRmkg0LTQsCBp0YUg0L/QsNC00LrQu9GO0YfQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI2NTUwNjQxMTg4NzQ5MTI4MDM1Ij4i0L/QsNC00LrQu9GO0YfRjdC90L3QtSDQtNCwINGB0LXRgtC60ZYgV2ktRmkg0ZYg0LDQtNC60LvRjtGH0Y3QvdC90LUg0LDQtCDRj9C1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC/0LDQtNC60LvRjtGH0LDRhtGG0LAg0LTQsCDQutGA0L7Qv9Cw0Log0LTQvtGB0YLRg9C/0YMgV2ktRmkg0ZYg0LDQtNC60LvRjtGH0LDRhtGG0LAg0LDQtCBp0YUsINCwINGC0LDQutGB0LDQvNCwINGe0L3QvtGB0ZbRhtGMINC30LzRj9C90LXQvdC90ZYg0Z4g0LrQsNC90YRp0LPRg9GA0LDRhtGL0Y4g0L/RgNGL0LvQsNC0INGB0LXRgtC60ZYgV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4i0LTQsNC30LLQsNC70Y/QtSDQv9GA0YvRkdC8IFdpLUZpIE11bHRpY2FzdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzk2OTc3NDAyMTI1NjMzNjU0OCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCw0YLRgNGL0LzQu9GW0LLQsNGG0Ywg0L/QsNC60LXRgtGLLCDQsNC00L/RgNCw0Z7Qu9C10L3Ri9GPINC90LAg0Z7RgdC1INC/0YDRi9C70LDQtNGLINC3INGB0LXRgtC6aSBXaS1GaSDQtyDQtNCw0L/QsNC80L7Qs9Cw0Lkg0LPRgNGD0L/QsNCy0YvRhSDQsNC00YDQsNGB0L7Rniwg0LAg0L3QtSDRgtC+0LvRjNC60ZYg0L3QsCDQstCw0Ygg0L/Qu9Cw0L3RiNGN0YIuINCR0YPQtNC30LUg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRhtCwINCx0L7Qu9GM0Ygg0Y3QvdC10YDQs9GW0ZYsINGH0YvQvCDRgyDRgNGN0LbRi9C80LUg0L3QtdGI0LzQsNGC0LDQtNGA0LDRgdC90LDQuSDQv9C10YDQsNC00LDRh9GLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTE5NDk3MDYwMjUzNDk5MjYiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNGC0YDRi9C80LvRltCy0LDRhtGMINC/0LDQutC10YLRiywg0LDQtNC/0YDQsNGe0LvQtdC90YvRjyDQvdCwINGe0YHQtSDQv9GA0YvQu9Cw0LTRiyDQtyDRgdC10YLQumkgV2ktRmkg0Lcg0LTQsNC/0LDQvNC+0LPQsNC5INCz0YDRg9C/0LDQstGL0YUg0LDQtNGA0LDRgdC+0Z4sINCwINC90LUg0YLQvtC70YzQutGWINC90LAg0LLQsNGIINGC0Y3Qu9C10YTQvtC9LiDQkdGD0LTQt9C1INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0YbQsCDQsdC+0LvRjNGIINGN0L3QtdGA0LPRltGWLCDRh9GL0Lwg0YMg0YDRjdC20YvQvNC1INC90LXRiNC80LDRgtCw0LTRgNCw0YHQvdCw0Lkg0L/QtdGA0LDQtNCw0YfRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aEFkbWluIiBtc2dpZD0iNjAwNjk2NzM3MzkzNTkyNjY1OSI+ItCw0YLRgNGL0LzQsNC90L3QtSDQtNC+0YHRgtGD0L/RgyDQtNCwINC90LDQu9Cw0LQg0L/RgNGL0LvQsNC00YsgQmx1ZXRvb3RoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY5MjExNzc0NzE3NDg4ODIxMzciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQvdCw0LvQsNC00LbQstCw0YbRjCDQu9Cw0LrQsNC70YzQvdGLINC/0LvQsNC90YjRjdGCIEJsdWV0b290aCwg0LLRi9GP0Z7Qu9GP0YbRjCDRliDQv9Cw0LTQu9GD0YfQsNGG0Ywg0LLRi9C00LDQu9C10L3Ri9GPINC/0YDRi9C70LDQtNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC90LDQu9Cw0LTQttCy0LDRhtGMINC70LDQutCw0LvRjNC90Ysg0YLRjdC70LXRhNC+0L0gQmx1ZXRvb3RoLCDQsCDRgtCw0LrRgdCw0LzQsCDQt9C90LDRhdC+0LTQt9GW0YbRjCDQstGL0LTQsNC70LXQvdGL0Y8g0L/RgNGL0LvQsNC00YsgaSDQv9Cw0LTQu9GD0YfQsNGG0YbQsCDQtNCwIGl4LiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2JsdWV0b290aFByaXYgKDQwMDk0OTQyNDYwMDk1MTM4MjgpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfYmx1ZXRvb3RoUHJpdiAoODA0NTczNTE5MzQxNzQ2ODg1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19ibHVldG9vdGhQcml2ICg4MDQ1NzM1MTkzNDE3NDY4ODU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+ItC/0LDQtNC60LvRjtGH0LDRhtGMINC00LAgV2lNQVggaSDQsNC00LrQu9GO0YfQsNGG0Ywg0LDQtCDRj9Cz0L4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNjM2MDEwMjg3NzI2MTk3ODg4NyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQstGL0LfQvdCw0YfQsNGG0YwsINGG0ZYg0Z7QutC70Y7Rh9Cw0L3RiyBXaU1BWCwg0ZYg0ZbQvdGE0LDRgNC80LDRhtGL0Y4g0L/RgNCwINC70Y7QsdGD0Y4g0YHQtdGC0LrRgyBXaU1BWCwg0Y/QutCw0Y8g0YHQv9Cw0LvRg9GH0LDQvdCwINC3IGnQvdGI0YvQvGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMjQwNTA0MjI2NzEzMTQ5NjU3OSI+ItCX0LzRj9C90ZbRhtGMINGB0YLQsNC9IFdpTUFYIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzE1NjQ1NjUwNDA4NDIwMTgwNSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC/0LDQtNC60LvRjtGH0LDRhtGMINC/0LvQsNC90YjRjdGCINC00LAg0YHQtdGC0LrRliBXaU1BWCBpINCw0LTQutC70Y7Rh9Cw0YbRjCDRj9Cz0L4g0LDQtCDRj9C1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9Cw0LTQutC70Y7Rh9Cw0YbRhtCwINC00LAg0YHQtdGC0LDQuiBXaU1BWCDRliDQsNC00LrQu9GO0YfQsNGG0YbQsCDQsNC0IGnRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aCIgbXNnaWQ9IjYxMjc3NjkzMzYzMzkyNzY4MjgiPiLQv9Cw0LTQu9GD0YfRjdC90L3QtSDQtNCwINC/0YDRi9C70LDQtNGLIEJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQv9GA0LDQs9C70Y/QtNCw0YbRjCDQutCw0L3RhNGW0LPRg9GA0LDRhtGL0Y4gQmx1ZXRvb3RoINC90LAg0L/Qu9Cw0L3RiNGN0YbQtSAsINCwINGC0LDQutGB0LDQvNCwINC30LTQt9GP0LnRgdC90Y/RhtGMINGWINC/0YDRi9C80LDRhtGMINC30LvRg9GH0Y3QvdC90ZYg0YHQsCDRgdC/0LDQu9GD0YfQsNC90YvQvNGWINC/0YDRi9C70LDQtNCw0LzRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMjA3MTA2MzI0NDUyMzEyNzM5Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC/0YDQsNCz0LvRj9C00LDRhtGMINC60LDQvdGE0ZbQs9GD0YDQsNGG0YvRjiBCbHVldG9vdGgg0L3QsCDRgtGN0LvQtdGE0L7QvdC1ICwg0LAg0YLQsNC60YHQsNC80LAg0LfQtNC30Y/QudGB0L3Rj9GG0Ywg0ZYg0L/RgNGL0LzQsNGG0Ywg0LfQu9GD0YfRjdC90L3RliDRgdCwINGB0L/QsNC70YPRh9Cw0L3Ri9C80ZYg0L/RgNGL0LvQsNC00LDQvNGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbmZjIiBtc2dpZD0iNDQyMzM1MTI3NDc1Nzg3Njk1MyI+ItC60LDQvdGC0YDQvtC70YwgTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbmZjIiBtc2dpZD0iNzEyMDYxMTgxOTQwMTc4OTkwNyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L16diDRgdC/0LDQu9GD0YfQsNGG0YbQsCDQtyDRgtGN0LPQsNC80ZYsINC60LDRgNGC0LDQvNGWINGWINGB0YfRi9GC0LLQsNGO0YfRi9C80ZYg0L/RgNGL0LvQsNC00LDQvNGWIE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiAoTkZDKS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjM1OTg0OTYzMDE0ODY0MzkyNTgiPiLQsNC00LrQu9GO0YfRjdC90L3QtSDQsdC70LDQumnRgNC+0Z7Qumkg0Y3QutGA0LDQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iNjAzNDIwMzA2NTA3NzEyMjk5MiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCw0LTQutC70Y7Rh9Cw0YbRjCDQsdC70LDQumnRgNC+0Z7QutGDINC60LvQsNCy0ZbRj9GC0YPRgNGLINGWINC70Y7QsdGL0Y8g0YHRgNC+0LTQutGWINCw0LHQsNGA0L7QvdGLLCDQt9Cy0Y/Qt9Cw0L3Ri9GPINC3INC/0LDRgNC+0LvQtdC8LiDQn9GA0YvQutC70LDQtNCw0Lwg0LPRjdGC0LDQs9CwINC3XCfRj9Ge0LvRj9C10YbRhtCwINCw0LTQutC70Y7Rh9GN0L3QvdC1INGC0Y3Qu9C10YTQvtC90LDQvCDQsdC70LDQumnRgNC+0Z7Qumkg0LrQu9Cw0LLRltGP0YLRg9GA0Ysg0L/RgNGLINCw0YLRgNGL0LzQsNC90L3RliDRntCy0LDRhdC+0LTQvdCw0LPQsCDQstGL0LrQu9GW0LrRgyDRliDQv9Cw0Z7RgtC+0YDQvdCw0LUg0Z7QutC70Y7Rh9GN0L3QvdC1INCx0LvQsNC6adGA0L7RntC6aSDQutC70LDQstGW0Y/RgtGD0YDRiywg0LrQsNC70ZYg0LLRi9C60LvRltC6INC30LDQstC10YDRiNCw0L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSI2MjAxODEwMDA4MjMwNTAzMDUyIj4i0YfRi9GC0LDRhtGMINC/0LDRgNCw0LzQtdGC0YDRiyDRgdGW0L3RhdGA0LDQvdGW0LfQsNGG0YvRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSIyNzA2NzQ1Njc0NTY5Njc4NjQ0Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YfRi9GC0LDRhtGMINC/0LDRgNCw0LzQtdGC0YDRiyDRgdGW0L3RhdGA0LDQvdGW0LfQsNGG0YvRliDQtNC70Y8g0Z7Qu9GW0LrQvtCy0LDQs9CwINC30LDQv9GW0YHRgy4g0J3QsNC/0YDRi9C60LvQsNC0LCDRj9C90Ysg0LzQvtCz0YPRhtGMINCy0YvQt9C90LDRh9GL0YbRjCwg0YZpINGBadC90YXRgNCw0L1p0LfQsNCy0LDQvdCwINC3INGD0Ltp0LrQvtCy0YvQvCDQt9Cw0L9p0YHQsNC8INC/0YDRi9C60LvQsNC00LDQvdC90LUgXCLQmtCw0L3RgtCw0LrRgtGLXCIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9IjU0MDg2OTQ4NzU3OTM5NDUzMTQiPiLRg9C60LvRjtGH0Y3QvdC90LUg0YbRliDQsNC00LrQu9GO0YfRjdC90L3QtSDRgdGW0L3RhdGA0LDQvdGW0LfQsNGG0YtpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI4OTU2MjYyNTkxMzA2MzY5ODY4Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC30LzRj9C90Y/RhtGMINC90LDQu9Cw0LTRiyDRgdGW0L3RhdGA0LDQvdGW0LfQsNGG0YvRliDQtNC70Y8g0Z7Qu9GW0LrQvtCy0LDQs9CwINC30LDQv9GW0YHRgy4g0J3QsNC/0YDRi9C60LvQsNC0LCDQs9GN0YLQsCDQvNC+0LbQsCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGG0LAg0LTQu9GPINGe0LrQu9GO0YfRjdC90L3RjyDRgdGW0L3RhdGA0LDQvdGW0LfQsNGG0YvRliDQv9GA0YvQutC70LDQtNCw0L3QvdGPIFwi0JrQsNC90YLQsNC60YLRi1wiINC3INGD0LvRltC60L7QstGL0Lwg0LfQsNC/0ZbRgdCw0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1N0YXRzIiBtc2dpZD0iNzM5NjU3NzQ1MTM2MDIwMjQ0OCI+ItGH0YvRgtCw0YbRjCDRgdGC0LDRgtGL0YHRgtGL0LrRgyDRgdGW0L3RhdGA0LDQvdGW0LfQsNGG0YvRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSIxNTEwMTQzNzYxNzU3NjA2MTU2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0YfRi9GC0LDRhtGMINGB0YLQsNGC0YvRgdGC0YvQutGDINGB0ZbQvdGF0YDQsNC90ZbQt9Cw0YbRi9GWINC00LvRjyDRntC70ZbQutC+0LLQsNCz0LAg0LfQsNC/0ZbRgdGDLCDRgyDRgtGL0Lwg0LvRltC60YMg0LPRltGB0YLQvtGA0YvRjiDRgdGW0L3RhdGA0LDQvdGW0LfQsNGG0YvRliDQvNC10YDQsNC/0YDRi9C10LzRgdGC0LLQsNGeINGWINC90LDQutC+0LvRjNC60ZYg0YHRltC90YXRgNCw0L3RltC30LDQstCw0L3RiyDQtNCw0LTQt9C10L3Ri9GPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjQ3NTY2MDk2MzcwNTMzNTMzMTgiPiLRh9GL0YLQsNGG0Ywg0L/QsNC00L/RltGB0LDQvdGL0Y8g0LrQsNC90LDQu9GLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjU1NTcwNTg5MDc5MDYxNDQ1MDUiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQsNGC0YDRi9C80LvRltCy0LDRhtGMINGW0L3RhNCw0YDQvNCw0YbRi9GOINC/0YDQsCDQutCw0L3QsNC70YssINGP0LrRltGPINGB0ZbQvdGF0YDQsNC90ZbQt9GD0Y7RhtGG0LAg0Z4g0LHRj9Cz0YPRh9GLINC80L7QvNCw0L3Rgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N1YnNjcmliZWRGZWVkc1dyaXRlIiBtc2dpZD0iOTAxNTI0NjMyNTQwODIwOTI5NiI+ItC30LDQv9GW0YHQstCw0YbRjCDQutCw0L3QsNC70YssINC90LAg0Y/QutGW0Y8g0ZHRgdGG0Ywg0L/QsNC00L/RltGB0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1dyaXRlIiBtc2dpZD0iNjkyODkzMDE4ODgyNjA4OTQxMyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINCx0Y/Qs9GD0YfRi9GPINC60LDQvdCw0LvRiyDRgdGW0L3RhdGA0LDQvdGW0LfQsNCy0LDQvdC90Y8uINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINC30LzRj9C90Y/RhtGMINCy0LDRiNGLINC60LDQvdCw0LvRiyDRgdGW0L3RhdGA0LDQvdGW0LfQsNGG0YtpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI0MTA3MTAxNTI1NzQ2MDM1NzE4Ij4i0YfRi9GC0LDQvdC90LUg0YLRjdGA0LzRltC90LDRniwg0LTQsNC00LDQtNC30LXQvdGL0YUg0YMg0YHQu9C+0Z7QvdGW0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjY1OTYxNDYwMDMzODkwNDI0MyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INGB0YfRi9GC0LLQsNGG0Ywg0LvRjtCx0YvRjyDRgdC70L7QstGLLCDRltC80ZHQvdGLINGWINGE0YDQsNC30YssINGP0LrRltGPINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQuiDQvNC+0LbQsCDQt9Cw0YXQvtGe0LLQsNGG0Ywg0YMg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRltC8INGB0LvQvtGe0L3RltC60YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4i0JTQsNC00LDQvdC90LUg0YHQu9C+0Z4g0YMg0LrQsNGA0YvRgdGC0LDQu9GM0L1p0YbQutGWINGB0LvQvtGe0L3RltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODE4NTM4NTcxNjI1NTA2NTI5MSI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LDQv9GW0YHQstCw0YbRjCDQvdC+0LLRi9GPINGB0LvQvtCy0Ysg0Z4g0LrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRliDRgdC70L7RntC90ZbQui4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY3Mjc1MDk1MTU5NDA1NDY4Ij4i0YfRi9GC0LDQvdC90LUg0LfQvNC10YHRhtGW0LLQsCBVU0It0L3QsNC30LDQv9Cw0YjQsi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg4MTU2NDYyOTM0OTc3OTQwIj4i0YfRi9GC0LDQvdC90LUg0LfQvNC10YHRhtGW0LLQsCBTRC3QutCw0YDRgtGLIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX3NkY2FyZFJlYWQgKDM0NDY5ODg3MTI1OTgzODYwNzkpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2Nfc2RjYXJkUmVhZCAoMjYwNzM2MjQ3MzY1NDk3NTQxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+ItC30LwuINCw0LHQviDQstGL0LQuINC30LzQtdGBLiBVU0It0L3QsNC30LDQvy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODgwNTY5MzYzMDA1MDQ1ODc2MyI+ItC30LzRj9C90ZbRhtGMINCw0LHQviDQstGL0LTQsNC70ZbRhtGMINC30LzQtdGB0YbRltCy0LAgU0Qt0LrQsNGA0YLRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNzU0MDYyOTk0NDU3MTA4ODgiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdGP0Lwg0LLRi9C60L7QvdCy0LDRhtGMINC30LDQv9GW0YEg0LLQsCBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC90ZbQui4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9Cw0L/RltGB0LLQsNGG0Ywg0L3QsCBTRC3QutCw0YDRgtGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWVkaWFTdG9yYWdlV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODU5ODM5MTk5NzA2ODc5MDE1Ij4i0LfQvNGP0L3RltGG0Ywv0LLRi9C00LDQu9GW0YbRjCDRg9C90YPRgtGA0LDQvdGL0Y8g0L3QvtGB0YzQsdGW0YLRiyDQt9C80LXRgdGG0ZbQstCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWVkaWFTdG9yYWdlV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTg5MTYwNTk3Njk4NTI5MTg1Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0LfQvNC10YHRhtGW0LLQsCDRntC90YPRgtGA0LDQvdCw0Lkg0L/QsNC80Y/RhtGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3NzgzMTg1OTg0NDg4NDk4MjkiPiLQutGW0YDQsNCy0LDRhtGMINGB0YXQvtCy0ZbRiNGH0LDQvCDQtNC70Y8g0LTQsNC60YPQvNC10L3RgtCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODcwNDMyMzE3NjkxNDEyMTQ4NCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQutGW0YDQsNCy0LDRhtGMINGB0YXQvtCy0ZbRiNGH0LDQvCDQtNC70Y8g0LTQsNC60YPQvNC10L3RgtCw0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSI4MTUwNjEzODIzOTAwNDYwNTc2Ij4i0LTQvtGB0YLRg9C/INC00LAg0LfQvdC10YjQvdGW0YUg0LfQsNGF0L7RntCy0LDQvdC90Y8g0LTQu9GPINGe0YHRltGFINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSIzMjE1MjA4MzU3NDE1ODkxMzIwIj4i0JTQsNC30LLQsNC70Y/QtSDRntGBadC8INC60LDRgNGL0YHRgtCw0LvRjNC9adC60LDQvCDQv9GA0YvQutC70LDQtNCw0L3QvdGPINCw0YLRgNGL0LzQu2nQstCw0YbRjCDQtNC+0YHRgtGD0L8g0LTQsCDQt9C90LXRiNC90LXQs9CwINGB0YXQvtCyadGI0YfQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU2NTY0ODcyNjQ4MTk2Njk4MjQiPiLQtNC+0YHRgtGD0L8g0LTQsCDRhNCw0LnQu9Cw0LLQsNC5INGB0ZbRgdGC0Y3QvNGLINC60Y3RiNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0YHRh9GL0YLQstCw0YbRjCDRliDQstGL0LrQvtC90LLQsNGG0Ywg0LfQsNC/0ZbRgSDRgyDRhNCw0LnQu9Cw0LLRg9GOINGB0ZbRgdGC0Y3QvNGDINC60Y3RiC3Qv9Cw0LzRj9GG0ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2Vfc2lwIiBtc2dpZD0iNTk4Njk1MjM2Mjc5NTg3MDUwMiI+ItGA0LDQsdGW0YbRjC/Qv9GA0YvQvNCw0YbRjCBp0L3RgtGN0YDQvdGN0YIt0LLRi9C60LvRltC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iNDcxNzYzMjAwMDA2MjY3NDI5NCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0YHQu9GD0LbQsdGDIFNJUCwg0LrQsNCxINC/0YDRi9C80LDRhtGML9GA0LDQsdGW0YbRjCDQhtC90YLRjdGA0L3RjdGCLdCy0YvQutC70ZbQutGWLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2JpbmRfY2FsbF9zZXJ2aWNlICg2NzI0MDA5NzI2NjcxMjQ2NTUxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2JpbmRfY2FsbF9zZXJ2aWNlICg4NzMyNTQ3NjYyNDQyNTcyNDM1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc4NjI1OTMyODM2MTE0OTMyMzIiPiLRh9GL0YLQsNGG0Ywg0LTQsNC00LfQtdC90YvRjyDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0YHQtdGC0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWROZXR3b3JrVXNhZ2VIaXN0b3J5IiBtc2dpZD0iNzY4OTA2MDc0OTgxOTEyNjQ3MiI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDRgdGH0YvRgtCy0LDRhtGMINC00LDQtNC30LXQvdGL0Y8g0LDQsSDQs9GW0YHRgtC+0YDRi9GWINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDRgdC10YLQutGWINC00LvRjyDQv9GN0Z7QvdGL0YUg0YHQtdGC0LDQuiDRliDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iMjU2MjA1MzU5MjMzOTg1OTk5MCI+ItC60ZbRgNCw0LLQsNC90L3QtSDQv9Cw0LvRltGC0YvQutCw0Lkg0YHQtdGC0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSI3NTM3NTg2NzcxNTU5MzcwNjY4Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdC8INC60ZbRgNCw0LLQsNGG0Ywg0YHQtdGC0LrQsNCy0YvQvNGWINC/0LDQu9GW0YLRi9C60LDQvNGWINGWINCy0YvQt9C90LDRh9Cw0YbRjCDQv9GA0LDQstGW0LvRiyDQv9GN0Z7QvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1MDg4MjE3MzA5MDg4NzI5NjUwIj4i0LfQvNGP0L3RltGG0Ywg0YPQu9GW0Log0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINGB0LXRgtC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjU0NDM0MTI4NjY3NDYxOTgxMjMiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQt9C80Y/QvdGP0YbRjCDQvNC10YLQsNC0INGD0LvRltC60YMg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINGB0LXRgtC60ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C80ZYuINCd0LUg0LTQu9GPINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDQt9Cy0YvRh9Cw0LnQvdGL0LzRliDQv9GA0YvQutC70LDQtNCw0L3QvdGP0LzRli4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9tYXJrTmV0d29ya1NvY2tldCAoMzY1ODUyNzIxNDkxNDk1OTc0OSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19tYXJrTmV0d29ya1NvY2tldCAoNzY1NTU2ODQzMzY5NjM1NjU3OCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9Ijc2NzM0MTY0ODc4NzM0MzIyNjgiPiLQtNC+0YHRgtGD0L8g0LTQsCDQv9Cw0LLQtdC00LDQvNC70LXQvdC90Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI0NTg0NTc3NDI2ODM0MzEzODciPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDRgtGA0YvQvNC7adCy0LDRhtGMLCDQv9GA0LDQstGP0YDQsNGG0YwgaSDQstGL0LTQsNC70Y/RhtGMINCw0L/QsNCy0Y/RiNGH0Y3QvdC9aSwg0YMg0YLRi9C8INC7adC60YMg0LDQv9GD0LHQu2nQutCw0LLQsNC90YvRjyBp0L3RiNGL0LxpINC/0YDRi9C60LvQsNC00LDQvdC90Y/QvGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIiBtc2dpZD0iNzA1Nzc2NDc0MjIxMTY1NjY1NCI+ItC/0YDRi9Cy0Y/Qt9C60LAg0LTQsCDRgdC70YPQttCx0Ysg0LDQv9Cw0LLRj9GI0YfRjdC90L3RjyDRgdC70YPRhdCw0YfQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI5ODU2OTc5MTg1NzY5MDI5ODYiPiLQlNCw0LfQstCw0LvRj9C1INGe0LvQsNC00LDQu9GM0L3RltC60YMg0L/RgNGL0LLRj9C30LLQsNGG0YbQsCDQtNCwINCy0LXRgNGF0L3Rj9Cz0LAg0Z7Qt9GA0L7RntC90Y4g0ZbQvdGC0Y3RgNGE0LXQudGB0YMg0YHQu9GD0LbQsdGLICDQsNC/0LDQstGP0YjRh9GN0L3QvdGPINGB0LvRg9GF0LDRh9C+0Z4uINCd0ZbQutC+0LvRliDQvdC1INC/0LDRgtGA0Y3QsdC90LDQtSDQtNC70Y8g0LfQstGL0YfQsNC50L3Ri9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rni4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9pbnZva2VDYXJyaWVyU2V0dXAgKDM2OTk2MDA4MzM5NzUxMTc0NzgpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfaW52b2tlQ2FycmllclNldHVwICg0MTU5NTQ5MTUyNTI5MTExOTIwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMgKDgyMDYwNzc0NDc4Mzg5MDk1MTYpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMgKDY4OTkxMDIwNzU4MjUyNzIyMTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjQ0OTc0MjA3Mjg4NTc1ODU3OTEiPiLQo9GB0YLQsNC90LDQstGW0YbRjCDQv9GA0LDQstGW0LvRiyDQv9Cw0YDQvtC70Y4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2xpbWl0UGFzc3dvcmQiIG1zZ2lkPSIzMjUyMTE0MjAzOTE5NTEwMzk0Ij4i0JrRltGA0LDQstCw0L3QvdC1INC00LDRntC20YvQvdGR0Lkg0ZYg0LrQvtC70YzQutCw0YHRhtGOINC30L3QsNC60LDRniDRgyDQv9Cw0YDQvtC70ZYg0YDQsNC30LHQu9Cw0LrQvtGe0LrRliDRjdC60YDQsNC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dhdGNoTG9naW4iIG1zZ2lkPSI5MTQxMzA2NDY5NDIxOTk1MDMiPiLQodCw0YfRi9GG0Ywg0LfQsCDRgdC/0YDQvtCx0LDQvNGWINGA0LDQt9Cx0LvQsNC60L7RntC60ZYg0Y3QutGA0LDQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193YXRjaExvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjE1NzI5Mjk0MjE1MDcwMDcyIj4i0KHQsNGH0YvRhtGMINC30LAg0LrQvtC70YzQutCw0YHRhtGOINC90Y/Qv9GA0LDQstGW0LvRjNC90YvRhSDQvdCw0LHRgNCw0L3Ri9GFINC/0LDRgNC+0LvRj9GeINC/0LDQtNGH0LDRgSDRgNCw0LfQsdC70LDQutC+0Z7QutGWINGN0LrRgNCw0L3QsCDRliDQsdC70LDQutCw0LLQsNGG0Ywg0L/Qu9Cw0L3RiNGN0YIg0LDQsdC+INGB0YbRltGA0LDRhtGMINGD0YHQtSDQtNCw0LTQt9C10L3Ri9GPINC90LAg0ZbQvCwg0LrQsNC70ZYg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3RiyDQv9Cw0YDQvtC70Ywg0L3QsNCx0YDQsNC90Ysg0LfQsNC90LDQtNGC0LAg0YjQvNCw0YIg0YDQsNC30L7Rni4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzEyMzIzMDkxODQ2NzYxMDczIj4i0KHQsNGH0YvRhtGMINC30LAg0LrQvtC70YzQutCw0YHRhtGOINC90Y/Qv9GA0LDQstGW0LvRjNC90YvRhSDQvdCw0LHRgNCw0L3Ri9GFINC/0LDRgNC+0LvRj9GeINC/0LDQtNGH0LDRgSDRgNCw0LfQsdC70LDQutC+0Z7QutGWINGN0LrRgNCw0L3QsCDRliDQsdC70LDQutCw0LLQsNGG0Ywg0YLRj9GN0LvQtdGE0L7QvSDQsNCx0L4g0YHRhtGW0YDQsNGG0Ywg0YPRgdC1INC00LDQtNC30LXQvdGL0Y8g0L3QsCDRltC8LCDQutCw0LvRliDQvdCw0LHRgNCw0L3QsCDQt9Cw0L3QsNC00YLQsCDRiNC80LDRgiDQvdGP0L/RgNCw0LLRltC70YzQvdGL0YUg0L/QsNGA0L7Qu9GP0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSIyNjIwMDc3MTkxMjQyNjg4OTU1Ij4i0JfQvNGP0L3QtdC90L3QtSDQv9Cw0YDQvtC70Y4g0YDQsNC30LHQu9Cw0LrQvtGe0LrRliDRjdC60YDQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSI2MDU5NjM5NjIzMDE5MDQ0NTgiPiLQl9C80Y/QvdGW0YbRjCDQv9Cw0YDQvtC70Ywg0YDQsNC30LHQu9Cw0LrQvtGe0LrRliDRjdC60YDQsNC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2ZvcmNlTG9jayIgbXNnaWQ9IjIyNzQwODUzODQ3MDQyNDg0MzEiPiLQl9Cw0LHQu9Cw0LrQsNCy0LDRhtGMINGN0LrRgNCw0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2ZvcmNlTG9jayIgbXNnaWQ9IjExNDE3OTc1ODg0MDM4MjcxMzgiPiLQmtGW0YDQsNCy0LDQvdC90LUg0YfQsNGB0LDQvCDRliDRgdC/0L7RgdCw0LHQsNC8INCx0LvQsNC60LDQstCw0L3QvdGPINGN0LrRgNCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93aXBlRGF0YSIgbXNnaWQ9IjM5MTA1NDU0NDY3NTg2Mzk3MTMiPiLQodGG0LXRgNGG0ZYg0Z7RgdC1INC00LDQtNC30LXQvdGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzA2MTg0MDk2MDY3NzU2ODc2Ij4i0JLRi9C00LDQu9GW0YbRjCDQtNCw0LTQt9C10L3Ri9GPINC3INC/0LvQsNC90YjRjdGC0LAg0LHQtdC3INC/0LDQv9GP0YDRjdC00LbQsNC90L3Rjywg0LLRi9C60LDQvdCw0Z7RiNGLINGB0LrRltC0INC90LDQu9Cw0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUwOTY4OTU2MDQ1NzQxODgzOTEiPiLQktGL0LTQsNC70ZbRhtGMINC00LDQtNC30LXQvdGL0Y8g0Lcg0YLRjdC70LXRhNC+0L3QsCDQsdC10Lcg0L/QsNC/0Y/RgNGN0LTQttCw0L3QvdGPLCDQstGL0LrQsNC90LDRntGI0Ysg0YHQutGW0LQg0L3QsNC70LDQtC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSIyNzg0ODI4MjkzNzQ3NzkxNDQ2Ij4i0KPRgdGC0LDQu9GP0LLQsNGG0Ywg0LPQu9Cw0LHQsNC70YzQvdGLINC/0YDQvtC60YHRliDQv9GA0YvQu9Cw0LTRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSI2Mzg3NDk3NDY2NjYwMTU0OTMxIj4i0KPRgdGC0LDQu9GP0LLQsNGG0Ywg0LPQu9Cw0LHQsNC70YzQvdGLINC/0YDQvtC60YHRli1j0LXRgNCy0LXRgCDQv9GA0YvQu9Cw0LTRiywg0Y/QutGWINCx0YPQtNC30LUg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0YbRhtCwLCDQutCw0LvRliDQv9Cw0LvRltGC0YvQutCwINCw0LrRgtGL0Z7QvdCw0Y8uINCi0L7Qu9GM0LrRliDQv9C10YDRiNGLINCw0LTQvNGW0L3RltGB0YLRgNCw0YLQsNGAINC/0YDRi9C70LDQtNGLINGe0YHRgtCw0LvRkdGe0LLQsNC1INGN0YTQtdC60YLRi9Ge0L3Ri9GPINCz0LvQsNCx0LDQu9GM0L3Ri9GPINC/0YDQvtC60YHRli3RgdC10YDQstC10YDRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSI4ODUyNzkxNTE4NDcyNTQwNTYiPiLQndCw0LsuINGC0Y3RgNC8LiDQtNC3LiDQv9Cw0YAuINCx0LvQsNC6LiDRjdC60YAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19leHBpcmVQYXNzd29yZCIgbXNnaWQ9IjE3Mjk3MjUyMjYzMTQ2OTE1OTEiPiLQmtGW0YDQsNCy0LDRhtGMINGH0LDRgdGC0LDRgtC+0Lkg0LfQvNC10L3RiyDQv9Cw0YDQvtC70Y4g0LTQu9GPINCx0LvQsNC60LDQstCw0L3QvdGPINGN0LrRgNCw0L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZW5jcnlwdGVkU3RvcmFnZSIgbXNnaWQ9Ijg5MDEzMjYxOTk5MDkxMzI5MTUiPiLQo9GB0YLQsNC70Y/QstCw0YbRjCDRiNGL0YTRgNCw0LLQsNC90L3QtSDRgdGF0L7QstGW0YjRh9CwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZW5jcnlwdGVkU3RvcmFnZSIgbXNnaWQ9IjI2Mzc3MzIxMTUzMjUzMTY5OTIiPiLQl9Cw0L/Ri9GCINC90LAg0YjRi9GE0YDQsNCy0LDQvdC90LUg0LfQsNGF0LDQstCw0L3Ri9GFINC00LDQtNC30LXQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iNjM5NTMwMTAyMzE1MjI5NzgyNiI+ItCQ0LTQutC70Y7Rh9GL0YbRjCDQutCw0LzQtdGA0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSIyMzA2MzQ5MDQyODM0NzU0NTk3Ij4i0JfQsNCx0LDRgNCw0L3RltGG0Ywg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdC1INGe0YHRltGFINC60LDQvNC10YAg0L/RgNGL0LvQsNC00YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2Rpc2FibGVLZXlndWFyZEZlYXR1cmVzIiBtc2dpZD0iMjY2MzI5MTA0NTQyNjM4ODAyIj4i0JDQtNC60LvRjtGH0Y3QvdC90LUg0YTRg9C90LrRhtGL0ZYg0LHQu9Cw0Lpp0YDQvtGe0LppINC60LvQsNCyadGP0YLRg9GA0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVLZXlndWFyZEZlYXR1cmVzIiBtc2dpZD0iMzQ2NzA4MjI3MjE4NjUzNDYxNCI+ItCf0YDQsNC00YPRhdGW0LvQtdC90L3QtSDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0L3QtdC60LDRgtC+0YDRi9GFINGE0YPQvdC60YbRi9C5INC/0LDQtNGH0LDRgSDQsdC70LDQumnRgNC+0Z7QumkuIjwvc3RyaW5nPgotICA8c3RyaW5nLWFycmF5IG5hbWU9InBob25lVHlwZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI4OTAxMDk4MzM2NjU4NzEwMzU5Ij4i0JPQsNC70L7RntC90LDRjyDRgdGC0LDRgNC+0L3QutCwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODY5OTIzNjUwNTI3MTM2NjE1Ij4i0JzQsNCx0ZbQu9GM0L3RiyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc4OTc1NDQ2NTQyNDI4NzQ1NDMiPiLQn9GA0LDRhtC+0Z7QvdGLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTEwMzYwMTQzMzM4MjE1ODE1NSI+ItCf0YDQsNGG0L7RntC90Ysg0YTQsNC60YEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxNzM1MTc3MTQ0OTQ4MzI5MzcwIj4i0KXQsNGC0L3RliDRhNCw0LrRgSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYwMzg3ODY3NDQ3NzIwNzM5NCI+ItCf0Y3QudC00LbQsNGAIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTY1MDgyNDI3NTE3NzkzMTYzNyI+ItCG0L3RiNGLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iOTE5MjUxNDgwNjk3NTg5ODk2MSI+ItCQ0YHQsNCx0LvRltCy0YsiPC9pdGVtPgotICA8L3N0cmluZy1hcnJheT4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJlbWFpbEFkZHJlc3NUeXBlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwNzM5OTQzNTI5NTYxMjkxMjciPiLQpdCw0YLQvdGWIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNzA4NDIzNzM1NjYwMjYyNTYwNCI+ItCf0YDQsNGG0L7RntC90YsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxMTEyMDQ0NDEwNjU5MDExMDIzIj4i0IbQvdGI0YsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyMzc0OTEzOTUyODcwMTEwNjE4Ij4i0JrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRliI8L2l0ZW0+Ci0gIDwvc3RyaW5nLWFycmF5PgotICA8c3RyaW5nLWFycmF5IG5hbWU9InBvc3RhbEFkZHJlc3NUeXBlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY4ODAyNTc2MjY3NDAwNDcyODYiPiLQndCwINCT0LDQu9C+0Z7QvdGD0Y4g0YHRgtCw0YDQvtC90LrRgyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU2MjkxNTM5NTYwNDUxMDkyNTEiPiLQn9GA0LDRhtC+0Z7QvdGLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNDk2NjYwNDI2NDUwMDM0MzQ2OSI+ItCG0L3RiNGLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNDkzMjY4Mjg0NzU5NTI5OTM2OSI+ItCa0LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYiPC9pdGVtPgotICA8L3N0cmluZy1hcnJheT4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJpbUFkZHJlc3NUeXBlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE3Mzg1ODUxOTQ2MDE0NzY2OTQiPiLQpdCw0YLQvdGWIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTM1OTY0NDU2NTY0NzM4MzcwOCI+ItCf0YDQsNGG0L7RntC90YsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI3ODY4NTQ5NDAxMDUzNjE1Njc3Ij4i0IbQvdGI0YsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMTQ1MTE4OTQ0NjM5ODY5ODA5Ij4i0JrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRliI8L2l0ZW0+Ci0gIDwvc3RyaW5nLWFycmF5PgotICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yZ2FuaXphdGlvblR5cGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzU0NjMzNTYxMjE4OTExNTYxNSI+ItCf0YDQsNGG0L7RntC90YsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI0Mzc4MDc0MTI5MDQ5NTIwMzczIj4i0IbQvdGI0LDQtSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM0NTUwNDc0Njg1ODM5NjUxMDQiPiLQmtCw0YDRi9GB0YLQsNC70YzQvdGW0YbQutGWIjwvaXRlbT4KLSAgPC9zdHJpbmctYXJyYXk+Ci0gIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1Qcm90b2NvbHMiPgotICAgIDxpdGVtIG1zZ2lkPSI4NTk1MjYxMzYzNTE4NDU5NTY1Ij4iQUlNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNzM5MDQ3MzYyODI3NTQ5MDcwMCI+IldpbmRvd3MgTGl2ZSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc4ODI4NzcxMzQ5MzE0NTgyMTciPiJZYWhvbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwMzUzNzYzMTMyMDA1ODUyNDIiPiJTa3lwZSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc1MzIzNjMxNzg0NTk0NDQ5NDMiPiJRUSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM3MTM0NDEwMzQyOTk2NjA3NDkiPiJHb29nbGUgVGFsayI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI1MDY4NTczMTI3MTg2MzA4MjMiPiJJQ1EiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxNjQ4Nzk3OTAzNzg1Mjc5MzUzIj4iSmFiYmVyIjwvaXRlbT4KLSAgPC9zdHJpbmctYXJyYXk+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDdXN0b20iIG1zZ2lkPSIxNjQ0NzM4MDU5MDUzMzU1ODIwIj4i0JrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUhvbWUiIG1zZ2lkPSIyNTcwOTIzNDYzMDMzOTg1ODg3Ij4i0JPQsNC70L7RntC90LDRjyDRgdGC0LDRgNC+0L3QutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW9iaWxlIiBtc2dpZD0iNjUwMTQ2MzU1Nzc1NDc1MTAzNyI+ItCc0LDQsdGW0LvRjNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrIiBtc2dpZD0iODg2MzkzOTY2NzA1OTkxMTYzMyI+ItCf0YDQsNGG0L7RntC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVGYXhXb3JrIiBtc2dpZD0iMzUxNzc5MjE2MDAwODg5MDkxMiI+ItCf0YDQsNGG0L7RntC90Ysg0YTQsNC60YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVGYXhIb21lIiBtc2dpZD0iMjA2NzI2NTk3MjMyMjk3MTQ2NyI+ItCl0LDRgtC90ZYg0YTQsNC60YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVQYWdlciIgbXNnaWQ9Ijc1ODIzNTk5NTUzOTQ5MjE3MzIiPiLQn9GN0LnQtNC20LDRgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU90aGVyIiBtc2dpZD0iMTU0NDQyNTg0Nzg2ODc2NTk5MCI+ItCG0L3RiNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FsbGJhY2siIG1zZ2lkPSIyNzEyMTc1MjAzMDY1Njc4MjA2Ij4i0JfQstCw0YDQvtGC0L3RiyDQstGL0LrQu9GW0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDYXIiIG1zZ2lkPSI4NzM4MzYwNjg5NjE2NzE2OTgyIj4i0JzQsNGI0YvQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ29tcGFueU1haW4iIG1zZ2lkPSI1NDA0MzQzNTY0NjE0Nzg5MTYiPiLQkNGB0L3QvtGe0L3RiyDRgtGN0LvQtdGE0L7QvSDQutCw0LzQv9Cw0L3RltGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlSXNkbiIgbXNnaWQ9IjgwMjI0NTMxOTMxNzEzNzAzMzciPiJJU0ROIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTWFpbiIgbXNnaWQ9IjY3NjYxMzcwMTA2MjgzMjY5MTYiPiLQk9Cw0LvQvtGe0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU90aGVyRmF4IiBtc2dpZD0iODU4NzY1NzE0NTA3MjQ0NjU2NSI+ItCG0L3RiNGLINGE0LDQutGBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlUmFkaW8iIG1zZ2lkPSI0MDkzNzM4MDc5OTA4NjY3NTEzIj4i0KDQsNC00YvRkSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVRlbGV4IiBtc2dpZD0iMzM2Nzg3OTk1MjQ3NjI1MDUxMiI+ItCi0Y3Qu9C10LrRgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVR0eVRkZCIgbXNnaWQ9Ijg2MDY1MTQzNzg1ODUwMDAwNDQiPiJUVFkgVEREIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya01vYmlsZSIgbXNnaWQ9IjEzMTE0MjY5ODkxODQwNjU3MDkiPiLQn9GA0LDRhtC+0Z7QvdGLINC80LDQsdGW0LvRjNC90Ysg0L3Rg9C80LDRgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmtQYWdlciIgbXNnaWQ9IjY0OTkzODczMTIzMTE1NzA1NiI+ItCf0YDQsNGG0L7RntC90Ysg0L/RjdC50LTQttCw0YAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVBc3Npc3RhbnQiIG1zZ2lkPSI1NTk2NzcyNjM2MTI4NTYyODg0Ij4i0JDRgdGW0YHRgtGN0L3RgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1tcyIgbXNnaWQ9IjcyNTQ0OTIyNzU1MDI3Njg5OTIiPiJNTVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVDdXN0b20iIG1zZ2lkPSI3ODM3NTg2MTk4NDU4MDczNDA0Ij4i0JrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUJpcnRoZGF5IiBtc2dpZD0iMjgxMzM3OTg0NDIxMTM5MDc0MCI+ItCU0LfQtdC90Ywg0L3QsNGA0LDQtNC20Y3QvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVBbm5pdmVyc2FyeSIgbXNnaWQ9IjM4NzY3Nzk3NDQ1MTgyODQwMDAiPiLQk9Cw0LTQsNCy0ZbQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlT3RoZXIiIG1zZ2lkPSI3Mzg4MTc4OTM5MDEwMTQzMDc3Ij4i0IbQvdGI0LDQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg1MjU5NjAyNTc4MDQyMTM4NDYiPiLQmtCw0YDRi9GB0YLQsNC70YzQvdGW0YbQutGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlSG9tZSIgbXNnaWQ9IjQ0OTIyNzIzNjE0MDQzMzkxOSI+ItCT0LDQu9C+0Z7QvdCw0Y8g0YHRgtCw0YDQvtC90LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZVdvcmsiIG1zZ2lkPSIzNTQ4MDU4MDU5NjAxMTQ5OTczIj4i0J/RgNCw0YbQvtGe0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZU90aGVyIiBtc2dpZD0iMjkyMzAwODY5NTI3MjYzOTU0OSI+ItCG0L3RiNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlTW9iaWxlIiBtc2dpZD0iMTE5OTE5MDA1MzIxMTY2MjA1Ij4i0JzQsNCx0ZbQu9GM0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVDdXN0b20iIG1zZ2lkPSI4OTAzMjA2OTAzMDYwNDc5OTAyIj4i0JrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVIb21lIiBtc2dpZD0iODE2NTc1Njk3NzE4NDQ4MzA5NyI+ItCT0LDQu9C+0Z7QvdCw0Y8g0YHRgtCw0YDQvtC90LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVXb3JrIiBtc2dpZD0iNTI2ODE3Mjc3MjM4NzY5NDQ5NSI+ItCf0YDQsNGG0L7RntC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlT3RoZXIiIG1zZ2lkPSIyNzI2MTExOTY2NjIzNTg0MzQxIj4i0IbQvdGI0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVR5cGVDdXN0b20iIG1zZ2lkPSIyMDc0MDI4NzU1NTI3ODI2MDQ2Ij4i0JrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltVHlwZUhvbWUiIG1zZ2lkPSI2MjQxMTgxMDMyOTU0MjYzODkyIj4i0JPQsNC70L7RntC90LDRjyDRgdGC0LDRgNC+0L3QutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlV29yayIgbXNnaWQ9IjEzNzE0ODkyOTAyNDI0MzMwOTAiPiLQn9GA0LDRhtC+0Z7QvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlT3RoZXIiIG1zZ2lkPSI1Mzc3MDA3NDk1NzM1OTE1NDc4Ij4i0IbQvdGI0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQ3VzdG9tIiBtc2dpZD0iNjkxOTQ1MzgzNjYxODc0OTk5MiI+ItCa0LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQWltIiBtc2dpZD0iNzA1MDM2MDYxMjM2ODM4MzQxNyI+IkFJTSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xNc24iIG1zZ2lkPSIxNDQ1NTY1NDU0MjA3Njk0NDIiPiJXaW5kb3dzIExpdmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sWWFob28iIG1zZ2lkPSI4MjcxNDM5NDA4NDY5MDIxMjczIj4iWWFob28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sU2t5cGUiIG1zZ2lkPSI5MDE5Mjk2NzQ0NjIyODMyOTUxIj4iU2t5cGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sUXEiIG1zZ2lkPSI4ODg3NDg0Mzc5NDk0MTExODg0Ij4iUVEiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgaW1Qcm90b2NvbEdvb2dsZVRhbGsgKDQ5MzkwMjMyMTE0MDI3NzMwNCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xJY3EiIG1zZ2lkPSIxNTc0ODcwNDMzNjA2NTE3MzE1Ij4iSUNRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEphYmJlciIgbXNnaWQ9IjIyNzk5MTc2MzA4NzU3NzE3MjIiPiJKYWJiZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTmV0TWVldGluZyIgbXNnaWQ9IjgyODc2MjU2NTU5ODY4Mjc5NzEiPiJOZXRNZWV0aW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZVdvcmsiIG1zZ2lkPSIyOTI2ODg3MDUwNTM2Mzg3MiI+ItCf0YDQsNGG0L7RntC90LDRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVPdGhlciIgbXNnaWQ9IjM5NTE3ODExMzE1NzAxMjQwODIiPiLQhtC90YjQsNGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZUN1c3RvbSIgbXNnaWQ9IjIyNTUyMzQxNTM3MjA4ODMyMiI+ItCa0LDRgNGL0YHRgtCw0LvRjNC90ZbRhtC60ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVDdXN0b20iIG1zZ2lkPSIzNTQyNDAzNjc5ODI3Mjk3MzAwIj4i0JrQsNGA0YvRgdGC0LDQu9GM0L3RltGG0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjYyNzQzMzQ4MjUxOTUzNzkwNzYiPiLQn9Cw0LzQvtGH0L3RltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQnJvdGhlciIgbXNnaWQ9Ijg3NTc5MTM1MDY3ODQwNjc3MTMiPiLQkdGA0LDRgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUNoaWxkIiBtc2dpZD0iMTg5MDc0NjI3NzI3Njg4MTYyNiI+ItCU0LfRltGG0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVEb21lc3RpY1BhcnRuZXIiIG1zZ2lkPSI2OTA0ODA3MTEyMTIxMTIyMTMzIj4i0KPQvdGD0YLRgNCw0L3RiyDQn9Cw0YDRgtC90ZHRgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUZhdGhlciIgbXNnaWQ9IjUyMjgwMzQ2ODcwODIwNTA3MjUiPiLQkdCw0YbRjNC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVGcmllbmQiIG1zZ2lkPSI3MzEzMTA2NzYyNDgzMzkxMjYyIj4i0KHRj9Cx0LDRgC/RgdGP0LHRgNC+0Z7QutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlTWFuYWdlciIgbXNnaWQ9IjYzNjU2Nzc4NjE2MTAxMzc4OTUiPiLQmtGW0YDQsNGe0L3RltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlTW90aGVyIiBtc2dpZD0iNDU3ODU3MTM1Mjk2Mjc1ODMwNCI+ItCc0LDRhtGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFyZW50IiBtc2dpZD0iNDc1NTYzNTU2NzU2MjkyNTIyNiI+ItCR0LDRhtGM0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcnRuZXIiIG1zZ2lkPSI3MjY2NDkwMjg1MTIwMjYyNzgxIj4i0J/QsNGA0YLQvdGR0YAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVSZWZlcnJlZEJ5IiBtc2dpZD0iMTAxNTczMDU5ODQ0MTM1NTI0Ij4i0JfQsNC/0YDQvtGI0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUmVsYXRpdmUiIG1zZ2lkPSIxNzk5ODE5OTMwMDg1NjEwMjcxIj4i0JDQtNC90L7RgdC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTaXN0ZXIiIG1zZ2lkPSIxNzM1OTgzNTU0NDc5MDc2NDgxIj4i0KHRj9GB0YLRgNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlU3BvdXNlIiBtc2dpZD0iMzk0MTM2OTM5NDI4Njk4MTE3Ij4i0JzRg9C2L9C20L7QvdC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUN1c3RvbSIgbXNnaWQ9IjI0NzM1ODA1OTMxMTE1OTA5NDUiPiLQmtCw0YDRi9GB0YLQsNC70YzQvdGW0YbQutGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+ItCT0LDQu9C+0Z7QvdCw0Y8g0YHRgtCw0YDQvtC90LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLQn9GA0LDRhtC+0Z7QvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiLQhtC90YjQsNC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i0KPQstGP0LTQt9GW0YbQtSBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4i0KPQstGP0LTQt9GW0YbQtSBQVUst0LrQvtC0INGWINC90L7QstGLIFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i0J3QvtCy0YsgUElOLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+ItCU0LDQutGA0LDQvdGW0YbQtdGB0Y8sINC60LDQsSDRg9Cy0LXRgdGG0ZYg0L/QsNGA0L7Qu9GMIjwvZm9udD48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i0KPQstGP0LTQt9GW0YbQtSDQv9Cw0YDQvtC70Ywg0LTQu9GPINGA0LDQt9Cx0LvQsNC60LDQstCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i0JrQsNCxINGA0LDQt9Cx0LvQsNC60LDQstCw0YbRjCwg0YPQstGP0LTQt9GW0YbQtSBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i0J3Rj9C/0YDQsNCy0ZbQu9GM0L3RiyBQSU4t0LrQvtC0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiLQmtCw0LEg0YDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMLCDQvdCw0YbRltGB0L3RltGG0LUgXCLQnNC10L3RjlwiLCDQt9Cw0YLRi9C8IDAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxfZGlhbG9nX251bWJlcl9mb3JfZGlzcGxheSIgbXNnaWQ9IjY5NjE5MjEwMzE5NTA5MDk3MCI+ItCd0YPQvNCw0YAg0Y3QutGB0YLRgNCw0L3QsNC5INGB0LvRg9C20LHRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODk2MzgzOTI0MjU2NTY1MzE5MiI+ItCd0LUg0LDQsdGB0LvRg9Cz0L7RntCy0LDQtdGG0YbQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2NyZWVuX2xvY2tlZCIgbXNnaWQ9IjcyODg0NDMwNzQ4MDY4MzI5MDQiPiLQrdC60YDQsNC9INC30LDQsdC70LDQutCw0LLQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2VuYWJsZWQiIG1zZ2lkPSI0NjE1NDA1MTYxNDEyNjA0OSI+ItCd0LDRhtGW0YHQvdGW0YbQtSBcItCc0LXQvdGOXCIsINC60LDQsSDRgNCw0LfQsdC70LDQutCw0LLQsNGG0YwsINCw0LHQviDQt9GA0LDQsdGW0YbQtSDRjdC60YHRgtGA0LDQvdGLINCy0YvQutC70ZbQui4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSI2ODYyNjAwMjg3OTcxNTgzNjQiPiLQndCw0YbRltGB0L3RltGG0LUgXCLQnNC10L3RjlwiLCDQutCw0LEg0YDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI3NDc4NzAzMjU0OTY0ODEwMzAyIj4i0J3QsNC80LDQu9GO0LnRhtC1INC60LDQvNCx0ZbQvdCw0YbRi9GOINGA0LDQt9Cx0LvQsNC60L7RntC60ZYsINC60LDQsSDRgNCw0LfQsdC70LDQutCw0LLQsNGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2VtZXJnZW5jeV9jYWxsIiBtc2dpZD0iNTM0NzYzMzc4NDQwMTI4NTIyNSI+ItCt0LrRgdGC0YDQsNC90Ysg0LLRi9C60LvRltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9yZXR1cm5fdG9fY2FsbCIgbXNnaWQ9IjUyNDQyNTk3ODU1MDAwNDAwMjEiPiLQktGP0YDQvdGD0YbRhtCwINC00LAg0LLRi9C60LvRltC60YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fY29ycmVjdCIgbXNnaWQ9IjkwMzkwMDg2NTAzNjIyNjEyMzciPiLQn9GA0LDQstGW0LvRjNC90LAhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX3dyb25nIiBtc2dpZD0iNDMxNzk1NTAxNDk0ODEwODc5NCI+ItCf0LDRgdC/0YDQsNCx0YPQudGG0LUg0Y/RiNGH0Y0g0YDQsNC3Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXNzd29yZF93cm9uZyIgbXNnaWQ9IjU3Mzc4MTUzOTMyNTMxNjUzMDEiPiLQn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+ItCf0LXRgNCw0LLRi9GI0LDQvdCwINC80LDQutGB0ZbQvNCw0LvRjNC90LDRjyDQutC+0LvRjNC60LDRgdGG0Ywg0YHQv9GA0L7QsSDRgNCw0LfQsdC70LDQutC+0Z7QutGWINC/0YDQsNC3INCk0Y3QudGB0LrQsNC90YLRgNC+0LvRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGx1Z2dlZF9pbiIgbXNnaWQ9IjgwNTc3NjI4MjgzNTU1NzIzMTUiPiLQl9Cw0YDQsNC00LrQsCwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fY2hhcmdlZCIgbXNnaWQ9IjMyMTYzNTc0NTY4NDA2MDYyNCI+ItCX0LDRgNCw0LTQttCw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYmF0dGVyeV9zaG9ydCIgbXNnaWQ9IjQ0NzcyNjQ4NDkzODY4NTAyNjYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9sb3dfYmF0dGVyeSIgbXNnaWQ9IjE0ODI4NzM5ODE5MTkyNDk3NDAiPiLQn9Cw0LTQu9GD0YfRi9GG0LUg0LfQsNGA0LDQtNC90YPRjiDQv9GA0YvQu9Cw0LTRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk5NDM5Mjc3ODE5MjE1Mzk5Ij4i0J3Rj9C80LAgU0lNLdC60LDRgNGC0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MTY1OTE5NjA5NTc5MTQ3NCI+ItCd0Y/QvNCwIFNJTS3QutCw0YDRgtGLINGeINC/0LvQsNC90YjRjdGG0LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjE4NjkyMDU4NTY5NTE2OTA3OCI+ItCjINGC0Y3Qu9C10YTQvtC90LUg0L3Rj9C80LAgU0lNLdC60LDRgNGC0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4i0KPRgdGC0LDQu9GO0LnRhtC1IFNJTS3QutCw0YDRgtGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSIzNTI2NTczMDk5MDE5MzE5NDcyIj4iU0lNLdC60LDRgNGC0LAg0LDQtNGB0YPRgtC90ZbRh9Cw0LUg0YbRliDQvdC1INGH0YvRgtCw0LXRhtGG0LAuINCj0YHRgtCw0Z7RhtC1IFNJTS3QutCw0YDRgtGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5NjE0OTY2NTEzODkxNjE4NCI+IlNJTS3QutCw0YDRgtGDINC90LXQvNCw0LPRh9GL0LzQsCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjkxMDkwNDY0MzQzMzE1MTM3MSI+ItCS0LDRiNCwIFNJTS3QutCw0YDRgtCwINCx0YvQu9CwINCw0LTQutC70Y7Rh9Cw0L3QsCDQvdCw0LfQsNGe0YHRkdC00YsuXG4g0JfQstGP0LbRi9GG0LXRgdGPINC3INCw0L/QtdGA0LDRgtCw0YDQsNC8INCx0LXRgdC/0YDQsNCy0LDQtNC90L7QuSDRgdGD0LLRj9C30ZYsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMINGW0L3RiNGD0Y4gU0lNLdC60LDRgNGC0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwMTU5NDkwNTE1Mjc0Njg4NiI+ItCa0L3QvtC/0LrQsCDQv9Cw0L/Rj9GA0Y3QtNC90Y/QuSDQutCw0LzQv9Cw0Ldp0YbRi2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjA4OTI5NzY1MDQ4MTI5MjM2MyI+ItCa0L3QvtC/0LrQsCDQvdCw0YHRgtGD0L/QvdCw0Lkg0LrQsNC80L/QsNC3adGG0YtpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU5MDg4Nzg2NzgwMTI4MDAxIj4i0JrQvdC+0L/QutCwINC/0LDRntC30YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTg4ODQyMjkzODM1MTAxOTQyNiI+ItCa0L3QvtC/0LrQsCDQv9GA0LDQudCz0YDQsNCy0LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDU2MjMxODM3ODc2Njk4NzYwMSI+ItCa0L3QvtC/0LrQsCDQv9GA0YvQv9GL0L3QutGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxzX29ubHkiIG1zZ2lkPSI2NzMzOTc4MzA0Mzg2MzY1NDA3Ij4i0KLQvtC70YzQutGWINGN0LrRgdGC0YDQsNC90YvRjyDQstGL0LrQu9GW0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjE0MzM4OTIyNDk4NjAyODUwMSI+ItCh0LXRgtC60LAg0LfQsNCx0LvQsNC60LDQstCw0L3QsNGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNzQ0MTc5NzMzOTk3NjIzMCI+IlNJTS3QutCw0YDRgtCwINC30LDQsdC70LDQutCw0LLQsNC90LAgUFVLLdC60L7QtNCw0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI4MTI3OTE2MjU1MjQ1MTgxMDYzIj4i0JPQu9GP0LTQt9GW0YbQtSBcItCG0L3RgdGC0YDRg9C60YbRi9GOINC00LvRjyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsFwiINCw0LHQviDQt9Cy0Y/QttGL0YbQtdGB0Y8g0YHQsCDRgdC70YPQttCx0LDQuSDRgtGN0YXQvWnRh9C90LDQuSDQv9Cw0LTRgtGA0YvQvNC60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI4MDY2NjYwMTI5MjA2MDAxMDM5Ij4iU0lNLdC60LDRgNGC0LAg0LfQsNCx0LvQsNC60LDQstCw0L3QsNGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjU5NTMyMzIxNDA1Mjg4MTI2NCI+ItCg0LDQt9Cx0LvQsNC60LDQstCw0L3QvdC1IFNJTS3QutCw0YDRgtGLLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2NDgxNjIzODMwMzQ0MTA3MjIyIj4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGe0LLRj9C70ZYg0LPRgNCw0YTRltGH0L3RiyDQutC70Y7RhyDRgNCw0LfQsdC70LDQutCw0LLQsNC90L3RjyDQv9GN0Z7QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGA0LDQt9C+0Z46IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBcblxu0J/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgyDQv9GA0LDQtyDQvdCw0YHRgtGD0L/QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGB0LXQutGD0L3QtDogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSIyNzI1OTczMjg2MjM5MzQ0NTU1Ij4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGe0LLRj9C70ZYg0L/QsNGA0L7Qu9GMINC/0Y3RntC90YPRjiDQutC+0LvRjNC60LDRgdGG0Ywg0YDQsNC30L7RnjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIFxuXG7Qn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDINC/0YDQsNC3INC90LDRgdGC0YPQv9C90YPRjiDQutC+0LvRjNC60LDRgdGG0Ywg0YHQtdC60YPQvdC0OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2MjE2NjcyNzA2NTQ1Njk2OTU1Ij4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGe0LLRj9C70ZYgUElOLdC60L7QtCDQv9GN0Z7QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGA0LDQt9C+0Z46IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBcblxu0J/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgyDQv9GA0LDQtyDQvdCw0YHRgtGD0L/QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGB0LXQutGD0L3QtDogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRntCy0Y/Qu9GWINCz0YDQsNGE0ZbRh9C90Ysg0LrQu9GO0Ycg0YDQsNC30LHQu9Cw0LrQsNCy0LDQvdC90Y8g0L/RjdGe0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgNCw0LfQvtGeOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4g0J/QsNGB0LvRjyDRj9GI0YfRjSDQvdC10LrQsNC70YzQumnRhSDQvdGP0Z7QtNCw0LvRi9GFINGB0L/RgNC+0LEgKDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+KSDQstCw0Lwg0LHRg9C00LfQtSDQv9GA0LDQv9Cw0L3QsNCy0LDQvdCwINGA0LDQt9Cx0LvQsNC60LDQstCw0YbRjCDQv9C70LDQvdGI0Y3RgiDQtyDQtNCw0L/QsNC80L7Qs9Cw0Lkg0YPQstCw0YXQvtC00YMg0Z4gR29vZ2xlLlxuXG4g0J/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgyDQv9GA0LDQtyDQvdCw0YHRgtGD0L/QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGB0LXQutGD0L3QtDogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI1OTAyMjc1NTk3NjM3NjI3NTEiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0Z7QstGP0LvRliDQs9GA0LDRhNGW0YfQvdGLINC60LvRjtGHINGA0LDQt9Cx0LvQsNC60LDQstCw0L3QvdGPINC/0Y3RntC90YPRjiDQutC+0LvRjNC60LDRgdGG0Ywg0YDQsNC30L7RnjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uINCf0LDRgdC70Y8g0Y/RiNGH0Y0g0L3QtdC60LDQu9GM0Lpp0YUg0L3Rj9Ge0LTQsNC70YvRhSDRgdC/0YDQvtCxICg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPikg0LLQsNC8INCx0YPQtNC30LUg0L/RgNCw0L/QsNC90LDQstCw0L3QsCDRgNCw0LfQsdC70LDQutCw0LLQsNGG0Ywg0YLRjdC70LXRhNC+0L0g0Lcg0LTQsNC/0LDQvNC+0LPQsNC5INGD0LLQsNGF0L7QtNGDINGeIEdvb2dsZS5cblxuINCf0LDRntGC0LDRgNGL0YbQtSDRgdC/0YDQvtCx0YMg0L/RgNCw0Lcg0L3QsNGB0YLRg9C/0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgdC10LrRg9C90LQ6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTI4MTA2Mzk5NzQ1NzU1NjA0Ij4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGB0L/RgNCw0LHQsNCy0LDQu9GWINGA0LDQt9Cx0LvQsNC60LDQstCw0YbRjCDQv9C70LDQvdGI0Y3RgiDQvdC10LrQsNC70YzQumkg0YDQsNC30L7RniAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4pLiDQn9Cw0YHQu9GPINGP0YjRh9GNINC90LXQutCw0LvRjNC6adGFINGB0L/RgNC+0LHQsNGeICg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPikg0ZHQvSDQsdGD0LTQt9C1INGB0LrRltC90YPRgtGLINC00LAg0LfQsNCy0L7QtNGB0LrRltGFINC90LDQu9Cw0LQgaSDQutCw0YDRi9GB0YLQsNC70YzQvWnRhtC6adGPINC00LDQtNC30LXQvdGL0Y8g0LHRg9C00YPRhtGMINC30LPRg9Cx0LvQtdC90YvRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2MDM1NjUxNDIxNTY4MjY1NjUiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0YHQv9GA0LDQsdCw0LLQsNC70ZYg0YDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMINC/0LvQsNC90YjRjdGCINC90LXQutCw0LvRjNC6aSDRgNCw0LfQvtGeICg8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPikuINCf0LDRgdC70Y8g0Y/RiNGH0Y0g0L3QtdC60LDQu9GM0Lpp0YUg0YHQv9GA0L7QsdCw0Z4gKDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+KSDRkdC9INCx0YPQtNC30LUg0YHQutGW0L3Rg9GC0Ysg0LTQsCDQt9Cw0LLQvtC00YHQutGW0YUg0L3QsNC70LDQtCBpINC60LDRgNGL0YHRgtCw0LvRjNC9adGG0Lpp0Y8g0LTQsNC00LfQtdC90YvRjyDQsdGD0LTRg9GG0Ywg0LfQs9GD0LHQu9C10L3Ri9GPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI4MDg3MzUxNjQ5MzkzNDM2NSI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRgdC/0YDQsNCx0LDQstCw0LvRliDRgNCw0LfQsdC70LDQutCw0LLQsNGG0Ywg0L/Qu9Cw0L3RiNGN0YIg0L3QtdC60LDQu9GM0LppINGA0LDQt9C+0Z4gKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPikuINCm0Y/Qv9C10YAg0ZHQvSDQsdGD0LTQt9C1INGB0LrRltC90YPRgtGLINC00LAg0LfQsNCy0L7QtNGB0LrRltGFINC90LDQu9Cw0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0YHQv9GA0LDQsdCw0LLQsNC70ZYg0YDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMINGC0Y3Qu9C10YTQvtC9INC90LXQutCw0LvRjNC6aSDRgNCw0LfQvtGeICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4pLiDQptGP0L/QtdGAINGR0L0g0LHRg9C00LfQtSDRgdC60ZbQvdGD0YLRiyDQtNCwINC30LDQstC+0LTRgdC60ZbRhSDQvdCw0LvQsNC0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYyNTE0ODAzNDMzOTQzODk2NjUiPiLQn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDINC/0YDQsNC3IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iMjYyNjk5OTQ0OTYxMDY5NTkzMCI+ItCX0LDQsdGL0LvRliDRntC30L7RgD8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9mb3Jnb3RfcGF0dGVybiIgbXNnaWQ9IjI1ODg1MjE1MDExNjYwMzI3NDciPiLQoNCw0LfQsdC70LDQutCw0LLQsNC90L3QtSDRntC70ZbQutC+0LLQsNCz0LAg0LfQsNC/0ZbRgdGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSIyNzUxMzY4NjA1Mjg3Mjg4ODA4Ij4i0JfQsNC90LDQtNGC0LAg0YjQvNCw0YIg0YHQv9GA0L7QsSDQv9Cw0Z7RgtCw0YDRi9GG0Ywg0YjQsNCx0LvQvtC9ISI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiLQmtCw0LEg0YDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMLCDRg9Cy0LDQudC00LfRltGG0LUg0Z4g0YHQstC+0Lkg0YPQu9GW0LrQvtCy0Ysg0LfQsNC/0ZbRgSBHb29nbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9Ijg4NDY4ODE0MjQxMDY0ODQ0NDciPiLQhtC80Y8g0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAgKNGN0LvQtdC60YLRgNC+0L3QvdCw0Y8g0L/QvtGI0YLQsCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iNTk1ODAyODM4Mzk1NDczODUyOCI+ItCf0LDRgNC+0LvRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4i0KPQstCw0LnRgdGG0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iMTM2NDA1MTQ3MzM0NzQ4NTkwOCI+ItCd0Y/Qv9GA0LDQstGW0LvRjNC90LDQtSDRltC80Y8g0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAg0YbRliDQv9Cw0YDQvtC70YwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iMTY5NjkyNDc2MzY5MDM3OTA3MyI+ItCX0LDQsdGL0LvRltGB0Y8g0L3QsCDRltC80Y8g0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAg0LDQsdC+INC/0LDRgNC+0LvRjD9cbtCd0LDQstC10LTQsNC50YbQtSAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSI3MTE0NjI3MzUxMjg2OTMzODY3Ij4i0J/RgNCw0LLQtdGA0LrQsC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdW5sb2NrX2xhYmVsIiBtc2dpZD0iNzM3NDQwNDgzMjIwNjY3MDU0Ij4i0KDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zb3VuZF9vbl9sYWJlbCIgbXNnaWQ9IjkwNjg4Nzc1NzY1MTM0MjU5NzAiPiLQk9GD0Log0YPQutC70Y7Rh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb2ZmX2xhYmVsIiBtc2dpZD0iOTk2ODIyODI1MTU0MzE5MDI2Ij4i0JPRg9C6INCy0YvQutC70Y7Rh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fc3RhcnQiIG1zZ2lkPSIzOTQxMDQ1NTAyOTMzMTQyODQ3Ij4i0JrQu9GO0Ycg0L/QsNGH0LDRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jbGVhcmVkIiBtc2dpZD0iNTU4MzQ3OTcyMTAwMTYzOTU3OSI+ItCa0LvRjtGHINCy0YvQtNCw0LvQtdC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NlbGxfYWRkZWQiIG1zZ2lkPSI2NzU2MDMxMjA4MzU5MjkyNDg3Ij4i0KHQvtGC0LDQstGLINC00LDQtNCw0LTQt9C10L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fZGV0ZWN0ZWQiIG1zZ2lkPSI0OTg4NzMwODk1NTU0MDU3MDU4Ij4i0JrQu9GO0Ycg0LfQsNCy0LXRgNGI0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiDQkknQtNC20Y3RgiAlMiRkINC3ICUzJGQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+ItCU0LDQtNCw0YbRjCDQstGW0LTQttGN0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+ItCf0YPRgdGC0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+ItCS0L7QsdC70LDRgdGG0Ywg0YDQsNC30LHQu9Cw0LrRltGA0L7RntC60ZYg0YDQsNC30LPQsNGA0L3Rg9GC0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4i0JLQvtCx0LvQsNGB0YbRjCDRgNCw0LfQsdC70LDQutGW0YDQvtGe0LrRliDQt9Cz0LDRgNC90YPRgtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+ItCS0ZbQtNC20Y3RgiA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4i0KHQtdC70LXQutGC0LDRgCDQutCw0YDRi9GB0YLQsNC70YzQvWnQutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zdGF0dXMiIG1zZ2lkPSI4MDA4MjY0NjAzOTM1OTMwNjExIj4i0KHRgtCw0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiLQmtCw0LzQtdGA0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i0J3QsNC70LDQtNGLINC80YPQu9GM0YLRi9C80LXQtNGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+ItCX0LzRj9C90LXQvdC90LUg0L/QsNGA0LDQtNC60YMg0LLRltC00LbRjdGC0LDRniDQv9Cw0YfQsNC70L7RgdGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+ItCX0LzRj9C90LXQvdC90LUg0L/QsNGA0LDQtNC60YMg0LLRltC00LbRjdGC0LDRniDRgdC60L7QvdGH0YvQu9Cw0YHRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+ItCS0ZbQtNC20Y3RgiA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDQstGL0LTQsNC70LXQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+ItCg0LDQt9Cz0LDRgNC90YPRhtGMINCy0L7QsdC70LDRgdGG0Ywg0YDQsNC30LHQu9Cw0LrRltGA0L7RntC60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i0KDQsNC30LHQu9Cw0Lpp0YDQvtGe0LrQsCDRgdC70LDQudC00LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLQo9C30L7RgCDRgNCw0LfQsdC70LDQumnRgNC+0Z7QutGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i0KTRjdC50YHQutCw0L3RgtGA0L7Qu9GMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+IlBJTi3QutC+0LQg0YDQsNC30LHQu9Cw0Lpp0YDQvtGe0LrRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLQn9Cw0YDQvtC70Ywg0YDQsNC30LHQu9Cw0Lpp0YDQvtGe0LrRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLQktC+0LHQu9Cw0YHRhtGMINGD0LfQvtGA0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+ItCS0L7QsdC70LDRgdGG0Ywg0YHQu9Cw0LnQtNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiIxMjMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBbHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF9jaGFyYWN0ZXIiIG1zZ2lkPSI3MzM2NDcwNTM1Mzg1MDA5NTIzIj4i0JfQvdCw0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF93b3JkIiBtc2dpZD0iNzA3NTU3MDMyODM3NDkxODY2MCI+ItGB0LvQvtCy0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF9saW5rIiBtc2dpZD0iNTgxNTUwODg4MDc4MjQ4ODI2NyI+ItGB0L/QsNGB0YvQu9C60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF9saW5lIiBtc2dpZD0iNTc2NDI2NzIzNTAyNjEyMDg4OCI+ItGA0LDQtNC+0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJob3VyX2FtcG0iIG1zZ2lkPSI0NTg0MzM4MDgzNTI5MzU1OTgyIj4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JVA8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91cl9jYXBfYW1wbSIgbXNnaWQ9IjIwODM0NjU5OTI5NDA0NDQzNjYiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lcDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9mYWlsZWQiIG1zZ2lkPSI1NDEwMjcwMzI5MTE0MjEyMDQxIj4i0J3QtSDQsNGC0YDRi9C80LDQu9Cw0YHRjyDQstGL0LrQsNC90LDRhtGMINC30LDQstC+0LTRgdC60YPRjiDQv9GA0LDQstC10YDQutGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiLQlNC30LXRj9C90L3QtSBGQUNUT1JZX1RFU1Qg0L/QsNC00YLRgNGL0LzQu9GW0LLQsNC10YbRhtCwINGC0L7Qu9GM0LrRliDQtNC70Y8g0L/QsNC60LXRgtCw0Z4sINGD0YHRgtCw0LvRj9Cy0LDQvdGL0YUg0L3QsCDRiNC70Y/RhdGDIC9zeXN0ZW0vYXBwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+ItCf0LDQutC10YIsINGP0LrRliDQstGL0LrQvtC90LLQsNC1INC00LfQtdGP0L3QvdC1IEZBQ1RPUllfVEVTVCwg0L3QtSDQt9C90L7QudC00LfQtdC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3RfcmVib290IiBtc2dpZD0iNjMyMDE2ODIwMzA1MDc5MTY0MyI+ItCf0LXRgNCw0LfQsNCz0YDRg9C30ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMTk4NzQ4Mzk3NzgzNDYwMzg3MiI+ItCd0LAg0YHRgtCw0YDQvtC90YbRiyDQtyDQsNC00YDQsNGB0LDQvCA8eGxpZmY6ZyBpZD0iVElUTEUiPiVzPC94bGlmZjpnPiDQstGL0LfQvdCw0YfQsNC90LA6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI2OTYxOTAzMjEzNzI5NjY3NTczIj4iSmF2YVNjcmlwdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3RpdGxlIiBtc2dpZD0iMjYxOTM3NjU1NTUyNTExNjU5MyI+ItCf0LDRhtCy0LXRgNC00LfRltGG0LUg0L/QtdGA0LDRhdC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZF9wb3NpdGl2ZV9idXR0b24iIG1zZ2lkPSIzMTEyNzUyMDEwNjAwNDg0MTMwIj4i0J/QsNC60ZbQvdGD0YbRjCDQs9GN0YLRgyDRgdGC0LDRgNC+0L3QutGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfbmVnYXRpdmVfYnV0dG9uIiBtc2dpZD0iNTYxNDg2MTI5MzAyNjA5OTcxNSI+ItCX0LDRgdGC0LDQstCw0YbRhtCwINC90LAg0LPRjdGC0LDQuSDRgdGC0LDRgNC+0L3RhtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWQiIG1zZ2lkPSIzNDY4ODE2MzU3MDk1Mzc4NTkwIj4iPHhsaWZmOmcgaWQ9Ik1FU1NBR0UiPiVzPC94bGlmZjpnPlxuXG7QktGLINGe0L/RjdGe0L3QtdC90YssINGI0YLQviDRhdC+0YfQsNGG0LUg0L/QsNC6adC90YPRhtGMINCz0Y3RgtGDINGB0YLQsNGA0L7QvdC60YM/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9sYWJlbCIgbXNnaWQ9IjY4NjAyNjE3NTg2NjU4MjUwNjkiPiLQn9Cw0YbQstC10YDQtNC30ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZG91YmxlX3RhcF90b2FzdCIgbXNnaWQ9IjQ1OTUwNDY1MTU0MDAyNjg4ODEiPiLQn9Cw0LTQutCw0LfQutCwOiDQtNCy0L7QudGH0Ysg0L3QsNGG0ZbRgdC90ZbRhtC1LCDQutCw0LEg0L/QsNCy0Y/Qu9GW0YfRi9GG0Ywg0LDQsdC+INC/0LDQvNC10L3RiNGL0YbRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF90aGlzX2Zvcm0iIG1zZ2lkPSI0NjE2NzU4ODQxMTU3ODE2Njc2Ij4i0JDRntGC0LDQt9Cw0L/QsNGe0L3QtdC90L3QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNldHVwX2F1dG9maWxsIiBtc2dpZD0iNzEwMzQ5NTA3MDE4MDU5MDgxNCI+ItCj0YHRgtCw0LvRj9Cy0LDQvdC90LUg0LDRntGC0LDQt9Cw0L/QsNGe0L3QtdC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3NfbmFtZV9zZXBhcmF0b3IiIG1zZ2lkPSI2MzUwMTQ1MTU0Nzc5NzA2NzcyIj4iICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9uYW1lX2Zvcm1hdCIgbXNnaWQ9IjMyNjgwNDEwNTQ4OTkyMTQ5NDUiPiIkMSQyJDMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfc2VwYXJhdG9yIiBtc2dpZD0iNzQ4MzMwNzg5MzE3MDMyNDEyOSI+IiwgIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X2Zvcm1hdCIgbXNnaWQ9IjQ4NzQ0NTk0NTU3ODY4MjczNDQiPiIkMSQyJDMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcm92aW5jZSIgbXNnaWQ9IjIyMzE4MDY1NTM4NjM0MjIzMDAiPiLQn9GA0LDQstGW0L3RhtGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wb3N0YWxfY29kZSIgbXNnaWQ9IjQ2OTY0MzA0MDc2ODkzNzcxMDgiPiLQn9Cw0YjRgtC+0LLRiyDRltC90LTRjdC60YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9zdGF0ZSIgbXNnaWQ9IjY5ODg4OTQxOTU1MjAwNDQ2MTMiPiLQqNGC0LDRgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ppcF9jb2RlIiBtc2dpZD0iODY5NzU0NDU5MjYyNzMyMjk0NiI+ItCf0LDRiNGC0L7QstGLINGW0L3QtNGN0LrRgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2NvdW50eSIgbXNnaWQ9IjIzNzA3Mzc3MTAyMDM2Mjg5MSI+ItCQ0LrRgNGD0LPQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2lzbGFuZCIgbXNnaWQ9IjQwMjAxMDA4NzU5ODQ2NjcwMjUiPiLQktC+0YHRgtGA0LDRniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2Rpc3RyaWN0IiBtc2dpZD0iODQwMDczNTA3MzM5MjI2NzY3MiI+ItCg0LDRkdC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZGVwYXJ0bWVudCIgbXNnaWQ9IjUzNDMyNzk0NjI1NjQ0NTMzMDkiPiLQkNC00LTQt9C10LsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcmVmZWN0dXJlIiBtc2dpZD0iMjAyODQ5OTQ4NTA2NTgwMDQxOSI+ItCf0YDRjdGE0LXQutGC0YPRgNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcGFyaXNoIiBtc2dpZD0iODIwMjIwNjEwNTQ2ODgyMDA1NyI+ItCf0YDRi9GF0L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FyZWEiIG1zZ2lkPSIzNTQ3NDA5MDUwODg5OTUyNDIzIj4i0J/Qu9C+0YjRh9CwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZW1pcmF0ZSIgbXNnaWQ9IjI4OTM4ODA5Nzg4MzU2OTg4MTgiPiLQrdC80ZbRgNCw0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzc3NTI2NTc3NTQwNTEwNjk4MyI+ItGH0YvRgtCw0L3QvdC1INCy0Y3QsS3Qt9Cw0LrQu9Cw0LTQsNC6INGWINCz0ZbRgdGC0L7RgNGLaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iODQ2MjM3ODIyNjYwMDQzOTY1OCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDRgdGH0YvRgtCy0LDRhtGMINGD0YHQtSBVUkwt0LDQtNGA0LDRgdGLLCDRj9C6adGPINCx0YvQu2kg0L3QsNCy0LXQtNCw0L3RiyDRniDQsdGA0LDRntC30LXRgNGLLCDQsCDRgtCw0LrRgdCw0LzQsCDRntGB0LUg0LfQsNC60LvQsNC00LppLiDQo9Cy0LDQs9CwOiDQs9GN0YLRiyDQtNCw0LfQstC+0Lsg0L3QtdC70YzQs9CwINCw0LbRi9GG0YbRj9Ge0LvRj9GG0Ywg0L/QsNCx0L7Rh9C90YvQvGkg0LHRgNCw0Z7Qt9C10YDQsNC8aSDQsNCx0L4gadC90YjRi9C8aSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0LxpINC3INGD0LvQsNGB0YZp0LLQsNGB0YbRj9C8aSDQsdGA0LDRntC30LXRgNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzcxNDc4NTE2NTI3MzMxNDQ5MCI+ItC30LDQv9GW0YEg0LLRjdCxLdC30LDQutC70LDQtNCw0Log0ZYg0LPRltGB0YLQvtGA0YtpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2ODI1NTI3NDY5MTQ1NzYwOTIyIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LfQvNGP0L3Rj9GG0Ywg0LPRltGB0YLQvtGA0YvRjiDQsdGA0LDRntC30LXRgNCwINCw0LHQviDQt9Cw0LrQu9Cw0LTQutGWLCDRj9C6adGPINC30LDRhdC+0Z7QstCw0Y7RhtGG0LAg0L3QsCDQv9C70LDQvdGI0Y3RhtC1LiDQk9GN0YLQsCDQvNC+0LbQsCDQtNCw0LfQstC+0LvRltGG0Ywg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQstGL0LTQsNC70Y/RhtGMINCw0LHQviDQt9C80Y/QvdGP0YbRjCDQtNCw0LTQt9C10L3Ri9GPINCx0YDQsNGe0LfQtdGA0LAuINCj0LLQsNCz0LA6INCz0Y3RgtGLINC00LDQt9Cy0L7QuyDQvdC1INGA0LDRgdC/0LDRntGB0Y7QtNC20LLQsNC10YbRhtCwINC90LAg0L/QsNCx0L7Rh9C90YvRjyDQsdGA0LDRntC30LXRgNGLIGkgadC90YjRi9GPINC/0YDRi9C60LvQsNC00LDQvdC9aSDQtyDRhNGD0L3QutGG0YvRj9C8aSDQsdGA0LDRntC30LXRgNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0OTczODk1MzEwMTQxODU1MDkiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LfQvNGP0L3Rj9GG0Ywg0LPRltGB0YLQvtGA0YvRjiDQsdGA0LDRntC30LXRgNCwLCDRliDQt9Cw0LrQu9Cw0LTQutGWLCDQt9Cw0YXQsNCy0LDQvdGL0Y8g0Z4g0YLRjdC70LXRhNC+0L3QtS4g0JPRjdGC0LAg0LTQsNC30LLQvtC70ZbRhtGMINC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LLRi9C00LDQu9GP0YbRjCDQsNCx0L4g0LfQvNGP0L3Rj9GG0Ywg0LTQsNC00LfQtdC90YvRjyDQsdGA0LDRntC30LXRgNCwLiDQo9Cy0LDQs9CwOiDQs9GN0YLRiyDQtNCw0LfQstC+0Lsg0LzQvtC20LAg0L3QtSDQtNC30LXQudC9adGH0LDRhtGMINC00LvRjyDRltC90YjRi9GFINCx0YDQsNGe0LfQtdGA0LDRniDRliDRltC90YjRi9GFINC/0YDRi9C60LvQsNC00LDQvdC90Y/RniDQtyDQvNCw0LPRh9GL0LzQsNGB0YbRj9C80ZYg0LLRjdCxLdCx0YDQsNGe0LfQtdGA0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbGFybSIgbXNnaWQ9IjEzNzkyOTQ1NTYzNjIwOTE4MTQiPiLRg9GB0YLQsNC70ZHRntC60LAg0YHRltCz0L3QsNC70YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbGFybSIgbXNnaWQ9IjMxNjM5MjAzOTE1NzQ3Mzg0OCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDRntGB0YLQsNC70ZHRntCy0LDRhtGMINGB0ZbQs9C90LDQuyDQvdCwINGe0YHRgtCw0LvRj9Cy0LDQvdGL0Lwg0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQsdGD0LTQt9GW0LvRjNC90ZbQutCwLiDQn9GN0Z7QvdGL0Y8g0L/RgNGL0LrQu9Cw0LTQsNC90L3RliDQsdGD0LTQt9GW0LvRjNC90ZbQutCwINC90LUg0LzQvtCz0YPRhtGMINGA0Y3QsNC70ZbQt9C+0Z7QstCw0YbRjCDQs9GN0YLRg9GOINC80LDQs9GH0YvQvNCw0YHRhtGMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWRkVm9pY2VtYWlsIiBtc2dpZD0iNTUyNTY2MDAyNjA5MDk1OTA0NCI+ItC00LDQtNCw0YbRjCDQs9Cw0LvQsNGB0LDQstC+0LUg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWRkVm9pY2VtYWlsIiBtc2dpZD0iNjYwNDUwODY1MTQyODI1MjQzNyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC00LDQtNCw0LLQsNGG0Ywg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGWINGeINCy0LDRiNGDINGB0LrRgNGL0L3RjiDQs9Cw0LvQsNGB0LDQstC+0Lkg0L/QvtGI0YLRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjU5NjIyMjQxNTg5NTUyNzM5MzIiPiLQt9C80Y/QvdGW0YbRjCDQtNCw0LfQstC+0LvRiyDQs9C10LDQv9Cw0LfRltGG0YvRj9C90LDQstCw0L3QvdGPINC00LvRjyDQsdGA0LDRntC30Y3RgNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iMTA4Mzc0MzIzNDUyMjYzODc0NyI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINC00LDQt9Cy0L7Qu9GLINCz0LXQsNC70LDQutCw0YbRi9GWINCx0YDQsNGe0LfRjdGA0LAuINCo0LrQvtC00L3QsNGB0L3Ri9GPINC/0YDRi9C60LvQsNC00LDQvdC90ZYg0LzQvtCz0YPRhtGMINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNGG0Ywg0LPRjdGC0LAsINC60LDQsSDQtNCw0LfQstCw0LvRj9GG0Ywg0LDQtNC/0YDQsNGe0LrRgyDRltC90YTQsNGA0LzQsNGG0YvRliDQsNCxINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdGWINCy0YvQv9Cw0LTQutC+0LLRi9C8INCy0Y3QsS3RgdCw0LnRgtCw0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wYWNrYWdlVmVyaWZpY2F0aW9uQWdlbnQiIG1zZ2lkPSI1NTY4MTM5MTAwNjQ1ODI5MTE3Ij4i0LLQtdGA0YvRhNGW0LrQsNCy0LDRhtGMINC/0LDQutC10YLRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9Ijg0Mzc1OTAxOTA5OTA4NDMzODEiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y/QvCDQv9GA0LDQstGP0YDQsNGG0Ywg0LzQsNCz0YfRi9C80LDRgdGG0Ywg0YPRgdGC0LDQu9GP0LLQsNC90L3RjyDQv9Cw0LrQtdGC0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iNDE4Nzc4Njc5MzM2MDMyNjY1NCI+ItC/0YDRi9Cy0Y/Qt9Cw0YbRjCDQtNCwINCy0LXRgNGL0YTRltC60LDRgtCw0YDRgyDQv9Cw0LrQtdGC0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iMzE4MDc0MTc3MzIzMzg2MjEyNiI+ItCU0LDQt9Cy0LDQu9GP0LUg0Z7Qu9Cw0LTQsNC70YzQvdGW0LrRgyDRgNCw0LHRltGG0Ywg0LfQsNC/0YvRgtGLINCy0LXRgNGL0YTRltC60LDRgtCw0YDQsNGeINC/0LDQutC10YLRgy4g0J3QtSDQv9Cw0YLRgNCw0LHRg9C10YbRhtCwINC00LvRjyDQt9Cy0YvRh9Cw0LnQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VyaWFsUG9ydCIgbXNnaWQ9IjU0NjA4MzMyNzY1NDYzMTA3NiI+ItCw0YLRgNGL0LzQsNGG0Ywg0LTQvtGB0YLRg9C/INC00LAg0L/QsNGB0LvRj9C00L7RntC90YvRhSDQv9Cw0YDRgtC+0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXJpYWxQb3J0IiBtc2dpZD0iMjk5MTYzOTk4NTIyNDU5ODE5MyI+ItCU0LDQt9Cy0LDQu9GP0LUg0Z7Qu9Cw0LTQsNC70YzQvdGW0LrRgyDQsNGC0YDRi9C80LvRltCy0LDRhtGMINC00L7RgdGC0YPQvyDQtNCwINC/0LDRgdC70Y/QtNC+0Z7QvdGL0YUg0L/QsNGA0YLQvtGeINC3INC00LDQv9Cw0LzQvtCz0LDQuSBBUEkgU2VyaWFsTWFuYWdlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNTA3Nzc3NDI5Nzk0MzQwOTI4NSI+ItC30L3QtdGI0L1pINC00L7RgdGC0YPQvyDQtNCwINC60LDQvdGC0Y3QvdGCLdC/0YDQsNCy0LDQudC00Y3RgNCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjQ1NDQzNDY0ODY2OTc4NTM2ODUiPiLQlNCw0LUg0Z7Qu9Cw0LTQsNC70YzQvdGW0LrRgyDQtNC+0YHRgtGD0L8g0LTQsCDQutCw0L3RgtGN0L3Rgi3Qv9GA0LDQstCw0LnQtNGN0YDQsNGeINC3INCw0LHQsNC70L7QvdC6aS4g0J3QtSDQv9Cw0YLRgNCw0LHRg9C10YbRhtCwINC00LvRjyDQt9Cy0YvRh9Cw0LnQvdGL0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlTG9jayIgbXNnaWQ9IjM1Mjc1NTgzNjY2MTY2ODA4ODkiPiLQsNC00LzRj9C9adGG0Ywg0LDRntGC0LDQvNCw0YLRi9GH0L3QsNC1INCw0LHQvdCw0Z7Qu9C10L3QvdC1INC/0YDRi9C70LDQtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUxvY2siIG1zZ2lkPSIxNjU1NjI1ODMyMTY2Nzc4NDkyIj4i0JTQsNC30LLQsNC70Y/QtSDRntC70LDQtNCw0LvRjNC90ZbQutGDINCw0LTQv9GA0LDRntC70Y/RhtGMINGDINGBadGB0YLRjdC80YMg0LfQstC10YHRgtC6aSDQv9GA0LAg0YLQvtC1LCDQutCw0LvRliDQsdGD0LTQt9C1INC30YDRg9GH0L3RiyDRh9Cw0YEg0LTQu9GPINC90LXRltC90YLQtdGA0LDQutGC0YvRntC90LDQs9CwINC/0LXRgNCw0LfQsNC/0YPRgdC60YMg0Z4g0LzRjdGC0LDRhSDQsNCx0L3QsNGe0LvQtdC90L3RjyDQv9GA0YvQu9Cw0LTRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX21lc3NhZ2UiIG1zZ2lkPSI3NjczNDQ2ODcxMzkxOTU3OTAiPiLQktGLINGF0L7Rh9Cw0YbQtSwg0LrQsNCxINCx0YDQsNGe0LfRjdGAINC30LDQv9C+0LzQvdGW0Z4g0LPRjdGC0Ysg0L/QsNGA0L7Qu9GMPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbm90bm93IiBtc2dpZD0iNjM4OTY3NTMxNjcwNjY5OTc1OCI+ItCd0LUg0YbRj9C/0LXRgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfcmVtZW1iZXIiIG1zZ2lkPSI2NDkxODc5Njc4OTk2NzQ5NDY2Ij4i0JfQsNC/0L7QvNC90ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9uZXZlciIgbXNnaWQ9IjgyNzQzMzAyOTY3ODU4NTUxMDUiPiLQndGW0LrQvtC70ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvcGVuX3Blcm1pc3Npb25fZGVueSIgbXNnaWQ9IjczNzQwMzY3MDgzMTY2Mjk4MDAiPiLQoyDQstCw0YEg0L3Rj9C80LAg0LTQsNC30LLQvtC70YMg0L3QsCDQsNC00LrRgNGL0YbRhtGRINCz0Y3RgtCw0Lkg0YHRgtCw0YDQvtC90LrRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0ZXh0X2NvcGllZCIgbXNnaWQ9IjQ5ODU3Mjk1MjQ2NzAxMzEzODUiPiLQotGN0LrRgdGCINGB0LrQsNC/0ZbRj9Cy0LDQvdGLINGeINCx0YPRhNC10YAg0LDQsdC80LXQvdGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1vcmVfaXRlbV9sYWJlbCIgbXNnaWQ9IjQ2NTA5MTg5MjMwODMzMjA0OTUiPiLQkdC+0LvRjNGIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlcGVuZF9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI1NzIyMTQ0NjE2NzYwMTU2NDIiPiLQnNC10L3RjisiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZW51X3NwYWNlX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjQxMDMyODYzOTI3MjE2MjUzNyI+ItC/0YDQsNCx0LXQuyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZW50ZXJfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIyNzQzMzYyNzg1MTExMzA5NjY4Ij4iZW50ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjM2NTgxNzgwMDcyMDI3NDgxNjQiPiLQstGL0LTQsNC70ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoX2dvIiBtc2dpZD0iODI5ODAxNjY2OTgyMjE0MTcxOSI+ItCf0L7RiNGD0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3NlYXJjaCIgbXNnaWQ9IjY3NDk4MjY2MzkwOTg1MTIxMjAiPiLQn9C+0YjRg9C6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9xdWVyeSIgbXNnaWQ9IjU5MTE3Nzg1OTMxMjUzNTUxMjQiPiLQl9Cw0L/Ri9GCINC90LAg0L/QvtGI0YPQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fY2xlYXIiIG1zZ2lkPSIxMzMwMjgxOTkwOTUxODMzMDMzIj4i0JLRi9C00LDQu9GW0YbRjCDQt9Cw0L/Ri9GCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zdWJtaXQiIG1zZ2lkPSIyNjg4NDUwMTMzMjk3OTgzNTQyIj4i0JDQtNC/0YDQsNCy0ZbRhtGMINC30LDQv9GL0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3ZvaWNlIiBtc2dpZD0iMjQ1MzIwMzY5NTY3NDk5NDQ0MCI+ItCT0LDQu9Cw0YHQsNCy0Ysg0L/QvtGI0YPQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSI3NDYwNjk0MDcwMzA5NzMwMTQ5Ij4i0KPQutC70Y7Rh9GL0YbRjCDRhNGD0L3QutGG0YvRjiBFeHBsb3JlIGJ5IFRvdWNoPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODY1NTg4NzUzOTA4OTkxMDU3NyI+ItCh0LvRg9C20LHQsCDQtNC+0YHRgtGD0L/RgyA8eGxpZmY6ZyBpZD0iQUNDRVNTSUJJTElUWV9TRVJWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+INC30LDQv9GL0YLQstCw0LUg0Z7QutC70Y7Rh9GN0L3QvdC1INGE0YPQvdC60YbRi9GWIEV4cGxvcmUgYnkgVG91Y2guINCa0LDQu9GWINGE0YPQvdC60YbRi9GPIEV4cGxvcmUgYnkgVG91Y2gg0LHRg9C00LfQtSDRntC60LvRjtGH0LDQvdCw0Y8sINCy0Ysg0LfQvNC+0LbQsNGG0LUg0L/QsNGH0YPRhtGMINCw0LHQviDRntCx0LDRh9GL0YbRjCDQsNC/0ZbRgdCw0L3QvdGWINGC0LDQs9C+LCDRiNGC0L4g0LfQvdCw0YXQvtC00LfRltGG0YbQsCDQv9Cw0LQg0LLQsNGI0YvQvCDQv9Cw0LvRjNGG0LDQvCwg0LDQsdC+INCy0YvQutC+0L3QstCw0YbRjCDQttGN0YHRgtGLINC00LvRjyDRntC30LDQtdC80LDQtNC30LXRj9C90L3RjyDQtyDQv9C70LDQvdGI0Y3RgtCw0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjcwODE5OTY3Mjg1MjM3MzE5NSI+ItCh0LvRg9C20LHQsCDQtNC+0YHRgtGD0L/RgyA8eGxpZmY6ZyBpZD0iQUNDRVNTSUJJTElUWV9TRVJWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+INC30LDQv9GL0YLQstCw0LUg0Z7QutC70Y7Rh9GN0L3QvdC1INGE0YPQvdC60YbRi9GWIEV4cGxvcmUgYnkgVG91Y2guINCa0LDQu9GWINGE0YPQvdC60YbRi9GPIEV4cGxvcmUgYnkgVG91Y2gg0LHRg9C00LfQtSDRntC60LvRjtGH0LDQvdCw0Y8sINCy0Ysg0LfQvNC+0LbQsNGG0LUg0L/QsNGH0YPRhtGMINCw0LHQviDRntCx0LDRh9GL0YbRjCDQsNC/0ZbRgdCw0L3QvdGWINGC0LDQs9C+LCDRiNGC0L4g0LfQvdCw0YXQvtC00LfRltGG0YbQsCDQv9Cw0LQg0LLQsNGI0YvQvCDQv9Cw0LvRjNGG0LDQvCwg0LDQsdC+INCy0YvQutC+0L3QstCw0YbRjCDQttGN0YHRgtGLINC00LvRjyDRntC30LDQtdC80LDQtNC30LXRj9C90L3RjyDQtyDRgtGN0LvQtdGE0L7QvdCw0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI3Mzk2Mzg0NTA4OTUzNzc5OTI1Ij4iMSDQvNC10YHRj9GGINGC0LDQvNGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmVmb3JlT25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI5MDkxMzQ1NDY4MzY0OTk4MjYiPiLQoNCw0L3QtdC5LCDRh9GL0LwgMSDQvNC10YHRj9GGINGC0LDQvNGDIjwvc3RyaW5nPgotICA8cGx1cmFscyBuYW1lPSJudW1fc2Vjb25kc19hZ28iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0ODY5ODcwMDU2NTQ3ODk2MDExIj4iMSDRgdC10LrRg9C90LTRgyDRgtCw0LzRgyI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzkwMzcwNjgwNDM0OTU1NjM3OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INGBLiDRgtCw0LzRgyI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0ibnVtX21pbnV0ZXNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzMwNjc4NzQzMzA4ODgxMDE5MSI+IjEg0YXQstGW0LvRltC90YMg0YLQsNC80YMiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIxNzY5NDIwMDg5MTU0NTUxMTYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDRhdCyLiDRgtCw0LzRgyI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0ibnVtX2hvdXJzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjkxNTA3OTc5NDQ2MTA4MjE4NDkiPiIxINCz0LDQtNC30ZbQvdGDINGC0LDQvNGDIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDY3MjczMjM5NTg3NTg3NTY5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0LPQsNC00LcuINGC0LDQvNGDIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJsYXN0X251bV9kYXlzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMDY5OTkyODA4MTY0MzE4MjY4Ij4i0JDQv9C+0YjQvdGW0YUg0LTQt9GR0L06IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICAgIDxzdHJpbmcgbmFtZT0ibGFzdF9tb250aCIgbXNnaWQ9IjM5NTkzNDY3Mzk5NzkwNTU0MzIiPiLQkNC/0L7RiNC90ZYg0LzQtdGB0Y/RhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9sZGVyIiBtc2dpZD0iNTIxMTk3NTAyMjgxNTU1NDg0MCI+ItCg0LDQvdC10LkiPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9Im51bV9kYXlzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg2MTM1ODUzNDM5ODExNTgyMCI+ItGD0YfQvtGA0LAiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI0Nzk1ODY0NjYxNTMzMTQ2MzMiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDQtC4g0YLQsNC80YMiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImluX251bV9zZWNvbmRzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjcyOTc0NTU2MDk1NDkwNTEwMiI+ItC/0YDQsNC3IDEg0YHQtdC60YPQvdC00YMiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEyNDE5MjYxMTY0NDM5NzQ2ODciPiLQv9GA0LDQtyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDRgS4iPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImluX251bV9taW51dGVzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODc5MzA5NTI1MTMyNTIwMDM5NSI+ItC/0YDQsNC3IDEg0YXQstGW0LvRltC90YMiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMzMzA3MTM5MzYzOTk0NDg3NDkiPiLQv9GA0LDQtyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDRhdCyLiI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2hvdXJzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNzE2NDM1MzM0MjQ3Nzc2OTk5OSI+ItC/0YDQsNC3IDEg0LPQsNC00LfRltC90YMiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzI5MDY3NzM1MzcyNzM4OSI+ItC/0YDQsNC3IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INCz0LDQtNC3LiI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2RheXMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NDEzMDg4NzQzMDA5ODM5NTE4Ij4i0LfQsNGe0YLRgNCwIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1MTA5NDQ5Mzc1MTAwOTUzMjQ3Ij4i0L/RgNCw0LcgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0LQuIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX3NlY29uZHNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTg0OTAzNjg0MDIwMDA2OTExOCI+IjEg0YHQtdC60YPQvdC00YMg0YLQsNC80YMiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM2OTkxNjkzNjY2NTA5MzA0MTUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDRgS4g0YLQsNC80YMiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9udW1fbWludXRlc19hZ28iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2MzYxNDkwMTQ3MTEzODcxNTQ1Ij4iMSDRhdCyadC7adC90YMg0YLQsNC80YMiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg1MTE2NDk2ODU5NzE1MDcxMCI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INC80ZbQvS4g0YLQsNC80YMiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9udW1faG91cnNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDc5NjIxMjAzOTcyNDcyMjExNiI+IjEg0LPQsNC00LfRltC90YMg0YLQsNC80YMiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY4ODk5NzA3NDU3NDg1Mzg5MDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDQs9Cw0LTQty4g0YLQsNC80YMiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9udW1fZGF5c19hZ28iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NDYzMTYxNzExNDkyNjgwMzA5Ij4i0YPRh9C+0YDQsCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzQ1MzM0MjYzOTYxNjQ4MTE5MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INC0LiDRgtCw0LzRgyI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9zZWNvbmRzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg0MjIyNTM3MDc5NTA2NjI5OSI+ItC/0YDQsNC3IDEg0YHQtdC60YPQvdC00YMiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0OTU4ODAxMDg4MjU4MDUxMDgiPiLQv9GA0LDQtyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDRgS4iPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fbWludXRlcyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU2Mjc4NjE0OTkyODI4NDg3OCI+ItC/0YDQsNC3IDEg0YXQsi4iPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQyMTYxMTMyOTI3MDY1Njg3MjYiPiLQn9GA0LDQtyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDRhdCyLiI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9ob3VycyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNzQ3MDgxMTgxMjQwNDUyNDYiPiLQv9GA0LDQtyAxINCz0LDQtNC30ZbQvdGDIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNzA1MzczNzY2Nzk4MDEzNDA2Ij4i0L/RgNCw0LcgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0LPQsNC00LcuIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX2RheXMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIyMTc4NTc2MjU0Mzg1NzM5ODU1Ij4i0LfQsNGe0YLRgNCwIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyOTczMDYyOTY4MDM4MzU1OTkxIj4i0L/RgNCw0LcgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0LQuIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX2RhdGUiIG1zZ2lkPSI5MDkzOTQ5NzU3NzU3NDQ1MTE3Ij4i0LTQsNGC0LA6IDx4bGlmZjpnIGlkPSJEQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfdGltZSIgbXNnaWQ9IjU1MDY4MzEyNDQyNjMwODM3OTMiPiLRgyA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3llYXIiIG1zZ2lkPSI1MDQwMzk1NjQwNzExODY3MTc3Ij4i0YMgPHhsaWZmOmcgaWQ9IllFQVIiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRheSIgbXNnaWQ9IjgxNDQxOTU3NzYwNTgxMTk0MjQiPiLQtNC30LXQvdGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF5cyIgbXNnaWQ9IjQ3NzQ1NDc2NjEwMjEzNDQ2MDIiPiLQtC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJob3VyIiBtc2dpZD0iMjEyNjc3MTkxNjQyNjE4OTQ4MSI+ItCz0LDQtNC30ZbQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91cnMiIG1zZ2lkPSI4OTQ0MjQwMDUyNjY4NTI5OTMiPiLQsy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaW51dGUiIG1zZ2lkPSI5MTQ4ODc4NjU3NzAzNzY5ODY4Ij4i0YXQsi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaW51dGVzIiBtc2dpZD0iNTY0NjAwMTAwNTgyNzAzNDUwOSI+ItGF0LIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kIiBtc2dpZD0iMzE4NDIzNTgwODAyMTQ3OCI+ItGBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlY29uZHMiIG1zZ2lkPSIzMTYxNTE1MzQ3MjE2NTg5MjM1Ij4i0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2VlayIgbXNnaWQ9IjU2MTc5NjE1MzcxNzMwNjE1ODMiPiLRgtGL0LTQt9C10L3RjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndlZWtzIiBtc2dpZD0iNjUwOTYyMzgzNDU4Mzk0NDUxOCI+ItGC0YvQtC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ5ZWFyIiBtc2dpZD0iNDAwMTExODIyMTAxMzg5MjA3NiI+ItCz0L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InllYXJzIiBtc2dpZD0iNjg4MTU3NzcxNzk5MzIxMzUyMiI+ItCzLiI8L3N0cmluZz4KLSAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fc2Vjb25kcyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY5NjIwMTU1MjgzNzI5Njk0ODEiPiIxINGB0LXQutGD0L3QtNCwIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxODg2MTA3NzY2NTc3MTY2Nzg2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0YEiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX21pbnV0ZXMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0OTE1NDE0MDAyNTQ2MDg1NjE3Ij4iMSDRhdCy0ZbQu9GW0L3QsCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzE2NTE4NzE2OTIyNDkwODc3NSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INGF0LIuIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJkdXJhdGlvbl9ob3VycyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg5MTc0Njc0OTEyNDg4MDk5NzIiPiIxINCz0LDQtNC30ZbQvdCwIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzODYzOTYyODU0MjQ2NzczOTMwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g0LPQsNC00LcuIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX3RpdGxlIiBtc2dpZD0iMzUzNDUwOTEzNTQzODM1MzA3NyI+ItCf0YDQsNCx0LvQtdC80LAg0Lcg0LLRltC00Y3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X2ludmFsaWRfcHJvZ3Jlc3NpdmVfcGxheWJhY2siIG1zZ2lkPSIzMTg2NjcwMzM1OTM4NjcwNDQ0Ij4i0JLRltC00Y3QsCDQvdC1INC/0LDQtNGL0YXQvtC00LfRltGG0Ywg0LTQu9GPINC/0LDRgtC+0LrQsNCy0LDQuSDQv9C10YDQsNC00LDRh9GLINC90LAg4oCL4oCL0LPRjdGC0YMg0L/RgNGL0LvQsNC00YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX3RleHRfdW5rbm93biIgbXNnaWQ9IjM0NTA0MzkxNTUxODc4MTAwODUiPiLQndC10LzQsNCz0YfRi9C80LAg0L/RgNCw0LnQs9GA0LDRhtGMINCz0Y3RgtCwINCy0ZbQtNGN0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX2J1dHRvbiIgbXNnaWQ9IjI4MjIyMzgyMTUxMDA2Nzk1OTIiPiLQntCaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpdmVfdGltZSIgbXNnaWQ9IjE4MTg1NTcxNzc4Mjk0MTE0MTciPiI8eGxpZmY6ZyBpZD0iREFURSI+JTEkczwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vb24iIG1zZ2lkPSI3MjQ1MzUzNTI4ODE4NTg3OTA4Ij4i0LDQv9C+0Z7QtNC90ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJOb29uIiBtc2dpZD0iMzM0MjEyNzc0NTIzMDAxMzEyNyI+ItCf0L7RntC00LfQtdC90YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaWRuaWdodCIgbXNnaWQ9IjcxNjYyNTk1MDg4NTA0NTc1OTUiPiLQsNC/0L7RntC90LDRh9GLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iTWlkbmlnaHQiIG1zZ2lkPSI1NjMwODA2OTA2ODk3ODkyMjAxIj4i0JDQv9C+0Z7QvdCw0YfRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVsYXBzZWRfdGltZV9zaG9ydF9mb3JtYXRfbW1fc3MiIG1zZ2lkPSI0NDMxNTU1OTQzODI4NzExNDczIj4iPHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUxJDAyZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUyJDAyZDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbGFwc2VkX3RpbWVfc2hvcnRfZm9ybWF0X2hfbW1fc3MiIG1zZ2lkPSIxODQ2MDcxOTk3NjE2NjU0MTI0Ij4iPHhsaWZmOmcgaWQ9IkhPVVJTIj4lMSRkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTIkMDJkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iU0VDT05EUyI+JTMkMDJkPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbGVjdEFsbCIgbXNnaWQ9IjY4NzY1MTg5MjU4NDQxMjkzMzEiPiLQktGL0LvRg9GH0YvRhtGMINGD0YHRkSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLQktGL0YDQsNC30LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLQmtCw0L/RltGP0LLQsNGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLQo9GB0YLQsNCy0ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLQl9Cw0LzRj9C90ZbRhtGMLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+ItCS0YvQtNCw0LvRltGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+ItCh0LrQsNC/0ZbRj9Cy0LDRhtGMIFVSTCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+ItCS0YvQsdGA0LDRhtGMINGC0Y3QutGB0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i0JLRi9C70YPRh9GN0L3QvdC1INGC0Y3QutGB0YLRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLQlNCw0LTQsNGG0Ywg0YMg0YHQu9C+0Z7QvdGW0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+ItCS0YvQtNCw0Ltp0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImlucHV0TWV0aG9kIiBtc2dpZD0iMTY1MzYzMDA2MjMwNDU2Nzg3OSI+ItCc0LXRgtCw0LQg0YPQstC+0LTRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVkaXRUZXh0TWVudVRpdGxlIiBtc2dpZD0iNDkwOTEzNTU2NDk0MTgxNTQ5NCI+ItCU0LfQtdGP0L3QvdGWINC3INGC0Y3QutGB0YLQsNC8Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190aXRsZSIgbXNnaWQ9IjU1NzYyNzI0OTYzNjU2ODQ4MzQiPiLQnNC10YHRhtCwINC00LvRjyDQt9Cw0YXQsNCy0LDQvdC90Y8g0L3QsCDQt9GL0YXQvtC00LfQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGV4dCIgbXNnaWQ9IjY2NDA1MDU4MTc2MTc0MTQzNzEiPiLQndC10LrQsNGC0L7RgNGL0Y8g0YHRltGB0YLRjdC80L3Ri9GPINGE0YPQvdC60YbRi9GWINC80L7Qs9GD0YbRjCDQvdC1INC/0YDQsNGG0LDQstCw0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg3MTgzMzUxMjEwNjA3ODc5MTQiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1IDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g0L/RgNCw0YbRg9C1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX3J1bm5pbmdfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI0NjUzNTg2OTQ3NzQ3MzMwMDU4Ij4i0J3QsNGG0ZbRgdC90ZbRhtC1LCDQutCw0LEg0LDRgtGA0YvQvNCw0YbRjCDQtNCw0LTQsNGC0LrQvtCy0YPRjiDRltC90YTQsNGA0LzQsNGG0YvRjiDQsNCx0L4g0YHQv9GL0L3RltGG0Ywg0L/RgNCw0LPRgNCw0LzRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvayIgbXNnaWQ9IjU5NzAwNjA0MzA1NjI1MjQ5MTAiPiLQntCaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNjQ0MjU2MDU3MTI1OTkzNTEzMCI+ItCQ0LTQvNGP0L3RltGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ5ZXMiIG1zZ2lkPSI1MzYyOTgyMzAzMzM3OTY5MzEyIj4i0J7QmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vIiBtc2dpZD0iNTE0MTUzMTA0NDkzNTU0MTQ5NyI+ItCQ0LTQvNGP0L3RltGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaWFsb2dfYWxlcnRfdGl0bGUiIG1zZ2lkPSIyMDQ5NjU4NzA4NjA5MDQzMTAzIj4i0KPQstCw0LPQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvYWRpbmciIG1zZ2lkPSI3OTMzNjgxMjYwMjk2MDIxMTgwIj4i0JfQsNCz0YDRg9C30LrQsC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb24iIG1zZ2lkPSIxNTQ0NjgyNzU1NTE0NDk0Mjk4Ij4i0KPQutC70Y7Rh9GL0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb2ZmIiBtc2dpZD0iNjgxNTg3MDM4Njk3MjgwNTgzMiI+ItCQ0LTQutC70Y7Rh9Cw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndoaWNoQXBwbGljYXRpb24iIG1zZ2lkPSI0NTMzMTg1OTQ3MDY0NzczMzg2Ij4i0JfQsNCy0Y/RgNGI0YvRhtGMINC00LfQtdGP0L3QvdC1INC3INC00LDQv9Cw0LzQvtCz0LDQuSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciB3aGljaEhvbWVBcHBsaWNhdGlvbiAoNDYxNjQyMDE3MjcyNzMyNjc4MikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c1VzZSIgbXNnaWQ9IjQ1ODMwMTgzNjgwMDA2MTA0MzgiPiLQktGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINC/0LAg0LfQvNCw0Z7Rh9Cw0L3QvdGWINC00LvRjyDQs9GN0YLQsNCz0LAg0LTQt9C10Y/QvdC90Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLQkNGH0YvRgdGG0ZbRhtGMINC/0LAg0LfQvNCw0Z7Rh9Cw0L3QvdGWINGeINGA0LDQt9C00LfQtdC70LUgXCLQndCw0LvQsNC00Ysg0YHRltGB0YLRjdC80YsgJmd0OyDQn9GA0YvQutC70LDQtNCw0L3QvdGWICZndDsg0KHQv9Cw0LzQv9Cw0LLQsNC90YvRj1wiLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZUFjdGl2aXR5IiBtc2dpZD0iNzQ4Njg3NjE0Nzc1MTgwMzMzMyI+ItCS0YvQsdC10YDRi9GG0LUg0LTQt9C10Y/QvdC90LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjaG9vc2VVc2JBY3Rpdml0eSIgbXNnaWQ9IjY4OTQ3NDg0MTYwNzM1ODM1MDkiPiLQktGL0LHQtdGA0YvRhtC1INC/0YDRi9C60LvQsNC00LDQvdC90LUg0LTQu9GPIFVTQi3Qv9GA0YvQu9Cw0LTRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vQXBwbGljYXRpb25zIiBtc2dpZD0iMjk5MTgxNDI3MzkzNjUwNDY4OSI+ItCd0Y/QvNCwINC/0YDRi9C60LvQsNC00LDQvdC90Y/Rniwg0Y/QutGW0Y8g0LzQvtCz0YPRhtGMINCy0YvQutC+0L3QstCw0YbRjCDQs9GN0YLRiyDQv9GA0LDRhtGN0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWVycl90aXRsZSIgbXNnaWQ9IjE5MDU4MDA1NjAzMTcxMzc3NTIiPjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWVycl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjkzMjYyODQ4ODAxMzA5Mjc3NiI+ItCd0LAg0LbQsNC70YwsINC/0YDRi9C60LvQsNC00LDQvdC90LUgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDRgdC/0YvQvdGW0LvQsNGB0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWVycl9wcm9jZXNzIiBtc2dpZD0iNDUwNzA1ODk5NzAzNTY5NzU3OSI+ItCd0LAg0LbQsNC70YwsINC/0YDQsNGG0Y3RgSA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g0YHQv9GL0L3RltGe0YHRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfdGl0bGUiIG1zZ2lkPSI0MzUxOTQ4NDgxNDU5MTM1NzA5Ij48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjE5MDQ0NzcxODkwNTcxOTkwNjYiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTIkczwveGxpZmY6Zz4g0L3QtSDQsNC00LrQsNC30LLQsNC1LlxuXG7Ql9Cw0LrRgNGL0YbRjCDRj9Cz0L4/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X3Byb2Nlc3MiIG1zZ2lkPSI1Nzc2MjA5ODgzMjk5MDg5NzY3Ij4i0J/RgNCw0YbRjdGBIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g0L3QtSDQsNC00LrQsNC30LLQsNC1LlxuXG7Ql9Cw0LrRgNGL0YbRjCDRj9Cz0L4/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FwcGxpY2F0aW9uX3Byb2Nlc3MiIG1zZ2lkPSI4OTQxNzU3NjA3MzQwNDgxMDU3Ij4i0J/RgNGL0LrQu9Cw0LTQsNC90L3QtSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INC90LUg0LDQtNC60LDQt9Cy0LDQtS4g0JfQsNC60YDRi9GG0Ywg0Y/Qs9C+PyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9wcm9jZXNzIiBtc2dpZD0iNjUxMzIwOTg3NDg4MDUxNzEyNSI+ItCf0YDQsNGG0Y3RgSA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g0L3QtSDQsNC00LrQsNC30LLQsNC1LlxuXG7Ql9Cw0LrRgNGL0YbRjCDRj9Cz0L4/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfY2xvc2UiIG1zZ2lkPSI4MzQ2MDcyMDk0NTIxMjY1NjA1Ij4i0J7QmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlcG9ydCIgbXNnaWQ9IjQwNjAyMTgyNjA5ODQ3OTU3MDYiPiLQodC/0YDQsNCy0LDQt9C00LDRh9CwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2FpdCIgbXNnaWQ9IjcxNDcxMTgyMTcyMjYzMTc3MzIiPiLQp9Cw0LrQsNGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3ZWJwYWdlX3VucmVzcG9uc2l2ZSIgbXNnaWQ9IjMyNzI3NTgzNTExMzgxMjI1MDMiPiLQodGC0LDRgNC+0L3QutCwINC90LUg0LDQtNC60LDQt9Cy0LDQtSDQvdCwINC30LDQv9GL0YLRiy5cblxu0JfQsNC60YDRi9GG0Ywg0Y/QtT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE1NDc5OTc3ODA1MDY3MTM1ODEiPiLQn9GA0YvQutC7LiDQv9C10YDQsNC90LDQutGW0YDQsNCy0LDQvdCw0LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ19yZXBsYWNlIiBtc2dpZD0iNjIwMjQ5ODk0OTk3MDI4MTQxMiI+ItCf0YDRi9C60LvQsNC00LDQvdC90LUgPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDQt9Cw0YDQsNC3INC30LDQv9GD0YjRh9Cw0L3QsNC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4i0J/RgNGL0LrQu9Cw0LTQsNC90L3QtSA8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+INC30LDQv9GD0YjRh9Cw0L3QsNC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zY2FsZSIgbXNnaWQ9IjMyMDI5NTU2Njc2NzU5NDQ0OTkiPiLQqNC60LDQu9CwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3Nob3ciIG1zZ2lkPSI0MDEzODc4ODc2NDg2NjU1ODkyIj4i0JfQsNGe0YHRkdC00Ysg0L/QsNC60LDQt9Cy0LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX2hpbnQiIG1zZ2lkPSIxMDY0NTI0MDg0NTQzMzA0NDU5Ij4i0JfQvdC+0Z4g0YPQutC70Y7Rh9GL0YbQtSDQs9GN0YLQsCDRniDRgNCw0LfQtNC30LXQu9C1IFwi0KHRltGB0YLRjdC80L3Ri9GPINC90LDQu9Cw0LTRiyAmZ3Q7INCf0YDRi9C60LvQsNC00LDQvdC90ZYgJmd0OyDQodC/0LDQvNC/0LDQstCw0L3Ri9GPXCIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+ItCf0YDRi9C60LvQsNC00LDQvdC90LUgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiAo0L/RgNCw0YbRjdGBIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMiRzPC94bGlmZjpnPikg0L/QsNGA0YPRiNGL0LvQsCDRntC70LDRgdC90YPRjiDQv9Cw0LvRltGC0YvQutGDIFN0cmljdE1vZGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic212X3Byb2Nlc3MiIG1zZ2lkPSI1MTIwMzk3MDEyMDQ3NDYyNDQ2Ij4i0J/RgNCw0YbRjdGBIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDQv9Cw0YDRg9GI0YvRniDRg9C70LDRgdC90YPRjiDQv9Cw0LvRltGC0YvQutGDIFN0cmljdE1vZGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfdGl0bGUiIG1zZ2lkPSIxNTg0MTkyMjg1NDQxNDA1NzQ2Ij4i0JDQsdC90LDRntC70LXQvdC90LUgQW5kcm9pZC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2FwayIgbXNnaWQ9Ijc5MDQwNDI2ODIxMTE1MjYxNjkiPiLQkNC/0YLRi9C80ZbQt9Cw0YbRi9GPINC/0YDRi9C60LvQsNC00LDQvdC90Y8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDQtyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3N0YXJ0aW5nX2FwcHMiIG1zZ2lkPSI0NTE0NjQ1MTYzNDY5MjY3MTMiPiLQl9Cw0L/Rg9GB0Log0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2NvbXBsZXRlIiBtc2dpZD0iMTQwNTk1NDc1NDExMjk5OTIyOSI+ItCX0LDQstGP0YDRiNGN0L3QvdC1INC30LDQs9GA0YPQt9C60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbiIgbXNnaWQ9IjkwODcwNjM5ODU3NzY2MjYxNjYiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1IFwiPHhsaWZmOmcgaWQ9IkFQUCI+JTEkczwveGxpZmY6Zz5cIiDQt9Cw0L/Rg9GI0YfQsNC90LDQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb25fZGV0YWlsIiBtc2dpZD0iMTcyMTY4MTc0MTYxNzg5ODg2NSI+ItCd0LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINC/0LXRgNCw0LnRgdGG0ZYg0LTQsCDQv9GA0YvQutC70LDQtNCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RpdGxlIiBtc2dpZD0iNzE1MzE2NzA4NTQwMzI5ODE2OSI+ItCf0LXRgNCw0LrQu9GO0YfRi9GG0Ywg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rlj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGV4dCIgbXNnaWQ9IjcwMjI2MzE5MjQ1MzQ0MDY0MDMiPiLQo9C20L4g0LfQsNC/0YPRiNGH0LDQvdCwINGW0L3RiNCw0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3QtSwg0Y/QutC+0LUg0L/QsNCy0ZbQvdC90LAg0LHRi9GG0Ywg0YHQv9GL0L3QtdC90LAg0L/QtdGA0LDQtCDQt9Cw0L/Rg9GB0LrQsNC8INC90L7QstCw0LPQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2FjdGlvbiIgbXNnaWQ9IjQ5MzEyOTE3MjIzODU2NjI4MiI+ItCS0Y/RgNC90YPRhtGG0LAg0LTQsCA8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjA4MjA5NDI3NTU4MDM1ODA0OSI+ItCd0LUg0LfQsNC/0YPRgdC60LDQudGG0LUg0L3QvtCy0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5ld19hcHBfYWN0aW9uIiBtc2dpZD0iNTQ3Mjc1NjkyNjk0NTQ0MDcwNiI+ItCX0LDQv9GD0YHRhtGW0YbRjCA8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+ItCh0L/Ri9C90ZbRhtGMINGB0YLQsNGA0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWINCx0LXQtyDQt9Cw0YXQsNCy0LDQvdC90Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VuZFRleHQiIG1zZ2lkPSI1MjA5ODc0NTcxOTU5NDY5MTQyIj4i0JLRi9Cx0LXRgNGL0YbQtSDQtNC30LXRj9C90L3QtSDQtNC70Y8g0YLRjdC60YHRgtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Jpbmd0b25lIiBtc2dpZD0iNjg4NTQyMTQwNjg0NTczNDY1MCI+ItCT0YPRh9C90LDRgdGG0Ywg0LfQstCw0L3QutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljIiBtc2dpZD0iNTQyMTY1MTE1NzEzODYyODE3MSI+ItCT0YPRh9C90LDRgdGG0Ywg0L/RgNCw0LnQs9GA0LDQstCw0LvRjNC90ZbQutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfcGxheWluZ190aHJvdWdoX2JsdWV0b290aCIgbXNnaWQ9IjkxNjU5ODQzNzkzOTQ2MDE1MzMiPiLQn9GA0LDQudCz0YDQsNCy0LDQtdGG0YbQsCDQv9GA0LDQtyBCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWNfaGludF9zaWxlbnRfcmluZ3RvbmVfc2VsZWN0ZWQiIG1zZ2lkPSI4MzEwNzM5OTYwOTczMTU2MjcyIj4i0KPRgdGC0LDQu9GP0LLQsNC90Ysg0YbRltGF0ZYg0YDRjdC20YvQvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9jYWxsIiBtc2dpZD0iMzk0MTY4MDA0MTI4Mjc4ODcxMSI+ItCT0YPRh9C90LDRgdGG0Ywg0L/QsNC00YfQsNGBINGA0LDQt9C80L7QstGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2JsdWV0b290aF9jYWxsIiBtc2dpZD0iMjAwMjg5MTkyNjM1MTE1MTUzNCI+ItCT0YPRh9C90LDRgdGG0YwgQmx1ZXRvb3RoINC/0LDQtNGH0LDRgSDQstGL0LrQu9GW0LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9hbGFybSIgbXNnaWQ9IjE5ODUxOTE2MTYwNDI2ODkxMDAiPiLQk9GD0YfQvdCw0YHRhtGMINCx0YPQtNC30ZbQu9GM0L3RltC60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMjQyMjI2NTY1Njc0NDI3NjcxNSI+ItCT0YPRh9C90LDRgdGG0Ywg0LDQv9Cw0LLRj9GI0YfRjdC90L3Rj9GeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Vua25vd24iIG1zZ2lkPSIxNDAwMjE5NjY5NzcwNDQ1OTAyIj4i0JPRg9GH0L3QsNGB0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2JsdWV0b290aCIgbXNnaWQ9IjY1Mzg4OTQxNzcyNTU5NjQzNDAiPiLQk9GD0YfQvdCw0YHRhtGMIEJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX3JpbmdlciIgbXNnaWQ9IjMzMjYwMDM4NDcwMDYxNjI0OTYiPiLQk9GD0YfQvdCw0YHRhtGMINGA0YvQvdCz0YLQvtC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9pbmNhbGwiIG1zZ2lkPSI4ODkwMDczMjE4MTU0NTQzMzk3Ij4i0JPRg9GH0L3QsNGB0YbRjCDQstGL0LrQu9GW0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX21lZGlhIiBtc2dpZD0iNDIxNzMxMTcxOTY2NTE5NDIxNSI+ItCT0YPRh9C90LDRgdGG0Ywg0L/RgNCw0LnQs9GA0LDQstCw0LvRjNC90ZbQutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbm90aWZpY2F0aW9uIiBtc2dpZD0iNzA0NDk4NjU0NjQ3NzI4MjI3NCI+ItCT0YPRh9C90LDRgdGG0Ywg0LDQv9Cw0LLRj9GI0YfRjdC90L3Rj9GeIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdCIgbXNnaWQ9IjM3ODk3NTg5ODAzNTc2OTY5MzYiPiLQoNGL0L3Qs9GC0L7QvSDQv9CwINC30LzQsNGe0YfQsNC90L1pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdF93aXRoX2FjdHVhbCIgbXNnaWQ9IjgxMjk1NjM0ODA4OTU5OTAzNzIiPiLQoNGL0L3Qs9GC0L7QvSDQv9CwINC30LzQsNGe0YfQsNC90L1pICg8eGxpZmY6ZyBpZD0iQUNUVUFMX1JJTkdUT05FIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9zaWxlbnQiIG1zZ2lkPSI3OTM3NjM0MzkyNDA4OTc3MDYyIj4i0J3Rj9C80LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9waWNrZXJfdGl0bGUiIG1zZ2lkPSIzNTE1MTQzOTM5MTc1MTE5MDk0Ij4i0KDRi9C90LPRgtC+0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3Vua25vd24iIG1zZ2lkPSI1NDc3OTE5OTg4NzAxNzg0Nzg4Ij4i0J3QtdCy0Y/QtNC+0LzRiyDRgNGL0L3Qs9GC0L7QvSI8L3N0cmluZz4KLSAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGUiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NjU0MTIzOTg3NDE4MTY4NjkzIj4i0KHQtdGC0LrQsCBXaS1GaSDQtNCw0YHRgtGD0L/QvdCw0Y8iPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQxOTI0MjQ0ODkxNjgzOTczODYiPiLQlNCw0YHRgtGD0L/QvdGL0Y8g0YHQtdGC0LrRliBXaS1GaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGVfZGV0YWlsZWQiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4i0JDQtNC60YDRi9GC0LDRjyDRgdC10YLQutCwIFdpLUZpINC00LDRgdGC0YPQv9C90LDRjyI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzkxNTg5NTMyMzY0NDI5Mjc2OCI+ItCU0LDRgdGC0YPQv9C90Ysg0LDQtNC60YDRi9GC0YvRjyDRgdC10YLQutGWIFdpLUZpIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9IjQwMjk0ODk3MTY2MDUyNTUzODYiPiLQo9Cy0LDQudC00LfRltGG0LUg0Z4g0YHQtdGC0LrRgyBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4i0KPQstCw0LnQtNC30ZbRhtC1INGeINGB0LXRgtC60YMgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbmV0d29ya19hdmFpbGFibGVfc2lnbl9pbl9kZXRhaWxlZCAoODAwMDA4MTk0MTQ0Nzk3NjExOCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZCIgbXNnaWQ9Ijc5MDQyMTQyMzE2NTE1NDYzNDciPiLQndC10LzQsNCz0YfRi9C80LAg0L/QsNC00LrQu9GO0YfRi9GG0YbQsCDQtNCwIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiDQtNGA0Y3QvdC90LDQtSDQv9Cw0LTQutC70Y7Rh9GN0L3QvdC1INC00LAg0IbQvdGC0Y3RgNC90Y3RgtGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijk3NjExNzgyNjU5MzI0NTE3Ij4iV2ktRmkgRGlyZWN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4i0J/QsNGH0LDRhtGMINGA0LDQsdC+0YLRgyBXaS1GaSBEaXJlY3QuINCT0Y3RgtCwINCw0LTQutC70Y7Rh9GL0YbRjCDQutC70ZbQtdC90YLQsCDQsNCx0L4g0LrRgNC+0L/QutGDINC00L7RgdGC0YPQv9GDIFdpLUZpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZhaWxlZF9tZXNzYWdlIiBtc2dpZD0iMzc2MzY2OTY3NzkzNTYyMzA4NCI+ItCd0LXQvNCw0LPRh9GL0LzQsCDQt9Cw0L/Rg9GB0YbRltGG0YwgV2ktRmkgRGlyZWN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjA2ODMyMTg4MTY3MzczNDg4NiI+IldpLUZpIERpcmVjdCDRg9C60LvRjtGH0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiLQlNCw0LrRgNCw0L3RltGG0LXRgdGPLCDQutCw0LEg0L3QsNC70LDQtNC30ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMTY0NTI2NzI1OTI3MjgyOTU1OSI+ItCf0YDRi9C90Y/RhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVjbGluZSIgbXNnaWQ9IjIxMTIyMjU0NTE3MDYxMzc4OTQiPiLQkNC00YXRltC70ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl9zZW50X3RpdGxlIiBtc2dpZD0iMTMxODk3NTE4NTExMjA3MDczNCI+ItCX0LDQv9GA0LDRiNGN0L3QvdC1INCw0LTQv9GA0LDRntC70LXQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl90b19jb25uZWN0X3RpdGxlIiBtc2dpZD0iNDk1ODgwMzk0ODY1ODUzMzYzNyI+ItCX0LDQv9GA0LDRiNGN0L3QvdC1INC00LDQu9GD0YfRi9GG0YbQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2Zyb21fbWVzc2FnZSIgbXNnaWQ9IjU3MDM4OTE3NDczMTk1MTc2OSI+ItCQ0LQ6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdG9fbWVzc2FnZSIgbXNnaWQ9IjI0ODk2ODk3NDUyMjA0NDA5OSI+ItCa0LDQvNGDOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VudGVyX3Bpbl9tZXNzYWdlIiBtc2dpZD0iNTkyMDkyOTU1MDM2NzgyODk3MCI+ItCj0LLRj9C00LfRltGG0LUg0L/QsNGC0YDRjdCx0L3RiyBQSU4t0LrQvtC0OiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UiIG1zZ2lkPSI4NTMwNTYzMzIzODgwOTIxMDk0Ij4iUElOLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDEyOTgxMjU3NzQyMjMyNDc1Ij4i0KLRjdC70LXRhNC+0L0g0LHRg9C00LfQtSDRh9Cw0YHQvtCy0LAg0LDQtNC60LvRjtGH0LDQvdGLINCw0LQg0YHQtdGC0LrRliBXaS1GaSwg0L/QsNC60YPQu9GMINGR0L0g0L/QsNC00LvRg9GH0LDQvdGLINC00LAg0L/RgNGL0LvQsNC00YsgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzM2MzkwNzIxMzc4NzQ2OTE1MSI+ItCi0Y3Qu9C10YTQvtC9INCx0YPQtNC30LUg0YfQsNGB0L7QstCwINCw0LTQutC70Y7Rh9Cw0L3RiyDQsNC0IFdpLUZpLCDQv9Cw0LrRg9C70Ywg0ZHQvSDQv9Cw0LTQu9GD0YfQsNC90Ysg0LTQsCDQv9GA0YvQu9Cw0LTRiyA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiLQo9GB0YLQsNCy0ZbRhtGMINGB0ZbQvNCy0LDQuyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+ItCQ0LTQv9GA0LDRntC60LAgU01TIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1ICZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7INC00LDRgdGL0LvQsNC1INCy0Y/Qu9GW0LrRg9GOINC60L7Qu9GM0LrQsNGB0YbRjCBTTVMt0L/QsNCy0LXQtNCw0LzQu9C10L3QvdGP0Z4uINCU0LDQt9Cy0L7Qu9GW0YbRjCDQs9GN0YLQsNC80YMg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiDQv9GA0LDRhtGP0LPQstCw0YbRjCDQsNC00L/RgNCw0Z7Qu9GP0YbRjCDQv9Cw0LLQtdC00LDQvNC70LXQvdC90ZY/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfeWVzIiBtc2dpZD0iMzY2MzcyNTk5Mzg1NTgxNjgwNyI+ItCU0LDQt9Cy0L7Qu9GW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4i0JfQsNCx0LDRgNCw0L3RltGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX21lc3NhZ2UiIG1zZ2lkPSIxNjQ1NDM2NDY2Mjg1MzEwODU1Ij4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsg0YXQvtGH0LAg0LDQtNC/0YDQsNCyadGG0Ywg0L/QsNCy0LXQtNCw0LzQu9C10L3QvdC1INC90LAg0LDQtNGA0LDRgSAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDsvYiZndDsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjM0OTIwMjU3MTk4NjgwNzg0NTciPiLQk9GN0YLQsCAiPGZvbnQgZmdjb2xvcj0iI2ZmZmZiMDYwIj4i0LzQvtC20LAg0L/RgNGL0LLQtdGB0YZpINC00LAg0LTQsNC00LDRgtC60L7QstGL0YUg0LLRi9C00LDRgtC60LDQstCw0L3QvdGP0Z4iPC9mb250PiIg0Lcg0LLQsNGI0LDQs9CwINC80LDQsWnQu9GM0L3QsNCz0LAg0Z7Qu2nQutC+0LLQsNCz0LAg0LfQsNC/adGB0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3ByZW1pdW1fc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iNTUyMzgyNjM0OTEwNTEyMzY4NyI+PGZvbnQgZmdjb2xvcj0iI2ZmZmZiMDYwIj4i0JPRjdGC0LAg0YHRgtCw0L3QtSDQv9GA0YvRh9GL0L3QsNC5INC00LDQtNCw0YLQutC+0LLQsNCz0LAg0YHQv9Cw0LPQvdCw0L3QvdGPINGB0YDQvtC00LrQsNGeINC3INCy0LDRiNCw0LPQsCDQvNCw0LFp0LvRjNC90LDQs9CwINGe0Ltp0LrQvtCy0LDQs9CwINC30LDQv2nRgdGDLiI8L2ZvbnQ+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2FsbG93IiBtc2dpZD0iNDQ1ODg3ODYzNzExMTAyMzQxMyI+ItCQ0LTQv9GA0LDQsmnRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9kZW55IiBtc2dpZD0iMjkyNzM4OTg0MDIwOTE3MDcwNiI+ItCQ0LTQvNC10L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX2Nob2ljZSIgbXNnaWQ9IjUyODk1Mzg1OTIyNzIyMTgxMzYiPiLQl9Cw0YXQsNCy0LDRhtGMINC80L7QuSDQstGL0LHQsNGAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfdW5kb19pbnN0cnVjdGlvbiIgbXNnaWQ9IjQ5NjA5NDQxMzMwNTIyODc0ODQiPiLQn9Cw0LfQvdC10Lkg0LPRjdGC0LAg0LzQvtC20L3QsCDQt9C80Y/QvWnRhtGMINGDINGA0LDQt9C00LfQtdC70LUgXCLQndCw0LvQsNC00YsgJmd0OyDQn9GA0YvQutC70LDQtNCw0L3QvWlcIiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWx3YXlzX2FsbG93IiBtc2dpZD0iMzI0MTE4MTE1NDg2OTQ5MzM2OCI+ItCX0LDRntGB0ZHQtNGLINC00LDQt9Cy0LDQu9GP0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbmV2ZXJfYWxsb3ciIG1zZ2lkPSI0NDY5OTI3NjU3NzQyNjk2NzMiPiLQndGW0LrQvtC70ZYg0L3QtSDQtNCw0LfQstCw0LvRj9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiJTSU0t0LrQsNGA0YLQsCDQstGL0LTQsNC70LXQvdCw0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF9tZXNzYWdlIiBtc2dpZD0iMjMzMzE2NDU1OTk3MDk1ODY0NSI+ItCc0LDQsdGW0LvRjNC90LDRjyDRgdC10YLQutCwINCx0YPQtNC30LUg0L3QtdC00LDRgdGC0YPQv9C90LDRjyDQtNCwINC/0LXRgNCw0LfQsNCz0YDRg9C30LrRliDQtyDQtNC30LXRjtGH0LDQuSBTSU0t0LrQsNGA0YLQsNC5LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9kb25lX2J1dHRvbiIgbXNnaWQ9IjgyNzk0OTk4OTM2OTk2Mzc3NSI+ItCT0LDRgtC+0LLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF90aXRsZSIgbXNnaWQ9IjM3MTk2NzA1MTI4ODk2NzQ2OTMiPiJTSU0t0LrQsNGA0YLQsCDQtNCw0LTQsNC30LXQvdCw0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfbWVzc2FnZSIgbXNnaWQ9IjY1OTk5NDUzMDExNDEwNTAyMTYiPiLQn9C10YDQsNC30LDQs9GA0YPQt9GW0YbQtSDQv9GA0YvQu9Cw0LTRgywg0LrQsNCxINCw0YLRgNGL0LzQsNGG0Ywg0LTQvtGB0YLRg9C/INC00LAg0LzQsNCx0ZbQu9GM0L3QsNC5INGB0LXRgtC60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX3Jlc3RhcnRfYnV0dG9uIiBtc2dpZD0iNDcyMjQwNzg0MjgxNTIzMjM0NyI+ItCf0LXRgNCw0LfQsNC/0YPRgdGG0ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODM0OTM2MjYyMzA2ODgxOTI5NSI+ItCj0YHRgtCw0LvRj9Cy0LDRhtGMINGH0LDRgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjU4Nzk0NTA2NTk0NTM3ODIyNzgiPiLQo9GB0YLQsNC70Y/QstCw0YbRjCDQtNCw0YLRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9zZXQiIG1zZ2lkPSI1Nzc3MDc1NjE0MzIxMDg3NzU4Ij4i0JfQsNC00LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV90aW1lX2RvbmUiIG1zZ2lkPSIyNTA3NjgzNzUxNzU5MzA4ODI4Ij4i0JPQsNGC0L7QstCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybXNfbmV3X3Blcm1fcHJlZml4IiBtc2dpZD0iODI1Nzc0MDcxMDc1NDMwMTQwNyI+PGZvbnQgc2l6ZT0iMTIiIGZnY29sb3I9IiNmZjMzYjVlNSI+ItCd0J7QktCQ0JU6ICI8L2ZvbnQ+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtc19kZXNjcmlwdGlvbl9hcHAiIG1zZ2lkPSI1MTM5ODM2MTQzMjkzMjk5NDE3Ij4i0J/RgNCw0LTQsNGB0YLQsNGe0LvQtdC90YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdC10LwgPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub19wZXJtaXNzaW9ucyIgbXNnaWQ9IjcyODMzNTc3MjgyMTkzMzgxMTIiPiLQlNCw0LfQstC+0LvRgyDQvdC1INC/0LDRgtGA0LDQsdGD0LXRhtGG0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtX2Nvc3RzX21vbmV5IiBtc2dpZD0iNDkwMjQ3MDMyNDE0MjE1MTExNiI+ItC30LAg0LPRjdGC0LAg0LzQvtC20LAg0YHQv9Cw0LPQsNC90Y/RhtGG0LAg0L/Qu9Cw0YLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2FjdGl2aXR5X3RpdGxlIiBtc2dpZD0iNDQ2NTA1NTE1NzIwOTY0ODY0MSI+ItCj0L1p0LLQtdGA0YHQsNC70YzQvdGLIFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L3RltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1OTAxNDU5MDQxMzk4NzUxNDk1Ij4iVVNCINC/0LDQtNC70YPRh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+ItCS0Ysg0L/QsNC00LvRg9GH0LDQvdGLINC00LAg0LrQsNC80L9cJ9GO0YLQsNGA0LAg0L/RgNCw0LcgVVNCLiDQndCw0YbRltGB0L3RltGG0LUg0L3QsCDQutC90L7Qv9C60YMg0L3RltC20Y3QuSwg0LrQsNC70ZYg0LbQsNC00LDQtdGG0LUg0LrQsNC/0ZbRgNCw0LLQsNGG0Ywg0YTQsNC50LvRiyDQtyDQutCw0LzQv1wn0Y7RgtCw0YDQsCDQvdCwIFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L3RltC6INC/0YDRi9C70LDQtNGLIEFuZHJvaWQg0ZYg0L3QsNCw0LTQstCw0YDQvtGCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiLQktGLINC/0LDQtNC60LvRjtGH0YvQu9GW0YHRjyDQtNCwINC60LDQvNC/XCfRjtGC0LDRgNCwINC/0YDQsNC3IFVTQi4g0J3QsNGG0ZbRgdC90ZbRhtC1INC90LAg0LrQvdC+0L/QutGDINC90ZbQttGN0LksINC60LDQu9GWINCy0Ysg0LbQsNC00LDQtdGG0LUg0YHQutCw0L/RltGA0LDQstCw0YbRjCDRhNCw0LnQu9GLINC3INC60LDQvNC/XCfRjtGC0LDRgNCwINC90LAgU0Qt0LrQsNGA0YLRgyDQv9GA0YvQu9Cw0LTRiyBBbmRyb2lkINGWINC90LDQsNC00LLQsNGA0L7Rgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9idXR0b25fbW91bnQiIG1zZ2lkPSIxMDUyMjU5OTMwMzY5NTA4MjM1Ij4i0KPQutC70Y7Rh9GL0YbRjCBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMDE3MDQ1MjE3MzY1NTQwNjU4Ij4i0J/QsNGe0YHRgtCw0LvQsCDQv9GA0LDQsdC70LXQvNCwINC3INCy0YvQutCw0YDRi9GB0YLQsNC90L3QtdC8IFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L1p0LrQsCDQstCwINGe0L1p0LLQtdGA0YHQsNC70YzQvdGL0LwgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQutGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4i0J/QsNGe0YHRgtCw0LvQsCDQv9GA0LDQsdC70LXQvNCwINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyBTRC3QutCw0YDRgtGLINCy0LAg0Z7QvWnQstC10YDRgdCw0LvRjNC90YvQvCBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC60YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODE3NTg5MjU1NDc1NzIxNjUyNSI+IlVTQiDQv9Cw0LTQutC70Y7Rh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTM5ODIyNzgzODI4MTgzNzYzIj4i0JTQsNC60YDQsNC90ZbRhtC10YHRjywg0LrQsNCxINC60LDQv9GW0Y/QstCw0YbRjCDRhNCw0LnQu9GLINC3INC60LDQvNC/XCfRjtGC0LDRgNCwINGGaSDQvdCwINGP0LPQvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzMzYwNTgzOTY2NjM1MTYwMTciPiLQktGL0LrQu9GO0YfRi9GG0YwgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjU2ODUyMDk4NTU1NjIzODIyIj4i0J3QsNGG0ZbRgdC90ZbRhtC1LCDQutCw0LEg0LDQtNC60LvRjtGH0YvRhtGMIFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L3RltC6LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiJVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC90ZbQuiDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDQtdGG0YbQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MjY0MDI1MjgwNzc3MjE5NTIxIj4i0J/QtdGA0Ygg0YfRi9C8INCw0LTQutC70Y7Rh9GL0YbRjCBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC90ZbQuiwg0LDQtNC60LvRjtGH0YvRhtC1KFwi0LLRi9C8adGG0LVcIikgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvdGW0Log0L/RgNGL0LvQsNC00YsgQW5kcm9pZCDQsNC0INC60LDQvNC/XCfRjtGC0LDRgNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNDM5Njk3ODI0NjA2MTMxMTQiPiLQn9C10YDRiCDRh9GL0Lwg0LDQtNC60LvRjtGH0YvRhtGMIFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L3RltC6LCDQsNC00LrQu9GO0YfRi9GG0LUoXCLQstGL0Lxp0YbQtVwiKSBTRC3QutCw0YDRgtGDINCy0LDRiNCw0Lkg0L/RgNGL0LvQsNC00YsgQW5kcm9pZCDQtyDQutCw0LzQv1wn0Y7RgtCw0YDQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiLQkNC00LrQu9GO0YfRi9GG0YwgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjE5NzAzNzQ4OTgyNjMwNjM4MzYiPiLQn9Cw0LzRi9C70LrQsCDQsNC00LrQu9GO0YfRjdC90L3RjyBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC90ZbQutCwLiDQn9C10YDQsNC60LDQvdCw0LnRhtC10YHRjywg0YjRgtC+INCy0Ysg0LDQtNC60LvRjtGH0YvQu9GWINGF0L7RgdGCIFVTQiwg0LAg0L/QvtGC0YvQvCDQv9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190aXRsZSIgbXNnaWQ9Ijk2MzAzOTAzMzQ3MDQ3ODY5NyI+ItCf0LDQtNC60LvRjtGH0YvRhtGMIFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L1p0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGV4dCIgbXNnaWQ9IjUxMDA0Mjg3NTcxMDc0Njk0NTQiPiLQmtCw0LvRliDQstGLINGe0LrQu9GO0YfRi9GG0LUgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvdGW0LosINC90LXQutCw0YLQvtGA0YvRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWLCDRj9C60ZbRjyDQstGLINCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNC10YbQtSwg0YHQv9GL0L3Rj9GG0YbQsCDRliDQvNC+0LPRg9GG0Ywg0LHRi9GG0Ywg0L3QtdC00LDRgdGC0YPQv9C90YvRjywg0L/QsNC60YPQu9GMIFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L3RltC6INC90LUg0LHRg9C00LfQtSDQsNC00LrQu9GO0YfQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2Vycm9yX3RpdGxlIiBtc2dpZD0iNzMyMzY1ODQ2OTYyNjUxNDIwNyI+ItCf0LDQvNGL0LvQutCwINC/0YDQsNGG0YsgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX29rIiBtc2dpZD0iNzM3Njk1MzE2NzAzOTg2NTcwMSI+ItCe0JoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiLQn9Cw0LTQu9GD0YfQsNC90LAg0Y/QuiDQvNC10LTRi9GPLdC/0YDRi9C70LDQtNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3B0cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxOTYwODE3MTkyMjE2MDY0ODMzIj4i0J/QsNC00LrQu9GO0YfQsNC90Ysg0Y/QuiDQutCw0LzQtdGA0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfY2RfaW5zdGFsbGVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY3NzQ3MTI4Mjc4OTIwOTA3NTQiPiLQn9Cw0LTQu9GD0YfQsNC90Ysg0Y/QuiDRg9GB0YLQsNC70Y/QstCw0LvRjNC90ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3Nvcnlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNzg0ODIzNjk3NDA4NzY1MzY2NiI+ItCf0LDQtNC60LvRjtGH0LDQvdGLINC00LAgVVNCLdC/0YDRi9C70LDQtNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+ItCd0LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINGD0LHQsNGH0YvRhtGMINGW0L3RiNGL0Y8g0L/QsNGA0LDQvNC10YLRgNGLIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iOTAyMDA5MjE5NjA2MTAwNzI2MiI+ItCk0LDRgNC80LDRgtCw0LLQsNGG0YwgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQuj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjQ4NDE1OTIxNTI2NTI2MDY5Ij4i0KTQsNGA0LzQsNGC0LDQstCw0YbRjCBTRC3QutCw0YDRgtGDPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MzQwMTY4NTM0MjU3NjEwNzgiPiLQo9GB0LUg0YTQsNC50LvRiywg0Y/QutGW0Y8g0LfQsNGF0L7RntCy0LDRjtGG0YbQsCDQvdCwINCy0LDRiNGL0LwgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvdGW0LrRgywg0LHRg9C00YPRhtGMINCy0YvQtNCw0LvQtdC90YsuINCT0Y3RgtCwINC00LfQtdGP0L3QvdC1INC90LUg0LzQvtC20LAg0LHRi9GG0Ywg0LDQtNC80LXQvdC10L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4i0KPRgdC1INC00LDQtNC30LXQvdGL0Y8g0L3QsCDQutCw0YDRhtC1INCx0YPQtNGD0YbRjCDRgdGC0YDQsNGH0LDQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9idXR0b25fZm9ybWF0IiBtc2dpZD0iNDEzMTA2NDU2MDEyNzQ3ODY5NSI+ItCk0LDRgNC80LDRgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+ItCf0YDRi9C70LDQtNCwINCw0LTQu9Cw0LTQutGWIFVTQiDQv9Cw0LTQutC70Y7Rh9Cw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxMDE2NjU0NjI3NjI2NDc2MTQyIj4i0J3QsNGG0ZbRgdC90ZbRhtC1LCDQutCw0LEg0LDQtNC60LvRjtGH0YvRhtGMINCw0LTQu9Cw0LTQutGDIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaW5wdXRfbWV0aG9kIiBtc2dpZD0iNDY1MzM4NzMzNjc5MTIyMjk3OCI+ItCS0YvQsdC10YDRi9GG0LUg0LzQtdGC0LDQtCDRg9Cy0L7QtNGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSI5MDkxNjUyMTU3NzIyNDk1MTE2Ij4i0J3QsNC70LDQtNC30ZbRhtGMINC80LXRgtCw0LTRiyDRntCy0L7QtNGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNjIwMzExMjQ3ODA5NTExNzYyNSI+ItCk0ZbQt9GW0YfQvdCw0Y8g0LrQu9Cw0LLRltGP0YLRg9GA0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoYXJkd2FyZSIgbXNnaWQ9Ijc1MTc4MjEwODY4ODg5OTAyNzgiPiLQkNC/0LDRgC4g0YHRgC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfa2V5Ym9hcmRfbGF5b3V0X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE0MDczNjcwMTcyNjMwMzA3NzMiPiLQktGL0LHRgNCw0YbRjCDRgNCw0YHQutC70LDQtNC60YMg0LrQu9Cw0LLRltGP0YLRg9GA0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfa2V5Ym9hcmRfbGF5b3V0X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ2NTkwNzcwMDQ0OTI1NzA2MyI+ItCd0LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINCy0YvQsdGA0LDRhtGMINGA0LDRgdC60LvQsNC00LrRgyDQutC70LDQstGW0Y/RgtGD0YDRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYXN0X3Njcm9sbF9hbHBoYWJldCIgbXNnaWQ9IjU0MzMyNzU0ODU0OTkwMzkxOTkiPiIg0JDQkdCS0JPQlNCV0IHQltCX0IbQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0I7QpNCl0KbQp9CoXCfQq9Cs0K3QrtCvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfbnVtZXJpY19hbHBoYWJldCIgbXNnaWQ9IjQwMzAxNzA1MjQ1OTUxMjM2MTAiPiIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FuZGlkYXRlc19zdHlsZSIgbXNnaWQ9IjQzMzM5MTMwODk2MzcwNjIyNTciPjx1PiLQutCw0L3QtNGL0LTQsNGCLiI8L3U+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDk4MTYwMDUzNTE0Njg1NjAiPiLQn9Cw0LTRgNGL0YXRgtC+0Z7QutCwIFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L1p0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDU3NjAzNDE4OTcwOTk0MDUwIj4i0J/QsNC00YDRi9GF0YLQvtGe0LrQsCBTRC3QutCw0YDRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iODI4NzMxOTg4MjkyNjczNzA1MyI+ItCf0YDQsNCy0LXRgNC60LAg0L3QsCDQvdCw0Y/RntC90LDRgdGG0Ywg0L/QsNC80YvQu9Cw0LouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiLQn9GD0YHRgtGLIFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L1p0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3ODA0Nzc4MzgyNDEyMTI5OTciPiLQn9GD0YHRgtCw0Y8gU0Qt0LrQsNGA0YLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc4NDAxMjEwNjc0MjcyNjk1MDAiPiJVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC90ZbQuiDQv9GD0YHRgtGLINCw0LHQviDQvNCw0LUg0YTQsNC50LvQsNCy0YPRjiDRgdGW0YHRgtGN0LzRgywg0Y/QutCw0Y8g0L3QtSDQv9Cw0LTRgtGA0YvQvNC70ZbQstCw0LXRhtGG0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjQxMDY1NjQxNzg2OTIzNjA0Ij4iU0Qt0LrQsNGA0YLQsCDQv9GD0YHRgtCw0Y8g0LDQsdC+INC80LDQtSDRhNCw0LnQu9Cw0LLRg9GOINGB0ZbRgdGC0Y3QvNGDLCDRj9C60LDRjyDQvdC1INC/0LDQtNGC0YDRi9C80LvRltCy0LDQtdGG0YbQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjIwOTAwNDY3Njk1MzI3MTM1NjMiPiLQn9Cw0YjQutC+0LTQttCw0L3RiyBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY0MTA3MjM5MDYwMTkxMDAxODkiPiJTRC3QutCw0YDRgtCwINC/0LDRiNC60L7QtNC20LDQvdCw0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTc5NTkxNzU3ODM5NTMzMzI4MCI+IlVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L3RltC6INC/0LDRiNC60L7QtNC20LDQvdGLLiDQn9Cw0YHQv9GA0LDQsdGD0LnRhtC1INCw0LTRhNCw0YDQvNCw0YLQsNCy0LDRhtGMINGP0LPQvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNzUzODk4NTY3NTI1NTY4MjUzIj4iU0Qt0LrQsNGA0YLQsCDQv9Cw0YjQutC+0LTQttCw0L3QsC4g0J/QsNGB0L/RgNCw0LHRg9C50YbQtSDQsNC00YTQsNGA0LzQsNGC0LDQstCw0YbRjCDRj9C1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNjYxNjgzMDMxMzMwOTUxMDczIj4iVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvWnQuiDQvdC10YfQsNC60LDQvdCwINCx0YvRniDQstGL0LTQsNC70LXQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+IlNELdC60LDRgNGC0LAg0LHRi9C70LAg0L3QtdGH0LDQutCw0L3QsCDQstGL0LTQsNC70LXQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDMyOTg0ODgxOTg2NTU5NDI0MSI+ItCQ0LTQutC70Y7Rh9GL0YbQtSBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC6LCDQv9C10YDRiCDRh9GL0Lwg0LLRi9GG0Y/Qs9Cy0LDRhtGMINGP0LPQviwg0LrQsNCxINC/0LDQt9Cx0LXQs9C90YPRhtGMINGB0YLRgNCw0YLRiyDQtNCw0LTQt9C10L3Ri9GFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+ItCa0LDQsSDQv9Cw0LfQsdC10LPQvdGD0YbRjCDRgdGC0YDQsNGC0Ysg0LTQsNC00LfQtdC90YvRhSwg0LDQtNC60LvRjtGH0YvRhtC1IFNELdC60LDRgNGC0YMsINC/0LXRgNGIINGH0YvQvCDQstGL0LzQsNGG0Ywg0Y/QtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTY3OTczODkzMjcwMzYwMjMwIj4iVVNCLdC90LDQt9Cw0L8uINC80L7QttC90LAg0LHRj9GB0L8uINCy0YvRhtGP0LPQvdGD0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjcyOTgwMTEzMDc5MDYxNjIwMCI+ItCc0L7QttC90LAg0LHRj9GB0L/QtdGH0L3QsCDQstGL0LTQsNC70ZbRhtGMIFNELdC60LDRgNGC0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNDIxOTUzNjE2MDY0OTM1MzAiPiLQktGLINC80L7QttCw0YbQtSDQsdGP0YHQv9C10YfQvdCwINCy0YvQtNCw0Ltp0YbRjCBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC6LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Njg4NDEyNzgxMzgzNzc2MDQiPiLQktGLINC80L7QttCw0YbQtSDQsdGP0YHQv9C10YfQvdCwINCy0YvQtNCw0LvRltGG0YwgU0Qt0LrQsNGA0YLRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDQ4NjM3NzIzMDE0MDIyNzY1MSI+IlVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L1p0Log0LLRi9C00LDQu9C10L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MDI1MTgwMzA0MDQzODEzMTgiPiJTRC3QutCw0YDRgtCwINCy0YvQtNCw0LvQtdC90LDRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjY5MjExMjYxNjI1ODA1NzQxNDMiPiJVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC6INCy0YvQtNCw0LvQtdC90YsuINCj0YHRgtCw0LLRltGG0Ywg0L3QvtCy0YvRjyDQvdC+0YHRjNCx0ZbRgtGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzg3MDEyMDY1Mjk4MzY1OTY0MSI+IlNELdC60LDRgNGC0LAg0LLRi9C00LDQu9C10L3QsNGPLiDQo9GB0YLQsNGe0YbQtSDQvdC+0LLRg9GOLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2xpc3RfZW1wdHkiIG1zZ2lkPSIxNjc1Mzg4MzMwNzg2ODQxMDY2Ij4i0JDQtNC/0LDQstC10LTQvdGL0Y8g0LTQt9C10Y/QvdC90ZYg0L3QtSDQt9C90L7QudC00LfQtdC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wa2dVc2FnZVN0YXRzIiBtc2dpZD0iODc4NzM1MjA3NDMyNjc0ODg5MiI+ItCw0LHQvdCw0LLRltGG0Ywg0YHRgtCw0YLRi9GB0YLRi9C60YMg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC60LDQvNC/0LDQvdC10L3RgtCw0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wa2dVc2FnZVN0YXRzIiBtc2dpZD0iMTEwNjYxMjQyNDI1NDI3NzYzMCI+ItCU0LDQt9Cy0LDQu9GP0LUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8INC30LzRj9C90Y/RhtGMINGB0LDQsdGA0LDQvdGD0Y4g0YHRgtCw0YLRi9GB0YLRi9C60YMg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINC60LDQvNC/0LDQvdC10L3RgtCw0Z4uINCd0LUg0LTQu9GPINCy0YvQutCw0YDRi9GB0YLQsNC90L3RjyDQt9Cy0YvRh9Cw0LnQvdGL0LzRliDQv9GA0YvQutC70LDQtNCw0L3QvdGP0LzRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM0MTAzNjMxMTIxMTQwNjY5MiI+ItC60LDQv9GW0Y/QstCw0YbRjCDQt9C80LXRgdGG0ZbQstCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzkwNjk3MTI0Mjg4MzE3ODMxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LLRi9C60LvRltC60LDRhtGMINGB0LvRg9C20LHRgyDQt9Cw0YXQsNCy0LDQvdC90Y8g0L/QsCDQt9C80LDRntGH0LDQvdC90ZYg0LTQu9GPINC60LDQv9GW0Y/QstCw0L3QvdGPINC30LzQtdGB0YbRltCy0LAuINCd0LUg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0LXRhtGG0LAg0LfQstGL0YfQsNC50L3Ri9C80ZYg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C80ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSIxNjQyMDI0NDU1NzUwNDE0Njk0Ij4i0JzQsNGA0YjRgNGD0YLQvdGLINC80YPQu9GM0YLRi9C80LXQtNGL0LnQvdGLINCy0YvRhdCw0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSI0OTMyODE4NzQ5NTQ3MjQ0MzQ2Ij4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGP0Lwg0LzQsNGA0YjRgNGD0YLRi9C30LDQstCw0YbRjCDQvNGD0LvRjNGC0YvQvNC10LTRi9C50L3RiyDQstGL0YXQsNC0INC90LAgadC90YjRi9GPINC30L3QtdGI0L1p0Y8g0L/RgNGL0LvQsNC00YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI3NTY1NTUyMjM3OTc3ODE1MDQ3Ij4i0JTQvtGB0YLRg9C/INC00LAg0LHQu9Cw0LrRltGA0L7RntC60ZYg0LrQu9Cw0LLRltGP0YLRg9GA0Ysg0LHRj9GB0L/QtdGH0L3QsNCz0LAg0YHRhdC+0LLRltGI0YfQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9IjU4NjYyNDU0ODQzMDMyODU3NjIiPiLQlNCw0LfQstCw0LvRj9C1INC/0YDRi9C60LvQsNC00LDQvdC90Y4g0LDRgtGA0YvQvNC70ZbQstCw0YbRjCDQtNC+0YHRgtGD0L8g0LTQsCDQsdC70LDQutGW0YDQvtGe0LrRliDQutC70LDQstGW0Y/RgtGD0YDRiyDQsdGP0YHQv9C10YfQvdCw0LPQsCDRgdGF0L7QstGW0YjRh9CwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjE3MjE5NTE4NDIwNzgyODM4NyI+ItCaadGA0LDQstCw0L3QvdC1INCw0LTQu9GO0YHRgtGA0LDQstCw0L3QvdC10Lwg0ZYg0YHRhdCw0LLQsNC90L3QtdC8INCx0LvQsNC6adGA0L7RntC6aSDQutC70LDQstGW0Y/RgtGD0YDRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIzMDQzNzMyMjkwNTE4NjI5MDYxIj4i0JTQsNC30LLQsNC70Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdGOINC6adGA0LDQstCw0YbRjCDQsdC70LDQumnRgNC+0Z7QutCw0Lkg0LrQu9Cw0LJp0Y/RgtGD0YDRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiLQlNCy0L7QudGH0Ysg0LTQsNC60YDQsNC90ZbRhtC10YHRjywg0LrQsNCxINC30LzRj9C9adGG0Ywg0LzQsNGI0YLQsNCxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2FkZ2V0X2hvc3RfZXJyb3JfaW5mbGF0aW5nIiBtc2dpZD0iNDg4MjAwNDMxNDkwNjQ2NjE2MiI+ItCd0LXQvNCw0LPRh9GL0LzQsCDQtNCw0LTQsNGG0Ywg0LLRltC00LbRjdGCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZ28iIG1zZ2lkPSI4MzIwODQ1NjUxNzM3MzY5MDI3Ij4i0J/QsNGH0LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9zZWFyY2giIG1zZ2lkPSI2NTgxMTAyNzE4MjI4MDc4MTEiPiLQn9C+0YjRg9C6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9zZW5kIiBtc2dpZD0iMjMxNjE2NjU1NjM0OTMxNDQyNCI+ItCQ0LTQv9GA0LDQstGW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fbmV4dCIgbXNnaWQ9IjMxMzg4NDM5MDQwMDk4MTM4MzQiPiLQlNCw0LvQtdC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kb25lIiBtc2dpZD0iODk3MTUxNjExNzkxMDkzNDYwNSI+ItCT0LDRgtC+0LLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fcHJldmlvdXMiIG1zZ2lkPSIxNDQzNTUwMDM5MjUwMTA1OTQ4Ij4i0J3QsNC30LDQtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZGVmYXVsdCIgbXNnaWQ9IjI4NDA5MjE4ODU1NTgwNDU3MjEiPiLQktGL0LrQsNC90LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlhbF9udW1iZXJfdXNpbmciIG1zZ2lkPSI1Nzg5MTc2NDI1MTY3NTczNTg2Ij4i0J3QsNCx0YDQsNGG0Ywg0L3Rg9C80LDRgFxu0Lcg0LLRi9C60LDRgNGL0YHRgtCw0L3QvdC10LwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2NvbnRhY3RfdXNpbmciIG1zZ2lkPSI0OTQ3NDA1MjI2Nzg4MTA0NTM4Ij4i0KHRgtCy0LDRgNGL0YbRjCDQutCw0L3RgtCw0LrRglxu0Lcg0LTQsNC/0LDQvNC+0LPQsNC5PHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2hlYWRlciIgbXNnaWQ9IjIxMDYxMDM4MTc5Mzc4NTk2NjIiPiLQk9GN0YLRi9GPINCw0LTQvdC+INCw0LHQviDQvdC10LrQsNC70YzQutGWINC/0YDRi9C60LvQsNC00LDQvdC90Y/RniDQt9Cw0L/Ri9GC0LLQsNGO0YbRjCDQtNCw0LfQstC+0Lsg0L3QsCDQtNC+0YHRgtGD0L8g0LTQsCDQstCw0YjQsNCz0LAg0Z7Qu9GW0LrQvtCy0LDQs9CwINC30LDQv9GW0YHRgyDRhtGP0L/QtdGAINGWINGeINCx0YPQtNGD0YfRi9C90ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2Zvb3RlciIgbXNnaWQ9IjMxMjUyMTEzNDMzNzkzNzY1NjEiPiLQlNCw0LfQstC+0LvRltGG0Ywg0LPRjdGC0Ysg0LfQsNC/0YvRgj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncmFudF9wZXJtaXNzaW9uc19oZWFkZXJfdGV4dCIgbXNnaWQ9IjY4NzQ0OTc0MDgyMDE4MjY3MDgiPiLQl9Cw0L/Ri9GCINC90LAg0LTQvtGB0YLRg9C/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWxsb3ciIG1zZ2lkPSI3MjI1OTQ4ODExMjk2Mzg2NTUxIj4i0JTQsNC30LLQvtC70ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVueSIgbXNnaWQ9IjIwODE4Nzk4ODU3NTU0MzQ1MDYiPiLQl9Cw0LHQsNGA0LDQvdGW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1pc3Npb25fcmVxdWVzdF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NDg2NzU5Nzk1OTI2MjM3OTA3Ij4i0JTQsNC30LLQvtC7INC30LDQv9GL0YLQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIG1zZ2lkPSI4NTMwMzkzMTM5NjM5NTYwMTg5Ij4i0JfQsNC/0YvRgtCw0L3RiyDQtNCw0LfQstC+0LtcbtC00LvRjyDRntC70ZbQutC+0LLQsNCz0LAg0LfQsNC/0ZbRgdGDIDx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnB1dF9tZXRob2RfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyODM1NTcxNzk5NDQ5OTI2NDkiPiLQnNC10YLQsNC0INGD0LLQvtC00YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIzNjg3OTY5MTM4Mzc1MDkyNDIzIj4i0KHRltC90YXRgNCw0L3RltC30LDRhtGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI0MTQ4MTIwNzQyMDk2NDc0NjQxIj4i0KHQv9C10YbRi9GP0LvRjNC90YvRjyDQvNCw0LPRh9GL0LzQsNGB0YbRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndhbGxwYXBlcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTI0MDA4Nzg0NDMwNDY4NzY2MiI+ItCo0L/QsNC70LXRgNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i0JfQvNC10L3QsCDRiNC/0LDQu9C10YAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLQodC70YPRhdCw0Ycg0LDQv9Cw0LLRj9GI0YfRjdC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOINCw0LrRgtGL0LLQsNCy0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOINCw0LrRgtGL0LLRg9C10YbRhtCwINC/0YDRi9C60LvQsNC00LDQvdC90LXQvCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLQlNCw0LrRgNCw0L3RltGG0LXRgdGPLCDQutCw0LEg0LrRltGA0LDQstCw0YbRjCDRgdC10YLQutCw0LkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHRfbG9uZyIgbXNnaWQ9IjY0MDczNTEwMDYyNDkxNzQ0NzMiPiLQn9Cw0LTQu9GD0YfQsNC90Ysg0LTQsCDRgdC10LDQvdGB0LAgXCI8eGxpZmY6ZyBpZD0iU0VTU0lPTiI+JXM8L3hsaWZmOmc+XCIuINCU0LDQutGA0LDQvdGW0YbQtdGB0Y8sINC60LDQsSDQumnRgNCw0LLQsNGG0Ywg0YHQtdGC0LrQsNC5LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0aW5nIiBtc2dpZD0iNjQ0MzQzODk2NDQ0MDk2MDc0NSI+ItCf0LDQtNC60LvRjtGH0Y3QvdC90LUg0LfQsNGe0YHRkdC00Ysg0Z7QutC70Y7Rh9Cw0L3QsNCz0LAgVlBOLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiLQl9Cw0Z7RgdGR0LTRiyDRntC60LvRjtGH0LDQvdGLIGkg0L/QsNC00LrQu9GO0YfQsNC90YsgVlBOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Vycm9yIiBtc2dpZD0iNjAwOTI0OTgxNDAzNDcwODE3NSI+ItCf0LDQvNGL0LvQutCwINC30LDRntGB0ZHQtNGLINGe0LrQu9GO0YfQsNC90LDQs9CwIFZQTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25maWciIG1zZ2lkPSI2NDE1ODk5MTUwNjcxNTM3OTcwIj4i0J3QsNGG0ZbRgdC90ZbRhtC1LCDQutCw0LEg0LfQvNGP0L3RltGG0Ywg0L3QsNC70LDQtNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXBsb2FkX2ZpbGUiIG1zZ2lkPSIyODk3OTU3MTcyMzY2NzMwNDE2Ij4i0JLRi9Cx0LXRgNGL0YbQtSDRhNCw0LnQuyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vX2ZpbGVfY2hvc2VuIiBtc2dpZD0iNjM2MzY0ODU2MjE3MDc1OTQ2NSI+ItCk0LDQudC7INC90LUg0LLRi9Cx0YDQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXNldCIgbXNnaWQ9IjI0NDgxNjgwODA5NjQyMDk5MDgiPiLQodC60ZbQvdGD0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN1Ym1pdCIgbXNnaWQ9IjE2MDIzMzU1NzIwODk5MTE5NDEiPiLQn9C10YDQsNC00LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FyX21vZGVfZGlzYWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzMTY0NzY4MjEyMDAzODY0MzE2Ij4i0KDRjdC20YvQvCBcItCjINC80LDRiNGL0L3QtVwiINGe0LrQu9GO0YfQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXJfbW9kZV9kaXNhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iODAzNTIzMDUzNzU2MzUwMzI2MiI+ItCU0LDQutGA0LDQvdGW0YbQtdGB0Y8sINC60LDQsSDQstGL0LnRgdGG0ZYg0Lcg0YDRjdC20YvQvNGDIFwi0KjRgtGD0YDQvNCw0L1cIi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzMTQ2Njk0MjM0Mzk4MjAyNjAxIj4iVVNCLdC80LDQtNGN0Lwg0LDQsdC+INC60YDQvtC/0LrQsCDQtNC+0YHRgtGD0L/RgyBXaS1GaSDQsNC60YLRi9Ge0L3Ri9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI2ODU3MDMxNzYwMTAzMDYyOTgyIj4i0J3QsNGG0ZbRgdC90ZbRhtC1LCDQutCw0LEg0L3QsNC70LDQtNC30ZbRhtGMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhY2tfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjMwMDQ3MDAwNDUwMzM0MzQzOSI+ItCd0LDQt9Cw0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZXh0X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEwODA1NTUxMDQ2Nzc5OTI0MDgiPiLQlNCw0LvQtdC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2tpcF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMjc1MzYyMjk5NDcxNjMxODE5Ij4i0J/RgNCw0L/Rg9GB0YbRltGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ4OTA4OTQyNjc0NTQ4NjcyNzYiPiLQhtC90YLRjdC90YHRltGe0L3QsNC1INCy0YvQutCw0YDRi9GB0YLQsNC90L3QtSDQv9C10YDQsNC00LDRh9GLINC00LDQtNC30LXQvdGL0YUg0L/RgNCw0Lcg0LzQsNCx0ZbQu9GM0L3Rg9GOINGB0LXRgtC60YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMzM0MDgyMjIyODU5OTMzNzc0MyI+ItCd0LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINCw0YLRgNGL0LzQsNGG0Ywg0LTQsNC00LDRgtC60L7QstGL0Y8g0LfQstC10YHRgtC60ZYg0LDQsSDQstGL0LrQsNGA0YvRgdGC0LDQvdC90ZYg0LzQsNCxadC70YzQvdCw0Lkg0L/QtdGA0LDQtNCw0YfRiyDQtNCw0LTQt9C10L3Ri9GFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2MjY5NTQxODk3NzI5NzgxMzMyIj4i0JvRltC80ZbRgiDQvNCw0LHRltC70YzQvdCw0Lkg0L/QtdGA0LDQtNCw0YfRiyDQtNCw0LTQt9C10L3Ri9GFINC/0LXRgNCw0LLRi9GI0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNTQ0MzQ1NzMyMTM1NDkwNzE4MSI+ItCd0LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINCw0YLRgNGL0LzQsNGG0Ywg0LTQsNC00LDRgtC60L7QstGL0Y8g0LfQstC10YHRgtC60ZYg0LDQsSDQstGL0LrQsNGA0YvRgdGC0LDQvdC90ZYg0LzQsNCxadC70YzQvdCw0Lkg0L/QtdGA0LDQtNCw0YfRiyDQtNCw0LTQt9C10L3Ri9GFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vX21hdGNoZXMiIG1zZ2lkPSI4MTI5NDIxOTA4OTE1ODQwNzM3Ij4i0J3Rj9C80LAg0YHRg9C/0LDQtNC30LXQvdC90Y/RniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmRfb25fcGFnZSIgbXNnaWQ9IjE5NDY3OTkyMzM4MjI4MjAzODQiPiLQl9C90LDQudGB0YbRliDQvdCwINGB0YLQsNGA0L7QvdGG0YsiPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9Im1hdGNoZXNfZm91bmQiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTY3MTQ3MDgxMTM2NTc5NDM5Ij4iMSDRgdGD0L/QsNC00LfQtdC90L3QtSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDY0MTg3Mjc5NzA2NzYwOTE3NyI+Ijx4bGlmZjpnIGlkPSJJTkRFWCI+JWQ8L3hsaWZmOmc+INC3IDx4bGlmZjpnIGlkPSJUT1RBTCI+JWQ8L3hsaWZmOmc+IjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21vZGVfZG9uZSIgbXNnaWQ9IjcyMTc1ODE2NDA0NjE5MjIyODkiPiLQk9Cw0YLQvtCy0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MjM4MTA0NDg1MDc2MTI3NDYiPiLQkNC00LrQu9GO0YfRjdC90L3QtSBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC60LAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMyNzg5NDk5ODQwOTUzNzE5MCI+ItCQ0LTQutC70Y7Rh9GN0L3QvdC1IFNELdC60LDRgNGC0YsuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiLQktGL0LTQsNC70LXQvdC90LUg0LTQsNC00LfQtdC90YvRhSDQtyBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC60LAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjU5Njk4ODg3NTUwNzA0MzA0MiI+ItCS0YvQtNCw0LvQtdC90L3QtSDQtNCw0LTQt9C10L3Ri9GFINC3IFNELdC60LDRgNGC0YsuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZXJyb3IiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjI5OTc2OTU2MzYyNDc3Njk0OCI+ItCd0LXQvNCw0LPRh9GL0LzQsCDQsNGH0YvRgdGGadGG0YwgVVNCLdC90LDQt9Cw0L/QsNGI0LLQsNC70YzQvdGW0LouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+ItCd0LXQvNCw0LPRh9GL0LzQsCDQsNGH0YvRgdGGadGG0YwgU0Qt0LrQsNGA0YLRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9iYWRfcmVtb3ZhbCIgbXNnaWQ9Ijc5NjA4NjQwNjEwMTY2MDMyODEiPiJTRC3QutCw0YDRgtCwINCx0YvQu9CwINCy0YvQvdGD0YLQsNGPINC00LAg0LDQtNC60LvRjtGH0Y3QvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MTgxODg3MjAwMDk1Njk2OTMiPiLQl9Cw0YDQsNC3IFVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L1p0Log0L/RgNCw0LLRj9GA0LDQtdGG0YbQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMzQ3NjI1MDM5MDQ4Mjc0ODEiPiLQl9Cw0YDQsNC3IFNELdC60LDRgNGC0LAg0L/RgNCw0LLRj9GA0LDQtdGG0YbQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yZW1vdmVkIiBtc2dpZD0iNzAwMTUyNjkwNTA1Nzk1MjA5NyI+IlNELdC60LDRgNGC0LAg0LHRi9C70LAg0LLRi9C00LDQu9C10L3QsNGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI1ODMwODE0MzQ5MjUwODM0MjI1Ij4i0JfQsNGA0LDQtyBVU0It0L3QsNC30LDQv9Cw0YjQstCw0LvRjNC9adC6INCy0YvQutCw0YDRi9GB0YLQvtGe0LLQsNC10YbRhtCwINC60LDQvNC/0YPRgtCw0YDQsNC8LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MDYxMzA1NjgxMzM1NDA0MzUiPiLQl9Cw0YDQsNC3IFNELdC60LDRgNGC0LAg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0LXRhtGG0LAg0LrQsNC80L/Rg9GC0LDRgNCw0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfdW5rbm93bl9zdGF0ZSIgbXNnaWQ9IjcyOTE5Mjc4MjE5NzI5MDM4NSI+ItCX0L3QtdGI0L3RltGPINC90L7RgdGM0LHRltGC0Ysg0Z4g0L3QtdCy0Y/QtNC+0LzRi9C8INGB0YLQsNC90LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhcmUiIG1zZ2lkPSIxNzc4Njg2NjE4MjMwMDExOTY0Ij4i0JDQtNC60YDRi9GG0Ywg0LTQvtGB0YLRg9C/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmluZCIgbXNnaWQ9IjQ4MDgyNzA5MDAzMjI5ODU5NjAiPiLQn9C+0YjRg9C6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2Vic2VhcmNoIiBtc2dpZD0iNDMzNzE1Nzk3NzQwMDIxMTU4OSI+ItCS0Y3QsS3Qv9C+0YjRg9C6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmluZF9uZXh0IiBtc2dpZD0iNTc0MjEyNDYxODk0MjE5Mzk3OCI+ItCX0L3QsNC50YHRhtGWINC9adC20Y3QuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmRfcHJldmlvdXMiIG1zZ2lkPSIyMTk2NzIzNjY5Mzg4MzYwNTA2Ij4i0JfQvdCw0LnRgdGG0ZYg0LLRi9GI0Y3QuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGlja2VyIiBtc2dpZD0iNTYyMjY4MzkxMjYxNjQ5NjE3MiI+ItCX0LDQv9GL0YIg0L/RgNCwINC80LXRgdGG0LDQt9C90LDRhdC+0LTQttCw0L3QvdC1INCw0LQg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAgPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGl0bGUiIG1zZ2lkPSI1NDQ2ODU4NzE3MTU3NDE2ODM5Ij4i0JfQsNC/0YvRgiDQvNC10YHRhtCw0LfQvdCw0YXQvtC00LbQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmTWVzc2FnZSIgbXNnaWQ9IjEzNzQ3MTgwMjMyMjQwMDA3MDIiPiLQl9Cw0L/Ri9GCINCw0LQg0LrQsNGA0YvRgdGC0LDQu9GM0L1p0LrQsCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4gKDx4bGlmZjpnIGlkPSJTRVJWSUNFIj4lMiRzPC94bGlmZjpnPikiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNWZXJpZlllcyIgbXNnaWQ9IjIzNDY1NjYwNzI4NjcyMTM1NjMiPiLQotCw0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNWZXJpZk5vIiBtc2dpZD0iMTE0NjU2NDkzNzM0NjQ1NDg2NSI+ItCd0LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXMiIG1zZ2lkPSI1Mjk2MzIxODUwNjYyNzQ2ODkwIj4i0JLRi9C00LDQu9GW0YbRjCDQv9C10YDQsNCy0YvRiNCw0L3RiyDQu9GW0LzRltGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3luY190b29fbWFueV9kZWxldGVzX2Rlc2MiIG1zZ2lkPSI0OTY1NTE2NzEwMDg2OTQyNDUiPiLQktGL0LTQsNC70LXQvdCwINGN0LvQtdC80LXQvdGC0LDRniDQtNC70Y8g0YLRi9C/0YMg0YHRltC90YXRgNCw0L1p0LfQsNGG0YtpIFwiPHhsaWZmOmcgaWQ9IlRZUEVfT0ZfU1lOQyI+JTIkczwveGxpZmY6Zz5cIjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl9PRl9ERUxFVEVEX0lURU1TIj4lMSRkPC94bGlmZjpnPi4g0KPQu9GW0LrQvtCy0Ysg0LfQsNC/0ZbRgSA8eGxpZmY6ZyBpZD0iQUNDT1VOVF9OQU1FIj4lMyRzPC94bGlmZjpnPi4g0KjRgtC+INCy0Ysg0LbQsNC00LDQtdGG0LUg0LfRgNCw0LHRltGG0Yw/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3luY19yZWFsbHlfZGVsZXRlIiBtc2dpZD0iMjU3MjYwMDEwMzEyMjU5NjI0MyI+ItCS0YvQtNCw0LvRltGG0Ywg0Y3Qu9C10LzQtdC90YLRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX3VuZG9fZGVsZXRlcyIgbXNnaWQ9IjI5NDEzMTczNjA2MDAzMzg2MDIiPiLQodC60LDRgdCw0LLQsNGG0Ywg0LLRi9C00LDQu9C10L3QvdGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3luY19kb19ub3RoaW5nIiBtc2dpZD0iMzc0Mzc2NDc0MDQzMDgyMTg0NSI+ItCd0ZbRh9C+0LPQsCDQt9Cw0YDQsNC3INC90LUg0YDQsNCx0ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX2FjY291bnRfbGFiZWwiIG1zZ2lkPSI1NjU1MjAzMDg5NzQ2NDIzOTI3Ij4i0JLRi9Cx0LXRgNGL0YbQtSDRntC70ZbQutC+0LLRiyDQt9Cw0L/RltGBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRkX2FjY291bnRfbGFiZWwiIG1zZ2lkPSIyOTM1MjY3MzQ0ODQ5OTkzNTUzIj4i0JTQsNC00LDRhtGMINGD0LvRltC60L7QstGLINC30LDQv9GW0YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZGRfYWNjb3VudF9idXR0b25fbGFiZWwiIG1zZ2lkPSIzNjExOTgyODk0ODUzNDM1ODc0Ij4i0JTQsNC00LDRhtGMINGD0LvRltC60L7QstGLINC30LDQv9GW0YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9idXR0b24iIG1zZ2lkPSIyNDEyMDcyMjcyODMyMjg0MzEzIj4i0J/QsNCy0Y/Qu9GW0YfRi9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2RlY3JlbWVudF9idXR0b24iIG1zZ2lkPSI0NzYwNTA3NzgzODY3NzkwNjciPiLQn9Cw0LzQtdC90YjRi9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfbW9kZSIgbXNnaWQ9IjMwNzMxMDEwNjc0NDE2Mzg0MjgiPiLQndCw0YbRltGB0L3RltGG0LUg0ZYg0Z7RgtGA0YvQvNC70ZbQstCw0LnRhtC1IDx4bGlmZjpnIGlkPSJWQUxVRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9hY3Rpb24iIG1zZ2lkPSI5MTAxNDczMDQ1ODkxODM1NDkwIj4i0J/RgNCw0LLRj9C00LfRltGG0LUg0L/QsNC70YzRhtCw0Lwg0YPQstC10YDRhSwg0LrQsNCxINC/0LDQstGP0LvRltGH0YvRhtGMLCDQsNCx0L4g0Z7QvdGW0LcsINC60LDQsSDQv9Cw0LzQtdC90YjRi9GG0YwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X21pbnV0ZV9idXR0b24iIG1zZ2lkPSI4ODY1ODg1MTE0MDI4NjE0MzIxIj4i0J/QsNCy0Y/Qu9GW0YfRi9GG0Ywg0LvRltGH0LHRgyDRhdCy0ZbQu9GW0L0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X21pbnV0ZV9idXR0b24iIG1zZ2lkPSI2MjQ2ODM0OTM3MDgwNjg0NzkxIj4i0J/QsNC80LXQvdGI0YvRhtGMINC70ZbRh9Cx0YMg0YXQstGW0LvRltC9LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjM2NTIwNTYwNTU4MTAyMjMxMzkiPiLQn9Cw0LLRj9C70ZbRh9GL0YbRjCDQu9GW0YfQsdGDINCz0LDQtNC30ZbQvS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIxMzc3NDc5ODYzNDI5MjE0NzkyIj4i0J/QsNC80LXQvdGI0YvRhtGMINC70ZbRh9Cx0YMg0LPQsNC00LfRltC9LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9zZXRfcG1fYnV0dG9uIiBtc2dpZD0iNDE0NzU5MDY5NjE1MTIzMDg2MyI+ItCj0YHRgtCw0LvRj9Cy0LDRhtGMINGH0LDRgSDQv9Cw0YHQu9GPINC/0LDRntC00L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9zZXRfYW1fYnV0dG9uIiBtc2dpZD0iODMwMjE0MDM1MzUzOTQ4Njc1MiI+ItCj0YHRgtCw0LvRj9Cy0LDRhtGMINGH0LDRgSDQtNCwINC/0LDRntC00L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9tb250aF9idXR0b24iIG1zZ2lkPSI1MzY5OTk4NDc5MDY3OTM0MTEwIj4i0J/QsNCy0Y/Qu9GW0YfRi9GG0Ywg0LvRltGH0LHRgyDQvNC10YHRj9GG0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iMTgzMjY5ODk5NTU0MTcyNjAxOSI+ItCf0LDQvNC10L3RiNGL0YbRjCDQu9GW0YfQsdGDINC80LXRgdGP0YbQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNzEzMDQ2NTQxMjMwODE3MzkwMyI+ItCf0LDQstGP0LvRltGH0YvRhtGMINC70ZbRh9Cx0YMg0LTQvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI0MTMxODgxNTIxODE4NzUwMDMxIj4i0J/QsNC80LXQvdGI0YvRhtGMINC70ZbRh9Cx0YMg0LTQvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfaW5jcmVtZW50X3llYXJfYnV0dG9uIiBtc2dpZD0iNjMxODY5NzM4NDMxMDgwODg5OSI+ItCf0LDQstGP0LvRltGH0YvRhtGMINC70ZbRh9Cx0YMg0LPQvtC00LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfeWVhcl9idXR0b24iIG1zZ2lkPSI0NDgyMDIxODEzNDkxMTIxNzE3Ij4i0J/QsNC80LXQvdGI0YvRhtGMINC70ZbRh9Cx0YMg0LPQvtC00LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+ItCQ0LTQvNC10L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiLQktGL0LTQsNC70ZbRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLQk9Cw0YLQvtCy0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLQl9C80LXQvdCwINGA0Y3QttGL0LzRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLQktGL0LHQtdGA0YvRhtC1INC/0YDRi9C60LvQsNC00LDQvdC90LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLQkNC/0YPQsdC70ZbQutCw0LLQsNGG0Ywg0Lcg0LTQsNC/0LDQvNC+0LPQsNC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+ItCQ0LTQv9GA0LDQsmnRhtGMINC3INC00LDQv9Cw0LzQvtCz0LDQuSDQv9GA0YvQutC70LDQtNCw0L3QvdGPIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i0KDRg9GH0LrQsCDQtNC70Y8g0L/QtdGA0LDRgdC+0Z7QstCw0L3QvdGPLiDQndCw0YbRltGB0L3RltGG0LUg0ZYg0Z7RgtGA0YvQvNC70ZbQstCw0LnRhtC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLQn9GA0LDQstGP0LTQt9GW0YbQtSDQv9Cw0LvRjNGG0LDQvCDRg9Cy0LXRgNGFLCDQutCw0LEg0LDRgtGA0YvQvNCw0YbRjCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i0J/RgNCw0LLRj9C00LfRltGG0LUg0L/QsNC70YzRhtCw0Lwg0YPQvdGW0LcsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLQn9GA0LDQstGP0LTQt9GW0YbQtSDQv9Cw0LvRjNGG0LDQvCDRg9C70LXQstCwLCDQutCw0LEg0LDRgtGA0YvQvNCw0YbRjCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+ItCf0YDQsNCy0Y/QtNC30ZbRhtC1INC/0LDQu9GM0YbQsNC8INGD0L/RgNCw0LLQsCwg0LrQsNCxINCw0YLRgNGL0LzQsNGG0YwgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i0KDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+ItCa0LDQvNC10YDQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLQptGW0YXRliDRgNGN0LbRi9C8Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+ItCT0YPQuiDRg9C60LvRjtGH0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLQn9C+0YjRg9C6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4i0J/RgNCw0LPQsNGA0YLQsNC50YbQtSwg0LrQsNCxINGA0LDQt9Cx0LvQsNC60LDQstCw0YbRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4i0JrQsNCxINC/0YDQsNGB0LvRg9GF0LDRhtGMINC/0LDRgNC+0LtpLCDQv9Cw0LTQutC70Y7Rh9GL0YbQtSDQs9Cw0YDQvWnRgtGD0YDRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLQmtGA0L7Qv9C60LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTI5MzYwMDQ5NjYwMTQ5MDIxNiI+ItCf0LXRgNCw0LnRgdGG0ZYg0LTQsCDQv9Cw0YfQsNGC0LrQvtCy0LDQuSDRgdGC0LDRgNC+0L3QutGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl91cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyMzc0OTY1NjI5NTIxNTI1ODkiPiLQn9C10YDQsNC50YHRhtGWINGe0LLQtdGA0YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbWVudV9vdmVyZmxvd19kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyOTU2NTkwMzc1MDkwMDg0NTMiPiLQkdC+0LvRjNGIINC90LDQu9Cw0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNzk2NTk4NDM2MDkwMzY5MzkwMyI+IiUxJHMsICUyJHMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfc3VidGl0bGVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNjk4NTU0NjUzMDQ3MTc4MDcyNyI+IiUxJHMsICUyJHMsICUzJHMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX2ludGVybmFsIiBtc2dpZD0iNDg5MTkxNjgzMzY1NzkyOTI2MyI+ItCj0L3Rg9GC0YDQsNC90LDRjyDQv9Cw0LzRj9GG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3NkX2NhcmQiIG1zZ2lkPSIzMjgyOTQ4ODYxMzc4Mjg2NzQ1Ij4iU0Qt0LrQsNGA0YLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiIiBtc2dpZD0iMzAxNzk1NDA1OTUzODUxNzI3OCI+IlVTQi3QvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L3RltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0cmFjdF9lZGl0X21lbnVfYnV0dG9uIiBtc2dpZD0iODk0MDQ3ODczMDQ5NjYxMDEzNyI+ItCg0Y3QtNCw0LPQsNCy0LDRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTk1NTYzODg2MjEyMjIzMjM0MiI+ItCf0LDQv9GP0YDRjdC00LbQsNC90L3QtSDQstGL0LrQsNGA0YvRgdGC0LDQvdC90Y8g0LTQsNC00LfQtdC90YvRhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ19ib2R5IiBtc2dpZD0iMjgxNDY3MzU1MTQ3MTk2OTk1NCI+ItCU0LDQutGA0LDQvdGW0YbQtdGB0Y8sINC60LDQsSDQv9GA0LDQs9C70LXQtNC30LXRhtGMINCz0ZbRgdGC0L7RgNGL0Y4g0LLRi9C60LDRgNGL0YHRgtCw0L3QvdGPINGWINC90LDQu9Cw0LTRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzA5MzMzNDQxOTUxODcwNjY4NiI+ItCf0LXRgNCw0LTQsNGH0LAg0LTQsNC00LcuIDJHLTNHINCy0YvQutC70Y7Rh9Cw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfdGl0bGUiIG1zZ2lkPSI3NjM2NDg5NDM2ODE5NDcwNzYxIj4i0J/QtdGA0LDQtNCw0YfQsCDQtNCw0LTQt9C10L3Ri9GFIDRHINCy0YvQutC70Y7Rh9Cw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzg2OTQwMjUxOTM5MTYzMTg4NCI+ItCc0LDQsdGW0LvRjNC90LDRjyDQv9C10YDQsNC00LDRh9CwINC00LDQtNC3LiDQstGL0LrQuy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfdGl0bGUiIG1zZ2lkPSI4OTkyMTU0NzM2NDQxMjg0ODY1Ij4i0J/QtdGA0LDQtC4g0LTQsNC00LcuIFdpLUZpINCw0LTQutC70Y7Rh9Cw0L3QsNGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+ItCd0LDRhtGW0YHQvdGW0YbQtSwg0LrQsNCxINGD0LrQu9GO0YfRi9GG0YwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iNzAyNjczOTEyMTEzODAwNTIzMSI+ItCf0LXRgNCw0LLRi9GI0LDQvdGLINC70ZbQvNGW0YIgMkctM0ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIxMTA2NTYyNzc5MzExMjA5MDM5Ij4i0J/QtdGA0LDQstGL0YjQsNC90Ysg0LvRltC80ZbRgiDQtNCw0LTQt9C10L3Ri9GFIDRHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjI3OTI0MDU3MjE2NTQxMjE2OCI+ItCf0LXRgNCw0LLRi9GI0LDQvdGLINC70ZbQvNGW0YIg0LzQsNCx0ZbQu9GM0L3Ri9GFINC00LDQtNC30LXQvdGL0YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9Ijg3NDM4NTYwMDYzODQ4MjU5NzQiPiLQn9C10YDQsNCyLiDQu9GW0LzRltGCINC/0LAg0LTQsNC00LfQtdC90YvQvCBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfc25vb3plZF9ib2R5IiBtc2dpZD0iNzAzNTQ5MDI3ODI5ODQ0MTc2NyI+ItCQ0LFcJ9GR0LwgPHhsaWZmOmcgaWQ9IlNJWkUiPiVzPC94bGlmZjpnPiDQv9C10YDQsNCy0YvRiNCw0LUg0YPRgdGC0LDQvdC+0Z7Quy4g0LzRj9C20YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX3RpdGxlIiBtc2dpZD0iNTk2NTE1NzM2MTAzNjMyMTkxNCI+ItCX0YvRhdC+0LTQvdGL0Y8g0LTQsNC00LfQtdC90YvRjyDQsNCx0LzQtdC20LDQstCw0L3Ri9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX2JvZHkiIG1zZ2lkPSI2NzQxNTIxMzMwOTk3NDUyOTkwIj4i0J3QsNGG0ZbRgdC90ZbRhtC1LCDQutCw0LEg0LfQvdGP0YbRjCDQsNCx0LzQtdC20LDQstCw0L3QvdC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNzbF9jZXJ0aWZpY2F0ZSIgbXNnaWQ9IjY1MTAwNDA0ODYwNDkyMzc2MzkiPiLQodC10YDRgtGL0YTRltC60LDRgiDQsdGP0YHQv9C10LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNzbF9jZXJ0aWZpY2F0ZV9pc192YWxpZCIgbXNnaWQ9IjY4MjUyNjMyNTA3NzQ1NjkzNzMiPiLQk9GN0YLRiyDRgdC10YDRgtGL0YTRltC60LDRgiDRgdCw0L/RgNCw0Z7QtNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX3RvIiBtc2dpZD0iNDU0MjM5NDgwMjc0OTIxMDMyIj4i0JLRi9C00LDQtNC30LXQvdGLOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbW1vbl9uYW1lIiBtc2dpZD0iMjIzMzIwOTI5OTQzNDE3MjY0NiI+ItCX0LLRi9GH0LDQudC90LDQtSDRltC80Y86Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnX25hbWUiIG1zZ2lkPSI2OTczNTYxMTkwNzYyMDg1MjM2Ij4i0JDRgNCz0LDQvdGW0LfQsNGG0YvRjzoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvcmdfdW5pdCIgbXNnaWQ9IjcyNjU5ODE4OTA0MjIwNzAzODMiPiLQkNC00LTQt9C10Lsg0LDRgNCz0LDQvdGW0LfQsNGG0YvRljoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfYnkiIG1zZ2lkPSIyNjQ3NTg0OTg4MDU3NDgxNTY2Ij4i0JLRi9C00LDQvdCwOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZhbGlkaXR5X3BlcmlvZCIgbXNnaWQ9Ijg4MTg4ODYxMzc1NDU5ODMxMTAiPiLQotGN0YDQvNGW0L0g0LTQt9C10Y/QvdC90Y86Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX29uIiBtc2dpZD0iNTg5NTAxNzQwNDM2MTM5NzIzMiI+ItCS0YvQtNCw0LTQt9C10L3RizoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHBpcmVzX29uIiBtc2dpZD0iMzY3NjI0Mjk0OTkxNTk1OTgyMSI+ItCX0LDQutCw0L3Rh9Cy0LDQtdGG0YbQsDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4i0KHQtdGA0YvQudC90Ysg0L3Rg9C80LDRgDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmaW5nZXJwcmludHMiIG1zZ2lkPSI0NTE2MDE5NjE5ODUwNzYzMDQ5Ij4i0JDQtNCx0ZbRgtC60ZYg0L/QsNC70YzRhtCw0Z46Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhMjU2X2ZpbmdlcnByaW50IiBtc2dpZD0iNDM5MTI3MTI4NjQ3NzI3OTI2MyI+ItCQ0LTQsdGW0YLQsNC6INC/0LDQu9GM0YbQsNGeIFNIQS0yNTY6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhMV9maW5nZXJwcmludCIgbXNnaWQ9Ijc5MzAzMzAyMzUyNjk0MDQ1ODEiPiLQkNC00LHRltGC0LrRliDQv9Cw0LvRjNGG0LDRniBTSEEtMToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfc2VlX2FsbCIgbXNnaWQ9IjQyOTI1NjkzODM5NzY2MzYyMDAiPiLQn9GA0LDQs9C70LXQtNC30LXRhtGMINGD0YHRkSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2Nob29zZXJfdmlld19kaWFsb2dfdGl0bGVfZGVmYXVsdCIgbXNnaWQ9IjQ3MTAwMTM4NjQ5NzQwNDA2MTUiPiLQktGL0LHQtdGA0YvRhtC1INC/0YDQsNGG0Y3RgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYXJlX2FjdGlvbl9wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iNTI0NzY4NDQzNTk3OTE0OTIxNiI+ItCQ0L/Rg9Cx0LvRltC60LDQstCw0YbRjCDQtyDQtNCw0L/QsNC80L7Qs9Cw0LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsaXN0X2RlbGltZXRlciIgbXNnaWQ9IjM5NzUxMTc1NzIxODU0OTQxNTIiPiIsICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbmRpbmciIG1zZ2lkPSIzMjQ1NjUzNjgxMDA4MjE4MDMwIj4i0JDQtNC/0YDQsNGe0LrQsC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaEJyb3dzZXJEZWZhdWx0IiBtc2dpZD0iMjA1Nzk1MTk0NzI5NzYxNDcyNSI+ItCX0LDQv9GD0YHRhmnRhtGMINCx0YDQsNGe0LfQtdGAPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlNldHVwQ2FsbERlZmF1bHQiIG1zZ2lkPSI1ODM0OTQ4NDY5MjUzNzU4NTc1Ij4i0J/RgNGL0L3Rj9GG0Ywg0LLRi9C60LvRltC6PyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9hbHdheXMiIG1zZ2lkPSI4MDE3NzcwNzQ3ODAxNDk0OTMzIj4i0JfQsNGe0YHRkdC00YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9yZXNvbHZlcl91c2Vfb25jZSIgbXNnaWQ9IjI0MDQ2NDQ3OTcxNDkxNzM3NTgiPiLQotC+0LvRjNC60ZYg0LDQtNC30ZbQvSDRgNCw0LciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MTcwNTM4OTgxNjcxMjc0NzEiPiLQn9C70LDQvdGI0Y3RgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQyMzkyOTEyNzM0MjAxNDAxMjMiPiLQotGN0LvQtdGE0L7QvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9oZWFkcGhvbmVzIiBtc2dpZD0iODExOTk3MTg0MzgwMzQzOTExMCI+ItCd0LDQstGD0YjQvdGW0LrRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9kb2NrX3NwZWFrZXJzIiBtc2dpZD0iNjI0MDYwMjk4MjI3NjU5MTg2NCI+ItCU0YvQvdCw0LzRltC60ZYg0YHRgtCw0L3RhtGLaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbWVkaWFfcm91dGVfbmFtZV9oZG1pIiBtc2dpZD0iMjQ1MDk3MDM5OTAyMzQ3ODA1NSI+IkhETUkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i0KHRltGB0YLRjdC80LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkJsdWV0b290aC3QsNGe0LTRi9GRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLQkdC10YHQv9GA0LDQstCw0LTQvdGLINC00YvRgdC/0LvQtdC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+ItCT0LDRgtC+0LLQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+ItCc0YPQu9GM0YLRi9C80LXQtNGL0LnQvdGLINCy0YvRhdCw0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i0KHQutCw0L1p0YDQsNCy0LDQvdC90LUuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLQn9Cw0LTQutC70Y7Rh9GN0L3QvdC1Li4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLQlNCw0YHRgtGD0L/QvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI2NzM5ODk5OTYyNjgxODg2NDAxIj4i0J3QtdC00LDRgdGC0YPQv9C90YsiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSAoNDUzMzc4NjAzMTA5MDE5ODA2MykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9idWlsdF9pbl9kaXNwbGF5X25hbWUiIG1zZ2lkPSIyNTgzMTM0Mjk0MjkyNTYzOTQxIj4i0KPQsdGD0LTQsNCy0LDQvdGLINGN0LrRgNCw0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfaGRtaV9kaXNwbGF5X25hbWUiIG1zZ2lkPSIxNTU1MjY0NTU5MjI3NDcwMTA5Ij4i0K3QutGA0LDQvSBIRE1JIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+ItCe0LLQtdGA0LvQtdC5ICPCoDx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiDQutGALiDQvdCwINGG0LDQu9GOIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCAoNjAyMjExOTcwMjYyODU3MjA4MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4i0J/QsNC00LrQu9GO0YfQsNC90Ysg0LHQtdGB0L/RgNCw0LLQsNC00L3RiyDQtNGL0YHQv9C70LXQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLQk9GN0YLRiyDRjdC60YDQsNC9INC/0LDQutCw0LfQstCw0LXRhtGG0LAg0L3QsCDRltC90YjQsNC5INC/0YDRi9C70LDQtNC30LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i0JDQtNC60LvRjtGH0YvRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLQrdC60YHRgtGA0LDQvdC90Ysg0LLRi9C60LvRltC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i0JfQsNCx0YvQu9GWINC60LvRjtGHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiLQndGP0L/RgNCw0LLRltC70YzQvdCwINC60LvRjtGHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4i0J3Rj9C/0YDQsNCyadC70YzQvdGLINC/0LDRgNC+0LvRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiLQndGP0L/RgNCw0LLRltC70YzQvdGLIFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+ItCf0LDRntGC0LDRgNGL0YbQtSDRgdC/0YDQvtCx0YMg0L/RgNCw0LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkZDwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLQndCw0LzQsNC70Y7QudGG0LUg0LrQu9GO0YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiLQo9Cy0Y/QtNC30ZbRhtC1IFBJTi3QutC+0LQgU0lNLdC60LDRgNGC0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+ItCj0LLRj9C00LfRltGG0LUgUElOLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiLQo9Cy0Y/QtNC30ZbRhtC1INC/0LDRgNC+0LvRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IlNJTS3QutCw0YDRgtCwINC30LDRgNCw0Lcg0LDQtNC60LvRjtGH0LDQvdCwLiDQo9Cy0Y/QtNC30ZbRhtC1IFBVSy3QutC+0LQsINC60LDQsSDQv9GA0LDRhtGP0LPQvdGD0YbRjC4g0JfQstGP0LbRi9GG0LXRgdGPINGB0LAg0YHQstCwadC8INCw0L/QtdGA0LDRgtCw0YDQsNC8LCDQutCw0LEg0LDRgtGA0YvQvNCw0YbRjCDQtNCw0LTQsNGC0LrQvtCy0YPRjiBp0L3RhNCw0YDQvNCw0YbRi9GOLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLQo9Cy0Y/QtNC30ZbRhtC1INC20LDQtNCw0L3RiyBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+ItCf0LDRhtCy0LXRgNC00LfRltGG0LUg0LbQsNC00LDQvSBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiLQoNCw0LfQsdC70LDQumnRgNC+0Z7QutCwIFNJTS3QutCw0YDRgtGLLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i0J3Rj9C/0YDQsNCy0ZbQu9GM0L3RiyBQSU4t0LrQvtC0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+ItCj0LLRj9C00LfRltGG0LUgUElOLdC60L7QtCwg0Y/QutGWINC30LzRj9GI0YfQsNC1INCw0LQgNCDQtNCwIDgg0LvRltGH0LHQsNGeLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSy3QutC+0LQg0L/QsNCy0ZbQvdC10L0g0YPRgtGA0YvQvNC7adCy0LDRhtGMIDgg0Ltp0YfQsdCw0Z4g0ZYg0LHQvtC70YzRiC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLQn9Cw0Z7RgtC+0YDQvdCwINGD0LLRj9C00LfRltGG0LUg0L/RgNCw0LLRltC70YzQvdGLIFBVSy3QutC+0LQuINCd0LXQsNC00L3QsNGA0LDQt9C+0LLRi9GPINGB0L/RgNC+0LHRiyDQvdCw0LfQsNGe0LbQtNGLINCw0LTQutC70Y7Rh9Cw0YbRjCBTSU0t0LrQsNGA0YLRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOLdC60L7QtNGLINC90LUg0YHRg9C/0LDQtNCw0Y7RhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i0JfQsNC90LDQtNGC0LAg0YjQvNCw0YIg0YHQv9GA0L7QsSDQv9Cw0Z7RgtCw0YDRi9GG0Ywg0YjQsNCx0LvQvtC9ISI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLQmtCw0LEg0YDQsNC30LHQu9Cw0Lpp0YDQsNCy0LDRhtGMLCDRg9Cy0LDQudC00LfRltGG0LUg0Z4g0YHQstC+0Lkg0YPQu9GW0LrQvtCy0Ysg0LfQsNC/0ZbRgSBHb29nbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLQhtC80Y8g0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAgKNGN0LvQtdC60YLRgNC+0L3QvdCw0Y8g0L/QvtGI0YLQsCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+ItCf0LDRgNC+0LvRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4i0KPQstCw0LnRgdGGaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i0J3Rj9C/0YDQsNCy0ZbQu9GM0L3QsNC1INGW0LzRjyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCDRhtGWINC/0LDRgNC+0LvRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i0JfQsNCx0YvQu9GW0YHRjyDQvdCwINGW0LzRjyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCDQsNCx0L4g0L/QsNGA0L7Qu9GMP1xu0J3QsNCy0LXQtNCw0LnRhtC1ICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiLQn9GA0LDQstC10YDQutCwINGe0Ltp0LrQvtCy0LDQs9CwINC30LDQv2nRgdGDLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0Z7QstGP0LvRliBQSU4t0LrQvtC0INC/0Y3RntC90YPRjiDQutC+0LvRjNC60LDRgdGG0Ywg0YDQsNC30L7RnjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIFxuXG7Qn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDINC/0YDQsNC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0Z7QstGP0LvRliDQv9Cw0YDQvtC70Ywg0L/RjdGe0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgNCw0LfQvtGeOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gXG5cbtCf0LDRntGC0LDRgNGL0YbQtSDRgdC/0YDQvtCx0YMg0L/RgNCw0LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRntCy0Y/Qu9GWINCz0YDQsNGE0ZbRh9C90Ysg0LrQu9GO0Ycg0YDQsNC30LHQu9Cw0Lpp0YDQvtGe0LppINC/0Y3RntC90YPRjiDQutC+0LvRjNC60LDRgdGG0Ywg0YDQsNC30L7RnjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIFxuXG7Qn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDINC/0YDQsNC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRgdC/0YDQsNCx0LDQstCw0LvRliDRgNCw0LfQsdC70LDQumnRgNCw0LLQsNGG0Ywg0L/Qu9Cw0L3RiNGN0YIg0L3QtdC60LDQu9GM0LppINGA0LDQt9C+0Z4gKDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+KS4g0J/QsNGB0LvRjyDRj9GI0YfRjSDQvdC10LrQsNC70YzQumnRhSDRgdC/0YDQvtCxICg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPikg0ZHQvSDQsdGD0LTQt9C1INGB0LrRltC90YPRgtGLINC00LAg0LfQsNCy0L7QtNGB0LrRltGFINC90LDQu9Cw0LQgaSDQutCw0YDRi9GB0YLQsNC70YzQvWnRhtC6adGPINC00LDQtNC30LXQvdGL0Y8g0LHRg9C00YPRhtGMINC30LPRg9Cx0LvQtdC90YvRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGB0L/RgNCw0LHQsNCy0LDQu9GWINGA0LDQt9Cx0LvQsNC6adGA0LDQstCw0YbRjCDQv9C70LDQvdGI0Y3RgiDQvdC10LrQsNC70YzQumkg0YDQsNC30L7RniAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4pLiDQn9Cw0YHQu9GPINGP0YjRh9GNINC90LXQutCw0LvRjNC6adGFINGB0L/RgNC+0LEgKDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+KSDRkdC9INCx0YPQtNC30LUg0YHQutGW0L3Rg9GC0Ysg0LTQsCDQt9Cw0LLQsNC00YHQutGW0YUg0L3QsNC70LDQtCBpINC60LDRgNGL0YHRgtCw0LvRjNC9adGG0Lpp0Y8g0LTQsNC00LfQtdC90YvRjyDQsdGD0LTRg9GG0Ywg0LfQs9GD0LHQu9C10L3Ri9GPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGB0L/RgNCw0LHQsNCy0LDQu9GWINGA0LDQt9Cx0LvQsNC6adGA0LDQstCw0YbRjCDQv9C70LDQvdGI0Y3RgiDQvdC10LrQsNC70YzQumkg0YDQsNC30L7RniAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+KS4g0KbRj9C/0LXRgCDRkdC9INCx0YPQtNC30LUg0YHQutGW0L3Rg9GC0Ysg0LTQsCDQt9Cw0LLQsNC00YHQutGW0YUg0L3QsNC70LDQtC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0YHQv9GA0LDQsdCw0LLQsNC70ZYg0YDQsNC30LHQu9Cw0Lpp0YDQsNCy0LDRhtGMINGC0Y3Qu9C10YTQvtC9INC90LXQutCw0LvRjNC6aSDRgNCw0LfQvtGeICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4pLiDQptGP0L/QtdGAINGR0L0g0LHRg9C00LfQtSDRgdC60ZbQvdGD0YLRiyDQtNCwINC30LDQstCw0LTRgdC60ZbRhSDQvdCw0LvQsNC0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0Z7QstGP0LvRliDQs9GA0LDRhNGW0YfQvdGLINC60LvRjtGHINGA0LDQt9Cx0LvQsNC6adGA0L7RntC6aSDQv9GN0Z7QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGA0LDQt9C+0Z46IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiDQn9Cw0YHQu9GPINGP0YjRh9GNINC90LXQutCw0LvRjNC6adGFINC90Y/RntC00LDQu9GL0YUg0YHQv9GA0L7QsSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4pINCy0LDQvCDQsdGD0LTQt9C1INC/0YDQsNC/0LDQvdCw0LLQsNC90LAg0YDQsNC30LHQu9Cw0Lpp0YDQsNCy0LDRhtGMINGC0Y3Qu9C10YTQvtC9LCDRg9Cy0LDQudGI0L7RntGI0Ysg0Z4gR29vZ2xlLlxuXG4g0J/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgyDQv9GA0LDQtyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDRgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRntCy0Y/Qu9GWINCz0YDQsNGE0ZbRh9C90Ysg0LrQu9GO0Ycg0YDQsNC30LHQu9Cw0Lpp0YDQvtGe0LppINC/0Y3RntC90YPRjiDQutC+0LvRjNC60LDRgdGG0Ywg0YDQsNC30L7RnjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uINCf0LDRgdC70Y8g0Y/RiNGH0Y0g0L3QtdC60LDQu9GM0Lpp0YUg0L3Rj9Ge0LTQsNC70YvRhSDRgdC/0YDQvtCxICg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPikg0LLQsNC8INCx0YPQtNC30LUg0L/RgNCw0L/QsNC90LDQstCw0L3QsCDRgNCw0LfQsdC70LDQumnRgNCw0LLQsNGG0Ywg0YLRjdC70LXRhNC+0L0sINGD0LLQsNC50YjQvtGe0YjRiyDRniBHb29nbGUuXG5cbiDQn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDINC/0YDQsNC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INGBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+ItCS0YvQtNCw0Ltp0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNhZmVfbWVkaWFfdm9sdW1lX3dhcm5pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzI0MTYxOTM5NDc1NDc4MDY2Ij4i0J/QsNCy0Y/Qu2nRh9GL0YbRjCDQs9GD0Log0LHQvtC70YzRiCDQt9CwINGA0Y3QutCw0LzQtdC90LTQsNCy0LDQvdGLINGe0LfRgNC+0LLQtdC90Yw/XG7QlNC+0Z7Qs9Cw0LUg0YHQu9GD0YXQsNC90L3QtSDQvNGD0LfRi9C6aSDQvdCwINCy0Y/Qu2nQutCw0Lkg0LPRg9GH0L3QsNGB0YZpINC80L7QttCwINC/0LDRiNC60L7QtNC3adGG0Ywg0LLQsNGIINGB0LvRi9GFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbnRpbnVlX3RvX2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTYyNjQyNzM3MjMxNjA3MDI1OCI+ItCj0YLRgNGL0LzQu2nQstCw0LnRhtC1INC00LLQsCDQv9Cw0LvRjNGG0YssINC60LDQsSDRg9C60LvRjtGH0YvRhtGMINC00L7RgdGC0YPQvy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2VuYWJsZWQiIG1zZ2lkPSIxMzgxOTcyMDQ4NTY0NTQ3Njg1Ij4i0JTQsNGB0YLRg9C/0L3QsNGB0YbRjCDRg9C60LvRjtGH0LDQvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9hY2Nlc3NpYmlsaXR5X2NhbmNlbGVkIiBtc2dpZD0iMzgzMzkyMzI1Nzk2NjYzNTY3MyI+ItCU0LDRgdGC0YPQv9C90LDRgdGG0Ywg0LDQtNC80LXQvdC10L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+ItCR0Y/Qs9GD0YfRiyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LogPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im93bmVyX25hbWUiIG1zZ2lkPSIyNzE2NzU1NDYwMzc2MDI4MTU0Ij4i0KPQu9Cw0LTQsNC70YzQvdGW0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX3RpdGxlIiBtc2dpZD0iNDUxMDM3MzA4MzA4MjUwMDE5NSI+ItCf0LDQvNGL0LvQutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX25vX3Jlc3RyaWN0ZWRfYWNjb3VudHMiIG1zZ2lkPSI1NzM5NDYzMjQ5NjczNzI3NzM2Ij4i0JPRjdGC0LAg0L/RgNGL0LrQu9Cw0LTQsNC90L3QtSDQvdC1INC/0LDQtNGC0YDRi9C80LvRltCy0LDQtSDRntC70ZbQutC+0LLRi9GPINC30LDQv9GW0YHRiyDQtNC70Y8g0L/RgNC+0YRp0LvRj9GeINC3INCw0LHQvNC10LbQsNCy0LDQvdC90Y/QvNGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX25vdF9mb3VuZCIgbXNnaWQ9IjM0MjkxNDE4NTM0OTg5MjczNzkiPiLQn9GA0YvQutC70LDQtNCw0L3QvdC1INC00LvRjyDQs9GN0YLQsNCz0LAg0LTQt9C10Y/QvdC90Y8g0L3QtSDQt9C90L7QudC00LfQtdC90LDQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJldm9rZSIgbXNnaWQ9IjU0MDQ0NzkxODUyMjgyNzE1ODYiPiLQkNC90YPQu9GP0LLQsNGG0YwiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19hMCAoMTk5NDQ3NDI1MjkzMTI5NDE3MikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2ExICgzMzMzMDYwNDIxNTI5NzkxNzg2KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYTIgKDMwOTc1MzU5OTE5MjU3OTgyODApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19hMyAoMzAyMzIxMzI1OTMxNDIzNjEyMykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2E0ICgyMzE3NDUzMjUyOTY4NzM3NjQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19hNSAoMzQ4NDMyNzQwNzM0MDg2NTQxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2E2ICg0ODYxOTA4NDg3MTI5NTc3NTMwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYTcgKDU4OTAyMDg1ODgwNzI5MzYxMzApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19hOCAoNDMxOTQyNTA0MTA4NTgxNjYxMikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2E5ICg0ODgyMjIwNTI5NTA2NDMyMDA4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYTEwICgyMzgyODY2MDI2MzY1MzU5MzkxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYjAgKDM2NTE4MjcxNDc0MDIwMDk2NzUpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19iMSAoNjA3Mjg1OTYyODI3ODczOTk1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2IyICgxMzQ4NzMxODUyMTUwMzgwMzc4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYjMgKDI2MTI1MTAxODEyNTkyNjEzNzkpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19iNCAoNjk1MTUxMzc4ODM4MTE1NDM0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYjUgKDQ4NjM3NTQyODU1ODIyMTI0ODcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19iNiAoNTMwNTgxNjI5MjEzOTY0NzI0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2I3ICg1MzE2NzM1NDI2MDI3ODY2MjQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19iOCAoOTE2NDQ3NDU5NTcwODg1MDAzNCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2I5ICgyODIxMDI5NzY3NjQ3NzQxNjApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19iMTAgKDQ1MTcxNDE3MTQ0MDc4OTg5NzYpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19jMCAoMzEwMzUyMTM1NzkwMTU5MTEwMCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2MxICgxMjMxOTU0MTA1OTg1MDQ4NTk1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYzIgKDkyNzcwMjgxNjk4MDA4NzQ2MikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2MzICg4MzUxNTQxNzM1MTgzMDQxNTkpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19jNCAoNTA5NTk1MTk4NTEwODE5NDAxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2M1ICgxOTg1Mzk3NDUwMzMyMzA1NzM5KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYzYgKDgxNDc0MjE5MjQxNzQ2OTMwMTMpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19jNyAoODk5Mzk5NDkyNTI3NjEyMjk1MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfaXNvX2M4ICg2ODcxMTc4MTA0MTM5NTk4OTU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9pc29fYzkgKDc5ODM1MzI2MzUyMjc1NjEzNjIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2lzb19jMTAgKDUwNDA3NjQyOTM0MDY3NjU1ODQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX25hX2xldHRlciAoMjg0MTQxNDgzOTg4ODM0NDI5NikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfbmFfZ3Zybm10X2xldHRlciAoNTI5NTgzNjgzODg2Mjk2MjgwOSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfbmFfbGVnYWwgKDg2MjEzNjQwMzc2ODA0NjU2NjYpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX25hX2p1bmlvcl9sZWdhbCAoMzMwOTMyNDE2MjE1NTA4NTkwNCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfbmFfbGVkZ2VyICg1NTY3MDMwMzQwNTA5MDc1MzMzKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9uYV90YWJsb2lkICg0NTcxNzM1MDM4NTAxNjYxNzU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9uYV9pbmRleF8zeDUgKDUxODI5MDE5MTc4MTg2MjUxMjYpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX25hX2luZGV4XzR4NiAoNzY4NzYyMDYyNTQyMjMxMjM5NikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfbmFfaW5kZXhfNXg4ICg4ODM0MjE1Mjg0NjQ2ODcyODAwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9uYV9tb25hcmNoICgyMTM2Mzk5MDY5NTY1NTA3NTQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX25hX3F1YXJ0byAoODM1Nzc4NDkzNTkzMDIzMjIzKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9uYV9mb29sc2NhcCAoMTU3MzkxMTIzNzk4MzY3NzEzOCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfY2hpbmVzZV9yb2NfOGsgKDM2MjY4NTU4NDcxODk0Mzg4OTYpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2NoaW5lc2Vfcm9jXzE2ayAoOTE4MjE5MTU3NzAyMjk0MzM1NSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfY2hpbmVzZV9wcmNfMSAoNDc5MzIzMjY0NDk4MDE3MDUwMCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfY2hpbmVzZV9wcmNfMiAoNTQwNDEwOTczMDk3NTcyMDY3MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfY2hpbmVzZV9wcmNfMyAoMTMzNTA5MjI1MzMzOTM2MzUyNikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfY2hpbmVzZV9wcmNfNCAoOTE2Nzk5NzgwMDQ4NjU2OTgzNCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfY2hpbmVzZV9wcmNfNSAoODQ1ODc1MTY4ODIzNTQxNDk3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9jaGluZXNlX3ByY182ICgzMjIwMzI1NjY3NjkyNjQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9jaGluZXNlX3ByY183ICgxNzc2NzkyMTM4NTA3MDM4NTI3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9jaGluZXNlX3ByY184ICgxNDE3MTc2NjQyNjg3NDU2NjkyKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9jaGluZXNlX3ByY185ICg0Nzg1OTgzNDczMTIzNzk4MzY1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9jaGluZXNlX3ByY18xMCAoNzg0Nzk4MjI5OTM5MTg1MTg5OSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfY2hpbmVzZV9wcmNfMTZrICgyNjI3OTMzODM1Mzk5ODA2NzcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2NoaW5lc2Vfb21fcGFfa2FpICg1MjU2ODE1NTc5NDQ3OTU5ODE0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9jaGluZXNlX29tX2RhaV9wYV9rYWkgKDczMzY0MTI5NjM0NDEzNTQ0MDcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2NoaW5lc2Vfb21fanVycm9fa3Vfa2FpICg2MzI0NDY1NDQ0MTAwNDkwNzQyKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV9qaXNfYjEwICgxNzg3MjYyODQ1NjI3Njk0Mzc2KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV9qaXNfYjkgKDMzMzYwMzU3ODM2NjMyODc0NzApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2phcGFuZXNlX2ppc19iOCAoNjE5NTM5ODI5OTEwNDM0NTczMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfamFwYW5lc2VfamlzX2I3ICgxNjc0NjIxODg2OTAyODI4ODg0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV9qaXNfYjYgKDQxNzA1NzYyODYwNjI2NTc0MzUpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2phcGFuZXNlX2ppc19iNSAoNDg5OTI5Nzk1ODEwMDAzMjUzMykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfamFwYW5lc2VfamlzX2I0ICg0MjEzMTU4MTI5MTI2NjY2ODQ3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV9qaXNfYjMgKDg1MTM3MTUzMDc0MTAzMTA2OTYpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2phcGFuZXNlX2ppc19iMiAoNDc3NzY5MDIxMTg5NzEzMTE5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfamFwYW5lc2VfamlzX2IxICg0NjA4MTQyMzg1NDU3MDM0NjAzKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV9qaXNfYjAgKDc1ODcxMDgzNjY1NzIyNDM5OTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2phcGFuZXNlX2ppc19leGVjICg1MjQ0MDc1NDMyMjYzNjQ5MDY4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV9jaG91NCAoNDk0MTY1MjAxNTAzMjYzMTM2MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfamFwYW5lc2VfY2hvdTMgKDYzODczMTkxNjkyNjM5NTcwMTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2phcGFuZXNlX2Nob3UyICgxMjk5MTEyMDI1NDE1MzQzOTgyKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhc2l6ZV9qYXBhbmVzZV9oYWdha2kgKDgwNzAxMTU2MjA2NDQyNTQ1NjUpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2phcGFuZXNlX291ZnVrdSAoNjA0OTA2NTU4NzMwNzg5NjU2NCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfamFwYW5lc2Vfa2FodSAoNjg3MjY5NjAyNzU2MDA2NTE3MykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYXNpemVfamFwYW5lc2Vfa2FrdTIgKDIzNTkwNzcyMzM3NzU0NTU0MDUpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX2phcGFuZXNlX3lvdTQgKDIwOTE3NzcxNjg3NDcwNTgwMDgpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX3Vua25vd25fcG9ydHJhaXQgKDMwODgwNDM2NDE2MTY0MDk3NjIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFzaXplX3Vua25vd25fbGFuZHNjYXBlICg0ODc2OTk1MzI3MDI5MzYxNTUyKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHdyaXRlX2ZhaWxfcmVhc29uX2NhbmNlbGxlZCAoNzA5MTI1ODM3ODEyMTYyNzYyNCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciB3cml0ZV9mYWlsX3JlYXNvbl9jYW5ub3Rfd3JpdGUgKDgxMzI1MDU0MTc5MzUzMzc3MjQpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVhc29uX3Vua25vd24gKDYwNDg5MTM4ODAxODQ2MjgxMTkpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVhc29uX3NlcnZpY2VfdW5hdmFpbGFibGUgKDc4MjQwMDg3MzIyNDM5MDMyNjgpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcHJpbnRfc2VydmljZV9pbnN0YWxsZWRfdGl0bGUgKDIyNDYzMTcxNjk0NDQwODE2MjgpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcHJpbnRfc2VydmljZV9pbnN0YWxsZWRfbWVzc2FnZSAoNTg5NzM2MjkzMTA3MDQ1OTE1MikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZXN0cl9waW5fZW50ZXJfYWRtaW5fcGluICg3ODM2NDM3MzE4OTUxNDM5NzApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVzdHJfcGluX2VudGVyX3BpbiAoMzM5NTk1MzQyMTM2ODQ3NjEwMykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZXN0cl9waW5faW5jb3JyZWN0ICg4NTcxNTEyMDAzOTU1MDc3OTI0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlc3RyX3Bpbl9lbnRlcl9vbGRfcGluICgxNDYyMjA2MjI1NTEyOTEwNzU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlc3RyX3Bpbl9lbnRlcl9uZXdfcGluICg1OTU5NjA2NjkxNjE5OTU5MTg0KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlc3RyX3Bpbl9jb25maXJtX3BpbiAoODUwMTUyMzgyOTYzMzE0NjIzOSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZXN0cl9waW5fY3JlYXRlX3BpbiAoODAxNzYwMDAwMDI2MzQ1MDMzNykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByZXN0cl9waW5fZXJyb3JfZG9lc250X21hdGNoICgyMjI0MjE0MTkwOTA2OTk0NTQ4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJlc3RyX3Bpbl9lcnJvcl90b29fc2hvcnQgKDgxNzM5ODI3NTYyNjU3Nzc3OTIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVzdHJfcGluX2NvdW50ZG93bjpvbmUgKDMxMTA1MDk5NTE5ODU0ODY3NSkgLS0+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVzdHJfcGluX2NvdW50ZG93bjpvdGhlciAoNDczMDg2ODkyMDc0Mjk1MjgxNykgLS0+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcmVzdHJfcGluX3RyeV9sYXRlciAoOTczMTQ0NDcyNDkwNTMyMzc3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiAoNzIyNzQxNjg5NDk3OTA0NzQ2NykgLS0+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uICg4NTU0OTkxNDg4MDk2NjYyNTA4KSAtLT4KLSAgICA8c2tpcCAvPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbAppbmRleCA5OWJhOTIyLi40NGFjYTEwIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+ItCS0YrQstC10LTQtdGC0LUgUFVLINC60L7QtCDRgSDQv9C+0L3QtSDQvtGB0LXQvCDRhtC40YTRgNC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU0g0LrQsNGA0YLQsNGC0LAg0LLQuCDQtSDQt9Cw0LrQu9GO0YfQtdC90LAg0YEgUFVLLiDQktGK0LLQtdC00LXRgtC1IFBVSyDQutC+0LTQsCwg0LfQsCDQtNCwINGPINC+0YLQutC70Y7Rh9C40YLQtS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLQktGK0LLQtdC00LXRgtC1IFBVSzIsINC30LAg0LTQsCDQvtGC0LHQu9C+0LrQuNGA0LDRgtC1IFNJTSDQutCw0YDRgtCw0YLQsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiLQndC10YPRgdC/0LXRiNC90L4g4oCTINCw0LrRgtC40LLQuNGA0LDQudGC0LUg0LfQsNC60LvRjtGH0LLQsNC90LXRgtC+INC90LAgU0lNL1JVSU0g0LrQsNGA0YLQsNGC0LAuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i0J7RgdGC0LDQstCwINCy0LggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC+0L/QuNGCLCDQv9GA0LXQtNC4IFNJTSDQutCw0YDRgtCw0YLQsCDQtNCwINCx0YrQtNC1INC30LDQutC70Y7Rh9C10L3QsC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLQntGB0YLQsNCy0LDRgiDQstC4IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQvtC/0LjRgtCwLCDQv9GA0LXQtNC4IFNJTSDQutCw0YDRgtCw0YLQsCDQtNCwINCx0YrQtNC1INC30LDQutC70Y7Rh9C10L3QsC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+ItCY0LTQtdC90YLQuNGE0LjQutCw0YbQuNGPINC90LAg0LLRhS4g0L7QsdCw0LbQtNCw0L3QuNGPIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLQoNCw0LfRgNC10YjQsNCy0LAg0L3QsCDQv9GA0LjRgtC10LbQsNGC0LXQu9GPINC00LAg0YHQtSDQvtCx0LLRitGA0LbQtSDRgSDQuNC90YLQtdGA0YTQtdC50YHQsCDQvtGCINC90LDQuS3QstC40YHQvtC60L7RgtC+INC90LjQstC+INC90LAg0YPRgdC70YPQs9CwINC30LAgVlBOLiDQndC+0YDQvNCw0LvQvdC40YLQtSDQv9GA0LjQu9C+0LbQtdC90LjRjyDQsdC4INGC0YDRj9Cx0LLQsNC70L4g0L3QuNC60L7Qs9CwINC00LAg0L3QtSDRgdC1INC90YPQttC00LDRj9GCINC+0YIg0YLQvtCy0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ItC+0LHQstGK0YDQt9Cy0LDQvdC1INGBINGC0LDQv9C10YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+ItCg0LDQt9GA0LXRiNCw0LLQsCDQvdCwINC/0YDQuNGC0LXQttCw0YLQtdC70Y8g0LTQsCDRgdC1INC+0LHQstGK0YDQttC1INGBINC40L3RgtC10YDRhNC10LnRgdCwINC+0YIg0L3QsNC5LdCy0LjRgdC+0LrQvtGC0L4g0L3QuNCy0L4g0L3QsCDRgtCw0L/QtdGCLiDQndC+0YDQvNCw0LvQvdC40YLQtSDQv9GA0LjQu9C+0LbQtdC90LjRjyDQsdC4INGC0YDRj9Cx0LLQsNC70L4g0L3QuNC60L7Qs9CwINC00LAg0L3QtSDRgdC1INC90YPQttC00LDRj9GCINC+0YIg0YLQvtCy0LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLRgdCy0YrRgNC30LLQsNC90LUg0YEg0L7RgtC00LDQu9C10YfQtdC9INC10LrRgNCw0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLQoNCw0LfRgNC10YjQsNCy0LAg0L3QsCDQv9GA0LjRgtC10LbQsNGC0LXQu9GPINC00LAg0YHQtSDRgdCy0YrRgNC20LUg0YEg0LjQvdGC0LXRgNGE0LXQudGB0LAg0L7RgiDQv9GK0YDQstC+INC90LjQstC+INC90LAg0L7RgtC00LDQu9C10YfQtdC9INC10LrRgNCw0L0uINCd0L7RgNC80LDQu9C90LjRgtC1INC/0YDQuNC70L7QttC10L3QuNGPINCx0Lgg0YLRgNGP0LHQstCw0LvQviDQvdC40LrQvtCz0LAg0LTQsCDQvdC1INGB0LUg0L3Rg9C20LTQsNGP0YIg0L7RgiDRgtC+0LLQsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLQvtCx0LLRitGA0LfQstCw0L3QtSDRgSDRg9GB0LvRg9Cz0LAg0LfQsCDQv9GA0LjRgdC/0L7RgdC+0LHQu9C10L3QuNGPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+ItCg0LDQt9GA0LXRiNCw0LLQsCDQvdCwINC/0YDQuNGC0LXQttCw0YLQtdC70Y8g0LTQsCDRgdC1INC+0LHQstGK0YDQttC1INGBINC40L3RgtC10YDRhNC10LnRgdCwINC+0YIg0L3QsNC5LdCy0LjRgdC+0LrQvtGC0L4g0L3QuNCy0L4g0L3QsCDRg9GB0LvRg9Cz0LAg0LfQsCDQv9GA0LjRgdC/0L7RgdC+0LHQu9C10L3QuNGPLiDQndC+0YDQvNCw0LvQvdC40YLQtSDQv9GA0LjQu9C+0LbQtdC90LjRjyDQsdC4INGC0YDRj9Cx0LLQsNC70L4g0L3QuNC60L7Qs9CwINC00LAg0L3QtSDRgdC1INC90YPQttC00LDRj9GCINC+0YIg0YLQvtCy0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i0LLQt9Cw0LjQvNC+0LTQtdC50YHRgtCy0LjQtSDRgSDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgCDQvdCwINGD0YHRgtGA0L7QudGB0YLQstC+0YLQviI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4i0KDQsNC30YDQtdGI0LDQstCwINC90LAg0L/RgNC40LvQvtC20LXQvdC40LXRgtC+INC00LAg0LjQt9C/0L7Qu9C30LLQsCDRhNGD0L3QutGG0LjQuNGC0LUg0L3QsCBTdXJmYWNlRmxpbmdlciDQvtGCINC90LjRgdC60L4g0L3QuNCy0L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4i0YfQtdGC0LXQvdC1INC90LAg0LrQsNC00YDQvtCy0LjRjyDQsdGD0YTQtdGAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+ItCg0LDQt9GA0LXRiNCw0LLQsCDQvdCwINC/0YDQuNC70L7QttC10L3QuNC10YLQviDQtNCwINGH0LXRgtC1INGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINC60LDQtNGA0L7QstC40Y8g0LHRg9GE0LXRgC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiLQtNC+0YHRgtGK0L8g0LTQviBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4i0KDQsNC30YDQtdGI0LDQstCwINC90LAg0L/RgNC40LvQvtC20LXQvdC40LXRgtC+INC00LAg0LjQt9C/0L7Qu9C30LLQsCDRhNGD0L3QutGG0LjQuNGC0LUg0L3QsCBJbnB1dEZsaW5nZXIg0L7RgiDQvdC40YHQutC+INC90LjQstC+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i0LrQvtC90YTQuNCz0YPRgNC40YDQsNC90LUg0L3QsCDQtNC40YHQv9C70LXQuNGC0LUg0L/RgNC10LcgV2lGaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+ItCg0LDQt9GA0LXRiNCw0LLQsCDQvdCwINC/0YDQuNC70L7QttC10L3QuNC10YLQviDQtNCwINC60L7QvdGE0LjQs9GD0YDQuNGA0LAg0Lgg0LTQsCDRgdC1INGB0LLRitGA0LfQstCwINGBINC00LjRgdC/0LvQtdC40YLQtSDQv9GA0LXQtyBXaUZpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i0LrQvtC90YLRgNC+0LvQuNGA0LDQvdC1INC90LAg0LTQuNGB0L/Qu9C10LjRgtC1INC/0YDQtdC3IFdpRmkiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i0JjQt9Cx0LXRgNC10YLQtSDQv9GA0LjQu9C+0LbQtdC90LjQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4g0L3QtSDQvNC+0LbQsCDQtNCwINGB0LUg0YHRgtCw0YDRgtC40YDQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+ItCh0L/QvtC00LXQu9GP0L3QtSDRgdGK0YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i0KHQv9C+0LTQtdC70Y/QvdC1INGB0YrRgTogPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLQn9C70YrQt9Cz0LDRidCwINGB0LUg0LTRgNGK0LbQutCwLiDQlNC+0LrQvtGB0L3QtdGC0LUg0Lgg0LfQsNC00YDRitC20YLQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i0J/Qu9GK0LfQvdC10YLQtSDQvdCw0LPQvtGA0LUg0LfQsCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i0J/Qu9GK0LfQvdC10YLQtSDQvdCw0LTQvtC70YMg0LfQsCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i0J/Qu9GK0LfQvdC10YLQtSDQvdCw0LvRj9Cy0L4g0LfQsCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+ItCf0LvRitC30L3QtdGC0LUg0L3QsNC00Y/RgdC90L4g0LfQsCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLQntGC0LrQu9GO0YfQstCw0L3QtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLQmtCw0LzQtdGA0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i0KLQuNGFINGA0LXQttC40LwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i0JLQutC70Y7Rh9Cy0LDQvdC1INC90LAg0LfQstGD0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i0KLRitGA0YHQtdC90LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLQn9GA0L7QutCw0YDQsNC50YLQtSDQv9GA0YrRgdGCLCDQt9CwINC00LAg0L7RgtC60LvRjtGH0LjRgtC1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLQktC60LvRjtGH0LXRgtC1INGB0LvRg9GI0LDQu9C60LgsINC30LAg0LTQsCDRh9GD0LXRgtC1INC40LfQs9C+0LLQsNGA0Y/QvdC10YLQviDQvdCwINC60LvQsNCy0LjRiNC40YLQtSDQt9CwINC/0LDRgNC+0LvQsNGC0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i0KLQvtGH0LrQsC4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLQodC40YHRgtC10LzQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i0JfQstGD0Log0L/RgNC10LcgQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLQkdC10LfQttC40YfQtdC9INC00LjRgdC/0LvQtdC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+ItCT0L7RgtC+0LLQviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+ItCY0LfRhdC+0LTRj9GJ0LAg0LzRg9C70YLQuNC80LXQtNC40Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+ItCh0LLRitGA0LfQstCw0L3QtSDRgSDRg9GB0YLRgNC+0LnRgdGC0LLQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+ItCV0LrRgNCw0L0g0LfQsCDQv9GA0LXQtNCw0LLQsNC90LUg0LrRitC8INGD0YHRgtGA0L7QudGB0YLQstC+0YLQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+ItCi0YrRgNGB0Y/RgiDRgdC1INGD0YHRgtGA0L7QudGB0YLQstCw4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4i0J3QsNGB0YLRgNC+0LnQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+ItCf0YDQtdC60YDQsNGC0Y/QstCw0L3QtSDQvdCwINCy0YDRitC30LrQsNGC0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i0KHQutCw0L3QuNGA0LAg0YHQtS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+ItCj0YHRgtCw0L3QvtCy0Y/QstCwINGB0LUg0LLRgNGK0LfQutCwLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLQndCw0LvQuNGG0LUiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLQndCw0YHQu9Cw0LPQstCw0L3QtSDihJY8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+IuKAnjx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuKAnDogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDQt9Cw0YnQuNGC0LXQvdC+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLQkdC10LfQttC40YfQvdC40Y/RgiDQtNC40YHQv9C70LXQuSDQtSDRgdCy0YrRgNC30LDQvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLQotC+0LfQuCDQtdC60YDQsNC9INGB0LUg0L/QvtC60LDQt9Cy0LAg0L3QsCDQtNGA0YPQs9C+INGD0YHRgtGA0L7QudGB0YLQstC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+ItCV0LrRgNCw0L3RitGCINGB0LUg0L/RgNC10LTQsNCy0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiLQo9GB0YLQsNC90L7QstGP0LLQsCDRgdC1INCy0YDRitC30LrQsCDRgS/RitGBIOKAnjx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuKAnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+ItCV0LrRgNCw0L3RitGCINGB0LUg0L/RgNC10LTQsNCy0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+ItCj0YHRgtCw0L3QvtCy0LXQvdCwINC1INCy0YDRitC30LrQsCDRgS/RitGBIOKAnjx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuKAnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLQn9GA0LXQutGA0LDRgtGP0LLQsNC90LUg0L3QsCDQstGA0YrQt9C60LDRgtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLQodC/0LXRiNC90L4g0L7QsdCw0LbQtNCw0L3QtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+ItCX0LDQsdGA0LDQstC10L3QsCDRhNC40LPRg9GA0LAiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NTcsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+ItCe0L/QuNGC0LDQudGC0LUg0L7RgtC90L7QstC+INC/0L4t0LrRitGB0L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLQl9CwINC40LfRhdC+0LQg0L7RgiDRhtGP0Lsg0LXQutGA0LDQvSDQv9GA0LXQutCw0YDQsNC50YLQtSDQv9GA0YrRgdGCINC+0YLQs9C+0YDQtSDQvdCw0LTQvtC70YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLQk9C+0YLQvtCy0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLQmtGA0YrQs9C+0LIg0L/Qu9GK0LfQs9Cw0Ycg0LfQsCDRh9Cw0YHQvtCy0LXRgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLQmtGA0YrQs9C+0LIg0L/Qu9GK0LfQs9Cw0Ycg0LfQsCDQvNC40L3Rg9GC0LjRgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+ItCY0LfQsdC40YDQsNC90LUg0L3QsCDRh9Cw0YHQvtCy0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLQmNC30LHQuNGA0LDQvdC1INC90LAg0LzQuNC90YPRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLQnNC10YHQtdGH0L3QsCDRgtCw0LHQu9C40YbQsCDQvdCwINC00L3QuNGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLQodC/0LjRgdGK0Log0YEg0LPQvtC00LjQvdC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLQmNC30LHQuNGA0LDQvdC1INC90LAg0LzQtdGB0LXRhiDQuCDQtNC10L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLQmNC30LHQuNGA0LDQvdC1INC90LAg0LPQvtC00LjQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+ItCY0LfQsdGA0LDRhdGC0LUgPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4i0JjQt9GC0YDQuNGF0YLQtSA8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKaW5kZXggOGI0NmU4NC4uNmUzYTEwNiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJJbnRyb2R1ZWl4IHVuIFBVSyBjb21wb3N0IGNvbSBhIG3DrW5pbSBkZSA4IG5vbWJyZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IkxhIHRhcmdldGEgU0lNIGVzdMOgIGJsb3F1ZWphZGEgcGVsIFBVSy4gRXNjcml2aXUgZWwgY29kaSBQVUsgcGVyIGRlc2Jsb3F1ZWphci1sYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJFc2NyaXZpdSBlbCBQVUsyIHBlciBkZXNibG9xdWVqYXIgbGEgdGFyZ2V0YSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iTm8gw6lzIGNvcnJlY3RlOyBhY3RpdmEgZWwgYmxvcXVlaWcgZGUgUlVJTS9TSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iRXQgcXVlZGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudDsgc2kgbm8gbFwnZW5jZXJ0ZXMsIGxhIFNJTSBlcyBibG9xdWVqYXLDoC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJFdCBxdWVkZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudHM7IHNpIG5vIGxcJ2VuY2VydGVzLCBsYSBTSU0gZXMgYmxvcXVlamFyw6AuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJZGVudGlmaWNhY2nDsyBkZSB0cnVjYWRhIGVudHJhbnQiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IlBlcm1ldCBxdWUgZWwgdGl0dWxhciB2aW5jdWxpIGEgbGEgaW50ZXJmw61jaWUgZGUgbml2ZWxsIHN1cGVyaW9yIGRcJ3VuIHNlcnZlaSBkZSBWUE4uIE5vIHNcJ2hhdXJpYSBkZSBuZWNlc3NpdGFyIG1haSBwZXIgYSBsZXMgYXBsaWNhY2lvbnMgbm9ybWFscy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iZW5sbGHDp2EgYW1iIHVuIGZvbnMgZGUgcGFudGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IlBlcm1ldCBxdWUgZWwgdGl0dWxhciB2aW5jdWxpIGEgbGEgaW50ZXJmw61jaWUgZGUgbml2ZWxsIHN1cGVyaW9yIGRcJ3VuIGZvbnMgZGUgcGFudGFsbGEuIE5vIHNcJ2hhdXJpYSBkZSBuZWNlc3NpdGFyIG1haSBwZXIgYSBsZXMgYXBsaWNhY2lvbnMgbm9ybWFscy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+InZpbmN1bGEgYSB1bmEgcGFudGFsbGEgcmVtb3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iUGVybWV0IHF1ZSBlbCB0aXR1bGFyIGVzIHZpbmN1bGkgYSBsYSBpbnRlcmbDrWNpZSBkZSBuaXZlbGwgc3VwZXJpb3IgZFwndW5hIHBhbnRhbGxhIHJlbW90YS4gTm8gc1wnaGF1cmlhIGRlIG5lY2Vzc2l0YXIgbWFpIHBlciBhIGxlcyBhcGxpY2FjaW9ucyBub3JtYWxzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+InZpbmN1bGEgYSB1biBzZXJ2ZWkgZGUgd2lkZ2V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IlBlcm1ldCBxdWUgZWwgdGl0dWxhciB2aW5jdWxpIGEgbGEgaW50ZXJmw61jaWUgZGUgbml2ZWxsIHN1cGVyaW9yIGRcJ3VuIHNlcnZlaSBkZSB3aWRnZXQuIE5vIHNcJ2hhdXJpYSBkZSBuZWNlc3NpdGFyIG1haSBwZXIgYSBsZXMgYXBsaWNhY2lvbnMgbm9ybWFscy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJpbnRlcmFjdHVhciBhbWIgdW4gYWRtaW5pc3RyYWRvciBkZWwgZGlzcG9zaXRpdSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iUGVybWV0IHF1ZSBsXCdhcGxpY2FjacOzIHV0aWxpdHppIGZ1bmNpb25zIFN1cmZhY2VGbGluZ2VyIGRlIGJhaXggbml2ZWxsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImxsZWdpciBsYSBtZW3DsnJpYSBpbnRlcm3DqGRpYSBkZSBtYXJjcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJQZXJtZXQgcXVlIGxcJ2FwbGljYWNpw7MgbGxlZ2VpeGkgZWwgY29udGluZ3V0IGRlIGxhIG1lbcOycmlhIGludGVybcOoZGlhIGRlIG1hcmNzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImFjY2VkZWl4IGEgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IlBlcm1ldCBxdWUgbFwnYXBsaWNhY2nDsyB1dGlsaXR6aSBmdW5jaW9ucyBkZSBiYWl4IG5pdmVsbCBkXCdJbnB1dEZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJjb25maWd1cmFjacOzIGRlIGxlcyBwYW50YWxsZXMgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJQZXJtZXQgYSBsXCdhcGxpY2FjacOzIGNvbmZpZ3VyYXItc2UgaSBjb25uZWN0YXItc2UgYSBsZXMgcGFudGFsbGVzIFdpLUZpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iY29udHJvbCBkZSBsZXMgcGFudGFsbGVzIFdpLUZpIjwvc3RyaW5nPgpAQCAtOTgxLDEwICs5OTAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODY1NTg4NzUzOTA4OTkxMDU3NyI+Ijx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gdm9sIGFjdGl2YXIgbFwnZXhwbG9yYWNpw7MgdMOgY3RpbC4gUXVhbiBsXCdleHBsb3JhY2nDsyB0w6BjdGlsIGVzdMOgIGFjdGl2YWRhLCBwb3RzIGVzY29sdGFyIG8gdmV1cmUgbGVzIGRlc2NyaXBjaW9ucyBkZWwgY29udGluZ3V0IHNlbGVjY2lvbmF0IG8gdXRpbGl0emFyIGdlc3RvcyBwZXIgaW50ZXJhY3R1YXIgYW1iIGxhIHRhdWxldGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjcwODE5OTY3Mjg1MjM3MzE5NSI+Ijx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gdm9sIGFjdGl2YXIgbFwnZXhwbG9yYWNpw7MgdMOgY3RpbC4gUXVhbiBsXCdleHBsb3JhY2nDsyBwZXIgdMOgY3RpbCBlc3TDoCBhY3RpdmFkYSwgcG90cyBlc2NvbHRhciBvIHZldXJlIGxlcyBkZXNjcmlwY2lvbnMgZGVsIGNvbnRpbmd1dCBzZWxlY2Npb25hdCBvIHV0aWxpdHphciBnZXN0b3MgcGVyIGludGVyYWN0dWFyIGFtYiBlbCB0ZWzDqGZvbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjczOTYzODQ1MDg5NTM3Nzk5MjUiPiJGYSAxIG1lcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJlZm9yZU9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iOTA5MTM0NTQ2ODM2NDk5ODI2Ij4iRmEgbWVueXMgZFwnMSBtZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiZWZvcmVPbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjkwOTEzNDU0NjgzNjQ5OTgyNiI+IkZhIG3DqXMgZFwnMSBtZXMiPC9zdHJpbmc+CiAgIDxwbHVyYWxzIG5hbWU9Im51bV9zZWNvbmRzX2FnbyI+CiAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ4Njk4NzAwNTY1NDc4OTYwMTEiPiJGYSAxIHNlZ29uIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzOTAzNzA2ODA0MzQ5NTU2Mzc5Ij4iZmEgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2Vnb25zIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzOTAzNzA2ODA0MzQ5NTU2Mzc5Ij4iRmEgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2Vnb25zIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICA8cGx1cmFscyBuYW1lPSJudW1fbWludXRlc19hZ28iPgogICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMzA2Nzg3NDMzMDg4ODEwMTkxIj4iRmEgMSBtaW51dCI8L2l0ZW0+CkBAIC0xMDAwLDcgKzEwMDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibGFzdF9tb250aCIgbXNnaWQ9IjM5NTkzNDY3Mzk5NzkwNTU0MzIiPiJFbCBtZXMgcGFzc2F0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ib2xkZXIiIG1zZ2lkPSI1MjExOTc1MDIyODE1NTU0ODQwIj4iTcOpcyBhbnRpZ3VlcyI8L3N0cmluZz4KICAgPHBsdXJhbHMgbmFtZT0ibnVtX2RheXNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODYxMzU4NTM0Mzk4MTE1ODIwIj4iYWhpciI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg2MTM1ODUzNDM5ODExNTgyMCI+IkFoaXIiPC9pdGVtPgogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI0Nzk1ODY0NjYxNTMzMTQ2MzMiPiJGYSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBkaWVzIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICA8cGx1cmFscyBuYW1lPSJpbl9udW1fc2Vjb25kcyI+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJNYWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJSZXRvcm4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJTZWxlY2Npb25hIHVuYSBhcGxpY2FjacOzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iTm8gc1wnaGEgcG9ndXQgaW5pY2lhciA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkNvbXBhcnRlaXggYW1iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkNvbXBhcnRlaXggYW1iIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iTGxpc2NhIGVsIGRpdC4gTWFudMOpbiBwcmVtdXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkZlcyBsbGlzY2FyIGVsIGRpdCBjYXAgYW11bnQgcGVyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJGZXMgbGxpc2NhciBlbCBkaXQgY2FwIGF2YWxsIHBlciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRmVzIGxsaXNjYXIgZWwgZGl0IGNhcCBhIGxcJ2VzcXVlcnJhIHBlciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkZlcyBsbGlzY2FyIGVsIGRpdCBjYXAgYSBsYSBkcmV0YSBwZXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iRGVzYmxvcXVlamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iQ8OgbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTaWxlbmNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkFjdGl2YSBlbCBzbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iQ2VyY2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJMbGlzY2EgZWwgZGl0IHBlciBkZXNibG9xdWVqYXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IkNvbm5lY3RhIHVuIGF1cmljdWxhciBwZXIgZXNjb2x0YXIgbGVzIGNsYXVzIGRlIGxhIGNvbnRyYXNlbnlhIGVuIHZldSBhbHRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlB1bnQuIjwvc3RyaW5nPgpAQCAtMTQ4Myw5ICsxNDg0LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iw4B1ZGlvIHBlciBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlBhbnRhbGxhIHNlbnNlIGZpbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJGZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJTb3J0aWRhIGRlIGNvbnRpbmd1dCBtdWx0aW3DqGRpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJTXCdlc3TDoCBleHBsb3JhbnQuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IkNvbm5leGnDsyBhbCBkaXNwb3NpdGl1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iRW1pc3Npw7MgZGUgcGFudGFsbGEgYWwgZGlzcG9zaXRpdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IlNcJ2VzdGFuIGNlcmNhbnQgZGlzcG9zaXRpdXPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJDb25maWd1cmFjacOzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkRlc2Nvbm5lY3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNcJ2VzdMOgIGNlcmNhbnTigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJTXCdlc3TDoCBjb25uZWN0YW50Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJEaXNwb25pYmxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI2NzM5ODk5OTYyNjgxODg2NDAxIj4iTm8gZGlzcG9uaWJsZSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlN1cGVycG9zYSAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz4geCA8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgc2VndXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkxhIHBhbnRhbGxhIHNlbnNlIGZpbCBlc3TDoCBjb25uZWN0YWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkFxdWVzdGEgcGFudGFsbGEgZXMgbW9zdHJhIGVuIHVuIGFsdHJlIGRpc3Bvc2l0aXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iRW1pc3Npw7MgZGUgcGFudGFsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJTXCdlc3TDoCBjb25uZWN0YW50IGEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iRW1pc3Npw7MgZGUgcGFudGFsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IkNvbm5lY3RhdCBhIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJEZXNjb25uZWN0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iVHJ1Y2FkYSBkXCdlbWVyZ8OobmNpYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IlBhdHLDsyBvYmxpZGF0Ijwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjU3LDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJUb3JuYS1obyBhIHByb3ZhciBtw6lzIHRhcmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iRmVzIGxsaXNjYXIgZWwgZGl0IGNhcCBhdmFsbCBwZXIgc29ydGlyIGRlIGxhIHBhbnRhbGxhIGNvbXBsZXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iRmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iQ29udHJvbCBjaXJjdWxhciBkZSBsZXMgaG9yZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IkNvbnRyb2wgY2lyY3VsYXIgZGVscyBtaW51dHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iU2VsZWNjaW9uYSBsZXMgaG9yZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJTZWxlY2Npb25hIGVscyBtaW51dHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IkdyYWVsbGEgbWVuc3VhbCBkZSBkaWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iTGxpc3RhIGFudWFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJTZWxlY2Npb25hIHVuIG1lcyBpIHVuIGRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlNlbGVjY2lvbmEgdW4gYW55Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBzZWxlY2Npb25hdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IHN1cHJpbWl0Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAppbmRleCA3M2NhMDJiLi5iNDVlN2E1IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IlphZGVqdGUgb3NtaW3DrXN0bsO9IG5lYm8gZGVsxaHDrSBrw7NkIFBVSy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iU0lNIGthcnRhIGplIGJsb2tvdsOhbmEgcG9tb2PDrSBrw7NkdSBQVUsuIE9kYmxva3VqZXRlIGppIHphZMOhbsOtbSBrw7NkdSBQVUsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iQ2hjZXRlLWxpIG9kYmxva292YXQgU0lNIGthcnR1LCB6YWRlanRlIGvDs2QgUFVLMi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJPcGVyYWNlIG5lYnlsYSDDunNwxJvFoW7DoSwgcG92b2x0ZSB6w6FtZWsgU0lNL1JVSU0ga2FydHkuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iTcOhdGUgamXFoXTEmyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9rdXMuIFBvdMOpIGJ1ZGUgU0lNIGthcnRhIHV6YW3EjWVuYS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJQb8SNZXQgemLDvXZhasOtY8OtY2ggcG9rdXPFrywgcG8gamVqaWNoxb4gdnnEjWVycMOhbsOtIGJ1ZGUgU0lNIGthcnRhIHV6YW3EjWVuYTogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iUMWZw61jaG96w60gaWRlbnRpZmlrYWNlIHZvbGFqw61jw61obyI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iVW1vxb7FiHVqZSBkcsW+aXRlbGkgbmF2w6F6YXQgc2UgbmEgbmVqdnnFocWhw60gw7pyb3ZlxYggc2x1xb5ieSBWUE4uIELEm8W+bsOpIGFwbGlrYWNlIGJ5IHRvdG8gb3Byw6F2bsSbbsOtIG5lbcSbbHkgbmlrZHkgcG/FvmFkb3ZhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4idmF6YmEgbmEgdGFwZXR1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJVbW/FvsWIdWplIGRyxb5pdGVsaSBuYXbDoXphdCBzZSBuYSBuZWp2ecWhxaHDrSDDunJvdmXFiCByb3pocmFuw60gdGFwZXR5LiBCxJvFvm7DqSBhcGxpa2FjZSBieSB0b3RvIG9wcsOhdm7Em27DrSBuZW3Em2x5IG5pa2R5IHBvxb5hZG92YXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJwxZlpcG9qaXQgc2Uga2Ugdnpkw6FsZW7DqW11IGRpc3BsZWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iVW1vxb7FiHVqZSBkcsW+aXRlbGkgcMWZaXBvaml0IHNlIGsgdnlzb2tvw7pyb3bFiG92w6ltdSByb3pocmFuw60gdnpkw6FsZW7DqWhvIGRpc3BsZWplLiBCxJvFvm7DqSBhcGxpa2FjZSBieSB0b3RvIG9wcsOhdm7Em27DrSBuZW3Em2x5IG5pa2R5IHBvdMWZZWJvdmF0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+Im5hdsOhemF0IHNlIG5hIHNsdcW+YnUgd2lkZ2V0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJVbW/FvsWIdWplIGRyxb5pdGVsaSBuYXbDoXphdCBzZSBuYSBuZWp2ecWhxaHDrSDDunJvdmXFiCBzbHXFvmJ5IHdpZGdldHUuIELEm8W+bsOpIGFwbGlrYWNlIGJ5IHRvdG8gb3Byw6F2bsSbbsOtIG5lbcSbbHkgbmlrZHkgcG/FvmFkb3ZhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJrb211bmlrb3ZhdCBzZSBzcHLDoXZjZW0gemHFmcOtemVuw60iPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlVtb8W+xYh1amUgYXBsaWthY2kgcG91xb7DrXZhdCBuw616a2/DunJvdsWIb3bDqSBmdW5rY2UgU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ixI10ZW7DrSB2eXJvdm7DoXZhY8OtIHBhbcSbdGkgc27DrW1rxa8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iVW1vxb7FiHVqZSBhcGxpa2FjaSDEjcOtc3Qgb2JzYWggdnlyb3Zuw6F2YWPDrSBwYW3Em3RpIHNuw61ta8WvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+InDFmcOtc3R1cCBrIGZ1bmtjaSBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iVW1vxb7FiHVqZSBhcGxpa2FjaSBwb3XFvsOtdmF0IG7DrXprb8O6cm92xYhvdsOpIGZ1bmtjZSBJbnB1dEZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJrb25maWd1cm92YXQgZGlzcGxlamUgcMWZZXMgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJQb3ZvbHVqZSBhcGxpa2FjaSBwxZlpcG9qaXQgYSBrb25maWd1cm92YXQgZGlzcGxlamUgcMWZZXMgV2ktRmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJvdmzDoWRhdCBkaXNwbGVqZSBwxZllcyBXaS1GaSI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJWeWJyYXQgYXBsaWthY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiJBcGxpa2FjaSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IG5lbHplIHNwdXN0aXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iU2TDrWxldCBzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IlNkw61sZXQgcyBhcGxpa2Fjw60gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJQb3N1dm7DrWsuIERvdGtuxJt0ZSBzZSBhIHBvZHLFvnRlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJQxZllamXEj3RlIHByc3RlbSBuYWhvcnU6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IlDFmWVqZcSPdGUgcHJzdGVtIGRvbMWvOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJQxZllamXEj3RlIHByc3RlbSBkb2xldmE6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJQxZllamXEj3RlIHByc3RlbSBkb3ByYXZhOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Ik9kZW1rbm91dCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJGb3RvYXBhcsOhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJUaWNow70iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iWmFwbm91dCB6dnVrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJWeWhsZWTDoXbDoW7DrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+Ik9kZW1rbmV0ZSBwb3N1bnV0w61tIHByc3R1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJDaGNldGUtbGkgc2x5xaFldCwga3RlcsOpIGtsw6F2ZXN5IGpzdGUgcMWZaSB6YWTDoXbDoW7DrSBoZXNsYSBzdGlza2xpLCBwxZlpcG9qdGUgc2x1Y2jDoXRrYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJUZcSNa2EuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3lzdMOpbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoIEF1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJCZXpkcsOhdG92w70gZGlzcGxlaiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJIb3Rvdm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJWw71zdHVwIG3DqWRpw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IlDFmWlwb2plbsOtIGsgemHFmcOtemVuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJPZGVzw61sw6Fuw60gb2JzYWh1IG9icmF6b3ZreSBkbyB6YcWZw616ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IlZ5aGxlZMOhdsOhbsOtIHphxZnDrXplbsOt4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iTmFzdGF2ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJPZHBvaml0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlZ5aGxlZMOhdsOhbsOt4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iUMWZaXBvam92w6Fuw63igKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkRvc3R1cG7DoSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlDFmWVrcnl2bsOhIHZyc3R2YSDEjS4gPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHphYmV6cGXEjWVuw6kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkJlemRyw6F0b3bDvSBkaXNwbGVqIGplIHDFmWlwb2plbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJUYXRvIG9icmF6b3ZrYSBzZSB6b2JyYXp1amUgdiBqaW7DqW0gemHFmcOtemVuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iT2Rlc8OtbMOhbsOtIG9ic2FodSBvYnJhem92a3kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJQxZlpcG9qb3bDoW7DrSBrIG9icmF6b3ZjZSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJPZGVzw61sw6Fuw60gb2JzYWh1IG9icmF6b3ZreSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iUMWZaXBvamVubyBrIG9icmF6b3ZjZSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iT2Rwb2ppdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iVMOtc8WIb3bDqSB2b2zDoW7DrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IlphcG9tZW51dMOpIGdlc3RvIjwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjU3LDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJaa3VzdGUgdG8gem5vdnUgcG96ZMSbamkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iUmXFvmltIGNlbMOpIG9icmF6b3ZreSB1a29uxI3DrXRlIHDFmWVqZXTDrW0gZG9sxa8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJIb3Rvdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJLcnVob3bDvSBwb3N1dm7DrWsgaG9kaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IktydWhvdsO9IHBvc3V2bsOtayBtaW51dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJadm9sdGUgaG9kaW55Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iWnZvbHRlIG1pbnV0eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iRG55IHVzcG/FmcOhZGFuw6kgcG8gbcSbc8OtY8OtY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJTZXpuYW0gcm9rxa8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlZ5YmVydGUgbcSbc8OtYyBhIGRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlZ5YmVydGUgcm9rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+IlZ5YnLDoW5hIHBvbG/FvmthIDx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+IsSMw61zbGljZSA8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBieWxhIHNtYXrDoW5hIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAppbmRleCAwY2Y1YmM1Li43NDA1OGEzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IkFuZ2l2IGVuIFBVSy1rb2RlIHDDpSA4IGVsbGVyIGZsZXJlIGNpZnJlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJEaXQgU0lNLWtvcnQgZXIgbMOlc3QgbWVkIFBVSy1rb2Rlbi4gSW5kdGFzdCBQVUsta29kZW4gZm9yIGF0IGzDpXNlIGRlbiBvcC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJJbmR0YXN0IFBVSzIta29kZW4gZm9yIGF0IGzDpXNlIG9wIGZvciBTSU0ta29ydGV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+Ik1pc2x5a2tlZGVzLiBBa3RpdsOpciBTSU0tL1JVSU0tbMOlcy4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJEdSBoYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGZvcnPDuGcgdGlsYmFnZSwgZsO4ciBTSU0ta29ydGV0IGJsaXZlciBsw6VzdC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJEdSBoYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGZvcnPDuGcgdGlsYmFnZSwgZsO4ciBTSU0ta29ydGV0IGJsaXZlciBsw6VzdC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUktbnVtbWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJbmRnw6VlbmRlIG9wa2FsZHMtaWQiPC9zdHJpbmc+CkBAIC0yMzAsMTMgKzIzNSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0b3JhZ2UiIG1zZ2lkPSIxOTcxMTE4NzcwNTQ2MzM2OTY2Ij4iTGFncmluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3NDQyMzE4NTAyNDQ2ODc0OTk5Ij4iRsOlIGFkZ2FuZyB0aWwgVVNCLWxhZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiJGw6UgYWRnYW5nIHRpbCBTRC1rb3J0ZXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiJUaWxnw6ZuZ2VsaWdoZWRzZnVua3Rpb25lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI3OTE5MDI1NjAyMjgzNTkzOTA3Ij4iSGrDpmxwZWZ1bmt0aW9uZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9IjQyMDUxOTY4ODE2NzgxNDQzMzUiPiJGdW5rdGlvbmVyLCBzb20gaGrDpmxwZXRla25vbG9naWVyIGthbiBhbm1vZGUgb20uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzOTAxNzE3OTM2OTMwMTcwMzIwIj4iaGVudGUgaW5kaG9sZGV0IGkgdmluZHVldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzNzcyMjI1MDA4NjA1MzEwNjcyIj4idW5kZXJzw7hnZSBpbmRob2xkZXQgaSBldCB2aW5kdWUsIGR1IGludGVyYWdlcmVyIG1lZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iMzEwODcyMzM2NDY3NjY2NzMyMCI+ImFrdGl2ZXJlIFVkZm9yc2sgdmVkIGJlcsO4cmluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjU4MDA1NTI1MTY3NzkyNDkzNTYiPiJEZSBlbW5lciwgZGVyIHRyeWtrZXMgcMOlLCBsw6ZzZXMgaMO4anQsIG9nIHNrw6ZybWVuIGthbiB1ZGZvcnNrZXMgdmVkIGhqw6ZscCBhZiBiZXbDpmdlbHNlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNzM5ODgxNzY2NTIyNTk0MDczIj4iYWt0aXZlcmUgZm9yYmVkcmV0IHdlYnRpbGfDpm5nZWxpZ2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE3Mzk4ODE3NjY1MjI1OTQwNzMiPiJha3RpdmVyZSBmb3JiZWRyZXQgd2ViaGrDpmxwZWZ1bmt0aW9uZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9Ijc4ODEwNjM5NjE1MDc1MTE3NjUiPiJEZXIgaW5zdGFsbGVyZXMgbXVsaWd2aXMgc2NyaXB0cyBmb3IgYXQgZ8O4cmUgYXBwaW5kaG9sZCBtZXJlIHRpbGfDpm5nZWxpZ3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iMjEwMzQ0MDM5MTkwMjQxMjE3NCI+Im9ic2VydmVyZSB0ZWtzdCwgZHUgc2tyaXZlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IkRldHRlIG9tZmF0dGVyIHBlcnNvbmxpZ2UgZGF0YSBzw6Vzb20ga3JlZGl0a29ydG51bXJlIG9nIGFkZ2FuZ3Nrb2Rlci4iPC9zdHJpbmc+CkBAIC0zMDgsOCArMzEzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2R1bXAiIG1zZ2lkPSIxNzc4Mjk5MDg4NjkyMjkwMzI5Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBoZW50ZSBzeXN0ZW1ldHMgaW50ZXJuZSB0aWxzdGFuZC4gT25kc2luZGVkZSBhcHBzIGthbiBoZW50ZSBlbiBsYW5nIHLDpmtrZSBmb3J0cm9saWdlIG9nIGJlc2t5dHRlZGUgb3BseXNuaW5nZXIsIHNvbSBkZSBub3JtYWx0IGFsZHJpZyB2aWxsZSBoYXZlIGJydWcgZm9yLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSI4MDIyNTg4NjA4OTk0NTg5OTM4Ij4iaGVudGUgc2vDpnJtaW5kaG9sZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iMzE5MzI2OTA2OTQ2OTcwMDI2NSI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gaGVudGUgaW5kaG9sZGV0IGkgZGV0IGFrdGl2ZSB2aW5kdWUuIE9uZHNpbmRlZGUgYXBwcyBrYW4gaGVudGUgYWwgaW5kaG9sZGV0IGkgdmluZHVldCBvZyB1bmRlcnPDuGdlIGFsIGRlbnMgdGVrc3QgbWVkIHVuZHRhZ2Vsc2UgYWYgYWRnYW5nc2tvZGVyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMjMxMjYxMjEzNTEyNzMxMDI1NCI+ImFrdGl2w6lyIHRpbGfDpm5nZWxpZ2hlZCBtaWRsZXJ0aWRpZ3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSI4MDc5NDU2MjkzMTgyOTc1NDY0Ij4iVGlsbGFkZXIsIGF0IGVuIGFwcGxpa2F0aW9uIG1pZGxlcnRpZGlndCBrYW4gYWt0aXZlcmUgdGlsZ8OmbmdlbGlnaGVkIHDDpSBlbmhlZGVuLiBTa2FkZWxpZ2UgYXBwcyBrYW4gbXVsaWd2aXMgYWt0aXZlcmUgdGlsZ8OmbmdlbGlnaGVkIHVkZW4gYnJ1Z2VyZW5zIHNhbXR5a2tlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMjMxMjYxMjEzNTEyNzMxMDI1NCI+ImFrdGl2ZXJlIGhqw6ZscGVmdW5rdGlvbmVyIG1pZGxlcnRpZGlndCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjgwNzk0NTYyOTMxODI5NzU0NjQiPiJUaWxsYWRlciwgYXQgZW4gYXBwIG1pZGxlcnRpZGlndCBrYW4gYWt0aXZlcmUgaGrDpmxwZWZ1bmt0aW9uZXIgcMOlIGVuaGVkZW4uIFNrYWRlbGlnZSBhcHBzIGthbiBtdWxpZ3ZpcyBha3RpdmVyZSBoasOmbHBlZnVua3Rpb25lciB1ZGVuIGJydWdlcmVucyBzYW10eWtrZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iODUzMjI5NTE5OTExMjUxOTM3OCI+ImhlbnQgb3BseXNuaW5nZXIgb20gdmluZHVlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iNDk5ODgzNjM3MDQyNDE4Njg0OSI+IlRpbGxhZGVyLCBhdCBlbiBhcHBsaWthdGlvbiBoZW50ZXIgb3BseXNuaW5nZXIgb20gdmluZHVlcm5lIGkgdmluZHVlc2FkbWluaXN0cmF0b3Jlbi4gU2thZGVsaWdlIGFwcHMga2FuIG11bGlndmlzIGhlbnRlIG9wbHlzbmluZ2VyLCBkZXIgZXIgYmVyZWduZXQgdGlsIGludGVybiBzeXN0ZW1icnVnLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmlsdGVyX2V2ZW50cyIgbXNnaWQ9Ijg2NzU1MzU2NDg4MDc0MjczODkiPiJmaWx0cmVyIGJlZ2l2ZW5oZWRlciI8L3N0cmluZz4KQEAgLTM2Myw4ICszNjgsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI4Mzg3NzU0OTAxNjg4NzI4MDQzIj4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBzZSBkZSB0YXN0ZXIsIHNvbSBkdSB0cnlra2VyIHDDpSwgc2VsdiBpIGVuIGFuZGVuIGFwcCAoc8Olc29tIGluZHRhc3RuaW5nIGFmIGFkZ2FuZ3Nrb2RlKS4gRGV0dGUgYsO4ciBhbGRyaWcgdsOmcmUgbsO4ZHZlbmRpZ3QgZm9yIG5vcm1hbGUgYXBwcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMzNjAwNjQ2MjAyMzA1MTU3NzYiPiJmb3JwbGlndCB0aWwgZW4gaW5wdXRtZXRvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMjUwNDQwMzIyODA3Mjg2MzMxIj4iVGlsbGFkZXIsIGF0IGJydWdlcmVuIGthbiBmb3JwbGlndGVyIHNpZyB0aWwgZW4gaW5wdXRtZXRvZGVzIGdyw6Zuc2VmbGFkZSBww6Ugw7h2ZXJzdGUgbml2ZWF1LiBCw7hyIGFsZHJpZyB2w6ZyZSBuw7hkdmVuZGlndCB0aWwgYWxtaW5kZWxpZ2UgYXBwcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjUzNTc3MzM5NDI1NTYwMzE1OTMiPiJiaW5kIGRpZyB0aWwgZW4gdGlsZ8OmbmdlbGlnaGVkc3RqZW5lc3RlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNzAzNDYxNTkyODYwOTMzMTM2OCI+IlRpbGxhZGVyLCBhdCBicnVnZXJlbiBiaW5kZXIgc2lnIHRpbCBlbiBncsOmbnNlZmxhZGUgZm9yIGVuIHRpbGfDpm5nZWxpZ2hlZHN0amVuZXN0ZSBww6Ugw7h2ZXJzdGUgbml2ZWF1LiBCw7hyIGFsZHJpZyB2w6ZyZSBuw7hkdmVuZGlndCB0aWwgYWxtaW5kZWxpZ2UgYXBwcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjUzNTc3MzM5NDI1NTYwMzE1OTMiPiJiaW5kZSBkaWcgdGlsIGVuIGhqw6ZscGV0amVuZXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjcwMzQ2MTU5Mjg2MDkzMzEzNjgiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIGJpbmRlIHNpZyB0aWwgZW4gZ3LDpm5zZWZsYWRlIGZvciBlbiBoasOmbHBldGplbmVzdGUgcMOlIMO4dmVyc3RlIG5pdmVhdS4gQsO4ciBhbGRyaWcgdsOmcmUgbsO4ZHZlbmRpZ3QgdGlsIGFsbWluZGVsaWdlIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iODQ2MjgxNTE3OTU3Mjc0ODc2MSI+ImZvcmJpbmRlIHRpbCBlbiB1ZHNrcmlmdHN0amVuZXN0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI3OTYwMDY3NjIzMjA5MTExMTM1Ij4iVGlsbGFkZXIsIGF0IGJydWdlcmVuIGZvcmJpbmRlciB0aWwgZ3LDpm5zZWZsYWRlbiBmb3IgZW4gdWRza3JpZnRzdGplbmVzdGUgcMOlIMO4dmVyc3RlIG5pdmVhdS4gRGV0dGUgYsO4ciBhbGRyaWcgdsOmcmUgbsO4ZHZlbmRpZ3QgZm9yIGFsbWluZGVsaWdlIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTcG9vbGVyU2VydmljZSIgbXNnaWQ9IjY4MDc3NjI3ODM3NDQxMjU5NTQiPiJmb3JiaW5kZSB0aWwgZW4gdWRza3JpZnRzc3Bvb2xlcnRqZW5lc3RlIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJUaWxsYWRlciwgYXQgYnJ1Z2VyZW4gZm9ycGxpZ3RlciBzaWcgdGlsIGVuIFZQTi10amVuZXN0ZXMgZ3LDpm5zZWZsYWRlIHDDpSDDuHZlcnN0ZSBuaXZlYXUuIELDuHIgYWxkcmlnIHbDpnJlIG7DuGR2ZW5kaWd0IGkgYWxtaW5kZWxpZ2UgYXBwcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iZm9ycGxpZ3QgdGlsIGV0IHRhcGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJUaWxsYWRlciwgYXQgaW5kZWhhdmVyZW4ga2FuIGJpbmRlIGVuIGJhZ2dydW5kcyBncsOmbnNlZmxhZGUgcMOlIMO4dmVyc3RlIG5pdmVhdS4gRGV0dGUgYsO4ciBhbGRyaWcgdsOmcmUgbsO4ZHZlbmRpZ3QgZm9yIGFsbWluZGVsaWdlIGFwcHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJiaW5kIHRpbCBlbiBla3N0ZXJuIHNrw6ZybSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IlRpbGxhZGVyLCBhdCBicnVnZXJlbiBrYW4gZm9yZXRhZ2UgZW4gYmluZGluZyB0aWwgZ3LDpm5zZWZsYWRlbnMgw7h2ZXJzdGUgbml2ZWF1IHDDpSBlbiBla3N0ZXJuIHNrw6ZybS4gQsO4ciBhbGRyaWcgdsOmcmUgbsO4ZHZlbmRpZ3QgdGlsIGFsbWluZGVsaWdlIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4iZm9ycGxpZ3QgdGlsIGVuIHdpZGdldHRqZW5lc3RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IlRpbGxhZGVyLCBhdCBicnVnZXJlbiBrYW4gZm9ycGxpZ3RlIHNpZyB0aWwgZW4gZ3LDpm5zZWZsYWRlIGZvciBlbiB3aWRnZXR0amVuZXN0ZSBww6Ugw7h2ZXJzdGUgbml2ZWF1LiBCw7hyIGFsZHJpZyB2w6ZyZSBuw7hkdmVuZGlndCB0aWwgYWxtaW5kZWxpZ2UgYXBwcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJrb21tdW5pa2VyZSBtZWQgZW4gZW5oZWRzYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KQEAgLTQ0MCw3ICs0NDcsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ29udGFjdHMiIG1zZ2lkPSI4MzQ4NDgxMTMxODk5ODg2MTMxIj4ibMOmc2UgZGluZSBrb250YWt0cGVyc29uZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUyOTQ4NjY4NTY5NDExNDk2MzkiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIGzDpnNlIGRhdGEgb20gZGUga29udGFrdHBlcnNvbmVyLCBkZXIgZXIgZ2VtdCBww6UgZGluIHRhYmxldCwgZi5la3MuIGh2b3Igb2Z0ZSBkdSBoYXIgcmluZ2V0IHRpbCwgc2VuZHQgZS1tYWlsIHRpbCBlbGxlciBww6UgYW5kZW4gbcOlZGUga29tbXVuaWtlcmV0IG1lZCBiZXN0ZW10ZSBwZXJzb25lci4gTWVkIGRlbm5lIHRpbGxhZGVsc2Uga2FuIGFwcHMgZ2VtbWUgZGluZSBrb250YWt0ZGF0YSwgb2cgc2thZGVsaWdlIGFwcHMga2FuIGRlbGUga29udGFrdGRhdGEgdWRlbiBkaW4gdmlkZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ0MDY1NDE1MjQ1NzMwMDY2MiI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gbMOmc2UgZGF0YSBvbSBkZSBrb250YWt0cGVyc29uZXIsIGRlciBlciBnZW10IHDDpSBkaW4gdGVsZWZvbiwgZi5la3MuIGh2b3Igb2Z0ZSBkdSBoYXIgcmluZ2V0IHRpbCwgc2VuZHQgZS1tYWlsIHRpbCBlbGxlciBww6UgYW5kZW4gbcOlZGUga29tbXVuaWtlcmV0IG1lZCBiZXN0ZW10ZSBwZXJzb25lci4gTWVkIGRlbm5lIHRpbGxhZGVsc2Uga2FuIGFwcHMgZ2VtbWUgZGluZSBrb250YWt0ZGF0YSwgb2cgc2thZGVsaWdlIGFwcHMga2FuIGRlbGUga29udGFrdGRhdGEgdWRlbiBkaW4gdmlkZW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNvbnRhY3RzIiBtc2dpZD0iNTEwNzQ5MjA4NjQxNjc5MzU0NCI+IsOmbmRyZSBkaW5lIGtvbnRha3RwZXJzb25lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDb250YWN0cyIgbXNnaWQ9IjUxMDc0OTIwODY0MTY3OTM1NDQiPiJhdCDDpm5kcmUgZGluZSBrb250YWt0cGVyc29uZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTcyNDM5MzI1MjE5NTM2MDIiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIMOmbmRyZSBkYXRhIG9tIGRlIGtvbnRha3RwZXJzb25lciwgZGVyIGVyIGdlbXQgcMOlIGRpbiB0YWJsZXQsIGYuZWtzLiBodm9yIG9mdGUgZHUgaGFyIHJpbmdldCB0aWwgZGVtLCBzZW5kdCBkZW0gZW4gZS1tYWlsIGVsbGVyIHDDpSBhbmRlbiBtw6VkZSBrb21tdW5pa2VyZXQgbWVkIGJlc3RlbXRlIGtvbnRha3RwZXJzb25lci4gTWVkIGRlbm5lIHRpbGxhZGVsc2Uga2FuIGFwcHMgc2xldHRlIGtvbnRha3RvcGx5c25pbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTg5ODY5MjI0NjI1MTYzNTU4Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiDDpm5kcmUgZGF0YSBvbSBkZSBrb250YWt0cGVyc29uZXIsIGRlciBlciBnZW10IHDDpSBkaW4gdGVsZWZvbiwgZi5la3MuIGh2b3Igb2Z0ZSBkdSBoYXIgcmluZ2V0IHRpbCBkZW0sIHNlbmR0IGVuIGUtbWFpbCB0aWwgZGVtIGVsbGVyIHDDpSBhbmRlbiBtw6VkZSBrb21tdW5pa2VyZXQgbWVkIGJlc3RlbXRlIGtvbnRha3RwZXJzb25lci4gTWVkIGRlbm5lIHRpbGxhZGVsc2Uga2FuIGFwcHMgc2xldHRlIGtvbnRha3RvcGx5c25pbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxsTG9nIiBtc2dpZD0iMzQ3ODEzMzE4NDYyNDEwMjczOSI+ImzDpnMgb3BrYWxkc2xpc3RlIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIGJydWdlIFN1cmZhY2VGbGluZ2VyLWZ1bmt0aW9uZXIgcMOlIGxhdnQgbml2ZWF1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImzDpnMgcmFtbWVidWZmZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBsw6ZzZSBpbmRob2xkZXQgZnJhIHJhbW1lYnVmZmVyZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iZsOlIGFkZ2FuZyB0aWwgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkdpdmVyIGFwcGVuIHRpbGxhZGVsc2UgdGlsIGF0IGJydWdlIFN1cmZhY2VGbGluZ2VyLWZ1bmt0aW9uZXIgcMOlIGxhdnQgbml2ZWF1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ia29uZmlndXJlciBXaS1GaS1za8Omcm1lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGtvbmZpZ3VyZXJlciBvZyBvcHJldHRlciBmb3JiaW5kZWxzZSB0aWwgV2ktRmktc2vDpnJtZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ImtvbnRyb2xsw6lyIFdpLUZpLXNrw6ZybWUiPC9zdHJpbmc+CkBAIC02NzksMTEgKzY4OCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dhdGNoTG9naW4iIG1zZ2lkPSI5MTQxMzA2NDY5NDIxOTk1MDMiPiJPdmVydsOlZyBmb3Jzw7hnIHDDpSBvcGzDpXNuaW5nIGFmIHNrw6ZybSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzIxNTcyOTI5NDIxNTA3MDA3MiI+Ik92ZXJ2w6VnIGFudGFsbGV0IGFmIGZvcmtlcnQgaW5kdGFzdGVkZSBhZGdhbmdza29kZXIsIG7DpXIgZHUgbMOlc2VyIHNrw6ZybWVuIG9wLCBvZyBsw6VzIGRpbiB0YWJsZXQsIGVsbGVyIHNsZXQgYWxsZSBkYXRhIGkgZGVuLCBodmlzIGRlciBlciBpbmR0YXN0ZXQgZm9yIG1hbmdlIGZvcmtlcnRlIGFkZ2FuZ3Nrb2Rlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzEyMzIzMDkxODQ2NzYxMDczIj4iT3ZlcnbDpWcgYW50YWxsZXQgYWYgZm9ya2VydGUgYWRnYW5nc2tvZGVyIHZlZCBvcGzDpXNuaW5nIGFmIHNrw6ZybWVuLCBvZyBsw6VzIHRlbGVmb25lbiBlbGxlciBzbGV0IGFsbGUgZGF0YSBww6UgdGVsZWZvbmVuLCBodmlzIGRlciBlciBpbmR0YXN0ZXQgZm9yIG1hbmdlIGZvcmtlcnRlIGFkZ2FuZ3Nrb2Rlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjI2MjAwNzcxOTEyNDI2ODg5NTUiPiJTa2lmdCBhZGdhbmdza29kZSB0aWwgb3Bsw6VzbmluZyBhZiBza8Omcm0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSI2MDU5NjM5NjIzMDE5MDQ0NTgiPiJTa2lmdCBhZGdhbmdza29kZSB0aWwgb3Bsw6VzbmluZyBhZiBza8Omcm1lbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjI2MjAwNzcxOTEyNDI2ODg5NTUiPiJTa2lmdGUgYWRnYW5nc2tvZGUgdGlsIG9wbMOlc25pbmcgYWYgc2vDpnJtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19yZXNldFBhc3N3b3JkIiBtc2dpZD0iNjA1OTYzOTYyMzAxOTA0NDU4Ij4iU2tpZnRlciBhZGdhbmdza29kZSB0aWwgb3Bsw6VzbmluZyBhZiBza8Omcm1lbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZm9yY2VMb2NrIiBtc2dpZD0iMjI3NDA4NTM4NDcwNDI0ODQzMSI+IkzDpXMgc2vDpnJtZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2ZvcmNlTG9jayIgbXNnaWQ9IjExNDE3OTc1ODg0MDM4MjcxMzgiPiJLb250cm9sbGVyLCBodm9yZGFuIG9nIGh2b3Juw6VyIHNrw6ZybWVuIGzDpXNlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2lwZURhdGEiIG1zZ2lkPSIzOTEwNTQ1NDQ2NzU4NjM5NzEzIj4iU2xldCBhbGxlIGRhdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2ZvcmNlTG9jayIgbXNnaWQ9IjExNDE3OTc1ODg0MDM4MjcxMzgiPiJLb250cm9sbGVyZXIsIGh2b3JkYW4gb2cgaHZvcm7DpXIgc2vDpnJtZW4gbMOlc2VzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93aXBlRGF0YSIgbXNnaWQ9IjM5MTA1NDU0NDY3NTg2Mzk3MTMiPiJTbGV0dGUgYWxsZSBkYXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMwNjE4NDA5NjA2Nzc1Njg3NiI+IlNsZXQgZGluIHRhYmxldHMgZGF0YSB1ZGVuIHZhcnNlbCB2ZWQgYXQgZ2VuZGFubmUgZmFicmlrc2luZHN0aWxsaW5nZXJuZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTA5Njg5NTYwNDU3NDE4ODM5MSI+IlNsZXQgdGVsZWZvbmVucyBkYXRhIHVkZW4gdmFyc2VsIHZlZCBhdCBnZW5kYW5uZSBmYWJyaWtzaW5kc3RpbGxpbmdlcm5lLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9zZXRHbG9iYWxQcm94eSIgbXNnaWQ9IjI3ODQ4MjgyOTM3NDc3OTE0NDYiPiJBbmdpdiBlbmhlZGVucyBnbG9iYWxlIHByb3h5Ijwvc3RyaW5nPgpAQCAtMTExNCw4ICsxMTIzLDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImxvYWRpbmciIG1zZ2lkPSI3OTMzNjgxMjYwMjk2MDIxMTgwIj4iSW5kbMOmc2Vy4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vbiIgbXNnaWQ9IjE1NDQ2ODI3NTU1MTQ0OTQyOTgiPiJUSUwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29mZiIgbXNnaWQ9IjY4MTU4NzAzODY5NzI4MDU4MzIiPiJGUkEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aGljaEFwcGxpY2F0aW9uIiBtc2dpZD0iNDUzMzE4NTk0NzA2NDc3MzM4NiI+IkZ1bGRmw7hyIGhhbmRsaW5nIHZlZCBoasOmbHAgYWYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aGljaEhvbWVBcHBsaWNhdGlvbiIgbXNnaWQ9IjQ2MTY0MjAxNzI3MjczMjY3ODIiPiJWw6ZsZyBlbiBzdGFydHNpZGVhcHAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aGljaEFwcGxpY2F0aW9uIiBtc2dpZD0iNDUzMzE4NTk0NzA2NDc3MzM4NiI+IkJydWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aGljaEhvbWVBcHBsaWNhdGlvbiIgbXNnaWQ9IjQ2MTY0MjAxNzI3MjczMjY3ODIiPiJWw6ZsZyBlbiBzdGFydGFwcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c1VzZSIgbXNnaWQ9IjQ1ODMwMTgzNjgwMDA2MTA0MzgiPiJCcnVnIHNvbSBzdGFuZGFyZCB0aWwgZGVubmUgaGFuZGxpbmcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiJSeWQgc3RhbmRhcmQgaSBTeXN0ZW1pbmRzdGlsbGluZ2VyICZndDsgQXBwcyAmZ3Q7IERvd25sb2FkZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlQWN0aXZpdHkiIG1zZ2lkPSI3NDg2ODc2MTQ3NzUxODAzMzMzIj4iVsOmbGcgZW4gaGFuZGxpbmciPC9zdHJpbmc+CkBAIC0xMjM0LDIwICsxMjQzLDIwIEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjU5MDE0NTkwNDEzOTg3NTE0OTUiPiJVU0IgZXIgdGlsc2x1dHRldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+IkR1IGhhciBmw6VldCBmb3JiaW5kZWxzZSB0aWwgZGluIGNvbXB1dGVyIHZpYSBVU0IuIFRyeWsgcMOlIGtuYXBwZW4gbmVkZW5mb3IsIGh2aXMgZHUgdmlsIGtvcGllcmUgZmlsZXIgbWVsbGVtIGRpbiBjb21wdXRlciBvZyBkaW4gQW5kcm9pZHMgVVNCLWxhZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiJEdSBoYXIgZsOlZXQgZm9yYmluZGVsc2UgdGlsIGRpbiBjb21wdXRlciB2aWEgVVNCLiBUcnlrIHDDpSBrbmFwcGVuIG5lZGVuZm9yLCBodmlzIGR1IHZpbCBrb3BpZXJlIGZpbGVyIG1lbGxlbSBkaW4gY29tcHV0ZXIgb2cgZGluIEFuZHJvaWRzIFNELWtvcnQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYnV0dG9uX21vdW50IiBtc2dpZD0iMTA1MjI1OTkzMDM2OTUwODIzNSI+IlNsw6UgVVNCLWxhZ3JpbmcgdGlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYnV0dG9uX21vdW50IiBtc2dpZD0iMTA1MjI1OTkzMDM2OTUwODIzNSI+IlNsw6UgVVNCLWxhZ2VyIHRpbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzAxNzA0NTIxNzM2NTU0MDY1OCI+IkRlciBlciBldCBwcm9ibGVtIG1lZCBhdCBicnVnZSBkaXQgVVNCLWxhZ2VyIHNvbSBVU0ItbWFzc2VsYWdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg3NjAxODUxMjcxNjk3MDMxMyI+IkRlciBlciBldCBwcm9ibGVtIG1lZCBhdCBicnVnZSBkaXQgU0Qta29ydCBzb20gVVNCLW1hc3NlbGFnZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODE3NTg5MjU1NDc1NzIxNjUyNSI+IlVTQiBlciB0aWxzbHV0dGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5Mzk4MjI3ODM4MjgxODM3NjMiPiJUcnlrIGZvciBhdCBrb3BpZXJlIGZpbGVyIHRpbC9mcmEgZGluIGNvbXB1dGVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjMzNjA1ODM5NjY2MzUxNjAxNyI+IlNsw6UgVVNCLWxhZ3JpbmdlbiBmcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTY1Njg1MjA5ODU1NTYyMzgyMiI+IlRyeWsgZm9yIGF0IHNsw6UgVVNCLWxhZ3JpbmcgZnJhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjU2ODUyMDk4NTU1NjIzODIyIj4iVHJ5ayBmb3IgYXQgc2zDpSBVU0ItbGFnZXIgZnJhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiJVU0ItbGFnZXIgaSBicnVnIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQyNjQwMjUyODA3NzcyMTk1MjEiPiJGw7hyIGR1IHNsw6VyIFVTQi1sYWdyaW5nIGZyYSwgc2thbCBkdSBkZW1vbnRlcmUgZGluIEFuZHJvaWRzIFVTQi1sYWdlciAoXCJza3ViYmUgZW5oZWRlbiB1ZFwiKSBmcmEgZGluIGNvbXB1dGVyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNDM5Njk3ODI0NjA2MTMxMTQiPiJGw7hyIGR1IHNsw6VyIFVTQi1sYWdyaW5nIGZyYSwgc2thbCBkdSBkZW1vbnRlcmUgZGluIEFuZHJvaWRzIFNELWtvcnQgKFwic2t1YmJlIGVuaGVkZW4gdWRcIikgZnJhIGRpbiBjb21wdXRlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiJTbMOlIFVTQi1sYWdyaW5nIGZyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjE5NzAzNzQ4OTgyNjMwNjM4MzYiPiJEZXIgb3BzdG9kIGV0IHByb2JsZW0gbWVkIGF0IHNsw6UgVVNCLWxhZ3JpbmcgZnJhLiBLb250cm9sbGVyLCBhdCBkdSBoYXIgZGVtb250ZXJldCBVU0ItdsOmcnRlbiwgb2cgcHLDuHYgZGVyZWZ0ZXIgaWdlbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiJTbMOlIFVTQi1sYWdyaW5nIHRpbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+Ikh2aXMgZHUgc2zDpXIgVVNCLWxhZ3JpbmcgdGlsLCBzdG9wcGVzIG5vZ2xlIGFmIGRlIGFwcHMsIHNvbSBkdSBicnVnZXIsIG9nIGRlIGthbiB2w6ZyZSB1dGlsZ8OmbmdlbGlnZSwgaW5kdGlsIGR1IHNsw6VyIFVTQi1sYWdyaW5nIGZyYSBpZ2VuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MjY0MDI1MjgwNzc3MjE5NTIxIj4iRsO4ciBkdSBzbMOlciBVU0ItbGFnZXIgZnJhLCBza2FsIGR1IGRlbW9udGVyZSBkaW4gQW5kcm9pZHMgVVNCLWxhZ2VyIChcInNrdWJiZSBlbmhlZGVuIHVkXCIpIGZyYSBkaW4gY29tcHV0ZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+IkbDuHIgZHUgc2zDpXIgVVNCLWxhZ2VyIGZyYSwgc2thbCBkdSBkZW1vbnRlcmUgZGluIEFuZHJvaWRzIFNELWtvcnQgKFwic2t1YmJlIGVuaGVkZW4gdWRcIikgZnJhIGRpbiBjb21wdXRlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiJTbMOlIFVTQi1sYWdlciBmcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIxOTcwMzc0ODk4MjYzMDYzODM2Ij4iRGVyIG9wc3RvZCBldCBwcm9ibGVtIG1lZCBhdCBzbMOlIFVTQi1sYWdlciBmcmEuIEtvbnRyb2xsZXIsIGF0IGR1IGhhciBkZW1vbnRlcmV0IFVTQi12w6ZydGVuLCBvZyBwcsO4diBkZXJlZnRlciBpZ2VuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190aXRsZSIgbXNnaWQ9Ijk2MzAzOTAzMzQ3MDQ3ODY5NyI+IlNsw6UgVVNCLWxhZ2VyIHRpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+Ikh2aXMgZHUgc2zDpXIgVVNCLWxhZ2VyIHRpbCwgc3RvcHBlcyBub2dsZSBhZiBkZSBhcHBzLCBzb20gZHUgYnJ1Z2VyLCBvZyBkZSBrYW4gdsOmcmUgdXRpbGfDpm5nZWxpZ2UsIGluZHRpbCBkdSBzbMOlciBVU0ItbGFnZXIgZnJhIGlnZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGxnX2Vycm9yX3RpdGxlIiBtc2dpZD0iNzMyMzY1ODQ2OTYyNjUxNDIwNyI+IlVTQi1oYW5kbGluZ2VuIG1pc2x5a2tlZGVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGxnX29rIiBtc2dpZD0iNzM3Njk1MzE2NzAzOTg2NTcwMSI+Ik9LIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX210cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzNjk5OTEzMDk3MzkxNTUwMzk0Ij4iVGlsc2x1dHRldCBzb20gZW4gbWVkaWVlbmhlZCI8L3N0cmluZz4KQEAgLTEzMjUsNyArMTMzNCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIG1zZ2lkPSI4NTMwMzkzMTM5NjM5NTYwMTg5Ij4iRGVyIGVyIGFubW9kZXQgb20gdGlsbGFkZWxzZVxuZm9yIGtvbnRvZW4gPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbnB1dF9tZXRob2RfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyODM1NTcxNzk5NDQ5OTI2NDkiPiJJbnB1dG1ldG9kZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5bmNfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjM2ODc5NjkxMzgzNzUwOTI0MjMiPiJTeW5rcm9uaXNlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjQxNDgxMjA3NDIwOTY0NzQ2NDEiPiJUaWxnw6ZuZ2VsaWdoZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI0MTQ4MTIwNzQyMDk2NDc0NjQxIj4iSGrDpmxwZWZ1bmt0aW9uZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3YWxscGFwZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyNDAwODc4NDQzMDQ2ODc2NjIiPiJUYXBldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IlNraWZ0IHRhcGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iVW5kZXJyZXRuaW5nc2x5dHRlciI8L3N0cmluZz4KQEAgLTEzNjMsNyArMTM3Miw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMyNzg5NDk5ODQwOTUzNzE5MCI+IkRlbW9udGVyZXIgU0Qta29ydGV0Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NTIxNTczMzIxNTI0MzQwMDU4Ij4iU2xldHRlciBVU0ItbGFnZXJldC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTk2OTg4ODc1NTA3MDQzMDQyIj4iU2xldHRlciBTRC1rb3J0ZXQuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZXJyb3IiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjI5OTc2OTU2MzYyNDc3Njk0OCI+Ikt1bm5lIGlra2Ugc2xldHRlIFVTQi1sYWdyaW5nLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2Mjk5NzY5NTYzNjI0Nzc2OTQ4Ij4iS3VubmUgaWtrZSBzbGV0dGUgVVNCLWxhZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMTUyNDg2OTY2NDQ1MTA5MzUiPiJLdW5uZSBpa2tlIHNsZXR0ZSBTRC1rb3J0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2JhZF9yZW1vdmFsIiBtc2dpZD0iNzk2MDg2NDA2MTAxNjYwMzI4MSI+IlNELWtvcnRldCBibGV2IGZqZXJuZXQsIGbDuHIgZGV0IGJsZXYgZGVtb250ZXJldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MTgxODg3MjAwMDk1Njk2OTMiPiJVU0ItbGFnZXIgYmxpdmVyIGtvbnRyb2xsZXJldC4iPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkFuZ2l2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iVsOmbGcgZW4gYXBwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiBrdW5uZSBpa2tlIHN0YXJ0ZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJEZWwgbWVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkRlbCBtZWQgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJHbGlkZW5kZSBow6VuZHRhZy4gVHJ5ayBvZyBob2xkIG5lZGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkdsaWQgb3AgZm9yIGF0IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJHbGlkIG5lZCBmb3IgYXQgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkdsaWQgdGlsIHZlbnN0cmUgZm9yIGF0IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iR2xpZCB0aWwgaMO4anJlIGZvciBhdCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJMw6VzIG9wIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJMeWRsw7hzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+Ikx5ZCBzbMOlZXQgdGlsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTw7hnbmluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IkdsaWQgaHVydGlndCBoZW5vdmVyIGZvciBhdCBsw6VzZSBvcC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iVGlsc2x1dCBldCBoZWFkc2V0IGZvciBhdCBow7hyZSB0YXN0ZXJuZSBibGl2ZSBsw6ZzdCBow7hqdCB2ZWQgYW5naXZlbHNlIGFmIGFkZ2FuZ3Nrb2RlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlB1bmt0dW0uIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGgtbHlkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJUcsOlZGzDuHMgc2vDpnJtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IlVkZsO4ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik1lZGlldWRnYW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJPcHJldCBmb3JiaW5kZWxzZSB0aWwgZW5oZWRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IlNlbmQgc2vDpnJtIHRpbCBlbmhlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IlPDuGdlciBlZnRlciBlbmhlZGVy4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iSW5kc3RpbGxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJBZmJyeWQgZm9yYmluZGVsc2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlPDuGdlci4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+Ik9wcmV0dGVyIGZvcmJpbmRlbHNlLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJUaWxnw6ZuZ2VsaWciPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJPdmVybGVqcmluZyBuci4gPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz4geCA8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgc2lra2VyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJEZXIgZXIgdGlsc2x1dHRldCBlbiB0csOlZGzDuHMgc2vDpnJtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkRlbm5lIHNrw6ZybSB2aXNlcyBww6UgZW4gYW5kZW4gZW5oZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iU2vDpnJtIHNlbmRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IkRlciBvcHJldHRlcyBmb3JiaW5kZWxzZSB0aWwgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iU2vDpnJtIHNlbmRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iRm9yYnVuZGV0IHRpbCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iQWZicnlkIGZvcmJpbmRlbHNlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iTsO4ZG9wa2FsZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IkdsZW10IG3DuG5zdGVyIjwvc3RyaW5nPgpAQCAtMTUzNyw5ICsxNTQ0LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAkyAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IkZqZXJuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZV9tZWRpYV92b2x1bWVfd2FybmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMjQxNjE5Mzk0NzU0NzgwNjYiPiJTa2FsIGx5ZHN0eXJrZW4gdsOmcmUgb3ZlciBkZXQgYW5iZWZhbGVkZSBuaXZlYXU/XG5EdSBrYW4gc2thZGUgZGluIGjDuHJlbHNlIHZlZCBhdCBseXR0ZSB2ZWQgaMO4aiBseWRzdHlya2UgaSBsw6ZuZ2VyZSB0aWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29udGludWVfdG9fZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNjI2NDI3MzcyMzE2MDcwMjU4Ij4iSG9sZCBmb3J0c2F0IHRvIGZpbmdyZSBuZWRlIGZvciBhdCBha3RpdmVyZSB0aWxnw6ZuZ2VsaWdoZWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9lbmFibGVkIiBtc2dpZD0iMTM4MTk3MjA0ODU2NDU0NzY4NSI+IlRpbGfDpm5nZWxpZ2hlZCBha3RpdmVyZXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2FjY2Vzc2liaWxpdHlfY2FuY2VsZWQiIG1zZ2lkPSIzODMzOTIzMjU3OTY2NjM1NjczIj4iVGlsZ8OmbmdlbGlnaGVkIGVyIGFubnVsbGVyZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGludWVfdG9fZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNjI2NDI3MzcyMzE2MDcwMjU4Ij4iQmxpdiB2ZWQgbWVkIGF0IGhvbGRlIHRvIGZpbmdyZSBuZWRlIGZvciBhdCBha3RpdmVyZSBoasOmbHBlZnVua3Rpb25lci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2VuYWJsZWQiIG1zZ2lkPSIxMzgxOTcyMDQ4NTY0NTQ3Njg1Ij4iSGrDpmxwZWZ1bmt0aW9uZXIgZXIgYWt0aXZlcmV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9hY2Nlc3NpYmlsaXR5X2NhbmNlbGVkIiBtc2dpZD0iMzgzMzkyMzI1Nzk2NjYzNTY3MyI+Ikhqw6ZscGVmdW5rdGlvbmVyIGVyIGFubnVsbGVyZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiJOdXbDpnJlbmRlIGJydWdlciA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ib3duZXJfbmFtZSIgbXNnaWQ9IjI3MTY3NTU0NjAzNzYwMjgxNTQiPiJFamVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXJyb3JfbWVzc2FnZV90aXRsZSIgbXNnaWQ9IjQ1MTAzNzMwODMwODI1MDAxOTUiPiJGZWpsIjwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjU3LDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJQcsO4diBpZ2VuIHNlbmVyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJTdHJ5ZyBuZWQgZnJhIHRvcHBlbiBmb3IgYXQgYWZzbHV0dGUgZnVsZCBza8Omcm0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IlVkZsO4ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkNpcmt1bMOmciB0aW1ldsOmbGdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iQ2lya3Vsw6ZyIG1pbnV0dsOmbGdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJWw6ZsZyB0aW1lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IlbDpmxnIG1pbnV0dGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJNw6VuZWRzZ2l0dGVyIG1lZCBkYWdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iTGlzdGUgb3ZlciDDpXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlbDpmxnIG3DpW5lZCBvZyBkYWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJWw6ZsZyDDpXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IGVyIHZhbGd0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gZXIgc2xldHRldCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKaW5kZXggZjc5OWJlNC4uOWEwODZjZiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJHZWJlbiBTaWUgZWluZSBtaW5kZXN0ZW5zIGFjaHRzdGVsbGlnZSBQVUsgZWluLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJJaHJlIFNJTS1LYXJ0ZSBpc3QgbWl0IGVpbmVtIFBVSyBnZXNwZXJydC4gR2ViZW4gU2llIHp1bSBFbnRzcGVycmVuIGRlbiBQVUstQ29kZSBlaW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iR2ViZW4gU2llIHp1bSBFbnRzcGVycmVuIGRlciBTSU0tS2FydGUgZGVuIFBVSzIgZWluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IkZlaGxlci4gU0lNLS9SVUlNLVNwZXJyZSBha3RpdmllcmVuLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IlNpZSBoYWJlbiBub2NoIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBWZXJzdWNoLCBiZXZvciBJaHJlIFNJTS1LYXJ0ZSBnZXNwZXJydCB3aXJkLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IlNpZSBoYWJlbiBub2NoIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBWZXJzdWNoZSwgYmV2b3IgSWhyZSBTSU0tS2FydGUgZ2VzcGVycnQgd2lyZC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IkFucnVmZXItSUQgZsO8ciBlaW5nZWhlbmRlbiBBbnJ1ZiI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iRXJtw7ZnbGljaHQgZGVtIEhhbHRlciwgc2ljaCBhbiBkaWUgT2JlcmZsw6RjaGUgZWluZXMgVlBOLURpZW5zdGVzIGF1ZiBvYmVyc3RlciBFYmVuZSB6dSBiaW5kZW4uIFNvbGx0ZSBuaWUgZsO8ciBub3JtYWxlIEFwcHMgYmVuw7Z0aWd0IHdlcmRlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iQW4gZWluZW4gSGludGVyZ3J1bmQgYmluZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJFcm3DtmdsaWNodCBkZW0gSGFsdGVyLCBzaWNoIGFuIGRpZSBPYmVyZmzDpGNoZSBlaW5lcyBIaW50ZXJncnVuZHMgYXVmIG9iZXJzdGVyIEViZW5lIHp1IGJpbmRlbi4gU29sbHRlIG5pZSBmw7xyIG5vcm1hbGUgQXBwcyBiZW7DtnRpZ3Qgd2VyZGVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4iQW4gUmVtb3RlLURpc3BsYXkgYmluZGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iRXJtw7ZnbGljaHQgZGVtIEhhbHRlciwgc2ljaCBhbiBkaWUgT2JlcmZsw6RjaGUgZWluZXMgUmVtb3RlLURpc3BsYXlzIGF1ZiBvYmVyc3RlciBFYmVuZSB6dSBiaW5kZW4uIFNvbGx0ZSBmw7xyIG5vcm1hbGUgQXBwcyBuaWUgYmVuw7Z0aWd0IHdlcmRlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJBbiBlaW5lbiBXaWRnZXQtRGllbnN0IGJpbmRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJFcm3DtmdsaWNodCBkZW0gSGFsdGVyLCBzaWNoIGFuIGRpZSBPYmVyZmzDpGNoZSBlaW5lcyBXaWRnZXQtRGllbnN0ZXMgYXVmIG9iZXJzdGVyIEViZW5lIHp1IGJpbmRlbi4gU29sbHRlIG5pZSBmw7xyIG5vcm1hbGUgQXBwcyBiZW7DtnRpZ3Qgd2VyZGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+IkludGVyYWt0aW9uIG1pdCBlaW5lbSBHZXLDpHRlYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KQEAgLTQ0OSw5ICs0NTYsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGxMb2ciIG1zZ2lkPSI4NTUyMDQ1NjY0NzQzNDk5MzU0Ij4iQW5ydWZsaXN0ZSBiZWFyYmVpdGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NjYxODA2MDYyMjc0MTE5MjQ1Ij4iRXJtw7ZnbGljaHQgZGVyIEFwcCwgZGllIEFucnVmbGlzdGUgSWhyZXMgVGFibGV0cyB6dSDDpG5kZXJuLCBlaW5zY2hsaWXDn2xpY2ggZGVyIERhdGVuIMO8YmVyIGVpbi0gdW5kIGF1c2dlaGVuZGUgQW5ydWZlLiBTY2jDpGRsaWNoZSBBcHBzIGvDtm5uZW4gc28gSWhyZSBBbnJ1Zmxpc3RlIGzDtnNjaGVuIG9kZXIgw6RuZGVybi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODM5NDE3MzYzNTI3ODc4NDIiPiJFcm3DtmdsaWNodCBkZXIgQXBwLCBkaWUgQW5ydWZsaXN0ZSBJaHJlcyBUZWxlZm9ucyB6dSDDpG5kZXJuLCBlaW5zY2hsaWXDn2xpY2ggZGVyIERhdGVuIMO8YmVyIGVpbi0gdW5kIGF1c2dlaGVuZGUgQW5ydWZlLiBTY2jDpGRsaWNoZSBBcHBzIGvDtm5uZW4gc28gSWhyZSBBbnJ1Zmxpc3RlIGzDtnNjaGVuIG9kZXIgw6RuZGVybi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQcm9maWxlIiBtc2dpZD0iNDcwMTg4OTg1MjYxMjcxNjY3OCI+Ik1laW5lIEtvbnRha3RrYXJ0ZW4gbGVzZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQcm9maWxlIiBtc2dpZD0iNDcwMTg4OTg1MjYxMjcxNjY3OCI+IklocmUgS29udGFrdGthcnRlbiBsZXNlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ2MjQ3NTE1MTg0OTg4ODg0OCI+IkVybcO2Z2xpY2h0IGRlciBBcHAsIGF1ZiBJaHJlbSBHZXLDpHQgZ2VzcGVpY2hlcnRlIHBlcnNvbmVuYmV6b2dlbmUgUHJvZmlsZGF0ZW4genUgbGVzZW4sIGVpbnNjaGxpZcOfbGljaCBJaHJlcyBOYW1lbnMgdW5kIElocmVyIEtvbnRha3RkYXRlbi4gRGllIEFwcCBrYW5uIFNpZSBzb21pdCBpZGVudGlmaXppZXJlbiB1bmQgSWhyZSBQcm9maWxkYXRlbiBhbiBhbmRlcmUgc2VuZGVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVQcm9maWxlIiBtc2dpZD0iOTA3NzkzNjI4Nzc3Mzk3NjQzIj4iTWVpbmUgS29udGFrdGthcnRlbiDDpG5kZXJuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiJJaHJlIEtvbnRha3RrYXJ0ZW4gw6RuZGVybiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiJFcm3DtmdsaWNodCBkZXIgQXBwLCBhdWYgSWhyZW0gR2Vyw6R0IGdlc3BlaWNoZXJ0ZSBwZXJzb25lbmJlem9nZW5lIFByb2ZpbGRhdGVuIHp1IMOkbmRlcm4sIGVpbnNjaGxpZcOfbGljaCBJaHJlcyBOYW1lbnMgdW5kIElocmVyIEtvbnRha3RkYXRlbiwgc293aWUgRGF0ZW4gaGluenV6dWbDvGdlbi4gRGllIEFwcCBrYW5uIFNpZSBzbyBpZGVudGlmaXppZXJlbiB1bmQgSWhyZSBQcm9maWxkYXRlbiBhbiBhbmRlcmUgc2VuZGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEyNjg5MjA5NTYxNTI0MTkxNzAiPiJJbiBzb3ppYWxlbSBTdHJlYW0gbGVzZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDI1NTcwNjAyNzE3MjA1MDg3MiI+IkVybcO2Z2xpY2h0IGRlciBBcHAsIGF1ZiBVcGRhdGVzIGF1cyBzb3ppYWxlbiBOZXR6d2Vya2VuIHZvbiBJaG5lbiB1bmQgSWhyZW4gRnJldW5kZW4genV6dWdyZWlmZW4gdW5kIGRpZXNlIHp1IHN5bmNocm9uaXNpZXJlbi4gU2VpZW4gU2llIHZvcnNpY2h0aWcsIHdlbm4gU2llIEluZm9ybWF0aW9uZW4gdGVpbGVuOiBEZXIgQXBwIHdpcmQgZXJsYXVidCwgZGllIEtvbW11bmlrYXRpb24gendpc2NoZW4gSWhuZW4gdW5kIElocmVuIEZyZXVuZGVuIGluIHNvemlhbGVuIE5ldHp3ZXJrZW4genUgbGVzZW4sIHVuYWJow6RuZ2lnIHZvbiBkZXIgVmVydHJhdWxpY2hrZWl0IGRlciBrb21tdW5pemllcnRlbiBJbmZvcm1hdGlvbmVuLiBIaW53ZWlzOiBEaWVzZSBCZXJlY2h0aWd1bmcga2FubiBtw7ZnbGljaGVyd2Vpc2UgbmljaHQgaW4gYWxsZW4gc296aWFsZW4gTmV0endlcmtlbiBlcnp3dW5nZW4gd2VyZGVuLiI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iRXJtw7ZnbGljaHQgZGVyIEFwcCwgZGllIHN5c3RlbW5haGVuIFN1cmZhY2VGbGluZ2VyLUZ1bmt0aW9uZW4genUgdmVyd2VuZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4iRnJhbWUtUHVmZmVyIGxlc2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IkVybcO2Z2xpY2h0IGRlciBBcHAsIGRlbiBJbmhhbHQgZGVzIEZyYW1lLVB1ZmZlcnMgenUgbGVzZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJBdWYgSW5wdXRGbGluZ2VyIHp1Z3JlaWZlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJFcm3DtmdsaWNodCBkZXIgQXBwLCBkaWUgc3lzdGVtbmFoZW4gSW5wdXRGbGluZ2VyLUZ1bmt0aW9uZW4genUgdmVyd2VuZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJXTEFOLUFuemVpZ2VuIGtvbmZpZ3VyaWVyZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJFcmxhdWJ0IGRlciBBcHAsIFdMQU4tQW56ZWlnZW4genUga29uZmlndXJpZXJlbiB1bmQgZWluZSBWZXJiaW5kdW5nIHp1IGRpZXNlbiBoZXJ6dXN0ZWxsZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IldMQU4tQW56ZWlnZW4gc3RldWVybiI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlVtc2NoYWx0dGFzdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFaW5nYWJldGFzdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJBcHAgYXVzd8OkaGxlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4ga29ubnRlIG5pY2h0IGdlc3RhcnRldCB3ZXJkZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iVGVpbGVuIG1pdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJNaXQgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiB0ZWlsZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iU2NoaWViZXJlZ2xlcjogQmVyw7xocmVuIHVuZCBoYWx0ZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iWnVtIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiBuYWNoIG9iZW4gc2NoaWViZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJadW0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IG5hY2ggdW50ZW4gc2NoaWViZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJadW0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IG5hY2ggbGlua3Mgc2NoaWViZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iWnVtIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiBuYWNoIHJlY2h0cyBzY2hpZWJlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iRW50c3BlcnJlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iTGF1dGxvcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJUb24gZWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTdWNoZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+Ilp1bSBFbnRzcGVycmVuIGRlbiBGaW5nZXIgw7xiZXIgZGVuIEJpbGRzY2hpcm0gemllaGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IlNjaGxpZcOfZW4gU2llIGVpbiBIZWFkc2V0IGFuLCB1bSBkYXMgUGFzc3dvcnQgZ2VzcHJvY2hlbiB6dSBow7ZyZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUHVua3QuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGgtQXVkaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IkthYmVsbG9zZSDDnGJlcnRyYWd1bmcgKFdpRGkpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IkZlcnRpZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik1lZGllbmF1c2dhYmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+Ik1pdCBHZXLDpHQgdmVyYmluZGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iQmlsZHNjaGlybSBhdWYgR2Vyw6R0IMO8YmVydHJhZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iR2Vyw6R0ZSB3ZXJkZW4gZ2VzdWNodOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IkVpbnN0ZWxsdW5nZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iVmVyYmluZHVuZyB0cmVubmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IldpcmQgZ2VzY2FubnQuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJWZXJiaW5kdW5nIHdpcmQgaGVyZ2VzdGVsbHQuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IlZlcmbDvGdiYXIiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJPdmVybGF5LU5yLiA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBzaWNoZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkthYmVsbG9zZSDDnGJlcnRyYWd1bmcgKFdpRGkpIGlzdCBha3RpdmllcnQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkRpZXNlciBCaWxkc2NoaXJtIHdpcmQgYXVmIGVpbmVtIGFuZGVyZW4gR2Vyw6R0IGFuZ2V6ZWlndC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iQmlsZHNjaGlybSB3aXJkIMO8YmVydHJhZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iVmVyYmluZHVuZyBtaXQgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+IHdpcmQgaGVyZ2VzdGVsbHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iQmlsZHNjaGlybSB3aXJkIMO8YmVydHJhZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJWZXJidW5kZW4gbWl0IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJWZXJiaW5kdW5nIHRyZW5uZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+Ik5vdHJ1ZiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+Ik11c3RlciB2ZXJnZXNzZW4iPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NTcsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlNww6R0ZXIgZXJuZXV0IHZlcnN1Y2hlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJadW0gU2NobGllw59lbiBkZXMgVm9sbGJpbGRzIHZvbiBvYmVuIG5hY2ggdW50ZW4gd2lzY2hlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iRmVydGlnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iS3JlaXNmw7ZybWlnZXIgU2NoaWViZXJlZ2xlciBmw7xyIFN0dW5kZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IktyZWlzZsO2cm1pZ2VyIFNjaGllYmVyZWdsZXIgZsO8ciBNaW51dGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlN0dW5kZW4gYXVzd8OkaGxlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+Ik1pbnV0ZW4gYXVzd8OkaGxlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iTW9uYXRzcmFzdGVyIG1pdCBlaW56ZWxuZW4gVGFnZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJKYWhyZXNsaXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iTW9uYXQgdW5kIFRhZyBhdXN3w6RobGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iSmFociBhdXN3w6RobGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBhdXNnZXfDpGhsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IGdlbMO2c2NodCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKaW5kZXggNjA1ZDg0NS4uNGQ1NzQxZCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLOoM67zrfOus+Ez4HOv867zr/Os86uz4PPhM61IM6tzr3Osc69IM66z4nOtM65zrrPjCBQVUsgzrzOtSA4IM6xz4HOuc64zrzOv8+Nz4Igzq4gz4DOtc+BzrnPg8+Dz4zPhM61z4HOv8+Fz4IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+Is6XIM66zqzPgc+EzrEgU0lNIM6tz4fOtc65IM66zrvOtc65zrTPic64zrXOryDOvM61IM66z4nOtM65zrrPjCBQVUsuIM6gzrvOt866z4TPgc6/zrvOv86zzq7Pg8+EzrUgz4TOv869IM66z4nOtM65zrrPjCBQVUsgzrPOuc6xIM69zrEgz4TOt869IM6+zrXOus67zrXOuc60z47Pg861z4TOtS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLOoM67zrfOus+Ez4HOv867zr/Os86uz4PPhM61IM+Ezr/OvSDOus+JzrTOuc66z4wgUFVLMiDOs865zrEgz4TOt869IM66zrHPhM6sz4HOs863z4POtyDOsc+Azr/Ous67zrXOuc+DzrzOv8+NIM+EzrfPgiDOus6sz4HPhM6xz4IgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+Is6Rzr3Otc+AzrnPhM+Fz4fOrs+CIM+Az4HOv8+Dz4DOrM64zrXOuc6xLiDOlc69zrXPgc6zzr/PgM6/zrnOrs+Dz4TOtSDPhM6/IM6azrvOtc6vzrTPic68zrEgU0lNL1JVSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4izpHPgM6/zrzOrc69zrXOuSDOrM67zrvOtyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gz4DPgc6/z4PPgM6szrjOtc65zrEgz4DPgc6/z4TOv8+NIM63IM66zqzPgc+EzrEgU0lNIM66zrvOtc65zrTPic64zrXOry4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLOkc+Azr/OvM6tzr3Ov8+Fzr0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IM+Az4HOv8+Dz4DOrM64zrXOuc61z4Igz4DPgc6/z4TOv8+NIM63IM66zqzPgc+EzrEgU0lNIM66zrvOtc65zrTPic64zrXOry4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+Is6VzrnPg861z4HPh8+MzrzOtc69zrcgzrHOvc6xzrPOvc+Oz4HOuc+DzrcgzrrOu86uz4POt8+CIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLOlc+AzrnPhM+Bzq3PgM61zrkgz4PPhM6/zr0gzrrOrM+Ezr/Ph86/IM+EzrcgzrTOrc+DzrzOtc+Fz4POtyDPg8+EzrcgzrTOuc61z4DOsc+Gzq4gzrHOvc+Jz4TOrM+Ezr/PhSDOtc+AzrnPgM6tzrTOv8+FIM68zrnOsc+CIM+Fz4DOt8+BzrXPg86vzrHPgiBWcG4uIM6UzrXOvSDOsc+AzrHOuc+EzrXOr8+EzrHOuSDOs865zrEgzrrOsc69zr/Ovc65zrrOrc+CIM61z4bOsc+BzrzOv86zzq3Pgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4izrTOrc+DzrzOtc+Fz4POtyDPg861IM+EzrHPgM61z4TPg86xz4HOr86xIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLOlc+AzrnPhM+Bzq3PgM61zrkgz4PPhM6/zr0gzrrOrM+Ezr/Ph86/IM+EzrcgzrTOrc+DzrzOtc+Fz4POtyDPg8+EzrcgzrTOuc61z4DOsc+Gzq4gzrHOvc+Jz4TOrM+Ezr/PhSDOtc+AzrnPgM6tzrTOv8+FIM68zrnOsc+CIM+EzrHPgM61z4TPg86xz4HOr86xz4IuIM6UzrXOvSDOsc+AzrHOuc+EzrXOr8+EzrHOuSDOs865zrEgz4PPhc69zq7OuM61zrnPgiDOtc+GzrHPgc68zr/Os86tz4IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLOvM61z4TOsc+Gzr/Pgc6sIM+DzrUgzrzOuc6xIM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc63IM6/zrjPjM69zrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLOlc+AzrnPhM+Bzq3PgM61zrkgz4PPhM6/zr0gzrrOrM+Ezr/Ph86/IM+EzrcgzrTOrc+DzrzOtc+Fz4POtyDPg8+EzrcgzrTOuc61z4DOsc+Gzq4gzrHOvc+Jz4TOrM+Ezr/PhSDOtc+AzrnPgM6tzrTOv8+FIM68zrnOsc+CIM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc63z4Igzr/OuM+Mzr3Ot8+CLiDOlM61zr0gzrHPgM6xzrnPhM61zq/PhM6xzrkgz4DOv8+Ezq0gzrPOuc6xIM66zrHOvc6/zr3Ouc66zq3PgiDOtc+GzrHPgc68zr/Os86tz4IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4izrTOrc+DzrzOtc+Fz4POtyDPg861IM+Fz4DOt8+BzrXPg86vzrEgzrPPgc6xz4bOuc66z47OvSDPg8+Ezr/Ouc+HzrXOr8+Jzr0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4izpXPgM65z4TPgc6tz4DOtc65IM+Dz4TOv869IM66zqzPhM6/z4fOvyDPhM63IM60zq3Pg868zrXPhc+Dzrcgz4PPhM63IM60zrnOtc+AzrHPhs6uIM6xzr3Pic+EzqzPhM6/z4UgzrXPgM65z4DOrc60zr/PhSDOvM65zrHPgiDPhc+AzrfPgc61z4POr86xz4IgzrPPgc6xz4bOuc66z47OvSDPg8+Ezr/Ouc+HzrXOr8+Jzr0uIM6UzrXOvSDOsc+AzrHOuc+EzrXOr8+EzrHOuSDOs865zrEgzrrOsc69zr/Ovc65zrrOrc+CIM61z4bOsc+BzrzOv86zzq3Pgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiLOtc+AzrnOus6/zrnOvc+Jzr3Or86xIM68zrUgzq3Ovc6xzr0gzrTOuc6xz4fOtc65z4HOuc+Dz4TOriDPg8+Fz4POus61z4XOrs+CIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLOlc+AzrnPhM+Bzq3PgM61zrkgz4POtSDOvM65zrEgzrXPhs6xz4HOvM6/zrPOriDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zrXOryDOu861zrnPhM6/z4XPgc6zzq/Otc+CIFN1cmZhY2VGbGluZ2VyIM+HzrHOvM63zrvOv8+NIM61z4DOuc+Azq3OtM6/z4UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4izrHOvc6szrPOvc+Jz4POtyDPgM+Bzr/Pg8+Jz4HOuc69zq7PgiDOvM69zq7OvM63z4Igz4DOu86xzrnPg86vzr/PhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLOlc+AzrnPhM+Bzq3PgM61zrkgz4PPhM63zr0gzrXPhs6xz4HOvM6/zrPOriDPhM63zr0gzrHOvc6szrPOvc+Jz4POtyDPhM6/z4Ugz4DOtc+BzrnOtc+Hzr/OvM6tzr3Ov8+FIM+EzrfPgiDPgM+Bzr/Pg8+Jz4HOuc69zq7PgiDOvM69zq7OvM63z4Igz4DOu86xzrnPg86vzr/PhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiLPgM+Bz4zPg86yzrHPg863IM+Dz4TOvyBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4izpXPgM65z4TPgc6tz4DOtc65IM+DzrUgzrzOuc6xIM61z4bOsc+BzrzOv86zzq4gzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc61zq8gzrvOtc65z4TOv8+Fz4HOs86vzrXPgiBJbnB1dEZsaW5nZXIgz4fOsc68zrfOu86/z40gzrXPgM65z4DOrc60zr/PhS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+Is60zrnOsc68z4zPgc+Gz4nPg863IM6/zrjOv869z47OvSBXaWZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4izpXPgM65z4TPgc6tz4DOtc65IM+EzrcgzrTOuc6xzrzPjM+Bz4bPic+Dzrcgz4TOt8+CIM61z4bOsc+BzrzOv86zzq7PgiDOus6xzrkgz4TOtyDPg8+Nzr3OtM61z4POt8+CIM+DzrUgzr/OuM+Mzr3Otc+CIFdpZmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiLOrc67zrXOs8+Hzr/PgiDOv864zr/Ovc+Ozr0gV2lmaSI8L3N0cmluZz4KQEAgLTY0Miw3ICs2NTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjE4ODE1NjQ2MjkzNDk3Nzk0MCI+Is6xzr3OrM6zzr3Pic+Dzrcgz4TOv8+FIM+AzrXPgc65zrXPh86/zrzOrc69zr/PhSDPhM63z4IgzrrOrM+Bz4TOsc+CIFNEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ2OTg4NzEyNTk4Mzg2MDc5Ij4izpXPgM65z4TPgc6tz4DOtc65IM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gz4TOt869IM6xzr3OrM6zzr3Pic+Dzrcgz4TOv8+FIM+AzrXPgc65zrXPh86/zrzOrc69zr/PhSDPhM6/z4UgzrHPgM6/zrjOt866zrXPhc+EzrnOus6/z40gz4POsc+CIM+Hz47Pgc6/z4UgVVNCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjA3MzYyNDczNjU0OTc1NDExIj4izpXPgM65z4TPgc6tz4DOtc65IM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gz4TOt869IM6xzr3OrM6zzr3Pic+Dzrcgz4TOv8+FIM+AzrXPgc65zrXPh86/zrzOrc69zr/PhSDPhM63z4IgzrrOrM+Bz4TOsc+CIFNELiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+Is+Ez4HOv8+ALiDOriDOtM65zrHOs8+BLiDPhM6/z4UgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4NDg1OTc5MDYyMjU0NjY2NzQ4Ij4iz4TPgc6/z4DOv8+Azr/Or863z4POtyDOriDOtM65zrHOs8+BzrHPhs6uIM+Ezr/PhSBVU0IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODgwNTY5MzYzMDA1MDQ1ODc2MyI+Is+Ez4HOv8+Azr/PgM6/zq/Ot8+Dzrcgzq4gzrTOuc6xzrPPgc6xz4bOriDPhM+Jzr0gz4DOtc+BzrnOtc+Hzr/OvM6tzr3Pic69IM+EzrfPgiDOus6sz4HPhM6xz4IgU0QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTc1NDA2Mjk5NDQ1NzEwODg4Ij4izpXPgM65z4TPgc6tz4DOtc65IM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gz4TOt869IM61zrPOs8+BzrHPhs6uIM+Dz4TOv869IM6xz4DOv864zrfOus61z4XPhM65zrrPjCDPh8+Oz4HOvyBVU0IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MzM3NDE3NzkwOTM2NjMyMDkwIj4izpXPgM65z4TPgc6tz4DOtc65IM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gz4TOt869IM61zrPOs8+BzrHPhs6uIM+Dz4TOt869IM66zqzPgc+EzrEgU0QuIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+Is6Vz4DOuc67zq3Ovs+EzrUgzrrOrM+Azr/Ouc6xIM61z4bOsc+BzrzOv86zzq4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiLOlM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM61zrrOus6vzr3Ot8+Dzrcgz4TOv8+FIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLOms6/zrnOvc6uIM+Hz4HOrs+DzrcgzrzOtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiLOms6/zrnOvc6uIM+Hz4HOrs+DzrcgzrzOtSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+Is6jz4TOv865z4fOtc6vzr8gz4fOtc65z4HOuc+DzrzOv8+NIM68zrUgzrTPhc69zrHPhM+Mz4TOt8+EzrEgzr/Ou86vz4POuM63z4POt8+CLiDOkc6zzrPOr86+z4TOtSDOus6xzrkgz4DOsc+Ezq7Pg8+EzrUgz4DOsc+BzrHPhM61z4TOsc68zq3Ovc6xLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLOms+NzrvOuc+Dzrcgz4DPgc6/z4Igz4TOsSDOtc+AzqzOvc+JIM6zzrnOsSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4izprPjc67zrnPg863IM+Az4HOv8+CIM+EzrEgzrrOrM+Ez4kgzrPOuc6xIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLOms+NzrvOuc+Dzrcgz4DPgc6/z4Igz4TOsSDOsc+BzrnPg8+EzrXPgc6sIM6zzrnOsSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Is6az43Ou865z4POtyDPgM+Bzr/PgiDPhM6xIM60zrXOvs65zqwgzrPOuc6xIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Is6ezrXOus67zrXOr860z4nOvM6xIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+Is6mz4nPhM6/zrPPgc6xz4bOuc66zq4gzrzOt8+HzrHOvc6uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+Is6RzrjPjM+Bz4XOss6/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+Is6Vzr3Otc+BzrPOv8+Azr/Or863z4POtyDOrs+Hzr/PhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4izpHOvc6xzrbOrs+EzrfPg863Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4izqPPjc+BzrXPhM61IM6zzrnOsSDOvs61zrrOu861zq/OtM+JzrzOsS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4izqPPhc69zrTOrc+Dz4TOtSDOsc66zr/Phc+Dz4TOuc66zqwgzrPOuc6xIM69zrEgzrHOus6/z43Pg861z4TOtSDPhM6xIM+AzrvOrs66z4TPgc6xIM+Ezr/PhSDOus+JzrTOuc66zr/PjSDPgM+Bz4zPg86yzrHPg863z4Igzr3OsSDOtc66z4bPic69zr/Pjc69z4TOsc65LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+Is6kzrXOu861zq/OsS4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLOo8+Nz4PPhM63zrzOsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4izonPh86/z4IgQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLOkc+Dz43Pgc68zrHPhM63IM6/zrjPjM69zrciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4izqTOrc67zr/PgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Is6Izr7Ov860zr/PgiDOvM6tz4PPic69Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLOo8+Nzr3OtM61z4POtyDOvM61IM+Ezrcgz4PPhc+DzrrOtc+Fzq4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLOnM61z4TOrM60zr/Pg863IM6/zrjPjM69zrfPgiDPg861IM+Dz4XPg866zrXPhc6uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4izpHOvc6xzrbOrs+EzrfPg863IM+Dz4XPg866zrXPhc+Ozr3igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLOoc+FzrjOvM6vz4POtc65z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4izpHPgM6/z4PPjc69zrTOtc+DzrciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4izqPOrM+Bz4nPg8634oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4izqPPjc69zrTOtc+DzrfigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+Is6UzrnOsc64zq3Pg865zrzOtyI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+Is6Vz4DOuc66zqzOu8+Fz4jOtyAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIM6xz4PPhs6xzrvOrc+CIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLOiM+HzrXOuSDPg8+Fzr3OtM61zrjOtc6vIM6xz4PPjc+BzrzOsc+Ezrcgzr/OuM+Mzr3OtyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLOkc+Fz4TOriDOtyDOv864z4zOvc63IM61zrzPhs6xzr3Or862zrXPhM6xzrkgz4POtSDOvM65zrEgzqzOu867zrcgz4PPhc+DzrrOtc+Fzq4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4izpzOtc+EzqzOtM6/z4POtyDOv864z4zOvc63z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiLOk86vzrXOvc+EzrHOuSDPg8+Nzr3OtM61z4POtyDOvM61IM+Ezr8gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4izpzOtc+EzqzOtM6/z4POtyDOv864z4zOvc63z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+Is6jz4XOvc60zq3OuM63zrrOtSDOvM61IM+Ezr8gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+Is6Rz4DOv8+Dz43Ovc60zrXPg863Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLOms67zq7Pg861zrnPgiDOtc+AzrXOr86zzr/Phc+DzrHPgiDOsc69zqzOs866zrfPgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+Is6ezrXPh86sz4POsc+EzrUgz4TOvyDOvM6/z4TOr86yzr8iPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NTcsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+Is6Uzr/Ous65zrzOrM+Dz4TOtSDOvs6xzr3OrCDOsc+BzrPPjM+EzrXPgc6xIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+Is6jzqzPgc+Jz4POtyDPgM+Bzr/PgiDPhM6xIM66zqzPhM+JIM6zzrnOsSDOrc6+zr/OtM6/IM6xz4DPjCDPgM67zq7Pgc63IM6/zrjPjM69zrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+Is6kzq3Ou86/z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLOms+FzrrOu865zrrPjCDPgc+FzrjOvM65z4PPhM65zrrPjCDPic+Bz47OvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4izprPhc66zrvOuc66z4wgz4HPhc64zrzOuc+Dz4TOuc66z4wgzrvOtc+Az4TPjs69Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+Is6Vz4DOuc67zr/Os86uIM+Jz4HPjs69Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4izpXPgM65zrvOv86zzq4gzrvOtc+Az4TPjs69Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLOoM67zq3Os868zrEgzrfOvM61z4HPjs69IM+Ezr/PhSDOvM6uzr3OsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+Is6bzq/Pg8+EzrEgzrXPhM+Ozr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+Is6Vz4DOuc67zr/Os86uIM68zq7Ovc6xIM66zrHOuSDOt868zq3Pgc6xz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLOlc+AzrnOu86/zrPOriDOrc+Ezr/Phc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Is6Vz4DOuc67zq3Ph8+EzrfOus61IM+Ezr8gz4PPhM6/zrnPh861zq/OvyA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDOtM65zrHOs8+BzqzPhs63zrrOtSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbAppbmRleCBjYTg1MDlhLi4zZGMyMDY0IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iVHlwZSBhIFBVSyB0aGF0IGlzIDggbnVtYmVycyBvciBsb25nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IllvdXIgU0lNIGNhcmQgaXMgUFVLLWxvY2tlZC4gVHlwZSB0aGUgUFVLIGNvZGUgdG8gdW5sb2NrIGl0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlR5cGUgUFVLMiB0byB1bmJsb2NrIFNJTSBjYXJkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IlVuc3VjY2Vzc2Z1bCwgZW5hYmxlIFNJTS9SVUlNIExvY2suIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iWW91IGhhdmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlbWFpbmluZyBhdHRlbXB0L3MgYmVmb3JlIFNJTSBpcyBsb2NrZWQuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iWW91IGhhdmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlbWFpbmluZyBhdHRlbXB0L3MgYmVmb3JlIFNJTSBpcyBsb2NrZWQuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJbmNvbWluZyBDYWxsZXIgSUQiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IkFsbG93cyB0aGUgaG9sZGVyIHRvIGJpbmQgdG8gdGhlIHRvcC1sZXZlbCBpbnRlcmZhY2Ugb2YgYSBWcG4gc2VydmljZS4gU2hvdWxkIG5ldmVyIGJlIG5lZWRlZCBmb3Igbm9ybWFsIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ImJpbmQgdG8gd2FsbHBhcGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJBbGxvd3MgdGhlIGhvbGRlciB0byBiaW5kIHRvIHRoZSB0b3AtbGV2ZWwgaW50ZXJmYWNlIG9mIHdhbGxwYXBlci4gU2hvdWxkIG5ldmVyIGJlIG5lZWRlZCBmb3Igbm9ybWFsIGFwcGxpY2F0aW9ucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+ImJpbmQgdG8gYSByZW1vdGUgZGlzcGxheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IkFsbG93cyB0aGUgaG9sZGVyIHRvIGJpbmQgdG8gdGhlIHRvcC1sZXZlbCBpbnRlcmZhY2Ugb2YgYSByZW1vdGUgZGlzcGxheS4gU2hvdWxkIG5ldmVyIGJlIG5lZWRlZCBmb3Igbm9ybWFsIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4iYmluZCB0byBhIHdpZGdldCBzZXJ2aWNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkFsbG93cyB0aGUgaG9sZGVyIHRvIGJpbmQgdG8gdGhlIHRvcC1sZXZlbCBpbnRlcmZhY2Ugb2YgYSB3aWRnZXQgc2VydmljZS4gU2hvdWxkIG5ldmVyIGJlIG5lZWRlZCBmb3Igbm9ybWFsIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaW50ZXJhY3Qgd2l0aCBkZXZpY2UgYWRtaW4iPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IkFsbG93cyB0aGUgYXBwIHRvIHVzZSBTdXJmYWNlRmxpbmdlciBsb3ctbGV2ZWwgZmVhdHVyZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4icmVhZCBmcmFtZSBidWZmZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iQWxsb3dzIHRoZSBhcHAgdG8gcmVhZCB0aGUgY29udGVudCBvZiB0aGUgZnJhbWUgYnVmZmVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImFjY2VzcyBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iQWxsb3dzIHRoZSBhcHAgdG8gdXNlIElucHV0RmxpbmdlciBsb3ctbGV2ZWwgZmVhdHVyZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJjb25maWd1cmUgV2ktRmkgZGlzcGxheXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJBbGxvd3MgdGhlIGFwcCB0byBjb25maWd1cmUgYW5kIGNvbm5lY3QgdG8gV2ktRmkgZGlzcGxheXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJjb250cm9sIFdpLUZpIGRpc3BsYXlzIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IkNob29zZSBhbiBhcHAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiJDb3VsZG5cJ3QgbGF1bmNoIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJTaGFyZSB3aXRoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IlNoYXJlIHdpdGggPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJTbGlkaW5nIGhhbmRsZS4gVG91Y2ggJmFtcDsgaG9sZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iU2xpZGUgdXAgZm9yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJTbGlkZSBkb3duIGZvciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iU2xpZGUgbGVmdCBmb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJTbGlkZSByaWdodCBmb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iVW5sb2NrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkNhbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTaWxlbnQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU291bmQgb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlNlYXJjaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IlN3aXBlIHRvIHVubG9jay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUGx1ZyBpbiBhIGhlYWRzZXQgdG8gaGVhciBwYXNzd29yZCBrZXlzIHNwb2tlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJEb3QiPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTeXN0ZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkJsdWV0b290aCBhdWRpbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iV2lyZWxlc3MgZGlzcGxheSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJEb25lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iTWVkaWEgb3V0cHV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJDb25uZWN0IHRvIGRldmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IkNhc3Qgc2NyZWVuIHRvIGRldmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IlNlYXJjaGluZyBmb3IgZGV2aWNlc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IlNldHRpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkRpc2Nvbm5lY3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iU2Nhbm5pbmcuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJDb25uZWN0aW5nLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJBdmFpbGFibGUiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJPdmVybGF5ICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgc2VjdXJlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJXaXJlbGVzcyBkaXNwbGF5IGlzIGNvbm5lY3RlZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJUaGlzIHNjcmVlbiBpcyBzaG93aW5nIG9uIGFub3RoZXIgZGV2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IkNhc3Rpbmcgc2NyZWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iQ29ubmVjdGluZyB0byA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJDYXN0aW5nIHNjcmVlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iQ29ubmVjdGVkIHRvIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJEaXNjb25uZWN0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJFbWVyZ2VuY3kgY2FsbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IkZvcmdvdCBQYXR0ZXJuIjwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjU3LDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJUcnkgYWdhaW4gbGF0ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iU3dpcGUgZG93biBmcm9tIHRoZSB0b3AgdG8gZXhpdCBmdWxsIHNjcmVlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkZpbmlzaGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iSG91cnMgY2lyY3VsYXIgc2xpZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJNaW51dGVzIGNpcmN1bGFyIHNsaWRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJTZWxlY3QgaG91cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJTZWxlY3QgbWludXRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iTW9udGggZ3JpZCBvZiBkYXlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iWWVhciBsaXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJTZWxlY3QgbW9udGggYW5kIGRheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlNlbGVjdCB5ZWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBzZWxlY3RlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IGRlbGV0ZWQiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKaW5kZXggY2E4NTA5YS4uM2RjMjA2NCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IlR5cGUgYSBQVUsgdGhhdCBpcyA4IG51bWJlcnMgb3IgbG9uZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJZb3VyIFNJTSBjYXJkIGlzIFBVSy1sb2NrZWQuIFR5cGUgdGhlIFBVSyBjb2RlIHRvIHVubG9jayBpdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJUeXBlIFBVSzIgdG8gdW5ibG9jayBTSU0gY2FyZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJVbnN1Y2Nlc3NmdWwsIGVuYWJsZSBTSU0vUlVJTSBMb2NrLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IllvdSBoYXZlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiByZW1haW5pbmcgYXR0ZW1wdC9zIGJlZm9yZSBTSU0gaXMgbG9ja2VkLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IllvdSBoYXZlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiByZW1haW5pbmcgYXR0ZW1wdC9zIGJlZm9yZSBTSU0gaXMgbG9ja2VkLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSW5jb21pbmcgQ2FsbGVyIElEIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJBbGxvd3MgdGhlIGhvbGRlciB0byBiaW5kIHRvIHRoZSB0b3AtbGV2ZWwgaW50ZXJmYWNlIG9mIGEgVnBuIHNlcnZpY2UuIFNob3VsZCBuZXZlciBiZSBuZWVkZWQgZm9yIG5vcm1hbCBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJiaW5kIHRvIHdhbGxwYXBlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iQWxsb3dzIHRoZSBob2xkZXIgdG8gYmluZCB0byB0aGUgdG9wLWxldmVsIGludGVyZmFjZSBvZiB3YWxscGFwZXIuIFNob3VsZCBuZXZlciBiZSBuZWVkZWQgZm9yIG5vcm1hbCBhcHBsaWNhdGlvbnMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJiaW5kIHRvIGEgcmVtb3RlIGRpc3BsYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJBbGxvd3MgdGhlIGhvbGRlciB0byBiaW5kIHRvIHRoZSB0b3AtbGV2ZWwgaW50ZXJmYWNlIG9mIGEgcmVtb3RlIGRpc3BsYXkuIFNob3VsZCBuZXZlciBiZSBuZWVkZWQgZm9yIG5vcm1hbCBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ImJpbmQgdG8gYSB3aWRnZXQgc2VydmljZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJBbGxvd3MgdGhlIGhvbGRlciB0byBiaW5kIHRvIHRoZSB0b3AtbGV2ZWwgaW50ZXJmYWNlIG9mIGEgd2lkZ2V0IHNlcnZpY2UuIFNob3VsZCBuZXZlciBiZSBuZWVkZWQgZm9yIG5vcm1hbCBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImludGVyYWN0IHdpdGggZGV2aWNlIGFkbWluIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJBbGxvd3MgdGhlIGFwcCB0byB1c2UgU3VyZmFjZUZsaW5nZXIgbG93LWxldmVsIGZlYXR1cmVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+InJlYWQgZnJhbWUgYnVmZmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IkFsbG93cyB0aGUgYXBwIHRvIHJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIGZyYW1lIGJ1ZmZlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJhY2Nlc3MgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkFsbG93cyB0aGUgYXBwIHRvIHVzZSBJbnB1dEZsaW5nZXIgbG93LWxldmVsIGZlYXR1cmVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4iY29uZmlndXJlIFdpLUZpIGRpc3BsYXlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iQWxsb3dzIHRoZSBhcHAgdG8gY29uZmlndXJlIGFuZCBjb25uZWN0IHRvIFdpLUZpIGRpc3BsYXlzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iY29udHJvbCBXaS1GaSBkaXNwbGF5cyI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJDaG9vc2UgYW4gYXBwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iQ291bGRuXCd0IGxhdW5jaCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iU2hhcmUgd2l0aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJTaGFyZSB3aXRoIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iU2xpZGluZyBoYW5kbGUuIFRvdWNoICZhbXA7IGhvbGQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlNsaWRlIHVwIGZvciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iU2xpZGUgZG93biBmb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlNsaWRlIGxlZnQgZm9yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iU2xpZGUgcmlnaHQgZm9yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IlVubG9jayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJDYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU2lsZW50Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IlNvdW5kIG9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTZWFyY2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJTd2lwZSB0byB1bmxvY2suIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IlBsdWcgaW4gYSBoZWFkc2V0IHRvIGhlYXIgcGFzc3dvcmQga2V5cyBzcG9rZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iRG90Ijwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGggYXVkaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IldpcmVsZXNzIGRpc3BsYXkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iRG9uZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik1lZGlhIG91dHB1dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iQ29ubmVjdCB0byBkZXZpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJDYXN0IHNjcmVlbiB0byBkZXZpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJTZWFyY2hpbmcgZm9yIGRldmljZXPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJTZXR0aW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJEaXNjb25uZWN0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNjYW5uaW5nLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iQ29ubmVjdGluZy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iQXZhaWxhYmxlIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iT3ZlcmxheSAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHNlY3VyZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iV2lyZWxlc3MgZGlzcGxheSBpcyBjb25uZWN0ZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iVGhpcyBzY3JlZW4gaXMgc2hvd2luZyBvbiBhbm90aGVyIGRldmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJDYXN0aW5nIHNjcmVlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IkNvbm5lY3RpbmcgdG8gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iQ2FzdGluZyBzY3JlZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IkNvbm5lY3RlZCB0byA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iRGlzY29ubmVjdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iRW1lcmdlbmN5IGNhbGwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJGb3Jnb3QgUGF0dGVybiI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY1NywxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iVHJ5IGFnYWluIGxhdGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlN3aXBlIGRvd24gZnJvbSB0aGUgdG9wIHRvIGV4aXQgZnVsbCBzY3JlZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJGaW5pc2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkhvdXJzIGNpcmN1bGFyIHNsaWRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iTWludXRlcyBjaXJjdWxhciBzbGlkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iU2VsZWN0IGhvdXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iU2VsZWN0IG1pbnV0ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+Ik1vbnRoIGdyaWQgb2YgZGF5cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IlllYXIgbGlzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iU2VsZWN0IG1vbnRoIGFuZCBkYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJTZWxlY3QgeWVhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4gc2VsZWN0ZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBkZWxldGVkIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCmluZGV4IGViNzMxYTMuLjlhNzgzNjljIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iSW5ncmVzYSB1biBjw7NkaWdvIFBVSyBkZSBvY2hvIG7Dum1lcm9zIG8gbcOhcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iVHUgdGFyamV0YSBTSU0gZXN0w6EgYmxvcXVlYWRhIGNvbiBQVUsuIEVzY3JpYmUgZWwgY8OzZGlnbyBQVUsgcGFyYSBkZXNibG9xdWVhcmxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IkVzY3JpYmlyIFBVSzIgcGFyYSBkZXNibG9xdWVhciBsYSB0YXJqZXRhIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJFcnJvcjsgaGFiaWxpdGEgZWwgYmxvcXVlbyBkZSBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJUZSBxdWVkYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50byBhbnRlcyBkZSBxdWUgc2UgYmxvcXVlZSBsYSB0YXJqZXRhIFNJTS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJUZSBxdWVkYW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudG9zIGFudGVzIGRlIHF1ZSBzZSBibG9xdWVlIGxhIHRhcmpldGEgU0lNLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSWRlbnRpZmljYWRvciBkZSBsbGFtYWRhcyBlbnRyYW50ZXMiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IlBlcm1pdGUgYWwgdGl0dWxhciB2aW5jdWxhcnNlIGEgbGEgaW50ZXJmYXogZGUgbml2ZWwgc3VwZXJpb3IgZGUgdW4gc2VydmljaW8gZGUgVlBOLiBMYXMgYXBsaWNhY2lvbmVzIG5vcm1hbGVzIG5vIGRlYmVyw61hbiBuZWNlc2l0YXIgZXN0ZSBwZXJtaXNvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJ2aW5jdWxhciBhIHVuIGZvbmRvIGRlIHBhbnRhbGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJQZXJtaXRlIGFsIHByb3BpZXRhcmlvIHZpbmN1bGFyc2UgYSBsYSBpbnRlcmZheiBkZSBuaXZlbCBzdXBlcmlvciBkZSB1biBmb25kbyBkZSBwYW50YWxsYS4gTGFzIGFwbGljYWNpb25lcyBub3JtYWxlcyBubyBkZWJlbiB1dGlsaXphciBlc3RlIHBlcm1pc28uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJ2aW5jdWxhciBhIHVuYSBwYW50YWxsYSByZW1vdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJQZXJtaXRlIGFsIHByb3BpZXRhcmlvIHZpbmN1bGFyc2UgYSBsYSBpbnRlcmZheiBkZSBuaXZlbCBzdXBlcmlvciBkZSB1bmEgcGFudGFsbGEgcmVtb3RhLiBMYXMgYXBsaWNhY2lvbmVzIG5vcm1hbGVzIG5vIGRlYmVyw61hbiBuZWNlc2l0YXIgZXN0ZSBwZXJtaXNvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+InZpbmN1bGFyIGEgdW4gc2VydmljaW8gZGUgd2lkZ2V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IlBlcm1pdGUgYWwgcHJvcGlldGFyaW8gdmluY3VsYXJzZSBhIGxhIGludGVyZmF6IGRlIG5pdmVsIHN1cGVyaW9yIGRlbCBzZXJ2aWNpbyBkZSB3aWRnZXQuIExhcyBhcGxpY2FjaW9uZXMgbm9ybWFsZXMgbm8gZGViZXLDrWFuIG5lY2VzaXRhciBlc3RlIHBlcm1pc28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaW50ZXJhY3R1YXIgY29uIHVuIGFkbWluaXN0cmFkb3IgZGUgZGlzcG9zaXRpdm9zIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiB1dGlsaWNlIGZ1bmNpb25lcyBkZSBTdXJmYWNlRmxpbmdlciBkZSBiYWpvIG5pdmVsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImxlZXIgZWwgYsO6ZmVyIGRlIHRyYW1hcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiBsZWEgZWwgY29udGVuaWRvIGRlbCBiw7pmZXIgZGUgdHJhbWFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImFjY2VkZXIgYSBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iUGVybWl0ZSBxdWUgbGEgYXBsaWNhY2nDs24gdXRpbGljZSBmdW5jaW9uZXMgZGUgSW5wdXRGbGluZ2VyIGRlIGJham8gbml2ZWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJjb25maWd1cmFyIHBhbnRhbGxhcyBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIGNvbmZpZ3VyZSB5IHNlIGNvbmVjdGUgYSBwYW50YWxsYXMgV2ktRmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJjb250cm9sYXIgcGFudGFsbGFzIFdpLUZpIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iTWF5w7pzY3VsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkluZ3Jlc2FyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iRWxpZ2UgdW5hIGFwbGljYWNpw7NuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ik5vIHNlIHB1ZG8gYWJyaXIgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJDb21wYXJ0aXIgY29uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkNvbXBhcnRpciBjb24gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJNYW50w6luIHByZXNpb25hZG8gZWwgY29udHJvbGFkb3IgZGVzbGl6YW50ZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iRGVzbGl6YSBlbCBkZWRvIGhhY2lhIGFycmliYSBwYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgYWJham8gcGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRGVzbGl6YSBlbCBkZWRvIGhhY2lhIGxhIGl6cXVpZXJkYSBwYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iRGVzbGl6YSBlbCBkZWRvIGhhY2lhIGxhIGRlcmVjaGEgcGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJEZXNibG9xdWVhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJDw6FtYXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlNpbGVuY2lvc28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU29uaWRvIGFjdGl2YWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJCdXNjYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJEZXNsaXphIGVsIGRlZG8gcGFyYSBkZXNibG9xdWVhci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iQ29uZWN0YSB1biBhdXJpY3VsYXIgcGFyYSBlc2N1Y2hhciBsYXMgY29udHJhc2XDsWFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlB1bnRvIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQXVkaW8gQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJQYW50YWxsYSBpbmFsw6FtYnJpY2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iTGlzdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJTYWxpZGEgbXVsdGltZWRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iQ29uZWN0YXIgYWwgZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJUcmFuc21pdGlyIHBhbnRhbGxhIGEgZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJCdXNjYW5kbyBkaXNwb3NpdGl2b3PigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJDb25maWd1cmFjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJEZXNjb25lY3RhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJFeGFtaW5hbmRvLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iQ29uZWN0YW5kby4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iRGlzcG9uaWJsZSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlN1cGVycG9zaWNpw7NuICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBwcHAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBzZWd1cmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IlNlIGNvbmVjdMOzIGxhIHBhbnRhbGxhIGluYWzDoW1icmljYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJFc3RhIHBhbnRhbGxhIHNlIG11ZXN0cmEgZW4gb3RybyBkaXNwb3NpdGl2by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iVHJhbnNtaXRpZW5kbyBwYW50YWxsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IkVzdGFibGVjaWVuZG8gY29uZXhpw7NuIGNvbiA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJUcmFuc21pdGllbmRvIHBhbnRhbGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJTZSBlc3RhYmxlY2nDsyBjb25leGnDs24gY29uIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iRGVzY29uZWN0YXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IlJlYWxpemFyIGxsYW1hZGEgZGUgZW1lcmdlbmNpYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IsK/T2x2aWRhc3RlIGVsIHBhdHLDs24/Ijwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU2LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+IkludGVudGFyIGVuIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHMiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iVnVlbHZlIGEgaW50ZW50YXIgbcOhcyB0YXJkZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iU2FsaXIgZGUgcGFudGFsbGEgY29tcGxldGE6IGRlc2xpemFyIGFiYWpvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IkRlc2xpemEgZWwgZGVkbyBoYWNpYSBhYmFqbyBwYXJhIHNhbGlyIGRlIGxhIHBhbnRhbGxhIGNvbXBsZXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iTGlzdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJDb250cm9sIGRlc2xpemFudGUgY2lyY3VsYXIgZGUgaG9yYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IkNvbnRyb2wgZGVzbGl6YW50ZSBjaXJjdWxhciBkZSBtaW51dG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlNlbGVjY2lvbmFyIGhvcmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iU2VsZWNjaW9uYXIgbWludXRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iQ3VhZHLDrWN1bGEgbWVuc3VhbCBkZSBkw61hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+Ikxpc3RhIGRlIGHDsW9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJTZWxlY2Npb25hciBtZXMgeSBkw61hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iU2VsZWNjaW9uYXIgYcOxbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4gc2VsZWNjaW9uYWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gYm9ycmFkbyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKaW5kZXggYTg5ZjM1YS4uZDI1YjRlMyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJFc2NyaWJlIHVuIGPDs2RpZ28gUFVLIGRlIG9jaG8gY2FyYWN0ZXJlcyBvIG3DoXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IkxhIHRhcmpldGEgU0lNIGVzdMOhIGJsb3F1ZWFkYSBjb24gZWwgY8OzZGlnbyBQVUsuIEludHJvZHVjZSBlbCBjw7NkaWdvIFBVSyBwYXJhIGRlc2Jsb3F1ZWFybGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iSW50cm9kdWNlIGVsIGPDs2RpZ28gUFVLMiBwYXJhIGRlc2Jsb3F1ZWFyIGxhIHRhcmpldGEgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IkVycm9yLCBoYWJpbGl0YXIgYmxvcXVlbyBkZSBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJUZSBxdWVkYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50byBwYXJhIGJsb3F1ZWFyIGxhIHRhcmpldGEgU0lNLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IlF1ZWRhbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MgcGFyYSBibG9xdWVhciBsYSB0YXJqZXRhIFNJTS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IklEIGRlIGVtaXNvciBkZSBsbGFtYWRhIGVudHJhbnRlIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJQZXJtaXRlIGVubGF6YXIgY29uIGxhIGludGVyZmF6IGRlIG5pdmVsIHN1cGVyaW9yIGRlIHVuIHNlcnZpY2lvIGRlIFZQTi4gTGFzIGFwbGljYWNpb25lcyBub3JtYWxlcyBubyBkZWJlcsOtYW4gbmVjZXNpdGFyIGVzdGUgcGVybWlzby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iZW5sYXphciBjb24gdW4gZm9uZG8gZGUgcGFudGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IlBlcm1pdGUgZW5sYXphciBjb24gbGEgaW50ZXJmYXogZGUgbml2ZWwgc3VwZXJpb3IgZGUgdW4gZm9uZG8gZGUgcGFudGFsbGEuIExhcyBhcGxpY2FjaW9uZXMgbm9ybWFsZXMgbm8gZGViZXLDrWFuIG5lY2VzaXRhciBlc3RlIHBlcm1pc28uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJlbmxhemFyIGEgdW5hIHBhbnRhbGxhIHJlbW90YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IlBlcm1pdGUgZW5sYXphciBjb24gbGEgaW50ZXJmYXogZGUgbml2ZWwgc3VwZXJpb3IgZGUgdW5hIHBhbnRhbGxhIHJlbW90YS4gTGFzIGFwbGljYWNpb25lcyBub3JtYWxlcyBubyBkZWJlcsOtYW4gbmVjZXNpdGFyIGVzdGUgcGVybWlzby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJlbmxhemFyIGNvbiB1biBzZXJ2aWNpbyBkZSB3aWRnZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iUGVybWl0ZSBlbmxhemFyIGNvbiBsYSBpbnRlcmZheiBkZSBuaXZlbCBzdXBlcmlvciBkZSB1biBzZXJ2aWNpbyBkZSB3aWRnZXQuIExhcyBhcGxpY2FjaW9uZXMgbm9ybWFsZXMgbm8gZGViZXLDrWFuIG5lY2VzaXRhciBlc3RlIHBlcm1pc28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaW50ZXJhY3R1YXIgY29uIGVsIGFkbWluaXN0cmFkb3IgZGUgdW4gZGlzcG9zaXRpdm8iPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIHVzZSBmdW5jaW9uZXMgZGUgU3VyZmFjZUZsaW5nZXIgZGUgbml2ZWwgaW5mZXJpb3IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ibGVlciBtZW1vcmlhIGRlIGFsbWFjZW5hbWllbnRvIGludGVybWVkaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iUGVybWl0ZSBxdWUgbGEgYXBsaWNhY2nDs24gbGVhIGVsIGNvbnRlbmlkbyBkZSBsYSBtZW1vcmlhIGRlIGFsbWFjZW5hbWllbnRvIGludGVybWVkaW8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iYWNjZWRlciBhIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiB1dGlsaWNlIGZ1bmNpb25lcyBkZSBiYWpvIG5pdmVsIGRlIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4iY29uZmlndXJhciBwYW50YWxsYXMgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiBjb25maWd1cmUgcGFudGFsbGFzIFdpLUZpIHkgc2UgY29uZWN0ZSBhIGVsbGFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iY29udHJvbGFyIHBhbnRhbGxhcyBXaS1GaSI8L3N0cmluZz4KQEAgLTc4Myw3ICs3OTIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFlhaG9vIiBtc2dpZD0iODI3MTQzOTQwODQ2OTAyMTI3MyI+IllhaG9vISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xTa3lwZSIgbXNnaWQ9IjkwMTkyOTY3NDQ2MjI4MzI5NTEiPiJTa3lwZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xRcSIgbXNnaWQ9Ijg4ODc0ODQzNzk0OTQxMTE4ODQiPiJRUSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xHb29nbGVUYWxrIiBtc2dpZD0iNDkzOTAyMzIxMTQwMjc3MzA0Ij4iQ29udmVyc2FjaW9uZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sR29vZ2xlVGFsayIgbXNnaWQ9IjQ5MzkwMjMyMTE0MDI3NzMwNCI+IkhhbmdvdXRzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEljcSIgbXNnaWQ9IjE1NzQ4NzA0MzM2MDY1MTczMTUiPiJJQ1EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSmFiYmVyIiBtc2dpZD0iMjI3OTkxNzYzMDg3NTc3MTcyMiI+IkphYmJlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xOZXRNZWV0aW5nIiBtc2dpZD0iODI4NzYyNTY1NTk4NjgyNzk3MSI+Ik5ldE1lZXRpbmciPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJNYXnDunMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJJbnRybyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlNlbGVjY2lvbmFyIHVuYSBhcGxpY2FjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ik5vIHNlIGhhIHBvZGlkbyBhYnJpciA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iQ29tcGFydGlyIGNvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJDb21wYXJ0aXIgY29uIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iTWFudMOpbiBwdWxzYWRvIGVsIGljb25vIGRlIGRlc2Jsb3F1ZW8geSBkZXNsw616YWxvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgYXJyaWJhIHBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IkRlc2xpemEgZWwgZGVkbyBoYWNpYSBhYmFqbyBwYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgbGEgaXpxdWllcmRhIHBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgbGEgZGVyZWNoYSBwYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkRlc2Jsb3F1ZWFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkPDoW1hcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU2lsZW5jaW8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU29uaWRvIGFjdGl2YWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJCdXNjYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJEZXNsaXphIGVsIGRlZG8gcGFyYSBkZXNibG9xdWVhci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iQ29uZWN0YSB1biBhdXJpY3VsYXIgcGFyYSBlc2N1Y2hhciBsYXMgY29udHJhc2XDsWFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlB1bnRvIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQXVkaW8gQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJQYW50YWxsYSBpbmFsw6FtYnJpY2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iRmluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iU2FsaWRhIG11bHRpbWVkaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IkNvbmVjdGFyIGEgZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJFbnZpYXIgcGFudGFsbGEgYSBkaXNwb3NpdGl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IkJ1c2NhbmRvIGRpc3Bvc2l0aXZvc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IkFqdXN0ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iRGVzY29uZWN0YXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iQW5hbGl6YW5kby4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IkNvbmVjdGFuZG8uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkRpc3BvbmlibGUiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJTdXBlcnBvc2ljacOzbiAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz4geCA8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgc2VndXJvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJQYW50YWxsYSBpbmFsw6FtYnJpY2EgY29uZWN0YWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkVzdGEgcGFudGFsbGEgc2UgbXVlc3RyYSBlbiBvdHJvIGRpc3Bvc2l0aXZvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJFbnZpYW5kbyBwYW50YWxsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IkNvbmVjdGFuZG8gYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJFbnZpYW5kbyBwYW50YWxsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iQ29uZWN0YWRvIGEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IkRlc2NvbmVjdGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJMbGFtYWRhIGRlIGVtZXJnZW5jaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLCv0hhcyBvbHZpZGFkbyBlbCBwYXRyw7NuPyI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY1NywxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iVm9sdmVyIGEgaW50ZW50YXIgbcOhcyB0YXJkZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgYWJham8gcGFyYSBzYWxpciBkZSBsYSBwYW50YWxsYSBjb21wbGV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iTGlzdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJDb250cm9sIGRlc2xpemFudGUgY2lyY3VsYXIgZGUgaG9yYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IkNvbnRyb2wgZGVzbGl6YW50ZSBjaXJjdWxhciBkZSBtaW51dG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlNlbGVjY2lvbmFyIGhvcmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iU2VsZWNjaW9uYXIgbWludXRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iQ3VhZHLDrWN1bGEgbWVuc3VhbCBkZSBkw61hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+Ikxpc3RhIGRlIGHDsW9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJTZWxlY2Npb25hciBtZXMgeSBkw61hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iU2VsZWNjaW9uYXIgYcOxbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4gc2VsZWNjaW9uYWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gZWxpbWluYWRvIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCmluZGV4IDc0MmQzZGEuLjc0ZjZlMTkgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJTaXNlc3RhZ2UgOC0gdsO1aSBlbmFtYW51bWJyaWxpbmUgUFVLLWtvb2QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlNJTS1rYWFydCBvbiBQVUstbHVrdXN0YXR1ZC4gQXZhbWlzZWtzIHNpc2VzdGFnZSBQVUsta29vZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJTaXNlc3RhZ2UgU0lNLWthYXJkaSBibG9rZWVyaW5ndSB0w7xoaXN0YW1pc2VrcyBQVUsyLWtvb2QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iRWJhw7VubmVzdHVzLCBTSU0taS9SVUlNLWkgbHVrdXN0dXNlIGx1YmFtaW5lLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IlRlaWwgb24gZW5uZSBTSU0taSBsdWt1c3R1bWlzdCBqw6TDpG51ZCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYXRzZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJUZWlsIG9uIGVubmUgU0lNLWkgbHVrdXN0dW1pc3QgasOkw6RudWQgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2F0c2V0LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iU2lzc2V0dWxldmEga8O1bmUgaGVsaXN0YWphIElEIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJWw7VpbWFsZGFiIG9tYW5pa3VsIHNpZHVkYSBWUE4tdGVlbnVzZSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+InRhdXN0YXBpbGRpZ2Egc2lkdW1pbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+Ikx1YmFiIG9tYW5pa3VsIHNpZHVkYSB0YXVzdGFwaWxkaSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJrYXVnZWtyYWFuaWdhIHNpZHVtaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iTHViYWIgb21hbmlrdWwgc2lkdWRhIHJha2VuZHVzZSBrYXVnZWtyYWFuaSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4idmlkaW5hdGVlbnVzZWdhIHNpZHVtaW5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+Ikx1YmFiIG9tYW5pa3VsIHNpZHVkYSB2aWRpbmEgdGVlbnVzZSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4ic2VhZG1lIGFkbWluaXN0cmFhdG9yaWdhIHN1aHRsZW1pbmUiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBrYXN1dGFkYSBTdXJmYWNlRmxpbmdlcmkgbWFkYWxhdGFzZW1lbGlzaSBmdW5rdHNpb29uZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJsb2Uga2FhZHJpcHVodnJpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga2FhZHJpcHVodnJpIHNpc3UgbHVnZWRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+Imp1dXJkZXDDpMOkcyBJbnB1dEZsaW5nZXJpbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iTHViYWIgcmFrZW5kdXNlbCBrYXN1dGFkYSBJbnB1dEZsaW5nZXJpIG1hZGFsYXRhc2VtZWxpc2kgZnVua3RzaW9vbmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJXaUZpLWVrcmFhbmlkZSBzZWFkaXN0YW1pbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJMdWJhYiByYWtlbmR1c2VsIHNlYWRpc3RhZGEgV2lGaS1la3JhYW5lIGphIG5lbmRlZ2Egw7xoZW5kdXMgbHV1YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IldpRmktZWtyYWFuaWRlIGp1aHRpbWluZSI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlTDtXN0dWtsYWh2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iU2lzZXN0dXNrbGFodiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlZhbGlnZSByYWtlbmR1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IlJha2VuZHVzdCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IGVpIMO1bm5lc3R1bnVkIGvDpGl2aXRhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJKYWdhOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJKYWdhIHJha2VuZHVzZWdhIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iTGliaXN0YW1pc3BpZGUuIFB1dWR1dGFnZSBqYSBob2lka2UgYWxsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJMb2hpc3RhZ2Ugw7xsZXM6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJMb2hpc3RhZ2UgYWxsYTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkxvaGlzdGFnZSB2YXNha3VsZTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJMb2hpc3RhZ2UgcGFyZW1hbGU6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Ikx1a3UgYXZhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYWFtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IkjDpMOkbGV0dSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJIZWxpIG9uIHNlZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Ik90c2luZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IkF2YW1pc2VrcyB0w7VtbWFrZSBzw7VybWVnYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUGFyb29saWRlIGt1dWxhbWlzZWtzIMO8aGVuZGFnZSBwZWFrb21wbGVrdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJQdW5rdC4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTw7xzdGVlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoLWhlbGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+Ikp1aHRtZXRhIGVrcmFhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJWYWxtaXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNZWVkaWF2w6RsanVuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iU2VhZG1lZ2Egw7xoZW5kYW1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJFa3JhYW5pa3V2YSDDvGxla2FuZG1pbmUgc2VhZG1lc3NlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iU2VhZG1ldGUgb3RzaW1pbmUg4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iU2VhZGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkthdGtlc3RhIMO8aGVuZHVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNrYW5lZXJpbmcgLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iw5xoZW5kYW4uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IlNhYWRhdmFsIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iw5xsZWthdGUgbnIgLjx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+IHggPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHR1cnZhbGluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iSnVodG1ldGEgZWtyYWFuacO8aGVuZHVzIG9uIGxvb2R1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJFa3JhYW4gb24gbsOkaGEgdGVpc2VzIHNlYWRtZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iRWtyYWFuaWt1dmEgw7xsZWthbmRtaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iw5xoZW5kYW1pbmUgZWtyYWFuaWdhIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IkVrcmFhbmlrdXZhIMO8bGVrYW5kbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iw5xoZW5kYXR1ZCBla3JhYW5pZ2EgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IkthdGtlc3RhIMO8aGVuZHVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJIw6RkYWFiaWvDtW5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iVW51c3Rhc2luIG11c3RyaSI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1NiwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiJQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlByb292aWdlIGhpbGplbSB1dWVzdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iVMOkaXNla3JhYW5pIHN1bGdlbWlzZWtzIHDDvGhraWdlIMO8bGV2YWx0IGFsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iVMOkaXNla3JhYW5pbHQgdsOkbGp1bWlzZWtzIHDDvGhraWdlIMO8bGV2YWx0IGFsbGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJWYWxtaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJSaW5naWt1anVsaW5lIHR1bm5pbGl1Z3VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJSaW5naWt1anVsaW5lIG1pbnV0aWxpdWd1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJUdW5kaWRlIHZhbGltaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iTWludXRpdGUgdmFsaW1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IlDDpGV2YWQga3V1IHJ1dWR1c3Rpa3VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iQWFzdGF0ZSBsb2VuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iS3V1IGphIHDDpGV2YSB2YWxpbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IkFhc3RhIHZhbGltaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBvbiB2YWxpdHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gb24ga3VzdHV0YXR1ZCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldC9kb25vdHRyYW5zbGF0ZS1jbGRyLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXQvZG9ub3R0cmFuc2xhdGUtY2xkci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDQ5ZGIyNDAuLjAwMDAwMDAKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldC9kb25vdHRyYW5zbGF0ZS1jbGRyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im51bWVyaWNfZGF0ZV90ZW1wbGF0ZSI+IiVzLiVzLiVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibW9udGhfZGF5X3llYXIiPiUtZSAlQiAlWTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGltZV9vZl9kYXkiPiUtazolTTolUzwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9hbmRfdGltZSI+JS1rOiVNOiVTICVkLiVtLiVZPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWUiPiUyJHMgJTEkczwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWV0L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE4MzJjOC4uMDAwMDAwMAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWV0L3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCi0qKgotKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKioKLSoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoqCi0qKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImJ5dGVTaG9ydCIgbXNnaWQ9IjgzNDA5NzM4OTI3NDIwMTkxMDEiPiJCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2lsb2J5dGVTaG9ydCIgbXNnaWQ9IjU5NzM3ODk3ODM1MDQ3NzE4NzgiPiJrQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZ2FieXRlU2hvcnQiIG1zZ2lkPSI2MzU1ODUxNTc2NzcwNDI4OTIyIj4iTUIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnaWdhYnl0ZVNob3J0IiBtc2dpZD0iMzI1OTg4MjQ1NTIxMjE5MzIxNCI+IkdCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGVyYWJ5dGVTaG9ydCIgbXNnaWQ9IjIzMTYxMzAxODE1OTE4Njk2MiI+IlRCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGV0YWJ5dGVTaG9ydCIgbXNnaWQ9IjU2Mzc4MTY2ODAxNDQ5OTAyMTkiPiJQQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbGVTaXplU3VmZml4IiBtc2dpZD0iOTE2NDI5Mjc5MTUwMDUzMTk0OSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJHM8L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZsdDtQZWFsa2lyamF0YSZndDsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpcyIgbXNnaWQ9Ijc4OTk4Mjk1MTYwNDg4MTMyMzciPiLigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpc190d29fZG90cyIgbXNnaWQ9IjEyMjgwNzg5OTQ4NjYwMzA3MzYiPiLigKUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1wdHlQaG9uZU51bWJlciIgbXNnaWQ9Ijc2OTQwNjMwNDIwNzk2NzY1MTciPiIoVGVsZWZvbmludW1icml0IHBvbGUpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idW5rbm93bk5hbWUiIG1zZ2lkPSIyMjc3NTU2NTQ2NzQyNzQ2NTIyIj4iKFR1bmRtYXR1KSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIgbXNnaWQ9IjI2NjAwMjA5OTAwOTc3MzMwNzciPiJLw7VuZXBvc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0TXNpc2RuQWxwaGFUYWciIG1zZ2lkPSIyODUwODg5NzU0OTE5NTg0Njc0Ij4iTVNJU0ROMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+IsOcaGVuZHVzcHJvYmxlZW0gdsO1aSBrZWh0ZXR1IE1NSS1rb29kLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUZkbkVycm9yIiBtc2dpZD0iNTIyNDM5ODIxNjM4NTMxNjQ3MSI+IlRvaW1pbmcgb24gYWludWx0IGZpa3NlZXJpdHVkIHZhbGltaXNudW1icml0ZWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkIiBtc2dpZD0iODE0NzI3ODM0NjQxNDcxNDMxNSI+IlRlZW51cyBvbiBsdWJhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkRm9yIiBtc2dpZD0iNjg1NjIyODE0MDQ1MzQ3MTA0MSI+IlRlZW51cyBvbGkgbHViYXR1ZCBqw6RyZ21pc2VsZToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRGlzYWJsZWQiIG1zZ2lkPSIxOTM3NTUzMjI2NTkyNTE2NDExIj4iVGVlbnVzIG9uIGtlZWxhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VSZWdpc3RlcmVkIiBtc2dpZD0iNjI3NTAxOTA4MjU5ODEwMjQ5MyI+IlJlZ2lzdHJlZXJpbWluZSDDtW5uZXN0dXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVyYXNlZCIgbXNnaWQ9IjEyODg1ODQ2OTUyOTcyMDA5NzIiPiJLdXN0dXRhbWluZSBvbGkgZWR1a2FzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkSW5jb3JyZWN0IiBtc2dpZD0iNzYxMjIwODgzOTQ1MDEyODcxNSI+IlZhbGUgcGFyb29sLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUNvbXBsZXRlIiBtc2dpZD0iODIzMjUyNzQ5NTQxMTY5ODM1OSI+Ik1NSSBvbiBsw7VwdWxlIHZpaWR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWRQaW4iIG1zZ2lkPSI5MDE1Mjc3NjQ1NTQ2NzEwMDE0Ij4iU2lzZXN0YXR1ZCB2YW5hIFBJTi1rb29kIHBvbGUgw7VpZ2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFkUHVrIiBtc2dpZD0iNTQ4NzI1NzY0NzA4MTEzMjIwMSI+IlNpc2VzdGF0dWQgUFVLLWtvb2QgcG9sZSDDtWlnZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+IlNpc2VzdGF0dWQgUElOLWtvb2RpZCBlaSBrYXR0dS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUGluIiBtc2dpZD0iMzg1MDAxODQ0NTE4NzQ3NTM3NyI+IlNpc2VzdGFnZSA04oCTOC1udW1icmlsaW5lIFBJTi1rb29kLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iU2lzZXN0YWdlIDgtIHbDtWkgZW5hbWFudW1icmlsaW5lIFBVSy1rb29kLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU0ta2FhcnQgb24gUFVLLWx1a3VzdGF0dWQuIEF2YW1pc2VrcyBzaXNlc3RhZ2UgUFVLLWtvb2QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iU2lzZXN0YWdlIFNJTS1rYWFyZGkgYmxva2VlcmluZ3UgdMO8aGlzdGFtaXNla3MgUFVLMi1rb29kLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iU2lzc2V0dWxldmEga8O1bmUgaGVsaXN0YWphIElEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ2xpck1taSIgbXNnaWQ9Ijc3ODQ2NzM2NzM0NDY4MzMwOTEiPiJWw6RsanV2YSBrw7VuZSBoZWxpc3RhamEgSUQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDZk1taSIgbXNnaWQ9IjUxMjMyMTg5ODkxNDE1NzM1MTUiPiJLw7VuZWRlIHN1dW5hbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkN3TW1pIiBtc2dpZD0iOTEyOTY3ODA1Njc5NTAxNjg2NyI+IktvcHV0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJCYU1taSIgbXNnaWQ9IjQ1NTE5MzA2NzkyNjc3MDU4MSI+IkvDtW5lcGlpcmFuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlB3ZE1taSIgbXNnaWQ9IjcwNDM3MTU2ODc5MDUyNTQxOTkiPiJQYXJvb2xpIG11dXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUGluTW1pIiBtc2dpZD0iMzExMzExNzc4MDM2MTE5MDMwNCI+IlBJTi1rb29kaSBtdXV0bWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNuaXBNbWkiIG1zZ2lkPSIzMTEwNTM0NjgwNTU3ODU3MTYyIj4iSGVsaXN0YWphIG51bWJlciBvbGVtYXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDbmlyTW1pIiBtc2dpZD0iMzA2MjEwMjEyMTQzMDU0ODczMSI+IkhlbGlzdGFqYSBudW1iZXIgcGlpcmF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJUaHJlZVdDTW1pIiBtc2dpZD0iOTA1MTA0NzE3MDMyMTE5MDM2OCI+IktvbG1lc3V1bmFsaW5lIGvDtW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUnVhY01taSIgbXNnaWQ9Ijc4Mjc4ODc0NTkxMzgzMDg4ODYiPiJTb292aW1hdHV0ZSB0w7zDvHR1dGUga8O1bmVkZSBow7xsZ2FtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ25kTW1pIiBtc2dpZD0iMzExNjQ0NjIzNzA4MTU3NTgwOCI+IkhlbGlzdGFqYSBudW1icmkga29oYWxldG9pbWV0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJEbmRNbWkiIG1zZ2lkPSIxMjY1NDc4OTMyNDE4MzM0MzMxIj4iTWl0dGUgaMOkaXJpZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPbiIgbXNnaWQ9IjQyOTQxNTQwOTE0NTc4MTkyMyI+IkhlbGlzdGFqYSBJRCB2YWlraW1pc2kgcGlpcmF0dWQuIErDpHJnbWluZSBrw7VuZTogcGlpcmF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPZmYiIG1zZ2lkPSIzMDkyOTE4MDA2MDc3ODY0NjI0Ij4iSGVsaXN0YWphIElEIHZhaWtpbWlzaSBwaWlyYXR1ZC4gSsOkcmdtaW5lIGvDtW5lOiBwb2xlIHBpaXJhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9uIiBtc2dpZD0iNjE3OTQyNTE4Mjg1NjQxODQ2NSI+IlZhaWtpbWlzaSBwb2xlIGhlbGlzdGFqYSBJRCBwaWlyYXR1ZC4gSsOkcmdtaW5lIGvDtW5lOiBwaWlyYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPZmYiIG1zZ2lkPSIyNTY3OTk4NjMzMTI0NDA4NTUyIj4iSGVsaXN0YWphIElEIHBvbGUgdmFpa2ltaXNpIHBpaXJhdHVkLiBKw6RyZ21pbmUga8O1bmU6IHBvbGUgcGlpcmF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlTm90UHJvdmlzaW9uZWQiIG1zZ2lkPSI4NjE0ODMwMTgwNTA4Njg2NjY2Ij4iVGVlbnVzIHBvbGUgZXR0ZSB2YWxtaXN0YXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDTElSUGVybWFuZW50IiBtc2dpZD0iMzM3NzM3MTE0NTkyNjgzNTY3MSI+IkhlbGlzdGFqYSBJRCBzZWFkZXQgZWkgc2FhIG11dXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRDaGFuZ2VkVGl0bGUiIG1zZ2lkPSI1NTkyMTg5Mzk4OTU2MTg3NDk4Ij4iUGlpcmF0dWQganV1cmRlcMOkw6RzIG11dXR1bnVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRGF0YSIgbXNnaWQ9Ijg2NTM3OTQ3ODQ2OTAwNjU1NDAiPiJBbmRtZXNpZGV0ZWVudXMgb24gYmxva2Vlcml0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRW1lcmdlbmN5IiBtc2dpZD0iNjU4MTE2Mzc3OTA3MjgzMzY2NSI+IkjDpGRhYWJpdGVlbnVzIG9uIGJsb2tlZXJpdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbk5vcm1hbCIgbXNnaWQ9IjQ5NTM4NjcwMTEzODk3NTA2NzMiPiJIw6TDpGx0ZWVudXMgb24gYmxva2Vlcml0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsVm9pY2UiIG1zZ2lkPSIzMzk2OTYzNjUyMTA4MTUxMjYwIj4iS8O1aWsgaMOkw6RsdGVlbnVzZWQgb24gYmxva2Vlcml0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uU21zIiBtc2dpZD0iODMxNDM1MjMyNzQ2MTYzODg5NyI+IlNNUy10ZWVudXMgb24gYmxva2Vlcml0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VEYXRhIiBtc2dpZD0iOTk2NjM2NDg3MTA2MTcxMzIwIj4iSMOkw6RsLS9hbmRtZXRlZW51c2VkIG9uIGJsb2tlZXJpdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+IkjDpMOkbC0vU01TLXRlZW51c2VkIG9uIGJsb2tlZXJpdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbCIgbXNnaWQ9IjU2NDMwMjgyNjQ0NjYwOTI4MjEiPiJLw7VpayBow6TDpGwtL2FuZG1lLS9TTVMtdGVlbnVzZWQgb24gYmxva2Vlcml0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzVm9pY2UiIG1zZ2lkPSIxMjU4MzkzODEyMzM1MjU4MDE5Ij4iSMOkw6RsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YSIgbXNnaWQ9Ijg3MjQ1Njc4MjA3NzkzNzg5MyI+IkFuZG1lZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0ZBWCIgbXNnaWQ9IjU1NjY2MjQ5OTg4NDA0ODY0NzUiPiJGQUtTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzU01TIiBtc2dpZD0iMjAxNTQ2MDM3MzcwMTUyNzQ4OSI+IlNNUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFBc3luYyIgbXNnaWQ9IjQ1MjM0NTQ3ODM0OTg1NTE0NjgiPiJBc8O8bmtyb29uaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFTeW5jIiBtc2dpZD0iNzUzMDAwMDUxOTY0NjA1NDc3NiI+IlPDvG5rcm9vbmltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzUGFja2V0IiBtc2dpZD0iNjk5MTAwNjU1Nzk5MzQyMzQ1MyI+IlBha2V0dCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BBRCIgbXNnaWQ9IjMyMzUyNTkwODU2NDgyNzEwMzciPiJQQUQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDAiIG1zZ2lkPSI3MTcwMzM1NDcyMTk4Njk0OTQ1Ij4iUsOkbmRsdXNpbmRpa2FhdG9yIHNlZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEiIG1zZ2lkPSI1MzE0ODYxNTE5NzUyNTM4OTIyIj4iUsOkbmRsdXNpbmRpa2FhdG9yIHbDpGxqYXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDIiIG1zZ2lkPSI4OTY5OTI5MDQ5MDgxMjY4MTE1Ij4iUsOkbmRsdXNpbmRpa2FhdG9yIHZpbGd1YiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MyIgbXNnaWQ9IjUxNDgyNTUwMjcwNDM5NDMzMTciPiJOYWFicnVza29ubmFzdCB2w6RsamFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ0IiBtc2dpZD0iODgwODQ1NjY4MjU1MDc5NjUzMCI+IkFyZW5kdXNlc3QgdsOkbGphcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NSIgbXNnaWQ9Ijc2MDQwNjMyNTI4NTAzNTQzNTAiPiJSw6RuZGx1cyDigJMgZWVsaXN0YXR1ZCBzw7xzdGVlbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NiIgbXNnaWQ9IjIwNTk0NDA4MjU3ODI4NzE1MTMiPiJSw6RuZGx1cyDigJMgc2FhZGFvbGV2IHPDvHN0ZWVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ3IiBtc2dpZD0iNzExMjA3ODcyNDA5NzIzMzYwNSI+IlLDpG5kbHVzIOKAkyBBbGxpYW5jZVwnaSBwYXJ0bmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ4IiBtc2dpZD0iNTk4OTU2OTc3ODYwNDA4OTI5MSI+IlLDpG5kbHVzIOKAkyBQcmVtaXVtaSBwYXJ0bmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ5IiBtc2dpZD0iNzk2OTI5NjgxMTM1NTE1MjQ5MSI+IlLDpG5kbHVzIC0gdMOkaXN0ZWVudXNlIGZ1bmt0c2lvbmFhbHN1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTAiIG1zZ2lkPSIzOTkyOTA2OTk5ODE1MzE2NDE3Ij4iUsOkbmRsdXMgLSBvc2FsaW5lIHRlZW51c2VmdW5rdHNpb25hYWxzdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDExIiBtc2dpZD0iNDE1NDQ3Njg1NDQyNjkyMDk3MCI+IlLDpG5kbHVzZSBiw6RubmVyIHNlZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEyIiBtc2dpZD0iMTE4OTA3MTExOTk5MjcyNjMyMCI+IlLDpG5kbHVzYsOkbm5lciB2w6RsamFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHRTZWFyY2hpbmciIG1zZ2lkPSI4MzYwMTQxODg1OTcyMjc5OTYzIj4iVGVlbnVzZSBvdHNpbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVOb3RGb3J3YXJkZWQiIG1zZ2lkPSIxNjgzNjg1ODgzODQxMjcyNTYwIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IHBvbGUgc3V1bmF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlRm9yd2FyZGVkIiBtc2dpZD0iMTMwMjkyMjExNzQ5ODU5MDUyMSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iRElBTElOR19OVU1CRVIiPnsxfTwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlRm9yd2FyZGVkVGltZSIgbXNnaWQ9IjkyMDYyNTE3MzY1MjcwODUyNTYiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IkRJQUxJTkdfTlVNQkVSIj57MX08L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJUSU1FX0RFTEFZIj57Mn08L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkIiBtc2dpZD0iNTA3MzIzNzgyNzYyMDE2NjI4NSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBwb2xlIHN1dW5hdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZVJlZ2lzdGVyZWRUaW1lIiBtc2dpZD0iNjc4MTYyMTk2NDMyMDYzNTE3MiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBwb2xlIGVkYXN0YXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZjQ29tcGxldGUiIG1zZ2lkPSIzMTE4ODQ4MjMwOTY2ODg2NTc1Ij4iRnVua3RzaW9vbmlrb29kIHZhbG1pcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmY0Vycm9yIiBtc2dpZD0iMzMyNzU2MDEyNjU4ODUwMDc3NyI+IsOcaGVuZHVzcHJvYmxlZW0gdsO1aSBrZWh0ZXR1IGZ1bmt0c2lvb25pa29vZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JPayIgbXNnaWQ9IjExOTE5MTkzNzgwODM0NzIyMDQiPiJPSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvciIgbXNnaWQ9Ijc5NTYzOTI1MTExNDY2OTg1MjIiPiJJbG1uZXMgdsO1cmd1IHZpZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yTG9va3VwIiBtc2dpZD0iNDcxMTY4NzQ1NjExMTk2MzE2MyI+IlVSTC1pIGVpIGxlaXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiJTYWlkaSBhdXRlbnRpbWlzZSBza2VlbWkgZWkgdG9ldGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JBdXRoIiBtc2dpZD0iMTQzNTA2NTYyOTQzODA0NDUzNCI+IkF1dGVudGltaW5lIGViYcO1bm5lc3R1cy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JQcm94eUF1dGgiIG1zZ2lkPSIxNzg4MjA3MDEwNTU5MDgxMzMxIj4iUHVodmVyc2VydmVyaSBrYXVkdSBhdXRlbnRpbWluZSBlYmHDtW5uZXN0dXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQ29ubmVjdCIgbXNnaWQ9Ijg3MTQyNzMyMzYzNjQ2NDA1NDkiPiJTZXJ2ZXJpZ2EgZWkgc2FhbnVkIMO8aGVuZHVzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JJTyIgbXNnaWQ9IjIzNDA1NTgxOTc0ODkzMDIxODgiPiJTZXJ2ZXJpZ2EgZWkgc2FhbnVkIMO8aGVuZHVzdC4gUHJvb3ZpZ2UgaGlsamVtIHV1ZXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUaW1lb3V0IiBtc2dpZD0iNDc0MzQwMzcwMzc2Mjg4Mzk1NCI+IsOcaGVuZHVzIHNlcnZlcmlnYSBhZWd1bnVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclJlZGlyZWN0TG9vcCIgbXNnaWQ9Ijg2Nzk1OTYwOTAzOTI3Nzk1MTYiPiJMZWh0IHNpc2FsZGFiIGxpaWdhIHBhbGp1IHNlcnZlcmkgw7xtYmVyc3V1bmFtaXNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkU2NoZW1lIiBtc2dpZD0iNTAxNTczMDgxMjkwNjE5MjIwOCI+IlByb3Rva29sbGkgZWkgdG9ldGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGYWlsZWRTc2xIYW5kc2hha2UiIG1zZ2lkPSI5NjU0OTYwNjAwMDY1ODY0MSI+IlR1cnZhbGlzdCDDvGhlbmR1c3QgZWkgc2FhbnVkIGx1dWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQmFkVXJsIiBtc2dpZD0iMzYzNjkyOTcyMjcyODg4MTk3MiI+IkxlaHRlIHBvbGUgdsO1aW1hbGlrIGF2YWRhLCBrdW5hIFVSTCBvbiB2YWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZpbGUiIG1zZ2lkPSIyMTcwNzg4NTE1MDUyNTU4Njc2Ij4iRmFpbGlsZSBlaSBww6TDpHNlIGp1dXJkZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlTm90Rm91bmQiIG1zZ2lkPSI2MjAzODU2NjEyMDQyNjU1MDg0Ij4iU29vdml0dWQgZmFpbGkgZWkgbGVpdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclRvb01hbnlSZXF1ZXN0cyIgbXNnaWQ9IjEyMzUzOTY5MjcwODcxODgyNTMiPiJUw7bDtnRsZW1pc2VsIG9uIGxpaWdhIHBhbGp1IHRhb3RsdXNpLiBQcm9vdmlnZSBoaWxqZW0gdXVlc3RpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg5Njc3MTAwMjUwMzYxNjM4MjIiPiJWaWdhIGtvbnRvbGUgPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHNpc3NlbG9naW1pc2VsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jIiBtc2dpZD0iODM1MzUyMzA2MDI2OTMzNTY2NyI+IlPDvG5rcm9vbmltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jTm90aWZpY2F0aW9uVGl0bGUiIG1zZ2lkPSIzOTc3NDMzNDkxOTE5MDE0NTgiPiJTw7xua3Jvb25pbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlVG9vTWFueURlbGV0ZXNOb3RpZmljYXRpb25EZXNjIiBtc2dpZD0iODEwMDk4MTQzNTA4MDY5NjQzMSI+IkxpaWdhIHBhbGp1IMO8a3N1c2UgPHhsaWZmOmcgaWQ9IkNPTlRFTlRfVFlQRSI+JXM8L3hsaWZmOmc+IGt1c3R1dHVzaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NDk0MDE5MjM0MTAyMTU0ODk2Ij4iVGFodmVsYXJ2dXRpIG3DpGx1cnV1bSBvbiB0w6Rpcy4gUnV1bWkgdmFiYXN0YW1pc2VrcyBrdXN0dXRhZ2UgbcO1bmVkIGZhaWxpZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ3NTk5OTI4NjY4MDAwMDU0MSI+IlRlbGVmb25pbcOkbHUgb24gdMOkaXMuIFJ1dW1pIHZhYmFzdGFtaXNla3Mga3VzdHV0YWdlIG3DtW5lZCBmYWlsaWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWUiIG1zZ2lkPSI2NTQ1Njk2MDA3NjMxNDA0MjkyIj4iTWluYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2RpYWxvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODU0NTM1MTQyMDg2NTIwMjg1MyI+IlRhaHZlbGFydnV0aSB2YWxpa3VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMxOTkxOTA3NTQ2Mzk4ODYzOCI+IlRlbGVmb25pdmFsaWt1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlIiBtc2dpZD0iNzE2NzcwMzM4OTgwMjYxODY2MyI+IkjDpMOkbGV0dSByZcW+aWltIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idHVybl9vbl9yYWRpbyIgbXNnaWQ9IjM5MTI3OTMwOTIzMzk5NjIzNzEiPiJMw7xsaXRhZ2UgdHJhYWRpdGEgc2lkZSBzaXNzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InR1cm5fb2ZmX3JhZGlvIiBtc2dpZD0iODE5ODc4NDk0OTk4NzA2MjM0NiI+IkzDvGxpdGFnZSByYWFkaW9zaWRlIHbDpGxqYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9sb2NrIiBtc2dpZD0iNzk5MDk0NjU1NDk2MDk4MTUzIj4iRWtyYWFuaWx1a2siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3dlcl9vZmYiIG1zZ2lkPSI0MjY2NjE0MTA3NDEyODY1MDQ4Ij4iTMO8bGl0YSB2w6RsamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9zaWxlbnQiIG1zZ2lkPSIzMTkyOTgxNjMwMTg0NzMwNzgiPiJIZWxpbiBvbiB2w6RsamFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfdmlicmF0ZSIgbXNnaWQ9IjcwNzIwNDMzODg1ODE1NTEzOTUiPiJWaWJyZWVyaXYgaGVsaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9yaW5nIiBtc2dpZD0iODU5MjI0MTgxNjE5NDA3NDM1MyI+IkhlbGluIG9uIHNlZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9wcm9ncmVzcyIgbXNnaWQ9IjIyODEwNzkyNTczMjk5ODEyMDMiPiJWw6RsamFsw7xsaXRhbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMzg1NzQ1MTc5NTU1NzMxNDcwIj4iVGVpZSB0YWh2ZWxhcnZ1dGkgbMO8bGl0dWIgdsOkbGphLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDk3OTIxNzUyNDI4MjEzNTMiPiJUZWllIHRlbGVmb24gbMO8bGl0dWIgdsOkbGphLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm1fcXVlc3Rpb24iIG1zZ2lkPSIyOTA2NTQ0NzY4ODgxMTM2MTgzIj4iS2FzIHNvb3ZpdGUgdsOkbGphIGzDvGxpdGFkYT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfdGl0bGUiIG1zZ2lkPSI3MDU0NTA5OTE0NTAwMTQwMzYxIj4iT2h1dHVzIHJlxb5paW1pcyB0YWFza8OkaXZpdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX2NvbmZpcm0iIG1zZ2lkPSI1NTI5Mzk0NDUwMjc4NDY2OCI+IkthcyBzb292aXRlIHRhYXNrw6Rpdml0YWRhIG9odXR1cyByZcW+aWltaXM/IFNlZSBrZWVsYWIga8O1aWsgaW5zdGFsbGl0dWQga29sbWFuZGF0ZSBvc2Fwb29sdGUgcmFrZW5kdXNlZC4gTmVlZCB0YWFzdGF0YWtzZSBww6RyYXN0IHV1ZXN0aSB0YWFza8OkaXZpdGFtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiJIaWxqdXRpc2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+IkhpbGp1dGlzaSByYWtlbmR1c2kgcG9sZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDA4NDc3MTQwMDg4MDUzNjY1Ij4iVGFodmVsYXJ2dXRpIHZhbGlrdWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiJUZWxlZm9uaXZhbGlrdWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2siIG1zZ2lkPSIyODQ0OTQ1MTkxNzkyMTE5NzEyIj4iRWtyYWFuaWx1a2siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3Bvd2VyX29mZiIgbXNnaWQ9IjQ0NzE4Nzk0NDA4Mzk4Nzk3MjIiPiJMw7xsaXRhIHbDpGxqYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fYnVnX3JlcG9ydCIgbXNnaWQ9Ijc5MzQwMTA1Nzg5MjIzMDQ3OTkiPiJWZWFhcnVhbm5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3RpdGxlIiBtc2dpZD0iMjY2NzQ5NDgwMzc0MjU0ODUzMyI+IlZlYWFydWFuZGUgdsO1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfbWVzc2FnZSIgbXNnaWQ9IjM5ODQ0NzA0ODc1MDM1MDQ1NiI+Ik5paSBrb2d1dGFrc2UgdGVhdmV0IHRlaWUgc2VhZG1lIHByYWVndXNlIG9sZWt1IGtvaHRhLCBldCBzYWF0YSBzZWUgbWVpbGlzw7VudW1pbmEuIEVubmUga3VpIHNhYXRlIHZlYWFydWFuZGUgw6RyYSBzYWF0YSwgdsO1dGFiIHNlbGxlIGxvb21pbmUgbmF0dWtlIGFlZ2E7IHZhcnVnZSBrYW5uYXR1c3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl90b2dnbGVfc2lsZW50X21vZGUiIG1zZ2lkPSI4MjE5NTI1MzQ0MjQ2ODEwOTI1Ij4iSMOkw6RsZXR1IHJlxb5paW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjMyODk4NDE5MzcwMDM3NTg4MDYiPiJIZWxpIG9uIFbDhExKQVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSIxNTA2MDQ2NTc5MTc3MDY2NDE5Ij4iSGVsaSBvbiBTRUVTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfdG9nZ2xlX2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI1ODg0MzMwMzA2OTI2MzA3NDU2Ij4iTGVubnVyZcW+aWltIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfYWlycGxhbmVfbW9kZV9vbl9zdGF0dXMiIG1zZ2lkPSIyNzE5NTU3OTgyNjA4OTE5NzUwIj4iTGVubnVyZcW+aWltIG9uIFNFRVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSI1MDc1MDcwNDQyODU0NDkwMjk2Ij4iTGVubnVyZcW+aWltIG9uIFbDhExKQVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJUdXJ2YXJlxb5paW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkLXPDvHN0ZWVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Nvc3RNb25leSIgbXNnaWQ9IjU0Mjk4MDgyMTc4NjE0NjA0MDEiPiJUYXN1bGlzZWQgdGVlbnVzZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Nvc3RNb25leSIgbXNnaWQ9IjMyOTMzMDE5MDM0MDk4Njk0OTUiPiJUYXN1bGlzdGUgdG9pbWluZ3V0ZSB0ZWdlbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWVzc2FnZXMiIG1zZ2lkPSI3NTIxMjQ5MTQ4NDQ1NDU2NjYyIj4iVGVpZSBzw7VudW1pZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWVzc2FnZXMiIG1zZ2lkPSI3ODIxOTk5MDcxMDAzNjk5MjM2Ij4iVGVpZSBTTVMtLCBtZWlsaS0gamEgbXV1ZGUgc8O1bnVtaXRlIGx1Z2VtaW5lIGphIGtpcmp1dGFtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9wZXJzb25hbEluZm8iIG1zZ2lkPSIzNTE5MTYzMTQxMDcwNTMzNDc0Ij4iVGVpZSBpc2lrbGlrdWQgYW5kbWVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19wZXJzb25hbEluZm8iIG1zZ2lkPSI4NDI2NDUzMTI5Nzg4ODYxMzM4Ij4iT3RzZW5lIGp1dXJkZXDDpMOkcyB0ZWllIGtvaHRhIGvDpGl2YWxlIHRlYWJlbGUsIG1pcyBvbiBzYWx2ZXN0YXR1ZCB0ZWllIGtvbnRha3Rpa2FhcmRpbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NvY2lhbEluZm8iIG1zZ2lkPSI1Nzk5MDk2NjIzNDEyMDQzNzkxIj4iVGVpZSBzb3RzaWFhbG5lIHRlYXZlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zb2NpYWxJbmZvIiBtc2dpZD0iNzEyOTg0MjQ1NzYxMTY0MzQ5MyI+Ik90c2VuZSBqdXVyZGVww6TDpHMgdGVpZSBrb250YWt0aWRlIHRlYWJlbGUgamEgc290c2lhYWxzZXRlbGUgc2lkZW1ldGVsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbG9jYXRpb24iIG1zZ2lkPSI2MzUxNDk3NDI0MzY2OTIwNDkiPiJUZWllIGFzdWtvaHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2xvY2F0aW9uIiBtc2dpZD0iNTcwNDY3OTc2MzEyNDE3MDEwMCI+IkrDpGxnaWdlIG9tYSBmw7zDvHNpbGlzdCBhc3Vrb2h0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbmV0d29yayIgbXNnaWQ9IjU4MDg5ODMzNzc3MjcxMDk4MzEiPiJWw7VyZ3VzdWh0bHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19uZXR3b3JrIiBtc2dpZD0iNDQ3ODI5OTQxMzI0MTg2MTk4NyI+Ikp1dXJkZXDDpMOkcyBlcmluZXZhdGVsZSB2w7VyZ3VmdW5rdHNpb29uaWRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSIxNTg1NDAzNTQ0MTYyMTI4MTA5Ij4iQmx1ZXRvb3RoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iNTYyNTI4ODU3NzE2NDI4MjM5MSI+Ikp1dXJkZXDDpMOkcyBzZWFkbWV0ZWxlIGphIHbDtXJrdWRlbGUgQmx1ZXRvb3RoaSBrYXVkdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjgzMjkyNjE2NzAxNTE4NzEyMzUiPiJIZWxpc2VhZGVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hdWRpb1NldHRpbmdzIiBtc2dpZD0iMjY0MTUxNTQwMzM0NzU2ODEzMCI+IkhlbGlzZWFkZXRlIG11dXRtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hZmZlY3RzQmF0dGVyeSIgbXNnaWQ9IjYyMDkyNDY2NTM0MjQ3OTgwMzMiPiJBa3UgbcO1anV0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjQ0MTI3NTMyMDYzODkxNjk0NyI+IkZ1bmt0c2lvb25pZGUsIG1pcyB2w7VpdmFkIGFrdSBraWlyZXN0aSB0w7xoamVuZGFkYSwga2FzdXRhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FsZW5kYXIiIG1zZ2lkPSI1ODYzNTA4NDM3NzgzNjgzOTAyIj4iS2FsZW5kZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2NhbGVuZGFyIiBtc2dpZD0iNTc3NzUzNDMxNjk4MjE4NDQxNiI+Ik90c2VuZSBqdXVyZGVww6TDpHMga2FsZW5kcmlsZSBqYSBzw7xuZG11c3RlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RpY3Rpb25hcnkiIG1zZ2lkPSI0MTQ4NTk3MTI4ODQzNjQxMzc5Ij4iS2FzdXRhamEgc8O1bmFyYWFtYXR1IGx1Z2VtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaWN0aW9uYXJ5IiBtc2dpZD0iNzkyMTE2NjM1NTk2NDc2NDQ5MCI+Ikthc3V0YWphIHPDtW5hcmFhbWF0dSBzw7VuYWRlIGx1Z2VtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MDkwMjM3NzAyNDMyNTc2Nzg4Ij4iS2FzdXRhamEgc8O1bmFyYWFtYXR1c3NlIGtpcmp1dGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyNzExNTYxOTk0NDk3MzYxNjQ2Ij4iS2FzdXRhamEgc8O1bmFyYWFtYXR1c3NlIHPDtW5hZGUgbGlzYW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Jvb2ttYXJrcyIgbXNnaWQ9IjE5NDk1MTk2NzMxMDM5NjgyMjkiPiJKw6RyamVob2lkamFkIGphIGFqYWx1Z3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Jvb2ttYXJrcyIgbXNnaWQ9IjQxNjk3NzE2MDYyNTc5NjMwMjgiPiJPdHNlbmUganV1cmRlcMOkw6RzIGrDpHJqZWhvaWRqYXRlbGUgamEgYnJhdXNlcmkgYWphbG9vbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmljZUFsYXJtcyIgbXNnaWQ9IjYxMTc3MDQ2Mjk3Mjg4MjQxMDEiPiJBbGFybSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2aWNlQWxhcm1zIiBtc2dpZD0iNDc2OTM1NjM2MjI1MTY0MTE3NSI+IsOEcmF0dXNrZWxsYSBzZWFkbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfdm9pY2VtYWlsIiBtc2dpZD0iNDE2MjIzNzE0NTAyNzU5MjEzMyI+IkvDtW5lcG9zdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfdm9pY2VtYWlsIiBtc2dpZD0iMjQ5ODQwMzk2OTg2Mjk1MTM5MyI+Ik90c2VuZSBqdXVyZGVww6TDpHMga8O1bmVwb3N0aWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9taWNyb3Bob25lIiBtc2dpZD0iMTcxNTM5OTAwMjUwMDQzNDY0Ij4iTWlrcm9mb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21pY3JvcGhvbmUiIG1zZ2lkPSI3MTA2NjE4Mjg2OTA1NzM4NDA4Ij4iT3RzZW5lIGp1dXJkZXDDpMOkcyBtaWtyb2ZvbmlsZSBoZWxpIHNhbHZlc3RhbWlzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jYW1lcmEiIG1zZ2lkPSI0ODIwMzcyNDk1ODk0NTg2NjE1Ij4iS2FhbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMjkzMzY2NzM3MjI4OTU2NzcxNCI+Ik90c2VuZSBqdXVyZGVww6TDpHMga2FhbWVyYWxlIGZvdG9kZSB2w7VpIHZpZGVvdGUgasOkw6RkdnVzdGFtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NjcmVlbmxvY2siIG1zZ2lkPSI4Mjc1NTAwMTczMzMwNzE4MTY4Ij4iTHVrdXN0dXNrdXZhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zY3JlZW5sb2NrIiBtc2dpZD0iNzA2NzQ5NzEyODkyNTQ5OTQwMSI+IlbDtWltZSBtw7VqdXRhZGEgbHVrdXN0dXNrdXZhIGvDpGl0dW1pc3Qgc2VhZG1lcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXBwSW5mbyIgbXNnaWQ9IjgwMjg3ODk3NjI2MzQxNDc3MjUiPiJUZWllIHJha2VuZHVzdGUgdGVhdmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FwcEluZm8iIG1zZ2lkPSIzOTUwMzc4NTM4MDQ5NjI1OTA3Ij4iVsO1aW1lIG3DtWp1dGFkYSB0ZWlzdGUgc2VhZG1lcyBvbGV2YXRlIHJha2VuZHVzdGUga8OkaXR1bWlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd2FsbHBhcGVyIiBtc2dpZD0iMzg1MDI4MDE1ODA0MTE3NTk5OCI+IlRhdXN0YXBpbHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dhbGxwYXBlciIgbXNnaWQ9IjU2MzA0MTc4NTQ3NTA1NDAxNTQiPiJTZWFkbWUgdGF1c3RhcGlsZGkgc2VhZGV0ZSBtdXV0bWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3lzdGVtQ2xvY2siIG1zZ2lkPSI0MDY1MzU3NTkyMzY2MTI5OTIiPiJLZWxsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1DbG9jayIgbXNnaWQ9IjM5NDQzNTk4MzM2MjQwOTQ5OTIiPiJTZWFkbWUgYWphIHbDtWkgYWphdsO2w7ZuZGkgbXV1dG1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0YXR1c0JhciIgbXNnaWQ9IjIwOTU4NjI1NjgxMTM5NDUzOTgiPiJPbGVrdXJpYmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0YXR1c0JhciIgbXNnaWQ9IjYyNDI1OTM0MzIyMjY4MDcxNzEiPiJTZWFkbWUgb2xla3VyaWJhIHNlYWRldGUgbXV1dG1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5bmNTZXR0aW5ncyIgbXNnaWQ9IjMzNDE5OTA5ODYxNDc4MjY1NDEiPiJTw7xua3Jvb25pbWlzc2VhZGVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeW5jU2V0dGluZ3MiIG1zZ2lkPSI3NjAzMTk1MjY1MTI5MDMxNzk3Ij4iSnV1cmRlcMOkw6RzIHPDvG5rcm9vbmltaXNzZWFkZXRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY291bnRzIiBtc2dpZD0iMzM1OTY0NjI5MTEyNTMyNTUxOSI+IlRlaWUga29udG9kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2NvdW50cyIgbXNnaWQ9IjQ5NDg3MzI2NDE4MjcwOTEzMTIiPiJKdXVyZGVww6TDpHMgc2FhZGFvbGV2YXRlbGUga29udG9kZWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNzk5ODIxNDk2ODc5MTU5OTMyNiI+IlJpaXN0dmFyYSBqdWh0ZWxlbWVuZGlkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNDM1NzA1Nzg2MTIyNTQ2MjcwMiI+Ik90c2VuZSBqdXVyZGVww6TDpHMgbW9iaWlsdGVsZWZvbmkgcmlpc3R2YXJhbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3Bob25lQ2FsbHMiIG1zZ2lkPSI5MDY3MTczOTg4MzI1ODY1OTIzIj4iVGVsZWZvbmlrw7VuZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3Bob25lQ2FsbHMiIG1zZ2lkPSI3NDg5NzAxNjIwNDQ2MTgzNzcwIj4iVGVsZWZvbmlrw7VuZWRlIGrDpGxnaW1pbmUsIHNhbHZlc3RhbWluZSBqYSB0w7bDtnRsZW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbVRvb2xzIiBtc2dpZD0iNDY1MjE5MTY0NDA4MjcxNDA0OCI+IlPDvHN0ZWVtaXTDtsO2cmlpc3RhZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3lzdGVtVG9vbHMiIG1zZ2lkPSI4MTYyMTAyNjAyMTkwNzM0MzA1Ij4iU8O8c3RlZW1pIG1hZGFsYW1hIHRhc2VtZSBqdXVyZGVww6TDpHMgamEganVodGltaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iMzQ0NjE2NDU4NDcxMDU5NjUxMyI+IkFyZW5kdXN0w7bDtnJpaXN0YWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSI3MDU4ODI4MDMyMzU4MTQyMDE4Ij4iRnVua3RzaW9vbmlkIG9uIHZhamFsaWt1ZCBhaW51bHQgcmFrZW5kdXN0ZSBhcmVuZGFqYXRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Rpc3BsYXkiIG1zZ2lkPSI0Mjc5OTA5Njc2MDM2NDAyNjM2Ij4iTXV1IHJha2VuZHVzZSBrYXN1dGFqYWxpaWRlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGlzcGxheSIgbXNnaWQ9IjYwNTEwMDIwMzE5MzMwMTM3MTQiPiJUZWlzdGUgcmFrZW5kdXN0ZSBrYXN1dGFqYWxpaWRlc2UgbcO1anV0YW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0b3JhZ2UiIG1zZ2lkPSIxOTcxMTE4NzcwNTQ2MzM2OTY2Ij4iTcOkbHVydXVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc0NDIzMTg1MDI0NDY4NzQ5OTkiPiJKdXVyZGVww6TDpHMgVVNCLW3DpGx1c2VhZG1lbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iOTIwMzMwMjIxNDkxNTM1NTc3NCI+Ikp1dXJkZXDDpMOkcyBTRC1rYWFyZGlsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWNjZXNzaWJpbGl0eUZlYXR1cmVzIiBtc2dpZD0iNzkxOTAyNTYwMjI4MzU5MzkwNyI+IlDDpMOkc3VmdW5rdHNpb29uaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9IjQyMDUxOTY4ODE2NzgxNDQzMzUiPiJGdW5rdHNpb29uaWQsIG1pZGEgc2FhYiB0YW90bGVkYSBhYmlzdGF2IHRlaG5vbG9vZ2lhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzkwMTcxNzkzNjkzMDE3MDMyMCI+IkFrbmEgc2lzdSB0b29taW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJldHJpZXZlV2luZG93Q29udGVudCIgbXNnaWQ9IjM3NzIyMjUwMDg2MDUzMTA2NzIiPiJUdXR2dWdlIGthc3V0YXRhdmEgYWtuYSBzaXN1Z2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjMxMDg3MjMzNjQ2NzY2NjczMjAiPiJQdXVkdXR1c2VnYSBzaXJ2aW1pc2Ugc2lzc2Vsw7xsaXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjU4MDA1NTI1MTY3NzkyNDkzNTYiPiJQdXVkdXRhdHVkIMO8a3N1c3RlIG5pbWVzaWQgZXNpdGF0YWtzZSBow6TDpGxlZ2EgbmluZyBla3JhYW5pIHNhYWIgc2lydmlkYSBwdXVkdXR1c3RlZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTczOTg4MTc2NjUyMjU5NDA3MyI+IlZlZWJpIHTDpGl1c3RhdHVkIGp1dXJkZXDDpMOkc3Ugc2lzc2Vsw7xsaXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iNzg4MTA2Mzk2MTUwNzUxMTc2NSI+IlJha2VuZHVzZSBzaXN1IGvDpHR0ZXNhYWRhdmFtYWtzIG11dXRtaXNla3MgdsO1aWRha3NlIGluc3RhbGxpZGEgc2tyaXB0ZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSIyMTAzNDQwMzkxOTAyNDEyMTc0Ij4iU2lzZXN0YXR1ZCB0ZWtzdGkgasOkbGdpbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IlNpc2FsZGFiIGlzaWtsaWtrZSBhbmRtZWlkLCBudCBrcmVkaWl0a2FhcmRpIG51bWJyZWlkIGphIHBhcm9vbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4ia2VlbGEgdsO1aSBtdXVkYSBvbGVrdXJpYmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGtlZWxhdGEgb2xla3VyaWJhIHbDtWkgbGlzYWRhIGphIGVlbWFsZGFkYSBzw7xzdGVlbWlpa29vbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzI0NzI4MTkxMTM4NzkzMTQ4NSI+Im9sZWt1cmliYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MTYxMTM2NjA3OTU5NzYwNjAiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgb2xsYSBvbGVrdXJpYmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSIxMTQ4MTk4Nzg1OTM3NDg5MjY0Ij4ibGFpZW5kYS9haGVuZGEgb2xla3VyaWJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iNjkxNzU0OTQzNzEyOTQwMTEzMiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsYWllbmRhZGEgdsO1aSBhaGVuZGFkYSBvbGVrdXJpYmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjM5MDYwMDc4MzExOTI5OTA5NDYiPiJtYXJzcnV1dGlnZSB2w6RsanV2YWQga8O1bmVkIHV1ZXN0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iNTMzMTMxODkzMTkzNzQwMjA0MCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB0w7bDtmRlbGRhIHbDpGxqdXZhaWQga8O1bmVzaWQgamEgbXV1dGEgdmFsaXRhdmF0IG51bWJyaXQuIEx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c2VsIGrDpGxnaWRhLCDDvG1iZXIgc3V1bmF0YSB2w7VpIHRha2lzdGFkYSB2w6RsanV2YWlkIGvDtW5lc2lkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVNtcyIgbXNnaWQ9Ijg2NzM0NzE3Njg5NDc4OTUwODIiPiJ2w7V0a2UgdmFzdHUgdGVrc3Rpc8O1bnVtZWlkIChTTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdmFzdHUgdsO1dHRhIGphIHTDtsO2ZGVsZGEgU01TLXPDtW51bWVpZC4gU2VlIHTDpGhlbmRhYiwgZXQgcmFrZW5kdXMgdsO1aWIgasOkbGdpZGEgdsO1aSBrdXN0dXRhZGEgdGVpZSBzZWFkbWVsZSBzYWFkZXR1ZCBzw7VudW1laWQgbmVpZCB0ZWlsZSBuw6RpdGFtYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZU1tcyIgbXNnaWQ9IjE4MjEzMTczNDQ2NjgyNTcwOTgiPiJ2w7V0a2UgdmFzdHUgdGVrc3Rpc8O1bnVtZWlkIChNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB2YXN0dSB2w7V0dGEgamEgdMO2w7ZkZWxkYSBtdWx0aW1lZWRpdW1zw7VudW1laWQuIFNlZSB0w6RoZW5kYWIsIGV0IHJha2VuZHVzIHbDtWliIGrDpGxnaWRhIHbDtWkga3VzdHV0YWRhIHRlaWUgc2VhZG1lbGUgc2FhZGV0dWQgc8O1bnVtZWlkIG5laWQgdGVpbGUgbsOkaXRhbWF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4iaMOkZGFhYml0ZWFkZXRlIHZhc3R1dsO1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iODQ4NTI0MDcwMjYyNDMxOTc0Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHZhc3R1IHbDtXR0YSBqYSB0w7bDtmRlbGRhIGjDpGRhYWJpc8O1bnVtZWlkLiBTZWUgw7VpZ3VzIG9uIHNhYWRhdmFsIGFpbnVsdCBzw7xzdGVlbWlyYWtlbmR1c3RlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSIxNTk4MzI4ODQzNjE5NjQ2MTY2Ij4ibW9iaWlsc2lkZXPDtW51bWl0ZSBsdWdlbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHNlYWRtZSB2YXN0dSB2w7VldHVkIG1vYmlpbHNpZGVzw7VudW1laWQuIE1vYmlpbHNpZGVtw6RyZ3VhbmRlaWQgZWRhc3RhdGFrc2UgbcO1bmVzIGFzdWtvaGFzIGVyaW9sdWtvcnJhc3QgdGVhdml0YW1pc2Vrcy4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgc2VnYWRhIHNlYWRtZSB0b2ltaXZ1c3QgdsO1aSB0w7bDtmQgZXJpb2x1a29ycmEgc8O1bnVtaSB2YXN0dXbDtXRtaXNlbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRTbXMiIG1zZ2lkPSI1NjAwODMwNjEyMTQ3NjcxNTI5Ij4ic2FhZGEgU01TLXPDtW51bWVpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRTbXMiIG1zZ2lkPSI3MDk0NzI5Mjk4MjA0OTM3NjY3Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHNhYXRhIFNNUy1zw7VudW1laWQuIFNlZSB2w7VpYiBrYWFzYSB0dXVhIG9vdGFtYXR1aWQgdGFzdXNpZC4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdGVpbGUgdGVraXRhZGEga3VsdXNpZCwgc2FhdGVzIHPDtW51bWVpZCB0ZWllIGtpbm5pdHVzZXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9Ijg3MTM4ODkxMDUzMDU5NDMyMDAiPiJzw7VudW1pZ2EgdmFzdGFtaXNlIHPDvG5kbXVzdGUgc2FhdG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iNzEwNzY0ODU0ODQ2ODc3ODczNCI+Ikx1YmFiIHJha2VuZHVzZWwgc2FhdGEgdGFvdGx1c2kgdGVpc3RlbGUgc8O1bnVtaXNpZGUgcmFrZW5kdXN0ZWxlLCBldCBrw6RzaXRsZWRhIHNpc3NldHVsZXZhdGUga8O1bmVkZWxlIHPDtW51bWlnYSB2YXN0YW1pc2Ugc8O8bmRtdXNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNtcyIgbXNnaWQ9Ijg3NDUwODY1NzIyMTMyNzA0ODAiPiJsdWdlZ2Ugb21hIHRla3N0aXPDtW51bWVpZCAoU01TIHbDtWkgTU1TKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI0Njc5ODE1NDg2ODQ3MzU1MjIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHRhaHZlbGFydnV0aXNzZSB2w7VpIFNJTS1rYWFyZGlsZSBzYWx2ZXN0YXR1ZCBTTVMtc8O1bnVtZWlkLiBTZWUgdsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSBrw7Vpa2kgU01TLXPDtW51bWVpZCBzaXN1c3QgdsO1aSBrb25maWRlbnRzaWFhbHN1c2VzdCBob29saW1hdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHRlbGVmb25pIHbDtWkgU0lNLWthYXJkaWxlIHNhbHZlc3RhdHVkIFNNUy1zw7VudW1laWQuIFNlZSB2w7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIGvDtWlraSBTTVMtc8O1bnVtZWlkIHNpc3VzdCB2w7VpIGtvbmZpZGVudHNpYWFsc3VzZXN0IGhvb2xpbWF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+Im11dXRrZSBvbWEgdGVrc3Rpc8O1bnVtZWlkIChTTVMgdsO1aSBNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga2lyanV0YWRhIHRlaWUgdGFodmVsYXJ2dXRpc3NlIHbDtWkgU0lNLWthYXJkaWxlIHNhbHZlc3RhdHVkIFNNUy1zw7VudW1pdGVzc2UuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHRlaWUgc8O1bnVtaWQga3VzdHV0YWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2ODY2ODcwOTA1MjMyODU2NyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBraXJqdXRhZGEgdGVpZSB0ZWxlZm9uaSB2w7VpIFNJTS1rYWFyZGlsZSBzYWx2ZXN0YXR1ZCBTTVMtc8O1bnVtaXRlc3NlLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCB0ZWllIHPDtW51bWlkIGt1c3R1dGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+InbDtXRrZSB2YXN0dSB0ZWtzdGlzw7VudW1laWQgKFdBUCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9Ijc0ODIzMjE5MDIyMDU4MzM4NSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB2YXN0dSB2w7V0dGEgamEgdMO2w7ZkZWxkYSBXQVAtc8O1bnVtZWlkLiBTZWUgbHViYSBow7VsbWFiIHbDtWltZXQgasOkbGdpZGEgdsO1aSBrdXN0dXRhZGEgdGVpbGUgc2FhZGV0dWQgc8O1bnVtZWlkIG5laWQgdGVpbGUgbsOkaXRhbWF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRhc2tzIiBtc2dpZD0iNjQ2NjA5NTM5NjYyMzkzMzkwNiI+IkvDpGl0YXR1ZCByYWtlbmR1c3RlIHRvb21pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUYXNrcyIgbXNnaWQ9Ijc0NTQyMTU5OTU4NDc2NTgxMDIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdHV1YSB0ZWF2ZXQgcHJhZWd1IGphIGhpbGp1dGkga8OkaXRhdHVkIMO8bGVzYW5uZXRlIGtvaHRhLiBTZWUgdsO1aWIgbHViYWRhIHJha2VuZHVzZWwgYXZhc3RhZGEgdGVhdmV0IHNlbGxlIGtvaHRhLCBtaWxsaXNlaWQgcmFrZW5kdXNpIHNlYWRtZXMga2FzdXRhdGFrc2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iNzExNDI1NTI4MTk0NDIxMTY4MiI+InRvaW1pbmd1ZCBlcmluZXZhdGVsIGthc3V0YWpha29udG9kZWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iMzY0NjcwOTYzNjIzMzg1Nzg2Ij4iTHViYWIgcmFrZW5kdXNlbCB0ZWhhIHRvaW1pbmd1aWQgc2VhZG1lIGVyaW5ldmF0ZWwga2FzdXRhamFrb250b2RlbC4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQga2FzdXRhZGEgc2VkYSBrYXN1dGFqYXRldmFoZWxpc2Uga2FpdHNlIHJpa2t1bWlzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJhY3RBY3Jvc3NVc2Vyc0Z1bGwiIG1zZ2lkPSIyNTY3NzM0Mjg1NTQ1MDc0MTA1Ij4idMOkaWVsaWsgbGl0c2VudHMgdGVoYSB0b2ltaW5ndWlkIGVyaW5ldmF0ZWwga2FzdXRhamFrb250b2RlbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMzc2ODQxMzY4Mzk1NTAyMzY2Ij4iTHViYWIga8O1aWtpIHbDtWltYWxpa2tlIHRvaW1pbmd1aWQgZXJpbmV2YXRlbCBrYXN1dGFqYWtvbnRvZGVsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNlcnMiIG1zZ2lkPSIxNjc2MTUwOTExNjcyMjgyNDI4Ij4ia2FzdXRhamF0ZSBoYWxkYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2VycyIgbXNnaWQ9Ijg0MDkzMDY2Njc2NDUzNTU2MzgiPiJWw7VpbWFsZGFiIHJha2VuZHVzdGVsIGhhbGxhdGEgc2VhZG1lIGthc3V0YWphaWQsIHNlYWxodWxnYXMgcMOkcmluZ3VpZCwgbG9vbWlzdCBqYSBrdXN0dXRhbWlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4idMO2w7Z0YXZhdGUgcmFrZW5kdXN0ZSDDvGtzaWthc2phZGUgdG9vbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSIxNTM4MjQ3NDE0NDA3MTc1OTkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdHV1YSDDvGtzaWthc2phbGlra3UgdGVhdmV0IHByYWVndSB0w7bDtnRhdmF0ZSBqYSBoaWxqdXRpIGvDpGl0YXR1ZCDDvGxlc2FubmV0ZSBrb2h0YS4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdHV2YXN0YWRhIHByaXZhYXRzZXQgdGVhdmV0IG11dWRlIHJha2VuZHVzdGUga29odGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW9yZGVyVGFza3MiIG1zZ2lkPSIyMDE4NTc1NTI2OTM0NDIyNzc5Ij4ia8OkaXRhdHVkIHJha2VuZHVzdGUgw7xtYmVyasOkcmplc3RhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9Ijc3MzQyMTc3NTQ4Nzc0MzkzNTEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGVpc2FsZGFkYSDDvGxlc2FuZGVkIGVzaXBsYWFuaWxlIGphIHRhdXN0YWxlLiBSYWtlbmR1cyB2w7VpYiBzZWRhIHRlaGEgdGVpZSBzaXNlbmRpdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW1vdmVUYXNrcyIgbXNnaWQ9IjY4MjE1MTM0MDE4NzAzNzc0MDMiPiJrw6RpdGF0dWQgcmFrZW5kdXN0ZSBwZWF0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW1vdmVUYXNrcyIgbXNnaWQ9IjEzOTQ3MTQzNTIwNjI2MzU0OTMiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgZWVtYWxkYWRhIMO8bGVzYW5kZWQgamEgcGVhdGFkYSBuZW5kZSByYWtlbmR1c2VkLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBow6RpcmlkYSB0ZWlzdGUgcmFrZW5kdXN0ZSBrw6RpdHVtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSI3MzkxMTkxMzg0MDI3MzAzMDY1Ij4idGVnZXZ1c3Zpcm5hZGUgaGFsZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSIxNjE1ODgxOTMzMDM0MDg0NDQwIj4iTHViYWIgcmFrZW5kdXNlbCBsaXNhZGEsIGVlbWFsZGFkYSBqYSBtdXV0YSB0ZWdldnVzdmlybmFzaWQsIGt1cyB0ZWlzZWQgcmFrZW5kdXNlZCB0w7bDtnRhdmFkLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBow6RpcmlkYSB0ZWlzdGUgcmFrZW5kdXN0ZSBrw6RpdHVtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9IjI5MTg3NjgyMzgwNDUyMDY0NTYiPiJtaXMgdGFoZXMgdG9pbWluZ3UgYWx1c3RhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSI5OTc4MjM2OTUzNDM1ODQwMDEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga8OkaXZpdGFkYSBtaXMgdGFoZXMgdG9pbWluZ3UgbG9hIGthaXRzZXN0IHbDtWkgZWtzcG9yZGl0dWQgb2xla3VzdCBzw7VsdHVtYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5NzUzODcxMTg4NjE4NDIwNjEiPiJrdXZhIMO8aGlsZHV2dXNlIHNlYWRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5MjA0MzYxODY5MzkxNzM3NCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBqdWh0aWRhIHRlaXN0ZSByYWtlbmR1c3RlIGt1dmEgw7xoaWxkdXZ1c2UgcmXFvmlpbWkuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHRlaXNpIHJha2VuZHVzaSBow6RpcmlkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldERlYnVnQXBwIiBtc2dpZD0iMzAyMjEwNzE5ODY4NjU4NDA1MiI+IlJha2VuZHVzZSBzaWx1bWlzZSBsdWJhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldERlYnVnQXBwIiBtc2dpZD0iNDQ3NDUxMjQxNjI5OTAxMzI1NiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsw7xsaXRhZGEgc2lzc2UgdGVpc2UgcmFrZW5kdXNlIHNpbHVtaXNlLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBzZWRhIGthc3V0YWRhIHRlaXN0ZSByYWtlbmR1c3RlIHBlYXRhbWlzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQxNjIwOTIxODUxMjQyMzQ0ODAiPiJtdXV0a2Ugc8O8c3RlZW1pIGt1dmFzZWFkZWlkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQzNzIyMjM4NzMxNTQyOTYwNzYiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbXV1dGEgcHJhZWd1c3Qga29uZmlndXJhdHNpb29uaSwgbsOkaXRla3MgbG9rYWF0aSB2w7VpIMO8bGRpc3Qga2lyamFzdXVydXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjU2ODQ1MDQwNTgxOTI5MjEwOTgiPiJhdXRvcmXFvmlpbWkgbHViYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19lbmFibGVDYXJNb2RlIiBtc2dpZD0iNDg1MzE4NzQyNTc1MTQxOTQ2NyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBhdXRvcmXFvmlpbWkgbHViYWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSIzOTE0MDI2Njg3NDIwMTc3MjAyIj4ic3VsZ2VnZSB0ZWlzZWQgcmFrZW5kdXNlZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iNDU5MzM1MzIzNTk1OTczMzExOSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsw7VwZXRhZGEgdGVpc3RlIHJha2VuZHVzdGUgdGF1c3RhcHJvdHNlc3NlLiBTZWUgdsO1aWIgcGVhdGFkYSB0ZWlzdGUgcmFrZW5kdXN0ZSB0w7bDti4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iMjMyOTYyNzQyODgzMjA2NzcwMCI+IlRlaXN0ZSByYWtlbmR1c3RlIGrDtXVnYSBwZWF0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjUyNTMxNTcyOTYxODM5NDA4MTIiPiJMdWJhYiByYWtlbmR1c2VsIHN1bm5pdmlpc2lsaXNlbHQgdGVpc2kgcmFrZW5kdXNpIHBlYXRhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZUJhY2siIG1zZ2lkPSI2NTI5MzUyMDQwNzI1ODQ2MTYiPiJSYWtlbmR1c2Ugc3VsZ3VtYSBzdW5kaW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZUJhY2siIG1zZ2lkPSIzODkyMjk1ODMwNDE5NTEzNjIzIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHN1bmRpZGEgaWdhIGVzaXBsYWFuaWwgb2xldmEgcmFrZW5kdXNlIHN1bGdlbWEgamEgdGFnYXNpIG1pbmVtYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kdW1wIiBtc2dpZD0iMTY4MTc5OTg2MjQzODk1NDc1MiI+InbDtXRhIHZhc3R1IHPDvHN0ZWVtaSBzaXNlb2xlayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2R1bXAiIG1zZ2lkPSIxNzc4Mjk5MDg4NjkyMjkwMzI5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHRlYWRhIHNhYWRhIHPDvHN0ZWVtaSBzaXNlbWlzdCBvbGVrdXQuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIGhhbmtpZGEgbWl0bWVzdWd1c3QgcHJpdmFhdHNldCBqYSB0dXJ2YXRlYXZldCwgbWlkYSBuZWlsIHRhdmFsaXNlbHQga3VuYWdpIHZhamEgZWkgbMOkaGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjgwMjI1ODg2MDg5OTQ1ODk5MzgiPiJla3JhYW5pc2lzdSB0YWFzdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSIzMTkzMjY5MDY5NDY5NzAwMjY1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGvDpHR0ZSBzYWFkYSBha3RpaXZzZSBha25hIHNpc3UuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIGhhbmtpZGEga29ndSBha25hIHNpc3UgamEgdXVyaWRhIGtvZ3Ugc2VsbGUgdGVrc3RpLCB2w6RsamEgYXJ2YXR1ZCBwYXJvb2xlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMjMxMjYxMjEzNTEyNzMxMDI1NCI+ImFqdXRpbmUgaMO1bGJ1c3R1c2UgbHViYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSI4MDc5NDU2MjkzMTgyOTc1NDY0Ij4iTHViYWIgcmFrZW5kdXNlbCBhanV0aXNlbHQgbHViYWRhIHNlYWRtZXMgaMO1bGJ1c3R1c2UuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIGx1YmFkYSBow7VsYnVzdHVzZSBrYXN1dGFqYSBuw7V1c29sZWt1dGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9Ijg1MzIyOTUxOTkxMTI1MTkzNzgiPiJoYW5naSBha25hIHRlYXZlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI0OTk4ODM2MzcwNDI0MTg2ODQ5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGhhbmtpZGEgdGVhdmV0IGFrbmFoYWxkdXJpIGFrZW5kZSBrb2h0YS4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgaGFua2lkYSB0ZWF2ZXQsIG1pcyBvbiBtw7VlbGR1ZCBzw7xzdGVlbWlzaXNlc2VrcyBrYXN1dGFtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODY3NTUzNTY0ODgwNzQyNzM4OSI+ImZpbHRyZWVyaSBzw7xuZG11c2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmlsdGVyX2V2ZW50cyIgbXNnaWQ9IjgwMDYyMzYzMTU4ODgzNDc2ODAiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgcmVnaXN0cmVlcmlkYSBzaXNlc3R1c2ZpbHRyaSwgbWlzIGZpbHRyZWVyaWIga8O1aWdpIGthc3V0YWphIHPDvG5kbXVzdGUgdm9vLCBlbm5lIGt1aSBuZWVkIMOkcmEgc2FhZGV0YWtzZS4gUGFoYXRhaHRsaWsgcmFrZW5kdXMgdsO1aWIgc8O8c3RlZW1pIGthc3V0YWphbGlpZGVzdCBqdWh0aWRhIGlsbWEga2FzdXRhamEgc2Vra3VtaXNldGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI1OTczNjI2NzM4MTcwNjE4Nzc1Ij4ia3V2YSBzdXVyZW5kYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI3MTIxMjM1Njg0NTE1MDAzNzkyIj4iTHViYWIgcmFrZW5kdXNlbCBla3JhYW5pIHNpc3Ugc3V1cmVuZGFkYS4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgbXV1bmRhZGEga3V2YSBzaXN1IG5paSwgZXQgc2VhZGUgbXV1dHViIGViYXN0YWJpaWxzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2h1dGRvd24iIG1zZ2lkPSI3MTg1NzQ3ODI0MDM4OTA5MDE2Ij4ib3NhbGluZSB2w6RsamFsw7xsaXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NodXRkb3duIiBtc2dpZD0iNzA0NjUwMDgzODc0NjI5MTc3NSI+IkzDvGxpdGFiIHRlZ2V2dXNoYWxkdXJpIHbDpGxqYWzDvGxpdHVzb2xla3Vzc2UuIEVpIGzDvGxpdGEgbMO1cGxpa3VsdCB2w6RsamEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI0MTM4NjA4NjEwNzE3NDI1NTczIj4idsOkbGRpIHJha2VuZHVzdGUgw7xtYmVybMO8bGl0YW1pc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI4MjYyMTk1ODAyNTgyMjU1MDIxIj4iVGFraXN0YWIga2FzdXRhamEgbMO8bGl0dW1pc3QgdGVpc2VsZSByYWtlbmR1c2VsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjI1Mzc5MjIzMTE0MTE1NDYwMTYiPiJha3RpaXZzZSByYWtlbmR1c2UgdGVhYmUgaGFua2ltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUxMjQ0ODg1NTQ5NjA2NzEzMSI+Ikx1YmFiIMO1aWd1c3RlIHNhYWphbCBoYW5raWRhIHByaXZhYXRzZXQgdGVhdmV0IGVrcmFhbmlsIGVzaXBsYWFuaWwgb2xldmEgYWt0aWl2c2UgcmFrZW5kdXNlIGtvaHRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iODkyMjM5MDk0ODY3MTgyNjU2Ij4iS8O1aWdpIHJha2VuZHVzdGUga8OkaXZpdHVtaXNlIGrDpGxnaW1pbmUgamEganVodGltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iNjAwMzYwMzE2MjU3ODU3NzQwNiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBqw6RsZ2lkYSBqYSBqdWh0aWRhLCBrdWlkYXMgc8O8c3RlZW0gdGVnZXZ1c2kga8OkaXZpdGFiLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBzw7xzdGVlbWkgdMOkaWVsaWt1bHQgcmlra3VkYS4gU2VkYSDDtWlndXN0IG9uIHZhamEgYWludWx0IGFyZW5kdXNla3MsIG1pdHRlIHRhdmFrYXN1dHVzZSBrb3JyYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjI1NzYzMzM0MzQ4OTM1MzI0NzUiPiJzYWFkYSBwYWtldGlzdCBlZW1hbGRhdHVkIHNhYWRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSI2NjIxOTAxMjE2MjA3OTMxMDg5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGVkYXN0YWRhIHRlYXRpc2UgcmFrZW5kdXNlIHBha2V0aSBlZW1hbGRhbWlzZSBrb2h0YS4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgc2VkYSBrYXN1dGFkYSB0ZWlzdGUga8OkaXRhdHVkIHJha2VuZHVzdGUgcGVhdGFtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjU2ODkwOTUwMDkwMzAzMzY1OTMiPiJzYWFkYSBTTVMtaSB0ZWVsIHZhc3R1dsO1ZXR1ZCBzYWFkZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNDE1MjAzNzcyMDAzNDM2NTQ5MiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBlZGFzdGFkYSB0ZWF0aXNlIFNNUy1zw7VudW1pIHZhc3R1dsO1dG1pc2Uga29odGEuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHNlZGEga2FzdXRhZGEgc2lzc2V0dWxldmF0ZSBTTVMtc8O1bnVtaXRlIHbDtWx0c2ltaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+InNhYWRhIFdBUC1QVVNILXZhc3R1dsO1ZXR1ZCBzYWF0ZWlkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjQ3ODM0MDI1MjUwMzk0NDI3MjkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgZWRhc3RhZGEgdGVhdGlzZSBXQVAgUFVTSC1zw7VudW1pIHZhc3R1dsO1dG1pc2Uga29odGEuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHNlZGEga2FzdXRhZGEgTU1TLXPDtW51bWl0ZSB2YXN0dXbDtXRtaXNlIHbDtWx0c2ltaXNla3MgdsO1aSBtaXMgdGFoZXMgdmVlYmlsZWhlIHNpc3Ugc2FsYWphIGFzZW5kYW1pc2VrcyBwYWhhdGFodGxpa3VnYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjI0NTE4NzM2NjQzNjM2NjI2NjYiPiJwaWlyYSB0w7bDtnRhdmF0ZSBwcm90c2Vzc2lkZSBhcnZ1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iNzMxODA2MTMxNDA0MDg3OTU0MiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBqdWh0aWRhIHTDtsO2dGF2YXRlIHByb3RzZXNzaWRlIG1ha3NpbWFhbHNldCBhcnZ1LiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBwb2xlIHNlZGEgdmFqYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9IjU1MDk1ODUwNzc5ODc5Njk2NSI+InN1bmRpZ2UgdGF1c3RhcmFrZW5kdXNlZCBzdWxndW1hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNzQ3MTMxMDY1Mjg2ODg0MTQ5OSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtw6TDpHJhdGEsIGthcyB0ZWdldnVzZWQgbMO1cGV0YXRha3NlIGtvaGUsIGt1aSBuZWVkIGxpaWd1dmFkIHRhdXN0YWxlLiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBwb2xlIHNlZGEgdmFqYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjI3ODk2MTA2NzM1MTQxMDMzNjQiPiJha3Ugc3RhdGlzdGlrYSBsdWdlbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjU4OTczNDY1ODI4ODI5MTUxMTQiPiJMdWJhYiByYWtlbmR1c2VsIGx1Z2VkYSBtYWRhbGEgYWt1dGFzZW1lIGthc3V0dXNhbmRtZWlkLiBWw7VpYiBsdWJhZGEgcmFrZW5kdXNlbCBoYW5raWRhIMO8a3Npa2FzamFsaWtrdSB0ZWF2ZXQgc2VsbGUga29odGEsIG1pcyByYWtlbmR1c2kgdGUga2FzdXRhdGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIzNzE5Njg5NzY0NTM2Mzc5NTU3Ij4iYWt1IHN0YXRpc3Rpa2EgbXV1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI2ODYyODE3ODU3MTc4MDI1MDAyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIGFrdSBrb2h0YSBrb2d1dHVkIHN0YXRpc3Rpa2F0LiBNaXR0ZSBrYXN1dGFkYSB0YXZhcmFrZW5kdXN0ZSBwdWh1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iMTUwODc3OTY4NzQzNjU4NTc0NCI+InJha2VuZHVzZSB0w7bDtnN0YXRpc3Rpa2EgaGFua2ltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSI2MjQzODg3MDQxNTc3OTEyODc3Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGhhbmtpZGEga29ndXR1ZCByYWtlbmR1c2UgdMO2w7ZzdGF0aXN0aWthdC4gTWl0dGUga2FzdXRhZGEgdGF2YXJha2VuZHVzdGUgcHVodWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9Ijg4MjkwOTczNzM4NTE1MjE1MDUiPiJyYWtlbmR1c2UgdMO2w7ZzdGF0aXN0aWthIG11dXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI1MDc4NDU5NjU5NDQwMzQ4MyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSBrb2d1dHVkIHJha2VuZHVzZSB0w7bDtnN0YXRpc3Rpa2F0LiBNaXR0ZSBrYXN1dGFkYSB0YXZhcmFrZW5kdXN0ZSBwdWh1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhY2t1cCIgbXNnaWQ9IjQ3MDAxMzAyMjg2NTQ1MzkyMCI+Imp1aGkgc8O8c3RlZW1pIHZhcnVuZHVzdCBqYSB0YWFzdGV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmFja3VwIiBtc2dpZD0iNjkxMjIzMDUyNTE0MDU4OTg5MSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBqdWh0aWRhIHPDvHN0ZWVtaSB2YXJ1bmR1cy0gamEgdGFhc3RlbWVoaGFuaXNtaS4gTWl0dGUga2FzdXRhZGEgdGF2YXJha2VuZHVzdGUgcHVodWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maXJtX2Z1bGxfYmFja3VwIiBtc2dpZD0iNTU1NzA3MTMyNTgwNDQ2OTEwMiI+InTDpGllbGlrdSB2YXJ1a29vcGlhIGtpbm5pdGFtaW5lIHbDtWkgdG9pbWluZ3UgdGFhc3RhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSIxNzQ4NzYyMTcxNjM3Njk5NTYyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGvDpGl2aXRhZGEgdMOkaWVsaWt1IHZhcnVrb29waWEga2lubml0dXNsaWlkZXNlLiBNaXR0ZSBrYXN1dGFkYSDDvGhlc2tpIHJha2VuZHVzZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9IjIxNDg1NjM2MjgxNDAxOTMyMzEiPiJrdXZhIHZvbGl0dXNldGEgYWtuYWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9Ijc0NTgzODc3NTk0NjE0NjYzOTciPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHV1YSBha25haWQsIG1pcyBvbiBtw7VlbGR1ZCBrYXN1dGFtaXNla3Mgc8O8c3RlZW1pc2lzZXNlbGUga2FzdXRhamFsaWlkZXNlbGUuIE1pdHRlIGthc3V0YWRhIHRhdmFyYWtlbmR1c3RlIHB1aHVsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSIzNTQzMzQ3OTgwODM5NTE4NjEzIj4idMO1bW1ha2Ugw7xsZSB0ZWlzdGUgcmFrZW5kdXN0ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iODU4NDY3ODM4MTk3MjgyMDExOCI+Ikx1YmFiIHJha2VuZHVzZWwgam9vbmlzdGFkYSB0ZWlzdGVsZSByYWtlbmR1c3RlbGUgdsO1aSBuZW5kZSBrYXN1dGFqYWxpaWRlc3RlbGUuIFNlZSB2w7VpYiBzZWdhZGEgw7xrc2vDtWlrIG1pbGxpc2UgcmFrZW5kdXNlIGxpaWRlc2Uga2FzdXRhbWlzdCB2w7VpIG11dXRhIHNlZGEsIG1pZGEgYXJ2YXRlIG7DpGdldmF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSIyODA1MTAzMjQxMTUzOTA3MTc0Ij4ibXV1ZGEgw7xsZGlzdCBhbmltYXRzaW9vbmlraWlydXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIGFuaW1hdHNpb29uaSDDvGxkaXN0IGtpaXJ1c3QgKGFuaW1hdHNpb29uZSBraWlyZW5kYWRhIHbDtWkgYWVnbHVzdGFkYSkgw7xrc2vDtWlrIG1pbGxhbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjEyODY1MDU3MTcwNTAxMjEzNzAiPiJSYWtlbmR1c2UgbHViYWRlIGhhbGRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHV1YSBqYSBoYWxsYXRhIHRlbWEgZW5kYSBsdWJlLCBtw7bDtmR1ZGVzIHRhdmFww6RyYXNlc3QgWi1qw6RyamVrb3JyYXN0LiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9IjQ3MDgxODExODQ0NDE4ODAxNzUiPiJla3JhYW5pa3V2YSBwZWF0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mcmVlemVTY3JlZW4iIG1zZ2lkPSI4NTU4OTIzNzg5MjIyNjcwMDY0Ij4iTHViYWIgcmFrZW5kdXNlbCBhanV0aXNlbHQgcGVhdGFkYSBla3JhYW5pIGt1dmEgdMOkaXNla3JhYW5pbGUgw7xsZW1pbmVrdWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5qZWN0RXZlbnRzIiBtc2dpZD0iMTM3ODc0NjU4NDAyMzU4NjYwMCI+InZhanV0YSBrbGFodmUgamEganVodG51cHBlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5qZWN0RXZlbnRzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDYzNTI1NjU1OTk5Njg2MzIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc2FhdGEgb21hIHNpc2VuZHRvaW1pbmd1aWQgKGtsYWh2aXZhanV0dXNpIGptcykgdGVpc3RlbGUgcmFrZW5kdXN0ZWxlLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBzZWRhIGthc3V0YWRhIHRhaHZlbGFydnV0aSDDvGxldsO1dG1pc2Vrcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTMxMjgwNTc1NzIzMjYyNTMiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc2FhdGEgb21hIHNpc2VuZHRvaW1pbmd1aWQgKGtsYWh2aXZhanV0dXNpIGptcykgdGVpc3RlbGUgcmFrZW5kdXN0ZWxlLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBzZWRhIGthc3V0YWRhIHRlbGVmb25pIMO8bGV2w7V0bWlzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI0Njk0Mjg5MDAwNDEyNDkyMzQiPiJzYWx2ZXN0YSBzaXNlc3RhdGF2IHRla3N0IGphIHRlaHRhdmFkIHRvaW1pbmd1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iODM4Nzc1NDkwMTY4ODcyODA0MyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB2YWFkYXRhIHZhanV0YXRhdmFpZCBrbGFodmUsIGlzZWdpIGt1aSBzdWh0bGV0ZSB0ZWlzZSByYWtlbmR1c2VnYSAobsOkaXRla3MgcGFyb29saSBzaXNlc3RhbWlzZWwpLiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMzNjAwNjQ2MjAyMzA1MTU3NzYiPiJzZW8gc2lzZXN0dXNtZWV0b2RpZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMjUwNDQwMzIyODA3Mjg2MzMxIj4iTHViYWIgb21hbmlrdWwgc2lkdWRhIHNpc2VzdHVzbWVldG9kaSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI1MzU3NzMzOTQyNTU2MDMxNTkzIj4ic2lkdW1pbmUganV1cmRlcMOkw6RzdXRlZW51c2VnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjcwMzQ2MTU5Mjg2MDkzMzEzNjgiPiJMdWJhYiBvbWFuaWt1bCBsdXVhIHNpZGVtZSBqdXVyZGVww6TDpHN1dGVlbnVzZSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgdG9oaWtzIHNlZGEga3VuYWdpIHZhamEgbWlubmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iODQ2MjgxNTE3OTU3Mjc0ODc2MSI+InNpZHVtaW5lIHByaW50aW1pc3RlZW51c2VnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI3OTYwMDY3NjIzMjA5MTExMTM1Ij4iTHViYWIgb21hbmlrdWwgc2lkdWRhIHByaW50aW1pc3RlZW51c2Ugw7xsYXRhc2VtZSBsaWlkZXNlZ2EuIFRhdmFyYWtlbmR1c3RlIHB1aHVsIGVpIHBlYWtzIHNlZGEga3VuYWdpIHZhamEgbWluZW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQWxsUHJpbnRKb2JzIiBtc2dpZD0iMTEyMDc5MjQ2ODQ2NTcxMTE1OSI+Imp1dXJkZXDDpMOkcyBrw7Vpa2lkZWxlIHByaW50aW1pc3TDtsO2ZGVsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0FsbFByaW50Sm9icyIgbXNnaWQ9IjI5NzgxODUzMTEwNDE4NjQ3NjIiPiJMdWJhYiBvbWFuaWt1bGUganV1cmRlcMOkw6RzdSB0ZWlzZSByYWtlbmR1c2UgbG9vZHVkIHByaW50aW1pc3TDtsO2ZGVsZS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjI3NTI3MzEzMDA0MTk0MTA3MjQiPiJORkMtdGVlbnVzZWdhIHNpZHVtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSI2MTIwNjQ3NjI5MTc0MDY2ODYyIj4iTHViYWIga2FzdXRhamFsIGx1dWEgc2Vvc2VkIHJha2VuZHVzdGVnYSwgbWlzIGrDpGxqZW5kYXZhZCBORkMta2FhcnRlLiBQb2xlIGt1bmFnaSB2YWphbGlrIHRhdmFsaXN0ZSByYWtlbmR1c3RlIGtvcnJhbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjczNTgzNzg0MDE5MTUyODc5MzgiPiJ0ZWtzdGl0ZWVudXNlZ2Egc2lkdW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI4MTUxOTY4OTEwOTczOTk4NjcwIj4iVsO1aW1hbGRhYiBvbWFuaWt1bCBzaWR1ZGEgdGVrc3RpdGVlbnVzZSAobnQgU3BlbGxDaGVja2VyU2VydmljZSkgw7xsYXRhc2VtZSBsaWlkZXNlZ2EuIFRhdmFyYWtlbmR1c3RlIHB1aHVsIGVpIHBlYWtzIHNlZGEga3VuYWdpIHZhamEgbWluZW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSI0NzA4NTk2MDIxMTYxNDczMjU1Ij4ic2VvIFZQTi10ZWVudXNlZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJWw7VpbWFsZGFiIG9tYW5pa3VsIHNpZHVkYSBWUE4tdGVlbnVzZSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+InRhdXN0YXBpbGRpZ2Egc2lkdW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+Ikx1YmFiIG9tYW5pa3VsIHNpZHVkYSB0YXVzdGFwaWxkaSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4idmlkaW5hdGVlbnVzZWdhIHNpZHVtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+Ikx1YmFiIG9tYW5pa3VsIHNpZHVkYSB2aWRpbmEgdGVlbnVzZSDDvGxhdGFzZW1lIGxpaWRlc2VnYS4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4ic2VhZG1lIGFkbWluaXN0cmFhdG9yaWdhIHN1aHRsZW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI1Njk3MTU0MTk1NDM5MDc5MzAiPiJWw7VpbWFsZGFiIG9tYW5pa3VsIHNhYXRhIGthdmF0c3VzaSBzZWFkbWUgYWRtaW5pc3RyYWF0b3JpbGUuIFRhdmFyYWtlbmR1c3RlIHB1aHVsIGVpIHBlYWtzIHNlZGEga3VuYWdpIHZhamEgbWluZW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNDI0ODgyODkwMDA0NTgwODcyMiI+InNlYWRtZSBhZG1pbmlzdHJhYXRvcmkgbGlzYW1pbmUgdsO1aSBlZW1hbGRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURldmljZUFkbWlucyIgbXNnaWQ9IjUwMjU2MDgxNjc3MDk5NDI0ODUiPiJWw7VpbWFsZGFiIG9tYW5pa3VsIGxpc2FkYSB2w7VpIGVlbWFsZGFkYSBha3RpaXZzZWlkIHNlYWRtZSBhZG1pbmlzdHJhYXRvcmVpZC4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgdG9oaWtzIHNlZSBrdW5hZ2kgdmFqYWxpayBvbGxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMzY1OTQ3NzE3MTYzODY2ODQ0Ij4ibXV1ZGEgZWtyYWFuaSBwYWlndXR1c3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbXV1dGEgZWtyYWFuaSBww7bDtnJhbWlzdCBtaXMgdGFoZXMgYWphbC4gVGF2YXJha2VuZHVzdGUgcHVodWwgZWkgcGVha3Mgc2VkYSBrdW5hZ2kgdmFqYSBtaW5lbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI5MTc1MzcxNjEzMzIyNTYyOTM0Ij4ia3Vyc29yaWtpaXJ1c2UgbXV1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI2ODY2NTYzMjM0Mjc0MTA0MjMzIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIGlnYWwgYWphbCBoaWlyZS0gdsO1aSBwdXV0ZXBhZGpha3Vyc29yaSBraWlydXN0LiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iNDc3ODczMTcwMzYwMDkwOTM0MCI+ImtsYXZpYXR1dXJpIHBhaWd1dHVzZSBtdXV0bWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iODQ4MDAxNjc3MTEzNDE3NTg3OSI+Ikx1YmFiIHJha2VuZHVzZWwgbXV1dGEga2xhdmlhdHV1cmkgcGFpZ3V0dXN0LiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBrdW5hZ2kgdmFqYSBvbGVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0NTM5MDAyOTkxOTQ3Mzc2NjU5Ij4iTGludXhpIHNpZ25hYWxpZGUgc2FhdG1pbmUgcmFrZW5kdXN0ZWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ4OTY5OTIwNzkxODI2NDkxNDEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGFvdGxlZGEgZWRhc3RhdHVkIHNpZ25hYWxpIHNhYXRtaXN0IGvDtWlnaWxlIHDDvHNpcHJvdHNlc3NpZGVsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcnNpc3RlbnRBY3Rpdml0eSIgbXNnaWQ9Ijg4NDExMTM2Mjc5NTU1NjM5MzgiPiJSYWtlbmR1c3RlIHBpZGV2IHTDtsO2cyBob2lkbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODUyNTE4OTI3MjMyOTA4NjEzNyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSBvbWEgb3NpIG3DpGx1cyBww7xzaXZha3MuIFNlZSB2w7VpYiBwaWlyYXRhIHRlaXN0ZWxlICh0YWh2ZWxhcnZ1dGl0IGFlZ2xhc2VtYWtzIG11dXR2YXRlbGUpIHJha2VuZHVzdGVsZSBzYWFkYW9sZXZhdCBtw6RsdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0Mzg0NzYwMDQ3NTA4Mjc4MjcyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIG9tYSBvc2kgbcOkbHVzIHDDvHNpdmFrcy4gU2VlIHbDtWliIHBpaXJhdGEgdGVpc3RlbGUgKHRlbGVmb25pIGFlZ2xhc2VtYWtzIG11dXR2YXRlbGUpIHJha2VuZHVzdGVsZSBzYWFkYW9sZXZhdCBtw6RsdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iMTg0Mzg1MTI5NTM3NzA1OTM4Ij4iUmFrZW5kdXN0ZSBrdXN0dXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iNzQxMTQ4MDI3NTE2NzIwNTA4MSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBrdXN0dXRhZGEgQW5kcm9pZC1wYWtldHRlLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBzZWRhIGthc3V0YWRhIG9sdWxpc3RlIHJha2VuZHVzdGUga3VzdHV0YW1pc2Vrcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSIyNzQxMDkxOTE4NDU4NDI3NTYiPiJUZWlzdGUgcmFrZW5kdXN0ZSBhbmRtZXRlIGt1c3R1dGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjQ2MjUzMjM2ODQxMjU0NTk0ODgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga3VzdHV0YWRhIGthc3V0YWphIGFuZG1lZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4iVGVpc3RlIHJha2VuZHVzdGUgdmFoZW3DpGx1IGt1c3R1dGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjM4MTI5OTg1OTkwMDY3MzAxOTYiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga3VzdHV0YWRhIHZhaGVtw6RsdSBmYWlsaWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9Ijc0NzI5MjE3NjgzNTc5ODE5ODYiPiJSYWtlbmR1c2UgbcOkbHVydXVtaSBtw7XDtXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHR1dWEgb21hIGtvb2RpLCBhbmRtZWQgamEgdmFoZW3DpGx1IHN1dXJ1c2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSIyMTk5MTI4NDgyODIwMzA2OTI0Ij4iUmFrZW5kdXN0ZSBvdHNlIGluc3RhbGxpbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaW5zdGFsbGlkYSB1dXNpIHbDtWkgdsOkcnNrZW5kYXR1ZCBBbmRyb2lkLXBha2V0dGUuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHNlbGxlIGFiaWwgbGlzYWRhIHV1c2kgbWVlbGV2YWxkc2UgdGVnZXZ1c2UgbHViYWRlZ2EgcmFrZW5kdXNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBDYWNoZSIgbXNnaWQ9Ijc0ODcyNzkzOTE3MjM1MjY4MTUiPiJLw7VpZ2kgcmFrZW5kdXNlIHZhaGVtw6RsdWFuZG1ldGUga3VzdHV0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTc0NjQwODcxOTQ1NDM0NTY1Ij4iTHViYWIgcmFrZW5kdXNlbCB2YWJhc3RhZGEgdGFodmVsYXJ2dXRpIG3DpGx1cnV1bWksIGt1c3R1dGFkZXMgZmFpbGUgdGVpc3RlIHJha2VuZHVzdGUgdmFoZW3DpGx1IGthdGFsb29naWRlcy4gU2VsbGUgdGFnYWrDpHJqZWwgdsO1aXZhZCB0ZWlzZWQgcmFrZW5kdXNlZCBrw6Rpdml0dWRhIGFlZ2xhc2VtYWx0LCBzZXN0IG5lZWQgcGVhdmFkIG9tYSBhbmRtZWQgdXVlc3RpIHRvb21hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNDU5NDQxMDIxOTU2NDM2Nzc5Ij4iTHViYWIgcmFrZW5kdXNlbCB2YWJhc3RhZGEgdGVsZWZvbmkgbcOkbHVydXVtaSwga3VzdHV0YWRlcyBmYWlsZSB0ZWlzdGUgcmFrZW5kdXN0ZSB2YWhlbcOkbHUga2F0YWxvb2dpZGVzLiBTZWxsZSB0YWdhasOkcmplbCB2w7VpdmFkIHRlaXNlZCByYWtlbmR1c2VkIGvDpGl2aXR1ZGEgYWVnbGFzZW1hbHQsIHNlc3QgbmVlZCBwZWF2YWQgb21hIGFuZG1lZCB1dWVzdGkgdG9vbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3ZlUGFja2FnZSIgbXNnaWQ9IjMyODk4OTAyNzE2NDU5MjE0MTEiPiJSYWtlbmR1c2UgcmVzc3Vyc3NpZGUgdGVpc2FsZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMTk1NjIyMTc3NzgyNDQ1MjQiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGVpc2FsZGEgcmFrZW5kdXNlcmVzc3Vyc2lkIHNpc2VtaXNlbHQga2FuZGphbHQgdsOkbGlzZWxlIGphIHZhc3R1cGlkaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRMb2dzIiBtc2dpZD0iNjYxNTc3ODU0MzE5ODk2NzYxNCI+InR1bmRsaWtlIGxvZ2lhbmRtZXRlIGx1Z2VtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSBzw7xzdGVlbWkgZXJpbmV2YWlkIGxvZ2lmYWlsZS4gTmlpIG9uIHbDtWltYWxpayBhdmFzdGFkYSDDvGxkaXN0IHRlYXZldCBzZWxsZSBrb2h0YSwgbWlkYSB0ZSB0YWh2ZWxhcnZ1dGlnYSB0ZWV0ZSwgc2ggaXNpa2xpa2t1IHbDtWkgcHJpdmFhdHNldCB0ZWF2ZXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMDYzNDM4MTQwMjQxNTYwNDQzIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSBzw7xzdGVlbWkgZXJpbmV2YWlkIGxvZ2lmYWlsZS4gTmlpIG9uIHbDtWltYWxpayBhdmFzdGFkYSDDvGxkaXN0IHRlYXZldCBzZWxsZSBrb2h0YSwgbWlkYSB0ZSB0ZWxlZm9uaWdhIHRlZXRlLCBtaXMgdsO1aWIga2Fhc2F0YSBrYSBpc2lrbGlra3UgdsO1aSBwcml2YWF0c2V0IHRlYXZldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI3MTU4MDU1NTU4MjM4ODE4MTgiPiJNaXMgdGFoZXMgbWVlZGl1bWlkZWtvb2Rlcmkga2FzdXRhbWluZSB0YWFzZXNpdHVzZWtzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGFhc2VzaXR1c2VrcyBrYXN1dGFkYSBtaXMgdGFoZXMgaW5zdGFsbGl0dWQgbWVlZGl1bWlkZWtvb2Rlcml0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlhZ25vc3RpYyIgbXNnaWQ9IjgwNzY3NDM5NTM5MDgwMDAzNDIiPiJsb2Uva2lyanV0YSB2YWxpamEgYWxsaWthaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaWFnbm9zdGljIiBtc2dpZD0iNjYwODI5NTY5MjAwMjQ1MjI4MyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdWdlZGEgdmFsaW1pc3LDvGhtYSBtaXMgdGFoZXMgcmVzc3Vyc3NpIGphIHNlbGxlc3NlIGtpcmp1dGFkYSAobsOkaXRla3Mga2F1c3RhcyAvZGV2IG9sZXZhZCBmYWlsaWQpLiBTZWUgdsO1aWIgbcO1anV0YWRhIHPDvHN0ZWVtaSBzdGFiaWlsc3VzdCBqYSB0dXJ2ZXQuIFNlZGEgdG9oaWtzIGthc3V0YWRhIHRvb3RqYSB2w7VpIG9wZXJhYXRvciBBSU5VTFQgcmlpc3R2YXJhc3BldHNpaWZpbGlzZWtzIGRpYWdub3N0aWtha3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb21wb25lbnRTdGF0ZSIgbXNnaWQ9IjYzMzU1NzY3NzU3MTEwOTU5MzEiPiJSYWtlbmR1c2Uga29tcG9uZW50aWRlIGx1YmFtaW5lIHbDtWkga2VlbGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbcOkw6RyYXRhLCBrYXMgdGVpc2UgcmFrZW5kdXNlIGtvbXBvbmVudCBvbiBsdWJhdHVkIHbDtWkgbWl0dGUuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIGthc3V0YWRhIHNlZGEgb2x1bGlzdGUgdGFodmVsYXJ2dXRpcmFrZW5kdXN0ZSBrZWVsYW1pc2Vrcy4gTmVuZGUgw7VpZ3VzdGUgcHVodWwgcGVhYiBvbGVtYSBldHRldmFhdGxpaywga3VuYSBuZWVkIHbDtWltYWxkYXZhZCBtdXV0YSByYWtlbmR1c2Uga29tcG9uZW50ZSBrYXN1dHVrcywgZWJhw7xodGxhc2VrcyB2w7VpIGViYXN0YWJpaWxzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTgyNzIzMjQ4NDQxNjUwNTYxNSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtw6TDpHJhdGEsIGthcyB0ZWlzZSByYWtlbmR1c2Uga29tcG9uZW50IG9uIGx1YmF0dWQgdsO1aSBtaXR0ZS4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQga2FzdXRhZGEgc2VkYSBvbHVsaXN0ZSB0ZWxlZm9uaXJha2VuZHVzdGUga2VlbGFtaXNla3MuIE5lbmRlIMO1aWd1c3RlIHB1aHVsIHBlYWIgb2xlbWEgZXR0ZXZhYXRsaWssIGt1bmEgbmVlZCB2w7VpbWFsZGF2YWQgbXV1dGEgcmFrZW5kdXNlIGtvbXBvbmVudGUga2FzdXR1a3MsIGViYcO8aHRsYXNla3MgdsO1aSBlYmFzdGFiaWlsc2Vrcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dyYW50UmV2b2tlUGVybWlzc2lvbnMiIG1zZ2lkPSI0NjI3MzE1MzUxMDkzNTA4Nzk1Ij4ibHViYWRlIGFuZG1pbmUgdsO1aSB0w7xoaXN0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDA4ODY0MjY1NDA4NTg1MDY2MiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBhbmRhIHbDtWkgdMO8aGlzdGFkYSB0ZWF0dWQgbHViYXNpZCBlbmRhbGUgdsO1aSB0ZWlzdGVsZSByYWtlbmR1c3RlbGUuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIGthc3V0YWRhIHNlZGEganV1cmRlcMOkw6RzdSBoYW5raW1pc2VrcyBzZWxsaXN0ZWxlIGZ1bmt0c2lvb25pZGVsZSwgbWlsbGUgamFva3MgdGUgcG9sZSBsdWJhIGFuZG51ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9Ijg0NjMxODE2Mjg2OTUzOTYzOTEiPiJFZWxpc3RhdHVkIHJha2VuZHVzdGUgbcOkw6RyYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI0OTczOTg2NzYyMjQxNzgzNzEyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHRlaWUgZWVsaXN0YXR1ZCByYWtlbmR1c2kuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHNhbGFqYSBtdXV0YSB0w7bDtnRhdmFpZCByYWtlbmR1c2ksIHBldHRlcyB0ZWllIG9sZW1hc29sZXZhZCByYWtlbmR1c2VkIGtvZ3VtYSB0ZWlsdCBwcml2YWF0c2VpZCBhbmRtZWlkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9IjIyMjYxOTUyOTA5NTUyMjQ3MzAiPiJtdXV0a2Ugc8O8c3RlZW1pIHNlYWRlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNldHRpbmdzIiBtc2dpZD0iNzc3NTcyMzQ0MTU1ODkwNzE4MSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSBzw7xzdGVlbWlzZWFkZXRlIGFuZG1laWQuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHJpa2t1ZGEgdGVpZSBzw7xzdGVlbWkga29uZmlndXJhdHNpb29uaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSIyMDQ2NzYyNTE4NzY3MTgyODgiPiJtdXVkYSB0dXJ2YWxpc2kgc8O8c3RlZW1pc2VhZGVpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSI4MTU5NTM1NjEzMDIwMTM3MzkxIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHPDvHN0ZWVtaSB0dXJ2YXNlYWRldGUgYW5kbWVpZC4gTWl0dGUga2FzdXRhZGEgdGF2YXJha2VuZHVzdGUgcHVodWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiJtdXVkYSBHb29nbGVcJ2kgdGVlbnVzdGVrYWFydGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbXV1dGEgR29vZ2xlXCdpIHRlZW51c3Rla2FhcnRpLiBNaXR0ZSBrYXN1dGFkYSB0YXZhcmFrZW5kdXN0ZSBwdWh1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVCb290Q29tcGxldGVkIiBtc2dpZD0iNTMxMjk2NTU2NTk4NzgwMDAyNSI+ImvDpGl0YWdlIGvDpGl2aXRhbWlzZWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzM5MDMwNDY2NDExNjg4MDcwNCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBrw6Rpdml0dWRhIGlzZSBrb2hlLCBrdWkgc8O8c3RlZW0gb24ga8OkaXZpdHVudWQuIFNlZSB2w7VpYiB0YWh2ZWxhcnZ1dGkga8OkaXZpdGFtaXN0IGFlZ2x1c3RhZGEgamEgbHViYWIgcmFrZW5kdXNlbCBtdXV0YSB0YWh2ZWxhcnZ1dGkga2Egw7xsZGlzZWx0IGFlZ2xhc2VtYWtzLCBrdW5hIHTDtsO2dGFiIHBpZGV2YWx0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTEzOTUwNTg5MTAyNjE3NTA0Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGvDpGl2aXR1ZGEgaXNlIGtvaGUsIGt1aSBzw7xzdGVlbSBvbiBrw6Rpdml0dW51ZC4gU2VlIHbDtWliIHRlbGVmb25pIGvDpGl2aXRhbWlzdCBhZWdsdXN0YWRhIGphIGx1YmFiIHJha2VuZHVzZWwgbXV1dGEgdGVsZWZvbmkga2Egw7xsZGlzZWx0IGFlZ2xhc2VtYWtzLCBrdW5hIHTDtsO2dGFiIHBpZGV2YWx0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U3RpY2t5IiBtc2dpZD0iNzkxOTEyNjM3MjYwNjg4MTYxNCI+ImtsZWVwc2FhdGUgc2FhdG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc3NDk3NjA0OTQzOTk5MTU2NTEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc2FhdGEgcMO8c2l2YWlkIGVkYXN0dXNpLCBtaXMgasOkw6R2YWQgcMOkcmFzdCBzYWF0ZSBsw7VwcGVtaXN0IGFsbGVzLiDDnGxlbcOkw6RyYW5lIGthc3V0YW1pbmUgdsO1aWIgbXV1dGEgdGFodmVsYXJ2dXRpIGFlZ2xhc2VrcyB2w7VpIGViYXN0YWJpaWxzZWtzLCBww7VoanVzdGFkZXMgc2VsbGUgbGlpZ2Egc3V1cmUgbcOkbHVrYXN1dHVzZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHNhYXRhIHDDvHNpdmFpZCBlZGFzdHVzaSwgbWlzIGrDpMOkdmFkIHDDpHJhc3Qgc2FhdGUgbMO1cHBlbWlzdCBhbGxlcy4gw5xsZW3DpMOkcmFuZSBrYXN1dGFtaW5lIHbDtWliIG11dXRhIHRlbGVmb25pIGFlZ2xhc2VrcyB2w7VpIGViYXN0YWJpaWxzZWtzLCBww7VoanVzdGFkZXMgc2VsbGUgbGlpZ2Egc3V1cmUgbcOkbHVrYXN1dHVzZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDb250YWN0cyIgbXNnaWQ9IjgzNDg0ODExMzE4OTk4ODYxMzEiPiJsdWdlZ2Ugb21hIGtvbnRha3RlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1Mjk0ODY2ODU2OTQxMTQ5NjM5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSBhbmRtZWlkIHRlaWUgdGFodmVsYXJ2dXRpc3NlIHNhbHZlc3RhdHVkIGtvbnRha3RpZGUga29odGEsIG7DpGl0ZWtzIHNlZGEsIGt1aSB0aWh0aSB0ZSBrZWxsZWxlZ2kgaGVsaXN0YXRlLCBtZWlsaXRlIHbDtWkgbmVuZGVnYSBtdXVsIHZpaXNpbCBzdWh0bGV0ZS4gU2VlIGx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c3RlbCBzYWx2ZXN0YWRhIHRlaWUga29udGFrdGFuZG1laWQgamEgcGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdGVpZSB0ZWFkbWF0YSBrb250YWt0YW5kbWVpZCBqYWdhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ0MDY1NDE1MjQ1NzMwMDY2MiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdWdlZGEgYW5kbWVpZCB0ZWllIHRlbGVmb25pIHNhbHZlc3RhdHVkIGtvbnRha3RpZGUga29odGEsIG7DpGl0ZWtzIHNlZGEsIGt1aSB0aWh0aSB0ZSBrZWxsZWxlZ2kgaGVsaXN0YXRlLCBtZWlsaXRlIHbDtWkgbmVuZGVnYSBtdXVsIHZpaXNpbCBzdWh0bGV0ZS4gU2VlIGx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c3RlbCBzYWx2ZXN0YWRhIHRlaWUga29udGFrdGFuZG1laWQgamEgcGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdGVpZSB0ZWFkbWF0YSBrb250YWt0YW5kbWVpZCBqYWdhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNvbnRhY3RzIiBtc2dpZD0iNTEwNzQ5MjA4NjQxNjc5MzU0NCI+Im11dXRrZSBvbWEga29udGFrdGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTcyNDM5MzI1MjE5NTM2MDIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbXV1dGEgdGFodmVsYXJ2dXRpc3NlIHNhbHZlc3RhdHVkIGtvbnRha3RpZGUgYW5kbWVpZCwgc2VhbGh1bGdhcyBzZWRhLCBrdWkgdGlodGkgb2xldGUga29ua3JlZXRzZXRlbGUga29udGFrdGlkZWxlIGhlbGlzdGFudWQsIG1laWxpbnVkIHbDtWkgbmVuZGVnYSBtdXVsIHZpaXNpbCBzdWhlbG51ZC4gU2VlIGx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c3RlbCBrdXN0dXRhZGEga29udGFrdGFuZG1laWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU4OTg2OTIyNDYyNTE2MzU1OCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB0ZWxlZm9uaSBzYWx2ZXN0YXR1ZCBrb250YWt0aWRlIGFuZG1laWQsIHNlYWxodWxnYXMgc2VkYSwga3VpIHRpaHRpIG9sZXRlIGtvbmtyZWV0c2V0ZWxlIGtvbnRha3RpZGVsZSBoZWxpc3RhbnVkLCBtZWlsaW51ZCB2w7VpIG5lbmRlZ2EgbXV1bCB2aWlzaWwgc3VoZWxudWQuIFNlZSBsdWJhIHbDtWltYWxkYWIgcmFrZW5kdXN0ZWwga3VzdHV0YWRhIGtvbnRha3RhbmRtZWlkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGxMb2ciIG1zZ2lkPSIzNDc4MTMzMTg0NjI0MTAyNzM5Ij4ia8O1bmVsb2dpIGx1Z2VtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM3MDA2NDUxODQ4NzA3NjAyODUiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHRlaWUgdGFodmVsYXJ2dXRpIGvDtW5lbG9naSwgc2ggYW5kbWVpZCBzaXNzZXR1bGV2YXRlIGphIHbDpGxqdXZhdGUga8O1bmVkZSBrb2h0YS4gU2VlIGx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c3RlbCBzYWx2ZXN0YWRhIHRlaWUga8O1bmVsb2dpIGFuZG1laWQgamEgcGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdGVpZSB0ZWFkbWF0YSBrw7VuZWxvZ2kgYW5kbWVpZCBqYWdhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc3NzI1Nzk2ODEzMjE3MjQ0Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSB0ZWllIHRlbGVmb25pIGvDtW5lbG9naSwgc2ggYW5kbWVpZCBzaXNzZXR1bGV2YXRlIGphIHbDpGxqdXZhdGUga8O1bmVkZSBrb2h0YS4gU2VlIGx1YmEgdsO1aW1hbGRhYiByYWtlbmR1c3RlbCBzYWx2ZXN0YWRhIHRlaWUga8O1bmVsb2dpIGFuZG1laWQgamEgcGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdGVpZSB0ZWFkbWF0YSBrw7VuZWxvZ2kgYW5kbWVpZCBqYWdhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGxMb2ciIG1zZ2lkPSI4NTUyMDQ1NjY0NzQzNDk5MzU0Ij4ia8O1bmVsb2dpIGtpcmp1dGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NjYxODA2MDYyMjc0MTE5MjQ1Ij4iTHViYWIgcmFrZW5kdXNlbCBtdXV0YSB0YWh2ZWxhcnZ1dGkga8O1bmVsb2dpLCBzaCBzaXNzZXR1bGV2YXRlIGphIHbDpGxqYW1pbmV2YXRlIGvDtW5lZGUgYW5kbWVpZC4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQga2FzdXRhZGEgc2VkYSBrw7VuZWxvZ2kga3VzdHV0YW1pc2VrcyB2w7VpIG11dXRtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4iTHViYWIgcmFrZW5kdXNlbCBtdXV0YSB0ZWxlZm9uaSBrw7VuZWxvZ2ksIHNoIHNpc3NldHVsZXZhdGUgamEgdsOkbGphbWluZXZhdGUga8O1bmVkZSBhbmRtZWlkLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBrYXN1dGFkYSBzZWRhIGvDtW5lbG9naSBrdXN0dXRhbWlzZWtzIHbDtWkgbXV1dG1pc2Vrcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQcm9maWxlIiBtc2dpZD0iNDcwMTg4OTg1MjYxMjcxNjY3OCI+Imx1Z2VnZSBvbWEga29udGFrdGlrYWFydGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NjI0NzUxNTE4NDk4ODg4NDgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHNlYWRtZXNzZSBzYWx2ZXN0YXR1ZCBpc2lrbGlra3UgcHJvZmlpbGl0ZWF2ZXQsIG7DpGl0ZWtzIHRlaWUgbmltZSBqYSBrb250YWt0dGVhdmV0LiBTZWUgdMOkaGVuZGFiLCBldCByYWtlbmR1cyBzYWFiIHRlaWQgdHV2YXN0YWRhIGphIHNhYXRhIHRlaWUgcHJvZmlpbGl0ZWF2ZXQgdGVpc3RlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiJtdXV0a2Ugb21hIGtvbnRha3Rpa2FhcnRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTU1MjA4NDI5NDU5ODQ2NTg5OSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB2w7VpIGxpc2FkYSBzZWFkbWVzc2Ugc2FsdmVzdGF0dWQgaXNpa2xpa2t1IHByb2ZpaWxpdGVhdmV0LCBuw6RpdGVrcyB0ZWllIG5pbWUgamEga29udGFrdHRlYXZldC4gU2VlIHTDpGhlbmRhYiwgZXQgcmFrZW5kdXMgc2FhYiB0ZWlkIHR1dmFzdGFkYSBqYSBzYWF0YSB0ZWllIHByb2ZpaWxpdGVhdmV0IHRlaXN0ZWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEyNjg5MjA5NTYxNTI0MTkxNzAiPiJTb3RzaWFhbHZvbyBsdWdlbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4iQW5uYWIgcmFrZW5kdXNlbGUganV1cmRlcMOkw6RzdSBqYSB2w7VpbWFsZGFiIHPDvG5rcm9vbmlkYSB0ZWllIGphIHRlaWUgc8O1cHJhZGUgc290c2lhYWxzZWlkIHbDpHJza2VuZHVzaS4gT2xnZSB0ZWFiZSBqYWdhbWlzZWwgZXR0ZXZhYXRsaWsg4oCTIHNlZSB2w7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHRlaWUgc3VodGx1c2kgc8O1cHJhZGVnYSBzdWh0bHVzdsO1cmd1c3Rpa2VzIGtvbmZpZGVudHNpYWFsc3VzZXN0IGhvb2xpbWF0YS4gTcOkcmt1czogc2VlIGx1YmEgZWkgcHJ1dWdpIGrDtXVzdHVkYSBrw7VpZ2lzIHN1aHRsdXN2w7VyZ3VzdGlrZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM1MDQxNzkyMjI0OTMyMzU2NDUiPiJTb3RzaWFhbHZvb2d1IGtpcmp1dGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDg2NTU3NTUyMjA0MTE0ODQ5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGt1dmFkYSBzw7VwcmFkZSBzb3RzaWFhbHNlaWQgdsOkcnNrZW5kdXNpLiBPbGdlIHRlYWJlIGphZ2FtaXNlbCBldHRldmFhdGxpayDigJMgc2VlIHbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdXVhIHPDtW51bWVpZCwgbWlzIHbDtWl2YWQgbsOkaWRhIHR1bGV2YXQgc8O1cHJhZGVsdC4gTcOkcmt1czogc2VlIGx1YmEgZWkgcHJ1dWdpIGrDtXVzdHVkYSBrw7Vpa2lkZXMgc3VodGx1c3bDtXJndXN0aWtlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxlbmRhciIgbXNnaWQ9IjU5NzI3Mjc1NjAyNTc2MTIzOTgiPiJrYWxlbmRyaXPDvG5kbXVzdGUgbHVnZW1pbmUgamEga29uZmlkZW50c2lhYWxuZSB0ZWF2ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDIxNjQ2MjA0OTA1NzY1ODcyMyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdWdlZGEga8O1aWtpIHRhaHZlbGFydnV0aXNzZSBzYWx2ZXN0YXR1ZCBrYWxlbmRyaXPDvG5kbXVzaSwgc2ggc8O1cHJhZGUgdsO1aSB0w7bDtmthYXNsYXN0ZSBvbWkuIFNlZSB2w7VpYiBsdWJhZGEgcmFrZW5kdXNlbCBqYWdhZGEgdsO1aSBzYWx2ZXN0YWRhIHRlaWUga2FsZW5kcmlhbmRtZWlkLCBob29saW1hdGEga29uZmlkZW50c2lhYWxzdXNlc3QgdsO1aSB0dW5kbGlra3VzZXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc0MzQ1NDg2ODI0NzA4NTE1ODMiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIGvDtWlraSB0ZWxlZm9uaSBzYWx2ZXN0YXR1ZCBrYWxlbmRyaXPDvG5kbXVzaSwgc2ggc8O1cHJhZGUgdsO1aSB0w7bDtmthYXNsYXN0ZSBvbWkuIFNlZSB2w7VpYiBsdWJhZGEgcmFrZW5kdXNlbCBqYWdhZGEgdsO1aSBzYWx2ZXN0YWRhIHRlaWUga2FsZW5kcmlhbmRtZWlkLCBob29saW1hdGEga29uZmlkZW50c2lhYWxzdXNlc3QgdsO1aSB0dW5kbGlra3VzZXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDYWxlbmRhciIgbXNnaWQ9Ijg0Mzg4NzQ3NTUxOTM4MjU2NDciPiJrYWxlbmRyaXPDvG5kbXVzdGUgbGlzYW1pbmUgdsO1aSBtdXV0bWluZSBqYSBrw7xsYWxpc3RlbGUgb21hbmlrZSB0ZWFkbWF0YSBtZWlsaSBzYWF0bWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NzkwMzU1MjAxMTM2Njg1MjgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbGlzYWRhLCBlZW1hbGRhZGEgamEgbXV1dGEgc8O8bmRtdXNpLCBtaWRhIHNhYXRlIG11dXRhIG9tYSB0YWh2ZWxhcnZ1dGlzLCBzaCBzw7VwcmFkZSBqYSB0w7bDtmthYXNsYXN0ZSBvbWkuIFNlZSB2w7VpYiB2w7VpbWFsZGFkYSByYWtlbmR1c2VsIHNhYXRhIHPDtW51bWVpZCwgbWlzIG7DpGl2YWQgdHVsZXZhdCBrYWxlbmRyaSBvbWFuaWtlbHQsIHbDtWkgbXV1dGEgc8O8bmRtdXNpIG9tYW5pa3UgdGVhZG1hdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIzMjQ0Njk0OTYzMjcyNDkzNzYiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbGlzYWRhLCBlZW1hbGRhZGEgamEgbXV1dGEgc8O8bmRtdXNpLCBtaWRhIHNhYXRlIG11dXRhIG9tYSB0ZWxlZm9uaXMsIHNoIHPDtXByYWRlIGphIHTDtsO2a2Fhc2xhc3RlIG9taS4gU2VlIHbDtWliIHbDtWltYWxkYWRhIHJha2VuZHVzZWwgc2FhdGEgc8O1bnVtZWlkLCBtaXMgbsOkaXZhZCB0dWxldmF0IGthbGVuZHJpIG9tYW5pa2VsdCwgdsO1aSBtdXV0YSBzw7xuZG11c2kgb21hbmlrdSB0ZWFkbWF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9Ijg2ODgzMzQ5NzQwMzY4MjMzMzAiPiJ2w7VsdHNhc3Vrb2hhZCB0ZXN0aW1pc2VrcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9IjU4MDg3MTEwMzk0ODIwNTE4MjQiPiJMb29nZSB2w7VsdHNhc3Vrb2hhIGFsbGlrYWlkLCBldCBrYXRzZXRhZGEgdsO1aSBpbnN0YWxsaWRhIHV1dCBhc3Vrb2hhcGFra3VqYXQuIFNlZSBsdWJhYiByYWtlbmR1c2VsIHTDvGhpc3RhZGEgdGVpc3RlIGFzdWtvaGFhbGxpa2F0ZSwgbsOkaXRla3MgR1BTLWkgdsO1aSBhc3Vrb2hhcGFra3VqYXRlIHRhZ2FzdGF0dWQgYXN1a29oYSBqYS92w7VpIG9sZWt1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iMjgzNjMwODA3NjcyMDU1MzgzNyI+Imp1dXJkZXDDpMOkcyBhc3Vrb2hhcGFra3VqYSBsaXNha8Okc2t1ZGVsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgcMOkw6RzZWRhIGp1dXJkZSBhc3Vrb2hhcGFra3VqYSBlcmlrw6Rza3VkZWxlLiBTZWUgdsO1aWIgbHViYWRhIHJha2VuZHVzZWwgc2VnYWRhIEdQUy1pIHbDtWkgbXV1ZGUgYXN1a29oYWFsbGlrYXRlIHTDtsO2ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iNjU3ODEwMTE5OTgyNTE5Mzg3MyI+Imx1YmEgYXN1a29oYXBha2t1amEgaW5zdGFsbGltaXNla3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjkwNjYxNDYxMjA0NzA1OTE1MDkiPiJMb29nZSB2w7VsdHNhc3Vrb2hhIGFsbGlrYWlkLCBldCBrYXRzZXRhZGEgdsO1aSBpbnN0YWxsaWRhIHV1dCBhc3Vrb2hhcGFra3VqYXQuIFNlZSBsdWJhYiByYWtlbmR1c2VsIHTDvGhpc3RhZGEgdGVpc3RlIGFzdWtvaGFhbGxpa2F0ZSwgbsOkaXRla3MgR1BTLWkgdsO1aSBhc3Vrb2hhcGFra3VqYXRlIHRhZ2FzdGF0dWQgYXN1a29oYSBqYS92w7VpIG9sZWt1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iMTE5MTg5ODA2MTk2NTI3MzM3MiI+InTDpHBuZSBhc3Vrb2h0IChHUFMtIGphIHbDtXJndXDDtWhpbmUpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iNTI5NTA0NzU2MzU2NDk4MTI1MCI+Ikx1YmFiIHJha2VuZHVzZWwgaGFua2lkYSB0ZWllIHTDpHBzZSBhc3Vrb2hhIGdsb2JhYWxzZSBwb3NpdHNpb25lZXJpbWlzc8O8c3RlZW1pIChHUFMpIHbDtWkgdsO1cmd1IGFzdWtvaGFhbGxpa2F0ZSAobnQgbW9iaWlsaW1hc3RpZGUgamEgV2lGaSkgasOkcmdpLiBOZWVkIGFzdWtvaGF0ZWVudXNlZCBwZWF2YWQgb2xlbWEgc2lzc2UgbMO8bGl0YXR1ZCBqYSB0ZWllIHNlYWRtZSBqYW9rcyBzYWFkYXZhbCwgZXQgcmFrZW5kdXMgc2Fha3MgbmVpZCBrYXN1dGFkYS4gUmFrZW5kdXNlZCB2w7VpdmFkIGthc3V0YWRhIHNlZGEgdGVpZSBhc3Vrb2hhIHR1dmFzdGFtaXNla3MgamEgdGFyYmlkYSBha3V0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSI0ODg3ODk1MzYyMzU0MjM5NjI4Ij4ibGlnaWthdWRuZSBhc3Vrb2h0ICh2w7VyZ3Vww7VoaW5lKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+Ikx1YmFiIHJha2VuZHVzZWwgaGFua2lkYSBqdXVyZGVww6TDpHN1IGxpZ2lrYXVkc2VsZSBhc3Vrb2hhbGUuIEFzdWtvaHQgdHVsZXRhdGFrc2UgYXN1a29oYXRlZW51c3RlIGrDpHJnaSwga2FzdXRhZGVzIHbDtXJndSBhc3Vrb2hhYWxsaWthaWQsIG50IG1vYmlpbGltYXN0aWQgamEgV2lGaS4gTmVlZCBhc3Vrb2hhdGVlbnVzZWQgcGVhdmFkIG9sZW1hIHNpc3NlIGzDvGxpdGF0dWQgamEgdGVpZSBzZWFkbWUgamFva3Mgc2FhZGF2YWwsIGV0IHJha2VuZHVzIHNhYWtzIG5laWQga2FzdXRhZGEuIFJha2VuZHVzZWQgdsO1aXZhZCBrYXN1dGFkYSBzZWRhIHRlaWUgbGlnaWthdWRzZSBhc3Vrb2hhIHR1dmFzdGFtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjIzNjM5Njk2NDE3OTIzODg5NDciPiJqdXVyZGVww6TDpHMgU3VyZmFjZUZsaW5nZXJpbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga2FzdXRhZGEgU3VyZmFjZUZsaW5nZXJpIG1hZGFsYXRhc2VtZWxpc2kgZnVua3RzaW9vbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ibG9lIGthYWRyaXB1aHZyaXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGthYWRyaXB1aHZyaSBzaXN1IGx1Z2VkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJqdXVyZGVww6TDpHMgSW5wdXRGbGluZ2VyaWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+Ikx1YmFiIHJha2VuZHVzZWwga2FzdXRhZGEgSW5wdXRGbGluZ2VyaSBtYWRhbGF0YXNlbWVsaXNpIGZ1bmt0c2lvb25lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4iV2lGaS1la3JhYW5pZGUgc2VhZGlzdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iTHViYWIgcmFrZW5kdXNlbCBzZWFkaXN0YWRhIFdpRmktZWtyYWFuZSBqYSBuZW5kZWdhIMO8aGVuZHVzIGx1dWEuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfY2FwdHVyZUF1ZGlvT3V0cHV0ICg2ODU3MTM0NDk4NDAyMzQ2NzA4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCAoNjIxMDU5Nzc1NDIxMjIwODg1MykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2NhcHR1cmVWaWRlb091dHB1dCAoMjI0NjgyODc3MzU4OTA5NDAyMykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19jYXB0dXJlVmlkZW9PdXRwdXQgKDM1OTQ4MTY1ODAzNDE0OTg2MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCAoNzgxNTM5ODk2OTMwMzM4MjAxNikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19jYXB0dXJlU2VjdXJlVmlkZW9PdXRwdXQgKDI3Nzk3OTMwNjQ3MDkzNTAyODkpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI2MDk1ODU5OTM3MDY5MTQ2MDg2Ij4ibXV1ZGEgaGVsaXNlYWRlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSDDvGxkaXNlaWQgaGVsaXNlYWRlaWQsIG7DpGl0ZWtzIGhlbGl0dWdldnVzdCBqYSBzZWRhLCBtaWxsaXN0IGvDtWxhcml0IGthc3V0YXRha3NlIHbDpGxqdW5kaWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4ic2FsdmVzdGEgaGVsaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBzYWx2ZXN0YWRhIG1pa3JvZm9uaWdhIGhlbGkuIFNlZSBsdWJhIHbDtWltYWxkYWIgcmFrZW5kdXNlbCBzYWx2ZXN0YWRhIGhlbGkgaWdhbCBhamFsIGlsbWEgdGVpZSBraW5uaXR1c2V0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJwaWx0aWRlIGphIHZpZGVvdGUgdGVnZW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHRlaGEga2FhbWVyYWdhIHBpbHRlIGphIHZpZGVvaWQuIFNlZSBsdWJhIHbDtWltYWxkYWIgcmFrZW5kdXNlbCBrYXN1dGFkYSBrYWFtZXJhdCBtaXMgdGFoZXMgYWphbCB0ZWllIGtpbm5pdHVzZXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+ImtlZWxhIGthYW1lcmEga2FzdXRhbWlzZWwgbsOkaWRpa3V0dWxlIGthc3V0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4iTHViYWIgZWVsaW5zdGFsbGl0dWQgc8O8c3RlZW1pcmFrZW5kdXNlbCBrZWVsYXRhIGthYW1lcmEgbsOkaWRpa3V0dWxlIGthc3V0YW1pc2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjk2MTI5MjIwNTc2NDQ4ODMwNCI+ImJsb2tlZXJpIHRhaHZlbGFydnV0aSBqw6TDpGRhdmFsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MzM3ODE3MDkzMzI2MzcwNTM3Ij4iYmxva2VlcmkgdGVsZWZvbiBqw6TDpGRhdmFsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzM0ODE4ODA4MDAxNjk5NTMwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGtvZ3UgdGFodmVsYXJ2dXRpIGrDpMOkZGF2YWx0IGtlZWxhdGEuIFNlZSBvbiB2w6RnYSBvaHRsaWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzg4OTAzMjk3NjI3MjgzMDk5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGtvZ3UgdGVsZWZvbmkgasOkw6RkYXZhbHQga2VlbGF0YS4gU2VlIG9uIHbDpGdhIG9odGxpay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQzNjYzNDk3MjU2MTc5NTAwMiI+InN1bm5pIHRhaHZlbGFydnV0aSB0YWFza8OkaXZpdHVtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg5ODU2MDg3MjQ2MjYzODI0MiI+InN1bm5pIHRlbGVmb25pIHRhYXNrw6Rpdml0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgxNzIwNTYxODAwNjM3MDA3NDEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc3VuZGlkYSB0YWh2ZWxhcnZ1dGl0IHRhYXNrw6Rpdml0dW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc3VuZGlkYSB0ZWxlZm9uaSB0YWFza8OkaXZpdHVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjkyNzM2MTUzNzk0MjU5MTg0MSI+Imp1dXJkZXAuIFVTQi1ydXVtaSBmYWlsaXPDvHN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0MDIzMDUwNDk4OTA5NTM4MTAiPiJqdXVyZGVww6TDpHMgU0Qta2FhcmRpIGZhaWxpc8O8c3RlZW1pbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iMTgyOTI5MDcwMTY1ODk5MjM0NyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBmYWlsaXPDvHN0ZWVtZSBpcmRtw6RsbHUgcGFpZ2FsZGFkYSBqYSBzZWFsdCBsYWh1dGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4idMO8aGplbmRhZ2UgVVNCLXNhbHZlc3R1c3J1dW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MjU4MjY5ODYzOTI3NDA1NiI+InTDvGhqZW5kYWdlIFNELWthYXJ0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iODc4NDI2ODI0Njc3OTE5ODYyNyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB2b3JtaW5kYWRhIGlyZG3DpGx1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzNDExMzM4NjMyMDAyMTkzODQ2Ij4iaGFuZ2kgdGVhdmV0IHNpc2Vtw6RsdSBrb2h0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzA5NDU2Mzg0NDU5Mzg3ODU0OCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBoYW5raWRhIHNpc2Vtw6RsdSB0ZWF2ZXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2NyZWF0ZSIgbXNnaWQ9IjY0MTQ3NTcyMzQ3ODkzMzYzMjciPiJzaXNlbcOkbHUgbG9vbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfY3JlYXRlIiBtc2dpZD0iNDU1ODg2OTI3MzU4NTg1Njg3NiI+Ikx1YmFiIHJha2VuZHVzZWwgbHV1YSBzaXNlbcOkbHUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI1MjY5MjgzMjgzMDE2MTgwMjIiPiJow6R2aXRhIHNpc2Vtw6RsdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjcyMTg3NDkyODYxNDU1MjY1MzciPiJMdWJhYiByYWtlbmR1c2VsIHNpc2Vtw6RsdSBow6R2aXRhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSI4ODc3OTk4MTAxOTQ0OTk5Mzg2Ij4iU2lzZW3DpGx1IHBhaWdhbGRhbWluZS9lZW1hbGRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9IjM0NTEzNjAxMTQ5MDI0OTA5MjkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc2lzZW3DpGx1c2VhZG1lIHBhaWdhbGRhZGEvZXJhbGRhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX3JlbmFtZSIgbXNnaWQ9Ijc0OTY2MzM5NTQwODA0NzI0MTciPiJzaXNlbcOkbHUgw7xtYmVybmltZXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfcmVuYW1lIiBtc2dpZD0iMTc5NDc1NzU4ODQ3MjEyNzY3NSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBzaXNlbcOkbHUgw7xtYmVyIG5pbWV0YWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJqdWh0aWdlIHZpYnJlZXJpbWlzdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGp1aHRpZGEgdmlicmVlcmltaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJqdWhpIHRhc2t1bGFtcGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBqdWh0aWRhIHRhc2t1bGFtcGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4iVVNCLXNlYWRtZXRlIGVlbGlzdHVzdGUgamEgbHViYWRlIGhhbGRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzYiIgbXNnaWQ9Ijc3NzYxNTU0MzAyMTgyMzk4MzMiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaGFsbGF0YSBVU0Itc2VhZG1ldGUgZWVsaXN0dXNpIGphIGx1YmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4iTVRQLXByb3Rva29sbGkgcmFrZW5kYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNdHAiIG1zZ2lkPSI2NTMyOTYxMjAwNDg2NzkxNTcwIj4iTHViYWIganV1cmRlcMOkw6RzdSB0dXVtYSBNVFAtZHJhaXZlcmlsZSBNVFAgVVNCLXByb3Rva29sbGkgcmFrZW5kYW1pc2Vrcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI0MTQ4MjkwODYwNDAwNjU5MTQ2Ij4idGVzdGkgcmlpc3R2YXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjY1OTc5NjQxOTEyMDgwMTY2MDUiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwganVodGlkYSBlcmluZXZhaWQgdsOkbGlzc2VhZG1laWQgcmlpc3R2YXJhIHRlc3RpbWlzZSBlZXNtw6RyZ2lsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ImhlbGlzdGEgb3RzZSB0ZWxlZm9uaW51bWJyaXRlbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHRlaWUgc2Vra3VtaXNldGEgdGVsZWZvbmludW1icml0ZWxlIGhlbGlzdGFkYS4gU2VlIHbDtWliIHDDtWhqdXN0YWRhIG9vdGFtYXR1aWQgdGFzdXNpZCB2w7VpIHRlbGVmb25pa8O1bmVzaWQuIFBhbmdlIHTDpGhlbGUsIGV0IHNlZSBlaSBsdWJhIHJha2VuZHVzZWwgaGVsaXN0YWRhIGjDpGRhYWJpbnVtYnJpdGVsZS4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdGVpbGUga3VsdXNpZCB0ZWtpdGFkYSwgdGVoZXMgdGVsZWZvbmlrw7VuZXNpZCB0ZWllIGtpbm5pdHVzZXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFByaXZpbGVnZWQiIG1zZ2lkPSI0MTk4MzQ5MjExMTA4NDk3ODc5Ij4iaGVsaXN0YSBvdHNlIG1pcyB0YWhlcyB0ZWxlZm9uaW51bWJyaXRlbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaGVsaXN0YWRhIG1pcyB0YWhlcyB0ZWxlZm9uaW51bWJyaWxlLCBzaCBow6RkYWFiaW51bWJyaXRlbGUgaWxtYSB0ZWllIHNla2t1bWlzZXRhLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCB0ZWhhIGjDpGRhYWJpdGVlbnVzdGVsZSBtaXR0ZXZhamFsaWtrZSBqYSBlYmFzZWFkdXNsaWtrZSBrw7VuZXNpZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4ia8OkaXZpdGEgb3RzZSBDRE1BLXRhaHZlbGFydnV0aSBzZWFkaXN0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTYwNDg0ODA5NTMxNTQyMTQyNSI+IkNETUEtdGVsZWZvbmlzZWFkaXN0dXNlIG90c2Uga8OkaXZpdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIG1zZ2lkPSIxOTk0MTkzNTM4ODAyMzE0MTg2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGvDpGl2aXRhZGEgQ0RNQSBldHRldmFsbWlzdGFtaXNlLiBQYWhhdGFodGxpa3VkIHJha2VuZHVzZWQgdsO1aXZhZCBDRE1BIGV0dGV2YWxtaXN0YW1pc2UgYXNqYXR1bHQga8OkaXZpdGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9Ijc3ODU0MDgyNTMzNjQzMzU3NDAiPiJrb250cm9sbGkgYXN1a29oYSB2w6Ryc2tlbmRhbWlzZSB0ZWF0aXNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iMTEyMDc0MTU1Nzg5MTQzODg3NiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdWJhZGEva2VlbGF0YSBhc3Vrb2hhIHbDpHJza2VuZGFtaXNlIHRlYXRpc2VkIHJhYWRpb3N0LiBNaXR0ZSBrYXN1dGFkYSB0YXZhcmFrZW5kdXN0ZSBwdWh1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+Imp1dXJkZXDDpMOkcyByZWdpc3RyZWVyaW1pc2F0cmlidXV0aWRlbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9IjQwMjQ1MjY5Njg2MzAxOTQxMjgiPiJBbm5hYiByYWtlbmR1c2VsZSBsdWdlbWlzLS9raXJqdXR1c8O1aWd1c2UgcmVnaXN0cmVlcmltaXN0ZWVudXNlZ2Egw7xsZXMgbGFhZGl0dWQgYXRyaWJ1dXRpZGVsZS4gTWl0dGUga2FzdXRhZGEgdGF2YXJha2VuZHVzdGUgcHVodWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kR2FkZ2V0IiBtc2dpZD0iNzc2OTA1MzM5MDE1ODYzNDcxIj4idmFsaSB2aWRpbmFpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIMO2ZWxkYSBzw7xzdGVlbWlsZSwgbWlsbGluZSByYWtlbmR1cyBzYWFiIGthc3V0YWRhIG1pbGxpc2VpZCB2aWRpbmFpZC4gU2VsbGUgw7VpZ3VzZWdhIHJha2VuZHVzIHbDtWliIGFuZGEgdGVpc3RlbGUgcmFrZW5kdXN0ZWxlIGp1dXJkZXDDpMOkc3UgaXNpa2xpa2VsZSBhbmRtZXRlbGUuIE1pdHRlIGthc3V0YWRhIHRhdmFyYWtlbmR1c3RlIHB1aHVsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9Ijg0MjM5MjM3Nzc2NTkyOTIyMjgiPiJtdXVkYSB0ZWxlZm9uaSBvbGVrdXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBqdWh0aWRhIHNlYWRtZSB0ZWxlZm9uaWZ1bmt0c2lvb25lLiBTZWxsZSBsb2FnYSByYWtlbmR1cyBzYWFiIHZhaGV0YWRhIHbDtXJrZSwgbMO8bGl0YWRhIHRlbGVmb25pcmFhZGlvdCBzaXNzZSBqYSB2w6RsamEgbmluZyB0ZWhhIG11dWRraSBpbG1hIHRlaWQgdGVhdml0YW1hdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjkxNzgyMjg1MjQ1MDc2MTA0ODYiPiJsdWdlZ2UgdGVsZWZvbmkgb2xla3V0IGphIGlkZW50aXRlZXRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSIxNjM5MjEyNzcxODI2MTI1NTI4Ij4iQW5uYWIgcmFrZW5kdXNlbGUganV1cmRlcMOkw6RzdSBzZWFkbWUgdGVsZWZvbmlmdW5rdHNpb29uaWRlbGUuIFNlZSBsdWJhIHbDtWltYWxkYWIgcmFrZW5kdXNlbCBtw6TDpHJhdGEgdGVsZWZvbmludW1icmkgamEgc2VhZG1lIElELWQgbmluZyBrb250cm9sbGlkYSwga2FzIGvDtW5lIG9uIGFrdGlpdm5lIGphIGthdWdudW1iZXIgb24ga8O1bmUga2F1ZHUgdGVsZWZvbmlnYSDDvGhlbmRhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MzE3MzE0MzUwMTE0OTUwMTUiPiJ0YWh2ZWxhcnZ1dGkgdWludW1pc2UgdsOkbHRpbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzM0ODAxODc5NDE0OTYxMzAiPiJ2w6RsZGkgdGVsZWZvbmkgdWludW1pc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzMxMTMxOTgyNDQwMDQ0Nzg2OCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB2w6RsdGlkYSB0YWh2ZWxhcnZ1dGkgdWludW1pc3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NTU5MTAwNjc3MzcyOTI4NzU0Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHbDpGx0aWRhIHRlbGVmb25pIHVpbnVtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3ODcwMzQ3MjI2MTYzNTA0MTciPiJsw7xsaXRhIHRhaHZlbGFydnV0aSBzaXNzZSB2w7VpIHbDpGxqYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTI4NjIyNDcwOTgwOTQzMjA2Ij4ibMO8bGl0YSB0ZWxlZm9uIHNpc3NlIHbDtWkgdsOkbGphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGFodmVsYXJ2dXRpdCBzaXNzZSB2w7VpIHbDpGxqYSBsw7xsaXRhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2MDM3MDU3MzQ4NDYzMTMxMDMyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHRlbGVmb25pIHNpc3NlIHbDtWkgdsOkbGphIGzDvGxpdGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZhY3RvcnlUZXN0IiBtc2dpZD0iMzcxNTIyNTQ5MjY5NjQxNjE4NyI+ImvDpGl2aXRhIHRlaGFzZSB0ZXN0cmXFvmlpbWlzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NTIwNTkzMTgzNTk2NTMwOTEiPiJLw6RpdGFnZSBtYWRhbGF0YXNlbWVsaXNlIHRvb3RqYXRlc3RpbmEsIG1pcyBhbm5hYiB0w6RpZWxpa3UganV1cmRlcMOkw6RzdSB0YWh2ZWxhcnZ1dGkgcmlpc3R2YXJhbGUuIFNhYWRhdmFsIGFpbnVsdCBzaWlzLCBrdWkgdGFodmVsYXJ2dXRpIHTDtsO2dGFiIHRvb3RqYXRlc3RpIHJlxb5paW1pcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxMzY2NDQ5OTAzMTkyNDQ4MDIiPiJLw6Rpdml0YWdlIG1hZGFsYXRhc2VtZWxpc2UgdG9vdGphdGVzdGluYSwgbWlzIHbDtWltYWxkYWIgdMOkaWVsaWtrdSBqdXVyZGVww6TDpHN1IHRlbGVmb25pIHJpaXN0dmFyYWxlLiBLYXN1dGF0YXYgYWludWx0IGp1aHVsLCBrdWkgdGVsZWZvbiB0w7bDtnRhYiB0b290amEgdGVzdHJlxb5paW1pcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlciIgbXNnaWQ9IjY2MjcxOTIzMzMzNzM0NjUxNDMiPiJtw6TDpHJhIHRhdXN0YXBpbHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXIiIG1zZ2lkPSI3MzczNDQ3OTIwOTc3NjI0NzQ1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG3DpMOkcmF0YSBzw7xzdGVlbWkgdGF1c3RhcGlsZGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjMyNzg2MDgxNjU5Nzc3MzY1MzgiPiJrb3JyaWdlZXJpZ2Ugb21hIHRhdXN0YXBpbGRpIHN1dXJ1c3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjgyMzU3ODQzODQyMjM3MzAwOTEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbcOkw6RyYXRhIHPDvHN0ZWVtaSB0YXVzdGFwaWxkaSBzdXVydXNlIHZpaGplaWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXN0ZXJDbGVhciIgbXNnaWQ9IjIzMTU3NTA0MjMxMzk2OTczOTciPiJsw6RodGVzdGEgc8O8c3RlZW0gdGVoYXNlIHZhaWtlc2VhZGV0ZWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIzNjY1MzgwNDkyNjMzOTEwMjI2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHPDvHN0ZWVtaSB0ZWhhc2VzZWFkZWQgdMOkaWVsaWt1bHQgbMOkaHRlc3RhZGEsIGt1c3R1dGFkZXMga8O1aWsgYW5kbWVkLCBrb25maWd1cmF0c2lvb25pIGphIGluc3RhbGxpdHVkIHJha2VuZHVzZWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lIiBtc2dpZD0iMjAyMTYxNDgyOTU5MTc3NTY0NiI+ImtlbGxhYWphIG3DpMOkcmFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTg5NjM0MTQzODE1MTE1Mjg4MSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB0YWh2ZWxhcnZ1dGkga2VsbGFhZWdhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODU1NzAyNzMwNzM4MDIwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHRlbGVmb25pIGtlbGxhYWVnYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWVab25lIiBtc2dpZD0iMjk0NTA3OTgwMTAxMzA3NzM0MCI+Im3DpMOkcmEgYWphdsO2w7ZuZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHRhaHZlbGFydnV0aSBhamF2w7bDtm5kaXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDk5OTQzNDg4NDM2NjMzMzk4Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHRlbGVmb25pIGFqYXbDtsO2bmRpdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjQ4MjkyNjIzNDk2OTEzODY5ODYiPiJBY2NvdW50TWFuYWdlclNlcnZpY2VcJ2luYSB0ZWd1dHNlbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjE5NDg0NTU1NTIzMzM2MTU5NTQiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaGVsaXN0YWRhIGtvbnRvIGF1dGVudGlqYXRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBY2NvdW50cyIgbXNnaWQ9IjEwODY3OTU0Njc3NjAxMjIxMTQiPiJsZWlka2Ugc2VhZG1lc3Qga29udG9kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3NDE0OTY1MzQ3Njk2NjAwMjciPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaGFua2lkYSB0YWh2ZWxhcnZ1dGlsZSB0ZWFkYW9sZXZhaWQga29udG9sb2VuZGVpZC4gU2VlIHbDtWliIGjDtWxtYXRhIG1pcyB0YWhlcyBrb250b3NpZCwgbWlsbGUgb24gbG9vbnVkIHRlaWUgaW5zdGFsbGl0dWQgcmFrZW5kdXNlZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaGFua2lkYSB0ZWxlZm9uaWxlIHRlYWRhb2xldmFpZCBrb250b2xvZW5kZWlkLiBTZWUgdsO1aWIgaMO1bG1hdGEgbWlzIHRhaGVzIGtvbnRvc2lkLCBtaWxsZSBvbiBsb29udWQgdGVpZSBpbnN0YWxsaXR1ZCByYWtlbmR1c2VkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4ibG9vZ2Uga29udG9kIGphIG3DpMOkcmFrZSBwYXJvb2xpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTQ3MjEyNDI5NjkwODk3NzI2MCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBrYXN1dGFkYSBrb250b2hhbGR1cmkga29udG8gYXV0ZW50aWphIHbDtWltYWx1c2ksIHNoIGx1dWEga29udG9zaWQgbmluZyBoYW5raWRhIGphIG3DpMOkcmF0YSBwYXJvb2xlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4ibGlzYWdlIHbDtWkgZWVtYWxkYWdlIGtvbnRvc2lkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI4Njk4Mjk1NjI1NDg4MjkyNTA2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHRlaGEgdG9pbWluZ3VpZCwgbmFndSBrb250b2RlIGxpc2FtaW5lIGphIGVlbWFsZGFtaW5lIG5pbmcgbmVuZGUgcGFyb29saWRlIGt1c3R1dGFtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSIyMzU0ODEzOTYxNjM4Nzc2NDIiPiJrYXN1dGFnZSBzZWFkbWVzIG9sZXZhaWQga29udG9zaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2VDcmVkZW50aWFscyIgbXNnaWQ9Ijc5ODQyMjcxNDc0MDMzNDY0MjIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdGFvdGxlZGEgYXV0ZW50aW1pc2UgbHViYXNpZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjQ5NTEwMjc5NjQzNDg5NzQ3NzMiPiJ2YWFkYWtlIHbDtXJndcO8aGVuZHVzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiJMdWJhYiByYWtlbmR1c2VsIHZhYWRhdGEgdGVhdmV0IHbDtXJndcO8aGVuZHVzdGUga29odGEsIG7DpGl0ZWtzIHNlZGEsIG1pbGxpc2VkIHbDtXJndWQgb24gb2xlbWFzIGphIMO8aGVuZGF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjgwMTg3NTgxMzY0MDQzMjM2NTgiPiJ0w6RpZWxpayBqdXVyZGVww6TDpHMgdsO1cmd1bGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjM0MDMwNjIxODc3Nzk3MjQxODUiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHV1YSB2w7VyZ3VwZXNhc2lkIGphIGthc3V0YWRhIGtvaGFuZGF0dWQgdsO1cmd1cHJvdG9rb2xsZS4gQnJhdXNlciBqYSB0ZWlzZWQgcmFrZW5kdXNlZCBhbm5hdmFkIHZhaGVuZGlkIGFuZG1ldGUgc2FhdG1pc2VrcyBJbnRlcm5ldHRpLCBuaWkgZXQgc2VkYSBsdWJhIGVpIG9sZSB2YWphIGFuZG1ldGUgc2FhdG1pc2VrcyBJbnRlcm5ldHRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUwNTY2MDE1OTY3NTc1MTg5NiI+InbDtXJndXNlYWRldGUgamEgLWxpaWtsdXNlIG11dXRtaW5lL2jDtWl2YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTMzMzc5ODg4NjQxMjcxNDE5MyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB2w7VyZ3VzZWFkZWlkIG5pbmcgcGVhdGFkYSBqYSBrb250cm9sbGlkYSBrb2d1IHbDtXJndWxpaWtsdXN0LCBuw6RpdGVrcyBtdXV0YSBtaXMgdGFoZXMgQVBOLWkgcHVodmVyc2VydmVyaXQgamEgcG9ydGkuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHbDtXJndXBha2V0dGUgasOkbGdpZGEsIMO8bWJlciBzdXVuYXRhIHbDtWkgbXV1dGEgdGVpZSB0ZWFkbWF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9Ijk1ODg4NDI5MTQ1NDMyNzMwOSI+Im11dWRhIHbDtXJndcO8aGVuZHV2dXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB2w7VyZ3XDvGhlbmR1dnVzZSBvbGVrdXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjU5NTI1ODQ5NjQzNzMwMTc5NjAiPiJKYWdhdHVkIMO8aGVuZHV2dXNlIG11dXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSIxNTI0NDQxMzQ0NDEyMzE5NzgwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIGphZ2F0dWQgdsO1cmd1IMO8aGVuZHV2dXNlIG9sZWt1dC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjE0MDA2NjYwMTI2NzE2NDg3NDEiPiJtdXVkYSB0YXVzdGFhbmRtZXRlIGthc3V0dXNzZWFkZWlkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iNTM0NzcyOTU3ODQ2ODc0NDM3OSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB0YXVzdGFhbmRtZXRlIGthc3V0dXNlIHNlYWRlaWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MjAyMDEyOTQ5MjQ3MDQwMDExIj4idmFhZGFrZSBXaUZpLcO8aGVuZHVzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUwMDI3OTgwNzczODc4MDM3MjYiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdmFhZGF0YSB0ZWF2ZXQgV2lGaS12w7VyZ3Uga29odGEsIG7DpGl0ZWtzIMO8aGVuZGF0dWQgV2lGaS1zZWFkbWV0ZSBuaW1lc2lkIGphIHNlZGEsIGthcyBXaUZpIG9uIGx1YmF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI2NTUwNjQxMTg4NzQ5MTI4MDM1Ij4iw7xoZW5kYWdlIGphIGthdGtlc3RhZ2Ugw7xoZW5kdXMgV2lGaS1nYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjcxMzc5NTAyOTczODYxMjc1MzMiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHV1YSBqYSBrYXRrZXN0YWRhIMO8aGVuZHVzZSBXaUZpLXDDpMOkc3VwdW5rdGlkZWdhIG5pbmcgdGVoYSBtdXVkYXR1c2kgc2VhZG1lIGtvbmZpZ3VyYXRzaW9vbmlzIFdpRmktdsO1cmt1ZGVzc2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4ibHViYSBXaUZpIG11bHRpZWRhc3R1c3Zhc3R1dsO1dHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdmFzdHUgdsO1dHRhIHBha2V0dGUsIG1pcyBvbiBzYWFkZXR1ZCBrw7Vpa2lkZWxlIFdpRmktdsO1cmd1Z2Egw7xoZW5kYXR1ZCBzZWFkbWV0ZWxlLCBtaXMga2FzdXRhdmFkIG11bHRpZWRhc3R1c2UgYWFkcmVzc2UsIG1pdHRlIGFpbnVsdCB0ZWllIHRhaHZlbGFydnV0aXQuIFNlZSB2w7V0YWIgcm9oa2VtIGVuZXJnaWF0IGt1aSBtaXR0ZW11bHRpZWRhc3R1c2UgcmXFvmlpbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUxOTQ5NzA2MDI1MzQ5OTI2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHZhc3R1IHbDtXR0YSBwYWtldHRlLCBtaXMgb24gc2FhZGV0dWQga8O1aWtpZGVsZSBXaUZpLXbDtXJndWdhIMO8aGVuZGF0dWQgc2VhZG1ldGVsZSwgbWlzIGthc3V0YXZhZCBtdWx0aWVkYXN0dXNlIGFhZHJlc3NlLCBtaXR0ZSBhaW51bHQgdGVpZSB0ZWxlZm9uaS4gU2VlIHbDtXRhYiByb2hrZW0gZW5lcmdpYXQga3VpIG1pdHRlbXVsdGllZGFzdHVzZSByZcW+aWltLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoQWRtaW4iIG1zZ2lkPSI2MDA2OTY3MzczOTM1OTI2NjU5Ij4ianV1cmRlcMOkw6RzIEJsdWV0b290aGkg4oCL4oCLc2VhZGV0ZWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY5MjExNzc0NzE3NDg4ODIxMzciPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc2VhZGlzdGFkYSBrb2hhbGlra3UgQmx1ZXRvb3RoLXRhaHZlbGFydnV0aXQgbmluZyBsZWlkYSBqYSBzaWR1ZGEgc2VkYSBrYXVnc2VhZG1ldGVnYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MzE2ODIxNTkzMzE1NDIxMzciPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgc2VhZGlzdGFkYSBrb2hhbGlra3UgQmx1ZXRvb3RoLXRlbGVmb25pIG5pbmcgbGVpZGEgamEgc2lkdWRhIHNlZGEga2F1Z3NlYWRtZXRlZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+IldpTUFYLWlnYSDDvGhlbmR1c2UgbG9vbWluZSBqYSDDvGhlbmR1c2Uga2F0a2VzdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbcOkw6RyYXRhLCBrYXMgV2lNQVggb24gbHViYXR1ZCwgamEgdmFhZGF0YSB0ZWF2ZXQga8O1aWtpZGUgw7xoZW5kYXR1ZCBXaU1BWC12w7Vya3VkZSBrb2h0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpbWF4U3RhdGUiIG1zZ2lkPSIyNDA1MDQyMjY3MTMxNDk2NTc5Ij4iV2lNQVgtaSBvbGVrdSBtdXV0bWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMxNTY0NTY1MDQwODQyMDE4MDUiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHV1YSBqYSBrYXRrZXN0YWRhIHRhaHZlbGFydnV0aSDDvGhlbmR1c2UgV2lNQVgtaSB2w7Vya3VkZWdhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHV1YSBqYSBrYXRrZXN0YWRhIHRlbGVmb25pIMO8aGVuZHVzZSBXaU1BWC1pIHbDtXJrdWRlZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGgiIG1zZ2lkPSI2MTI3NzY5MzM2MzM5Mjc2ODI4Ij4ic2lkdWdlIEJsdWV0b290aGkgc2VhZG1ldGVnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB2YWFkYXRhIHRhaHZlbGFydnV0aSBCbHVldG9vdGgta29uZmlndXJhdHNpb29uaSBuaW5nIGx1dWEgamEgaGVha3Mga2lpdGEgw7xoZW5kdXNpIHNlb3R1ZCBzZWFkbWV0ZWdhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdmFhZGF0YSB0ZWxlZm9uaSBCbHVldG9vdGgta29uZmlndXJhdHNpb29uaSBuaW5nIGx1dWEgamEgaGVha3Mga2lpdGEgw7xoZW5kdXNpIHNlb3R1ZCBzZWFkbWV0ZWdhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbmZjIiBtc2dpZD0iNDQyMzM1MTI3NDc1Nzg3Njk1MyI+ImzDpGhpdsOkbGphc2lkZSBqdWh0aW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19uZmMiIG1zZ2lkPSI3MTIwNjExODE5NDAxNzg5OTA3Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHN1aGVsZGEgbMOkaGl2w6RsamFzaWRlIChORkMpIG3DpHJnZW5kaXRlLCBrYWFydGlkZSBqYSBsdWdlcml0ZWdhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iMzU5ODQ5NjMwMTQ4NjQzOTI1OCI+ImtlZWxha2UgZWtyYWFuaWx1a2siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSI2MDM0MjAzMDY1MDc3MTIyOTkyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGtlZWxhdGEga2xhaHZpbHVrdSBqYSBtdXUgc2VvdHVkIHBhcm9vbGkgdHVydmFsaXN1c2UuIE7DpGl0ZWtzIGtlZWxhYiB0ZWxlZm9uIGtsYWh2aWx1a3Ugc2lzc2V0dWxldmEga8O1bmUgdmFzdHV2w7V0bWlzZWwgamEgbHViYWIga2xhaHZpbHVrdSB1dWVzdGksIGt1aSBrw7VuZSBvbiBsw7VwZXRhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFN5bmNTZXR0aW5ncyIgbXNnaWQ9IjYyMDE4MTAwMDgyMzA1MDMwNTIiPiJsb2Ugc8O8bmtyb29uaW1pc3NlYWRlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iMjcwNjc0NTY3NDU2OTY3ODY0NCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdWdlZGEga29udG8gc8O8bmtyb29uaW1pc3NlYWRlaWQuIE7DpGl0ZWtzIHbDtWliIHNlZSBtw6TDpHJhdGEsIGthcyByYWtlbmR1cyBJbmltZXNlZCBvbiBrb250b2dhIHPDvG5rcm9vbml0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9IjU0MDg2OTQ4NzU3OTM5NDUzMTQiPiJsw7xsaXRhZ2Ugc8O8bmtyb29uaW1pbmUgc2lzc2UgamEgdsOkbGphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI4OTU2MjYyNTkxMzA2MzY5ODY4Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIGtvbnRvIHPDvG5rcm9vbmltaXNzZWFkZWlkLiBOw6RpdGVrcyBzYWFiIHNlZGEga2FzdXRhZGEsIGV0IGx1YmFkYSByYWtlbmR1c2UgSW5pbWVzZWQgc8O8bmtyb29uaW1pbmUga29udG9nYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSI3Mzk2NTc3NDUxMzYwMjAyNDQ4Ij4ibG9lIHPDvG5rcm9vbmltaXNzdGF0aXN0aWthdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSIxNTEwMTQzNzYxNzU3NjA2MTU2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSBrb250byBzw7xua3Jvb25pbWlzc3RhdGlzdGlrYXQsIHNoIHPDvG5rcm9vbmltaXNzw7xuZG11c3RlIGFqYWx1Z3UgamEgc8O8bmtyb29uaXR1ZCBhbmRtZXRlIGh1bGthLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjQ3NTY2MDk2MzcwNTMzNTMzMTgiPiJsb2UgdGVsbGl0dWQga2FuYWxlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNTU1NzA1ODkwNzkwNjE0NDUwNSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBzYWFkYSDDvGtzaWthc2p1IHByYWVndSBzw7xua3Jvb25pdGF2YXRlIHZvb2d1ZGUga29odGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjkwMTUyNDYzMjU0MDgyMDkyOTYiPiJraXJqdXRhIHRlbGxpdHVkIGthbmFsZWlkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI2OTI4OTMwMTg4ODI2MDg5NDEzIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHRlaWUgcHJhZWd1IHPDvG5rcm9vbml0dWQgdm9vZ2UuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIG11dXRhIHRlaWUgc8O8bmtyb29uaXR1ZCB2b29nZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNDEwNzEwMTUyNTc0NjAzNTcxOCI+Imx1Z2VnZSB0ZXJtaW5laWQsIG1pcyB0ZSBzw7VuYXN0aWtrdSBsaXNhc2l0ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNjU5NjE0NjAwMzM4OTA0MjQzIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGx1Z2VkYSBrw7Vpa2kgc8O1bnUsIG5pbWVzaWQgamEgZnJhYXNlLCBtaWxsZSBrYXN1dGFqYSBvbiBrYXN1dGFqYSBzw7VuYXJhYW1hdHVzc2Ugc2FsdmVzdGFudWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4ic8O1bmFkZSBsaXNhbWluZSBrYXN1dGFqYSBtw6TDpHJhdGxldHVkIHPDtW5hc3Rpa2t1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODE4NTM4NTcxNjI1NTA2NTI5MSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBraXJqdXRhZGEga2FzdXRhamFzw7VuYXN0aWtrdSB1dXNpIHPDtW51LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4ia2FpdHN0dWQgc2FsdmVzdHVzcnV1bWkganV1cmRlcMOkw6RzdSBrYXRzZXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgyMzUzNDE1MTU2MDU1NTk2NzciPiJrYWl0c3R1ZCBzYWx2ZXN0dXNydXVtaSBqdXVyZGVww6TDpHN1IGthdHNldGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNjQyNDczMjkyMzQ4MTMyMDcyIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHRlc3RpZGEgbHViYSBVU0Itc2FsdmVzdHVzZWtzLCBtaXMgb24gc2FhZGF2YWwgdHVsZXZhc3RlcyBzZWFkbWV0ZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU5MTQ0MDI2ODQ2ODU4NDg4MjgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga2F0c2V0YWRhIFNELWthYXJkaSBsdWJhLCBtaXMgb24gc2FhZGF2YWwgdHVsZXZhc3RlbCBzZWFkbWV0ZWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4NDg1OTc5MDYyMjU0NjY2NzQ4Ij4ibXV1dGtlLCBrdXN0dXQuIFVTQi1ydXVtaSBzaXN1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiJTRC1rYWFyZGkgc2lzdSBtdXV0bWluZSB2w7VpIGt1c3R1dGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBraXJqdXRhZGEgVVNCLW3DpGx1c2VhZG1lbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MzM3NDE3NzkwOTM2NjMyMDkwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGtpcmp1dGFkYSBTRC1rYWFyZGlsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1OTgzOTE5OTcwNjg3OTAxNSI+InNpc2Vtw6RsdSBzaXN1IG11dXRtLi9rdXN0dXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWVkaWFTdG9yYWdlV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTg5MTYwNTk3Njk4NTI5MTg1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHNpc2VtaXNlIGFuZG1la2FuZGphIHNpc3UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3ODMxODU5ODQ0ODg0OTgyOSI+ImRva3VtZW5kaSB0YWxsZXR1c2UgaGFsZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg3MDQzMjMxNzY5MTQxMjE0ODQiPiJMdWJhYiByYWtlbmR1c2VsIGhhbGxhdGEgZG9rdW1lbmRpIHRhbGxldGFtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iODE1MDYxMzgyMzkwMDQ2MDU3NiI+Imp1dXJkZXDDpMOkcyB2w6RsaXNtw6RsdXNlYWRtZWxlIChrw7Vpa2lkZWxlIGthc3V0YWphdGVsZSkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSIzMjE1MjA4MzU3NDE1ODkxMzIwIj4iVsO1aW1hbGRhYiByYWtlbmR1c2Uga8O1aWtpZGVsIGthc3V0YWphdGVsIHDDtsO2cmR1ZGEgdsOkbGlzbcOkbHVzZWFkbWUgcG9vbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTY1NjQ4NzI2NDgxOTY2OTgyNCI+Imp1dXJkZXDDpMOkcyB2YWhlbcOkbHUgZmFpbGlzw7xzdGVlbWlsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NTc4OTY3NjQyMjY1NTUwOTU1Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHZhaGVtw6RsdSBmYWlsaXPDvHN0ZWVtaSBsdWdlZGEgamEga2lyanV0YWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlX3NpcCIgbXNnaWQ9IjU5ODY5NTIzNjI3OTU4NzA1MDIiPiJJbnRlcm5ldGkta8O1bmVkZSB0ZWdlbWluZS92YXN0dXbDtXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlX3NpcCIgbXNnaWQ9IjQ3MTc2MzIwMDAwNjI2NzQyOTQiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwga2FzdXRhZGEgU0lQLXRlZW51c3QgSW50ZXJuZXRpLWvDtW5lZGUgdmFsaW1pc2Vrcy92YXN0dXbDtXRtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc4NjI1OTMyODM2MTE0OTMyMzIiPiJ2w7VyZ3VrYXN1dHVzZSBhamFsb28gbHVnZW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc2ODkwNjA3NDk4MTkxMjY0NzIiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgbHVnZWRhIHbDtXJndWthc3V0dXNlIGFqYWx1Z3UgdGVhdHVkIHbDtXJrdWRlIGphIHJha2VuZHVzdGUgcHVodWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iMjU2MjA1MzU5MjMzOTg1OTk5MCI+InbDtXJndWVlc2tpcmphZGUgaGFsZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9Ijc1Mzc1ODY3NzE1NTkzNzA2NjgiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgaGFsbGF0YSB2w7VyZ3VlZXNraXJqdSBqYSBtw6TDpHJhdGxlZGEgcmFrZW5kdXNlc3BldHNpaWZpbGlzaSByZWVnbGVpZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTA4ODIxNzMwOTA4ODcyOTY1MCI+InbDtXJndWthc3V0dXNlIGFydmVzdGFtaXNlIG11dXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1NDQzNDEyODY2NzQ2MTk4MTIzIj4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHbDtXJndWthc3V0dXNlIGxvZW5kYW1pc3QgcmFrZW5kdXN0ZSBzdWh0ZXMuIE1pdHRlIGthc3V0YWRhIHRhdmFyYWtlbmR1c3RlIHB1aHVsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSIzNjU4NTI3MjE0OTE0OTU5NzQ5Ij4ic29rbGkgbcOkcmtpZGUgbXV1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9Ijc2NTU1Njg0MzM2OTYzNTY1NzgiPiJMdWJhYiByYWtlbmR1c2VsIG11dXRhIG1hcnNydXV0aW1pc2VrcyBzb2tsaSBtw6Rya2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI3NjczNDE2NDg3ODczNDMyMjY4Ij4ianV1cmRlcMOkw6RzdSBtw6RyZ3VhbmRlZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI0NTg0NTc3NDI2ODM0MzEzODciPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdHV1YSwga29udHJvbGxpZGEgamEga3VzdHV0YWRhIG3DpHJndWFuZGVpZCwgc2ggbmVpZCwgbWlsbGUgb24gcG9zdGl0YW51ZCB0ZWlzZWQgcmFrZW5kdXNlZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI3MDU3NzY0NzQyMjExNjU2NjU0Ij4ic2VvIG3DpHJndWFubmV0ZSBrdXVsYW1pc3RlZW51c2VnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI5ODU2OTc5MTg1NzY5MDI5ODYiPiJWw7VpbWFsZGFiIG9tYW5pa3VsIHNpZHVkYSBtw6RyZ3Vhbm5ldGUga3V1bGFtaXN0ZWVudXNlIMO8bGVtaXNlIHRhc2VtZSBrYXN1dGFqYWxpaWRlc2UuIFNlZGEgZWkgdG9oaWtzIHRhdmFyYWtlbmR1c3RlIHB1aHVsIGt1bmFnaSB2YWphIG9sbGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnZva2VDYXJyaWVyU2V0dXAiIG1zZ2lkPSIzNjk5NjAwODMzOTc1MTE3NDc4Ij4ib3BlcmFhdG9yaXBvb2xzZSBrb25maWd1cmF0c2lvb25pcmFrZW5kdXNlIGFrdGl2ZWVyaW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnZva2VDYXJyaWVyU2V0dXAiIG1zZ2lkPSI0MTU5NTQ5MTUyNTI5MTExOTIwIj4iTHViYWIgb21hbmlrdWwgYWt0aXZlZXJpZGEgb3BlcmFhdG9yaXBvb2xzZSBrb25maWd1cmF0c2lvb25pcmFrZW5kdXNlLiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjQ0OTc0MjA3Mjg4NTc1ODU3OTEiPiJQYXJvb2xpIHJlZWdsaXRlIG3DpMOkcmFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19saW1pdFBhc3N3b3JkIiBtc2dpZD0iMzI1MjExNDIwMzkxOTUxMDM5NCI+IktvbnRyb2xsaWdlIGVrcmFhbmlsdWt1IGF2YW1pc2UgcGFyb29saWRlIHBpa2t1c3QgamEgdMOkaGVtw6Rya2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dhdGNoTG9naW4iIG1zZ2lkPSI5MTQxMzA2NDY5NDIxOTk1MDMiPiJFa3JhYW5pIGF2YW1pc2thdHNlZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzIxNTcyOTI5NDIxNTA3MDA3MiI+IkrDpGxnaWIgZWtyYWFuaSBhdmFtaXNlbCB2YWxlc3RpIHNpc2VzdGF0dWQgcGFyb29saWRlIGFydnUgamEgbHVrdXN0YWIgdGFodmVsYXJ2dXRpIHbDtWkga3VzdHV0YWIga8O1aWsgc2VsbGUgYW5kbWVkLCBrdWkgdmFsZSBwYXJvb2wgc2lzZXN0YXRha3NlIGxpaWdhIHBhbGp1IGtvcmRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MTIzMjMwOTE4NDY3NjEwNzMiPiJKw6RsZ2liIGVrcmFhbmkgYXZhbWlzZWwgdmFsZXN0aSBzaXNlc3RhdHVkIHBhcm9vbGlkZSBhcnZ1IGphIGx1a3VzdGFiIHRlbGVmb25pIHbDtWkga3VzdHV0YWIga8O1aWsgc2VsbGUgYW5kbWVkLCBrdWkgdmFsZSBwYXJvb2wgc2lzZXN0YXRha3NlIGxpaWdhIHBhbGp1IGtvcmRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9yZXNldFBhc3N3b3JkIiBtc2dpZD0iMjYyMDA3NzE5MTI0MjY4ODk1NSI+IkVrcmFhbmlsdWt1IHBhcm9vbGkgbXV1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSI2MDU5NjM5NjIzMDE5MDQ0NTgiPiJFa3JhYW5pbHVrdSBwYXJvb2xpIG11dXRtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9mb3JjZUxvY2siIG1zZ2lkPSIyMjc0MDg1Mzg0NzA0MjQ4NDMxIj4iRWtyYWFuaSBsdWt1c3RhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZm9yY2VMb2NrIiBtc2dpZD0iMTE0MTc5NzU4ODQwMzgyNzEzOCI+Ik3DpMOkcmFrZSwga3VpZGFzIGphIG1pbGxhbCBla3JhYW4gbHVrdXN0dWIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dpcGVEYXRhIiBtc2dpZD0iMzkxMDU0NTQ0Njc1ODYzOTcxMyI+IkvDtWlraWRlIGFuZG1ldGUga3VzdHV0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzA2MTg0MDk2MDY3NzU2ODc2Ij4iS3VzdHV0YWdlIHRhaHZlbGFydnV0aSBhbmRtZWQgaG9pYXRhbWF0YSwgbMOkaHRlc3RhZGVzIGFydnV0aSB0ZWhhc2VhbmRtZXRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUwOTY4OTU2MDQ1NzQxODgzOTEiPiJLdXN0dXRhIHRlbGVmb25pYW5kbWVkIGhvaWF0dXNldGEsIGzDpGh0ZXN0YWRlcyB0ZWxlZm9uaSB0ZWhhc2VhbmRtZXRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iMjc4NDgyODI5Mzc0Nzc5MTQ0NiI+Ik3DpMOkcmEgc2VhZG1lIGdsb2JhYWxuZSBwdWh2ZXJzZXJ2ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+IkVlc2tpcmphZGUgbHViYW1pc2UgYWphbCBrYXN1dGF0YXZhIHNlYWRtZSBnbG9iYWFsc2UgcHVodmVyc2VydmVyaSBtw6TDpHJhbWluZS4gQWludWx0IGVzaW1lc2Ugc2VhZG1lIGFkbWluaXN0cmFhdG9yIG3DpMOkcmFiIHTDtWh1c2EgZ2xvYmFhbHNlIHB1aHZlcnNlcnZlcmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iODg1Mjc5MTUxODQ3MjU0MDU2Ij4iRWtyYWFuaWx1a3UgcGFyb29saSBhZWd1bWlzZSBtw6TDpHJhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSIxNzI5NzI1MjI2MzE0NjkxNTkxIj4iTcOkw6RyYWtlIGVrcmFhbmlsdWt1IHBhcm9vbGkgbXV1dG1pc3NhZ2VkdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSI4OTAxMzI2MTk5OTA5MTMyOTE1Ij4iU2FsdmVzdGFtaXNlIGtyw7xwdC4gbcOkw6RyYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSIyNjM3NzMyMTE1MzI1MzE2OTkyIj4iTsO1dWEgc2FsdmVzdGF0dWQgcmFrZW5kdXNlIGFuZG1ldGUga3LDvHB0ZWVyaW1pc3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSI2Mzk1MzAxMDIzMTUyMjk3ODI2Ij4iS2VlbGEga2FhbWVyYWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSIyMzA2MzQ5MDQyODM0NzU0NTk3Ij4iVsOkbHRpZ2Ugc2VhZG1lIGvDtWlnaSBrYWFtZXJhdGUga2FzdXRhbWlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIyNjYzMjkxMDQ1NDI2Mzg4MDIiPiJLbGFodmlsdWt1IGZ1bmt0cy4ga2VlbGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjM0NjcwODIyNzIxODY1MzQ2MTQiPiJUYWtpc3RhZ2Uga2xhaHZpbHVrdSBtw7VuZSBmdW5rdHNpb29uaSBrYXN1dGFtaXN0LiI8L3N0cmluZz4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJwaG9uZVR5cGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iODkwMTA5ODMzNjY1ODcxMDM1OSI+IktvZHUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4Njk5MjM2NTA1MjcxMzY2MTUiPiJNb2JpaWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI3ODk3NTQ0NjU0MjQyODc0NTQzIj4iVMO2w7YiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxMTAzNjAxNDMzMzgyMTU4MTU1Ij4iVMO2w7ZmYWtzIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTczNTE3NzE0NDk0ODMyOTM3MCI+IktvZHVmYWtzIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjAzODc4Njc0NDc3MjA3Mzk0Ij4iUGlpcGFyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTY1MDgyNDI3NTE3NzkzMTYzNyI+Ik11dSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiJLb2hhbmRhdHVkIjwvaXRlbT4KLSAgPC9zdHJpbmctYXJyYXk+Ci0gIDxzdHJpbmctYXJyYXkgbmFtZT0iZW1haWxBZGRyZXNzVHlwZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI4MDczOTk0MzUyOTU2MTI5MTI3Ij4iS29kdSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjcwODQyMzczNTY2MDI2MjU2MDQiPiJUw7bDtiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjExMTIwNDQ0MTA2NTkwMTEwMjMiPiJNdXUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyMzc0OTEzOTUyODcwMTEwNjE4Ij4iS29oYW5kYXR1ZCI8L2l0ZW0+Ci0gIDwvc3RyaW5nLWFycmF5PgotICA8c3RyaW5nLWFycmF5IG5hbWU9InBvc3RhbEFkZHJlc3NUeXBlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY4ODAyNTc2MjY3NDAwNDcyODYiPiJLb2R1IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTYyOTE1Mzk1NjA0NTEwOTI1MSI+IlTDtsO2IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNDk2NjYwNDI2NDUwMDM0MzQ2OSI+Ik11dSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjQ5MzI2ODI4NDc1OTUyOTkzNjkiPiJLb2hhbmRhdHVkIjwvaXRlbT4KLSAgPC9zdHJpbmctYXJyYXk+Ci0gIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1BZGRyZXNzVHlwZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIxNzM4NTg1MTk0NjAxNDc2Njk0Ij4iS29kdSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjEzNTk2NDQ1NjU2NDczODM3MDgiPiJUw7bDtiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc4Njg1NDk0MDEwNTM2MTU2NzciPiJNdXUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMTQ1MTE4OTQ0NjM5ODY5ODA5Ij4iS29oYW5kYXR1ZCI8L2l0ZW0+Ci0gIDwvc3RyaW5nLWFycmF5PgotICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yZ2FuaXphdGlvblR5cGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzU0NjMzNTYxMjE4OTExNTYxNSI+IlTDtsO2IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNDM3ODA3NDEyOTA0OTUyMDM3MyI+Ik11dSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM0NTUwNDc0Njg1ODM5NjUxMDQiPiJLb2hhbmRhdHVkIjwvaXRlbT4KLSAgPC9zdHJpbmctYXJyYXk+Ci0gIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1Qcm90b2NvbHMiPgotICAgIDxpdGVtIG1zZ2lkPSI4NTk1MjYxMzYzNTE4NDU5NTY1Ij4iQUlNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNzM5MDQ3MzYyODI3NTQ5MDcwMCI+IldpbmRvd3MgTGl2ZSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc4ODI4NzcxMzQ5MzE0NTgyMTciPiJZYWhvbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwMzUzNzYzMTMyMDA1ODUyNDIiPiJTa3lwZSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc1MzIzNjMxNzg0NTk0NDQ5NDMiPiJRUSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM3MTM0NDEwMzQyOTk2NjA3NDkiPiJHb29nbGUgVGFsayI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI1MDY4NTczMTI3MTg2MzA4MjMiPiJJQ1EiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxNjQ4Nzk3OTAzNzg1Mjc5MzUzIj4iSmFiYmVyIjwvaXRlbT4KLSAgPC9zdHJpbmctYXJyYXk+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDdXN0b20iIG1zZ2lkPSIxNjQ0NzM4MDU5MDUzMzU1ODIwIj4iS29oYW5kYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUhvbWUiIG1zZ2lkPSIyNTcwOTIzNDYzMDMzOTg1ODg3Ij4iS29kdW5lIHRlbGVmb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNb2JpbGUiIG1zZ2lkPSI2NTAxNDYzNTU3NzU0NzUxMDM3Ij4iTW9iaWlsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29yayIgbXNnaWQ9Ijg4NjM5Mzk2NjcwNTk5MTE2MzMiPiJUw7bDtmtvaGEgdGVsZWZvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUZheFdvcmsiIG1zZ2lkPSIzNTE3NzkyMTYwMDA4ODkwOTEyIj4iVMO2w7Zrb2hhIGZha3NpbnVtYmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4SG9tZSIgbXNnaWQ9IjIwNjcyNjU5NzIzMjI5NzE0NjciPiJLb2R1bmUgZmFrc2ludW1iZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVQYWdlciIgbXNnaWQ9Ijc1ODIzNTk5NTUzOTQ5MjE3MzIiPiJQaWlwYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVPdGhlciIgbXNnaWQ9IjE1NDQ0MjU4NDc4Njg3NjU5OTAiPiJNdXUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDYWxsYmFjayIgbXNnaWQ9IjI3MTIxNzUyMDMwNjU2NzgyMDYiPiJUYWdhc2loZWxpc3R1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNhciIgbXNnaWQ9Ijg3MzgzNjA2ODk2MTY3MTY5ODIiPiJBdXRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ29tcGFueU1haW4iIG1zZ2lkPSI1NDA0MzQzNTY0NjE0Nzg5MTYiPiJFdHRldsO1dHRlIMO8bGR0ZWxlZm9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlSXNkbiIgbXNnaWQ9IjgwMjI0NTMxOTMxNzEzNzAzMzciPiJJU0ROIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTWFpbiIgbXNnaWQ9IjY3NjYxMzcwMTA2MjgzMjY5MTYiPiJQZWFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXJGYXgiIG1zZ2lkPSI4NTg3NjU3MTQ1MDcyNDQ2NTY1Ij4iVGVpbmUgZmFrcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVJhZGlvIiBtc2dpZD0iNDA5MzczODA3OTkwODY2NzUxMyI+IlJhYWRpb3RlbGVmb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVUZWxleCIgbXNnaWQ9IjMzNjc4Nzk5NTI0NzYyNTA1MTIiPiJUZWxla3NpbnVtYmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlVHR5VGRkIiBtc2dpZD0iODYwNjUxNDM3ODU4NTAwMDA0NCI+IlRUWSBUREQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrTW9iaWxlIiBtc2dpZD0iMTMxMTQyNjk4OTE4NDA2NTcwOSI+IlTDtsO2a29oYSBtb2JpaWx0ZWxlZm9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya1BhZ2VyIiBtc2dpZD0iNjQ5OTM4NzMxMjMxMTU3MDU2Ij4iVMO2w7Zrb2hhIHBpaXBhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjU1OTY3NzI2MzYxMjg1NjI4ODQiPiJBc3Npc3RlbnQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNbXMiIG1zZ2lkPSI3MjU0NDkyMjc1NTAyNzY4OTkyIj4iTU1TIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQ3VzdG9tIiBtc2dpZD0iNzgzNzU4NjE5ODQ1ODA3MzQwNCI+IktvaGFuZGF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVCaXJ0aGRheSIgbXNnaWQ9IjI4MTMzNzk4NDQyMTEzOTA3NDAiPiJTw7xubmlww6RldiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUFubml2ZXJzYXJ5IiBtc2dpZD0iMzg3Njc3OTc0NDUxODI4NDAwMCI+IkFhc3RhcMOkZXYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVPdGhlciIgbXNnaWQ9IjczODgxNzg5MzkwMTAxNDMwNzciPiJNdXUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVDdXN0b20iIG1zZ2lkPSI4NTI1OTYwMjU3ODA0MjEzODQ2Ij4iS29oYW5kYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUhvbWUiIG1zZ2lkPSI0NDkyMjcyMzYxNDA0MzM5MTkiPiJLb2R1bmUgZS1wb3N0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlV29yayIgbXNnaWQ9IjM1NDgwNTgwNTk2MDExNDk5NzMiPiJUw7bDtmtvaGEgZS1wb3N0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlT3RoZXIiIG1zZ2lkPSIyOTIzMDA4Njk1MjcyNjM5NTQ5Ij4iTXV1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlTW9iaWxlIiBtc2dpZD0iMTE5OTE5MDA1MzIxMTY2MjA1Ij4iTW9iaWlsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg5MDMyMDY5MDMwNjA0Nzk5MDIiPiJLb2hhbmRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUhvbWUiIG1zZ2lkPSI4MTY1NzU2OTc3MTg0NDgzMDk3Ij4iS29kdW5lIGFhZHJlc3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlV29yayIgbXNnaWQ9IjUyNjgxNzI3NzIzODc2OTQ0OTUiPiJUw7bDtmtvaGEgYWFkcmVzcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVPdGhlciIgbXNnaWQ9IjI3MjYxMTE5NjY2MjM1ODQzNDEiPiJNdXUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVR5cGVDdXN0b20iIG1zZ2lkPSIyMDc0MDI4NzU1NTI3ODI2MDQ2Ij4iS29oYW5kYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltVHlwZUhvbWUiIG1zZ2lkPSI2MjQxMTgxMDMyOTU0MjYzODkyIj4iS29kdW5lIElNLWFhZHJlc3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVR5cGVXb3JrIiBtc2dpZD0iMTM3MTQ4OTI5MDI0MjQzMzA5MCI+IlTDtsO2a29oYSBJTS1hYWRyZXNzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlT3RoZXIiIG1zZ2lkPSI1Mzc3MDA3NDk1NzM1OTE1NDc4Ij4iTXV1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEN1c3RvbSIgbXNnaWQ9IjY5MTk0NTM4MzY2MTg3NDk5OTIiPiJLb2hhbmRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEFpbSIgbXNnaWQ9IjcwNTAzNjA2MTIzNjgzODM0MTciPiJBSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTXNuIiBtc2dpZD0iMTQ0NTU2NTQ1NDIwNzY5NDQyIj4iV2luZG93cyBMaXZlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFlhaG9vIiBtc2dpZD0iODI3MTQzOTQwODQ2OTAyMTI3MyI+IllhaG9vIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFNreXBlIiBtc2dpZD0iOTAxOTI5Njc0NDYyMjgzMjk1MSI+IlNreXBlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFFxIiBtc2dpZD0iODg4NzQ4NDM3OTQ5NDExMTg4NCI+IlFRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEdvb2dsZVRhbGsiIG1zZ2lkPSI0OTM5MDIzMjExNDAyNzczMDQiPiJIYW5nb3V0cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xJY3EiIG1zZ2lkPSIxNTc0ODcwNDMzNjA2NTE3MzE1Ij4iSUNRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEphYmJlciIgbXNnaWQ9IjIyNzk5MTc2MzA4NzU3NzE3MjIiPiJKYWJiZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTmV0TWVldGluZyIgbXNnaWQ9IjgyODc2MjU2NTU5ODY4Mjc5NzEiPiJOZXRNZWV0aW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZVdvcmsiIG1zZ2lkPSIyOTI2ODg3MDUwNTM2Mzg3MiI+IlTDtsO2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZU90aGVyIiBtc2dpZD0iMzk1MTc4MTEzMTU3MDEyNDA4MiI+Ik11dSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVDdXN0b20iIG1zZ2lkPSIyMjU1MjM0MTUzNzIwODgzMjIiPiJLb2hhbmRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ3VzdG9tIiBtc2dpZD0iMzU0MjQwMzY3OTgyNzI5NzMwMCI+IktvaGFuZGF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVBc3Npc3RhbnQiIG1zZ2lkPSI2Mjc0MzM0ODI1MTk1Mzc5MDc2Ij4iQXNzaXN0ZW50Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQnJvdGhlciIgbXNnaWQ9Ijg3NTc5MTM1MDY3ODQwNjc3MTMiPiJWZW5kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ2hpbGQiIG1zZ2lkPSIxODkwNzQ2Mjc3Mjc2ODgxNjI2Ij4iTGFwcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZURvbWVzdGljUGFydG5lciIgbXNnaWQ9IjY5MDQ4MDcxMTIxMjExMjIxMzMiPiJFbHVrYWFzbGFuZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUZhdGhlciIgbXNnaWQ9IjUyMjgwMzQ2ODcwODIwNTA3MjUiPiJJc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVGcmllbmQiIG1zZ2lkPSI3MzEzMTA2NzYyNDgzMzkxMjYyIj4iU8O1YmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlTWFuYWdlciIgbXNnaWQ9IjYzNjU2Nzc4NjE2MTAxMzc4OTUiPiJIYWxkdXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNb3RoZXIiIG1zZ2lkPSI0NTc4NTcxMzUyOTYyNzU4MzA0Ij4iRW1hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFyZW50IiBtc2dpZD0iNDc1NTYzNTU2NzU2MjkyNTIyNiI+IlZhbmVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFydG5lciIgbXNnaWQ9IjcyNjY0OTAyODUxMjAyNjI3ODEiPiJQYXJ0bmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUmVmZXJyZWRCeSIgbXNnaWQ9IjEwMTU3MzA1OTg0NDEzNTUyNCI+IlZpaXRhczoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVSZWxhdGl2ZSIgbXNnaWQ9IjE3OTk4MTk5MzAwODU2MTAyNzEiPiJTdWd1bGFuZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVNpc3RlciIgbXNnaWQ9IjE3MzU5ODM1NTQ0NzkwNzY0ODEiPiLDlWRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlU3BvdXNlIiBtc2dpZD0iMzk0MTM2OTM5NDI4Njk4MTE3Ij4iQWJpa2Fhc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUN1c3RvbSIgbXNnaWQ9IjI0NzM1ODA1OTMxMTE1OTA5NDUiPiJLb2hhbmRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IktvZHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iVMO2w7YiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+Ik11dSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlNpc2VzdGFnZSBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlNpc2VzdGFnZSBQVUsta29vZCBqYSB1dXMgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSy1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJVdXMgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJQdXVkdXRhZ2UgcGFyb29saSBzaXNlc3RhbWlzZWtzIjwvZm9udD48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iQXZhbWlzZWtzIHNpc2VzdGFnZSBwYXJvb2wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJBdmFtaXNla3Mgc2lzZXN0YWdlIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iVmFsZSBQSU4ta29vZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iQXZhbWlzZWtzIHZhanV0YWdlIG1lbsO8w7xrbGFodmksIHNlZWrDpHJlbCBrbGFodmkgMC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbF9kaWFsb2dfbnVtYmVyX2Zvcl9kaXNwbGF5IiBtc2dpZD0iNjk2MTkyMTAzMTk1MDkwOTcwIj4iSMOkZGFhYmludW1iZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg5NjM4MzkyNDI1NjU2NTMxOTIiPiJUZWVudXMgcHV1ZHViLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2NyZWVuX2xvY2tlZCIgbXNnaWQ9IjcyODg0NDMwNzQ4MDY4MzI5MDQiPiJFa3JhYW4gbHVrdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2VuYWJsZWQiIG1zZ2lkPSI0NjE1NDA1MTYxNDEyNjA0OSI+IlZhanV0YWdlIGF2YW1pc2VrcyB2w7VpIGjDpGRhYWJpa8O1bmUgdGVnZW1pc2VrcyBtZW7DvMO8bnVwcHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSI2ODYyNjAwMjg3OTcxNTgzNjQiPiJWYWp1dGFnZSBhdmFtaXNla3MgbWVuw7zDvGtsYWh2aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNzQ3ODcwMzI1NDk2NDgxMDMwMiI+IkF2YW1pc2VrcyBqb29uaXN0YWdlIG11c3RlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZW1lcmdlbmN5X2NhbGwiIG1zZ2lkPSI1MzQ3NjMzNzg0NDAxMjg1MjI1Ij4iSMOkZGFhYmlrw7VuZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcmV0dXJuX3RvX2NhbGwiIG1zZ2lkPSI1MjQ0MjU5Nzg1NTAwMDQwMDIxIj4iS8O1bmUganV1cmRlIHRhZ2FzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9jb3JyZWN0IiBtc2dpZD0iOTAzOTAwODY1MDM2MjI2MTIzNyI+IsOVaWdlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl93cm9uZyIgbXNnaWQ9IjQzMTc5NTUwMTQ5NDgxMDg3OTQiPiJQcm9vdmlnZSB1dWVzdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Bhc3N3b3JkX3dyb25nIiBtc2dpZD0iNTczNzgxNTM5MzI1MzE2NTMwMSI+IlByb292aWdlIHV1ZXN0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiJNYWtzaW1hYWxuZSB0ZWVudXNlZ2EgRmFjZSBVbmxvY2sgYXZhbWlzZSBrYXRzZXRlIGFydiBvbiDDvGxldGF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MDU3NzYyODI4MzU1NTcyMzE1Ij4iTGFhZGltaW5lLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9jaGFyZ2VkIiBtc2dpZD0iMzIxNjM1NzQ1Njg0MDYwNjI0Ij4iTGFldHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9iYXR0ZXJ5X3Nob3J0IiBtc2dpZD0iNDQ3NzI2NDg0OTM4Njg1MDI2NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiA8eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9sb3dfYmF0dGVyeSIgbXNnaWQ9IjE0ODI4NzM5ODE5MTkyNDk3NDAiPiLDnGhlbmRhZ2UgbGFhZGlqYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk5NDM5Mjc3ODE5MjE1Mzk5Ij4iU0lNLWthYXJ0aSBwb2xlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTE2NTkxOTYwOTU3OTE0NzQiPiJUYWh2ZWxhcnZ1dGlzIHBvbGUgU0lNLWthYXJ0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4iVGVsZWZvbmlzIHBvbGUgU0lNLWthYXJ0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUzNzI3ODcxMzgwMjMyNzI2MTUiPiJTaXNlc3RhZ2UgU0lNLWthYXJ0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSIzNTI2NTczMDk5MDE5MzE5NDcyIj4iU0lNLWthYXJ0IHB1dWR1YiB2w7VpIG9uIGxvZXRhbWF0dS4gU2lzZXN0YWdlIFNJTS1rYWFydC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTYxNDk2NjUxMzg5MTYxODQiPiJLYXN1dGFtaXNrw7VsYm1hdHUgU0lNLWthYXJ0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiJTSU0ta2FhcnQgb24gasOkw6RkYXZhbHQga2VlbGF0dWQuXG4gVGVpc2UgU0lNLWthYXJkaSBzYWFtaXNla3MgdsO1dGtlIMO8aGVuZHVzdCBvbWEgdHJhYWRpdGEgc2lkZSB0ZWVudXNlcGFra3VqYWdhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDE1OTQ5MDUxNTI3NDY4ODYiPiJFZWxtaXNlIGxvbyBudXBwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjYwODkyOTc2NTA0ODEyOTIzNjMiPiJOdXBwIErDpHJnbWluZSByYWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU5MDg4Nzg2NzgwMTI4MDAxIj4iTnVwcCBQZWF0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI1ODg4NDIyOTM4MzUxMDE5NDI2Ij4iTnVwcCBFc2l0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTYyMzE4Mzc4NzY2OTg3NjAxIj4iTnVwcCBQZWF0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsc19vbmx5IiBtc2dpZD0iNjczMzk3ODMwNDM4NjM2NTQwNyI+IkFpbnVsdCBow6RkYWFiaWvDtW5lZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjE0MzM4OTIyNDk4NjAyODUwMSI+IlbDtXJrIHN1bGV0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4iU0lNLWthYXJ0IG9uIFBVSy1sdWt1cy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiJWYWFkYWtlIGthc3V0dXNqdWhlbmRpdCB2w7VpIHbDtXRrZSDDvGhlbmR1c3Qga2xpZW5kaXRlZW5pbmR1c2VnYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjgwNjY2NjAxMjkyMDYwMDEwMzkiPiJTSU0ta2FhcnQgb24gbHVrdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNTk1MzIzMjE0MDUyODgxMjY0Ij4iU0lNLWthYXJkaSBhdmFtaW5lIC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjQ4MTYyMzgzMDM0NDEwNzIyMiI+Ik9sZXRlIG9tYSBhdmFtaXNtdXN0cml0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkga29vc3RhbnVkLiBcblxuUHJvb3ZpZ2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IHV1ZXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjI3MjU5NzMyODYyMzkzNDQ1NTUiPiJPbGV0ZSBwYXJvb2xpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgc2lzZXN0YW51ZC4gXG5cblByb292aWdlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdCB1dWVzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+Ik9sZXRlIFBJTi1rb29kaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpIHNpc2VzdGFudWQuIFxuXG5Qcm9vdmlnZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QgdXVlc3RpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjkxOTE2MTE5ODQ2MjU0NjA4MjAiPiJKb29uaXN0YXNpdGUgb21hIGF2YW1pc211c3RyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpLiBQw6RyYXN0IHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IHBhbHV0YWtzZSB0ZWlsIHRhaHZlbGFydnV0aSBhdmFkYSBHb29nbGVcJ2kgc2lzc2Vsb2dpbWlzZWdhLlxuXG4gUHJvb3ZpZ2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IHV1ZXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjU5MDIyNzU1OTc2Mzc2Mjc1MSI+Ikpvb25pc3Rhc2l0ZSBvbWEgYXZhbWlzbXVzdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkuIFDDpHJhc3QgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQgcGFsdXRha3NlIHRlaWwgdGVsZWZvbiBhdmFkYSBHb29nbGVcJ2kgc2lzc2Vsb2dpbWlzZWdhLlxuXG4gUHJvb3ZpZ2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IHV1ZXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjEyODEwNjM5OTc0NTc1NTYwNCI+Ik9sZXRlIMO8cml0YW51ZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB0YWh2ZWxhcnZ1dGl0IHZhbGVzdGkgYXZhZGEuIFDDpHJhc3QgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlZHV0dXQga2F0c2V0IGzDpGh0ZXN0YXRha3NlIHRhaHZlbGFydnV0aSB0ZWhhc2UgdmFpa2VzZWFkZXRlbGUgamEga8O1aWsga2FzdXRhamFhbmRtZWQgbMOkaGV2YWQga2FvdHNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODYwMzU2NTE0MjE1NjgyNjU2NSI+Ik9sZXRlIMO8cml0YW51ZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB0ZWxlZm9uaSB2YWxlc3RpIGF2YWRhLiBQw6RyYXN0IHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IGzDpGh0ZXN0YXRha3NlIHRlbGVmb24gdGVoYXNlIHZhaWtlc2VhZGV0ZWxlIGphIGvDtWlrIGthc3V0YWphYW5kbWVkIGzDpGhldmFkIGthb3RzaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyODA4NzM1MTY0OTM5MzQzNjUiPiJPbGV0ZSBww7zDvGRudWQgdGFodmVsYXJ2dXRpdCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSBhdmFkYS4gVGFodmVsYXJ2dXRpIGzDpGh0ZXN0YXRha3NlIG7DvMO8ZCB0ZWhhc2UgdmFpa2VzZWFkZXRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiJPbGV0ZSBww7zDvGRudWQgdGVsZWZvbmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgYXZhZGEuIFRlbGVmb24gbMOkaHRlc3RhdGFrc2UgbsO8w7xkIHRlaGFzZSB2YWlrZXNlYWRldGVsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MjUxNDgwMzQzMzk0Mzg5NjY1Ij4iUHJvb3ZpZ2UgdXVlc3RpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiJLYXMgdW51c3Rhc2l0ZSBtdXN0cmk/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fZm9yZ290X3BhdHRlcm4iIG1zZ2lkPSIyNTg4NTIxNTAxMTY2MDMyNzQ3Ij4iS29udG8gYXZhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iMjc1MTM2ODYwNTI4NzI4ODgwOCI+IkxpaWdhIHBhbGp1IG11c3RyaWthdHNlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4iQXZhbWlzZWtzIGxvZ2lnZSBzaXNzZSBvbWEgR29vZ2xlXCdpIGtvbnRvZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9Ijg4NDY4ODE0MjQxMDY0ODQ0NDciPiJLYXN1dGFqYW5pbWkgKGUtcG9zdCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iNTk1ODAyODM4Mzk1NDczODUyOCI+IlBhcm9vbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4iTG9naSBzaXNzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSIxMzY0MDUxNDczMzQ3NDg1OTA4Ij4iVmFsZSBrYXN1dGFqYW5pbWkgdsO1aSBwYXJvb2wuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iMTY5NjkyNDc2MzY5MDM3OTA3MyI+IkthcyB1bnVzdGFzaXRlIG9tYSBrYXN1dGFqYW5pbWUgdsO1aSBwYXJvb2xpP1xuS8O8bGFzdGFnZSBhYWRyZXNzaSAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSI3MTE0NjI3MzUxMjg2OTMzODY3Ij4iS29udHJvbGxpbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3VubG9ja19sYWJlbCIgbXNnaWQ9IjczNzQ0MDQ4MzIyMDY2NzA1NCI+IkF2YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4iSGVsaSBzaXNzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb2ZmX2xhYmVsIiBtc2dpZD0iOTk2ODIyODI1MTU0MzE5MDI2Ij4iSGVsaSB2w6RsamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX3N0YXJ0IiBtc2dpZD0iMzk0MTA0NTUwMjkzMzE0Mjg0NyI+Ik11c3RyaSBrb29zdGFtaXNlZ2Egb24gYWx1c3RhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jbGVhcmVkIiBtc2dpZD0iNTU4MzQ3OTcyMTAwMTYzOTU3OSI+Ik11c3RlciBvbiBrdXN0dXRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jZWxsX2FkZGVkIiBtc2dpZD0iNjc1NjAzMTIwODM1OTI5MjQ4NyI+IkxhaHRlciBvbiBsaXNhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9kZXRlY3RlZCIgbXNnaWQ9IjQ5ODg3MzA4OTU1NTQwNTcwNTgiPiJNdXN0ZXIgb24gdmFsbWlzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiBWaWRpbiAlMiRkLyUzJGQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IlZpZGluYSBsaXNhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IlTDvGhpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiJBdmFtaXNhbGEgb24gbGFpZW5kYXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiJBdmFtaXNhbGEgb24gYWhlbmRhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+IlZpZGluIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiJLYXN1dGFqYSB2YWxpamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJPbGVrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4iS2FhbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJNZWVkaWEganVodG51cHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJWaWRpbmEgw7xtYmVya29ycmFsZGFtaW5lIGFsZ2FzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IlZpZGluYSDDvG1iZXJrb3JyYWxkYW1pbmUgbMO1cHBlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IlZpZGluIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG9uIGt1c3R1dGF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4iQXZhbWlzYWxhIGxhaWVuZGFtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IkxvaGlzdGFtaXNlZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+Ik11c3RyaWdhIGF2YW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiJOw6RvZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUElOLWtvb2RpZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiJQYXJvb2xpZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiJNdXN0cmkgYWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiJMb2hpc3RhbWlzYWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfY2hhcmFjdGVyIiBtc2dpZD0iNzMzNjQ3MDUzNTM4NTAwOTUyMyI+InTDpGhlbcOkcmsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF93b3JkIiBtc2dpZD0iNzA3NTU3MDMyODM3NDkxODY2MCI+InPDtW5hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluayIgbXNnaWQ9IjU4MTU1MDg4ODA3ODI0ODgyNjciPiJsaW5rIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluZSIgbXNnaWQ9IjU3NjQyNjcyMzUwMjYxMjA4ODgiPiJyaWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91cl9hbXBtIiBtc2dpZD0iNDU4NDMzODA4MzUyOTM1NTk4MiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJBTVBNIj4lUDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJob3VyX2NhcF9hbXBtIiBtc2dpZD0iMjA4MzQ2NTk5Mjk0MDQ0NDM2NiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJBTVBNIj4lcDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9mYWlsZWQiIG1zZ2lkPSI1NDEwMjcwMzI5MTE0MjEyMDQxIj4iVGVoYXNldGVzdCBlYmHDtW5uZXN0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub3Rfc3lzdGVtIiBtc2dpZD0iNDQzNTIwMTY1Njc2NzI3NjcyMyI+IlRvaW1pbmd1dCBGQUNUT1JZX1RFU1QgdG9ldGF0YWtzZSBhaW51bHQga2F1c3RhIFxcc3lzdGVtXFxhcHAgaW5zdGFsbGl0dWQgcGFrZXR0aWRlIHB1aHVsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+IkVpIGxlaXR1ZCDDvGh0ZWdpIHBha2V0dGksIG1pcyB2w7VpbWFsZGFrcyB0b2ltaW5ndXQgRkFDVE9SWV9URVNULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X3JlYm9vdCIgbXNnaWQ9IjYzMjAxNjgyMDMwNTA3OTE2NDMiPiJUYWFza8OkaXZpdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIxOTg3NDgzOTc3ODM0NjAzODcyIj4iTGVodCAg4oCePHhsaWZmOmcgaWQ9IlRJVExFIj4lczwveGxpZmY6Zz7igJ0gw7x0bGViIGrDpHJnbWlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGVfZGVmYXVsdCIgbXNnaWQ9IjY5NjE5MDMyMTM3Mjk2Njc1NzMiPiJKYXZhU2NyaXB0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfdGl0bGUiIG1zZ2lkPSIyNjE5Mzc2NTU1NTI1MTE2NTkzIj4iTmF2aWdlZXJpbWlzZSBraW5uaXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3Bvc2l0aXZlX2J1dHRvbiIgbXNnaWQ9IjMxMTI3NTIwMTA2MDA0ODQxMzAiPiJMYWhrdSBzZWxsZWx0IGxlaGVsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX25lZ2F0aXZlX2J1dHRvbiIgbXNnaWQ9IjU2MTQ4NjEyOTMwMjYwOTk3MTUiPiJKw6TDpCBzZWxsZWxlIGxlaGVsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkIiBtc2dpZD0iMzQ2ODgxNjM1NzA5NTM3ODU5MCI+Ijx4bGlmZjpnIGlkPSJNRVNTQUdFIj4lczwveGxpZmY6Zz5cblxuS2FzIHNvb3ZpdGUga2luZGxhc3RpIHNlbGxlbHQgbGVoZWx0IGxhaGt1ZGE/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9sYWJlbCIgbXNnaWQ9IjY4NjAyNjE3NTg2NjU4MjUwNjkiPiJLaW5uaXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZG91YmxlX3RhcF90b2FzdCIgbXNnaWQ9IjQ1OTUwNDY1MTU0MDAyNjg4ODEiPiJWaWhqZTogc3V1cmVuZGFtaXNla3MgamEgdsOkaGVuZGFtaXNla3MgcHV1ZHV0YWdlIGtha3Mga29yZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfdGhpc19mb3JtIiBtc2dpZD0iNDYxNjc1ODg0MTE1NzgxNjY3NiI+IkF1dG9tYWF0bmUgdMOkaXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2V0dXBfYXV0b2ZpbGwiIG1zZ2lkPSI3MTAzNDk1MDcwMTgwNTkwODE0Ij4iQXV0b21hYXRzZSB0w6RpdG1pc2Ugc2VhZGlzdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19uYW1lX3NlcGFyYXRvciIgbXNnaWQ9IjYzNTAxNDUxNTQ3Nzk3MDY3NzIiPiIgIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X25hbWVfZm9ybWF0IiBtc2dpZD0iMzI2ODA0MTA1NDg5OTIxNDk0NSI+IiQxJDIkMyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9zZXBhcmF0b3IiIG1zZ2lkPSI3NDgzMzA3ODkzMTcwMzI0MTI5Ij4iLCAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfZm9ybWF0IiBtc2dpZD0iNDg3NDQ1OTQ1NTc4NjgyNzM0NCI+IiQxJDIkMyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3Byb3ZpbmNlIiBtc2dpZD0iMjIzMTgwNjU1Mzg2MzQyMjMwMCI+IlByb3ZpbnRzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcG9zdGFsX2NvZGUiIG1zZ2lkPSI0Njk2NDMwNDA3Njg5Mzc3MTA4Ij4iU2lodG51bWJlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3N0YXRlIiBtc2dpZD0iNjk4ODg5NDE5NTUyMDA0NDYxMyI+Ik9sZWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF96aXBfY29kZSIgbXNnaWQ9Ijg2OTc1NDQ1OTI2MjczMjI5NDYiPiJTaWh0bnVtYmVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfY291bnR5IiBtc2dpZD0iMjM3MDczNzcxMDIwMzYyODkxIj4iTWFha29uZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2lzbGFuZCIgbXNnaWQ9IjQwMjAxMDA4NzU5ODQ2NjcwMjUiPiJTYWFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZGlzdHJpY3QiIG1zZ2lkPSI4NDAwNzM1MDczMzkyMjY3NjcyIj4iUGlpcmtvbmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kZXBhcnRtZW50IiBtc2dpZD0iNTM0MzI3OTQ2MjU2NDQ1MzMwOSI+Ik9zYWtvbmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcmVmZWN0dXJlIiBtc2dpZD0iMjAyODQ5OTQ4NTA2NTgwMDQxOSI+IlByZWZla3R1dXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wYXJpc2giIG1zZ2lkPSI4MjAyMjA2MTA1NDY4ODIwMDU3Ij4iVmFsZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FyZWEiIG1zZ2lkPSIzNTQ3NDA5MDUwODg5OTUyNDIzIj4iUGlpcmtvbmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9lbWlyYXRlIiBtc2dpZD0iMjg5Mzg4MDk3ODgzNTY5ODgxOCI+IkVtaXJhYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzc3NTI2NTc3NTQwNTEwNjk4MyI+Imx1Z2VnZSBvbWEgdmVlYmlqw6RyamVob2lkamFpZCBqYSAtYWphbHVndSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iODQ2MjM3ODIyNjYwMDQzOTY1OCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBsdWdlZGEga8O1aWtpZGUgVVJMLWlkZSBhamFsdWd1LCBtaWRhIGJyYXVzZXIgb24ga8O8bGFzdGFudWQsIGphIGvDtWlraSBicmF1c2VyaSBqw6RyamVob2lkamFpZC4gTcOkcmt1czogc2VlIGx1YmEgZWkgcHJ1dWdpIGrDtXVzdHVkYSBrb2xtYW5kYSBvc2Fwb29sZSBicmF1c2VyaXRlZ2EgdsO1aSB0ZWlzdGUgdmVlYmlzaXJ2aW1pc3bDtWltZWdhIHJha2VuZHVzdGVnYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3MTQ3ODUxNjUyNzMzMTQ0OTAiPiJraXJqdXRhZ2UgdmVlYmlqw6RyamVob2lkamFpZCBqYSAtYWphbHVndSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSB0YWh2ZWxhcnZ1dGlzc2Ugc2FsdmVzdGF0dWQgYnJhdXNlcmkgYWphbHVndSB2w7VpIGrDpHJqZWhvaWRqYWlkLiBTZWUgdsO1aW1hbGRhYiByYWtlbmR1c2VsIGt1c3R1dGFkYSB2w7VpIG11dXRhIGJyYXVzZXJpIGFuZG1laWQuIE3DpHJrdXM6IHNlZSBsdWJhIGVpIHBydXVnaSBqw7V1c3R1ZGEga29sbWFuZGEgb3NhcG9vbGUgYnJhdXNlcml0ZXMgdsO1aSB0ZWlzdGVzIHZlZWJpc2lydmltaXN2w7VpbWVnYSByYWtlbmR1c3Rlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDk3Mzg5NTMxMDE0MTg1NTA5Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIG11dXRhIHRlbGVmb25pIHNhbHZlc3RhdHVkIGJyYXVzZXJpIGFqYWx1Z3UgdsO1aSBqw6RyamVob2lkamFpZC4gU2VlIHbDtWltYWxkYWIgcmFrZW5kdXNlbCBrdXN0dXRhZGEgdsO1aSBtdXV0YSBicmF1c2VyaSBhbmRtZWlkLiBNw6Rya3VzOiBzZWUgbHViYSBlaSBwcnV1Z2kgasO1dXN0dWRhIGtvbG1hbmRhIG9zYXBvb2xlIGJyYXVzZXJpdGVzIHbDtWkgdGVpc3RlcyB2ZWViaXNpcnZpbWlzdsO1aW1lZ2EgcmFrZW5kdXN0ZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbGFybSIgbXNnaWQ9IjEzNzkyOTQ1NTYzNjIwOTE4MTQiPiJtw6TDpHJha2Ugw6RyYXR1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsYXJtIiBtc2dpZD0iMzE2MzkyMDM5MTU3NDczODQ4Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHNlYWRhIGluc3RhbGxpdHVkIMOkcmF0dXNrZWxsYXJha2VuZHVzZXMgw6RyYXR1c2UuIE3DtW5lZCDDpHJhdHVza2VsbGFyYWtlbmR1c2VkIGVpIHBydXVnaSBzZWRhIGZ1bmt0c2lvb25pIGp1dXJ1dGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjU1MjU2NjAwMjYwOTA5NTkwNDQiPiJsaXNhIGvDtW5lcG9zdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hZGRWb2ljZW1haWwiIG1zZ2lkPSI2NjA0NTA4NjUxNDI4MjUyNDM3Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGxpc2FkYSBzw7VudW1laWQgdGVpZSBrw7VuZXBvc3RpIHBvc3RrYXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjU5NjIyMjQxNTg5NTUyNzM5MzIiPiJCcmF1c2VyaSBnZW9sb2thdHNpb29uacO1aWd1c3RlIG11dXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iMTA4Mzc0MzIzNDUyMjYzODc0NyI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSBicmF1c2VyaSBnZW9sb2thdHNpb29uacO1aWd1c2kuIFBhaGF0YWh0bGlrdWQgcmFrZW5kdXNlZCB2w7VpdmFkIHNlZGEga2FzdXRhZGEgYXN1a29oYXRlYWJlIHNhYXRtaXNlIGx1YmFtaXNla3Mgc3V2YWxpc3RlbGUgdmVlYmlzYWl0aWRlbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wYWNrYWdlVmVyaWZpY2F0aW9uQWdlbnQiIG1zZ2lkPSI1NTY4MTM5MTAwNjQ1ODI5MTE3Ij4icGFrZXR0aWRlIGtpbm5pdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iODQzNzU5MDE5MDk5MDg0MzM4MSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBraW5uaXRhZGEsIGV0IHBha2V0dGkgc2FhYiBpbnN0YWxsaWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjQxODc3ODY3OTMzNjAzMjY2NTQiPiJzaWR1bWluZSBwYWtldGkga2lubml0YWphZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iMzE4MDc0MTc3MzIzMzg2MjEyNiI+Ikx1YmFiIG9tYW5pa3VsIHRlaGEgdGFvdGx1c2kgcGFrZXRpIGtpbm5pdGFqYXRlIGtvaHRhLiBUYXZhcmFrZW5kdXN0ZSBwdWh1bCBlaSBwZWFrcyBzZWRhIGt1bmFnaSB2YWphIG1pbmVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlcmlhbFBvcnQiIG1zZ2lkPSI1NDYwODMzMjc2NTQ2MzEwNzYiPiJqdXVyZGVww6TDpHMgamFkYXBvcnRpZGVsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlcmlhbFBvcnQiIG1zZ2lkPSIyOTkxNjM5OTg1MjI0NTk4MTkzIj4iVsO1aW1hbGRhYiBvbWFuaWt1bCBTZXJpYWxNYW5hZ2VyaSBBUEktbGlpZGVzZSBhYmlsIGphZGFwb3J0aWRlbGUganV1cmRlIHDDpMOkc2VkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNTA3Nzc3NDI5Nzk0MzQwOTI4NSI+InbDpGxpbmUganV1cmRlcMOkw6RzIHNpc3VwYWtrdWphdGVsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNDU0NDM0NjQ4NjY5Nzg1MzY4NSI+IlbDtWltYWxkYWIgdmFsZGFqYWwgaGFua2lkYSBqdXVyZGVww6TDpHN1IHNpc3VwYWtrdWphdGVsZSBrZXN0YSBrYXVkdS4gUG9sZSBrdW5hZ2kgdmFqYWxpayB0YXZhbGlzdGUgcmFrZW5kdXN0ZSBwdWh1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4ic2VhZG1lIGF1dG9tLiB2w6Ryc2tlbmRhbWlzdGUgdGFraXN0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVMb2NrIiBtc2dpZD0iMTY1NTYyNTgzMjE2Njc3ODQ5MiI+IlbDtWltYWxkYWIgdmFsZGFqYWwgcGFra3VkYSBzw7xzdGVlbWlsZSB0ZWF2ZXQgc2VsbGUga29odGEsIGthcyBvbiBzb2JpdiBhZWcgbWl0dGVpbnRlcmFrdGlpdnNla3MgdGFhc2vDpGl2aXRhbWlzZWtzLCBldCB2aWlhIHNlYWRlIMO8bGUgdXVlbGUgdmVyc2lvb25pbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9tZXNzYWdlIiBtc2dpZD0iNzY3MzQ0Njg3MTM5MTk1NzkwIj4iS2FzIHNvb3ZpdGUsIGV0IGJyYXVzZXIgasOkdGFrcyBzZWxsZSBwYXJvb2xpIG1lZWxkZT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25vdG5vdyIgbXNnaWQ9IjYzODk2NzUzMTY3MDY2OTk3NTgiPiJNaXR0ZSBwcmFlZ3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX3JlbWVtYmVyIiBtc2dpZD0iNjQ5MTg3OTY3ODk5Njc0OTQ2NiI+IlBpZGFnZSBtZWVsZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25ldmVyIiBtc2dpZD0iODI3NDMzMDI5Njc4NTg1NTEwNSI+Ik1pdHRlIGt1bmFnaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9wZW5fcGVybWlzc2lvbl9kZW55IiBtc2dpZD0iNzM3NDAzNjcwODMxNjYyOTgwMCI+IlRlaWwgcG9sZSBsdWJhIHNlbGxlIGxlaGUgYXZhbWlzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRleHRfY29waWVkIiBtc2dpZD0iNDk4NTcyOTUyNDY3MDEzMTM4NSI+IkzDtWlrZWxhdWFsZSBrb3BlZXJpdHVkIHRla3N0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1vcmVfaXRlbV9sYWJlbCIgbXNnaWQ9IjQ2NTA5MTg5MjMwODMzMjA0OTUiPiJSb2hrZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVwZW5kX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjU3MjIxNDQ2MTY3NjAxNTY0MiI+Ik1lbsO8w7wrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zcGFjZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI0MTAzMjg2MzkyNzIxNjI1MzciPiJ0w7xoaWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZW51X2VudGVyX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjc0MzM2Mjc4NTExMTMwOTY2OCI+InNpc2VzdHVza2xhaHYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjM2NTgxNzgwMDcyMDI3NDgxNjQiPiJrdXN0dXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoX2dvIiBtc2dpZD0iODI5ODAxNjY2OTgyMjE0MTcxOSI+Ik90c2luZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc2VhcmNoIiBtc2dpZD0iNjc0OTgyNjYzOTA5ODUxMjEyMCI+Ik90c2luZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fcXVlcnkiIG1zZ2lkPSI1OTExNzc4NTkzMTI1MzU1MTI0Ij4iT3RzaW5ndXDDpHJpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX2NsZWFyIiBtc2dpZD0iMTMzMDI4MTk5MDk1MTgzMzAzMyI+IlTDvGhqZW5kYSBww6RyaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zdWJtaXQiIG1zZ2lkPSIyNjg4NDUwMTMzMjk3OTgzNTQyIj4iUMOkcmluZ3UgZXNpdGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl92b2ljZSIgbXNnaWQ9IjI0NTMyMDM2OTU2NzQ5OTQ0NDAiPiJIw6TDpGxvdHNpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX3RpdGxlIiBtc2dpZD0iNzQ2MDY5NDA3MDMwOTczMDE0OSI+IkthcyBsdWJhZGEgcHV1ZHV0dXNlZ2EgdXVyaW1pbmU/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NjU1ODg3NTM5MDg5OTEwNTc3Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBzb292aWIgbHViYWRhIHB1dWR1dHVzZWdhIHV1cmltaXNlLiBLdWkgcHV1ZHV0dXNlZ2EgdXVyaW1pbmUgb24gc2lzc2UgbMO8bGl0YXR1ZCwga3V1bGV0ZSB2w7VpIG7DpGV0ZSBraXJqZWxkdXNpIGFzamFkZSBrb2h0YSwgbWlzIG9uIHRlaWUgc8O1cm1lIGFsbCwgdsO1aSBzYWF0ZSBzdWhlbGRhIHRhaHZlbGFydnV0aWdhIGxpaWd1dHVzdGUgYWJpbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNzA4MTk5NjcyODUyMzczMTk1Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBzb292aWIgbHViYWRhIHB1dWR1dHVzZWdhIHV1cmltaXNlLiBLdWkgcHV1ZHV0dXNlZ2EgdXVyaW1pbmUgb24gc2lzc2UgbMO8bGl0YXR1ZCwga3V1bGV0ZSB2w7VpIG7DpGV0ZSBraXJqZWxkdXNpIGFzamFkZSBrb2h0YSwgbWlzIG9uIHRlaWUgc8O1cm1lIGFsbCwgdsO1aSBzYWF0ZSBzdWhlbGRhIHRlbGVmb25pZ2EgbGlpZ3V0dXN0ZSBhYmlsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iNzM5NjM4NDUwODk1Mzc3OTkyNSI+IjEga3V1IHRhZ2FzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJlZm9yZU9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iOTA5MTM0NTQ2ODM2NDk5ODI2Ij4iVmFyZW0ga3VpIDEga3V1IHRhZ2FzaSI8L3N0cmluZz4KLSAgPHBsdXJhbHMgbmFtZT0ibnVtX3NlY29uZHNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDg2OTg3MDA1NjU0Nzg5NjAxMSI+IjEgc2VrdW5kIHRhZ2FzaSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzkwMzcwNjgwNDM0OTU1NjM3OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNla3VuZGl0IHRhZ2FzaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0ibnVtX21pbnV0ZXNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzMwNjc4NzQzMzA4ODgxMDE5MSI+IjEgbWludXQgdGFnYXNpIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMTc2OTQyMDA4OTE1NDU1MTE2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gbWludXRpdCB0YWdhc2kiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9Im51bV9ob3Vyc19hZ28iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI5MTUwNzk3OTQ0NjEwODIxODQ5Ij4iMSB0dW5kIHRhZ2FzaSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjQ2NzI3MzIzOTU4NzU4NzU2OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHR1bmRpIHRhZ2FzaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0ibGFzdF9udW1fZGF5cyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzA2OTk5MjgwODE2NDMxODI2OCI+IlZpaW1hc2VkIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHDDpGV2YSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9Imxhc3RfbW9udGgiIG1zZ2lkPSIzOTU5MzQ2NzM5OTc5MDU1NDMyIj4iRWVsbWlzZWwga3V1bCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9sZGVyIiBtc2dpZD0iNTIxMTk3NTAyMjgxNTU1NDg0MCI+IlZhbmVtIjwvc3RyaW5nPgotICA8cGx1cmFscyBuYW1lPSJudW1fZGF5c19hZ28iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NjEzNTg1MzQzOTgxMTU4MjAiPiJlaWxlIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDc5NTg2NDY2MTUzMzE0NjMzIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gcMOkZXZhIHRhZ2FzaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX3NlY29uZHMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIyNzI5NzQ1NTYwOTU0OTA1MTAyIj4iMSBzZWt1bmRpIHDDpHJhc3QiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEyNDE5MjYxMTY0NDM5NzQ2ODciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImluX251bV9taW51dGVzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODc5MzA5NTI1MTMyNTIwMDM5NSI+IjEgbWludXRpIHDDpHJhc3QiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMzMzA3MTM5MzYzOTk0NDg3NDkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBtaW51dGkgcMOkcmFzdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2hvdXJzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNzE2NDM1MzM0MjQ3Nzc2OTk5OSI+IjEgdHVubmkgcMOkcmFzdCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3MjkwNjc3MzUzNzI3Mzg5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gdHVubmkgcMOkcmFzdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2RheXMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NDEzMDg4NzQzMDA5ODM5NTE4Ij4iaG9tbWUiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjUxMDk0NDkzNzUxMDA5NTMyNDciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBww6RldmEgcMOkcmFzdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9zZWNvbmRzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjE4NDkwMzY4NDAyMDAwNjkxMTgiPiIxIHMgdGFnYXNpIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNjk5MTY5MzY2NjUwOTMwNDE1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2VrdW5kaXQgdGFnYXNpIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX21pbnV0ZXNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjM2MTQ5MDE0NzExMzg3MTU0NSI+IjEgbWludXQgdGFnYXNpIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NTExNjQ5Njg1OTcxNTA3MTAiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBtaW51dGl0IHRhZ2FzaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9ob3Vyc19hZ28iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0Nzk2MjEyMDM5NzI0NzIyMTE2Ij4iMSB0dW5kIHRhZ2FzaSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjg4OTk3MDc0NTc0ODUzODkwMSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHR1bmRpIHRhZ2FzaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9kYXlzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg0NjMxNjE3MTE0OTI2ODAzMDkiPiJlaWxlIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNDUzMzQyNjM5NjE2NDgxMTkxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gcMOkZXZhIHRhZ2FzaSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9zZWNvbmRzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg0MjIyNTM3MDc5NTA2NjI5OSI+IjEgc2VrdW5kaSBww6RyYXN0IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDk1ODgwMTA4ODI1ODA1MTA4Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX21pbnV0ZXMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NjI3ODYxNDk5MjgyODQ4NzgiPiIxIG1pbnV0aSBww6RyYXN0IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MjE2MTEzMjkyNzA2NTY4NzI2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gbWludXRpIHDDpHJhc3QiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1faG91cnMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjc0NzA4MTE4MTI0MDQ1MjQ2Ij4iMSB0dW5uaSBww6RyYXN0IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNzA1MzczNzY2Nzk4MDEzNDA2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gdHVubmkgcMOkcmFzdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9kYXlzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjE3ODU3NjI1NDM4NTczOTg1NSI+ImhvbW1lIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyOTczMDYyOTY4MDM4MzU1OTkxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gcMOkZXZhIHDDpHJhc3QiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfZGF0ZSIgbXNnaWQ9IjkwOTM5NDk3NTc3NTc0NDUxMTciPiJrdXVww6RldmFsIDx4bGlmZjpnIGlkPSJEQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfdGltZSIgbXNnaWQ9IjU1MDY4MzEyNDQyNjMwODM3OTMiPiJrZWxsIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfeWVhciIgbXNnaWQ9IjUwNDAzOTU2NDA3MTE4NjcxNzciPiJhYXN0YWwgPHhsaWZmOmcgaWQ9IllFQVIiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRheSIgbXNnaWQ9IjgxNDQxOTU3NzYwNTgxMTk0MjQiPiJww6RldiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRheXMiIG1zZ2lkPSI0Nzc0NTQ3NjYxMDIxMzQ0NjAyIj4icMOkZXZhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91ciIgbXNnaWQ9IjIxMjY3NzE5MTY0MjYxODk0ODEiPiJ0dW5kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91cnMiIG1zZ2lkPSI4OTQ0MjQwMDUyNjY4NTI5OTMiPiJ0dW5kaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZSIgbXNnaWQ9IjkxNDg4Nzg2NTc3MDM3Njk4NjgiPiJtaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaW51dGVzIiBtc2dpZD0iNTY0NjAwMTAwNTgyNzAzNDUwOSI+Im1pbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlY29uZCIgbXNnaWQ9IjMxODQyMzU4MDgwMjE0NzgiPiJzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kcyIgbXNnaWQ9IjMxNjE1MTUzNDcyMTY1ODkyMzUiPiJzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2VlayIgbXNnaWQ9IjU2MTc5NjE1MzcxNzMwNjE1ODMiPiJuw6RkYWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3ZWVrcyIgbXNnaWQ9IjY1MDk2MjM4MzQ1ODM5NDQ1MTgiPiJuw6RkYWxhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InllYXIiIG1zZ2lkPSI0MDAxMTE4MjIxMDEzODkyMDc2Ij4iYWFzdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ5ZWFycyIgbXNnaWQ9IjY4ODE1Nzc3MTc5OTMyMTM1MjIiPiJhYXN0YXQiPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX3NlY29uZHMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2OTYyMDE1NTI4MzcyOTY5NDgxIj4iMSBzZWt1bmQiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjE4ODYxMDc3NjY1NzcxNjY3ODYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzZWt1bmRpdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fbWludXRlcyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ5MTU0MTQwMDI1NDYwODU2MTciPiIxIG1pbnV0IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMTY1MTg3MTY5MjI0OTA4Nzc1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gbWludXRpdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25faG91cnMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4OTE3NDY3NDkxMjQ4ODA5OTcyIj4iMSB0dW5kIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzODYzOTYyODU0MjQ2NzczOTMwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gdHVuZGkiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGl0bGUiIG1zZ2lkPSIzNTM0NTA5MTM1NDM4MzUzMDc3Ij4iUHJvYmxlZW0gdmlkZW9nYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X2ludmFsaWRfcHJvZ3Jlc3NpdmVfcGxheWJhY2siIG1zZ2lkPSIzMTg2NjcwMzM1OTM4NjcwNDQ0Ij4iU2VlIHZpZGVvIGVpIHNvYmkgdm9vZ2VzaXR1c2VrcyBzZWxsZXMgc2VhZG1lcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF91bmtub3duIiBtc2dpZD0iMzQ1MDQzOTE1NTE4NzgxMDA4NSI+IlZpZGVvdCBlaSBzYWEgZXNpdGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfYnV0dG9uIiBtc2dpZD0iMjgyMjIzODIxNTEwMDY3OTU5MiI+Ik9LIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpdmVfdGltZSIgbXNnaWQ9IjE4MTg1NTcxNzc4Mjk0MTE0MTciPiI8eGxpZmY6ZyBpZD0iREFURSI+JTEkczwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vb24iIG1zZ2lkPSI3MjQ1MzUzNTI4ODE4NTg3OTA4Ij4ia2Vza3DDpGV2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iTm9vbiIgbXNnaWQ9IjMzNDIxMjc3NDUyMzAwMTMxMjciPiJLZXNrcMOkZXYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaWRuaWdodCIgbXNnaWQ9IjcxNjYyNTk1MDg4NTA0NTc1OTUiPiJrZXNrw7bDtiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Ik1pZG5pZ2h0IiBtc2dpZD0iNTYzMDgwNjkwNjg5Nzg5MjIwMSI+Iktlc2vDtsO2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9tbV9zcyIgbXNnaWQ9IjQ0MzE1NTU5NDM4Mjg3MTE0NzMiPiI8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTEkMDJkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iU0VDT05EUyI+JTIkMDJkPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVsYXBzZWRfdGltZV9zaG9ydF9mb3JtYXRfaF9tbV9zcyIgbXNnaWQ9IjE4NDYwNzE5OTc2MTY2NTQxMjQiPiI8eGxpZmY6ZyBpZD0iSE9VUlMiPiUxJGQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMiQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMyQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0QWxsIiBtc2dpZD0iNjg3NjUxODkyNTg0NDEyOTMzMSI+IlZhbGkga8O1aWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iTMO1aWthIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3BlZXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iS2xlZWJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJBc2VuZGEuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iS3VzdHV0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29wZWVyaSBVUkwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJWYWxpZ2UgdGVrc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVGVrc3RpIHZhbGltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+Ikxpc2Egc8O1bmFzdGlra3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+Ikt1c3R1dGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnB1dE1ldGhvZCIgbXNnaWQ9IjE2NTM2MzAwNjIzMDQ1Njc4NzkiPiJTaXNlc3R1c21lZXRvZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVkaXRUZXh0TWVudVRpdGxlIiBtc2dpZD0iNDkwOTEzNTU2NDk0MTgxNTQ5NCI+IlRla3N0aXRvaW1pbmd1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGl0bGUiIG1zZ2lkPSI1NTc2MjcyNDk2MzY1Njg0ODM0Ij4iVGFsbGV0dXNydXVtIHNhYWIgdMOkaXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RleHQiIG1zZ2lkPSI2NjQwNTA1ODE3NjE3NDE0MzcxIj4iTcO1bmVkIHPDvHN0ZWVtaWZ1bmt0c2lvb25pZCBlaSBwcnV1Z2kgdMO2w7Z0YWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX3J1bm5pbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODcxODMzNTEyMTA2MDc4NzkxNCI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gdMO2w7Z0YWIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjQ2NTM1ODY5NDc3NDczMzAwNTgiPiJQdXVkdXRhZ2UgbGlzYXRlYWJlIHNhYW1pc2VrcyB2w7VpIHJha2VuZHVzZSBwZWF0YW1pc2Vrcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvayIgbXNnaWQ9IjU5NzAwNjA0MzA1NjI1MjQ5MTAiPiJPSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjY0NDI1NjA1NzEyNTk5MzUxMzAiPiJUw7xoaXN0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InllcyIgbXNnaWQ9IjUzNjI5ODIzMDMzMzc5NjkzMTIiPiJPSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vIiBtc2dpZD0iNTE0MTUzMTA0NDkzNTU0MTQ5NyI+IlTDvGhpc3RhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlhbG9nX2FsZXJ0X3RpdGxlIiBtc2dpZD0iMjA0OTY1ODcwODYwOTA0MzEwMyI+IlTDpGhlbGVwYW51Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9hZGluZyIgbXNnaWQ9Ijc5MzM2ODEyNjAyOTYwMjExODAiPiJMYWFkaW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vbiIgbXNnaWQ9IjE1NDQ2ODI3NTU1MTQ0OTQyOTgiPiJTRUVTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vZmYiIG1zZ2lkPSI2ODE1ODcwMzg2OTcyODA1ODMyIj4iVsOETEpBUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndoaWNoQXBwbGljYXRpb24iIG1zZ2lkPSI0NTMzMTg1OTQ3MDY0NzczMzg2Ij4iTMO1cGV0YWdlIHRvaW1pbmcgcmFrZW5kdXNlZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNVc2UiIG1zZ2lkPSI0NTgzMDE4MzY4MDAwNjEwNDM4Ij4iS2FzdXRhIHZhaWtpbWlzaSBzZWxsZWtzIHRvaW1pbmd1a3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiJUw7xoamVuZGFnZSB2YWlrZWFuZG1lZCB2YWxpa3V0ZXMgU8O8c3RlZW1pc2VhZGVkICZndDsgUmFrZW5kdXNlZCAmZ3Q7IEFsbGFsYWFkaXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiJUb2ltaW5ndSB2YWxpbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZVVzYkFjdGl2aXR5IiBtc2dpZD0iNjg5NDc0ODQxNjA3MzU4MzUwOSI+IlVTQi1zZWFkbWUgamFva3MgcmFrZW5kdXNlIHZhbGltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9BcHBsaWNhdGlvbnMiIG1zZ2lkPSIyOTkxODE0MjczOTM2NTA0Njg5Ij4iw5xrc2tpIHJha2VuZHVzIGVpIHNhYSBzZWRhIHRvaW1pbmd1dCB0ZW9zdGFkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZXJyX3RpdGxlIiBtc2dpZD0iMTkwNTgwMDU2MDMxNzEzNzc1MiI+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZXJyX2FwcGxpY2F0aW9uIiBtc2dpZD0iOTMyNjI4NDg4MDEzMDkyNzc2Ij4iS2FoanVrcyBvbiByYWtlbmR1cyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IHBlYXR1bnVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFlcnJfcHJvY2VzcyIgbXNnaWQ9IjQ1MDcwNTg5OTcwMzU2OTc1NzkiPiJLYWhqdWtzIG9uIHByb3RzZXNzIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiBwZWF0dW51ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfdGl0bGUiIG1zZ2lkPSI0MzUxOTQ4NDgxNDU5MTM1NzA5Ij48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjE5MDQ0NzcxODkwNTcxOTkwNjYiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUyJHM8L3hsaWZmOmc+IGVpIHZhc3RhLlxuXG5LYXMgc29vdml0ZSBzZWxsZSBzdWxnZWRhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+IlRlZ2V2dXMgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiBlaSB2YXN0YS5cblxuS2FzIHNvb3ZpdGUgc2VsbGUgc3VsZ2VkYT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfYXBwbGljYXRpb25fcHJvY2VzcyIgbXNnaWQ9Ijg5NDE3NTc2MDczNDA0ODEwNTciPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IGVpIHZhc3RhLiBLYXMgc29vdml0ZSBzZWxsZSBzdWxnZWRhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9wcm9jZXNzIiBtc2dpZD0iNjUxMzIwOTg3NDg4MDUxNzEyNSI+IlByb3RzZXNzIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiBlaSB2YXN0YS5cblxuS2FzIHNvb3ZpdGUgc2VsbGUgc3VsZ2VkYT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmb3JjZV9jbG9zZSIgbXNnaWQ9IjgzNDYwNzIwOTQ1MjEyNjU2MDUiPiJPSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlcG9ydCIgbXNnaWQ9IjQwNjAyMTgyNjA5ODQ3OTU3MDYiPiJUZWF0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndhaXQiIG1zZ2lkPSI3MTQ3MTE4MjE3MjI2MzE3NzMyIj4iT29kYWtlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2VicGFnZV91bnJlc3BvbnNpdmUiIG1zZ2lkPSIzMjcyNzU4MzUxMTM4MTIyNTAzIj4iTGVodCBlaSByZWFnZWVyaS5cblxuS2FzIHNvb3ZpdGUgc2VsbGUgc3VsZ2VkYT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE1NDc5OTc3ODA1MDY3MTM1ODEiPiJSYWtlbmR1cyBvbiDDvG1iZXIgc3V1bmF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ19yZXBsYWNlIiBtc2dpZD0iNjIwMjQ5ODk0OTk3MDI4MTQxMiI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gb24gbsO8w7xkIGvDpGl2aXR1bnVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4iQWxnc2VsdCBrw6Rpdml0YXRpIHJha2VuZHVzIDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3NjYWxlIiBtc2dpZD0iMzIwMjk1NTY2NzY3NTk0NDQ5OSI+Ik3DtcO1dGthdmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2hvdyIgbXNnaWQ9IjQwMTM4Nzg4NzY0ODY2NTU4OTIiPiJLdXZhIGFsYXRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX2hpbnQiIG1zZ2lkPSIxMDY0NTI0MDg0NTQzMzA0NDU5Ij4iTHViYWdlIHNlZSB1dWVzdGkgdmFsaWt1dGVzIFPDvHN0ZWVtaXNlYWRlZCAmZ3Q7IFJha2VuZHVzZWQgJmd0OyBBbGxhbGFhZGl0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IlJha2VuZHVzIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gKHByb3RzZXNzIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMiRzPC94bGlmZjpnPikgb24gcmlra3VudWQgaXNla2VodGVzdGF0dWQgU3RyaWN0TW9kZVwnaSBlZXNraXJqdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiJQcm90c2VzcyA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4gb24gcmlra3VudWQgaXNlasO1dXN0YXR1ZCBTdHJpY3RNb2RlXCdpIGVlc2tpcmp1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3RpdGxlIiBtc2dpZD0iMTU4NDE5MjI4NTQ0MTQwNTc0NiI+IkFuZHJvaWQgdmlpYWtzZSDDvGxlIHV1ZW1hbGUgdmVyc2lvb25pbGUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfYXBrIiBtc2dpZD0iNzkwNDA0MjY4MjExMTUyNjE2OSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uIHJha2VuZHVzZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LXN0IG9wdGltZWVyaW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfc3RhcnRpbmdfYXBwcyIgbXNnaWQ9IjQ1MTQ2NDUxNjM0NjkyNjcxMyI+IlJha2VuZHVzdGUga8OkaXZpdGFtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2NvbXBsZXRlIiBtc2dpZD0iMTQwNTk1NDc1NDExMjk5OTIyOSI+IkvDpGl2aXRhbWlzZSBsw7VwdWxldmlpbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uIiBtc2dpZD0iOTA4NzA2Mzk4NTc3NjYyNjE2NiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiUxJHM8L3hsaWZmOmc+IHTDtsO2dGFiIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbl9kZXRhaWwiIG1zZ2lkPSIxNzIxNjgxNzQxNjE3ODk4ODY1Ij4iUHV1ZHV0YWdlIHJha2VuZHVzZWxlIGzDvGxpdHVtaXNla3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGl0bGUiIG1zZ2lkPSI3MTUzMTY3MDg1NDAzMjk4MTY5Ij4iS2FzIGzDvGxpdHVkYSB0ZWlzZWxlIHJha2VuZHVzZWxlPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90ZXh0IiBtc2dpZD0iNzAyMjYzMTkyNDUzNDQwNjQwMyI+IlRlaW5lIHJha2VuZHVzIGp1YmEgdMO2w7Z0YWIgamEgc2VlIHR1bGViIHBlYXRhZGEsIGV0IHNhYWtzaXRlIHV1ZSBrw6Rpdml0YWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfYWN0aW9uIiBtc2dpZD0iNDkzMTI5MTcyMjM4NTY2MjgyIj4iVGFnYXNpIHJha2VuZHVzc2UgPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwODIwOTQyNzU1ODAzNTgwNDkiPiLDhHJnZSBrw6Rpdml0YWdlIHV1dCByYWtlbmR1c3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9hY3Rpb24iIG1zZ2lkPSI1NDcyNzU2OTI2OTQ1NDQwNzA2Ij4iS8OkaXZpdGFnZSByYWtlbmR1cyA8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+IlBlYXRhZ2UgdmFuYSByYWtlbmR1cyBzYWx2ZXN0YW1hdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VuZFRleHQiIG1zZ2lkPSI1MjA5ODc0NTcxOTU5NDY5MTQyIj4iVmFsaWdlIHRla3N0aSBqYW9rcyB0b2ltaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Jpbmd0b25lIiBtc2dpZD0iNjg4NTQyMTQwNjg0NTczNDY1MCI+IkhlbGluYSBoZWxpdHVnZXZ1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpYyIgbXNnaWQ9IjU0MjE2NTExNTcxMzg2MjgxNzEiPiJNZWVkaXVtaSBoZWxpdHVnZXZ1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3BsYXlpbmdfdGhyb3VnaF9ibHVldG9vdGgiIG1zZ2lkPSI5MTY1OTg0Mzc5Mzk0NjAxNTMzIj4iRXNpdGF0YWtzZSBCbHVldG9vdGhpIGthdWR1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfc2lsZW50X3Jpbmd0b25lX3NlbGVjdGVkIiBtc2dpZD0iODMxMDczOTk2MDk3MzE1NjI3MiI+IlZhbGl0dWQgb24gaMOkw6RsZXR1IG3DpHJndWFubmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfY2FsbCIgbXNnaWQ9IjM5NDE2ODAwNDEyODI3ODg3MTEiPiJLw7VuZSBoZWxpdHVnZXZ1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ibHVldG9vdGhfY2FsbCIgbXNnaWQ9IjIwMDI4OTE5MjYzNTExNTE1MzQiPiJCbHVldG9vdGhpIGvDtW5lIGhlbGl0dWdldnVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2FsYXJtIiBtc2dpZD0iMTk4NTE5MTYxNjA0MjY4OTEwMCI+IkFsYXJtaSBoZWxpdHVnZXZ1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIyNDIyMjY1NjU2NzQ0Mjc2NzE1Ij4iVGVhZGlzdHVzaGVsaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV91bmtub3duIiBtc2dpZD0iMTQwMDIxOTY2OTc3MDQ0NTkwMiI+IkhlbGl0dWdldnVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fYmx1ZXRvb3RoIiBtc2dpZD0iNjUzODg5NDE3NzI1NTk2NDM0MCI+IkJsdWV0b290aGkgbWFodCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX3JpbmdlciIgbXNnaWQ9IjMzMjYwMDM4NDcwMDYxNjI0OTYiPiJIZWxpbmEgdHVnZXZ1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2luY2FsbCIgbXNnaWQ9Ijg4OTAwNzMyMTgxNTQ1NDMzOTciPiJLw7VuZSBoZWxpdHVnZXZ1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX21lZGlhIiBtc2dpZD0iNDIxNzMxMTcxOTY2NTE5NDIxNSI+Ik1lZWRpdW1pIGhlbGl0dWdldnVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbm90aWZpY2F0aW9uIiBtc2dpZD0iNzA0NDk4NjU0NjQ3NzI4MjI3NCI+IlRlYXRpc2UgaGVsaXR1Z2V2dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9kZWZhdWx0IiBtc2dpZD0iMzc4OTc1ODk4MDM1NzY5NjkzNiI+IlZhaWtlaGVsaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9kZWZhdWx0X3dpdGhfYWN0dWFsIiBtc2dpZD0iODEyOTU2MzQ4MDg5NTk5MDM3MiI+IlZhaWtlaGVsaW4gKDx4bGlmZjpnIGlkPSJBQ1RVQUxfUklOR1RPTkUiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3NpbGVudCIgbXNnaWQ9Ijc5Mzc2MzQzOTI0MDg5NzcwNjIiPiJQdXVkdWIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9waWNrZXJfdGl0bGUiIG1zZ2lkPSIzNTE1MTQzOTM5MTc1MTE5MDk0Ij4iSGVsaW5hZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3Vua25vd24iIG1zZ2lkPSI1NDc3OTE5OTg4NzAxNzg0Nzg4Ij4iVHVuZG1hdHUgaGVsaW4iPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjY1NDEyMzk4NzQxODE2ODY5MyI+IldpRmktdsO1cmsgb24gc2FhZGF2YWwiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQxOTI0MjQ0ODkxNjgzOTczODYiPiJXaUZpLXbDtXJndWQgc2FhZGF2YWwiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlX2RldGFpbGVkIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTYzNDEwMTQ1MDM0MzI3NzM0NSI+IkF2YXR1ZCBXaUZpIHbDtXJrIG9uIHNhYWRhdmFsIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3OTE1ODk1MzIzNjQ0MjkyNzY4Ij4iQXZhdHVkIFdpRmktdsO1cmd1ZCBvbiBzYWFkYXZhbCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4iTG9naWdlIHNpc3NlIFdpRmktdsO1cmt1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmV0d29ya19hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9Ijg0OTUxNTU1OTMzNTgwNTQ2NzYiPiJMb2dpZ2UgdsO1cmt1Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW5fZGV0YWlsZWQgKDgwMDAwODE5NDE0NDc5NzYxMTgpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3dhdGNoZG9nX25ldHdvcmtfZGlzYWJsZWQiIG1zZ2lkPSI3OTA0MjE0MjMxNjUxNTQ2MzQ3Ij4iRWkgc2FhbnVkIFdpRmktZ2Egw7xoZW5kdXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiBvbiBoYWxiIEludGVybmV0aS3DvGhlbmR1cy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI5NzYxMTc4MjY1OTMyNDUxNyI+IldpRmkgRGlyZWN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4iS8OkaXZpdGFnZSBXaUZpIG90c2XDvGhlbmR1cy4gU2VlIGzDvGxpdGFiIHbDpGxqYSBXaUZpIGtsaWVuZGkvbGV2aWFsYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mYWlsZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NjM2Njk2Nzc5MzU2MjMwODQiPiJXaUZpIG90c2XDvGhlbmR1c2Uga8OkaXZpdGFtaW5lIGViYcO1bm5lc3R1cy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIwNjgzMjE4ODE2NzM3MzQ4ODYiPiJXaUZpIERpcmVjdCBvbiBzZWVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiJQdXV0ZWQgc2VhZGV0ZSBqYW9rcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiJOw7V1c3R1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVjbGluZSIgbXNnaWQ9IjIxMTIyMjU0NTE3MDYxMzc4OTQiPiJLZWVsZHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3NlbnRfdGl0bGUiIG1zZ2lkPSIxMzE4OTc1MTg1MTEyMDcwNzM0Ij4iS3V0c2Ugb24gc2FhZGV0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3RvX2Nvbm5lY3RfdGl0bGUiIG1zZ2lkPSI0OTU4ODAzOTQ4NjU4NTMzNjM3Ij4iS3V0c2Ugw7xoZW5kYW1pc2VrcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2Zyb21fbWVzc2FnZSIgbXNnaWQ9IjU3MDM4OTE3NDczMTk1MTc2OSI+IlNhYXRqYToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90b19tZXNzYWdlIiBtc2dpZD0iMjQ4OTY4OTc0NTIyMDQ0MDk5Ij4iU2FhamE6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW50ZXJfcGluX21lc3NhZ2UiIG1zZ2lkPSI1OTIwOTI5NTUwMzY3ODI4OTcwIj4iU2lzZXN0YWdlIG7DtXV0YXYgUElOLWtvb2Q6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfc2hvd19waW5fbWVzc2FnZSIgbXNnaWQ9Ijg1MzA1NjMzMjM4ODA5MjEwOTQiPiJQSU4ta29vZDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODAxMjk4MTI1Nzc0MjIzMjQ3NSI+IlRhaHZlbGFydnV0aSDDvGhlbmR1cyBXaUZpLWdhIGthdGtlc3RhdGFrc2UgYWp1dGlzZWx0LCBrdWkgc2VlIG9uIMO8aGVuZGF0dWQgc2VhZG1lZ2EgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzM2MzkwNzIxMzc4NzQ2OTE1MSI+IlRlbGVmb25pIMO8aGVuZHVzIFdpRmktZ2Ega2F0a2VzdGF0YWtzZSBhanV0aXNlbHQsIGt1aSBzZWUgb24gw7xoZW5kYXR1ZCBzZWFkbWVnYSA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiJTaXNlc3RhIHTDpGhlbcOkcmsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF90aXRsZSIgbXNnaWQ9IjcyOTY2MTI3ODExMjg5MTc3MTkiPiJTTVMtc8O1bnVtaXRlIHNhYXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyBzYWFkYWIgc3V1cmVsIGh1bGdhbCBTTVMtc8O1bnVtZWlkLiBLYXMgdGFoYXRlIGx1YmFkYSBzZWxsZWwgcmFrZW5kdXNlbCBrYSBlZGFzcGlkaSBzw7VudW1laWQgc2FhdGE/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfeWVzIiBtc2dpZD0iMzY2MzcyNTk5Mzg1NTgxNjgwNyI+Ikx1YmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9ubyIgbXNnaWQ9IjYyNTQzODU2MTM5NTUzNDk4MiI+IktlZWxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9tZXNzYWdlIiBtc2dpZD0iMTY0NTQzNjQ2NjI4NTMxMDg1NSI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IHNvb3ZpYiBzYWF0YSBzw7VudW1pIGFhZHJlc3NpbGUgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkRFU1RfQUREUkVTUyI+JTIkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSIzNDkyMDI1NzE5ODY4MDc4NDU3Ij4iU2VlICI8Zm9udCBmZ2NvbG9yPSIjZmZmZmIwNjAiPiJ2w7VpYiBww7VoanVzdGFkYSBrdWx1c2lkIjwvZm9udD4iIHRlaWUgbW9iaWlsaWtvbnRvbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3ByZW1pdW1fc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iNTUyMzgyNjM0OTEwNTEyMzY4NyI+PGZvbnQgZmdjb2xvcj0iI2ZmZmZiMDYwIj4iU2VlIGxpc2FiIGt1bHVzaWQgdGVpZSBtb2JpaWxpa29udG9sZS4iPC9mb250Pjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbGxvdyIgbXNnaWQ9IjQ0NTg4Nzg2MzcxMTEwMjM0MTMiPiJTYWFkYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiJUw7xoaXN0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX2Nob2ljZSIgbXNnaWQ9IjUyODk1Mzg1OTIyNzIyMTgxMzYiPiJKw6R0YSBtaW51IHZhbGlrIG1lZWxkZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4iU2FhdGUgbXV1dGEgamFvdGlzZXMgU2VhZGVkwqAmZ3Q7wqBSYWtlbmR1c2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbHdheXNfYWxsb3ciIG1zZ2lkPSIzMjQxMTgxMTU0ODY5NDkzMzY4Ij4iTHViYSBhbGF0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbmV2ZXJfYWxsb3ciIG1zZ2lkPSI0NDY5OTI3NjU3NzQyNjk2NzMiPiLDhHJhIGx1YmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiJTSU0ta2FhcnQgZWVtYWxkYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4iTW9iaWlsc2lkZXbDtXJrIGVpIG9sZSBzYWFkYXZhbCwga3VuaSBzaXNlc3RhdGUga2VodGl2YSBTSU0ta2FhcmRpIGphIHRhYXNrw6Rpdml0YXRlIHNlYWRtZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiJWYWxtaXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfdGl0bGUiIG1zZ2lkPSIzNzE5NjcwNTEyODg5Njc0NjkzIj4iU0lNLWthYXJ0IGxpc2F0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfbWVzc2FnZSIgbXNnaWQ9IjY1OTk5NDUzMDExNDEwNTAyMTYiPiJNb2JpaWxzaWRldsO1cmt1IHDDpMOkc2VtaXNla3MgdGFhc2vDpGl2aXRhZ2Ugc2VhZGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX3Jlc3RhcnRfYnV0dG9uIiBtc2dpZD0iNDcyMjQwNzg0MjgxNTIzMjM0NyI+IlRhYXNrw6Rpdml0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjgzNDkzNjI2MjMwNjg4MTkyOTUiPiJLZWxsYWFqYSBtw6TDpHJhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjU4Nzk0NTA2NTk0NTM3ODIyNzgiPiJLdXVww6RldmEgbcOkw6RyYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfc2V0IiBtc2dpZD0iNTc3NzA3NTYxNDMyMTA4Nzc1OCI+Ik3DpMOkcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfZG9uZSIgbXNnaWQ9IjI1MDc2ODM3NTE3NTkzMDg4MjgiPiJWYWxtaXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtc19uZXdfcGVybV9wcmVmaXgiIG1zZ2lkPSI4MjU3NzQwNzEwNzU0MzAxNDA3Ij48Zm9udCBzaXplPSIxMiIgZmdjb2xvcj0iI2ZmMzNiNWU1Ij4iVVVTOiAiPC9mb250Pjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybXNfZGVzY3JpcHRpb25fYXBwIiBtc2dpZD0iNTEzOTgzNjE0MzI5MzI5OTQxNyI+IlRlZW51c2VwYWtrdWphOiA8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vX3Blcm1pc3Npb25zIiBtc2dpZD0iNzI4MzM1NzcyODIxOTMzODExMiI+Ikx1YmUgcG9sZSB2YWphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybV9jb3N0c19tb25leSIgbXNnaWQ9IjQ5MDI0NzAzMjQxNDIxNTExMTYiPiJzZWUgdsO1aWIgb2xsYSB0YXN1bGluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2FjdGl2aXR5X3RpdGxlIiBtc2dpZD0iNDQ2NTA1NTE1NzIwOTY0ODY0MSI+IlVTQi1tYXNzbcOkbHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjU5MDE0NTkwNDEzOTg3NTE0OTUiPiJVU0Igw7xoZW5kYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+IlRlaWwgb24gYXJ2dXRpZ2Egw7xoZW5kdXMgVVNCIGthdWR1LiBQdXVkdXRhZ2UgYWxsb2xldmF0IG51cHB1LCBrdWkgc29vdml0ZSBmYWlsZSBhcnZ1dGkgamEgQW5kcm9pZGkgVVNCLXNhbHZlc3R1c3J1dW1pIHZhaGVsIGtvcGVlcmlkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA1MzUxMDAwNDQ2MDM3ODExIj4iT2xldGUgYXJ2dXRpZ2Egw7xoZW5kYXR1ZCBVU0Iga2F1ZHUuIFB1dWR1dGFnZSBhbGxvbGV2YXQgbnVwcHUsIGt1aSBzb292aXRlIGZhaWxlIGFydnV0aSBqYSBBbmRyb2lkaSBTRC1rYWFyZGkgdmFoZWwga29wZWVyaWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjEwNTIyNTk5MzAzNjk1MDgyMzUiPiJMw7xsaXRhIFVTQi1tw6RsdXNlYWRlIHNpc3NlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMDE3MDQ1MjE3MzY1NTQwNjU4Ij4iUHJvYmxlZW0gVVNCLXNhbHZlc3R1c3J1dW1pIGthc3V0YW1pc2VsIFVTQi1tw6RsdXNlYWRtZW5hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4iUHJvYmxlZW0gU0Qta2FhcmRpIGthc3V0YW1pc2VsIFVTQi1tw6RsdXNlYWRtZW5hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0Igw7xoZW5kYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTM5ODIyNzgzODI4MTgzNzYzIj4iUHV1ZHV0YWdlLCBldCBrb3BlZXJpZGEgZmFpbGUgYXJ2dXRpc3QvYXJ2dXRpc3NlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjMzNjA1ODM5NjY2MzUxNjAxNyI+IkzDvGxpdGEgVVNCLW3DpGx1c2VhZGUgdsOkbGphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2NTY4NTIwOTg1NTU2MjM4MjIiPiJVU0Itc2FsdmVzdHVzcnV1bWkgdsOkbGphbMO8bGl0YW1pc2VrcyBwdXVkdXRhZ2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF90aXRsZSIgbXNnaWQ9IjY2MDEyOTg1MTcwODc3NTg1MyI+IlVTQiBrYXN1dHVzZWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+IkVubmUgVVNCLXNhbHZlc3R1c3J1dW1pIHbDpGxqYWzDvGxpdGFtaXN0IGVyYWxkYWdlICh2w6RsanV0YWdlKSBBbmRyb2lkaSBVU0Itc2FsdmVzdHVzcnV1bSBhcnZ1dGlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQzOTY5NzgyNDYwNjEzMTE0Ij4iRW5uZSBVU0Itc2FsdmVzdHVzcnV1bWkgdsOkbGphbMO8bGl0YW1pc3QgZWVtYWxkYWdlICh2w6RsanV0YWdlKSBBbmRyb2lkaSBTRC1rYWFydCBhcnZ1dGlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiJMw7xsaXRhIFVTQi1tw6RsdXNlYWRlIHbDpGxqYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjE5NzAzNzQ4OTgyNjMwNjM4MzYiPiJUZWtraXMgcHJvYmxlZW0gVVNCLXNhbHZlc3R1c3J1dW1pIHbDpGxqYWzDvGxpdGFtaXNlZ2EuIEtvbnRyb2xsaWdlLCBrYXMgb2xldGUgVVNCLWhvc3RpIGVlbWFsZGFudWQsIGphIHByb292aWdlIHNlZWrDpHJlbCB1dWVzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RpdGxlIiBtc2dpZD0iOTYzMDM5MDMzNDcwNDc4Njk3Ij4iTMO8bGl0YSBVU0ItbcOkbHVzZWFkZSBzaXNzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+Ikt1aSBsw7xsaXRhdGUgVVNCLXNhbHZlc3R1c3J1dW1pIHNpc3NlLCB2w7VpdmFkIG3DtW5lZCBrYXN1dGF0YXZhZCByYWtlbmR1c2VkIHBlYXR1ZGEgZWdhIHBydXVnaSBvbGxhIHNhYWRhdmFsIGVubmUgVVNCLXNhbHZlc3R1c3J1dW1pIHbDpGxqYWzDvGxpdGFtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19lcnJvcl90aXRsZSIgbXNnaWQ9IjczMjM2NTg0Njk2MjY1MTQyMDciPiJVU0IgdG9pbWluZyBlYmHDtW5uZXN0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkbGdfb2siIG1zZ2lkPSI3Mzc2OTUzMTY3MDM5ODY1NzAxIj4iT0siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiLDnGhlbmRhdHVkIG1lZWRpdW1pc2VhZG1lbmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfcHRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE5NjA4MTcxOTIyMTYwNjQ4MzMiPiLDnGhlbmRhdHVkIGthYW1lcmFuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9jZF9pbnN0YWxsZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjc3NDcxMjgyNzg5MjA5MDc1NCI+IsOcaGVuZGF0dWQgaW5zdGFsbGlqYW5hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI3ODQ4MjM2OTc0MDg3NjUzNjY2Ij4iw5xoZW5kYXR1ZCBVU0ItbGlzYXNlYWRtZWdhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+IlB1dWR1dGFnZSB0ZWlzaSBVU0IgdmFsaWt1aWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiJWb3JtaW5kLiBVU0Itc2VhZGU/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+IkthcyB2b3JtaW5kYWRhIFNELWthYXJ0PyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MzQwMTY4NTM0MjU3NjEwNzgiPiJLw7VpayBVU0ItbcOkbHVzZWFkbWVsZSBzYWx2ZXN0YXR1ZCBmYWlsaWQga3VzdHV0YXRha3NlLiBTZWRhIHRvaW1pbmd1dCBlaSBzYWEgdGFnYXNpIHbDtXR0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4iS8O1aWsga2FhcmRpbCBvbGV2YWQgYW5kbWVkIGzDpGhldmFkIGthZHVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfYnV0dG9uX2Zvcm1hdCIgbXNnaWQ9IjQxMzEwNjQ1NjAxMjc0Nzg2OTUiPiJWb3JtaW5kYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+IlVTQi1zaWx1bWluZSDDvGhlbmRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjEwMTY2NTQ2Mjc2MjY0NzYxNDIiPiJQdXVkdXRhZ2UgVVNCLXNpbHVtaXNlIGtlZWxhbWlzZWtzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9pbnB1dF9tZXRob2QiIG1zZ2lkPSI0NjUzMzg3MzM2NzkxMjIyOTc4Ij4iVmFsaWdlIHNpc2VzdHVzbWVldG9kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSI5MDkxNjUyMTU3NzIyNDk1MTE2Ij4iU2VhZGlzdGEgc2lzZXN0dXNtZWV0b2RpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiJGw7zDvHNpbGluZSBrbGF2aWF0dXVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGFyZHdhcmUiIG1zZ2lkPSI3NTE3ODIxMDg2ODg4OTkwMjc4Ij4iUmlpc3R2YXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxNDA3MzY3MDE3MjYzMDMwNzczIj4iS2xhdmlhdHV1cmkgcGFpZ3V0dXNlIHZhbGltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0NjU5MDc3MDA0NDkyNTcwNjMiPiJQdXVkdXRhZ2Uga2xhdmlhdHV1cmkgcGFpZ3V0dXNlIHZhbGltaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfYWxwaGFiZXQiIG1zZ2lkPSI1NDMzMjc1NDg1NDk5MDM5MTk5Ij4iIEFCQ0RFRkdISUpLTE1OT1BRUlPFoFrFvVRVVlfDlcOEw5bDnFhZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfbnVtZXJpY19hbHBoYWJldCIgbXNnaWQ9IjQwMzAxNzA1MjQ1OTUxMjM2MTAiPiIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlPFoFrFvVRVVlfDlcOEw5bDnFhZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FuZGlkYXRlc19zdHlsZSIgbXNnaWQ9IjQzMzM5MTMwODk2MzcwNjIyNTciPjx1PiJrYW5kaWRhYWRpZCI8L3U+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDk4MTYwMDUzNTE0Njg1NjAiPiJVU0ItbcOkbHVzZWFkbWUgZXR0ZXZhbG0uIC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDU3NjAzNDE4OTcwOTk0MDUwIj4iU0Qta2FhcmRpIGV0dGV2YWxtaXN0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4Mjg3MzE5ODgyOTI2NzM3MDUzIj4iVmlnYWRlIGtvbnRyb2xsaW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiJUw7xoaSBVU0ItbcOkbHVzZWFkZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IlTDvGhpIFNELWthYXJ0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzg0MDEyMTA2NzQyNzI2OTUwMCI+IlVTQi1zYWx2ZXN0dXNydXVtIG9uIHTDvGhpIHbDtWkgZWkgdG9ldGEgZmFpbGlzw7xzdGVlbWkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjQxMDY1NjQxNzg2OTIzNjA0Ij4iU0Qta2FhcnQgb24gdMO8aGkgdsO1aSBlaSB0b2V0YXRhIHNlbGxlIGZhaWxpc8O8c3RlZW1pLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjA5MDA0Njc2OTUzMjcxMzU2MyI+IkthaGp1c3RhdHVkIFVTQi1tw6RsdXNlYWRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY0MTA3MjM5MDYwMTkxMDAxODkiPiJLYWhqdXN0YXR1ZCBTRC1rYWFydCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNzk1OTE3NTc4Mzk1MzMzMjgwIj4iVVNCLXNhbHZlc3R1c3J1dW0gb24ga2FoanVzdGF0dWQuIFByb292aWdlIHV1ZXN0aSB2b3JtaW5kYWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE3NTM4OTg1Njc1MjU1NjgyNTMiPiJTRC1rYWFydCBvbiBrYWhqdXN0YXR1ZC4gUHJvb3ZpZ2UgdXVlc3RpIHZvcm1pbmRhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE2NjE2ODMwMzEzMzA5NTEwNzMiPiJVU0Itc2VhZGUgZWVtYWxkYXRpIG9vdGFtYXR1bHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODcyMTUyODgyNjA0NDA3ODM3Ij4iU0Qta2FhcnQgb24gb290YW1hdHVsdCBlZW1hbGRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDMyOTg0ODgxOTg2NTU5NDI0MSI+IkFuZG1la2FvIHbDpGx0aW1pc2VrcyBsYWh1dGFnZSBVU0ItbcOkbHVzZWFkZSBlbm5lIGVlbWFsZGFtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+IkFuZG1la2FvIHbDpGx0aW1pc2VrcyBsYWh1dGFnZSBTRC1rYWFydCBlbm5lIGVlbWFsZGFtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5Njc5NzM4OTMyNzAzNjAyMzAiPiJVU0Itc2VhZG1lIGVlbWFsZGFtaW5lIG9odXR1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4iU0Qta2FhcmRpIGVlbWFsZGFtaW5lIG9uIG9odXR1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTQyMTk1MzYxNjA2NDkzNTMwIj4iU2FhdGUgVVNCLW3DpGx1c2VhZG1lIG9odXR1bHQgZWVtYWxkYWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Njg4NDEyNzgxMzgzNzc2MDQiPiJTRC1rYWFyZGkgc2FhdGUgb2h1dHVsdCBlZW1hbGRhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ0ODYzNzcyMzAxNDAyMjc2NTEiPiJVU0ItbcOkbHVzZWFkZSBlZW1hbGRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkwMjUxODAzMDQwNDM4MTMxOCI+IkVlbWFsZGF0dWQgU0Qta2FhcnQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4iVVNCLW3DpGx1c2VhZGUgZWVtYWxkYXR1ZC4gU2lzZXN0YWdlIHV1cyBtZWVkaXVtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzg3MDEyMDY1Mjk4MzY1OTY0MSI+IlNELWthYXJ0IG9uIGVlbWFsZGF0dWQuIFNpc2VzdGFnZSB1dXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbGlzdF9lbXB0eSIgbXNnaWQ9IjE2NzUzODgzMzA3ODY4NDEwNjYiPiJTb2JpdmF0IHRlZ2V2dXN0IGVpIGxlaXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9Ijg3ODczNTIwNzQzMjY3NDg4OTIiPiJ2w6Ryc2tlbmRhIGtvbXBvbmVudGlkZSBrYXN1dHVzc3RhdGlzdGlrYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wa2dVc2FnZVN0YXRzIiBtc2dpZD0iMTEwNjYxMjQyNDI1NDI3NzYzMCI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBtdXV0YSBrb21wb25lbmRpIGtvaHRhIGtvZ3V0dWQga2FzdXR1c3N0YXRpc3Rpa2F0LiBNaXR0ZSBrYXN1dGFkYSB0YXZhcmFrZW5kdXN0ZSBwdWh1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM0MTAzNjMxMTIxMTQwNjY5MiI+IlNpc3Uga29wZWVyaW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzOTA2OTcxMjQyODgzMTc4MzEiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwgdsO1dHRhIHNpc3Uga29wZWVyaW1pc2VrcyBhcHBpIHZhaWtla29udGVpbmVydGVlbnVzZS4gTWl0dGUga2FzdXRhZGEgdGF2YXJha2VuZHVzdGUgcHVodWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSIxNjQyMDI0NDU1NzUwNDE0Njk0Ij4iTWVlZGlhdsOkbGp1bmRpIHRlZWtvbm5hIGtvb3N0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSI0OTMyODE4NzQ5NTQ3MjQ0MzQ2Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIGtvb3N0YWRhIHRlZWtvbm5hIG1lZWRpYXbDpGxqdW5kaXN0IHRlaXN0ZXNzZSB2w6RsaXN0ZXNzZSBzZWFkbWV0ZXNzZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9Ijc1NjU1NTIyMzc5Nzc4MTUwNDciPiJKdXVyZGVww6TDpHMgdsO1dG1la2FpdHNlZ2EgdHVydmFsaXNlbGUgdGFsbGV0dXNydXVtaWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNTg2NjI0NTQ4NDMwMzI4NTc2MiI+Ikx1YmFiIHJha2VuZHVzZWwgaGFua2lkYSBqdXVyZGVww6TDpHN1IHbDtXRtZWthaXRzZWdhIHR1cnZhbGlzZWxlIHRhbGxldHVzcnV1bWlsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIxNzIxOTUxODQyMDc4MjgzODciPiJWw7V0bWVrYWl0c2Uga3V2YW1pc2UgamEgcGVpdG1pc2UganVodGltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjMwNDM3MzIyOTA1MTg2MjkwNjEiPiJMdWJhYiByYWtlbmR1c2VsIHbDtXRtZWthaXRzZXQganVodGlkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiJTdXVtaSBqdWh0aW1pc2VrcyBwdXVkdXRhZ2Uga2FrcyBrb3JkYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdhZGdldF9ob3N0X2Vycm9yX2luZmxhdGluZyIgbXNnaWQ9IjQ4ODIwMDQzMTQ5MDY0NjYxNjIiPiJWaWRpbmF0IGVpIHNhYW51ZCBsaXNhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9nbyIgbXNnaWQ9IjgzMjA4NDU2NTE3MzczNjkwMjciPiJNaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9zZWFyY2giIG1zZ2lkPSI2NTgxMTAyNzE4MjI4MDc4MTEiPiJPdHNpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlbmQiIG1zZ2lkPSIyMzE2MTY2NTU2MzQ5MzE0NDI0Ij4iU2FhZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX25leHQiIG1zZ2lkPSIzMTM4ODQzOTA0MDA5ODEzODM0Ij4iSsOkcmdtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kb25lIiBtc2dpZD0iODk3MTUxNjExNzkxMDkzNDYwNSI+IlZhbG1pcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fcHJldmlvdXMiIG1zZ2lkPSIxNDQzNTUwMDM5MjUwMTA1OTQ4Ij4iRWVsbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX2RlZmF1bHQiIG1zZ2lkPSIyODQwOTIxODg1NTU4MDQ1NzIxIj4iVMOkaWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlhbF9udW1iZXJfdXNpbmciIG1zZ2lkPSI1Nzg5MTc2NDI1MTY3NTczNTg2Ij4iVmFsaSBudW1iZXJcbiBrYXN1dGFkZXMgbnVtYnJpdCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfY29udGFjdF91c2luZyIgbXNnaWQ9IjQ5NDc0MDUyMjY3ODgxMDQ1MzgiPiJMb28ga29udGFrdFxubnVtYnJpZ2EgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2hlYWRlciIgbXNnaWQ9IjIxMDYxMDM4MTc5Mzc4NTk2NjIiPiLDnGtzIHbDtWkgbWl0dSByYWtlbmR1c3QgdGFvdGxldmFkIGx1YmEgcMOkw6RzZWRhIG7DvMO8ZCBqYSBlZGFzcGlkaSB0ZWllIGtvbnRvbGUganV1cmRlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9mb290ZXIiIG1zZ2lkPSIzMTI1MjExMzQzMzc5Mzc2NTYxIj4iS2FzIHNvb3ZpdGUgdGFvdGx1c2UgbHViYWRhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdyYW50X3Blcm1pc3Npb25zX2hlYWRlcl90ZXh0IiBtc2dpZD0iNjg3NDQ5NzQwODIwMTgyNjcwOCI+Ikp1dXJkZXDDpMOkc3V0YW90bHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWxsb3ciIG1zZ2lkPSI3MjI1OTQ4ODExMjk2Mzg2NTUxIj4iTHViYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4iS2VlbGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjQ4Njc1OTc5NTkyNjIzNzkwNyI+IlRhb3RsZXR1ZCBsdWJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWlzc2lvbl9yZXF1ZXN0X25vdGlmaWNhdGlvbl93aXRoX3N1YnRpdGxlIiBtc2dpZD0iODUzMDM5MzEzOTYzOTU2MDE4OSI+Ikx1YmEgb24gdGFvdGxldHVkXG5rb250b2xlIDx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRfbWV0aG9kX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjgzNTU3MTc5OTQ0OTkyNjQ5Ij4iU2lzZXN0dXNtZWV0b2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIzNjg3OTY5MTM4Mzc1MDkyNDIzIj4iU8O8bmtyb29uaW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI0MTQ4MTIwNzQyMDk2NDc0NjQxIj4iSnV1cmRlcMOkw6RzZXRhdnVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4iVGF1c3RhcGlsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+Ik11dXRrZSB0YXVzdGFwaWx0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ik3DpHJndWFubmV0ZSBrdXVsYW1pc3RlZW51cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIG9uIGFrdGl2ZWVyaXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTi1pIGFrdGl2ZWVyaXMgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVsO1cmd1IGhhbGRhbWlzZWtzIHB1dWR1dGFnZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dF9sb25nIiBtc2dpZD0iNjQwNzM1MTAwNjI0OTE3NDQ3MyI+IsOcaGVuZGF0dWQgc2VhbnNpZ2EgPHhsaWZmOmcgaWQ9IlNFU1NJT04iPiVzPC94bGlmZjpnPi4gVsO1cmd1IGhhbGRhbWlzZWtzIHB1dWR1dGFnZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGluZyIgbXNnaWQ9IjY0NDM0Mzg5NjQ0NDA5NjA3NDUiPiLDnGhlbmRhbWluZSBhbGF0aSBzZWVzIFZQTi1pZ2Eg4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiLDnGhlbmRhdHVkIGFsYXRpIHNlZXMgVlBOLWlnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9lcnJvciIgbXNnaWQ9IjYwMDkyNDk4MTQwMzQ3MDgxNzUiPiJBbGF0aSBzZWVzIFZQTi1pIHZpZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29uZmlnIiBtc2dpZD0iNjQxNTg5OTE1MDY3MTUzNzk3MCI+IlB1dWR1dGFnZSBzZWFkaXN0YW1pc2VrcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVwbG9hZF9maWxlIiBtc2dpZD0iMjg5Nzk1NzE3MjM2NjczMDQxNiI+IlZhbGlnZSBmYWlsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9fZmlsZV9jaG9zZW4iIG1zZ2lkPSI2MzYzNjQ4NTYyMTcwNzU5NDY1Ij4iw5xodGVnaSBmYWlsaSBwb2xlIHZhbGl0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXNldCIgbXNnaWQ9IjI0NDgxNjgwODA5NjQyMDk5MDgiPiJMw6RodGVzdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdWJtaXQiIG1zZ2lkPSIxNjAyMzM1NTcyMDg5OTExOTQxIj4iU2FhZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXJfbW9kZV9kaXNhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjMxNjQ3NjgyMTIwMDM4NjQzMTYiPiJBdXRvcmXFvmlpbSBsdWJhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FyX21vZGVfZGlzYWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgwMzUyMzA1Mzc1NjM1MDMyNjIiPiJBdXRvcmXFvmlpbWlzdCB2w6RsanVtaXNla3MgcHV1ZHV0YWdlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRldGhlcmVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjMxNDY2OTQyMzQzOTgyMDI2MDEiPiJKYWdhbWluZSB2w7VpIHTDtsO2cHVua3Qgb24gYWt0aWl2bmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjY4NTcwMzE3NjAxMDMwNjI5ODIiPiJTZWFkaXN0YW1pc2VrcyBwdXVkdXRhZ2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFja19idXR0b25fbGFiZWwiIG1zZ2lkPSIyMzAwNDcwMDA0NTAzMzQzNDM5Ij4iVGFnYXNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmV4dF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMDgwNTU1MTA0Njc3OTkyNDA4Ij4iSsOkcmdtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2tpcF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMjc1MzYyMjk5NDcxNjMxODE5Ij4iSsOkdGEgdmFoZWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVfd2FybmluZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0ODkwODk0MjY3NDU0ODY3Mjc2Ij4iS8O1cmdlIG1vYmlpbHNlIGFuZG1lc2lkZSBrYXN1dHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVfd2FybmluZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjMzNDA4MjIyMjg1OTkzMzc3NDMiPiJNb2JpaWxzZSBhbmRtZXNpZGUga2FzdXRhbWlzZSBrb2h0YSBsaXNhdGVhYmUgc2FhbWlzZWtzIHB1dWR1dGFnZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjI2OTU0MTg5NzcyOTc4MTMzMiI+Ik1vYmlpbGkgYW5kbWVtYWh1cGlpcmFuZyDDvGxldGF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI1NDQzNDU3MzIxMzU0OTA3MTgxIj4iTW9iaWlsc2UgYW5kbWVzaWRlIGthc3V0YW1pc2Uga29odGEgbGlzYXRlYWJlIHNhYW1pc2VrcyBwdXVkdXRhZ2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9fbWF0Y2hlcyIgbXNnaWQ9IjgxMjk0MjE5MDg5MTU4NDA3MzciPiJWYXN0ZWQgcHV1ZHV2YWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmaW5kX29uX3BhZ2UiIG1zZ2lkPSIxOTQ2Nzk5MjMzODIyODIwMzg0Ij4iT3RzaWdlIGxlaGVsdCI8L3N0cmluZz4KLSAgPHBsdXJhbHMgbmFtZT0ibWF0Y2hlc19mb3VuZCI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxNjcxNDcwODExMzY1Nzk0MzkiPiIxIHZhc3RlIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NjQxODcyNzk3MDY3NjA5MTc3Ij4iPHhsaWZmOmcgaWQ9IklOREVYIj4lZDwveGxpZmY6Zz4vPHhsaWZmOmcgaWQ9IlRPVEFMIj4lZDwveGxpZmY6Zz4iPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbW9kZV9kb25lIiBtc2dpZD0iNzIxNzU4MTY0MDQ2MTkyMjI4OSI+IlZhbG1pcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkyMzgxMDQ0ODUwNzYxMjc0NiI+IlVTQi1zYWx2ZXN0dXNydXVtaSBlZW1hbGRhbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMyNzg5NDk5ODQwOTUzNzE5MCI+IlNELWthYXJkaSBlZW1hbGRhbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiJVU0Itc2FsdmVzdHVzcnV1bWkga3VzdHV0YW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1OTY5ODg4NzU1MDcwNDMwNDIiPiJTRC1rYWFyZGkga3VzdHV0YW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiJVU0ItbcOkbHVzZWFkbWUgdMO8aGplbmRhbWluZSBlYmHDtW5uZXN0dXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IlNELWthYXJkaSBrdXN0dXRhbWluZSBlYmHDtW5uZXN0dXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4iU0Qta2FhcnQgZWVtYWxkYXRpIGVubmUgbGFodXRhbWlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MTgxODg3MjAwMDk1Njk2OTMiPiJVU0ItbcOkbHVzZWFkZXQga29udHJvbGxpdGFrc2UgcHJhZWd1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMzNDc2MjUwMzkwNDgyNzQ4MSI+IlNELWthYXJ0aSBrb250cm9sbGl0YWtzZSBwcmFlZ3UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcmVtb3ZlZCIgbXNnaWQ9IjcwMDE1MjY5MDUwNTc5NTIwOTciPiJTRC1rYWFydCBvbiBlZW1hbGRhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI1ODMwODE0MzQ5MjUwODM0MjI1Ij4iUHJhZWd1IGthc3V0YWIgVVNCLW3DpGx1c2VhZGV0IGFydnV0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzA2MTMwNTY4MTMzNTQwNDM1Ij4iUHJhZWd1IGthc3V0YWIgU0Qta2FhcnRpIGFydnV0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV91bmtub3duX3N0YXRlIiBtc2dpZD0iNzI5MTkyNzgyMTk3MjkwMzg1Ij4iVsOkbGluZSBtZWVkaXVtIG9uIHR1bmRtYXR1cyBvbGVrdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhcmUiIG1zZ2lkPSIxNzc4Njg2NjE4MjMwMDExOTY0Ij4iSmFnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmQiIG1zZ2lkPSI0ODA4MjcwOTAwMzIyOTg1OTYwIj4iT3RzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndlYnNlYXJjaCIgbXNnaWQ9IjQzMzcxNTc5Nzc0MDAyMTE1ODkiPiJWZWViaW90c2luZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmRfbmV4dCIgbXNnaWQ9IjU3NDIxMjQ2MTg5NDIxOTM5NzgiPiJMZWlhIGrDpHJnbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmRfcHJldmlvdXMiIG1zZ2lkPSIyMTk2NzIzNjY5Mzg4MzYwNTA2Ij4iTGVpYSBlZWxtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZUaWNrZXIiIG1zZ2lkPSI1NjIyNjgzOTEyNjE2NDk2MTcyIj4iQXN1a29oYXDDpHJpbmcga2FzdXRhamFsdCA8eGxpZmY6ZyBpZD0iTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZUaXRsZSIgbXNnaWQ9IjU0NDY4NTg3MTcxNTc0MTY4MzkiPiJBc3Vrb2hhcMOkcmluZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmTWVzc2FnZSIgbXNnaWQ9IjEzNzQ3MTgwMjMyMjQwMDA3MDIiPiJUYW90bGVqYTogPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+ICg8eGxpZmY6ZyBpZD0iU0VSVklDRSI+JTIkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZZZXMiIG1zZ2lkPSIyMzQ2NTY2MDcyODY3MjEzNTYzIj4iSmFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZObyIgbXNnaWQ9IjExNDY1NjQ5MzczNDY0NTQ4NjUiPiJFaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlcyIgbXNnaWQ9IjUyOTYzMjE4NTA2NjI3NDY4OTAiPiJLdXN0dXRhbWlzdGUgcGlpcmFydiBvbiDDvGxldGF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXNfZGVzYyIgbXNnaWQ9IjQ5NjU1MTY3MTAwODY5NDI0NSI+Ikt1c3R1dGF0YXZhZCDDvGtzdXNlZCBrb250b2wgPHhsaWZmOmcgaWQ9IkFDQ09VTlRfTkFNRSI+JTMkczwveGxpZmY6Zz4gc8O8bmtyb29uaW1pc3TDvMO8YmkgPHhsaWZmOmcgaWQ9IlRZUEVfT0ZfU1lOQyI+JTIkczwveGxpZmY6Zz4gamFva3M6IDx4bGlmZjpnIGlkPSJOVU1CRVJfT0ZfREVMRVRFRF9JVEVNUyI+JTEkZDwveGxpZmY6Zz4uIE1pZGEgc29vdml0ZSB0ZWhhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN5bmNfcmVhbGx5X2RlbGV0ZSIgbXNnaWQ9IjI1NzI2MDAxMDMxMjI1OTYyNDMiPiJLdXN0dXRhIMO8a3N1c2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3luY191bmRvX2RlbGV0ZXMiIG1zZ2lkPSIyOTQxMzE3MzYwNjAwMzM4NjAyIj4iVsO1dGtlIGt1c3R1dGFtaXNlZCB0YWdhc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX2RvX25vdGhpbmciIG1zZ2lkPSIzNzQzNzY0NzQwNDMwODIxODQ1Ij4iw4RyYSB0ZWUgcHJhZWd1IG1pZGFnaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9hY2NvdW50X2xhYmVsIiBtc2dpZD0iNTY1NTIwMzA4OTc0NjQyMzkyNyI+IktvbnRvIHZhbGltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRkX2FjY291bnRfbGFiZWwiIG1zZ2lkPSIyOTM1MjY3MzQ0ODQ5OTkzNTUzIj4iS29udG8gbGlzYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZGRfYWNjb3VudF9idXR0b25fbGFiZWwiIG1zZ2lkPSIzNjExOTgyODk0ODUzNDM1ODc0Ij4iTGlzYSBrb250byI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjI0MTIwNzIyNzI4MzIyODQzMTMiPiJTdXVyZW5kYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2RlY3JlbWVudF9idXR0b24iIG1zZ2lkPSI0NzYwNTA3NzgzODY3NzkwNjciPiJWw6RoZW5kYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfbW9kZSIgbXNnaWQ9IjMwNzMxMDEwNjc0NDE2Mzg0MjgiPiI8eGxpZmY6ZyBpZD0iVkFMVUUiPiVzPC94bGlmZjpnPiBwdXVkdXRhZ2UgamEgaG9pZGtlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9hY3Rpb24iIG1zZ2lkPSI5MTAxNDczMDQ1ODkxODM1NDkwIj4iU3V1cmVuZGFtaXNla3MgbG9oaXN0YWdlIMO8bGVzLCB2w6RoZW5kYW1pc2VrcyBhbGxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iODg2NTg4NTExNDAyODYxNDMyMSI+Ik1pbnV0aXRlIHN1dXJlbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iNjI0NjgzNDkzNzA4MDY4NDc5MSI+Ik1pbnV0aXRlIHbDpGhlbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjM2NTIwNTYwNTU4MTAyMjMxMzkiPiJUdW5kaWRlIHN1dXJlbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjEzNzc0Nzk4NjM0MjkyMTQ3OTIiPiJUdW5kaWRlIHbDpGhlbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9zZXRfcG1fYnV0dG9uIiBtc2dpZD0iNDE0NzU5MDY5NjE1MTIzMDg2MyI+IlBNLWkgc2VhZG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfc2V0X2FtX2J1dHRvbiIgbXNnaWQ9IjgzMDIxNDAzNTM1Mzk0ODY3NTIiPiJBTS1pIHNlYWRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfaW5jcmVtZW50X21vbnRoX2J1dHRvbiIgbXNnaWQ9IjUzNjk5OTg0NzkwNjc5MzQxMTAiPiJLdXUgc3V1cmVuZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X21vbnRoX2J1dHRvbiIgbXNnaWQ9IjE4MzI2OTg5OTU1NDE3MjYwMTkiPiJLdXUgdsOkaGVuZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfaW5jcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI3MTMwNDY1NDEyMzA4MTczOTAzIj4iUMOkZXZhIHN1dXJlbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNDEzMTg4MTUyMTgxODc1MDAzMSI+IlDDpGV2YSB2w6RoZW5kYW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfeWVhcl9idXR0b24iIG1zZ2lkPSI2MzE4Njk3Mzg0MzEwODA4ODk5Ij4iQWFzdGEgc3V1cmVuZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X3llYXJfYnV0dG9uIiBtc2dpZD0iNDQ4MjAyMTgxMzQ5MTEyMTcxNyI+IkFhc3RhIHbDpGhlbmRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4iVMO8aGlzdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4iS3VzdHV0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4iVmFsbWlzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4iUmXFvmlpbWkgbXV1dG1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJUw7VzdHVrbGFodiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IlNpc2VzdHVza2xhaHYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJWYWxpZ2UgcmFrZW5kdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJKYWdhOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJKYWdhIHJha2VuZHVzZWdhIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iTGliaXN0YW1pc3BpZGUuIFB1dWR1dGFnZSBqYSBob2lka2UgYWxsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJMb2hpc3RhZ2Ugw7xsZXM6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJMb2hpc3RhZ2UgYWxsYTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkxvaGlzdGFnZSB2YXNha3VsZTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJMb2hpc3RhZ2UgcGFyZW1hbGU6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Ikx1a3UgYXZhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYWFtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IkjDpMOkbGV0dSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJIZWxpIG9uIHNlZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Ik90c2luZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IkF2YW1pc2VrcyB0w7VtbWFrZSBzw7VybWVnYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUGFyb29saWRlIGt1dWxhbWlzZWtzIMO8aGVuZGFnZSBwZWFrb21wbGVrdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJQdW5rdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MjkzNjAwNDk2NjAxNDkwMjE2Ij4iTGlpZ3UgYXZhbGVoZWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl91cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyMzc0OTY1NjI5NTIxNTI1ODkiPiJMaWlndSDDvGxlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tZW51X292ZXJmbG93X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjI5NTY1OTAzNzUwOTAwODQ1MyI+IlJvaGtlbSB2YWxpa3VpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI3OTY1OTg0MzYwOTAzNjkzOTAzIj4iJTEkcywgJTIkcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9zdWJ0aXRsZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI2OTg1NTQ2NTMwNDcxNzgwNzI3Ij4iJTEkcywgJTIkcywgJTMkcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfaW50ZXJuYWwiIG1zZ2lkPSI0ODkxOTE2ODMzNjU3OTI5MjYzIj4iU2lzZW1pbmUgc2FsdmVzdHVzcnV1bSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2Vfc2RfY2FyZCIgbXNnaWQ9IjMyODI5NDg4NjEzNzgyODY3NDUiPiJTRC1rYWFydCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiIiBtc2dpZD0iMzAxNzk1NDA1OTUzODUxNzI3OCI+IlVTQi1tw6RsdXNlYWRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0cmFjdF9lZGl0X21lbnVfYnV0dG9uIiBtc2dpZD0iODk0MDQ3ODczMDQ5NjYxMDEzNyI+Ik11dWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTk1NTYzODg2MjEyMjIzMjM0MiI+IkFuZG1ldGUga2FzdXRhbWlzZSBob2lhdHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX2JvZHkiIG1zZ2lkPSIyODE0NjczNTUxNDcxOTY5OTU0Ij4iS2FzdXR1c2Uvc8OkdGV0ZSB2YWF0LiBwdXVkdXRhZ2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF90aXRsZSIgbXNnaWQ9IjcwOTMzMzQ0MTk1MTg3MDY2ODYiPiIyR+KAkzNHLWFuZG1lc2lkZSBvbiBrZWVsYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfdGl0bGUiIG1zZ2lkPSI3NjM2NDg5NDM2ODE5NDcwNzYxIj4iNEctYW5kbWVzaWRlIG9uIGtlZWxhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfdGl0bGUiIG1zZ2lkPSI3ODY5NDAyNTE5MzkxNjMxODg0Ij4iTW9iaWlsbmUgYW5kbWVzaWRlIG9uIGtlZWxhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3RpdGxlIiBtc2dpZD0iODk5MjE1NDczNjQ0MTI4NDg2NSI+IldpRmktYW5kbWVkIG9uIGtlZWxhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+Ikx1YmFtaXNla3MgcHV1ZHV0YWdlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjcwMjY3MzkxMjExMzgwMDUyMzEiPiIyRy0zRyBhbmRtZW1haHVwaWlyYW5nIMO8bGV0YXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjExMDY1NjI3NzkzMTEyMDkwMzkiPiI0RyBhbmRtZW1haHVwaWlyYW5nIMO8bGV0YXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIyNzkyNDA1NzIxNjU0MTIxNjgiPiJNb2JpaWxuZSBhbmRtZW1haHVwaWlyYW5nIMO8bGV0YXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+IldpRmktYW5kbWV0ZSBwaWlyIG9uIMO8bGV0YXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfc25vb3plZF9ib2R5IiBtc2dpZD0iNzAzNTQ5MDI3ODI5ODQ0MTc2NyI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lczwveGxpZmY6Zz4gw7xsZSBtw6TDpHJhdHVkIHBpaXJtw6TDpHJhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF90aXRsZSIgbXNnaWQ9IjU5NjUxNTczNjEwMzYzMjE5MTQiPiJUYXVzdGFuZG1lZCBvbiBwaWlyYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF9ib2R5IiBtc2dpZD0iNjc0MTUyMTMzMDk5NzQ1Mjk5MCI+IlBpaXJhbmd1IGVlbWFsZGFtaXNla3MgcHV1ZHV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNzbF9jZXJ0aWZpY2F0ZSIgbXNnaWQ9IjY1MTAwNDA0ODYwNDkyMzc2MzkiPiJUdXJ2YXNlcnRpZmlrYWF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlX2lzX3ZhbGlkIiBtc2dpZD0iNjgyNTI2MzI1MDc3NDU2OTM3MyI+IlNlZSBzZXJ0aWZpa2FhdCBvbiBrZWh0aXYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX3RvIiBtc2dpZD0iNDU0MjM5NDgwMjc0OTIxMDMyIj4iVsOkbGphc3RhdHVkIHN1Ympla3RpbGU6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tbW9uX25hbWUiIG1zZ2lkPSIyMjMzMjA5Mjk5NDM0MTcyNjQ2Ij4iUMOkcmlzbmltaToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvcmdfbmFtZSIgbXNnaWQ9IjY5NzM1NjExOTA3NjIwODUyMzYiPiJPcmdhbmlzYXRzaW9vbjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvcmdfdW5pdCIgbXNnaWQ9IjcyNjU5ODE4OTA0MjIwNzAzODMiPiJPcmdhbmlzYXRzaW9vbmnDvGtzdXM6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX2J5IiBtc2dpZD0iMjY0NzU4NDk4ODA1NzQ4MTU2NiI+IlbDpGxqYXN0YWphOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZhbGlkaXR5X3BlcmlvZCIgbXNnaWQ9Ijg4MTg4ODYxMzc1NDU5ODMxMTAiPiJLZWh0aXZ1czoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfb24iIG1zZ2lkPSI1ODk1MDE3NDA0MzYxMzk3MjMyIj4iVsOkbGphc3RhbWlza3V1cMOkZXY6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXhwaXJlc19vbiIgbXNnaWQ9IjM2NzYyNDI5NDk5MTU5NTk4MjEiPiJBZWd1bWlza3V1cMOkZXY6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VyaWFsX251bWJlciIgbXNnaWQ9Ijc1ODgxNDA2NzY2MDg2MjQ5MyI+IlNlZXJpYW51bWJlcjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmaW5nZXJwcmludHMiIG1zZ2lkPSI0NTE2MDE5NjE5ODUwNzYzMDQ5Ij4iU8O1cm1lasOkbGplZDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGEyNTZfZmluZ2VycHJpbnQiIG1zZ2lkPSI0MzkxMjcxMjg2NDc3Mjc5MjYzIj4iU0hBLTI1NiBzw7VybWVqw6RsZzoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+IlNIQS0xIHPDtXJtZWrDpGxnOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2Nob29zZXJfdmlld19zZWVfYWxsIiBtc2dpZD0iNDI5MjU2OTM4Mzk3NjYzNjIwMCI+Ikt1dmEga8O1aWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI0NzEwMDEzODY0OTc0MDQwNjE1Ij4iVGVnZXZ1c2UgdmFsaW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGFyZV9hY3Rpb25fcHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjUyNDc2ODQ0MzU5NzkxNDkyMTYiPiJKYWdhbWluZSByYWtlbmR1c2VnYToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2RldmljZV9sb2NrZWQiIG1zZ2lkPSIzMDkyNzAzNDQ4NjkwNjY5NzY4Ij4iU2VhZGUgbHVrdXN0YXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsaXN0X2RlbGltZXRlciIgbXNnaWQ9IjM5NzUxMTc1NzIxODU0OTQxNTIiPiIsICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbmRpbmciIG1zZ2lkPSIzMjQ1NjUzNjgxMDA4MjE4MDMwIj4iU2FhdG1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoQnJvd3NlckRlZmF1bHQiIG1zZ2lkPSIyMDU3OTUxOTQ3Mjk3NjE0NzI1Ij4iS2FzIGvDpGl2aXRhZGEgYnJhdXNlcj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJTZXR1cENhbGxEZWZhdWx0IiBtc2dpZD0iNTgzNDk0ODQ2OTI1Mzc1ODU3NSI+IkthcyB2YXN0YXRhIGvDtW5lbGU/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfcmVzb2x2ZXJfdXNlX2Fsd2F5cyIgbXNnaWQ9IjgwMTc3NzA3NDc4MDE0OTQ5MzMiPiJBbGF0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9vbmNlIiBtc2dpZD0iMjQwNDY0NDc5NzE0OTE3Mzc1OCI+IkFpbnVsdCDDvGtzIGtvcmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MTcwNTM4OTgxNjcxMjc0NzEiPiJUYWh2ZWxhcnZ1dGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjM5MjkxMjczNDIwMTQwMTIzIj4iVGVsZWZvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9oZWFkcGhvbmVzIiBtc2dpZD0iODExOTk3MTg0MzgwMzQzOTExMCI+IkvDtXJ2YWtsYXBpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9kb2NrX3NwZWFrZXJzIiBtc2dpZD0iNjI0MDYwMjk4MjI3NjU5MTg2NCI+IkRva2kga8O1bGFyaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X21lZGlhX3JvdXRlX25hbWVfaGRtaSIgbXNnaWQ9IjI0NTA5NzAzOTkwMjM0NzgwNTUiPiJIRE1JIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlPDvHN0ZWVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGgtaGVsaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iSnVodG1ldGEgZWtyYWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IlZhbG1pcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik1lZWRpYXbDpGxqdW5kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNrYW5lZXJpbmcgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iw5xoZW5kYW4uLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IlNhYWRhdmFsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI2NzM5ODk5OTYyNjgxODg2NDAxIj4iRWkgb2xlIHNhYWRhdmFsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiJLYXN1dHVzZWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfYnVpbHRfaW5fZGlzcGxheV9uYW1lIiBtc2dpZD0iMjU4MzEzNDI5NDI5MjU2Mzk0MSI+IlNpc3NlZWhpdGF0dWQgZWtyYWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2hkbWlfZGlzcGxheV9uYW1lIiBtc2dpZD0iMTU1NTI2NDU1OTIyNzQ3MDEwOSI+IkhETUktZWtyYWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IsOcbGVrYXRlIG5yIC48eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCB0dXJ2YWxpbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+Ikp1aHRtZXRhIGVrcmFhbmnDvGhlbmR1cyBvbiBsb29kdWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iRWtyYWFuIG9uIG7DpGhhIHRlaXNlcyBzZWFkbWVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IkthdGtlc3RhIMO8aGVuZHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJIw6RkYWFiaWvDtW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iVW51c3Rhc2luIG11c3RyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4iVmFsZSBtdXN0ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiJWYWxlIHBhcm9vbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJWYWxlIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiJQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4iSm9vbmlzdGFnZSBvbWEgbXVzdGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iU2lzZXN0YWdlIFNJTS1pIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJTaXNlc3RhZ2UgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4iU2lzZXN0YWdlIHBhcm9vbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IlNJTSBvbiBuw7zDvGQga2VlbGF0dWQuIErDpHRrYW1pc2VrcyBzaXNlc3RhZ2UgUFVLLWtvb2QuIMOca3Npa2FzanUga8O8c2lnZSBvcGVyYWF0b3JpbHQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IlNpc2VzdGFnZSBzb292aXR1ZCBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJLaW5uaXRhZ2Ugc29vdml0dWQgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTS1rYWFyZGkgYXZhbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJWYWxlIFBJTi1rb29kLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlNpc2VzdGFnZSA04oCTOC1udW1icmlsaW5lIFBJTi1rb29kLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSy1rb29kaSBwaWtrdXMgcGVhYiBvbGVtYSB2w6RoZW1hbHQgOCBudW1icml0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlNpc2VzdGFnZSB1dWVzdGkgw7VpZ2UgUFVLLWtvb2QuIEtvcmR1dmthdHNldGUga29ycmFsIGtlZWxhdGFrc2UgU0lNIGrDpMOkZGF2YWx0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ta29vZGlkIGVpIG9sZSB2YXN0YXZ1c2VzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iTGlpZ2EgcGFsanUgbXVzdHJpa2F0c2VpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJBdmFtaXNla3MgbG9naWdlIHNpc3NlIG9tYSBHb29nbGVcJ2kga29udG9nYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+Ikthc3V0YWphbmltaSAoZS1wb3N0KSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4iUGFyb29sIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiJMb2dpIHNpc3NlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiJWYWxlIGthc3V0YWphbmltaSB2w7VpIHBhcm9vbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4iS2FzIHVudXN0YXNpdGUga2FzdXRhamFuaW1lIHbDtWkgcGFyb29saT9cbkvDvGxhc3RhZ2UgYWFkcmVzc2kgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IktvbnRvIGtvbnRyb2xsaW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJPbGV0ZSBQSU4ta29vZGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSBzaXNlc3RhbnVkLlxuXG5Qcm9vdmlnZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QgdXVlc3RpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJPbGV0ZSBwYXJvb2xpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgc2lzZXN0YW51ZC4gXG5cblByb292aWdlIHV1ZXN0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ikpvb25pc3Rhc2l0ZSBvbWEgYXZhbWlzbXVzdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkuXG5cblByb292aWdlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdCB1dWVzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4iT2xldGUgw7xyaXRhbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHRhaHZlbGFydnV0aXQgdmFsZXN0aSBhdmFkYS4gUMOkcmFzdCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCBsw6RodGVzdGF0YWtzZSB0YWh2ZWxhcnZ1dGkgdGVoYXNlIHZhaWtlc2VhZGV0ZWxlIGphIGvDtWlrIGthc3V0YWphYW5kbWVkIGzDpGhldmFkIGthb3RzaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4iT2xldGUgw7xyaXRhbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHRlbGVmb25pIHZhbGVzdGkgYXZhZGEuIFDDpHJhc3QgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQgbMOkaHRlc3RhdGFrc2UgdGVsZWZvbiB0ZWhhc2UgdmFpa2VzZWFkZXRlbGUgamEga8O1aWsga2FzdXRhamFhbmRtZWQgbMOkaGV2YWQga2FvdHNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4iT2xldGUgcMO8w7xkbnVkIHRhaHZlbGFydnV0aXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgYXZhZGEuIFRhaHZlbGFydnV0aSBsw6RodGVzdGF0YWtzZSBuw7zDvGQgdGVoYXNlIHZhaWtlc2VhZGV0ZWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+Ik9sZXRlIHDDvMO8ZG51ZCB0ZWxlZm9uaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSBhdmFkYS4gVGVsZWZvbiBsw6RodGVzdGF0YWtzZSBuw7zDvGQgdGVoYXNlIHZhaWtlc2VhZGV0ZWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJKb29uaXN0YXNpdGUgb21hIGF2YW1pc211c3RyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpLiBQw6RyYXN0IHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IHBhbHV0YWtzZSB0ZWlsIHRhaHZlbGFydnV0aSBhdmFkYSBtZWlsaWtvbnRvZ2EuXG5cbiBQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iSm9vbmlzdGFzaXRlIG9tYSBhdmFtaXNtdXN0cmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aS4gUMOkcmFzdCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCBwYWx1dGFrc2UgdGVpbCB0ZWxlZm9uIGF2YWRhIG1laWxpa29udG9nYS5cblxuIFByb292aWdlIHV1ZXN0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iRWVtYWxkYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNhZmVfbWVkaWFfdm9sdW1lX3dhcm5pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzI0MTYxOTM5NDc1NDc4MDY2Ij4iS2FzIHN1dXJlbmRhZGEgaGVsaXR1Z2V2dXN0IMO8bGUgc29vdml0YXR1ZCB0YXNlbWU/XG5QaWthYWphbGluZSBzdXVyZSBoZWxpdHVnZXZ1c2VnYSBtdXVzaWthIGt1dWxhbWluZSB2w7VpYiBrYWhqdXN0YWRhIGt1dWxtaXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbnRpbnVlX3RvX2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTYyNjQyNzM3MjMxNjA3MDI1OCI+IkjDtWxidXN0dXNlIGx1YmFtaXNla3MgaG9pZGtlIGthaHQgc8O1cm1lIGFsbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2VuYWJsZWQiIG1zZ2lkPSIxMzgxOTcyMDQ4NTY0NTQ3Njg1Ij4iSMO1bGJ1c3R1cyBvbiBsdWJhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9hY2Nlc3NpYmlsaXR5X2NhbmNlbGVkIiBtc2dpZD0iMzgzMzkyMzI1Nzk2NjYzNTY3MyI+IkjDtWxidXN0dXMgb24gdMO8aGlzdGF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiJQcmFlZ3VuZSBrYXN1dGFqYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3duZXJfbmFtZSIgbXNnaWQ9IjI3MTY3NTU0NjAzNzYwMjgxNTQiPiJPbWFuaWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX3RpdGxlIiBtc2dpZD0iNDUxMDM3MzA4MzA4MjUwMDE5NSI+IlZpZ2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbm9fcmVzdHJpY3RlZF9hY2NvdW50cyIgbXNnaWQ9IjU3Mzk0NjMyNDk2NzM3Mjc3MzYiPiJTZWUgcmFrZW5kdXMgZWkgdG9ldGEgcGlpcmF0dWQgcHJvZmlpbGlkZSBrb250b3NpZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub3RfZm91bmQiIG1zZ2lkPSIzNDI5MTQxODUzNDk4OTI3Mzc5Ij4iU2VsbGUgdG9pbWluZ3Uga8Okc2l0bGVtaXNla3MgZWkgbGVpdHVkIMO8aHRlZ2kgcmFrZW5kdXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmV2b2tlIiBtc2dpZD0iNTQwNDQ3OTE4NTIyODI3MTU4NiI+IlTDvGhpc3RhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMCIgbXNnaWQ9Ijc4NzU0Mjc0ODk0MjA4MjE3OTMiPiJJU08gQTAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2ExIiBtc2dpZD0iMzc2MDczNDQ5OTA1MDg3NTM1NiI+IklTTyBBMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTIiIG1zZ2lkPSI1OTczMjY2Mzc4MDIwMTQ0MzgyIj4iSVNPIEEyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMyIgbXNnaWQ9IjEzNzM0MDcxMDU2ODczMDA4ODQiPiJJU08gQTMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E0IiBtc2dpZD0iNjY4OTc3MjgwNzk4MjU5NzI1NCI+IklTTyBBNCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTUiIG1zZ2lkPSI1MzUzNTQ5NjUyMDE1NzQxMDQwIj4iSVNPIEE1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNiIgbXNnaWQ9Ijg1ODUwMzgwNDg2NzQ5MTE5MDciPiJJU08gQTYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E3IiBtc2dpZD0iNjY0MTgzNjcxNjk2MzgzOTExOSI+IklTTyBBNyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTgiIG1zZ2lkPSI3NTcxMTM5NDM3NDY1NjkzMzU1Ij4iSVNPIEE4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hOSIgbXNnaWQ9IjEzNzg0NTU4OTE5NTcxMTUwNzkiPiJJU08gQTkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2ExMCIgbXNnaWQ9IjI0ODA3NDc0NTc0Mjk0NzUzNDQiPiJJU08gQTEwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMCIgbXNnaWQ9IjM5NjU5MzUwOTc2NjExMDgwMzkiPiJJU08gQjAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IxIiBtc2dpZD0iMjUwNTc1MzI4NTAxMDExNTQzNyI+IklTTyBCMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjIiIG1zZ2lkPSI4NzYzODc0NzA5ODU5NDU4NDUzIj4iSVNPIEIyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMyIgbXNnaWQ9IjQyMTA1MDY2ODgxOTE3NjQwNzYiPiJJU08gQjMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I0IiBtc2dpZD0iNTc0OTQwNDE2NTg4ODUyNjAzNCI+IklTTyBCNCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjUiIG1zZ2lkPSI3NjQwNjI3NDE0NjIxOTA0NzMzIj4iSVNPIEI1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNiIgbXNnaWQ9IjczNDI5ODg4NjQ3MTI3NDg1NDQiPiJJU08gQjYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I3IiBtc2dpZD0iNTA2OTg0NDA2NTIzNTM4MjQyOSI+IklTTyBCNyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjgiIG1zZ2lkPSI3MzE2ODE4OTIyMjc4Nzc5Nzc0Ij4iSVNPIEI4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iOSIgbXNnaWQ9IjU0MTQ3MjcwOTQwMjY1MzIzNDEiPiJJU08gQjkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IxMCIgbXNnaWQ9IjUyNTEyNTM3MzE4MzIwNDgxODUiPiJJU08gQjEwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMCIgbXNnaWQ9IjQwMDMxMzgzNDI2NzE5NjQyMTciPiJJU08gQzAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MxIiBtc2dpZD0iMTkzNTE4ODA2MzM5MzU1MzAwOCI+IklTTyBDMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzIiIG1zZ2lkPSIzMTk3MzA3OTY5NzEyMDY5OTA0Ij4iSVNPIEMyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMyIgbXNnaWQ9IjQzMzU4MjYwODczMjE5MTM1MDgiPiJJU08gQzMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M0IiBtc2dpZD0iMzc0NTYzOTU5ODI4MTAxNTAwNSI+IklTTyBDNCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzUiIG1zZ2lkPSI4MjY5NDU3NzY1ODIyNzkxMDEzIj4iSVNPIEM1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNiIgbXNnaWQ9IjU2NjY2NjEwNTI2MDM0NjkzMCI+IklTTyBDNiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzciIG1zZ2lkPSI4Njc4NDEzMTgwNzgyNjA4NDk4Ij4iSVNPIEM3Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jOCIgbXNnaWQ9IjgzOTIzNzYyMDY2MjcwNDE3MzAiPiJJU08gQzgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M5IiBtc2dpZD0iOTE5MTYxMzM3MjMyNDg0NTQwNSI+IklTTyBDOSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzEwIiBtc2dpZD0iNzMyNzcwOTY5OTE4NDkyMDgyMiI+IklTTyBDMTAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGV0dGVyIiBtc2dpZD0iNDE5MTgwNTYxNTgyOTQ3Mjk1MyI+IkxldHRlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9ndnJubXRfbGV0dGVyIiBtc2dpZD0iNzg1MzM4MjE5MjY0OTQwNTUwNyI+IkdvdmVybm1lbnQgTGV0dGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2xlZ2FsIiBtc2dpZD0iNjY5Nzk4Mjk4ODI4MzgyMzE1MCI+IkxlZ2FsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2p1bmlvcl9sZWdhbCIgbXNnaWQ9IjM3Mjc3NDM5Njk5MDI3NTg5NDgiPiJKdW5pb3IgTGVnYWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGVkZ2VyIiBtc2dpZD0iMjgxODcxNDY0ODk2NjAxMjM2Ij4iTGVkZ2VyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX3RhYmxvaWQiIG1zZ2lkPSI1Nzc1OTY2NDE2MzMzNTc4MTI3Ij4iVGFibG9pZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndyaXRlX2ZhaWxfcmVhc29uX2NhbmNlbGxlZCIgbXNnaWQ9IjcwOTEyNTgzNzgxMjE2Mjc2MjQiPiJUw7xoaXN0YXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndyaXRlX2ZhaWxfcmVhc29uX2Nhbm5vdF93cml0ZSIgbXNnaWQ9IjgxMzI1MDU0MTc5MzUzMzc3MjQiPiJWaWdhIHNpc3Uga2lyanV0YW1pc2VsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX3BpbiIgbXNnaWQ9IjMzOTU5NTM0MjEzNjg0NzYxMDMiPiJTaXNlc3RhZ2UgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfb2xkX3BpbiIgbXNnaWQ9IjE0NjIyMDYyMjU1MTI5MTA3NTciPiJQcmFlZ3VuZSBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9uZXdfcGluIiBtc2dpZD0iNTk1OTYwNjY5MTYxOTk1OTE4NCI+IlV1cyBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jb25maXJtX3BpbiIgbXNnaWQ9Ijg1MDE1MjM4Mjk2MzMxNDYyMzkiPiJLaW5uaXRhZ2UgdXVzIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NyZWF0ZV9waW4iIG1zZ2lkPSI4MDE3NjAwMDAwMjYzNDUwMzM3Ij4iTG9vZ2UgUElOLWtvb2QgcGlpcmFuZ3V0ZSBtdXV0bWlzZWtzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCIgbXNnaWQ9IjIyMjQyMTQxOTA5MDY5OTQ1NDgiPiJQSU4ta29vZCBlaSBzb2JpLiBQcm9vdmlnZSB1dWVzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX3Rvb19zaG9ydCIgbXNnaWQ9IjgxNzM5ODI3NTYyNjU3Nzc3OTIiPiJQSU4ta29vZCBvbiBsaWlnYSBsw7xoaWtlLiBQZWFiIG9sZW1hIHbDpGhlbWFsdCA0LWtvaGFsaW5lLiI8L3N0cmluZz4KLSAgPHBsdXJhbHMgbmFtZT0icmVzdHJfcGluX2NvdW50ZG93biI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ4MzU2Mzk5Njk1MDM3Mjk4NzQiPiJWYWxlIFBJTi1rb29kLiBQcm9vdmlnZSAxIHMgcMOkcmFzdC4iPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjgwMzA2MDczNDMyMjMyODc2NTQiPiJWYWxlIFBJTi1rb29kLiBQcm9vdmlnZSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzIHDDpHJhc3QuIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAppbmRleCA5MmQ2ODdmLi5jZTdlMjAzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTI3LDE0ICsyNywxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0idGVyYWJ5dGVTaG9ydCIgbXNnaWQ9IjIzMTYxMzAxODE1OTE4Njk2MiI+Itiq2LHYp9io2KfbjNiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGV0YWJ5dGVTaG9ydCIgbXNnaWQ9IjU2Mzc4MTY2ODAxNDQ5OTAyMTkiPiLZvtiq2KfYqNin24zYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZpbGVTaXplU3VmZml4IiBtc2dpZD0iOTE2NDI5Mjc5MTUwMDUzMTk0OSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJHM8L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZsdDvYqNiv2YjZhiDYudmG2YjYp9mGJmd0OyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IuKAjyZsdDvYqNiv2YjZhiDYudmG2YjYp9mGJmd0OyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzIiBtc2dpZD0iNzg5OTgyOTUxNjA0ODgxMzIzNyI+IuKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzX3R3b19kb3RzIiBtc2dpZD0iMTIyODA3ODk5NDg2NjAzMDczNiI+Ii4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW1wdHlQaG9uZU51bWJlciIgbXNnaWQ9Ijc2OTQwNjMwNDIwNzk2NzY1MTciPiIo2KjYr9mI2YYg2LTZhdin2LHZhyDYqtmE2YHZhikiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1bmtub3duTmFtZSIgbXNnaWQ9IjIyNzc1NTY1NDY3NDI3NDY1MjIiPiIo2YbYp9i02YbYp9izKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIgbXNnaWQ9IjI2NjAwMjA5OTAwOTc3MzMwNzciPiLZvtiz2Kog2LXZiNiq24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0TXNpc2RuQWxwaGFUYWciIG1zZ2lkPSIyODUwODg5NzU0OTE5NTg0Njc0Ij4iTVNJU0ROMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+ItmF2LTaqdmEINiv2LEg2KfYqti12KfZhCDbjNinINqp2K8gTU1JINmG2KfZhdi52KrYqNixLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+IuKAj9mF2LTaqdmEINiv2LEg2KfYqti12KfZhCDbjNinINqp2K8gTU1JINmG2KfZhdi52KrYqNixLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1taUZkbkVycm9yIiBtc2dpZD0iNTIyNDM5ODIxNjM4NTMxNjQ3MSI+Iti52YXZhNqp2LHYryDZgdmC2Lcg2KjZhyDYtNmF2KfYsdmH4oCM2YfYp9uMINi02YXYp9ix2Ycg2q/bjNix24wg2KvYp9io2Kog2YXYrdiv2YjYryDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWQiIG1zZ2lkPSI4MTQ3Mjc4MzQ2NDE0NzE0MzE1Ij4i2LPYsdmI24zYsyDZgdi52KfZhCDYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkRm9yIiBtc2dpZD0iNjg1NjIyODE0MDQ1MzQ3MTA0MSI+Itiz2LHZiNuM2LMg2YHYudin2YQg2LTYryDYqNix2KfbjDoiPC9zdHJpbmc+CkBAIC00MiwxNCArNDIsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VSZWdpc3RlcmVkIiBtc2dpZD0iNjI3NTAxOTA4MjU5ODEwMjQ5MyI+Itir2KjYqiDYqNinINmF2YjZgdmC24zYqiDYp9mG2KzYp9mFINi02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRXJhc2VkIiBtc2dpZD0iMTI4ODU4NDY5NTI5NzIwMDk3MiI+Itm+2KfaqSDaqdix2K/ZhiDYqNinINmF2YjZgdmC24zYqiDYp9mG2KzYp9mFINi02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRJbmNvcnJlY3QiIG1zZ2lkPSI3NjEyMjA4ODM5NDUwMTI4NzE1Ij4i2LHZhdiyINmI2LHZiNivINin2LTYqtio2KfZhyDYp9iz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibW1pQ29tcGxldGUiIG1zZ2lkPSI4MjMyNTI3NDk1NDExNjk4MzU5Ij4iTU1JINqp2KfZhdmEINi02K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFkUGluIiBtc2dpZD0iOTAxNTI3NzY0NTU0NjcxMDAxNCI+Itm+24zZhiDZgtiv24zZhduMINqp2Ycg2YbZiNi02KrZh+KAjtin24zYryDYtdit24zYrSDZhtuM2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWRQdWsiIG1zZ2lkPSI1NDg3MjU3NjQ3MDgxMTMyMjAxIj4iUFVLINqp2Ycg2YbZiNi02KrZh+KAjNin24zYryDYtdit24zYrSDZhtuM2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+Itm+24zZhuKAjtmH2KfbjNuMINqp2Ycg2YjYp9ix2K8g2qnYsdiv2YfigI7Yp9uM2K8g2KjYpyDbjNqp2K/bjNqv2LEg2YXYt9in2KjZgtiqINmG2K/Yp9ix2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlDb21wbGV0ZSIgbXNnaWQ9IjgyMzI1Mjc0OTU0MTE2OTgzNTkiPiLigI9NTUkg2qnYp9mF2YQg2LTYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQaW4iIG1zZ2lkPSI5MDE1Mjc3NjQ1NTQ2NzEwMDE0Ij4i4oCP2b7bjNmGINmC2K/bjNmF24wg2qnZhyDZhtmI2LTYqtmH4oCO2KfbjNivINi12K3bjNitINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhZFB1ayIgbXNnaWQ9IjU0ODcyNTc2NDcwODExMzIyMDEiPiLigI9QVUsg2qnZhyDZhtmI2LTYqtmH4oCM2KfbjNivINi12K3bjNitINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pc21hdGNoUGluIiBtc2dpZD0iNjA5Mzc5MDU0NDk2ODYzNDE5Ij4i4oCP2b7bjNmG4oCO2YfYp9uM24wg2qnZhyDZiNin2LHYryDaqdix2K/Zh+KAjtin24zYryDYqNinINuM2qnYr9uM2q/YsSDZhdi32KfYqNmC2Kog2YbYr9in2LHZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQaW4iIG1zZ2lkPSIzODUwMDE4NDQ1MTg3NDc1Mzc3Ij4i24zaqSDZvtuM2YYg2KjZhtmI24zYs9uM2K8g2qnZhyA0INiq2KcgOCDYsdmC2YUg2KjYp9i02K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLbjNqpIFBVSyDYqNinIDgg2LHZgtmFINuM2Kcg2KjbjNi02KrYsSDYqtin24zZviDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4i2LPbjNmFINqp2KfYsdiqINi02YXYpyDYqNinIFBVSyDZgtmB2YQg2LTYr9mHINin2LPYqi4g2qnYryBQVUsg2LHYpyDYqNix2KfbjCDYqNin2LLar9i02KfbjNuMINii2YYg2KjZhtmI24zYs9uM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iUFVLMiDYsdinINio2LHYp9uMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINiz24zZhSDaqdin2LHYqiDYqNmG2YjbjNiz24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IuKAj9uM2qkgUFVLINio2KcgOCDYsdmC2YUg24zYpyDYqNuM2LTYqtixINiq2KfbjNm+INqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiLigI/Ys9uM2YUg2qnYp9ix2Kog2LTZhdinINio2KcgUFVLINmC2YHZhCDYtNiv2Ycg2KfYs9iqLiDaqdivIFBVSyDYsdinINio2LHYp9uMINio2KfYstqv2LTYp9uM24wg2KLZhiDYqNmG2YjbjNiz24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLigI9QVUsyINix2Kcg2KjYsdin24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2LPbjNmFINqp2KfYsdiqINio2YbZiNuM2LPbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuKAj9mG2KfZhdmI2YHZgiDYqNmI2K/YjCDZgtmB2YQg2LPbjNmFL1JVSU0g2LHYpyDZgdi52KfZhCDaqdmG24zYry4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g2KjYp9ixINiv24zar9ixINmF24zigIzYqtmI2KfZhtuM2K8g2KrZhNin2LQg2qnZhtuM2K8g2Ygg2b7YsyDYp9iyINii2YYg2LPbjNmFINqp2KfYsdiqINmC2YHZhCDZhduM4oCM2LTZiNivLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2K/bjNqv2LEg2YXbjOKAjNiq2YjYp9mG24zYryDYqtmE2KfYtCDaqdmG24zYryDZiCDZvtizINin2LIg2KLZhiDYs9uM2YUg2qnYp9ix2Kog2YLZgdmEINmF24zigIzYtNmI2K8uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLYtNmG2KfYs9mHINiq2YXYp9izINqv24zYsdmG2K/ZhyDZiNix2YjYr9uMIjwvc3RyaW5nPgpAQCAtNzAsMTQgKzc1LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT24iIG1zZ2lkPSI2MTc5NDI1MTgyODU2NDE4NDY1Ij4i2b7bjNi04oCM2YHYsdi2INi02YbYp9iz2Ycg2KrZhdin2LMg2q/bjNix2YbYr9mHINix2YjbjCDYutuM2LEg2YXYrdiv2YjYryDYp9iz2KouINiq2YXYp9izINio2LnYr9uMOiDZhdit2K/ZiNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9mZiIgbXNnaWQ9IjI1Njc5OTg2MzMxMjQ0MDg1NTIiPiLZvtuM2LTigIzZgdix2LYg2LTZhtin2LPZhyDYqtmF2KfYsyDar9uM2LHZhtiv2Ycg2LHZiNuMINi624zYsSDZhdit2K/ZiNivINin2LPYqi4g2KrZhdin2LMg2KjYudiv24w6INio2K/ZiNmGINmF2K3Yr9mI2K/bjNiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZU5vdFByb3Zpc2lvbmVkIiBtc2dpZD0iODYxNDgzMDE4MDUwODY4NjY2NiI+Itiz2LHZiNuM2LMg2K/Yp9ix2KfbjCDZhdis2YjYsiDZhtuM2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDTElSUGVybWFuZW50IiBtc2dpZD0iMzM3NzM3MTE0NTkyNjgzNTY3MSI+Iti02YXYpyDZhduM4oCO2KrZiNin2YbbjNivINiq2YbYuNuM2YUg2LTZhtin2LPZhyDYqtmF2KfYsyDar9uM2LHZhtiv2Ycg2LHYpyDYqti624zbjNixINiv2YfbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJQZXJtYW5lbnQiIG1zZ2lkPSIzMzc3MzcxMTQ1OTI2ODM1NjcxIj4i4oCP2LTZhdinINmF24zigI7YqtmI2KfZhtuM2K8g2KrZhti424zZhSDYtNmG2KfYs9mHINiq2YXYp9izINqv24zYsdmG2K/ZhyDYsdinINiq2LrbjNuM2LEg2K/Zh9uM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZENoYW5nZWRUaXRsZSIgbXNnaWQ9IjU1OTIxODkzOTg5NTYxODc0OTgiPiLYr9iz2KrYsdiz24wg2YXYrdiv2YjYryDYqti624zbjNixINuM2KfZgdiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRGF0YSIgbXNnaWQ9Ijg2NTM3OTQ3ODQ2OTAwNjU1NDAiPiLYs9ix2YjbjNizINiv2KfYr9mHINmF2LPYr9mI2K8g2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkVtZXJnZW5jeSIgbXNnaWQ9IjY1ODExNjM3NzkwNzI4MzM2NjUiPiLYs9ix2YjbjNizINin2LbYt9ix2KfYsduMINmF2LPYr9mI2K8g2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbk5vcm1hbCIgbXNnaWQ9IjQ5NTM4NjcwMTEzODk3NTA2NzMiPiLYs9ix2YjbjNizINi12YjYqtuMINmF2LPYr9mI2K8g2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGxWb2ljZSIgbXNnaWQ9IjMzOTY5NjM2NTIxMDgxNTEyNjAiPiLYqtmF2KfZhSDYs9ix2YjbjNiz4oCO2YfYp9uMINi12K/YpyDZhdiz2K/ZiNivINmH2LPYqtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsVm9pY2UiIG1zZ2lkPSIzMzk2OTYzNjUyMTA4MTUxMjYwIj4i4oCP2KrZhdin2YUg2LPYsdmI24zYs+KAjtmH2KfbjCDYtdiv2Kcg2YXYs9iv2YjYryDZh9iz2KrZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblNtcyIgbXNnaWQ9IjgzMTQzNTIzMjc0NjE2Mzg4OTciPiLYs9ix2YjbjNizINm+24zYp9mF2qkg2YXYs9iv2YjYryDYtNiv2Ycg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlRGF0YSIgbXNnaWQ9Ijk5NjYzNjQ4NzEwNjE3MTMyMCI+Itiz2LHZiNuM2LPigI7igI7Zh9in24wg2LXYr9inL9iv2KfYr9mHINmF2LPYr9mI2K8g2LTYr9mG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VEYXRhIiBtc2dpZD0iOTk2NjM2NDg3MTA2MTcxMzIwIj4i4oCP2LPYsdmI24zYs+KAjuKAjtmH2KfbjCDYtdiv2Kcv2K/Yp9iv2Ycg2YXYs9iv2YjYryDYtNiv2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Wb2ljZVNtcyIgbXNnaWQ9IjE4ODg1ODgxNTI3OTIwMjM4NzMiPiLYs9ix2YjbjNiz4oCM2YfYp9uMINi12YjYqtuML9m+24zYp9mF2qkg2YXYs9iv2YjYryDYtNiv2YfigIzYp9mG2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGwiIG1zZ2lkPSI1NjQzMDI4MjY0NDY2MDkyODIxIj4i2KrZhdin2YUg2LPYsdmI24zYs+KAjNmH2KfbjCDYtdiv2Kcv2K/Yp9iv2YcvINm+24zYp9mF2qkg2YXYs9iv2YjYryDZh9iz2KrZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1ZvaWNlIiBtc2dpZD0iMTI1ODM5MzgxMjMzNTI1ODAxOSI+Iti12YjYqtuMIjwvc3RyaW5nPgpAQCAtMTExLDE3ICsxMTYsMTcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZjRXJyb3IiIG1zZ2lkPSIzMzI3NTYwMTI2NTg4NTAwNzc3Ij4i2YXYtNqp2YQg2K/YsSDYp9iq2LXYp9mEINuM2Kcg2qnYryDZiNuM2pjar9uMINmG2KfZhdi52KrYqNixLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvck9rIiBtc2dpZD0iMTE5MTkxOTM3ODA4MzQ3MjIwNCI+Itiq2KPbjNuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3IiIG1zZ2lkPSI3OTU2MzkyNTExMTQ2Njk4NTIyIj4i2K7Yt9in24zbjCDYr9ixINi02KjaqdmHINmI2KzZiNivINiv2KfYtNiqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiJVUkwg2b7bjNiv2Kcg2YbYtNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiLYt9ix2K0g2qnZhNuMINiq2KPbjNuM2K8g2KfYudiq2KjYp9ixINiz2KfbjNiqINm+2LTYqtuM2KjYp9mG24wg2YbZhduM4oCO2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiLigI9VUkwg2b7bjNiv2Kcg2YbYtNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiLigI/Yt9ix2K0g2qnZhNuMINiq2KPbjNuM2K8g2KfYudiq2KjYp9ixINiz2KfbjNiqINm+2LTYqtuM2KjYp9mG24wg2YbZhduM4oCO2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckF1dGgiIG1zZ2lkPSIxNDM1MDY1NjI5NDM4MDQ0NTM0Ij4i2KrYo9uM24zYryDYp9i52KrYqNin2LEg2KfZhtis2KfZhSDZhti02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUHJveHlBdXRoIiBtc2dpZD0iMTc4ODIwNzAxMDU1OTA4MTMzMSI+Itiq2KPbjNuM2K8g2KfYudiq2KjYp9ixINin2LIg2LfYsduM2YIg2LPYsdmI2LEg2b7YsdmI2qnYs9uMINin2YbYrNin2YUg2YbYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckNvbm5lY3QiIG1zZ2lkPSI4NzE0MjczMjM2MzY0NjQwNTQ5Ij4i2KfYqti12KfZhCDYqNmHINiz2LHZiNixINin2YbYrNin2YUg2YbYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvcklPIiBtc2dpZD0iMjM0MDU1ODE5NzQ4OTMwMjE4OCI+Itio2LHZgtix2KfYsduMINin2LHYqtio2KfYtyDYqNinINiz2LHZiNixINmF2YXaqdmGINmG2KjZiNivLiDYqNi52K/Yp9mLINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVGltZW91dCIgbXNnaWQ9IjQ3NDM0MDM3MDM3NjI4ODM5NTQiPiLYstmF2KfZhiDYp9iq2LXYp9mEINio2Ycg2LPYsdmI2LEg2KrZhdin2YUg2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JSZWRpcmVjdExvb3AiIG1zZ2lkPSI4Njc5NTk2MDkwMzkyNzc5NTE2Ij4i2KfbjNmGINi12YHYrdmHINiv2KfYsdin24wg2KrYudiv2KfYryDYqNiz24zYp9ixINiy24zYp9iv24wg2KrYutuM24zYsSDZhdiz24zYsSDYs9ix2YjYsSDYp9iz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRTY2hlbWUiIG1zZ2lkPSI1MDE1NzMwODEyOTA2MTkyMjA4Ij4i2b7YsdmI2KraqdmEINm+2LTYqtuM2KjYp9mG24wg2YbZhduM4oCO2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkU2NoZW1lIiBtc2dpZD0iNTAxNTczMDgxMjkwNjE5MjIwOCI+IuKAj9m+2LHZiNiq2qnZhCDZvti02KrbjNio2KfZhtuMINmG2YXbjOKAjti02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGYWlsZWRTc2xIYW5kc2hha2UiIG1zZ2lkPSI5NjU0OTYwNjAwMDY1ODY0MSI+Itin2KrYtdin2YQg2KfZhdmGINin24zYrNin2K8g2YbYtNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckJhZFVybCIgbXNnaWQ9IjM2MzY5Mjk3MjI3Mjg4ODE5NzIiPiLYqNiv2YTbjNmEINmG2KfZhdi52KrYqNixINio2YjYr9mGIFVSTNiMINio2KfYsiDaqdix2K/ZhiDYtdmB2K3ZhyDZhdmF2qnZhiDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4i4oCP2KjYr9mE24zZhCDZhtin2YXYudiq2KjYsSDYqNmI2K/ZhiBVUkzYjCDYqNin2LIg2qnYsdiv2YYg2LXZgdit2Ycg2YXZhdqp2YYg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZSIgbXNnaWQ9IjIxNzA3ODg1MTUwNTI1NTg2NzYiPiLYr9iz2KrYsdiz24wg2KjZhyDZgdin24zZhCDYp9mG2KzYp9mFINmG2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlTm90Rm91bmQiIG1zZ2lkPSI2MjAzODU2NjEyMDQyNjU1MDg0Ij4i2YHYp9uM2YQg2K/Ysdiu2YjYp9iz2KrbjCDZvtuM2K/YpyDZhti02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVG9vTWFueVJlcXVlc3RzIiBtc2dpZD0iMTIzNTM5NjkyNzA4NzE4ODI1MyI+Itiv2LHYrtmI2KfYs9iq4oCM2YfYp9uMINiy24zYp9iv24wg2K/YsSDYrdin2YQg2b7Ysdiv2KfYsti0INin2LPYqi4g2KjYudiv2KfZiyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KQEAgLTEyOSw3ICsxMzQsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jIiBtc2dpZD0iODM1MzUyMzA2MDI2OTMzNTY2NyI+ItmH2YXar9in2YXigIzYs9in2LLbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luY05vdGlmaWNhdGlvblRpdGxlIiBtc2dpZD0iMzk3NzQzMzQ5MTkxOTAxNDU4Ij4i2YfZhdqv2KfZheKAjNiz2KfYstuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VUb29NYW55RGVsZXRlc05vdGlmaWNhdGlvbkRlc2MiIG1zZ2lkPSI4MTAwOTgxNDM1MDgwNjk2NDMxIj4i2KrYudiv2KfYryDZhdmI2KfYsdivINit2LDZgSDYtNiv2YcgPHhsaWZmOmcgaWQ9IkNPTlRFTlRfVFlQRSI+JXM8L3hsaWZmOmc+INio2LPbjNin2LEg2LLbjNin2K8g2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY0OTQwMTkyMzQxMDIxNTQ4OTYiPiLYrdin2YHYuNmHINix2KfbjNin2YbZh9mUINmE2YjYrduMINm+2LEg2KfYs9iqISDYqNix2K7bjCDYp9iyINmB2KfbjNmE4oCO2YfYpyDYsdinINit2LDZgSDaqdmG24zYryDYqtinINmB2LbYpyDYotiy2KfYryDYtNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjQ5NDAxOTIzNDEwMjE1NDg5NiI+IuKAj9it2KfZgdi42Ycg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2b7YsSDYp9iz2KohINio2LHYrtuMINin2LIg2YHYp9uM2YTigI7Zh9inINix2Kcg2K3YsNmBINqp2YbbjNivINiq2Kcg2YHYttinINii2LLYp9ivINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ3NTk5OTI4NjY4MDAwMDU0MSI+Itit2KfZgdi42Ycg2KrZhNmB2YYg2b7YsSDYp9iz2KouINio2LnYttuMINin2LIg2YHYp9uM2YTigIzZh9inINix2Kcg2K3YsNmBINqp2YbbjNivINiq2Kcg2YHYttinINii2LLYp9ivINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iNTg0ODQwMjEyNzQ1NTAyMTcxNCI+ItmF2YXaqdmGINin2LPYqiDYtNio2qnZhyDZhti42KfYsdiqINi02K/ZhyDYqNin2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X25vdGlfYnlfdW5rbm93biIgbXNnaWQ9IjQ0NzU0Mzc4NjIxODk4NTA2MDIiPiLYqtmI2LPYtyDbjNqpINi02K7YtSDYq9in2YTYqyDZhtin2LTZhtin2LMiPC9zdHJpbmc+CkBAIC0xNDgsMTEgKzE1MywxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fcHJvZ3Jlc3MiIG1zZ2lkPSIyMjgxMDc5MjU3MzI5OTgxMjAzIj4i2K/YsSDYrdin2YQg2K7Yp9mF2YjYtCDYtNiv2YbigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMzg1NzQ1MTc5NTU1NzMxNDcwIj4i2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LTZhdinINiu2KfZhdmI2LQg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQ5NzkyMTc1MjQyODIxMzUzIj4i2q/ZiNi024wg2LTZhdinINiu2KfZhdmI2LQg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtX3F1ZXN0aW9uIiBtc2dpZD0iMjkwNjU0NDc2ODg4MTEzNjE4MyI+Itii24zYpyDZhduM4oCO2K7ZiNin2YfbjNivINiq2YTZgdmGINiu2KfZhdmI2LQg2LTZiNiv2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtX3F1ZXN0aW9uIiBtc2dpZD0iMjkwNjU0NDc2ODg4MTEzNjE4MyI+IuKAj9ii24zYpyDZhduM4oCO2K7ZiNin2YfbjNivINiq2YTZgdmGINiu2KfZhdmI2LQg2LTZiNiv2J8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfdGl0bGUiIG1zZ2lkPSI3MDU0NTA5OTE0NTAwMTQwMzYxIj4i2LHYp9mH4oCM2KfZhtiv2KfYstuMINmF2KzYr9ivINiv2LEg2K3Yp9mE2Kog2KfZhdmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX2NvbmZpcm0iIG1zZ2lkPSI1NTI5Mzk0NDUwMjc4NDY2OCI+Itii24zYpyDZhduM4oCM2K7ZiNin2YfbjNivINio2Kcg2K3Yp9mE2Kog2KfZhdmGINix2KfZh+KAjNin2YbYr9in2LLbjCDZhdis2K/YryDaqdmG24zYr9ifINio2Kcg2KfbjNmGINqp2KfYsSDZh9mF2YfZlCDYqNix2YbYp9mF2YfigIzZh9in24wg2LTYrti1INir2KfZhNir24wg2qnZhyDZhti12Kgg2qnYsdiv2YfigIzYp9uM2K8g2LrbjNix2YHYudin2YQg2YXbjOKAjNi02YjZhtivLiDYqNinINix2KfZh+KAjNin2YbYr9in2LLbjCDYr9mI2KjYp9ix2Ycg2LPbjNiz2KrZhSDYp9uM2YYg2KjYsdmG2KfZhdmH4oCM2YfYpyDYr9mI2KjYp9ix2Ycg2KjYp9iy24zYp9io24wg2YXbjOKAjNi02YjZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiLYp9iu24zYsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vX3JlY2VudF90YXNrcyIgbXNnaWQ9Ijg3OTQ5MDY2NTg3MzIxOTM0NzMiPiLYqNix2YbYp9mF2YfigI7Zh9in24wg2KzYr9uM2K8g2YXZiNis2YjYryDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19yZWNlbnRfdGFza3MiIG1zZ2lkPSI4Nzk0OTA2NjU4NzMyMTkzNDczIj4i4oCP2KjYsdmG2KfZhdmH4oCO2YfYp9uMINis2K/bjNivINmF2YjYrNmI2K8g2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQwODQ3NzE0MDA4ODA1MzY2NSI+Itqv2LLbjNmG2YfigIzZh9in24wg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiLar9iy24zZhtmH4oCM2YfYp9uMINiq2YTZgdmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrIiBtc2dpZD0iMjg0NDk0NTE5MTc5MjExOTcxMiI+ItmC2YHZhCDYtdmB2K3ZhyI8L3N0cmluZz4KQEAgLTE2OCw3ICsxNzMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfYWlycGxhbmVfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iNTA3NTA3MDQ0Mjg1NDQ5MDI5NiI+Itit2KfZhNiqINmH2YjYp9m+24zZhdinINiu2KfZhdmI2LQg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiLYqNuM2LTYqtixINin2LIgOTk5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i2K3Yp9mE2Kog2KfbjNmF2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLYs9uM2LPYqtmFIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLigI/Ys9uM2LPYqtmFIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY29zdE1vbmV5IiBtc2dpZD0iNTQyOTgwODIxNzg2MTQ2MDQwMSI+Itiz2LHZiNuM2LPigIzZh9in24wg2LrbjNixINix2KfbjNqv2KfZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY29zdE1vbmV5IiBtc2dpZD0iMzI5MzMwMTkwMzQwOTg2OTQ5NSI+Itin2YbYrNin2YUg2qnYp9ix2YfYp9uM24wg2qnZhyDYqNix2KfbjCDYtNmF2Kcg2YfYstuM2YbZhyDYr9in2LHYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWVzc2FnZXMiIG1zZ2lkPSI3NTIxMjQ5MTQ4NDQ1NDU2NjYyIj4i2b7bjNin2YXigIzZh9in24wg2LTZhdinIjwvc3RyaW5nPgpAQCAtMTgwLDcgKzE4NSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbG9jYXRpb24iIG1zZ2lkPSI2MzUxNDk3NDI0MzY2OTIwNDkiPiLZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYtNmF2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2xvY2F0aW9uIiBtc2dpZD0iNTcwNDY3OTc2MzEyNDE3MDEwMCI+Itio2LEg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2YHbjNiy24zaqduMINiu2YjYryDZhti42KfYsdiqINiv2KfYtNiq2Ycg2KjYp9i024zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbmV0d29yayIgbXNnaWQ9IjU4MDg5ODMzNzc3MjcxMDk4MzEiPiLYp9ix2KrYqNin2Lcg2LTYqNqp2YfigIzYp9uMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19uZXR3b3JrIiBtc2dpZD0iNDQ3ODI5OTQxMzI0MTg2MTk4NyI+Itio2Ycg2YjbjNqY2q/bjOKAjtmH2KfbjCDZhdiu2KrZhNmBINi02KjaqdmHINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19uZXR3b3JrIiBtc2dpZD0iNDQ3ODI5OTQxMzI0MTg2MTk4NyI+IuKAj9io2Ycg2YjbjNqY2q/bjOKAjtmH2KfbjCDZhdiu2KrZhNmBINi02KjaqdmHINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSIxNTg1NDAzNTQ0MTYyMTI4MTA5Ij4i2KjZhNmI2KrZiNirIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iNTYyNTI4ODU3NzE2NDI4MjM5MSI+Itin2LIg2LfYsduM2YIg2KjZhNmI2KrZiNirINio2Ycg2K/Ys9iq2q/Yp9mH4oCM2YfYpyDZiCDYtNio2qnZh+KAjNmH2Kcg2K/Ys9iq2LHYs9uMINiv2KfYtNiq2Ycg2KjYp9i02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI4MzI5MjYxNjcwMTUxODcxMjM1Ij4i2KrZhti424zZhdin2Kog2LXYr9inIjwvc3RyaW5nPgpAQCAtMjI4LDggKzIzMyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGlzcGxheSIgbXNnaWQ9IjQyNzk5MDk2NzYwMzY0MDI2MzYiPiLYsdin2KjYtyDYqNix2YbYp9mF2YfZlCDYr9uM2q/YsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGlzcGxheSIgbXNnaWQ9IjYwNTEwMDIwMzE5MzMwMTM3MTQiPiLYsdmI24wg2LHYp9io2Lcg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINiv24zar9ixINin2KvYsSDYr9in2LHYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RvcmFnZSIgbXNnaWQ9IjE5NzExMTg3NzA1NDYzMzY5NjYiPiLYrdin2YHYuNmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc0NDIzMTg1MDI0NDY4NzQ5OTkiPiLYqNmHINit2KfZgdi42YfZlCBVU0Ig2K/Ys9iq2LHYs9uMINm+24zYr9inINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiLYqNmHINqp2KfYsdiqIFNEINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc0NDIzMTg1MDI0NDY4NzQ5OTkiPiLigI/YqNmHINit2KfZgdi42YfZlCBVU0Ig2K/Ys9iq2LHYs9uMINm+24zYr9inINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiLigI/YqNmHINqp2KfYsdiqIFNEINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiLZiNuM2pjar9uM4oCM2YfYp9uMINmC2KfYqNmE24zYqiDYr9iz2KrYsdiz24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9IjQyMDUxOTY4ODE2NzgxNDQzMzUiPiLZiNuM2pjar9uM4oCM2YfYp9uM24wg2qnZhyDZgdmG2KfZiNix24wg2YXZgduM2K8g2YXbjOKAjNiq2YjYp9mG2K8g2K/Ysdiu2YjYp9iz2Kog2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzkwMTcxNzkzNjkzMDE3MDMyMCI+Itio2KfYstuM2KfYqNuMINmF2K3YqtmI2KfbjCDZvtmG2KzYsdmHIjwvc3RyaW5nPgpAQCAtMjQxLDM4ICsyNDYsMzggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9IjIxMDM0NDAzOTE5MDI0MTIxNzQiPiLZhtmI2LTYqtin2LHbjCDYsdinINqp2Ycg2KrYp9uM2b4g2YXbjOKAjNqp2YbbjNivINmF2LTYp9mH2K/ZhyDZhtmF2KfbjNuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLYp9i32YTYp9i52KfYqiDYtNiu2LXbjCDZhdin2YbZhtivINi02YXYp9ix2Ycg2qnYp9ix2Kog2KfYudiq2KjYp9ix24wg2Ygg2q/YsNix2YjYp9qY2YfigIzZh9inINix2Kcg2LTYp9mF2YQg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLYutuM2LHZgdi52KfZhCDaqdix2K/ZhiDbjNinINiq2LrbjNuM2LEg2YbZiNin2LEg2YjYtti524zYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtmI2KfYsSDZiNi22LnbjNiqINix2Kcg2LrbjNix2YHYudin2YQg2qnZhtivINuM2Kcg2YbZhdin2K/Zh9in24wg2LPbjNiz2KrZhSDYsdinINin2LbYp9mB2Ycg24zYpyDYrdiw2YEg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtmI2KfYsSDZiNi22LnbjNiqINix2Kcg2LrbjNix2YHYudin2YQg2qnZhtivINuM2Kcg2YbZhdin2K/Zh9in24wg2LPbjNiz2KrZhSDYsdinINin2LbYp9mB2Ycg24zYpyDYrdiw2YEg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcyNDcyODE5MTEzODc5MzE0ODUiPiLZhtmI2KfYsSDZiNi22LnbjNiqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjcxNjExMzY2MDc5NTk3NjA2MCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDaqdmHINiq2KjYr9uM2YQg2KjZhyDZhtmI2KfYsSDZiNi22LnbjNiqINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzE2MTEzNjYwNzk1OTc2MDYwIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINqp2Ycg2KrYqNiv24zZhCDYqNmHINmG2YjYp9ixINmI2LbYuduM2Kog2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iMTE0ODE5ODc4NTkzNzQ4OTI2NCI+Itqv2LPYqtix2LQg2K/Yp9iv2YYv2KzZhdi5INqp2LHYr9mGINmG2YjYp9ixINmI2LbYuduM2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSI2OTE3NTQ5NDM3MTI5NDAxMTMyIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YbZiNin2LEg2KfYqNiy2KfYsSDYsdinINis2YXYuSDaqdmG2K8g24zYpyDYqNin2LIg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjY5MTc1NDk0MzcxMjk0MDExMzIiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtmI2KfYsSDYp9io2LLYp9ixINix2Kcg2KzZhdi5INqp2YbYryDbjNinINio2KfYsiDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnN0YWxsX3Nob3J0Y3V0IiBtc2dpZD0iNDI3OTA3MDIxNjM3MTU2NDIzNCI+ItmG2LXYqCDZhduM2KfZhuKAjNio2LHZh9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbF9zaG9ydGN1dCIgbXNnaWQ9IjgzNDEyOTU5MTYyODY3MzY5OTYiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2YXbjNin2YbigIzYqNix2YfYp9uMINi12YHYrdmHINin2LXZhNuMINix2Kcg2KjYr9mI2YYg2K/Yrtin2YTYqiDaqdin2LHYqNixINin2LbYp9mB2Ycg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdW5pbnN0YWxsX3Nob3J0Y3V0IiBtc2dpZD0iNDcyOTYzNDUyNDA0NDAwMzY5OSI+Itit2LDZgSDZhti12Kgg2YXbjNin2YbigIzYqNix2YfYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VuaW5zdGFsbF9zaG9ydGN1dCIgbXNnaWQ9IjY3NDU3NDM0NzQyNjUwNTc5NzUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2YXbjNin2YbigIzYqNix2YfYp9uMINi12YHYrdmHINin2LXZhNuMINix2Kcg2KjYr9mI2YYg2K/Yrtin2YTYqiDaqdin2LHYqNixINit2LDZgSDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjM5MDYwMDc4MzExOTI5OTA5NDYiPiLYqtix2LPbjNmFINmF2KzYr9ivINmF2LPbjNixINiq2YXYp9iz4oCM2YfYp9uMINiu2LHZiNis24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjUzMzEzMTg5MzE5Mzc0MDIwNDAiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrZhdin2LPigIzZh9in24wg2K7YsdmI2KzbjCDYsdinINm+2LHYr9in2LLYtCDaqdmG2K8g2Ygg2LTZhdin2LHZh+KAjtmH2KfbjNuMINqp2Ycg2KjYp9uM2K8g2q/YsdmB2KrZhyDYtNmI2YbYryDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYp9uM2YYg2YXYrNmI2LIg2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINio2Ycg2qnZhtiq2LHZhNiMINmH2K/Yp9uM2Kog2YXYrNiv2K8g24zYpyDYrNmE2Yjar9uM2LHbjCDYp9iyINiq2YXYp9iz4oCM2YfYp9uMINiu2LHZiNis24wg2KjZvtix2K/Yp9iy2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSI1MzMxMzE4OTMxOTM3NDAyMDQwIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2YXYp9iz4oCM2YfYp9uMINiu2LHZiNis24wg2LHYpyDZvtix2K/Yp9iy2LQg2qnZhtivINmIINi02YXYp9ix2YfigI7Zh9in24zbjCDaqdmHINio2KfbjNivINqv2LHZgdiq2Ycg2LTZiNmG2K8g2LHYpyDYqti624zbjNixINiv2YfYry4g2KfbjNmGINmF2KzZiNiyINio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYqNmHINqp2YbYqtix2YTYjCDZh9iv2KfbjNiqINmF2KzYr9ivINuM2Kcg2KzZhNmI2q/bjNix24wg2KfYsiDYqtmF2KfYs+KAjNmH2KfbjCDYrtix2YjYrNuMINio2b7Ysdiv2KfYstivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVNtcyIgbXNnaWQ9Ijg2NzM0NzE3Njg5NDc4OTUwODIiPiLYr9ix24zYp9mB2Kog2b7bjNin2YXigIzZh9in24wg2YbZiNi02KrYp9ix24wgKNm+24zYp9mF2qkpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2b7bjNin2YXaqeKAjNmH2Kcg2LHYpyDYr9ix24zYp9mB2Kog2Ygg2b7Ysdiv2KfYsti0INqp2YbYry4g2KfbjNmGINuM2LnZhtuMINio2LHZhtin2YXZhyDZhduM4oCM2KrZiNin2YbYryDZvtuM2KfZheKAjNmH2KfbjCDYp9ix2LPYp9mE24wg2KjZhyDYr9iz2Krar9in2Ycg2LTZhdinINix2Kcg2KjYr9mI2YYg2YbZhdin24zYtCDYotmG4oCM2YfYpyDYqNmHINi02YXYpyDYrdiw2YEg24zYpyDaqdmG2KrYsdmEINqp2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVNbXMiIG1zZ2lkPSIxODIxMzE3MzQ0NjY4MjU3MDk4Ij4i2K/YsduM2KfZgdiqINm+24zYp9mF4oCM2YfYp9uMINmG2YjYtNiq2KfYsduMIChNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZvtuM2KfZheKAjNmH2KfbjCBNTVMg2LHYpyDYr9ix24zYp9mB2Kog2Ygg2b7Ysdiv2KfYsti0INqp2YbYry4g2KfbjNmGINuM2LnZhtuMINio2LHZhtin2YXZhyDZhduM4oCM2KrZiNin2YbYryDZvtuM2KfZheKAjNmH2KfbjCDYp9ix2LPYp9mE24wg2KjZhyDYr9iz2Krar9in2Ycg2LTZhdinINix2Kcg2KjYr9mI2YYg2YbZhdin24zYtCDYotmG4oCM2YfYpyDYqNmHINi02YXYpyDYrdiw2YEg24zYpyDaqdmG2KrYsdmEINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVNbXMiIG1zZ2lkPSIxODIxMzE3MzQ0NjY4MjU3MDk4Ij4i4oCP2K/YsduM2KfZgdiqINm+24zYp9mF4oCM2YfYp9uMINmG2YjYtNiq2KfYsduMIChNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZvtuM2KfZheKAjNmH2KfbjCBNTVMg2LHYpyDYr9ix24zYp9mB2Kog2Ygg2b7Ysdiv2KfYsti0INqp2YbYry4g2KfbjNmGINuM2LnZhtuMINio2LHZhtin2YXZhyDZhduM4oCM2KrZiNin2YbYryDZvtuM2KfZheKAjNmH2KfbjCDYp9ix2LPYp9mE24wg2KjZhyDYr9iz2Krar9in2Ycg2LTZhdinINix2Kcg2KjYr9mI2YYg2YbZhdin24zYtCDYotmG4oCM2YfYpyDYqNmHINi02YXYpyDYrdiw2YEg24zYpyDaqdmG2KrYsdmEINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4i2K/YsduM2KfZgdiqINm+2K7YtOKAjNmH2KfbjCDYp9i22LfYsdin2LHbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSI4NDg1MjQwNzAyNjI0MzE5NzQiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZvtuM2KfZheKAjNmH2KfbjCDZvtiu2LQg2KfYtti32LHYp9ix24wg2LHYpyDYr9ix24zYp9mB2Kog2Ygg2b7Ysdiv2KfYsti0INqp2YbYry4g2KfbjNmGINmF2KzZiNiyINmB2YLYtyDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LPbjNiz2KrZhSDYr9ixINiv2LPYqtix2LMg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSI4NDg1MjQwNzAyNjI0MzE5NzQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZvtuM2KfZheKAjNmH2KfbjCDZvtiu2LQg2KfYtti32LHYp9ix24wg2LHYpyDYr9ix24zYp9mB2Kog2Ygg2b7Ysdiv2KfYsti0INqp2YbYry4g2KfbjNmGINmF2KzZiNiyINmB2YLYtyDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LPbjNiz2KrZhSDYr9ixINiv2LPYqtix2LMg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iMTU5ODMyODg0MzYxOTY0NjE2NiI+Itiu2YjYp9mG2K/ZhiDZvtuM2KfZheKAjNmH2KfbjCDZvtiu2LQg2LPZhNmI2YTbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2b7bjNin2YXigIzZh9in24wg2b7Yrti0INiz2YTZiNmE24wg2K/Ys9iq2q/Yp9mHINi02YXYpyDYsdinINio2K7ZiNin2YbYry4g2YfYtNiv2KfYsdmH2KfbjCDZvtiu2LQg2LPZhNmI2YTbjCDYr9ixINio2LHYrtuMINin2LIg2YXZiNmC2LnbjNiq4oCM2YfYp9uMINmF2qnYp9mG24wg2KrYrdmI24zZhCDYr9in2K/ZhyDZhduM4oCO2LTZiNmG2K8g2KrYpyDZhdmI2YLYuduM2KrigIzZh9in24wg2KfYtti32LHYp9ix24wg2LHYpyDYqNmHINi02YXYpyDYp9i52YTYp9mFINqp2YbZhtivLiDZiNmC2KrbjCDZvtiu2LQg2LPZhNmI2YTbjCDYr9ix24zYp9mB2Kog2YXbjOKAjti02YjYr9iMINmF2YXaqdmGINin2LPYqiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2K/YsSDYudmF2YTaqdix2K8g24zYpyDaqdin2LHaqdix2K8g2K/Ys9iq2q/Yp9mHINi02YXYpyDYp9iu2KrZhNin2YQg2KfbjNis2KfYryDaqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINm+24zYp9mF4oCM2YfYp9uMINm+2K7YtCDYs9mE2YjZhNuMINiv2LPYqtqv2KfZhyDYtNmF2Kcg2LHYpyDYqNiu2YjYp9mG2K8uINmH2LTYr9in2LHZh9in24wg2b7Yrti0INiz2YTZiNmE24wg2K/YsSDYqNix2K7bjCDYp9iyINmF2YjZgti524zYquKAjNmH2KfbjCDZhdqp2KfZhtuMINiq2K3ZiNuM2YQg2K/Yp9iv2Ycg2YXbjOKAjti02YjZhtivINiq2Kcg2YXZiNmC2LnbjNiq4oCM2YfYp9uMINin2LbYt9ix2KfYsduMINix2Kcg2KjZhyDYtNmF2Kcg2KfYudmE2KfZhSDaqdmG2YbYry4g2YjZgtiq24wg2b7Yrti0INiz2YTZiNmE24wg2K/YsduM2KfZgdiqINmF24zigI7YtNmI2K/YjCDZhdmF2qnZhiDYp9iz2Kog2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINiv2LEg2LnZhdmE2qnYsdivINuM2Kcg2qnYp9ix2qnYsdivINiv2LPYqtqv2KfZhyDYtNmF2Kcg2KfYrtiq2YTYp9mEINin24zYrNin2K8g2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kU21zIiBtc2dpZD0iNTYwMDgzMDYxMjE0NzY3MTUyOSI+Itin2LHYs9in2YQg2b7bjNin2YXaqSDZh9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFNtcyIgbXNnaWQ9IjcwOTQ3MjkyOTgyMDQ5Mzc2NjciPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2b7bjNin2YXaqeKAjNmH2Kcg2LHYpyDYp9ix2LPYp9mEINqp2YbYry4g2KfbjNmGINio2KfYudirINin24zYrNin2K8g2YfYstuM2YbZh+KAjNmH2KfbjCDZvtuM2LTigIzYqNuM2YbbjCDZhti02K/ZhyDZhduM4oCM2LTZiNivLiDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYrtix2Kgg2YXZhdqp2YYg2KfYs9iqINio2Kcg2KfYsdiz2KfZhCDZvtuM2KfZhSDYqNiv2YjZhiDYqtij24zbjNivINi02YXYpyDZh9iy24zZhtmH4oCM2YfYp9uM24wg2LHYpyDYqNix2KfbjCDYtNmF2Kcg2KfbjNis2KfYryDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI4NzEzODg5MTA1MzA1OTQzMjAwIj4i2KfYsdiz2KfZhCDYsdmI24zYr9in2K/Zh9in24wgwqvZvtin2LPYruKAjCDYp9iyINi32LHbjNmCINm+24zYp9mFwrsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iNzEwNzY0ODU0ODQ2ODc3ODczNCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYr9ix2K7ZiNin2LPYquKAjNmH2Kcg2LHYpyDYqNix2KfbjCDYr9uM2q/YsSDYqNix2YbYp9mF2YfigIzZh9in24wg2b7bjNin2YXigIzYsdiz2KfZhtuMINio2YHYsdiz2KrYryDYqtinINio2Ycg2LHZiNuM2K/Yp9iv2YfYp9uMIMKr2b7Yp9iz2K7igIwg2KfYsiDYt9ix24zZgiDZvtuM2KfZhcK7INio2LHYp9uMINiq2YXYp9iz4oCM2YfYp9uMINiv2LHbjNin2YHYqtuMINix2LPbjNiv2q/bjCDaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+Itiu2YjYp9mG2K/ZhiDZvtuM2KfZheKAjNmH2KfbjCDZhtmI2LTYqtin2LHbjCDYtNmF2KcgKNm+24zYp9mF2qkg24zYpyBNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+IuKAj9iu2YjYp9mG2K/ZhiDZvtuM2KfZheKAjNmH2KfbjCDZhtmI2LTYqtin2LHbjCDYtNmF2KcgKNm+24zYp9mF2qkg24zYpyBNTVMpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjQ2Nzk4MTU0ODY4NDczNTUyMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZvtuM2KfZhdqp4oCM2YfYp9uMINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg24zYpyDYs9uM2YUg2qnYp9ix2Kog2LTZhdinINix2Kcg2KjYrtmI2KfZhtivLiDYp9uM2YYg2YjbjNqY2q/bjCDYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YfZhdmHINm+24zYp9mF2qnigIzZh9inINix2Kcg2LXYsdmB2YbYuNixINin2LIg2YXYrdiq2YjYpyDbjNinINmF2K3YsdmF2KfZhtmHINio2YjYr9mGINii2YbigIzZh9inINio2K7ZiNin2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY5NTk2NzUzMzQ1NzI0MDU1MCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZvtuM2KfZhdqp4oCM2YfYp9uMINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2KrZhNmB2YYg24zYpyDYs9uM2YUg2qnYp9ix2Kog2LTZhdinINix2Kcg2KjYrtmI2KfZhtivLiDYp9uM2YYg2YjbjNqY2q/bjCDYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YfZhdmHINm+24zYp9mF2qnigIzZh9inINix2Kcg2LXYsdmB2YbYuNixINin2LIg2YXYrdiq2YjYpyDbjNinINmF2K3YsdmF2KfZhtmHINio2YjYr9mGINii2YbigIzZh9inINio2K7ZiNin2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+ItmI24zYsdin24zYtCDZvtuM2KfZheKAjNmH2KfbjCDZhtmI2LTYqtin2LHbjCDYtNmF2KcgKNm+24zYp9mF2qkg24zYpyBNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYr9ixINm+24zYp9mF4oCM2YfYp9uMINqp2YjYqtin2Ycg2LDYrtuM2LHZhyDYtNiv2Ycg2K/YsSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDbjNinINiz24zZhSDaqdin2LHYqiDYqNmG2YjbjNiz2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZvtuM2KfZheKAjNmH2KfbjCDYtNmF2Kcg2LHYpyDYrdiw2YEg2YXbjOKAjtqp2YbZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2ODY2ODcwOTA1MjMyODU2NyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiv2LEg2b7bjNin2YXigIzZh9in24wg2qnZiNiq2KfZhyDYsNiu24zYsdmHINi02K/ZhyDYr9ixINiq2YTZgdmGINuM2Kcg2LPbjNmFINqp2KfYsdiqINio2YbZiNuM2LPYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2b7bjNin2YXigIzZh9in24wg2LTZhdinINix2Kcg2K3YsNmBINqp2YbZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI1OTkxMzk4NzExOTM2NTkwNDEwIj4i2K/YsduM2KfZgdiqINm+24zYp9mF4oCM2YfYp9uMINmG2YjYtNiq2KfYsduMIChXQVApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2b7bjNin2YXigIzZh9in24wgV0FQINix2Kcg2K/YsduM2KfZgdiqINmIINm+2LHYr9in2LLYtCDaqdmG2K8uINin24zZhiDZhdis2YjYsiDZhduM4oCM2KrZiNin2YbYryDZvtuM2KfZheKAjNmH2KfbjCDYp9ix2LPYp9mE24wg2KjZhyDYtNmF2Kcg2LHYpyDYqNiv2YjZhiDZhtmF2KfbjNi0INii2YbigIzZh9inINio2Ycg2LTZhdinINit2LDZgSDbjNinINqp2YbYqtix2YQg2qnZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4i2KjYp9iy24zYp9io24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv2LEg2K3Yp9mEINin2KzYsdinIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNtcyIgbXNnaWQ9IjMyMTY5NTA0NzI2MzYyMTQ3NzQiPiLigI/ZiNuM2LHYp9uM2LQg2b7bjNin2YXigIzZh9in24wg2YbZiNi02KrYp9ix24wg2LTZhdinICjZvtuM2KfZhdqpINuM2KcgTU1TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K/YsSDZvtuM2KfZheKAjNmH2KfbjCDaqdmI2KrYp9mHINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg24zYpyDYs9uM2YUg2qnYp9ix2Kog2KjZhtmI24zYs9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2b7bjNin2YXigIzZh9in24wg2LTZhdinINix2Kcg2K3YsNmBINmF24zigI7aqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjg2Njg3MDkwNTIzMjg1NjciPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYr9ixINm+24zYp9mF4oCM2YfYp9uMINqp2YjYqtin2Ycg2LDYrtuM2LHZhyDYtNiv2Ycg2K/YsSDYqtmE2YHZhiDbjNinINiz24zZhSDaqdin2LHYqiDYqNmG2YjbjNiz2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINm+24zYp9mF4oCM2YfYp9uMINi02YXYpyDYsdinINit2LDZgSDaqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+IuKAj9iv2LHbjNin2YHYqiDZvtuM2KfZheKAjNmH2KfbjCDZhtmI2LTYqtin2LHbjCAoV0FQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINm+24zYp9mF4oCM2YfYp9uMIFdBUCDYsdinINiv2LHbjNin2YHYqiDZiCDZvtix2K/Yp9iy2LQg2qnZhtivLiDYp9uM2YYg2YXYrNmI2LIg2YXbjOKAjNiq2YjYp9mG2K8g2b7bjNin2YXigIzZh9in24wg2KfYsdiz2KfZhNuMINio2Ycg2LTZhdinINix2Kcg2KjYr9mI2YYg2YbZhdin24zYtCDYotmG4oCM2YfYpyDYqNmHINi02YXYpyDYrdiw2YEg24zYpyDaqdmG2KrYsdmEINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRhc2tzIiBtc2dpZD0iNjQ2NjA5NTM5NjYyMzkzMzkwNiI+IuKAj9io2KfYstuM2KfYqNuMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9ixINit2KfZhCDYp9is2LHYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYp9i32YTYp9i52KfYqiDZhdix2KjZiNi3INio2Ycg2qnYp9ix2YfYp9uMINiv2LEg2K3Yp9mEINin2KzYsdin24wg2KfYrtuM2LEg2Ygg2qnZhtmI2YbbjCDYsdinINio2KfYstuM2KfYqNuMINqp2YbYry4g2KfbjNmGINmF2YXaqdmGINin2LPYqiDYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINiv2YfYryDYqNmHINin2LfZhNin2LnYp9iqINmF2LHYqNmI2Lcg2KjZhyDYqNix2YbYp9mF2YfigIzZh9in24zbjCDaqdmHINiv2LEg2K/Ys9iq2q/Yp9mHINin2LPYqtmB2KfYr9mHINmF24zigIzYtNmI2YbYryDYr9iz2Kog24zYp9io2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iNzExNDI1NTI4MTk0NDIxMTY4MiI+Itin2LHYqtio2KfYtyDYqNuM2YYg2qnYp9ix2KjYsdin2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iMzY0NjcwOTYzNjIzMzg1Nzg2Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINin2YLYr9in2YXYp9iq24wg2K/YsSDYqNuM2YYg2qnYp9ix2KjYsdin2YYg2YXYrtiq2YTZgSDYr9ixINiv2LPYqtqv2KfZhyDYp9mG2KzYp9mFINiv2YfYry4g2YXZhdqp2YYg2KfYs9iqINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdiu2LHYqCDYp9iyINin24zZhiDZgtin2KjZhNuM2Kog2KjYsdin24wg2YbZgti2INit2YHYp9i42Kog2YXZiNis2YjYryDYr9ixINio24zZhiDaqdin2LHYqNix2KfZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYry4iPC9zdHJpbmc+CkBAIC0yODEsMzMgKzI4NiwzMyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2VycyIgbXNnaWQ9IjE2NzYxNTA5MTE2NzIyODI0MjgiPiLZhdiv24zYsduM2Kog2qnYp9ix2KjYsdin2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2VycyIgbXNnaWQ9Ijg0MDkzMDY2Njc2NDUzNTU2MzgiPiLYqNmHINio2LHZhtin2YXZh+KAjNmH2Kcg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINmF2K/bjNix24zYqiDaqdin2LHYqNix2KfZhtiMINin2LIg2YLYqNuM2YQg2b7Ysdiz2LTYjCDYp9uM2KzYp9ivINmIINit2LDZgSDaqdin2LHYqNix2KfZhtiMINix2Kcg2K/YsSDYr9iz2Krar9in2Ycg2KfZhtis2KfZhSDYr9mH2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4i2KjYp9iy24zYp9io24wg2KzYstim24zYp9iqINio2LHZhtin2YXZh+KAjNmH2KfbjCDYr9ixINit2KfZhCDYp9is2LHYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSIxNTM4MjQ3NDE0NDA3MTc1OTkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYp9i32YTYp9i52KfYqiDZhdmB2LXZhNuMINmF2LHYqNmI2Lcg2KjZhyDaqdin2LHZh9in24zbjCDaqdmHINiv2LEg2K3Yp9mEINit2KfYttixINmIINin2K7bjNix2KfZiyDYp9is2LHYpyDZhduM4oCO2LTZiNmG2K8g2LHYpyDYqNin2LLbjNin2KjbjCDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LfZhNin2LnYp9iqINi02K7YtduMINmF2LHYqNmI2Lcg2KjZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/bjNqv2LEg2LHYpyDZvtuM2K/YpyDaqdmG2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9IjIwMTg1NzU1MjY5MzQ0MjI3NzkiPiLYqtmG2LjbjNmFINmF2KzYr9ivINiq2LHYqtuM2Kgg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv2LEg2K3Yp9mEINin2KzYsdinIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVvcmRlclRhc2tzIiBtc2dpZD0iNzczNDIxNzc1NDg3NzQzOTM1MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2KfYsdmH2Kcg2LHYpyDYqNmHINm+24zYtOKAjNiy2YXbjNmG2Ycg2Ygg2b7Ys+KAjNiy2YXbjNmG2Ycg2YXZhtiq2YLZhCDaqdmG2K8uINio2LHZhtin2YXZh+KAjiDZhdmF2qnZhiDYp9iz2Kog2KjYr9mI2YYg2K/Yrtin2YTYqiDYtNmF2Kcg2KfbjNmGINqp2KfYsSDYsdinINin2YbYrNin2YUg2K/Zh9ivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVtb3ZlVGFza3MiIG1zZ2lkPSI2ODIxNTEzNDAxODcwMzc3NDAzIj4i2YXYqtmI2YLZgSDaqdix2K/ZhiDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/YsSDYrdin2YQg2KfYrNix2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW1vdmVUYXNrcyIgbXNnaWQ9IjEzOTQ3MTQzNTIwNjI2MzU0OTMiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDaqdin2LHZh9inINix2Kcg2K3YsNmBINqp2YbYryDZiCDYqNix2YbYp9mF2YfigI7Zh9in24wg2KLZhuKAjNmH2Kcg2LHYpyDZhdiq2YjZgtmBINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigIzYqtmI2KfZhtmG2K8g2K/YsSDYp9is2LHYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9uM2q/YsSDYp9iu2KrZhNin2YQg2KfbjNis2KfYryDigI7aqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXREZXRhaWxlZFRhc2tzIiBtc2dpZD0iMTUzODI0NzQxNDQwNzE3NTk5Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KfYt9mE2KfYudin2Kog2YXZgdi12YTbjCDZhdix2KjZiNi3INio2Ycg2qnYp9ix2YfYp9uM24wg2qnZhyDYr9ixINit2KfZhCDYrdin2LbYsSDZiCDYp9iu24zYsdin2Ysg2KfYrNix2Kcg2YXbjOKAjti02YjZhtivINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9i32YTYp9i52KfYqiDYtNiu2LXbjCDZhdix2KjZiNi3INio2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv24zar9ixINix2Kcg2b7bjNiv2Kcg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW9yZGVyVGFza3MiIG1zZ2lkPSIyMDE4NTc1NTI2OTM0NDIyNzc5Ij4i4oCP2KrZhti424zZhSDZhdis2K/YryDYqtix2KrbjNioINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9ixINit2KfZhCDYp9is2LHYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9Ijc3MzQyMTc3NTQ4Nzc0MzkzNTEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDaqdin2LHZh9inINix2Kcg2KjZhyDZvtuM2LTigIzYstmF24zZhtmHINmIINm+2LPigIzYstmF24zZhtmHINmF2YbYqtmC2YQg2qnZhtivLiDYqNix2YbYp9mF2YfigI4g2YXZhdqp2YYg2KfYs9iqINio2K/ZiNmGINiv2K7Yp9mE2Kog2LTZhdinINin24zZhiDaqdin2LEg2LHYpyDYp9mG2KzYp9mFINiv2YfYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlbW92ZVRhc2tzIiBtc2dpZD0iNjgyMTUxMzQwMTg3MDM3NzQwMyI+IuKAj9mF2KrZiNmC2YEg2qnYsdiv2YYg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv2LEg2K3Yp9mEINin2KzYsdinIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVtb3ZlVGFza3MiIG1zZ2lkPSIxMzk0NzE0MzUyMDYyNjM1NDkzIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2qnYp9ix2YfYpyDYsdinINit2LDZgSDaqdmG2K8g2Ygg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINii2YbigIzZh9inINix2Kcg2YXYqtmI2YLZgSDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCM2KrZiNin2YbZhtivINiv2LEg2KfYrNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/bjNqv2LEg2KfYrtiq2YTYp9mEINin24zYrNin2K8g4oCO2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY3Rpdml0eVN0YWNrcyIgbXNnaWQ9IjczOTExOTEzODQwMjczMDMwNjUiPiLZhdiv24zYsduM2Kog2b7YtNiq2YfigIzZh9in24wg2YHYudin2YTbjNiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSIxNjE1ODgxOTMzMDM0MDg0NDQwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINm+2LTYqtmH4oCM2YfYp9uMINmB2LnYp9mE24zYqtuMINqp2Ycg2LPYp9uM2LEg2KjYsdmG2KfZhdmH4oCM2YfYpyDYr9ixINii2YbZh9inINin2KzYsdinINmF24zigIzYtNmI2YbYryDYsdinINin2LbYp9mB2Ycg24zYpyDYrdiw2YEg2qnZhtivINmIINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYrtix2Kgg2YXZhdqp2YYg2KfYs9iqINmB2LnYp9mE24zYqiDYqNix2YbYp9mF2YfigIzZh9in24wg2K/bjNqv2LEg2LHYpyDZhdiu2KrZhCDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSIyOTE4NzY4MjM4MDQ1MjA2NDU2Ij4i2LTYsdmI2Lkg2YfYsSDZhtmI2Lkg2YHYudin2YTbjNiqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9Ijk5NzgyMzY5NTM0MzU4NDAwMSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDZh9ixINmB2LnYp9mE24zYqtuMINix2Kcg2LTYsdmI2Lkg2qnZhtivINio2K/ZiNmGINin24zZhtqp2Ycg2YjYtti524zYqiDYtdin2K/Ysdi02K/ZhyDbjNinINit2YHYp9i42Kog2KjYpyDZhdis2YjYsiDYr9ixINmG2LjYsSDar9ix2YHYqtmHINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iOTk3ODIzNjk1MzQzNTg0MDAxIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINmH2LEg2YHYudin2YTbjNiq24wg2LHYpyDYtNix2YjYuSDaqdmG2K8g2KjYr9mI2YYg2KfbjNmG2qnZhyDZiNi22LnbjNiqINi12KfYr9ix2LTYr9mHINuM2Kcg2K3Zgdin2LjYqiDYqNinINmF2KzZiNiyINiv2LEg2YbYuNixINqv2LHZgdiq2Ycg2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5NzUzODcxMTg4NjE4NDIwNjEiPiLYqtmG2LjbjNmFINiz2KfYstqv2KfYsduMINio2Kcg2LXZgdit2YfZlCDZhtmF2KfbjNi0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5MjA0MzYxODY5MzkxNzM3NCI+Itio2Ycg2KjYsdmG2KfZhdmH2ZQg2qnYp9ix2KjYsdiv24wg2KfYrNin2LLZhyDaqdmG2KrYsdmEINit2KfZhNiqINiz2KfYstqv2KfYsduMINi12YHYrdmH2ZQg2YbZhdin24zYtCDYqNix2KfbjCDYqNix2YbYp9mF2YfigIzZh9in24wg2K/bjNqv2LEg2LHYpyDZhduM4oCM2K/Zh9ivLiDYqNix2YbYp9mF2YfigIzZh9in24wg2K7Ysdin2Kjaqdin2LEg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINqp2KfYsdqp2LHYryDZhtin2K/Ysdiz2Kog2K/bjNqv2LEg2KjYsdmG2KfZhdmH4oCM2YfYpyDYtNmI2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldERlYnVnQXBwIiBtc2dpZD0iMzAyMjEwNzE5ODY4NjU4NDA1MiI+ItmB2LnYp9mEINqp2LHYr9mGINi524zYqOKAjNuM2KfYqNuMINio2LHZhtin2YXZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldERlYnVnQXBwIiBtc2dpZD0iNDQ3NDUxMjQxNjI5OTAxMzI1NiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINi524zYqOKAjNuM2KfYqNuMINix2Kcg2KjYsdin24wg2KjYsdmG2KfZhdmH4oCM2KfbjCDYr9uM2q/YsSDZgdi52KfZhCDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LIg2KLZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYryDYqtinINin2KzYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv24zar9ixINix2Kcg2YXYqtmI2YLZgSDaqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXREZWJ1Z0FwcCIgbXNnaWQ9IjQ0NzQ1MTI0MTYyOTkwMTMyNTYiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYuduM2KjigIzbjNin2KjbjCDYsdinINio2LHYp9uMINio2LHZhtin2YXZh+KAjNin24wg2K/bjNqv2LEg2YHYudin2YQg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDYp9is2LHYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9uM2q/YsSDYsdinINmF2KrZiNmC2YEg2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb25maWd1cmF0aW9uIiBtc2dpZD0iNDE2MjA5MjE4NTEyNDIzNDQ4MCI+Itiq2LrbjNuM2LEg2KrZhti424zZhdin2Kog2YbZhdin24zYtNqv2LEg2LPbjNiz2KrZhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MzcyMjIzODczMTU0Mjk2MDc2Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2b7bjNqp2LHYqNmG2K/bjCDZgdi52YTbjNiMINin2LIg2YLYqNuM2YQg2KfZhtiv2KfYstmHINqp2YTbjCDZgtmE2YUg24zYpyDZhdit2YTYjCDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MzcyMjIzODczMTU0Mjk2MDc2Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2b7bjNqp2LHYqNmG2K/bjCDZgdi52YTbjNiMINin2LIg2YLYqNuM2YQg2KfZhtiv2KfYstmHINqp2YTbjCDZgtmE2YUg24zYpyDZhdit2YTYjCDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjU2ODQ1MDQwNTgxOTI5MjEwOTgiPiLZgdi52KfZhCDaqdix2K/ZhiDYrdin2YTYqiDYrtmI2K/YsdmIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYrdin2YTYqiDYrtmI2K/YsdmIINix2Kcg2YHYudin2YQg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2VuYWJsZUNhck1vZGUiIG1zZ2lkPSI0ODUzMTg3NDI1NzUxNDE5NDY3Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K3Yp9mE2Kog2K7ZiNiv2LHZiCDYsdinINmB2LnYp9mEINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iMzkxNDAyNjY4NzQyMDE3NzIwMiI+Itio2LPYqtmGINiz2KfbjNixINio2LHZhtin2YXZh+KAjNmH2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19raWxsQmFja2dyb3VuZFByb2Nlc3NlcyIgbXNnaWQ9IjQ1OTMzNTMyMzU5NTk3MzMxMTkiPiLYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2KjZhyDZgdix2KLbjNmG2K/Zh9in24wg2b7Ys+KAjNiy2YXbjNmG2Ycg2LPYp9uM2LEg2KjYsdmG2KfZhdmH4oCM2YfYpyDZvtin24zYp9mGINiv2YfYry4g2KfbjNmGINmF2YXaqdmGINin2LPYqiDYqNin2LnYqyDYtNmI2K8g2LPYp9uM2LEg2KjYsdmG2KfZhdmH4oCM2YfYpyDZhdiq2YjZgtmBINi02YjZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VTdG9wUGFja2FnZXMiIG1zZ2lkPSIyMzI5NjI3NDI4ODMyMDY3NzAwIj4i2KrZiNmC2YEg2KfYrNio2KfYsduMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9uM2q/YsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iNTI1MzE1NzI5NjE4Mzk0MDgxMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2Ycg2KfYrNio2KfYsSDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/bjNqv2LEg2LHYpyDZhdiq2YjZgtmBINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iMjMyOTYyNzQyODgzMjA2NzcwMCI+IuKAj9iq2YjZgtmBINin2KzYqNin2LHbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/bjNqv2LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjUyNTMxNTcyOTYxODM5NDA4MTIiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINin2KzYqNin2LEg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv24zar9ixINix2Kcg2YXYqtmI2YLZgSDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZUJhY2siIG1zZ2lkPSI2NTI5MzUyMDQwNzI1ODQ2MTYiPiLYqNiz2KrZhiDYp9is2KjYp9ix24wg2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZm9yY2VCYWNrIiBtc2dpZD0iMzg5MjI5NTgzMDQxOTUxMzYyMyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2LHZhtin2YXZh+KAjNin24wg2LHYpyDaqdmHINiv2LEg2b7bjNi0INiy2YXbjNmG2Ycg2KfYs9iqINio2KjZhtiv2K8g2Ygg2KjYsdqv2LHYr9ivLiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZm9yY2VCYWNrIiBtc2dpZD0iMzg5MjI5NTgzMDQxOTUxMzYyMyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2LHZhtin2YXZh+KAjNin24wg2LHYpyDaqdmHINiv2LEg2b7bjNi0INiy2YXbjNmG2Ycg2KfYs9iqINio2KjZhtiv2K8g2Ygg2KjYsdqv2LHYr9ivLiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kdW1wIiBtc2dpZD0iMTY4MTc5OTg2MjQzODk1NDc1MiI+Itio2KfYstuM2KfYqNuMINmI2LbYuduM2Kog2K/Yp9iu2YTbjCDYs9uM2LPYqtmFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZHVtcCIgbXNnaWQ9IjE3NzgyOTkwODg2OTIyOTAzMjkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZiNi22LnbjNiqINiv2KfYrtmE24wg2LPbjNiz2KrZhSDYsdinINio2KfYstuM2KfYqNuMINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfZhtmI2KfYuSDZhdiu2KrZhNmB24wg2KfYsiDYp9i32YTYp9i52KfYqiDYrti12YjYtduMINmIINin2YXZhiDYsdinINqp2Ycg2YXYudmF2YjZhNinINio2Ycg2KLZhuKAjNmH2Kcg2YbbjNin2LIg2YbYr9in2LHZhtiv2Iwg2KjYp9iy24zYp9io24wg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZHVtcCIgbXNnaWQ9IjE3NzgyOTkwODg2OTIyOTAzMjkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZiNi22LnbjNiqINiv2KfYrtmE24wg2LPbjNiz2KrZhSDYsdinINio2KfYstuM2KfYqNuMINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfZhtmI2KfYuSDZhdiu2KrZhNmB24wg2KfYsiDYp9i32YTYp9i52KfYqiDYrti12YjYtduMINmIINin2YXZhiDYsdinINqp2Ycg2YXYudmF2YjZhNinINio2Ycg2KLZhuKAjNmH2Kcg2YbbjNin2LIg2YbYr9in2LHZhtiv2Iwg2KjYp9iy24zYp9io24wg2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjgwMjI1ODg2MDg5OTQ1ODk5MzgiPiLYqNin2LLbjNin2KjbjCDZhdit2KrZiNin24wg2LXZgdit2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjMxOTMyNjkwNjk0Njk3MDAyNjUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhdit2KrZiNin24wg2b7Zhtis2LHZhyDZgdi52KfZhCDYsdinINio2KfYstuM2KfYqNuMINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2qnZhCDZhdit2KrZiNin24wg2b7Zhtis2LHZhyDYsdinINio2KfYstuM2KfYqNuMINqp2YbZhtivINmIINmH2YXZhyDZhdiq2YYg2KLZhtix2Kcg2KjZhyDYutuM2LEg2KfYsiDar9iw2LHZiNin2pjZh+KAjtmH2Kcg2KfZhdiq2K3Yp9mGINqp2YbZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iMzE5MzI2OTA2OTQ2OTcwMDI2NSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmF2K3YqtmI2KfbjCDZvtmG2KzYsdmHINmB2LnYp9mEINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDaqdmEINmF2K3YqtmI2KfbjCDZvtmG2KzYsdmHINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtmG2K8g2Ygg2YfZhdmHINmF2KrZhiDYotmG2LHYpyDYqNmHINi624zYsSDYp9iyINqv2LDYsdmI2KfamNmH4oCO2YfYpyDYp9mF2KrYrdin2YYg2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl90ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIyMzEyNjEyMTM1MTI3MzEwMjU0Ij4i2YLYp9io2YTbjNiqINiv2LPYqtix2LPbjCDYqNmHINi32YjYsSDZhdmI2YLYqiDZgdi52KfZhCDYtNmI2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSI4MDc5NDU2MjkzMTgyOTc1NDY0Ij4i2KjZhyDbjNqpINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KjZhyDYtdmI2LHYqiDZhdmI2YLYqiDZgtin2KjZhNuM2Kog2K/Ys9iq2LHYs9uMINix2Kcg2K/YsSDYr9iz2Krar9in2Ycg2YHYudin2YQg2qnZhtivLiDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYrtix2Kgg2YXbjOKAjNiq2YjYp9mG2YbYryDZgtin2KjZhNuM2Kog2K/Ys9iq2LHYs9uMINix2Kcg2KjYr9mI2YYg2LHYttin24zYqiDaqdin2LHYqNixINmB2LnYp9mEINqp2YbZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI4NTMyMjk1MTk5MTEyNTE5Mzc4Ij4i2KjYp9iy24zYp9io24wg2KfYt9mE2KfYudin2Kog2b7Zhtis2LHZhyI8L3N0cmluZz4KQEAgLTMxOSwxMjQgKzMyNCwxMjYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2h1dGRvd24iIG1zZ2lkPSI3MTg1NzQ3ODI0MDM4OTA5MDE2Ij4i2K7Yp9mF2YjYtCDYtNiv2YYg2KzYstim24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaHV0ZG93biIgbXNnaWQ9IjcwNDY1MDA4Mzg3NDYyOTE3NzUiPiLZhdiv24zYsSDZgdi52KfZhNuM2Kog2LHYpyDYr9ixINit2KfZhNiqINiu2KfZhdmI2LTbjCDZgtix2KfYsSDZhduM4oCM2K/Zh9ivLiDYrtin2YXZiNi024wg2LHYpyDYqNmHINi12YjYsdiqINqp2KfZhdmEINin2YbYrNin2YUg2YbZhduM4oCM2K/Zh9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iNDEzODYwODYxMDcxNzQyNTU3MyI+ItmF2YXYp9mG2LnYqiDYp9iyINis2KfYqNis2KfbjNuMINio2LHZhtin2YXZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0b3BBcHBTd2l0Y2hlcyIgbXNnaWQ9IjgyNjIxOTU4MDI1ODIyNTUwMjEiPiLYp9is2KfYstmHINmG2YXbjOKAjtiv2YfYryDaqdin2LHYqNixINio2Ycg2KjYsdmG2KfZhdmHINiv24zar9ix24wg2KjYsdmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iODI2MjE5NTgwMjU4MjI1NTAyMSI+IuKAj9in2KzYp9iy2Ycg2YbZhduM4oCO2K/Zh9ivINqp2KfYsdio2LEg2KjZhyDYqNix2YbYp9mF2Ycg2K/bjNqv2LHbjCDYqNix2YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjI1Mzc5MjIzMTE0MTE1NDYwMTYiPiLYr9ix24zYp9mB2Kog2KfYt9mE2KfYudin2Kog2KjYsdmG2KfZhdmHINmB2LnZhNuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUxMjQ0ODg1NTQ5NjA2NzEzMSI+Itio2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYp9i32YTYp9i52KfYqiDYrti12YjYtduMINmF2LHYqNmI2Lcg2KjZhyDYqNix2YbYp9mF2Ycg2YHYudmE24wg2LHYpyDYr9ixINm+24zYtCDYstmF24zZhtmHINi12YHYrdmHINio2KfYstuM2KfYqNuMINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9Ijg5MjIzOTA5NDg2NzE4MjY1NiI+ItmG2LjYp9ix2Kog2Ygg2qnZhtiq2LHZhCDYsdin2YfigIzYp9mG2K/Yp9iy24wg2YfZhdmHINio2LHZhtin2YXZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtit2YjZhyDYsdin2YfigIzYp9mG2K/Yp9iy24wg2YHYudin2YTbjNiq4oCM2YfYp9uMINiz24zYs9iq2YUg2LHYpyDaqdmG2KrYsdmEINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2qnYp9mF2YTYpyDYqNinINiz24zYs9iq2YUg2LPYp9iy2q/Yp9ixINi02YjZhtivLiDYp9uM2YYg2YXYrNmI2LIg2YHZgti3INio2LHYp9uMINiq2YjYs9i52Ycg2YbbjNin2LIg2KfYs9iqINmIINio2LHYp9uMINin2LPYqtmB2KfYr9mHINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtit2YjZhyDYsdin2YfigIzYp9mG2K/Yp9iy24wg2YHYudin2YTbjNiq4oCM2YfYp9uMINiz24zYs9iq2YUg2LHYpyDaqdmG2KrYsdmEINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2qnYp9mF2YTYpyDYqNinINiz24zYs9iq2YUg2LPYp9iy2q/Yp9ixINi02YjZhtivLiDYp9uM2YYg2YXYrNmI2LIg2YHZgti3INio2LHYp9uMINiq2YjYs9i52Ycg2YbbjNin2LIg2KfYs9iqINmIINio2LHYp9uMINin2LPYqtmB2KfYr9mHINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSIyNTc2MzMzNDM0ODkzNTMyNDc1Ij4i2KfYsdiz2KfZhCDZvtiu2LQg2KjYs9iq2Ycg2K3YsNmBINi02K/ZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINin2LnZhNin2YYg2K3YsNmBINio2LPYqtmHINio2LHZhtin2YXZhyDYsdinINm+2K7YtCDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LIg2KLZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYryDYqtinINmH2LEg2KjYsdmG2KfZhdmHINiv2LEg2K3Yp9mEINin2KzYsdin24wg2K/bjNqv2LEg2LHYpyDYp9iyINio24zZhiDYqNio2LHYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjY2MjE5MDEyMTYyMDc5MzEwODkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYp9i52YTYp9mGINit2LDZgSDYqNiz2KrZhyDYqNix2YbYp9mF2Ycg2LHYpyDZvtiu2LQg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDZh9ixINio2LHZhtin2YXZhyDYr9ixINit2KfZhCDYp9is2LHYp9uMINiv24zar9ixINix2Kcg2KfYsiDYqNuM2YYg2KjYqNix2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjU2ODkwOTUwMDkwMzAzMzY1OTMiPiLYp9ix2LPYp9mEINm+2K7YtCDYr9ix24zYp9mB2Kog2LTYr9mHINiq2YjYs9i3INm+24zYp9mF2qkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYp9i52YTYp9mGINiv2LHbjNin2YHYqiDZvtuM2KfZhSDaqdmI2KrYp9mHINix2Kcg2b7Yrti0INqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfYsiDYp9uM2YYg2KjYsdin24wg2KzYudmEINm+24zYp9mF4oCM2YfYp9uMINqp2YjYqtin2Ycg2YjYsdmI2K/bjCDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSIzMTQ1MzQ3NDEzMDI4NTgyMzcxIj4i2KfYsdiz2KfZhCDZvtiu2LQg2K/YsduM2KfZgdiqINi02K/ZhyDYqtmI2LPYtyBXQVAtUFVTSCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSI0NzgzNDAyNTI1MDM5NDQyNzI5Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KfYudmE2KfZhtuMINix2Kcg2b7Yrti0INqp2YbYryDaqdmHINm+24zYp9mFIFdBUCBQVVNIINiv2LHbjNin2YHYqiDaqdix2K/ZhyDYp9iz2KouINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LIg2KLZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYryDYqtinINiv2LHbjNin2YHYqiDZvtuM2KfZhSBNTVMg2LHYpyDYrNi52YQg2qnZhtmG2K8g24zYpyDZhdit2KrZiNin24wg2YfYsSDYtdmB2K3Zh9mUINmI2Kgg2LHYpyDYqNinINin2YbZiNin2Lkg2YXYrtix2Kgg2KzYp9uM2q/YstuM2YYg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI0MTUyMDM3NzIwMDM0MzY1NDkyIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KfYudmE2KfZhiDYr9ix24zYp9mB2Kog2b7bjNin2YUg2qnZiNiq2KfZhyDYsdinINm+2K7YtCDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LIg2KfbjNmGINio2LHYp9uMINis2LnZhCDZvtuM2KfZheKAjNmH2KfbjCDaqdmI2KrYp9mHINmI2LHZiNiv24wg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+IuKAj9in2LHYs9in2YQg2b7Yrti0INiv2LHbjNin2YHYqiDYtNiv2Ycg2KrZiNiz2LcgV0FQLVBVU0giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iNDc4MzQwMjUyNTAzOTQ0MjcyOSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINin2LnZhNin2YbbjCDYsdinINm+2K7YtCDaqdmG2K8g2qnZhyDZvtuM2KfZhSBXQVAgUFVTSCDYr9ix24zYp9mB2Kog2qnYsdiv2Ycg2KfYs9iqLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDYr9ix24zYp9mB2Kog2b7bjNin2YUgTU1TINix2Kcg2KzYudmEINqp2YbZhtivINuM2Kcg2YXYrdiq2YjYp9uMINmH2LEg2LXZgdit2YfZlCDZiNioINix2Kcg2KjYpyDYp9mG2YjYp9i5INmF2K7YsdioINis2KfbjNqv2LLbjNmGINqp2YbZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iMjQ1MTg3MzY2NDM2MzY2MjY2NiI+ItmF2K3Yr9mI2K8g2qnYsdiv2YYg2KrYudiv2KfYryDZgdix2KLbjNmG2K/Zh9in24wg2K/YsSDYrdin2YQg2KfYrNix2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K3Yr9in2qnYq9ixINiq2LnYr9in2K8g2b7Ysdiv2KfYsti02YfYp9uM24wg2LHYpyDaqdmHINin2KzYsdinINiu2YjYp9mH2K8g2LTYryDaqdmG2KrYsdmEINqp2YbYry4g2YfYsdqv2LIg2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmE2KfYstmFINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjczMTgwNjEzMTQwNDA4Nzk1NDIiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYrdiv2Kfaqdir2LEg2KrYudiv2KfYryDZvtix2K/Yp9iy2LTZh9in24zbjCDYsdinINqp2Ycg2KfYrNix2Kcg2K7ZiNin2YfYryDYtNivINqp2YbYqtix2YQg2qnZhtivLiDZh9ix2q/YsiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YTYp9iy2YUg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI1NTA5NTg1MDc3OTg3OTY5NjUiPiLYqNiz2KrZhiDYp9is2KjYp9ix24wg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINm+2LPigIzYstmF24zZhtmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNzQ3MTMxMDY1Mjg2ODg0MTQ5OSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2Ycg2YXYrdi2INin24zZhtqp2Ycg2YHYudin2YTbjNiq2YfYpyDYqNmHINm+2LPigIzYstmF24zZhtmHINix2YHYqtmG2K8g2KrZhdin2YUg2LTZiNmG2K8uINio2LHYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2KfYstuMINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINmF2K3YtiDYp9uM2YbaqdmHINmB2LnYp9mE24zYqtmH2Kcg2KjZhyDZvtiz4oCM2LLZhduM2YbZhyDYsdmB2KrZhtivINiq2YXYp9mFINi02YjZhtivLiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNin2LLbjCDZhtuM2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjI3ODk2MTA2NzM1MTQxMDMzNjQiPiLYrtmI2KfZhtiv2YYg2KLZhdin2LEg2KjYp9iq2LHbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjU4OTczNDY1ODI4ODI5MTUxMTQiPiLYqNmHINuM2qkg2KjYsdmG2KfZhdmHINqp2KfYsdio2LHYr9uMINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDaqdmHINiv2KfYr9mH4oCM2YfYp9uMINin2LPYqtmB2KfYr9mHINqp2YbZhtiv2Ycg2KfYsiDZhduM2LLYp9mGINio2KfYqtix24wg2qnZhSDaqdmG2YjZhtuMINix2Kcg2KjYrtmI2KfZhtivLiDYp9uM2YYg2qnYp9ixINmF2YXaqdmGINin2LPYqiDYqNmHINio2LHZhtin2YXZhyDYp9uM2YYg2KfZhdqp2KfZhiDYsdinINio2K/Zh9ivINqp2Ycg2KfYt9mE2KfYudin2Kog2KzYstim24wg2K/Ysdio2KfYsdmHINio2LHZhtin2YXZh+KAjNmH2KfbjNuMINqp2Ycg2KfYs9iq2YHYp9iv2Ycg2YXbjOKAjNqp2YbbjNiv2Iwg2KjYr9iz2Kog2KLZiNix2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIzNzE5Njg5NzY0NTM2Mzc5NTU3Ij4i2KfYtdmE2KfYrSDYotmF2KfYsSDYqNin2KrYsduMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQmF0dGVyeVN0YXRzIiBtc2dpZD0iNjg2MjgxNzg1NzE3ODAyNTAwMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINii2YXYp9ixINis2YXYueKAjNii2YjYsduMINi02K/ZhyDYqNin2KrYsduMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHYp9uMINin2LPYqtmB2KfYr9mHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI2ODYyODE3ODU3MTc4MDI1MDAyIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KLZhdin2LEg2KzZhdi54oCM2KLZiNix24wg2LTYr9mHINio2KfYqtix24wg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSIxNTA4Nzc5Njg3NDM2NTg1NzQ0Ij4i2KjYp9iy24zYp9io24wg2KLZhdin2LEg2YXYsdio2YjYtyDYqNmHINqp2KfYsdqp2LHYryDYqNix2YbYp9mF2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBcHBPcHNTdGF0cyIgbXNnaWQ9IjYyNDM4ODcwNDE1Nzc5MTI4NzciPiLYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2KLZhdin2LEg2KzZhdi54oCM2KLZiNix24wg2LTYr9mHINmF2LHYqNmI2Lcg2KjZhyDYudmF2YTaqdix2K8g2KjYsdmG2KfZhdmHINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqtmI2LPYtyDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYudmF2YjZhNuM2Iwg2K/YsSDZhti42LEg2q/YsdmB2KrZhyDZhti02K/ZhyDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9Ijg4MjkwOTczNzM4NTE1MjE1MDUiPiLYqti624zbjNixINii2YXYp9ixINqp2KfYsdqp2LHYryDYqNix2YbYp9mF2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9IjUwNzg0NTk2NTk0NDAzNDgzIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDYqti624zbjNixINii2YXYp9ixINqp2KfYsdqp2LHYryDYrNmF2LnigIzYotmI2LHbjCDYtNiv2Ycg2KfYsiDYqNix2YbYp9mF2Ycg2LHYpyDZhduM4oCM2K/Zh9ivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqtmI2LPYtyDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYudmF2YjZhNuMINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmFja3VwIiBtc2dpZD0iNDcwMDEzMDIyODY1NDUzOTIwIj4i2qnZhtiq2LHZhCDZhtiz2K7Zh9mUINm+2LTYqtuM2KjYp9mGINiz24zYs9iq2YUg2Ygg2KjYp9iy24zYp9io24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYWNrdXAiIG1zZ2lkPSI2OTEyMjMwNTI1MTQwNTg5ODkxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINm+2LTYqtuM2KjYp9mGINiz24zYs9iq2YUg2LHYpyDaqdmG2KrYsdmEINqp2YbYryDZiCDZhdqp2KfZhtuM2LPYqtmFINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmFja3VwIiBtc2dpZD0iNjkxMjIzMDUyNTE0MDU4OTg5MSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDZvti02KrbjNio2KfZhiDYs9uM2LPYqtmFINix2Kcg2qnZhtiq2LHZhCDaqdmG2K8g2Ygg2YXaqdin2YbbjNiz2KrZhSDYsdinINio2KfYstuM2KfYqNuMINqp2YbYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjU1NTcwNzEzMjU4MDQ0NjkxMDIiPiLYqtmH24zZh9mUINmG2LPYrtmH2ZQg2b7YtNiq24zYqNin2YYg2qnYp9mF2YQg2LHYpyDYqtij24zbjNivINqp2LHYr9mHINuM2Kcg2LnZhdmE24zYp9iqINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtuM2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maXJtX2Z1bGxfYmFja3VwIiBtc2dpZD0iMTc0ODc2MjE3MTYzNzY5OTU2MiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINix2KfYqNi3INqp2KfYsdio2LEg2KrYp9uM24zYryDZhtiz2K7ZhyDaqdin2YXZhCDZvti02KrbjNio2KfZhiDYsdinINix2KfZh+KAjNin2YbYr9in2LLbjCDaqdmG2K8uINmH2LEg2KjYsdmG2KfZhdmH4oCM2KfbjCDZhtmF24zigI7YqtmI2KfZhtivINin2LIg2KLZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjE3NDg3NjIxNzE2Mzc2OTk1NjIiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYsdin2KjYtyDaqdin2LHYqNixINiq2KfbjNuM2K8g2YbYs9iu2Ycg2qnYp9mF2YQg2b7YtNiq24zYqNin2YYg2LHYpyDYsdin2YfigIzYp9mG2K/Yp9iy24wg2qnZhtivLiDZh9ixINio2LHZhtin2YXZh+KAjNin24wg2YbZhduM4oCO2KrZiNin2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSIyMTQ4NTYzNjI4MTQwMTkzMjMxIj4i2YbZhdin24zYtCDZvtmG2KzYsdmH4oCM2YfYp9uMINi624zYsdmF2KzYp9iyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINm+2YbYrNix2YfigI7Zh9in24zbjCDYsdinINin24zYrNin2K8g2qnZhtivINqp2Ycg2YXbjOKAjtiu2YjYp9mH2K8g2KrZiNiz2Lcg2LHYp9io2Lcg2qnYp9ix2KjYsSDYs9uM2LPYqtmFINiv2KfYrtmE24wg2KfYs9iq2YHYp9iv2Ycg2LTZiNivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINm+2YbYrNix2YfigI7Zh9in24zbjCDYsdinINin24zYrNin2K8g2qnZhtivINqp2Ycg2YXbjOKAjtiu2YjYp9mH2K8g2KrZiNiz2Lcg2LHYp9io2Lcg2qnYp9ix2KjYsSDYs9uM2LPYqtmFINiv2KfYrtmE24wg2KfYs9iq2YHYp9iv2Ycg2LTZiNivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9IjM1NDMzNDc5ODA4Mzk1MTg2MTMiPiLYqtix2LPbjNmFINix2YjbjCDYqNix2YbYp9mF2YfigIzZh9in24wg2K/bjNqv2LEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9Ijg1ODQ2NzgzODE5NzI4MjAxMTgiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2qnZhyDYr9ixINio2KfZhNinINuM2Kcg2KjYrti04oCM2YfYp9uM24wg2KfYsiDYsdin2KjYtyDaqdin2LHYqNix24wg2K/bjNqv2LEg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINqp2KfYsdio2LHYr9uMINmF2KrYtdmEINi02YjYry4g2KfbjNmGINqp2KfYsSDZhduM4oCM2KrZiNin2YbYryDYr9ixINin2LPYqtmB2KfYr9mHINi02YXYpyDYp9iyINix2KfYqNi3INmH2LEg2KjYsdmG2KfZhdmHINqp2KfYsdio2LHYr9uMINiq2K/Yp9iu2YQg2KfbjNis2KfYryDaqdmG2K8g24zYpyDYotmG2obZhyDYsdinINqp2Ycg2KjZhyDZhti42LEg2K7ZiNivINiv2LEg2K/bjNqv2LEg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINqp2KfYsdio2LHYr9uMINmF24zigIzYqNuM2YbbjNiv2Iwg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9IjI4MDUxMDMyNDExNTM5MDcxNzQiPiLYp9i12YTYp9itINiz2LHYudiqINin2YbbjNmF24zYtNmGINqp2YTbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iNzY5MDA2MzQyODkyNDM0MzU3MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYs9ix2LnYqiDaqdmE24wg2KfZhtuM2YXbjNi02YYg2LHYpyDZh9ixINiy2YXYp9mGINqp2Ycg2KjYrtmI2KfZh9ivINiq2LrbjNuM2LEg2K/Zh9ivICjYp9mG24zZhduM2LTZhuKAjtmH2KfbjCDYs9ix24zYudiq2LEg24zYpyDYotmH2LPYqtmH4oCO2KrYsSkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSIxMjg2NTA1NzE3MDUwMTIxMzcwIj4i2YXYr9uM2LHbjNiqINmG2LTYp9mG2YfigI7Zh9in24wg2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iODA0MzQzMTcxMzAxNDM5NTY3MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqNinINin24zYrNin2K8g2qnZhtin2LHar9iw2LEg2KfYsiDYs9mB2KfYsdi0INi52KfYr9uMIFrYjCDZhti02KfZhtmH4oCO2YfYp9uMINiu2YjYryDYsdinINin24zYrNin2K8g2Ygg2YXYr9uM2LHbjNiqINqp2YbYry4g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmF2YjYsdivINmG24zYp9iyINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9Ijc2OTAwNjM0Mjg5MjQzNDM1NzEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2LPYsdi52Kog2qnZhNuMINin2YbbjNmF24zYtNmGINix2Kcg2YfYsSDYstmF2KfZhiDaqdmHINio2K7ZiNin2YfYryDYqti624zbjNixINiv2YfYryAo2KfZhtuM2YXbjNi02YbigI7Zh9in24wg2LPYsduM2LnYqtixINuM2Kcg2KLZh9iz2KrZh+KAjtiq2LEpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iMTI4NjUwNTcxNzA1MDEyMTM3MCI+IuKAj9mF2K/bjNix24zYqiDZhti02KfZhtmH4oCO2YfYp9uMINio2LHZhtin2YXZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KjYpyDYp9uM2KzYp9ivINqp2YbYp9ix2q/YsNixINin2LIg2LPZgdin2LHYtCDYudin2K/bjCBa2Iwg2YbYtNin2YbZh+KAjtmH2KfbjCDYrtmI2K8g2LHYpyDYp9uM2KzYp9ivINmIINmF2K/bjNix24zYqiDaqdmG2K8uINio2LHYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhdmI2LHYryDZhtuM2KfYsiDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mcmVlemVTY3JlZW4iIG1zZ2lkPSI0NzA4MTgxMTg0NDQxODgwMTc1Ij4i2KvYp9io2Kog2Ybar9mHINiv2KfYtNiq2YYg2LXZgdit2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mcmVlemVTY3JlZW4iIG1zZ2lkPSI4NTU4OTIzNzg5MjIyNjcwMDY0Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2qnYp9ix2KjYsdiv24wg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2YXZiNmC2KrYp9mLINi12YHYrdmHINix2Kcg2KjYsdin24wg24zaqSDYp9mG2KrZgtin2YQg2KrZhdin2YUg2LXZgdit2Ycg2KvYp9io2Kog2Ybar9mHINiv2KfYsdivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5qZWN0RXZlbnRzIiBtc2dpZD0iMTM3ODc0NjU4NDAyMzU4NjYwMCI+Itqp2YTbjNiv2YfYpyDZiCDYr9qp2YXZh+KAjNmH2KfbjCDaqdmG2KrYsdmEINix2Kcg2YHYtNin2LEg2K/Zh9uM2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNjM1MjU2NTU5OTk2ODYzMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINix2YjbjNiv2KfYr9mH2KfbjCDZiNix2YjYr9uMINiu2YjYryAo2YHYtNix2K/ZhiDaqdmE24zYr9mH2Kcg2Ygg2LrbjNix2YcpINix2Kcg2KrYrdmI24zZhCDYr9mH2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LIg2KLZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYryDYqtinINqp2KfYsdqp2LHYryDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINqp2YbYqtix2YQg2qnZhtmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5qZWN0RXZlbnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjUzMTI4MDU3NTcyMzI2MjUzIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LHZiNuM2K/Yp9iv2YfYp9uMINmI2LHZiNiv24wg2K7ZiNivINix2Kcg2KjZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/bjNqv2LEg2KrYrdmI24zZhCDYr9mH2K8gKNmB2LTYsdiv2YYg2qnZhNuM2K/Zh9inINmIINi624zYsdmHKS4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfYsiDYotmGINio2LHYp9uMINqp2YbYqtix2YQg2qnYp9ix2qnYsdivINiq2YTZgdmGINin2LPYqtmB2KfYr9mHINqp2YbZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LHZiNuM2K/Yp9iv2YfYp9uMINmI2LHZiNiv24wg2K7ZiNivICjZgdi02LHYr9mGINqp2YTbjNiv2YfYpyDZiCDYutuM2LHZhykg2LHYpyDYqtit2YjbjNmEINiv2YfYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfYsiDYotmGINin2LPYqtmB2KfYr9mHINqp2YbZhtivINiq2Kcg2qnYp9ix2qnYsdivINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2qnZhtiq2LHZhCDaqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTMxMjgwNTc1NzIzMjYyNTMiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYsdmI24zYr9in2K/Zh9in24wg2YjYsdmI2K/bjCDYrtmI2K8g2LHYpyDYqNmHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9uM2q/YsSDYqtit2YjbjNmEINiv2YfYryAo2YHYtNix2K/ZhiDaqdmE24zYr9mH2Kcg2Ygg2LrbjNix2YcpLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KjYsdin24wg2qnZhtiq2LHZhCDaqdin2LHaqdix2K8g2KrZhNmB2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjQ2OTQyODkwMDA0MTI0OTIzNCI+ItmF2YjYp9ix2K/bjCDaqdmHINmF24zigIzZhtmI24zYs9uM2K8g2Ygg2qnYp9ix2YfYp9uM24wg2qnZhyDYp9mG2KzYp9mFINmF24zigIzYr9mH24zYryDYsdinINi22KjYtyDaqdmG24zYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iODM4Nzc1NDkwMTY4ODcyODA0MyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2YTbjNiv2YfYp9uM24wg2LHYpyDaqdmHINmH2Ybar9in2YUg2KrYudin2YXZhCDYqNinINio2LHZhtin2YXZh9mUINiv24zar9ixINmB2LTYp9ixINmF24zigI7Yr9mH24zYryDYqNio24zZhtivICjZhdin2YbZhtivINiq2KfbjNm+INqp2LHYr9mGINqv2LDYsdmI2KfamNmHKS4g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmF2YjYsdivINmG24zYp9iyINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iODM4Nzc1NDkwMTY4ODcyODA0MyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2YTbjNiv2YfYp9uM24wg2LHYpyDaqdmHINmH2Ybar9in2YUg2KrYudin2YXZhCDYqNinINio2LHZhtin2YXZh9mUINiv24zar9ixINmB2LTYp9ixINmF24zigI7Yr9mH24zYryDYqNio24zZhtivICjZhdin2YbZhtivINiq2KfbjNm+INqp2LHYr9mGINqv2LDYsdmI2KfamNmHKS4g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmF2YjYsdivINmG24zYp9iyINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzM2MDA2NDYyMDIzMDUxNTc3NiI+Itm+24zZiNmG2K8g2LTYr9mHINio2Ycg2LHZiNi0INmI2LHZiNiv24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMjUwNDQwMzIyODA3Mjg2MzMxIj4i2KjZhyDYr9in2LHZhtiv2Ycg2KfbjNmGINiv2LPYqtqv2KfZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINix2KfYqNi3INiz2LfYrSDYqNin2YTYp9uMINuM2qkg2LHZiNi0INmI2LHZiNiv24wg2YXYqti12YQg2LTZiNivLiDYp9uM2YYg2YjbjNqY2q/bjCDZh9uM2obar9in2Ycg2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2LnZhdmI2YTbjCDYttix2YjYsduMINmG2YXbjOKAjtio2KfYtNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMyNTA0NDAzMjI4MDcyODYzMzEiPiLigI/YqNmHINiv2KfYsdmG2K/ZhyDYp9uM2YYg2K/Ys9iq2q/Yp9mHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2Ycg2LHYp9io2Lcg2LPYt9itINio2KfZhNin24wg24zaqSDYsdmI2LQg2YjYsdmI2K/bjCDZhdiq2LXZhCDYtNmI2K8uINin24zZhiDZiNuM2pjar9uMINmH24zahtqv2KfZhyDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYudmF2YjZhNuMINi22LHZiNix24wg2YbZhduM4oCO2KjYp9i02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI1MzU3NzMzOTQyNTU2MDMxNTkzIj4i2KfYqti12KfZhCDYqNmHINiz2LHZiNuM2LMg2K/Ys9iq2LHYs9uMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNzAzNDYxNTkyODYwOTMzMTM2OCI+Itio2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDaqdmHINio2Ycg2LHYp9io2Lcg2LPYt9itINio2KfZhNin24wg2LPYsdmI24zYsyDYr9iz2KrYsdiz24wg2YXYqti12YQg2LTZiNivLiDZh9ix2q/YsiDYqNix2KfbjCDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYudmF2YjZhNuMINmF2YjYsdivINmG24zYp9iyINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFByaW50U2VydmljZSIgbXNnaWQ9Ijg0NjI4MTUxNzk1NzI3NDg3NjEiPiLYp9iq2LXYp9mEINio2Ycg24zaqSDYs9ix2YjbjNizINqG2KfZviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI3OTYwMDY3NjIzMjA5MTExMTM1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2KjZhyDYsdin2KjYtyDYs9i32K0g2KjYp9mE2KfbjCDYs9ix2YjbjNizINqG2KfZviDZhdiq2LXZhCDYtNmI2K8uINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdi52YXZiNmE24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTcG9vbGVyU2VydmljZSIgbXNnaWQ9IjY4MDc3NjI3ODM3NDQxMjU5NTQiPiLYp9iq2LXYp9mEINio2Ycg2LPYsdmI24zYsyDZh9mF2KfZh9mG2q/igIzaqdmG2YbYr9mHINqG2KfZviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlIiBtc2dpZD0iMzY4MDU1MjI4NTkzMzMxODM3MiI+Itio2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDaqdmHINio2Ycg2YjYp9iz2Lcg2LPYt9itINio2KfZhNin24wg2LPYsdmI24zYsyDZh9mF2KfZh9mG2q/igIzaqdmG2YbYr9mHINqG2KfZviDZhdiq2LXZhCDYtNmI2K8uINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdi52YXZiNmE24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjI3NTI3MzEzMDA0MTk0MTA3MjQiPiLYp9iq2LXYp9mEINio2Ycg2LPYsdmI24zYsyBORkMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiLYqNmHINiv2KfYsdmG2K/ZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KjZhyDYqNix2YbYp9mF2YfigIzZh9in24zbjCDZhdiq2LXZhCDYtNmI2K8g2qnZhyDZhdi02KfYqNmHINio2Kcg2qnYp9ix2KrigIzZh9in24wgTkZDINi52YXZhCDZhduM4oCM2qnZhtmG2K8uINmH2LHar9iyINmG2KjYp9uM2K8g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINi52KfYr9uMINmF2YjYsdivINmG24zYp9iyINio2KfYtNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSIyNzUyNzMxMzAwNDE5NDEwNzI0Ij4i4oCP2KfYqti12KfZhCDYqNmHINiz2LHZiNuM2LMgTkZDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSI2MTIwNjQ3NjI5MTc0MDY2ODYyIj4i4oCP2KjZhyDYr9in2LHZhtiv2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Ycg2KjYsdmG2KfZhdmH4oCM2YfYp9uM24wg2YXYqti12YQg2LTZiNivINqp2Ycg2YXYtNin2KjZhyDYqNinINqp2KfYsdiq4oCM2YfYp9uMIE5GQyDYudmF2YQg2YXbjOKAjNqp2YbZhtivLiDZh9ix2q/YsiDZhtio2KfbjNivINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDYudin2K/bjCDZhdmI2LHYryDZhtuM2KfYsiDYqNin2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjczNTgzNzg0MDE5MTUyODc5MzgiPiLYp9iq2LXYp9mEINio2Ycg24zaqSDYs9ix2YjbjNizINmF2KrZhtuMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iODE1MTk2ODkxMDk3Mzk5ODY3MCI+Itio2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYrtmI2K8g2LHYpyDYqNmHINuM2qkg2LHYp9io2Lcg2LPYt9itINio2KfZhNin24wg2K7Yr9mF2KfYqiDZhdiq2YbbjCDZhdix2KrYqNi3INqp2YbYryAo2KjYsdin24wg2YXYq9in2YQgU3BlbGxDaGVja2VyU2VydmljZSkuINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDYudin2K/bjCDZhNin2LLZhSDZhtuM2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iNDcwODU5NjAyMTE2MTQ3MzI1NSI+Itin2KrYtdin2YQg2KjZhyDbjNqpINiz2LHZiNuM2LMgVlBOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i2KjZhyDYr9in2LHZhtiv2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2KjZhyDYsdin2KjYtyDYs9i32K0g2KjYp9mE2KfbjCDYs9ix2YjbjNizIFZwbiDZhdiq2LXZhCDYtNmI2K8uINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdi52YXZiNmE24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iODE1MTk2ODkxMDk3Mzk5ODY3MCI+IuKAj9io2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYrtmI2K8g2LHYpyDYqNmHINuM2qkg2LHYp9io2Lcg2LPYt9itINio2KfZhNin24wg2K7Yr9mF2KfYqiDZhdiq2YbbjCDZhdix2KrYqNi3INqp2YbYryAo2KjYsdin24wg2YXYq9in2YQgU3BlbGxDaGVja2VyU2VydmljZSkuINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDYudin2K/bjCDZhNin2LLZhSDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iNDcwODU5NjAyMTE2MTQ3MzI1NSI+IuKAj9in2KrYtdin2YQg2KjZhyDbjNqpINiz2LHZiNuM2LMgVlBOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i4oCP2KjZhyDYr9in2LHZhtiv2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2KjZhyDYsdin2KjYtyDYs9i32K0g2KjYp9mE2KfbjCDYs9ix2YjbjNizIFZwbiDZhdiq2LXZhCDYtNmI2K8uINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdi52YXZiNmE24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+Itm+24zZiNmG2K8g2LTYr9mHINio2Ycg2KrYtdmI24zYsSDYstmF24zZhtmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLYqNmHINiv2KfYsdmG2K/ZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINix2KfYqNi3INiz2LfYrSDYqNin2YTYp9uMINiq2LXZiNuM2LEg2LLZhduM2YbZhyDZhdiq2LXZhCDYtNmI2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdi52YXZiNmE24wg2YfYsdqv2LIg2KjZhyDYp9uM2YYg2YjbjNqY2q/bjCDZhtuM2KfYsiDZhtiv2KfYsdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLigI/YqNmHINiv2KfYsdmG2K/ZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINix2KfYqNi3INiz2LfYrSDYqNin2YTYp9uMINiq2LXZiNuM2LEg2LLZhduM2YbZhyDZhdiq2LXZhCDYtNmI2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdi52YXZiNmE24wg2YfYsdqv2LIg2KjZhyDYp9uM2YYg2YjbjNqY2q/bjCDZhtuM2KfYsiDZhtiv2KfYsdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLYp9iq2LXYp9mEINio2Ycg2YbZhdin24zYtNqv2LEg2LHYp9mHINiv2YjYsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+Itio2YfCoNiv2KfYsdmG2K/ZhyDYp9mF4oCN2qnigI3Yp9mGINmF24zigIzYr9mH2K8g2KrYpyDYqNmHINix2KfYqNi3INiz2LfYrSDYqNin2YTYp9uMINmG2YXYp9uM2LTar9ixINix2KfZhyDYr9mI2LEg2YjYtdmEINi02YjYry4g2YbYqNin24zYryDZh9ix2q/YsiDYqNix2KfbjCDYqNix2YbYp9mF2YfigIzZh9in24wg2LnYp9iv24wg2YTYp9iy2YUg2KjYp9i02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i2KfYqti12KfZhCDYqNmHINuM2qkg2LPYsdmI24zYsyDYp9io2LLYp9ix2qkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i2KjZhyDYr9in2LHZhtiv2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2KjZhyDYsdin2KjYtyDYs9i32K0g2KjYp9mE2KfbjCDYs9ix2YjbjNizINin2KjYstin2LHaqSDZhdiq2LXZhCDYtNmI2K8uINmH2LHar9iyINio2LHYp9uMINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdi52YXZiNmE24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i2KrYudin2YXZhCDYqNinINuM2qkg2LPYsdm+2LHYs9iqINiv2LPYqtqv2KfZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9IjU2OTcxNTQxOTU0MzkwNzkzMCI+Itio2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYp9mH2K/Yp9mBINiu2YjYryDYsdinINio2Ycg2LPYsdm+2LHYs9iqINiv2LPYqtqv2KfZhyDYp9ix2LPYp9mEINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2LnZhdmI2YTbjCDZh9uM2obar9in2Ycg2KjZhyDYp9uM2YYg2YjbjNqY2q/bjCDZhtuM2KfYstuMINmG2K/Yp9ix2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI1Njk3MTU0MTk1NDM5MDc5MzAiPiLigI/YqNmHINiv2KfYsdmG2K/ZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KfZh9iv2KfZgSDYrtmI2K8g2LHYpyDYqNmHINiz2LHZvtix2LPYqiDYr9iz2Krar9in2Ycg2KfYsdiz2KfZhCDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdi52YXZiNmE24wg2YfbjNqG2q/Yp9mHINio2Ycg2KfbjNmGINmI24zamNqv24wg2YbbjNin2LLbjCDZhtiv2KfYsdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4i2KfYttin2YHZhyDbjNinINit2LDZgSDYs9ix2b7Ysdiz2Kog2K/Ys9iq2q/Yp9mHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNTAyNTYwODE2NzcwOTk0MjQ4NSI+Itio2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYs9ix2b7Ysdiz2KrYp9mGINiv2LPYqtqv2KfZhyDZgdi52KfZhCDYsdinINin2LbYp9mB2Ycg24zYpyDYrdiw2YEg2qnZhtivLtmH2LHar9iyINmG2KjYp9uM2K8g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINi52KfYr9uMINmF2YjYsdivINmG24zYp9iyINio2KfYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMzY1OTQ3NzE3MTYzODY2ODQ0Ij4i2KrYutuM24zYsSDYrNmH2Kog2LXZgdit2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDahtix2K7YtCDYtdmB2K3ZhyDYsdinINmH2LEg2YjZgtiqINio2K7ZiNin2YfYryDYqti624zbjNixINiv2YfYry4g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYp9iyINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldE9yaWVudGF0aW9uIiBtc2dpZD0iMzA0NjEyNjYxOTMxNjY3MTQ3NiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqG2LHYrti0INi12YHYrdmHINix2Kcg2YfYsSDZiNmC2Kog2KjYrtmI2KfZh9ivINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI5MTc1MzcxNjEzMzIyNTYyOTM0Ij4i2KrYutuM24zYsSDYs9ix2LnYqiDYp9i02KfYsdmH4oCM2q/YsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjY4NjY1NjMyMzQyNzQxMDQyMzMiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYs9ix2LnYqiDZhdin2YjYsyDZiCDZvtivINqp2YbYqtix2YQg2LHYpyDZh9ixINmI2YLYqiDYrtmI2KfYs9iqINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iNjg2NjU2MzIzNDI3NDEwNDIzMyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiz2LHYudiqINmF2KfZiNizINmIINm+2K8g2qnZhtiq2LHZhCDYsdinINmH2LEg2YjZgtiqINiu2YjYp9iz2Kog2KrYutuM24zYsSDYr9mH2K8uINio2LHYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2KfYsiDZhtuM2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iNDc3ODczMTcwMzYwMDkwOTM0MCI+Itiq2LrbjNuM2LEg2obbjNiv2YXYp9mGINi12YHYrdmH4oCM2qnZhNuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRLZXlib2FyZExheW91dCIgbXNnaWQ9Ijg0ODAwMTY3NzExMzQxNzU4NzkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KrYpyDahtuM2K/Zhdin2YYg2LXZgdit2YfigIzaqdmE24zYryDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYp9uM2YYg2qnYp9ixINmH24zahuKAjNqv2KfZhyDYqNix2KfbjCDYqNix2YbYp9mF2YfigIzZh9in24wg2LnYp9iv24wg2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+Itin2LHYs9in2YQg2LPbjNqv2YbYp9mE2YfYp9uMIExpbnV4INio2Ycg2KjYsdmG2KfZhdmH4oCO2YfYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0ODk2OTkyMDc5MTgyNjQ5MTQxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K/Ysdiu2YjYp9iz2Kog2qnZhtivINiz24zar9mG2KfZhCDYp9ix2KfYptmHINi02K/ZhyDYqNmHINmH2YXZhyDZhdix2KfYrdmEINiv2KfYptmFINin2LHYs9in2YQg2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ1MzkwMDI5OTE5NDczNzY2NTkiPiLigI/Yp9ix2LPYp9mEINiz24zar9mG2KfZhNmH2KfbjCBMaW51eCDYqNmHINio2LHZhtin2YXZh+KAjtmH2KciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDg5Njk5MjA3OTE4MjY0OTE0MSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiv2LHYrtmI2KfYs9iqINqp2YbYryDYs9uM2q/Zhtin2YQg2KfYsdin2KbZhyDYtNiv2Ycg2KjZhyDZh9mF2Ycg2YXYsdin2K3ZhCDYr9in2KbZhSDYp9ix2LPYp9mEINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcnNpc3RlbnRBY3Rpdml0eSIgbXNnaWQ9Ijg4NDExMTM2Mjc5NTU1NjM5MzgiPiLZh9mF24zYtNmHINio2LHZhtin2YXZhyDYp9is2LHYpyDYtNmI2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg1MjUxODkyNzIzMjkwODYxMzciPiLYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YLYs9mF2KrigIzZh9in24zbjCDYp9iyINiu2YjYryDYsdinINiv2LEg2K3Yp9mB2LjZhyDYr9in2KbZhduMINqp2YbYry4g2KfbjNmGINqp2KfYsSDYrdin2YHYuNmHINmF2YjYrNmI2K8g2LHYpyDYqNix2KfbjCDYs9in24zYsSDYqNix2YbYp9mF2YfigIzZh9inINmF2K3Yr9mI2K8g2qnYsdiv2Ycg2Ygg2KjYp9i52Ksg2qnZhtiv24wg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0Mzg0NzYwMDQ3NTA4Mjc4MjcyIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINmC2LPZhdiq4oCM2YfYp9uM24wg2KfYsiDYrtmI2K8g2LHYpyDYr9ixINit2KfZgdi42Ycg2K/Yp9im2YXbjCDaqdmG2K8uINin24zZhiDaqdin2LEg2K3Yp9mB2LjZhyDZhdmI2KzZiNivINix2Kcg2KjYsdin24wg2LPYp9uM2LEg2KjYsdmG2KfZhdmH4oCM2YfYpyDZhdit2K/ZiNivINqp2LHYr9mHINmIINio2KfYudirINqp2YbYr9uMINiq2YTZgdmGINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVQYWNrYWdlcyIgbXNnaWQ9IjE4NDM4NTEyOTUzNzcwNTkzOCI+Itit2LDZgSDYqNix2YbYp9mF2YfigI7Zh9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSI3NDExNDgwMjc1MTY3MjA1MDgxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjYs9iq2YfigI7Zh9in24wgQW5kcm9pZCDYsdinINm+2KfaqSDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LIg2KLZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYryDYqtinINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdmH2YUg2LHYpyDYrdiw2YEg2qnZhtmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iMjc0MTA5MTkxODQ1ODQyNzU2Ij4i2K3YsNmBINiv2KfYr9mH4oCO2YfYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9uM2q/YsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSI0NjI1MzIzNjg0MTI1NDU5NDg4Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K/Yp9iv2YfigI7Zh9in24wg2qnYp9ix2KjYsSDYsdinINm+2KfaqSDaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVDYWNoZUZpbGVzIiBtc2dpZD0iMzEyODY2NTU3MTgzNzQwODY3NSI+Itit2LDZgSDYrdin2YHYuNmH2ZQg2b7ZhtmH2KfZhiDYqNix2YbYp9mF2YfigI7Zh9in24wg2K/bjNqv2LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVDYWNoZUZpbGVzIiBtc2dpZD0iMzgxMjk5ODU5OTAwNjczMDE5NiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmB2KfbjNmE4oCM2YfYp9uMINit2KfZgdi42YfZlCDZvtmG2YfYp9mGINix2Kcg2b7Yp9qpINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iMTg0Mzg1MTI5NTM3NzA1OTM4Ij4i4oCP2K3YsNmBINio2LHZhtin2YXZh+KAjtmH2KciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNiz2KrZh+KAjtmH2KfbjCBBbmRyb2lkINix2Kcg2b7Yp9qpINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfYsiDYotmGINin2LPYqtmB2KfYr9mHINqp2YbZhtivINiq2Kcg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2YfZhSDYsdinINit2LDZgSDaqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSIyNzQxMDkxOTE4NDU4NDI3NTYiPiLigI/Yrdiw2YEg2K/Yp9iv2YfigI7Zh9in24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiv24zar9ixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjQ2MjUzMjM2ODQxMjU0NTk0ODgiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYr9in2K/Zh+KAjtmH2KfbjCDaqdin2LHYqNixINix2Kcg2b7Yp9qpINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4i4oCP2K3YsNmBINit2KfZgdi42YfZlCDZvtmG2YfYp9mGINio2LHZhtin2YXZh+KAjtmH2KfbjCDYr9uM2q/YsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzODEyOTk4NTk5MDA2NzMwMTk2Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YHYp9uM2YTigIzZh9in24wg2K3Yp9mB2LjZh9mUINm+2YbZh9in2YYg2LHYpyDZvtin2qkg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSI3NDcyOTIxNzY4MzU3OTgxOTg2Ij4i2KfZhtiv2KfYstmHINqv24zYsduMINmB2LbYp9uMINit2KfZgdi42Ycg2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2qnYr9mH2KfYjCDYr9in2K/Zh+KAjtmH2Kcg2Ygg2KfZhtiv2KfYstmH4oCO2YfYp9uMINit2KfZgdi42YfZlCDZvtmG2YfYp9mGINiu2YjYryDYsdinINio2KfYstuM2KfYqNuMINqp2YbYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iMzkyMTA2ODE1NDQyMDczODI5NiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2K/Zh9in2Iwg2K/Yp9iv2YfigI7Zh9inINmIINin2YbYr9in2LLZh+KAjtmH2KfbjCDYrdin2YHYuNmH2ZQg2b7ZhtmH2KfZhiDYrtmI2K8g2LHYpyDYqNin2LLbjNin2KjbjCDaqdmG2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjIxOTkxMjg0ODI4MjAzMDY5MjQiPiLZhti12Kgg2YXYs9iq2YLbjNmFINio2LHZhtin2YXZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNiz2KrZh+KAjtmH2KfbjCBBbmRyb2lkINio2Ycg2LHZiNiyINi02K/ZhyDbjNinINis2K/bjNivINix2Kcg2YbYtdioINqp2YbYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KfYsiDYp9uM2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDYqNix2YbYp9mF2YfigI7Zh9in24wg2KzYr9uM2K8g2LHYpyDYqNinINmF2KzZiNiy2YfYp9uMINmC2YjbjCDYp9iu2KrbjNin2LHbjCDYp9i22KfZgdmHINqp2YbZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBDYWNoZSIgbXNnaWQ9Ijc0ODcyNzkzOTE3MjM1MjY4MTUiPiLYrdiw2YEg2KrZhdin2YUg2K/Yp9iv2YfigI7Zh9in24wg2K3Yp9mB2LjZh9mUINm+2YbZh9in2YYg2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iNTYyODUzMDk3MjU0ODA3MTI4NCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2LPYqtmH4oCO2YfYp9uMIEFuZHJvaWQg2KjZhyDYsdmI2LIg2LTYr9mHINuM2Kcg2KzYr9uM2K8g2LHYpyDZhti12Kgg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINin24zZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYryDYqtinINio2LHZhtin2YXZh+KAjtmH2KfbjCDYrNiv24zYryDYsdinINio2Kcg2YXYrNmI2LLZh9in24wg2YLZiNuMINin2K7YqtuM2KfYsduMINin2LbYp9mB2Ycg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcENhY2hlIiBtc2dpZD0iNzQ4NzI3OTM5MTcyMzUyNjgxNSI+IuKAj9it2LDZgSDYqtmF2KfZhSDYr9in2K/Zh+KAjtmH2KfbjCDYrdin2YHYuNmH2ZQg2b7ZhtmH2KfZhiDYqNix2YbYp9mF2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTc0NjQwODcxOTQ1NDM0NTY1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2YHYttin24wg2LHYp9uM2KfZhtmHINmE2YjYrduMINix2Kcg2KfYsiDYt9ix24zZgiDYrdiw2YEg2qnYsdiv2YYg2YHYp9uM2YTigIzZh9inINiv2LEg2K/Yp9uM2LHaqdiq2YjYsduMINit2KfZgdi42Ycg2b7ZhtmH2KfZhiDYr9uM2q/YsSDYqNix2YbYp9mF2YfigIzZh9in24wg2qnYp9ix2KjYsdiv24zYjCDYotiy2KfYryDaqdmG2K8uINin24zZhiDaqdin2LEg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINqp2YbYr9uMINiv24zar9ixINio2LHZhtin2YXZh+KAjNmH2KfbjCDaqdin2LHYqNix2K/bjCDYr9ixINmH2Ybar9in2YUg2LHYp9mH4oCM2KfZhtiv2KfYstuMINi02YjYryDYstuM2LHYpyDYotmG2YfYpyDYqNin24zYryDYr9mI2KjYp9ix2Ycg2K/Yp9iv2YfigIzZh9in24wg2K7ZiNivINix2Kcg2KjYp9iy24zYp9io24wg2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2qnZhyDZgdi22KfbjCDYqtmE2YHZhiDYsdinINin2LIg2LfYsduM2YIg2K3YsNmBINqp2LHYr9mGINmB2KfbjNmE4oCM2YfYpyDYr9ixINiv2KfbjNix2qnYqtmI2LHbjCDYrdin2YHYuNmHINm+2YbZh9in2YYg2K/bjNqv2LEg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINqp2KfYsdio2LHYr9uM2Iwg2KLYstin2K8g2qnZhtivLiDYp9uM2YYg2qnYp9ixINmF2YXaqdmGINin2LPYqiDYqNin2LnYqyDYsdin2Ycg2KfZhtiv2KfYstuMINii2YfYs9iq2Ycg2K/bjNqv2LEg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINqp2KfYsdio2LHYr9uMINiv2LEg2YbYqtuM2KzZhyDZhtuM2KfYsiDYotmG2YfYpyDYqNmHINio2KfYstuM2KfYqNuMINiv2KfYr9mH4oCM2YfYp9uMINiu2YjYr9iMINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdmVQYWNrYWdlIiBtc2dpZD0iMzI4OTg5MDI3MTY0NTkyMTQxMSI+Itin2YbYqtmC2KfZhCDZhdmG2KfYqNi5INio2LHZhtin2YXZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdmVQYWNrYWdlIiBtc2dpZD0iMzE5NTYyMjE3Nzc4MjQ0NTI0Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YXZhtin2KjYuSDYqNix2YbYp9mF2Ycg2LHYpyDYp9iyINix2LPYp9mG2Ycg2K/Yp9iu2YTbjCDYqNmHINix2LPYp9mG2Ycg2K7Yp9ix2KzbjCDZiCDYqNin2YTYudqp2LMg2YXZhtiq2YLZhCDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMTk1NjIyMTc3NzgyNDQ1MjQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhdmG2KfYqNi5INio2LHZhtin2YXZhyDYsdinINin2LIg2LHYs9in2YbZhyDYr9in2K7ZhNuMINio2Ycg2LHYs9in2YbZhyDYrtin2LHYrNuMINmIINio2KfZhNi52qnYsyDZhdmG2KrZgtmEINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRMb2dzIiBtc2dpZD0iNjYxNTc3ODU0MzE5ODk2NzYxNCI+ItmF2LfYp9mE2LnZhyDYr9in2K/Zh+KAjNmH2KfbjCDar9iy2KfYsdi0INit2LPYp9izIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINmB2KfbjNmE4oCM2YfYp9uMINmF2K7YqtmE2YEg2q/Ystin2LHYtCDYs9uM2LPYqtmFINix2Kcg2KjYrtmI2KfZhtivLiDYqNinINin24zZhiDaqdin2LHYjCDYqNix2YbYp9mF2Ycg2KfYt9mE2KfYudin2Kog2qnZhNuMINmF2LHYqNmI2Lcg2KjZhyDaqdin2LHbjCDaqdmHINio2Kcg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2KfZhtis2KfZhSDZhduM4oCO2K/Zh9uM2K8g2LHYpyDaqdi02YEg2YXbjOKAjNqp2YbYr9iMINqp2Ycg2YXZhdqp2YYg2KfYs9iqINit2KfZiNuMINin2LfZhNin2LnYp9iqINi02K7YtduMINmIINiu2LXZiNi124wg2KjYp9i02YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTG9ncyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIwNjM0MzgxNDAyNDE1NjA0NDMiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgdin24zZhOKAjNmH2KfbjCDar9iy2KfYsdi0INmF2K7YqtmE2YEg2LPbjNiz2KrZhSDYsdinINio2K7ZiNin2YbYry4g2KfbjNmGINqp2KfYsSDYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KfYt9mE2KfYudin2Kog2LnZhdmI2YXbjCDaqdin2LHbjCDaqdmHINio2Kcg2KrZhNmB2YYg2KfZhtis2KfZhSDZhduM4oCO2K/Zh9uM2K8g2YXYq9mE2Kcg2KfYt9mE2KfYudin2Kog2K7YtdmI2LXbjCDZiCDYtNiu2LXbjCDYsdinINqp2LTZgSDaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4i2KfYs9iq2YHYp9iv2Ycg2KfYsiDZh9ixINix2YXYstqv2LTYp9uMINix2LPYp9mG2YfigI7Yp9uMINio2LHYp9uMINio2KfYstm+2K7YtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI4MjgzOTEyNDg4NDMzMTg5MDEwIj4i2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINio2LHZhtin2YXZhyDYp9iyINmH2LEg2LHZhdiy2q/YtNin24wg2LHYs9in2YbZhyDZhti12Kgg2LTYr9mH4oCM2KfbjCDYp9iz2KrZgdin2K/ZhyDaqdmG2K8g2KrYpyDYqNix2KfbjCDZvtiu2LQg2LHZhdiy2q/YtNin24zbjCDYtNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINmB2KfbjNmE4oCM2YfYp9uMINmF2K7YqtmE2YEg2q/Ystin2LHYtCDYs9uM2LPYqtmFINix2Kcg2KjYrtmI2KfZhtivLiDYqNinINin24zZhiDaqdin2LHYjCDYqNix2YbYp9mF2Ycg2KfYt9mE2KfYudin2Kog2qnZhNuMINmF2LHYqNmI2Lcg2KjZhyDaqdin2LHbjCDaqdmHINio2Kcg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2KfZhtis2KfZhSDZhduM4oCO2K/Zh9uM2K8g2LHYpyDaqdi02YEg2YXbjOKAjNqp2YbYr9iMINqp2Ycg2YXZhdqp2YYg2KfYs9iqINit2KfZiNuMINin2LfZhNin2LnYp9iqINi02K7YtduMINmIINiu2LXZiNi124wg2KjYp9i02YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTG9ncyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIwNjM0MzgxNDAyNDE1NjA0NDMiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgdin24zZhOKAjNmH2KfbjCDar9iy2KfYsdi0INmF2K7YqtmE2YEg2LPbjNiz2KrZhSDYsdinINio2K7ZiNin2YbYry4g2KfbjNmGINqp2KfYsSDYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KfYt9mE2KfYudin2Kog2LnZhdmI2YXbjCDaqdin2LHbjCDaqdmHINio2Kcg2KrZhNmB2YYg2KfZhtis2KfZhSDZhduM4oCO2K/Zh9uM2K8g2YXYq9mE2Kcg2KfYt9mE2KfYudin2Kog2K7YtdmI2LXbjCDZiCDYtNiu2LXbjCDYsdinINqp2LTZgSDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4i4oCP2KfYs9iq2YHYp9iv2Ycg2KfYsiDZh9ixINix2YXYstqv2LTYp9uMINix2LPYp9mG2YfigI7Yp9uMINio2LHYp9uMINio2KfYstm+2K7YtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI4MjgzOTEyNDg4NDMzMTg5MDEwIj4i4oCP2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINio2LHZhtin2YXZhyDYp9iyINmH2LEg2LHZhdiy2q/YtNin24wg2LHYs9in2YbZhyDZhti12Kgg2LTYr9mH4oCM2KfbjCDYp9iz2KrZgdin2K/ZhyDaqdmG2K8g2KrYpyDYqNix2KfbjCDZvtiu2LQg2LHZhdiy2q/YtNin24zbjCDYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjE2NzgzOTE4OTY3ODY4ODIwMTQiPiLZhdiv24zYsduM2Kog2KfYt9mE2KfYudin2Kog2qnYp9ix2KjYsduMINmF2YjYsdivINin2LnYqtmF2KfYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iNDAxNTY0NDA0NzE5NjkzNzAxNCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDar9mI2KfZh9uM2YbYp9mF2YfigIzZh9in24wgQ0Eg2LHYpyDYqNmHINi52YbZiNin2YYg2KfYt9mE2KfYudin2Kog2qnYp9ix2KjYsduMINmF2YjYsdivINin2LnYqtmF2KfYryDZhti12Kgg24zYpyDYrdiw2YEg2YbYtdioINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjQwMTU2NDQwNDcxOTY5MzcwMTQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2q/ZiNin2YfbjNmG2KfZhdmH4oCM2YfYp9uMIENBINix2Kcg2KjZhyDYudmG2YjYp9mGINin2LfZhNin2LnYp9iqINqp2KfYsdio2LHbjCDZhdmI2LHYryDYp9i52KrZhdin2K8g2YbYtdioINuM2Kcg2K3YsNmBINmG2LXYqCDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kaWFnbm9zdGljIiBtc2dpZD0iODA3Njc0Mzk1MzkwODAwMDM0MiI+Itiu2YjYp9mG2K/Zhi/ZhtmI2LTYqtmGINmF2YbYp9io2Lkg2YXYqti52YTZgiDYqNmHINiq2LTYrtuM2LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaWFnbm9zdGljIiBtc2dpZD0iNjYwODI5NTY5MjAwMjQ1MjI4MyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZh9ixINmF2YbYqNi524wg2LHYpyDaqdmHINmF2KrYudmE2YIg2KjZhyDar9ix2YjZhyDYqti02K7bjNi1INin2LPYqiDYqNiu2YjYp9mG2K8g2Ygg2K/YsSDYotmGINio2YbZiNuM2LPYr9ibINio2YfigIzYudmG2YjYp9mGINmF2KvYp9mE2Iwg2YHYp9uM2YTigIzZh9in24wgL2Rldi4g2KfbjNmGINin2YXYsSDYqNmH4oCM2LXZiNix2Kog2KjYp9mE2YLZiNmHINmF24zigIzYqtmI2KfZhtivINio2LEg2b7Yp9uM2K/Yp9ixINio2YjYr9mGINmIINin2YXZhtuM2Kog2LPbjNiz2KrZhSDYqtij2KvbjNixINio2q/YsNin2LHYry4g2KfbjNmGINiq2YbZh9inINio2KfbjNivINio2LHYp9uMINiq2LTYrtuM2LXigI7igIzZh9in24wg2YXYrtiq2LUg2LPYrtiq4oCM2KfZgdiy2KfYsSDYqtmI2LPYtyDYqtmI2YTbjNiv2qnZhtmG2K/ZhyDbjNinINin2b7Ysdin2KrZiNixINin2LPYqtmB2KfYr9mHINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaWFnbm9zdGljIiBtc2dpZD0iNjYwODI5NTY5MjAwMjQ1MjI4MyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZh9ixINmF2YbYqNi524wg2LHYpyDaqdmHINmF2KrYudmE2YIg2KjZhyDar9ix2YjZhyDYqti02K7bjNi1INin2LPYqiDYqNiu2YjYp9mG2K8g2Ygg2K/YsSDYotmGINio2YbZiNuM2LPYr9ibINio2YfigIzYudmG2YjYp9mGINmF2KvYp9mE2Iwg2YHYp9uM2YTigIzZh9in24wgL2Rldi4g2KfbjNmGINin2YXYsSDYqNmH4oCM2LXZiNix2Kog2KjYp9mE2YLZiNmHINmF24zigIzYqtmI2KfZhtivINio2LEg2b7Yp9uM2K/Yp9ixINio2YjYr9mGINmIINin2YXZhtuM2Kog2LPbjNiz2KrZhSDYqtij2KvbjNixINio2q/YsNin2LHYry4g2KfbjNmGINiq2YbZh9inINio2KfbjNivINio2LHYp9uMINiq2LTYrtuM2LXigI7igIzZh9in24wg2YXYrtiq2LUg2LPYrtiq4oCM2KfZgdiy2KfYsSDYqtmI2LPYtyDYqtmI2YTbjNiv2qnZhtmG2K/ZhyDbjNinINin2b7Ysdin2KrZiNixINin2LPYqtmB2KfYr9mHINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBtc2dpZD0iNjMzNTU3Njc3NTcxMTA5NTkzMSI+ItmB2LnYp9mEINuM2Kcg2LrbjNixINmB2LnYp9mEINqp2LHYr9mGINin2KzYstin24wg2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgdi52KfZhCDYqNmI2K/ZhiDbjNinINmG2KjZiNiv2YYg2KfYrNiy2KfbjCDYqNix2YbYp9mF2YfZlCDYr9uM2q/YsSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDZgtin2KjZhNuM2KrZh9in24wg2YXZh9mFINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2LrbjNix2YHYudin2YQg2qnZhtmG2K8uINio2KfbjNivINiv2YLYqiDaqdix2K8g2qnZhyDYqNinINin24zZhiDZhdis2YjYsiDZhdmF2qnZhiDYp9iz2Kog2YjYtti524zYqiDYp9is2LLYp9uMINio2LHZhtin2YXZhyDZhtin2b7Yp9uM2K/Yp9ix2Iwg2YbYp9mH2YXYp9mH2YbaryDbjNinINi624zYsdmC2KfYqNmEINin2LPYqtmB2KfYr9mHINi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4MjcyMzI0ODQ0MTY1MDU2MTUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgdi52KfZhCDYqNmI2K/ZhiDbjNinINi624zYsdmB2LnYp9mEINio2YjYr9mGINis2LLYptuM2KfYqiDYqNix2YbYp9mF2YfZlCDYr9uM2q/YsSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDZiNuM2pjar9uM4oCM2YfYp9uMINmF2YfZhSDYsdinINi624zYsdmB2LnYp9mEINqp2YbZhtivLiDYqNix2KfbjCDYp9uM2YYg2YXYrNmI2LIg2KjYp9uM2K8g2K/ZgtiqINqp2YbbjNivINqG2YjZhiDZhdmF2qnZhiDYp9iz2Kog2YjYtti524zYqiDYrNiy2KbbjNin2Kog2KjYsdmG2KfZhdmHINmG2KfZvtin24zYr9in2LHYjCDYqNuM4oCO2KvYqNin2Kog24zYpyDYutuM2LHZgtin2KjZhCDYp9iz2KrZgdin2K/ZhyDYtNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgdi52KfZhCDYqNmI2K/ZhiDbjNinINmG2KjZiNiv2YYg2KfYrNiy2KfbjCDYqNix2YbYp9mF2YfZlCDYr9uM2q/YsSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDZgtin2KjZhNuM2KrZh9in24wg2YXZh9mFINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2LrbjNix2YHYudin2YQg2qnZhtmG2K8uINio2KfbjNivINiv2YLYqiDaqdix2K8g2qnZhyDYqNinINin24zZhiDZhdis2YjYsiDZhdmF2qnZhiDYp9iz2Kog2YjYtti524zYqiDYp9is2LLYp9uMINio2LHZhtin2YXZhyDZhtin2b7Yp9uM2K/Yp9ix2Iwg2YbYp9mH2YXYp9mH2YbaryDbjNinINi624zYsdmC2KfYqNmEINin2LPYqtmB2KfYr9mHINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4MjcyMzI0ODQ0MTY1MDU2MTUiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgdi52KfZhCDYqNmI2K/ZhiDbjNinINi624zYsdmB2LnYp9mEINio2YjYr9mGINis2LLYptuM2KfYqiDYqNix2YbYp9mF2YfZlCDYr9uM2q/YsSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDZiNuM2pjar9uM4oCM2YfYp9uMINmF2YfZhSDYsdinINi624zYsdmB2LnYp9mEINqp2YbZhtivLiDYqNix2KfbjCDYp9uM2YYg2YXYrNmI2LIg2KjYp9uM2K8g2K/ZgtiqINqp2YbbjNivINqG2YjZhiDZhdmF2qnZhiDYp9iz2Kog2YjYtti524zYqiDYrNiy2KbbjNin2Kog2KjYsdmG2KfZhdmHINmG2KfZvtin24zYr9in2LHYjCDYqNuM4oCO2KvYqNin2Kog24zYpyDYutuM2LHZgtin2KjZhCDYp9iz2KrZgdin2K/ZhyDYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDYyNzMxNTM1MTA5MzUwODc5NSI+Itin2LHYp9im2Ycg24zYpyDZhNi62Ygg2YXYrNmI2LLZh9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQwODg2NDI2NTQwODU4NTA2NjIiPiLYqNmHINuM2qkg2KjYsdmG2KfZhdmH2ZQg2qnYp9ix2KjYsdiv24wg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINiq2Kcg2YXYrNmI2LLZh9in24wg2K7Yp9i124wg2LHYpyDYqNix2KfbjCDYrtmI2K8g24zYpyDYr9uM2q/YsSDYqNix2YbYp9mF2YfigIzZh9inINin2LHYp9im2Ycg2qnYsdiv2Ycg24zYpyDYotmG4oCM2YfYpyDYsdinINmE2LrZiCDaqdmG2K8uINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdi22LEg2KfYsiDYp9uM2YYg2K3Yp9mE2Kog2KjYsdin24wg2K/Ys9iq2LHYs9uMINio2Ycg2YjbjNqY2q/bjOKAjNmH2KfbjNuMINin2LPYqtmB2KfYr9mHINmF24zigIzaqdmG2YbYryDaqdmHINi02YXYpyDYp9is2KfYstmHINii2YYg2LHYpyDYr9ixINin2K7YqtuM2KfYsdi02KfZhiDZgtix2KfYsSDZhtiv2KfYr9mH4oCM2KfbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iODQ2MzE4MTYyODY5NTM5NjM5MSI+Itiq2YbYuNuM2YUg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINiq2LHYrNuM2K3bjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9IjQ5NzM5ODY3NjIyNDE3ODM3MTIiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNix2YbYp9mF2YfigI7Zh9in24wg2KrYsdis24zYrduMINi02YXYpyDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYqNiv2YjZhiDYp9i52YTYp9mGINio2LHZhtin2YXZh+KAjtmH2KfbjNuMINix2Kcg2qnZhyDYp9is2LHYpyDZhduM4oCO2LTZiNmG2K/YjCDYqti624zbjNixINiv2YfZhtivINiu2YjYryDYsdinINio2Ycg2KzYp9uMINio2LHZhtin2YXZh+KAjtmH2KfbjCDaqdmG2YjZhtuMINmC2YTZhdiv2KfYryDaqdmG2YbYryDYqtinINiv2KfYr9mH4oCO2YfYp9uMINi02K7YtduMINix2Kcg2KfYsiDYtNmF2Kcg2KzZhdi54oCM2KLZiNix24wg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI4NDYzMTgxNjI4Njk1Mzk2MzkxIj4i4oCP2KrZhti424zZhSDYqNix2YbYp9mF2YfigI7Zh9in24wg2KrYsdis24zYrduMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iNDk3Mzk4Njc2MjI0MTc4MzcxMiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2LHZhtin2YXZh+KAjtmH2KfbjCDYqtix2KzbjNit24wg2LTZhdinINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINio2K/ZiNmGINin2LnZhNin2YYg2KjYsdmG2KfZhdmH4oCO2YfYp9uM24wg2LHYpyDaqdmHINin2KzYsdinINmF24zigI7YtNmI2YbYr9iMINiq2LrbjNuM2LEg2K/Zh9mG2K8g2K7ZiNivINix2Kcg2KjZhyDYrNin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINqp2YbZiNmG24wg2YLZhNmF2K/Yp9ivINqp2YbZhtivINiq2Kcg2K/Yp9iv2YfigI7Zh9in24wg2LTYrti124wg2LHYpyDYp9iyINi02YXYpyDYrNmF2LnigIzYotmI2LHbjCDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSIyMjI2MTk1MjkwOTU1MjI0NzMwIj4i2KfYtdmE2KfYrSDYqtmG2LjbjNmF2KfYqiDYs9uM2LPYqtmFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9Ijc3NzU3MjM0NDE1NTg5MDcxODEiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYr9in2K/Zh+KAjtmH2KfbjCDYqtmG2LjbjNmFINiz24zYs9iq2YUg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2b7bjNqp2LHYqNmG2K/bjCDYs9uM2LPYqtmFINi02YXYpyDYsdinINiu2LHYp9ioINqp2YbZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSI3Nzc1NzIzNDQxNTU4OTA3MTgxIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K/Yp9iv2YfigI7Zh9in24wg2KrZhti424zZhSDYs9uM2LPYqtmFINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINm+24zaqdix2KjZhtiv24wg2LPbjNiz2KrZhSDYtNmF2Kcg2LHYpyDYrtix2KfYqCDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSIyMDQ2NzYyNTE4NzY3MTgyODgiPiLYp9i12YTYp9itINqp2LHYr9mGINiq2YbYuNuM2YXYp9iqINiz24zYs9iq2YUg2KfbjNmF2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iODE1OTUzNTYxMzAyMDEzNzM5MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYr9in2K/Zh+KAjtmH2KfbjCDYqtmG2LjbjNmF2KfYqiDYp9mF2YbbjNiq24wg2LPbjNiz2KrZhSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNiz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiLYp9i12YTYp9itINqp2LHYr9mGINmG2YLYtNmHINiz2LHZiNuM2LPigIzZh9in24wgR29vZ2xlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIxMjg3MzA5NDM3NjM4MzgwMjI5Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YbZgti02Ycg2LPYsdmI24zYs+KAjNmH2KfbjCBHb29nbGUg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSI4MTU5NTM1NjEzMDIwMTM3MzkxIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiv2KfYr9mH4oCO2YfYp9uMINiq2YbYuNuM2YXYp9iqINin2YXZhtuM2KrbjCDYs9uM2LPYqtmFINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHYp9uMINin2LPYqtmB2KfYr9mHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR3NlcnZpY2VzIiBtc2dpZD0iMjE0OTQyNjY2NDIyNjE1MjE4NSI+IuKAj9in2LXZhNin2K0g2qnYsdiv2YYg2YbZgti02Ycg2LPYsdmI24zYs+KAjNmH2KfbjCBHb29nbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtmC2LTZhyDYs9ix2YjbjNiz4oCM2YfYp9uMIEdvb2dsZSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlQm9vdENvbXBsZXRlZCIgbXNnaWQ9IjUzMTI5NjU1NjU5ODc4MDAwMjUiPiLYp9is2LHYpyDYtNiv2YYg2K/YsSDZh9mG2q/Yp9mFINix2KfZh+KAjNin2YbYr9in2LLbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzkwMzA0NjY0MTE2ODgwNzA0Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjZhyDZhdit2LYg2KfYqtmF2KfZhSDYsdin2YfigI7Yp9mG2K/Yp9iy24wg2LPbjNiz2KrZhSDYrtmI2K/YqNiu2YjYryDYtNix2YjYuSDYqNmHINqp2KfYsSDaqdmG2K8uINin24zZhiDaqdin2LEg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINi02YjYryDZhdiv2Kog2LLZhdin2YYg2KjbjNi02KrYsduMINi12LHZgSDYtNiv2YjYuSDYqNmHINqp2KfYsSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYtNmI2K8g2Ygg2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjYpyDYp9is2LHYp9uMINmH2YXbjNi02q/bjCDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINqp2YbYryDaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MTM5NTA1ODkxMDI2MTc1MDQiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINmF2K3YtiDYp9uM2YbaqdmHINiz24zYs9iq2YUg2LHYp9mH4oCO2KfZhtiv2KfYstuMINi02K8g2K7ZiNiv2KjYrtmI2K8g2LTYsdmI2Lkg2KjZhyDaqdin2LEg2qnZhtivLiDYp9uM2YYg2qnYp9ixINio2KfYudirINmF24zigI7YtNmI2K8g2YXYr9iqINiy2YXYp9mGINio24zYtNiq2LHbjCDYtdix2YEg2LTZiNivINiq2Kcg2KrZhNmB2YYg2LTYsdmI2Lkg2KjZhyDaqdin2LEg2qnZhtivINmIINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2YQg2KrZhNmB2YYg2qnZhtivINi02YjYryDahtmI2YYg2YfZhduM2LTZhyDYr9ixINit2KfZhCDYp9is2LHYpyDYtNiv2YYg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzkwMzA0NjY0MTE2ODgwNzA0Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjZhyDZhdit2LYg2KfYqtmF2KfZhSDYsdin2YfigI7Yp9mG2K/Yp9iy24wg2LPbjNiz2KrZhSDYrtmI2K/YqNiu2YjYryDYtNix2YjYuSDYqNmHINqp2KfYsSDaqdmG2K8uINin24zZhiDaqdin2LEg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINi02YjYryDZhdiv2Kog2LLZhdin2YYg2KjbjNi02KrYsduMINi12LHZgSDYtNiv2YjYuSDYqNmHINqp2KfYsSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYtNmI2K8g2Ygg2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjYpyDYp9is2LHYp9uMINmH2YXbjNi02q/bjCDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINqp2YbYryDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MTM5NTA1ODkxMDI2MTc1MDQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINmF2K3YtiDYp9uM2YbaqdmHINiz24zYs9iq2YUg2LHYp9mH4oCO2KfZhtiv2KfYstuMINi02K8g2K7ZiNiv2KjYrtmI2K8g2LTYsdmI2Lkg2KjZhyDaqdin2LEg2qnZhtivLiDYp9uM2YYg2qnYp9ixINio2KfYudirINmF24zigI7YtNmI2K8g2YXYr9iqINiy2YXYp9mGINio24zYtNiq2LHbjCDYtdix2YEg2LTZiNivINiq2Kcg2KrZhNmB2YYg2LTYsdmI2Lkg2KjZhyDaqdin2LEg2qnZhtivINmIINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2YQg2KrZhNmB2YYg2qnZhtivINi02YjYryDahtmI2YYg2YfZhduM2LTZhyDYr9ixINit2KfZhCDYp9is2LHYpyDYtNiv2YYg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U3RpY2t5IiBtc2dpZD0iNzkxOTEyNjM3MjYwNjg4MTYxNCI+Itin2LHYs9in2YQg2b7Yrti0INqG2LPYqNmG2K/ZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINm+2K7YtOKAjNmH2KfbjCDZhdin2YbYr9qv2KfYsSDYsdinINqp2Ycg2b7YsyDYp9iyINin2KrZhdin2YUg2b7Yrti0INio2KfZgtuMINmF24zigI7Zhdin2YbZhtivINin2LHYs9in2YQg2qnZhtivLiDYp9iz2KrZgdin2K/ZhyDYqNuM2LQg2KfYsiDYrdivINin24zZhiDZiNuM2pjar9uMINmF2YXaqdmGINin2LPYqiDYqNin2LnYqyDZhdi12LHZgSDYqNuM2LQg2KfYsiDYrdivINit2KfZgdi42Ycg2Ygg2K/YsSDZhtiq24zYrNmHINqp2YbYr9uMINuM2Kcg2YbYp9m+2KfbjNiv2KfYsduMINix2KfbjNin2YbZh9mUINmE2YjYrduMINi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2b7Yrti04oCM2YfYp9uMINmF2KfZhtiv2q/Yp9ixINix2Kcg2qnZhyDZvtizINin2LIg2KfYqtmF2KfZhSDZvtiu2LQg2KjYp9mC24wg2YXbjOKAjtmF2KfZhtmG2K8g2KfYsdiz2KfZhCDaqdmG2K8uINin2LPYqtmB2KfYr9mHINio24zYtCDYp9iyINit2K8g2KfbjNmGINmI24zamNqv24wg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINmF2LXYsdmBINio24zYtCDYp9iyINit2K8g2K3Yp9mB2LjZhyDZiCDYr9ixINmG2KrbjNis2Ycg2qnZhtiv24wg24zYpyDZhtin2b7Yp9uM2K/Yp9ix24wg2KrZhNmB2YYg2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINm+2K7YtOKAjNmH2KfbjCDZhdin2YbYr9qv2KfYsSDYsdinINqp2Ycg2b7YsyDYp9iyINin2KrZhdin2YUg2b7Yrti0INio2KfZgtuMINmF24zigI7Zhdin2YbZhtivINin2LHYs9in2YQg2qnZhtivLiDYp9iz2KrZgdin2K/ZhyDYqNuM2LQg2KfYsiDYrdivINin24zZhiDZiNuM2pjar9uMINmF2YXaqdmGINin2LPYqiDYqNin2LnYqyDZhdi12LHZgSDYqNuM2LQg2KfYsiDYrdivINit2KfZgdi42Ycg2Ygg2K/YsSDZhtiq24zYrNmHINqp2YbYr9uMINuM2Kcg2YbYp9m+2KfbjNiv2KfYsduMINix2KfbjNin2YbZh9mUINmE2YjYrduMINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2b7Yrti04oCM2YfYp9uMINmF2KfZhtiv2q/Yp9ixINix2Kcg2qnZhyDZvtizINin2LIg2KfYqtmF2KfZhSDZvtiu2LQg2KjYp9mC24wg2YXbjOKAjtmF2KfZhtmG2K8g2KfYsdiz2KfZhCDaqdmG2K8uINin2LPYqtmB2KfYr9mHINio24zYtCDYp9iyINit2K8g2KfbjNmGINmI24zamNqv24wg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINmF2LXYsdmBINio24zYtCDYp9iyINit2K8g2K3Yp9mB2LjZhyDZiCDYr9ixINmG2KrbjNis2Ycg2qnZhtiv24wg24zYpyDZhtin2b7Yp9uM2K/Yp9ix24wg2KrZhNmB2YYg2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENvbnRhY3RzIiBtc2dpZD0iODM0ODQ4MTEzMTg5OTg4NjEzMSI+Itiu2YjYp9mG2K/ZhiDZhdiu2KfYt9io24zZhiDYtNmF2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUyOTQ4NjY4NTY5NDExNDk2MzkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2K/Yp9iv2YfigIzZh9in24wg2YXYsdio2YjYtyDYqNmHINmF2K7Yp9i32KjbjNmGINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LTZhdinINix2Kcg2KjYrtmI2KfZhtivINin2LIg2KzZhdmE2YfYjCDYqti52K/Yp9ivINiv2YHYudin2Kog2KrZhdin2LPigIzZh9in24zbjCDaqdmHINio2LHZgtix2KfYsSDaqdix2K/Zh+KAjNin24zYr9iMINin24zZhduM2YTigIzZh9in24zbjCDaqdmHINin2LHYs9in2YQg2qnYsdiv2YfigIzYp9uM2K8g24zYpyDYqNmHINix2YjYtOKAjNmH2KfbjCDYr9uM2q/YsduMINio2Ycg2KfZgdix2KfYryDYrtin2LXbjCDYp9ix2KrYqNin2Lcg2KjYsdmC2LHYp9ixINqp2LHYr9mH4oCM2KfbjNivLiDYp9uM2YYg2KjYpyDYqNix2YbYp9mF2YfigIzZh9inINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYr9in2K/Zh+KAjNmH2KfbjCDZhdiu2KfYt9ioINi02YXYpyDYsdinINiw2K7bjNix2Ycg2qnZhtmG2K8g2Ygg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINmF2K7YsdioINmF2YXaqdmGINin2LPYqiDYr9in2K/Zh+KAjNmH2KfbjCDZhdiu2KfYt9ioINix2Kcg2KjYr9mI2YYg2KfYt9mE2KfYuSDYtNmF2Kcg2KjZhyDYp9i02KrYsdin2qkg2Kjar9iw2KfYsdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ0MDY1NDE1MjQ1NzMwMDY2MiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYr9in2K/Zh+KAjNmH2KfbjCDZhdix2KjZiNi3INio2Ycg2YXYrtin2LfYqNuM2YYg2LDYrtuM2LHZhyDYtNiv2Ycg2K/YsSDYqtmE2YHZhiDYtNmF2Kcg2LHYpyDYqNiu2YjYp9mG2K8g2KfYsiDYrNmF2YTZh9iMINiq2LnYr9in2K8g2K/Zgdi52KfYqiDYqtmF2KfYs+KAjNmH2KfbjNuMINqp2Ycg2KjYsdmC2LHYp9ixINqp2LHYr9mH4oCM2KfbjNiv2Iwg2KfbjNmF24zZhOKAjNmH2KfbjNuMINqp2Ycg2KfYsdiz2KfZhCDaqdix2K/Zh+KAjNin24zYryDbjNinINio2Ycg2LHZiNi04oCM2YfYp9uMINiv24zar9ix24wg2KjYpyDYp9mB2LHYp9ivINiu2KfYtduMINin2LHYqtio2KfYtyDYqNix2YLYsdin2LEg2qnYsdiv2YfigIzYp9uM2K8uINin24zZhiDYqNmHINio2LHZhtin2YXZh+KAjNmH2Kcg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINiv2KfYr9mH4oCM2YfYp9uMINmF2K7Yp9i32Kgg2LTZhdinINix2Kcg2LDYrtuM2LHZhyDaqdmG2YbYryDZiCDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYrtix2Kgg2YXZhdqp2YYg2KfYs9iqINiv2KfYr9mH4oCM2YfYp9uMINmF2K7Yp9i32Kgg2LHYpyDYqNiv2YjZhiDYp9i32YTYp9i5INi02YXYpyDYqNmHINin2LTYqtix2KfaqSDYqNqv2LDYp9ix2YbYry4iPC9zdHJpbmc+CkBAIC00NDcsMTIgKzQ1NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM3MDA2NDUxODQ4NzA3NjAyODUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2q/Ystin2LHYtCDYqtmF2KfYsyDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYtNmF2Kcg2LHYpyDYqNiu2YjYp9mG2K8g2KfYsiDYrNmF2YTZhyDYr9in2K/Zh+KAjNmH2KfbjCDZhdix2KjZiNi3INio2Ycg2KrZhdin2LPigIzZh9in24wg2YjYsdmI2K/bjCDZiCDYrtix2YjYrNuMLiDYp9uM2YYg2YXYrNmI2LIg2KjZhyDYqNix2YbYp9mF2YfigIzZh9inINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYr9in2K/Zh+KAjNmH2KfbjCDar9iy2KfYsdi0INiq2YXYp9izINi02YXYpyDYsdinINiw2K7bjNix2Ycg2qnZhtmG2K8g2Ygg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINmF2K7YsdioINmF2YXaqdmGINin2LPYqiDYr9in2K/Zh+KAjNmH2KfbjCDar9iy2KfYsdi0INiq2YXYp9izINi02YXYpyDYsdinINio2K/ZiNmGINin2LfZhNin2Lkg2LTZhdinINio2Ycg2KfYtNiq2LHYp9qpINio2q/YsNin2LHZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3NzcyNTc5NjgxMzIxNzI0NCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDar9iy2KfYsdi0INiq2YXYp9izINiq2YTZgdmG24wg2LTZhdinINix2Kcg2KjYrtmI2KfZhtivINin2LIg2KzZhdmE2Ycg2K/Yp9iv2YfigIzZh9in24wg2YXYsdio2YjYtyDYqNmHINiq2YXYp9iz4oCM2YfYp9uMINmI2LHZiNiv24wg2Ygg2K7YsdmI2KzbjC4g2KfbjNmGINmF2KzZiNiyINio2Ycg2KjYsdmG2KfZhdmH4oCM2YfYpyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2K/Yp9iv2YfigIzZh9in24wg2q/Ystin2LHYtCDYqtmF2KfYsyDYtNmF2Kcg2LHYpyDYsNiu24zYsdmHINqp2YbZhtivINmIINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdiu2LHYqCDZhdmF2qnZhiDYp9iz2Kog2K/Yp9iv2YfigIzZh9in24wg2q/Ystin2LHYtCDYqtmF2KfYsyDYtNmF2Kcg2LHYpyDYqNiv2YjZhiDYp9i32YTYp9i5INi02YXYpyDYqNmHINin2LTYqtix2KfaqSDYqNqv2LDYp9ix2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsbExvZyIgbXNnaWQ9Ijg1NTIwNDU2NjQ3NDM0OTkzNTQiPiLZhtmI2LTYqtmGINqv2LLYp9ix2LQg2KrZhdin2LMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NjE4MDYwNjIyNzQxMTkyNDUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2q/Ystin2LHYtNin2Kog2KrZhdin2LMg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LTZhdin2Iwg2KfYsiDYrNmF2YTZhyDYr9in2K/Zh+KAjNmH2KfbjNuMINiv2LHZhdmI2LHYryDYqtmF2KfYs+KAjtmH2KfbjCDZiNix2YjYr9uMINmIINiu2LHZiNis24wg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdmG2KfZhdmH4oCM2YfYp9uMINmF2K7YsdioINmF2YXaqdmGINin2LPYqiDYp9iyINin24zZhiDZiNuM2pjar9uMINio2LHYp9uMINm+2KfaqSDaqdix2K/ZhiDbjNinINiq2LrbjNuM2LEg2q/Ystin2LHYtCDYqtmF2KfYsyDYtNmF2Kcg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqv2LLYp9ix2LTYp9iqINiq2YXYp9izINiq2YTZgdmG24wg2LTZhdin2Iwg2KfYsiDYrNmF2YTZhyDYr9in2K/Zh+KAjNmH2KfbjNuMINiv2LHZhdmI2LHYryDYqtmF2KfYs+KAjtmH2KfbjCDZiNix2YjYr9uMINmIINiu2LHZiNis24wg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdmG2KfZhdmH4oCM2YfYp9uMINmF2K7YsdioINmF2YXaqdmGINin2LPYqiDYp9iyINin24zZhiDZiNuM2pjar9uMINio2LHYp9uMINm+2KfaqSDaqdix2K/ZhiDbjNinINiq2LrbjNuM2LEg2q/Ystin2LHYtCDYqtmF2KfYsyDYtNmF2Kcg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NjYxODA2MDYyMjc0MTE5MjQ1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqv2LLYp9ix2LTYp9iqINiq2YXYp9izINix2KfbjNin2YbZh9mUINmE2YjYrduMINi02YXYp9iMINin2LIg2KzZhdmE2Ycg2K/Yp9iv2YfigIzZh9in24zbjCDYr9ix2YXZiNix2K8g2KrZhdin2LPigI7Zh9in24wg2YjYsdmI2K/bjCDZiCDYrtix2YjYrNuMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdiu2LHYqCDZhdmF2qnZhiDYp9iz2Kog2KfYsiDYp9uM2YYg2YjbjNqY2q/bjCDYqNix2KfbjCDZvtin2qkg2qnYsdiv2YYg24zYpyDYqti624zbjNixINqv2LLYp9ix2LQg2KrZhdin2LMg2LTZhdinINin2LPYqtmB2KfYr9mHINqp2YbZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4Mzk0MTczNjM1Mjc4Nzg0MiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDar9iy2KfYsdi02KfYqiDYqtmF2KfYsyDYqtmE2YHZhtuMINi02YXYp9iMINin2LIg2KzZhdmE2Ycg2K/Yp9iv2YfigIzZh9in24zbjCDYr9ix2YXZiNix2K8g2KrZhdin2LPigI7Zh9in24wg2YjYsdmI2K/bjCDZiCDYrtix2YjYrNuMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHZhtin2YXZh+KAjNmH2KfbjCDZhdiu2LHYqCDZhdmF2qnZhiDYp9iz2Kog2KfYsiDYp9uM2YYg2YjbjNqY2q/bjCDYqNix2KfbjCDZvtin2qkg2qnYsdiv2YYg24zYpyDYqti624zbjNixINqv2LLYp9ix2LQg2KrZhdin2LMg2LTZhdinINin2LPYqtmB2KfYr9mHINqp2YbZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFByb2ZpbGUiIG1zZ2lkPSI0NzAxODg5ODUyNjEyNzE2Njc4Ij4i2K7ZiNin2YbYr9mGINqp2KfYsdiqINiq2YXYp9izINi02YXYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ2MjQ3NTE1MTg0OTg4ODg0OCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYp9i32YTYp9i52KfYqiDZhtmF2KfbjNmHINi02K7YtduMINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2K/Ys9iq2q/Yp9mHINi02YXYp9iMINmF2KfZhtmG2K8g2YbYp9mFINmIINin2LfZhNin2LnYp9iqINiq2YXYp9izINi02YXYpyDYsdinINio2K7ZiNin2YbYry4g24zYudmG24wg2KjYsdmG2KfZhdmHINmF24zigI7YqtmI2KfZhtivINi02YXYpyDYsdinINi02YbYp9iz2KfbjNuMINqp2YbYryDZiCDZhdmF2qnZhiDYp9iz2Kog2KfYt9mE2KfYudin2Kog2YbZhdin24zZh9mUINi02YXYpyDYsdinINio2Ycg2K/bjNqv2LHYp9mGINin2LHYs9in2YQg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ2MjQ3NTE1MTg0OTg4ODg0OCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYp9i32YTYp9i52KfYqiDZhtmF2KfbjNmHINi02K7YtduMINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2K/Ys9iq2q/Yp9mHINi02YXYp9iMINmF2KfZhtmG2K8g2YbYp9mFINmIINin2LfZhNin2LnYp9iqINiq2YXYp9izINi02YXYpyDYsdinINio2K7ZiNin2YbYry4g24zYudmG24wg2KjYsdmG2KfZhdmHINmF24zigI7YqtmI2KfZhtivINi02YXYpyDYsdinINi02YbYp9iz2KfbjNuMINqp2YbYryDZiCDZhdmF2qnZhiDYp9iz2Kog2KfYt9mE2KfYudin2Kog2YbZhdin24zZh9mUINi02YXYpyDYsdinINio2Ycg2K/bjNqv2LHYp9mGINin2LHYs9in2YQg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVQcm9maWxlIiBtc2dpZD0iOTA3NzkzNjI4Nzc3Mzk3NjQzIj4i2KfYtdmE2KfYrSDaqdin2LHYqiDYqtmF2KfYsyDYtNmF2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NTUyMDg0Mjk0NTk4NDY1ODk5Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KfYt9mE2KfYudin2Kog2YbZhdin24zZhyDYtNiu2LXbjCDYsNiu24zYsdmHINi02K/ZhyDYr9ixINiv2LPYqtqv2KfZhyDYtNmF2KfYjCDZhdin2YbZhtivINmG2KfZhSDZiCDYp9i32YTYp9i52KfYqiDYqtmF2KfYsyDYtNmF2Kcg2LHYpyDYqti624zbjNixINiv2YfYryDbjNinINin2LbYp9mB2Ycg2qnZhtivLiDbjNi52YbbjCDYqNix2YbYp9mF2YfigI4g2YXbjOKAjtiq2YjYp9mG2K8g2LTZhdinINix2Kcg2LTZhtin2LPYp9uM24wg2qnZhtivINmIINmF2YXaqdmGINin2LPYqiDYp9i32YTYp9i52KfYqiDZhtmF2KfbjNmH2ZQg2LTZhdinINix2Kcg2KjYsdin24wg2K/bjNqv2LHYp9mGINin2LHYs9in2YQg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYp9i32YTYp9i52KfYqiDZhtmF2KfbjNmHINi02K7YtduMINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2K/Ys9iq2q/Yp9mHINi02YXYp9iMINmF2KfZhtmG2K8g2YbYp9mFINmIINin2LfZhNin2LnYp9iqINiq2YXYp9izINi02YXYpyDYsdinINiq2LrbjNuM2LEg2K/Zh9ivINuM2Kcg2KfYttin2YHZhyDaqdmG2K8uINuM2LnZhtuMINio2LHZhtin2YXZh+KAjiDZhduM4oCO2KrZiNin2YbYryDYtNmF2Kcg2LHYpyDYtNmG2KfYs9in24zbjCDaqdmG2K8g2Ygg2YXZhdqp2YYg2KfYs9iqINin2LfZhNin2LnYp9iqINmG2YXYp9uM2YfZlCDYtNmF2Kcg2LHYpyDYqNix2KfbjCDYr9uM2q/Ysdin2YYg2KfYsdiz2KfZhCDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTI2ODkyMDk1NjE1MjQxOTE3MCI+Itiu2YjYp9mG2K/ZhiDYrNix24zYp9mGINin2KzYqtmF2KfYuduMINi02YXYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Ycg2KjZh+KAjNix2YjYstix2LPYp9mG24zigIzZh9in24wg2KfYrNiq2YXYp9i524wg2KfYsiDYt9ix2YEg2LTZhdinINmIINiv2YjYs9iq2KfZhiDYtNmF2Kcg2K/Ys9iq2LHYs9uMINm+24zYr9inINqp2LHYr9mHINmIINii2YbigIzZh9inINix2Kcg2YfZhdqv2KfZheKAjNiz2KfYstuMINqp2YbYry4g2K/ZgtiqINqp2YbbjNivINqp2Ycg2YfZhtqv2KfZhSDYp9i02KrYsdin2qnigIzar9iw2KfYsduMIC0tINin24zZhiDZiNuM2pjar9uMINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYp9ix2KrYqNin2LfYp9iqINio24zZhiDYtNmF2Kcg2Ygg2K/ZiNiz2KrYp9mGINi02YXYpyDYsdinINiv2LEg2LTYqNqp2YfigIzZh9in24wg2KfYrNiq2YXYp9i524zYjCDYtdix2YHZhti42LEg2KfYsiDZhdit2LHZhdin2YbZhyDYqNmI2K/ZhiDYotmG4oCM2YfYpyDYqNiu2YjYp9mG2K8uINiq2YjYrNmHOiDYp9uM2YYg2YXYrNmI2LIg2YXZhdqp2YYg2KfYs9iqINiv2LEg2YfZhdmHINi02KjaqdmH4oCM2YfYp9uMINin2KzYqtmF2KfYuduMINin2KzYsdinINmG2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNTA0MTc5MjIyNDkzMjM1NjQ1Ij4i2YbZiNi02KrZhiDYr9ixINis2LHbjNin2YYg2KfYrNiq2YXYp9i524wg2LTZhdinIjwvc3RyaW5nPgpAQCAtNDY0LDIzICs0NzEsMjUgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NzkwMzU1MjAxMTM2Njg1MjgiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2LHZiNuM2K/Yp9iv2YfYp9uM24wg2LHYpyDaqdmHINmF24zigIzYqtmI2KfZhtuM2K8g2K/YsSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYrtmI2K8g2KfYtdmE2KfYrSDZhtmF2KfbjNuM2K/YjCDYp9iyINis2YXZhNmHINix2YjbjNiv2KfYr9mH2KfbjCDYr9mI2LPYqtin2YYg24zYpyDZh9mF2qnYp9ix2KfZhiDYrtmI2K8g2LHYp9iMINin2LbYp9mB2Ycg24zYpyDYrdiw2YEg2qnYsdiv2Ycg24zYpyDYqti624zbjNixINiv2YfYry4g2KfbjNmGINmI24zamNqv24wg2YXZhdqp2YYg2KfYs9iqINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2K/Zh9ivINm+24zYp9mF4oCM2YfYp9uM24wg2LHYpyDaqdmHINio2Ycg2YbYuNixINmF24zigIzYsdiz2K8g2KfYsiDZhdin2YTaqduM2YYg2KrZgtmI24zZhSDYsdiz24zYr9mHINin2LPYqiDYp9ix2LPYp9mEINmG2YXZiNiv2Ycg24zYpyDYsdmI24zYr9in2K/Zh9inINix2Kcg2KjYr9mI2YYg2KfYt9mE2KfYuSDZhdin2YTaqSDYp9i12YTYp9itINqp2YbZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMzI0NDY5NDk2MzI3MjQ5Mzc2Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINix2YjbjNiv2KfYr9mH2KfbjNuMINix2Kcg2qnZhyDZhduM4oCM2KrZiNin2YbbjNivINiv2LEg2KrZhNmB2YYg2K7ZiNivINin2LXZhNin2K0g2YbZhdin24zbjNiv2Iwg2KfYsiDYrNmF2YTZhyDYsdmI24zYr9in2K/Zh9in24wg2K/ZiNiz2KrYp9mGINuM2Kcg2YfZhdqp2KfYsdin2YYg2K7ZiNivINix2KfYjCDYp9i22KfZgdmHINuM2Kcg2K3YsNmBINqp2LHYr9mHINuM2Kcg2KrYutuM24zYsSDYr9mH2K8uINin24zZhiDZiNuM2pjar9uMINmF2YXaqdmGINin2LPYqiDYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINiv2YfYryDZvtuM2KfZheKAjNmH2KfbjNuMINix2Kcg2qnZhyDYqNmHINmG2LjYsSDZhduM4oCM2LHYs9ivINin2LIg2YXYp9mE2qnbjNmGINiq2YLZiNuM2YUg2LHYs9uM2K/ZhyDYp9iz2Kog2KfYsdiz2KfZhCDZhtmF2YjYr9mHINuM2Kcg2LHZiNuM2K/Yp9iv2YfYpyDYsdinINio2K/ZiNmGINin2LfZhNin2Lkg2YXYp9mE2qkg2KfYtdmE2KfYrSDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9Ijg2ODgzMzQ5NzQwMzY4MjMzMzAiPiLZhdmG2KfYqNi5INmF2qnYp9mGINqp2KfYsNioINio2LHYp9uMINiq2LPYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9IjU4MDg3MTEwMzk0ODIwNTE4MjQiPiLZhdmG2KfYqNi5INmF2YjZgti524zYqiDZhdqp2KfZhtuMINqp2KfYsNioINix2Kcg2KjYsdin24wg2KrYs9iqINqp2LHYr9mGINuM2Kcg2YbYtdioINuM2qkg2KfYsdin2KbZh+KAjNiv2YfZhtiv2Ycg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KzYr9uM2K8g2KfbjNis2KfYryDZhtmF2KfbjNuM2K8uINin24zZhiDaqdin2LEg2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINmF2YjZgti524zYqiDZhdqp2KfZhtuMINmIL9uM2Kcg2YjYtti524zYqiDar9iy2KfYsdi0INiv2KfYr9mHINi02K/ZhyDYqtmI2LPYtyDYs9in24zYsSDZhdmG2KfYqNi5INmF2YjZgti524zYqiDZhdqp2KfZhtuMINmF2KfZhtmG2K8gR1BTINuM2Kcg2KfYsdin2KbZh+KAjNiv2YfZhtiv2q/Yp9mGINmF2YjZgti524zYqiDZhdqp2KfZhtuMINix2Kcg2YbYp9iv24zYr9mHINio2q/bjNix2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IuKAj9mF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2qnYp9iw2Kgg2LHYpyDYqNix2KfbjCDYqtiz2Kog2qnYsdiv2YYg24zYpyDZhti12Kgg24zaqSDYp9ix2KfYptmH4oCM2K/Zh9mG2K/ZhyDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYrNiv24zYryDYp9uM2KzYp9ivINmG2YXYp9uM24zYry4g2KfbjNmGINqp2KfYsSDYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2Ygv24zYpyDZiNi22LnbjNiqINqv2LLYp9ix2LQg2K/Yp9iv2Ycg2LTYr9mHINiq2YjYs9i3INiz2KfbjNixINmF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2YXYp9mG2YbYryBHUFMg24zYpyDYp9ix2KfYptmH4oCM2K/Zh9mG2K/ar9in2YYg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2LHYpyDZhtin2K/bjNiv2Ycg2Kjar9uM2LHYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjI4MzYzMDgwNzY3MjA1NTM4MzciPiLYr9iz2KrYsdiz24wg2KjZhyDZgdix2YXYp9mG4oCM2YfYp9uMINio24zYtNiq2LEg2KfYsdin2KbZhyDYr9mH2YbYr9mHINmF2qnYp9mGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iNTk0NTE2NjY0MjMzNTgwMDc2MyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2Ycg2YHYsdmF2KfZhuKAjNmH2KfbjCDYp9ix2KfYptmH4oCO2K/Zh9mG2K/ZhyDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYr9uM2q/YsduMINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNivLiDYp9uM2YYg2YjbjNqY2q/bjCDZhdmF2qnZhiDYp9iz2Kog2KjYp9i52Ksg2YXYrtiq2YQg2LTYr9mGINi52YXZhNqp2LHYryBHUFMg24zYpyDYr9uM2q/YsSDZhdmG2KfYqNi5INmF2YjZgti524zYqiDZhdqp2KfZhtuMINiq2YjYs9i3INin24zZhiDYqNix2YbYp9mF2Ycg2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINmB2LHZhdin2YbigIzZh9in24wg2KfYsdin2KbZh+KAjtiv2YfZhtiv2Ycg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2K/bjNqv2LHbjCDYr9iz2KrYsdiz24wg2K/Yp9i02KrZhyDYqNin2LTYry4g2KfbjNmGINmI24zamNqv24wg2YXZhdqp2YYg2KfYs9iqINio2KfYudirINmF2K7YqtmEINi02K/ZhiDYudmF2YTaqdix2K8gR1BTINuM2Kcg2K/bjNqv2LEg2YXZhtin2KjYuSDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYqtmI2LPYtyDYp9uM2YYg2KjYsdmG2KfZhdmHINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iNjU3ODEwMTE5OTgyNTE5Mzg3MyI+ItmF2KzZiNiyINio2LHYp9uMINmG2LXYqCDbjNqpINin2LHYp9im2Ycg2K/Zh9mG2K/ZhyDZhdqp2KfZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+ItmF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2qnYp9iw2Kgg2LHYpyDYqNix2KfbjCDYqtiz2Kog2qnYsdiv2YYg24zYpyDZhti12Kgg24zaqSDYp9ix2KfYptmH4oCM2K/Zh9mG2K/ZhyDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYrNiv24zYryDYp9uM2KzYp9ivINmG2YXYp9uM24zYry4g2KfbjNmGINqp2KfYsSDYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2Ygv24zYpyDZiNi22LnbjNiqINqv2LLYp9ix2LQg2K/Yp9iv2Ycg2LTYr9mHINiq2YjYs9i3INiz2KfbjNixINmF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2YXYp9mG2YbYryBHUFMg24zYpyDYp9ix2KfYptmH4oCM2K/Zh9mG2K/ar9in2YYg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2LHYpyDZhtin2K/bjNiv2Ycg2Kjar9uM2LHYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiLZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYr9mC24zZgiAo2YXYqNiq2YbbjCDYqNixIEdQUyDZiCDYtNio2qnZhykiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2K/ZgtuM2YIg2LTZhdinINix2Kcg2KjYpyDYp9iz2KrZgdin2K/ZhyDYp9iyINiz24zYs9iq2YUg2YXZiNmC2LnbjNiq4oCM24zYp9ioINis2YfYp9mG24wgKEdQUykg24zYpyDZhdmG2KfYqNi5INmF2YjZgti524zYqiDZhdqp2KfZhtuMINi02KjaqdmH4oCM2KfbjCDZhdin2YbZhtivINio2LHYrOKAjNmH2KfbjCDYs9mE2YjZhNuMINuM2KcgV2ktRmkg2K/YsduM2KfZgdiqINqp2YbYry4g2KfbjNmGINiz2LHZiNuM2LPigIzZh9in24wg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KjYp9uM2K8g2K/YsSDYr9iz2Krar9in2Ycg2LTZhdinINio2LHYp9uMINio2LHZhtin2YXZh+KAjNin24wg2qnZhyDYp9iyINii2YbZh9inINin2LPYqtmB2KfYr9mHINmF24zigIzaqdmG2K/YjCDZgdi52KfZhCDZiCDYr9ixINiv2LPYqtix2LMg2KjYp9i02K8uINio2LHZhtin2YXZh+KAjNmH2Kcg2YXZhdqp2YYg2KfYs9iqINin2LIg2KLZhiDYqNix2KfbjCDYqti524zbjNmGINis2KfbjNuMINqp2Ycg2YfYs9iq24zYr9iMINin2LPYqtmB2KfYr9mHINqp2YbZhtivINmIINmF2YXaqdmGINin2LPYqiDZhtuM2LHZiNuMINio2KfYqtix24wg2KjbjNi02KrYsduMINmF2LXYsdmBINqp2YbZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+IuKAj9mF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2qnYp9iw2Kgg2LHYpyDYqNix2KfbjCDYqtiz2Kog2qnYsdiv2YYg24zYpyDZhti12Kgg24zaqSDYp9ix2KfYptmH4oCM2K/Zh9mG2K/ZhyDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYrNiv24zYryDYp9uM2KzYp9ivINmG2YXYp9uM24zYry4g2KfbjNmGINqp2KfYsSDYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2Ygv24zYpyDZiNi22LnbjNiqINqv2LLYp9ix2LQg2K/Yp9iv2Ycg2LTYr9mHINiq2YjYs9i3INiz2KfbjNixINmF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2YXYp9mG2YbYryBHUFMg24zYpyDYp9ix2KfYptmH4oCM2K/Zh9mG2K/ar9in2YYg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2LHYpyDZhtin2K/bjNiv2Ycg2Kjar9uM2LHYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiLigI/ZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYr9mC24zZgiAo2YXYqNiq2YbbjCDYqNixIEdQUyDZiCDYtNio2qnZhykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2K/ZgtuM2YIg2LTZhdinINix2Kcg2KjYpyDYp9iz2KrZgdin2K/ZhyDYp9iyINiz24zYs9iq2YUg2YXZiNmC2LnbjNiq4oCM24zYp9ioINis2YfYp9mG24wgKEdQUykg24zYpyDZhdmG2KfYqNi5INmF2YjZgti524zYqiDZhdqp2KfZhtuMINi02KjaqdmH4oCM2KfbjCDZhdin2YbZhtivINio2LHYrOKAjNmH2KfbjCDYs9mE2YjZhNuMINuM2KcgV2ktRmkg2K/YsduM2KfZgdiqINqp2YbYry4g2KfbjNmGINiz2LHZiNuM2LPigIzZh9in24wg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KjYp9uM2K8g2K/YsSDYr9iz2Krar9in2Ycg2LTZhdinINio2LHYp9uMINio2LHZhtin2YXZh+KAjNin24wg2qnZhyDYp9iyINii2YbZh9inINin2LPYqtmB2KfYr9mHINmF24zigIzaqdmG2K/YjCDZgdi52KfZhCDZiCDYr9ixINiv2LPYqtix2LMg2KjYp9i02K8uINio2LHZhtin2YXZh+KAjNmH2Kcg2YXZhdqp2YYg2KfYs9iqINin2LIg2KLZhiDYqNix2KfbjCDYqti524zbjNmGINis2KfbjNuMINqp2Ycg2YfYs9iq24zYr9iMINin2LPYqtmB2KfYr9mHINqp2YbZhtivINmIINmF2YXaqdmGINin2LPYqiDZhtuM2LHZiNuMINio2KfYqtix24wg2KjbjNi02KrYsduMINmF2LXYsdmBINqp2YbZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSI0ODg3ODk1MzYyMzU0MjM5NjI4Ij4i2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KrZgtix24zYqNuMICjZhdio2KrZhtuMINio2LEg2LTYqNqp2YcpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSIyNTM4MjAwMTg0MzczMzAyMjk1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINqp2Ycg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KrZgtix24zYqNuMINi02YXYpyDYsdinINio2K/Ys9iqINii2YjYsdivLiDYp9uM2YYg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KfYsiDYs9ix2YjbjNiz4oCM2YfYp9uMINmF2YjZgti524zYqiDZhdqp2KfZhtuMINqp2Ycg2KfYsiDZhdmG2KfYqNi5INmF2YjZgti524zYqiDZhdqp2KfZhtuMINi02KjaqdmH4oCM2KfbjCDZhdin2YbZhtivINio2LHYrOKAjNmH2KfbjCDYs9mE2YjZhNuMINmIIFdpLUZpINin2LPYqtmB2KfYr9mHINmF24zigIzaqdmG2YbYr9iMINio2K/Ys9iqINmF24zigIzYotuM2K8uINin24zZhiDYs9ix2YjbjNiz4oCM2YfYp9uMINmF2YjZgti524zYqiDZhdqp2KfZhtuMINio2KfbjNivINiv2LEg2K/Ys9iq2q/Yp9mHINi02YXYpyDYqNix2KfbjCDYqNix2YbYp9mF2YfigIzYp9uMINqp2Ycg2KfYsiDYotmG2YfYpyDYp9iz2KrZgdin2K/ZhyDZhduM4oCM2qnZhtiv2Iwg2YHYudin2YQg2Ygg2K/YsSDYr9iz2KrYsdizINio2KfYtNivLiDYqNix2YbYp9mF2YfigIzZh9inINmF2YXaqdmGINin2LPYqiDYp9iyINii2YYg2KjYsdin24wg2KrYuduM24zZhiDYqtmC2LHbjNio24wg2KzYp9uM24wg2qnZhyDZh9iz2KrbjNiv2Iwg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjIzNjM5Njk2NDE3OTIzODg5NDciPiLYr9iz2KrYsdiz24wg2KjZhyBTdXJmYWNlRmxpbmdlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+Itin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqNix2YbYp9mF2Ycg2KfYsiDZiNuM2pjar9uM4oCM2YfYp9uMINiz2LfYrSDZvtin24zbjNmGIFN1cmZhY2VGbGluZ2VyINin2LPYqtmB2KfYr9mHINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjI1MzgyMDAxODQzNzMzMDIyOTUiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2qnZhyDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYqtmC2LHbjNio24wg2LTZhdinINix2Kcg2KjYr9iz2Kog2KLZiNix2K8uINin24zZhiDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYp9iyINiz2LHZiNuM2LPigIzZh9in24wg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2qnZhyDYp9iyINmF2YbYp9io2Lkg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2LTYqNqp2YfigIzYp9uMINmF2KfZhtmG2K8g2KjYsdis4oCM2YfYp9uMINiz2YTZiNmE24wg2YggV2ktRmkg2KfYs9iq2YHYp9iv2Ycg2YXbjOKAjNqp2YbZhtiv2Iwg2KjYr9iz2Kog2YXbjOKAjNii24zYry4g2KfbjNmGINiz2LHZiNuM2LPigIzZh9in24wg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KjYp9uM2K8g2K/YsSDYr9iz2Krar9in2Ycg2LTZhdinINio2LHYp9uMINio2LHZhtin2YXZh+KAjNin24wg2qnZhyDYp9iyINii2YbZh9inINin2LPYqtmB2KfYr9mHINmF24zigIzaqdmG2K/YjCDZgdi52KfZhCDZiCDYr9ixINiv2LPYqtix2LMg2KjYp9i02K8uINio2LHZhtin2YXZh+KAjNmH2Kcg2YXZhdqp2YYg2KfYs9iqINin2LIg2KLZhiDYqNix2KfbjCDYqti524zbjNmGINiq2YLYsduM2KjbjCDYrNin24zbjCDaqdmHINmH2LPYqtuM2K/YjCDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMjM2Mzk2OTY0MTc5MjM4ODk0NyI+IuKAj9iv2LPYqtix2LPbjCDYqNmHIFN1cmZhY2VGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4i4oCP2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINio2LHZhtin2YXZhyDYp9iyINmI24zamNqv24zigIzZh9in24wg2LPYt9itINm+2KfbjNuM2YYgU3VyZmFjZUZsaW5nZXIg2KfYs9iq2YHYp9iv2Ycg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+Itiu2YjYp9mG2K/ZhiDYqNin2YHYsSDZgtin2KgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YXYrdiq2YjYp9uMINio2KfZgdixINqp2KfYr9ixINix2Kcg2KjYrtmI2KfZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i2b7bjNqp2LHYqNmG2K/bjCDYtdmB2K3ZhyDZhtmF2KfbjNi04oCM2YfYp9uMIFdp4oCRRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KrYpyDYp9iq2LXYp9mEINio2Ycg2LXZgdit2KfYqiDZhtmF2KfbjNi0IFdp4oCRRmkg2LHYpyDZvtuM2qnYsdio2YbYr9uMINqp2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+Itqp2YbYqtix2YQg2LXZgdit2Ycg2YbZhdin24zYtOKAjNmH2KfbjCBXaeKAkUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDaqdmHINmI24zamNqv24zigIzZh9in24wg2LPYt9itINm+2KfbjNuM2YYg2LXZgdit2YfigIzZh9in24wg2YbZhdin24zYtCBXaeKAkUZpINix2Kcg2qnZhtiq2LHZhCDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmF2K3YqtmI2KfbjCDYqNin2YHYsSDaqdin2K/YsSDYsdinINio2K7ZiNin2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiLigI/Yr9iz2KrYsdiz24wg2KjZhyBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4i4oCP2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINio2LHZhtin2YXZhyDYp9iyINmC2KfYqNmE24zYquKAjNmH2KfbjCDYs9i32K0g2b7Yp9uM24zZhiBJbnB1dEZsaW5nZXIg2KfYs9iq2YHYp9iv2Ycg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i4oCP2b7bjNqp2LHYqNmG2K/bjCDYtdmB2K3ZhyDZhtmF2KfbjNi04oCM2YfYp9uMIFdp4oCRRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KrYpyDYp9iq2LXYp9mEINio2Ycg2LXZgdit2KfYqiDZhtmF2KfbjNi0IFdp4oCRRmkg2LHYpyDZvtuM2qnYsdio2YbYr9uMINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IuKAj9qp2YbYqtix2YQg2LXZgdit2Ycg2YbZhdin24zYtOKAjNmH2KfbjCBXaeKAkUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDaqdmHINmI24zamNqv24zigIzZh9in24wg2LPYt9itINm+2KfbjNuM2YYg2LXZgdit2YfigIzZh9in24wg2YbZhdin24zYtCBXaeKAkUZpINix2Kcg2qnZhtiq2LHZhCDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2ODU3MTM0NDk4NDAyMzQ2NzA4Ij4i2LbYqNi3INiu2LHZiNis24wg2LXYr9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjIxMDU5Nzc1NDIxMjIwODg1MyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYrtix2YjYrNuMINi12K/YpyDYsdinINi22KjYtyDZiCDZh9iv2KfbjNiqINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVBdWRpb0hvdHdvcmQiIG1zZ2lkPSIxODkwNTUzOTM1NjUwMzQ5ODA4Ij4i2KrYtNiu24zYtSDaqdmE24zYr9qv2YHYqtmHIjwvc3RyaW5nPgpAQCAtNDk3LDEzMSArNTA2LDEzMSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINi12K/YpyDYsdinINio2Kcg2YXbjNqp2LHZiNmB2YYg2LbYqNi3INqp2YbYry4g2KfbjNmGINmF2KzZiNiyINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYtdiv2Kcg2LHYpyDYr9ixINmH2LEg2LLZhdin2YYg2qnZhyDYqNiu2YjYp9mH24zYryDYqNiv2YjZhiDYqtij24zbjNivINi02YXYpyDYttio2Lcg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+Iti52qnYs9io2LHYr9in2LHbjCDZiCDZgduM2YTZhdio2LHYr9in2LHbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KjYpyDYr9mI2LHYqNuM2YYg2KjZhyDYudqp2LPYqNix2K/Yp9ix24wg2Ygg2YHbjNmE2YXYqNix2K/Yp9ix24wg2KjZvtix2K/Yp9iy2K8uINin24zZhiDZhdis2YjYsiDYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzigIzYr9mH2K8g2KfYsiDYr9mI2LHYqNuM2YYg2K/YsSDZh9ixINiy2YXYp9mG24wg2KjYr9mI2YYg2KrYo9uM24zYryDYtNmF2Kcg2KfYs9iq2YHYp9iv2Ycg2qnZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+IkxFRCDZhti02KfZhtqv2LEg2KfZhtiq2YLYp9mEINiv2KfYr9mH2Iwg2YfZhtqv2KfZhSDYp9iz2KrZgdin2K/ZhyDYp9iyINiv2YjYsdio24zZhiDYutuM2LHZgdi52KfZhCDYtNmI2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4i2KjZhyDbjNqpINio2LHZhtin2YXZhyDYs9uM2LPYqtmFINin2LIg2YLYqNmEINmG2LXYqCDYtNiv2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivIExFRCDZhti02KfZhtqv2LEg2KfYs9iq2YHYp9iv2Ycg2KfYsiDYr9mI2LHYqNuM2YYg2LHYpyDYutuM2LHZgdi52KfZhCDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i4oCPTEVEINmG2LTYp9mG2q/YsSDYp9mG2KrZgtin2YQg2K/Yp9iv2YfYjCDZh9mG2q/Yp9mFINin2LPYqtmB2KfYr9mHINin2LIg2K/ZiNix2KjbjNmGINi624zYsdmB2LnYp9mEINi02YjYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjQ3NjQ1ODU0NjU0ODAyOTUzNDEiPiLigI/YqNmHINuM2qkg2KjYsdmG2KfZhdmHINiz24zYs9iq2YUg2KfYsiDZgtio2YQg2YbYtdioINi02K/ZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8gTEVEINmG2LTYp9mG2q/YsSDYp9iz2KrZgdin2K/ZhyDYp9iyINiv2YjYsdio24zZhiDYsdinINi624zYsdmB2LnYp9mEINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyOTYxMjkyMjA1NzY0NDg4MzA0Ij4i2LrbjNixINmB2LnYp9mEINqp2LHYr9mGINiv2KfYptmFINix2KfbjNin2YbZh9mUINmE2YjYrduMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgzMzc4MTcwOTMzMjYzNzA1MzciPiLYqtmE2YHZhiDYqNi32YjYsSDYr9in2KbZhduMINi624zYsdmB2LnYp9mEINi02YjYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzM0ODE4ODA4MDAxNjk5NTMwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LHYpyDYqNmHINi32YjYsSDaqdmE24wg2Ygg2K/Yp9im2YXbjCDYutuM2LHZgdi52KfZhCDaqdmG2K8uINin24zZhiDaqdin2LEg2KjYs9uM2KfYsSDYrti32LHZhtin2qkg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc4ODkwMzI5NzYyNzI4MzA5OSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqv2YjYtNuMINix2Kcg2KjZhyDYt9mI2LEg2qnZhNuMINmIINiv2KfYptmF24wg2LrbjNix2YHYudin2YQg2qnZhtivLiDYp9uM2YYg2qnYp9ixINio2LPbjNin2LEg2K7Yt9ix2YbYp9qpINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMzNDgxODgwODAwMTY5OTUzMCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2KjZhyDYt9mI2LEg2qnZhNuMINmIINiv2KfYptmF24wg2LrbjNix2YHYudin2YQg2qnZhtivLiDYp9uM2YYg2qnYp9ixINio2LPbjNin2LEg2K7Yt9ix2YbYp9qpINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3ODg5MDMyOTc2MjcyODMwOTkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDar9mI2LTbjCDYsdinINio2Ycg2LfZiNixINqp2YTbjCDZiCDYr9in2KbZhduMINi624zYsdmB2LnYp9mEINqp2YbYry4g2KfbjNmGINqp2KfYsSDYqNiz24zYp9ixINiu2LfYsdmG2KfaqSDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM0MzY2MzQ5NzI1NjE3OTUwMDIiPiLYsdin2YfigIzYp9mG2K/Yp9iy24wg2YXYrNiv2K8g2KfYrNio2KfYsduMINix2KfbjNin2YbZh9mUINmE2YjYrduMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODk4NTYwODcyNDYyNjM4MjQyIj4i2KfYrNio2KfYsSDYqNix2YbYp9mF2Ycg2KjYsdin24wg2LHYp9mH4oCM2KfZhtiv2KfYstuMINmF2KzYr9ivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MTcyMDU2MTgwMDYzNzAwNzQxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LPYqNioINix2KfZh+KAjNin2YbYr9in2LLbjCDZhdis2K/YryDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYtNmI2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTMyNjAwODEyNDI4OTk4OTk2OSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiz2KjYqCDYsdin2YfigIzYp9mG2K/Yp9iy24wg2YXYrNiv2K8g2q/ZiNi024wg2LTZiNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyOTI3MzYxNTM3OTQyNTkxODQxIj4i2K/Ys9iq2LHYs9uMINio2Ycg2LPbjNiz2KrZhSDZgdin24zZhCDYrdin2YHYuNmH2ZQgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQwMjMwNTA0OTg5MDk1MzgxMCI+Itiv2LPYqtix2LPbjCDYqNmHINiz24zYs9iq2YUg2YHYp9uM2YQg2qnYp9ix2KogU0QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iMTgyOTI5MDcwMTY1ODk5MjM0NyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmB2KfbjNmE4oCM2YfYp9uMINiz24zYs9iq2YXbjCDYr9ixINit2KfZgdi42Ycg2KzYr9in2LTYr9mG24wg2YbYtdioINi02YjYryDbjNinINmG2LXYqCDYotmGINmE2LrZiCDYtNmI2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjIyNzgxOTU4MjYyNDkwNDk3MiI+Itm+2KfaqSDaqdix2K/ZhiDYrdin2YHYuNmH2ZQgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjI1ODI2OTg2MzkyNzQwNTYiPiLZvtin2qkg2qnYsdiv2YYg2qnYp9ix2KogU0QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIG1zZ2lkPSI4Nzg0MjY4MjQ2Nzc5MTk4NjI3Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K3Yp9mB2LjZhyDYrNiv2KfYtNiv2YbbjCDYsdinINmB2LHZhdiqINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgxNzIwNTYxODAwNjM3MDA3NDEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYs9io2Kgg2LHYp9mH4oCM2KfZhtiv2KfYstuMINmF2KzYr9ivINix2KfbjNin2YbZh9mUINmE2YjYrduMINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MzI2MDA4MTI0Mjg5OTg5OTY5Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LPYqNioINix2KfZh+KAjNin2YbYr9in2LLbjCDZhdis2K/YryDar9mI2LTbjCDYtNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjI5MjczNjE1Mzc5NDI1OTE4NDEiPiLigI/Yr9iz2KrYsdiz24wg2KjZhyDYs9uM2LPYqtmFINmB2KfbjNmEINit2KfZgdi42YfZlCBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDAyMzA1MDQ5ODkwOTUzODEwIj4i4oCP2K/Ys9iq2LHYs9uMINio2Ycg2LPbjNiz2KrZhSDZgdin24zZhCDaqdin2LHYqiBTRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIG1zZ2lkPSIxODI5MjkwNzAxNjU4OTkyMzQ3Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YHYp9uM2YTigIzZh9in24wg2LPbjNiz2KrZhduMINiv2LEg2K3Yp9mB2LjZhyDYrNiv2KfYtNiv2YbbjCDZhti12Kgg2LTZiNivINuM2Kcg2YbYtdioINii2YYg2YTYutmIINi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4i4oCP2b7Yp9qpINqp2LHYr9mGINit2KfZgdi42YfZlCBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MjU4MjY5ODYzOTI3NDA1NiI+IuKAj9m+2KfaqSDaqdix2K/ZhiDaqdin2LHYqiBTRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgbXNnaWQ9Ijg3ODQyNjgyNDY3NzkxOTg2MjciPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYrdin2YHYuNmHINis2K/Yp9i02K/ZhtuMINix2Kcg2YHYsdmF2Kog2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzNDExMzM4NjMyMDAyMTkzODQ2Ij4i2K/YsduM2KfZgdiqINin2LfZhNin2LnYp9iqINmF2LHYqNmI2Lcg2KjZhyDYrdin2YHYuNmH2ZQg2K/Yp9iu2YTbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzA5NDU2Mzg0NDU5Mzg3ODU0OCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINin2LfZhNin2LnYp9iqINmF2LHYqNmI2Lcg2KjZhyDYrdin2YHYuNmH2ZQg2K/Yp9iu2YTbjCDYsdinINiv2LHbjNin2YHYqiDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzMDk0NTYzODQ0NTkzODc4NTQ4Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KfYt9mE2KfYudin2Kog2YXYsdio2YjYtyDYqNmHINit2KfZgdi42YfZlCDYr9in2K7ZhNuMINix2Kcg2K/YsduM2KfZgdiqINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfY3JlYXRlIiBtc2dpZD0iNjQxNDc1NzIzNDc4OTMzNjMyNyI+Itin24zYrNin2K8g2K3Yp9mB2LjZh9mUINiv2KfYrtmE24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2NyZWF0ZSIgbXNnaWQ9IjQ1NTg4NjkyNzM1ODU4NTY4NzYiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYrdin2YHYuNmH2ZQg2K/Yp9iu2YTbjCDYp9uM2KzYp9ivINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2NyZWF0ZSIgbXNnaWQ9IjQ1NTg4NjkyNzM1ODU4NTY4NzYiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYrdin2YHYuNmH2ZQg2K/Yp9iu2YTbjCDYp9uM2KzYp9ivINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjUyNjkyODMyODMwMTYxODAyMiI+Itiu2LHYp9ioINqp2LHYr9mGINit2KfZgdi42YfZlCDYr9in2K7ZhNuMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19kZXN0cm95IiBtc2dpZD0iNzIxODc0OTI4NjE0NTUyNjUzNyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINit2KfZgdi42YfZlCDYr9in2K7ZhNuMINix2Kcg2KfYsiDYqNuM2YYg2KjYqNix2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19kZXN0cm95IiBtc2dpZD0iNzIxODc0OTI4NjE0NTUyNjUzNyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINit2KfZgdi42YfZlCDYr9in2K7ZhNuMINix2Kcg2KfYsiDYqNuM2YYg2KjYqNix2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSI4ODc3OTk4MTAxOTQ0OTk5Mzg2Ij4i2YbYtdioL9mE2LrZiCDZhti12Kgg2K3Yp9mB2LjZh9mUINiv2KfYrtmE24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSIzNDUxMzYwMTE0OTAyNDkwOTI5Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINit2KfZgdi42YfZlCDYr9in2K7ZhNuMINix2Kcg2YbYtdioINqp2LHYr9mHL9mG2LXYqCDYotmG2LHYpyDZhNi62Ygg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9IjM0NTEzNjAxMTQ5MDI0OTA5MjkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2K3Yp9mB2LjZh9mUINiv2KfYrtmE24wg2LHYpyDZhti12Kgg2qnYsdiv2Ycv2YbYtdioINii2YbYsdinINmE2LrZiCDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX3JlbmFtZSIgbXNnaWQ9Ijc0OTY2MzM5NTQwODA0NzI0MTciPiLZhtin2YXar9iw2KfYsduMINmF2KzYr9ivINiv2LPYqtqv2KfZhyDYsNiu24zYsdmHINiv2KfYrtmE24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX3JlbmFtZSIgbXNnaWQ9IjE3OTQ3NTc1ODg0NzIxMjc2NzUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtin2YUg2K3Yp9mB2LjZh9mUINiv2KfYrtmE24wg2LHYpyDYqti624zbjNixINiv2YfYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX3JlbmFtZSIgbXNnaWQ9IjE3OTQ3NTc1ODg0NzIxMjc2NzUiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhtin2YUg2K3Yp9mB2LjZh9mUINiv2KfYrtmE24wg2LHYpyDYqti624zbjNixINiv2YfYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i2qnZhtiq2LHZhCDZhNix2LLYtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YTYsdiy2KfZhtmG2K/ZhyDYsdinINqp2YbYqtix2YQg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YTYsdiy2KfZhtmG2K/ZhyDYsdinINqp2YbYqtix2YQg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLaqdmG2KrYsdmEINqG2LHYp9i6INmC2YjZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2obYsdin2Log2YLZiNmHINix2Kcg2qnZhtiq2LHZhCDaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4i2YXYr9uM2LHbjNiqINiq2YbYuNuM2YXYp9iqINio2LHar9iy24zYr9mHINmIINmF2KzZiNiy2YfYpyDYqNix2KfbjCDYr9iz2Krar9in2YfigIzZh9in24wgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNiIiBtc2dpZD0iNzc3NjE1NTQzMDIxODIzOTgzMyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiq2YbYuNuM2YXYp9iqINio2LHar9iy24zYr9mHINmIINmF2KzZiNiy2YfYp9uMINiv2LPYqtqv2KfZh+KAjNmH2KfbjCBVU0Ig2LHYpyDZhdiv24zYsduM2Kog2qnZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTXRwIiBtc2dpZD0iNDk1MzQ2ODY3Njc5NTkxNzA0MiI+Itin2LnZhdin2YQg2b7YsdmI2KraqdmEIE1UUCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc010cCIgbXNnaWQ9IjY1MzI5NjEyMDA0ODY3OTE1NzAiPiLYr9iz2KrYsdiz24wg2KjZhyDYr9ix2KfbjNmI2LEg2qnYsdmG2YQgTVRQINis2YfYqiDYp9i52YXYp9mEINm+2LHZiNiq2qnZhCBNVFAgVVNCINix2Kcg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2obYsdin2Log2YLZiNmHINix2Kcg2qnZhtiq2LHZhCDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4i4oCP2YXYr9uM2LHbjNiqINiq2YbYuNuM2YXYp9iqINio2LHar9iy24zYr9mHINmIINmF2KzZiNiy2YfYpyDYqNix2KfbjCDYr9iz2Krar9in2YfigIzZh9in24wgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNiIiBtc2dpZD0iNzc3NjE1NTQzMDIxODIzOTgzMyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiq2YbYuNuM2YXYp9iqINio2LHar9iy24zYr9mHINmIINmF2KzZiNiy2YfYp9uMINiv2LPYqtqv2KfZh+KAjNmH2KfbjCBVU0Ig2LHYpyDZhdiv24zYsduM2Kog2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTXRwIiBtc2dpZD0iNDk1MzQ2ODY3Njc5NTkxNzA0MiI+IuKAj9in2LnZhdin2YQg2b7YsdmI2KraqdmEIE1UUCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc010cCIgbXNnaWQ9IjY1MzI5NjEyMDA0ODY3OTE1NzAiPiLigI/Yr9iz2KrYsdiz24wg2KjZhyDYr9ix2KfbjNmI2LEg2qnYsdmG2YQgTVRQINis2YfYqiDYp9i52YXYp9mEINm+2LHZiNiq2qnZhCBNVFAgVVNCINix2Kcg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjQxNDgyOTA4NjA0MDA2NTkxNDYiPiLYqtiz2Kog2LPYrtiq4oCM2KfZgdiy2KfYsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI2NTk3OTY0MTkxMjA4MDE2NjA1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINio2Ycg2YXZhti42YjYsSDYqtiz2Kog2LPYrtiq4oCM2KfZgdiy2KfYsdiMINmC2LPZhdiq4oCM2YfYp9uMINis2KfZhtio24wg2YXYrtiq2YTZgSDYsdinINqp2YbYqtix2YQg2qnZhtmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjY1OTc5NjQxOTEyMDgwMTY2MDUiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KjZhyDZhdmG2LjZiNixINiq2LPYqiDYs9iu2KrigIzYp9mB2LLYp9ix2Iwg2YLYs9mF2KrigIzZh9in24wg2KzYp9mG2KjbjCDZhdiu2KrZhNmBINix2Kcg2qnZhtiq2LHZhCDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLYqtmF2KfYsyDZhdiz2KrZgtuM2YUg2KjYpyDYtNmF2KfYsdmHINiq2YTZgdmG4oCM2YfYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KjYr9mI2YYg2K/Yrtin2YTYqiDYtNmF2Kcg2KjYpyDYtNmF2KfYsdmH4oCM2YfYp9uMINiq2YTZgdmGINiq2YXYp9izINio2q/bjNix2K8uINin24zZhiDZhdmF2qnZhiDYp9iz2Kog2KjYp9i52Ksg2KfbjNis2KfYryDZh9iy24zZhtmHINuM2Kcg2KrZhdin2LPigIzZh9in24wg2b7bjNi04oCM2KjbjNmG24wg2YbYtNiv2Ycg2LTZiNivLiDYqtmI2KzZhyDYr9in2LTYqtmHINio2KfYtNuM2K8g2qnZhyDYp9uM2YYg2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhtmF24zigIzYr9mH2K8g2KjZhyDYqNix2YLYsdin2LHbjCDYqtmF2KfYs+KAjNmH2KfbjCDYp9i22LfYsdin2LHbjCDYqNm+2LHYr9in2LLYry4g2KjYsdmG2KfZhdmH4oCM2YfYp9uMINmF2K7YsdioINmF2YXaqdmGINin2LPYqiDYqNinINio2LHZgtix2KfYsduMINiq2YXYp9izINio2K/ZiNmGINiq2KPbjNuM2K8g2LTZhdinINmH2LLbjNmG2YfigIzZh9in24zbjCDYsdinINio2LHYp9uMINi02YXYpyDYp9uM2KzYp9ivINqp2YbZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFByaXZpbGVnZWQiIG1zZ2lkPSI0MTk4MzQ5MjExMTA4NDk3ODc5Ij4i2KrZhdin2LMg2YXYs9iq2YLbjNmFINio2Kcg2YfYsSDYtNmF2KfYsdmHINiq2YTZgdmG24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNiv2YjZhiDYr9iu2KfZhNiqINio2Kcg2YfYsSDYtNmF2KfYsdmHINiq2YTZgdmG24wg2KrZhdin2LMg2Kjar9uM2LHYr9iMINin2LIg2KzZhdmE2Ycg2LTZhdin2LHZh+KAjtmH2KfbjCDYp9i22LfYsdin2LHbjC4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KrZhdin2LPigIzZh9in24wg2LrbjNix2LbYsdmI2LHbjCDZiCDYutuM2LEg2YLYp9mG2YjZhtuMINio2Kcg2K7Yr9mF2KfYqiDYp9i22LfYsdin2LHbjCDYqNqv24zYsdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDg0MjU3Njk5NDE0NDYwNDgyMSI+Itix2KfZh+KAjNin2YbYr9in2LLbjCDZhdiz2KrZgtuM2YUg2KrZhti424zZhSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCBDRE1BIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2MDQ4NDgwOTUzMTU0MjE0MjUiPiLYtNix2YjYuSDZhdiz2KrZgtuM2YUg2LHYp9mH4oCM2KfZhtiv2KfYstuMINiq2YTZgdmGIENETUEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgbXNnaWQ9IjE5OTQxOTM1Mzg4MDIzMTQxODYiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYtNix2KfbjNi3INmF2YLYsdix2KfYqiBDRE1BINix2Kcg2LTYsdmI2Lkg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYtNix2KfbjNi3INmF2YLYsdix2KfYqiBDRE1BINix2Kcg2K/YsSDZhdmI2KfZgti5INi624zYsdi22LHZiNix24wg2LTYsdmI2Lkg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iMTY4OTAyNDkwMTUwOTk5NjgxMCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2K/ZiNmGINiv2K7Yp9mE2Kog2KjYpyDZh9ixINi02YXYp9ix2Ycg2KrZhNmB2YbbjCDYqtmF2KfYsyDYqNqv24zYsdiv2Iwg2KfYsiDYrNmF2YTZhyDYtNmF2KfYsdmH4oCO2YfYp9uMINin2LbYt9ix2KfYsduMLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYqtmF2KfYs+KAjNmH2KfbjCDYutuM2LHYttix2YjYsduMINmIINi624zYsSDZgtin2YbZiNmG24wg2KjYpyDYrtiv2YXYp9iqINin2LbYt9ix2KfYsduMINio2q/bjNix2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4i4oCP2LHYp9mH4oCM2KfZhtiv2KfYstuMINmF2LPYqtmC24zZhSDYqtmG2LjbjNmFINix2KfbjNin2YbZh9mUINmE2YjYrduMIENETUEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTYwNDg0ODA5NTMxNTQyMTQyNSI+IuKAj9i02LHZiNi5INmF2LPYqtmC24zZhSDYsdin2YfigIzYp9mG2K/Yp9iy24wg2KrZhNmB2YYgQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBtc2dpZD0iMTk5NDE5MzUzODgwMjMxNDE4NiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINi02LHYp9uM2Lcg2YXZgtix2LHYp9iqIENETUEg2LHYpyDYtNix2YjYuSDaqdmG2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINi02LHYp9uM2Lcg2YXZgtix2LHYp9iqIENETUEg2LHYpyDYr9ixINmF2YjYp9mC2Lkg2LrbjNix2LbYsdmI2LHbjCDYtNix2YjYuSDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSI3Nzg1NDA4MjUzMzY0MzM1NzQwIj4i2qnZhtiq2LHZhCDYp9i52YTYp9mG4oCM2YfYp9uMINio2YfigIzYsdmI2LLYsdiz2KfZhtuMINmF2qnYp9mGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iMTEyMDc0MTU1Nzg5MTQzODg3NiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYp9i52YTYp9mG2YfYp9uMINio2YfigI7YsdmI2LLYsdiz2KfZhtuMINmF2YjZgti524zYqiDZhdqp2KfZhtuMINix2Kcg2KfYsiDYsdin2K/bjNmIINmB2LnYp9mEL9i624zYsdmB2LnYp9mEINqp2YbYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9IjExMjA3NDE1NTc4OTE0Mzg4NzYiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KfYudmE2KfZhtmH2KfbjCDYqNmH4oCO2LHZiNiy2LHYs9in2YbbjCDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYsdinINin2LIg2LHYp9iv24zZiCDZgdi52KfZhC/YutuM2LHZgdi52KfZhCDaqdmG2K8uINio2LHYp9uMINin2LPYqtmB2KfYr9mHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhtuM2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+Itiv2LPYqtix2LPbjCDYqNmHINmF2LTYrti12KfYqiDYp9i52YTYp9mFINmI2LHZiNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI0MDI0NTI2OTY4NjMwMTk0MTI4Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiv2LPYqtix2LPbjCDYqNmHINmI24zamNqv24zigIzZh9in24wg2KjYp9ix2q/YsNin2LHbjCDYtNiv2Ycg2KrZiNiz2Lcg2LPYsdmI24zYs+KAjNmH2KfbjCDZiNix2YjYryDYsdinINio2K7ZiNin2YbYry/YqNmG2YjbjNiz2K8uINio2LHYp9uMINin2LPYqtmB2KfYr9mHINio2LHZhtin2YXZh+KAjtmH2KfbjCDYudin2K/bjCDZhdmI2LHYryDZhtuM2KfYsiDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9IjQwMjQ1MjY5Njg2MzAxOTQxMjgiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2K/Ys9iq2LHYs9uMINio2Ycg2YjbjNqY2q/bjOKAjNmH2KfbjCDYqNin2LHar9iw2KfYsduMINi02K/ZhyDYqtmI2LPYtyDYs9ix2YjbjNiz4oCM2YfYp9uMINmI2LHZiNivINix2Kcg2KjYrtmI2KfZhtivL9io2YbZiNuM2LPYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmF2YjYsdivINmG24zYp9iyINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEdhZGdldCIgbXNnaWQ9Ijc3NjkwNTMzOTAxNTg2MzQ3MSI+Itin2YbYqtiu2KfYqCDYp9io2LLYp9ix2qnigIzZh9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEdhZGdldCIgbXNnaWQ9IjgyNjEzMjY5Mzg1OTkwNDkyOTAiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINiz24zYs9iq2YUg2KfYudmE2KfZhSDaqdmG2K8g2qnYr9in2YUg2YjbjNis2Kog2LHYpyDaqdiv2KfZhSDYqNix2YbYp9mF2Ycg2YXbjOKAjtiq2YjYp9mG2K8g2KfYs9iq2YHYp9iv2Ycg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Yp9uMINqp2Ycg2KfbjNmGINmF2KzZiNiyINix2Kcg2K/Yp9ix2K8g2YXbjOKAjtiq2YjYp9mG2K8g2KjZhyDYr9in2K/Zh+KAjtmH2KfbjCDYtNiu2LXbjCDYr9uM2q/YsSDYqNix2YbYp9mF2YfigI7Zh9inINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEdhZGdldCIgbXNnaWQ9IjgyNjEzMjY5Mzg1OTkwNDkyOTAiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNmHINiz24zYs9iq2YUg2KfYudmE2KfZhSDaqdmG2K8g2qnYr9in2YUg2YjbjNis2Kog2LHYpyDaqdiv2KfZhSDYqNix2YbYp9mF2Ycg2YXbjOKAjtiq2YjYp9mG2K8g2KfYs9iq2YHYp9iv2Ycg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Yp9uMINqp2Ycg2KfbjNmGINmF2KzZiNiyINix2Kcg2K/Yp9ix2K8g2YXbjOKAjtiq2YjYp9mG2K8g2KjZhyDYr9in2K/Zh+KAjtmH2KfbjCDYtNiu2LXbjCDYr9uM2q/YsSDYqNix2YbYp9mF2YfigI7Zh9inINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iODQyMzkyMzc3NzY1OTI5MjIyOCI+Itin2LXZhNin2K0g2qnYsdiv2YYg2K3Yp9mE2Kog2KrZhNmB2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDZiNuM2pjar9uM4oCM2YfYp9uMINiv2LPYqtqv2KfZhyDYsdinINqp2YbYqtix2YQg2qnZhtivLiDYqNix2YbYp9mF2YfigI7Yp9uMINqp2Ycg2KfbjNmGINmF2KzZiNiyINix2Kcg2K/Yp9ix2K8g2YXbjOKAjtiq2YjYp9mG2K8g2KjYr9mI2YYg2KfYt9mE2KfYuSDYtNmF2Kcg2KrYudmI24zYtiDYtNio2qnZhyDYr9in2LTYqtmHINio2KfYtNiv2Iwg2LHYp9iv24zZiNuMINiq2YTZgdmGINix2Kcg2LHZiNi02YYg24zYpyDYrtin2YXZiNi0INqp2YbYryDZiCDaqdin2LHZh9in24zbjCDYp9iyINin24zZhiDZgtio24zZhCDYsdinINin2YbYrNin2YUg2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSIxMDI5ODc3NTI5MDA3Njg2NzMyIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINmI24zamNqv24zigIzZh9in24wg2K/Ys9iq2q/Yp9mHINix2Kcg2qnZhtiq2LHZhCDaqdmG2K8uINio2LHZhtin2YXZh+KAjtin24wg2qnZhyDYp9uM2YYg2YXYrNmI2LIg2LHYpyDYr9in2LHYryDZhduM4oCO2KrZiNin2YbYryDYqNiv2YjZhiDYp9i32YTYp9i5INi02YXYpyDYqti52YjbjNi2INi02KjaqdmHINiv2KfYtNiq2Ycg2KjYp9i02K/YjCDYsdin2K/bjNmI24wg2KrZhNmB2YYg2LHYpyDYsdmI2LTZhiDbjNinINiu2KfZhdmI2LQg2qnZhtivINmIINqp2KfYsdmH2KfbjNuMINin2LIg2KfbjNmGINmC2KjbjNmEINix2Kcg2KfZhtis2KfZhSDYr9mH2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjkxNzgyMjg1MjQ1MDc2MTA0ODYiPiLYrtmI2KfZhtiv2YYg2YjYtti524zYqiDYqtmE2YHZhiDZiCDYtNmG2KfYs9mHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSIxNjM5MjEyNzcxODI2MTI1NTI4Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Ycg2YjbjNqY2q/bjOKAjNmH2KfbjCDYqtmE2YHZhiDYr9iz2Krar9in2Ycg2LTZhdinINiv2LPYqtix2LPbjCDZvtuM2K/YpyDaqdmG2K8uINin24zZhiDZhdis2YjYsiDYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2LTZhdin2LHZhyDYqtmE2YHZhiDZiCDYtNmG2KfYs9mH4oCM2YfYp9uMINiv2LPYqtqv2KfZh9iMINmB2LnYp9mEINio2YjYr9mGINuM2qkg2KrZhdin2LMg2Ygg2LTZhdin2LHZhyDYsdin2Ycg2K/ZiNix24wg2qnZhyDYqNinINuM2qkg2KrZhdin2LMg2YXYqti12YQg2LTYr9mHINin2LPYqiDYsdinINmF2LTYrti1INqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTMxNzMxNDM1MDExNDk1MDE1Ij4i2YXZhdin2YbYudiqINin2LIg2KjZhyDYrtmI2KfYqCDYsdmB2KrZhiDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzM0ODAxODc5NDE0OTYxMzAiPiLZhdmF2KfZhti52Kog2KfYsiDYqNmHINiu2YjYp9ioINix2YHYqtmGINiq2YTZgdmGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczMTEzMTk4MjQ0MDA0NDc4NjgiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYp9iyINi624zYsdmB2LnYp9mEINi02K/ZhiDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYrNmE2Yjar9uM2LHbjCDaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NTU5MTAwNjc3MzcyOTI4NzU0Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KfYsiDYutuM2LHZgdi52KfZhCDYtNiv2YYg2KrZhNmB2YYg2KzZhNmI2q/bjNix24wg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzExMzE5ODI0NDAwNDQ3ODY4Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KfYsiDYutuM2LHZgdi52KfZhCDYtNiv2YYg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2KzZhNmI2q/bjNix24wg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODU1OTEwMDY3NzM3MjkyODc1NCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINin2LIg2LrbjNix2YHYudin2YQg2LTYr9mGINiq2YTZgdmGINis2YTZiNqv24zYsduMINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3RyYW5zbWl0SXIiIG1zZ2lkPSI3NTQ1ODU4NTA0MjM4NTMwMTA1Ij4i2KfYsdiz2KfZhCDZhdin2K/ZiNmGINmC2LHZhdiyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdHJhbnNtaXRJciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTM1ODMwODg1NDMwNjUyOTE3MCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYqtinINin2LIg2YHYsdiz2KrZhtiv2Ycg2YXYp9iv2YjZhiDZgtix2YXYssKg2LHYp9uM2KfZhtmHINmE2YjYrduMwqDYp9iz2KrZgdin2K/ZhyDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdHJhbnNtaXRJciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc5NTc3NjM3NDUwMjAzMDA3MjUiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KrYpyDYp9iyINmB2LHYs9iq2YbYr9mHINmF2KfYr9mI2YYg2YLYsdmF2LIg2KrZhNmB2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3ODcwMzQ3MjI2MTYzNTA0MTciPiLYsdmI2LTZhi/Yrtin2YXZiNi0INqp2LHYr9mGINix2KfbjNin2YbZh9mUINmE2YjYrduMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5Mjg2MjI0NzA5ODA5NDMyMDYiPiLYsdmI2LTZhi/Yrtin2YXZiNi0INqp2LHYr9mGINiq2YTZgdmGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LHYpyDYsdmI2LTZhiDbjNinINiu2KfZhdmI2LQg2qnZhtivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RldmljZVBvd2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjAzNzA1NzM0ODQ2MzEzMTAzMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDar9mI2LTbjCDYsdinINix2YjYtNmGINuM2Kcg2K7Yp9mF2YjYtCDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LHYpyDYsdmI2LTZhiDbjNinINiu2KfZhdmI2LQg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RldmljZVBvd2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjAzNzA1NzM0ODQ2MzEzMTAzMiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDar9mI2LTbjCDYsdinINix2YjYtNmGINuM2Kcg2K7Yp9mF2YjYtCDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mYWN0b3J5VGVzdCIgbXNnaWQ9IjM3MTUyMjU0OTI2OTY0MTYxODciPiLYp9is2LHYpyDYr9ixINit2KfZhNiqINiq2LPYqiDaqdin2LHYrtin2YbZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZhY3RvcnlUZXN0IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTUyMDU5MzE4MzU5NjUzMDkxIj4i2KfYrNix2Kcg2KjZh+KAjNi52YbZiNin2YYg2KrYs9iqINiz2KfYstmG2K/ZhyDYs9i32K0g2b7Yp9uM24zZhtiMINin2YXaqdin2YYg2K/Ys9iq2LHYs9uMINqp2KfZhdmEINio2Ycg2LPYrtiq4oCM2KfZgdiy2KfYsSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYtNmF2Kcg2LHYpyDZgdix2KfZh9mFINmF24zigIzYotmI2LHYry4g2YHZgti3INiy2YXYp9mG24wg2qnZhyDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYr9ixINit2KfZhNiqINiq2LPYqiDYs9in2LLZhtiv2Ycg2K/YsSDYrdin2YQg2KfYrNix2KfYs9iqINmC2KfYqNmEINiv2LPYqtix2LPbjCDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTM2NjQ0OTkwMzE5MjQ0ODAyIj4i2KfYrNix2Kcg2KjZh+KAjNi52YbZiNin2YYg2KrYs9iqINiz2KfYstmG2K/ZhyDYs9i32K0g2b7Yp9uM24zZhtiMINin2YXaqdin2YYg2K/Ys9iq2LHYs9uMINqp2KfZhdmEINio2Ycg2LPYrtiq4oCM2KfZgdiy2KfYsSDYqtmE2YHZhiDYtNmF2Kcg2LHYpyDZgdix2KfZh9mFINmF24zigIzYotmI2LHYry4g2YHZgti3INiy2YXYp9mG24wg2qnZhyDYqtmE2YHZhiDYr9ixINit2KfZhNiqINiq2LPYqiDYs9in2LLZhtiv2Ycg2K/YsSDYrdin2YQg2KfYrNix2KfYs9iqINmC2KfYqNmEINiv2LPYqtix2LPbjCDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXIiIG1zZ2lkPSI2NjI3MTkyMzMzMzczNDY1MTQzIj4i2KrZhti424zZhSDYqti12YjbjNixINiy2YXbjNmG2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXIiIG1zZ2lkPSI3MzczNDQ3OTIwOTc3NjI0NzQ1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KrYtdmI24zYsSDYstmF24zZhtmHINiz24zYs9iq2YUg2LHYpyDYqtmG2LjbjNmFINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXIiIG1zZ2lkPSI3MzczNDQ3OTIwOTc3NjI0NzQ1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KrYtdmI24zYsSDYstmF24zZhtmHINiz24zYs9iq2YUg2LHYpyDYqtmG2LjbjNmFINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iMzI3ODYwODE2NTk3NzczNjUzOCI+Itiq2YbYuNuM2YUg2KfZhtiv2KfYstmHINiq2LXZiNuM2LEg2LLZhduM2YbZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iODIzNTc4NDM4NDIyMzczMDA5MSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmG2qnYp9iqINin2YbYr9in2LLZhyDYqti12YjbjNixINiy2YXbjNmG2Ycg2LPbjNiz2KrZhSDYsdinINiq2YbYuNuM2YUg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iODIzNTc4NDM4NDIyMzczMDA5MSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmG2qnYp9iqINin2YbYr9in2LLZhyDYqti12YjbjNixINiy2YXbjNmG2Ycg2LPbjNiz2KrZhSDYsdinINiq2YbYuNuM2YUg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIyMzE1NzUwNDIzMTM5Njk3Mzk3Ij4i2KjYp9iy2YbYtNin2YbbjCDYs9uM2LPYqtmFINio2Ycg2YXZiNin2LHYryDZvtuM2LTigIzZgdix2LYg2qnYp9ix2K7Yp9mG2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXN0ZXJDbGVhciIgbXNnaWQ9IjM2NjUzODA0OTI2MzM5MTAyMjYiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNi32YjYsSDaqdin2YXZhCDYs9uM2LPYqtmFINix2Kcg2LHZiNuMINiq2YbYuNuM2YXYp9iqINqp2KfYsdiu2KfZhtmHINio2KfYstmG2LTYp9mG24wg2qnZhtiv2Iwg2YfZhdmHINiv2KfYr9mH4oCO2YfYp9iMINm+24zaqdix2KjZhtiv24wg2Ygg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmG2LXYqCDYtNiv2Ycg2LHYpyDZvtin2qkg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hc3RlckNsZWFyIiBtc2dpZD0iMzY2NTM4MDQ5MjYzMzkxMDIyNiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2LfZiNixINqp2KfZhdmEINiz24zYs9iq2YUg2LHYpyDYsdmI24wg2KrZhti424zZhdin2Kog2qnYp9ix2K7Yp9mG2Ycg2KjYp9iy2YbYtNin2YbbjCDaqdmG2K/YjCDZh9mF2Ycg2K/Yp9iv2YfigI7Zh9in2Iwg2b7bjNqp2LHYqNmG2K/bjCDZiCDYqNix2YbYp9mF2YfigI7Zh9in24wg2YbYtdioINi02K/ZhyDYsdinINm+2KfaqSDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lIiBtc2dpZD0iMjAyMTYxNDgyOTU5MTc3NTY0NiI+Itiq2YbYuNuM2YUg2LPYp9i52KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxODk2MzQxNDM4MTUxMTUyODgxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LLZhdin2YYg2LPYp9i52Kog2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LHYpyDYqti624zbjNixINiv2YfYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg1NTcwMjczMDczODAyMCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiy2YXYp9mGINiz2KfYudiqINiq2YTZgdmGINix2Kcg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTg5NjM0MTQzODE1MTE1Mjg4MSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiy2YXYp9mGINiz2KfYudiqINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NTU3MDI3MzA3MzgwMjAiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYstmF2KfZhiDYs9in2LnYqiDYqtmE2YHZhiDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZVpvbmUiIG1zZ2lkPSIyOTQ1MDc5ODAxMDEzMDc3MzQwIj4i2KrZhti424zZhSDZhdmG2LfZgtmH2ZQg2LLZhdin2YbbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YXZhti32YLZh9mUINiy2YXYp9mG24wg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LHYpyDYqti624zbjNixINiv2YfYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0OTk5NDM0ODg0MzY2MzMzOTgiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhdmG2LfZgtmH2ZQg2LLZhdin2YbbjCDYqtmE2YHZhiDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iNDgyOTI2MjM0OTY5MTM4Njk4NiI+Iti52YXZhNqp2LHYryDYqNmH4oCM2LnZhtmI2KfZhiBBY2NvdW50TWFuYWdlclNlcnZpY2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSIxOTQ4NDU1NTUyMzMzNjE1OTU0Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINio2KcgQWNjb3VudEF1dGhlbnRpY2F0b3JzINiq2YXYp9izINio2LHZgtix2KfYsSDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE2NzY5ODM3MTIzMTU4Mjc2NDUiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhdmG2LfZgtmH2ZQg2LLZhdin2YbbjCDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQ5OTk0MzQ4ODQzNjYzMzM5OCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmF2YbYt9mC2YfZlCDYstmF2KfZhtuMINiq2YTZgdmGINix2Kcg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSI0ODI5MjYyMzQ5NjkxMzg2OTg2Ij4i4oCP2LnZhdmE2qnYsdivINio2YfigIzYudmG2YjYp9mGIEFjY291bnRNYW5hZ2VyU2VydmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjE5NDg0NTU1NTIzMzM2MTU5NTQiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KjYpyBBY2NvdW50QXV0aGVudGljYXRvcnMg2KrZhdin2LMg2KjYsdmC2LHYp9ixINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFjY291bnRzIiBtc2dpZD0iMTA4Njc5NTQ2Nzc2MDEyMjExNCI+ItuM2KfZgdiq2YYg2K3Ys9in2KjigIzZh9inINiv2LEg2K/Ys9iq2q/Yp9mHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3NDE0OTY1MzQ3Njk2NjAwMjciPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KjZhyDZhNuM2LPYqiDYrdiz2KfYqOKAjNmH2KfbjCDYtNmG2KfYrtiq2Ycg2LTYr9mHINiq2YjYs9i3INix2KfbjNin2YbZh9mUINmE2YjYrduMINiv2LPYqtix2LPbjCDZvtuM2K/YpyDaqdmG2K8uINin24zZhiDZhdmF2qnZhiDYp9iz2Kog2K3Ys9in4oCM2KjigIzZh9in24wg2KfbjNis2KfYryDYtNiv2Ycg2KrZiNiz2Lcg2KjYsdmG2KfZhdmH4oCM2YfYp9uM24wg2LHYpyDaqdmHINmG2LXYqCDaqdix2K/Zh+KAjNin24zYr9iMINi02KfZhdmEINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KjZhyDZhNuM2LPYqiDYrdiz2KfYqOKAjNmH2KfbjCDYtNmG2KfYrtiq2Ycg2LTYr9mHINiq2YjYs9i3INiq2YTZgdmGINiv2LPYqtix2LPbjCDZvtuM2K/YpyDaqdmG2K8uINin24zZhiDZhdmF2qnZhiDYp9iz2Kog2K3Ys9in4oCM2KjigIzZh9in24wg2KfbjNis2KfYryDYtNiv2Ycg2KrZiNiz2Lcg2KjYsdmG2KfZhdmH4oCM2YfYp9uM24wg2LHYpyDaqdmHINmG2LXYqCDaqdix2K/Zh+KAjNin24zYr9iMINi02KfZhdmEINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTI2NTkwODQ4MTE3MjczNjkzMyI+Itin24zYrNin2K8g2K3Ys9in2KjigIzZh9inINmIINiq2YbYuNuM2YUg2q/YsNix2YjYp9qY4oCM2YfigIzZh9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1NDcyMTI0Mjk2OTA4OTc3MjYwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINin2LIg2KfZhdqp2KfZhtin2Kog2KrYo9uM24zYryDaqdmG2YbYr9mHINin2LnYqtio2KfYsSDYrdiz2KfYqCBBY2NvdW50TWFuYWdlciDYp9iyINis2YXZhNmHINin24zYrNin2K8g2K3Ys9in2Kgg2Ygg2K/YsduM2KfZgdiqINmIINiq2YbYuNuM2YUg2q/YsNix2YjYp9qY2YfigI7Zh9inINin2LPYqtmB2KfYr9mHINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjU0NzIxMjQyOTY5MDg5NzcyNjAiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KfYsiDYp9mF2qnYp9mG2KfYqiDYqtij24zbjNivINqp2YbZhtiv2Ycg2KfYudiq2KjYp9ixINit2LPYp9ioIEFjY291bnRNYW5hZ2VyINin2LIg2KzZhdmE2Ycg2KfbjNis2KfYryDYrdiz2KfYqCDZiCDYr9ix24zYp9mB2Kog2Ygg2KrZhti424zZhSDar9iw2LHZiNin2pjZh+KAjtmH2Kcg2KfYs9iq2YHYp9iv2Ycg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4i2KfZgdiy2YjYr9mGINuM2Kcg2K3YsNmBINit2LPYp9io4oCM2YfYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjY291bnRzIiBtc2dpZD0iODY5ODI5NTYyNTQ4ODI5MjUwNiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINi52YXZhNqp2LHYr9mH2KfbjNuMINmF2KfZhtmG2K8g2KfZgdiy2YjYr9mGINmIINit2LDZgSDYrdiz2KfYqOKAjNmH2Kcg2Ygg2K3YsNmBINqv2LDYsdmI2KfamNmH4oCO2YfYpyDYsdinINin2YbYrNin2YUg2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjY291bnRzIiBtc2dpZD0iODY5ODI5NTYyNTQ4ODI5MjUwNiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINi52YXZhNqp2LHYr9mH2KfbjNuMINmF2KfZhtmG2K8g2KfZgdiy2YjYr9mGINmIINit2LDZgSDYrdiz2KfYqOKAjNmH2Kcg2Ygg2K3YsNmBINqv2LDYsdmI2KfamNmH4oCO2YfYpyDYsdinINin2YbYrNin2YUg2K/Zh9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSIyMzU0ODEzOTYxNjM4Nzc2NDIiPiLYp9iz2KrZgdin2K/ZhyDYp9iyINit2LPYp9io4oCM2YfYpyDYr9ixINiv2LPYqtqv2KfZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iNzk4NDIyNzE0NzQwMzM0NjQyMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDZhti02KfZhtmH4oCO2YfYp9uMINiq2KfbjNuM2K8g2KfYudiq2KjYp9ixINix2Kcg2K/Ysdiu2YjYp9iz2Kog2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iNzk4NDIyNzE0NzQwMzM0NjQyMiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDZhti02KfZhtmH4oCO2YfYp9uMINiq2KfbjNuM2K8g2KfYudiq2KjYp9ixINix2Kcg2K/Ysdiu2YjYp9iz2Kog2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTmV0d29ya1N0YXRlIiBtc2dpZD0iNDk1MTAyNzk2NDM0ODk3NDc3MyI+ItmF2LTYp9mH2K/Zh9mUINin2KrYtdin2YTYp9iqINi02KjaqdmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya1N0YXRlIiBtc2dpZD0iODMxODk2NDQyNDY3NTk2MDk3NSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYp9i32YTYp9i52KfYqiDZhdix2KjZiNi3INio2Ycg2KfYqti12KfZhNin2Kog2LTYqNqp2Ycg2YXYp9mG2YbYryDYtNio2qnZh+KAjNmH2KfbjCDZhdmI2KzZiNivINmIINmF2KrYtdmEINix2Kcg2YXYtNin2YfYr9mHINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iODAxODc1ODEzNjQwNDMyMzY1OCI+Itiv2LPYqtix2LPbjCDaqdin2YXZhCDYqNmHINi02KjaqdmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSIzNDAzMDYyMTg3Nzc5NzI0MTg1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINiz2Yjaqdiq4oCM2YfYp9uMINi02KjaqdmHINix2Kcg2KfbjNis2KfYryDaqdmG2K8g2Ygg2KfYsiDZvtix2YjYqtqp2YTigIzZh9in24wg2LTYqNqp2Ycg2LPZgdin2LHYtNuMINin2LPYqtmB2KfYr9mHINmG2YXYp9uM2K8uINmF2LHZiNix2q/YsSDZiCDYs9in24zYsSDYqNix2YbYp9mF2YfigIzZh9inINix2YjYtNuMINix2Kcg2KjYsdin24wg2KfYsdiz2KfZhCDYr9in2K/Zh+KAjNmH2Kcg2KjZhyDYp9uM2YbYqtix2YbYqiDYp9ix2KfYptmHINmF24zigIzaqdmG2YbYryDYqNmG2KfYqNix2KfbjNmGINin24zZhiDZhdis2YjYsiDYqNix2KfbjCDYp9ix2LPYp9mEINiv2KfYr9mHINio2Ycg2KfbjNmG2KrYsdmG2Kog2LbYsdmI2LHbjCDZhtuM2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MDU2NjAxNTk2NzU3NTE4OTYiPiLYqti624zbjNixL9ix2Yfar9uM2LHbjCDYqtmG2LjbjNmF2KfYqiDYtNio2qnZhyDZiCDYqtix2KfZgduM2qkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTMzMzc5ODg4NjQxMjcxNDE5MyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiq2YbYuNuM2YXYp9iqINi02KjaqdmHINix2Kcg2KrYutuM24zYsSDYr9mH2K8g2Ygg2K/YsSDaqdmEINiq2LHYp9mB24zaqSDYtNio2qnZhyDZhdiv2KfYrtmE2Ycg2qnZhtivINmIINii2YYg2LHYpyDYstuM2LEg2YbYuNixINiv2KfYtNiq2Ycg2KjYp9i02K/YjCDYqNix2KfbjCDZhdir2KfZhCDZvtix2Kfaqdiz24wg2Ygg2b7ZiNix2Kog2YfYsSBBUE4g2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KjYs9iq2YfigI7Zh9in24wg2LTYqNqp2Ycg2LHYpyDYqNiv2YjZhiDYp9i32YTYp9i5INi02YXYpyDaqdmG2KrYsdmEINqp2YbZhtiv2Iwg2YXYrNiv2K/YpyDZh9iv2KfbjNiqINqp2YbZhtivINuM2Kcg2KrYutuM24zYsSDYr9mH2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTMzMzc5ODg4NjQxMjcxNDE5MyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiq2YbYuNuM2YXYp9iqINi02KjaqdmHINix2Kcg2KrYutuM24zYsSDYr9mH2K8g2Ygg2K/YsSDaqdmEINiq2LHYp9mB24zaqSDYtNio2qnZhyDZhdiv2KfYrtmE2Ycg2qnZhtivINmIINii2YYg2LHYpyDYstuM2LEg2YbYuNixINiv2KfYtNiq2Ycg2KjYp9i02K/YjCDYqNix2KfbjCDZhdir2KfZhCDZvtix2Kfaqdiz24wg2Ygg2b7ZiNix2Kog2YfYsSBBUE4g2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2KjYs9iq2YfigI7Zh9in24wg2LTYqNqp2Ycg2LHYpyDYqNiv2YjZhiDYp9i32YTYp9i5INi02YXYpyDaqdmG2KrYsdmEINqp2YbZhtiv2Iwg2YXYrNiv2K/YpyDZh9iv2KfbjNiqINqp2YbZhtivINuM2Kcg2KrYutuM24zYsSDYr9mH2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9Ijk1ODg4NDI5MTQ1NDMyNzMwOSI+Itiq2LrbjNuM2LEg2YLYp9io2YTbjNiqINin2KrYtdin2YQg2LTYqNqp2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VOZXR3b3JrU3RhdGUiIG1zZ2lkPSI2Nzg5MTIzOTEyNDc2NDE2MjE0Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YjYtti524zYqiDYp9iq2LXYp9mEINi02KjaqdmHINix2Kcg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmI2LbYuduM2Kog2KfYqti12KfZhCDYtNio2qnZhyDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSI1OTUyNTg0OTY0MzczMDE3OTYwIj4i2KrYutuM24zYsSDZgtin2KjZhNuM2Kog2KfYqti12KfZhCDYr9in2K/ZhyDYqNinINiz24zZhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iMTUyNDQ0MTM0NDQxMjMxOTc4MCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmI2LbYuduM2Kog2KfYqti12KfZhCDYtNio2qnZhyDYp9iq2LXYp9mEINiv2KfYr9mHINio2Kcg2LPbjNmFINix2Kcg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSIxNTI0NDQxMzQ0NDEyMzE5NzgwIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YjYtti524zYqiDYp9iq2LXYp9mEINi02KjaqdmHINin2KrYtdin2YQg2K/Yp9iv2Ycg2KjYpyDYs9uM2YUg2LHYpyDYqti624zbjNixINiv2YfYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjE0MDA2NjYwMTI2NzE2NDg3NDEiPiLYqti624zbjNixINiq2YbYuNuM2YXYp9iqINmF24zYstin2YYg2KfYs9iq2YHYp9iv2Ycg2K/Yp9iv2Ycg2K/YsSDZvtiz4oCM2LLZhduM2YbZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjUzNDc3Mjk1Nzg0Njg3NDQzNzkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqtmG2LjbjNmFINqp2KfYsdio2LHYryDYr9in2K/Zh+KAjtmH2KfbjCDZvtiz4oCM2LLZhduM2YbZhyDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTIwMjAxMjk0OTI0NzA0MDAxMSI+ItmF2LTYp9mH2K/Zh9mUINin2KrYtdin2YTYp9iqIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTAwMjc5ODA3NzM4NzgwMzcyNiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYp9i32YTYp9i52KfYqiDZhdix2KjZiNi3INio2Ycg2LTYqNqp2YcgV2ktRmkg2LHYpyDZhdi02KfZh9iv2Ycg2qnZhtiv2Iwg2KjZh+KAjNi52YbZiNin2YYg2YXYq9in2YQg2YHYudin2YQg2KjZiNiv2YYgV2ktRmkg2Ygg2YbYp9mFINiv2LPYqtqv2KfZh+KAjNmH2KfbjCBXaS1GaSDZhdiq2LXZhC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjY1NTA2NDExODg3NDkxMjgwMzUiPiLYp9iq2LXYp9mEINio2YcgV2ktRmkg2Ygg2YLYt9i5INin2KrYtdin2YQg2KfYsiDYotmGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2Ycg2YbZgtin2Lcg2K/Ys9iq2LHYs9uMIFdpLUZpINmI2LXZhCDYtNmI2K8g2Ygg2KfYsdiq2KjYp9i3INiu2YjYryDYsdinINio2Kcg2KLZhuKAjNmH2Kcg2YLYt9i5INqp2YbYryDZiCDYqti624zbjNix2KfYqtuMINix2Kcg2K/YsSDZvtuM2qnYsdio2YbYr9uMINiv2LPYqtqv2KfZhyDYqNix2KfbjCDYtNio2qnZh+KAjtmH2KfbjCBXaS1GaSDYp9uM2KzYp9ivINqp2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgbXNnaWQ9IjEzNjgyNTM4NzE0ODMyNTQ3ODQiPiLYr9ix24zYp9mB2Kog2obZhtiv2q/Yp9mG2YcgV2ktRmkg2LHYpyDZhdis2KfYsiDZhduM4oCM2qnZhtivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3OTY5Nzc0MDIxMjU2MzM2NTQ4Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Ycg2K/YsduM2KfZgdiqINio2LPYqtmH4oCM2YfYp9uMINin2LHYs9in2YTbjCDYqNmHINmH2YXZhyDYr9iz2Krar9in2YfigIzZh9in24wg2YXZiNis2YjYryDYr9ixINi02KjaqdmHIFdpLUZpINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDYotiv2LHYs+KAjNmH2KfbjCDZvtiu2LQg2obZhtiv2q/Yp9mG2Ycg2Ygg2YbZhyDZgdmC2Lcg2KjZhyDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYtNmF2Kcg2KjZvtix2K/Yp9iy2YbYry4g2KfbjNmGINin2LIg2KrZiNin2YYg2YXYtdix2YEg2KjbjNi02KrYsduMINmG2LPYqNiqINio2Ycg2K3Yp9mE2Kog2b7Yrti0INi624zYsdqG2YbYr9qv2KfZhtmHINin2LPYqtmB2KfYr9mHINmF24zigIzaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MTk0OTcwNjAyNTM0OTkyNiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYqNmHINiv2LHbjNin2YHYqiDYqNiz2KrZh+KAjNmH2KfbjCDYp9ix2LPYp9mE24wg2KjZhyDZh9mF2Ycg2K/Ys9iq2q/Yp9mH4oCM2YfYp9uMINmF2YjYrNmI2K8g2K/YsSDYtNio2qnZhyBXaS1GaSDYqNinINin2LPYqtmB2KfYr9mHINin2LIg2KLYr9ix2LPigIzZh9in24wg2b7Yrti0INqG2YbYr9qv2KfZhtmHINmIINmG2Ycg2YHZgti3INio2Ycg2KrZhNmB2YYg2LTZhdinINio2b7Ysdiv2KfYstmG2K8uINin24zZhiDYp9iyINiq2YjYp9mGINmF2LXYsdmBINio24zYtNiq2LHbjCDZhtiz2KjYqiDYqNmHINit2KfZhNiqINm+2K7YtCDYutuM2LHahtmG2K/ar9in2YbZhyDYp9iz2KrZgdin2K/ZhyDZhduM4oCM2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjUzNDc3Mjk1Nzg0Njg3NDQzNzkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqtmG2LjbjNmFINqp2KfYsdio2LHYryDYr9in2K/Zh+KAjtmH2KfbjCDZvtiz4oCM2LLZhduM2YbZhyDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTIwMjAxMjk0OTI0NzA0MDAxMSI+IuKAj9mF2LTYp9mH2K/Zh9mUINin2KrYtdin2YTYp9iqIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTAwMjc5ODA3NzM4NzgwMzcyNiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjNiv2YfYryDYp9i32YTYp9i52KfYqiDZhdix2KjZiNi3INio2Ycg2LTYqNqp2YcgV2ktRmkg2LHYpyDZhdi02KfZh9iv2Ycg2qnZhtiv2Iwg2KjZh+KAjNi52YbZiNin2YYg2YXYq9in2YQg2YHYudin2YQg2KjZiNiv2YYgV2ktRmkg2Ygg2YbYp9mFINiv2LPYqtqv2KfZh+KAjNmH2KfbjCBXaS1GaSDZhdiq2LXZhC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjY1NTA2NDExODg3NDkxMjgwMzUiPiLigI/Yp9iq2LXYp9mEINio2YcgV2ktRmkg2Ygg2YLYt9i5INin2KrYtdin2YQg2KfYsiDYotmGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINio2Ycg2YbZgtin2Lcg2K/Ys9iq2LHYs9uMIFdpLUZpINmI2LXZhCDYtNmI2K8g2Ygg2KfYsdiq2KjYp9i3INiu2YjYryDYsdinINio2Kcg2KLZhuKAjNmH2Kcg2YLYt9i5INqp2YbYryDZiCDYqti624zbjNix2KfYqtuMINix2Kcg2K/YsSDZvtuM2qnYsdio2YbYr9uMINiv2LPYqtqv2KfZhyDYqNix2KfbjCDYtNio2qnZh+KAjtmH2KfbjCBXaS1GaSDYp9uM2KzYp9ivINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgbXNnaWQ9IjEzNjgyNTM4NzE0ODMyNTQ3ODQiPiLigI/Yr9ix24zYp9mB2Kog2obZhtiv2q/Yp9mG2YcgV2ktRmkg2LHYpyDZhdis2KfYsiDZhduM4oCM2qnZhtivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3OTY5Nzc0MDIxMjU2MzM2NTQ4Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Ycg2K/YsduM2KfZgdiqINio2LPYqtmH4oCM2YfYp9uMINin2LHYs9in2YTbjCDYqNmHINmH2YXZhyDYr9iz2Krar9in2YfigIzZh9in24wg2YXZiNis2YjYryDYr9ixINi02KjaqdmHIFdpLUZpINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDYotiv2LHYs+KAjNmH2KfbjCDZvtiu2LQg2obZhtiv2q/Yp9mG2Ycg2Ygg2YbZhyDZgdmC2Lcg2KjZhyDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYtNmF2Kcg2KjZvtix2K/Yp9iy2YbYry4g2KfbjNmGINin2LIg2KrZiNin2YYg2YXYtdix2YEg2KjbjNi02KrYsduMINmG2LPYqNiqINio2Ycg2K3Yp9mE2Kog2b7Yrti0INi624zYsdqG2YbYr9qv2KfZhtmHINin2LPYqtmB2KfYr9mHINmF24zigIzaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MTk0OTcwNjAyNTM0OTkyNiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYqNmHINiv2LHbjNin2YHYqiDYqNiz2KrZh+KAjNmH2KfbjCDYp9ix2LPYp9mE24wg2KjZhyDZh9mF2Ycg2K/Ys9iq2q/Yp9mH4oCM2YfYp9uMINmF2YjYrNmI2K8g2K/YsSDYtNio2qnZhyBXaS1GaSDYqNinINin2LPYqtmB2KfYr9mHINin2LIg2KLYr9ix2LPigIzZh9in24wg2b7Yrti0INqG2YbYr9qv2KfZhtmHINmIINmG2Ycg2YHZgti3INio2Ycg2KrZhNmB2YYg2LTZhdinINio2b7Ysdiv2KfYstmG2K8uINin24zZhiDYp9iyINiq2YjYp9mGINmF2LXYsdmBINio24zYtNiq2LHbjCDZhtiz2KjYqiDYqNmHINit2KfZhNiqINm+2K7YtCDYutuM2LHahtmG2K/ar9in2YbZhyDYp9iz2KrZgdin2K/ZhyDZhduM4oCM2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoQWRtaW4iIG1zZ2lkPSI2MDA2OTY3MzczOTM1OTI2NjU5Ij4i2K/Ys9iq2LHYs9uMINio2Ycg2KrZhti424zZhdin2Kog2KjZhNmI2KrZiNirIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY5MjExNzc0NzE3NDg4ODIxMzciPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYqNmE2YjYqtmI2Ksg2YXYrdmE24wg2LHYpyDZvtuM2qnYsdio2YbYr9uMINqp2LHYr9mH2Iwg2K/Ys9iq2q/Yp9mH4oCM2YfYp9uMINix2KfZhyDYr9mI2LEg2LHYpyDYtNmG2KfYs9in24zbjCDaqdix2K/ZhyDZiCDYqNinINii2YbigIzZh9inINis2YHYqiDYtNmI2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTMxNjgyMTU5MzMxNTQyMTM3Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KrZhNmB2YYg2KjZhNmI2KrZiNirINmF2K3ZhNuMINix2Kcg2b7bjNqp2LHYqNmG2K/bjCDaqdmG2K8g2Ygg2K/Ys9iq2q/Yp9mH4oCM2YfYp9uMINix2KfZhyDYr9mI2LEg2LHYpyDZvtuM2K/YpyDaqdmG2K8g2Ygg2KjYpyDYotmG4oCM2YfYpyDYrNmB2Kog2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2KjZhNmI2KrZiNirINmF2K3ZhNuMINix2Kcg2b7bjNqp2LHYqNmG2K/bjCDaqdix2K/Zh9iMINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDYsdin2Ycg2K/ZiNixINix2Kcg2LTZhtin2LPYp9uM24wg2qnYsdiv2Ycg2Ygg2KjYpyDYotmG4oCM2YfYpyDYrNmB2Kog2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiq2YTZgdmGINio2YTZiNiq2YjYqyDZhdit2YTbjCDYsdinINm+24zaqdix2KjZhtiv24wg2qnZhtivINmIINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDYsdin2Ycg2K/ZiNixINix2Kcg2b7bjNiv2Kcg2qnZhtivINmIINio2Kcg2KLZhuKAjNmH2Kcg2KzZgdiqINi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aFByaXYiIG1zZ2lkPSI0MDA5NDk0MjQ2MDA5NTEzODI4Ij4i2KfYrNin2LLZhyDYp9ix2KrYqNin2Lcg2KjYpyDYqNmE2YjYqtmI2Ksg2KfYsiDYt9ix24zZgiDYqNix2YbYp9mF2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhQcml2IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDQ1NzM1MTkzNDE3NDY4ODU3Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINio2K/ZiNmGINiq2LnYp9mF2YQg2qnYp9ix2KjYsSDYqNinINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDYsdin2Ycg2K/ZiNixINmF2LHYqtio2Lcg2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aFByaXYiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQ1NzM1MTkzNDE3NDY4ODU3Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINio2K/ZiNmGINiq2LnYp9mF2YQg2qnYp9ix2KjYsSDYqNinINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDYsdin2Ycg2K/ZiNixINmF2LHYqtio2Lcg2LTZiNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjQxOTU5MDcwMTA2MTAyMDU3MDMiPiLYp9iq2LXYp9mEINmIINmC2LfYuSDYp9iq2LXYp9mEINin2LIgV2lNQVgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI0MTk1OTA3MDEwNjEwMjA1NzAzIj4i4oCP2KfYqti12KfZhCDZiCDZgti32Lkg2KfYqti12KfZhCDYp9iyIFdpTUFYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiLYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YHYudin2YQg2KjZiNiv2YYg2YjYp9uM2YXaqdizINmIINin2LfZhNin2LnYp9iqINmF2LHYqNmI2Lcg2KjZhyDZh9ixINuM2qkg2KfYsiDYtNio2qnZh+KAjNmH2KfbjCDZiNin24zZhdqp2LMg2YXYqti12YQg2LHYpyDZhdi02K7YtSDaqdmG2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMjQwNTA0MjI2NzEzMTQ5NjU3OSI+Itiq2LrbjNuM2LEg2YjYtti524zYqiBXaU1BWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2ltYXhTdGF0ZSIgbXNnaWQ9IjI0MDUwNDIyNjcxMzE0OTY1NzkiPiLigI/Yqti624zbjNixINmI2LbYuduM2KogV2lNQVgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMTU2NDU2NTA0MDg0MjAxODA1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2KjZhyDYtNio2qnZh+KAjNmH2KfbjCDZiNin24zZhdqp2LMg2YXYqti12YQg2qnYsdiv2Ycg24zYpyDYp9iq2LXYp9mEINii2YYg2LHYpyDYp9iyINin24zZhiDYtNio2qnZh+KAjNmH2Kcg2YLYt9i5INqp2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk3MDI1MDQzMDA0OTIzNzk4Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCO2K/Zh9ivINiq2Kcg2KrZhNmB2YYg2LHYpyDYqNmHINi02KjaqdmH4oCM2YfYp9uMINmI2KfbjNmF2qnYsyDZhdiq2LXZhCDaqdix2K/ZhyDbjNinINin2KrYtdin2YQg2KLZhtix2Kcg2KfYsiDYp9uM2YYg2LTYqNqp2YfigIzZh9inINmC2LfYuSDaqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NzAyNTA0MzAwNDkyMzc5OCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2YXaqdin2YYg2YXbjOKAjtiv2YfYryDYqtinINiq2YTZgdmGINix2Kcg2KjZhyDYtNio2qnZh+KAjNmH2KfbjCDZiNin24zZhdqp2LMg2YXYqti12YQg2qnYsdiv2Ycg24zYpyDYp9iq2LXYp9mEINii2YbYsdinINin2LIg2KfbjNmGINi02KjaqdmH4oCM2YfYpyDZgti32Lkg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoIiBtc2dpZD0iNjEyNzc2OTMzNjMzOTI3NjgyOCI+Itis2YHYqiDaqdix2K/ZhiDYqNinINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDYqNmE2YjYqtmI2KsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM0ODA3MjIxODE4NTI0Mzg2MjgiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZvtuM2qnYsdio2YbYr9uMINio2YTZiNiq2YjYqyDYr9ixINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2YXYtNin2YfYr9mHINqp2YbYryDZiCDYp9iq2LXYp9mEINio2Kcg2K/Ys9iq2q/Yp9mH4oCM2YfYp9uMINmF2LHYqtio2Lcg2LHYpyDYqNix2YLYsdin2LEg2qnYsdiv2Ycg2Ygg2KjZvtiw24zYsdivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZvtuM2qnYsdio2YbYr9uMINio2YTZiNiq2YjYqyDYr9ixINiq2YTZgdmGINix2Kcg2YXYtNin2YfYr9mHINqp2YbYr9iMINmIINin2KrYtdin2YTYp9iqINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDZhdix2KrYqNi3INix2Kcg2KjYsdmC2LHYp9ixINqp2LHYr9mHINmIINio2b7YsNuM2LHYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM0ODA3MjIxODE4NTI0Mzg2MjgiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZvtuM2qnYsdio2YbYr9uMINio2YTZiNiq2YjYqyDYr9ixINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2YXYtNin2YfYr9mHINqp2YbYryDZiCDYp9iq2LXYp9mEINio2Kcg2K/Ys9iq2q/Yp9mH4oCM2YfYp9uMINmF2LHYqtio2Lcg2LHYpyDYqNix2YLYsdin2LEg2qnYsdiv2Ycg2Ygg2KjZvtiw24zYsdivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZvtuM2qnYsdio2YbYr9uMINio2YTZiNiq2YjYqyDYr9ixINiq2YTZgdmGINix2Kcg2YXYtNin2YfYr9mHINqp2YbYr9iMINmIINin2KrYtdin2YTYp9iqINiv2LPYqtqv2KfZh+KAjNmH2KfbjCDZhdix2KrYqNi3INix2Kcg2KjYsdmC2LHYp9ixINqp2LHYr9mHINmIINio2b7YsNuM2LHYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX25mYyIgbXNnaWQ9IjQ0MjMzNTEyNzQ3NTc4NzY5NTMiPiLaqdmG2KrYsdmEINin2LHYqtio2KfYtyDYsdin2Ycg2YbYstiv24zaqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYqNinINiq2q/Zh9in24wg2KfYsdiq2KjYp9i3INmF24zYr9in2YYg2YbYstiv24zaqSAoTkZDKdiMINqp2KfYsdiq2YfYpyDZiCDZgdin24zZhCDYrtmI2KfZhiDYp9ix2KrYqNin2Lcg2KjYsdmC2LHYp9ixINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19uZmMiIG1zZ2lkPSI3MTIwNjExODE5NDAxNzg5OTA3Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KjYpyDYqtqv2YfYp9uMINin2LHYqtio2KfYtyDZhduM2K/Yp9mGINmG2LLYr9uM2qkgKE5GQynYjCDaqdin2LHYqtmH2Kcg2Ygg2YHYp9uM2YQg2K7ZiNin2YYg2KfYsdiq2KjYp9i3INio2LHZgtix2KfYsSDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSIzNTk4NDk2MzAxNDg2NDM5MjU4Ij4i2LrbjNix2YHYudin2YQg2qnYsdiv2YYg2YLZgdmEINi12YHYrdmHINi02YXYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjYwMzQyMDMwNjUwNzcxMjI5OTIiPiLYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2YLZgdmEINqp2YTbjNivINmIINmH2LEg2q/ZiNmG2Ycg2KfZhdmG24zYqiDar9iw2LHZiNin2pjZhyDZhdix2KrYqNi3INix2Kcg2LrbjNix2YHYudin2YQg2qnZhtivLiDYqNmH4oCM2LnZhtmI2KfZhiDZhdir2KfZhCDYqtmE2YHZhiDZh9mG2q/Yp9mFINiv2LHbjNin2YHYqiDbjNqpINiq2YXYp9izINiq2YTZgdmG24wg2YjYsdmI2K/bjCDZgtmB2YQg2qnZhNuM2K8g2LHYpyDYutuM2LHZgdi52KfZhCDZhduM4oCM2qnZhtivINmIINio2LnYryDYp9iyINm+2KfbjNin2YYg2KrZhdin2LPYjCDZgtmB2YQg2qnZhNuM2K8g2LHYpyDYr9mI2KjYp9ix2Ycg2YHYudin2YQg2YXbjOKAjNqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSI2MjAxODEwMDA4MjMwNTAzMDUyIj4i2K7ZiNin2YbYr9mGINiq2YbYuNuM2YXYp9iqINmH2YXar9in2YXigIzYs9in2LLbjCI8L3N0cmluZz4KQEAgLTYzMSwzOSArNjQwLDM5IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSI3Mzk2NTc3NDUxMzYwMjAyNDQ4Ij4i2K7ZiNin2YbYr9mGINin2LfZhNin2LnYp9iqINii2YXYp9ix24wg2YfZhdqv2KfZheKAjNiz2KfYstuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFN5bmNTdGF0cyIgbXNnaWQ9IjE1MTAxNDM3NjE3NTc2MDYxNTYiPiLYqNmHINuM2qkg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZiNi22LnbjNiqINmH2YXar9in2YXigIzYs9in2LLbjCDbjNqpINit2LPYp9ioINix2Kcg2KjYrtmI2KfZhtiv2Iwg2KfYsiDYrNmF2YTZhyDYs9in2KjZgtmHINix2YjbjNiv2KfYr9mH2KfbjCDZh9mF2q/Yp9mF4oCM2LPYp9iy24wg2Ygg2YXbjNiy2KfZhiDYr9in2K/Zh+KAjNmH2KfbjCDZh9mF2q/Yp9mF4oCM2LPYp9iy24wg2LTYr9mHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjQ3NTY2MDk2MzcwNTMzNTMzMTgiPiLYrtmI2KfZhtiv2YYg2YHbjNiv2YfYp9uMINmF2LTYqtix2qkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNTU1NzA1ODkwNzkwNjE0NDUwNSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINis2LLYptuM2KfYqiDZhdix2KjZiNi3INio2Ycg2YHbjNiv2YfYp9uMINmH2YXar9in2YUg2LTYr9mHINqp2YbZiNmG24wg2LHYpyDYr9ix24zYp9mB2Kog2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI1NTU3MDU4OTA3OTA2MTQ0NTA1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KzYstim24zYp9iqINmF2LHYqNmI2Lcg2KjZhyDZgduM2K/Zh9in24wg2YfZhdqv2KfZhSDYtNiv2Ycg2qnZhtmI2YbbjCDYsdinINiv2LHbjNin2YHYqiDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjkwMTUyNDYzMjU0MDgyMDkyOTYiPiLZhtmI2LTYqtmGINmB24zYr9mH2KfbjCDZhdi02KrYsdqpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI2OTI4OTMwMTg4ODI2MDg5NDEzIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YHbjNiv2YfYp9uMINmH2YXar9in2YUg2LTYr9mHINqp2YbZiNmG24wg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdmG2KfZhdmH4oCO2YfYp9uMINmF2K7YsdioINmF24zigI7YqtmI2KfZhtmG2K8g2YHbjNiv2YfYp9uMINmH2YXar9in2YUg2LTYr9mHINix2Kcg2KrYutuM24zYsSDYr9mH2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNXcml0ZSIgbXNnaWQ9IjY5Mjg5MzAxODg4MjYwODk0MTMiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZgduM2K/Zh9in24wg2YfZhdqv2KfZhSDYtNiv2Ycg2qnZhtmI2YbbjCDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDZgduM2K/Zh9in24wg2YfZhdqv2KfZhSDYtNiv2Ycg2LHYpyDYqti624zbjNixINiv2YfZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI0MTA3MTAxNTI1NzQ2MDM1NzE4Ij4i2K7ZiNin2YbYr9mGINmI2KfamNmH4oCM2YfYp9uM24wg2qnZhyDYqNmHINmB2LHZh9mG2q/igIwg2YTYutiqINin2LbYp9mB2Ycg2qnYsdiv24zYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNjU5NjE0NjAwMzM4OTA0MjQzIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINmH2YXZhyDaqdmE2YXZh9iMINmG2KfZhSDZiCDYudio2KfYsdin2KrbjCDYsdinINqp2Ycg2qnYp9ix2KjYsSDYr9ixINmB2LHZh9mG2q8g2YTYutiqINiu2YjYryDYsNiu24zYsdmHINqp2LHYr9mHINin2LPYqiDYqNiu2YjYp9mG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI2NTk2MTQ2MDAzMzg5MDQyNDMiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2YfZhdmHINqp2YTZhdmH2Iwg2YbYp9mFINmIINi52KjYp9ix2KfYqtuMINix2Kcg2qnZhyDaqdin2LHYqNixINiv2LEg2YHYsdmH2YbaryDZhNi62Kog2K7ZiNivINiw2K7bjNix2Ycg2qnYsdiv2Ycg2KfYs9iqINio2K7ZiNin2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjIxODMxMTA0MDIzMTQ0NDExMDYiPiLYp9mB2LLZiNiv2YYg2qnZhNmF2KfYqiDYqNmHINmB2LHZh9mG2q8g2YTYutiqINiq2LnYsduM2YHigIwg2LTYr9mHINiq2YjYs9i3INqp2KfYsdio2LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MTg1Mzg1NzE2MjU1MDY1MjkxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2qnZhNmF2KfYqiDYrNiv24zYryDYsdinINiv2LEg2YHZh9ix2LPYqiDaqdin2LHYqNixINio2YbZiNuM2LPYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY3Mjc1MDk1MTU5NDA1NDY4Ij4i2K7ZiNin2YbYr9mGINmF2K3YqtmI24zYp9iqINit2KfZgdi42YfZlCBVU0Ig2LTZhdinIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjE4ODE1NjQ2MjkzNDk3Nzk0MCI+Itiu2YjYp9mG2K/ZhiDZhdit2KrZiNuM2KfYqiDaqdin2LHYqiBTRCDYtNmF2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDY5ODg3MTI1OTgzODYwNzkiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2YXYrdiq2YjYp9mH2KfbjCDZgdi22KfbjCDYsNiu24zYsdmHIFVTQiDYsdinINio2K7ZiNin2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYwNzM2MjQ3MzY1NDk3NTQxMSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDZhdit2KrZiNin2YfYp9uMINqp2KfYsdiqIFNEINi02YXYpyDYsdinINio2K7ZiNin2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijg0ODU5NzkwNjIyNTQ2NjY3NDgiPiLYp9i12YTYp9itINuM2Kcg2K3YsNmBINmF2K3YqtmI24zYp9iqINit2KfZgdi42YfZlCBVU0Ig2LTZhdinIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiLZhdit2KrZiNin24wg2qnYp9ix2KogU0Qg2LTZhdinINix2Kcg2KfYtdmE2KfYrSDaqdix2K/ZhyDbjNinINiq2LrbjNuM2LEg2K/Zh9ivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiv2LEg2K3Yp9mB2LjZh9mUIFVTQiDYqNmG2YjbjNiz2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MzM3NDE3NzkwOTM2NjMyMDkwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2K/YsSDaqdin2LHYqiBTRCDYqNmG2YjbjNiz2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODE4NTM4NTcxNjI1NTA2NTI5MSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2YTZhdin2Kog2KzYr9uM2K8g2LHYpyDYr9ixINmB2YfYsdiz2Kog2qnYp9ix2KjYsSDYqNmG2YjbjNiz2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM2NzI3NTA5NTE1OTQwNTQ2OCI+IuKAj9iu2YjYp9mG2K/ZhiDZhdit2KrZiNuM2KfYqiDYrdin2YHYuNmH2ZQgVVNCINi02YXYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODgxNTY0NjI5MzQ5Nzc5NDAiPiLigI/YrtmI2KfZhtiv2YYg2YXYrdiq2YjbjNin2Kog2qnYp9ix2KogU0Qg2LTZhdinIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ2OTg4NzEyNTk4Mzg2MDc5Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINmF2K3YqtmI2KfZh9in24wg2YHYttin24wg2LDYrtuM2LHZhyBVU0Ig2LHYpyDYqNiu2YjYp9mG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MDczNjI0NzM2NTQ5NzU0MTEiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2YXYrdiq2YjYp9mH2KfbjCDaqdin2LHYqiBTRCDYtNmF2Kcg2LHYpyDYqNiu2YjYp9mG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4NDg1OTc5MDYyMjU0NjY2NzQ4Ij4i4oCP2KfYtdmE2KfYrSDbjNinINit2LDZgSDZhdit2KrZiNuM2KfYqiDYrdin2YHYuNmH2ZQgVVNCINi02YXYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4ODA1NjkzNjMwMDUwNDU4NzYzIj4i4oCP2YXYrdiq2YjYp9uMINqp2KfYsdiqIFNEINi02YXYpyDYsdinINin2LXZhNin2K0g2qnYsdiv2Ycg24zYpyDYqti624zbjNixINiv2YfYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNzU0MDYyOTk0NDU3MTA4ODgiPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYr9ixINit2KfZgdi42YfZlCBVU0Ig2KjZhtmI24zYs9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDMzNzQxNzc5MDkzNjYzMjA5MCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiv2LEg2qnYp9ix2KogU0Qg2KjZhtmI24zYs9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWVkaWFTdG9yYWdlV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODU5ODM5MTk5NzA2ODc5MDE1Ij4i2KrYutuM24zYsS/Yrdiw2YEg2YXYrdiq2YjYp9mH2KfbjCDYrdin2YHYuNmHINix2LPYp9mG2Ycg2K/Yp9iu2YTbjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODE4OTE2MDU5NzY5ODUyOTE4NSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmF2K3YqtmI24zYp9iqINit2KfZgdi42Ycg2LHYs9in2YbZhyDYr9in2K7ZhNuMINix2Kcg2KrYutuM24zYsSDYr9mH2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWVkaWFTdG9yYWdlV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTg5MTYwNTk3Njk4NTI5MTg1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YXYrdiq2YjbjNin2Kog2K3Yp9mB2LjZhyDYsdiz2KfZhtmHINiv2KfYrtmE24wg2LHYpyDYqti624zbjNixINiv2YfYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZURvY3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc4MzE4NTk4NDQ4ODQ5ODI5Ij4i2YXYr9uM2LHbjNiqINmB2LbYp9uMINiw2K7bjNix2YfigIzYs9in2LLbjCDYp9iz2YbYp9ivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg3MDQzMjMxNzY5MTQxMjE0ODQiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2YHYttin24wg2LDYrtuM2LHZh+KAjNiz2KfYstuMINin2LPZhtin2K8g2LHYpyDZhdiv24zYsduM2Kog2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iODE1MDYxMzgyMzkwMDQ2MDU3NiI+Itiv2LPYqtix2LPbjCDYqNmHINiv2LPYqtqv2KfZhyDYsNiu24zYsdmHINiu2KfYsdis24wg2KrZhdin2YUg2qnYp9ix2KjYsdin2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSIzMjE1MjA4MzU3NDE1ODkxMzIwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Ycg2K/Ys9iq2q/Yp9mHINiw2K7bjNix2Ycg2K7Yp9ix2KzbjCDYqNix2KfbjCDZh9mF2Ycg2qnYp9ix2KjYsdin2YYg2K/Ys9iq2LHYs9uMINiv2KfYtNiq2Ycg2KjYp9i02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTY1NjQ4NzI2NDgxOTY2OTgyNCI+Itiv2LPYqtix2LPbjCDYqNmHINiz24zYs9iq2YUg2YHYp9uM2YQg2K3Yp9mB2LjZh9mUINm+2YbZh9in2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTU3ODk2NzY0MjI2NTU1MDk1NSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiz24zYs9iq2YUg2YHYp9uM2YQg2K3Yp9mB2LjZh9mUINm+2YbZh9in2YYg2LHYpyDYqNiu2YjYp9mG2K8g2Ygg2KjZhtmI24zYs9ivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NTc4OTY3NjQyMjY1NTUwOTU1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LPbjNiz2KrZhSDZgdin24zZhCDYrdin2YHYuNmH2ZQg2b7ZhtmH2KfZhiDYsdinINio2K7ZiNin2YbYryDZiCDYqNmG2YjbjNiz2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2Vfc2lwIiBtc2dpZD0iNTk4Njk1MjM2Mjc5NTg3MDUwMiI+Iti52YTYp9mF2KrigIzar9iw2KfYsduML9iv2LHbjNin2YHYqiDYqtmF2KfYs+KAjNmH2KfbjCDYp9uM2YbYqtix2YbYqtuMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlX3NpcCIgbXNnaWQ9IjQ3MTc2MzIwMDAwNjI2NzQyOTQiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYp9iyINiu2K/Zhdin2KogU0lQINin2LPYqtmB2KfYr9mHINqp2YbYryDZiCDYqtmF2KfYs+KAjNmH2KfbjCDYp9uM2YbYqtix2YbYqtuMINio2q/bjNix2K8v2K/YsduM2KfZgdiqINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iNDcxNzYzMjAwMDA2MjY3NDI5NCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINin2LIg2K7Yr9mF2KfYqiBTSVAg2KfYs9iq2YHYp9iv2Ycg2qnZhtivINmIINiq2YXYp9iz4oCM2YfYp9uMINin24zZhtiq2LHZhtiq24wg2Kjar9uM2LHYry/Yr9ix24zYp9mB2Kog2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZF9jYWxsX3NlcnZpY2UiIG1zZ2lkPSI2NzI0MDA5NzI2NjcxMjQ2NTUxIj4i2KrYudin2YXZhCDYqNinINi12YHYrdmH4oCM2YbZhdin24zYtCDZh9mG2q/Yp9mFINiq2YXYp9izIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZF9jYWxsX3NlcnZpY2UiIG1zZ2lkPSI4NzMyNTQ3NjYyNDQyNTcyNDM1Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfZhdqp2KfZhiDZhduM4oCM2K/Zh9ivINqp2YbYqtix2YQg2qnZhtivINqp2Ycg2qnYp9ix2KjYsSDahtmHINiy2YXYp9mG24wg2Ygg2obar9mI2YbZhyDYtdmB2K3Zh+KAjNmG2YXYp9uM2LQg2YfZhtqv2KfZhSDYqtmF2KfYsyDYsdinINmF2LTYp9mH2K/ZhyDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc4NjI1OTMyODM2MTE0OTMyMzIiPiLYrtmI2KfZhtiv2YYg2LPYp9io2YLZhyDYp9iz2KrZgdin2K/ZhyDYp9iyINi02KjaqdmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3Njg5MDYwNzQ5ODE5MTI2NDcyIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2qnYp9ix2KjYsdivINi02KjaqdmHINix2Kcg2K/YsSDYt9mI2YQg2LLZhdin2YYg2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYpyDZiCDYtNio2qnZh+KAjtmH2KfbjCDYrtin2LUg2KjYrtmI2KfZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWROZXR3b3JrVXNhZ2VIaXN0b3J5IiBtc2dpZD0iNzY4OTA2MDc0OTgxOTEyNjQ3MiI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqp2KfYsdio2LHYryDYtNio2qnZhyDYsdinINiv2LEg2LfZiNmEINiy2YXYp9mGINio2LHYp9uMINio2LHZhtin2YXZh+KAjtmH2Kcg2Ygg2LTYqNqp2YfigI7Zh9in24wg2K7Yp9i1INio2K7ZiNin2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSIyNTYyMDUzNTkyMzM5ODU5OTkwIj4i2YXYr9uM2LHbjNiqINiu2Lcg2YXYtNuMINi02KjaqdmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9Ijc1Mzc1ODY3NzE1NTkzNzA2NjgiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYrti3INmF2LTbjOKAjtmH2KfbjCDYtNio2qnZhyDYsdinINmF2K/bjNix24zYqiDaqdmG2K8g2Ygg2YLZiNin2YbbjNmGINiu2KfYtSDYqNix2YbYp9mF2Ycg2LHYpyDYqti524zbjNmGINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iNzUzNzU4Njc3MTU1OTM3MDY2OCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiu2Lcg2YXYtNuM4oCO2YfYp9uMINi02KjaqdmHINix2Kcg2YXYr9uM2LHbjNiqINqp2YbYryDZiCDZgtmI2KfZhtuM2YYg2K7Yp9i1INio2LHZhtin2YXZhyDYsdinINiq2LnbjNuM2YYg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1MDg4MjE3MzA5MDg4NzI5NjUwIj4i2KfYtdmE2KfYrSDZhdit2KfYs9io2Ycg2KfYs9iq2YHYp9iv2Ycg2KfYsiDYtNio2qnZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTQ0MzQxMjg2Njc0NjE5ODEyMyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmG2K3ZiNmHINmF2K3Yp9iz2KjZhyDaqdin2LHYqNix2K8g2LTYqNqp2Ycg2K/YsSDYqNix2YbYp9mF2Ycg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTQ0MzQxMjg2Njc0NjE5ODEyMyI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmG2K3ZiNmHINmF2K3Yp9iz2KjZhyDaqdin2LHYqNix2K8g2LTYqNqp2Ycg2K/YsSDYqNix2YbYp9mF2Ycg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSIzNjU4NTI3MjE0OTE0OTU5NzQ5Ij4i2KrYutuM24zYsSDYudmE2KfYptmFINiz2YjaqdiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSI3NjU1NTY4NDMzNjk2MzU2NTc4Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2LHYp9uMINmF2LPbjNix24zYp9io24wg2LnZhNin2KbZhSDYs9mI2qnYqiDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9Ijc2NzM0MTY0ODc4NzM0MzIyNjgiPiLYp9i52YTYp9mG4oCM2YfYp9uMINiv2LPYqtix2LPbjCI8L3N0cmluZz4KQEAgLTY3NSwxMCArNjg0LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtDb25kaXRpb25zIiBtc2dpZD0iODIwNjA3NzQ0NzgzODkwOTUxNiI+Itqv2YjYtCDYr9in2K/ZhiDYqNix2KfbjCDYqNix2LHYs9uMINi02LHYp9uM2Lcg2LTYqNqp2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjY4OTkxMDIwNzU4MjUyNzIyMTEiPiLYqNmHINio2LHZhtin2YXZhyDYp9mF2qnYp9mGINmF24zigIzYr9mH2K8g2KjYsdin24wg2KjYsdix2LPbjCDYtNix2KfbjNi3INi02KjaqdmHINqv2YjYtCDYr9mH2K8uINin24zZhiDYp9mF2qnYp9mGINmH2LHar9iyINmG2KjYp9uM2K8g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINmF2LnZhdmI2YTbjCDZhdmI2LHYryDZhtuM2KfYsiDYqNin2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjQ0OTc0MjA3Mjg4NTc1ODU3OTEiPiLYqtmG2LjbjNmFINmC2YjYp9mG24zZhiDYsdmF2LIg2YjYsdmI2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2xpbWl0UGFzc3dvcmQiIG1zZ2lkPSIzMjUyMTE0MjAzOTE5NTEwMzk0Ij4i2LfZiNmEINmIINmG2YjbjNiz2YfigI7Zh9in24wg2YXYrNin2LIg2K/YsSDar9iw2LHZiNin2pjZh+KAjNmH2KfbjCDYqNin2LLaqdix2K/ZhiDZgtmB2YQg2LXZgdit2Ycg2LHYpyDaqdmG2KrYsdmEINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjMyNTIxMTQyMDM5MTk1MTAzOTQiPiLigI/Yt9mI2YQg2Ygg2YbZiNuM2LPZh+KAjtmH2KfbjCDZhdis2KfYsiDYr9ixINqv2LDYsdmI2KfamNmH4oCM2YfYp9uMINio2KfYstqp2LHYr9mGINmC2YHZhCDYtdmB2K3ZhyDYsdinINqp2YbYqtix2YQg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dhdGNoTG9naW4iIG1zZ2lkPSI5MTQxMzA2NDY5NDIxOTk1MDMiPiLZhtmF2KfbjNi0INiq2YTYp9i04oCM2YfYp9uMINmC2YHZhCDar9i02KfbjNuMINi12YHYrdmHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193YXRjaExvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjE1NzI5Mjk0MjE1MDcwMDcyIj4i2KrYudiv2KfYryDar9iw2LHZiNin2pjZh+KAjtmH2KfbjCDYp9i02KrYqNin2Ycg2KrYp9uM2b4g2LTYr9mHINix2Kcg2YfZhtqv2KfZhSDYqNin2LLaqdix2K/ZhiDZgtmB2YQg2LXZgdit2Ycg2qnZhtiq2LHZhCDZhduM4oCM2qnZhtiv2Iwg2Ygg24zYpyDYp9qv2LEg2K/Zgdi52KfYqiDYstuM2KfYr9uMINqv2LDYsdmI2KfamNmHINin2LTYqtio2KfZhyDYqtin24zZviDYtNmI2K8g2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LHYpyDZgtmB2YQg2YXbjOKAjtqp2YbYryDZiCDZh9mF2Ycg2K/Yp9iv2YfigI7Zh9in24wg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2LHYpyDZvtin2qkg2YXbjOKAjtqp2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzEyMzIzMDkxODQ2NzYxMDczIj4i2KrYudiv2KfYryDar9iw2LHZiNin2pjZh+KAjtmH2KfbjCDZhtin2K/Ysdiz2Kog2KrYp9uM2b4g2LTYr9mHINix2Kcg2qnZhtiq2LHZhCDZhduM4oCO2qnZhtivLiDZh9mG2q/Yp9mFINio2KfYstqp2LHYr9mGINmC2YHZhCDYtdmB2K3ZhyDYp9qv2LEg2K/Zgdi52KfYqiDYstuM2KfYr9uMINqv2LDYsdmI2KfamNmHINmG2KfYr9ix2LPYqiDYqtin24zZviDaqdix2K/Zh+KAjtin24zYr9iMINiq2YTZgdmGINix2Kcg2YLZgdmEINqp2YbbjNivINuM2Kcg2YfZhdmHINiv2KfYr9mH4oCO2YfYp9uMINiq2YTZgdmGINix2Kcg2b7Yp9qpINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzIxNTcyOTI5NDIxNTA3MDA3MiI+IuKAj9iq2LnYr9in2K8g2q/YsNix2YjYp9qY2YfigI7Zh9in24wg2KfYtNiq2KjYp9mHINiq2KfbjNm+INi02K/ZhyDYsdinINmH2Ybar9in2YUg2KjYp9iy2qnYsdiv2YYg2YLZgdmEINi12YHYrdmHINqp2YbYqtix2YQg2YXbjOKAjNqp2YbYr9iMINmIINuM2Kcg2Kfar9ixINiv2YHYudin2Kog2LLbjNin2K/bjCDar9iw2LHZiNin2pjZhyDYp9i02KrYqNin2Ycg2KrYp9uM2b4g2LTZiNivINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2YLZgdmEINmF24zigI7aqdmG2K8g2Ygg2YfZhdmHINiv2KfYr9mH4oCO2YfYp9uMINix2KfbjNin2YbZh9mUINmE2YjYrduMINix2Kcg2b7Yp9qpINmF24zigI7aqdmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193YXRjaExvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcxMjMyMzA5MTg0Njc2MTA3MyI+IuKAj9iq2LnYr9in2K8g2q/YsNix2YjYp9qY2YfigI7Zh9in24wg2YbYp9iv2LHYs9iqINiq2KfbjNm+INi02K/ZhyDYsdinINqp2YbYqtix2YQg2YXbjOKAjtqp2YbYry4g2YfZhtqv2KfZhSDYqNin2LLaqdix2K/ZhiDZgtmB2YQg2LXZgdit2Ycg2Kfar9ixINiv2YHYudin2Kog2LLbjNin2K/bjCDar9iw2LHZiNin2pjZhyDZhtin2K/Ysdiz2Kog2KrYp9uM2b4g2qnYsdiv2YfigI7Yp9uM2K/YjCDYqtmE2YHZhiDYsdinINmC2YHZhCDaqdmG24zYryDbjNinINmH2YXZhyDYr9in2K/Zh+KAjtmH2KfbjCDYqtmE2YHZhiDYsdinINm+2KfaqSDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjI2MjAwNzcxOTEyNDI2ODg5NTUiPiLYqti624zbjNixINix2YXYsiDZiNix2YjYryDZgtmB2YQg2q/YtNin24zbjCDYtdmB2K3ZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjYwNTk2Mzk2MjMwMTkwNDQ1OCI+Itqv2LDYsdmI2KfamNmHINio2KfYstqv2LTYp9uM24wg2YLZgdmEINi12YHYrdmHINix2Kcg2KrYutuM24zYsSDYr9mH24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZm9yY2VMb2NrIiBtc2dpZD0iMjI3NDA4NTM4NDcwNDI0ODQzMSI+ItmC2YHZhCDaqdix2K/ZhiDYtdmB2K3ZhyI8L3N0cmluZz4KQEAgLTY5Myw3ICs3MDIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSI4OTAxMzI2MTk5OTA5MTMyOTE1Ij4i2KrZhti424zZhSDYsdmF2LLar9iw2KfYsduMINit2KfZgdi42YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSIyNjM3NzMyMTE1MzI1MzE2OTkyIj4i2KjYp9uM2K8g2KfYt9mE2KfYudin2Kog2LDYrtuM2LHZhyDYtNiv2Ycg2KjYsdmG2KfZhdmHINix2YXYstqv2LDYp9ix24wg2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iNjM5NTMwMTAyMzE1MjI5NzgyNiI+Iti624zYsSDZgdi52KfZhCDaqdix2K/ZhiDYr9mI2LHYqNuM2YYg2YfYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZGlzYWJsZUNhbWVyYSIgbXNnaWQ9IjIzMDYzNDkwNDI4MzQ3NTQ1OTciPiLYp9iyINin2LPYqtmB2KfYr9mHINin2LIg2KrZhdin2YUg2K/ZiNix2KjbjNmG4oCO2YfYp9uMINiv2LPYqtqv2KfZhyDYrNmE2Yjar9uM2LHbjCDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSIyMzA2MzQ5MDQyODM0NzU0NTk3Ij4i4oCP2KfYsiDYp9iz2KrZgdin2K/ZhyDYp9iyINiq2YXYp9mFINiv2YjYsdio24zZhuKAjtmH2KfbjCDYr9iz2Krar9in2Ycg2KzZhNmI2q/bjNix24wg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2Rpc2FibGVLZXlndWFyZEZlYXR1cmVzIiBtc2dpZD0iMjY2MzI5MTA0NTQyNjM4ODAyIj4i2LrbjNix2YHYudin2YQg2qnYsdiv2YYg2YjbjNqY2q/bjOKAjOKAjNmH2Kcg2K/YsSDZhdit2KfZgdi4INqp2YTbjNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjM0NjcwODIyNzIxODY1MzQ2MTQiPiLYp9iyINin2LPYqtmB2KfYr9mHINin2LIg2KjYsdiu24wg2YjbjNqY2q/bjOKAjNmH2Kcg2K/YsSDZhdit2KfZgdi4INqp2YTbjNivINis2YTZiNqv24zYsduMINi02YjYry4iPC9zdHJpbmc+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0icGhvbmVUeXBlcyI+CkBAIC04MTAsOCArODE5LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLZhdit2YQg2qnYp9ixIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiLYs9in24zYsSDZhdmI2KfYsdivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i2b7bjNmGINqp2K8g2LHYpyDZiNin2LHYryDaqdmG24zYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyDZiCDZvtuM2YYg2qnYryDYrNiv24zYryDYsdinINiq2KfbjNm+INqp2YbbjNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiLaqdivIFBVSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IuKAj1BVSyDZiCDZvtuM2YYg2qnYryDYrNiv24zYryDYsdinINiq2KfbjNm+INqp2YbbjNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiLigI/aqdivIFBVSyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i2b7bjNmGINqp2K8g2KzYr9uM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLYqNix2KfbjCDYqtin24zZviDar9iw2LHZiNin2pjZhyDZhNmF2LMg2qnZhtuM2K8iPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLYqNix2KfbjCDYqNin2LLaqdix2K/ZhiDZgtmB2YTYjCDar9iw2LHZiNin2pjZhyDYsdinINmI2KfYsdivINqp2YbbjNivIjwvc3RyaW5nPgpAQCAtODI5LDcgKzgzOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fY29ycmVjdCIgbXNnaWQ9IjkwMzkwMDg2NTAzNjIyNjEyMzciPiLYtdit24zYrSDYp9iz2KohIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX3dyb25nIiBtc2dpZD0iNDMxNzk1NTAxNDk0ODEwODc5NCI+Itiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Bhc3N3b3JkX3dyb25nIiBtc2dpZD0iNTczNzgxNTM5MzI1MzE2NTMwMSI+Itiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i2K/Zgdi52KfYqiDYqtmE2KfYtCDYqNix2KfbjCBGYWNlIFVubG9jayDYp9iyINit2K/Yp9qp2KvYsSDZhdis2KfYsiDYqNuM2LTYqtixINi02K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i4oCP2K/Zgdi52KfYqiDYqtmE2KfYtCDYqNix2KfbjCBGYWNlIFVubG9jayDYp9iyINit2K/Yp9qp2KvYsSDZhdis2KfYsiDYqNuM2LTYqtixINi02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MDU3NzYyODI4MzU1NTcyMzE1Ij4i2K/YsSDYrdin2YQg2LTYp9ix2pjYjCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9jaGFyZ2VkIiBtc2dpZD0iMzIxNjM1NzQ1Njg0MDYwNjI0Ij4i2LTYp9ix2pgg2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYmF0dGVyeV9zaG9ydCIgbXNnaWQ9IjQ0NzcyNjQ4NDkzODY4NTAyNjYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgpAQCAtODQwLDcgKzg0OSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUzNzI3ODcxMzgwMjMyNzI2MTUiPiLYs9uM2YUg2qnYp9ix2Kog2LHYpyDZiNin2LHYryDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+Itiz24zZhSDaqdin2LHYqiDZhdmI2KzZiNivINmG24zYs9iqINuM2Kcg2YLYp9io2YQg2K7ZiNin2YbYr9mGINmG24zYs9iqLiDbjNqpINiz24zZhSDaqdin2LHYqiDZiNin2LHYryDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTYxNDk2NjUxMzg5MTYxODQiPiLYs9uM2YUg2qnYp9ix2Kog2LrbjNix2YLYp9io2YQg2KfYs9iq2YHYp9iv2Ycg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiLYs9uM2YUg2qnYp9ix2Kog2LTZhdinINio2Ycg2LfZiNixINiv2KfYptmFINi624zYsSDZgdi52KfZhCDYtNiv2Ycg2KfYs9iqLiBcbtio2LHYp9uMINiv2KfYtNiq2YYg2LPbjNmFINqp2KfYsdiqINiv24zar9ixINio2Kcg2KfYsdin2KbZh+KAjtiv2YfZhtiv2Ycg2LPYsdmI24zYsyDYqNuM4oCO2LPbjNmFINiu2YjYryDYqtmF2KfYsyDYqNqv24zYsduM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjkxMDkwNDY0MzQzMzE1MTM3MSI+IuKAj9iz24zZhSDaqdin2LHYqiDYtNmF2Kcg2KjZhyDYt9mI2LEg2K/Yp9im2YUg2LrbjNixINmB2LnYp9mEINi02K/ZhyDYp9iz2KouIFxu2KjYsdin24wg2K/Yp9i02KrZhiDYs9uM2YUg2qnYp9ix2Kog2K/bjNqv2LEg2KjYpyDYp9ix2KfYptmH4oCO2K/Zh9mG2K/ZhyDYs9ix2YjbjNizINio24zigI7Ys9uM2YUg2K7ZiNivINiq2YXYp9izINio2q/bjNix24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjAxNTk0OTA1MTUyNzQ2ODg2Ij4i2K/aqdmF2Ycg2KrYsdin2qkg2YLYqNmE24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjA4OTI5NzY1MDQ4MTI5MjM2MyI+Itiv2qnZhdmHINiq2LHYp9qpINio2LnYr9uMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU5MDg4Nzg2NzgwMTI4MDAxIj4i2K/aqdmF2Ycg2YXaqdirIjwvc3RyaW5nPgpAQCAtODQ4LDE1ICs4NTcsMTUgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTYyMzE4Mzc4NzY2OTg3NjAxIj4i2K/aqdmF2Ycg2KrZiNmC2YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbHNfb25seSIgbXNnaWQ9IjY3MzM5NzgzMDQzODYzNjU0MDciPiLZgdmC2Lcg2KrZhdin2LPigIzZh9in24wg2KfYtti32LHYp9ix24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIxNDMzODkyMjQ5ODYwMjg1MDEiPiLYtNio2qnZhyDZgtmB2YQg2LTYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9Ijc0NDE3OTczMzk5NzYyMzAiPiLYs9uM2YUg2qnYp9ix2Kog2KjYpyBQVUsg2YLZgdmEINi02K/ZhyDYp9iz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNzQ0MTc5NzMzOTk3NjIzMCI+IuKAj9iz24zZhSDaqdin2LHYqiDYqNinIFBVSyDZgtmB2YQg2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiLZhNi32YHYp9mLINio2Ycg2LHYp9mH2YbZhdin24wg2qnYp9ix2KjYsSDZhdix2KfYrNi52Ycg2qnYsdiv2Ycg24zYpyDYqNinINmF2LHaqdiyINm+2LTYqtuM2KjYp9mG24wg2KfYsiDZhdi02KrYsduM2KfZhiDYqtmF2KfYsyDYqNqv24zYsduM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI4MDY2NjYwMTI5MjA2MDAxMDM5Ij4i2LPbjNmFINqp2KfYsdiqINmC2YHZhCDYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjU5NTMyMzIxNDA1Mjg4MTI2NCI+Itio2KfYstqv2LTYp9uM24wg2YLZgdmEINiz24zZhSDaqdin2LHYqi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjQ4MTYyMzgzMDM0NDEwNzIyMiI+Itin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCO2KfbjNivLiBcblxu2YTYt9mB2KfZiyDZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjQ4MTYyMzgzMDM0NDEwNzIyMiI+IuKAj9in2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCO2KfbjNivLiBcblxu2YTYt9mB2KfZiyDZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iMjcyNTk3MzI4NjIzOTM0NDU1NSI+Itqv2LDYsdmI2KfamNmH2ZQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDYqtin24zZviDaqdix2K/Zh+KAjNin24zYry4gXG5cbtm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+Itm+24zZhiDYsdinPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gINio2KfYsSDYp9i02KrYqNin2Ycg2KrYp9uM2b4g2qnYsdiv2YfigI7Yp9uM2K8uIFxuXG7ZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjkxOTE2MTE5ODQ2MjU0NjA4MjAiPiLYtNmF2Kcg2KfZhNqv2YjbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhCDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINqp2LTbjNiv2YfigI7Yp9uM2K8uINio2LnYryDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INiq2YTYp9i0INmG2KfZhdmI2YHZgtiMINin2LIg2LTZhdinINiu2YjYp9iz2KrZhyDZhduM4oCO2LTZiNivINqp2Ycg2KjYsdin24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2K7ZiNivINio2YcgR29vZ2xlINmI2KfYsdivINi02YjbjNivLlxuXG4g2YTYt9mB2KfZiyDZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNTkwMjI3NTU5NzYzNzYyNzUxIj4i2LTZhdinINin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCM2KfbjNivLiDZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmCINiv24zar9ixINin2LIg2LTZhdinINiu2YjYp9iz2KrZhyDZhduM4oCO2LTZiNivINqp2Ycg2KjYsdin24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2q/ZiNi024wg2K7ZiNivINio2Ycg2KjYsdmG2KfZhdmH2ZQgR29vZ2xlINmI2KfYsdivINi02YjbjNivLlxuXG4g2YTYt9mB2KfZiyDZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjYyMTY2NzI3MDY1NDU2OTY5NTUiPiLigI/ZvtuM2YYg2LHYpzx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+ICDYqNin2LEg2KfYtNiq2KjYp9mHINiq2KfbjNm+INqp2LHYr9mH4oCO2KfbjNivLiBcblxu2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI5MTkxNjExOTg0NjI1NDYwODIwIj4i4oCP2LTZhdinINin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCO2KfbjNivLiDYqNi52K8g2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2LHYp9uMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINix2KfbjNin2YbZh9mUINmE2YjYrduMINiu2YjYryDYqNmHIEdvb2dsZSDZiNin2LHYryDYtNmI24zYry5cblxuINmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjU5MDIyNzU1OTc2Mzc2Mjc1MSI+IuKAj9i02YXYpyDYp9mE2q/ZiNuMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINiu2YjYryDYsdinIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYp9i02KrYqNin2Ycg2qnYtNuM2K/Zh+KAjNin24zYry4g2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INiq2YTYp9i0INmG2KfZhdmI2YHZgiDYr9uM2q/YsSDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2LHYp9uMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINqv2YjYtNuMINiu2YjYryDYqNmHINio2LHZhtin2YXZh9mUIEdvb2dsZSDZiNin2LHYryDYtNmI24zYry5cblxuINmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjEyODEwNjM5OTc0NTc1NTYwNCI+Iti02YXYpyDYqNmHINin2LTYqtio2KfZhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfZgtiv2KfZhSDYqNmHINio2KfYsiDaqdix2K/ZhiDZgtmB2YQg2LHYp9uM2KfZhtmH2ZQg2YTZiNit24wg2qnYsdiv2YfigIzYp9uM2K8uINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YIg2K/bjNqv2LHYjCDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYqNmHINm+24zYtOKAjNmB2LHYtiDaqdin2LHYrtin2YbZhyDYqNin2LLZhti02KfZhtuMINmF24zigIzYtNmI2K8g2Ygg2KrZhdin2YUg2K/Yp9iv2YfigIzZh9in24wg2qnYp9ix2KjYsSDYp9iyINiv2LPYqiDYrtmI2KfZh9ivINix2YHYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2MDM1NjUxNDIxNTY4MjY1NjUiPiLYtNmF2Kcg2KjZhyDYp9i02KrYqNin2YcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2YLYr9in2YUg2KjZhyDYqNin2LIg2qnYsdiv2YYg2YLZgdmEINiq2YTZgdmGINqp2LHYr9mH4oCM2KfbjNivLiDZvtizINin2LI8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YIg2K/bjNqv2LHYjCDYqtmE2YHZhiDYqNmHINm+24zYtOKAjNmB2LHYtiDaqdin2LHYrtin2YbZhyDYqNin2LLZhti02KfZhtuMINmF24zigIzYtNmI2K8g2Ygg2KrZhdin2YUg2K/Yp9iv2YfigIzZh9in24wg2qnYp9ix2KjYsSDYp9iyINiv2LPYqiDYrtmI2KfZh9ivINix2YHYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyODA4NzM1MTY0OTM5MzQzNjUiPiLYtNmF2Kcg2KjZhyDYp9i02KrYqNin2Ycg2KfZgtiv2KfZhSDYqNmHINio2KfYsiDaqdix2K/ZhiDZgtmB2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INix2KfbjNin2YbZh9mUINmE2YjYrduMINqp2LHYr9mH4oCM2KfbjNivLiDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYr9ixINit2KfZhCDYrdin2LbYsSDYqNmHINm+24zYtOKAjNmB2LHYtiDaqdin2LHYrtin2YbZhyDYqNin2LLZhti02KfZhtuMINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgpAQCAtODY0LDEzICs4NzMsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYyNTE0ODAzNDMzOTQzODk2NjUiPiLYr9ixIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiLYp9mE2q/ZiCDYsdinINmB2LHYp9mF2YjYtCDaqdix2K/Zh+KAjNin24zYr9ifIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fZm9yZ290X3BhdHRlcm4iIG1zZ2lkPSIyNTg4NTIxNTAxMTY2MDMyNzQ3Ij4i2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K3Ys9in2KgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiLYqtmE2KfYtOKAjtmH2KfbjCDYstuM2KfYr9uMINio2LHYp9uMINqp2LTbjNiv2YYg2KfZhNqv2Ygg2LXZiNix2Kog2q/YsdmB2KrZhyDYp9iz2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4i2KjYsdin24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YTYjCDYqNinINit2LPYp9ioIEdvb2dsZSDYrtmI2K8g2YjYp9ix2K8g2LPbjNiz2KrZhSDYtNmI24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiLigI/YqtmE2KfYtOKAjtmH2KfbjCDYstuM2KfYr9uMINio2LHYp9uMINqp2LTbjNiv2YYg2KfZhNqv2Ygg2LXZiNix2Kog2q/YsdmB2KrZhyDYp9iz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4i4oCP2KjYsdin24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YTYjCDYqNinINit2LPYp9ioIEdvb2dsZSDYrtmI2K8g2YjYp9ix2K8g2LPbjNiz2KrZhSDYtNmI24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iODg0Njg4MTQyNDEwNjQ4NDQ0NyI+ItmG2KfZhSDaqdin2LHYqNix24wgKNin24zZhduM2YQpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjU5NTgwMjgzODM5NTQ3Mzg1MjgiPiLYsdmF2LIg2YjYsdmI2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNzEzMDg5MzY5NDc5NTc4NjMwMCI+ItmI2LHZiNivINio2Ycg2LPbjNiz2KrZhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSIxMzY0MDUxNDczMzQ3NDg1OTA4Ij4i2YbYp9mFINqp2KfYsdio2LEg24zYpyDYsdmF2LIg2YjYsdmI2K8g2YbYp9mF2LnYqtio2LEg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjE2OTY5MjQ3NjM2OTAzNzkwNzMiPiLZhtin2YUg2qnYp9ix2KjYsduMINuM2Kcg2q/YsNix2YjYp9qY2YfZlCDYrtmI2K8g2LHYpyDZgdix2KfZhdmI2LQg2qnYsdiv24zYr9ifXG7Yp9iyICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDYqNin2LLYr9uM2K8g2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iMTY5NjkyNDc2MzY5MDM3OTA3MyI+IuKAj9mG2KfZhSDaqdin2LHYqNix24wg24zYpyDar9iw2LHZiNin2pjZh9mUINiu2YjYryDYsdinINmB2LHYp9mF2YjYtCDaqdix2K/bjNiv2J9cbtin2LIgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iINio2KfYstiv24zYryDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjcxMTQ2MjczNTEyODY5MzM4NjciPiLYr9ixINit2KfZhCDYqNix2LHYs9uMLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl91bmxvY2tfbGFiZWwiIG1zZ2lkPSI3Mzc0NDA0ODMyMjA2NjcwNTQiPiLYqNin2LLar9i02KfbjNuMINmC2YHZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4i2LXYr9inINix2YjYtNmGIjwvc3RyaW5nPgpAQCAtODc5LDcgKzg4OCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NsZWFyZWQiIG1zZ2lkPSI1NTgzNDc5NzIxMDAxNjM5NTc5Ij4i2KfZhNqv2Ygg2b7Yp9qpINi02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NlbGxfYWRkZWQiIG1zZ2lkPSI2NzU2MDMxMjA4MzU5MjkyNDg3Ij4i2LPZhNmI2YQg2KfYttin2YHZhyDYtNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9kZXRlY3RlZCIgbXNnaWQ9IjQ5ODg3MzA4OTU1NTQwNTcwNTgiPiLYp9mE2q/ZiCDYqtqp2YXbjNmEINi02K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuINin2KjYstin2LHaqSAlMiRkINin2LIgJTMkZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IuKAjyUxJHMuINin2KjYstin2LHaqSAlMiRkINin2LIgJTMkZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i2KfYqNiy2KfYsdqpINin2LbYp9mB2Ycg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLYrtin2YTbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4i2YXZhti32YLZhyDYqNin2LLar9i02KfbjNuMINqv2LPYqtix2K/ZhyDYtNivLiI8L3N0cmluZz4KQEAgLTkxMCwxMCArOTE5LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJob3VyX2FtcG0iIG1zZ2lkPSI0NTg0MzM4MDgzNTI5MzU1OTgyIj4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JVA8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaG91cl9jYXBfYW1wbSIgbXNnaWQ9IjIwODM0NjU5OTI5NDA0NDQzNjYiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lcDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9mYWlsZWQiIG1zZ2lkPSI1NDEwMjcwMzI5MTE0MjEyMDQxIj4i2KrYs9iqINqp2KfYsdiu2KfZhtmHINin2YbYrNin2YUg2YbYtNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiLYudmF2YTaqdix2K8gRkFDVE9SWV9URVNUINiq2YbZh9inINio2LHYp9uMINio2LPYqtmH4oCM2YfYp9uMINmG2LXYqCDYtNiv2Ycg2K/YsSAvc3lzdGVtL2FwcCDZvti02KrbjNio2KfZhtuMINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm9fYWN0aW9uIiBtc2dpZD0iODcyOTkxODc0Nzk5OTk4NTYxIj4i2KjYs9iq2YfigIzYp9uMINuM2KfZgdiqINmG2LTYryDaqdmHINi52YXZhNqp2LHYryBGQUNUT1JZX1RFU1Qg2LHYpyDYp9ix2KfYptmHINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub3Rfc3lzdGVtIiBtc2dpZD0iNDQzNTIwMTY1Njc2NzI3NjcyMyI+IuKAj9i52YXZhNqp2LHYryBGQUNUT1JZX1RFU1Qg2KrZhtmH2Kcg2KjYsdin24wg2KjYs9iq2YfigIzZh9in24wg2YbYtdioINi02K/ZhyDYr9ixIC9zeXN0ZW0vYXBwINm+2LTYqtuM2KjYp9mG24wg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub19hY3Rpb24iIG1zZ2lkPSI4NzI5OTE4NzQ3OTk5OTg1NjEiPiLigI/YqNiz2KrZh+KAjNin24wg24zYp9mB2Kog2YbYtNivINqp2Ycg2LnZhdmE2qnYsdivIEZBQ1RPUllfVEVTVCDYsdinINin2LHYp9im2Ycg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X3JlYm9vdCIgbXNnaWQ9IjYzMjAxNjgyMDMwNTA3OTE2NDMiPiLYsdin2YfigIzYp9mG2K/Yp9iy24wg2YXYrNiv2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIxOTg3NDgzOTc3ODM0NjAzODcyIj4i2LXZgdit2Ycg2K/YsSBcIjx4bGlmZjpnIGlkPSJUSVRMRSI+JXM8L3hsaWZmOmc+XCIg2YXbjOKAjtqv2YjbjNivOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjE5ODc0ODM5Nzc4MzQ2MDM4NzIiPiLigI/YtdmB2K3ZhyDYr9ixIFwiPHhsaWZmOmcgaWQ9IlRJVExFIj4lczwveGxpZmY6Zz5cIiDZhduM4oCO2q/ZiNuM2K86Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI2OTYxOTAzMjEzNzI5NjY3NTczIj4i2KzYp9mI2Kcg2KfYs9qp2LHbjNm+2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfYmVmb3JlX3VubG9hZF90aXRsZSIgbXNnaWQ9IjI2MTkzNzY1NTU1MjUxMTY1OTMiPiLYqtij24zbjNivINm+24zZhdin24zYtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3Bvc2l0aXZlX2J1dHRvbiIgbXNnaWQ9IjMxMTI3NTIwMTA2MDA0ODQxMzAiPiLYqtix2qkg2KfbjNmGINi12YHYrdmHIjwvc3RyaW5nPgpAQCAtOTQ1LDE3ICs5NTQsMTcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYs9in2KjZgtmHINmF2LHZiNix2q/YsSDbjNinINmG2LTYp9mG2qnigIzZh9in24wg2LDYrtuM2LHZhyDYtNiv2Ycg2K/YsSDYsdin24zYp9mG2YfZlCDZhNmI2K3bjCDYtNmF2Kcg2LHYpyDYp9i12YTYp9itINqp2YbYry4g2KfbjNmGINmI24zamNqv24wg2YXZhdqp2YYg2KfYs9iqINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2K/Zh9ivINiv2KfYr9mH4oCM2YfYp9uMINmF2LHZiNix2q/YsSDYsdinINit2LDZgSDbjNinINin2LXZhNin2K0g2qnZhtivLiDYqtmI2KzZhzog2KfbjNmGINmF2KzZiNiyINmF2YXaqdmGINin2LPYqiDYqtmI2LPYtyDZhdix2YjYsdqv2LHZh9in24wg2LTYrti1INir2KfZhNirINuM2Kcg2LPYp9uM2LEg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINiv2KfYsdin24wg2YLYp9io2YTbjNiqINmF2LHZiNixINmI2Kgg2YLYp9io2YQg2KfYrNix2Kcg2YbYqNin2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDk3Mzg5NTMxMDE0MTg1NTA5Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINiz2KfYqNmC2Ycg2YXYsdmI2LHar9ixINuM2Kcg2YbYtNin2YbaqeKAjNmH2KfbjCDYsNiu24zYsdmHINi02K/ZhyDYr9ixINiq2YTZgdmGINi02YXYpyDYsdinINin2LXZhNin2K0g2qnZhtivLiDYp9uM2YYg2YjbjNqY2q/bjCDZhdmF2qnZhiDYp9iz2Kog2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDYr9mH2K8g2K/Yp9iv2YfigIzZh9in24wg2YXYsdmI2LHar9ixINix2Kcg2K3YsNmBINuM2Kcg2KfYtdmE2KfYrSDaqdmG2K8uINiq2YjYrNmHOiDYp9uM2YYg2YXYrNmI2LIg2YXZhdqp2YYg2KfYs9iqINiq2YjYs9i3INmF2LHZiNix2q/YsdmH2KfbjCDYtNiu2LUg2KvYp9mE2Ksg24zYpyDYs9in24zYsSDYqNix2YbYp9mF2YfigIzZh9in24wg2K/Yp9ix2KfbjCDZgtin2KjZhNuM2Kog2YXYsdmI2LEg2YjYqCDZgtin2KjZhCDYp9is2LHYpyDZhtio2KfYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QWxhcm0iIG1zZ2lkPSIxMzc5Mjk0NTU2MzYyMDkxODE0Ij4i2KrZhti424zZhSDbjNqpINmH2LTYr9in2LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbGFybSIgbXNnaWQ9IjMxNjM5MjAzOTE1NzQ3Mzg0OCI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmH2LTYr9in2LHbjCDYsdinINiv2LEg2KjYsdmG2KfZhdmHINiz2KfYudiqINiy2Ybar9iv2KfYsSDZhti12Kgg2LTYr9mHINiq2YbYuNuM2YUg2qnZhtivLiDYqNix2K7bjCDYp9iyINio2LHZhtin2YXZh+KAjtmH2KfbjCDYs9in2LnYqiDYstmG2q/Yr9in2LEg2YbZhduM4oCO2KrZiNin2YbZhtivINin24zZhiDZiNuM2pjar9uMINix2Kcg2KfYudmF2KfZhCDaqdmG2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbGFybSIgbXNnaWQ9IjMxNjM5MjAzOTE1NzQ3Mzg0OCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmH2LTYr9in2LHbjCDYsdinINiv2LEg2KjYsdmG2KfZhdmHINiz2KfYudiqINiy2Ybar9iv2KfYsSDZhti12Kgg2LTYr9mHINiq2YbYuNuM2YUg2qnZhtivLiDYqNix2K7bjCDYp9iyINio2LHZhtin2YXZh+KAjtmH2KfbjCDYs9in2LnYqiDYstmG2q/Yr9in2LEg2YbZhduM4oCO2KrZiNin2YbZhtivINin24zZhiDZiNuM2pjar9uMINix2Kcg2KfYudmF2KfZhCDaqdmG2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjU1MjU2NjAwMjYwOTA5NTkwNDQiPiLYp9mB2LLZiNiv2YYg2b7Ys9iqINi12YjYqtuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWRkVm9pY2VtYWlsIiBtc2dpZD0iNjYwNDUwODY1MTQyODI1MjQzNyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYqtinINm+24zYp9mF4oCM2YfYpyDYsdinINio2Ycg2LXZhtiv2YjZgiDYr9ix24zYp9mB2Kog2b7Ys9iqINi12YjYqtuMINi02YXYpyDYp9i22KfZgdmHINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjU5NjIyMjQxNTg5NTUyNzM5MzIiPiLYqti624zbjNixINmF2KzZiNiy2YfYp9uMINmF2qnYp9mGINis2LrYsdin2YHbjNin24zbjCDZhdix2YjYsdqv2LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSIxMDgzNzQzMjM0NTIyNjM4NzQ3Ij4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YXYrNmI2LLZh9in24wg2KzYutix2KfZgduM2KfbjNuMINmF2LHZiNix2q/YsSDYsdinINiq2LrbjNuM2LEg2K/Zh9ivLiDYqNix2YbYp9mF2YfigI7Zh9in24wg2YXYrtix2Kgg2YXbjOKAjtiq2YjYp9mG2YbYryDYp9iyINii2YYg2KfYs9iq2YHYp9iv2Ycg2qnZhtmG2K8g2KrYpyDYp9i32YTYp9i52KfYqiDZhdmI2YLYuduM2Kog2YXaqdin2YbbjCDYsdinINio2Ycg2LPYp9uM2KrigIzZh9in24wg2YjYqCDaqdiq2KfYqNiu2KfZhtmHINio2YHYsdiz2KrZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjEwODM3NDMyMzQ1MjI2Mzg3NDciPiLigI/YqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDZhdis2YjYstmH2KfbjCDYrNi62LHYp9mB24zYp9uM24wg2YXYsdmI2LHar9ixINix2Kcg2KrYutuM24zYsSDYr9mH2K8uINio2LHZhtin2YXZh+KAjtmH2KfbjCDZhdiu2LHYqCDZhduM4oCO2KrZiNin2YbZhtivINin2LIg2KLZhiDYp9iz2KrZgdin2K/ZhyDaqdmG2YbYryDYqtinINin2LfZhNin2LnYp9iqINmF2YjZgti524zYqiDZhdqp2KfZhtuMINix2Kcg2KjZhyDYs9in24zYquKAjNmH2KfbjCDZiNioINqp2KrYp9io2K7Yp9mG2Ycg2KjZgdix2LPYqtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wYWNrYWdlVmVyaWZpY2F0aW9uQWdlbnQiIG1zZ2lkPSI1NTY4MTM5MTAwNjQ1ODI5MTE3Ij4i2KrYo9uM24zYryDYqNiz2KrZh+KAjNmH2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wYWNrYWdlVmVyaWZpY2F0aW9uQWdlbnQiIG1zZ2lkPSI4NDM3NTkwMTkwOTkwODQzMzgxIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINmC2KfYqNmEINmG2LXYqCDYqNmI2K/ZhiDYqNiz2KrZhyDYsdinINiq2KPbjNuM2K8g2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjQxODc3ODY3OTMzNjAzMjY2NTQiPiLYp9iq2LXYp9mEINio2Ycg24zaqSDYqtij24zbjNivINqp2YbZhtiv2Ycg2KjYs9iq2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iMzE4MDc0MTc3MzIzMzg2MjEyNiI+Itio2Ycg2K/Yp9ix2YbYr9mHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINiq2KfbjNuM2K/aqdmG2YbYr9qv2KfZhiDYqNiz2KrZhyDYsdinINiv2LHYrtmI2KfYs9iqINqp2YbYry4g2KjYsdin24wg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYp9iyINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSIzMTgwNzQxNzczMjMzODYyMTI2Ij4i4oCP2KjZhyDYr9in2LHZhtiv2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2KrYp9uM24zYr9qp2YbZhtiv2q/Yp9mGINio2LPYqtmHINix2Kcg2K/Ysdiu2YjYp9iz2Kog2qnZhtivLiDYqNix2KfbjCDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXJpYWxQb3J0IiBtc2dpZD0iNTQ2MDgzMzI3NjU0NjMxMDc2Ij4i2K/Ys9iq2LHYs9uMINio2Ycg2K/Ysdqv2KfZh+KAjNmH2KfbjCDYs9ix24zYp9mEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiLYqNmHINiv2KfYsdmG2K/ZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KjYpyDYp9iz2KrZgdin2K/ZhyDYp9iyIFNlcmlhbE1hbmFnZXIgQVBJINio2Ycg2K/Ysdqv2KfZh+KAjNmH2KfbjCDYs9ix24zYp9mEINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlcmlhbFBvcnQiIG1zZ2lkPSIyOTkxNjM5OTg1MjI0NTk4MTkzIj4i4oCP2KjZhyDYr9in2LHZhtiv2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiBTZXJpYWxNYW5hZ2VyIEFQSSDYqNmHINiv2LHar9in2YfigIzZh9in24wg2LPYsduM2KfZhCDYr9iz2KrYsdiz24wg2K/Yp9i02KrZhyDYqNin2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNTA3Nzc3NDI5Nzk0MzQwOTI4NSI+Itiv2LPYqtix2LPbjCDYrtin2LHYrNuMINio2Ycg2KfYsdin2KbZh+KAjNiv2YfZhtiv2q/Yp9mGINmF2K3YqtmI2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjQ1NDQzNDY0ODY2OTc4NTM2ODUiPiLYqNmHINiv2KfYsdmG2K/ZhyDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KrYpyDYp9iyINiu2KfYsdisINio2LHZhtin2YXZhyDYqNmHINin2LHYp9im2YfigIzYr9mH2YbYr9qv2KfZhiDZhdit2KrZiNinINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNivLiDZh9ix2q/YsiDYqNix2KfbjCDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYudmF2YjZhNuMINio2Ycg2KLZhiDZhtuM2KfYstuMINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlTG9jayIgbXNnaWQ9IjM1Mjc1NTgzNjY2MTY2ODA4ODkiPiLYqtix2LrbjNioINio2Ycg2KfZhtis2KfZhSDZhtiv2KfYr9mGINio2YfigIzYsdmI2LLYsdiz2KfZhtuM4oCM2YfYp9uMINiu2YjYr9qp2KfYsSDYr9iz2Krar9in2YciPC9zdHJpbmc+CkBAIC0xMDk1LDcgKzExMDQsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i2KzYp9uMINqv2LDYp9ix24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+Itis2KfbjNqv2LLbjNmGINi02YjYry4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLYrdiw2YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+Itqp2b7bjCBVUkwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IuKAj9qp2b7bjCBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLYp9mG2KrYrtin2Kgg2YXYqtmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Itin2YbYqtiu2KfYqCDZhdiq2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i2KfZgdiy2YjYr9mGINio2Ycg2YHYsdmH2Ybar+KAjNmE2LrYqiI8L3N0cmluZz4KQEAgLTExMTcsMTggKzExMjYsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9IndoaWNoQXBwbGljYXRpb24iIG1zZ2lkPSI0NTMzMTg1OTQ3MDY0NzczMzg2Ij4i2KraqdmF24zZhCDYudmF2YTaqdix2K8g2KjYpyDYp9iz2KrZgdin2K/ZhyDYp9iyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2hpY2hIb21lQXBwbGljYXRpb24iIG1zZ2lkPSI0NjE2NDIwMTcyNzI3MzI2NzgyIj4i2KfZhtiq2K7Yp9ioINuM2qkg2KjYsdmG2KfZhdmHINi12YHYrdmHINin2LXZhNuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+Itin2LPYqtmB2KfYr9mHINio2Ycg2LXZiNix2Kog2b7bjNi04oCM2YHYsdi2INio2LHYp9uMINin24zZhiDYudmF2YTaqdix2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLZvtuM2LTigIzZgdix2LYg2LHYpyDYr9ixINiq2YbYuNuM2YXYp9iqINiz24zYs9iq2YUmZ3Q7INio2LHZhtin2YXZh+KAjtmH2KcmZ3Q7INmF2YjYsdivINiv2KfZhtmE2YjYryDYtNiv2Ycg2b7Yp9qpINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNsZWFyRGVmYXVsdEhpbnRNc2ciIG1zZ2lkPSIzMjUyNTg0Njg5NTEyMDc3MjU3Ij4i4oCP2b7bjNi04oCM2YHYsdi2INix2Kcg2K/YsSDYqtmG2LjbjNmF2KfYqiDYs9uM2LPYqtmFJmd0OyDYqNix2YbYp9mF2YfigI7Zh9inJmd0OyDZhdmI2LHYryDYr9in2YbZhNmI2K8g2LTYr9mHINm+2KfaqSDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiLYp9mG2KrYrtin2Kgg2LnZhdmE2qnYsdivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4i2KfZhtiq2K7Yp9ioINio2LHZhtin2YXZhyDYqNix2KfbjCDYr9iz2Krar9in2YcgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9BcHBsaWNhdGlvbnMiIG1zZ2lkPSIyOTkxODE0MjczOTM2NTA0Njg5Ij4i2YfbjNqGINio2LHZhtin2YXZh+KAjNin24wg2YbZhduM4oCO2KrZiNin2YbYryDYp9uM2YYg2qnYp9ixINix2Kcg2KfZhtis2KfZhSDYr9mH2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4i4oCP2KfZhtiq2K7Yp9ioINio2LHZhtin2YXZhyDYqNix2KfbjCDYr9iz2Krar9in2YcgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9BcHBsaWNhdGlvbnMiIG1zZ2lkPSIyOTkxODE0MjczOTM2NTA0Njg5Ij4i4oCP2YfbjNqGINio2LHZhtin2YXZh+KAjNin24wg2YbZhduM4oCO2KrZiNin2YbYryDYp9uM2YYg2qnYp9ixINix2Kcg2KfZhtis2KfZhSDYr9mH2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWVycl90aXRsZSIgbXNnaWQ9IjE5MDU4MDA1NjAzMTcxMzc3NTIiPjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWVycl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjkzMjYyODQ4ODAxMzA5Mjc3NiI+ItmF2KrYo9iz2YHYp9mG2YfYjCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INmF2KrZiNmC2YEg2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZXJyX3Byb2Nlc3MiIG1zZ2lkPSI0NTA3MDU4OTk3MDM1Njk3NTc5Ij4i2YXYqtij2LPZgdin2YbZh9iMINm+2LHYr9in2LLYtCA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g2YXYqtmI2YLZgSDYtNiv2Ycg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFucl90aXRsZSIgbXNnaWQ9IjQzNTE5NDg0ODE0NTkxMzU3MDkiPjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X2FwcGxpY2F0aW9uIiBtc2dpZD0iMTkwNDQ3NzE4OTA1NzE5OTA2NiI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTIkczwveGxpZmY6Zz4g2b7Yp9iz2K4g2YbZhduM4oCO2K/Zh9ivLlxuXG7YotuM2Kcg2YXbjOKAjtiu2YjYp9mH24zYryDYotmG2LHYpyDYqNio2YbYr9uM2K/YnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+ItmB2LnYp9mE24zYqiA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+INm+2KfYs9iuINmG2YXbjOKAjtiv2YfYry5cblxu2KLbjNinINmF24zigI7YrtmI2KfZh9uM2K8g2KLZhiDYsdinINio2KjZhtiv24zYr9ifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FwcGxpY2F0aW9uX3Byb2Nlc3MiIG1zZ2lkPSI4OTQxNzU3NjA3MzQwNDgxMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDZvtin2LPYriDZhtmF24zigI7Yr9mH2K8uINii24zYpyDZhduM4oCO2K7ZiNin2YfbjNivINii2YYg2LHYpyDYqNio2YbYr9uM2K/YnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9wcm9jZXNzIiBtc2dpZD0iNjUxMzIwOTg3NDg4MDUxNzEyNSI+Itix2YjZhtivIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDZvtin2LPYriDZhtmF24zigI7Yr9mH2K8uIFxuXG7YotuM2Kcg2YXbjOKAjtiu2YjYp9mH24zYryDYotmGINix2Kcg2KjYqNmG2K/bjNiv2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfYWN0aXZpdHlfYXBwbGljYXRpb24iIG1zZ2lkPSIxOTA0NDc3MTg5MDU3MTk5MDY2Ij4i4oCPPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMiRzPC94bGlmZjpnPiDZvtin2LPYriDZhtmF24zigI7Yr9mH2K8uXG5cbtii24zYpyDZhduM4oCO2K7ZiNin2YfbjNivINii2YbYsdinINio2KjZhtiv24zYr9ifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X3Byb2Nlc3MiIG1zZ2lkPSI1Nzc2MjA5ODgzMjk5MDg5NzY3Ij4i4oCP2YHYudin2YTbjNiqIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g2b7Yp9iz2K4g2YbZhduM4oCO2K/Zh9ivLlxuXG7YotuM2Kcg2YXbjOKAjtiu2YjYp9mH24zYryDYotmGINix2Kcg2KjYqNmG2K/bjNiv2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfYXBwbGljYXRpb25fcHJvY2VzcyIgbXNnaWQ9Ijg5NDE3NTc2MDczNDA0ODEwNTciPiLigI88eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INm+2KfYs9iuINmG2YXbjOKAjtiv2YfYry4g2KLbjNinINmF24zigI7YrtmI2KfZh9uM2K8g2KLZhiDYsdinINio2KjZhtiv24zYr9ifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX3Byb2Nlc3MiIG1zZ2lkPSI2NTEzMjA5ODc0ODgwNTE3MTI1Ij4i4oCP2LHZiNmG2K8gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+INm+2KfYs9iuINmG2YXbjOKAjtiv2YfYry4gXG5cbtii24zYpyDZhduM4oCO2K7ZiNin2YfbjNivINii2YYg2LHYpyDYqNio2YbYr9uM2K/YnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2Nsb3NlIiBtc2dpZD0iODM0NjA3MjA5NDUyMTI2NTYwNSI+Itiq2KPbjNuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBvcnQiIG1zZ2lkPSI0MDYwMjE4MjYwOTg0Nzk1NzA2Ij4i2q/Ystin2LHYtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndhaXQiIG1zZ2lkPSI3MTQ3MTE4MjE3MjI2MzE3NzMyIj4i2YXZhtiq2LjYsSDYqNmF2KfZhtuM2K8iPC9zdHJpbmc+CkBAIC0xMTM4LDkgKzExNDcsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfb3JpZ2luYWwiIG1zZ2lkPSIxODgxMDIwMjMwMjE2Njg2ODMiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+INin2LIg2KfYqNiq2K/YpyDYsdin2YfigIzYp9mG2K/Yp9iy24wg2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2NhbGUiIG1zZ2lkPSIzMjAyOTU1NjY3Njc1OTQ0NDk5Ij4i2YXZgtuM2KfYsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zaG93IiBtc2dpZD0iNDAxMzg3ODg3NjQ4NjY1NTg5MiI+ItmH2YXbjNi02Ycg2YbYtNin2YYg2K/Yp9iv2Ycg2LTZiNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX2hpbnQiIG1zZ2lkPSIxMDY0NTI0MDg0NTQzMzA0NDU5Ij4i2K/YsSDYqtmG2LjbjNmF2KfYqiDYs9uM2LPYqtmFICZndDvYqNix2YbYp9mF2YfigI7Zh9inICZndDsg2YXZiNix2K8g2K/Yp9mG2YTZiNivINi02K/ZhyDYotmGINix2Kcg2K/ZiNio2KfYsdmHINmB2LnYp9mEINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtdl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjMzMDcyMDkxOTIxNTU0NDI4MjkiPiLYqNix2YbYp9mF2YcgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiAo2b7Ysdiv2KfYsti0IDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMiRzPC94bGlmZjpnPikg2K7YtyDZhdi024wgU3RyaWN0TW9kZSDYp9is2LHYp9uM24wg2K7ZiNivINix2Kcg2YbZgti2INqp2LHYr9mHINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiLZgdix2KLbjNmG2K8gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+INiu2Lcg2YXYtNuMIFN0cmljdE1vZGUg2KfYrNix2KfbjCDYrtmI2K/aqdin2LEg2K7ZiNivINix2Kcg2YbZgti2INqp2LHYr9mHINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfaGludCIgbXNnaWQ9IjEwNjQ1MjQwODQ1NDMzMDQ0NTkiPiLigI/Yr9ixINiq2YbYuNuM2YXYp9iqINiz24zYs9iq2YUgJmd0O9io2LHZhtin2YXZh+KAjtmH2KcgJmd0OyDZhdmI2LHYryDYr9in2YbZhNmI2K8g2LTYr9mHINii2YYg2LHYpyDYr9mI2KjYp9ix2Ycg2YHYudin2YQg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IuKAj9io2LHZhtin2YXZhyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+ICjZvtix2K/Yp9iy2LQgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSDYrti3INmF2LTbjCBTdHJpY3RNb2RlINin2KzYsdin24zbjCDYrtmI2K8g2LHYpyDZhtmC2LYg2qnYsdiv2Ycg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtdl9wcm9jZXNzIiBtc2dpZD0iNTEyMDM5NzAxMjA0NzQ2MjQ0NiI+IuKAj9mB2LHYotuM2YbYryA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g2K7YtyDZhdi024wgU3RyaWN0TW9kZSDYp9is2LHYp9uMINiu2YjYr9qp2KfYsSDYrtmI2K8g2LHYpyDZhtmC2LYg2qnYsdiv2Ycg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3RpdGxlIiBtc2dpZD0iMTU4NDE5MjI4NTQ0MTQwNTc0NiI+IuKAj0FuZHJvaWQg2K/YsSDYrdin2YQg2KfYsdiq2YLYpyDYp9iz2KouLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19hcGsiIG1zZ2lkPSI3OTA0MDQyNjgyMTExNTI2MTY5Ij4i2K/YsSDYrdin2YQg2KjZh9uM2YbZh+KAjNiz2KfYstuMINio2LHZhtin2YXZh9mUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3N0YXJ0aW5nX2FwcHMiIG1zZ2lkPSI0NTE0NjQ1MTYzNDY5MjY3MTMiPiLYr9ixINit2KfZhCDYoti62KfYsiDYqNix2YbYp9mF2YfigIzZh9inLiI8L3N0cmluZz4KQEAgLTExNzQsMjMgKzExODMsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3BpY2tlcl90aXRsZSIgbXNnaWQ9IjM1MTUxNDM5MzkxNzUxMTkwOTQiPiLYotmH2Ybar+KAjNmH2KfbjCDYstmG2q8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV91bmtub3duIiBtc2dpZD0iNTQ3NzkxOTk4ODcwMTc4NDc4OCI+Itii2YfZhtqvINiy2YbaryDZhtin2LTZhtin2LMiPC9zdHJpbmc+CiAgIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjY1NDEyMzk4NzQxODE2ODY5MyI+Iti02KjaqdmHIFdpLUZpINmF2YjYrNmI2K8g2KfYs9iqIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MTkyNDI0NDg5MTY4Mzk3Mzg2Ij4i2LTYqNqp2YfigIzZh9in24wgV2ktRmkg2YXZiNis2YjYryDZh9iz2KrZhtivIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjY1NDEyMzk4NzQxODE2ODY5MyI+IuKAj9i02KjaqdmHIFdpLUZpINmF2YjYrNmI2K8g2KfYs9iqIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MTkyNDI0NDg5MTY4Mzk3Mzg2Ij4i4oCP2LTYqNqp2YfigIzZh9in24wgV2ktRmkg2YXZiNis2YjYryDZh9iz2KrZhtivIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICA8cGx1cmFscyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9kZXRhaWxlZCI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjE2MzQxMDE0NTAzNDMyNzczNDUiPiLYtNio2qnZhyBXaS1GaSDZhdmI2KzZiNivINix2Kcg2KjYp9iyINqp2YbbjNivIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3OTE1ODk1MzIzNjQ0MjkyNzY4Ij4i2LTYqNqp2YfigIzZh9in24wgV2ktRmkg2YXZiNis2YjYryDYsdinINio2KfYsiDaqdmG24zYryI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjE2MzQxMDE0NTAzNDMyNzczNDUiPiLigI/YtNio2qnZhyBXaS1GaSDZhdmI2KzZiNivINix2Kcg2KjYp9iyINqp2YbbjNivIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3OTE1ODk1MzIzNjQ0MjkyNzY4Ij4i4oCP2LTYqNqp2YfigIzZh9in24wgV2ktRmkg2YXZiNis2YjYryDYsdinINio2KfYsiDaqdmG24zYryI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4i2YjYsdmI2K8g2KjZhyDYtNio2qnZhyBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4i4oCP2YjYsdmI2K8g2KjZhyDYtNio2qnZhyBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4i2YjYsdmI2K8g2KjZhyDYtNio2qnZhyI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luX2RldGFpbGVkICg4MDAwMDgxOTQxNDQ3OTc2MTE4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkIiBtc2dpZD0iNzkwNDIxNDIzMTY1MTU0NjM0NyI+Itin2KrYtdin2YQg2KjZhyBXaS1GaSDZhdmF2qnZhiDZhtuM2LPYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZCIgbXNnaWQ9Ijc5MDQyMTQyMzE2NTE1NDYzNDciPiLigI/Yp9iq2LXYp9mEINio2YcgV2ktRmkg2YXZhdqp2YYg2YbbjNiz2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3dhdGNoZG9nX25ldHdvcmtfZGlzYWJsZWRfZGV0YWlsZWQiIG1zZ2lkPSI1NTQ4NzgwNzc2NDE4MzMyNjc1Ij4iINin2KrYtdin2YQg2KfbjNmG2KrYsdmG2KrbjCDYtti524zZgduMINiv2KfYsdivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijk3NjExNzgyNjU5MzI0NTE3Ij4iV2ktRmkgRGlyZWN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4iV2ktRmkgRGlyZWN0INix2Kcg2LTYsdmI2Lkg2qnZhtuM2K8uINin24zZhiDaqdin2LEg2YbZgti32Ycg2KfYqti12KfZhC/Ys9ix2YjbjNizINqv24zYsdmG2K/ZhyBXaS1GaSDYsdinINi624zYsdmB2LnYp9mEINiu2YjYp9mH2K8g2qnYsdivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZhaWxlZF9tZXNzYWdlIiBtc2dpZD0iMzc2MzY2OTY3NzkzNTYyMzA4NCI+IldpLUZpIERpcmVjdCDYtNix2YjYuSDZhti02K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMDY4MzIxODgxNjczNzM0ODg2Ij4iV2ktRmkgRGlyZWN0INix2YjYtNmGINin2LPYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3R1cm5vbl9tZXNzYWdlIiBtc2dpZD0iMjkwOTI1MDk0MjI5OTYyNzI0NCI+IuKAj1dpLUZpIERpcmVjdCDYsdinINi02LHZiNi5INqp2YbbjNivLiDYp9uM2YYg2qnYp9ixINmG2YLYt9mHINin2KrYtdin2YQv2LPYsdmI24zYsyDar9uM2LHZhtiv2YcgV2ktRmkg2LHYpyDYutuM2LHZgdi52KfZhCDYrtmI2KfZh9ivINqp2LHYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mYWlsZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NjM2Njk2Nzc5MzU2MjMwODQiPiLigI9XaS1GaSBEaXJlY3Qg2LTYsdmI2Lkg2YbYtNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjA2ODMyMTg4MTY3MzczNDg4NiI+IuKAj1dpLUZpIERpcmVjdCDYsdmI2LTZhiDYp9iz2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTYzODk0OTk1Mzk5Mzg5NDMzNSI+ItmE2YXYsyDaqdix2K/ZhiDYqNix2KfbjCDYqtmG2LjbjNmF2KfYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiLZvtiw24zYsdi0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVjbGluZSIgbXNnaWQ9IjIxMTIyMjU0NTE3MDYxMzc4OTQiPiLYudiv2YUg2b7YsNuM2LHYtCI8L3N0cmluZz4KQEAgLTEyMDAsMjAgKzEyMDksMjAgQEAKICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3RvX21lc3NhZ2UiIG1zZ2lkPSIyNDg5Njg5NzQ1MjIwNDQwOTkiPiLYqNmHOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VudGVyX3Bpbl9tZXNzYWdlIiBtc2dpZD0iNTkyMDkyOTU1MDM2NzgyODk3MCI+Itm+24zZhiDZhNin2LLZhSDYsdinINiq2KfbjNm+INqp2YbbjNivOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UiIG1zZ2lkPSI4NTMwNTYzMzIzODgwOTIxMDk0Ij4i2b7bjNmGOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDEyOTgxMjU3NzQyMjMyNDc1Ij4i2K/YsSDYrduM2YYg2KfYqti12KfZhCDYqNmHIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4g2KfYsdiq2KjYp9i3INin24zZhiDYsdin24zYp9mG2Ycg2YTZiNit24wg2KjYpyBXaS1GaSDZhdmI2YLYqtin2Ysg2YLYt9i5INiu2YjYp9mH2K8g2LTYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczNjM5MDcyMTM3ODc0NjkxNTEiPiLYp9uM2YYg2q/ZiNi024wg2KjZh+KAjNi32YjYsSDZhdmI2YLYqiDYp9iyIFdpLUZpINmC2LfYuSDYrtmI2KfZh9ivINi02K/YjCDYr9ixINit2KfZhNuMINqp2Ycg2KjZhyA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+INmI2LXZhCDYp9iz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODAxMjk4MTI1Nzc0MjIzMjQ3NSI+IuKAj9iv2LEg2K3bjNmGINin2KrYtdin2YQg2KjZhyA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+INin2LHYqtio2KfYtyDYp9uM2YYg2LHYp9uM2KfZhtmHINmE2YjYrduMINio2KcgV2ktRmkg2YXZiNmC2KrYp9mLINmC2LfYuSDYrtmI2KfZh9ivINi02K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4i4oCP2KfbjNmGINqv2YjYtNuMINio2YfigIzYt9mI2LEg2YXZiNmC2Kog2KfYsiBXaS1GaSDZgti32Lkg2K7ZiNin2YfYryDYtNiv2Iwg2K/YsSDYrdin2YTbjCDaqdmHINio2YcgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDZiNi12YQg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiLYr9ix2Kwg2YbZiNuM2LPZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+Itin2LHYs9in2YQg2b7bjNin2YXaqSDZh9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDYr9ixINit2KfZhCDYp9ix2LPYp9mEINiq2LnYr9in2K8g2LLbjNin2K/bjCDZvtuM2KfZhdqpINin2LPYqi4g2KLbjNinINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfbjNivINin24zZhiDYqNix2YbYp9mF2Ycg2YfZhdqG2YbYp9mGINm+24zYp9mF2qkg2KfYsdiz2KfZhCDaqdmG2K/YnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4i4oCPJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsg2K/YsSDYrdin2YQg2KfYsdiz2KfZhCDYqti52K/Yp9ivINiy24zYp9iv24wg2b7bjNin2YXaqSDYp9iz2KouINii24zYpyDYp9is2KfYstmHINmF24zigIzYr9mH24zYryDYp9uM2YYg2KjYsdmG2KfZhdmHINmH2YXahtmG2KfZhiDZvtuM2KfZhdqpINin2LHYs9in2YQg2qnZhtiv2J8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF95ZXMiIG1zZ2lkPSIzNjYzNzI1OTkzODU1ODE2ODA3Ij4i2KfYrNin2LLZhyDYr9in2K/ZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4i2LHYr9qp2LHYr9mGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9tZXNzYWdlIiBtc2dpZD0iMTY0NTQzNjQ2NjI4NTMxMDg1NSI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7INmF2KfbjNmEINin2LPYqiDZvtuM2KfZhduMINio2YcgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkRFU1RfQUREUkVTUyI+JTIkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7INin2LHYs9in2YQg2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiLigI8mbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDZhdin24zZhCDYp9iz2Kog2b7bjNin2YXbjCDYqNmHICZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJERVNUX0FERFJFU1MiPiUyJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDYp9ix2LPYp9mEINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iMzQ5MjAyNTcxOTg2ODA3ODQ1NyI+Itin24zZhiDaqdin2LEgIjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+ItmF24zigIzYqtmI2KfZhtivINmF2YbYrNixINio2Ycg2LTYp9ix2pgiPC9mb250PiIg2K3Ys9in2Kgg2KrZhNmB2YYg2YfZhdix2KfZhyDYtNmF2Kcg2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19wcmVtaXVtX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjU1MjM4MjYzNDkxMDUxMjM2ODciPjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+Itin24zZhiDaqdin2LEg2K3Ys9in2Kgg2KrZhNmB2YYg2YfZhdix2KfZhyDYtNmF2Kcg2LHYpyDYtNin2LHamCDYrtmI2KfZh9ivINqp2LHYry4iPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbGxvdyIgbXNnaWQ9IjQ0NTg4Nzg2MzcxMTEwMjM0MTMiPiLYp9ix2LPYp9mEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9kZW55IiBtc2dpZD0iMjkyNzM4OTg0MDIwOTE3MDcwNiI+ItmE2LrZiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX2Nob2ljZSIgbXNnaWQ9IjUyODk1Mzg1OTIyNzIyMTgxMzYiPiLYp9uM2YYg2KfZhtiq2K7Yp9ioINix2Kcg2KjZhyDYrtin2LfYsSDYqNiz2b7Yp9ixIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfdW5kb19pbnN0cnVjdGlvbiIgbXNnaWQ9IjQ5NjA5NDQxMzMwNTIyODc0ODQiPiLZhduM4oCM2KrZiNin2YbbjNivINio2LnYr9in2Ysg2KLZhiDYsdinINiv2LEg2KrZhti424zZhdin2KogJmd0OyDYqNix2YbYp9mF2YfigIzZh9inINiq2LrbjNuM2LEg2K/Zh9uM2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl91bmRvX2luc3RydWN0aW9uIiBtc2dpZD0iNDk2MDk0NDEzMzA1MjI4NzQ4NCI+IuKAj9mF24zigIzYqtmI2KfZhtuM2K8g2KjYudiv2KfZiyDYotmGINix2Kcg2K/YsSDYqtmG2LjbjNmF2KfYqiAmZ3Q7INio2LHZhtin2YXZh+KAjNmH2Kcg2KrYutuM24zYsSDYr9mH24zYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWx3YXlzX2FsbG93IiBtc2dpZD0iMzI0MTE4MTE1NDg2OTQ5MzM2OCI+ItmH2YXbjNi02Ycg2YXYrNin2LIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX25ldmVyX2FsbG93IiBtc2dpZD0iNDQ2OTkyNzY1Nzc0MjY5NjczIj4i2YfZhduM2LTZhyDYutuM2LHZhdis2KfYsiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX3RpdGxlIiBtc2dpZD0iNjIyNzcxMjMxOTIyMzIyNjE4NSI+Itiz24zZhSDaqdin2LHYqiDYqNix2K/Yp9i02KrZhyDYtNivIjwvc3RyaW5nPgpAQCAtMTIzMCwzOCArMTIzOSwzOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybXNfZGVzY3JpcHRpb25fYXBwIiBtc2dpZD0iNTEzOTgzNjE0MzI5MzI5OTQxNyI+Itin2LHYp9im2Ycg2LTYr9mHINiq2YjYs9i3IDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX3Blcm1pc3Npb25zIiBtc2dpZD0iNzI4MzM1NzcyODIxOTMzODExMiI+ItmF2KzZiNiy24wg2YTYp9iy2YUg2YbbjNiz2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtX2Nvc3RzX21vbmV5IiBtc2dpZD0iNDkwMjQ3MDMyNDE0MjE1MTExNiI+ItmF2YXaqdmGINin2LPYqiDYqNix2KfbjCDYtNmF2Kcg2YfYstuM2YbZhyDYr9in2LTYqtmHINio2KfYtNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4i2K3Yp9mB2LjZhyDYp9mG2KjZiNmHIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTkwMTQ1OTA0MTM5ODc1MTQ5NSI+IlVTQiDZhdiq2LXZhCDYtNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMzA4NTM4MDk0MzE2NDc3ODM5Ij4i2LTZhdinINin2LIg2LfYsduM2YIgVVNCINio2Ycg2LHYp9uM2KfZhtmH2ZQg2K7ZiNivINmF2KrYtdmEINi02K/Zh+KAjtin24zYry4g2Kfar9ixINmF24zigI7YrtmI2KfZh9uM2K8g2YHYp9uM2YTigI7Zh9inINix2Kcg2KjbjNmGINix2KfbjNin2YbZh9mUINiu2YjYryDZiCDYrdin2YHYuNmH2ZQgVVNCINiv2LEgQW5kcm9pZCDaqdm+24wg2qnZhtuM2K/YjCDYr9qp2YXZhyDYstuM2LEg2LHYpyDZhNmF2LMg2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNTM1MTAwMDQ0NjAzNzgxMSI+Iti02YXYpyDYp9iyINi32LHbjNmCIFVTQiDYqNmHINix2KfbjNin2YbZh9mUINiu2YjYryDZhdiq2LXZhCDYtNiv2YfigI7Yp9uM2K8uINin2q/YsSDZhduM4oCO2K7ZiNin2YfbjNivINmB2KfbjNmE4oCO2YfYpyDYsdinINio24zZhiDYsdin24zYp9mG2YfZlCDYrtmI2K8g2Ygg2qnYp9ix2KogU0Qg2K/YsSBBbmRyb2lkINqp2b7bjCDaqdmG24zYr9iMINiv2qnZhdmHINiy24zYsSDYsdinINmE2YXYsyDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9idXR0b25fbW91bnQiIG1zZ2lkPSIxMDUyMjU5OTMwMzY5NTA4MjM1Ij4i2LHZiNi02YYg2qnYsdiv2YYg2K/Ys9iq2q/Yp9mHINiw2K7bjNix2YfigIzYs9in2LLbjCBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiLZh9mG2q/Yp9mFINin2LPYqtmB2KfYr9mHINin2LIg2K3Yp9mB2LjZh9mUIFVTQiDYqNix2KfbjCDYrdin2YHYuNmHINin2YbYqNmI2YcgVVNCINmF2LTaqdmE24wg2KjZiNis2YjYryDYotmF2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4NzYwMTg1MTI3MTY5NzAzMTMiPiLZh9mG2q/Yp9mFINin2LPYqtmB2KfYr9mHINin2LIg2qnYp9ix2KogU0Qg2KjYsdin24wg2K3Yp9mB2LjZhyDYsNiu24zYsdmHINin2YbYqNmI2YcgVVNCINmF2LTaqdmE24wg2KjZiNis2YjYryDYotmF2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODE3NTg5MjU1NDc1NzIxNjUyNSI+IlVTQiDZhdiq2LXZhCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4i4oCP2K3Yp9mB2LjZhyDYp9mG2KjZiNmHIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTkwMTQ1OTA0MTM5ODc1MTQ5NSI+IuKAj1VTQiDZhdiq2LXZhCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzMzA4NTM4MDk0MzE2NDc3ODM5Ij4i4oCP2LTZhdinINin2LIg2LfYsduM2YIgVVNCINio2Ycg2LHYp9uM2KfZhtmH2ZQg2K7ZiNivINmF2KrYtdmEINi02K/Zh+KAjtin24zYry4g2Kfar9ixINmF24zigI7YrtmI2KfZh9uM2K8g2YHYp9uM2YTigI7Zh9inINix2Kcg2KjbjNmGINix2KfbjNin2YbZh9mUINiu2YjYryDZiCDYrdin2YHYuNmH2ZQgVVNCINiv2LEgQW5kcm9pZCDaqdm+24wg2qnZhtuM2K/YjCDYr9qp2YXZhyDYstuM2LEg2LHYpyDZhNmF2LMg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNTM1MTAwMDQ0NjAzNzgxMSI+IuKAj9i02YXYpyDYp9iyINi32LHbjNmCIFVTQiDYqNmHINix2KfbjNin2YbZh9mUINiu2YjYryDZhdiq2LXZhCDYtNiv2YfigI7Yp9uM2K8uINin2q/YsSDZhduM4oCO2K7ZiNin2YfbjNivINmB2KfbjNmE4oCO2YfYpyDYsdinINio24zZhiDYsdin24zYp9mG2YfZlCDYrtmI2K8g2Ygg2qnYp9ix2KogU0Qg2K/YsSBBbmRyb2lkINqp2b7bjCDaqdmG24zYr9iMINiv2qnZhdmHINiy24zYsSDYsdinINmE2YXYsyDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9idXR0b25fbW91bnQiIG1zZ2lkPSIxMDUyMjU5OTMwMzY5NTA4MjM1Ij4i4oCP2LHZiNi02YYg2qnYsdiv2YYg2K/Ys9iq2q/Yp9mHINiw2K7bjNix2YfigIzYs9in2LLbjCBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiLigI/Zh9mG2q/Yp9mFINin2LPYqtmB2KfYr9mHINin2LIg2K3Yp9mB2LjZh9mUIFVTQiDYqNix2KfbjCDYrdin2YHYuNmHINin2YbYqNmI2YcgVVNCINmF2LTaqdmE24wg2KjZiNis2YjYryDYotmF2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4NzYwMTg1MTI3MTY5NzAzMTMiPiLigI/Zh9mG2q/Yp9mFINin2LPYqtmB2KfYr9mHINin2LIg2qnYp9ix2KogU0Qg2KjYsdin24wg2K3Yp9mB2LjZhyDYsNiu24zYsdmHINin2YbYqNmI2YcgVVNCINmF2LTaqdmE24wg2KjZiNis2YjYryDYotmF2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODE3NTg5MjU1NDc1NzIxNjUyNSI+IuKAj1VTQiDZhdiq2LXZhCDYtNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5Mzk4MjI3ODM4MjgxODM3NjMiPiLYqNix2KfbjCDaqdm+24wg2qnYsdiv2YYg2YHYp9uM2YTigIzZh9inINin2LIv2KjZhyDYsdin24zYp9mG2YfZlCDYrtmI2K8g2YTZhdizINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjMzNjA1ODM5NjY2MzUxNjAxNyI+Itiu2KfZhdmI2LQg2qnYsdiv2YYg2K/Ys9iq2q/Yp9mHINiw2K7bjNix2YfigIzYs9in2LLbjCBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTY1Njg1MjA5ODU1NTYyMzgyMiI+Itio2LHYp9uMINi624zYsdmB2LnYp9mEINqp2LHYr9mGINit2KfZgdi42YfZlCBVU0LYjCDZhNmF2LMg2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF90aXRsZSIgbXNnaWQ9IjY2MDEyOTg1MTcwODc3NTg1MyI+Itiv2LPYqtqv2KfZhyDYsNiu24zYsdmH4oCM2LPYp9iy24wgVVNCINiv2LEg2K3Yp9mEINin2LPYqtmB2KfYr9mHINin2LPYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MjY0MDI1MjgwNzc3MjE5NTIxIj4i2YLYqNmEINin2LIg2LrbjNix2YHYudin2YQg2qnYsdiv2YYg2K3Yp9mB2LjZh9mUIFVTQtiMINit2KfZgdi42YfZlCBVU0Ig2YXYsdio2YjYtyDYqNmHIEFuZHJvaWQg2LHYpyDYr9ixINix2KfbjNin2YbZh9mUINiu2YjYryDZhNi62Ygg2YbYtdioINqp2YbbjNivIChcItiu2KfYsdisINqp2YbbjNivXCIpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNDM5Njk3ODI0NjA2MTMxMTQiPiLZgtio2YQg2KfYsiDYutuM2LHZgdi52KfZhCDaqdix2K/ZhiDYrdin2YHYuNmH2ZQgVVNC2Iwg2qnYp9ix2KogU0Qg2YXYsdio2YjYtyDYqNmHIEFuZHJvaWQg2LHYpyDYr9ixINix2KfbjNin2YbZhyDZhNi62Ygg2YbYtdioINqp2YbbjNivIChcItiu2KfYsdisINqp2YbbjNivXCIpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfYnV0dG9uX21vdW50IiBtc2dpZD0iNzA2MDIxODAzNDkwMDY5NjAyOSI+Itiu2KfZhdmI2LQg2qnYsdiv2YYg2K/Ys9iq2q/Yp9mHINiw2K7bjNix2YfigIzYs9in2LLbjCBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIxOTcwMzc0ODk4MjYzMDYzODM2Ij4i2YfZhtqv2KfZhSDYutuM2LHZgdi52KfZhCDaqdix2K/ZhiDYrdin2YHYuNmH2ZQgVVNCINmF2LTaqdmE24wg2KjZiNis2YjYryDYotmF2K8uINio2LHYsdiz24wg2qnZhtuM2K8g2YXbjNiy2KjYp9mGIFVTQiDYsdinINmE2LrZiCDZhti12Kgg2qnYsdiv2Ycg2KjYp9i024zYr9iMINiz2b7YsyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190aXRsZSIgbXNnaWQ9Ijk2MzAzOTAzMzQ3MDQ3ODY5NyI+Itix2YjYtNmGINqp2LHYr9mGINiv2LPYqtqv2KfZhyDYsNiu24zYsdmH4oCM2LPYp9iy24wgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RleHQiIG1zZ2lkPSI1MTAwNDI4NzU3MTA3NDY5NDU0Ij4i2K/YsSDYtdmI2LHYqiDZgdi52KfZhCDaqdix2K/ZhiDYrdin2YHYuNmH2ZQgVVNC2Iwg2KjYsdiu24wg2KfYsiDYqNix2YbYp9mF2YfigI7Zh9in24zbjCDaqdmHINin2LIg2KLZhuKAjNmH2Kcg2KfYs9iq2YHYp9iv2Ycg2YXbjOKAjtqp2YbbjNivINmF2KrZiNmC2YEg2YXbjOKAjti02YjZhtivINmIINiq2Kcg2LLZhdin2YbbjCDaqdmHINit2KfZgdi42YfZlCBVU0Ig2LHYpyDYutuM2LHZgdi52KfZhCDZhtqp2YbbjNivINin2YXaqdin2YYg2KfYs9iq2YHYp9iv2Ycg2KfYsiDYotmG4oCM2YfYpyDZiNis2YjYryDZhtiu2YjYp9mH2K8g2K/Yp9i02KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2Vycm9yX3RpdGxlIiBtc2dpZD0iNzMyMzY1ODQ2OTYyNjUxNDIwNyI+Itix2KfZh+KAjNin2YbYr9in2LLbjCBVU0Ig2YbYp9mF2YjZgdmCINio2YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzMzYwNTgzOTY2NjM1MTYwMTciPiLigI/Yrtin2YXZiNi0INqp2LHYr9mGINiv2LPYqtqv2KfZhyDYsNiu24zYsdmH4oCM2LPYp9iy24wgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2NTY4NTIwOTg1NTU2MjM4MjIiPiLigI/YqNix2KfbjCDYutuM2LHZgdi52KfZhCDaqdix2K/ZhiDYrdin2YHYuNmH2ZQgVVNC2Iwg2YTZhdizINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiLigI/Yr9iz2Krar9in2Ycg2LDYrtuM2LHZh+KAjNiz2KfYstuMIFVTQiDYr9ixINit2KfZhCDYp9iz2KrZgdin2K/ZhyDYp9iz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+IuKAj9mC2KjZhCDYp9iyINi624zYsdmB2LnYp9mEINqp2LHYr9mGINit2KfZgdi42YfZlCBVU0LYjCDYrdin2YHYuNmH2ZQgVVNCINmF2LHYqNmI2Lcg2KjZhyBBbmRyb2lkINix2Kcg2K/YsSDYsdin24zYp9mG2YfZlCDYrtmI2K8g2YTYutmIINmG2LXYqCDaqdmG24zYryAoXCLYrtin2LHYrCDaqdmG24zYr1wiKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQzOTY5NzgyNDYwNjEzMTE0Ij4i4oCP2YLYqNmEINin2LIg2LrbjNix2YHYudin2YQg2qnYsdiv2YYg2K3Yp9mB2LjZh9mUIFVTQtiMINqp2KfYsdiqIFNEINmF2LHYqNmI2Lcg2KjZhyBBbmRyb2lkINix2Kcg2K/YsSDYsdin24zYp9mG2Ycg2YTYutmIINmG2LXYqCDaqdmG24zYryAoXCLYrtin2LHYrCDaqdmG24zYr1wiKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiLigI/Yrtin2YXZiNi0INqp2LHYr9mGINiv2LPYqtqv2KfZhyDYsNiu24zYsdmH4oCM2LPYp9iy24wgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMTk3MDM3NDg5ODI2MzA2MzgzNiI+IuKAj9mH2Ybar9in2YUg2LrbjNix2YHYudin2YQg2qnYsdiv2YYg2K3Yp9mB2LjZh9mUIFVTQiDZhdi02qnZhNuMINio2YjYrNmI2K8g2KLZhdivLiDYqNix2LHYs9uMINqp2YbbjNivINmF24zYstio2KfZhiBVU0Ig2LHYpyDZhNi62Ygg2YbYtdioINqp2LHYr9mHINio2KfYtNuM2K/YjCDYs9m+2LMg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiLigI/YsdmI2LTZhiDaqdix2K/ZhiDYr9iz2Krar9in2Ycg2LDYrtuM2LHZh+KAjNiz2KfYstuMIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+IuKAj9iv2LEg2LXZiNix2Kog2YHYudin2YQg2qnYsdiv2YYg2K3Yp9mB2LjZh9mUIFVTQtiMINio2LHYrtuMINin2LIg2KjYsdmG2KfZhdmH4oCO2YfYp9uM24wg2qnZhyDYp9iyINii2YbigIzZh9inINin2LPYqtmB2KfYr9mHINmF24zigI7aqdmG24zYryDZhdiq2YjZgtmBINmF24zigI7YtNmI2YbYryDZiCDYqtinINiy2YXYp9mG24wg2qnZhyDYrdin2YHYuNmH2ZQgVVNCINix2Kcg2LrbjNix2YHYudin2YQg2YbaqdmG24zYryDYp9mF2qnYp9mGINin2LPYqtmB2KfYr9mHINin2LIg2KLZhuKAjNmH2Kcg2YjYrNmI2K8g2YbYrtmI2KfZh9ivINiv2KfYtNiqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19lcnJvcl90aXRsZSIgbXNnaWQ9IjczMjM2NTg0Njk2MjY1MTQyMDciPiLigI/Ysdin2YfigIzYp9mG2K/Yp9iy24wgVVNCINmG2KfZhdmI2YHZgiDYqNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGxnX29rIiBtc2dpZD0iNzM3Njk1MzE2NzAzOTg2NTcwMSI+Itiq2KPbjNuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiLZhdiq2LXZhCDYtNiv2Ycg2KjZh+KAjNi52YbZiNin2YYg2K/Ys9iq2q/Yp9mHINix2LPYp9mG2YfigIzYp9uMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX3B0cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxOTYwODE3MTkyMjE2MDY0ODMzIj4i2YXYqti12YQg2LTYr9mHINio2YfigIzYudmG2YjYp9mGINiv2YjYsdio24zZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9jZF9pbnN0YWxsZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjc3NDcxMjgyNzg5MjA5MDc1NCI+ItmF2KrYtdmEINi02K/ZhyDYqNmH4oCM2LnZhtmI2KfZhiDZhti12Kgg2qnZhtmG2K/ZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3Nvcnlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNzg0ODIzNjk3NDA4NzY1MzY2NiI+Itio2Ycg24zaqSDZiNiz24zZhNmHINis2KfZhtio24wgVVNCINmI2LXZhCDYtNiv2Ycg2KfYs9iqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+Itio2LHYp9uMINiz2KfbjNixINqv2LLbjNmG2YfigIzZh9in24wgVVNCINmE2YXYsyDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iOTAyMDA5MjE5NjA2MTAwNzI2MiI+Itit2KfZgdi42YfZlCBVU0Ig2YHYsdmF2Kog2LTZiNiv2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjQ4NDE1OTIxNTI2NTI2MDY5Ij4i2qnYp9ix2KogU0Qg2YHYsdmF2Kog2LTZiNiv2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTM0MDE2ODUzNDI1NzYxMDc4Ij4i2YfZhdmHINmB2KfbjNmE4oCM2YfYp9uMINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2K3Yp9mB2LjZh9mUIFVTQiDZvtin2qkg2K7ZiNin2YfYryDYtNivLiDYp9uM2YYg2LnZhdmEINix2Kcg2YbZhduM4oCO2KrZiNin2YYg2KjYsdqv2LHYr9in2YbYryEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4i2KrZhdin2YUg2KfYt9mE2KfYudin2Kog2LHZiNuMINqp2KfYsdiqINi02YXYpyDYp9iyINio24zZhiDZhduM4oCO2LHZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3Nvcnlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNzg0ODIzNjk3NDA4NzY1MzY2NiI+IuKAj9io2Ycg24zaqSDZiNiz24zZhNmHINis2KfZhtio24wgVVNCINmI2LXZhCDYtNiv2Ycg2KfYs9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+IuKAj9io2LHYp9uMINiz2KfbjNixINqv2LLbjNmG2YfigIzZh9in24wgVVNCINmE2YXYsyDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iOTAyMDA5MjE5NjA2MTAwNzI2MiI+IuKAj9it2KfZgdi42YfZlCBVU0Ig2YHYsdmF2Kog2LTZiNiv2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjQ4NDE1OTIxNTI2NTI2MDY5Ij4i4oCP2qnYp9ix2KogU0Qg2YHYsdmF2Kog2LTZiNiv2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTM0MDE2ODUzNDI1NzYxMDc4Ij4i4oCP2YfZhdmHINmB2KfbjNmE4oCM2YfYp9uMINiw2K7bjNix2Ycg2LTYr9mHINiv2LEg2K3Yp9mB2LjZh9mUIFVTQiDZvtin2qkg2K7ZiNin2YfYryDYtNivLiDYp9uM2YYg2LnZhdmEINix2Kcg2YbZhduM4oCO2KrZiNin2YYg2KjYsdqv2LHYr9in2YbYryEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4i4oCP2KrZhdin2YUg2KfYt9mE2KfYudin2Kog2LHZiNuMINqp2KfYsdiqINi02YXYpyDYp9iyINio24zZhiDZhduM4oCO2LHZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9idXR0b25fZm9ybWF0IiBtc2dpZD0iNDEzMTA2NDU2MDEyNzQ3ODY5NSI+ItmC2KfZhNioIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NzI5MDQ0Nzc4OTQ5MTg5OTE4Ij4i2KfYqti12KfZhCDYsdmB2Lkg2LnbjNioIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxMDE2NjU0NjI3NjI2NDc2MTQyIj4i2KjYsdin24wg2LrbjNix2YHYudin2YQg2qnYsdiv2YYg2KfYtNqp2KfZhCDYstiv2KfbjNuMIFVTQiDZhNmF2LMg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NzI5MDQ0Nzc4OTQ5MTg5OTE4Ij4i4oCP2KfYqti12KfZhCDYsdmB2Lkg2LnbjNioIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxMDE2NjU0NjI3NjI2NDc2MTQyIj4i4oCP2KjYsdin24wg2LrbjNix2YHYudin2YQg2qnYsdiv2YYg2KfYtNqp2KfZhCDYstiv2KfbjNuMIFVTQiDZhNmF2LMg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2lucHV0X21ldGhvZCIgbXNnaWQ9IjQ2NTMzODczMzY3OTEyMjI5NzgiPiLYp9mG2KrYrtin2Kgg2LHZiNi0INmI2LHZiNiv24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjkwOTE2NTIxNTc3MjI0OTUxMTYiPiLYqtmG2LjbjNmFINix2YjYtOKAjNmH2KfbjCDZiNix2YjYr9uMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNjIwMzExMjQ3ODA5NTExNzYyNSI+Iti12YHYrdmH4oCM2qnZhNuM2K8g2YHbjNiy24zaqduMIjwvc3RyaW5nPgpAQCAtMTI3MSwzNCArMTI4MCwzNCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfYWxwaGFiZXQiIG1zZ2lkPSI1NDMzMjc1NDg1NDk5MDM5MTk5Ij4iIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfbnVtZXJpY19hbHBoYWJldCIgbXNnaWQ9IjQwMzAxNzA1MjQ1OTUxMjM2MTAiPiIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuZGlkYXRlc19zdHlsZSIgbXNnaWQ9IjQzMzM5MTMwODk2MzcwNjIyNTciPjx1PiLYr9in2YjYt9mE2KjbjNmGIjwvdT48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0OTgxNjAwNTM1MTQ2ODU2MCI+Itii2YXYp9iv2Ycg2LPYp9iy24wg2K3Yp9mB2LjZh9mUIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDU3NjAzNDE4OTcwOTk0MDUwIj4i2KLZhdin2K/ZhyDaqdix2K/ZhiDaqdin2LHYqiBTRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0OTgxNjAwNTM1MTQ2ODU2MCI+IuKAj9ii2YXYp9iv2Ycg2LPYp9iy24wg2K3Yp9mB2LjZh9mUIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDU3NjAzNDE4OTcwOTk0MDUwIj4i4oCP2KLZhdin2K/ZhyDaqdix2K/ZhiDaqdin2LHYqiBTRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgyODczMTk4ODI5MjY3MzcwNTMiPiLYqNix2LHYs9uMINiu2LfYp9mH2KcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiLYrdin2YHYuNmH2ZQgVVNCINiu2KfZhNuMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzgwNDc3ODM4MjQxMjEyOTk3Ij4i2qnYp9ix2KogU0Qg2K7Yp9mE24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4i2K3Yp9mB2LjZh9mUIFVTQiDYrtin2YTbjCDYp9iz2Kog24zYpyDYr9in2LHYp9uMINiz24zYs9iq2YUg2YHYp9uM2YQg2b7YtNiq24zYqNin2YbbjCDZhti02K/ZhyDYp9iz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjQxMDY1NjQxNzg2OTIzNjA0Ij4i2qnYp9ix2KogU0Qg2K7Yp9mE24wg2KfYs9iqINuM2Kcg2K/Yp9ix2KfbjCDYs9uM2LPYqtmFINmB2KfbjNmEINm+2LTYqtuM2KjYp9mG24wg2YbYtNiv2Ycg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjA5MDA0Njc2OTUzMjcxMzU2MyI+Itit2KfZgdi42YfZlCBVU0Ig2K7Ysdin2Kgg2LTYr9mHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY0MTA3MjM5MDYwMTkxMDAxODkiPiLaqdin2LHYqiBTRCDYotiz24zYqCDYr9uM2K/ZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNzk1OTE3NTc4Mzk1MzMzMjgwIj4i2K3Yp9mB2LjZh9mUIFVTQiDYrtix2KfYqCDYp9iz2KouINiz2LnbjCDaqdmG24zYryDYotmG2LHYpyDYr9mI2KjYp9ix2Ycg2YHYsdmF2Kog2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTc1Mzg5ODU2NzUyNTU2ODI1MyI+Itqp2KfYsdiqIFNEINiu2LHYp9ioINin2LPYqi4g2LPYuduMINqp2YbbjNivINii2YbYsdinINiv2YjYqNin2LHZhyDZgdix2YXYqiDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTY2MTY4MzAzMTMzMDk1MTA3MyI+Itit2KfZgdi42YfZlCBVU0Ig2KjZhyDYtdmI2LHYqiDYutuM2LHZhdmG2KrYuNix2Ycg2KzYr9inINi02K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODcyMTUyODgyNjA0NDA3ODM3Ij4i2qnYp9ix2KogU0Qg2KjZhyDYtdmI2LHYqiDYutuM2LHZhdmG2KrYuNix2YfigIzYp9uMINis2K/YpyDYtNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDMyOTg0ODgxOTg2NTU5NDI0MSI+Itin2KrYtdin2YQg2K3Yp9mB2LjZh9mUIFVTQiDYsdinINmC2KjZhCDYp9iyINio24zYsdmI2YYg2KLZiNix2K/ZhiDZgti32Lkg2qnZhtuM2K8g2KrYpyDYs9io2Kgg2KfYsiDYqNuM2YYg2LHZgdiq2YYg2K/Yp9iv2YfigIzZh9inINmG2LTZiNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+Itqp2KfYsdiqIFNEINix2Kcg2YLYqNmEINin2LIg2KjbjNix2YjZhiDYotmI2LHYr9mGINis2K/YpyDaqdmG24zYryDYqtinINiz2KjYqCDYp9iyINio24zZhiDYsdmB2KrZhiDYr9in2K/Zh+KAjNmH2Kcg2YbYtNmI2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzk2Nzk3Mzg5MzI3MDM2MDIzMCI+Itit2KfZgdi42YfZlCBVU0Ig2LHYpyDZhduM4oCM2KrZiNin2YbbjNivINio2Kcg2KfbjNmF2YbbjCDYrNiv2Kcg2qnZhtuM2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY3Mjk4MDExMzA3OTA2MTYyMDAiPiLaqdin2LHYqiBTRCDYsdinINmF24zigIzYqtmI2KfZhiDYqNinINin2YXZhtuM2Kog2qnYp9mF2YQg2KzYr9inINqp2LHYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE0MjE5NTM2MTYwNjQ5MzUzMCI+Iti02YXYpyDZhduM4oCM2KrZiNin2YbbjNivINit2KfZgdi42YfZlCBVU0Ig2LHYpyDYqNinINin2LfZhduM2YbYp9mGINis2K/YpyDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTY4ODQxMjc4MTM4Mzc3NjA0Ij4i2qnYp9ix2KogU0Qg2LHYpyDZhduM4oCM2KrZiNin2YbbjNivINio2Kcg2KfZhdmG24zYqiDaqdin2YXZhCDYrtin2LHYrCDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDQ4NjM3NzIzMDE0MDIyNzY1MSI+Itis2K/YpyDaqdix2K/ZhiDYrdin2YHYuNmH2ZQgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkwMjUxODAzMDQwNDM4MTMxOCI+Itqp2KfYsdiqIFNEINit2LDZgSDYtNiv2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4i2K3Yp9mB2LjZh9mUIFVTQiDYrNiv2Kcg2LTYry4g24zaqSDYsdiz2KfZhtmHINis2K/bjNivINmF2KrYtdmEINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzg3MDEyMDY1Mjk4MzY1OTY0MSI+Itqp2KfYsdiqIFNEINis2K/YpyDYtNivLiDbjNqpINqp2KfYsdiqINis2K/bjNivINmI2KfYsdivINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3Nzg4MDQwNzQ1Njg2MjI5MzA3Ij4i4oCP2K3Yp9mB2LjZh9mUIFVTQiDYrtin2YTbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IuKAj9qp2KfYsdiqIFNEINiu2KfZhNuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzg0MDEyMTA2NzQyNzI2OTUwMCI+IuKAj9it2KfZgdi42YfZlCBVU0Ig2K7Yp9mE24wg2KfYs9iqINuM2Kcg2K/Yp9ix2KfbjCDYs9uM2LPYqtmFINmB2KfbjNmEINm+2LTYqtuM2KjYp9mG24wg2YbYtNiv2Ycg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODY0MTA2NTY0MTc4NjkyMzYwNCI+IuKAj9qp2KfYsdiqIFNEINiu2KfZhNuMINin2LPYqiDbjNinINiv2KfYsdin24wg2LPbjNiz2KrZhSDZgdin24zZhCDZvti02KrbjNio2KfZhtuMINmG2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjIwOTAwNDY3Njk1MzI3MTM1NjMiPiLigI/Yrdin2YHYuNmH2ZQgVVNCINiu2LHYp9ioINi02K/ZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDEwNzIzOTA2MDE5MTAwMTg5Ij4i4oCP2qnYp9ix2KogU0Qg2KLYs9uM2Kgg2K/bjNiv2YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTc5NTkxNzU3ODM5NTMzMzI4MCI+IuKAj9it2KfZgdi42YfZlCBVU0Ig2K7Ysdin2Kgg2KfYs9iqLiDYs9i524wg2qnZhtuM2K8g2KLZhtix2Kcg2K/ZiNio2KfYsdmHINmB2LHZhdiqINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE3NTM4OTg1Njc1MjU1NjgyNTMiPiLigI/aqdin2LHYqiBTRCDYrtix2KfYqCDYp9iz2KouINiz2LnbjCDaqdmG24zYryDYotmG2LHYpyDYr9mI2KjYp9ix2Ycg2YHYsdmF2Kog2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE2NjE2ODMwMzEzMzA5NTEwNzMiPiLigI/Yrdin2YHYuNmH2ZQgVVNCINio2Ycg2LXZiNix2Kog2LrbjNix2YXZhtiq2LjYsdmHINis2K/YpyDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+IuKAj9qp2KfYsdiqIFNEINio2Ycg2LXZiNix2Kog2LrbjNix2YXZhtiq2LjYsdmH4oCM2KfbjCDYrNiv2Kcg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiLigI/Yp9iq2LXYp9mEINit2KfZgdi42YfZlCBVU0Ig2LHYpyDZgtio2YQg2KfYsiDYqNuM2LHZiNmGINii2YjYsdiv2YYg2YLYt9i5INqp2YbbjNivINiq2Kcg2LPYqNioINin2LIg2KjbjNmGINix2YHYqtmGINiv2KfYr9mH4oCM2YfYpyDZhti02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjAxODMyOTM3NDc0NDgyNDEiPiLigI/aqdin2LHYqiBTRCDYsdinINmC2KjZhCDYp9iyINio24zYsdmI2YYg2KLZiNix2K/ZhiDYrNiv2Kcg2qnZhtuM2K8g2KrYpyDYs9io2Kgg2KfYsiDYqNuM2YYg2LHZgdiq2YYg2K/Yp9iv2YfigIzZh9inINmG2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5Njc5NzM4OTMyNzAzNjAyMzAiPiLigI/Yrdin2YHYuNmH2ZQgVVNCINix2Kcg2YXbjOKAjNiq2YjYp9mG24zYryDYqNinINin24zZhdmG24wg2KzYr9inINqp2YbbjNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4i4oCP2qnYp9ix2KogU0Qg2LHYpyDZhduM4oCM2KrZiNin2YYg2KjYpyDYp9mF2YbbjNiqINqp2KfZhdmEINis2K/YpyDaqdix2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNDIxOTUzNjE2MDY0OTM1MzAiPiLigI/YtNmF2Kcg2YXbjOKAjNiq2YjYp9mG24zYryDYrdin2YHYuNmH2ZQgVVNCINix2Kcg2KjYpyDYp9i32YXbjNmG2KfZhiDYrNiv2Kcg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2ODg0MTI3ODEzODM3NzYwNCI+IuKAj9qp2KfYsdiqIFNEINix2Kcg2YXbjOKAjNiq2YjYp9mG24zYryDYqNinINin2YXZhtuM2Kog2qnYp9mF2YQg2K7Yp9ix2Kwg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ0ODYzNzcyMzAxNDAyMjc2NTEiPiLigI/YrNiv2Kcg2qnYsdiv2YYg2K3Yp9mB2LjZh9mUIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MDI1MTgwMzA0MDQzODEzMTgiPiLigI/aqdin2LHYqiBTRCDYrdiw2YEg2LTYr9mHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjkyMTEyNjE2MjU4MDU3NDE0MyI+IuKAj9it2KfZgdi42YfZlCBVU0Ig2KzYr9inINi02K8uINuM2qkg2LHYs9in2YbZhyDYrNiv24zYryDZhdiq2LXZhCDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiLigI/aqdin2LHYqiBTRCDYrNiv2Kcg2LTYry4g24zaqSDaqdin2LHYqiDYrNiv24zYryDZiNin2LHYryDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9saXN0X2VtcHR5IiBtc2dpZD0iMTY3NTM4ODMzMDc4Njg0MTA2NiI+ItmB2LnYp9mE24zYqtuMINmF2LfYp9io2YIg2KjYpyDYp9uM2YYg2YXZiNix2K8g24zYp9mB2Kog2YbYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9Ijg3ODczNTIwNzQzMjY3NDg4OTIiPiLYqNmH4oCM2LHZiNiy2LHYs9in2YbbjCDYotmF2KfYsSDZhdix2KjZiNi3INio2Ycg2KfYs9iq2YHYp9iv2Ycg2YXYpNmE2YHZhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSIxMTA2NjEyNDI0MjU0Mjc3NjMwIj4i2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINii2YXYp9ixINis2YXYueKAjtii2YjYsduMINi02K/ZhyDaqdin2LHYqNix2K8g2YLYt9i52Ycg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSIxMTA2NjEyNDI0MjU0Mjc3NjMwIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINii2YXYp9ixINis2YXYueKAjtii2YjYsduMINi02K/ZhyDaqdin2LHYqNix2K8g2YLYt9i52Ycg2LHYpyDYqti624zbjNixINiv2YfYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzQxMDM2MzExMjExNDA2NjkyIj4i2qnZvtuMINqp2LHYr9mGINmF2K3YqtmI2KciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzOTA2OTcxMjQyODgzMTc4MzEiPiLYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmF24zigI7Yr9mH2K8g2KrYpyDYs9ix2YjbjNizINm+24zYtOKAjNmB2LHYtiDYsdinINmB2LHYp9iu2YjYp9mG24wg2qnZhtivINmIINmF2K3YqtmI2Kcg2LHYpyDaqdm+24wg2qnZhtivLiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYqNix2YbYp9mF2YfigI7Zh9in24wg2LnYp9iv24wg2YXZiNix2K8g2YbbjNin2LIg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzkwNjk3MTI0Mjg4MzE3ODMxIj4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2LPYsdmI24zYsyDZvtuM2LTigIzZgdix2LYg2LHYpyDZgdix2KfYrtmI2KfZhtuMINqp2YbYryDZiCDZhdit2KrZiNinINix2Kcg2qnZvtuMINqp2YbYry4g2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KjYsdmG2KfZhdmH4oCO2YfYp9uMINi52KfYr9uMINmF2YjYsdivINmG24zYp9iyINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iMTY0MjAyNDQ1NTc1MDQxNDY5NCI+Itiq2LnbjNuM2YYg2YXYs9uM2LEg2K7YsdmI2KzbjCDYsdiz2KfZhtmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iNDkzMjgxODc0OTU0NzI0NDM0NiI+Itio2Ycg24zaqSDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINiu2LHZiNis24wg2LHYs9in2YbZhyDYsdinINio2Ycg2K/Ys9iq2q/Yp9mH4oCM2YfYp9uMINiu2KfYsdis24wg2K/bjNqv2LEg2KrYuduM24zZhiDZhdiz24zYsSDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI3NTY1NTUyMjM3OTc3ODE1MDQ3Ij4i2K/Ys9iq2LHYs9uMINio2Ycg2YHYttin24wg2LDYrtuM2LHZh+KAjNiz2KfYstuMINin24zZhdmGINmF2K3Yp9mB2Lgg2qnZhNuM2K8iPC9zdHJpbmc+CkBAIC0xMzI5LDEzICsxMzM4LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJ3YWxscGFwZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyNDAwODc4NDQzMDQ2ODc2NjIiPiLYqti12YjbjNixINiy2YXbjNmG2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLYqti624zbjNixINiq2LXZiNuM2LEg2LLZhduM2YbZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Iti02YbZiNmG2K/ZhyDYp9i52YTYp9mGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g2YHYudin2YQg2LTYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiDYqtmI2LPYtyA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g2YHYudin2YQg2LTYr9mHINin2LPYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4i4oCPVlBOINmB2LnYp9mEINi02K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiLigI9WUE4g2KrZiNiz2LcgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INmB2LnYp9mEINi02K/ZhyDYp9iz2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLYqNix2KfbjCDZhdiv24zYsduM2Kog2LTYqNqp2Ycg2YTZhdizINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0X2xvbmciIG1zZ2lkPSI2NDA3MzUxMDA2MjQ5MTc0NDczIj4i2KjZhyA8eGxpZmY6ZyBpZD0iU0VTU0lPTiI+JXM8L3hsaWZmOmc+INmI2LXZhCDYtNivLiDYqNix2KfbjCDZhdiv24zYsduM2Kog2LTYqNqp2Ycg2YTZhdizINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0aW5nIiBtc2dpZD0iNjQ0MzQzODk2NDQ0MDk2MDc0NSI+Itiv2LEg2K3Yp9mEINin2KrYtdin2YQgVlBOINmH2YXbjNi02Ycg2YHYudin2YTigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGVkIiBtc2dpZD0iODIwMjY3OTY3NDgxOTIxMzkzMSI+IlZQTiDZh9mF24zYtNmHINmB2LnYp9mEINmF2KrYtdmEINi02K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fZXJyb3IiIG1zZ2lkPSI2MDA5MjQ5ODE0MDM0NzA4MTc1Ij4i2K7Yt9in24wgVlBOINmH2YXbjNi02Ycg2YHYudin2YQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGluZyIgbXNnaWQ9IjY0NDM0Mzg5NjQ0NDA5NjA3NDUiPiLigI/Yr9ixINit2KfZhCDYp9iq2LXYp9mEIFZQTiDZh9mF24zYtNmHINmB2LnYp9mE4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiLigI9WUE4g2YfZhduM2LTZhyDZgdi52KfZhCDZhdiq2LXZhCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Vycm9yIiBtc2dpZD0iNjAwOTI0OTgxNDAzNDcwODE3NSI+IuKAj9iu2LfYp9uMIFZQTiDZh9mF24zYtNmHINmB2LnYp9mEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2NvbmZpZyIgbXNnaWQ9IjY0MTU4OTkxNTA2NzE1Mzc5NzAiPiLYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINmE2YXYsyDaqdmG24zYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVwbG9hZF9maWxlIiBtc2dpZD0iMjg5Nzk1NzE3MjM2NjczMDQxNiI+Itin2YbYqtiu2KfYqCDZgdin24zZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2ZpbGVfY2hvc2VuIiBtc2dpZD0iNjM2MzY0ODU2MjE3MDc1OTQ2NSI+ItmH24zahiDZgdin24zZhNuMINin2YbYqtiu2KfYqCDZhti02K8iPC9zdHJpbmc+CkBAIC0xMzU5LDE4ICsxMzY4LDE4IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDY0MTg3Mjc5NzA2NzYwOTE3NyI+Ijx4bGlmZjpnIGlkPSJJTkRFWCI+JWQ8L3hsaWZmOmc+INin2LIgPHhsaWZmOmcgaWQ9IlRPVEFMIj4lZDwveGxpZmY6Zz4iPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbW9kZV9kb25lIiBtc2dpZD0iNzIxNzU4MTY0MDQ2MTkyMjI4OSI+Itin2YbYrNin2YUg2LTYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkyMzgxMDQ0ODUwNzYxMjc0NiI+Itiv2LEg2K3Yp9mEINmE2LrZiCDZhti12Kgg2K3Yp9mB2LjZh9mUIFVTQi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzI3ODk0OTk4NDA5NTM3MTkwIj4i2K/YsSDYrdin2YQg2YTYutmIINmG2LXYqCDaqdin2LHYqiBTRC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDUyMTU3MzMyMTUyNDM0MDA1OCI+Itiv2LEg2K3Yp9mEINm+2KfaqSDaqdix2K/ZhiDYrdin2YHYuNmH2ZQgVVNCLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1OTY5ODg4NzU1MDcwNDMwNDIiPiLYr9ixINit2KfZhCDZvtin2qkg2qnYsdiv2YYg2qnYp9ix2KogU0QuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZXJyb3IiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjI5OTc2OTU2MzYyNDc3Njk0OCI+Itm+2KfaqSDaqdix2K/ZhiDZhdit2YQg2LDYrtuM2LHZhyAgVVNCINmF2YXaqdmGINmG24zYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMTUyNDg2OTY2NDQ1MTA5MzUiPiLZvtin2qkg2qnYsdiv2YYg2qnYp9ix2KogU0Qg2YXZhdqp2YYg2YbbjNiz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4i2qnYp9ix2KogU0Qg2YLYqNmEINin2LIg2YLYt9i5INin2KrYtdin2YQg2KfYsiDYr9iz2Krar9in2Ycg2K7Yp9ix2Kwg2LTYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MTgxODg3MjAwMDk1Njk2OTMiPiLYrdin2YHYuNmH2ZQgVVNCINin2qnZhtmI2YYg2K/YsSDYrdin2YQg2KjYsdix2LPbjCDYtNiv2YYg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMzNDc2MjUwMzkwNDgyNzQ4MSI+Itqp2KfYsdiqIFNEINiv2LEg2K3Yp9mEINit2KfYttixINiv2LEg2K3Yp9mEINio2LHYsdiz24wg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JlbW92ZWQiIG1zZ2lkPSI3MDAxNTI2OTA1MDU3OTUyMDk3Ij4i2qnYp9ix2KogU0Qg2K3YsNmBINi02K/ZhyDYp9iz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4i4oCP2K/YsSDYrdin2YQg2YTYutmIINmG2LXYqCDYrdin2YHYuNmH2ZQgVVNCLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMjc4OTQ5OTg0MDk1MzcxOTAiPiLigI/Yr9ixINit2KfZhCDZhNi62Ygg2YbYtdioINqp2KfYsdiqIFNELi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NTIxNTczMzIxNTI0MzQwMDU4Ij4i4oCP2K/YsSDYrdin2YQg2b7Yp9qpINqp2LHYr9mGINit2KfZgdi42YfZlCBVU0IuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjU5Njk4ODg3NTUwNzA0MzA0MiI+IuKAj9iv2LEg2K3Yp9mEINm+2KfaqSDaqdix2K/ZhiDaqdin2LHYqiBTRC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2Mjk5NzY5NTYzNjI0Nzc2OTQ4Ij4i4oCP2b7Yp9qpINqp2LHYr9mGINmF2K3ZhCDYsNiu24zYsdmHICBVU0Ig2YXZhdqp2YYg2YbbjNiz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IuKAj9m+2KfaqSDaqdix2K/ZhiDaqdin2LHYqiBTRCDZhdmF2qnZhiDZhtuM2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9iYWRfcmVtb3ZhbCIgbXNnaWQ9Ijc5NjA4NjQwNjEwMTY2MDMyODEiPiLigI/aqdin2LHYqiBTRCDZgtio2YQg2KfYsiDZgti32Lkg2KfYqti12KfZhCDYp9iyINiv2LPYqtqv2KfZhyDYrtin2LHYrCDYtNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQxODE4ODcyMDAwOTU2OTY5MyI+IuKAj9it2KfZgdi42YfZlCBVU0Ig2KfaqdmG2YjZhiDYr9ixINit2KfZhCDYqNix2LHYs9uMINi02K/ZhiDYp9iz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzM0NzYyNTAzOTA0ODI3NDgxIj4i4oCP2qnYp9ix2KogU0Qg2K/YsSDYrdin2YQg2K3Yp9i22LEg2K/YsSDYrdin2YQg2KjYsdix2LPbjCDYp9iz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcmVtb3ZlZCIgbXNnaWQ9IjcwMDE1MjY5MDUwNTc5NTIwOTciPiLigI/aqdin2LHYqiBTRCDYrdiw2YEg2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNTgzMDgxNDM0OTI1MDgzNDIyNSI+Itit2KfZgdi42Ycg2K/YsSDYrdin2YQg2K3Yp9i22LEg2KrZiNiz2Lcg2LHYp9uM2KfZhtmHINiv24zar9ix24wg2KfYs9iq2YHYp9iv2Ycg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzA2MTMwNTY4MTMzNTQwNDM1Ij4i2qnYp9ix2KogU0Qg2K/YsSDYrdin2YQg2K3Yp9i22LEg2KrZiNiz2Lcg24zaqSDYsdin24zYp9mG2Ycg2K/YsSDYrdin2YQg2KfYs9iq2YHYp9iv2Ycg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MDYxMzA1NjgxMzM1NDA0MzUiPiLigI/aqdin2LHYqiBTRCDYr9ixINit2KfZhCDYrdin2LbYsSDYqtmI2LPYtyDbjNqpINix2KfbjNin2YbZhyDYr9ixINit2KfZhCDYp9iz2KrZgdin2K/ZhyDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfdW5rbm93bl9zdGF0ZSIgbXNnaWQ9IjcyOTE5Mjc4MjE5NzI5MDM4NSI+Itix2LPYp9mG2Ycg2K7Yp9ix2KzbjCDYr9ixINit2KfZhNiqINmG2KfYtNmG2KfYsyDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmUiIG1zZ2lkPSIxNzc4Njg2NjE4MjMwMDExOTY0Ij4i2KfYtNiq2LHYp9qp4oCM2q/YsNin2LHbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZpbmQiIG1zZ2lkPSI0ODA4MjcwOTAwMzIyOTg1OTYwIj4i24zYp9mB2KrZhiI8L3N0cmluZz4KQEAgLTEzODMsNyArMTM5Miw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJncHNWZXJpZlllcyIgbXNnaWQ9IjIzNDY1NjYwNzI4NjcyMTM1NjMiPiLYqNmE2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNWZXJpZk5vIiBtc2dpZD0iMTE0NjU2NDkzNzM0NjQ1NDg2NSI+Itiu24zYsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlcyIgbXNnaWQ9IjUyOTYzMjE4NTA2NjI3NDY4OTAiPiLYp9iyINit2K8g2YXYrNin2LIg2K3YsNmBINmB2LHYp9iq2LEg2LHZgdiqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3luY190b29fbWFueV9kZWxldGVzX2Rlc2MiIG1zZ2lkPSI0OTY1NTE2NzEwMDg2OTQyNDUiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSX09GX0RFTEVURURfSVRFTVMiPiUxJGQ8L3hsaWZmOmc+INmF2YjYsdivINit2LDZgSDYtNiv2Ycg2KjYsdin24wgPHhsaWZmOmcgaWQ9IlRZUEVfT0ZfU1lOQyI+JTIkczwveGxpZmY6Zz7YjCDYrdiz2KfYqCA8eGxpZmY6ZyBpZD0iQUNDT1VOVF9OQU1FIj4lMyRzPC94bGlmZjpnPiDZiNis2YjYryDYr9in2LHYry4g2YXbjOKAjtiu2YjYp9mH24zYryDahtmHINqp2KfYsduMINin2YbYrNin2YUg2K/Zh9uM2K/YnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlc19kZXNjIiBtc2dpZD0iNDk2NTUxNjcxMDA4Njk0MjQ1Ij4i4oCPPHhsaWZmOmcgaWQ9Ik5VTUJFUl9PRl9ERUxFVEVEX0lURU1TIj4lMSRkPC94bGlmZjpnPiDZhdmI2LHYryDYrdiw2YEg2LTYr9mHINio2LHYp9uMIDx4bGlmZjpnIGlkPSJUWVBFX09GX1NZTkMiPiUyJHM8L3hsaWZmOmc+2Iwg2K3Ys9in2KggPHhsaWZmOmcgaWQ9IkFDQ09VTlRfTkFNRSI+JTMkczwveGxpZmY6Zz4g2YjYrNmI2K8g2K/Yp9ix2K8uINmF24zigI7YrtmI2KfZh9uM2K8g2obZhyDaqdin2LHbjCDYp9mG2KzYp9mFINiv2YfbjNiv2J8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeW5jX3JlYWxseV9kZWxldGUiIG1zZ2lkPSIyNTcyNjAwMTAzMTIyNTk2MjQzIj4i2K3YsNmBINmF2YjYp9ix2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeW5jX3VuZG9fZGVsZXRlcyIgbXNnaWQ9IjI5NDEzMTczNjA2MDAzMzg2MDIiPiLZhNi62Ygg2YXZiNin2LHYryDYrdiw2YEg2LTYr9mHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3luY19kb19ub3RoaW5nIiBtc2dpZD0iMzc0Mzc2NDc0MDQzMDgyMTg0NSI+Itin2qnZhtmI2YYg2qnYp9ix24wg2KfZhtis2KfZhSDZhti02YjYryI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLYp9mG2KrYrtin2Kgg2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4i2LHYp9mH4oCM2KfZhtiv2KfYstuMIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4g2KfZhtis2KfZhSDZhti02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLYp9i02KrYsdin2qnigIzar9iw2KfYsduMINio2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i2KfYtNiq2LHYp9qp4oCM2q/YsNin2LHbjCDYqNinIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i2KfZh9ix2YUg2qnZhtiq2LHZhCDYrdix2qnYqi4g2YTZhdizINqp2LHYr9mHINmIINmG2q/Zh9iv2KfYsduM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+ItmE2LrYstin2YbYr9mGINio2Ycg2KjYp9mE2Kcg2KjYsdin24wgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+ItmE2LrYstin2YbYr9mGINio2Ycg2b7Yp9uM24zZhiDYqNix2KfbjCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i2YTYutiy2KfZhtiv2YYg2KjZhyDahtm+INio2LHYp9uMIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4i2YTYutiy2KfZhtiv2YYg2KjZhyDYsdin2LPYqiDYqNix2KfbjCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLYqNin2LLaqdix2K/ZhiDZgtmB2YQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i2K/ZiNix2KjbjNmGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+Itiz2KfaqdiqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+Iti12K/YpyDYsdmI2LTZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i2KzYs9iq2KzZiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+Itio2LHYp9uMINio2KfYstqv2LTYp9uM24wg2YLZgdmE2Iwg2KjZhNi62LLYp9mG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4i2KjYsdin24wg2LTZhtuM2K/ZhiDaqdmE24zYr9mH2KfbjCDar9iw2LHZiNin2pjZhyDaqdmHINio2Kcg2LXYr9in24wg2KjZhNmG2K8g2K7ZiNin2YbYr9mHINmF24zigIzYtNmI2YbYr9iMINmH2K/Ys9iqINix2Kcg2YjYtdmEINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+ItmG2YLYt9mHLiI8L3N0cmluZz4KQEAgLTE0MzUsMjAgKzE0MzYsMjAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI3OTY1OTg0MzYwOTAzNjkzOTAzIj4i4oCOJTEkcywgJTIkcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9zdWJ0aXRsZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI2OTg1NTQ2NTMwNDcxNzgwNzI3Ij4i4oCOJTEkcywgJTIkcywgJTMkcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfaW50ZXJuYWwiIG1zZ2lkPSI0ODkxOTE2ODMzNjU3OTI5MjYzIj4i2K3Yp9mB2LjZh9mUINiv2KfYrtmE24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3NkX2NhcmQiIG1zZ2lkPSIzMjgyOTQ4ODYxMzc4Mjg2NzQ1Ij4i2qnYp9ix2KogU0QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3VzYiIgbXNnaWQ9IjMwMTc5NTQwNTk1Mzg1MTcyNzgiPiLYrdin2YHYuNmH2ZQgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9zZF9jYXJkIiBtc2dpZD0iMzI4Mjk0ODg2MTM3ODI4Njc0NSI+IuKAj9qp2KfYsdiqIFNEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV91c2IiIG1zZ2lkPSIzMDE3OTU0MDU5NTM4NTE3Mjc4Ij4i4oCP2K3Yp9mB2LjZh9mUIFVTQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV4dHJhY3RfZWRpdF9tZW51X2J1dHRvbiIgbXNnaWQ9Ijg5NDA0Nzg3MzA0OTY2MTAxMzciPiLZiNuM2LHYp9uM2LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSIxOTU1NjM4ODYyMTIyMjMyMzQyIj4i2YfYtNiv2KfYsSDZhduM2LLYp9mGINin2LPYqtmB2KfYr9mHINin2LIg2K/Yp9iv2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfYm9keSIgbXNnaWQ9IjI4MTQ2NzM1NTE0NzE5Njk5NTQiPiLYqNix2KfbjCDZhdi02KfZh9iv2Ycg2qnYp9ix2KjYsdivINmIINiq2YbYuNuM2YXYp9iqINmE2YXYsyDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzA5MzMzNDQxOTUxODcwNjY4NiI+Itiv2KfYr9mH4oCM2YfYp9uMIDJHLTNHINi624zYsdmB2LnYp9mEINi02K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzYzNjQ4OTQzNjgxOTQ3MDc2MSI+Itiv2KfYr9mHIDRHINi624zYsSDZgdi52KfZhCDYtNiv2Ycg2KfYs9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF90aXRsZSIgbXNnaWQ9IjcwOTMzMzQ0MTk1MTg3MDY2ODYiPiLigI/Yr9in2K/Zh+KAjNmH2KfbjCAyRy0zRyDYutuM2LHZgdi52KfZhCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF90aXRsZSIgbXNnaWQ9Ijc2MzY0ODk0MzY4MTk0NzA3NjEiPiLigI/Yr9in2K/ZhyA0RyDYutuM2LEg2YHYudin2YQg2LTYr9mHINin2LPYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzg2OTQwMjUxOTM5MTYzMTg4NCI+Itiv2KfYr9mH4oCM2YfYp9uMINiq2YTZgdmGINmH2YXYsdin2Ycg2LrbjNix2YHYudin2YQg2LTYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF90aXRsZSIgbXNnaWQ9Ijg5OTIxNTQ3MzY0NDEyODQ4NjUiPiLYr9in2K/Zh+KAjNmH2KfbjCBXaS1GaSDYutuM2LHZgdi52KfZhCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3RpdGxlIiBtc2dpZD0iODk5MjE1NDczNjQ0MTI4NDg2NSI+IuKAj9iv2KfYr9mH4oCM2YfYp9uMIFdpLUZpINi624zYsdmB2LnYp9mEINi02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2xpbWl0X2JvZHkiIG1zZ2lkPSIzMzE3OTY0NzA2OTczNjAxMzg2Ij4i2KjYsdin24wg2YHYudin2YQg2qnYsdiv2YYg2YTZhdizINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjcwMjY3MzkxMjExMzgwMDUyMzEiPiLYp9i32YTYp9i52KfYqiAyRy0zRyDYqNuM2LQg2KfYsiDYrdivINmF2KzYp9iyINin2LPYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjExMDY1NjI3NzkzMTEyMDkwMzkiPiLYqNuM2LQg2KfYsiDYrdivINmF2KzYp9iyIDRHINin2LPYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjcwMjY3MzkxMjExMzgwMDUyMzEiPiLigI/Yp9i32YTYp9i52KfYqiAyRy0zRyDYqNuM2LQg2KfYsiDYrdivINmF2KzYp9iyINin2LPYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjExMDY1NjI3NzkzMTEyMDkwMzkiPiLigI/YqNuM2LQg2KfYsiDYrdivINmF2KzYp9iyIDRHINin2LPYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIyNzkyNDA1NzIxNjU0MTIxNjgiPiLYr9in2K/Zh+KAjNmH2KfbjCDYqtmE2YHZhiDZh9mF2LHYp9mHINin2LIg2YXZgtiv2KfYsSDZhdis2KfYsiDYqNuM2LTYqtixINin2LPYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+Itin2LIg2YXYrdiv2YjYr9mHINmF2KzYp9iyINiv2KfYr9mH4oCM2YfYp9uMIFdpLUZpINio24zYtNiq2LEg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+IuKAj9in2LIg2YXYrdiv2YjYr9mHINmF2KzYp9iyINiv2KfYr9mH4oCM2YfYp9uMIFdpLUZpINio24zYtNiq2LEg2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfc25vb3plZF9ib2R5IiBtc2dpZD0iNzAzNTQ5MDI3ODI5ODQ0MTc2NyI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lczwveGxpZmY6Zz4g2KfYsiDYrdivINiq2LnbjNuM2YYg2LTYr9mHINio24zYtNiq2LEg2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfdGl0bGUiIG1zZ2lkPSI1OTY1MTU3MzYxMDM2MzIxOTE0Ij4i2K/Yp9iv2Ycg2b7Ys+KAjNiy2YXbjNmG2Ycg2YXYrdiv2YjYryDYtNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX2JvZHkiIG1zZ2lkPSI2NzQxNTIxMzMwOTk3NDUyOTkwIj4i2KjYsdin24wg2K3YsNmBINmF2K3Yr9mI2K/bjNiq2Iwg2YTZhdizINqp2YbbjNivLiI8L3N0cmluZz4KQEAgLTE0NjQsOCArMTQ2NSw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJleHBpcmVzX29uIiBtc2dpZD0iMzY3NjI0Mjk0OTkxNTk1OTgyMSI+Itiq2KfYsduM2K4g2KfZhtmC2LbYpzoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4i2LTZhdin2LHZh9mUINiz2LHbjNin2YQ6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmluZ2VycHJpbnRzIiBtc2dpZD0iNDUxNjAxOTYxOTg1MDc2MzA0OSI+Itin2KvYsSDYp9mG2q/YtNiqOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYTI1Nl9maW5nZXJwcmludCIgbXNnaWQ9IjQzOTEyNzEyODY0NzcyNzkyNjMiPiLYp9ir2LEg2KfZhtqv2LTYqiBTSEEtMjU2OiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYTFfZmluZ2VycHJpbnQiIG1zZ2lkPSI3OTMwMzMwMjM1MjY5NDA0NTgxIj4i2KfYq9ixINin2Ybar9i02KogU0hBLTEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGEyNTZfZmluZ2VycHJpbnQiIG1zZ2lkPSI0MzkxMjcxMjg2NDc3Mjc5MjYzIj4i4oCP2KfYq9ixINin2Ybar9i02KogU0hBLTI1NjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+IuKAj9in2KvYsSDYp9mG2q/YtNiqIFNIQS0xIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X3NlZV9hbGwiIG1zZ2lkPSI0MjkyNTY5MzgzOTc2NjM2MjAwIj4i2YXYtNin2YfYr9mH2ZQg2YfZhdmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNDcxMDAxMzg2NDk3NDA0MDYxNSI+Itin2YbYqtiu2KfYqCDZgdi52KfZhNuM2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZV9hY3Rpb25fcHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjUyNDc2ODQ0MzU5NzkxNDkyMTYiPiLYp9i02KrYsdin2qnigIzar9iw2KfYsduMINio2KciPC9zdHJpbmc+CkBAIC0xNDgzLDIwICsxNDg0LDI2IEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i2LPbjNiz2KrZhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i2KjZhNmI2KrZiNir4oCM2YfYp9uMINi12YjYqtuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLYtdmB2K3ZhyDZhtmF2KfbjNi0INio24zigIzYs9uM2YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i2KfZhtis2KfZhSDYtNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i2K7YsdmI2KzbjCDYsdiz2KfZhtmHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLYqNix2YLYsdin2LHbjCDYp9ix2KrYqNin2Lcg2KjYpyDYr9iz2Krar9in2YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLZgdix2LPYqtin2K/ZhiDYtdmB2K3ZhyDZhtmF2KfbjNi0INio2Ycg2K/Ys9iq2q/Yp9mHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i2K/YsSDYrdin2YQg2KzYs9iq2KzZiCDYqNix2KfbjCDYr9iz2Krar9in2YfigIzZh9inLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4i2KrZhti424zZhdin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i2YLYt9i5INin2LHYqtio2KfYtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLYr9ixINit2KfZhCDYp9iz2qnZhiDaqdix2K/ZhuKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+Itiv2LHYrdin2YQg2KfYqti12KfZhOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i2K/YsSDYr9iz2KrYsdizIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI2NzM5ODk5OTYyNjgxODg2NDAxIj4i2K/YsSDYr9iz2KrYsdizINmG24zYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiLYr9ixINit2KfZhCDYp9iz2KrZgdin2K/ZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9idWlsdF9pbl9kaXNwbGF5X25hbWUiIG1zZ2lkPSIyNTgzMTM0Mjk0MjkyNTYzOTQxIj4i2LXZgdit2Ycg2YbZhdin24zYtCDYp9iyINiu2YjYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9oZG1pX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjE1NTUyNjQ1NTkyMjc0NzAxMDkiPiLYtdmB2K3ZhyBIRE1JIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2hkbWlfZGlzcGxheV9uYW1lIiBtc2dpZD0iMTU1NTI2NDU1OTIyNzQ3MDEwOSI+IuKAj9i12YHYrdmHIEhETUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4i2YfZhdm+2YjYtNin2YbbjCAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiLYjCDYp9mF2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+ItmG2YXYp9uM2LTar9ixINio24zigIzYs9uM2YUg2YXYqti12YQg2KfYs9iqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+Itin24zZhiDYtdmB2K3ZhyDYr9ixINit2KfZhCDZhtmF2KfbjNi0INiv2LEg2K/Ys9iq2q/Yp9mHINiv24zar9ix24wg2KfYs9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+Itiv2LHYrdin2YQg2YHYsdiz2KrYp9iv2YYg2LXZgdit2Ycg2YbZhdin24zYtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Itiv2LHYrdin2YQg2KfYqti12KfZhCDYqNmHIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+Itiv2LHYrdin2YQg2YHYsdiz2KrYp9iv2YYg2LXZgdit2Ycg2YbZhdin24zYtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4i2KjZhyA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4g2YXYqti12YQg2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLZgti32Lkg2KfYqti12KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i2KrZhdin2LMg2KfYtti32LHYp9ix24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLYp9mE2q/ZiCDYsdinINmB2LHYp9mF2YjYtCDaqdix2K/Zh+KAjNin24zYryI8L3N0cmluZz4KQEAgLTE1MTcsMTMgKzE1MjQsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+Itm+24zZhiDaqdivINio2KfbjNivINu4INi52K/YryDbjNinINio24zYtNiq2LEg2KjYp9i02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i2b7bjNmGINqp2K8g2LXYrduM2K0g2LHYpyDYr9mI2KjYp9ix2Ycg2YjYp9ix2K8g2qnZhtuM2K8uINiq2YTYp9i04oCM2YfYp9uMINmF2qnYsdixINio2YfigIzYt9mI2LEg2K/Yp9im2YUg2LPbjNmFINqp2KfYsdiqINix2Kcg2LrbjNix2YHYudin2YQg2K7ZiNin2YfYryDaqdix2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+Itm+24zZhiDaqdiv2YfYpyDZhdmG2LfYqNmCINmG24zYs9iq2YbYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+Itiq2YTYp9i04oCO2YfYp9uMINiy24zYp9iv24wg2KjYsdin24wg2qnYtNuM2K/ZhiDYp9mE2q/ZiCDYtdmI2LHYqiDar9ix2YHYqtmHINin2LPYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLYqNix2KfbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhNiMINio2Kcg2K3Ys9in2KggR29vZ2xlINiu2YjYryDZiNin2LHYryDYs9uM2LPYqtmFINi02YjbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuKAj9iq2YTYp9i04oCO2YfYp9uMINiy24zYp9iv24wg2KjYsdin24wg2qnYtNuM2K/ZhiDYp9mE2q/ZiCDYtdmI2LHYqiDar9ix2YHYqtmHINin2LPYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLigI/YqNix2KfbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhNiMINio2Kcg2K3Ys9in2KggR29vZ2xlINiu2YjYryDZiNin2LHYryDYs9uM2LPYqtmFINi02YjbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i2YbYp9mFINqp2KfYsdio2LHbjCAo2KfbjNmF24zZhCkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+Itqv2LDYsdmI2KfamNmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLZiNix2YjYryDYqNmHINiz24zYs9iq2YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+ItmG2KfZhSDaqdin2LHYqNix24wg24zYpyDar9iw2LHZiNin2pjZhyDZhtin2YXYudiq2KjYsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i2YbYp9mFINqp2KfYsdio2LHbjCDbjNinINqv2LDYsdmI2KfamNmHINiu2YjYryDYsdinINmB2LHYp9mF2YjYtCDaqdix2K/bjNiv2J9cbtin2LIgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iINio2KfYstiv24zYryDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4oCP2YbYp9mFINqp2KfYsdio2LHbjCDbjNinINqv2LDYsdmI2KfamNmHINiu2YjYryDYsdinINmB2LHYp9mF2YjYtCDaqdix2K/bjNiv2J9cbtin2LIgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iINio2KfYstiv24zYryDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiLYr9ix2K3Yp9mEINio2LHYsdiz24wg2K3Ys9in2KguLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+Itm+24zZhiDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINiq2KfbjNm+INqp2LHYr9uM2K8uIFxuXG7ZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLar9iw2LHZiNin2pjZhyDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINiq2KfbjNm+INqp2LHYr9uM2K8uIFxuXG7ZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KQEAgLTE1MzIsOCArMTUzOSw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i2LTZhdinINio2Ycg2KfYtNiq2KjYp9mHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYp9mC2K/Yp9mFINio2Ycg2KjYp9iyINqp2LHYr9mGINmC2YHZhCDYqtmE2YHZhiDaqdix2K/Zh+KAjNin24zYry4g2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INiq2YTYp9i0INmG2KfZhdmI2YHZgiDYr9uM2q/YsdiMINiq2YTZgdmGINio2Ycg2b7bjNi04oCM2YHYsdi2INqp2KfYsdiu2KfZhtmHINio2KfYstmG2LTYp9mG24wg2YXbjOKAjNi02YjYryDZiCDYqtmF2KfZhSDYr9in2K/Zh+KAjNmH2KfbjCDaqdin2LHYqNixINin2LIg2K/Ys9iqINiu2YjYp9mH2K8g2LHZgdiqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4i2LTZhdinINio2Ycg2KfYtNiq2KjYp9mHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfZgtiv2KfZhSDYqNmHINio2KfYsiDaqdix2K/ZhiDZgtmB2YQg2LHYp9uM2KfZhtmHINmE2YjYrduMINqp2LHYr9mH4oCM2KfbjNivLiDYsdin24zYp9mG2Ycg2YTZiNit24wg2KfaqdmG2YjZhiDYqNmHINm+24zYtOKAjNmB2LHYtiDaqdin2LHYrtin2YbZhyDYqNin2LLZhti02KfZhtuMINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4i2LTZhdinINio2Ycg2KfYtNiq2KjYp9mHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfZgtiv2KfZhSDYqNmHINio2KfYsiDaqdix2K/ZhiDZgtmB2YQg2KrZhNmB2YYg2qnYsdiv2YfigIzYp9uM2K8uINin24zZhiDYqtmE2YHZhiDYp9qp2YbZiNmGINio2Ycg2b7bjNi04oCM2YHYsdi2INqp2KfYsdiu2KfZhtmHINio2KfYstmG2LTYp9mG24wg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i2LTZhdinINin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCO2KfbjNivLiDYqNi52K8g2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDbjNqpINit2LPYp9ioINin24zZhduM2YQg2YLZgdmEINix2KfbjNin2YbZhyDZhNmI2K3bjCDYrtmI2K8g2LHYpyDYqNin2LIg2qnZhtuM2K8uXG5cbiDZhNi32YHYp9mLINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLYtNmF2Kcg2KfZhNqv2YjbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhCDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINqp2LTbjNiv2YfigIzYp9uM2K8uINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDbjNqpINit2LPYp9ioINin24zZhduM2YQg2YLZgdmEINiq2YTZgdmGINiu2YjYryDYsdinINio2KfYsiDaqdmG24zYry5cblxuINmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4oCP2LTZhdinINin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCO2KfbjNivLiDYqNi52K8g2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDbjNqpINit2LPYp9ioINin24zZhduM2YQg2YLZgdmEINix2KfbjNin2YbZhyDZhNmI2K3bjCDYrtmI2K8g2LHYpyDYqNin2LIg2qnZhtuM2K8uXG5cbiDZhNi32YHYp9mLINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLigI/YtNmF2Kcg2KfZhNqv2YjbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhCDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINqp2LTbjNiv2YfigIzYp9uM2K8uINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDbjNqpINit2LPYp9ioINin24zZhduM2YQg2YLZgdmEINiq2YTZgdmGINiu2YjYryDYsdinINio2KfYsiDaqdmG24zYry5cblxuINmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLYrdiw2YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlX21lZGlhX3ZvbHVtZV93YXJuaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMyNDE2MTkzOTQ3NTQ3ODA2NiI+Iti12K/YpyDYqNmHINio2KfZhNin2KrYsSDYp9iyINiz2LfYrSDYqtmI2LXbjNmHINi02K/ZhyDYp9mB2LLYp9uM2LQg24zYp9io2K/Yn1xu2q/ZiNi0INiv2KfYr9mGINio2Ycg2LXYr9in24wg2KjZhNmG2K8g2KjYsdin24wg2YXYr9iqINi32YjZhNin2YbbjCDZhduM4oCM2KrZiNin2YbYryDYqNmHINi02YbZiNin24zbjCDYtNmF2Kcg2KLYs9uM2Kgg2KjYsdiz2KfZhtivLiI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1NiwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiLYp9mF2KrYrdin2YYg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2YciPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i2KjYudiv2KfZiyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+Itio2LHYp9uMINiu2LHZiNisINin2LIg2KrZhdin2YUg2LXZgdit2Ycg2KfYsiDYqNin2YTYpyDYqNmHINm+2KfbjNuM2YYg2Kjaqdi024zYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLYqNix2KfbjCDYrtix2YjYrCDYp9iyINit2KfZhNiqINiq2YXYp9mFINi12YHYrdmH2Iwg2KfZhtqv2LTYqiDYrtmI2K8g2LHYpyDYqNmHINiq2YbYr9uMINin2LIg2KjYp9mE2KfbjCDYtdmB2K3Zh8Kg2KjZhyDZvtin24zbjNmGINio2qnYtNuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLYp9mG2KzYp9mFINi02K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLZhNi62LLZhtiv2Ycg2K/Yp9uM2LHZh+KAjNin24wg2LPYp9i52KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+ItmE2LrYstmG2K/ZhyDYr9in24zYsdmH4oCM2KfbjCDYr9mC24zZgtmHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+Itin2YbYqtiu2KfYqCDYs9in2LnYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+Itin2YbYqtiu2KfYqCDYr9mC24zZgtmHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLYrNiv2YjZhCDYsdmI2LLZh9inINio2LHYp9iz2KfYsyDZhdin2YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLZhNuM2LPYqiDYs9in2YTigIzZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLYp9mG2KrYrtin2Kgg2YXYp9mHINmIINix2YjYsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+Itin2YbYqtiu2KfYqCDYs9in2YQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+INin2YbYqtiu2KfYqCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4g2K3YsNmBINi02K8iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCmluZGV4IDMxMzBjYmEuLjgwYWQ1MmRkIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IktpcmpvaXRhIHbDpGhpbnTDpMOkbiA4IG51bWVyb24gcGl0dWluZW4gUFVLLWtvb2RpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU0ta29ydHRpc2kgb24gUFVLLWx1a2l0dHUuIFBvaXN0YSBsdWtpdHVzIGFudGFtYWxsYSBQVUsta29vZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iUHVyYSBTSU0ta29ydGluIGVzdG8gYW50YW1hbGxhIFBVSzIta29vZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iRXDDpG9ubmlzdHVpLCBvdGEgU0lNLS9SVUlNLWx1a2l0dXMga8OkeXR0w7bDtm4uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iU2ludWxsYSBvbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4geXJpdHlzIGrDpGxqZWxsw6QsIGVubmVuIGt1aW4gU0lNLWtvcnR0aSBsdWtpdGFhbi4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJTaW51bGxhIG9uIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB5cml0eXN0w6QgasOkbGplbGzDpCwgZW5uZW4ga3VpbiBTSU0ta29ydHRpIGx1a2l0YWFuLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSS1rb29kaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iU29pdHRhamFuIHR1bm51cyI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iQW50YWEgc292ZWxsdWtzZW4gc2l0b3V0dWEgVlBOLXBhbHZlbHVuIHlsZW1tw6RuIHRhc29uIGvDpHl0dMO2bGlpdHR5bcOkw6RuLiBFaSB0YXZhbGxpc3RlbiBzb3ZlbGx1c3RlbiBrw6R5dHTDtsO2bi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4ic2lkbyB0YXVzdGFrdXZhYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IkFudGFhIHNvdmVsbHVrc2VuIHNpdG91dHVhIHRhdXN0YWt1dmFuIHlsw6R0YXNvbiBrw6R5dHTDtmxpaXR0eW3DpMOkbi4gRWkgdGF2YWxsaXN0ZW4gc292ZWxsdXN0ZW4ga8OkeXR0w7bDtm4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJldMOkbsOkeXR0w7bDtm4gc2l0b3V0dW1pbmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iQW50YWEgc292ZWxsdWtzZW4gc2l0b3V0dWEgZXTDpG7DpHl0w7ZuIHlsZW1tw6RuIHRhc29uIGvDpHl0dMO2bGlpdHR5bcOkw6RuLiBFaSB0YXZhbGxpc3RlbiBzb3ZlbGx1a3NpZW4ga8OkeXR0w7bDtm4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4ic2l0b3VkdSB3aWRnZXQtcGFsdmVsdXVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkFudGFhIHNvdmVsbHVrc2VuIHNpdG91dHVhIHdpZGdldC1wYWx2ZWx1biB5bGVtbcOkbiB0YXNvbiBrw6R5dHTDtmxpaXR0eW3DpMOkbi4gRWkgdGF2YWxsaXN0ZW4gc292ZWxsdWtzaWVuIGvDpHl0dMO2w7ZuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImtvbW11bmlrb2kgbGFpdHRlZW4gasOkcmplc3RlbG3DpG52YWx2b2phbiBrYW5zc2EiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IkFudGFhIHNvdmVsbHVrc2VuIGvDpHl0dMOkw6QgU3VyZmFjZUZsaW5nZXJpbiBtYXRhbGFuIHRhc29uIG9taW5haXN1dWtzaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ibHVlIGtlaHlzcHVza3VyaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iQW50YWEgc292ZWxsdWtzZW4gbHVrZWEga2VoeXNwdXNrdXJpbiBzaXPDpGx0w7bDpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJJbnB1dEZsaW5nZXJpbiBrw6R5dHTDpG1pbmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkFudGFhIHNvdmVsbHVrc2VuIGvDpHl0dMOkw6QgSW5wdXRGbGluZ2VyaW4gbWF0YWxhbiB0YXNvbiBvbWluYWlzdXVrc2lhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ibcOkw6RyaXTDpCB3aWZpLW7DpHl0dMO2amVuIGFzZXR1a3NldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IkFudGFhIHNvdmVsbHVrc2VuIG3DpMOkcml0dMOkw6Qgd2lmaS1uw6R5dHTDtmrDpCBqYSBtdW9kb3N0YWEgeWh0ZXlkZW4gbmlpaGluLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iaGFsbGl0c2Ugd2lmaS1uw6R5dHTDtmrDpCI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJWYWxpdHNlIHNvdmVsbHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiBlaSBrw6R5bm5pc3R5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iSmFhIHNldXJhYXZpZW4ga2Fuc3NhOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJKYWEgc292ZWxsdWtzZXNzYSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IkxpdWt1dmEgdmFsaXRzaW4uIEtvc2tldGEgcGl0a8Okw6RuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJMaXVcJ3V0YSB5bMO2cyBqYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iTGl1XCd1dGEgYWxhcyBqYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iTGl1XCd1dGEgdmFzZW1tYWxsZSBqYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkxpdVwndXRhIG9pa2VhbGxlIGphIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IlBvaXN0YSBsdWtpdHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLDhMOkbmV0w7ZuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IsOEw6RuaSBrw6R5dMO2c3PDpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iSGFrdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IlBvaXN0YSBsdWtpdHVzIGxpdVwndXR0YW1hbGxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJMaWl0w6Qga3V1bG9ra2VldCBrdXVsbGFrc2VzaSwgbWl0w6QgbsOkcHDDpGltacOkIHBhaW5hdCBraXJqb2l0dGFlc3Nhc2kgc2FsYXNhbmFhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlBpc3RlLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IkrDpHJqZXN0ZWxtw6QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkJsdWV0b290aC3DpMOkbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IkxhbmdhdG9uIG7DpHl0dMO2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IlZhbG1pcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik1lZGlhbiDDpMOkbmVudG9pc3RvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJZaGRpc3TDpCBsYWl0dGVlc2VlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IkzDpGhldMOkIG7DpHl0dMO2IGxhaXR0ZWVzZWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iRXRzaXTDpMOkbiBsYWl0dGVpdGHigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJBc2V0dWtzZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iS2F0a2Fpc2UgeWh0ZXlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IkV0c2l0w6TDpG4uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJZaGRpc3RldMOkw6RuLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJLw6R5dGV0dMOkdmlzc8OkIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iUGVpdHRva3V2YSAjIDx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+IHggPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHN1b2phdHR1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJMYW5nYXRvbiBuw6R5dHTDtiBvbiB5aGRpc3RldHR5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IlTDpG3DpCBydXV0dSBuw6RreXkgdG9pc2VsbGEgbGFpdHRlZWxsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJMw6RoZXRldMOkw6RuIG7DpHl0dMO2w6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJZaGRpc3RldMOkw6RuIG7DpHl0dMO2w7ZuIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IkzDpGhldGV0w6TDpG4gbsOkeXR0w7bDpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iWWhkaXN0ZXR0eSBuw6R5dHTDtsO2biA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iS2F0a2Fpc2UgeWh0ZXlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJIw6R0w6RwdWhlbHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJVbm9odHVudXQga3V2aW8iPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTYsMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iWXJpdMOkIHV1ZC4gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gcyBrdWwuIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IllyaXTDpCBtecO2aGVtbWluIHV1ZGVsbGVlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJQb2lzdHUga29rbyBuw6R5dMO2biB0aWxhc3RhIGxpdVwndXR0YW1hbGxhIGFsYXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlBvaXN0dSBrb2tvIG7DpHl0w7ZuIHRpbGFzdGEgcHl5aGvDpGlzZW3DpGxsw6QgYWxhcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IlZhbG1pcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IlR1bnRpZW4geW1weXLDpG5tdW90b2luZW4gbGl1a3Vzw6TDpGRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iTWludXV0dGllbiB5bXB5csOkbm11b3RvaW5lbiBsaXVrdXPDpMOkZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlZhbGl0c2UgdHVubml0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iVmFsaXRzZSBtaW51dXRpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iUMOkaXbDpHJ1dWR1a2tvIGt1dWthdXNpdHRhaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJWdW9zaWx1ZXR0ZWxvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJWYWxpdHNlIGt1dWthdXNpIGphIHDDpGl2w6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJWYWxpdHNlIHZ1b3NpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBvbiB2YWxpdHR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gcG9pc3RldHRpaW4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKaW5kZXggMzg1ZWQ0Yi4uYzY4MDZjMSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IlZldWlsbGV6IHNhaXNpciB1bmUgY2zDqSBQVUsgY29tcG9ydGFudCBhdSBtb2lucyBodWl0wqBjaGlmZnJlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iVm90cmUgY2FydGUgU0lNIGVzdCB2ZXJyb3VpbGzDqWUgcGFyIGNsw6kgUFVLLiBTYWlzaXNzZXogbGEgY2zDqSBQVUsgcG91ciBsYSBkw6l2ZXJyb3VpbGxlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJTYWlzaXNzZXogbGEgY2zDqSBQVUsyIHBvdXIgZMOpYmxvcXVlciBsYSBjYXJ0ZSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iT3DDqXJhdGlvbiBpbmZydWN0dWV1c2UuIEFjdGl2ZXogbGUgdmVycm91aWxsYWdlIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IklsIHZvdXMgcmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2ZSBhdmFudCBxdWUgdm90cmUgY2FydGUgU0lNIHNvaXQgdmVycm91aWxsw6llLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IklsIHZvdXMgcmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2ZShzKSBhdmFudCBxdWUgdm90cmUgY2FydGUgU0lNIHNvaXQgdmVycm91aWxsw6llLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iQ29kZSBJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJOdW3DqXJvIGRlIGxcJ2FwcGVsYW50IChlbnRyYW50KSI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGF1dG9yaXPDqWUgZGUgc1wnYXNzb2NpZXIgw6AgbFwnaW50ZXJmYWNlIGRlIHBsdXMgaGF1dCBuaXZlYXUgZFwndW4gc2VydmljZSBSUFYuIExlcyBhcHBsaWNhdGlvbnMgc3RhbmRhcmRzIG5lIGRvaXZlbnQgamFtYWlzIGF2b2lyIHJlY291cnMgw6AgY2V0dGUgZm9uY3Rpb25uYWxpdMOpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJzZSBmaXhlciDDoCB1biBmb25kIGRcJ8OpY3JhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGF1dG9yaXPDqWUgZGUgc1wnYXNzb2NpZXIgw6AgbFwnaW50ZXJmYWNlIGRlIHBsdXMgaGF1dCBuaXZlYXUgZFwndW4gZm9uZCBkXCfDqWNyYW4uIExlcyBhcHBsaWNhdGlvbnMgc3RhbmRhcmRzIG5lIGRvaXZlbnQgamFtYWlzIGF2b2lyIHJlY291cnMgw6AgY2V0dGUgZm9uY3Rpb25uYWxpdMOpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4ibGllciDDoCB1biDDqWNyYW4gZGlzdGFudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBhdXRvcmlzw6llIGRlIHNcJ2Fzc29jaWVyIMOgIGxcJ2ludGVyZmFjZSBkZSBwbHVzIGhhdXQgbml2ZWF1IGRcJ3VuIMOpY3JhbiBkaXN0YW50LiBMZXMgYXBwbGljYXRpb25zIHN0YW5kYXJkcyBuZSBkb2l2ZW50IGphbWFpcyBhdm9pciByZWNvdXJzIMOgIGNldHRlIGZvbmN0aW9ubmFsaXTDqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJzXCdhc3NvY2llciDDoCB1biBzZXJ2aWNlIGRlIHdpZGdldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gYXV0b3Jpc8OpZSBkZSBzXCdhc3NvY2llciDDoCBsXCdpbnRlcmZhY2UgZGUgcGx1cyBoYXV0IG5pdmVhdSBkXCd1biBzZXJ2aWNlIGRlIHdpZGdldC4gTGVzIGFwcGxpY2F0aW9ucyBzdGFuZGFyZHMgbmUgZG9pdmVudCBqYW1haXMgYXZvaXIgcmVjb3VycyDDoCBjZXR0ZSBmb25jdGlvbm5hbGl0w6kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaW50ZXJhZ2lyIGF2ZWMgbFwnYWRtaW5pc3RyYXRldXIgZFwndW4gcMOpcmlwaMOpcmlxdWUiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkXCd1dGlsaXNlciBsZXMgZm9uY3Rpb25uYWxpdMOpcyBkZSBiYXMgbml2ZWF1IGRlIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImxpcmUgbGEgbcOpbW9pcmUgdGFtcG9uIGdyYXBoaXF1ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgbGlyZSBsZSBjb250ZW51IGRlIGxhIG3DqW1vaXJlIHRhbXBvbiBncmFwaGlxdWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iYWNjw6lkZXIgw6AgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkXCd1dGlsaXNlciBsZXMgZm9uY3Rpb25uYWxpdMOpcyBkZSBiYXMgbml2ZWF1IGRlIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4iY29uZmlndXJlciBsZXMgw6ljcmFucyBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkZSBjb25maWd1cmVyIGRlcyDDqWNyYW5zIFdpLUZpIGV0IGRlIHNcJ3kgY29ubmVjdGVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iY29udHLDtGxlciBsZXMgw6ljcmFucyBXaS1GaSI8L3N0cmluZz4KQEAgLTc4Myw3ICs3OTIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFlhaG9vIiBtc2dpZD0iODI3MTQzOTQwODQ2OTAyMTI3MyI+IllhaG9vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFNreXBlIiBtc2dpZD0iOTAxOTI5Njc0NDYyMjgzMjk1MSI+IlNreXBlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFFxIiBtc2dpZD0iODg4NzQ4NDM3OTQ5NDExMTg4NCI+IlFRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEdvb2dsZVRhbGsiIG1zZ2lkPSI0OTM5MDIzMjExNDAyNzczMDQiPiJDb252ZXJzYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEdvb2dsZVRhbGsiIG1zZ2lkPSI0OTM5MDIzMjExNDAyNzczMDQiPiJIYW5nb3V0cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xJY3EiIG1zZ2lkPSIxNTc0ODcwNDMzNjA2NTE3MzE1Ij4iSUNRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEphYmJlciIgbXNnaWQ9IjIyNzk5MTc2MzA4NzU3NzE3MjIiPiJKYWJiZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTmV0TWVldGluZyIgbXNnaWQ9IjgyODc2MjU2NTU5ODY4Mjc5NzEiPiJOZXRNZWV0aW5nIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iTWFqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50csOpZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlPDqWxlY3Rpb25uZXogdW5lIGFwcGxpY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iSW1wb3NzaWJsZSBkZSBsYW5jZXIgbFwnYXBwbGljYXRpb24gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IlBhcnRhZ2V6IGF2ZWMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iUGFydGFnZXIgYXZlYyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IlBvaWduw6llIGNvdWxpc3NhbnRlLiBBcHB1eWV6IGRlIG1hbmnDqHJlIHByb2xvbmfDqWUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkZhaXJlIGdsaXNzZXIgbGUgZG9pZ3QgdmVycyBsZSBoYXV0wqA6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IkZhaXJlIGdsaXNzZXIgbGUgZG9pZ3QgdmVycyBsZSBiYXPCoDogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRmFpdGVzIGdsaXNzZXIgdm90cmUgZG9pZ3QgdmVycyBsYSBnYXVjaGXCoHBvdXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJGYWl0ZXMgZ2xpc3NlciB2b3RyZSBkb2lndCB2ZXJzIGxhIGRyb2l0ZSBwb3VyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkTDqXZlcnJvdWlsbGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkFwcGFyZWlsIHBob3RvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+Ik1vZGUgc2lsZW5jaWV1eCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJTb24gYWN0aXbDqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iUmVjaGVyY2hlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iRmFpdGVzIGdsaXNzZXIgdm90cmUgZG9pZ3QgcG91ciBkw6l2ZXJyb3VpbGxlciBsXCdhcHBhcmVpbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iQnJhbmNoZXogZGVzIMOpY291dGV1cnMgcG91ciBlbnRlbmRyZSBsXCfDqW5vbmPDqSBkZXMgdG91Y2hlcyBsb3JzIGRlIGxhIHNhaXNpZSBkdSBtb3QgZGUgcGFzc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUG9pbnQuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3lzdMOobWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkF1ZGlvIEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iQWZmaWNoYWdlIHNhbnMgZmlsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IlRlcm1pbsOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iU29ydGllIG11bHRpbcOpZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJDb25uZXhpb24gw6AgbFwnYXBwYXJlaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJEaWZmdXNlciBsXCfDqWNyYW4gc3VyIGxcJ2FwcGFyZWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iUmVjaGVyY2hlIGRcJ2FwcGFyZWlscyBlbiBjb3Vyc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IlBhcmFtw6h0cmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkTDqWNvbm5lY3RlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJBbmFseXNlIGVuIGNvdXJzLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iQ29ubmV4aW9uIGVuIGNvdXJzLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJEaXNwb25pYmxlIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iU3VwZXJwb3NpdGlvbiBuwrDCoDx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+wqA6IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz7CoHjCoDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPsKgcHBwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgc8OpY3VyaXPDqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iTFwnYWZmaWNoYWdlIHNhbnMgZmlsIGVzdCBjb25uZWN0w6kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkNldCDDqWNyYW4gc1wnYWZmaWNoZSBzdXIgdW4gYXV0cmUgYXBwYXJlaWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IkNvbm5leGlvbiDDoCBsXCfDqWNyYW4gZW4gY291cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJDb25uZXhpb24gYXUgcsOpc2VhdSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4gZW4gY291cnPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJEaWZmdXNpb24gZGUgbFwnw6ljcmFuIGVuIGNvdXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJDb25uZWN0w6kgw6AgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IkTDqWNvbm5lY3RlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iQXBwZWwgZFwndXJnZW5jZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IkpcJ2FpIG91Ymxpw6kgbGUgc2Now6ltYSI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1NiwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiJSw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz7CoHMiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iUsOpZXNzYXlleiBwbHVzIHRhcmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iQmFsYXlleiB2ZXJzIGxlIGJhcyBwb3VyIHF1aXR0ZXIgcGxlaW4gw6ljcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IkJhbGF5ZXogdmVycyBsZSBiYXMgcG91ciBxdWl0dGVyIGxlIG1vZGUgcGxlaW4gw6ljcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJUZXJtaW7DqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkN1cnNldXIgY2lyY3VsYWlyZSBkZXMgaGV1cmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJDdXJzZXVyIGNpcmN1bGFpcmUgZGVzIG1pbnV0ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iU8OpbGVjdGlvbm5leiBsZXMgaGV1cmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iU8OpbGVjdGlvbm5leiBsZXMgbWludXRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iQ2FsZW5kcmllciBtZW5zdWVsIHNvdXMgZm9ybWUgZGUgZ3JpbGxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iTGlzdGUgZGVzIGFubsOpZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlPDqWxlY3Rpb25uZXogdW4gbW9pcyBldCB1biBqb3VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iU8OpbGVjdGlvbm5leiB1bmUgYW5uw6llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+IsKrwqA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz7CoMK7IGEgw6l0w6kgc8OpbGVjdGlvbm7DqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+IsKrwqA8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPsKgwrsgYSDDqXTDqSBzdXBwcmltw6kiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCmluZGV4IDlhNDRhMzEuLjQ2YjFmNmEgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iU2Fpc2lzc2V6IHVuIGNvZGUgUFVLIGNvbXBvcnRhbnQgYXUgbW9pbnMgaHVpdMKgY2hpZmZyZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlZvdHJlIGNhcnRlIFNJTSBlc3QgdmVycm91aWxsw6llIHBhciBjbMOpIFBVSy4gU2Fpc2lzc2V6IGxhIGNsw6kgUFVLIHBvdXIgbGEgZMOpdmVycm91aWxsZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iU2Fpc2lzc2V6IGxhIGNsw6kgUFVLMiBwb3VyIGTDqWJsb3F1ZXIgbGEgY2FydGUgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IsOJY2hlYyBkZSBsXCdvcMOpcmF0aW9uLiBWZXVpbGxleiBhY3RpdmVyIGxlIHZlcnJvdWlsbGFnZSBkZSBsYSBjYXJ0ZSBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJJbCB2b3VzIHJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgdGVudGF0aXZlIGF2YW50IHF1ZSB2b3RyZSBjYXJ0ZSBTSU0gbmUgc29pdCB2ZXJyb3VpbGzDqWUuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iSWwgdm91cyByZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoHRlbnRhdGl2ZXMgYXZhbnQgcXVlIHZvdHJlIGNhcnRlIFNJTSBuZSBzb2l0IHZlcnJvdWlsbMOpZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IkNvZGUgSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iQ29kZSBNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJOdW3DqXJvIGRlIGxcJ2FwcGVsYW50IChlbnRyYW50KSI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGF1dG9yaXPDqWUgZGUgc1wnYXNzb2NpZXIgw6AgbFwnaW50ZXJmYWNlIGRlIHBsdXMgaGF1dCBuaXZlYXUgZFwndW4gc2VydmljZcKgVlBOLiBMZXMgYXBwbGljYXRpb25zIHN0YW5kYXJkcyBuZSBkb2l2ZW50IGphbWFpcyBhdm9pciByZWNvdXJzIMOgIGNldHRlIGZvbmN0aW9ubmFsaXTDqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iU2UgZml4ZXIgc3VyIHVuIGZvbmQgZFwnw6ljcmFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gYXV0b3Jpc8OpZSBkZSBzXCdhc3NvY2llciDDoCBsXCdpbnRlcmZhY2UgZGUgcGx1cyBoYXV0IG5pdmVhdSBkXCd1biBmb25kIGRcJ8OpY3Jhbi4gTGVzIGFwcGxpY2F0aW9ucyBzdGFuZGFyZHMgbmUgZG9pdmVudCBqYW1haXMgYXZvaXIgcmVjb3VycyDDoCBjZXR0ZSBmb25jdGlvbm5hbGl0w6kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJzXCdhc3NvY2llciDDoCB1biDDqWNyYW4gw6AgZGlzdGFuY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJQZXJtZXR0cmUgw6AgbFwnYXBwbGljYXRpb24gYXV0b3Jpc8OpZSBkZSBzXCdhc3NvY2llciDDoCBsXCdpbnRlcmZhY2UgZGUgbml2ZWF1IHN1cMOpcmlldXIgZFwndW4gw6ljcmFuIMOgIGRpc3RhbmNlLiBDZXR0ZSBmb25jdGlvbm5hbGl0w6kgbmUgZGV2cmFpdCBwYXMgw6p0cmUgbsOpY2Vzc2FpcmUgcG91ciBsZXMgYXBwbGljYXRpb25zIHN0YW5kYXJkcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJhc3NvY2llciDDoCB1biBzZXJ2aWNlIHdpZGdldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gYXV0b3Jpc8OpZSBkZSBzXCdhc3NvY2llciDDoCBsXCdpbnRlcmZhY2UgZGUgcGx1cyBoYXV0IG5pdmVhdSBkXCd1biBzZXJ2aWNlIHdpZGdldC4gTGVzIGFwcGxpY2F0aW9ucyBzdGFuZGFyZHMgbmUgZG9pdmVudCBqYW1haXMgYXZvaXIgcmVjb3VycyDDoCBjZXR0ZSBmb25jdGlvbm5hbGl0w6kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaW50ZXJhZ2lyIGF2ZWMgbFwnYWRtaW5pc3RyYXRldXIgZHUgcMOpcmlwaMOpcmlxdWUiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkXCd1dGlsaXNlciBsZXMgZm9uY3Rpb25uYWxpdMOpcyBkZSBiYXMgbml2ZWF1IGRlIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IkxlY3R1cmUgZGUgbGEgbcOpbW9pcmUgdGFtcG9uIGdyYXBoaXF1ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgbGlyZSBsZSBjb250ZW51IGRlIGxhIG3DqW1vaXJlIHRhbXBvbiBncmFwaGlxdWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iYWNjw6lkZXIgw6AgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkXCd1dGlsaXNlciBsZXMgZm9uY3Rpb25uYWxpdMOpcyBkZSBiYXNlIGRcJ0lucHV0Rmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ImNvbmZpZ3VyZXIgbGVzIMOpY3JhbnMgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgY29uZmlndXJlciBkZXMgw6ljcmFucyBXaS1GaSBldCBkZSBzXCd5IGNvbm5lY3Rlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ImNvbnRyw7RsZXIgbGVzIMOpY3JhbnMgV2ktRmkiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJNYWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRyw6llIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iU8OpbGVjdGlvbm5leiB1bmUgYXBwbGljYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiJJbXBvc3NpYmxlIGRlIGxhbmNlciBsXCdhcHBsaWNhdGlvbiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IlBhcnRhZ2VyIGF2ZWMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iUGFydGFnZXIgYXZlYyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IlBvaWduw6llIGNvdWxpc3NhbnRlLiBBcHB1eWV6IGRlIG1hbmnDqHJlIHByb2xvbmfDqWUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkZhaXRlcyBnbGlzc2VyIHZlcnMgbGUgaGF1dCBwb3VyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJGYWl0ZXMgZ2xpc3NlciB2ZXJzIGxlIGJhcyBwb3VyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJGYWl0ZXMgZ2xpc3NlciB2ZXJzIGxhIGdhdWNoZSBwb3VyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iRmFpdGVzIGdsaXNzZXIgdmVycyBsYSBkcm9pdGUgcG91ciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJEw6l2ZXJyb3VpbGxlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJBcHBhcmVpbCBwaG90byI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJNb2RlIHNpbGVuY2lldXgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU29uIGFjdGl2w6kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlJlY2hlcmNoZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJGYWl0ZXMgZ2xpc3NlciB2b3RyZSBkb2lndCBwb3VyIGTDqXZlcnJvdWlsbGVyIGxcJ2FwcGFyZWlsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJCcmFuY2hleiBkZXMgw6ljb3V0ZXVycyBwb3VyIGVudGVuZHJlIGxcJ8Opbm9uY8OpIGRlcyB0b3VjaGVzIGxvcnMgZGUgbGEgc2Fpc2llIGR1IG1vdCBkZSBwYXNzZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJQb2ludC4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTeXN0w6htZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQXVkaW8gQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJBZmZpY2hhZ2Ugc2FucyBmaWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iT0siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJTb3J0aWUgbXVsdGltw6lkaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IkNvbm5leGlvbiDDoCBsXCdhcHBhcmVpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IkRpZmZ1c2VyIGxcJ8OpY3JhbiBzdXIgbFwnYXBwYXJlaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJSZWNoZXJjaGUgZFwnYXBwYXJlaWxzIGVuIGNvdXJz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iUGFyYW3DqHRyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iRMOpY29ubmVjdGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IkFuYWx5c2UgZW4gY291cnMuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJDb25uZXhpb24gZW4gY291cnMuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkRpc3BvbmlibGUiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJTdXBlcnBvc2l0aW9uIG7CsMKgPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7CoDogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPsKgeMKgPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+wqBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBzw6ljdXJpc8OpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJMXCdhZmZpY2hhZ2Ugc2FucyBmaWwgZXN0IGNvbm5lY3TDqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iQ2V0IMOpY3JhbiBzXCdhZmZpY2hlIHN1ciB1biBhdXRyZSBhcHBhcmVpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iRGlmZnVzaW9uIGRlIGxcJ8OpY3JhbiBlbiBjb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IkNvbm5leGlvbiDDoCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4gZW4gY291cnPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJEaWZmdXNpb24gZGUgbFwnw6ljcmFuIGVuIGNvdXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJDb25uZWN0w6kgw6AgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IkTDqWNvbm5lY3RlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iQXBwZWwgZFwndXJnZW5jZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IkpcJ2FpIG91Ymxpw6kgbGUgc2Now6ltYSI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1NiwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiJSw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz7CoHMiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iVmV1aWxsZXogcsOpZXNzYXllciB1bHTDqXJpZXVyZW1lbnQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IkJhbGF5ZXIgdmVycyBsZSBiYXMgcG91ciBxdWl0dGVyIGxlIHBsZWluIMOpY3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJGYWl0ZXMgZ2xpc3NlciBsZSBkb2lndCB2ZXJzIGxlIGJhcyBwb3VyIHF1aXR0ZXIgbGUgbW9kZSBwbGVpbiDDqWNyYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJPSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkN1cnNldXIgY2lyY3VsYWlyZSBkZXMgaGV1cmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJDdXJzZXVyIGNpcmN1bGFpcmUgZGVzIG1pbnV0ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iU8OpbGVjdGlvbm5lciB1bmUgaGV1cmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJTw6lsZWN0aW9ubmVyIGRlcyBtaW51dGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJDYWxlbmRyaWVyIG1lbnN1ZWwgc291cyBmb3JtZSBkZSBncmlsbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJMaXN0ZSBkZXMgYW5uw6llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iU8OpbGVjdGlvbm5lciB1biBtb2lzIGV0IHVuIGpvdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJTw6lsZWN0aW9ubmVyIHVuZSBhbm7DqWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iXCI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz5cIiBzw6lsZWN0aW9ubsOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iXCI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPlwiIHN1cHByaW3DqSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKaW5kZXggNzM1NzViZC4uNjkzMDdhYSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLgpJDgpLjgpL4gUFVLIOCksuCkv+CkluClh+CkgiDgpJzgpYsgOCDgpIXgpILgpJXgpYvgpIIg4KSv4KS+IOCkheCkp+Ckv+CklSDgpJXgpL4g4KS54KWLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiLgpIbgpKrgpJXgpL4g4KS44KS/4KSuIOCkleCkvuCksOCljeCkoSBQVUsg4KSy4KWJ4KSVIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4g4KS54KWILiDgpIfgpLjgpYcg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIFBVSyDgpJXgpYvgpKEg4KSy4KS/4KSW4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IuCkuOCkv+CkriDgpJXgpL7gpLDgpY3gpKEg4KSF4KSo4KSs4KWN4oCN4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIFBVSzIg4KSy4KS/4KSW4KWH4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuCkheCkuOCkq+Cksiwg4KS44KS/4KSuLy9SVUlNIOCksuClieCklSDgpLjgpJXgpY3gpLfgpK4g4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IuCkuOCkv+CkriDgpJXgpYcg4KSy4KWJ4KSVIOCkueCliyDgpJzgpL7gpKjgpYcg4KS44KWHIOCkquCkueCksuClhyDgpIbgpKrgpJXgpYcg4KSq4KS+4KS4IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKrgpY3gpLDgpK/gpL7gpLgg4KS24KWH4KS3IOCkueCliC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLgpLjgpL/gpK4g4KSV4KWHIOCksuClieCklSDgpLngpYsg4KSc4KS+4KSo4KWHIOCkuOClhyDgpKrgpLngpLLgpYcg4KSG4KSq4KSV4KWHIOCkquCkvuCkuCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSq4KWN4KSw4KSv4KS+4KS4IOCktuClh+CktyDgpLngpYjgpIIuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLgpIfgpKjgpJXgpK7gpL/gpILgpJcg4KSV4KWJ4KSy4KSwIElEIjwvc3RyaW5nPgpAQCAtMTUwLDkgKzE1NSw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQ5NzkyMTc1MjQyODIxMzUzIj4i4KSG4KSq4KSV4KS+IOCkq+CkvOCli+CkqCDgpLbgpJ8g4KSh4KS+4KSJ4KSoIOCkueCliyDgpJzgpL7gpI/gpJfgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybV9xdWVzdGlvbiIgbXNnaWQ9IjI5MDY1NDQ3Njg4ODExMzYxODMiPiLgpJXgpY3igI3gpK/gpL4g4KSG4KSqIOCktuCknyDgpKHgpL7gpIngpKgg4KSV4KSw4KSo4KS+IOCkmuCkvuCkueCkpOClhyDgpLngpYjgpII/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX3RpdGxlIiBtc2dpZD0iNzA1NDUwOTkxNDUwMDE0MDM2MSI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpK7gpYvgpKEg4KSu4KWH4KSCIOCksOClgOCkrOClguCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfY29uZmlybSIgbXNnaWQ9IjU1MjkzOTQ0NTAyNzg0NjY4Ij4i4KSV4KWN4KSv4KS+IOCkhuCkqiDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSu4KWL4KShIOCkruClh+CkgiDgpLDgpYDgpKzgpYLgpJ8g4KSV4KSw4KSo4KS+IOCkmuCkvuCkueCkpOClhyDgpLngpYjgpII/IOCkh+CkuOCkuOClhyDgpIbgpKrgpJXgpYcg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpLngpYHgpI8g4KS44KSt4KWAIOCkpOClg+CkpOClgOCkryDgpKrgpJXgpY3gpLcg4KSP4KSq4KWN4KS4IOCkheCkleCljeCkt+CkriDgpLngpYsg4KSc4KS+4KSP4KSC4KSX4KWHLiDgpJzgpKwg4KSG4KSqIOCkq+Ckv+CksCDgpLjgpYcg4KSw4KWA4KSs4KWC4KSfIOCkleCksOClh+CkguCkl+ClhyDgpKTgpYsg4KS14KWHIOCkquClgeCkqOCksOCljeCkuOCljeCkpeCkvuCkquCkv+CkpCDgpLngpYsg4KSc4KS+4KSP4KSC4KSX4KWHLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV9jb25maXJtIiBtc2dpZD0iNTUyOTM5NDQ1MDI3ODQ2NjgiPiLgpJXgpY3gpK/gpL4g4KSG4KSqIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpK7gpYvgpKEg4KSu4KWH4KSCIOCksOClgOCkrOClguCknyDgpJXgpLDgpKjgpL4g4KSa4KS+4KS54KSk4KWHIOCkueCliOCkgj8g4KSH4KS44KS44KWHIOCkhuCkquCkleClhyDgpIfgpILgpLjgpY3gpJ/gpYngpLIg4KSV4KS/4KSPIOCkueClgeCkjyDgpLjgpK3gpYAg4KSk4KWD4KSk4KWA4KSvIOCkquCkleCljeCktyDgpJDgpKrgpY3gpLggIOCkheCkleCljeCkt+CkriDgpLngpYsg4KSc4KS+4KSP4KSC4KSX4KWHLiDgpJzgpKwg4KSG4KSqIOCkq+Ckv+CksCDgpLjgpYcg4KSw4KWA4KSs4KWC4KSfIOCkleCksOClh+CkguCkl+ClhyDgpKTgpYsg4KS14KWHIOCkquClgeCkqOCksOCljeCkuOCljeCkpeCkvuCkquCkv+CkpCDgpLngpYsg4KSc4KS+4KSP4KSC4KSX4KWHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiLgpLngpL7gpLIg4KSV4KWHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+IuCkleCli+CkiCDgpLngpL7gpLIg4KS54KWAIOCkleClhyDgpI/gpKrgpY3gpLgg4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX3JlY2VudF90YXNrcyIgbXNnaWQ9Ijg3OTQ5MDY2NTg3MzIxOTM0NzMiPiLgpJXgpYvgpIgg4KS54KS+4KSyIOCkueClgCDgpJXgpYcg4KSQ4KSq4KWN4KS4ICDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQwODQ3NzE0MDA4ODA1MzY2NSI+IuCkn+Clh+CkrOCksuClh+CknyDgpLXgpL/gpJXgpLLgpY3igI3gpKoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiLgpKvgpLzgpYvgpKgg4KS14KS/4KSV4KSy4KWN4oCN4KSqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrIiBtc2dpZD0iMjg0NDk0NTE5MTc5MjExOTcxMiI+IuCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpLLgpYngpJUiPC9zdHJpbmc+CkBAIC0yMDUsOCArMjEwLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMjkzMzY2NzM3MjI4OTU2NzcxNCI+IuCkmuCkv+CkpOCljeCksCDgpK/gpL4g4KS14KWA4KSh4KS/4KSv4KWLIOCkleCliOCkquCljeKAjeCkmuCksCDgpJXgpYcg4KSy4KS/4KSPIOCkleCliOCkruCksOClhyDgpKrgpLAg4KS44KWA4KSn4KWAIOCkquCkueClgeCkguCkmi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc2NyZWVubG9jayIgbXNnaWQ9IjgyNzU1MDAxNzMzMzA3MTgxNjgiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KSy4KWJ4KSVIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc2NyZWVubG9jayIgbXNnaWQ9IjcwNjc0OTcxMjg5MjU0OTk0MDEiPiLgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkleClgCDgpLLgpYngpJUg4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkleCkviDgpLXgpY3gpK/gpLXgpLngpL7gpLAg4KSq4KWN4KSw4KSt4KS+4KS14KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYAg4KSV4KWN4KS34KSu4KSk4KS+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hcHBJbmZvIiBtc2dpZD0iODAyODc4OTc2MjYzNDE0NzcyNSI+IuCkhuCkquCkleClhyDgpI/gpKrgpY3igI3gpLgg4KSV4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXBwSW5mbyIgbXNnaWQ9IjM5NTAzNzg1MzgwNDk2MjU5MDciPiLgpIXgpKrgpKjgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkquCksCDgpIXgpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLXgpY3igI3gpK/gpLXgpLngpL7gpLAg4KSV4KWLIOCkquCljeCksOCkreCkvuCkteCkv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkleCljeCkt+CkruCkpOCkvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXBwSW5mbyIgbXNnaWQ9IjgwMjg3ODk3NjI2MzQxNDc3MjUiPiLgpIbgpKrgpJXgpYcg4KSQ4KSq4KWN4KS4IOCkleClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FwcEluZm8iIG1zZ2lkPSIzOTUwMzc4NTM4MDQ5NjI1OTA3Ij4i4KSF4KSq4KSo4KWHIOCkieCkquCkleCksOCkoyDgpKrgpLAg4KSF4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpYcg4KS14KWN4oCN4KSv4KS14KS54KS+4KSwIOCkleCliyDgpKrgpY3gpLDgpK3gpL7gpLXgpL/gpKQg4KSV4KSw4KSo4KWHIOCkleClgCDgpJXgpY3gpLfgpK7gpKTgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dhbGxwYXBlciIgbXNnaWQ9IjM4NTAyODAxNTgwNDExNzU5OTgiPiLgpLXgpYngpLLgpKrgpYfgpKrgpLAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dhbGxwYXBlciIgbXNnaWQ9IjU2MzA0MTc4NTQ3NTA1NDAxNTQiPiLgpIngpKrgpJXgpLDgpKMg4KSV4KWAIOCkteClieCksuCkquClh+CkquCksCDgpLjgpYfgpJ/gpL/gpILgpJcg4KSs4KSm4KSy4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1DbG9jayIgbXNnaWQ9IjQwNjUzNTc1OTIzNjYxMjk5MiI+IuCkmOCkoeCkvOClgCI8L3N0cmluZz4KQEAgLTIyNCw5ICsyMjksOSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbVRvb2xzIiBtc2dpZD0iNDY1MjE5MTY0NDA4MjcxNDA0OCI+IuCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJ/gpYLgpLIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbVRvb2xzIiBtc2dpZD0iODE2MjEwMjYwMjE5MDczNDMwNSI+IuCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJXgpL4g4KSo4KS/4KSu4KWN4oCN4KSoLeCkuOCljeKAjeCkpOCksCDgpKrgpLngpYHgpILgpJog4KSU4KSwIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkoy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGV2ZWxvcG1lbnRUb29scyIgbXNnaWQ9IjM0NDYxNjQ1ODQ3MTA1OTY1MTMiPiLgpKHgpYfgpLXgpLLgpKrgpK7gpYfgpILgpJ8g4KSf4KWC4KSyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iNzA1ODgyODAzMjM1ODE0MjAxOCI+IuCkuOClgeCkteCkv+Ckp+CkvuCkj+CkgiDgpJzgpYsg4KSV4KWH4KS14KSyIOCkj+CkquCljeCkuCDgpKHgpYfgpLXgpLLgpKrgpLAg4KSV4KWHIOCksuCkv+CkjyDgpIbgpLXgpLbgpY3gpK/gpJUg4KS54KWI4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaXNwbGF5IiBtc2dpZD0iNDI3OTkwOTY3NjAzNjQwMjYzNiI+IuCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLggVUkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Rpc3BsYXkiIG1zZ2lkPSI2MDUxMDAyMDMxOTMzMDEzNzE0Ij4i4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcgVUkg4KSV4KWLIOCkquCljeCksOCkreCkvuCkteCkv+CkpCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iNzA1ODgyODAzMjM1ODE0MjAxOCI+IuCkuOClgeCkteCkv+Ckp+CkvuCkj+CkgiDgpJzgpYsg4KSV4KWH4KS14KSyIOCkkOCkquCljeCkuCAg4KSh4KWH4KS14KSy4KSq4KSwIOCkleClhyDgpLLgpL/gpI8g4KSG4KS14KS24KWN4KSv4KSVIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGlzcGxheSIgbXNnaWQ9IjQyNzk5MDk2NzYwMzY0MDI2MzYiPiLgpIXgpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IFVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaXNwbGF5IiBtc2dpZD0iNjA1MTAwMjAzMTkzMzAxMzcxNCI+IuCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIFVJIOCkleCliyDgpKrgpY3gpLDgpK3gpL7gpLXgpL/gpKQg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdG9yYWdlIiBtc2dpZD0iMTk3MTExODc3MDU0NjMzNjk2NiI+IuCkuOCkguCkl+CljeCksOCkueCkoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3NDQyMzE4NTAyNDQ2ODc0OTk5Ij4iVVNCIOCkuOCkguCkl+CljeCksOCkueCkoyDgpK7gpYfgpIIg4KSq4KS54KWB4KSC4KSa4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KSu4KWH4KSCIOCkquCkueClgeCkguCkmuClh+Ckgi4iPC9zdHJpbmc+CkBAIC0yMzcsNDQzICsyNDIsNDQ3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iMzEwODcyMzM2NDY3NjY2NzMyMCI+IuCkuOCljeCkquCksOCljeCktiDgpKbgpY3gpLXgpL7gpLDgpL4g4KSP4KSV4KWN4KS44KSq4KWN4KSy4KWL4KSwIOCkleCksOClh+CkgiDgpJXgpYsg4KSa4KS+4KSy4KWCIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjU4MDA1NTI1MTY3NzkyNDkzNTYiPiLgpLjgpY3gpKrgpLDgpY3gpLYg4KSV4KS/4KSPIOCkl+CkjyDgpIbgpIfgpJ/gpK4g4KSc4KS84KWL4KSwIOCkuOClhyDgpKzgpYvgpLLgpYcg4KSc4KS+4KSP4KSC4KSX4KWHIOCklOCksCDgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSV4KWLIOCknOClh+CkuOCljeCkmuCksCDgpJXgpYcg4KSJ4KSq4KSv4KWL4KSXIOCkuOClhyDgpI/gpJXgpY3gpLjgpKrgpY3gpLLgpYvgpLAg4KSV4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpYfgpJfgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTczOTg4MTc2NjUyMjU5NDA3MyI+IuCkj+CkqOCljeCkueCkvuCkguCkuCDgpJXgpYAg4KSX4KSIIOCkteClh+CkrCDgpIbgpLjgpL7gpKgg4KSk4KSw4KWA4KSV4KS+IOCkmuCkvuCksuClgiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9Ijc4ODEwNjM5NjE1MDc1MTE3NjUiPiLgpI/gpKrgpY3gpLgg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkleCliyDgpIXgpKfgpL/gpJUg4KSq4KS54KWB4KSC4KSaLeCkr+Cli+Ckl+CljeCkryDgpKzgpKjgpL7gpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpLjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpJ8g4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpJzgpL4g4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9Ijc4ODEwNjM5NjE1MDc1MTE3NjUiPiLgpJDgpKrgpY3gpLggIOCkuOCkvuCkruCkl+CljeCksOClgCDgpJXgpYsg4KSF4KSn4KS/4KSVIOCkquCkueClgeCkguCkmi3gpK/gpYvgpJfgpY3gpK8g4KSs4KSo4KS+4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KWN4KSV4KWN4KSw4KS/4KSq4KWN4KSfIOCkh+CkguCkuOCljeCkn+ClieCksiDgpJXgpL/gpI8g4KSc4KS+IOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iMjEwMzQ0MDM5MTkwMjQxMjE3NCI+IuCkhuCkquCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSy4KS/4KSW4KWHIOCkueClgeCkjyDgpKrgpL7gpKAg4KSV4KWLIOCkp+CljeCkr+CkvuCkqCDgpLjgpYcg4KSm4KWH4KSW4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i4KSV4KWN4KSw4KWH4KSh4KS/4KSfIOCkleCkvuCksOCljeCkoSDgpKjgpILgpKzgpLAg4KSU4KSwIOCkquCkvuCkuOCkteCksOCljeCkoSDgpJzgpYjgpLjgpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCkoeClh+Ckn+CkviDgpLbgpL7gpK7gpL/gpLIg4KS54KWL4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLgpLjgpY3igI3gpKXgpL/gpKTgpL8g4KSs4KS+4KSwIOCkheCkleCljeCkt+CkriDgpK/gpL4g4KSs4KSm4KSy4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KS44KWN4KSl4KS/4KSk4KS/IOCkrOCkvuCksCDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KSo4KWHIOCkr+CkviDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KSG4KSH4KSV4KSoIOCkleCliyDgpJzgpYvgpKHgpLzgpKjgpYcg4KSv4KS+IOCkqOCkv+CkleCkvuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpY3gpKXgpL/gpKTgpL8g4KSs4KS+4KSwIOCkheCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSv4KS+IOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpIbgpIfgpJXgpKgg4KSV4KWLIOCknOCli+CkoeCkvOCkqOClhyDgpK/gpL4g4KSo4KS/4KSV4KS+4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzI0NzI4MTkxMTM4NzkzMTQ4NSI+IuCkuOCljeKAjeCkpeCkv+CkpOCkvyDgpKzgpL7gpLAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzE2MTEzNjYwNzk1OTc2MDYwIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLjgpY3igI3gpKXgpL/gpKTgpL8g4KSs4KS+4KSwIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MTYxMTM2NjA3OTU5NzYwNjAiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkuOCljeKAjeCkpeCkv+CkpOCkvyDgpKzgpL7gpLAg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSIxMTQ4MTk4Nzg1OTM3NDg5MjY0Ij4i4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkrOCkvuCksCDgpLXgpL/gpLjgpY3igI3gpKTgpYPgpKQv4KS44KSC4KSV4KWN4KS34KS/4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjY5MTc1NDk0MzcxMjk0MDExMzIiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkuOCljeCkpeCkv+CkpOCkvyDgpKzgpL7gpLAg4KSV4KWLIOCkteCkv+CkuOCljeCkpOClg+CkpCDgpK/gpL4g4KS44KSC4KSV4KWN4KS34KS/4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjY5MTc1NDk0MzcxMjk0MDExMzIiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpY3gpKXgpL/gpKTgpL8g4KSs4KS+4KSwIOCkleCliyDgpLXgpL/gpLjgpY3gpKTgpYPgpKQg4KSv4KS+IOCkuOCkguCkleCljeCkt+Ckv+CkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxfc2hvcnRjdXQiIG1zZ2lkPSI0Mjc5MDcwMjE2MzcxNTY0MjM0Ij4i4KS24KWJ4KSw4KWN4KSf4KSV4KSfIOCkh+CkguCkuOCljeKAjeCkn+ClieCksiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsX3Nob3J0Y3V0IiBtc2dpZD0iODM0MTI5NTkxNjI4NjczNjk5NiI+IuCkj+CkquCljeKAjeCksuCkv+CkleClh+CktuCkqCDgpJXgpYsg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleClhyDgpLngpLjgpY3igI3gpKTgpJXgpY3gpLfgpYfgpKog4KSV4KWHIOCkrOCkv+CkqOCkviDgpLngpYvgpK7gpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KS24KWJ4KSw4KWN4KSf4KSV4KSfIOCknOCli+CkoeCkvOCkqOClhyDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91bmluc3RhbGxfc2hvcnRjdXQiIG1zZ2lkPSI0NzI5NjM0NTI0MDQ0MDAzNjk5Ij4i4KS24KWJ4KSw4KWN4KSf4KSV4KSfIOCkheCkqOCkh+CkguCkuOCljeCkn+ClieCksiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191bmluc3RhbGxfc2hvcnRjdXQiIG1zZ2lkPSI2NzQ1NzQzNDc0MjY1MDU3OTc1Ij4i4KSP4KSq4KWN4oCN4KSy4KS/4KSV4KWH4KS24KSoIOCkleCliyDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSV4KWHIOCkueCkuOCljeKAjeCkpOCkleCljeCkt+Clh+CkqiDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkueCli+CkruCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpLbgpYngpLDgpY3gpJ/gpJXgpJ8g4KSo4KS/4KSV4KS+4KSy4KSo4KWHIOCkleClgCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iMzkwNjAwNzgzMTE5Mjk5MDk0NiI+IuCkhuCkieCkn+Ckl+Cli+Ckh+CkguCklyDgpJXgpYngpLIg4KSV4KWLIOCkleCkueClgOCkgiDgpJTgpLAg4KSt4KWH4KSc4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSI1MzMxMzE4OTMxOTM3NDAyMDQwIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpIbgpIngpJ/gpJfgpYvgpIfgpILgpJcg4KSV4KWJ4KSyIOCkuOCkguCkuOCkvuCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSU4KSwIOCkoeCkvuCkr+CksiDgpJXgpL/gpI8g4KSc4KS+4KSo4KWHIOCkteCkvuCksuCkviDgpKjgpILgpKzgpLAg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpIbgpIngpJ/gpJfgpYvgpIfgpILgpJcg4KSV4KWJ4KSyIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSV4KSw4KSo4KWHLCDgpLDgpYDgpKHgpL7gpK/gpLDgpYfgpJXgpY3igI3gpJ8g4KSV4KSw4KSo4KWHLCDgpK/gpL4g4KSJ4KSo4KWN4oCN4KS54KWH4KSCIOCksOCli+CkleCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iNTMzMTMxODkzMTkzNzQwMjA0MCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSG4KSJ4KSf4KSX4KWL4KSH4KSC4KSXIOCkleClieCksiDgpLjgpILgpLjgpL7gpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCklOCksCDgpKHgpL7gpK/gpLIg4KSV4KS/4KSPIOCknOCkvuCkqOClhyDgpLXgpL7gpLLgpL4g4KSo4KSC4KSs4KSwIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkkOCkquCljeCkuCDgpJXgpYsg4KSG4KSJ4KSf4KSX4KWL4KSH4KSC4KSXIOCkleClieCksiDgpJXgpYAg4KSo4KS/4KSX4KSw4KS+4KSo4KWAIOCkleCksOCkqOClhywg4KSw4KWA4KSh4KS+4KSv4KSw4KWH4KSV4KWN4oCN4KSfIOCkleCksOCkqOClhywg4KSv4KS+IOCkieCkqOCljeKAjeCkueClh+CkgiDgpLDgpYvgpJXgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVTbXMiIG1zZ2lkPSI4NjczNDcxNzY4OTQ3ODk1MDgyIj4i4KSq4KS+4KSgIOCkuOCkguCkpuClh+CktiAoU01TKSDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIFNNUyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeKAjeCkpCDgpJTgpLAg4KS44KSC4KS44KS+4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpJXgpL4g4KSF4KSw4KWN4KSlIOCkueCliCDgpJXgpL8g4KSP4KSq4KWN4KS4IOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkreClh+CknOClhyDgpJfgpI8g4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSG4KSq4KSV4KWLIOCkpuCkv+CkluCkvuCkjyDgpKzgpL/gpKjgpL4g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkieCkqOCljeKAjeCkueClh+CkgiDgpLngpJ/gpL4g4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlU21zIiBtc2dpZD0iNjQyNDM4Nzc1NDIyODc2NjkzOSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIFNNUyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeKAjeCkpCDgpJTgpLAg4KS44KSC4KS44KS+4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpJXgpL4g4KSF4KSw4KWN4KSlIOCkueCliCDgpJXgpL8g4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkquCksCDgpK3gpYfgpJzgpYcg4KSX4KSPIOCkuOCkguCkpuClh+CktuCli+CkgiDgpJXgpYAg4KSo4KS/4KSX4KSw4KS+4KSo4KWAIOCkhuCkquCkleCliyDgpKbgpL/gpJbgpL7gpI8g4KSs4KS/4KSo4KS+IOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWIIOCklOCksCDgpIngpKjgpY3igI3gpLngpYfgpIIg4KS54KSf4KS+IOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlTW1zIiBtc2dpZD0iMTgyMTMxNzM0NDY2ODI1NzA5OCI+IuCkquCkvuCkoCDgpLjgpILgpKbgpYfgpLYgKE1NUykg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVNbXMiIG1zZ2lkPSI1MzMwMTk0MzcyNjMyMTIyNjAiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIE1NUyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeKAjeCkpCDgpJTgpLAg4KS44KSC4KS44KS+4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpJXgpL4g4KSF4KSw4KWN4KSlIOCkueCliCDgpJXgpL8g4KSP4KSq4KWN4KS4IOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkreClh+CknOClhyDgpJfgpI8g4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSG4KSq4KSV4KWLIOCkpuCkv+CkluCkvuCkjyDgpKzgpL/gpKjgpL4g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkieCkqOCljeKAjeCkueClh+CkgiDgpLngpJ/gpL4g4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlTW1zIiBtc2dpZD0iNTMzMDE5NDM3MjYzMjEyMjYwIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsgTU1TIOCkuOCkguCkpuClh+CktuCli+CkgiDgpJXgpYsg4KSq4KWN4KSw4KS+4KSq4KWN4oCN4KSkIOCklOCksCDgpLjgpILgpLjgpL7gpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkleCkviDgpIXgpLDgpY3gpKUg4KS54KWIIOCkleCkvyDgpJDgpKrgpY3gpLggIOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkreClh+CknOClhyDgpJfgpI8g4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSG4KSq4KSV4KWLIOCkpuCkv+CkluCkvuCkjyDgpKzgpL/gpKjgpL4g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkieCkqOCljeKAjeCkueClh+CkgiDgpLngpJ/gpL4g4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4i4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkquCljeCksOCkuOCkvuCksOCkoyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9Ijg0ODUyNDA3MDI2MjQzMTk3NCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSU4KSwIOCkuOCkguCkuOCkvuCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpYfgpLXgpLIg4KS44KS/4KS44KWN4KSf4KSuIOCkj+CkquCljeCkuCDgpK7gpYfgpIIg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iODQ4NTI0MDcwMjYyNDMxOTc0Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSU4KSwIOCkuOCkguCkuOCkvuCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpYfgpLXgpLIg4KS44KS/4KS44KWN4KSf4KSuIOCkkOCkquCljeCkuCAg4KSu4KWH4KSCIOCkieCkquCksuCkrOCljeCkpyDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSIxNTk4MzI4ODQzNjE5NjQ2MTY2Ij4i4KS44KWH4KSyIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpILgpKbgpYfgpLYg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iNjM2MTk3Mjc3NjA4MDQ1ODk3OSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkieCkquCkleCksOCkoyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkuOClh+CksiDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSV4KWB4KSbIOCkuOCljeKAjeCkpeCkvuCkqOCli+CkgiDgpKrgpLAg4KSG4KSq4KSV4KWLIOCkhuCkquCkvuCkpOCkleCkvuCksuClgOCkqCDgpLjgpY3igI3gpKXgpL/gpKTgpL/gpK/gpYvgpIIg4KSV4KWAIOCkmuClh+CkpOCkvuCkteCkqOClgCDgpKbgpYfgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpLjgpYfgpLIg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkheCksuCksOCljeCknyDgpLXgpL/gpKTgpLDgpL/gpKQg4KSV4KS/4KSPIOCknOCkvuCkpOClhyDgpLngpYjgpIIuIOCkhuCkquCkvuCkpOCkleCkvuCksuClgOCkqCDgpLjgpYfgpLIg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkquCljeCksOCkvuCkquCljeCkpCDgpLngpYvgpKjgpYcg4KSq4KSwIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3igI3gpLgg4KSG4KSq4KSV4KWHIOCkieCkquCkleCksOCkoyDgpJXgpYcg4KSo4KS/4KS34KWN4oCN4KSq4KS+4KSm4KSoIOCkr+CkviDgpLjgpILgpJrgpL7gpLLgpKgg4KSu4KWH4KSCIOCkueCkuOCljeKAjeCkpOCkleCljeCkt+Clh+CkqiDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KS44KWH4KSyIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpJXgpYHgpJsg4KS44KWN4oCN4KSl4KS+4KSo4KWL4KSCIOCkquCksCDgpIbgpKrgpJXgpYsg4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkuOCljeKAjeCkpeCkv+CkpOCkv+Ckr+Cli+CkgiDgpJXgpYAg4KSa4KWH4KSk4KS+4KS14KSo4KWAIOCkpuClh+CkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkuOClh+CksiDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KSF4KSy4KSw4KWN4KSfIOCkteCkv+CkpOCksOCkv+CkpCDgpJXgpL/gpI8g4KSc4KS+4KSk4KWHIOCkueCliOCkgi4g4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkuOClh+CksiDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkueCli+CkqOClhyDgpKrgpLAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkleClhyDgpKjgpL/gpLfgpY3igI3gpKrgpL7gpKbgpKgg4KSv4KS+IOCkuOCkguCkmuCkvuCksuCkqCDgpK7gpYfgpIIg4KS54KS44KWN4oCN4KSk4KSV4KWN4KS34KWH4KSqIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFNtcyIgbXNnaWQ9IjU2MDA4MzA2MTIxNDc2NzE1MjkiPiJTTVMg4KS44KSC4KSm4KWH4KS2IOCkreClh+CknOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRTbXMiIG1zZ2lkPSI3MDk0NzI5Mjk4MjA0OTM3NjY3Ij4i4KSP4KSq4KWN4KS4IOCkleCliyBTTVMg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpK3gpYfgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KSV4KWHIOCkquCksOCkv+Cko+CkvuCkruCkuOCljeCkteCksOClguCkqiDgpIXgpKrgpY3gpLDgpKTgpY3igI3gpK/gpL7gpLbgpL/gpKQg4KS24KWB4KSy4KWN4oCN4KSVIOCksuCkvuCkl+ClgiDgpLngpYsg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIbgpKrgpJXgpYAg4KSq4KWB4KS34KWN4KSf4KS/IOCkleClhyDgpKzgpL/gpKjgpL4g4KS44KSC4KSm4KWH4KS2IOCkreClh+CknOCkleCksCDgpIbgpKrgpJXgpL4g4KSn4KSoIOCkteCljeKAjeCkr+CkryDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIFNNUyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkreClh+CknOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpJXgpYcg4KSq4KSw4KS/4KSj4KS+4KSu4KS44KWN4KS14KSw4KWC4KSqIOCkheCkquCljeCksOCkpOCljeKAjeCkr+CkvuCktuCkv+CkpCDgpLbgpYHgpLLgpY3igI3gpJUg4KSy4KS+4KSX4KWCIOCkueCliyDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYAg4KSq4KWB4KS34KWN4KSf4KS/IOCkleClhyDgpKzgpL/gpKjgpL4g4KS44KSC4KSm4KWH4KS2IOCkreClh+CknOCkleCksCDgpIbgpKrgpJXgpL4g4KSn4KSoIOCkteCljeKAjeCkr+CkryDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI4NzEzODg5MTA1MzA1OTQzMjAwIj4i4KS44KSC4KSm4KWH4KS2LeCkpuCljeCkteCkvuCksOCkvi3gpJzgpLXgpL7gpKwg4KSt4KWH4KSc4KWH4KSCIOCkiOCkteClh+CkguCknyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI3MTA3NjQ4NTQ4NDY4Nzc4NzM0Ij4i4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCkleClieCksiDgpJXgpYcg4KS44KSC4KSm4KWH4KS2LeCkpuCljeCkteCkvuCksOCkvi3gpJzgpLXgpL7gpKwg4KSm4KWH4KSo4KWHIOCkleClhyDgpIjgpLXgpYfgpILgpJ8g4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPLCDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkheCkqOCljeCkryDgpLjgpILgpKbgpYfgpLYg4KS44KWH4KS14KS+IOCkj+CkquCljeCkuCDgpJXgpYsg4KSF4KSo4KWB4KSw4KWL4KSnIOCkreClh+CknOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI3MTA3NjQ4NTQ4NDY4Nzc4NzM0Ij4i4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCkleClieCksiDgpJXgpYcg4KS44KSC4KSm4KWH4KS2LeCkpuCljeCkteCkvuCksOCkvi3gpJzgpLXgpL7gpKwg4KSm4KWH4KSo4KWHIOCkleClhyDgpIjgpLXgpYfgpILgpJ8g4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPLCDgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpKjgpY3gpK8g4KS44KSC4KSm4KWH4KS2IOCkuOClh+CkteCkviDgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpKjgpYHgpLDgpYvgpKcg4KSt4KWH4KSc4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+IuCkheCkquCkqOClhyDgpKrgpL7gpKAg4KS44KSC4KSm4KWH4KS2IChTTVMg4KSv4KS+IE1NUykg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjQ2Nzk4MTU0ODY4NDczNTUyMiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpK/gpL4gU0lNIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIFNNUyDgpLjgpILgpKbgpYfgpLYg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSv4KS+IOCkl+Cli+CkquCkqOClgOCkr+CkpOCkviDgpKrgpLAg4KSn4KWN4KSv4KS+4KSoIOCkpuCkv+CkjyDgpKzgpL/gpKjgpL4sIOCkj+CkquCljeCkuCDgpLjgpK3gpYAgU01TIOCkuOCkguCkpuClh+CktiDgpKrgpKLgpLwg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY5NTk2NzUzMzQ1NzI0MDU1MCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpK/gpL4gU0lNIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIFNNUyDgpLjgpILgpKbgpYfgpLYg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSv4KS+IOCkl+Cli+CkquCkqOClgOCkr+CkpOCkviDgpKrgpLAg4KSn4KWN4KSv4KS+4KSoIOCkpuCkv+CkjyDgpKzgpL/gpKjgpL4sIOCkj+CkquCljeCkuCDgpLjgpK3gpYAgU01TIOCkuOCkguCkpuClh+CktiDgpKrgpKLgpLwg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpK/gpL4gU0lNIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIFNNUyDgpLjgpILgpKbgpYfgpLYg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSv4KS+IOCkl+Cli+CkquCkqOClgOCkr+CkpOCkviDgpKrgpLAg4KSn4KWN4KSv4KS+4KSoIOCkpuCkv+CkjyDgpKzgpL/gpKjgpL4sIOCkkOCkquCljeCkuCAg4KS44KSt4KWAIFNNUyDgpLjgpILgpKbgpYfgpLYg4KSq4KSi4KS8IOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkr+CkviBTSU0g4KSV4KS+4KSw4KWN4KShIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQgU01TIOCkuOCkguCkpuClh+CktiDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KS44KWHIOCkuOCkvuCkruCkl+CljeCksOClgCDgpK/gpL4g4KSX4KWL4KSq4KSo4KWA4KSv4KSk4KS+IOCkquCksCDgpKfgpY3gpK/gpL7gpKgg4KSm4KS/4KSPIOCkrOCkv+CkqOCkviwg4KSQ4KSq4KWN4KS4ICDgpLjgpK3gpYAgU01TIOCkuOCkguCkpuClh+CktiDgpKrgpKLgpLwg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+IuCkheCkquCkqOClhyDgpKrgpL7gpKAg4KS44KSC4KSm4KWH4KS2IChTTVMg4KSv4KS+IE1NUykg4KS44KSC4KSq4KS+4KSm4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkr+CkviDgpLjgpL/gpK4g4KSV4KS+4KSw4KWN4KShIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQgU01TIOCkuOCkguCkpuClh+CktuCli+CkgiDgpK7gpYfgpIIg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KSG4KSq4KSV4KWHIOCkuOCkguCkpuClh+CktuCli+CkgiDgpJXgpYsg4KS54KSf4KS+IOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjY4NjY4NzA5MDUyMzI4NTY3Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkr+CkviDgpLjgpL/gpK4g4KSV4KS+4KSw4KWN4KShIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQgU01TIOCkuOCkguCkpuClh+CktuCli+CkgiDgpJXgpYsg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguICDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkhuCkquCkleClhyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkueCkn+CkviDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpK/gpL4g4KS44KS/4KSuIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIFNNUyDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSu4KWH4KSCIOCksuCkv+CkluCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYcg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpLngpJ/gpL4g4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjg2Njg3MDkwNTIzMjg1NjciPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkr+CkviDgpLjgpL/gpK4g4KSV4KS+4KSw4KWN4KShIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQgU01TIOCkuOCkguCkpuClh+CktuCli+CkgiDgpJXgpYsg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguICDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYcg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpLngpJ/gpL4g4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+IuCkquCkvuCkoCDgpLjgpILgpKbgpYfgpLYgKFdBUCkg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4i4KSP4KSq4KWN4KS4IOCkleCliyBXQVAg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSU4KSwIOCkuOCkguCkuOCkvuCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpK7gpYfgpIIg4KSG4KSq4KSV4KWLIOCkreClh+CknOClhyDgpJfgpI8g4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSG4KSq4KSV4KWLIOCkpuCkv+CkluCkvuCkjyDgpKzgpL/gpKjgpL4g4KSV4KSw4KSo4KWHIOCklOCksCDgpLngpJ/gpL7gpKjgpYcg4KSV4KWAIOCkleCljeCkt+CkruCkpOCkviDgpLbgpL7gpK7gpL/gpLIg4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4i4KSa4KSyIOCksOCkueClhyDgpI/gpKrgpY3igI3gpLgg4KSq4KWB4KSo4KSw4KWN4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkruClh+CkgiDgpJTgpLAg4KS54KS+4KSyIOCkueClgCDgpK7gpYfgpIIg4KSa4KSyIOCksOCkueClhyDgpJXgpL7gpLDgpY3gpK/gpYvgpIIg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleCliyDgpKrgpYHgpKg6IOCkquCljeCksOCkvuCkquCljeKAjeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KS44KWHIOCkj+CkquCljeCkuCDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkieCkquCkr+Cli+CklyDgpJXgpL/gpI8g4KSX4KSPIOCkj+CkquCljeCkuCDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSW4KWL4KScIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiLgpJDgpKrgpY3gpLggIOCkleCliyBXQVAg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSU4KSwIOCkuOCkguCkuOCkvuCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpK7gpYfgpIIg4KSG4KSq4KSV4KWLIOCkreClh+CknOClhyDgpJfgpI8g4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSG4KSq4KSV4KWLIOCkpuCkv+CkluCkvuCkjyDgpKzgpL/gpKjgpL4g4KSV4KSw4KSo4KWHIOCklOCksCDgpLngpJ/gpL7gpKjgpYcg4KSV4KWAIOCkleCljeCkt+CkruCkpOCkviDgpLbgpL7gpK7gpL/gpLIg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4i4KSa4KSyIOCksOCkueClhyDgpJDgpKrgpY3gpLgg4KSq4KWB4KSo4KSw4KWN4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkteCksOCljeCkpOCkruCkvuCkqCDgpK7gpYfgpIIg4KSU4KSwIOCkueCkvuCksiDgpLngpYAg4KSu4KWH4KSCIOCkmuCksiDgpLDgpLngpYcg4KSV4KS+4KSw4KWN4KSv4KWL4KSCIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJXgpYsg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpJDgpKrgpY3gpLggIOCkieCkquCkleCksOCkoyDgpKrgpLAg4KSJ4KSq4KSv4KWL4KSXIOCkleCkv+CkjyDgpJfgpI8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSW4KWL4KScIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iNzExNDI1NTI4MTk0NDIxMTY4MiI+IuCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkk+CkgiDgpJXgpYcg4KSs4KWA4KSaIOCkuOCkueCkreCkvuCkl+Ckv+CkpOCkviDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iMzY0NjcwOTYzNjIzMzg1Nzg2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkreCkv+CkqOCljeCkqCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpJPgpIIg4KSV4KWHIOCkrOClgOCkmiDgpJXgpL7gpLDgpY3gpK8g4KSo4KS/4KS34KWN4KSq4KS+4KSm4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkk+CkgiDgpJXgpYcg4KSs4KWA4KSaIOCkuOClgeCksOCkleCljeCkt+CkviDgpJXgpL4g4KSJ4KSy4KWN4KSy4KSC4KSY4KSoIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJhY3RBY3Jvc3NVc2VycyIgbXNnaWQ9IjM2NDY3MDk2MzYyMzM4NTc4NiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkieCkquCkleCksOCkoyDgpKrgpLAg4KSt4KS/4KSo4KWN4KSoIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkk+CkgiDgpJXgpYcg4KSs4KWA4KSaIOCkleCkvuCksOCljeCkryDgpKjgpL/gpLfgpY3gpKrgpL7gpKbgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkk+CkgiDgpJXgpYcg4KSs4KWA4KSaIOCkuOClgeCksOCkleCljeCkt+CkviDgpJXgpL4g4KSJ4KSy4KWN4KSy4KSC4KSY4KSoIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjI1Njc3MzQyODU1NDUwNzQxMDUiPiLgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpJPgpIIg4KSV4KWHIOCkrOClgOCkmiDgpLjgpLngpK3gpL7gpJfgpL/gpKTgpL4g4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSq4KWC4KSw4KWN4KSjIOCksuCkvuCkh+CkuOClh+CkguCkuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMzc2ODQxMzY4Mzk1NTAyMzY2Ij4i4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KST4KSCIOCkleClhyDgpKzgpYDgpJog4KS44KSt4KWAIOCkuOCkguCkreCktSDgpLjgpLngpK3gpL7gpJfgpL/gpKTgpL4g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2VycyIgbXNnaWQ9IjE2NzYxNTA5MTE2NzIyODI0MjgiPiLgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzZXJzIiBtc2dpZD0iODQwOTMwNjY2NzY0NTM1NTYzOCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSJ4KSq4KSV4KSw4KSjIOCkquCksCDgpJXgpY3gpLXgpYfgpLDgpYAsIOCkqOCkv+CksOCljeCkruCkvuCkoyDgpJTgpLAg4KS54KSf4KS+4KSo4KWHIOCkuOCkueCkv+CkpCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpJPgpIIg4KSV4KWLIOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkuOClgeCkteCkv+Ckp+CkviDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjYyMjk0Njg2NzQ3NTM1Mjk1MDEiPiLgpJrgpLIg4KSw4KS54KWHIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KS14KS/4KS14KSw4KSjIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXREZXRhaWxlZFRhc2tzIiBtc2dpZD0iMTUzODI0NzQxNDQwNzE3NTk5Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSu4KWH4KSCIOCklOCksCDgpLngpL7gpLIg4KS54KWAIOCkruClh+CkgiDgpJrgpLIg4KSw4KS54KWHIOCkleCkvuCksOCljeCkr+Cli+CkgiDgpJXgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkqOCkv+CknOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSW4KWL4KScIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW9yZGVyVGFza3MiIG1zZ2lkPSIyMDE4NTc1NTI2OTM0NDIyNzc5Ij4i4KSa4KSyIOCksOCkueClhyDgpI/gpKrgpY3igI3gpLgg4KSq4KWB4KSoOiDgpJXgpY3gpLDgpK7gpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVvcmRlclRhc2tzIiBtc2dpZD0iNzczNDIxNzc1NDg3NzQzOTM1MSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSV4KS+4KSw4KWN4KSv4KWL4KSCIOCkleCliyDgpIXgpJfgpY3gpLDgpK3gpYLgpK7gpL8g4KSU4KSwIOCkquClg+Ckt+CljeKAjeCkoOCkreClguCkruCkvyDgpKrgpLAg4KSy4KWHIOCknOCkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpI/gpKrgpY3gpLgg4KSG4KSq4KSV4KWHIOCkh+CkqOCkquClgeCknyDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkr+CkuSDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlbW92ZVRhc2tzIiBtc2dpZD0iNjgyMTUxMzQwMTg3MDM3NzQwMyI+IuCkmuCksuCkqOClhyDgpLXgpL7gpLLgpYcg4KSP4KSq4KWN4KS4IOCksOCli+CkleClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlbW92ZVRhc2tzIiBtc2dpZD0iMTM5NDcxNDM1MjA2MjYzNTQ5MyI+IuCkleCkv+CkuOClgCDgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkleCkvuCksOCljeCkr+Cli+CkgiDgpJXgpYsg4KSo4KS/4KSV4KS+4KSy4KSo4KWHIOCklOCksCDgpIngpKjgpJXgpYcg4KSP4KSq4KWN4oCN4KS4IOCkuOCkruCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpIXgpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleCkviDgpLXgpY3igI3gpK/gpLXgpLngpL7gpLAg4KSs4KS+4KSn4KS/4KSkIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzZXJzIiBtc2dpZD0iODQwOTMwNjY2NzY0NTM1NTYzOCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkieCkquCkleCksOCkoyDgpKrgpLAg4KSV4KWN4KS14KWH4KSw4KWALCDgpKjgpL/gpLDgpY3gpK7gpL7gpKMg4KSU4KSwIOCkueCkn+CkvuCkqOClhyDgpLjgpLngpL/gpKQg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KST4KSCIOCkleCliyDgpKrgpY3gpLDgpKzgpILgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkleClgCDgpLjgpYHgpLXgpL/gpKfgpL4g4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4i4KSa4KSyIOCksOCkueClhyDgpJDgpKrgpY3gpLgg4KSV4KWHIOCkteCkv+CkteCksOCkoyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjE1MzgyNDc0MTQ0MDcxNzU5OSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkteCksOCljeCkpOCkruCkvuCkqCDgpK7gpYfgpIIg4KSU4KSwIOCkueCkvuCksiDgpLngpYAg4KSu4KWH4KSCIOCkmuCksiDgpLDgpLngpYcg4KSV4KS+4KSw4KWN4KSv4KWL4KSCIOCkleClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIXgpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpKjgpL/gpJzgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkluCli+CknCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVvcmRlclRhc2tzIiBtc2dpZD0iMjAxODU3NTUyNjkzNDQyMjc3OSI+IuCkmuCksiDgpLDgpLngpYcg4KSQ4KSq4KWN4KS4IOCkquClgeCkqDog4KSV4KWN4KSw4KSu4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9Ijc3MzQyMTc3NTQ4Nzc0MzkzNTEiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpJXgpL7gpLDgpY3gpK/gpYvgpIIg4KSV4KWLIOCkheCkl+CljeCksOCkreClguCkruCkvyDgpJTgpLAg4KSq4KWD4KS34KWN4oCN4KSg4KSt4KWC4KSu4KS/IOCkquCksCDgpLLgpYcg4KSc4KS+4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkkOCkquCljeCkuCAg4KSG4KSq4KSV4KWHIOCkh+CkqOCkquClgeCknyDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkr+CkuSDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlbW92ZVRhc2tzIiBtc2dpZD0iNjgyMTUxMzQwMTg3MDM3NzQwMyI+IuCkmuCksuCkqOClhyDgpLXgpL7gpLLgpYcg4KSQ4KSq4KWN4KS4ICDgpLDgpYvgpJXgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW1vdmVUYXNrcyIgbXNnaWQ9IjEzOTQ3MTQzNTIwNjI2MzU0OTMiPiLgpJXgpL/gpLjgpYAg4KSQ4KSq4KWN4KS4IOCkleCliyDgpJXgpL7gpLDgpY3gpK/gpYvgpIIg4KSV4KWLIOCkqOCkv+CkleCkvuCksuCkqOClhyDgpJTgpLAg4KSJ4KSo4KSV4KWHIOCkkOCkquCljeCkuCDgpLjgpK7gpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KSF4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpL4g4KS14KWN4oCN4KSv4KS14KS54KS+4KSwIOCkrOCkvuCkp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iNzM5MTE5MTM4NDAyNzMwMzA2NSI+IuCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpLjgpY3gpJ/gpYjgpJUg4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iMTYxNTg4MTkzMzAzNDA4NDQ0MCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSQ4KS44KWHIOCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpLjgpY3gpJ/gpYjgpJUg4KSc4KWL4KSh4KS84KSo4KWHLCDgpKjgpL/gpJXgpL7gpLLgpKjgpYcsIOCklOCksCDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpL/gpKjgpK7gpYfgpIIg4KSF4KSo4KWN4KSvIOCkj+CkquCljeCkuCDgpJrgpLLgpKTgpYcg4KS54KWL4KSCLiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkheCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCkteCljeCkr+CkteCkueCkvuCksCDgpK7gpYfgpIIg4KSs4KS+4KSn4KS+IOCkoeCkvuCksiDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iMTYxNTg4MTkzMzAzNDA4NDQ0MCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkkOCkuOClhyDgpJfgpKTgpL/gpLXgpL/gpKfgpL8g4KS44KWN4KSf4KWI4KSVIOCknOCli+CkoeCkvOCkqOClhywg4KSo4KS/4KSV4KS+4KSy4KSo4KWHLCDgpJTgpLAg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSc4KS/4KSo4KSu4KWH4KSCIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkmuCksuCkpOClhyDgpLngpYvgpIIuIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpLXgpY3gpK/gpLXgpLngpL7gpLAg4KSu4KWH4KSCIOCkrOCkvuCkp+CkviDgpKHgpL7gpLIg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSIyOTE4NzY4MjM4MDQ1MjA2NDU2Ij4i4KSV4KWL4KSIIOCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9Ijk5NzgyMzY5NTM0MzU4NDAwMSI+IuCkheCkqOClgeCkruCkpOCkvyDgpLjgpYHgpLDgpJXgpY3gpLfgpL4g4KSv4KS+IOCkqOCkv+CksOCljeCkr+CkvuCkpCDgpJXgpYAg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkquCksCDgpKfgpY3igI3gpK/gpL7gpKgg4KSm4KS/4KSPIOCkrOCkv+CkqOCkviwg4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpJXgpYvgpIgg4KSX4KSk4KS/4KS14KS/4KSn4KS/IOCkquCljeCksOCkvuCksOCkguCkrSDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iOTk3ODIzNjk1MzQzNTg0MDAxIj4i4KSF4KSo4KWB4KSu4KSk4KS/IOCkuOClgeCksOCkleCljeCkt+CkviDgpK/gpL4g4KSo4KS/4KSw4KWN4KSv4KS+4KSkIOCkleClgCDgpLjgpY3igI3gpKXgpL/gpKTgpL8g4KSq4KSwIOCkp+CljeKAjeCkr+CkvuCkqCDgpKbgpL/gpI8g4KSs4KS/4KSo4KS+LCDgpJDgpKrgpY3gpLgg4KSV4KWLIOCkleCli+CkiCDgpJfgpKTgpL/gpLXgpL/gpKfgpL8g4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5NzUzODcxMTg4NjE4NDIwNjEiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KS44KSC4KSX4KSk4KSk4KS+IOCkuOClh+CknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRTY3JlZW5Db21wYXRpYmlsaXR5IiBtc2dpZD0iNjkyMDQzNjE4NjkzOTE3Mzc0Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpIXgpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KS44KSC4KSX4KSk4KSk4KS+IOCkruCli+CkoSDgpJXgpYsg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4oCN4KS4IOCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KS+IOCkteCljeKAjeCkr+CkteCkueCkvuCksCDgpKzgpL7gpKfgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXREZWJ1Z0FwcCIgbXNnaWQ9IjMwMjIxMDcxOTg2ODY1ODQwNTIiPiLgpI/gpKrgpY3igI3gpLgg4KSh4KWA4KSs4KSXIOCkleCksOCkqOCkviDgpLjgpJXgpY3gpLfgpK4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0RGVidWdBcHAiIG1zZ2lkPSI0NDc0NTEyNDE2Mjk5MDEzMjU2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSh4KWA4KSs4KSXIOCkleCkv+Ckr+CkviDgpJzgpL7gpKjgpL4g4KSa4KS+4KSy4KWCIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSF4KSo4KWN4KSvIOCkj+CkquCljeCkuCDgpJXgpYsg4KS44KSu4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFNjcmVlbkNvbXBhdGliaWxpdHkiIG1zZ2lkPSI2OTIwNDM2MTg2OTM5MTczNzQiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIOCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpLjgpILgpJfgpKTgpKTgpL4g4KSu4KWL4KShIOCkleCliyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KSF4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpL4g4KS14KWN4oCN4KSv4KS14KS54KS+4KSwIOCkrOCkvuCkp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldERlYnVnQXBwIiBtc2dpZD0iMzAyMjEwNzE5ODY4NjU4NDA1MiI+IuCkkOCkquCljeCkuCDgpKHgpYDgpKzgpJcg4KSV4KSw4KSo4KS+IOCkuOCkleCljeCkt+CkriDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXREZWJ1Z0FwcCIgbXNnaWQ9IjQ0NzQ1MTI0MTYyOTkwMTMyNTYiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSy4KS/4KSPIOCkoeClgOCkrOCklyDgpJXgpL/gpK/gpL4g4KSc4KS+4KSo4KS+IOCkmuCkvuCksuClgiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpIXgpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KSu4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQxNjIwOTIxODUxMjQyMzQ0ODAiPiLgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkuOClh+Ckn+Ckv+CkguCklyDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb25maWd1cmF0aW9uIiBtc2dpZD0iNDM3MjIyMzg3MzE1NDI5NjA3NiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksOClh+CktuCkqCwg4KSc4KWI4KS44KWHIOCkuOCljeCkpeCkvuCkqCDgpK/gpL4g4KS44KSu4KSX4KWN4KSwIOCkheCkleCljeCkt+CksOCli+CkgiDgpJXgpL4g4KSG4KSV4KS+4KSwLCDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb25maWd1cmF0aW9uIiBtc2dpZD0iNDM3MjIyMzg3MzE1NDI5NjA3NiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkteCksOCljeCkpOCkruCkvuCkqCDgpJXgpYngpKjgpY3gpKvgpLzgpL/gpJfgpLDgpYfgpLbgpKgsIOCknOCliOCkuOClhyDgpLjgpY3gpKXgpL7gpKgg4KSv4KS+IOCkuOCkruCkl+CljeCksCDgpIXgpJXgpY3gpLfgpLDgpYvgpIIg4KSV4KS+IOCkhuCkleCkvuCksCwg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9lbmFibGVDYXJNb2RlIiBtc2dpZD0iNTY4NDUwNDA1ODE5MjkyMTA5OCI+IuCkleCkvuCksCDgpK7gpYvgpKEg4KS44KSV4KWN4KS34KSuIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2VuYWJsZUNhck1vZGUiIG1zZ2lkPSI0ODUzMTg3NDI1NzUxNDE5NDY3Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpJXgpL7gpLAg4KSu4KWL4KShIOCkuOCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iMzkxNDAyNjY4NzQyMDE3NzIwMiI+IuCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iNDU5MzM1MzIzNTk1OTczMzExOSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYAg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkk+CkgiDgpJXgpYsg4KS44KSu4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWN4KSvIOCkj+CkquCljeCkuCDgpJXgpL4g4KSa4KSy4KSo4KS+IOCksOCli+CklSDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VTdG9wUGFja2FnZXMiIG1zZ2lkPSIyMzI5NjI3NDI4ODMyMDY3NzAwIj4i4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iNTI1MzE1NzI5NjE4Mzk0MDgxMiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSF4KSo4KWN4KSvIOCkj+CkquCljeCkuCDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSC4KSmIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VCYWNrIiBtc2dpZD0iNjUyOTM1MjA0MDcyNTg0NjE2Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlQmFjayIgbXNnaWQ9IjM4OTIyOTU4MzA0MTk1MTM2MjMiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkheCkl+CljeCksOCkreClguCkruCkvyDgpK7gpYfgpIIg4KSa4KSyIOCksOCkueClgCDgpJXgpYvgpIgg4KSt4KWAIOCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSC4KSmIOCkleCksOCkqOClhyDgpJTgpLAg4KS14KS+4KSq4KS4IOCknOCkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpJXgpL7gpLAg4KSu4KWL4KShIOCkuOCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iMzkxNDAyNjY4NzQyMDE3NzIwMiI+IuCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iNDU5MzM1MzIzNTk1OTczMzExOSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWAIOCkquClg+Ckt+CljeCkoOCkreClguCkruCkvyDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL7gpJPgpIIg4KSV4KWLIOCkuOCkruCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleCkviDgpJrgpLLgpKjgpL4g4KSw4KWL4KSVIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mb3JjZVN0b3BQYWNrYWdlcyIgbXNnaWQ9IjIzMjk2Mjc0Mjg4MzIwNjc3MDAiPiLgpIXgpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkrOCksuCkquClguCksOCljeCkteCklSDgpKzgpILgpKYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZm9yY2VTdG9wUGFja2FnZXMiIG1zZ2lkPSI1MjUzMTU3Mjk2MTgzOTQwODEyIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSF4KSo4KWN4KSvIOCkkOCkquCljeCkuCAg4KSs4KSy4KSq4KWC4KSw4KWN4KS14KSVIOCkrOCkguCkpiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlQmFjayIgbXNnaWQ9IjY1MjkzNTIwNDA3MjU4NDYxNiI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSs4KSy4KSq4KWC4KSw4KWN4KS14KSVIOCkrOCkguCkpiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZUJhY2siIG1zZ2lkPSIzODkyMjk1ODMwNDE5NTEzNjIzIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSF4KSX4KWN4KSw4KSt4KWC4KSu4KS/IOCkruClh+CkgiDgpJrgpLIg4KSw4KS54KWAIOCkleCli+CkiCDgpK3gpYAg4KSX4KSk4KS/4KS14KS/4KSn4KS/IOCkrOCksuCkquClguCksOCljeCkteCklSDgpKzgpILgpKYg4KSV4KSw4KSo4KWHIOCklOCksCDgpLXgpL7gpKrgpLgg4KSc4KS+4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2R1bXAiIG1zZ2lkPSIxNjgxNzk5ODYyNDM4OTU0NzUyIj4i4KS44KS/4KS44KWN4oCN4KSf4KSuIOCkleClgCDgpIbgpILgpKTgpLDgpL/gpJUg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkquClgeCkqOCksOCljeCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kdW1wIiBtc2dpZD0iMTc3ODI5OTA4ODY5MjI5MDMyOSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KS/4KS44KWN4oCN4KSf4KSuIOCkleClgCDgpIbgpILgpKTgpLDgpL/gpJUg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkquClgeCkqOCksOCljeCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpLXgpL/gpK3gpL/gpKjgpY3igI3gpKgg4KSq4KWN4KSw4KSV4KS+4KSwIOCkleClgCDgpKjgpL/gpJzgpYAg4KSU4KSwIOCkuOClgeCksOCkleCljeCkt+CkviDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCknOCkv+CkqOCkleClgCDgpIngpKjgpY3igI3gpLngpYfgpIIg4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSv4KSkOiDgpIbgpLXgpLbgpY3igI3gpK/gpJXgpKTgpL4g4KSo4KS54KWA4KSCIOCkueCli+CkpOClgC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kdW1wIiBtc2dpZD0iMTc3ODI5OTA4ODY5MjI5MDMyOSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS44KS/4KS44KWN4oCN4KSf4KSuIOCkleClgCDgpIbgpILgpKTgpLDgpL/gpJUg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkquClgeCkqOCksOCljeCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpLXgpL/gpK3gpL/gpKjgpY3igI3gpKgg4KSq4KWN4KSw4KSV4KS+4KSwIOCkleClgCDgpKjgpL/gpJzgpYAg4KSU4KSwIOCkuOClgeCksOCkleCljeCkt+CkviDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCknOCkv+CkqOCkleClgCDgpIngpKjgpY3igI3gpLngpYfgpIIg4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSv4KSkOiDgpIbgpLXgpLbgpY3igI3gpK/gpJXgpKTgpL4g4KSo4KS54KWA4KSCIOCkueCli+CkpOClgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iODAyMjU4ODYwODk5NDU4OTkzOCI+IuCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSq4KWB4KSo4KSw4KWN4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iMzE5MzI2OTA2OTQ2OTcwMDI2NSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KSV4KWN4KSw4KS/4KSvIOCkteCkv+CkguCkoeCliyDgpJXgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkquClgeCkqOCksOCljeCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpLXgpL/gpILgpKHgpYsg4KSV4KWAIOCkuOCkguCkquClguCksOCljeCkoyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCklOCksCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSV4KWLIOCkm+Cli+CkoeCkvOCkleCksCDgpIfgpLjgpJXgpYcg4KS44KSt4KWAIOCkquCkvuCkoCDgpJzgpL7gpILgpJog4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjMxOTMyNjkwNjk0Njk3MDAyNjUiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkuOCkleCljeCksOCkv+CkryDgpLXgpL/gpILgpKHgpYsg4KSV4KWAIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpYHgpKjgpLDgpY3gpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KS14KS/4KSC4KSh4KWLIOCkleClgCDgpLjgpILgpKrgpYLgpLDgpY3gpKMg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgiDgpJTgpLAg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkleCliyDgpJvgpYvgpKHgpLzgpJXgpLAg4KSH4KS44KSV4KWHIOCkuOCkreClgCDgpKrgpL7gpKAg4KSc4KS+4KSC4KSaIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl90ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIyMzEyNjEyMTM1MTI3MzEwMjU0Ij4i4KSG4KS44KS+4KSoIOCkpOCksOClgOCkleCkviDgpJXgpYsg4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkqiDgpLjgpYcg4KS44KSV4KWN4KS34KSuIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjgwNzk0NTYyOTMxODI5NzU0NjQiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkieCkquCkleCksOCkoyDgpKrgpLAg4KSG4KS44KS+4KSoIOCkpOCksOClgOCkleCkviDgpJXgpYsg4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkqiDgpLjgpYcg4KS44KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpJXgpYAg4KS44KS54KSu4KSk4KS/IOCkleClhyDgpKzgpL/gpKjgpL4g4KSG4KS44KS+4KSoIOCkpOCksOClgOCkleCkviDgpJXgpYsg4KS44KSV4KWN4KS34KSuIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjgwNzk0NTYyOTMxODI5NzU0NjQiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkhuCkuOCkvuCkqCDgpKTgpLDgpYDgpJXgpL4g4KSV4KWLIOCkheCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKog4KS44KWHIOCkuOCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleClgCDgpLjgpLngpK7gpKTgpL8g4KSV4KWHIOCkrOCkv+CkqOCkviDgpIbgpLjgpL7gpKgg4KSk4KSw4KWA4KSV4KS+IOCkleCliyDgpLjgpJXgpY3gpLfgpK4g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9Ijg1MzIyOTUxOTkxMTI1MTkzNzgiPiLgpLXgpL/gpILgpKHgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9IjQ5OTg4MzYzNzA0MjQxODY4NDkiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkteCkv+CkguCkoeCliyDgpKrgpY3gpLDgpKzgpILgpKfgpJUg4KS44KWHIHdpbmRvd3Mg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpIbgpILgpKTgpLDgpL/gpJUg4KS44KS/4KS44KWN4KSf4KSuIOCkieCkquCkr+Cli+CklyDgpJXgpYcg4KSy4KS/4KSPIOCkheCkreCkv+CkquCljeCksOClh+CkpCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9IjQ5OTg4MzYzNzA0MjQxODY4NDkiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkteCkv+CkguCkoeCliyDgpKrgpY3gpLDgpKzgpILgpKfgpJUg4KS44KWHIHdpbmRvd3Mg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpIbgpILgpKTgpLDgpL/gpJUg4KS44KS/4KS44KWN4KSf4KSuIOCkieCkquCkr+Cli+CklyDgpJXgpYcg4KSy4KS/4KSPIOCkheCkreCkv+CkquCljeCksOClh+CkpCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4Njc1NTM1NjQ4ODA3NDI3Mzg5Ij4i4KSI4KS14KWH4KSC4KSfIOCkq+CkvOCkv+CksuCljeCkn+CksCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODAwNjIzNjMxNTg4ODM0NzY4MCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSH4KSo4KSq4KWB4KSfIOCkq+CkvOCkv+CksuCljeKAjeCkn+CksCDgpKrgpILgpJzgpYDgpJXgpYPgpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgsIOCknOCliyDgpLjgpK3gpYAg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkiOCkteClh+CkguCknyDgpJXgpYcg4KS44KWN4oCN4KSf4KWN4KSw4KWA4KSuIOCkleCliyDgpK3gpYfgpJzgpYcg4KSc4KS+4KSo4KWHIOCkuOClhyDgpKrgpLngpLLgpYcg4KSr4KS84KS/4KSy4KWN4oCN4KSf4KSwIOCkleCksOCkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3igI3gpLgg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleClhyDgpLngpLjgpY3igI3gpKTgpJXgpY3gpLfgpYfgpKog4KSV4KWHIOCkrOCkv+CkqOCkviDgpLjgpL/gpLjgpY3igI3gpJ/gpK4gVUkg4KSV4KWLIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODAwNjIzNjMxNTg4ODM0NzY4MCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSH4KSo4KSq4KWB4KSfIOCkq+CkvOCkv+CksuCljeKAjeCkn+CksCDgpKrgpILgpJzgpYDgpJXgpYPgpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgsIOCknOCliyDgpLjgpK3gpYAg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkiOCkteClh+CkguCknyDgpJXgpYcg4KS44KWN4oCN4KSf4KWN4KSw4KWA4KSuIOCkleCliyDgpK3gpYfgpJzgpYcg4KSc4KS+4KSo4KWHIOCkuOClhyDgpKrgpLngpLLgpYcg4KSr4KS84KS/4KSy4KWN4oCN4KSf4KSwIOCkleCksOCkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleClhyDgpLngpLjgpY3igI3gpKTgpJXgpY3gpLfgpYfgpKog4KSV4KWHIOCkrOCkv+CkqOCkviDgpLjgpL/gpLjgpY3igI3gpJ/gpK4gVUkg4KSV4KWLIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjU5NzM2MjY3MzgxNzA2MTg3NzUiPiLgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KSV4KWLIOCkhuCkteCksOCljeCkp+Ckv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI3MTIxMjM1Njg0NTE1MDAzNzkyIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KSV4KWAIOCkuOCkvuCkruCkl+CljeCksOClgCDgpIbgpLXgpLDgpY3gpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KSh4KS/4KS44KWN4KSq4KWN4KSy4KWHIOCkuOCkvuCkruCkl+CljeCksOClgCDgpJXgpYsg4KSH4KS4IOCkpOCksOCkuSDgpLjgpYcg4KSs4KSm4KSyIOCkuOCkleCkpOClhyDgpLngpYjgpIIg4KSV4KS/IOCkieCkquCkleCksOCkoyDgpIXgpKjgpYHgpKrgpK/gpYvgpJfgpYAg4KSw4KWH4KSC4KSh4KSwIOCkueCli+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNzEyMTIzNTY4NDUxNTAwMzc5MiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkoeCkv+CkuOCljeCkquCljeCksuClhyDgpJXgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkhuCkteCksOCljeCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSh4KS/4KS44KWN4KSq4KWN4KSy4KWHIOCkuOCkvuCkruCkl+CljeCksOClgCDgpJXgpYsg4KSH4KS4IOCkpOCksOCkuSDgpLjgpYcg4KSs4KSm4KSyIOCkuOCkleCkpOClhyDgpLngpYjgpIIg4KSV4KS/IOCkieCkquCkleCksOCkoyDgpIXgpKjgpYHgpKrgpK/gpYvgpJfgpYAg4KSw4KWH4KSC4KSh4KSwIOCkueCli+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaHV0ZG93biIgbXNnaWQ9IjcxODU3NDc4MjQwMzg5MDkwMTYiPiLgpIbgpILgpLbgpL/gpJUg4KS24KSf4KSh4KS+4KSJ4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2h1dGRvd24iIG1zZ2lkPSI3MDQ2NTAwODM4NzQ2MjkxNzc1Ij4i4KSX4KSk4KS/4KS14KS/4KSn4KS/IOCkquCljeCksOCkrOCkguCkp+CklSDgpJXgpYsg4KS24KSf4KSh4KS+4KSJ4KSoIOCkuOCljeKAjeCkpeCkv+CkpOCkvyDgpK7gpYfgpIIg4KSw4KSW4KSk4KS+IOCkueCliC4g4KSq4KWC4KSw4KWN4KSjIOCktuCkn+CkoeCkvuCkieCkqCDgpKjgpL/gpLfgpY3igI3gpKrgpL7gpKbgpL/gpKQg4KSo4KS54KWA4KSCIOCkleCksOCkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI0MTM4NjA4NjEwNzE3NDI1NTczIj4i4KSP4KSq4KWN4oCN4KS4IOCkuOCljeKAjeCkteCkv+CkmiDgpJXgpLDgpKjgpYcg4KS44KWHIOCksOCli+CkleCkpOCkviDgpLngpYgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI4MjYyMTk1ODAyNTgyMjU1MDIxIj4i4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleCliyDgpKbgpYLgpLjgpLDgpYcg4KSP4KSq4KWN4oCN4KS4IOCkquCksCDgpLjgpY3igI3gpLXgpL/gpJog4KSV4KSw4KSo4KWHIOCkuOClhyDgpLDgpYvgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUzNzkyMjMxMTQxMTU0NjAxNiI+IuCkteCksOCljeCkpOCkruCkvuCkqCDgpI/gpKrgpY3gpLgg4KSV4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUxMjQ0ODg1NTQ5NjA2NzEzMSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkleClhyDgpIXgpJfgpY3gpLDgpK3gpL7gpJcg4KSu4KWH4KSCIOCkuOCljeCkpeCkv+CkpCDgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSP4KSq4KWN4KS4IOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkqOCkv+CknOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iODkyMjM5MDk0ODY3MTgyNjU2Ij4i4KS44KSt4KWAIOCkj+CkquCljeKAjeCkuCDgpJXgpYAg4KSy4KWJ4KSo4KWN4oCN4KSa4KS/4KSC4KSXIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSV4KSw4KWH4KSCIOCklOCksCDgpIngpLjgpYcg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkr+CkuSDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSU4KSwIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJXgpL8g4KS44KS/4KS44KWN4KSf4KSuIOCkleCliOCkuOClhyDgpJfgpKTgpL/gpLXgpL/gpKfgpL/gpK/gpL7gpIIg4KSy4KWJ4KSo4KWN4KSaIOCkleCksOCkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KS44KS/4KS44KWN4KSf4KSuIOCkleCliyDgpKrgpYLgpLDgpYAg4KSk4KSw4KS5IOCkuOClhyDgpJzgpYvgpJbgpL/gpK4g4KSu4KWH4KSCIOCkoeCkvuCksiDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiDgpIfgpLgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkleClgCDgpIbgpLXgpLbgpY3gpK/gpJXgpKTgpL4g4KSV4KWH4KS14KSyIOCkteCkv+CkleCkvuCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkueCliCwg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkieCkquCkr+Cli+CklyDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI0MTM4NjA4NjEwNzE3NDI1NTczIj4i4KSQ4KSq4KWN4KS4IOCkuOCljeKAjeCkteCkv+CkmiDgpJXgpLDgpKjgpYcg4KS44KWHIOCksOCli+CkleCkpOCkviDgpLngpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI4MjYyMTk1ODAyNTgyMjU1MDIxIj4i4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleCliyDgpKbgpYLgpLjgpLDgpYcg4KSQ4KSq4KWN4KS4IOCkquCksCDgpLjgpY3igI3gpLXgpL/gpJog4KSV4KSw4KSo4KWHIOCkuOClhyDgpLDgpYvgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUzNzkyMjMxMTQxMTU0NjAxNiI+IuCkteCksOCljeCkpOCkruCkvuCkqCDgpJDgpKrgpY3gpLggIOCkleClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjI1MTI0NDg4NTU0OTYwNjcxMzEiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkuOCljeCkleCljeCksOClgOCkqCDgpJXgpYcg4KSF4KSX4KWN4KSw4KSt4KS+4KSXIOCkruClh+CkgiDgpLjgpY3gpKXgpL/gpKQg4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkkOCkquCljeCkuCAg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KSo4KS/4KSc4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ydW5TZXRBY3Rpdml0eVdhdGNoZXIiIG1zZ2lkPSI4OTIyMzkwOTQ4NjcxODI2NTYiPiLgpLjgpK3gpYAg4KSQ4KSq4KWN4KS4IOCkleClgCDgpLLgpYngpKjgpY3igI3gpJrgpL/gpILgpJcg4KSV4KWAIOCkqOCkv+Ckl+CksOCkvuCkqOClgCDgpJXgpLDgpYfgpIIg4KSU4KSwIOCkieCkuOClhyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iNjAwMzYwMzE2MjU3ODU3NzQwNiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkr+CkuSDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSU4KSwIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJXgpL8g4KS44KS/4KS44KWN4KSf4KSuIOCkleCliOCkuOClhyDgpJfgpKTgpL/gpLXgpL/gpKfgpL/gpK/gpL7gpIIg4KSy4KWJ4KSo4KWN4KSaIOCkleCksOCkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkuOCkv+CkuOCljeCkn+CkriDgpJXgpYsg4KSq4KWC4KSw4KWAIOCkpOCksOCkuSDgpLjgpYcg4KSc4KWL4KSW4KS/4KSuIOCkruClh+CkgiDgpKHgpL7gpLIg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpYAg4KSG4KS14KS24KWN4KSv4KSV4KSk4KS+IOCkleClh+CkteCksiDgpLXgpL/gpJXgpL7gpLgg4KSV4KWHIOCksuCkv+CkjyDgpLngpYgsIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIngpKrgpK/gpYvgpJcg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSIyNTc2MzMzNDM0ODkzNTMyNDc1Ij4i4KSq4KWI4KSV4KWH4KScIOCkqOCkv+CkleCkvuCksuClhyDgpJfgpI8g4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkreClh+CknOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSV4KWL4KSIIOCkkOCkuOClgCDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS44KS+4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCknOCkv+CkuOClhyDgpJXgpL/gpLjgpYAg4KSP4KSq4KWN4KS4IOCkquCliOCkleClh+CknCDgpKjgpYcg4KSo4KS/4KSV4KS+4KSyIOCkpuCkv+Ckr+CkviDgpJfgpK/gpL4g4KS54KWLLiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSa4KSyIOCksOCkueClhyDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpK7gpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSI2NjIxOTAxMjE2MjA3OTMxMDg5Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSV4KWL4KSIIOCkkOCkuOClgCDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS44KS+4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCknOCkv+CkuOClhyDgpJXgpL/gpLjgpYAg4KSQ4KSq4KWN4KS4ICDgpKrgpYjgpJXgpYfgpJwg4KSo4KWHIOCkqOCkv+CkleCkvuCksiDgpKbgpL/gpK/gpL4g4KSX4KSv4KS+IOCkueCliy4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJrgpLIg4KSw4KS54KWHIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpK7gpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjU2ODkwOTUwMDkwMzAzMzY1OTMiPiJTTVMt4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkquCljeCksOCkuOCkvuCksCDgpK3gpYfgpJzgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkteCkuSDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS44KS+4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCknOCliyBTTVMg4KS44KSC4KSm4KWH4KS2IOCkqOClhyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KWAIOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkqOCkleCksuClgCDgpIfgpKjgpJXgpK7gpL/gpILgpJcg4KS44KSC4KSm4KWH4KS2IOCkl+CkouCkvOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNDE1MjAzNzcyMDAzNDM2NTQ5MiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkteCkuSDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS44KS+4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCknOCliyBTTVMg4KS44KSC4KSm4KWH4KS2IOCkqOClhyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KWAIOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpKjgpJXgpLLgpYAg4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCkuOCkguCkpuClh+CktiDgpJfgpKLgpLzgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSIzMTQ1MzQ3NDEzMDI4NTgyMzcxIj4iV0FQLVBVU0gt4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkquCljeCksOCkuOCkvuCksOCkoyDgpK3gpYfgpJzgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iNDc4MzQwMjUyNTAzOTQ0MjcyOSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KS14KS5IOCkuOClguCkmuCkqOCkviDgpKrgpY3gpLDgpLjgpL7gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSc4KWLIFdBUCBQVVNIIOCkuOCkguCkpuClh+CktiDgpJXgpYsg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkueClgeCkhiDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpKjgpJXgpLLgpYAgTU1TIOCkuOCkguCkpuClh+CktiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkr+CkviDgpJXgpL/gpLjgpYAg4KS14KWH4KSs4KSq4KWD4KS34KWN4KSgIOCkleClgCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSV4KWLIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpKbgpYLgpLjgpLDgpYcg4KSw4KWC4KSqIOCkuOClhyDgpJrgpYHgpKrgpJrgpL7gpKog4KSq4KWN4KSw4KSk4KS/4KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSI0NzgzNDAyNTI1MDM5NDQyNzI5Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS14KS5IOCkuOClguCkmuCkqOCkviDgpKrgpY3gpLDgpLjgpL7gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSc4KWLIFdBUCBQVVNIIOCkuOCkguCkpuClh+CktiDgpJXgpYsg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkueClgeCkhiDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSo4KSV4KSy4KWAIE1NUyDgpLjgpILgpKbgpYfgpLYg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpK/gpL4g4KSV4KS/4KS44KWAIOCkteClh+CkrOCkquClg+Ckt+CljeCkoCDgpJXgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkleCliyDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSm4KWC4KS44KSw4KWHIOCksOClguCkqiDgpLjgpYcg4KSa4KWB4KSq4KSa4KS+4KSqIOCkquCljeCksOCkpOCkv+CkuOCljeCkpeCkvuCkquCkv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjI0NTE4NzM2NjQzNjM2NjI2NjYiPiLgpJrgpLIg4KSw4KS54KWAIOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkk+CkgiDgpJXgpYAg4KS44KSC4KSW4KWN4oCN4KSv4KS+IOCkuOClgOCkruCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpJrgpLLgpL7gpIgg4KSc4KS+4KSo4KWHIOCkteCkvuCksuClgCDgpIXgpKfgpL/gpJXgpKTgpK4g4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KST4KSCIOCkleCliyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKTgpYAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI1NTA5NTg1MDc3OTg3OTY5NjUiPiLgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkr+CkuSDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSV4KS/IOCkquClg+Ckt+CljeCkoOCkreClguCkruCkvyDgpK7gpYfgpIIg4KSc4KS+4KSk4KWHIOCkueClgCDgpJfgpKTgpL/gpLXgpL/gpKfgpL/gpK/gpL7gpIIg4KSq4KWC4KSw4KWN4KSjIOCkueCliyDgpJzgpL7gpKTgpYAg4KS54KWIIOCkr+CkviDgpKjgpLngpYAuIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSG4KS14KS24KWN4KSv4KSV4KSk4KS+IOCkqOCkueClgOCkgiDgpLngpYvgpKTgpYAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iNzMxODA2MTMxNDA0MDg3OTU0MiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkmuCksuCkvuCkiCDgpJzgpL7gpKjgpYcg4KS14KS+4KSy4KWAIOCkheCkp+Ckv+CkleCkpOCkriDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL7gpJPgpIIg4KSV4KWLIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkkOCkquCljeCkuCAg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKTgpYAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI1NTA5NTg1MDc3OTg3OTY5NjUiPiLgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSQ4KSq4KWN4KS4IOCkleCliyDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpK/gpLkg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCkleCkvyDgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSu4KWH4KSCIOCknOCkvuCkpOClhyDgpLngpYAg4KSX4KSk4KS/4KS14KS/4KSn4KS/4KSv4KS+4KSCIOCkquClguCksOCljeCkoyDgpLngpYsg4KSc4KS+4KSk4KWAIOCkueCliCDgpK/gpL4g4KSo4KS54KWALiDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpIbgpLXgpLbgpY3gpK/gpJXgpKTgpL4g4KSo4KS54KWA4KSCIOCkueCli+CkpOClgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjI3ODk2MTA2NzM1MTQxMDMzNjQiPiLgpKzgpYjgpJ/gpLDgpYAg4KSV4KWHIOCkhuCkguCkleCkoeCkvOClhyDgpKrgpKLgpLzgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI1ODk3MzQ2NTgyODgyOTE1MTE0Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSo4KS/4KSu4KWN4KSoLeCkuOCljeCkpOCksOClgOCkryDgpKzgpYjgpJ/gpLDgpYAg4KSJ4KSq4KSv4KWL4KSXIOCkoeClh+Ckn+CkviDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4g4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpL/gpI8g4KSc4KS+4KSo4KWHIOCkteCkvuCksuClhyDgpI/gpKrgpY3gpLgg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KS14KS/4KS44KWN4KSk4KWD4KSkIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKLgpYLgpILgpKLgpKjgpYcg4KSm4KWHIOCkuOCkleCkpOClgCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmF0dGVyeVN0YXRzIiBtc2dpZD0iNTg5NzM0NjU4Mjg4MjkxNTExNCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkteCksOCljeCkpOCkruCkvuCkqCDgpKjgpL/gpK7gpY3gpKgt4KS44KWN4KSk4KSw4KWA4KSvIOCkrOCliOCkn+CksOClgCDgpIngpKrgpK/gpYvgpJcg4KSh4KWH4KSf4KS+IOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpL/gpI8g4KSc4KS+4KSo4KWHIOCkteCkvuCksuClhyDgpJDgpKrgpY3gpLggIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkteCkv+CkuOCljeCkpOClg+CkpCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSi4KWC4KSC4KSi4KSo4KWHIOCkpuClhyDgpLjgpJXgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQmF0dGVyeVN0YXRzIiBtc2dpZD0iMzcxOTY4OTc2NDUzNjM3OTU1NyI+IuCkrOCliOCkn+CksOClgCDgpJXgpYcg4KSG4KSC4KSV4KSh4KS84KWHIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI2ODYyODE3ODU3MTc4MDI1MDAyIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKzgpYjgpJ/gpLDgpYAg4KSV4KWHIOCkuOCkguCkleCksuCkv+CkpCDgpIbgpILgpJXgpKHgpLzgpYvgpIIg4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBcHBPcHNTdGF0cyIgbXNnaWQ9IjE1MDg3Nzk2ODc0MzY1ODU3NDQiPiLgpI/gpKrgpY3gpLgg4KS44KSC4KSa4KS+4KSy4KSoIOCkhuCkguCkleCkoeCkvOClhyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSI2MjQzODg3MDQxNTc3OTEyODc3Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpILgpJXgpLLgpL/gpKQg4KSP4KSq4KWN4KS4IOCkuOCkguCkmuCkvuCksuCkqCDgpIbgpILgpJXgpKHgpLzgpYcg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI4ODI5MDk3MzczODUxNTIxNTA1Ij4i4KSP4KSq4KWN4KS4IOCkleCkvuCksOCljeCkr+CkteCkvuCkueClgCDgpJXgpYcg4KSG4KSC4KSV4KSh4KS84KWHIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUFwcE9wc1N0YXRzIiBtc2dpZD0iNTA3ODQ1OTY1OTQ0MDM0ODMiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkj+CkquCljeCkuCDgpJXgpL7gpLDgpY3gpK/gpLXgpL7gpLngpYAg4KSV4KWHIOCkj+CkleCkpOCljeCksOCkv+CkpCDgpIbgpILgpJXgpKHgpLzgpYcg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjY4NjI4MTc4NTcxNzgwMjUwMDIiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkrOCliOCkn+CksOClgCDgpJXgpYcg4KS44KSC4KSV4KSy4KS/4KSkIOCkhuCkguCkleCkoeCkvOCli+CkgiDgpJXgpYsg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iMTUwODc3OTY4NzQzNjU4NTc0NCI+IuCkkOCkquCljeCkuCAg4KS44KSC4KSa4KS+4KSy4KSoIOCkhuCkguCkleCkoeCkvOClhyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSI2MjQzODg3MDQxNTc3OTEyODc3Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KSC4KSV4KSy4KS/4KSkIOCkkOCkquCljeCkuCAg4KS44KSC4KSa4KS+4KSy4KSoIOCkhuCkguCkleCkoeCkvOClhyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI4ODI5MDk3MzczODUxNTIxNTA1Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpL7gpLDgpY3gpK/gpLXgpL7gpLngpYAg4KSV4KWHIOCkhuCkguCkleCkoeCkvOClhyDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9IjUwNzg0NTk2NTk0NDAzNDgzIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSQ4KSq4KWN4KS4ICDgpJXgpL7gpLDgpY3gpK/gpLXgpL7gpLngpYAg4KSV4KWHIOCkj+CkleCkpOCljeCksOCkv+CkpCDgpIbgpILgpJXgpKHgpLzgpYcg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhY2t1cCIgbXNnaWQ9IjQ3MDAxMzAyMjg2NTQ1MzkyMCI+IuCkuOCkv+CkuOCljeKAjeCkn+CkriDgpLjgpYHgpLDgpJXgpY3gpLfgpL4g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCklOCksCDgpKrgpYHgpKjgpLDgpY3gpLjgpY3igI3gpKXgpL7gpKrgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmFja3VwIiBtc2dpZD0iNjkxMjIzMDUyNTE0MDU4OTg5MSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KS44KS/4KS44KWN4KSf4KSuIOCkleClhyDgpKzgpYjgpJXgpIXgpKog4KSV4KWLIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJTgpLAg4KSV4KWN4KSw4KS/4KSv4KS+4KS14KS/4KSn4KS/IOCkleCliyDgpKrgpYHgpLDgpY3gpKjgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmFja3VwIiBtc2dpZD0iNjkxMjIzMDUyNTE0MDU4OTg5MSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkuOCkv+CkuOCljeCkn+CkriDgpJXgpYcg4KSs4KWI4KSV4KSF4KSqIOCkleCliyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSU4KSwIOCkleCljeCksOCkv+Ckr+CkvuCkteCkv+Ckp+CkvyDgpJXgpYsg4KSq4KWB4KSw4KWN4KSo4KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjU1NTcwNzEzMjU4MDQ0NjkxMDIiPiLgpKrgpYLgpLDgpY3gpKMg4KS44KWB4KSw4KSV4KWN4KS34KS+IOCkr+CkviDgpKrgpYHgpKjgpLDgpY3gpLjgpY3igI3gpKXgpL7gpKrgpKjgpL4g4KSV4KS+4KSw4KWN4KSv4KS14KS+4KS54KWAIOCkleClgCDgpKrgpYHgpLfgpY3gpJ/gpL8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjE3NDg3NjIxNzE2Mzc2OTk1NjIiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkquClguCksOCljeCkoyDgpKzgpYjgpJXgpIXgpKog4KSq4KWB4KS34KWN4KSf4KS/4KSV4KSw4KSjIFVJIOCksuClieCkqOCljeKAjeCkmiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSV4KS/4KS44KWAIOCkj+CkquCljeKAjeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSIxNzQ4NzYyMTcxNjM3Njk5NTYyIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpKrgpYLgpLDgpY3gpKMg4KSs4KWI4KSV4KSF4KSqIOCkquClgeCkt+CljeCkn+Ckv+CkleCksOCkoyBVSSDgpLLgpYngpKjgpY3igI3gpJog4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkleCkv+CkuOClgCDgpJDgpKrgpY3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVybmFsU3lzdGVtV2luZG93IiBtc2dpZD0iMjE0ODU2MzYyODE0MDE5MzIzMSI+IuCkheCkqOCkp+Ckv+CkleClg+CkpCDgpLXgpL/gpILgpKHgpYsg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4i4KSV4KS/4KS44KWAIOCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSQ4KS44KWAIOCkteCkv+CkguCkoeCliyDgpKzgpKjgpL7gpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpL/gpKjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkhuCkguCkpOCksOCkv+CklSDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSV4KS/4KSv4KS+IOCknOCkvuCkqOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9IjM1NDMzNDc5ODA4Mzk1MTg2MTMiPiLgpIXgpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkquCksCDgpJbgpYDgpILgpJrgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9Ijg1ODQ2NzgzODE5NzI4MjAxMTgiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkheCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCktuClgOCksOCljeCktyDgpKrgpLAg4KSv4KS+IOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KSV4KWHIOCkueCkv+CkuOCljeCkuOCli+CkgiDgpKrgpLAg4KSG4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIOCkteClhyDgpJXgpL/gpLjgpYAg4KSt4KWAIOCkj+CkquCljeCkuCDgpK7gpYfgpIIg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkleClhyDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSv4KWL4KSXIOCkruClh+CkgiDgpLngpLjgpY3gpKTgpJXgpY3gpLfgpYfgpKog4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIsIOCkr+CkviDgpIngpLgg4KSa4KWA4KScIOCkleCliyDgpKzgpKbgpLIg4KS44KSV4KSk4KWAIOCkueCliCDgpJzgpL/gpLjgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpIbgpKrgpJXgpYsg4KSy4KSX4KSk4KS+IOCkueCliCDgpJXgpL8g4KSG4KSqIOCkieCkuOClhyDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkruClh+CkgiDgpKbgpYfgpJYg4KSw4KS54KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9Ijc0NTgzODc3NTk0NjE0NjYzOTciPiLgpJXgpL/gpLjgpYAg4KSQ4KSq4KWN4KS4IOCkleCliyDgpJDgpLjgpYAg4KS14KS/4KSC4KSh4KWLIOCkrOCkqOCkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCknOCkv+CkqOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSG4KSC4KSk4KSw4KS/4KSVIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkpuCljeCkteCkvuCksOCkviDgpJXgpL/gpK/gpL4g4KSc4KS+4KSo4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iMzU0MzM0Nzk4MDgzOTUxODYxMyI+IuCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSq4KSwIOCkluClgOCkguCkmuClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iODU4NDY3ODM4MTk3MjgyMDExOCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpLbgpYDgpLDgpY3gpLcg4KSq4KSwIOCkr+CkviDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkleClhyDgpLngpL/gpLjgpY3gpLjgpYvgpIIg4KSq4KSwIOCkhuCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpLXgpYcg4KSV4KS/4KS44KWAIOCkreClgCDgpJDgpKrgpY3gpLggIOCkruClh+CkgiDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KSV4KWHIOCkhuCkquCkleClhyDgpIngpKrgpK/gpYvgpJcg4KSu4KWH4KSCIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgiwg4KSv4KS+IOCkieCkuCDgpJrgpYDgpJwg4KSV4KWLIOCkrOCkpuCksiDgpLjgpJXgpKTgpYAg4KS54KWIIOCknOCkv+CkuOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkhuCkquCkleCliyDgpLLgpJfgpKTgpL4g4KS54KWIIOCkleCkvyDgpIbgpKog4KSJ4KS44KWHIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkruClh+CkgiDgpKbgpYfgpJYg4KSw4KS54KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iMjgwNTEwMzI0MTE1MzkwNzE3NCI+IuCkteCliOCktuCljeCkteCkv+CklSDgpI/gpKjgpL/gpK7gpYfgpLbgpKgg4KSX4KSk4KS/IOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iNzY5MDA2MzQyODkyNDM0MzU3MSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSV4KS/4KS44KWAIOCkreClgCDgpLjgpK7gpK8g4KS14KWI4KS24KWN4KS14KS/4KSVIOCkj+CkqOCkv+CkruClh+CktuCkqCDgpJfgpKTgpL8gKOCkpOClh+CknOCkvCDgpK/gpL4g4KSn4KWA4KSu4KWHIOCkj+CkqOCkv+CkruClh+CktuCkqCkg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSIxMjg2NTA1NzE3MDUwMTIxMzcwIj4i4KSP4KSq4KWN4oCN4KS4IOCkn+Cli+CkleCkqCDgpKrgpY3gpLDgpKzgpILgpKfgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iODA0MzQzMTcxMzAxNDM5NTY3MSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSJ4KSo4KSV4KWHIOCkuOCkvuCkruCkvuCkqOCljeCkryBaLeCkleCljeCksOCkruCli+CkgiDgpKrgpLAg4KSoIOCkquCkueClgeCkguCkmuCkpOClhyDgpLngpYHgpI8g4KSJ4KSo4KSV4KWHIOCkuOCljeCkteCkr+CkgiDgpJXgpYcg4KSf4KWL4KSV4KSoIOCkrOCkqOCkvuCkqOClhyDgpJTgpLAg4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJXgpL/gpLjgpYAg4KSt4KWAIOCkuOCkruCkryDgpLXgpYjgpLbgpY3gpLXgpL/gpJUg4KSP4KSo4KS/4KSu4KWH4KS24KSoIOCkl+CkpOCkvyAo4KSk4KWH4KSc4KS8IOCkr+CkviDgpKfgpYDgpK7gpYcg4KSP4KSo4KS/4KSu4KWH4KS24KSoKSDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjEyODY1MDU3MTcwNTAxMjEzNzAiPiLgpJDgpKrgpY3gpLgg4KSf4KWL4KSV4KSoIOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSI4MDQzNDMxNzEzMDE0Mzk1NjcxIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSJ4KSo4KSV4KWHIOCkuOCkvuCkruCkvuCkqOCljeCkryBaLeCkleCljeCksOCkruCli+CkgiDgpKrgpLAg4KSoIOCkquCkueClgeCkguCkmuCkpOClhyDgpLngpYHgpI8g4KSJ4KSo4KSV4KWHIOCkuOCljeCkteCkr+CkgiDgpJXgpYcg4KSf4KWL4KSV4KSoIOCkrOCkqOCkvuCkqOClhyDgpJTgpLAg4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mcmVlemVTY3JlZW4iIG1zZ2lkPSI0NzA4MTgxMTg0NDQxODgwMTc1Ij4i4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkleCliyDgpLjgpY3gpKXgpL/gpLAg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZnJlZXplU2NyZWVuIiBtc2dpZD0iODU1ODkyMzc4OTIyMjY3MDA2NCI+IuCkquClguCksOCljeCkoy3gpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KS44KSC4KSV4KWN4KSw4KSu4KSjIOCkleClhyDgpLLgpL/gpI8g4KSP4KSq4KWN4KS4IOCkleCliyDgpIXgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSqIOCkuOClhyDgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSV4KWLIOCkuOCljeCkpeCkv+CksCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mcmVlemVTY3JlZW4iIG1zZ2lkPSI4NTU4OTIzNzg5MjIyNjcwMDY0Ij4i4KSq4KWC4KSw4KWN4KSjLeCkuOCljeCkleCljeCksOClgOCkqCDgpLjgpILgpJXgpY3gpLDgpK7gpKMg4KSV4KWHIOCksuCkv+CkjyDgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSqIOCkuOClhyDgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSV4KWLIOCkuOCljeCkpeCkv+CksCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luamVjdEV2ZW50cyIgbXNnaWQ9IjEzNzg3NDY1ODQwMjM1ODY2MDAiPiLgpJXgpYHgpILgpJzgpL/gpK/gpYvgpIIg4KSU4KSwIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkoyDgpKzgpJ/gpKgg4KSV4KWLIOCkpuCkrOCkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLjgpY3igI3gpLXgpK/gpIIg4KSV4KWHIOCkh+CkqOCkquClgeCknyDgpIjgpLXgpYfgpILgpJ8gKOCkleClgeCkguCknOClgCDgpKbgpKzgpL7gpKjgpL4sIOCkhuCkpuCkvykg4KSV4KWLIOCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkteCkv+CkpOCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkn+Clh+CklSDgpJPgpLXgpLAg4KSV4KSw4KSo4KWHIOCkruClh+CkgiDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1MzEyODA1NzU3MjMyNjI1MyI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KWN4oCN4KS14KSv4KSCIOCkleClhyDgpIfgpKjgpKrgpYHgpJ8g4KSI4KS14KWH4KSC4KSfICjgpJXgpYHgpILgpJzgpYAg4KSm4KSs4KS+4KSo4KS+LCDgpIbgpKbgpL8pIOCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkteCkv+CkpOCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSf4KWH4KSVIOCkk+CkteCksCDgpJXgpLDgpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpY3igI3gpLXgpK/gpIIg4KSV4KWHIOCkh+CkqOCkquClgeCknyDgpIjgpLXgpYfgpILgpJ8gKOCkleClgeCkguCknOClgCDgpKbgpKzgpL7gpKjgpL4sIOCkhuCkpuCkvykg4KSV4KWLIOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWLIOCkteCkv+CkpOCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkn+Clh+CklSDgpJPgpLXgpLAg4KSV4KSw4KSo4KWHIOCkruClh+CkgiDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1MzEyODA1NzU3MjMyNjI1MyI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS44KWN4oCN4KS14KSv4KSCIOCkleClhyDgpIfgpKjgpKrgpYHgpJ8g4KSI4KS14KWH4KSC4KSfICjgpJXgpYHgpILgpJzgpYAg4KSm4KSs4KS+4KSo4KS+LCDgpIbgpKbgpL8pIOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWLIOCkteCkv+CkpOCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSf4KWH4KSVIOCkk+CkteCksCDgpJXgpLDgpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI0Njk0Mjg5MDAwNDEyNDkyMzQiPiLgpIbgpKog4KSc4KWLIOCkreClgCDgpLLgpL/gpJbgpKTgpYcg4KS54KWI4KSCIOCklOCksCDgpJzgpYsg4KSV4KS+4KSw4KWN4KSv4KS14KS+4KS54KS/4KSv4KS+4KSCIOCkleCksOCkpOClhyDgpLngpYjgpIIg4KSJ4KSo4KWN4oCN4KS54KWH4KSCIOCksOCkv+CkleClieCksOCljeCkoSDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjgzODc3NTQ5MDE2ODg3MjgwNDMiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkheCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCkuOCkvuCkpSDgpLjgpLngpK3gpL7gpJfgpL/gpKTgpL4g4KSV4KSw4KSk4KWHIOCkuOCkruCkryDgpK3gpYAg4KSG4KSq4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpKbgpKzgpL7gpIgg4KSc4KS+4KSo4KWHIOCkteCkvuCksuClgCDgpJXgpYHgpILgpJzgpL/gpK/gpL7gpIIg4KSm4KWH4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYggKOCknOCliOCkuOClhyDgpJXgpYvgpIgg4KSq4KS+4KS44KS14KSw4KWN4KShIOCksuCkv+CkluCkqOCkvikuIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjgzODc3NTQ5MDE2ODg3MjgwNDMiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KS44KS+4KSlIOCkuOCkueCkreCkvuCkl+Ckv+CkpOCkviDgpJXgpLDgpKTgpYcg4KS44KSu4KSvIOCkreClgCDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkpuCkrOCkvuCkiCDgpJzgpL7gpKjgpYcg4KS14KS+4KSy4KWAIOCkleClgeCkguCknOCkv+Ckr+CkvuCkgiDgpKbgpYfgpJbgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCAo4KSc4KWI4KS44KWHIOCkleCli+CkiCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSy4KS/4KSW4KSo4KS+KS4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzM2MDA2NDYyMDIzMDUxNTc3NiI+IuCkleCkv+CkuOClgCDgpIfgpKjgpKrgpYHgpJ8g4KS14KS/4KSn4KS/IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzI1MDQ0MDMyMjgwNzI4NjMzMSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSV4KS/4KS44KWAIOCkh+CkqOCkquClgeCknyDgpLXgpL/gpKfgpL8g4KSV4KWHIOCktuClgOCksOCljeCkty3gpLjgpY3igI3gpKTgpLAg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMjUwNDQwMzIyODA3Mjg2MzMxIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJXgpL/gpLjgpYAg4KSH4KSo4KSq4KWB4KSfIOCkteCkv+Ckp+CkvyDgpJXgpYcg4KS24KWA4KSw4KWN4KS3LeCkuOCljeKAjeCkpOCksCDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpLngpYvgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNTM1NzczMzk0MjU1NjAzMTU5MyI+IuCkhuCkuOCkvuCkqCDgpKTgpLDgpYDgpJXgpL4g4KS44KWH4KS14KS+IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNzAzNDYxNTkyODYwOTMzMTM2OCI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSV4KS/4KS44KWAIOCkhuCkuOCkvuCkqCDgpKTgpLDgpYDgpJXgpL4g4KS44KWH4KS14KS+IOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSwIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNzAzNDYxNTkyODYwOTMzMTM2OCI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSV4KS/4KS44KWAIOCkhuCkuOCkvuCkqCDgpKTgpLDgpYDgpJXgpL4g4KS44KWH4KS14KS+IOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSwIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iODQ2MjgxNTE3OTU3Mjc0ODc2MSI+IuCkquCljeCksOCkv+CkguCknyDgpLjgpYfgpLXgpL4g4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iNzk2MDA2NzYyMzIwOTExMTEzNSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSV4KS/4KS44KWAIOCkquCljeCksOCkv+CkguCknyDgpLjgpYfgpLXgpL4g4KSV4KWHIOCktuClgOCksOCljeCkty3gpLjgpY3igI3gpKTgpLAg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iNzk2MDA2NzYyMzIwOTExMTEzNSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSV4KS/4KS44KWAIOCkquCljeCksOCkv+CkguCknyDgpLjgpYfgpLXgpL4g4KSV4KWHIOCktuClgOCksOCljeCkty3gpLjgpY3igI3gpKTgpLAg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlIiBtc2dpZD0iNjgwNzc2Mjc4Mzc0NDEyNTk1NCI+IuCkquCljeCksOCkv+CkguCknyDgpLjgpY3gpKrgpYLgpLLgpLAg4KS44KWH4KS14KS+IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFByaW50U3Bvb2xlclNlcnZpY2UiIG1zZ2lkPSIzNjgwNTUyMjg1OTMzMzE4MzcyIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpKrgpY3gpLDgpL/gpILgpJ8g4KS44KWN4KSq4KWC4KSy4KSwIOCkuOClh+CkteCkviDgpJXgpYcg4KS24KWA4KSw4KWN4KS3LeCkuOCljeKAjeCkpOCksCDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpLngpYvgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlIiBtc2dpZD0iMzY4MDU1MjI4NTkzMzMxODM3MiI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSq4KWN4KSw4KS/4KSC4KSfIOCkuOCljeCkquClguCksuCksCDgpLjgpYfgpLXgpL4g4KSV4KWHIOCktuClgOCksOCljeCkty3gpLjgpY3igI3gpKTgpLAg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROZmNTZXJ2aWNlIiBtc2dpZD0iMjc1MjczMTMwMDQxOTQxMDcyNCI+Ik5GQyDgpLjgpYfgpLXgpL4g4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpLDgpLngpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkkOCkuOClhyDgpI/gpKrgpY3gpLgg4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpLDgpLngpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpYsgTkZDIOCkleCkvuCksOCljeCkoSDgpJXgpL4g4KSF4KSo4KWB4KSV4KSw4KSjIOCkleCksCDgpLDgpLngpYcg4KS54KWI4KSCLiDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSI2MTIwNjQ3NjI5MTc0MDY2ODYyIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJDgpLjgpYcg4KSQ4KSq4KWN4KS4ICDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCksOCkueCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCknOCliyBORkMg4KSV4KS+4KSw4KWN4KShIOCkleCkviDgpIXgpKjgpYHgpJXgpLDgpKMg4KSV4KSwIOCksOCkueClhyDgpLngpYjgpIIuIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI3MzU4Mzc4NDAxOTE1Mjg3OTM4Ij4i4KSV4KS/4KS44KWAIOCkquCkvuCkoCDgpLjgpYfgpLXgpL4g4KSq4KSwIOCkrOCkqOClhyDgpLDgpLngpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI4MTUxOTY4OTEwOTczOTk4NjcwIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJXgpL/gpLjgpYAg4KSq4KS+4KSgIOCkuOClh+CkteCkviAo4KSJ4KSm4KS+LiBTcGVsbENoZWNrZXJTZXJ2aWNlKSDgpJXgpYcg4KS24KWA4KSw4KWN4KS3LeCkuOCljeKAjeCkpOCksCDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KSq4KSwIOCkhuCkrOCkpuCljeCkpyDgpLngpYvgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkleCkv+CkuOClgCDgpKrgpL7gpKAg4KS44KWH4KS14KS+ICjgpIngpKbgpL4uIFNwZWxsQ2hlY2tlclNlcnZpY2UpIOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSwIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpKrgpLAg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjQ3MDg1OTYwMjExNjE0NzMyNTUiPiLgpJXgpL/gpLjgpYAgVlBOIOCkuOClh+CkteCkviDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSV4KS/4KS44KWAIFZwbiDgpLjgpYfgpLXgpL4g4KSV4KWHIOCktuClgOCksOCljeCkty3gpLjgpY3igI3gpKTgpLAg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkleCkv+CkuOClgCBWcG4g4KS44KWH4KS14KS+IOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSwIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+IuCkteClieCksuCkquClh+CkquCksCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJXgpL/gpLjgpYAg4KS14KWJ4KSy4KSq4KWH4KSq4KSwIOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSwIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkleCkv+CkuOClgCDgpLXgpYngpLLgpKrgpYfgpKrgpLAg4KSV4KWHIOCktuClgOCksOCljeCkty3gpLjgpY3igI3gpKTgpLAg4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpIbgpKzgpKbgpY3gpKcg4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IuCksOCkv+CkruCli+CknyDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkleCkv+CkuOClgCDgpLDgpL/gpK7gpYvgpJ8g4KSh4KS/4KS44KWN4KSq4KWN4KSy4KWHIOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSw4KWA4KSvIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i4KSV4KS/4KS44KWAIOCkteCkv+CknOClh+CknyDgpLjgpYfgpLXgpL4g4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJXgpL/gpLjgpYAg4KS14KS/4KSc4KWH4KSfIOCkuOClh+CkteCkviDgpJXgpYcg4KS24KWA4KSw4KWN4KS3LeCkuOCljeKAjeCkpOCksCDgpIfgpILgpJ/gpLDgpKvgpLzgpYfgpLgg4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpLngpYvgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkleCkv+CkuOClgCDgpLXgpL/gpJzgpYfgpJ8g4KS44KWH4KS14KS+IOCkleClhyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4oCN4KSk4KSwIOCkh+CkguCkn+CksOCkq+CkvOClh+CkuCDgpLjgpYcg4KSG4KSs4KSm4KWN4KSnIOCkueCli+CkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i4KSV4KS/4KS44KWAIOCkieCkquCkleCksOCkoyDgpLXgpY3igI3gpK/gpLXgpLjgpY3igI3gpKXgpL7gpKrgpJUg4KSV4KWHIOCkuOCkvuCkpSDgpLjgpLngpK3gpL7gpJfgpL/gpKTgpL4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJXgpL/gpLjgpYAg4KSJ4KSq4KSV4KSw4KSjIOCkteCljeKAjeCkr+CkteCkuOCljeKAjeCkpeCkvuCkquCklSDgpJXgpYsg4KSJ4KSm4KWN4KSm4KWH4KS24KWN4KSvIOCkreClh+CknOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4i4KSn4KS+4KSw4KSVIOCkleCliyDgpJXgpL/gpLjgpYAg4KSJ4KSq4KSV4KSw4KSjIOCkteCljeKAjeCkr+CkteCkuOCljeKAjeCkpeCkvuCkquCklSDgpJXgpYsg4KSJ4KSm4KWN4KSm4KWH4KS24KWN4KSvIOCkreClh+CknOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4i4KSJ4KSq4KSV4KSw4KSjIOCkieCkquCkleCksOCkoyDgpLjgpYHgpJrgpL7gpLDgpYIg4KSi4KS84KSC4KSXIOCkuOClhyDgpJrgpLLgpL7gpKjgpYcg4KS14KS+4KSy4KWHIOCkleCliyDgpJzgpYvgpKHgpLzgpYfgpIIg4KSv4KS+IOCkqOCkv+CkleCkvuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURldmljZUFkbWlucyIgbXNnaWQ9IjUwMjU2MDgxNjc3MDk5NDI0ODUiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkuOCkleCljeCksOCkv+CkryDgpKHgpL/gpLXgpL7gpIfgpLgg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+4KSq4KSV4KWL4KSCIOCkleCliyDgpJzgpYvgpKHgpLzgpKjgpYcg4KSv4KS+IOCkqOCkv+CkleCkvuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNTAyNTYwODE2NzcwOTk0MjQ4NSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KS44KSV4KWN4KSw4KS/4KSvIOCkoeCkv+CkteCkvuCkh+CkuCDgpLXgpY3gpK/gpLXgpLjgpY3gpKXgpL7gpKrgpJXgpYvgpIIg4KSV4KWLIOCknOCli+CkoeCkvOCkqOClhyDgpK/gpL4g4KSo4KS/4KSV4KS+4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMzNjU5NDc3MTcxNjM4NjY4NDQiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KSF4KSt4KS/4KS14KS/4KSo4KWN4oCN4KSv4KS+4KS4IOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldE9yaWVudGF0aW9uIiBtc2dpZD0iMzA0NjEyNjYxOTMxNjY3MTQ3NiI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSV4KS/4KS44KWAIOCkreClgCDgpLjgpK7gpK8g4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCkleCkviDgpLDgpYvgpJ/gpYfgpLbgpKgg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkleCkv+CkuOClgCDgpK3gpYAg4KS44KSu4KSvIOCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpJXgpL4g4KSw4KWL4KSf4KWH4KS24KSoIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI5MTc1MzcxNjEzMzIyNTYyOTM0Ij4i4KS44KWC4KSa4KSVIOCkl+CkpOCkvyDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI2ODY2NTYzMjM0Mjc0MTA0MjMzIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpK7gpL7gpIngpLgg4KSv4KS+IOCkn+CljeCksOCliOCkleCkquCliOCkoSDgpLjgpYLgpJrgpJUg4KSX4KSk4KS/IOCkleCliyDgpJXgpL/gpLjgpYAg4KSt4KWAIOCkuOCkruCkryDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjY4NjY1NjMyMzQyNzQxMDQyMzMiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpK7gpL7gpIngpLgg4KSv4KS+IOCkn+CljeCksOCliOCkleCkquCliOCkoSDgpLjgpYLgpJrgpJUg4KSX4KSk4KS/IOCkleCliyDgpJXgpL/gpLjgpYAg4KSt4KWAIOCkuOCkruCkryDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI0Nzc4NzMxNzAzNjAwOTA5MzQwIj4i4KSV4KWA4KSs4KWL4KSw4KWN4KShIOCksuClh+CkhuCkieCknyDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRLZXlib2FyZExheW91dCIgbXNnaWQ9Ijg0ODAwMTY3NzExMzQxNzU4NzkiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkleClgOCkrOCli+CksOCljeCkoSDgpLLgpYfgpIbgpIngpJ8g4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+IuCkj+CkquCljeCkuCDgpJXgpYsgTGludXgg4KS44KS/4KSX4KWN4KSo4KSyIOCkreClh+CknOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0ODk2OTkyMDc5MTgyNjQ5MTQxIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpK/gpLkg4KSF4KSo4KWB4KSw4KWL4KSnIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCkleCkvyDgpKbgpL/gpK/gpL4g4KSX4KSv4KS+IOCkuOCkv+Ckl+CljeCkqOCksiDgpLjgpK3gpYAg4KSc4KS+4KSw4KWAIOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkk+CkgiDgpJXgpYsg4KSt4KWH4KSc4KS+IOCknOCkvuCkjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcnNpc3RlbnRBY3Rpdml0eSIgbXNnaWQ9Ijg4NDExMTM2Mjc5NTU1NjM5MzgiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkueCkruClh+CktuCkviDgpJrgpLLgpKjgpYcg4KS14KS+4KSy4KS+IOCkrOCkqOCkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODUyNTE4OTI3MjMyOTA4NjEzNyI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KWN4KSu4KWD4KSk4KS/IOCkruClh+CkgiDgpLjgpY3igI3gpLXgpK/gpIIg4KSV4KWHIOCkleClgeCkmyDgpLngpL/gpLjgpY3gpLjgpYvgpIIg4KSV4KWLIOCksuCkl+CkvuCkpOCkvuCksCDgpKzgpKjgpL7gpKjgpYcg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkieCkquCksuCkrOCljeKAjeCkpyDgpLjgpY3igI3gpK7gpYPgpKTgpL8g4KSV4KWLIOCkuOClgOCkruCkv+CkpCDgpJXgpLAg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpKfgpYDgpK7gpL4g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDM4NDc2MDA0NzUwODI3ODI3MiI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KWN4KSu4KWD4KSk4KS/IOCkruClh+CkgiDgpLjgpY3igI3gpLXgpK/gpIIg4KSV4KWHIOCkleClgeCkmyDgpLngpL/gpLjgpY3gpLjgpYvgpIIg4KSV4KWLIOCksuCkl+CkvuCkpOCkvuCksCDgpKzgpKjgpL7gpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpIngpKrgpLLgpKzgpY3igI3gpKcg4KS44KWN4oCN4KSu4KWD4KSk4KS/IOCkleCliyDgpLjgpYDgpK7gpL/gpKQg4KSV4KSwIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSn4KWA4KSu4KS+IOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSIxODQzODUxMjk1Mzc3MDU5MzgiPiLgpI/gpKrgpY3igI3gpLgg4KS54KSf4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSI3NDExNDgwMjc1MTY3MjA1MDgxIj4i4KSP4KSq4KWN4KS4IOCkleCliyBBbmRyb2lkIOCkquCliOCkleClh+CknCDgpLngpJ/gpL7gpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkruCkueCkpOCljeCkteCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KS54KSf4KS+4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iMjc0MTA5MTkxODQ1ODQyNzU2Ij4i4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpL4g4KSh4KWH4KSf4KS+IOCkueCkn+CkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSI0NjI1MzIzNjg0MTI1NDU5NDg4Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSh4KWH4KSf4KS+IOCkuOCkvuCkq+CkvCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4i4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KS44KSC4KSa4KSvIOCkueCkn+CkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzODEyOTk4NTk5MDA2NzMwMTk2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpILgpJrgpK8g4KSr4KS84KS+4KSH4KSy4KWH4KSCIOCkueCkn+CkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSI3NDcyOTIxNzY4MzU3OTgxOTg2Ij4i4KSP4KSq4KWN4KS4IOCkuOCkguCkl+CljeCksOCkueCkoyDgpLjgpY3gpKXgpL7gpKgg4KSu4KS+4KSq4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIngpLjgpJXgpL4g4KSV4KWL4KShLCDgpKHgpYfgpJ/gpL4sIOCklOCksCDgpLjgpILgpJrgpK8g4KSG4KSV4KS+4KSw4KWL4KSCIOCkleCliyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjIxOTkxMjg0ODI4MjAzMDY5MjQiPiLgpLjgpYDgpKfgpYcg4KSP4KSq4KWN4oCN4KS4IOCkh+CkguCkuOCljeKAjeCkn+ClieCksiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSI1NjI4NTMwOTcyNTQ4MDcxMjg0Ij4i4KSP4KSqIOCkleCliyDgpKjgpI8g4KSv4KS+IOCkqOCkiCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KS14KS+4KSy4KWHIEFuZHJvaWQg4KSq4KWI4KSV4KWH4KScIOCkh+CkguCkuOCljeCkn+ClieCksiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkheCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpLDgpYLgpKog4KS44KWHIOCkuOCktuCkleCljeCkpCDgpIXgpKjgpYHgpK7gpKTgpL/gpK/gpYvgpIIg4KS14KS+4KSy4KWHIOCkqOCkjyDgpI/gpKrgpY3gpLgg4KSc4KWL4KSh4KS84KSo4KWHIOCkruClh+CkgiDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwQ2FjaGUiIG1zZ2lkPSI3NDg3Mjc5MzkxNzIzNTI2ODE1Ij4i4KS44KSt4KWAIOCkj+CkquCljeCkuCDgpLjgpILgpJrgpK8g4KSh4KWH4KSf4KS+IOCkueCkn+CkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzQ2NDA4NzE5NDU0MzQ1NjUiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkheCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWAIOCkuOCkguCkmuCkryDgpKjgpL/gpLDgpY3gpKbgpYfgpLbgpL/gpJXgpL7gpJPgpIIg4KSu4KWH4KSCIOCkuOClhyDgpKvgpLzgpL7gpIfgpLLgpYfgpIIg4KS54KSf4KS+4KSV4KSwIOCkn+Clh+CkrOCksuClh+CknyDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSV4KWLIOCkluCkvuCksuClgCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4g4KSH4KS44KS44KWHIOCkheCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSF4KSn4KS/4KSVIOCkp+ClgOCkruClhyDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KS54KWLIOCkuOCkleCkpOClhyDgpLngpYjgpIIg4KSV4KWN4KSv4KWL4KSC4KSV4KS/IOCkieCkqOCljeCkueClh+CkgiDgpIXgpKrgpKjgpL4g4KSh4KWH4KSf4KS+IOCkquClgeCkqOCksOCljeCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkhuCkteCktuCljeCkr+CkleCkpOCkviDgpLngpYvgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNDU5NDQxMDIxOTU2NDM2Nzc5Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClgCDgpLjgpILgpJrgpK8g4KSo4KS/4KSw4KWN4KSm4KWH4KS24KS/4KSV4KS+4KST4KSCIOCkruClh+CkgiDgpLjgpYcg4KSr4KS84KS+4KSH4KSy4KWH4KSCIOCkueCkn+CkvuCkleCksCDgpKvgpLzgpYvgpKgg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkleCliyDgpJbgpL7gpLLgpYAg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIOCkh+CkuOCkuOClhyDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkheCkp+Ckv+CklSDgpKfgpYDgpK7gpYcg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkueCliyDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCkleCljeCkr+Cli+CkguCkleCkvyDgpIngpKjgpY3gpLngpYfgpIIg4KSF4KSq4KSo4KS+IOCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpLDgpY3gpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkleClgCDgpIbgpLXgpLbgpY3gpK/gpJXgpKTgpL4g4KS54KWL4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdmVQYWNrYWdlIiBtc2dpZD0iMzI4OTg5MDI3MTY0NTkyMTQxMSI+IuCkj+CkquCljeKAjeCkuCDgpLjgpILgpLjgpL7gpKfgpKjgpYvgpIIg4KSV4KWLIOCksuClhyDgpJzgpL7gpI/gpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3ZlUGFja2FnZSIgbXNnaWQ9IjMxOTU2MjIxNzc3ODI0NDUyNCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSP4KSq4KWN4oCN4KS4IOCkuOCkguCkuOCkvuCkp+CkqOCli+CkgiDgpJXgpYsg4KSG4KSC4KSk4KSw4KS/4KSVIOCkuOClhyDgpKzgpL7gpLngpLDgpYAg4KSu4KWA4KSh4KS/4KSv4KS+IOCkruClh+CkgiDgpJTgpLAg4KSH4KS44KSV4KWHIOCkteCkv+CkquCksOClgOCkpCDgpLLgpYcg4KSc4KS+4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI4NDgwMDE2NzcxMTM0MTc1ODc5Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJXgpYDgpKzgpYvgpLDgpY3gpKEg4KSy4KWH4KSG4KSJ4KSfIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkhuCkteCktuCljeKAjeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ1MzkwMDI5OTE5NDczNzY2NTkiPiLgpJDgpKrgpY3gpLggIOCkleCliyBMaW51eCDgpLjgpL/gpJfgpY3gpKjgpLIg4KSt4KWH4KSc4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ4OTY5OTIwNzkxODI2NDkxNDEiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkr+CkuSDgpIXgpKjgpYHgpLDgpYvgpKcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSV4KS/IOCkpuCkv+Ckr+CkviDgpJfgpK/gpL4g4KS44KS/4KSX4KWN4KSo4KSyIOCkuOCkreClgCDgpJzgpL7gpLDgpYAg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KST4KSCIOCkleCliyDgpK3gpYfgpJzgpL4g4KSc4KS+4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyc2lzdGVudEFjdGl2aXR5IiBtc2dpZD0iODg0MTExMzYyNzk1NTU2MzkzOCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS54KSu4KWH4KS24KS+IOCkmuCksuCkqOClhyDgpLXgpL7gpLLgpL4g4KSs4KSo4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTI1MTg5MjcyMzI5MDg2MTM3Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpY3gpK7gpYPgpKTgpL8g4KSu4KWH4KSCIOCkuOCljeKAjeCkteCkr+CkgiDgpJXgpYcg4KSV4KWB4KSbIOCkueCkv+CkuOCljeCkuOCli+CkgiDgpJXgpYsg4KSy4KSX4KS+4KSk4KS+4KSwIOCkrOCkqOCkvuCkqOClhyDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSy4KS/4KSPIOCkieCkquCksuCkrOCljeKAjeCkpyDgpLjgpY3igI3gpK7gpYPgpKTgpL8g4KSV4KWLIOCkuOClgOCkruCkv+CkpCDgpJXgpLAg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpKfgpYDgpK7gpL4g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDM4NDc2MDA0NzUwODI3ODI3MiI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS44KWN4KSu4KWD4KSk4KS/IOCkruClh+CkgiDgpLjgpY3igI3gpLXgpK/gpIIg4KSV4KWHIOCkleClgeCkmyDgpLngpL/gpLjgpY3gpLjgpYvgpIIg4KSV4KWLIOCksuCkl+CkvuCkpOCkvuCksCDgpKzgpKjgpL7gpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpLLgpL/gpI8g4KSJ4KSq4KSy4KSs4KWN4oCN4KSnIOCkuOCljeKAjeCkruClg+CkpOCkvyDgpJXgpYsg4KS44KWA4KSu4KS/4KSkIOCkleCksCDgpKvgpLzgpYvgpKgg4KSV4KWLIOCkp+ClgOCkruCkviDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iMTg0Mzg1MTI5NTM3NzA1OTM4Ij4i4KSQ4KSq4KWN4KS4IOCkueCkn+CkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iNzQxMTQ4MDI3NTE2NzIwNTA4MSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIEFuZHJvaWQg4KSq4KWI4KSV4KWH4KScIOCkueCkn+CkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkruCkueCkpOCljeCkteCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkueCkn+CkvuCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjI3NDEwOTE5MTg0NTg0Mjc1NiI+IuCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KS+IOCkoeClh+Ckn+CkviDgpLngpJ/gpL7gpI/gpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iNDYyNTMyMzY4NDEyNTQ1OTQ4OCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KS44KS+4KSr4KS8IOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjMxMjg2NjU1NzE4Mzc0MDg2NzUiPiLgpIXgpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLjgpILgpJrgpK8g4KS54KSf4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjM4MTI5OTg1OTkwMDY3MzAxOTYiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpILgpJrgpK8g4KSr4KS84KS+4KSH4KSy4KWH4KSCIOCkueCkn+CkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSI3NDcyOTIxNzY4MzU3OTgxOTg2Ij4i4KSQ4KSq4KWN4KS4ICDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KS44KWN4KSl4KS+4KSoIOCkruCkvuCkquClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iMzkyMTA2ODE1NDQyMDczODI5NiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkieCkuOCkleCkviDgpJXgpYvgpKEsIOCkoeClh+Ckn+Ckviwg4KSU4KSwIOCkuOCkguCkmuCkryDgpIbgpJXgpL7gpLDgpYvgpIIg4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iMjE5OTEyODQ4MjgyMDMwNjkyNCI+IuCkuOClgOCkp+ClhyDgpJDgpKrgpY3gpLgg4KSH4KSC4KS44KWN4oCN4KSf4KWJ4KSyIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLgpI/gpKog4KSV4KWLIOCkqOCkjyDgpK/gpL4g4KSo4KSIIOCknOCkvuCkqOCkleCkvuCksOClgCDgpLXgpL7gpLLgpYcgQW5kcm9pZCDgpKrgpYjgpJXgpYfgpJwg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkheCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpLDgpYLgpKog4KS44KWHIOCkuOCktuCkleCljeCkpCDgpIXgpKjgpYHgpK7gpKTgpL/gpK/gpYvgpIIg4KS14KS+4KSy4KWHIOCkqOCkjyDgpJDgpKrgpY3gpLggIOCknOCli+CkoeCkvOCkqOClhyDgpK7gpYfgpIIg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcENhY2hlIiBtc2dpZD0iNzQ4NzI3OTM5MTcyMzUyNjgxNSI+IuCkuOCkreClgCDgpJDgpKrgpY3gpLggIOCkuOCkguCkmuCkryDgpKHgpYfgpJ/gpL4g4KS54KSf4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODk3NDY0MDg3MTk0NTQzNDU2NSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClgCDgpLjgpILgpJrgpK8g4KSo4KS/4KSw4KWN4KSm4KWH4KS24KS/4KSV4KS+4KST4KSCIOCkruClh+CkgiDgpLjgpYcg4KSr4KS84KS+4KSH4KSy4KWH4KSCIOCkueCkn+CkvuCkleCksCDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkleCliyDgpJbgpL7gpLLgpYAg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIOCkh+CkuOCkuOClhyDgpIXgpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpIXgpKfgpL/gpJUg4KSn4KWA4KSu4KWHIOCkquCljeCksOCkvuCksOCkguCkrSDgpLngpYsg4KS44KSV4KSk4KWHIOCkueCliOCkgiDgpJXgpY3gpK/gpYvgpILgpJXgpL8g4KSJ4KSo4KWN4KS54KWH4KSCIOCkheCkquCkqOCkviDgpKHgpYfgpJ/gpL4g4KSq4KWB4KSo4KSw4KWN4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpJXgpYAg4KSG4KS14KS24KWN4KSv4KSV4KSk4KS+IOCkueCli+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYAg4KS44KSC4KSa4KSvIOCkqOCkv+CksOCljeCkpuClh+CktuCkv+CkleCkvuCkk+CkgiDgpK7gpYfgpIIg4KS44KWHIOCkq+CkvOCkvuCkh+CksuClh+CkgiDgpLngpJ/gpL7gpJXgpLAg4KSr4KS84KWL4KSoIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpYsg4KSW4KS+4KSy4KWAIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpIfgpLjgpLjgpYcg4KSF4KSo4KWN4KSvIOCkkOCkquCljeCkuCAg4KSF4KSn4KS/4KSVIOCkp+ClgOCkruClhyDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KS54KWLIOCkuOCkleCkpOClhyDgpLngpYjgpIIg4KSV4KWN4KSv4KWL4KSC4KSV4KS/IOCkieCkqOCljeCkueClh+CkgiDgpIXgpKrgpKjgpL4g4KSh4KWH4KSf4KS+IOCkquClgeCkqOCksOCljeCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkhuCkteCktuCljeCkr+CkleCkpOCkviDgpLngpYvgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMjg5ODkwMjcxNjQ1OTIxNDExIj4i4KSQ4KSq4KWN4KS4IOCkuOCkguCkuOCkvuCkp+CkqOCli+CkgiDgpJXgpYsg4KSy4KWHIOCknOCkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdmVQYWNrYWdlIiBtc2dpZD0iMzE5NTYyMjE3Nzc4MjQ0NTI0Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJDgpKrgpY3gpLgg4KS44KSC4KS44KS+4KSn4KSo4KWL4KSCIOCkleCliyDgpIbgpILgpKTgpLDgpL/gpJUg4KS44KWHIOCkrOCkvuCkueCksOClgCDgpK7gpYDgpKHgpL/gpK/gpL4g4KSu4KWH4KSCIOCklOCksCDgpIfgpLjgpJXgpYcg4KS14KS/4KSq4KSw4KWA4KSkIOCksuClhyDgpJzgpL7gpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRMb2dzIiBtc2dpZD0iNjYxNTc3ODU0MzE5ODk2NzYxNCI+IuCkuOCkguCkteClh+CkpuCkqOCktuClgOCksiDgpLLgpYngpJcg4KSh4KWH4KSf4KS+IOCkquCkouCkvOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MjA2MTMxMzI5MzQ1NTE1MSI+IuCkleCkv+CkuOClgCDgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJXgpYAg4KS14KS/4KSt4KS/4KSo4KWN4oCN4KSoIOCksuClieCklyDgpKvgpLzgpL7gpIfgpLLgpYvgpIIg4KS44KWHIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpILgpK3gpL7gpLXgpL/gpKQg4KSw4KWC4KSqIOCkuOClhyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSv4KS+IOCkqOCkv+CknOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KS24KS+4KSu4KS/4KSyIOCkleCksOCkpOClhyDgpLngpYHgpI8sIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYcg4KS44KS+4KSlIOCkhuCkqiDgpJXgpY3igI3gpK/gpL4g4KSV4KSwIOCksOCkueClhyDgpLngpYjgpIIg4KSH4KS4IOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJbgpYvgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTG9ncyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIwNjM0MzgxNDAyNDE1NjA0NDMiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJXgpYAg4KS14KS/4KSt4KS/4KSo4KWN4oCN4KSoIOCksuClieCklyDgpKvgpLzgpL7gpIfgpLLgpYfgpIIg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkguCkreCkvuCkteCkv+CkpCDgpLDgpYLgpKog4KS44KWHIOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCDgpK/gpL4g4KSo4KS/4KSc4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpLjgpLngpL/gpKQsIOCkr+CkuSDgpIfgpLjgpYcg4KSH4KS4IOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJbgpYvgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJXgpL8g4KSG4KSqIOCkq+CkvOCli+CkqCDgpLjgpYcg4KSV4KWN4oCN4KSv4KS+IOCkleCksCDgpLDgpLngpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MjA2MTMxMzI5MzQ1NTE1MSI+IuCkleCkv+CkuOClgCDgpJDgpKrgpY3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJXgpYAg4KS14KS/4KSt4KS/4KSo4KWN4oCN4KSoIOCksuClieCklyDgpKvgpLzgpL7gpIfgpLLgpYvgpIIg4KS44KWHIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpILgpK3gpL7gpLXgpL/gpKQg4KSw4KWC4KSqIOCkuOClhyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSv4KS+IOCkqOCkv+CknOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KS24KS+4KSu4KS/4KSyIOCkleCksOCkpOClhyDgpLngpYHgpI8sIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYcg4KS44KS+4KSlIOCkhuCkqiDgpJXgpY3igI3gpK/gpL4g4KSV4KSwIOCksOCkueClhyDgpLngpYjgpIIg4KSH4KS4IOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJbgpYvgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTG9ncyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIwNjM0MzgxNDAyNDE1NjA0NDMiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJXgpYAg4KS14KS/4KSt4KS/4KSo4KWN4oCN4KSoIOCksuClieCklyDgpKvgpLzgpL7gpIfgpLLgpYfgpIIg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkguCkreCkvuCkteCkv+CkpCDgpLDgpYLgpKog4KS44KWHIOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCDgpK/gpL4g4KSo4KS/4KSc4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpLjgpLngpL/gpKQsIOCkr+CkuSDgpIfgpLjgpYcg4KSH4KS4IOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJbgpYvgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJXgpL8g4KSG4KSqIOCkq+CkvOCli+CkqCDgpLjgpYcg4KSV4KWN4oCN4KSv4KS+IOCkleCksCDgpLDgpLngpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjcxNTgwNTU1NTgyMzg4MTgxOCI+IuCkquCljeCksuClh+CkrOCliOCklSDgpJXgpYcg4KSy4KS/4KSPIOCkleCkv+CkuOClgCDgpK3gpYAg4KSu4KWA4KSh4KS/4KSv4KS+IOCkoeClgOCkleCli+CkoeCksCDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI4MjgzOTEyNDg4NDMzMTg5MDEwIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpKrgpY3gpLLgpYfgpKzgpYjgpJUg4KSh4KWA4KSV4KWL4KShIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCkv+CkuOClgCDgpK3gpYAg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpJfgpI8g4KSh4KWA4KSV4KWL4KSh4KSwIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpKrgpY3gpLLgpYfgpKzgpYjgpJUg4KSh4KWA4KSV4KWL4KShIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCkv+CkuOClgCDgpK3gpYAg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpJfgpI8g4KSh4KWA4KSV4KWL4KSh4KSwIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjE2NzgzOTE4OTY3ODY4ODIwMTQiPiLgpLXgpL/gpLbgpY3gpLXgpLjgpKjgpYDgpK8g4KSV4KWN4KSw4KWH4KSh4KWH4KSC4KS24KS/4KSv4KSyIOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjQwMTU2NDQwNDcxOTY5MzcwMTQiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIENBIOCkquCljeCksOCkruCkvuCko+CkquCkpOCljeCksOCli+CkgiDgpJXgpYsg4KS14KS/4KS24KWN4KS14KS44KSo4KWA4KSvIOCkleCljeCksOClh+CkoeClh+CkguCktuCkv+Ckr+CksiDgpJXgpYcg4KSw4KWC4KSqIOCkruClh+CkgiDgpIfgpILgpLjgpY3gpJ/gpYngpLIg4KSU4KSwIOCkheCkqOCkh+CkguCkuOCljeCkn+ClieCksiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQ2FDZXJ0aWZpY2F0ZXMiIG1zZ2lkPSI0MDE1NjQ0MDQ3MTk2OTM3MDE0Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsgQ0Eg4KSq4KWN4KSw4KSu4KS+4KSj4KSq4KSk4KWN4KSw4KWL4KSCIOCkleCliyDgpLXgpL/gpLbgpY3gpLXgpLjgpKjgpYDgpK8g4KSV4KWN4KSw4KWH4KSh4KWH4KSC4KS24KS/4KSv4KSyIOCkleClhyDgpLDgpYLgpKog4KSu4KWH4KSCIOCkh+CkguCkuOCljeCkn+ClieCksiDgpJTgpLAg4KSF4KSo4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCksOCkqOClhyDgpKbgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RpYWdub3N0aWMiIG1zZ2lkPSI4MDc2NzQzOTUzOTA4MDAwMzQyIj4i4KSo4KS/4KSm4KS+4KSoIOCkleClhyDgpLjgpY3igI3gpLXgpL7gpK7gpL/gpKTgpY3igI3gpLUg4KS14KS+4KSy4KWHIOCkuOCkguCkuOCkvuCkp+CkqOCli+CkgiDgpJXgpYsg4KSq4KSi4KS84KWH4KSCL+CksuCkv+CkluClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RpYWdub3N0aWMiIG1zZ2lkPSI2NjA4Mjk1NjkyMDAyNDUyMjgzIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyBkaWFnIOCkuOCkruClguCkuSDgpJXgpYcg4KS44KWN4oCN4KS14KS+4KSu4KS/4KSk4KWN4oCN4KS1IOCkteCkvuCksuClhyDgpJXgpL/gpLjgpYAg4KS44KSC4KS44KS+4KSn4KSoIOCkleCliyDgpKrgpKLgpLzgpKjgpYcg4KSU4KSwIOCkieCkuOCkruClh+CkgiDgpLLgpL/gpJbgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliDsg4KSJ4KSm4KS+4KS54KSw4KSjIOCkleClhyDgpLLgpL/gpI8sIC9kZXYg4KSV4KWAIOCkq+CkvOCkvuCkh+CksuClh+Ckgi4g4KSv4KS5IOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpJXgpYAg4KS44KWN4oCN4KSl4KS/4KSw4KSk4KS+IOCklOCksCDgpLjgpYHgpLDgpJXgpY3gpLfgpL4g4KSV4KWLIOCkuOCkguCkreCkvuCkteCkv+CkpCDgpLDgpYLgpKog4KS44KWHIOCkquCljeCksOCkreCkvuCkteCkv+CkpCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4g4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpKjgpL/gpLDgpY3gpK7gpL7gpKTgpL4g4KSv4KS+IOCkkeCkquCksOClh+Ckn+CksCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSV4KWH4KS14KSyIOCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksC3gpLXgpL/gpLbgpL/gpLfgpY3gpJ8g4KSo4KS/4KSm4KS+4KSoIOCkleClhyDgpLLgpL/gpI8g4KSV4KS/4KSv4KS+IOCknOCkvuCkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb21wb25lbnRTdGF0ZSIgbXNnaWQ9IjYzMzU1NzY3NzU3MTEwOTU5MzEiPiLgpI/gpKrgpY3igI3gpLgg4KSY4KSf4KSV4KWL4KSCIOCkleCliyDgpLjgpJXgpY3gpLfgpK4g4KSv4KS+IOCkheCkleCljeCkt+CkriDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODg4NzQzNTc0MDk4MjIzNzI5NCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSv4KS5IOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCkleCkvyDgpJXgpL/gpLjgpYAg4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpL4g4KSY4KSf4KSVIOCkuOCkleCljeCkt+CkriDgpLngpYgg4KSv4KS+IOCkqOCkueClgOCkgi4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpK7gpLngpKTgpY3igI3gpLXgpKrgpYLgpLDgpY3gpKMg4KSr4KS84KWL4KSoIOCkleCljeCkt+CkruCkpOCkvuCkk+CkgiDgpJXgpYsg4KSF4KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpK7gpYfgpIIg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkuOCkvuCkteCkp+CkvuCkqOClgCDgpJXgpYcg4KS44KS+4KSlIOCkleCksOCkqOCkviDgpJrgpL7gpLngpL/gpI8sIOCkleCljeCkr+Cli+CkguCkleCkvyDgpIfgpLjgpLjgpYcg4KSP4KSq4KWN4oCN4KS4IOCkmOCkn+CkleCli+CkgiDgpJXgpYcg4KSF4KSo4KWB4KSq4KSv4KWL4KSX4KWALCDgpIXgpLjgpILgpJfgpKQsIOCkr+CkviDgpIXgpLjgpY3igI3gpKXgpL/gpLAg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkruClh+CkgiDgpJzgpL7gpKjgpYcg4KSV4KWAIOCkuOCkguCkreCkvuCkteCkqOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODI3MjMyNDg0NDE2NTA1NjE1Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpK/gpLkg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSV4KS/IOCkleCkv+CkuOClgCDgpIXgpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleCkviDgpJjgpJ/gpJUg4KS44KSV4KWN4KS34KSuIOCkueCliCDgpK/gpL4g4KSo4KS54KWA4KSCLiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4oCN4KS4IOCkruCkueCkpOCljeKAjeCkteCkquClguCksOCljeCkoyDgpKvgpLzgpYvgpKgg4KSV4KWN4KS34KSu4KSk4KS+4KST4KSCIOCkleCliyDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KSo4KWHIOCkruClh+CkgiDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiDgpIfgpLgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KS44KS+4KS14KSn4KS+4KSo4KWAIOCkleClhyDgpLjgpL7gpKUg4KSV4KSw4KSo4KS+IOCkmuCkvuCkueCkv+Ckjywg4KSV4KWN4KSv4KWL4KSC4KSV4KS/IOCkh+CkuOCkuOClhyDgpI/gpKrgpY3igI3gpLgg4KSY4KSf4KSV4KWL4KSCIOCkleClhyDgpIXgpKjgpYHgpKrgpK/gpYvgpJfgpYAsIOCkheCkuOCkguCkl+CkpCwg4KSv4KS+IOCkheCkuOCljeKAjeCkpeCkv+CksCDgpLjgpY3igI3gpKXgpL/gpKTgpL8g4KSu4KWH4KSCIOCknOCkvuCkqOClhyDgpJXgpYAg4KS44KSC4KSt4KS+4KS14KSo4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaWFnbm9zdGljIiBtc2dpZD0iNjYwODI5NTY5MjAwMjQ1MjI4MyI+IuCkkOCkquCljeCkuCDgpJXgpYsgZGlhZyDgpLjgpK7gpYLgpLkg4KSV4KWHIOCkuOCljeKAjeCkteCkvuCkruCkv+CkpOCljeKAjeCktSDgpLXgpL7gpLLgpYcg4KSV4KS/4KS44KWAIOCkuOCkguCkuOCkvuCkp+CkqCDgpJXgpYsg4KSq4KSi4KS84KSo4KWHIOCklOCksCDgpIngpLjgpK7gpYfgpIIg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYg7IOCkieCkpuCkvuCkueCksOCkoyDgpJXgpYcg4KSy4KS/4KSPLCAvZGV2IOCkleClgCDgpKvgpLzgpL7gpIfgpLLgpYfgpIIuIOCkr+CkuSDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KSV4KWAIOCkuOCljeKAjeCkpeCkv+CksOCkpOCkviDgpJTgpLAg4KS44KWB4KSw4KSV4KWN4KS34KS+IOCkleCliyDgpLjgpILgpK3gpL7gpLXgpL/gpKQg4KSw4KWC4KSqIOCkuOClhyDgpKrgpY3gpLDgpK3gpL7gpLXgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYguIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSo4KS/4KSw4KWN4KSu4KS+4KSk4KS+IOCkr+CkviDgpJHgpKrgpLDgpYfgpJ/gpLAg4KSm4KWN4KS14KS+4KSw4KS+IOCkleClh+CkteCksiDgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLAt4KS14KS/4KS24KS/4KS34KWN4KSfIOCkqOCkv+CkpuCkvuCkqCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkv+Ckr+CkviDgpJzgpL7gpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29tcG9uZW50U3RhdGUiIG1zZ2lkPSI2MzM1NTc2Nzc1NzExMDk1OTMxIj4i4KSQ4KSq4KWN4KS4IOCkmOCkn+CkleCli+CkgiDgpJXgpYsg4KS44KSV4KWN4KS34KSuIOCkr+CkviDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkr+CkuSDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJXgpL8g4KSV4KS/4KS44KWAIOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSV4KS+IOCkmOCkn+CklSDgpLjgpJXgpY3gpLfgpK4g4KS54KWIIOCkr+CkviDgpKjgpLngpYDgpIIuIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KSu4KS54KSk4KWN4oCN4KS14KSq4KWC4KSw4KWN4KSjIOCkq+CkvOCli+CkqCDgpJXgpY3gpLfgpK7gpKTgpL7gpJPgpIIg4KSV4KWLIOCkheCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSu4KWH4KSCIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIOCkh+CkuCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpLjgpL7gpLXgpKfgpL7gpKjgpYAg4KSV4KWHIOCkuOCkvuCkpSDgpJXgpLDgpKjgpL4g4KSa4KS+4KS54KS/4KSPLCDgpJXgpY3gpK/gpYvgpILgpJXgpL8g4KSH4KS44KS44KWHIOCkkOCkquCljeCkuCDgpJjgpJ/gpJXgpYvgpIIg4KSV4KWHIOCkheCkqOClgeCkquCkr+Cli+Ckl+ClgCwg4KSF4KS44KSC4KSX4KSkLCDgpK/gpL4g4KSF4KS44KWN4oCN4KSl4KS/4KSwIOCkuOCljeKAjeCkpeCkv+CkpOCkvyDgpK7gpYfgpIIg4KSc4KS+4KSo4KWHIOCkleClgCDgpLjgpILgpK3gpL7gpLXgpKjgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTgyNzIzMjQ4NDQxNjUwNTYxNSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSv4KS5IOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCkleCkvyDgpJXgpL/gpLjgpYAg4KSF4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpJXgpL4g4KSY4KSf4KSVIOCkuOCkleCljeCkt+CkriDgpLngpYgg4KSv4KS+IOCkqOCkueClgOCkgi4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpK7gpLngpKTgpY3igI3gpLXgpKrgpYLgpLDgpY3gpKMg4KSr4KS84KWL4KSoIOCkleCljeCkt+CkruCkpOCkvuCkk+CkgiDgpJXgpYsg4KSF4KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpK7gpYfgpIIg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkuOCkvuCkteCkp+CkvuCkqOClgCDgpJXgpYcg4KS44KS+4KSlIOCkleCksOCkqOCkviDgpJrgpL7gpLngpL/gpI8sIOCkleCljeCkr+Cli+CkguCkleCkvyDgpIfgpLjgpLjgpYcg4KSQ4KSq4KWN4KS4IOCkmOCkn+CkleCli+CkgiDgpJXgpYcg4KSF4KSo4KWB4KSq4KSv4KWL4KSX4KWALCDgpIXgpLjgpILgpJfgpKQsIOCkr+CkviDgpIXgpLjgpY3igI3gpKXgpL/gpLAg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkruClh+CkgiDgpJzgpL7gpKjgpYcg4KSV4KWAIOCkuOCkguCkreCkvuCkteCkqOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDYyNzMxNTM1MTA5MzUwODc5NSI+IuCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpIIg4KSv4KS+IOCksOCkpuCljeCkpiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDA4ODY0MjY1NDA4NTg1MDY2MiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSJ4KS44KSV4KWHIOCkr+CkviDgpIXgpKjgpY3gpK8g4KSP4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KS14KS/4KS24KWH4KS3IOCkheCkqOClgeCkruCkpOCkv+Ckr+CkvuCkgiDgpKbgpYfgpKjgpYcg4KSv4KS+IOCksOCkpuCljeCkpiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkieCkqCDgpLjgpYHgpLXgpL/gpKfgpL7gpJPgpIIg4KSk4KSVIOCkquCkueClgeCkguCkmuCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCknOCliyDgpIbgpKrgpKjgpYcg4KSJ4KSo4KWN4KS54KWH4KSCIOCkqOCkueClgOCkgiDgpKbgpYAg4KS54KWI4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iODQ2MzE4MTYyODY5NTM5NjM5MSI+IuCkquCkuOCkguCkpuClgOCkpuCkviDgpI/gpKrgpY3igI3gpLgg4KS44KWH4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9IjQ5NzM5ODY3NjIyNDE3ODM3MTIiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpKrgpLjgpILgpKbgpYDgpKbgpL4g4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KSG4KSq4KS44KWHIOCkqOCkv+CknOClgCDgpKHgpYfgpJ/gpL4g4KSP4KSV4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkhuCkquCkleClhyDgpK7gpYzgpJzgpYLgpKbgpL4g4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpY3gpKrgpYLgpKvgpLwg4KSV4KSw4KSV4KWHLCDgpJrgpLLgpL7gpI8g4KSc4KS+4KSo4KWHIOCkteCkvuCksuClhyDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkmuClgeCkquCkmuCkvuCkqiDgpKzgpKbgpLIg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDA4ODY0MjY1NDA4NTg1MDY2MiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkieCkuOCkleClhyDgpK/gpL4g4KSF4KSo4KWN4KSvIOCkkOCkquCljeCkuCAg4KSV4KWHIOCksuCkv+CkjyDgpLXgpL/gpLbgpYfgpLcg4KSF4KSo4KWB4KSu4KSk4KS/4KSv4KS+4KSCIOCkpuClh+CkqOClhyDgpK/gpL4g4KSw4KSm4KWN4KSmIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkieCkqCDgpLjgpYHgpLXgpL/gpKfgpL7gpJPgpIIg4KSk4KSVIOCkquCkueClgeCkguCkmuCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCknOCliyDgpIbgpKrgpKjgpYcg4KSJ4KSo4KWN4KS54KWH4KSCIOCkqOCkueClgOCkgiDgpKbgpYAg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iODQ2MzE4MTYyODY5NTM5NjM5MSI+IuCkquCkuOCkguCkpuClgOCkpuCkviDgpJDgpKrgpY3gpLgg4KS44KWH4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9IjQ5NzM5ODY3NjIyNDE3ODM3MTIiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSq4KS44KSC4KSm4KWA4KSm4KS+IOCkkOCkquCljeCkuCAg4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSG4KSq4KS44KWHIOCkqOCkv+CknOClgCDgpKHgpYfgpJ/gpL4g4KSP4KSV4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkhuCkquCkleClhyDgpK7gpYzgpJzgpYLgpKbgpL4g4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KWN4KSq4KWC4KSr4KS8IOCkleCksOCkleClhywg4KSa4KSy4KS+4KSPIOCknOCkvuCkqOClhyDgpLXgpL7gpLLgpYcg4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSa4KWB4KSq4KSa4KS+4KSqIOCkrOCkpuCksiDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9IjIyMjYxOTUyOTA5NTUyMjQ3MzAiPiLgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KS44KWH4KSf4KS/4KSC4KSXIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSI3Nzc1NzIzNDQxNTU4OTA3MTgxIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpL/gpLjgpY3gpJ/gpK4g4KS44KWH4KSf4KS/4KSC4KSXIOCkoeClh+Ckn+CkviDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3gpLgg4KSG4KSq4KSV4KWHIOCkuOCkv+CkuOCljeCkn+CkriDgpJXgpYcg4KSV4KWJ4KSo4KWN4KSr4KS84KS/4KSX4KSw4KWH4KS24KSoIOCkleCliyDgpKbgpYLgpLfgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9Ijc3NzU3MjM0NDE1NTg5MDcxODEiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpL/gpLjgpY3gpJ/gpK4g4KS44KWH4KSf4KS/4KSC4KSXIOCkoeClh+Ckn+CkviDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkhuCkquCkleClhyDgpLjgpL/gpLjgpY3gpJ/gpK4g4KSV4KWHIOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksOClh+CktuCkqCDgpJXgpYsg4KSm4KWC4KS34KS/4KSkIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjIwNDY3NjI1MTg3NjcxODI4OCI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KS44KWH4KSf4KS/4KSC4KSXIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSI4MTU5NTM1NjEzMDIwMTM3MzkxIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpL/gpLjgpY3gpJ/gpK4g4KSV4KWHIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLjgpYfgpJ/gpL/gpILgpJcg4KSh4KWH4KSf4KS+IOCkleCliyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjgxNTk1MzU2MTMwMjAxMzczOTEiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpL/gpLjgpY3gpJ/gpK4g4KSV4KWHIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLjgpYfgpJ/gpL/gpILgpJcg4KSh4KWH4KSf4KS+IOCkleCliyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiJHb29nbGUg4KS44KWH4KS14KS+4KSP4KSCIOCkqOCkleCljeCktuCkviDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIEdvb2dsZSDgpLjgpYfgpLXgpL7gpJPgpIIg4KSV4KS+IOCkqOCkleCljeCktuClhyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIxMjg3MzA5NDM3NjM4MzgwMjI5Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyBHb29nbGUg4KS44KWH4KS14KS+4KST4KSCIOCkleCkviDgpKjgpJXgpY3gpLbgpYcg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4i4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkueCli+CkqOClhyDgpKrgpLAg4KSa4KSy4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczOTAzMDQ2NjQxMTY4ODA3MDQiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeCkn+CkriDgpKbgpY3gpLXgpL7gpLDgpL4g4KSs4KWC4KSf4KS/4KSC4KSXIOCkquClguCksOCljeCkoyDgpJXgpLDgpKTgpYcg4KS54KWAIOCkuOCljeCkteCkpOCkgyDgpIbgpLDgpILgpK0g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkhuCksOCkguCkrSDgpLngpYvgpKjgpYcg4KSu4KWH4KSCIOCkheCkp+Ckv+CklSDgpLjgpK7gpK8g4KSy4KSXIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkj+CkquCljeCkuCDgpJXgpYsg4KSo4KS/4KSw4KSC4KSk4KSwIOCkmuCksuCkvuCkleCksCDgpLjgpILgpKrgpYLgpLDgpY3gpKMg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpKfgpYDgpK7gpL4g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MTM5NTA1ODkxMDI2MTc1MDQiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeCkn+CkriDgpKbgpY3gpLXgpL7gpLDgpL4g4KSs4KWC4KSf4KS/4KSC4KSXIOCkquClguCksOCljeCkoyDgpJXgpLDgpKTgpYcg4KS54KWAIOCkuOCljeCkteCkpOCkgyDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KS54KWL4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpKvgpLzgpYvgpKgg4KSV4KWLIOCkquCljeCksOCkvuCksOCkguCkrSDgpLngpYvgpKjgpYcg4KSu4KWH4KSCIOCkheCkp+Ckv+CklSDgpLjgpK7gpK8g4KSy4KSXIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkj+CkquCljeCkuCDgpJXgpYcg4KSo4KS/4KSw4KSC4KSk4KSwIOCkmuCksuCkpOClhyDgpLDgpLngpKjgpYcg4KS44KWHIOCkuOCkguCkquClguCksOCljeCkoyDgpKvgpLzgpYvgpKgg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KSP4KSCIOCkp+ClgOCkruClgCDgpLngpYsg4KS44KSV4KSk4KWAIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzM5MDMwNDY2NDExNjg4MDcwNCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkuOCkv+CkuOCljeCkn+CkriDgpKbgpY3gpLXgpL7gpLDgpL4g4KSs4KWC4KSf4KS/4KSC4KSXIOCkquClguCksOCljeCkoyDgpJXgpLDgpKTgpYcg4KS54KWAIOCkuOCljeCkteCkpOCkgyDgpIbgpLDgpILgpK0g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkhuCksOCkguCkrSDgpLngpYvgpKjgpYcg4KSu4KWH4KSCIOCkheCkp+Ckv+CklSDgpLjgpK7gpK8g4KSy4KSXIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkkOCkquCljeCkuCAg4KSV4KWLIOCkqOCkv+CksOCkguCkpOCksCDgpJrgpLLgpL7gpJXgpLAg4KS44KSC4KSq4KWC4KSw4KWN4KSjIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYsg4KSn4KWA4KSu4KS+IOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTEzOTUwNTg5MTAyNjE3NTA0Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KS/4KS44KWN4KSf4KSuIOCkpuCljeCkteCkvuCksOCkviDgpKzgpYLgpJ/gpL/gpILgpJcg4KSq4KWC4KSw4KWN4KSjIOCkleCksOCkpOClhyDgpLngpYAg4KS44KWN4KS14KSk4KSDIOCkquCljeCksOCkvuCksOCkguCkrSDgpLngpYvgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KS44KWHIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkueCli+CkqOClhyDgpK7gpYfgpIIg4KSF4KSn4KS/4KSVIOCkuOCkruCkryDgpLLgpJcg4KS44KSV4KSk4KS+IOCkueCliCDgpJTgpLAg4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSo4KS/4KSw4KSC4KSk4KSwIOCkmuCksuCkpOClhyDgpLDgpLngpKjgpYcg4KS44KWHIOCkuOCkguCkquClguCksOCljeCkoyDgpKvgpLzgpYvgpKgg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KSP4KSCIOCkp+ClgOCkruClgCDgpLngpYsg4KS44KSV4KSk4KWAIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFN0aWNreSIgbXNnaWQ9Ijc5MTkxMjYzNzI2MDY4ODE2MTQiPiLgpLjgpY3gpJ/gpL/gpJXgpYAg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkreClh+CknOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KWN4oCN4KSf4KS/4KSV4KWAIOCkquCljeCksOCkuOCkvuCksOCkoyDgpK3gpYfgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCwg4KSc4KWLIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpK7gpL7gpKrgpY3gpKQg4KS54KWL4KSo4KWHIOCkleClhyDgpKzgpL7gpKYg4KSt4KWAIOCkrOCkqOClhyDgpLDgpLngpKTgpYcg4KS54KWI4KSCLiDgpIXgpKTgpY3gpK/gpKfgpL/gpJUg4KSJ4KSq4KSv4KWL4KSXLCDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWAIOCkrOCkueClgeCkpCDgpIXgpKfgpL/gpJUg4KS44KWN4KSu4KWD4KSk4KS/IOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSV4KWHIOCkieCkuOClhyDgpKfgpYDgpK7gpL4g4KSv4KS+IOCkheCkuOCljeKAjeCkpeCkv+CksCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLjgpY3igI3gpJ/gpL/gpJXgpYAg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkreClh+CknOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILCDgpJzgpYsg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkuOCkruCkvuCkquCljeCkpCDgpLngpYvgpKjgpYcg4KSV4KWHIOCkrOCkvuCkpiDgpK3gpYAg4KSs4KSo4KWHIOCksOCkueCkpOClhyDgpLngpYjgpIIuIOCkheCkpOCljeCkr+Ckp+Ckv+CklSDgpIngpKrgpK/gpYvgpJcsIOCkq+CkvOCli+CkqCDgpJXgpYAg4KSs4KS54KWB4KSkIOCkheCkp+Ckv+CklSDgpLjgpY3gpK7gpYPgpKTgpL8g4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpJXgpYcg4KSJ4KS44KWHIOCkp+ClgOCkruCkviDgpK/gpL4g4KSF4KS44KWN4oCN4KSl4KS/4KSwIOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS44KWN4oCN4KSf4KS/4KSV4KWAIOCkquCljeCksOCkuOCkvuCksOCkoyDgpK3gpYfgpJzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCwg4KSc4KWLIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpK7gpL7gpKrgpY3gpKQg4KS54KWL4KSo4KWHIOCkleClhyDgpKzgpL7gpKYg4KSt4KWAIOCkrOCkqOClhyDgpLDgpLngpKTgpYcg4KS54KWI4KSCLiDgpIXgpKTgpY3gpK/gpKfgpL/gpJUg4KSJ4KSq4KSv4KWL4KSXLCDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWAIOCkrOCkueClgeCkpCDgpIXgpKfgpL/gpJUg4KS44KWN4KSu4KWD4KSk4KS/IOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSV4KWHIOCkieCkuOClhyDgpKfgpYDgpK7gpL4g4KSv4KS+IOCkheCkuOCljeKAjeCkpeCkv+CksCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpY3igI3gpJ/gpL/gpJXgpYAg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkreClh+CknOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILCDgpJzgpYsg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkuOCkruCkvuCkquCljeCkpCDgpLngpYvgpKjgpYcg4KSV4KWHIOCkrOCkvuCkpiDgpK3gpYAg4KSs4KSo4KWHIOCksOCkueCkpOClhyDgpLngpYjgpIIuIOCkheCkpOCljeCkr+Ckp+Ckv+CklSDgpIngpKrgpK/gpYvgpJcsIOCkq+CkvOCli+CkqCDgpJXgpYAg4KSs4KS54KWB4KSkIOCkheCkp+Ckv+CklSDgpLjgpY3gpK7gpYPgpKTgpL8g4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpJXgpYcg4KSJ4KS44KWHIOCkp+ClgOCkruCkviDgpK/gpL4g4KSF4KS44KWN4oCN4KSl4KS/4KSwIOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENvbnRhY3RzIiBtc2dpZD0iODM0ODQ4MTEzMTg5OTg4NjEzMSI+IuCkheCkquCkqOClhyDgpLjgpILgpKrgpLDgpY3gpJUg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1Mjk0ODY2ODU2OTQxMTQ5NjM5Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KS44KSC4KSq4KSw4KWN4KSV4KWL4KSCIOCkleClhyDgpKHgpYfgpJ/gpL4g4KSV4KWLLCDgpLjgpL7gpKUg4KS54KWAIOCkhuCkquCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KS14KS/4KS24KS/4KS34KWN4KSfIOCkteCljeCkr+CkleCljeCkpOCkv+Ckr+Cli+CkgiDgpJXgpYsg4KSV4KWJ4KSyIOCkleCksOCkqOClhywg4KSI4KSu4KWH4KSyIOCkleCksOCkqOClhywg4KSv4KS+IOCkheCkqOCljeKAjeCkryDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkuOCkguCkteCkvuCkpiDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkhuCkteClg+CkpOCljeCkpOCkvyDgpJXgpYsg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KS44KSC4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS54KWH4KSc4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYgsIOCklOCksCDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkhuCkquCkleClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWHIOCkrOCkv+CkqOCkviDgpLjgpILgpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+IOCkleCliyDgpLjgpL7gpJ3gpL4g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ0MDY1NDE1MjQ1NzMwMDY2MiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkuOCkguCkquCksOCljeCkleCli+CkgiDgpJXgpYcg4KSh4KWH4KSf4KS+IOCkleCliywg4KS44KS+4KSlIOCkueClgCDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkteCkv+CktuCkv+Ckt+CljeCknyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpK/gpYvgpIIg4KSV4KWLIOCkleClieCksiDgpJXgpLDgpKjgpYcsIOCkiOCkruClh+CksiDgpJXgpLDgpKjgpYcsIOCkr+CkviDgpIXgpKjgpY3igI3gpK8g4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpLjgpILgpLXgpL7gpKYg4KSV4KSw4KSo4KWHIOCkleClgCDgpIbgpLXgpYPgpKTgpY3gpKTgpL8g4KSV4KWLIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkuOCkguCkquCksOCljeCklSDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkueClh+CknOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILCDgpJTgpLAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIbgpKrgpJXgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClhyDgpKzgpL/gpKjgpL4g4KS44KSC4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS+4KSd4KS+IOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTI5NDg2Njg1Njk0MTE0OTYzOSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSu4KWH4KSCIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpLjgpILgpKrgpLDgpY3gpJXgpYvgpIIg4KSV4KWHIOCkoeClh+Ckn+CkviDgpJXgpYssIOCkuOCkvuCkpSDgpLngpYAg4KSG4KSq4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpLXgpL/gpLbgpL/gpLfgpY3gpJ8g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSv4KWL4KSCIOCkleCliyDgpJXgpYngpLIg4KSV4KSw4KSo4KWHLCDgpIjgpK7gpYfgpLIg4KSV4KSw4KSo4KWHLCDgpK/gpL4g4KSF4KSo4KWN4oCN4KSvIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KS44KSC4KS14KS+4KSmIOCkleCksOCkqOClhyDgpJXgpYAg4KSG4KS14KWD4KSk4KWN4KSk4KS/IOCkleCliyDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KS44KSC4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS54KWH4KSc4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYgsIOCklOCksCDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClhyDgpKzgpL/gpKjgpL4g4KS44KSC4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS+4KSd4KS+IOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0NDA2NTQxNTI0NTczMDA2NjIiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KS44KSC4KSq4KSw4KWN4KSV4KWL4KSCIOCkleClhyDgpKHgpYfgpJ/gpL4g4KSV4KWLLCDgpLjgpL7gpKUg4KS54KWAIOCkhuCkquCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KS14KS/4KS24KS/4KS34KWN4KSfIOCkteCljeCkr+CkleCljeCkpOCkv+Ckr+Cli+CkgiDgpJXgpYsg4KSV4KWJ4KSyIOCkleCksOCkqOClhywg4KSI4KSu4KWH4KSyIOCkleCksOCkqOClhywg4KSv4KS+IOCkheCkqOCljeKAjeCkryDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkuOCkguCkteCkvuCkpiDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkhuCkteClg+CkpOCljeCkpOCkvyDgpJXgpYsg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkuOCkguCkquCksOCljeCklSDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkueClh+CknOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILCDgpJTgpLAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSG4KSq4KSV4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkuOCkguCkquCksOCljeCklSDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkvuCkneCkviDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ29udGFjdHMiIG1zZ2lkPSI1MTA3NDkyMDg2NDE2NzkzNTQ0Ij4i4KSF4KSq4KSo4KWHIOCkuOCkguCkquCksOCljeCklSDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTcyNDM5MzI1MjE5NTM2MDIiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSu4KWH4KSCIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpLjgpILgpKrgpLDgpY3gpJXgpYvgpIIg4KSV4KWHIOCkoeClh+Ckn+CkviDgpJXgpYssIOCkuOCkvuCkpSDgpLngpYAg4KSG4KSq4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpLXgpL/gpLbgpL/gpLfgpY3gpJ8g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSv4KWL4KSCIOCkleCliyDgpJXgpYngpLIg4KSV4KSw4KSo4KWHLCDgpIjgpK7gpYfgpLIg4KSV4KSw4KSo4KWHLCDgpK/gpL4g4KSF4KSo4KWN4oCN4KSvIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KS44KSC4KS14KS+4KSmIOCkleCksOCkqOClhyDgpJXgpYAg4KSG4KS14KWD4KSk4KWN4KSk4KS/IOCkleCliyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KS44KSC4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS54KSf4KS+4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU4OTg2OTIyNDYyNTE2MzU1OCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkuOCkguCkquCksOCljeCkleCli+CkgiDgpJXgpYcg4KSh4KWH4KSf4KS+IOCkleCliywg4KS44KS+4KSlIOCkueClgCDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkteCkv+CktuCkv+Ckt+CljeCknyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpK/gpYvgpIIg4KSV4KWLIOCkleClieCksiDgpJXgpLDgpKjgpYcsIOCkiOCkruClh+CksiDgpJXgpLDgpKjgpYcsIOCkr+CkviDgpIXgpKjgpY3igI3gpK8g4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpLjgpILgpLXgpL7gpKYg4KSV4KSw4KSo4KWHIOCkleClgCDgpIbgpLXgpYPgpKTgpY3gpKTgpL8g4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpLjgpILgpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+IOCkleCliyDgpLngpJ/gpL7gpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTcyNDM5MzI1MjE5NTM2MDIiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KS44KSC4KSq4KSw4KWN4KSV4KWL4KSCIOCkleClhyDgpKHgpYfgpJ/gpL4g4KSV4KWLLCDgpLjgpL7gpKUg4KS54KWAIOCkhuCkquCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KS14KS/4KS24KS/4KS34KWN4KSfIOCkteCljeCkr+CkleCljeCkpOCkv+Ckr+Cli+CkgiDgpJXgpYsg4KSV4KWJ4KSyIOCkleCksOCkqOClhywg4KSI4KSu4KWH4KSyIOCkleCksOCkqOClhywg4KSv4KS+IOCkheCkqOCljeKAjeCkryDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkuOCkguCkteCkvuCkpiDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkhuCkteClg+CkpOCljeCkpOCkvyDgpJXgpYsg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpLjgpILgpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+IOCkleCliyDgpLngpJ/gpL7gpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTg5ODY5MjI0NjI1MTYzNTU4Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkuOCkguCkquCksOCljeCkleCli+CkgiDgpJXgpYcg4KSh4KWH4KSf4KS+IOCkleCliywg4KS44KS+4KSlIOCkueClgCDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkteCkv+CktuCkv+Ckt+CljeCknyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpK/gpYvgpIIg4KSV4KWLIOCkleClieCksiDgpJXgpLDgpKjgpYcsIOCkiOCkruClh+CksiDgpJXgpLDgpKjgpYcsIOCkr+CkviDgpIXgpKjgpY3igI3gpK8g4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpLjgpILgpLXgpL7gpKYg4KSV4KSw4KSo4KWHIOCkleClgCDgpIbgpLXgpYPgpKTgpY3gpKTgpL8g4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KS44KSC4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS54KSf4KS+4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsbExvZyIgbXNnaWQ9IjM0NzgxMzMxODQ2MjQxMDI3MzkiPiLgpJXgpYngpLIg4KSy4KWJ4KSXIOCkquCkouCkvOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNzAwNjQ1MTg0ODcwNzYwMjg1Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkleCkviDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILCDgpJzgpL/gpLjgpK7gpYfgpIIg4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCklOCksCDgpIbgpIngpJ/gpJfgpYvgpIfgpILgpJcg4KSV4KWJ4KSyIOCkleCkviDgpKHgpYfgpJ/gpL4g4KS24KS+4KSu4KS/4KSyIOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS54KWH4KSc4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYgsIOCklOCksCDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkhuCkquCkleClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWHIOCkrOCkv+CkqOCkviDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS+4KSd4KS+IOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3NzcyNTc5NjgxMzIxNzI0NCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpJXgpL4g4KSV4KWJ4KSyIOCksuClieCklyDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCwg4KSc4KS/4KS44KSu4KWH4KSCIOCkh+CkqOCkleCkruCkv+CkguCklyDgpJTgpLAg4KSG4KSJ4KSf4KSX4KWL4KSH4KSC4KSXIOCkleClieCksiDgpJXgpL4g4KSh4KWH4KSf4KS+IOCktuCkvuCkruCkv+CksiDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSV4KWJ4KSyIOCksuClieCklyDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkueClh+CknOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILCDgpJTgpLAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIbgpKrgpJXgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClhyDgpKzgpL/gpKjgpL4g4KSV4KWJ4KSyIOCksuClieCklyDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkvuCkneCkviDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzcwMDY0NTE4NDg3MDc2MDI4NSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpKvgpLzgpYvgpKgg4KSV4KS+IOCkleClieCksiDgpLLgpYngpJcg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgsIOCknOCkv+CkuOCkruClh+CkgiDgpIfgpKjgpJXgpK7gpL/gpILgpJcg4KSU4KSwIOCkhuCkieCkn+Ckl+Cli+Ckh+CkguCklyDgpJXgpYngpLIg4KSV4KS+IOCkoeClh+Ckn+CkviDgpLbgpL7gpK7gpL/gpLIg4KS54KWILiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KS54KWH4KSc4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYgsIOCklOCksCDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClhyDgpKzgpL/gpKjgpL4g4KSV4KWJ4KSyIOCksuClieCklyDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkvuCkneCkviDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3Nzc3MjU3OTY4MTMyMTcyNDQiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkleCkviDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILCDgpJzgpL/gpLjgpK7gpYfgpIIg4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCklOCksCDgpIbgpIngpJ/gpJfgpYvgpIfgpILgpJcg4KSV4KWJ4KSyIOCkleCkviDgpKHgpYfgpJ/gpL4g4KS24KS+4KSu4KS/4KSyIOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSV4KWJ4KSyIOCksuClieCklyDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkueClh+CknOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILCDgpJTgpLAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCAg4KSG4KSq4KSV4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkleClieCksiDgpLLgpYngpJcg4KSh4KWH4KSf4KS+IOCkleCliyDgpLjgpL7gpJ3gpL4g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGxMb2ciIG1zZ2lkPSI4NTUyMDQ1NjY0NzQzNDk5MzU0Ij4i4KSV4KWJ4KSyIOCksuClieCklyDgpLLgpL/gpJbgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NjE4MDYwNjIyNzQxMTkyNDUiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkh+CkqOCkleCkruCkv+CkguCklyDgpJTgpLAg4KSG4KSJ4KSf4KSX4KWL4KSH4KSC4KSXIOCkleClieCksiDgpJXgpYcg4KSh4KWH4KSf4KS+IOCkuOCkueCkv+CkpCwg4KSG4KSq4KSV4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpL4g4KSV4KWJ4KSyIOCksuClieCklyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpI/gpKrgpY3igI3gpLgg4KSG4KSq4KSV4KWHIOCkleClieCksiDgpLLgpYngpJcg4KSV4KWLIOCkruCkv+Ckn+CkvuCkqOClhyDgpK/gpL4g4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpIfgpKjgpJXgpK7gpL/gpILgpJcg4KSU4KSwIOCkhuCkieCkn+Ckl+Cli+Ckh+CkguCklyDgpJXgpYngpLIg4KSV4KWHIOCkoeClh+Ckn+CkviDgpLjgpLngpL/gpKQsIOCkhuCkquCkleClhyDgpKvgpLzgpYvgpKgg4KSV4KS+IOCkleClieCksiDgpLLgpYngpJcg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4oCN4KS4IOCkhuCkquCkleClhyDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkleCliyDgpK7gpL/gpJ/gpL7gpKjgpYcg4KSv4KS+IOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY2MTgwNjA2MjI3NDExOTI0NSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCklOCksCDgpIbgpIngpJ/gpJfgpYvgpIfgpILgpJcg4KSV4KWJ4KSyIOCkleClhyDgpKHgpYfgpJ/gpL4g4KS44KS54KS/4KSkLCDgpIbgpKrgpJXgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCkviDgpJXgpYngpLIg4KSy4KWJ4KSXIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpIbgpKrgpJXgpYcg4KSV4KWJ4KSyIOCksuClieCklyDgpJXgpYsg4KSu4KS/4KSf4KS+4KSo4KWHIOCkr+CkviDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODM5NDE3MzYzNTI3ODc4NDIiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkh+CkqOCkleCkruCkv+CkguCklyDgpJTgpLAg4KSG4KSJ4KSf4KSX4KWL4KSH4KSC4KSXIOCkleClieCksiDgpJXgpYcg4KSh4KWH4KSf4KS+IOCkuOCkueCkv+CkpCwg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpJXgpL4g4KSV4KWJ4KSyIOCksuClieCklyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KSG4KSq4KSV4KWHIOCkleClieCksiDgpLLgpYngpJcg4KSV4KWLIOCkruCkv+Ckn+CkvuCkqOClhyDgpK/gpL4g4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUHJvZmlsZSIgbXNnaWQ9IjQ3MDE4ODk4NTI2MTI3MTY2NzgiPiLgpLjgpY3igI3gpLXgpK/gpIIg4KSV4KS+IOCkuOCkguCkquCksOCljeCklSDgpJXgpL7gpLDgpY3gpKEg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDYyNDc1MTUxODQ5ODg4ODQ4Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCkquCljeCksOCli+Ckq+CkvOCkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAsIOCknOCliOCkuOClhyDgpIbgpKrgpJXgpL4g4KSo4KS+4KSuIOCklOCksCDgpLjgpILgpKrgpLDgpY3gpJUg4KSc4KS+4KSo4KSV4KS+4KSw4KWALCDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KSV4KS+IOCkheCksOCljeCkpSDgpLngpYgg4KSV4KS/IOCkj+CkquCljeCkuCDgpIbgpKrgpJXgpYsg4KSq4KS54KSa4KS+4KSoIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkhuCkquCkleClgCDgpKrgpY3gpLDgpYvgpKvgpLzgpL7gpIfgpLIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkheCkqOCljeCkryDgpLLgpYvgpJfgpYvgpIIg4KSV4KWLIOCkreClh+CknCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ2MjQ3NTE1MTg0OTg4ODg0OCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSu4KWH4KSCIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSq4KWN4KSw4KWL4KSr4KS84KS+4KSH4KSyIOCknOCkvuCkqOCkleCkvuCksOClgCwg4KSc4KWI4KS44KWHIOCkhuCkquCkleCkviDgpKjgpL7gpK4g4KSU4KSwIOCkuOCkguCkquCksOCljeCklSDgpJzgpL7gpKjgpJXgpL7gpLDgpYAsIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpJXgpL4g4KSF4KSw4KWN4KSlIOCkueCliCDgpJXgpL8g4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYsg4KSq4KS54KSa4KS+4KSoIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkhuCkquCkleClgCDgpKrgpY3gpLDgpYvgpKvgpLzgpL7gpIfgpLIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkheCkqOCljeCkryDgpLLgpYvgpJfgpYvgpIIg4KSV4KWLIOCkreClh+CknCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVQcm9maWxlIiBtc2dpZD0iOTA3NzkzNjI4Nzc3Mzk3NjQzIj4i4KS44KWN4oCN4KS14KSv4KSCIOCkleCkviDgpLjgpILgpKrgpLDgpY3gpJUg4KSV4KS+4KSw4KWN4KShIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSu4KWH4KSCIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpKjgpL/gpJzgpYAg4KSq4KWN4KSw4KWL4KSr4KS84KS+4KSH4KSyIOCknOCkvuCkqOCkleCkvuCksOClgCwg4KSc4KWI4KS44KWHIOCkhuCkquCkleCkviDgpKjgpL7gpK4g4KSU4KSwIOCkuOCkguCkquCksOCljeCklSDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWLIOCkrOCkpuCksuCkqOClhyDgpK/gpL4g4KSJ4KS44KSu4KWH4KSCIOCkleClgeCkmyDgpJzgpYvgpKHgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KSV4KS+IOCkheCksOCljeCkpSDgpLngpYgg4KSV4KS/IOCkj+CkquCljeCkuCDgpIbgpKrgpJXgpYsg4KSq4KS54KSa4KS+4KSoIOCkuOCkleCkpOCkviDgpLngpYgg4KSU4KSwIOCkhuCkquCkleClgCDgpKrgpY3gpLDgpYvgpKvgpLzgpL7gpIfgpLIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkheCkqOCljeCkryDgpLLgpYvgpJfgpYvgpIIg4KSV4KWLIOCkreClh+CknCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KSo4KS/4KSc4KWAIOCkquCljeCksOCli+Ckq+CkvOCkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAsIOCknOCliOCkuOClhyDgpIbgpKrgpJXgpL4g4KSo4KS+4KSuIOCklOCksCDgpLjgpILgpKrgpLDgpY3gpJUg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleCliyDgpKzgpKbgpLLgpKjgpYcg4KSv4KS+IOCkieCkuOCkruClh+CkgiDgpJXgpYHgpJsg4KSc4KWL4KSh4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkleCkviDgpIXgpLDgpY3gpKUg4KS54KWIIOCkleCkvyDgpJDgpKrgpY3gpLggIOCkhuCkquCkleCliyDgpKrgpLngpJrgpL7gpKgg4KS44KSV4KSk4KS+IOCkueCliCDgpJTgpLAg4KSG4KSq4KSV4KWAIOCkquCljeCksOCli+Ckq+CkvOCkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSF4KSo4KWN4KSvIOCksuCli+Ckl+Cli+CkgiDgpJXgpYsg4KSt4KWH4KScIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTI2ODkyMDk1NjE1MjQxOTE3MCI+IuCkheCkquCkqOClgCDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KS44KWN4oCN4KSf4KWN4KSw4KWA4KSuIOCkquCkouCkvOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4i4KSP4KSqIOCkleCliyDgpIbgpKrgpJXgpYcg4KSU4KSwIOCkhuCkquCkleClhyDgpK7gpL/gpKTgpY3gpLDgpYvgpIIg4KSV4KWAIOCkqOCkiCDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkpOCklSDgpKrgpLngpYHgpILgpJrgpKjgpYcg4KSU4KSwIOCkieCkqOCljeCkueClh+CkgiDgpLjgpK7gpKjgpY3igI3gpLXgpK/gpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCknOCkvuCkqOCkleCkvuCksOClgCDgpLjgpL7gpJ3gpL4g4KSV4KSw4KSk4KWHIOCkuOCkruCkryDgpLjgpL7gpLXgpKfgpL7gpKgg4KSw4KS54KWH4KSCIC0g4KSH4KS44KS44KWHIOCkl+Cli+CkquCkqOClgOCkr+CkpOCkviDgpKrgpLAg4KSn4KWN4KSv4KS+4KSoIOCkpuCkv+CkjyDgpKzgpL/gpKjgpL4sIOCkj+CkqiDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCksCDgpIbgpKrgpJXgpYcg4KSU4KSwIOCkhuCkquCkleClhyDgpK7gpL/gpKTgpY3gpLDgpYvgpIIg4KSV4KWHIOCkrOClgOCkmiDgpLjgpILgpJrgpL7gpLDgpYvgpIIg4KSV4KWLIOCkquCkouCkvCDgpLjgpJXgpKTgpL4g4KS54KWILiDgpKfgpY3igI3gpK/gpL7gpKgg4KSm4KWH4KSCOiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkuOCkreClgCDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCksCDgpLLgpL7gpJfgpYIg4KSo4KS54KWA4KSCIOCkleClgCDgpJzgpL4g4KS44KSV4KSk4KWALiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNTA0MTc5MjIyNDkzMjM1NjQ1Ij4i4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkuOCljeKAjeCkn+CljeCksOClgOCkriDgpK7gpYfgpIIg4KSy4KS/4KSW4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDg2NTU3NTUyMjA0MTE0ODQ5Ij4i4KSP4KSqIOCkleCliyDgpIbgpKrgpJXgpYcg4KSu4KS/4KSk4KWN4KSw4KWL4KSCIOCkleClgCDgpKjgpIgg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCknOCkvuCkqOCkleCkvuCksOClgCDgpLjgpL7gpJ3gpL4g4KSV4KSw4KSk4KWHIOCkuOCkruCkryDgpLjgpL7gpLXgpKfgpL7gpKgg4KSw4KS54KWH4KSCIC0g4KSH4KS44KS44KWHIOCkj+CkquCljeCkuCDgpJDgpLjgpYcg4KS44KSC4KSm4KWH4KS2IOCkrOCkqOCkviDgpLjgpJXgpKTgpL4g4KS54KWIIOCknOCliyDgpJXgpL/gpLjgpYAg4KSu4KS/4KSk4KWN4KSwIOCkleClgCDgpJPgpLAg4KS44KWHIOCkhuCkpOClhyDgpKbgpL/gpJbgpL7gpIgg4KSm4KWH4KSk4KWHIOCkueCliOCkgi4g4KSn4KWN4oCN4KSv4KS+4KSoIOCkpuClh+Ckgjog4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpLjgpK3gpYAg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpLAg4KSy4KS+4KSX4KWCIOCkqOCkueClgOCkgiDgpJXgpYAg4KSc4KS+IOCkuOCkleCkpOClgC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwODY1NTc1NTIyMDQxMTQ4NDkiPiLgpI/gpKog4KSV4KWLIOCkhuCkquCkleClhyDgpK7gpL/gpKTgpY3gpLDgpYvgpIIg4KSV4KWAIOCkqOCkiCDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkpuCksOCljeCktuCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkuOCkvuCkneCkviDgpJXgpLDgpKTgpYcg4KS44KSu4KSvIOCkuOCkvuCkteCkp+CkvuCkqCDgpLDgpLngpYfgpIIgLSDgpIfgpLjgpLjgpYcg4KSQ4KSq4KWN4KS4ICDgpJDgpLjgpYcg4KS44KSC4KSm4KWH4KS2IOCkrOCkqOCkviDgpLjgpJXgpKTgpL4g4KS54KWIIOCknOCliyDgpJXgpL/gpLjgpYAg4KSu4KS/4KSk4KWN4KSwIOCkleClgCDgpJPgpLAg4KS44KWHIOCkhuCkpOClhyDgpKbgpL/gpJbgpL7gpIgg4KSm4KWH4KSk4KWHIOCkueCliOCkgi4g4KSn4KWN4oCN4KSv4KS+4KSoIOCkpuClh+Ckgjog4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpLjgpK3gpYAg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpLAg4KSy4KS+4KSX4KWCIOCkqOCkueClgOCkgiDgpJXgpYAg4KSc4KS+IOCkuOCkleCkpOClgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxlbmRhciIgbXNnaWQ9IjU5NzI3Mjc1NjAyNTc2MTIzOTgiPiLgpJXgpYfgpLLgpYjgpILgpKHgpLAg4KSI4KS14KWH4KSC4KSfIOCkleClhyDgpLjgpL7gpKUt4KS44KS+4KSlIOCkl+Cli+CkquCkqOClgOCkryDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MjE2NDYyMDQ5MDU3NjU4NzIzIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpK7gpL/gpKTgpY3gpLDgpYvgpIIg4KSv4KS+IOCkuOCkueCkleCksOCljeCkruCkv+Ckr+Cli+CkgiDgpJXgpYcg4KSV4KWI4KSy4KWH4KSC4KSh4KSwIOCkh+CkteClh+CkguCknyDgpLjgpLngpL/gpKQsIOCkhuCkquCkleClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSq4KSwIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpJXgpYjgpLLgpYfgpILgpKHgpLAg4KSH4KS14KWH4KSC4KSfIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpLjgpYcg4KSX4KWL4KSq4KSo4KWA4KSv4KSk4KS+IOCkr+CkviDgpLjgpILgpLXgpYfgpKbgpKjgpLbgpYDgpLLgpKTgpL4g4KSq4KSwIOCkp+CljeCkr+CkvuCkqCDgpKbgpL/gpI8g4KSs4KS/4KSo4KS+LCDgpI/gpKrgpY3gpLgg4KSG4KSq4KSV4KWHIOCkleCliOCksuClh+CkguCkoeCksCDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkvuCkneCkviDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliCDgpK/gpL4g4KS44KS54KWH4KScIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzQzNDU0ODY4MjQ3MDg1MTU4MyI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSu4KS/4KSk4KWN4KSw4KWL4KSCIOCkr+CkviDgpLjgpLngpJXgpLDgpY3gpK7gpL/gpK/gpYvgpIIg4KSV4KWHIOCkleCliOCksuClh+CkguCkoeCksCDgpIfgpLXgpYfgpILgpJ8g4KS44KS54KS/4KSkLCDgpIbgpKrgpJXgpYcg4KSr4KS84KWL4KSoIOCkquCksCDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KSV4KWI4KSy4KWH4KSC4KSh4KSwIOCkh+CkteClh+CkguCknyDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KS44KWHIOCkl+Cli+CkquCkqOClgOCkr+CkpOCkviDgpK/gpL4g4KS44KSC4KS14KWH4KSm4KSo4KS24KWA4KSy4KSk4KS+IOCkquCksCDgpKfgpY3gpK/gpL7gpKgg4KSm4KS/4KSPIOCkrOCkv+CkqOCkviwg4KSP4KSq4KWN4KS4IOCkhuCkquCkleClhyDgpJXgpYjgpLLgpYfgpILgpKHgpLAg4KSh4KWH4KSf4KS+IOCkleCliyDgpLjgpL7gpJ3gpL4g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYgg4KSv4KS+IOCkuOCkueClh+CknCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDIxNjQ2MjA0OTA1NzY1ODcyMyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkruCkv+CkpOCljeCksOCli+CkgiDgpK/gpL4g4KS44KS54KSV4KSw4KWN4KSu4KS/4KSv4KWL4KSCIOCkleClhyDgpJXgpYjgpLLgpYfgpILgpKHgpLAg4KSH4KS14KWH4KSC4KSfIOCkuOCkueCkv+CkpCwg4KSG4KSq4KSV4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpKrgpLAg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkleCliOCksuClh+CkguCkoeCksCDgpIfgpLXgpYfgpILgpJ8g4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpJfgpYvgpKrgpKjgpYDgpK/gpKTgpL4g4KSv4KS+IOCkuOCkguCkteClh+CkpuCkqOCktuClgOCksuCkpOCkviDgpKrgpLAg4KSn4KWN4KSv4KS+4KSoIOCkpuCkv+CkjyDgpKzgpL/gpKjgpL4sIOCkkOCkquCljeCkuCAg4KSG4KSq4KSV4KWHIOCkleCliOCksuClh+CkguCkoeCksCDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkvuCkneCkviDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliCDgpK/gpL4g4KS44KS54KWH4KScIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzQzNDU0ODY4MjQ3MDg1MTU4MyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkruCkv+CkpOCljeCksOCli+CkgiDgpK/gpL4g4KS44KS54KSV4KSw4KWN4KSu4KS/4KSv4KWL4KSCIOCkleClhyDgpJXgpYjgpLLgpYfgpILgpKHgpLAg4KSH4KS14KWH4KSC4KSfIOCkuOCkueCkv+CkpCwg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpKrgpLAg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkleCliOCksuClh+CkguCkoeCksCDgpIfgpLXgpYfgpILgpJ8g4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpJfgpYvgpKrgpKjgpYDgpK/gpKTgpL4g4KSv4KS+IOCkuOCkguCkteClh+CkpuCkqOCktuClgOCksuCkpOCkviDgpKrgpLAg4KSn4KWN4KSv4KS+4KSoIOCkpuCkv+CkjyDgpKzgpL/gpKjgpL4sIOCkkOCkquCljeCkuCAg4KSG4KSq4KSV4KWHIOCkleCliOCksuClh+CkguCkoeCksCDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkuOCkvuCkneCkviDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliCDgpK/gpL4g4KS44KS54KWH4KScIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGVuZGFyIiBtc2dpZD0iODQzODg3NDc1NTE5MzgyNTY0NyI+IuCkheCkquCkqOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWHIOCkrOCkv+KAjeCkqOCkviDgpJXgpYjgpLLgpYfgpILgpKHgpLAg4KSI4KS14KWH4KSC4KSfIOCknOCli+CkoeCkvOClh+CkgiDgpK/gpL4g4KS44KSC4KS24KWL4KSn4KS/4oCN4KSkIOCkleCksOClh+CkgiDgpJTgpLAg4KSF4KSk4KS/4oCN4KSl4KS/4oCN4KSv4KWL4KSCIOCkleCliyDgpIjgpK7gpYfgpLIg4KSt4KWH4KSc4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSu4KS/4KSk4KWN4KSw4KWL4KSCIOCkr+CkviDgpLjgpLngpJXgpLDgpY3gpK7gpL/gpK/gpYvgpIIg4KSV4KWHIOCkiOCkteClh+CkguCknyDgpJXgpYcg4KS44KS+4KSlIOCkueClgCDgpLXgpYcg4KSI4KS14KWH4KSC4KSfIOCknOCli+CkoeCkvOCkqOClhywg4KSo4KS/4KSV4KS+4KSy4KSo4KWHLCDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpL/gpKjgpY3gpLngpYfgpIIg4KSG4KSqIOCkheCkquCkqOClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSq4KSwIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSH4KS44KS44KWHIOCkj+CkquCljeCkuCzgpIXgpKrgpKjgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClhyDgpKzgpL/gpKjgpL4g4KSJ4KSoIOCkuOCkguCkpuClh+CktuCli+CkgiDgpJXgpYsg4KSt4KWH4KScIOCkuOCkleCkpOCkviDgpLngpYgg4KSc4KWLIOCkleCliOCksuClh+CkguCkoeCksCDgpLjgpY3gpLXgpL7gpK7gpL/gpK/gpYvgpIIg4KSV4KWAIOCkk+CksCDgpLjgpYcg4KSG4KSk4KWHIOCkpuCkv+CkluCkvuCkiCDgpKbgpYfgpKTgpYcg4KS54KWI4KSCLCDgpK/gpL4g4KSI4KS14KWH4KSC4KSfIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSu4KS/4KSk4KWN4KSw4KWL4KSCIOCkr+CkviDgpLjgpLngpJXgpLDgpY3gpK7gpL/gpK/gpYvgpIIg4KSV4KWHIOCkiOCkteClh+CkguCknyDgpJXgpYcg4KS44KS+4KSlIOCkueClgCDgpLXgpYcg4KSI4KS14KWH4KSC4KSfIOCknOCli+CkoeCkvOCkqOClhywg4KSo4KS/4KSV4KS+4KSy4KSo4KWHLCDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpL/gpKjgpY3gpLngpYfgpIIg4KSG4KSqIOCkheCkquCkqOClhyDgpKvgpLzgpYvgpKgg4KSq4KSwIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSH4KS44KS44KWHIOCkj+CkquCljeCkuCwg4KSF4KSq4KSo4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkieCkqCDgpLjgpILgpKbgpYfgpLbgpYvgpIIg4KSV4KWLIOCkreClh+CknCDgpLjgpJXgpKTgpL4g4KS54KWIIOCknOCliyDgpJXgpYjgpLLgpYfgpILgpKHgpLAg4KS44KWN4KS14KS+4KSu4KS/4KSv4KWL4KSCIOCkleClgCDgpJPgpLAg4KS44KWHIOCkhuCkpOClhyDgpKbgpL/gpJbgpL7gpIgg4KSm4KWH4KSk4KWHIOCkueCliOCkgiwg4KSv4KS+IOCkiOCkteClh+CkguCknyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkruCkv+CkpOCljeCksOCli+CkgiDgpK/gpL4g4KS44KS54KSV4KSw4KWN4KSu4KS/4KSv4KWL4KSCIOCkleClhyDgpIjgpLXgpYfgpILgpJ8g4KSV4KWHIOCkuOCkvuCkpSDgpLngpYAg4KS14KWHIOCkiOCkteClh+CkguCknyDgpJzgpYvgpKHgpLzgpKjgpYcsIOCkqOCkv+CkleCkvuCksuCkqOClhywg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSc4KS/4KSo4KWN4KS54KWH4KSCIOCkhuCkqiDgpIXgpKrgpKjgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkquCksCDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIOCkh+CkuOCkuOClhyDgpJDgpKrgpY3gpLggLOCkheCkquCkqOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWHIOCkrOCkv+CkqOCkviDgpIngpKgg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpK3gpYfgpJwg4KS44KSV4KSk4KS+IOCkueCliCDgpJzgpYsg4KSV4KWI4KSy4KWH4KSC4KSh4KSwIOCkuOCljeCkteCkvuCkruCkv+Ckr+Cli+CkgiDgpJXgpYAg4KST4KSwIOCkuOClhyDgpIbgpKTgpYcg4KSm4KS/4KSW4KS+4KSIIOCkpuClh+CkpOClhyDgpLngpYjgpIIsIOCkr+CkviDgpIjgpLXgpYfgpILgpJ8g4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMzI0NDY5NDk2MzI3MjQ5Mzc2Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSu4KS/4KSk4KWN4KSw4KWL4KSCIOCkr+CkviDgpLjgpLngpJXgpLDgpY3gpK7gpL/gpK/gpYvgpIIg4KSV4KWHIOCkiOCkteClh+CkguCknyDgpJXgpYcg4KS44KS+4KSlIOCkueClgCDgpLXgpYcg4KSI4KS14KWH4KSC4KSfIOCknOCli+CkoeCkvOCkqOClhywg4KSo4KS/4KSV4KS+4KSy4KSo4KWHLCDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpL/gpKjgpY3gpLngpYfgpIIg4KSG4KSqIOCkheCkquCkqOClhyDgpKvgpLzgpYvgpKgg4KSq4KSwIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4g4KSH4KS44KS44KWHIOCkkOCkquCljeCkuCAsIOCkheCkquCkqOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWHIOCkrOCkv+CkqOCkviDgpIngpKgg4KS44KSC4KSm4KWH4KS24KWL4KSCIOCkleCliyDgpK3gpYfgpJwg4KS44KSV4KSk4KS+IOCkueCliCDgpJzgpYsg4KSV4KWI4KSy4KWH4KSC4KSh4KSwIOCkuOCljeCkteCkvuCkruCkv+Ckr+Cli+CkgiDgpJXgpYAg4KST4KSwIOCkuOClhyDgpIbgpKTgpYcg4KSm4KS/4KSW4KS+4KSIIOCkpuClh+CkpOClhyDgpLngpYjgpIIsIOCkr+CkviDgpIjgpLXgpYfgpILgpJ8g4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iODY4ODMzNDk3NDAzNjgyMzMzMCI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkleCksuClgCDgpLjgpY3igI3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSy4KS/4KSPIOCkleClg+CkpOCljeCksOCkv+CkriDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSkIOCkrOCkqOCkvuCkj+CkgiDgpK/gpL4g4KSP4KSVIOCkqOCkr+CkviDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+IOCkh+CkguCkuOCljeKAjeCkn+ClieCksiDgpJXgpLDgpYfgpIIuIOCkr+CkuSDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkuOCljeKAjeCkpeCkvuCkqCDgpJTgpLAv4KSv4KS+IOCkheCkqOCljeKAjeCkryDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KWL4KSCIOCknOCliOCkuOClhyBHUFMg4KSv4KS+IOCkuOCljeKAjeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpKTgpL7gpJPgpIIg4KSm4KWN4KS14KS+4KSw4KS+IOCksuCljOCkn+CkvuCkiCDgpJfgpIgg4KS44KWN4KSl4KS/4KSk4KS/IOCkleCliyDgpJPgpLXgpLDgpLDgpL7gpIfgpKEg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSy4KS/4KSPIOCkleClg+CkpOCljeCksOCkv+CkriDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSkIOCkrOCkqOCkvuCkj+CkgiDgpK/gpL4g4KSP4KSVIOCkqOCkr+CkviDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+IOCkh+CkguCkuOCljeKAjeCkn+ClieCksiDgpJXgpLDgpYfgpIIuIOCkr+CkuSDgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpY3igI3gpKXgpL7gpKgg4KSU4KSwL+Ckr+CkviDgpIXgpKjgpY3igI3gpK8g4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCli+CkgiDgpJzgpYjgpLjgpYcgR1BTIOCkr+CkviDgpLjgpY3igI3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+4KST4KSCIOCkpuCljeCkteCkvuCksOCkviDgpLLgpYzgpJ/gpL7gpIgg4KSX4KSIIOCkuOCljeCkpeCkv+CkpOCkvyDgpJXgpYsg4KST4KS14KSw4KSw4KS+4KSH4KShIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iMjgzNjMwODA3NjcyMDU1MzgzNyI+IuCkheCkpOCkv+CksOCkv+CkleCljeCkpCDgpLjgpY3igI3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+IOCkhuCkpuClh+CktuCli+CkgiDgpK7gpYfgpIIg4KSq4KS54KWB4KSC4KSa4KWHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iNTk0NTE2NjY0MjMzNTgwMDc2MyI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSF4KSk4KS/4KSw4KS/4KSV4KWN4KSkIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpKTgpL4g4KSG4KSm4KWH4KS24KWL4KSCIOCkquCksCDgpKrgpLngpYHgpILgpJrgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkj+CkquCljeCkuCDgpJXgpYsgR1BTIOCkr+CkviDgpIXgpKjgpY3gpK8g4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCli+CkgiDgpJXgpYcg4KS44KSC4KSa4KS+4KSy4KSoIOCkruClh+CkgiDgpKzgpL7gpKfgpL4g4KSq4KS54KWB4KSC4KSa4KS+4KSo4KWHIOCkpuClhyDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIXgpKTgpL/gpLDgpL/gpJXgpY3gpKQg4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkpOCkviDgpIbgpKbgpYfgpLbgpYvgpIIg4KSq4KSwIOCkquCkueClgeCkguCkmuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSQ4KSq4KWN4KS4ICDgpJXgpYsgR1BTIOCkr+CkviDgpIXgpKjgpY3gpK8g4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCli+CkgiDgpJXgpYcg4KS44KSC4KSa4KS+4KSy4KSoIOCkruClh+CkgiDgpKzgpL7gpKfgpL4g4KSq4KS54KWB4KSC4KSa4KS+4KSo4KWHIOCkpuClhyDgpLjgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI2NTc4MTAxMTk5ODI1MTkzODczIj4i4KSV4KS/4KS44KWAIOCkuOCljeKAjeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpKTgpL4g4KSV4KWLIOCkh+CkguCkuOCljeKAjeCkn+ClieCksiDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSy4KS/4KSPIOCkleClg+CkpOCljeCksOCkv+CkriDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSkIOCkrOCkqOCkvuCkj+CkgiDgpK/gpL4g4KSP4KSVIOCkqOCkjyDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+IOCkleCliyDgpIfgpILgpLjgpY3igI3gpJ/gpYngpLIg4KSV4KSw4KWH4KSCLiDgpK/gpLkg4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpY3igI3gpKXgpL7gpKgg4KSU4KSwL+Ckr+CkviDgpIXgpKjgpY3igI3gpK8g4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCli+CkgiDgpJzgpYjgpLjgpYcgR1BTIOCkr+CkviDgpLjgpY3igI3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+4KST4KSCIOCkpuCljeCkteCkvuCksOCkviDgpLLgpYzgpJ/gpL7gpIgg4KSX4KSIIOCkuOCljeCkpeCkv+CkpOCkvyDgpJXgpYsg4KST4KS14KSw4KSw4KS+4KSH4KShIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSy4KS/4KSPIOCkleClg+CkpOCljeCksOCkv+CkriDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSkIOCkrOCkqOCkvuCkj+CkgiDgpK/gpL4g4KSP4KSVIOCkqOCkjyDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSk4KS+IOCkleCliyDgpIfgpILgpLjgpY3igI3gpJ/gpYngpLIg4KSV4KSw4KWH4KSCLiDgpK/gpLkg4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KWN4oCN4KSl4KS+4KSoIOCklOCksC/gpK/gpL4g4KSF4KSo4KWN4oCN4KSvIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpYvgpIIg4KSc4KWI4KS44KWHIEdQUyDgpK/gpL4g4KS44KWN4oCN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkpOCkvuCkk+CkgiDgpKbgpY3gpLXgpL7gpLDgpL4g4KSy4KWM4KSf4KS+4KSIIOCkl+CkiCDgpLjgpY3gpKXgpL/gpKTgpL8g4KSV4KWLIOCkk+CkteCksOCksOCkvuCkh+CkoSDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiLgpLjgpJ/gpYDgpJUg4KS44KWN4KSl4KS+4KSoIChHUFMg4KSU4KSwIOCkqOClh+Ckn+CkteCksOCljeCklS3gpIbgpKfgpL7gpLDgpL/gpKQpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iNTI5NTA0NzU2MzU2NDk4MTI1MCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSX4KWN4KSy4KWL4KSs4KSyIOCkquCli+CknOCkvOCkv+CktuCkqOCkv+CkguCklyDgpLjgpL/gpLjgpY3gpJ/gpK4gKEdQUykg4KSv4KS+IOCkuOClh+CksiDgpJ/gpYngpLXgpLAg4KSU4KSwIFdpLUZpIOCknOCliOCkuOClhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCli+CkgiDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkleClhyDgpIbgpKrgpJXgpL4g4KS44KSf4KWA4KSVIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIOCkj+CkquCljeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSH4KSoIOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpLXgpL7gpJPgpIIg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpL/gpI8g4KSc4KS+4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSH4KSo4KWN4KS54KWH4KSCIOCkmuCkvuCksuClgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPIOCklOCksCDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkquCksCDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4g4KSP4KSq4KWN4KS4IOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSv4KS5IOCkquCkpOCkviDgpJXgpLDgpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCkleCkvyDgpIbgpKog4KSV4KS54KS+4KSCIOCkquCksCDgpLngpYjgpIIsIOCklOCksCDgpIXgpKTgpL/gpLDgpL/gpJXgpY3gpKQg4KSs4KWI4KSf4KSw4KWAIOCkleClgCDgpJbgpKrgpKQg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iNTI5NTA0NzU2MzU2NDk4MTI1MCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkl+CljeCksuCli+CkrOCksiDgpKrgpYvgpJzgpLzgpL/gpLbgpKjgpL/gpILgpJcg4KS44KS/4KS44KWN4KSf4KSuIChHUFMpIOCkr+CkviDgpLjgpYfgpLIg4KSf4KWJ4KS14KSwIOCklOCksCBXaS1GaSDgpJzgpYjgpLjgpYcg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpYvgpIIg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpJXgpYcg4KSG4KSq4KSV4KS+IOCkuOCkn+ClgOCklSDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpJDgpKrgpY3gpLggIOCkpuCljeCkteCkvuCksOCkviDgpIfgpKgg4KS44KWN4KSl4KS+4KSoIOCkuOClh+CkteCkvuCkk+CkgiDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCkv+CkjyDgpJzgpL7gpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpIfgpKjgpY3gpLngpYfgpIIg4KSa4KS+4KSy4KWCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8g4KSU4KSwIOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkieCkquCksuCkrOCljeCkpyDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiDgpJDgpKrgpY3gpLggIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSv4KS5IOCkquCkpOCkviDgpJXgpLDgpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCkleCkvyDgpIbgpKog4KSV4KS54KS+4KSCIOCkquCksCDgpLngpYjgpIIsIOCklOCksCDgpIXgpKTgpL/gpLDgpL/gpJXgpY3gpKQg4KSs4KWI4KSf4KSw4KWAIOCkleClgCDgpJbgpKrgpKQg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjQ4ODc4OTUzNjIzNTQyMzk2MjgiPiLgpIXgpKjgpYHgpK7gpL7gpKjgpL/gpKQg4KS44KWN4KSl4KS+4KSoICjgpKjgpYfgpJ/gpLXgpLDgpY3gpJUt4KSG4KSn4KS+4KSw4KS/4KSkKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KS+IOCkheCkqOClgeCkruCkvuCkqOCkv+CkpCDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpIfgpLgg4KS44KWN4KSl4KS+4KSoIOCkleCliyDgpLjgpYfgpLIg4KSf4KWJ4KS14KSwIOCklOCksCBXaS1GaSDgpJzgpYjgpLjgpYcg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpYvgpIIg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpJXgpYcg4KS44KWN4KSl4KS+4KSoIOCkuOClh+CkteCkvuCkk+CkgiDgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4g4KS54KWILiDgpI/gpKrgpY3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkh+CkqCDgpLjgpY3gpKXgpL7gpKgg4KS44KWH4KS14KS+4KST4KSCIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSH4KSo4KWN4KS54KWH4KSCIOCkmuCkvuCksuClgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPIOCklOCksCDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkruClh+CkgiDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4g4KSP4KSq4KWN4KS4IOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSv4KS5IOCkquCkpOCkviDgpLLgpJfgpL7gpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCkleCkvyDgpIbgpKog4KSy4KSX4KSt4KSXIOCkleCkueCkvuCkgiDgpKrgpLAg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleCkviDgpIXgpKjgpYHgpK7gpL7gpKjgpL/gpKQg4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4g4KSH4KS4IOCkuOCljeCkpeCkvuCkqCDgpJXgpYsg4KS44KWH4KSyIOCkn+ClieCkteCksCDgpJTgpLAgV2ktRmkg4KSc4KWI4KS44KWHIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KWL4KSCIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSV4KWHIOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpLXgpL7gpJPgpIIg4KSm4KWN4KS14KS+4KSw4KS+IOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+IOCkueCliC4g4KSQ4KSq4KWN4KS4ICDgpKbgpY3gpLXgpL7gpLDgpL4g4KSH4KSoIOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpLXgpL7gpJPgpIIg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpIfgpKjgpY3gpLngpYfgpIIg4KSa4KS+4KSy4KWCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8g4KSU4KSwIOCkhuCkquCkleClhyDgpIngpKrgpJXgpLDgpKMg4KSu4KWH4KSCIOCkieCkquCksuCkrOCljeCkpyDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiDgpJDgpKrgpY3gpLggIOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSv4KS5IOCkquCkpOCkviDgpLLgpJfgpL7gpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIOCkleCkvyDgpIbgpKog4KSy4KSX4KSt4KSXIOCkleCkueCkvuCkgiDgpKrgpLAg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIyMzYzOTY5NjQxNzkyMzg4OTQ3Ij4iU3VyZmFjZUZsaW5nZXIg4KSu4KWH4KSCIOCkquCkueClgeCkguCkmuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsgU3VyZmFjZUZsaW5nZXIg4KSo4KS/4KSu4KWN4oCN4KSoLeCkuOCljeKAjeCkpOCksCDgpLjgpYHgpLXgpL/gpKfgpL7gpI/gpIIg4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IuCkkOCkquCljeCkuCDgpJXgpYsgU3VyZmFjZUZsaW5nZXIg4KSo4KS/4KSu4KWN4oCN4KSoLeCkuOCljeKAjeCkpOCksCDgpLjgpYHgpLXgpL/gpKfgpL7gpI/gpIIg4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuCkq+CkvOCljeCksOClh+CkriDgpKzgpKvgpLzgpLAg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSr4KS84KWN4KSw4KWH4KSuIOCkrOCkq+CkvOCksCDgpJXgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkq+CkvOCljeCksOClh+CkriDgpKzgpKvgpLzgpLAg4KSV4KWAIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJJbnB1dEZsaW5nZXIg4KSP4KSV4KWN4KS44KWH4KS4IOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIElucHV0RmxpbmdlciDgpKjgpL/gpK7gpY3igI3gpKgt4KS44KWN4oCN4KSk4KSwIOCkuOClgeCkteCkv+Ckp+CkvuCkk+CkgiDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4iV2lmaSDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KSV4KWLIOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJTgpLAgV2lmaSDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KS44KWHIOCkleCkqOClh+CkleCljeCknyDgpJXgpLDgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJTgpLAgV2lmaSDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KS44KWHIOCkleCkqOClh+CkleCljeCknyDgpJXgpLDgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iV2lmaSDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KSV4KWLIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSI0NTQzOTEyMjkyNjgxODI2OTg2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyBXaWZpIOCkoeCkv+CkuOCljeCkquCljeCksuClhyDgpJXgpYAg4KSo4KS/4KSu4KWN4KSoLeCkuOCljeCkpOCksCDgpJXgpYAg4KS44KWB4KS14KS/4KSn4KS+4KSP4KSCIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSI0NTQzOTEyMjkyNjgxODI2OTg2Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsgV2lmaSDgpKHgpL/gpLjgpY3gpKrgpY3gpLLgpYcg4KSV4KWAIOCkqOCkv+CkruCljeCkqC3gpLjgpY3gpKTgpLAg4KSV4KWAIOCkuOClgeCkteCkv+Ckp+CkvuCkj+CkgiDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2ODU3MTM0NDk4NDAyMzQ2NzA4Ij4i4KSR4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYsg4KSV4KWI4KSq4KWN4oCN4KSa4KSwIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjYyMTA1OTc3NTQyMTIyMDg4NTMiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkkeCkoeCkv+Ckr+CliyDgpIbgpIngpJ/gpKrgpYHgpJ8g4KSV4KWLIOCkleCliOCkquCljeKAjeCkmuCksCDgpJTgpLAg4KSw4KWA4KSh4KS+4KSv4KSw4KWH4KSV4KWN4oCN4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjYyMTA1OTc3NTQyMTIyMDg4NTMiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkkeCkoeCkv+Ckr+CliyDgpIbgpIngpJ/gpKrgpYHgpJ8g4KSV4KWLIOCkleCliOCkquCljeKAjeCkmuCksCDgpJTgpLAg4KSw4KWA4KSh4KS+4KSv4KSw4KWH4KSV4KWN4oCN4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvSG90d29yZCIgbXNnaWQ9IjE4OTA1NTM5MzU2NTAzNDk4MDgiPiLgpLngpYngpJ/gpLXgpLDgpY3gpKEg4KSq4KS54KSa4KS+4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvSG90d29yZCIgbXNnaWQ9IjkxNTE4MDc5NTgxNTMwNTY4MTAiPiLgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSV4KWLIOCkueClieCkn+CkteCksOCljeCkoSDgpKrgpLngpJrgpL7gpKgg4KSV4KWHIOCksuCkv+CkjyDgpJHgpKHgpL/gpK/gpYsg4KSV4KWI4KSq4KWN4KSa4KSwIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiDgpJXgpYjgpKrgpY3gpJrgpLAg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkruClh+CkgiDgpLngpYsg4KS44KSV4KSk4KS+IOCkueCliCDgpLLgpYfgpJXgpL/gpKgg4KS14KS5IOCkheCkqOCljeCkryDgpJHgpKHgpL/gpK/gpYsg4KSV4KWI4KSq4KWN4KSa4KSwICjgpIngpKbgpL4uIOCkleCliOCkruCkleClieCksOCljeCkoeCksCkg4KSV4KWLIOCkqOCkueClgOCkgiDgpLDgpYvgpJXgpKTgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIyMjQ2ODI4NzczNTg5MDk0MDIzIj4i4KS14KWA4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYsg4KSV4KWI4KSq4KWN4oCN4KSa4KSwIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjM1OTQ4MTY1ODAzNDE0OTg2MCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS14KWA4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYsg4KSV4KWI4KSq4KWN4oCN4KSa4KSwIOCklOCksCDgpLDgpYDgpKHgpL7gpK/gpLDgpYfgpJXgpY3igI3gpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMzU5NDgxNjU4MDM0MTQ5ODYwIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLXgpYDgpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliyDgpJXgpYjgpKrgpY3igI3gpJrgpLAg4KSU4KSwIOCksOClgOCkoeCkvuCkr+CksOClh+CkleCljeKAjeCknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCIgbXNnaWQ9Ijc4MTUzOTg5NjkzMDMzODIwMTYiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KS14KWA4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYsg4KSV4KWI4KSq4KWN4oCN4KSa4KSwIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjI3Nzk3OTMwNjQ3MDkzNTAyODkiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLXgpYDgpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliyDgpJXgpYjgpKrgpY3igI3gpJrgpLAg4KSU4KSwIOCksOClgOCkoeCkvuCkr+CksOClh+CkleCljeKAjeCknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlU2VjdXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIyNzc5NzkzMDY0NzA5MzUwMjg5Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KS14KWA4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYsg4KSV4KWI4KSq4KWN4oCN4KSa4KSwIOCklOCksCDgpLDgpYDgpKHgpL7gpK/gpLDgpYfgpJXgpY3igI3gpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tZWRpYUNvbnRlbnRDb250cm9sIiBtc2dpZD0iODc0OTc5MDU2MDcyMDU2MjUxMSI+IuCkruClgOCkoeCkv+Ckr+CkviDgpKrgpY3gpLLgpYfgpKzgpYjgpJUg4KSU4KSwIOCkruClh+Ckn+CkvuCkoeClh+Ckn+CkviDgpI/gpJXgpY3gpLjgpYfgpLgg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21lZGlhQ29udGVudENvbnRyb2wiIG1zZ2lkPSIxNjM3NDc4MjAwMjcyMDYyIj4i4KSP4KSq4KWN4KSy4KS/4KSV4KWH4KS24KSoIOCkleCliyDgpK7gpYDgpKHgpL/gpK/gpL4g4KSq4KWN4KSy4KWH4KSs4KWI4KSVIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliCDgpJTgpLAg4KSu4KWA4KSh4KS/4KSv4KS+IOCknOCkvuCkqOCkleCkvuCksOClgCAo4KS24KWA4KSw4KWN4KS34KSVLCDgpLLgpYfgpJbgpJUuLi4pIOCkj+CkleCljeCkuOClh+CkuCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI2MDk1ODU5OTM3MDY5MTQ2MDg2Ij4i4KSF4KSq4KSo4KWAIOCkkeCkoeCkv+Ckr+CliyDgpLjgpYfgpJ/gpL/gpILgpJcg4KSs4KSm4KSy4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkteCliOCktuCljeCkteCkv+CklSDgpJHgpKHgpL/gpK/gpYsg4KS44KWH4KSf4KS/4KSC4KSXLCDgpJzgpYjgpLjgpYcg4KS14KWJ4KSy4KWN4oCN4KSv4KWC4KSuIOCklOCksCDgpJXgpYzgpKgt4KS44KS+IOCkuOCljeCkquClgOCkleCksCDgpIbgpIngpJ/gpKrgpYHgpJ8g4KSV4KWHIOCksuCkv+CkjyDgpIngpKrgpK/gpYvgpJcg4KSV4KS/4KSv4KS+IOCkl+Ckr+Ckviwg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS14KWI4KS24KWN4KS14KS/4KSVIOCkkeCkoeCkv+Ckr+CliyDgpLjgpYfgpJ/gpL/gpILgpJcsIOCknOCliOCkuOClhyDgpLXgpYngpLLgpY3igI3gpK/gpYLgpK4g4KSU4KSwIOCkleCljOCkqC3gpLjgpL4g4KS44KWN4KSq4KWA4KSV4KSwIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYcg4KSy4KS/4KSPIOCkieCkquCkr+Cli+CklyDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+LCDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLgpJHgpKHgpL/gpK/gpYsg4KSw4KS/4KSV4KWJ4KSw4KWN4KShIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSu4KS+4KSH4KSV4KWN4KSw4KWL4KSr4KS84KWL4KSoIOCkpuCljeCkteCkvuCksOCkviDgpJHgpKHgpL/gpK/gpYsg4KSw4KS/4KSV4KS+4KSw4KWN4KShIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWAIOCkquClgeCkt+CljeCkn+CkvyDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkleCkv+CkuOClgCDgpK3gpYAg4KS44KSu4KSvIOCkkeCkoeCkv+Ckr+CliyDgpLDgpL/gpJXgpL7gpLDgpY3gpKEg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSu4KS+4KSH4KSV4KWN4KSw4KWL4KSr4KS84KWL4KSoIOCkpuCljeCkteCkvuCksOCkviDgpJHgpKHgpL/gpK/gpYsg4KSw4KS/4KSV4KS+4KSw4KWN4KShIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClgCDgpKrgpYHgpLfgpY3gpJ/gpL8g4KSV4KWHIOCkrOCkv+CkqOCkviDgpJXgpL/gpLjgpYAg4KSt4KWAIOCkuOCkruCkryDgpJHgpKHgpL/gpK/gpYsg4KSw4KS/4KSV4KS+4KSw4KWN4KShIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+IuCkmuCkv+CkpOCljeCksCDgpJTgpLAg4KS14KWA4KSh4KS/4KSv4KWLIOCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkleCliOCkruCksOClhyDgpLjgpYcg4KSa4KS/4KSk4KWN4KSwIOCklOCksCDgpLXgpYDgpKHgpL/gpK/gpYsg4KSy4KWH4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSP4KSq4KWN4KS4IOCkleCliyDgpJXgpL/gpLjgpYAg4KSt4KWAIOCkuOCkruCkryDgpIbgpKrgpJXgpYAg4KSq4KWB4KS34KWN4KSf4KS/IOCkleClhyDgpKzgpL/gpKjgpL4g4KSV4KWI4KSu4KSw4KWHIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkleCliOCkruCksOClhyDgpLjgpYcg4KSa4KS/4KSk4KWN4KSwIOCklOCksCDgpLXgpYDgpKHgpL/gpK/gpYsg4KSy4KWH4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSV4KS/4KS44KWAIOCkreClgCDgpLjgpK7gpK8g4KSG4KSq4KSV4KWAIOCkquClgeCkt+CljeCkn+CkvyDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkleCliOCkruCksOClhyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+IuCkleCliOCkruCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSu4KWH4KSCIOCkueCli+CkqOClhyDgpKrgpLAg4KS44KSC4KSa4KS+4KSw4KSjIOCkuOCkguCkleClh+CkpOCklSBMRUQg4KSF4KSV4KWN4KS34KSuIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjQ3NjQ1ODU0NjU0ODAyOTUzNDEiPiLgpKrgpLngpLLgpYcg4KS44KWHIOCkh+CkguCkuOCljeCkn+ClieCksiDgpJXgpL/gpI8g4KSX4KSPIOCkuOCkv+CkuOCljeCkn+CkriDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkleCliOCkruCksOClhyDgpJXgpYsg4KS44KSC4KSV4KWH4KSk4KSVIExFRCDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpLjgpYcg4KSF4KSV4KWN4KS34KSuIOCkleCksOCkpOClgCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iNDc2NDU4NTQ2NTQ4MDI5NTM0MSI+IuCkquCkueCksuClhyDgpLjgpYcg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpJfgpI8g4KS44KS/4KS44KWN4KSf4KSuIOCkkOCkquCljeCkuCAg4KSV4KWLIOCkleCliOCkruCksOClhyDgpJXgpYsg4KS44KSC4KSV4KWH4KSk4KSVIExFRCDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpLjgpYcg4KSF4KSV4KWN4KS34KSuIOCkleCksOCkpOClgCDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjk2MTI5MjIwNTc2NDQ4ODMwNCI+IuCkuOCljeKAjeCkpeCkvuCkr+ClgCDgpLDgpYLgpKog4KS44KWHIOCkn+Clh+CkrOCksuClh+CknyDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgzMzc4MTcwOTMzMjYzNzA1MzciPiLgpKvgpLzgpYvgpKgg4KSV4KWLIOCkuOCljeKAjeCkpeCkvuCkr+ClgCDgpLDgpYLgpKog4KS44KWHIOCkheCkleCljeCkt+CkriDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMzNDgxODgwODAwMTY5OTUzMCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS44KSC4KSq4KWC4KSw4KWN4KSjIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYsg4KS44KWN4oCN4KSl4KS+4KSv4KWAIOCksOClguCkqiDgpLjgpYcg4KSF4KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSs4KS54KWB4KSkIOCkluCkpOCksOCkqOCkvuCklSDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzg4OTAzMjk3NjI3MjgzMDk5Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLjgpILgpKrgpYLgpLDgpY3gpKMg4KSr4KS84KWL4KSoIOCkleCliyDgpLjgpY3igI3gpKXgpL7gpK/gpYAg4KSw4KWC4KSqIOCkuOClhyDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpKzgpLngpYHgpKQg4KSW4KSk4KSw4KSo4KS+4KSVIOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMzNDgxODgwODAwMTY5OTUzMCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS44KSC4KSq4KWC4KSw4KWN4KSjIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYsg4KS44KWN4oCN4KSl4KS+4KSv4KWAIOCksOClguCkqiDgpLjgpYcg4KSF4KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSs4KS54KWB4KSkIOCkluCkpOCksOCkqOCkvuCklSDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzg4OTAzMjk3NjI3MjgzMDk5Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpILgpKrgpYLgpLDgpY3gpKMg4KSr4KS84KWL4KSoIOCkleCliyDgpLjgpY3igI3gpKXgpL7gpK/gpYAg4KSw4KWC4KSqIOCkuOClhyDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpKzgpLngpYHgpKQg4KSW4KSk4KSw4KSo4KS+4KSVIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQzNjYzNDk3MjU2MTc5NTAwMiI+IuCkn+Clh+CkrOCksuClh+CknyDgpLDgpYDgpKzgpYLgpJ8g4KSV4KWHIOCksuCkv+CkjyDgpKzgpL7gpKfgpY3igI3gpK8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODk4NTYwODcyNDYyNjM4MjQyIj4i4KSr4KS84KWL4KSoIOCksOClgOCkrOClguCknyDgpJXgpYcg4KSy4KS/4KSPIOCkrOCkvuCkp+CljeKAjeCkryDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgxNzIwNTYxODAwNjM3MDA3NDEiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkn+Clh+CkrOCksuClh+CknyDgpLDgpYDgpKzgpYLgpJ8g4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSs4KS+4KSn4KWN4oCN4KSvIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkq+CkvOCli+CkqCDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSw4KWA4KSs4KWC4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODE3MjA1NjE4MDA2MzcwMDc0MSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSf4KWH4KSs4KSy4KWH4KSfIOCksOClgOCkrOClguCknyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKzgpL7gpKfgpY3igI3gpK8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTMyNjAwODEyNDI4OTk4OTk2OSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSr4KS84KWL4KSoIOCkrOCksuCkquClguCksOCljeCkteCklSDgpLDgpYDgpKzgpYLgpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjI5MjczNjE1Mzc5NDI1OTE4NDEiPiJVU0Ig4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkq+CkvOCkvuCkh+CksiDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KSq4KSwIOCkquCkueClgeCkguCkmuClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0MDIzMDUwNDk4OTA5NTM4MTAiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KSr4KS84KS+4KSH4KSyIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpKrgpLAg4KSq4KS54KWB4KSC4KSa4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgbXNnaWQ9IjE4MjkyOTA3MDE2NTg5OTIzNDciPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkqOCkv+CkleCkvuCksuClhyDgpJzgpL7gpKjgpYcg4KSv4KWL4KSX4KWN4oCN4KSvIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpYcg4KSy4KS/4KSPIOCkq+CkvOCkvuCkh+CksiDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KSu4KS+4KSJ4KSC4KSfIOCklOCksCDgpIXgpKjgpK7gpL7gpIngpILgpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgbXNnaWQ9IjE4MjkyOTA3MDE2NTg5OTIzNDciPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkqOCkv+CkleCkvuCksuClhyDgpJzgpL7gpKjgpYcg4KSv4KWL4KSX4KWN4oCN4KSvIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpYcg4KSy4KS/4KSPIOCkq+CkvOCkvuCkh+CksiDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KSu4KS+4KSJ4KSC4KSfIOCklOCksCDgpIXgpKjgpK7gpL7gpIngpILgpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjIyNzgxOTU4MjYyNDkwNDk3MiI+IlVTQiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSu4KS/4KSf4KS+4KSP4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjI1ODI2OTg2MzkyNzQwNTYiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KSu4KS/4KSf4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iODc4NDI2ODI0Njc3OTE5ODYyNyI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSo4KS/4KSV4KS+4KSy4KSo4KWHIOCkr+Cli+Ckl+CljeKAjeCkryDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSr4KS84KWJ4KSw4KWN4KSu4KWH4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgbXNnaWQ9Ijg3ODQyNjgyNDY3NzkxOTg2MjciPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkqOCkv+CkleCkvuCksuCkqOClhyDgpK/gpYvgpJfgpY3igI3gpK8g4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkq+CkvOClieCksOCljeCkruClh+CknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzQxMTMzODYzMjAwMjE5Mzg0NiI+IuCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSq4KSwIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzMDk0NTYzODQ0NTkzODc4NTQ4Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpK7gpYvgpKzgpL7gpIfgpLIg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkleClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4oCN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzA5NDU2Mzg0NDU5Mzg3ODU0OCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSV4KWAIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2NyZWF0ZSIgbXNnaWQ9IjY0MTQ3NTcyMzQ3ODkzMzYzMjciPiLgpK7gpYvgpKzgpL7gpIfgpLIg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkrOCkqOCkvuCkj+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfY3JlYXRlIiBtc2dpZD0iNDU1ODg2OTI3MzU4NTg1Njg3NiI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkuOCkguCkl+CljeCksOCkueCkoyDgpKzgpKjgpL7gpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2NyZWF0ZSIgbXNnaWQ9IjQ1NTg4NjkyNzM1ODU4NTY4NzYiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSs4KSo4KS+4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI1MjY5MjgzMjgzMDE2MTgwMjIiPiLgpK7gpYvgpKzgpL7gpIfgpLIg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkqOCkt+CljeCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI3MjE4NzQ5Mjg2MTQ1NTI2NTM3Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpK7gpYvgpKzgpL7gpIfgpLIg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkqOCkt+CljeCknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI3MjE4NzQ5Mjg2MTQ1NTI2NTM3Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpK7gpYvgpKzgpL7gpIfgpLIg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkqOCkt+CljeCknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9Ijg4Nzc5OTgxMDE5NDQ5OTkzODYiPiLgpK7gpYvgpKzgpL7gpIfgpLIg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkruCkvuCkieCkguCkny/gpIXgpKjgpK7gpL7gpIngpILgpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19tb3VudF91bm1vdW50IiBtc2dpZD0iMzQ1MTM2MDExNDkwMjQ5MDkyOSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkuOCkguCkl+CljeCksOCkueCkoyDgpK7gpL7gpIngpILgpJ8v4KSF4KSo4KSu4KS+4KSJ4KSC4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9IjM0NTEzNjAxMTQ5MDI0OTA5MjkiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSu4KS+4KSJ4KSC4KSfL+CkheCkqOCkruCkvuCkieCkguCknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfcmVuYW1lIiBtc2dpZD0iNzQ5NjYzMzk1NDA4MDQ3MjQxNyI+IuCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSV4KS+IOCkqOCkvuCkriDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX3JlbmFtZSIgbXNnaWQ9IjE3OTQ3NTc1ODg0NzIxMjc2NzUiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSV4KS+IOCkqOCkvuCkriDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX3JlbmFtZSIgbXNnaWQ9IjE3OTQ3NTc1ODg0NzIxMjc2NzUiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkruCli+CkrOCkvuCkh+CksiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSV4KS+IOCkqOCkvuCkriDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i4KSV4KSC4KSq4KSoIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSV4KSC4KSq4KSo4KSV4KSw4KWN4KSk4KS+IOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSV4KSC4KSq4KSo4KSV4KSw4KWN4KSk4KS+IOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4KSr4KS84KWN4KSy4KWI4KS24KSy4KS+4KSH4KSfIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSr4KS84KWN4KSy4KWI4KS24KSy4KS+4KSH4KSfIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSr4KS84KWN4KSy4KWI4KS24KSy4KS+4KSH4KSfIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZVVzYiIgbXNnaWQ9IjExMTM0NTM0MzA2NDU0MDI3MjMiPiJVU0Ig4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleClgCDgpKrgpY3gpLDgpL7gpKXgpK7gpL/gpJXgpKTgpL7gpI/gpIIg4KSU4KSwIOCkheCkqOClgeCkruCkpOCkv+Ckr+CkvuCkgiDgpKrgpY3gpLDgpKzgpILgpKfgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNiIiBtc2dpZD0iNzc3NjE1NTQzMDIxODIzOTgzMyI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsgVVNCIOCkieCkquCkleCksOCko+Cli+CkgiDgpJXgpYAg4KSq4KWN4KSw4KS+4KSl4KSu4KS/4KSV4KSk4KS+4KST4KSCIOCklOCksCDgpIXgpKjgpYHgpK7gpKTgpL/gpK/gpYvgpIIg4KSV4KWLIOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2IiIG1zZ2lkPSI3Nzc2MTU1NDMwMjE4MjM5ODMzIj4i4KSQ4KSq4KWN4KS4IOCkleCliyBVU0Ig4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleClgCDgpKrgpY3gpLDgpL7gpKXgpK7gpL/gpJXgpKTgpL7gpJPgpIIg4KSU4KSwIOCkheCkqOClgeCkruCkpOCkv+Ckr+Cli+CkgiDgpJXgpYsg4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTXRwIiBtc2dpZD0iNDk1MzQ2ODY3Njc5NTkxNzA0MiI+Ik1UUCDgpKrgpY3gpLDgpYvgpJ/gpYvgpJXgpYngpLIg4KSy4KS+4KSX4KWCIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc010cCIgbXNnaWQ9IjY1MzI5NjEyMDA0ODY3OTE1NzAiPiJNVFAgVVNCIOCkquCljeCksOCli+Ckn+Cli+CkleClieCksiDgpLLgpL7gpJfgpYIg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KSw4KWN4KSo4KWH4KSyIE1UUCDgpKHgpY3gpLDgpL7gpIfgpLXgpLAg4KSu4KWH4KSCIOCkquCkueClgeCkguCkmiDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNDE0ODI5MDg2MDQwMDY1OTE0NiI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNjU5Nzk2NDE5MTIwODAxNjYwNSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSwIOCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSy4KS/4KSPIOCkteCkv+CkteCkv+CkpyDgpLjgpLngpL7gpK/gpJUg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleCliyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjY1OTc5NjQxOTEyMDgwMTY2MDUiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksCDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSV4KWHIOCksuCkv+CkjyDgpLXgpL/gpLXgpL/gpKcg4KS44KS54KS+4KSv4KSVIOCkieCkquCkleCksOCko+Cli+CkgiDgpJXgpYsg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuCkq+CkvOCli+CkqCDgpKjgpILgpKzgpLAg4KSq4KSwIOCkuOClgOCkp+ClhyDgpJXgpYngpLIg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkueCkuOCljeKAjeCkpOCkleCljeCkt+Clh+CkqiDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkq+CkvOCli+CkqCDgpKjgpILgpKzgpLAg4KSq4KSwIOCkleClieCksiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KSV4KWHIOCkquCksOCkv+Cko+CkvuCkriDgpIXgpKrgpY3gpLDgpKTgpY3igI3gpK/gpL7gpLbgpL/gpKQg4KS24KWB4KSy4KWN4oCN4KSVIOCkr+CkviDgpJXgpYngpLIg4KS54KWLIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIOCkp+CljeCkr+CkvuCkqCDgpKbgpYfgpIIg4KSV4KS/IOCkr+CkuSDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkvuCkpOCkleCkvuCksuClgOCkqCDgpKjgpILgpKzgpLAg4KSq4KSwIOCkleClieCksiDgpKjgpLngpYDgpIIg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkvi4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIbgpKrgpJXgpYAg4KSq4KWB4KS34KWN4KSf4KS/IOCkleClhyDgpKzgpL/gpKjgpL4g4KSV4KWJ4KSyIOCkleCksOCkleClhyDgpIbgpKrgpJXgpL4g4KSn4KSoIOCkteCljeKAjeCkr+CkryDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkueCkuOCljeKAjeCkpOCkleCljeCkt+Clh+CkqiDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkq+CkvOCli+CkqCDgpKjgpILgpKzgpLAg4KSq4KSwIOCkleClieCksiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KSV4KWHIOCkquCksOCkv+Cko+CkvuCkriDgpIXgpKrgpY3gpLDgpKTgpY3igI3gpK/gpL7gpLbgpL/gpKQg4KS24KWB4KSy4KWN4oCN4KSVIOCkr+CkviDgpJXgpYngpLIg4KS54KWLIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIOCkp+CljeCkr+CkvuCkqCDgpKbgpYfgpIIg4KSV4KS/IOCkr+CkuSDgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpL7gpKTgpJXgpL7gpLLgpYDgpKgg4KSo4KSC4KSs4KSwIOCkquCksCDgpJXgpYngpLIg4KSo4KS54KWA4KSCIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4uIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkhuCkquCkleClgCDgpKrgpYHgpLfgpY3gpJ/gpL8g4KSV4KWHIOCkrOCkv+CkqOCkviDgpJXgpYngpLIg4KSV4KSw4KSV4KWHIOCkhuCkquCkleCkviDgpKfgpKgg4KS14KWN4oCN4KSv4KSvIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFByaXZpbGVnZWQiIG1zZ2lkPSI0MTk4MzQ5MjExMTA4NDk3ODc5Ij4i4KSV4KS/4KS44KWAIOCkreClgCDgpKvgpLzgpYvgpKgg4KSo4KSC4KSs4KSwIOCkquCksCDgpLjgpYDgpKfgpYcg4KSV4KWJ4KSyIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iMTY4OTAyNDkwMTUwOTk5NjgxMCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkueCkuOCljeKAjeCkpOCkleCljeCkt+Clh+CkqiDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkhuCkquCkvuCkpOCkleCkvuCksuClgOCkqCDgpKjgpILgpKzgpLDgpYvgpIIg4KS44KS54KS/4KSkLCDgpJXgpL/gpLjgpYAg4KSt4KWAIOCkq+CkvOCli+CkqCDgpKjgpILgpKzgpLAg4KSq4KSwIOCkleClieCksiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpIbgpKrgpL7gpKTgpJXgpL7gpLLgpYDgpKgg4KS44KWH4KS14KS+4KST4KSCIOCkquCksCDgpIXgpKjgpL7gpLXgpLbgpY3igI3gpK/gpJUg4KSU4KSwIOCkheCkteCliOCkpyDgpJXgpYngpLIg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFByaXZpbGVnZWQiIG1zZ2lkPSIxNjg5MDI0OTAxNTA5OTk2ODEwIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KS54KS44KWN4oCN4KSk4KSV4KWN4KS34KWH4KSqIOCkleClhyDgpKzgpL/gpKjgpL4g4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkqOCkguCkrOCksOCli+CkgiDgpLjgpLngpL/gpKQsIOCkleCkv+CkuOClgCDgpK3gpYAg4KSr4KS84KWL4KSoIOCkqOCkguCkrOCksCDgpKrgpLAg4KSV4KWJ4KSyIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4IOCkhuCkquCkvuCkpOCkleCkvuCksuClgOCkqCDgpLjgpYfgpLXgpL7gpJPgpIIg4KSq4KSwIOCkheCkqOCkvuCkteCktuCljeKAjeCkr+CklSDgpJTgpLAg4KSF4KS14KWI4KSnIOCkleClieCksiDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4i4KS44KWA4KSn4KWHIENETUEg4KSf4KWH4KSs4KSy4KWH4KSfIOCkuOClh+Ckn+CkheCkqiDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2MDQ4NDgwOTUzMTU0MjE0MjUiPiLgpLjgpYDgpKfgpYcgQ0RNQSDgpKvgpLzgpYvgpKgg4KS44KWH4KSf4KSF4KSqIOCkquCljeCksOCkvuCksOCkguCkrSDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgbXNnaWQ9IjE5OTQxOTM1Mzg4MDIzMTQxODYiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIENETUEg4KSq4KWN4KSw4KS+4KS14KSn4KS+4KSoIOCkquCljeCksOCkvuCksOCkguCkrSDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeKAjeCkuCDgpIXgpKjgpL7gpLXgpLbgpY3igI3gpK/gpJUg4KSw4KWC4KSqIOCkuOClhyBDRE1BIOCkquCljeCksOCkvuCkteCkp+CkvuCkqCDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIG1zZ2lkPSIxOTk0MTkzNTM4ODAyMzE0MTg2Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyBDRE1BIOCkquCljeCksOCkvuCkteCkp+CkvuCkqCDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLgg4KSF4KSo4KS+4KS14KS24KWN4oCN4KSv4KSVIOCksOClguCkqiDgpLjgpYcgQ0RNQSDgpKrgpY3gpLDgpL7gpLXgpKfgpL7gpKgg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iNzc4NTQwODI1MzM2NDMzNTc0MCI+IuCkuOCljeKAjeCkpeCkvuCkqCDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpKjgpIgg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClgCDgpLjgpYLgpJrgpKjgpL7gpJPgpIIg4KSV4KWLIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSIxMTIwNzQxNTU3ODkxNDM4ODc2Ij4i4KSP4KSqIOCkleCliyDgpLDgpYfgpKHgpL/gpK/gpYsg4KS44KWHIOCkuOCljeKAjeCkpeCkvuCkqCDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpKjgpIgg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClgCDgpLjgpYLgpJrgpKjgpL7gpI/gpIIg4KS44KSV4KWN4KS34KSuL+CkheCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSIxMTIwNzQxNTU3ODkxNDM4ODc2Ij4i4KSP4KSqIOCkleCliyDgpLDgpYfgpKHgpL/gpK/gpYsg4KS44KWHIOCkuOCljeKAjeCkpeCkvuCkqCDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpKjgpIgg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkleClgCDgpLjgpYLgpJrgpKjgpL7gpI/gpIIg4KS44KSV4KWN4KS34KSuL+CkheCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+IuCkmuClh+CkleCkh+CkqCDgpJfgpYHgpKPgpYvgpIIg4KSu4KWH4KSCIOCkquCkueClgeCkguCkmuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNDAyNDUyNjk2ODYzMDE5NDEyOCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSa4KWH4KSV4KSH4KSoIOCkuOClh+CkteCkviDgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSq4KSy4KWL4KShIOCkleCkv+CkjyDgpJfgpI8g4KSX4KWB4KSj4KWL4KSCIOCkquCksCDgpKrgpKLgpLzgpYfgpIIv4KSy4KS/4KSW4KWH4KSCIOCkquCkueClgeCkguCkmiDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNDAyNDUyNjk2ODYzMDE5NDEyOCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkmuClh+CkleCkh+CkqCDgpLjgpYfgpLXgpL4g4KSm4KWN4KS14KS+4KSw4KS+IOCkheCkquCksuCli+CkoSDgpJXgpL/gpI8g4KSX4KSPIOCkl+ClgeCko+Cli+CkgiDgpKrgpLAg4KSq4KSi4KS84KWH4KSCL+CksuCkv+CkluClh+CkgiDgpKrgpLngpYHgpILgpJog4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRHYWRnZXQiIG1zZ2lkPSI3NzY5MDUzMzkwMTU4NjM0NzEiPiLgpLXgpL/gpJzgpYfgpJ8g4KSa4KWB4KSo4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEdhZGdldCIgbXNnaWQ9IjgyNjEzMjY5Mzg1OTkwNDkyOTAiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkuOCkv+CkuOCljeCkn+CkriDgpJXgpYsg4KSv4KS5IOCkrOCkpOCkvuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCkleCkvyDgpJXgpL/gpLgg4KSP4KSq4KWN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpJXgpYzgpKgg4KS44KWHIOCkteCkv+CknOClh+CknyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCkv+Ckr+CkviDgpJzgpL4g4KS44KSV4KSk4KS+IOCkueCliC4g4KSV4KWL4KSIIOCkj+CkquCljeCkuCwg4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpYcg4KS44KS+4KSlIOCkheCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCkqOCkv+CknOClgCDgpKHgpYfgpJ/gpL4g4KSq4KSwIOCkquCkueClgeCkguCkmiDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KS/4KS44KWN4KSf4KSuIOCkleCliyDgpK/gpLkg4KSs4KSk4KS+4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSV4KS/IOCkleCkv+CkuCDgpJDgpKrgpY3gpLggIOCkpuCljeCkteCkvuCksOCkviDgpJXgpYzgpKgg4KS44KWHIOCkteCkv+CknOClh+CknyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCkv+Ckr+CkviDgpJzgpL4g4KS44KSV4KSk4KS+IOCkueCliC4g4KSV4KWL4KSIIOCkkOCkquCljeCkuCAsIOCkh+CkuCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSV4KWHIOCkuOCkvuCkpSDgpIXgpKjgpY3gpK8g4KSQ4KSq4KWN4KS4ICDgpJXgpYcg4KSo4KS/4KSc4KWAIOCkoeClh+Ckn+CkviDgpKrgpLAg4KSq4KS54KWB4KSC4KSaIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iODQyMzkyMzc3NzY1OTI5MjIyOCI+IuCkq+CkvOCli+CkqCDgpLjgpY3igI3gpKXgpL/gpKTgpL8g4KSs4KSm4KSy4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9IjEwMjk4Nzc1MjkwMDc2ODY3MzIiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkieCkquCkleCksOCkoyDgpJXgpYAg4KSr4KS84KWL4KSoIOCkuOClgeCkteCkv+Ckp+CkvuCkj+CkgiDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuCDgpIXgpKjgpYHgpK7gpKTgpL8g4KS14KS+4KSy4KS+IOCkleCli+CkiCDgpI/gpKrgpY3igI3gpLgg4KSG4KSq4KSV4KWLIOCkuOClguCkmuCkv+CkpCDgpJXgpL/gpI8g4KSs4KS/4KSo4KS+IOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpY3igI3gpLXgpL/gpJog4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYgsIOCkq+CkvOCli+CkqCDgpJXgpL4g4KSw4KWH4KSh4KS/4KSv4KWLIOCkmuCkvuCksuClgiDgpJTgpLAg4KSs4KSC4KSmIOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWIIOCklOCksCDgpJDgpLjgpYcg4KS54KWAIOCkheCkqOCljeCkryDgpJXgpL7gpLDgpY3gpK8g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9IjEwMjk4Nzc1MjkwMDc2ODY3MzIiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkieCkquCkleCksOCkoyDgpJXgpYAg4KSr4KS84KWL4KSoIOCkuOClgeCkteCkv+Ckp+CkvuCkj+CkgiDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuCDgpIXgpKjgpYHgpK7gpKTgpL8g4KS14KS+4KSy4KS+IOCkleCli+CkiCDgpJDgpKrgpY3gpLgg4KSG4KSq4KSV4KWLIOCkuOClguCkmuCkv+CkpCDgpJXgpL/gpI8g4KSs4KS/4KSo4KS+IOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpY3igI3gpLXgpL/gpJog4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYgsIOCkq+CkvOCli+CkqCDgpJXgpL4g4KSw4KWH4KSh4KS/4KSv4KWLIOCkmuCkvuCksuClgiDgpJTgpLAg4KSs4KSC4KSmIOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWIIOCklOCksCDgpJDgpLjgpYcg4KS54KWAIOCkheCkqOCljeCkryDgpJXgpL7gpLDgpY3gpK8g4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjkxNzgyMjg1MjQ1MDc2MTA0ODYiPiLgpKvgpLzgpYvgpKgg4KSV4KWAIOCkuOCljeKAjeCkpeCkv+CkpOCkvyDgpJTgpLAg4KSq4KS54KSa4KS+4KSoIOCkquCkouCkvOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iMTYzOTIxMjc3MTgyNjEyNTUyOCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSJ4KSq4KSV4KSw4KSjIOCkleClgCDgpKvgpLzgpYvgpKgg4KS44KWB4KS14KS/4KSn4KS+4KST4KSCIOCkpOCklSDgpKrgpLngpYHgpILgpJrgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpI/gpKrgpY3gpLgg4KSV4KWLIOCkq+CkvOCli+CkqCDgpKjgpILgpKzgpLAg4KSU4KSwIOCkieCkquCkleCksOCkoyDgpIbgpIjgpKHgpYAsIOCkleClieCksiDgpLjgpJXgpY3gpLDgpL/gpK8g4KS54KWIIOCkr+CkviDgpKjgpLngpYDgpIIsIOCklOCksCDgpJXgpYngpLIg4KSm4KWN4KS14KS+4KSw4KS+IOCkleCkqOClh+CkleCljeCknyDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+IOCkpuClguCksOCkuOCljeKAjeCkpSDgpKjgpILgpKzgpLAg4KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iMTYzOTIxMjc3MTgyNjEyNTUyOCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkieCkquCkleCksOCkoyDgpJXgpYAg4KSr4KS84KWL4KSoIOCkuOClgeCkteCkv+Ckp+CkvuCkk+CkgiDgpKTgpJUg4KSq4KS54KWB4KSC4KSa4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSr4KS84KWL4KSoIOCkqOCkguCkrOCksCDgpJTgpLAg4KSJ4KSq4KSV4KSw4KSjIOCkhuCkiOCkoeClgCwg4KSV4KWJ4KSyIOCkuOCkleCljeCksOCkv+CkryDgpLngpYgg4KSv4KS+IOCkqOCkueClgOCkgiwg4KSU4KSwIOCkleClieCksiDgpKbgpY3gpLXgpL7gpLDgpL4g4KSV4KSo4KWH4KSV4KWN4KSfIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4g4KSm4KWC4KSw4KS44KWN4oCN4KSlIOCkqOCkguCkrOCksCDgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUzMTczMTQzNTAxMTQ5NTAxNSI+IuCkn+Clh+CkrOCksuClh+CknyDgpJXgpYsg4KSo4KS/4KS34KWN4oCN4KSV4KWN4KSw4KS/4KSvIOCkueCli+CkqOClhyDgpLjgpYcg4KSw4KWL4KSV4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MzQ4MDE4Nzk0MTQ5NjEzMCI+IuCkq+CkvOCli+CkqCDgpJXgpYsg4KSo4KS/4KS34KWN4oCN4KSV4KWN4KSw4KS/4KSvIOCkueCli+CkqOClhyDgpLjgpYcg4KSw4KWL4KSV4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczMTEzMTk4MjQ0MDA0NDc4NjgiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSXIOCkruClh+CkgiDgpKjgpLngpYDgpIIg4KS54KWLIOCknOCkvuCkqOClhyDgpLjgpYcg4KSw4KWL4KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg1NTkxMDA2NzczNzI5Mjg3NTQiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSXIOCkruClh+CkgiDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KWHIOCkuOClhyDgpLDgpYvgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzExMzE5ODI0NDAwNDQ3ODY4Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSu4KWH4KSCIOCkqOCkueClgOCkgiDgpLngpYsg4KSc4KS+4KSo4KWHIOCkuOClhyDgpLDgpYvgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODU1OTEwMDY3NzM3MjkyODc1NCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSXIOCkruClh+CkgiDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KWHIOCkuOClhyDgpLDgpYvgpJXgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdHJhbnNtaXRJciIgbXNnaWQ9Ijc1NDU4NTg1MDQyMzg1MzAxMDUiPiLgpIfgpILgpKvgpLzgpY3gpLDgpL7gpLDgpYfgpKEg4KS44KSC4KSa4KS+4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RyYW5zbWl0SXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUzNTgzMDg4NTQzMDY1MjkxNzAiPiLgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSV4KWLIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYcg4KSH4KSC4KSr4KS84KWN4KSw4KS+4KSw4KWH4KShIOCkn+CljeCksOCkvuCkguCkuOCkruClgOCkn+CksCDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RyYW5zbWl0SXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3OTU3NzYzNzQ1MDIwMzAwNzI1Ij4i4KSP4KSq4KWN4KSy4KS/4KSV4KWH4KS24KSoIOCkleCliyDgpKvgpLzgpYvgpKgg4KSV4KWHIOCkh+CkguCkq+CkvOCljeCksOCkvuCksOClh+CkoSDgpJ/gpY3gpLDgpL7gpILgpLjgpK7gpYDgpJ/gpLAg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RldmljZVBvd2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNzg3MDM0NzIyNjE2MzUwNDE3Ij4i4KSf4KWH4KSs4KSy4KWH4KSfIOCkmuCkvuCksuClgiDgpK/gpL4g4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTI4NjIyNDcwOTgwOTQzMjA2Ij4i4KSr4KS84KWL4KSoIOCkmuCkvuCksuClgiDgpK/gpL4g4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RldmljZVBvd2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2Njg5ODYyODc4OTg0NjMxODMxIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSa4KS+4KSy4KWCIOCkr+CkviDgpKzgpILgpKYg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2MDM3MDU3MzQ4NDYzMTMxMDMyIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKvgpLzgpYvgpKgg4KSa4KS+4KSy4KWCIOCkr+CkviDgpKzgpILgpKYg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkn+Clh+CkrOCksuClh+CknyDgpJrgpL7gpLLgpYIg4KSv4KS+IOCkrOCkguCkpiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjYwMzcwNTczNDg0NjMxMzEwMzIiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkq+CkvOCli+CkqCDgpJrgpL7gpLLgpYIg4KSv4KS+IOCkrOCkguCkpiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZhY3RvcnlUZXN0IiBtc2dpZD0iMzcxNTIyNTQ5MjY5NjQxNjE4NyI+IuCkq+CkvOCliOCkleCljeKAjeCkn+CljeCksOClgCDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSu4KWL4KShIOCkruClh+CkgiDgpJrgpLLgpL7gpI/gpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk1MjA1OTMxODM1OTY1MzA5MSI+IuCkn+Clh+CkrOCksuClh+CknyDgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLAg4KSu4KWH4KSCIOCkquClguCksOCljeCkoyDgpKrgpLngpYHgpILgpJog4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpKTgpYcg4KS54KWB4KSPIOCkqOCkv+CkruCljeKAjeCkqC3gpLjgpY3igI3gpKTgpLAg4KSo4KS/4KSw4KWN4KSu4KS+4KSk4KS+IOCkquCksOClgOCkleCljeCkt+CkoyDgpJXgpYcg4KSw4KWC4KSqIOCkruClh+CkgiDgpJrgpLLgpL7gpI/gpIIuIOCkleClh+CkteCksiDgpKTgpK3gpYAg4KSJ4KSq4KSy4KSs4KWN4oCN4KSnIOCknOCkrCDgpJXgpYvgpIgg4KSf4KWH4KSs4KSy4KWH4KSfIOCkqOCkv+CksOCljeCkruCkvuCkpOCkviDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSu4KWL4KShIOCkruClh+CkgiDgpJrgpLIg4KSw4KS54KS+IOCkueCliy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxMzY2NDQ5OTAzMTkyNDQ4MDIiPiLgpKvgpLzgpYvgpKgg4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSwIOCkruClh+CkgiDgpKrgpYLgpLDgpY3gpKMg4KSq4KS54KWB4KSC4KSaIOCkleClgCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KWH4KSk4KWHIOCkueClgeCkjyDgpKjgpL/gpK7gpY3igI3gpKgt4KS44KWN4oCN4KSk4KSwIOCkqOCkv+CksOCljeCkruCkvuCkpOCkviDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSV4KWHIOCksOClguCkqiDgpK7gpYfgpIIg4KSa4KSy4KS+4KSP4KSCLiDgpJXgpYfgpLXgpLIg4KSk4KSt4KWAIOCkieCkquCksuCkrOCljeKAjeCkpyDgpJzgpKwg4KSV4KWL4KSIIOCkq+CkvOCli+CkqCDgpKjgpL/gpLDgpY3gpK7gpL7gpKTgpL4g4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkruCli+CkoSDgpK7gpYfgpIIg4KSa4KSyIOCksOCkueCkviDgpLngpYsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXIiIG1zZ2lkPSI2NjI3MTkyMzMzMzczNDY1MTQzIj4i4KS14KWJ4KSy4KSq4KWH4KSq4KSwIOCkuOClh+CknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXIiIG1zZ2lkPSI3MzczNDQ3OTIwOTc3NjI0NzQ1Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KS14KWJ4KSy4KSq4KWH4KSq4KSwIOCkuOClh+CknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXIiIG1zZ2lkPSI3MzczNDQ3OTIwOTc3NjI0NzQ1Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KS14KWJ4KSy4KSq4KWH4KSq4KSwIOCkuOClh+CknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iMzI3ODYwODE2NTk3NzczNjUzOCI+IuCkheCkquCkqOClhyDgpLXgpYngpLLgpKrgpYfgpKrgpLAg4KSV4KS+IOCkhuCkleCkvuCksCDgpI/gpKHgpJzgpLjgpY3gpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVySGludHMiIG1zZ2lkPSI4MjM1Nzg0Mzg0MjIzNzMwMDkxIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KS14KWJ4KSy4KSq4KWH4KSq4KSwIOCkhuCkleCkvuCksCDgpLjgpILgpJXgpYfgpKQg4KS44KWH4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iODIzNTc4NDM4NDIyMzczMDA5MSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS44KS/4KS44KWN4oCN4KSf4KSuIOCkteClieCksuCkquClh+CkquCksCDgpIbgpJXgpL7gpLAg4KS44KSC4KSV4KWH4KSkIOCkuOClh+CknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hc3RlckNsZWFyIiBtc2dpZD0iMjMxNTc1MDQyMzEzOTY5NzM5NyI+IuCkq+CkvOCliOCkleCljeKAjeCkn+CljeCksOClgCDgpKHgpL/gpKvgpLzgpYngpLLgpY3igI3gpJ8g4KSq4KSwIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpLDgpYDgpLjgpYfgpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIzNjY1MzgwNDkyNjMzOTEwMjI2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpK3gpYAg4KSh4KWH4KSf4KS+LCDgpJXgpYngpKjgpY3gpKvgpLzgpL/gpJfgpLDgpYfgpLbgpKgsIOCklOCksCDgpIfgpILgpLjgpY3gpJ/gpYngpLIg4KSP4KSq4KWN4KS4IOCkruCkv+Ckn+CkvuCkleCksCwg4KS44KS/4KS44KWN4KSf4KSuIOCkleCliyDgpKrgpYLgpLDgpYAg4KSk4KSw4KS5IOCkieCkuOCkleClgCDgpKvgpLzgpYjgpJXgpY3gpJ/gpLDgpYAg4KS44KWH4KSf4KS/4KSC4KSXIOCkquCksCDgpLDgpYDgpLjgpYfgpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIzNjY1MzgwNDkyNjMzOTEwMjI2Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KSt4KWAIOCkoeClh+Ckn+Ckviwg4KSV4KWJ4KSo4KWN4KSr4KS84KS/4KSX4KSw4KWH4KS24KSoLCDgpJTgpLAg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkkOCkquCljeCkuCAg4KSu4KS/4KSf4KS+4KSV4KSwLCDgpLjgpL/gpLjgpY3gpJ/gpK4g4KSV4KWLIOCkquClguCksOClgCDgpKTgpLDgpLkg4KSJ4KS44KSV4KWAIOCkq+CkvOCliOCkleCljeCkn+CksOClgCDgpLjgpYfgpJ/gpL/gpILgpJcg4KSq4KSwIOCksOClgOCkuOClh+CknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWUiIG1zZ2lkPSIyMDIxNjE0ODI5NTkxNzc1NjQ2Ij4i4KS44KSu4KSvIOCkuOClh+CknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxODk2MzQxNDM4MTUxMTUyODgxIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWAIOCkmOCkoeCkvOClgCDgpJXgpL4g4KS44KSu4KSvIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODU1NzAyNzMwNzM4MDIwIj4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKvgpLzgpYvgpKgg4KSV4KWAIOCkmOCkoeCkvOClgCDgpJXgpL4g4KS44KSu4KSvIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE4OTYzNDE0MzgxNTExNTI4ODEiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYAg4KSY4KSh4KS84KWAIOCkleCkviDgpLjgpK7gpK8g4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NTU3MDI3MzA3MzgwMjAiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkq+CkvOCli+CkqCDgpJXgpYAg4KSY4KSh4KS84KWAIOCkleCkviDgpLjgpK7gpK8g4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lWm9uZSIgbXNnaWQ9IjI5NDUwNzk4MDEwMTMwNzczNDAiPiLgpLjgpK7gpK8g4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkuOClh+CknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTY3Njk4MzcxMjMxNTgyNzY0NSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCkviDgpLjgpK7gpK8g4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQ5OTk0MzQ4ODQzNjYzMzM5OCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCkviDgpLjgpK7gpK8g4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KS+IOCkuOCkruCkryDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDk5OTQzNDg4NDM2NjMzMzk4Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KS+IOCkuOCkruCkryDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSI0ODI5MjYyMzQ5NjkxMzg2OTg2Ij4i4KSW4KS+4KSk4KS+IOCkquCljeCksOCkrOCkguCkp+CklSDgpLjgpYfgpLXgpL4g4KSV4KWHIOCksOClguCkqiDgpK7gpYfgpIIg4KSV4KS+4KSw4KWN4KSvIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjE5NDg0NTU1NTIzMzM2MTU5NTQiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkluCkvuCkpOCkviDgpKrgpY3gpLDgpK7gpL7gpKPgpJXgpYvgpIIg4KSV4KWLIOCkleClieCksiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSIxOTQ4NDU1NTUyMzMzNjE1OTU0Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJbgpL7gpKTgpL4g4KSq4KWN4KSw4KSu4KS+4KSj4KSV4KWL4KSCIOCkleCliyDgpJXgpYngpLIg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBY2NvdW50cyIgbXNnaWQ9IjEwODY3OTU0Njc3NjAxMjIxMTQiPiLgpIngpKrgpJXgpLDgpKMg4KSq4KSwIOCkluCkvuCkpOClhyDgpKLgpYLgpILgpKLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc0MTQ5NjUzNDc2OTY2MDAyNyI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSf4KWH4KSs4KSy4KWH4KSfIOCkpuCljeCkteCkvuCksOCkviDgpJzgpY3gpJ7gpL7gpKQg4KSW4KS+4KSk4KWL4KSCIOCkleClgCDgpLjgpYLgpJrgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4oCN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpK7gpYfgpIIg4KS14KWHIOCkluCkvuCkpOClhyDgpLbgpL7gpK7gpL/gpLIg4KS54KWLIOCkuOCkleCkpOClhyDgpLngpYjgpIIg4KSc4KS/4KSo4KWN4oCN4KS54KWH4KSCIOCkhuCkquCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSH4KSC4KS44KWN4oCN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpJfgpI8g4KSP4KSq4KWN4KS4IOCkqOClhyDgpKzgpKjgpL7gpK/gpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ0ODMxNjgyMjQ1MTgwNzM4MiI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSr4KS84KWL4KSoIOCkpuCljeCkteCkvuCksOCkviDgpJzgpY3gpJ7gpL7gpKQg4KSW4KS+4KSk4KWL4KSCIOCkleClgCDgpLjgpYLgpJrgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4oCN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpK7gpYfgpIIg4KS14KWHIOCkluCkvuCkpOClhyDgpLbgpL7gpK7gpL/gpLIg4KS54KWLIOCkuOCkleCkpOClhyDgpLngpYjgpIIg4KSc4KS/4KSo4KWN4oCN4KS54KWH4KSCIOCkhuCkquCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSH4KSC4KS44KWN4oCN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpJfgpI8g4KSP4KSq4KWN4KS4IOCkqOClhyDgpKzgpKjgpL7gpK/gpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNzQxNDk2NTM0NzY5NjYwMDI3Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSf4KWH4KSs4KSy4KWH4KSfIOCkpuCljeCkteCkvuCksOCkviDgpJzgpY3gpJ7gpL7gpKQg4KSW4KS+4KSk4KWL4KSCIOCkleClgCDgpLjgpYLgpJrgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4oCN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpK7gpYfgpIIg4KS14KWHIOCkluCkvuCkpOClhyDgpLbgpL7gpK7gpL/gpLIg4KS54KWLIOCkuOCkleCkpOClhyDgpLngpYjgpIIg4KSc4KS/4KSo4KWN4oCN4KS54KWH4KSCIOCkhuCkquCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSH4KSC4KS44KWN4oCN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpJfgpI8g4KSQ4KSq4KWN4KS4ICDgpKjgpYcg4KSs4KSo4KS+4KSv4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpKvgpLzgpYvgpKgg4KSm4KWN4KS14KS+4KSw4KS+IOCknOCljeCknuCkvuCkpCDgpJbgpL7gpKTgpYvgpIIg4KSV4KWAIOCkuOClguCkmuClgCDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkruClh+CkgiDgpLXgpYcg4KSW4KS+4KSk4KWHIOCktuCkvuCkruCkv+CksiDgpLngpYsg4KS44KSV4KSk4KWHIOCkueCliOCkgiDgpJzgpL/gpKjgpY3igI3gpLngpYfgpIIg4KSG4KSq4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpIfgpILgpLjgpY3igI3gpJ/gpYngpLIg4KSV4KS/4KSPIOCkl+CkjyDgpJDgpKrgpY3gpLggIOCkqOClhyDgpKzgpKjgpL7gpK/gpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4i4KSW4KS+4KSk4KWHIOCkrOCkqOCkvuCkj+CkgiDgpJTgpLAg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkuOClh+CknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjU0NzIxMjQyOTY5MDg5NzcyNjAiPiLgpI/gpKrgpY3igI3gpL/gpLLgpJXgpYfgpLbgpKgg4KSV4KWLIOCkluCkvuCkpOCkviDgpKzgpKjgpL7gpKjgpYcg4KSU4KSwIOCkieCkqOCkleClhyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpJTgpLAg4KS44KWH4KSfIOCkleCksOCkqOClhyDgpLjgpLngpL/gpKQsIOCkluCkvuCkpOCkviDgpKrgpY3gpLDgpKzgpILgpKfgpJUg4KSV4KWAIOCkluCkvuCkpOCkviDgpKrgpY3gpLDgpK7gpL7gpKPgpJUg4KSV4KWN4KS34KSu4KSk4KS+4KST4KSCIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9IjQ5ODMxMjYzMDQ3NTcxNzczMDUiPiLgpJbgpL7gpKTgpYcg4KSc4KWL4KSh4KWH4KSCIOCkr+CkviDgpKjgpL/gpJXgpL7gpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9Ijg2OTgyOTU2MjU0ODgyOTI1MDYiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkluCkvuCkpOClhyDgpJzgpYvgpKHgpLzgpKjgpL4g4KSU4KSwIOCkqOCkv+CkleCkvuCksuCkqOCkviDgpJTgpLAg4KSJ4KSo4KSV4KWHIOCkquCkvuCkuOCkteCksOCljeCkoSDgpLngpJ/gpL7gpKjgpYcg4KSc4KWI4KS44KWHIOCkleCkvuCksOCljeCkryDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9Ijg2OTgyOTU2MjU0ODgyOTI1MDYiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkluCkvuCkpOClhyDgpJzgpYvgpKHgpLzgpKjgpL4g4KSU4KSwIOCkqOCkv+CkleCkvuCksuCkqOCkviDgpJTgpLAg4KSJ4KSo4KSV4KWHIOCkquCkvuCkuOCkteCksOCljeCkoSDgpLngpJ/gpL7gpKjgpYcg4KSc4KWI4KS44KWHIOCkleCkvuCksOCljeCkryDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iMjM1NDgxMzk2MTYzODc3NjQyIj4i4KSJ4KSq4KSV4KSw4KSjIOCkquCksCDgpJbgpL7gpKTgpYvgpIIg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2VDcmVkZW50aWFscyIgbXNnaWQ9Ijc5ODQyMjcxNDc0MDMzNDY0MjIiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkquCljeCksOCkruCkvuCko+ClgOCkleCksOCkoyDgpJ/gpYvgpJXgpKgg4KSV4KS+IOCkheCkqOClgeCksOCli+CkpyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2VDcmVkZW50aWFscyIgbXNnaWQ9Ijc5ODQyMjcxNDc0MDMzNDY0MjIiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpKrgpY3gpLDgpK7gpL7gpKPgpYDgpJXgpLDgpKMg4KSf4KWL4KSV4KSoIOCkleCkviDgpIXgpKjgpYHgpLDgpYvgpKcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkleCkqOClh+CkleCljeKAjeCktuCkqCDgpKbgpYfgpJbgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI4MzE4OTY0NDI0Njc1OTYwOTc1Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KSo4KWH4KSV4KWN4oCN4KS24KSoIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKbgpYfgpJbgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCDgpJzgpYjgpLjgpYcg4KSV4KWM4KSoIOCkuOClhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSu4KWM4KSc4KWC4KSmIOCkueCliOCkgiDgpJTgpLAg4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCkueCliOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI4MzE4OTY0NDI0Njc1OTYwOTc1Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkleCkqOClh+CkleCljeKAjeCktuCkqCDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSm4KWH4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSc4KWI4KS44KWHIOCkleCljOCkqCDgpLjgpYcg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkruCljOCknOClguCkpiDgpLngpYjgpIIg4KSU4KSwIOCkleCkqOClh+CkleCljeKAjeCknyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjgwMTg3NTgxMzY0MDQzMjM2NTgiPiLgpKrgpYLgpLDgpY3gpKMg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCkueClgeCkguCkmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOClieCkleClh+CknyDgpKzgpKjgpL7gpKjgpYcg4KSU4KSwIOCkleCkuOCljeKAjeCkn+CkriDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KWN4KSw4KWL4KSf4KWL4KSV4KWJ4KSyIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpJTgpLAg4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeCkuCDgpIfgpILgpJ/gpLDgpKjgpYfgpJ8g4KSV4KWLIOCkoeClh+Ckn+CkviDgpK3gpYfgpJzgpKjgpYcg4KSV4KWHIOCkuOCkvuCkp+CkqCDgpIngpKrgpLLgpKzgpY3igI3gpKcg4KSV4KSw4KS+4KSk4KWHIOCkueCliOCkgiwg4KSk4KS+4KSV4KS/IOCkh+CkguCkn+CksOCkqOClh+CknyDgpJXgpYsg4KSh4KWH4KSf4KS+IOCkreClh+CknOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkh+CkuCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSV4KWAIOCkhuCkteCktuCljeKAjeCkr+CkleCkpOCkviDgpKjgpLngpYDgpIIg4KS54KWLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpYngpJXgpYfgpJ8g4KSs4KSo4KS+4KSo4KWHIOCklOCksCDgpJXgpLjgpY3igI3gpJ/gpK4g4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCljeCksOCli+Ckn+Cli+CkleClieCksiDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSU4KSwIOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLggIOCkh+CkguCkn+CksOCkqOClh+CknyDgpJXgpYsg4KSh4KWH4KSf4KS+IOCkreClh+CknOCkqOClhyDgpJXgpYcg4KS44KS+4KSn4KSoIOCkieCkquCksuCkrOCljeKAjeCkpyDgpJXgpLDgpL7gpKTgpYcg4KS54KWI4KSCLCDgpKTgpL7gpJXgpL8g4KSH4KSC4KSf4KSw4KSo4KWH4KSfIOCkleCliyDgpKHgpYfgpJ/gpL4g4KSt4KWH4KSc4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSH4KS4IOCkheCkqOClgeCkruCkpOCkvyDgpJXgpYAg4KSG4KS14KS24KWN4oCN4KSv4KSV4KSk4KS+IOCkqOCkueClgOCkgiDgpLngpYsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTA1NjYwMTU5Njc1NzUxODk2Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOClh+Ckn+Ckv+CkguCklyDgpJTgpLAg4KSf4KWN4KSw4KWI4KSr4KS84KS/4KSVIOCkrOCkpuCksuClh+Ckgi/gpLDgpYvgpJXgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTMzMzc5ODg4NjQxMjcxNDE5MyI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOClh+Ckn+Ckv+CkguCklyDgpKzgpKbgpLLgpKjgpYcg4KSU4KSwIOCkuOCkreClgCDgpJ/gpY3gpLDgpYjgpKvgpLzgpL/gpJUg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkleCliyDgpKzgpL7gpKfgpL/gpKQg4KSU4KSwIOCkqOCkv+CksOClgOCkleCljeCkt+CkoyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCwg4KSJ4KSm4KS+4KS54KSw4KSjIOCkleClhyDgpLLgpL/gpI8g4KSV4KS/4KS44KWAIEFQTiDgpJXgpL4g4KSq4KWN4KSw4KWJ4KSV4KWN4KS44KWAIOCklOCksCDgpKrgpYvgpLDgpY3gpJ8g4KSs4KSm4KSy4KSo4KS+LiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4KS4IOCkhuCkquCkleClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWHIOCkrOCkv+CkqOCkviDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KWI4KSV4KWH4KSfIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIsIOCkieCkqOCljeCkueClh+CkgiDgpLDgpYDgpKHgpL7gpK/gpLDgpYfgpJXgpY3gpJ8sIOCkr+CkviDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUzMzM3OTg4ODY0MTI3MTQxOTMiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWH4KSf4KS/4KSC4KSXIOCkrOCkpuCksuCkqOClhyDgpJTgpLAg4KS44KSt4KWAIOCkn+CljeCksOCliOCkq+CkvOCkv+CklSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KWLIOCkrOCkvuCkp+Ckv+CkpCDgpJTgpLAg4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILCDgpIngpKbgpL7gpLngpLDgpKMg4KSV4KWHIOCksuCkv+CkjyDgpJXgpL/gpLjgpYAgQVBOIOCkleCkviDgpKrgpY3gpLDgpYngpJXgpY3gpLjgpYAg4KSU4KSwIOCkquCli+CksOCljeCknyDgpKzgpKbgpLLgpKjgpL4uIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkhuCkquCkleClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWHIOCkrOCkv+CkqOCkviDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KWI4KSV4KWH4KSfIOCkleClgCDgpKjgpL/gpJfgpLDgpL7gpKjgpYAg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIsIOCkieCkqOCljeCkueClh+CkgiDgpLDgpYDgpKHgpL7gpK/gpLDgpYfgpJXgpY3gpJ8sIOCkr+CkviDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VOZXR3b3JrU3RhdGUiIG1zZ2lkPSI5NTg4ODQyOTE0NTQzMjczMDkiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KSo4KWH4KSV4KWN4oCN4KSf4KS/4KS14KS/4KSf4KWAIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9IjY3ODkxMjM5MTI0NzY0MTYyMTQiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJXgpKjgpYfgpJXgpY3gpJ/gpL/gpLXgpL/gpJ/gpYAg4KSV4KWAIOCkuOCljeCkpeCkv+CkpOCkvyDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VOZXR3b3JrU3RhdGUiIG1zZ2lkPSI2Nzg5MTIzOTEyNDc2NDE2MjE0Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkleCkqOClh+CkleCljeCkn+Ckv+CkteCkv+Ckn+ClgCDgpJXgpYAg4KS44KWN4KSl4KS/4KSk4KS/IOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSI1OTUyNTg0OTY0MzczMDE3OTYwIj4i4KSf4KWH4KSm4KSwIOCkleClgCDgpJfgpIgg4KSV4KSo4KWH4KSV4KWN4oCN4KSf4KS/4KS14KS/4KSf4KWAIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iMTUyNDQ0MTM0NDQxMjMxOTc4MCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSf4KWH4KSm4KSwIOCkleClgCDgpJfgpIgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkleCkqOClh+CkleCljeKAjeCkn+Ckv+CkteCkv+Ckn+ClgCDgpJXgpYAg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iMTUyNDQ0MTM0NDQxMjMxOTc4MCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSf4KWH4KSm4KSwIOCkleClgCDgpJfgpIgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkleCkqOClh+CkleCljeKAjeCkn+Ckv+CkteCkv+Ckn+ClgCDgpJXgpYAg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iMTQwMDY2NjAxMjY3MTY0ODc0MSI+IuCkquClg+Ckt+CljeCkoOCkreClguCkruCkvyDgpKHgpYfgpJ/gpL4g4KSJ4KSq4KSv4KWL4KSXIOCkuOClh+Ckn+Ckv+CkguCklyDgpKzgpKbgpLLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSI1MzQ3NzI5NTc4NDY4NzQ0Mzc5Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSh4KWH4KSf4KS+IOCkieCkquCkr+Cli+CklyDgpLjgpYfgpJ/gpL/gpILgpJcg4KSs4KSm4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iNTM0NzcyOTU3ODQ2ODc0NDM3OSI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkoeClh+Ckn+CkviDgpIngpKrgpK/gpYvgpJcg4KS44KWH4KSf4KS/4KSC4KSXIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTIwMjAxMjk0OTI0NzA0MDAxMSI+IldpLUZpIOCkleCkqOClh+CkleCljeKAjeCktuCkqCDgpKbgpYfgpJbgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MDAyNzk4MDc3Mzg3ODAzNzI2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyBXaS1GaSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KSc4KS+4KSo4KSV4KS+4KSw4KWALCDgpJzgpYjgpLjgpYcgV0ktRmkg4KS44KSV4KWN4KS34KSuIOCkueCliCDgpK/gpL4g4KSo4KS54KWA4KSCIOCklOCksCDgpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KSV4KS/4KSPIOCkl+CkjyBXaS1GaSDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSV4KWHIOCkqOCkvuCkriwg4KSm4KWH4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTAwMjc5ODA3NzM4NzgwMzcyNiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIFdpLUZpIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAsIOCknOCliOCkuOClhyBXSS1GaSDgpLjgpJXgpY3gpLfgpK4g4KS54KWIIOCkr+CkviDgpKjgpLngpYDgpIIg4KSU4KSwIOCkleCkqOClh+CkleCljeKAjeCknyDgpJXgpL/gpI8g4KSX4KSPIFdpLUZpIOCkieCkquCkleCksOCko+Cli+CkgiDgpJXgpYcg4KSo4KS+4KSuLCDgpKbgpYfgpJbgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjY1NTA2NDExODg3NDkxMjgwMzUiPiJXaS1GaSDgpLjgpYcg4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCklOCksCDgpKHgpL/gpLjgpY3igI3gpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+IuCkj+CkquCljeCkuCDgpJXgpYsgV2ktRmkg4KSq4KS54KWB4KSC4KSaIOCkrOCkv+CkguCkpuClgeCkk+CkgiDgpLjgpYcg4KSV4KSo4KWH4KSV4KWN4KSfIOCklOCksCDgpKHgpL/gpLjgpY3gpJXgpKjgpYfgpJXgpY3gpJ8g4KSV4KSw4KSo4KWHIOCklOCksCBXaS1GaSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KWHIOCksuCkv+CkjyDgpIngpKrgpJXgpLDgpKMg4KSV4KWJ4KSo4KWN4KSr4KS84KS/4KSX4KSw4KWH4KS24KSoIOCkruClh+CkgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIFdpLUZpIOCkquCkueClgeCkguCkmiDgpKzgpL/gpILgpKbgpYHgpJPgpIIg4KS44KWHIOCkleCkqOClh+CkleCljeCknyDgpJTgpLAg4KSh4KS/4KS44KWN4KSV4KSo4KWH4KSV4KWN4KSfIOCkleCksOCkqOClhyDgpJTgpLAgV2ktRmkg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkleClhyDgpLLgpL/gpI8g4KSJ4KSq4KSV4KSw4KSjIOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksOClh+CktuCkqCDgpK7gpYfgpIIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBtc2dpZD0iMTM2ODI1Mzg3MTQ4MzI1NDc4NCI+IldpLUZpIOCkruCksuCljeKAjeCkn+ClgOCkleCkvuCkuOCljeKAjeCknyDgpKrgpY3gpLDgpL7gpKrgpY3gpKTgpL8g4KSV4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIFdpLUZpIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpLAg4KSu4KSy4KWN4KSf4KWA4KSV4KS+4KS44KWN4KSfIOCkquCkpOClhyDgpJXgpYcg4KSJ4KSq4KSv4KWL4KSXIOCkuOClhyDgpJXgpYfgpLXgpLIg4KSG4KSq4KSV4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpKrgpLAg4KS54KWAIOCkqOCkueClgOCkgiwg4KSs4KSy4KWN4KSV4KS/IOCkuOCkreClgCDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSq4KSwIOCkreClh+CknOClhyDgpJfgpI8g4KSq4KWI4KSV4KWH4KSfIOCkquCljeCksOCkvuCkquCljeKAjeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSv4KS5IOCkl+CliOCksC3gpK7gpLLgpY3gpJ/gpYDgpJXgpL7gpLjgpY3gpJ8g4KSu4KWL4KShIOCkuOClhyDgpIXgpKfgpL/gpJUg4KSq4KS+4KS14KSwIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUxOTQ5NzA2MDI1MzQ5OTI2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyBXaS1GaSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KSwIOCkruCksuCljeCkn+ClgOCkleCkvuCkuOCljeCknyDgpKrgpKTgpYcg4KSV4KWHIOCkieCkquCkr+Cli+CklyDgpLjgpYcg4KSV4KWH4KS14KSyIOCkhuCkquCkleClhyDgpKvgpLzgpYvgpKgg4KSq4KSwIOCkueClgCDgpKjgpLngpYDgpIIsIOCkrOCksuCljeCkleCkvyDgpLjgpK3gpYAg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkquCksCDgpK3gpYfgpJzgpYcg4KSX4KSPIOCkquCliOCkleClh+CknyDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpJfgpYjgpLAt4KSu4KSy4KWN4KSf4KWA4KSV4KS+4KS44KWN4KSfIOCkruCli+CkoSDgpLjgpYcg4KSF4KSn4KS/4KSVIOCkquCkvuCkteCksCDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3OTY5Nzc0MDIxMjU2MzM2NTQ4Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsgV2ktRmkg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCksCDgpK7gpLLgpY3gpJ/gpYDgpJXgpL7gpLjgpY3gpJ8g4KSq4KSk4KWHIOCkleClhyDgpIngpKrgpK/gpYvgpJcg4KS44KWHIOCkleClh+CkteCksiDgpIbgpKrgpJXgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkquCksCDgpLngpYAg4KSo4KS54KWA4KSCLCDgpKzgpLLgpY3gpJXgpL8g4KS44KSt4KWAIOCkieCkquCkleCksOCko+Cli+CkgiDgpKrgpLAg4KSt4KWH4KSc4KWHIOCkl+CkjyDgpKrgpYjgpJXgpYfgpJ8g4KSq4KWN4KSw4KS+4KSq4KWN4oCN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpK/gpLkg4KSX4KWI4KSwLeCkruCksuCljeCkn+ClgOCkleCkvuCkuOCljeCknyDgpK7gpYvgpKEg4KS44KWHIOCkheCkp+Ckv+CklSDgpKrgpL7gpLXgpLAg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTE5NDk3MDYwMjUzNDk5MjYiPiLgpJDgpKrgpY3gpLggIOCkleCliyBXaS1GaSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KSwIOCkruCksuCljeCkn+ClgOCkleCkvuCkuOCljeCknyDgpKrgpKTgpYcg4KSV4KWHIOCkieCkquCkr+Cli+CklyDgpLjgpYcg4KSV4KWH4KS14KSyIOCkhuCkquCkleClhyDgpKvgpLzgpYvgpKgg4KSq4KSwIOCkueClgCDgpKjgpLngpYDgpIIsIOCkrOCksuCljeCkleCkvyDgpLjgpK3gpYAg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkquCksCDgpK3gpYfgpJzgpYcg4KSX4KSPIOCkquCliOCkleClh+CknyDgpKrgpY3gpLDgpL7gpKrgpY3igI3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpJfgpYjgpLAt4KSu4KSy4KWN4KSf4KWA4KSV4KS+4KS44KWN4KSfIOCkruCli+CkoSDgpLjgpYcg4KSF4KSn4KS/4KSVIOCkquCkvuCkteCksCDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGhBZG1pbiIgbXNnaWQ9IjYwMDY5NjczNzM5MzU5MjY2NTkiPiJCbHVldG9vdGgg4KS44KWH4KSf4KS/4KSC4KSXIOCkquCksCDgpKrgpLngpYHgpILgpJrgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjkyMTE3NzQ3MTc0ODg4MjEzNyI+IuCkleCkv+CkuOClgCDgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkuOCljeKAjeCkpeCkvuCkqOClgOCkryBCbHVldG9vdGgg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleClieCkqOCljeKAjeCkq+CkvOCkv+Ckl+CksCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCklOCksCDgpLDgpL/gpK7gpYvgpJ8g4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleClhyDgpLjgpL7gpKUg4KSW4KWL4KSc4KSo4KWHIOCklOCksCDgpK/gpYHgpJfgpY3igI3gpK7gpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTMxNjgyMTU5MzMxNTQyMTM3Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLjgpY3igI3gpKXgpL7gpKjgpYDgpK8gQmx1ZXRvb3RoIOCkq+CkvOCli+CkqCDgpJXgpYngpKjgpY3igI3gpKvgpLzgpL/gpJfgpLAg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgsIOCklOCksCDgpLDgpL/gpK7gpYvgpJ8g4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleClhyDgpLjgpL7gpKUg4KSW4KWL4KSc4KSo4KWHIOCklOCksCDgpK/gpYHgpJfgpY3igI3gpK7gpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY5MjExNzc0NzE3NDg4ODIxMzciPiLgpJXgpL/gpLjgpYAg4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpY3igI3gpKXgpL7gpKjgpYDgpK8gQmx1ZXRvb3RoIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYngpKjgpY3igI3gpKvgpLzgpL/gpJfgpLAg4KSV4KSw4KSo4KWHIOCkleClgCDgpJTgpLAg4KSw4KS/4KSu4KWL4KSfIOCkieCkquCkleCksOCko+Cli+CkgiDgpJXgpYcg4KS44KS+4KSlIOCkluCli+CknOCkqOClhyDgpJTgpLAg4KSv4KWB4KSX4KWN4oCN4KSu4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KS44KWN4oCN4KSl4KS+4KSo4KWA4KSvIEJsdWV0b290aCDgpKvgpLzgpYvgpKgg4KSV4KWJ4KSo4KWN4oCN4KSr4KS84KS/4KSX4KSwIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILCDgpJTgpLAg4KSw4KS/4KSu4KWL4KSfIOCkieCkquCkleCksOCko+Cli+CkgiDgpJXgpYcg4KS44KS+4KSlIOCkluCli+CknOCkqOClhyDgpJTgpLAg4KSv4KWB4KSX4KWN4oCN4KSu4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoUHJpdiIgbXNnaWQ9IjQwMDk0OTQyNDYwMDk1MTM4MjgiPiLgpI/gpKrgpY3igI3gpLLgpL/gpJXgpYfgpLbgpKgg4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviBCbHVldG9vdGgg4KSv4KWB4KSX4KWN4oCN4KSu4KSoIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoUHJpdiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODA0NTczNTE5MzQxNzQ2ODg1NyI+IuCkj+CkquCljeKAjeCksuCkv+CkleClh+CktuCkqCDgpJXgpYsg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleClhyDgpIfgpILgpJ/gpLDgpYjgpJXgpY3gpLbgpKgg4KSV4KWHIOCkrOCkv+CkqOCkviDgpKbgpYLgpLDgpLjgpY3igI3gpKUg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleClhyDgpLjgpL7gpKUg4KSv4KWB4KSX4KWN4oCN4KSu4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aFByaXYiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQ1NzM1MTkzNDE3NDY4ODU3Ij4i4KSP4KSq4KWN4oCN4KSy4KS/4KSV4KWH4KS24KSoIOCkleCliyDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSV4KWHIOCkh+CkguCkn+CksOCliOCkleCljeCktuCkqCDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkpuClguCksOCkuOCljeKAjeCkpSDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSV4KWHIOCkuOCkvuCkpSDgpK/gpYHgpJfgpY3igI3gpK7gpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+IldpTUFYIOCkuOClhyDgpJXgpKjgpYfgpJXgpY3gpJ8g4KSU4KSwIOCkoeCkv+CkuOCljeCkleCkqOClh+CkleCljeCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNjM2MDEwMjg3NzI2MTk3ODg4NyI+IuCkj+CkquCljeCkuCDgpJXgpYsgV2lNQVgg4KS44KSV4KWN4KS34KSuIOCkueCliCDgpK/gpL4g4KSo4KS54KWA4KSCIOCklOCksCDgpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KSV4KS/4KSPIOCkl+CkjyDgpJXgpL/gpLjgpYAgV2lNQVgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiLgpJDgpKrgpY3gpLggIOCkleCliyBXaU1BWCDgpLjgpJXgpY3gpLfgpK4g4KS54KWIIOCkr+CkviDgpKjgpLngpYDgpIIg4KSU4KSwIOCkleCkqOClh+CkleCljeKAjeCknyDgpJXgpL/gpI8g4KSX4KSPIOCkleCkv+CkuOClgCBXaU1BWCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSV4KWHIOCkrOCkvuCksOClhyDgpK7gpYfgpIIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpbWF4U3RhdGUiIG1zZ2lkPSIyNDA1MDQyMjY3MTMxNDk2NTc5Ij4iV2lNQVgg4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMxNTY0NTY1MDQwODQyMDE4MDUiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIFdpTUFYIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KSU4KSwIOCkoeCkv+CkuOCljeKAjeCkleCkqOClh+CkleCljeKAjeCknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk3MDI1MDQzMDA0OTIzNzk4Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyBXaU1BWCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWHIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCklOCksCDgpKHgpL/gpLjgpY3igI3gpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzE1NjQ1NjUwNDA4NDIwMTgwNSI+IuCkkOCkquCljeCkuCDgpJXgpYsgV2lNQVgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkleCkqOClh+CkleCljeKAjeCknyDgpJTgpLAg4KSh4KS/4KS44KWN4oCN4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIFdpTUFYIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpYcg4KSr4KS84KWL4KSoIOCkleCliyDgpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KSU4KSwIOCkoeCkv+CkuOCljeKAjeCkleCkqOClh+CkleCljeKAjeCknyDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aCIgbXNnaWQ9IjYxMjc3NjkzMzYzMzkyNzY4MjgiPiJCbHVldG9vdGgg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleClhyDgpLjgpL7gpKUg4KSv4KWB4KSX4KWN4KSu4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSf4KWH4KSs4KSy4KWH4KSfIOCkquCksCBCbHVldG9vdGgg4KSV4KS+IOCkleClieCkqOCljeKAjeCkq+CkvOCkv+Ckl+CksOClh+CktuCkqCDgpKbgpYfgpJbgpKjgpYcsIOCklOCksCDgpK/gpYHgpJfgpY3igI3gpK7gpL/gpKQg4KSJ4KSq4KSV4KSw4KSj4KWL4KSCIOCkleClhyDgpLjgpL7gpKUg4KSV4KSo4KWH4KSV4KWN4oCN4KS24KSoIOCkrOCkqOCkvuCkqOClhyDgpJTgpLAg4KS44KWN4oCN4KS14KWA4KSV4KS+4KSwIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkq+CkvOCli+CkqCDgpKrgpLAgQmx1ZXRvb3RoIOCkleCkviDgpJXgpYngpKjgpY3igI3gpKvgpLzgpL/gpJfgpLDgpYfgpLbgpKgg4KSm4KWH4KSW4KSo4KWHLCDgpJTgpLAg4KSv4KWB4KSX4KWN4oCN4KSu4KS/4KSkIOCkieCkquCkleCksOCko+Cli+CkgiDgpJXgpYcg4KS44KS+4KSlIOCkleCkqOClh+CkleCljeKAjeCktuCkqCDgpKzgpKjgpL7gpKjgpYcg4KSU4KSwIOCkuOCljeKAjeCkteClgOCkleCkvuCksCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM0ODA3MjIxODE4NTI0Mzg2MjgiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkn+Clh+CkrOCksuClh+CknyDgpKrgpLAgQmx1ZXRvb3RoIOCkleCkviDgpJXgpYngpKjgpY3igI3gpKvgpLzgpL/gpJfgpLDgpYfgpLbgpKgg4KSm4KWH4KSW4KSo4KWHLCDgpJTgpLAg4KSv4KWB4KSX4KWN4oCN4KSu4KS/4KSkIOCkieCkquCkleCksOCko+Cli+CkgiDgpJXgpYcg4KS44KS+4KSlIOCkleCkqOClh+CkleCljeKAjeCktuCkqCDgpKzgpKjgpL7gpKjgpYcg4KSU4KSwIOCkuOCljeKAjeCkteClgOCkleCkvuCksCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMjA3MTA2MzI0NDUyMzEyNzM5Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpKvgpLzgpYvgpKgg4KSq4KSwIEJsdWV0b290aCDgpJXgpL4g4KSV4KWJ4KSo4KWN4oCN4KSr4KS84KS/4KSX4KSw4KWH4KS24KSoIOCkpuClh+CkluCkqOClhywg4KSU4KSwIOCkr+ClgeCkl+CljeKAjeCkruCkv+CkpCDgpIngpKrgpJXgpLDgpKPgpYvgpIIg4KSV4KWHIOCkuOCkvuCkpSDgpJXgpKjgpYfgpJXgpY3igI3gpLbgpKgg4KSs4KSo4KS+4KSo4KWHIOCklOCksCDgpLjgpY3igI3gpLXgpYDgpJXgpL7gpLAg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9uZmMiIG1zZ2lkPSI0NDIzMzUxMjc0NzU3ODc2OTUzIj4i4KSo4KS/4KSv4KSwIOCkq+CkvOClgOCksuCljeKAjeCkoSDgpJXgpK7gpY3igI3gpK/gpYLgpKjgpL/gpJXgpYfgpLbgpKgg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkqOCkv+Ckr+CksCDgpKvgpLzgpYDgpLLgpY3gpKEg4KSV4KSu4KWN4KSv4KWC4KSo4KS/4KSV4KWH4KS24KSoIChORkMpIOCkn+CliOCklywg4KSV4KS+4KSw4KWN4KShLCDgpJTgpLAg4KSw4KWA4KSh4KSwIOCkleClhyDgpLjgpL7gpKUg4KS44KSC4KSa4KS+4KSwIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpKjgpL/gpK/gpLAg4KSr4KS84KWA4KSy4KWN4KShIOCkleCkruCljeCkr+ClguCkqOCkv+CkleClh+CktuCkqCAoTkZDKSDgpJ/gpYjgpJcsIOCkleCkvuCksOCljeCkoSwg4KSU4KSwIOCksOClgOCkoeCksCDgpJXgpYcg4KS44KS+4KSlIOCkuOCkguCkmuCkvuCksCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjM1OTg0OTYzMDE0ODY0MzkyNTgiPiLgpIXgpKrgpKjgpL4g4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCksuClieCklSDgpIXgpJXgpY3gpLfgpK4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iNjAzNDIwMzA2NTA3NzEyMjk5MiI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSV4KWA4KSy4KWJ4KSVIOCklOCksCDgpJXgpYvgpIgg4KSt4KWAIOCkuOCkguCkrOCkpuCljeCkpyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KS44KWB4KSw4KSV4KWN4KS34KS+IOCkheCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSJ4KSm4KS+4KS54KSw4KSjIOCkleClhyDgpLLgpL/gpI8sIOCkh+CkqOCkleCkruCkv+CkguCklyDgpKvgpLzgpYvgpKgg4KSV4KWJ4KSyIOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKTgpYcg4KS44KSu4KSvIOCkq+CkvOCli+CkqCwg4KSV4KWA4KSy4KWJ4KSVIOCkleCliyDgpIXgpJXgpY3gpLfgpK4g4KSV4KSwIOCkpuClh+CkpOCkviDgpLngpYgsIOCkq+Ckv+CksCDgpJXgpYngpLIg4KS44KSu4KS+4KSq4KWN4KSkIOCkueCli+CkqOClhyDgpKrgpLAg4KSV4KWA4KSy4KWJ4KSVIOCkleCliyDgpKrgpYHgpKg6IOCkuOCkleCljeCkt+CkriDgpJXgpLAg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSI2MDM0MjAzMDY1MDc3MTIyOTkyIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJXgpYDgpLLgpYngpJUg4KSU4KSwIOCkleCli+CkiCDgpK3gpYAg4KS44KSC4KSs4KSm4KWN4KSnIOCkquCkvuCkuOCkteCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL4g4KSF4KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIngpKbgpL7gpLngpLDgpKMg4KSV4KWHIOCksuCkv+Ckjywg4KSH4KSo4KSV4KSu4KS/4KSC4KSXIOCkq+CkvOCli+CkqCDgpJXgpYngpLIg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkpOClhyDgpLjgpK7gpK8g4KSr4KS84KWL4KSoLCDgpJXgpYDgpLLgpYngpJUg4KSV4KWLIOCkheCkleCljeCkt+CkriDgpJXgpLAg4KSm4KWH4KSk4KS+IOCkueCliCwg4KSr4KS/4KSwIOCkleClieCksiDgpLjgpK7gpL7gpKrgpY3gpKQg4KS54KWL4KSo4KWHIOCkquCksCDgpJXgpYDgpLLgpYngpJUg4KSV4KWLIOCkquClgeCkqDog4KS44KSV4KWN4KS34KSuIOCkleCksCDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFN5bmNTZXR0aW5ncyIgbXNnaWQ9IjYyMDE4MTAwMDgyMzA1MDMwNTIiPiLgpLjgpK7gpKjgpY3gpLXgpK/gpKgg4KS44KWH4KSf4KS/4KSC4KSXIOCkquCkouCkvOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSIyNzA2NzQ1Njc0NTY5Njc4NjQ0Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpJXgpL/gpLjgpYAg4KSW4KS+4KSk4KWHIOCkleClgCDgpLjgpK7gpKjgpY3gpLXgpK/gpKgg4KS44KWH4KSf4KS/4KSC4KSXIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIngpKbgpL7gpLngpLDgpKMg4KSV4KWHIOCksuCkv+Ckjywg4KSH4KS44KS44KWHIOCkr+CkuSDgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpKTgpL4g4KS54KWIIOCkleCkvyDgpLLgpYvgpJcg4KSP4KSq4KWN4KS4IOCkleCkv+CkuOClgCDgpJbgpL7gpKTgpYcg4KSV4KWHIOCkuOCkvuCkpSDgpLjgpK7gpKjgpY3igI3gpLXgpK/gpL/gpKQg4KS54KWIIOCkr+CkviDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFN5bmNTZXR0aW5ncyIgbXNnaWQ9IjI3MDY3NDU2NzQ1Njk2Nzg2NDQiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpJXgpL/gpLjgpYAg4KSW4KS+4KSk4KWHIOCkleClgCDgpLjgpK7gpKjgpY3gpLXgpK/gpKgg4KS44KWH4KSf4KS/4KSC4KSXIOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIngpKbgpL7gpLngpLDgpKMg4KSV4KWHIOCksuCkv+Ckjywg4KSH4KS44KS44KWHIOCkr+CkuSDgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpKTgpL4g4KS54KWIIOCkleCkvyDgpLLgpYvgpJcg4KSQ4KSq4KWN4KS4ICDgpJXgpL/gpLjgpYAg4KSW4KS+4KSk4KWHIOCkleClhyDgpLjgpL7gpKUg4KS44KSu4KSo4KWN4oCN4KS14KSv4KS/4KSkIOCkueCliCDgpK/gpL4g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI1NDA4Njk0ODc1NzkzOTQ1MzE0Ij4i4KS44KSu4KSo4KWN4oCN4KS14KSv4KSoIOCkrOCkguCkpiDgpK/gpL4g4KSa4KS+4KSy4KWCIOCkn+ClieCkl+CksiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9Ijg5NTYyNjI1OTEzMDYzNjk4NjgiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkleCkv+CkuOClgCDgpJbgpL7gpKTgpYcg4KSV4KWAIOCkuOCkruCkqOCljeCkteCkr+CkqCDgpLjgpYfgpJ/gpL/gpILgpJcg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIngpKbgpL7gpLngpLDgpKMg4KSV4KWHIOCksuCkv+Ckjywg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpLLgpYvgpJcg4KSP4KSq4KWN4KS4IOCkleCkviDgpLjgpK7gpKjgpY3igI3gpLXgpK/gpKgg4KSV4KS/4KS44KWAIOCkluCkvuCkpOClhyDgpLjgpYcg4KS44KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpK7gpYfgpIIg4KS54KWLIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI4OTU2MjYyNTkxMzA2MzY5ODY4Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSV4KS/4KS44KWAIOCkluCkvuCkpOClhyDgpJXgpYAg4KS44KSu4KSo4KWN4KS14KSv4KSoIOCkuOClh+Ckn+Ckv+CkguCklyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkieCkpuCkvuCkueCksOCkoyDgpJXgpYcg4KSy4KS/4KSPLCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCksuCli+CklyDgpJDgpKrgpY3gpLggIOCkleCkviDgpLjgpK7gpKjgpY3igI3gpLXgpK/gpKgg4KSV4KS/4KS44KWAIOCkluCkvuCkpOClhyDgpLjgpYcg4KS44KSV4KWN4KS34KSuIOCkleCksOCkqOClhyDgpK7gpYfgpIIg4KS54KWLIOCkuOCkleCkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1N0YXRzIiBtc2dpZD0iNzM5NjU3NzQ1MTM2MDIwMjQ0OCI+IuCkuOCkruCkqOCljeCkteCkr+CkqCDgpIbgpILgpJXgpKHgpLzgpYcg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFN5bmNTdGF0cyIgbXNnaWQ9IjE1MTAxNDM3NjE3NTc2MDYxNTYiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkleCkv+CkuOClgCDgpJbgpL7gpKTgpYcg4KSV4KWHIOCkuOCkruCkqOCljeCkteCkr+CkqCDgpIbgpILgpJXgpKHgpLzgpYcsIOCkuOCkvuCkpSDgpLngpYAg4KS44KSu4KSo4KWN4oCN4KS14KSv4KS/4KSkIOCkiOCkteClh+CkguCknyDgpJXgpL4g4KSH4KSk4KS/4KS54KS+4KS4IOCklOCksCDgpLjgpK7gpKjgpY3igI3gpLXgpK/gpL/gpKQg4KSh4KWH4KSf4KS+IOCkleClgCDgpK7gpL7gpKTgpY3gpLDgpL4g4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFN5bmNTdGF0cyIgbXNnaWQ9IjE1MTAxNDM3NjE3NTc2MDYxNTYiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpJXgpL/gpLjgpYAg4KSW4KS+4KSk4KWHIOCkleClhyDgpLjgpK7gpKjgpY3gpLXgpK/gpKgg4KSG4KSC4KSV4KSh4KS84KWHLCDgpLjgpL7gpKUg4KS54KWAIOCkuOCkruCkqOCljeKAjeCkteCkr+Ckv+CkpCDgpIjgpLXgpYfgpILgpJ8g4KSV4KS+IOCkh+CkpOCkv+CkueCkvuCkuCDgpJTgpLAg4KS44KSu4KSo4KWN4oCN4KS14KSv4KS/4KSkIOCkoeClh+Ckn+CkviDgpJXgpYAg4KSu4KS+4KSk4KWN4KSw4KS+IOCkquCkouCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjQ3NTY2MDk2MzcwNTMzNTMzMTgiPiLgpJfgpY3gpLDgpL7gpLngpJXgpYAt4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkq+CkvOClgOCkoSDgpKrgpKLgpLzgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNTU1NzA1ODkwNzkwNjE0NDUwNSI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkruClh+CkgiDgpLjgpK7gpKjgpY3gpLXgpK/gpL/gpKQg4KSr4KS84KWA4KShIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkteCkv+CkteCksOCkoyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjU1NTcwNTg5MDc5MDYxNDQ1MDUiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkteCksOCljeCkpOCkruCkvuCkqCDgpK7gpYfgpIIg4KS44KSu4KSo4KWN4KS14KSv4KS/4KSkIOCkq+CkvOClgOCkoSDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpLXgpL/gpLXgpLDgpKMg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI5MDE1MjQ2MzI1NDA4MjA5Mjk2Ij4i4KSX4KWN4KSw4KS+4KS54KSV4KWALeCkquCljeCksOCkvuCkquCljeCkpCDgpKvgpLzgpYDgpKEg4KSy4KS/4KSW4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI2OTI4OTMwMTg4ODI2MDg5NDEzIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkuOCkruCkqOCljeCkteCkr+Ckv+CkpCDgpKvgpLzgpYDgpKEg4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkj+CkquCljeCkuCDgpIbgpKrgpJXgpYcg4KS44KSu4KSo4KWN4KS14KSv4KS/4KSkIOCkq+CkvOClgOCkoSDgpJXgpYsg4KSs4KSm4KSyIOCkuOCkleCkpOClhyDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI2OTI4OTMwMTg4ODI2MDg5NDEzIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkteCksOCljeCkpOCkruCkvuCkqCDgpLjgpK7gpKjgpY3gpLXgpK/gpL/gpKQg4KSr4KS84KWA4KShIOCkleCliyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkpuClgeCksOCljeCkreCkvuCkteCkqOCkvuCkquClguCksOCljeCkoyDgpJDgpKrgpY3gpLggIOCkhuCkquCkleClhyDgpLjgpK7gpKjgpY3gpLXgpK/gpL/gpKQg4KSr4KS84KWA4KShIOCkleCliyDgpKzgpKbgpLIg4KS44KSV4KSk4KWHIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNDEwNzEwMTUyNTc0NjAzNTcxOCI+IuCktuCkrOCljeCkpuCkleCli+CktiDgpK7gpYfgpIIg4KSG4KSq4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpJzgpYvgpKHgpLzgpYcg4KSX4KSPIOCktuCkrOCljeKAjeCkpuCli+CkgiDgpJXgpYsg4KSq4KSi4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI2NTk2MTQ2MDAzMzg5MDQyNDMiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkkOCkuOClhyDgpLjgpK3gpYAg4KS24KSs4KWN4oCN4KSm4KWL4KSCLCDgpKjgpL7gpK7gpYvgpIIg4KSU4KSwIOCkteCkvuCkleCljeCkr+CkvuCkguCktuCli+CkgiDgpJXgpYsg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSc4KWLIOCkuOCkguCkreCkteCkpDog4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4oCN4KS24KSs4KWN4KSm4KSV4KWL4KS2IOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KSV4KS/4KSPIOCkl+CkjyDgpLngpYvgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI2NTk2MTQ2MDAzMzg5MDQyNDMiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkkOCkuOClhyDgpLjgpK3gpYAg4KS24KSs4KWN4oCN4KSm4KWL4KSCLCDgpKjgpL7gpK7gpYvgpIIg4KSU4KSwIOCkteCkvuCkleCljeCkr+CkvuCkguCktuCli+CkgiDgpJXgpYsg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYgg4KSc4KWLIOCkuOCkguCkreCkteCkpDog4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4oCN4KS24KSs4KWN4KSm4KSV4KWL4KS2IOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KSV4KS/4KSPIOCkl+CkjyDgpLngpYvgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4i4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkpuCljeCkteCkvuCksOCkviDgpKrgpLDgpL/gpK3gpL7gpLfgpL/gpKQg4KS24KSs4KWN4KSm4KSV4KWL4KS2IOCkruClh+CkgiDgpLbgpKzgpY3gpKYg4KSc4KWL4KSh4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODE4NTM4NTcxNjI1NTA2NTI5MSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCktuCkrOCljeCkpuCkleCli+CktiDgpK7gpYfgpIIg4KSo4KSPIOCktuCkrOCljeCkpiDgpLLgpL/gpJbgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MTg1Mzg1NzE2MjU1MDY1MjkxIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCktuCkrOCljeCkpuCkleCli+CktiDgpK7gpYfgpIIg4KSo4KSPIOCktuCkrOCljeCkpiDgpLLgpL/gpJbgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY3Mjc1MDk1MTU5NDA1NDY4Ij4i4KSF4KSq4KSo4KWHIFVTQiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSV4KWAIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpKLgpLzgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg4MTU2NDYyOTM0OTc3OTQwIj4i4KSF4KSq4KSo4KWHIFNEIOCkleCkvuCksOCljeCkoSDgpJXgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkquCkouCkvOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0Njk4ODcxMjU5ODM4NjA3OSI+IuCkj+CkquCljeKAjeCksuCkv+CkleClh+CktuCkqCDgpJXgpYsg4KSG4KSq4KSV4KWHIFVTQiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSV4KWAIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpKLgpLzgpKjgpYcg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjA3MzYyNDczNjU0OTc1NDExIj4i4KSP4KSq4KWN4oCN4KSy4KS/4KSV4KWH4KS24KSoIOCkleCliyDgpIbgpKrgpJXgpYcgU0Qg4KSV4KS+4KSw4KWN4KShIOCkleClgCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSq4KSi4KS84KSo4KWHIOCkleClgCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijg0ODU5NzkwNjIyNTQ2NjY3NDgiPiLgpIXgpKrgpKjgpYcgVVNCIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkrOCkpuCksuClh+CkgiDgpK/gpL4g4KS54KSf4KS+4KSP4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiLgpIXgpKrgpKjgpYcgU0Qg4KSV4KS+4KSw4KWN4KShIOCkleClgCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSs4KSm4KSy4KWH4KSCIOCkr+CkviDgpLngpJ/gpL7gpI/gpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTc1NDA2Mjk5NDQ1NzEwODg4Ij4i4KSP4KSq4KWN4KSy4KS/LiDgpJXgpYsgVVNCIOCkuOCkguCkl+CljeCksOCkueCkoyDgpK7gpYfgpIIg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MzM3NDE3NzkwOTM2NjMyMDkwIj4i4KSP4KSq4KWN4KS4IOCkleCliyBTRCDgpJXgpL7gpLDgpY3gpKEg4KSq4KSwIOCksuCkv+CkluCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNzU0MDYyOTk0NDU3MTA4ODgiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIFVTQiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSu4KWH4KSCIOCksuCkv+CkluCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDMzNzQxNzc5MDkzNjYzMjA5MCI+IuCkkOCkquCljeCkuCAg4KSV4KWLIFNEIOCkleCkvuCksOCljeCkoSDgpKrgpLAg4KSy4KS/4KSW4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTk4MzkxOTk3MDY4NzkwMTUiPiLgpIbgpILgpKTgpLDgpL/gpJUg4KSu4KWA4KSh4KS/4KSv4KS+IOCkuOCkguCkl+CljeCksOCkueCkoyDgpLjgpL7gpK7gpJfgpY3gpLDgpL/gpK/gpYvgpIIg4KSV4KWLIOCkrOCkpuCksuClh+Ckgi/gpLngpJ/gpL7gpI/gpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxODkxNjA1OTc2OTg1MjkxODUiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkguCkpOCksOCkv+CklSDgpK7gpYDgpKHgpL/gpK/gpL4g4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkleClgCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxODkxNjA1OTc2OTg1MjkxODUiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpILgpKTgpLDgpL/gpJUg4KSu4KWA4KSh4KS/4KSv4KS+IOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkleCliyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3ODMxODU5ODQ0ODg0OTgyOSI+IuCkpuCkuOCljeCkpOCkvuCkteClh+CknOCkvCDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURvY3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NzA0MzIzMTc2OTE0MTIxNDg0Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpKbgpLjgpY3gpKTgpL7gpLXgpYfgpJzgpLwg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg3MDQzMjMxNzY5MTQxMjE0ODQiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpKbgpLjgpY3gpKTgpL7gpLXgpYfgpJzgpLwg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSI4MTUwNjEzODIzOTAwNDYwNTc2Ij4i4KS44KSt4KWAIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkk+CkgiDgpJXgpYcg4KSs4KS+4KS54KSw4KWAIOCkuOCkguCkl+CljeCksOCkueCkoyDgpKTgpJUg4KSq4KS54KWB4KSC4KSa4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iMzIxNTIwODM1NzQxNTg5MTMyMCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KS44KSt4KWAIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkk+CkgiDgpJXgpYcg4KSs4KS+4KS54KSw4KWAIOCkuOCkguCkl+CljeCksOCkueCkoyDgpKTgpJUg4KSq4KS54KWB4KSC4KSa4KSo4KWHIOCkpuClh+Ckgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSIzMjE1MjA4MzU3NDE1ODkxMzIwIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KSt4KWAIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkk+CkgiDgpJXgpYcg4KSs4KS+4KS54KSw4KWAIOCkuOCkguCkl+CljeCksOCkueCkoyDgpKTgpJUg4KSq4KS54KWB4KSC4KSa4KSo4KWHIOCkpuClh+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NjU2NDg3MjY0ODE5NjY5ODI0Ij4i4KSV4KWI4KS2IOCkq+CkvOCkvuCkh+CksiDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KSu4KWH4KSCIOCkquCkueCkguCkmuClhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NTc4OTY3NjQyMjY1NTUwOTU1Ij4i4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpLjgpILgpJrgpK8g4KSr4KS84KS+4KSH4KSyIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpKrgpKLgpLzgpKjgpYcg4KSU4KSwIOCksuCkv+CkluCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NTc4OTY3NjQyMjY1NTUwOTU1Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpLjgpILgpJrgpK8g4KSr4KS84KS+4KSH4KSyIOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpKrgpKLgpLzgpKjgpYcg4KSU4KSwIOCksuCkv+CkluCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlX3NpcCIgbXNnaWQ9IjU5ODY5NTIzNjI3OTU4NzA1MDIiPiLgpIfgpILgpJ/gpLDgpKjgpYfgpJ8g4KSV4KWJ4KSyIOCkleCksOClh+Ckgi/gpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlX3NpcCIgbXNnaWQ9IjQ3MTc2MzIwMDAwNjI2NzQyOTQiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkh+CkguCkn+CksOCkqOClh+CknyDgpJXgpYngpLIg4KSV4KSw4KSo4KWHL+CkquCljeCksOCkvuCkquCljeCkpCDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyBTSVAg4KS44KWH4KS14KS+IOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlX3NpcCIgbXNnaWQ9IjQ3MTc2MzIwMDAwNjI2NzQyOTQiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIfgpILgpJ/gpLDgpKjgpYfgpJ8g4KSV4KWJ4KSyIOCkleCksOCkqOClhy/gpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8gU0lQIOCkuOClh+CkteCkviDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZF9jYWxsX3NlcnZpY2UiIG1zZ2lkPSI2NzI0MDA5NzI2NjcxMjQ2NTUxIj4i4KSH4KSoLeCkleClieCksiDgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KS44KWHIOCkuOCkueCkreCkvuCkl+Ckv+CkpOCkviDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kX2NhbGxfc2VydmljZSIgbXNnaWQ9Ijg3MzI1NDc2NjI0NDI1NzI0MzUiPiLgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSV4KWLIOCkr+CkuSDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYgg4KSV4KS/IOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpJXgpYsg4KSH4KSoLeCkleClieCksiDgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSV4KSsIOCklOCksCDgpJXgpYjgpLjgpYAg4KSm4KS/4KSW4KS+4KSIIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc4NjI1OTMyODM2MTE0OTMyMzIiPiLgpJDgpKTgpL/gpLngpL7gpLjgpL/gpJUg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkieCkquCkr+Cli+CklyDgpKrgpKLgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc2ODkwNjA3NDk4MTkxMjY0NzIiPiLgpJXgpL/gpLjgpYAg4KSP4KSq4KWN4KS4IOCkleCliyDgpLXgpL/gpLbgpL/gpLfgpY3gpJ8g4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCklOCksCDgpI/gpKrgpY3igI3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJDgpKTgpL/gpLngpL7gpLjgpL/gpJUg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkieCkquCkr+Cli+CklyDgpJXgpYsg4KSq4KSi4KS84KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3Njg5MDYwNzQ5ODE5MTI2NDcyIj4i4KSV4KS/4KS44KWAIOCkkOCkquCljeCkuCAg4KSV4KWLIOCkteCkv+CktuCkv+Ckt+CljeCknyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSU4KSwIOCkkOCkquCljeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkkOCkpOCkv+CkueCkvuCkuOCkv+CklSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkleCliyDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSIyNTYyMDUzNTkyMzM5ODU5OTkwIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkqOClgOCkpOCkvyDgpKrgpY3gpLDgpKzgpILgpKfgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9Ijc1Mzc1ODY3NzE1NTkzNzA2NjgiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKjgpYDgpKTgpL/gpK/gpL7gpIIg4KSq4KWN4KSw4KSs4KSC4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJTgpLAg4KSP4KSq4KWN4oCN4KS4LeCkteCkv+CktuCkv+Ckt+CljeKAjeCknyDgpKjgpL/gpK/gpK7gpYvgpIIg4KSV4KWLIOCkquCksOCkv+CkreCkvuCkt+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iNzUzNzU4Njc3MTU1OTM3MDY2OCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkqOClgOCkpOCkv+Ckr+CkvuCkgiDgpKrgpY3gpLDgpKzgpILgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCklOCksCDgpJDgpKrgpY3gpLgt4KS14KS/4KS24KS/4KS34KWN4oCN4KSfIOCkqOCkv+Ckr+CkruCli+CkgiDgpJXgpYsg4KSq4KSw4KS/4KSt4KS+4KS34KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1MDg4MjE3MzA5MDg4NzI5NjUwIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkieCkquCkr+Cli+CklyDgpLngpL/gpLjgpL7gpKwg4KSs4KSm4KSy4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1NDQzNDEyODY2NzQ2MTk4MTIzIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpK/gpLkg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCkleCkvyDgpI/gpKrgpY3igI3gpLgg4KSV4KWAIOCkpOClgeCksuCkqOCkviDgpK7gpYfgpIIg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkieCkquCkr+Cli+CklyDgpJXgpL4g4KSu4KWC4KSy4KWN4KSv4KS+4KSC4KSV4KSoIOCkleCliOCkuOClhyDgpJXgpL/gpK/gpL4g4KSc4KS+4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjU0NDM0MTI4NjY3NDYxOTgxMjMiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpK/gpLkg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIOCkleCkvyDgpJDgpKrgpY3gpLgg4KSV4KWAIOCkpOClgeCksuCkqOCkviDgpK7gpYfgpIIg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkieCkquCkr+Cli+CklyDgpJXgpL4g4KSu4KWC4KSy4KWN4KSv4KS+4KSC4KSV4KSoIOCkleCliOCkuOClhyDgpJXgpL/gpK/gpL4g4KSc4KS+4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkqOCkueClgOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iMzY1ODUyNzIxNDkxNDk1OTc0OSI+IuCkuOClieCkleClh+CknyDgpK7gpL7gpLDgpY3gpJUg4KSs4KSm4KSy4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSI3NjU1NTY4NDMzNjk2MzU2NTc4Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLDgpYLgpJ/gpL/gpILgpJcg4KSV4KWHIOCksuCkv+CkjyDgpLjgpYngpJXgpYfgpJ8g4KSu4KS+4KSw4KWN4KSVIOCkrOCkpuCksuCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSI3NjU1NTY4NDMzNjk2MzU2NTc4Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSw4KWC4KSf4KS/4KSC4KSXIOCkleClhyDgpLLgpL/gpI8g4KS44KWJ4KSV4KWH4KSfIOCkruCkvuCksOCljeCklSDgpKzgpKbgpLLgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9Ijc2NzM0MTY0ODc4NzM0MzIyNjgiPiLgpLjgpYLgpJrgpKjgpL7gpJPgpIIg4KSk4KSVIOCkquCkueClgeCkguCkmuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI0NTg0NTc3NDI2ODM0MzEzODciPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkuOClguCkmuCkqOCkvuCkk+CkgiDgpJXgpYsg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhywg4KSc4KS+4KSC4KSaIOCkleCksOCkqOClhywg4KSU4KSwIOCkuOCkvuCkq+CkvCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCwg4KSc4KS/4KSo4KSu4KWH4KSCIOCkheCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpKrgpYvgpLjgpY3gpJ8g4KSV4KWAIOCkl+CkiCDgpLjgpYLgpJrgpKjgpL7gpI/gpIIg4KSt4KWAIOCktuCkvuCkruCkv+CksiDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9IjQ1ODQ1Nzc0MjY4MzQzMTM4NyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkuOClguCkmuCkqOCkvuCkk+CkgiDgpJXgpYsg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkleCksOCkqOClhywg4KSc4KS+4KSC4KSaIOCkleCksOCkqOClhywg4KSU4KSwIOCkuOCkvuCkq+CkvCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliCwg4KSc4KS/4KSo4KSu4KWH4KSCIOCkheCkqOCljeCkryDgpJDgpKrgpY3gpLggIOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWL4KS44KWN4KSfIOCkleClgCDgpJfgpIgg4KS44KWC4KSa4KSo4KS+4KSP4KSCIOCkreClgCDgpLbgpL7gpK7gpL/gpLIg4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9IjcwNTc3NjQ3NDIyMTE2NTY2NTQiPiLgpLjgpYLgpJrgpKjgpL4g4KS24KWN4KSw4KS14KSj4KSV4KSw4KWN4KSk4KS+IOCkuOClh+CkteCkviDgpLjgpYcg4KSc4KWB4KSh4KS84KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9Ijk4NTY5NzkxODU3NjkwMjk4NiI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KS44KWC4KSa4KSo4KS+IOCktuCljeCksOCkteCko+CkleCksOCljeCkpOCkviDgpLjgpYfgpLXgpL4g4KSV4KWHIOCktuClgOCksOCljeCktyDgpLjgpY3gpKTgpLDgpYDgpK8g4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpJzgpYHgpKHgpLzgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkj+CkquCljeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpYAg4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iMzY5OTYwMDgzMzk3NTExNzQ3OCI+IuCkteCkvuCkueCklSDgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCksuCkrOCljeCkpyDgpJXgpLDgpL7gpK/gpL4g4KSX4KSv4KS+IOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksOClh+CktuCkqCDgpI/gpKrgpY3gpLgg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjQxNTk1NDkxNTI1MjkxMTE5MjAiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkteCkvuCkueCklSDgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCksuCkrOCljeCkpyDgpJXgpLDgpL7gpK/gpL4g4KSX4KSv4KS+IOCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksOClh+CktuCkqCDgpI/gpKrgpY3gpLgg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSP4KSq4KWN4oCN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9Ijk4NTY5NzkxODU3NjkwMjk4NiI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KS44KWC4KSa4KSo4KS+IOCktuCljeCksOCkteCko+CkleCksOCljeCkpOCkviDgpLjgpYfgpLXgpL4g4KSV4KWHIOCktuClgOCksOCljeCktyDgpLjgpY3gpKTgpLDgpYDgpK8g4KSH4KSC4KSf4KSw4KSr4KS84KWH4KS4IOCkuOClhyDgpJzgpYHgpKHgpLzgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkkOCkquCljeCkuCAg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KWAIOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjM2OTk2MDA4MzM5NzUxMTc0NzgiPiLgpLXgpL7gpLngpJUg4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpLLgpKzgpY3gpKcg4KSV4KSw4KS+4KSv4KS+IOCkl+Ckr+CkviDgpJXgpYngpKjgpY3gpKvgpLzgpL/gpJfgpLDgpYfgpLbgpKgg4KSQ4KSq4KWN4KS4ICDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iNDE1OTU0OTE1MjUyOTExMTkyMCI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KS14KS+4KS54KSVIOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSy4KSs4KWN4KSnIOCkleCksOCkvuCkr+CkviDgpJfgpK/gpL4g4KSV4KWJ4KSo4KWN4KSr4KS84KS/4KSX4KSw4KWH4KS24KSoIOCkkOCkquCljeCkuCAg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjgyMDYwNzc0NDc4Mzg5MDk1MTYiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWN4KSl4KS/4KSk4KS/4KSv4KWL4KSCIOCkleClhyDgpIXgpLXgpLLgpYvgpJXgpKjgpYvgpIIg4KSV4KWLIOCkuOClgeCkqOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtDb25kaXRpb25zIiBtc2dpZD0iNjg5OTEwMjA3NTgyNTI3MjIxMSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCljeCkpeCkv+CkpOCkv+Ckr+Cli+CkgiDgpJXgpYcg4KSF4KS14KSy4KWL4KSV4KSo4KWL4KSCIOCkleCliyDgpLjgpYHgpKjgpKjgpYfCoOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpI/gpKrgpY3gpLgg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjY4OTkxMDIwNzU4MjUyNzIyMTEiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWN4KSl4KS/4KSk4KS/4KSv4KWL4KSCIOCkleClhyDgpIXgpLXgpLLgpYvgpJXgpKjgpYvgpIIg4KSV4KWLIOCkuOClgeCkqOCkqOClh8Kg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkkOCkquCljeCkuCAg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeCkr+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjQ0OTc0MjA3Mjg4NTc1ODU3OTEiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSo4KS/4KSv4KSuIOCkuOClh+CknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2xpbWl0UGFzc3dvcmQiIG1zZ2lkPSIzMjUyMTE0MjAzOTE5NTEwMzk0Ij4i4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoLeCkheCkqOCksuClieCklSDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSu4KWH4KSCIOCkheCkqOClgeCkruCkpOCkvyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSy4KSC4KSs4KS+4KSIIOCklOCksCDgpLXgpLDgpY3gpKPgpYvgpIIg4KSV4KWLIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dhdGNoTG9naW4iIG1zZ2lkPSI5MTQxMzA2NDY5NDIxOTk1MDMiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgt4KSF4KSo4KSy4KWJ4KSVIOCkleClhyDgpKrgpY3gpLDgpK/gpL7gpLjgpYvgpIIg4KSq4KSwIOCkqOCkv+Ckl+CksOCkvuCkqOClgCDgpLDgpJbgpYfgpIIiPC9zdHJpbmc+CkBAIC02OTEsNyArNzAwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9leHBpcmVQYXNzd29yZCIgbXNnaWQ9Ijg4NTI3OTE1MTg0NzI1NDA1NiI+IuCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpLLgpYngpJUg4KSV4KSw4KWH4KSCIOCkquCkvuCkuOCkteCksOCljeCkoSDgpLjgpK7gpL7gpKrgpY3gpKTgpL8g4KS44KWH4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSIxNzI5NzI1MjI2MzE0NjkxNTkxIj4i4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiDgpJXgpL8g4KSV4KS/4KSk4KSo4KWHIOCkuOCkruCkryDgpK7gpYfgpIIg4KSy4KWJ4KSVLeCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSs4KSm4KSy4KS+IOCknOCkvuCkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSI4OTAxMzI2MTk5OTA5MTMyOTE1Ij4i4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkj+CkqOCljeKAjeCkleCljeCksOCkv+CkquCljeKAjeCktuCkqCDgpLjgpYfgpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iMjYzNzczMjExNTMyNTMxNjk5MiI+IuCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpI/gpKrgpY3igI3gpLgg4KSh4KWH4KSf4KS+IOCkleCliyDgpI/gpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpJ8g4KSV4KS/4KSv4KS+IOCknOCkvuCkqOCkviDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZW5jcnlwdGVkU3RvcmFnZSIgbXNnaWQ9IjI2Mzc3MzIxMTUzMjUzMTY5OTIiPiLgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KSQ4KSq4KWN4KS4IOCkoeClh+Ckn+CkviDgpJXgpYsg4KSP4KSo4KWN4KSV4KWN4KSw4KS/4KSq4KWN4KSfIOCkleCkv+Ckr+CkviDgpJzgpL7gpKjgpL4g4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUNhbWVyYSIgbXNnaWQ9IjYzOTUzMDEwMjMxNTIyOTc4MjYiPiLgpJXgpYjgpK7gpLDgpYvgpIIg4KSV4KWLIOCkheCkleCljeCkt+CkriDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSIyMzA2MzQ5MDQyODM0NzU0NTk3Ij4i4KS44KSt4KWAIOCkieCkquCkleCksOCkoyDgpJXgpYjgpK7gpLDgpYvgpIIg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpLDgpYvgpJXgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2Rpc2FibGVLZXlndWFyZEZlYXR1cmVzIiBtc2dpZD0iMjY2MzI5MTA0NTQyNjM4ODAyIj4i4KSV4KWA4KSX4KS+4KSw4KWN4KShIOCkruClh+CkgiDgpLjgpYHgpLXgpL/gpKfgpL7gpI/gpIIg4KSF4KSV4KWN4KS34KSuIOCkleCksOClh+CkgiI8L3N0cmluZz4KQEAgLTk0MCwyNCArOTQ5LDI0IEBACiAgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hcmVhIiBtc2dpZD0iMzU0NzQwOTA1MDg4OTk1MjQyMyI+IuCkleCljeCkt+Clh+CkpOCljeCksCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2VtaXJhdGUiIG1zZ2lkPSIyODkzODgwOTc4ODM1Njk4ODE4Ij4i4KSF4KSu4KWA4KSw4KS+4KSkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3NzUyNjU3NzU0MDUxMDY5ODMiPiLgpIXgpKrgpKjgpYcg4KS14KWH4KSsIOCkrOClgeCkleCkruCkvuCksOCljeCklSDgpJTgpLAg4KSH4KSk4KS/4KS54KS+4KS4IOCkquCkouCkvOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iODQ2MjM3ODIyNjYwMDQzOTY1OCI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkpuCljeCkteCkvuCksOCkviDgpLXgpL/gpJzgpLzgpL/gpJ8g4KSV4KS/4KSPIOCkl+CkjyDgpLjgpK3gpYAgVVJMIOCkleClhyDgpIfgpKTgpL/gpLngpL7gpLgsIOCklOCksCDgpLjgpK3gpYAg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkrOClgeCkleCkruCkvuCksOCljeCklSDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSn4KWN4oCN4KSv4KS+4KSoIOCkpuClh+Ckgjog4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpKTgpYPgpKTgpYDgpK8t4KSq4KSV4KWN4KS3IOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpK/gpL4g4KS14KWH4KSsIOCkrOCljeCksOCkvuCkieCknOCkvOCkv+CkguCklyDgpJXgpY3gpLfgpK7gpKTgpL7gpJPgpIIg4KS14KS+4KSy4KWHIOCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCksuCkvuCkl+ClgiDgpKjgpLngpYDgpIIg4KSV4KWAIOCknOCkviDgpLjgpJXgpKTgpYAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkpuCljeCkteCkvuCksOCkviDgpLXgpL/gpJzgpLzgpL/gpJ8g4KSV4KS/4KSPIOCkl+CkjyDgpLjgpK3gpYAgVVJMIOCkleClhyDgpIfgpKTgpL/gpLngpL7gpLgsIOCklOCksCDgpLjgpK3gpYAg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkrOClgeCkleCkruCkvuCksOCljeCklSDgpKrgpKLgpLzgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSn4KWN4oCN4KSv4KS+4KSoIOCkpuClh+Ckgjog4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpKTgpYPgpKTgpYDgpK8t4KSq4KSV4KWN4KS3IOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpK/gpL4g4KS14KWH4KSsIOCkrOCljeCksOCkvuCkieCknOCkvOCkv+CkguCklyDgpJXgpY3gpLfgpK7gpKTgpL7gpJPgpIIg4KS14KS+4KSy4KWHIOCkheCkqOCljeKAjeCkryDgpJDgpKrgpY3gpLggIOCkpuCljeCkteCkvuCksOCkviDgpLLgpL7gpJfgpYIg4KSo4KS54KWA4KSCIOCkleClgCDgpJzgpL4g4KS44KSV4KSk4KWALiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzcxNDc4NTE2NTI3MzMxNDQ5MCI+IuCkteClh+CkrCDgpKzgpYHgpJXgpK7gpL7gpLDgpY3gpJUg4KSU4KSwIOCkh+CkpOCkv+CkueCkvuCkuCDgpLLgpL/gpJbgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY4MjU1Mjc0NjkxNDU3NjA5MjIiPiLgpI/gpKrgpY3gpLgg4KSV4KWLIOCkhuCkquCkleClhyDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSu4KWH4KSCIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSV4KWHIOCkh+CkpOCkv+CkueCkvuCkuCDgpK/gpL4g4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSVIOCkleCliyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpI/gpKrgpY3gpLgg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkoeClh+Ckn+CkviDgpJXgpYsg4KSu4KS/4KSf4KS+IOCkuOCkleCkpOCkviDgpLngpYgg4KSv4KS+IOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLAg4KS44KSV4KSk4KS+IOCkueCliC4g4KSn4KWN4oCN4KSv4KS+4KSoIOCkpuClh+Ckgjog4KSv4KS5IOCkheCkqOClgeCkruCkpOCkvyDgpKTgpYPgpKTgpYDgpK8t4KSq4KSV4KWN4KS3IOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpK/gpL4g4KS14KWH4KSsIOCkrOCljeCksOCkvuCkieCknOCkvOCkv+CkguCklyDgpJXgpY3gpLfgpK7gpKTgpL7gpJPgpIIg4KS14KS+4KSy4KWHIOCkheCkqOCljeKAjeCkryDgpI/gpKrgpY3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCksuCkvuCkl+ClgiDgpKjgpLngpYDgpIIg4KSV4KWAIOCknOCkviDgpLjgpJXgpKTgpYAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ5NzM4OTUzMTAxNDE4NTUwOSI+IuCkj+CkquCljeCkuCDgpJXgpYsg4KSG4KSq4KSV4KWHIOCkq+CkvOCli+CkqCDgpK7gpYfgpIIg4KS44KSC4KSX4KWN4KSw4KS54KWA4KSkIOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpJXgpYcg4KSH4KSk4KS/4KS54KS+4KS4IOCkr+CkviDgpKzgpYHgpJXgpK7gpL7gpLDgpY3gpJUg4KSV4KWLIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSH4KS44KS44KWHIOCkj+CkquCljeCkuCDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSh4KWH4KSf4KS+IOCkleCliyDgpK7gpL/gpJ/gpL4g4KS44KSV4KSk4KS+IOCkueCliCDgpK/gpL4g4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWILiDgpKfgpY3igI3gpK/gpL7gpKgg4KSm4KWH4KSCOiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpOClg+CkpOClgOCkry3gpKrgpJXgpY3gpLcg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkr+CkviDgpLXgpYfgpKwg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KS/4KSC4KSXIOCkleCljeCkt+CkruCkpOCkvuCkk+CkgiDgpLXgpL7gpLLgpYcg4KSF4KSo4KWN4oCN4KSvIOCkj+CkquCljeCkuCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSy4KS+4KSX4KWCIOCkqOCkueClgOCkgiDgpJXgpYAg4KSc4KS+IOCkuOCkleCkpOClgC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY4MjU1Mjc0NjkxNDU3NjA5MjIiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkruClh+CkgiDgpLjgpILgpJfgpY3gpLDgpLngpYDgpKQg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkleClhyDgpIfgpKTgpL/gpLngpL7gpLgg4KSv4KS+IOCkrOClgeCkleCkruCkvuCksOCljeCklSDgpJXgpYsg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpIfgpLjgpLjgpYcg4KSQ4KSq4KWN4KS4ICDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSh4KWH4KSf4KS+IOCkleCliyDgpK7gpL/gpJ/gpL4g4KS44KSV4KSk4KS+IOCkueCliCDgpK/gpL4g4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksCDgpLjgpJXgpKTgpL4g4KS54KWILiDgpKfgpY3igI3gpK/gpL7gpKgg4KSm4KWH4KSCOiDgpK/gpLkg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpOClg+CkpOClgOCkry3gpKrgpJXgpY3gpLcg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkr+CkviDgpLXgpYfgpKwg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KS/4KSC4KSXIOCkleCljeCkt+CkruCkpOCkvuCkk+CkgiDgpLXgpL7gpLLgpYcg4KSF4KSo4KWN4oCN4KSvIOCkkOCkquCljeCkuCAg4KSm4KWN4KS14KS+4KSw4KS+IOCksuCkvuCkl+ClgiDgpKjgpLngpYDgpIIg4KSV4KWAIOCknOCkviDgpLjgpJXgpKTgpYAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ5NzM4OTUzMTAxNDE4NTUwOSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpKvgpLzgpYvgpKgg4KSu4KWH4KSCIOCkuOCkguCkl+CljeCksOCkueClgOCkpCDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSV4KWHIOCkh+CkpOCkv+CkueCkvuCkuCDgpK/gpL4g4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSVIOCkleCliyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkuOClhyDgpJDgpKrgpY3gpLggIOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkruCkv+Ckn+CkviDgpLjgpJXgpKTgpL4g4KS54KWIIOCkr+CkviDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSwIOCkuOCkleCkpOCkviDgpLngpYguIOCkp+CljeKAjeCkr+CkvuCkqCDgpKbgpYfgpII6IOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSk4KWD4KSk4KWA4KSvLeCkquCkleCljeCktyDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpLAg4KSv4KS+IOCkteClh+CkrCDgpKzgpY3gpLDgpL7gpIngpJzgpLzgpL/gpILgpJcg4KSV4KWN4KS34KSu4KSk4KS+4KST4KSCIOCkteCkvuCksuClhyDgpIXgpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4ICDgpKbgpY3gpLXgpL7gpLDgpL4g4KSy4KS+4KSX4KWCIOCkqOCkueClgOCkgiDgpJXgpYAg4KSc4KS+IOCkuOCkleCkpOClgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsYXJtIiBtc2dpZD0iMTM3OTI5NDU1NjM2MjA5MTgxNCI+IuCkheCksuCkvuCksOCljeCkriDgpLjgpYfgpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWxhcm0iIG1zZ2lkPSIzMTYzOTIwMzkxNTc0NzM4NDgiPiLgpI/gpKrgpY3igI3gpLgg4KSV4KWLIOCkh+CkguCkuOCljeKAjeCkn+ClieCksiDgpJXgpL/gpI8g4KSX4KSPIOCkheCksuCkvuCksOCljeCkriDgpJjgpKHgpLzgpYAg4KSP4KSq4KWN4oCN4KS4IOCkruClh+CkgiDgpIXgpLLgpL7gpLDgpY3gpK4g4KS44KWH4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLngpYsg4KS44KSV4KSk4KS+IOCkueCliCDgpJXgpYHgpJsg4KSF4KSy4KS+4KSw4KWN4KSuIOCkmOCkoeCkvOClgCDgpI/gpKrgpY3igI3gpLgg4KSu4KWH4KSCIOCkr+CkuSDgpLjgpYHgpLXgpL/gpKfgpL4g4KSoIOCkueCliy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbGFybSIgbXNnaWQ9IjMxNjM5MjAzOTE1NzQ3Mzg0OCI+IuCkkOCkquCljeCkuCDgpJXgpYsg4KSH4KSC4KS44KWN4oCN4KSf4KWJ4KSyIOCkleCkv+CkjyDgpJfgpI8g4KSF4KSy4KS+4KSw4KWN4KSuIOCkmOCkoeCkvOClgCDgpJDgpKrgpY3gpLgg4KSu4KWH4KSCIOCkheCksuCkvuCksOCljeCkriDgpLjgpYfgpJ8g4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkueCliyDgpLjgpJXgpKTgpL4g4KS54KWIIOCkleClgeCkmyDgpIXgpLLgpL7gpLDgpY3gpK4g4KSY4KSh4KS84KWAIOCkkOCkquCljeCkuCDgpK7gpYfgpIIg4KSv4KS5IOCkuOClgeCkteCkv+Ckp+CkviDgpKgg4KS54KWLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWRkVm9pY2VtYWlsIiBtc2dpZD0iNTUyNTY2MDAyNjA5MDk1OTA0NCI+IuCkp+CljeKAjeCkteCkqOCkv+CkruClh+CksiDgpJzgpYvgpKHgpLzgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hZGRWb2ljZW1haWwiIG1zZ2lkPSI2NjA0NTA4NjUxNDI4MjUyNDM3Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpIbgpKrgpJXgpYcg4KSn4KWN4oCN4KS14KSo4KS/4KSu4KWH4KSyIOCkh+CkqOCkrOClieCkleCljeKAjeCkuCDgpK7gpYfgpIIg4KS44KSC4KSm4KWH4KS2IOCknOCli+CkoeCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjY2MDQ1MDg2NTE0MjgyNTI0MzciPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpIbgpKrgpJXgpYcg4KSn4KWN4oCN4KS14KSo4KS/4KSu4KWH4KSyIOCkh+CkqOCkrOClieCkleCljeKAjeCkuCDgpK7gpYfgpIIg4KS44KSC4KSm4KWH4KS2IOCknOCli+CkoeCkvOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iNTk2MjIyNDE1ODk1NTI3MzkzMiI+IuCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpK3gpYzgpJfgpYvgpLLgpL/gpJUt4KS44KWN4KSl4KS+4KSoIOCkheCkqOClgeCkruCkpOCkv+Ckr+Cli+CkgiDgpJXgpYsg4KSs4KSm4KSy4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iMTA4Mzc0MzIzNDUyMjYzODc0NyI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSs4KWN4KSw4KS+4KSJ4KSc4KS84KSwIOCkleClhyDgpK3gpYzgpJfgpYvgpLLgpL/gpJUt4KS44KWN4oCN4KSl4KS+4KSoIOCkleClgCDgpIXgpKjgpYHgpK7gpKTgpL/gpK/gpL7gpIIg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSP4KSq4KWN4oCN4KS4IOCkh+CkuOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSP4KSV4KSq4KSV4KWN4KS34KWA4KSvIOCkteClh+CkrOCkuOCkvuCkh+CknyDgpJXgpYsg4KS44KWN4oCN4KSl4KS+4KSoIOCknOCkvuCkqOCkleCkvuCksOClgCDgpK3gpYfgpJzgpKjgpYcg4KSu4KWH4KSCIOCkleCksCDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjEwODM3NDMyMzQ1MjI2Mzg3NDciPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpJXgpYcg4KSt4KWM4KSX4KWL4KSy4KS/4KSVLeCkuOCljeKAjeCkpeCkvuCkqCDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/4KSv4KS+4KSCIOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkkOCkquCljeCkuCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkj+CkleCkquCkleCljeCkt+ClgOCkryDgpLXgpYfgpKzgpLjgpL7gpIfgpJ8g4KSV4KWLIOCkuOCljeKAjeCkpeCkvuCkqCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSt4KWH4KSc4KSo4KWHIOCkruClh+CkgiDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9IjU1NjgxMzkxMDA2NDU4MjkxMTciPiLgpKrgpYjgpJXgpYfgpJwg4KS44KSk4KWN4oCN4KSv4KS+4KSq4KS/4oCN4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9Ijg0Mzc1OTAxOTA5OTA4NDMzODEiPiLgpI/gpKrgpY3igI3gpLLgpL/igI3gpJXgpYfgpLbgpKgg4KSV4KWLIOCkh+CkguCkuOCljeKAjeCkn+ClieCksiDgpJXgpLDgpKjgpYcg4KSv4KWL4KSX4KWN4oCN4KSvIOCkquCliOCkleClh+CknCDgpLjgpKTgpY3igI3gpK/gpL7gpKrgpL/igI3gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iNDE4Nzc4Njc5MzM2MDMyNjY1NCI+IuCkquCliOCkleClh+CknCDgpKrgpY3gpLDgpK7gpL7gpKPgpJUg4KS44KWHIOCkhuCkrOCkpuCljeCkpyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iMzE4MDc0MTc3MzIzMzg2MjEyNiI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KSq4KWI4KSV4KWH4KScIOCkquCljeCksOCkruCkvuCko+CklSDgpJXgpYcg4KSF4KSo4KWB4KSw4KWL4KSnIOCkleClgCDgpIXgpKjgpYHgpK7gpKTgpL/igI0g4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4oCN4KSvIOCkj+CkquCljeKAjeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkqOCkueClgOCkgiDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSIzMTgwNzQxNzczMjMzODYyMTI2Ij4i4KSn4KS+4KSw4KSVIOCkleCliyDgpKrgpYjgpJXgpYfgpJwg4KSq4KWN4KSw4KSu4KS+4KSj4KSVIOCkleClhyDgpIXgpKjgpYHgpLDgpYvgpKcg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkv+KAjSDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkleClhyDgpLLgpL/gpI8g4KSV4KSt4KWAIOCkreClgCDgpIbgpLXgpLbgpY3igI3gpK/gpJUg4KSo4KS54KWA4KSCIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXJpYWxQb3J0IiBtc2dpZD0iNTQ2MDgzMzI3NjU0NjMxMDc2Ij4i4KS44KWA4KSw4KS/4KSv4KSyIOCkquCli+CksOCljeCknyDgpKrgpLAg4KSq4KS54KWB4KSC4KSa4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiJTZXJpYWxNYW5hZ2VyIEFQSSDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkleClhyDgpKfgpL7gpLDgpJUg4KSV4KWLIOCkuOClgOCksOCkv+Ckr+CksiDgpKrgpYvgpLDgpY3gpJ8g4KSq4KSwIOCkquCkueClgeCkguCkmiDgpKrgpY3gpLDgpKbgpL7gpKgg4KSV4KSw4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNTA3Nzc3NDI5Nzk0MzQwOTI4NSI+IuCkrOCkvuCkueCljeCkryDgpLDgpYLgpKog4KS44KWHIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpY3gpLDgpKbgpL7gpKTgpL7gpJPgpIIg4KSq4KSwIOCkquCkueClgeCkguCkmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNDU0NDM0NjQ4NjY5Nzg1MzY4NSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KS24KWH4KSyIOCkuOClhyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSq4KWN4KSw4KSm4KS+4KSk4KS+4KST4KSCIOCkpOCklSDgpKrgpLngpYHgpILgpJrgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkj+CkquCljeCkuCDgpJXgpYcg4KSy4KS/4KSPIOCkleCkreClgCDgpK3gpYAg4KSG4KS14KS24KWN4KSv4KSV4KSk4KS+IOCkqOCkueClgOCkgiDgpLngpYvgpKjgpYAg4KSa4KS+4KS54KS/4KSPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNDU0NDM0NjQ4NjY5Nzg1MzY4NSI+IuCkp+CkvuCksOCklSDgpJXgpYsg4KS24KWH4KSyIOCkuOClhyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSq4KWN4KSw4KSm4KS+4KSk4KS+4KST4KSCIOCkpOCklSDgpKrgpLngpYHgpILgpJrgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4g4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkkOCkquCljeCkuCAg4KSV4KWHIOCksuCkv+CkjyDgpJXgpK3gpYAg4KSt4KWAIOCkhuCkteCktuCljeCkr+CkleCkpOCkviDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KWAIOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4i4KSF4KSq4KSo4KWH4KSG4KSqIOCkieCkquCkleCksOCkoyDgpJXgpYAg4KSo4KSIIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKgg4KSy4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlTG9jayIgbXNnaWQ9IjE2NTU2MjU4MzIxNjY3Nzg0OTIiPiLgpKfgpL7gpLDgpJUg4KSV4KWLIOCkieCkquCkleCksOCkoyDgpIXgpKrgpJfgpY3gpLDgpYfgpKEg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8sIOCkl+CliOCksC3gpLjgpLngpK3gpL7gpJfgpYAg4KSw4KWA4KSs4KWC4KSfIOCkleClhyDgpKDgpYDgpJUg4KS44KSu4KSvIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkuOCkv+CkuOCljeCkn+CkriDgpKrgpLAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkuOCljeCkpOClgeCkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX21lc3NhZ2UiIG1zZ2lkPSI3NjczNDQ2ODcxMzkxOTU3OTAiPiLgpJXgpY3igI3gpK/gpL4g4KSG4KSqIOCkmuCkvuCkueCkpOClhyDgpLngpYjgpIIg4KSV4KS/IOCkrOCljeCksOCkvuCkieCknOCkvOCksCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSV4KWLIOCkr+CkvuCkpiDgpLDgpJbgpYc/Ijwvc3RyaW5nPgpAQCAtMTEwNSw3ICsxMTE0LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGl0bGUiIG1zZ2lkPSI1NTc2MjcyNDk2MzY1Njg0ODM0Ij4i4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkuOCljeKAjeCkpeCkvuCkqCDgpLjgpK7gpL7gpKrgpY3igI3gpKQg4KS54KWLIOCksOCkueCkviDgpLngpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RleHQiIG1zZ2lkPSI2NjQwNTA1ODE3NjE3NDE0MzcxIj4i4KS54KWLIOCkuOCkleCkpOCkviDgpLngpYgg4KSV4KWB4KSbIOCkuOCkv+CkuOCljeCkn+CkriDgpKvgpLzgpILgpJXgpY3gpLbgpKgg4KSV4KS+4KSw4KWN4KSvIOCkqCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4NzE4MzM1MTIxMDYwNzg3OTE0Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpJrgpLIg4KSw4KS54KS+IOCkueCliCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iNDY1MzU4Njk0Nzc0NzMzMDA1OCI+IuCkheCkp+Ckv+CklSDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSV4KWHIOCksuCkv+CkjyDgpK/gpL4g4KSP4KSq4KWN4KS4IOCksOCli+CkleCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkuOCljeCkquCksOCljeCktiDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX3J1bm5pbmdfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI0NjUzNTg2OTQ3NzQ3MzMwMDU4Ij4i4KSF4KSn4KS/4KSVIOCknOCkvuCkqOCkleCkvuCksOClgCDgpJXgpYcg4KSy4KS/4KSPIOCkr+CkviDgpJDgpKrgpY3gpLggIOCksOCli+CkleCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkuOCljeCkquCksOCljeCktiDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ib2siIG1zZ2lkPSI1OTcwMDYwNDMwNTYyNTI0OTEwIj4i4KSg4KWA4KSVIOCkueCliCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjY0NDI1NjA1NzEyNTk5MzUxMzAiPiLgpLDgpKbgpY3gpKYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ieWVzIiBtc2dpZD0iNTM2Mjk4MjMwMzMzNzk2OTMxMiI+IuCkoOClgOCklSDgpLngpYgiPC9zdHJpbmc+CkBAIC0xMTE5LDggKzExMjgsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+IuCkh+CkuCDgpJXgpY3gpLDgpL/gpK/gpL4g4KSV4KWHIOCksuCkv+CkjyDgpKHgpL/gpKvgpLzgpYngpLLgpY3igI3gpJ8g4KSw4KWC4KSqIOCkuOClhyDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyRGVmYXVsdEhpbnRNc2ciIG1zZ2lkPSIzMjUyNTg0Njg5NTEyMDc3MjU3Ij4i4KS44KS/4KS44KWN4oCN4KSf4KSuIOCkuOClh+Ckn+Ckv+CkguCklyAmZ3Q7IEFwcHMgJmd0OyDgpKHgpL7gpIngpKjgpLLgpYvgpKEg4KSV4KS/4KSPIOCkl+CkjyDgpK7gpYfgpIIg4KSh4KS/4KSr4KS84KWJ4KSy4KWN4oCN4KSfIOCkuOCkvuCkqyDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlQWN0aXZpdHkiIG1zZ2lkPSI3NDg2ODc2MTQ3NzUxODAzMzMzIj4i4KSV4KWL4KSIIOCkleCljeCksOCkv+Ckr+CkviDgpJrgpYHgpKjgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjaG9vc2VVc2JBY3Rpdml0eSIgbXNnaWQ9IjY4OTQ3NDg0MTYwNzM1ODM1MDkiPiJVU0Ig4KSJ4KSq4KSV4KSw4KSjIOCkleClhyDgpLLgpL/gpI8g4KSV4KWL4KSIIOCkj+CkquCljeCkuCDgpJrgpYHgpKjgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub0FwcGxpY2F0aW9ucyIgbXNnaWQ9IjI5OTE4MTQyNzM5MzY1MDQ2ODkiPiLgpJXgpYvgpIgg4KSt4KWAIOCkj+CkquCljeKAjeCkuCDgpK/gpLkg4KSV4KS+4KSw4KWN4KSv4KS14KS+4KS54KWAIOCkqOCkueClgOCkgiDgpJXgpLAg4KS44KSV4KSk4KS+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZVVzYkFjdGl2aXR5IiBtc2dpZD0iNjg5NDc0ODQxNjA3MzU4MzUwOSI+IlVTQiDgpIngpKrgpJXgpLDgpKMg4KSV4KWHIOCksuCkv+CkjyDgpJXgpYvgpIgg4KSQ4KSq4KWN4KS4ICDgpJrgpYHgpKjgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub0FwcGxpY2F0aW9ucyIgbXNnaWQ9IjI5OTE4MTQyNzM5MzY1MDQ2ODkiPiLgpJXgpYvgpIgg4KSt4KWAIOCkkOCkquCljeCkuCDgpK/gpLkg4KSV4KS+4KSw4KWN4KSv4KS14KS+4KS54KWAIOCkqOCkueClgOCkgiDgpJXgpLAg4KS44KSV4KSk4KS+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFlcnJfdGl0bGUiIG1zZ2lkPSIxOTA1ODAwNTYwMzE3MTM3NzUyIj48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFlcnJfYXBwbGljYXRpb24iIG1zZ2lkPSI5MzI2Mjg0ODgwMTMwOTI3NzYiPiLgpKbgpYHgpLDgpY3gpK3gpL7gpJfgpY3igI3gpK/gpLXgpLYsIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g4KSw4KWB4KSVIOCkl+Ckr+CkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWVycl9wcm9jZXNzIiBtc2dpZD0iNDUwNzA1ODk5NzAzNTY5NzU3OSI+IuCkpuClgeCksOCljeCkreCkvuCkl+CljeKAjeCkr+CkteCktiwgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkviDgpLDgpYHgpJUg4KSX4KSIIOCkueCliC4iPC9zdHJpbmc+CkBAIC0xMTM5LDIwICsxMTQ4LDIwIEBACiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2NhbGUiIG1zZ2lkPSIzMjAyOTU1NjY3Njc1OTQ0NDk5Ij4i4KS44KWN4KSV4KWH4KSyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3Nob3ciIG1zZ2lkPSI0MDEzODc4ODc2NDg2NjU1ODkyIj4i4KS54KSu4KWH4KS24KS+IOCkpuCkv+CkluCkvuCkj+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+IuCkh+CkuOClhyDgpLjgpL/gpLjgpY3igI3gpJ/gpK4g4KS44KWH4KSf4KS/4KSC4KSXICZndDsgQXBwcyAmZ3Q7IOCkoeCkvuCkieCkqOCksuCli+CkoSDgpJXgpL/gpI8g4KSX4KSPIOCkruClh+CkgiDgpKrgpYHgpKg6IOCkuOCkleCljeCkt+CkriDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IuCkj+CkquCljeKAjeCkuCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+ICjgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSDgpKjgpYcg4KSJ4KS44KSV4KWAIOCkuOCljeKAjeCkteCkr+CkgiDgpLLgpL7gpJfgpYIg4KS54KWL4KSo4KWHIOCkteCkvuCksuClgCBTdHJpY3RNb2RlIOCkqOClgOCkpOCkvyDgpJXgpL4g4KSJ4KSy4KWN4oCN4KSy4KSC4KSY4KSoIOCkleCkv+Ckr+CkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IuCkkOCkquCljeCkuCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+ICjgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSDgpKjgpYcg4KSJ4KS44KSV4KWAIOCkuOCljeKAjeCkteCkr+CkgiDgpLLgpL7gpJfgpYIg4KS54KWL4KSo4KWHIOCkteCkvuCksuClgCBTdHJpY3RNb2RlIOCkqOClgOCkpOCkvyDgpJXgpL4g4KSJ4KSy4KWN4oCN4KSy4KSC4KSY4KSoIOCkleCkv+Ckr+CkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic212X3Byb2Nlc3MiIG1zZ2lkPSI1MTIwMzk3MDEyMDQ3NDYyNDQ2Ij4i4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDgpKjgpYcg4KSJ4KS44KSV4KWAIOCkuOCljeKAjeCktS3gpKrgpY3gpLDgpLXgpLDgpY3gpKTgpL/gpKQgU3RyaWN0TW9kZSDgpKjgpYDgpKTgpL8g4KSV4KS+IOCkieCksuCljeKAjeCksuCkguCkmOCkqCDgpJXgpL/gpK/gpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3RpdGxlIiBtc2dpZD0iMTU4NDE5MjI4NTQ0MTQwNTc0NiI+IkFuZHJvaWQg4KSF4KSq4KSX4KWN4KSw4KWH4KShIOCkueCliyDgpLDgpLngpL4g4KS54KWILi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfYXBrIiBtc2dpZD0iNzkwNDA0MjY4MjExMTUyNjE2OSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4KSu4KWH4KSCIOCkuOClhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCkj+CkquCljeCkuCDgpIXgpKjgpYHgpJXgpYLgpLLgpL/gpKQg4KS54KWLIOCksOCkueCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfc3RhcnRpbmdfYXBwcyIgbXNnaWQ9IjQ1MTQ2NDUxNjM0NjkyNjcxMyI+IuCkj+CkquCljeCkuCDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KS54KWL4KSo4KWHIOCkteCkvuCksuClhyDgpLngpYjgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19hcGsiIG1zZ2lkPSI3OTA0MDQyNjgyMTExNTI2MTY5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgpK7gpYfgpIIg4KS44KWHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KSQ4KSq4KWN4KS4ICDgpIXgpKjgpYHgpJXgpYLgpLLgpL/gpKQg4KS54KWLIOCksOCkueCkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfc3RhcnRpbmdfYXBwcyIgbXNnaWQ9IjQ1MTQ2NDUxNjM0NjkyNjcxMyI+IuCkkOCkquCljeCkuCAg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkueCli+CkqOClhyDgpLXgpL7gpLLgpYcg4KS54KWI4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfY29tcGxldGUiIG1zZ2lkPSIxNDA1OTU0NzU0MTEyOTk5MjI5Ij4i4KSs4KWC4KSfIOCkuOCkruCkvuCkquCljeKAjeCkpCDgpLngpYsg4KSw4KS54KS+IOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uIiBtc2dpZD0iOTA4NzA2Mzk4NTc3NjYyNjE2NiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiUxJHM8L3hsaWZmOmc+IOCkmuCksiDgpLDgpLngpYAg4KS54KWIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbl9kZXRhaWwiIG1zZ2lkPSIxNzIxNjgxNzQxNjE3ODk4ODY1Ij4i4KSP4KSq4KWN4oCN4KS4IOCkquCksCDgpLjgpY3igI3gpLXgpL/gpJog4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KWN4oCN4KSq4KSw4KWN4KS2IOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90aXRsZSIgbXNnaWQ9IjcxNTMxNjcwODU0MDMyOTgxNjkiPiLgpI/gpKrgpY3gpLgg4KS44KWN4KS14KS/4KSaIOCkleCksOClh+Ckgj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGV4dCIgbXNnaWQ9IjcwMjI2MzE5MjQ1MzQ0MDY0MDMiPiLgpKbgpYLgpLjgpLDgpL4g4KSP4KSq4KWN4KS4IOCkquCkueCksuClhyDgpLjgpYcg4KSa4KSyIOCksOCkueCkviDgpLngpYgg4KSc4KS/4KS44KWHIOCkleCkv+CkuOClgCDgpKjgpI8g4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSw4KSo4KWHIOCkleClhyDgpKrgpLngpLLgpYcg4KSs4KSC4KSmIOCkleCkv+Ckr+CkviDgpJzgpL7gpKjgpL4g4KSG4KS14KS24KWN4oCN4KSv4KSVIOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uX2RldGFpbCIgbXNnaWQ9IjE3MjE2ODE3NDE2MTc4OTg4NjUiPiLgpJDgpKrgpY3gpLgg4KSq4KSwIOCkuOCljeKAjeCkteCkv+CkmiDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpLjgpY3igI3gpKrgpLDgpY3gpLYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RpdGxlIiBtc2dpZD0iNzE1MzE2NzA4NTQwMzI5ODE2OSI+IuCkkOCkquCljeCkuCAg4KS44KWN4KS14KS/4KSaIOCkleCksOClh+Ckgj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGV4dCIgbXNnaWQ9IjcwMjI2MzE5MjQ1MzQ0MDY0MDMiPiLgpKbgpYLgpLjgpLDgpL4g4KSQ4KSq4KWN4KS4ICDgpKrgpLngpLLgpYcg4KS44KWHIOCkmuCksiDgpLDgpLngpL4g4KS54KWIIOCknOCkv+CkuOClhyDgpJXgpL/gpLjgpYAg4KSo4KSPIOCkkOCkquCljeCkuCDgpJXgpYsg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkleCksOCkqOClhyDgpJXgpYcg4KSq4KS54KSy4KWHIOCkrOCkguCkpiDgpJXgpL/gpK/gpL4g4KSc4KS+4KSo4KS+IOCkhuCkteCktuCljeKAjeCkr+CklSDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9hY3Rpb24iIG1zZ2lkPSI0OTMxMjkxNzIyMzg1NjYyODIiPiI8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4g4KSq4KSwIOCkteCkvuCkquCkuCDgpLLgpYzgpJ/gpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjA4MjA5NDI3NTU4MDM1ODA0OSI+IuCkqOCkr+CkviDgpI/gpKrgpY3igI3gpLgg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkqCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwODIwOTQyNzU1ODAzNTgwNDkiPiLgpKjgpK/gpL4g4KSQ4KSq4KWN4KS4IOCkquCljeCksOCkvuCksOCkguCkrSDgpKgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5ld19hcHBfYWN0aW9uIiBtc2dpZD0iNTQ3Mjc1NjkyNjk0NTQ0MDcwNiI+Ijx4bGlmZjpnIGlkPSJPTERfQVBQIj4lMSRzPC94bGlmZjpnPiDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5MzIxNDM1OTgzNzE1MzczNDAiPiLgpKrgpYHgpLDgpL7gpKjgpYcg4KSP4KSq4KWN4oCN4KS4IOCkleCliyDgpKzgpL/gpKjgpL4g4KS44KS54KWH4KSc4KWHIOCkrOCkguCkpiDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5MzIxNDM1OTgzNzE1MzczNDAiPiLgpKrgpYHgpLDgpL7gpKjgpYcg4KSQ4KSq4KWN4KS4IOCkleCliyDgpKzgpL/gpKjgpL4g4KS44KS54KWH4KSc4KWHIOCkrOCkguCkpiDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VuZFRleHQiIG1zZ2lkPSI1MjA5ODc0NTcxOTU5NDY5MTQyIj4i4KSq4KS+4KSgIOCkleClhyDgpLLgpL/gpI8g4KSV4KS/4KS44KWAIOCkleCljeCksOCkv+Ckr+CkviDgpJXgpYsg4KSa4KWB4KSo4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Jpbmd0b25lIiBtc2dpZD0iNjg4NTQyMTQwNjg0NTczNDY1MCI+IuCksOCkv+CkguCkl+CksCDgpLXgpYngpLLgpY3igI3gpK/gpYLgpK4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWMiIG1zZ2lkPSI1NDIxNjUxMTU3MTM4NjI4MTcxIj4i4KSu4KWA4KSh4KS/4KSv4KS+IOCkteClieCksuCljeKAjeCkr+ClguCkriI8L3N0cmluZz4KQEAgLTEyMDQsNyArMTIxMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczNjM5MDcyMTM3ODc0NjkxNTEiPiLgpKvgpLzgpYvgpKggPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpLjgpYcg4KSV4KSo4KWH4KSV4KWN4KSfIOCksOCkueCkpOClhyDgpLjgpK7gpK8gV2ktRmkg4KS44KWHIOCkheCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKog4KS44KWHIOCkoeCkv+CkuOCljeCkleCkqOClh+CkleCljeCknyDgpLngpYsg4KSc4KS+4KSP4KSX4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiLgpLXgpLDgpY3gpKMg4KS44KSu4KWN4oCN4KSu4KS/4KSy4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+IlNNUyDgpLjgpILgpKbgpYfgpLYg4KSt4KWH4KScIOCksOCkueCkviDgpLngpYgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9tZXNzYWdlIiBtc2dpZD0iMzg2Nzg5OTE2OTY1MTQ5NjQzMyI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IOCkrOCkoeCkvOClgCDgpLjgpILgpJbgpY3gpK/gpL4g4KSu4KWH4KSCIFNNUyDgpLjgpILgpKbgpYfgpLYg4KSt4KWH4KScIOCksOCkueCkviDgpLngpYguIOCkleCljeCkr+CkviDgpIbgpKog4KSH4KS4IOCkj+CkquCljeCkuCDgpJXgpYsg4KS44KSC4KSm4KWH4KS2IOCkreClh+CknOCkqOCkviDgpJzgpL7gpLDgpYAg4KSw4KSW4KSo4KWHIOCkpuClh+CkqOCkviDgpJrgpL7gpLngpKTgpYcg4KS54KWI4KSCPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsg4KSs4KSh4KS84KWAIOCkuOCkguCkluCljeCkr+CkviDgpK7gpYfgpIIgU01TIOCkuOCkguCkpuClh+CktiDgpK3gpYfgpJwg4KSw4KS54KS+IOCkueCliC4g4KSV4KWN4KSv4KS+IOCkhuCkqiDgpIfgpLgg4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KSC4KSm4KWH4KS2IOCkreClh+CknOCkqOCkviDgpJzgpL7gpLDgpYAg4KSw4KSW4KSo4KWHIOCkpuClh+CkqOCkviDgpJrgpL7gpLngpKTgpYcg4KS54KWI4KSCPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3llcyIgbXNnaWQ9IjM2NjM3MjU5OTM4NTU4MTY4MDciPiLgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbm8iIG1zZ2lkPSI2MjU0Mzg1NjEzOTU1MzQ5ODIiPiLgpIXgpLjgpY3gpLXgpYDgpJXgpL7gpLAg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9tZXNzYWdlIiBtc2dpZD0iMTY0NTQzNjQ2NjI4NTMxMDg1NSI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7LCAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDsvYiZndDsg4KSq4KSwIOCkuOCkguCkpuClh+CktiDgpK3gpYfgpJzgpKjgpL4g4KSa4KS+4KS54KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CkBAIC0xMjEzLDcgKzEyMjIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbGxvdyIgbXNnaWQ9IjQ0NTg4Nzg2MzcxMTEwMjM0MTMiPiLgpK3gpYfgpJzgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2RlbnkiIG1zZ2lkPSIyOTI3Mzg5ODQwMjA5MTcwNzA2Ij4i4KSw4KSm4KWN4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX2Nob2ljZSIgbXNnaWQ9IjUyODk1Mzg1OTIyNzIyMTgxMzYiPiLgpK7gpYfgpLDgpYAg4KSq4KS44KSC4KSmIOCkleCliyDgpK/gpL7gpKYg4KSw4KSW4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfdW5kb19pbnN0cnVjdGlvbiIgbXNnaWQ9IjQ5NjA5NDQxMzMwNTIyODc0ODQiPiLgpIbgpKog4KSH4KS44KWHIOCkrOCkvuCkpiDgpK7gpYfgpIIg4KS44KWH4KSf4KS/4KSC4KSXwqAmZ3Q7wqDgpI/gpKrgpY3gpLgg4KSu4KWH4KSCIOCkrOCkpuCksiDgpLjgpJXgpKTgpYcg4KS54KWI4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfdW5kb19pbnN0cnVjdGlvbiIgbXNnaWQ9IjQ5NjA5NDQxMzMwNTIyODc0ODQiPiLgpIbgpKog4KSH4KS44KWHIOCkrOCkvuCkpiDgpK7gpYfgpIIg4KS44KWH4KSf4KS/4KSC4KSXwqAmZ3Q7wqDgpJDgpKrgpY3gpLggIOCkruClh+CkgiDgpKzgpKbgpLIg4KS44KSV4KSk4KWHIOCkueCliOCkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWx3YXlzX2FsbG93IiBtc2dpZD0iMzI0MTE4MTE1NDg2OTQ5MzM2OCI+IuCkueCkruClh+CktuCkviDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9uZXZlcl9hbGxvdyIgbXNnaWQ9IjQ0Njk5Mjc2NTc3NDI2OTY3MyI+IuCkleCkreClgCDgpK3gpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkqCDgpKbgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiLgpLjgpL/gpK7gpJXgpL7gpLDgpY3gpKEg4KSo4KS/4KSV4KS+4KSy4KS+IOCkl+Ckr+CkviI8L3N0cmluZz4KQEAgLTEyNDcsNyArMTI1Niw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiJVU0Ig4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkrOCkguCkpiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIxOTcwMzc0ODk4MjYzMDYzODM2Ij4iVVNCIOCkuOCkguCkl+CljeCksOCkueCkoyDgpKzgpILgpKYg4KSV4KSw4KSo4KWHIOCkruClh+CkgiDgpJXgpYvgpIgg4KS44KSu4KS44KWN4oCN4KSv4KS+IOCkueClgeCkiCDgpKXgpYAuIOCknOCkvuCkguCkmuClh+CkgiDgpJXgpL8g4KSG4KSq4KSo4KWHIFVTQiDgpLngpYvgpLjgpY3igI3gpJ8g4KSF4KSo4KSu4KS+4KSJ4KSC4KSfIOCkleCkv+Ckr+CkviDgpLngpYgg4KSv4KS+IOCkqOCkueClgOCkgiwg4KSk4KSsIOCkquClgeCkqDog4KSq4KWN4KSw4KSv4KS+4KS4IOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiJVU0Ig4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkmuCkvuCksuClgiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGV4dCIgbXNnaWQ9IjUxMDA0Mjg3NTcxMDc0Njk0NTQiPiLgpK/gpKbgpL8g4KSG4KSqIFVTQiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSa4KS+4KSy4KWCIOCkleCksOCkpOClhyDgpLngpYjgpIIsIOCkpOCliyDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpL/gpI8g4KSc4KS+IOCksOCkueClhyDgpJXgpYHgpJsg4KSP4KSq4KWN4oCN4KS4IOCksOClgeCklSDgpJzgpL7gpI/gpILgpJfgpYcg4KSU4KSwIOCkueCliyDgpLjgpJXgpKTgpL4g4KS54KWIIOCkleCkvyDgpLXgpYcg4KSk4KSsIOCkpOCklSDgpIXgpKjgpYHgpKrgpLLgpKzgpY3igI3gpKcg4KSw4KS54KWH4KSCIOCknOCkrCDgpKTgpJUg4KSV4KS/IOCkhuCkqiBVU0Ig4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkrOCkguCkpiDgpKjgpLngpYDgpIIg4KSV4KSwIOCkpuClh+CkpOClhy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGV4dCIgbXNnaWQ9IjUxMDA0Mjg3NTcxMDc0Njk0NTQiPiLgpK/gpKbgpL8g4KSG4KSqIFVTQiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSa4KS+4KSy4KWCIOCkleCksOCkpOClhyDgpLngpYjgpIIsIOCkpOCliyDgpIbgpKrgpJXgpYcg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpL/gpI8g4KSc4KS+IOCksOCkueClhyDgpJXgpYHgpJsg4KSQ4KSq4KWN4KS4IOCksOClgeCklSDgpJzgpL7gpI/gpILgpJfgpYcg4KSU4KSwIOCkueCliyDgpLjgpJXgpKTgpL4g4KS54KWIIOCkleCkvyDgpLXgpYcg4KSk4KSsIOCkpOCklSDgpIXgpKjgpYHgpKrgpLLgpKzgpY3igI3gpKcg4KSw4KS54KWH4KSCIOCknOCkrCDgpKTgpJUg4KSV4KS/IOCkhuCkqiBVU0Ig4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkrOCkguCkpiDgpKjgpLngpYDgpIIg4KSV4KSwIOCkpuClh+CkpOClhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkbGdfZXJyb3JfdGl0bGUiIG1zZ2lkPSI3MzIzNjU4NDY5NjI2NTE0MjA3Ij4iVVNCIOCkleCkvuCksOCljeCkr+CkteCkvuCkueClgCDgpLXgpL/gpKvgpLIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkbGdfb2siIG1zZ2lkPSI3Mzc2OTUzMTY3MDM5ODY1NzAxIj4i4KSg4KWA4KSVIOCkueCliCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9tdHBfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzY5OTkxMzA5NzM5MTU1MDM5NCI+IuCkleCkv+CkuOClgCDgpK7gpYDgpKHgpL/gpK/gpL4g4KSJ4KSq4KSV4KSw4KSjIOCkleClhyDgpLDgpYLgpKog4KSu4KWH4KSCIOCkleCkqOClh+CkleCljeKAjeCknyDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+Ijwvc3RyaW5nPgpAQCAtMTI5NiwxNSArMTMwNSwxNSBAQAogICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzODcwMTIwNjUyOTgzNjU5NjQxIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkqOCkv+CkleCkvuCksuCkviDgpJfgpK/gpL4uIOCkj+CklSDgpKjgpK/gpL4g4KS44KSu4KWN4oCN4KSu4KS/4KSy4KS/4KSkIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9saXN0X2VtcHR5IiBtc2dpZD0iMTY3NTM4ODMzMDc4Njg0MTA2NiI+IuCkleCli+CkiCDgpK7gpL/gpLLgpKTgpYAt4KSc4KWB4KSy4KSk4KWAIOCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpKjgpLngpYDgpIIg4KSu4KS/4KSy4KWALiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9Ijg3ODczNTIwNzQzMjY3NDg4OTIiPiLgpJjgpJ/gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkhuCkguCkleCkoeCkvOCli+CkgiDgpJXgpYAg4KSo4KSIIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpL7gpI/gpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wa2dVc2FnZVN0YXRzIiBtc2dpZD0iMTEwNjYxMjQyNDI1NDI3NzYzMCI+IuCkj+CkquCljeKAjeCkuCDgpJXgpYsg4KSY4KSf4KSVIOCkieCkquCkr+Cli+CklyDgpJXgpYcg4KS44KSC4KSV4KSy4KS/4KSkIOCkhuCkguCkleCkoeCkvOClhyDgpLjgpILgpLbgpYvgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9IjExMDY2MTI0MjQyNTQyNzc2MzAiPiLgpJDgpKrgpY3gpLgg4KSV4KWLIOCkmOCkn+CklSDgpIngpKrgpK/gpYvgpJcg4KSV4KWHIOCkuOCkguCkleCksuCkv+CkpCDgpIbgpILgpJXgpKHgpLzgpYcg4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzQxMDM2MzExMjExNDA2NjkyIj4i4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkleClgCDgpKrgpY3gpLDgpKTgpL/gpLLgpL/gpKrgpL8g4KSs4KSo4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzkwNjk3MTI0Mjg4MzE3ODMxIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSV4KWAIOCkquCljeCksOCkpOCkv+CksuCkv+CkquCkvyDgpKzgpKjgpL7gpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKHgpL/gpKvgpLzgpYngpLLgpY3gpJ8g4KSV4KSC4KSf4KWH4KSo4KSwIOCkuOClh+CkteCkviDgpLbgpYHgpLDgpYIg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkuOCkvuCkruCkvuCkqOCljeKAjeCkryDgpI/gpKrgpY3igI3gpLgg4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKjgpLngpYDgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzkwNjk3MTI0Mjg4MzE3ODMxIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkleClgCDgpKrgpY3gpLDgpKTgpL/gpLLgpL/gpKrgpL8g4KSs4KSo4KS+4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSh4KS/4KSr4KS84KWJ4KSy4KWN4KSfIOCkleCkguCkn+Clh+CkqOCksCDgpLjgpYfgpLXgpL4g4KS24KWB4KSw4KWCIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK8g4KSQ4KSq4KWN4KS4IOCkpuCljeCkteCkvuCksOCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSo4KS54KWA4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iMTY0MjAyNDQ1NTc1MDQxNDY5NCI+IuCkruClgOCkoeCkv+Ckr+CkviDgpIbgpIngpJ/gpKrgpYHgpJ8g4KSV4KWLIOCksOClguCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSI0OTMyODE4NzQ5NTQ3MjQ0MzQ2Ij4i4KSP4KSq4KWN4KS4IOCkleCliyDgpK7gpYDgpKHgpL/gpK/gpL4g4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliyDgpIXgpKjgpY3gpK8g4KSs4KS+4KS54KSw4KWAIOCkieCkquCkleCksOCko+Cli+CkgiDgpKrgpLAg4KSw4KWC4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JvdXRlX21lZGlhX291dHB1dCIgbXNnaWQ9IjQ5MzI4MTg3NDk1NDcyNDQzNDYiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpK7gpYDgpKHgpL/gpK/gpL4g4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliyDgpIXgpKjgpY3gpK8g4KSs4KS+4KS54KSw4KWAIOCkieCkquCkleCksOCko+Cli+CkgiDgpKrgpLAg4KSw4KWC4KSfIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNzU2NTU1MjIzNzk3NzgxNTA0NyI+IuCkleClgOCkl+CkvuCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkj+CkleCljeCkuOClh+CkuCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI1ODY2MjQ1NDg0MzAzMjg1NzYyIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpJXgpYDgpJfgpL7gpLDgpY3gpKEg4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkuOCkguCkl+CljeCksOCkueCkoyDgpI/gpJXgpY3gpLjgpYfgpLgg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOClgCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNTg2NjI0NTQ4NDMwMzI4NTc2MiI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkleClgOCkl+CkvuCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KS44KSC4KSX4KWN4KSw4KS54KSjIOCkj+CkleCljeCkuOClh+CkuCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIxNzIxOTUxODQyMDc4MjgzODciPiLgpJXgpYDgpJfgpL7gpLDgpY3gpKEg4KSm4KS/4KSW4KS+4KSo4KS+IOCklOCksCDgpJvgpL/gpKrgpL7gpKjgpL4g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIzMDQzNzMyMjkwNTE4NjI5MDYxIj4i4KSP4KSq4KWN4KS4IOCkleCliyDgpJXgpYDgpJfgpL7gpLDgpY3gpKEg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIzMDQzNzMyMjkwNTE4NjI5MDYxIj4i4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSV4KWA4KSX4KS+4KSw4KWN4KShIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiLgpJzgpLzgpYLgpK4g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KSjIOCkleClhyDgpLLgpL/gpI8g4KSm4KWLIOCkrOCkvuCksCDgpLjgpY3gpKrgpLDgpY3gpLYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2FkZ2V0X2hvc3RfZXJyb3JfaW5mbGF0aW5nIiBtc2dpZD0iNDg4MjAwNDMxNDkwNjQ2NjE2MiI+IuCkteCkv+CknOClh+CknyDgpKjgpLngpYDgpIIg4KSc4KWL4KSh4KS84KS+IOCknOCkviDgpLjgpJXgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9nbyIgbXNnaWQ9IjgzMjA4NDU2NTE3MzczNjkwMjciPiLgpJzgpL7gpI/gpIIiPC9zdHJpbmc+CkBAIC0xMzE2LDcgKzEzMjUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kZWZhdWx0IiBtc2dpZD0iMjg0MDkyMTg4NTU1ODA0NTcyMSI+IuCkqOCkv+Ckt+CljeKAjeCkquCkvuCkpuCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaWFsX251bWJlcl91c2luZyIgbXNnaWQ9IjU3ODkxNzY0MjUxNjc1NzM1ODYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz4g4KSV4KWHIOCkieCkquCkr+Cli+CklyDgpKbgpY3gpLXgpL7gpLDgpL4gXG4g4KSo4KSC4KSs4KSwIOCkoeCkvuCkr+CksiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfY29udGFjdF91c2luZyIgbXNnaWQ9IjQ5NDc0MDUyMjY3ODgxMDQ1MzgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz4g4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpJXgpYdcbiDgpLjgpILgpKrgpLDgpY3gpJUg4KSs4KSo4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2hlYWRlciIgbXNnaWQ9IjIxMDYxMDM4MTc5Mzc4NTk2NjIiPiLgpKjgpL/gpK7gpY3igI3gpKgg4KSP4KSVIOCkr+CkviDgpIXgpKfgpL/gpJUg4KSP4KSq4KWN4oCN4KS4IOCkheCkreClgCDgpJTgpLAg4KSt4KS14KS/4KS34KWN4oCN4KSvIOCkruClh+CkgiDgpIbgpKrgpJXgpYcg4KSW4KS+4KSk4KWHIOCkruClh+CkgiDgpKrgpLngpYHgpILgpJog4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyDgpJXgpL4g4KSF4KSo4KWB4KSw4KWL4KSnIOCkleCksOCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2hlYWRlciIgbXNnaWQ9IjIxMDYxMDM4MTc5Mzc4NTk2NjIiPiLgpKjgpL/gpK7gpY3igI3gpKgg4KSP4KSVIOCkr+CkviDgpIXgpKfgpL/gpJUg4KSQ4KSq4KWN4KS4IOCkheCkreClgCDgpJTgpLAg4KSt4KS14KS/4KS34KWN4oCN4KSvIOCkruClh+CkgiDgpIbgpKrgpJXgpYcg4KSW4KS+4KSk4KWHIOCkruClh+CkgiDgpKrgpLngpYHgpILgpJog4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyDgpJXgpL4g4KSF4KSo4KWB4KSw4KWL4KSnIOCkleCksOCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2Zvb3RlciIgbXNnaWQ9IjMxMjUyMTEzNDMzNzkzNzY1NjEiPiLgpJXgpY3gpK/gpL4g4KSG4KSqIOCkh+CkuCDgpIXgpKjgpYHgpLDgpYvgpKcg4KSV4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpKjgpL4g4KSa4KS+4KS54KSk4KWHIOCkueCliOCkgj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncmFudF9wZXJtaXNzaW9uc19oZWFkZXJfdGV4dCIgbXNnaWQ9IjY4NzQ0OTc0MDgyMDE4MjY3MDgiPiLgpKrgpLngpYHgpILgpJog4KSF4KSo4KWB4KSw4KWL4KSnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWxsb3ciIG1zZ2lkPSI3MjI1OTQ4ODExMjk2Mzg2NTUxIj4i4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+CkgiI8L3N0cmluZz4KQEAgLTE0MTMsMTkgKzE0MjIsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+Ik1vZGUgY2hhbmdlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IuCkleCli+CkiCDgpI/gpKrgpY3igI3gpLgg4KSa4KWB4KSo4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i4KSV4KWL4KSIIOCkkOCkquCljeCkuCDgpJrgpYHgpKjgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IOCkleCliyDgpLLgpYngpKjgpY3gpJog4KSo4KS54KWA4KSCIOCkleCkv+Ckr+CkviDgpJzgpL4g4KS44KSV4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i4KSH4KS44KSV4KWHIOCkuOCkvuCkpSDgpLjgpL7gpJ3gpL4g4KSV4KSw4KWH4KSCOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IOCkleClhyDgpLjgpL7gpKUg4KS44KS+4KSd4KS+IOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLgpLjgpY3gpLLgpL7gpIfgpKHgpL/gpILgpJcg4KS54KWI4KSC4KSh4KSyLiDgpLjgpY3gpKrgpLDgpY3gpLYg4KSV4KSw4KSV4KWHIOCksOCkluClh+Ckgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOCkleClhyDgpLLgpL/gpI8g4KSK4KSq4KSwIOCkuOCljeKAjeCksuCkvuCkh+CkoSDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOCkleClhyDgpLLgpL/gpI8g4KSo4KWA4KSa4KWHIOCkuOCljeKAjeCksuCkvuCkh+CkoSDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOCkleClhyDgpLLgpL/gpI8g4KSs4KS+4KSP4KSCIOCkuOCljeKAjeCksuCkvuCkh+CkoSDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgpJXgpYcg4KSy4KS/4KSPIOCkpuCkvuCkj+CkgiDgpLjgpY3igI3gpLLgpL7gpIfgpKEg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i4KSF4KSo4KSy4KWJ4KSVIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLgpJXgpYjgpK7gpLDgpL4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i4KSu4KWM4KSoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IuCkp+CljeKAjeCkteCkqOCkvyDgpJrgpL7gpLLgpYIg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLgpJbgpYvgpJzgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KWN4oCN4KS14KS+4KSH4KSqIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4i4KSs4KWL4KSy4KWAIOCkl+CkiOCkgiDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSV4KWB4KSC4KSc4KS/4KSv4KS+4KSCIOCkuOClgeCkqOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkueClh+CkoeCkuOClh+CknyDgpKrgpY3igI3gpLLgpJcg4KSH4KSoIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLgpKzgpL/gpILgpKbgpYEuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i4KS44KS/4KS44KWN4oCN4KSf4KSuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGgg4KSR4KSh4KS/4KSv4KWLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLgpLXgpL7gpK/gpLDgpLLgpYfgpLgg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IuCkquClguCksOCljeCkoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IuCkruClgOCkoeCkv+Ckr+CkviDgpIbgpIngpJ/gpKrgpYHgpJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IuCkieCkquCkleCksOCkoyDgpLjgpYcg4KSV4KSo4KWH4KSV4KWN4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IuCkuOCljeCkleCljeCksOClgOCkqCDgpJXgpYsg4KSJ4KSq4KSV4KSw4KSjIOCkruClh+CkgiDgpJXgpL7gpLjgpY3gpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i4KSJ4KSq4KSV4KSw4KSjIOCkluCli+CknOClhyDgpJzgpL4g4KSw4KS54KWHIOCkueCliOCkguKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IuCkuOClh+Ckn+Ckv+CkguCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiLgpKHgpL/gpLjgpY3gpJXgpKjgpYfgpJXgpY3gpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IuCkuOCljeKAjeCkleCliOCkqCDgpJXgpLAg4KSw4KS54KS+IOCkueCliC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IuCkleCkqOClh+CkleCljeCknyDgpLngpYsg4KSw4KS54KS+IOCkueCliC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i4KSJ4KSq4KSy4KSs4KWN4KSnIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4i4KST4KS14KSw4KSy4KWHICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwg4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLgpLXgpL7gpK/gpLDgpLLgpYfgpLgg4KSh4KS/4KS44KWN4KSq4KWN4KSy4KWHIOCkleCkqOClh+CkleCljeCknyDgpLngpYgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i4KSv4KS5IOCkuOCljeCkleCljeCksOClgOCkqCDgpIXgpKjgpY3gpK8g4KSJ4KSq4KSV4KSw4KSjIOCkquCksCDgpKbgpL/gpJbgpL7gpIgg4KSm4KWHIOCksOCkueClgCDgpLngpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4i4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkleCkvuCkuOCljeCknyDgpLngpYsg4KSw4KS54KWAIOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiDgpLjgpYcg4KSV4KSo4KWH4KSV4KWN4KSfIOCkueCliyDgpLDgpLngpL4g4KS54KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4i4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkleCkvuCkuOCljeCknyDgpLngpYsg4KSw4KS54KWAIOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+IOCkuOClhyDgpJXgpKjgpYfgpJXgpY3gpJ8g4KS54KWIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IuCkoeCkv+CkuOCljeCkleCkqOClh+CkleCljeCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IuCkhuCkquCkvuCkpOCkleCkvuCksuClgOCkqCDgpJXgpYngpLIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLgpIbgpJXgpL7gpLAg4KSt4KWC4KSyIOCkl+CkjyI8L3N0cmluZz4KQEAgLTE1NDMsOCArMTU1MCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IuCkteCksOCljeCkpOCkruCkvuCkqCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im93bmVyX25hbWUiIG1zZ2lkPSIyNzE2NzU1NDYwMzc2MDI4MTU0Ij4i4KS44KWN4KS14KS+4KSu4KWAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXJyb3JfbWVzc2FnZV90aXRsZSIgbXNnaWQ9IjQ1MTAzNzMwODMwODI1MDAxOTUiPiLgpKTgpY3gpLDgpYHgpJ/gpL8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbm9fcmVzdHJpY3RlZF9hY2NvdW50cyIgbXNnaWQ9IjU3Mzk0NjMyNDk2NzM3Mjc3MzYiPiLgpK/gpLkg4KSP4KSq4KWN4KS4IOCkquCljeCksOCkpOCkv+CkrOCkguCkp+Ckv+CkpCDgpKrgpY3gpLDgpYvgpKvgpLzgpL7gpIfgpLIg4KSV4KWHIOCkluCkvuCkpOCli+CkgiDgpJXgpL4g4KS44KSu4KSw4KWN4KSl4KSoIOCkqOCkueClgOCkgiDgpJXgpLDgpKTgpL4g4KS54KWIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX25vdF9mb3VuZCIgbXNnaWQ9IjM0MjkxNDE4NTM0OTg5MjczNzkiPiLgpIfgpLgg4KSV4KS+4KSw4KWN4KSv4KS14KS+4KS54KWAIOCkleCliyDgpKrgpY3gpLDgpKzgpILgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KWL4KSIIOCkj+CkquCljeCkuCDgpKjgpLngpYDgpIIg4KSu4KS/4KSy4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX25vX3Jlc3RyaWN0ZWRfYWNjb3VudHMiIG1zZ2lkPSI1NzM5NDYzMjQ5NjczNzI3NzM2Ij4i4KSv4KS5IOCkkOCkquCljeCkuCAg4KSq4KWN4KSw4KSk4KS/4KSs4KSC4KSn4KS/4KSkIOCkquCljeCksOCli+Ckq+CkvOCkvuCkh+CksiDgpJXgpYcg4KSW4KS+4KSk4KWL4KSCIOCkleCkviDgpLjgpK7gpLDgpY3gpKXgpKgg4KSo4KS54KWA4KSCIOCkleCksOCkpOCkviDgpLngpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbm90X2ZvdW5kIiBtc2dpZD0iMzQyOTE0MTg1MzQ5ODkyNzM3OSI+IuCkh+CkuCDgpJXgpL7gpLDgpY3gpK/gpLXgpL7gpLngpYAg4KSV4KWLIOCkquCljeCksOCkrOCkguCkp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpJXgpYvgpIgg4KSQ4KSq4KWN4KS4ICDgpKjgpLngpYDgpIIg4KSu4KS/4KSy4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmV2b2tlIiBtc2dpZD0iNTQwNDQ3OTE4NTIyODI3MTU4NiI+IuCkqOCkv+CksOCkuOCljeKAjeCkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfaXNvX2EwIiBtc2dpZD0iMTk5NDQ3NDI1MjkzMTI5NDE3MiI+IklTTyBBMCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9pc29fYTEiIG1zZ2lkPSIzMzMzMDYwNDIxNTI5NzkxNzg2Ij4iSVNPIEExIjwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjU3LDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLgpKzgpL7gpKYg4KSu4KWH4KSCIOCkquClgeCkqOCkgyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IuCkquClguCksOCljeCkoyDgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KS44KWHIOCkrOCkvuCkueCksCDgpIbgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpIrgpKrgpLAg4KS44KWHIOCkqOClgOCkmuClhyDgpLjgpY3gpLXgpL7gpIfgpKog4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i4KSq4KWC4KSw4KWN4KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4i4KSY4KSC4KSf4KWLIOCkleCkviDgpJrgpJXgpY3gpLDgpL7gpJXgpL7gpLAg4KS44KWN4KSy4KS+4KSH4KSh4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLgpK7gpL/gpKjgpJ/gpYvgpIIg4KSV4KS+IOCkmuCkleCljeCksOCkvuCkleCkvuCksCDgpLjgpY3gpLLgpL7gpIfgpKHgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4i4KSY4KSC4KSf4KWHIOCkmuClgeCkqOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IuCkruCkv+CkqOCknyDgpJrgpYHgpKjgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IuCkpuCkv+CkqOCli+CkgiDgpJXgpYAg4KSu4KS+4KS5IOCkl+CljeCksOCkv+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IuCkteCksOCljeCktyDgpJXgpYAg4KS44KWC4KSa4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLgpK7gpL7gpLkg4KSU4KSwIOCkpuCkv+CkqCDgpJrgpYHgpKjgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLgpLXgpLDgpY3gpLcg4KSa4KWB4KSo4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiDgpJrgpK/gpKjgpL/gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDgpJXgpYsg4KS54KSf4KS+IOCkpuCkv+Ckr+CkviDgpJfgpK/gpL4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCmluZGV4IDM3ZGMxNDEuLjdjMjI2MWUgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iVXBpxaFpdGUgUFVLIGtvamkgc2Ugc2FzdG9qaSBvZCBiYXJlbSA4IGJyb2pldmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlZhxaFhIGplIFNJTSBrYXJ0aWNhIHpha2xqdcSNYW5hIFBVSy1vbS4gVW5lc2l0ZSBQVUsga8O0ZCBkYSBiaXN0ZSBqZSBvdGtsanXEjWFsaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJVbmVzaXRlIFBVSzIgZGEgYmlzdGUgb2RibG9raXJhbGkgU0lNIGthcnRpY3UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iTmV1c3BqZcWhbm87IG9tb2d1xIdpIHpha2xqdcSNYXZhbmplIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IkltYXRlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBva3XFoWFqIHByaWplIHpha2xqdcSNYXZhbmphIFNJTSBrYXJ0aWNlLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IkltYXRlIGpvxaEgbmVrb2xpa28gcHJlb3N0YWxpaCBwb2t1xaFhamEgKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPikgcHJpamUgemFrbGp1xI1hdmFuamEgU0lNIGthcnRpY2UuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJRCBkb2xhem5vZyBwb3ppdmF0ZWxqYSI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iTm9zaXRlbGp1IG9tb2d1xId1amUgdmV6YW5qZSB1eiBzdcSNZWxqZSBuYWp2acWhZSByYXppbmUgVlBOIHVzbHVnZS4gTmUgYmkgc21qZWxvIGJpdGkgcG90cmVibm8gemEgbm9ybWFsbmUgYXBsaWthY2lqZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4icG92ZXphbm8gcyBwb3phZGluc2tvbSBzbGlrb20iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+Ik5vc2l0ZWxqdSBvbW9ndcSHdWplIHBvdmV6aXZhbmplIHNhIHN1xI1lbGplbSBwb3phZGluc2tlIHNsaWtlIG5hanZpxaFlIHJhemluZS4gTmUgYmkgc21qZWxvIGJpdGkgcG90cmVibm8gemEgbm9ybWFsbmUgYXBsaWthY2lqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+InZlemFuamUgdXogdWRhbGplbmkgemFzbG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iTm9zaXRlbGp1IG9tb2d1xId1amUgdmV6YW5qZSB1emEgc3XEjWVsamUgbmFqdmnFoWUgcmF6aW5lIHVkYWxqZW5vZyB6YXNsb25hLiBOZSBiaSBzbWplbG8gYml0aSBwb3RyZWJubyB6YSBub3JtYWxuZSBhcGxpa2FjaWplLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+InZlemFuamUgbmEgdXNsdWd1IHdpZGdldGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iTm9zaXRlbGp1IG9tb2d1xId1amUgdmV6YW5qZSB1eiBzdcSNZWxqZSBuYWp2acWhZSByYXppbmUgdXNsdWdlIHdpZGdldGEuIE5lIGJpIHNtamVsbyBiaXRpIHBvdHJlYm5vIHphIG5vcm1hbG5lIGFwbGlrYWNpamUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaW50ZXJha2NpamEgcyBhZG1pbmlzdHJhdG9yb20gdXJlxJFhamEiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IkFwbGlrYWNpamkgb21vZ3XEh3VqZSB1cG90cmVidSB6bmHEjWFqa2kgbmlza2UgcmF6aW5lIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IsSNaXRhbmplIG1lxJF1c3ByZW1uaWthIG9rdmlyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJBcGxpa2FjaWppIG9tb2d1xId1amUgxI1pdGFuamUgc2FkcsW+YWphIG1lxJF1c3ByZW1uaWthIG9rdmlyYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJwcmlzdHVwaSBJbnB1dEZsaW5nZXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkRvcHXFoXRhIGFwbGlrYWNpamkgdXBvdHJlYnUgem5hxI1hamtpIG5pc2tlIHJhemluZSBJbnB1dEZsaW5nZXJhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ia29uZmlndXJpcmFqIFdpZmkgemFzbG9uZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+Ik9tb2d1xId1amUgYXBsaWthY2lqaSBrb25maWd1cmlyYW5qZSBpIHBvdmV6aXZhbmplIHMgV2ktRmkgemFzbG9uaW1hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4idXByYXZsamFqIFdpZmkgemFzbG9uaW1hIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+Ik9kYWJpciBhcGxpa2FjaWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iTmlqZSBtb2d1xIdlIHBva3JlbnV0aSBhcGxpa2FjaWp1IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJEaWplbGplbmplIHNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkRpamVsaSBzIGFwbGlrYWNpam9tIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iS2xpem5hIHJ1xI1rYS4gRG9kaXJuaXRlIGkgZHLFvml0ZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iS2xpem5pdGUgcHJlbWEgZ29yZSB6YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iS2xpem5pdGUgcHJlbWEgZG9samUgemEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IktsaXpuaXRlIGxpamV2byB6YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IktsaXpuaXRlIGRlc25vIHphIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Ik90a2xqdcSNYWoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iRm90b2FwYXJhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJCZcWhdW1ubyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJadnVrIGplIHVrbGp1xI1lbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iUHJldHJhxb5pdmFuamUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJQcmlqZcSRaXRlIHByc3RpbWEgZGEgYmlzdGUgb3RrbGp1xI1hbGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IlByaWtsanXEjWl0ZSBzbHXFoWFsaWNlIGtha28gYmlzdGUgxI11bGkgaXpnb3ZhcmFuamUgdGlwa2kgemFwb3JrZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJUb8SNa2EuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3VzdGF2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGggenZ1ayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iQmXFvmnEjW5pIHByaWtheiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJHb3Rvdm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNZWRpanNraSBpemxheiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iUG92ZXppdmFuamUgcyB1cmXEkWFqZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJFbWl0aXJhbmplIHphc2xvbmEgbmEgdXJlxJFhaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IlRyYcW+ZW5qZSB1cmXEkWFqYeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IlBvc3RhdmtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IlByZWtpbmkgdmV6dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJTa2VuaXJhbmplLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iUG92ZXppdmFuamUuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkRvc3R1cG5vIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iUHJla2xhcGFuamUgYnIuIDx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+IHggPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHNpZ3Vybm8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkJlxb5pxI1uaSBqZSBwcmlrYXogcG92ZXphbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJPdmFqIHNlIHphc2xvbiBwcmlrYXp1amUgbmEgbmVrb20gZHJ1Z29tIHVyZcSRYWp1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IkVtaXRpcmFuamUgemFzbG9uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IlBvdmV6aXZhbmplIHNhIHphc2xvbm9tIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IkVtaXRpcmFuamUgemFzbG9uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iUG92ZXphbiBzYSB6YXNsb25vbSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iSXNrbGp1xI1pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJIaXRhbiBwb3ppdiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IlphYm9yYXZpbGkgc3RlIG9icmF6YWMiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NTcsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlBva3XFoWFqdGUgcG9ub3ZvIGthc25pamUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iUHJpamXEkWl0ZSBwcnN0b20gcyB2cmhhIHByZW1hIGRvbGplIHphIGl6bGF6IGl6IGNpamVsb2cgemFzbG9uYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkdvdG92byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IktydcW+bmkga2xpemHEjSBzYXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJLcnXFvm5pIGtsaXphxI0gbWludXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+Ik9kYWJlcml0ZSBzYXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iT2RhYmVyaXRlIG1pbnV0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iTXJlxb5hIGRhbmEgdSBtamVzZWN1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iUG9waXMgZ29kaW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJPZGFiZXJpdGUgbWplc2VjIGkgZGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iT2RhYmVyaXRlIGdvZGludSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiJPZGFicmFuYSBqZSBzdGF2a2EgPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iSXpicmlzYW4gamUgYnJvaiA8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKaW5kZXggNGFlNTkzOC4uOGQzZWUzMSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiI4IHN6w6FtamVnecWxIHZhZ3kgaG9zc3phYmIgUFVLIGvDs2RvdCDDrXJqb24gYmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IkEgU0lNLWvDoXJ0eWEgbGUgdmFuIHrDoXJ2YSBhIFBVSy1rw7NkZGFsLiBBIGZlbG9sZMOhc2hveiBhZGphIG1lZyBhIFBVSy1rw7Nkb3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iQSBTSU0ta8OhcnR5YSBmZWxvbGTDoXPDoWhveiBhZGphIG1lZyBhIFBVSzIta8OzZG90LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IlNpa2VydGVsZW4sIGVuZ2Vkw6lseWV6emUgYSBTSU0tL1JVSU0tesOhcm9sw6FzdC4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJNw6lnIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwcsOzYsOhbGtvesOhc2EgdmFuLCBtaWVsxZF0dCB6w6Fyb2xqdWsgYSBTSU0ga8OhcnR5w6F0LiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+Ik3DqWcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHByw7Niw6Fsa296w6FzYSB2YW4sIG1pZWzFkXR0IHrDoXJvbGp1ayBhIFNJTSBrw6FydHnDoXQuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJCZcOpcmtlesWRIGjDrXbDs2F6b25vc8OtdMOzIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJMZWhldMWRdsOpIHRlc3ppIGEgaGFzem7DoWzDsyBzesOhbcOhcmEsIGhvZ3kgY3NhdGxha296em9uIGVneSBWUE4tc3pvbGfDoWx0YXTDoXMgbGVnZmVsc8WRIHN6aW50xbEga2V6ZWzFkWZlbMO8bGV0w6loZXouIEEgbm9ybcOhbCBhbGthbG1hesOhc29rbmFrIGVycmUgc29oYSBuaW5jcyBzesO8a3PDqWdlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiLDtnNzemVrYXBjc29sw6FzIGjDoXR0w6lya8OpcHBlbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iTGVoZXTFkXbDqSB0ZXN6aSwgaG9neSBhIHR1bGFqZG9ub3Mga8O2dGVsZXrFkXbDqSB0ZWd5ZSBlZ3kgaMOhdHTDqXJrw6lwIGxlZ2ZlbHPFkSBzemludMWxIGZlbMO8bGV0w6l0LiBBIG5vcm3DoWwgYWxrYWxtYXrDoXNva25hayBlcnJlIHNvaGEgbmluY3Mgc3rDvGtzw6lnZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+ImNzYXRsYWtvesOhcyBlZ3kgdMOhdm9saSBraWplbHrFkWjDtnoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJMZWhldMWRdsOpIHRlc3ppIGEgaGFzem7DoWzDsyBzesOhbcOhcmEsIGhvZ3kgY3NhdGxha296em9uIGVneSB0w6F2b2xpIGtpamVsesWRIGxlZ2ZlbHPFkSBzemludMWxIGtlemVsxZFmZWzDvGxldMOpaGV6LiBBIG5vcm3DoWwgYWxrYWxtYXrDoXNva25hayBlcnJlIHNvaGEgbmluY3Mgc3rDvGtzw6lnw7xrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ImNzYXRsYWtvesOhcyBtb2R1bHN6b2xnw6FsdGF0w6FzaG96Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkxlaGV0xZF2w6kgdGVzemkgYSBoYXN6bsOhbMOzIHN6w6Ftw6FyYSwgaG9neSBjc2F0bGFrb3p6b24gZWd5IG1vZHVsc3pvbGfDoWx0YXTDoXMgbGVnZmVsc8WRIHN6aW50xbEga2V6ZWzFkWZlbMO8bGV0w6loZXouIEEgbm9ybcOhbCBhbGthbG1hesOhc29rbmFrIGVycmUgc29oYSBuaW5jcyBzesO8a3PDqWdlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImF6IGVzemvDtnprZXplbMWRIGhhc3puw6FsYXRhIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJMZWhldMWRdsOpIHRlc3ppIGF6IGFsa2FsbWF6w6FzIHN6w6Ftw6FyYSBhIFN1cmZhY2VGbGluZ2VyIGFsYWNzb255IHN6aW50xbEgZnVua2Npw7NrIGhhc3puw6FsYXTDoXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ia2VyZXRwdWZmZXIgb2x2YXPDoXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IkxlaGV0xZF2w6kgdGVzemkgYXogYWxrYWxtYXrDoXMgc3rDoW3DoXJhIGEga2VyZXRwdWZmZXIgdGFydGFsbcOhbmFrIG9sdmFzw6Fzw6F0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImhvenrDoWbDqXLDqXMgYXogSW5wdXRGbGluZ2VyaGV6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkxlaGV0xZF2w6kgdGVzemkgYXogYWxrYWxtYXrDoXMgc3rDoW3DoXJhIGF6IElucHV0RmxpbmdlciBhbGFjc29ueSBzemludMWxIGZ1bmtjacOzayBoYXN6bsOhbGF0w6F0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4iV2ktRmkga2lqZWx6xZFrIGtvbmZpZ3Vyw6Fsw6FzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IkxlaGV0xZF2w6kgdGVzemksIGhvZ3kgYXogYWxrYWxtYXrDoXMgV2ktRmkga2lqZWx6xZFrZXQga29uZmlndXLDoWxqb24sIMOpcyBjc2F0bGFrb3p6b24gaG96esOhanVrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iV2ktRmkga2lqZWx6xZFrIGlyw6FuecOtdMOhc2EiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iVsOhbGFzc3pvbiBraSBlZ3kgYWxrYWxtYXrDoXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iQSh6KSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IGFsa2FsbWF6w6FzdCBpbmTDrXTDoXNhIG5lbSBzaWtlcsO8bHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJNZWdvc3p0w6FzIGEga8O2dmV0a2V6xZF2ZWw6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+Ik9zc3phIG1lZyBhIGvDtnZldGtlesWRIGFsa2FsbWF6w6Fzc2FsOiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IkNzw7pzenRhdGhhdMOzIGZvZ2FudHnDui4gw4lyaW50c2UgbWVnIMOpcyB0YXJ0c2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkEoeikgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IG3FsXZlbGV0aGV6IGNzw7pzenRhc3NhIGZlbGZlbMOpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IkEoeikgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IG3FsXZlbGV0aGV6IGNzw7pzenRhc3NhIGxlZmVsw6kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iQSh6KSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gbcWxdmVsZXRoZXogY3PDunN6dGFzc2EgYmFscmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkEoeikgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IG3FsXZlbGV0aGV6IGNzw7pzenRhc3NhIGpvYmJyYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkZlbG9sZMOhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iTsOpbcOtdMOhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJIYW5nIGJla2FwY3NvbMOhc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IktlcmVzw6lzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iQSBmZWxvbGTDoXPDoWhveiBow7p6emEgdsOpZ2lnIGF6IHVqasOhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iQ3NhdGxha296dGFzc29uIGVneSBmw7xsaGFsbGdhdMOzdCwgaGEgaGFsbGFuaSBzemVyZXRuw6kgYSBqZWxzesOzIGJldMWxaXQgZmVsb2x2YXN2YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJQb250LiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlJlbmRzemVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGggaGFuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iVmV6ZXTDqWsgbsOpbGvDvGxpIGtpamVsesWRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IkvDqXN6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iTcOpZGlha2ltZW5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iQ3NhdGxha296w6FzIGFkb3R0IGVzemvDtnpow7Z6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iS8OpcGVybnnFkSDDoXRrw7xsZMOpc2UgYXogZXN6a8O2enJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iRXN6a8O2emtlcmVzw6lz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iQmXDoWxsw610w6Fzb2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iTGV2w6FsYXN6dMOhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJLZXJlc8Opcy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IkthcGNzb2zDs2TDoXMuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkVsw6lyaGV0xZEiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiI8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+LiBmZWR2w6lueSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz4geCA8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4ga8OpcHBvbnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBiaXp0b25zw6Fnb3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IlZlemV0w6lrIG7DqWxrw7xsaSBraWplbHrFkSBjc2F0bGFrb3p0YXR2YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJFeiBhIGtpamVsesWRIG1lZ2plbGVuw610w6lzdCB2w6lnZXogZWd5IG3DoXNpayBlc3prw7Z6w7ZuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IkvDqXBlcm55xZEgw6F0a8O8bGTDqXNl4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iQ3NhdGxha296w6FzIGEga8O2dmV0a2V6xZFow7Z6OiA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJLw6lwZXJuecWRIMOhdGvDvGxkw6lzZeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iQ3NhdGxha296dmEgYSBrw7Z2ZXRrZXrFkWjDtno6IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJTesOpdGthcGNzb2wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IlNlZ8OpbHlow612w6FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iRWxmZWxlanRldHQgbWludGEiPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTYsMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iUHLDs2LDoWxqYSDDumpyYSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBtw6Fzb2RwZXJjIG3Dumx2YSI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJQcsOzYsOhbGtvenpvbiBrw6lzxZFiYiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJBIHRlbGplcyBrw6lwZXJuecWRcyBuw6l6ZXRixZFsIHZhbMOzIGtpbMOpcMOpc2hleiBow7p6emEgdWpqw6F0IGEgdGV0ZWrDqXTFkWwgbGVmZWzDqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iQSB0ZWxqZXMga8OpcGVybnnFkXMgbsOpemV0YsWRbCB2YWzDsyBraWzDqXDDqXNoZXogaMO6enphIHVqasOhdCBhIGvDqXBlcm55xZEgdGV0ZWrDqXTFkWwgbGVmZWzDqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkvDqXN6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iw5NyYSBrw7ZyIGFsYWvDuiBjc8O6c3prw6FqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iUGVyYyBrw7ZyIGFsYWvDuiBjc8O6c3prw6FqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLDk3JhIGtpdsOhbGFzenTDoXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iUGVyYyBraXbDoWxhc3p0w6FzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iTmFwb2sgaGF2aSBsZW9zenTDoXNiYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLDiXZlayBsaXN0w6FqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iVsOhbGFzc3phIGtpIGEgaMOzbmFwb3Qgw6lzIGEgbmFwb3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJWw6FsYXNzemEga2kgYXogw6l2ZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IGtpdsOhbGFzenR2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+IkEoeikgPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gw6lydMOpayB0w7Zyw7ZsdmUiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKaW5kZXggOTZmZjMxZS4uNzUyMjFhOCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+ItWE1bjWgtW/1oTVodWj1oDVpdaEwqBQVUssINW41oDVtiA4INWv1aHVtCDVodW+1aXVrCDVqdWr1b4g1bjWgtW21as6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+ItWB1aXWgCBTSU0g1oTVodaA1b/VqCBQVUst1bjVviDVr9W41bLVutW+1aHVriDVpzog1YTVuNaC1b/WhNWh1aPWgNWl1oQgUFVLINWv1bjVpNWoINWh1bXVtiDVodW61aHVr9W41bLVutWl1azVuNaCINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4i1YTVuNaC1b/WhNWh1aPWgNWl1oQgUFVLMi3VqGAgU0lNINaE1aHWgNW/1bYg1aHWgNWj1aXVrNWh1aLVodaB1aXVrNW41oIg1bDVodW01aHWgDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiLVgdWh1a3VuNWy1b7VpdaBOiDVhNWr1aHWgdaA1aXWhCBTSU0vUlVJTSDVr9W41bLVutW41oLVtNWoOiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+ItWE1bbVodaBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDWg9W41oDVsdWdINW01avVttW51ocgU0lNLdWrINWh1oDVo9Wl1azVodaD1aHVr9W41oLVtNWoOiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+ItWE1bbVodaBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDWg9W41oDVsdWdINW01avVttW51ocgU0lNLdWrINWh1oDVo9Wl1azVodaD1aHVr9W41oLVtNWoOiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i1YTVuNaC1b/WhNWh1bXVq9W2INWm1aHVttWj1bjVstWrIElEIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1b3VpdaD1aHVr9Wh1bbVodW/1avWgNW41bvVqCDVtNWr1aHVttWh1awgVnBuINWu1aHVvNWh1bXVuNaC1anVtdWh1bYg1b7VpdaA1avVtiDVtNWh1a/VodaA1aTVodWv1asg1avVttW/1aXWgNaG1aXVtdW91avVtjog1Y3VuNW+1bjWgNWh1a/VodW2INWw1aHVvtWl1azVvtWh1a7VttWl1oDVqyDVsNWh1bTVodaAINWl1oDVotaH1acg1bnVutWl1b/WhCDVpyDVodW21bDWgNWh1arVpdW31b8g1azVq9W21as6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ItW01avVodW21aHVrCDVutWh1b3Vv9Wh1bzVq9W2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1b3VpdaD1aHVr9Wh1bbVodW/1avWgNW41bvVqCDVtNWr1aHVttWh1azCoNW61aHVvdW/1aHVvNWrINW+1aXWgNWr1bYg1bTVodWv1aHWgNWk1aHVr9WrINWr1bbVv9Wl1oDWhtWl1bXVvdWr1bY6wqDVjdW41b7VuNaA1aHVr9Wh1bYg1bDVodW+1aXVrNW+1aHVrtW21aXWgNWrINWw1aHVtNWh1oAg1aXWgNWi1ofVp8Kg1bnVutWl1b/WhCDVpyDVodW21bDWgNWh1arVpdW31b8g1azVq9W21as6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLVtNWr1aHVttWh1awg1bDVpdW81aHVr9WhINWn1a/WgNWh1bbVq9W2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i1LnVuNaC1bXVrCDVpyDVv9Wh1azVq9W9INW91aXWg9Wh1a/VodW21aHVv9Wr1oDVuNW71agg1bTVq9Wh1bbVodWsINWw1aXVvNWh1a/VoSDVp9Wv1oDVodW21asg1b7VpdaA1avVtiDVtNWh1a/VodaA1aTVodWv1asg1avVttW/1aXWgNaG1aXVtdW91avVtjog1Y3VuNW+1bjWgNWh1a/VodW2INWu1oDVodWj1oDVpdaA1asg1bDVodW01aHWgCDVpdaA1aLWh9WnINW51brVpdW/1oQg1acg1aHVttWw1oDVodWq1aXVt9W/INWs1avVttWrOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ItW01avVodW21aHVrCDVvtWr1bvVpdWpINWu1aHVvNWh1bXVuNaC1anVtdWh1bbVqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1b3VpdaD1aHVr9Wh1bbVodW/1avWgNW41bvVqCDVtNWr1aHVttWh1awg1b7Vq9W71aXVqSDVrtWh1bzVodW11bjWgtWp1bXVodW2INW+1aXWgNWr1bYg1bTVodWv1aHWgNWk1aHVr9WrINWr1bbVv9Wl1oDWhtWl1bXVvdWr1bY6INWN1bjVvtW41oDVodWv1aHVtiDVsNWh1b7VpdWs1b7VodWu1bbVpdaA1asg1bDVodW01aHWgCDVpdaA1aLWh9WnINW51brVpdW/1oQg1acg1aHVttWw1oDVodWq1aXVt9W/INWs1avVttWrOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ItaD1bjVrdWj1bjWgNWu1aHVr9aB1aXVrCDVvdWh1oDWhNWrINWv1aHVvNWh1b7VodaA1bnVqyDVsNWl1b8iPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+ItS51bjWgtW11awg1acg1b/VodWs1avVvSDVsNWh1b7VpdWs1b7VodWu1avVtiDWhdWj1b/VodWj1bjWgNWu1aXVrCBTdXJmYWNlRmxpbmdlciDWgdWh1a7WgCDVtNWh1a/VodaA1aTVodWv1asg1aPVuNaA1a7VodW81bjWgtW11anVttWl1oDVqDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLVr9Wh1oDVpNWh1awg1bfWgNW71aHVttWh1a/VqyDVutWh1bDVttWh1a/VqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1bDVodW+1aXVrNW+1aHVrtWr1bYg1a/VodaA1aTVodWsINW31oDVu9Wh1bbVodWv1asg1brVodWw1bbVodWv1asg1aLVuNW+1aHVttWk1aHVr9W41oLVqdW11bjWgtW21ag6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4i1bTVuNaC1b/WhCDVo9W41oDVrtWl1awgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+ItS51bjWgtW11awg1acg1b/VodWs1avVvSDVrtaA1aHVo9aA1avVtiDWhdWj1b/VodWj1bjWgNWu1aXVrCBJbnB1dEZsaW5nZXIg1oHVodWu1oAg1bTVodWv1aHWgNWk1aHVr9WrINWj1bjWgNWu1aHVvNW41oLVtdWp1bbVpdaA1ag6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLVr9Wh1oDVo9Wh1b7VuNaA1aXVrCBXaUZpLdWrINaB1bjWgtaB1aHVpNaA1bjWgtW01agiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLUudW41oLVtdWsINWnINW/1aHVrNWr1b0g1bDVodW+1aXVrNW+1aHVrtWr1bYg1a/VodaA1aPVodW+1bjWgNWl1awg1ocg1bTVq9Wh1bbVodWsIFdpRmkg1oHVuNaC1oHVodWk1oDVq9W51bbVpdaA1avVtjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ItWv1aHVvNWh1b7VodaA1aXVrCBXaWZpLdWrINaB1bjWgtaB1aHVpNaA1bjWgtW01agiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+ItWE1bjWgtW/1oQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLUuNW21b/WgNWl1awg1a7WgNWh1aPVq9aAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4i1YnVsNWh1bvVuNWy1b7VpdaBINWj1bjWgNWu1aHWgNWv1aXVrCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+INWu1oDVodWj1avWgNWoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i1Y/VodaA1aHVrtWl1awiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i1YDVodW01oXVo9W/1aHVo9W41oDVrtWl1awgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPi3VqyDVsNWl1b8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i1Y3VodWw1bjVsiDVotW81bbVodWvOiDVgNW61aXVrMKgJmFtcDsg1brVodWw1aXVrDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i1Y3VodWw1aXWgdaA1aXWhCDVvtWl1oDWhyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t1asg1bDVodW01aHWgDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLVjdWh1bDVpdaB1oDVpdaEINaB1aHVriA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t1asg1bDVodW01aHWgDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLVjdWh1bDVpdaB1oDVpdaEINWx1aHVrWAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LdWrINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+ItWN1aHVsNWl1oHWgNWl1oQg1aHVu2AgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LdWrINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLUsdW61aHVr9W41bLVutWl1awiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i1ZbVuNW/1bjVrdaB1avVryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLUvNW41oLVvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLVgdWh1bXVttWoINW01avVodaB1bbVpdWsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLViNaA1bjVttWl1awiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLVjdWh1bDVpdaB1oDVpdaEYCDVodW61aHVr9W41bLVutWl1azVuNaCINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+ItWE1avVodaB1oDVpdaEINWh1a/VodW21bvVodWv1aHVrNW21aXWgNWoYCDVodaA1b/VodW91aHVttW+1bjVsiDVo9Wh1bLVv9W21aHVotWh1bzVqCDVrNW91aXVrNW41oIg1bDVodW01aHWgDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLUv9Wl1b86Ijwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i1YDVodW01aHVr9Wh1oDVoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoLdWrINWx1aHVtdW21aHVttW11bjWgtWpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLUsdW21azVodaAINWn1a/WgNWh1bYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i1L/VodW/1aHWgNW+1aHVriDVpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+ItWE1aXVpNWr1aEg1aHWgNW/1aHVrtW41oLVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i1YTVq9Wh1bbVodWsINW91aHWgNaE1avVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+ItWA1aXVvNWh1oDVsdWh1a/VpdWsINWn1a/WgNWh1bbVqCDVvdWh1oDWhNWrINW+1oDVoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+ItWI1oDVuNW21b7VuNaC1bQg1aXVtiDVvdWh1oDWhNWl1oAuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLUv9Wh1oDVo9Wh1b7VuNaA1bjWgtW01bbVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+ItSx1bbVu9Wh1b/VpdWsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+ItWN1a/VodW21aHVvtW41oDVuNaC1bQuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLVhNWr1aHVttW41oLVtCDVpy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i1YDVodW91aHVttWl1azVqyDVpyI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+ItWO1aXWgNWh1a7VodWu1a8gIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiDVr9W01b4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDVodW21b7Vv9Wh1bbVoyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4i1LHVttWs1aHWgCDWgdW41oLWgdWh1aTWgNW41oLVtNWoINWv1aHVutWh1a/WgdW+1aHVriDVpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLUsdW11b0g1afVr9aA1aHVttWoINaB1bjWgtaB1aHVpNaA1b7VuNaC1bQg1acg1aHVtdWsINW91aHWgNaE1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+ItS31a/WgNWh1bbVqyDVsNWl1bzVodaA1bHVodWv1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4i1YTVq9Wh1bbVuNaC1bQg1acgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LdWr1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLUt9Wv1oDVodW21agg1bDVpdW81aHWgNWx1aHVr9W+1bjWgtW0INWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiLVhNWr1aHWgdW+1aHVriDVpyA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4t1avVtiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLUsdW21bvVodW/1aXVrCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i1LHWgNW/1aHVr9Wh1oDVoyDVq9aA1aHVvtWr1bPVodWv1asg1bDVpdW81aHVrdW41b3VodWm1aHVttWjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i1YTVuNW81aHWgdWl1awg1aXVtCDVvdWt1aXVtNWh1bYiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NTcsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+ItS/1oDVr9Wr1bYg1oPVuNaA1bHVpdaEINW01asg1oPVuNaE1oAg1bjWgtW3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+ItWN1aHVsNWh1bDVodaA1b7VodWu1aXWhCDVvtWl1oDVq9aBINW+1aHWgNWdINWh1bTVotW41bLVu9Wh1a/VodW2INWn1a/WgNWh1bbVq9aBINWk1bjWgtaA1b0g1aPVodWs1bjWgiDVsNWh1bTVodaAOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i1YrVodW/1oDVodW91b8g1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLUutWh1bTVpdaA1asg1ajVttW/1oDVuNaC1anVtdW41oLVtiDVqdW+1aHVv9Wh1a3Vv9Wh1a/Vq9aBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLVkNW41brVpdW21aXWgNWrINWo1bbVv9aA1bjWgtWp1bXVuNaC1bYg1anVvtWh1b/VodWt1b/VodWv1avWgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLUuNW21b/WgNWl1oQg1arVodW01agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLUuNW21b/WgNWl1oQg1oDVuNW61aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i1LHVtNW91aHVqdW+1asg1ajVttW/1oDVuNaC1anVtdWh1bYg1brVodW/1bjWgtWw1aHVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+ItWP1aHWgNWr1bbVpdaA1asg1oHVodW21a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+ItS41bbVv9aA1aXWhCDVodW01avVvdW2INW41oIg1oXWgNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4i1LjVttW/1oDVpdaEINW/1aHWgNWr1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4i1LjVttW/1oDVvtWh1a4g1acgPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+INW/1aHWgNaA1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDVqdWr1b7VqCDVu9W21bvVvtWh1a4g1aciPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCmluZGV4IDQxN2MxOGUuLjRhN2VlOTIgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iS2V0aWsgUFVLIHlhbmcgdGVyZGlyaSBkYXJpIDggYW5na2EgYXRhdSBsZWJpaC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iS2FydHUgU0lNIEFuZGEgZGlrdW5jaSBQVUsuIEtldGlra2FuIGtvZGUgUFVLIHVudHVrIG1lbWJ1a2FueWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iS2V0aWtrYW4gUFVLMiB1bnR1ayBtZW1idWthIGthcnR1IFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IkdhZ2FsLCBha3RpZmthbiBLdW5jaSBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJTaXNhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwZXJjb2JhYW4gc2ViZWx1bSBTSU0gdGVya3VuY2kuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iU2lzYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcGVyY29iYWFuIHNlYmVsdW0gU0lNIHRlcmt1bmNpLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iTm9tb3IgUGVuZWxlcG9uIE1hc3VrIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJNZW5naXppbmthbiBwZW1lZ2FuZyBtZW5naWthdCBhbnRhcm11a2EgdGluZ2thdCB0aW5nZ2kgZGFyaSBzdWF0dSBsYXlhbmFuIFZwbi4gVGlkYWsgcGVybmFoIGRpcGVybHVrYW4gb2xlaCBhcGwgbm9ybWFsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJtZW5naWthdCBrZSB3YWxscGFwZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+Ik1lbmdpemlua2FuIHBlbWVnYW5nIG1lbmdpa2F0IGFudGFybXVrYSB0aW5na2F0IHRpbmdnaSBkYXJpIHN1YXR1IHdhbGxwYXBlci4gVGlkYWsgcGVybmFoIGRpcGVybHVrYW4gb2xlaCBhcGwgbm9ybWFsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4ibWVuZ2lrYXQga2UgbGF5YXIgamFyYWsgamF1aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+Ik1lbmdpemlua2FuIHBlbWVnYW5nIG1lbmdpa2F0IGtlIGFudGFybXVrYSB0aW5na2F0IGF0YXMgZGFyaSBsYXlhciBqYXJhayBqYXVoLiBUaWRhayBwZXJuYWggZGlwZXJsdWthbiB1bnR1ayBhcGxpa2FzaSBub3JtYWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4ibWVuZ2lrYXQga2UgbGF5YW5hbiB3aWRnZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iTWVuZ2l6aW5rYW4gcGVtZWdhbmcgbWVuZ2lrYXQgYW50YXJtdWthIHRpbmdrYXQgdGluZ2dpIGRhcmkgc3VhdHUgbGF5YW5hbiB3aWRnZXQuIFRpZGFrIHBlcm5haCBkaXBlcmx1a2FuIG9sZWggYXBsIG5vcm1hbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJiZXJpbnRlcmFrc2kgZGVuZ2FuIGFkbWluIHBlcmFuZ2thdCI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iTWVuZ2l6aW5rYW4gYXBsIG1lbmdndW5ha2FuIGZpdHVyIHRpbmdrYXQgcmVuZGFoIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImJhY2EgYnVmZmVyIGZyYW1lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+Ik1lbmdpemlua2FuIGFwbCBtZW1iYWNhIGtvbnRlbiBwZW55YW5nZ2EgZnJhbWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4ibWVuZ2Frc2VzIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJNZW11bmdraW5rYW4gYXBsaWthc2kgbWVuZ2d1bmFrYW4gZml0dXIgdGluZ2thdCByZW5kYWggSW5wdXRGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ibWVuZ29uZmlndXJhc2kgdGFtcGlsYW4gV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJJemlua2FuIGFwbGlrYXNpIG1lbmdvbmZpZ3VyYXNpIGRhbiB0ZXJodWJ1bmcga2UgdGFtcGlsYW4gV2ktRmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJtZW5nb250cm9sIHRhbXBpbGFuIFdpLUZpIjwvc3RyaW5nPgpAQCAtMTE0MiwxNSArMTE1MSwxNSBAQAogICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IkFwbCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IChwcm9zZXMgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSB0ZWxhaCBtZWxhbmdnYXIga2ViaWpha2FuIFN0cmljdE1vZGUgeWFuZyBkaWJlcmxha3VrYW5ueWEgc2VuZGlyaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiJQcm9zZXMgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IHRlbGFoIG1lbGFuZ2dhciBrZWJpamFrYW4gU3RyaWN0TW9kZSB5YW5nIGRpYmVybGFrdWthbiBzZWNhcmEgb3RvbWF0aXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfdGl0bGUiIG1zZ2lkPSIxNTg0MTkyMjg1NDQxNDA1NzQ2Ij4iQW5kcm9pZCBzZWRhbmcgbWVuaW5na2F0a2FuIHZlcnNpLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfYXBrIiBtc2dpZD0iNzkwNDA0MjY4MjExMTUyNjE2OSI+Ik1lbmdvcHRpbWFsa2FuIGFwbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGRhcmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19zdGFydGluZ19hcHBzIiBtc2dpZD0iNDUxNDY0NTE2MzQ2OTI2NzEzIj4iTWVtdWxhaSBhcGwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfYXBrIiBtc2dpZD0iNzkwNDA0MjY4MjExMTUyNjE2OSI+Ik1lbmdvcHRpbWFsa2FuIGFwbGlrYXNpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZGFyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3N0YXJ0aW5nX2FwcHMiIG1zZ2lkPSI0NTE0NjQ1MTYzNDY5MjY3MTMiPiJNZW11bGFpIGFwbGlrYXNpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2NvbXBsZXRlIiBtc2dpZD0iMTQwNTk1NDc1NDExMjk5OTIyOSI+Ik1lbnllbGVzYWlrYW4gYm9vdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uIiBtc2dpZD0iOTA4NzA2Mzk4NTc3NjYyNjE2NiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiUxJHM8L3hsaWZmOmc+IGJlcmphbGFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbl9kZXRhaWwiIG1zZ2lkPSIxNzIxNjgxNzQxNjE3ODk4ODY1Ij4iU2VudHVoIHVudHVrIGJlcmFsaWgga2UgYXBsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RpdGxlIiBtc2dpZD0iNzE1MzE2NzA4NTQwMzI5ODE2OSI+IkJlcmFsaWggYXBsPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90ZXh0IiBtc2dpZD0iNzAyMjYzMTkyNDUzNDQwNjQwMyI+IkFwbCBsYWluIHN1ZGFoIGJlcmphbGFuIGRhbiBoYXJ1cyBkaWhlbnRpa2FuIGFnYXIgQW5kYSBkYXBhdCBtZW11bGFpIHlhbmcgYmFydS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2FjdGlvbiIgbXNnaWQ9IjQ5MzEyOTE3MjIzODU2NjI4MiI+IktlbWJhbGkga2U8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjA4MjA5NDI3NTU4MDM1ODA0OSI+IkphbmdhbiBtZW11bGFpIGFwbCBiYXJ1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDgyMDk0Mjc1NTgwMzU4MDQ5Ij4iSmFuZ2FuIG1lbXVsYWkgYXBsaWthc2kgYmFydS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2FjdGlvbiIgbXNnaWQ9IjU0NzI3NTY5MjY5NDU0NDA3MDYiPiJNdWxhaSA8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+IkhlbnRpa2FuIGFwbCBsYW1hIHRhbnBhIG1lbnlpbXBhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZW5kVGV4dCIgbXNnaWQ9IjUyMDk4NzQ1NzE5NTk0NjkxNDIiPiJQaWxpaCB0aW5kYWthbiB1bnR1ayB0ZWtzIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlBpbGloIGFwbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IlRpZGFrIGRhcGF0IG1lbHVuY3Vya2FuIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJCZXJiYWdpIGRlbmdhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJCZXJiYWdpIGRlbmdhbiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IkdhZ2FuZyBnZXNlci4gU2VudHVoICZhbXA7IHRhaGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJHZXNlciBrZSBhdGFzIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJHZXNlciBrZSBiYXdhaCB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iR2VzZXIga2Uga2lyaSB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ikdlc2VyIGtlIGthbmFuIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Ik1lbWJ1a2EgZ2VtYm9rIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTZW55YXAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU3VhcmEgaGlkdXAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlRlbHVzdXJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iR2VzZWsgdW50dWsgbWVtYnVrYSBrdW5jaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUGFzYW5nIGhlYWRzZXQgdW50dWsgbWVuZGVuZ2FyIHRvbWJvbCBzYW5kaSB5YW5nIGRpdWNhcGthbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJUaXRpay4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTaXN0ZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkF1ZGlvIEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iTGF5YXIgbmlya2FiZWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iU2VsZXNhaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IktlbHVhcmFuIG1lZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJTYW1idW5na2FuIGtlIHBlcmFuZ2thdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IlRyYW5zbWlzaSBsYXlhciBrZSBwZXJhbmdrYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJNZW5lbHVzdXJpIHBlcmFuZ2thdOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IlNldGVsYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iUHV0dXNrYW4gc2FtYnVuZ2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+Ik1lbWluZGFpLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iTWVueWFtYnVuZy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iVGVyc2VkaWEiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJIYW1wYXJhbiAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIGFtYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkxheWFyIG5pcmthYmVsIHRlcnNhbWJ1bmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iTGF5YXIgaW5pIGRpdGFtcGlsa2FuIGRpIHBlcmFuZ2thdCBsYWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IlRyYW5zbWlzaSBsYXlhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Ik1lbnlhbWJ1bmcga2UgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iVHJhbnNtaXNpIGxheWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJUZXJzYW1idW5nIGtlIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJQdXR1c2thbiBzYW1idW5nYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IlBhbmdnaWxhbiBkYXJ1cmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iTHVwYSBQb2xhPyI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1NiwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiJDb2JhIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGRldGlrIGxhZ2kiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iQ29iYSBsYWdpIG5hbnRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+Ikdlc2VrIGtlIGJhd2FoIHVudHVrIGtlbHVhciBkYXJpIGxheWFyIHBlbnVoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+Ikdlc2VrIGRhcmkgYXRhcyBrZSBiYXdhaCB1bnR1ayBrZWx1YXIgZGFyaSBsYXlhciBwZW51aC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IlNlbGVzYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJQZW5nZ2VzZXIgcHV0YXIgamFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJQZW5nZ2VzZXIgcHV0YXIgbWVuaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iUGlsaWggamFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iUGlsaWggbWVuaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+Iktpc2kgaGFyaSBwYWRhIGJ1bGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iRGFmdGFyIHRhaHVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJQaWxpaCBidWxhbiBkYW4gaGFyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlBpbGloIHRhaHVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBkaXBpbGloIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gZGloYXB1cyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKaW5kZXggZDJkYmZjMy4uOGJhODQzYSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJEaWdpdGEgdW4gUFVLIGZvcm1hdG8gZGEgYWxtZW5vIDggbnVtZXJpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJMYSBTSU0gw6ggYmxvY2NhdGEgdHJhbWl0ZSBQVUsuIERpZ2l0YSBpbCBjb2RpY2UgUFVLIHBlciBzYmxvY2NhcmxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IkRpZ2l0YSBpbCBQVUsyIHBlciBzYmxvY2NhcmUgbGEgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+Ik9wZXJhemlvbmUgbm9uIHJpdXNjaXRhOyBhdHRpdmEgYmxvY2NvIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IkhhaSBhbmNvcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2byBhIGRpc3Bvc2l6aW9uZSBwcmltYSBjaGUgbGEgU0lNIHZlbmdhIGJsb2NjYXRhLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IkhhaSBhbmNvcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBhIGRpc3Bvc2l6aW9uZSBwcmltYSBjaGUgbGEgU0lNIHZlbmdhIGJsb2NjYXRhLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSUQgY2hpYW1hbnRlIGluIGVudHJhdGEiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IkNvbnNlbnRlIGxcJ2Fzc29jaWF6aW9uZSBhbGxcJ2ludGVyZmFjY2lhIHByaW5jaXBhbGUgZGkgdW4gc2Vydml6aW8gVlBOLiBOb24gZG92cmViYmUgbWFpIGVzc2VyZSBuZWNlc3NhcmlvIHBlciBsZSBub3JtYWxpIGFwcGxpY2F6aW9uaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iYXNzb2NpYXppb25lIGEgc2ZvbmRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJDb25zZW50ZSBsXCdhc3NvY2lhemlvbmUgZGkgdW5vIHNmb25kbyBhbGxcJ2ludGVyZmFjY2lhIHByaW5jaXBhbGUuIE5vbiBkb3ZyZWJiZSBtYWkgZXNzZXJlIG5lY2Vzc2FyaWEgcGVyIGxlIG5vcm1hbGkgYXBwbGljYXppb25pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4iY29sbGVnYSBhIHVuIGRpc3BsYXkgcmVtb3RvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iQ29uc2VudGUgYWwgdGl0b2xhcmUgZGkgY29sbGVnYXJzaSBhbGxcJ2ludGVyZmFjY2lhIGRpIHByaW1vIGxpdmVsbG8gZGkgdW4gZGlzcGxheSByZW1vdG8uIE5vbiBkb3ZyZWJiZSBlc3NlcmUgbWFpIG5lY2Vzc2FyaWEgcGVyIGxlIG5vcm1hbGkgYXBwbGljYXppb25pLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ImFzc29jaWF6aW9uZSBhIHVuIHNlcnZpemlvIHdpZGdldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJDb25zZW50ZSBsXCdhc3NvY2lhemlvbmUgYWxsXCdpbnRlcmZhY2NpYSBwcmluY2lwYWxlIGRpIHVuIHNlcnZpemlvIHdpZGdldC4gTm9uIGRvdnJlYmJlIG1haSBlc3NlcmUgbmVjZXNzYXJpbyBwZXIgbGUgbm9ybWFsaSBhcHBsaWNhemlvbmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaW50ZXJhemlvbmUgY29uIHVuIGFtbWluaXN0cmF0b3JlIGRpc3Bvc2l0aXZvIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJDb25zZW50ZSBhbGxcJ2FwcGxpY2F6aW9uZSBsXCd1dGlsaXp6byBkaSBmdW56aW9uaSBkaSBiYXNzbyBsaXZlbGxvIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImxldHR1cmEgYnVmZmVyIGRpIGZyYW1lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IkNvbnNlbnRlIGFsbFwnYXBwbGljYXppb25lIGRpIGxlZ2dlcmUgaSBjb250ZW51dGkgZGVsIGJ1ZmZlciBkaSBmcmFtZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJhY2Nlc3NvIGEgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkNvbnNlbnRlIGFsbFwnYXBwbGljYXppb25lIGRpIHV0aWxpenphcmUgZnVuemlvbmkgZGkgYmFzc28gbGl2ZWxsbyBJbnB1dEZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJjb25maWd1cmF6aW9uZSBkaSBzY2hlcm1pIFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iQ29uc2VudGUgYWxsXCdhcHBsaWNhemlvbmUgZGkgY29uZmlndXJhcmUgc2NoZXJtaSBXaS1GaSBlIGRpIGNvbGxlZ2Fyc2kgYSBlc3NpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iY29udHJvbGxvIGRpIHNjaGVybWkgV2ktRmkiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJNYWl1c2NvbG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJJbnZpbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlNjZWdsaSB1blwnYXBwbGljYXppb25lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iSW1wb3NzaWJpbGUgYXZ2aWFyZSBsXCdhcHBsaWNhemlvbmUgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkNvbmRpdmlkaSBjb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iQ29uZGl2aWRpIGNvbiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+Ik1hbmlnbGlhIHNjb3JyZXZvbGUuIFRvY2NhIGUgdGllbmkgcHJlbXV0by4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iU3UgcGVyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJHacO5IHBlciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iQSBzaW5pc3RyYSBwZXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJBIGRlc3RyYSBwZXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iU2Jsb2NjYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJGb3RvY2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlNpbGVuemlvc28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iQXVkaW8gYXR0aXZhdG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlJpY2VyY2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJGYWkgc2NvcnJlcmUgcGVyIHNibG9jY2FyZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iQ29sbGVnYSBnbGkgYXVyaWNvbGFyaSBwZXIgYXNjb2x0YXJlIGxhIHByb251bmNpYSBkZWkgdGFzdGkgcHJlbXV0aSBwZXIgbGEgcGFzc3dvcmQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUHVudG8uIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQXVkaW8gQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJWaXN1YWxpenphemlvbmUgd2lyZWxlc3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iRmluZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IlVzY2l0YSBtZWRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iQ29ubmV0dGkgYWwgZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJUcmFzbWV0dGkgc2NoZXJtbyBhbCBkaXNwb3NpdGl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IlJpY2VyY2EgZGkgZGlzcG9zaXRpdmkgaW4gY29yc2/igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJJbXBvc3RhemlvbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iRGlzY29ubmV0dGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iUmljZXJjYSBpbiBjb3Jzby4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IkNvbm5lc3Npb25lLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJEaXNwb25pYmlsZSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+Ik92ZXJsYXkgbi4gPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz4geCA8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgb3B6aW9uZSBzaWN1cmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IklsIGRpc3BsYXkgd2lyZWxlc3Mgw6ggY29ubmVzc28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iUXVlc3RhIHNjaGVybWF0YSDDqCBtb3N0cmF0YSBzdSB1biBhbHRybyBkaXNwb3NpdGl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJUcmFzbWlzc2lvbmUgc2NoZXJtbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IkNvbGxlZ2FtZW50byBhIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiBpbiBjb3JzbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IlRyYXNtaXNzaW9uZSBzY2hlcm1vIGF0dGl2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iQ29sbGVnYXRvIGEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IkRpc2Nvbm5ldHRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJDaGlhbWF0YSBkaSBlbWVyZ2VuemEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJTZXF1ZW56YSBkaW1lbnRpY2F0YSI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY1NywxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iUmlwcm92YSBwacO5IHRhcmRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlNjb3JyaSBkYWxsXCdhbHRvIHZlcnNvIGlsIGJhc3NvIHBlciB1c2NpcmUgZGFsbGEgbW9kYWxpdMOgIHNjaGVybW8gaW50ZXJvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iRmluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkRpc3Bvc2l0aXZvIGRpIHNjb3JyaW1lbnRvIGNpcmNvbGFyZSBwZXIgbGUgb3JlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJEaXNwb3NpdGl2byBkaSBzY29ycmltZW50byBjaXJjb2xhcmUgcGVyIGkgbWludXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlNlbGV6aW9uYSBsZSBvcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJTZWxlemlvbmEgaSBtaW51dGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IkdyaWdsaWEgZGkgZ2lvcm5pIHBlciBtZXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iRWxlbmNvIGRlZ2xpIGFubmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlNlbGV6aW9uYSBtZXNlIGUgZ2lvcm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iU2VsZXppb25hIGFubm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iRWxlbWVudG8gc2VsZXppb25hdG86IDx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IGVsaW1pbmF0byI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKaW5kZXggNTFmMzg4OS4uN2U4MjFkMiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCkBAIC0yMywxOCArMjMsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ5dGVTaG9ydCIgbXNnaWQ9IjgzNDA5NzM4OTI3NDIwMTkxMDEiPiJCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2lsb2J5dGVTaG9ydCIgbXNnaWQ9IjU5NzM3ODk3ODM1MDQ3NzE4NzgiPiJLQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZ2FieXRlU2hvcnQiIG1zZ2lkPSI2MzU1ODUxNTc2NzcwNDI4OTIyIj4iTUIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnaWdhYnl0ZVNob3J0IiBtc2dpZD0iMzI1OTg4MjQ1NTIxMjE5MzIxNCI+IkdC4oCP4oCPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2lnYWJ5dGVTaG9ydCIgbXNnaWQ9IjMyNTk4ODI0NTUyMTIxOTMyMTQiPiLigI9HQuKAj+KAjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRlcmFieXRlU2hvcnQiIG1zZ2lkPSIyMzE2MTMwMTgxNTkxODY5NjIiPiJUQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBldGFieXRlU2hvcnQiIG1zZ2lkPSI1NjM3ODE2NjgwMTQ0OTkwMjE5Ij4iUEIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmaWxlU2l6ZVN1ZmZpeCIgbXNnaWQ9IjkxNjQyOTI3OTE1MDA1MzE5NDkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRzPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZndDvXnNec15Ag15vXldeq16jXqiZsdDsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bnRpdGxlZCIgbXNnaWQ9IjQ2Mzg5NTY5NTQ4NTI3ODI1NzYiPiLigI8mZ3Q715zXnNeQINeb15XXqteo16ombHQ7Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZWxsaXBzaXMiIG1zZ2lkPSI3ODk5ODI5NTE2MDQ4ODEzMjM3Ij4iLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZWxsaXBzaXNfdHdvX2RvdHMiIG1zZ2lkPSIxMjI4MDc4OTk0ODY2MDMwNzM2Ij4i4oClIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW1wdHlQaG9uZU51bWJlciIgbXNnaWQ9Ijc2OTQwNjMwNDIwNzk2NzY1MTciPiIo15DXmdefINee16HXpNeoINeY15zXpNeV158pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idW5rbm93bk5hbWUiIG1zZ2lkPSIyMjc3NTU2NTQ2NzQyNzQ2NTIyIj4iKNec15Ag15nXk9eV16IpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdFZvaWNlTWFpbEFscGhhVGFnIiBtc2dpZD0iMjY2MDAyMDk5MDA5NzczMzA3NyI+IteT15XXkNeoINen15XXnNeZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdE1zaXNkbkFscGhhVGFnIiBtc2dpZD0iMjg1MDg4OTc1NDkxOTU4NDY3NCI+Ik1TSVNETjEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtbWlFcnJvciIgbXNnaWQ9IjUxNTQ0OTk0NTc3MzkwNTI5MDciPiLXkdei15nXlCDXkdeX15nXkdeV16gg15DXlSDXp9eV15MgTU1JINec15Ag15fXlden15kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pRXJyb3IiIG1zZ2lkPSI1MTU0NDk5NDU3NzM5MDUyOTA3Ij4i4oCP15HXoteZ15Qg15HXl9eZ15HXldeoINeQ15Ug16fXldeTIE1NSSDXnNeQINeX15XXp9eZLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1taUZkbkVycm9yIiBtc2dpZD0iNTIyNDM5ODIxNjM4NTMxNjQ3MSI+IteU16TXoteV15zXlCDXnteV15LXkdec16og15zXnteh16TXqNeZINeX15nXldeSINen15HXldei15nXnSDXkdec15HXky4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZCIgbXNnaWQ9IjgxNDcyNzgzNDY0MTQ3MTQzMTUiPiLXlNep15nXqNeV16og15TXldek16LXnC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZEZvciIgbXNnaWQ9IjY4NTYyMjgxNDA0NTM0NzEwNDEiPiLXlNep15nXqNeV16og15TXldek16LXnCDXoteR15XXqDoiPC9zdHJpbmc+CkBAIC00MiwxNCArNDIsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VSZWdpc3RlcmVkIiBtc2dpZD0iNjI3NTAxOTA4MjU5ODEwMjQ5MyI+IteU15TXqNep157XlCDXkdeV16bXoteUINeR15TXptec15fXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRXJhc2VkIiBtc2dpZD0iMTI4ODU4NDY5NTI5NzIwMDk3MiI+IteU157Xl9eZ16fXlCDXkdeV16bXoteUINeR15TXptec15fXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZEluY29ycmVjdCIgbXNnaWQ9Ijc2MTIyMDg4Mzk0NTAxMjg3MTUiPiLXodeZ16HXnteUINep15LXldeZ15QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibW1pQ29tcGxldGUiIG1zZ2lkPSI4MjMyNTI3NDk1NDExNjk4MzU5Ij4iTU1JINeU15XXqdec150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFkUGluIiBtc2dpZD0iOTAxNTI3NzY0NTU0NjcxMDAxNCI+IteULVBJTiDXlNeZ16nXnyDXqdeU16fXnNeT16og16nXkteV15kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFkUHVrIiBtc2dpZD0iNTQ4NzI1NzY0NzA4MTEzMjIwMSI+IteULVBVSyDXqdeU16fXnNeT16og16nXkteV15kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWlzbWF0Y2hQaW4iIG1zZ2lkPSI2MDkzNzkwNTQ0OTY4NjM0MTkiPiLXp9eV15PXmSDXlC1QSU4g16nXlNen15zXk9eqINec15Ag16rXldeQ157XmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQaW4iIG1zZ2lkPSIzODUwMDE4NDQ1MTg3NDc1Mzc3Ij4i15TXp9ec15MgUElOINep15DXldeo15vXlSA0INei15MgOCDXodek16jXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4i15TXp9ec15MgUFVLINeR15DXldeo15ogOCDXnteh16TXqNeZ150g15DXlSDXmdeV16rXqC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4i15vXqNeY15nXoSDXlC1TSU0g16DXoteV15wg15HXkNee16bXoteV16ogUFVLLiDXlNen15zXkyDXkNeqINen15XXkyBQVUsg15vXk9eZINec15HXmNecINeQ16og16DXoteZ15zXqteVLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IteU16fXnNeTIFBVSzIg15vXk9eZINec15HXmNecINeQ16og15fXodeZ157XqiDXm9eo15jXmdehINeULVNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlDb21wbGV0ZSIgbXNnaWQ9IjgyMzI1Mjc0OTU0MTE2OTgzNTkiPiLigI9NTUkg15TXldep15zXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQaW4iIG1zZ2lkPSI5MDE1Mjc3NjQ1NTQ2NzEwMDE0Ij4i4oCP15QtUElOINeU15nXqdefINep15TXp9ec15PXqiDXqdeS15XXmS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQdWsiIG1zZ2lkPSI1NDg3MjU3NjQ3MDgxMTMyMjAxIj4i4oCP15QtUFVLINep15TXp9ec15PXqiDXqdeS15XXmS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+IuKAj9en15XXk9eZINeULVBJTiDXqdeU16fXnNeT16og15zXkCDXqteV15DXnteZ150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFBpbiIgbXNnaWQ9IjM4NTAwMTg0NDUxODc0NzUzNzciPiLigI/XlNen15zXkyBQSU4g16nXkNeV16jXm9eVIDQg16LXkyA4INeh16TXqNeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLigI/XlNen15zXkyBQVUsg15HXkNeV16jXmiA4INee16HXpNeo15nXnSDXkNeVINeZ15XXqteoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiLigI/Xm9eo15jXmdehINeULVNJTSDXoNei15XXnCDXkdeQ157Xptei15XXqiBQVUsuINeU16fXnNeTINeQ16og16fXldeTIFBVSyDXm9eT15kg15zXkdeY15wg15DXqiDXoNei15nXnNeq15UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4i4oCP15TXp9ec15MgUFVLMiDXm9eT15kg15zXkdeY15wg15DXqiDXl9eh15nXnteqINeb16jXmNeZ16Eg15QtU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuKAj9ec15Ag15TXptec15fXqi4g15TXpNei15wg16DXoteZ15zXqiBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiLigI/XoNeV16rXqCDXnNeaINeg15nXodeZ15XXnyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g15zXpNeg15kg16DXoteZ15zXqiDXm9eo15jXmdehINeULVNJTS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLigI/XoNeV16rXqNeVINec15ogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15zXpNeg15kg16DXoteZ15zXqiDXm9eo15jXmdehINeULVNJTS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IteW15nXlNeV15kg157Xqten16nXqCDXqdecINep15nXl9eUINeg15vXoNeh16oiPC9zdHJpbmc+CkBAIC01OCw3ICs2Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJDd01taSIgbXNnaWQ9IjkxMjk2NzgwNTY3OTUwMTY4NjciPiLXqdeZ15fXlCDXntee16rXmdeg15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJCYU1taSIgbXNnaWQ9IjQ1NTE5MzA2NzkyNjc3MDU4MSI+IteX16HXmdee16og16nXmdeX15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlB3ZE1taSIgbXNnaWQ9IjcwNDM3MTU2ODc5MDUyNTQxOTkiPiLXqdeZ16DXldeZINeh15nXodee15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJQaW5NbWkiIG1zZ2lkPSIzMTEzMTE3NzgwMzYxMTkwMzA0Ij4i16nXoNeUINeQ16og15QtUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUGluTW1pIiBtc2dpZD0iMzExMzExNzc4MDM2MTE5MDMwNCI+IuKAj9ep16DXlCDXkNeqINeULVBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNuaXBNbWkiIG1zZ2lkPSIzMTEwNTM0NjgwNTU3ODU3MTYyIj4i157Xodek16gg157Xqten16nXqCDXoNee16bXkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNuaXJNbWkiIG1zZ2lkPSIzMDYyMTAyMTIxNDMwNTQ4NzMxIj4i157Xodek16gg157Xqten16nXqCDXl9eh15XXmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlRocmVlV0NNbWkiIG1zZ2lkPSI5MDUxMDQ3MTcwMzIxMTkwMzY4Ij4i16nXmdeX15Qg16LXnSDXqdec15XXqdeUINee16nXqteq16TXmdedIjwvc3RyaW5nPgpAQCAtNzYsMTAgKzgxLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25FbWVyZ2VuY3kiIG1zZ2lkPSI2NTgxMTYzNzc5MDcyODMzNjY1Ij4i16nXmdeo15XXqiDXl9eZ16jXldedINeX16HXldedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbk5vcm1hbCIgbXNnaWQ9IjQ5NTM4NjcwMTEzODk3NTA2NzMiPiLXlNep15nXqNeV16og15TXp9eV15zXmSDXl9eh15XXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGxWb2ljZSIgbXNnaWQ9IjMzOTY5NjM2NTIxMDgxNTEyNjAiPiLXm9ecINeU16nXmdeo15XXqteZ150g15TXp9eV15zXmdeZ150g15fXodeV157XmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblNtcyIgbXNnaWQ9IjgzMTQzNTIzMjc0NjE2Mzg4OTciPiLXqdeZ16jXldeqIFNNUyDXl9eh15XXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25TbXMiIG1zZ2lkPSI4MzE0MzUyMzI3NDYxNjM4ODk3Ij4i4oCP16nXmdeo15XXqiBTTVMg15fXodeV150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VEYXRhIiBtc2dpZD0iOTk2NjM2NDg3MTA2MTcxMzIwIj4i16nXmdeo15XXqteZINeU16fXldecL9eg16rXldeg15nXnSDXl9eh15XXnteZ150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VTbXMiIG1zZ2lkPSIxODg4NTg4MTUyNzkyMDIzODczIj4i16nXmdeo15XXqteZINen15XXnC9TTVMg15fXodeV157XmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbCIgbXNnaWQ9IjU2NDMwMjgyNjQ0NjYwOTI4MjEiPiLXm9ecINeU16nXmdeo15XXqteZ150g16nXnCDXp9eV15wv16DXqteV16DXmdedL1NNUyDXl9eh15XXnteZ150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VTbXMiIG1zZ2lkPSIxODg4NTg4MTUyNzkyMDIzODczIj4i4oCP16nXmdeo15XXqteZINen15XXnC9TTVMg15fXodeV157XmdedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbCIgbXNnaWQ9IjU2NDMwMjgyNjQ0NjYwOTI4MjEiPiLigI/Xm9ecINeU16nXmdeo15XXqteZ150g16nXnCDXp9eV15wv16DXqteV16DXmdedL1NNUyDXl9eh15XXnteZ150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzVm9pY2UiIG1zZ2lkPSIxMjU4MzkzODEyMzM1MjU4MDE5Ij4iR29vZ2xlIFZvaWNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YSIgbXNnaWQ9Ijg3MjQ1Njc4MjA3NzkzNzg5MyI+Ikdvb2dsZSBEYXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRkFYIiBtc2dpZD0iNTU2NjYyNDk5ODg0MDQ4NjQ3NSI+Itek16fXoSI8L3N0cmluZz4KQEAgLTExNCw3ICsxMTksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yTG9va3VwIiBtc2dpZD0iNDcxMTY4NzQ1NjExMTk2MzE2MyI+Itec15Ag16DXmdeq158g15zXntem15XXkCDXkNeqINeb16rXldeR16og15TXkNeq16guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRBdXRoU2NoZW1lIiBtc2dpZD0iNjI5OTk4MDI4MDQ0MjA3Njc5OSI+Iteh15vXmdee16og15DXmdee15XXqiDXlNeQ16rXqCDXkNeZ16DXlCDXoNeq157Xm9eqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckF1dGgiIG1zZ2lkPSIxNDM1MDY1NjI5NDM4MDQ0NTM0Ij4i15TXkNeZ157XldeqINeg15vXqdecLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclByb3h5QXV0aCIgbXNnaWQ9IjE3ODgyMDcwMTA1NTkwODEzMzEiPiLXlNeQ15nXnteV16og15PXqNeaINep16jXqiDXlC1Qcm94eSDXoNeb16nXnC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JQcm94eUF1dGgiIG1zZ2lkPSIxNzg4MjA3MDEwNTU5MDgxMzMxIj4i4oCP15TXkNeZ157XldeqINeT16jXmiDXqdeo16og15QtUHJveHkg16DXm9ep15wuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQ29ubmVjdCIgbXNnaWQ9Ijg3MTQyNzMyMzYzNjQ2NDA1NDkiPiLXnNeQINeg15nXqtefINec15TXqteX15HXqCDXnNep16jXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JJTyIgbXNnaWQ9IjIzNDA1NTgxOTc0ODkzMDIxODgiPiLXnNeQINeg15nXqtefINec16rXp9ep16gg16LXnSDXlNep16jXqi4g16DXodeUINep15XXkSDXnteQ15XXl9eoINeZ15XXqteoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclRpbWVvdXQiIG1zZ2lkPSI0NzQzNDAzNzAzNzYyODgzOTU0Ij4i15fXnNejINeU15bXntefINeU16fXpteV15Eg16nXnCDXlNeX15nXkdeV16gg15zXqdeo16ouIjwvc3RyaW5nPgpAQCAtMTY4LDExICsxNzMsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjUwNzUwNzA0NDI4NTQ0OTAyOTYiPiLXntem15Eg15jXmdeh15Qg15vXkdeV15kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLXntem15Eg15HXmNeV15ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLXntei16jXm9eqIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLigI/Xntei16jXm9eqIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY29zdE1vbmV5IiBtc2dpZD0iNTQyOTgwODIxNzg2MTQ2MDQwMSI+Itep15nXqNeV16rXmdedINep16LXldec15nXnSDXm9eh16MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Nvc3RNb25leSIgbXNnaWQ9IjMyOTMzMDE5MDM0MDk4Njk0OTUiPiLXkdeZ16bXldeiINek16LXldec15XXqiDXqdei16nXldeZ15XXqiDXnNei15zXldeqINec15og15vXodejLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9tZXNzYWdlcyIgbXNnaWQ9Ijc1MjEyNDkxNDg0NDU0NTY2NjIiPiLXlNeU15XXk9ei15XXqiDXqdec15oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21lc3NhZ2VzIiBtc2dpZD0iNzgyMTk5OTA3MTAwMzY5OTIzNiI+Iten16jXmdeQ15Qg15XXm9eq15nXkdeUINeR15TXldeT16LXldeqINeULVNNUywg15TXk9eV15BcItecINeV15TXldeT16LXldeqINeQ15fXqNeV16og16nXnNeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWVzc2FnZXMiIG1zZ2lkPSI3ODIxOTk5MDcxMDAzNjk5MjM2Ij4i4oCP16fXqNeZ15DXlCDXldeb16rXmdeR15Qg15HXlNeV15PXoteV16og15QtU01TLCDXlNeT15XXkFwi15wg15XXlNeV15PXoteV16og15DXl9eo15XXqiDXqdec15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3BlcnNvbmFsSW5mbyIgbXNnaWQ9IjM1MTkxNjMxNDEwNzA1MzM0NzQiPiLXlNee15nXk9eiINeU15DXmdep15kg16nXnNeaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19wZXJzb25hbEluZm8iIG1zZ2lkPSI4NDI2NDUzMTI5Nzg4ODYxMzM4Ij4i15LXmdep15Qg15nXqdeZ16jXlCDXnNee15nXk9eiINei15zXmdeaLCDXlNee15DXldeX16HXnyDXkdeb16jXmNeZ16Eg15DXmdepINeU16fXqdeoINep15zXmi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc29jaWFsSW5mbyIgbXNnaWQ9IjU3OTkwOTY2MjM0MTIwNDM3OTEiPiLXnteZ15PXoiDXotecINeU16fXqdeo15nXnSDXlNeX15HXqNeq15nXmdedINep15zXmiI8L3N0cmluZz4KQEAgLTE4Miw3ICsxODcsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX25ldHdvcmsiIG1zZ2lkPSI1ODA4OTgzMzc3NzI3MTA5ODMxIj4i16rXp9ep15XXqNeqINeo16nXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbmV0d29yayIgbXNnaWQ9IjQ0NzgyOTk0MTMyNDE4NjE5ODciPiLXlNeo16nXkNeqINeS15nXqdeUINec16rXm9eV16DXldeqINeo16nXqiDXqdeV16DXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iMTU4NTQwMzU0NDE2MjEyODEwOSI+IkJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYmx1ZXRvb3RoTmV0d29yayIgbXNnaWQ9IjU2MjUyODg1NzcxNjQyODIzOTEiPiLXkteZ16nXlCDXnNee15vXqdeZ16jXmdedINeV15zXqNep16rXldeqINeR15DXntem16LXldeqIEJsdWV0b290aC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSI1NjI1Mjg4NTc3MTY0MjgyMzkxIj4i4oCP15LXmdep15Qg15zXnteb16nXmdeo15nXnSDXldec16jXqdeq15XXqiDXkdeQ157Xptei15XXqiBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI4MzI5MjYxNjcwMTUxODcxMjM1Ij4i15TXkteT16jXldeqINeQ15XXk9eZ15UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIyNjQxNTE1NDAzMzQ3NTY4MTMwIj4i16nXmdeg15XXmSDXlNeS15PXqNeV16og15TXkNeV15PXmdeVLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hZmZlY3RzQmF0dGVyeSIgbXNnaWQ9IjYyMDkyNDY2NTM0MjQ3OTgwMzMiPiLXlNep16TXoteUINei15wg15TXodeV15zXnNeUIjwvc3RyaW5nPgpAQCAtMjI4LDggKzIzMyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGlzcGxheSIgbXNnaWQ9IjQyNzk5MDk2NzYwMzY0MDI2MzYiPiLXntee16nXpyDXlNee16nXqtee16kg16nXnCDXkNek15zXmden16bXmdeUINeQ15fXqNeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaXNwbGF5IiBtc2dpZD0iNjA1MTAwMjAzMTkzMzAxMzcxNCI+IteU16nXpNei15Qg16LXnCDXntee16nXpyDXlNee16nXqtee16kg16nXnCDXkNek15zXmden16bXmdeV16og15DXl9eo15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RvcmFnZSIgbXNnaWQ9IjE5NzExMTg3NzA1NDYzMzY5NjYiPiLXkNeX16HXldefIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc0NDIzMTg1MDI0NDY4NzQ5OTkiPiLXkteZ16nXlCDXnNeQ157Xptei15kg15DXl9eh15XXnyDXnteh15XXkiBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iOTIwMzMwMjIxNDkxNTM1NTc3NCI+IteS16kg15zXm9eo15jXmdehIFNELiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3NDQyMzE4NTAyNDQ2ODc0OTk5Ij4i4oCP15LXmdep15Qg15zXkNee16bXoteZINeQ15fXodeV158g157XodeV15IgVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiLigI/XktepINec15vXqNeY15nXoSBTRC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWNjZXNzaWJpbGl0eUZlYXR1cmVzIiBtc2dpZD0iNzkxOTAyNTYwMjI4MzU5MzkwNyI+Iteq15vXldeg15XXqiDXoNeS15nXqdeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9IjQyMDUxOTY4ODE2NzgxNDQzMzUiPiLXqteb15XXoNeV16og16nXmNeb16DXldec15XXkteZ15Qg157XodeZ15nXoteqINeZ15vXldec15Qg15zXkden16kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzOTAxNzE3OTM2OTMwMTcwMzIwIj4i15DXl9eW16gg16rXldeb158g16nXnCDXl9ec15XXnyI8L3N0cmluZz4KQEAgLTI1MiwyNiArMjU3LDI2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191bmluc3RhbGxfc2hvcnRjdXQiIG1zZ2lkPSI2NzQ1NzQzNDc0MjY1MDU3OTc1Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeh15nXqCDXp9eZ16bXldeo15kg15PXqNeaINeR157XodeaINeT16Mg15TXkdeZ16og15zXnNeQINeU16rXoteo15HXldeqINeU157Xqdeq157XqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iMzkwNjAwNzgzMTE5Mjk5MDk0NiI+Iteg15nXqteV15Eg157Xl9eT16kg16nXnCDXqdeZ15fXldeqINeZ15XXpteQ15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iNTMzMTMxODkzMTkzNzQwMjA0MCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16LXkdeTINep15nXl9eV16og15nXldem15DXldeqINeV15zXqdeg15XXqiDXkNeqINeU157Xodek16gg16nXmdepINec15fXmdeZ15IuINeQ15nXqdeV16gg15bXlCDXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNei16fXldeRINeQ15fXqCDXqdeZ15fXldeqINeZ15XXpteQ15XXqiwg15zXkdem16Ig15TXpNeg15nXlCDXnteX15PXqSDXqdec15TXnyDXkNeVINeQ16Mg15zXnteg15XXoiDXkNeqINeR15nXpteV16LXny4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVTbXMiIG1zZ2lkPSI4NjczNDcxNzY4OTQ3ODk1MDgyIj4i16fXkdec16og15TXldeT16LXldeqINeY16fXodeYIChTTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen15HXnCDXldec16LXkdeTINeU15XXk9ei15XXqiBTTVMuINee16nXntei15XXqiDXlNeT15HXqCDXlNeZ15Ag16nXlNeQ16TXnNeZ16fXpteZ15Qg15nXm9eV15zXlCDXnNei16fXldeRINeQ15fXqCDXlNeV15PXoteV16og16nXoNep15zXl9eVINec157Xm9ep15nXqCDXkNeVINec157Xl9eV16cg15DXldeq158g157Xkdec15kg15zXlNem15nXkiDXnNeaINeQ15XXqtefLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZU1tcyIgbXNnaWQ9IjE4MjEzMTczNDQ2NjgyNTcwOTgiPiLXp9eR15zXqiDXlNeV15PXoteV16og15jXp9eh15ggKE1NUykiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlTW1zIiBtc2dpZD0iNTMzMDE5NDM3MjYzMjEyMjYwIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg15XXnNei15HXkyDXlNeV15PXoteV16ogTU1TLiDXntep157XoteV16og15TXk9eR16gg15TXmdeQINep15TXkNek15zXmden16bXmdeUINeZ15vXldec15Qg15zXoten15XXkSDXkNeX16gg15TXldeT16LXldeqINep16DXqdec15fXlSDXnNee15vXqdeZ16gg15DXlSDXnNee15fXldenINeQ15XXqtefINee15HXnNeZINec15TXpteZ15Ig15zXmiDXkNeV16rXny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVTbXMiIG1zZ2lkPSI4NjczNDcxNzY4OTQ3ODk1MDgyIj4i4oCP16fXkdec16og15TXldeT16LXldeqINeY16fXodeYIChTTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen15HXnCDXldec16LXkdeTINeU15XXk9ei15XXqiBTTVMuINee16nXntei15XXqiDXlNeT15HXqCDXlNeZ15Ag16nXlNeQ16TXnNeZ16fXpteZ15Qg15nXm9eV15zXlCDXnNei16fXldeRINeQ15fXqCDXlNeV15PXoteV16og16nXoNep15zXl9eVINec157Xm9ep15nXqCDXkNeVINec157Xl9eV16cg15DXldeq158g157Xkdec15kg15zXlNem15nXkiDXnNeaINeQ15XXqtefLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZU1tcyIgbXNnaWQ9IjE4MjEzMTczNDQ2NjgyNTcwOTgiPiLigI/Xp9eR15zXqiDXlNeV15PXoteV16og15jXp9eh15ggKE1NUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlTW1zIiBtc2dpZD0iNTMzMDE5NDM3MjYzMjEyMjYwIj4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg15XXnNei15HXkyDXlNeV15PXoteV16ogTU1TLiDXntep157XoteV16og15TXk9eR16gg15TXmdeQINep15TXkNek15zXmden16bXmdeUINeZ15vXldec15Qg15zXoten15XXkSDXkNeX16gg15TXldeT16LXldeqINep16DXqdec15fXlSDXnNee15vXqdeZ16gg15DXlSDXnNee15fXldenINeQ15XXqtefINee15HXnNeZINec15TXpteZ15Ig15zXmiDXkNeV16rXny4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4i16fXkdecINep15nXk9eV16jXmSDXl9eZ16jXldedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9Ijg0ODUyNDA3MDI2MjQzMTk3NCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINeV15zXoteR15Mg15zXqdeT16gg15TXldeT16LXldeqINeX15nXqNeV150g157XqdeV15PXqNeV16ouINeU16jXqdeQ15Qg15bXlSDXltee15nXoNeUINeo16cg15zXkNek15zXmden16bXmdeV16og157Xoteo15vXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjE1OTgzMjg4NDM2MTk2NDYxNjYiPiLXp9eo15nXkNeqINeU15XXk9ei15XXqiDXqdeZ15PXldeoINeh15zXldec16jXmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen16jXldeQINeU15XXk9ei15XXqiDXqdeZ15PXldeoINeh15zXldec16jXmSDXqdeU16rXp9eR15zXlSDXkdee15vXqdeZ16gg16nXnNeaLiDXlNeq16jXkNeV16og16nXmdeT15XXqCDXodec15XXnNeo15kg16DXqdec15fXldeqINeR157Xp9eV157XldeqINee16HXldeZ157XmdedINei15wg157XoNeqINec15TXlteU15nXqCDXkNeV16rXmiDXntek16DXmSDXntem15HXmSDXl9eZ16jXldedLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXqdeV15nXldeqINec15TXpNeo15nXoiDXnNeR15nXpteV16LXmdedINeQ15Ug15zXpNei15XXnNeUINep15wg15TXnteb16nXmdeoINep15zXmiDXm9eQ16nXqCDXnteq16fXkdecINep15nXk9eV16gg15fXmdeo15XXnSDXodec15XXnNeo15kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kU21zIiBtc2dpZD0iNTYwMDgzMDYxMjE0NzY3MTUyOSI+Itep15zXldeXINeU15XXk9ei15XXqiBTTVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15cg15TXldeT16LXldeqIFNNUy4g15TXk9eR16gg16LXqdeV15kg15zXkteo15XXnSDXnNeX15nXldeR15nXnSDXkdec16rXmSDXptek15XXmdeZ150uINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXkteo15XXnSDXnNei15zXldeZ15XXqiDXotecINeZ15PXmSDXqdec15nXl9eqINeU15XXk9ei15XXqiDXnNec15Ag15DXmdep15XXqNeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFNtcyIgbXNnaWQ9IjU2MDA4MzA2MTIxNDc2NzE1MjkiPiLigI/Xqdec15XXlyDXlNeV15PXoteV16ogU01TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFNtcyIgbXNnaWQ9IjcwOTQ3MjkyOTgyMDQ5Mzc2NjciPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep15zXldeXINeU15XXk9ei15XXqiBTTVMuINeU15PXkdeoINei16nXldeZINec15LXqNeV150g15zXl9eZ15XXkdeZ150g15HXnNeq15kg16bXpNeV15nXmdedLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec15LXqNeV150g15zXotec15XXmdeV16og16LXnCDXmdeT15kg16nXnNeZ15fXqiDXlNeV15PXoteV16og15zXnNeQINeQ15nXqdeV16jXmi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI4NzEzODg5MTA1MzA1OTQzMjAwIj4i16nXnNeZ15fXqiDXkNeZ16jXldei15kgXCfXqteS15XXkdeUINeR15DXntem16LXldeqINeU15XXk9ei15RcJyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI3MTA3NjQ4NTQ4NDY4Nzc4NzM0Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdec15XXlyDXkden16nXldeqINec15DXpNec15nXp9em15nXldeqINeQ15fXqNeZ150g16nXnCDXlNei15HXqNeqINeU15XXk9ei15XXqiDXm9eT15kg15zXmNek15wg15HXkNeZ16jXldei15kgXCfXqteS15XXkdeUINeR15DXntem16LXldeqINeU15XXk9ei15RcJyDXoteR15XXqCDXqdeZ15fXldeqINeg15vXoNeh15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTbXMiIG1zZ2lkPSI4NzQ1MDg2NTcyMjEzMjcwNDgwIj4i16fXqNeZ15DXqiDXlNeV15PXoteV16og15TXmNen16HXmCDXqdec15ogKFNNUyDXkNeVIE1NUykiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXlNeV15PXoteV16ogU01TINeU157XkNeV15fXodeg15XXqiDXkdeY15DXkdec15gg15DXlSDXkdeb16jXmNeZ16Eg15QtU0lNLiDXk9eR16gg15bXlCDXnteq15nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXkNeqINeb15wg15TXldeT16LXldeqINeULVNNUywg15zXnNeQINeU16rXl9ep15HXldeqINeR16rXldeb158g15DXlSDXkdeh15XXk9eZ15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY5NTk2NzUzMzQ1NzI0MDU1MCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXqNeV15Ag15TXldeT16LXldeqIFNNUyDXlNee15DXldeX16HXoNeV16og15HXmNec16TXldefINeQ15Ug15HXm9eo15jXmdehINeULVNJTS4g15PXkdeoINeW15Qg157XqteZ16gg15zXkNek15zXmden16bXmdeUINec16fXqNeV15Ag15DXqiDXm9ecINeU15XXk9ei15XXqiDXlC1TTVMsINec15zXkCDXlNeq15fXqdeR15XXqiDXkdeq15XXm9efINeQ15Ug15HXodeV15PXmdeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNtcyIgbXNnaWQ9IjMyMTY5NTA0NzI2MzYyMTQ3NzQiPiLXoteo15nXm9eqINeU15XXk9ei15XXqiDXlNeY16fXodeYINep15zXmiAoU01TINeQ15UgTU1TKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXm9eq15XXkSDXnNeU15XXk9ei15XXqiBTTVMg15TXnteQ15XXl9eh16DXldeqINeR15jXkNeR15zXmCDXkNeVINeR15vXqNeY15nXoSDXlC1TSU0g16nXnNeaLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec157Xl9eV16cg15DXqiDXlNeU15XXk9ei15XXqiDXqdec15ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjY4NjY4NzA5MDUyMzI4NTY3Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXm9eq15XXkSDXnNeU15XXk9ei15XXqiBTTVMg15TXnteQ15XXl9eh16DXldeqINeR15jXnNek15XXnyDXkNeVINeR15vXqNeY15nXoSDXlC1TSU0g16nXnNeaLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec157Xl9eV16cg15DXqiDXlNeU15XXk9ei15XXqiDXqdec15ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9IjU5OTEzOTg3MTE5MzY1OTA0MTAiPiLXp9eR15zXqiDXlNeV15PXoteV16og15jXp9eh15ggKFdBUCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9Ijc0ODIzMjE5MDIyMDU4MzM4NSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINeV15zXoteR15Mg15TXldeT16LXldeqIFdBUC4g15DXmdep15XXqCDXlteUINeb15XXnNecINeQ16og15TXmdeb15XXnNeqINec16LXp9eV15Eg15DXl9eoINeU15XXk9ei15XXqiDXqdeg16nXnNeX15Ug15DXnNeZ15og15XXnNee15fXldenINeQ15XXqtefINee15HXnNeZINec15TXpteZ15Ig15zXmiDXkNeV16rXny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTbXMiIG1zZ2lkPSI4NzQ1MDg2NTcyMjEzMjcwNDgwIj4i4oCP16fXqNeZ15DXqiDXlNeV15PXoteV16og15TXmNen16HXmCDXqdec15ogKFNNUyDXkNeVIE1NUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXlNeV15PXoteV16ogU01TINeU157XkNeV15fXodeg15XXqiDXkdeY15DXkdec15gg15DXlSDXkdeb16jXmNeZ16Eg15QtU0lNLiDXk9eR16gg15bXlCDXnteq15nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXkNeqINeb15wg15TXldeT16LXldeqINeULVNNUywg15zXnNeQINeU16rXl9ep15HXldeqINeR16rXldeb158g15DXlSDXkdeh15XXk9eZ15XXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY5NTk2NzUzMzQ1NzI0MDU1MCI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXqNeV15Ag15TXldeT16LXldeqIFNNUyDXlNee15DXldeX16HXoNeV16og15HXmNec16TXldefINeQ15Ug15HXm9eo15jXmdehINeULVNJTS4g15PXkdeoINeW15Qg157XqteZ16gg15zXkNek15zXmden16bXmdeUINec16fXqNeV15Ag15DXqiDXm9ecINeU15XXk9ei15XXqiDXlC1TTVMsINec15zXkCDXlNeq15fXqdeR15XXqiDXkdeq15XXm9efINeQ15Ug15HXodeV15PXmdeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNtcyIgbXNnaWQ9IjMyMTY5NTA0NzI2MzYyMTQ3NzQiPiLigI/Xoteo15nXm9eqINeU15XXk9ei15XXqiDXlNeY16fXodeYINep15zXmiAoU01TINeQ15UgTU1TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXm9eq15XXkSDXnNeU15XXk9ei15XXqiBTTVMg15TXnteQ15XXl9eh16DXldeqINeR15jXkNeR15zXmCDXkNeVINeR15vXqNeY15nXoSDXlC1TSU0g16nXnNeaLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec157Xl9eV16cg15DXqiDXlNeU15XXk9ei15XXqiDXqdec15ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjY4NjY4NzA5MDUyMzI4NTY3Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXm9eq15XXkSDXnNeU15XXk9ei15XXqiBTTVMg15TXnteQ15XXl9eh16DXldeqINeR15jXnNek15XXnyDXkNeVINeR15vXqNeY15nXoSDXlC1TSU0g16nXnNeaLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec157Xl9eV16cg15DXqiDXlNeU15XXk9ei15XXqiDXqdec15ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9IjU5OTEzOTg3MTE5MzY1OTA0MTAiPiLigI/Xp9eR15zXqiDXlNeV15PXoteV16og15jXp9eh15ggKFdBUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlV2FwUHVzaCIgbXNnaWQ9Ijc0ODIzMjE5MDIyMDU4MzM4NSI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINeV15zXoteR15Mg15TXldeT16LXldeqIFdBUC4g15DXmdep15XXqCDXlteUINeb15XXnNecINeQ16og15TXmdeb15XXnNeqINec16LXp9eV15Eg15DXl9eoINeU15XXk9ei15XXqiDXqdeg16nXnNeX15Ug15DXnNeZ15og15XXnNee15fXldenINeQ15XXqtefINee15HXnNeZINec15TXpteZ15Ig15zXmiDXkNeV16rXny4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRhc2tzIiBtc2dpZD0iNjQ2NjA5NTM5NjYyMzkzMzkwNiI+IteQ15fXlteV16gg15DXpNec15nXp9em15nXldeqINek16LXmdec15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15DXl9eW16gg157XmdeT16Ig15zXkteR15kg157XqdeZ157XldeqINeU16TXldei15zXldeqINeb16jXkteiINeV16nXpNei15zXlSDXnNeQ15fXqNeV16DXlC4g15nXmdeq15vXnyDXqdeU15PXkdeoINeZ16rXmdeoINec15DXpNec15nXp9em15nXlCDXnNeS15zXldeqINee15nXk9eiINec15LXkdeZINeU15DXpNec15nXp9em15nXldeqINep15HXlNefINeg16LXqdeUINep15nXnteV16kg15HXnteb16nXmdeoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJhY3RBY3Jvc3NVc2VycyIgbXNnaWQ9IjcxMTQyNTUyODE5NDQyMTE2ODIiPiLXkNeZ16DXmNeo15DXp9em15nXlCDXkdeZ158g157Xqdeq157XqdeZ150iPC9zdHJpbmc+CkBAIC0zMTMsNyArMzE4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2luZm8iIG1zZ2lkPSI4NTMyMjk1MTk5MTEyNTE5Mzc4Ij4i15DXl9eW16gg157XmdeT16Ig15fXnNeV158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9IjQ5OTg4MzYzNzA0MjQxODY4NDkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeQ15fXlteoINee15nXk9eiINec15LXkdeZINeU15fXnNeV16DXldeqINee157XoNeU15wg15TXl9ec15XXoNeV16ouINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotep15XXmdeV16og15zXkNeX15bXqCDXnteZ15PXoiDXlNee15nXldei15Mg15zXqdeZ157XldepINee16LXqNeb16og16TXoNeZ157XmS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4Njc1NTM1NjQ4ODA3NDI3Mzg5Ij4i16HXoNefINeQ15nXqNeV16LXmdedIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmlsdGVyX2V2ZW50cyIgbXNnaWQ9IjgwMDYyMzYzMTU4ODgzNDc2ODAiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeo16nXldedINee16HXoNefINen15zXmCDXqdee16HXoNefINeQ16og15TXlteo150g16nXnCDXm9ecINeQ15nXqNeV16LXmSDXlNee16nXqtee16kg15zXpNeg15kg16nXlNedINeg16nXnNeX15nXnS4g15DXpNec15nXp9em15nXlCDXlteT15XXoNeZ16og16LXqdeV15nXlCDXnNep15zXldeYINeRLVVJINep15wg15TXntei16jXm9eqINec15zXkCDXlNeq16LXqNeR15XXqiDXntep16rXntepLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4MDA2MjM2MzE1ODg4MzQ3NjgwIj4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqNep15XXnSDXnteh16DXnyDXp9ec15gg16nXnteh16DXnyDXkNeqINeU15bXqNedINep15wg15vXnCDXkNeZ16jXldei15kg15TXntep16rXntepINec16TXoNeZINep15TXnSDXoNep15zXl9eZ150uINeQ16TXnNeZ16fXpteZ15Qg15bXk9eV16DXmdeqINei16nXldeZ15Qg15zXqdec15XXmCDXkS1VSSDXqdecINeU157Xoteo15vXqiDXnNec15Ag15TXqtei16jXkdeV16og157Xqdeq157XqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjU5NzM2MjY3MzgxNzA2MTg3NzUiPiLXlNeS15PXnNeqINeq16bXldeS15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI3MTIxMjM1Njg0NTE1MDAzNzkyIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeS15PXmdecINeQ16og15TXqteV15vXnyDXqdecINeq16bXldeS15QuINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXqdeg15XXqiDXkNeqINeq15XXm9efINeU16rXpteV15LXlCDXm9eaINep15TXnteb16nXmdeoINeZ15TXpNeV15og15zXkdec16rXmSDXqdee15nXqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NodXRkb3duIiBtc2dpZD0iNzE4NTc0NzgyNDAzODkwOTAxNiI+Iteb15nXkdeV15kg15fXnNen15kiPC9zdHJpbmc+CkBAIC0zMjYsMTAgKzMzMSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iNjAwMzYwMzE2MjU3ODU3NzQwNiI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16DXlNecINee16LXp9eRINeQ15fXqCDXlNeQ15XXpNefINep15HXlSDXlNee16LXqNeb16og157XpNei15nXnNeUINek16LXmdec15XXmdeV16osINeV15zXqdec15XXmCDXkdeVLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec16HXm9efINeQ16og15TXntei16jXm9eqINeb15XXnNeULiDXlNeo16nXkNeUINeW15Ug15DXmdeg15Qg16DXl9eV16bXlCDXnNep15nXnteV16kg16jXkteZ15wsINeQ15zXkCDXnNek15nXqteV15cg15HXnNeR15MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjI1NzYzMzM0MzQ4OTM1MzI0NzUiPiLXqdec15cg16nXmdeT15XXqCDXqdeU15XXodeoINee15fXkdeZ15zXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXk9eoINeU16rXqNeQ15Qg16LXnCDXm9eaINep15fXkdeZ15zXqiDXkNek15zXmden16bXmdeV16og15TXldeh16jXlC4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNeU16nXqtee16kg15HXm9eaINeb15PXmSDXnNeh15LXldeoINeQ16TXnNeZ16fXpteZ15XXqiDXpNei15nXnNeV16og15DXl9eo15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNTY4OTA5NTAwOTAzMDMzNjU5MyI+Itep15zXlyDXqdeZ15PXldeoINep15TXqten15HXnCDXkS1TTVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep15PXqCDXlNeq16jXkNeUINei15wg15vXmiDXqdeU16rXp9eR15zXlCDXlNeV15PXoteqIFNNUy4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNeU16nXqtee16kg15HXm9eaINeb15PXmSDXnNeW15nXmdejINeU15XXk9ei15XXqiBTTVMg16DXm9eg16HXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjMxNDUzNDc0MTMwMjg1ODIzNzEiPiLXqdec15cg16nXmdeT15XXqCDXqdeU16rXp9eR15wg15HXkNee16bXoteV16ogV0FQLVBVU0giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iNDc4MzQwMjUyNTAzOTQ0MjcyOSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXk9eoINeU16rXqNeQ15Qg16LXnCDXm9eaINep15TXqten15HXnNeUINeU15XXk9ei15Qg157XodeV15IgV0FQIFBVU0guINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXlNep16rXntepINeR15vXmiDXm9eT15kg15zXlteZ15nXoyDXp9eR15zXlCDXqdecINeU15XXk9ei15XXqiBNTVMg15DXlSDXm9eT15kg15zXlNeX15zXmdejINeR15fXqdeQ15kg15DXqiDXlNeq15XXm9efINep15wg15PXoyDXkNeZ16DXmNeo16DXmCDXm9ec16nXlNeVINeR15LXmdeo16HXkNeV16og15bXk9eV16DXmdeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjU2ODkwOTUwMDkwMzAzMzY1OTMiPiLigI/Xqdec15cg16nXmdeT15XXqCDXqdeU16rXp9eR15wg15EtU01TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI0MTUyMDM3NzIwMDM0MzY1NDkyIj4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeT16gg15TXqteo15DXlCDXotecINeb15og16nXlNeq16fXkdec15Qg15TXldeT16LXqiBTTVMuINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXlNep16rXntepINeR15vXmiDXm9eT15kg15zXlteZ15nXoyDXlNeV15PXoteV16ogU01TINeg15vXoNeh15XXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSIzMTQ1MzQ3NDEzMDI4NTgyMzcxIj4i4oCP16nXnNeXINep15nXk9eV16gg16nXlNeq16fXkdecINeR15DXntem16LXldeqIFdBUC1QVVNIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjQ3ODM0MDI1MjUwMzk0NDI3MjkiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep15PXqCDXlNeq16jXkNeUINei15wg15vXmiDXqdeU16rXp9eR15zXlCDXlNeV15PXoteUINee16HXldeSIFdBUCBQVVNILiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec15TXqdeq157XqSDXkdeb15og15vXk9eZINec15bXmdeZ16Mg16fXkdec15Qg16nXnCDXlNeV15PXoteV16ogTU1TINeQ15Ug15vXk9eZINec15TXl9ec15nXoyDXkdeX16nXkNeZINeQ16og15TXqteV15vXnyDXqdecINeT16Mg15DXmdeg15jXqNeg15gg15vXnNep15TXlSDXkdeS15nXqNeh15DXldeqINeW15PXldeg15nXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iMjQ1MTg3MzY2NDM2MzY2MjY2NiI+IteU15LXkdecINeQ16og157Xodek16gg15TXqteU15zXmdeb15nXnSDXlNek15XXotec15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjczMTgwNjEzMTQwNDA4Nzk1NDIiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep15zXldeYINei15wg15TXnteh16TXqCDXlNee16jXkdeZINep15wg16rXlNec15nXm9eZ150g16nXmdek16LXnNeVLiDXlNeo16nXkNeUINeW15Ug15zXoteV15zXnSDXkNeZ16DXlCDXoNeX15XXpteUINec15DXpNec15nXp9em15nXldeqINeo15LXmdec15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9IjU1MDk1ODUwNzc5ODc5Njk2NSI+IteQ15nXnNeV16Ug16HXkteZ16jXlCDXqdecINeQ16TXnNeZ16fXpteZ15XXqiDXkdeo16fXoiI8L3N0cmluZz4KQEAgLTM1Myw3ICszNTgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9IjI4MDUxMDMyNDExNTM5MDcxNzQiPiLXqdeg15Qg15DXqiDXnteU15nXqNeV16og15TXlNeg16TXqdeUINeU15LXnNeV15HXnNeZ16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9Ijc2OTAwNjM0Mjg5MjQzNDM1NzEiPiLXlNeo16nXkNeUINeW15Ug157XkNek16nXqNeqINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og157XlNeZ16jXldeqINeU15TXoNek16nXlCDXlNeb15zXnNeZ16ogKNeU16DXpNep15XXqiDXnteU15nXqNeV16og15DXlSDXkNeZ15jXmdeV16og15nXldeq16gpINeR15vXnCDXoteqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iMTI4NjUwNTcxNzA1MDEyMTM3MCI+Iteg15nXlNeV15wg15DXodeZ157Xldeg15kg15DXpNec15nXp9em15nXldeqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iODA0MzQzMTcxMzAxNDM5NTY3MSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15nXpteV16gg15XXnNeg15TXnCDXkNeh15nXnteV16DXmdedINee16nXnNeU150sINeq15XXmiDXoten15nXpNeqINeh15nXk9eV16gg15QtWiDXlNeo15LXmdecINep15zXlNedLiDXlNeo16nXkNeUINeW15Ug15zXoteV15zXnSDXkNeZ16DXlCDXoNeX15XXpteUINec15DXpNec15nXp9em15nXldeqINeo15LXmdec15nXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSI4MDQzNDMxNzEzMDE0Mzk1NjcxIj4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXmdem15XXqCDXldec16DXlNecINeQ16HXmdee15XXoNeZ150g157Xqdec15TXnSwg16rXldeaINei16fXmdek16og16HXmdeT15XXqCDXlC1aINeU16jXkteZ15wg16nXnNeU150uINeU16jXqdeQ15Qg15bXlSDXnNei15XXnNedINeQ15nXoNeUINeg15fXldem15Qg15zXkNek15zXmden16bXmdeV16og16jXkteZ15zXmdedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZnJlZXplU2NyZWVuIiBtc2dpZD0iNDcwODE4MTE4NDQ0MTg4MDE3NSI+IteU16fXpNeQ16og157XodeaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZnJlZXplU2NyZWVuIiBtc2dpZD0iODU1ODkyMzc4OTIyMjY3MDA2NCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXp9ek15nXkCDXkdeQ15XXpNefINeW157XoNeZINeQ16og15TXnteh15og15zXntei15HXqCDXnNee16HXmiDXntec15AuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbmplY3RFdmVudHMiIG1zZ2lkPSIxMzc4NzQ2NTg0MDIzNTg2NjAwIj4i15zXl9elINei15wg157Xp9ep15nXnSDXldep15zXldeYINeR15zXl9em16DXmdedIjwvc3RyaW5nPgpAQCAtMzY5LDE2ICszNzQsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI3OTYwMDY3NjIzMjA5MTExMTM1Ij4i15TXlNeo16nXkNeUINeU15bXlSDXnteQ16TXqdeo16og15zXkdei15zXmdedINec15HXpteiINeQ15nXkteV15Mg15zXntee16nXpyDXlNeo157XlCDXlNei15zXmdeV16DXlCDXqdecINep15nXqNeV16og15TXk9ek16HXlC4g15zXoteV15zXnSDXnNeQINeQ157Xldeo15Qg15zXlNeZ15XXqiDXoNeX15XXpteUINei15HXldeoINeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTcG9vbGVyU2VydmljZSIgbXNnaWQ9IjY4MDc3NjI3ODM3NDQxMjU5NTQiPiLXkNeZ15LXldeTINec16nXmdeo15XXqiDXlNeT16TXodeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFByaW50U3Bvb2xlclNlcnZpY2UiIG1zZ2lkPSIzNjgwNTUyMjg1OTMzMzE4MzcyIj4i157XkNek16nXqNeqINec15HXotec15nXnSDXnNeR16bXoiDXkNeZ15LXldeTINec157Xntep16cg15HXqNee15Qg15TXotec15nXldeg15Qg16nXnCDXqdeZ16jXldeqINeU15PXpNeh15QuINec16LXldec150g15zXkCDXkNee15XXqNeUINec15TXmdeV16og16DXl9eV16bXlCDXoteR15XXqCDXkNek15zXmden16bXmdeV16og16jXkteZ15zXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSIyNzUyNzMxMzAwNDE5NDEwNzI0Ij4i15DXmdeS15XXkyDXnNep15nXqNeV16ogTkZDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSI2MTIwNjQ3NjI5MTc0MDY2ODYyIj4i157XkNek16nXqNeqINec15HXotec15nXnSDXnNeQ15LXkyDXkNeqINeU15DXpNec15nXp9em15nXldeqINeU157Xl9en15XXqiDXm9eo15jXmdeh15nXldeqIE5GQy4g15zXoteV15zXnSDXnNeQINeQ157Xldeo15Qg15zXlNeZ15XXqiDXoNeX15XXpteUINei15HXldeoINeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjI3NTI3MzEzMDA0MTk0MTA3MjQiPiLigI/XkNeZ15LXldeTINec16nXmdeo15XXqiBORkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiLigI/XnteQ16TXqdeo16og15zXkdei15zXmdedINec15DXkteTINeQ16og15TXkNek15zXmden16bXmdeV16og15TXnteX16fXldeqINeb16jXmNeZ16HXmdeV16ogTkZDLiDXnNei15XXnNedINec15Ag15DXnteV16jXlCDXnNeU15nXldeqINeg15fXldem15Qg16LXkdeV16gg15DXpNec15nXp9em15nXldeqINeo15LXmdec15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjczNTgzNzg0MDE5MTUyODc5MzgiPiLXlNeb16TXpNeUINec16nXmdeo15XXqiDXmNen16HXmCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiLXnteQ16TXqdeoINec157Xqdeq157XqSDXnNeZ16bXldeoINeQ15nXkteV15Mg15zXntee16nXpyDXlNeo157XlCDXlNei15zXmdeV16DXlCDXqdecINep15nXqNeV16og15jXp9eh15ggKNec157XqdecLCBTcGVsbENoZWNrZXJTZXJ2aWNlKS4g15TXqNep15DXlCDXlteVINec16LXldec150g15DXmdeg15Qg16DXl9eV16bXlCDXnNeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeZ150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjQ3MDg1OTYwMjExNjE0NzMyNTUiPiLXkNeS15Mg15zXqdeZ16jXldeqIFZQTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+Itee15DXpNep16gg15zXntep16rXntepINec15HXpteiINeQ15nXkteV15Mg15zXntee16nXpyDXkdeo157XlCDXotec15nXldeg15Qg16nXnCDXqdeZ16jXldeqIFZQTi4g15TXqNep15DXlCDXlteVINec16LXldec150g15DXmdeg15Qg16DXl9eV16bXlCDXnNeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeZ150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iODE1MTk2ODkxMDk3Mzk5ODY3MCI+IuKAj9ee15DXpNep16gg15zXntep16rXntepINec15nXpteV16gg15DXmdeS15XXkyDXnNee157XqdenINeU16jXnteUINeU16LXnNeZ15XXoNeUINep15wg16nXmdeo15XXqiDXmNen16HXmCAo15zXntep15wsIFNwZWxsQ2hlY2tlclNlcnZpY2UpLiDXlNeo16nXkNeUINeW15Ug15zXoteV15zXnSDXkNeZ16DXlCDXoNeX15XXpteUINec15DXpNec15nXp9em15nXldeqINeo15LXmdec15nXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iNDcwODU5NjAyMTE2MTQ3MzI1NSI+IuKAj9eQ15LXkyDXnNep15nXqNeV16ogVlBOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i4oCP157XkNek16nXqCDXnNee16nXqtee16kg15zXkdem16Ig15DXmdeS15XXkyDXnNee157XqdenINeR16jXnteUINei15zXmdeV16DXlCDXqdecINep15nXqNeV16ogVlBOLiDXlNeo16nXkNeUINeW15Ug15zXoteV15zXnSDXkNeZ16DXlCDXoNeX15XXpteUINec15DXpNec15nXp9em15nXldeqINeo15LXmdec15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i16fXqdeV16gg15zXmNek15giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+Itee15DXpNep16gg15zXntep16rXntepINec15HXpteiINeQ15nXkteV15Mg15zXntee16nXpyDXlNeo157XlCDXlNei15zXmdeV16DXlCDXqdecINeY16TXmC4g15TXqNep15DXlCDXlteVINec16LXldec150g15DXmdeg15Qg16DXl9eV16bXlCDXnNeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeZ150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i15TXm9ek16TXlCDXnNep15nXqNeV16ogV2lkZ2V0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+Itee15DXpNep16gg15zXntep16rXntepINec15HXpteiINeQ15nXkteV15Mg15zXntee16nXpyDXlNeo157XlCDXlNei15zXmdeV16DXlCDXqdecINep15nXqNeV16ogV2lkZ2V0LiDXlNeo16nXkNeUINeW15Ug15zXoteV15zXnSDXkNeZ16DXlCDXoNeX15XXpteUINec15DXpNec15nXp9em15nXldeqINeo15LXmdec15nXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IteQ15nXkteV15Mg15zXpteSINee16jXldeX16ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLXlNeo16nXkNeUINeW15Ug157XkNek16nXqNeqINec157Xqdeq157XqSDXnNeR16bXoiDXkNeZ15LXldeTINec157Xntep16cg15TXqNee15Qg15TXotec15nXldeg15Qg16nXnCDXpteSINeo15fXldenLiDXnNei15XXnNedINeQ15nXoNeUINeQ157Xldeo15Qg15zXlNeZ15XXqiDXoNeX15XXpteUINec15DXpNec15nXp9em15nXldeqINeo15LXmdec15XXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLigI/XlNeb16TXpNeUINec16nXmdeo15XXqiBXaWRnZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i4oCP157XkNek16nXqCDXnNee16nXqtee16kg15zXkdem16Ig15DXmdeS15XXkyDXnNee157XqdenINeU16jXnteUINeU16LXnNeZ15XXoNeUINep15wg16nXmdeo15XXqiBXaWRnZXQuINeU16jXqdeQ15Qg15bXlSDXnNei15XXnNedINeQ15nXoNeUINeg15fXldem15Qg15zXkNek15zXmden16bXmdeV16og16jXkteZ15zXmdedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+Iten15nXmdedINeQ15nXoNeY16jXkNen16bXmdeUINei150g157XoNeU15wg15TXnteb16nXmdeoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4i157XkNek16nXqCDXnNee16nXqtee16kg15zXqdec15XXlyDXm9eV15XXoNeV16og15zXnteg15TXnCDXlNeq16fXoNeZ150uINeU16jXqdeQ15Qg15bXlSDXnNei15XXnNedINeQ15nXoNeUINeg15fXldem15Qg15zXkNek15zXmden16bXmdeV16og16jXkteZ15zXmdedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNDI0ODgyODkwMDA0NTgwODcyMiI+IteU15XXodek15Qg15DXlSDXlNeh16jXlCDXqdecINee16DXlNec15kg157Xm9ep15nXqCI8L3N0cmluZz4KQEAgLTM4OSwxMyArMzk2LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQb2ludGVyU3BlZWQiIG1zZ2lkPSI2ODY2NTYzMjM0Mjc0MTA0MjMzIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINeU157XlNeZ16jXldeqINep15wg157XpteR15nXoiDXlNei15vXkdeoINeQ15Ug15zXldeXINeU157XkteiINeR15vXnCDXoteqLiDXkNek15zXmden16bXmdeV16og16jXkteZ15zXldeqINec15Ag15DXnteV16jXmdedINec16LXldec150g15zXlNeW15PXp9enINec15TXqNep15DXlCDXlteVLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI0Nzc4NzMxNzAzNjAwOTA5MzQwIj4i16nXoNeUINeQ16og16TXqNeZ16HXqiDXlNee16fXnNeT16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRLZXlib2FyZExheW91dCIgbXNnaWQ9Ijg0ODAwMTY3NzExMzQxNzU4NzkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og16TXqNeZ16HXqiDXlNee16fXnNeT16ouINeU16jXqdeQ15Qg15bXlSDXnNei15XXnNedINeQ15nXoNeUINeQ157Xldeo15Qg15zXlNeZ15XXqiDXoNeX15XXpteUINei15HXldeoINeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+Itep15zXmdeX16og15DXldeq15XXqiBMaW51eCDXnNeQ16TXnNeZ16fXpteZ15XXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ1MzkwMDI5OTE5NDczNzY2NTkiPiLigI/Xqdec15nXl9eqINeQ15XXqteV16ogTGludXgg15zXkNek15zXmden16bXmdeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDg5Njk5MjA3OTE4MjY0OTE0MSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15HXp9epINep15TXkNeV16og16nXoNen15zXmCDXmdeZ16nXnNeXINec15vXnCDXlNeq15TXnNeZ15vXmdedINeU157Xqtee16nXm9eZ150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4i15TXkteT16jXqiDXlNeQ16TXnNeZ16fXpteZ15Qg15zXpNei15XXnCDXqtee15nXkyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODUyNTE4OTI3MjMyOTA4NjEzNyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXpNeV15og15fXnNen15nXnSDXntee16DXlSDXnNen15HXldei15nXnSDXkdeW15nXm9eo15XXny4g16TXoteV15zXlCDXlteVINei16nXldeZ15Qg15zXlNeS15HXmdecINeQ16og15TXlteZ15vXqNeV158g15TXltee15nXnyDXnNeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXmdedINeV15zXlNeQ15gg15DXqiDXpNei15XXnNeqINeU15jXkNeR15zXmC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0Mzg0NzYwMDQ3NTA4Mjc4MjcyIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNek15XXmiDXl9ec16fXmdedINee157XoNeVINec16fXkdeV16LXmdedINeR15bXmdeb16jXldefLiDXpNei15XXnNeUINeW15Ug16LXqdeV15nXlCDXnNeU15LXkdeZ15wg15DXqiDXlNeW15nXm9eo15XXnyDXlNeW157XmdefINec15DXpNec15nXp9em15nXldeqINeQ15fXqNeZ150g15XXnNeU15DXmCDXkNeqINek16LXldec16og15TXmNec16TXldefLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSIxODQzODUxMjk1Mzc3MDU5MzgiPiLXnteX15nXp9eqINeQ16TXnNeZ16fXpteZ15XXqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iNzQxMTQ4MDI3NTE2NzIwNTA4MSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec157Xl9eV16cg15fXkdeZ15zXldeqIEFuZHJvaWQuINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXlNep16rXntepINeR15vXmiDXm9eT15kg15zXnteX15XXpyDXkNek15zXmden16bXmdeV16og15fXqdeV15HXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RlbGV0ZVBhY2thZ2VzIiBtc2dpZD0iNzQxMTQ4MDI3NTE2NzIwNTA4MSI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec157Xl9eV16cg15fXkdeZ15zXldeqIEFuZHJvaWQuINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXlNep16rXntepINeR15vXmiDXm9eT15kg15zXnteX15XXpyDXkNek15zXmden16bXmdeV16og15fXqdeV15HXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjI3NDEwOTE5MTg0NTg0Mjc1NiI+Itee15fXmden16og16DXqteV16DXmdedINep15wg15DXpNec15nXp9em15nXldeqINeQ15fXqNeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcFVzZXJEYXRhIiBtc2dpZD0iNDYyNTMyMzY4NDEyNTQ1OTQ4OCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16DXp9eV16og15DXqiDXoNeq15XXoNeZINeU157Xqdeq157XqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4i157Xl9eZ16fXqiDXp9eR16bXmdedINep157Xldeo15nXnSDXqdecINeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXldeqIjwvc3RyaW5nPgpAQCAtNDAzLDcgKzQxMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iNzQ3MjkyMTc2ODM1Nzk4MTk4NiI+Itee15PXmdeT16og16DXpNeXINeU15DXl9eh15XXnyDXqdecINeQ16TXnNeZ16fXpteZ15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iMzkyMTA2ODE1NDQyMDczODI5NiI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15DXl9eW16gg15DXqiDXlNen15XXkywg15TXoNeq15XXoNeZ150sINeV15LXldeT15zXmSDXlNen15HXpteZ150g15TXqdee15XXqNeZ150g16nXnNeVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSIyMTk5MTI4NDgyODIwMzA2OTI0Ij4i15TXqten16DXlCDXmdep15nXqNeUINep15wg15DXpNec15nXp9em15nXldeqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iNTYyODUzMDk3MjU0ODA3MTI4NCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXqten15nXnyDXl9eR15nXnNeV16ogQW5kcm9pZCDXl9eT16nXldeqINeQ15Ug157XoteV15PXm9eg15XXqi4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNeU16nXqtee16kg15HXm9eaINeb15PXmSDXnNeU15XXodeZ16Mg15DXpNec15nXp9em15nXldeqINeX15PXqdeV16og15HXotec15kg15TXqNep15DXldeqINeW15Qg15vXk9eZINec15TXldeh15nXoyDXkNek15zXmden16bXmdeV16og15fXk9ep15XXqiDXotedINeU16jXqdeQ15XXqiDXqNeR15XXqi3XoteV16bXnteUINeQ16fXqNeQ15nXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16rXp9eZ158g15fXkdeZ15zXldeqIEFuZHJvaWQg15fXk9ep15XXqiDXkNeVINee16LXldeT15vXoNeV16ouINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXlNep16rXntepINeR15vXmiDXm9eT15kg15zXlNeV16HXmdejINeQ16TXnNeZ16fXpteZ15XXqiDXl9eT16nXldeqINeR16LXnNeZINeU16jXqdeQ15XXqiDXlteUINeb15PXmSDXnNeU15XXodeZ16Mg15DXpNec15nXp9em15nXldeqINeX15PXqdeV16og16LXnSDXlNeo16nXkNeV16og16jXkdeV16ot16LXldem157XlCDXkNen16jXkNeZ15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwQ2FjaGUiIG1zZ2lkPSI3NDg3Mjc5MzkxNzIzNTI2ODE1Ij4i157Xl9eZ16fXqiDXm9ecINeU16DXqteV16DXmdedINeR16fXkdem15nXnSDXqdee15XXqNeZ150g16nXnCDXkNek15zXmden16bXmdeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTc0NjQwODcxOTQ1NDM0NTY1Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeX16jXqCDXqdeY15cg15DXl9eh15XXnyDXkdeY15DXkdec15gg16LXnCDXmdeT15kg157Xl9eZ16fXqiDXp9eR16bXmdedINeR16HXpNeo15nXldeqINeU16fXkdem15nXnSDXlNep157Xldeo15nXnSDXqdecINeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXldeqLiDXlNeT15HXqCDXotep15XXmSDXnNeS16jXldedINec15TXpNei15zXlCDXqdecINeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXldeqINec15TXmdeV16og15DXmdeY15nXqiDXmdeV16rXqCDXnteb15nXldeV158g16nXotec15nXlNedINec15DXl9eW16gg157Xl9eT16kg15DXqiDXlNeg16rXldeg15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjQ1OTQ0MTAyMTk1NjQzNjc3OSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16TXoNeV16og16nXmNeXINeQ15fXodeV158g15HXmNec16TXldefINei15wg15nXk9eZINee15fXmden16og16fXkdem15nXnSDXkdeh16TXqNeZ15XXqiDXlNen15HXpteZ150g15TXqdee15XXqNeZ150g16nXnCDXkNek15zXmden16bXmdeV16og15DXl9eo15XXqi4g15TXk9eR16gg16LXqdeV15kg15zXkteo15XXnSDXnNeU16TXotec15Qg16nXnCDXkNek15zXmden16bXmdeV16og15DXl9eo15XXqiDXnNeU15nXldeqINeQ15nXmNeZ16og15nXldeq16gg157Xm9eZ15XXldefINep16LXnNeZ15TXnSDXnNeQ15fXlteoINee15fXk9epINeQ16og15TXoNeq15XXoNeZ150uIjwvc3RyaW5nPgpAQCAtNDE1LDkgKzQyMiw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI3MTU4MDU1NTU4MjM4ODE4MTgiPiLXqdeZ157XldepINeR15vXnCDXntek16LXoNeXINee15PXmdeUINep15TXldeQINec15TXpNei15zXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI4MjgzOTEyNDg4NDMzMTg5MDEwIj4i15TXqNep15DXlCDXlteVINee15DXpNep16jXqiDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNep16rXntepINeR15vXnCDXntek16LXoNeXINee15PXmdeUINee15XXqten158g15vXk9eZINec15HXpteiINek16LXoNeV15cg15zXlNep157XoteULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQ2FDZXJ0aWZpY2F0ZXMiIG1zZ2lkPSIxNjc4MzkxODk2Nzg2ODgyMDE0Ij4i16DXmdeU15XXnCDXpNeo15jXmSDXm9eg15nXodeUINee15TXmdee16DXmdedIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQ2FDZXJ0aWZpY2F0ZXMiIG1zZ2lkPSI0MDE1NjQ0MDQ3MTk2OTM3MDE0Ij4i157XkNek16nXqNeqINec15DXpNec15nXp9em15nXlCDXnNeU16rXp9eZ158g15XXnNeU16HXmdeoINeQ15nXqdeV16jXmSBDQSDXm9ek16jXmNeZINeb16DXmdeh15Qg157XlNeZ157XoNeZ150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kaWFnbm9zdGljIiBtc2dpZD0iODA3Njc0Mzk1MzkwODAwMDM0MiI+Iten16jXkC/Xm9eq15XXkSDXkdee16nXkNeR15nXnSDXkdeR16LXnNeV16ogZGlhZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RpYWdub3N0aWMiIG1zZ2lkPSI2NjA4Mjk1NjkyMDAyNDUyMjgzIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXldec15vXqteV15Eg15HXm9ecINee16nXkNeRINep15HXkdei15zXldeqINen15HXldem16og15QtZGlhZzsg15zXk9eV15LXnteULCDXp9eR16bXmdedINeRLeKAji9kZXYuINek16LXldec15Qg15bXlSDXotep15XXmdeUINec15TXqdek15nXoiDXotecINeU15nXpteZ15HXldeqINeV15TXkNeR15jXl9eUINep15wg15TXntei16jXm9eqLiDXkNek16nXqNeV16og15bXlSDXpteo15nXm9eUINec16nXntepINeo16cg15DXqiDXlNeZ16bXqNefINeQ15Ug15TXntek16LXmdecLCDXnNem15XXqNeaINeQ15HXl9eV16DXmdedINeh16TXpteZ16TXmdeZ150g15zXl9eV157XqNeULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iNDAxNTY0NDA0NzE5NjkzNzAxNCI+IuKAj9ee15DXpNep16jXqiDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeq16fXmdefINeV15zXlNeh15nXqCDXkNeZ16nXldeo15kgQ0Eg15vXpNeo15jXmSDXm9eg15nXodeUINee15TXmdee16DXmdedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlhZ25vc3RpYyIgbXNnaWQ9IjgwNzY3NDM5NTM5MDgwMDAzNDIiPiLigI/Xp9eo15Av15vXqteV15Eg15HXntep15DXkdeZ150g15HXkdei15zXldeqIGRpYWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaWFnbm9zdGljIiBtc2dpZD0iNjYwODI5NTY5MjAwMjQ1MjI4MyI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXqNeV15Ag15XXnNeb16rXldeRINeR15vXnCDXntep15DXkSDXqdeR15HXotec15XXqiDXp9eR15XXpteqINeULWRpYWc7INec15PXldeS157XlCwg16fXkdem15nXnSDXkS3igI4vZGV2LiDXpNei15XXnNeUINeW15Ug16LXqdeV15nXlCDXnNeU16nXpNeZ16Ig16LXnCDXlNeZ16bXmdeR15XXqiDXldeU15DXkdeY15fXlCDXqdecINeU157Xoteo15vXqi4g15DXpNep16jXldeqINeW15Ug16bXqNeZ15vXlCDXnNep157XqSDXqNenINeQ16og15TXmdem16jXnyDXkNeVINeU157XpNei15nXnCwg15zXpteV16jXmiDXkNeR15fXldeg15nXnSDXodek16bXmdek15nXmdedINec15fXldee16jXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBtc2dpZD0iNjMzNTU3Njc3NTcxMTA5NTkzMSI+IteU16TXotec15Qg15DXlSDXlNep15HXqteUINep15wg16jXm9eZ15HXmSDXkNek15zXmden16bXmdeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODg4NzQzNTc0MDk4MjIzNzI5NCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXntem15Eg15TXlNek16LXnNeUINep15wg16jXm9eZ15Eg15HXkNek15zXmden16bXmdeUINeQ15fXqNeqLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec15TXqdeq157XqSDXkdeb15og15vXk9eZINec15TXqdeR15nXqiDXmdeb15XXnNeV16og15fXqdeV15HXldeqINep15wg15TXmNeQ15HXnNeYLiDXmdepINec16DXlNeV15Ig15HXlNeo16nXkNeUINeW15Ug15HXlteU15nXqNeV16osINee15vXmdeV15XXnyDXqdeU15nXkCDXmdeb15XXnNeUINec15TXkdeZ15Ag16jXm9eZ15HXmSDXkNek15zXmden16bXmdeV16og15zXntem15Eg15zXkCDXqdee15nXqSwg15zXkCDXoten15HXmSDXkNeVINec15Ag15nXpteZ15EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODI3MjMyNDg0NDE2NTA1NjE1Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINee16bXkSDXlNeU16TXotec15Qg16nXnCDXqNeb15nXkSDXkdeQ16TXnNeZ16fXpteZ15Qg15DXl9eo16ouINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXlNep16rXntepINeR15vXmiDXm9eT15kg15zXlNep15HXmdeqINeZ15vXldec15XXqiDXl9ep15XXkdeV16og16nXnCDXlNeY15zXpNeV158uINeZ16kg15zXoNeU15XXkiDXkdeU16jXqdeQ15Qg15bXlSDXkdeW15TXmdeo15XXqiwg157Xm9eZ15XXldefINep15TXmdeQINeZ15vXldec15Qg15zXlNeR15nXkCDXqNeb15nXkdeZINeQ16TXnNeZ16fXpteZ15XXqiDXnNee16bXkSDXnNeQINep157XmdepLCDXnNeQINei16fXkdeZINeQ15Ug15zXkCDXmdem15nXkS4iPC9zdHJpbmc+CkBAIC00MjksOCArNDM2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSI3Nzc1NzIzNDQxNTU4OTA3MTgxIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINeg16rXldeg15kg15TXkteT16jXldeqINeU157Xoteo15vXqi4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNep15HXqSDXkNeqINeq16bXldeo16og15TXntei16jXm9eqINep15zXmi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSIyMDQ2NzYyNTE4NzY3MTgyODgiPiLXqdeg15Qg15DXqiDXlNeS15PXqNeV16og15TXntei16jXm9eqINeU157XkNeV15HXmNeX16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iODE1OTUzNTYxMzAyMDEzNzM5MSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXoNeq15XXoNeZINeU15TXkteT16jXldeqINeU157XkNeV15HXmNeX15nXnSDXqdecINeU157Xoteo15vXqi4g15zXkCDXnteZ15XXoteTINec16nXmdee15XXqSDXotecINeZ15PXmSDXkNek15zXmden16bXmdeV16og16jXkteZ15zXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIyMTQ5NDI2NjY0MjI2MTUyMTg1Ij4i16nXoNeUINeQ16og157XpNeqINeU16nXmdeo15XXqteZ150g16nXnCBHb29nbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og157XpNeqINep15nXqNeV16rXmSBHb29nbGUuINec15Ag157XmdeV16LXkyDXnNep15nXnteV16kg16LXnCDXmdeT15kg15DXpNec15nXp9em15nXldeqINeo15LXmdec15XXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR3NlcnZpY2VzIiBtc2dpZD0iMjE0OTQyNjY2NDIyNjE1MjE4NSI+IuKAj9ep16DXlCDXkNeqINee16TXqiDXlNep15nXqNeV16rXmdedINep15wgR29vZ2xlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIxMjg3MzA5NDM3NjM4MzgwMjI5Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINee16TXqiDXqdeZ16jXldeq15kgR29vZ2xlLiDXnNeQINee15nXldei15Mg15zXqdeZ157XldepINei15wg15nXk9eZINeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlQm9vdENvbXBsZXRlZCIgbXNnaWQ9IjUzMTI5NjU1NjU5ODc4MDAwMjUiPiLXlNek16LXnNeUINeR16LXqiDXkNeq15fXldecIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczOTAzMDQ2NjQxMTY4ODA3MDQiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16TXoteZ15wg15DXqiDXotem157XlSDXnteZ15Mg16LXnSDXodeZ15XXnSDXqteU15zXmdeaINeU15DXqteX15XXnCDXqdecINeU157Xoteo15vXqi4g157XqdeV150g15vXmiDXlNek16LXnNeqINeU15jXkNeR15zXmCDXotep15XXmdeUINec15TXqteQ16jXmiDXldeU15DXpNec15nXp9em15nXlCDXotec15XXnNeUINec15TXkNeYINeQ16og15TXpNei15nXnNeV16og15TXm9ec15zXmdeqINep15wg15TXmNeQ15HXnNeYLCDXkdep15wg16TXoteZ15zXldeq15Qg15TXqtee15nXk9eZ16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MTM5NTA1ODkxMDI2MTc1MDQiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16TXoteZ15wg15DXqiDXotem157XlSDXnteZ15Mg16LXnSDXlNep15zXnteqINeq15TXnNeZ15og15TXkNeq15fXldecINep15wg15TXntei16jXm9eqLiDXntep15XXnSDXm9eaINeU16TXotec16og15TXmNec16TXldefINei16nXldeZ15Qg15zXlNeq15DXqNeaINeV15TXkNek15zXmden16bXmdeUINei15zXldec15Qg15zXlNeQ15gg15DXqiDXlNek16LXmdec15XXqiDXlNeb15zXnNeZ16og16nXnCDXlNeY15zXpNeV158sINeR16nXnCDXpNei15nXnNeV16rXlCDXlNeq157XmdeT15nXqi4iPC9zdHJpbmc+CkBAIC00NjQsMjMgKzQ3MSwyNSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXldeh15nXoywg15zXlNeh15nXqCDXldec16nXoNeV16og15DXmdeo15XXoteZ150g16nXkNeq15Qg15nXm9eV15wg15zXqdeg15XXqiDXkdeY15DXkdec15gsINeb15XXnNecINeQ15zXlCDXqdecINeX15HXqNeZ150g15DXlSDXotee15nXqteZ150g15zXoteR15XXk9eULiDXlNeT15HXqCDXotep15XXmSDXnNeU16rXmdeoINec15DXpNec15nXp9em15nXlCDXnNep15zXldeXINeU15XXk9ei15XXqiDXlNeg16jXkNeV16og15vXkNeZ15zXlSDXqdeg16nXnNeX15Ug157Xkdei15zXmSDXnNeV15cg16nXoNeUINeQ15Ug15zXqdeg15XXqiDXkNeZ16jXldei15nXnSDXnNec15Ag15nXk9eZ16LXqiDXlNeR16LXnNeZ150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIzMjQ0Njk0OTYzMjcyNDkzNzYiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU15XXodeZ16MsINec15TXodeZ16gg15XXnNep16DXldeqINeQ15nXqNeV16LXmdedINep15DXqteUINeZ15vXldecINec16nXoNeV16og15HXmNec16TXldefLCDXm9eV15zXnCDXkNec15Qg16nXnCDXl9eR16jXmdedINeQ15Ug16LXnteZ16rXmdedINec16LXkdeV15PXlC4g15TXk9eR16gg16LXqdeV15kg15zXlNeq15nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdec15XXlyDXlNeV15PXoteV16og15TXoNeo15DXldeqINeb15DXmdec15Ug16nXoNep15zXl9eVINee15HXotec15kg15zXldeXINep16DXlCDXkNeVINec16nXoNeV16og15DXmdeo15XXoteZ150g15zXnNeQINeZ15PXmdei16og15TXkdei15zXmdedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iODY4ODMzNDk3NDAzNjgyMzMzMCI+Item15XXqCDXnten15XXqNeV16og157Xmden15XXnSDXnteT15XXnteZ150g15zXpteV16jXmiDXkdeT15nXp9eUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+Item15XXqCDXnten15XXqNeV16og157Xmden15XXnSDXnteT15XXnteZ150g15zXkdeT15nXp9eULCDXkNeVINeU16rXp9efINeh16TXpyDXnteZ16fXldedINeX15PXqS4g16TXoteV15zXlCDXlteVINee15DXpNep16jXqiDXnNeQ16TXnNeZ16fXpteZ15Qg15zXoten15XXoyDXkNeqINeU157Xmden15XXnSDXlS/XkNeVINeU16HXmNeY15XXoSDXlNee15XXl9eW16jXmdedINei15wg15nXk9eZINee16fXldeo15XXqiDXnteZ16fXldedINeQ15fXqNeZ150g15vXnteVIEdQUyDXkNeVINeh16TXp9eZINee15nXp9eV150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IuKAj9em15XXqCDXnten15XXqNeV16og157Xmden15XXnSDXnteT15XXnteZ150g15zXkdeT15nXp9eULCDXkNeVINeU16rXp9efINeh16TXpyDXnteZ16fXldedINeX15PXqS4g16TXoteV15zXlCDXlteVINee15DXpNep16jXqiDXnNeQ16TXnNeZ16fXpteZ15Qg15zXoten15XXoyDXkNeqINeU157Xmden15XXnSDXlS/XkNeVINeU16HXmNeY15XXoSDXlNee15XXl9eW16jXmdedINei15wg15nXk9eZINee16fXldeo15XXqiDXnteZ16fXldedINeQ15fXqNeZ150g15vXnteVIEdQUyDXkNeVINeh16TXp9eZINee15nXp9eV150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSIyODM2MzA4MDc2NzIwNTUzODM3Ij4i15LXmdep15Qg15zXpNen15XXk9eV16og16HXpNenINee15nXp9eV150g16DXldeh16TXldeqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iNTk0NTE2NjY0MjMzNTgwMDc2MyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15LXqdeqINec16TXp9eV15PXldeqINeg15XXodek15XXqiDXqdecINeh16TXpyDXqdeZ16jXldeqINeU157Xmden15XXnS4g15DXmdep15XXqCDXlteUINei16nXldeZINec15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXkdepINeQ16og16TXoteV15zXqiDXlC1HUFMg15DXlSDXnten15XXqNeV16og157Xmden15XXnSDXkNeX16jXmdedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeS16nXqiDXnNek16fXldeT15XXqiDXoNeV16HXpNeV16og16nXnCDXodek16cg16nXmdeo15XXqiDXlNee15nXp9eV150uINeQ15nXqdeV16gg15bXlCDXotep15XXmSDXnNeQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep15HXqSDXkNeqINek16LXldec16og15QtR1BTINeQ15Ug157Xp9eV16jXldeqINee15nXp9eV150g15DXl9eo15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iNjU3ODEwMTE5OTgyNTE5Mzg3MyI+IteU16jXqdeQ15Qg15zXlNeq16fXmdefINeh16TXpyDXnteZ16fXldedIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI5MDY2MTQ2MTIwNDcwNTkxNTA5Ij4i16bXldeoINee16fXldeo15XXqiDXnteZ16fXldedINee15PXldee15nXnSDXnNeR15PXmden15QsINeQ15Ug15TXqten158g16HXpNenINee15nXp9eV150g15fXk9epLiDXpNei15XXnNeUINeW15Ug157XkNek16nXqNeqINec15DXpNec15nXp9em15nXlCDXnNei16fXldejINeQ16og15TXnteZ16fXldedINeVL9eQ15Ug15TXodeY15jXldehINeU157XldeX15bXqNeZ150g16LXnCDXmdeT15kg157Xp9eV16jXldeqINee15nXp9eV150g15DXl9eo15nXnSDXm9ee15UgR1BTINeQ15Ug16HXpNen15kg157Xmden15XXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiLXnteZ16fXldedINee15PXldeZ16cgKNee15HXldeh16EgR1BTINeV16jXqdeqKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjUyOTUwNDc1NjM1NjQ5ODEyNTAiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen15HXnCDXkNeqINeU157Xmden15XXnSDXlNee15PXldeZ16cg16nXnNeaINeR15DXntem16LXldeqINee16LXqNeb16og15TXnteZ16fXldedINeU15LXnNeV15HXnNeZ16ogKEdQUykg15DXlSDXnten15XXqNeV16og157Xmden15XXnSDXkdeo16nXqiDXm9eS15XXnyDXkNeg15jXoNeV16og16HXnNeV15zXqNeZ15XXqiDXlS1XaS1GaS4g16nXmdeo15XXqteZINee15nXp9eV150g15DXnNeUINeX15nXmdeR15nXnSDXnNeU15nXldeqINee15XXpNei15zXmdedINeV16DXkteZ16nXmdedINec157Xm9ep15nXqCDXqdec15og15vXk9eZINep15TXkNek15zXmden16bXmdeUINeq16nXqtee16kg15HXlNedLiDXmdeZ16rXm9efINep15DXpNec15nXp9em15nXldeqINeZ16LXqdeVINeR15vXmiDXqdeZ157XldepINeb15PXmSDXnNen15HXldeiINeU15nXm9efINeQ16rXlCDXoNee16bXkCDXldec15LXqNeV150g15zXpteo15nXm9eqINeh15XXnNec15Qg157XldeS15HXqNeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+IuKAj9em15XXqCDXnten15XXqNeV16og157Xmden15XXnSDXnteT15XXnteZ150g15zXkdeT15nXp9eULCDXkNeVINeU16rXp9efINeh16TXpyDXnteZ16fXldedINeX15PXqS4g16TXoteV15zXlCDXlteVINee15DXpNep16jXqiDXnNeQ16TXnNeZ16fXpteZ15Qg15zXoten15XXoyDXkNeqINeU157Xmden15XXnSDXlS/XkNeVINeU16HXmNeY15XXoSDXlNee15XXl9eW16jXmdedINei15wg15nXk9eZINee16fXldeo15XXqiDXnteZ16fXldedINeQ15fXqNeZ150g15vXnteVIEdQUyDXkNeVINeh16TXp9eZINee15nXp9eV150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSIxMTkxODk4MDYxOTY1MjczMzcyIj4i4oCP157Xmden15XXnSDXnteT15XXmdenICjXnteR15XXodehIEdQUyDXldeo16nXqikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg15DXqiDXlNee15nXp9eV150g15TXnteT15XXmdenINep15zXmiDXkdeQ157Xptei15XXqiDXntei16jXm9eqINeU157Xmden15XXnSDXlNeS15zXldeR15zXmdeqIChHUFMpINeQ15Ug157Xp9eV16jXldeqINee15nXp9eV150g15HXqNep16og15vXkteV158g15DXoNeY16DXldeqINeh15zXldec16jXmdeV16og15UtV2ktRmkuINep15nXqNeV16rXmSDXnteZ16fXldedINeQ15zXlCDXl9eZ15nXkdeZ150g15zXlNeZ15XXqiDXnteV16TXotec15nXnSDXldeg15LXmdep15nXnSDXnNee15vXqdeZ16gg16nXnNeaINeb15PXmSDXqdeU15DXpNec15nXp9em15nXlCDXqtep16rXntepINeR15TXnS4g15nXmdeq15vXnyDXqdeQ16TXnNeZ16fXpteZ15XXqiDXmdei16nXlSDXkdeb15og16nXmdee15XXqSDXm9eT15kg15zXp9eR15XXoiDXlNeZ15vXnyDXkNeq15Qg16DXntem15Ag15XXnNeS16jXldedINec16bXqNeZ15vXqiDXodeV15zXnNeUINee15XXkteR16jXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iNDg4Nzg5NTM2MjM1NDIzOTYyOCI+Itee15nXp9eV150g157XqdeV16LXqCAo157XkdeV16HXoSDXqNep16opIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSIyNTM4MjAwMTg0MzczMzAyMjk1Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg15DXqiDXnteZ16fXldee15og15TXntep15XXoteoLiDXnteZ16fXldedINeW15Qg16DXkteW16gg16LXnC3XpNeZINep15nXqNeV16rXmSDXnteZ16fXldedINeU16LXldep15nXnSDXqdeZ157XldepINeR157Xp9eV16jXldeqINee15nXp9eV150g15HXqNep16osINeb15LXldefINeQ16DXmNeg15XXqiDXodec15XXnNeo15nXldeqINeVLVdpLUZpLiDXqdeZ16jXldeq15kg157Xmden15XXnSDXkNec15Qg15fXmdeZ15HXmdedINec15TXmdeV16og157Xldek16LXnNeZ150g15XXoNeS15nXqdeZ150g15zXnteb16nXmdeoINep15zXmiDXm9eT15kg16nXlNeQ16TXnNeZ16fXpteZ15Qg16rXqdeq157XqSDXkdeU150uINeZ15nXqteb158g16nXkNek15zXmden16bXmdeV16og15nXotep15Ug15HXm9eaINep15nXnteV16kg15vXk9eZINec16fXkdeV16Ig15DXqiDXnteZ16fXldee15og15TXntep15XXoteoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIyMzYzOTY5NjQxNzkyMzg4OTQ3Ij4i15LXmdep15Qg15wtU3VyZmFjZUZsaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16nXqtee16kg15HXqteb15XXoNeV16og15HXqNee15Qg15TXoNee15XXm9eUINep15wgU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSIyNTM4MjAwMTg0MzczMzAyMjk1Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg15DXqiDXnteZ16fXldee15og15TXntep15XXoteoLiDXnteZ16fXldedINeW15Qg16DXkteW16gg16LXnC3XpNeZINep15nXqNeV16rXmSDXnteZ16fXldedINeU16LXldep15nXnSDXqdeZ157XldepINeR157Xp9eV16jXldeqINee15nXp9eV150g15HXqNep16osINeb15LXldefINeQ16DXmNeg15XXqiDXodec15XXnNeo15nXldeqINeVLVdpLUZpLiDXqdeZ16jXldeq15kg157Xmden15XXnSDXkNec15Qg15fXmdeZ15HXmdedINec15TXmdeV16og157Xldek16LXnNeZ150g15XXoNeS15nXqdeZ150g15zXnteb16nXmdeoINep15zXmiDXm9eT15kg16nXlNeQ16TXnNeZ16fXpteZ15Qg16rXqdeq157XqSDXkdeU150uINeZ15nXqteb158g16nXkNek15zXmden16bXmdeV16og15nXotep15Ug15HXm9eaINep15nXnteV16kg15vXk9eZINec16fXkdeV16Ig15DXqiDXnteZ16fXldee15og15TXntep15XXoteoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIyMzYzOTY5NjQxNzkyMzg4OTQ3Ij4i4oCP15LXmdep15Qg15wtU3VyZmFjZUZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16nXqtee16kg15HXqteb15XXoNeV16og15HXqNee15Qg15TXoNee15XXm9eUINep15wgU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4i15DXl9eh15XXnyDXltee16DXmSDXqdecINee16HXkteo16og16fXqNeZ15DXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen16jXldeQINeQ16og15TXqteV15vXnyDXqdecINee15DXkteoINeU16DXqteV16DXmdedINeU15bXnteg15kg16nXnCDXlNee16HXkteo15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IteU15LXk9eoINeq16bXldeS15XXqiBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXkteT15nXqCDXldec15TXqteX15HXqCDXnNeq16bXldeS15XXqiBXaS1GaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+Itep15zXldeYINeR16rXpteV15LXldeqIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15gg15HXqteb15XXoNeV16og15HXqNee15Qg16DXnteV15vXlCDXqdecINeq16bXldeS15XXqiBXaS1GaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiLigI/XkteZ16nXlCDXkNecIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLigI/XnteQ16TXqdeo16og15zXkNek15zXmden16bXmdeUINec15TXqdeq157XqSDXkdeq15vXldeg15XXqiDXkdeo157XlCDXoNee15XXm9eUINep15wgSW5wdXRGbGluZ2VyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i4oCP15TXkteT16gg16rXpteV15LXldeqIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeS15PXmdeoINeV15zXlNeq15fXkdeoINec16rXpteV15LXldeqIFdpLUZpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i4oCP16nXnNeV15gg15HXqtem15XXkteV16ogV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSI0NTQzOTEyMjkyNjgxODI2OTg2Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdec15XXmCDXkdeq15vXldeg15XXqiDXkdeo157XlCDXoNee15XXm9eUINep15wg16rXpteV15LXldeqIFdpLUZpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjg1NzEzNDQ5ODQwMjM0NjcwOCI+Iten15zXmdeY16og16TXnNeYINeQ15XXk9eZ15UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2MjEwNTk3NzU0MjEyMjA4ODUzIj4i157XkNek16nXqNeqINec15DXpNec15nXp9em15nXlCDXnNen15zXldeYINeV15zXlNek16DXldeqINee15fXk9epINek15zXmCDXkNeV15PXmdeVLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvSG90d29yZCIgbXNnaWQ9IjE4OTA1NTM5MzU2NTAzNDk4MDgiPiLXlteZ15TXldeZINep15wg157Xmdec16og15TXpNei15zXlCI8L3N0cmluZz4KQEAgLTUwNywxMSArNTE2LDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4OTg1NjA4NzI0NjI2MzgyNDIiPiLXkNec16Ug15DXqteX15XXnCDXnteX15PXqSDXqdecINeU15jXnNek15XXnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODE3MjA1NjE4MDA2MzcwMDc0MSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15DXnNelINeQ16og15TXmNeQ15HXnNeYINec15HXpteiINeQ16rXl9eV15wuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTMyNjAwODEyNDI4OTk4OTk2OSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15DXnNelINeQ16og15TXmNec16TXldefINec15HXpteiINeQ16rXl9eV15wuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjI5MjczNjE1Mzc5NDI1OTE4NDEiPiLXkteZ16nXlCDXnNee16LXqNeb16og15TXp9eR16bXmdedINep15wg15DXl9eh15XXnyBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDAyMzA1MDQ5ODkwOTUzODEwIj4i15LXmdep15Qg15zXntei16jXm9eqINeU16fXkdem15nXnSDXqdecINeb16jXmNeZ16EgU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjkyNzM2MTUzNzk0MjU5MTg0MSI+IuKAj9eS15nXqdeUINec157Xoteo15vXqiDXlNen15HXpteZ150g16nXnCDXkNeX16HXldefIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0MDIzMDUwNDk4OTA5NTM4MTAiPiLigI/XkteZ16nXlCDXnNee16LXqNeb16og15TXp9eR16bXmdedINep15wg15vXqNeY15nXoSBTRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIG1zZ2lkPSIxODI5MjkwNzAxNjU4OTkyMzQ3Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXmNei15XXnyDXldec15HXmNecINeY16LXmdeg15Qg16nXnCDXntei16jXm9eV16og16fXkdem15nXnSDXkdeQ157Xptei15kg15DXl9eh15XXnyDXoNep15zXpNeZ150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjIyNzgxOTU4MjYyNDkwNDk3MiI+Itee15fXmden16og15DXl9eh15XXnyBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MjU4MjY5ODYzOTI3NDA1NiI+Itee15fXmden16og15vXqNeY15nXoSBTRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyMjc4MTk1ODI2MjQ5MDQ5NzIiPiLigI/XnteX15nXp9eqINeQ15fXodeV158gVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjI1ODI2OTg2MzkyNzQwNTYiPiLigI/XnteX15nXp9eqINeb16jXmNeZ16EgU0QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIG1zZ2lkPSI4Nzg0MjY4MjQ2Nzc5MTk4NjI3Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXpNeo157XmCDXkNee16bXoteZINeQ15fXodeV158g16DXqdec16TXmdedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzNDExMzM4NjMyMDAyMTkzODQ2Ij4i16fXkdecINee15nXk9eiINei15wg15DXl9eh15XXnyDXpNeg15nXnteZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzMDk0NTYzODQ0NTkzODc4NTQ4Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg157XmdeT16Ig16LXnCDXkNee16bXoteZINeU15DXl9eh15XXnyDXlNek16DXmdee15kuIjwvc3RyaW5nPgpAQCAtNTI3LDI1ICs1MzYsMjUgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdec15XXmCDXkdeo15jXmC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i16nXnNeZ15jXlCDXkdek16DXoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdec15XXmCDXkdek16DXoS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZVVzYiIgbXNnaWQ9IjExMTM0NTM0MzA2NDU0MDI3MjMiPiLXoNeU15wg15TXoteT16TXldeqINeV15DXmdep15XXqNeZ150g16LXkdeV16gg157Xm9ep15nXqNeZIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzYiIgbXNnaWQ9Ijc3NzYxNTU0MzAyMTgyMzk4MzMiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeg15TXnCDXlNei15PXpNeV16og15XXlNeo16nXkNeV16og16LXkdeV16gg157Xm9ep15nXqNeZIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc010cCIgbXNnaWQ9IjQ5NTM0Njg2NzY3OTU5MTcwNDIiPiLXmdeZ16nXnSDXpNeo15XXmNeV16fXldecIE1UUCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc010cCIgbXNnaWQ9IjY1MzI5NjEyMDA0ODY3OTE1NzAiPiLXnteQ16TXqdeoINeS15nXqdeUINec157XoNeU15wg15TXqten158gTVRQINep15wg15TXnNeZ15HXlCDXm9eT15kg15zXmdeZ16nXnSDXkNeqINek16jXldeY15XXp9eV15wg15QtVVNCINep15wg15QtTVRQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNiIiBtc2dpZD0iMTExMzQ1MzQzMDY0NTQwMjcyMyI+IuKAj9eg15TXnCDXlNei15PXpNeV16og15XXkNeZ16nXldeo15nXnSDXoteR15XXqCDXnteb16nXmdeo15kgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNiIiBtc2dpZD0iNzc3NjE1NTQzMDIxODIzOTgzMyI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16DXlNecINeU16LXk9ek15XXqiDXldeU16jXqdeQ15XXqiDXoteR15XXqCDXnteb16nXmdeo15kgVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTXRwIiBtc2dpZD0iNDk1MzQ2ODY3Njc5NTkxNzA0MiI+IuKAj9eZ15nXqdedINek16jXldeY15XXp9eV15wgTVRQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTXRwIiBtc2dpZD0iNjUzMjk2MTIwMDQ4Njc5MTU3MCI+IuKAj9ee15DXpNep16gg15LXmdep15Qg15zXnteg15TXnCDXlNeq16fXnyBNVFAg16nXnCDXlNec15nXkdeUINeb15PXmSDXnNeZ15nXqdedINeQ16og16TXqNeV15jXlden15XXnCDXlC1VU0Ig16nXnCDXlC1NVFAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNDE0ODI5MDg2MDQwMDY1OTE0NiI+IteR15PXldenINeX15XXnteo15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNjU5Nzk2NDE5MTIwODAxNjYwNSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15gg15HXpNeo15nXmNeZINem15nXldeTINeU15nXp9ek15kg16nXldeg15nXnSDXnNem15XXqNeaINeR15PXmden16og15TXl9eV157XqNeULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IteU16rXp9ep16gg15nXqdeZ16jXldeqINec157Xodek16jXmSDXmNec16TXldefIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXqten16nXqCDXnNee16HXpNeo15kg15jXnNek15XXnyDXnNec15Ag15TXqtei16jXkdeV16rXmi4g16TXoteV15zXlCDXlteVINei16nXldeZ15Qg15zXkteo15XXnSDXnNep15nXl9eV16og15DXlSDXnNeX15nXldeR15nXnSDXnNeQINem16TXldeZ15nXnS4g16nXmdedINec15Eg16nXlNeT15HXqCDXnNeQINee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXqten16nXqCDXnNee16HXpNeo15kg15fXmdeo15XXnS4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei16nXldeZ15XXqiDXnNeS16jXldedINec16LXnNeV15nXldeqINei15wg15nXk9eZINeR15nXpteV16Ig16nXmdeX15XXqiDXnNec15Ag15TXqtei16jXkdeV16rXmi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iNDE5ODM0OTIxMTEwODQ5Nzg3OSI+IteU16rXp9ep16gg15nXqdeZ16jXldeqINec15vXnCDXnteh16TXqCDXmNec16TXldefIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFByaXZpbGVnZWQiIG1zZ2lkPSIxNjg5MDI0OTAxNTA5OTk2ODEwIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeq16fXqdeoINec15vXnCDXnteh16TXqCDXmNec16TXldefINep15TXldeQLCDXm9eV15zXnCDXnteh16TXqNeZINeX15nXqNeV150sINec15zXkCDXlNeq16LXqNeR15XXqteaLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec15HXpteiINep15nXl9eV16og157XmdeV16rXqNeV16og15XXnNeQINeX15XXp9eZ15XXqiDXnNep15nXqNeV16rXmSDXl9eZ16jXldedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ4NDI1NzY5OTQxNDQ2MDQ4MjEiPiLXlNek16LXnCDXmdep15nXqNeV16og15TXqten16DXqiDXmNeQ15HXnNeYINee16HXldeSIENETUEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTYwNDg0ODA5NTMxNTQyMTQyNSI+IteU16TXotecINeZ16nXmdeo15XXqiDXlNeS15PXqNeUINep15wg15jXnNek15XXnyBDRE1BIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIG1zZ2lkPSIxOTk0MTkzNTM4ODAyMzE0MTg2Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNek16LXmdecINeU16fXpteQ16ogQ0RNQS4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNeU16TXoteZ15wg15TXp9em15DXqiBDRE1BINec15zXkCDXpteV16jXmi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4i4oCP15TXpNei15wg15nXqdeZ16jXldeqINeU16rXp9eg16og15jXkNeR15zXmCDXnteh15XXkiBDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2MDQ4NDgwOTUzMTU0MjE0MjUiPiLigI/XlNek16LXnCDXmdep15nXqNeV16og15TXkteT16jXlCDXqdecINeY15zXpNeV158gQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBtc2dpZD0iMTk5NDE5MzUzODgwMjMxNDE4NiI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXpNei15nXnCDXlNen16bXkNeqIENETUEuINeQ16TXnNeZ16fXpteZ15XXqiDXlteT15XXoNeZ15XXqiDXotec15XXnNeV16og15zXlNek16LXmdecINeU16fXpteQ16ogQ0RNQSDXnNec15Ag16bXldeo15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSI3Nzg1NDA4MjUzMzY0MzM1NzQwIj4i16nXnNeV15gg15HXlNeq16jXkNeV16og16LXnCDXoteT15vXldefINee15nXp9eV150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSIxMTIwNzQxNTU3ODkxNDM4ODc2Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXkNek16nXqC/XnNeU16nXkdeZ16og15TXqteo15DXldeqINec15LXkdeZINei15PXm9eV16DXmSDXnteZ16fXldedINee15TXqNeT15nXlS4g15zXkCDXnteZ15XXoteTINec16nXmdee15XXqSDXotecINeZ15PXmSDXkNek15zXmden16bXmdeV16og16jXkteZ15zXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI3ODU1MjU5NDYxMjY4NzM0OTE0Ij4i15LXmdep15Qg15zXnteQ16TXmdeZ16DXmSDXm9eg15nXodeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI0MDI0NTI2OTY4NjMwMTk0MTI4Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg15LXmdep15Qg15zXp9eo15nXkNeUL9eb16rXmdeR15Qg15zXnteQ16TXmdeZ16DXmdedINep15TXldei15zXlSDXotecINeZ15PXmSDXqdeZ16jXldeqINeU15vXoNeZ16HXlC4g15zXkCDXnteZ15XXoteTINec16nXmdee15XXqSDXotecINeZ15PXmSDXkNek15zXmden16bXmdeV16og16jXkteZ15zXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEdhZGdldCIgbXNnaWQ9Ijc3NjkwNTMzOTAxNTg2MzQ3MSI+IteR15fXqCDXqNeb15nXkdeZIFdpZGdldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXmdeZ15PXoiDXkNeqINeU157Xoteo15vXqiDXkdeQ15nXnNeVINek16jXmdeY15kgV2lkZ2V0INeZ15vXldecINec15TXqdeq157XqSDXm9ecINeQ16TXnNeZ16fXpteZ15QuINeQ16TXnNeZ16fXpteZ15Qg15HXotec16og15TXqNep15DXlCDXlteVINeZ15vXldecINec16HXpNenINec15DXpNec15nXp9em15nXldeqINeQ15fXqNeV16og15LXmdep15Qg15zXoNeq15XXoNeZ150g15DXmdep15nXmdedLiDXnNeQINee15nXldei15Mg15zXqdeZ157XldepINei15wg15nXk9eZINeQ16TXnNeZ16fXpteZ15XXqiDXqNeS15nXnNeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kR2FkZ2V0IiBtc2dpZD0iNzc2OTA1MzM5MDE1ODYzNDcxIj4i4oCP15HXl9eoINeo15vXmdeR15kgV2lkZ2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEdhZGdldCIgbXNnaWQ9IjgyNjEzMjY5Mzg1OTkwNDkyOTAiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeZ15nXk9eiINeQ16og15TXntei16jXm9eqINeR15DXmdec15Ug16TXqNeZ15jXmSBXaWRnZXQg15nXm9eV15wg15zXlNep16rXntepINeb15wg15DXpNec15nXp9em15nXlC4g15DXpNec15nXp9em15nXlCDXkdei15zXqiDXlNeo16nXkNeUINeW15Ug15nXm9eV15wg15zXodek16cg15zXkNek15zXmden16bXmdeV16og15DXl9eo15XXqiDXkteZ16nXlCDXnNeg16rXldeg15nXnSDXkNeZ16nXmdeZ150uINec15Ag157XmdeV16LXkyDXnNep15nXnteV16kg16LXnCDXmdeT15kg15DXpNec15nXp9em15nXldeqINeo15LXmdec15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSI4NDIzOTIzNzc3NjU5MjkyMjI4Ij4i16nXoNeUINeQ16og157XpteRINeU15jXnNek15XXnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSIxMDI5ODc3NTI5MDA3Njg2NzMyIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdec15XXmCDXkdeq15vXldeg15XXqiDXlNeY15zXpNeV158g16nXnCDXlNee15vXqdeZ16guINeQ16TXnNeZ16fXpteZ15Qg15HXotec16og15TXqNep15DXlCDXlteVINeZ15vXldec15Qg15zXoteR15XXqCDXkdeZ158g16jXqdeq15XXqiwg15zXlNek16LXmdecINeV15zXm9eR15XXqiDXkNeqINeU16jXk9eZ15Ug15HXmNec16TXldefINeV15zXkdem16Ig16TXoteV15zXldeqINeg15XXodek15XXqiDXk9eV157XldeqINee15HXnNeZINec15nXmdeT16Ig15DXldeq15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjkxNzgyMjg1MjQ1MDc2MTA0ODYiPiLXp9eo15nXkNeqINeU16HXmNeY15XXoSDXldeU15bXlNeV16og16nXnCDXlNeY15zXpNeV158iPC9zdHJpbmc+CkBAIC01NzYsOCArNTg1LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZVpvbmUiIG1zZ2lkPSIyOTQ1MDc5ODAxMDEzMDc3MzQwIj4i15TXkteT16gg15DXlteV16gg15bXntefIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE2NzY5ODM3MTIzMTU4Mjc2NDUiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og15DXlteV16gg15TXltee158g16nXnCDXlNeY15DXkdec15guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDk5OTQzNDg4NDM2NjMzMzk4Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINeQ15bXldeoINeU15bXntefINep15wg15TXmNec16TXldefLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iNDgyOTI2MjM0OTY5MTM4Njk4NiI+Itek16LXnCDXkdeq15XXqCDXlC1BY2NvdW50TWFuYWdlclNlcnZpY2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSIxOTQ4NDU1NTUyMzMzNjE1OTU0Ij4i15TXqNep15DXlCDXlteVINee15DXpNep16jXqiDXnNeQ16TXnNeZ16fXpteZ15Qg15zXkdem16Ig16nXmdeX15XXqiDXkNecIEFjY291bnRBdXRoZW50aWNhdG9ycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjQ4MjkyNjIzNDk2OTEzODY5ODYiPiLigI/XpNei15wg15HXqteV16gg15QtQWNjb3VudE1hbmFnZXJTZXJ2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iMTk0ODQ1NTU1MjMzMzYxNTk1NCI+IuKAj9eU16jXqdeQ15Qg15bXlSDXnteQ16TXqdeo16og15zXkNek15zXmden16bXmdeUINec15HXpteiINep15nXl9eV16og15DXnCBBY2NvdW50QXV0aGVudGljYXRvcnMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBY2NvdW50cyIgbXNnaWQ9IjEwODY3OTU0Njc3NjAxMjIxMTQiPiLXl9eZ16TXldepINeX16nXkdeV16DXldeqINeR157Xm9ep15nXqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNzQxNDk2NTM0NzY5NjYwMDI3Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg16jXqdeZ157XlCDXqdecINeX16nXkdeV16DXldeqINeU157Xldeb16jXmdedINec15jXkNeR15zXmC4g15TXk9eR16gg16LXqdeV15kg15zXm9ec15XXnCDXl9ep15HXldeg15XXqiDXqdeg15XXpteo15Ug16LXnCDXmdeT15kg15DXpNec15nXp9em15nXldeqINep15TXqten16DXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen15HXnCDXqNep15nXnteUINep15wg15fXqdeR15XXoNeV16og15TXnteV15vXqNeZ150g15zXmNec16TXldefLiDXlNeT15HXqCDXotep15XXmSDXnNeb15zXldecINeX16nXkdeV16DXldeqINep16DXldem16jXlSDXotecINeZ15PXmSDXkNek15zXmden16bXmdeV16og16nXlNeq16fXoNeqLiI8L3N0cmluZz4KQEAgLTU5MCwzNyArNTk5LDM3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjQ5NTEwMjc5NjQzNDg5NzQ3NzMiPiLXlNem15Ig15fXmdeR15XXqNeZINeo16nXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16bXmdeSINee15nXk9eiINec15LXkdeZINeX15nXkdeV16jXmSDXqNep16osINec157XqdecLCDXkNeZ15zXlSDXqNep16rXldeqINen15nXmdee15XXqiDXldee15fXldeR16jXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSI4MDE4NzU4MTM2NDA0MzIzNjU4Ij4i15LXmdep16og16jXqdeqINee15zXkNeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSIzNDAzMDYyMTg3Nzc5NzI0MTg1Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXmdem15XXqCBTb2NrZXRzINeV15zXlNep16rXntepINeR16TXqNeV15jXlden15XXnNeZINeo16nXqiDXnteV16rXkNee15nXnSDXkNeZ16nXmdeqLiDXlNeT16TXk9ek158g15XXkNek15zXmden16bXmdeV16ogINeQ15fXqNeV16og157Xodek16fXldeqINeQ157Xptei15nXnSDXnNep15zXmdeX16og16DXqteV16DXmdedINec15DXmdeg15jXqNeg15gsINeb15og16nXkNeZ16nXldeoINeW15Qg15DXmdeg15Ug16DXl9eV16Ug15zXqdec15nXl9eqINeg16rXldeg15nXnSDXnNeQ15nXoNeY16jXoNeYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15nXpteV16ggU29ja2V0cyDXldec15TXqdeq157XqSDXkdek16jXldeY15XXp9eV15zXmSDXqNep16og157Xldeq15DXnteZ150g15DXmdep15nXqi4g15TXk9ek15PXpNefINeV15DXpNec15nXp9em15nXldeqICDXkNeX16jXldeqINee16HXpNen15XXqiDXkNee16bXoteZ150g15zXqdec15nXl9eqINeg16rXldeg15nXnSDXnNeQ15nXoNeY16jXoNeYLCDXm9eaINep15DXmdep15XXqCDXlteUINeQ15nXoNeVINeg15fXldelINec16nXnNeZ15fXqiDXoNeq15XXoNeZ150g15zXkNeZ16DXmNeo16DXmC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MDU2NjAxNTk2NzU3NTE4OTYiPiLXqdeg15Qv16LXm9eRINeU15LXk9eo15XXqiDXqNep16og15XXqteg15XXoteUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUzMzM3OTg4ODY0MTI3MTQxOTMiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og15TXkteT16jXldeqINeU16jXqdeqINeV15zXoteb15Eg15XXnNeR15PXldenINeQ16og15vXnCDXqteg15XXoteqINeU16jXqdeqLCDXnNeT15XXktee15QsINec16nXoNeV16og15DXqiDXlC1wcm94eSDXldeU15nXpteZ15DXlCDXqdecINeb15wg16jXqdeqIEFQTi4g15DXpNec15nXp9em15nXldeqINeW15PXldeg15nXldeqINei15zXldec15XXqiDXnNei16fXldeRINeQ15fXqCDXl9eR15nXnNeV16og16jXqdeqLCDXnNeR16bXoiDXlNek16DXmdeUINee15fXk9epINep15zXlNefINeQ15Ug15zXqdeg15XXqiDXkNeV16rXnywg15zXnNeQINeZ15PXmdei16rXmi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTMzMzc5ODg4NjQxMjcxNDE5MyI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXlNeS15PXqNeV16og15TXqNep16og15XXnNei15vXkSDXldec15HXk9eV16cg15DXqiDXm9ecINeq16DXldei16og15TXqNep16osINec15PXldeS157XlCwg15zXqdeg15XXqiDXkNeqINeULXByb3h5INeV15TXmdem15nXkNeUINep15wg15vXnCDXqNep16ogQVBOLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXnNeV15zXldeqINec16LXp9eV15Eg15DXl9eoINeX15HXmdec15XXqiDXqNep16osINec15HXpteiINeU16TXoNeZ15Qg157Xl9eT16kg16nXnNeU158g15DXlSDXnNep16DXldeqINeQ15XXqtefLCDXnNec15Ag15nXk9eZ16LXqteaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iOTU4ODg0MjkxNDU0MzI3MzA5Ij4i16nXoNeUINeQ16og16fXmdep15XXqNeZ15XXqiDXlNeo16nXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9IjY3ODkxMjM5MTI0NzY0MTYyMTQiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og157XpteRINeU16fXmdep15XXqNeZ15XXqiDXqdecINeU16jXqdeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSI1OTUyNTg0OTY0MzczMDE3OTYwIj4i16nXmdeg15XXmSDXqdecINen15nXqdeV16jXmdeV16og16fXqdeV16jXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iMTUyNDQ0MTM0NDQxMjMxOTc4MCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXntem15Eg15TXp9eZ16nXldeo15nXldeqINep15wg16jXqdeqINen16nXldeo15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSIxNDAwNjY2MDEyNjcxNjQ4NzQxIj4i16nXoNeUINeQ16og15TXkteT16jXldeqINeU16nXmdee15XXqSDXkdeg16rXldeg15kg15TXqNen16IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VCYWNrZ3JvdW5kRGF0YVNldHRpbmciIG1zZ2lkPSI1MzQ3NzI5NTc4NDY4NzQ0Mzc5Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINeU15LXk9eo16og15TXqdeZ157XldepINeR16DXqteV16DXmSDXqNen16IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MjAyMDEyOTQ5MjQ3MDQwMDExIj4i15TXpteSINeX15nXkdeV16jXmSBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUwMDI3OTgwNzczODc4MDM3MjYiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16bXmdeSINee15nXk9eiINei15wg16jXqdeq15XXqiBXaS1GaSwg15zXntep15wsINeU15DXnSBXaS1GaSDXnteV16TXotecLCDXm9ee15Ug15LXnSDXqdedINee15vXqdeZ16jXmSDXlC1XaS1GaSDXlNee15fXldeR16jXmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNjU1MDY0MTE4ODc0OTEyODAzNSI+IteU16rXl9eR16jXldeqINeV15TXqteg16rXp9eV16og154tV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI3MTM3OTUwMjk3Mzg2MTI3NTMzIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeq15fXkdeoINec16DXp9eV15PXldeqINeS15nXqdeqIFdpLUZpINeV15zXlNeq16DXqtenINee15TXnywg15XXm9efINec15HXpteiINep15nXoNeV15nXmdedINeR16rXpteV16jXqiDXlNee15vXqdeZ16gg16LXkdeV16gg16jXqdeq15XXqiBXaS1GaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgbXNnaWQ9IjEzNjgyNTM4NzE0ODMyNTQ3ODQiPiLXkNek16nXqCDXp9eR15zXqiDXqdeZ15PXldeo15nXnSDXnteo15XXkdeZ150g15EtV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen15HXnCDXl9eR15nXnNeV16og16nXoNep15zXl9eVINec15vXnCDXlNee15vXqdeZ16jXmdedINeR16jXqdeqIFdpLUZpINeR15DXntem16LXldeqINeb16rXldeR15XXqiDXqdeZ15PXldeoINec16fXkdeV16bXlCwg15XXnNeQINeo16cg15HXmNeQ15HXnNeYINep15zXmi4g16bXqNeZ15vXqiDXlNeX16nXntecINeS15HXldeU15Qg15nXldeq16gg157XkNep16gg15HXntem15Eg16nXkNeZ16DXlSDXqdeZ15PXldeoINec16fXkdeV16bXlC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUxOTQ5NzA2MDI1MzQ5OTI2Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg15fXkdeZ15zXldeqINep16DXqdec15fXlSDXnNeb15wg15TXnteb16nXmdeo15nXnSDXkdeo16nXqiBXaS1GaSDXkdeQ157Xptei15XXqiDXm9eq15XXkdeV16og16nXmdeT15XXqCDXnNen15HXldem15QsINeV15zXkCDXqNenINeR15jXnNek15XXnyDXqdec15ouINem16jXmdeb16og15TXl9ep157XnCDXkteR15XXlNeUINeZ15XXqteoINee15DXqdeoINeR157XpteRINep15DXmdeg15Ug16nXmdeT15XXqCDXnNen15HXldem15QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGhBZG1pbiIgbXNnaWQ9IjYwMDY5NjczNzM5MzU5MjY2NTkiPiLXkteZ16nXlCDXnNeU15LXk9eo15XXqiBCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjkyMTE3NzQ3MTc0ODg4MjEzNyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXkteT15nXqCDXkNeqINeq16bXldeo16rXlSDXqdecINeU15jXkNeR15zXmCDXlNee16fXldee15kg157XodeV15IgQmx1ZXRvb3RoINeV15vXnyDXnNeS15zXldeqINee15vXqdeZ16jXmdedINee16jXldeX16fXmdedINeV15zXkdem16Ig15TXqteQ157XlCDXkNeZ16rXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhBZG1pbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MzE2ODIxNTkzMzE1NDIxMzciPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU15LXk9eZ16gg15DXqiDXqtem15XXqNeq15Ug16nXnCDXlNeY15zXpNeV158g15TXnten15XXnteZINee16HXldeSIEJsdWV0b290aCDXldeb158g15zXktec15XXqiDXnteb16nXmdeo15nXnSDXnteo15XXl9en15nXnSDXldec15HXpteiINeU16rXkNee15Qg15DXmdeq150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGhQcml2IiBtc2dpZD0iNDAwOTQ5NDI0NjAwOTUxMzgyOCI+IteQ16TXqdeoINeU16rXkNee16ogQmx1ZXRvb3RoINei15wg15nXk9eZINeU15DXpNec15nXp9em15nXlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTIwMjAxMjk0OTI0NzA0MDAxMSI+IuKAj9eU16bXkiDXl9eZ15HXldeo15kgV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MDAyNzk4MDc3Mzg3ODAzNzI2Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNem15nXkiDXnteZ15PXoiDXotecINeo16nXqteV16ogV2ktRmksINec157XqdecLCDXlNeQ150gV2ktRmkg157Xldek16LXnCwg15vXnteVINeS150g16nXnSDXnteb16nXmdeo15kg15QtV2ktRmkg15TXnteX15XXkdeo15nXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjY1NTA2NDExODg3NDkxMjgwMzUiPiLigI/XlNeq15fXkdeo15XXqiDXldeU16rXoNeq16fXldeqINeeLVdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXqteX15HXqCDXnNeg16fXldeT15XXqiDXkteZ16nXqiBXaS1GaSDXldec15TXqteg16rXpyDXnteU158sINeV15vXnyDXnNeR16bXoiDXqdeZ16DXldeZ15nXnSDXkdeq16bXldeo16og15TXnteb16nXmdeoINei15HXldeoINeo16nXqteV16ogV2ktRmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4i4oCP15DXpNep16gg16fXkdec16og16nXmdeT15XXqNeZ150g157XqNeV15HXmdedINeRLVdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3OTY5Nzc0MDIxMjU2MzM2NTQ4Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eR15wg15fXkdeZ15zXldeqINep16DXqdec15fXlSDXnNeb15wg15TXnteb16nXmdeo15nXnSDXkdeo16nXqiBXaS1GaSDXkdeQ157Xptei15XXqiDXm9eq15XXkdeV16og16nXmdeT15XXqCDXnNen15HXldem15QsINeV15zXkCDXqNenINeR15jXkNeR15zXmCDXqdec15ouINem16jXmdeb16og15TXl9ep157XnCDXkteR15XXlNeUINeZ15XXqteoINee15DXqdeoINeR157XpteRINep15DXmdeg15Ug16nXmdeT15XXqCDXnNen15HXldem15QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MTk0OTcwNjAyNTM0OTkyNiI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdecINeX15HXmdec15XXqiDXqdeg16nXnNeX15Ug15zXm9ecINeU157Xm9ep15nXqNeZ150g15HXqNep16ogV2ktRmkg15HXkNee16bXoteV16og15vXqteV15HXldeqINep15nXk9eV16gg15zXp9eR15XXpteULCDXldec15Ag16jXpyDXkdeY15zXpNeV158g16nXnNeaLiDXpteo15nXm9eqINeU15fXqdee15wg15LXkdeV15TXlCDXmdeV16rXqCDXnteQ16nXqCDXkdee16bXkSDXqdeQ15nXoNeVINep15nXk9eV16gg15zXp9eR15XXpteULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoQWRtaW4iIG1zZ2lkPSI2MDA2OTY3MzczOTM1OTI2NjU5Ij4i4oCP15LXmdep15Qg15zXlNeS15PXqNeV16ogQmx1ZXRvb3RoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY5MjExNzc0NzE3NDg4ODIxMzciPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU15LXk9eZ16gg15DXqiDXqtem15XXqNeq15Ug16nXnCDXlNeY15DXkdec15gg15TXnten15XXnteZINee16HXldeSIEJsdWV0b290aCDXldeb158g15zXktec15XXqiDXnteb16nXmdeo15nXnSDXnteo15XXl9en15nXnSDXldec15HXpteiINeU16rXkNee15Qg15DXmdeq150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTMxNjgyMTU5MzMxNTQyMTM3Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeS15PXmdeoINeQ16og16rXpteV16jXqteVINep15wg15TXmNec16TXldefINeU157Xp9eV157XmSDXnteh15XXkiBCbHVldG9vdGgg15XXm9efINec15LXnNeV16og157Xm9ep15nXqNeZ150g157XqNeV15fXp9eZ150g15XXnNeR16bXoiDXlNeq15DXnteUINeQ15nXqtedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoUHJpdiIgbXNnaWQ9IjQwMDk0OTQyNDYwMDk1MTM4MjgiPiLigI/XkNek16nXqCDXlNeq15DXnteqIEJsdWV0b290aCDXotecINeZ15PXmSDXlNeQ16TXnNeZ16fXpteZ15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhQcml2IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDQ1NzM1MTkzNDE3NDY4ODU3Ij4i157XkNek16nXqNeqINec15DXpNec15nXp9em15nXlCDXnNeR16bXoiDXlNeq15DXnteUINei150g157Xm9ep15nXqNeZ150g157XqNeV15fXp9eZ150g15zXnNeQINeU16rXoteo15HXldeqINeU157Xqdeq157XqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGhQcml2IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0NTczNTE5MzQxNzQ2ODg1NyI+Itee15DXpNep16jXqiDXnNeQ16TXnNeZ16fXpteZ15Qg15zXkdem16Ig15TXqteQ157XlCDXotedINee15vXqdeZ16jXmdedINee16jXldeX16fXmdedINec15zXkCDXlNeq16LXqNeR15XXqiDXlNee16nXqtee16kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+IteU16rXl9eR16jXldeqINeV15TXqteg16rXp9eV16og154tV2lNQVgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNjM2MDEwMjg3NzI2MTk3ODg4NyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15PXoteqINeU15DXnSBXaU5NQVgg157Xldek16LXnCwg15vXnteVINeS150g15zXp9eR15wg157XmdeT16Ig15TXkNedINeo16nXqteV16ogV2lOTUFYINeb15zXqdeU158g157Xl9eV15HXqNeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMjQwNTA0MjI2NzEzMTQ5NjU3OSI+Itep16DXlCDXkNeqINee16bXkSBXaU1BWCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMxNTY0NTY1MDQwODQyMDE4MDUiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeX15HXqCDXkNeqINeU15jXkNeR15zXmCDXnNeo16nXqteV16ogV2lNQVgg15XXnNeU16rXoNeq16cg157XlNefLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeX15HXqCDXkNeqINeU15jXnNek15XXnyDXnNeo16nXqteV16ogV2lNQVgg15XXnNeU16rXoNeq16cg157XlNefLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoIiBtc2dpZD0iNjEyNzc2OTMzNjMzOTI3NjgyOCI+IteU16rXkNee15Qg15zXnteb16nXmdeo15kgQmx1ZXRvb3RoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDgwNzIyMTgxODUyNDM4NjI4Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNem15nXkiDXkNeqINeq16bXldeo16og15QtQmx1ZXRvb3RoINeR15jXkNeR15zXmCwg15XXm9efINec15nXpteV16gg15XXnNen15HXnCDXl9eZ15HXldeo15nXnSDXotedINee15vXqdeZ16jXmdedINee15XXqteQ157XmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16bXmdeSINeQ16og16rXpteV16jXqiDXlC1CbHVldG9vdGgg15HXmNec16TXldefLCDXldeb158g15zXmdem15XXqCDXldec16fXkdecINeX15nXkdeV16jXmdedINei150g157Xm9ep15nXqNeZ150g157Xldeq15DXnteZ150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9uZmMiIG1zZ2lkPSI0NDIzMzUxMjc0NzU3ODc2OTUzIj4i16nXnNeV15gg15EtTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+IuKAj9eU16rXl9eR16jXldeqINeV15TXqteg16rXp9eV16og154tV2lNQVgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNjM2MDEwMjg3NzI2MTk3ODg4NyI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15PXoteqINeU15DXnSBXaU5NQVgg157Xldek16LXnCwg15vXnteVINeS150g15zXp9eR15wg157XmdeT16Ig15TXkNedINeo16nXqteV16ogV2lOTUFYINeb15zXqdeU158g157Xl9eV15HXqNeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMjQwNTA0MjI2NzEzMTQ5NjU3OSI+IuKAj9ep16DXlCDXkNeqINee16bXkSBXaU1BWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMxNTY0NTY1MDQwODQyMDE4MDUiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeX15HXqCDXkNeqINeU15jXkNeR15zXmCDXnNeo16nXqteV16ogV2lNQVgg15XXnNeU16rXoNeq16cg157XlNefLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeX15HXqCDXkNeqINeU15jXnNek15XXnyDXnNeo16nXqteV16ogV2lNQVgg15XXnNeU16rXoNeq16cg157XlNefLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoIiBtc2dpZD0iNjEyNzc2OTMzNjMzOTI3NjgyOCI+IuKAj9eU16rXkNee15Qg15zXnteb16nXmdeo15kgQmx1ZXRvb3RoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDgwNzIyMTgxODUyNDM4NjI4Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNem15nXkiDXkNeqINeq16bXldeo16og15QtQmx1ZXRvb3RoINeR15jXkNeR15zXmCwg15XXm9efINec15nXpteV16gg15XXnNen15HXnCDXl9eZ15HXldeo15nXnSDXotedINee15vXqdeZ16jXmdedINee15XXqteQ157XmdedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16bXmdeSINeQ16og16rXpteV16jXqiDXlC1CbHVldG9vdGgg15HXmNec16TXldefLCDXldeb158g15zXmdem15XXqCDXldec16fXkdecINeX15nXkdeV16jXmdedINei150g157Xm9ep15nXqNeZ150g157Xldeq15DXnteZ150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9uZmMiIG1zZ2lkPSI0NDIzMzUxMjc0NzU3ODc2OTUzIj4i4oCP16nXnNeV15gg15EtTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbmZjIiBtc2dpZD0iNzEyMDYxMTgxOTQwMTc4OTkwNyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINeg15TXnCDXqten16nXldeo16og16LXnSDXqteS15nXnSwg15vXqNeY15nXodeZ150g15XXp9eV16jXkNeZ150g157XodeV15IgXCfXqten16nXldeo16og157XmNeV15XXlyDXp9em16hcJy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjM1OTg0OTYzMDE0ODY0MzkyNTgiPiLXkdeZ15jXldecINeg16LXmdec16og15TXnteh15og16nXnNeaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iNjAzNDIwMzA2NTA3NzEyMjk5MiI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXqdeR15nXqiDXkNeqINeg16LXmdec16og15TXnten16nXmdedINeV15vXnCDXkNee16bXoteZINeQ15HXmNeX15Qg157XqdeV15nXmiDXlNee15HXldeh16Eg16LXnCDXodeZ16HXnteULiDXnNeT15XXktee15QsINeU15jXnNek15XXnyDXntep15HXmdeqINeQ16og16DXoteZ15zXqiDXlNee16fXqdeZ150g15HXoteqINen15HXnNeUINep15wg16nXmdeX16og15jXnNek15XXnyDXoNeb16DXodeqLCDXldec15DXl9eoINee15vXnyDXntek16LXmdecINee15fXk9epINeQ16og16DXoteZ15zXqiDXlNee16fXqdeZ150g16LXnSDXodeZ15XXnSDXlNep15nXl9eULiI8L3N0cmluZz4KQEAgLTYzOCwxNCArNjQ3LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjY1OTYxNDYwMDMzODkwNDI0MyI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXqNeV15Ag15DXqiDXm9ecINeU157Xmdec15nXnSwg15TXqdee15XXqiDXldeU15HXmdeY15XXmdeZ150g16nXlNee16nXqtee16kg15DXl9eh158g15HXnteZ15zXldefINeU157Xqdeq157XqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjIxODMxMTA0MDIzMTQ0NDExMDYiPiLXlNeV16HXpNeqINee15nXnNeZ150g15zXnteZ15zXldefINee15XXkteT16gt157Xqdeq157XqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgxODUzODU3MTYyNTUwNjUyOTEiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeb16rXldeRINee15nXnNeZ150g15fXk9ep15XXqiDXkdee15nXnNeV158g15TXntep16rXntepLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNjcyNzUwOTUxNTk0MDU0NjgiPiLXp9eo15nXkNeqINeU16rXldeb158g16nXnCDXkNeX16HXldefINeULVVTQiDXqdec15oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg4MTU2NDYyOTM0OTc3OTQwIj4i16fXqNeZ15DXqiDXlNeq15XXm9efINep15wg15vXqNeY15nXoSDXlC1TRCDXqdec15oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDY5ODg3MTI1OTgzODYwNzkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen16jXldeQINeQ16og16rXldeb158g15DXl9eh15XXnyDXlC1VU0Ig16nXnNeaLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjA3MzYyNDczNjU0OTc1NDExIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXkNeqINeq15XXm9efINeb16jXmNeZ16Eg15QtU0Qg16nXnNeaLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+Itep15nXoNeV15kg15DXlSDXnteX15nXp9eUINep15wg16rXldeb158g15DXl9eh15XXnyDXlC1VU0Ig16nXnNeaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiLXqdeZ16DXldeZINeQ15Ug157Xl9eZ16fXlCDXqdecINeq15XXm9efINeb16jXmNeZ16Eg15QtU0Qg16nXnNeaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15vXqteV15Eg15zXlNeq16fXnyDXlNeQ15fXodeV158g157XodeV15IgVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDMzNzQxNzc5MDkzNjYzMjA5MCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15vXqteV15Eg15zXm9eo15jXmdehINeULVNELiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNjcyNzUwOTUxNTk0MDU0NjgiPiLigI/Xp9eo15nXkNeqINeU16rXldeb158g16nXnCDXkNeX16HXldefINeULVVTQiDXqdec15oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg4MTU2NDYyOTM0OTc3OTQwIj4i4oCP16fXqNeZ15DXqiDXlNeq15XXm9efINep15wg15vXqNeY15nXoSDXlC1TRCDXqdec15oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDY5ODg3MTI1OTgzODYwNzkiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen16jXldeQINeQ16og16rXldeb158g15DXl9eh15XXnyDXlC1VU0Ig16nXnNeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjA3MzYyNDczNjU0OTc1NDExIj4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXp9eo15XXkCDXkNeqINeq15XXm9efINeb16jXmNeZ16Eg15QtU0Qg16nXnNeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+IuKAj9ep15nXoNeV15kg15DXlSDXnteX15nXp9eUINep15wg16rXldeb158g15DXl9eh15XXnyDXlC1VU0Ig16nXnNeaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiLigI/XqdeZ16DXldeZINeQ15Ug157Xl9eZ16fXlCDXqdecINeq15XXm9efINeb16jXmNeZ16Eg15QtU0Qg16nXnNeaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15vXqteV15Eg15zXlNeq16fXnyDXlNeQ15fXodeV158g157XodeV15IgVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDMzNzQxNzc5MDkzNjYzMjA5MCI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15vXqteV15Eg15zXm9eo15jXmdehINeULVNELiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWVkaWFTdG9yYWdlV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODU5ODM5MTk5NzA2ODc5MDE1Ij4i16nXoNeUL9ee15fXpyDXqteV15vXnyDXqdecINeQ15fXodeV158g157Xk9eZ15Qg16TXoNeZ157XmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODE4OTE2MDU5NzY5ODUyOTE4NSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXlNeq15XXm9efINep15wg15DXntem16LXmSDXlNeQ15fXodeV158g15TXpNeg15nXnteZINec157Xk9eZ15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3ODMxODU5ODQ0ODg0OTgyOSI+Iteg15nXlNeV15wg16nXnCDXkNeX16HXldefINee16HXnteb15nXnSI8L3N0cmluZz4KQEAgLTY1NSw3ICs2NjQsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTY1NjQ4NzI2NDgxOTY2OTgyNCI+IteS15nXqdeUINec157Xoteo15vXqiDXlNen15HXpteZ150g15HXp9eV15HXpSDXlNep157XldeoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen16jXldeQINeV15zXm9eq15XXkSDXkdee16LXqNeb16og15TXp9eR16bXmdedINep15wg15TXp9eR16bXmdedINeU16nXnteV16jXmdedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlX3NpcCIgbXNnaWQ9IjU5ODY5NTIzNjI3OTU4NzA1MDIiPiLXkdem16Iv16fXkdecINep15nXl9eV16og15DXmdeg15jXqNeg15giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iNDcxNzYzMjAwMDA2MjY3NDI5NCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec15TXqdeq157XqSDXkdep15nXqNeV16ogU0lQINeb15PXmSDXnNeR16bXoi/XnNen15HXnCDXqdeZ15fXldeqINeQ15nXoNeY16jXoNeYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZV9zaXAiIG1zZ2lkPSI0NzE3NjMyMDAwMDYyNjc0Mjk0Ij4i4oCP157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNep16rXntepINeR16nXmdeo15XXqiBTSVAg15vXk9eZINec15HXpteiL9ec16fXkdecINep15nXl9eV16og15DXmdeg15jXqNeg15guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kX2NhbGxfc2VydmljZSIgbXNnaWQ9IjY3MjQwMDk3MjY2NzEyNDY1NTEiPiLXpteV16gg15DXmdeg15jXqNeQ16fXpteZ15Qg16LXnSDXnteh15og16nXmdeX15Qg16DXm9eg16HXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRfY2FsbF9zZXJ2aWNlIiBtc2dpZD0iODczMjU0NzY2MjQ0MjU3MjQzNSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16fXkdeV16Ig157XqteZINeV15DXmdeaINeU157Xqdeq157XqSDXmdeo15DXlCDXqdeZ15fXlCDXoNeb16DXodeqINei15wg15TXnteh15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc4NjI1OTMyODM2MTE0OTMyMzIiPiLXp9eo15nXkNeqINeg16rXldeg15kg16nXmdee15XXqSDXlNeZ16HXmNeV16jXmdeZ150g15HXqNep16oiPC9zdHJpbmc+CkBAIC02NjQsOCArNjczLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSI3NTM3NTg2NzcxNTU5MzcwNjY4Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXoNeU15wg157Xk9eZ16DXmdeV16og15TXqNep16og15zXlNeS15PXmdeoINeb15zXnNeZ150g16HXpNem15nXpNeZ15nXnS3XnNeQ16TXnNeZ16fXpteZ15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjUwODgyMTczMDkwODg3Mjk2NTAiPiLXqdeg15Qg16DXmdeU15XXnCDXl9ep15HXldeg15XXqiDXqdecINep15nXnteV16kg15HXqNep16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjU0NDM0MTI4NjY3NDYxOTgxMjMiPiLXlNeo16nXkNeUINeW15Ug157XkNek16nXqNeqINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og15DXldek158g15TXl9eZ16nXldeRINep15wg16DXqteV16DXmSDXqdeZ157XldepINeR16jXqdeqINee15XXnCDXm9ecINeQ16TXnNeZ16fXpteZ15QuINec15Ag157XmdeV16LXkyDXnNep15nXnteV16kg15HXkNek15zXmden16bXmdeV16og16jXkteZ15zXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSIzNjU4NTI3MjE0OTE0OTU5NzQ5Ij4i16nXmdeg15XXmSDXqdecINeh15nXnteg15kgU29ja2V0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSI3NjU1NTY4NDMzNjk2MzU2NTc4Ij4i15TXlNeo16nXkNeUINeU15bXlSDXnteQ16TXqdeo16og15zXkNek15zXmden16bXmdeUINec16nXoNeV16og16HXmdee16DXmSBTb2NrZXQg16LXkdeV16gg16DXmdeq15XXkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSIzNjU4NTI3MjE0OTE0OTU5NzQ5Ij4i4oCP16nXmdeg15XXmSDXqdecINeh15nXnteg15kgU29ja2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSI3NjU1NTY4NDMzNjk2MzU2NTc4Ij4i4oCP15TXlNeo16nXkNeUINeU15bXlSDXnteQ16TXqdeo16og15zXkNek15zXmden16bXmdeUINec16nXoNeV16og16HXmdee16DXmSBTb2NrZXQg16LXkdeV16gg16DXmdeq15XXkSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9Ijc2NzM0MTY0ODc4NzM0MzIyNjgiPiLXkteZ16nXlCDXnNeU16rXqNeQ15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI0NTg0NTc3NDI2ODM0MzEzODciPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeQ15fXlteoLCDXnNeR15PXldenINeV15zXnteX15XXpyDXlNeq16jXkNeV16osINeb15XXnNecINeb15DXnNeUINep16TXldeo16HXnteVINei15wg15nXk9eZINeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9IjcwNTc3NjQ3NDIyMTE2NTY2NTQiPiLXkNeZ15LXldeTINec16nXmdeo15XXqiDXqdecINee15DXlteZ158g15zXlNeq16jXkNeV16oiPC9zdHJpbmc+CkBAIC02ODYsMTYgKzY5NSwxNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dpcGVEYXRhIiBtc2dpZD0iMzkxMDU0NTQ0Njc1ODYzOTcxMyI+Itee15fXpyDXkNeqINeb15wg15TXoNeq15XXoNeZ150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzA2MTg0MDk2MDY3NzU2ODc2Ij4i157Xl9enINeQ16og16DXqteV16DXmSDXlNeY15DXkdec15gg15zXnNeQINeQ15bXlNeo15Qg16LXnCDXmdeT15kg15HXmdem15XXoiDXkNeZ16TXldehINeg16rXldeg15kg15nXpteo158uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUwOTY4OTU2MDQ1NzQxODgzOTEiPiLXnteX16cg15DXqiDXoNeq15XXoNeZINeU15jXnNek15XXnyDXnNec15Ag15DXlteU16jXlCDXotecINeZ15PXmSDXkdeZ16bXldeiINeQ15nXpNeV16Eg16DXqteV16DXmSDXmdem16jXny4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSIyNzg0ODI4MjkzNzQ3NzkxNDQ2Ij4i15TXkteT16gg15DXqiDXqdeo16og15QtUHJveHkg15TXm9ec15zXmSDXqdecINeU157Xm9ep15nXqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSI2Mzg3NDk3NDY2NjYwMTU0OTMxIj4i15TXkteT16gg16nXmdee15XXqSDXkdep16jXqiDXlC1Qcm94eSDXlNeS15zXldeR15zXmSDXqdecINeU157Xm9ep15nXqCDXm9eQ16nXqCDXlNee15PXmdeg15nXldeqINee15XXpNei15zXqi4g16jXpyDXnteg15TXnCDXlNee15vXqdeZ16gg15TXqNeQ16nXldefINee15LXk9eZ16gg15DXqiDXqdeo16og15QtUHJveHkg15TXktec15XXkdec15kg15TXpNei15nXnC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSIyNzg0ODI4MjkzNzQ3NzkxNDQ2Ij4i4oCP15TXkteT16gg15DXqiDXqdeo16og15QtUHJveHkg15TXm9ec15zXmSDXqdecINeU157Xm9ep15nXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSI2Mzg3NDk3NDY2NjYwMTU0OTMxIj4i4oCP15TXkteT16gg16nXmdee15XXqSDXkdep16jXqiDXlC1Qcm94eSDXlNeS15zXldeR15zXmSDXqdecINeU157Xm9ep15nXqCDXm9eQ16nXqCDXlNee15PXmdeg15nXldeqINee15XXpNei15zXqi4g16jXpyDXnteg15TXnCDXlNee15vXqdeZ16gg15TXqNeQ16nXldefINee15LXk9eZ16gg15DXqiDXqdeo16og15QtUHJveHkg15TXktec15XXkdec15kg15TXpNei15nXnC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSI4ODUyNzkxNTE4NDcyNTQwNTYiPiLXlNeS15PXqCDXqteQ16jXmdeaINeq16TXldeS15Qg15zXodeZ16HXnteUINep15wg16DXoteZ15zXqiDXlNee16HXmiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSIxNzI5NzI1MjI2MzE0NjkxNTkxIj4i16nXnNeV15gg15HXqteT15nXqNeV16og16nXkdeUINeZ16kg15zXqdeg15XXqiDXkNeqINeU16HXmdeh157XlCDXqdecINeg16LXmdec16og15TXnteh15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSI4OTAxMzI2MTk5OTA5MTMyOTE1Ij4i15TXkteT16gg15TXptek16DXqiDXkNeX16HXldefIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iMjYzNzczMjExNTMyNTMxNjk5MiI+IteT16jXldepINep16DXqteV16DXmSDXkNek15zXmden16bXmdeV16og157XkNeV15fXodeg15XXqiDXmdeU15nXlSDXnteV16bXpNeg15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUNhbWVyYSIgbXNnaWQ9IjYzOTUzMDEwMjMxNTIyOTc4MjYiPiLXlNep15HXqiDXntem15zXnteV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSIyMzA2MzQ5MDQyODM0NzU0NTk3Ij4i157XoNeiINep15nXnteV16kg15HXm9ecINeU157Xptec157XldeqINep15HXnteb16nXmdeoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjI2NjMyOTEwNDU0MjYzODgwMiI+IteU16nXkdeqINeq15vXldeg15XXqiDXkS1LZXlndWFyZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIzNDY3MDgyMjcyMTg2NTM0NjE0Ij4i157XoNeiINep15nXnteV16kg15HXqteb15XXoNeV16og157XodeV15nXnteV16og15EtS2V5Z3VhcmQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2Rpc2FibGVLZXlndWFyZEZlYXR1cmVzIiBtc2dpZD0iMjY2MzI5MTA0NTQyNjM4ODAyIj4i4oCP15TXqdeR16og16rXm9eV16DXldeqINeRLUtleWd1YXJkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjM0NjcwODIyNzIxODY1MzQ2MTQiPiLigI/Xnteg16Ig16nXmdee15XXqSDXkdeq15vXldeg15XXqiDXnteh15XXmdee15XXqiDXkS1LZXlndWFyZC4iPC9zdHJpbmc+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0icGhvbmVUeXBlcyI+CiAgICAgPGl0ZW0gbXNnaWQ9Ijg5MDEwOTgzMzY2NTg3MTAzNTkiPiLXkdeZ16oiPC9pdGVtPgogICAgIDxpdGVtIG1zZ2lkPSI4Njk5MjM2NTA1MjcxMzY2MTUiPiLXoNeZ15nXkyI8L2l0ZW0+CkBAIC04MDksMTQgKzgxOCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IteT16Mg15TXkdeZ16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4i16LXkdeV15PXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4i15DXl9eoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i15TXp9ec15Mg16fXldeTIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IteU16fXnNeTINeQ16og16fXldeTINeULVBVSyDXlden15XXkyAg15QtUElOINeU15fXk9epIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiLXp9eV15MgUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLXp9eV15MgUElOINeX15PXqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IuKAj9eU16fXnNeTINen15XXkyBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLigI/XlNen15zXkyDXkNeqINen15XXkyDXlC1QVUsg15XXp9eV15MgINeULVBJTiDXlNeX15PXqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4i4oCP16fXldeTIFBVSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i4oCP16fXldeTIFBJTiDXl9eT16kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLXkteiINeb15PXmSDXnNeU16fXnNeZ15Mg15DXqiDXlNeh15nXodee15QiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLXlNen15zXkyDXodeZ16HXnteUINec15HXmdeY15XXnCDXlNeg16LXmdec15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLXlNen15zXkyDXp9eV15MgUElOINec15HXmdeY15XXnCDXlNeg16LXmdec15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLXp9eV15MgUElOINep15LXldeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i4oCP15TXp9ec15Mg16fXldeTIFBJTiDXnNeR15nXmNeV15wg15TXoNei15nXnNeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4oCP16fXldeTIFBJTiDXqdeS15XXmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiLXm9eT15kg15zXkdeY15wg15DXqiDXlNeg16LXmdec15QsINec15fXpSDXotecIFwn16rXpNeo15nXmFwnINeV15zXkNeX16gg157Xm9efINei15wgMC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbF9kaWFsb2dfbnVtYmVyX2Zvcl9kaXNwbGF5IiBtc2dpZD0iNjk2MTkyMTAzMTk1MDkwOTcwIj4i157Xodek16gg15fXmdeo15XXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODk2MzgzOTI0MjU2NTY1MzE5MiI+IteQ15nXnyDXqdeZ16jXldeqIjwvc3RyaW5nPgpAQCAtODM0LDEzICs4NDMsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fY2hhcmdlZCIgbXNnaWQ9IjMyMTYzNTc0NTY4NDA2MDYyNCI+IteY16LXldefIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9iYXR0ZXJ5X3Nob3J0IiBtc2dpZD0iNDQ3NzI2NDg0OTM4Njg1MDI2NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2xvd19iYXR0ZXJ5IiBtc2dpZD0iMTQ4Mjg3Mzk4MTkxOTI0OTc0MCI+IteX15HXqCDXkNeqINeU157XmNei158uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5OTQzOTI3NzgxOTIxNTM5OSI+IteQ15nXnyDXm9eo15jXmdehIFNJTSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUxNjU5MTk2MDk1NzkxNDc0Ij4i15DXmdefINeb16jXmNeZ16EgU0lNINeR15jXkNeR15zXmC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4i15DXmdefINeb16jXmNeZ16EgU0lNINeR15jXnNek15XXny4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUzNzI3ODcxMzgwMjMyNzI2MTUiPiLXlNeb16DXoSDXm9eo15jXmdehIFNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+Iteb16jXmNeZ16Eg15QtU0lNINeX16HXqCDXkNeVINep15zXkCDXoNeZ16rXnyDXnNen16jXldeQINeQ15XXqteVLiDXlNeb16DXoSDXm9eo15jXmdehIFNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTYxNDk2NjUxMzg5MTYxODQiPiLXnNeQINeg15nXqtefINec15TXqdeq157XqSDXkdeb16jXmNeZ16EgU0lNINeW15QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjkxMDkwNDY0MzQzMzE1MTM3MSI+Iteb16jXmNeZ16Eg15QtU0lNINep15zXmiDXlNeV16nXkdeqINec16bXnteZ16rXldeqLlxu16TXoNeUINec16HXpNenINeU16nXmdeo15XXqiDXlNeQ15zXl9eV15jXmSDXqdec15og15zXp9eR15zXqiDXm9eo15jXmdehIFNJTSDXkNeX16guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5OTQzOTI3NzgxOTIxNTM5OSI+IuKAj9eQ15nXnyDXm9eo15jXmdehIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUxNjU5MTk2MDk1NzkxNDc0Ij4i4oCP15DXmdefINeb16jXmNeZ16EgU0lNINeR15jXkNeR15zXmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4i4oCP15DXmdefINeb16jXmNeZ16EgU0lNINeR15jXnNek15XXny4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUzNzI3ODcxMzgwMjMyNzI2MTUiPiLigI/XlNeb16DXoSDXm9eo15jXmdehIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IuKAj9eb16jXmNeZ16Eg15QtU0lNINeX16HXqCDXkNeVINep15zXkCDXoNeZ16rXnyDXnNen16jXldeQINeQ15XXqteVLiDXlNeb16DXoSDXm9eo15jXmdehIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTYxNDk2NjUxMzg5MTYxODQiPiLigI/XnNeQINeg15nXqtefINec15TXqdeq157XqSDXkdeb16jXmNeZ16EgU0lNINeW15QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjkxMDkwNDY0MzQzMzE1MTM3MSI+IuKAj9eb16jXmNeZ16Eg15QtU0lNINep15zXmiDXlNeV16nXkdeqINec16bXnteZ16rXldeqLlxu16TXoNeUINec16HXpNenINeU16nXmdeo15XXqiDXlNeQ15zXl9eV15jXmSDXqdec15og15zXp9eR15zXqiDXm9eo15jXmdehIFNJTSDXkNeX16guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwMTU5NDkwNTE1Mjc0Njg4NiI+Itec15fXptefINeU16jXpteV16LXlCDXlNen15XXk9ee16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjA4OTI5NzY1MDQ4MTI5MjM2MyI+Itec15fXptefINeU16jXpteV16LXlCDXlNeR15DXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1OTA4ODc4Njc4MDEyODAwMSI+Itec15fXptefINeU15TXqdeU15nXlCI8L3N0cmluZz4KQEAgLTg0OCwxNSArODU3LDE1IEBACiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDU2MjMxODM3ODc2Njk4NzYwMSI+Itec15fXptefINeU16LXpteZ16jXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsc19vbmx5IiBtc2dpZD0iNjczMzk3ODMwNDM4NjM2NTQwNyI+Itep15nXl9eV16og15fXmdeo15XXnSDXkdec15HXkyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjE0MzM4OTIyNDk4NjAyODUwMSI+Iteo16nXqiDXoNei15XXnNeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNzQ0MTc5NzMzOTk3NjIzMCI+Iteb16jXmNeZ16EgU0lNINeg16LXldecINeR15DXntem16LXldeqIFBVSy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4i4oCP15vXqNeY15nXoSBTSU0g16DXoteV15wg15HXkNee16bXoteV16ogUFVLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iODEyNzkxNjI1NTI0NTE4MTA2MyI+Itei15nXmdefINeR157Xk9eo15nXmiDXnNee16nXqtee16kg15DXlSDXpNeg15Qg15zXqdeZ16jXldeqINeU15zXp9eV15fXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iODA2NjY2MDEyOTIwNjAwMTAzOSI+Iteb16jXmNeZ16Eg15QtU0lNINeg16LXldecLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjU5NTMyMzIxNDA1Mjg4MTI2NCI+Itee15HXmNecINeg16LXmdec15Qg16nXnCDXm9eo15jXmdehIFNJTeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iODA2NjY2MDEyOTIwNjAwMTAzOSI+IuKAj9eb16jXmNeZ16Eg15QtU0lNINeg16LXldecLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjU5NTMyMzIxNDA1Mjg4MTI2NCI+IuKAj9ee15HXmNecINeg16LXmdec15Qg16nXnCDXm9eo15jXmdehIFNJTeKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjQ4MTYyMzgzMDM0NDEwNzIyMiI+Itep16jXmNeY16og15DXqiDXp9eVINeR15nXmNeV15wg15TXoNei15nXnNeUINeR15DXldek158g16nXkteV15kgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS4gXG5cbteg16HXlCDXqdeV15Eg15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16nXoNeZ15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjI3MjU5NzMyODYyMzkzNDQ1NTUiPiLXlNen15zXk9eqINeh15nXodee15Qg16nXkteV15nXlCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedLlxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+IteU16fXnNeT16og16fXldeTIFBJTiDXqdeS15XXmSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedLlxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+Itep16jXmNeY16og15HXkNeV16TXnyDXqdeS15XXmSDXkNeqINen15Ug15HXmdeY15XXnCDXlNeg16LXmdec15QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXm9eV16nXnNeZ150g16DXldeh16TXmdedLCDXqteq15HXp9epINec15HXmNecINeQ16og16DXoteZ15zXqiDXlNeY15DXkdec15gg15HXkNee16bXoteV16og16TXqNeY15kg15TXm9eg15nXodeUINep15zXmiDXnC1Hb29nbGUuXG5cbteg16HXlCDXqdeV15Eg15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g16nXoNeZ15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjU5MDIyNzU1OTc2Mzc2Mjc1MSI+Itep16jXmNeY16og15DXqiDXp9eVINeR15nXmNeV15wg15TXoNei15nXnNeUINeR15DXldek158g16nXkteV15kgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS4g15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXm9eV16nXnNeZ150g16DXldeh16TXmdedLCDXqteq15HXp9epINec15HXmNecINeQ16og16DXoteZ15zXqiDXlNeY15zXpNeV158g15HXkNee16bXoteV16og16TXqNeY15kg15TXm9eg15nXodeUINep15zXmiDXnC1Hb29nbGXigI8uXG5cbiDXoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+IuKAj9eU16fXnNeT16og16fXldeTIFBJTiDXqdeS15XXmSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedLlxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+IuKAj9ep16jXmNeY16og15HXkNeV16TXnyDXqdeS15XXmSDXkNeqINen15Ug15HXmdeY15XXnCDXlNeg16LXmdec15QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXm9eV16nXnNeZ150g16DXldeh16TXmdedLCDXqteq15HXp9epINec15HXmNecINeQ16og16DXoteZ15zXqiDXlNeY15DXkdec15gg15HXkNee16bXoteV16og16TXqNeY15kg15TXm9eg15nXodeUINep15zXmiDXnC1Hb29nbGUuXG5cbteg16HXlCDXqdeV15Eg15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g16nXoNeZ15XXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjU5MDIyNzU1OTc2Mzc2Mjc1MSI+IuKAj9ep16jXmNeY16og15DXqiDXp9eVINeR15nXmNeV15wg15TXoNei15nXnNeUINeR15DXldek158g16nXkteV15kgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS4g15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXm9eV16nXnNeZ150g16DXldeh16TXmdedLCDXqteq15HXp9epINec15HXmNecINeQ16og16DXoteZ15zXqiDXlNeY15zXpNeV158g15HXkNee16bXoteV16og16TXqNeY15kg15TXm9eg15nXodeUINep15zXmiDXnC1Hb29nbGXigI8uXG5cbiDXoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxMjgxMDYzOTk3NDU3NTU2MDQiPiLXkdeZ16bXoteqIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og16nXkteV15nXmdedINec15HXmdeY15XXnCDXoNei15nXnNeqINeU15jXkNeR15zXmC4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXm9eV16nXnNeZ150g16DXldeh16TXmdedLCDXlNeY15DXkdec15gg15nXoteR15XXqCDXkNeZ16TXldehINec15HXqNeZ16jXqiDXlNee15fXk9ecINep15wg15TXmdem16jXnyDXldeb15wg16DXqteV16DXmSDXlNee16nXqtee16kg15nXkNeR15PXlS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2MDM1NjUxNDIxNTY4MjY1NjUiPiLXkdeZ16bXoteqIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og16nXkteV15nXmdedINec15HXmdeY15XXnCDXoNei15nXnNeqINeU15jXnNek15XXny4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXm9eV16nXnNeZ150g16DXldeh16TXmdedLCDXlNeY15zXpNeV158g15nXoteR15XXqCDXkNeZ16TXldehINec15HXqNeZ16jXqiDXlNee15fXk9ecINep15wg15TXmdem16jXnyDXldeb15wg16DXqteV16DXmSDXlNee16nXqtee16kg15nXkNeR15PXlS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyODA4NzM1MTY0OTM5MzQzNjUiPiLXkdeZ16bXoteqIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINep15LXldeZ15nXnSDXnNeR15nXmNeV15wg16DXoteZ15zXqiDXlNeY15DXkdec15guINeU15jXkNeR15zXmCDXmdei15HXldeoINeb16LXqiDXkNeZ16TXldehINec15HXqNeZ16jXqiDXlNee15fXk9ecINep15wg15TXmdem16jXny4iPC9zdHJpbmc+CkBAIC04NjUsMTIgKzg3NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiLXqdeb15fXqiDXkNeqINeU16fXlT8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9mb3Jnb3RfcGF0dGVybiIgbXNnaWQ9IjI1ODg1MjE1MDExNjYwMzI3NDciPiLXkdeZ15jXldecINeg16LXmdec16og15fXqdeR15XXnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iMjc1MTM2ODYwNTI4NzI4ODgwOCI+IteR15XXptei15Ug16DXmdeh15nXldeg15XXqiDXqNeR15nXnSDXnteT15kg15zXqdeo15jXldeYINen15Ug15HXmdeY15XXnCDXoNei15nXnNeULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiLXm9eT15kg15zXkdeY15wg15DXqiDXlNeg16LXmdec15QsINeU15nXm9eg16Eg15HXkNee16bXoteV16og15fXqdeR15XXnyBHb29nbGUg16nXnNeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiLigI/Xm9eT15kg15zXkdeY15wg15DXqiDXlNeg16LXmdec15QsINeU15nXm9eg16Eg15HXkNee16bXoteV16og15fXqdeR15XXnyBHb29nbGUg16nXnNeaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI4ODQ2ODgxNDI0MTA2NDg0NDQ3Ij4i16nXnSDXntep16rXntepICjXk9eV15BcItecKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI1OTU4MDI4MzgzOTU0NzM4NTI4Ij4i16HXmdeh157XlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4i15vXoNeZ16HXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSIxMzY0MDUxNDczMzQ3NDg1OTA4Ij4i16nXnSDXntep16rXntepINeQ15Ug16HXmdeh157XlCDXnNeQINeX15XXp9eZ15nXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSIxNjk2OTI0NzYzNjkwMzc5MDczIj4i16nXm9eX16og15DXqiDXqdedINeU157Xqdeq157XqSDXkNeVINeU16HXmdeh157XlD9cbteR16fXqCDXkdeb16rXldeR16ogIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjE2OTY5MjQ3NjM2OTAzNzkwNzMiPiLigI/Xqdeb15fXqiDXkNeqINep150g15TXntep16rXntepINeQ15Ug15TXodeZ16HXnteUP1xu15HXp9eoINeR15vXqteV15HXqiAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSI3MTE0NjI3MzUxMjg2OTMzODY3Ij4i15HXldeT16cuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3VubG9ja19sYWJlbCIgbXNnaWQ9IjczNzQ0MDQ4MzIyMDY2NzA1NCI+IteR15jXnCDXoNei15nXnNeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zb3VuZF9vbl9sYWJlbCIgbXNnaWQ9IjkwNjg4Nzc1NzY1MTM0MjU5NzAiPiLXp9eV15wg16TXldei15wiPC9zdHJpbmc+CkBAIC04NzksMjQgKzg4OCwyNCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jbGVhcmVkIiBtc2dpZD0iNTU4MzQ3OTcyMTAwMTYzOTU3OSI+IteU16rXkdeg15nXqiDXoNee15fXp9eUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jZWxsX2FkZGVkIiBtc2dpZD0iNjc1NjAzMTIwODM1OTI5MjQ4NyI+IteU16rXkCDXoNeV16HXoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fZGV0ZWN0ZWQiIG1zZ2lkPSI0OTg4NzMwODk1NTU0MDU3MDU4Ij4i15TXqteR16DXmdeqINeU15XXqdec157XlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4gV2lkZ2V0ICUyJGQg157XqteV15ogJTMkZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i15TXldeh16MgV2lkZ2V0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4i4oCPJTEkcy4gV2lkZ2V0ICUyJGQg157XqteV15ogJTMkZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i4oCP15TXldeh16MgV2lkZ2V0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i16jXmdenIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLXkNeW15XXqCDXkdeZ15jXldecINeU16DXoteZ15zXlCDXlNeV16jXl9eRLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IteQ15bXldeoINeR15nXmNeV15wg15TXoNei15nXnNeUINeb15XXldelLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+IldpZGdldCDigI88eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiLigI9XaWRnZXQg4oCPPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IteR15XXl9eoINee16nXqtee16nXmdedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zdGF0dXMiIG1zZ2lkPSI4MDA4MjY0NjAzOTM1OTMwNjExIj4i16HXmNeY15XXoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+Itee16bXnNee15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i16TXp9eT15kg157Xk9eZ15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+Iteh15nXk9eV16gg157Xl9eT16kg16nXnCBXaWRnZXRzINeU16rXl9eZ15wuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4i16HXmdeT15XXqCDXnteX15PXqSDXqdecIFdpZGdldHMg15TXodeq15nXmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4iV2lkZ2V0IOKAjzx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+INeg157Xl9enLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i4oCP16HXmdeT15XXqCDXnteX15PXqSDXqdecIFdpZGdldHMg15TXqteX15nXnC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLigI/XodeZ15PXldeoINee15fXk9epINep15wgV2lkZ2V0cyDXlNeh16rXmdeZ150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiLigI9XaWRnZXQg4oCPPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g16DXnteX16cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4i15TXqNeX15Eg15DXqiDXkNeW15XXqCDXkdeZ15jXldecINeU16DXoteZ15zXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiLXkdeZ15jXldecINeg16LXmdec15Qg15HXkNee16bXoteV16og15TXodeY15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLXkdeZ15jXldecINeg16LXmdec15Qg15HXkNee16bXoteV16og16bXmdeV16gg16fXlS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IteR15nXmNeV15wg16DXoteZ15zXlCDXkdeQ157Xptei15XXqiDXlteZ15TXldeZINek16DXmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiLXkdeZ15jXldecINeg16LXmdec15Qg15HXkNee16bXoteV16og157Xodek16ggUElOLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiLigI/XkdeZ15jXldecINeg16LXmdec15Qg15HXkNee16bXoteV16og157Xodek16ggUElOLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IteR15nXmNeV15wg16DXoteZ15zXlCDXkdeQ157Xptei15XXqiDXodeZ16HXnteULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+IteQ15bXldeoINem15nXldeoINen15UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IteQ15bXldeoINeU16HXmNeULiI8L3N0cmluZz4KQEAgLTkxMCw4ICs5MTksOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iaG91cl9hbXBtIiBtc2dpZD0iNDU4NDMzODA4MzUyOTM1NTk4MiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IkFNUE0iPiVQPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImhvdXJfY2FwX2FtcG0iIG1zZ2lkPSIyMDgzNDY1OTkyOTQwNDQ0MzY2Ij4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JXA8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3RfZmFpbGVkIiBtc2dpZD0iNTQxMDI3MDMyOTExNDIxMjA0MSI+IteR15PXmden16og15TXmdem16jXnyDXoNeb16nXnNeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiLXlNek16LXldec15QgRkFDVE9SWV9URVNUINeg16rXnteb16og16jXpyDXoteR15XXqCDXl9eR15nXnNeV16og16nXlNeV16rXp9eg15Ug15Et4oCOL3N5c3RlbS9hcHAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm9fYWN0aW9uIiBtc2dpZD0iODcyOTkxODc0Nzk5OTk4NTYxIj4i15zXkCDXoNee16bXkNeUINeX15HXmdec15Qg15TXnteh16TXp9eqINeQ16og15TXpNei15XXnNeUIEZBQ1RPUllfVEVTVC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub3Rfc3lzdGVtIiBtc2dpZD0iNDQzNTIwMTY1Njc2NzI3NjcyMyI+IuKAj9eU16TXoteV15zXlCBGQUNUT1JZX1RFU1Qg16DXqtee15vXqiDXqNenINei15HXldeoINeX15HXmdec15XXqiDXqdeU15XXqten16DXlSDXkS3igI4vc3lzdGVtL2FwcC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub19hY3Rpb24iIG1zZ2lkPSI4NzI5OTE4NzQ3OTk5OTg1NjEiPiLigI/XnNeQINeg157XpteQ15Qg15fXkdeZ15zXlCDXlNee16HXpNen16og15DXqiDXlNek16LXldec15QgRkFDVE9SWV9URVNULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X3JlYm9vdCIgbXNnaWQ9IjYzMjAxNjgyMDMwNTA3OTE2NDMiPiLXkNeq15fXnCDXnteX15PXqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjE5ODc0ODM5Nzc4MzQ2MDM4NzIiPiLXkdeT16Mg16nXkdeb16rXldeR16ogXCc8eGxpZmY6ZyBpZD0iVElUTEUiPiVzPC94bGlmZjpnPlwnINeb16rXldeRINeb15o6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI2OTYxOTAzMjEzNzI5NjY3NTczIj4iSmF2YVNjcmlwdCI8L3N0cmluZz4KQEAgLTk0MCwxMCArOTQ5LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hcmVhIiBtc2dpZD0iMzU0NzQwOTA1MDg4OTk1MjQyMyI+IteQ15bXldeoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZW1pcmF0ZSIgbXNnaWQ9IjI4OTM4ODA5Nzg4MzU2OTg4MTgiPiLXkNee15nXqNeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzc3NTI2NTc3NTQwNTEwNjk4MyI+Iten16jXmdeQ16og16HXmdee16DXmdeV16og15XXlNeZ16HXmNeV16jXmdeZ16og15TXkNeZ16DXmNeo16DXmCDXqdec15oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9Ijg0NjIzNzgyMjY2MDA0Mzk2NTgiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen16jXldeQINeQ16og15TXlNeZ16HXmNeV16jXmdeUINep15wg15vXnCDXm9eq15XXkdeV16og15TXkNeq16jXmdedINep15HXlNefINeU15PXpNeT16TXnyDXkdeZ16fXqCwg15XXkNeqINeb15wg15QtQm9va21hcmtzINep15wg15TXk9ek15PXpNefLiDXqdeZ150g15zXkTog15PXpNeT16TXoNeZINem15Mg16nXnNeZ16nXmSDXkNeVINeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXldeqINei150g15nXm9eV15zXldeqINec15PXpNeT15XXoyDXkdeQ15nXoNeY16jXoNeYINeQ15nXoNedINeZ15vXldec15nXnSDXnNeQ15vXldejINeQ15nXqdeV16gg15bXlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9Ijg0NjIzNzgyMjY2MDA0Mzk2NTgiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNen16jXldeQINeQ16og15TXlNeZ16HXmNeV16jXmdeUINep15wg15vXnCDXm9eq15XXkdeV16og15TXkNeq16jXmdedINep15HXlNefINeU15PXpNeT16TXnyDXkdeZ16fXqCwg15XXkNeqINeb15wg15QtQm9va21hcmtzINep15wg15TXk9ek15PXpNefLiDXqdeZ150g15zXkTog15PXpNeT16TXoNeZINem15Mg16nXnNeZ16nXmSDXkNeVINeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXldeqINei150g15nXm9eV15zXldeqINec15PXpNeT15XXoyDXkdeQ15nXoNeY16jXoNeYINeQ15nXoNedINeZ15vXldec15nXnSDXnNeQ15vXldejINeQ15nXqdeV16gg15bXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3MTQ3ODUxNjUyNzMzMTQ0OTAiPiLXm9eq15nXkdeqINeh15nXnteg15nXldeqINeV15TXmdeh15jXldeo15nXmdeqINeQ15nXoNeY16jXoNeYIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2ODI1NTI3NDY5MTQ1NzYwOTIyIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXkNeqINeU15TXmdeh15jXldeo15nXlCDXkNeVINeULUJvb2ttYXJrcyDXqdecINeU15PXpNeT16TXnyDXlNee15DXldeX16HXoNeZ150g15HXmNeQ15HXnNeYLiDXlNeT15HXqCDXotep15XXmSDXnNeQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNee15fXldenINeQ15Ug15zXqdeg15XXqiDXoNeq15XXoNeZINeT16TXk9ek158uINep15nXnSDXnNeROiDXkNeZ16nXldeoINeW15Qg15DXmdeg15Ug16DXmdeq158g15zXkNeb15nXpNeUINei15wg15nXk9eZINeT16TXk9ek16DXmSDXpteTINep15zXmdep15kg15DXlSDXkNek15zXmden16bXmdeV16og15DXl9eo15XXqiDXkdei15zXldeqINeZ15vXldec15XXqiDXktec15nXqdeUINeR15DXmdeg15jXqNeg15guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ5NzM4OTUzMTAxNDE4NTUwOSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXlNeU15nXodeY15XXqNeZ15Qg15DXlSDXlC1Cb29rbWFya3Mg16nXnCDXlNeT16TXk9ek158g15TXnteQ15XXl9eh16DXmdedINeR15jXnNek15XXny4g15TXk9eR16gg16LXqdeV15kg15zXkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXnteX15XXpyDXkNeVINec16nXoNeV16og16DXqteV16DXmSDXk9ek15PXpNefLiDXqdeZ150g15zXkTog15DXmdep15XXqCDXlteUINeQ15nXoNeVINeg15nXqtefINec15DXm9eZ16TXlCDXotecINeZ15PXmSDXk9ek15PXpNeg15kg16bXkyDXqdec15nXqdeZINeQ15Ug15DXpNec15nXp9em15nXldeqINeQ15fXqNeV16og15HXotec15XXqiDXmdeb15XXnNeV16og15LXnNeZ16nXlCDXkdeQ15nXoNeY16jXoNeYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+IuKAj9ee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXoNeV16og15DXqiDXlNeU15nXodeY15XXqNeZ15Qg15DXlSDXlC1Cb29rbWFya3Mg16nXnCDXlNeT16TXk9ek158g15TXnteQ15XXl9eh16DXmdedINeR15jXkNeR15zXmC4g15TXk9eR16gg16LXqdeV15kg15zXkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXnteX15XXpyDXkNeVINec16nXoNeV16og16DXqteV16DXmSDXk9ek15PXpNefLiDXqdeZ150g15zXkTog15DXmdep15XXqCDXlteUINeQ15nXoNeVINeg15nXqtefINec15DXm9eZ16TXlCDXotecINeZ15PXmSDXk9ek15PXpNeg15kg16bXkyDXqdec15nXqdeZINeQ15Ug15DXpNec15nXp9em15nXldeqINeQ15fXqNeV16og15HXotec15XXqiDXmdeb15XXnNeV16og15LXnNeZ16nXlCDXkdeQ15nXoNeY16jXoNeYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0OTczODk1MzEwMTQxODU1MDkiPiLigI/XnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNep16DXldeqINeQ16og15TXlNeZ16HXmNeV16jXmdeUINeQ15Ug15QtQm9va21hcmtzINep15wg15TXk9ek15PXpNefINeU157XkNeV15fXodeg15nXnSDXkdeY15zXpNeV158uINeU15PXkdeoINei16nXldeZINec15DXpNep16gg15zXkNek15zXmden16bXmdeUINec157Xl9eV16cg15DXlSDXnNep16DXldeqINeg16rXldeg15kg15PXpNeT16TXny4g16nXmdedINec15E6INeQ15nXqdeV16gg15bXlCDXkNeZ16DXlSDXoNeZ16rXnyDXnNeQ15vXmdek15Qg16LXnCDXmdeT15kg15PXpNeT16TXoNeZINem15Mg16nXnNeZ16nXmSDXkNeVINeQ16TXnNeZ16fXpteZ15XXqiDXkNeX16jXldeqINeR16LXnNeV16og15nXm9eV15zXldeqINeS15zXmdep15Qg15HXkNeZ16DXmNeo16DXmC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsYXJtIiBtc2dpZD0iMTM3OTI5NDU1NjM2MjA5MTgxNCI+IteU15LXk9eo16og15TXqteo15DXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsYXJtIiBtc2dpZD0iMzE2MzkyMDM5MTU3NDczODQ4Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeS15PXmdeoINeU16rXqNeQ15Qg15HXkNek15zXmden16bXmdeUINee15XXqten16DXqiDXqdecINep16LXldefINee16LXldeo16guINeQ16TXnNeZ16fXpteZ15XXqiDXnteh15XXmdee15XXqiDXqdecINep16LXldefINee16LXldeo16gg15DXmdeg158g157XmdeZ16nXnteV16og16rXm9eV16DXlCDXlteVLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWRkVm9pY2VtYWlsIiBtc2dpZD0iNTUyNTY2MDAyNjA5MDk1OTA0NCI+IteU15XXodejINeT15XXkNeoINen15XXnNeZIjwvc3RyaW5nPgpAQCAtOTU1LDcgKzk2NCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSI0MTg3Nzg2NzkzMzYwMzI2NjU0Ij4i15TXm9ek16TXlCDXnNee15DXnteqINeX15HXmdec15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iMzE4MDc0MTc3MzIzMzg2MjEyNiI+Itee15DXpNep16gg15zXntep16rXntepINec15TXkteZ16kg15HXp9ep15XXqiDXqdecINee15DXnteq15kg15fXkdeZ15zXldeqLiDXlNeo16nXkNeUINeW15Ug15zXoteV15zXnSDXkNeZ16DXlCDXoNeX15XXpteUINec15DXpNec15nXp9em15nXldeqINeo15LXmdec15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlcmlhbFBvcnQiIG1zZ2lkPSI1NDYwODMzMjc2NTQ2MzEwNzYiPiLXkteZ16nXlCDXnNeZ16bXmdeQ15XXqiDXmNeV16jXmdeV16oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXJpYWxQb3J0IiBtc2dpZD0iMjk5MTYzOTk4NTIyNDU5ODE5MyI+Itee15DXpNep16gg15zXkdei15zXmdedINec15LXqdeqINec15nXpteZ15DXldeqINeY15XXqNeZ15XXqiDXkdeQ157Xptei15XXqiDXntee16nXpyDXlC0gQVBJINep15wgU2VyaWFsTWFuYWdlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXJpYWxQb3J0IiBtc2dpZD0iMjk5MTYzOTk4NTIyNDU5ODE5MyI+IuKAj9ee15DXpNep16gg15zXkdei15zXmdedINec15LXqdeqINec15nXpteZ15DXldeqINeY15XXqNeZ15XXqiDXkdeQ157Xptei15XXqiDXntee16nXpyDXlC0gQVBJINep15wgU2VyaWFsTWFuYWdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNTA3Nzc3NDI5Nzk0MzQwOTI4NSI+IteS15nXqdeUINec16HXpNen15kg16rXldeb158g15HXkNeV16TXnyDXl9eZ16bXldeg15kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjQ1NDQzNDY0ODY2OTc4NTM2ODUiPiLXnteQ16TXqdeoINec15HXotec15nXnSDXnNeS16nXqiDXnNeh16TXp9eZINeq15XXm9efINee15TXntei15jXpNeqLiDXnNei15XXnNedINec15Ag15DXnteV16gg15zXlNeZ15XXqiDXpteV16jXmiDXoteR15XXqCDXkNek15zXmden16bXmdeV16og16jXkteZ15zXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlTG9jayIgbXNnaWQ9IjM1Mjc1NTgzNjY2MTY2ODA4ODkiPiLXk9eX15Qg16LXk9eb15XXoNeZINee15vXqdeZ16gg15DXldeY15XXnteY15nXmdedIjwvc3RyaW5nPgpAQCAtMTExNyw5ICsxMTI2LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9IndoaWNoQXBwbGljYXRpb24iIG1zZ2lkPSI0NTMzMTg1OTQ3MDY0NzczMzg2Ij4i15TXqdec157XqiDXpNei15XXnNeUINeR15DXntem16LXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2hpY2hIb21lQXBwbGljYXRpb24iIG1zZ2lkPSI0NjE2NDIwMTcyNzI3MzI2NzgyIj4i15HXl9eoINeQ16TXnNeZ16fXpteZ15Qg15zXk9ejINeU15HXmdeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+IteU16nXqtee16kg15vXkdeo15nXqNeqINee15fXk9ecINei15HXldeoINek16LXldec15Qg15bXlS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjbGVhckRlZmF1bHRIaW50TXNnIiBtc2dpZD0iMzI1MjU4NDY4OTUxMjA3NzI1NyI+Iteg16fXlCDXkNeqINeU15LXk9eo16og15TXnteX15PXnCDXkVwn15TXkteT16jXldeqINee16LXqNeb16pcJyAmbHQ74oCPIEdvb2dsZSBBcHBz4oCPICZsdDsgXCfXlNeV16jXk9eV16pcJy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjbGVhckRlZmF1bHRIaW50TXNnIiBtc2dpZD0iMzI1MjU4NDY4OTUxMjA3NzI1NyI+IuKAj9eg16fXlCDXkNeqINeU15LXk9eo16og15TXnteX15PXnCDXkVwn15TXkteT16jXldeqINee16LXqNeb16pcJyAmbHQ74oCPIEdvb2dsZSBBcHBz4oCPICZsdDsgXCfXlNeV16jXk9eV16pcJy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiLXkdeX15nXqNeqINek16LXldec15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjaG9vc2VVc2JBY3Rpdml0eSIgbXNnaWQ9IjY4OTQ3NDg0MTYwNzM1ODM1MDkiPiLXkdeX16gg15DXpNec15nXp9em15nXlCDXoteR15XXqCDXlNeq16fXnyDXlC1VU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VVc2JBY3Rpdml0eSIgbXNnaWQ9IjY4OTQ3NDg0MTYwNzM1ODM1MDkiPiLigI/XkdeX16gg15DXpNec15nXp9em15nXlCDXoteR15XXqCDXlNeq16fXnyDXlC1VU0IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub0FwcGxpY2F0aW9ucyIgbXNnaWQ9IjI5OTE4MTQyNzM5MzY1MDQ2ODkiPiLXkNeZ158g15DXpNec15nXp9em15nXldeqINep15nXm9eV15zXldeqINec15HXpteiINek16LXldec15Qg15bXlS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZXJyX3RpdGxlIiBtc2dpZD0iMTkwNTgwMDU2MDMxNzEzNzc1MiI+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZXJyX2FwcGxpY2F0aW9uIiBtc2dpZD0iOTMyNjI4NDg4MDEzMDkyNzc2Ij4i15zXptei16jXoNeVLCDXpNei15XXnNeqIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g15TXldek16HXp9eULiI8L3N0cmluZz4KQEAgLTExMzgsOSArMTE0Nyw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ19vcmlnaW5hbCIgbXNnaWQ9IjE4ODEwMjAyMzAyMTY2ODY4MyI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g15TXldek16LXnCDXkdee16fXldeoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zY2FsZSIgbXNnaWQ9IjMyMDI5NTU2Njc2NzU5NDQ0OTkiPiLXqdeZ16DXldeZINen16DXlC3XnteZ15PXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zaG93IiBtc2dpZD0iNDAxMzg3ODg3NjQ4NjY1NTg5MiI+IteU16bXkiDXqtee15nXkyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+IteQ16TXqdeoINeq15vXldeg15Qg15bXlSDXnteX15PXqSDXkVwn15TXkteT16jXldeqINee16LXqNeb16pcJyAmbHQ74oCPIEdvb2dsZSBBcHBz4oCPICZsdDsgXCfXlNeV16jXk9eV16pcJy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXZfYXBwbGljYXRpb24iIG1zZ2lkPSIzMzA3MjA5MTkyMTU1NDQyODI5Ij4i15TXkNek15zXmden16bXmdeUIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gKNeq15TXnNeZ15ogPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSDXlNek16gg15DXqiDXnteT15nXoNeZ15XXqiBTdHJpY3RNb2RlINeR15DXm9eZ16TXlCDXotem157XmdeqINep15zXlS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiLXlNeq15TXnNeZ15ogPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+INeU16TXqCDXkNeqINee15PXmdeg15nXldeqIFN0cmljdE1vZGUg15HXkNeb15nXpNeUINei16bXnteZ16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX2hpbnQiIG1zZ2lkPSIxMDY0NTI0MDg0NTQzMzA0NDU5Ij4i4oCP15DXpNep16gg16rXm9eV16DXlCDXlteVINee15fXk9epINeRXCfXlNeS15PXqNeV16og157Xoteo15vXqlwnICZsdDvigI8gR29vZ2xlIEFwcHPigI8gJmx0OyBcJ9eU15XXqNeT15XXqlwnLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtdl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjMzMDcyMDkxOTIxNTU0NDI4MjkiPiLigI/XlNeQ16TXnNeZ16fXpteZ15QgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiAo16rXlNec15nXmiA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTIkczwveGxpZmY6Zz4pINeU16TXqCDXkNeqINee15PXmdeg15nXldeqIFN0cmljdE1vZGUg15HXkNeb15nXpNeUINei16bXnteZ16og16nXnNeVLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtdl9wcm9jZXNzIiBtc2dpZD0iNTEyMDM5NzAxMjA0NzQ2MjQ0NiI+IuKAj9eU16rXlNec15nXmiA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g15TXpNeoINeQ16og157Xk9eZ16DXmdeV16ogU3RyaWN0TW9kZSDXkdeQ15vXmdek15Qg16LXptee15nXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ190aXRsZSIgbXNnaWQ9IjE1ODQxOTIyODU0NDE0MDU3NDYiPiLigI9BbmRyb2lkINee15HXpteiINep15PXqNeV15LigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19hcGsiIG1zZ2lkPSI3OTA0MDQyNjgyMTExNTI2MTY5Ij4i157Xkdem16Ig15DXldek15jXmdee15nXltem15nXlCDXqdecINeQ16TXnNeZ16fXpteZ15QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDXnteq15XXmiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3N0YXJ0aW5nX2FwcHMiIG1zZ2lkPSI0NTE0NjQ1MTYzNDY5MjY3MTMiPiLXntek16LXmdecINeQ16TXnNeZ16fXpteZ15XXqi4iPC9zdHJpbmc+CkBAIC0xMTU2LDE0ICsxMTY1LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJzZW5kVGV4dCIgbXNnaWQ9IjUyMDk4NzQ1NzE5NTk0NjkxNDIiPiLXkdeX15nXqNeqINek16LXldec15Qg15zXkdeZ16bXldeiINei150g15jXp9eh15giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfcmluZ3RvbmUiIG1zZ2lkPSI2ODg1NDIxNDA2ODQ1NzM0NjUwIj4i16LXldem157XqiDXp9eV15wg16nXnCDXptec16bXldecIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljIiBtc2dpZD0iNTQyMTY1MTE1NzEzODYyODE3MSI+Itei15XXptee16og16fXldecINep15wg157Xk9eZ15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWNfaGludF9wbGF5aW5nX3Rocm91Z2hfYmx1ZXRvb3RoIiBtc2dpZD0iOTE2NTk4NDM3OTM5NDYwMTUzMyI+IteU16TXotec15Qg15HXkNee16bXoteV16ogQmx1ZXRvb3RoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfcGxheWluZ190aHJvdWdoX2JsdWV0b290aCIgbXNnaWQ9IjkxNjU5ODQzNzkzOTQ2MDE1MzMiPiLigI/XlNek16LXnNeUINeR15DXntem16LXldeqIEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3NpbGVudF9yaW5ndG9uZV9zZWxlY3RlZCIgbXNnaWQ9IjgzMTA3Mzk5NjA5NzMxNTYyNzIiPiLXlNeV15LXk9eoINeo15nXoNeS15jXldefINep16fXmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9jYWxsIiBtc2dpZD0iMzk0MTY4MDA0MTI4Mjc4ODcxMSI+Itei15XXptee16og16fXldecINeR16nXmdeX15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYmx1ZXRvb3RoX2NhbGwiIG1zZ2lkPSIyMDAyODkxOTI2MzUxMTUxNTM0Ij4i16LXldem157XqiDXlNen15XXnCDXkdep15nXl9eUINeRLUJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ibHVldG9vdGhfY2FsbCIgbXNnaWQ9IjIwMDI4OTE5MjYzNTExNTE1MzQiPiLigI/XoteV16bXnteqINeU16fXldecINeR16nXmdeX15Qg15EtQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2FsYXJtIiBtc2dpZD0iMTk4NTE5MTYxNjA0MjY4OTEwMCI+Itei15XXptee16og16fXldecINep15wg15TXqteo15DXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIyNDIyMjY1NjU2NzQ0Mjc2NzE1Ij4i16LXldem157XqiDXp9eV15wg16nXnCDXlNeq16jXkNeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfdW5rbm93biIgbXNnaWQ9IjE0MDAyMTk2Njk3NzA0NDU5MDIiPiLXoteV16bXnteqINen15XXnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2JsdWV0b290aCIgbXNnaWQ9IjY1Mzg4OTQxNzcyNTU5NjQzNDAiPiLXoteV16bXnteqINen15XXnCDXqdecIEJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2JsdWV0b290aCIgbXNnaWQ9IjY1Mzg4OTQxNzcyNTU5NjQzNDAiPiLigI/XoteV16bXnteqINen15XXnCDXqdecIEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX3JpbmdlciIgbXNnaWQ9IjMzMjYwMDM4NDcwMDYxNjI0OTYiPiLXoteV16bXnteqINen15XXnCDXqdecINeo15nXoNeS15jXldefIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25faW5jYWxsIiBtc2dpZD0iODg5MDA3MzIxODE1NDU0MzM5NyI+Itei15XXptee16og16fXldecINep15wg16nXmdeX15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX21lZGlhIiBtc2dpZD0iNDIxNzMxMTcxOTY2NTE5NDIxNSI+Itei15XXptee16og16fXldecINep15wg157Xk9eZ15QiPC9zdHJpbmc+CkBAIC0xMTc0LDIzICsxMTgzLDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9waWNrZXJfdGl0bGUiIG1zZ2lkPSIzNTE1MTQzOTM5MTc1MTE5MDk0Ij4i16jXmdeg15LXmNeV16DXmdedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfdW5rbm93biIgbXNnaWQ9IjU0Nzc5MTk5ODg3MDE3ODQ3ODgiPiLXqNeZ16DXkteY15XXnyDXnNeQINeZ15PXldeiIjwvc3RyaW5nPgogICA8cGx1cmFscyBuYW1lPSJ3aWZpX2F2YWlsYWJsZSI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY2NTQxMjM5ODc0MTgxNjg2OTMiPiLXqNep16ogV2ktRmkg15bXnteZ16DXlCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+Iteo16nXqteV16ogV2ktRmkg15bXnteZ16DXldeqIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjY1NDEyMzk4NzQxODE2ODY5MyI+IuKAj9eo16nXqiBXaS1GaSDXltee15nXoNeUIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MTkyNDI0NDg5MTY4Mzk3Mzg2Ij4i4oCP16jXqdeq15XXqiBXaS1GaSDXltee15nXoNeV16oiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlX2RldGFpbGVkIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTYzNDEwMTQ1MDM0MzI3NzM0NSI+Iteo16nXqiBXaS1GaSDXpNeq15XXl9eUINeW157Xmdeg15QiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc5MTU4OTUzMjM2NDQyOTI3NjgiPiLXqNep16rXldeqIFdpLUZpINek16rXldeX15XXqiDXltee15nXoNeV16oiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4i4oCP16jXqdeqIFdpLUZpINek16rXldeX15Qg15bXnteZ16DXlCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzkxNTg5NTMyMzY0NDI5Mjc2OCI+IuKAj9eo16nXqteV16ogV2ktRmkg16TXqteV15fXldeqINeW157Xmdeg15XXqiI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4i15vXoNeZ16HXlCDXnNeo16nXqiBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4i4oCP15vXoNeZ16HXlCDXnNeo16nXqiBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4i15TXmdeb16DXoSDXnNeo16nXqiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luX2RldGFpbGVkICg4MDAwMDgxOTQxNDQ3OTc2MTE4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkIiBtc2dpZD0iNzkwNDIxNDIzMTY1MTU0NjM0NyI+IteQ15nXnyDXkNek16nXqNeV16og15zXlNeq15fXkdeoINecLVdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkIiBtc2dpZD0iNzkwNDIxNDIzMTY1MTU0NjM0NyI+IuKAj9eQ15nXnyDXkNek16nXqNeV16og15zXlNeq15fXkdeoINecLVdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiDXkNeZ16DXlSDXnteX15XXkdeoINeU15nXmNeRINec15DXmdeg15jXqNeg15guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZGlhbG9nX3RpdGxlIiBtc2dpZD0iOTc2MTE3ODI2NTkzMjQ1MTciPiJXaS1GaSDXmdep15nXqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3R1cm5vbl9tZXNzYWdlIiBtc2dpZD0iMjkwOTI1MDk0MjI5OTYyNzI0NCI+IteU16TXotecIFdpLUZpINeZ16nXmdeoLiDXpNei15XXnNeUINeW15Ug16rXm9eR15Qg15DXqiDXlNec16fXldeXL9eU16DXp9eV15PXlCDXlNeX157XlCDXqdecINeULVdpLUZpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZhaWxlZF9tZXNzYWdlIiBtc2dpZD0iMzc2MzY2OTY3NzkzNTYyMzA4NCI+Itec15Ag16DXmdeq158g15zXlNek16LXmdecIFdpLUZpINeZ16nXmdeoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMDY4MzIxODgxNjczNzM0ODg2Ij4iV2ktRmkg15nXqdeZ16gg157Xldek16LXnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijk3NjExNzgyNjU5MzI0NTE3Ij4i4oCPV2ktRmkg15nXqdeZ16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90dXJub25fbWVzc2FnZSIgbXNnaWQ9IjI5MDkyNTA5NDIyOTk2MjcyNDQiPiLigI/XlNek16LXnCBXaS1GaSDXmdep15nXqC4g16TXoteV15zXlCDXlteVINeq15vXkdeUINeQ16og15TXnNen15XXly/XlNeg16fXldeT15Qg15TXl9ee15Qg16nXnCDXlC1XaS1GaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mYWlsZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NjM2Njk2Nzc5MzU2MjMwODQiPiLigI/XnNeQINeg15nXqtefINec15TXpNei15nXnCBXaS1GaSDXmdep15nXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjA2ODMyMTg4MTY3MzczNDg4NiI+IuKAj1dpLUZpINeZ16nXmdeoINee15XXpNei15wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTYzODk0OTk1Mzk5Mzg5NDMzNSI+IteS16Ig16LXkdeV16gg15TXkteT16jXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMTY0NTI2NzI1OTI3MjgyOTU1OSI+Iten15HXnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlY2xpbmUiIG1zZ2lkPSIyMTEyMjI1NDUxNzA2MTM3ODk0Ij4i15PXl9eUIjwvc3RyaW5nPgpAQCAtMTE5OCwyOCArMTIwNywyOCBAQAogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl90b19jb25uZWN0X3RpdGxlIiBtc2dpZD0iNDk1ODgwMzk0ODY1ODUzMzYzNyI+IteU15bXnteg15Qg15zXlNeq15fXkdeoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJvbV9tZXNzYWdlIiBtc2dpZD0iNTcwMzg5MTc0NzMxOTUxNzY5Ij4i157XkNeqOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3RvX21lc3NhZ2UiIG1zZ2lkPSIyNDg5Njg5NzQ1MjIwNDQwOTkiPiLXkNecOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VudGVyX3Bpbl9tZXNzYWdlIiBtc2dpZD0iNTkyMDkyOTU1MDM2NzgyODk3MCI+IteU16fXnNeTINeQ16og16fXldeTINeULVBJTiDXlNeg15PXqNepLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VudGVyX3Bpbl9tZXNzYWdlIiBtc2dpZD0iNTkyMDkyOTU1MDM2NzgyODk3MCI+IuKAj9eU16fXnNeTINeQ16og16fXldeTINeULVBJTiDXlNeg15PXqNepLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UiIG1zZ2lkPSI4NTMwNTYzMzIzODgwOTIxMDk0Ij4iUElOOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDEyOTgxMjU3NzQyMjMyNDc1Ij4i15TXmNeQ15HXnNeYINeZ16rXoNeq16cg157XqNep16og15QtV2ktRmkg15HXkNeV16TXnyDXltee16DXmSDXkdep16LXlCDXqdeU15XXkCDXnteX15XXkdeoINeQ15wgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzM2MzkwNzIxMzc4NzQ2OTE1MSI+IteU15jXnNek15XXnyDXmdeq16DXqtenINee16jXqdeqINeULVdpLUZpINeR15DXldek158g15bXnteg15kg15HXqdei15Qg16nXlNeV15Ag157Xl9eV15HXqCDXkNecIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODAxMjk4MTI1Nzc0MjIzMjQ3NSI+IuKAj9eU15jXkNeR15zXmCDXmdeq16DXqtenINee16jXqdeqINeULVdpLUZpINeR15DXldek158g15bXnteg15kg15HXqdei15Qg16nXlNeV15Ag157Xl9eV15HXqCDXkNecIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczNjM5MDcyMTM3ODc0NjkxNTEiPiLigI/XlNeY15zXpNeV158g15nXqteg16rXpyDXnteo16nXqiDXlC1XaS1GaSDXkdeQ15XXpNefINeW157XoNeZINeR16nXoteUINep15TXldeQINee15fXldeR16gg15DXnCA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiLXlNeV16HXoyDXqteVIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfdGl0bGUiIG1zZ2lkPSI3Mjk2NjEyNzgxMTI4OTE3NzE5Ij4i16nXldec15cg15TXldeT16LXldeqIFNNUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4iJmx0O2ImZ3Q7IDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gJmx0Oy8gYiZndDsg16nXldec15cg157Xodek16gg16jXkSDXqdecINeU15XXk9ei15XXqiBTTVMuINeU15DXnSDXkdeo16bXldeg15og15zXkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15bXlSDXnNeU157XqdeZ15og15zXqdec15XXlyDXlNeV15PXoteV16o/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfdGl0bGUiIG1zZ2lkPSI3Mjk2NjEyNzgxMTI4OTE3NzE5Ij4i4oCP16nXldec15cg15TXldeT16LXldeqIFNNUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4i4oCPJmx0O2ImZ3Q7IDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gJmx0Oy8gYiZndDsg16nXldec15cg157Xodek16gg16jXkSDXqdecINeU15XXk9ei15XXqiBTTVMuINeU15DXnSDXkdeo16bXldeg15og15zXkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15bXlSDXnNeU157XqdeZ15og15zXqdec15XXlyDXlNeV15PXoteV16o/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfeWVzIiBtc2dpZD0iMzY2MzcyNTk5Mzg1NTgxNjgwNyI+IteQ16TXqdeoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbm8iIG1zZ2lkPSI2MjU0Mzg1NjEzOTU1MzQ5ODIiPiLXk9eX15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX21lc3NhZ2UiIG1zZ2lkPSIxNjQ1NDM2NDY2Mjg1MzEwODU1Ij4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsg16jXldem15Qg15zXqdec15XXlyDXlNeV15PXoteUINeQ15wgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkRFU1RfQUREUkVTUyI+JTIkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiLigI8mbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDXqNeV16bXlCDXnNep15zXldeXINeU15XXk9ei15Qg15DXnCAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDsvYiZndDsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjM0OTIwMjU3MTk4NjgwNzg0NTciPiLXlNek16LXldec15QgIjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+Itei16nXldeZ15Qg15zXkteo15XXnSDXnNeX15nXldeR15nXnSI8L2ZvbnQ+IiDXkdeX16nXkdeV158g15TXnteb16nXmdeoINeU16DXmdeZ15Mg16nXnNeaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19wcmVtaXVtX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjU1MjM4MjYzNDkxMDUxMjM2ODciPjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IteU16TXoteV15zXlCDXqteS16jXldedINec15fXmdeV15HXmdedINeR15fXqdeR15XXnyDXlNee15vXqdeZ16gg15TXoNeZ15nXkyDXqdec15ouIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWxsb3ciIG1zZ2lkPSI0NDU4ODc4NjM3MTExMDIzNDEzIj4i16nXnNeXIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9kZW55IiBtc2dpZD0iMjkyNzM4OTg0MDIwOTE3MDcwNiI+IteR15jXnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX2Nob2ljZSIgbXNnaWQ9IjUyODk1Mzg1OTIyNzIyMTgxMzYiPiLXlteb15XXqCDXkNeqINeU15HXl9eZ16jXlCDXqdec15kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl91bmRvX2luc3RydWN0aW9uIiBtc2dpZD0iNDk2MDk0NDEzMzA1MjI4NzQ4NCI+Iteg15nXqtefINec16nXoNeV16og15bXkNeqINee15DXldeX16gg15nXldeq16gg15FcJ9eU15LXk9eo15XXqlwnICZndDsgXCfXkNek15zXmden16bXmdeV16pcJyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4i4oCP16DXmdeq158g15zXqdeg15XXqiDXlteQ16og157XkNeV15fXqCDXmdeV16rXqCDXkVwn15TXkteT16jXldeqXCcgJmd0OyBcJ9eQ16TXnNeZ16fXpteZ15XXqlwnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbHdheXNfYWxsb3ciIG1zZ2lkPSIzMjQxMTgxMTU0ODY5NDkzMzY4Ij4i15DXpNep16gg16rXnteZ15MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX25ldmVyX2FsbG93IiBtc2dpZD0iNDQ2OTkyNzY1Nzc0MjY5NjczIj4i15zXoteV15zXnSDXkNecINeq15DXpNep16giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiLXm9eo15jXmdehINeULVNJTSDXlNeV16HXqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4i15TXqNep16og15TXodec15XXnNeo15nXqiDXnNeQINeq15TXmdeUINeW157Xmdeg15Qg16LXkyDXqdeq16TXoteZ15wg157Xl9eT16kg15zXkNeX16gg15TXm9eg16HXqiDXm9eo15jXmdehIFNJTSDXl9eV16fXmS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiLigI/Xm9eo15jXmdehINeULVNJTSDXlNeV16HXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4i4oCP15TXqNep16og15TXodec15XXnNeo15nXqiDXnNeQINeq15TXmdeUINeW157Xmdeg15Qg16LXkyDXqdeq16TXoteZ15wg157Xl9eT16kg15zXkNeX16gg15TXm9eg16HXqiDXm9eo15jXmdehIFNJTSDXl9eV16fXmS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiLXodeZ15XXnSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF90aXRsZSIgbXNnaWQ9IjM3MTk2NzA1MTI4ODk2NzQ2OTMiPiLXm9eo15jXmdehINeULVNJTSDXoNeV16HXoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF90aXRsZSIgbXNnaWQ9IjM3MTk2NzA1MTI4ODk2NzQ2OTMiPiLigI/Xm9eo15jXmdehINeULVNJTSDXoNeV16HXoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF9tZXNzYWdlIiBtc2dpZD0iNjU5OTk0NTMwMTE0MTA1MDIxNiI+IteU16TXotecINee15fXk9epINeQ16og15TXnteb16nXmdeoINeb15PXmSDXnNeS16nXqiDXkNecINeU16jXqdeqINeU16HXnNeV15zXqNeZ16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2ltX3Jlc3RhcnRfYnV0dG9uIiBtc2dpZD0iNDcyMjQwNzg0MjgxNTIzMjM0NyI+IteU16TXotecINee15fXk9epIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODM0OTM2MjYyMzA2ODgxOTI5NSI+IteU15LXk9eo16og16nXoteUIjwvc3RyaW5nPgpAQCAtMTIzMCwzOCArMTIzOSwzOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybXNfZGVzY3JpcHRpb25fYXBwIiBtc2dpZD0iNTEzOTgzNjE0MzI5MzI5OTQxNyI+Itee15jXotedIDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fcGVybWlzc2lvbnMiIG1zZ2lkPSI3MjgzMzU3NzI4MjE5MzM4MTEyIj4i15zXkCDXk9eo15XXqdeZ150g15DXmdep15XXqNeZ150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtX2Nvc3RzX21vbmV5IiBtc2dpZD0iNDkwMjQ3MDMyNDE0MjE1MTExNiI+Itek16LXldec15Qg15bXlSDXotep15XXmdeUINec15fXmdeZ15Eg15DXldeq15og15HXm9eh16M6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4i15DXntem16LXmSDXnteh15XXkiBVU0Ig15zXkNeX16HXldefINeR16DXpNeXINeS15PXldecIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1OTAxNDU5MDQxMzk4NzUxNDk1Ij4iVVNCINee15fXldeR16giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMzMDg1MzgwOTQzMTY0Nzc4MzkiPiLXlNeq15fXkdeo16og15zXnteX16nXkSDXkdeQ157Xptei15XXqiBVU0IuINeS16Ig15HXnNeX16bXnyDXqdeR15TXntep15og15DXnSDXkdeo16bXldeg15og15zXlNei16rXmdenINen15HXpteZ150g15HXmdefINeU157Xl9ep15Eg15zXkNeX16HXldefINeULVVTQiDXqdecINee15vXqdeZ16gg15QtQW5kcm9pZCDXqdec15ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNTM1MTAwMDQ0NjAzNzgxMSI+IteU16rXl9eR16jXqiDXnNee15fXqdeRINeR15DXntem16LXldeqIFVTQi4g15LXoiDXkdec15fXptefINep15HXlNee16nXmiDXkNedINeR16jXpteV16DXmiDXnNeU16LXqteZ16cg16fXkdem15nXnSDXkdeZ158g15TXnteX16nXkSDXnNeR15nXnyDXm9eo15jXmdehINeULVNEINep15wg157Xm9ep15nXqCDXlC1BbmRyb2lkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjEwNTIyNTk5MzAzNjk1MDgyMzUiPiLXlNek16LXnCDXkNeX16HXldefIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzAxNzA0NTIxNzM2NTU0MDY1OCI+IteZ16kg15HXoteZ15Qg15HXqdeZ157XldepINeR15DXl9eh15XXnyDXlC1VU0Ig16nXnNeaINec15DXl9eh15XXnyDXkdeg16TXlyDXkteT15XXnCDXkS1VU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4NzYwMTg1MTI3MTY5NzAzMTMiPiLXmdepINeR16LXmdeUINeR16nXmdee15XXqSDXkdeb16jXmNeZ16Eg15QtU0Qg16nXnNeaINec15DXl9eh15XXnyDXkdeg16TXlyDXkteT15XXnCDXkS1VU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODE3NTg5MjU1NDc1NzIxNjUyNSI+IlVTQiDXnteX15XXkdeoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4i4oCP15DXntem16LXmSDXnteh15XXkiBVU0Ig15zXkNeX16HXldefINeR16DXpNeXINeS15PXldecIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1OTAxNDU5MDQxMzk4NzUxNDk1Ij4i4oCPVVNCINee15fXldeR16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMzMDg1MzgwOTQzMTY0Nzc4MzkiPiLigI/XlNeq15fXkdeo16og15zXnteX16nXkSDXkdeQ157Xptei15XXqiBVU0IuINeS16Ig15HXnNeX16bXnyDXqdeR15TXntep15og15DXnSDXkdeo16bXldeg15og15zXlNei16rXmdenINen15HXpteZ150g15HXmdefINeU157Xl9ep15Eg15zXkNeX16HXldefINeULVVTQiDXqdecINee15vXqdeZ16gg15QtQW5kcm9pZCDXqdec15ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgwNTM1MTAwMDQ0NjAzNzgxMSI+IuKAj9eU16rXl9eR16jXqiDXnNee15fXqdeRINeR15DXntem16LXldeqIFVTQi4g15LXoiDXkdec15fXptefINep15HXlNee16nXmiDXkNedINeR16jXpteV16DXmiDXnNeU16LXqteZ16cg16fXkdem15nXnSDXkdeZ158g15TXnteX16nXkSDXnNeR15nXnyDXm9eo15jXmdehINeULVNEINep15wg157Xm9ep15nXqCDXlC1BbmRyb2lkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjEwNTIyNTk5MzAzNjk1MDgyMzUiPiLigI/XlNek16LXnCDXkNeX16HXldefIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzAxNzA0NTIxNzM2NTU0MDY1OCI+IuKAj9eZ16kg15HXoteZ15Qg15HXqdeZ157XldepINeR15DXl9eh15XXnyDXlC1VU0Ig16nXnNeaINec15DXl9eh15XXnyDXkdeg16TXlyDXkteT15XXnCDXkS1VU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfZXJyb3JfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4NzYwMTg1MTI3MTY5NzAzMTMiPiLigI/XmdepINeR16LXmdeUINeR16nXmdee15XXqSDXkdeb16jXmNeZ16Eg15QtU0Qg16nXnNeaINec15DXl9eh15XXnyDXkdeg16TXlyDXkteT15XXnCDXkS1VU0IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODE3NTg5MjU1NDc1NzIxNjUyNSI+IuKAj1VTQiDXnteX15XXkdeoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5Mzk4MjI3ODM4MjgxODM3NjMiPiLXkteiINeb15PXmSDXnNeU16LXqteZ16cg16fXkdem15nXnSDXnNee15fXqdeRL9ee15TXnteX16nXkS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzMzYwNTgzOTY2NjM1MTYwMTciPiLXm9eR15Qg15DXl9eh15XXnyBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTY1Njg1MjA5ODU1NTYyMzgyMiI+IteS16Ig15vXk9eZINec15vXkdeV16og15DXqiDXkNeX16HXldefINeULVVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX3RpdGxlIiBtc2dpZD0iNjYwMTI5ODUxNzA4Nzc1ODUzIj4i15DXl9eh15XXnyBVU0Ig16nXoNee16bXkCDXkdep15nXnteV16kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+Itec16TXoNeZINep16rXm9eR15Qg15DXqiDXkNeX16HXldefINeULVVTQiwg15HXmNecINeQ16og15TXmNei15nXoNeUIChcIteU15XXpteQXCIpINep15wg15DXl9eh15XXnyDXlC1VU0Ig16nXnCDXlC1BbmRyb2lkINep15zXmiDXnteU157Xl9ep15EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+Itec16TXoNeZINep16rXm9eR15Qg15DXqiDXkNeX16HXldefINeULVVTQiwg15XXk9eQINep15HXmdeY15zXqiDXkNeqINeU15jXoteZ16DXlCAoXCLXlNeV16bXkNeqXCIpINep15wg15vXqNeY15nXoSDXlC1TRCDXqdecINeULUFuZHJvaWQg16nXnNeaINee15TXnteX16nXkS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiLXm9eR15Qg15DXl9eh15XXnyBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIxOTcwMzc0ODk4MjYzMDYzODM2Ij4i15TXmdeq15Qg15HXoteZ15Qg15HXm9eZ15HXldeZINeQ15fXodeV158g15QtVVNCLiDXldeT15Ag16nXkdeZ15jXnNeqINeQ16og15jXoteZ16DXqiDXnteQ16jXlyDXlC1VU0IsINeV15zXkNeX16gg157Xm9efINeg16HXlCDXqdeV15EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RpdGxlIiBtc2dpZD0iOTYzMDM5MDMzNDcwNDc4Njk3Ij4i15TXpNei15wg15DXl9eh15XXnyBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGV4dCIgbXNnaWQ9IjUxMDA0Mjg3NTcxMDc0Njk0NTQiPiLXkNedINeq16TXoteZ15wg15DXl9eh15XXnyBVU0IsINeQ16TXnNeZ16fXpteZ15XXqiDXnteh15XXmdee15XXqiDXqdeR15TXnyDXkNeq15Qg157Xqdeq157XqSDXmdek16HXmden15Ug15zXpNei15XXnCwg15XXmdeZ16rXm9efINep15TXnyDXnNeQINeZ15TXmdeVINeW157Xmdeg15XXqiDXoteTINep16rXm9eR15Qg15DXqiDXkNeX16HXldefINeULVVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkbGdfZXJyb3JfdGl0bGUiIG1zZ2lkPSI3MzIzNjU4NDY5NjI2NTE0MjA3Ij4i16TXoteV15zXqiBVU0Ig16DXm9ep15zXlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjMzNjA1ODM5NjY2MzUxNjAxNyI+IuKAj9eb15HXlCDXkNeX16HXldefIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjU2ODUyMDk4NTU1NjIzODIyIj4i4oCP15LXoiDXm9eT15kg15zXm9eR15XXqiDXkNeqINeQ15fXodeV158g15QtVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiLigI/XkNeX16HXldefIFVTQiDXqdeg157XpteQINeR16nXmdee15XXqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MjY0MDI1MjgwNzc3MjE5NTIxIj4i4oCP15zXpNeg15kg16nXqteb15HXlCDXkNeqINeQ15fXodeV158g15QtVVNCLCDXkdeY15wg15DXqiDXlNeY16LXmdeg15QgKFwi15TXldem15BcIikg16nXnCDXkNeX16HXldefINeULVVTQiDXqdecINeULUFuZHJvaWQg16nXnNeaINee15TXnteX16nXkS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQzOTY5NzgyNDYwNjEzMTE0Ij4i4oCP15zXpNeg15kg16nXqteb15HXlCDXkNeqINeQ15fXodeV158g15QtVVNCLCDXldeT15Ag16nXkdeZ15jXnNeqINeQ16og15TXmNei15nXoNeUIChcIteU15XXpteQ16pcIikg16nXnCDXm9eo15jXmdehINeULVNEINep15wg15QtQW5kcm9pZCDXqdec15og157XlNee15fXqdeRLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfYnV0dG9uX21vdW50IiBtc2dpZD0iNzA2MDIxODAzNDkwMDY5NjAyOSI+IuKAj9eb15HXlCDXkNeX16HXldefIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjE5NzAzNzQ4OTgyNjMwNjM4MzYiPiLigI/XlNeZ16rXlCDXkdei15nXlCDXkdeb15nXkdeV15kg15DXl9eh15XXnyDXlC1VU0IuINeV15PXkCDXqdeR15nXmNec16og15DXqiDXmNei15nXoNeqINee15DXqNeXINeULVVTQiwg15XXnNeQ15fXqCDXnteb158g16DXodeUINep15XXkS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiLigI/XlNek16LXnCDXkNeX16HXldefIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+IuKAj9eQ150g16rXpNei15nXnCDXkNeX16HXldefIFVTQiwg15DXpNec15nXp9em15nXldeqINee16HXldeZ157XldeqINep15HXlNefINeQ16rXlCDXntep16rXntepINeZ16TXodeZ16fXlSDXnNek16LXldecLCDXldeZ15nXqteb158g16nXlNefINec15Ag15nXlNeZ15Ug15bXnteZ16DXldeqINei15Mg16nXqteb15HXlCDXkNeqINeQ15fXodeV158g15QtVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19lcnJvcl90aXRsZSIgbXNnaWQ9IjczMjM2NTg0Njk2MjY1MTQyMDciPiLigI/XpNei15XXnNeqIFVTQiDXoNeb16nXnNeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGxnX29rIiBtc2dpZD0iNzM3Njk1MzE2NzAzOTg2NTcwMSI+IteQ15nXqdeV16giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiLXnteX15XXkdeoINeb157Xm9ep15nXqCDXnteT15nXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9wdHBfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMTk2MDgxNzE5MjIxNjA2NDgzMyI+Itee15fXldeR16gg15vXntem15zXnteUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX2NkX2luc3RhbGxlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2Nzc0NzEyODI3ODkyMDkwNzU0Ij4i157Xl9eV15HXqCDXm9ee16rXp9eZ158iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijc4NDgyMzY5NzQwODc2NTM2NjYiPiLXnteX15XXkdeoINec15DXkdeZ15bXqCBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIyMjkwODU5Mzk5OTgzNzIwMjcxIj4i15LXoiDXnNen15HXnNeqINeQ16TXqdeo15XXmdeV16ogVVNCINeg15XXodek15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iOTAyMDA5MjE5NjA2MTAwNzI2MiI+Itec16TXqNee15gg15DXqiDXkNee16bXoteZINeU15DXl9eh15XXnyDXnteh15XXkiBVU0I/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+Itec16TXqNee15gg15DXqiDXm9eo15jXmdehINeULVNEPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MzQwMTY4NTM0MjU3NjEwNzgiPiLXm9ecINeU16fXkdem15nXnSDXqdep157Xldeo15nXnSDXkdeQ157Xptei15kg15TXkNeX16HXldefINee16HXldeSIFVTQiDXqdec15og15nXmdee15fXp9eVLiDXpNei15XXnNeUINeW15Ug15TXmdeQINeR15zXqteZINeU16TXmdeb15QhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI3ODQ4MjM2OTc0MDg3NjUzNjY2Ij4i4oCP157Xl9eV15HXqCDXnNeQ15HXmdeW16ggVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+IuKAj9eS16Ig15zXp9eR15zXqiDXkNek16nXqNeV15nXldeqIFVTQiDXoNeV16HXpNeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiLigI/XnNek16jXnteYINeQ16og15DXntem16LXmSDXlNeQ15fXodeV158g157XodeV15IgVVNCPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2NDg0MTU5MjE1MjY1MjYwNjkiPiLigI/XnNek16jXnteYINeQ16og15vXqNeY15nXoSDXlC1TRD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTM0MDE2ODUzNDI1NzYxMDc4Ij4i4oCP15vXnCDXlNen15HXpteZ150g16nXqdee15XXqNeZ150g15HXkNee16bXoteZINeU15DXl9eh15XXnyDXnteh15XXkiBVU0Ig16nXnNeaINeZ15nXnteX16fXlS4g16TXoteV15zXlCDXlteVINeU15nXkCDXkdec16rXmSDXlNek15nXm9eUISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQxMzE4OTUwMjc1NDM4MzAiPiLXm9ecINeU16DXqteV16DXmdedINep157XkNeV15fXodeg15nXnSDXkdeb16jXmNeZ16Eg15nXkNeR15PXlS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfYnV0dG9uX2Zvcm1hdCIgbXNnaWQ9IjQxMzEwNjQ1NjAxMjc0Nzg2OTUiPiLXpNeo157XldeYIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NzI5MDQ0Nzc4OTQ5MTg5OTE4Ij4i16DXmden15XXmSDXkdeQ15LXmdedINep15wgVVNCINee15fXldeR16giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTAxNjY1NDYyNzYyNjQ3NjE0MiI+IteS16Ig15vXk9eZINec15TXqdeR15nXqiDXkNeqINeg15nXp9eV15kg15TXkdeQ15LXmdedINeR15TXqten158g15QtVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+IuKAj9eg15nXp9eV15kg15HXkNeS15nXnSDXqdecIFVTQiDXnteX15XXkdeoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjEwMTY2NTQ2Mjc2MjY0NzYxNDIiPiLigI/XkteiINeb15PXmSDXnNeU16nXkdeZ16og15DXqiDXoNeZ16fXldeZINeU15HXkNeS15nXnSDXkdeU16rXp9efINeULVVTQi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaW5wdXRfbWV0aG9kIiBtc2dpZD0iNDY1MzM4NzMzNjc5MTIyMjk3OCI+IteR15fXqCDXqdeZ15jXqiDXlNeW16DXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iOTA5MTY1MjE1NzcyMjQ5NTExNiI+IteU15LXk9eoINep15nXmNeV16og16fXnNeYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNjIwMzExMjQ3ODA5NTExNzYyNSI+Itee16fXnNeT16og16TXmdeW15nXqiI8L3N0cmluZz4KQEAgLTEyNzEsMjkgKzEyODAsMjkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX2FscGhhYmV0IiBtc2dpZD0iNTQzMzI3NTQ4NTQ5OTAzOTE5OSI+IiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX251bWVyaWNfYWxwaGFiZXQiIG1zZ2lkPSI0MDMwMTcwNTI0NTk1MTIzNjEwIj4iIDAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmRpZGF0ZXNfc3R5bGUiIG1zZ2lkPSI0MzMzOTEzMDg5NjM3MDYyMjU3Ij48dT4i157Xldei157Xk9eZ150iPC91Pjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ5ODE2MDA1MzUxNDY4NTYwIj4i157Xm9eZ158g15DXl9eh15XXnyBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ1NzYwMzQxODk3MDk5NDA1MCI+Itee15vXmdefINeQ16og15vXqNeY15nXoSBTRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0OTgxNjAwNTM1MTQ2ODU2MCI+IuKAj9ee15vXmdefINeQ15fXodeV158gVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NTc2MDM0MTg5NzA5OTQwNTAiPiLigI/Xnteb15nXnyDXkNeqINeb16jXmNeZ16EgU0QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4Mjg3MzE5ODgyOTI2NzM3MDUzIj4i15HXldeT16cg15DXnSDXmdepINep15LXmdeQ15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzc4ODA0MDc0NTY4NjIyOTMwNyI+IteQ157Xptei15kg15DXl9eh15XXnyDXqNeZ16cg157XodeV15IgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzgwNDc3ODM4MjQxMjEyOTk3Ij4i15vXqNeY15nXoSBTRCDXqNeZ16ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4i15DXl9eh15XXnyDXlC1VU0Ig16jXmdenINeQ15Ug16nXntei16jXm9eqINeU16fXkdem15nXnSDXqdec15Ug15DXmdeg15Qg16DXqtee15vXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2NDEwNjU2NDE3ODY5MjM2MDQiPiLXm9eo15jXmdehINeULVNEINeo15nXpyDXkNeVINep157Xoteo15vXqiDXlNen15HXpteZ150g16nXnNeVINeQ15nXoNeUINeg16rXnteb16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4i15DXntem16LXmSDXkNeX16HXldefINek15LXldedINee16HXldeSIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDEwNzIzOTA2MDE5MTAwMTg5Ij4i15vXqNeY15nXoSBTRCDXpNeS15XXnSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNzk1OTE3NTc4Mzk1MzMzMjgwIj4i15DXl9eh15XXnyDXlC1VU0Ig16TXkteV150uINeg16HXlCDXnNek16jXnteYINeQ15XXqteVINee15fXk9epLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE3NTM4OTg1Njc1MjU1NjgyNTMiPiLXm9eo15jXmdehINeULVNEINek15LXldedLiDXoNeh15Qg15zXpNeo157XmCDXkNeV16rXlSDXnteX15PXqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTY2MTY4MzAzMTMzMDk1MTA3MyI+IteQ15fXodeV158gVVNCINeU15XXodeoINeR15DXldek158g15HXnNeq15kg16bXpNeV15kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODcyMTUyODgyNjA0NDA3ODM3Ij4i15vXqNeY15nXoSBTRCDXlNeV16HXqCDXkdeQ15XXpNefINec15Ag16bXpNeV15kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MzI5ODQ4ODE5ODY1NTk0MjQxIj4i15HXmNecINeY16LXmdeg15Qg16nXnCDXkNeX16HXldefIFVTQiDXnNek16DXmSDXlNeh16jXqteVINeb15PXmSDXnNee16DXldeiINeQ15XXkdeT158g16DXqteV16DXmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+IteR15jXnCDXkNeqINeY16LXmdeg16og15vXqNeY15nXoSBTRCDXnNek16DXmSDXlNeh16jXqteVINeb15PXmSDXnNee16DXldeiINeQ15XXkdeT158g16DXqteV16DXmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5Njc5NzM4OTMyNzAzNjAyMzAiPiLXoNeZ16rXnyDXnNeU16HXmdeoINeQ16og15DXntem16LXmSDXlNeQ15fXodeV158g157XodeV15IgVVNCINeR15HXmNeX15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY3Mjk4MDExMzA3OTA2MTYyMDAiPiLXkNek16nXqCDXnNeU16HXmdeoINeQ16og15vXqNeY15nXoSBTRCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE0MjE5NTM2MTYwNjQ5MzUzMCI+IteQ16rXlCDXmdeb15XXnCDXnNeU16HXmdeoINeR15HXmNeX15Qg15DXqiDXkNeX16HXldefINeULVVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTY4ODQxMjc4MTM4Mzc3NjA0Ij4i16DXmdeq158g15zXlNeh15nXqCDXkdeR15jXl9eUINeb16jXmNeZ16EgU0QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ0ODYzNzcyMzAxNDAyMjc2NTEiPiLXkNeX16HXldefIFVTQiDXlNeV16HXqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MDI1MTgwMzA0MDQzODEzMTgiPiLXm9eo15jXmdehIFNEINeU15XXodeoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjkyMTEyNjE2MjU4MDU3NDE0MyI+IteQ15fXodeV158gVVNCINeU15XXodeoLiDXlNeb16DXoSDXnteT15nXlCDXl9eT16nXlC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiLXm9eo15jXmdehIFNEINeU15XXodeoLiDXlNeb16DXoSDXm9eo15jXmdehINeX15PXqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzc4ODA0MDc0NTY4NjIyOTMwNyI+IuKAj9eQ157Xptei15kg15DXl9eh15XXnyDXqNeZ16cg157XodeV15IgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzgwNDc3ODM4MjQxMjEyOTk3Ij4i4oCP15vXqNeY15nXoSBTRCDXqNeZ16ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4i4oCP15DXl9eh15XXnyDXlC1VU0Ig16jXmdenINeQ15Ug16nXntei16jXm9eqINeU16fXkdem15nXnSDXqdec15Ug15DXmdeg15Qg16DXqtee15vXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2NDEwNjU2NDE3ODY5MjM2MDQiPiLigI/Xm9eo15jXmdehINeULVNEINeo15nXpyDXkNeVINep157Xoteo15vXqiDXlNen15HXpteZ150g16nXnNeVINeQ15nXoNeUINeg16rXnteb16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4i4oCP15DXntem16LXmSDXkNeX16HXldefINek15LXldedINee16HXldeSIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDEwNzIzOTA2MDE5MTAwMTg5Ij4i4oCP15vXqNeY15nXoSBTRCDXpNeS15XXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNzk1OTE3NTc4Mzk1MzMzMjgwIj4i4oCP15DXl9eh15XXnyDXlC1VU0Ig16TXkteV150uINeg16HXlCDXnNek16jXnteYINeQ15XXqteVINee15fXk9epLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE3NTM4OTg1Njc1MjU1NjgyNTMiPiLigI/Xm9eo15jXmdehINeULVNEINek15LXldedLiDXoNeh15Qg15zXpNeo157XmCDXkNeV16rXlSDXnteX15PXqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTY2MTY4MzAzMTMzMDk1MTA3MyI+IuKAj9eQ15fXodeV158gVVNCINeU15XXodeoINeR15DXldek158g15HXnNeq15kg16bXpNeV15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODcyMTUyODgyNjA0NDA3ODM3Ij4i4oCP15vXqNeY15nXoSBTRCDXlNeV16HXqCDXkdeQ15XXpNefINec15Ag16bXpNeV15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MzI5ODQ4ODE5ODY1NTk0MjQxIj4i4oCP15HXmNecINeY16LXmdeg15Qg16nXnCDXkNeX16HXldefIFVTQiDXnNek16DXmSDXlNeh16jXqteVINeb15PXmSDXnNee16DXldeiINeQ15XXkdeT158g16DXqteV16DXmdedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+IuKAj9eR15jXnCDXkNeqINeY16LXmdeg16og15vXqNeY15nXoSBTRCDXnNek16DXmSDXlNeh16jXqteVINeb15PXmSDXnNee16DXldeiINeQ15XXkdeT158g16DXqteV16DXmdedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5Njc5NzM4OTMyNzAzNjAyMzAiPiLigI/XoNeZ16rXnyDXnNeU16HXmdeoINeQ16og15DXntem16LXmSDXlNeQ15fXodeV158g157XodeV15IgVVNCINeR15HXmNeX15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY3Mjk4MDExMzA3OTA2MTYyMDAiPiLigI/XkNek16nXqCDXnNeU16HXmdeoINeQ16og15vXqNeY15nXoSBTRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE0MjE5NTM2MTYwNjQ5MzUzMCI+IuKAj9eQ16rXlCDXmdeb15XXnCDXnNeU16HXmdeoINeR15HXmNeX15Qg15DXqiDXkNeX16HXldefINeULVVTQi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTY4ODQxMjc4MTM4Mzc3NjA0Ij4i4oCP16DXmdeq158g15zXlNeh15nXqCDXkdeR15jXl9eUINeb16jXmNeZ16EgU0QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ0ODYzNzcyMzAxNDAyMjc2NTEiPiLigI/XkNeX16HXldefIFVTQiDXlNeV16HXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MDI1MTgwMzA0MDQzODEzMTgiPiLigI/Xm9eo15jXmdehIFNEINeU15XXodeoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjkyMTEyNjE2MjU4MDU3NDE0MyI+IuKAj9eQ15fXodeV158gVVNCINeU15XXodeoLiDXlNeb16DXoSDXnteT15nXlCDXl9eT16nXlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiLigI/Xm9eo15jXmdehIFNEINeU15XXodeoLiDXlNeb16DXoSDXm9eo15jXmdehINeX15PXqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9saXN0X2VtcHR5IiBtc2dpZD0iMTY3NTM4ODMzMDc4Njg0MTA2NiI+Itec15Ag16DXntem15DXlSDXpNei15nXnNeV15nXldeqINeq15XXkNee15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSI4Nzg3MzUyMDc0MzI2NzQ4ODkyIj4i16LXk9eb158g16DXqteV16DXmdedINeh15jXmNeZ16HXmNeZ15nXnSDXotecINep15nXnteV16kg15HXqNeb15nXkSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSIxMTA2NjEyNDI0MjU0Mjc3NjMwIj4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXqdeg15XXqiDXodeY15jXmdeh15jXmden15XXqiDXqdeZ157XldepINep16DXkNeh16TXlSDXnNeS15HXmSDXqNeb15nXkdeZ150g16nXldeg15nXnS4g15zXkCDXnteZ15XXoteTINec16nXmdee15XXqSDXotecINeZ15PXmSDXkNek15zXmden16bXmdeV16og16jXkteZ15zXldeqLiI8L3N0cmluZz4KQEAgLTEzMDYsNyArMTMxNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIxNzIxOTUxODQyMDc4MjgzODciPiLXqdec15XXmCDXkdeU16bXkteUINeV15TXodeq16jXlCDXqdecINee15LXnyDXlNee16fXnNeT16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sX2tleWd1YXJkIiBtc2dpZD0iMzA0MzczMjI5MDUxODYyOTA2MSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15gg15HXnteS158g15TXnten15zXk9eqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InR1dG9yaWFsX2RvdWJsZV90YXBfdG9fem9vbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDA3MDQzMzIwODE2MDA2MzUzOCI+IteS16Ig16TXotee15nXmdedINec15HXp9eo16og157XqNeX16cg157Xqtem15XXkteUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2FkZ2V0X2hvc3RfZXJyb3JfaW5mbGF0aW5nIiBtc2dpZD0iNDg4MjAwNDMxNDkwNjQ2NjE2MiI+Itec15Ag16DXmdeq158g15zXlNeV16HXmdejIHdpZGdldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnYWRnZXRfaG9zdF9lcnJvcl9pbmZsYXRpbmciIG1zZ2lkPSI0ODgyMDA0MzE0OTA2NDY2MTYyIj4i4oCP15zXkCDXoNeZ16rXnyDXnNeU15XXodeZ16Mgd2lkZ2V0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZ28iIG1zZ2lkPSI4MzIwODQ1NjUxNzM3MzY5MDI3Ij4i15TXqteX15wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlYXJjaCIgbXNnaWQ9IjY1ODExMDI3MTgyMjgwNzgxMSI+IteX16TXqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fc2VuZCIgbXNnaWQ9IjIzMTYxNjY1NTYzNDkzMTQ0MjQiPiLXqdec15ciPC9zdHJpbmc+CkBAIC0xMzI5LDEzICsxMzM4LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJ3YWxscGFwZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyNDAwODc4NDQzMDQ2ODc2NjIiPiLXmNek15giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLXqdeg15Qg15jXpNeYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i157XkNeW15nXnyDXnNeU16rXqNeQ15XXqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOINee15XXpNei15wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4g157Xldek16LXnCDXotecINeZ15PXmSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IuKAj1ZQTiDXnteV16TXotecIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4i4oCPVlBOINee15XXpNei15wg16LXnCDXmdeT15kgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i15LXoiDXm9eT15kg15zXoNeU15wg15DXqiDXlNeo16nXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dF9sb25nIiBtc2dpZD0iNjQwNzM1MTAwNjI0OTE3NDQ3MyI+Itee15fXldeR16gg15DXnCA8eGxpZmY6ZyBpZD0iU0VTU0lPTiI+JXM8L3hsaWZmOmc+LiDXkteiINeb15PXmSDXnNeg15TXnCDXkNeqINeU16jXqdeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0aW5nIiBtc2dpZD0iNjQ0MzQzODk2NDQ0MDk2MDc0NSI+IteULVZQTiDXqdee15XXpNei15wg16rXnteZ15MsINee16rXl9eR16guLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGVkIiBtc2dpZD0iODIwMjY3OTY3NDgxOTIxMzkzMSI+IteULVZQTiDXqdek15XXotecINeq157XmdeTLCDXnteX15XXkdeoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Vycm9yIiBtc2dpZD0iNjAwOTI0OTgxNDAzNDcwODE3NSI+Itep15LXmdeQ16ogVlBOINep157Xldek16LXnCDXqtee15nXkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0aW5nIiBtc2dpZD0iNjQ0MzQzODk2NDQ0MDk2MDc0NSI+IuKAj9eULVZQTiDXqdee15XXpNei15wg16rXnteZ15MsINee16rXl9eR16guLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGVkIiBtc2dpZD0iODIwMjY3OTY3NDgxOTIxMzkzMSI+IuKAj9eULVZQTiDXqdek15XXotecINeq157XmdeTLCDXnteX15XXkdeoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Vycm9yIiBtc2dpZD0iNjAwOTI0OTgxNDAzNDcwODE3NSI+IuKAj9ep15LXmdeQ16ogVlBOINep157Xldek16LXnCDXqtee15nXkyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25maWciIG1zZ2lkPSI2NDE1ODk5MTUwNjcxNTM3OTcwIj4i15LXoiDXm9eT15kg15zXlNeS15PXmdeoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXBsb2FkX2ZpbGUiIG1zZ2lkPSIyODk3OTU3MTcyMzY2NzMwNDE2Ij4i15HXl9eoINen15XXkdelIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fZmlsZV9jaG9zZW4iIG1zZ2lkPSI2MzYzNjQ4NTYyMTcwNzU5NDY1Ij4i15zXkCDXoNeR15fXqCDXp9eV15HXpSI8L3N0cmluZz4KQEAgLTEzNTksMTggKzEzNjgsMTggQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NjQxODcyNzk3MDY3NjA5MTc3Ij4iPHhsaWZmOmcgaWQ9IklOREVYIj4lZDwveGxpZmY6Zz4g157XqteV15ogPHhsaWZmOmcgaWQ9IlRPVEFMIj4lZDwveGxpZmY6Zz4iPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbW9kZV9kb25lIiBtc2dpZD0iNzIxNzU4MTY0MDQ2MTkyMjI4OSI+Iteh15nXldedIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4i157XkdeY15wg15jXoteZ16DXlCDXqdecINeQ15fXodeV158gVVNCLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMjc4OTQ5OTg0MDk1MzcxOTAiPiLXnteR15jXnCDXmNei15nXoNeUINep15wg15vXqNeY15nXoSBTRC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDUyMTU3MzMyMTUyNDM0MDA1OCI+Itee15XXl9enINeQ15fXodeV158gVVNCLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1OTY5ODg4NzU1MDcwNDMwNDIiPiLXnteV15fXpyDXm9eo15jXmdehIFNELi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiLXnNeQINeg15nXqtefINec157Xl9eV16cg15DXqiDXkNeX16HXldefINeULSBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+Itec15Ag16DXmdeq158g15zXnteX15XXpyDXkNeqINeb16jXmNeZ16Eg15QtU0QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4i15vXqNeY15nXoSBTRCDXlNeV16HXqCDXnNek16DXmSDXqdeY16LXmdeg16rXlSDXkdeV15jXnNeULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQxODE4ODcyMDAwOTU2OTY5MyI+IteQ15fXodeV158gVVNCINeg15HXk9enINeb16LXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMzQ3NjI1MDM5MDQ4Mjc0ODEiPiLXm9eo15jXmdehIFNEINeg15HXk9enINeb16LXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yZW1vdmVkIiBtc2dpZD0iNzAwMTUyNjkwNTA1Nzk1MjA5NyI+Iteb16jXmNeZ16EgU0Qg15TXldeh16guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjU4MzA4MTQzNDkyNTA4MzQyMjUiPiLXkNeX16HXldefIFVTQiDXoNee16bXkCDXm9ei16og15HXqdeZ157XldepINep15wg157Xl9ep15EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcwNjEzMDU2ODEzMzU0MDQzNSI+Iteb16jXmNeZ16EgU0Qg16DXntem15Ag15vXoteqINeR16nXmdee15XXqSDXqdecINee15fXqdeRLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkyMzgxMDQ0ODUwNzYxMjc0NiI+IuKAj9ee15HXmNecINeY16LXmdeg15Qg16nXnCDXkNeX16HXldefIFVTQi4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzI3ODk0OTk4NDA5NTM3MTkwIj4i4oCP157XkdeY15wg15jXoteZ16DXlCDXqdecINeb16jXmNeZ16EgU0QuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiLigI/XnteV15fXpyDXkNeX16HXldefIFVTQi4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTk2OTg4ODc1NTA3MDQzMDQyIj4i4oCP157XldeX16cg15vXqNeY15nXoSBTRC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2Mjk5NzY5NTYzNjI0Nzc2OTQ4Ij4i4oCP15zXkCDXoNeZ16rXnyDXnNee15fXldenINeQ16og15DXl9eh15XXnyDXlC0gVVNCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMTUyNDg2OTY2NDQ1MTA5MzUiPiLigI/XnNeQINeg15nXqtefINec157Xl9eV16cg15DXqiDXm9eo15jXmdehINeULVNELiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2JhZF9yZW1vdmFsIiBtc2dpZD0iNzk2MDg2NDA2MTAxNjYwMzI4MSI+IuKAj9eb16jXmNeZ16EgU0Qg15TXldeh16gg15zXpNeg15kg16nXmNei15nXoNeq15Ug15HXldeY15zXlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0MTgxODg3MjAwMDk1Njk2OTMiPiLigI/XkNeX16HXldefIFVTQiDXoNeR15PXpyDXm9ei16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzM0NzYyNTAzOTA0ODI3NDgxIj4i4oCP15vXqNeY15nXoSBTRCDXoNeR15PXpyDXm9ei16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcmVtb3ZlZCIgbXNnaWQ9IjcwMDE1MjY5MDUwNTc5NTIwOTciPiLigI/Xm9eo15jXmdehIFNEINeU15XXodeoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI1ODMwODE0MzQ5MjUwODM0MjI1Ij4i4oCP15DXl9eh15XXnyBVU0Ig16DXntem15Ag15vXoteqINeR16nXmdee15XXqSDXqdecINee15fXqdeRLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MDYxMzA1NjgxMzM1NDA0MzUiPiLigI/Xm9eo15jXmdehIFNEINeg157XpteQINeb16LXqiDXkdep15nXnteV16kg16nXnCDXnteX16nXkS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV91bmtub3duX3N0YXRlIiBtc2dpZD0iNzI5MTkyNzgyMTk3MjkwMzg1Ij4i157Xk9eZ15Qg15fXmdem15XXoNeZ16og15HXntem15Eg15zXkCDXmdeT15XXoi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZSIgbXNnaWQ9IjE3Nzg2ODY2MTgyMzAwMTE5NjQiPiLXqdeq16MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmaW5kIiBtc2dpZD0iNDgwODI3MDkwMDMyMjk4NTk2MCI+Itee16bXkCI8L3N0cmluZz4KQEAgLTEzOTgsOCArMTQwNyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfbWludXRlX2J1dHRvbiIgbXNnaWQ9IjYyNDY4MzQ5MzcwODA2ODQ3OTEiPiLXlNek15fXqiDXk9en15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIzNjUyMDU2MDU1ODEwMjIzMTM5Ij4i15TXldeh16Mg16nXoteUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X2hvdXJfYnV0dG9uIiBtc2dpZD0iMTM3NzQ3OTg2MzQyOTIxNDc5MiI+IteU16TXl9eqINep16LXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9zZXRfcG1fYnV0dG9uIiBtc2dpZD0iNDE0NzU5MDY5NjE1MTIzMDg2MyI+IteU15LXk9eoIFBNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X3NldF9hbV9idXR0b24iIG1zZ2lkPSI4MzAyMTQwMzUzNTM5NDg2NzUyIj4i15TXkteT16ggQU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfc2V0X3BtX2J1dHRvbiIgbXNnaWQ9IjQxNDc1OTA2OTYxNTEyMzA4NjMiPiLigI/XlNeS15PXqCBQTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9zZXRfYW1fYnV0dG9uIiBtc2dpZD0iODMwMjE0MDM1MzUzOTQ4Njc1MiI+IuKAj9eU15LXk9eoIEFNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfaW5jcmVtZW50X21vbnRoX2J1dHRvbiIgbXNnaWQ9IjUzNjk5OTg0NzkwNjc5MzQxMTAiPiLXlNeV16HXoyDXl9eV15PXqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF9tb250aF9idXR0b24iIG1zZ2lkPSIxODMyNjk4OTk1NTQxNzI2MDE5Ij4i15TXpNeX16og15fXldeT16kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfZGF5X2J1dHRvbiIgbXNnaWQ9IjcxMzA0NjU0MTIzMDgxNzM5MDMiPiLXlNeV16HXoyDXmdeV150iPC9zdHJpbmc+CkBAIC0xNDE0LDQxICsxNDIzLDMzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i15HXl9eoINeQ16TXnNeZ16fXpteZ15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiLXnNeQINeg15nXqtefINeU15nXlCDXnNeU16TXoteZ15wg15DXqiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i16nXqtejINei150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i16nXqtejINei150gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLXmdeT15nXqiDXnNeU15fXnNen15QuINeS16Ig15XXlNeX15bXpy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i15TXodeYINec157Xotec15Qg15vXk9eZINec15TXpteZ15IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IteU16HXmCDXnNee15jXlCDXm9eT15kg15zXlNem15nXkiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i15TXodeYINep157XkNec15Qg15vXk9eZINec15TXpteZ15IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLXlNeh15gg15nXnteZ16DXlCDXm9eT15kg15zXlNem15nXkiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLXkdeY15wg16DXoteZ15zXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLXntem15zXnteUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+Itep16fXmCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLXlNen15XXnCDXpNeV16LXnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i15fXmdek15XXqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IteU15fXnNenINec15HXmdeY15XXnCDXoNei15nXnNeULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLXl9eR16gg15DXldeW16DXmdeV16og15vXk9eZINec16nXnteV16Ig15TXp9eo15DXlCDXqdecINee16TXqteX15XXqiDXodeZ16HXnteULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+Iteg16fXldeT15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTI5MzYwMDQ5NjYwMTQ5MDIxNiI+Iteg15XXldeYINec15PXoyDXlNeR15nXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMjM3NDk2NTYyOTUyMTUyNTg5Ij4i16DXldeV15gg15zXntei15zXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tZW51X292ZXJmbG93X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjI5NTY1OTAzNzUwOTAwODQ1MyI+IteQ16TXqdeo15XXmdeV16og16DXldeh16TXldeqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9Ijc5NjU5ODQzNjA5MDM2OTM5MDMiPiIlMSRz4oCPLCAlMiRzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX3N1YnRpdGxlX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9IjY5ODU1NDY1MzA0NzE3ODA3MjciPiIlMSRz4oCPLCAlMiRz4oCPLCAlMyRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9Ijc5NjU5ODQzNjA5MDM2OTM5MDMiPiLigI8lMSRz4oCPLCAlMiRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX3N1YnRpdGxlX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9IjY5ODU1NDY1MzA0NzE3ODA3MjciPiLigI8lMSRz4oCPLCAlMiRz4oCPLCAlMyRzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9pbnRlcm5hbCIgbXNnaWQ9IjQ4OTE5MTY4MzM2NTc5MjkyNjMiPiLXkNeX16HXldefINek16DXmdee15kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3NkX2NhcmQiIG1zZ2lkPSIzMjgyOTQ4ODYxMzc4Mjg2NzQ1Ij4i15vXqNeY15nXoSBTRCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiIiBtc2dpZD0iMzAxNzk1NDA1OTUzODUxNzI3OCI+IteQ15fXodeV158gVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9zZF9jYXJkIiBtc2dpZD0iMzI4Mjk0ODg2MTM3ODI4Njc0NSI+IuKAj9eb16jXmNeZ16EgU0QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3VzYiIgbXNnaWQ9IjMwMTc5NTQwNTk1Mzg1MTcyNzgiPiLigI/XkNeX16HXldefIFVTQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV4dHJhY3RfZWRpdF9tZW51X2J1dHRvbiIgbXNnaWQ9Ijg5NDA0Nzg3MzA0OTY2MTAxMzciPiLXoteo15XXmiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE5NTU2Mzg4NjIxMjIyMzIzNDIiPiLXkNeW15TXqNeqINep15nXnteV16kg15HXoNeq15XXoNeZ150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfYm9keSIgbXNnaWQ9IjI4MTQ2NzM1NTE0NzE5Njk5NTQiPiLXkteiINeb15PXmSDXnNeU16bXmdeSINeg16rXldeg15kg16nXmdee15XXqSDXldeU15LXk9eo15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzA5MzMzNDQxOTUxODcwNjY4NiI+Iteg16rXldeg15kgMkctM0cg157Xldep15HXqteZ150iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzYzNjQ4OTQzNjgxOTQ3MDc2MSI+Iteg16rXldeg15kgNEcg157Xldep15HXqteZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzA5MzMzNDQxOTUxODcwNjY4NiI+IuKAj9eg16rXldeg15kgMkctM0cg157Xldep15HXqteZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzYzNjQ4OTQzNjgxOTQ3MDc2MSI+IuKAj9eg16rXldeg15kgNEcg157Xldep15HXqteZ150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF90aXRsZSIgbXNnaWQ9Ijc4Njk0MDI1MTkzOTE2MzE4ODQiPiLXoNeq15XXoNeZ150g15zXoNeZ15nXkyDXnteV16nXkdeq15nXnSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF90aXRsZSIgbXNnaWQ9Ijg5OTIxNTQ3MzY0NDEyODQ4NjUiPiLXoNeq15XXoNeZIFdpLUZpINeU15XXqdeR16rXlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF90aXRsZSIgbXNnaWQ9Ijg5OTIxNTQ3MzY0NDEyODQ4NjUiPiLigI/XoNeq15XXoNeZIFdpLUZpINeU15XXqdeR16rXlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfYm9keSIgbXNnaWQ9IjMzMTc5NjQ3MDY5NzM2MDEzODYiPiLXkteiINeb15PXmSDXnNeU16TXoteZ15wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI3MDI2NzM5MTIxMTM4MDA1MjMxIj4i15DXmdeo16LXlCDXl9eo15nXkteUINee157XkteR15zXqiDXlNeg16rXldeg15nXnSDXqdecIDJHLTNHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMTEwNjU2Mjc3OTMxMTIwOTAzOSI+IteQ15nXqNei15Qg15fXqNeZ15LXlCDXntee15LXkdec16og15TXoNeq15XXoNeZ150g16nXnCA0RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjcwMjY3MzkxMjExMzgwMDUyMzEiPiLigI/XkNeZ16jXoteUINeX16jXmdeS15Qg157XnteS15HXnNeqINeU16DXqteV16DXmdedINep15wgMkctM0ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIxMTA2NTYyNzc5MzExMjA5MDM5Ij4i4oCP15DXmdeo16LXlCDXl9eo15nXkteUINee157XkteR15zXqiDXlNeg16rXldeg15nXnSDXqdecIDRHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjI3OTI0MDU3MjE2NTQxMjE2OCI+IteQ15nXqNei15Qg15fXqNeZ15LXlCDXntee15LXkdec16og15TXoNeq15XXoNeZ150g15zXoNeZ15nXkyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+IteQ15nXqNei15Qg15fXqNeZ15LXlCDXntee15LXkdec16og15TXoNeq15XXoNeZ150g16nXnCBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+IuKAj9eQ15nXqNei15Qg15fXqNeZ15LXlCDXntee15LXkdec16og15TXoNeq15XXoNeZ150g16nXnCBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfc25vb3plZF9ib2R5IiBtc2dpZD0iNzAzNTQ5MDI3ODI5ODQ0MTc2NyI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lczwveGxpZmY6Zz4g157XotecINec157XkteR15zXlCDXqdem15XXmdeg15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX3RpdGxlIiBtc2dpZD0iNTk2NTE1NzM2MTAzNjMyMTkxNCI+Iteg16rXldeg15kg15TXqNen16Ig157XldeS15HXnNeZ150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfYm9keSIgbXNnaWQ9IjY3NDE1MjEzMzA5OTc0NTI5OTAiPiLXkteiINeb15PXmSDXnNeU16HXmdeoINeQ16og15TXlNeS15HXnNeULiI8L3N0cmluZz4KQEAgLTE0NjQsOCArMTQ2NSw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJleHBpcmVzX29uIiBtc2dpZD0iMzY3NjI0Mjk0OTkxNTk1OTgyMSI+Iteq15DXqNeZ15og16rXpNeV15LXlDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4i157Xodek16gg16HXmdeT15XXqNeZOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50cyIgbXNnaWQ9IjQ1MTYwMTk2MTk4NTA3NjMwNDkiPiLXmNeR15nXoteV16og15DXpteR16I6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhMjU2X2ZpbmdlcnByaW50IiBtc2dpZD0iNDM5MTI3MTI4NjQ3NzI3OTI2MyI+IteY15HXmdei16og15DXpteR16IgU0hBLTI1NjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+IteY15HXmdei16og15DXpteR16IgU0hBLTE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhMjU2X2ZpbmdlcnByaW50IiBtc2dpZD0iNDM5MTI3MTI4NjQ3NzI3OTI2MyI+IuKAj9eY15HXmdei16og15DXpteR16IgU0hBLTI1NjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+IuKAj9eY15HXmdei16og15DXpteR16IgU0hBLTE6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X3NlZV9hbGwiIG1zZ2lkPSI0MjkyNTY5MzgzOTc2NjM2MjAwIj4i15TXpteSINeU15vXnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X2Nob29zZXJfdmlld19kaWFsb2dfdGl0bGVfZGVmYXVsdCIgbXNnaWQ9IjQ3MTAwMTM4NjQ5NzQwNDA2MTUiPiLXkdeX16gg16TXoteZ15zXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfYWN0aW9uX3Byb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI1MjQ3Njg0NDM1OTc5MTQ5MjE2Ij4i16nXqtejINei150iPC9zdHJpbmc+CkBAIC0xNDgxLDUxICsxNDgyLDU3IEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWVfZG9ja19zcGVha2VycyIgbXNnaWQ9IjYyNDA2MDI5ODIyNzY1OTE4NjQiPiLXqNee16fXldec15nXnSDXqdecINee16LXktefIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9tZWRpYV9yb3V0ZV9uYW1lX2hkbWkiIG1zZ2lkPSIyNDUwOTcwMzk5MDIzNDc4MDU1Ij4iSERNSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLXntei16jXm9eqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLXkNeV15PXmdeVIEJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i4oCP15DXldeT15nXlSBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+Item15Ig15DXnNeX15XXmNeZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+Iteh15nXldedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i16TXnNeYINee15PXmdeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLXlNeq15fXkdeo15XXqiDXnNee15vXqdeZ16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLXlNei15HXqNeqINee16HXmiDXkNecINee15vXqdeZ16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLXnteX16TXqSDXnteb16nXmdeo15nXneKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IteU15LXk9eo15XXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiLXlNeq16DXqtenIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+Iteh15XXqNenLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i157XqteX15HXqC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i15bXnteZ158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9IjY3Mzk4OTk5NjI2ODE4ODY0MDEiPiLXnNeQINeW157XmdefIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiLXkdep15nXnteV16kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfYnVpbHRfaW5fZGlzcGxheV9uYW1lIiBtc2dpZD0iMjU4MzEzNDI5NDI5MjU2Mzk0MSI+Itee16HXmiDXnteV15HXoNeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2hkbWlfZGlzcGxheV9uYW1lIiBtc2dpZD0iMTU1NTI2NDU1OTIyNzQ3MDEwOSI+Itee16HXmiBIRE1JIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2hkbWlfZGlzcGxheV9uYW1lIiBtc2dpZD0iMTU1NTI2NDU1OTIyNzQ3MDEwOSI+IuKAj9ee16HXmiBIRE1JIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+Itep15vXkdeqINei15wgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiDigI48eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+4oCOLCDigI88eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4i4oCPPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiDigI48eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+4oCOLCDigI88eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDXnteQ15XXkdeY15ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+Itee16HXmiDXkNec15fXldeY15kg157Xl9eV15HXqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLXnteh15og15bXlCDXnteV16bXkiDXkdee15vXqdeZ16gg15DXl9eoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IteU16LXkdeo16og157XodeaINee16rXkdem16LXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Itee16rXl9eR16gg15DXnCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLXlNei15HXqNeqINee16HXmiDXnteq15HXptei16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+Itee15fXldeR16gg15DXnCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i16DXqtenIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLXqdeZ15fXqiDXl9eZ16jXldedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i16nXm9eX16og15DXqiDXlNen15UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+Iten15Ug15HXmdeY15XXnCDXoNei15nXnNeUINep15LXldeZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4i16HXmdeh157XlCDXqdeS15XXmdeUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+Itee16HXpNeoIFBJTiDXqdeS15XXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiLigI/Xnteh16TXqCBQSU4g16nXkteV15kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+Iteg16HXlCDXqdeV15Eg15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkZDwveGxpZmY6Zz4g16nXoNeZ15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+Itep16jXmNeYINeQ16og16fXlSDXkdeZ15jXldecINeU16DXoteZ15zXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IteU15bXnyDXnteh16TXqCBQSU4g15wtU0lNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiLXlNeW158g157Xodek16ggUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4i4oCP15TXltefINee16HXpNeoIFBJTiDXnC1TSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IuKAj9eU15bXnyDXnteh16TXqCBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i15TXltefINeQ16og15TXodeZ16HXnteUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4i15vXqNeY15nXoSDXlC1TSU0g157Xldep15HXqiDXm9ei16ouINeU15bXnyDXp9eV15MgUFVLINeb15PXmSDXnNeU157XqdeZ15ouINek16DXlCDXkNecINeU16HXpNenINec16TXqNeY15nXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i15TXltefINeQ16og16fXldeTINeULVBJTiDXlNeo16bXldeZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IteQ16nXqCDXkNeqINen15XXkyDXlC1QSU4g15TXqNem15XXmSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4i157XkdeY15wg16DXoteZ15zXlCDXqdecINeb16jXmNeZ16EgU0lN4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i16fXldeTIFBJTiDXqdeS15XXmS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLXlNen15zXkyDXnteh16TXqCBQSU4g16nXkNeV16jXm9eVIDQg16LXkyA4INeh16TXqNeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4i16fXldeTIFBVSyDXpteo15nXmiDXnNeU15nXldeqINeR158gOCDXodek16jXldeqINeQ15Ug15nXldeq16guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i15TXltefINee15fXk9epINeQ16og16fXldeTIFBVSyDXlNeg15vXldefLiDXoNeZ16HXmdeV16DXldeqINeX15XXlteo15nXnSDXmdep15HXmdeq15Ug15zXptee15nXqteV16og15DXqiDXm9eo15jXmdehINeULVNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i16fXldeT15kg15QtUElOINeQ15nXoNedINeq15XXkNee15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IuKAj9eb16jXmNeZ16Eg15QtU0lNINee15XXqdeR16og15vXoteqLiDXlNeW158g16fXldeTIFBVSyDXm9eT15kg15zXlNee16nXmdeaLiDXpNeg15Qg15DXnCDXlNeh16TXpyDXnNek16jXmNeZ150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IuKAj9eU15bXnyDXkNeqINen15XXkyDXlC1QSU4g15TXqNem15XXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLigI/XkNep16gg15DXqiDXp9eV15Mg15QtUElOINeU16jXpteV15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IuKAj9ee15HXmNecINeg16LXmdec15Qg16nXnCDXm9eo15jXmdehIFNJTeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IuKAj9en15XXkyBQSU4g16nXkteV15kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4oCP15TXp9ec15Mg157Xodek16ggUElOINep15DXldeo15vXlSA0INei15MgOCDXodek16jXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IuKAj9en15XXkyBQVUsg16bXqNeZ15og15zXlNeZ15XXqiDXkdefIDgg16HXpNeo15XXqiDXkNeVINeZ15XXqteoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IuKAj9eU15bXnyDXnteX15PXqSDXkNeqINen15XXkyBQVUsg15TXoNeb15XXny4g16DXmdeh15nXldeg15XXqiDXl9eV15bXqNeZ150g15nXqdeR15nXqteVINec16bXnteZ16rXldeqINeQ16og15vXqNeY15nXoSDXlC1TSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IuKAj9en15XXk9eZINeULVBJTiDXkNeZ16DXnSDXqteV15DXnteZ150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLXoNeZ16HXmdeV16DXldeqINeo15HXmdedINee15PXmSDXnNep16jXmNeV15gg16fXlSDXkdeZ15jXldecINeg16LXmdec15QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+Iteb15PXmSDXnNeR15jXnCDXkNeqINeU16DXoteZ15zXlCwg15TXmdeb16DXoSDXkdeQ157Xptei15XXqiDXl9ep15HXldefIEdvb2dsZSDXqdec15ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IuKAj9eb15PXmSDXnNeR15jXnCDXkNeqINeU16DXoteZ15zXlCwg15TXmdeb16DXoSDXkdeQ157Xptei15XXqiDXl9ep15HXldefIEdvb2dsZSDXqdec15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLXqdedINee16nXqtee16kgKNeT15XXkFwi15wpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLXodeZ16HXnteUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLXlNeZ15vXoNehIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLXqdedINee16nXqtee16kg15DXlSDXodeZ16HXnteUINec15Ag15fXlden15nXmdedLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLXqdeb15fXqiDXkNeqINep150g15TXntep16rXntepINeQ15Ug15TXodeZ16HXnteUP1xu15HXp9eoINeR15vXqteV15HXqiAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuKAj9ep15vXl9eqINeQ16og16nXnSDXlNee16nXqtee16kg15DXlSDXlNeh15nXodee15Q/XG7Xkden16gg15HXm9eq15XXkdeqICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiLXkdeV15PXpyDXl9ep15HXldef4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLXlNen15zXk9eqINee16HXpNeoIFBJTiDXqdeS15XXmSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedLiBcblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4oCP15TXp9ec15PXqiDXnteh16TXqCBQSU4g16nXkteV15kgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS4gXG5cbteg16HXlCDXqdeV15Eg15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16nXoNeZ15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i15TXp9ec15PXqiDXodeZ16HXnteUINep15LXldeZ15QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS5cblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLXqdeo15jXmNeqINeQ16og16fXlSDXkdeZ15jXldecINeU16DXoteZ15zXlCDXkdeQ15XXpNefINep15LXldeZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150uIFxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i15HXmdem16LXqiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINep15LXldeZ15nXnSDXnNeR15nXmNeV15wg16DXoteZ15zXqiDXlNeY15zXpNeV158uINec15DXl9eoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15vXldep15zXmdedINeg15XXodek15nXnSwg15TXmNeQ15HXnNeYINeZ16LXkdeV16gg15DXmdek15XXoSDXnNeR16jXmdeo16og15TXnteX15PXnCDXqdecINeU15nXpteo158g15XXm9ecINeg16rXldeg15kg15TXntep16rXntepINeZ15DXkdeT15UuIjwvc3RyaW5nPgpAQCAtMTU4NSw5ICsxNTkyLDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9uYV9qdW5pb3JfbGVnYWwiIG1zZ2lkPSIzMzA5MzI0MTYyMTU1MDg1OTA0Ij4iSnVuaW9yIExlZ2FsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX25hX2xlZGdlciIgbXNnaWQ9IjU1NjcwMzAzNDA1MDkwNzUzMzMiPiJMZWRnZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfbmFfdGFibG9pZCIgbXNnaWQ9IjQ1NzE3MzUwMzg1MDE2NjE3NTciPiJUYWJsb2lkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX25hX2luZGV4XzN4NSIgbXNnaWQ9IjUxODI5MDE5MTc4MTg2MjUxMjYiPiLXm9eo15jXmdehINeQ15nXoNeT16fXoSAzeDUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfbmFfaW5kZXhfNHg2IiBtc2dpZD0iNzY4NzYyMDYyNTQyMjMxMjM5NiI+Iteb16jXmNeZ16Eg15DXmdeg15PXp9ehIDR4NiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9uYV9pbmRleF81eDgiIG1zZ2lkPSI4ODM0MjE1Mjg0NjQ2ODcyODAwIj4i15vXqNeY15nXoSDXkNeZ16DXk9en16EgNXg4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX25hX2luZGV4XzN4NSIgbXNnaWQ9IjUxODI5MDE5MTc4MTg2MjUxMjYiPiLigI/Xm9eo15jXmdehINeQ15nXoNeT16fXoSAzeDUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfbmFfaW5kZXhfNHg2IiBtc2dpZD0iNzY4NzYyMDYyNTQyMjMxMjM5NiI+IuKAj9eb16jXmNeZ16Eg15DXmdeg15PXp9ehIDR4NiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9uYV9pbmRleF81eDgiIG1zZ2lkPSI4ODM0MjE1Mjg0NjQ2ODcyODAwIj4i4oCP15vXqNeY15nXoSDXkNeZ16DXk9en16EgNXg4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX25hX21vbmFyY2giIG1zZ2lkPSIyMTM2Mzk5MDY5NTY1NTA3NTQiPiJNb25hcmNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX25hX3F1YXJ0byIgbXNnaWQ9IjgzNTc3ODQ5MzU5MzAyMzIyMyI+IlF1YXJ0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9uYV9mb29sc2NhcCIgbXNnaWQ9IjE1NzM5MTEyMzc5ODM2NzcxMzgiPiJGb29sc2NhcCI8L3N0cmluZz4KQEAgLTE2MzUsMTkgKzE2NDIsMzAgQEAKICAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl9zZXJ2aWNlX3VuYXZhaWxhYmxlIiBtc2dpZD0iNzgyNDAwODczMjI0MzkwMzI2OCI+Itep15nXqNeV16og15TXlNeT16TXodeUINec15Ag15TXldek16LXnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VfaW5zdGFsbGVkX3RpdGxlIiBtc2dpZD0iMjI0NjMxNzE2OTQ0NDA4MTYyOCI+Itep15nXqNeV16ogPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiDXnteV16rXp9efIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZV9pbnN0YWxsZWRfbWVzc2FnZSIgbXNnaWQ9IjU4OTczNjI5MzEwNzA0NTkxNTIiPiLXlNen16kg15vXk9eZINec15TXpNei15nXnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9hZG1pbl9waW4iIG1zZ2lkPSI3ODM2NDM3MzE4OTUxNDM5NzAiPiLXlNeW158g15DXqiDXnteh16TXqCDXlC1QSU4g16nXnCDXnteg15TXnCDXlNee16LXqNeb16oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfcGluIiBtc2dpZD0iMzM5NTk1MzQyMTM2ODQ3NjEwMyI+IteU15bXnyDXnteh16TXqCBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfYWRtaW5fcGluIiBtc2dpZD0iNzgzNjQzNzMxODk1MTQzOTcwIj4i4oCP15TXltefINeQ16og157Xodek16gg15QtUElOINep15wg157XoNeU15wg15TXntei16jXm9eqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX3BpbiIgbXNnaWQ9IjMzOTU5NTM0MjEzNjg0NzYxMDMiPiLigI/XlNeW158g157Xodek16ggUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2luY29ycmVjdCIgbXNnaWQ9Ijg1NzE1MTIwMDM5NTUwNzc5MjQiPiLXqdeS15XXmSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9vbGRfcGluIiBtc2dpZD0iMTQ2MjIwNjIyNTUxMjkxMDc1NyI+Itee16HXpNeoIFBJTiDXoNeV15vXl9eZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX25ld19waW4iIG1zZ2lkPSI1OTU5NjA2NjkxNjE5OTU5MTg0Ij4i157Xodek16ggUElOINeX15PXqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jb25maXJtX3BpbiIgbXNnaWQ9Ijg1MDE1MjM4Mjk2MzMxNDYyMzkiPiLXkNep16gg15DXqiDXnteh16TXqCDXlC1QSU4g15TXl9eT16kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY3JlYXRlX3BpbiIgbXNnaWQ9IjgwMTc2MDAwMDAyNjM0NTAzMzciPiLXpteV16gg157Xodek16ggUElOINec16nXmdeg15XXmSDXlNeS15HXnNeV16oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfZG9lc250X21hdGNoIiBtc2dpZD0iMjIyNDIxNDE5MDkwNjk5NDU0OCI+Itee16HXpNeo15kg15QtUElOINec15Ag16rXldeQ157XmdedLiDXoNeh15Qg16nXldeRLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lcnJvcl90b29fc2hvcnQiIG1zZ2lkPSI4MTczOTgyNzU2MjY1Nzc3NzkyIj4i157Xodek16gg15QtUElOINen16bXqCDXnteT15kuINeX15nXmdeRINec15TXmdeV16og15HXkNeV16jXmiA0INeh16TXqNeV16og15zXpNeX15XXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfb2xkX3BpbiIgbXNnaWQ9IjE0NjIyMDYyMjU1MTI5MTA3NTciPiLigI/Xnteh16TXqCBQSU4g16DXldeb15fXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9uZXdfcGluIiBtc2dpZD0iNTk1OTYwNjY5MTYxOTk1OTE4NCI+IuKAj9ee16HXpNeoIFBJTiDXl9eT16kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY29uZmlybV9waW4iIG1zZ2lkPSI4NTAxNTIzODI5NjMzMTQ2MjM5Ij4i4oCP15DXqdeoINeQ16og157Xodek16gg15QtUElOINeU15fXk9epIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NyZWF0ZV9waW4iIG1zZ2lkPSI4MDE3NjAwMDAwMjYzNDUwMzM3Ij4i4oCP16bXldeoINee16HXpNeoIFBJTiDXnNep15nXoNeV15kg15TXkteR15zXldeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCIgbXNnaWQ9IjIyMjQyMTQxOTA5MDY5OTQ1NDgiPiLigI/Xnteh16TXqNeZINeULVBJTiDXnNeQINeq15XXkNee15nXnS4g16DXodeUINep15XXkS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfdG9vX3Nob3J0IiBtc2dpZD0iODE3Mzk4Mjc1NjI2NTc3Nzc5MiI+IuKAj9ee16HXpNeoINeULVBJTiDXp9em16gg157Xk9eZLiDXl9eZ15nXkSDXnNeU15nXldeqINeR15DXldeo15ogNCDXodek16jXldeqINec16TXl9eV16ouIjwvc3RyaW5nPgogICA8cGx1cmFscyBuYW1lPSJyZXN0cl9waW5fY291bnRkb3duIj4KICAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzExMDUwOTk1MTk4NTQ4Njc1Ij4i16DXodeUINep15XXkSDXkdei15XXkyDXqdeg15nXmdeUIjwvaXRlbT4KICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4i16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+Iteg16HXlCDXqdeV15Eg157XkNeV15fXqCDXmdeV16rXqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLXlNeX15zXpyDXnteY15Qg157XlNeX15zXpyDXlNei15zXmdeV158g15vXk9eZINec16bXkNeqINee157XodeaINee15zXkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IteR15XXpteiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4i157Xl9eV15XXnyDXqdei15XXqiDXntei15LXnNeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLXnteX15XXldefINeT16fXldeqINee16LXktec15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4i15HXl9eoINep16LXldeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4i15HXl9eoINeT16fXldeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLXkdeX15nXqNeqINeZ157XmdedINeR15fXldeT16kg15HXqtem15XXkteqINeo16nXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+Iteo16nXmdee16og16nXoNeZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IteR15fXqCDXl9eV15PXqSDXldeZ15XXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IteR15fXqCDXqdeg15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+INeg15HXl9eoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4g16DXnteX16ciPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCmluZGV4IDI0NmE4MmUuLjkyY2IwNGMgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iUFVL44GvOOahgeS7peS4iuOBp+WFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU3jgqvjg7zjg4njga9QVUvjgafjg63jg4Pjgq/jgZXjgozjgabjgYTjgb7jgZnjgILjg63jg4Pjgq/jgpLop6PpmaTjgZnjgovjgavjga9QVUvjgrPjg7zjg4njgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJTSU3jgqvjg7zjg4njga7jg63jg4Pjgq/op6PpmaTjga7jgZ/jgoFQVUsy44KS5YWl5Yqb44GX44G+44GZ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iU0lNL1JVSU3jg63jg4Pjgq/jgpLmnInlirnjgavjgZfjgabjgY/jgaDjgZXjgYTjgIIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiLlhaXlipvjgafjgY3jgovjga7jga/jgYLjgag8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7lm57jgafjgZnjgILjgZPjga7lm57mlbDjgpLotoXjgYjjgovjgahTSU3jgYzjg63jg4Pjgq/jgZXjgozjgb7jgZnjgIIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLlhaXlipvjgafjgY3jgovjga7jga/jgYLjgag8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7lm57jgafjgZnjgILjgZPjga7lm57mlbDjgpLotoXjgYjjgovjgahTSU3jgYzjg63jg4Pjgq/jgZXjgozjgb7jgZnjgIIiPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IuedgOS/oeaZguOBrueZuuS/oeiAheeVquWPtyI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iVlBO44K144O844OT44K544Gu44OI44OD44OX44Os44OZ44Or44Kk44Oz44K/44O844OV44Kn44O844K544Gr44OQ44Kk44Oz44OJ44GZ44KL44GT44Go44KS5omA5pyJ6ICF44Gr6Kix5Y+v44GX44G+44GZ44CC6YCa5bi444Gu44Ki44OX44Oq44Gn44Gv5LiN6KaB44Gn44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+IuWjgee0meOBq+ODkOOCpOODs+ODiSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i5aOB57SZ44Gu44OI44OD44OX44Os44OZ44Or44Kk44Oz44K/44O844OV44Kn44O844K544Gr44OQ44Kk44Oz44OJ44GZ44KL44GT44Go44KS5omA5pyJ6ICF44Gr6Kix5Y+v44GX44G+44GZ44CC6YCa5bi444Gu44Ki44OX44Oq44Gn44Gv5LiN6KaB44Gn44GZ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLjg6rjg6Ljg7zjg4jjg4fjgqPjgrnjg5fjg6zjgqTjgbjjga7jg5DjgqTjg7Pjg4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLjg6rjg6Ljg7zjg4jjg4fjgqPjgrnjg5fjg6zjgqTjga7jg4jjg4Pjg5fjg6zjg5njg6vjgqTjg7Pjgr/jg7zjg5Xjgqfjg7zjgrnjgavjg5DjgqTjg7Pjg4njgZnjgovjgZPjgajjgpLmiYDmnInogIXjgavoqLHlj6/jgZfjgb7jgZnjgILpgJrluLjjga7jgqLjg5fjg6rjgafjga/kuI3opoHjgafjgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLjgqbjgqPjgrjjgqfjg4Pjg4jjgrXjg7zjg5Pjgrnjgavjg5DjgqTjg7Pjg4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i44Km44Kj44K444Kn44OD44OI44K144O844OT44K544Gu44OI44OD44OX44Os44OZ44Or44Kk44Oz44K/44O844OV44Kn44O844K544Gr44OQ44Kk44Oz44OJ44GZ44KL44GT44Go44KS5omA5pyJ6ICF44Gr6Kix5Y+v44GX44G+44GZ44CC6YCa5bi444Gu44Ki44OX44Oq44Gn44Gv5LiN6KaB44Gn44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i44OH44OQ44Kk44K5566h55CG6ICF44Go44Gu6YCa5L+hIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJTdXJmYWNlRmxpbmdlcuOBruS9juODrOODmeODq+OBruapn+iDveOBruS9v+eUqOOCkuOCouODl+ODquOBq+ioseWPr+OBl+OBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuODleODrOODvOODoOODkOODg+ODleOCoeOBruiqreOBv+WPluOCiiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLjg5Xjg6zjg7zjg6Djg5Djg4Pjg5XjgqHjga7lhoXlrrnjga7oqq3jgb/lj5bjgorjgpLjgqLjg5fjg6rjgavoqLHlj6/jgZfjgb7jgZnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJJbnB1dEZsaW5nZXLjgbjjga7jgqLjgq/jgrvjgrkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iSW5wdXRGbGluZ2Vy44Gu5L2O44Os44OZ44Or44Gu5qmf6IO944KS5L2/55So44GZ44KL44GT44Go44KS44Ki44OX44Oq44Gr6Kix5Y+v44GX44G+44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJXaS1GaeODh+OCo+OCueODl+ODrOOCpOOBruioreWumiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IldpLUZp44OH44Kj44K544OX44Os44Kk44KS6Kit5a6a44GX44Gm5o6l57aa44GZ44KL44GT44Go44KS44Ki44OX44Oq44Gr6Kix5Y+v44GX44G+44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJXaS1GaeODh+OCo+OCueODl+ODrOOCpOOBruWItuW+oSI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLjgqLjg5fjg6rjga7pgbjmip4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+44KS6LW35YuV44Gn44GN44G+44Gb44KT44Gn44GX44GfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i5YWx5pyJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz7jgajlhbHmnIkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i44K544Op44Kk44OA44O844OP44Oz44OJ44Or44Gn44GZ44CC5oq844GX57aa44GR44G+44GZ44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuS4iuOBq+OCueODqeOCpOODieOBl+OBpjx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOCkuihjOOBhOOBvuOBmeOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IuS4i+OBq+OCueODqeOCpOODieOBl+OBpjx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOCkuihjOOBhOOBvuOBmeOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuW3puOBq+OCueODqeOCpOODieOBl+OBpjx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOCkuihjOOBhOOBvuOBmeOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLlj7Pjgavjgrnjg6njgqTjg4njgZfjgaY8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgpLooYzjgYTjgb7jgZnjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuODreODg+OCr+OCkuino+mZpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLjgqvjg6Hjg6kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i44Oe44OK44O844Oi44O844OJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IuOCteOCpuODs+ODiU9OIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLmpJzntKLjgZfjgb7jgZkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLjg63jg4Pjgq/op6PpmaTjgZnjgovjgavjga/jgrnjg6/jgqTjg5fjgZfjgb7jgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4i44OR44K544Ov44O844OJ44Gu44Kt44O844GM6Z+z5aOw5Ye65Yqb44GV44KM44KL44Gu44Gn44OY44OD44OJ44K744OD44OI44KS5o6l57aa44GX44Gm44GP44Gg44GV44GE44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i44OJ44OD44OI44CCIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i44K344K544OG44OgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGjpn7Plo7AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IuODr+OCpOODpOODrOOCueODh+OCo+OCueODl+ODrOOCpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLlrozkuoYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLjg6Hjg4fjgqPjgqLlh7rlipsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+Iuerr+acq+OBq+aOpee2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+Iuerr+acq+OBuOOBrueUu+mdouOBruOCreODo+OCueODiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+Iuerr+acq+OCkuaknOe0ouOBl+OBpuOBhOOBvuOBmeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IuioreWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiLmjqXntprjgpLop6PpmaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i44K544Kt44Oj44Oz5LitLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i5o6l57aa5LitLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLliKnnlKjjgafjgY3jgb7jgZkiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLjgqrjg7zjg5Djg7zjg6zjgqTnrKw8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPuOAgTx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiLjgIHjgrvjgq3jg6XjgqIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IuODr+OCpOODpOODrOOCueODh+OCo+OCueODl+ODrOOCpOOBjOaOpee2muOBleOCjOOBpuOBhOOBvuOBmSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLjgZPjga7nlLvpnaLjga/liKXjga7nq6/mnKvjgafooajnpLrjgZXjgozjgabjgYTjgb7jgZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4i55S76Z2i44Gu44Kt44Oj44K544OI5LitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+44Gr5o6l57aa44GX44Gm44GE44G+44GZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4i55S76Z2i44Gu44Kt44Oj44K544OI5LitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7jgavmjqXntprjgZfjgb7jgZfjgZ8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i5YiH5patIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLnt4rmgKXpgJrloLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLjg5Hjgr/jg7zjg7PjgpLlv5jjgozjgZ/loLTlkIgiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NTcsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IuOBl+OBsOOCieOBj+OBl+OBpuOBi+OCieWGjeippuihjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLlhajnlLvpnaLooajnpLrjgpLntYLkuobjgZnjgovjgavjga/jgIHkuIrjgYvjgonkuIvjgavjgrnjg6/jgqTjg5ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IuWujOS6hiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IuWGhuW9ouOCueODqeOCpOODgOODvO+8iOaZgu+8iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4i5YaG5b2i44K544Op44Kk44OA44O877yI5YiG77yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IuaZgumWk+OCkumBuOaKniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IuWIhuOCkumBuOaKniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i5pel44Kw44Oq44OD44OJ77yI5pyI5Yil77yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i5bm044Oq44K544OIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLmnIjjgajml6XjgpLpgbjmip4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLlubTjgpLpgbjmip4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+44KS6YG45oqe44GX44G+44GX44GfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz7jgpLliYrpmaTjgZfjgb7jgZfjgZ8iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKaW5kZXggYTgwMjVkOC4uZTE3NWFjZiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IuGDkOGDmeGDoOGDmOGDpOGDlOGDlyBQVUssIOGDoOGDneGDm+GDlOGDmuGDmOGDqiDhg6Dhg5Xhg5Ag4YOQ4YOcIOGDm+GDlOGDouGDmCDhg6rhg5jhg6Thg6Dhg5jhg6Hhg5Lhg5Dhg5wg4YOo4YOU4YOT4YOS4YOU4YOR4YOQLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiLhg5fhg6Xhg5Xhg5Thg5zhg5ggU0lNIOGDkeGDkOGDoOGDkOGDl+GDmCDhg5Phg5Dhg5Hhg5rhg53hg5nhg5jhg5rhg5jhg5AgUFVLIOGDmeGDneGDk+GDmOGDly4g4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOY4YOh4YOX4YOV4YOY4YOhIOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDlOGDlyBQVUsg4YOZ4YOd4YOT4YOYLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNJTSDhg5Hhg5Dhg6Dhg5Dhg5fhg5jhg6Eg4YOS4YOQ4YOc4YOh4YOQ4YOR4YOa4YOd4YOZ4YOQ4YOTIOGDkOGDmeGDoOGDmOGDpOGDlOGDlyBQVUsyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuGDrOGDkOGDoOGDo+GDm+GDkOGDouGDlOGDkeGDlOGDmuGDmCDhg5vhg6rhg5Phg5Thg5rhg53hg5Hhg5AuIOGDqeGDkOGDoOGDl+GDlOGDlyBTSU0vUlVJTSDhg6nhg5Dhg5nhg5Thg6Lhg5Xhg5AuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i4YOX4YOl4YOV4YOU4YOcIOGDk+GDkOGDkuGDoOGDqeGDkOGDlyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YOb4YOq4YOT4YOU4YOa4YOd4YOR4YOQLCDhg6Hhg5Dhg5zhg5Dhg5sgU0lNIOGDk+GDkOGDmOGDkeGDmuGDneGDmeGDlOGDkeGDneGDk+GDlOGDoS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLhg5fhg6Xhg5Xhg5Thg5wg4YOT4YOQ4YOS4YOg4YOp4YOQ4YOXIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhg5vhg6rhg5Phg5Thg5rhg53hg5Hhg5AsIOGDoeGDkOGDnOGDkOGDmyBTSU0g4YOT4YOQ4YOY4YOR4YOa4YOd4YOZ4YOU4YOR4YOd4YOT4YOU4YOhLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i4YOo4YOU4YOb4YOd4YOb4YOQ4YOV4YOQ4YOa4YOYIOGDluGDkOGDoOGDmOGDoSDhg5Dhg5Hhg53hg5zhg5Thg5zhg6Lhg5jhg6EgSUQiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IuGDkOGDnuGDoSDhg6jhg5Thg5Thg6vhg5rhg5Thg5Hhg5AgVnBuIOGDoeGDlOGDoOGDleGDmOGDoeGDmOGDoSDhg5bhg5Thg5Phg5Ag4YOT4YOd4YOc4YOY4YOhIOGDmOGDnOGDouGDlOGDoOGDpOGDlOGDmOGDoeGDl+GDkOGDnCDhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg5AuIOGDkOGDoOGDkOGDoeGDk+GDoOGDneGDoSDhg5Lhg5Dhg5vhg53hg5jhg6fhg5Thg5zhg5Thg5Hhg5Ag4YOp4YOV4YOU4YOj4YOa4YOU4YOR4YOg4YOY4YOVIOGDkOGDnuGDlOGDkeGDqOGDmC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i4YOk4YOd4YOc4YOW4YOUIOGDm+GDmOGDreGDlOGDk+GDlOGDkeGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i4YOb4YOk4YOa4YOd4YOR4YOU4YOa4YOhIOGDqOGDlOGDlOGDq+GDmuGDlOGDkeGDkCDhg6Thg53hg5zhg5jhg6Eg4YOW4YOU4YOT4YOQIOGDk+GDneGDnOGDmOGDoSDhg5jhg5zhg6Lhg5Thg6Dhg6Thg5Thg5jhg6Hhg5fhg5Dhg5wg4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOQLiDhg5Dhg6Dhg5Dhg6Hhg5Phg6Dhg53hg6Eg4YOS4YOQ4YOb4YOd4YOY4YOn4YOU4YOc4YOU4YOR4YOQIOGDqeGDleGDlOGDo+GDmuGDlOGDkeGDoOGDmOGDlSDhg5Dhg57hg5Thg5Hhg6jhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLhg5Phg5jhg6Hhg6Lhg5Dhg5zhg6rhg5jhg6Phg6Ag4YOb4YOd4YOc4YOY4YOi4YOd4YOg4YOW4YOUIOGDm+GDmOGDkeGDm+GDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IuGDm+GDpOGDmuGDneGDkeGDlOGDmuGDoSDhg6jhg5Thg5Thg6vhg5rhg5Thg5Hhg5Ag4YOb4YOY4YOU4YOR4YOQ4YOhIOGDk+GDmOGDoeGDouGDkOGDnOGDquGDmOGDo+GDoCDhg5vhg53hg5zhg5jhg6Lhg53hg6Dhg5jhg6Eg4YOW4YOU4YOT4YOQIOGDk+GDneGDnOGDmOGDoSDhg5jhg5zhg6Lhg5Thg6Dhg6Thg5Thg5jhg6Hhg6EuIOGDqeGDleGDlOGDo+GDmuGDlOGDkeGDoOGDmOGDlSDhg5Dhg57hg6Eg4YOU4YOhIOGDrOGDlOGDoeGDmOGDlyDhg5Dhg6Dhg5Dhg6Hhg53hg5Phg5Thg6Eg4YOj4YOc4YOT4YOQIOGDk+GDkOGDreGDmOGDoOGDk+GDlOGDoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLhg5Xhg5jhg6/hg5Thg6Ig4YOh4YOU4YOg4YOV4YOY4YOh4YOX4YOQ4YOcIOGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLhg5Dhg57hg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQIOGDluGDlOGDk+GDkCDhg5Phg53hg5zhg5jhg6Eg4YOY4YOc4YOi4YOU4YOg4YOk4YOU4YOY4YOh4YOY4YOhIOGDleGDmOGDr+GDlOGDouGDl+GDkOGDnCDhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg5AuIOGDkOGDoOGDkOGDoeGDk+GDoOGDneGDoSDhg5Lhg5Dhg5vhg53hg5jhg6fhg5Thg5zhg5Thg5Hhg5Ag4YOp4YOV4YOU4YOj4YOa4YOU4YOR4YOg4YOY4YOVIOGDkOGDnuGDlOGDkeGDqOGDmC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiLhg5vhg53hg6zhg6fhg53hg5Hhg5jhg5rhg53hg5Hhg5jhg6Eg4YOQ4YOT4YOb4YOY4YOc4YOX4YOQ4YOcIOGDmOGDnOGDouGDlOGDoOGDkOGDpeGDquGDmOGDkCI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4i4YOQ4YOe4YOhIOGDqOGDlOGDlOGDq+GDmuGDlOGDkeGDkCwg4YOS4YOQ4YOb4YOd4YOY4YOn4YOU4YOc4YOd4YOhIFN1cmZhY2VGbGluZ2VyLeGDmOGDoSDhg5Phg5Dhg5Hhg5Dhg5rhg5gg4YOT4YOd4YOc4YOY4YOhIOGDlOGDmuGDlOGDm+GDlOGDnOGDouGDlOGDkeGDmC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLhg5nhg5Dhg5Phg6Dhg5jhg6Eg4YOR4YOj4YOk4YOU4YOg4YOY4YOhICjhg5Thg5nhg6Dhg5Dhg5zhg5jhg6Eg4YOo4YOY4YOS4YOX4YOQ4YOV4YOh4YOY4YOhKSDhg6zhg5Dhg5nhg5jhg5fhg67hg5Xhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4i4YOQ4YOe4YOhIOGDqOGDlOGDlOGDq+GDmuGDlOGDkeGDkCDhg6zhg5Dhg5jhg5nhg5jhg5fhg67hg53hg6Eg4YOR4YOj4YOk4YOU4YOg4YOj4YOa4YOYIOGDqeGDkOGDoOGDqeGDneGDoSDhg5nhg53hg5zhg6Lhg5Thg5zhg6Lhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iSW5wdXRGbGluZ2VyLeGDluGDlCDhg6zhg5Xhg5Phg53hg5vhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4i4YOQ4YOe4YOhIOGDqOGDlOGDlOGDq+GDmuGDlOGDkeGDkCwg4YOS4YOQ4YOb4YOd4YOY4YOn4YOU4YOc4YOd4YOhIElucHV0Rmxpbmdlci3hg5jhg6Eg4YOT4YOQ4YOR4YOQ4YOa4YOYIOGDk+GDneGDnOGDmOGDoSDhg6Thg6Phg5zhg6Xhg6rhg5jhg5Thg5Hhg5guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJXaWZpIOGDlOGDmeGDoOGDkOGDnOGDmOGDoSDhg5nhg53hg5zhg6Thg5jhg5Lhg6Phg6Dhg5Dhg6rhg5jhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLhg5Dhg57hg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQIFdpZmkg4YOU4YOZ4YOg4YOQ4YOc4YOU4YOR4YOX4YOQ4YOcIOGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDkCDhg5Phg5Ag4YOT4YOQ4YOZ4YOd4YOc4YOk4YOY4YOS4YOj4YOg4YOY4YOg4YOU4YOR4YOQLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iV2lmaSDhg5Thg5nhg6Dhg5Dhg5zhg5Thg5Hhg5jhg6Eg4YOb4YOQ4YOg4YOX4YOV4YOQIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4i4YOo4YOU4YOn4YOV4YOQ4YOc4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i4YOQ4YOe4YOY4YOhIOGDkOGDoOGDqeGDlOGDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4g4YOV4YOU4YOgIOGDkuGDkOGDlOGDqOGDleGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IuGDkuGDkOGDluGDmOGDkOGDoOGDlOGDkeGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiLhg5Lhg5Dhg6Phg5bhg5jhg5Dhg6Dhg5Thg5cgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPi3hg6EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i4YOS4YOQ4YOh4YOg4YOY4YOQ4YOa4YOU4YOR4YOY4YOXIOGDm+GDkOGDoOGDl+GDleGDkC4g4YOo4YOU4YOU4YOu4YOU4YOXICZhbXA7IOGDkOGDoCDhg5Dhg6Phg6jhg5Xhg5Dhg5cuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuGDkuGDkOGDkOGDoeGDoOGDmOGDkOGDmuGDlOGDlyDhg5bhg5Thg5vhg53hg5cgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LeGDl+GDleGDmOGDoS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLhg5Lhg5Dhg5Dhg6Hhg6Dhg5jhg5Dhg5rhg5Thg5cg4YOl4YOV4YOU4YOb4YOd4YOXIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3hg5fhg5Xhg5jhg6EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i4YOS4YOQ4YOQ4YOh4YOg4YOY4YOQ4YOa4YOU4YOXIOGDm+GDkOGDoOGDquGDruGDnOGDmOGDlSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t4YOX4YOV4YOY4YOhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLhg5Lhg5Dhg5Dhg6Hhg6Dhg5jhg5Dhg5rhg5Thg5cg4YOb4YOQ4YOg4YOv4YOV4YOc4YOY4YOVIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3hg5fhg5Xhg5jhg6EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4YOZ4YOQ4YOb4YOU4YOg4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuGDo+GDruGDm+GDnSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLhg67hg5vhg5jhg6Eg4YOp4YOQ4YOg4YOX4YOV4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLhg6vhg5jhg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5jhg6Hhg5Dhg5fhg5Xhg5jhg6Eg4YOS4YOQ4YOT4YOQ4YOk4YOj4YOg4YOq4YOa4YOU4YOXIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IuGDqOGDlOGDkOGDlOGDoOGDl+GDlOGDkyDhg6fhg6Phg6Dhg6Hhg5Dhg6Hhg5vhg5Thg5zhg5Thg5Hhg5gsIOGDnuGDkOGDoOGDneGDmuGDmOGDoSDhg6bhg5jhg5rhg5Dhg5nhg5Thg5Hhg5gg4YOg4YOd4YObIOGDkuGDkOGDmOGDkuGDneGDly4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLhg6zhg5Thg6Dhg6Lhg5jhg5rhg5guIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i4YOh4YOY4YOh4YOi4YOU4YOb4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGgg4YOQ4YOj4YOT4YOY4YOdIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLhg6Phg6Hhg5Dhg5Phg5Thg5zhg50g4YOU4YOZ4YOg4YOQ4YOc4YOYIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IuGDk+GDkOGDoeGDoOGDo+GDmuGDk+GDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IuGDm+GDlOGDk+GDmOGDkCDhg5Lhg5Dhg5vhg53hg5vhg5Dhg5Xhg5Dhg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IuGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDkOGDoeGDl+GDkOGDnCDhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLhg5Thg5nhg6Dhg5Dhg5zhg5jhg6Eg4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOQ4YOW4YOUIOGDkuGDkOGDk+GDkOGDquGDlOGDm+GDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IuGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDlOGDkeGDmOGDoSDhg6vhg5jhg5Thg5Hhg5DigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i4YOZ4YOQ4YOV4YOo4YOY4YOg4YOY4YOhIOGDkuGDkOGDrOGDp+GDleGDlOGDouGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLhg6Hhg5nhg5Dhg5zhg5jhg6Dhg5Thg5Hhg5AuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg5AuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IuGDruGDlOGDmuGDm+GDmOGDoeGDkOGDrOGDleGDk+GDneGDm+GDmCI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IuGDkuGDkOGDk+GDkOGDpOGDkOGDoOGDleGDkCAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIOGDk+GDkOGDquGDo+GDmuGDmCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4i4YOj4YOh4YOQ4YOT4YOU4YOc4YOdIOGDlOGDmeGDoOGDkOGDnOGDmCDhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg6Phg5rhg5jhg5AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i4YOS4YOQ4YOb4YOd4YOh4YOQ4YOu4YOj4YOa4YOU4YOR4YOQIOGDkuGDkOGDk+GDkOGDlOGDquGDlOGDm+GDkCDhg6Hhg67hg5Xhg5Ag4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOQ4YOhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IuGDm+GDmOGDm+GDk+GDmOGDnOGDkOGDoOGDlOGDneGDkeGDoSDhg5Thg5nhg6Dhg5Dhg5zhg5jhg6Eg4YOS4YOQ4YOT4YOQ4YOq4YOU4YOb4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LeGDl+GDkOGDnCDhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLhg5vhg5jhg5vhg5Phg5jhg5zhg5Dhg6Dhg5Thg53hg5Hhg6Eg4YOU4YOZ4YOg4YOQ4YOc4YOY4YOhIOGDkuGDkOGDk+GDkOGDquGDlOGDm+GDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4i4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOj4YOa4YOY4YOQIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi3hg5fhg5Dhg5wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i4YOZ4YOQ4YOV4YOo4YOY4YOg4YOY4YOhIOGDkuGDkOGDrOGDp+GDleGDlOGDouGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i4YOS4YOQ4YOT4YOQ4YOj4YOT4YOU4YOR4YOU4YOa4YOYIOGDk+GDkOGDruGDm+GDkOGDoOGDlOGDkeGDmOGDoSDhg5bhg5Dhg6Dhg5giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLhg5Phg5Dhg5Lhg5Dhg5Xhg5jhg6zhg6fhg5Phg5Dhg5cg4YOc4YOY4YOb4YOj4YOo4YOYIjwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU2LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+IuGDmeGDmOGDk+GDlOGDlSDhg5Thg6Dhg5fhg67hg5Thg5og4YOh4YOq4YOQ4YOT4YOU4YOXIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOGDrOGDkOGDm+GDqOGDmCI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLhg6Hhg6rhg5Dhg5Phg5Thg5cg4YOb4YOd4YOS4YOV4YOY4YOQ4YOc4YOU4YOR4YOY4YOXIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IuGDqeGDkOGDm+GDneGDkOGDoeGDoOGDmOGDkOGDmuGDlOGDlyDhg5bhg5Thg5Xhg5jhg5Phg5Dhg5wg4YOh4YOg4YOj4YOa4YOYIOGDlOGDmeGDoOGDkOGDnOGDmOGDoSDhg5Phg5Dhg6Hhg5Dhg67hg6Phg6Dhg5Dhg5MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i4YOp4YOQ4YOb4YOd4YOQ4YOh4YOg4YOY4YOQ4YOa4YOU4YOXIOGDluGDlOGDleGDmOGDk+GDkOGDnCDhg6Hhg6Dhg6Phg5rhg5gg4YOU4YOZ4YOg4YOQ4YOc4YOY4YOhIOGDk+GDkOGDoeGDkOGDruGDo+GDoOGDkOGDky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IuGDk+GDkOGDoeGDoOGDo+GDmuGDk+GDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IuGDoeGDkOGDkOGDl+GDlOGDkeGDmOGDoSDhg6zhg6Dhg5jhg6Phg5rhg5gg4YOh4YOa4YOQ4YOY4YOT4YOU4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLhg6zhg6Phg5fhg5Thg5Hhg5jhg6Eg4YOs4YOg4YOY4YOj4YOa4YOYIOGDoeGDmuGDkOGDmOGDk+GDlOGDoOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLhg5Dhg5jhg6Dhg6nhg5jhg5Thg5cg4YOh4YOQ4YOQ4YOX4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4i4YOQ4YOY4YOg4YOp4YOY4YOU4YOXIOGDrOGDo+GDl+GDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i4YOT4YOm4YOU4YOU4YOR4YOY4YOhIOGDkeGDkOGDk+GDlCDhg5fhg5Xhg5Thg5bhg5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLhg6zhg5rhg5jhg6Eg4YOh4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLhg5Dhg5jhg6Dhg6nhg5jhg5Thg5cg4YOX4YOV4YOUIOGDk+GDkCDhg6Dhg5jhg6rhg67hg5Xhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLhg5Dhg5jhg6Dhg6nhg5jhg5Thg5cg4YOs4YOU4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+IuGDkOGDoOGDqeGDlOGDo+GDmuGDmOGDkCA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDhg6zhg5Dhg5jhg6jhg5Dhg5rhg5AiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKaW5kZXggNmRhY2UzYy4uMTU3NmExYyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IuGelOGeieGfkuGeheGevOGem+KAi+GegOGevOGeiiBQVUsg4Z6K4Z+C4Z6b4oCL4Z6Y4Z624Z6T4oCL4Z6W4Z644oCLIOGfqCDhnpvhn4HhnoHigIsg4Z6s4oCL4Z6c4Z+C4Z6E4oCL4Z6H4Z624Z6E4oCL4Z6T4Z+B4Z+H4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IuGen+GfiuGeuOGemOGegOGetuGej+KAi+KAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAi+Geh+GetuGelOGfi+KAi+GegOGevOGeiiBQVUsg4Z+UIOGelOGeieGfkuGeheGevOGem+KAi+GegOGevOGeiiBQVUsg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6A4Z684Z6KIFBVSzIg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4Z6f4Z+K4Z644Z6Y4oCL4Z6A4Z624Z6P4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4i4Z6U4Z6a4Z624Z6H4Z+Q4Z6ZLCDhnpThnr7hnoDigIvhnoDhnrbhnprigIvhnoXhnrbhnoDhn4vhnp/hn4TigIvhnp/hn4rhnrjigIvhnpggLyBSVUlNIOGflCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IuGeouGfkuGek+GegOKAi+GemOGetuGekyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Z6A4Z624Z6a4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6K4Z+C4Z6b4oCL4Z6T4Z+F4Z6f4Z6b4Z+L4oCL4Z6Y4Z674Z6T4oCL4Z6W4Z+B4Z6b4oCL4Z6f4Z+K4Z644oCL4Z6Y4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4Z6F4Z624Z6A4Z+L4Z6f4Z+E4oCL4Z+UIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6Y4Z624Z6TIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhnoDhnrbhnprigIvhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnorhn4LhnpvigIvhnpPhn4Xhnp/hnpvhn4vigIvhnpjhnrvhnpPigIvhnpbhn4HhnpvigIvhnp/hn4rhnrjigIvhnpjigIvhno/hn5LhnprhnrzhnpzigIvhnpThnrbhnpPigIvhnoXhnrbhnoDhn4vhnp/hn4TigIvhn5QiPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IuGem+GfgeGegeKAi+Gen+GemOGfkuGeguGetuGem+Gfi+KAi+GeouGfkuGek+GegOKAi+GeoOGfheKAi+KAi+GeheGevOGemyI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i4Z6y4Z+S4Z6Z4oCL4Z6Y4Z+S4Z6F4Z624Z6f4Z+L4oCL4Z6F4Z6E4oCL4Z6F4Z+G4Z6O4Z674Z6F4oCL4Z6U4Z+S4Z6a4Z6R4Z624Z6A4Z+L4oCL4Z6A4Z6Y4Z+S4Z6a4Z634Z6P4oCL4Z6A4Z+G4Z6W4Z684Z6b4oCL4Z6T4Z+D4oCL4Z6f4Z+B4Z6c4Z624Z6A4Z6Y4Z+S4Z6YIFZwbiDhn5TigIsg4Z6Y4Z634Z6T4oCL4Z6C4Z694Z6a4oCL4Z6F4Z624Z+G4Z6U4Z624Z6F4Z+L4oCL4Z6f4Z6Y4Z+S4Z6a4Z624Z6U4Z+L4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6S4Z6Y4Z+S4Z6Y4Z6P4Z624oCL4Z6R4Z+B4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+IuGeheGehOKAi+GekeGfheKAi+GeleGfkuGekeGetuGfhuGehOKAi+GemuGevOGelOGel+GetuGeliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i4Z6y4Z+S4Z6Z4oCL4Z6Y4Z+S4Z6F4Z624Z6f4Z+L4oCL4Z6F4Z6E4oCL4Z6F4Z+G4Z6O4Z674Z6F4Z6U4Z+S4Z6a4Z6R4Z624Z6A4Z+L4oCL4Z6A4Z6Y4Z+S4Z6a4Z634Z6P4oCL4Z6A4Z+G4Z6W4Z684Z6b4oCL4Z6T4Z+D4oCL4Z6V4Z+S4Z6R4Z624Z+G4Z6E4oCL4Z6a4Z684Z6U4Z6X4Z624Z6W4Z+UIOGemOGet+Gek+KAi+GeguGeveGemuKAi+GeheGetuGfhuGelOGetuGeheGfi+KAi+Gen+GemOGfkuGemuGetuGelOGfi+KAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GekuGemOGfkuGemOGej+GetuKAi+GekeGfgeGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4i4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6R4Z+F4oCL4Z6A4Z624Z6a4oCL4Z6U4Z6E4Z+S4Z6g4Z624Z6J4oCL4Z6W4Z644oCL4Z6F4Z6Y4Z+S4Z6E4Z624Z6ZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i4Z6i4Z6T4Z674Z6J4Z+S4Z6J4Z624Z6P4oCL4Z6y4Z+S4Z6Z4oCL4Z6Y4Z+S4Z6F4Z624Z6f4Z+L4oCL4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4oCL4Z6R4Z+F4oCL4Z6F4Z+G4Z6O4Z674Z6F4oCL4Z6U4Z+S4Z6a4Z6R4Z624Z6A4Z+L4oCL4Z6A4Z6Y4Z+S4Z6a4Z634Z6P4oCL4Z6A4Z+G4Z6W4Z684Z6b4oCL4Z6T4Z+D4oCL4Z6A4Z624Z6a4oCL4Z6U4Z6E4Z+S4Z6g4Z624Z6J4oCL4Z6W4Z644oCL4Z6F4Z6Y4Z+S4Z6E4Z624Z6Z4Z+UIOGemOGet+Gek+KAi+GeguGeveGemuKAi+GeheGetuGfhuGelOGetuGeheGfi+KAi+Gen+GemOGfkuGemuGetuGelOGfi+KAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GekuGemOGfkuGemOGej+GetuKAi+GekeGfgeGflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IuGeheGehOKAi+Gen+GfgeGenOGetuKAi+GegOGemOGfkuGemOKAi+GekuGetuGej+Geu+KAi+GegOGfkuGemuGetuGeoOGfkuGenOGet+GegCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLhnrLhn5LhnpnigIvhnpjhn5LhnoXhnrbhnp/hn4vigIvhnoXhnoTigIvhnoXhn4bhno7hnrvhnoXigIvhnpThn5LhnprhnpHhnrbhnoDhn4vigIvhnoDhnpjhn5Lhnprhnrfhno/igIvhnoDhn4bhnpbhnrzhnpvigIvhnpPhn4PigIvhnp/hn4HhnpzhnrbhnoDhnpjhn5LhnpjigIvhnpLhnrbhno/hnrvigIvhnoDhn5LhnprhnrbhnqDhn5LhnpzhnrfhnoDhn5Qg4Z6Y4Z634Z6T4oCL4Z6C4Z694Z6a4oCL4oCL4Z6F4Z624Z+G4Z6U4Z624Z6F4Z+L4oCL4Z6f4Z6Y4Z+S4Z6a4Z624Z6U4Z+L4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6S4Z6Y4Z+S4Z6Y4Z6P4Z624oCL4Z6R4Z+B4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i4Z6R4Z624Z6A4Z+L4Z6R4Z6E4oCL4Z6H4Z624oCL4Z6Y4Z694Z6Z4oCL4Z6i4Z+S4Z6T4Z6A4Z6C4Z+S4Z6a4Z6U4Z+L4Z6C4Z+S4Z6a4Z6E4oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+NIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLhnrLhn5LhnpnigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpThn5Lhnprhnr7igIvhnpvhnoDhn5LhnoHhno7hn4jigIvhnoDhnpjhn5Lhnprhnrfhno/igIvhnpHhnrbhnpTigIvhnprhnpThnp/hn4sgU3VyZmFjZUZsaW5nZXIg4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4i4Z6i4Z624Z6T4oCL4Z6i4Z6E4Z+S4Z6C4oCL4Z6F4Z6E4Z6F4Z624Z+G4oCL4Z6U4Z6O4Z+S4Z6K4Z+E4Z+H4oCL4Z6i4Z624Z6f4Z6T4Z+S4Z6TIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuGesuGfkuGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GeouGetuGek+KAi+GemOGetuGej+Get+GegOGetuKAi+Gek+Gfg+KAi+GeouGehOGfkuGeguKAi+GeheGehOGeheGetuGfhuKAi+GelOGejuGfkuGeiuGfhOGfh+KAi+GeouGetuGen+Gek+GfkuGek+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IuGeheGevOGem+KAi+GeiuGfhuGejuGevuGemuGegOGetuGemiBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4i4Z6y4Z+S4Z6Z4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6U4Z+S4Z6a4Z6+4oCL4Z6b4Z6A4Z+S4Z6B4Z6O4Z+I4oCL4Z6A4Z6Y4Z+S4Z6a4Z634Z6P4oCL4Z6R4Z624Z6UIElucHV0RmxpbmdlciDhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IuGegOGfhuGejuGej+Gfi+KAi+GemuGeheGek+GetuGen+GemOGfkuGeluGfkOGek+GfkuGekuKAi+GegOGetuGemuKAi+GelOGehOGfkuGeoOGetuGeieKAi+GenOGfieGetuGemeGeoOGfkuGenOGetuGemSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IuGesuGfkuGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GegOGfhuGejuGej+Gfi+KAi+GemuGeheGek+GetuGen+GemOGfkuGeluGfkOGek+GfkuGekuKAiyDhnpPhnrfhnoTigIvhnpfhn5LhnofhnrbhnpThn4vigIvhnpHhn4XigIvhnoDhnrbhnprigIvhnpThnoThn5LhnqDhnrbhnonigIvhnpzhn4nhnrbhnpnhnqDhn5Lhnpzhnrbhnpnhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IuGeluGet+Gek+Get+Gej+GfkuGemeKAi+GegOGetuGemuKAi+GelOGehOGfkuGeoOGetuGeieKAi+GenOGfieGetuGemeGeoOGfkuGenOGetuGemSI8L3N0cmluZz4KQEAgLTc4Myw3ICs3OTIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFlhaG9vIiBtc2dpZD0iODI3MTQzOTQwODQ2OTAyMTI3MyI+IllhaG9vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFNreXBlIiBtc2dpZD0iOTAxOTI5Njc0NDYyMjgzMjk1MSI+IlNreXBlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFFxIiBtc2dpZD0iODg4NzQ4NDM3OTQ5NDExMTg4NCI+IlFRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEdvb2dsZVRhbGsiIG1zZ2lkPSI0OTM5MDIzMjExNDAyNzczMDQiPiLhnoDhnrbhnprigIvhnofhnofhn4LhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sR29vZ2xlVGFsayIgbXNnaWQ9IjQ5MzkwMjMyMTE0MDI3NzMwNCI+IkhhbmdvdXRzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEljcSIgbXNnaWQ9IjE1NzQ4NzA0MzM2MDY1MTczMTUiPiJJQ1EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSmFiYmVyIiBtc2dpZD0iMjI3OTkxNzYzMDg3NTc3MTcyMiI+IkphYmJlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xOZXRNZWV0aW5nIiBtc2dpZD0iODI4NzYyNTY1NTk4NjgyNzk3MSI+Ik5ldE1lZXRpbmciPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i4Z6H4Z+S4Z6a4Z6+4Z6f4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4i4Z6Y4Z634Z6T4oCL4Z6i4Z624Z6F4oCL4Z6F4Z624Z6U4Z+L4Z6V4Z+S4Z6K4Z6+4Z6YIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLhnoXhn4LhnoDhnprhn4bhnpvhn4LhnoDigIvhnofhnrbigIvhnpjhnr3hnpkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i4Z6F4Z+C4Z6A4oCL4Z6a4Z+G4Z6b4Z+C4Z6A4oCL4Z6H4Z624oCL4Z6Y4Z694Z6ZIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i4Z6C4Z+S4Z6a4Z6U4Z+L4Z6C4Z+S4Z6a4Z6E4oCL4Z6A4Z624Z6a4oCL4Z6a4Z674Z6J4Z+UIOGelOGfieGfhyAmYW1wOyDhnp/hnoThn5LhnoDhno/hn4vhn5QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i4Z6a4Z674Z6J4oCL4Z6h4Z6+4Z6E4oCL4Z6b4Z6+4oCL4Z6K4Z6+4Z6Y4Z+S4Z6U4Z64IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDhn5QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLhnprhnrvhnonigIvhnoXhnrvhn4fhnoDhn5Lhnprhn4ThnpjigIvhnp/hnpjhn5LhnprhnrbhnpThn4sgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOGflCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuGemuGeu+GeieKAi+GekeGfheKAi+GehuGfkuGenOGfgeGehOKAi+GeiuGevuGemOGfkuGelOGeuCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4Z+UIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IuGemuGeu+GeieKAi+KAi+GekeGfheKAi+Gen+GfkuGeiuGetuGfhuKAi+GeiuGevuGemOGfkuGelOGeuCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4Z+UIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLhnorhn4Thn4figIvigIvhnp/hn4QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6Q4Z6PIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuGen+GfkuGehOGetuGej+GfiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLhnpThnr7hnoDigIvhnp/hn4bhnqHhn4HhnoQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuGen+GfkuGenOGfguGehOGemuGegCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IuGeouGevOGen+KAiyDhnorhnr7hnpjhn5LhnpThnrjigIvhnorhn4Thn4figIvhnp/hn4Thn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4i4Z6K4Z+E4Z6P4oCL4Z6A4Z624Z6f4oCL4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6f4Z+S4Z6K4Z624Z6U4Z+L4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6U4Z624Z6T4oCL4Z6T4Z634Z6Z4Z624Z6Z4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iRG90LiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IuGelOGfkuGemuGeluGfkOGek+GfkuGekiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i4Z6f4Z+G4Z6h4Z+B4Z6E4oCL4Z6U4Z+K4Z+S4Z6b4Z684Z6S4Z684Z6fIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLhnpThnoThn5LhnqDhnrbhnonigIvhnpThno7hn5LhnorhnrbhnonigIvhnqXhno/igIvhnoHhn5Lhnp/hn4IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i4Z6a4Z694Z6F4Z6a4Z624Z6b4Z+LIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i4Z6b4Z6R4Z+S4Z6S4Z6V4Z6b4oCL4Z6Y4Z+B4Z6M4Z+AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLhnpfhn5LhnofhnrbhnpThn4vigIvhnqfhnpThnoDhnprhno7hn40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLhnoXhnrbhno/hn4vigIvhnpDhn5LhnpPhnrbhnoDhn4vigIvhnqLhn4HhnoDhn5LhnprhnoThn4vigIvhnpHhn4XigIvhnqfhnpThnoDhnprhno7hn40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLhnoDhn4bhnpbhnrvhnoTigIvhnp/hn5Lhnpzhn4LhnoThnprhnoDigIvhnqfhnpThnoDhnprhno7hn40uLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLhnoDhnrbhnprigIvhnoDhn4bhno7hno/hn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i4Z6V4Z+S4Z6K4Z624Z6F4Z+LIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IuGegOGfhuGeluGeu+GehOKAi+GenOGet+Gel+GetuGeguKAi+GemuGegOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IuGegOGfhuGeluGeu+GehOKAi+KAi+KAi+Gel+GfkuGeh+GetuGelOGfi+KAi+KApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i4Z6R4Z+G4Z6T4Z+B4Z6aIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4g4Z6P4Z+S4Z6a4Z694Z6P4oCL4Z6C4Z+S4Z6T4Z62Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwg4Z6f4Z674Z6c4Z6P4Z+S4Z6Q4Z634Z6X4Z624Z6WIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLhnpThnrbhnpPigIvhnpfhn5LhnofhnrbhnpThn4vigIvhnoDhnrbhnprigIvhnpThnoThn5LhnqDhnrbhnonigIvhnpThno7hn5LhnorhnrbhnonigIvhnqXhno/igIvhnoHhn5Lhnp/hn4IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4oCL4Z6T4Z+B4Z+H4oCL4Z6U4Z6E4Z+S4Z6g4Z624Z6J4oCL4Z6b4Z6+4oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6V4Z+S4Z6f4Z+B4Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IuGeheGetuGej+Gfi+KAi+GekOGfkuGek+GetuGegOGfi+KAi+GeouGfgeGegOGfkuGemuGehOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IuGegOGfhuGeluGeu+GehOKAi+Gej+Gel+GfkuGeh+GetuGelOGfi+KAi+GekeGfhSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLhnoXhnrbhno/hn4vigIvhnpDhn5LhnpPhnrbhnoDhn4vigIvhnqLhn4HhnoDhn5LhnprhnoThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IuGej+Gel+GfkuGeh+GetuGelOGfi+KAi+GekeGfhSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i4Z6V4Z+S4Z6K4Z624Z6F4Z+LIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLhnoDhnrbhnprigIvhnqDhn4XigIvhnpbhn4HhnpvigIvhnqLhnrbhnp/hnpPhn5LhnpMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLhnpfhn5Lhnpvhn4HhnoXigIvigIvhnpvhn4bhnpPhnrbhn4YiPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTYsMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4i4Z6f4Z684Z6Y4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6Y4Z+S4Z6K4Z6E4oCL4Z6R4Z+A4Z6P4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6a4Z6Z4Z+I4Z6W4Z+B4Z6bIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOGenOGet+Gek+GetuGekeGeuCI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLhnp/hnrzhnpjigIvhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpjhn5LhnorhnoThnpHhn4Dhno/igIvhnpPhn4XigIvhnpbhn4HhnpvigIvhnoDhn5Lhnprhn4Thnpnhn5QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i4Z6i4Z684Z6f4oCL4oCL4oCL4Z6F4Z674Z+H4Z6A4Z+S4Z6a4Z+E4Z6YIOGeiuGevuGemOGfkuGelOGeuOKAi+GeheGfgeGeieKAi+GeluGeuOKAi+GegOGetuGemuKAi+GelOGehOGfkuGeoOGetuGeieKAi+GeluGfgeGeieKAi+GeouGfgeGegOGfkuGemuGehOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLhnqLhnrzhnp/igIvigIvigIvigIvhnpbhnrjhnpvhnr7igIvhnoXhnrvhn4fhnoDhn5Lhnprhn4Thnpgg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6F4Z+B4Z6J4oCL4Z6W4Z644oCL4Z6A4Z624Z6a4oCL4Z6U4Z6E4Z+S4Z6g4Z624Z6J4oCL4Z6W4Z+B4Z6J4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLhnprhnr3hnoXhnprhnrbhnpvhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLhnoLhn5LhnprhnrbhnpThn4vigIvhnprhn4bhnoDhnrfhnpvigIvhnprhnoThn5LhnpzhnoThn4vigIvhnpjhn4nhn4ThnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IuGeguGfkuGemuGetuGelOGfi+KAi+GemuGfhuGegOGet+Gem+KAi+GemuGehOGfkuGenOGehOGfi+KAi+Gek+GetuGekeGeuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLhnofhn5Lhnprhnr7hnp/igIvhnpjhn4nhn4ThnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLhnofhn5Lhnprhnr7hnp/igIvhnpPhnrbhnpHhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IuGegOGfkuGemuGeoeGetuKAi+KAi+KAi+GegeGfguKAi+Gek+Gfg+KAi+GekOGfkuGehOGfgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IuGelOGeieGfkuGeh+GeuOKAi+GehuGfkuGek+GetuGfhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4i4Z6H4Z+S4Z6a4Z6+4Z6f4oCL4Z6B4Z+CIOGek+Get+GehOKAi+GekOGfkuGehOGfgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IuGeh+GfkuGemuGevuGen+KAi+GehuGfkuGek+GetuGfhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiLhnpThnrbhnpPigIvhnofhn5Lhnprhnr7hnp8gPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4i4Z6U4Z624Z6T4oCL4Z6b4Z674Z6UIDx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAppbmRleCAxYTBiMmQ5Li5mZTA0MzE4IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IjjsnpDrpqwg7J207IOB7J2YIOyIq+yekCBQVUvrpbwg7J6F66Cl7ZWp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU0g7Lm065Oc7J2YIFBVS+qwgCDsnqDqsqgg7J6I7Iq164uI64ukLiDsnqDquIjtlbTsoJztlZjroKTrqbQgUFVLIOy9lOuTnOulvCDsnoXroKXtlZjshLjsmpQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iU0lNIOy5tOuTnCDsnqDquIjsnYQg7ZW07KCc7ZWY66Ck66m0IFBVSzLrpbwg7J6F66Cl7ZWY7IS47JqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuyLpO2MqO2WiOyKteuLiOuLpC4gU0lNL1JVSU0g7J6g6riI7J2EIOyCrOyaqSDshKTsoJXtlZjshLjsmpQuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+7ZqMIOydtOyDgSDsi6TtjKjtlaAg6rK97JqwIFNJTeydtCDsnqDquYHri4jri6QuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+7ZqMIOydtOyDgSDsi6TtjKjtlaAg6rK97JqwIFNJTeydtCDsnqDquYHri4jri6QuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLrsJzsi6DsnpAg67KI7Zi4Ijwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLqtoztlZzsnYQg6rCA7KeEIO2UhOuhnOq3uOueqOydtCBWUE4g7ISc67mE7Iqk7JeQIOuMgO2VnCDstZzsg4HsnIQg7J247YSw7Y6Y7J207Iqk66W8IOyCrOyaqe2VmOuPhOuhnSDtl4jsmqntlanri4jri6QuIOydvOuwmCDslbHsl5DripQg7ZWE7JqU7ZWY7KeAIOyViuyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i67Cw6rK97ZmU66m0IOyXsOqysCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i6raM7ZWc7J2EIOqwgOynhCDtlITroZzqt7jrnqjsnbQg67Cw6rK97ZmU66m07JeQIOuMgO2VnCDstZzsg4HsnIQg7J247YSw7Y6Y7J207Iqk66W8IOyCrOyaqe2VmOuPhOuhnSDtl4jsmqntlanri4jri6QuIOydvOuwmCDslbHsl5DripQg7ZWE7JqU7ZWY7KeAIOyViuyKteuLiOuLpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IuybkOqyqSDrlJTsiqTtlIzroIjsnbTsl5Ag7Jew6rKwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i6raM7ZWc7J2EIOqwgOynhCDtlITroZzqt7jrnqjsnbQg7JuQ6rKpIOuUlOyKpO2UjOugiOydtOyXkCDrjIDtlZwg7LWc7IOB7JyEIOyduO2EsO2OmOydtOyKpOulvCDsgqzsmqntlZjrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukLiDsnbzrsJgg7JWx7JeQ64qUIO2VhOyalO2VmOyngCDslYrsirXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i7JyE7KCvIOyEnOu5hOyKpOyZgCDsl7DqsrAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i6raM7ZWc7J2EIOqwgOynhCDtlITroZzqt7jrnqjsnbQg7JyE7KCvIOyEnOu5hOyKpOyXkCDrjIDtlZwg7LWc7IOB7JyEIOyduO2EsO2OmOydtOyKpOulvCDsgqzsmqntlZjrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukLiDsnbzrsJgg7JWx7JeQ64qUIO2VhOyalO2VmOyngCDslYrsirXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i6riw6riwIOq0gOumrOyekOyZgCDsg4HtmLgg7J6R7JqpIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLslbHsnbQgU3VyZmFjZUZsaW5nZXLsnZgg7ZWY7JyEIOyImOykgCDquLDriqXsnYQg7IKs7Jqp7ZWgIOyImCDsnojrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+Iu2UhOugiOyehCDrsoTtjbwg7J296riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuyVseydtCDtlITroIjsnoQg67KE7Y287J2YIOuCtOyaqeydhCDsnb3snYQg7IiYIOyeiOuPhOuhnSDtl4jsmqntlanri4jri6QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iSW5wdXRGbGluZ2Vy7JeQIOyVoeyEuOyKpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLslbHsnbQgSW5wdXRGbGluZ2Vy7J2YIO2VmOychCDsiJjspIAg6riw64ql7J2EIOyCrOyaqe2VmOuPhOuhnSDtlanri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJXaS1GaSDrlJTsiqTtlIzroIjsnbQg7ISk7KCVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4i7JWx7J20IFdpLUZpIOuUlOyKpO2UjOugiOydtOulvCDshKTsoJXtlZjqs6Ag7Jew6rKw7ZWY64+E66GdIO2XiOyaqe2VqeuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IldpLUZpIOuUlOyKpO2UjOugiOydtCDsoJzslrQiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCDtgqQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciDtgqQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLslbEg7ISg7YOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPuydhCjrpbwpIOyLpO2Wie2VoCDsiJgg7JeG7Iq164uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IuqzteycoCDrjIDsg4E6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz7smYAo6rO8KSDqs7XsnKAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i7Iqs65287J2065SpIO2VuOuTpOydhCDquLjqsowg7YSw7LmY7ZWY7IS47JqULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7tlZjroKTrqbQg7JyE66GcIOyKrOudvOydtOuTnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPu2VmOugpOuptCDslYTrnpjroZwg7Iqs65287J2065OcIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+7ZWY66Ck66m0IOyZvOyqveycvOuhnCDsiqzrnbzsnbTrk5wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+7ZWY66Ck66m0IOyYpOuluOyqveycvOuhnCDsiqzrnbzsnbTrk5wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuyeoOq4iCDtlbTsoJwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i7Lm066mU6528Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuustOydjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLsgqzsmrTrk5wg7Lyc6riwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLqsoDsg4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLsiqTsmYDsnbTtlITtlZjsl6wg7J6g6riJ64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLruYTrsIDrsojtmLgg7YKk66W8IOydjOyEseycvOuhnCDrk6TsnLzroKTrqbQg7Zek65Oc7IWL7J2EIOyXsOqysO2VmOyEuOyalC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLsoJAiPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLsi5zsiqTthZwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+Iuu4lOujqO2IrOyKpCDsmKTrlJTsmKQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IuustOyEoCDrlJTsiqTtlIzroIjsnbQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i7JmE66OMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i66+465SU7Ja0IOy2nOugpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i6riw6riw7JeQIOyXsOqysCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+Iuq4sOq4sOuhnCDtmZTrqbQg7KCE7IahIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i6riw6riwIOqygOyDiSDspJHigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLshKTsoJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i7Jew6rKwIO2VtOygnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLqsoDsg4kg7KSRLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i7Jew6rKwIOykkS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i7IKs7JqpIOqwgOuKpSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+Ijx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz7rsojsp7gg7Jik67KE66CI7J20Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwg67O07JWIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLrrLTshKAg65SU7Iqk7ZSM66CI7J206rCAIOyXsOqysOuQmOyXiOyKteuLiOuLpC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i7J20IO2ZlOuptOydgCDri6Trpbgg6riw6riw7JeQ7IScIO2RnOyLnOuQmOqzoCDsnojsirXri4jri6QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+Iu2ZlOuptCDsoITshqEg7KSRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+7JeQIOyXsOqysCDspJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLtmZTrqbQg7KCE7IahIOykkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+7JeQIOyXsOqysOuQqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLsl7DqsrAg7ZW07KCcIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLquLTquIkg7Ya17ZmUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i7Yyo7YS07J2EIOyeiuydjCI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1NiwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPuy0iCDtm4Tsl5Ag64uk7IucIOyLnOuPhO2VmOyEuOyalC4iPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i64KY7KSR7JeQIOuLpOyLnCDsi5zrj4QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i7KCE7LK07ZmU66m07J2EIOyiheujjO2VmOugpOuptCDsnITsl5DshJwg7JWE656Y66GcIOyKpOyZgOydtO2UhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLsoITssrTtmZTrqbTsnYQg7KKF66OM7ZWY66Ck66m0IOychOyXkOyEnCDslYTrnpjroZwg7Iqk7JmA7J207ZSE7ZWY7IS47JqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i7JmE66OMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4i7Iuc6rCEIOybkO2YlSDsiqzrnbzsnbTrjZQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+Iuu2hCDsm5DtmJUg7Iqs65287J20642UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IuyLnOqwhCDshKDtg50iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLrtoQg7ISg7YOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLsm5Trs4Qg67CU65GR7YyQ7IudIOuCoOynnCDtkZzsi5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLrhYQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IuyblC/snbwg7ISg7YOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4i7Jew64+EIOyEoO2DnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz7snbQo6rCAKSDshKDtg53rkKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDsgq3soJzrkKgiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbGFuZC9kaW1lbnMueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1sYW5kL2RpbWVucy54bWwKaW5kZXggZGM1OWY2MS4uNjQwY2ExZSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1sYW5kL2RpbWVucy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1sYW5kL2RpbWVucy54bWwKQEAgLTYxLDYgKzYxLDEwIEBACiAgICAgTGFuZHNjYXBlJ3MgbGF5b3V0IGFsbG93cyB0aGlzIHRvIGJlIHNtYWxsZXIgdGhhbiBmb3IgcG9ydHJhaXQuIC0tPgogICAgIDxkaW1lbiBuYW1lPSJrZ19zcXVhc2hlZF9sYXlvdXRfdGhyZXNob2xkIj40MDBkcDwvZGltZW4+CiAKKyAgICA8IS0tIE5ldyBUaW1lUGlja2VyIGRpbWVuc2lvbnMuIC0tPgorICAgIDxkaW1lbiBuYW1lPSJ0aW1lcGlja2VyX2xlZnRfc2lkZV93aWR0aCI+MjUwZGlwPC9kaW1lbj4KKwogICAgIDwhLS0gd2lkdGggb2YgSW1tZXJzaXZlTW9kZUNvbmZpcm1hdGlvbiAoLTEgZm9yIG1hdGNoX3BhcmVudCkgLS0+CiAgICAgPGRpbWVuIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NsaW5nX3dpZHRoIj4zODBkcDwvZGltZW4+CisKIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAppbmRleCAwMDNiM2Y5Li4xNzY5MzgzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4i4Lqe4Lq04Lqh4Lql4Lqw4Lqr4Lqx4LqUIFBVSyDgupfgurXgu4jguqHgurUgOCDgu4LgupXgu4DguqXguoEg4Lqr4Lq84Lq34Lqr4Lq84Lqy4LqN4LqB4Lqn4LuI4Lqy4LqZ4Lqx4LuJ4LqZLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiLguorgurTguqHguoHgurLgupTguoLguq3guofgupfgu4jgurLgupngupbgurfguoHguqXgurHguq3guoHgupTgu4nguqfguo3guqXgurDguqvgurHgupQgUFVLLiDgu4Pguqvgu4ngup7gurTguqHguqXgurDguqvgurHgupQgUFVLIOC7gOC6nuC6t+C7iOC6reC6m+C6u+C6lOC6peC6seC6reC6geC6oeC6seC6mS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLgup7gurTguqEgUFVLMiDgu4Dgup7gurfgu4jguq3gupvgurvgupTguqXgurHguq3guoEgU0lNIGNhcmQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4i4Lqa4LuN4LuI4Lqq4Lqz4LuA4Lql4Lqx4LqULCDgu4DgupvgurXgupTgupngu43gurLgu4Pguorgu4nguoHgurLgupnguqXgurHguq3guoHguoLguq3guocgU0lNL1JVSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i4LqX4LuI4Lqy4LqZ4Lqq4Lqy4Lqh4Lqy4LqU4Lql4Lqt4LqH4LuE4LqU4LuJ4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3guoHgu4jguq3gupngupfgurXgu4ggU0lNIOC6guC6reC6h+C6l+C7iOC6suC6meC6iOC6sOC6luC6t+C6geC6peC6seC6reC6gS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLgupfgu4jgurLgupnguqrgurLguqHgurLgupTguqXguq3guofgu4TgupTgu4nguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC6geC7iOC6reC6meC6l+C6teC7iCBTSU0g4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4LqI4Lqw4LqW4Lq34LqB4Lql4Lqx4Lqt4LqBLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i4Lud4Lqy4LqN4LuA4Lql4LqB4Lqc4Lq54LuI4LuC4LqX4LuA4LqC4Lq74LuJ4LqyIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Dguojgurvgu4ngurLguoLguq3guofgu4Dguorgurfgu4jguq3guqHgu4Lguo3guofguoHgurHguprguqrgu4jguqfgupngupXgurTgupTgupXgu43gu4jguqXgurDgupTgurHguprgu4DgupfgurTguofguqrgurjgupQg4LqC4Lqt4LqH4Lqa4LuN4Lql4Lq04LqB4Lqy4LqZIFZQTi4g4LuB4Lqt4Lqx4Lqa4Lqv4LqX4Lq74LuI4Lqn4LuE4Lqb4Lqa4LuN4LuI4LqE4Lqn4LqZ4LqI4Lqz4LuA4Lqb4Lqx4LqZ4LqV4LuJ4Lqt4LqH4LuD4LqK4LuJLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiLgu4Dguorgurfgu4jguq3guqHgu4Lguo3guofguoHgurHguprgup7gurLguprgup7gurfgu4ngupnguqvgurzgurHguociPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IuC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC6nOC6ueC7iOC7g+C6iuC7ieC7gOC6iuC6t+C7iOC6reC6oeC7guC6jeC6h+C6geC6seC6muC6quC7iOC6p+C6meC6leC6tOC6lOC6leC7jeC7iOC6peC6sOC6lOC6seC6muC6quC6ueC6h+C6quC6uOC6lCDguoLguq3guofgup7gurLguprgup7gurfgu4ngupnguqvgurzgurHguofgu4PgupTgupngurbgu4jguocuIOC7geC6reC6seC6muC6r+C6l+C6s+C6oeC6sOC6lOC6suC6muC7jeC7iOC6hOC6p+C6meC6iOC6s+C7gOC6m+C6seC6meC6leC7ieC6reC6h+C7g+C6iuC7iS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+IuC6nOC6ueC6geC6geC6seC6meC7gOC6nuC6t+C7iOC6reC6quC6sOC7geC6lOC6h+C6nOC6u+C6meC6l+C6suC6h+C7hOC6gS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngupzgurngu4jgupbgurfgupzgurnguoHguoHgurHguprguqrgu4jguqfgupngupXgurTgupTgupXgu43gu4jguqXgurDgupTgurHguprguqrgurnguofguqrgurjgupQg4LqC4Lqt4LqH4LqB4Lqy4LqZ4Lqq4Lqw4LuB4LqU4LqH4Lqc4Lq74LqZ4LqX4Lqy4LqH4LuE4LqBLiDguprgu43gu4jguojgurPgu4DgupvgurHgupnguqrgurPguqXgurHguprgu4Hguq3gurHguprguq/gupfgurvgu4jguqfgu4TgupsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i4LuA4LqK4Lq34LuI4Lqt4Lqh4LuC4LqN4LqH4LuE4Lqb4Lqr4Lqy4Lqa4LuN4Lql4Lq04LqB4Lqy4LqZ4Lqn4Lq04LqU4LuA4LqI4Lqx4LqUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IuC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC6nOC6ueC7iOC6luC6t+C6nOC6ueC6geC6geC6seC6muC6reC6tOC6meC7gOC6leC6teC7gOC6n+C6lOC6peC6sOC6lOC6seC6muC6quC6ueC6h+C6quC6uOC6lCDguoLguq3guofguprgu43guqXgurTguoHgurLgupnguqfgurTgu4DguojgurHgupQuIOC6muC7jeC7iOC6iOC6s+C7gOC6m+C6seC6meC6quC6s+C6peC6seC6muC7geC6reC6seC6muC6r+C6l+C6u+C7iOC6p+C7hOC6my4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiLgupXgurTgupTgupXgu43gu4jguoHgurHguprgupzgurngu4jgu4DguprgurTgu4jguofgu4Hguo3guofguq3gurjgupvgurDguoHguq3gupkiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IuC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC7geC6reC6seC6muC6r+C6meC6s+C7g+C6iuC7ieC6hOC6p+C6suC6oeC6quC6suC6oeC6suC6lOC6peC6sOC6lOC6seC6muC6leC7iOC6syBTdXJmYWNlRmxpbmdlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuC6reC7iOC6suC6meC7gOC6n+C6o+C6oeC6muC6seC6muC7gOC6n+C6tSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq/guq3gu4jgurLgupngu4Dgupngurfgu4nguq3guqvgurLguoLguq3guofgu4Dgup/guqPguqHguprgurHguprgu4Dgup/gurUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4i4LuA4LqC4Lq74LuJ4Lqy4LuA4LqW4Lq04LqHIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq/gupngurPgu4Pguorgu4nguoTguqfgurLguqHguqrgurLguqHgurLgupQgSW5wdXRGbGluZ2VyIOC6peC6sOC6lOC6seC6muC6leC7iOC6syI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i4Lqb4Lqx4Lqa4LqE4LuI4Lqy4LqB4Lqy4LqZ4Lqq4Lqw4LuB4LqU4LqH4Lqc4Lq74LqZIFdpRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq/gupXgurHgu4nguofguoTgu4jgurIg4LuB4Lql4Lqw4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuI4LqI4LuN4Lqq4Lqw4LuB4LqU4LqH4Lqc4Lq74LqZIFdpRmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiLguoTguqfguprguoTgurjguqHguoHgurLgupnguqrgurDgu4HgupTguocgV2lGaSI8L3N0cmluZz4KQEAgLTExMTQsNyArMTEyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJsb2FkaW5nIiBtc2dpZD0iNzkzMzY4MTI2MDI5NjAyMTE4MCI+IuC6geC6s+C6peC6seC6h+C7guC6q+C6peC6lC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb24iIG1zZ2lkPSIxNTQ0NjgyNzU1NTE0NDk0Mjk4Ij4i4LuA4Lqb4Lq14LqUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vZmYiIG1zZ2lkPSI2ODE1ODcwMzg2OTcyODA1ODMyIj4i4Lqb4Lq04LqUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2hpY2hBcHBsaWNhdGlvbiIgbXNnaWQ9IjQ1MzMxODU5NDcwNjQ3NzMzODYiPiLgu4Dguq7gurHgupTguqfgur3guoHgu4Pguqvgu4nguqrgurPgu4DguqXgurHgupTgu4LgupTguo3gu4Pguorgu4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aGljaEFwcGxpY2F0aW9uIiBtc2dpZD0iNDUzMzE4NTk0NzA2NDc3MzM4NiI+IuC6lOC6s+C7gOC6meC6teC6meC6geC6suC6meC7guC6lOC6jeC7g+C6iuC7iSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndoaWNoSG9tZUFwcGxpY2F0aW9uIiBtc2dpZD0iNDYxNjQyMDE3MjcyNzMyNjc4MiI+IuC7gOC6peC6t+C6reC6geC7geC6reC6seC6muC6ryBIb21lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+IuC7g+C6iuC7ieC7guC6lOC6jeC6hOC7iOC6suC7gOC6peC6teC7iOC6oeC6leC6u+C6meC6quC6s+C6peC6seC6muC6geC6suC6meC7gOC6ruC6seC6lOC6p+C6veC6geC6meC6teC7iS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhckRlZmF1bHRIaW50TXNnIiBtc2dpZD0iMzI1MjU4NDY4OTUxMjA3NzI1NyI+IuC6peC6tuC6muC6peC7ieC6suC6h+C6hOC7iOC6suC7gOC6peC6teC7iOC6oeC6leC6u+C7ieC6mSDgu4Pgupkg4LqB4Lqy4LqZ4LqV4Lqx4LuJ4LqH4LqE4LuI4Lqy4Lql4Lqw4Lqa4Lq74LqaICZndDsg4LuB4Lqt4Lqx4Lqa4LqvICZndDsg4LqU4Lqy4Lqn4LuC4Lqr4Lql4LqU4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLgu4DguqXgurfguq3guoHgu4Hguq3gurHguprguq8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiLguprgu43gu4jigIvguqrgurLigIvguqHgurLgupTigIvgu4DgupvgurXgupQgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiDgu4TgupTgu4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLgu4Hguprgu4jguofgupvgurHgupnguoHgurHgupoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i4LuB4Lqa4LuI4LqH4Lqb4Lqx4LqZ4LuD4Lqr4LuJIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i4LuA4Lql4Lq34LuI4Lqt4LqZ4Lqa4LuI4Lqt4LqZ4LqW4Lq3IOC7geC6peC7ieC6p+C7geC6leC6sOC6hOC7ieC6suC6h+C7hOC6p+C7iS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i4LuA4Lql4Lq34LuI4Lqt4LqZ4LqC4Lq24LuJ4LqZ4LuA4Lqe4Lq34LuI4LqtIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLgu4DguqXgurfgu4jguq3gupnguqXgurvguofgu4Dgup7gurfgu4jguq0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuC7gOC6peC6t+C7iOC6reC6meC7hOC6m+C6l+C6suC6h+C6iuC7ieC6suC6jeC7gOC6nuC6t+C7iOC6rSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IuC7gOC6peC6t+C7iOC6reC6meC7hOC6m+C6l+C6suC6h+C6guC6p+C6suC7gOC6nuC6t+C7iOC6rSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLgupvgurvgupTguqXgurHguq3guoEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4LqB4LuJ4Lqt4LqHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuC6m+C6tOC6lOC6quC6veC6hyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLgu4DgupvgurXgupTguqrgur3guociPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuC6iuC6reC6geC6q+C6siI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IuC6m+C6seC6lOC7gOC6nuC6t+C7iOC6reC6m+C6u+C6lOC6peC6seC6reC6gS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4i4Lqq4Lq94Lqa4Lqq4Lqy4LqN4Lqr4Lq54Lqf4Lqx4LqH4LuA4Lqe4Lq34LuI4Lqt4Lqf4Lqx4LqH4Lql4Lqw4Lqr4Lqx4LqU4Lqc4LuI4Lqy4LqZLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IuC6iOC7jeC7ieC6suC7gOC6oeC6seC6lC4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLguqXgurDguprgurvgupoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IuC6quC6veC6hyBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IuC6geC6suC6meC6quC6sOC7geC6lOC6h+C6nOC6u+C6meC7hOC6ruC7ieC6quC6suC6jSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLgu4HguqXgu4nguqfgu4YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLguqHgurXgu4DgupTguo3gu4Dguq3gurvgu4ngurLgup7gurjgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IuC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iOC6q+C6suC6reC6uOC6m+C6sOC6geC6reC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IuC6quC6u+C7iOC6h+C6nuC6suC6muC7nOC7ieC6suC6iOC7jeC7hOC6m+C6q+C6suC6reC6uOC6m+C6sOC6geC6reC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IuC6geC6s+C6peC6seC6h+C6iuC6reC6geC6q+C6suC6reC6uOC6m+C6sOC6geC6reC6mS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IuC6geC6suC6meC6leC6seC7ieC6h+C6hOC7iOC6siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiLgupXgurHgupTguoHgurLgupngu4Dguorgurfgu4jguq3guqHgupXgu43gu4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i4LqB4Lqz4Lql4Lqx4LqH4Lqq4Lqw4LuB4LqB4LqZLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i4LqB4Lqz4Lql4Lqx4LqH4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuILi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLguqrgurLguqHgurLgupTgu4Pguorgu4ngu4TgupTgu4kiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLguoHgurLgupnguqfgurLguofguorgu4nguq3gupkgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDgupvguq3gupTgu4Tgup4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IuC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iOC6geC6suC6meC6quC6sOC7geC6lOC6h+C6nOC6u+C6meC7hOC6ruC7ieC6quC6suC6jeC7geC6peC7ieC6pyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLguojgu43gupngurXgu4nguoHgurPguqXgurHguofguqrgurDgu4HgupTguofguqLgurngu4jgu4Pgupnguq3gurjgupvgurDguoHguq3gupnguq3gurfgu4jgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4i4LqB4Lqz4Lql4Lqx4LqH4Lqq4Lq74LuI4LqH4Lqe4Lqy4Lqa4Luc4LuJ4Lqy4LqI4LuNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4i4LqB4Lqz4Lql4Lqx4LqH4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuI4Lqr4LqyIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IuC6geC6suC6meC6quC6u+C7iOC6h+C6nuC6suC6muC7nOC7ieC6suC6iOC7jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4i4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuI4LqB4Lqx4LqaIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiDgu4HguqXgu4nguqciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i4Lqi4Lq44LqU4LqB4Lqy4LqZ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLguoHgurLgupngu4LgupfguqrgurjguoHgu4DguqrgurXgupkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLguqXgurfguqHguq7gurnguprgu4HguprguprgupvgurvgupTguqXgurHguq3guoE/Ijwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjU3LDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLguqXguq3guofgu4Pgu53gu4jguq3gurXguoHguoTgurHgu4nguofgu4Pgupngup7gurLguo3guqvguqXgurHguocuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IuC6m+C6seC6lOC6peC6u+C6h+C6oeC6suC6iOC6suC6geC6l+C6suC6h+C7gOC6l+C6tOC6h+C7gOC6nuC6t+C7iOC6reC6reC6reC6geC6iOC6suC6geC7guC7neC6lOC7gOC6leC6seC6oeC7nOC7ieC6suC6iOC7jS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IuC7geC6peC7ieC6p+C7hiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IuC7guC6leC7neC6uOC6meC6m+C6seC6muC6iuC6u+C7iOC6p+C7guC6oeC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4i4LuC4LqV4Lud4Lq44LqZ4Lqb4Lqx4Lqa4LqZ4Lqy4LqX4Lq1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IuC7gOC6peC6t+C6reC6geKAi+C6iuC6u+C7iOC6p+KAi+C7guC6oeC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IuC7gOC6peC6t+C6reC6geC6meC6suKAi+C6l+C6tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i4LqV4Lqy4LqV4Lqy4Lql4Lqy4LqH4Lqn4Lqx4LqZ4LqX4Lq14LuA4LqU4Lq34Lqt4LqZ4Lqb4Lq1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i4Lql4Lqy4LqN4LqB4Lqy4LqZ4Lqb4Lq1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLgu4DguqXgurfguq3guoHgu4DgupTgurfguq3gupkg4LuB4Lql4LqwIOC6p+C6seC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IuC7gOC6peC6t+C6reC6geKAi+C6m+C6tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4g4LqW4Lq34LqB4LuA4Lql4Lq34Lqt4LqB4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4g4LqW4Lq34LqB4Lql4Lq24Lqa4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbAppbmRleCA5ZmE0MWM5Li5iNzU5Y2YxIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IsSudmVza2l0ZSA4IHNrYWl0bWVuxbMgYXIgaWxnZXNuxK8gUFVLIGtvZMSFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJKxatzxbMgU0lNIGtvcnRlbMSXIHlyYSB1xb5yYWtpbnRhIFBVSyBrb2R1LiBKZWkgbm9yaXRlIGrEhSBhdHJha2ludGksIMSvdmVza2l0ZSBQVUsga29kxIUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4ixK52ZXNraXRlIFBVSzIga29kxIUsIGthZCBwYW5haWtpbnR1bcSXdGUgU0lNIGtvcnRlbMSXcyBibG9rYXZpbcSFLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+Ik5lcGF2eWtvLiDErmdhbGludGkgU0lNIC8gUlVJTSB1xb5yYWt0xIUuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iTGlrbyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYmFuZC4gUGFza3VpIFNJTSBrb3J0ZWzElyBidXMgdcW+cmFraW50YS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJMaWtvIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBiYW5kLiBQYXNrdWkgU0lNIGtvcnRlbMSXIGJ1cyB1xb5yYWtpbnRhLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4ixK5laW5hbsSNaW8gc2thbWJpbnRvam8gSUQiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IkxlaWTFvmlhbWEgc2F2aW5pbmt1aSBzdXNpc2Fpc3R5dGkgc3UgYXVrxaHEjWlhdXNpbyBseWdpbyBWUE4gcGFzbGF1Z29zIHPEhXNhamEuIMSucHJhc3RvbXMgcHJvZ3JhbW9tcyB0byBuZXR1csSXdMWzIHByaXJlaWt0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4ic3VzYWlzdHl0aSBzdSBkYXJiYWxhdWtpbyBmb251Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJMZWlkxb5pYW1hIHNhdmluaW5rxIUgc3VzYWlzdHl0aSBzdSBhdWvFocSNaWF1c2lvIGx5Z2lvIGRhcmJhbGF1a2lvIGZvbm8gc8SFc2FqYS4gxK5wcmFzdG9tcyBwcm9ncmFtb21zIHRvIG5ldHVyxJd0xbMgcHJpcmVpa3RpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4ic3VzaXNhaXN0eXRpIHN1IG51b3RvbGluaXUgZWtyYW51Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iTGVpZMW+aWFtYSBzYXZpbmlua3VpIHN1c2lzYWlzdHl0aSBzdSBhdWvFocSNaWF1c2lvam8gbHlnaW8gbnVvdG9saW5pbyBla3Jhbm8gc8SFc2FqYS4gxK5wcmFzdG9tcyBwcm9ncmFtb21zIHRvIG5ldHVyxJd0xbMgcHJpcmVpa3RpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+InN1c2Fpc3R5dGkgc3UgdmFsZGlrbGlvIHBhc2xhdWdhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkxlaWTFvmlhbWEgc2F2aW5pbmt1aSBzdXNpc2Fpc3R5dGkgc3UgYXVrxaHEjWlhdXNpbyBseWdpbyB2YWxkaWtsaW8gcGFzbGF1Z29zIHPEhXNhamEuIMSucHJhc3RvbXMgcHJvZ3JhbW9tcyB0byBuZXR1csSXdMWzIHByaXJlaWt0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJzxIV2ZWlrYXV0aSBzdSDEr3JlbmdpbmlvIGFkbWluaXN0cmF0b3JpdW1pIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJMZWlkxb5pYW1hIHByb2dyYW1haSBuYXVkb3RpIOKAnlN1cmZhY2VGbGluZ2Vy4oCcIMW+ZW1vIGx5Z2lvIGZ1bmtjaWphcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJza2FpdHl0aSBrYWRyxbMgYnVmZXLEryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJMZWlkxb5pYW1hIHByb2dyYW1haSBza2FpdHl0aSByxJdtZWxpbyBidWZlcmlvIHR1cmluxK8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4icGFzaWVrdGkg4oCeSW5wdXRGbGluZ2Vy4oCcIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IlByb2dyYW1haSBsZWlkxb5pYW1hIG5hdWRvdGkg4oCeSW5wdXRGbGluZ2Vy4oCcIMW+ZW1vIGx5Z2lvIGZ1bmtjaWphcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ImtvbmZpZ8WrcnVvdGkg4oCeV2ktRmnigJwgcGF0ZWlrdGlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iTGVpZMW+aWFtYSBwcm9ncmFtYWkga29uZmlnxatydW90aSBpciBwcmlzaWp1bmd0aSBwcmllIOKAnldpLUZp4oCcIHBhdGVpa8SNacWzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4idmFsZHl0aSDigJ5XaS1GaeKAnCBwYXRlaWt0aXMiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IsSudmVzdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJQYXNpcmlua2l0ZSBwcm9ncmFtxIUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiJOZXBhdnlrbyBwYWxlaXN0aSDigJ48eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+4oCcIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iQmVuZHJpbnRpIHN1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkJlbmRyaW50aSBzdSDigJ48eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+4oCcIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IlNseWRpbW8gdmFsZHltYXMuIFBhbGllc2tpdGUgaXIgbGFpa3lraXRlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJTbHlza2l0ZSBhdWvFoXR5biBsaW5rIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJTbHlza2l0ZSDFvmVteW4gbGluayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iU2x5c2tpdGUgxK8ga2FpcsSZIGxpbmsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJTbHlza2l0ZSDEryBkZcWhaW7EmSBsaW5rIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkF0cmFraW50aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJWYWl6ZG8ga2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IkJlZ2Fyc2lzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkdhcnNhcyDEr2p1bmd0YXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlBhaWXFoWthIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iUGVyYnJhdWtpdGUgcGlyxaF0dSwga2FkIGF0cmFraW50dW3El3RlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJQcmlqdW5raXRlIGF1c2luZXMsIGthZCBpxaFnaXJzdHVtxJd0ZSBzYWtvbXVzIHNsYXB0YcW+b2TFvmlvIGtsYXZpxaF1cy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJUYcWha2FzLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlNpc3RlbWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IuKAnkJsdWV0b290aOKAnCBnYXJzYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IkJlbGFpZGlzIHJvZHltYXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iQXRsaWt0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik1lZGlqb3MgacWhdmVzdGlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJQcmlqdW5naW1hcyBwcmllIMSvcmVuZ2luaW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJQZXJkdW90aSBla3JhbsSFIMSvIMSvcmVuZ2luxK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJJZcWha29tYSDEr3JlbmdpbmnFs+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+Ik51c3RhdHltYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iQXRqdW5ndGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iTnVza2FpdG9tYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+Ikp1bmdpYW1hLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJQYXNpZWtpYW1hIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iUGVyZGFuZ2EgbnIuIDx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4i4oCePHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+4oCcOiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+IHggPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IHRhxaFrLiBjb2x5amUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBzYXVndSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iUHJpanVuZ3RhcyBiZWxhaWRpcyBtb25pdG9yaXVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IsWgaXMgZWtyYW5hcyByb2RvbWFzIGtpdGFtZSDEr3JlbmdpbnlqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJQZXJkdW9kYW1hcyBla3JhbmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iUHJpc2lqdW5naWFtYSBwcmllIOKAnjx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuKAnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IlBlcmR1b2RhbWFzIGVrcmFuYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IlByaXNpanVuZ3RhIHByaWUg4oCePHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+4oCcIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IkF0anVuZ3RpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJTa2FtYnV0aXMgcGFnYWxib3MgbnVtZXJpdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IlBhbWlyxaFhdSBhdHJha2luaW1vIHBpZcWhaW7EryI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY1NywxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iVsSXbGlhdSBiYW5keWtpdGUgZGFyIGthcnTEhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJQZXJicmF1a2l0ZSBudW8gdmlyxaFhdXMgxb5lbXluLCBrYWQgacWhZWl0dW3El3RlIGnFoSB2aXNvIGVrcmFubyByZcW+aW1vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJBdGxpa3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iQXBza3JpdGFzIHZhbGFuZMWzIHNsYW5raWtsaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IkFwc2tyaXRhcyBtaW51xI1pxbMgc2xhbmtpa2xpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJQYXNpcmlua2l0ZSB2YWxhbmRhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IlBhc2lyaW5raXRlIG1pbnV0ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+Ik3El25lc2lvIGRpZW7FsyB0aW5rbGVsaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJNZXTFsyBzxIVyYcWhYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlBhc2lyaW5raXRlIG3El25lc8SvIGlyIGRpZW7EhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlBhc2lyaW5raXRlIG1ldHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+IlBhc2lyaW5rdGE6IDx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+IknFoXRyaW50YTogPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCmluZGV4IDAzNmQ1ZDYuLjQ4YjAxYjYgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iSWVyYWtzdGlldCBQVUvCoGtvZHUsIGthcyBzYXN0xIF2IG5vIDjCoHZhaSB2YWlyxIFrIGNpcGFyaWVtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU0ga2FydGUgaXIgYmxvxLfEk3RhIGFyIFBVSyBrb2R1LiBJZXJha3N0aWV0IFBVSyBrb2R1LCBsYWkgdG8gYXRibG/Et8STdHUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iSWVyYWtzdGlldCBQVUsyIGtvZHUsIGxhaSBhdGJsb8S3xJN0dSBTSU0ga2FydGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iTmVpemRldsSBcy4gSWVzcMSTam9qaWV0IFNJTS9SVUlNwqBibG/Et8STxaFhbnUuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iVmFyYXQgbcSTxKNpbsSBdCB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgcmVpemksIHBpcm1zIFNJTcKga2FydGUgdGlrcyBibG/Et8STdGEuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iVmFyYXQgbcSTxKNpbsSBdCB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgcmVpemkoLWVzKSwgcGlybXMgU0lNwqBrYXJ0ZSB0aWtzIGJsb8S3xJN0YS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IkllbsSBa2/FocSBIHp2YW5hIHp2YW7Eq3TEgWphwqBJRCI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4ixLthdWogxKtwYcWhbmlla2FtIGl6dmVpZG90IHNhaXRpIGFyIFZQTiBwYWthbHBvanVtYSBhdWfFocSTasSBIGzEq21lxYZhIHNhc2thcm5pLiBQYXJhc3RhasSBbSBsaWV0b3RuxJNtIHRhcyBuZWthZCBuYXYgbmVwaWVjaWXFoWFtcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4ic2Fpc3TEq3QgYXIgdGFwZXRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLEu2F1aiDEq3BhxaFuaWVrYW0gcGllc2Fpc3TEq3QgdGFwZXRlcyBhdWdzdMSBa8SBIGzEq21lxYZhIGxpZXRvdMSBamEgc2Fza2FybmkuIFBhcmFzdGFqxIFtIGxpZXRvdG7Ek20gdGFzIG5la2FkIG5hdiBuZXBpZWNpZcWhYW1zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4iU2FpdGVzIGl6dmVpZGUgYXIgYXR0xIFsdSBkaXNwbGVqdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IsS7YXVqIMSrcGHFoW5pZWthbSBpenZlaWRvdCBzYWl0aSBhciBhdHTEgWxhIGRpc3BsZWphIGF1Z8WhxJNqxIEgbMSrbWXFhmEgc2Fza2FybmkuIFBhcmFzdGFqxIFtIGxpZXRvdG7Ek20gdGFzIG5la2FkIG5hdiBuZXBpZWNpZcWhYW1zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+InNhaXN0xKt0IGFyIGxvZ3LEq2thIHBha2FscG9qdW11Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IsS7YXVqIMSrcGHFoW5pZWthbSBpenZlaWRvdCBzYWl0aSBhciBsb2dyxKtrYSBwYWthbHBvanVtYSBhdWfFocSTasSBIGzEq21lxYZhIHNhc2thcm5pLiBQYXJhc3RhasSBbSBsaWV0b3RuxJNtIHRhcyBuZWthZCBuYXYgbmVwaWVjaWXFoWFtcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJtaWppZWRhcmJvdGllcyBhciBpZXLEq2NlcyBhZG1pbmlzdHJhdG9ydSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4ixLthdWogbGlldG90bmVpIGxpZXRvdCBTdXJmYWNlRmxpbmdlciB6ZW1hIGzEq21lxYZhIGZ1bmtjaWphcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJsYXPEq3Qga2FkcnUgYnVmZXJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IsS7YXVqIGxpZXRvdG5laSBsYXPEq3Qga2FkcnUgYnVmZXJhIHNhdHVydS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJQaWVrxLx1dmUgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IsS7YXVqIGxpZXRvdG5laSBpem1hbnRvdCBJbnB1dEZsaW5nZXIgemVtYSBsxKttZcWGYSBmdW5rY2lqYXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJXaS1GaSBkaXNwbGVqdSBrb25maWd1csSTxaFhbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLEu2F1aiBsaWV0b3RuZWkga29uZmlndXLEk3QgV2ktRmkgZGlzcGxlanVzIHVuIHZlaWRvdCBzYXZpZW5vanVtdSBhciB0aWVtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iV2ktRmkgZGlzcGxlanUgdmFkxKtiYSI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlDEgXJzbMSTZ8WhYW5hcyB0YXVzdGnFhsWhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iSWV2YWTEq8WhYW5hcyB0YXVzdGnFhsWhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iSXp2xJNsaWV0aWVzIGxpZXRvdG5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iTmV2YXLEk2phIHBhbGFpc3QgbGlldG90bmkgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJLb3DEq2dvdCBhcjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iS29wxKtnb3QgYXIgbGlldG9qdW1wcm9ncmFtbXUgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJCxKtkxIFtcyB0dXJpcy4gUGllc2thcmlldGllcyB0YW0gdW4gdHVyaWV0IHRvIG5vc3BpZXN0dS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iVmVsY2lldCB1eiBhdWfFoXUsIGxhaSB2ZWlrdHUgxaHEgWR1IGRhcmLEq2J1OiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iVmVsY2lldCB1eiBsZWp1LCBsYWkgdmVpa3R1IMWhxIFkdSBkYXJixKtidTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlZlbGNpZXQgcGEga3JlaXNpLCBsYWkgdmVpa3R1IMWhxIFkdSBkYXJixKtidTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJWZWxjaWV0IHBhIGxhYmksIGxhaSB2ZWlrdHUgxaHEgWR1IGRhcmLEq2J1OiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJBdGJsb8S3xJN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJLbHVzdW1zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IlNrYcWGYSBpZXNsxJNndGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Ik1la2zEk3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJWZWxjaWV0IGFyIHBpcmtzdHUsIGxhaSBhdGJsb8S3xJN0dS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUGlldmllbm9qaWV0IGF1c3RpxYZhcywgbGFpIGR6aXJkxJN0dSBwYXJvbGVzIHRhdXN0acWGdSBub3NhdWt1bXVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlB1bmt0cy4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTaXN0xJNtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoIGF1ZGlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJCZXp2YWR1IGF0dMSTbG/FoWFuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJHYXRhdnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJNdWx0aXZpZGVzIGl6ZWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJTYXZpZW5vanVtYSBpenZlaWRlIGFyIGllcsSrY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJFa3LEgW5hIGFwcmFpZGUgdXogaWVyxKtjaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+Ik5vdGllayBpZXLEq8SNdSBtZWtsxJPFoWFuYeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+Ikllc3RhdMSranVtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJBdHZpZW5vdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJOb3RpZWsgbWVrbMSTxaFhbmEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJOb3RpZWsgc2F2aWVub2p1bWEgaXp2ZWlkZS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iUGllZWphbXMiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJQxIFya2zEgWp1bXMgTnIuwqA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPsKgeMKgPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+wqBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBkcm/FoXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkJlenZhZHUgYXR0xJNsb8WhYW5hcyBzYXZpZW5vanVtcyBpciBpenZlaWRvdHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IsWgaXMgZWtyxIFucyB0aWVrIHLEgWTEq3RzIGNpdMSBIGllcsSrY8STLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJFa3LEgW5hIGFwcmFpZMSrxaFhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJOb3RpZWsgc2F2aWVub2p1bWEgaXp2ZWlkZSBhcjogPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iRWtyxIFuYSBhcHJhaWTEq8WhYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJJenZlaWRvdHMgc2F2aWVub2p1bXMgYXI6IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJQxIFydHJhdWt0IHNhdmllbm9qdW11Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLEgHJrxIFydGFzIGl6c2F1a3VtcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IkFpem1pcnN1IGtvbWJpbsSBY2lqdSI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY1NywxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iVsSTbMSBayBtxJPEo2luaWV0IHbEk2xyZWl6LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJMYWkgaXppZXR1IG5vIHBpbG5la3LEgW5hIHJlxb7Eq21hLCB2ZWxjaWV0IG5vIGF1Z8WhYXMgdXogbGVqdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkdhdGF2cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IlN0dW5kdSBhcMS8dmVpZGEgc2zEq2RuaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+Ik1pbsWrxaF1IGFwxLx2ZWlkYSBzbMSrZG5pcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJBdGxhc2lldCBzdHVuZGFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IkF0bGFzaWV0IG1pbsWrdGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iUmXFvsSjaXMgYXIgbcSTbmXFoWEgZGllbsSBbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IkdhZHUgc2FyYWtzdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IkF0bGFzaWV0IG3Ek25lc2kgdW4gZGllbnUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iQXRsYXNpZXQgZ2FkdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iQXRsYXPEq3RzOiA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiB0aWthIGR6xJNzdHMuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCmluZGV4IGZlM2Q3OGIuLjU2OGNhNDggMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiI4LdGBINGG06nTqdC90LPSr9C5INGC0L7QvtC90L7QvtGBINCx0q/RgtGN0YUgUFVLLdCzINCx0LjRh9C90Y0g0q/Sry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iU0lNINC60LDRgNGC0L3RiyBQVUst0YLSr9Cz0LbQuNCz0LTRgdGN0L0uINCi0LDQudC70LDRhSDQsdC+0LsgUFVLINC60L7QtNGL0LMg0LHQuNGH0L3RjSDSr9KvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNJTSDQutCw0YDRgtGL0L0g0YXQsNCw0LvRgtGL0LMg0LHQvtC70LjRg9C70LDRhSDQsdC+0LsgUFVLMi3QsyDQsdC40YfQvdGNINKv0q8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4i0JDQvNC20LjQu9GC0LPSr9C5INCx0L7Qu9C70L7Qviwg0KHQmNCcL9Cg0q7QmNCcINGC0q/Qs9C20Y3RjdCzINC40LTRjdCy0YXQttKv0q/Qu9C90Y0g0q/Sry4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiLQotCw0L3RiyDQodCY0Jwg0YLSr9Cz0LbQuNCz0LTRjdGF0Y3RjdGBINOp0LzQvdOpINGC0LDQvdC0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQvtGA0L7Qu9C00LvQvtCz0L4g0YXQuNC50YUg0LHQvtC70L7QvNC2INKv0LvQtNC70Y3RjS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLQodCY0Jwg0YLSr9Cz0LbQuNCz0LTRjdGF0Y3RjdGBINOp0LzQvdOpINGC0LDQvdC0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQvtGA0L7Qu9C00LvQvtCz0L4g0YXQuNC50YUg0LHQvtC70L7QvNC2INKv0LvQtNC70Y3RjS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+ItCU0YPRg9C00LvQsNCz0LAg0YXQuNC50LPRh9C40LnQvSBJRCI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4i0K3Qt9GN0LzRiNC40LPRhyDQvdGMIFZQTiDSr9C50LvRh9C40LvQs9GN0Y3QvdC40Lkg0LTRjdGN0LQt0YLTqdCy0YjQuNC90LjQuSDQuNC90YLQtdGA0YTQtdC50YHRgtGN0Lkg0YXQvtC70LHQvtGFINCx0L7Qu9C+0LzQttGC0L7QuS4g0K3QvdCz0LjQudC9INCw0L/Qvy3QtCDRiNCw0LDRgNC00LvQsNCz0LDQs9Kv0LkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ItGF0LDQvdGL0L0g0LfRg9GA0LDQs9GC0LDQuSDRhdC+0LvQsdC+0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+ItCt0LfRjdC80YjQuNCz0Ycg0L3RjCDRhdCw0L3Ri9C9INC30YPRgNCw0LPQvdGLINC00Y3RjdC0LdGC06nQstGI0LjQvdC40Lkg0LjQvdGC0LXRgNGE0LXQudGB0YLRjdC5INGF0L7Qu9Cx0L7RhSDQsdC+0LvQvtC80LbRgtC+0LkuINCt0L3Qs9C40LnQvSDQsNC/0L8t0YPRg9C00LDQtCDRiNCw0LDRgNC00LvQsNCz0LDQs9Kv0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLQsNC70YHRi9C9INC00Y3Qu9Cz0Y3RhtGC0Y3QuSDRhdC+0LvQsdC+0LPQtNC+0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLQrdC30Y3QvNGI0LjQs9GH0LjQtCDQsNC70YHRi9C9INC00Y3Qu9Cz0Y3RhiDQtNGN0YUg0LTRjdGN0LQg0LTQsNCy0YXQsNGA0LPRi9C9INC40L3RgtC10YDRhNGN0LnRgdGC0Y3QuSDRhdC+0LvQsdC+0LPQtNC+0YUg0LHQvtC70L7QvNC2INC+0LvQs9C+0L3Qvi4g0K3QvdCz0LjQudC9INCw0L/Qvy3QtCDRiNCw0LDRgNC00LDQs9C00LDRhdCz0q/QuS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLQstC40LTQttC10YIg0q/QudC70YfQuNC70LPRjdGN0YLRjdC5INGF0L7Qu9Cx0L7RhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLQrdC30Y3QvNGI0LjQs9GHINC90Ywg0LLQuNC00LbQtdGCINKv0LnQu9GH0LjQu9Cz0Y3RjdC90LjQuSDQtNGN0Y3QtC3RgtOp0LLRiNC40L3QuNC5INC40L3RgtC10YDRhNC10LnRgdGC0Y3QuSDRhdC+0LvQsdC+0YUg0LHQvtC70L7QvNC20YLQvtC5LiDQrdC90LPQuNC50L0g0LDQv9C/LdC0INGI0LDQsNGA0LTQu9Cw0LPQsNCz0q/QuS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiLRgtOp0YXTqdOp0YDTqdC80LbQuNC50L0g0LDQtNC80LjQvdGC0LDQuSDRhdCw0YDQuNC70YbQsNC9INKv0LnQu9GH0LvRjdGFIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLQkNC/0L8g0L3RjCBTdXJmYWNlRmxpbmdlciDQtNC+0L7QtC3RgtOp0LLRiNC40L3QuNC5INGE0YPQvdC60YbQuNC50LMg0LDRiNC40LPQu9Cw0YUg0LHQvtC70L7QvNC20YLQvtC5LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ItCk0YDRjdC50Lwg0LHRg9GE0LXRgNGN0Y3RgSDRg9C90YjQuNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+ItCQ0L/QvyDQvdGMINGE0YDRjdC50Lwg0LHRg9GE0LXRgNGL0L0g0LrQvtC90YLQtdC90YLRi9CzINGD0L3RiNC40YUg0LHQvtC70L7QvNC20YLQvtC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IklucHV0Rmxpbmdlci3RgiDRhdCw0L3QtNCw0LvRgiDRhdC40LnRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLQkNC/0L8t0LQgU3VyZmFjZUZsaW5nZXIg0LTQvtC+0LQt0YLSr9Cy0YjQvdC40Lkg0YTRg9C90LrRhtGD0YPQtNGL0LMg0LDRiNC40LPQu9Cw0YUg0LHQvtC70L7QvNC2INC+0LvQs9C+0L3Qvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IldpZmkg0LTRjdC70LPRjdGG0LjQudCzINGC0L7RhdC40YDRg9GD0LvQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4i0JDQv9C/INC90YwgV2lmaSDQtNGN0LvQs9GN0YbQuNC50LMg0YLQvtGF0LjRgNGD0YPQu9Cw0YUg0LHQvtC70L7QvSDRhdC+0LvQsdC+0LPQtNC+0YUg0LHQvtC70L7QvNC20YLQvtC5LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iV2lmaSDQtNGN0LvQs9GN0YbQuNC50LMg0YPQtNC40YDQtNCw0YUiPC9zdHJpbmc+CkBAIC03ODMsNyArNzkyLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xZYWhvbyIgbXNnaWQ9IjgyNzE0Mzk0MDg0NjkwMjEyNzMiPiJZYWhvbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xTa3lwZSIgbXNnaWQ9IjkwMTkyOTY3NDQ2MjI4MzI5NTEiPiJTa3lwZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xRcSIgbXNnaWQ9Ijg4ODc0ODQzNzk0OTQxMTE4ODQiPiJRUSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xHb29nbGVUYWxrIiBtc2dpZD0iNDkzOTAyMzIxMTQwMjc3MzA0Ij4i0KbRg9Cz0LvQsNGA0LDQu9GCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEdvb2dsZVRhbGsiIG1zZ2lkPSI0OTM5MDIzMjExNDAyNzczMDQiPiJIYW5nb3V0cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xJY3EiIG1zZ2lkPSIxNTc0ODcwNDMzNjA2NTE3MzE1Ij4iSUNRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEphYmJlciIgbXNnaWQ9IjIyNzk5MTc2MzA4NzU3NzE3MjIiPiJKYWJiZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTmV0TWVldGluZyIgbXNnaWQ9IjgyODc2MjU2NTU5ODY4Mjc5NzEiPiJOZXRNZWV0aW5nIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4i0KjQuNGE0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiLQntGA0YPRg9C70LDRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+ItCQ0L/QvyDRgdC+0L3Qs9C+0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+LdCzINGN0YXQu9Kv0q/Qu9C2INGH0LDQtNGB0LDQvdCz0q/QuSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+ItCl0YPQstCw0LDQu9GG0LDRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+LdGC0LDQuSDRhdGD0LLQsNCw0LvRhtCw0L3QsCDRg9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+ItCR0LDRgNC40YPQu9GL0LMg0LPRg9C70YHRg9GD0LvQvdCwLiDQpdKv0YDRjdGN0LQg0YXSr9C70Y3RjdC90Y0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3QsyDQs9GD0LvRgdGD0YPQu9Cw0YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+INGF0LjQudGFINCx0L7QuyDQtNC+0L7RiCDQs9GD0LvRgdGD0YPQu9Cw0YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+INGF0LjQudGFINC30q/Sr9C90LvSr9KvINCz0YPQu9GB0YPRg9C70LDRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+INGF0LjQudGFINCx0L7QuyDQsdCw0YDRg9GD0L3Qu9GD0YMg0LPRg9C70YHRg9GD0LvQsNGFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i0KLQsNC50LvQsNGFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+ItCa0LDQvNC10YAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i0KfQuNC80Y3RjdCz0q/QuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLQlNGD0YPQvdGD0YPQtCDQuNC00Y3QstGF0YLRjdC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLQpdCw0LnRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+ItCi0q/Qs9C20Y3RjdCzINGC0LDQudC70LDRhSDQsdC+0Lsg0YLQsNGC0L3QsCDRg9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+ItCd0YPRg9GGINKv0LPQvdC40Lkg0LTRg9GD0LTQu9Cw0LPRi9CzINGB0L7QvdGB0L7RhSDQsdC+0Lsg0YfQuNGF0Y3QstGH0LjQudCzINC30LDQu9Cz0LDQvdCwINGD0YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i0KbRjdCzLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+ItCh0LjRgdGC0LXQvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i0JHQu9GO0YLSr9Kv0YIg0LDRg9C00LjQviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i0KPRgtCw0YHQs9Kv0Lkg0LTRjdC70LPRjdGGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+ItCU0YPRg9GB0YHQsNC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i0JzQtdC00LjQsCDQs9Cw0YDQsNC70YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+ItCi06nRhdOp06nRgNOp0LzQttGC0Y3QuSDRhdC+0LvQsdC+0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLQlNGN0LvQs9GN0YbQuNC50LMg0YLTqdGF06nTqdGA06nQvNC2INGA0q/SryDQtNCw0LzQttGD0YPQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLQotOp0YXTqdOp0YDTqdC80LbSr9Kv0LTQuNC50LMg0YXQsNC50LYg0LHQsNC50L3QsOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+ItCi0L7RhdC40YDQs9C+0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i0KHQsNC70LPQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+ItCh0LrQsNC9INGF0LjQudC2INCx0LDQudC90LAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLQpdC+0LvQsdC+0LPQtNC+0LYg0LHQsNC50L3QsC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i0JHQvtC70L7QvNC20YLQvtC5Ijwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4i0JTQsNCy0YXQsNGA0LPQsCAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsINC90LDQudC00LLQsNGA0YLQsNC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLQo9GC0LDRgdCz0q/QuSDQtNGN0LvQs9GN0YYg0YXQvtC70LHQvtCz0LTQvtCyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+ItCt0L3RjSDQtNGN0LvQs9GN0YYg06nTqdGAINGC06nRhdOp06nRgNOp0LzQttC40LnQsyDRhdCw0YDRg9GD0LvQtiDQsdCw0LnQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+ItCU0Y3Qu9Cz0Y3RhtC40LnQsyDQtNCw0LzQttGD0YPQu9C2INCx0LDQudC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4g0YDRg9GDINGF0L7Qu9Cx0L7Qs9C00L7QtiDQsdCw0LnQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4i0JTRjdC70LPRjdGG0LjQudCzINC00LDQvNC20YPRg9C70LYg0LHQsNC50L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+INGA0YPRgyDRhdC+0LvQsdC+0LPQtNGB0L7QvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLQodCw0LvQs9Cw0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+ItCv0LDRgNCw0LvRgtCw0Lkg0LTRg9GD0LTQu9Cw0LPQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+ItCl0Y3RjdCzINC80LDRgNGC0YHQsNC9Ijwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU2LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNGL0L0g0LTQsNGA0LDQsCDQtNCw0YXQuNC9INC+0YDQvtC70LTQvtC90L4g0YPRgyI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLQlNCw0YDQsNCwINC00LDRhdC40L0g0L7RgNC+0LvQtNC+0L3QviDRg9GDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+ItCR0q/RgtGN0L0g0LTRjdC70LPRjdGG0Y3RjdGBINCz0LDRgNCw0YXRi9C9INGC0YPQu9C0INC00Y3RjdGA0Y3RjdGBINC90Ywg0Y3RhdC70Y3QvSDQtNC+0L7RiCDRiNGD0LTRgNCw0L3QsCDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLQkdKv0YLRjdC9INC00Y3Qu9Cz0Y3RhtGN0Y3RgSDQs9Cw0YDQsNGF0YvQvSDRgtGD0LvQtCDQtNGN0Y3RgNGN0Y3RgSDQvdGMINC00L7QvtGIINGI0YPQtNGA0LDQvdCwINGD0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLQlNGD0YPRgdGB0LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+ItCm0LDQsyDQs9Kv0LnQu9Cz0Y3Qs9GHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLQnNC40L3Rg9GCINCz0q/QudC70LPRjdCz0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4i0KbQsNCzINGB0L7QvdCz0L7QvdC+INGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLQnNC40L3Rg9GCINGB0L7QvdCz0L7QvdC+INGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+ItOo0LTRgNKv0q/QtNC40LnQsyDRgdCw0YDQsNCw0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLQltC40LvQuNC50L0g0LbQsNCz0YHQsNCw0LvRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4i0KHQsNGAINCx0L7Qu9C+0L0g06nQtNGA0LjQudCzINGB0L7QvdCz0L7QvdC+INGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLQltC40LvQuNC50LMg0YHQvtC90LPQvtC90L4g0YPRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4g0YHQvtC90LPQvtCz0LTRgdC+0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDRg9GB0YLRgdCw0L0iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKaW5kZXggODhkNzZlNy4uYzQzZGU0ZSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IlRhaXBrYW4gUFVLIHlhbmcgbWVtcHVueWFpIDggbm9tYm9yIGF0YXUgbGViaWggcGFuamFuZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iS2FkIFNJTSBhbmRhIGRpa3VuY2kgUFVLLiBUYWlwa2FuIGtvZCBQVUsgdW50dWsgbWVtYnVrYSBrdW5jaW55YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJUYWlwa2FuIFBVSzIgdW50dWsgbWVueWFoc2VrYXQga2FkIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJUaWRhayBiZXJqYXlhLCBkYXlha2FuIEt1bmNpIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IkFuZGEgbWVtcHVueWFpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwZXJjdWJhYW4gbGFnaSBzZWJlbHVtIFNJTSBkaWt1bmNpLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IkFuZGEgbWVtcHVueWFpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwZXJjdWJhYW4gbGFnaSBzZWJlbHVtIFNJTSBkaWt1bmNpLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSUQgUGVtYW5nZ2lsIE1hc3VrIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJNZW1iZW5hcmthbiBwZW1lZ2FuZyB0ZXJpa2F0IGRlbmdhbiBhbnRhcmEgbXVrYSBwZXJpbmdrYXQgdGVydGluZ2dpIGJhZ2kgcGVya2hpZG1hdGFuIFZwbi4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+InRlcmlrYXQgcGFkYSBrZXJ0YXMgZGluZGluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iTWVtYmVuYXJrYW4gcGVtZWdhbmcgdGVyaWthdCBkZW5nYW4gYW50YXJhIG11a2EgcGVyaW5na2F0IHRlcnRpbmdnaSBiYWdpIGtlcnRhcyBkaW5kaW5nLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+InRlcmlrYXQga2VwYWRhIHBhcGFyYW4gamF1aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIHRlcmlrYXQgZGVuZ2FuIGFudGFyYSBtdWthIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYmFnaSBwYXBhcmFuIGphdWguIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+InRlcmlrYXQga2VwYWRhIHBlcmtoaWRtYXRhbiB3aWRnZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iTWVtYmVuYXJrYW4gcGVtZWdhbmcgdGVyaWthdCBkZW5nYW4gYW50YXJhIG11a2EgcGVyaW5na2F0IHRlcnRpbmdnaSBiYWdpIHBlcmtoaWRtYXRhbiB3aWRnZXQuIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImJlcmludGVyYWtzaSBkZW5nYW4gcGVudGFkYmlyIHBlcmFudGkiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5nZ3VuYWthbiBjaXJpIHBlcmluZ2thdCByZW5kYWggU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4iYmFjYSBwZW5pbWJhbCBiaW5na2FpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIGthbmR1bmdhbiBwZW5pbWJhbCBiaW5na2FpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImFrc2VzIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2d1bmFrYW4gY2lyaSBwZXJpbmdrYXQgcmVuZGFoIElucHV0Rmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ImtvbmZpZ3VyYXNpa2FuIHBhcGFyYW4gV2lmaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5na29uZmlndXJhc2kgZGFuIG1lbnlhbWJ1bmcga2UgcGFwYXJhbiBXaWZpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4ia2F3YWwgcGFwYXJhbiBXaWZpIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJNYXN1ayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlBpbGloIGFwbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IlRpZGFrIGRhcGF0IG1lbGFuY2Fya2FuIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJLb25nc2kgZGVuZ2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IktvbmdzaSBkZW5nYW4gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJQZW1lZ2FuZyBnZWxvbmdzb3IuIFNlbnR1aCAmYW1wOyB0YWhhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iTHVuY3Vya2FuIGtlIGF0YXMgdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ikx1bmN1cmthbiBrZSBiYXdhaCB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iTHVuY3Vya2FuIGtlIGtpcmkgdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJMdW5jdXJrYW4ga2Uga2FuYW4gdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iQnVrYSBrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU2VueWFwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkJ1bnlpIGRpaGlkdXBrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkNhcmlhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IkxlcmV0IHVudHVrIG1lbWJ1a2Ega3VuY2kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IlBhc2FuZ2thbiBzZXQga2VwYWxhIHVudHVrIG1lbmRlbmdhciBrZWt1bmNpIGthdGEgbGFsdWFuIGRpc2VidXRrYW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iVGl0aWsuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJBdWRpbyBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlBhcGFyYW4gd2F5YXJsZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iU2VsZXNhaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik91dHB1dCBtZWRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iU2FtYnVuZyBrZSBwZXJhbnRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iSGFudGFyIHNrcmluIGtlIHBlcmFudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJNZW5jYXJpIHBlcmFudGkuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJUZXRhcGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IlB1dHVza2FuIHNhbWJ1bmdhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJNZW5naW1iYXPigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJNZW55YW1idW5nLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJUZXJzZWRpYSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlRpbmRpaCAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHNlbGFtYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IlBhcGFyYW4gd2F5YXJsZXMgZGlzYW1idW5na2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IlNrcmluIGluaSBkaXR1bmp1a2thbiBwYWRhIHBlcmFudGkgbGFpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJNZW5naGFudGFyIHNrcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iTWVueWFtYnVuZyBrZSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJNZW5naGFudGFyIHNrcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJEaXNhbWJ1bmdrYW4ga2UgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IlB1dHVzIHNhbWJ1bmdhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iUGFuZ2dpbGFuIGtlY2VtYXNhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+Ikx1cGEgQ29yYWsiPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTYsMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iQ3ViYSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYWF0IGxhZ2kiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iQ3ViYSBzZWJlbnRhciBsYWdpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IkxlcmV0IGtlIGJhd2FoIHVudHVrIGtlbHVhciBkYXJpIHNrcmluIHBlbnVoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IkxlcmV0IGtlIGJhd2FoIGRhcmkgYXRhcyB1bnR1ayBrZWx1YXIgZGFyaSBza3JpbiBwZW51aC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IlNlbGVzYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJQZW5nZ2VsYW5nc2FyIGJ1bGF0YW4gamFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJQZW5nZ2VsYW5nc2FyIGJ1bGF0YW4gbWluaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iUGlsaWggamFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iUGlsaWggbWluaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IkdyaWQgaGFyaSBidWxhbmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iU2VuYXJhaSB0YWh1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iUGlsaWggYnVsYW4gZGFuIGhhcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJQaWxpaCB0YWh1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4gZGlwaWxpaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IGRpcGFkYW1rYW4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbXMvZG9ub3R0cmFuc2xhdGUtY2xkci54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1zL2Rvbm90dHJhbnNsYXRlLWNsZHIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA3ZGE1YTcyLi4wMDAwMDAwCi0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbXMvZG9ub3R0cmFuc2xhdGUtY2xkci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1lcmljX2RhdGVfdGVtcGxhdGUiPiIlcy8lcy8lcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1vbnRoX2RheV95ZWFyIj4lZCAlQiAlWTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGltZV9vZl9kYXkiPiUtbDolTTolUyAlcDwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9hbmRfdGltZSI+JS1sOiVNOiVTICVwICVkICViICVZPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWUiPiUyJHMgJTEkczwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1zL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlmZTkzMC4uMDAwMDAwMAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1zL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCi0qKgotKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKioKLSoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoqCi0qKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImJ5dGVTaG9ydCIgbXNnaWQ9IjgzNDA5NzM4OTI3NDIwMTkxMDEiPiJCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtpbG9ieXRlU2hvcnQiIG1zZ2lkPSI1OTczNzg5NzgzNTA0NzcxODc4Ij4iS0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWdhYnl0ZVNob3J0IiBtc2dpZD0iNjM1NTg1MTU3Njc3MDQyODkyMiI+Ik1CIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2lnYWJ5dGVTaG9ydCIgbXNnaWQ9IjMyNTk4ODI0NTUyMTIxOTMyMTQiPiJHQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRlcmFieXRlU2hvcnQiIG1zZ2lkPSIyMzE2MTMwMTgxNTkxODY5NjIiPiJUQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBldGFieXRlU2hvcnQiIG1zZ2lkPSI1NjM3ODE2NjgwMTQ0OTkwMjE5Ij4iUEIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmaWxlU2l6ZVN1ZmZpeCIgbXNnaWQ9IjkxNjQyOTI3OTE1MDA1MzE5NDkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRzPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZsdDtUaWRhayBiZXJ0YWp1ayZndDsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpcyIgbXNnaWQ9Ijc4OTk4Mjk1MTYwNDg4MTMyMzciPiIuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpc190d29fZG90cyIgbXNnaWQ9IjEyMjgwNzg5OTQ4NjYwMzA3MzYiPiLigKUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbXB0eVBob25lTnVtYmVyIiBtc2dpZD0iNzY5NDA2MzA0MjA3OTY3NjUxNyI+IihUaWFkYSBub21ib3IgdGVsZWZvbikiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1bmtub3duTmFtZSIgbXNnaWQ9IjIyNzc1NTY1NDY3NDI3NDY1MjIiPiIoVGlkYWsgZGlrZXRhaHVpKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIgbXNnaWQ9IjI2NjAwMjA5OTAwOTc3MzMwNzciPiJNZWwgc3VhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0TXNpc2RuQWxwaGFUYWciIG1zZ2lkPSIyODUwODg5NzU0OTE5NTg0Njc0Ij4iTVNJU0ROMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+Ik1hc2FsYWggc2FtYnVuZ2FuIGF0YXUga29kIE1NSSB0aWRhayBzYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtbWlGZG5FcnJvciIgbXNnaWQ9IjUyMjQzOTgyMTYzODUzMTY0NzEiPiJQZW5nZW5kYWxpYW4gZGloYWRrYW4ga2VwYWRhIG5vbWJvciBkYWlsYW4gdGV0YXAgc2FoYWphLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkIiBtc2dpZD0iODE0NzI3ODM0NjQxNDcxNDMxNSI+IlBlcmtoaWRtYXRhbiB0ZWxhaCBkaWRheWFrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWRGb3IiIG1zZ2lkPSI2ODU2MjI4MTQwNDUzNDcxMDQxIj4iUGVya2hpZG1hdGFuIGRpZGF5YWthbiB1bnR1azoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRGlzYWJsZWQiIG1zZ2lkPSIxOTM3NTUzMjI2NTkyNTE2NDExIj4iUGVya2hpZG1hdGFuIHRlbGFoIGRpbHVtcHVoa2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VSZWdpc3RlcmVkIiBtc2dpZD0iNjI3NTAxOTA4MjU5ODEwMjQ5MyI+IlBlbmRhZnRhcmFuIGJlcmpheWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVyYXNlZCIgbXNnaWQ9IjEyODg1ODQ2OTUyOTcyMDA5NzIiPiJQZW1hZGFtYW4gYmVyamF5YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZEluY29ycmVjdCIgbXNnaWQ9Ijc2MTIyMDg4Mzk0NTAxMjg3MTUiPiJLYXRhIGxhbHVhbiBzYWxhaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1taUNvbXBsZXRlIiBtc2dpZD0iODIzMjUyNzQ5NTQxMTY5ODM1OSI+Ik1NSSBzZWxlc2FpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhZFBpbiIgbXNnaWQ9IjkwMTUyNzc2NDU1NDY3MTAwMTQiPiJQSU4gbGFtYSB5YW5nIGFuZGEgdGFpcGthbiB0aWRhayBiZXR1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWRQdWsiIG1zZ2lkPSI1NDg3MjU3NjQ3MDgxMTMyMjAxIj4iS29kIFBVSyB5YW5nIGFuZGEgdGFpcGthbiB0aWRhayBiZXR1bC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+IlBJTiB5YW5nIGFuZGEgdGFpcCB0aWRhayBzZXBhZGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQaW4iIG1zZ2lkPSIzODUwMDE4NDQ1MTg3NDc1Mzc3Ij4iVGFpcGthbiBQSU4geWFuZyBtZW5nYW5kdW5naSA0IGhpbmdnYSA4IG5vbWJvci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IlRhaXBrYW4gUFVLIHlhbmcgbWVtcHVueWFpIDggbm9tYm9yIGF0YXUgbGViaWggcGFuamFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iS2FkIFNJTSBhbmRhIGRpa3VuY2kgUFVLLiBUYWlwa2FuIGtvZCBQVUsgdW50dWsgbWVtYnVrYSBrdW5jaW55YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJUYWlwa2FuIFBVSzIgdW50dWsgbWVueWFoc2VrYXQga2FkIFNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IklEIFBlbWFuZ2dpbCBNYXN1ayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNsaXJNbWkiIG1zZ2lkPSI3Nzg0NjczNjczNDQ2ODMzMDkxIj4iSUQgUGVtYW5nZ2lsIEtlbHVhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNmTW1pIiBtc2dpZD0iNTEyMzIxODk4OTE0MTU3MzUxNSI+IlBlbWFqdWFuIHBhbmdnaWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkN3TW1pIiBtc2dpZD0iOTEyOTY3ODA1Njc5NTAxNjg2NyI+IlBhbmdnaWxhbiBtZW51bmdndSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkJhTW1pIiBtc2dpZD0iNDU1MTkzMDY3OTI2NzcwNTgxIj4iU2VrYXRhbiBwYW5nZ2lsYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJQd2RNbWkiIG1zZ2lkPSI3MDQzNzE1Njg3OTA1MjU0MTk5Ij4iVHVrYXIga2F0YSBsYWx1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJQaW5NbWkiIG1zZ2lkPSIzMTEzMTE3NzgwMzYxMTkwMzA0Ij4iUGVudWthcmFuIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNuaXBNbWkiIG1zZ2lkPSIzMTEwNTM0NjgwNTU3ODU3MTYyIj4iTm9tYm9yIHBhbmdnaWxhbiBhZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDbmlyTW1pIiBtc2dpZD0iMzA2MjEwMjEyMTQzMDU0ODczMSI+Ik5vbWJvciBwYW5nZ2lsYW4gdGVyaGFkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iVGhyZWVXQ01taSIgbXNnaWQ9IjkwNTEwNDcxNzAzMjExOTAzNjgiPiJQYW5nZ2lsYW4gdGlnYSBoYWxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUnVhY01taSIgbXNnaWQ9Ijc4Mjc4ODc0NTkxMzgzMDg4ODYiPiJQZW5vbGFrYW4gcGFuZ2dpbGFuIG1lbmdnYW5nZ3UgeWFuZyB0aWRhayBkaWluZ2luaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNuZE1taSIgbXNnaWQ9IjMxMTY0NDYyMzcwODE1NzU4MDgiPiJQZW5naGFudGFyYW4gbm9tYm9yIHBhbmdnaWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkRuZE1taSIgbXNnaWQ9IjEyNjU0Nzg5MzI0MTgzMzQzMzEiPiJKYW5nYW4gZ2FuZ2d1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPbk5leHRDYWxsT24iIG1zZ2lkPSI0Mjk0MTU0MDkxNDU3ODE5MjMiPiJJRCBwZW1hbmdnaWwgc2VjYXJhIGxhbGFpbnlhIGRpdGV0YXBrYW4ga2VwYWRhIHRlcmhhZC4gUGFuZ2dpbGFuIHNldGVydXNueWE6IFRlcmhhZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T25OZXh0Q2FsbE9mZiIgbXNnaWQ9IjMwOTI5MTgwMDYwNzc4NjQ2MjQiPiJJRCBwZW1hbmdnaWwgc2VjYXJhIGxhbGFpbnlhIGRpdGV0YXBrYW4ga2VwYWRhIHRlcmhhZC4gUGFuZ2dpbGFuIHNldGVydXNueWE6IFRpZGFrIHRlcmhhZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPbiIgbXNnaWQ9IjYxNzk0MjUxODI4NTY0MTg0NjUiPiJJRCBwZW1hbmdnaWwgc2VjYXJhIGxhbGFpbnlhIGRpdGV0YXBrYW4ga2VwYWRhIHRpZGFrIHRlcmhhZC4gUGFuZ2dpbGFuIHNldGVydXNueWE6IFRlcmhhZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPZmYiIG1zZ2lkPSIyNTY3OTk4NjMzMTI0NDA4NTUyIj4iSUQgcGVtYW5nZ2lsIHNlY2FyYSBsYWxhaW55YSBkaXRldGFwa2FuIGtlcGFkYSB0aWRhayBkaWhhZGthbi4gUGFuZ2dpbGFuIHNldGVydXNueWE6IFRpZGFrIHRlcmhhZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VOb3RQcm92aXNpb25lZCIgbXNnaWQ9Ijg2MTQ4MzAxODA1MDg2ODY2NjYiPiJQZXJraGlkbWF0YW4geWFuZyB0aWRhayBkaXVudHVra2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IkNMSVJQZXJtYW5lbnQiIG1zZ2lkPSIzMzc3MzcxMTQ1OTI2ODM1NjcxIj4iQW5kYSB0aWRhayBib2xlaCBtZW5ndWJhaCB0ZXRhcGFuIElEIHBlbWFuZ2dpbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkQ2hhbmdlZFRpdGxlIiBtc2dpZD0iNTU5MjE4OTM5ODk1NjE4NzQ5OCI+IkFrc2VzIHRlcmhhZCBkaXViYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25EYXRhIiBtc2dpZD0iODY1Mzc5NDc4NDY5MDA2NTU0MCI+IlBlcmtoaWRtYXRhbiBkYXRhIGRpc2VrYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRW1lcmdlbmN5IiBtc2dpZD0iNjU4MTE2Mzc3OTA3MjgzMzY2NSI+IlBlcmtoaWRtYXRhbiBrZWNlbWFzYW4gZGlzZWthdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Ob3JtYWwiIG1zZ2lkPSI0OTUzODY3MDExMzg5NzUwNjczIj4iUGVya2hpZG1hdGFuIHN1YXJhIGRpc2VrYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsVm9pY2UiIG1zZ2lkPSIzMzk2OTYzNjUyMTA4MTUxMjYwIj4iU2VtdWEgcGVya2hpZG1hdGFuIHN1YXJhIGRpc2VrYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uU21zIiBtc2dpZD0iODMxNDM1MjMyNzQ2MTYzODg5NyI+IlBlcmtoaWRtYXRhbiBTTVMgZGlzZWthdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Wb2ljZURhdGEiIG1zZ2lkPSI5OTY2MzY0ODcxMDYxNzEzMjAiPiJQZXJraGlkbWF0YW4gc3VhcmEvZGF0YSBkaXNla2F0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+IlBlcmtoaWRtYXRhbiBzdWFyYS9TTVMgZGlzZWthdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGwiIG1zZ2lkPSI1NjQzMDI4MjY0NDY2MDkyODIxIj4iU2VtdWEgcGVya2hpZG1hdGFuIHN1YXJhL2RhdGEvU01TIGRpc2VrYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzVm9pY2UiIG1zZ2lkPSIxMjU4MzkzODEyMzM1MjU4MDE5Ij4iU3VhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhIiBtc2dpZD0iODcyNDU2NzgyMDc3OTM3ODkzIj4iRGF0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0ZBWCIgbXNnaWQ9IjU1NjY2MjQ5OTg4NDA0ODY0NzUiPiJGQUtTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzU01TIiBtc2dpZD0iMjAxNTQ2MDM3MzcwMTUyNzQ4OSI+IlNNUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFBc3luYyIgbXNnaWQ9IjQ1MjM0NTQ3ODM0OTg1NTE0NjgiPiJUYWsgc2VnZXJhayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFTeW5jIiBtc2dpZD0iNzUzMDAwMDUxOTY0NjA1NDc3NiI+IlBlbnllZ2VyYWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BhY2tldCIgbXNnaWQ9IjY5OTEwMDY1NTc5OTM0MjM0NTMiPiJCaW5na2lzYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NQQUQiIG1zZ2lkPSIzMjM1MjU5MDg1NjQ4MjcxMDM3Ij4iUEFEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQwIiBtc2dpZD0iNzE3MDMzNTQ3MjE5ODY5NDk0NSI+IlBlbnVuanVrIFBlcmF5YXVhbiBEaWhpZHVwa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxIiBtc2dpZD0iNTMxNDg2MTUxOTc1MjUzODkyMiI+IlBlbnVuanVrIFBlcmF5YXVhbiBEaW1hdGlrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDIiIG1zZ2lkPSI4OTY5OTI5MDQ5MDgxMjY4MTE1Ij4iUGVudW5qdWsgUGVyYXlhdWFuIEJlcmtlbGlwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQzIiBtc2dpZD0iNTE0ODI1NTAyNzA0Mzk0MzMxNyI+IkRpIGx1YXIga2F3YXNhbiBrZWppcmFuYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDQiIG1zZ2lkPSI4ODA4NDU2NjgyNTUwNzk2NTMwIj4iRGkgbHVhciBCYW5ndW5hbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NSIgbXNnaWQ9Ijc2MDQwNjMyNTI4NTAzNTQzNTAiPiJQZXJheWF1YW4gLSBTaXN0ZW0gRGl1dGFtYWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NiIgbXNnaWQ9IjIwNTk0NDA4MjU3ODI4NzE1MTMiPiJQZXJheWF1YW4gLSBTaXN0ZW0gVGVyc2VkaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDciIG1zZ2lkPSI3MTEyMDc4NzI0MDk3MjMzNjA1Ij4iUGVyYXlhdWFuIC0gUmFrYW4gS29uZ3NpIEdhYnVuZ2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ4IiBtc2dpZD0iNTk4OTU2OTc3ODYwNDA4OTI5MSI+IlBlcmF5YXVhbiAtIFJha2FuIEtvbmdzaSBQcmVtaXVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ5IiBtc2dpZD0iNzk2OTI5NjgxMTM1NTE1MjQ5MSI+IlBlcmF5YXVhbiAtIEtlZnVuZ3NpYW4gUGVya2hpZG1hdGFuIFBlbnVoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMCIgbXNnaWQ9IjM5OTI5MDY5OTk4MTUzMTY0MTciPiJQZXJheWF1YW4gLSBLZWZ1bmdzaWFuIFBlcmtoaWRtYXRhbiBTZXBhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDExIiBtc2dpZD0iNDE1NDQ3Njg1NDQyNjkyMDk3MCI+IlNlcGFuZHVrIFBlcmF5YXVhbiBEaWhpZHVwa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMiIgbXNnaWQ9IjExODkwNzExMTk5OTI3MjYzMjAiPiJTZXBhbmR1ayBQZXJheWF1YW4gRGltYXRpa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHRTZWFyY2hpbmciIG1zZ2lkPSI4MzYwMTQxODg1OTcyMjc5OTYzIj4iTWVuY2FyaSBQZXJraGlkbWF0YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlTm90Rm9yd2FyZGVkIiBtc2dpZD0iMTY4MzY4NTg4Mzg0MTI3MjU2MCI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBUaWRhayBkaW1hanVrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlRm9yd2FyZGVkIiBtc2dpZD0iMTMwMjkyMjExNzQ5ODU5MDUyMSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iRElBTElOR19OVU1CRVIiPnsxfTwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlRm9yd2FyZGVkVGltZSIgbXNnaWQ9IjkyMDYyNTE3MzY1MjcwODUyNTYiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IkRJQUxJTkdfTlVNQkVSIj57MX08L3hsaWZmOmc+IHNlbGVwYXMgPHhsaWZmOmcgaWQ9IlRJTUVfREVMQVkiPnsyfTwveGxpZmY6Zz4gc2FhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkIiBtc2dpZD0iNTA3MzIzNzgyNzYyMDE2NjI4NSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBUaWRhayBkaW1hanVrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlUmVnaXN0ZXJlZFRpbWUiIG1zZ2lkPSI2NzgxNjIxOTY0MzIwNjM1MTcyIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IFRpZGFrIGRpbWFqdWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZjQ29tcGxldGUiIG1zZ2lkPSIzMTE4ODQ4MjMwOTY2ODg2NTc1Ij4iS29kIGNpcmkgc2VsZXNhaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmY0Vycm9yIiBtc2dpZD0iMzMyNzU2MDEyNjU4ODUwMDc3NyI+Ik1hc2FsYWggc2FtYnVuZ2FuIGF0YXUga29kIGNpcmkgdGlkYWsgc2FoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvck9rIiBtc2dpZD0iMTE5MTkxOTM3ODA4MzQ3MjIwNCI+Ik9LIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yIiBtc2dpZD0iNzk1NjM5MjUxMTE0NjY5ODUyMiI+IkJlcmxha3UgcmFsYXQgcmFuZ2thaWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiJUaWRhayBtZW5lbXVpIFVSTC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JVbnN1cHBvcnRlZEF1dGhTY2hlbWUiIG1zZ2lkPSI2Mjk5OTgwMjgwNDQyMDc2Nzk5Ij4iU2tlbWEgcGVuZ2VzYWhhbiB0YXBhayB0aWRhayBkaXNva29uZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JBdXRoIiBtc2dpZD0iMTQzNTA2NTYyOTQzODA0NDUzNCI+IlRpZGFrIGRhcGF0IG1lbmdlc2Foa2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclByb3h5QXV0aCIgbXNnaWQ9IjE3ODgyMDcwMTA1NTkwODEzMzEiPiJQZW5nZXNhaGFuIG1lbGFsdWkgcGVsYXlhbiBwcm9rc2kgdGlkYWsgYmVyamF5YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JDb25uZWN0IiBtc2dpZD0iODcxNDI3MzIzNjM2NDY0MDU0OSI+IlRpZGFrIGRhcGF0IG1lbnlhbWJ1bmcga2UgcGVsYXlhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JJTyIgbXNnaWQ9IjIzNDA1NTgxOTc0ODkzMDIxODgiPiJUaWRhayBkYXBhdCBiZXJrb211bmlrYXNpIGRlbmdhbiBwZWxheWFuLiBDdWJhIHNlYmVudGFyIGxhZ2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVGltZW91dCIgbXNnaWQ9IjQ3NDM0MDM3MDM3NjI4ODM5NTQiPiJTYW1idW5nYW4ga2UgcGVsYXlhbiB0YW1hdCBtYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclJlZGlyZWN0TG9vcCIgbXNnaWQ9Ijg2Nzk1OTYwOTAzOTI3Nzk1MTYiPiJIYWxhbWFuIGluaSBtZW5nYW5kdW5naSB0ZXJsYWx1IGJhbnlhayBwZW5ndWJhaGhhbGFhbiBwZWxheWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkU2NoZW1lIiBtc2dpZD0iNTAxNTczMDgxMjkwNjE5MjIwOCI+IlByb3Rva29sIHRpZGFrIGRpc29rb25nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZhaWxlZFNzbEhhbmRzaGFrZSIgbXNnaWQ9Ijk2NTQ5NjA2MDAwNjU4NjQxIj4iVGlkYWsgZGFwYXQgbWV3dWp1ZGthbiBzYW1idW5nYW4gc2VsYW1hdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4iVGlkYWsgZGFwYXQgbWVtYnVrYSBoYWxhbWFuIGtlcmFuYSBVUkwgdGlkYWsgc2FoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZpbGUiIG1zZ2lkPSIyMTcwNzg4NTE1MDUyNTU4Njc2Ij4iVGlkYWsgZGFwYXQgbWVuZ2Frc2VzIGZhaWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZU5vdEZvdW5kIiBtc2dpZD0iNjIwMzg1NjYxMjA0MjY1NTA4NCI+IlRpZGFrIG1lbmVtdWkgZmFpbCB5YW5nIGRpbWludGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVG9vTWFueVJlcXVlc3RzIiBtc2dpZD0iMTIzNTM5NjkyNzA4NzE4ODI1MyI+IlRlcmxhbHUgYmFueWFrIHBlcm1pbnRhYW4gc2VkYW5nIGRpcHJvc2VzLiBDdWJhIHNlYmVudGFyIGxhZ2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODk2NzcxMDAyNTAzNjE2MzgyMiI+IlJhbGF0IGxvZyBtYXN1ayB1bnR1ayA8eGxpZmY6ZyBpZD0iQUNDT1VOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVN5bmMiIG1zZ2lkPSI4MzUzNTIzMDYwMjY5MzM1NjY3Ij4iUGVueWVnZXJha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jTm90aWZpY2F0aW9uVGl0bGUiIG1zZ2lkPSIzOTc3NDMzNDkxOTE5MDE0NTgiPiJQZW55ZWdlcmFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVRvb01hbnlEZWxldGVzTm90aWZpY2F0aW9uRGVzYyIgbXNnaWQ9IjgxMDA5ODE0MzUwODA2OTY0MzEiPiJUZXJsYWx1IGJhbnlhayBwZW1hZGFtYW4gPHhsaWZmOmcgaWQ9IkNPTlRFTlRfVFlQRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY0OTQwMTkyMzQxMDIxNTQ4OTYiPiJTdG9yYW4gdGFibGV0IHBlbnVoLiBQYWRhbWthbiBiZWJlcmFwYSBmYWlsIHVudHVrIG1lbmdvc29uZ2thbiBydWFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ3NTk5OTI4NjY4MDAwMDU0MSI+IlN0b3JhbiB0ZWxlZm9uIHBlbnVoLiBQYWRhbWthbiBiZWJlcmFwYSBmYWlsIHVudHVrIG1lbmdvc29uZ2thbiBydWFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZSIgbXNnaWQ9IjY1NDU2OTYwMDc2MzE0MDQyOTIiPiJTYXlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTQ1MzUxNDIwODY1MjAyODUzIj4iUGlsaWhhbiB0YWJsZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaWFsb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzE5OTE5MDc1NDYzOTg4NjM4Ij4iUGlsaWhhbiB0ZWxlZm9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGUiIG1zZ2lkPSI3MTY3NzAzMzg5ODAyNjE4NjYzIj4iTW9kIHNlbnlhcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InR1cm5fb25fcmFkaW8iIG1zZ2lkPSIzOTEyNzkzMDkyMzM5OTYyMzcxIj4iSGlkdXBrYW4gd2F5YXJsZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0dXJuX29mZl9yYWRpbyIgbXNnaWQ9IjgxOTg3ODQ5NDk5ODcwNjIzNDYiPiJNYXRpa2FuIHdheWFybGVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2xvY2siIG1zZ2lkPSI3OTkwOTQ2NTU0OTYwOTgxNTMiPiJLdW5jaSBza3JpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvd2VyX29mZiIgbXNnaWQ9IjQyNjY2MTQxMDc0MTI4NjUwNDgiPiJNYXRpa2FuIGt1YXNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfc2lsZW50IiBtc2dpZD0iMzE5Mjk4MTYzMDE4NDczMDc4Ij4iUGVuZGVyaW5nIGRpbWF0aWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3ZpYnJhdGUiIG1zZ2lkPSI3MDcyMDQzMzg4NTgxNTUxMzk1Ij4iUGVuZGVyaW5nIGJlcmdldGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfcmluZyIgbXNnaWQ9Ijg1OTIyNDE4MTYxOTQwNzQzNTMiPiJQZW5kZXJpbmcgZGloaWR1cGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX3Byb2dyZXNzIiBtc2dpZD0iMjI4MTA3OTI1NzMyOTk4MTIwMyI+Ik1lbWF0aWthbi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMzODU3NDUxNzk1NTU3MzE0NzAiPiJUYWJsZXQgYW5kYSBha2FuIGRpbWF0aWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQ5NzkyMTc1MjQyODIxMzUzIj4iVGVsZWZvbiBhbmRhIGFrYW4gZGltYXRpa2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm1fcXVlc3Rpb24iIG1zZ2lkPSIyOTA2NTQ0NzY4ODgxMTM2MTgzIj4iQWRha2FoIGFuZGEgbWFodSBtZW51dHVwPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV90aXRsZSIgbXNnaWQ9IjcwNTQ1MDk5MTQ1MDAxNDAzNjEiPiJCdXQgc2VtdWxhIGtlIG1vZCBzZWxhbWF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX2NvbmZpcm0iIG1zZ2lkPSI1NTI5Mzk0NDUwMjc4NDY2OCI+IkFkYWthaCBhbmRhIG1haHUgYnV0IHNlbXVsYSBrZSBkYWxhbSBtb2Qgc2VsYW1hdD8gSW5pIGFrYW4gbWVsdW1wdWhrYW4gc2VtdWEgYXBsaWthc2kgcGloYWsga2V0aWdhIHlhbmcgdGVsYWggYW5kYSBwYXNhbmcuIFNlbXVhIGFwbGlrYXNpIGl0dSBha2FuIGRpcHVsaWhrYW4gc2VtdWxhIGFwYWJpbGEgYW5kYSBtZW1idXQgc2VtdWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiJCYXJ1LWJhcnUgaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+IlRpYWRhIGFwbCB0ZXJiYWhhcnUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDA4NDc3MTQwMDg4MDUzNjY1Ij4iUGlsaWhhbiB0YWJsZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiJQaWxpaGFuIHRlbGVmb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2siIG1zZ2lkPSIyODQ0OTQ1MTkxNzkyMTE5NzEyIj4iS3VuY2kgc2tyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3Bvd2VyX29mZiIgbXNnaWQ9IjQ0NzE4Nzk0NDA4Mzk4Nzk3MjIiPiJNYXRpa2FuIGt1YXNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9idWdfcmVwb3J0IiBtc2dpZD0iNzkzNDAxMDU3ODkyMjMwNDc5OSI+IkxhcG9yYW4gcGVwaWphdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF90aXRsZSIgbXNnaWQ9IjI2Njc0OTQ4MDM3NDI1NDg1MzMiPiJBbWJpbCBsYXBvcmFuIHBlcGlqYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfbWVzc2FnZSIgbXNnaWQ9IjM5ODQ0NzA0ODc1MDM1MDQ1NiI+IkluaSBha2FuIG1lbmd1bXB1bCBtYWtsdW1hdCB0ZW50YW5nIGtlYWRhYW4gcGVyYW50aSBzZW1hc2EgYW5kYSB1bnR1ayBkaWhhbnRhcmthbiBzZWJhZ2FpIG1lc2VqIGUtbWVsLiBQcm9zZXMgaW5pIGFrYW4gbWVuZ2FtYmlsIHNlZGlraXQgbWFzYSBiZXJtdWxhIGRhcmkgbGFwb3JhbiBwZXBpamF0IHNlaGluZ2dhIHNpYXAgdW50dWsgZGloYW50YXI7IGphZGkgZGloYXJhcCBiZXJzYWJhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3RvZ2dsZV9zaWxlbnRfbW9kZSIgbXNnaWQ9IjgyMTk1MjUzNDQyNDY4MTA5MjUiPiJNb2Qgc2VueWFwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vbl9zdGF0dXMiIG1zZ2lkPSIzMjg5ODQxOTM3MDAzNzU4ODA2Ij4iQnVueWkgRElNQVRJS0FOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iMTUwNjA0NjU3OTE3NzA2NjQxOSI+IkJ1bnlpIERJSElEVVBLQU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc190b2dnbGVfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjU4ODQzMzAzMDY5MjYzMDc0NTYiPiJNb2QgcGVzYXdhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb25fc3RhdHVzIiBtc2dpZD0iMjcxOTU1Nzk4MjYwODkxOTc1MCI+Ik1vZCBQZXNhd2F0IERJSElEVVBLQU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSI1MDc1MDcwNDQyODU0NDkwMjk2Ij4iTW9kIFBlc2F3YXQgRElNQVRJS0FOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iTW9kIHNlbGFtYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJTaXN0ZW0gQW5kcm9pZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jb3N0TW9uZXkiIG1zZ2lkPSI1NDI5ODA4MjE3ODYxNDYwNDAxIj4iUGVya2hpZG1hdGFuIHlhbmcgYW5kYSBwZXJsdSBiYXlhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY29zdE1vbmV5IiBtc2dpZD0iMzI5MzMwMTkwMzQwOTg2OTQ5NSI+Ik1lbGFrdWthbiBwZXJrYXJhIHlhbmcgYm9sZWggbWVuZ2VuYWthbiBiYXlhcmFuIGtlcGFkYSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9tZXNzYWdlcyIgbXNnaWQ9Ijc1MjEyNDkxNDg0NDU0NTY2NjIiPiJNZXNlaiBhbmRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19tZXNzYWdlcyIgbXNnaWQ9Ijc4MjE5OTkwNzEwMDM2OTkyMzYiPiJNZW1iYWNhIGRhbiBtZW51bGlzIFNNUywgZS1tZWwsIGRhbiBtZXNlaiBsYWluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9wZXJzb25hbEluZm8iIG1zZ2lkPSIzNTE5MTYzMTQxMDcwNTMzNDc0Ij4iTWFrbHVtYXQgcGVyaWJhZGkgYW5kYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfcGVyc29uYWxJbmZvIiBtc2dpZD0iODQyNjQ1MzEyOTc4ODg2MTMzOCI+IkFrc2VzIGxhbmdzdW5nIGtlIG1ha2x1bWF0IHRlbnRhbmcgYW5kYSwgeWFuZyBkaXNpbXBhbiBwYWRhIGthZCBrZW5hbGFuIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NvY2lhbEluZm8iIG1zZ2lkPSI1Nzk5MDk2NjIzNDEyMDQzNzkxIj4iTWFrbHVtYXQgc29zaWFsIGFuZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NvY2lhbEluZm8iIG1zZ2lkPSI3MTI5ODQyNDU3NjExNjQzNDkzIj4iQWtzZXMgbGFuZ3N1bmcga2UgbWFrbHVtYXQgdGVudGFuZyBrZW5hbGFuIGFuZGEgZGFuIHNhbWJ1bmdhbiBzb3NpYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2xvY2F0aW9uIiBtc2dpZD0iNjM1MTQ5NzQyNDM2NjkyMDQ5Ij4iTG9rYXNpIGFuZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2xvY2F0aW9uIiBtc2dpZD0iNTcwNDY3OTc2MzEyNDE3MDEwMCI+IlBhbnRhdSBsb2thc2kgZml6aWthbCBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9uZXR3b3JrIiBtc2dpZD0iNTgwODk4MzM3NzcyNzEwOTgzMSI+IktvbXVuaWthc2kgcmFuZ2thaWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19uZXR3b3JrIiBtc2dpZD0iNDQ3ODI5OTQxMzI0MTg2MTk4NyI+IkFrc2VzIHBlbGJhZ2FpIGNpcmkgcmFuZ2thaWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iMTU4NTQwMzU0NDE2MjEyODEwOSI+IkJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYmx1ZXRvb3RoTmV0d29yayIgbXNnaWQ9IjU2MjUyODg1NzcxNjQyODIzOTEiPiJBa3NlcyBwZXJhbnRpIGRhbiByYW5na2FpYW4gbWVsYWx1aSBCbHVldG9vdGguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI4MzI5MjYxNjcwMTUxODcxMjM1Ij4iVGV0YXBhbiBBdWRpbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjI2NDE1MTU0MDMzNDc1NjgxMzAiPiJUdWthciB0ZXRhcGFuIGF1ZGlvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hZmZlY3RzQmF0dGVyeSIgbXNnaWQ9IjYyMDkyNDY2NTM0MjQ3OTgwMzMiPiJNZW5qZWphc2thbiBCYXRlcmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjQ0MTI3NTMyMDYzODkxNjk0NyI+Ikd1bmFrYW4gY2lyaSB5YW5nIGJvbGVoIG1lbmdoYWJpc2thbiBiYXRlcmkgZGVuZ2FuIGNlcGF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jYWxlbmRhciIgbXNnaWQ9IjU4NjM1MDg0Mzc3ODM2ODM5MDIiPiJLYWxlbmRhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FsZW5kYXIiIG1zZ2lkPSI1Nzc3NTM0MzE2OTgyMTg0NDE2Ij4iQWtzZXMgbGFuZ3N1bmcga2Uga2FsZW5kYXIgZGFuIGFjYXJhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaWN0aW9uYXJ5IiBtc2dpZD0iNDE0ODU5NzEyODg0MzY0MTM3OSI+IkJhY2EgS2FtdXMgUGVuZ2d1bmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RpY3Rpb25hcnkiIG1zZ2lkPSI3OTIxMTY2MzU1OTY0NzY0NDkwIj4iQmFjYSBwZXJrYXRhYW4gZGkgZGFsYW0ga2FtdXMgcGVuZ2d1bmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgwOTAyMzc3MDI0MzI1NzY3ODgiPiJUdWxpcyBLYW11cyBQZW5nZ3VuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iMjcxMTU2MTk5NDQ5NzM2MTY0NiI+IlRhbWJhaCBwZXJrYXRhYW4ga2Uga2FtdXMgcGVuZ2d1bmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2Jvb2ttYXJrcyIgbXNnaWQ9IjE5NDk1MTk2NzMxMDM5NjgyMjkiPiJQZW5hbmRhIGhhbGFtYW4gZGFuIFNlamFyYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Jvb2ttYXJrcyIgbXNnaWQ9IjQxNjk3NzE2MDYyNTc5NjMwMjgiPiJBa3NlcyBsYW5nc3VuZyBrZSBwZW5hbmRhIGhhbGFtYW4gZGFuIHNlamFyYWggcGVueWVtYWsgaW1iYXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmljZUFsYXJtcyIgbXNnaWQ9IjYxMTc3MDQ2Mjk3Mjg4MjQxMDEiPiJQZW5nZ2VyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2aWNlQWxhcm1zIiBtc2dpZD0iNDc2OTM1NjM2MjI1MTY0MTE3NSI+IlRldGFwa2FuIGphbSBwZW5nZ2VyYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfdm9pY2VtYWlsIiBtc2dpZD0iNDE2MjIzNzE0NTAyNzU5MjEzMyI+Ik1lbCBzdWFyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfdm9pY2VtYWlsIiBtc2dpZD0iMjQ5ODQwMzk2OTg2Mjk1MTM5MyI+IkFrc2VzIGxhbmdzdW5nIGtlIG1lbCBzdWFyYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWljcm9waG9uZSIgbXNnaWQ9IjE3MTUzOTkwMDI1MDA0MzQ2NCI+Ik1pa3JvZm9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19taWNyb3Bob25lIiBtc2dpZD0iNzEwNjYxODI4NjkwNTczODQwOCI+IkFrc2VzIGxhbmdzdW5nIGtlIG1pa3JvZm9uIHVudHVrIG1lcmFrYW0gYXVkaW8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2NhbWVyYSIgbXNnaWQ9IjQ4MjAzNzI0OTU4OTQ1ODY2MTUiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2NhbWVyYSIgbXNnaWQ9IjI5MzM2NjczNzIyODk1Njc3MTQiPiJBa3NlcyBsYW5nc3VuZyBrZSBrYW1lcmEgdW50dWsgbWVyYWthbSBpbWVqIGF0YXUgdmlkZW8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NjcmVlbmxvY2siIG1zZ2lkPSI4Mjc1NTAwMTczMzMwNzE4MTY4Ij4iS3VuY2kgc2tyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NjcmVlbmxvY2siIG1zZ2lkPSI3MDY3NDk3MTI4OTI1NDk5NDAxIj4iS2V1cGF5YWFuIHVudHVrIG1lbXBlbmdhcnVoaSBrZWxha3VhbiBza3JpbiBrdW5jaSBwYWRhIHBlcmFudGkgYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXBwSW5mbyIgbXNnaWQ9IjgwMjg3ODk3NjI2MzQxNDc3MjUiPiJNYWtsdW1hdCBhcGxpa2FzaSBhbmRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hcHBJbmZvIiBtc2dpZD0iMzk1MDM3ODUzODA0OTYyNTkwNyI+IktldXBheWFhbiB1bnR1ayBtZW1wZW5nYXJ1aGkgdGluZ2thaCBsYWt1IGFwbGlrYXNpIGxhaW4gcGFkYSBwZXJhbnRpIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dhbGxwYXBlciIgbXNnaWQ9IjM4NTAyODAxNTgwNDExNzU5OTgiPiJLZXJ0YXMgZGluZGluZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd2FsbHBhcGVyIiBtc2dpZD0iNTYzMDQxNzg1NDc1MDU0MDE1NCI+IlR1a2FyIHRldGFwYW4ga2VydGFzIGRpbmRpbmcgcGVyYW50aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3lzdGVtQ2xvY2siIG1zZ2lkPSI0MDY1MzU3NTkyMzY2MTI5OTIiPiJKYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbUNsb2NrIiBtc2dpZD0iMzk0NDM1OTgzMzYyNDA5NDk5MiI+IlR1a2FyIG1hc2EgcGVyYW50aSBhdGF1IHpvbiBtYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdGF0dXNCYXIiIG1zZ2lkPSIyMDk1ODYyNTY4MTEzOTQ1Mzk4Ij4iQmFyIFN0YXR1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iNjI0MjU5MzQzMjIyNjgwNzE3MSI+IlR1a2FyIHRldGFwYW4gYmFyIHN0YXR1cyBwZXJhbnRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeW5jU2V0dGluZ3MiIG1zZ2lkPSIzMzQxOTkwOTg2MTQ3ODI2NTQxIj4iVGV0YXBhbiBQZW55ZWdlcmFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5bmNTZXR0aW5ncyIgbXNnaWQ9Ijc2MDMxOTUyNjUxMjkwMzE3OTciPiJBa3NlcyBrZSB0ZXRhcGFuIHNlZ2VyYWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWNjb3VudHMiIG1zZ2lkPSIzMzU5NjQ2MjkxMTI1MzI1NTE5Ij4iQWthdW4gYW5kYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWNjb3VudHMiIG1zZ2lkPSI0OTQ4NzMyNjQxODI3MDkxMzEyIj4iQWtzZXMgYWthdW4geWFuZyB0ZXJzZWRpYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfaGFyZHdhcmVDb250cm9scyIgbXNnaWQ9Ijc5OTgyMTQ5Njg3OTE1OTkzMjYiPiJLYXdhbGFuIHBlcmtha2FzYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2hhcmR3YXJlQ29udHJvbHMiIG1zZ2lkPSI0MzU3MDU3ODYxMjI1NDYyNzAyIj4iQWtzZXMgbGFuZ3N1bmcga2VwYWRhIHBlcmtha2FzYW4gcGFkYSBzZXQgdGFuZ2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9waG9uZUNhbGxzIiBtc2dpZD0iOTA2NzE3Mzk4ODMyNTg2NTkyMyI+IlBhbmdnaWxhbiB0ZWxlZm9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19waG9uZUNhbGxzIiBtc2dpZD0iNzQ4OTcwMTYyMDQ0NjE4Mzc3MCI+Ik1lbWFudGF1LCBtZXJla29ka2FuIGRhbiBtZW1wcm9zZXMgcGFuZ2dpbGFuIHRlbGVmb24uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbVRvb2xzIiBtc2dpZD0iNDY1MjE5MTY0NDA4MjcxNDA0OCI+IkFsYXRhbiBzaXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbVRvb2xzIiBtc2dpZD0iODE2MjEwMjYwMjE5MDczNDMwNSI+IkFrc2VzIGRhbiBrYXdhbGFuIHBlcmluZ2thdCBsZWJpaCByZW5kYWggYmFnaSBzaXN0ZW0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSIzNDQ2MTY0NTg0NzEwNTk2NTEzIj4iQWxhdGFuIHBlbWJhbmd1bmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iNzA1ODgyODAzMjM1ODE0MjAxOCI+IkNpcmkgaGFueWEgZGlwZXJsdWthbiB1bnR1ayBwZW1iYW5ndW4gYXBsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaXNwbGF5IiBtc2dpZD0iNDI3OTkwOTY3NjAzNjQwMjYzNiI+IkFwbGlrYXNpIFVJIExhaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Rpc3BsYXkiIG1zZ2lkPSI2MDUxMDAyMDMxOTMzMDEzNzE0Ij4iTWVtcGVuZ2FydWhpIFVJIGFwbGlrYXNpIGxhaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0b3JhZ2UiIG1zZ2lkPSIxOTcxMTE4NzcwNTQ2MzM2OTY2Ij4iU3RvcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc0NDIzMTg1MDI0NDY4NzQ5OTkiPiJBa3NlcyBzdG9yYW4gVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiJBa3NlcyBrYWQgU0QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiJDaXJpIGtlYm9sZWhha3Nlc2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI0MjA1MTk2ODgxNjc4MTQ0MzM1Ij4iQ2lyaSB5YW5nIGJvbGVoIGRpbWludGEgb2xlaCB0ZWtub2xvZ2kgYmFudHVhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJldHJpZXZlV2luZG93Q29udGVudCIgbXNnaWQ9IjM5MDE3MTc5MzY5MzAxNzAzMjAiPiJEYXBhdGthbiBrZW1iYWxpIGthbmR1bmdhbiB0ZXRpbmdrYXAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzc3MjIyNTAwODYwNTMxMDY3MiI+IlBlcmlrc2Ega2FuZHVuZ2FuIHRldGluZ2thcCB5YW5nIGJlcmludGVyYWtzaSBkZW5nYW4gYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iMzEwODcyMzM2NDY3NjY2NzMyMCI+IkhpZHVwa2FuIEplbGFqYWggbWVsYWx1aSBTZW50dWhhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjU4MDA1NTI1MTY3NzkyNDkzNTYiPiJJdGVtIHlhbmcgZGlzZW50dWggYWthbiBkaXNlYnV0IGRlbmdhbiBrdWF0IGRhbiBza3JpbiBib2xlaCBkaWplbGFqYWggbWVuZ2d1bmFrYW4gZ2VyYWsgaXN5YXJhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNzM5ODgxNzY2NTIyNTk0MDczIj4iSGlkdXBrYW4ga2Vib2xlaGNhcGFpYW4gd2ViIGRpcGVydGluZ2thdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iNzg4MTA2Mzk2MTUwNzUxMTc2NSI+IlNrcmlwIGJvbGVoIGRpcGFzYW5nIHVudHVrIG1lbmphZGlrYW4ga2FuZHVuZ2FuIGFwbCBsZWJpaCBtdWRhaCBkaWFrc2VzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9IjIxMDM0NDAzOTE5MDI0MTIxNzQiPiJQZXJoYXRpa2FuIHRla3MgeWFuZyBhbmRhIHRhaXAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJCZXJzZXJ0YSBkYXRhIHBlcmliYWRpIHNlcGVydGkgbm9tYm9yIGthZCBrcmVkaXQgZGFuIGthdGEgbGFsdWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+Imx1bXB1aGthbiBhdGF1IHViYWggc3VhaSBiYXIgc3RhdHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+Ik1lbWJlbmFya2FuIGFwbCBtZWx1bXB1aGthbiBiYXIgc3RhdHVzIGF0YXUgbWVuYW1iYWggZGFuIG1lbmdhbGloIGtlbHVhciBpa29uIHNpc3RlbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MjQ3MjgxOTExMzg3OTMxNDg1Ij4iYmFyIHN0YXR1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MTYxMTM2NjA3OTU5NzYwNjAiPiJNZW1iZW5hcmthbiBhcGwgbWVuamFkaSBiYXIgc3RhdHVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iMTE0ODE5ODc4NTkzNzQ4OTI2NCI+ImtlbWJhbmdrYW4vcnVudHVoa2FuIGJhciBzdGF0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSI2OTE3NTQ5NDM3MTI5NDAxMTMyIj4iTWVtYmVuYXJrYW4gYXBsIG1lbmdlbWJhbmdrYW4gYXRhdSBtZXJ1bnR1aGthbiBiYXIgc3RhdHVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSIzOTA2MDA3ODMxMTkyOTkwOTQ2Ij4idHVrYXIgbGFsdWFuIHBhbmdnaWxhbiBrZWx1YXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjUzMzEzMTg5MzE5Mzc0MDIwNDAiPiJNZW1iZW5hcmthbiBhcGwgbWVtcHJvc2VzIHBhbmdnaWxhbiBrZWx1YXIgZGFuIG1lbnVrYXIgbm9tYm9yIHlhbmcgcGVybHUgZGlkYWlsLiBLZWJlbmFyYW4gaW5pIG1lbWJvbGVoa2FuIGFwbCBtZW1hbnRhdSwgbWVuZ2FsaWggYXRhdSBtZW5naGFsYW5nIHBhbmdnaWxhbiBrZWx1YXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlU21zIiBtc2dpZD0iODY3MzQ3MTc2ODk0Nzg5NTA4MiI+InRlcmltYSBtZXNlaiB0ZWtzIChTTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiJNZW1iZW5hcmthbiBhcGwgbWVuZXJpbWEgZGFuIG1lbXByb3NlcyBtZXNlaiBTTVMuIEluaSBiZXJtYWtuYSBhcGwgYm9sZWggbWVtYW50YXUgYXRhdSBtZW1hZGFtIG1lc2VqIHlhbmcgZGloYW50YXIga2UgcGVyYW50aSBhbmRhIHRhbnBhIG1lbnVuanVra2FubnlhIGtlcGFkYSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZU1tcyIgbXNnaWQ9IjE4MjEzMTczNDQ2NjgyNTcwOTgiPiJ0ZXJpbWEgbWVzZWogdGVrcyAoTU1TKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVNbXMiIG1zZ2lkPSI1MzMwMTk0MzcyNjMyMTIyNjAiPiJNZW1iZW5hcmthbiBhcGwgbWVuZXJpbWEgZGFuIG1lbXByb3NlcyBtZXNlaiBNTVMuIEluaSBiZXJtYWtuYSBhcGwgYm9sZWggbWVtYW50YXUgYXRhdSBtZW1hZGFtIG1lc2VqIHlhbmcgZGloYW50YXIga2UgcGVyYW50aSBhbmRhIHRhbnBhIG1lbnVuanVra2FubnlhIGtlcGFkYSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9IjE4MDM0Nzc2NjA4NDYyODgwODkiPiJ0ZXJpbWEgc2lhcmFuIGtlY2VtYXNhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSI4NDg1MjQwNzAyNjI0MzE5NzQiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZXJpbWEgZGFuIG1lbXByb3NlcyBtZXNlaiBzaWFyYW4ga2VjZW1hc2FuLiBLZWJlbmFyYW4gaW5pIGhhbnlhIHRlcnNlZGlhIGtlcGFkYSBhcGwgc2lzdGVtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iMTU5ODMyODg0MzYxOTY0NjE2NiI+ImJhY2EgbWVzZWogc2lhcmFuIHNlbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiJNZW1ib2xlaGthbiBhcGwgbWVtYmFjYSBtZXNlaiBzaWFyYW4gc2VsIHlhbmcgZGl0ZXJpbWEgb2xlaCBwZXJhbnRpIGFuZGEuIElzeWFyYXQgc2lhcmFuIHNlbCBkaWhhbnRhciBkaSBiZWJlcmFwYSBsb2thc2kgdW50dWsgbWVtYmVyaSBhbWFyYW4ga2VwYWRhIGFuZGEgdGVudGFuZyBzaXR1YXNpIGtlY2VtYXNhbi4gQXBsIGhhc2FkIGJvbGVoIG1lbmdnYW5nZ3UgcHJlc3Rhc2kgYXRhdSBvcGVyYXNpIHBlcmFudGkgYW5kYSBhcGFiaWxhIHNpYXJhbiBzZWwga2VjZW1hc2FuIGRpdGVyaW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFNtcyIgbXNnaWQ9IjU2MDA4MzA2MTIxNDc2NzE1MjkiPiJoYW50YXIgbWVzZWogU01TIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFNtcyIgbXNnaWQ9IjcwOTQ3MjkyOTgyMDQ5Mzc2NjciPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2hhbnRhciBtZXNlaiBTTVMuIEluaSBib2xlaCBtZW55ZWJhYmthbiBjYWogZGkgbHVhciBqYW5na2Fhbi4gQXBsIGhhc2FkIGJvbGVoIG1lbWJ1YXQgYW5kYSBrZXJ1Z2lhbiB3YW5nIGRlbmdhbiBtZW5naGFudGFyIG1lc2VqIHRhbnBhIHBlbmdlc2FoYW4gYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI4NzEzODg5MTA1MzA1OTQzMjAwIj4iYWNhcmEgaGFudGFyIHJlc3BvbnMtbWVsYWx1aS1tZXNlaiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI3MTA3NjQ4NTQ4NDY4Nzc4NzM0Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmdoYW50YXIgcGVybWludGFhbiBrZXBhZGEgYXBsIHBlcm1lc2VqYW4gbGFpbiB1bnR1ayBtZW5nZW5kYWxpa2FuIGFjYXJhIHJlc3BvbnMtbWVsYWx1aS1tZXNlaiB1bnR1ayBwYW5nZ2lsYW4gbWFzdWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU21zIiBtc2dpZD0iODc0NTA4NjU3MjIxMzI3MDQ4MCI+ImJhY2EgbWVzZWogdGVrcyBhbmRhIChTTVMgYXRhdSBNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjQ2Nzk4MTU0ODY4NDczNTUyMiI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIG1lc2VqIFNNUyB5YW5nIHRlcnNpbXBhbiBwYWRhIHRhYmxldCBhdGF1IGthZCBTSU0gYW5kYS4gSW5pIG1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIHNlbXVhIG1lc2VqIFNNUywgdGFucGEgbWVuZ2lyYSBrYW5kdW5nYW4gYXRhdSBrZXJhaHNpYWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjk1OTY3NTMzNDU3MjQwNTUwIj4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2EgbWVzZWogU01TIHlhbmcgdGVyc2ltcGFuIHBhZGEgdGVsZWZvbiBhdGF1IGthZCBTSU0gYW5kYS4gSW5pIG1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIHNlbXVhIG1lc2VqIFNNUywgdGFucGEgbWVuZ2lyYSBrYW5kdW5nYW4gYXRhdSBrZXJhaHNpYWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTbXMiIG1zZ2lkPSIzMjE2OTUwNDcyNjM2MjE0Nzc0Ij4iZWRpdCBtZXNlaiB0ZWtzIChTTVMgYXRhdSBNTVMpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVudWxpcyBrZXBhZGEgbWVzZWogU01TIHlhbmcgZGlzaW1wYW4gcGFkYSB0YWJsZXQgYXRhdSBrYWQgU0lNIGFuZGEuIEFwbCBoYXNhZCBib2xlaCBtZW1hZGFtIG1lc2VqIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjY4NjY4NzA5MDUyMzI4NTY3Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnVsaXMga2VwYWRhIG1lc2VqIFNNUyB5YW5nIGRpc2ltcGFuIHBhZGEgdGVsZWZvbiBhdGF1IGthZCBTSU0gYW5kYS4gQXBsIGhhc2FkIGJvbGVoIG1lbWFkYW0gbWVzZWogYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+InRlcmltYSBtZXNlaiB0ZWtzIChXQVApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiJNZW1iZW5hcmthbiBhcGwgbWVuZXJpbWEgZGFuIG1lbXByb3NlcyBtZXNlaiBXQVAuIEtlYmVuYXJhbiBpbmkgdGVybWFzdWsga2V1cGF5YWFuIHVudHVrIG1lbWFudGF1IGF0YXUgbWVtYWRhbSBtZXNlaiB5YW5nIGRpaGFudGFyIGtlcGFkYSBhbmRhIHRhbnBhIG1lbnVuanVra2FubnlhIGtlcGFkYSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4iZGFwYXRrYW4gc2VtdWxhIGFwbCB5YW5nIHNlZGFuZyBkaWphbGFua2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VGFza3MiIG1zZ2lkPSI3NDU0MjE1OTk1ODQ3NjU4MTAyIj4iTWVtYmVuYXJrYW4gYXBsIG1lbmdhbWJpbCBtYWtsdW1hdCB0ZW50YW5nIHR1Z2FzYW4geWFuZyBzZWRhbmcgZGFuIGJhcnUgYmVyamFsYW4uIEluaSBib2xlaCBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZW11aSBtYWtsdW1hdCB0ZW50YW5nIGFwbCBtYW5hIHlhbmcgZGlndW5ha2FuIHBhZGEgcGVyYW50aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSI3MTE0MjU1MjgxOTQ0MjExNjgyIj4iYmVyaW50ZXJha3NpIHNlc2FtYSBwZW5nZ3VuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSIzNjQ2NzA5NjM2MjMzODU3ODYiPiJNZW1iZW5hcmthbiBhcGwgbWVsYWt1a2FuIHRpbmRha2FuIG1lcmVudGFzaSBwZW5nZ3VuYSBiZXJiZXphIHBhZGEgcGVyYW50aS4gQXBsIGhhc2FkIGJvbGVoIG1lbmdndW5ha2FuIGluaSB1bnR1ayBtZWxhbmdnYXIgcGVybGluZHVuZ2FuIGFudGFyYSBwZW5nZ3VuYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMjU2NzczNDI4NTU0NTA3NDEwNSI+Imxlc2VuIHBlbnVoIHVudHVrIGJlcmludGVyYWtzaSBzZXNhbWEgcGVuZ2d1bmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjM3Njg0MTM2ODM5NTUwMjM2NiI+Ik1lbWJlbmFya2FuIHNlbXVhIGludGVyYWtzaSB5YW5nIG11bmdraW4gc2VzYW1hIHBlbmdndW5hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNlcnMiIG1zZ2lkPSIxNjc2MTUwOTExNjcyMjgyNDI4Ij4idXJ1cyBwZW5nZ3VuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzZXJzIiBtc2dpZD0iODQwOTMwNjY2NzY0NTM1NTYzOCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ndXJ1cyBwZW5nZ3VuYSBwYWRhIHBlcmFudGkgaW5pLCB0ZXJtYXN1ayBwZXJ0YW55YWFuLCBwZW1idWF0YW4gZGFuIHBlbWFkYW1hbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4iZGFwYXRrYW4gYnV0aXJhbiBhcGwgeWFuZyBiZXJqYWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSIxNTM4MjQ3NDE0NDA3MTc1OTkiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZGFwYXRrYW4gbWFrbHVtYXQgdGVycGVyaW5jaSB0ZW50YW5nIHR1Z2FzYW4geWFuZyBzZWRhbmcgZGFuIGJhcnUgYmVyamFsYW4uIEFwbCBoYXNhZCBib2xlaCBtZW5kYXBhdCBtYWtsdW1hdCBwZXJpYmFkaSB0ZW50YW5nIGFwbCBsYWluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVvcmRlclRhc2tzIiBtc2dpZD0iMjAxODU3NTUyNjkzNDQyMjc3OSI+InN1c3VuIHNlbXVsYSB0ZXJ0aWIgYXBsIHlhbmcgZGlqYWxhbmthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9Ijc3MzQyMTc3NTQ4Nzc0MzkzNTEiPiJNZW1iZW5hcmthbiBhcGwgbWVtaW5kYWhrYW4gdHVnYXNhbiBrZSBsYXRhciBkZXBhbiBkYW4gbGF0YXIgYmVsYWthbmcuIEFwbCBib2xlaCBtZWxha3VrYW4gaW5pIHRhbnBhIGlucHV0IGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW1vdmVUYXNrcyIgbXNnaWQ9IjY4MjE1MTM0MDE4NzAzNzc0MDMiPiJoZW50aWthbiBhcGwgeWFuZyBzZWRhbmcgZGlqYWxhbmthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlbW92ZVRhc2tzIiBtc2dpZD0iMTM5NDcxNDM1MjA2MjYzNTQ5MyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5nYWxpaCBrZWx1YXIgdHVnYXNhbiBkYW4gbWVsdXB1c2thbiBhcGxueWEuIEFwbCBoYXNhZCBib2xlaCBtZW5nZ2FuZ2d1IHRpbmdrYWggbGFrdSBhcGwgbGFpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iNzM5MTE5MTM4NDAyNzMwMzA2NSI+InVydXMgdGluZGFuYW4gYWt0aXZpdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY3Rpdml0eVN0YWNrcyIgbXNnaWQ9IjE2MTU4ODE5MzMwMzQwODQ0NDAiPiJNZW1iZW5hcmthbiBhcGwgbWVuYW1iYWgsIG1lbmdhbGloIGtlbHVhciBkYW4gbWVuZ3ViYWggc3VhaSB0aW5kYW5hbiBha3Rpdml0aSB0ZW1wYXQgYXBsIGxhaW4gYmVyamFsYW4uIEFwbCBoYXNhZCBib2xlaCBtZW5nZ2FuZ2d1IHRpbmdrYWggbGFrdSBhcGwgbGFpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSIyOTE4NzY4MjM4MDQ1MjA2NDU2Ij4ibXVsYWthbiBzZWJhcmFuZyBha3Rpdml0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSI5OTc4MjM2OTUzNDM1ODQwMDEiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtdWxha2FuIGFwYS1hcGEgYWt0aXZpdGksIHRhbnBhIG1lbmdpcmEgcGVybGluZHVuZ2FuIGtlYmVuYXJhbiBhdGF1IGtlYWRhYW4gZWtzcG9ydC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFNjcmVlbkNvbXBhdGliaWxpdHkiIG1zZ2lkPSI2OTc1Mzg3MTE4ODYxODQyMDYxIj4idGV0YXBrYW4ga2VzZXJhc2lhbiBza3JpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFNjcmVlbkNvbXBhdGliaWxpdHkiIG1zZ2lkPSI2OTIwNDM2MTg2OTM5MTczNzQiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2F3YWwgbW9kIGtlc2VyYXNpYW4gc2tyaW4gYXBsaWthc2kgbGFpbi4gQXBsaWthc2kgaGFzYWQgbXVuZ2tpbiBtZW1hdGFoa2FuIGtlbGFrdWFuIGFwbGlrYXNpIGxhaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXREZWJ1Z0FwcCIgbXNnaWQ9IjMwMjIxMDcxOTg2ODY1ODQwNTIiPiJkYXlha2FuIHBlbnlhaHBlcGlqYXRhbiBhcGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXREZWJ1Z0FwcCIgbXNnaWQ9IjQ0NzQ1MTI0MTYyOTkwMTMyNTYiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2hpZHVwa2FuIHBlbnlhaHBlcGlqYXRhbiB1bnR1ayBhcGwgbGFpbi4gQXBsIGhhc2FkIGJvbGVoIG1lbmdndW5ha2FubnlhIHVudHVrIG1lbmdoYXB1c2thbiBhcGwgbGFpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MTYyMDkyMTg1MTI0MjM0NDgwIj4idHVrYXIgdGV0YXBhbiBwYXBhcmFuIHNpc3RlbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MzcyMjIzODczMTU0Mjk2MDc2Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmd1YmFoIGtvbmZpZ3VyYXNpIHNlbWFzYSBzZXBlcnRpIHRlbXBhdCBwZXJpc3Rpd2EgYXRhdSBzYWl6IGZvbiBrZXNlbHVydWhhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2VuYWJsZUNhck1vZGUiIG1zZ2lkPSI1Njg0NTA0MDU4MTkyOTIxMDk4Ij4iZGF5YWthbiBtb2Qga2VyZXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiJNZW1iZW5hcmthbiBhcGwgbWVuZGF5YWthbiBtb2Qga2VyZXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSIzOTE0MDI2Njg3NDIwMTc3MjAyIj4idHV0dXAgYXBsIGxhaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19raWxsQmFja2dyb3VuZFByb2Nlc3NlcyIgbXNnaWQ9IjQ1OTMzNTMyMzU5NTk3MzMxMTkiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuYW1hdGthbiBwcm9zZXMgbGF0YXIgYmVsYWthbmcgYXBsIGxhaW4uIEluaSBib2xlaCBtZW55ZWJhYmthbiBhcGwgbGFpbiBiZXJoZW50aSBiZXJqYWxhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iMjMyOTYyNzQyODgzMjA2NzcwMCI+InBha3NhIGFwbCBsYWluIHN1cGF5YSBiZXJoZW50aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iNTI1MzE1NzI5NjE4Mzk0MDgxMiI+Ik1lbWJlbmFya2FuIGFwbCBtZW5naGVudGlrYW4gYXBsIGxhaW4gc2VjYXJhIHBha3NhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VCYWNrIiBtc2dpZD0iNjUyOTM1MjA0MDcyNTg0NjE2Ij4ibWVtYWtzYSBhcGwgdW50dWsgbWVudXR1cCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlQmFjayIgbXNnaWQ9IjM4OTIyOTU4MzA0MTk1MTM2MjMiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYWtzYSBhcGEtYXBhIGFrdGl2aXRpIHlhbmcgYWRhIGRpIGxhdGFyIGRlcGFuIHVudHVrIHR1dHVwIGRhbiBrZW1iYWxpLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2R1bXAiIG1zZ2lkPSIxNjgxNzk5ODYyNDM4OTU0NzUyIj4ibWVuZGFwYXRrYW4gc2VtdWxhIGtlYWRhYW4gZGFsYW1hbiBzaXN0ZW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kdW1wIiBtc2dpZD0iMTc3ODI5OTA4ODY5MjI5MDMyOSI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5kYXBhdGthbiBzZW11bGEga2VhZGFhbiBkYWxhbWFuIHNpc3RlbS4gQXBsIGhhc2FkIGJvbGVoIG1lbmRhcGF0a2FuIHBlbGJhZ2FpIG1ha2x1bWF0IHBlcmliYWRpIGRhbiBzZWxhbWF0IHlhbmcgYmlhc2FueWEgdGlkYWsgaWEgcGVybHVrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjgwMjI1ODg2MDg5OTQ1ODk5MzgiPiJkYXBhdGthbiBzZW11bGEga2FuZHVuZ2FuIHNrcmluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSIzMTkzMjY5MDY5NDY5NzAwMjY1Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmRhcGF0a2FuIGthbmR1bmdhbiB0ZXRpbmdrYXAgYWt0aWYuIEFwbCBoYXNhZCBib2xlaCBtZW5nYW1iaWwga2VzZWx1cnVoYW4ga2FuZHVuZ2FuIHRldGluZ2thcCBkYW4gbWVtZXJpa3NhIHNlbXVhIHRla3Mga2VjdWFsaSBrYXRhIGxhbHVhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjIzMTI2MTIxMzUxMjczMTAyNTQiPiJkYXlha2FuIGtlYm9sZWhjYXBhaWFuIHVudHVrIHNlbWVudGFyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjgwNzk0NTYyOTMxODI5NzU0NjQiPiJNZW1iZW5hcmthbiBhcGxpa2FzaSB1bnR1ayBtZW5kYXlha2FuIGtlYm9sZWhjYXBhaWFuIHVudHVrIHNlbWVudGFyYSBwYWRhIHBlcmFudGkuIEFwbCBoYXNhZCBtdW5na2luIG1lbmRheWFrYW4ga2Vib2xlaGNhcGFpYW4gdGFucGEgaXppbiBwZW5nZ3VuYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iODUzMjI5NTE5OTExMjUxOTM3OCI+ImRhcGF0a2FuIG1ha2x1bWF0IHRldGluZ2thcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iNDk5ODgzNjM3MDQyNDE4Njg0OSI+Ik1lbWJvbGVoa2FuIGFwbGlrYXNpIG1lbmRhcGF0a2FuIG1ha2x1bWF0IHRlbnRhbmcgdGV0aW5na2FwIGRhcmkgcGVuZ3VydXMgdGV0aW5na2FwLiBBcGwgaGFzYWQgYm9sZWggbWVuZGFwYXRrYW4gbWFrbHVtYXQgeWFuZyBiZXJ0dWp1YW4gdW50dWsgcGVuZ2d1bmFhbiBzaXN0ZW0gZGFsYW1hbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4Njc1NTM1NjQ4ODA3NDI3Mzg5Ij4idGFwaXMgYWNhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19maWx0ZXJfZXZlbnRzIiBtc2dpZD0iODAwNjIzNjMxNTg4ODM0NzY4MCI+Ik1lbWJlbmFya2FuIGFwbGlrYXNpIG1lbmRhZnRhcmthbiBwZW5hcGlzIGlucHV0IHlhbmcgbWVuYXBpcyBzdHJpbSBzZW11YSBhY2FyYSBwZW5nZ3VuYSBzZWJlbHVtIGRpaGFudGFyLiBBcGwgaGFzYWQgbXVuZ2tpbiBtZW5nYXdhbCBVSSBzaXN0ZW0gdGFucGEgY2FtcHVyIHRhbmdhbiBwZW5nZ3VuYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjU5NzM2MjY3MzgxNzA2MTg3NzUiPiJiZXNhcmthbiBwYXBhcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNzEyMTIzNTY4NDUxNTAwMzc5MiI+Ik1lbWJlbmFya2FuIGFwbGlrYXNpIG1lbWJlc2Fya2FuIGthbmR1bmdhbiBwYXBhcmFuLiBBcGwgaGFzYWQgbXVuZ2tpbiBtZW5ndWJhaCBrYW5kdW5nYW4gcGFwYXJhbiB5YW5nIGFrYW4gbWVtYnVhdGthbiBwZXJhbnRpIHRpZGFrIGJvbGVoIGRpZ3VuYWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NodXRkb3duIiBtc2dpZD0iNzE4NTc0NzgyNDAzODkwOTAxNiI+InBlbnV0dXBhbiBzZXBhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaHV0ZG93biIgbXNnaWQ9IjcwNDY1MDA4Mzg3NDYyOTE3NzUiPiJNZWxldGFra2FuIHBlbmd1cnVzIGFrdGl2aXRpIGRhbGFtIGtlYWRhYW4gdHV0dXAuIFRpZGFrIG1lbGFrc2FuYWthbiBwZW51dHVwYW4gbGVuZ2thcC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0b3BBcHBTd2l0Y2hlcyIgbXNnaWQ9IjQxMzg2MDg2MTA3MTc0MjU1NzMiPiJoYWxhbmcgcGVydHVrYXJhbiBhcGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI4MjYyMTk1ODAyNTgyMjU1MDIxIj4iTWVuZ2hhbGFuZyBwZW5nZ3VuYSBkYXJpcGFkYSBiZXJ0dWthciBrZXBhZGEgYXBsIGxhaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSIyNTM3OTIyMzExNDExNTQ2MDE2Ij4iZGFwYXRrYW4gbWFrbHVtYXQgYXBsIHNlbWFzYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjI1MTI0NDg4NTU0OTYwNjcxMzEiPiJNZW1iZW5hcmthbiBwZW1lZ2FuZyBtZW5kYXBhdGthbiBtYWtsdW1hdCBwZXJpYmFkaSB0ZW50YW5nIHBlcm1vaG9uYW4gc2VtYXNhIGRpIGxhdGFyIGhhZGFwYW4gc2tyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9Ijg5MjIzOTA5NDg2NzE4MjY1NiI+InBhbnRhdSBkYW4ga2F3YWwgc2VtdWEgcGVsYW5jYXJhbiBhcGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ydW5TZXRBY3Rpdml0eVdhdGNoZXIiIG1zZ2lkPSI2MDAzNjAzMTYyNTc4NTc3NDA2Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbWFudGF1IGRhbiBtZW5nYXdhbCBjYXJhIHNpc3RlbSBtZWxhbmNhcmthbiBha3Rpdml0aS4gQXBsIGhhc2FkIGJvbGVoIG1lbmplamFza2FuIHNpc3RlbSBzZXBlbnVobnlhLiBLZWJlbmFyYW4gaW5pIGhhbnlhIGRpcGVybHVrYW4gdW50dWsgcGVtYmFuZ3VuYW4sIHRpZGFrIHNla2FsaS1rYWxpIHVudHVrIHBlbmdndW5hYW4gYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjI1NzYzMzM0MzQ4OTM1MzI0NzUiPiJoYW50YXIgc2lhcmFuIGJhaGF3YSBwYWtlaiB0ZWxhaCBkaWFsaWgga2VsdWFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSI2NjIxOTAxMjE2MjA3OTMxMDg5Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnlpYXJrYW4gcGVtYmVyaXRhaHVhbiBiYWhhd2EgcGFrZWogYXBsIHRlbGFoIGRpa2VsdWFya2FuLiBBcGwgaGFzYWQgYm9sZWggbWVuZ2d1bmFrYW5ueWEgdW50dWsgbWVtYnVudWggbWFuYS1tYW5hIGFwbCBsYWluIHlhbmcgc2VkYW5nIGJlcmphbGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI1Njg5MDk1MDA5MDMwMzM2NTkzIj4iaGFudGFyIHNpYXJhbiBTTVMgZGl0ZXJpbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVueWlhcmthbiBwZW1iZXJpdGFodWFuIGJhaGF3YSBtZXNlaiBTTVMgdGVsYWggZGl0ZXJpbWEuIEFwbCBoYXNhZCBib2xlaCBtZW5nZ3VuYWthbm55YSB1bnR1ayBtZW1hbHN1a2FuIG1lc2VqIFNNUyBtYXN1ay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSIzMTQ1MzQ3NDEzMDI4NTgyMzcxIj4iaGFudGFyIHNpYXJhbiBXQVAtVE9MQUstZGl0ZXJpbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iNDc4MzQwMjUyNTAzOTQ0MjcyOSI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW55aWFya2FuIHBlbWJlcml0YWh1YW4gYmFoYXdhIG1lc2VqIFdBUCBQVVNIIHRlbGFoIGRpdGVyaW1hLiBBcGwgaGFzYWQgYm9sZWggbWVuZ2d1bmFrYW5ueWEgdW50dWsgbWVtYWxzdWthbiBwZW5lcmltYWFuIG1lc2VqIE1NUyBhdGF1IHNlY2FyYSBkaWFtLWRpYW0gbWVuZ2dhbnRpa2FuIGthbmR1bmdhbiBtYW5hLW1hbmEgbGFtYW4gd2ViIGRlbmdhbiB2YXJpYW4gaGFzYWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSIyNDUxODczNjY0MzYzNjYyNjY2Ij4iaGFka2FuIGJpbGFuZ2FuIHByb3NlcyB5YW5nIGRpamFsYW5rYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmdhd2FsIGJpbGFuZ2FuIG1ha3NpbXVtIHByb3NlcyB5YW5nIGFrYW4gYmVybGFuZ3N1bmcuIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNTUwOTU4NTA3Nzk4Nzk2OTY1Ij4ibWVtYWtzYSBhcGwgbGF0YXIgYmVsYWthbmcgdW50dWsgbWVudXR1cCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2F3YWwgc2FtYSBhZGEgYWt0aXZpdGkgc2VudGlhc2Egc2VsZXNhaSBzZWJhaWsgc2FoYWphIGlhIHBlcmdpIGtlIGxhdGFyIGJlbGFrYW5nLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjI3ODk2MTA2NzM1MTQxMDMzNjQiPiJiYWNhIHN0YXRpc3RpayBiYXRlcmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI1ODk3MzQ2NTgyODgyOTE1MTE0Ij4iTWVtYmVuYXJrYW4gYXBsaWthc2kgbWVtYmFjYSBkYXRhIHBlbmdndW5hYW4gYmF0ZXJpIHRhaGFwIHJlbmRhaCBzZW1hc2EuIEJvbGVoIG1lbWJlbmFya2FuIGFwbGlrYXNpIHVudHVrIG1lbmNhcmkgbWFrbHVtYXQgdGVycGVyaW5jaSB0ZW50YW5nIGFwbCB5YW5nIGFuZGEgZ3VuYWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjM3MTk2ODk3NjQ1MzYzNzk1NTciPiJ1YmFoIHN1YWkgc3RhdGlzdGlrIGJhdGVyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjY4NjI4MTc4NTcxNzgwMjUwMDIiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ3ViYWggc3VhaSBzdGF0aXN0aWsgYmF0ZXJpIHlhbmcgZGlrdW1wdWwuIEJ1a2FuIHVudHVrIHBlbmdndW5hYW4gYXBsIG5vcm1hbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iMTUwODc3OTY4NzQzNjU4NTc0NCI+ImRhcGF0a2FuIHNlbXVsYSBzdGF0aXN0aWsgcGVuZ2VuZGFsaWFuIGFwbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iNjI0Mzg4NzA0MTU3NzkxMjg3NyI+Ik1lbWJlbmFya2FuIGFwbCBtZW5kYXBhdGthbiBzZW11bGEgc3RhdGlzdGlrIHBlbmdlbmRhbGlhbiBhcGxpa2FzaSB5YW5nIGRpa3VtcHVsLiBCdWthbiB1bnR1ayBrZWd1bmFhbiBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9Ijg4MjkwOTczNzM4NTE1MjE1MDUiPiJ1YmFoIHN1YWkgYXBsIG9wcyBzdGF0aXN0aWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9IjUwNzg0NTk2NTk0NDAzNDgzIj4iTWVtYmVuYXJrYW4gYXBsIG1lbmd1YmFoIHN1YWkgc3RhdGlzdGlrIG9wZXJhc2kgYXBsaWthc2kgeWFuZyBkaWt1bXB1bC4gQnVrYW4gdW50dWsga2VndW5hYW4gYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmFja3VwIiBtc2dpZD0iNDcwMDEzMDIyODY1NDUzOTIwIj4ic2FuZGFyYW4gZGFuIHBlbXVsaWhhbiBzaXN0ZW0ga2F3YWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhY2t1cCIgbXNnaWQ9IjY5MTIyMzA1MjUxNDA1ODk4OTEiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2F3YWwgc2FuZGFyYW4gc2lzdGVtIGRhbiBtZW11bGloa2FuIG1la2FuaXNtZS4gQnVrYW4gdW50dWsgZGlndW5ha2FuIG9sZWggYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjU1NTcwNzEzMjU4MDQ0NjkxMDIiPiJzYWhrYW4gcGVueWFuZGFyYW4gcGVudWggYXRhdSBwZW11bGloYW4gb3BlcmFzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSIxNzQ4NzYyMTcxNjM3Njk5NTYyIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbXVsYWthbiBVSSBwZW5nZXNhaGFuIHNhbmRhcmFuIHBlbnVoLiBCdWthbiB1bnR1ayBkaWd1YWthbiBvbGVoIG1hbmEtbWFuYSBhcGwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9IjIxNDg1NjM2MjgxNDAxOTMyMzEiPiJtZW1hcGFwYXJrYW4gdGV0aW5na2FwIHlhbmcgdGlhZGEga2ViZW5hcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbWJ1YXQgdGV0aW5na2FwIHlhbmcgZGltYWtzdWRrYW4gdW50dWsgZGlndW5ha2FuIG9sZWggYW50YXJhIG11a2EgcGVuZ2d1bmEgc2lzdGVtIGRhbGFtYW4uIEJ1a2FuIHVudHVrIGRpZ3VuYWthbiBvbGVoIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iMzU0MzM0Nzk4MDgzOTUxODYxMyI+Imx1a2lzIGF0YXMgYXBsIGxhaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9Ijg1ODQ2NzgzODE5NzI4MjAxMTgiPiJNZW1iZW5hcmthbiBhcGxpa2FzaSBiZXJ0aW5kaWggZGkgYXRhcyBhcGxpa2FzaSBsYWluIGF0YXUgc2ViYWhhZ2lhbiBkYXJpcGFkYSBhbnRhcmEgbXVrYSBwZW5nZ3VuYS4gSW5pIG11bmdraW4gbWVuZ2dhbmdndSBwZW5nZ3VuYWFuIGFudGFyYSBtdWthIGFuZGEgZGFsYW0gc2ViYXJhbmcgYXBsaWthc2kgYXRhdSBtZW51a2FyIGFwYSB5YW5nIGFuZGEgcmFzYSBhbmRhIGxpaGF0IGRhbGFtIGFwbGlrYXNpIGxhaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9IjI4MDUxMDMyNDExNTM5MDcxNzQiPiJtZW5ndWJhaCBzdWFpIGtlbGFqdWFuIGFuaW1hc2kgZ2xvYmFsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4iTWVtYmVuYXJrYW4gYXBsIG1lbnVrYXIga2VsYWp1YW4gYW5pbWFzaSBnbG9iYWwgKGFuaW1hc2kgeWFuZyBsZWJpaCBsYWp1IGF0YXUgbGViaWggcGVybGFoYW4pIHBhZGEgYmlsYS1iaWxhIG1hc2Egc2FoYWphLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iMTI4NjUwNTcxNzA1MDEyMTM3MCI+InVydXMgdG9rZW4gYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iODA0MzQzMTcxMzAxNDM5NTY3MSI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1idWF0IGRhbiBtZW5ndXJ1c2thbiB0b2tlbiBtZXJla2Egc2VuZGlyaSwgZGVuZ2FuIG1lbWludGFzIHN1c3VuYW4tWiBiaWFzYW55YS4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mcmVlemVTY3JlZW4iIG1zZ2lkPSI0NzA4MTgxMTg0NDQxODgwMTc1Ij4iYmVrdWthbiBza3JpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9Ijg1NTg5MjM3ODkyMjI2NzAwNjQiPiJNZW1iZW5hcmthbiBhcGxpa2FzaSBtZW1iZWt1a2FuIHNlbWVudGFyYSBza3JpbiB1bnR1ayBwZXJhbGloYW4gc2tyaW4gcGVudWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbmplY3RFdmVudHMiIG1zZ2lkPSIxMzc4NzQ2NTg0MDIzNTg2NjAwIj4ibWVuZWthbiBrZWt1bmNpIGRhbiBidXRhbmcga2F3YWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnlhbXBhaWthbiBwZXJpc3Rpd2EgaW5wdXQgc2VuZGlyaSAodGVrYW5hbiBrZWt1bmNpLCBkYW4gc2ViYWdhaW55YSkga2VwYWRhIGFwbCBsYWluLiBBcGwgaGFzYWQgYm9sZWggbWVuZ2d1bmFrYW5ueWEgdW50dWsgbWVuZ2FtYmlsIGFsaWggdGFibGV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1MzEyODA1NzU3MjMyNjI1MyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW55YW1wYWlrYW4gcGVyaXN0aXdhIGlucHV0IHNlbmRpcmkgKHRla2FuYW4ga2VrdW5jaSwgZGFuIHNlYmFnYWlueWEpIGtlcGFkYSBhcGwgbGFpbi4gQXBsIGhhc2FkIGJvbGVoIG1lbmdndW5ha2FubnlhIHVudHVrIG1lbmdhbWJpbCBhbGloIHRlbGVmb24uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjQ2OTQyODkwMDA0MTI0OTIzNCI+InJha2FtIGFwYSB5YW5nIGFuZGEgdGFpcGthbiBkYW4gdGluZGFrYW4geWFuZyBhbmRhIGFtYmlsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI4Mzg3NzU0OTAxNjg4NzI4MDQzIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbGloYXQga2VrdW5jaSB5YW5nIGFuZGEgdGVrYW4gd2FsYXVwdW4gc2VtYXNhIGJlcmludGVyYWtzaSBkZW5nYW4gYXBsIGxhaW4gKHNlcGVydGkgbWVuYWlwIGthdGEgbGFsdWFuKS4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMzYwMDY0NjIwMjMwNTE1Nzc2Ij4idGVyaWthdCBrZXBhZGEga2FlZGFoIGlucHV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzI1MDQ0MDMyMjgwNzI4NjMzMSI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIHRlcmlrYXQgZGVuZ2FuIGFudGFyYSBtdWthIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYmFnaSBrYWVkYWggaW5wdXQgaXR1LiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjUzNTc3MzM5NDI1NTYwMzE1OTMiPiJ0ZXJpa2F0IGtlcGFkYSBwZXJraGlkbWF0YW4geWFuZyBib2xlaCBkaWFrc2VzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNzAzNDYxNTkyODYwOTMzMTM2OCI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIHRlcmlrYXQgZGVuZ2FuIGFudGFyYSBtdWthIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYmFnaSBwZXJraGlkbWF0YW4geWFuZyBib2xlaCBkaWFrc2VzLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI4NDYyODE1MTc5NTcyNzQ4NzYxIj4idGVyaWthdCBrZXBhZGEgcGVya2hpZG1hdGFuIGNldGFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iNzk2MDA2NzYyMzIwOTExMTEzNSI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIHRlcmlrYXQgZGVuZ2FuIGFudGFyYSBtdWthIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYmFnaSBwZXJraGlkbWF0YW4gY2V0YWthbi4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NBbGxQcmludEpvYnMiIG1zZ2lkPSIxMTIwNzkyNDY4NDY1NzExMTU5Ij4iYWtzZXMgc2VtdWEga2VyamEgY2V0YWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0FsbFByaW50Sm9icyIgbXNnaWQ9IjI5NzgxODUzMTEwNDE4NjQ3NjIiPiJNZW1iZW5hcmthbiBwZW1lZ2FuZyBtZW5nYWtzZXMga2VyamEgY2V0YWthbiB5YW5nIGRpYnVhdCBvbGVoIGFwbCBsYWluLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9iaW5kTmZjU2VydmljZSAoMjc1MjczMTMwMDQxOTQxMDcyNCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19iaW5kTmZjU2VydmljZSAoNjEyMDY0NzYyOTE3NDA2Njg2MikgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iNzM1ODM3ODQwMTkxNTI4NzkzOCI+InRlcmlrYXQga2VwYWRhIHBlcmtoaWRtYXRhbiB0ZWtzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iODE1MTk2ODkxMDk3Mzk5ODY3MCI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIG1lbmdpa2F0IGtlcGFkYSBhbnRhcmEgbXVrYSBwZXJpbmdrYXQgYXRhc2FuIHBlcmtoaWRtYXRhbiB0ZWtzKG1pcy4gUGVya2hpZG1hdGFuUGVueWVtYWtFamFhbikuIFRpZGFrIHNlaGFydXNueWEgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjQ3MDg1OTYwMjExNjE0NzMyNTUiPiJ0ZXJpa2F0IGtlcGFkYSBwZXJraGlkbWF0YW4gVlBOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iTWVtYmVuYXJrYW4gcGVtZWdhbmcgdGVyaWthdCBkZW5nYW4gYW50YXJhIG11a2EgcGVyaW5na2F0IHRlcnRpbmdnaSBiYWdpIHBlcmtoaWRtYXRhbiBWcG4uIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJ0ZXJpa2F0IHBhZGEga2VydGFzIGRpbmRpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIHRlcmlrYXQgZGVuZ2FuIGFudGFyYSBtdWthIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYmFnaSBrZXJ0YXMgZGluZGluZy4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4idGVyaWthdCBrZXBhZGEgcGVya2hpZG1hdGFuIHdpZGdldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJNZW1iZW5hcmthbiBwZW1lZ2FuZyB0ZXJpa2F0IGRlbmdhbiBhbnRhcmEgbXVrYSBwZXJpbmdrYXQgdGVydGluZ2dpIGJhZ2kgcGVya2hpZG1hdGFuIHdpZGdldC4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iYmVyaW50ZXJha3NpIGRlbmdhbiBwZW50YWRiaXIgcGVyYW50aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9IjU2OTcxNTQxOTU0MzkwNzkzMCI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIG1lbmdoYW50YXIgdHVqdWFuIGtlcGFkYSBwZW50YWRiaXIgcGVyYW50aS4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4idGFtYmFoIGF0YXUgYWxpaCBrZWx1YXIgcGVudGFkYmlyIHBlcmFudGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI1MDI1NjA4MTY3NzA5OTQyNDg1Ij4iTWVtYmVuYXJrYW4gcGVtZWdhbmcgbWVuYW1iYWggYXRhdSBtZW5nYWxpaCBrZWx1YXIgcGVudGFkYmlyIHBlcmFudGkgYWt0aWYuIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMzY1OTQ3NzE3MTYzODY2ODQ0Ij4idHVrYXIgb3JpZW50YXNpIHNrcmluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0T3JpZW50YXRpb24iIG1zZ2lkPSIzMDQ2MTI2NjE5MzE2NjcxNDc2Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnVrYXIgcHV0YXJhbiBza3JpbiBwYWRhIGJpbGEtYmlsYSBtYXNhLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjkxNzUzNzE2MTMzMjI1NjI5MzQiPiJ0dWthciBrZWxhanVhbiBwZW51ZGluZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjY4NjY1NjMyMzQyNzQxMDQyMzMiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVudWthciBrZWxhanVhbiBwZW51bmp1ayB0ZXRpa3VzIGF0YXUgcGFkIGplamFrIHBhZGEgYmlsYS1iaWxhIG1hc2EuIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI0Nzc4NzMxNzAzNjAwOTA5MzQwIj4idHVrYXIgc3VzdW4gYXR1ciBwYXBhbiBrZWt1bmNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI4NDgwMDE2NzcxMTM0MTc1ODc5Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbnVrYXIgc3VzdW4gYXR1ciBwYXBhbiBrZWt1bmNpLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0NTM5MDAyOTkxOTQ3Mzc2NjU5Ij4iaGFudGFyIGlzeWFyYXQgTGludXgga2VwYWRhIGFwbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0ODk2OTkyMDc5MTgyNjQ5MTQxIj4iTWVtYmVuYXJrYW4gYXBsIG1lbWludGEgaXN5YXJhdCB5YW5nIGRpYmVrYWxrYW4gZGloYW50YXIga2VwYWRhIHNlbXVhIHByb3NlcyB5YW5nIGJlcnRlcnVzYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4iYnVhdGthbiBhcGwgc2VudGlhc2EgYmVyamFsYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJzaXN0ZW50QWN0aXZpdHkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg1MjUxODkyNzIzMjkwODYxMzciPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYnVhdCBzZWJhaGFnaWFuIGRpcmlueWEgYmVydGVydXNhbiBkYWxhbSBtZW1vcmkuIEluaSBib2xlaCBtZW5nZWhhZGthbiBtZW1vcmkgeWFuZyB0ZXJzZWRpYSBrZXBhZGEgYXBsIGxhaW4gZGFuIG1lbmphZGlrYW4gdGFibGV0IHBlcmxhaGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzODQ3NjAwNDc1MDgyNzgyNzIiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYnVhdCBzZWJhaGFnaWFuIGRhcmkgZGlyaW55YSBiZXJ0ZXJ1c2FuIGRhbGFtIG1lbW9yaS4gSW5pIGJvbGVoIG1lbmdlaGFka2FuIG1lbW9yaSB5YW5nIHRlcnNlZGlhIGtlcGFkYSBhcGwgbGFpbiBkYW4gbWVuamFkaWthbiB0ZWxlZm9uIHBlcmxhaGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSIxODQzODUxMjk1Mzc3MDU5MzgiPiJwYWRhbSBhcGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYWRhbSBwYWtlaiBBbmRyb2lkLiBBcGwgaGFzYWQgYm9sZWggbWVuZ2d1bmFrYW5ueWEgdW50dWsgbWVtYWRhbSBhcGwgcGVudGluZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSIyNzQxMDkxOTE4NDU4NDI3NTYiPiJwYWRhbWthbiBkYXRhIGFwbCBsYWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjQ2MjUzMjM2ODQxMjU0NTk0ODgiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ29zb25na2FuIGRhdGEgcGVuZ2d1bmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVDYWNoZUZpbGVzIiBtc2dpZD0iMzEyODY2NTU3MTgzNzQwODY3NSI+InBhZGFta2FuIGNhY2hlIGFwbCBsYWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjM4MTI5OTg1OTkwMDY3MzAxOTYiPiJNZW1iZW5hcmthbiBhcGwgbWVtYWRhbWthbiBmYWlsIGNhY2hlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSI3NDcyOTIxNzY4MzU3OTgxOTg2Ij4idWt1ciBydWFuZyBzdG9yYW4gYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmRhcGF0a2FuIHNlbXVsYSBrb2RueWEsIGRhdGFueWEgZGFuIHNhaXogY2FjaGVueWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjIxOTkxMjg0ODI4MjAzMDY5MjQiPiJwYXNhbmcgdGVydXMgYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iNTYyODUzMDk3MjU0ODA3MTI4NCI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1hc2FuZyBwYWtlaiBBbmRyb2lkIHlhbmcgYmFoYXJ1IGF0YXUgeWFuZyBkaWtlbWFzIGtpbmkuIEFwbCBoYXNhZCBib2xlaCBtZW5nZ3VuYWthbm55YSB1bnR1ayBtZW5hbWJhaCBhcGwgYmFoYXJ1IGRlbmdhbiBrZWl6aW5hbiBiZXJrdWFzYSBzZWNhcmEgc2V3ZW5hbmctd2VuYW5nbnlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBDYWNoZSIgbXNnaWQ9Ijc0ODcyNzkzOTE3MjM1MjY4MTUiPiJwYWRhbWthbiBzZW11YSBkYXRhIGNhY2hlIGFwbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzQ2NDA4NzE5NDU0MzQ1NjUiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ29zb25na2FuIHN0b3JhbiB0YWJsZXQgZGVuZ2FuIG1lbWFkYW0gZmFpbCBkYWxhbSBkaXJla3RvcmkgY2FjaGUgYXBsaWthc2kgbGFpbi4gSW5pIGJvbGVoIG1lbnllYmFia2FuIGFwbGlrYXNpIGxhaW4gYmVybXVsYSBsZWJpaCBwZXJsYWhhbiBrZXJhbmEgcGVybHUgbWVuZGFwYXRrYW4gc2VtdWxhIGRhdGFueWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ29zb25na2FuIHN0b3JhbiB0ZWxlZm9uIGRlbmdhbiBtZW1hZGFtIGZhaWwgZGFsYW0gZGlyZWt0b3JpIGNhY2hlIGFwbGlrYXNpIGxhaW4uIEluaSBib2xlaCBtZW55ZWJhYmthbiBhcGxpa2FzaSBsYWluIGJlcm11bGEgbGViaWggcGVybGFoYW4ga2VyYW5hIHBlcmx1IG1lbmRhcGF0a2FuIHNlbXVsYSBkYXRhbnlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMjg5ODkwMjcxNjQ1OTIxNDExIj4iQWxpaCBzdW1iZXIgYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW92ZVBhY2thZ2UiIG1zZ2lkPSIzMTk1NjIyMTc3NzgyNDQ1MjQiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtaW5kYWhrYW4gc3VtYmVyIGFwbCBkYXJpIG1lZGlhIGRhbGFtYW4ga2UgbHVhcmFuIGRhbiBzZWJhbGlrbnlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZExvZ3MiIG1zZ2lkPSI2NjE1Nzc4NTQzMTk4OTY3NjE0Ij4iYmFjYSBkYXRhIGxvZyBzZW5zaXRpZiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MjA2MTMxMzI5MzQ1NTE1MSI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIGRhcmlwYWRhIHBlbGJhZ2FpIGZhaWwgbG9nIHNpc3RlbS4gSGFsIGluaSBtZW1iZW5hcmthbm55YSBtZW5lbXVpIG1ha2x1bWF0IHVtdW0gbWVuZ2VuYWkgcGVya2FyYSB5YW5nIGFuZGEgbGFrdWthbiBkZW5nYW4gdGFibGV0LCBqdWdhIGJlcnBvdGVuc2kgbWVuZW11aSBtYWtsdW1hdCBwZXJzZW5kaXJpYW4gZGFuIHBlcmliYWRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjA2MzQzODE0MDI0MTU2MDQ0MyI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIGRhcmlwYWRhIHBlbGJhZ2FpIGZhaWwgbG9nIHNpc3RlbS4gSGFsIGluaSBtZW1iZW5hcmthbm55YSBtZW5lbXVpIG1ha2x1bWF0IHVtdW0gbWVuZ2VuYWkgcGVya2FyYSB5YW5nIGFuZGEgbGFrdWthbiBkZW5nYW4gdGVsZWZvbiwganVnYSBiZXJwb3RlbnNpIG1lbnllcnRha2FuIG1ha2x1bWF0IHBlcnNlbmRpcmlhbiBkYW4gcGVyaWJhZGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4iZ3VuYWthbiBtYW5hLW1hbmEgcGVueWFoa29kIG1lZGlhIHVudHVrIG1haW4gc2VtdWxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2d1bmFrYW4gc2ViYXJhbmcgcGVueWFoa29kIG1lZGlhIHlhbmcgZGlwYXNhbmdrYW4gdW50dWsgbWVueWFoa29kIG1haW4gc2VtdWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlhZ25vc3RpYyIgbXNnaWQ9IjgwNzY3NDM5NTM5MDgwMDAzNDIiPiJiYWNhL3R1bGlzIGtlIHN1bWJlciB5YW5nIGRpbWlsaWtpIG9sZWggZGlhZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RpYWdub3N0aWMiIG1zZ2lkPSI2NjA4Mjk1NjkyMDAyNDUyMjgzIj4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2EgZGFuIG1lbnVsaXMga2Ugc2ViYXJhbmcgc3VtYmVyIHlhbmcgZGltaWxpa2kgb2xlaCBrdW1wdWxhbiBkaWFnOyBjb250b2hueWEsIGZhaWwgZGFsYW0gL2Rldi4gSGFsIGluaSBiZXJwb3RlbnNpIG1lbmplamFza2FuIGtlc3RhYmlsYW4gZGFuIGtlc2VsYW1hdGFuIHNpc3RlbS4gUGVya2FyYSBpbmkgc2VoYXJ1c255YSBIQU5ZQSBkaWd1bmFrYW4gdW50dWsgZGlhZ25vc2lzIGtodXN1cyBwZXJrYWthc2FuIG9sZWggcGVuZ2lsYW5nIGF0YXUgcGVuZ2VuZGFsaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBtc2dpZD0iNjMzNTU3Njc3NTcxMTA5NTkzMSI+ImRheWFrYW4gYXRhdSBsdW1wdWhrYW4ga29tcG9uZW4gYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVudWthciBzYW1hIGFkYSBrb21wb25lbiBhcGwgbGFpbiBkaWRheWFrYW4gYXRhdSB0aWRhay4gQXBsIGhhc2FkIGJvbGVoIG1lbmdndW5ha2FubnlhIHVudHVrIG1lbHVtcHVoa2FuIGtldXBheWFhbiB0ZWxlZm9uIHlhbmcgcGVudGluZy4gQmVyaGF0aS1oYXRpIHNlbWFzYSBtZW5nZ3VuYWthbiBrZWJlbmFyYW4gaW5pLCBrZXJhbmEgaGFsIGluaSBib2xlaCBtZW5qYWRpa2FuIGtvbXBvbmVuIGFwbCBiZXJhZGEgZGFsYW0ga2VhZGFhbiB0aWRhayBib2xlaCBkaWd1bmFrYW4sIHRpZGFrIGtvbnNpc3RlbiwgYXRhdSB0aWRhayBzdGFiaWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODI3MjMyNDg0NDE2NTA1NjE1Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnVrYXIgc2FtYSBhZGEga29tcG9uZW4gYXBsIGxhaW4gZGlkYXlha2FuIGF0YXUgdGlkYWsuIEFwbCBoYXNhZCBib2xlaCBtZW5nZ3VuYWthbm55YSB1bnR1ayBtZWx1bXB1aGthbiBrZXVwYXlhYW4gdGVsZWZvbiB5YW5nIHBlbnRpbmcuIEJlcmhhdGktaGF0aSBzZW1hc2EgbWVuZ2d1bmFrYW4ga2ViZW5hcmFuIGluaSwga2VyYW5hIGhhbCBpbmkgYm9sZWggbWVuamFkaWthbiBrb21wb25lbiBhcGwgYmVyYWRhIGRhbGFtIGtlYWRhYW4gdGlkYWsgYm9sZWggZGlndW5ha2FuLCB0aWRhayBrb25zaXN0ZW4sIGF0YXUgdGlkYWsgc3RhYmlsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQ2MjczMTUzNTEwOTM1MDg3OTUiPiJiZXJpa2FuIGF0YXUgYmF0YWxrYW4ga2ViZW5hcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQwODg2NDI2NTQwODU4NTA2NjIiPiJNZW1iZW5hcmthbiBhcGxpa2FzaSBtZW1iZXJpa2FuIGF0YXUgbWVtYmF0YWxrYW4ga2ViZW5hcmFuIGtodXN1cyB1bnR1ayBhcGxpa2FzaSBpdHUgc2VuZGlyaSBhdGF1IGFwbGlrYXNpIGxhaW4uIEFwbGlrYXNpIGJlcm5pYXQgamFoYXQgYm9sZWggbWVuZ2d1bmFrYW4gcGVya2FyYSBpbmkgdW50dWsgbWVuZ2Frc2VzIGNpcmkgeWFuZyBiZWx1bSBhbmRhIGJlcmlrYW4gcGFkYW55YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByZWZlcnJlZEFwcGxpY2F0aW9ucyIgbXNnaWQ9Ijg0NjMxODE2Mjg2OTUzOTYzOTEiPiJ0ZXRhcGthbiBrZXV0YW1hYW4gYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iNDk3Mzk4Njc2MjI0MTc4MzcxMiI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBzdWFpIGFwbCBwaWxpaGFuIGFuZGEuIEFwbCBoYXNhZCBzZWNhcmEgZGlhbS1kaWFtIGJvbGVoIG1lbnVrYXIgYXBsIHlhbmcgZGlqYWxhbmthbiwgbWVuaXB1IGFwbCBhbmRhIHlhbmcgc2VkaWEgYWRhIHVudHVrIG1lbmd1bXB1bCBkYXRhIHBlcmliYWRpIGRhcmlwYWRhIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNldHRpbmdzIiBtc2dpZD0iMjIyNjE5NTI5MDk1NTIyNDczMCI+InViYWggc3VhaSB0ZXRhcGFuIHNpc3RlbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSI3Nzc1NzIzNDQxNTU4OTA3MTgxIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmd1YmFoIHN1YWkgZGF0YSB0ZXRhcGFuIHNpc3RlbS4gQXBsIGhhc2FkIGJvbGVoIG1lcm9zYWtrYW4ga29uZmlndXJhc2kgc2lzdGVtIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iMjA0Njc2MjUxODc2NzE4Mjg4Ij4idWJhaCBzdWFpIHRldGFwYW4gc2lzdGVtIHNlbGFtYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iODE1OTUzNTYxMzAyMDEzNzM5MSI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBzdWFpIGRhdGEgdGV0YXBhbiBzZWxhbWF0IHNpc3RlbS4gQnVrYW4gdW50dWsgZGlndW5ha2FuIG9sZWggYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIyMTQ5NDI2NjY0MjI2MTUyMTg1Ij4ibWVuZ3ViYWggc3VhaSBwZXRhIHBlcmtoaWRtYXRhbiBHb29nbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjEyODczMDk0Mzc2MzgzODAyMjkiPiJNZW1ib2xlaGthbiBhcGwgbWVuZ3ViYWggc3VhaSBwZXRhIHBlcmtoaWRtYXRhbiBHb29nbGUuIEJ1a2FuIHVudHVrIGtlZ3VuYWFuIG9sZWggYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4iamFsYW5rYW4gcGFkYSBwZXJtdWxhYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzM5MDMwNDY2NDExNjg4MDcwNCI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW11bGFrYW4gZGlyaW55YSBzZW5kaXJpIHNlYmFpayBzYWhhamEgc2lzdGVtIHNlbGVzYWkgbWVuZ2VidXQuIEluaSBib2xlaCBtZW1idWF0IG1hc2EgdW50dWsgbWVuZ2hpZHVwa2FuIHRhYmxldCBtZW5qYWRpIGxlYmloIGxhbWEgZGFuIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1wZXJsYWhhbmthbiBrZXNlbHVydWhhbiB0YWJsZXQgZGVuZ2FuIHNlbnRpYXNhIGJlcmphbGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTEzOTUwNTg5MTAyNjE3NTA0Ij4iTWVtYmVuYXJrYW4gYXBsIGJlcm11bGEgc2VuZGlyaSBzZWJhaWsgc2FoYWphIHNpc3RlbSB0ZWxhaCBzZWxlc2FpIG1lbmdlYnV0LiBJbmkgYm9sZWggbWVuamFkaWthbm55YSBtZW5nYW1iaWwgbWFzYSB5YW5nIGxhbWEgdW50dWsgbWVuZ2hpZHVwa2FuIHRlbGVmb24gZGFuIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZWxhbWJhdGthbiBrZXNlbHVydWhhbiB0ZWxlZm9uIGRlbmdhbiBzZW50aWFzYSBiZXJqYWxhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFN0aWNreSIgbXNnaWQ9Ijc5MTkxMjYzNzI2MDY4ODE2MTQiPiJoYW50YXIgc2lhcmFuIGxla2l0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3NzQ5NzYwNDk0Mzk5OTE1NjUxIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmdoYW50YXIgc2lhcmFuIG1lbGVraXQsIHlhbmcga2VrYWwgc2VsZXBhcyBzaWFyYW4gYmVyYWtoaXIuIFBlbmdndW5hYW4gYmVybGViaWhhbiBib2xlaCBtZW1idWF0a2FuIHRhYmxldCBwZXJsYWhhbiBhdGF1IHRpZGFrIHN0YWJpbCBrZXJhbmEgbWVuZ2d1bmFrYW4gdGVybGFsdSBiYW55YWsgbWVtb3JpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4MjU4MDM3NjQyMzI0NDUwOTEiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2hhbnRhciBzaWFyYW4gbWVsZWtpdCwgeWFuZyBrZWthbCBzZWxlcGFzIHNpYXJhbiBiZXJha2hpci4gUGVuZ2d1bmFhbiBiZXJsZWJpaGFuIGJvbGVoIG1lbWJ1YXQgdGVsZWZvbiBwZXJsYWhhbiBhdGF1IHRpZGFrIHN0YWJpbCBkZW5nYW4gbWVueWViYWJrYW5ueWEgbWVuZ2d1bmFrYW4gbWVtb3JpIHlhbmcgdGVybGFsdSBiYW55YWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ29udGFjdHMiIG1zZ2lkPSI4MzQ4NDgxMTMxODk5ODg2MTMxIj4iYmFjYSBrZW5hbGFuIGFuZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUyOTQ4NjY4NTY5NDExNDk2MzkiPiJNZW1iZW5hcmthbiBhcGwgbWVtYmFjYSBkYXRhIHRlbnRhbmcga2VuYWxhbiBhbmRhIHlhbmcgdGVyc2ltcGFuIGRpIHRhYmxldCBhbmRhLCB0ZXJtYXN1ayBrZWtlcmFwYW4gYW5kYSBtZW1hbmdnaWwsIG1lbmdoYW50YXIgZS1tZWwgYXRhdSBiZXJrb211bmlrYXNpIGRhbGFtIGNhcmEgbGFpbiBkZW5nYW4gaW5kaXZpZHUgdGVydGVudHUuIEtlYmVuYXJhbiBpbmkgbWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnlpbXBhbiBkYXRhIGtlbmFsYW4gYW5kYSBkYW4gYXBsIGhhc2FkIGJvbGVoIGJlcmtvbmdzaSBkYXRhIGtlbmFsYW4gYW5kYSB0YW5wYSBwZW5nZXRhaHVhbiBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0NDA2NTQxNTI0NTczMDA2NjIiPiJNZW1iZW5hcmthbiBhcGwgbWVtYmFjYSBkYXRhIHRlbnRhbmcga2VuYWxhbiBhbmRhIHlhbmcgdGVyc2ltcGFuIGRpIHRlbGVmb24gYW5kYSwgdGVybWFzdWsga2VrZXJhcGFuIGFuZGEgbWVtYW5nZ2lsLCBtZW5naGFudGFyIGUtbWVsIGF0YXUgYmVya29tdW5pa2FzaSBkYWxhbSBjYXJhIGxhaW4gZGVuZ2FuIGluZGl2aWR1IHRlcnRlbnR1LiBLZWJlbmFyYW4gaW5pIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW55aW1wYW4gZGF0YSBrZW5hbGFuIGFuZGEgZGFuIGFwbCBoYXNhZCBib2xlaCBiZXJrb25nc2kgZGF0YSBrZW5hbGFuIGFuZGEgdGFucGEgcGVuZ2V0YWh1YW4gYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ29udGFjdHMiIG1zZ2lkPSI1MTA3NDkyMDg2NDE2NzkzNTQ0Ij4idWJhaCBzdWFpIGtlbmFsYW4gYW5kYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzI0MzkzMjUyMTk1MzYwMiI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ndWJhaCBzdWFpIGRhdGEgdGVudGFuZyBrZW5hbGFuIGFuZGEgeWFuZyB0ZXJzaW1wYW4gcGFkYSB0YWJsZXQgYW5kYSwgdGVybWFzdWsga2VrZXJhcGFuIHNpYXBhIGFuZGEgcGFuZ2dpbCwgaGFudGFyIGUtbWVsIGF0YXUgYmVya29tdW5pa2FzaSBkYWxhbSBjYXJhIGxhaW4gZGVuZ2FuIGtlbmFsYW4gdGVydGVudHUuIEtlYmVuYXJhbiBpbmkgbWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbWFkYW0gZGF0YSBrZW5hbGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1ODk4NjkyMjQ2MjUxNjM1NTgiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ3ViYWggc3VhaSBkYXRhIHRlbnRhbmcga2VuYWxhbiBhbmRhIHlhbmcgdGVyc2ltcGFuIHBhZGEgdGVsZWZvbiBhbmRhLCB0ZXJtYXN1ayBrZWtlcmFwYW4gc2lhcGEgYW5kYSBwYW5nZ2lsLCBoYW50YXIgZS1tZWwgYXRhdSBiZXJrb211bmlrYXNpIGRhbGFtIGNhcmEgbGFpbiBkZW5nYW4ga2VuYWxhbiB0ZXJ0ZW50dS4gS2ViZW5hcmFuIGluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYWRhbSBkYXRhIGtlbmFsYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsbExvZyIgbXNnaWQ9IjM0NzgxMzMxODQ2MjQxMDI3MzkiPiJiYWNhIGxvZyBwYW5nZ2lsYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzcwMDY0NTE4NDg3MDc2MDI4NSI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIGxvZyBwYW5nZ2lsYW4gdGFibGV0IGFuZGEsIHRlcm1hc3VrIGRhdGEgdGVudGFuZyBwYW5nZ2lsYW4gbWFzdWsgZGFuIGtlbHVhci4gS2ViZW5hcmFuIGluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVueWltcGFuIGRhdGEgbG9nIHBhbmdnaWxhbiBhbmRhIGRhbiBhcGwgaGFzYWQgYm9sZWggYmVya29uZ3NpIGRhdGEgcGFuZ2dpbGFuIHRhbnBhIHBlbmdldGFodWFuIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc3NzI1Nzk2ODEzMjE3MjQ0Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2EgbG9nIHBhbmdnaWxhbiB0ZWxlZm9uIGFuZGEsIHRlcm1hc3VrIGRhdGEgdGVudGFuZyBwYW5nZ2lsYW4gbWFzdWsgZGFuIGtlbHVhci4gS2ViZW5hcmFuIGluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVueWltcGFuIGRhdGEgbG9nIHBhbmdnaWxhbiBhbmRhIGRhbiBhcGwgaGFzYWQgYm9sZWggYmVya29uZ3NpIGRhdGEgcGFuZ2dpbGFuIHRhbnBhIHBlbmdldGFodWFuIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGxMb2ciIG1zZ2lkPSI4NTUyMDQ1NjY0NzQzNDk5MzU0Ij4idHVsaXMgbG9nIHBhbmdnaWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY2MTgwNjA2MjI3NDExOTI0NSI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBzdWFpIHBhbmdnaWxhbiB0YWJsZXQgYW5kYSwgdGVybWFzdWsgZGF0YSB0ZW50YW5nIHBhbmdnaWxhbiBtYXN1ayBkYW4ga2VsdWFyLiBBcGwgaGFzYWQgYm9sZWggbWVuZ2d1bmFrYW5ueWEgdW50dWsgbWVtYWRhbSBhdGF1IG1lbmd1YmFoIHN1YWkgbG9nIHBhbmdnaWxhbiBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4Mzk0MTczNjM1Mjc4Nzg0MiI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBzdWFpIHBhbmdnaWxhbiB0ZWxlZm9uIGFuZGEsIHRlcm1hc3VrIGRhdGEgdGVudGFuZyBwYW5nZ2lsYW4gbWFzdWsgZGFuIGtlbHVhci4gQXBsIGhhc2FkIGJvbGVoIG1lbmdndW5ha2FubnlhIHVudHVrIG1lbWFkYW0gYXRhdSBtZW5ndWJhaCBzdWFpIGxvZyBwYW5nZ2lsYW4gYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQcm9maWxlIiBtc2dpZD0iNDcwMTg4OTg1MjYxMjcxNjY3OCI+ImJhY2Ega2FkIGtlbmFsYW4gYW5kYSBzZW5kaXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDYyNDc1MTUxODQ5ODg4ODQ4Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2EgbWFrbHVtYXQgcHJvZmlsIHBlcmliYWRpIHlhbmcgZGlzaW1wYW4gZGFsYW0gcGVyYW50aSBhbmRhLCBzZXBlcnRpIG5hbWEgZGFuIG1ha2x1bWF0IGtlbmFsYW4gYW5kYS4gSW5pIGJlcm1ha25hIGFwbCBsYWluIGJvbGVoIG1lbmdlbmFsIHBhc3RpIGFuZGEgZGFuIG1lbmdoYW50YXIgbWFrbHVtYXQgcHJvZmlsIGFuZGEga2VwYWRhIG9yYW5nIGxhaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiJ1YmFoIHN1YWkga2FkIGtlbmFsYW4gc2VuZGlyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiJNZW1iZW5hcmthbiBhcGwgbWVudWthciBhdGF1IG1lbmFtYmFoIG1ha2x1bWF0IHByb2ZpbCBwZXJpYmFkaSB5YW5nIGRpc2ltcGFuIHBhZGEgcGVyYW50aSBhbmRhLCBzZXBlcnRpIG5hbWEgZGFuIG1ha2x1bWF0IGtlbmFsYW4gYW5kYS4gSW5pIGJlcm1ha25hIGFwbCBib2xlaCBtZW5nZW5hbCBwYXN0aSBhbmRhIGRhbiBtZW5naGFudGFyIG1ha2x1bWF0IHByb2ZpbCBhbmRhIGtlcGFkYSBvcmFuZyBsYWluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEyNjg5MjA5NTYxNTI0MTkxNzAiPiJiYWNhIGFsaXJhbiBzb3NpYWwgYW5kYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4iTWVtYmVuYXJrYW4gYXBsIG1lbmdha3NlcyBkYW4gbWVueWVnZXJha2thbiBrZW1hcyBraW5pIHNvc2lhbCBkYXJpcGFkYSBhbmRhIGRhbiByYWthbiBhbmRhLiBCZXJoYXRpLWhhdGkgc2VtYXNhIGJlcmtvbmdzaSBtYWtsdW1hdCAtIGluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYmFjYSBrb211bmlrYXNpIGRpIGFudGFyYSBhbmRhIGRhbiByYWthbiBhbmRhIHBhZGEgcmFuZ2thaWFuIHNvc2lhbCB0YW5wYSBtZW5naXJhIGtlcmFoc2lhYW4uIE5vdGE6IGtlYmVuYXJhbiBpbmkgdGlkYWsgYm9sZWggZGlrdWF0a3Vhc2FrYW4gcGFkYSBzZW11YSByYW5na2FpYW4gc29zaWFsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNTA0MTc5MjIyNDkzMjM1NjQ1Ij4idHVsaXMga2UgYWxpcmFuIHNvc2lhbCBhbmRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDg2NTU3NTUyMjA0MTE0ODQ5Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWFwYXJrYW4ga2VtYXMga2luaSBzb3NpYWwgZGFyaSByYWthbiBhbmRhLiBCZXJoYXRpLWhhdGkgc2VtYXNhIGJlcmtvbmdzaSBtYWtsdW1hdCAtIGluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2hhc2lsa2FuIG1lc2VqIHlhbmcga2VsaWhhdGFuIHNlcGVydGkgZGF0YW5nIGRhcmkgc2VvcmFuZyByYWthbi4gTm90YToga2ViZW5hcmFuIGluaSB0aWRhayBib2xlaCBkaWt1YXRrdWFzYWthbiBwYWRhIHNlbXVhIHJhbmdrYWlhbiBzb3NpYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsZW5kYXIiIG1zZ2lkPSI1OTcyNzI3NTYwMjU3NjEyMzk4Ij4iYmFjYSBhY2FyYSBrYWxlbmRhciBzZXJ0YSBtYWtsdW1hdCBzdWxpdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDIxNjQ2MjA0OTA1NzY1ODcyMyI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIHNlbXVhIGFjYXJhIGthbGVuZGFyIHlhbmcgdGVyc2ltcGFuIHBhZGEgdGFibGV0IGFuZGEsIHRlcm1hc3VrIG1pbGlrIHJha2FuIGF0YXUgcmFrYW4gc2VrZXJqYS4gSW5pIGJvbGVoIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBiZXJrb25nc2kgYXRhdSBtZW55aW1wYW4gZGF0YSBrYWxlbmRhciBhbmRhLCB0YW5wYSBtZW5naXJhIGtlcmFoc2lhYW4gYXRhdSBzZW5zaXRpdml0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NDM0NTQ4NjgyNDcwODUxNTgzIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbWJhY2Egc2VtdWEgYWNhcmEga2FsZW5kYXIgeWFuZyB0ZXJzaW1wYW4gcGFkYSB0ZWxlZm9uIGFuZGEsIHRlcm1hc3VrIG1pbGlrIHJha2FuIGF0YXUgcmFrYW4gc2VrZXJqYS4gSW5pIGJvbGVoIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBiZXJrb25nc2kgYXRhdSBtZW55aW1wYW4gZGF0YSBrYWxlbmRhciBhbmRhLCB0YW5wYSBtZW5naXJhIGtlcmFoc2lhYW4gYXRhdSBzZW5zaXRpdml0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsZW5kYXIiIG1zZ2lkPSI4NDM4ODc0NzU1MTkzODI1NjQ3Ij4idGFtYmFoIGF0YXUgdWJhaCBzdWFpIGFjYXJhIGthbGVuZGFyIGRhbiBoYW50YXIgZS1tZWwga2VwYWRhIHRldGFtdSB0YW5wYSBwZW5nZXRhaHVhbiBwZW1pbGlrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5hbWJhaCwgbWVuZ2FsaWgga2VsdWFyLCBtZW5ndWJhaCBhY2FyYSB5YW5nIGFuZGEgYm9sZWggdWJhaCBzdWFpIHBhZGEgdGFibGV0IGFuZGEsIHRlcm1hc3VrIG1pbGlrIHJha2FuIGF0YXUgcmFrYW4gc2VrZXJqYS4gSW5pIGJvbGVoIG1lbWJlbmFya2FuIGFwbCBtZW5naGFudGFyIG1lc2VqIHlhbmcga2VsaWhhdGFuIHNlcGVydGkgZGF0YW5nIGRhcmkgcGVtaWxpayBrYWxlbmRhciBhdGF1IG1lbmd1YmFoIHN1YWkgYWNhcmEgdGFucGEgcGVuZ2V0YWh1YW4gcGVtaWxpay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+Ik1lbWJlbmFya2FuIGFwbCBtZW5hbWJhaCwgbWVuZ2FsaWgga2VsdWFyLCBtZW5ndWJhaCBhY2FyYSB5YW5nIGFuZGEgYm9sZWggdWJhaCBzdWFpIHBhZGEgdGVsZWZvbiBhbmRhLCB0ZXJtYXN1ayBtaWxpayByYWthbiBhdGF1IHJha2FuIHNla2VyamEuIEluaSBib2xlaCBtZW1iZW5hcmthbiBhcGwgbWVuZ2hhbnRhciBtZXNlaiB5YW5nIGtlbGloYXRhbiBzZXBlcnRpIGRhdGFuZyBkYXJpIHBlbWlsaWsga2FsZW5kYXIgYXRhdSBtZW5ndWJhaCBzdWFpIGFjYXJhIHRhbnBhIHBlbmdldGFodWFuIHBlbWlsaWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI4Njg4MzM0OTc0MDM2ODIzMzMwIj4iZ3VuYWthbiBzdW1iZXIgbG9rYXNpIG9sb2stb2xvayB1bnR1ayBwZW5ndWppYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI1ODA4NzExMDM5NDgyMDUxODI0Ij4iQnVhdCBzdW1iZXIgbG9rYXNpIHBhbHN1IHVudHVrIG1lbmd1amkgYXRhdSBtZW1hc2FuZyBwZW1iZWthbCBsb2thc2kgYmFoYXJ1LiBJbmkgbWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbWJhdGFsa2FuIGxva2FzaSBkYW4vYXRhdSBzdGF0dXMgeWFuZyBkaWtlbWJhbGlrYW4gb2xlaCBzdW1iZXIgbG9rYXNpIGxhaW4gc2VwZXJ0aSBHUFMgYXRhdSBwZW1iZWthbCBsb2thc2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSIyODM2MzA4MDc2NzIwNTUzODM3Ij4iYWtzZXMgcGVyaW50YWggdGFtYmFoYW4gcGVtYmVrYWwgbG9rYXNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iNTk0NTE2NjY0MjMzNTgwMDc2MyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5nYWtzZXMgYXJhaGFuIHBlbWJla2FsIGxva2FzaSB0YW1iYWhhbi4gSW5pIGJvbGVoIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBjYW1wdXIgdGFuZ2FuIGRlbmdhbiBvcGVyYXNpIEdQUyBhdGF1IHN1bWJlciBsb2thc2kgbGFpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iNjU3ODEwMTE5OTgyNTE5Mzg3MyI+ImtlYmVuYXJhbiB1bnR1ayBtZW1hc2FuZyBwZW1iZWthbCBsb2thc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjkwNjYxNDYxMjA0NzA1OTE1MDkiPiJCdWF0IHN1bWJlciBsb2thc2kgcGFsc3UgdW50dWsgbWVuZ3VqaSBhdGF1IG1lbWFzYW5nIHBlbWJla2FsIGxva2FzaSBiYWhhcnUuIEluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYmF0YWxrYW4gbG9rYXNpIGRhbi9hdGF1IHN0YXR1cyB5YW5nIGRpa2VtYmFsaWthbiBvbGVoIHN1bWJlciBsb2thc2kgbGFpbiBzZXBlcnRpIEdQUyBhdGF1IHBlbWJla2FsIGxva2FzaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjExOTE4OTgwNjE5NjUyNzMzNzIiPiJsb2thc2kgdGVwYXQgKEdQUyBkYW4gYmVyYXNhc2thbiByYW5na2FpYW4pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iNTI5NTA0NzU2MzU2NDk4MTI1MCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5kYXBhdGthbiBsb2thc2kgdGVwYXQgYW5kYSBtZW5nZ3VuYWthbiBTaXN0ZW0gS2VkdWR1a2FuIEdsb2JhbCAoR1BTKSBhdGF1IHN1bWJlciBsb2thc2kgcmFuZ2thaWFuIHNlcGVydGkgbWVuYXJhIHNlbCBkYW4gV2ktRmkuIFBlcmtoaWRtYXRhbiBsb2thc2kgaW5pIG1lc3RpIGRpaGlkdXBrYW4gZGFuIHRlcnNlZGlhIHBhZGEgcGVyYW50aSBhbmRhIHVudHVrIGtlZ3VuYWFuIGFwbC4gQXBsIGJvbGVoIG1lbmdndW5ha2FuIGluaSB1bnR1ayBtZW5lbnR1a2FuIHRlbXBhdCBhbmRhIGJlcmFkYSBkYW4gbXVuZ2tpbiBtZW5nZ3VuYWthbiBrdWFzYSBiYXRlcmkgdGFtYmFoYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjQ4ODc4OTUzNjIzNTQyMzk2MjgiPiJsb2thc2kgYW5nZ2FyYW4gKGJlcmFzYXNrYW4gcmFuZ2thaWFuKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5kYXBhdGthbiBsb2thc2kgYW5nZ2FyYW4gYW5kYS4gTG9rYXNpIGluaSBkaXBlcm9sZWhpIG9sZWggcGVya2hpZG1hdGFuIGxva2FzaSBtZW5nZ3VuYWthbiBzdW1iZXIgbG9rYXNpIHJhbmdrYWlhbiBzZXBlcnRpIG1lbmFyYSBzZWwgZGFuIFdpLUZpLiBQZXJraGlkbWF0YW4gbG9rYXNpIGluaSBtZXN0aSBkaWhpZHVwa2FuIGRhbiB0ZXJzZWRpYSBwYWRhIHBlcmFudGkgYW5kYSB1bnR1ayBrZWd1bmFhbiBhcGwuIEFwbCBib2xlaCBtZW5nZ3VuYWthbiBpbmkgdW50dWsgbWVuZW50dWthbiBzZWNhcmEgYW5nZ2FyYW4gdGVtcGF0IGFuZGEgYmVyYWRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIyMzYzOTY5NjQxNzkyMzg4OTQ3Ij4iYWtzZXMgU3VyZmFjZUZsaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2d1bmFrYW4gY2lyaSBwZXJpbmdrYXQgcmVuZGFoIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImJhY2EgcGVuaW1iYWwgYmluZ2thaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJNZW1iZW5hcmthbiBhcGwgbWVtYmFjYSBrYW5kdW5nYW4gcGVuaW1iYWwgYmluZ2thaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJha3NlcyBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmdndW5ha2FuIGNpcmkgcGVyaW5na2F0IHJlbmRhaCBJbnB1dEZsaW5nZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJrb25maWd1cmFzaWthbiBwYXBhcmFuIFdpZmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2tvbmZpZ3VyYXNpIGRhbiBtZW55YW1idW5nIGtlIHBhcGFyYW4gV2lmaS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9jYXB0dXJlQXVkaW9PdXRwdXQgKDY4NTcxMzQ0OTg0MDIzNDY3MDgpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfY2FwdHVyZUF1ZGlvT3V0cHV0ICg2MjEwNTk3NzU0MjEyMjA4ODUzKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfY2FwdHVyZVZpZGVvT3V0cHV0ICgyMjQ2ODI4NzczNTg5MDk0MDIzKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2NhcHR1cmVWaWRlb091dHB1dCAoMzU5NDgxNjU4MDM0MTQ5ODYwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0ICg3ODE1Mzk4OTY5MzAzMzgyMDE2KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCAoMjc3OTc5MzA2NDcwOTM1MDI4OSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjYwOTU4NTk5MzcwNjkxNDYwODYiPiJ0dWthciB0ZXRhcGFuIGF1ZGlvIGFuZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBzdWFpIHRldGFwYW4gYXVkaW8gZ2xvYmFsIHNlcGVydGkga2VsYW50YW5nYW4gZGFuIHBlbWJlc2FyIHN1YXJhIG1hbmEgZGlndW5ha2FuIHVudHVrIG91dHB1dC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+InJha2FtIGF1ZGlvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lcmFrYW0gYXVkaW8gbWVuZ2d1bmFrYW4gbWlrcm9mb24uIEtlYmVuYXJhbiBpbmkgbWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lcmFrYW0gYXVkaW8gcGFkYSBiaWxhLWJpbGEgbWFzYSB0YW5wYSBwZW5nZXNhaGFuIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4iYW1iaWwgZ2FtYmFyIGRhbiB2aWRlbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2FtYmlsIGdhbWJhciBkYW4gdmlkZW8gbWVuZ2d1bmFrYW4ga2FtZXJhLiBLZWJlbmFyYW4gaW5pIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5nZ3VuYWthbiBrYW1lcmEgcGFkYSBiaWxhLWJpbGEgbWFzYSB0YW5wYSBwZW5nZXNhaGFuIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4ibHVtcHVoa2FuIExFRCBwZW51bmp1ayBwZW5naGFudGFyYW4gc2VtYXNhIGthbWVyYSBzZWRhbmcgZGlndW5ha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iNDc2NDU4NTQ2NTQ4MDI5NTM0MSI+Ik1lbWJlbmFya2FuIGFwbGlrYXNpIHNpc3RlbSB5YW5nIGRpcHJhcGFzYW5nIHVudHVrIG1lbHVtcHVoa2FuIExFRCBwZW51bmp1ayBwZW5nZ3VuYWFuIGthbWVyYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyOTYxMjkyMjA1NzY0NDg4MzA0Ij4ibWVsdW1wdWhrYW4gdGFibGV0IHNlY2FyYSBrZWthbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MzM3ODE3MDkzMzI2MzcwNTM3Ij4ibHVtcHVoa2FuIHRlbGVmb24gc2VjYXJhIGtla2FsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMzQ4MTg4MDgwMDE2OTk1MzAiPiJNZW1iZW5hcmthbiBhcGwgbWVsdW1wdWhrYW4ga2VzZWx1cnVoYW4gdGFibGV0IHNlY2FyYSBrZWthbC4gSW5pIGFtYXQgYmVyYmFoYXlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc4ODkwMzI5NzYyNzI4MzA5OSI+Ik1lbWJlbmFya2FuIGFwbCBtZWx1bXB1aGthbiBrZXNlbHVydWhhbiB0ZWxlZm9uIHNlY2FyYSBrZWthbC4gSW5pIGFtYXQgYmVyYmFoYXlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDM2NjM0OTcyNTYxNzk1MDAyIj4ibWVtYWtzYSB0YWJsZXQgYnV0IHNlbXVsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg5ODU2MDg3MjQ2MjYzODI0MiI+InBha3NhIHRlbGVmb24gYnV0IHNlbXVsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODE3MjA1NjE4MDA2MzcwMDc0MSI+Ik1lbWJlbmFya2FuIGFwbCBtZW1ha3NhIHRhYmxldCB1bnR1ayBidXQgc2VtdWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiJNZW1iZW5hcmthbiBhcGwgbWVtYWtzYSB0ZWxlZm9uIHVudHVrIGJ1dCBzZW11bGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjI5MjczNjE1Mzc5NDI1OTE4NDEiPiJha3NlcyBzaXN0ZW0gZmFpbCBzdG9yYW4gVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQwMjMwNTA0OTg5MDk1MzgxMCI+ImFrc2VzIHNpc3RlbSBmYWlsIEthZCBTRCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIG1zZ2lkPSIxODI5MjkwNzAxNjU4OTkyMzQ3Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbGVrYXBrYW4gZGFuIG1lbnlhaGxla2Fwa2FuIHNpc3RlbSBmYWlsIHVudHVrIHN0b3JhbiBib2xlaCBhbGloLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyMjc4MTk1ODI2MjQ5MDQ5NzIiPiJwYWRhbWthbiBzdG9yYW4gVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjI1ODI2OTg2MzkyNzQwNTYiPiJwYWRhbWthbiBrYWQgU0QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIG1zZ2lkPSI4Nzg0MjY4MjQ2Nzc5MTk4NjI3Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWZvcm1hdGthbiBzdG9yYW4gYm9sZWggYWxpaC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzQxMTMzODYzMjAwMjE5Mzg0NiI+ImRhcGF0a2FuIG1ha2x1bWF0IHRlbnRhbmcgc3RvcmFuIGRhbGFtYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2FjY2VzcyIgbXNnaWQ9IjMwOTQ1NjM4NDQ1OTM4Nzg1NDgiPiJNZW1iZW5hcmthbiBhcGwgbWVuZGFwYXRrYW4gbWFrbHVtYXQgZGFyaSBzdG9yYW4gZGFsYW1hbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfY3JlYXRlIiBtc2dpZD0iNjQxNDc1NzIzNDc4OTMzNjMyNyI+ImJ1YXQgc3RvcmFuIGRhbGFtYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2NyZWF0ZSIgbXNnaWQ9IjQ1NTg4NjkyNzM1ODU4NTY4NzYiPiJNZW1iZW5hcmthbiBhcGwgbWVtYnVhdCBzdG9yYW4gZGFsYW1hbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjUyNjkyODMyODMwMTYxODAyMiI+Im1lbXVzbmFoa2FuIHN0b3JhbiBkYWxhbWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19kZXN0cm95IiBtc2dpZD0iNzIxODc0OTI4NjE0NTUyNjUzNyI+Ik1lbWJlbmFya2FuIGFwbCBtZW11c25haGthbiBzdG9yYW4gZGFsYW1hbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9Ijg4Nzc5OTgxMDE5NDQ5OTkzODYiPiJsZWthcC9ueWFobGVrYXAgc3RvcmFuIGRhbGFtYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSIzNDUxMzYwMTE0OTAyNDkwOTI5Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbGVrYXBrYW4vbWVueWFobGVrYXBrYW4gc3RvcmFuIGRhbGFtYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX3JlbmFtZSIgbXNnaWQ9Ijc0OTY2MzM5NTQwODA0NzI0MTciPiJuYW1ha2FuIHNlbXVsYSBzdG9yYW4gZGFsYW1hbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfcmVuYW1lIiBtc2dpZD0iMTc5NDc1NzU4ODQ3MjEyNzY3NSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5hbWFrYW4gc2VtdWxhIHN0b3JhbiBkYWxhbWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJrYXdhbCBnZXRhcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2F3YWwgcGVuZ2dldGFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJtZW5nYXdhbCBsYW1wdSBzdWx1aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iTWVtYmVuYXJrYW4gYXBsIG1lbmdhd2FsIGxhbXB1IHN1bHVoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNiIiBtc2dpZD0iMTExMzQ1MzQzMDY0NTQwMjcyMyI+InVydXMgcGlsaWhhbiBkYW4ga2ViZW5hcmFuIHVudHVrIHBlcmFudGkgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNiIiBtc2dpZD0iNzc3NjE1NTQzMDIxODIzOTgzMyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndXJ1c2thbiBwaWxpaGFuIGRhbiBrZWJlbmFyYW4gdW50dWsgcGVyYW50aSBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4ibGFrc2FuYWthbiBwcm90b2tvbCBNVFAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNdHAiIG1zZ2lkPSI2NTMyOTYxMjAwNDg2NzkxNTcwIj4iTWVtYmVuYXJrYW4gYWtzZXMga2VwYWRhIHBlbWFjdSBpbnRpIE1UUCB1bnR1ayBtZWxha3NhbmFrYW4gcHJvdG9rb2wgVVNCIE1UUC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI0MTQ4MjkwODYwNDAwNjU5MTQ2Ij4idWppIHBlcmtha2FzYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNjU5Nzk2NDE5MTIwODAxNjYwNSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5nYXdhbCBwZWxiYWdhaSBwZXJzaXNpYW4gdW50dWsgdHVqdWFuIHBlbmd1amlhbiBwZXJrYWthc2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+InBhbmdnaWwgdGVydXMgbm9tYm9yIHRlbGVmb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWFuZ2dpbCBub21ib3IgdGVsZWZvbiB0YW5wYSBjYW1wdXIgdGFuZ2FuIGFuZGEuIEluaSBtdW5na2luIG1lbnllYmFia2FuIGNhaiBhdGF1IHBhbmdnaWxhbiB5YW5nIGRpIGx1YXIgamFuZ2thYW4uIEFwbCBoYXNhZCBib2xlaCBtZW55ZWJhYmthbiBhbmRhIGtlcnVnaWFuIHdhbmcgZGVuZ2FuIG1lbWJ1YXQgcGFuZ2dpbGFuIHRhbnBhIHBlbmdlc2FoYW4gYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iNDE5ODM0OTIxMTEwODQ5Nzg3OSI+InBhbmdnaWwgdGVydXMgc2ViYXJhbmcgbm9tYm9yIHRlbGVmb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYW5nZ2lsIG1hbmEtbWFuYSBub21ib3IgdGVsZWZvbiwgdGVybWFzdWsgbm9tYm9yIGtlY2VtYXNhbiwgdGFucGEgY2FtcHVyIHRhbmdhbiBhbmRhLiBBcGwgaGFzYWQgYm9sZWggbWVtYnVhdCBwYW5nZ2lsYW4geWFuZyB0aWRhayBwZXJsdSBkYW4gc2FsYWggZGkgc2lzaSB1bmRhbmctdW5kYW5nIGtlIHBlcmtoaWRtYXRhbiBrZWNlbWFzYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDg0MjU3Njk5NDE0NDYwNDgyMSI+Im11bGFrYW4gdGVydXMgcGVyc2VkaWFhbiB0YWJsZXQgQ0RNQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NjA0ODQ4MDk1MzE1NDIxNDI1Ij4ibWVtdWxha2FuIHBlcnNlZGlhYW4gdGVsZWZvbiBDRE1BIHNlY2FyYSBsYW5nc3VuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBtc2dpZD0iMTk5NDE5MzUzODgwMjMxNDE4NiI+Ik1lbWJlbmFya2FuIGFwbCBtZW11bGFrYW4gcGVydW50dWthbiBDRE1BLiBBcGwgaGFzYWQgYm9sZWggbWVtdWxha2FuIHBlcnVudHVrYW4gQ0RNQSB5YW5nIHRpZGFrIHBlcmx1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iNzc4NTQwODI1MzM2NDMzNTc0MCI+Imthd2FsIHBlbWJlcml0YWh1YW4ga2VtYXMga2luaSBsb2thc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSIxMTIwNzQxNTU3ODkxNDM4ODc2Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmRheWFrYW4vbWVsdW1wdWhrYW4gcGVtYmVyaXRhaHVhbiBrZW1hcyBraW5pIGxva2FzaSBkYXJpIHJhZGlvLiBCdWthbiB1bnR1ayBrZWd1bmFhbiBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9Ijc4NTUyNTk0NjEyNjg3MzQ5MTQiPiJha3NlcyBzaWZhdCBkYWZ0YXIgbWFzdWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9IjQwMjQ1MjY5Njg2MzAxOTQxMjgiPiJNZW1iZW5hcmthbiBhcGwgbWVtYmFjYS9tZW51bGlzIGFrc2VzIGtlcGFkYSBzaWZhdCB5YW5nIGRpbXVhdCBuYWlrIG9sZWggcGVya2hpZG1hdGFuIGNoZWNraW4uIEJ1a2FuIHVudHVrIGRpZ3VuYWthbiBvbGVoIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRHYWRnZXQiIG1zZ2lkPSI3NzY5MDUzMzkwMTU4NjM0NzEiPiJwaWxpaCB3aWRnZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kR2FkZ2V0IiBtc2dpZD0iODI2MTMyNjkzODU5OTA0OTI5MCI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1iZXJpdGFodSBzaXN0ZW0gd2lkZ2V0IG1hbmEgeWFuZyBib2xlaCBkaWd1bmFrYW4gb2xlaCBhcGwgeWFuZyBtYW5hLiBBcGwgZGVuZ2FuIGtlYmVuYXJhbiBpbmkgYm9sZWggbWVtYmVyaSBha3NlcyBrZXBhZGEgZGF0YSBwZXJpYmFkaSBrZXBhZGEgYXBsIGxhaW4uIEJ1a2FuIHVudHVrIGRpZ3VuYWthbiBvbGVoIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSI4NDIzOTIzNzc3NjU5MjkyMjI4Ij4idWJhaCBzdWFpIGtlYWRhYW4gdGVsZWZvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSIxMDI5ODc3NTI5MDA3Njg2NzMyIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmdhd2FsIGNpcmktY2lyaSB0ZWxlZm9uIHBlcmFudGkuIEFwbCBkZW5nYW4ga2ViZW5hcmFuIGluaSBib2xlaCBtZW51a2FyIHJhbmdrYWlhbiwgbWVuZ2hpZHVwa2FuIGRhbiBtZW1hdGlrYW4gcmFkaW8gdGVsZWZvbiBkYW4gc2ViYWdhaW55YSB0YW5wYSBtZW1iZXJpdGFodSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSI5MTc4MjI4NTI0NTA3NjEwNDg2Ij4iYmFjYSBzdGF0dXMgZGFuIGlkZW50aXRpIHRlbGVmb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjE2MzkyMTI3NzE4MjYxMjU1MjgiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2Frc2VzIGNpcmkgdGVsZWZvbiBwYWRhIHBlcmFudGkuIEtlYmVuYXJhbiBpbmkgbWVtYm9sZWhrYW4gYXBsIG1lbmVudHVrYW4gbm9tYm9yIHRlbGVmb24gZGFuIElEIHBlcmFudGksIHNhbWEgYWRhIHBhbmdnaWxhbiBha3RpZiBkYW4gbm9tYm9yIGphdWggeWFuZyBkaWh1YnVuZ2thbiBkZW5nYW4gcGFuZ2dpbGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MzE3MzE0MzUwMTE0OTUwMTUiPiJtZW5naGFsYW5nIHRhYmxldCBkYXJpcGFkYSB0aWR1ciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzM0ODAxODc5NDE0OTYxMzAiPiJoYWxhbmcgdGVsZWZvbiBkYXJpcGFkYSB0aWR1ciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzExMzE5ODI0NDAwNDQ3ODY4Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmdoYWxhbmcgdGFibGV0IGRhcmlwYWRhIHRpZHVyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODU1OTEwMDY3NzM3MjkyODc1NCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5naGFsYW5nIHRlbGVmb24gZGFyaXBhZGEgdGlkdXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc4NzAzNDcyMjYxNjM1MDQxNyI+Im1lbmdoaWR1cGthbiBhdGF1IG1lbWF0aWthbiBrdWFzYSB0YWJsZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RldmljZVBvd2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDkyODYyMjQ3MDk4MDk0MzIwNiI+Imt1YXNha2FuIHRlbGVmb24gaGlkdXAgYXRhdSBtYXRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2hpZHVwa2FuIGF0YXUgbWVtYXRpa2FuIHRhYmxldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjYwMzcwNTczNDg0NjMxMzEwMzIiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2hpZHVwa2FuIGF0YXUgbWVtYXRpa2FuIHRlbGVmb24uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mYWN0b3J5VGVzdCIgbXNnaWQ9IjM3MTUyMjU0OTI2OTY0MTYxODciPiJqYWxhbmthbiBkYWxhbSBtb2QgdWppYW4ga2lsYW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NTIwNTkzMTgzNTk2NTMwOTEiPiJKYWxhbmthbiBzZWJhZ2FpIHVqaWFuIHBlbmdlbHVhciBwZXJpbmdrYXQgcmVuZGFoLCBtZW1iZW5hcmthbiBha3NlcyBwZW51aCBrZXBhZGEgcGVya2FrYXNhbiB0YWJsZXQuIEhhbnlhIHRlcnNlZGlhIGFwYWJpbGEgdGFibGV0IGRpamFsYW5rYW4gZGFsYW0gbW9kIHVqaWFuIHBlbmdlbHVhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxMzY2NDQ5OTAzMTkyNDQ4MDIiPiJNZW5qYWxhbmthbiBzZWJhZ2FpIHVqaWFuIHBlbmdpbGFuZyBwZXJpbmdrYXQgcmVuZGFoLCBtZW1iZW5hcmthbiBha3NlcyBwZW51aCBrZXBhZGEgcGVya2FrYXNhbiB0ZWxlZm9uLiBIYW55YSB0ZXJzZWRpYSBhcGFiaWxhIHRlbGVmb24gZGlqYWxhbmthbiBkYWxhbSBtb2QgdWppYW4gcGVuZ2lsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0V2FsbHBhcGVyIiBtc2dpZD0iNjYyNzE5MjMzMzM3MzQ2NTE0MyI+InRldGFwa2FuIGtlcnRhcyBkaW5kaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVyIiBtc2dpZD0iNzM3MzQ0NzkyMDk3NzYyNDc0NSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ldGFwa2FuIGtlcnRhcyBkaW5kaW5nIHNpc3RlbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iMzI3ODYwODE2NTk3NzczNjUzOCI+ImxhcmFza2FuIHNhaXoga2VydGFzIGRpbmRpbmcgYW5kYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iODIzNTc4NDM4NDIyMzczMDA5MSI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ldGFwa2FuIHBlbWJheWFuZyBzYWl6IGtlcnRhcyBkaW5kaW5nIHNpc3RlbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hc3RlckNsZWFyIiBtc2dpZD0iMjMxNTc1MDQyMzEzOTY5NzM5NyI+Im1lbmV0YXBrYW4gc2VtdWxhIHNpc3RlbSBrZXBhZGEgbGFsYWkga2lsYW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIzNjY1MzgwNDkyNjMzOTEwMjI2Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmV0YXBrYW4gc2VtdWxhIHNpc3RlbSBrZXBhZGEgdGV0YXBhbiBraWxhbmcgc2VwZW51aG55YSwgbWVtYWRhbSBzZW11YSBkYXRhLCBrb25maWd1cmFzaSwgZGFuIGFwbCB5YW5nIGRpcGFzYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZSIgbXNnaWQ9IjIwMjE2MTQ4Mjk1OTE3NzU2NDYiPiJ0ZXRhcGthbiBtYXNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTg5NjM0MTQzODE1MTE1Mjg4MSI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW51a2FyIG1hc2EgamFtIHRhYmxldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg1NTcwMjczMDczODAyMCI+Ik1lbWJvbGVoa2FuIGFwbCB1bnR1ayBtZW51a2FyIHdha3R1IGphbSB0ZWxlZm9uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZVpvbmUiIG1zZ2lkPSIyOTQ1MDc5ODAxMDEzMDc3MzQwIj4idGV0YXBrYW4gem9uIHdha3R1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE2NzY5ODM3MTIzMTU4Mjc2NDUiPiJNZW1iZW5hcmthbiBhcGwgbWVudWthciB6b24gd2FrdHUgdGFibGV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQ5OTk0MzQ4ODQzNjYzMzM5OCI+Ik1lbWJlbmFya2FuIGFwbCBtZW51a2FyIHpvbiB3YWt0dSB0ZWxlZm9uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iNDgyOTI2MjM0OTY5MTM4Njk4NiI+ImJlcnRpbmRhayBzZWJhZ2FpIFBlcmtoaWRtYXRhblBlbmd1cnVzQWthdW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSIxOTQ4NDU1NTUyMzMzNjE1OTU0Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWJ1YXQgcGFuZ2dpbGFuIGtlIFBlbmdlc2FoIEFrYXVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QWNjb3VudHMiIG1zZ2lkPSIxMDg2Nzk1NDY3NzYwMTIyMTE0Ij4iY2FyaSBha2F1biBwYWRhIHBlcmFudGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc0MTQ5NjUzNDc2OTY2MDAyNyI+Ik1lbWJlbmFya2FuIGFwbCBtZW5kYXBhdGthbiBzZW5hcmFpIGFrYXVuIHlhbmcgZGlrZW5hbGkgb2xlaCB0YWJsZXQuIEluaSBtdW5na2luIHRlcm1hc3VrIHNlYmFyYW5nIGFrYXVuIHlhbmcgZGlidWF0IG9sZWggYXBsaWthc2kgeWFuZyB0ZWxhaCBhbmRhIHBhc2FuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiJNZW1iZW5hcmthbiBhcGwgbWVuZGFwYXRrYW4gc2VuYXJhaSBha2F1biB5YW5nIGRpa2VuYWxpIG9sZWggdGVsZWZvbi4gSW5pIG11bmdraW4gdGVybWFzdWsgc2ViYXJhbmcgYWthdW4geWFuZyBkaWJ1YXQgb2xlaCBhcGxpa2FzaSB5YW5nIHRlbGFoIGFuZGEgcGFzYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4iYnVhdCBha2F1biBkYW4gdGV0YXBrYW4ga2F0YSBsYWx1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjU0NzIxMjQyOTY5MDg5NzcyNjAiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2d1bmFrYW4ga2Vib2xlaGFuIHBlbmdlc2FoIGFrYXVuIFBlbmd1cnVzIEFrYXVuLCB0ZXJtYXN1ayBtZW1idWF0IGFrYXVuIGRhbiBtZW5kYXBhdGthbiBzZXJ0YSBtZW5ldGFwa2FuIGthdGEgbGFsdWFubnlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4idGFtYmFoIGF0YXUgYWxpaCBrZWx1YXIgYWthdW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9Ijg2OTgyOTU2MjU0ODgyOTI1MDYiPiJNZW1iZW5hcmthbiBhcGwgbWVsYWtzYW5ha2FuIG9wZXJhc2kgc2VwZXJ0aSBtZW5hbWJhaCBkYW4gbWVuZ2FsaWgga2VsdWFyIGFrYXVuIGRhbiBtZW1hZGFta2FuIGthdGEgbGFsdWFubnlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSIyMzU0ODEzOTYxNjM4Nzc2NDIiPiJndW5hIGFrYXVuIHBhZGEgcGVyYW50aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iNzk4NDIyNzE0NzQwMzM0NjQyMiI+Ik1lbWJlbmFya2FuIGFwbCBtZW1pbnRhIHRva2VuIHBlbmdlc2FoYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4ibGloYXQgc2FtYnVuZ2FuIHJhbmdrYWlhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiJNZW1iZW5hcmthbiBhcGwgbWVsaWhhdCBtYWtsdW1hdCB0ZW50YW5nIHNhbWJ1bmdhbiByYW5na2FpYW4gc2VwZXJ0aSByYW5na2FpYW4gbWFuYSB5YW5nIHd1anVkIGRhbiBiZXJzYW1idW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSI4MDE4NzU4MTM2NDA0MzIzNjU4Ij4iYWtzZXMgcmFuZ2thaWFuIHBlbnVoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSIzNDAzMDYyMTg3Nzc5NzI0MTg1Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWJ1YXQgc29rZXQgcmFuZ2thaWFuIGRhbiBtZW5nZ3VuYWthbiBwcm90b2tvbCByYW5na2FpYW4gdGVyc3VhaS4gUGVueWVtYWsgaW1iYXMgZGFuIGFwbGlrYXNpIGxhaW4gbWVueWVkaWFrYW4gY2FyYSB1bnR1ayBtZW5naGFudGFyIGRhdGEga2UgaW50ZXJuZXQsIGphZGkga2ViZW5hcmFuIGluaSB0aWRhayBkaXBlcmx1a2FuIHVudHVrIG1lbmdoYW50YXIgZGF0YSBrZSBpbnRlcm5ldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MDU2NjAxNTk2NzU3NTE4OTYiPiJtZW5ndWJhaC9tZW1pbnRhcyB0ZXRhcGFuIGRhbiBsYWx1IGxpbnRhcyByYW5na2FpYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTMzMzc5ODg4NjQxMjcxNDE5MyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW51a2FyIHRldGFwYW4gcmFuZ2thaWFuIGRhbiB1bnR1ayBtZW1pbnRhcyBzZXJ0YSBtZW1lcmlrc2Egc2VtdWEgdHJhZmlrIHJhbmdrYWlhbiwgY29udG9obnlhIHVudHVrIG1lbnVrYXIgcHJva3NpIGRhbiBwb3J0IG1hbmEtbWFuYSBBUE4uIEFwbCBoYXNhZCBib2xlaCBtZW1hbnRhdSwgbWVuZ3ViYWggaGFsYSwgYXRhdSBtZW5ndWJhaCBzdWFpIHBha2V0IHJhbmdrYWlhbiB0YW5wYSBwZW5nZXRhaHVhbiBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iOTU4ODg0MjkxNDU0MzI3MzA5Ij4idHVrYXIga2VzYW1idW5nYW4gcmFuZ2thaWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBrZWFkYWFuIGtlc2FtYnVuZ2FuIHJhbmdrYWlhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iNTk1MjU4NDk2NDM3MzAxNzk2MCI+InR1a2FyIGtlc2FtYnVuZ2FuIGJlcnRhbWJhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iMTUyNDQ0MTM0NDQxMjMxOTc4MCI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBrZWFkYWFuIGtlc2FtYnVuZ2FuIHJhbmdrYWlhbiB0YW1iYXRhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjE0MDA2NjYwMTI2NzE2NDg3NDEiPiJ0dWthciB0ZXRhcGFuIHBlbmdndW5hYW4gZGF0YSBsYXRhciBiZWxha2FuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjUzNDc3Mjk1Nzg0Njg3NDQzNzkiPiJNZW1iZW5hcmthbiBhcGwgbWVudWthciB0ZXRhcGFuIHBlbmdndW5hYW4gZGF0YSBsYXRhciBiZWxha2FuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUyMDIwMTI5NDkyNDcwNDAwMTEiPiJsaWhhdCBzYW1idW5nYW4gV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MDAyNzk4MDc3Mzg3ODAzNzI2Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbGloYXQgbWFrbHVtYXQgdGVudGFuZyByYW5na2FpYW4gV2ktRmksIHNlcGVydGkgc2FtYSBhZGEgV2ktRmkgZGlkYXlha2FuIGRhbiBuYW1hIHBlcmFudGkgV2ktRmkgeWFuZyBkaXNhbWJ1bmdrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI2NTUwNjQxMTg4NzQ5MTI4MDM1Ij4ic2FtYnVuZyBkYW4gcHV0dXNrYW4gZGFyaSBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjcxMzc5NTAyOTczODYxMjc1MzMiPiJNZW1iZW5hcmthbiBhcGwgbWVueWFtYnVuZyBrZSBkYW4gbWVtdXR1c2thbiBzYW1idW5nYW4gZGFyaSB0aXRpayBjYXBhaWFuIFdpLUZpIGRhbiBtZW1idWF0IHBlcnViYWhhbiBrZXBhZGEga29uZmlndXJhc2kgcGVyYW50aSB1bnR1ayByYW5na2FpYW4gV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4iYmVuYXJrYW4gcGVuZXJpbWFhbiBXaS1GaSBNdWx0aXNpYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiJNZW1iZW5hcmthbiBhcGwgbWVuZXJpbWEgcGFrZXQgeWFuZyBkaWhhbnRhciBrZXBhZGEgc2VtdWEgcGVyYW50aSBwYWRhIHJhbmdrYWlhbiBXaS1GaSBtZW5nZ3VuYWthbiBhbGFtYXQgbXVsdGlzaWFyLCBidWthbiBoYW55YSB0YWJsZXQgYW5kYS4gQXBsIG1lbmdndW5ha2FuIGxlYmloIGt1YXNhIGJlcmJhbmRpbmcgbW9kIGJ1a2FuIG11bHRpc2lhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUxOTQ5NzA2MDI1MzQ5OTI2Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmVyaW1hIHBha2V0IHlhbmcgZGloYW50YXIga2VwYWRhIHNlbXVhIHBlcmFudGkgcGFkYSByYW5na2FpYW4gV2ktRmkgbWVuZ2d1bmFrYW4gYWxhbWF0IG11bHRpc2lhciwgYnVrYW4gaGFueWEgdGVsZWZvbiBhbmRhLiBJYSBtZW5nZ3VuYWthbiBsZWJpaCBrdWFzYSBiZXJiYW5kaW5nIG1vZCBidWthbiBtdWx0aXNpYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGhBZG1pbiIgbXNnaWQ9IjYwMDY5NjczNzM5MzU5MjY2NTkiPiJha3NlcyB0ZXRhcGFuIEJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmdrb25maWd1cmFzaWthbiB0YWJsZXQgQmx1ZXRvb3RoIHNldGVtcGF0IGRhbiBtZW5lbXVpIHNlcnRhIGJlcnBhc2FuZ2FuIGRlbmdhbiBwZXJhbnRpIGphdWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTMxNjgyMTU5MzMxNTQyMTM3Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmdrb25maWd1cmFzaWthbiB0ZWxlZm9uIEJsdWV0b290aCBzZXRlbXBhdCBkYW4gbWVuZW11aSBzZXJ0YSBiZXJwYXNhbmdhbiBkZW5nYW4gcGVyYW50aSBqYXVoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjQxOTU5MDcwMTA2MTAyMDU3MDMiPiJzYW1idW5nIGRhbiBwdXR1c2thbiBzYW1idW5nYW4gV2lNQVgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNjM2MDEwMjg3NzI2MTk3ODg4NyI+Ik1lbWJlbmFya2FuIGFwbCBtZW5lbnR1a2FuIHNhbWEgYWRhIFdpTWFYIGRpZGF5YWthbiBkYW4gbWFrbHVtYXQgdGVudGFuZyBzZWJhcmFuZyByYW5na2FpYW4gV2lNYVggeWFuZyBkaXNhbWJ1bmdrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMjQwNTA0MjI2NzEzMTQ5NjU3OSI+IlR1a2FyIGtlYWRhYW4gV2lNQVgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMTU2NDU2NTA0MDg0MjAxODA1Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnlhbWJ1bmdrYW4gdGFibGV0IGtlIGRhbiBtZW55YWhzYW1idW5na2FuIHRhYmxldCBkYXJpIHJhbmdrYWlhbiBXaU1hWC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaW1heFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk3MDI1MDQzMDA0OTIzNzk4Ij4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbnlhbWJ1bmdrYW4gdGVsZWZvbiBrZSBkYW4gbWVueWFoc2FtYnVuZyB0ZWxlZm9uIGRhcmkgcmFuZ2thaWFuIFdpTWFYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoIiBtc2dpZD0iNjEyNzc2OTMzNjMzOTI3NjgyOCI+ImJlcnBhc2FuZ2FuIGRlbmdhbiBwZXJhbnRpIEJsdWV0b290aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+Ik1lbWJlbmFya2FuIGFwbCBtZWxpaGF0IGtvbmZpZ3VyYXNpIEJsdWV0b290aCBwYWRhIHRhYmxldCBkYW4gdW50dWsgbWVtYnVhdCBzZXJ0YSBtZW5lcmltYSBzYW1idW5nYW4gZGVuZ2FuIHBlcmFudGkgeWFuZyBkaXBhc2FuZ2thbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMjA3MTA2MzI0NDUyMzEyNzM5Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbGloYXQga29uZmlndXJhc2kgQmx1ZXRvb3RoIHBhZGEgdGVsZWZvbiBkYW4gbWVtYnVhdCBzZXJ0YSBtZW5lcmltYSBzYW1idW5nYW4gZGVuZ2FuIHBlcmFudGkgeWFuZyBkaXBhc2FuZ2thbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX25mYyIgbXNnaWQ9IjQ0MjMzNTEyNzQ3NTc4NzY5NTMiPiJtZW5nYXdhbCBLb211bmlrYXNpIE1lZGFuIERla2F0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbmZjIiBtc2dpZD0iNzEyMDYxMTgxOTQwMTc4OTkwNyI+Ik1lbWJlbmFya2FuIGFwbCBiZXJrb211bmlrYXNpIGRlbmdhbiB0ZWcsIGthZCBkYW4gcGVtYmFjYSBLb211bmlrYXNpIE1lZGFuIERla2F0IChORkMpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iMzU5ODQ5NjMwMTQ4NjQzOTI1OCI+Imx1bXB1aGthbiBrdW5jaSBza3JpbiBhbmRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iNjAzNDIwMzA2NTA3NzEyMjk5MiI+Ik1lbWJlbmFya2FuIGFwbCBtZWx1bXB1aGthbiBrdW5jaSBrZWt1bmNpIGRhbiBzZWJhcmFuZyBrZXNlbGFtYXRhbiBrYXRhIGxhbHVhbiB5YW5nIGJlcmthaXRhbi4gU2ViYWdhaSBjb250b2gsIHRlbGVmb24gbWVsdW1wdWhrYW4ga3VuY2kga2VrdW5jaSBhcGFiaWxhIG1lbmVyaW1hIHBhbmdnaWxhbiB0ZWxlZm9uIG1hc3VrIGtlbXVkaWFuIG1lbmRheWFrYW4gc2VtdWxhIGt1bmNpIGtla3VuY2kgYXBhYmlsYSBwYW5nZ2lsYW4gc2VsZXNhaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSI2MjAxODEwMDA4MjMwNTAzMDUyIj4ibWVtYmFjYSB0ZXRhcGFuIHBlbnllZ2VyYWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSIyNzA2NzQ1Njc0NTY5Njc4NjQ0Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2EgdGV0YXBhbiBzZWdlcmFrIHVudHVrIGFrYXVuLiBTZWJhZ2FpIGNvbnRvaCwgaW5pIGJvbGVoIG1lbmVudHVrYW4gc2FtYSBhZGEgYXBsIE9yYW5nIGRpc2VnZXJha2thbiBkZW5nYW4gYWthdW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9IjU0MDg2OTQ4NzU3OTM5NDUzMTQiPiJ0b2dvbCBzZWdlcmFrIGhpZHVwIGRhbiBtYXRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI4OTU2MjYyNTkxMzA2MzY5ODY4Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmd1YmFoIHN1YWkgdGV0YXBhbiBzZWdlcmFrIHVudHVrIGFrYXVuLiBTZWJhZ2FpIGNvbnRvaCwgaW5pIGJvbGVoIGRpZ3VuYWthbiB1bnR1ayBtZW5kYXlha2FuIHBlbnllZ2VyYWthbiBhcGwgT3JhbmcgZGVuZ2FuIGFrYXVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFN5bmNTdGF0cyIgbXNnaWQ9IjczOTY1Nzc0NTEzNjAyMDI0NDgiPiJiYWNhIHN0YXRpc3RpayBwZW55ZWdlcmFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1N0YXRzIiBtc2dpZD0iMTUxMDE0Mzc2MTc1NzYwNjE1NiI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1iYWNhIHN0YXRpc3RpayBzZWdlcmFrIHVudHVrIGFrYXVuLCB0ZXJtYXN1ayBzZWphcmFoIGFjYXJhIHNlZ2VyYWsgZGFuIGJlcmFwYSBiYW55YWsgZGF0YSBkaXNlZ2VyYWtrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNDc1NjYwOTYzNzA1MzM1MzMxOCI+ImJhY2Egc3VhcGFuIGxhbmdnYW5hbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI1NTU3MDU4OTA3OTA2MTQ0NTA1Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmRhcGF0a2FuIGJ1dGlyYW4gbWVuZ2VuYWkgc3VhcGFuIHRlcnNlZ2VyYWsgc2VtYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI5MDE1MjQ2MzI1NDA4MjA5Mjk2Ij4idHVsaXMgc3VhcGFuIHlhbmcgZGlsYW5nZ2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI2OTI4OTMwMTg4ODI2MDg5NDEzIj4iTWVtYmVuYXJrYW4gYXBsIHVudHVrIG1lbmd1YmFoIHN1YWkgc3VhcGFuIHNlZ2VyYWthbiBzZW1hc2EgYW5kYS4gQXBsIGhhc2FkIGJvbGVoIG1lbnVrYXIgc3VhcGFuIGFuZGEgeWFuZyBkaXNlZ2VyYWtrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjQxMDcxMDE1MjU3NDYwMzU3MTgiPiJiYWNhIGlzdGlsYWggeWFuZyBhbmRhIHRhbWJhaGthbiBrZXBhZGEga2FtdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjY1OTYxNDYwMDMzODkwNDI0MyI+Ik1lbWJlbmFya2FuIGFwbCBtZW1iYWNhIHNlbXVhIHBlcmthdGFhbiwgbmFtYSBkYW4gZnJhc2EgeWFuZyBtdW5na2luIHRlbGFoIGRpc2ltcGFuIG9sZWggcGVuZ2d1bmEgZGFsYW0ga2FtdXMgcGVuZ2d1bmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSIyMTgzMTEwNDAyMzE0NDQxMTA2Ij4idGFtYmFoIHBlcmthdGFhbiBrZSBrYW11cyBkaXRha3JpZmthbiBwZW5nZ3VuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgxODUzODU3MTYyNTUwNjUyOTEiPiJNZW1iZW5hcmthbiBhcGwgbWVudWxpcyBwZXJrYXRhYW4gYmFoYXJ1IGtlIGRhbGFtIGthbXVzIHBlbmdndW5hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4idWppIGFrc2VzIGtlIHN0b3JhbiBkaWxpbmR1bmdpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODIzNTM0MTUxNTYwNTU1OTY3NyI+InVqaSBha3NlcyBrZSBzdG9yYW4gZGlsaW5kdW5naSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY0MjQ3MzI5MjM0ODEzMjA3MiI+IkFwbCBib2xlaCB1amkga2ViZW5hcmFuIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTkxNDQwMjY4NDY4NTg0ODgyOCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ndWppIGtlYmVuYXJhbiB1bnR1ayBrYWQgU0QgeWFuZyBha2FuIHRlcnNlZGlhIHBhZGEgcGVyYW50aSBha2FuIGRhdGFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijg0ODU5NzkwNjIyNTQ2NjY3NDgiPiJ1YmFoIHN1YWkgYXRhdSBwYWRhbSBrYW5kdW5nYW4gc3RvcmFuIFVTQiBhbmRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg4MDU2OTM2MzAwNTA0NTg3NjMiPiJ1YmFoIHN1YWkgYXRhdSBwYWRhbSBrYW5kdW5nYW4ga2FkIFNEIGFuZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTc1NDA2Mjk5NDQ1NzEwODg4Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbnVsaXMga2Ugc3RvcmFuIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiJNZW1iZW5hcmthbiBhcGwgbWVudWxpcyBrZSBrYWQgU0QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTk4MzkxOTk3MDY4NzkwMTUiPiJ1Ymggc3VhaS9wZG0ga2RnIHN0cm4gbWRpYSBkbG0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxODkxNjA1OTc2OTg1MjkxODUiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ3ViYWggc3VhaSBrYW5kdW5nYW4gc3RvcmFuIG1lZGlhIGRhbGFtYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3ODMxODU5ODQ0ODg0OTgyOSI+InVydXMgc3RvcmFuIGRva3VtZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODcwNDMyMzE3NjkxNDEyMTQ4NCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ndXJ1cyBzdG9yYW4gZG9rdW1lbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZEFjY2Vzc0FsbCIgbXNnaWQ9IjgxNTA2MTM4MjM5MDA0NjA1NzYiPiJtZW5nYWtzZXMgc3RvcmFuIGx1YXJhbiB1bnR1ayBzZW11YSBwZW5nZ3VuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZEFjY2Vzc0FsbCIgbXNnaWQ9IjMyMTUyMDgzNTc0MTU4OTEzMjAiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2Frc2VzIHN0b3JhbiBsdWFyYW4gdW50dWsgc2VtdWEgcGVuZ2d1bmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTY1NjQ4NzI2NDgxOTY2OTgyNCI+ImFrc2VzIHNpc3RlbSBmYWlsIGNhY2hlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiJNZW1iZW5hcmthbiBhcGwgbWVtYmFjYSBkYW4gbWVudWxpcyBjYWNoZSBzaXN0ZW0gZmFpbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZV9zaXAiIG1zZ2lkPSI1OTg2OTUyMzYyNzk1ODcwNTAyIj4ibWVtYnVhdC9tZW5lcmltYSBwYW5nZ2lsYW4gSW50ZXJuZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iNDcxNzYzMjAwMDA2MjY3NDI5NCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5nZ3VuYWthbiBwZXJraGlkbWF0YW4gU0lQIHVudHVrIG1lbWJ1YXQvbWVuZXJpbWEgcGFuZ2dpbGFuIEludGVybmV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3ODYyNTkzMjgzNjExNDkzMjMyIj4iYmFjYSBzZWphcmFoIHBlbmdndW5hYW4gcmFuZ2thaWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3Njg5MDYwNzQ5ODE5MTI2NDcyIj4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2Egc2VqYXJhaCBwZW5nZ3VuYWFuIHJhbmdrYWlhbiB1bnR1ayByYW5na2FpYW4gZGFuIGFwbCBraHVzdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iMjU2MjA1MzU5MjMzOTg1OTk5MCI+InVydXMgZGFzYXIgcmFuZ2thaWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9Ijc1Mzc1ODY3NzE1NTkzNzA2NjgiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ3VydXMgZGFzYXIgcmFuZ2thaWFuIGRhbiBtZW5lbnR1a2FuIHBlcmF0dXJhbiBraHVzdXMgYXBsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1MDg4MjE3MzA5MDg4NzI5NjUwIj4idWJhaCBzdWFpIHBlcmFrYXVuYW4gcGVuZ2d1bmFhbiByYW5na2FpYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjU0NDM0MTI4NjY3NDYxOTgxMjMiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ3ViYWggc3VhaSBiYWdhaW1hbmEgcGVuZ2d1bmFhbiByYW5na2FpYW4gZGlhbWJpbCBraXJhIHRlcmhhZGFwIGFwbC4gQnVrYW4gdW50dWsgZGlndW5ha2FuIG9sZWggYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSIzNjU4NTI3MjE0OTE0OTU5NzQ5Ij4idWJhaCB0YW5kYSBzb2tldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iNzY1NTU2ODQzMzY5NjM1NjU3OCI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ndWJhaCBzdWFpIHRhbmRhIHNva2V0IHVudHVrIGxhbHVhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9Ijc2NzM0MTY0ODc4NzM0MzIyNjgiPiJwZW1iZXJpdGFodWFuIGFrc2VzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9IjQ1ODQ1Nzc0MjY4MzQzMTM4NyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5kYXBhdGthbiBzZW11bGEsIG1lbWVyaWtzYSBkYW4gbWVtYWRhbSBiZXJzaWggcGVtYmVyaXRhaHVhbiwgdGVybWFzdWsgeWFuZyBkaXNpYXJrYW4gb2xlaCBhcGwgbGFpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI3MDU3NzY0NzQyMjExNjU2NjU0Ij4iaWthdCBrZXBhZGEgcGVya2hpZG1hdGFuIHBlbmRlbmdhciBwZW1iZXJpdGFodWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9Ijk4NTY5NzkxODU3NjkwMjk4NiI+Ik1lbWJlbmFya2FuIHBlbWVnYW5nIHRlcmlrYXQgZGVuZ2FuIGFudGFyYSBtdWthIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYmFnaSBwZXJraGlkbWF0YW4gcGVuZGVuZ2FyIHBlbWJlcml0YWh1YW4uIFRpZGFrIHNla2FsaS1rYWxpIGRpcGVybHVrYW4gdW50dWsgYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iMzY5OTYwMDgzMzk3NTExNzQ3OCI+Imd1bmFrYW4gYXBsIGtvbmZpZ3VyYXNpIHlhbmcgZGlzZWRpYWthbiBvbGVoIHBlbWJhd2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnZva2VDYXJyaWVyU2V0dXAiIG1zZ2lkPSI0MTU5NTQ5MTUyNTI5MTExOTIwIj4iTWVtYmVuYXJrYW4gcGVtZWdhbmcgbWVuZ2d1bmFrYW4gYXBsIGtvbmZpZ3VyYXNpIHlhbmcgZGliZXJpa2FuIG9sZWggcGVtYmF3YS4gVGlkYWsgc2VrYWxpLWthbGkgZGlwZXJsdWthbiB1bnR1ayBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2xpbWl0UGFzc3dvcmQiIG1zZ2lkPSI0NDk3NDIwNzI4ODU3NTg1NzkxIj4iVGV0YXBrYW4gcGVyYXR1cmFuIGthdGEgbGFsdWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19saW1pdFBhc3N3b3JkIiBtc2dpZD0iMzI1MjExNDIwMzkxOTUxMDM5NCI+Ik1lbmdhd2FsIHBhbmphbmcgZGFuIGFrc2FyYSB5YW5nIGRpYmVuYXJrYW4gZGFsYW0ga2F0YSBsYWx1YW4gYnVrYSBrdW5jaSBza3Jpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2F0Y2hMb2dpbiIgbXNnaWQ9IjkxNDEzMDY0Njk0MjE5OTUwMyI+Ik1lbWFudGF1IHBlcmN1YmFhbiBidWthIGt1bmNpIHNrcmluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193YXRjaExvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjE1NzI5Mjk0MjE1MDcwMDcyIj4iTWVtYW50YXUgYmlsYW5nYW4ga2F0YSBsYWx1YW4geWFuZyB0ZXJzaWxhcCBkaXRhaXAgYXBhYmlsYSBtZW1idWthIHNrcmluLCBkYW4gbWVuZ3VuY2kgdGFibGV0IGF0YXUgbWVtYWRhbSBzZW11YSBkYXRhIHRhYmxldCBqaWthIHRlcmxhbHUgYmFueWFrIGtlc2lsYXBhbiBtZW5haXAga2F0YSBsYWx1YW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193YXRjaExvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcxMjMyMzA5MTg0Njc2MTA3MyI+Ik1lbWFudGF1IGJpbGFuZ2FuIGthdGEgbGFsdWFuIHNhbGFoIHlhbmcgZGl0YWlwIHNlbWFzYSBtZW1idWthIHNrcmluLCBkYW4gbWVuZ3VuY2kgdGVsZWZvbiBhdGF1IG1lbWFkYW0gc2VtdWEgZGF0YSB0ZWxlZm9uIGppa2EgdGVybGFsdSBiYW55YWsga2F0YSBsYWx1YW4gc2FsYWggZGl0YWlwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9yZXNldFBhc3N3b3JkIiBtc2dpZD0iMjYyMDA3NzE5MTI0MjY4ODk1NSI+IlR1a2FyIGthdGEgbGFsdWFuIGJ1a2Ega3VuY2kgc2tyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3Jlc2V0UGFzc3dvcmQiIG1zZ2lkPSI2MDU5NjM5NjIzMDE5MDQ0NTgiPiJUdWthciBrYXRhIGxhbHVhbiBidWthIGt1bmNpIHNrcmluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9mb3JjZUxvY2siIG1zZ2lkPSIyMjc0MDg1Mzg0NzA0MjQ4NDMxIj4iS3VuY2kgc2tyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2ZvcmNlTG9jayIgbXNnaWQ9IjExNDE3OTc1ODg0MDM4MjcxMzgiPiJNZW5nYXdhbCBjYXJhIGRhbiBiaWxhIHNrcmluIGRpa3VuY2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dpcGVEYXRhIiBtc2dpZD0iMzkxMDU0NTQ0Njc1ODYzOTcxMyI+IlBhZGFta2FuIHNlbXVhIGRhdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzA2MTg0MDk2MDY3NzU2ODc2Ij4iTWVtYWRhbWthbiBkYXRhIHRhYmxldCB0YW5wYSBhbWFyYW4gZGVuZ2FuIG1lbGFrdWthbiB0ZXRhcGFuIHNlbXVsYSBkYXRhIGtpbGFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTA5Njg5NTYwNDU3NDE4ODM5MSI+Ik1lbWFkYW1rYW4gZGF0YSB0ZWxlZm9uIHRhbnBhIGFtYXJhbiBkZW5nYW4gbWVsYWt1a2FuIHRldGFwYW4gc2VtdWxhIGRhdGEga2lsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9zZXRHbG9iYWxQcm94eSIgbXNnaWQ9IjI3ODQ4MjgyOTM3NDc3OTE0NDYiPiJUZXRhcGthbiBwcm9rc2kgZ2xvYmFsIHBlcmFudGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+Ik1lbmV0YXBrYW4gcHJva3NpIGdsb2JhbCBwZXJhbnRpIHVudHVrIGRpZ3VuYWthbiBzZW1lbnRhcmEgZGFzYXIgZGlkYXlha2FuLiBIYW55YSBwZW50YWRiaXIgcGVyYW50aSBwZXJ0YW1hIGJvbGVoIG1lbmV0YXBrYW4gcHJva3NpIGdsb2JhbCBkZW5nYW4gYmVya2VzYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iODg1Mjc5MTUxODQ3MjU0MDU2Ij4iVHRwa24gdG10IHRtcGggay9sbG4ga2NpIHNrcmluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19leHBpcmVQYXNzd29yZCIgbXNnaWQ9IjE3Mjk3MjUyMjYzMTQ2OTE1OTEiPiJLYXdhbCBrZWtlcmFwYW4gcGVudWthcmFuIGthdGEgbGFsdWFuIGt1bmNpIHNrcmluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iODkwMTMyNjE5OTkwOTEzMjkxNSI+IlRldGFwa2FuIHBlbnl1bGl0YW4gc3RvcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iMjYzNzczMjExNTMyNTMxNjk5MiI+Ik1lbWVybHVrYW4gZGF0YSBhcGwgeWFuZyBkaXNpbXBhbiBpdHUgZGlzdWxpdGthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUNhbWVyYSIgbXNnaWQ9IjYzOTUzMDEwMjMxNTIyOTc4MjYiPiJMdW1wdWhrYW4ga2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iMjMwNjM0OTA0MjgzNDc1NDU5NyI+Ik1lbmdoYWxhbmcgcGVuZ2d1bmFhbiBzZW11YSBrYW1lcmEgcGVyYW50aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIyNjYzMjkxMDQ1NDI2Mzg4MDIiPiJMdW1wdWggY2lyaSBwZWxpbmR1bmcga2VrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIzNDY3MDgyMjcyMTg2NTM0NjE0Ij4iQ2VnYWggcGVuZ2d1bmFhbiBiZWJlcmFwYSBjaXJpIGRhbGFtIHBlbGluZHVuZyBrZWt1bmNpLiI8L3N0cmluZz4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJwaG9uZVR5cGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iODkwMTA5ODMzNjY1ODcxMDM1OSI+IkxhbWFuIFV0YW1hIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODY5OTIzNjUwNTI3MTM2NjE1Ij4iTXVkYWggYWxpaCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc4OTc1NDQ2NTQyNDI4NzQ1NDMiPiJLZXJqYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjExMDM2MDE0MzMzODIxNTgxNTUiPiJGYWtzIEtlcmphIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTczNTE3NzE0NDk0ODMyOTM3MCI+IkZha3MgUnVtYWgiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MDM4Nzg2NzQ0NzcyMDczOTQiPiJBbGF0IGtlbHVpIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTY1MDgyNDI3NTE3NzkzMTYzNyI+IkxhaW4tbGFpbiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiJQZXJpYmFkaSI8L2l0ZW0+Ci0gIDwvc3RyaW5nLWFycmF5PgotICA8c3RyaW5nLWFycmF5IG5hbWU9ImVtYWlsQWRkcmVzc1R5cGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iODA3Mzk5NDM1Mjk1NjEyOTEyNyI+IlJ1bWFoIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNzA4NDIzNzM1NjYwMjYyNTYwNCI+IktlcmphIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTExMjA0NDQxMDY1OTAxMTAyMyI+IkxhaW4tbGFpbiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjIzNzQ5MTM5NTI4NzAxMTA2MTgiPiJQZXJpYmFkaSI8L2l0ZW0+Ci0gIDwvc3RyaW5nLWFycmF5PgotICA8c3RyaW5nLWFycmF5IG5hbWU9InBvc3RhbEFkZHJlc3NUeXBlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY4ODAyNTc2MjY3NDAwNDcyODYiPiJSdW1haCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU2MjkxNTM5NTYwNDUxMDkyNTEiPiJLZXJqYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjQ5NjY2MDQyNjQ1MDAzNDM0NjkiPiJMYWluLWxhaW4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI0OTMyNjgyODQ3NTk1Mjk5MzY5Ij4iUGVyaWJhZGkiPC9pdGVtPgotICA8L3N0cmluZy1hcnJheT4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJpbUFkZHJlc3NUeXBlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE3Mzg1ODUxOTQ2MDE0NzY2OTQiPiJMYW1hbiBVdGFtYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjEzNTk2NDQ1NjU2NDczODM3MDgiPiJLZXJqYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc4Njg1NDk0MDEwNTM2MTU2NzciPiJMYWluLWxhaW4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMTQ1MTE4OTQ0NjM5ODY5ODA5Ij4iUGVyaWJhZGkiPC9pdGVtPgotICA8L3N0cmluZy1hcnJheT4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmdhbml6YXRpb25UeXBlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijc1NDYzMzU2MTIxODkxMTU2MTUiPiJLZXJqYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjQzNzgwNzQxMjkwNDk1MjAzNzMiPiJMYWluLWxhaW4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNDU1MDQ3NDY4NTgzOTY1MTA0Ij4iUGVyaWJhZGkiPC9pdGVtPgotICA8L3N0cmluZy1hcnJheT4KLSAgPHN0cmluZy1hcnJheSBuYW1lPSJpbVByb3RvY29scyI+Ci0gICAgPGl0ZW0gbXNnaWQ9Ijg1OTUyNjEzNjM1MTg0NTk1NjUiPiJBSU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI3MzkwNDczNjI4Mjc1NDkwNzAwIj4iV2luZG93cyBMaXZlIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNzg4Mjg3NzEzNDkzMTQ1ODIxNyI+IllhaG9vIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTAzNTM3NjMxMzIwMDU4NTI0MiI+IlNreXBlIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNzUzMjM2MzE3ODQ1OTQ0NDk0MyI+IlFRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzcxMzQ0MTAzNDI5OTY2MDc0OSI+IkJ1YWwgR29vZ2xlIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjUwNjg1NzMxMjcxODYzMDgyMyI+IklDUSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE2NDg3OTc5MDM3ODUyNzkzNTMiPiJKYWJiZXIiPC9pdGVtPgotICA8L3N0cmluZy1hcnJheT4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUN1c3RvbSIgbXNnaWQ9IjE2NDQ3MzgwNTkwNTMzNTU4MjAiPiJQZXJpYmFkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUhvbWUiIG1zZ2lkPSIyNTcwOTIzNDYzMDMzOTg1ODg3Ij4iTGFtYW4gVXRhbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNb2JpbGUiIG1zZ2lkPSI2NTAxNDYzNTU3NzU0NzUxMDM3Ij4iTXVkYWggQWxpaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmsiIG1zZ2lkPSI4ODYzOTM5NjY3MDU5OTExNjMzIj4iS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVGYXhXb3JrIiBtc2dpZD0iMzUxNzc5MjE2MDAwODg5MDkxMiI+IkZha3MgS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVGYXhIb21lIiBtc2dpZD0iMjA2NzI2NTk3MjMyMjk3MTQ2NyI+IkZha3MgUnVtYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVQYWdlciIgbXNnaWQ9Ijc1ODIzNTk5NTUzOTQ5MjE3MzIiPiJBbGF0IEtlbHVpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXIiIG1zZ2lkPSIxNTQ0NDI1ODQ3ODY4NzY1OTkwIj4iTGFpbi1sYWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FsbGJhY2siIG1zZ2lkPSIyNzEyMTc1MjAzMDY1Njc4MjA2Ij4iUGFuZ2dpbCBiYWxpayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNhciIgbXNnaWQ9Ijg3MzgzNjA2ODk2MTY3MTY5ODIiPiJLZXJldGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDb21wYW55TWFpbiIgbXNnaWQ9IjU0MDQzNDM1NjQ2MTQ3ODkxNiI+Ik5vbWJvciBVdGFtYSBTeWFyaWthdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUlzZG4iIG1zZ2lkPSI4MDIyNDUzMTkzMTcxMzcwMzM3Ij4iSVNETiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1haW4iIG1zZ2lkPSI2NzY2MTM3MDEwNjI4MzI2OTE2Ij4iVXRhbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVPdGhlckZheCIgbXNnaWQ9Ijg1ODc2NTcxNDUwNzI0NDY1NjUiPiJGYWtzIExhaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVSYWRpbyIgbXNnaWQ9IjQwOTM3MzgwNzk5MDg2Njc1MTMiPiJSYWRpbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVRlbGV4IiBtc2dpZD0iMzM2Nzg3OTk1MjQ3NjI1MDUxMiI+IlRlbGVrcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVR0eVRkZCIgbXNnaWQ9Ijg2MDY1MTQzNzg1ODUwMDAwNDQiPiJUVFkgVEREIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya01vYmlsZSIgbXNnaWQ9IjEzMTE0MjY5ODkxODQwNjU3MDkiPiJUZWxlZm9uIE11ZGFoIEFsaWggS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrUGFnZXIiIG1zZ2lkPSI2NDk5Mzg3MzEyMzExNTcwNTYiPiJBbGF0IEtlbHVpIEtlcmphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQXNzaXN0YW50IiBtc2dpZD0iNTU5Njc3MjYzNjEyODU2Mjg4NCI+IlBlbWJhbnR1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW1zIiBtc2dpZD0iNzI1NDQ5MjI3NTUwMjc2ODk5MiI+Ik1NUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUN1c3RvbSIgbXNnaWQ9Ijc4Mzc1ODYxOTg0NTgwNzM0MDQiPiJQZXJpYmFkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUJpcnRoZGF5IiBtc2dpZD0iMjgxMzM3OTg0NDIxMTM5MDc0MCI+IkhhcmkgTGFoaXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVBbm5pdmVyc2FyeSIgbXNnaWQ9IjM4NzY3Nzk3NDQ1MTgyODQwMDAiPiJVbGFuZyB0YWh1biI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZU90aGVyIiBtc2dpZD0iNzM4ODE3ODkzOTAxMDE0MzA3NyI+IkxhaW4tbGFpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg1MjU5NjAyNTc4MDQyMTM4NDYiPiJQZXJpYmFkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUhvbWUiIG1zZ2lkPSI0NDkyMjcyMzYxNDA0MzM5MTkiPiJSdW1haCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZVdvcmsiIG1zZ2lkPSIzNTQ4MDU4MDU5NjAxMTQ5OTczIj4iS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVPdGhlciIgbXNnaWQ9IjI5MjMwMDg2OTUyNzI2Mzk1NDkiPiJMYWluLWxhaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVNb2JpbGUiIG1zZ2lkPSIxMTk5MTkwMDUzMjExNjYyMDUiPiJNdWRhaCBBbGloIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg5MDMyMDY5MDMwNjA0Nzk5MDIiPiJQZXJpYmFkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVIb21lIiBtc2dpZD0iODE2NTc1Njk3NzE4NDQ4MzA5NyI+IkxhbWFuIFV0YW1hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZVdvcmsiIG1zZ2lkPSI1MjY4MTcyNzcyMzg3Njk0NDk1Ij4iS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlT3RoZXIiIG1zZ2lkPSIyNzI2MTExOTY2NjIzNTg0MzQxIj4iTGFpbi1sYWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlQ3VzdG9tIiBtc2dpZD0iMjA3NDAyODc1NTUyNzgyNjA0NiI+IlBlcmliYWRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlSG9tZSIgbXNnaWQ9IjYyNDExODEwMzI5NTQyNjM4OTIiPiJMYW1hbiBVdGFtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltVHlwZVdvcmsiIG1zZ2lkPSIxMzcxNDg5MjkwMjQyNDMzMDkwIj4iS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVR5cGVPdGhlciIgbXNnaWQ9IjUzNzcwMDc0OTU3MzU5MTU0NzgiPiJMYWluLWxhaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQ3VzdG9tIiBtc2dpZD0iNjkxOTQ1MzgzNjYxODc0OTk5MiI+IlBlcmliYWRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEFpbSIgbXNnaWQ9IjcwNTAzNjA2MTIzNjgzODM0MTciPiJBSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTXNuIiBtc2dpZD0iMTQ0NTU2NTQ1NDIwNzY5NDQyIj4iV2luZG93cyBMaXZlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFlhaG9vIiBtc2dpZD0iODI3MTQzOTQwODQ2OTAyMTI3MyI+IllhaG9vIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFNreXBlIiBtc2dpZD0iOTAxOTI5Njc0NDYyMjgzMjk1MSI+IlNreXBlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFFxIiBtc2dpZD0iODg4NzQ4NDM3OTQ5NDExMTg4NCI+IlFRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEdvb2dsZVRhbGsiIG1zZ2lkPSI0OTM5MDIzMjExNDAyNzczMDQiPiJIYW5nb3V0cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xJY3EiIG1zZ2lkPSIxNTc0ODcwNDMzNjA2NTE3MzE1Ij4iSUNRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEphYmJlciIgbXNnaWQ9IjIyNzk5MTc2MzA4NzU3NzE3MjIiPiJKYWJiZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTmV0TWVldGluZyIgbXNnaWQ9IjgyODc2MjU2NTU5ODY4Mjc5NzEiPiJOZXRNZWV0aW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZVdvcmsiIG1zZ2lkPSIyOTI2ODg3MDUwNTM2Mzg3MiI+IktlcmphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZU90aGVyIiBtc2dpZD0iMzk1MTc4MTEzMTU3MDEyNDA4MiI+IkxhaW4tbGFpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVDdXN0b20iIG1zZ2lkPSIyMjU1MjM0MTUzNzIwODgzMjIiPiJQZXJpYmFkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUN1c3RvbSIgbXNnaWQ9IjM1NDI0MDM2Nzk4MjcyOTczMDAiPiJQZXJpYmFkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjYyNzQzMzQ4MjUxOTUzNzkwNzYiPiJQZW1iYW50dSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUJyb3RoZXIiIG1zZ2lkPSI4NzU3OTEzNTA2Nzg0MDY3NzEzIj4iQWJhbmcvQWRpayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUNoaWxkIiBtc2dpZD0iMTg5MDc0NjI3NzI3Njg4MTYyNiI+IkFuYWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVEb21lc3RpY1BhcnRuZXIiIG1zZ2lkPSI2OTA0ODA3MTEyMTIxMTIyMTMzIj4iUmFrYW4gS29uZ3NpIERvbWVzdGlrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRmF0aGVyIiBtc2dpZD0iNTIyODAzNDY4NzA4MjA1MDcyNSI+IkJhcGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVGcmllbmQiIG1zZ2lkPSI3MzEzMTA2NzYyNDgzMzkxMjYyIj4iUmFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNYW5hZ2VyIiBtc2dpZD0iNjM2NTY3Nzg2MTYxMDEzNzg5NSI+IlBlbmd1cnVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlTW90aGVyIiBtc2dpZD0iNDU3ODU3MTM1Mjk2Mjc1ODMwNCI+IklidSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcmVudCIgbXNnaWQ9IjQ3NTU2MzU1Njc1NjI5MjUyMjYiPiJJYnUgYmFwYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcnRuZXIiIG1zZ2lkPSI3MjY2NDkwMjg1MTIwMjYyNzgxIj4iUmFrYW4gS29uZ3NpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUmVmZXJyZWRCeSIgbXNnaWQ9IjEwMTU3MzA1OTg0NDEzNTUyNCI+IkRpcnVqdWsgb2xlaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVJlbGF0aXZlIiBtc2dpZD0iMTc5OTgxOTkzMDA4NTYxMDI3MSI+IlNhdWRhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTaXN0ZXIiIG1zZ2lkPSIxNzM1OTgzNTU0NDc5MDc2NDgxIj4iS2FrYWsvQWRpayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVNwb3VzZSIgbXNnaWQ9IjM5NDEzNjkzOTQyODY5ODExNyI+IlBhc2FuZ2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVDdXN0b20iIG1zZ2lkPSIyNDczNTgwNTkzMTExNTkwOTQ1Ij4iUGVyaWJhZGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4iUnVtYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iS2VyamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IkxhaW4tbGFpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlRhaXAga29kIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlRhaXAgUFVLIGRhbiBrb2QgUElOIGJhaGFydSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iS29kIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iS29kIFBJTiBCYWhhcnUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJTZW50dWggdW50dWsgbWVuYWlwIGthdGEgbGFsdWFuIjwvZm9udD48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iVGFpcCBrYXRhIGxhbHVhbiB1bnR1ayBtZW1idWthIGt1bmNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iVGFpcCBQSU4gdW50dWsgbWVtYnVrYSBrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IktvZCBQSU4gc2FsYWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+IlVudHVrIG1lbWJ1a2Ega3VuY2ksIHRla2FuIE1lbnUsIGtlbXVkaWFuIDAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxfZGlhbG9nX251bWJlcl9mb3JfZGlzcGxheSIgbXNnaWQ9IjY5NjE5MjEwMzE5NTA5MDk3MCI+Ik5vbWJvciBrZWNlbWFzYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg5NjM4MzkyNDI1NjU2NTMxOTIiPiJUaWFkYSBwZXJraGlkbWF0YW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zY3JlZW5fbG9ja2VkIiBtc2dpZD0iNzI4ODQ0MzA3NDgwNjgzMjkwNCI+IlNrcmluIGRpa3VuY2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2VuYWJsZWQiIG1zZ2lkPSI0NjE1NDA1MTYxNDEyNjA0OSI+IlRla2FuIE1lbnUgdW50dWsgbWVueWFoc2VrYXQgYXRhdSBtZW1idWF0IHBhbmdnaWxhbiBrZWNlbWFzYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iNjg2MjYwMDI4Nzk3MTU4MzY0Ij4iVGVrYW4gTWVudSB1bnR1ayBtZW1idWthIGt1bmNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI3NDc4NzAzMjU0OTY0ODEwMzAyIj4iTHVraXNrYW4gY29yYWsgdW50dWsgbWVtYnVrYSBrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZW1lcmdlbmN5X2NhbGwiIG1zZ2lkPSI1MzQ3NjMzNzg0NDAxMjg1MjI1Ij4iUGFuZ2dpbGFuIGtlY2VtYXNhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcmV0dXJuX3RvX2NhbGwiIG1zZ2lkPSI1MjQ0MjU5Nzg1NTAwMDQwMDIxIj4iS2VtYmFsaSBrZSBwYW5nZ2lsYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fY29ycmVjdCIgbXNnaWQ9IjkwMzkwMDg2NTAzNjIyNjEyMzciPiJCZXR1bCEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fd3JvbmciIG1zZ2lkPSI0MzE3OTU1MDE0OTQ4MTA4Nzk0Ij4iQ3ViYSBsYWdpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXNzd29yZF93cm9uZyIgbXNnaWQ9IjU3Mzc4MTUzOTMyNTMxNjUzMDEiPiJDdWJhIGxhZ2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4iVGVsYWggbWVsZXBhc2kgaGFkIGN1YmFhbiBCdWthIEt1bmNpIFdhamFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wbHVnZ2VkX2luIiBtc2dpZD0iODA1Nzc2MjgyODM1NTU3MjMxNSI+Ik1lbmdlY2FzLCAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPikiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiJTdWRhaCBkaWNhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYmF0dGVyeV9zaG9ydCIgbXNnaWQ9IjQ0NzcyNjQ4NDkzODY4NTAyNjYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9sb3dfYmF0dGVyeSIgbXNnaWQ9IjE0ODI4NzM5ODE5MTkyNDk3NDAiPiJTYW1idW5na2FuIHBlbmdlY2FzIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5OTQzOTI3NzgxOTIxNTM5OSI+IlRpYWRhIGthZCBTSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MTY1OTE5NjA5NTc5MTQ3NCI+IlRpYWRhIGthZCBTSU0gZGFsYW0gdGFibGV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODY5MjA1ODU2OTUxNjkwNzgiPiJLYWQgU0lNIHRpYWRhIGRhbGFtIHRlbGVmb24uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4iTWFzdWtrYW4ga2FkIFNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IkthZCBTSU0gdGlhZGEgYXRhdSB0aWRhayBib2xlaCBkaWJhY2EuIFNpbGEgbWFzdWtrYW4ga2FkIFNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTYxNDk2NjUxMzg5MTYxODQiPiJLYWQgU0lNIHRpZGFrIGJvbGVoIGRpZ3VuYWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iOTEwOTA0NjQzNDMzMTUxMzcxIj4iS2FkIFNJTSBhbmRhIHRlbGFoIGRpbHVtcHVoa2FuIHNlY2FyYSBrZWthbC5cbiBIdWJ1bmdpIHBlbWJla2FsIHBlcmtoaWRtYXRhbiB3YXlhcmxlcyBhbmRhIHVudHVrIG1lbmRhcGF0a2FuIGthZCBTSU0gbGFpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjAxNTk0OTA1MTUyNzQ2ODg2Ij4iQnV0YW5nIGxhZ3Ugc2ViZWx1bW55YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI2MDg5Mjk3NjUwNDgxMjkyMzYzIj4iQnV0YW5nIGxhZ3Ugc2V0ZXJ1c255YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1OTA4ODc4Njc4MDEyODAwMSI+IkJ1dGFuZyBKZWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU4ODg0MjI5MzgzNTEwMTk0MjYiPiJCdXRhbmcgbWFpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTYyMzE4Mzc4NzY2OTg3NjAxIj4iQnV0YW5nIGJlcmhlbnRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxzX29ubHkiIG1zZ2lkPSI2NzMzOTc4MzA0Mzg2MzY1NDA3Ij4iUGFuZ2dpbGFuIGtlY2VtYXNhbiBzYWhhamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIxNDMzODkyMjQ5ODYwMjg1MDEiPiJSYW5na2FpYW4gZGlrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9Ijc0NDE3OTczMzk5NzYyMzAiPiJLYWQgU0lNIGRpa3VuY2kgZGVuZ2FuIFBVSy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiJMaWhhdCBQYW5kdWFuIFBlbmdndW5hIGF0YXUgaHVidW5naSBQZW5qYWdhYW4gUGVsYW5nZ2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iODA2NjY2MDEyOTIwNjAwMTAzOSI+IkthZCBTSU0gZGlrdW5jaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI1OTUzMjMyMTQwNTI4ODEyNjQiPiJNZW1idWthIGt1bmNpIGthZCBTSU0uLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjY0ODE2MjM4MzAzNDQxMDcyMjIiPiJBbmRhIHRlbGFoIHRlcnNpbGFwIG1lbHVraXMgY29yYWsgYnVrYSBrdW5jaSBhbmRhIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFxuXG5TaWxhIGN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iMjcyNTk3MzI4NjIzOTM0NDU1NSI+IkFuZGEgdGVsYWggdGVyc2lsYXAgdGFpcCBtZW5haXAga2F0YSBsYWx1YW4gYW5kYSBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBcblxuQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+IkFuZGEgdGVsYWggdGVyc2lsYXAgdGFpcCBQSU4gYW5kYSBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBcblxuQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+IkFuZGEgdGVsYWggdGVyc2lsYXAgbWVsdWtpcyBjb3JhayBidWthIGt1bmNpIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCBhbmRhIGFrYW4gZGltaW50YSBtZW1idWthIGt1bmNpIHRhYmxldCBhbmRhIG1lbmdndW5ha2FuIGxvZyBtYXN1ayBHb29nbGUgYW5kYS5cblxuIEN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNTkwMjI3NTU5NzYzNzYyNzUxIj4iQW5kYSB0ZWxhaCB0ZXJzaWxhcCBsdWtpcyBjb3JhayBidWthIGt1bmNpIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCBhbmRhIGFrYW4gZGltaW50YSBtZW1idWthIGt1bmNpIHRlbGVmb24gYW5kYSBtZW5nZ3VuYWthbiBsb2cgbWFzdWsgR29vZ2xlIGFuZGEuXG5cbiBTaWxhIGN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTI4MTA2Mzk5NzQ1NzU1NjA0Ij4iQW5kYSB0ZWxhaCBtZW5jdWJhIHVudHVrIG1lbWJ1a2Ega3VuY2kgdGFibGV0IGRlbmdhbiBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgcGVyY3ViYWFuIHlhbmcgdGlkYWsgYmVyamF5YSwgdGFibGV0IGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2VwYWRhIHRldGFwYW4gbGFsYWkga2lsYW5nIGRhbiBzZW11YSBkYXRhIHBlbmdndW5hIGFrYW4gaGlsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODYwMzU2NTE0MjE1NjgyNjU2NSI+IkFuZGEgdGVsYWggbWVuY3ViYSB1bnR1ayBtZW1idWthIGt1bmNpIHRlbGVmb24gZGVuZ2FuIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCB0ZWxlZm9uIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2VwYWRhIHRldGFwYW4gbGFsYWkga2lsYW5nIGRhbiBzZW11YSBkYXRhIHBlbmdndW5hIGFrYW4gaGlsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI4MDg3MzUxNjQ5MzkzNDM2NSI+IkFuZGEgdGVsYWggbWVuY3ViYSB1bnR1ayBtZW1idWthIGt1bmNpIHRhYmxldCBzZWNhcmEgc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthbGkuIFRhYmxldCBraW5pIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2UgdGV0YXBhbiBsYWxhaSBraWxhbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiJBbmRhIHRlbGFoIG1lbmN1YmEgdW50dWsgbWVtYnVrYSBrdW5jaSB0ZWxlZm9uIHNlY2FyYSBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2FsaS4gVGVsZWZvbiBraW5pIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2VwYWRhIHRldGFwYW4gbGFsYWkga2lsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYyNTE0ODAzNDMzOTQzODk2NjUiPiJDdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiJMdXBhIGNvcmFrPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+IkJ1a2Ega3VuY2kgYWthdW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiJUZXJsYWx1IGJhbnlhayBwZXJjdWJhYW4gbWVsdWtpcyBjb3JhayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiJVbnR1ayBtZW1idWthIGt1bmNpLCBsb2cgbWFzdWsgZGVuZ2FuIGFrYXVuIEdvb2dsZSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI4ODQ2ODgxNDI0MTA2NDg0NDQ3Ij4iTmFtYSBQZW5nZ3VuYSAoRS1tZWwpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjU5NTgwMjgzODM5NTQ3Mzg1MjgiPiJLYXRhIGxhbHVhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4iTG9nIG1hc3VrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjEzNjQwNTE0NzMzNDc0ODU5MDgiPiJOYW1hIHBlbmdndW5hIGF0YXUga2F0YSBsYWx1YW4gdGlkYWsgc2FoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjE2OTY5MjQ3NjM2OTAzNzkwNzMiPiJMdXBhIG5hbWEgcGVuZ2d1bmEgYXRhdSBrYXRhIGxhbHVhbiBhbmRhP1xuTGF3YXRpICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+Ii4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjcxMTQ2MjczNTEyODY5MzM4NjciPiJNZW55ZW1ha+KApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdW5sb2NrX2xhYmVsIiBtc2dpZD0iNzM3NDQwNDgzMjIwNjY3MDU0Ij4iQnVrYSBrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4iQnVueWkgZGloaWR1cGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb2ZmX2xhYmVsIiBtc2dpZD0iOTk2ODIyODI1MTU0MzE5MDI2Ij4iQnVueWkgZGltYXRpa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9zdGFydCIgbXNnaWQ9IjM5NDEwNDU1MDI5MzMxNDI4NDciPiJDb3JhayBkaW11bGFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NsZWFyZWQiIG1zZ2lkPSI1NTgzNDc5NzIxMDAxNjM5NTc5Ij4iQ29yYWsgZGlwYWRhbWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fY2VsbF9hZGRlZCIgbXNnaWQ9IjY3NTYwMzEyMDgzNTkyOTI0ODciPiJTZWwgZGl0YW1iYWhrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2RldGVjdGVkIiBtc2dpZD0iNDk4ODczMDg5NTU1NDA1NzA1OCI+IkNvcmFrIHNpYXAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuIFdpZGdldCAlMiRkIGRhcmkgJTMkZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4iVGFtYmFoIHdpZGdldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+Iktvc29uZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4iQmFoYWdpYW4gYnVrYSBrdW5jaSBkaWtlbWJhbmdrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4iQmFoYWdpYW4gYnVrYSBrdW5jaSBkaXJ1bnR1aGthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiJXaWRnZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IlBlbWlsaWggcGVuZ2d1bmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJTdGF0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4iS2F3YWxhbiBtZWRpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4iUGVueXVzdW5hbiBzZW11bGEgd2lkZ2V0IGRpbXVsYWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiJQZW55dXN1bmFuIHNlbXVsYSB3aWRnZXQgdGFtYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiJXaWRnZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gZGlwYWRhbWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiJLZW1iYW5na2FuIGJhaGFnaWFuIGJ1a2Ega3VuY2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4iQnVrYSBrdW5jaSBsdW5jdXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiJCdWthIGt1bmNpIGNvcmFrLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4iV2FqYWggQnVrYSBLdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJCdWthIGt1bmNpIHBpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiJCdWthIGt1bmNpIGthdGEgbGFsdWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+Ikthd2FzYW4gY29yYWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+Ikthd2FzYW4gbHVuY3VyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfY2hhcmFjdGVyIiBtc2dpZD0iNzMzNjQ3MDUzNTM4NTAwOTUyMyI+IndhdGFrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfd29yZCIgbXNnaWQ9IjcwNzU1NzAzMjgzNzQ5MTg2NjAiPiJwZXJrYXRhYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF9saW5rIiBtc2dpZD0iNTgxNTUwODg4MDc4MjQ4ODI2NyI+InBhdXRhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2xpbmUiIG1zZ2lkPSI1NzY0MjY3MjM1MDI2MTIwODg4Ij4iYmFyaXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJob3VyX2FtcG0iIG1zZ2lkPSI0NTg0MzM4MDgzNTI5MzU1OTgyIj4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JVA8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91cl9jYXBfYW1wbSIgbXNnaWQ9IjIwODM0NjU5OTI5NDA0NDQzNjYiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lcDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9mYWlsZWQiIG1zZ2lkPSI1NDEwMjcwMzI5MTE0MjEyMDQxIj4iVWppYW4ga2lsYW5nIGdhZ2FsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiJUaW5kYWthbiBGQUNUT1JZX1RFU1QgaGFueWEgZGlzb2tvbmcgdW50dWsgcGFrZWogeWFuZyBkaXBhc2FuZ2thbiBkYWxhbSAvc3lzdGVtL2FwcC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub19hY3Rpb24iIG1zZ2lkPSI4NzI5OTE4NzQ3OTk5OTg1NjEiPiJUaWFkYSBwYWtlaiB5YW5nIG1lbnllZGlha2FuIHRpbmRha2FuIEZBQ1RPUllfVEVTVCBkaXRlbXVpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X3JlYm9vdCIgbXNnaWQ9IjYzMjAxNjgyMDMwNTA3OTE2NDMiPiJCdXQgc2VtdWxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMTk4NzQ4Mzk3NzgzNDYwMzg3MiI+IkhhbGFtYW4gZGkgXCc8eGxpZmY6ZyBpZD0iVElUTEUiPiVzPC94bGlmZjpnPlwnIGJlcmthdGE6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI2OTYxOTAzMjEzNzI5NjY3NTczIj4iSmF2YVNjcmlwdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3RpdGxlIiBtc2dpZD0iMjYxOTM3NjU1NTUyNTExNjU5MyI+IlNhaGthbiBOYXZpZ2FzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3Bvc2l0aXZlX2J1dHRvbiIgbXNnaWQ9IjMxMTI3NTIwMTA2MDA0ODQxMzAiPiJUaW5nZ2Fsa2FuIEhhbGFtYW4gaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfbmVnYXRpdmVfYnV0dG9uIiBtc2dpZD0iNTYxNDg2MTI5MzAyNjA5OTcxNSI+Iktla2FsIGRpIEhhbGFtYW4gaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWQiIG1zZ2lkPSIzNDY4ODE2MzU3MDk1Mzc4NTkwIj4iPHhsaWZmOmcgaWQ9Ik1FU1NBR0UiPiVzPC94bGlmZjpnPlxuXG5BZGFrYWggYW5kYSBwYXN0aSBhbmRhIG1haHUgbWVuYXZpZ2FzaSBrZWx1YXIgZGFyaSBoYWxhbWFuIGluaT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX2xhYmVsIiBtc2dpZD0iNjg2MDI2MTc1ODY2NTgyNTA2OSI+IlNhaGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRvdWJsZV90YXBfdG9hc3QiIG1zZ2lkPSI0NTk1MDQ2NTE1NDAwMjY4ODgxIj4iUGV0dWE6IEtldGlrIGR1YSBrYWxpIHVudHVrIG1lbmdlenVtIG1hc3VrIGRhbiBrZWx1YXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfdGhpc19mb3JtIiBtc2dpZD0iNDYxNjc1ODg0MTE1NzgxNjY3NiI+IkF1dG8gaXNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2V0dXBfYXV0b2ZpbGwiIG1zZ2lkPSI3MTAzNDk1MDcwMTgwNTkwODE0Ij4iU2VkaWFrYW4gQXV0b2lzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3NfbmFtZV9zZXBhcmF0b3IiIG1zZ2lkPSI2MzUwMTQ1MTU0Nzc5NzA2NzcyIj4iICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9uYW1lX2Zvcm1hdCIgbXNnaWQ9IjMyNjgwNDEwNTQ4OTkyMTQ5NDUiPiIkMSQyJDMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfc2VwYXJhdG9yIiBtc2dpZD0iNzQ4MzMwNzg5MzE3MDMyNDEyOSI+IiwgIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X2Zvcm1hdCIgbXNnaWQ9IjQ4NzQ0NTk0NTU3ODY4MjczNDQiPiIkMSQyJDMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcm92aW5jZSIgbXNnaWQ9IjIyMzE4MDY1NTM4NjM0MjIzMDAiPiJXaWxheWFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcG9zdGFsX2NvZGUiIG1zZ2lkPSI0Njk2NDMwNDA3Njg5Mzc3MTA4Ij4iUG9za29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfc3RhdGUiIG1zZ2lkPSI2OTg4ODk0MTk1NTIwMDQ0NjEzIj4iTmVnZXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfemlwX2NvZGUiIG1zZ2lkPSI4Njk3NTQ0NTkyNjI3MzIyOTQ2Ij4iUG9za29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfY291bnR5IiBtc2dpZD0iMjM3MDczNzcxMDIwMzYyODkxIj4iV2lsYXlhaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2lzbGFuZCIgbXNnaWQ9IjQwMjAxMDA4NzU5ODQ2NjcwMjUiPiJQdWxhdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2Rpc3RyaWN0IiBtc2dpZD0iODQwMDczNTA3MzM5MjI2NzY3MiI+IkRhZXJhaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2RlcGFydG1lbnQiIG1zZ2lkPSI1MzQzMjc5NDYyNTY0NDUzMzA5Ij4iSmFiYXRhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ByZWZlY3R1cmUiIG1zZ2lkPSIyMDI4NDk5NDg1MDY1ODAwNDE5Ij4iV2lsYXlhaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3BhcmlzaCIgbXNnaWQ9IjgyMDIyMDYxMDU0Njg4MjAwNTciPiJLYXJpYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hcmVhIiBtc2dpZD0iMzU0NzQwOTA1MDg4OTk1MjQyMyI+Ikthd2FzYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9lbWlyYXRlIiBtc2dpZD0iMjg5Mzg4MDk3ODgzNTY5ODgxOCI+IkVtaXJpYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzc3NTI2NTc3NTQwNTEwNjk4MyI+ImJhY2EgcGVuYW5kYSBidWt1IGRhbiBzZWphcmFoIFdlYiBhbmRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWJhY2Egc2VqYXJhaCBzZW11YSBVUkwgeWFuZyB0ZWxhaCBQZW55ZW1hayBJbWJhcyBsYXdhdGkgZGFuIHNlbXVhIHBlbmFuZGEgaGFsYW1hbiBQZW55ZW1hayBJbWJhcy4gTm90YToga2ViZW5hcmFuIGluaSB0aWRhayBib2xlaCBkaWt1YXRrdWFzYWthbiBvbGVoIHBlbnllbWFrIGltYmFzIHBpaGFrIGtldGlnYSBhdGF1IGFwbGlrYXNpIGxhaW4gZGVuZ2FuIGtldXBheWFhbiBtZW55ZW1hayBpbWJhcyB3ZWIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzE0Nzg1MTY1MjczMzE0NDkwIj4idHVsaXMgcGVuYW5kYSBidWt1IGRhbiBzZWphcmFoIHdlYiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+Ik1lbWJlbmFya2FuIGFwbCBtZW5ndWJhaCBzdWFpIHNlamFyYWggYXRhdSBwZW5hbmRhIGhhbGFtYW4gUGVueWVtYWsgSW1iYXMgeWFuZyB0ZXJzaW1wYW4gcGFkYSB0YWJsZXQgYW5kYS4gSW5pIGJvbGVoIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1hZGFtIGF0YXUgbWVuZ3ViYWggc3VhaSBkYXRhIFBlbnllbWFrIEltYmFzLiBOb3RhOiBrZWJlbmFyYW4gaW5pIHRpZGFrIGJvbGVoIGRpa3VhdGt1YXNha2FuIG9sZWggcGVueWVtYWsgaW1iYXMgcGloYWsga2V0aWdhIGF0YXUgYXBsaWthc2kgbGFpbiBkZW5nYW4ga2V1cGF5YWFuIG1lbnllbWFrIGltYmFzIHdlYi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUhpc3RvcnlCb29rbWFya3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDk3Mzg5NTMxMDE0MTg1NTA5Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmd1YmFoIHN1YWkgc2VqYXJhaCBhdGF1IHBlbmFuZGEgaGFsYW1hbiBQZW55ZW1hayBJbWJhcyB5YW5nIHRlcnNpbXBhbiBwYWRhIHRlbGVmb24gYW5kYS4gSW5pIGJvbGVoIG1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW1hZGFtIGF0YXUgbWVuZ3ViYWggc3VhaSBkYXRhIFBlbnllbWFrIEltYmFzLiBOb3RhOiBrZWJlbmFyYW4gaW5pIHRpZGFrIGJvbGVoIGRpa3VhdGt1YXNha2FuIG9sZWggcGVueWVtYWsgaW1iYXMgcGloYWsga2V0aWdhIGF0YXUgYXBsaWthc2kgbGFpbiBkZW5nYW4ga2V1cGF5YWFuIG1lbnllbWFrIGltYmFzIHdlYi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsYXJtIiBtc2dpZD0iMTM3OTI5NDU1NjM2MjA5MTgxNCI+InRldGFwa2FuIHBlbmdnZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWxhcm0iIG1zZ2lkPSIzMTYzOTIwMzkxNTc0NzM4NDgiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZXRhcGthbiBwZW5nZ2VyYSBkYWxhbSBhcGwgcGVuZ2dlcmEgamFtIHlhbmcgZGlwYXNhbmcuIFNlc2V0ZW5nYWggYXBwbGlrYXNpIGphbSBwZW5nZ2VyYSB0aWRhayBib2xlaCBtZWxha3NhbmFrYW4gY2lyaSBpbmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hZGRWb2ljZW1haWwiIG1zZ2lkPSI1NTI1NjYwMDI2MDkwOTU5MDQ0Ij4idGFtYmFoIG1lbCBzdWFyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjY2MDQ1MDg2NTE0MjgyNTI0MzciPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuYW1iYWhrYW4gbWVzZWogcGFkYSBwZXRpIG1hc3VrIG1lbCBzdWFyYSBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iNTk2MjIyNDE1ODk1NTI3MzkzMiI+InViYWggc3VhaSBrZWJlbmFyYW4gZ2VvbG9rYXNpIFBlbnllbWFrIEltYmFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iMTA4Mzc0MzIzNDUyMjYzODc0NyI+Ik1lbWJlbmFya2FuIGFwbCB1bnR1ayBtZW5ndWJhaCBzdWFpIGtlYmVuYXJhbiBnZW9sb2thc2kgUGVueWVtYWsgSW1iYXMuIEFwbCBoYXNhZCBib2xlaCBtZW5nZ3VuYWthbm55YSB1bnR1ayBtZW1iZW5hcmthbiBtZW5naGFudGFyIG1ha2x1bWF0IGxva2FzaSBrZXBhZGEgbGFtYW4gd2ViIHNlbWJhcmFuZ2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iNTU2ODEzOTEwMDY0NTgyOTExNyI+InNhaGthbiBwYWtlaiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9Ijg0Mzc1OTAxOTA5OTA4NDMzODEiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2VzYWhrYW4gYmFoYXdhIHBha2VqIGJvbGVoIGRpcGFzYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFBhY2thZ2VWZXJpZmllciIgbXNnaWQ9IjQxODc3ODY3OTMzNjAzMjY2NTQiPiJpa2F0IGtlcGFkYSBwZW5nZXNhaCBwYWtlaiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSIzMTgwNzQxNzczMjMzODYyMTI2Ij4iTWVtYmVuYXJrYW4gcGVtZWdhbmcgbWVtYnVhdCBwZXJtaW50YWFuIHBlbmdlc2FoIHBha2VqLiBUaWRhayBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBub3JtYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXJpYWxQb3J0IiBtc2dpZD0iNTQ2MDgzMzI3NjU0NjMxMDc2Ij4iYWtzZXMgcG9ydCBiZXJzaXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiJNZW1iZW5hcmthbiBwZW1lZ2FuZyBtZW5nYWtzZXMgcG9ydCBiZXJzaXJpIG1lbmdndW5ha2FuIEFQSSBTZXJpYWxNYW5hZ2VyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI1MDc3Nzc0Mjk3OTQzNDA5Mjg1Ij4iYWtzZXMgcGVtYmVrYWwga2FuZHVuZ2FuIHNlY2FyYSBsdWFyYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjQ1NDQzNDY0ODY2OTc4NTM2ODUiPiJNZW1ib2xlaGthbiBwZW1lZ2FuZyBtZW5nYWtzZXMgcGVtYmVrYWwga2FuZHVuZ2FuIGRhcmkgbHVhci4gVGlkYWsgYWthbiBzZWthbGkta2FsaSBkaXBlcmx1a2FuIHVudHVrIGFwbCBiaWFzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4idGlkYWsgbWVuZ2dhbGFra2FuIGtlbWFzIGtpbmkgcGVyYW50aSBhdXRvbWF0aWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVMb2NrIiBtc2dpZD0iMTY1NTYyNTgzMjE2Njc3ODQ5MiI+Ik1lbWJlbmFya2FuIGFwbGlrYXNpIHVudHVrIG1lbmF3YXJrYW4gbWFrbHVtYXQga2VwYWRhIHNpc3RlbSB0ZW50YW5nIGJpbGEgYWthbiBtZW5qYWRpIG1hc2EgeWFuZyBiYWlrIHVudHVrIGJ1dCBzZW11bGEgYnVrYW4gaW50ZXJha3RpZiB1bnR1ayBtZW5haWsgdGFyYWYgcGVyYW50aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX21lc3NhZ2UiIG1zZ2lkPSI3NjczNDQ2ODcxMzkxOTU3OTAiPiJBZGFrYWggYW5kYSBtYWh1IHBlbnllbWFrIGltYmFzIG1lbmdpbmdhdGkga2F0YSBsYWx1YW4gaW5pPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbm90bm93IiBtc2dpZD0iNjM4OTY3NTMxNjcwNjY5OTc1OCI+IkJ1a2FuIHNla2FyYW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9yZW1lbWJlciIgbXNnaWQ9IjY0OTE4Nzk2Nzg5OTY3NDk0NjYiPiJJbmdhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbmV2ZXIiIG1zZ2lkPSI4Mjc0MzMwMjk2Nzg1ODU1MTA1Ij4iSmFuZ2FuIHNla2FsaS1rYWxpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4iQW5kYSB0aWRhayBtZW1wdW55YWkga2ViZW5hcmFuIHVudHVrIG1lbWJ1a2EgbGFtYW4gaW5pLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRleHRfY29waWVkIiBtc2dpZD0iNDk4NTcyOTUyNDY3MDEzMTM4NSI+IlRla3MgZGlzYWxpbiBrZSBwYXBhbiBrZXJhdGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibW9yZV9pdGVtX2xhYmVsIiBtc2dpZD0iNDY1MDkxODkyMzA4MzMyMDQ5NSI+IkxhZ2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVwZW5kX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjU3MjIxNDQ2MTY3NjAxNTY0MiI+Ik1lbnUrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zcGFjZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI0MTAzMjg2MzkyNzIxNjI1MzciPiJydWFuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZW50ZXJfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIyNzQzMzYyNzg1MTExMzA5NjY4Ij4iZW50ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjM2NTgxNzgwMDcyMDI3NDgxNjQiPiJwYWRhbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaF9nbyIgbXNnaWQ9IjgyOTgwMTY2Njk4MjIxNDE3MTkiPiJDYXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zZWFyY2giIG1zZ2lkPSI2NzQ5ODI2NjM5MDk4NTEyMTIwIj4iQ2FyaWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9xdWVyeSIgbXNnaWQ9IjU5MTE3Nzg1OTMxMjUzNTUxMjQiPiJQZXJ0YW55YWFuIGNhcmlhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fY2xlYXIiIG1zZ2lkPSIxMzMwMjgxOTkwOTUxODMzMDMzIj4iUGVydGFueWFhbiBqZWxhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc3VibWl0IiBtc2dpZD0iMjY4ODQ1MDEzMzI5Nzk4MzU0MiI+IlNlcmFoIHBlcnRhbnlhYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3ZvaWNlIiBtc2dpZD0iMjQ1MzIwMzY5NTY3NDk5NDQ0MCI+IkNhcmlhbiBzdWFyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSI3NDYwNjk0MDcwMzA5NzMwMTQ5Ij4iRGF5YWthbiBKZWxhamFoIG1lbGFsdWkgU2VudHVoYW4/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NjU1ODg3NTM5MDg5OTEwNTc3Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBpbmdpbiBtZW5kYXlha2FuIEplbGFqYWggbWVsYWx1aSBTZW50dWhhbi4gQXBhYmlsYSBKZWxhamFoIG1lbGFsdWkgU2VudHVoYW4gZGlkYXlha2FuLCBhbmRhIGJvbGVoIG1lbmRlbmdhciBhdGF1IG1lbGloYXQgcGVuZXJhbmdhbiB0ZW50YW5nIGFwYSBkaSBiYXdhaCBqYXJpIGFuZGEgYXRhdSBtZWxha3VrYW4gZ2VyYWsgaXN5YXJhdCB1bnR1ayBiZXJpbnRlcmFrc2kgZGVuZ2FuIHRhYmxldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNzA4MTk5NjcyODUyMzczMTk1Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBpbmdpbiBtZW5kYXlha2FuIEplbGFqYWggbWVsYWx1aSBTZW50dWhhbi4gQXBhYmlsYSBKZWxhamFoIG1lbGFsdWkgU2VudHVoYW4gZGlkYXlha2FuLCBhbmRhIGJvbGVoIG1lbmRlbmdhciBhdGF1IG1lbGloYXQgcGVuZXJhbmdhbiB0ZW50YW5nIGFwYSBkaSBiYXdhaCBqYXJpIGFuZGEgYXRhdSBtZWxha3VrYW4gZ2VyYWsgaXN5YXJhdCB1bnR1ayBiZXJpbnRlcmFrc2kgZGVuZ2FuIHRlbGVmb24uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI3Mzk2Mzg0NTA4OTUzNzc5OTI1Ij4iMSBidWxhbiB5YW5nIGxhbHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiZWZvcmVPbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjkwOTEzNDU0NjgzNjQ5OTgyNiI+IlNlYmVsdW0gMSBidWxhbiB5YW5nIGxhbHUiPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9Im51bV9zZWNvbmRzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ4Njk4NzAwNTY1NDc4OTYwMTEiPiIxIHNhYXQgeWFuZyBsYWx1IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzOTAzNzA2ODA0MzQ5NTU2Mzc5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FhdCB5YW5nIGxhbHUiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9Im51bV9taW51dGVzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMzMDY3ODc0MzMwODg4MTAxOTEiPiIxIG1pbml0IHlhbmcgbGFsdSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjE3Njk0MjAwODkxNTQ1NTExNiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IG1pbml0IHlhbmcgbGFsdSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0ibnVtX2hvdXJzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjkxNTA3OTc5NDQ2MTA4MjE4NDkiPiIxIGphbSB5YW5nIGxhbHUiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI0NjcyNzMyMzk1ODc1ODc1NjkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBqYW0geWFuZyBsYWx1IjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJsYXN0X251bV9kYXlzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMDY5OTkyODA4MTY0MzE4MjY4Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gaGFyaSB0ZXJha2hpciI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9Imxhc3RfbW9udGgiIG1zZ2lkPSIzOTU5MzQ2NzM5OTc5MDU1NDMyIj4iQnVsYW4gbGVwYXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbGRlciIgbXNnaWQ9IjUyMTE5NzUwMjI4MTU1NTQ4NDAiPiJMZWJpaCBsYW1hIjwvc3RyaW5nPgotICA8cGx1cmFscyBuYW1lPSJudW1fZGF5c19hZ28iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NjEzNTg1MzQzOTgxMTU4MjAiPiJzZW1hbGFtIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDc5NTg2NDY2MTUzMzE0NjMzIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gaGFyaSB5YW5nIGxhbHUiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImluX251bV9zZWNvbmRzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjcyOTc0NTU2MDk1NDkwNTEwMiI+ImRhbGFtIDEgc2FhdCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTI0MTkyNjExNjQ0Mzk3NDY4NyI+ImRhbGFtIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhYXQiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImluX251bV9taW51dGVzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODc5MzA5NTI1MTMyNTIwMDM5NSI+ImRhbGFtIDEgbWluaXQiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMzMzA3MTM5MzYzOTk0NDg3NDkiPiJkYWxhbSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBtaW5pdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2hvdXJzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNzE2NDM1MzM0MjQ3Nzc2OTk5OSI+ImRhbGFtIDEgamFtIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDcyOTA2NzczNTM3MjczODkiPiJkYWxhbSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBqYW0iPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImluX251bV9kYXlzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTQxMzA4ODc0MzAwOTgzOTUxOCI+ImVzb2siPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjUxMDk0NDkzNzUxMDA5NTMyNDciPiJkYWxhbSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBoYXJpIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX3NlY29uZHNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTg0OTAzNjg0MDIwMDA2OTExOCI+IjEgc2FhdCB5YW5nIGxhbHUiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM2OTkxNjkzNjY2NTA5MzA0MTUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYWF0IHlhbmcgbGFsdSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9taW51dGVzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjYzNjE0OTAxNDcxMTM4NzE1NDUiPiIxIG1pbml0IHlhbmcgbGFsdSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODUxMTY0OTY4NTk3MTUwNzEwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gbWluaXQgeWFuZyBsYWx1IjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2hvdXJzX2FnbyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ3OTYyMTIwMzk3MjQ3MjIxMTYiPiIxIGphbSB5YW5nIGxhbHUiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY4ODk5NzA3NDU3NDg1Mzg5MDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBqYW0geWFuZyBsYWx1IjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2RheXNfYWdvIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODQ2MzE2MTcxMTQ5MjY4MDMwOSI+InNlbWFsYW0iPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM0NTMzNDI2Mzk2MTY0ODExOTEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBoYXJpIHlhbmcgbGFsdSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9zZWNvbmRzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg0MjIyNTM3MDc5NTA2NjI5OSI+ImRhbGFtIDEgc2FhdCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ5NTg4MDEwODgyNTgwNTEwOCI+ImRhbGFtIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhYXQiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fbWludXRlcyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU2Mjc4NjE0OTkyODI4NDg3OCI+ImRhbGFtIDEgbWluaXQiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQyMTYxMTMyOTI3MDY1Njg3MjYiPiJkYWxhbSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBtaW5pdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9ob3VycyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNzQ3MDgxMTgxMjQwNDUyNDYiPiJkYWxhbSAxIGphbSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzcwNTM3Mzc2Njc5ODAxMzQwNiI+ImRhbGFtIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IGphbSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9kYXlzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjE3ODU3NjI1NDM4NTczOTg1NSI+ImVzb2siPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI5NzMwNjI5NjgwMzgzNTU5OTEiPiJkYWxhbSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBoYXJpIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX2RhdGUiIG1zZ2lkPSI5MDkzOTQ5NzU3NzU3NDQ1MTE3Ij4icGFkYSA8eGxpZmY6ZyBpZD0iREFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3RpbWUiIG1zZ2lkPSI1NTA2ODMxMjQ0MjYzMDgzNzkzIj4icGFkYSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3llYXIiIG1zZ2lkPSI1MDQwMzk1NjQwNzExODY3MTc3Ij4iZGFsYW0gPHhsaWZmOmcgaWQ9IllFQVIiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRheSIgbXNnaWQ9IjgxNDQxOTU3NzYwNTgxMTk0MjQiPiJoYXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF5cyIgbXNnaWQ9IjQ3NzQ1NDc2NjEwMjEzNDQ2MDIiPiJoYXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaG91ciIgbXNnaWQ9IjIxMjY3NzE5MTY0MjYxODk0ODEiPiJqYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJob3VycyIgbXNnaWQ9Ijg5NDQyNDAwNTI2Njg1Mjk5MyI+ImphbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZSIgbXNnaWQ9IjkxNDg4Nzg2NTc3MDM3Njk4NjgiPiJtaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaW51dGVzIiBtc2dpZD0iNTY0NjAwMTAwNTgyNzAzNDUwOSI+Im1pbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlY29uZCIgbXNnaWQ9IjMxODQyMzU4MDgwMjE0NzgiPiJzYWF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kcyIgbXNnaWQ9IjMxNjE1MTUzNDcyMTY1ODkyMzUiPiJzYWF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2VlayIgbXNnaWQ9IjU2MTc5NjE1MzcxNzMwNjE1ODMiPiJtaW5nZ3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3ZWVrcyIgbXNnaWQ9IjY1MDk2MjM4MzQ1ODM5NDQ1MTgiPiJtaW5nZ3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ5ZWFyIiBtc2dpZD0iNDAwMTExODIyMTAxMzg5MjA3NiI+InRhaHVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ieWVhcnMiIG1zZ2lkPSI2ODgxNTc3NzE3OTkzMjEzNTIyIj4idGFodW4iPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX3NlY29uZHMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2OTYyMDE1NTI4MzcyOTY5NDgxIj4iMSBzYWF0IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxODg2MTA3NzY2NTc3MTY2Nzg2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2FhdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fbWludXRlcyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ5MTU0MTQwMDI1NDYwODU2MTciPiIxIG1pbml0IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMTY1MTg3MTY5MjI0OTA4Nzc1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gbWluaXQiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX2hvdXJzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODkxNzQ2NzQ5MTI0ODgwOTk3MiI+IjEgamFtIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzODYzOTYyODU0MjQ2NzczOTMwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gamFtIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX3RpdGxlIiBtc2dpZD0iMzUzNDUwOTEzNTQzODM1MzA3NyI+Ik1hc2FsYWggdmlkZW8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF9pbnZhbGlkX3Byb2dyZXNzaXZlX3BsYXliYWNrIiBtc2dpZD0iMzE4NjY3MDMzNTkzODY3MDQ0NCI+Ik1hYWYsIHZpZGVvIGluaSB0aWRhayBzYWggdW50dWsgcGVuc3RyaW1hbiBrZSBwZXJhbnRpIGluaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF91bmtub3duIiBtc2dpZD0iMzQ1MDQzOTE1NTE4NzgxMDA4NSI+IlRpZGFrIGRhcGF0IG1haW5rYW4gdmlkZW8gaW5pLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl9idXR0b24iIG1zZ2lkPSIyODIyMjM4MjE1MTAwNjc5NTkyIj4iT0siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWxhdGl2ZV90aW1lIiBtc2dpZD0iMTgxODU1NzE3NzgyOTQxMTQxNyI+Ijx4bGlmZjpnIGlkPSJEQVRFIj4lMSRzPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9vbiIgbXNnaWQ9IjcyNDUzNTM1Mjg4MTg1ODc5MDgiPiJ0ZW5nYWggaGFyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Ik5vb24iIG1zZ2lkPSIzMzQyMTI3NzQ1MjMwMDEzMTI3Ij4iVGVuZ2FoIGhhcmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaWRuaWdodCIgbXNnaWQ9IjcxNjYyNTk1MDg4NTA0NTc1OTUiPiJ0ZW5nYWggbWFsYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJNaWRuaWdodCIgbXNnaWQ9IjU2MzA4MDY5MDY4OTc4OTIyMDEiPiJUZW5nYWggbWFsYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJlbGFwc2VkX3RpbWVfc2hvcnRfZm9ybWF0X21tX3NzIiBtc2dpZD0iNDQzMTU1NTk0MzgyODcxMTQ3MyI+Ijx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMSQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMiQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9oX21tX3NzIiBtc2dpZD0iMTg0NjA3MTk5NzYxNjY1NDEyNCI+Ijx4bGlmZjpnIGlkPSJIT1VSUyI+JTEkZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUyJDAyZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUzJDAyZDwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWxlY3RBbGwiIG1zZ2lkPSI2ODc2NTE4OTI1ODQ0MTI5MzMxIj4iUGlsaWggc2VtdWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iUG90b25nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJTYWxpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlRhbXBhbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iR2FudGkuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iUGFkYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlNhbGluIFVSTCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlBpbGloIHRla3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iUGVtaWxpaGFuIHRla3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iVGFtYmFoIGtlIGthbXVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJQYWRhbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImlucHV0TWV0aG9kIiBtc2dpZD0iMTY1MzYzMDA2MjMwNDU2Nzg3OSI+IkthZWRhaCBpbnB1dCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVkaXRUZXh0TWVudVRpdGxlIiBtc2dpZD0iNDkwOTEzNTU2NDk0MTgxNTQ5NCI+IlRpbmRha2FuIHRla3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RpdGxlIiBtc2dpZD0iNTU3NjI3MjQ5NjM2NTY4NDgzNCI+IlJ1YW5nIHN0b3JhbiBzZW1ha2luIGJlcmt1cmFuZ2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190ZXh0IiBtc2dpZD0iNjY0MDUwNTgxNzYxNzQxNDM3MSI+IkJlYmVyYXBhIGZ1bmdzaSBzaXN0ZW0gbXVuZ2tpbiB0aWRhayBiZXJmdW5nc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4NzE4MzM1MTIxMDYwNzg3OTE0Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBzZWRhbmcgYmVyamFsYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjQ2NTM1ODY5NDc3NDczMzAwNTgiPiJTZW50dWggdW50dWsgbWFrbHVtYXQgbGFuanV0IGF0YXUgdW50dWsgbWVuZ2hlbnRpa2FuIGFwbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvayIgbXNnaWQ9IjU5NzAwNjA0MzA1NjI1MjQ5MTAiPiJPSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjY0NDI1NjA1NzEyNTk5MzUxMzAiPiJCYXRhbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InllcyIgbXNnaWQ9IjUzNjI5ODIzMDMzMzc5NjkzMTIiPiJPSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vIiBtc2dpZD0iNTE0MTUzMTA0NDkzNTU0MTQ5NyI+IkJhdGFsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlhbG9nX2FsZXJ0X3RpdGxlIiBtc2dpZD0iMjA0OTY1ODcwODYwOTA0MzEwMyI+IlBlcmhhdGlhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvYWRpbmciIG1zZ2lkPSI3OTMzNjgxMjYwMjk2MDIxMTgwIj4iTWVtdWF0a2Fu4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vbiIgbXNnaWQ9IjE1NDQ2ODI3NTU1MTQ0OTQyOTgiPiJISURVUCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb2ZmIiBtc2dpZD0iNjgxNTg3MDM4Njk3MjgwNTgzMiI+Ik1BVElLQU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aGljaEFwcGxpY2F0aW9uIiBtc2dpZD0iNDUzMzE4NTk0NzA2NDc3MzM4NiI+IlNlbGVzYWlrYW4gdGluZGFrYW4gbWVuZ2d1bmFrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNVc2UiIG1zZ2lkPSI0NTgzMDE4MzY4MDAwNjEwNDM4Ij4iR3VuYWthbm55YSBzZWNhcmEgbGFsYWkgdW50dWsgdGluZGFrYW4gaW5pLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNsZWFyRGVmYXVsdEhpbnRNc2ciIG1zZ2lkPSIzMjUyNTg0Njg5NTEyMDc3MjU3Ij4iUGFkYW0gYmVyc2loIGxhbGFpIGRhbGFtIHRldGFwYW4gU2lzdGVtICZndDsgQXBsICZndDsgRGltdWF0IHR1cnVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNob29zZUFjdGl2aXR5IiBtc2dpZD0iNzQ4Njg3NjE0Nzc1MTgwMzMzMyI+IlBpbGloIHRpbmRha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4iUGlsaWggYXBsIHVudHVrIHBlcmFudGkgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9BcHBsaWNhdGlvbnMiIG1zZ2lkPSIyOTkxODE0MjczOTM2NTA0Njg5Ij4iVGlhZGEgYXBsIHlhbmcgYm9sZWggbWVuamFsYW5rYW4gdGluZGFrYW4gaW5pLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFlcnJfdGl0bGUiIG1zZ2lkPSIxOTA1ODAwNTYwMzE3MTM3NzUyIj48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFlcnJfYXBwbGljYXRpb24iIG1zZ2lkPSI5MzI2Mjg0ODgwMTMwOTI3NzYiPiJNYWxhbmdueWEsIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gdGVsYWggYmVyaGVudGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWVycl9wcm9jZXNzIiBtc2dpZD0iNDUwNzA1ODk5NzAzNTY5NzU3OSI+Ik1hbGFuZ255YSwgcHJvc2VzIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiB0ZWxhaCBiZXJoZW50aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfdGl0bGUiIG1zZ2lkPSI0MzUxOTQ4NDgxNDU5MTM1NzA5Ij48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjE5MDQ0NzcxODkwNTcxOTkwNjYiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUyJHM8L3hsaWZmOmc+IHRpZGFrIGJlcnRpbmRhayBiYWxhcy5cblxuQWRha2FoIGFuZGEgbWFodSBtZW51dHVwbnlhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+IkFrdGl2aXRpIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4gdGlkYWsgYmVydGluZGFrIGJhbGFzLiBcblxuIEFkYWthaCBhbmRhIG1haHUgbWVudXR1cG55YT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfYXBwbGljYXRpb25fcHJvY2VzcyIgbXNnaWQ9Ijg5NDE3NTc2MDczNDA0ODEwNTciPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IHRpZGFrIGJlcnRpbmRhayBiYWxhcy4gQWRha2FoIGFuZGEgbWFodSBtZW51dHVwbnlhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9wcm9jZXNzIiBtc2dpZD0iNjUxMzIwOTg3NDg4MDUxNzEyNSI+IlByb3NlcyA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4gdGlkYWsgYmVydGluZGFrIGJhbGFzLiBcblxuQWRha2FoIGFuZGEgbWFodSBtZW51dHVwbnlhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2Nsb3NlIiBtc2dpZD0iODM0NjA3MjA5NDUyMTI2NTYwNSI+Ik9LIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVwb3J0IiBtc2dpZD0iNDA2MDIxODI2MDk4NDc5NTcwNiI+IkxhcG9ya2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2FpdCIgbXNnaWQ9IjcxNDcxMTgyMTcyMjYzMTc3MzIiPiJUdW5nZ3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3ZWJwYWdlX3VucmVzcG9uc2l2ZSIgbXNnaWQ9IjMyNzI3NTgzNTExMzgxMjI1MDMiPiJMYW1hbiBpbmkgdGlkYWsgYmVydGluZGFrIGJhbGFzLiBcblxuQWRha2FoIGFuZGEgbWFodSBtZW51dHVwbnlhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTU0Nzk5Nzc4MDUwNjcxMzU4MSI+IkFwbCBkaXViYWggaGFsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3JlcGxhY2UiIG1zZ2lkPSI2MjAyNDk4OTQ5OTcwMjgxNDEyIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBraW5pIHNlZGFuZyBiZXJqYWxhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ19vcmlnaW5hbCIgbXNnaWQ9IjE4ODEwMjAyMzAyMTY2ODY4MyI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gcGFkYSBhc2FsbnlhIHRlbGFoIGRpbGFuY2Fya2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zY2FsZSIgbXNnaWQ9IjMyMDI5NTU2Njc2NzU5NDQ0OTkiPiJTa2FsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9zaG93IiBtc2dpZD0iNDAxMzg3ODg3NjQ4NjY1NTg5MiI+IlNlbnRpYXNhIHR1bmp1a2thbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+IkRheWFrYW4gc2VtdWxhIGtvZCBrb21wYWsgaW5pIHRldGFwYW4gU2lzdGVtICZndDsgQXBsICZndDsgRGltdWF0IHR1cnVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtdl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjMzMDcyMDkxOTIxNTU0NDI4MjkiPiJBcGwgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiAocHJvc2VzIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMiRzPC94bGlmZjpnPikgdGVsYWggbWVsYW5nZ2FyIGRhc2FyIE1vZCBUZWdhc255YSBzZW5kaXJpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtdl9wcm9jZXNzIiBtc2dpZD0iNTEyMDM5NzAxMjA0NzQ2MjQ0NiI+IlByb3NlcyA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4gdGVsYWggbWVsYW5nZ2FyIGRhc2FyIE1vZCBUZWdhc255YSBzZW5kaXJpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3RpdGxlIiBtc2dpZD0iMTU4NDE5MjI4NTQ0MTQwNTc0NiI+IkFuZHJvaWQgc2VkYW5nIG1lbmFpayB0YXJhZi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2FwayIgbXNnaWQ9Ijc5MDQwNDI2ODIxMTE1MjYxNjkiPiJNZW5nb3B0aW11bWthbiBhcGwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBkYXJpcGFkYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3N0YXJ0aW5nX2FwcHMiIG1zZ2lkPSI0NTE0NjQ1MTYzNDY5MjY3MTMiPiJNZW11bGFrYW4gYXBsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2NvbXBsZXRlIiBtc2dpZD0iMTQwNTk1NDc1NDExMjk5OTIyOSI+IkJ1dCBha2hpci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uIiBtc2dpZD0iOTA4NzA2Mzk4NTc3NjYyNjE2NiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiUxJHM8L3hsaWZmOmc+IGRpamFsYW5rYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uX2RldGFpbCIgbXNnaWQ9IjE3MjE2ODE3NDE2MTc4OTg4NjUiPiJTZW50dWggdW50dWsgYmVydHVrYXIga2UgYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RpdGxlIiBtc2dpZD0iNzE1MzE2NzA4NTQwMzI5ODE2OSI+IlR1a2FyIGFwbD8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGV4dCIgbXNnaWQ9IjcwMjI2MzE5MjQ1MzQ0MDY0MDMiPiJBcGwgbGFpbiBzdWRhaCBwdW4gZGlqYWxhbmthbiB5YW5nIG1lc3RpIGRpaGVudGlrYW4gc2ViZWx1bSBhbmRhIGJvbGVoIG1lbXVsYWthbiB5YW5nIGJhaGFydS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2FjdGlvbiIgbXNnaWQ9IjQ5MzEyOTE3MjIzODU2NjI4MiI+IktlbWJhbGkga2UgPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwODIwOTQyNzU1ODAzNTgwNDkiPiJKYW5nYW4gbXVsYWthbiBhcGwgYmFoYXJ1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5ld19hcHBfYWN0aW9uIiBtc2dpZD0iNTQ3Mjc1NjkyNjk0NTQ0MDcwNiI+Ik11bGFrYW4gPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5MzIxNDM1OTgzNzE1MzczNDAiPiJIZW50aWthbiBhcGwgbGFtYSB0YW5wYSBtZW55aW1wYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VuZFRleHQiIG1zZ2lkPSI1MjA5ODc0NTcxOTU5NDY5MTQyIj4iUGlsaWggdGluZGFrYW4gdW50dWsgdGVrcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9yaW5ndG9uZSIgbXNnaWQ9IjY4ODU0MjE0MDY4NDU3MzQ2NTAiPiJLZWxhbnRhbmdhbiBwZW5kZXJpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWMiIG1zZ2lkPSI1NDIxNjUxMTU3MTM4NjI4MTcxIj4iS2VsYW50YW5nYW4gbWVkaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWNfaGludF9wbGF5aW5nX3Rocm91Z2hfYmx1ZXRvb3RoIiBtc2dpZD0iOTE2NTk4NDM3OTM5NDYwMTUzMyI+IkJlcm1haW4gbWVsYWx1aSBCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWNfaGludF9zaWxlbnRfcmluZ3RvbmVfc2VsZWN0ZWQiIG1zZ2lkPSI4MzEwNzM5OTYwOTczMTU2MjcyIj4iTmFkYSBkZXJpbmcgc2VueWFwIGRpdGV0YXBrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfY2FsbCIgbXNnaWQ9IjM5NDE2ODAwNDEyODI3ODg3MTEiPiJLZWxhbnRhbmdhbiBzZW1hc2EgcGFuZ2dpbGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2JsdWV0b290aF9jYWxsIiBtc2dpZD0iMjAwMjg5MTkyNjM1MTE1MTUzNCI+IktlbGFudGFuZ2FuIHNlbWFzYSBkYWxhbSBwYW5nZ2lsYW4gbWVuZ2d1bmFrYW4gQmx1ZXRvb3RoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2FsYXJtIiBtc2dpZD0iMTk4NTE5MTYxNjA0MjY4OTEwMCI+IktlbGFudGFuZ2FuIHBlbmdnZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjI0MjIyNjU2NTY3NDQyNzY3MTUiPiJLZWxhbnRhbmdhbiBwZW1iZXJpdGFodWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Vua25vd24iIG1zZ2lkPSIxNDAwMjE5NjY5NzcwNDQ1OTAyIj4iS2VsYW50YW5nYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ibHVldG9vdGgiIG1zZ2lkPSI2NTM4ODk0MTc3MjU1OTY0MzQwIj4iS2VsYW50YW5nYW4gQmx1ZXRvb3RoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fcmluZ2VyIiBtc2dpZD0iMzMyNjAwMzg0NzAwNjE2MjQ5NiI+IktlbGFudGFuZ2FuIG5hZGEgZGVyaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25faW5jYWxsIiBtc2dpZD0iODg5MDA3MzIxODE1NDU0MzM5NyI+IktlbGFudGFuZ2FuIHBhbmdnaWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX21lZGlhIiBtc2dpZD0iNDIxNzMxMTcxOTY2NTE5NDIxNSI+IktlbGFudGFuZ2FuIG1lZGlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbm90aWZpY2F0aW9uIiBtc2dpZD0iNzA0NDk4NjU0NjQ3NzI4MjI3NCI+IktlbGFudGFuZ2FuIHBlbWJlcml0YWh1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9kZWZhdWx0IiBtc2dpZD0iMzc4OTc1ODk4MDM1NzY5NjkzNiI+Ik5hZGEgZGVyaW5nIGxhbGFpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdF93aXRoX2FjdHVhbCIgbXNnaWQ9IjgxMjk1NjM0ODA4OTU5OTAzNzIiPiJOYWRhIGRlcmluZyBsYWxhaSAoPHhsaWZmOmcgaWQ9IkFDVFVBTF9SSU5HVE9ORSI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfc2lsZW50IiBtc2dpZD0iNzkzNzYzNDM5MjQwODk3NzA2MiI+IlRpYWRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfcGlja2VyX3RpdGxlIiBtc2dpZD0iMzUxNTE0MzkzOTE3NTExOTA5NCI+Ik5hZGEgZGVyaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfdW5rbm93biIgbXNnaWQ9IjU0Nzc5MTk5ODg3MDE3ODQ3ODgiPiJOYWRhIGRlcmluZyB0aWRhayBkaWtldGFodWkiPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjY1NDEyMzk4NzQxODE2ODY5MyI+IlJhbmdrYWlhbiBXaS1GaSB0ZXJzZWRpYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+IlJhbmdrYWlhbiBXaS1GaSB0ZXJzZWRpYSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGVfZGV0YWlsZWQiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4iUmFuZ2thaWFuIFdpLUZpIHRlcmJ1a2EgdGVyc2VkaWEiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc5MTU4OTUzMjM2NDQyOTI3NjgiPiJSYW5na2FpYW4gV2ktRmkgdGVyYnVrYSB0ZXJzZWRpYSI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4iTG9nIG1hc3VrIGtlIHJhbmdrYWlhbiBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4iTG9nIG1hc3VrIGtlIHJhbmdrYWlhbiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luX2RldGFpbGVkICg4MDAwMDgxOTQxNDQ3OTc2MTE4KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkIiBtc2dpZD0iNzkwNDIxNDIzMTY1MTU0NjM0NyI+IlRpZGFrIGJvbGVoIG1lbnlhbWJ1bmcga2VwYWRhIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiBtZW1wdW55YWkgc2FtYnVuZ2FuIGludGVybmV0IHlhbmcga3VyYW5nIGJhaWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZGlhbG9nX3RpdGxlIiBtc2dpZD0iOTc2MTE3ODI2NTkzMjQ1MTciPiJXaS1GaSBMYW5nc3VuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3R1cm5vbl9tZXNzYWdlIiBtc2dpZD0iMjkwOTI1MDk0MjI5OTYyNzI0NCI+Ik11bGFrYW4gV2ktRmkgTGFuZ3N1bmcuIEhhbCBpbmkgYWthbiBtZW1hdGlrYW4gcGVuZ2VuZGFsaWFuIGtsaWVuL2xpcHV0YW4gV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UiIG1zZ2lkPSIzNzYzNjY5Njc3OTM1NjIzMDg0Ij4iVGlkYWsgZGFwYXQgbWVtdWxha2FuIFdpLUZpIExhbmdzdW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjA2ODMyMTg4MTY3MzczNDg4NiI+IldpLUZpIERpcmVjdCBkaWhpZHVwa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiJTZW50dWggdW50dWsgdGV0YXBhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiJUZXJpbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWNsaW5lIiBtc2dpZD0iMjExMjIyNTQ1MTcwNjEzNzg5NCI+IlRvbGFrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl9zZW50X3RpdGxlIiBtc2dpZD0iMTMxODk3NTE4NTExMjA3MDczNCI+IkplbXB1dGFuIGRpaGFudGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfaW52aXRhdGlvbl90b19jb25uZWN0X3RpdGxlIiBtc2dpZD0iNDk1ODgwMzk0ODY1ODUzMzYzNyI+IkplbXB1dGFuIHVudHVrIG1lbnlhbWJ1bmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcm9tX21lc3NhZ2UiIG1zZ2lkPSI1NzAzODkxNzQ3MzE5NTE3NjkiPiJEYXJpcGFkYToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90b19tZXNzYWdlIiBtc2dpZD0iMjQ4OTY4OTc0NTIyMDQ0MDk5Ij4iS2VwYWRhOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VudGVyX3Bpbl9tZXNzYWdlIiBtc2dpZD0iNTkyMDkyOTU1MDM2NzgyODk3MCI+IlRhaXBrYW4gUElOIHlhbmcgZGlwZXJsdWthbjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9zaG93X3Bpbl9tZXNzYWdlIiBtc2dpZD0iODUzMDU2MzMyMzg4MDkyMTA5NCI+IlBJTjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODAxMjk4MTI1Nzc0MjIzMjQ3NSI+IlNhbWJ1bmdhbiB0YWJsZXQga2UgV2ktRmkgYWthbiBkaXB1dHVza2FuIGJ1YXQgc2VtZW50YXJhIHdha3R1IHNlbWFzYSB0YWJsZXQgYmVyc2FtYnVuZyBrZSA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4iU2FtYnVuZ2FuIHRlbGVmb24ga2UgV2ktRmkgYWthbiBkaXB1dHVza2FuIGJ1YXQgc2VtZW50YXJhIHdha3R1IHNlbWFzYSB0ZWxlZm9uIGJlcnNhbWJ1bmcga2UgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9jaGFyYWN0ZXIiIG1zZ2lkPSIzMzY1NTUwMTIwNjE3NzAxNzQ1Ij4iTWFzdWtrYW4gYWtzYXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfdGl0bGUiIG1zZ2lkPSI3Mjk2NjEyNzgxMTI4OTE3NzE5Ij4iTWVuZ2hhbnRhciBtZXNlaiBTTVMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9tZXNzYWdlIiBtc2dpZD0iMzg2Nzg5OTE2OTY1MTQ5NjQzMyI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IHNlZGFuZyBtZW5naGFudGFyIGJhbnlhayBtZXNlaiBTTVMuIEFkYWthaCBhbmRhIG1haHUgbWVtYmVuYXJrYW4gYXBsIGluaSB0ZXJ1cyBtZW5naGFudGFyIG1lc2VqPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3llcyIgbXNnaWQ9IjM2NjM3MjU5OTM4NTU4MTY4MDciPiJCZW5hcmthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4iTmFmaWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyBpbmdpbiBtZW5naGFudGFyIG1lc2VqIGtlcGFkYSAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDsvYiZndDsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjM0OTIwMjU3MTk4NjgwNzg0NTciPiJJbmkgYWthbiBtZW55ZWJhYmthbiBha2F1biBtdWRhaCBhbGloIGFuZGEgIjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+ImRpa2VuYWthbiBjYWoiPC9mb250PiIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3ByZW1pdW1fc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iNTUyMzgyNjM0OTEwNTEyMzY4NyI+PGZvbnQgZmdjb2xvcj0iI2ZmZmZiMDYwIj4iSW5pIGFrYW4gbWVueWViYWJrYW4gYWthdW4gbXVkYWggYWxpaCBhbmRhIGRpa2VuYWthbiBjYWouIjwvZm9udD48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWxsb3ciIG1zZ2lkPSI0NDU4ODc4NjM3MTExMDIzNDEzIj4iSGFudGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9kZW55IiBtc2dpZD0iMjkyNzM4OTg0MDIwOTE3MDcwNiI+IkJhdGFsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfY2hvaWNlIiBtc2dpZD0iNTI4OTUzODU5MjI3MjIxODEzNiI+IkluZ2F0IHBpbGloYW4gc2F5YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4iQW5kYSBib2xlaCBtZW51a2FyIGluaSBuYW50aSBkYWxhbSBUZXRhcGFuwqAmZ3Q7wqBBcGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2Fsd2F5c19hbGxvdyIgbXNnaWQ9IjMyNDExODExNTQ4Njk0OTMzNjgiPiJTZW50aWFzYSBCZW5hcmthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbmV2ZXJfYWxsb3ciIG1zZ2lkPSI0NDY5OTI3NjU3NzQyNjk2NzMiPiJKYW5nYW4gQmVuYXJrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiJLYWQgU0lNIGRpa2VsdWFya2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfbWVzc2FnZSIgbXNnaWQ9IjIzMzMxNjQ1NTk5NzA5NTg2NDUiPiJSYW5na2FpYW4gbXVkYWggYWxpaCB0aWRhayBha2FuIHRlcnNlZGlhIHNlaGluZ2dhIGFuZGEgbXVsYSBzZW11bGEgZGVuZ2FuIGthZCBTSU0geWFuZyBzYWggZGltYXN1a2thbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiJTZWxlc2FpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX3RpdGxlIiBtc2dpZD0iMzcxOTY3MDUxMjg4OTY3NDY5MyI+IkthZCBTSU0gZGl0YW1iYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfbWVzc2FnZSIgbXNnaWQ9IjY1OTk5NDUzMDExNDEwNTAyMTYiPiJNdWxha2FuIHNlbXVsYSBwZXJhbnRpIGFuZGEgdW50dWsgbWVuZ2Frc2VzIHJhbmdrYWlhbiBtdWRhaCBhbGloLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9yZXN0YXJ0X2J1dHRvbiIgbXNnaWQ9IjQ3MjI0MDc4NDI4MTUyMzIzNDciPiJNdWxha2FuIHNlbXVsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjgzNDkzNjI2MjMwNjg4MTkyOTUiPiJUZXRhcGthbiBtYXNhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNTg3OTQ1MDY1OTQ1Mzc4MjI3OCI+IlRldGFwa2FuIHRhcmlraCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9zZXQiIG1zZ2lkPSI1Nzc3MDc1NjE0MzIxMDg3NzU4Ij4iVGV0YXBrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfZG9uZSIgbXNnaWQ9IjI1MDc2ODM3NTE3NTkzMDg4MjgiPiJTZWxlc2FpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybXNfbmV3X3Blcm1fcHJlZml4IiBtc2dpZD0iODI1Nzc0MDcxMDc1NDMwMTQwNyI+PGZvbnQgc2l6ZT0iMTIiIGZnY29sb3I9IiNmZjMzYjVlNSI+IkJBSEFSVTogIjwvZm9udD48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1zX2Rlc2NyaXB0aW9uX2FwcCIgbXNnaWQ9IjUxMzk4MzYxNDMyOTMyOTk0MTciPiJEaXNlZGlha2FuIG9sZWggPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub19wZXJtaXNzaW9ucyIgbXNnaWQ9IjcyODMzNTc3MjgyMTkzMzgxMTIiPiJUaWFkYSBrZWJlbmFyYW4gZGlwZXJsdWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1fY29zdHNfbW9uZXkiIG1zZ2lkPSI0OTAyNDcwMzI0MTQyMTUxMTE2Ij4iYW5kYSBtdW5na2luIGRpa2VuYWthbiBiYXlhcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4iU3RvcmFuIG1hc3NhIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTkwMTQ1OTA0MTM5ODc1MTQ5NSI+InNhbWJ1bmdhbiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMzMDg1MzgwOTQzMTY0Nzc4MzkiPiJBbmRhIGJlcnNhbWJ1bmcga2Uga29tcHV0ZXIgbWVsYWx1aSBVU0IuIFNlbnR1aCBidXRhbmcgZGkgYmF3YWggamlrYSBhbmRhIG1haHUgbWVueWFsaW4gZmFpbCBhbnRhcmEga29tcHV0ZXIgZGFuIHN0b3JhbiBVU0IgQW5kcm9pZCBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiJBbmRhIHRlbGFoIGJlcnNhbWJ1bmcga2Uga29tcHV0ZXIgbWVsYWx1aSBVU0IuIFNlbnR1aCBidXRhbmcgZGkgYmF3YWggamlrYSBhbmRhIG1haHUgbWVueWFsaW4gZmFpbCBkaSBhbnRhcmEga29tcHV0ZXIgZGFuIGthZCBTRCBBbmRyb2lkIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYnV0dG9uX21vdW50IiBtc2dpZD0iMTA1MjI1OTkzMDM2OTUwODIzNSI+IkhpZHVwa2FuIHN0b3JhbiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiJUZXJkYXBhdCBtYXNhbGFoIG1lbmdndW5ha2FuIHN0b3JhbiBVU0IgYW5kYSB1bnR1ayBzdG9yYW4gbWFzc2EgVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4iVGVyZGFwYXQgbWFzYWxhaCBtZW5nZ3VuYWthbiBrYWQgU0QgYW5kYSB1bnR1ayBzdG9yYW4gbWFzc2EgVVNCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0IgZGlzYW1idW5na2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5Mzk4MjI3ODM4MjgxODM3NjMiPiJQaWxpaCB1bnR1ayBtZW55YWxpbiBmYWlsIGtlL2Rhcmkga29tcHV0ZXIgYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzMzYwNTgzOTY2NjM1MTYwMTciPiJNYXRpa2FuIHN0b3JhbiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTY1Njg1MjA5ODU1NTYyMzgyMiI+IlNlbnR1aCB1bnR1ayBtZW1hdGlrYW4gc3RvcmFuIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX3RpdGxlIiBtc2dpZD0iNjYwMTI5ODUxNzA4Nzc1ODUzIj4iU3RvcmFuIFVTQiBzZWRhbmcgZGlndW5ha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQyNjQwMjUyODA3NzcyMTk1MjEiPiJTZWJlbHVtIG1lbWF0aWthbiBzdG9yYW4gVVNCLCBueWFobGVrYXAgKFwia2VsdWFya2FuXCIpIHN0b3JhbiBVU0IgQW5kcm9pZCBkYXJpIGtvbXB1dGVyIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+IlNlYmVsdW0gbWVtYXRpa2FuIHN0b3JhbiBVU0IsIG55YWggbGVrYXAgKFwia2VsdWFya2FuXCIpIGthZCBTRCBBbmRyb2lkIGRhcmkga29tcHV0ZXIgYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjcwNjAyMTgwMzQ5MDA2OTYwMjkiPiJNYXRpa2FuIHN0b3JhbiBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIxOTcwMzc0ODk4MjYzMDYzODM2Ij4iVGVyZGFwYXQgbWFzYWxhaCBtZW1hdGlrYW4gc3RvcmFuIFVTQi4gU2VtYWsgYmFoYXdhIGFuZGEgdGVsYWggbWVueWFobGVrYXBrYW4gaG9zIFVTQiwga2VtdWRpYW4gY3ViYSBsYWdpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190aXRsZSIgbXNnaWQ9Ijk2MzAzOTAzMzQ3MDQ3ODY5NyI+IkhpZHVwa2FuIHN0b3JhbiBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2NvbmZpcm1fa2lsbF9zdG9yYWdlX3VzZXJzX3RleHQiIG1zZ2lkPSI1MTAwNDI4NzU3MTA3NDY5NDU0Ij4iSmlrYSBhbmRhIG1lbmdoaWR1cGthbiBzdG9yYW4gVVNCLCBzZXNldGVuZ2FoIGFwbCB5YW5nIHNlZGFuZyBhbmRhIGd1bmFrYW4gYWthbiB0ZXJoZW50aSBkYW4gbXVuZ2tpbiB0aWRhayBha2FuIHRlcnNlZGlhIHNlaGluZ2dhIGFuZGEgbWVtYXRpa2FuIHN0b3JhbiBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGxnX2Vycm9yX3RpdGxlIiBtc2dpZD0iNzMyMzY1ODQ2OTYyNjUxNDIwNyI+Ik9wZXJhc2kgVVNCIHRpZGFrIGJlcmpheWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkbGdfb2siIG1zZ2lkPSI3Mzc2OTUzMTY3MDM5ODY1NzAxIj4iT0siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiJEaXNhbWJ1bmdrYW4gc2ViYWdhaSBwZXJhbnRpIG1lZGlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3B0cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxOTYwODE3MTkyMjE2MDY0ODMzIj4iRGlzYW1idW5na2FuIHNlYmFnYWkga2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2NkX2luc3RhbGxlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2Nzc0NzEyODI3ODkyMDkwNzU0Ij4iRGlzYW1idW5na2FuIHNlYmFnYWkgcGVtYXNhbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijc4NDgyMzY5NzQwODc2NTM2NjYiPiJEaXNhbWJ1bmdrYW4ga2VwYWRhIGFrc2Vzb3JpIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjIyOTA4NTkzOTk5ODM3MjAyNzEiPiJTZW50dWggdW50dWsgbWVuZGFwYXRrYW4gcGlsaWhhbiBVU0IgeWFuZyBsYWluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI5MDIwMDkyMTk2MDYxMDA3MjYyIj4iRm9ybWF0IHN0b3JhbiBVU0I/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+IkZvcm1hdCBrYWQgU0Q/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkzNDAxNjg1MzQyNTc2MTA3OCI+IlNlbXVhIGZhaWwgeWFuZyBkaXNpbXBhbiBkYWxhbSBzdG9yYW4gVVNCIGFuZGEgYWthbiBkaXBhZGFta2FuLiBUaW5kYWthbiBpbmkgdGlkYWsgYm9sZWggZGl0ZXJiYWxpa2thbiEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4iU2VtdWEgZGF0YSBwYWRhIGthZCBhbmRhIGFrYW4gaGlsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9idXR0b25fZm9ybWF0IiBtc2dpZD0iNDEzMTA2NDU2MDEyNzQ3ODY5NSI+IkZvcm1hdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+IlBlbnlhaHBlcGlqYXRhbiBVU0IgZGlzYW1idW5na2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjEwMTY2NTQ2Mjc2MjY0NzYxNDIiPiJTZW50dWggdW50dWsgbWVsdW1wdWhrYW4gcGVueWFocGVwaWphdGFuIFVTQi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaW5wdXRfbWV0aG9kIiBtc2dpZD0iNDY1MzM4NzMzNjc5MTIyMjk3OCI+IlBpbGloIGthZWRhaCBpbnB1dCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iOTA5MTY1MjE1NzcyMjQ5NTExNiI+IlNlZGlha2FuIGthZWRhaCBpbnB1dCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiJQYXBhbiBrZWt1bmNpIGZpemlrYWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoYXJkd2FyZSIgbXNnaWQ9Ijc1MTc4MjEwODY4ODg5OTAyNzgiPiJQZXJrYWthc2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxNDA3MzY3MDE3MjYzMDMwNzczIj4iUGlsaWggc3VzdW4gYXR1ciBwYXBhbiBrZWt1bmNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0NjU5MDc3MDA0NDkyNTcwNjMiPiJTZW50dWggdW50dWsgbWVtaWxpaCBzdXN1biBhdHVyIHBhcGFuIGtla3VuY2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfYWxwaGFiZXQiIG1zZ2lkPSI1NDMzMjc1NDg1NDk5MDM5MTk5Ij4iIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfbnVtZXJpY19hbHBoYWJldCIgbXNnaWQ9IjQwMzAxNzA1MjQ1OTUxMjM2MTAiPiIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FuZGlkYXRlc19zdHlsZSIgbXNnaWQ9IjQzMzM5MTMwODk2MzcwNjIyNTciPjx1PiJjYWxvbiI8L3U+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM0NDk4MTYwMDUzNTE0Njg1NjAiPiJNZW55ZWRpYWthbiBzdG9yYW4gVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NTc2MDM0MTg5NzA5OTQwNTAiPiJNZW55ZWRpYWthbiBrYWQgU0QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4Mjg3MzE5ODgyOTI2NzM3MDUzIj4iTWVueWVtYWsgdW50dWsgbWVuZ2VzYW4gcmFsYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiJTdG9yYW4gVVNCIGtvc29uZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IkthZCBTRCBrb3NvbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4iU3RvcmFuIFVTQiBrb3NvbmcgYXRhdSBtZW1wdW55YWkgc2lzdGVtIGZhaWwgeWFuZyB0aWRhayBkaXNva29uZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2NDEwNjU2NDE3ODY5MjM2MDQiPiJLYWQgU0Qga29zb25nIGF0YXUgbWVtcHVueWFpIHNpc3RlbSBmYWlsIHlhbmcgdGlkYWsgZGlzb2tvbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4iU3RvcmFuIFVTQiByb3NhayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50YWJsZV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDEwNzIzOTA2MDE5MTAwMTg5Ij4iS2FkIFNEIHJvc2FrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE3OTU5MTc1NzgzOTUzMzMyODAiPiJTdG9yYW4gVVNCIHJvc2FrLiBDdWJhIGZvcm1hdGthbm55YSBzZW11bGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTc1Mzg5ODU2NzUyNTU2ODI1MyI+IkthZCBTRCByb3Nhay4gQ3ViYSBmb3JtYXRrYW5ueWEgc2VtdWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIxNjYxNjgzMDMxMzMwOTUxMDczIj4iU3RybiBVU0IgZGlhbGgga2xyIHRucGEgZGlqZ2thIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+IkthZCBTRCBkaWtlbHVhcmthbiB0YW5wYSBkaWphbmdrYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiJOeWFobGVrYXAgc3RvcmFuIFVTQiBzZWJlbHVtIG1lbmdlbHVhcmthbm55YSB1bnR1ayBtZW5nZWxha2thbiBrZWhpbGFuZ2FuIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjYwMTgzMjkzNzQ3NDQ4MjQxIj4iTnlhaGxla2FwIGthZCBTRCBzZWJlbHVtIG1lbmdlbHVhcmthbm55YSB1bnR1ayBtZW5nZWxha2thbiBrZWhpbGFuZ2FuIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzk2Nzk3Mzg5MzI3MDM2MDIzMCI+IlN0cm4gVVNCIHNsYW1hdCB1dGsgZGlrbHVhcmthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjcyOTgwMTEzMDc5MDYxNjIwMCI+InNlbGFtYXQgdW50dWsgbWVuZ2VsdWFya2FuIGthZCBTRCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE0MjE5NTM2MTYwNjQ5MzUzMCI+IkFuZGEgYm9sZWggbWVuZ2VsdWFya2FuIHN0b3JhbiBVU0IgZGVuZ2FuIHNlbGFtYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2ODg0MTI3ODEzODM3NzYwNCI+IkFuZGEgYm9sZWggbWVuZ2VsdWFya2FuIGthZCBTRCBkZW5nYW4gc2VsYW1hdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDQ4NjM3NzIzMDE0MDIyNzY1MSI+IlN0b3JhbiBVU0IgZGlhbGloIGtlbHVhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg5MDI1MTgwMzA0MDQzODEzMTgiPiJLYWQgU0QgZGlrZWx1YXJrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4iU3RvcmFuIFVTQiBkaWtlbHVhcmthbi4gU2lzaXBrYW4gbWVkaWEgYmFydS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiJLYWQgU0QgdGVsYWggZGlrZWx1YXJrYW4uIE1hc3Vra2FuIHlhbmcgYmFydS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9saXN0X2VtcHR5IiBtc2dpZD0iMTY3NTM4ODMzMDc4Njg0MTA2NiI+IlRpYWRhIGFrdGl2aXRpIHlhbmcgc2VwYWRhbiBkaXRlbXVpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9Ijg3ODczNTIwNzQzMjY3NDg4OTIiPiJrZW1hcyBraW5pIHN0YXRpc3RpayBwZW5nZ3VuYWFuIGtvbXBvbmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGtnVXNhZ2VTdGF0cyIgbXNnaWQ9IjExMDY2MTI0MjQyNTQyNzc2MzAiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ3ViYWggc3VhaSBzdGF0aXN0aWsgcGVuZ2d1bmFhbiBrb21wb25lbiB5YW5nIGRpa3VtcHVsLiBCdWthbiB1bnR1ayBrZWd1bmFhbiBhcGwgYmlhc2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzNDEwMzYzMTEyMTE0MDY2OTIiPiJzYWxpbiBrYW5kdW5nYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb3B5UHJvdGVjdGVkRGF0YSIgbXNnaWQ9IjQzOTA2OTcxMjQyODgzMTc4MzEiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2d1bmFrYW4gcGVya2hpZG1hdGFuIGJla2FzIGxhbGFpIHVudHVrIG1lbnlhbGluIGthbmR1bmdhbi4gQnVrYW4gdW50dWsgZGlndW5ha2FuIG9sZWggYXBsIGJpYXNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iMTY0MjAyNDQ1NTc1MDQxNDY5NCI+IkJ1YXQgbGFsdWFuIG91dHB1dCBtZWRpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JvdXRlX21lZGlhX291dHB1dCIgbXNnaWQ9IjQ5MzI4MTg3NDk1NDcyNDQzNDYiPiJNZW1iZW5hcmthbiBhcGwgdW50dWsgbWVtYnVhdCBsYWx1YW4gb3V0cHV0IG1lZGlhIGtlIHBlcmFudGkgbHVhcmFuIGxhaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI3NTY1NTUyMjM3OTc3ODE1MDQ3Ij4iQWtzZXMgc3RvcmFuIHNlbGFtYXQgcGVuZ2F3YWwga2VrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc19rZXlndWFyZF9zZWN1cmVfc3RvcmFnZSIgbXNnaWQ9IjU4NjYyNDU0ODQzMDMyODU3NjIiPiJNZW1iZW5hcmthbiBhcGxpa2FzaSBtZW5nYWtzZXMgc3RvcmFuIHNlbGFtYXQgcGVuZ2F3YWwga2VrdW5jaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIxNzIxOTUxODQyMDc4MjgzODciPiJLYXdhbCBwYXBhcmthbiBkYW4gc2VtYnVueWlrYW4gcGVuZ2F3YWwga2VrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIzMDQzNzMyMjkwNTE4NjI5MDYxIj4iTWVtYmVuYXJrYW4gYXBsaWthc2kgdW50dWsgbWVuZ2F3YWwgcGVuZ2F3YWwga2VrdW5jaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiJTZW50dWggZHVhIGthbGkgdW50dWsgbWVuZGFwYXRrYW4ga2F3YWxhbiB6dW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJnYWRnZXRfaG9zdF9lcnJvcl9pbmZsYXRpbmciIG1zZ2lkPSI0ODgyMDA0MzE0OTA2NDY2MTYyIj4iVGlkYWsgZGFwYXQgbWVuYW1iYWhrYW4gd2lkZ2V0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZ28iIG1zZ2lkPSI4MzIwODQ1NjUxNzM3MzY5MDI3Ij4iUGVyZ2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlYXJjaCIgbXNnaWQ9IjY1ODExMDI3MTgyMjgwNzgxMSI+IkNhcmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlbmQiIG1zZ2lkPSIyMzE2MTY2NTU2MzQ5MzE0NDI0Ij4iSGFudGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9uZXh0IiBtc2dpZD0iMzEzODg0MzkwNDAwOTgxMzgzNCI+IlNldGVydXNueWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX2RvbmUiIG1zZ2lkPSI4OTcxNTE2MTE3OTEwOTM0NjA1Ij4iU2VsZXNhaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fcHJldmlvdXMiIG1zZ2lkPSIxNDQzNTUwMDM5MjUwMTA1OTQ4Ij4iU2JsbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZGVmYXVsdCIgbXNnaWQ9IjI4NDA5MjE4ODU1NTgwNDU3MjEiPiJMYWtzYW5ha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlhbF9udW1iZXJfdXNpbmciIG1zZ2lkPSI1Nzg5MTc2NDI1MTY3NTczNTg2Ij4iRGFpbCBub21ib3Jcbm1lbmdndW5ha2FuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9jb250YWN0X3VzaW5nIiBtc2dpZD0iNDk0NzQwNTIyNjc4ODEwNDUzOCI+Ild1anVka2FuIGtlbmFsYW5cbm1lbmdndW5ha2FuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9oZWFkZXIiIG1zZ2lkPSIyMTA2MTAzODE3OTM3ODU5NjYyIj4iU2F0dSBhdGF1IGxlYmloIGFwbCBiZXJpa3V0IG1lbWludGEga2ViZW5hcmFuIHVudHVrIG1lbmdha3NlcyBha2F1biBhbmRhLCBzZWthcmFuZyBkYW4gcGFkYSBtYXNhIGhhZGFwYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2Zvb3RlciIgbXNnaWQ9IjMxMjUyMTEzNDMzNzkzNzY1NjEiPiJBZGFrYWggYW5kYSBtYWh1IG1lbWJlbmFya2FuIHBlcm1pbnRhYW4gaW5pPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImdyYW50X3Blcm1pc3Npb25zX2hlYWRlcl90ZXh0IiBtc2dpZD0iNjg3NDQ5NzQwODIwMTgyNjcwOCI+IlBlcm1pbnRhYW4gYWtzZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbGxvdyIgbXNnaWQ9IjcyMjU5NDg4MTEyOTYzODY1NTEiPiJCZW5hcmthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4iTmFmaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1pc3Npb25fcmVxdWVzdF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NDg2NzU5Nzk1OTI2MjM3OTA3Ij4iS2ViZW5hcmFuIGRpbWludGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIG1zZ2lkPSI4NTMwMzkzMTM5NjM5NTYwMTg5Ij4iS2ViZW5hcmFuIGRpbWludGFcbnVudHVrIGFrYXVuIDx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRfbWV0aG9kX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjgzNTU3MTc5OTQ0OTkyNjQ5Ij4iS2FlZGFoIGlucHV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3luY19iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMzY4Nzk2OTEzODM3NTA5MjQyMyI+IlBlbnllZ2VyYWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjQxNDgxMjA3NDIwOTY0NzQ2NDEiPiJLZWJvbGVoYWtzZXNhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndhbGxwYXBlcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTI0MDA4Nzg0NDMwNDY4NzY2MiI+IktlcnRhcyBkaW5kaW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iVHVrYXIga2VydGFzIGRpbmRpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJQZW5kZW5nYXIgcGVtYmVyaXRhaHVhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGRpYWt0aWZrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gZGlha3RpZmthbiBvbGVoIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlNlbnR1aCB1bnR1ayBtZW5ndXJ1cyByYW5na2FpYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHRfbG9uZyIgbXNnaWQ9IjY0MDczNTEwMDYyNDkxNzQ0NzMiPiJCZXJzYW1idW5nIGtlIDx4bGlmZjpnIGlkPSJTRVNTSU9OIj4lczwveGxpZmY6Zz4uIFNlbnR1aCB1bnR1ayBtZW5ndXJ1cyByYW5na2FpYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDQzNDM4OTY0NDQwOTYwNzQ1Ij4iVlBOIHNlbnRpYXNhIGhpZHVwIHNlZGFuZyBkaXNhbWJ1bmdrYW4uLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGVkIiBtc2dpZD0iODIwMjY3OTY3NDgxOTIxMzkzMSI+IlZQTiBzZW50aWFzYSBoaWR1cCB0ZWxhaCBkaXNhbWJ1bmdrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fZXJyb3IiIG1zZ2lkPSI2MDA5MjQ5ODE0MDM0NzA4MTc1Ij4iUmFsYXQgVlBOIHNlbnRpYXNhIGhpZHVwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2NvbmZpZyIgbXNnaWQ9IjY0MTU4OTkxNTA2NzE1Mzc5NzAiPiJTZW50dWggdW50dWsgbWVuZ2tvbmZpZ3VyYXNpa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXBsb2FkX2ZpbGUiIG1zZ2lkPSIyODk3OTU3MTcyMzY2NzMwNDE2Ij4iUGlsaWggZmFpbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vX2ZpbGVfY2hvc2VuIiBtc2dpZD0iNjM2MzY0ODU2MjE3MDc1OTQ2NSI+IlRpYWRhIGZhaWwgZGlwaWxpaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc2V0IiBtc2dpZD0iMjQ0ODE2ODA4MDk2NDIwOTkwOCI+IlRldGFwa2FuIHNlbXVsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN1Ym1pdCIgbXNnaWQ9IjE2MDIzMzU1NzIwODk5MTE5NDEiPiJTZXJhaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE2NDc2ODIxMjAwMzg2NDMxNiI+Ik1vZCBrZXJldGEgZGlkYXlha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2FyX21vZGVfZGlzYWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgwMzUyMzA1Mzc1NjM1MDMyNjIiPiJTZW50dWggdW50dWsga2VsdWFyIGRhcmkgbW9kIGtlcmV0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzMTQ2Njk0MjM0Mzk4MjAyNjAxIj4iUGVuYW1iYXRhbiBhdGF1IHRpdGlrIHBhbmFzIGFrdGlmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI2ODU3MDMxNzYwMTAzMDYyOTgyIj4iU2VudHVoIHVudHVrIG1lbnllZGlha2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhY2tfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjMwMDQ3MDAwNDUwMzM0MzQzOSI+IktlbWJhbGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJuZXh0X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEwODA1NTUxMDQ2Nzc5OTI0MDgiPiJTZXRlcnVzbnlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2tpcF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMjc1MzYyMjk5NDcxNjMxODE5Ij4iTGFuZ2thdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlX3dhcm5pbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDg5MDg5NDI2NzQ1NDg2NzI3NiI+IlBlbmdndW5hYW4gdGluZ2dpIGRhdGEgbXVkYWggYWxpaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlX3dhcm5pbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIzMzQwODIyMjI4NTk5MzM3NzQzIj4iU2VudHVoIHVudHVrIG1lbmdldGFodWkgbGViaWggbGFuanV0IG1lbmdlbmFpIHBlbmdndW5hYW4gZGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjI2OTU0MTg5NzcyOTc4MTMzMiI+Ik1lbGViaWhpIGhhZCBkYXRhIG11ZGFoIGFsaWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI1NDQzNDU3MzIxMzU0OTA3MTgxIj4iU2VudHVoIHVudHVrIG1lbmdldGFodWkgbGViaWggbGFuanV0IG1lbmdlbmFpIHBlbmdndW5hYW4gZGF0YSBtdWRhaCBhbGloLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vX21hdGNoZXMiIG1zZ2lkPSI4MTI5NDIxOTA4OTE1ODQwNzM3Ij4iVGlhZGEgcGFkYW5hbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmRfb25fcGFnZSIgbXNnaWQ9IjE5NDY3OTkyMzM4MjI4MjAzODQiPiJDYXJpIGRpIGhhbGFtYW4iPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9Im1hdGNoZXNfZm91bmQiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTY3MTQ3MDgxMTM2NTc5NDM5Ij4iMSBwYWRhbmFuIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NjQxODcyNzk3MDY3NjA5MTc3Ij4iPHhsaWZmOmcgaWQ9IklOREVYIj4lZDwveGxpZmY6Zz4gZGFyaXBhZGEgPHhsaWZmOmcgaWQ9IlRPVEFMIj4lZDwveGxpZmY6Zz4iPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbW9kZV9kb25lIiBtc2dpZD0iNzIxNzU4MTY0MDQ2MTkyMjI4OSI+IlNlbGVzYWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MjM4MTA0NDg1MDc2MTI3NDYiPiJNZW55YWhsZWthcCBzdG9yYW4gVVNC4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMjc4OTQ5OTg0MDk1MzcxOTAiPiJNZW55YWhsZWthcCBrYWQgU0TigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiJNZW1hZGFta2FuIHN0b3JhbiBVU0LigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjU5Njk4ODg3NTUwNzA0MzA0MiI+Ik1lbWFkYW1rYW4ga2FkIFNE4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiJUaWRhayBkYXBhdCBtZW1hZGFta2FuIHN0b3JhbiBVU0IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IlRpZGFrIGRhcGF0IG1lbWFkYW1rYW4ga2FkIFNELiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2JhZF9yZW1vdmFsIiBtc2dpZD0iNzk2MDg2NDA2MTAxNjYwMzI4MSI+IkthZCBTRCB0ZWxhaCBkaWtlbHVhcmthbiBzZWJlbHVtIGRpbnlhaGxla2FwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQxODE4ODcyMDAwOTU2OTY5MyI+IlN0b3JhbiBVU0Igc2VkYW5nIGRpc2VtYWsgYnVhdCBtYXNhIGluaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMzQ3NjI1MDM5MDQ4Mjc0ODEiPiJLYWQgU0Qgc2VkYW5nIGRpc2VtYWsgYnVhdCBtYXNhIGluaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yZW1vdmVkIiBtc2dpZD0iNzAwMTUyNjkwNTA1Nzk1MjA5NyI+IkthZCBTRCB0ZWxhaCBkaWtlbHVhcmthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9zaGFyZWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNTgzMDgxNDM0OTI1MDgzNDIyNSI+IlN0b3JhbiBVU0Igc2VkYW5nIGRpZ3VuYWthbiBvbGVoIGtvbXB1dGVyIGJ1YXQgbWFzYSBpbmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfc2hhcmVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTcwNjEzMDU2ODEzMzU0MDQzNSI+IkthZCBTRCBzZWRhbmcgZGlndW5ha2FuIG9sZWgga29tcHV0ZXIgYnVhdCBtYXNhIGluaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV91bmtub3duX3N0YXRlIiBtc2dpZD0iNzI5MTkyNzgyMTk3MjkwMzg1Ij4iTWVkaWEgbHVhcmFuIGRhbGFtIGtlYWRhYW4geWFuZyB0aWRhayBkaWtldGFodWkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhcmUiIG1zZ2lkPSIxNzc4Njg2NjE4MjMwMDExOTY0Ij4iS29uZ3NpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmluZCIgbXNnaWQ9IjQ4MDgyNzA5MDAzMjI5ODU5NjAiPiJEYXBhdGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndlYnNlYXJjaCIgbXNnaWQ9IjQzMzcxNTc5Nzc0MDAyMTE1ODkiPiJDYXJpYW4gV2ViIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmluZF9uZXh0IiBtc2dpZD0iNTc0MjEyNDYxODk0MjE5Mzk3OCI+IkNhcmkgc2V0ZXJ1c255YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZpbmRfcHJldmlvdXMiIG1zZ2lkPSIyMTk2NzIzNjY5Mzg4MzYwNTA2Ij4iQ2FyaSBzZWJlbHVtbnlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZUaWNrZXIiIG1zZ2lkPSI1NjIyNjgzOTEyNjE2NDk2MTcyIj4iUGVybWludGFhbiBsb2thc2kgZGFyaXBhZGEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGl0bGUiIG1zZ2lkPSI1NDQ2ODU4NzE3MTU3NDE2ODM5Ij4iUGVybWludGFhbiBsb2thc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZk1lc3NhZ2UiIG1zZ2lkPSIxMzc0NzE4MDIzMjI0MDAwNzAyIj4iRGltaW50YSBvbGVoIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiAoPHhsaWZmOmcgaWQ9IlNFUlZJQ0UiPiUyJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdwc1ZlcmlmWWVzIiBtc2dpZD0iMjM0NjU2NjA3Mjg2NzIxMzU2MyI+IllhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZObyIgbXNnaWQ9IjExNDY1NjQ5MzczNDY0NTQ4NjUiPiJUaWRhayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlcyIgbXNnaWQ9IjUyOTYzMjE4NTA2NjI3NDY4OTAiPiJNZWxlYmloaSBoYWQgcGFkYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXNfZGVzYyIgbXNnaWQ9IjQ5NjU1MTY3MTAwODY5NDI0NSI+IlRlcmRhcGF0IDx4bGlmZjpnIGlkPSJOVU1CRVJfT0ZfREVMRVRFRF9JVEVNUyI+JTEkZDwveGxpZmY6Zz4gaXRlbSB5YW5nIGRpcGFkYW1rYW4gdW50dWsgPHhsaWZmOmcgaWQ9IlRZUEVfT0ZfU1lOQyI+JTIkczwveGxpZmY6Zz4sIGFrYXVuIDx4bGlmZjpnIGlkPSJBQ0NPVU5UX05BTUUiPiUzJHM8L3hsaWZmOmc+LiBBcGFrYWggeWFuZyBtYWh1IGFuZGEgbGFrdWthbj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX3JlYWxseV9kZWxldGUiIG1zZ2lkPSIyNTcyNjAwMTAzMTIyNTk2MjQzIj4iUGFkYW1rYW4gaXRlbSBpdHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzeW5jX3VuZG9fZGVsZXRlcyIgbXNnaWQ9IjI5NDEzMTczNjA2MDAzMzg2MDIiPiJCdWF0IGFzYWwgcGVtYWRhbWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3luY19kb19ub3RoaW5nIiBtc2dpZD0iMzc0Mzc2NDc0MDQzMDgyMTg0NSI+IkphbmdhbiBsYWt1a2FuIGFwYS1hcGEgc2VrYXJhbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfYWNjb3VudF9sYWJlbCIgbXNnaWQ9IjU2NTUyMDMwODk3NDY0MjM5MjciPiJQaWxpaCBha2F1biI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2xhYmVsIiBtc2dpZD0iMjkzNTI2NzM0NDg0OTk5MzU1MyI+IlRhbWJhaCBha2F1biI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjM2MTE5ODI4OTQ4NTM0MzU4NzQiPiJUYW1iYWggYWthdW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9idXR0b24iIG1zZ2lkPSIyNDEyMDcyMjcyODMyMjg0MzEzIj4iVGluZ2thdGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfZGVjcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjQ3NjA1MDc3ODM4Njc3OTA2NyI+Ikt1cmFuZ2thbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9tb2RlIiBtc2dpZD0iMzA3MzEwMTA2NzQ0MTYzODQyOCI+Ijx4bGlmZjpnIGlkPSJWQUxVRSI+JXM8L3hsaWZmOmc+IHNlbnR1aCB0ZXJ1cy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfYWN0aW9uIiBtc2dpZD0iOTEwMTQ3MzA0NTg5MTgzNTQ5MCI+Ikx1bmN1cmthbiBrZSBhdGFzIHVudHVrIG1lbmluZ2thdGthbiBkYW4ga2UgYmF3YWggdW50dWsgbWVuZ3VyYW5na2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iODg2NTg4NTExNDAyODYxNDMyMSI+IlRpbmdrYXRrYW4gbWluaXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfbWludXRlX2J1dHRvbiIgbXNnaWQ9IjYyNDY4MzQ5MzcwODA2ODQ3OTEiPiJLdXJhbmdrYW4gbWluaXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIzNjUyMDU2MDU1ODEwMjIzMTM5Ij4iVGluZ2thdGthbiBqYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIxMzc3NDc5ODYzNDI5MjE0NzkyIj4iS3VyYW5na2FuIGphbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9zZXRfcG1fYnV0dG9uIiBtc2dpZD0iNDE0NzU5MDY5NjE1MTIzMDg2MyI+IlRldGFwa2FuIFBNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X3NldF9hbV9idXR0b24iIG1zZ2lkPSI4MzAyMTQwMzUzNTM5NDg2NzUyIj4iVGV0YXBrYW4gQU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iNTM2OTk5ODQ3OTA2NzkzNDExMCI+IlRpbmdrYXRrYW4gYnVsYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iMTgzMjY5ODk5NTU0MTcyNjAxOSI+Ikt1cmFuZ2thbiBidWxhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNzEzMDQ2NTQxMjMwODE3MzkwMyI+IlRpbmdrYXRrYW4gaGFyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNDEzMTg4MTUyMTgxODc1MDAzMSI+Ikt1cmFuZ2thbiBoYXJpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfaW5jcmVtZW50X3llYXJfYnV0dG9uIiBtc2dpZD0iNjMxODY5NzM4NDMxMDgwODg5OSI+IlRpbmdrYXRrYW4gdGFodW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfeWVhcl9idXR0b24iIG1zZ2lkPSI0NDgyMDIxODEzNDkxMTIxNzE3Ij4iS3VyYW5na2FuIHRhaHVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiJCYXRhbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiJQYWRhbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4iU2VsZXNhaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IlBlcnViYWhhbiBtb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+Ik1hc3VrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iUGlsaWggYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iS29uZ3NpIGRlbmdhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJLb25nc2kgZGVuZ2FuIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iUGVtZWdhbmcgZ2Vsb25nc29yLiBTZW50dWggJmFtcDsgdGFoYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ikx1bmN1cmthbiBrZSBhdGFzIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJMdW5jdXJrYW4ga2UgYmF3YWggdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ikx1bmN1cmthbiBrZSBraXJpIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iTHVuY3Vya2FuIGtlIGthbmFuIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkJ1a2Ega3VuY2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iS2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlNlbnlhcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJCdW55aSBkaWhpZHVwa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJDYXJpYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJMZXJldCB1bnR1ayBtZW1idWthIGt1bmNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJQYXNhbmdrYW4gc2V0IGtlcGFsYSB1bnR1ayBtZW5kZW5nYXIga2VrdW5jaSBrYXRhIGxhbHVhbiBkaXNlYnV0a2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlRpdGlrLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUyOTM2MDA0OTY2MDE0OTAyMTYiPiJOYXZpZ2FzaSBsYW1hbiB1dGFtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMjM3NDk2NTYyOTUyMTUyNTg5Ij4iTmF2aWdhc2kga2UgYXRhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tZW51X292ZXJmbG93X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjI5NTY1OTAzNzUwOTAwODQ1MyI+IkxhZ2kgcGlsaWhhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI3OTY1OTg0MzYwOTAzNjkzOTAzIj4iJTEkcywgJTIkcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9zdWJ0aXRsZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI2OTg1NTQ2NTMwNDcxNzgwNzI3Ij4iJTEkcywgJTIkcywgJTMkcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfaW50ZXJuYWwiIG1zZ2lkPSI0ODkxOTE2ODMzNjU3OTI5MjYzIj4iU3RvcmFuIGRhbGFtYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3NkX2NhcmQiIG1zZ2lkPSIzMjgyOTQ4ODYxMzc4Mjg2NzQ1Ij4iS2FkIFNEIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV91c2IiIG1zZ2lkPSIzMDE3OTU0MDU5NTM4NTE3Mjc4Ij4iU3RvcmFuIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV4dHJhY3RfZWRpdF9tZW51X2J1dHRvbiIgbXNnaWQ9Ijg5NDA0Nzg3MzA0OTY2MTAxMzciPiJFZGl0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93YXJuaW5nX3RpdGxlIiBtc2dpZD0iMTk1NTYzODg2MjEyMjIzMjM0MiI+IkFtYXJhbiBwZW5nZ3VuYWFuIGRhdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfYm9keSIgbXNnaWQ9IjI4MTQ2NzM1NTE0NzE5Njk5NTQiPiJTZW50dWggdW50dWsgbWVsaWhhdCBwZW5nZ3VuYWFuIGRhbiB0ZXRhcGFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfdGl0bGUiIG1zZ2lkPSI3MDkzMzM0NDE5NTE4NzA2Njg2Ij4iRGF0YSAyRy0zRyBkaWx1bXB1aGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfdGl0bGUiIG1zZ2lkPSI3NjM2NDg5NDM2ODE5NDcwNzYxIj4iRGF0YSA0RyBkaWx1bXB1aGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzg2OTQwMjUxOTM5MTYzMTg4NCI+IkRhdGEgbXVkYWggYWxpaCBkaWx1bXB1aGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF90aXRsZSIgbXNnaWQ9Ijg5OTIxNTQ3MzY0NDEyODQ4NjUiPiJEYXRhIFdpLUZpIGRpbHVtcHVoa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+IlNlbnR1aCB1bnR1ayBtZW5kYXlha2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjcwMjY3MzkxMjExMzgwMDUyMzEiPiJNZWxlYmloaSBoYWQgZGF0YSAyRy0zRyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfNGdfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjExMDY1NjI3NzkzMTEyMDkwMzkiPiJNZWxlYmloaSBoYWQgZGF0YSA0RyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIyNzkyNDA1NzIxNjU0MTIxNjgiPiJNZWxlYmloaSBoYWQgZGF0YSBtdWRhaCBhbGloIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI4NzQzODU2MDA2Mzg0ODI1OTc0Ij4iTWVsZWJpaGkgaGFkIGRhdGEgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2xpbWl0X3Nub296ZWRfYm9keSIgbXNnaWQ9IjcwMzU0OTAyNzgyOTg0NDE3NjciPiI8eGxpZmY6ZyBpZD0iU0laRSI+JXM8L3hsaWZmOmc+IG1lbGViaWhpIGhhZCB5YW5nIGRpdGVudHVrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX3RpdGxlIiBtc2dpZD0iNTk2NTE1NzM2MTAzNjMyMTkxNCI+IkRhdGEgbGF0YXIgYmVsYWthbmcgdGVyaGFkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX2JvZHkiIG1zZ2lkPSI2NzQxNTIxMzMwOTk3NDUyOTkwIj4iU2VudHVoIHVudHVrIG1lbWJ1YW5nIHNla2F0YW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlIiBtc2dpZD0iNjUxMDA0MDQ4NjA0OTIzNzYzOSI+IlNpamlsIGtlc2VsYW1hdGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlX2lzX3ZhbGlkIiBtc2dpZD0iNjgyNTI2MzI1MDc3NDU2OTM3MyI+IlNpamlsIGluaSBzYWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX3RvIiBtc2dpZD0iNDU0MjM5NDgwMjc0OTIxMDMyIj4iRGlrZWx1YXJrYW4ga2VwYWRhOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbW1vbl9uYW1lIiBtc2dpZD0iMjIzMzIwOTI5OTQzNDE3MjY0NiI+Ik5hbWEgYmlhc2E6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3JnX25hbWUiIG1zZ2lkPSI2OTczNTYxMTkwNzYyMDg1MjM2Ij4iT3JnYW5pc2FzaToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvcmdfdW5pdCIgbXNnaWQ9IjcyNjU5ODE4OTA0MjIwNzAzODMiPiJVbml0IG9yZ2FuaXNhc2k6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX2J5IiBtc2dpZD0iMjY0NzU4NDk4ODA1NzQ4MTU2NiI+IkRpa2VsdWFya2FuIG9sZWg6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idmFsaWRpdHlfcGVyaW9kIiBtc2dpZD0iODgxODg4NjEzNzU0NTk4MzExMCI+Iktlc2FoYW46Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX29uIiBtc2dpZD0iNTg5NTAxNzQwNDM2MTM5NzIzMiI+IkRpa2VsdWFya2FuIHBhZGE6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZXhwaXJlc19vbiIgbXNnaWQ9IjM2NzYyNDI5NDk5MTU5NTk4MjEiPiJUYW1hdCB0ZW1wb2ggcGFkYToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4iTm9tYm9yIHNpcmk6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmluZ2VycHJpbnRzIiBtc2dpZD0iNDUxNjAxOTYxOTg1MDc2MzA0OSI+IkNhcCBqYXJpOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYTI1Nl9maW5nZXJwcmludCIgbXNnaWQ9IjQzOTEyNzEyODY0NzcyNzkyNjMiPiJDYXAgamFyaSBTSEEtMjU2OiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNoYTFfZmluZ2VycHJpbnQiIG1zZ2lkPSI3OTMwMzMwMjM1MjY5NDA0NTgxIj4iQ2FwIGphcmkgU0hBLTE6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X3NlZV9hbGwiIG1zZ2lkPSI0MjkyNTY5MzgzOTc2NjM2MjAwIj4iTGloYXQgc2VtdWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI0NzEwMDEzODY0OTc0MDQwNjE1Ij4iUGlsaWggYWt0aXZpdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaGFyZV9hY3Rpb25fcHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjUyNDc2ODQ0MzU5NzkxNDkyMTYiPiJLb25nc2kgZGVuZ2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9kZXZpY2VfbG9ja2VkIiBtc2dpZD0iMzA5MjcwMzQ0ODY5MDY2OTc2OCI+IlBlcmFudGkgZGlrdW5jaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsaXN0X2RlbGltZXRlciIgbXNnaWQ9IjM5NzUxMTc1NzIxODU0OTQxNTIiPiIsICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlbmRpbmciIG1zZ2lkPSIzMjQ1NjUzNjgxMDA4MjE4MDMwIj4iTWVuZ2hhbnRhcuKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaEJyb3dzZXJEZWZhdWx0IiBtc2dpZD0iMjA1Nzk1MTk0NzI5NzYxNDcyNSI+IkxhbmNhcmthbiBQZW55ZW1hayBJbWJhcz8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJTZXR1cENhbGxEZWZhdWx0IiBtc2dpZD0iNTgzNDk0ODQ2OTI1Mzc1ODU3NSI+IlRlcmltYSBwYW5nZ2lsYW4/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfcmVzb2x2ZXJfdXNlX2Fsd2F5cyIgbXNnaWQ9IjgwMTc3NzA3NDc4MDE0OTQ5MzMiPiJTZW50aWFzYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9vbmNlIiBtc2dpZD0iMjQwNDY0NDc5NzE0OTE3Mzc1OCI+IkhhbnlhIHNla2FsaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYxNzA1Mzg5ODE2NzEyNzQ3MSI+IlRhYmxldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQyMzkyOTEyNzM0MjAxNDAxMjMiPiJUZWxlZm9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2hlYWRwaG9uZXMiIG1zZ2lkPSI4MTE5OTcxODQzODAzNDM5MTEwIj4iRm9uIGtlcGFsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9kb2NrX3NwZWFrZXJzIiBtc2dpZD0iNjI0MDYwMjk4MjI3NjU5MTg2NCI+IlBlbWJlc2FyIHN1YXJhIGRvayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbWVkaWFfcm91dGVfbmFtZV9oZG1pIiBtc2dpZD0iMjQ1MDk3MDM5OTAyMzQ3ODA1NSI+IkhETUkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJBdWRpbyBCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlBhcGFyYW4gd2F5YXJsZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iU2VsZXNhaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik91dHB1dCBtZWRpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJNZW5naW1iYXPigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJNZW55YW1idW5nLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJUZXJzZWRpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNjczOTg5OTk2MjY4MTg4NjQwMSI+IlRpZGFrIHRlcnNlZGlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiJTZWRhbmcgZGlndW5ha2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2J1aWx0X2luX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjI1ODMxMzQyOTQyOTI1NjM5NDEiPiJTa3JpbiBUZXJiaW5hIERhbGFtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2hkbWlfZGlzcGxheV9uYW1lIiBtc2dpZD0iMTU1NTI2NDU1OTIyNzQ3MDEwOSI+IlNrcmluIEhETUkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iVGluZGloICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCAoNjAyMjExOTcwMjYyODU3MjA4MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iUGFwYXJhbiB3YXlhcmxlcyBkaXNhbWJ1bmdrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iU2tyaW4gaW5pIGRpdHVuanVra2FuIHBhZGEgcGVyYW50aSBsYWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IlB1dHVzIHNhbWJ1bmdhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iUGFuZ2dpbGFuIGtlY2VtYXNhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+Ikx1cGEgQ29yYWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IkNvcmFrIFNhbGFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4iS2F0YSBMYWx1YW4gU2FsYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUElOIHNhbGFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiJDdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+Ikx1a2lza2FuIGNvcmFrIGFuZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJNYXN1a2thbiBQSU4gU0lNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJNYXN1a2thbiBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4iTWFzdWtrYW4gS2F0YSBMYWx1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJLaW5pIFNJTSBkaWx1bXB1aGthbi4gTWFzdWtrYW4ga29kIFBVSyB1bnR1ayBtZW5lcnVza2FuLiBIdWJ1bmdpIHBlbWJhd2EgdW50dWsgYnV0aXJhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iTWFzdWtrYW4ga29kIFBJTiB5YW5nIGRpaW5naW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IlNhaGthbiBrb2QgUElOIHlhbmcgZGlpbmdpbmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Ik1lbWJ1a2Ega3VuY2kga2FkIFNJTS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IktvZCBQSU4gc2FsYWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iVGFpcGthbiBQSU4geWFuZyBtZW5nYW5kdW5naSA0IGhpbmdnYSA4IG5vbWJvci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJLb2QgUFVLIG1lc3RpbGFoIDggbm9tYm9yIGF0YXUgbGViaWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iTWFzdWtrYW4gc2VtdWxhIGtvZCBQSU4geWFuZyBiZXR1bC4gUGVyY3ViYWFuIGJlcnVsYW5nIGFrYW4gbWVsdW1wdWhrYW4gU0lNIHNlY2FyYSBrZWthbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iS29kIFBJTiB0aWRhayBzZXBhZGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iVGVybGFsdSBiYW55YWsgcGVyY3ViYWFuIG1lbHVraXMgY29yYWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iVW50dWsgbWVtYnVrYSBrdW5jaSwgbG9nIG1hc3VrIGRlbmdhbiBha2F1biBHb29nbGUgYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+Ik5hbWEgUGVuZ2d1bmEgKEUtbWVsKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4iS2F0YSBsYWx1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IkxvZyBtYXN1ayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4iTmFtYSBwZW5nZ3VuYSBhdGF1IGthdGEgbGFsdWFuIHRpZGFrIHNhaC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4iTHVwYSBuYW1hIHBlbmdndW5hIGF0YXUga2F0YSBsYWx1YW4gYW5kYT9cbkxhd2F0aSI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+Ii4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiJNZW55ZW1hayBha2F1buKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iQW5kYSB0ZWxhaCBtZW5haXAgUElOIGFuZGEgc2VjYXJhIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFxuXG5DdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iQW5kYSB0ZWxhaCBtZW5haXAga2F0YSBsYWx1YW4gYW5kYSBzZWNhcmEgc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gXG5cbkN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJBbmRhIHRlbGFoIHRlcnNpbGFwIG1lbHVraXMgY29yYWsgYnVrYSBrdW5jaSBhbmRhIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFxuXG5DdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiJBbmRhIHRlbGFoIG1lbmN1YmEgdW50dWsgbWVtYnVrYSBrdW5jaSB0YWJsZXQgZGVuZ2FuIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCB0YWJsZXQgYWthbiBkaXRldGFwa2FuIHNlbXVsYSBrZXBhZGEgdGV0YXBhbiBsYWxhaSBraWxhbmcgZGFuIHNlbXVhIGRhdGEgcGVuZ2d1bmEgYWthbiBoaWxhbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IkFuZGEgdGVsYWggbWVuY3ViYSB1bnR1ayBtZW1idWthIGt1bmNpIHRlbGVmb24gZGVuZ2FuIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCB0ZWxlZm9uIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2VwYWRhIHRldGFwYW4gbGFsYWkga2lsYW5nIGRhbiBzZW11YSBkYXRhIHBlbmdndW5hIGFrYW4gaGlsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4iQW5kYSB0ZWxhaCBtZW5jdWJhIHVudHVrIG1lbWJ1a2Ega3VuY2kgdGFibGV0IHNlY2FyYSBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2FsaS4gVGFibGV0IGtpbmkgYWthbiBkaXRldGFwa2FuIHNlbXVsYSBrZSB0ZXRhcGFuIGxhbGFpIGtpbGFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiJBbmRhIHRlbGFoIG1lbmN1YmEgdW50dWsgbWVtYnVrYSBrdW5jaSB0ZWxlZm9uIHNlY2FyYSBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2FsaS4gVGVsZWZvbiBraW5pIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2UgdGV0YXBhbiBsYWxhaSBraWxhbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkFuZGEgdGVsYWggdGVyc2lsYXAgbWVsdWtpcyBjb3JhayBidWthIGt1bmNpIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCBhbmRhIGFrYW4gZGltaW50YSBtZW1idWthIGt1bmNpIHRhYmxldCBhbmRhIG1lbmdndW5ha2FuIGxvZyBtYXN1ayBHb29nbGUgYW5kYS5cblxuIEN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iQW5kYSB0ZWxhaCB0ZXJzaWxhcCBsdWtpcyBjb3JhayBidWthIGt1bmNpIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyB0aWRhayBiZXJqYXlhLCBhbmRhIGFrYW4gZGltaW50YSBtZW1idWthIGt1bmNpIHRlbGVmb24gYW5kYSBtZW5nZ3VuYWthbiBsb2cgbWFzdWsgR29vZ2xlIGFuZGEuXG5cbiBDdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJBbGloIGtlbHVhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNhZmVfbWVkaWFfdm9sdW1lX3dhcm5pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzI0MTYxOTM5NDc1NDc4MDY2Ij4iVGluZ2thdGthbiBrZWxhbnRhbmdhbiBtZWxlYmloaSBhcmFzIHlhbmcgZGljYWRhbmdrYW4/XG5NZW5kZW5nYXIgcGFkYSBrZWxhbnRhbmdhbiB0aW5nZ2kgdW50dWsgdGVtcG9oIHlhbmcgcGFuamFuZyBib2xlaCBtZXJvc2Fra2FuIHBlbmRlbmdhcmFuIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29udGludWVfdG9fZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNjI2NDI3MzcyMzE2MDcwMjU4Ij4iVGVydXNrYW4gbWVuYWhhbiBkZW5nYW4gZHVhIGphcmkgdW50dWsgbWVuZGF5YWthbiBrZWJvbGVoY2FwYWlhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2VuYWJsZWQiIG1zZ2lkPSIxMzgxOTcyMDQ4NTY0NTQ3Njg1Ij4iS2Vib2xlaGNhcGFpYW4gZGlkYXlha2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9hY2Nlc3NpYmlsaXR5X2NhbmNlbGVkIiBtc2dpZD0iMzgzMzkyMzI1Nzk2NjYzNTY3MyI+IktlYm9sZWhjYXBhaWFuIGRpYmF0YWxrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiJQZW5nZ3VuYSBzZW1hc2EgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im93bmVyX25hbWUiIG1zZ2lkPSIyNzE2NzU1NDYwMzc2MDI4MTU0Ij4iUGVtaWxpayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImVycm9yX21lc3NhZ2VfdGl0bGUiIG1zZ2lkPSI0NTEwMzczMDgzMDgyNTAwMTk1Ij4iUmFsYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbm9fcmVzdHJpY3RlZF9hY2NvdW50cyIgbXNnaWQ9IjU3Mzk0NjMyNDk2NzM3Mjc3MzYiPiJBcGwgaW5pIHRpZGFrIG1lbnlva29uZyBha2F1biB1bnR1ayBwcm9maWwgeWFuZyBkaXNla2F0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX25vdF9mb3VuZCIgbXNnaWQ9IjM0MjkxNDE4NTM0OTg5MjczNzkiPiJUaWRhayBtZW5lbXVpIGFwbGlrYXNpIHVudHVrIG1lbmdlbmRhbGlrYW4gdGluZGFrYW4gaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmV2b2tlIiBtc2dpZD0iNTQwNDQ3OTE4NTIyODI3MTU4NiI+IkJhdGFsa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMCIgbXNnaWQ9Ijc4NzU0Mjc0ODk0MjA4MjE3OTMiPiJJU08gQTAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2ExIiBtc2dpZD0iMzc2MDczNDQ5OTA1MDg3NTM1NiI+IklTTyBBMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTIiIG1zZ2lkPSI1OTczMjY2Mzc4MDIwMTQ0MzgyIj4iSVNPIEEyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMyIgbXNnaWQ9IjEzNzM0MDcxMDU2ODczMDA4ODQiPiJJU08gQTMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E0IiBtc2dpZD0iNjY4OTc3MjgwNzk4MjU5NzI1NCI+IklTTyBBNCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTUiIG1zZ2lkPSI1MzUzNTQ5NjUyMDE1NzQxMDQwIj4iSVNPIEE1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNiIgbXNnaWQ9Ijg1ODUwMzgwNDg2NzQ5MTE5MDciPiJJU08gQTYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E3IiBtc2dpZD0iNjY0MTgzNjcxNjk2MzgzOTExOSI+IklTTyBBNyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTgiIG1zZ2lkPSI3NTcxMTM5NDM3NDY1NjkzMzU1Ij4iSVNPIEE4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hOSIgbXNnaWQ9IjEzNzg0NTU4OTE5NTcxMTUwNzkiPiJJU08gQTkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2ExMCIgbXNnaWQ9IjI0ODA3NDc0NTc0Mjk0NzUzNDQiPiJJU08gQTEwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMCIgbXNnaWQ9IjM5NjU5MzUwOTc2NjExMDgwMzkiPiJJU08gQjAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IxIiBtc2dpZD0iMjUwNTc1MzI4NTAxMDExNTQzNyI+IklTTyBCMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjIiIG1zZ2lkPSI4NzYzODc0NzA5ODU5NDU4NDUzIj4iSVNPIEIyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMyIgbXNnaWQ9IjQyMTA1MDY2ODgxOTE3NjQwNzYiPiJJU08gQjMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I0IiBtc2dpZD0iNTc0OTQwNDE2NTg4ODUyNjAzNCI+IklTTyBCNCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjUiIG1zZ2lkPSI3NjQwNjI3NDE0NjIxOTA0NzMzIj4iSVNPIEI1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNiIgbXNnaWQ9IjczNDI5ODg4NjQ3MTI3NDg1NDQiPiJJU08gQjYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I3IiBtc2dpZD0iNTA2OTg0NDA2NTIzNTM4MjQyOSI+IklTTyBCNyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjgiIG1zZ2lkPSI3MzE2ODE4OTIyMjc4Nzc5Nzc0Ij4iSVNPIEI4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iOSIgbXNnaWQ9IjU0MTQ3MjcwOTQwMjY1MzIzNDEiPiJJU08gQjkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IxMCIgbXNnaWQ9IjUyNTEyNTM3MzE4MzIwNDgxODUiPiJJU08gQjEwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMCIgbXNnaWQ9IjQwMDMxMzgzNDI2NzE5NjQyMTciPiJJU08gQzAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MxIiBtc2dpZD0iMTkzNTE4ODA2MzM5MzU1MzAwOCI+IklTTyBDMSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzIiIG1zZ2lkPSIzMTk3MzA3OTY5NzEyMDY5OTA0Ij4iSVNPIEMyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMyIgbXNnaWQ9IjQzMzU4MjYwODczMjE5MTM1MDgiPiJJU08gQzMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M0IiBtc2dpZD0iMzc0NTYzOTU5ODI4MTAxNTAwNSI+IklTTyBDNCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzUiIG1zZ2lkPSI4MjY5NDU3NzY1ODIyNzkxMDEzIj4iSVNPIEM1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNiIgbXNnaWQ9IjU2NjY2NjEwNTI2MDM0NjkzMCI+IklTTyBDNiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzciIG1zZ2lkPSI4Njc4NDEzMTgwNzgyNjA4NDk4Ij4iSVNPIEM3Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jOCIgbXNnaWQ9IjgzOTIzNzYyMDY2MjcwNDE3MzAiPiJJU08gQzgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M5IiBtc2dpZD0iOTE5MTYxMzM3MjMyNDg0NTQwNSI+IklTTyBDOSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzEwIiBtc2dpZD0iNzMyNzcwOTY5OTE4NDkyMDgyMiI+IklTTyBDMTAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGV0dGVyIiBtc2dpZD0iNDE5MTgwNTYxNTgyOTQ3Mjk1MyI+IlN1cmF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2d2cm5tdF9sZXR0ZXIiIG1zZ2lkPSI3ODUzMzgyMTkyNjQ5NDA1NTA3Ij4iU3VyYXQgS2VyYWphYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGVnYWwiIG1zZ2lkPSI2Njk3OTgyOTg4MjgzODIzMTUwIj4iVW5kYW5nLXVuZGFuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9qdW5pb3JfbGVnYWwiIG1zZ2lkPSIzNzI3NzQzOTY5OTAyNzU4OTQ4Ij4iVW5kYW5nLXVuZGFuZyBKdW5pb3IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGVkZ2VyIiBtc2dpZD0iMjgxODcxNDY0ODk2NjAxMjM2Ij4iTGVqYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfdGFibG9pZCIgbXNnaWQ9IjU3NzU5NjY0MTYzMzM1NzgxMjciPiJUYWJsb2lkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id3JpdGVfZmFpbF9yZWFzb25fY2FuY2VsbGVkIiBtc2dpZD0iNzA5MTI1ODM3ODEyMTYyNzYyNCI+IkRpYmF0YWxrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3cml0ZV9mYWlsX3JlYXNvbl9jYW5ub3Rfd3JpdGUiIG1zZ2lkPSI4MTMyNTA1NDE3OTM1MzM3NzI0Ij4iUmFsYXQgbWVudWxpcyBrYW5kdW5nYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfcGluIiBtc2dpZD0iMzM5NTk1MzQyMTM2ODQ3NjEwMyI+Ik1hc3Vra2FuIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9vbGRfcGluIiBtc2dpZD0iMTQ2MjIwNjIyNTUxMjkxMDc1NyI+IlBJTiBzZW1hc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfbmV3X3BpbiIgbXNnaWQ9IjU5NTk2MDY2OTE2MTk5NTkxODQiPiJQSU4gYmFoYXJ1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NvbmZpcm1fcGluIiBtc2dpZD0iODUwMTUyMzgyOTYzMzE0NjIzOSI+IlNhaGthbiBQSU4gYmFoYXJ1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NyZWF0ZV9waW4iIG1zZ2lkPSI4MDE3NjAwMDAwMjYzNDUwMzM3Ij4iQnVhdCBQSU4gdW50dWsgbWVuZ3ViYWggc3VhaSBzZWthdGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCIgbXNnaWQ9IjIyMjQyMTQxOTA5MDY5OTQ1NDgiPiJQSU4gdGlkYWsgc2VwYWRhbi4gQ3ViYSBsYWdpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lcnJvcl90b29fc2hvcnQiIG1zZ2lkPSI4MTczOTgyNzU2MjY1Nzc3NzkyIj4iUElOIHRlcmxhbHUgcGVuZGVrLiBNZXN0aSBzZWt1cmFuZy1rdXJhbmdueWEgNCBhbmdrYS4iPC9zdHJpbmc+Ci0gIDxwbHVyYWxzIG5hbWU9InJlc3RyX3Bpbl9jb3VudGRvd24iPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0ODM1NjM5OTY5NTAzNzI5ODc0Ij4iUElOIHNhbGFoLiBDdWJhIGxhZ2kgZGFsYW0gbWFzYSAxIHNhYXQuIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4MDMwNjA3MzQzMjIzMjg3NjU0Ij4iUElOIHNhbGFoLiBDdWJhIGxhZ2kgZGFsYW0gbWFzYSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYWF0LiI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKaW5kZXggM2JlODgxNy4uNzMxMGMzOCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJTa3JpdiBpbm4gZW4gUFVLLWtvZGUgcMOlIMOldHRlIHRhbGwgZWxsZXIgbWVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU0ta29ydGV0IGRpdHQgZXIgUFVLLWzDpXN0LiBTa3JpdiBpbm4gUFVLLWtvZGVuIGZvciDDpSBsw6VzZSBkZXQgb3BwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNrcml2IGlubiBQVUsyIGZvciDDpSBsw6VzZSBvcHAgU0lNLWtvcnRldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJNaXNseWt0ZXMg4oCTIGFrdGl2ZXIgbMOlcyBmb3IgU0lNL1JVSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iRHUgaGFyIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBmb3Jzw7hrIGlnamVuIGbDuHIgU0lNLWtvcnRldCBsw6VzZXMuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iRHUgaGFyIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBmb3Jzw7hrIGlnamVuIGbDuHIgU0lNLWtvcnRldCBsw6VzZXMuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJbm5nw6VlbmRlIG51bW1lcnZpc25pbmciPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IkxhciBpbm5laGF2ZXJlbiBiaW5kZSBzZWcgdGlsIGRldCDDuHZlcnN0ZSBuaXbDpWV0IGF2IGdyZW5zZXNuaXR0ZXQgZm9yIGVuIFZQTi10amVuZXN0ZS4gU2thbCBhbGRyaSB2w6ZyZSBuw7hkdmVuZGlnIGZvciB2YW5saWdlIGFwcGVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJiaW5kZSB0aWwgYmFrZ3J1bm5zYmlsZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IkxhciBpbm5laGF2ZXJlbiBiaW5kZSBkZXQgw7h2ZXJzdGUgbml2w6VldCBhdiBncmVuc2Vzbml0dGV0IHRpbCBlbiBiYWtncnVubi4gU2thbCBhbGRyaSB2w6ZyZSBuw7hkdmVuZGlnIGZvciB2YW5saWdlIGFwcGVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4iYmluZGUgdGlsIGVrc3Rlcm4gc2tqZXJtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iTGFyIGlubmVoYXZlcmVuIGJpbmRlIHNlZyB0aWwgZGV0IMO4dmVyc3RlIGdyZW5zZXNuaXR0bml2w6VldCBmb3IgZWtzdGVybiBza2plcm0uIFNrYWwgYWxkcmkgdsOmcmUgbsO4ZHZlbmRpZyBmb3IgdmFubGlnZSBhcHBlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJiaW5kZSB0aWwgbW9kdWx0amVuc3RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkxhciBpbm5laGF2ZXJlbiBiaW5kZSBzZWcgdGlsIGRldCDDuHZlcnN0ZSBuaXbDpWV0IGF2IGdyZW5zZXNuaXR0ZXQgZm9yIGVuIG1vZHVsdGplbmVzdGUuIFNrYWwgYWxkcmkgdsOmcmUgbsO4ZHZlbmRpZyBmb3IgdmFubGlnZSBhcHBlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJrb21tdW5pc2VyZSBtZWQgZW5oZXRzYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iTGFyIGFwcGVuIGJydWtlIGdydW5ubGVnZ2VuZGUgU3VyZmFjZUZsaW5nZXItZnVua3Nqb25lci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJsZXNlIHNramVybWJ1ZmZlcmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IkxhciBhcHBlbiBsZXNlIGlubmhvbGRldCBpIHJhbW1lYnVmZmVyZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4idGlsZ2FuZyB0aWwgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkxhciBhcHBlbiBicnVrZSBncnVubmxlZ2dlbmRlIElucHV0Rmxpbmdlci1mdW5rc2pvbmVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ia29uZmlndXJlcmUgV2ktRmktc2tqZXJtZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJUaWxsYXRlciBhcHBlbiDDpSBrb25maWd1cmVyZSBvZyBrb2JsZSB0aWwgV2ktRmktc2tqZXJtZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJrb250cm9sbGVyZSBXaS1GaS1za2plcm1lciI8L3N0cmluZz4KQEAgLTg2NSw3ICs4NzQsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9IjI2MjY5OTk0NDk2MTA2OTU5MzAiPiJHbGVtdCBtw7huc3RlcmV0PyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+Ik9wcGzDpXNpbmcgYXYga29udG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiJGb3IgbWFuZ2UgZm9yc8O4ayBww6UgdGVnbmluZyBhdiBtw7huc3RlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiJMb2dnIGRlZyBww6UgbWVkIEdvb2dsZS1rb250b2VuIGRpbiBmb3Igw6UgbMOlc2Ugb3BwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiJMb2dnIHDDpSBtZWQgR29vZ2xlLWtvbnRvZW4gZGluIGZvciDDpSBsw6VzZSBvcHAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9Ijg4NDY4ODE0MjQxMDY0ODQ0NDciPiJCcnVrZXJuYXZuIChlLXBvc3QpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjU5NTgwMjgzODM5NTQ3Mzg1MjgiPiJQYXNzb3JkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjcxMzA4OTM2OTQ3OTU3ODYzMDAiPiJMb2dnIHDDpSI8L3N0cmluZz4KQEAgLTExODIsNyArMTE5MSw3IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzkxNTg5NTMyMzY0NDI5Mjc2OCI+IsOFcG5lIHRyw6VkbMO4c25ldHQgaSBuw6ZyaGV0ZW4iPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iNDAyOTQ4OTcxNjYwNTI1NTM4NiI+IlDDpWxvZ2dpbmcgdGlsIFdpLUZpLW5ldHR2ZXJrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmV0d29ya19hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9Ijg0OTUxNTU1OTMzNTgwNTQ2NzYiPiJMb2dnIGRlZyBww6UgbmV0dHZlcmtldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4iTG9nZyBww6UgbmV0dHZlcmtldCI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luX2RldGFpbGVkICg4MDAwMDgxOTQxNDQ3OTc2MTE4KSAtLT4KICAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkIiBtc2dpZD0iNzkwNDIxNDIzMTY1MTU0NjM0NyI+IkthbiBpa2tlIGtvYmxlIHRpbCBXaS1GaSI8L3N0cmluZz4KQEAgLTEyMTgsNyArMTIyNyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX25ldmVyX2FsbG93IiBtc2dpZD0iNDQ2OTkyNzY1Nzc0MjY5NjczIj4iQWxkcmkgdGlsbGF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfdGl0bGUiIG1zZ2lkPSI2MjI3NzEyMzE5MjIzMjI2MTg1Ij4iU0lNLWtvcnQgZXIgZmplcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4iRGV0IG1vYmlsZSBuZXR0dmVya2V0IGZvcmJsaXIgdXRpbGdqZW5nZWxpZyBpbm50aWwgZHUgc3RhcnRlciBww6Ugbnl0dCBtZWQgZXQgZ3lsZGlnIFNJTS1rb3J0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9kb25lX2J1dHRvbiIgbXNnaWQ9IjgyNzk0OTk4OTM2OTk2Mzc3NSI+IkZ1bGxmw7hydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9kb25lX2J1dHRvbiIgbXNnaWQ9IjgyNzk0OTk4OTM2OTk2Mzc3NSI+IkZlcmRpZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF90aXRsZSIgbXNnaWQ9IjM3MTk2NzA1MTI4ODk2NzQ2OTMiPiJTSU0ta29ydCBlciBsYWd0IHRpbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNpbV9hZGRlZF9tZXNzYWdlIiBtc2dpZD0iNjU5OTk0NTMwMTE0MTA1MDIxNiI+IlN0YXJ0IGVuaGV0ZW4gcMOlIG55dHQgZm9yIMOlIGbDpSB0aWxnYW5nIHRpbCBkZXQgbW9iaWxlIG5ldHR2ZXJrZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2ltX3Jlc3RhcnRfYnV0dG9uIiBtc2dpZD0iNDcyMjQwNzg0MjgxNTIzMjM0NyI+IlN0YXJ0IHDDpSBueXR0Ijwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlZlbGcgZW4gYXBwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iS3VubmUgaWtrZSBzdGFydGUgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkRlbCBtZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iRGVsIG1lZCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IkdsaWRlYnJ5dGVyLiBUcnlrayBvZyBob2xkIGlubmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkRyYSBvcHAgZm9yIMOlIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJEcmEgbmVkIGZvciDDpSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRHJhIHRpbCB2ZW5zdHJlIGZvciDDpSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkRyYSB0aWwgaMO4eXJlIGZvciDDpSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJMw6VzIG9wcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU3RpbGxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+Ikx5ZCBww6UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlPDuGsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJTdmVpcCBmb3Igw6UgbMOlc2Ugb3BwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJLb2JsZSB0aWwgaG9kZXRlbGVmb25lciBmb3Igw6UgaMO4cmUgb3BwbGVzaW5nIGF2IGJva3N0YXZlbmUgaSBwYXNzb3JkZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUHVua3R1bS4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTeXN0ZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkJsdWV0b290aC1seWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlRyw6VkbMO4cyBza2plcm0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iRnVsbGbDuHJ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iTWVkaWV1dGdhbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IktvYmxlIHRpbCBlbmhldGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iU2VuZCBza2plcm1lbiB0aWwgZW5oZXRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IlPDuGtlciBldHRlciBlbmhldGVyIOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IklubnN0aWxsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iS29ibGUgZnJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNrYW5uZXIgLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iS29ibGVyIHRpbCAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IlRpbGdqZW5nZWxpZyI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+Ik92ZXJsZWdnICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiB4IDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBzaWtrZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IlRyw6VkbMO4cyBza2plcm1kZWxpbmcgZXIgdGlsa29ibGV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkRlbm5lIHNramVybWVuIHZpc2VzIHDDpSBlbiBhbm5lbiBlbmhldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJTZW5kZXIgc2tqZXJtZW4g4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iS29ibGVyIHRpbCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJTZW5kZXIgc2tqZXJtZW4g4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJLb2JsZXQgdGlsIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJLb2JsZSBmcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+Ik7DuGRudW1tZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJIYXIgZHUgZ2xlbXQgbcO4bnN0ZXJldD8iPC9zdHJpbmc+CkBAIC0xNTE4LDcgKzE1MjUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iU2tyaXYgaW5uIGRlbiBrb3JyZWt0ZSBQVUsta29kZW4gcMOlIG55dHQuIEdqZW50YXR0ZSBmb3Jzw7hrIGtvbW1lciB0aWwgw6UgZGVha3RpdmVyZSBTSU0ta29ydGV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ta29kZW5lIHN0ZW1tZXIgaWtrZSBvdmVyZW5zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iRm9yIG1hbmdlIGZvcnPDuGsgcMOlIHRlZ25pbmcgYXYgbcO4bnN0ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iTG9nZyBkZWcgcMOlIG1lZCBHb29nbGUta29udG9lbiBkaW4gZm9yIMOlIGzDpXNlIG9wcC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iTG9nZyBww6UgbWVkIEdvb2dsZS1rb250b2VuIGRpbiBmb3Igw6UgbMOlc2Ugb3BwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4iQnJ1a2VybmF2biAoZS1wb3N0YWRyZXNzZSkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IlBhc3NvcmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IkxvZ2cgcMOlIjwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjU3LDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJQcsO4diBww6Ugbnl0dCBzZW5lcmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iU3ZlaXAgbmVkIGZyYSB0b3BwZW4gYXYgc2tqZXJtZW4gZm9yIMOlIGfDpSB1dCBhdiBmdWxsc2tqZXJtdmlzbmluZ2VuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iRmVyZGlnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iU2lya3Vsw6ZyIGdsaWRlYnJ5dGVyIGZvciB0aW1lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iU2lya3Vsw6ZyIGdsaWRlYnJ5dGVyIGZvciBtaW51dHRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJBbmdpIHRpbWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iQW5naSBtaW51dHRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iTcOlbmVkc3J1dGVuZXR0IG1lZCBkYWdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IsOFcnNsaXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iVmVsZyBtw6VuZWRlbiBvZyBkYWdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlZlbGcgw6VyZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IGVyIHZhbGd0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gZXIgc2xldHRldCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjI2ODk3YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTU5MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJieXRlU2hvcnQiIG1zZ2lkPSI4MzQwOTczODkyNzQyMDE5MTAxIj4iQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtpbG9ieXRlU2hvcnQiIG1zZ2lkPSI1OTczNzg5NzgzNTA0NzcxODc4Ij4iS0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWdhYnl0ZVNob3J0IiBtc2dpZD0iNjM1NTg1MTU3Njc3MDQyODkyMiI+Ik1CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2lnYWJ5dGVTaG9ydCIgbXNnaWQ9IjMyNTk4ODI0NTUyMTIxOTMyMTQiPiJHQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRlcmFieXRlU2hvcnQiIG1zZ2lkPSIyMzE2MTMwMTgxNTkxODY5NjIiPiJUQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBldGFieXRlU2hvcnQiIG1zZ2lkPSI1NjM3ODE2NjgwMTQ0OTkwMjE5Ij4iUEIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaWxlU2l6ZVN1ZmZpeCIgbXNnaWQ9IjkxNjQyOTI3OTE1MDA1MzE5NDkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRzPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZsdDvgpKzgpL/gpKjgpL4g4KS24KWA4KSw4KWN4KS34KSVJmd0OyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzIiBtc2dpZD0iNzg5OTgyOTUxNjA0ODgxMzIzNyI+IuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsbGlwc2lzX3R3b19kb3RzIiBtc2dpZD0iMTIyODA3ODk5NDg2NjAzMDczNiI+IuKApSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5UGhvbmVOdW1iZXIiIG1zZ2lkPSI3Njk0MDYzMDQyMDc5Njc2NTE3Ij4iKOCkleClgeCkqOCliCDgpKvgpYvgpKgg4KSo4KSu4KWN4KSs4KSwIOCkm+CliOCkqCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmtub3duTmFtZSIgbXNnaWQ9IjIyNzc1NTY1NDY3NDI3NDY1MjIiPiIo4KSF4KSc4KWN4KSe4KS+4KSkKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIgbXNnaWQ9IjI2NjAwMjA5OTAwOTc3MzMwNzciPiLgpK3gpY3gpLXgpL7gpIfgpLgg4KSu4KWH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdE1zaXNkbkFscGhhVGFnIiBtc2dpZD0iMjg1MDg4OTc1NDkxOTU4NDY3NCI+Ik1TSVNETuClpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+IuCknOCkoeCkvuCkqCDgpLjgpK7gpLjgpY3gpK/gpL4g4KS14KS+IOCkheCkruCkvuCkqOCljeCkryBNTUkg4KSV4KWL4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pRmRuRXJyb3IiIG1zZ2lkPSI1MjI0Mzk4MjE2Mzg1MzE2NDcxIj4i4KSF4KSq4KSw4KWH4KS24KSoIOCkqOCkv+CktuCljeCkmuCkv+CkpCDgpKHgpL7gpK/gpLIg4KSo4KSu4KWN4KSs4KSw4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpK7gpL7gpKTgpY3gpLAg4KSq4KWN4KSw4KSk4KS/4KSs4KSo4KWN4KSn4KS/4KSkIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkIiBtc2dpZD0iODE0NzI3ODM0NjQxNDcxNDMxNSI+IuCkuOClh+CkteCkviDgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWRGb3IiIG1zZ2lkPSI2ODU2MjI4MTQwNDUzNDcxMDQxIj4i4KSo4KS/4KSu4KWN4KSoIOCkieCksuCljeCksuClh+CkluCkv+CkpOCkleCliyDgpLLgpL7gpJfgpL8g4KS44KWH4KS14KS+IOCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpL/gpK/gpYs6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZURpc2FibGVkIiBtc2dpZD0iMTkzNzU1MzIyNjU5MjUxNjQxMSI+IuCkuOClh+CkteCkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VSZWdpc3RlcmVkIiBtc2dpZD0iNjI3NTAxOTA4MjU5ODEwMjQ5MyI+IuCkpuCksOCljeCkpOCkviDgpLjgpKvgpLIg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVyYXNlZCIgbXNnaWQ9IjEyODg1ODQ2OTUyOTcyMDA5NzIiPiLgpK7gpYfgpJ/gpL7gpIcg4KS44KSr4KSyIOCkpeCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkSW5jb3JyZWN0IiBtc2dpZD0iNzYxMjIwODgzOTQ1MDEyODcxNSI+IuCkl+CksuCkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlDb21wbGV0ZSIgbXNnaWQ9IjgyMzI1Mjc0OTU0MTE2OTgzNTkiPiJNTUkg4KSq4KWB4KSw4KS+IOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhZFBpbiIgbXNnaWQ9IjkwMTUyNzc2NDU1NDY3MTAwMTQiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkreCkj+CkleCliyDgpKrgpYHgpLDgpL7gpKjgpYsgUElOIOCkuOCkueClgCDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQdWsiIG1zZ2lkPSI1NDg3MjU3NjQ3MDgxMTMyMjAxIj4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpYsgUFVLIOCkuOCkueClgCDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KWLIFBJTiDgpK7gpYfgpLIg4KSW4KS+4KSB4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFBpbiIgbXNnaWQ9IjM4NTAwMTg0NDUxODc0NzUzNzciPiLgpaog4KSm4KWH4KSW4KS/IOClriDgpLXgpJ/gpL4g4KSo4KSu4KWN4KSs4KSwIOCkreCkj+CkleCliyDgpI/gpIngpJ/gpL4gUElOIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IuClriDgpLXgpJ/gpL4g4KSo4KSu4KWN4KSs4KSw4KS54KSw4KWCIOCkteCkviDgpLjgpYsg4KSt4KSo4KWN4KSm4KS+IOCksuCkvuCkruCliyDgpI/gpIngpJ/gpL4gUFVLIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4i4KSk4KSq4KS+4KSI4KSC4KSV4KWLIFNJTSDgpJXgpL7gpLDgpY3gpKEgUFVLLeCksuCklSDgpJvgpaQg4KSv4KS44KSy4KS+4KSIIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKggUFVLIOCkleCli+CkoSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iU0lNIOCkleCkvuCksOCljeCkoSDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIFBVSzIg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i4KSG4KSX4KSu4KSoIOCkleCksuCksCBJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNsaXJNbWkiIG1zZ2lkPSI3Nzg0NjczNjczNDQ2ODMzMDkxIj4i4KSs4KS+4KS54KS/4KSw4KS/4KSo4KWHIOCkleCksuCksCBJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNmTW1pIiBtc2dpZD0iNTEyMzIxODk4OTE0MTU3MzUxNSI+IuCkleCksiDgpIXgpJfgpL7gpKHgpL8g4KSs4KSi4KS+4KSJ4KSB4KSm4KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ3dNbWkiIG1zZ2lkPSI5MTI5Njc4MDU2Nzk1MDE2ODY3Ij4i4KSV4KSyIOCkquCljeCksOCkpOCkv+CkleCljeCkt+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkJhTW1pIiBtc2dpZD0iNDU1MTkzMDY3OTI2NzcwNTgxIj4i4KSV4KSyIOCkrOCljeCkr+CkvuCksOCkv+CkmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlB3ZE1taSIgbXNnaWQ9IjcwNDM3MTU2ODc5MDUyNTQxOTkiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUGluTW1pIiBtc2dpZD0iMzExMzExNzc4MDM2MTE5MDMwNCI+IlBJTiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmlwTW1pIiBtc2dpZD0iMzExMDUzNDY4MDU1Nzg1NzE2MiI+IuCkquCljeCksOCkuOCljeCkpOClgeCkpCDgpKjgpK7gpY3gpKzgpLDgpK7gpL4g4KSV4KSyIOCkl+CksOCljeCkpuCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNuaXJNbWkiIG1zZ2lkPSIzMDYyMTAyMTIxNDMwNTQ4NzMxIj4i4KSV4KSyIOCkl+CksOCljeCkqOClhyDgpIXgpILgpJUg4KSw4KWL4KSV4KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlRocmVlV0NNbWkiIG1zZ2lkPSI5MDUxMDQ3MTcwMzIxMTkwMzY4Ij4i4KSV4KSyIOCkl+CksOCljeCkqOClhyDgpKTgpL/gpKgg4KSk4KSw4KS/4KSV4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUnVhY01taSIgbXNnaWQ9Ijc4Mjc4ODc0NTkxMzgzMDg4ODYiPiLgpKjgpJrgpL7gpLngpL/gpI/gpJXgpL4g4KSw4KS/4KS44KSJ4KSg4KWN4KSm4KS+IOCkleCksuCkueCksOClguCkleCliyDgpIXgpLjgpY3gpLXgpYDgpJXgpL7gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmRNbWkiIG1zZ2lkPSIzMTE2NDQ2MjM3MDgxNTc1ODA4Ij4i4KSV4KSy4KS/4KSZIOCkqOCkruCljeCkrOCksCDgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KWN4KSo4KWHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iRG5kTW1pIiBtc2dpZD0iMTI2NTQ3ODkzMjQxODMzNDMzMSI+IuCkrOCkvuCkp+CkviDgpKjgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPbiIgbXNnaWQ9IjQyOTQxNTQwOTE0NTc4MTkyMyI+IuCkuOClgOCkruCkpOCkvyDgpJfgpLDgpY3gpKgg4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSkIOCkleCksuCksCBJRCwg4KSF4KSw4KWN4KSV4KWLIOCkleCksjog4KS44KWA4KSu4KSk4KS/IOCkl+CksOCkv+Ckj+CkleCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T25OZXh0Q2FsbE9mZiIgbXNnaWQ9IjMwOTI5MTgwMDYwNzc4NjQ2MjQiPiLgpJXgpLLgpLAgSUQg4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSV4KWLIOCksuCkvuCkl+CkvyDgpLDgpYvgpJXgpL7gpLXgpJ8g4KSb4KWkIOCkheCksOCljeCkleCliyDgpJXgpLI6IOCksOCli+CkleCkvuCkteCknyDgpJvgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT24iIG1zZ2lkPSI2MTc5NDI1MTgyODU2NDE4NDY1Ij4i4KSV4KSy4KSwIElEIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCkpuClh+CkluCkvyDgpKrgpY3gpLDgpKTgpL/gpKzgpKjgpY3gpKfgpL/gpKQg4KSb4KWI4KSo4KWkIOCkheCksOCljeCkleCliyDgpJXgpLI6IOCkquCljeCksOCkpOCkv+CkrOCkqOCljeCkp+Ckv+CkpCDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT2ZmIiBtc2dpZD0iMjU2Nzk5ODYzMzEyNDQwODU1MiI+IuCkleCksuCksCBJRCDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpJXgpYsg4KSy4KS+4KSX4KS/IOCksOCli+CkleCkvuCkteCknyDgpJvgpYjgpKjgpaQg4KSF4KSw4KWN4KSV4KWLIOCkleCksjog4KSw4KWL4KSV4KS+4KS14KSfIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VOb3RQcm92aXNpb25lZCIgbXNnaWQ9Ijg2MTQ4MzAxODA1MDg2ODY2NjYiPiLgpLjgpYfgpLXgpL7gpJXgpYsg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+IOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJQZXJtYW5lbnQiIG1zZ2lkPSIzMzc3MzcxMTQ1OTI2ODM1NjcxIj4i4KSk4KSq4KS+4KSI4KSCIOCkleCksuCksCBJRCDgpLjgpYfgpJ/gpL/gpJkg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKjgpYHgpLngpYHgpKjgpY3gpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkQ2hhbmdlZFRpdGxlIiBtc2dpZD0iNTU5MjE4OTM5ODk1NjE4NzQ5OCI+IuCkquCljeCksOCkpOCkv+CkrOCkqOCljeCkp+Ckv+CkpCDgpKrgpLngpYHgpIHgpJog4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkreCkj+CkleCliyDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25EYXRhIiBtc2dpZD0iODY1Mzc5NDc4NDY5MDA2NTU0MCI+IuCkoeClh+Ckn+CkviDgpLjgpYfgpLXgpL4g4KSw4KWL4KSV4KS/4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkVtZXJnZW5jeSIgbXNnaWQ9IjY1ODExNjM3NzkwNzI4MzM2NjUiPiLgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KS44KWH4KS14KS+IOCksOCli+CkleCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Ob3JtYWwiIG1zZ2lkPSI0OTUzODY3MDExMzg5NzUwNjczIj4i4KSt4KWN4KS14KS+4KSH4KS4IOCkuOClh+CkteCkviDgpKzgpY3gpLLgpJUg4KSt4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbFZvaWNlIiBtc2dpZD0iMzM5Njk2MzY1MjEwODE1MTI2MCI+IuCkuOCkrOCliCDgpIbgpLXgpL7gpJwg4KS44KWH4KS14KS+4KS54KSw4KWCIOCkrOCkqOCljeCkpiDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25TbXMiIG1zZ2lkPSI4MzE0MzUyMzI3NDYxNjM4ODk3Ij4iU01TIOCkuOClh+CkteCkviDgpLDgpYvgpJXgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VEYXRhIiBtc2dpZD0iOTk2NjM2NDg3MTA2MTcxMzIwIj4i4KSt4KWN4KS14KS+4KSH4KS4L+CkoeClh+Ckn+CkviDgpLjgpYfgpLXgpL7gpLngpLDgpYIg4KSw4KWL4KSV4KS/4KSP4KSV4KS+IOCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+IuCkhuCkteCkvuCknC9TTVMg4KS44KWH4KS14KS+4KS54KSw4KWCIOCkrOCkqOCljeCkpiDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGwiIG1zZ2lkPSI1NjQzMDI4MjY0NDY2MDkyODIxIj4i4KS44KSs4KWIIOCkreCljeCkteCkvuCkh+CkuC/gpKHgpYfgpJ/gpL4vU01TIOCkuOClh+CkteCkvuCkueCksOClgiDgpKzgpY3gpLLgpJUg4KSt4KSP4KSV4KS+IOCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1ZvaWNlIiBtc2dpZD0iMTI1ODM5MzgxMjMzNTI1ODAxOSI+IuCkhuCkteCkvuCknCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGEiIG1zZ2lkPSI4NzI0NTY3ODIwNzc5Mzc4OTMiPiLgpKHgpYfgpJ/gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NGQVgiIG1zZ2lkPSI1NTY2NjI0OTk4ODQwNDg2NDc1Ij4i4KSr4KWN4KSv4KS+4KSV4KWN4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzU01TIiBtc2dpZD0iMjAxNTQ2MDM3MzcwMTUyNzQ4OSI+IlNNUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFBc3luYyIgbXNnaWQ9IjQ1MjM0NTQ3ODM0OTg1NTE0NjgiPiJBc3luYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0RhdGFTeW5jIiBtc2dpZD0iNzUzMDAwMDUxOTY0NjA1NDc3NiI+IuCkuOCkv+CkmeCljeCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NQYWNrZXQiIG1zZ2lkPSI2OTkxMDA2NTU3OTkzNDIzNDUzIj4i4KSq4KWN4KSv4KS+4KSV4KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzUEFEIiBtc2dpZD0iMzIzNTI1OTA4NTY0ODI3MTAzNyI+IlBBRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MCIgbXNnaWQ9IjcxNzAzMzU0NzIxOTg2OTQ5NDUiPiLgpLDgpYvgpK7gpL/gpJkg4KS44KWC4KSa4KSVIOCkluClgeCksuCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MSIgbXNnaWQ9IjUzMTQ4NjE1MTk3NTI1Mzg5MjIiPiLgpLDgpYvgpK7gpL/gpJkg4KS44KWC4KSa4KSVIOCkrOCkqOCljeCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MiIgbXNnaWQ9Ijg5Njk5MjkwNDkwODEyNjgxMTUiPiLgpLDgpYvgpK7gpL/gpJkg4KS44KWC4KSa4KSVIOCkq+CljeCksuCljeCkr+CkvuCkuCDgpJfgpLDgpY3gpKbgpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDMiIG1zZ2lkPSI1MTQ4MjU1MDI3MDQzOTQzMzE3Ij4i4KSb4KS/4KSu4KWH4KSV4KSs4KS+4KSfIOCkrOCkvuCkueCkv+CksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NCIgbXNnaWQ9Ijg4MDg0NTY2ODI1NTA3OTY1MzAiPiLgpKzgpL/gpLLgpY3gpKHgpL/gpJngpJXgpYsg4KSs4KS+4KS54KS/4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ1IiBtc2dpZD0iNzYwNDA2MzI1Mjg1MDM1NDM1MCI+IuCksOCli+CkruCkv+CkmSAtIOCkieCkquCkr+ClgeCkleCljeCkpCDgpKrgpY3gpLDgpKPgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDYiIG1zZ2lkPSIyMDU5NDQwODI1NzgyODcxNTEzIj4i4KSw4KWL4KSu4KS/4KSZIC0g4KSJ4KSq4KSy4KSs4KWN4KSnIOCkquCljeCksOCko+CkvuCksuClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NyIgbXNnaWQ9IjcxMTIwNzg3MjQwOTcyMzM2MDUiPiLgpLDgpYvgpK7gpL/gpJkgLSDgpI/gpLLgpL/gpK/gpKjgpY3gpLjgpLAg4KSq4KS+4KSw4KWN4KSf4KSo4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ4IiBtc2dpZD0iNTk4OTU2OTc3ODYwNDA4OTI5MSI+IuCksOCli+CkruCkv+CkmSAtIOCkquCljeCksOCkv+CkruCkv+Ckr+CkriDgpKrgpL7gpLDgpY3gpJ/gpKjgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDkiIG1zZ2lkPSI3OTY5Mjk2ODExMzU1MTUyNDkxIj4i4KSw4KWL4KSu4KS/4KSZIC0g4KSq4KWC4KSw4KWN4KSjIOCkuOClh+CkteCkviDgpJXgpL7gpLDgpY3gpK/gpJXgpY3gpLfgpK7gpKTgpL4g4KSF4KS14KS44KWN4KSl4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMCIgbXNnaWQ9IjM5OTI5MDY5OTk4MTUzMTY0MTciPiLgpLDgpYvgpK7gpL/gpJkgLSDgpIbgpJngpY3gpLbgpL/gpJUg4KS44KWH4KS14KS+IOCkquCljeCksOCkleCkvuCksOCljeCkr+CkpOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTEiIG1zZ2lkPSI0MTU0NDc2ODU0NDI2OTIwOTcwIj4i4KSw4KWL4KSu4KS/4KSZIOCkp+CljeCkteCknOCkviDgpJrgpL7gpLLgpYEg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQxMiIgbXNnaWQ9IjExODkwNzExMTk5OTI3MjYzMjAiPiLgpLDgpYvgpK7gpL/gpJkg4KSs4KWN4KSv4KS+4KSo4KSwIOCkrOCkqOCljeCkpiDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dFNlYXJjaGluZyIgbXNnaWQ9IjgzNjAxNDE4ODU5NzIyNzk5NjMiPiLgpLjgpYfgpLXgpL7gpJXgpYsg4KSW4KWL4KSc4KWAIOCkl+CksOCljeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVOb3RGb3J3YXJkZWQiIG1zZ2lkPSIxNjgzNjg1ODgzODQxMjcyNTYwIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IOCkheCkl+CkvuCkoeCkvyDgpKrgpKDgpL7gpIfgpI/gpJXgpYsg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZUZvcndhcmRlZCIgbXNnaWQ9IjEzMDI5MjIxMTc0OTg1OTA1MjEiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IkRJQUxJTkdfTlVNQkVSIj57MX08L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZUZvcndhcmRlZFRpbWUiIG1zZ2lkPSI5MjA2MjUxNzM2NTI3MDg1MjU2Ij4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJESUFMSU5HX05VTUJFUiI+ezF9PC94bGlmZjpnPiDgpKrgpJvgpL8gPHhsaWZmOmcgaWQ9IlRJTUVfREVMQVkiPnsyfTwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZVJlZ2lzdGVyZWQiIG1zZ2lkPSI1MDczMjM3ODI3NjIwMTY2Mjg1Ij4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IOCkheCkl+CkvuCkoeCkvyDgpKzgpKLgpL7gpIfgpI/gpJXgpYsg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZVJlZ2lzdGVyZWRUaW1lIiBtc2dpZD0iNjc4MTYyMTk2NDMyMDYzNTE3MiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiDgpIXgpJfgpL7gpKHgpL8g4KSs4KSi4KS+4KSH4KSP4KSV4KWLIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZjQ29tcGxldGUiIG1zZ2lkPSIzMTE4ODQ4MjMwOTY2ODg2NTc1Ij4i4KS14KS/4KS24KWH4KS34KSk4KS+IOCkleCli+CkoSDgpKrgpYHgpLDgpL4g4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmNFcnJvciIgbXNnaWQ9IjMzMjc1NjAxMjY1ODg1MDA3NzciPiLgpJzgpKHgpL7gpKgg4KS44KSu4KS44KWN4KSv4KS+IOCkteCkviDgpIXgpK7gpL7gpKjgpY3gpK8g4KS44KWB4KS14KS/4KSn4KS+IOCkleCli+CkoeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvck9rIiBtc2dpZD0iMTE5MTkxOTM3ODA4MzQ3MjIwNCI+IuCkoOCkv+CklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3IiIG1zZ2lkPSI3OTU2MzkyNTExMTQ2Njk4NTIyIj4i4KSP4KSJ4KSf4KS+IOCkqOClh+Ckn+CkteCksOCljeCklSDgpKTgpY3gpLDgpYHgpJ/gpL8g4KSl4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yTG9va3VwIiBtc2dpZD0iNDcxMTY4NzQ1NjExMTk2MzE2MyI+IlVSTCDgpK3gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRBdXRoU2NoZW1lIiBtc2dpZD0iNjI5OTk4MDI4MDQ0MjA3Njc5OSI+IuCkuOCkvuCkh+Ckn+CkleCliyDgpIbgpKfgpL/gpJXgpL7gpLDgpL/gpJXgpKTgpL4g4KSv4KWL4KSc4KSo4KS+IOCkuOCkruCksOCljeCkpeCkv+CkpCDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JBdXRoIiBtc2dpZD0iMTQzNTA2NTYyOTQzODA0NDUzNCI+IuCkquCljeCksOCkruCkvuCko+ClgOCkleCksOCkoyDgpJfgpLDgpY3gpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUHJveHlBdXRoIiBtc2dpZD0iMTc4ODIwNzAxMDU1OTA4MTMzMSI+IuCkquCljeCksOCli+CkleCljeCkuOClgCDgpLjgpLDgpY3gpK3gpLDgpJXgpYsg4KSu4KS+4KSn4KWN4KSv4KSu4KSm4KWN4KS14KS+4KSw4KS+IOCkquCljeCksOCkruCkvuCko+Ckv+CkleCksOCkoyDgpIXgpLjgpKvgpLIg4KSt4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckNvbm5lY3QiIG1zZ2lkPSI4NzE0MjczMjM2MzY0NjQwNTQ5Ij4i4KS44KSw4KWN4KSt4KSw4KS44KSB4KSXIOCknOCli+CkoeCljeCkqCDgpLjgpJXgpYfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JJTyIgbXNnaWQ9IjIzNDA1NTgxOTc0ODkzMDIxODgiPiLgpLjgpLDgpY3gpK3gpLDgpLjgpIHgpJcg4KS44KSC4KSa4KS+4KSwIOCkl+CksOCljeCkqCDgpLjgpJXgpYfgpKjgpaQg4KSr4KWH4KSw4KS/IOCkquCkm+CkvyDgpJXgpYvgpLjgpL/gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVGltZW91dCIgbXNnaWQ9IjQ3NDM0MDM3MDM3NjI4ODM5NTQiPiLgpLjgpLDgpY3gpK3gpLAg4KS44KSC4KSX4KSV4KWLIOCkuOCkruCljeCkquCksOCljeCklSDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KS44KSu4KSvIOCkuOCkleCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclJlZGlyZWN0TG9vcCIgbXNnaWQ9Ijg2Nzk1OTYwOTAzOTI3Nzk1MTYiPiLgpKrgpYPgpLfgpY3gpJ/gpK7gpL4g4KSn4KWH4KSw4KWIIOCkuOCksOCljeCkreCksOCkueCksOClguCkpOCkv+CksCDgpKrgpYHgpKjgpIMg4KSo4KS/4KSw4KWN4KSm4KWH4KS24KSo4KS54KSw4KWCIOCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkU2NoZW1lIiBtc2dpZD0iNTAxNTczMDgxMjkwNjE5MjIwOCI+IuCkquCljeCksOCli+Ckn+Cli+CkleCksiDgpLjgpK7gpLDgpY3gpKXgpL/gpKQg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmFpbGVkU3NsSGFuZHNoYWtlIiBtc2dpZD0iOTY1NDk2MDYwMDA2NTg2NDEiPiLgpI/gpIngpJ/gpL4g4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCknOCkoeCkvuCkqCDgpLjgpY3gpKXgpL7gpKrgpKjgpL4g4KSX4KSw4KWN4KSoIOCkuOCkleClh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckJhZFVybCIgbXNnaWQ9IjM2MzY5Mjk3MjI3Mjg4ODE5NzIiPiLgpKrgpYPgpLfgpY3gpKAg4KSW4KWL4KSy4KWN4KSoIOCkuOCkleCkv+CkgeCkpuCliOCkqCDgpJXgpL/gpKjgpK3gpKjgpYcgVVJMIOCkheCkruCkvuCkqOCljeCkryDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlIiBtc2dpZD0iMjE3MDc4ODUxNTA1MjU1ODY3NiI+IuCkq+CkvuCkh+CksiDgpK3gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZU5vdEZvdW5kIiBtc2dpZD0iNjIwMzg1NjYxMjA0MjY1NTA4NCI+IuCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpL/gpI/gpJXgpYsg4KSr4KS+4KSH4KSyIOCkreClh+Ckn+CkvuCkieCkqCDgpLjgpJXgpYfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUb29NYW55UmVxdWVzdHMiIG1zZ2lkPSIxMjM1Mzk2OTI3MDg3MTg4MjUzIj4i4KSn4KWH4KSw4KWIIOCkqOCliCDgpIXgpKjgpYHgpLDgpYvgpKfgpLngpLDgpYIg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KSu4KS+IOCkm+CkqOCljeClpCDgpKrgpJvgpL8g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4OTY3NzEwMDI1MDM2MTYzODIyIj4iPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiUxJHM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpL7gpIfgpKgg4KSH4KSoIOCkpOCljeCksOClgeCkn+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luYyIgbXNnaWQ9IjgzNTM1MjMwNjAyNjkzMzU2NjciPiLgpLjgpL/gpJngpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jTm90aWZpY2F0aW9uVGl0bGUiIG1zZ2lkPSIzOTc3NDMzNDkxOTE5MDE0NTgiPiLgpLjgpL/gpJngpY3gpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VUb29NYW55RGVsZXRlc05vdGlmaWNhdGlvbkRlc2MiIG1zZ2lkPSI4MTAwOTgxNDM1MDgwNjk2NDMxIj4i4KSF4KSk4KS/IOCkp+Clh+CksOCliCA8eGxpZmY6ZyBpZD0iQ09OVEVOVF9UWVBFIj4lczwveGxpZmY6Zz4g4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjQ5NDAxOTIzNDEwMjE1NDg5NiI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSW4KS+4KSy4KWAIOCkm+CliOCkqCEg4KSg4KS+4KSJ4KSBIOCkluCkvuCksuClgCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleClh+CkueClgCDgpKvgpL7gpIfgpLLgpLngpLDgpYIg4KSu4KWH4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NzU5OTkyODY2ODAwMDA1NDEiPiLgpKvgpYvgpKgg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkreCksOCkv+Ckj+CkleCliyDgpJshIOCkoOCkvuCkieCkgSDgpJbgpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpYfgpLngpYAg4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lIiBtc2dpZD0iNjU0NTY5NjAwNzYzMTQwNDI5MiI+IuCkruCksuCkvuCkiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2RpYWxvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODU0NTM1MTQyMDg2NTIwMjg1MyI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLXgpL/gpJXgpLLgpY3gpKrgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaWFsb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzE5OTE5MDc1NDYzOTg4NjM4Ij4i4KSr4KWL4KSoIOCkteCkv+CkleCksuCljeCkquCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlIiBtc2dpZD0iNzE2NzcwMzM4OTgwMjYxODY2MyI+IuCkruCljOCkqCDgpK7gpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXJuX29uX3JhZGlvIiBtc2dpZD0iMzkxMjc5MzA5MjMzOTk2MjM3MSI+IuCkteCkvuCkr+CksOCksuClh+CkuCDgpIXgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHVybl9vZmZfcmFkaW8iIG1zZ2lkPSI4MTk4Nzg0OTQ5OTg3MDYyMzQ2Ij4i4KSk4KS+4KSw4KSw4KS54KS/4KSkIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fbG9jayIgbXNnaWQ9Ijc5OTA5NDY1NTQ5NjA5ODE1MyI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpLLgpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfb2ZmIiBtc2dpZD0iNDI2NjYxNDEwNzQxMjg2NTA0OCI+IuCkquCkvuCkteCksCDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9zaWxlbnQiIG1zZ2lkPSIzMTkyOTgxNjMwMTg0NzMwNzgiPiLgpJjgpKjgpY3gpJ/gpYAg4KSs4KSo4KWN4KSmIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3ZpYnJhdGUiIG1zZ2lkPSI3MDcyMDQzMzg4NTgxNTUxMzk1Ij4i4KSY4KSo4KWN4KSf4KWAIOCkleCkruCljeCkquCkqCDgpJfgpLDgpY3gpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9yaW5nIiBtc2dpZD0iODU5MjI0MTgxNjE5NDA3NDM1MyI+IuCkmOCkqOCljeCkn+CkvyDgpJrgpL7gpLLgpYEg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fcHJvZ3Jlc3MiIG1zZ2lkPSIyMjgxMDc5MjU3MzI5OTgxMjAzIj4i4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkpuCliC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMzODU3NDUxNzk1NTU3MzE0NzAiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkrOCkqOCljeCkpiDgpLngpYHgpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY0OTc5MjE3NTI0MjgyMTM1MyI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKgg4KSs4KSo4KWN4KSmIOCkueClgeCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtX3F1ZXN0aW9uIiBtc2dpZD0iMjkwNjU0NDc2ODg4MTEzNjE4MyI+IuCkleClhyDgpKTgpKrgpL7gpIjgpIIg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYHgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX3RpdGxlIiBtc2dpZD0iNzA1NDUwOTkxNDUwMDE0MDM2MSI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpK7gpYvgpKHgpK7gpL4g4KSq4KWB4KSo4KSD4KSs4KWB4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV9jb25maXJtIiBtc2dpZD0iNTUyOTM5NDQ1MDI3ODQ2NjgiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSu4KWL4KSh4KSu4KS+IOCkpOCkquCkvuCkiOCkgSDgpKrgpYHgpKjgpIPgpKzgpYHgpJ8g4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/IOCkpOCkquCkvuCkiOCkgeCksuClhyDgpLjgpY3gpKXgpL7gpKrgpKjgpL4g4KSX4KSw4KWH4KSV4KS+IOCkuOCkrOCliCDgpKTgpYfgpLjgpY3gpLDgpYsg4KSq4KSV4KWN4KS34KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS+4KSJ4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiLgpKjgpK/gpL7gpIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19yZWNlbnRfdGFza3MiIG1zZ2lkPSI4Nzk0OTA2NjU4NzMyMTkzNDczIj4i4KSV4KWB4KSo4KWIIOCkqOCkr+CkvuCkgSDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSb4KWI4KSo4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQwODQ3NzE0MDA4ODA1MzY2NSI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLXgpL/gpJXgpLLgpY3gpKrgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiLgpKvgpYvgpKgg4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrIiBtc2dpZD0iMjg0NDk0NTE5MTc5MjExOTcxMiI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3Bvd2VyX29mZiIgbXNnaWQ9IjQ0NzE4Nzk0NDA4Mzk4Nzk3MjIiPiLgpLbgpJXgpY3gpKTgpL8g4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9idWdfcmVwb3J0IiBtc2dpZD0iNzkzNDAxMDU3ODkyMjMwNDc5OSI+IuCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdGl0bGUiIG1zZ2lkPSIyNjY3NDk0ODAzNzQyNTQ4NTMzIj4i4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCknyDgpLLgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfbWVzc2FnZSIgbXNnaWQ9IjM5ODQ0NzA0ODc1MDM1MDQ1NiI+IuCkj+CkieCkn+CkviDgpIfgpK7gpYfgpLIg4KS44KSo4KWN4KSm4KWH4KS24KSV4KWLIOCksOClguCkquCkruCkviDgpKrgpKDgpL7gpIngpKjgpLLgpL7gpIgg4KSv4KS44KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLngpL7gpLLgpYjgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCkheCkteCkuOCljeCkpeCkvuCkleCliyDgpKzgpL7gpLDgpYfgpK7gpL4g4KS44KWC4KSa4KSo4KS+IOCknOCkruCljeCkruCkviDgpJfgpLDgpY3gpKjgpYcg4KSb4KWkIOCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KS44KWB4KSw4KWBIOCkl+CksOClh+CkpuClh+CkluCkvyDgpKrgpKDgpL7gpIngpKgg4KSk4KSv4KS+4KSwIOCkqOCkreCkj+CkuOCkruCljeCkriDgpK/gpLjgpLLgpYcg4KSV4KWH4KS54KWAIOCkuOCkruCkryDgpLLgpL/gpKjgpY3gpJs7IOCkleClg+CkquCkr+CkviDgpKfgpYjgpLDgpY3gpK8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl90b2dnbGVfc2lsZW50X21vZGUiIG1zZ2lkPSI4MjE5NTI1MzQ0MjQ2ODEwOTI1Ij4i4KSu4KWM4KSoIOCkruCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2lsZW50X21vZGVfb25fc3RhdHVzIiBtc2dpZD0iMzI4OTg0MTkzNzAwMzc1ODgwNiI+IuCkhuCkteCkvuCknCDgpKzgpKjgpY3gpKYg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iMTUwNjA0NjU3OTE3NzA2NjQxOSI+IuCkp+CljeCkteCkqOCkvyDgpJbgpYHgpLLgpY3gpLLgpL4g4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfdG9nZ2xlX2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI1ODg0MzMwMzA2OTI2MzA3NDU2Ij4i4KS54KS14KS+4KSH4KSc4KS54KS+4KScIOCkruCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb25fc3RhdHVzIiBtc2dpZD0iMjcxOTU1Nzk4MjYwODkxOTc1MCI+IuCkueCkteCkvuCkh+CknOCkueCkvuCknCDgpK7gpYvgpKEg4KSW4KWB4KSy4KS+IOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjUwNzUwNzA0NDI4NTQ0OTAyOTYiPiLgpLngpLXgpL7gpIfgpJzgpLngpL7gpJwg4KSu4KWL4KShIOCkrOCkqOCljeCkpiDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+IuClr+Clr+ClrysiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSu4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4i4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIOCkquCljeCksOCko+CkvuCksuClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jb3N0TW9uZXkiIG1zZ2lkPSI1NDI5ODA4MjE3ODYxNDYwNDAxIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkv+CksOCljeCkqOClgSDgpKrgpLDgpY3gpKjgpYcg4KS44KWH4KS14KS+4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jb3N0TW9uZXkiIG1zZ2lkPSIzMjkzMzAxOTAzNDA5ODY5NDk1Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkruCkueCkgeCkl+CliyDgpKrgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWHIOCkleCkvuCkruCkueCksOClgiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWVzc2FnZXMiIG1zZ2lkPSI3NTIxMjQ5MTQ4NDQ1NDU2NjYyIj4i4KSk4KSq4KS+4KSI4KSC4KSV4KS+IOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWVzc2FnZXMiIG1zZ2lkPSI3ODIxOTk5MDcxMDAzNjk5MjM2Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KS+IFNNUywg4KSH4KSu4KWH4KSyIOCksCDgpIXgpKjgpY3gpK8g4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSy4KWH4KSW4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3BlcnNvbmFsSW5mbyIgbXNnaWQ9IjM1MTkxNjMxNDEwNzA1MzM0NzQiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSo4KS/4KSc4KWAIOCkuOClguCkmuCkqOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfcGVyc29uYWxJbmZvIiBtc2dpZD0iODQyNjQ1MzEyOTc4ODg2MTMzOCI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSV4KS+4KSw4KWN4KSh4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpI/gpJXgpL4g4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkrOCkvuCksOClh+CkleCliyDgpJzgpL7gpKjgpJXgpL7gpLDgpYDgpK7gpL4g4KS44KS/4KSn4KS+IOCkquCkueClgeCkgeCkmiDgpKrgpYHgpLDgpY3igI3gpK/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc29jaWFsSW5mbyIgbXNnaWQ9IjU3OTkwOTY2MjM0MTIwNDM3OTEiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkuOClguCkmuCkqOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc29jaWFsSW5mbyIgbXNnaWQ9IjcxMjk4NDI0NTc2MTE2NDM0OTMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWCIOCksCDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSc4KSh4KS+4KSo4KS54KSw4KWC4KSV4KWLIOCkrOCkvuCksOClh+CkleCliyDgpJzgpL7gpKjgpJXgpL7gpLDgpYDgpK7gpL4g4KS44KS/4KSn4KS+IOCkquCkueClgeCkgeCkmiDgpKrgpYHgpLDgpY3igI3gpK/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbG9jYXRpb24iIG1zZ2lkPSI2MzUxNDk3NDI0MzY2OTIwNDkiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KWN4KSl4KS+4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19sb2NhdGlvbiIgbXNnaWQ9IjU3MDQ2Nzk3NjMxMjQxNzAxMDAiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSt4KWM4KSk4KS/4KSVIOCkuOCljeCkpeCkvuCkqCDgpKjgpL/gpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX25ldHdvcmsiIG1zZ2lkPSI1ODA4OTgzMzc3NzI3MTA5ODMxIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCkguCkmuCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbmV0d29yayIgbXNnaWQ9IjQ0NzgyOTk0MTMyNDE4NjE5ODciPiLgpLXgpL/gpK3gpL/gpKjgpY3gpKgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOClgeCkteCkv+Ckp+CkvuCkueCksOClguCkruCkviDgpKrgpLngpYHgpIHgpJog4KSw4KS+4KSW4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSIxNTg1NDAzNTQ0MTYyMTI4MTA5Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iNTYyNTI4ODU3NzE2NDI4MjM5MSI+IuCkrOCljeCksuClgeCkn+ClgeCkpeCkleCliyDgpK7gpL7gpKfgpY3gpK/gpK7gpKbgpY3gpLXgpL7gpLDgpL4g4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWCIOCksCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpLngpLDgpYLgpK7gpL7gpKXgpL8g4KSq4KS54KWB4KSB4KSaIOCksOCkvuCkluCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hdWRpb1NldHRpbmdzIiBtc2dpZD0iODMyOTI2MTY3MDE1MTg3MTIzNSI+IuCkheCkoeCkv+Ckr+CliyDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2F1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIyNjQxNTE1NDAzMzQ3NTY4MTMwIj4i4KSF4KSh4KS/4KSv4KWLIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKzgpKbgpLLgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWZmZWN0c0JhdHRlcnkiIG1zZ2lkPSI2MjA5MjQ2NjUzNDI0Nzk4MDMzIj4i4KSs4KWN4KSv4KSf4KWN4KSw4KS/4KSy4KS+4KSIIOCkquCljeCksOCkreCkvuCktSDgpKrgpL7gpLDgpY3gpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjQ0MTI3NTMyMDYzODkxNjk0NyI+IuCkm+Ckv+Ckn+CljeCkn+CliCDgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KS44KSV4KS+4KSJ4KSoIOCkuOCkleCljeCkqOClhyDgpKTgpYAg4KS14KS/4KS24KWH4KS34KSk4KS+4KS54KSw4KWCIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FsZW5kYXIiIG1zZ2lkPSI1ODYzNTA4NDM3NzgzNjgzOTAyIj4i4KSq4KS+4KSk4KWN4KSw4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jYWxlbmRhciIgbXNnaWQ9IjU3Nzc1MzQzMTY5ODIxODQ0MTYiPiLgpKrgpL7gpKTgpY3gpLDgpYsg4KSk4KSl4KS+IOCkmOCkn+CkqOCkvuCkueCksOClguCkruCkviDgpKrgpY3gpLDgpKTgpY3gpK/gpJXgpY3gpLcg4KSq4KS54KWB4KSB4KSaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RpY3Rpb25hcnkiIG1zZ2lkPSI0MTQ4NTk3MTI4ODQzNjQxMzc5Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCktuCkrOCljeCkpuCkleCli+CktiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RpY3Rpb25hcnkiIG1zZ2lkPSI3OTIxMTY2MzU1OTY0NzY0NDkwIj4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCktuCkrOCljeCkpuCkleCli+CktuCkruCkviDgpLbgpKzgpY3gpKbgpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjgwOTAyMzc3MDI0MzI1NzY3ODgiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KS24KSs4KWN4KSm4KSV4KWL4KS2IOCksuClh+CkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iMjcxMTU2MTk5NDQ5NzM2MTY0NiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpLbgpKzgpY3gpKbgpJXgpYvgpLbgpK7gpL4g4KS24KSs4KWN4KSm4KS54KSw4KWCIOCkpeCkquCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ib29rbWFya3MiIG1zZ2lkPSIxOTQ5NTE5NjczMTAzOTY4MjI5Ij4i4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSV4KS54KSw4KWCIOCksCDgpIfgpKTgpL/gpLngpL7gpLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Jvb2ttYXJrcyIgbXNnaWQ9IjQxNjk3NzE2MDYyNTc5NjMwMjgiPiLgpKzgpYHgpJXgpK7gpL7gpLDgpY3gpJXgpLngpLDgpYIg4KSwIOCkrOCljeCksOCkvuCkieCknOCksCDgpIfgpKTgpL/gpLngpL7gpLjgpK7gpL4g4KS44KS/4KSn4KS+IOCkquCkueClgeCkgeCkmuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kZXZpY2VBbGFybXMiIG1zZ2lkPSI2MTE3NzA0NjI5NzI4ODI0MTAxIj4i4KSF4KSy4KS+4KSw4KWN4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZpY2VBbGFybXMiIG1zZ2lkPSI0NzY5MzU2MzYyMjUxNjQxMTc1Ij4i4KSF4KSy4KS+4KSw4KWN4KSuIOCkmOCkoeClgCDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3ZvaWNlbWFpbCIgbXNnaWQ9IjQxNjIyMzcxNDUwMjc1OTIxMzMiPiLgpK3gpY3gpLXgpL7gpIfgpLgg4KSu4KWH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY192b2ljZW1haWwiIG1zZ2lkPSIyNDk4NDAzOTY5ODYyOTUxMzkzIj4i4KSt4KWN4KS14KS+4KSH4KS44KSu4KWH4KSy4KSu4KS+IOCkuOCkv+Ckp+CkviDgpKrgpLngpYHgpIHgpJrgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWljcm9waG9uZSIgbXNnaWQ9IjE3MTUzOTkwMDI1MDA0MzQ2NCI+IuCkruCkvuCkh+CkleCljeCksOCli+Ckq+Cli+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWljcm9waG9uZSIgbXNnaWQ9IjcxMDY2MTgyODY5MDU3Mzg0MDgiPiLgpK7gpL5b4KSV4KWN4KSw4KWL4KSr4KWL4KSo4KSs4KS+4KSfIOCksOClh+CkleCksOCljeCkoSDgpIXgpKHgpL/gpK/gpYvgpK7gpL4g4KS44KS/4KSn4KS+IOCkquCkueClgeCkgeCkmiDgpKrgpYHgpLDgpY3igI3gpK/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FtZXJhIiBtc2dpZD0iNDgyMDM3MjQ5NTg5NDU4NjYxNSI+IuCkleCljeCkr+CkvuCkruClh+CksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMjkzMzY2NzM3MjI4OTU2NzcxNCI+IuCkpOCkuOCljeCkrOCkv+CksCDgpLXgpL4g4KSt4KS/4KSh4KS/4KSv4KWLIOCkleCljeCkr+CkvuCkquCljeCkmuCksOCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+4KSu4KS+IOCkuOCkv+Ckp+CkviDgpKrgpLngpYHgpIHgpJrgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc2NyZWVubG9jayIgbXNnaWQ9IjgyNzU1MDAxNzMzMzA3MTgxNjgiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSy4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc2NyZWVubG9jayIgbXNnaWQ9IjcwNjc0OTcxMjg5MjU0OTk0MDEiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCksuCklSDgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpJXgpYsg4KS14KWN4KSv4KS14KS54KS+4KSw4KSy4KS+4KSIIOCkquCljeCksOCkreCkvuCkteCkv+CkpCDgpJfgpLDgpY3gpKjgpYcg4KSV4KWN4KS34KSu4KSk4KS+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FwcEluZm8iIG1zZ2lkPSI4MDI4Nzg5NzYyNjM0MTQ3NzI1Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLjgpYLgpJrgpKjgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FwcEluZm8iIG1zZ2lkPSIzOTUwMzc4NTM4MDQ5NjI1OTA3Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkieCkquCkleCksOCko+CkruCkviDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkteCljeCkr+CkteCkueCkvuCksOCkruCkviDgpKrgpY3gpLDgpK3gpL7gpLUg4KSq4KS+4KSw4KWN4KSo4KWHIOCkleCljeCkt+CkruCkpOCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl93YWxscGFwZXIiIG1zZ2lkPSIzODUwMjgwMTU4MDQxMTc1OTk4Ij4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY193YWxscGFwZXIiIG1zZ2lkPSI1NjMwNDE3ODU0NzUwNTQwMTU0Ij4i4KSJ4KSq4KSV4KSw4KSjIOCkteCkvuCksuCkquClh+CkquCksCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSs4KSm4KSy4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbUNsb2NrIiBtc2dpZD0iNDA2NTM1NzU5MjM2NjEyOTkyIj4i4KSY4KSh4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1DbG9jayIgbXNnaWQ9IjM5NDQzNTk4MzM2MjQwOTQ5OTIiPiLgpIngpKrgpJXgpLDgpKMg4KS44KSu4KSvIOCkteCkviDgpLjgpK7gpK8g4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RhdHVzQmFyIiBtc2dpZD0iMjA5NTg2MjU2ODExMzk0NTM5OCI+IuCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpJ/gpY3gpJ/gpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0YXR1c0JhciIgbXNnaWQ9IjYyNDI1OTM0MzIyMjY4MDcxNzEiPiLgpIngpKrgpJXgpLDgpKMg4KS44KWN4KSl4KS/4KSk4KS/IOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5bmNTZXR0aW5ncyIgbXNnaWQ9IjMzNDE5OTA5ODYxNDc4MjY1NDEiPiLgpLjgpL/gpJngpY3gpJUg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeW5jU2V0dGluZ3MiIG1zZ2lkPSI3NjAzMTk1MjY1MTI5MDMxNzk3Ij4i4KS44KS/4KSZ4KWN4KSVIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClguCkruCkviDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY291bnRzIiBtc2dpZD0iMzM1OTY0NjI5MTEyNTMyNTUxOSI+IuCkpOCkquCkvuCkiOCkgeCkleCkviDgpJbgpL7gpKTgpL7gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FjY291bnRzIiBtc2dpZD0iNDk0ODczMjY0MTgyNzA5MTMxMiI+IuCkieCkquCksuCkrOCljeCkpyDgpJbgpL7gpKTgpL7gpLngpLDgpYIg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNzk5ODIxNDk2ODc5MTU5OTMyNiI+IuCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKPgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2hhcmR3YXJlQ29udHJvbHMiIG1zZ2lkPSI0MzU3MDU3ODYxMjI1NDYyNzAyIj4i4KS54KWN4KSv4KS+4KSo4KWN4KSh4KS44KWH4KSf4KSV4KWLIOCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksOCkruCkviDgpKrgpY3gpLDgpKTgpY3gpK/gpJXgpY3gpLcg4KSq4KS54KWB4KSB4KSa4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3Bob25lQ2FsbHMiIG1zZ2lkPSI5MDY3MTczOTg4MzI1ODY1OTIzIj4i4KSr4KWL4KSoIOCkleCksuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfcGhvbmVDYWxscyIgbXNnaWQ9Ijc0ODk3MDE2MjA0NDYxODM3NzAiPiLgpIXgpKjgpYHgpJfgpK7gpKgsIOCksOClh+CkleCksOCljeCkoSDgpLAg4KSr4KWL4KSoIOCkleCksuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpLjgpYvgpKfgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbVRvb2xzIiBtc2dpZD0iNDY1MjE5MTY0NDA4MjcxNDA0OCI+IuCkquCljeCksOCko+CkvuCksuClgCDgpJTgpJzgpL7gpLDgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N5c3RlbVRvb2xzIiBtc2dpZD0iODE2MjEwMjYwMjE5MDczNDMwNSI+IuCkqOCkv+CkruCljeCkqC3gpLjgpY3gpKTgpLAg4KSq4KS54KWB4KSB4KSaIOCksCDgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpJXgpYsg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSIzNDQ2MTY0NTg0NzEwNTk2NTEzIj4i4KS14KS/4KSV4KS44KS/4KSkIOCkn+ClgeCksuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2ZWxvcG1lbnRUb29scyIgbXNnaWQ9IjcwNTg4MjgwMzIzNTgxNDIwMTgiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS14KS/4KSV4KS+4KS44KSV4KSw4KWN4KSk4KS+4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpK7gpL7gpKTgpY3gpLAg4KS44KWB4KS14KS/4KSn4KS+4KS54KSw4KWC4KSV4KWLIOCkhuCkteCktuCljeCkr+CkleCkpOCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaXNwbGF5IiBtc2dpZD0iNDI3OTkwOTY3NjAzNjQwMjYzNiI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcgVUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Rpc3BsYXkiIG1zZ2lkPSI2MDUxMDAyMDMxOTMzMDEzNzE0Ij4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyBVSSDgpLLgpL7gpIgg4KSF4KS44KSwIOCkquCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdG9yYWdlIiBtc2dpZD0iMTk3MTExODc3MDU0NjMzNjk2NiI+IuCkreCko+CljeCkoeCkvuCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3NDQyMzE4NTAyNDQ2ODc0OTk5Ij4iVVNCIOCkreCko+CljeCkoeCkvuCksOCko+CkruCkvuCkpeCkvyDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iOTIwMzMwMjIxNDkxNTM1NTc3NCI+IlNEIOCkleCkvuCksOCljeCkoeCkruCkvuCkpeCkvyDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9Ijc5MTkwMjU2MDIyODM1OTM5MDciPiLgpKrgpLngpYHgpIHgpJrgpYDgpJXgpLDgpKMg4KS14KS/4KS24KWH4KS34KSk4KS+4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI0MjA1MTk2ODgxNjc4MTQ0MzM1Ij4i4KS44KS54KSv4KWL4KSX4KWAIOCkquCljeCksOCkteCkv+Ckp+CkvyDgpK3gpI/gpJXgpYsg4KS14KS/4KS24KWH4KS34KSk4KS+4KS54KSw4KWC4KSy4KWHIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzOTAxNzE3OTM2OTMwMTcwMzIwIj4i4KS14KS/4KSo4KWN4KSh4KWLIOCkuOCkvuCkruCkl+CljeCksOClgOCkleCliyDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJldHJpZXZlV2luZG93Q29udGVudCIgbXNnaWQ9IjM3NzIyMjUwMDg2MDUzMTA2NzIiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSF4KSo4KWN4KSk4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkreCkh+CksOCkueClh+CkleCliyDgpLXgpL/gpKjgpY3gpKHgpYvgpJXgpYsg4KS44KS+4KSu4KSX4KWN4KSw4KWA4KSV4KWLIOCkqOCkv+CksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iMzEwODcyMzM2NDY3NjY2NzMyMCI+IuCkm+Cli+Ckj+CksCDgpJfgpLDgpL/gpKjgpYcg4KSW4KWL4KSc4KSy4KS+4KSIIOCkuOClgeCkmuCkvuCksOClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdFRvdWNoRXhwbG9yYXRpb24iIG1zZ2lkPSI1ODAwNTUyNTE2Nzc5MjQ5MzU2Ij4i4KSb4KWL4KSH4KSP4KSV4KS+IOCkhuCkh+Ckn+CkruCkueCksOClgiDgpJrgpLDgpY3gpJXgpYsg4KS44KWN4KS14KSw4KSu4KS+IOCkrOCli+CksuCkv+CkqOClhyDgpJsg4KSwIOCkuOCljeCkleCljeCksOCkv+CkqCDgpIfgpLbgpL7gpLDgpL7gpLngpLDgpYLgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCkqOCljeCkteClh+Ckt+CkoyDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTczOTg4MTc2NjUyMjU5NDA3MyI+IuCkieCkmuCljeCkmiDgpLXgpYfgpKwg4KSq4KS54KWB4KSB4KSa4KSy4KS+4KSIIOCkuOClgeCkmuCkvuCksOClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9Ijc4ODEwNjM5NjE1MDc1MTE3NjUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KS44KS+4KSu4KSX4KWN4KSw4KWA4KSy4KS+4KSIIOCkpeCkqiDgpKrgpLngpYHgpIHgpJrgpK/gpYvgpJfgpY3gpK8g4KSs4KSo4KS+4KSJ4KSoIOCksuCkv+CkquCkv+CkueCksOClgiDgpLjgpY3gpKXgpL7gpKrgpKjgpL4g4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkqOClgSDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSIyMTAzNDQwMzkxOTAyNDEyMTc0Ij4i4KSG4KSr4KWB4KSy4KWHIOCkn+CkvuCkh+CkqiDgpJfgpLDgpYfgpJXgpYsg4KSq4KS+4KSg4KSV4KWLIOCkqOCkv+CksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSh4KWH4KSf4KS+IOCknOCkuOCljeCkpOCliCDgpJXgpY3gpLDgpYfgpKHgpL/gpJ8g4KSV4KS+4KSw4KWN4KShIOCkqOCkruCljeCkrOCksOCkueCksOClgiDgpLAg4KSq4KS+4KS44KS14KSw4KWN4KSh4KS54KSw4KWCIOCkuOCkruCkvuCkteClh+CktiDgpJfgpLDgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSf4KWN4KSf4KS/4KSy4KS+4KSIIOCkheCkleCljeCkt+CkriDgpLXgpL4g4KS44KSC4KS24KWL4KSn4KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSf4KWN4KSf4KS/IOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KS14KS+IOCkquCljeCksOCko+CkvuCksuClgCDgpIbgpIfgpJXgpKjgpLngpLDgpYIg4KSl4KSq4KWN4KSoIOCksCDgpLngpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MjQ3MjgxOTExMzg3OTMxNDg1Ij4i4KS44KWN4KSl4KS/4KSk4KS/IOCkquCkn+CljeCkn+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MTYxMTM2NjA3OTU5NzYwNjAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KWN4KSl4KS/4KSk4KS/IOCkquCkn+CljeCkn+CkvyDgpLngpYHgpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iMTE0ODE5ODc4NTkzNzQ4OTI2NCI+IuCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpJ/gpY3gpJ/gpL/gpLLgpL7gpIgg4KS14KS/4KS44KWN4KSk4KWD4KSkL+CkuOCkmeCljeCkleClgeCkmuCkv+CkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSI2OTE3NTQ5NDM3MTI5NDAxMTMyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpJ/gpY3gpJ/gpL8g4KS14KS/4KS44KWN4KSk4KS+4KSwIOCkteCkviDgpLjgpILgpJXgpYHgpJrgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iMzkwNjAwNzgzMTE5Mjk5MDk0NiI+IuCkrOCkueCkv+CksOCljeCkl+CkruCkqCDgpJXgpLLgpLngpLDgpYLgpLLgpL7gpIgg4KSF4KSw4KWN4KSV4KWLIOCkruCkvuCksOCljeCklyDgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjUzMzEzMTg5MzE5Mzc0MDIwNDAiPiLgpKzgpLngpL/gpLDgpY3gpJfgpK7gpKgg4KSV4KSy4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCktuCli+Ckp+CkqCDgpJfgpLDgpY3gpKgg4KSwIOCkoeCkvuCkr+CksiDgpJfgpLDgpL/gpKjgpYcg4KSo4KSu4KWN4KSs4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQgIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL/gpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkruCli+CkqOCkv+Ckn+CksCDgpJfgpLDgpY3gpKgsIOCkheCkqOCljeCkr+CkpOCljeCksCDgpKrgpKDgpL7gpIngpKgg4KS14KS+IOCkrOCkvuCkueCkv+CksCDgpJzgpL7gpKjgpYcg4KSV4KSy4KS54KSw4KWC4KSy4KS+4KSIIOCksOCli+CkleCljeCkqCDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVTbXMiIG1zZ2lkPSI4NjczNDcxNzY4OTQ3ODk1MDgyIj4i4KSq4KS+4KSgIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiAoU01TKSDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIggU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCksCDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSV4KWLIOCkruCkpOCksuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkieCkquCkleCksOCko+CkruCkviDgpKrgpKDgpL7gpIfgpI/gpJXgpYsg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkpOCkquCkvuCkiOCkguCksuCkvuCkiCDgpKjgpKbgpYfgpJbgpL7gpIjgpKjgpYgg4KSu4KWL4KSo4KS/4KSf4KSwIOCkl+CksOCljeCkqCDgpLXgpL4g4KSu4KWH4KSf4KS+4KSJ4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZU1tcyIgbXNnaWQ9IjE4MjEzMTczNDQ2NjgyNTcwOTgiPiLgpKrgpL7gpKAg4KS44KSo4KWN4KSm4KWH4KS2IChNTVMpIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlTW1zIiBtc2dpZD0iNTMzMDE5NDM3MjYzMjEyMjYwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIE1NUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpLAg4KSq4KWN4KSw4KSV4KWD4KSv4KS+IOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCkleCliyDgpK7gpKTgpLLgpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSq4KSg4KS+4KSH4KSP4KSV4KWLIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKTgpKrgpL7gpIjgpILgpLLgpL7gpIgg4KSo4KSm4KWH4KSW4KS+4KSI4KSo4KWIIOCkruCli+CkqOCkv+Ckn+CksCDgpJfgpLDgpY3gpKgg4KS14KS+IOCkruClh+Ckn+CkvuCkieCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4i4KSG4KSV4KS44KWN4KSu4KS/4KSVIOCkquCljeCksOCkuOCkvuCksOCko+CkueCksOClgiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9Ijg0ODUyNDA3MDI2MjQzMTk3NCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCksCDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSu4KS+IOCkruCkvuCkpOCljeCksCDgpIngpKrgpLLgpKzgpY3gpKcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSIxNTk4MzI4ODQzNjE5NjQ2MTY2Ij4i4KS44KWH4KSyIOCkquCljeCksOCkuOCkvuCksOCkv+CkpCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iNjM2MTk3Mjc3NjA4MDQ1ODk3OSI+IuCkpOCkquCkvuCkiOCkguCkleCliyDgpIngpKrgpJXgpLDgpKPgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkuOClh+CksiDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpYfgpLIg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkmuClh+CkpOCkvuCkteCkqOClgOCkueCksOClgiDgpJXgpYfgpLngpYAg4KS44KWN4KSl4KS+4KSo4KS54KSw4KWC4KSu4KS+IOCkpOCkquCkvuCkiOCkguCksuCkvuCkiCDgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSX4KSk4KS/4KS14KS/4KSn4KS/4KS54KSw4KWC4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpLjgpJrgpYfgpKQg4KSX4KSw4KS+4KSJ4KSoIOCkl+CksOCkv+Ckj+CkleCkviDgpJvgpKjgpY3gpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpI/gpIngpJ/gpL4g4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkuOClh+CksiDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkpuCkmyDgpJzgpKwg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkieCkquCkleCksOCko+CkleCliyDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KS14KS+IOCkheCkquCksOClh+CktuCkqOCkleCliyDgpLjgpL7gpKUg4KS54KS44KWN4KSk4KSV4KWN4KS34KWH4KSqIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRTbXMiIG1zZ2lkPSI1NjAwODMwNjEyMTQ3NjcxNTI5Ij4iU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCBTTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkoOCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKrgpY3gpLDgpKTgpY3gpK/gpL7gpLjgpL/gpKQg4KSa4KS+4KSw4KWN4KSc4KS54KSw4KWC4KSV4KWLIOCkquCksOCkv+Cko+CkvuCkriDgpKbgpL/gpKgg4KS44KSV4KWN4KSm4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkquClgeCkt+CljeCkn+CkvyDgpKzgpL/gpKjgpL4g4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkoOCkvuCkj+CksCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSq4KWI4KS44KS+IOCkluCksOCljeCkmiDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iODcxMzg4OTEwNTMwNTk0MzIwMCI+IuCkquCljeCksOCkpOCkv+CkleCljeCksOCkv+Ckr+Ckvi3gpK7gpL7gpLDgpY3gpKvgpKQt4KS44KSo4KWN4KSm4KWH4KS2IOCkmOCkn+CkqOCkvuCkueCksOClgiDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kUmVzcG9uZFZpYU1lc3NhZ2VSZXF1ZXN0IiBtc2dpZD0iNzEwNzY0ODU0ODQ2ODc3ODczNCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIbgpJfgpKQg4KSV4KSy4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpKrgpY3gpLDgpKTgpL/gpJXgpY3gpLDgpL/gpK/gpL4t4KSu4KS+4KSw4KWN4KSr4KSkLeCkuOCkqOCljeCkpuClh+CktiDgpJjgpJ/gpKjgpL7gpLngpLDgpYLgpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkuOCkqOCljeCkpuClh+CktiDgpKrgpKDgpL7gpIngpKjgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSu4KS+IOCkheCkqOClgeCksOCli+Ckp+CkueCksOClgiDgpKrgpKDgpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNtcyIgbXNnaWQ9Ijg3NDUwODY1NzIyMTMyNzA0ODAiPiLgpKTgpKrgpL7gpIjgpILgpJXgpL4g4KSq4KS+4KSgIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiAoU01TIOCkteCkviBNTVMpIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI0Njc5ODE1NDg2ODQ3MzU1MjIiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkteCkviBTSU0g4KSV4KS+4KSw4KWN4KSh4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpI/gpJXgpL4gU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClguCksuCkvuCkiCDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLXgpL/gpLfgpK/gpLXgpLjgpY3gpKTgpYEg4KS14KS+IOCkl+Cli+CkquCkqOClgOCkr+CkpOCkvuCksuCkvuCkiCDgpLXgpYfgpLXgpL7gpLjgpY3gpKTgpL4g4KSX4KSw4KWN4KSm4KWIIOCkuOCkrOCliCBTTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkouCljeCkqOClhyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KWL4KSoIOCkteCkviBTSU0g4KSV4KS+4KSw4KWN4KSh4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpI/gpJXgpL4gU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClguCksuCkvuCkiCDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkuOCkrOCliCBTTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWC4KSy4KS+4KSIIOCkquCkouCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkteCkviDgpLXgpL/gpLbgpY3gpLXgpLjgpKjgpL/gpK/gpKTgpL4g4KSs4KS/4KSo4KS+IOCkqOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTbXMiIG1zZ2lkPSIzMjE2OTUwNDcyNjM2MjE0Nzc0Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkquCkvuCkoCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KS44KSu4KWN4KSq4KS+4KSm4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSAoU01TIOCkteCkviBNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLXgpL4gU0lNIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpKPgpY3gpKHgpL7gpLAg4KSX4KSw4KS/4KSP4KSV4KS+IFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSy4KWH4KSW4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkruClh+Ckn+CkvuCkieCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcyNjg2Njg3MDkwNTIzMjg1NjciPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KWL4KSoIOCkteCkviBTSU0g4KSV4KS+4KSw4KWN4KSh4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpI/gpJXgpL4gU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClguCksuCkvuCkiCDgpLLgpYfgpJbgpY3igI3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KS44KS+4KSv4KSmIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSu4KWH4KSf4KS+4KSJ4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI1OTkxMzk4NzExOTM2NTkwNDEwIj4i4KSq4KS+4KSgIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiAoV0FQKSDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiJXQVAg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSwIOCkquCljeCksOCktuCli+Ckp+CkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CkruCkviDgpK7gpYvgpKjgpL/gpJ/gpLAg4KSX4KSw4KWN4KSo4KWHIOCkteCkviDgpKTgpKrgpL7gpIjgpIHgpLLgpL7gpIgg4KSq4KSg4KS+4KSH4KSP4KSV4KS+IOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKTgpKrgpL7gpIjgpIHgpLLgpL7gpIgg4KSo4KSm4KWH4KSW4KS+4KSIIOCkruClh+Ckn+CljeCkqOClhyDgpJXgpY3gpLfgpK7gpKTgpL4g4KS44KSu4KS+4KS14KWH4KS2IOCkueClgeCkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4i4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VGFza3MiIG1zZ2lkPSI3NDU0MjE1OTk1ODQ3NjU4MTAyIj4i4KS14KSw4KWN4KSk4KSu4KS+4KSo4KSu4KS+IOCksCDgpK3gpLDgpJbgpLDgpYgg4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkleCkvuCksOCljeCkr+CkueCksOClgiDgpKzgpL7gpLDgpYfgpJXgpYsg4KS44KWC4KSa4KSo4KS+IOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkv+CkpCDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkieCkquCkleCksOCko+CkruCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSt4KSP4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpKzgpL7gpLDgpYfgpK7gpL4g4KS44KWC4KSa4KSo4KS+IOCkquCkpOCljeCkpOCkviDgpLLgpJfgpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iNzExNDI1NTI4MTk0NDIxMTY4MiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkueCksOClgiDgpKTgpLDgpY3gpKsg4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSIzNjQ2NzA5NjM2MjMzODU3ODYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYIg4KSu4KS+4KSw4KWN4KSr4KSkIOCkleCkvuCksOCljeCkr+CkueCksOClgiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYIg4KSs4KS/4KSaIOCkuOClgeCksOCkleCljeCkt+CkviDgpKzgpL/gpKXgpYvgpLLgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKjgpYcg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjI1Njc3MzQyODU1NDUwNzQxMDUiPiLgpJXgpYHgpLDgpL7gpJXgpL7gpKjgpYAg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWCIOCkrOCkv+CkmiDgpIXgpKjgpY3gpKTgpLDgpY3gpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSoIOCkquClguCksOCljeCkoyDgpIXgpKjgpYHgpK7gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzRnVsbCIgbXNnaWQ9IjM3Njg0MTM2ODM5NTUwMjM2NiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkuOCkgeCkl+CkleCliyDgpJXgpYHgpLDgpL7gpJXgpL7gpKjgpYAg4KS44KSs4KWIIOCkuOCkruCljeCkreCkvuCkteCkqOCkvuCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2VycyIgbXNnaWQ9IjE2NzYxNTA5MTE2NzIyODI0MjgiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYIg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+4KSq4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzZXJzIiBtc2dpZD0iODQwOTMwNjY2NzY0NTM1NTYzOCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIngpKrgpJXgpLDgpKPgpK7gpL4sIOCkquCljeCksOCktuCljeCkqCwg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCksCDgpK7gpYfgpJ/gpL7gpIfgpLjgpLngpL/gpKQg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkrOCkqOCljeCkpyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjYyMjk0Njg2NzQ3NTM1Mjk1MDEiPiLgpJrgpLLgpL/gpLDgpLngpYfgpJXgpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkteCkv+CkteCksOCkoyDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjE1MzgyNDc0MTQ0MDcxNzU5OSI+IuCkteCksOCljeCkpOCkruCkvuCkqOCkruCkviDgpLAg4KSt4KSw4KSW4KSw4KWIIOCkmuCksuCkv+CksOCkueClh+CkleCkviDgpJXgpL7gpLDgpY3gpK/gpLngpLDgpYLgpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCkteCkv+CkuOCljeCkpOClg+CkpCDgpLjgpYLgpJrgpKjgpL4g4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSs4KS+4KSw4KWH4KSV4KWLIOCkqOCkv+CknOClgCDgpLjgpYLgpJrgpKjgpL4g4KSq4KSk4KWN4KSk4KS+IOCksuCkl+CkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9IjIwMTg1NzU1MjY5MzQ0MjI3NzkiPiLgpJrgpLLgpL/gpLDgpLngpYfgpJXgpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkquClgeCkqOCkg+CkleCljeCksOCkriDgpJfgpLDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW9yZGVyVGFza3MiIG1zZ2lkPSI3NzM0MjE3NzU0ODc3NDM5MzUxIj4i4KSV4KS+4KSu4KS54KSw4KWC4KSy4KS+4KSIIOCkheCkl+CljeCksOCkreCkvuCklyDgpLAg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/4KSu4KS+IOCkuOCkvuCksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSv4KWLIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIfgpKjgpKrgpYHgpJ8g4KSs4KS/4KSo4KS+IOCkqOCliCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW1vdmVUYXNrcyIgbXNnaWQ9IjY4MjE1MTM0MDE4NzAzNzc0MDMiPiLgpJrgpL7gpLLgpYEg4KSt4KSH4KSw4KS54KWH4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW1vdmVUYXNrcyIgbXNnaWQ9IjEzOTQ3MTQzNTIwNjI2MzU0OTMiPiLgpJXgpL7gpK7gpLngpLDgpYIg4KS54KSf4KS+4KSJ4KSoIOCksCDgpIngpKjgpYDgpLngpLDgpYLgpJXgpYsg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkteCljeCkr+CkteCkueCkvuCksOCksuCkvuCkiCDgpIXgpKzgpLDgpYvgpKcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSI3MzkxMTkxMzg0MDI3MzAzMDY1Ij4iYWN0aXZpdHkgc3RhY2tzIOCkleCliyDgpKrgpY3gpLDgpKzgpKjgpY3gpKcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWN0aXZpdHlTdGFja3MiIG1zZ2lkPSIxNjE1ODgxOTMzMDM0MDg0NDQwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSa4KSy4KWN4KSo4KWHIGFjdGl2aXR5IHN0YWNrcyDgpLLgpL7gpIgg4KSl4KSq4KWN4KSoLCDgpLngpJ/gpL7gpIngpKgg4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KS14KWN4KSv4KS14KS54KS+4KSw4KSy4KS+4KSIIOCkteCkv+CkmOCkn+CkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iMjkxODc2ODIzODA0NTIwNjQ1NiI+IuCkleClgeCkqOCliCDgpJfgpKTgpL/gpLXgpL/gpKfgpL8g4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSI5OTc4MjM2OTUzNDM1ODQwMDEiPiLgpIXgpKjgpYHgpK7gpKTgpL8g4KS44KWB4KSw4KSV4KWN4KS34KS+IOCkteCkviDgpKjgpL/gpLDgpY3gpK/gpL7gpKQg4KSF4KS14KS44KWN4KSl4KS+4KSy4KS+4KSIIOCkteCkvuCkuOCljeCkpOCkviDgpKjgpJfgpLDgpL/gpJXgpKgg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpJXgpL7gpLDgpY3gpK8g4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5NzUzODcxMTg4NjE4NDIwNjEiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSF4KSo4KWB4KSV4KWC4KSy4KSk4KS+IOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRTY3JlZW5Db21wYXRpYmlsaXR5IiBtc2dpZD0iNjkyMDQzNjE4NjkzOTE3Mzc0Ij4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CkueCksOClguCkleCliyDgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSu4KS/4KSy4KWN4KSm4KWLIOCkruCli+CkoeCksuCkvuCkiCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KS54KSw4KWC4KSV4KWLIOCkteCljeCkr+CkteCkueCkvuCksCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkn+ClgeCkn+CkvuCkieCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldERlYnVnQXBwIiBtc2dpZD0iMzAyMjEwNzE5ODY4NjU4NDA1MiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKHgpL/gpKzgpJcg4KSX4KSw4KWN4KSo4KWHIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXREZWJ1Z0FwcCIgbXNnaWQ9IjQ0NzQ1MTI0MTYyOTkwMTMyNTYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KSh4KS/4KSs4KSXIOCkl+CksOCljeCkqOClhyDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KSa4KS+4KSy4KWBIOCkl+CksOCljeCkqOClhyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSF4KSw4KWCIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLjgpK7gpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkr+CkuOCkleCliyDgpIngpKrgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQxNjIwOTIxODUxMjQyMzQ0ODAiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQzNzIyMjM4NzMxNTQyOTYwNzYiPiLgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSV4KSo4KWN4KSr4KS/4KSX4KSw4KWH4KS44KSoIOCknOCkuOCljeCkpOCliCDgpLLgpYvgpJXgpY3gpK/gpL7gpLIg4KS14KS+IOCkuOCkrOCliOCkpOCkv+CksCDgpKvgpKjgpY3gpJ8g4KSG4KSV4KS+4KSwIOCkrOCkpuCksuCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjU2ODQ1MDQwNTgxOTI5MjEwOTgiPiLgpJXgpL7gpLAg4KSu4KWL4KShIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19lbmFibGVDYXJNb2RlIiBtc2dpZD0iNDg1MzE4NzQyNTc1MTQxOTQ2NyI+IuCkleCkvuCksCDgpK7gpYvgpKHgpLLgpL7gpIgg4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSIzOTE0MDI2Njg3NDIwMTc3MjAyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19raWxsQmFja2dyb3VuZFByb2Nlc3NlcyIgbXNnaWQ9IjQ1OTMzNTMyMzU5NTk3MzMxMTkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KS54KSw4KWCIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJrgpLLgpY3gpKjgpKzgpL7gpJ8g4KSw4KWL4KSV4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VTdG9wUGFja2FnZXMiIG1zZ2lkPSIyMzI5NjI3NDI4ODMyMDY3NzAwIj4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpKbgpKzgpL7gpKzgpK7gpL4g4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZm9yY2VTdG9wUGFja2FnZXMiIG1zZ2lkPSI1MjUzMTU3Mjk2MTgzOTQwODEyIj4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZm9yY2VCYWNrIiBtc2dpZD0iNjUyOTM1MjA0MDcyNTg0NjE2Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSs4KSyIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlQmFjayIgbXNnaWQ9IjM4OTIyOTU4MzA0MTk1MTM2MjMiPiLgpIXgpJfgpY3gpLDgpK3gpL7gpJfgpK7gpL4g4KSt4KSP4KSV4KWLIOCkleClgeCkqOCliCDgpJfgpKTgpL/gpLXgpL/gpKfgpL/gpLLgpL7gpIgg4KSc4KSs4KSw4KSc4KS44KWN4KSk4KWAIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSwIOCkq+CksOCljeCkleClh+CksCDgpJzgpL7gpKjgpJXgpL4g4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIcg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CkleCkpOCkviDgpKrgpLDgpY3gpKbgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2R1bXAiIG1zZ2lkPSIxNjgxNzk5ODYyNDM4OTU0NzUyIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KWLIOCkhuCkqOCljeCkpOCksOCkv+CklSDgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2R1bXAiIG1zZ2lkPSIxNzc4Mjk5MDg4NjkyMjkwMzI5Ij4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KWLIOCkhuCkqOCljeCkpOCksOCkv+CklSDgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkieCkqOClgOCkueCksOClguCksuCkvuCkiCDgpLjgpL7gpK7gpL7gpKjgpY3gpK/gpKTgpIMg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkqOCkmuCkvuCkueCkv+CkqOClhyDgpLXgpY3gpK/gpL7gpKrgpJUg4KS14KS/4KS14KS/4KSn4KSk4KS+4KSV4KWLIOCkqOCkv+CknOClgCDgpLAg4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkuOClguCkmuCkqOCkviDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSI4MDIyNTg4NjA4OTk0NTg5OTM4Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmV0cmlldmVfd2luZG93X2NvbnRlbnQiIG1zZ2lkPSIzMTkzMjY5MDY5NDY5NzAwMjY1Ij4i4KS44KSV4KWN4KSw4KS/4KSvIOCkteCkv+CkqOCljeCkoeCli+CkleCliyDgpLXgpL/gpLfgpK/gpLXgpLjgpY3gpKTgpYHgpLLgpL7gpIgg4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkquClgeCksOCliCDgpLXgpL/gpKjgpY3gpKHgpYvgpJXgpYsg4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWBIOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWNIOCksCDgpKrgpL7gpLjgpLXgpLDgpY3gpKHgpLngpLDgpYLgpKzgpL7gpLngpYfgpJUg4KSv4KS44KSV4KS+IOCkuOCkrOCliCDgpKrgpL7gpKDgpJXgpYsg4KSc4KS+4KSB4KSaIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjIzMTI2MTIxMzUxMjczMTAyNTQiPiLgpKrgpLngpYHgpIHgpJrgpKTgpL7gpLLgpL7gpIgg4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSI4MDc5NDU2MjkzMTgyOTc1NDY0Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKrgpK7gpL4g4KSJ4KSq4KSV4KSw4KSj4KSu4KS+4KSl4KS/IOCkquCkueClgeCkgeCkmiDgpLDgpL7gpJbgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkleCliyDgpLjgpLngpK7gpKTgpL8g4KSs4KS/4KSo4KS+IOCkqOCliCDgpKrgpLngpYHgpIHgpJrgpLLgpL7gpIgg4KS44KSV4KWN4KS34KSuIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iODUzMjI5NTE5OTExMjUxOTM3OCI+IuCkteCkv+CkqOCljeCkoeCliyDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19pbmZvIiBtc2dpZD0iNDk5ODgzNjM3MDQyNDE4Njg0OSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLXgpL/gpKjgpY3gpKHgpYsg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+4KSq4KSV4KSs4KS+4KSfIOCkteCkv+CkqOCljeCkoeCli+CkueCksOClguCkleCliyDgpKzgpL7gpLDgpYfgpK7gpL4g4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkhuCkqOCljeCkpOCksOCkv+CklSDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSJ4KSq4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpKjgpL/gpK7gpL/gpKTgpY3gpKQg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCkqOCkvyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmlsdGVyX2V2ZW50cyIgbXNnaWQ9Ijg2NzU1MzU2NDg4MDc0MjczODkiPiLgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSb4KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmlsdGVyX2V2ZW50cyIgbXNnaWQ9IjgwMDYyMzYzMTU4ODgzNDc2ODAiPiLgpIfgpKjgpY3gpKrgpYHgpJ8g4KSr4KS/4KSy4KWN4KSf4KSwIOCknOClgeCkqCDgpLjgpKzgpYgg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkmOCkn+CkqOCkvuCkueCksOClgiDgpKrgpKDgpL7gpIfgpKjgpYHgpK3gpKjgpY3gpKbgpL4g4KSq4KS54KS/4KSy4KWHIOCkq+Ckv+CksuCljeCkn+CksCDgpJfgpLDgpY3gpKjgpYfgpLLgpL7gpIgg4KSm4KSw4KWN4KSk4KS+IOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpJXgpYsg4KS54KS44KWN4KSk4KSV4KWN4KS34KWH4KSqIOCkrOCkv+CkqOCkviDgpKjgpYggVUkg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjU5NzM2MjY3MzgxNzA2MTg3NzUiPiLgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSs4KSi4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFnbmlmeV9kaXNwbGF5IiBtc2dpZD0iNzEyMTIzNTY4NDUxNTAwMzc5MiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKjgpJXgpYsg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkhuCkteCksOCljeCkp+CkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkquCljeCksOCkpuCksOCljeCktuCkqCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KS44KSC4KSV4KWN4KSw4KSu4KSjIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpKjgpY0g4KSc4KS44KSy4KWHIOCkieCkquCkleCksOCko+CksuCkvuCkiCDgpIXgpKjgpYHgpKrgpK/gpYvgpJfgpYAg4KSs4KSo4KS+4KSJ4KSB4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaHV0ZG93biIgbXNnaWQ9IjcxODU3NDc4MjQwMzg5MDkwMTYiPiLgpIbgpILgpLbgpL/gpJUg4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2h1dGRvd24iIG1zZ2lkPSI3MDQ2NTAwODM4NzQ2MjkxNzc1Ij4i4KSX4KSk4KS/4KS14KS/4KSn4KS/IOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkleCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWHIOCkheCkteCkuOCljeCkpeCkvuCkruCkviDgpLDgpL7gpJbgpY3gpJvgpaQg4KSq4KWC4KSw4KWN4KSjIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYcg4KSV4KS+4KSuIOCkl+CksOCljeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iNDEzODYwODYxMDcxNzQyNTU3MyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpY3gpLXgpL/gpJrgpLngpLDgpYIg4KSc4KWL4KSX4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iODI2MjE5NTgwMjU4MjI1NTAyMSI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KS44KWN4KS14KS/4KSaIOCkl+CksOCljeCkqOCkrOCkvuCknyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYLgpLLgpL7gpIgg4KSw4KWL4KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSIyNTM3OTIyMzExNDExNTQ2MDE2Ij4i4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjgxNTM2NTE0MzQxNDUxMzI1MDUiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpJXgpYsg4KSF4KSX4KWN4KSwIOCkreCkvuCkl+CkruCkviDgpLngpL7gpLLgpJXgpYsg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCksCDgpLjgpYfgpLXgpL7gpLngpLDgpYLgpJXgpL4g4KSs4KS+4KSw4KWHIOCkqOCkv+CknOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSo4KS/4KSV4KS+4KSy4KWN4KSoIOCkrOCkvuCkueCkleCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ydW5TZXRBY3Rpdml0eVdhdGNoZXIiIG1zZ2lkPSI4OTIyMzkwOTQ4NjcxODI2NTYiPiLgpLjgpKzgpYgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOClgeCksOClgeCkteCkvuCkpCDgpJfgpLDgpY3gpKjgpYcg4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCksCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iNjAwMzYwMzE2MjU3ODU3NzQwNiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJXgpLjgpLDgpYAg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkuOClgeCksOClgeCkteCkvuCkpCDgpJfgpKTgpL/gpLngpLDgpYIg4KSu4KWL4KSo4KS/4KSf4KSwIOCkl+CksOCljeCkqCDgpLAg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSu4KS+IOCkquClguCksOCljeCkoyDgpLjgpLngpK7gpKQg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/IOCkleClh+CkteCksiDgpLXgpL/gpJXgpL7gpLjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkhuCkteCktuCljeCkr+CklSDgpJssIOCkuOCkvuCkp+CkvuCksOCkoyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleCkueCkv+CksuClhyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iMjU3NjMzMzQzNDg5MzUzMjQ3NSI+IuCkquCljeCkr+CkvuCkleClh+CknCDgpLngpJ/gpL7gpIfgpI/gpJXgpYsg4KSq4KWN4KSw4KS44KS+4KSw4KSj4KSy4KS+4KSIIOCkquCkoOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbIOCknOClgeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSq4KWN4KSv4KS+4KSV4KWH4KScIOCkueCkn+CkvuCkh+Ckj+CkleCliyDgpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCljeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpK/gpYsg4KSV4KWB4KSo4KWIIOCkheCkqOCljeCkryDgpJrgpL7gpLLgpYEg4KSF4KSo4KWB4KWN4KSq4KWN4KSw4KSv4KWL4KSXIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNTY4OTA5NTAwOTAzMDMzNjU5MyI+IlNNUy3gpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkquCkoOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFNtc1JlY2VpdmVkIiBtc2dpZD0iNDE1MjAzNzcyMDAzNDM2NTQ5MiI+IuCkpOCljeCkr+CliyDgpI/gpIngpJ/gpL4gU01TIOCkuOCkqOCljeCkpuClh+CktuCkrOCkvuCknyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSt4KSP4KSV4KWLIOCkuOClguCkmuCkqOCkvuCksuCkvuCkiCDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkhuCkieCkgeCkpuCliCDgpJfgpLDgpYfgpJXgpYsgU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClguCksuCkvuCkiCDgpJzgpL7gpLLgpLjgpL7gpJzgpYAg4KSX4KSw4KWN4KSoIOCkuOCkvuCkr+CkpiDgpJbgpLDgpL7gpKwg4KSt4KSP4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpK/gpLjgpLLgpL7gpIgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFdhcFB1c2giIG1zZ2lkPSIzMTQ1MzQ3NDEzMDI4NTgyMzcxIj4iV0FQLVBVU0gt4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkquCljeCksOCkuOCkvuCksOCkoyDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iNDc4MzQwMjUyNTAzOTQ0MjcyOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbIOCknOClgeCkqCDgpI/gpIngpJ/gpL4gV0FQIFBVU0gg4KS44KSo4KWN4KSm4KWH4KS2IOCkquCljeCksOCkvuCkquCljeCkpCDgpK3gpI/gpJXgpYsg4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSv4KWLIE1NUyDgpLjgpKjgpY3gpKbgpYfgpLYg4KSs4KS/4KSX4KS+4KSw4KWN4KSoIOCkteCkviDgpK7gpYzgpKgg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkleClgeCkqOCliCDgpKrgpKjgpL8g4KS14KWH4KSs4KSq4KWD4KS34KWN4KSg4KSV4KWLIOCkuOCkvuCkruCkl+CljeCksOClgCDgpJbgpLDgpL7gpKwg4KS14KS/4KSt4KWH4KSm4KS54KSw4KWC4KS44KSB4KSXIOCkrOCkpuCksuCljeCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iMjQ1MTg3MzY2NDM2MzY2MjY2NiI+IuCkmuCkvuCksuClgSDgpKrgpY3gpLDgpLbgpYvgpKfgpKjgpLngpLDgpYLgpJXgpYsg4KS44KSZ4KWN4KSW4KWN4KSv4KS+IOCkuOClgOCkruCkpOCkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSI3MzE4MDYxMzE0MDQwODc5NTQyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkmuCkvuCksuClgSDgpLngpYHgpKjgpYcg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KS54KSw4KWC4KSV4KWLIOCkheCkp+Ckv+CkleCkpOCkriDgpLjgpILgpJbgpY3gpK/gpL4g4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleCkueCkv+CksuClhyDgpKrgpKjgpL8g4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkquCksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9IjU1MDk1ODUwNzc5ODc5Njk2NSI+IuCkquClg+Ckt+CljeCkoOCkreClguCkruCkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpKbgpKzgpL7gpKwg4KSm4KS/4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNzQ3MTMxMDY1Mjg2ODg0MTQ5OSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJfgpKTgpL/gpLXgpL/gpKfgpL/gpLngpLDgpYIg4KS44KSn4KWI4KSBIOCkuOCkruCkvuCkquCljeCkpCDgpK3gpK/gpYsg4KSV4KS/IOCkreCkj+CkqCDgpJzgpKwg4KSV4KS/IOCknOCkpOCkvyDgpLjgpJXgpY3gpKbgpYsg4KSk4KS/4KSo4KWA4KS54KSw4KWCIOCkquClg+Ckt+CljeCkoOCkreClguCkruCkv+CkruCkviDgpJzgpL7gpKjgpY3gpJvgpKjgpY0g4KSt4KSo4KWN4KSo4KWHIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpLngpL/gpLLgpYcg4KSq4KSo4KS/IOCkhuCkteCktuCljeCkr+CklSDgpKjgpKrgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIyNzg5NjEwNjczNTE0MTAzMzY0Ij4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkpOCkpeCljeCkr+CkvuCkmeCljeCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI1ODk3MzQ2NTgyODgyOTE1MTE0Ij4i4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkpeCli+CksOCliCDgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpYAg4KSq4KWN4KSw4KSv4KWL4KSXIOCkoeClh+Ckn+CkviDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkj+CklSDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJzgpYHgpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWA4KSw4KS54KSo4KWB4KSt4KSP4KSV4KWLIOCkmyDgpKTgpY3gpK/gpLjgpY3gpJXgpYsg4KSs4KS+4KSw4KWH4KSV4KS+IOCkquClgeCksOCljeCkoyDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpLjgpL7gpK/gpKYg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjM3MTk2ODk3NjQ1MzYzNzk1NTciPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KSk4KSl4KWN4KSv4KS+4KSZ4KWN4KSV4KSy4KS+4KSIIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSI2ODYyODE3ODU3MTc4MDI1MDAyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkguCkleCksuCkv+CkpCDgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KSk4KSl4KWN4KSv4KS+4KSZ4KWN4KSV4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBcHBPcHNTdGF0cyIgbXNnaWQ9IjE1MDg3Nzk2ODc0MzY1ODU3NDQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KSC4KSa4KS+4KSy4KSo4KSV4KS+IOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCkueCksOClgiDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSI2MjQzODg3MDQxNTc3OTEyODc3Ij4i4KS44KSZ4KWN4KSV4KSy4KSoIOCkl+CksOCkv+Ckj+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KSC4KSa4KS+4KSy4KSoIOCkpOCkpeCljeCkr+CkvuCkmeCljeCksuCkvuCkiCDgpKrgpYHgpKjgpIMg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSs4KS+4KSfIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9Ijg4MjkwOTczNzM4NTE1MjE1MDUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KSC4KSa4KSy4KS+4KSoIOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCkueCksOClguCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI1MDc4NDU5NjU5NDQwMzQ4MyI+IuCkuOCkmeCljeCkleCksuCkqCDgpJfgpLDgpL/gpI/gpJXgpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCkguCkmuCkvuCksuCkqCDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpLLgpL7gpIgg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSs4KS+4KSfIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iYWNrdXAiIG1zZ2lkPSI0NzAwMTMwMjI4NjU0NTM5MjAiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSs4KWN4KSv4KSV4KSF4KSqIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KSwIOCkquClgeCkqOCkgyDgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmFja3VwIiBtc2dpZD0iNjkxMjIzMDUyNTE0MDU4OTg5MSI+IuCkquCljeCksOCko+CkvuCksuClgOCkleCliyDgpJzgpJfgpYfgpKHgpL4g4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpLAg4KSq4KWB4KSo4KSD4KSq4KWN4KSw4KS+4KSq4KWN4KSk4KS/4KSV4KWLIOCkuOCkguCkr+Cli+CknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkv+CkpCDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjU1NTcwNzEzMjU4MDQ0NjkxMDIiPiLgpKrgpYLgpLDgpY3gpKMg4KSc4KSX4KWH4KSh4KS+IOCkl+CksOCljeCkqCDgpLXgpL4g4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSo4KS/4KS24KWN4KSa4KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSIxNzQ4NzYyMTcxNjM3Njk5NTYyIj4iVUkg4KSV4KWLIOCkquClguCksOCljeCkoyDgpJzgpJfgpYfgpKHgpL4g4KSo4KS/4KS24KWN4KSa4KS/4KSo4KWN4KSk4KSk4KS+IOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpJXgpL4g4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkleClgeCkqOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpKzgpL7gpJ8g4KSq4KWN4KSw4KSv4KWL4KSXIOCkqOCkl+CksOCkv+CkqOClh+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSIyMTQ4NTYzNjI4MTQwMTkzMjMxIj4i4KSF4KSo4KSn4KS/4KSV4KWD4KSkIOCkrOCkv+CkqOCljeCkoeCli+CkueCksOClgiDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkteCkv+CkqOCljeCkoeCli+CkueCksOClgiDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJsg4KSc4KWB4KSoIOCkhuCkqOCljeCkpOCksOCkv+CklSDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuOCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkheCkreCkv+CkquCljeCksOClh+CksOCkv+CkpCDgpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSIzNTQzMzQ3OTgwODM5NTE4NjEzIj4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkruCkviDgpJrgpL/gpKTgpY3gpLAg4KSV4KWL4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSI4NTg0Njc4MzgxOTcyODIwMTE4Ij4i4KSF4KSw4KWCIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkruCkvuCkpeCkvyDgpLXgpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuOCkleCkviDgpK3gpL7gpJfgpLngpLDgpYLgpK7gpL4g4KSa4KS/4KSk4KWN4KSwIOCkleCli+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKTgpL/gpKjgpYDgpLngpLDgpYLgpLLgpYcg4KSV4KWB4KSo4KWIIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkruCkviDgpIfgpKjgpY3gpJ/gpLDgpKvgpYfgpJXgpYsg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkuOCkgeCklyDgpLngpLjgpY3gpKTgpJXgpY3gpLfgpYfgpKog4KSX4KSw4KWN4KSoIOCkteCkviDgpKTgpKrgpL7gpIjgpIEg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkruCkviDgpJXgpYcg4KSm4KWH4KSW4KS/4KSw4KS54KSo4KWBIOCkreCkj+CkleCliyDgpJsg4KSt4KSo4KWN4KSo4KWHIOCkuOCli+CkmuCljeCkqCDgpLngpYHgpKjgpY3gpJsg4KSt4KSo4KWN4KSo4KWHIOCkrOCkpuCksuCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEFuaW1hdGlvblNjYWxlIiBtc2dpZD0iMjgwNTEwMzI0MTE1MzkwNzE3NCI+IuCkl+CljeCksuCli+CkrOCksiDgpLjgpJzgpYDgpLXgpL/gpJXgpLDgpKMg4KSX4KSk4KS/IOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9Ijc2OTAwNjM0Mjg5MjQzNDM1NzEiPiLgpLXgpL/gpLbgpY3gpLXgpKzgpY3gpK/gpL7gpKrgpL8g4KS44KSc4KWA4KS14KS/4KSV4KSw4KSjKOCkpuCljeCksOClgeCkpCDgpLXgpL4g4KSi4KS/4KSy4KS+IOCkuOCknOClgOCkteCkv+CkleCksOCko+CkueCksOClgikg4KSy4KS+4KSIIOCkleClgeCkqOCliCDgpKrgpKjgpL8g4KS44KSu4KSvIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBcHBUb2tlbnMiIG1zZ2lkPSIxMjg2NTA1NzE3MDUwMTIxMzcwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkn+Cli+CkleCkqOCkueCksOClgiDgpKrgpY3gpLDgpKzgpKjgpY3gpKcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iODA0MzQzMTcxMzAxNDM5NTY3MSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIbgpKvgpY3gpKjgpL4g4KSf4KWL4KSV4KSo4KS54KSw4KWCIOCkuOCkv+CksOCljeCknOCkqOCkviDgpJfgpLDgpY3gpKgg4KSwIOCkieCkqOClgOCkueCksOClguCkleCliyDgpLjgpL7gpKfgpL7gpLDgpKMgWi3gpJXgpY3gpLDgpK7gpL7gpJngpY3gpJXgpKgg4KSs4KS+4KSH4KSq4KS+4KS4IOCkl+CksOClh+CksCDgpKrgpY3gpLDgpKzgpKjgpY3gpKcg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KS54KWB4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZnJlZXplU2NyZWVuIiBtc2dpZD0iNDcwODE4MTE4NDQ0MTg4MDE3NSI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpKvgpY3gpLDgpL/gpJwg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZnJlZXplU2NyZWVuIiBtc2dpZD0iODU1ODkyMzc4OTIyMjY3MDA2NCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpYLgpLDgpY3gpKMt4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkuOCkguCkleCljeCksOCkruCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KS44KWN4KSl4KS/4KSwIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbmplY3RFdmVudHMiIG1zZ2lkPSIxMzc4NzQ2NTg0MDIzNTg2NjAwIj4i4KSV4KWB4KSe4KWN4KSc4KWA4KS54KSw4KWCIOCksCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSs4KSf4KSo4KS54KSw4KWCIOCkpeCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4i4KSv4KS44KSV4KS+IOCkhuCkq+CljeCkqOCkviDgpIfgpKjgpKrgpYHgpJ8g4KSY4KSf4KSo4KS+4KS54KSw4KWCICjgpJXgpL8g4KSl4KS/4KSa4KS+4KSH4KS54KSw4KWCLCDgpIbgpKbgpL8pIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KS14KS/4KSk4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CkuOCksuCkvuCkiCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLjgpK7gpY3gpK4g4KSy4KWI4KSc4KS+4KSoIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5qZWN0RXZlbnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjUzMTI4MDU3NTcyMzI2MjUzIj4i4KSv4KS44KWN4KSV4KWLIOCkhuCkq+CljeCkqOCliCDgpKjgpL/gpLXgpYfgpLYg4KSY4KSf4KSo4KS+4KS54KSw4KWCICjgpJXgpL8g4KSl4KS/4KSa4KS+4KSH4KS54KSw4KWCLCDgpIbgpKbgpL8uKSDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KWL4KSv4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkquClgeCljeCksOCljeKAjeCkr+CkvuCkieCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKvgpYvgpKjgpLLgpL7gpIgg4KS54KS44KWN4KSk4KSV4KWN4KS34KWH4KSqIOCkl+CksOCljeCkqCDgpK/gpLjgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSXIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI0Njk0Mjg5MDAwNDEyNDkyMzQiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSV4KWHIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYHgpKjgpY3gpJsg4KSwIOCkleClhyDgpJXgpL7gpLDgpY3gpK/gpLngpLDgpYIg4KSy4KS/4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCksOClh+CkleCksOCljeCkoSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjgzODc3NTQ5MDE2ODg3MjgwNDMiPiLgpIXgpLDgpY3gpJXgpYsg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXKOCknOCkuOCljeCkpOCliCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCkvuCkhyngpLjgpIHgpJcg4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOClh+CkleCliyDgpKzgpYfgpLLgpL4g4KSq4KSo4KS/IOCkpOCkquCkvuCkiOCkgeCksuClhyDgpKXgpL/gpJrgpYfgpJXgpL4g4KSV4KS/4KS54KSw4KWC4KSy4KS+4KSHIOCkueClh+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KS54KWB4KSB4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kSW5wdXRNZXRob2QiIG1zZ2lkPSIzMzYwMDY0NjIwMjMwNTE1Nzc2Ij4i4KSP4KSJ4KSf4KS+IOCkqOCkv+CkteClh+CktiDgpKTgpLDgpL/gpJXgpL7gpK7gpL4g4KSs4KS+4KSB4KSn4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzI1MDQ0MDMyMjgwNzI4NjMzMSI+IuCkj+CkieCkn+CkviDgpKjgpL/gpLXgpYfgpLYg4KSk4KSw4KS/4KSV4KS+4KSV4KWLIOCkieCkmuCljeCkmiDgpLjgpY3gpKTgpLDgpJXgpYsg4KSH4KSo4KWN4KSf4KSw4KSr4KWH4KS44KSy4KS+4KSIIOCkquCkleCljeCkleCkviDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOCkruCkvuCkpOClgCDgpLDgpL7gpJbgpY3gpKjgpYfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSo4KWHIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNTM1NzczMzk0MjU1NjAzMTU5MyI+IuCkj+CkieCkn+CkviDgpKrgpLngpYHgpIHgpJog4KS44KWH4KS14KS+4KS44KSB4KSXIOCknOCli+CkoeCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjcwMzQ2MTU5Mjg2MDkzMzEzNjgiPiLgpI/gpJUg4KSq4KS54KWB4KSB4KSaIOCkuOClh+CkteCkvuCkleCliyDgpIngpJrgpY3gpJog4KS44KWN4KSk4KSw4KSV4KWLIOCkleClgeCksOCkvuCkleCkvuCkqOClgOCksuCkvuCkiCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpK7gpL7gpKTgpYAg4KSw4KS+4KSW4KWN4KSo4KWH4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI4NDYyODE1MTc5NTcyNzQ4NzYxIj4i4KSP4KSJ4KSf4KS+IOCkquCljeCksOCkv+CkqOCljeCknyDgpLjgpYfgpLXgpL7gpLjgpIHgpJcg4KSc4KWL4KSh4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFByaW50U2VydmljZSIgbXNnaWQ9Ijc5NjAwNjc2MjMyMDkxMTExMzUiPiLgpI/gpIngpJ/gpL4g4KSq4KWN4KSw4KS/4KSo4KWN4KSfIOCkuOClh+CkteCkvuCkleCliyDgpIngpJrgpY3gpJog4KS44KWN4KSk4KSw4KSV4KWLIOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuOCksuCkvuCkiCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSo4KWHIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFByaW50U3Bvb2xlclNlcnZpY2UiIG1zZ2lkPSI2ODA3NzYyNzgzNzQ0MTI1OTU0Ij4i4KSq4KWN4KSw4KS/4KSo4KWN4KSfIOCkuOCljeCkquClgeCksuCksCDgpLjgpYfgpLXgpL7gpLjgpIHgpJcg4KSs4KS+4KSn4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFByaW50U3Bvb2xlclNlcnZpY2UiIG1zZ2lkPSIzNjgwNTUyMjg1OTMzMzE4MzcyIj4i4KSq4KWN4KSw4KS/4KSo4KWN4KSfIOCkuOCljeCkquClgeCksuCksCDgpLjgpYfgpLXgpL7gpJXgpYsg4KS24KWA4KSw4KWN4KS3IOCkpOCkuSDgpIfgpKjgpY3gpJ/gpLDgpY3gpKvgpYfgpLjgpLLgpL7gpIgg4KSs4KS+4KS54KSV4KS44KSB4KSXIOCkrOCkvuCkgeCkp+CljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkquCkqOCkvyDgpIbgpLXgpL7gpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSIyNzUyNzMxMzAwNDE5NDEwNzI0Ij4iTkZDIOCkuOClh+CkteCkvuCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiJORkMg4KSV4KS+4KSw4KWN4KSh4KS54KSw4KWCIOCkh+CkruClgeCksuClh+CknyDgpJfgpLDgpY3gpKjgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkrOCkvuCkgeCkp+CljeCkqOCkleCkviDgpLLgpL7gpJfgpL8g4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCkviDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI3MzU4Mzc4NDAxOTE1Mjg3OTM4Ij4i4KSP4KSJ4KSf4KS+IOCkquCkvuCkoCDgpLjgpYfgpLXgpL7gpLjgpIHgpJcg4KS44KSC4KSX4KSg4KS/4KSkIOCkueClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiLgpI/gpIngpJ/gpL4g4KSq4KS+4KSgIOCkuOClh+CkteCkvuCkleCliyAo4KSJ4KSm4KS+4KS54KSw4KSjIOCktuCkrOCljeCkpiDgpKrgpLDgpYDgpJXgpY3gpLfgpKPgpLjgpYfgpLXgpL4pIOCkieCkmuCljeCkmiDgpLjgpY3gpKTgpLDgpJXgpYsg4KSH4KSo4KWN4KSf4KSw4KSr4KWH4KS44KSy4KS+4KSIIOCkquCkleCljeCkleCkviDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOCkruCkvuCkpOClgCDgpLDgpL7gpJbgpY3gpKjgpYfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSo4KWHIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSI0NzA4NTk2MDIxMTYxNDczMjU1Ij4iVlBOIOCkuOClh+CkteCkvuCkuOCkgeCklyDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLgpI/gpJUgVnBuIOCkuOClh+CkteCkvuCkleCliyDgpIngpJrgpY3gpJog4KS44KWN4KSk4KSw4KSV4KWLIOCkleClgeCksOCkvuCkleCkvuCkqOClgOCksuCkvuCkiCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpK7gpL7gpKTgpYAg4KSw4KS+4KSW4KWN4KSo4KWH4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i4KSP4KSJ4KSf4KS+IOCkteCkvuCksuCkquClh+CkquCksOCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IuCkteCkvuCksuCkquClh+CkquCksOCkleCliyDgpK7gpL7gpKXgpL/gpLLgpY3gpLLgpYsg4KS44KWN4KSk4KSw4KSV4KWLIOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuOCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKgg4KSn4KS+4KSw4KSV4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IuCkj+CkieCkn+CkviDgpLXgpL/gpJzgpYfgpJ8g4KS44KWH4KS14KS+4KS44KSB4KSXIOCkuOCkguCkl+CkoOCkv+CkpCDgpLngpYHgpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i4KSP4KSJ4KSf4KS+IOCkteCkv+CknOClh+CknyDgpLjgpYfgpLXgpL7gpJXgpYsg4KSJ4KSa4KWN4KSaIOCkuOCljeCkpOCksOCkleCliyDgpIfgpKjgpY3gpJ/gpLDgpKvgpYfgpLjgpLLgpL7gpIgg4KSq4KSV4KWN4KSV4KS+IOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS44KSu4KS+4KSk4KWAIOCksOCkvuCkluCljeCkqOClh+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCkquCljeCksOCkrOCkqOCljeCkp+CkuOCkgeCklyDgpIXgpKjgpY3gpKTgpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4i4KSJ4KSq4KSV4KSw4KSjIOCkquCljeCksOCktuCkvuCkuOCklSDgpLLgpL7gpIgg4KSG4KS24KSvIOCkquCkoOCkvuCkieCkqCDgpLjgpK7gpL7gpKTgpYAg4KSw4KS+4KSW4KWN4oCN4KSo4KWH4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkquCkqOClgCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4i4KSP4KSJ4KSf4KS+IOCkieCkquCkleCksOCkoyDgpLXgpY3gpK/gpLXgpLjgpY3gpKXgpL7gpKrgpJUg4KSl4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KS54KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNTAyNTYwODE2NzcwOTk0MjQ4NSI+IuCkueCli+CksuCljeCkoeCksOCksuCkvuCkiCDgpLjgpJXgpY3gpLDgpL/gpK8g4KSJ4KSq4KSV4KSw4KSjIOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkleCkueCksOClgiDgpKXgpKog4KSX4KSw4KWN4KSoIOCkteCkviDgpLngpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSq4KSo4KS/IOCkhuCkteCktuCljeCkr+CklSDgpKjgpLngpYHgpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMzNjU5NDc3MTcxNjM4NjY4NDQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSF4KSt4KS/4KSu4KWB4KSW4KS/4KSV4KSw4KSjIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLjgpK7gpK/gpK7gpL4g4KS44KWN4KSV4KWN4KSw4KS/4KSo4KSV4KWLIOCkquCksOCkv+CkleCljeCksOCkruCkoyDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWHIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iOTE3NTM3MTYxMzMyMjU2MjkzNCI+IuCkuOCkmeCljeCkleClh+CkpOCklSDgpJfgpKTgpL8g4KSs4KSm4KSy4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iNjg2NjU2MzIzNDI3NDEwNDIzMyI+IuCkleClgeCkqOCliCDgpKrgpKjgpL8g4KS44KSu4KSv4KSu4KS+IOCkruCkvuCkieCkuCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkteCkviDgpJ/gpY3gpLDgpL7gpJXgpKrgpY3gpK/gpL7gpKEg4KS44KSC4KSV4KWH4KSk4KSV4KSV4KWLIOCkl+CkpOCkvyDgpKzgpKbgpLLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkqOCkmuCkvuCkueCkv+CkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iNDc3ODczMTcwMzYwMDkwOTM0MCI+IuCkleCkv+CkrOCli+CksOCljeCkoSDgpLLgpYfgpIbgpIngpJ8g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iODQ4MDAxNjc3MTEzNDE3NTg3OSI+IuCkleCkv+CkrOCli+CksOCljeCkoSDgpLLgpYfgpIbgpIngpJ/gpLLgpL7gpIgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpLjgpL7gpK/gpKYg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+IkxpbnV4IOCkuOCkguCkleClh+CkpOCkueCksOClgiDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KSg4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ4OTY5OTIwNzkxODI2NDkxNDEiPiLgpLjgpKzgpYgg4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkueCksOClguCkruCkviDgpKrgpKDgpL7gpIfgpI/gpJXgpL4g4KS44KSC4KSV4KWH4KSk4KSy4KS+4KSIIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCknOCkueCkv+CksuClhyDgpKrgpKjgpL8g4KSa4KSy4KWN4KSo4KWHIOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODUyNTE4OTI3MjMyOTA4NjEzNyI+IuCkr+CkuOCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KSu4KWH4KSu4KWL4KSw4KWA4KSu4KS+IOCkpuClg+CkoiDgpK3gpI/gpJXgpYvgpJXgpYsg4KSF4KSC4KS2IOCkrOCkqOCkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkouCkv+CksuCliyDgpJfgpLDgpL7gpIngpIHgpKbgpYgg4KSX4KSw4KWH4KSV4KS+IOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KS44KWA4KSu4KS/4KSkIOCkruCkvuCkpOCljeCksOCkvuCkruCkviDgpK/gpLjgpLLgpYcg4KSu4KWH4KSu4KWL4KSw4KWAIOCkieCkquCksuCkrOCljeCkpyDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDM4NDc2MDA0NzUwODI3ODI3MiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK7gpYfgpK7gpYvgpLDgpYDgpK7gpL4g4KSG4KSr4KWI4KSC4KSV4KWLIOCkqOCkv+CksOCkqOCljeCkpOCksOCkleCliyDgpIXgpILgpLYg4KSs4KSo4KS+4KSJ4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkq+Cli+CkqOCksuCkvuCkiCDgpKLgpL/gpLLgpL4g4KSs4KSo4KS+4KSP4KSwIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpK7gpL4g4KSu4KWH4KSu4KWL4KSw4KWAIFNJTeCkv+CkpCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVQYWNrYWdlcyIgbXNnaWQ9IjE4NDM4NTEyOTUzNzcwNTkzOCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIOCkquCljeCkr+CkvuCkleClh+CknOCkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CkuOCksuCkvuCkiCDgpK7gpLngpKTgpY3gpKTgpY3gpLXgpKrgpYLgpLDgpY3gpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkruClh+Ckn+CkvuCkieCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjI3NDEwOTE5MTg0NTg0Mjc1NiI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSI0NjI1MzIzNjg0MTI1NDU5NDg4Ij4i4KSq4KWN4KSw4KSv4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpLngpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpJXgpY3gpK/gpL7gpLjgpLngpLDgpYIg4KSu4KWH4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjM4MTI5OTg1OTkwMDY3MzAxOTYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KWN4KSv4KS+4KS4IOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSI3NDcyOTIxNzY4MzU3OTgxOTg2Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKDgpL7gpIngpIHgpJXgpYsg4KSu4KS+4KSq4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iMzkyMTA2ODE1NDQyMDczODI5NiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK/gpLjgpJXgpYsg4KSV4KWL4KShLCDgpKHgpYfgpJ/gpL4sIOCksCDgpJXgpY3gpK/gpL7gpLgg4KSG4KSV4KS+4KSw4KS54KSw4KWCIOCkquClgeCkqOCkg+CkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iMjE5OTEyODQ4MjgyMDMwNjkyNCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLjgpL/gpKfgpYgg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLgpKjgpK/gpL7gpIEg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqCDgpLXgpL4g4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIOCkquCljeCkr+CkvuCkleClh+CknOCkueCksOClgiDgpIXgpKbgpY3gpK/gpL7gpLXgpKfgpL/gpJUg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSv4KS44KSy4KS+4KSIIOCkruCkqOCkquCksOClgCDgpLDgpYLgpKrgpK7gpL4g4KS24KSV4KWN4KSk4KS/4KS24KS+4KSy4KWAIOCkheCkqOClgeCkruCkpOCkv+CkueCksOClgiDgpK3gpI/gpJXgpL4g4KSo4KSv4KS+4KSBIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpKXgpKrgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwQ2FjaGUiIG1zZ2lkPSI3NDg3Mjc5MzkxNzIzNTI2ODE1Ij4i4KS44KSs4KWIIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpJXgpY3gpK/gpL7gpLgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzQ2NDA4NzE5NDU0MzQ1NjUiPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkleCljeCkr+CkvuCkuCDgpKHgpL7gpIfgpLDgpYfgpJXgpY3gpJ/gpLDgpYDgpLngpLDgpYLgpK7gpL4g4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkueCkn+CkvuCkj+CksCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpJXgpYsg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkluCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSJ4KSo4KWA4KS54KSw4KWC4KSy4KWHIOCkhuCkq+CljeCkqOCliyDgpKHgpYfgpJ/gpL4g4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqCDgpKrgpLDgpY3gpKjgpYcg4KS54KWB4KSo4KS+4KSy4KWHIOCkr+CkuOCksuClhyDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkuOCljeCkn+CkvuCksOCljeCknyDgpLngpYHgpKgg4KSo4KS/4KSV4KWIIOCkouCkv+CksuCliyDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpJXgpY3gpK/gpL7gpLgg4KSh4KS+4KSH4KSw4KWH4KSV4KWN4KSf4KSw4KWA4KSu4KS+IOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL7gpI/gpLAg4KSr4KWL4KSoIOCkreCko+CljeCkoeCkvuCksOCkoyDgpJbgpL7gpLLgpYAg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSs4KSi4KWAIOCkouCkv+CksuCkviDgpLjgpYHgpLDgpYEg4KSX4KSw4KS+4KSJ4KSB4KSbIOCkleCkv+CkqOCkleCkvyDgpKTgpL/gpKjgpYDgpLngpLDgpYLgpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpIPgpKrgpY3gpLDgpL7gpKrgpY3gpKTgpL8g4KSX4KSw4KWN4KSoIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3ZlUGFja2FnZSIgbXNnaWQ9IjMyODk4OTAyNzE2NDU5MjE0MTEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWCIOCkuOCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdmVQYWNrYWdlIiBtc2dpZD0iMzE5NTYyMjE3Nzc4MjQ0NTI0Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCljeCksOCli+CkpOCkueCksOClgiDgpIbgpKjgpY3gpKTgpLDgpL/gpJXgpKzgpL7gpJ8g4KSs4KS+4KS54KWN4KSvIOCkruClh+CkoeCkv+Ckr+CkvuCkruCkviDgpLAg4KS14KS/4KSq4KSw4KS/4KSk4KSu4KS+IOCksuCliOCknOCkvuCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZExvZ3MiIG1zZ2lkPSI2NjE1Nzc4NTQzMTk4OTY3NjE0Ij4i4KS44KSC4KS14KWH4KSo4KS24KWA4KSyIOCksuCklyDgpKHgpYfgpJ/gpL4g4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KS+IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpKvgpL7gpIfgpLLgpLngpLDgpYLgpKzgpL7gpJ8g4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkruCljeCkreCkvuCkteCljeCkryDgpLDgpYLgpKrgpK7gpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCksCDgpKjgpL/gpJzgpYAg4KS44KWC4KSa4KSo4KS+4KS44KS54KS/4KSkIOCkpOCkquCkvuCkiOCkgSDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLjgpIHgpJcg4KSV4KWHIOCkl+CksOCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpYsg4KSbIOCkreCkqOCljeCkqOClhyDgpKzgpL7gpLDgpYfgpJXgpYsg4KS44KS+4KSn4KS+4KSw4KSjIOCkuOClguCkmuCkqOCkviDgpKrgpKTgpY3gpKTgpL4g4KSy4KSX4KS+4KSJ4KSoIOCkr+CkuOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMDYzNDM4MTQwMjQxNTYwNDQzIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KS+IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpKvgpL7gpIfgpLLgpLngpLDgpYLgpKzgpL7gpJ8g4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkruCljeCkreCkvuCkteCljeCkryDgpLDgpYLgpKrgpK7gpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCksCDgpKjgpL/gpJzgpYAg4KS44KWC4KSa4KSo4KS+4KS44KS54KS/4KSkIOCkpOCkquCkvuCkiOCkgSDgpKvgpYvgpKjgpLjgpIHgpJcg4KSV4KWHIOCkl+CksOCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpYsg4KSbIOCkreCkqOCljeCkqOClhyDgpKzgpL7gpLDgpYfgpJXgpYsg4KS44KS+4KSn4KS+4KSw4KSjIOCkuOClguCkmuCkqOCkviDgpKrgpKTgpY3gpKTgpL4g4KSy4KSX4KS+4KSJ4KSoIOCkr+CkuOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4i4KSq4KSb4KS+4KSh4KS/IOCkrOCknOCkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KWB4KSo4KWIIOCkruCkv+CkoeCkv+Ckr+CkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSy4KWH4KSs4KWN4KSv4KS+4KSVIOCkoeCkv+CkleCli+CkoSDgpJfgpLDgpY3gpKgg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSu4KS/4KSh4KS/4KSv4KS+IOCkoeCkv+CkleCli+CkoeCksCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iMTY3ODM5MTg5Njc4Njg4MjAxNCI+IuCkteCkv+CktuCljeCkteCkuOCkqOClgOCkryDgpKrgpY3gpLDgpK7gpL7gpKPgpLngpLDgpYIg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iNDAxNTY0NDA0NzE5NjkzNzAxNCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCBDQSDgpKrgpY3gpLDgpK7gpL7gpKPgpKrgpKTgpY3gpLDgpLngpLDgpYIg4KS14KS/4KS24KWN4KS14KS44KSo4KWA4KSvIOCkquCljeCksOCkruCkvuCko+CkueCksOClguCkleCkviDgpLDgpYLgpKrgpK7gpL4g4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqCDgpLAg4KS54KSf4KS+4KSJ4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RpYWdub3N0aWMiIG1zZ2lkPSI4MDc2NzQzOTUzOTA4MDAwMzQyIj4iZGlhZyDgpJXgpYsg4KS44KWN4KS14KS+4KSu4KS/4KSk4KWN4KS14KSu4KS+IOCksOCkueClh+CkleCliyDgpLjgpILgpLjgpL7gpKfgpKjgpLngpLDgpYLgpK7gpL4g4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNL+CksuClh+CkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RpYWdub3N0aWMiIG1zZ2lkPSI2NjA4Mjk1NjkyMDAyNDUyMjgzIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIGRpYWcg4KS44KSu4KWC4KS54KSm4KWN4KS14KS+4KSw4KS+IOCkuOCljeCkteCkvuCkruCkv+CkpOCljeCktSDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLjgpY3gpLDgpYvgpKTgpLngpLDgpYLgpK7gpL4g4KSq4KSi4KWN4KSoIOCksCDgpLLgpYfgpJbgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmzsg4KSJ4KSm4KS+4KS54KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvywgL2RldiAg4KSu4KS+IOCkq+CkvuCkh+CksuCkueCksOClguClpCDgpK/gpLjgpLLgpYcg4KS44KSu4KWN4KSt4KS14KSk4KSDIOCkquCljeCksOCko+CkvuCksuClgCDgpLjgpY3gpKXgpL/gpLDgpKTgpL4g4KSwIOCkuOClgeCksOCkleCljeCkt+CkvuCkruCkviDgpKrgpY3gpLDgpK3gpL7gpLUg4KSq4KS+4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCDgpK/gpYsg4KSV4KWH4KS14KSyIOCkqOCkv+CksOCljeCkruCkvuCkpOCkviDgpLXgpL4g4KS44KSC4KSa4KS+4KSy4KSV4KSm4KWN4KS14KS+4KSw4KS+IOCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksC3gpKjgpL/gpLDgpY3gpKbgpL/gpLfgpY3gpJ/gpJXgpYsg4KSy4KS+4KSX4KS/IOCkquCljeCksOCkr+Cli+CklyDgpLngpYHgpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb21wb25lbnRTdGF0ZSIgbXNnaWQ9IjYzMzU1NzY3NzU3MTEwOTU5MzEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSF4KSC4KS24KS54KSw4KWCIOCkuOCkleCljeCkt+CkriDgpLXgpL4g4KSF4KSV4KWN4KS34KSuIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4ODg3NDM1NzQwOTgyMjM3Mjk0Ij4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpJXgpY3gpLfgpK4g4KSbIOCkteCkviDgpJvgpYjgpKgg4KSt4KSo4KWN4KSo4KWHIOCkleClgeCksOCkvuCkleCliyDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK7gpLngpKTgpY3gpKTgpY3gpLXgpKrgpYLgpLDgpY3gpKMg4KSr4KWL4KSoIOCkuOCkleCljeCkt+CkruCkpOCkviDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CkuOCkgeCkl+CliCDgpLngpYvgpLjgpL/gpK/gpL7gpLDgpYAg4KSF4KSq4KSo4KS+4KSJ4KSo4KWBIOCkquCksOCljeCkmywg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkteCkv+Ckt+CkryDgpLjgpYLgpJrgpYDgpK7gpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkqOCkueClgeCkqOClhywg4KSF4KS44KSC4KSX4KSkLCDgpIXgpLjgpY3gpKXgpL/gpLAg4KSF4KS14KS44KWN4KSl4KS+IOCkreCkj+CkleCliyDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KS54KWB4KSo4KWHIOCkuOCkruCljeCkreCkvuCkteCkqOCkviDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4MjcyMzI0ODQ0MTY1MDU2MTUiPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCkheCkguCktiDgpLjgpJXgpY3gpLfgpK4g4KSbIOCkteCkviDgpJvgpYjgpKgg4KSt4KSo4KWN4KSo4KWH4KSu4KS+IOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkruCkueCkpOCljeCkpOCljeCkteCkquClguCksOCljeCkoyDgpKvgpYvgpKgg4KS44KSV4KWN4KS34KSu4KSk4KS+IOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/4KS44KSB4KSX4KWIIOCkueCli+CkuOCkv+Ckr+CkvuCksOClgCDgpIXgpKrgpKjgpL7gpIngpKjgpYEg4KSq4KSw4KWN4KSbLCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS14KS/4KS34KSvIOCkuOClguCkmuClgOCkruCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSo4KS54KWB4KSo4KWHLCDgpIXgpLjgpILgpJfgpKQsIOCkheCkuOCljeCkpeCkv+CksCDgpIXgpLXgpLjgpY3gpKXgpL4g4KSt4KSP4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpLngpYHgpKjgpYcg4KS44KSu4KWN4KSt4KS+4KS14KSo4KS+IOCkueClgeCkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQ2MjczMTUzNTEwOTM1MDg3OTUiPiLgpIXgpKjgpYHgpK7gpKTgpL/gpLngpLDgpYIg4KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSw4KSm4KWN4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dyYW50UmV2b2tlUGVybWlzc2lvbnMiIG1zZ2lkPSI0MDg4NjQyNjU0MDg1ODUwNjYyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkr+CliyDgpLXgpL4g4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSo4KS/4KSw4KWN4KSm4KS/4KS34KWN4KSfIOCkuOCljeCkteClgOCkleClg+CkpOCkv+CkueCksOClgiDgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KWN4KSoIOCkteCkviDgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpK/gpYsg4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKrgpY3gpLDgpKbgpL7gpKgg4KSo4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KS+IOCkuOClgeCkteCkv+Ckp+CkvuCkueCksOClguCkruCkviDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iODQ2MzE4MTYyODY5NTM5NjM5MSI+IuCkteCkv+CktuClh+CktyDgpLDgpYLgpKrgpK7gpL4g4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iNDk3Mzk4Njc2MjI0MTc4MzcxMiI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpK7gpKjgpKrgpLDgpY3gpKjgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkpOClgCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpLngpLDgpYLgpLLgpL7gpIgg4KSa4KWB4KSq4KSa4KS+4KSqIOCksOClguCkquCkruCkviDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljSwg4KSk4KSq4KS+4KSI4KSB4KSs4KS+4KSfIOCkqOCkv+CknOClgCDgpKHgpYfgpJ/gpL4g4KS44KSC4KSV4KSy4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSt4KSH4KSw4KS54KWH4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpY3gpKrgpYHgpKsg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9IjIyMjYxOTUyOTA5NTUyMjQ3MzAiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNldHRpbmdzIiBtc2dpZD0iNzc3NTcyMzQ0MTU1ODkwNzE4MSI+IuCkquCljeCksOCko+CkvuCksuClgOCkleCkviDgpLjgpYfgpJ/gpL/gpJkg4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KS44KS+4KSv4KSmIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpJXgpYsg4KSV4KSo4KWN4KSr4KS/4KSX4KSw4KWH4KS44KSo4KSy4KS+4KSIIOCkleCljeCkt+CkpOCkvyDgpKrgpYHgpLDgpY3igI3gpK/gpL7gpIngpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iMjA0Njc2MjUxODc2NzE4Mjg4Ij4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkquCljeCksOCko+CkvuCksuClgCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSI4MTU5NTM1NjEzMDIwMTM3MzkxIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KWLIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLjgpYfgpJ/gpL/gpJkg4KSh4KWH4KSf4KS+IOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIyMTQ5NDI2NjY0MjI2MTUyMTg1Ij4iR29vZ2xlIOCkuOClh+CkteCkviDgpKjgpJXgpY3gpLjgpL4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlR3NlcnZpY2VzIiBtc2dpZD0iMTI4NzMwOTQzNzYzODM4MDIyOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCBHb29nbGUg4KS44KWH4KS14KS+IOCkqOCkleCljeCkuOCkvuCkueCksOClgiDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkpuCljeCkteCkvuCksOCkvuCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4i4KS44KWN4KSf4KS+4KSw4KWN4KSf4KSF4KSq4KSu4KS+IOCkmuCksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzkwMzA0NjY0MTE2ODgwNzA0Ij4i4KSG4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkquCljeCksOCko+CkvuCksuClgCDgpKzgpYHgpJ8g4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkquClguCksOCljeCkoyDgpLngpYHgpKjgpYcg4KSs4KS/4KSk4KS/4KSV4KWIIOCkhuCkq+CliOCksuCkvuCkiCDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KSu4KS+IOCkouCkv+CksuCkviDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSbIOCksCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSu4KSX4KWN4KSw4KSu4KS+IOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLjgpKfgpYjgpIEg4KSa4KS+4KSy4KWBIOCkl+CksOClh+CksCDgpKLgpL/gpLLgpL4g4KSs4KSo4KS+4KSJ4KSB4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MTM5NTA1ODkxMDI2MTc1MDQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkrOClgeCknyDgpJfgpLDgpYAg4KS44KSV4KWH4KSq4KSb4KS/IOCknOCkpOCkvyDgpLjgpJXgpY3gpKbgpYsg4KSa4KS+4KSB4KSh4KWLIOCkhuCkq+CliOCkguCkruCkviDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkq+Cli+CkqCDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KSu4KS+IOCkouCkv+CksuCkviDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSbIOCksCDgpIXgpKjgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSu4KSX4KWN4KSw4KSu4KS+IOCkq+Cli+CkqCDgpLjgpKfgpYjgpIEg4KSa4KS+4KSy4KWBIOCkl+CksOClh+CksCDgpKLgpL/gpLLgpL4g4KSs4KSo4KS+4KSJ4KSB4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTdGlja3kiIG1zZ2lkPSI3OTE5MTI2MzcyNjA2ODgxNjE0Ij4i4KS44KWN4KSf4KS/4KSV4KS/IOCkquCljeCksOCkuOCkvuCksOCkoyDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc3NDk3NjA0OTQzOTk5MTU2NTEiPiLgpJTgpKrgpJrgpL7gpLDgpL/gpJUg4KSq4KWN4KSw4KS44KS+4KSw4KSj4KSy4KS+4KSIIOCkquCkoOCkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSP4KSJ4KSf4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbLCDgpJzgpYHgpKgg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkuOCkruCkvuCkquCljeCkpCDgpK3gpI/gpKrgpJvgpL8g4KSs4KS+4KSB4KSV4KWAIOCksOCkueCkqOCljeCkm+ClpCDgpIXgpKTgpY3gpK/gpL7gpKfgpL/gpJUg4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkp+Clh+CksOCliCDgpK7gpYfgpK7gpYvgpLDgpYAg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CkleCliyDgpJXgpL7gpLDgpKPgpLLgpYcg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkouCkv+CksuCliyDgpLAg4KSF4KS44KWN4KSl4KS/4KSwIOCkrOCkqOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4i4KSU4KSq4KSa4KS+4KSw4KS/4KSVIOCkquCljeCksOCkuOCkvuCksOCko+CksuCkvuCkiCDgpKrgpKDgpL7gpIngpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkj+CklSDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSc4KWB4KSoIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpK7gpL7gpKrgpY3gpKQg4KSt4KSP4KSq4KSb4KS/IOCkrOCkvuCkgeCkleClgCDgpLDgpLngpKjgpY3gpJvgpaQg4KSF4KSk4KWN4KSv4KS+4KSn4KS/4KSVIOCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpKfgpYfgpLDgpYgg4KSu4KWH4KSu4KWL4KSw4KWAIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpJXgpYsg4KSV4KS+4KSw4KSj4KSy4KWHIOCkq+Cli+CkqOCksuCkvuCkiCDgpKLgpL/gpLLgpYsg4KSwIOCkheCkuOCljeCkpeCkv+CksCDgpKzgpKjgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ29udGFjdHMiIG1zZ2lkPSI4MzQ4NDgxMTMxODk5ODg2MTMxIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkuOCkruCljeCkquCksOCljeCkleCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUyOTQ4NjY4NTY5NDExNDk2MzkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSo4KS/4KSw4KWN4KSm4KS/4KS34KWN4KSfIOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpOCkuOCkgeCklyDgpIXgpKjgpY3gpK8g4KSk4KSw4KS/4KSV4KS+4KS54KSw4KWC4KSs4KS+4KSfIOCkleCksiDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KS+LCDgpIfgpK7gpYfgpLIg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCkviDgpLXgpL4g4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqOClgeCkreCkj+CkleCkviDgpIbgpLXgpYPgpKTgpL/gpLjgpLngpL/gpKTgpJXgpYsg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSX4KSw4KS/4KSP4KSV4KS+IOCkuOCkruCljeCkquCksOCljeCkleCkueCksOClguCkleCliyDgpKHgpYfgpJ/gpL4g4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpKzgpJrgpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCksCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSs4KS/4KSo4KS+IOCkuOCkruCljeCkquCksOCljeCklSDgpKHgpYfgpJ/gpL4g4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDQwNjU0MTUyNDU3MzAwNjYyIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkteCkv+CktuClh+CktyDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpLngpLDgpYLgpLjgpIHgpJcg4KSF4KSw4KWN4KSV4KWLIOCkpOCksOCkv+CkleCkvuCkrOCkvuCknyDgpJXgpLIg4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KS+LCDgpIfgpK7gpYfgpLIg4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KS+IOCkteCkviDgpLjgpILgpJrgpL7gpLAg4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KS+IOCkhuCkteClg+CkpOCkv+CkuOCkueCkv+CkpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KWL4KSo4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpI/gpJXgpL4g4KSh4KWH4KSf4KS+4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL/gpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+IOCkrOCkmuCkpCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCksCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSc4KWN4KSe4KS+4KSoIOCkrOCkv+CkqOCkviDgpKjgpYgg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpLjgpL7gpK/gpKYg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDb250YWN0cyIgbXNnaWQ9IjUxMDc0OTIwODY0MTY3OTM1NDQiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWCIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTcyNDM5MzI1MjE5NTM2MDIiPiLgpIXgpKjgpY3gpK8g4KSk4KSw4KS/4KSV4KS+4KSV4KS+IOCkhuCkteClg+CkpOCkv+CkueCksOClguCkuOCkgeCklyDgpJzgpYHgpKgg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkleCksiwg4KSH4KSu4KWH4KSyLCDgpLXgpL4g4KS14KS/4KS24KWH4KS3IOCkuOCkruCljeCkquCksOCljeCklSDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpL7gpLjgpLngpL/gpKQg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSt4KSP4KSV4KS+IOCkuOCkruCljeCkquCksOCljeCkleCkueCksOClguCkleCliyDgpKzgpL7gpLDgpYfgpJXgpYsg4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuCDgpIXgpKjgpYHgpK7gpKTgpL/gpLLgpYcg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkvuCksuCkvuCkiCDgpK7gpYfgpJ/gpL7gpIngpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTg5ODY5MjI0NjI1MTYzNTU4Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkrOCkvuCksOCkruCljeCkrOCkvuCksCDgpJXgpLIg4KSX4KSw4KWH4KSV4KS+LCDgpIfgpK7gpYfgpLIg4KSX4KSw4KWH4KSV4KS+LCDgpLXgpL4g4KS14KS/4KS24KWH4KS3IOCkuOCkruCljeCkquCksOCljeCkleCkueCksOClguCkuOCkgeCklyDgpLjgpJ7gpY3gpJrgpL7gpLAg4KSX4KSw4KWH4KSV4KS+IOCkuOCkueCkv+CkpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KWL4KSo4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpJfgpLDgpYfgpJXgpL4g4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkuOCkruCljeCkquCksOCljeCkleCkueCksOClgiDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL/gpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkruCljeCkquCksOCljeCklSDgpKHgpYfgpJ/gpL4g4KSu4KWH4KSf4KS+4KSJ4KSoIOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGxMb2ciIG1zZ2lkPSIzNDc4MTMzMTg0NjI0MTAyNzM5Ij4i4KSV4KSyIOCksuCklyDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzcwMDY0NTE4NDg3MDc2MDI4NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSV4KWLIOCkleCksiDgpLLgpJcsIOCkhuCkl+CkruCkqCDgpLAg4KSs4KS54KS/4KSw4KWN4KSX4KSu4KSoIOCkleCksuCkueCksOClgiDgpKzgpL7gpLDgpYcg4KSh4KWH4KSf4KS+IOCkuOCkueCkv+CkpOCkleCliyDgpJXgpLIg4KSy4KSXIOCkquCkouCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuCDgpIXgpKjgpYHgpK7gpKTgpL/gpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJXgpLIg4KSy4KSXIOCkoeClh+Ckn+CkvuCkueCksOClguCkleCliyDgpKzgpJrgpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCksCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSs4KS/4KSo4KS+IOCkqOCliCDgpK/gpYsg4KSV4KSyIOCksuCklyDgpKHgpYfgpJ/gpL7gpLLgpL7gpIgg4KSF4KSw4KWC4KS44KSB4KSXIOCkuOCkvuCkneClh+CkpuCkvuCksCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc3NzI1Nzk2ODEzMjE3MjQ0Ij4i4KSt4KS/4KSk4KWN4KSwIOCkhuCkieCkqOClhyDgpLAg4KSs4KS+4KS54KS/4KSwIOCknOCkvuCkqOClhyDgpJXgpLLgpLngpLDgpYLgpLjgpLngpL/gpKQg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkq+CkqOCkleCliyDgpJXgpLIg4KSy4KSXIOCkquCkouCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCAg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkleCksiDgpLLgpJcg4KSh4KWH4KSf4KS+IOCkrOCkmuCkpCDgpJfgpLDgpY3gpKgg4KSm4KS/4KSo4KWN4KSbIOCksCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpKXgpL7gpLngpYgg4KSo4KSq4KS+4KSIIOCkleCksiDgpLLgpJcg4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGxMb2ciIG1zZ2lkPSI4NTUyMDQ1NjY0NzQzNDk5MzU0Ij4i4KSV4KSyIOCksuCklyDgpLLgpYfgpJbgpY3igI3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NjE4MDYwNjIyNzQxMTkyNDUiPiLgpIbgpJfgpK7gpKgg4KSk4KSl4KS+IOCkrOCkueCksOCljeCkl+CkruCkqCDgpKHgpYfgpJ/gpL7gpLjgpLngpL/gpKQg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkleCliyDgpJXgpLIg4KSy4KSX4KSV4KWLIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpK/gpLjgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCksiDgpLLgpJcg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpLXgpL4g4KSu4KWH4KSf4KS+4KSJ4KSoIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkguCkleCliyDgpKvgpYvgpKjgpJXgpYsg4KSG4KSJ4KSo4KWHIOCksCDgpKzgpL7gpLngpL/gpLAg4KSc4KS+4KSo4KWHIOCkleCksuCkueCksOClguCkleCliyDgpKzgpL7gpLDgpYfgpJXgpYsg4KSh4KWH4KSf4KS+IOCkuOCkueCkv+CkpCDgpJXgpLIg4KSy4KSXIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CkuOCksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSV4KSyIOCksuCklyDgpK7gpYfgpJ/gpL7gpIngpKgg4KS14KS+IOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQcm9maWxlIiBtc2dpZD0iNDcwMTg4OTg1MjYxMjcxNjY3OCI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkleCkvuCksOCljeCkoSDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NjI0NzUxNTE4NDk4ODg4NDgiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkieCkquCkleCksOCko+CkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSX4KSw4KS/4KSP4KSV4KS+IOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCDgpKrgpY3gpLDgpYvgpKvgpL7gpIfgpLIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCkouCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbLCDgpJzgpLjgpY3gpKTgpYgg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkqOCkvuCkriDgpLAg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCknOCkvuCkqOCkleCkvuCksOClgOClpCDgpK/gpLjgpJXgpYsg4KSu4KSk4KSy4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpKTgpKrgpL7gpIjgpILgpLLgpL7gpIgg4KSq4KS54KS/4KSa4KS+4KSoIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJsg4KSwIOCkpOCkquCkvuCkiOCkguCkleCliyDgpKrgpY3gpLDgpYvgpKvgpL7gpIfgpLIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkheCksOClguCksuCkvuCkiCDgpKrgpKDgpL7gpIngpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSG4KSr4KWN4KSo4KWIIOCkuOCkruCljeCkquCksOCljeCklSDgpJXgpL7gpLDgpY3gpKEg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU1NTIwODQyOTQ1OTg0NjU4OTkiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkreCko+CljeCkoeCkvuCksCDgpK3gpI/gpJXgpYsg4KS14KWN4KSv4KS+4KSV4KWN4KSk4KS/4KSX4KSkIOCkquCljeCksOCli+Ckq+CkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAsIOCknOCkuOCljeCkpOCliCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSo4KS+4KSuIOCkteCkviDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSc4KS+4KSo4KSV4KS+4KSw4KWA4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KS14KS+IOCkpeCkquCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSV4KWLIOCkruCkpOCksuCkrCDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpJrgpL/gpKjgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWNIOCksCDgpLjgpL7gpK/gpKYg4KSF4KSo4KWN4KSv4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKrgpY3gpLDgpYvgpKvgpL7gpIfgpLIg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCkoOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMjY4OTIwOTU2MTUyNDE5MTcwIj4i4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkuOCkvuCkruCkvuCknOCkv+CklSDgpLjgpY3gpJ/gpY3gpLDgpL/gpK4g4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQyNTU3MDYwMjcxNzIwNTA4NzIiPiLgpKTgpKrgpL7gpIjgpIEg4KSwIOCkpOCkquCkvuCkiOCkgeCkleCkviDgpLjgpL7gpKXgpYDgpLngpLDgpYLgpKzgpL7gpJ8g4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkheCkquCkoeClh+Ckn+CksuCkvuCkiCDgpKrgpLngpYHgpIHgpJog4KSwIOCkuOCkv+CkguCklSDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCknOCkvuCkqOCkleCkvuCksOClgCDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSm4KS+IOCkuOCkvuCkteCkp+CkvuCkqCDgpLDgpLngpKjgpYHgpLngpYvgpLjgpY0gIC0tIOCkuOCkruCkvuCknOCkv+CklSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpLngpLDgpYLgpK7gpL4g4KSk4KSq4KS+4KSI4KSBIOCksCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KS+4KSl4KWA4KSV4KWLICDgpKzgpL/gpJrgpK7gpL4g4KSt4KSP4KSV4KS+IOCkuOCkguCkmuCkvuCksOCksuCkvuCkiCDgpKrgpKLgpY3gpKgg4KS14KS/4KS24KWN4KS14KS+4KS44KSo4KWA4KSv4KSk4KS+IOCkrOClh+Ckl+CksOCliCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSo4KWL4KSfOiDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/IOCkrOCksuCkquClguCksOCljeCkteCklSDgpLjgpKzgpYgg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkqOClh+Ckn+CkteCksOCljeCkleCkueCksOClguCkruCkviDgpLjgpL7gpK/gpKYg4KSo4KSX4KSw4KWN4KSoIOCkuOCkleCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNTA0MTc5MjIyNDkzMjM1NjQ1Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCkvuCkruCkvuCknOCkv+CklSDgpKrgpY3gpLDgpLXgpL7gpLngpK7gpL4g4KSy4KWH4KSW4KWN4oCN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMDg2NTU3NTUyMjA0MTE0ODQ5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkguCkleCliyDgpLjgpL7gpKXgpYDgpLngpLDgpYLgpKzgpL7gpJ8g4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkheCkquCkoeClh+Ckn+CkueCksOClgiDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKjgpYcg4KSs4KWH4KSy4KS+4KSu4KS+IOCkueCli+CktuCkv+Ckr+CkvuCksCDgpLDgpLngpKjgpYHgpLngpYvgpLjgpY0gLS0g4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSo4KS/4KSw4KWN4KSu4KS+4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbIOCknOClgeCkqCDgpLjgpL7gpKXgpYDgpKzgpL7gpJ8g4KSG4KSP4KSV4KWLIOCkpuClh+CkluCkv+CkqOCljeCkm+ClpCDgpJ/gpL/gpKrgpY3gpKrgpKPgpYA6IOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL8g4KS44KSs4KWIIOCkuOCkvuCkruCkvuCknOCkv+CklSDgpLjgpJ7gpY3gpJzgpL7gpLLgpLngpLDgpYLgpK7gpL4g4KSy4KS+4KSX4KWCIOCkqOCkueClgeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDYWxlbmRhciIgbXNnaWQ9IjU5NzI3Mjc1NjAyNTc2MTIzOTgiPiLgpJfgpYvgpKrgpY3gpK8g4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCksCDgpKrgpL7gpKTgpY3gpLDgpYsg4KSY4KSf4KSo4KS+4KS54KSw4KWCIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDIxNjQ2MjA0OTA1NzY1ODcyMyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpJfgpLDgpL/gpI/gpJXgpL4g4KSk4KWAIOCkuOCkvuCkpeClgOCkueCksOClgiDgpLXgpL4g4KS44KS54KSv4KWL4KSX4KWA4KS54KSw4KWCIOCkuOCkueCkv+CkpOCkleCliyDgpKrgpL7gpKTgpY3gpLDgpL7gpJXgpL4g4KSV4KS+4KSw4KWN4KSv4KSV4KWN4KSw4KSu4KS54KSw4KWCIOCkquCkouCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpJfgpYvgpKrgpKjgpYDgpK/gpKTgpL4g4KS14KS+IOCkuOCkguCkteClh+CkpuCkqOCktuClgOCksuCkpOCkviDgpKzgpL/gpKjgpL4g4KSq4KSo4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSq4KS+4KSk4KWN4KSw4KS+4KSV4KS+IOCkoeClh+Ckn+CkviDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSoIOCkteCkviDgpKzgpJrgpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NDM0NTQ4NjgyNDcwODUxNTgzIj4i4KSk4KWAIOCkuOCkvuCkpeClgOCkueCksOClgiDgpLXgpL4g4KS44KS54KSV4KSw4KWN4KSu4KWA4KS54KSw4KWC4KS44KS54KS/4KSkIOCkuOCkrOCliCDgpKrgpL7gpKTgpY3gpLDgpYsg4KSY4KSf4KSo4KS+4KS54KSw4KWCIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkreCkj+CkleCkvuCksuCkvuCkiCDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKrgpL7gpKTgpY3gpLDgpYsg4KSh4KWH4KSf4KS+IOCkr+CkuOCksuClhyDgpLjgpL7gpK/gpKYg4KS44KWH4KSv4KSwIOCkl+CksOCljeCkqCDgpLXgpL4g4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS14KS/4KS24KWN4KS14KS+4KS44KSo4KS/4KSv4KSk4KS+IOCkteCkviDgpLjgpK7gpY3gpLXgpYfgpKbgpKjgpLbgpYDgpLLgpKTgpL4g4KSs4KS/4KSo4KS+IOCkqOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDYWxlbmRhciIgbXNnaWQ9Ijg0Mzg4NzQ3NTUxOTM4MjU2NDciPiLgpKrgpL7gpKTgpY3gpLDgpYsg4KSY4KSf4KSo4KS+4KS54KSw4KWCIOCkpeCkquCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSu4KS+4KSy4KS/4KSV4KSV4KWLIOCknOCljeCknuCkvuCkqCDgpKzgpL/gpKjgpL4g4KSo4KWIIOCkquCkvuCkueClgeCkqOCkvuCkueCksOClguCksuCkvuCkiCDgpIfgpK7gpYfgpLIg4KSq4KSg4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+IuCkpOClgCDgpLjgpL7gpKXgpYDgpLngpLDgpYIg4KS14KS+IOCkuOCkueCkleCksOCljeCkruClgOCkueCksOClguCkuOCkueCkv+CkpOCkleCkviDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSc4KS44KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpIbgpKvgpY3gpKjgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCknOClgeCkqCDgpKrgpL7gpKTgpY3gpLDgpL7gpJXgpYsg4KSu4KS+4KSy4KS/4KSV4KS54KSw4KWC4KSs4KS+4KSfIOCkhuCkj+CkleCkviDgpKbgpYfgpJbgpL/gpKjgpYfgpLLgpL7gpIgg4KSq4KSg4KS+4KSJ4KSo4KWHIOCkteCkviDgpK7gpL7gpLLgpL/gpJXgpLngpLDgpYLgpJXgpYsg4KSc4KWN4KSe4KS+4KSoIOCkrOClh+Ckl+CksCDgpJjgpJ/gpKjgpL7gpLLgpL7gpIgg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClhyDgpIXgpKjgpYHgpK7gpL/gpKQg4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIzMjQ0Njk0OTYzMjcyNDkzNzYiPiLgpKTgpYAg4KS44KS+4KSl4KWA4KS54KSw4KWCIOCkteCkviDgpLjgpLngpJXgpLDgpY3gpK7gpYDgpLngpLDgpYLgpLjgpLngpL/gpKQg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkq+Cli+CkqOCkleCkviDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSc4KS44KSy4KS+4KSIIOCkpeCkquCljeCkqCwg4KS54KSf4KS+4KSJ4KSoIOCksCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoICDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKrgpL7gpKTgpY3gpLDgpYsg4KSu4KS+4KSy4KS/4KSV4KSs4KS+4KSfIOCkpuClh+CkluCkviDgpKrgpLDgpYfgpJXgpL4g4KS14KS+IOCkruCkvuCksuCkv+CkleCkleCliyDgpJzgpY3gpJ7gpL7gpKgg4KSs4KS/4KSo4KS+IOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpK3gpI/gpJXgpL4g4KSY4KSf4KSo4KS+4KS54KSw4KWCIOCkuOCkqOCljeCkpuClh+CktiDgpKrgpKDgpL7gpIngpKgg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iODY4ODMzNDk3NDAzNjgyMzMzMCI+IuCkquCksOClgOCkleCljeCkt+Cko+CkleCliyDgpLLgpL7gpJfgpL8g4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCkueCksOClgiDgpK7gpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IuCkquCksOClgOCkleCljeCkt+Cko+CkleCliyDgpLLgpL7gpJfgpL8g4KSu4KSVIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpLngpLDgpYIg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSo4KSv4KS+4KSBIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpK/gpJUg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCljeCkpeCkvuCkqOCkruCkviDgpJPgpK3gpLDgpLDgpL7gpIfgpKEg4KSX4KSw4KWN4KSm4KSbIOCksC/gpLXgpL4g4KS44KWN4KSl4KS/4KSk4KS/IOCkheCkqOCljeCkryDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWCIOCknOCkuOCljeCkpOCliCBHUFMg4KS14KS+IOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpK/gpJXgpKzgpL7gpJ8g4KSr4KSw4KWN4KSV4KS+4KSH4KSP4KSV4KS+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSIyODM2MzA4MDc2NzIwNTUzODM3Ij4i4KSF4KSn4KS/4KSVIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpK/gpJUg4KSG4KSm4KWH4KS24KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSI1OTQ1MTY2NjQyMzM1ODAwNzYzIj4i4KSl4KSqIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpK/gpJUg4KSV4KSu4KS+4KSj4KWN4KSh4KS54KSw4KWCIOCkuOCkruCljeCkriDgpKrgpLngpYHgpIHgpJog4KSq4KWB4KSw4KWN4oCN4KSv4KS+4KSJ4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KS+4KSv4KSmIOCknOClgOCkquClgOCkj+CkuOCkleCliyDgpLXgpL4g4KSF4KSo4KWN4KSvIOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpLXgpL7gpLngpLDgpYLgpJXgpYsg4KSV4KS+4KSw4KWN4KSvIOCkuOCkgeCklyDgpLngpLjgpY3gpKTgpJXgpY3gpLfgpYfgpKog4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpK/gpLjgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI2NTc4MTAxMTk5ODI1MTkzODczIj4i4KSP4KSJ4KSf4KS+IOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpKTgpL4g4KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjkwNjYxNDYxMjA0NzA1OTE1MDkiPiLgpKrgpLDgpYDgpJXgpY3gpLfgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkruCklSDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWCIOCkuOCkv+CksOCljeCknOCkqOCkviDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkqOCkr+CkvuCkgSDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSv4KSVIOCkuOCljeCkpeCkvuCkquCkqOCkviDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpY3gpKXgpL7gpKjgpK7gpL4g4KST4KSt4KSw4KSw4KS+4KSH4KShIOCkl+CksOCljeCkpuCkmyDgpLAv4KS14KS+IOCkuOCljeCkpeCkv+CkpOCkvyDgpIXgpKjgpY3gpK8g4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCkueCksOClgiDgpJzgpLjgpY3gpKTgpYggR1BTIOCkteCkviDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSm4KS+4KSv4KSV4KSs4KS+4KSfIOCkq+CksOCljeCkleCkvuCkh+Ckj+CkleCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iMTE5MTg5ODA2MTk2NTI3MzM3MiI+IuCkuOCkn+Ckv+CklSDgpLjgpY3gpKXgpL7gpKggKEdQUyDgpLAg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkhuCkp+CkvuCksOCkv+CkpCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkteCkv+CktuCljeCkteCkteCljeCkr+CkvuCkquClgCDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIChHUFMpIOCkteCkviDgpLjgpYfgpLIg4KSf4KS+4KS14KSw4KS54KSw4KWCIOCksCDgpLXgpL7gpIct4KSr4KS+4KSHIOCknOCkuOCljeCkpOCkviDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLjgpLngpYAg4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpYAg4KS44KWN4KSl4KS+4KSoIOCkuOClh+CkteCkvuCkueCksOClgiDgpJbgpYvgpLLgpY3gpKjgpYEg4KSq4KSw4KWN4KSbIOCksCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpL4g4KSy4KS+4KSX4KS/IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkieCkquCkleCksOCko+CkruCkviDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWB4KSo4KWBIOCkquCksOCljeCkm+ClpCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSBIOCkleCkueCkvuCkgSDgpLngpYHgpKjgpYEg4KS54KWB4KSo4KWN4KSbIOCkreCkqOCljeCkqOClhyDgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpKMg4KSX4KSw4KWN4KSoIOCkr+CkuOCksuCkvuCkiCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkmyDgpLAg4KSv4KS44KSy4KWHIOCkheCkpOCkv+CksOCkv+CkleCljeCkpCDgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KSJ4KSw4KWN4KSc4KS+IOCkluCkpOCkqiDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9IjQ4ODc4OTUzNjIzNTQyMzk2MjgiPiLgpIXgpKjgpYHgpK7gpL7gpKjgpL/gpKQg4KS44KWN4KSl4KS+4KSoICjgpKjgpYfgpJ/gpLXgpLDgpY3gpJUt4KSG4KSn4KS+4KSw4KS/4KSkKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSF4KSo4KWB4KSu4KS+4KSo4KS/4KSkIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpLIg4KSf4KS+4KS14KSwIOCksCDgpLXgpL7gpIct4KSr4KS+4KSH4KSc4KS44KWN4KSk4KS+IOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCli+CklyDgpJfgpLDgpYAg4KS44KWN4KSl4KS+4KSoIOCkuOClh+CkteCkvuCkueCksOClguCkrOCkvuCknyDgpIngpKTgpY3gpKrgpKjgpY3gpKgg4KSX4KSw4KS/4KSP4KSV4KWLIOCkueCli+ClpCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSv4KWAIOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpLXgpL7gpLngpLDgpYLgpJXgpYsg4KSJ4KSq4KSv4KWL4KSXIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSv4KWAIOCkuOClh+CkteCkvuCkueCksOClgiDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkmuCkvuCksuClgSDgpLAg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkueClgeCkqOClgSDgpIbgpLXgpLbgpY3gpK/gpJUg4KSb4KWkIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIXgpKjgpYHgpK7gpL7gpKjgpL/gpKQg4KSw4KWC4KSq4KSu4KS+IOCkpOCkquCkvuCkiOCkgSDgpJXgpLngpL7gpIEg4KS54KWB4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkreCkqOCljeCkqOClhyDgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpKMg4KSX4KSw4KWN4KSoIOCkr+CkuOCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIyMzYzOTY5NjQxNzkyMzg4OTQ3Ij4iU3VyZmFjZUZsaW5nZXIg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlN1cmZhY2VGbGluZ2VyIOCkleCkri3gpLjgpY3gpKTgpLAg4KS44KWB4KS14KS/4KSn4KS+4KS54KSw4KWCIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLgpKvgpY3gpLDgpYfgpK4g4KSs4KSr4KSwIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSr4KWN4KSw4KWH4KSuIOCkrOCkq+CksOCkleCliyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJJbnB1dEZsaW5nZXIg4KSV4KWLIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iSW5wdXRGbGluZ2VyIOCkleCliyDgpJXgpK4t4KS44KWN4KSk4KSwIOCkuOClgeCkteCkv+Ckp+CkvuCkueCksOClgiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSo4KS54KSw4KWC4KSy4KS+4KSIIOCkteCkv+CkqOCljeCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KSo4KWN4KSr4KS/4KSX4KSwIOCkl+CksOCljeCkqCDgpLAg4KS14KS+4KSH4KSr4KS+4KSHIOCkquCljeCksOCkpuCksOCljeCktuCkqOCkueCksOClguCkuOCkgeCklyDgpJzgpYvgpKHgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i4KS14KS+4KSH4KSr4KS+4KSHIOCkquCljeCksOCkpuCksOCljeCktuCkqOCkueCksOClgiDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+IuCkteCkvuCkh+Ckq+CkvuCkhyDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKjgpYDgpJXgpL4g4KSk4KSy4KWN4KSy4KWLIOCkpOCkuSDgpLXgpL/gpLfgpYfgpLbgpKTgpL7gpLngpLDgpYIg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjg1NzEzNDQ5ODQwMjM0NjcwOCI+IuCkheCkoeCkv+Ckr+CliyDgpIbgpIngpJ/gpKrgpYHgpJ8g4KSV4KWI4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjYyMTA1OTc3NTQyMTIyMDg4NTMiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYjgpKYg4KSX4KSw4KWN4KSoIOCksCDgpLDgpL/gpKHgpL7gpIfgpLDgpYfgpJXgpY3gpJ8g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjIyNDY4Mjg3NzM1ODkwOTQwMjMiPiLgpK3gpL/gpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliOCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIzNTk0ODE2NTgwMzQxNDk4NjAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSt4KS/4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYjgpKYg4KSX4KSw4KWN4KSoIOCksCDgpLDgpL/gpKHgpL7gpIfgpLDgpYfgpJXgpY3gpJ8g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCIgbXNnaWQ9Ijc4MTUzOTg5NjkzMDMzODIwMTYiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSt4KS/4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYjgpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMjc3OTc5MzA2NDcwOTM1MDI4OSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSt4KS/4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYjgpKYg4KSX4KSw4KWN4KSoIOCksCDgpLDgpL/gpKHgpL7gpIfgpLDgpYfgpJXgpY3gpJ8g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI2MDk1ODU5OTM3MDY5MTQ2MDg2Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkheCkoeCkv+Ckr+CliyDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkl+CljeCksuCli+CkrOCksiDgpIXgpKHgpL/gpK/gpYsg4KS44KWH4KSf4KS/4KSZ4KWN4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSc4KS44KWN4KSk4KWIIOCkhuCkteCkvuCknOCkleCliyDgpK7gpL7gpKTgpY3gpLDgpL4g4KSwIOCkhuCkieCkn+CkquClgeCkn+CkleCliyDgpLLgpL7gpJfgpL8g4KSV4KWB4KSoIOCkuOCljeCkquCkv+CkleCksCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWH4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLgpIXgpKHgpL/gpK/gpYsg4KSw4KWH4KSV4KSw4KWN4KShIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK7gpL7gpIfgpJXgpY3gpLDgpYvgpKvgpYvgpKjgpJXgpYsg4KS44KS+4KSlIOCkheCkoeCkv+Ckr+CliyDgpLDgpYfgpJXgpLDgpY3gpKEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS4IOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSq4KWB4KS34KWN4KSf4KS/4KSV4KSw4KSjIOCkrOCkv+CkqOCkviDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkuOCkruCkr+CkruCkviDgpIXgpKHgpL/gpK/gpYsg4KSw4KWH4KSV4KSw4KWN4KShIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmEiIG1zZ2lkPSIzNjE2MzkxOTE5NTU5NzUxMTkyIj4i4KSk4KS44KWN4KSs4KS/4KSw4KS54KSw4KWCIOCksCDgpK3gpL/gpKHgpL/gpK/gpYvgpLngpLDgpYIg4KSy4KS/4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL7gpLjgpIHgpJcg4KSk4KS44KWN4KSs4KS/4KSwIOCksCDgpK3gpL/gpKHgpL/gpK/gpYvgpLngpLDgpYIg4KSy4KS/4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS4IOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkquClgeCkt+CljeCkn+Ckv+CkleCksOCkoyDgpKzgpL/gpKjgpL4g4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLjgpK7gpK/gpK7gpL4g4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KWN4KS14KWA4KSV4KWD4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iMjY1MTA3MjYzMDUwMTEyNjIyMiI+IuCkleCljeCkr+CkvuCkruClh+CksOCkviDgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KS54KWB4KSB4KSm4KS+IOCkuOClguCkmuCklSBMRUQg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkheCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4i4KSq4KWC4KSw4KWN4KS1LeCkuOCljeCkpeCkvuCkquCkv+CkpCDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCljeCkr+CkvuCkruClh+CksOCkviDgpIngpKrgpK/gpYvgpJcg4KS44KWC4KSa4KSVIExFRCDgpIXgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyOTYxMjkyMjA1NzY0NDg4MzA0Ij4i4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSF4KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MzM3ODE3MDkzMzI2MzcwNTM3Ij4i4KSr4KWL4KSo4KSy4KS+4KSIIOCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKrgpK7gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqOCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzM0ODE4ODA4MDAxNjk5NTMwIj4i4KSq4KWB4KSw4KWIIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkqOCkv+CkleCliCDgpJbgpKTgpLDgpKjgpL7gpJUg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzg4OTAzMjk3NjI3MjgzMDk5Ij4i4KS44KSu4KWN4KSq4KWC4KSw4KWN4KSjIOCkq+Cli+CkqOCksuCkvuCkiCDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkp+Clh+CksOCliCDgpJbgpKTgpLDgpKjgpL7gpJUg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM0MzY2MzQ5NzI1NjE3OTUwMDIiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSq4KWB4KSo4KSD4KSs4KWB4KSfIOCkl+CksOCljeCkqCDgpJzgpYvgpKEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODk4NTYwODcyNDYyNjM4MjQyIj4i4KSr4KWL4KSoIOCkquClgeCkqOCkg+CkrOClgeCknyDgpJfgpLDgpY3gpKjgpYEg4KSc4KWL4KShIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODE3MjA1NjE4MDA2MzcwMDc0MSI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpKzgpLLgpKrgpYLgpLDgpY3gpLXgpJUg4KSq4KWB4KSo4KSD4KSs4KWB4KSfIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MzI2MDA4MTI0Mjg5OTg5OTY5Ij4i4KSr4KWL4KSo4KSy4KS+4KSIIOCkrOCksuCkquClgeCksOCljeCkteCklSDgpKrgpYHgpKjgpIPgpKzgpYHgpJ8g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyOTI3MzYxNTM3OTQyNTkxODQxIj4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKvgpL7gpIfgpLIg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDAyMzA1MDQ5ODkwOTUzODEwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkq+CkvuCkh+CksiDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIG1zZ2lkPSIxODI5MjkwNzAxNjU4OTkyMzQ3Ij4i4KS54KSf4KS+4KSJ4KSoIOCkruCkv+CksuCljeCkqOClhyDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkq+CkvuCkh+CksiDgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpLngpLDgpYIg4KSu4KS+4KSJ4KSo4KWN4KSfIOCksCDgpIXgpKjgpK7gpL7gpIngpKjgpY3gpJ8g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjIyNzgxOTU4MjYyNDkwNDk3MiI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNjI1ODI2OTg2MzkyNzQwNTYiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KSu4KWH4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iODc4NDI2ODI0Njc3OTE5ODYyNyI+IuCkueCkn+CkvuCkieCkqCDgpK7gpL/gpLLgpY3gpKjgpYcg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkq+CksOCljeCkruCljeCkr+CkvuCknyDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2FjY2VzcyIgbXNnaWQ9IjM0MTEzMzg2MzIwMDIxOTM4NDYiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSV4KWLIOCkuOClguCkmuCkqOCkviDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzMDk0NTYzODQ0NTkzODc4NTQ4Ij4i4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCko+CkruCkviDgpLjgpYLgpJrgpKjgpL4g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19jcmVhdGUiIG1zZ2lkPSI2NDE0NzU3MjM0Nzg5MzM2MzI3Ij4i4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19jcmVhdGUiIG1zZ2lkPSI0NTU4ODY5MjczNTg1ODU2ODc2Ij4i4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19kZXN0cm95IiBtc2dpZD0iNTI2OTI4MzI4MzAxNjE4MDIyIj4i4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKfgpY3gpLXgpLjgpY3gpKQg4KSq4KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19kZXN0cm95IiBtc2dpZD0iNzIxODc0OTI4NjE0NTUyNjUzNyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkp+CljeCkteCkuOCljeCkpCDgpKrgpL7gpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19tb3VudF91bm1vdW50IiBtc2dpZD0iODg3Nzk5ODEwMTk0NDk5OTM4NiI+IuCkhuCkqOCljeCkpOCksOCkv+CklSDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpLLgpL7gpIgg4KSu4KS+4KSJ4KSo4KWN4KSfL+CkheCkqOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSIzNDUxMzYwMTE0OTAyNDkwOTI5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkhuCkqOCljeCkpOCksOCkv+CklSDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSu4KS+4KSJ4KSo4KWN4KSfL+CkheCkqOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19yZW5hbWUiIG1zZ2lkPSI3NDk2NjMzOTU0MDgwNDcyNDE3Ij4i4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpKrgpYHgpKg64KSo4KS+4KSu4KS+4KSV4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfcmVuYW1lIiBtc2dpZD0iMTc5NDc1NzU4ODQ3MjEyNzY3NSI+IuCkhuCkqOCljeCkpOCksOClgOCklSDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSq4KWB4KSo4KSo4KS+4KSu4KS+4KSV4KSw4KSjIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i4KSV4KSu4KWN4KSq4KSoIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK3gpL7gpIfgpKzgpY3gpLDgpYfgpJ/gpLAg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IuCkq+CljeCksuCljeCkr+CkvuCkuOCksuCkvuCkiOCknyDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLgpKvgpY3gpLLgpY3gpK/gpL7gpLgg4KSq4KWN4KSw4KSV4KS+4KS24KSy4KS+4KSIIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZVVzYiIgbXNnaWQ9IjExMTM0NTM0MzA2NDU0MDI3MjMiPiJVU0Ig4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpKrgpY3gpLDgpL7gpKXgpK7gpL/gpJXgpKTgpL7gpLngpLDgpYIg4KSwIOCkheCkqOClgeCkruCkpOCkv+CkueCksOClgiDgpKrgpY3gpLDgpKzgpKjgpY3gpKcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNiIiBtc2dpZD0iNzc3NjE1NTQzMDIxODIzOTgzMyI+IlVTQiDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkquCljeCksOCkvuCkpeCkruCkv+CkleCkpOCkvuCkueCksOClgiDgpLAg4KSF4KSo4KWB4KSu4KSk4KS/4KS54KSw4KWC4KSy4KS+4KSIIOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4iTVRQIOCkquCljeCksOCli+Ckn+Cli+CkleCksiDgpJXgpL7gpLDgpY3gpK/gpL7gpKjgpY3gpLXgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTXRwIiBtc2dpZD0iNjUzMjk2MTIwMDQ4Njc5MTU3MCI+Ik1UUCBVU0Ig4KSq4KWN4KSw4KWL4KSf4KWL4KSV4KSyIOCkleCkvuCksOCljeCkr+CkvuCkqOCljeCkteCkr+CkqCDgpJfgpLDgpY3gpKgg4KSV4KWH4KSw4KWN4KSo4KSyIE1UUCDgpKHgpY3gpLDgpL7gpIfgpK3gpLDgpJXgpYsg4KSq4KS54KWB4KSB4KSa4KSV4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI0MTQ4MjkwODYwNDAwNjU5MTQ2Ij4i4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSwIOCkquCksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNjU5Nzk2NDE5MTIwODAxNjYwNSI+IuCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksCDgpKrgpLDgpYDgpJXgpY3gpLfgpKPgpJXgpYsg4KSJ4KSm4KWN4KSm4KWH4KS24KWN4KSv4KSV4KS+IOCksuCkvuCkl+CkvyDgpLXgpL/gpK3gpL/gpKjgpY3gpKgg4KSq4KSw4KS/4KSn4KWA4KSv4KS54KSw4KWC4KSy4KS+4KSIIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLgpKvgpYvgpKgg4KSo4KSu4KWN4KSs4KSw4KS54KSw4KWC4KSu4KS+IOCkuOCkv+Ckp+CliCDgpJXgpLIg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpLngpLjgpY3gpKTgpJXgpY3gpLfgpYfgpKog4KSs4KWH4KSX4KSw4KWIIOCkq+Cli+CkqCDgpKjgpK7gpY3gpKzgpLAg4KSV4KSyIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KSq4KWH4KSV4KWN4KS34KS/4KSkIOCktuClgeCksuCljeCklSDgpLXgpL4g4KSV4KSy4KS54KSw4KWCIOCkl+CksOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSo4KSu4KWN4KSs4KSw4KS54KSw4KWCIOCkleCksiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkgeCkpuCliOCkqCDgpLXgpL/gpJrgpL7gpLAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCljeCkteClgOCkleCkvuCksCDgpKzgpL/gpKjgpL4g4KSV4KSy4KS54KSw4KWCIOCkl+CksOClh+CksCDgpKTgpKrgpL7gpIjgpIHgpLLgpL7gpIgg4KSs4KSi4KWAIOCkquCliOCkuOCkviDgpKTgpL/gpLDgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjQxOTgzNDkyMTExMDg0OTc4NzkiPiLgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkq+Cli+CkqCDgpKjgpK7gpY3gpKzgpLDgpLngpLDgpYIg4KS44KS/4KSn4KWIIOCkleCksiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiLgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkq+Cli+CkqCDgpKjgpK7gpY3gpKzgpLDgpK7gpL4sIOCkhuCkleCkuOCljeCkruCkv+CklSDgpKjgpK7gpY3gpKzgpLAg4KS44KS54KS/4KSkLCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS54KS44KWN4KSk4KSV4KWN4KS34KWH4KSqIOCkrOCkv+CkqOCkviDgpJXgpLIg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkheCkqOCkvuCkteCktuCljeCkr+CklSDgpLAg4KSX4KWI4KSwIOCkleCkvuCkqOClgeCkqOClgCDgpJXgpLLgpLngpLDgpYLgpLLgpL7gpIgg4KSG4KSV4KS44KWN4KSu4KS/4KSV4KSu4KS+IOCkuOCljeCkpeCkvuCkqOCkvuCkqOCljeCkpOCksOCkoyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDg0MjU3Njk5NDE0NDYwNDgyMSI+IkNETUEg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkuOClh+Ckn+CkheCkqyDgpLjgpL/gpKfgpYgg4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NjA0ODQ4MDk1MzE1NDIxNDI1Ij4iQ0RNQSDgpKvgpYvgpKgg4KS44KWH4KSf4KSF4KSqIOCkuOCkv+Ckp+CliCDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIG1zZ2lkPSIxOTk0MTkzNTM4ODAyMzE0MTg2Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIENETUEg4KSq4KWN4KSw4KS+4KS14KSn4KS+4KSoIOCkuOClgeCksHUg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIXgpKjgpL7gpLXgpLbgpY3gpK/gpJUg4KSw4KWC4KSq4KSu4KS+IENETUEg4KSq4KWN4KSw4KS+4KS14KSn4KS+4KSoIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSI3Nzg1NDA4MjUzMzY0MzM1NzQwIj4i4KS44KWN4KSl4KS+4KSoIOCkheCkquCkoeClh+CknyDgpLjgpYLgpJrgpKjgpL7gpLngpLDgpYIg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9IjExMjA3NDE1NTc4OTE0Mzg4NzYiPiLgpLDgpYfgpKHgpL/gpK/gpYvgpKzgpL7gpJ8g4KS44KWN4KSl4KS+4KSoIOCkheCkpuCljeCkr+CkvuCkteCkp+Ckv+CklSDgpLjgpYLgpJrgpKjgpL7gpLngpLDgpYLgpLLgpL7gpIgg4KS44KSV4KWN4KS34KSuL+CkheCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkrOCkvuCknyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSo4KS54KWB4KSo4KWH4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9Ijc4NTUyNTk0NjEyNjg3MzQ5MTQiPiLgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KS14KS/4KS24KWH4KS34KSk4KS+4KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9IjQwMjQ1MjY5Njg2MzAxOTQxMjgiPiLgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KS44KWH4KS14KS+4KSm4KWN4KS14KS+4KSw4KS+IOCkteCkv+CktuClh+Ckt+CkpOCkviDgpIXgpKrgpLLgpYvgpKEg4KSt4KSP4KSV4KWLIOCkquCkueClgeCkgeCkmiDgpKrgpKLgpY3gpKgv4KSy4KWH4KSW4KWN4oCN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRHYWRnZXQiIG1zZ2lkPSI3NzY5MDUzMzkwMTU4NjM0NzEiPiLgpLXgpL/gpJzgpYfgpJ/gpLngpLDgpYLgpJXgpYsg4KSa4KSv4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRHYWRnZXQiIG1zZ2lkPSI4MjYxMzI2OTM4NTk5MDQ5MjkwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkquCljeCksOCko+CkvuCksuClgOCksuCkvuCkiCDgpJXgpYHgpKgg4KS14KS/4KSc4KWH4KSfIOCkleClgeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpL/gpKjgpY3gpJsg4KSt4KSo4KWH4KSwIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS4IOCkheCkqOClgeCkruCkpOCkv+CkuOCkueCkv+CkpOCkleCliyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSh4KWH4KSf4KS+4KSV4KWLIOCkquCkueClgeCkgeCkmiDgpKbgpL/gpKgg4KS44KSV4KWN4KSm4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSI4NDIzOTIzNzc3NjU5MjkyMjI4Ij4i4KSr4KWL4KSo4KSV4KWLIOCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9IjEwMjk4Nzc1MjkwMDc2ODY3MzIiPiLgpIngpKrgpJXgpLDgpKPgpJXgpL4g4KSr4KWL4KSoIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClguCksuCkvuCkiCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCAg4KSv4KS4IOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpI/gpIngpJ/gpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpY3gpLXgpL/gpJog4KSX4KSw4KWN4KSoLCDgpKvgpYvgpKgg4KSw4KWH4KSh4KS/4KSv4KWLIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSwIOCkluCli+CksuCljeCkqCDgpLAg4KSc4KS44KWN4KSk4KWIIOCkpOCkquCkvuCkiOCkgSDgpLjgpKfgpYgg4KS44KWC4KSa4KS/4KSkIOCkqOCkl+CksOClgCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjkxNzgyMjg1MjQ1MDc2MTA0ODYiPiLgpKvgpYvgpKgg4KS44KWN4KSl4KS/4KSk4KS/IOCksCDgpKrgpLngpL/gpJrgpL7gpKgg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSIxNjM5MjEyNzcxODI2MTI1NTI4Ij4i4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCkq+Cli+CkqCDgpLXgpL/gpLbgpYfgpLfgpKTgpL7gpLngpLDgpYLgpJXgpYsg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkq+Cli+CkqCDgpKjgpK7gpY3gpKzgpLAg4KSwIOCkieCkquCkleCksOCko+CkleCliyBJRHMsIOCkleCksiDgpLjgpJXgpY3gpLfgpK4g4KSbIOCkleCkvyDgpJvgpYjgpKgg4KSwIOCkleCksuCkpuCljeCkteCkvuCksOCkviDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSf4KS+4KSi4KS+4KSV4KWLIOCkqOCkruCljeCkrOCksCDgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTMxNzMxNDM1MDExNDk1MDE1Ij4i4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkqOCkv+CkqOCljeCkpuCljeCksOCkvuCkruCkviDgpJzgpL7gpKjgpKzgpL7gpJ8g4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MzQ4MDE4Nzk0MTQ5NjEzMCI+IuCkq+Cli+CkqOCksuCkvuCkiCDgpKjgpL/gpKbgpL7gpIngpKjgpKzgpL7gpJ8g4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczMTEzMTk4MjQ0MDA0NDc4NjgiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSo4KS/4KS44KWN4KSV4KWN4KSw4KS/4KSvIOCkueClgeCkqOCkrOCkvuCknyDgpLDgpYvgpJXgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NTU5MTAwNjc3MzcyOTI4NzU0Ij4i4KSr4KWL4KSo4KSy4KS+4KSIIOCkqOCkv+CkuOCljeCkleCljeCksOCkv+CkryDgpLngpYHgpKjgpKzgpL7gpJ8g4KSw4KWL4KSV4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3ODcwMzQ3MjI2MTYzNTA0MTciPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSq4KS+4KS14KSwIOCkluCli+CksuCljeCkqCDgpLAg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTI4NjIyNDcwOTgwOTQzMjA2Ij4i4KSr4KWL4KSoIOCkluCli+CksuCljeCkqCDgpLXgpL4g4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpIngpLDgpY3gpJzgpL4g4KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RldmljZVBvd2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2Njg5ODYyODc4OTg0NjMxODMxIj4i4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkluCli+CksuCljeCkqCDgpLAg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RldmljZVBvd2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjAzNzA1NzM0ODQ2MzEzMTAzMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKvgpYvgpKgg4KSW4KWL4KSy4KWN4KSoIOCksCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZhY3RvcnlUZXN0IiBtc2dpZD0iMzcxNTIyNTQ5MjY5NjQxNjE4NyI+IuCkq+CljeCkr+CkvuCkleCljeCkn+CljeCksOCkvyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSu4KWL4KSh4KSu4KS+IOCkmuCkvuCksuClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk1MjA1OTMxODM1OTY1MzA5MSI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLDgpLLgpL7gpIgg4KSq4KWB4KSw4KS+IOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KSm4KS/4KSB4KSm4KWIIOCkpOCksuCljeCksuCliyDgpLjgpY3gpKTgpLAg4KSJ4KSk4KWN4KSk4KWN4KSq4KS+4KSm4KSVIOCkquCksOClgOCkleCljeCkt+Cko+CkleCliyDgpLDgpYLgpKrgpK7gpL4g4KSa4KSy4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpIngpKTgpY3gpKTgpY3gpKrgpL7gpKbgpJUg4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkruCli+CkoeCkruCkviDgpJrgpLLgpL/gpLDgpLngpYfgpJXgpYsg4KSs4KWH4KSy4KS+IOCkruCkvuCkpOCljeCksCDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTM2NjQ0OTkwMzE5MjQ0ODAyIj4i4KSk4KSy4KWN4KSy4KWLIOCkuOCljeCkpOCksCDgpIngpKTgpY3gpKTgpY3gpKrgpL7gpKbgpJUg4KSc4KS44KWN4KSk4KWIIOCkmuCksuCkvuCkieCkqOClgeCkueCli+CkuOCljSwg4KSq4KWB4KSw4KS+IOCkquCkueClgeCkgeCkmiDgpKbgpL/gpKgg4KSr4KWL4KSoIOCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KS54KWB4KSo4KWN4KSb4KWkIOCkq+Cli+CkqCDgpIngpKTgpY3gpKrgpL7gpKbgpJUg4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkruCli+CkoeCkruCkviDgpJrgpLLgpL/gpLDgpLngpYfgpJXgpYsg4KSs4KWH4KSy4KS+IOCkruCkvuCkpOCljeCksCDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXIiIG1zZ2lkPSI2NjI3MTkyMzMzMzczNDY1MTQzIj4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXIiIG1zZ2lkPSI3MzczNDQ3OTIwOTc3NjI0NzQ1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkquCljeCksOCko+CkvuCksuClgCDgpLXgpL7gpLLgpKrgpYfgpKrgpLAg4KS44KWH4KSfIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjMyNzg2MDgxNjU5Nzc3MzY1MzgiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KS14KS+4KSy4KSq4KWH4KSq4KSwIOCkhuCkleCkvuCksCDgpLjgpK7gpL7gpK/gpYvgpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVySGludHMiIG1zZ2lkPSI4MjM1Nzg0Mzg0MjIzNzMwMDkxIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkteCkvuCksuCkquClh+CkquCksOCkleCliyDgpIbgpJXgpL7gpLAg4KS44KSZ4KWN4KSV4KWH4KSk4KS54KSw4KWCIOCkruCkv+CksuCkvuCkieCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIyMzE1NzUwNDIzMTM5Njk3Mzk3Ij4i4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXN0ZXJDbGVhciIgbXNnaWQ9IjM2NjUzODA0OTI2MzM5MTAyMjYiPiLgpK/gpLjgpJXgpL4g4KSr4KWN4KSv4KS+4KSV4KWN4KSf4KWN4KSw4KS/IOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiwg4KSV4KSo4KWN4KSr4KS/4KSX4KSw4KWH4KS44KSoIOCksCDgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkquCljeCksOCko+CkvuCksuClgOCkruCkviDgpKrgpYHgpLDgpYgg4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWUiIG1zZ2lkPSIyMDIxNjE0ODI5NTkxNzc1NjQ2Ij4i4KS44KSu4KSvIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxODk2MzQxNDM4MTUxMTUyODgxIj4i4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSV4KWLIOCkmOCkoeClgOCkleCliyDgpLjgpK7gpK8g4KSs4KSm4KSy4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NTU3MDI3MzA3MzgwMjAiPiLgpKvgpYvgpKjgpJXgpYsg4KSY4KSh4KWA4KSV4KWLIOCkuOCkruCkryDgpKzgpKbgpLLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWVab25lIiBtc2dpZD0iMjk0NTA3OTgwMTAxMzA3NzM0MCI+IuCkuOCkruCkryDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkleCliyDgpLjgpK7gpK8g4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQ5OTk0MzQ4ODQzNjYzMzM5OCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKvgpYvgpKjgpJXgpYsg4KS44KSu4KSvIOCkleCljeCkt+Clh+CkpOCljeCksCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjQ4MjkyNjIzNDk2OTEzODY5ODYiPiJBY2NvdW50TWFuYWdlclNlcnZpY2Ug4KSV4KWLIOCksOClguCkquCkruCkviDgpJXgpL7gpLDgpY3gpK8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iMTk0ODQ1NTU1MjMzMzYxNTk1NCI+IuCkluCkvuCkpOCkviDgpIXgpKfgpL/gpJXgpL7gpLDgpYDgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KSyIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFjY291bnRzIiBtc2dpZD0iMTA4Njc5NTQ2Nzc2MDEyMjExNCI+IuCkieCkquCkleCksOCko+CkruCkviDgpJbgpL7gpKTgpL7gpLngpLDgpYIg4KSt4KWH4KSf4KWN4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3NDE0OTY1MzQ3Njk2NjAwMjciPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSm4KWN4KS14KS+4KSw4KS+IOCknOCljeCknuCkvuCkpCDgpJbgpL7gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KS44KWC4KSa4KWAIOCkquCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpKbgpY3gpLXgpL7gpLDgpL4g4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkuOCljeCkpeCkvuCkquCkv+CkpCDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpYsg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpJbgpL7gpKTgpL7gpLngpLDgpYIg4KS44KSu4KS+4KS14KWH4KS2IOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiLgpKvgpYvgpKjgpLLgpL7gpIgg4KSl4KS+4KS54KS+IOCkreCkj+CkleCkviDgpJbgpL7gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KS44KWC4KSa4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpLjgpY3gpKXgpL7gpKrgpKjgpL4g4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpKzgpL7gpJ8g4KS44KWD4KSc4KS/4KSkIOCkleClgeCkqOCliCDgpJbgpL7gpKTgpL7gpLngpLDgpYIg4KS44KSu4KS+4KS14KWH4KS2IOCkueClgeCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTI2NTkwODQ4MTE3MjczNjkzMyI+IuCkluCkvuCkpOCkviDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTQ3MjEyNDI5NjkwODk3NzI2MCI+IuCkluCkvuCkpOCkvuCkueCksOClguCkleCliyDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSo4KWHIOCksCDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSo4KWHIOCksCDgpIngpKjgpYDgpLngpLDgpYLgpJXgpYsg4KSq4KS+4KS44KS14KSw4KWN4KSh4KS54KSw4KWC4KSV4KWLIOCkuOClh+Ckn+Ckv+CkmSDgpJfgpLDgpY3gpKjgpYcg4KS44KS54KS/4KSkIOCkluCkvuCkpOCkviDgpKrgpY3gpLDgpKzgpKjgpY3gpKfgpJXgpJXgpYsg4KSW4KS+4KSk4KS+IOCkhuCkp+Ckv+CkleCkvuCksOClgCDgpLjgpJXgpY3gpLfgpK7gpKTgpL7gpLngpLDgpYIg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4i4KSW4KS+4KSk4KS+4KS54KSw4KWCIOCkpeCkquCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KS54KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI4Njk4Mjk1NjI1NDg4MjkyNTA2Ij4i4KSW4KS+4KSk4KS+4KS54KSw4KWCIOCkpeCkquCljeCkqOClhyDgpLAg4KS54KSf4KS+4KSJ4KSo4KWHIOCknOCkuOCljeCkpOCkviDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL7gpLngpLDgpYIg4KS44KSu4KWN4KSq4KSo4KWN4KSoIOCkl+CksOCljeCkqCwg4KSwIOCkieCkqOClgOCkueCksOClguCkleCliyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSu4KWH4KSf4KS+4KSJ4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2VDcmVkZW50aWFscyIgbXNnaWQ9IjIzNTQ4MTM5NjE2Mzg3NzY0MiI+IuCkieCkquCkleCksOCko+CkruCkviDgpJbgpL7gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iNzk4NDIyNzE0NzQwMzM0NjQyMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpY3gpLDgpK7gpL7gpKPgpYDgpJXgpLDgpKMg4KSf4KWL4KSV4KSo4KS54KSw4KWCIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTmV0d29ya1N0YXRlIiBtc2dpZD0iNDk1MTAyNzk2NDM0ODk3NDc3MyI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpJzgpKHgpL7gpKjgpLngpLDgpYIg4KS54KWH4KSw4KWN4KSo4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya1N0YXRlIiBtc2dpZD0iODMxODk2NDQyNDY3NTk2MDk3NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSc4KSh4KS+4KSo4KS54KSw4KWCIOCknOCkuOCljeCkpOCliCDgpJXgpYHgpKgg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWCIOCkheCkteCkuOCljeCkpeCkv+CkpCDgpLngpYHgpKjgpY3gpJvgpKjgpY0g4KSwIOCknOCkoeCkv+CkpCDgpJvgpKjgpY0g4KSc4KS44KSy4KWHIOCkueClh+CksOCljeCkqOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjgwMTg3NTgxMzY0MDQzMjM2NTgiPiLgpKrgpYLgpLDgpY3gpKMg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCkueClgeCkgeCkmiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpJXgpYfgpJ/gpLngpLDgpYIg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqCDgpLAg4KSV4KS44KWN4KSf4KSuIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpY3gpLDgpYvgpJ/gpYvgpJXgpLIg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKzgpY3gpLDgpL7gpIngpJzgpLAg4KSwIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSH4KSo4KWN4KSf4KSw4KSo4KWH4KSf4KSu4KS+IOCkoeClh+Ckn+CkviDgpKrgpKDgpL7gpIngpKjgpYcg4KSu4KS+4KSn4KWN4KSv4KSuIOCkquCljeCksOCkpuCkvuCkqCDgpJfgpLDgpY3gpJvgpKjgpY0sIOCkpOCljeCkr+CkuOCliOCksuClhyDgpIfgpKjgpY3gpJ/gpLDgpKjgpYfgpJ/gpK7gpL4g4KSh4KWH4KSf4KS+IOCkquCkoOCkvuCkieCkqCDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/4KSV4KWLIOCkhuCkteCktuCljeCkr+CkleCkpOCkviDgpKrgpLDgpY3gpKbgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MDU2NjAxNTk2NzU3NTE4OTYiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCksCDgpJ/gpY3gpLDgpL7gpKvgpL/gpJUg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSAvIOCksOCli+CkleCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MzMzNzk4ODg2NDEyNzE0MTkzIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqCDgpLAg4KS44KSs4KWIIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJ/gpY3gpLDgpL7gpKvgpL/gpJUg4KSw4KWL4KSV4KWN4KSoIOCksCDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCkieCkpuCkvuCkueCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSV4KWB4KSo4KWIIOCkquCkqOCkvyBBUE4g4KSV4KWLIOCkquCljeCksOCli+CkleCljeCkuOClgCDgpLAg4KSq4KWL4KSw4KWN4KSfIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSc4KWN4KSe4KS+4KSoIOCkrOCkv+CkqOCkviDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KWN4KSv4KS+4KSV4KWH4KSf4KS54KSw4KWCIOCkruCli+CkqOCkv+Ckn+CksCDgpJfgpLDgpY3gpKgsIOCkquClgeCkqDrgpKjgpL/gpLDgpY3gpKbgpYfgpLbgpL/gpKQg4KSX4KSw4KWN4KSoLCDgpLXgpL4g4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9Ijk1ODg4NDI5MTQ1NDMyNzMwOSI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpJzgpKHgpL7gpKgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9IjY3ODkxMjM5MTI0NzY0MTYyMTQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCknOCkoeCkvuCkqOCkleCliyDgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjU5NTI1ODQ5NjQzNzMwMTc5NjAiPiLgpJ/gpYfgpKXgpLDgpY3gpKEg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCknOCkoeCkvuCkqCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSIxNTI0NDQxMzQ0NDEyMzE5NzgwIj4i4KSf4KS/4KSl4KSwIOCkl+CksOClh+CkleCliyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSc4KSh4KS+4KSo4KSV4KWLIOCkuOCljeCkpeCkv+CkpOCkvyDgpKzgpKbgpLLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjE0MDA2NjYwMTI2NzE2NDg3NDEiPiLgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSh4KWH4KSf4KS+IOCkquCljeCksOCkr+Cli+CklyDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjUzNDc3Mjk1Nzg0Njg3NDQzNzkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkoeClh+Ckn+CkviDgpIngpKrgpK/gpYvgpJcg4KS44KWH4KSf4KS/4KSZIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTIwMjAxMjk0OTI0NzA0MDAxMSI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSc4KSh4KS+4KSo4KS54KSw4KWCIOCkueClh+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUwMDI3OTgwNzczODc4MDM3MjYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCknOCkvuCkqOCkleCkvuCksOClgCDgpLngpYfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSc4KS44KWN4KSk4KWIIOCkleCkvyDgpLXgpL7gpIct4KSr4KS+4KSHIOCkuOCkleCljeCkt+CkriDgpJsg4KSV4KS/IOCkm+CliOCkqCDgpLAg4KSc4KSh4KS+4KSoIOCkl+CksOCkv+Ckj+CkleCliyDgpLXgpL7gpIct4KSr4KS+4KSHIOCkieCkquCkleCksOCko+CkueCksOClguCkleCliyDgpKjgpL7gpK7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjY1NTA2NDExODg3NDkxMjgwMzUiPiLgpLXgpL7gpIct4KSr4KS+4KSH4KS44KSB4KSXIOCknOCli+CkoeCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSb4KWB4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNzEzNzk1MDI5NzM4NjEyNzUzMyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLXgpL7gpIct4KSr4KS+4KSHIOCkquCkueClgeCkgeCkmiDgpKzgpL/gpKjgpY3gpKbgpYHgpKzgpL7gpJ8g4KSc4KSh4KS+4KSoIOCkl+CksOCljeCkqCDgpLAg4KS14KS/4KSa4KWN4KSb4KWH4KSm4KSoIOCkl+CksOCljeCkqCDgpLAg4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkieCkquCkleCksOCkoyDgpJXgpKjgpY3gpKvgpL/gpJfgpLDgpYfgpLjgpKjgpK7gpL4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSo4KS54KSw4KWCIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyBNdWx0aWNhc3Qg4KS44KWN4KS14KS/4KSV4KWD4KSk4KS/4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSu4KSy4KWN4KSf4KS/4KSV4KS+4KS34KWN4KSfIOCkoOClh+Ckl+CkvuCkqOCkvuCkueCksOClgiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkteCkvuCkhy3gpKvgpL7gpIcg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KSu4KS+IOCkquCkoOCkvuCkh+Ckj+CkleCliyDgpKrgpY3gpK/gpL7gpJXgpYfgpJ/gpLngpLDgpYIg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbLCDgpJXgpYfgpLXgpLIg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpK7gpL7gpKTgpY3gpLAg4KS54KWL4KSH4KSo4KWkIOCkr+CkuOCksuClhyDgpJfgpYjgpLAt4KSu4KSy4KWN4KSf4KS/4KSV4KS+4KS34KWN4KSfIOCkruCli+CkoSDgpK3gpKjgpY3gpKbgpL4g4KSs4KSi4KWAIOCkieCksOCljeCknOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MTk0OTcwNjAyNTM0OTkyNiI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKgg4KSu4KS+4KSk4KWN4KSwIOCkueCli+Ckh+CkqCwg4KSu4KSy4KWN4KSf4KS/4KSV4KS+4KS44KWN4KSfIOCkoOClh+Ckl+CkvuCkqOCkvuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWHIOCkteCkvuCkhy3gpKvgpL7gpIcg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KSV4KS+IOCkuOCkrOCliCDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpK7gpL4g4KSq4KSg4KS+4KSH4KSP4KSV4KS+IOCkquCljeCkr+CkvuCkleClh+Ckn+CkueCksOClgiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpJfgpYjgpLAt4KSu4KSy4KWN4KSf4KS/4KSV4KS+4KS44KWN4KSfIOCkruCli+CkoeCkreCkqOCljeCkpuCkviDgpKzgpKLgpYAg4KSJ4KSw4KWN4KSc4KS+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aEFkbWluIiBtc2dpZD0iNjAwNjk2NzM3MzkzNTkyNjY1OSI+IuCkrOCljeCksuClgeCkn+ClgeCkpSDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpK7gpL4g4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4i4KS44KWN4KSl4KS+4KSo4KWA4KSvIOCkrOCljeCksuClgeCkn+ClgeCkpSDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSV4KSo4KWN4KSr4KS/4KSX4KSwIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSwIOCkn+CkvuCkouCkvuCkleCkviDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLLgpL7gpIgg4KSq4KSk4KWN4KSk4KS+IOCksuCkl+CkvuCkieCkqCDgpLAg4KSc4KWL4KSh4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpY3gpKXgpL7gpKjgpYDgpK8g4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkq+Cli+CkqCDgpJXgpKjgpY3gpKvgpL/gpJfgpLAg4KSX4KSw4KWN4KSoIOCksCDgpJ/gpL7gpKLgpL7gpJXgpL4g4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KS44KSB4KSXIOCkluCli+CknCDgpJfgpLDgpY3gpKgg4KSwIOCknOCli+CkoeClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjQxOTU5MDcwMTA2MTAyMDU3MDMiPiJXaU1BWOCkuOCkgeCklyDgpJzgpYvgpKHgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkm+ClgeCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI2MzYwMTAyODc3MjYxOTc4ODg3Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkteCkvuCkh+CkruCljeCkr+CkvuCkleCljeCkuCDgpLjgpJXgpY3gpLfgpK4g4KSbIOCkleCkvyDgpJvgpYjgpKgg4KSwIOCknOCkoeCkvuCkqCDgpK3gpI/gpJXgpYsg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpJXgpY3gpLgg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWC4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMjQwNTA0MjI2NzEzMTQ5NjU3OSI+IuCkteCkvuCkh+CkruCljeCkr+CkvuCkleCljeCkuCDgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMxNTY0NTY1MDQwODQyMDE4MDUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS14KS+4KSH4KSu4KWN4KSv4KS+4KSV4KWN4KS4IOCkqOClh+Ckn+CkteCksOCljeCkleCkueCksOClguCkrOCkvuCknyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSc4KSh4KS+4KSoIOCkl+CksOCljeCkqCDgpLAg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkteCkv+CkmuCljeCkm+Clh+CkpuCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiLgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpJXgpY3gpLgg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWC4KS44KSB4KSXIOCkq+Cli+CkqCDgpJzgpYvgpKHgpY3gpKgg4KSwIOCkm+ClgeCkn+CkvuCkieCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoIiBtc2dpZD0iNjEyNzc2OTMzNjMzOTI3NjgyOCI+IuCkrOCljeCksuClgeCkn+ClgeCkpSDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLjgpIHgpJcg4KSc4KWL4KSh4KWAIOCkruCkv+CksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkruCkviDgpKzgpY3gpLLgpYHgpJ/gpYHgpKXgpJXgpYsg4KSV4KSo4KWN4KSr4KS/4KSX4KWB4KSw4KWH4KS44KSo4KSy4KS+4KSIIOCkueClh+CksOCljeCkqCDgpLAg4KSs4KSo4KS+4KSJ4KSoIOCksCDgpJzgpYvgpKHgpYAg4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KS44KSB4KSXIOCknOCkoeCkvuCkqOCkueCksOClguCksuCkvuCkiCDgpLjgpY3gpLXgpYDgpJXgpL7gpLAg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzIwNzEwNjMyNDQ1MjMxMjczOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKvgpYvgpKjgpK7gpL4g4KSs4KWN4KSy4KWB4KSf4KWB4KSl4KSV4KWLIOCkleCkqOCljeCkq+Ckv+Ckl+CksOClh+CkuOCkqCDgpLngpYfgpLDgpY3gpKgg4KSwIOCknOCli+CkoeClgCDgpK3gpI/gpJXgpL4g4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KS44KSB4KSXIOCknOCkoeCkvuCkqOCkueCksOClgiDgpKzgpKjgpL7gpIngpKgg4KSwIOCkuOCljeCkteClgOCkleCkvuCksCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbmZjIiBtc2dpZD0iNDQyMzM1MTI3NDc1Nzg3Njk1MyI+IuCkqOCknOCkv+CklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KS44KSC4KSa4KS+4KSwIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCko+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSo4KSv4KS+4KSBIOCkleCljeCkt+Clh+CkpOCljeCksCDgpLjgpILgpJrgpL7gpLAgKE5GQykg4KSf4KWN4KSv4KS+4KSX4KS54KSw4KWCLCDgpJXgpL7gpLDgpY3gpKHgpLngpLDgpYIg4KSwIOCkquCkvuCkoOCkleCkueCksOClguCkuOCkgeCklyDgpIXgpKjgpY3gpKTgpLDgpY3gpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjM1OTg0OTYzMDE0ODY0MzkyNTgiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSy4KSVIOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSI2MDM0MjAzMDY1MDc3MTIyOTkyIj4i4KSV4KWB4KSo4KWIIOCkuOCkruCljeCkrOCkqOCljeCkp+Ckv+CkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KS44KWB4KSw4KSV4KWN4KS34KS+IOCksCDgpJXgpL/gpLLgpJXgpLLgpL7gpIgg4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpIngpKbgpL7gpLngpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/LCDgpIXgpKjgpY3gpKTgpLDgpY3gpJfgpK7gpKgg4KSr4KWL4KSoIOCkleCksiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSm4KS+IOCkq+Cli+CkqOCksuClhyDgpJXgpL/gpLLgpJXgpLLgpL7gpIgg4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkmywg4KSk4KWN4KSv4KS44KSq4KSb4KS/IOCkleCksiDgpLjgpJXgpL/gpI/gpJXgpYsg4KSs4KWH4KSy4KS+IOCkleCkv+CksuCklSDgpKrgpYHgpKjgpIPgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iNjIwMTgxMDAwODIzMDUwMzA1MiI+IuCkuOCkruClgOCkleCksOCkoyDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFN5bmNTZXR0aW5ncyIgbXNnaWQ9IjI3MDY3NDU2NzQ1Njk2Nzg2NDQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSW4KS+4KSk4KS+4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpL/gpJngpY3gpJUg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCkquCkouCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkieCkpuCkvuCkueCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSv4KS44KSy4KWHIOCkteCljeCkr+CkleCljeCkpOCkv+CkueCksOCkleCliyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSW4KS+4KSk4KS+4KS44KSB4KSXIOCkuOCkv+CkmeCljeCklSDgpK3gpI/gpJXgpYsg4KSo4KSt4KSP4KSV4KWLIOCkqOCkv+CksOCljeCkp+CkvuCksOCkoyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9IjU0MDg2OTQ4NzU3OTM5NDUzMTQiPiLgpJ/gpJfgpLIg4KS44KS/4KSZ4KWN4KSVIOCkluClgeCksuCkviDgpLAg4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI4OTU2MjYyNTkxMzA2MzY5ODY4Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkluCkvuCkpOCkvuCkleCliyDgpLLgpL7gpJfgpL8g4KS44KS/4KSZ4KWN4KSVIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSJ4KSm4KS+4KS54KSw4KSj4KSV4KWLIOCksuCkvuCkl+Ckvywg4KSv4KWLIOCkluCkvuCkpOCkvuCkuOCkgeCklyDgpLXgpY3gpK/gpJXgpY3gpKTgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCkuOCkv+CkmeCljeCklSDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSoIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1N0YXRzIiBtc2dpZD0iNzM5NjU3NzQ1MTM2MDIwMjQ0OCI+IuCkuOCkv+CkmeCljeCklSDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpJXgpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFN5bmNTdGF0cyIgbXNnaWQ9IjE1MTAxNDM3NjE3NTc2MDYxNTYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSW4KS+4KSk4KS+4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpK7gpYDgpJXgpLDgpKPgpJXgpYsg4KSG4KSB4KSV4KSh4KS+IOCkuOCkruClgOCkleCksOCkoyDgpJjgpJ/gpKjgpL7gpLngpLDgpYLgpJXgpYsgIOCkh+CkpOCkv+CkueCkvuCkuCDgpLAg4KS44KSu4KWA4KSV4KSw4KSjIOCkl+CksOCkv+Ckj+CkleCliyDgpKHgpYfgpJ/gpL7gpJXgpYsg4KSu4KS+4KSq4KSoIOCkuOCkruClh+CkpCwg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI0NzU2NjA5NjM3MDUzMzUzMzE4Ij4i4KS44KSm4KS44KWN4KSvIOCkrOCkqOCkvuCkh+CkleCkviDgpKvgpL/gpKHgpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjU1NTcwNTg5MDc5MDYxNDQ1MDUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KS54KS/4KSy4KWH4KSV4KWLIOCkuOCkruClgOCkleCksOCkoyDgpJfgpLDgpL/gpI/gpJXgpL4g4KS44KWC4KSa4KSV4KS54KSw4KWCIOCkrOCkvuCksOClhyDgpLXgpL/gpLXgpLDgpKPgpLngpLDgpYIg4KSy4KS/4KSo4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N1YnNjcmliZWRGZWVkc1dyaXRlIiBtc2dpZD0iOTAxNTI0NjMyNTQwODIwOTI5NiI+IuCkuOCkpuCkuOCljeCkryDgpKzgpKjgpL7gpIfgpJXgpL4g4KSr4KS/4KSh4KS54KSw4KWCIOCksuClh+CkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1dyaXRlIiBtc2dpZD0iNjkyODkzMDE4ODgyNjA4OTQxMyI+IuCkpOCkquCkvuCkiOCkgeCkleCkviDgpK3gpLDgpY3gpJbgpLDgpYgg4KS44KS/4KSZ4KWN4KSVIOCkq+Ckv+CkoeCkueCksOClguCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KS/4KSZ4KWN4KSVIOCkq+Ckv+CkoeCkueCksOClguCksuCkvuCkiCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpK/gpLjgpLLgpYcgIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNDEwNzEwMTUyNTc0NjAzNTcxOCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpLbgpKzgpY3gpKbgpJXgpYvgpLbgpK7gpL4g4KSl4KSq4KWH4KSV4KS+IOCktuCkrOCljeCkpuCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjY1OTYxNDYwMDMzODkwNDI0MyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLLgpYcg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCktuCkrOCljeCkpuCkleCli+CktuCkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSX4KSw4KWH4KSV4KS+IOCkueClgeCkqCDgpLjgpJXgpY3gpKjgpYcg4KS44KSs4KWIIOCktuCkrOCljeCkpuCkueCksOClgiwg4KSo4KS+4KSu4KS54KSw4KWCIOCksCDgpKrgpKbgpL7gpLXgpLLgpYDgpLngpLDgpYIg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjIxODMxMTA0MDIzMTQ0NDExMDYiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4t4KSq4KSw4KS/4KSt4KS+4KS34KS/4KSkIOCktuCkrOCljeCkpuCkleCli+CktuCkruCkviDgpLbgpKzgpY3gpKbgpLngpLDgpYIg4KSl4KSq4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODE4NTM4NTcxNjI1NTA2NTI5MSI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpLbgpKzgpY3gpKbgpJXgpYvgpLbgpK7gpL4g4KSo4KSv4KS+4KSBIOCktuCkrOCljeCkpiDgpLLgpYfgpJbgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODIzNTM0MTUxNTYwNTU1OTY3NyI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpJfgpLDgpL/gpI/gpJXgpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCkueClgeCkgeCkmuCkleCliyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODIzNTM0MTUxNTYwNTU1OTY3NyI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpJfgpLDgpL/gpI/gpJXgpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCkueClgeCkgeCkmuCkleCliyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNjQyNDczMjkyMzQ4MTMyMDcyIj4i4KSt4KS14KS/4KS34KWN4KSvIOCkieCkquCkleCksOCko+CkueCksOClguCkruCkviDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWB4KSo4KWHIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkruCkpOCkvyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU5MTQ0MDI2ODQ2ODU4NDg4MjgiPiLgpK3gpLXgpL/gpLfgpY3gpK8g4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KSu4KS+IOCkieCkquCksuCkrOCljeCkpyDgpLngpYHgpKjgpYcgU0Qg4KSV4KS+4KSw4KWN4KSh4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+IuCkpOCkquCkvuCkiOCkgeCkleCliyBVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSV4KWLIOCkteCkv+Ckt+Ckr+CkteCkuOCljeCkpOClgeCkueCksOClguCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkteCkviDgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODgwNTY5MzYzMDA1MDQ1ODc2MyI+IuCkpOCkquCkvuCkiOCkgeCkleCliyBTRCDgpJXgpL7gpLDgpY3gpKHgpJXgpYsg4KS14KS/4KS34KSv4KS44KWC4KSa4KWAIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNzU0MDYyOTk0NDU3MTA4ODgiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSu4KS+IOCksuClh+CkluCljeKAjeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIggU0Qg4KSV4KS+4KSw4KWN4KSh4KSu4KS+IOCksuClh+CkluCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTk4MzkxOTk3MDY4NzkwMTUiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSu4KS/4KSh4KS/4KSv4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpLjgpL7gpK7gpJfgpY3gpLDgpYDgpLngpLDgpYIg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljS/gpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxODkxNjA1OTc2OTg1MjkxODUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkruCkv+CkoeCkv+Ckr+CkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KS44KS+4KSu4KSX4KWN4KSw4KWA4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3NzgzMTg1OTg0NDg4NDk4MjkiPiLgpJXgpL7gpJfgpJzgpL7gpKQg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCljeCksOCkrOCkqOCljeCkpyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODcwNDMyMzE3NjkxNDEyMTQ4NCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJXgpL7gpJfgpJzgpL7gpKQg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkuOCkruCkvuCkr+Cli+CknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iODE1MDYxMzgyMzkwMDQ2MDU3NiI+IuCkuOCkrOCliCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KSs4KS+4KS54KWN4KSvIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpKrgpLngpYHgpIHgpJog4KSw4KS+4KSW4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iMzIxNTIwODM1NzQxNTg5MTMyMCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpKzgpYgg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpKzgpL7gpLngpY3gpK8g4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSu4KS+4KSl4KS/IOCkquCkueClgeCkgeCkmiDgpLDgpL7gpJbgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU2NTY0ODcyNjQ4MTk2Njk4MjQiPiLgpJXgpY3gpK/gpL7gpLgg4KSr4KS+4KSH4KSyIOCkquCljeCksOCko+CkvuCksuClgCDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiLgpJXgpYfgpLgg4KSr4KS+4KSH4KSyIOCkquCljeCksOCko+CkvuCksuClgOCksuCkvuCkiCDgpKrgpKLgpY3gpKgg4KSwIOCksuClh+CkluCljeKAjeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZV9zaXAiIG1zZ2lkPSI1OTg2OTUyMzYyNzk1ODcwNTAyIj4i4KSH4KSo4KWN4KSf4KSw4KSo4KWH4KSfIOCkleCksuCkueCksOClgiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iNDcxNzYzMjAwMDA2MjY3NDI5NCI+IuCkh+CkqOCljeCkn+CksOCkqOClh+CknyDgpJXgpLIg4KSX4KSw4KWN4KSoL+CkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKggU0lQIOCkuOClh+CkteCkvuCksuCkvuCkiCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3ODYyNTkzMjgzNjExNDkzMjMyIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkieCkquCkr+Cli+Ckl+CkleCliyDgpIfgpKTgpL/gpLngpL7gpLgg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3Njg5MDYwNzQ5ODE5MTI2NDcyIj4i4KSo4KS/4KS24KWN4KSa4KS/4KSkIOCkqOClh+Ckn+CkteCksOCljeCkleCkueCksOClgiDgpLAg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJDgpKTgpL/gpLngpL7gpLjgpL/gpJUg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkieCkquCkr+Cli+CklyDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iMjU2MjA1MzU5MjMzOTg1OTk5MCI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpKjgpYDgpKTgpL8g4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSI3NTM3NTg2NzcxNTU5MzcwNjY4Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkqOClgOCkpOCkv+CkueCksOClgiDgpLXgpY3gpK/gpLXgpLjgpY3gpKXgpL7gpKrgpKgg4KSX4KSw4KWN4KSoIOCksCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJct4KS14KS/4KS24KWH4KS3IOCkqOCkv+Ckr+CkruCkueCksOClgiDgpKrgpLDgpL/gpK3gpL7gpLfgpL/gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjUwODgyMTczMDkwODg3Mjk2NTAiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSXIOCksuClh+CkluCkvuCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1NDQzNDEyODY2NzQ2MTk4MTIzIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCkuOCksOClgCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KS14KS/4KSw4KWC4KSm4KWN4KSn4KSu4KS+IOCkleCkuOCksOClgCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSX4KWAIOCkheCkleCkvuCkieCkqOCljeCkn+Clh+CkoSDgpJsg4KSt4KSo4KWH4KSwIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSm4KWN4KS14KS+4KSw4KS+IOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9IjM2NTg1MjcyMTQ5MTQ5NTk3NDkiPiLgpLjgpJXgpYfgpJ/gpJXgpYsg4KSo4KS/4KS24KS+4KSo4KS54KSw4KWCIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9Ijc2NTU1Njg0MzM2OTYzNTY1NzgiPiLgpK7gpL7gpLDgpY3gpJcg4KSm4KSw4KWN4KS24KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSV4KWH4KSf4KSV4KWLIOCkqOCkv+CktuCkvuCkqOCkueCksOClgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI3NjczNDE2NDg3ODczNDMyMjY4Ij4i4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNDU4NDU3NzQyNjgzNDMxMzg3Ij4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkrOCkvuCknyDgpKrgpYvgpLjgpY3gpJ8g4KSX4KSw4KS/4KSP4KSV4KS+4KS44KS54KS/4KSkIOCkquClgeCkqOCkg+CkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgsIOCkquCksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKgg4KSwIOCkuOClguCkmuCkqOCkvuCkueCksOClgiDgpLngpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI3MDU3NzY0NzQyMjExNjU2NjU0Ij4i4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCktuCljeCksOCli+CkpOCkviDgpLjgpYfgpLXgpL7gpK7gpL4g4KSs4KS+4KSB4KSn4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9Ijk4NTY5NzkxODU3NjkwMjk4NiI+IuCkueCli+CksuCljeCkoeCksOCksuCkvuCkiCDgpLjgpYLgpJrgpKjgpL4g4KS24KWN4KSw4KWL4KSk4KS+IOCkuOClh+CkteCkvuCkleCliyDgpLbgpYDgpLDgpY3gpLct4KS44KWN4KSk4KSw4KSV4KWLIOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuCDgpKzgpL7gpIHgpKfgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuClhyDgpKrgpKjgpL8g4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkquCksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjM2OTk2MDA4MzM5NzUxMTc0NzgiPiLgpLXgpL7gpLngpJUt4KSq4KWN4KSw4KSm4KS+4KSoIOCkteCkv+CkqOCljeCkr+CkvuCkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjQxNTk1NDkxNTI1MjkxMTE5MjAiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLLgpL7gpIgg4KS14KS+4KS54KSVLeCkquCljeCksOCkpuCkvuCkqCDgpLXgpL/gpKjgpY3gpK/gpL7gpLgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSo4KWHIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI4MjA2MDc3NDQ3ODM4OTA5NTE2Ij4i4KS44KSe4KWN4KSc4KS+4KSyIOCkheCkteCkuOCljeCkpeCkvuCkleCkviDgpKrgpLDgpY3gpK/gpLXgpYfgpJXgpY3gpLfgpKPgpJXgpL4g4KSy4KS+4KSX4KS/IOCkuOClgeCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtDb25kaXRpb25zIiBtc2dpZD0iNjg5OTEwMjA3NTgyNTI3MjIxMSI+IuCkuOCknuCljeCknOCkvuCksiDgpIXgpLXgpLjgpY3gpKXgpL7gpJXgpL4g4KSq4KSw4KWN4KSv4KS14KWH4KSV4KWN4KS34KSjIOCkuOClgeCkqOCljeCkqOCkleCkviDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaTgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkmuCkvuCkgeCkueCkv+CkpuCliCDgpKjgpJrgpL7gpIHgpLngpL/gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ob3R3b3JkUmVjb2duaXRpb24iIG1zZ2lkPSIzMjI1MDgwNDA4NzQ2MzYxMzEzIj4i4KSc4KSy4KWN4KSm4KWL4KSs4KSy4KWN4KSm4KWLIOCktuCkrOCljeCkpiDgpKrgpLngpL/gpJrgpL7gpKjgpJXgpL4g4KSy4KS+4KSX4KS/IOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ob3R3b3JkUmVjb2duaXRpb24iIG1zZ2lkPSIzNzE2NzQxMjYwMTk1MzY0MjUyIj4i4KSc4KSy4KWN4KSm4KS+4KSs4KSy4KWN4KSm4KS+IOCktuCkrOCljeCkpiDgpKrgpLngpL/gpJrgpL7gpKjgpJXgpL4g4KSy4KS+4KSX4KS/IOCkheCkqOClgeCksOCli+CkpyDgpKrgpKDgpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaTgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KS+IOCksuCkvuCkl+CkvyDgpK/gpYsg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkqOCkmuCkvuCkueCkv+CkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjQ0OTc0MjA3Mjg4NTc1ODU3OTEiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSo4KS/4KSv4KSu4KS54KSw4KWCIOCkruCkv+CksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjMyNTIxMTQyMDM5MTk1MTAzOTQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgt4KSF4KSo4KSy4KSVIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClguCkruCkviDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSH4KSP4KSV4KWLIOCksuCkruCljeCkrOCkvuCkhyDgpLAg4KSF4KSV4KWN4KS34KSw4KS54KSw4KWCIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2F0Y2hMb2dpbiIgbXNnaWQ9IjkxNDEzMDY0Njk0MjE5OTUwMyI+IuCkruCli+CkqOCkv+Ckn+CksCDgpLjgpY3gpJXgpY3gpLDgpL/gpKgt4KSF4KSo4KSy4KSVIOCkquCljeCksOCkr+CkpOCljeCkqOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzIxNTcyOTI5NDIxNTA3MDA3MiI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSm4KS+IOCkl+CksuCkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkreCkj+CkleCliyDgpLjgpILgpJbgpY3gpK/gpL4g4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSv4KSm4KS/IOCkqOCkv+CkleCliCDgpKfgpYfgpLDgpYgg4KSX4KSy4KSkIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClgiDgpJ/gpL7gpIfgpKog4KSt4KSP4KSV4KS+IOCkm+CkqCDgpK3gpKjgpYcg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkleCkviDgpLjgpKzgpYgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MTIzMjMwOTE4NDY3NjEwNzMiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSm4KS+IOCkl+CksuCkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkreCkj+CkleCliyDgpLjgpILgpJbgpY3gpK/gpL4g4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSv4KSm4KS/IOCkqOCkv+CkleCliCDgpKfgpYfgpLDgpYgg4KSX4KSy4KSkIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClgiDgpJ/gpL7gpIfgpKog4KSt4KSP4KSV4KS+IOCkm+CkqCDgpK3gpKjgpYcg4KSr4KWL4KSoIOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkq+Cli+CkqOCkleCkviDgpLjgpKzgpYgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9yZXNldFBhc3N3b3JkIiBtc2dpZD0iMjYyMDA3NzE5MTI0MjY4ODk1NSI+IuCkuOCljeCkleCljeCksOCkv+CkqC3gpIXgpKjgpLLgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkpuCksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjYwNTk2Mzk2MjMwMTkwNDQ1OCI+IuCkuOCljeCkleCljeCksOCkv+CkqC3gpIXgpKjgpLLgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZm9yY2VMb2NrIiBtc2dpZD0iMjI3NDA4NTM4NDcwNDI0ODQzMSI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpLLgpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19mb3JjZUxvY2siIG1zZ2lkPSIxMTQxNzk3NTg4NDAzODI3MTM4Ij4i4KSV4KS44KSw4KWAIOCksCDgpJXgpLngpL/gpLLgpYcg4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93aXBlRGF0YSIgbXNnaWQ9IjM5MTA1NDU0NDY3NTg2Mzk3MTMiPiLgpLjgpKzgpYgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2lwZURhdGEiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMDYxODQwOTYwNjc3NTY4NzYiPiLgpI/gpIngpJ/gpL4g4KSr4KWN4KSv4KS+4KSV4KWN4KSf4KWN4KSw4KS/IOCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KWH4KSwIOCkmuClh+CkpOCkvuCkteCkqOClgCDgpKjgpIbgpIngpIHgpKbgpYgg4KSf4KWN4KSv4KS+4KSs4KSy4KWN4KSf4KSV4KWLIOCkoeClh+Ckn+CkviDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTA5Njg5NTYwNDU3NDE4ODM5MSI+IuCkj+CkieCkn+CkviDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KSh4KWH4KSf4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpYfgpLAg4KSa4KWH4KSk4KS+4KS14KSo4KWAIOCkqOCkhuCkieCkgeCkpuCliCDgpKvgpYvgpKjgpJXgpYsg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9zZXRHbG9iYWxQcm94eSIgbXNnaWQ9IjI3ODQ4MjgyOTM3NDc3OTE0NDYiPiLgpIngpKrgpJXgpLDgpKMg4KS14KS/4KS24KWN4KS14KS14KWN4KSv4KS+4KSq4KWAIOCkquCljeCksOCli+CkleCljeCkuOClgCDgpK7gpL/gpLLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+IuCkqOClgOCkpOCkvyDgpLjgpJXgpY3gpLfgpK4g4KS54KWB4KSB4KSm4KS+IOCkquCljeCksOCkr+Cli+CklyDgpLngpYHgpKjgpYcg4KSJ4KSq4KSV4KSw4KSjICDgpLXgpL/gpLbgpY3gpLXgpLXgpY3gpK/gpL7gpKrgpYAg4KSq4KWN4KSw4KWL4KSV4KWN4KS44KWAIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSq4KWN4KSw4KSl4KSuIOCkieCkquCkleCksOCkoyDgpKrgpY3gpLDgpLbgpL7gpLjgpLbgpKjgpLLgpYcg4KSu4KS+4KSk4KWN4KSwIOCkquCljeCksOCkreCkvuCkteCkleCkvuCksOClgCDgpLXgpL/gpLbgpY3gpLXgpLXgpY3gpK/gpL7gpKrgpYAg4KSq4KWN4KSw4KWL4KSV4KWN4KS44KWAIOCkuOClh+CknyDgpJfgpLDgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSI4ODUyNzkxNTE4NDcyNTQwNTYiPiLgpLLgpJUt4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkquCkvuCkuOCkteCksOCljeCkoSDgpIXgpKjgpY3gpKQg4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSIxNzI5NzI1MjI2MzE0NjkxNTkxIj4i4KSq4KWN4KSw4KS+4KSv4KSDIOCkleCkpOCkvyDgpJvgpL/gpJ/gpYsg4KSy4KSVLeCkuOCljeCkleCljeCksOCkv+CkqCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSs4KSm4KSy4KWN4KSo4KWBIOCkquCksOCljeCkmyDgpK/gpLjgpLLgpL7gpIgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iODkwMTMyNjE5OTkwOTEzMjkxNSI+IuCkreCko+CljeCkoeCkvuCksOCkoyDgpIfgpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpLjgpKgg4KSu4KS/4KSy4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iMjYzNzczMjExNTMyNTMxNjk5MiI+IuCkreCko+CljeCkoeCkvuCksCDgpJfgpLDgpL/gpI/gpJXgpYsg4KSh4KWH4KSf4KS+IOCkh+CkqOCljeCkleCljeCksOCkv+CkquCljeCknyDgpLngpYHgpKjgpYEg4KSG4KS14KS24KWN4KSv4KSVIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iNjM5NTMwMTAyMzE1MjI5NzgyNiI+IuCkleCljeCkr+CkvuCkruClh+CksOCkvuCksuCkvuCkiCDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iMjMwNjM0OTA0MjgzNDc1NDU5NyI+IuCkuOCkrOCliCDgpIngpKrgpJXgpLDgpKMg4KSV4KWN4KSv4KS+4KSu4KSw4KS+4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIyNjYzMjkxMDQ1NDI2Mzg4MDIiPiLgpJXgpL/gpJfgpL7gpLDgpY3gpKHgpK7gpL4g4KSt4KSP4KSV4KS+IOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClgiDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjM0NjcwODIyNzIxODY1MzQ2MTQiPiLgpJXgpYfgpLngpYAg4KSV4KS/4KSX4KS+4KSw4KWN4KShIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBob25lVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI4OTAxMDk4MzM2NjU4NzEwMzU5Ij4i4KSX4KWD4KS5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY5OTIzNjUwNTI3MTM2NjE1Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzg5NzU0NDY1NDI0Mjg3NDU0MyI+IuCkleCkvuCkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMTAzNjAxNDMzMzgyMTU4MTU1Ij4i4KSV4KS+4KSw4KWN4KSvIOCkq+CljeCkr+CkvuCkleCljeCkuCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MzUxNzcxNDQ5NDgzMjkzNzAiPiLgpJjgpLDgpJXgpYsg4KSr4KWN4KSv4KS+4KSV4KWN4KS4IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjAzODc4Njc0NDc3MjA3Mzk0Ij4i4KSq4KWH4KSc4KSwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTY1MDgyNDI3NTE3NzkzMTYzNyI+IuCkheCkqOCljeCkryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiLgpIXgpKjgpYHgpJXgpYLgpLLgpKgiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJlbWFpbEFkZHJlc3NUeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9IjgwNzM5OTQzNTI5NTYxMjkxMjciPiLgpJfgpYPgpLkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3MDg0MjM3MzU2NjAyNjI1NjA0Ij4i4KSV4KS+4KSuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTExMjA0NDQxMDY1OTAxMTAyMyI+IuCkheCkqOCljeCkryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIzNzQ5MTM5NTI4NzAxMTA2MTgiPiLgpIXgpKjgpYHgpJXgpYLgpLLgpKgiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwb3N0YWxBZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI2ODgwMjU3NjI2NzQwMDQ3Mjg2Ij4i4KSX4KWD4KS5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTYyOTE1Mzk1NjA0NTEwOTI1MSI+IuCkleCkvuCkriI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ5NjY2MDQyNjQ1MDAzNDM0NjkiPiLgpIXgpKjgpY3gpK8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0OTMyNjgyODQ3NTk1Mjk5MzY5Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1BZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSIxNzM4NTg1MTk0NjAxNDc2Njk0Ij4i4KSX4KWD4KS5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM1OTY0NDU2NTY0NzM4MzcwOCI+IuCkleCkvuCkriI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4Njg1NDk0MDEwNTM2MTU2NzciPiLgpIXgpKjgpY3gpK8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTQ1MTE4OTQ0NjM5ODY5ODA5Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JnYW5pemF0aW9uVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NTQ2MzM1NjEyMTg5MTE1NjE1Ij4i4KSV4KS+4KSuIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQzNzgwNzQxMjkwNDk1MjAzNzMiPiLgpIXgpKjgpY3gpK8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNDU1MDQ3NDY4NTgzOTY1MTA0Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1Qcm90b2NvbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI4NTk1MjYxMzYzNTE4NDU5NTY1Ij4iQUlNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzM5MDQ3MzYyODI3NTQ5MDcwMCI+IldpbmRvd3MgTGl2ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4ODI4NzcxMzQ5MzE0NTgyMTciPiJZYWhvbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjUwMzUzNzYzMTMyMDA1ODUyNDIiPiLgpLjgpY3gpJXgpL7gpIfgpKoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3NTMyMzYzMTc4NDU5NDQ0OTQzIj4iUVEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNzEzNDQxMDM0Mjk5NjYwNzQ5Ij4iR29vZ2xlIFRhbGsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNTA2ODU3MzEyNzE4NjMwODIzIj4iSUNRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTY0ODc5NzkwMzc4NTI3OTM1MyI+IkphYmJlciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ3VzdG9tIiBtc2dpZD0iMTY0NDczODA1OTA1MzM1NTgyMCI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUhvbWUiIG1zZ2lkPSIyNTcwOTIzNDYzMDMzOTg1ODg3Ij4i4KSX4KWD4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW9iaWxlIiBtc2dpZD0iNjUwMTQ2MzU1Nzc1NDc1MTAzNyI+IuCkruCli+CkrOCkvuCkh+CksiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmsiIG1zZ2lkPSI4ODYzOTM5NjY3MDU5OTExNjMzIj4i4KSV4KS+4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4V29yayIgbXNnaWQ9IjM1MTc3OTIxNjAwMDg4OTA5MTIiPiLgpJXgpL7gpLDgpY3gpK8g4KSr4KWN4KSv4KS+4KSV4KWN4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4SG9tZSIgbXNnaWQ9IjIwNjcyNjU5NzIzMjI5NzE0NjciPiLgpJjgpLDgpJXgpYsg4KSr4KWN4KSv4KS+4KSV4KWN4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlUGFnZXIiIG1zZ2lkPSI3NTgyMzU5OTU1Mzk0OTIxNzMyIj4i4KSq4KWH4KSc4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXIiIG1zZ2lkPSIxNTQ0NDI1ODQ3ODY4NzY1OTkwIj4i4KSF4KSo4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FsbGJhY2siIG1zZ2lkPSIyNzEyMTc1MjAzMDY1Njc4MjA2Ij4i4KSV4KSy4KSs4KWN4KSv4KS+4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FyIiBtc2dpZD0iODczODM2MDY4OTYxNjcxNjk4MiI+IuCkleCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNvbXBhbnlNYWluIiBtc2dpZD0iNTQwNDM0MzU2NDYxNDc4OTE2Ij4i4KSV4KSu4KWN4KSq4KSo4KWAIOCkruClgeCkluCljeCkryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUlzZG4iIG1zZ2lkPSI4MDIyNDUzMTkzMTcxMzcwMzM3Ij4iSVNETiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1haW4iIG1zZ2lkPSI2NzY2MTM3MDEwNjI4MzI2OTE2Ij4i4KSu4KWB4KSW4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXJGYXgiIG1zZ2lkPSI4NTg3NjU3MTQ1MDcyNDQ2NTY1Ij4i4KSF4KSo4KWN4KSvIOCkq+CljeCkr+CkvuCkleCljeCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVJhZGlvIiBtc2dpZD0iNDA5MzczODA3OTkwODY2NzUxMyI+IuCksOClh+CkoeCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVRlbGV4IiBtc2dpZD0iMzM2Nzg3OTk1MjQ3NjI1MDUxMiI+IuCkn+Clh+CksuClh+CkleCljeCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVR0eVRkZCIgbXNnaWQ9Ijg2MDY1MTQzNzg1ODUwMDAwNDQiPiJUVFkgVEREIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya01vYmlsZSIgbXNnaWQ9IjEzMTE0MjY5ODkxODQwNjU3MDkiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KSs4KS+4KSH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya1BhZ2VyIiBtc2dpZD0iNjQ5OTM4NzMxMjMxMTU3MDU2Ij4i4KSV4KS+4KSw4KWN4KSvIOCkquClh+CknOCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjU1OTY3NzI2MzYxMjg1NjI4ODQiPiLgpLjgpLngpL7gpK/gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNbXMiIG1zZ2lkPSI3MjU0NDkyMjc1NTAyNzY4OTkyIj4iTU1TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQ3VzdG9tIiBtc2dpZD0iNzgzNzU4NjE5ODQ1ODA3MzQwNCI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUJpcnRoZGF5IiBtc2dpZD0iMjgxMzM3OTg0NDIxMTM5MDc0MCI+IuCknOCkqOCljeCkruCkpuCkv+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUFubml2ZXJzYXJ5IiBtc2dpZD0iMzg3Njc3OTc0NDUxODI4NDAwMCI+IuCkteCkvuCksOCljeCkt+Ckv+CklSDgpLjgpK7gpL7gpLDgpYvgpLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVPdGhlciIgbXNnaWQ9IjczODgxNzg5MzkwMTAxNDMwNzciPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVDdXN0b20iIG1zZ2lkPSI4NTI1OTYwMjU3ODA0MjEzODQ2Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlSG9tZSIgbXNnaWQ9IjQ0OTIyNzIzNjE0MDQzMzkxOSI+IuCkl+Clg+CkuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZVdvcmsiIG1zZ2lkPSIzNTQ4MDU4MDU5NjAxMTQ5OTczIj4i4KSV4KS+4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlT3RoZXIiIG1zZ2lkPSIyOTIzMDA4Njk1MjcyNjM5NTQ5Ij4i4KSF4KSo4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlTW9iaWxlIiBtc2dpZD0iMTE5OTE5MDA1MzIxMTY2MjA1Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg5MDMyMDY5MDMwNjA0Nzk5MDIiPiLgpIXgpKjgpYHgpJXgpYLgpLLgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlSG9tZSIgbXNnaWQ9IjgxNjU3NTY5NzcxODQ0ODMwOTciPiLgpJfgpYPgpLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlV29yayIgbXNnaWQ9IjUyNjgxNzI3NzIzODc2OTQ0OTUiPiLgpJXgpL7gpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlT3RoZXIiIG1zZ2lkPSIyNzI2MTExOTY2NjIzNTg0MzQxIj4i4KSF4KSo4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlQ3VzdG9tIiBtc2dpZD0iMjA3NDAyODc1NTUyNzgyNjA0NiI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZUhvbWUiIG1zZ2lkPSI2MjQxMTgxMDMyOTU0MjYzODkyIj4i4KSX4KWD4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlV29yayIgbXNnaWQ9IjEzNzE0ODkyOTAyNDI0MzMwOTAiPiLgpJXgpL7gpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVPdGhlciIgbXNnaWQ9IjUzNzcwMDc0OTU3MzU5MTU0NzgiPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQ3VzdG9tIiBtc2dpZD0iNjkxOTQ1MzgzNjYxODc0OTk5MiI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xBaW0iIG1zZ2lkPSI3MDUwMzYwNjEyMzY4MzgzNDE3Ij4iQUlNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE1zbiIgbXNnaWQ9IjE0NDU1NjU0NTQyMDc2OTQ0MiI+IldpbmRvd3MgTGl2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xZYWhvbyIgbXNnaWQ9IjgyNzE0Mzk0MDg0NjkwMjEyNzMiPiJZYWhvbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xTa3lwZSIgbXNnaWQ9IjkwMTkyOTY3NDQ2MjI4MzI5NTEiPiLgpLjgpY3gpJXgpL7gpIfgpKoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sUXEiIG1zZ2lkPSI4ODg3NDg0Mzc5NDk0MTExODg0Ij4iUVEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sR29vZ2xlVGFsayIgbXNnaWQ9IjQ5MzkwMjMyMTE0MDI3NzMwNCI+IuCkueCljeCkr+CkvuCkmeCkhuCkieCkn+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xJY3EiIG1zZ2lkPSIxNTc0ODcwNDMzNjA2NTE3MzE1Ij4iSUNRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEphYmJlciIgbXNnaWQ9IjIyNzk5MTc2MzA4NzU3NzE3MjIiPiJKYWJiZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTmV0TWVldGluZyIgbXNnaWQ9IjgyODc2MjU2NTU5ODY4Mjc5NzEiPiJOZXRNZWV0aW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZVdvcmsiIG1zZ2lkPSIyOTI2ODg3MDUwNTM2Mzg3MiI+IuCkleCkvuCkriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVPdGhlciIgbXNnaWQ9IjM5NTE3ODExMzE1NzAxMjQwODIiPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdUeXBlQ3VzdG9tIiBtc2dpZD0iMjI1NTIzNDE1MzcyMDg4MzIyIj4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ3VzdG9tIiBtc2dpZD0iMzU0MjQwMzY3OTgyNzI5NzMwMCI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjYyNzQzMzQ4MjUxOTUzNzkwNzYiPiLgpLjgpLngpL7gpK/gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVCcm90aGVyIiBtc2dpZD0iODc1NzkxMzUwNjc4NDA2NzcxMyI+IuCkreCkvuCkhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUNoaWxkIiBtc2dpZD0iMTg5MDc0NjI3NzI3Njg4MTYyNiI+IuCkrOCkmuCljeCkmuCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZURvbWVzdGljUGFydG5lciIgbXNnaWQ9IjY5MDQ4MDcxMTIxMjExMjIxMzMiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KS44KS+4KSd4KWH4KSm4KS+4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRmF0aGVyIiBtc2dpZD0iNTIyODAzNDY4NzA4MjA1MDcyNSI+IuCkrOClgeCkrOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUZyaWVuZCIgbXNnaWQ9IjczMTMxMDY3NjI0ODMzOTEyNjIiPiLgpK7gpL/gpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNYW5hZ2VyIiBtc2dpZD0iNjM2NTY3Nzg2MTYxMDEzNzg5NSI+IuCkrOCljeCkr+CkteCkuOCljeCkpeCkvuCkquCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZU1vdGhlciIgbXNnaWQ9IjQ1Nzg1NzEzNTI5NjI3NTgzMDQiPiLgpIbgpK7gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVQYXJlbnQiIG1zZ2lkPSI0NzU1NjM1NTY3NTYyOTI1MjI2Ij4i4KSF4KSt4KS/4KSt4KS+4KS14KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFydG5lciIgbXNnaWQ9IjcyNjY0OTAyODUxMjAyNjI3ODEiPiLgpKrgpL7gpLDgpY3gpJ/gpKjgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVSZWZlcnJlZEJ5IiBtc2dpZD0iMTAxNTczMDU5ODQ0MTM1NTI0Ij4i4KSm4KWN4KS14KS+4KSw4KS+IOCkieCksuCljeCksuCkv+CkluCkv+CkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVJlbGF0aXZlIiBtc2dpZD0iMTc5OTgxOTkzMDA4NTYxMDI3MSI+IuCkhuCkq+CkqOCljeCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVNpc3RlciIgbXNnaWQ9IjE3MzU5ODM1NTQ0NzkwNzY0ODEiPiLgpKzgpLngpL/gpKjgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTcG91c2UiIG1zZ2lkPSIzOTQxMzY5Mzk0Mjg2OTgxMTciPiLgpKrgpKTgpL8t4KSq4KSk4KWN4KSo4KS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVDdXN0b20iIG1zZ2lkPSIyNDczNTgwNTkzMTExNTkwOTQ1Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IuCkl+Clg+CkuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLgpJXgpL7gpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJQSU4g4KSV4KWL4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUsg4KSwIOCkqOCkr+CkvuCkgSBQSU4g4KSV4KWL4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyDgpJXgpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IuCkqOCkr+CkvuCkgSBQSU4g4KSV4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWNIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKggUElOIOCkleCli+CkoSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4KSX4KSy4KSkIFBJTiDgpJXgpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpK7gpYfgpKjgpYEg4KSl4KS/4KSa4KWN4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpKTgpY3gpK/gpLjgpKrgpJvgpL8g4KWmIOCkpeCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsX2RpYWxvZ19udW1iZXJfZm9yX2Rpc3BsYXkiIG1zZ2lkPSI2OTYxOTIxMDMxOTUwOTA5NzAiPiLgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSo4KSu4KWN4KSs4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4OTYzODM5MjQyNTY1NjUzMTkyIj4i4KS44KWH4KS14KS+IOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2NyZWVuX2xvY2tlZCIgbXNnaWQ9IjcyODg0NDMwNzQ4MDY4MzI5MDQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSy4KSVIOCkl+CksOCkv+Ckj+CkleCli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5faW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9lbmFibGVkIiBtc2dpZD0iNDYxNTQwNTE2MTQxMjYwNDkiPiLgpIXgpKjgpLLgpJUg4KS14KS+IOCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpJXgpLIg4KSX4KSw4KWN4KSoIOCkruClh+CkqOClgSDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSI2ODYyNjAwMjg3OTcxNTgzNjQiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkruClh+CkqOClgSDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNzQ3ODcwMzI1NDk2NDgxMDMwMiI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYEg4KSi4KS+4KSB4KSa4KS+IOCkluCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZW1lcmdlbmN5X2NhbGwiIG1zZ2lkPSI1MzQ3NjMzNzg0NDAxMjg1MjI1Ij4i4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkleCksuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcmV0dXJuX3RvX2NhbGwiIG1zZ2lkPSI1MjQ0MjU5Nzg1NTAwMDQwMDIxIj4i4KSV4KSy4KSu4KS+IOCkq+CksOCljeCkleCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9jb3JyZWN0IiBtc2dpZD0iOTAzOTAwODY1MDM2MjI2MTIzNyI+IuCkuOCkueClgCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fd3JvbmciIG1zZ2lkPSI0MzE3OTU1MDE0OTQ4MTA4Nzk0Ij4i4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Bhc3N3b3JkX3dyb25nIiBtc2dpZD0iNTczNzgxNTM5MzI1MzE2NTMwMSI+IuCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+IuCkheCkpOCljeCkr+CkvuCkp+Ckv+CklSDgpK7gpYvgpLngpKHgpL4g4KSW4KWL4KSy4KWN4KSo4KWHIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClgiDgpKzgpKLgpYAg4KSt4KSP4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wbHVnZ2VkX2luIiBtc2dpZD0iODA1Nzc2MjgyODM1NTU3MjMxNSI+IuCkmuCkvuCksOCljeCknCDgpLngpYHgpIHgpKbgpYgsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiLgpJrgpL7gpLDgpY3gpJwg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9iYXR0ZXJ5X3Nob3J0IiBtc2dpZD0iNDQ3NzI2NDg0OTM4Njg1MDI2NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2xvd19iYXR0ZXJ5IiBtc2dpZD0iMTQ4Mjg3Mzk4MTkxOTI0OTc0MCI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpJrgpL7gpLDgpY3gpJzgpLAg4KSc4KWL4KSh4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5OTQzOTI3NzgxOTIxNTM5OSI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTE2NTkxOTYwOTU3OTE0NzQiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpK7gpL4gU0lNIOCkleCkvuCksOCljeCkoSDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4i4KSr4KWL4KSo4KSu4KS+IFNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4iU0lNIOCkleCkvuCksOCljeCkoSDgpJjgpYHgpLjgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSoIOCkteCkviDgpKrgpKLgpY3gpKgg4KSu4KS/4KSy4KWN4KSm4KWI4KSo4KWkIFNJTSDgpJXgpL7gpLDgpY3gpKEg4KS54KS+4KSy4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk2MTQ5NjY1MTM4OTE2MTg0Ij4i4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpIXgpK/gpYvgpJfgpY3gpK8gU0lNIOCkleCkvuCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsgU0lNIOCkleCkvuCksOCljeCkoSDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkheCkleCljeCkt+CkriDgpK3gpK/gpYvgpaRcbiDgpIXgpLDgpY3gpJXgpYsgU0lNIOCkleCkvuCksOCljeCkoeCkleCliyDgpLLgpL7gpJfgpL8g4KSG4KSr4KSo4KWLIOCkpOCkvuCksOCksOCkueCkv+CkpCDgpLjgpYfgpLXgpL4g4KSq4KWN4KSw4KSm4KS+4KSv4KSV4KS44KSB4KSXIOCkuOCkruCljeCkquCksOCljeCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjAxNTk0OTA1MTUyNzQ2ODg2Ij4i4KSF4KSY4KS/4KSy4KWN4KSy4KWLIOCkn+CljeCksOCkr+CkvuCklSDgpKzgpJ/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjA4OTI5NzY1MDQ4MTI5MjM2MyI+IuCkheCksOCljeCkleCliyDgpJ/gpY3gpLDgpK/gpL7gpJUg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU5MDg4Nzg2NzgwMTI4MDAxIj4i4KSw4KWL4KSV4KWN4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI1ODg4NDIyOTM4MzUxMDE5NDI2Ij4i4KSs4KSc4KS+4KSJ4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTYyMzE4Mzc4NzY2OTg3NjAxIj4i4KSs4KSf4KSoIOCksOCli+CkleCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsc19vbmx5IiBtc2dpZD0iNjczMzk3ODMwNDM4NjM2NTQwNyI+IuCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpJXgpLLgpLngpLDgpYIg4KSu4KS+4KSk4KWN4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMTQzMzg5MjI0OTg2MDI4NTAxIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCksuCklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4iU0lNIOCkleCkvuCksOCljeCkoSBQVUst4KSy4KSVIOCkl+CksOCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSo4KS/4KSw4KWN4KSm4KWH4KS24KSVIOCkteCkviDgpJfgpY3gpLDgpL7gpLngpJUg4KS44KWH4KS14KS+IOCkuOCkruCljeCkquCksOCljeCklSDgpLngpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjgwNjY2NjAxMjkyMDYwMDEwMzkiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCksuCklSDgpJfgpLDgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNTk1MzIzMjE0MDUyODgxMjY0Ij4iU0lNIOCkleCkvuCksOCljeCkoSDgpIXgpKjgpLLgpJUg4KSX4KSw4KS/4KSB4KSm4KWILi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2NDgxNjIzODMwMzQ0MTA3MjIyIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIXgpKjgpLLgpJUg4KSi4KS+4KSB4KSa4KS+IOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkluCkv+CkmuCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpJXgpYvgpLjgpL/gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSIyNzI1OTczMjg2MjM5MzQ0NTU1Ij4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkquCkvuCkuOCkteCksOCljeCkoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkreCkr+Cli+ClpCBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJbgpL/gpJrgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCDgpKrgpJvgpL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSl4KSqIOCkheCkuOCkq+CksiDgpJXgpYvgpLjgpL/gpLjgpLngpLDgpYIsIOCkpOCkquCkvuCkiOCkgeCkleCliyBHb29nbGUg4KS44KS+4KSH4KSoIOCkh+CkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWAIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpK3gpKjgpL/gpKjgpYcg4KSb4KWkXG5cbiAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI1OTAyMjc1NTk3NjM3NjI3NTEiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL7gpLLgpL7gpIgg4KSV4KWL4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQg4KSq4KSb4KS/IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkheCksOClgiDgpKfgpYfgpLDgpYgg4KSF4KS44KSr4KSyIOCkleCli+CkuOCkv+CkuOCkueCksOClguCkquCkm+Ckvywg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKggR29vZ2xlIOCkuOCkvuCkh+CkqCDgpIfgpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CksCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpYvgpKfgpL/gpKjgpYcg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquClgeCkqOCkgyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxMjgxMDYzOTk3NDU3NTU2MDQiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkleCli+CktuCkv+CkuCDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpYsg4KSb4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkheCksOClgiDgpKfgpYfgpLDgpYgg4KSF4KS44KSr4KSyIOCkleCli+CkuOCkv+CkuOCkueCksOClguCkquCkm+Ckvywg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkq+CljeCkr+CkvuCkn+CljeCksOCkvyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkueClgeCkqOClhyDgpJsg4KSwIOCkuOCkrOCliCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSh4KWH4KSf4KS+IOCkueCksOCkvuCkieCkqOClhyDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2MDM1NjUxNDIxNTY4MjY1NjUiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSr4KWL4KSoIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkl+CksOCljeCkqOClgeCkreCkr+Cli+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKzgpKLgpYAg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkpOCljeCkqOCkueCksOClgiDgpKrgpJvgpL8sIOCkq+Cli+CkqCDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpLngpYHgpKjgpYcg4KSbIOCksCDgpLjgpKzgpYgg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjgwODczNTE2NDkzOTM0MzY1Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkn+CljeCkr+CkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQg4KSF4KSsIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpL/gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpKvgpYvgpKggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KWHIOCkquCljeCksOCkr+CkpOCljeCkqCDgpJfgpLDgpY3gpKjgpYHgpK3gpK/gpYvgpaQg4KSF4KSsIOCkq+Cli+CkqCDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpLngpYHgpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjI1MTQ4MDM0MzM5NDM4OTY2NSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iMjYyNjk5OTQ0OTYxMDY5NTkzMCI+IuCkouCkvuCkgeCkmuCkviDgpKzgpL/gpLDgpY3gpLjgpKjgpYEg4KSt4KSv4KWLPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+IuCkluCkvuCkpOCkviDgpIXgpKjgpLLgpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiLgpKjgpL/gpJXgpYgg4KSn4KWH4KSw4KWIIOCkleCli+CkuOCkv+CkuOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+Ckvywg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIEdvb2dsZSDgpJbgpL7gpKTgpL7gpLjgpIHgpJcg4KS44KS+4KSH4KSoIOCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iODg0Njg4MTQyNDEwNjQ4NDQ0NyI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkqOCkvuCkriAo4KSH4KSu4KWH4KSyKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI1OTU4MDI4MzgzOTU0NzM4NTI4Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4i4KS44KS+4KSH4KSoIOCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iMTM2NDA1MTQ3MzM0NzQ4NTkwOCI+IuCkheCkruCkvuCkqOCljeCkryDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpKjgpL7gpK4g4KS14KS+IOCkquCkvuCkuOCkteCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjE2OTY5MjQ3NjM2OTAzNzkwNzMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkv+CksOCljeCkuOCkqOClgeCkreCkr+Cliz9cbiDgpK3gpY3gpLDgpK7gpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS4IjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iNzExNDYyNzM1MTI4NjkzMzg2NyI+IuCknOCkvuCkgeCkmiDgpJfgpLDgpY3gpKbgpYguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3VubG9ja19sYWJlbCIgbXNnaWQ9IjczNzQ0MDQ4MzIyMDY2NzA1NCI+IuCkluCli+CksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4i4KSG4KS14KS+4KScIOCkmuCkvuCksuClgSDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29mZl9sYWJlbCIgbXNnaWQ9Ijk5NjgyMjgyNTE1NDMxOTAyNiI+IuCkp+CljeCkteCkqOCkvyDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX3N0YXJ0IiBtc2dpZD0iMzk0MTA0NTUwMjkzMzE0Mjg0NyI+IuCkouCkvuCkgeCkmuCkviDgpLjgpYHgpLDgpYEg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jbGVhcmVkIiBtc2dpZD0iNTU4MzQ3OTcyMTAwMTYzOTU3OSI+IuCkouCkvuCkgeCkmuCkviDgpLngpJ/gpL7gpIfgpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NlbGxfYWRkZWQiIG1zZ2lkPSI2NzU2MDMxMjA4MzU5MjkyNDg3Ij4i4KS44KWH4KSyIOCkpeCkqiDgpJfgpLDgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2RldGVjdGVkIiBtc2dpZD0iNDk4ODczMDg5NTU1NDA1NzA1OCI+IuCkouCkvuCkgeCkmuCkviDgpKrgpYHgpLDgpL4g4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiDgpLXgpL/gpJzgpYfgpJ8gJTIkZCBvZiAlMyRk4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IuCkteCkv+CknOClh+CknyDgpKXgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLgpJbgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+IuCkheCkqOCksuCklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KS14KS/4KS44KWN4KSk4KS+4KSwIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IuCkheCkqOCksuCklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KSt4KSk4KWN4KSV4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4KS14KS/4KSc4KWH4KSf4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpJvgpKjgpYzgpJ/gpJXgpLDgpY3gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiLgpLjgpY3gpKXgpL/gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i4KSu4KS/4KSh4KS/4KSv4KS+IOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCko+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i4KS14KS/4KSc4KWH4KSfIOCkquClgeCkqOCkg+CkleCljeCksOCkriDgpJfgpLDgpY3gpKjgpYcg4KS44KWB4KSw4KWBIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IuCkteCkv+CknOClh+CknyDgpKrgpYHgpKjgpIPgpJXgpY3gpLDgpK4g4KS44KSu4KS+4KSq4KWN4KSkIOCkreCkj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IuCkteCkv+CknOClh+CknyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDgpK7gpYfgpJ/gpL7gpIfgpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLgpIXgpKjgpLLgpJUg4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IuCkuOCljeCksuCkvuCkh+CkoSDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IuCkouCkvuCkgeCkmuCkviDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IuCkq+Clh+CkuCDgpIXgpKjgpLLgpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUGluIOCkheCkqOCksuCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IuCkquCkvuCkuOCkteCksOCljeCkoSDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLgpKLgpL7gpIHgpJrgpL4g4KSV4KWN4KS34KWH4KSk4KWN4KSw4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IuCkuOCljeCksuCkvuCkh+CkoSDgpJXgpY3gpLfgpYfgpKTgpY3gpLDgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iP+Clp+ClqOClqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2NoYXJhY3RlciIgbXNnaWQ9IjczMzY0NzA1MzUzODUwMDk1MjMiPiLgpIXgpJXgpY3gpLfgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF93b3JkIiBtc2dpZD0iNzA3NTU3MDMyODM3NDkxODY2MCI+IuCktuCkrOCljeCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2xpbmsiIG1zZ2lkPSI1ODE1NTA4ODgwNzgyNDg4MjY3Ij4i4KSy4KS/4KSZ4KWN4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluZSIgbXNnaWQ9IjU3NjQyNjcyMzUwMjYxMjA4ODgiPiLgpLLgpL7gpIfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX2FtcG0iIG1zZ2lkPSI0NTg0MzM4MDgzNTI5MzU1OTgyIj4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JVA8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9jYXBfYW1wbSIgbXNnaWQ9IjIwODM0NjU5OTI5NDA0NDQzNjYiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lcDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9mYWlsZWQiIG1zZ2lkPSI1NDEwMjcwMzI5MTE0MjEyMDQxIj4i4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+IOCkquCksOClgOCkleCljeCkt+CkoyDgpIXgpLjgpKvgpLIg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiJGQUNUT1JZX1RFU1Qg4KSV4KS+4KSw4KWN4KSw4KS14KS+4KSH4KSy4KWHIC9zeXN0ZW0vYXBwIOCkruCkviDgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSq4KWN4KSv4KS+4KSV4KWH4KSc4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpK7gpL7gpKTgpY3gpLAg4KS44KSu4KSw4KWN4KSl4KSoIOCkl+CksOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+IuCkleClgeCkqOCliCDgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KSr4KWH4KSy4KS+IOCkquCkvuCksOCljeCkqCDgpLjgpJXgpL/gpI/gpKgg4KSc4KS44KSy4KWHIEZBQ1RPUllfVEVTVCDgpJXgpL7gpLDgpY3gpK8g4KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X3JlYm9vdCIgbXNnaWQ9IjYzMjAxNjgyMDMwNTA3OTE2NDMiPiLgpKrgpYHgpKjgpIPgpKzgpYHgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMTk4NzQ4Mzk3NzgzNDYwMzg3MiI+IuCkr+CkuCBcIjx4bGlmZjpnIGlkPSJUSVRMRSI+JXM8L3hsaWZmOmc+XCIg4KSu4KS+IOCkreCkj+CkleCliyDgpKrgpYPgpLfgpY3gpKDgpLLgpYcg4KSs4KSk4KS+4KSJ4KSB4KSbOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNjk2MTkwMzIxMzcyOTY2NzU3MyI+IuCknOCkvuCkreCkvuCkuOCljeCkleCljeCksOCkv+CkquCljeCknyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3RpdGxlIiBtc2dpZD0iMjYxOTM3NjU1NTUyNTExNjU5MyI+IuCkruCkvuCksOCljeCkl+CkqOCkv+CksOCljeCkpuClh+CktuCkqCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfcG9zaXRpdmVfYnV0dG9uIiBtc2dpZD0iMzExMjc1MjAxMDYwMDQ4NDEzMCI+IuCkr+CkuCDgpKrgpYPgpLfgpY3gpKDgpLLgpL7gpIgg4KSb4KWL4KSh4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfbmVnYXRpdmVfYnV0dG9uIiBtc2dpZD0iNTYxNDg2MTI5MzAyNjA5OTcxNSI+IuCkr+CkueClgCDgpKrgpYPgpLfgpY3gpKDgpK7gpL4g4KSw4KS54KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWQiIG1zZ2lkPSIzNDY4ODE2MzU3MDk1Mzc4NTkwIj4iPHhsaWZmOmcgaWQ9Ik1FU1NBR0UiPiVzPC94bGlmZjpnPlxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CliyDgpKrgpYfgpJzgpKzgpL7gpJ8g4KSo4KWH4KSt4KS/4KSX4KWH4KSfIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYEg4KS54KWB4KSo4KWN4KSbIOCkreCkqOCljeCkqOClhyDgpKjgpL/gpLbgpY3gpJrgpKQg4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbGFiZWwiIG1zZ2lkPSI2ODYwMjYxNzU4NjY1ODI1MDY5Ij4i4KSo4KS/4KS24KWN4KSa4KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvdWJsZV90YXBfdG9hc3QiIG1zZ2lkPSI0NTk1MDQ2NTE1NDAwMjY4ODgxIj4i4KSc4KWB4KSV4KWN4KSk4KS/OiDgpJzgpYHgpK7gpLLgpL7gpIgg4KSg4KWC4KSy4KWLIOCksCDgpLjgpL7gpKjgpYsg4KSq4KS+4KSw4KWN4KSoIOCkpuClgeCkiCDgpKrgpJ/gpJUg4KS54KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfdGhpc19mb3JtIiBtc2dpZD0iNDYxNjc1ODg0MTE1NzgxNjY3NiI+IuCkuOCljeCkteCkpOCkgyDgpK3gpLDgpY3gpKjgpYciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXR1cF9hdXRvZmlsbCIgbXNnaWQ9IjcxMDM0OTUwNzAxODA1OTA4MTQiPiLgpIXgpJ/gpYvgpKvgpL/gpLIg4KS44KWH4KSf4KSF4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3NfbmFtZV9zZXBhcmF0b3IiIG1zZ2lkPSI2MzUwMTQ1MTU0Nzc5NzA2NzcyIj4iICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9uYW1lX2Zvcm1hdCIgbXNnaWQ9IjMyNjgwNDEwNTQ4OTkyMTQ5NDUiPiIk4KWnJOClqCTgpakiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfc2VwYXJhdG9yIiBtc2dpZD0iNzQ4MzMwNzg5MzE3MDMyNDEyOSI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X2Zvcm1hdCIgbXNnaWQ9IjQ4NzQ0NTk0NTU3ODY4MjczNDQiPiIkMSQyJDMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcm92aW5jZSIgbXNnaWQ9IjIyMzE4MDY1NTM4NjM0MjIzMDAiPiLgpKrgpY3gpLDgpL7gpKjgpY3gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wb3N0YWxfY29kZSIgbXNnaWQ9IjQ2OTY0MzA0MDc2ODkzNzcxMDgiPiLgpLngpYHgpLLgpL7gpJXgpYAg4KSV4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfc3RhdGUiIG1zZ2lkPSI2OTg4ODk0MTk1NTIwMDQ0NjEzIj4i4KSw4KS+4KSc4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfemlwX2NvZGUiIG1zZ2lkPSI4Njk3NTQ0NTkyNjI3MzIyOTQ2Ij4iWklQIOCkleCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2NvdW50eSIgbXNnaWQ9IjIzNzA3Mzc3MTAyMDM2Mjg5MSI+IuCkleCkvuCkieCkqOCljeCkn+ClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2lzbGFuZCIgbXNnaWQ9IjQwMjAxMDA4NzU5ODQ2NjcwMjUiPiLgpJ/gpL7gpKrgpYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kaXN0cmljdCIgbXNnaWQ9Ijg0MDA3MzUwNzMzOTIyNjc2NzIiPiLgpJzgpL/gpLLgpY3gpLLgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kZXBhcnRtZW50IiBtc2dpZD0iNTM0MzI3OTQ2MjU2NDQ1MzMwOSI+IuCkteCkv+CkreCkvuCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ByZWZlY3R1cmUiIG1zZ2lkPSIyMDI4NDk5NDg1MDY1ODAwNDE5Ij4i4KSq4KWN4KSw4KS24KS+4KS44KSV4KWA4KSvIOCkleCljeCkt+Clh+CkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3BhcmlzaCIgbXNnaWQ9IjgyMDIyMDYxMDU0Njg4MjAwNTciPiLgpKrgpYfgpLDgpL/gpLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hcmVhIiBtc2dpZD0iMzU0NzQwOTA1MDg4OTk1MjQyMyI+IuCkleCljeCkt+Clh+CkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2VtaXJhdGUiIG1zZ2lkPSIyODkzODgwOTc4ODM1Njk4ODE4Ij4i4KSH4KSu4KS/4KSw4KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3NzUyNjU3NzU0MDUxMDY5ODMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSV4KS54KSw4KWCIOCksCDgpIfgpKTgpL/gpLngpL7gpLgg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4i4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSy4KWHIOCkreCljeCksOCkruCkoyDgpJfgpLDgpYfgpJXgpYsg4KS44KSs4KWIIFVSTCDgpLngpLDgpYLgpJXgpYsg4KSH4KSk4KS/4KS54KS+4KS4IOCksCDgpKzgpY3gpLDgpL7gpIngpJzgpLDgpJXgpL4g4KS44KSs4KWIIOCkrOClgeCkleCkruCkvuCksOCljeCkleCkueCksOClgiDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkqOCli+Cknzog4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CksuCkvuCkiCDgpKTgpYfgpLjgpY3gpLDgpYsg4KSq4KSV4KWN4KS3IOCkrOCljeCksOCkvuCkieCknOCksOCkueCksOClguCkpuCljeCkteCkvuCksOCkviDgpLXgpL4g4KS14KWH4KSsIOCkrOCljeCksOCkvuCkieCknCDgpJfgpLDgpY3gpKjgpYcg4KSV4KWN4KS34KSu4KSk4KS+4KSm4KWN4KS14KS+4KSw4KS+IOCkrOCksuCkquClguCksOCljeCkteCklSDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KS/4KSB4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzE0Nzg1MTY1MjczMzE0NDkwIj4i4KS14KWH4KSsIOCkrOClgeCkleCkruCkvuCksOCljeCkleCkueCksOClgiDgpLAg4KSH4KSk4KS/4KS54KS+4KS4IOCksuClh+CkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkreCko+CljeCkoeCkvuCksCDgpJfgpLDgpL/gpI/gpJXgpYsg4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSV4KWLIOCkh+CkpOCkv+CkueCkvuCkuCDgpLXgpL4g4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSV4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkrOCljeCksOCkvuCknOCksCDgpKHgpYfgpJ/gpL4g4KSu4KWH4KSf4KS+4KSJ4KSoIOCkteCkviDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KS44KSV4KWN4KSm4KSb4KWkIOCkn+Ckv+CkquCljeCkquCko+ClgDog4KSv4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpLXgpYfgpKwg4KSs4KWN4KSw4KS+4KSJ4KScIOCkl+CksOCljeCkqOClhyDgpJXgpY3gpLfgpK7gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KS44KS+4KSlIOCkpOClh+CkuOCljeCksOCliy3gpKrgpL7gpLDgpY3gpJ/gpYAg4KSs4KWN4KSw4KS+4KSJ4KSc4KSwIOCkteCkviDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSm4KWN4KS14KS+4KSw4KS+IOCksuCkvuCkl+ClgiDgpJfgpLDgpL/gpI/gpJXgpYsg4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ5NzM4OTUzMTAxNDE4NTUwOSI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKjgpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkreCkj+CkleCliyDgpKzgpY3gpLDgpL7gpIngpJzgpLDgpJXgpYsg4KSH4KSk4KS/4KS54KS+4KS4IOCkteCkviDgpKzgpYHgpJXgpK7gpL7gpLDgpY3gpJXgpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkuOCkvuCkr+CkpiDgpKzgpY3gpLDgpL7gpIngpJzgpLAg4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkruClh+Ckn+CljeCkqCDgpLXgpL4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSo4KWL4KSfOiDgpLXgpYfgpKwg4KSs4KWN4KSw4KS+4KSJ4KScIOCkl+CksOCljeCkqOClhyDgpJXgpY3gpLfgpK7gpKTgpL7gpLjgpLngpL/gpKTgpJXgpL4g4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLXgpL4g4KSk4KWH4KS44KWN4KSw4KWLLSDgpKrgpJXgpY3gpLcg4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSm4KWN4KS14KS+4KSw4KS+IOCkuOCkvuCkr+CkpiDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KS+4KSIIOCksuCkvuCkl+ClgSDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSC4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbGFybSIgbXNnaWQ9IjEzNzkyOTQ1NTYzNjIwOTE4MTQiPiLgpI/gpIngpJ/gpL4g4KSG4KSy4KSw4KWN4KSuIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbGFybSIgbXNnaWQ9IjMxNjM5MjAzOTE1NzQ3Mzg0OCI+IuCkuOCljeCkpeCkvuCkquCkqOCkviDgpJfgpLDgpL/gpI/gpJXgpYsg4KS44KSZ4KWN4KSV4KWH4KSkIOCkmOCkoeClgCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KS44KSZ4KWN4KSV4KWH4KSkIOCkuOCkruCkryDgpK7gpL/gpLLgpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSV4KWH4KS54KWAIOCkuOCkmeCljeCkleClh+CkpCDgpJjgpKHgpYAg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyDgpLjgpYHgpLXgpL/gpKfgpL4g4KSV4KS+4KSw4KWN4KSv4KS+4KSo4KWN4KS14KSv4KSoIOCkqOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjU1MjU2NjAwMjYwOTA5NTkwNDQiPiLgpK3gpY3gpLXgpL7gpIfgpLjgpK7gpYfgpLIg4KSl4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjY2MDQ1MDg2NTE0MjgyNTI0MzciPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSt4KWN4KS14KS+4KSH4KS44KSu4KWH4KSyIOCkh+CkqOCkrOCkleCljeCkuOCkruCkviDgpLjgpKjgpY3gpKbgpYfgpLYg4KSl4KSq4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iNTk2MjIyNDE1ODk1NTI3MzkzMiI+IuCkreClguCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpK7gpKTgpL/gpLngpLDgpYIg4KSs4KWN4KSw4KS+4KSJ4KSc4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSIxMDgzNzQzMjM0NTIyNjM4NzQ3Ij4i4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSV4KWLIOCkreClgi3gpLjgpY3gpKXgpL7gpKgg4KSF4KSo4KWB4KSu4KSk4KS/4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyAg4KS44KWN4KSl4KS+4KSoIOCkuOClguCkmuCkqOCkviDgpK7gpKjgpKrgpLDgpYAg4KS14KWH4KSsIOCkuOCkvuCkh+Ckn+CkueCksOClguCkruCkviDgpKrgpKDgpL7gpIngpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/4KSV4KWLIOCksuCkvuCkl+CkvyDgpK/gpLjgpLLgpL7gpIgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9IjU1NjgxMzkxMDA2NDU4MjkxMTciPiLgpKrgpY3gpK/gpJXgpYfgpJzgpLngpLDgpYLgpJXgpYsg4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9Ijg0Mzc1OTAxOTA5OTA4NDMzODEiPiLgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkr+Cli+Ckl+CljeCkryDgpJsg4KSV4KS/IOCkreCkqOClh+CksCDgpLDgpYHgpJzgpYEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iNDE4Nzc4Njc5MzM2MDMyNjY1NCI+IuCkj+CkieCkn+CkviDgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KSw4KWB4KSc4KWB4KSV4KSw4KWN4KSk4KS+4KSu4KS+IOCkrOCkvuCkgeCkp+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSIzMTgwNzQxNzczMjMzODYyMTI2Ij4i4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkquCljeCkr+CkvuCkleClh+CknCDgpKrgpY3gpLDgpK7gpL7gpKPgpL/gpKTgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KSF4KSo4KWB4KSw4KWL4KSn4KS54KSw4KWCIOCkrOCkqOCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWHIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VyaWFsUG9ydCIgbXNnaWQ9IjU0NjA4MzMyNzY1NDYzMTA3NiI+IuCkquCkueClgeCkgeCkmiDgpLjgpL/gpLDgpL/gpK/gpLIg4KSq4KWL4KSw4KWN4KSf4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiLgpLngpYvgpLLgpY3gpKHgpLDgpLLgpL7gpIggU2VyaWFsTWFuYWdlciBBUEkg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CksCDgpLjgpL/gpLDgpL/gpK/gpLIg4KSq4KWL4KSw4KWN4KSf4KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI1MDc3Nzc0Mjk3OTQzNDA5Mjg1Ij4i4KS14KS/4KS34KSv4KS44KWC4KSa4KWAIOCkquCljeCksOCkpuCkvuCkpOCkvuCksuCkvuCkiCDgpKzgpL7gpLngpY3gpK8g4KSw4KWC4KSq4KSu4KS+IOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjQ1NDQzNDY0ODY2OTc4NTM2ODUiPiLgpLjgpYfgpLLgpKzgpL7gpJ8g4KSn4KS+4KSw4KSV4KSy4KWHIOCkteCkv+Ckt+Ckr+CkteCkuOCljeCkpOClgSDgpKrgpY3gpLDgpKbgpL7gpK/gpJXgpLngpLDgpYLgpLjgpK7gpY3gpK7gpJXgpYsg4KSq4KS54KWB4KSB4KSaIOCkquCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKbgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4i4KS44KWN4KS14KSa4KS+4KSy4KS/4KSkIOCkieCkquCkleCksOCkoyDgpIXgpKrgpKHgpYfgpJ/gpLngpLDgpYIg4KS54KSk4KWL4KSk4KWN4KS44KS+4KS54KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUxvY2siIG1zZ2lkPSIxNjU1NjI1ODMyMTY2Nzc4NDkyIj4i4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkieCkquCkleCksOCkoyDgpIXgpKrgpJfgpY3gpLDgpYfgpKEg4KSX4KSw4KWN4KSoIOCkl+CliOCksCDgpKrgpL7gpLDgpLjgpY3gpKrgpLDgpL/gpJUg4KSq4KWB4KSo4KSD4KSs4KWB4KSf4KSV4KWLIOCksuCkvuCkl+CkvyDgpIngpJrgpL/gpKQg4KS44KSu4KSv4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpK7gpL4g4KSc4KS+4KSo4KS+4KSV4KS+4KSw4KWAIOCkquCljeCksOCkuOCljeCkpOCkvuCkteCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbWVzc2FnZSIgbXNnaWQ9Ijc2NzM0NDY4NzEzOTE5NTc5MCI+IuCkleClhyDgpKTgpKrgpL7gpIjgpIIg4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSy4KWHIOCkr+CliyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KS44KSu4KWN4KSd4KWH4KSV4KWLIOCkmuCkvuCkueCkqOClgeCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25vdG5vdyIgbXNnaWQ9IjYzODk2NzUzMTY3MDY2OTk3NTgiPiLgpIXgpLngpL/gpLLgpYcg4KS54KWL4KSH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9yZW1lbWJlciIgbXNnaWQ9IjY0OTE4Nzk2Nzg5OTY3NDk0NjYiPiLgpLjgpK7gpY3gpJ3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25ldmVyIiBtc2dpZD0iODI3NDMzMDI5Njc4NTg1NTEwNSI+IuCkleCkueCkv+CksuCljeCkr+CliCDgpKrgpKjgpL8g4KS54KWL4KSH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4i4KSv4KWLIOCkquClg+Ckt+CljeCkoCDgpJbgpYvgpLLgpY3gpKgg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXh0X2NvcGllZCIgbXNnaWQ9IjQ5ODU3Mjk1MjQ2NzAxMzEzODUiPiLgpJXgpY3gpLLgpL/gpKrgpKzgpYvgpLDgpY3gpKHgpK7gpL4g4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSqIOCkl+CksOCkv+Ckj+CkleCliyDgpKrgpL7gpKDgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb3JlX2l0ZW1fbGFiZWwiIG1zZ2lkPSI0NjUwOTE4OTIzMDgzMzIwNDk1Ij4i4KSs4KSi4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcGVuZF9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI1NzIyMTQ0NjE2NzYwMTU2NDIiPiLgpK7gpYfgpKjgpYErIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zcGFjZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI0MTAzMjg2MzkyNzIxNjI1MzciPiLgpKDgpL7gpIngpIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2VudGVyX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjc0MzM2Mjc4NTExMTMwOTY2OCI+IuCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjM2NTgxNzgwMDcyMDI3NDgxNjQiPiLgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2hfZ28iIG1zZ2lkPSI4Mjk4MDE2NjY5ODIyMTQxNzE5Ij4i4KSW4KWL4KSc4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zZWFyY2giIG1zZ2lkPSI2NzQ5ODI2NjM5MDk4NTEyMTIwIj4i4KSW4KWL4KSc4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9xdWVyeSIgbXNnaWQ9IjU5MTE3Nzg1OTMxMjUzNTUxMjQiPiLgpJzgpL/gpJzgpY3gpJ7gpL7gpLjgpL4g4KSW4KWL4KScIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fY2xlYXIiIG1zZ2lkPSIxMzMwMjgxOTkwOTUxODMzMDMzIj4i4KSq4KWN4KSw4KS24KWN4oCN4KSoIOCkueCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc3VibWl0IiBtc2dpZD0iMjY4ODQ1MDEzMzI5Nzk4MzU0MiI+IuCknOCkv+CknOCljeCknuCkvuCkuOCkviDgpKrgpYfgpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl92b2ljZSIgbXNnaWQ9IjI0NTMyMDM2OTU2NzQ5OTQ0NDAiPiLgpK3gpY3gpLXgpL7gpIfgpLgg4KSW4KWL4KSc4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ190aXRsZSIgbXNnaWQ9Ijc0NjA2OTQwNzAzMDk3MzAxNDkiPiLgpJvgpYvgpI/gpLAg4KSF4KSo4KWN4KS14KWH4KS34KSjIOCkl+CksOCljeCkqOClhyDgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NjU1ODg3NTM5MDg5OTEwNTc3Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPuCksuClhyDgpLjgpY3gpKrgpLDgpY3gpLfgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSo4KWN4KS14KWH4KS34KSjIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWN4KSb4KWkIOCkuOCljeCkquCksOCljeCkt+CkpuCljeCkteCkvuCksOCkviDgpIXgpKjgpY3gpLXgpYfgpLfgpKMg4KS44KSV4KWN4KS34KSuIOCkreCkj+CkleCliyDgpKzgpYfgpLLgpL4sIOCkpOCkquCkvuCkiOCkgSDgpIbgpKvgpY3gpKjgpYsg4KSU4KSB4KSy4KS+4KSV4KWLIOCkruClgeCkqOCkvyDgpK3gpI/gpJXgpL4g4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWB4KS54KSw4KWCIOCkrOCkvuCksOClhyDgpLjgpYHgpKjgpY3gpKgg4KS14KS+IOCkteCkv+CkteCksOCkoyDgpLngpYfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkteCkviDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLjgpIHgpJcg4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpIfgpLbgpL7gpLDgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjcwODE5OTY3Mjg1MjM3MzE5NSI+Ijx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz7gpLLgpYcg4KS44KWN4KSq4KSw4KWN4KS34KSm4KWN4KS14KS+4KSw4KS+IOCkheCkqOCljeCkteClh+Ckt+CkoyDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOCljeCkm+ClpCDgpLjgpY3gpKrgpLDgpY3gpLfgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSo4KWN4KS14KWH4KS34KSjIOCkuOCkleCljeCkt+CkriDgpK3gpI/gpJXgpYsg4KSs4KWH4KSy4KS+IOCkpOCkquCkvuCkiOCkgSDgpIbgpKvgpY3gpKjgpYsg4KSU4KSB4KSy4KS+4KSV4KWLIOCkruClgeCkqOCkvyDgpK3gpI/gpJXgpL4g4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWB4KS54KSw4KWCIOCkrOCkvuCksOClhyDgpLjgpYHgpKjgpY3gpKgg4KS14KS+IOCkteCkv+CkteCksOCkoyDgpLngpYfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkteCkviDgpKvgpYvgpKjgpLjgpIHgpJcg4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpIfgpLbgpL7gpLDgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI3Mzk2Mzg0NTA4OTUzNzc5OTI1Ij4i4KWnIOCkruCkueCkv+CkqOCkviDgpIXgpJjgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiZWZvcmVPbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjkwOTEzNDU0NjgzNjQ5OTgyNiI+IuClpyDgpK7gpLngpL/gpKjgpL4g4KSF4KSY4KS/Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJudW1fc2Vjb25kc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0ODY5ODcwMDU2NTQ3ODk2MDExIj4i4KWnIOCkuOClh+CkleClh+CkqOCljeCkoSDgpIXgpJjgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM5MDM3MDY4MDQzNDk1NTYzNzkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKEg4KSF4KSY4KS/IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJudW1fbWludXRlc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMzA2Nzg3NDMzMDg4ODEwMTkxIj4i4KWnIOCkruCkv+CkqOClh+CknyDgpIXgpJjgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIxNzY5NDIwMDg5MTU0NTUxMTYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpK7gpL/gpKjgpYfgpJ8g4KSF4KSY4KS/IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJudW1faG91cnNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iOTE1MDc5Nzk0NDYxMDgyMTg0OSI+IuClpyDgpJjgpKjgpY3gpJ/gpL4g4KSF4KSY4KS/IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDY3MjczMjM5NTg3NTg3NTY5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSY4KSo4KWN4KSf4KS+IOCkheCkmOCkvyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0ibGFzdF9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzA2OTk5MjgwODE2NDMxODI2OCI+IuCkheCkqOCljeCkpOCkv+CkriA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpKbgpL/gpKgiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJsYXN0X21vbnRoIiBtc2dpZD0iMzk1OTM0NjczOTk3OTA1NTQzMiI+IuCkheCkqOCljeCkpOCkv+CkriDgpK7gpLngpL/gpKjgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRlciIgbXNnaWQ9IjUyMTE5NzUwMjI4MTU1NTQ4NDAiPiLgpKrgpYHgpLDgpL7gpKjgpYsiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9kYXlzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg2MTM1ODUzNDM5ODExNTgyMCI+IuCkueCkv+CknOCliyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjQ3OTU4NjQ2NjE1MzMxNDYzMyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOCkpuCkv+CkqCDgpIXgpJjgpL8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9zZWNvbmRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjcyOTc0NTU2MDk1NDkwNTEwMiI+IuClpyDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEyNDE5MjYxMTY0NDM5NzQ2ODciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODc5MzA5NTI1MTMyNTIwMDM5NSI+IuClpyDgpK7gpL/gpKjgpYfgpJ/gpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMzMzA3MTM5MzYzOTk0NDg3NDkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPuCkruCkv+CkqOClh+Ckn+CkruCkviI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNzE2NDM1MzM0MjQ3Nzc2OTk5OSI+IuClpyDgpJjgpKjgpY3gpJ/gpL7gpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzI5MDY3NzM1MzcyNzM4OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOCkmOCkqOCljeCkn+CkvuCkruCkviI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NDEzMDg4NzQzMDA5ODM5NTE4Ij4i4KSt4KWL4KSy4KS/IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1MTA5NDQ5Mzc1MTAwOTUzMjQ3Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSm4KS/4KSo4KSu4KS+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX3NlY29uZHNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTg0OTAzNjg0MDIwMDA2OTExOCI+IuClpyDgpLjgpYfgpJXgpYfgpKjgpY3gpKEg4KSF4KSY4KS/IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNjk5MTY5MzY2NjUwOTMwNDE1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KShIOCkheCkl+CkvuCkoeCkvyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9taW51dGVzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjYzNjE0OTAxNDcxMTM4NzE1NDUiPiLgpacg4KSu4KS/4KSo4KWH4KSfIOCkheCkmOCkvyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODUxMTY0OTY4NTk3MTUwNzEwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSu4KS/4KSo4KWH4KSfIOCkheCkmOCkvyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9ob3Vyc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0Nzk2MjEyMDM5NzI0NzIyMTE2Ij4i4KWnIOCkmOCkqOCljeCkn+CkviDgpIXgpJjgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY4ODk5NzA3NDU3NDg1Mzg5MDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpJjgpKjgpY3gpJ/gpL4g4KSF4KSY4KS/IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2RheXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODQ2MzE2MTcxMTQ5MjY4MDMwOSI+IuCkueCkv+CknOCliyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzQ1MzM0MjYzOTYxNjQ4MTE5MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOCkpuCkv+CkqCDgpIXgpJjgpL8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NDIyMjUzNzA3OTUwNjYyOTkiPiLgpacg4KS44KWH4KSV4KSo4KWN4KShIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDk1ODgwMTA4ODI1ODA1MTA4Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX21pbnV0ZXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NjI3ODYxNDk5MjgyODQ4NzgiPiLgpacg4KSu4KS/4KSo4KWH4KSf4KSu4KS+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MjE2MTEzMjkyNzA2NTY4NzI2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSu4KS/4KSo4KWH4KSf4KSu4KS+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI3NDcwODExODEyNDA0NTI0NiI+IuClpyDgpJjgpKjgpY3gpJ/gpL7gpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM3MDUzNzM3NjY3OTgwMTM0MDYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpJjgpKjgpY3gpJ/gpL7gpK7gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjIxNzg1NzYyNTQzODU3Mzk4NTUiPiLgpK3gpYvgpLLgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI5NzMwNjI5NjgwMzgzNTU5OTEiPiLgpKbgpL/gpKg8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpK7gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfZGF0ZSIgbXNnaWQ9IjkwOTM5NDk3NTc3NTc0NDUxMTciPiI8eGxpZmY6ZyBpZD0iREFURSI+JXM8L3hsaWZmOmc+IOCkruCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl90aW1lIiBtc2dpZD0iNTUwNjgzMTI0NDI2MzA4Mzc5MyI+Ijx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4g4KSu4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3llYXIiIG1zZ2lkPSI1MDQwMzk1NjQwNzExODY3MTc3Ij4iPHhsaWZmOmcgaWQ9IllFQVIiPiVzPC94bGlmZjpnPiDgpK7gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXkiIG1zZ2lkPSI4MTQ0MTk1Nzc2MDU4MTE5NDI0Ij4i4KSm4KS/4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5cyIgbXNnaWQ9IjQ3NzQ1NDc2NjEwMjEzNDQ2MDIiPiLgpKbgpL/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyIiBtc2dpZD0iMjEyNjc3MTkxNjQyNjE4OTQ4MSI+IuCkmOCkqOCljeCkn+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJzIiBtc2dpZD0iODk0NDI0MDA1MjY2ODUyOTkzIj4i4KSY4KSo4KWN4KSf4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlIiBtc2dpZD0iOTE0ODg3ODY1NzcwMzc2OTg2OCI+IuCkruCkv+CkqOClh+CknyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZXMiIG1zZ2lkPSI1NjQ2MDAxMDA1ODI3MDM0NTA5Ij4i4KSu4KS/4KSo4KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kIiBtc2dpZD0iMzE4NDIzNTgwODAyMTQ3OCI+IuCkuOClh+CkleClh+CkqOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlY29uZHMiIG1zZ2lkPSIzMTYxNTE1MzQ3MjE2NTg5MjM1Ij4i4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VlayIgbXNnaWQ9IjU2MTc5NjE1MzcxNzMwNjE1ODMiPiLgpLngpKrgpY3gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWVrcyIgbXNnaWQ9IjY1MDk2MjM4MzQ1ODM5NDQ1MTgiPiLgpLngpKrgpY3gpKTgpL7gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyIiBtc2dpZD0iNDAwMTExODIyMTAxMzg5MjA3NiI+IuCkteCksOCljeCktyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJzIiBtc2dpZD0iNjg4MTU3NzcxNzk5MzIxMzUyMiI+IuCkteCksOCljeCkt+CkueCksOClgiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY5NjIwMTU1MjgzNzI5Njk0ODEiPiLgpacg4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxODg2MTA3NzY2NTc3MTY2Nzg2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJkdXJhdGlvbl9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDkxNTQxNDAwMjU0NjA4NTYxNyI+IuClpyDgpK7gpL/gpKjgpYfgpJ8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMxNjUxODcxNjkyMjQ5MDg3NzUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpK7gpL/gpKjgpYfgpJ8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODkxNzQ2NzQ5MTI0ODgwOTk3MiI+IuClpyDgpJjgpKjgpY3gpJ/gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM4NjM5NjI4NTQyNDY3NzM5MzAiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpJjgpKjgpY3gpJ/gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGl0bGUiIG1zZ2lkPSIzNTM0NTA5MTM1NDM4MzUzMDc3Ij4i4KSt4KS/4KSh4KS/4KSv4KWLIOCkuOCkruCkuOCljeCkr+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X2ludmFsaWRfcHJvZ3Jlc3NpdmVfcGxheWJhY2siIG1zZ2lkPSIzMTg2NjcwMzM1OTM4NjcwNDQ0Ij4i4KSv4KWLIOCkreCkv+CkoeCkv+Ckr+CliyDgpK/gpLgg4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpY3gpJ/gpY3gpLDgpL/gpK7gpL/gpJkg4KSX4KSw4KWN4KSoIOCkruCkvuCkqOCljeCkryDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF91bmtub3duIiBtc2dpZD0iMzQ1MDQzOTE1NTE4NzgxMDA4NSI+IuCkr+CliyDgpK3gpL/gpKHgpL/gpK/gpYsg4KSa4KSy4KS+4KSJ4KSoIOCkuOCkleCljeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl9idXR0b24iIG1zZ2lkPSIyODIyMjM4MjE1MTAwNjc5NTkyIj4i4KSg4KWA4KSVIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aXZlX3RpbWUiIG1zZ2lkPSIxODE4NTU3MTc3ODI5NDExNDE3Ij4iPHhsaWZmOmcgaWQ9IkRBVEUiPiUxJHM8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub29uIiBtc2dpZD0iNzI0NTM1MzUyODgxODU4NzkwOCI+IuCkruCkp+CljeCkr+CkvuCkqOCljeCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Ik5vb24iIG1zZ2lkPSIzMzQyMTI3NzQ1MjMwMDEzMTI3Ij4i4KSu4KSn4KWN4KSv4KS+4KSo4KWN4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWlkbmlnaHQiIG1zZ2lkPSI3MTY2MjU5NTA4ODUwNDU3NTk1Ij4i4KSu4KSn4KWN4KSv4KSw4KS+4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iTWlkbmlnaHQiIG1zZ2lkPSI1NjMwODA2OTA2ODk3ODkyMjAxIj4i4KSu4KSn4KWN4KSv4KSw4KS+4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9tbV9zcyIgbXNnaWQ9IjQ0MzE1NTU5NDM4Mjg3MTE0NzMiPiI8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTEkMDJkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iU0VDT05EUyI+JTIkMDJkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsYXBzZWRfdGltZV9zaG9ydF9mb3JtYXRfaF9tbV9zcyIgbXNnaWQ9IjE4NDYwNzE5OTc2MTY2NTQxMjQiPiI8eGxpZmY6ZyBpZD0iSE9VUlMiPiUxJGQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMiQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMyQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0QWxsIiBtc2dpZD0iNjg3NjUxODkyNTg0NDEyOTMzMSI+IuCkuOCkrOCliOCksuCkvuCkiCDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCkleCkvuCkn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSq4KS/IOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCkn+CkvuCkgeCkuOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4KS14KS/4KS44KWN4KSl4KS+4KSq4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCDgpJXgpYsg4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuCkquCkvuCkoCDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IuCkquCkvuCkoCDgpJrgpK/gpKjgpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4KS24KSs4KWN4KSm4KSV4KWL4KS24KSu4KS+IOCkpeCkquCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRNZXRob2QiIG1zZ2lkPSIxNjUzNjMwMDYyMzA0NTY3ODc5Ij4i4KSo4KS/4KS14KWH4KS2IOCkteCkv+Ckp+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVkaXRUZXh0TWVudVRpdGxlIiBtc2dpZD0iNDkwOTEzNTU2NDk0MTgxNTQ5NCI+IuCkquCkvuCkoCDgpJXgpL7gpLDgpY3gpK/gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RpdGxlIiBtc2dpZD0iNTU3NjI3MjQ5NjM2NTY4NDgzNCI+IuCkreCko+CljeCkoeCkvuCksOCkoyDgpKDgpL7gpIngpIEg4KS44KSV4KS/4KSB4KSm4KWIIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGV4dCIgbXNnaWQ9IjY2NDA1MDU4MTc2MTc0MTQzNzEiPiLgpLjgpL7gpK/gpKYg4KSV4KWH4KS54KWAIOCkquCljeCksOCko+CkvuCksuClgCDgpJXgpL7gpLDgpY3gpK/gpJXgpY3gpLDgpK7gpLngpLDgpYLgpLLgpYcg4KSV4KS+4KSuIOCkl+CksOCljeCkpuCliOCkqOCkqOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg3MTgzMzUxMjEwNjA3ODc5MTQiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkmuCksuCkv+CksOCkueClh+CkleCliyDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjQ2NTM1ODY5NDc3NDczMzAwNTgiPiLgpKXgpKog4KS44KWC4KSa4KSo4KS+4KSV4KWLIOCksuCkvuCkl+CkvyDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2siIG1zZ2lkPSI1OTcwMDYwNDMwNTYyNTI0OTEwIj4i4KSg4KS/4KSVIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjY0NDI1NjA1NzEyNTk5MzUxMzAiPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVzIiBtc2dpZD0iNTM2Mjk4MjMwMzMzNzk2OTMxMiI+IuCkoOCkv+CklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJubyIgbXNnaWQ9IjUxNDE1MzEwNDQ5MzU1NDE0OTciPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlhbG9nX2FsZXJ0X3RpdGxlIiBtc2dpZD0iMjA0OTY1ODcwODYwOTA0MzEwMyI+IuCkuOCkvuCkteCkp+CkvuCkqOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvYWRpbmciIG1zZ2lkPSI3OTMzNjgxMjYwMjk2MDIxMTgwIj4i4KSy4KWL4KShIOCkueClgeCkgeCkpuCliC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb24iIG1zZ2lkPSIxNTQ0NjgyNzU1NTE0NDk0Mjk4Ij4i4KSa4KS+4KSy4KWBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vZmYiIG1zZ2lkPSI2ODE1ODcwMzg2OTcyODA1ODMyIj4i4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2hpY2hBcHBsaWNhdGlvbiIgbXNnaWQ9IjQ1MzMxODU5NDcwNjQ3NzMzODYiPiLgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkleCkvuCksOCkrOCkvuCkueClgCDgpKrgpYHgpLDgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+IuCkr+CkuCDgpJXgpL7gpLDgpY3gpK/gpJXgpYsg4KSy4KS+4KSX4KS/IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCkrOCkvuCknyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWC4KSu4KS+IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCksuCkvuCkiCDgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0gJmd0OyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIgJmd0OyDgpKHgpL7gpIngpKjgpLLgpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiLgpI/gpIngpJ/gpL4g4KSV4KS+4KSw4KWN4KSv4KSV4KWLIOCkmuCkr+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VVc2JBY3Rpdml0eSIgbXNnaWQ9IjY4OTQ3NDg0MTYwNzM1ODM1MDkiPiJVU0Ig4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpI/gpIngpJ/gpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vQXBwbGljYXRpb25zIiBtc2dpZD0iMjk5MTgxNDI3MzkzNjUwNDY4OSI+IuCkleClgeCkqOCliCDgpKrgpKjgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyDgpJXgpL7gpLDgpY3gpK8g4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCliOCkqOCkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfdGl0bGUiIG1zZ2lkPSIxOTA1ODAwNTYwMzE3MTM3NzUyIj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfYXBwbGljYXRpb24iIG1zZ2lkPSI5MzI2Mjg0ODgwMTMwOTI3NzYiPiLgpKbgpYHgpLDgpY3gpK3gpL7gpJfgpY3gpK/gpLXgpLYsIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz7gpLLgpYcg4KSw4KWL4KSV4KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfcHJvY2VzcyIgbXNnaWQ9IjQ1MDcwNTg5OTcwMzU2OTc1NzkiPiLgpKbgpYHgpLDgpY3gpK3gpL7gpJfgpY3gpK/gpLXgpLYsIOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkviA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g4KSs4KSo4KWN4KSmIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl90aXRsZSIgbXNnaWQ9IjQzNTE5NDg0ODE0NTkxMzU3MDkiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X2FwcGxpY2F0aW9uIiBtc2dpZD0iMTkwNDQ3NzE4OTA1NzE5OTA2NiI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTIkczwveGxpZmY6Zz7gpLLgpYcg4KSV4KS+4KSw4KWN4KSvIOCkl+CksOCkv+CksOCkueClh+CkleCliyDgpJvgpYjgpKjgpaRcblxu4KSV4KWHIOCkpOCkquCkvuCkiOCkgSDgpK/gpLjgpLLgpL7gpIgg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYEg4KS54KWB4KSo4KWN4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+IuCkl+CkpOCkv+CkteCkv+Ckp+CkvyA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOCksuClhyDgpKrgpY3gpLDgpKTgpL/gpJXgpY3gpLDgpL/gpK/gpL4g4KSm4KWH4KSW4KS+4KSH4KSw4KS54KWH4KSV4KWLIOCkm+CliOCkqOClpFxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSCIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FwcGxpY2F0aW9uX3Byb2Nlc3MiIG1zZ2lkPSI4OTQxNzU3NjA3MzQwNDgxMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgpJzgpLXgpL7gpKsg4KSm4KS/4KSH4KSw4KS54KWH4KSV4KWLIOCkm+CliOCkqOClpCDgpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX3Byb2Nlc3MiIG1zZ2lkPSI2NTEzMjA5ODc0ODgwNTE3MTI1Ij4i4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPuCksuClhyDgpJXgpL7gpLDgpY3gpK8g4KSX4KSw4KS/4KSw4KS54KWH4KSV4KWLIOCkm+CliOCkqOClpFxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfY2xvc2UiIG1zZ2lkPSI4MzQ2MDcyMDk0NTIxMjY1NjA1Ij4i4KSg4KS/4KSVIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlcG9ydCIgbXNnaWQ9IjQwNjAyMTgyNjA5ODQ3OTU3MDYiPiLgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FpdCIgbXNnaWQ9IjcxNDcxMTgyMTcyMjYzMTc3MzIiPiLgpKrgpY3gpLDgpKTgpYDgpJXgpY3gpLfgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VicGFnZV91bnJlc3BvbnNpdmUiIG1zZ2lkPSIzMjcyNzU4MzUxMTM4MTIyNTAzIj4i4KSq4KWD4KS34KWN4KSgIOCkl+CliOCksCDgpJzgpL/gpK7gpY3gpK7gpYfgpLXgpL7gpLDgpYAg4KSt4KSP4KSV4KWLIOCkm+ClpFxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSCIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgeCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE1NDc5OTc3ODA1MDY3MTM1ODEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSq4KWB4KSo4KSDIOCkqOCkv+CksOCljeCkpuClh+CktuClgOCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3JlcGxhY2UiIG1zZ2lkPSI2MjAyNDk4OTQ5OTcwMjgxNDEyIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpIXgpLngpL/gpLLgpYcg4KSa4KSy4KS/4KSw4KS54KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpLXgpL7gpLjgpY3gpKTgpLXgpL/gpJUg4KS44KWB4KSw4KWB4KS14KS+4KSkIOCkreCkj+CkleCliyDgpKXgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2NhbGUiIG1zZ2lkPSIzMjAyOTU1NjY3Njc1OTQ0NDk5Ij4i4KS44KWN4KSV4KWH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3Nob3ciIG1zZ2lkPSI0MDEzODc4ODc2NDg2NjU1ODkyIj4i4KS44KSn4KWI4KSBIOCkpuClh+CkluCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+IuCkquCljeCksOCko+CkvuCksuClgCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpK7gpL4g4KSv4KS44KSy4KS+4KSIIOCkquClgeCkqOCkg+CkuOCkleCljeCkt+CkriDgpJfgpLDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0gJmd0OyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIgJmd0OyDgpKHgpL7gpIngpKjgpLLgpYvgpKEg4KSX4KSw4KWH4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+ICjgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSDgpLLgpYcg4KSv4KS44KSV4KWLIOCkuOCljeCkteCkr+Ckgi3gpLLgpL7gpJfgpYEg4KSX4KSw4KS/4KSP4KSV4KWLIOCkuOCljeCkn+CljeCksOCkv+Ckn+CkruCli+CkoSDgpKjgpYDgpKTgpL8g4KSJ4KSy4KSZ4KWN4KSY4KSoIOCkl+CksOClh+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiLgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IOCkr+CkuOCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KSV4KSh4KS+4KSu4KWL4KShIOCkqOClgOCkpOCkv+CkleCkviDgpJXgpL7gpLDgpKMg4KSJ4KSy4KWN4KSy4KSZ4KWN4KSY4KSoIOCkl+CksOCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ190aXRsZSIgbXNnaWQ9IjE1ODQxOTIyODU0NDE0MDU3NDYiPiLgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKEg4KSF4KSq4KSX4KWN4KSw4KWH4KShIOCkueClgeCkgeCkpuCliOCkm+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2FwayIgbXNnaWQ9Ijc5MDQwNDI2ODIxMTE1MjYxNjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSF4KSo4KWB4KSV4KWB4KSyIOCkueClgeCkgeCkpuCliCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCkleCliyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfc3RhcnRpbmdfYXBwcyIgbXNnaWQ9IjQ1MTQ2NDUxNjM0NjkyNjcxMyI+IuCkuOClgeCksOClgeCkteCkvuCkpCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19jb21wbGV0ZSIgbXNnaWQ9IjE0MDU5NTQ3NTQxMTI5OTkyMjkiPiLgpKzgpYHgpJ8g4KSq4KWB4KSw4KS+IOCkueClgeCkgeCkpuCliOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb24iIG1zZ2lkPSI5MDg3MDYzOTg1Nzc2NjI2MTY2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JTEkczwveGxpZmY6Zz4g4KSa4KSy4KS/4KSw4KS54KWH4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb25fZGV0YWlsIiBtc2dpZD0iMTcyMTY4MTc0MTYxNzg5ODg2NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkruCkviDgpLjgpY3gpLXgpL/gpJog4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90aXRsZSIgbXNnaWQ9IjcxNTMxNjcwODU0MDMyOTgxNjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KS44KWN4KS14KS/4KSaIOCkl+CksOCljeCkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RleHQiIG1zZ2lkPSI3MDIyNjMxOTI0NTM0NDA2NDAzIj4i4KSF4KSw4KWN4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKrgpLngpL/gpLLgpYcg4KSo4KWIIOCkmuCkvuCksuClgSDgpJsg4KSc4KWB4KSoIOCkpOCkquCkvuCkiOCkguCksuClhyDgpI/gpIngpJ/gpL4g4KSo4KSv4KS+4KSBIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYEg4KSF4KSY4KS/IOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpKrgpLDgpY3gpKjgpYcg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9hY3Rpb24iIG1zZ2lkPSI0OTMxMjkxNzIyMzg1NjYyODIiPiI8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4g4KSu4KS+IOCkq+CksOCljeCkleCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDgyMDk0Mjc1NTgwMzU4MDQ5Ij4i4KSo4KSv4KS+4KSBIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpYHgpLDgpYEg4KSo4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9hY3Rpb24iIG1zZ2lkPSI1NDcyNzU2OTI2OTQ1NDQwNzA2Ij4iPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+IOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+IuCkrOCkmuCkpCDgpKjgpJfgpLDgpYAg4KSq4KWB4KSw4KS+4KSo4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZW5kVGV4dCIgbXNnaWQ9IjUyMDk4NzQ1NzE5NTk0NjkxNDIiPiLgpKrgpL7gpKDgpJXgpYsg4KSy4KS+4KSX4KS/IOCkj+CkieCkn+CkviDgpKrgpY3gpLDgpJXgpL7gpLDgpY3gpK8g4KSb4KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Jpbmd0b25lIiBtc2dpZD0iNjg4NTQyMTQwNjg0NTczNDY1MCI+IuCkrOCknOCkvuCkieCkqOClhyDgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWMiIG1zZ2lkPSI1NDIxNjUxMTU3MTM4NjI4MTcxIj4i4KSu4KS/4KSh4KS/4KSv4KS+4KSV4KWLIOCkruCkvuCkpOCljeCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3BsYXlpbmdfdGhyb3VnaF9ibHVldG9vdGgiIG1zZ2lkPSI5MTY1OTg0Mzc5Mzk0NjAxNTMzIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSl4KSV4KWLIOCkruCkvuCkp+CljeCkr+CkruCkpuCljeCkteCkvuCksOCkviDgpKzgpJzgpL7gpIfgpKbgpYgg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfc2lsZW50X3Jpbmd0b25lX3NlbGVjdGVkIiBtc2dpZD0iODMxMDczOTk2MDk3MzE1NjI3MiI+IuCktuCkvuCkqOCljeCkpCDgpLDgpL/gpJngpY3gpJfgpJ/gpYvgpKgg4KS44KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2NhbGwiIG1zZ2lkPSIzOTQxNjgwMDQxMjgyNzg4NzExIj4i4KSH4KSoLeCkleCksiDgpK3gpYvgpLLgpY3gpK/gpYHgpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYmx1ZXRvb3RoX2NhbGwiIG1zZ2lkPSIyMDAyODkxOTI2MzUxMTUxNTM0Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkreCkv+CkpOCljeCksOClgC3gpJXgpLIg4KSu4KS+4KSk4KWN4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2FsYXJtIiBtc2dpZD0iMTk4NTE5MTYxNjA0MjY4OTEwMCI+IuCkhuCksuCksOCljeCkriDgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMjQyMjI2NTY1Njc0NDI3NjcxNSI+IuCkuOClguCkmuCkqOCkviDgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfdW5rbm93biIgbXNnaWQ9IjE0MDAyMTk2Njk3NzA0NDU5MDIiPiLgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ibHVldG9vdGgiIG1zZ2lkPSI2NTM4ODk0MTc3MjU1OTY0MzQwIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkreCli+CksuCljeCkr+ClgeCkriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX3JpbmdlciIgbXNnaWQ9IjMzMjYwMDM4NDcwMDYxNjI0OTYiPiLgpJjgpKjgpY3gpJ/gpL/gpJXgpYsg4KSG4KS14KS+4KScIOCkruCkvuCkpOCljeCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2luY2FsbCIgbXNnaWQ9Ijg4OTAwNzMyMTgxNTQ1NDMzOTciPiLgpJXgpLLgpL4g4KSu4KS+4KSk4KWN4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbWVkaWEiIG1zZ2lkPSI0MjE3MzExNzE5NjY1MTk0MjE1Ij4i4KSu4KS/4KSh4KS/4KSv4KS+4KSV4KWLIOCkruCkvuCkpOCljeCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjcwNDQ5ODY1NDY0NzcyODIyNzQiPiLgpLjgpYLgpJrgpKjgpL4g4KSt4KWL4KSy4KWN4KSv4KWB4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdCIgbXNnaWQ9IjM3ODk3NTg5ODAzNTc2OTY5MzYiPiLgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSw4KS/4KSZ4KSf4KWL4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdF93aXRoX2FjdHVhbCIgbXNnaWQ9IjgxMjk1NjM0ODA4OTU5OTAzNzIiPiLgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSw4KS/4KSZ4KSf4KWL4KSoICg8eGxpZmY6ZyBpZD0iQUNUVUFMX1JJTkdUT05FIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9zaWxlbnQiIG1zZ2lkPSI3OTM3NjM0MzkyNDA4OTc3MDYyIj4i4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLngpYvgpIfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9waWNrZXJfdGl0bGUiIG1zZ2lkPSIzNTE1MTQzOTM5MTc1MTE5MDk0Ij4i4KSY4KSo4KWN4KSf4KWA4KSV4KS+IOCkuOCljeCkteCksOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3Vua25vd24iIG1zZ2lkPSI1NDc3OTE5OTg4NzAxNzg0Nzg4Ij4i4KSF4KSc4KWN4KSe4KS+4KSkIOCksOCkv+CkmeCkn+Cli+CkqCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NjU0MTIzOTg3NDE4MTY4NjkzIj4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkmyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWCIOCkieCkquCksuCkrOCljeCkpyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGVfZGV0YWlsZWQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4i4KSW4KWB4KSy4KWN4KSy4KS+IOCkteCkvuCkhy3gpKvgpL7gpIcg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkieCkquCksuCkrOCljeCkpyDgpJsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc5MTU4OTUzMjM2NDQyOTI3NjgiPiLgpJbgpYHgpLLgpY3gpLLgpL4g4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkmyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpK7gpL4g4KS44KS+4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSV4KSu4KS+IOCkuOCkvuCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbmV0d29ya19hdmFpbGFibGVfc2lnbl9pbl9kZXRhaWxlZCAoODAwMDA4MTk0MTQ0Nzk3NjExOCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZCIgbXNnaWQ9Ijc5MDQyMTQyMzE2NTE1NDYzNDciPiLgpLXgpL7gpIct4KSr4KS+4KSH4KS44KSB4KSXIOCknOCkoeCkvuCkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiDgpJXgpK7gpJzgpYvgpLAg4KSH4KSo4KWN4KSf4KSw4KSo4KWH4KSfIOCknOCkoeCkvuCkqCDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI5NzYxMTc4MjY1OTMyNDUxNyI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSq4KWN4KSw4KSk4KWN4KSv4KSV4KWN4KS3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpLjgpL/gpKfgpL4g4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCDgpK/gpLjgpLLgpYcg4KS14KS+4KSHLeCkq+CkvuCkhyDgpJfgpY3gpLDgpL7gpLngpJUv4KS54KSf4KWN4KS44KWN4KSq4KSf4KSy4KS+4KSIIOCkrOCkqOCljeCkpiDgpJfgpLDgpL7gpIngpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UiIG1zZ2lkPSIzNzYzNjY5Njc3OTM1NjIzMDg0Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpLjgpL/gpKfgpL4g4KS44KWB4KSw4KWBIOCkueClgeCkqCDgpLjgpJXgpYfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIwNjgzMjE4ODE2NzM3MzQ4ODYiPiLgpLXgpL7gpIct4KSr4KS+4KSHIOCkquCljeCksOCkpOCljeCkr+CkleCljeCktyDgpJbgpYHgpLLgpY3gpLLgpL4g4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiLgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkm+ClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiLgpLjgpY3gpLXgpYDgpJXgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWNsaW5lIiBtc2dpZD0iMjExMjIyNTQ1MTcwNjEzNzg5NCI+IuCkheCkuOCljeCkteClgOCkleCkvuCksCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3NlbnRfdGl0bGUiIG1zZ2lkPSIxMzE4OTc1MTg1MTEyMDcwNzM0Ij4i4KSo4KS/4KSu4KSo4KWN4KSk4KWN4KSw4KSj4KS+IOCkquCkoOCkvuCkh+Ckj+CkleCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ludml0YXRpb25fdG9fY29ubmVjdF90aXRsZSIgbXNnaWQ9IjQ5NTg4MDM5NDg2NTg1MzM2MzciPiLgpJzgpKHgpL7gpKjgpK7gpL4g4KSo4KS/4KSu4KSo4KWN4KSk4KWN4KSw4KSj4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJvbV9tZXNzYWdlIiBtc2dpZD0iNTcwMzg5MTc0NzMxOTUxNzY5Ij4i4KSs4KS+4KSfOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3RvX21lc3NhZ2UiIG1zZ2lkPSIyNDg5Njg5NzQ1MjIwNDQwOTkiPiLgpKrgpY3gpLDgpL7gpKrgpJU6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW50ZXJfcGluX21lc3NhZ2UiIG1zZ2lkPSI1OTIwOTI5NTUwMzY3ODI4OTcwIj4i4KSG4KS14KS24KWN4KSv4KSVIFBJTiDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UiIG1zZ2lkPSI4NTMwNTYzMzIzODgwOTIxMDk0Ij4iUElOOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDEyOTgxMjU3NzQyMjMyNDc1Ij4i4KSv4KWLIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz7gpLjgpIHgpJcg4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkrOClh+CksuCkviDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpLXgpL7gpIct4KSr4KS+4KSH4KSs4KS+4KSfIOCkteCkv+CkmuCljeCkm+Clh+CkpiDgpJfgpLDgpL/gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4i4KSc4KSsIOCkr+CliyA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkuOCkgeCklyDgpJzgpKHgpL/gpKQg4KS54KWB4KSo4KWN4KSbLCDgpKvgpYvgpKgg4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpLXgpL7gpIct4KSr4KS+4KSH4KSs4KS+4KSfIOCkteCkv+CkmuCljeCkm+Clh+CkpiDgpLngpYHgpKjgpYcg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiLgpIXgpJXgpY3gpLfgpLDgpLngpLDgpYIg4KSq4KWN4KSw4KS14KWH4KS2IOCkl+CksOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+IlNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KSg4KS+4KSH4KSB4KSm4KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDgpLLgpYcg4KSn4KSw4KWIIOCkuOCkguCkluCljeCkr+CkvuCkruCkviBTTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkoOCkvuCkieCkgeCkpuCliOCkm+ClpCDgpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkoOCkvuCkieCkqCDgpLjgpYHgpJrgpL7gpLDgpYEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KSa4KS+4KS54KSo4KWBIOCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF95ZXMiIG1zZ2lkPSIzNjYzNzI1OTkzODU1ODE2ODA3Ij4i4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4i4KSF4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDgpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkuOCkqOCljeCkpuClh+CktiDgpKrgpKDgpL7gpIngpKgg4KSa4KS+4KS54KWB4KSo4KWBIOCkueClgeCkqOCljeCkmyAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDsvYiZndDsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjM0OTIwMjU3MTk4NjgwNzg0NTciPiLgpK/gpLjgpLLgpYcgIjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IiDgpLbgpYHgpLLgpY3gpJUg4KSy4KSX4KS+4KSJ4KSoIOCkuOCkleCljeCkmyI8L2ZvbnQ+IiDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkluCkvuCkpOCkvuCkruCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19wcmVtaXVtX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjU1MjM4MjYzNDkxMDUxMjM2ODciPjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IuCkr+CkuOCksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkluCkvuCkpOCkvuCkruCkviDgpJrgpL7gpLDgpY3gpJzgpLngpLDgpYIg4KSJ4KSk4KWN4KSq4KSo4KWN4KSoIOCkl+CksOCljeCkpuCkm+ClpCI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2FsbG93IiBtc2dpZD0iNDQ1ODg3ODYzNzExMTAyMzQxMyI+IuCkquCkoOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfY2hvaWNlIiBtc2dpZD0iNTI4OTUzODU5MjI3MjIxODEzNiI+IuCkruClh+CksOCliyDgpJvgpKjgpYzgpJ8g4KSv4KS+4KSmIOCksOCkvuCkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4i4KSk4KSq4KS+4KSI4KSBIOCkr+CkuOCksuCkvuCkiCDgpKrgpJvgpL8g4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWC4KSu4KS+IOCkrOCkpuCksuCljeCkqCDgpLjgpJXgpY3gpKjgpYEg4KS54KWB4KSo4KWN4KSbICZndDsg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbHdheXNfYWxsb3ciIG1zZ2lkPSIzMjQxMTgxMTU0ODY5NDkzMzY4Ij4i4KS44KSn4KWI4KSBIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX25ldmVyX2FsbG93IiBtc2dpZD0iNDQ2OTkyNzY1Nzc0MjY5NjczIj4i4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkheCkqOClgeCkruCkpOCkvyDgpKjgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkueCkn+CkvuCkh+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4i4KSP4KSJ4KSf4KS+IOCkruCkvuCkqOCljeCkryBTSU0g4KSV4KS+4KSw4KWN4KShIOCksOCkvuCkluClh+CksCDgpKrgpYHgpKjgpIPgpLjgpY3gpJ/gpL7gpLDgpY3gpJ8g4KSo4KSX4KSw4KWH4KS44KSu4KWN4KSuIOCkruCli+CkrOCkvuCkh+CksiDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkueClgeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiLgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfdGl0bGUiIG1zZ2lkPSIzNzE5NjcwNTEyODg5Njc0NjkzIj4iU0lNIOCkleCkvuCksOCljeCkoSDgpKXgpKog4KSX4KSw4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX21lc3NhZ2UiIG1zZ2lkPSI2NTk5OTQ1MzAxMTQxMDUwMjE2Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSoIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIngpKrgpJXgpLDgpKMg4KSq4KWB4KSo4KSD4KS44KWN4KSf4KS+4KSw4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZXN0YXJ0X2J1dHRvbiIgbXNnaWQ9IjQ3MjI0MDc4NDI4MTUyMzIzNDciPiLgpKrgpYHgpKjgpIPgpLjgpY3gpJ/gpL7gpLDgpY3gpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODM0OTM2MjYyMzA2ODgxOTI5NSI+IuCkuOCkruCkryDgpK7gpL/gpLLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI1ODc5NDUwNjU5NDUzNzgyMjc4Ij4i4KSu4KS/4KSk4KS/IOCkruCkv+CksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9zZXQiIG1zZ2lkPSI1Nzc3MDc1NjE0MzIxMDg3NzU4Ij4i4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9kb25lIiBtc2dpZD0iMjUwNzY4Mzc1MTc1OTMwODgyOCI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1zX25ld19wZXJtX3ByZWZpeCIgbXNnaWQ9IjgyNTc3NDA3MTA3NTQzMDE0MDciPjxmb250IHNpemU9IjEyIiBmZ2NvbG9yPSIjZmYzM2I1ZTUiPiLgpKjgpK/gpL7gpIE6ICI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtc19kZXNjcmlwdGlvbl9hcHAiIG1zZ2lkPSI1MTM5ODM2MTQzMjkzMjk5NDE3Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPuCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fcGVybWlzc2lvbnMiIG1zZ2lkPSI3MjgzMzU3NzI4MjE5MzM4MTEyIj4i4KSV4KWB4KSo4KWIIOCkheCkqOClgeCkruCkpOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybV9jb3N0c19tb25leSIgbXNnaWQ9IjQ5MDI0NzAzMjQxNDIxNTExMTYiPiLgpLjgpL7gpK/gpKYg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkquCliOCkuOCkviDgpKrgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4iVVNCIOCkoOClguCksuCliyDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjU5MDE0NTkwNDEzOTg3NTE0OTUiPiJVU0Ig4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+IuCkpOCkquCkvuCkiOCkgiDgpIbgpKvgpY3gpKjgpYsg4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSw4KSu4KS+IFVTQiDgpK7gpL7gpLDgpY3gpKvgpKQg4KSc4KSh4KS+4KSoIOCkueClgeCkqOClgeCkreCkr+Cli+ClpCDgpKTgpLLgpJXgpYsg4KSs4KSf4KSoIOCkn+CkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KSv4KSm4KS/IOCkpOCkquCkvuCkiOCkgiDgpIbgpKvgpY3gpKjgpYsg4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSwIOCksCDgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKHgpJXgpYsgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpYDgpJog4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkquCljeCksOCkpOCkv+CksuCkv+CkquCkvyDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkreCkqOClh+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiLgpKTgpKrgpL7gpIjgpIIg4KSG4KSr4KWN4KSo4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkruCkviBVU0Ig4KSu4KS+4KSw4KWN4KSr4KSkIOCknOCkoeCkvuCkqCDgpLngpYHgpKjgpYHgpK3gpK/gpYvgpaQg4KSk4KSy4KSV4KWLIOCkrOCkn+CkqCDgpJ/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkr+CkpuCkvyDgpKTgpKrgpL7gpIjgpIIg4KSG4KSr4KWN4KSo4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksCDgpLAg4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KSh4KSV4KWLIFNEIOCkleCkvuCksOCljeCkoSDgpKzgpYDgpJog4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkquCljeCksOCkpOCkv+CksuCkv+CkquCkvyDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkreCkqOClh+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjEwNTIyNTk5MzAzNjk1MDgyMzUiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkmuCkvuCksuClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiJVU0Ig4KSG4KSuIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSk4KSq4KS+4KSI4KSB4KSV4KWLIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkpuCkviDgpI/gpIngpJ/gpL4g4KS44KSu4KS44KWN4KSv4KS+IOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4iVVNCIOCkhuCkriDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkpOCkquCkvuCkiOCkgeCkleCliyBTRCDgpJXgpL7gpLDgpY3gpKEg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkpuCkviDgpI/gpIngpJ/gpL4g4KS44KSu4KS44KWN4KSv4KS+IOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0Ig4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTM5ODIyNzgzODI4MTgzNzYzIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkrOCkvuCknyDgpLXgpL4g4KSk4KS/4KSwIOCkq+CkvuCkh+CksuCkueCksOClgiDgpKrgpY3gpLDgpKTgpL/gpLLgpL/gpKog4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjMzNjA1ODM5NjY2MzUxNjAxNyI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjU2ODUyMDk4NTU1NjIzODIyIj4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCljeCksOCkr+Cli+Ckl+CkruCkviDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkueClgeCkqOClgeCkreCkqOCljeCkpuCkviDgpKrgpLngpYDgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkrOCkvuCknyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIChcIuCkneCkv+CkleCljeCkqOClgeCkueCli+CkuOCljVwiKSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClgeCkheCkmOCkvyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSw4KSs4KS+4KSfIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKHgpJXgpYsgU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkqOCkruCkvuCkieCkqOCljeCknyAoXCLgpKjgpL/gpJXgpL7gpLLgpYfgpJXgpYtcIikg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9idXR0b25fbW91bnQiIG1zZ2lkPSI3MDYwMjE4MDM0OTAwNjk2MDI5Ij4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMTk3MDM3NDg5ODI2MzA2MzgzNiI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkpuCkviDgpI/gpIngpJ/gpL4g4KS44KSu4KS44KWN4KSv4KS+IOCkreCkr+Cli+ClpCDgpKTgpKrgpL7gpIjgpIHgpLLgpYcgVVNCIOCkueCli+CkuOCljeCknyDgpIXgpKjgpK7gpL7gpIngpKjgpY3gpJ8g4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJzgpL7gpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNLCDgpKTgpY3gpK/gpLjgpKrgpJvgpL8g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkluCli+CksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+IuCkr+CkpuCkvyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpJbgpYvgpLLgpY3gpKjgpYEg4KSt4KSv4KWLIOCkreCkqOClhyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpL4g4KSV4KWH4KS54KWAIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLDgpYvgpJXgpL/gpKjgpYcg4KSb4KSo4KWNIOCksCDgpKTgpKrgpL7gpIjgpIHgpLLgpYcgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpKjgpY3gpKYg4KSo4KSX4KSw4KWH4KS44KSu4KWN4KSuIOCkheCkqOClgeCkquCksuCkrOCljeCkpyDgpLngpYHgpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2Vycm9yX3RpdGxlIiBtc2dpZD0iNzMyMzY1ODQ2OTYyNjUxNDIwNyI+IlVTQiDgpLjgpILgpJrgpL7gpLLgpKgg4KSF4KS44KSr4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX29rIiBtc2dpZD0iNzM3Njk1MzE2NzAzOTg2NTcwMSI+IuCkoOCkv+CklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiLgpK7gpL/gpKHgpL/gpK/gpL4g4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCksOClguCkquCkruCkviDgpJzgpKHgpL/gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE5NjA4MTcxOTIyMTYwNjQ4MzMiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL7gpJXgpYsg4KSw4KWC4KSq4KSu4KS+IOCknOCkoeCkvuCkqCDgpK3gpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfY2RfaW5zdGFsbGVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY3NzQ3MTI4Mjc4OTIwOTA3NTQiPiLgpI/gpIngpJ/gpL4g4KS44KWN4KSl4KS+4KSq4KSo4KSV4KSw4KWN4KSk4KS+4KSV4KWLIOCksOClguCkquCkruCkviDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI3ODQ4MjM2OTc0MDg3NjUzNjY2Ij4iVVNCIOCkuOCkueCkvuCkr+CkleCkruCkviDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+IuCkheCkqOCljeCkryBVU0Ig4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJ/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSy4KS+4KSIIOCkq+CksOCljeCkruCljeCkr+CkvuCknyAg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+IlNEIOCkleCkvuCksOCljeCkoSDgpKvgpLDgpY3gpK7gpY3gpK/gpL7gpJ8g4KSX4KSw4KWN4KSo4KWHPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MzQwMTY4NTM0MjU3NjEwNzgiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsgVVNC4KSu4KS+IOCkuOCkmeCljeCkl+CljeCksOCkuSDgpK3gpI/gpJXgpL4g4KS44KSs4KWIIOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL/gpKjgpYcg4KSb4KSo4KWN4KWkIOCkr+CliyDgpJXgpL7gpLDgpY3gpK8g4KSJ4KSy4KWN4KSf4KS+4KSJ4KSoIOCkuOCkleCkv+CkgeCkpuCliOCkqCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpI/gpJXgpL4g4KS44KSs4KWIIOCkoeClh+Ckn+CkvuCkueCksOClgiDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X2J1dHRvbl9mb3JtYXQiIG1zZ2lkPSI0MTMxMDY0NTYwMTI3NDc4Njk1Ij4i4KSr4KSw4KWN4KSu4KWN4KSv4KS+4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+IlVTQiDgpKHgpL/gpKzgpJcg4KSX4KSw4KWN4KSo4KWHIOCknOCkoeCkv+CkpCDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTAxNjY1NDYyNzYyNjQ3NjE0MiI+IlVTQiDgpKHgpL/gpKzgpJcg4KSX4KSw4KWN4KSo4KWHIOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2lucHV0X21ldGhvZCIgbXNnaWQ9IjQ2NTMzODczMzY3OTEyMjI5NzgiPiLgpKjgpL/gpLXgpYfgpLYg4KS14KS/4KSn4KS/IOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iOTA5MTY1MjE1NzcyMjQ5NTExNiI+IuCkh+CkqOCkquClgeCknyDgpLXgpL/gpKfgpL/gpLngpLDgpYIg4KS44KWH4KSf4KSF4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiLgpK3gpYzgpKTgpL/gpJUg4KSV4KS/4KSs4KWL4KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGFyZHdhcmUiIG1zZ2lkPSI3NTE3ODIxMDg2ODg4OTkwMjc4Ij4i4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxNDA3MzY3MDE3MjYzMDMwNzczIj4i4KSV4KS/4KSs4KWL4KSw4KWN4KShIOCksOClguCkquCksOClh+CkluCkviDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0NjU5MDc3MDA0NDkyNTcwNjMiPiLgpJXgpL/gpKzgpYvgpLDgpY3gpKEg4KSw4KWC4KSq4KSw4KWH4KSW4KS+IOCkmuCkr+CkqCDgpJfgpLDgpY3gpKgg4KSf4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX2FscGhhYmV0IiBtc2dpZD0iNTQzMzI3NTQ4NTQ5OTAzOTE5OSI+IiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX251bWVyaWNfYWxwaGFiZXQiIG1zZ2lkPSI0MDMwMTcwNTI0NTk1MTIzNjEwIj4iIDAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmRpZGF0ZXNfc3R5bGUiIG1zZ2lkPSI0MzMzOTEzMDg5NjM3MDYyMjU3Ij48dT4i4KSJ4KSu4KWN4KSu4KWH4KSm4KS14KS+4KSwIjwvdT48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0OTgxNjAwNTM1MTQ2ODU2MCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSk4KSv4KS+4KSw4KWAIOCkueClgeCkgeCkpuCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDU3NjAzNDE4OTcwOTk0MDUwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkpOCkr+CkvuCksCDgpJfgpLDgpY3gpKbgpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4Mjg3MzE5ODgyOTI2NzM3MDUzIj4i4KSk4KWN4KSw4KWB4KSf4KS/4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJzgpL7gpIHgpJog4KSX4KSw4KWN4KSm4KWI4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiLgpLDgpL/gpJXgpY3gpKQgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IuCkluCkvuCksuClgCBTRCDgpJXgpL7gpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpJbgpL7gpLLgpYAg4KS14KS+IOCkheCkuOCkruCksOCljeCkpeCkv+CkpCDgpKvgpL7gpIfgpLIg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODY0MTA2NTY0MTc4NjkyMzYwNCI+IlNEIOCkleCkvuCksOCljeCkoSDgpJbgpL7gpLLgpYAg4KSbIOCkheCkpeCkteCkviDgpLjgpK7gpLDgpY3gpKXgpKgg4KSo4KSX4KSw4KS/4KSP4KSV4KWLIOCkq+CkvuCkh+CksiDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4i4KSs4KS/4KSX4KWN4KSw4KS/4KSP4KSV4KWLIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQxMDcyMzkwNjAxOTEwMDE4OSI+IuCkrOCkv+Ckl+CljeCksOCkv+Ckj+CkleCliyBTRCDgpJXgpL7gpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTc5NTkxNzU3ODM5NTMzMzI4MCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KS/4KSX4KWN4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCDgpK/gpLjgpLLgpL7gpIgg4KSq4KWB4KSo4KSD4KSr4KSw4KWN4KSu4KWN4KSv4KS+4KSfIOCkl+CksOCljeCkqCDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTc1Mzg5ODU2NzUyNTU2ODI1MyI+IlNEIOCkleCkvuCksOCljeCkoSDgpKzgpL/gpJfgpY3gpLDgpL/gpI/gpJXgpYsg4KSb4KWkIOCkr+CkuOCksuCkvuCkiCDgpKrgpYHgpKjgpIPgpKvgpLDgpY3gpK7gpY3gpK/gpL7gpJ8g4KSX4KSw4KWN4KSoIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTY2MTY4MzAzMTMzMDk1MTA3MyI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSF4KSq4KWN4KSw4KSk4KWN4KSv4KS+4KS24KS/4KSkIOCksOClguCkquCkruCkviDgpLngpJ/gpL7gpIfgpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+IlNEIOCkleCkvuCksOCljeCkoSDgpIXgpKjgpKrgpYfgpJXgpY3gpLfgpL/gpKQg4KSw4KWC4KSq4KSu4KS+IOCkueCkn+CkvuCkh+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiLgpKHgpYfgpJ/gpL4g4KSX4KWB4KSu4KWN4KSo4KSs4KS+4KSfIOCksOCli+CkleCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8gVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLngpJ/gpL7gpIngpKjgpYHgpIXgpJjgpL8g4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+IuCkoeClh+Ckn+CkviDgpKjgpL7gpLYg4KS54KWB4KSo4KSs4KS+4KSfIOCkrOCkmuCljeCkqCBTRCDgpJXgpL7gpLDgpY3gpKHgpLLgpL7gpIgg4KSo4KS/4KSV4KS+4KSy4KWN4KSo4KWB4KSt4KSo4KWN4KSm4KS+IOCkquCkueCkv+CksuCkviDgpIXgpKjgpK7gpL7gpIngpKjgpY3gpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzk2Nzk3Mzg5MzI3MDM2MDIzMCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KS54KSf4KS+4KSJ4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkueCkn+CkvuCkieCkqCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTQyMTk1MzYxNjA2NDkzNTMwIj4i4KSk4KSq4KS+4KSI4KSCIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLDgpYLgpKrgpK7gpL4gVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLngpJ/gpL7gpIngpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Njg4NDEyNzgxMzgzNzc2MDQiPiLgpKTgpKrgpL7gpIjgpIEgU0Qg4KSV4KS+4KSw4KWN4KShIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLDgpYLgpKrgpK7gpL4g4KS54KSf4KS+4KSJ4KSoIOCkuOCkleCljeCkqOClgSDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDQ4NjM3NzIzMDE0MDIyNzY1MSI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KS54KSf4KS+4KSH4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkwMjUxODAzMDQwNDM4MTMxOCI+IuCkueCkn+CkvuCkh+Ckj+CkleCliyBTRCDgpJXgpL7gpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4iVVNEIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLngpJ/gpL7gpIfgpK/gpYvgpaQg4KSo4KSv4KS+4KSBIOCkruCkv+CkoeCkv+Ckr+CkviDgpJjgpYHgpLjgpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KS54KSf4KS+4KSH4KSv4KWL4KWkIOCkj+CkieCkn+CkviDgpKjgpK/gpL7gpIEg4KSb4KS/4KSw4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbGlzdF9lbXB0eSIgbXNnaWQ9IjE2NzUzODgzMzA3ODY4NDEwNjYiPiLgpJXgpYHgpKjgpYgg4KSu4KS/4KSy4KWN4KSo4KWHIOCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpKrgpL7gpIfgpI/gpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSI4Nzg3MzUyMDc0MzI2NzQ4ODkyIj4i4KSW4KSj4KWN4KShIOCkquCljeCksOCkr+Cli+CklyDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpJXgpLngpLDgpYIg4KSF4KSq4KSh4KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSIxMTA2NjEyNDI0MjU0Mjc3NjMwIj4i4KSc4KSu4KWN4KSu4KS+IOCkl+CksOCkv+Ckj+CkleCliyDgpJjgpJ/gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCkueCksOClguCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpKzgpL7gpJ8g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM0MTAzNjMxMTIxMTQwNjY5MiI+IuCkuOCkvuCkruCkvuCkl+CljeCksOClgOCkleCliyDgpKjgpJXgpLIg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzkwNjk3MTI0Mjg4MzE3ODMxIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpY3gpLDgpKTgpL/gpLLgpL/gpKrgpL8g4KSX4KSw4KWN4KSoIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpKjgpY3gpJ/gpYfgpKjgpLAg4KS44KWH4KS14KS+IOCkhuCkueCljeCkteCkvuCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSm4KWN4KS14KS+4KSw4KS+4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSIxNjQyMDI0NDU1NzUwNDE0Njk0Ij4i4KSu4KS/4KSh4KS/4KSv4KS+IOCkquCksOCkv+Cko+CkvuCkriDgpKbgpL/gpLbgpL7gpKjgpL/gpLDgpY3gpKbgpYfgpLYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iNDkzMjgxODc0OTU0NzI0NDM0NiI+IuCkruCkv+CkoeCkv+Ckr+CkviDgpKrgpLDgpL/gpKPgpL7gpK7gpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkrOCkvuCkueCkv+CksOClgCDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLjgpIHgpJcg4KSy4KWI4KSc4KS+4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNzU2NTU1MjIzNzk3NzgxNTA0NyI+IuCkleCkv+Ckl+CkvuCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI1ODY2MjQ1NDg0MzAzMjg1NzYyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCkv+Ckl+CkvuCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjE3MjE5NTE4NDIwNzgyODM4NyI+IuCkleCkv+Ckl+CkvuCksOCljeCkoSDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSX4KSw4KWN4KSo4KWHIOCksCDgpLLgpYHgpJXgpL7gpIngpKjgpYcg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIzMDQzNzMyMjkwNTE4NjI5MDYxIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCkv+Ckl+CkvuCksOCljeCkoSDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiLgpJzgpYHgpK4g4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpKbgpYHgpIgg4KSa4KWL4KSf4KS/IOCkn+CkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnYWRnZXRfaG9zdF9lcnJvcl9pbmZsYXRpbmciIG1zZ2lkPSI0ODgyMDA0MzE0OTA2NDY2MTYyIj4i4KS14KS/4KSc4KWH4KSfIOCkpeCkqiDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSB4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9nbyIgbXNnaWQ9IjgzMjA4NDU2NTE3MzczNjkwMjciPiLgpJzgpL7gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlYXJjaCIgbXNnaWQ9IjY1ODExMDI3MTgyMjgwNzgxMSI+IuCkluCli+CknOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fc2VuZCIgbXNnaWQ9IjIzMTYxNjY1NTYzNDkzMTQ0MjQiPiLgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX25leHQiIG1zZ2lkPSIzMTM4ODQzOTA0MDA5ODEzODM0Ij4i4KSF4KSw4KWN4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kb25lIiBtc2dpZD0iODk3MTUxNjExNzkxMDkzNDYwNSI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fcHJldmlvdXMiIG1zZ2lkPSIxNDQzNTUwMDM5MjUwMTA1OTQ4Ij4i4KSF4KSY4KS/4KSy4KWN4KSy4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kZWZhdWx0IiBtc2dpZD0iMjg0MDkyMTg4NTU1ODA0NTcyMSI+IuCkmuCksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpYWxfbnVtYmVyX3VzaW5nIiBtc2dpZD0iNTc4OTE3NjQyNTE2NzU3MzU4NiI+XG4i4KSo4KSu4KWN4KSs4KSwIOCkoeCkvuCkr+CksiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JXM8L3hsaWZmOmc+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfY29udGFjdF91c2luZyIgbXNnaWQ9IjQ5NDc0MDUyMjY3ODgxMDQ1MzgiPiLgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljVxu4KSv4KWLIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2hlYWRlciIgbXNnaWQ9IjIxMDYxMDM4MTc5Mzc4NTk2NjIiPiLgpKjgpL/gpK7gpY3gpKgg4KSP4KSJ4KSf4KS+IOCkteCkviDgpKfgpYfgpLDgpYgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJbgpL7gpKTgpL7gpK7gpL4g4KSq4KS54KWB4KSB4KSa4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSF4KS54KS/4KSy4KWHIOCksCDgpK3gpLXgpL/gpLfgpY3gpK/gpK7gpL4g4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9mb290ZXIiIG1zZ2lkPSIzMTI1MjExMzQzMzc5Mzc2NTYxIj4i4KSV4KWHIOCkpOCkquCkvuCkiOCkgSDgpK/gpLgg4KSF4KSo4KWB4KSw4KWL4KSn4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X3Blcm1pc3Npb25zX2hlYWRlcl90ZXh0IiBtc2dpZD0iNjg3NDQ5NzQwODIwMTgyNjcwOCI+IuCkheCkqOClgeCksOCli+CkpyDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3ciIG1zZ2lkPSI3MjI1OTQ4ODExMjk2Mzg2NTUxIj4i4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4i4KSF4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1pc3Npb25fcmVxdWVzdF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NDg2NzU5Nzk1OTI2MjM3OTA3Ij4i4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCkv+Ckj+CkleCliyDgpIXgpKjgpYHgpK7gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIG1zZ2lkPSI4NTMwMzkzMTM5NjM5NTYwMTg5Ij5cbiLgpJbgpL7gpKTgpL4gPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiVzPC94bGlmZjpnPuCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCkv+Ckj+CkleCliyDgpIXgpKjgpYHgpK7gpKTgpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnB1dF9tZXRob2RfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyODM1NTcxNzk5NDQ5OTI2NDkiPiLgpIfgpKjgpKrgpYHgpJ8g4KS14KS/4KSn4KS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMzY4Nzk2OTEzODM3NTA5MjQyMyI+IuCkuOCkv+CkmeCljeCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI0MTQ4MTIwNzQyMDk2NDc0NjQxIj4i4KSJ4KSq4KSy4KSs4KWN4KSn4KSk4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLgpLjgpYLgpJrgpKjgpL4g4KS44KWB4KSo4KWN4KSo4KWH4KS14KS+4KSy4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4KS44KSV4KWN4KSw4KS/4KSvIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7gpKbgpY3gpLXgpL7gpLDgpL4g4KS44KSV4KWN4KSw4KS/4KSvIOCkl+CksOCkv+Ckj+CkleCliyDgpLngpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dF9sb25nIiBtc2dpZD0iNjQwNzM1MTAwNjI0OTE3NDQ3MyI+Ijx4bGlmZjpnIGlkPSJTRVNTSU9OIj4lczwveGxpZmY6Zz7gpLjgpIHgpJcg4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkm+ClpCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+4KSq4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDQzNDM4OTY0NDQwOTYwNzQ1Ij4iVlBOIOCknOCkoeCkvuCkqCDgpLjgpKfgpYgg4KSc4KWL4KSh4KWN4KSm4KWI4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiLgpLjgpKfgpYjgpIEg4KSW4KWB4KSy4KWN4KSy4KS+IOCkueClgeCkqOClhyBWUE4g4KSc4KWL4KSh4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Vycm9yIiBtc2dpZD0iNjAwOTI0OTgxNDAzNDcwODE3NSI+IuCkuOCkp+CliOCkgSDgpK3gpLDgpL8gVlBOIOCkpOCljeCksOClgeCkn+Ckv+CkruCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25maWciIG1zZ2lkPSI2NDE1ODk5MTUwNjcxNTM3OTcwIj4i4KSV4KSo4KWN4KSr4KS/4KSX4KSwIOCkl+CksOCljeCkqCDgpJ/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXBsb2FkX2ZpbGUiIG1zZ2lkPSIyODk3OTU3MTcyMzY2NzMwNDE2Ij4i4KSr4KS+4KSH4KSyIOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2ZpbGVfY2hvc2VuIiBtc2dpZD0iNjM2MzY0ODU2MjE3MDc1OTQ2NSI+IuCkleClgeCkqOCliCDgpKvgpL7gpIfgpLIg4KSb4KS+4KSo4KS/4KSP4KSV4KWLIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc2V0IiBtc2dpZD0iMjQ0ODE2ODA4MDk2NDIwOTkwOCI+IuCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpY3gpKjgpYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdWJtaXQiIG1zZ2lkPSIxNjAyMzM1NTcyMDg5OTExOTQxIj4i4KSq4KWH4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE2NDc2ODIxMjAwMzg2NDMxNiI+IuCkleCkvuCksCDgpK7gpYvgpKEg4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4MDM1MjMwNTM3NTYzNTAzMjYyIj4i4KSV4KS+4KSwIOCkruCli+CkoeCkrOCkvuCknyDgpKjgpL/gpLjgpY3gpJXgpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE0NjY5NDIzNDM5ODIwMjYwMSI+IuCkn+Clh+CkpeCksCDgpJfgpLDgpY3gpKjgpYcg4KS14KS+IOCkueCkn+CkuOCljeCkquCknyDgpLjgpJXgpY3gpLDgpL/gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjY4NTcwMzE3NjAxMDMwNjI5ODIiPiLgpLjgpYfgpJ/gpIXgpKog4KSX4KSw4KWN4KSoIOCkn+CkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjIzMDA0NzAwMDQ1MDMzNDM0MzkiPiLgpKrgpJvgpL7gpKHgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXh0X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEwODA1NTUxMDQ2Nzc5OTI0MDgiPiLgpIXgpLDgpY3gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJza2lwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEyNzUzNjIyOTk0NzE2MzE4MTkiPiLgpJvgpYvgpKHgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ4OTA4OTQyNjc0NTQ4NjcyNzYiPiLgpIngpJrgpY3gpJog4KSu4KWL4KSs4KS+4KSH4KSyIOCkoeClh+Ckn+CkviDgpKrgpY3gpLDgpK/gpYvgpJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMzM0MDgyMjIyODU5OTMzNzc0MyI+IuCkruCli+CkrOCkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpIXgpLDgpYIg4KSl4KSqIOCknOCkvuCkqOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8gIOCkm+ClgeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2MjY5NTQxODk3NzI5NzgxMzMyIj4i4KSu4KWL4KSs4KS+4KSH4KSyIOCkoeClh+Ckn+CkviDgpLjgpYDgpK7gpL4g4KSq4KS+4KSwIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjU0NDM0NTczMjEzNTQ5MDcxODEiPiLgpK7gpYvgpKzgpL7gpIfgpLIg4KSh4KWH4KSf4KS+IOCkquCljeCksOCkr+Cli+CklyDgpKzgpL7gpLDgpYcg4KSl4KSqIOCkuOCkv+CkleCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19tYXRjaGVzIiBtc2dpZD0iODEyOTQyMTkwODkxNTg0MDczNyI+IuCkleClgeCkqOCliCDgpK7gpL/gpLLgpYfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX29uX3BhZ2UiIG1zZ2lkPSIxOTQ2Nzk5MjMzODIyODIwMzg0Ij4i4KSq4KWD4KS34KWN4KSg4KSu4KS+IOCkq+Clh+CksuCkviDgpKrgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im1hdGNoZXNfZm91bmQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTY3MTQ3MDgxMTM2NTc5NDM5Ij4i4KWnIOCkruClh+CksiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDY0MTg3Mjc5NzA2NzYwOTE3NyI+Ijx4bGlmZjpnIGlkPSJUT1RBTCI+JWQ8L3hsaWZmOmc+IOCkleCliyA8eGxpZmY6ZyBpZD0iSU5ERVgiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tb2RlX2RvbmUiIG1zZ2lkPSI3MjE3NTgxNjQwNDYxOTIyMjg5Ij4i4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4iVVNCICDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkpuCliC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzI3ODk0OTk4NDA5NTM3MTkwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkqOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkruClh+Ckn+CkvuCkieCkgeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTk2OTg4ODc1NTA3MDQzMDQyIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkruClh+Ckn+CkvuCkieCkgeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2Mjk5NzY5NTYzNjI0Nzc2OTQ4Ij4iVVNCIOCkreCko+CljeCkoeCkvuCksOCko+CksuCkvuCkiCDgpK7gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IlNEIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkqOCkruCkvuCkieCkqOCljeCknyDgpLngpYHgpKjgpYHgpK3gpKjgpY3gpKbgpL4g4KSq4KS54KS/4KSy4KS+IOCkqOCkv+CkleCkvuCksuCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQxODE4ODcyMDAwOTU2OTY5MyI+IuCkheCkueCkv+CksuClhyBVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCknOCkvuCkgeCkmiDgpK3gpIfgpLDgpLngpYfgpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzM0NzYyNTAzOTA0ODI3NDgxIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkueCkv+CksuClhyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSt4KSH4KSw4KS54KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JlbW92ZWQiIG1zZ2lkPSI3MDAxNTI2OTA1MDU3OTUyMDk3Ij4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkueCkn+CkvuCkh+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI1ODMwODE0MzQ5MjUwODM0MjI1Ij4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkpuCljeCkteCkvuCksOCkviDgpIXgpLngpL/gpLLgpYcg4KSq4KWN4KSw4KSv4KWL4KSX4KSu4KS+IOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MDYxMzA1NjgxMzM1NDA0MzUiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KSF4KS54KS/4KSy4KWHIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfdW5rbm93bl9zdGF0ZSIgbXNnaWQ9IjcyOTE5Mjc4MjE5NzI5MDM4NSI+IuCkrOCkvuCkueCljeCkryDgpK7gpL/gpKHgpL/gpK/gpL4g4KSF4KSc4KWN4KSe4KS+4KSkIOCkheCkteCkuOCljeCkpeCkvuCkruCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlIiBtc2dpZD0iMTc3ODY4NjYxODIzMDAxMTk2NCI+IuCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kIiBtc2dpZD0iNDgwODI3MDkwMDMyMjk4NTk2MCI+IuCkquCkpOCljeCkpOCkviDgpLLgpJfgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWJzZWFyY2giIG1zZ2lkPSI0MzM3MTU3OTc3NDAwMjExNTg5Ij4i4KS14KWH4KSsIOCkluCli+CknOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmRfbmV4dCIgbXNnaWQ9IjU3NDIxMjQ2MTg5NDIxOTM5NzgiPiLgpIXgpLDgpY3gpJXgpYsg4KSt4KWH4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZF9wcmV2aW91cyIgbXNnaWQ9IjIxOTY3MjM2NjkzODgzNjA1MDYiPiLgpIXgpJjgpL/gpLLgpY3gpLLgpYsg4KSr4KWH4KSy4KS+IOCkquCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGlja2VyIiBtc2dpZD0iNTYyMjY4MzkxMjYxNjQ5NjE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4g4KSs4KS+4KSfIOCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpLDgpYvgpKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZlRpdGxlIiBtc2dpZD0iNTQ0Njg1ODcxNzE1NzQxNjgzOSI+IuCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpLDgpYvgpKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZk1lc3NhZ2UiIG1zZ2lkPSIxMzc0NzE4MDIzMjI0MDAwNzAyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+ICg8eGxpZmY6ZyBpZD0iU0VSVklDRSI+JTIkczwveGxpZmY6Zz4pIOCkpuCljeCkteCkvuCksOCkviDgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZZZXMiIG1zZ2lkPSIyMzQ2NTY2MDcyODY3MjEzNTYzIj4i4KS54KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZObyIgbXNnaWQ9IjExNDY1NjQ5MzczNDY0NTQ4NjUiPiLgpLngpYvgpIfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXMiIG1zZ2lkPSI1Mjk2MzIxODUwNjYyNzQ2ODkwIj4i4KS44KWA4KSu4KS+IOCkqOCkvuCkmOClh+CkleCkvuCkueCksOClgiDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXNfZGVzYyIgbXNnaWQ9IjQ5NjU1MTY3MTAwODY5NDI0NSI+IuCkpOCljeCkr+CkueCkvuCkgSA8eGxpZmY6ZyBpZD0iTlVNQkVSX09GX0RFTEVURURfSVRFTVMiPiUxJGQ8L3hsaWZmOmc+IOCkruClh+Ckn+CkvuCkh+Ckj+CkleCkviDgpIbgpIfgpJ/gpK7gpLngpLDgpYIg4KSb4KSo4KWNIDx4bGlmZjpnIGlkPSJUWVBFX09GX1NZTkMiPiUyJHM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+Ckvywg4KSW4KS+4KSk4KS+IDx4bGlmZjpnIGlkPSJBQ0NPVU5UX05BTUUiPiUzJHM8L3hsaWZmOmc+4KWkIOCkpOCkquCkvuCkiOCkgiDgpJXgpYcg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19yZWFsbHlfZGVsZXRlIiBtc2dpZD0iMjU3MjYwMDEwMzEyMjU5NjI0MyI+IuCkteCkuOCljeCkpOClgeCkueCksOClgiDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3VuZG9fZGVsZXRlcyIgbXNnaWQ9IjI5NDEzMTczNjA2MDAzMzg2MDIiPiLgpK7gpYfgpJ/gpL/gpI/gpJXgpL7gpLngpLDgpYIg4KSq4KWC4KSw4KWN4KS14KS14KSkIOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfZG9fbm90aGluZyIgbXNnaWQ9IjM3NDM3NjQ3NDA0MzA4MjE4NDUiPiLgpIXgpLngpL/gpLLgpYfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleClh+CkueClgCDgpKjgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfYWNjb3VudF9sYWJlbCIgbXNnaWQ9IjU2NTUyMDMwODk3NDY0MjM5MjciPiLgpI/gpIngpJ/gpL4g4KSW4KS+4KSk4KS+IOCkm+CkvuCkqOCljeKAjeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2xhYmVsIiBtc2dpZD0iMjkzNTI2NzM0NDg0OTk5MzU1MyI+IuCkj+CkieCkn+CkviDgpJbgpL7gpKTgpL4g4KSl4KSq4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX2FjY291bnRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzYxMTk4Mjg5NDg1MzQzNTg3NCI+IuCkluCkvuCkpOCkviDgpKXgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iMjQxMjA3MjI3MjgzMjI4NDMxMyI+IuCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfZGVjcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjQ3NjA1MDc3ODM4Njc3OTA2NyI+IuCkmOCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9tb2RlIiBtc2dpZD0iMzA3MzEwMTA2NzQ0MTYzODQyOCI+Ijx4bGlmZjpnIGlkPSJWQUxVRSI+JXM8L3hsaWZmOmc+4KSb4KWB4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpLjgpK7gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfYWN0aW9uIiBtc2dpZD0iOTEwMTQ3MzA0NTg5MTgzNTQ5MCI+IuCkrOCkouCkvuCkieCkqCDgpK7gpL7gpKXgpL8g4KSwIOCkmOCkn+CkvuCkieCkqCDgpKTgpLIg4KS44KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X21pbnV0ZV9idXR0b24iIG1zZ2lkPSI4ODY1ODg1MTE0MDI4NjE0MzIxIj4i4KSu4KS/4KSo4KWH4KSfIOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iNjI0NjgzNDkzNzA4MDY4NDc5MSI+IuCkruCkv+CkqOClh+CknyDgpJjgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIzNjUyMDU2MDU1ODEwMjIzMTM5Ij4i4KSY4KSo4KWN4KSf4KS+IOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjEzNzc0Nzk4NjM0MjkyMTQ3OTIiPiLgpJjgpKjgpY3gpJ/gpL4g4KSY4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X3NldF9wbV9idXR0b24iIG1zZ2lkPSI0MTQ3NTkwNjk2MTUxMjMwODYzIj4iUE0g4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9zZXRfYW1fYnV0dG9uIiBtc2dpZD0iODMwMjE0MDM1MzUzOTQ4Njc1MiI+IkFNIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iNTM2OTk5ODQ3OTA2NzkzNDExMCI+IuCkruCkueCkv+CkqOCkviDgpKzgpKLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iMTgzMjY5ODk5NTU0MTcyNjAxOSI+IuCkruCkueCkv+CkqOCkviDgpJjgpJ/gpL7gpIngpKjgpYHgpLngpYvgpY3gpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfZGF5X2J1dHRvbiIgbXNnaWQ9IjcxMzA0NjU0MTIzMDgxNzM5MDMiPiLgpKbgpL/gpKgg4KSs4KSi4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI0MTMxODgxNTIxODE4NzUwMDMxIj4i4KSm4KS/4KSoIOCkmOCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF95ZWFyX2J1dHRvbiIgbXNnaWQ9IjYzMTg2OTczODQzMTA4MDg4OTkiPiLgpLXgpLDgpY3gpLcg4KSs4KSi4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X3llYXJfYnV0dG9uIiBtc2dpZD0iNDQ4MjAyMTgxMzQ5MTEyMTcxNyI+IuCkteCksOCljeCktyDgpJjgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IuCksOCkpuCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLgpK7gpYvgpKEg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4i4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IuCkj+CkieCkn+CkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSb4KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IOCkuOCkgeCklyDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IuCkp+Ckv+CkuOCkvuCksOCljeCkqOClhyDgpLngpY3gpK/gpL7gpKjgpY3gpKHgpLLgpaQg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWNICZhbXA7IOCkuOCkruCkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkruCkvuCkpeCkvyDgpKfgpL/gpLjgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4KSV4KWLIOCksuCkvuCkl+CkvyDgpKTgpLIg4KS44KWN4KSy4KS+4KSH4KShIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuCkuOCljeCksuCkvuCkh+CkoSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkrOCkvuCkr+CkvuCkgeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLgpLjgpY3gpLLgpL7gpIfgpKEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+CkvyDgpKbgpL7gpK/gpL7gpIHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuCkruCljOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLgpIbgpLXgpL7gpJwg4KSa4KS+4KSy4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLgpJbgpYvgpLLgpY3gpKjgpLLgpL7gpIcg4KS54KWB4KSk4KWN4KSk4KWN4KSv4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IuCkrOCli+CksuCkv+Ckj+CkleCliyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSV4KWB4KSe4KWN4KSc4KWA4KS54KSw4KWCIOCkuOClgeCkqOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS54KWH4KSh4KS44KWH4KSfIOCkquCljeCksuCklyDgpIfgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i4KSh4KSf4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTI5MzYwMDQ5NjYwMTQ5MDIxNiI+IuCkl+Clg+CkuSDgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjIzNzQ5NjU2Mjk1MjE1MjU4OSI+IuCkruCkvuCkpeCkvyDgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbWVudV9vdmVyZmxvd19kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyOTU2NTkwMzc1MDkwMDg0NTMiPiLgpKXgpKog4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9Ijc5NjU5ODQzNjA5MDM2OTM5MDMiPiIlMSRzLCAlMiRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX3N1YnRpdGxlX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9IjY5ODU1NDY1MzA0NzE3ODA3MjciPiIlMSRzLCAlMiRzLCAlMyRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9pbnRlcm5hbCIgbXNnaWQ9IjQ4OTE5MTY4MzM2NTc5MjkyNjMiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9zZF9jYXJkIiBtc2dpZD0iMzI4Mjk0ODg2MTM3ODI4Njc0NSI+IlNEIOCkleCkvuCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiIiBtc2dpZD0iMzAxNzk1NDA1OTUzODUxNzI3OCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRyYWN0X2VkaXRfbWVudV9idXR0b24iIG1zZ2lkPSI4OTQwNDc4NzMwNDk2NjEwMTM3Ij4i4KS44KSu4KWN4KSq4KS+4KSm4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE5NTU2Mzg4NjIxMjIyMzIzNDIiPiLgpKHgpYfgpJ/gpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkmuClh+CkpOCkvuCkteCkqOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ19ib2R5IiBtc2dpZD0iMjgxNDY3MzU1MTQ3MTk2OTk1NCI+IuCkieCkquCkr+Cli+CklyDgpLAg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCkueClh+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzA5MzMzNDQxOTUxODcwNjY4NiI+IjJHLTNHIOCkoeClh+Ckn+CkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF90aXRsZSIgbXNnaWQ9Ijc2MzY0ODk0MzY4MTk0NzA3NjEiPiI0RyDgpKHgpYfgpJ/gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzg2OTQwMjUxOTM5MTYzMTg4NCI+IuCkruCli+CkrOCkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF90aXRsZSIgbXNnaWQ9Ijg5OTIxNTQ3MzY0NDEyODQ4NjUiPiLgpLXgpL7gpIct4KSr4KS+4KSHIOCkoeClh+Ckn+CkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+IuCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iNzAyNjczOTEyMTEzODAwNTIzMSI+IjJHLTNHIOCkoeClh+Ckn+CkviDgpLjgpYDgpK7gpL4g4KSt4KSo4KWN4KSm4KS+IOCkquCkvuCksCDgpK3gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMTEwNjU2Mjc3OTMxMTIwOTAzOSI+IjRHIOCkoeClh+Ckn+CkviBTSU3gpL4g4KSo4KS+4KSY4KWN4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjI3OTI0MDU3MjE2NTQxMjE2OCI+IuCkruCli+CkteCkvuCkh+CksiDgpKHgpYfgpJ/gpL4gU0lN4KS+IOCkqOCkvuCkmOCljeCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSh4KWH4KSf4KS+IFNJTeCkviDgpKjgpL7gpJjgpY3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2xpbWl0X3Nub296ZWRfYm9keSIgbXNnaWQ9IjcwMzU0OTAyNzgyOTg0NDE3NjciPiI8eGxpZmY6ZyBpZD0iU0laRSI+JXM8L3hsaWZmOmc+IOCkieCksuCljeCksuClh+CkluCkv+CkpCDgpLjgpYDgpK7gpL4g4KSt4KSo4KWN4KSm4KS+IOCkrOCkouClgCDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfdGl0bGUiIG1zZ2lkPSI1OTY1MTU3MzYxMDM2MzIxOTE0Ij4i4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/4KSV4KS+IOCkoeClh+Ckn+CkviDgpKrgpY3gpLDgpKTgpL/gpKzgpKjgpY3gpKfgpL/gpKQg4KSX4KSw4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF9ib2R5IiBtc2dpZD0iNjc0MTUyMTMzMDk5NzQ1Mjk5MCI+IuCkheCkteCksOCli+CkpyDgpLngpJ/gpL7gpIngpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlIiBtc2dpZD0iNjUxMDA0MDQ4NjA0OTIzNzYzOSI+IuCkuOClgeCksOCkleCljeCkt+CkviDgpKrgpY3gpLDgpK7gpL7gpKPgpKrgpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGVfaXNfdmFsaWQiIG1zZ2lkPSI2ODI1MjYzMjUwNzc0NTY5MzczIj4i4KSq4KWN4KSw4KSu4KS+4KSj4KSq4KSk4KWN4KSwIOCkruCkvuCkqOCljeCkryDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfdG8iIG1zZ2lkPSI0NTQyMzk0ODAyNzQ5MjEwMzIiPiLgpKbgpY3gpLXgpL7gpLDgpL4g4KSc4KS+4KSw4KWAIOCkl+CksOCkv+Ckj+CkleClizoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21tb25fbmFtZSIgbXNnaWQ9IjIyMzMyMDkyOTk0MzQxNzI2NDYiPiLgpLjgpL7gpKfgpL7gpLDgpKMg4KSo4KS+4KSuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ19uYW1lIiBtc2dpZD0iNjk3MzU2MTE5MDc2MjA4NTIzNiI+IuCkuOCkguCkl+CkoOCkqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdfdW5pdCIgbXNnaWQ9IjcyNjU5ODE4OTA0MjIwNzAzODMiPiLgpLjgpILgpJfgpKDgpKjgpL7gpKTgpY3gpK7gpJUg4KSP4KSV4KS+4KSHOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9ieSIgbXNnaWQ9IjI2NDc1ODQ5ODgwNTc0ODE1NjYiPiLgpKbgpY3gpLXgpL7gpLDgpL4g4KSc4KS+4KSw4KWAIOCkl+CksOCkv+Ckj+CkleClizoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2YWxpZGl0eV9wZXJpb2QiIG1zZ2lkPSI4ODE4ODg2MTM3NTQ1OTgzMTEwIj4i4KSu4KS+4KSo4KWN4KSv4KSk4KS+OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9vbiIgbXNnaWQ9IjU4OTUwMTc0MDQzNjEzOTcyMzIiPiLgpJzgpL7gpLDgpYAg4KSX4KSw4KS/4KSP4KSV4KWLOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4cGlyZXNfb24iIG1zZ2lkPSIzNjc2MjQyOTQ5OTE1OTU5ODIxIj4i4KSF4KS14KSn4KS/IOCkuOCkruCkvuCkquCljeCkpDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4i4KSV4KWN4KSw4KSuIOCkuOCkguCkluCljeCkr+CkvjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5nZXJwcmludHMiIG1zZ2lkPSI0NTE2MDE5NjE5ODUwNzYzMDQ5Ij4i4KSU4KSB4KSg4KS+4KSb4KS+4KSq4KS54KSw4KWCOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTI1Nl9maW5nZXJwcmludCIgbXNnaWQ9IjQzOTEyNzEyODY0NzcyNzkyNjMiPiJTSEEt4KWo4KWr4KWsIOCklOCkguCkoOCkvuCkm+CkvuCkqjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+IlNIQS0xIOCklOCkguCksuCkvuCkm+CkvuCkqjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfc2VlX2FsbCIgbXNnaWQ9IjQyOTI1NjkzODM5NzY2MzYyMDAiPiLgpLjgpKzgpYgg4KS54KWH4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNDcxMDAxMzg2NDk3NDA0MDYxNSI+IuCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpJvgpKjgpYzgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfYWN0aW9uX3Byb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI1MjQ3Njg0NDM1OTc5MTQ5MjE2Ij4i4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxpc3RfZGVsaW1ldGVyIiBtc2dpZD0iMzk3NTExNzU3MjE4NTQ5NDE1MiI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VuZGluZyIgbXNnaWQ9IjMyNDU2NTM2ODEwMDgyMTgwMzAiPiLgpKrgpKDgpL7gpIngpIHgpKbgpYguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hCcm93c2VyRGVmYXVsdCIgbXNnaWQ9IjIwNTc5NTE5NDcyOTc2MTQ3MjUiPiLgpKzgpY3gpLDgpL7gpIngpJzgpLAg4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iU2V0dXBDYWxsRGVmYXVsdCIgbXNnaWQ9IjU4MzQ5NDg0NjkyNTM3NTg1NzUiPiLgpJXgpLIg4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqOClgeCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9yZXNvbHZlcl91c2VfYWx3YXlzIiBtc2dpZD0iODAxNzc3MDc0NzgwMTQ5NDkzMyI+IuCkuOCkp+CliOCkgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9vbmNlIiBtc2dpZD0iMjQwNDY0NDc5NzE0OTE3Mzc1OCI+IuCkj+CkieCkn+CkviDgpK7gpL7gpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MTcwNTM4OTgxNjcxMjc0NzEiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjM5MjkxMjczNDIwMTQwMTIzIj4i4KSr4KWL4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2hlYWRwaG9uZXMiIG1zZ2lkPSI4MTE5OTcxODQzODAzNDM5MTEwIj4i4KS54KWH4KSh4KSr4KWL4KSo4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2RvY2tfc3BlYWtlcnMiIG1zZ2lkPSI2MjQwNjAyOTgyMjc2NTkxODY0Ij4i4KSh4KSVIOCkuOCljeCkquCkv+CkleCksOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbWVkaWFfcm91dGVfbmFtZV9oZG1pIiBtc2dpZD0iMjQ1MDk3MDM5OTAyMzQ3ODA1NSI+IkhETUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKUg4KSF4KSh4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLgpKTgpL7gpLDgpLDgpLngpL/gpKQg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IuCkruCkv+CkoeCkv+Ckr+CkvuCkleCliyDgpIngpKTgpY3gpKrgpL7gpKbgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i4KS44KWN4KSV4KWN4KSv4KS+4KSoIOCkl+CksOCljeCkpuCliCAuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLgpJzgpKHgpL7gpKgg4KS54KWB4KSB4KSm4KWILi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLgpIngpKrgpLLgpKzgpY3gpKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9IjY3Mzk4OTk5NjI2ODE4ODY0MDEiPiLgpIngpKrgpLLgpKzgpY3gpKcg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2J1aWx0X2luX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjI1ODMxMzQyOTQyOTI1NjM5NDEiPiLgpKrgpYLgpLDgpY3gpLUt4KSo4KS/4KSw4KWN4KSu4KS/4KSkIOCkuOCljeCkleCljeCksOCkv+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9oZG1pX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjE1NTUyNjQ1NTkyMjc0NzAxMDkiPiJIRE1JIOCkuOCljeCkleCljeCksOCkv+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLgpIbgpLXgpLDgpKMgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IuCkpOCkvuCksOCksOCkueCkv+CkpCDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLgpIXgpLDgpY3gpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkr+CliyDgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLLgpYcg4KSm4KWH4KSW4KS+4KSH4KSw4KS54KWH4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLgpLXgpL/gpJrgpY3gpJvgpYfgpKbgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSV4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4KSi4KS+4KSB4KSa4KS+IOCkrOCkv+CksOCljeCkuOCkqOClgSDgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IuCkl+CksuCkpCDgpKLgpL7gpIHgpJrgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiLgpJfgpLLgpKQg4KSq4KS+4KS44KS14KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+IuCkl+CksuCkpCBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJGQ8L3hsaWZmOmc+4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLgpIbgpKvgpY3gpKjgpYsg4KSi4KS+4KSB4KSa4KS+IOCkleCli+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNJTSBQSU4g4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iUElOIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkheCkueCkv+CksuClhyDgpIXgpLjgpJXgpY3gpLfgpK4g4KSb4KWkIOCkuOClgeCkmuCkvuCksOClgSDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IFBVSyDgpJXgpYvgpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCAg4KS14KS/4KS14KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpLXgpL7gpLngpJXgpLLgpL7gpIgg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLgpIfgpJrgpY3gpJvgpL/gpKQgUElOIOCkleCli+CkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IuCkruCkqOCkquCksOCljeCkpuCliyBQSU4g4KSV4KWL4KShIOCkqOCkv+CktuCljeCkmuCkv+CkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IuCkl+CksuCkpCBQSU4g4KSV4KWL4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4KWqIOCkpuClh+CkluCkvyDgpa4g4KS14KS+4KSfIOCkqOCkruCljeCkrOCksCDgpK3gpI/gpJXgpYsg4KSP4KSJ4KSf4KS+IFBJTiDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIOCkleCli+CkoSDgpa4g4KS14KSf4KS+IOCkqOCkruCljeCkrOCksCDgpLXgpL4g4KS44KWLIOCkreCkqOCljeCkpuCkviDgpKzgpKLgpYAg4KS54KWB4KSo4KWB4KSq4KSw4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iUFVLIOCkleCli+CkoSDgpKrgpYHgpKg64KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCDgpKfgpYfgpLDgpYgg4KSq4KWB4KSoOuCkquCljeCksOCkr+CkvuCkuOCkueCksOClguCksuClhyBTSU3gpLLgpL7gpIgg4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpKjgpL/gpLfgpY3gpJXgpY3gpLDgpL/gpK8g4KSX4KSw4KS/4KSm4KS/4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4g4KSV4KWL4KSh4KS54KSw4KWCIOCkruClh+CksiDgpJbgpL7gpI/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLgpKjgpL/gpJXgpYgg4KSn4KWH4KSw4KWIIOCkouCkvuCkgeCkmuCkviDgpJXgpYvgpLjgpL/gpLjgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8sIOCkpOCkquCkvuCkiOCkgeCkleCliyBHb29nbGUg4KSW4KS+4KSk4KS+4KSV4KWLIOCkuOCkvuCkpSDgpLjgpL7gpIfgpKgg4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriAo4KSH4KSu4KWH4KSyKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLgpLjgpL7gpIfgpKgg4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i4KSF4KSu4KS+4KSo4KWN4KSvIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuCkleClhyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkv+CksOCljeCkuOCkqOClgeCkreCkr+Cliz9cbiI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDgpK7gpL4g4KSc4KS+4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i4KSW4KS+4KSk4KS+IOCknOCkvuCkgeCkmiDgpLngpYHgpIHgpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJfgpLLgpKQg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkreCkj+CkleCliyDgpJvgpaQgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIXgpKjgpLLgpJUg4KSi4KS+4KSB4KSa4KS+IOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkluCkv+CkmuCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpJXgpYvgpLjgpL/gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKrgpJvgpL8g4KSl4KSqIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYIsIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpL/gpKjgpYcg4KSbIOCksCDgpLjgpKzgpYgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkoeClh+Ckn+CkviDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKTgpLjgpIHgpJcg4KSr4KWL4KSo4KSy4KS+4KSIIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSv4KWL4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkquCkm+CkvyDgpKXgpKog4KSF4KS44KSr4KSyIOCkleCli+CkuOCkv+CkuOCkueCksOClgiwg4KSr4KWL4KSo4KSy4KS+4KSIIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpL7gpLDgpY3gpK/gpLbgpL7gpLLgpL7gpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkl+CksOCkv+CkqOClhyDgpJsg4KSwIOCkuOCkrOCliCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSh4KWH4KSf4KS+IOCkueCksOCkvuCkieCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJ/gpY3gpK/gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIOCkheCkrCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSkIOCkleCkvuCksOCljeCkr+CktuCkvuCksuCkvuCkruCkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KS/4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkq+Cli+CkqCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkl+CksOCljeCkqOClgeCkreCkr+Cli+ClpCDgpIXgpKwg4KSr4KWL4KSoIOCkq+CljeCkr+CkvuCkleCljeCkn+CljeCksOCkvyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkueClgeCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CksOCljeCkqOClgeCkreCkr+Cli+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLXgpL/gpKvgpLIg4KSq4KWN4KSw4KSv4KSk4KWN4KSo4KS54KSw4KWCIOCkquCkm+Ckvywg4KSk4KSq4KS+4KSI4KSC4KSy4KS+4KSIIOCkhuCkq+CljeCkqOCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSH4KSu4KWH4KSyIOCkluCkvuCkpOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KS44KWL4KSn4KS/4KSo4KWHIOCkm+ClpFxuXG4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KS54KSw4KWC4KSu4KS+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL4g4KSX4KSy4KSkIOCksOClguCkquCkruCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSk4KS+4KSo4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSn4KWH4KSw4KWIIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpKrgpJvgpL8sIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpI/gpIngpJ/gpL4g4KSH4KSu4KWH4KSyIOCkluCkvuCkpOCkvuCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpLjgpYvgpKfgpL/gpKjgpYcg4KSb4KWkXG5cbiDgpKvgpYfgpLDgpL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYWZlX21lZGlhX3ZvbHVtZV93YXJuaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMyNDE2MTkzOTQ3NTQ3ODA2NiI+IuCkhuCkteCkvuCknCDgpLjgpLLgpY3gpLLgpL7gpLkg4KSm4KS/4KSP4KSV4KWLIOCkpOCkueCkreCkqOCljeCkpuCkviDgpK7gpL7gpKXgpL8gIOCkrOCkouCkvuCkieCkqOClhyDgpLngpYs/XG7gpKDgpYLgpLLgpYsg4KSG4KS14KS+4KSc4KSu4KS+IOCkuOClgeCkqOCljeCkpuCkviDgpLLgpL7gpK7gpYsg4KS44KSu4KSv4KSV4KWLIOCksuCkvuCkl+CkvyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KWB4KSo4KWN4KSo4KWHIOCktuCkleCljeCkpOClgOCksuCkvuCkiCDgpJbgpKTgpY3gpKTgpK4g4KSq4KS+4KSw4KWN4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRpbnVlX3RvX2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTYyNjQyNzM3MjMxNjA3MDI1OCI+IuCkieCkquCksuCkrOCljeCkp+CkpOCkviDgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkpuClgeCkiOCkteCkn+CkviDgpJTgpILgpLLgpL7gpLngpLDgpYLgpLLgpYcg4KSl4KS/4KSa4KS/4KSw4KS54KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9lbmFibGVkIiBtc2dpZD0iMTM4MTk3MjA0ODU2NDU0NzY4NSI+IuCkquCkueClgeCkgeCkmiDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2FjY2Vzc2liaWxpdHlfY2FuY2VsZWQiIG1zZ2lkPSIzODMzOTIzMjU3OTY2NjM1NjczIj4i4KSq4KS54KWB4KSB4KSa4KSv4KWL4KSX4KWN4KSv4KSk4KS+IOCksOCkpuCljeCkpiDgpJfgpLDgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IuCkheCkueCkv+CksuClh+CkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3duZXJfbmFtZSIgbXNnaWQ9IjI3MTY3NTU0NjAzNzYwMjgxNTQiPiLgpK7gpL7gpLLgpL/gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX3RpdGxlIiBtc2dpZD0iNDUxMDM3MzA4MzA4MjUwMDE5NSI+IuCkpOCljeCksOClgeCkn+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub19yZXN0cmljdGVkX2FjY291bnRzIiBtc2dpZD0iNTczOTQ2MzI0OTY3MzcyNzczNiI+IuCkquCljeCksOCkpOCkv+CkrOCkqOCljeCkp+Ckv+CkpCDgpKrgpY3gpLDgpYvgpKvgpL7gpIfgpLLgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkr+CkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSW4KS+4KSk4KS+4KS54KSw4KWCIOCkuOCkruCksOCljeCkpeCkqCDgpJfgpLDgpY3gpKbgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbm90X2ZvdW5kIiBtc2dpZD0iMzQyOTE0MTg1MzQ5ODkyNzM3OSI+IuCkr+CkuCDgpJXgpL7gpLDgpY3gpK8g4KS44KSu4KWN4KS54KS+4KSy4KSo4KWHIOCkleClgeCkqOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSt4KWH4KSf4KS/4KSP4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmV2b2tlIiBtc2dpZD0iNTQwNDQ3OTE4NTIyODI3MTU4NiI+IuCksOCkpuCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EwIiBtc2dpZD0iNzg3NTQyNzQ4OTQyMDgyMTc5MyI+IklTTyBBMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEiIG1zZ2lkPSIzNzYwNzM0NDk5MDUwODc1MzU2Ij4iSVNPIEExIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMiIgbXNnaWQ9IjU5NzMyNjYzNzgwMjAxNDQzODIiPiJJU08gQTIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EzIiBtc2dpZD0iMTM3MzQwNzEwNTY4NzMwMDg4NCI+IklTTyBBMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTQiIG1zZ2lkPSI2Njg5NzcyODA3OTgyNTk3MjU0Ij4iSVNPIEE0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNSIgbXNnaWQ9IjUzNTM1NDk2NTIwMTU3NDEwNDAiPiJJU08gQTUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E2IiBtc2dpZD0iODU4NTAzODA0ODY3NDkxMTkwNyI+IklTTyBBNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTciIG1zZ2lkPSI2NjQxODM2NzE2OTYzODM5MTE5Ij4iSVNPIEE3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hOCIgbXNnaWQ9Ijc1NzExMzk0Mzc0NjU2OTMzNTUiPiJJU08gQTgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E5IiBtc2dpZD0iMTM3ODQ1NTg5MTk1NzExNTA3OSI+IklTTyBBOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEwIiBtc2dpZD0iMjQ4MDc0NzQ1NzQyOTQ3NTM0NCI+IklTTyBBMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IwIiBtc2dpZD0iMzk2NTkzNTA5NzY2MTEwODAzOSI+IklTTyBCMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEiIG1zZ2lkPSIyNTA1NzUzMjg1MDEwMTE1NDM3Ij4iSVNPIEIxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMiIgbXNnaWQ9Ijg3NjM4NzQ3MDk4NTk0NTg0NTMiPiJJU08gQjIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IzIiBtc2dpZD0iNDIxMDUwNjY4ODE5MTc2NDA3NiI+IklTTyBCMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjQiIG1zZ2lkPSI1NzQ5NDA0MTY1ODg4NTI2MDM0Ij4iSVNPIEI0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNSIgbXNnaWQ9Ijc2NDA2Mjc0MTQ2MjE5MDQ3MzMiPiJJU08gQjUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I2IiBtc2dpZD0iNzM0Mjk4ODg2NDcxMjc0ODU0NCI+IklTTyBCNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjciIG1zZ2lkPSI1MDY5ODQ0MDY1MjM1MzgyNDI5Ij4iSVNPIEI3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iOCIgbXNnaWQ9IjczMTY4MTg5MjIyNzg3Nzk3NzQiPiJJU08gQjgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I5IiBtc2dpZD0iNTQxNDcyNzA5NDAyNjUzMjM0MSI+IklTTyBCOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEwIiBtc2dpZD0iNTI1MTI1MzczMTgzMjA0ODE4NSI+IklTTyBCMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MwIiBtc2dpZD0iNDAwMzEzODM0MjY3MTk2NDIxNyI+IklTTyBDMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzEiIG1zZ2lkPSIxOTM1MTg4MDYzMzkzNTUzMDA4Ij4iSVNPIEMxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMiIgbXNnaWQ9IjMxOTczMDc5Njk3MTIwNjk5MDQiPiJJU08gQzIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MzIiBtc2dpZD0iNDMzNTgyNjA4NzMyMTkxMzUwOCI+IklTTyBDMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzQiIG1zZ2lkPSIzNzQ1NjM5NTk4MjgxMDE1MDA1Ij4iSVNPIEM0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNSIgbXNnaWQ9IjgyNjk0NTc3NjU4MjI3OTEwMTMiPiJJU08gQzUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M2IiBtc2dpZD0iNTY2NjY2MTA1MjYwMzQ2OTMwIj4iSVNPIEM2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNyIgbXNnaWQ9Ijg2Nzg0MTMxODA3ODI2MDg0OTgiPiJJU08gQzciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M4IiBtc2dpZD0iODM5MjM3NjIwNjYyNzA0MTczMCI+IklTTyBDOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzkiIG1zZ2lkPSI5MTkxNjEzMzcyMzI0ODQ1NDA1Ij4iSVNPIEM5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMTAiIG1zZ2lkPSI3MzI3NzA5Njk5MTg0OTIwODIyIj4iSVNPIEMxMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZXR0ZXIiIG1zZ2lkPSI0MTkxODA1NjE1ODI5NDcyOTUzIj4i4KSq4KSk4KWN4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2d2cm5tdF9sZXR0ZXIiIG1zZ2lkPSI3ODUzMzgyMTkyNjQ5NDA1NTA3Ij4i4KS44KSw4KSV4KS+4KSw4KWAIOCkquCkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZWdhbCIgbXNnaWQ9IjY2OTc5ODI5ODgyODM4MjMxNTAiPiLgpJXgpL7gpKjgpYLgpKjgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfanVuaW9yX2xlZ2FsIiBtc2dpZD0iMzcyNzc0Mzk2OTkwMjc1ODk0OCI+Ikp1bmlvciBMZWdhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZWRnZXIiIG1zZ2lkPSIyODE4NzE0NjQ4OTY2MDEyMzYiPiJMZWRnZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfdGFibG9pZCIgbXNnaWQ9IjU3NzU5NjY0MTYzMzM1NzgxMjciPiJUYWJsb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id3JpdGVfZmFpbF9yZWFzb25fY2FuY2VsbGVkIiBtc2dpZD0iNzA5MTI1ODM3ODEyMTYyNzYyNCI+IuCksOCkpuCljeCkpiDgpJfgpLDgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3cml0ZV9mYWlsX3JlYXNvbl9jYW5ub3Rfd3JpdGUiIG1zZ2lkPSI4MTMyNTA1NDE3OTM1MzM3NzI0Ij4i4KS44KS+4KSu4KS+4KSX4KWN4KSw4KWAIOCksuClh+CkluCkqOCkruCkviDgpKTgpY3gpLDgpYHgpJ/gpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjYwNDg5MTM4ODAxODQ2MjgxMTkiPiLgpIXgpJzgpY3gpJ7gpL7gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfYWRtaW5fcGluIiBtc2dpZD0iNzgzNjQzNzMxODk1MTQzOTcwIj4i4KSq4KWN4KSw4KS24KS+4KS44KSVIFBJTiDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX3BpbiIgbXNnaWQ9IjMzOTU5NTM0MjEzNjg0NzYxMDMiPiJQSU4g4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9pbmNvcnJlY3QiIG1zZ2lkPSI4NTcxNTEyMDAzOTU1MDc3OTI0Ij4i4KSX4KSy4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX29sZF9waW4iIG1zZ2lkPSIxNDYyMjA2MjI1NTEyOTEwNzU3Ij4i4KS14KSw4KWN4KSk4KSu4KS+4KSoIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9uZXdfcGluIiBtc2dpZD0iNTk1OTYwNjY5MTYxOTk1OTE4NCI+IuCkqOCkr+CkvuCkgSBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY29uZmlybV9waW4iIG1zZ2lkPSI4NTAxNTIzODI5NjMzMTQ2MjM5Ij4i4KSo4KSv4KS+4KSBIFBJTiDgpKjgpL/gpLbgpY3gpJrgpL/gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NyZWF0ZV9waW4iIG1zZ2lkPSI4MDE3NjAwMDAwMjYzNDUwMzM3Ij4i4KSq4KWN4KSw4KSk4KS/4KSs4KSo4KWN4KSn4KS54KSw4KWC4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkj+CkieCkn+CkviBQSU4g4KSs4KSo4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCIgbXNnaWQ9IjIyMjQyMTQxOTA5MDY5OTQ1NDgiPiJQSU4g4KS54KSw4KWCIOCkruClh+CksiDgpJbgpL7gpI/gpKjgpKjgpY3gpaQg4KSq4KWB4KSo4KSDIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfdG9vX3Nob3J0IiBtc2dpZD0iODE3Mzk4Mjc1NjI2NTc3Nzc5MiI+IlBJTiDgpIXgpKTgpL8g4KSb4KWL4KSf4KWLIOCkreCkr+Cli+ClpCDgpJXgpK7gpY3gpKTgpYDgpK7gpL4g4KWqIOCkheCkmeCljeCklSDgpLngpYHgpKgg4KSG4KS14KS24KWN4KSv4KSVIOCkm+ClpCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icmVzdHJfcGluX2NvdW50ZG93biI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMxMTA1MDk5NTE5ODU0ODY3NSI+IuClpyDgpLjgpYfgpJXgpYfgpKjgpY3gpKEg4KSq4KSb4KS/IOCkquClgeCkqOCkgyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquClgeCkqOCkgyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IuCkquCkm+CkvyDgpKrgpYHgpKjgpIMg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRyYW5zaWVudF9uYXZpZ2F0aW9uX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjQ5MDc4NDQwNDM2MTExMjM0MjYiPiLgpKrgpJ/gpY3gpJ/gpL8g4KSm4KWH4KSW4KS/4KSo4KWHIOCkrOCkqOCkvuCkieCkqCDgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpJXgpYsg4KSb4KWH4KSJ4KSu4KS+IOCkuOCljeCkteCkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0cmFuc2llbnRfbmF2aWdhdGlvbl9jb25maXJtYXRpb25fbG9uZyIgbXNnaWQ9IjgwNjE2ODU5MjA1MDgwODY2OTciPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSq4KSf4KWN4KSf4KS/IOCkpuClh+CkluCkv+CkqOClhyDgpKzgpKjgpL7gpIngpKgg4KS44KWN4KSV4KWN4KSw4KS/4KSo4KSV4KWLIOCkm+Clh+CkieCkrOCkvuCknyDgpLjgpY3gpLXgpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmU0ZmMzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1ODggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYnl0ZVNob3J0IiBtc2dpZD0iODM0MDk3Mzg5Mjc0MjAxOTEwMSI+IkIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJraWxvYnl0ZVNob3J0IiBtc2dpZD0iNTk3Mzc4OTc4MzUwNDc3MTg3OCI+IktCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVnYWJ5dGVTaG9ydCIgbXNnaWQ9IjYzNTU4NTE1NzY3NzA0Mjg5MjIiPiJNQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdpZ2FieXRlU2hvcnQiIG1zZ2lkPSIzMjU5ODgyNDU1MjEyMTkzMjE0Ij4iR0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXJhYnl0ZVNob3J0IiBtc2dpZD0iMjMxNjEzMDE4MTU5MTg2OTYyIj4iVEIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXRhYnl0ZVNob3J0IiBtc2dpZD0iNTYzNzgxNjY4MDE0NDk5MDIxOSI+IlBCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmlsZVNpemVTdWZmaXgiIG1zZ2lkPSI5MTY0MjkyNzkxNTAwNTMxOTQ5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkczwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iVU5JVCI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bnRpdGxlZCIgbXNnaWQ9IjQ2Mzg5NTY5NTQ4NTI3ODI1NzYiPiImbHQ74KSs4KS/4KSo4KS+IOCktuClgOCksOCljeCkt+CklSZndDsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpcyIgbXNnaWQ9Ijc4OTk4Mjk1MTYwNDg4MTMyMzciPiLigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpc190d29fZG90cyIgbXNnaWQ9IjEyMjgwNzg5OTQ4NjYwMzA3MzYiPiLigKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eVBob25lTnVtYmVyIiBtc2dpZD0iNzY5NDA2MzA0MjA3OTY3NjUxNyI+IijgpJXgpYHgpKjgpYgg4KSr4KWL4KSoIOCkqOCkruCljeCkrOCksCDgpJvgpYjgpKgpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5rbm93bk5hbWUiIG1zZ2lkPSIyMjc3NTU2NTQ2NzQyNzQ2NTIyIj4iKOCkheCknOCljeCknuCkvuCkpCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0Vm9pY2VNYWlsQWxwaGFUYWciIG1zZ2lkPSIyNjYwMDIwOTkwMDk3NzMzMDc3Ij4i4KSt4KWN4KS14KS+4KSH4KS4IOCkruClh+CksiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRNc2lzZG5BbHBoYVRhZyIgbXNnaWQ9IjI4NTA4ODk3NTQ5MTk1ODQ2NzQiPiJNU0lTRE7gpaciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlFcnJvciIgbXNnaWQ9IjUxNTQ0OTk0NTc3MzkwNTI5MDciPiLgpJzgpKHgpL7gpKgg4KS44KSu4KS44KWN4KSv4KS+IOCkteCkviDgpIXgpK7gpL7gpKjgpY3gpK8gTU1JIOCkleCli+CkoeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUZkbkVycm9yIiBtc2dpZD0iNTIyNDM5ODIxNjM4NTMxNjQ3MSI+IuCkheCkquCksOClh+CktuCkqCDgpKjgpL/gpLbgpY3gpJrgpL/gpKQg4KSh4KS+4KSv4KSyIOCkqOCkruCljeCkrOCksOCkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSu4KS+4KSk4KWN4KSwIOCkquCljeCksOCkpOCkv+CkrOCkqOCljeCkp+Ckv+CkpCDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZCIgbXNnaWQ9IjgxNDcyNzgzNDY0MTQ3MTQzMTUiPiLgpLjgpYfgpLXgpL4g4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkRm9yIiBtc2dpZD0iNjg1NjIyODE0MDQ1MzQ3MTA0MSI+IuCkqOCkv+CkruCljeCkqCDgpIngpLLgpY3gpLLgpYfgpJbgpL/gpKTgpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOClh+CkteCkviDgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KS/4KSv4KWLOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VEaXNhYmxlZCIgbXNnaWQ9IjE5Mzc1NTMyMjY1OTI1MTY0MTEiPiLgpLjgpYfgpLXgpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlUmVnaXN0ZXJlZCIgbXNnaWQ9IjYyNzUwMTkwODI1OTgxMDI0OTMiPiLgpKbgpLDgpY3gpKTgpL4g4KS44KSr4KSyIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFcmFzZWQiIG1zZ2lkPSIxMjg4NTg0Njk1Mjk3MjAwOTcyIj4i4KSu4KWH4KSf4KS+4KSHIOCkuOCkq+CksiDgpKXgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZEluY29ycmVjdCIgbXNnaWQ9Ijc2MTIyMDg4Mzk0NTAxMjg3MTUiPiLgpJfgpLLgpKQg4KSq4KS+4KS44KS14KSw4KWN4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pQ29tcGxldGUiIG1zZ2lkPSI4MjMyNTI3NDk1NDExNjk4MzU5Ij4iTU1JIOCkquClgeCksOCkviDgpK3gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQaW4iIG1zZ2lkPSI5MDE1Mjc3NjQ1NTQ2NzEwMDE0Ij4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpYsg4KSq4KWB4KSw4KS+4KSo4KWLIFBJTiDgpLjgpLngpYAg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkUHVrIiBtc2dpZD0iNTQ4NzI1NzY0NzA4MTEzMjIwMSI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KWLIFBVSyDgpLjgpLngpYAg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWlzbWF0Y2hQaW4iIG1zZ2lkPSI2MDkzNzkwNTQ0OTY4NjM0MTkiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkreCkj+CkleCliyBQSU4g4KSu4KWH4KSyIOCkluCkvuCkgeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQaW4iIG1zZ2lkPSIzODUwMDE4NDQ1MTg3NDc1Mzc3Ij4i4KWqIOCkpuClh+CkluCkvyDgpa4g4KS14KSf4KS+IOCkqOCkruCljeCkrOCksCDgpK3gpI/gpJXgpYsg4KSP4KSJ4KSf4KS+IFBJTiDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLgpa4g4KS14KSf4KS+IOCkqOCkruCljeCkrOCksOCkueCksOClgiDgpLXgpL4g4KS44KWLIOCkreCkqOCljeCkpuCkviDgpLLgpL7gpK7gpYsg4KSP4KSJ4KSf4KS+IFBVSyDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IuCkpOCkquCkvuCkiOCkguCkleCliyBTSU0g4KSV4KS+4KSw4KWN4KShIFBVSy3gpLLgpJUg4KSb4KWkIOCkr+CkuOCksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIFBVSyDgpJXgpYvgpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCBQVUsyIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IuCkhuCkl+CkruCkqCDgpJXgpLLgpLAgSUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbGlyTW1pIiBtc2dpZD0iNzc4NDY3MzY3MzQ0NjgzMzA5MSI+IuCkrOCkvuCkueCkv+CksOCkv+CkqOClhyDgpJXgpLLgpLAgSUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDZk1taSIgbXNnaWQ9IjUxMjMyMTg5ODkxNDE1NzM1MTUiPiLgpJXgpLIg4KSF4KSX4KS+4KSh4KS/IOCkrOCkouCkvuCkieCkgeCkpuCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkN3TW1pIiBtc2dpZD0iOTEyOTY3ODA1Njc5NTAxNjg2NyI+IuCkleCksiDgpKrgpY3gpLDgpKTgpL/gpJXgpY3gpLfgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJCYU1taSIgbXNnaWQ9IjQ1NTE5MzA2NzkyNjc3MDU4MSI+IuCkleCksiDgpKzgpY3gpK/gpL7gpLDgpL/gpJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJQd2RNbWkiIG1zZ2lkPSI3MDQzNzE1Njg3OTA1MjU0MTk5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCksOCkv+CkteCksOCljeCkpOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlBpbk1taSIgbXNnaWQ9IjMxMTMxMTc3ODAzNjExOTAzMDQiPiJQSU4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ25pcE1taSIgbXNnaWQ9IjMxMTA1MzQ2ODA1NTc4NTcxNjIiPiLgpKrgpY3gpLDgpLjgpY3gpKTgpYHgpKQg4KSo4KSu4KWN4KSs4KSw4KSu4KS+IOCkleCksiDgpJfgpLDgpY3gpKbgpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmlyTW1pIiBtc2dpZD0iMzA2MjEwMjEyMTQzMDU0ODczMSI+IuCkleCksiDgpJfgpLDgpY3gpKjgpYcg4KSF4KSC4KSVIOCksOCli+CkleClh+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJUaHJlZVdDTW1pIiBtc2dpZD0iOTA1MTA0NzE3MDMyMTE5MDM2OCI+IuCkleCksiDgpJfgpLDgpY3gpKjgpYcg4KSk4KS/4KSoIOCkpOCksOCkv+CkleCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJ1YWNNbWkiIG1zZ2lkPSI3ODI3ODg3NDU5MTM4MzA4ODg2Ij4i4KSo4KSa4KS+4KS54KS/4KSP4KSV4KS+IOCksOCkv+CkuOCkieCkoOCljeCkpuCkviDgpJXgpLLgpLngpLDgpYLgpJXgpYsg4KSF4KS44KWN4KS14KWA4KSV4KS+4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ25kTW1pIiBtc2dpZD0iMzExNjQ0NjIzNzA4MTU3NTgwOCI+IuCkleCksuCkv+CkmSDgpKjgpK7gpY3gpKzgpLAg4KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkqOClhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkRuZE1taSIgbXNnaWQ9IjEyNjU0Nzg5MzI0MTgzMzQzMzEiPiLgpKzgpL7gpKfgpL4g4KSo4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPbk5leHRDYWxsT24iIG1zZ2lkPSI0Mjk0MTU0MDkxNDU3ODE5MjMiPiLgpLjgpYDgpK7gpKTgpL8g4KSX4KSw4KWN4KSoIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpLLgpLAgSUQsIOCkheCksOCljeCkleCliyDgpJXgpLI6IOCkuOClgOCkruCkpOCkvyDgpJfgpLDgpL/gpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPZmYiIG1zZ2lkPSIzMDkyOTE4MDA2MDc3ODY0NjI0Ij4i4KSV4KSy4KSwIElEIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCkleCliyDgpLLgpL7gpJfgpL8g4KSw4KWL4KSV4KS+4KS14KSfIOCkm+ClpCDgpIXgpLDgpY3gpJXgpYsg4KSV4KSyOiDgpLDgpYvgpJXgpL7gpLXgpJ8g4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9uIiBtc2dpZD0iNjE3OTQyNTE4Mjg1NjQxODQ2NSI+IuCkleCksuCksCBJRCDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpKbgpYfgpJbgpL8g4KSq4KWN4KSw4KSk4KS/4KSs4KSo4KWN4KSn4KS/4KSkIOCkm+CliOCkqOClpCDgpIXgpLDgpY3gpJXgpYsg4KSV4KSyOiDgpKrgpY3gpLDgpKTgpL/gpKzgpKjgpY3gpKfgpL/gpKQg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9mZiIgbXNnaWQ9IjI1Njc5OTg2MzMxMjQ0MDg1NTIiPiLgpJXgpLLgpLAgSUQg4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSV4KWLIOCksuCkvuCkl+CkvyDgpLDgpYvgpJXgpL7gpLXgpJ8g4KSb4KWI4KSo4KWkIOCkheCksOCljeCkleCliyDgpJXgpLI6IOCksOCli+CkleCkvuCkteCknyDgpJvgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlTm90UHJvdmlzaW9uZWQiIG1zZ2lkPSI4NjE0ODMwMTgwNTA4Njg2NjY2Ij4i4KS44KWH4KS14KS+4KSV4KWLIOCkteCljeCkr+CkteCkuOCljeCkpeCkviDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSUGVybWFuZW50IiBtc2dpZD0iMzM3NzM3MTE0NTkyNjgzNTY3MSI+IuCkpOCkquCkvuCkiOCkgiDgpJXgpLLgpLAgSUQg4KS44KWH4KSf4KS/4KSZIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZENoYW5nZWRUaXRsZSIgbXNnaWQ9IjU1OTIxODkzOTg5NTYxODc0OTgiPiLgpKrgpY3gpLDgpKTgpL/gpKzgpKjgpY3gpKfgpL/gpKQg4KSq4KS54KWB4KSB4KSaIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpK3gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRGF0YSIgbXNnaWQ9Ijg2NTM3OTQ3ODQ2OTAwNjU1NDAiPiLgpKHgpYfgpJ/gpL4g4KS44KWH4KS14KS+IOCksOCli+CkleCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25FbWVyZ2VuY3kiIG1zZ2lkPSI2NTgxMTYzNzc5MDcyODMzNjY1Ij4i4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkuOClh+CkteCkviDgpLDgpYvgpJXgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uTm9ybWFsIiBtc2dpZD0iNDk1Mzg2NzAxMTM4OTc1MDY3MyI+IuCkreCljeCkteCkvuCkh+CkuCDgpLjgpYfgpLXgpL4g4KSs4KWN4KSy4KSVIOCkreCkj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25BbGxWb2ljZSIgbXNnaWQ9IjMzOTY5NjM2NTIxMDgxNTEyNjAiPiLgpLjgpKzgpYgg4KSG4KS14KS+4KScIOCkuOClh+CkteCkvuCkueCksOClgiDgpKzgpKjgpY3gpKYg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uU21zIiBtc2dpZD0iODMxNDM1MjMyNzQ2MTYzODg5NyI+IlNNUyDgpLjgpYfgpLXgpL4g4KSw4KWL4KSV4KS/4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlRGF0YSIgbXNnaWQ9Ijk5NjYzNjQ4NzEwNjE3MTMyMCI+IuCkreCljeCkteCkvuCkh+CkuC/gpKHgpYfgpJ/gpL4g4KS44KWH4KS14KS+4KS54KSw4KWCIOCksOCli+CkleCkv+Ckj+CkleCkviDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Wb2ljZVNtcyIgbXNnaWQ9IjE4ODg1ODgxNTI3OTIwMjM4NzMiPiLgpIbgpLXgpL7gpJwvU01TIOCkuOClh+CkteCkvuCkueCksOClgiDgpKzgpKjgpY3gpKYg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsIiBtc2dpZD0iNTY0MzAyODI2NDQ2NjA5MjgyMSI+IuCkuOCkrOCliCDgpK3gpY3gpLXgpL7gpIfgpLgv4KSh4KWH4KSf4KS+L1NNUyDgpLjgpYfgpLXgpL7gpLngpLDgpYIg4KSs4KWN4KSy4KSVIOCkreCkj+CkleCkviDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NWb2ljZSIgbXNnaWQ9IjEyNTgzOTM4MTIzMzUyNTgwMTkiPiLgpIbgpLXgpL7gpJwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhIiBtc2dpZD0iODcyNDU2NzgyMDc3OTM3ODkzIj4i4KSh4KWH4KSf4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRkFYIiBtc2dpZD0iNTU2NjYyNDk5ODg0MDQ4NjQ3NSI+IuCkq+CljeCkr+CkvuCkleCljeCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1NNUyIgbXNnaWQ9IjIwMTU0NjAzNzM3MDE1Mjc0ODkiPiJTTVMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhQXN5bmMiIG1zZ2lkPSI0NTIzNDU0NzgzNDk4NTUxNDY4Ij4iQXN5bmMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhU3luYyIgbXNnaWQ9Ijc1MzAwMDA1MTk2NDYwNTQ3NzYiPiLgpLjgpL/gpJngpY3gpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzUGFja2V0IiBtc2dpZD0iNjk5MTAwNjU1Nzk5MzQyMzQ1MyI+IuCkquCljeCkr+CkvuCkleClh+CknyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BBRCIgbXNnaWQ9IjMyMzUyNTkwODU2NDgyNzEwMzciPiJQQUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDAiIG1zZ2lkPSI3MTcwMzM1NDcyMTk4Njk0OTQ1Ij4i4KSw4KWL4KSu4KS/4KSZIOCkuOClguCkmuCklSDgpJbgpYHgpLLgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEiIG1zZ2lkPSI1MzE0ODYxNTE5NzUyNTM4OTIyIj4i4KSw4KWL4KSu4KS/4KSZIOCkuOClguCkmuCklSDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDIiIG1zZ2lkPSI4OTY5OTI5MDQ5MDgxMjY4MTE1Ij4i4KSw4KWL4KSu4KS/4KSZIOCkuOClguCkmuCklSDgpKvgpY3gpLLgpY3gpK/gpL7gpLgg4KSX4KSw4KWN4KSm4KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQzIiBtc2dpZD0iNTE0ODI1NTAyNzA0Mzk0MzMxNyI+IuCkm+Ckv+CkruClh+CkleCkrOCkvuCknyDgpKzgpL7gpLngpL/gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDQiIG1zZ2lkPSI4ODA4NDU2NjgyNTUwNzk2NTMwIj4i4KSs4KS/4KSy4KWN4KSh4KS/4KSZ4KSV4KWLIOCkrOCkvuCkueCkv+CksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NSIgbXNnaWQ9Ijc2MDQwNjMyNTI4NTAzNTQzNTAiPiLgpLDgpYvgpK7gpL/gpJkgLSDgpIngpKrgpK/gpYHgpJXgpY3gpKQg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ2IiBtc2dpZD0iMjA1OTQ0MDgyNTc4Mjg3MTUxMyI+IuCksOCli+CkruCkv+CkmSAtIOCkieCkquCksuCkrOCljeCkpyDgpKrgpY3gpLDgpKPgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDciIG1zZ2lkPSI3MTEyMDc4NzI0MDk3MjMzNjA1Ij4i4KSw4KWL4KSu4KS/4KSZIC0g4KSP4KSy4KS/4KSv4KSo4KWN4KS44KSwIOCkquCkvuCksOCljeCkn+CkqOCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0OCIgbXNnaWQ9IjU5ODk1Njk3Nzg2MDQwODkyOTEiPiLgpLDgpYvgpK7gpL/gpJkgLSDgpKrgpY3gpLDgpL/gpK7gpL/gpK/gpK4g4KSq4KS+4KSw4KWN4KSf4KSo4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ5IiBtc2dpZD0iNzk2OTI5NjgxMTM1NTE1MjQ5MSI+IuCksOCli+CkruCkv+CkmSAtIOCkquClguCksOCljeCkoyDgpLjgpYfgpLXgpL4g4KSV4KS+4KSw4KWN4KSv4KSV4KWN4KS34KSu4KSk4KS+IOCkheCkteCkuOCljeCkpeCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTAiIG1zZ2lkPSIzOTkyOTA2OTk5ODE1MzE2NDE3Ij4i4KSw4KWL4KSu4KS/4KSZIC0g4KSG4KSZ4KWN4KS24KS/4KSVIOCkuOClh+CkteCkviDgpKrgpY3gpLDgpJXgpL7gpLDgpY3gpK/gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDExIiBtc2dpZD0iNDE1NDQ3Njg1NDQyNjkyMDk3MCI+IuCksOCli+CkruCkv+CkmSDgpKfgpY3gpLXgpJzgpL4g4KSa4KS+4KSy4KWBIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTIiIG1zZ2lkPSIxMTg5MDcxMTE5OTkyNzI2MzIwIj4i4KSw4KWL4KSu4KS/4KSZIOCkrOCljeCkr+CkvuCkqOCksCDgpKzgpKjgpY3gpKYg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHRTZWFyY2hpbmciIG1zZ2lkPSI4MzYwMTQxODg1OTcyMjc5OTYzIj4i4KS44KWH4KS14KS+4KSV4KWLIOCkluCli+CknOClgCDgpJfgpLDgpY3gpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjZlRlbXBsYXRlTm90Rm9yd2FyZGVkIiBtc2dpZD0iMTY4MzY4NTg4Mzg0MTI3MjU2MCI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiDgpIXgpJfgpL7gpKHgpL8g4KSq4KSg4KS+4KSH4KSP4KSV4KWLIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWQiIG1zZ2lkPSIxMzAyOTIyMTE3NDk4NTkwNTIxIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJESUFMSU5HX05VTUJFUiI+ezF9PC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWRUaW1lIiBtc2dpZD0iOTIwNjI1MTczNjUyNzA4NTI1NiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iRElBTElOR19OVU1CRVIiPnsxfTwveGxpZmY6Zz4g4KSq4KSb4KS/IDx4bGlmZjpnIGlkPSJUSU1FX0RFTEFZIj57Mn08L3hsaWZmOmc+IOCkuOClh+CkleClh+CkqOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkIiBtc2dpZD0iNTA3MzIzNzgyNzYyMDE2NjI4NSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiDgpIXgpJfgpL7gpKHgpL8g4KSs4KSi4KS+4KSH4KSP4KSV4KWLIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkVGltZSIgbXNnaWQ9IjY3ODE2MjE5NjQzMjA2MzUxNzIiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjog4KSF4KSX4KS+4KSh4KS/IOCkrOCkouCkvuCkh+Ckj+CkleCliyDgpJvgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmY0NvbXBsZXRlIiBtc2dpZD0iMzExODg0ODIzMDk2Njg4NjU3NSI+IuCkteCkv+CktuClh+Ckt+CkpOCkviDgpJXgpYvgpKEg4KSq4KWB4KSw4KS+IOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZjRXJyb3IiIG1zZ2lkPSIzMzI3NTYwMTI2NTg4NTAwNzc3Ij4i4KSc4KSh4KS+4KSoIOCkuOCkruCkuOCljeCkr+CkviDgpLXgpL4g4KSF4KSu4KS+4KSo4KWN4KSvIOCkuOClgeCkteCkv+Ckp+CkviDgpJXgpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JPayIgbXNnaWQ9IjExOTE5MTkzNzgwODM0NzIyMDQiPiLgpKDgpL/gpJUg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yIiBtc2dpZD0iNzk1NjM5MjUxMTE0NjY5ODUyMiI+IuCkj+CkieCkn+CkviDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSk4KWN4KSw4KWB4KSf4KS/IOCkpeCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiJVUkwg4KSt4KWH4KSf4KS+4KSJ4KSoIOCkuOCkleClh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkQXV0aFNjaGVtZSIgbXNnaWQ9IjYyOTk5ODAyODA0NDIwNzY3OTkiPiLgpLjgpL7gpIfgpJ/gpJXgpYsg4KSG4KSn4KS/4KSV4KS+4KSw4KS/4KSV4KSk4KS+IOCkr+Cli+CknOCkqOCkviDgpLjgpK7gpLDgpY3gpKXgpL/gpKQg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yQXV0aCIgbXNnaWQ9IjE0MzUwNjU2Mjk0MzgwNDQ1MzQiPiLgpKrgpY3gpLDgpK7gpL7gpKPgpYDgpJXgpLDgpKMg4KSX4KSw4KWN4KSoIOCkuOCkleClh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclByb3h5QXV0aCIgbXNnaWQ9IjE3ODgyMDcwMTA1NTkwODEzMzEiPiLgpKrgpY3gpLDgpYvgpJXgpY3gpLjgpYAg4KS44KSw4KWN4KSt4KSw4KSV4KWLIOCkruCkvuCkp+CljeCkr+CkruCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK7gpL7gpKPgpL/gpJXgpLDgpKMg4KSF4KS44KSr4KSyIOCkreCkj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JDb25uZWN0IiBtc2dpZD0iODcxNDI3MzIzNjM2NDY0MDU0OSI+IuCkuOCksOCljeCkreCksOCkuOCkgeCklyDgpJzgpYvgpKHgpY3gpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9ySU8iIG1zZ2lkPSIyMzQwNTU4MTk3NDg5MzAyMTg4Ij4i4KS44KSw4KWN4KSt4KSw4KS44KSB4KSXIOCkuOCkguCkmuCkvuCksCDgpJfgpLDgpY3gpKgg4KS44KSV4KWH4KSo4KWkIOCkq+Clh+CksOCkvyDgpKrgpJvgpL8g4KSV4KWL4KS44KS/4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclRpbWVvdXQiIG1zZ2lkPSI0NzQzNDAzNzAzNzYyODgzOTU0Ij4i4KS44KSw4KWN4KSt4KSwIOCkuOCkguCkl+CkleCliyDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkuOCkruCkryDgpLjgpJXgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JSZWRpcmVjdExvb3AiIG1zZ2lkPSI4Njc5NTk2MDkwMzkyNzc5NTE2Ij4i4KSq4KWD4KS34KWN4KSf4KSu4KS+IOCkp+Clh+CksOCliCDgpLjgpLDgpY3gpK3gpLDgpLngpLDgpYLgpKTgpL/gpLAg4KSq4KWB4KSo4KSDIOCkqOCkv+CksOCljeCkpuClh+CktuCkqOCkueCksOClgiDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JVbnN1cHBvcnRlZFNjaGVtZSIgbXNnaWQ9IjUwMTU3MzA4MTI5MDYxOTIyMDgiPiLgpKrgpY3gpLDgpYvgpJ/gpYvgpJXgpLIg4KS44KSu4KSw4KWN4KSl4KS/4KSkIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZhaWxlZFNzbEhhbmRzaGFrZSIgbXNnaWQ9Ijk2NTQ5NjA2MDAwNjU4NjQxIj4i4KSP4KSJ4KSf4KS+IOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpJzgpKHgpL7gpKgg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqCDgpLjgpJXgpYfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4i4KSq4KWD4KS34KWN4KSgIOCkluCli+CksuCljeCkqCDgpLjgpJXgpL/gpIHgpKbgpYjgpKgg4KSV4KS/4KSo4KSt4KSo4KWHIFVSTCDgpIXgpK7gpL7gpKjgpY3gpK8g4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZSIgbXNnaWQ9IjIxNzA3ODg1MTUwNTI1NTg2NzYiPiLgpKvgpL7gpIfgpLIg4KSt4KWH4KSf4KS+4KSJ4KSoIOCkuOCkleClh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckZpbGVOb3RGb3VuZCIgbXNnaWQ9IjYyMDM4NTY2MTIwNDI2NTUwODQiPiLgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KS/4KSP4KSV4KWLIOCkq+CkvuCkh+CksiDgpK3gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVG9vTWFueVJlcXVlc3RzIiBtc2dpZD0iMTIzNTM5NjkyNzA4NzE4ODI1MyI+IuCkp+Clh+CksOCliCDgpKjgpYgg4KSF4KSo4KWB4KSw4KWL4KSn4KS54KSw4KWCIOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkruCkviDgpJvgpKjgpY3gpaQg4KSq4KSb4KS/IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODk2NzcxMDAyNTAzNjE2MzgyMiI+Ijx4bGlmZjpnIGlkPSJBQ0NPVU5UIj4lMSRzPC94bGlmZjpnPuCkleCliyDgpLLgpL7gpJfgpL8g4KS44KS+4KSH4KSoIOCkh+CkqCDgpKTgpY3gpLDgpYHgpJ/gpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVN5bmMiIG1zZ2lkPSI4MzUzNTIzMDYwMjY5MzM1NjY3Ij4i4KS44KS/4KSZ4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luY05vdGlmaWNhdGlvblRpdGxlIiBtc2dpZD0iMzk3NzQzMzQ5MTkxOTAxNDU4Ij4i4KS44KS/4KSZ4KWN4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlVG9vTWFueURlbGV0ZXNOb3RpZmljYXRpb25EZXNjIiBtc2dpZD0iODEwMDk4MTQzNTA4MDY5NjQzMSI+IuCkheCkpOCkvyDgpKfgpYfgpLDgpYggPHhsaWZmOmcgaWQ9IkNPTlRFTlRfVFlQRSI+JXM8L3hsaWZmOmc+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY0OTQwMTkyMzQxMDIxNTQ4OTYiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkluCkvuCksuClgCDgpJvgpYjgpKghIOCkoOCkvuCkieCkgSDgpJbgpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpYfgpLngpYAg4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDc1OTk5Mjg2NjgwMDAwNTQxIj4i4KSr4KWL4KSoIOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpLDgpL/gpI/gpJXgpYsg4KSbISDgpKDgpL7gpIngpIEg4KSW4KS+4KSy4KWAIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KWH4KS54KWAIOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZSIgbXNnaWQ9IjY1NDU2OTYwMDc2MzE0MDQyOTIiPiLgpK7gpLLgpL7gpIgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaWFsb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg1NDUzNTE0MjA4NjUyMDI4NTMiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMxOTkxOTA3NTQ2Mzk4ODYzOCI+IuCkq+Cli+CkqCDgpLXgpL/gpJXgpLLgpY3gpKrgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZSIgbXNnaWQ9IjcxNjc3MDMzODk4MDI2MTg2NjMiPiLgpK7gpYzgpKgg4KSu4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHVybl9vbl9yYWRpbyIgbXNnaWQ9IjM5MTI3OTMwOTIzMzk5NjIzNzEiPiLgpLXgpL7gpK/gpLDgpLLgpYfgpLgg4KSF4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR1cm5fb2ZmX3JhZGlvIiBtc2dpZD0iODE5ODc4NDk0OTk4NzA2MjM0NiI+IuCkpOCkvuCksOCksOCkueCkv+CkpCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2xvY2siIG1zZ2lkPSI3OTkwOTQ2NTU0OTYwOTgxNTMiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSy4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX29mZiIgbXNnaWQ9IjQyNjY2MTQxMDc0MTI4NjUwNDgiPiLgpKrgpL7gpLXgpLAg4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfc2lsZW50IiBtc2dpZD0iMzE5Mjk4MTYzMDE4NDczMDc4Ij4i4KSY4KSo4KWN4KSf4KWAIOCkrOCkqOCljeCkpiDgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV92aWJyYXRlIiBtc2dpZD0iNzA3MjA0MzM4ODU4MTU1MTM5NSI+IuCkmOCkqOCljeCkn+ClgCDgpJXgpK7gpY3gpKrgpKgg4KSX4KSw4KWN4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfcmluZyIgbXNnaWQ9Ijg1OTIyNDE4MTYxOTQwNzQzNTMiPiLgpJjgpKjgpY3gpJ/gpL8g4KSa4KS+4KSy4KWBIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX3Byb2dyZXNzIiBtc2dpZD0iMjI4MTA3OTI1NzMyOTk4MTIwMyI+IuCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKbgpYguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMzg1NzQ1MTc5NTU1NzMxNDcwIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpKzgpKjgpY3gpKYg4KS54KWB4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDk3OTIxNzUyNDI4MjEzNTMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KWL4KSoIOCkrOCkqOCljeCkpiDgpLngpYHgpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybV9xdWVzdGlvbiIgbXNnaWQ9IjI5MDY1NDQ3Njg4ODExMzYxODMiPiLgpJXgpYcg4KSk4KSq4KS+4KSI4KSCIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV90aXRsZSIgbXNnaWQ9IjcwNTQ1MDk5MTQ1MDAxNDAzNjEiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSu4KWL4KSh4KSu4KS+IOCkquClgeCkqOCkg+CkrOClgeCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfY29uZmlybSIgbXNnaWQ9IjU1MjkzOTQ0NTAyNzg0NjY4Ij4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkruCli+CkoeCkruCkviDgpKTgpKrgpL7gpIjgpIEg4KSq4KWB4KSo4KSD4KSs4KWB4KSfIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYEg4KS54KWB4KSo4KWN4KSbPyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOClh+CkleCkviDgpLjgpKzgpYgg4KSk4KWH4KS44KWN4KSw4KWLIOCkquCkleCljeCkt+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSF4KS44KSV4KWN4KS34KSuIOCkl+CksOCkvuCkieCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRfdGFza3NfdGl0bGUiIG1zZ2lkPSIzNjkxNzY0NjIzNjM4MTI3ODg4Ij4i4KSo4KSv4KS+4KSBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+IuCkleClgeCkqOCliCDgpKjgpK/gpL7gpIEg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkm+CliOCkqOCkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MDg0NzcxNDAwODgwNTM2NjUiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNDA2NDE2ODMxNTQxNjE1MjU4Ij4i4KSr4KWL4KSoIOCkteCkv+CkleCksuCljeCkquCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9jayIgbXNnaWQ9IjI4NDQ5NDUxOTE3OTIxMTk3MTIiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9wb3dlcl9vZmYiIG1zZ2lkPSI0NDcxODc5NDQwODM5ODc5NzIyIj4i4KS24KSV4KWN4KSk4KS/IOCkrOCkqOCljeCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fYnVnX3JlcG9ydCIgbXNnaWQ9Ijc5MzQwMTA1Nzg5MjIzMDQ3OTkiPiLgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3RpdGxlIiBtc2dpZD0iMjY2NzQ5NDgwMzc0MjU0ODUzMyI+IuCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KSy4KS/4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X21lc3NhZ2UiIG1zZ2lkPSIzOTg0NDcwNDg3NTAzNTA0NTYiPiLgpI/gpIngpJ/gpL4g4KSH4KSu4KWH4KSyIOCkuOCkqOCljeCkpuClh+CktuCkleCliyDgpLDgpYLgpKrgpK7gpL4g4KSq4KSg4KS+4KSJ4KSo4KSy4KS+4KSIIOCkr+CkuOCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS54KS+4KSy4KWI4KSV4KWLIOCkieCkquCkleCksOCko+CkleCliyDgpIXgpLXgpLjgpY3gpKXgpL7gpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCkuOClguCkmuCkqOCkviDgpJzgpK7gpY3gpK7gpL4g4KSX4KSw4KWN4KSo4KWHIOCkm+ClpCDgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSfIOCkuOClgeCksOClgSDgpJfgpLDgpYfgpKbgpYfgpJbgpL8g4KSq4KSg4KS+4KSJ4KSoIOCkpOCkr+CkvuCksCDgpKjgpK3gpI/gpLjgpK7gpY3gpK4g4KSv4KS44KSy4KWHIOCkleClh+CkueClgCDgpLjgpK7gpK8g4KSy4KS/4KSo4KWN4KSbOyDgpJXgpYPgpKrgpK/gpL4g4KSn4KWI4KSw4KWN4KSvIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fdG9nZ2xlX3NpbGVudF9tb2RlIiBtc2dpZD0iODIxOTUyNTM0NDI0NjgxMDkyNSI+IuCkruCljOCkqCDgpK7gpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjMyODk4NDE5MzcwMDM3NTg4MDYiPiLgpIbgpLXgpL7gpJwg4KSs4KSo4KWN4KSmIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2lsZW50X21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjE1MDYwNDY1NzkxNzcwNjY0MTkiPiLgpKfgpY3gpLXgpKjgpL8g4KSW4KWB4KSy4KWN4KSy4KS+IOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX3RvZ2dsZV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iNTg4NDMzMDMwNjkyNjMwNzQ1NiI+IuCkueCkteCkvuCkh+CknOCkueCkvuCknCDgpK7gpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjI3MTk1NTc5ODI2MDg5MTk3NTAiPiLgpIngpKHgpL7gpKgg4KSu4KWL4KShIOCkluClgeCksuCkviDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSI1MDc1MDcwNDQyODU0NDkwMjk2Ij4i4KS54KS14KS+4KSH4KSc4KS54KS+4KScIOCkruCli+CkoSDgpKzgpKjgpY3gpKYg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiLgpa/gpa/gpa8rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkruCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IuCkj+CkqOCljeCkoeCljeCksOCli+Ckh+CkoSDgpKrgpY3gpLDgpKPgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY29zdE1vbmV5IiBtc2dpZD0iNTQyOTgwODIxNzg2MTQ2MDQwMSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpL/gpLDgpY3gpKjgpYEg4KSq4KSw4KWN4KSo4KWHIOCkuOClh+CkteCkvuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY29zdE1vbmV5IiBtc2dpZD0iMzI5MzMwMTkwMzQwOTg2OTQ5NSI+IuCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpK7gpLngpIHgpJfgpYsg4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkqOClhyDgpJXgpL7gpK7gpLngpLDgpYIg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21lc3NhZ2VzIiBtc2dpZD0iNzUyMTI0OTE0ODQ0NTQ1NjY2MiI+IuCkpOCkquCkvuCkiOCkguCkleCkviDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21lc3NhZ2VzIiBtc2dpZD0iNzgyMTk5OTA3MTAwMzY5OTIzNiI+IuCkpOCkquCkvuCkiOCkgeCkleCkviBTTVMsIOCkh+CkruClh+CksiDgpLAg4KSF4KSo4KWN4KSvIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KSwIOCksuClh+CkluCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9wZXJzb25hbEluZm8iIG1zZ2lkPSIzNTE5MTYzMTQxMDcwNTMzNDc0Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkqOCkv+CknOClgCDgpLjgpYLgpJrgpKjgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3BlcnNvbmFsSW5mbyIgbXNnaWQ9Ijg0MjY0NTMxMjk3ODg4NjEzMzgiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSt4KSP4KSV4KS+IOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKzgpL7gpLDgpYfgpJXgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWA4KSu4KS+IOCkuOCkv+Ckp+CkviDgpKrgpLngpYHgpIHgpJog4KSq4KWB4KSw4KWN4oCN4KSv4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NvY2lhbEluZm8iIG1zZ2lkPSI1Nzk5MDk2NjIzNDEyMDQzNzkxIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCkvuCkruCkvuCknOCkv+CklSDgpLjgpYLgpJrgpKjgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NvY2lhbEluZm8iIG1zZ2lkPSI3MTI5ODQyNDU3NjExNjQzNDkzIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCkruCljeCkquCksOCljeCkleCkueCksOClgiDgpLAg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCknOCkoeCkvuCkqOCkueCksOClguCkleCliyDgpKzgpL7gpLDgpYfgpJXgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWA4KSu4KS+IOCkuOCkv+Ckp+CkviDgpKrgpLngpYHgpIHgpJog4KSq4KWB4KSw4KWN4oCN4KSv4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2xvY2F0aW9uIiBtc2dpZD0iNjM1MTQ5NzQyNDM2NjkyMDQ5Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCljeCkpeCkvuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbG9jYXRpb24iIG1zZ2lkPSI1NzA0Njc5NzYzMTI0MTcwMTAwIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkreCljOCkpOCkv+CklSDgpLjgpY3gpKXgpL7gpKgg4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9uZXR3b3JrIiBtc2dpZD0iNTgwODk4MzM3NzcyNzEwOTgzMSI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpILgpJrgpL7gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX25ldHdvcmsiIG1zZ2lkPSI0NDc4Mjk5NDEzMjQxODYxOTg3Ij4i4KS14KS/4KSt4KS/4KSo4KWN4KSoIOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpYHgpLXgpL/gpKfgpL7gpLngpLDgpYLgpK7gpL4g4KSq4KS54KWB4KSB4KSaIOCksOCkvuCkluCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iMTU4NTQwMzU0NDE2MjEyODEwOSI+IuCkrOCljeCksuClgeCkn+ClgeCkpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYmx1ZXRvb3RoTmV0d29yayIgbXNnaWQ9IjU2MjUyODg1NzcxNjQyODIzOTEiPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKXgpJXgpYsg4KSu4KS+4KSn4KWN4KSv4KSu4KSm4KWN4KS14KS+4KSw4KS+IOCkieCkquCkleCksOCko+CkueCksOClgiDgpLAg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWC4KSu4KS+4KSl4KS/IOCkquCkueClgeCkgeCkmiDgpLDgpL7gpJbgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjgzMjkyNjE2NzAxNTE4NzEyMzUiPiLgpIXgpKHgpL/gpK/gpYsg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hdWRpb1NldHRpbmdzIiBtc2dpZD0iMjY0MTUxNTQwMzM0NzU2ODEzMCI+IuCkheCkoeCkv+Ckr+CliyDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSs4KSm4KSy4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjIwOTI0NjY1MzQyNDc5ODAzMyI+IuCkrOCljeCkr+Ckn+CljeCksOCkv+CksuCkvuCkiCDgpKrgpY3gpLDgpK3gpL7gpLUg4KSq4KS+4KSw4KWN4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hZmZlY3RzQmF0dGVyeSIgbXNnaWQ9IjY0NDEyNzUzMjA2Mzg5MTY5NDciPiLgpJvgpL/gpJ/gpY3gpJ/gpYgg4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkuOCkleCkvuCkieCkqCDgpLjgpJXgpY3gpKjgpYcg4KSk4KWAIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClgiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2NhbGVuZGFyIiBtc2dpZD0iNTg2MzUwODQzNzc4MzY4MzkwMiI+IuCkquCkvuCkpOCljeCksOCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FsZW5kYXIiIG1zZ2lkPSI1Nzc3NTM0MzE2OTgyMTg0NDE2Ij4i4KSq4KS+4KSk4KWN4KSw4KWLIOCkpOCkpeCkviDgpJjgpJ/gpKjgpL7gpLngpLDgpYLgpK7gpL4g4KSq4KWN4KSw4KSk4KWN4KSv4KSV4KWN4KS3IOCkquCkueClgeCkgeCkmiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaWN0aW9uYXJ5IiBtc2dpZD0iNDE0ODU5NzEyODg0MzY0MTM3OSI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpLbgpKzgpY3gpKbgpJXgpYvgpLYg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaWN0aW9uYXJ5IiBtc2dpZD0iNzkyMTE2NjM1NTk2NDc2NDQ5MCI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpLbgpKzgpY3gpKbgpJXgpYvgpLbgpK7gpL4g4KS24KSs4KWN4KSm4KS54KSw4KWCIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MDkwMjM3NzAyNDMyNTc2Nzg4Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCktuCkrOCljeCkpuCkleCli+CktiDgpLLgpYfgpJbgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjI3MTE1NjE5OTQ0OTczNjE2NDYiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KS24KSs4KWN4KSm4KSV4KWL4KS24KSu4KS+IOCktuCkrOCljeCkpuCkueCksOClgiDgpKXgpKrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYm9va21hcmtzIiBtc2dpZD0iMTk0OTUxOTY3MzEwMzk2ODIyOSI+IuCkrOClgeCkleCkruCkvuCksOCljeCkleCkueCksOClgiDgpLAg4KSH4KSk4KS/4KS54KS+4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ib29rbWFya3MiIG1zZ2lkPSI0MTY5NzcxNjA2MjU3OTYzMDI4Ij4i4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSV4KS54KSw4KWCIOCksCDgpKzgpY3gpLDgpL7gpIngpJzgpLAg4KSH4KSk4KS/4KS54KS+4KS44KSu4KS+IOCkuOCkv+Ckp+CkviDgpKrgpLngpYHgpIHgpJrgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGV2aWNlQWxhcm1zIiBtc2dpZD0iNjExNzcwNDYyOTcyODgyNDEwMSI+IuCkheCksuCkvuCksOCljeCkriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGV2aWNlQWxhcm1zIiBtc2dpZD0iNDc2OTM1NjM2MjI1MTY0MTE3NSI+IuCkheCksuCkvuCksOCljeCkriDgpJjgpKHgpYAg4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl92b2ljZW1haWwiIG1zZ2lkPSI0MTYyMjM3MTQ1MDI3NTkyMTMzIj4i4KSt4KWN4KS14KS+4KSH4KS4IOCkruClh+CksiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfdm9pY2VtYWlsIiBtc2dpZD0iMjQ5ODQwMzk2OTg2Mjk1MTM5MyI+IuCkreCljeCkteCkvuCkh+CkuOCkruClh+CksuCkruCkviDgpLjgpL/gpKfgpL4g4KSq4KS54KWB4KSB4KSa4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21pY3JvcGhvbmUiIG1zZ2lkPSIxNzE1Mzk5MDAyNTAwNDM0NjQiPiLgpK7gpL7gpIfgpJXgpY3gpLDgpYvgpKvgpYvgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21pY3JvcGhvbmUiIG1zZ2lkPSI3MTA2NjE4Mjg2OTA1NzM4NDA4Ij4i4KSu4KS+W+CkleCljeCksOCli+Ckq+Cli+CkqOCkrOCkvuCknyDgpLDgpYfgpJXgpLDgpY3gpKEg4KSF4KSh4KS/4KSv4KWL4KSu4KS+IOCkuOCkv+Ckp+CkviDgpKrgpLngpYHgpIHgpJog4KSq4KWB4KSw4KWN4oCN4KSv4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2NhbWVyYSIgbXNnaWQ9IjQ4MjAzNzI0OTU4OTQ1ODY2MTUiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2NhbWVyYSIgbXNnaWQ9IjI5MzM2NjczNzIyODk1Njc3MTQiPiLgpKTgpLjgpY3gpKzgpL/gpLAg4KS14KS+IOCkreCkv+CkoeCkv+Ckr+CliyDgpJXgpY3gpK/gpL7gpKrgpY3gpJrgpLDgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleCljeCkr+CkvuCkruClh+CksOCkvuCkruCkviDgpLjgpL/gpKfgpL4g4KSq4KS54KWB4KSB4KSa4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NjcmVlbmxvY2siIG1zZ2lkPSI4Mjc1NTAwMTczMzMwNzE4MTY4Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3NjcmVlbmxvY2siIG1zZ2lkPSI3MDY3NDk3MTI4OTI1NDk5NDAxIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkieCkquCkleCksOCko+CkruCkviDgpLLgpJUg4KS44KWN4KSV4KWN4KSw4KS/4KSo4KSV4KWLIOCkteCljeCkr+CkteCkueCkvuCksOCksuCkvuCkiCDgpKrgpY3gpLDgpK3gpL7gpLXgpL/gpKQg4KSX4KSw4KWN4KSo4KWHIOCkleCljeCkt+CkruCkpOCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hcHBJbmZvIiBtc2dpZD0iODAyODc4OTc2MjYzNDE0NzcyNSI+IuCkpOCkquCkvuCkiOCkgeCkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KS44KWC4KSa4KSo4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hcHBJbmZvIiBtc2dpZD0iMzk1MDM3ODUzODA0OTYyNTkwNyI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLXgpY3gpK/gpLXgpLngpL7gpLDgpK7gpL4g4KSq4KWN4KSw4KSt4KS+4KS1IOCkquCkvuCksOCljeCkqOClhyDgpJXgpY3gpLfgpK7gpKTgpL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd2FsbHBhcGVyIiBtc2dpZD0iMzg1MDI4MDE1ODA0MTE3NTk5OCI+IuCkteCkvuCksuCkquClh+CkquCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd2FsbHBhcGVyIiBtc2dpZD0iNTYzMDQxNzg1NDc1MDU0MDE1NCI+IuCkieCkquCkleCksOCkoyDgpLXgpL7gpLLgpKrgpYfgpKrgpLAg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCkrOCkpuCksuCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1DbG9jayIgbXNnaWQ9IjQwNjUzNTc1OTIzNjYxMjk5MiI+IuCkmOCkoeClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3lzdGVtQ2xvY2siIG1zZ2lkPSIzOTQ0MzU5ODMzNjI0MDk0OTkyIj4i4KSJ4KSq4KSV4KSw4KSjIOCkuOCkruCkryDgpLXgpL4g4KS44KSu4KSvIOCkleCljeCkt+Clh+CkpOCljeCksCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0YXR1c0JhciIgbXNnaWQ9IjIwOTU4NjI1NjgxMTM5NDUzOTgiPiLgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSf4KWN4KSf4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI2MjQyNTkzNDMyMjI2ODA3MTcxIj4i4KSJ4KSq4KSV4KSw4KSjIOCkuOCljeCkpeCkv+CkpOCkvyDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeW5jU2V0dGluZ3MiIG1zZ2lkPSIzMzQxOTkwOTg2MTQ3ODI2NTQxIj4i4KS44KS/4KSZ4KWN4KSVIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3luY1NldHRpbmdzIiBtc2dpZD0iNzYwMzE5NTI2NTEyOTAzMTc5NyI+IuCkuOCkv+CkmeCljeCklSDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpK7gpL4g4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hY2NvdW50cyIgbXNnaWQ9IjMzNTk2NDYyOTExMjUzMjU1MTkiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KSW4KS+4KSk4KS+4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2NvdW50cyIgbXNnaWQ9IjQ5NDg3MzI2NDE4MjcwOTEzMTIiPiLgpIngpKrgpLLgpKzgpY3gpKcg4KSW4KS+4KSk4KS+4KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfaGFyZHdhcmVDb250cm9scyIgbXNnaWQ9Ijc5OTgyMTQ5Njg3OTE1OTkzMjYiPiLgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLAg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSj4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNDM1NzA1Nzg2MTIyNTQ2MjcwMiI+IuCkueCljeCkr+CkvuCkqOCljeCkoeCkuOClh+Ckn+CkleCliyDgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLDgpK7gpL4g4KSq4KWN4KSw4KSk4KWN4KSv4KSV4KWN4KS3IOCkquCkueClgeCkgeCkmuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9waG9uZUNhbGxzIiBtc2dpZD0iOTA2NzE3Mzk4ODMyNTg2NTkyMyI+IuCkq+Cli+CkqCDgpJXgpLLgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3Bob25lQ2FsbHMiIG1zZ2lkPSI3NDg5NzAxNjIwNDQ2MTgzNzcwIj4i4KSF4KSo4KWB4KSX4KSu4KSoLCDgpLDgpYfgpJXgpLDgpY3gpKEg4KSwIOCkq+Cli+CkqCDgpJXgpLLgpLngpLDgpYLgpJXgpYsg4KSq4KWN4KSw4KS44KWL4KSn4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1Ub29scyIgbXNnaWQ9IjQ2NTIxOTE2NDQwODI3MTQwNDgiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSU4KSc4KS+4KSw4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1Ub29scyIgbXNnaWQ9IjgxNjIxMDI2MDIxOTA3MzQzMDUiPiLgpKjgpL/gpK7gpY3gpKgt4KS44KWN4KSk4KSwIOCkquCkueClgeCkgeCkmiDgpLAg4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KWLIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iMzQ0NjE2NDU4NDcxMDU5NjUxMyI+IuCkteCkv+CkleCkuOCkv+CkpCDgpJ/gpYHgpLLgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RldmVsb3BtZW50VG9vbHMiIG1zZ2lkPSI3MDU4ODI4MDMyMzU4MTQyMDE4Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkteCkv+CkleCkvuCkuOCkleCksOCljeCkpOCkvuCkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSu4KS+4KSk4KWN4KSwIOCkuOClgeCkteCkv+Ckp+CkvuCkueCksOClguCkleCliyDgpIbgpLXgpLbgpY3gpK/gpJXgpKTgpL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGlzcGxheSIgbXNnaWQ9IjQyNzk5MDk2NzYwMzY0MDI2MzYiPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIFVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kaXNwbGF5IiBtc2dpZD0iNjA1MTAwMjAzMTkzMzAxMzcxNCI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsgVUkg4KSy4KS+4KSIIOCkheCkuOCksCDgpKrgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RvcmFnZSIgbXNnaWQ9IjE5NzExMTg3NzA1NDYzMzY5NjYiPiLgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3N0b3JhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzQ0MjMxODUwMjQ0Njg3NDk5OSI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpK7gpL7gpKXgpL8g4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiJTRCDgpJXgpL7gpLDgpY3gpKHgpK7gpL7gpKXgpL8g4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hY2Nlc3NpYmlsaXR5RmVhdHVyZXMiIG1zZ2lkPSI3OTE5MDI1NjAyMjgzNTkzOTA3Ij4i4KSq4KS54KWB4KSB4KSa4KWA4KSV4KSw4KSjIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfYWNjZXNzaWJpbGl0eUZlYXR1cmVzIiBtc2dpZD0iNDIwNTE5Njg4MTY3ODE0NDMzNSI+IuCkuOCkueCkr+Cli+Ckl+ClgCDgpKrgpY3gpLDgpLXgpL/gpKfgpL8g4KSt4KSP4KSV4KWLIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClguCksuClhyDgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzkwMTcxNzkzNjkzMDE3MDMyMCI+IuCkteCkv+CkqOCljeCkoeCliyDgpLjgpL7gpK7gpJfgpY3gpLDgpYDgpJXgpYsg4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzNzcyMjI1MDA4NjA1MzEwNjcyIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkheCkqOCljeCkpOCksOCkleCljeCksOCkv+Ckr+CkviDgpK3gpIfgpLDgpLngpYfgpJXgpYsg4KS14KS/4KSo4KWN4KSh4KWL4KSV4KWLIOCkuOCkvuCkruCkl+CljeCksOClgOCkleCliyDgpKjgpL/gpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbiIgbXNnaWQ9IjMxMDg3MjMzNjQ2NzY2NjczMjAiPiLgpJvgpYvgpI/gpLAg4KSX4KSw4KS/4KSo4KWHIOCkluCli+CknOCksuCkvuCkiCDgpLjgpYHgpJrgpL7gpLDgpYEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iNTgwMDU1MjUxNjc3OTI0OTM1NiI+IuCkm+Cli+Ckh+Ckj+CkleCkviDgpIbgpIfgpJ/gpK7gpLngpLDgpYIg4KSa4KSw4KWN4KSV4KWLIOCkuOCljeCkteCksOCkruCkviDgpKzgpYvgpLLgpL/gpKjgpYcg4KSbIOCksCDgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSH4KS24KS+4KSw4KS+4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIXgpKjgpY3gpLXgpYfgpLfgpKMg4KSX4KSw4KWN4KSoIOCkuOCkleCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE3Mzk4ODE3NjY1MjI1OTQwNzMiPiLgpIngpJrgpY3gpJog4KS14KWH4KSsIOCkquCkueClgeCkgeCkmuCksuCkvuCkiCDgpLjgpYHgpJrgpL7gpLDgpYEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSI3ODgxMDYzOTYxNTA3NTExNzY1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCkuOCkvuCkruCkl+CljeCksOClgOCksuCkvuCkiCDgpKXgpKog4KSq4KS54KWB4KSB4KSa4KSv4KWL4KSX4KWN4KSvIOCkrOCkqOCkvuCkieCkqCDgpLLgpL/gpKrgpL/gpLngpLDgpYIg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKjgpYEg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iMjEwMzQ0MDM5MTkwMjQxMjE3NCI+IuCkhuCkq+ClgeCksuClhyDgpJ/gpL7gpIfgpKog4KSX4KSw4KWH4KSV4KWLIOCkquCkvuCkoOCkleCliyDgpKjgpL/gpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCkoeClh+Ckn+CkviDgpJzgpLjgpY3gpKTgpYgg4KSV4KWN4KSw4KWH4KSh4KS/4KSfIOCkleCkvuCksOCljeCkoSDgpKjgpK7gpY3gpKzgpLDgpLngpLDgpYIg4KSwIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClgiDgpLjgpK7gpL7gpLXgpYfgpLYg4KSX4KSw4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i4KS44KWN4KSl4KS/4KSk4KS/IOCkquCkn+CljeCkn+Ckv+CksuCkvuCkiCDgpIXgpJXgpY3gpLfgpK4g4KS14KS+IOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4i4KS44KWN4KSl4KS/4KSk4KS/IOCkquCkn+CljeCkn+CkvyDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkteCkviDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSG4KSH4KSV4KSo4KS54KSw4KWCIOCkpeCkquCljeCkqCDgpLAg4KS54KSf4KS+4KSJ4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzI0NzI4MTkxMTM4NzkzMTQ4NSI+IuCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpJ/gpY3gpJ/gpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzE2MTEzNjYwNzk1OTc2MDYwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpJ/gpY3gpJ/gpL8g4KS54KWB4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjExNDgxOTg3ODU5Mzc0ODkyNjQiPiLgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSf4KWN4KSf4KS/4KSy4KS+4KSIIOCkteCkv+CkuOCljeCkpOClg+CkpC/gpLjgpJngpY3gpJXgpYHgpJrgpL/gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iNjkxNzU0OTQzNzEyOTQwMTEzMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpY3gpKXgpL/gpKTgpL8g4KSq4KSf4KWN4KSf4KS/IOCkteCkv+CkuOCljeCkpOCkvuCksCDgpLXgpL4g4KS44KSC4KSV4KWB4KSa4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wcm9jZXNzT3V0Z29pbmdDYWxscyIgbXNnaWQ9IjM5MDYwMDc4MzExOTI5OTA5NDYiPiLgpKzgpLngpL/gpLDgpY3gpJfgpK7gpKgg4KSV4KSy4KS54KSw4KWC4KSy4KS+4KSIIOCkheCksOCljeCkleCliyDgpK7gpL7gpLDgpY3gpJcg4KSm4KS/4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSI1MzMxMzE4OTMxOTM3NDAyMDQwIj4i4KSs4KS54KS/4KSw4KWN4KSX4KSu4KSoIOCkleCksuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpLbgpYvgpKfgpKgg4KSX4KSw4KWN4KSoIOCksCDgpKHgpL7gpK/gpLIg4KSX4KSw4KS/4KSo4KWHIOCkqOCkruCljeCkrOCksCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkICDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK7gpYvgpKjgpL/gpJ/gpLAg4KSX4KSw4KWN4KSoLCDgpIXgpKjgpY3gpK/gpKTgpY3gpLAg4KSq4KSg4KS+4KSJ4KSoIOCkteCkviDgpKzgpL7gpLngpL/gpLAg4KSc4KS+4KSo4KWHIOCkleCksuCkueCksOClguCksuCkvuCkiCDgpLDgpYvgpJXgpY3gpKgg4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlU21zIiBtc2dpZD0iODY3MzQ3MTc2ODk0Nzg5NTA4MiI+IuCkquCkvuCkoCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIgKFNNUykg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVTbXMiIG1zZ2lkPSI2NDI0Mzg3NzU0MjI4NzY2OTM5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpLAg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCkleCliyDgpK7gpKTgpLLgpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSq4KSg4KS+4KSH4KSP4KSV4KWLIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKTgpKrgpL7gpIjgpILgpLLgpL7gpIgg4KSo4KSm4KWH4KSW4KS+4KSI4KSo4KWIIOCkruCli+CkqOCkv+Ckn+CksCDgpJfgpLDgpY3gpKgg4KS14KS+IOCkruClh+Ckn+CkvuCkieCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVNbXMiIG1zZ2lkPSIxODIxMzE3MzQ0NjY4MjU3MDk4Ij4i4KSq4KS+4KSgIOCkuOCkqOCljeCkpuClh+CktiAoTU1TKSDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCBNTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSwIOCkquCljeCksOCkleClg+Ckr+CkviDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpJXgpYsg4KSu4KSk4KSy4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkquCkoOCkvuCkh+Ckj+CkleCliyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSk4KSq4KS+4KSI4KSC4KSy4KS+4KSIIOCkqOCkpuClh+CkluCkvuCkiOCkqOCliCDgpK7gpYvgpKjgpL/gpJ/gpLAg4KSX4KSw4KWN4KSoIOCkteCkviDgpK7gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iMTgwMzQ3NzY2MDg0NjI4ODA4OSI+IuCkhuCkleCkuOCljeCkruCkv+CklSDgpKrgpY3gpLDgpLjgpL7gpLDgpKPgpLngpLDgpYIg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSI4NDg1MjQwNzAyNjI0MzE5NzQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkquCljeCksOCkuOCkvuCksOCkoyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpLAg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkruCkviDgpK7gpL7gpKTgpY3gpLAg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iMTU5ODMyODg0MzYxOTY0NjE2NiI+IuCkuOClh+CksiDgpKrgpY3gpLDgpLjgpL7gpLDgpL/gpKQg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSm4KWN4KS14KS+4KSw4KS+IOCkquCljeCksOCkvuCkquCljeCkpCDgpLjgpYfgpLIg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KWH4KSyIOCkquCljeCksOCkuOCkvuCksOCkoyDgpJrgpYfgpKTgpL7gpLXgpKjgpYDgpLngpLDgpYIg4KSV4KWH4KS54KWAIOCkuOCljeCkpeCkvuCkqOCkueCksOClguCkruCkviDgpKTgpKrgpL7gpIjgpILgpLLgpL7gpIgg4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkl+CkpOCkv+CkteCkv+Ckp+Ckv+CkueCksOClguCkleCliyDgpKzgpL7gpLDgpYfgpK7gpL4g4KS44KSa4KWH4KSkIOCkl+CksOCkvuCkieCkqCDgpJfgpLDgpL/gpI/gpJXgpL4g4KSb4KSo4KWN4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSP4KSJ4KSf4KS+IOCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpLjgpYfgpLIg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKbgpJsg4KSc4KSsIOCkpOCkquCkvuCkiOCkguCkleCliyDgpIngpKrgpJXgpLDgpKPgpJXgpYsg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkteCkviDgpIXgpKrgpLDgpYfgpLbgpKjgpJXgpYsg4KS44KS+4KSlIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kU21zIiBtc2dpZD0iNTYwMDgzMDYxMjE0NzY3MTUyOSI+IlNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KSg4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFNtcyIgbXNnaWQ9IjcwOTQ3MjkyOTgyMDQ5Mzc2NjciPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIggU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpKDgpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSq4KWN4KSw4KSk4KWN4KSv4KS+4KS44KS/4KSkIOCkmuCkvuCksOCljeCknOCkueCksOClguCkleCliyDgpKrgpLDgpL/gpKPgpL7gpK4g4KSm4KS/4KSoIOCkuOCkleCljeCkpuCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpKrgpYHgpLfgpY3gpJ/gpL8g4KSs4KS/4KSo4KS+IOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpKDgpL7gpI/gpLAg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkquCliOCkuOCkviDgpJbgpLDgpY3gpJog4KSX4KSw4KS+4KSJ4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9Ijg3MTM4ODkxMDUzMDU5NDMyMDAiPiLgpKrgpY3gpLDgpKTgpL/gpJXgpY3gpLDgpL/gpK/gpL4t4KSu4KS+4KSw4KWN4KSr4KSkLeCkuOCkqOCljeCkpuClh+CktiDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSq4KSg4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9IjcxMDc2NDg1NDg0Njg3Nzg3MzQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSG4KSX4KSkIOCkleCksuCkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWN4KSw4KSk4KS/4KSV4KWN4KSw4KS/4KSv4KS+LeCkruCkvuCksOCljeCkq+CkpC3gpLjgpKjgpY3gpKbgpYfgpLYg4KSY4KSf4KSo4KS+4KS54KSw4KWC4KSy4KS+4KSIIOCkheCkqOCljeCkryDgpLjgpKjgpY3gpKbgpYfgpLYg4KSq4KSg4KS+4KSJ4KSo4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkruCkviDgpIXgpKjgpYHgpLDgpYvgpKfgpLngpLDgpYIg4KSq4KSg4KS+4KSJ4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTbXMiIG1zZ2lkPSI4NzQ1MDg2NTcyMjEzMjcwNDgwIj4i4KSk4KSq4KS+4KSI4KSC4KSV4KS+IOCkquCkvuCkoCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIgKFNNUyDgpLXgpL4gTU1TKSDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpLXgpL4gU0lNIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSt4KSP4KSV4KS+IFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYLgpLLgpL7gpIgg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWBIOCkteCkviDgpJfgpYvgpKrgpKjgpYDgpK/gpKTgpL7gpLLgpL7gpIgg4KS14KWH4KS14KS+4KS44KWN4KSk4KS+IOCkl+CksOCljeCkpuCliCDgpLjgpKzgpYggU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpKLgpY3gpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjk1OTY3NTMzNDU3MjQwNTUwIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkq+Cli+CkqCDgpLXgpL4gU0lNIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSt4KSP4KSV4KS+IFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYLgpLLgpL7gpIgg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpLjgpKzgpYggU01TIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClguCksuCkvuCkiCDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOCkvuCkruCkl+CljeCksOClgCDgpLXgpL4g4KS14KS/4KS24KWN4KS14KS44KSo4KS/4KSv4KSk4KS+IOCkrOCkv+CkqOCkviDgpKjgpYgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU21zIiBtc2dpZD0iMzIxNjk1MDQ3MjYzNjIxNDc3NCI+IuCkpOCkquCkvuCkiOCkgeCkleCkviDgpKrgpL7gpKAg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkuOCkruCljeCkquCkvuCkpuCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gKFNNUyDgpLXgpL4gTU1TKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI1MTYwNDEzOTQ3Nzk0NTAxNTM4Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkguCkleCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KS14KS+IFNJTSDgpJXgpL7gpLDgpY3gpKHgpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSwIOCkl+CksOCkv+Ckj+CkleCkviBTTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCksuClh+CkluCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MjY4NjY4NzA5MDUyMzI4NTY3Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkq+Cli+CkqCDgpLXgpL4gU0lNIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSt4KSP4KSV4KS+IFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYLgpLLgpL7gpIgg4KSy4KWH4KSW4KWN4oCN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkuOCkvuCkr+CkpiDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkruClh+Ckn+CkvuCkieCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+IuCkquCkvuCkoCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIgKFdBUCkg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4iV0FQIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCksCDgpKrgpY3gpLDgpLbgpYvgpKfgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL/gpK7gpL4g4KSu4KWL4KSo4KS/4KSf4KSwIOCkl+CksOCljeCkqOClhyDgpLXgpL4g4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkquCkoOCkvuCkh+Ckj+CkleCkviDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkqOCkpuClh+CkluCkvuCkiCDgpK7gpYfgpJ/gpY3gpKjgpYcg4KSV4KWN4KS34KSu4KSk4KS+IOCkuOCkruCkvuCkteClh+CktiDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRhc2tzIiBtc2dpZD0iNjQ2NjA5NTM5NjYyMzkzMzkwNiI+IuCkmuCksuCkv+CksOCkueClh+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+IuCkteCksOCljeCkpOCkruCkvuCkqOCkruCkviDgpLAg4KSt4KSw4KSW4KSw4KWIIOCkmuCksuCkv+CksOCkueClh+CkleCkviDgpJXgpL7gpLDgpY3gpK/gpLngpLDgpYIg4KSs4KS+4KSw4KWH4KSV4KWLIOCkuOClguCkmuCkqOCkviDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpL/gpKQg4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkreCkj+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCkuOClguCkmuCkqOCkviDgpKrgpKTgpY3gpKTgpL4g4KSy4KSX4KS+4KSJ4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJhY3RBY3Jvc3NVc2VycyIgbXNnaWQ9IjcxMTQyNTUyODE5NDQyMTE2ODIiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYIg4KSk4KSw4KWN4KSrIOCkheCkqOCljeCkpOCksOCljeCkleCljeCksOCkv+Ckr+CkviDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnRlcmFjdEFjcm9zc1VzZXJzIiBtc2dpZD0iMzY0NjcwOTYzNjIzMzg1Nzg2Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkieCkquCkleCksOCko+CkruCkviDgpLXgpL/gpK3gpL/gpKjgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWCIOCkruCkvuCksOCljeCkq+CkpCDgpJXgpL7gpLDgpY3gpK/gpLngpLDgpYIg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpK/gpYsg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWCIOCkrOCkv+CkmiDgpLjgpYHgpLDgpJXgpY3gpLfgpL4g4KSs4KS/4KSl4KWL4KSy4KWN4KSoIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWHIOCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW50ZXJhY3RBY3Jvc3NVc2Vyc0Z1bGwiIG1zZ2lkPSIyNTY3NzM0Mjg1NTQ1MDc0MTA1Ij4i4KSV4KWB4KSw4KS+4KSV4KS+4KSo4KWAIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkueCksOClgiDgpKzgpL/gpJog4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpKrgpYLgpLDgpY3gpKMg4KSF4KSo4KWB4KSu4KSk4KS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJhY3RBY3Jvc3NVc2Vyc0Z1bGwiIG1zZ2lkPSIzNzY4NDEzNjgzOTU1MDIzNjYiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLjgpIHgpJfgpJXgpYsg4KSV4KWB4KSw4KS+4KSV4KS+4KSo4KWAIOCkuOCkrOCliCDgpLjgpK7gpY3gpK3gpL7gpLXgpKjgpL7gpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNlcnMiIG1zZ2lkPSIxNjc2MTUwOTExNjcyMjgyNDI4Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWCIOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2VycyIgbXNnaWQ9Ijg0MDkzMDY2Njc2NDUzNTU2MzgiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+LCDgpKrgpY3gpLDgpLbgpY3gpKgsIOCkuOCkv+CksOCljeCknOCkqOCkviDgpLAg4KSu4KWH4KSf4KS+4KSH4KS44KS54KS/4KSkIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpKzgpKjgpY3gpKcg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSI2MjI5NDY4Njc0NzUzNTI5NTAxIj4i4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLXgpL/gpLXgpLDgpKMg4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldERldGFpbGVkVGFza3MiIG1zZ2lkPSIxNTM4MjQ3NDE0NDA3MTc1OTkiPiLgpLXgpLDgpY3gpKTgpK7gpL7gpKjgpK7gpL4g4KSwIOCkreCksOCkluCksOCliCDgpJrgpLLgpL/gpLDgpLngpYfgpJXgpL4g4KSV4KS+4KSw4KWN4KSv4KS54KSw4KWC4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpLXgpL/gpLjgpY3gpKTgpYPgpKQg4KS44KWC4KSa4KSo4KS+IOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkrOCkvuCksOClh+CkleCliyDgpKjgpL/gpJzgpYAg4KS44KWC4KSa4KSo4KS+IOCkquCkpOCljeCkpOCkviDgpLLgpJfgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW9yZGVyVGFza3MiIG1zZ2lkPSIyMDE4NTc1NTI2OTM0NDIyNzc5Ij4i4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpKrgpYHgpKjgpIPgpJXgpY3gpLDgpK4g4KSX4KSw4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVvcmRlclRhc2tzIiBtc2dpZD0iNzczNDIxNzc1NDg3NzQzOTM1MSI+IuCkleCkvuCkruCkueCksOClguCksuCkvuCkiCDgpIXgpJfgpY3gpLDgpK3gpL7gpJcg4KSwIOCkquClg+Ckt+CljeCkoOCkreClguCkruCkv+CkruCkviDgpLjgpL7gpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkr+CliyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSH4KSo4KSq4KWB4KSfIOCkrOCkv+CkqOCkviDgpKjgpYgg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVtb3ZlVGFza3MiIG1zZ2lkPSI2ODIxNTEzNDAxODcwMzc3NDAzIj4i4KSa4KS+4KSy4KWBIOCkreCkh+CksOCkueClh+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVtb3ZlVGFza3MiIG1zZ2lkPSIxMzk0NzE0MzUyMDYyNjM1NDkzIj4i4KSV4KS+4KSu4KS54KSw4KWCIOCkueCkn+CkvuCkieCkqCDgpLAg4KSJ4KSo4KWA4KS54KSw4KWC4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLXgpY3gpK/gpLXgpLngpL7gpLDgpLLgpL7gpIgg4KSF4KSs4KSw4KWL4KSnIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iNzM5MTE5MTM4NDAyNzMwMzA2NSI+ImFjdGl2aXR5IHN0YWNrcyDgpJXgpYsg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjdGl2aXR5U3RhY2tzIiBtc2dpZD0iMTYxNTg4MTkzMzAzNDA4NDQ0MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkmuCksuCljeCkqOClhyBhY3Rpdml0eSBzdGFja3Mg4KSy4KS+4KSIIOCkpeCkquCljeCkqCwg4KS54KSf4KS+4KSJ4KSoIOCksCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkteCljeCkr+CkteCkueCkvuCksOCksuCkvuCkiCDgpLXgpL/gpJjgpJ/gpKgg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9IjI5MTg3NjgyMzgwNDUyMDY0NTYiPiLgpJXgpYHgpKjgpYgg4KSX4KSk4KS/4KS14KS/4KSn4KS/IOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGFydEFueUFjdGl2aXR5IiBtc2dpZD0iOTk3ODIzNjk1MzQzNTg0MDAxIj4i4KSF4KSo4KWB4KSu4KSk4KS/IOCkuOClgeCksOCkleCljeCkt+CkviDgpLXgpL4g4KSo4KS/4KSw4KWN4KSv4KS+4KSkIOCkheCkteCkuOCljeCkpeCkvuCksuCkvuCkiCDgpLXgpL7gpLjgpY3gpKTgpL4g4KSo4KSX4KSw4KS/4KSV4KSoIOCkleClgeCkqOCliCDgpKrgpKjgpL8g4KSV4KS+4KSw4KWN4KSvIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFNjcmVlbkNvbXBhdGliaWxpdHkiIG1zZ2lkPSI2OTc1Mzg3MTE4ODYxODQyMDYxIj4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkheCkqOClgeCkleClguCksuCkpOCkviDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5MjA0MzYxODY5MzkxNzM3NCI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpLngpLDgpYLgpJXgpYsg4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkruCkv+CksuCljeCkpuCliyDgpK7gpYvgpKHgpLLgpL7gpIgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CkueCksOClguCkleCliyDgpLXgpY3gpK/gpLXgpLngpL7gpLAg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpJ/gpYHgpJ/gpL7gpIngpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXREZWJ1Z0FwcCIgbXNnaWQ9IjMwMjIxMDcxOTg2ODY1ODQwNTIiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSh4KS/4KSs4KSXIOCkl+CksOCljeCkqOClhyDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0RGVidWdBcHAiIG1zZ2lkPSI0NDc0NTEyNDE2Mjk5MDEzMjU2Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkoeCkv+CkrOCklyDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IOCkmuCkvuCksuClgSDgpJfgpLDgpY3gpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCksOClgiDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KS44KSu4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpK/gpLjgpJXgpYsg4KSJ4KSq4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MTYyMDkyMTg1MTI0MjM0NDgwIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkquCljeCksOCkpuCksOCljeCktuCkqCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbmZpZ3VyYXRpb24iIG1zZ2lkPSI0MzcyMjIzODczMTU0Mjk2MDc2Ij4i4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkleCkqOCljeCkq+Ckv+Ckl+CksOClh+CkuOCkqCDgpJzgpLjgpY3gpKTgpYgg4KSy4KWL4KSV4KWN4KSv4KS+4KSyIOCkteCkviDgpLjgpKzgpYjgpKTgpL/gpLAg4KSr4KSo4KWN4KSfIOCkhuCkleCkvuCksCDgpKzgpKbgpLLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2VuYWJsZUNhck1vZGUiIG1zZ2lkPSI1Njg0NTA0MDU4MTkyOTIxMDk4Ij4i4KSV4KS+4KSwIOCkruCli+CkoSDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiLgpJXgpL7gpLAg4KSu4KWL4KSh4KSy4KS+4KSIIOCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iMzkxNDAyNjY4NzQyMDE3NzIwMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSI0NTkzMzUzMjM1OTU5NzMzMTE5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkueCksOClgiDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSa4KSy4KWN4KSo4KSs4KS+4KSfIOCksOCli+CkleCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iMjMyOTYyNzQyODgzMjA2NzcwMCI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSm4KSs4KS+4KSs4KSu4KS+IOCksOCli+CkleCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iNTI1MzE1NzI5NjE4Mzk0MDgxMiI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSs4KSy4KSq4KWC4KSw4KWN4KS14KSVIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlQmFjayIgbXNnaWQ9IjY1MjkzNTIwNDA3MjU4NDYxNiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkrOCksiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mb3JjZUJhY2siIG1zZ2lkPSIzODkyMjk1ODMwNDE5NTEzNjIzIj4i4KSF4KSX4KWN4KSw4KSt4KS+4KSX4KSu4KS+IOCkreCkj+CkleCliyDgpJXgpYHgpKjgpYgg4KSX4KSk4KS/4KS14KS/4KSn4KS/4KSy4KS+4KSIIOCknOCkrOCksOCknOCkuOCljeCkpOClgCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCksCDgpKvgpLDgpY3gpJXgpYfgpLAg4KSc4KS+4KSo4KSV4KS+IOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSHIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJXgpKTgpL4g4KSq4KSw4KWN4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kdW1wIiBtc2dpZD0iMTY4MTc5OTg2MjQzODk1NDc1MiI+IuCkquCljeCksOCko+CkvuCksuClgOCkleCliyDgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KS44KWN4KSl4KS/4KSk4KS/IOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kdW1wIiBtc2dpZD0iMTc3ODI5OTA4ODY5MjI5MDMyOSI+IuCkquCljeCksOCko+CkvuCksuClgOCkleCliyDgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KS44KWN4KSl4KS/4KSk4KS/IOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIngpKjgpYDgpLngpLDgpYLgpLLgpL7gpIgg4KS44KS+4KSu4KS+4KSo4KWN4KSv4KSk4KSDIOCkleCkueCkv+CksuCljeCkr+CliCDgpKjgpJrgpL7gpLngpL/gpKjgpYcg4KS14KWN4KSv4KS+4KSq4KSVIOCkteCkv+CkteCkv+Ckp+CkpOCkvuCkleCliyDgpKjgpL/gpJzgpYAg4KSwIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLjgpYLgpJrgpKjgpL4g4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iODAyMjU4ODYwODk5NDU4OTkzOCI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JldHJpZXZlX3dpbmRvd19jb250ZW50IiBtc2dpZD0iMzE5MzI2OTA2OTQ2OTcwMDI2NSI+IuCkuOCkleCljeCksOCkv+CkryDgpLXgpL/gpKjgpY3gpKHgpYvgpJXgpYsg4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWB4KSy4KS+4KSIIOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKrgpYHgpLDgpYgg4KS14KS/4KSo4KWN4KSh4KWL4KSV4KWLIOCkteCkv+Ckt+Ckr+CkteCkuOCljeCkpOClgSDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljSDgpLAg4KSq4KS+4KS44KS14KSw4KWN4KSh4KS54KSw4KWC4KSs4KS+4KS54KWH4KSVIOCkr+CkuOCkleCkviDgpLjgpKzgpYgg4KSq4KS+4KSg4KSV4KWLIOCknOCkvuCkgeCkmiDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl90ZW1wb3JhcnlfZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIyMzEyNjEyMTM1MTI3MzEwMjU0Ij4i4KSq4KS54KWB4KSB4KSa4KSk4KS+4KSy4KS+4KSIIOCkheCkuOCljeCkpeCkvuCkr+ClgCDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iODA3OTQ1NjI5MzE4Mjk3NTQ2NCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkieCkquCkleCksOCko+CkruCkvuCkpeCkvyDgpKrgpLngpYHgpIHgpJog4KSw4KS+4KSW4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpJXgpYsg4KS44KS54KSu4KSk4KS/IOCkrOCkv+CkqOCkviDgpKjgpYgg4KSq4KS54KWB4KSB4KSa4KSy4KS+4KSIIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9Ijg1MzIyOTUxOTkxMTI1MTkzNzgiPiLgpLXgpL/gpKjgpY3gpKHgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkrOCkueCkvuCksuClgCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9IjQ5OTg4MzYzNzA0MjQxODY4NDkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS14KS/4KSo4KWN4KSh4KWLIOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkleCkrOCkvuCknyDgpLXgpL/gpKjgpY3gpKHgpYvgpLngpLDgpYLgpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkieCkquCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KSo4KS/4KSu4KS/4KSk4KWN4KSkIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKrgpKjgpL8g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4Njc1NTM1NjQ4ODA3NDI3Mzg5Ij4i4KSY4KSf4KSo4KS+4KS54KSw4KWCIOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4MDA2MjM2MzE1ODg4MzQ3NjgwIj4i4KSH4KSo4KWN4KSq4KWB4KSfIOCkq+Ckv+CksuCljeCkn+CksCDgpJzgpYHgpKgg4KS44KSs4KWIIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSq4KSg4KS+4KSH4KSo4KWB4KSt4KSo4KWN4KSm4KS+IOCkquCkueCkv+CksuClhyDgpKvgpL/gpLLgpY3gpJ/gpLAg4KSX4KSw4KWN4KSo4KWH4KSy4KS+4KSIIOCkpuCksOCljeCkpOCkviDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KSV4KWLIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpKzgpL/gpKjgpL4g4KSo4KWIIFVJIOCkquCljeCksOCko+CkvuCksuClgCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI1OTczNjI2NzM4MTcwNjE4Nzc1Ij4i4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hZ25pZnlfZGlzcGxheSIgbXNnaWQ9IjcxMjEyMzU2ODQ1MTUwMDM3OTIiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSo4KSV4KWLIOCkuOCkvuCkruCkl+CljeCksOClgCDgpIbgpLXgpLDgpY3gpKfgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KS44KS+4KSu4KSX4KWN4KSw4KWAIOCkuOCkguCkleCljeCksOCkruCkoyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KSo4KWNIOCknOCkuOCksuClhyDgpIngpKrgpJXgpLDgpKPgpLLgpL7gpIgg4KSF4KSo4KWB4KSq4KSv4KWL4KSX4KWAIOCkrOCkqOCkvuCkieCkgeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2h1dGRvd24iIG1zZ2lkPSI3MTg1NzQ3ODI0MDM4OTA5MDE2Ij4i4KSG4KSC4KS24KS/4KSVIOCkrOCkqOCljeCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NodXRkb3duIiBtc2dpZD0iNzA0NjUwMDgzODc0NjI5MTc3NSI+IuCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpLXgpY3gpK/gpLXgpLjgpY3gpKXgpL7gpKrgpJXgpLLgpL7gpIgg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClhyDgpIXgpLXgpLjgpY3gpKXgpL7gpK7gpL4g4KSw4KS+4KSW4KWN4KSb4KWkIOCkquClguCksOCljeCkoyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWHIOCkleCkvuCkriDgpJfgpLDgpY3gpKbgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0b3BBcHBTd2l0Y2hlcyIgbXNnaWQ9IjQxMzg2MDg2MTA3MTc0MjU1NzMiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KWN4KS14KS/4KSa4KS54KSw4KWCIOCknOCli+Ckl+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0b3BBcHBTd2l0Y2hlcyIgbXNnaWQ9IjgyNjIxOTU4MDI1ODIyNTUwMjEiPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSu4KS+IOCkuOCljeCkteCkv+CkmiDgpJfgpLDgpY3gpKjgpKzgpL7gpJ8g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KS54KSw4KWC4KSy4KS+4KSIIOCksOCli+CkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VG9wQWN0aXZpdHlJbmZvIiBtc2dpZD0iMjUzNzkyMjMxMTQxMTU0NjAxNiI+IuCkteCksOCljeCkpOCkruCkvuCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSI4MTUzNjUxNDM0MTQ1MTMyNTA1Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KSV4KWLIOCkheCkl+CljeCksCDgpK3gpL7gpJfgpK7gpL4g4KS54KS+4KSy4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLAg4KS44KWH4KS14KS+4KS54KSw4KWC4KSV4KS+IOCkrOCkvuCksOClhyDgpKjgpL/gpJzgpYAg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkqOCkv+CkleCkvuCksuCljeCkqCDgpKzgpL7gpLngpJXgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iODkyMjM5MDk0ODY3MTgyNjU2Ij4i4KS44KSs4KWIIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpYHgpLDgpYHgpLXgpL7gpKQg4KSX4KSw4KWN4KSo4KWHIOCkqOCkv+CksOClgOCkleCljeCkt+CkoyDgpLAg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3J1blNldEFjdGl2aXR5V2F0Y2hlciIgbXNnaWQ9IjYwMDM2MDMxNjI1Nzg1Nzc0MDYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KS44KSw4KWAIOCkquCljeCksOCko+CkvuCksuClgCDgpLjgpYHgpLDgpYHgpLXgpL7gpKQg4KSX4KSk4KS/4KS54KSw4KWCIOCkruCli+CkqOCkv+Ckn+CksCDgpJfgpLDgpY3gpKgg4KSwIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkquCljeCksOCko+CkvuCksuClgOCkruCkviDgpKrgpYLgpLDgpY3gpKMg4KS44KS54KSu4KSkIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpJXgpYfgpLXgpLIg4KS14KS/4KSV4KS+4KS44KSV4KWLIOCksuCkvuCkl+CkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSbLCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpLngpL/gpLLgpYcg4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjI1NzYzMzM0MzQ4OTM1MzI0NzUiPiLgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KS54KSf4KS+4KSH4KSP4KSV4KWLIOCkquCljeCksOCkuOCkvuCksOCko+CksuCkvuCkiCDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RQYWNrYWdlUmVtb3ZlZCIgbXNnaWQ9IjY2MjE5MDEyMTYyMDc5MzEwODkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KWC4KSa4KSo4KS+IOCkquCljeCksOCkuOCkvuCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmyDgpJzgpYHgpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkquCljeCkr+CkvuCkleClh+CknCDgpLngpJ/gpL7gpIfgpI/gpJXgpYsg4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpY3gpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSv4KWLIOCkleClgeCkqOCliCDgpIXgpKjgpY3gpK8g4KSa4KS+4KSy4KWBIOCkheCkqOClgeCljeCkquCljeCksOCkr+Cli+CklyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjU2ODkwOTUwMDkwMzAzMzY1OTMiPiJTTVMt4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkquCljeCksOCkuOCkvuCksOCkoyDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTbXNSZWNlaXZlZCIgbXNnaWQ9IjQxNTIwMzc3MjAwMzQzNjU0OTIiPiLgpKTgpY3gpK/gpYsg4KSP4KSJ4KSf4KS+IFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpKzgpL7gpJ8g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkreCkj+CkleCliyDgpLjgpYLgpJrgpKjgpL7gpLLgpL7gpIgg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpIbgpIngpIHgpKbgpYgg4KSX4KSw4KWH4KSV4KWLIFNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYLgpLLgpL7gpIgg4KSc4KS+4KSy4KS44KS+4KSc4KWAIOCkl+CksOCljeCkqCDgpLjgpL7gpK/gpKYg4KSW4KSw4KS+4KSsIOCkreCkj+CkleCkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSv4KS44KSy4KS+4KSIIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+IldBUC1QVVNILeCkquCljeCksOCkvuCkquCljeCkpCDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KSq4KSg4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjQ3ODM0MDI1MjUwMzk0NDI3MjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KWC4KSa4KSo4KS+IOCkquCljeCksOCkuOCkvuCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmyDgpJzgpYHgpKgg4KSP4KSJ4KSf4KS+IFdBUCBQVVNIIOCkuOCkqOCljeCkpuClh+CktiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSt4KSP4KSV4KWLIOCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyBNTVMg4KS44KSo4KWN4KSm4KWH4KS2IOCkrOCkv+Ckl+CkvuCksOCljeCkqCDgpLXgpL4g4KSu4KWM4KSoIOCkpOCksOCkv+CkleCkvuCksuClhyDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkteClh+CkrOCkquClg+Ckt+CljeCkoOCkleCliyDgpLjgpL7gpK7gpJfgpY3gpLDgpYAg4KSW4KSw4KS+4KSsIOCkteCkv+CkreClh+CkpuCkueCksOClguCkuOCkgeCklyDgpKzgpKbgpLLgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjI0NTE4NzM2NjQzNjM2NjI2NjYiPiLgpJrgpL7gpLLgpYEg4KSq4KWN4KSw4KS24KWL4KSn4KSo4KS54KSw4KWC4KSV4KWLIOCkuOCkmeCljeCkluCljeCkr+CkviDgpLjgpYDgpK7gpKTgpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJvY2Vzc0xpbWl0IiBtc2dpZD0iNzMxODA2MTMxNDA0MDg3OTU0MiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJrgpL7gpLLgpYEg4KS54KWB4KSo4KWHIOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkueCksOClguCkleCliyDgpIXgpKfgpL/gpJXgpKTgpK4g4KS44KSC4KSW4KWN4KSv4KS+IOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpLngpL/gpLLgpYcg4KSq4KSo4KS/IOCkhuCkteCktuCljeCkr+CklSDgpKjgpKrgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbHdheXNGaW5pc2giIG1zZ2lkPSI1NTA5NTg1MDc3OTg3OTY5NjUiPiLgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSm4KSs4KS+4KSsIOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSX4KSk4KS/4KS14KS/4KSn4KS/4KS54KSw4KWCIOCkuOCkp+CliOCkgSDgpLjgpK7gpL7gpKrgpY3gpKQg4KSt4KSv4KWLIOCkleCkvyDgpK3gpI/gpKgg4KSc4KSsIOCkleCkvyDgpJzgpKTgpL8g4KS44KSV4KWN4KSm4KWLIOCkpOCkv+CkqOClgOCkueCksOClgiDgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL/gpK7gpL4g4KSc4KS+4KSo4KWN4KSb4KSo4KWNIOCkreCkqOCljeCkqOClhyDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWHIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmF0dGVyeVN0YXRzIiBtc2dpZD0iMjc4OTYxMDY3MzUxNDEwMzM2NCI+IuCkrOCljeCkr+CkvuCkn+CljeCksOCkvyDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmF0dGVyeVN0YXRzIiBtc2dpZD0iNTg5NzM0NjU4Mjg4MjkxNTExNCI+IuCkteCksOCljeCkpOCkruCkvuCkqCDgpKXgpYvgpLDgpYgg4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KWAIOCkquCljeCksOCkr+Cli+CklyDgpKHgpYfgpJ/gpL4g4KSq4KSi4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpI/gpJUg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSc4KWB4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClgOCksOCkueCkqOClgeCkreCkj+CkleCliyDgpJsg4KSk4KWN4KSv4KS44KWN4KSV4KWLIOCkrOCkvuCksOClh+CkleCkviDgpKrgpYHgpLDgpY3gpKMg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KS44KS+4KSv4KSmIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVCYXR0ZXJ5U3RhdHMiIG1zZ2lkPSIzNzE5Njg5NzY0NTM2Mzc5NTU3Ij4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlQmF0dGVyeVN0YXRzIiBtc2dpZD0iNjg2MjgxNzg1NzE3ODAyNTAwMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpILgpJXgpLLgpL/gpKQg4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCkueCksOClgiDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSIxNTA4Nzc5Njg3NDM2NTg1NzQ0Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCkguCkmuCkvuCksuCkqOCkleCkviDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpJXgpLngpLDgpYIg4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFwcE9wc1N0YXRzIiBtc2dpZD0iNjI0Mzg4NzA0MTU3NzkxMjg3NyI+IuCkuOCkmeCljeCkleCksuCkqCDgpJfgpLDgpL/gpI/gpJXgpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCkguCkmuCkvuCksuCkqCDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpLLgpL7gpIgg4KSq4KWB4KSo4KSDIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkrOCkvuCknyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQXBwT3BzU3RhdHMiIG1zZ2lkPSI4ODI5MDk3MzczODUxNTIxNTA1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCkguCkmuCksuCkvuCkqCDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpJXgpLngpLDgpYLgpLLgpL7gpIgg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUFwcE9wc1N0YXRzIiBtc2dpZD0iNTA3ODQ1OTY1OTQ0MDM0ODMiPiLgpLjgpJngpY3gpJXgpLLgpKgg4KSX4KSw4KS/4KSP4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpILgpJrgpL7gpLLgpKgg4KSk4KSl4KWN4KSv4KS+4KSZ4KWN4KSy4KS+4KSIIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkrOCkvuCknyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmFja3VwIiBtc2dpZD0iNDcwMDEzMDIyODY1NDUzOTIwIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkrOCljeCkr+CkleCkheCkqiDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpKrgpYHgpKjgpIMg4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhY2t1cCIgbXNnaWQ9IjY5MTIyMzA1MjUxNDA1ODk4OTEiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpJXgpYsg4KSc4KSX4KWH4KSh4KS+IOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKgg4KSwIOCkquClgeCkqOCkg+CkquCljeCksOCkvuCkquCljeCkpOCkv+CkleCliyDgpLjgpILgpK/gpYvgpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpL/gpKQg4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpcm1fZnVsbF9iYWNrdXAiIG1zZ2lkPSI1NTU3MDcxMzI1ODA0NDY5MTAyIj4i4KSq4KWC4KSw4KWN4KSjIOCknOCkl+Clh+CkoeCkviDgpJfgpLDgpY3gpKgg4KS14KS+IOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkviDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSoIOCkqOCkv+CktuCljeCkmuCkv+CkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maXJtX2Z1bGxfYmFja3VwIiBtc2dpZD0iMTc0ODc2MjE3MTYzNzY5OTU2MiI+IlVJIOCkleCliyDgpKrgpYLgpLDgpY3gpKMg4KSc4KSX4KWH4KSh4KS+IOCkqOCkv+CktuCljeCkmuCkv+CkqOCljeCkpOCkpOCkviDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KSV4KS+IOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJXgpYHgpKjgpYgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSs4KS+4KSfIOCkquCljeCksOCkr+Cli+CklyDgpKjgpJfgpLDgpL/gpKjgpYfgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVybmFsU3lzdGVtV2luZG93IiBtc2dpZD0iMjE0ODU2MzYyODE0MDE5MzIzMSI+IuCkheCkqOCkp+Ckv+CkleClg+CkpCDgpKzgpL/gpKjgpY3gpKHgpYvgpLngpLDgpYIg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVybmFsU3lzdGVtV2luZG93IiBtc2dpZD0iNzQ1ODM4Nzc1OTQ2MTQ2NjM5NyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLXgpL/gpKjgpY3gpKHgpYvgpLngpLDgpYIg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbIOCknOClgeCkqCDgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpIfgpKjgpY3gpJ/gpLDgpKvgpYfgpLjgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpIXgpK3gpL/gpKrgpY3gpLDgpYfgpLDgpL/gpKQg4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iMzU0MzM0Nzk4MDgzOTUxODYxMyI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpK7gpL4g4KSa4KS/4KSk4KWN4KSwIOCkleCli+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N5c3RlbUFsZXJ0V2luZG93IiBtc2dpZD0iODU4NDY3ODM4MTk3MjgyMDExOCI+IuCkheCksOClgiDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpK7gpL7gpKXgpL8g4KS14KS+IOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpIfgpKjgpY3gpJ/gpLDgpKvgpYfgpLjgpJXgpL4g4KSt4KS+4KSX4KS54KSw4KWC4KSu4KS+IOCkmuCkv+CkpOCljeCksCDgpJXgpYvgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSk4KS/4KSo4KWA4KS54KSw4KWC4KSy4KWHIOCkleClgeCkqOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KSH4KSo4KWN4KSf4KSw4KSr4KWH4KSV4KWLIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpLjgpIHgpJcg4KS54KS44KWN4KSk4KSV4KWN4KS34KWH4KSqIOCkl+CksOCljeCkqCDgpLXgpL4g4KSk4KSq4KS+4KSI4KSBIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpK7gpL4g4KSV4KWHIOCkpuClh+CkluCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpYsg4KSbIOCkreCkqOCljeCkqOClhyDgpLjgpYvgpJrgpY3gpKgg4KS54KWB4KSo4KWN4KSbIOCkreCkqOCljeCkqOClhyDgpKzgpKbgpLLgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9IjI4MDUxMDMyNDExNTM5MDcxNzQiPiLgpJfgpY3gpLLgpYvgpKzgpLIg4KS44KSc4KWA4KS14KS/4KSV4KSw4KSjIOCkl+CkpOCkvyDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4i4KS14KS/4KS24KWN4KS14KSs4KWN4KSv4KS+4KSq4KS/IOCkuOCknOClgOCkteCkv+CkleCksOCkoyjgpKbgpY3gpLDgpYHgpKQg4KS14KS+IOCkouCkv+CksuCkviDgpLjgpJzgpYDgpLXgpL/gpJXgpLDgpKPgpLngpLDgpYIpIOCksuCkvuCkiCDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkuOCkruCkryDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iMTI4NjUwNTcxNzA1MDEyMTM3MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpJ/gpYvgpJXgpKjgpLngpLDgpYIg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSG4KSr4KWN4KSo4KS+IOCkn+Cli+CkleCkqOCkueCksOClgiDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSoIOCksCDgpIngpKjgpYDgpLngpLDgpYLgpJXgpYsg4KS44KS+4KSn4KS+4KSw4KSjIFot4KSV4KWN4KSw4KSu4KS+4KSZ4KWN4KSV4KSoIOCkrOCkvuCkh+CkquCkvuCkuCDgpJfgpLDgpYfgpLAg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleCkueCkv+CksuCljeCkr+CliCDgpKrgpKjgpL8g4KSG4KS14KS24KWN4KSv4KSVIOCkqOCkueClgeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9IjQ3MDgxODExODQ0NDE4ODAxNzUiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSr4KWN4KSw4KS/4KScIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9Ijg1NTg5MjM3ODkyMjI2NzAwNjQiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWC4KSw4KWN4KSjLeCkuOCljeCkleCljeCksOCkv+CkqCDgpLjgpILgpJXgpY3gpLDgpK7gpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKrgpK7gpL4g4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkuOCljeCkpeCkv+CksCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5qZWN0RXZlbnRzIiBtc2dpZD0iMTM3ODc0NjU4NDAyMzU4NjYwMCI+IuCkleClgeCknuCljeCknOClgOCkueCksOClgiDgpLAg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkrOCkn+CkqOCkueCksOClgiDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbmplY3RFdmVudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNjM1MjU2NTU5OTk2ODYzMiI+IuCkr+CkuOCkleCkviDgpIbgpKvgpY3gpKjgpL4g4KSH4KSo4KSq4KWB4KSfIOCkmOCkn+CkqOCkvuCkueCksOClgiAo4KSV4KS/IOCkpeCkv+CkmuCkvuCkh+CkueCksOClgiwg4KSG4KSm4KS/KSDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkteCkv+CkpOCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpK/gpLjgpLLgpL7gpIgg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KS44KSu4KWN4KSuIOCksuCliOCknOCkvuCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1MzEyODA1NzU3MjMyNjI1MyI+IuCkr+CkuOCljeCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KSo4KS/4KS14KWH4KS2IOCkmOCkn+CkqOCkvuCkueCksOClgiAo4KSV4KS/IOCkpeCkv+CkmuCkvuCkh+CkueCksOClgiwg4KSG4KSm4KS/Likg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCli+Ckr+Ckl+CkueCksOClguCksuCkvuCkiCDgpKrgpYHgpY3gpLDgpY3igI3gpK/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSr4KWL4KSo4KSy4KS+4KSIIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpJfgpLDgpY3gpKgg4KSv4KS44KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iNDY5NDI4OTAwMDQxMjQ5MjM0Ij4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkleClhyDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCksCDgpJXgpYcg4KSV4KS+4KSw4KWN4KSv4KS54KSw4KWCIOCksuCkv+CkqOClgeCkueClgeCkqOCljeCkmyDgpLDgpYfgpJXgpLDgpY3gpKEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZElucHV0U3RhdGUiIG1zZ2lkPSI4Mzg3NzU0OTAxNjg4NzI4MDQzIj4i4KSF4KSw4KWN4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyjgpJzgpLjgpY3gpKTgpYgg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpL7gpIcp4KS44KSB4KSXIOCkheCkqOCljeCkpOCksOCljeCkleCljeCksOCkv+Ckr+CkviDgpJfgpLDgpYfgpJXgpYsg4KSs4KWH4KSy4KS+IOCkquCkqOCkvyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSl4KS/4KSa4KWH4KSV4KS+IOCkleCkv+CkueCksOClguCksuCkvuCkhyDgpLngpYfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkueClgeCkgeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzM2MDA2NDYyMDIzMDUxNTc3NiI+IuCkj+CkieCkn+CkviDgpKjgpL/gpLXgpYfgpLYg4KSk4KSw4KS/4KSV4KS+4KSu4KS+IOCkrOCkvuCkgeCkp+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMyNTA0NDAzMjI4MDcyODYzMzEiPiLgpI/gpIngpJ/gpL4g4KSo4KS/4KS14KWH4KS2IOCkpOCksOCkv+CkleCkvuCkleCliyDgpIngpJrgpY3gpJog4KS44KWN4KSk4KSw4KSV4KWLIOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuOCksuCkvuCkiCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpK7gpL7gpKTgpYAg4KSw4KS+4KSW4KWN4KSo4KWH4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZSIgbXNnaWQ9IjUzNTc3MzM5NDI1NTYwMzE1OTMiPiLgpI/gpIngpJ/gpL4g4KSq4KS54KWB4KSB4KSaIOCkuOClh+CkteCkvuCkuOCkgeCklyDgpJzgpYvgpKHgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI3MDM0NjE1OTI4NjA5MzMxMzY4Ij4i4KSP4KSVIOCkquCkueClgeCkgeCkmiDgpLjgpYfgpLXgpL7gpJXgpYsg4KSJ4KSa4KWN4KSaIOCkuOCljeCkpOCksOCkleCliyDgpJXgpYHgpLDgpL7gpJXgpL7gpKjgpYDgpLLgpL7gpIgg4KSq4KSV4KWN4KSV4KS+IOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS44KSu4KS+4KSk4KWAIOCksOCkvuCkluCljeCkqOClh+CksuClhyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUHJpbnRTZXJ2aWNlIiBtc2dpZD0iODQ2MjgxNTE3OTU3Mjc0ODc2MSI+IuCkj+CkieCkn+CkviDgpKrgpY3gpLDgpL/gpKjgpY3gpJ8g4KS44KWH4KS14KS+4KS44KSB4KSXIOCknOCli+CkoeCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI3OTYwMDY3NjIzMjA5MTExMTM1Ij4i4KSP4KSJ4KSf4KS+IOCkquCljeCksOCkv+CkqOCljeCknyDgpLjgpYfgpLXgpL7gpJXgpYsg4KSJ4KSa4KWN4KSaIOCkuOCljeCkpOCksOCkleCliyDgpIfgpKjgpY3gpJ/gpLDgpKvgpYfgpLjgpLLgpL7gpIgg4KSq4KSV4KWN4KSV4KS+IOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0FsbFByaW50Sm9icyIgbXNnaWQ9IjExMjA3OTI0Njg0NjU3MTExNTkiPiLgpLjgpKzgpYgg4KSq4KWN4KSw4KS/4KSo4KWN4KSfIOCkleCkvuCksOCljeCkr+CkueCksOClguCkleCliyDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQWxsUHJpbnRKb2JzIiBtc2dpZD0iMjk3ODE4NTMxMTA0MTg2NDc2MiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCksuCkvuCkiCDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSm4KWN4KS14KS+4KSw4KS+IOCkqOCkv+CksOCljeCkruCkv+CkpCDgpKrgpY3gpLDgpL/gpKjgpY3gpJ8g4KSV4KS+4KSw4KWN4KSv4KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSo4KWHIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5mY1NlcnZpY2UiIG1zZ2lkPSIyNzUyNzMxMzAwNDE5NDEwNzI0Ij4iTkZDIOCkuOClh+CkteCkvuCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTmZjU2VydmljZSIgbXNnaWQ9IjYxMjA2NDc2MjkxNzQwNjY4NjIiPiJORkMg4KSV4KS+4KSw4KWN4KSh4KS54KSw4KWCIOCkh+CkruClgeCksuClh+CknyDgpJfgpLDgpY3gpKjgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkrOCkvuCkgeCkp+CljeCkqOCkleCkviDgpLLgpL7gpJfgpL8g4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCkviDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVGV4dFNlcnZpY2UiIG1zZ2lkPSI3MzU4Mzc4NDAxOTE1Mjg3OTM4Ij4i4KSP4KSJ4KSf4KS+IOCkquCkvuCkoCDgpLjgpYfgpLXgpL7gpLjgpIHgpJcg4KS44KSC4KSX4KSg4KS/4KSkIOCkueClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRUZXh0U2VydmljZSIgbXNnaWQ9IjgxNTE5Njg5MTA5NzM5OTg2NzAiPiLgpI/gpIngpJ/gpL4g4KSq4KS+4KSgIOCkuOClh+CkteCkvuCkleCliyAo4KSJ4KSm4KS+4KS54KSw4KSjIOCktuCkrOCljeCkpiDgpKrgpLDgpYDgpJXgpY3gpLfgpKPgpLjgpYfgpLXgpL4pIOCkieCkmuCljeCkmiDgpLjgpY3gpKTgpLDgpJXgpYsg4KSH4KSo4KWN4KSf4KSw4KSr4KWH4KS44KSy4KS+4KSIIOCkquCkleCljeCkleCkviDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOCkruCkvuCkpOClgCDgpLDgpL7gpJbgpY3gpKjgpYfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkleCkueCkv+CksuCljeCkr+CliCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSo4KWHIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSI0NzA4NTk2MDIxMTYxNDczMjU1Ij4iVlBOIOCkuOClh+CkteCkvuCkuOCkgeCklyDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLgpI/gpJUgVnBuIOCkuOClh+CkteCkvuCkleCliyDgpIngpJrgpY3gpJog4KS44KWN4KSk4KSw4KSV4KWLIOCkleClgeCksOCkvuCkleCkvuCkqOClgOCksuCkvuCkiCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpK7gpL7gpKTgpYAg4KSw4KS+4KSW4KWN4KSo4KWH4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i4KSP4KSJ4KSf4KS+IOCkteCkvuCksuCkquClh+CkquCksOCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IuCkteCkvuCksuCkquClh+CkquCksOCkleCliyDgpK7gpL7gpKXgpL/gpLLgpY3gpLLgpYsg4KS44KWN4KSk4KSw4KSV4KWLIOCkh+CkqOCljeCkn+CksOCkq+Clh+CkuOCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKgg4KSn4KS+4KSw4KSV4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSG4KS14KS24KWN4KSv4KSVIOCkquCksOCljeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IuCkj+CkieCkn+CkviDgpLXgpL/gpJzgpYfgpJ8g4KS44KWH4KS14KS+4KS44KSB4KSXIOCkuOCkguCkl+CkoOCkv+CkpCDgpLngpYHgpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i4KSP4KSJ4KSf4KS+IOCkteCkv+CknOClh+CknyDgpLjgpYfgpLXgpL7gpJXgpYsg4KSJ4KSa4KWN4KSaIOCkuOCljeCkpOCksOCkleCliyDgpIfgpKjgpY3gpJ/gpLDgpKvgpYfgpLjgpLLgpL7gpIgg4KSq4KSV4KWN4KSV4KS+IOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS44KSu4KS+4KSk4KWAIOCksOCkvuCkluCljeCkqOClh+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCkquCljeCksOCkrOCkqOCljeCkp+CkuOCkgeCklyDgpIXgpKjgpY3gpKTgpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4i4KSJ4KSq4KSV4KSw4KSjIOCkquCljeCksOCktuCkvuCkuOCklSDgpLLgpL7gpIgg4KSG4KS24KSvIOCkquCkoOCkvuCkieCkqCDgpLjgpK7gpL7gpKTgpYAg4KSw4KS+4KSW4KWN4oCN4KSo4KWH4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkquCkqOClgCDgpIbgpLXgpLbgpY3gpK/gpJUg4KSq4KSw4KWN4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4i4KSP4KSJ4KSf4KS+IOCkieCkquCkleCksOCkoyDgpLXgpY3gpK/gpLXgpLjgpY3gpKXgpL7gpKrgpJUg4KSl4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KS54KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNTAyNTYwODE2NzcwOTk0MjQ4NSI+IuCkueCli+CksuCljeCkoeCksOCksuCkvuCkiCDgpLjgpJXgpY3gpLDgpL/gpK8g4KSJ4KSq4KSV4KSw4KSjIOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkleCkueCksOClgiDgpKXgpKog4KSX4KSw4KWN4KSoIOCkteCkviDgpLngpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSq4KSo4KS/IOCkhuCkteCktuCljeCkr+CklSDgpKjgpLngpYHgpKgg4KS44KSV4KWN4KSm4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMzNjU5NDc3MTcxNjM4NjY4NDQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSF4KSt4KS/4KSu4KWB4KSW4KS/4KSV4KSw4KSjIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLjgpK7gpK/gpK7gpL4g4KS44KWN4KSV4KWN4KSw4KS/4KSo4KSV4KWLIOCkquCksOCkv+CkleCljeCksOCkruCkoyDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWHIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iOTE3NTM3MTYxMzMyMjU2MjkzNCI+IuCkuOCkmeCljeCkleClh+CkpOCklSDgpJfgpKTgpL8g4KSs4KSm4KSy4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iNjg2NjU2MzIzNDI3NDEwNDIzMyI+IuCkleClgeCkqOCliCDgpKrgpKjgpL8g4KS44KSu4KSv4KSu4KS+IOCkruCkvuCkieCkuCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkteCkviDgpJ/gpY3gpLDgpL7gpJXgpKrgpY3gpK/gpL7gpKEg4KS44KSC4KSV4KWH4KSk4KSV4KSV4KWLIOCkl+CkpOCkvyDgpKzgpKbgpLLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkqOCkmuCkvuCkueCkv+CkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iNDc3ODczMTcwMzYwMDkwOTM0MCI+IuCkleCkv+CkrOCli+CksOCljeCkoSDgpLLgpYfgpIbgpIngpJ8g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEtleWJvYXJkTGF5b3V0IiBtc2dpZD0iODQ4MDAxNjc3MTEzNDE3NTg3OSI+IuCkleCkv+CkrOCli+CksOCljeCkoSDgpLLgpYfgpIbgpIngpJ/gpLLgpL7gpIgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpLjgpL7gpK/gpKYg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaWduYWxQZXJzaXN0ZW50UHJvY2Vzc2VzIiBtc2dpZD0iNDUzOTAwMjk5MTk0NzM3NjY1OSI+IkxpbnV4IOCkuOCkguCkleClh+CkpOCkueCksOClgiDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KSg4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ4OTY5OTIwNzkxODI2NDkxNDEiPiLgpLjgpKzgpYgg4KSa4KSy4KS/4KSw4KS54KWH4KSV4KS+IOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkueCksOClguCkruCkviDgpKrgpKDgpL7gpIfgpI/gpJXgpL4g4KS44KSC4KSV4KWH4KSk4KSy4KS+4KSIIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCknOCkueCkv+CksuClhyDgpKrgpKjgpL8g4KSa4KSy4KWN4KSo4KWHIOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODUyNTE4OTI3MjMyOTA4NjEzNyI+IuCkr+CkuOCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KSu4KWH4KSu4KWL4KSw4KWA4KSu4KS+IOCkpuClg+CkoiDgpK3gpI/gpJXgpYvgpJXgpYsg4KSF4KSC4KS2IOCkrOCkqOCkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkouCkv+CksuCliyDgpJfgpLDgpL7gpIngpIHgpKbgpYgg4KSX4KSw4KWH4KSV4KS+IOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KS44KWA4KSu4KS/4KSkIOCkruCkvuCkpOCljeCksOCkvuCkruCkviDgpK/gpLjgpLLgpYcg4KSu4KWH4KSu4KWL4KSw4KWAIOCkieCkquCksuCkrOCljeCkpyDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDM4NDc2MDA0NzUwODI3ODI3MiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK7gpYfgpK7gpYvgpLDgpYDgpK7gpL4g4KSG4KSr4KWI4KSC4KSV4KWLIOCkqOCkv+CksOCkqOCljeCkpOCksOCkleCliyDgpIXgpILgpLYg4KSs4KSo4KS+4KSJ4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkq+Cli+CkqOCksuCkvuCkiCDgpKLgpL/gpLLgpL4g4KSs4KSo4KS+4KSP4KSwIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpK7gpL4g4KSu4KWH4KSu4KWL4KSw4KWAIFNJTeCkv+CkpCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZWxldGVQYWNrYWdlcyIgbXNnaWQ9IjE4NDM4NTEyOTUzNzcwNTkzOCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVQYWNrYWdlcyIgbXNnaWQ9Ijc0MTE0ODAyNzUxNjcyMDUwODEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIOCkquCljeCkr+CkvuCkleClh+CknOCkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CkuOCksuCkvuCkiCDgpK7gpLngpKTgpY3gpKTgpY3gpLXgpKrgpYLgpLDgpY3gpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkruClh+Ckn+CkvuCkieCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjI3NDEwOTE5MTg0NTg0Mjc1NiI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSI0NjI1MzIzNjg0MTI1NDU5NDg4Ij4i4KSq4KWN4KSw4KSv4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpLngpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RlbGV0ZUNhY2hlRmlsZXMiIG1zZ2lkPSIzMTI4NjY1NTcxODM3NDA4Njc1Ij4i4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpJXgpY3gpK/gpL7gpLjgpLngpLDgpYIg4KSu4KWH4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjM4MTI5OTg1OTkwMDY3MzAxOTYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KWN4KSv4KS+4KS4IOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSI3NDcyOTIxNzY4MzU3OTgxOTg2Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKDgpL7gpIngpIHgpJXgpYsg4KSu4KS+4KSq4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iMzkyMTA2ODE1NDQyMDczODI5NiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK/gpLjgpJXgpYsg4KSV4KWL4KShLCDgpKHgpYfgpJ/gpL4sIOCksCDgpJXgpY3gpK/gpL7gpLgg4KSG4KSV4KS+4KSw4KS54KSw4KWCIOCkquClgeCkqOCkg+CkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iMjE5OTEyODQ4MjgyMDMwNjkyNCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLjgpL/gpKfgpYgg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLgpKjgpK/gpL7gpIEg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqCDgpLXgpL4g4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIOCkquCljeCkr+CkvuCkleClh+CknOCkueCksOClgiDgpIXgpKbgpY3gpK/gpL7gpLXgpKfgpL/gpJUg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSv4KS44KSy4KS+4KSIIOCkruCkqOCkquCksOClgCDgpLDgpYLgpKrgpK7gpL4g4KS24KSV4KWN4KSk4KS/4KS24KS+4KSy4KWAIOCkheCkqOClgeCkruCkpOCkv+CkueCksOClgiDgpK3gpI/gpJXgpL4g4KSo4KSv4KS+4KSBIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpKXgpKrgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NsZWFyQXBwQ2FjaGUiIG1zZ2lkPSI3NDg3Mjc5MzkxNzIzNTI2ODE1Ij4i4KS44KSs4KWIIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpJXgpY3gpK/gpL7gpLgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwQ2FjaGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzQ2NDA4NzE5NDU0MzQ1NjUiPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkleCljeCkr+CkvuCkuCDgpKHgpL7gpIfgpLDgpYfgpJXgpY3gpJ/gpLDgpYDgpLngpLDgpYLgpK7gpL4g4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkueCkn+CkvuCkj+CksCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpJXgpYsg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkluCkvuCksuClgCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSJ4KSo4KWA4KS54KSw4KWC4KSy4KWHIOCkhuCkq+CljeCkqOCliyDgpKHgpYfgpJ/gpL4g4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqCDgpKrgpLDgpY3gpKjgpYcg4KS54KWB4KSo4KS+4KSy4KWHIOCkr+CkuOCksuClhyDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkuOCljeCkn+CkvuCksOCljeCknyDgpLngpYHgpKgg4KSo4KS/4KSV4KWIIOCkouCkv+CksuCliyDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2xlYXJBcHBDYWNoZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0NTk0NDEwMjE5NTY0MzY3NzkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpJXgpY3gpK/gpL7gpLgg4KSh4KS+4KSH4KSw4KWH4KSV4KWN4KSf4KSw4KWA4KSu4KS+IOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL7gpI/gpLAg4KSr4KWL4KSoIOCkreCko+CljeCkoeCkvuCksOCkoyDgpJbgpL7gpLLgpYAg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSs4KSi4KWAIOCkouCkv+CksuCkviDgpLjgpYHgpLDgpYEg4KSX4KSw4KS+4KSJ4KSB4KSbIOCkleCkv+CkqOCkleCkvyDgpKTgpL/gpKjgpYDgpLngpLDgpYLgpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpIPgpKrgpY3gpLDgpL7gpKrgpY3gpKTgpL8g4KSX4KSw4KWN4KSoIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3ZlUGFja2FnZSIgbXNnaWQ9IjMyODk4OTAyNzE2NDU5MjE0MTEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWCIOCkuOCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdmVQYWNrYWdlIiBtc2dpZD0iMzE5NTYyMjE3Nzc4MjQ0NTI0Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCljeCksOCli+CkpOCkueCksOClgiDgpIbgpKjgpY3gpKTgpLDgpL/gpJXgpKzgpL7gpJ8g4KSs4KS+4KS54KWN4KSvIOCkruClh+CkoeCkv+Ckr+CkvuCkruCkviDgpLAg4KS14KS/4KSq4KSw4KS/4KSk4KSu4KS+IOCksuCliOCknOCkvuCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZExvZ3MiIG1zZ2lkPSI2NjE1Nzc4NTQzMTk4OTY3NjE0Ij4i4KS44KSC4KS14KWH4KSo4KS24KWA4KSyIOCksuCklyDgpKHgpYfgpJ/gpL4g4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KS+IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpKvgpL7gpIfgpLLgpLngpLDgpYLgpKzgpL7gpJ8g4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkruCljeCkreCkvuCkteCljeCkryDgpLDgpYLgpKrgpK7gpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCksCDgpKjgpL/gpJzgpYAg4KS44KWC4KSa4KSo4KS+4KS44KS54KS/4KSkIOCkpOCkquCkvuCkiOCkgSDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLjgpIHgpJcg4KSV4KWHIOCkl+CksOCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpYsg4KSbIOCkreCkqOCljeCkqOClhyDgpKzgpL7gpLDgpYfgpJXgpYsg4KS44KS+4KSn4KS+4KSw4KSjIOCkuOClguCkmuCkqOCkviDgpKrgpKTgpY3gpKTgpL4g4KSy4KSX4KS+4KSJ4KSoIOCkr+CkuOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMDYzNDM4MTQwMjQxNTYwNDQzIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KS+IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpKvgpL7gpIfgpLLgpLngpLDgpYLgpKzgpL7gpJ8g4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkruCljeCkreCkvuCkteCljeCkryDgpLDgpYLgpKrgpK7gpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCksCDgpKjgpL/gpJzgpYAg4KS44KWC4KSa4KSo4KS+4KS44KS54KS/4KSkIOCkpOCkquCkvuCkiOCkgSDgpKvgpYvgpKjgpLjgpIHgpJcg4KSV4KWHIOCkl+CksOCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpYsg4KSbIOCkreCkqOCljeCkqOClhyDgpKzgpL7gpLDgpYfgpJXgpYsg4KS44KS+4KSn4KS+4KSw4KSjIOCkuOClguCkmuCkqOCkviDgpKrgpKTgpY3gpKTgpL4g4KSy4KSX4KS+4KSJ4KSoIOCkr+CkuOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hbnlDb2RlY0ZvclBsYXliYWNrIiBtc2dpZD0iNzE1ODA1NTU1ODIzODgxODE4Ij4i4KSq4KSb4KS+4KSh4KS/IOCkrOCknOCkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSV4KWB4KSo4KWIIOCkruCkv+CkoeCkv+Ckr+CkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSy4KWH4KSs4KWN4KSv4KS+4KSVIOCkoeCkv+CkleCli+CkoSDgpJfgpLDgpY3gpKgg4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSu4KS/4KSh4KS/4KSv4KS+IOCkoeCkv+CkleCli+CkoeCksCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9tYW5hZ2VDYUNlcnRpZmljYXRlcyAoMTY3ODM5MTg5Njc4Njg4MjAxNCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19tYW5hZ2VDYUNlcnRpZmljYXRlcyAoNDAxNTY0NDA0NzE5NjkzNzAxNCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlhZ25vc3RpYyIgbXNnaWQ9IjgwNzY3NDM5NTM5MDgwMDAzNDIiPiJkaWFnIOCkleCliyDgpLjgpY3gpLXgpL7gpK7gpL/gpKTgpY3gpLXgpK7gpL4g4KSw4KS54KWH4KSV4KWLIOCkuOCkguCkuOCkvuCkp+CkqOCkueCksOClguCkruCkviDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0v4KSy4KWH4KSW4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlhZ25vc3RpYyIgbXNnaWQ9IjY2MDgyOTU2OTIwMDI0NTIyODMiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIggZGlhZyDgpLjgpK7gpYLgpLngpKbgpY3gpLXgpL7gpLDgpL4g4KS44KWN4KS14KS+4KSu4KS/4KSk4KWN4KS1IOCkquCljeCksOCkvuCkquCljeCkpCDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkuOCljeCksOCli+CkpOCkueCksOClguCkruCkviDgpKrgpKLgpY3gpKgg4KSwIOCksuClh+CkluCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbOyDgpIngpKbgpL7gpLngpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/LCAvZGV2ICDgpK7gpL4g4KSr4KS+4KSH4KSy4KS54KSw4KWC4KWkIOCkr+CkuOCksuClhyDgpLjgpK7gpY3gpK3gpLXgpKTgpIMg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkuOCljeCkpeCkv+CksOCkpOCkviDgpLAg4KS44KWB4KSw4KSV4KWN4KS34KS+4KSu4KS+IOCkquCljeCksOCkreCkvuCktSDgpKrgpL7gpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KWkIOCkr+CliyDgpJXgpYfgpLXgpLIg4KSo4KS/4KSw4KWN4KSu4KS+4KSk4KS+IOCkteCkviDgpLjgpILgpJrgpL7gpLLgpJXgpKbgpY3gpLXgpL7gpLDgpL4g4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSwLeCkqOCkv+CksOCljeCkpuCkv+Ckt+CljeCkn+CkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWN4KSw4KSv4KWL4KSXIOCkueClgeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBtc2dpZD0iNjMzNTU3Njc3NTcxMTA5NTkzMSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpIXgpILgpLbgpLngpLDgpYIg4KS44KSV4KWN4KS34KSuIOCkteCkviDgpIXgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg4ODc0MzU3NDA5ODIyMzcyOTQiPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOCkleCljeCkt+CkriDgpJsg4KS14KS+IOCkm+CliOCkqCDgpK3gpKjgpY3gpKjgpYcg4KSV4KWB4KSw4KS+4KSV4KWLIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkruCkueCkpOCljeCkpOCljeCkteCkquClguCksOCljeCkoyDgpKvgpYvgpKgg4KS44KSV4KWN4KS34KSu4KSk4KS+IOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/4KS44KSB4KSX4KWIIOCkueCli+CkuOCkv+Ckr+CkvuCksOClgCDgpIXgpKrgpKjgpL7gpIngpKjgpYEg4KSq4KSw4KWN4KSbLCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS14KS/4KS34KSvIOCkuOClguCkmuClgOCkruCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSo4KS54KWB4KSo4KWHLCDgpIXgpLjgpILgpJfgpKQsIOCkheCkuOCljeCkpeCkv+CksCDgpIXgpLXgpLjgpY3gpKXgpL4g4KSt4KSP4KSV4KWLIOCkquCljeCksOCkvuCkquCljeCkpCDgpLngpYHgpKjgpYcg4KS44KSu4KWN4KSt4KS+4KS14KSo4KS+IOCkueClgeCkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTgyNzIzMjQ4NDQxNjUwNTYxNSI+IuCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSF4KSC4KS2IOCkuOCkleCljeCkt+CkriDgpJsg4KS14KS+IOCkm+CliOCkqCDgpK3gpKjgpY3gpKjgpYfgpK7gpL4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSu4KS54KSk4KWN4KSk4KWN4KS14KSq4KWC4KSw4KWN4KSjIOCkq+Cli+CkqCDgpLjgpJXgpY3gpLfgpK7gpKTgpL4g4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCli+Ckl+CkueCksOClguCksuClhyDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL/gpLjgpIHgpJfgpYgg4KS54KWL4KS44KS/4KSv4KS+4KSw4KWAIOCkheCkquCkqOCkvuCkieCkqOClgSDgpKrgpLDgpY3gpJssIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLXgpL/gpLfgpK8g4KS44KWC4KSa4KWA4KSu4KS+IOCkquCljeCksOCkr+Cli+CklyDgpKjgpLngpYHgpKjgpYcsIOCkheCkuOCkguCkl+CkpCwg4KSF4KS44KWN4KSl4KS/4KSwIOCkheCkteCkuOCljeCkpeCkviDgpK3gpI/gpJXgpYsg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkueClgeCkqOClhyDgpLjgpK7gpY3gpK3gpL7gpLXgpKjgpL4g4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDYyNzMxNTM1MTA5MzUwODc5NSI+IuCkheCkqOClgeCkruCkpOCkv+CkueCksOClgiDgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkteCkviDgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQwODg2NDI2NTQwODU4NTA2NjIiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSv4KWLIOCkteCkviDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpKjgpL/gpLDgpY3gpKbgpL/gpLfgpY3gpJ8g4KS44KWN4KS14KWA4KSV4KWD4KSk4KS/4KS54KSw4KWCIOCkquCljeCksOCkpuCkvuCkqCDgpJfgpLDgpY3gpKgg4KS14KS+IOCksOCkpuCljeCkpiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyDgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkquCljeCksOCkpuCkvuCkqCDgpKjgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpL4g4KS44KWB4KS14KS/4KSn4KS+4KS54KSw4KWC4KSu4KS+IOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSm4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI4NDYzMTgxNjI4Njk1Mzk2MzkxIj4i4KS14KS/4KS24KWH4KS3IOCksOClguCkquCkruCkviDgpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI0OTczOTg2NzYyMjQxNzgzNzEyIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkruCkqOCkquCksOCljeCkqOClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpJrgpLLgpL/gpLDgpLngpYfgpJXgpL4g4KSk4KWAIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CkueCksOClguCksuCkvuCkiCDgpJrgpYHgpKrgpJrgpL7gpKog4KSw4KWC4KSq4KSu4KS+IOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWNLCDgpKTgpKrgpL7gpIjgpIHgpKzgpL7gpJ8g4KSo4KS/4KSc4KWAIOCkoeClh+Ckn+CkviDgpLjgpILgpJXgpLLgpKgg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpK3gpIfgpLDgpLngpYfgpJXgpYsg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCljeCkquClgeCkqyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNldHRpbmdzIiBtc2dpZD0iMjIyNjE5NTI5MDk1NTIyNDczMCI+IuCkquCljeCksOCko+CkvuCksuClgCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSI3Nzc1NzIzNDQxNTU4OTA3MTgxIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KS+IOCkuOClh+Ckn+Ckv+CkmSDgpKHgpYfgpJ/gpL7gpLLgpL7gpIgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpLjgpL7gpK/gpKYg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkquCljeCksOCko+CkvuCksuClgOCkleCliyDgpJXgpKjgpY3gpKvgpL/gpJfgpLDgpYfgpLjgpKjgpLLgpL7gpIgg4KSV4KWN4KS34KSk4KS/IOCkquClgeCksOCljeKAjeCkr+CkvuCkieCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSIyMDQ2NzYyNTE4NzY3MTgyODgiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjgxNTk1MzU2MTMwMjAxMzczOTEiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpJXgpYsg4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkuOClh+Ckn+Ckv+CkmSDgpKHgpYfgpJ/gpL4g4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiJHb29nbGUg4KS44KWH4KS14KS+IOCkqOCkleCljeCkuOCkviDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIxMjg3MzA5NDM3NjM4MzgwMjI5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIEdvb2dsZSDgpLjgpYfgpLXgpL4g4KSo4KSV4KWN4KS44KS+4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSm4KWN4KS14KS+4KSw4KS+4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlQm9vdENvbXBsZXRlZCIgbXNnaWQ9IjUzMTI5NjU1NjU5ODc4MDAwMjUiPiLgpLjgpY3gpJ/gpL7gpLDgpY3gpJ/gpIXgpKrgpK7gpL4g4KSa4KSy4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczOTAzMDQ2NjQxMTY4ODA3MDQiPiLgpIbgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkrOClgeCknyDgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4g4KSq4KWC4KSw4KWN4KSjIOCkueClgeCkqOClhyDgpKzgpL/gpKTgpL/gpJXgpYgg4KSG4KSr4KWI4KSy4KS+4KSIIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpK7gpL4g4KSi4KS/4KSy4KS+IOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJsg4KSwIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpK7gpJfgpY3gpLDgpK7gpL4g4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkuOCkp+CliOCkgSDgpJrgpL7gpLLgpYEg4KSX4KSw4KWH4KSwIOCkouCkv+CksuCkviDgpKzgpKjgpL7gpIngpIHgpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUxMzk1MDU4OTEwMjYxNzUwNCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSs4KWB4KSfIOCkl+CksOClgCDgpLjgpJXgpYfgpKrgpJvgpL8g4KSc4KSk4KS/IOCkuOCkleCljeCkpuCliyDgpJrgpL7gpIHgpKHgpYsg4KSG4KSr4KWI4KSC4KSu4KS+IOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSr4KWL4KSoIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpK7gpL4g4KSi4KS/4KSy4KS+IOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJsg4KSwIOCkheCkqOCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpK7gpJfgpY3gpLDgpK7gpL4g4KSr4KWL4KSoIOCkuOCkp+CliOCkgSDgpJrgpL7gpLLgpYEg4KSX4KSw4KWH4KSwIOCkouCkv+CksuCkviDgpKzgpKjgpL7gpIngpIHgpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFN0aWNreSIgbXNnaWQ9Ijc5MTkxMjYzNzI2MDY4ODE2MTQiPiLgpLjgpY3gpJ/gpL/gpJXgpL8g4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkquCkoOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+IuCklOCkquCkmuCkvuCksOCkv+CklSDgpKrgpY3gpLDgpLjgpL7gpLDgpKPgpLLgpL7gpIgg4KSq4KSg4KS+4KSJ4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpI/gpIngpJ/gpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCknOClgeCkqCDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KS44KSu4KS+4KSq4KWN4KSkIOCkreCkj+CkquCkm+CkvyDgpKzgpL7gpIHgpJXgpYAg4KSw4KS54KSo4KWN4KSb4KWkIOCkheCkpOCljeCkr+CkvuCkp+Ckv+CklSDgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSn4KWH4KSw4KWIIOCkruClh+CkruCli+CksOClgCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSV4KWLIOCkleCkvuCksOCko+CksuClhyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSi4KS/4KSy4KWLIOCksCDgpIXgpLjgpY3gpKXgpL/gpLAg4KSs4KSo4KS+4KSJ4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4MjU4MDM3NjQyMzI0NDUwOTEiPiLgpJTgpKrgpJrgpL7gpLDgpL/gpJUg4KSq4KWN4KSw4KS44KS+4KSw4KSj4KSy4KS+4KSIIOCkquCkoOCkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSP4KSVIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbLCDgpJzgpYHgpKgg4KSq4KWN4KSw4KS44KS+4KSw4KSjIOCkuOCkruCkvuCkquCljeCkpCDgpK3gpI/gpKrgpJvgpL8g4KSs4KS+4KSB4KSV4KWAIOCksOCkueCkqOCljeCkm+ClpCDgpIXgpKTgpY3gpK/gpL7gpKfgpL/gpJUg4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkp+Clh+CksOCliCDgpK7gpYfgpK7gpYvgpLDgpYAg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CkleCliyDgpJXgpL7gpLDgpKPgpLLgpYcg4KSr4KWL4KSo4KSy4KS+4KSIIOCkouCkv+CksuCliyDgpLAg4KSF4KS44KWN4KSl4KS/4KSwIOCkrOCkqOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDb250YWN0cyIgbXNnaWQ9IjgzNDg0ODExMzE4OTk4ODYxMzEiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWCIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTI5NDg2Njg1Njk0MTE0OTYzOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKjgpL/gpLDgpY3gpKbgpL/gpLfgpY3gpJ8g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSk4KS44KSB4KSXIOCkheCkqOCljeCkryDgpKTgpLDgpL/gpJXgpL7gpLngpLDgpYLgpKzgpL7gpJ8g4KSV4KSyIOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpL4sIOCkh+CkruClh+CksiDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KS+IOCkteCkviDgpIXgpKjgpY3gpKTgpLDgpY3gpJXgpY3gpLDgpL/gpK/gpL4g4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KS+IOCkhuCkteClg+CkpOCkv+CkuOCkueCkv+CkpOCkleCliyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpJfgpLDgpL/gpI/gpJXgpL4g4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWC4KSV4KWLIOCkoeClh+Ckn+CkviDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+IOCkrOCkmuCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSwIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKzgpL/gpKjgpL4g4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0NDA2NTQxNTI0NTczMDA2NjIiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KS14KS/4KS24KWH4KS3IOCkteCljeCkr+CkleCljeCkpOCkv+CkueCksOClguCkuOCkgeCklyDgpIXgpLDgpY3gpJXgpYsg4KSk4KSw4KS/4KSV4KS+4KSs4KS+4KSfIOCkleCksiDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpL4sIOCkh+CkruClh+CksiDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpL4g4KS14KS+IOCkuOCkguCkmuCkvuCksCDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpL4g4KSG4KS14KWD4KSk4KS/4KS44KS54KS/4KSkIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKjgpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkreCkj+CkleCkviDgpKHgpYfgpJ/gpL7gpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCkquCkouCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCkruCljeCkquCksOCljeCklSDgpKHgpYfgpJ/gpL4g4KSs4KSa4KSkIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSwIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJzgpY3gpJ7gpL7gpKgg4KSs4KS/4KSo4KS+IOCkqOCliCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkuOCkvuCkr+CkpiDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+IOCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNvbnRhY3RzIiBtc2dpZD0iNTEwNzQ5MjA4NjQxNjc5MzU0NCI+IuCkpOCkquCkvuCkiOCkgeCkleCkviDgpLjgpK7gpY3gpKrgpLDgpY3gpJXgpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzI0MzkzMjUyMTk1MzYwMiI+IuCkheCkqOCljeCkryDgpKTgpLDgpL/gpJXgpL7gpJXgpL4g4KSG4KS14KWD4KSk4KS/4KS54KSw4KWC4KS44KSB4KSXIOCknOClgeCkqCDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSV4KSyLCDgpIfgpK7gpYfgpLIsIOCkteCkviDgpLXgpL/gpLbgpYfgpLcg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkl+CksOCljeCkqOClgeCkreCkj+CkleCkvuCkuOCkueCkv+CkpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpK3gpI/gpJXgpL4g4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWC4KSV4KWLIOCkrOCkvuCksOClh+CkleCliyDgpKHgpYfgpJ/gpL7gpLLgpL7gpIgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS4IOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkruClh+Ckn+CkvuCkieCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1ODk4NjkyMjQ2MjUxNjM1NTgiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSs4KS+4KSw4KSu4KWN4KSs4KS+4KSwIOCkleCksiDgpJfgpLDgpYfgpJXgpL4sIOCkh+CkruClh+CksiDgpJfgpLDgpYfgpJXgpL4sIOCkteCkviDgpLXgpL/gpLbgpYfgpLcg4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWC4KS44KSB4KSXIOCkuOCknuCljeCkmuCkvuCksCDgpJfgpLDgpYfgpJXgpL4g4KS44KS54KS/4KSkIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKjgpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkl+CksOClh+CkleCkviDgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KS44KSu4KWN4KSq4KSw4KWN4KSV4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkoeClh+Ckn+CkviDgpK7gpYfgpJ/gpL7gpIngpKgg4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsbExvZyIgbXNnaWQ9IjM0NzgxMzMxODQ2MjQxMDI3MzkiPiLgpJXgpLIg4KSy4KSXIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNzAwNjQ1MTg0ODcwNzYwMjg1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpJXgpYsg4KSV4KSyIOCksuCklywg4KSG4KSX4KSu4KSoIOCksCDgpKzgpLngpL/gpLDgpY3gpJfgpK7gpKgg4KSV4KSy4KS54KSw4KWCIOCkrOCkvuCksOClhyDgpKHgpYfgpJ/gpL4g4KS44KS54KS/4KSk4KSV4KWLIOCkleCksiDgpLLgpJcg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS4IOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCksiDgpLLgpJcg4KSh4KWH4KSf4KS+4KS54KSw4KWC4KSV4KWLIOCkrOCkmuCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSwIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCknOCkvuCkqOCkleCkvuCksOClgCDgpKzgpL/gpKjgpL4g4KSo4KWIIOCkr+CliyDgpJXgpLIg4KSy4KSXIOCkoeClh+Ckn+CkvuCksuCkvuCkiCDgpIXgpLDgpYLgpLjgpIHgpJcg4KS44KS+4KSd4KWH4KSm4KS+4KSwIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3Nzc3MjU3OTY4MTMyMTcyNDQiPiLgpK3gpL/gpKTgpY3gpLAg4KSG4KSJ4KSo4KWHIOCksCDgpKzgpL7gpLngpL/gpLAg4KSc4KS+4KSo4KWHIOCkleCksuCkueCksOClguCkuOCkueCkv+CkpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KSo4KSV4KWLIOCkleCksiDgpLLgpJcg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkICDgpK/gpYsg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuCkvuCkiCDgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KSV4KSyIOCksuCklyDgpKHgpYfgpJ/gpL4g4KSs4KSa4KSkIOCkl+CksOCljeCkqCDgpKbgpL/gpKjgpY3gpJsg4KSwIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpeCkvuCkueCliCDgpKjgpKrgpL7gpIgg4KSV4KSyIOCksuCklyDgpKHgpYfgpJ/gpL7gpLLgpL7gpIgg4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsbExvZyIgbXNnaWQ9Ijg1NTIwNDU2NjQ3NDM0OTkzNTQiPiLgpJXgpLIg4KSy4KSXIOCksuClh+CkluCljeKAjeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY2MTgwNjA2MjI3NDExOTI0NSI+IuCkhuCkl+CkruCkqCDgpKTgpKXgpL4g4KSs4KS54KSw4KWN4KSX4KSu4KSoIOCkoeClh+Ckn+CkvuCkuOCkueCkv+CkpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSV4KWLIOCkleCksiDgpLLgpJfgpJXgpYsg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CkuOCksuCkvuCkiCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSV4KSyIOCksuCklyDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkteCkviDgpK7gpYfgpJ/gpL7gpIngpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODM5NDE3MzYzNTI3ODc4NDIiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkq+Cli+CkqOCkleCliyDgpIbgpIngpKjgpYcg4KSwIOCkrOCkvuCkueCkv+CksCDgpJzgpL7gpKjgpYcg4KSV4KSy4KS54KSw4KWC4KSV4KWLIOCkrOCkvuCksOClh+CkleCliyDgpKHgpYfgpJ/gpL4g4KS44KS54KS/4KSkIOCkleCksiDgpLLgpJcg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSv4KS44KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkguCkleCliyDgpJXgpLIg4KSy4KSXIOCkruClh+Ckn+CkvuCkieCkqCDgpLXgpL4g4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFByb2ZpbGUiIG1zZ2lkPSI0NzAxODg5ODUyNjEyNzE2Njc4Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkhuCkq+CljeCkqOCliCDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSV4KS+4KSw4KWN4KShIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ2MjQ3NTE1MTg0OTg4ODg0OCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpJfgpLDgpL/gpI/gpJXgpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSX4KSkIOCkquCljeCksOCli+Ckq+CkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCknOCkuOCljeCkpOCliCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSo4KS+4KSuIOCksCDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSc4KS+4KSo4KSV4KS+4KSw4KWA4KWkIOCkr+CkuOCkleCliyDgpK7gpKTgpLLgpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkpOCkquCkvuCkiOCkguCksuCkvuCkiCDgpKrgpLngpL/gpJrgpL7gpKgg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkmyDgpLAg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkquCljeCksOCli+Ckq+CkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSF4KSw4KWC4KSy4KS+4KSIIOCkquCkoOCkvuCkieCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlUHJvZmlsZSIgbXNnaWQ9IjkwNzc5MzYyODc3NzM5NzY0MyI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkleCkvuCksOCljeCkoSDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTU1MjA4NDI5NDU5ODQ2NTg5OSI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSwIOCkreCkj+CkleCliyDgpLXgpY3gpK/gpL7gpJXgpY3gpKTgpL/gpJfgpKQg4KSq4KWN4KSw4KWL4KSr4KS+4KSH4KSyIOCknOCkvuCkqOCkleCkvuCksOClgCwg4KSc4KS44KWN4KSk4KWIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKjgpL7gpK4g4KS14KS+IOCkuOCkruCljeCkquCksOCljeCklSDgpJzgpL7gpKjgpJXgpL7gpLDgpYDgpLLgpL7gpIgg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqCDgpLXgpL4g4KSl4KSq4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpJXgpYsg4KSu4KSk4KSy4KSsIOCkheCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkmuCkv+CkqOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY0g4KSwIOCkuOCkvuCkr+CkpiDgpIXgpKjgpY3gpK/gpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkquCljeCksOCli+Ckq+CkvuCkh+CksiDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSq4KSg4KS+4KSJ4KSoIOCkuOCkleCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEyNjg5MjA5NTYxNTI0MTkxNzAiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkuOCljeCkn+CljeCksOCkv+CkriDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDI1NTcwNjAyNzE3MjA1MDg3MiI+IuCkpOCkquCkvuCkiOCkgSDgpLAg4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkuOCkvuCkpeClgOCkueCksOClguCkrOCkvuCknyDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSF4KSq4KSh4KWH4KSf4KSy4KS+4KSIIOCkquCkueClgeCkgeCkmiDgpLAg4KS44KS/4KSC4KSVIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKbgpL4g4KS44KS+4KS14KSn4KS+4KSoIOCksOCkueCkqOClgeCkueCli+CkuOCljSAgLS0g4KS44KSu4KS+4KSc4KS/4KSVIOCkqOClh+Ckn+CkteCksOCljeCkleCkueCksOClguCkruCkviDgpKTgpKrgpL7gpIjgpIEg4KSwIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLjgpL7gpKXgpYDgpJXgpYsgIOCkrOCkv+CkmuCkruCkviDgpK3gpI/gpJXgpL4g4KS44KSC4KSa4KS+4KSw4KSy4KS+4KSIIOCkquCkouCljeCkqCDgpLXgpL/gpLbgpY3gpLXgpL7gpLjgpKjgpYDgpK/gpKTgpL4g4KSs4KWH4KSX4KSw4KWIIOCkr+CkuOCksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpKjgpYvgpJ86IOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSs4KSy4KSq4KWC4KSw4KWN4KS14KSVIOCkuOCkrOCliCDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWC4KSu4KS+IOCkuOCkvuCkr+CkpiDgpKjgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM1MDQxNzkyMjI0OTMyMzU2NDUiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkquCljeCksOCkteCkvuCkueCkruCkviDgpLLgpYfgpJbgpY3igI3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwODY1NTc1NTIyMDQxMTQ4NDkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkuOCkvuCkpeClgOCkueCksOClguCkrOCkvuCknyDgpLjgpL7gpK7gpL7gpJzgpL/gpJUg4KSF4KSq4KSh4KWH4KSf4KS54KSw4KWCIOCkquCljeCksOCkpuCksOCljeCktuCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqOClhyDgpKzgpYfgpLLgpL7gpK7gpL4g4KS54KWL4KS24KS/4KSv4KS+4KSwIOCksOCkueCkqOClgeCkueCli+CkuOCljSAtLSDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkqOCljeCkpuClh+CktuCkueCksOClgiDgpKjgpL/gpLDgpY3gpK7gpL7gpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJsg4KSc4KWB4KSoIOCkuOCkvuCkpeClgOCkrOCkvuCknyDgpIbgpI/gpJXgpYsg4KSm4KWH4KSW4KS/4KSo4KWN4KSb4KWkIOCkn+Ckv+CkquCljeCkquCko+ClgDog4KSv4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpLjgpKzgpYgg4KS44KS+4KSu4KS+4KSc4KS/4KSVIOCkuOCknuCljeCknOCkvuCksuCkueCksOClguCkruCkviDgpLLgpL7gpJfgpYIg4KSo4KS54KWB4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGVuZGFyIiBtc2dpZD0iNTk3MjcyNzU2MDI1NzYxMjM5OCI+IuCkl+Cli+CkquCljeCkryDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KSwIOCkquCkvuCkpOCljeCksOCliyDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MjE2NDYyMDQ5MDU3NjU4NzIzIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkguCkleCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkl+CksOCkv+Ckj+CkleCkviDgpKTgpYAg4KS44KS+4KSl4KWA4KS54KSw4KWCIOCkteCkviDgpLjgpLngpK/gpYvgpJfgpYDgpLngpLDgpYIg4KS44KS54KS/4KSk4KSV4KWLIOCkquCkvuCkpOCljeCksOCkvuCkleCkviDgpJXgpL7gpLDgpY3gpK/gpJXgpY3gpLDgpK7gpLngpLDgpYIg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkl+Cli+CkquCkqOClgOCkr+CkpOCkviDgpLXgpL4g4KS44KSC4KS14KWH4KSm4KSo4KS24KWA4KSy4KSk4KS+IOCkrOCkv+CkqOCkviDgpKrgpKjgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkguCkleCliyDgpKrgpL7gpKTgpY3gpLDgpL7gpJXgpL4g4KSh4KWH4KSf4KS+IOCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKgg4KS14KS+IOCkrOCkmuCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc0MzQ1NDg2ODI0NzA4NTE1ODMiPiLgpKTgpYAg4KS44KS+4KSl4KWA4KS54KSw4KWCIOCkteCkviDgpLjgpLngpJXgpLDgpY3gpK7gpYDgpLngpLDgpYLgpLjgpLngpL/gpKQg4KS44KSs4KWIIOCkquCkvuCkpOCljeCksOCliyDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkruCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSt4KSP4KSV4KS+4KSy4KS+4KSIIOCkquCkouCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkquCkvuCkpOCljeCksOCliyDgpKHgpYfgpJ/gpL4g4KSv4KS44KSy4KWHIOCkuOCkvuCkr+CkpiDgpLjgpYfgpK/gpLAg4KSX4KSw4KWN4KSoIOCkteCkviDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLXgpL/gpLbgpY3gpLXgpL7gpLjgpKjgpL/gpK/gpKTgpL4g4KS14KS+IOCkuOCkruCljeCkteClh+CkpuCkqOCktuClgOCksuCkpOCkviDgpKzgpL/gpKjgpL4g4KSo4KWIIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGVuZGFyIiBtc2dpZD0iODQzODg3NDc1NTE5MzgyNTY0NyI+IuCkquCkvuCkpOCljeCksOCliyDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KSl4KSq4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkteCkviDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpK7gpL7gpLLgpL/gpJXgpJXgpYsg4KSc4KWN4KSe4KS+4KSoIOCkrOCkv+CkqOCkviDgpKjgpYgg4KSq4KS+4KS54KWB4KSo4KS+4KS54KSw4KWC4KSy4KS+4KSIIOCkh+CkruClh+CksiDgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2Njc5MDM1NTIwMTEzNjY4NTI4Ij4i4KSk4KWAIOCkuOCkvuCkpeClgOCkueCksOClgiDgpLXgpL4g4KS44KS54KSV4KSw4KWN4KSu4KWA4KS54KSw4KWC4KS44KS54KS/4KSk4KSV4KS+IOCkmOCkn+CkqOCkvuCkueCksOClgiDgpJzgpLjgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkhuCkq+CljeCkqOCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpK7gpL4g4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSc4KWB4KSoIOCkquCkvuCkpOCljeCksOCkvuCkleCliyDgpK7gpL7gpLLgpL/gpJXgpLngpLDgpYLgpKzgpL7gpJ8g4KSG4KSP4KSV4KS+IOCkpuClh+CkluCkv+CkqOClh+CksuCkvuCkiCDgpKrgpKDgpL7gpIngpKjgpYcg4KS14KS+IOCkruCkvuCksuCkv+CkleCkueCksOClguCkleCliyDgpJzgpY3gpJ7gpL7gpKgg4KSs4KWH4KSX4KSwIOCkmOCkn+CkqOCkvuCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWHIOCkheCkqOClgeCkruCkv+CkpCDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+IuCkpOClgCDgpLjgpL7gpKXgpYDgpLngpLDgpYIg4KS14KS+IOCkuOCkueCkleCksOCljeCkruClgOCkueCksOClguCkuOCkueCkv+CkpCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KWL4KSo4KSV4KS+IOCkmOCkn+CkqOCkvuCkueCksOClgiDgpJzgpLjgpLLgpL7gpIgg4KSl4KSq4KWN4KSoLCDgpLngpJ/gpL7gpIngpKgg4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKggIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkquCkvuCkpOCljeCksOCliyDgpK7gpL7gpLLgpL/gpJXgpKzgpL7gpJ8g4KSm4KWH4KSW4KS+IOCkquCksOClh+CkleCkviDgpLXgpL4g4KSu4KS+4KSy4KS/4KSV4KSV4KWLIOCknOCljeCknuCkvuCkqCDgpKzgpL/gpKjgpL4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkreCkj+CkleCkviDgpJjgpJ/gpKjgpL7gpLngpLDgpYIg4KS44KSo4KWN4KSm4KWH4KS2IOCkquCkoOCkvuCkieCkqCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI4Njg4MzM0OTc0MDM2ODIzMzMwIj4i4KSq4KSw4KWA4KSV4KWN4KS34KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWCIOCkruCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI1ODA4NzExMDM5NDgyMDUxODI0Ij4i4KSq4KSw4KWA4KSV4KWN4KS34KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpK7gpJUg4KS44KWN4KSl4KS+4KSoIOCkuOCljeCksOCli+CkpOCkueCksOClgiDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkteCkviDgpKjgpK/gpL7gpIEg4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkr+CklSDgpLjgpY3gpKXgpL7gpKrgpKjgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KWN4KSl4KS+4KSo4KSu4KS+IOCkk+CkreCksOCksOCkvuCkh+CkoSDgpJfgpLDgpY3gpKbgpJsg4KSwL+CkteCkviDgpLjgpY3gpKXgpL/gpKTgpL8g4KSF4KSo4KWN4KSvIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpLngpLDgpYIg4KSc4KS44KWN4KSk4KWIIEdQUyDgpLXgpL4g4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkr+CkleCkrOCkvuCknyDgpKvgpLDgpY3gpJXgpL7gpIfgpI/gpJXgpL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjI4MzYzMDgwNzY3MjA1NTM4MzciPiLgpIXgpKfgpL/gpJUg4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkr+CklSDgpIbgpKbgpYfgpLbgpLngpLDgpYIg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiLgpKXgpKog4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkr+CklSDgpJXgpK7gpL7gpKPgpY3gpKHgpLngpLDgpYIg4KS44KSu4KWN4KSuIOCkquCkueClgeCkgeCkmiDgpKrgpYHgpLDgpY3igI3gpK/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KWHIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpL7gpK/gpKYg4KSc4KWA4KSq4KWA4KSP4KS44KSV4KWLIOCkteCkviDgpIXgpKjgpY3gpK8g4KS44KWN4KSl4KS+4KSoIOCkuOClh+CkteCkvuCkueCksOClguCkleCliyDgpJXgpL7gpLDgpY3gpK8g4KS44KSB4KSXIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkr+CkuOCksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjY1NzgxMDExOTk4MjUxOTM4NzMiPiLgpI/gpIngpJ/gpL4g4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkpuCkvuCkpOCkviDgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+IuCkquCksOClgOCkleCljeCkt+Cko+CkleCliyDgpLLgpL7gpJfgpL8g4KSu4KSVIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpLngpLDgpYIg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSo4KSv4KS+4KSBIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpK/gpJUg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCljeCkpeCkvuCkqOCkruCkviDgpJPgpK3gpLDgpLDgpL7gpIfgpKEg4KSX4KSw4KWN4KSm4KSbIOCksC/gpLXgpL4g4KS44KWN4KSl4KS/4KSk4KS/IOCkheCkqOCljeCkryDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWCIOCknOCkuOCljeCkpOCliCBHUFMg4KS14KS+IOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKbgpL7gpK/gpJXgpKzgpL7gpJ8g4KSr4KSw4KWN4KSV4KS+4KSH4KSP4KSV4KS+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSIxMTkxODk4MDYxOTY1MjczMzcyIj4i4KS44KSf4KS/4KSVIOCkuOCljeCkpeCkvuCkqCAoR1BTIOCksCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSG4KSn4KS+4KSw4KS/4KSkKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0ZpbmVMb2NhdGlvbiIgbXNnaWQ9IjUyOTUwNDc1NjM1NjQ5ODEyNTAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KS14KS/4KS24KWN4KS14KS14KWN4KSv4KS+4KSq4KWAIOCkuOCljeCkpeCkvuCkqCDgpKrgpY3gpLDgpKPgpL7gpLLgpYAgKEdQUykg4KS14KS+IOCkuOClh+CksiDgpJ/gpL7gpLXgpLDgpLngpLDgpYIg4KSwIOCkteCkvuCkhy3gpKvgpL7gpIcg4KSc4KS44KWN4KSk4KS+IOCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpY3gpKXgpL7gpKgg4KS44KWN4KSw4KWL4KSk4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCkueClgCDgpLjgpY3gpKXgpL7gpKgg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+ClgCDgpLjgpY3gpKXgpL7gpKgg4KS44KWH4KS14KS+4KS54KSw4KWCIOCkluCli+CksuCljeCkqOClgSDgpKrgpLDgpY3gpJsg4KSwIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCkviDgpLLgpL7gpJfgpL8g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkieCkquCksuCkrOCljeCkpyDgpLngpYHgpKjgpYEg4KSq4KSw4KWN4KSb4KWkIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKTgpKrgpL7gpIjgpIEg4KSV4KS54KS+4KSBIOCkueClgeCkqOClgSDgpLngpYHgpKjgpY3gpJsg4KSt4KSo4KWN4KSo4KWHIOCkqOCkv+CksOCljeCkp+CkvuCksOCkoyDgpJfgpLDgpY3gpKgg4KSv4KS44KSy4KS+4KSIIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSbIOCksCDgpK/gpLjgpLLgpYcg4KSF4KSk4KS/4KSw4KS/4KSV4KWN4KSkIOCkrOCljeCkr+CkvuCkn+CljeCksOCkvyDgpIngpLDgpY3gpJzgpL4g4KSW4KSk4KSqIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iNDg4Nzg5NTM2MjM1NDIzOTYyOCI+IuCkheCkqOClgeCkruCkvuCkqOCkv+CkpCDgpLjgpY3gpKXgpL7gpKggKOCkqOClh+Ckn+CkteCksOCljeCklS3gpIbgpKfgpL7gpLDgpL/gpKQpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSIyNTM4MjAwMTg0MzczMzAyMjk1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIXgpKjgpYHgpK7gpL7gpKjgpL/gpKQg4KS44KWN4KSl4KS+4KSoIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpYsg4KS44KWN4KSl4KS+4KSoIOCkuOClh+CksiDgpJ/gpL7gpLXgpLAg4KSwIOCkteCkvuCkhy3gpKvgpL7gpIfgpJzgpLjgpY3gpKTgpL4g4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCljeCkpeCkvuCkqCDgpLjgpY3gpLDgpYvgpKTgpLngpLDgpYLgpJXgpYsg4KSq4KWN4KSw4KWL4KSXIOCkl+CksOClgCDgpLjgpY3gpKXgpL7gpKgg4KS44KWH4KS14KS+4KS54KSw4KWC4KSs4KS+4KSfIOCkieCkpOCljeCkquCkqOCljeCkqCDgpJfgpLDgpL/gpI/gpJXgpYsg4KS54KWL4KWkIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpK/gpYAg4KS44KWN4KSl4KS+4KSoIOCkuOClh+CkteCkvuCkueCksOClguCkleCliyDgpIngpKrgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpK/gpYAg4KS44KWH4KS14KS+4KS54KSw4KWCIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSa4KS+4KSy4KWBIOCksCDgpIngpKrgpLLgpKzgpY3gpKcg4KS54KWB4KSo4KWBIOCkhuCkteCktuCljeCkr+CklSDgpJvgpaQg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkheCkqOClgeCkruCkvuCkqOCkv+CkpCDgpLDgpYLgpKrgpK7gpL4g4KSk4KSq4KS+4KSI4KSBIOCkleCkueCkvuCkgSDgpLngpYHgpKjgpYHgpLngpYHgpKjgpY3gpJsg4KSt4KSo4KWN4KSo4KWHIOCkqOCkv+CksOCljeCkp+CkvuCksOCkoyDgpJfgpLDgpY3gpKgg4KSv4KS44KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjIzNjM5Njk2NDE3OTIzODg5NDciPiJTdXJmYWNlRmxpbmdlciDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iU3VyZmFjZUZsaW5nZXIg4KSV4KSuLeCkuOCljeCkpOCksCDgpLjgpYHgpLXgpL/gpKfgpL7gpLngpLDgpYIg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuCkq+CljeCksOClh+CkriDgpKzgpKvgpLAg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKvgpY3gpLDgpYfgpK4g4KSs4KSr4KSw4KSV4KWLIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IklucHV0RmxpbmdlciDgpJXgpYsg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJJbnB1dEZsaW5nZXIg4KSV4KWLIOCkleCkri3gpLjgpY3gpKTgpLAg4KS44KWB4KS14KS/4KSn4KS+4KS54KSw4KWCIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IuCkteCkvuCkh+Ckq+CkvuCkhyDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKjgpLngpLDgpYLgpLLgpL7gpIgg4KS14KS/4KSo4KWN4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJXgpKjgpY3gpKvgpL/gpJfgpLAg4KSX4KSw4KWN4KSoIOCksCDgpLXgpL7gpIfgpKvgpL7gpIcg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSo4KS54KSw4KWC4KS44KSB4KSXIOCknOCli+CkoeCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSo4KS54KSw4KWCIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSI0NTQzOTEyMjkyNjgxODI2OTg2Ij4i4KS14KS+4KSH4KSr4KS+4KSHIOCkquCljeCksOCkpuCksOCljeCktuCkqOClgOCkleCkviDgpKTgpLLgpY3gpLLgpYsg4KSk4KS5IOCkteCkv+Ckt+Clh+CktuCkpOCkvuCkueCksOClgiDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2ODU3MTM0NDk4NDAyMzQ2NzA4Ij4i4KSF4KSh4KS/4KSv4KWLIOCkhuCkieCkn+CkquClgeCknyDgpJXgpYjgpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjIxMDU5Nzc1NDIxMjIwODg1MyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliOCkpiDgpJfgpLDgpY3gpKgg4KSwIOCksOCkv+CkoeCkvuCkh+CksOClh+CkleCljeCknyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMjI0NjgyODc3MzU4OTA5NDAyMyI+IuCkreCkv+CkoeCkv+Ckr+CliyDgpIbgpIngpJ/gpKrgpYHgpJ8g4KSV4KWI4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjM1OTQ4MTY1ODAzNDE0OTg2MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK3gpL/gpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliOCkpiDgpJfgpLDgpY3gpKgg4KSwIOCksOCkv+CkoeCkvuCkh+CksOClh+CkleCljeCknyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iNzgxNTM5ODk2OTMwMzM4MjAxNiI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpK3gpL/gpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliOCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlU2VjdXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIyNzc5NzkzMDY0NzA5MzUwMjg5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpK3gpL/gpKHgpL/gpK/gpYsg4KSG4KSJ4KSf4KSq4KWB4KSfIOCkleCliOCkpiDgpJfgpLDgpY3gpKgg4KSwIOCksOCkv+CkoeCkvuCkh+CksOClh+CkleCljeCknyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjYwOTU4NTk5MzcwNjkxNDYwODYiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KSF4KSh4KS/4KSv4KWLIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSX4KWN4KSy4KWL4KSs4KSyIOCkheCkoeCkv+Ckr+CliyDgpLjgpYfgpJ/gpL/gpJngpY3gpLngpLDgpYIg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbLCDgpJzgpLjgpY3gpKTgpYgg4KSG4KS14KS+4KSc4KSV4KWLIOCkruCkvuCkpOCljeCksOCkviDgpLAg4KSG4KSJ4KSf4KSq4KWB4KSf4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpYHgpKgg4KS44KWN4KSq4KS/4KSV4KSwIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKjgpYfgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY29yZEF1ZGlvIiBtc2dpZD0iMzg3NjA0OTc3MTQyNzQ2NjMyMyI+IuCkheCkoeCkv+Ckr+CliyDgpLDgpYfgpJXgpLDgpY3gpKEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkruCkvuCkh+CkleCljeCksOCli+Ckq+Cli+CkqOCkleCliyDgpLjgpL7gpKUg4KSF4KSh4KS/4KSv4KWLIOCksOClh+CkleCksOCljeCkoSDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpKrgpYHgpLfgpY3gpJ/gpL/gpJXgpLDgpKMg4KSs4KS/4KSo4KS+IOCkleClgeCkqOCliCDgpKrgpKjgpL8g4KS44KSu4KSv4KSu4KS+IOCkheCkoeCkv+Ckr+CliyDgpLDgpYfgpJXgpLDgpY3gpKEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLgpKTgpLjgpY3gpKzgpL/gpLDgpLngpLDgpYIg4KSwIOCkreCkv+CkoeCkv+Ckr+Cli+CkueCksOClgiDgpLLgpL/gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCljeCkr+CkvuCkruClh+CksOCkvuCkuOCkgeCklyDgpKTgpLjgpY3gpKzgpL/gpLAg4KSwIOCkreCkv+CkoeCkv+Ckr+Cli+CkueCksOClgiDgpLLgpL/gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSq4KWB4KS34KWN4KSf4KS/4KSV4KSw4KSjIOCkrOCkv+CkqOCkviDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkuOCkruCkr+CkruCkviDgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpY3gpLXgpYDgpJXgpYPgpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+IOCkquCljeCksOCkr+Cli+Ckl+CkruCkviDgpLngpYHgpIHgpKbgpL4g4KS44KWC4KSa4KSVIExFRCDgpKrgpY3gpLDgpLjgpL7gpLDgpKMg4KSF4KS44KSV4KWN4KS34KSuIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjQ3NjQ1ODU0NjU0ODAyOTUzNDEiPiLgpKrgpYLgpLDgpY3gpLUt4KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkquCljeCksOCko+CkvuCksuClgCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+IOCkieCkquCkr+Cli+CklyDgpLjgpYLgpJrgpJUgTEVEIOCkheCkleCljeCkt+CkriDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI5NjEyOTIyMDU3NjQ0ODgzMDQiPiLgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpIXgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgzMzc4MTcwOTMzMjYzNzA1MzciPiLgpKvgpYvgpKjgpLLgpL7gpIgg4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSo4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMzQ4MTg4MDgwMDE2OTk1MzAiPiLgpKrgpYHgpLDgpYgg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKrgpK7gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpYsg4KSo4KS/4KSV4KWIIOCkluCkpOCksOCkqOCkvuCklSDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3ODg5MDMyOTc2MjcyODMwOTkiPiLgpLjgpK7gpY3gpKrgpYLgpLDgpY3gpKMg4KSr4KWL4KSo4KSy4KS+4KSIIOCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKrgpK7gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpYsg4KSn4KWH4KSw4KWIIOCkluCkpOCksOCkqOCkvuCklSDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQzNjYzNDk3MjU2MTc5NTAwMiI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpKrgpYHgpKjgpIPgpKzgpYHgpJ8g4KSX4KSw4KWN4KSoIOCknOCli+CkoSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI4OTg1NjA4NzI0NjI2MzgyNDIiPiLgpKvgpYvgpKgg4KSq4KWB4KSo4KSD4KSs4KWB4KSfIOCkl+CksOCljeCkqOClgSDgpJzgpYvgpKEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MTcyMDU2MTgwMDYzNzAwNzQxIj4i4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkrOCksuCkquClguCksOCljeCkteCklSDgpKrgpYHgpKjgpIPgpKzgpYHgpJ8g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiLgpKvgpYvgpKjgpLLgpL7gpIgg4KSs4KSy4KSq4KWB4KSw4KWN4KS14KSVIOCkquClgeCkqOCkg+CkrOClgeCknyDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjI5MjczNjE1Mzc5NDI1OTE4NDEiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkq+CkvuCkh+CksiDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0MDIzMDUwNDk4OTA5NTM4MTAiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KSr4KS+4KSH4KSyIOCkquCljeCksOCko+CkvuCksuClgCDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgbXNnaWQ9IjE4MjkyOTA3MDE2NTg5OTIzNDciPiLgpLngpJ/gpL7gpIngpKgg4KSu4KS/4KSy4KWN4KSo4KWHIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSr4KS+4KSH4KSyIOCkquCljeCksOCko+CkvuCksuClgOCkueCksOClgiDgpK7gpL7gpIngpKjgpY3gpJ8g4KSwIOCkheCkqOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MjU4MjY5ODYzOTI3NDA1NiI+IlNEIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIG1zZ2lkPSI4Nzg0MjY4MjQ2Nzc5MTk4NjI3Ij4i4KS54KSf4KS+4KSJ4KSoIOCkruCkv+CksuCljeCkqOClhyDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSr4KSw4KWN4KSu4KWN4KSv4KS+4KSfIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzQxMTMzODYzMjAwMjE5Mzg0NiI+IuCkhuCkqOCljeCkpOCksOCkv+CklSDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KS44KWC4KSa4KSo4KS+IOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2FjY2VzcyIgbXNnaWQ9IjMwOTQ1NjM4NDQ1OTM4Nzg1NDgiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSu4KS+IOCkuOClguCkmuCkqOCkviDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2NyZWF0ZSIgbXNnaWQ9IjY0MTQ3NTcyMzQ3ODkzMzYzMjciPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkuOCkv+CksOCljeCknOCkqOCkviDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2NyZWF0ZSIgbXNnaWQ9IjQ1NTg4NjkyNzM1ODU4NTY4NzYiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkuOCkv+CksOCljeCknOCkqOCkviDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI1MjY5MjgzMjgzMDE2MTgwMjIiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkp+CljeCkteCkuOCljeCkpCDgpKrgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI3MjE4NzQ5Mjg2MTQ1NTI2NTM3Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkhuCkqOCljeCkpOCksOCkv+CklSDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSn4KWN4KS14KS44KWN4KSkIOCkquCkvuCksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSI4ODc3OTk4MTAxOTQ0OTk5Mzg2Ij4i4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCko+CksuCkvuCkiCDgpK7gpL7gpIngpKjgpY3gpJ8v4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9IjM0NTEzNjAxMTQ5MDI0OTA5MjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSG4KSo4KWN4KSk4KSw4KS/4KSVIOCkreCko+CljeCkoeCkvuCksOCkoyDgpK7gpL7gpIngpKjgpY3gpJ8v4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX3JlbmFtZSIgbXNnaWQ9Ijc0OTY2MzM5NTQwODA0NzI0MTciPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSV4KWLIOCkquClgeCkqDrgpKjgpL7gpK7gpL7gpJXgpLDgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19yZW5hbWUiIG1zZ2lkPSIxNzk0NzU3NTg4NDcyMTI3Njc1Ij4i4KSG4KSo4KWN4KSk4KSw4KWA4KSVIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpKrgpYHgpKjgpKjgpL7gpK7gpL7gpJXgpLDgpKMg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgpJXgpK7gpY3gpKrgpKgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkreCkvuCkh+CkrOCljeCksOClh+Ckn+CksCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4KSr4KWN4KSy4KWN4KSv4KS+4KS44KSy4KS+4KSI4KSfIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuCkq+CljeCksuCljeCkr+CkvuCkuCDgpKrgpY3gpLDgpJXgpL7gpLbgpLLgpL7gpIgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlVXNiIiBtc2dpZD0iMTExMzQ1MzQzMDY0NTQwMjcyMyI+IlVTQiDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkquCljeCksOCkvuCkpeCkruCkv+CkleCkpOCkvuCkueCksOClgiDgpLAg4KSF4KSo4KWB4KSu4KSk4KS/4KS54KSw4KWCIOCkquCljeCksOCkrOCkqOCljeCkpyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VVc2IiIG1zZ2lkPSI3Nzc2MTU1NDMwMjE4MjM5ODMzIj4iVVNCIOCkieCkquCkleCksOCko+CkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWN4KSw4KS+4KSl4KSu4KS/4KSV4KSk4KS+4KS54KSw4KWCIOCksCDgpIXgpKjgpYHgpK7gpKTgpL/gpLngpLDgpYLgpLLgpL7gpIgg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+4KSq4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc010cCIgbXNnaWQ9IjQ5NTM0Njg2NzY3OTU5MTcwNDIiPiJNVFAg4KSq4KWN4KSw4KWL4KSf4KWL4KSV4KSyIOCkleCkvuCksOCljeCkr+CkvuCkqOCljeCkteCkr+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNdHAiIG1zZ2lkPSI2NTMyOTYxMjAwNDg2NzkxNTcwIj4iTVRQIFVTQiDgpKrgpY3gpLDgpYvgpJ/gpYvgpJXgpLIg4KSV4KS+4KSw4KWN4KSv4KS+4KSo4KWN4KS14KSv4KSoIOCkl+CksOCljeCkqCDgpJXgpYfgpLDgpY3gpKjgpLIgTVRQIOCkoeCljeCksOCkvuCkh+CkreCksOCkleCliyDgpKrgpLngpYHgpIHgpJrgpJXgpYsg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjQxNDgyOTA4NjA0MDA2NTkxNDYiPiLgpLngpL7gpLDgpY3gpKHgpLXgpYfgpK/gpLAg4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI2NTk3OTY0MTkxMjA4MDE2NjA1Ij4i4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSwIOCkquCksOClgOCkleCljeCkt+Cko+CkleCliyDgpIngpKbgpY3gpKbgpYfgpLbgpY3gpK/gpJXgpL4g4KSy4KS+4KSX4KS/IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpKrgpLDgpL/gpKfgpYDgpK/gpLngpLDgpYLgpLLgpL7gpIgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuCkq+Cli+CkqCDgpKjgpK7gpY3gpKzgpLDgpLngpLDgpYLgpK7gpL4g4KS44KS/4KSn4KWIIOCkleCksiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpKzgpYfgpJfgpLDgpYgg4KSr4KWL4KSoIOCkqOCkruCljeCkrOCksCDgpJXgpLIg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpKrgpYfgpJXgpY3gpLfgpL/gpKQg4KS24KWB4KSy4KWN4KSVIOCkteCkviDgpJXgpLLgpLngpLDgpYIg4KSX4KSw4KS+4KSJ4KSoIOCkuOCkleCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpKjgpK7gpY3gpKzgpLDgpLngpLDgpYIg4KSV4KSyIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSB4KSm4KWI4KSoIOCkteCkv+CkmuCkvuCksCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkrOCkv+CkqOCkviDgpJXgpLLgpLngpLDgpYIg4KSX4KSw4KWH4KSwIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpKzgpKLgpYAg4KSq4KWI4KS44KS+IOCkpOCkv+CksOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iNDE5ODM0OTIxMTEwODQ5Nzg3OSI+IuCkleClgeCkqOCliCDgpKrgpKjgpL8g4KSr4KWL4KSoIOCkqOCkruCljeCkrOCksOCkueCksOClgiDgpLjgpL/gpKfgpYgg4KSV4KSyIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iMTY4OTAyNDkwMTUwOTk5NjgxMCI+IuCkleClgeCkqOCliCDgpKrgpKjgpL8g4KSr4KWL4KSoIOCkqOCkruCljeCkrOCksOCkruCkviwg4KSG4KSV4KS44KWN4KSu4KS/4KSVIOCkqOCkruCljeCkrOCksCDgpLjgpLngpL/gpKQsIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLngpLjgpY3gpKTgpJXgpY3gpLfgpYfgpKog4KSs4KS/4KSo4KS+IOCkleCksiDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkluCksOCkvuCkrCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpYcg4KSF4KSo4KS+4KS14KS24KWN4KSv4KSVIOCksCDgpJfgpYjgpLAg4KSV4KS+4KSo4KWB4KSo4KWAIOCkleCksuCkueCksOClguCksuCkvuCkiCDgpIbgpJXgpLjgpY3gpK7gpL/gpJXgpK7gpL4g4KS44KWN4KSl4KS+4KSo4KS+4KSo4KWN4KSk4KSw4KSjIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4iQ0RNQSDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KS44KWH4KSf4KSF4KSrIOCkuOCkv+Ckp+CliCDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2MDQ4NDgwOTUzMTU0MjE0MjUiPiJDRE1BIOCkq+Cli+CkqCDgpLjgpYfgpJ/gpIXgpKog4KS44KS/4KSn4KWIIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgbXNnaWQ9IjE5OTQxOTM1Mzg4MDIzMTQxODYiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIggQ0RNQSDgpKrgpY3gpLDgpL7gpLXgpKfgpL7gpKgg4KS44KWB4KSwdSDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkheCkqOCkvuCkteCktuCljeCkr+CklSDgpLDgpYLgpKrgpK7gpL4gQ0RNQSDgpKrgpY3gpLDgpL7gpLXgpKfgpL7gpKgg4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9Ijc3ODU0MDgyNTMzNjQzMzU3NDAiPiLgpLjgpY3gpKXgpL7gpKgg4KSF4KSq4KSh4KWH4KSfIOCkuOClguCkmuCkqOCkvuCkueCksOClgiDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iMTEyMDc0MTU1Nzg5MTQzODg3NiI+IuCksOClh+CkoeCkv+Ckr+Cli+CkrOCkvuCknyDgpLjgpY3gpKXgpL7gpKgg4KSF4KSm4KWN4KSv4KS+4KS14KSn4KS/4KSVIOCkuOClguCkmuCkqOCkvuCkueCksOClguCksuCkvuCkiCDgpLjgpJXgpY3gpLfgpK4v4KSF4KS44KSV4KWN4KS34KSuIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSs4KS+4KSfIOCkquCljeCksOCkr+Cli+CklyDgpKjgpLngpYHgpKjgpYfgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNzg1NTI1OTQ2MTI2ODczNDkxNCI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpLXgpL/gpLbgpYfgpLfgpKTgpL7gpLngpLDgpYIg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoZWNraW5Qcm9wZXJ0aWVzIiBtc2dpZD0iNDAyNDUyNjk2ODYzMDE5NDEyOCI+IuCkquCksOClgOCkleCljeCkt+CkoyDgpLjgpYfgpLXgpL7gpKbgpY3gpLXgpL7gpLDgpL4g4KS14KS/4KS24KWH4KS34KSk4KS+IOCkheCkquCksuCli+CkoSDgpK3gpI/gpJXgpYsg4KSq4KS54KWB4KSB4KSaIOCkquCkouCljeCkqC/gpLLgpYfgpJbgpY3igI3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KS44KS+4KSn4KS+4KSw4KSjIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEdhZGdldCIgbXNnaWQ9Ijc3NjkwNTMzOTAxNTg2MzQ3MSI+IuCkteCkv+CknOClh+Ckn+CkueCksOClguCkleCliyDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEdhZGdldCIgbXNnaWQ9IjgyNjEzMjY5Mzg1OTkwNDkyOTAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSy4KS+4KSIIOCkleClgeCkqCDgpLXgpL/gpJzgpYfgpJ8g4KSV4KWB4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkuOCkleCkv+CkqOCljeCkmyDgpK3gpKjgpYfgpLAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KS44KS54KS/4KSk4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuClhyDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KS+4KSIIOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCDgpKHgpYfgpJ/gpL7gpJXgpYsg4KSq4KS54KWB4KSB4KSaIOCkpuCkv+CkqCDgpLjgpJXgpY3gpKbgpJvgpaQg4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkueCli+Ckh+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9Ijg0MjM5MjM3Nzc2NTkyOTIyMjgiPiLgpKvgpYvgpKjgpJXgpYsg4KS44KWN4KSl4KS/4KSk4KS/IOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+IuCkieCkquCkleCksOCko+CkleCkviDgpKvgpYvgpKgg4KS14KS/4KS24KWH4KS34KSk4KS+4KS54KSw4KWC4KSy4KS+4KSIIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkICDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KWHIOCkj+CkieCkn+CkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCljeCkteCkv+CkmiDgpJfgpLDgpY3gpKgsIOCkq+Cli+CkqCDgpLDgpYfgpKHgpL/gpK/gpYsg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpLAg4KSW4KWL4KSy4KWN4KSoIOCksCDgpJzgpLjgpY3gpKTgpYgg4KSk4KSq4KS+4KSI4KSBIOCkuOCkp+CliCDgpLjgpYLgpJrgpL/gpKQg4KSo4KSX4KSw4KWAIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iOTE3ODIyODUyNDUwNzYxMDQ4NiI+IuCkq+Cli+CkqCDgpLjgpY3gpKXgpL/gpKTgpL8g4KSwIOCkquCkueCkv+CkmuCkvuCkqCDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjE2MzkyMTI3NzE4MjYxMjU1MjgiPiLgpIngpKrgpJXgpLDgpKPgpJXgpYsg4KSr4KWL4KSoIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClguCkleCliyDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuCDgpIXgpKjgpYHgpK7gpKTgpL/gpLLgpYcg4KSr4KWL4KSoIOCkqOCkruCljeCkrOCksCDgpLAg4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIElEcywg4KSV4KSyIOCkuOCkleCljeCkt+CkriDgpJsg4KSV4KS/IOCkm+CliOCkqCDgpLAg4KSV4KSy4KSm4KWN4KS14KS+4KSw4KS+IOCknOCli+CkoeCkv+Ckj+CkleCliyDgpJ/gpL7gpKLgpL7gpJXgpYsg4KSo4KSu4KWN4KSs4KSwIOCkqOCkv+CksOCljeCkp+CkvuCksOCkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MzE3MzE0MzUwMTE0OTUwMTUiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSo4KS/4KSo4KWN4KSm4KWN4KSw4KS+4KSu4KS+IOCknOCkvuCkqOCkrOCkvuCknyDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTczNDgwMTg3OTQxNDk2MTMwIj4i4KSr4KWL4KSo4KSy4KS+4KSIIOCkqOCkv+CkpuCkvuCkieCkqOCkrOCkvuCknyDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzMxMTMxOTgyNDQwMDQ0Nzg2OCI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpKjgpL/gpLjgpY3gpJXgpY3gpLDgpL/gpK8g4KS54KWB4KSo4KSs4KS+4KSfIOCksOCli+CkleCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg1NTkxMDA2NzczNzI5Mjg3NTQiPiLgpKvgpYvgpKjgpLLgpL7gpIgg4KSo4KS/4KS44KWN4KSV4KWN4KSw4KS/4KSvIOCkueClgeCkqOCkrOCkvuCknyDgpLDgpYvgpJXgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc4NzAzNDcyMjYxNjM1MDQxNyI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpKrgpL7gpLXgpLAg4KSW4KWL4KSy4KWN4KSoIOCksCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5Mjg2MjI0NzA5ODA5NDMyMDYiPiLgpKvgpYvgpKgg4KSW4KWL4KSy4KWN4KSoIOCkteCkviDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkieCksOCljeCknOCkviDgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2ODk4NjI4Nzg5ODQ2MzE4MzEiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSW4KWL4KSy4KWN4KSoIOCksCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2MDM3MDU3MzQ4NDYzMTMxMDMyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkq+Cli+CkqCDgpJbgpYvgpLLgpY3gpKgg4KSwIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmFjdG9yeVRlc3QiIG1zZ2lkPSIzNzE1MjI1NDkyNjk2NDE2MTg3Ij4i4KSr4KWN4KSv4KS+4KSV4KWN4KSf4KWN4KSw4KS/IOCkquCksOClgOCkleCljeCkt+CkoyDgpK7gpYvgpKHgpK7gpL4g4KSa4KS+4KSy4KWBIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZhY3RvcnlUZXN0IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTUyMDU5MzE4MzU5NjUzMDkxIj4i4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkueCkvuCksOCljeCkoeCkteClh+Ckr+CksOCksuCkvuCkiCDgpKrgpYHgpLDgpL4g4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqCDgpKbgpL/gpIHgpKbgpYgg4KSk4KSy4KWN4KSy4KWLIOCkuOCljeCkpOCksCDgpIngpKTgpY3gpKTgpY3gpKrgpL7gpKbgpJUg4KSq4KSw4KWA4KSV4KWN4KS34KSj4KSV4KWLIOCksOClguCkquCkruCkviDgpJrgpLLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkieCkpOCljeCkpOCljeCkquCkvuCkpuCklSDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSu4KWL4KSh4KSu4KS+IOCkmuCksuCkv+CksOCkueClh+CkleCliyDgpKzgpYfgpLLgpL4g4KSu4KS+4KSk4KWN4KSwIOCkieCkquCksuCkrOCljeCkpyDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxMzY2NDQ5OTAzMTkyNDQ4MDIiPiLgpKTgpLLgpY3gpLLgpYsg4KS44KWN4KSk4KSwIOCkieCkpOCljeCkpOCljeCkquCkvuCkpuCklSDgpJzgpLjgpY3gpKTgpYgg4KSa4KSy4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNLCDgpKrgpYHgpLDgpL4g4KSq4KS54KWB4KSB4KSaIOCkpuCkv+CkqCDgpKvgpYvgpKgg4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSw4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpLngpYHgpKjgpY3gpJvgpaQg4KSr4KWL4KSoIOCkieCkpOCljeCkquCkvuCkpuCklSDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSu4KWL4KSh4KSu4KS+IOCkmuCksuCkv+CksOCkueClh+CkleCliyDgpKzgpYfgpLLgpL4g4KSu4KS+4KSk4KWN4KSwIOCkieCkquCksuCkrOCljeCkpyDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlciIgbXNnaWQ9IjY2MjcxOTIzMzMzNzM0NjUxNDMiPiLgpLXgpL7gpLLgpKrgpYfgpKrgpLAg4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlciIgbXNnaWQ9IjczNzM0NDc5MjA5Nzc2MjQ3NDUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkteCkvuCksuCkquClh+CkquCksCDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iMzI3ODYwODE2NTk3NzczNjUzOCI+IuCkpOCkquCkvuCkiOCkguCkleCliyDgpLXgpL7gpLLgpKrgpYfgpKrgpLAg4KSG4KSV4KS+4KSwIOCkuOCkruCkvuCkr+Cli+CknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjgyMzU3ODQzODQyMjM3MzAwOTEiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KS14KS+4KSy4KSq4KWH4KSq4KSw4KSV4KWLIOCkhuCkleCkvuCksCDgpLjgpJngpY3gpJXgpYfgpKTgpLngpLDgpYIg4KSu4KS/4KSy4KS+4KSJ4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXN0ZXJDbGVhciIgbXNnaWQ9IjIzMTU3NTA0MjMxMzk2OTczOTciPiLgpJXgpL7gpLDgpY3gpK/gpLbgpL7gpLLgpL4g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hc3RlckNsZWFyIiBtc2dpZD0iMzY2NTM4MDQ5MjYzMzkxMDIyNiI+IuCkr+CkuOCkleCkviDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCLCDgpJXgpKjgpY3gpKvgpL/gpJfgpLDgpYfgpLjgpKgg4KSwIOCkuOCljeCkpeCkvuCkquCkv+CkpCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSu4KS+IOCkquClgeCksOCliCDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZSIgbXNnaWQ9IjIwMjE2MTQ4Mjk1OTE3NzU2NDYiPiLgpLjgpK7gpK8g4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE4OTYzNDE0MzgxNTExNTI4ODEiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpJXgpYsg4KSY4KSh4KWA4KSV4KWLIOCkuOCkruCkryDgpKzgpKbgpLLgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg1NTcwMjczMDczODAyMCI+IuCkq+Cli+CkqOCkleCliyDgpJjgpKHgpYDgpJXgpYsg4KS44KSu4KSvIOCkrOCkpuCksuCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0VGltZVpvbmUiIG1zZ2lkPSIyOTQ1MDc5ODAxMDEzMDc3MzQwIj4i4KS44KSu4KSvIOCkleCljeCkt+Clh+CkpOCljeCksCDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE2NzY5ODM3MTIzMTU4Mjc2NDUiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSV4KWLIOCkuOCkruCkryDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDk5OTQzNDg4NDM2NjMzMzk4Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkq+Cli+CkqOCkleCliyDgpLjgpK7gpK8g4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iNDgyOTI2MjM0OTY5MTM4Njk4NiI+IkFjY291bnRNYW5hZ2VyU2VydmljZSDgpJXgpYsg4KSw4KWC4KSq4KSu4KS+IOCkleCkvuCksOCljeCkryDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSIxOTQ4NDU1NTUyMzMzNjE1OTU0Ij4i4KSW4KS+4KSk4KS+IOCkheCkp+Ckv+CkleCkvuCksOClgOCkueCksOClguCksuCkvuCkiCDgpJXgpLIg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0QWNjb3VudHMiIG1zZ2lkPSIxMDg2Nzk1NDY3NzYwMTIyMTE0Ij4i4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkluCkvuCkpOCkvuCkueCksOClgiDgpK3gpYfgpJ/gpY3gpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc0MTQ5NjUzNDc2OTY2MDAyNyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpKbgpY3gpLXgpL7gpLDgpL4g4KSc4KWN4KSe4KS+4KSkIOCkluCkvuCkpOCkvuCkueCksOClguCkleCliyDgpLjgpYLgpJrgpYAg4KSq4KS+4KSJ4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkpuCljeCkteCkvuCksOCkviDgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkl+CksOCljeCkqOClgeCkreCkj+CkleCliyDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkluCkvuCkpOCkvuCkueCksOClgiDgpLjgpK7gpL7gpLXgpYfgpLYg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ0ODMxNjgyMjQ1MTgwNzM4MiI+IuCkq+Cli+CkqOCksuCkvuCkiCDgpKXgpL7gpLngpL4g4KSt4KSP4KSV4KS+IOCkluCkvuCkpOCkvuCkueCksOClguCkleCliyDgpLjgpYLgpJrgpYAg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkuOCljeCkpeCkvuCkquCkqOCkviDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkrOCkvuCknyDgpLjgpYPgpJzgpL/gpKQg4KSV4KWB4KSo4KWIIOCkluCkvuCkpOCkvuCkueCksOClgiDgpLjgpK7gpL7gpLXgpYfgpLYg4KS54KWB4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1MjY1OTA4NDgxMTcyNzM2OTMzIj4i4KSW4KS+4KSk4KS+IOCkuOCkv+CksOCljeCknOCkqOCkviDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KSwIOCkquCkvuCkuOCkteCksOCljeCkoSDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1NDcyMTI0Mjk2OTA4OTc3MjYwIj4i4KSW4KS+4KSk4KS+4KS54KSw4KWC4KSV4KWLIOCkuOCkv+CksOCljeCknOCkqOCkviDgpJfgpLDgpY3gpKjgpYcg4KSwIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKjgpYcg4KSwIOCkieCkqOClgOCkueCksOClguCkleCliyDgpKrgpL7gpLjgpLXgpLDgpY3gpKHgpLngpLDgpYLgpJXgpYsg4KS44KWH4KSf4KS/4KSZIOCkl+CksOCljeCkqOClhyDgpLjgpLngpL/gpKQg4KSW4KS+4KSk4KS+IOCkquCljeCksOCkrOCkqOCljeCkp+CkleCkleCliyDgpJbgpL7gpKTgpL4g4KSG4KSn4KS/4KSV4KS+4KSw4KWAIOCkuOCkleCljeCkt+CkruCkpOCkvuCkueCksOClgiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9IjQ5ODMxMjYzMDQ3NTcxNzczMDUiPiLgpJbgpL7gpKTgpL7gpLngpLDgpYIg4KSl4KSq4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkteCkviDgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9Ijg2OTgyOTU2MjU0ODgyOTI1MDYiPiLgpJbgpL7gpKTgpL7gpLngpLDgpYIg4KSl4KSq4KWN4KSo4KWHIOCksCDgpLngpJ/gpL7gpIngpKjgpYcg4KSc4KS44KWN4KSk4KS+IOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCkueCksOClgiDgpLjgpK7gpY3gpKrgpKjgpY3gpKgg4KSX4KSw4KWN4KSoLCDgpLAg4KSJ4KSo4KWA4KS54KSw4KWC4KSV4KWLIOCkquCkvuCkuOCkteCksOCljeCkoSDgpK7gpYfgpJ/gpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iMjM1NDgxMzk2MTYzODc3NjQyIj4i4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkluCkvuCkpOCkvuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSI3OTg0MjI3MTQ3NDAzMzQ2NDIyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkquCljeCksOCkruCkvuCko+ClgOCkleCksOCkoyDgpJ/gpYvgpJXgpKjgpLngpLDgpYIg4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCknOCkoeCkvuCkqOCkueCksOClgiDgpLngpYfgpLDgpY3gpKjgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI4MzE4OTY0NDI0Njc1OTYwOTc1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJzgpKHgpL7gpKjgpLngpLDgpYIg4KSc4KS44KWN4KSk4KWIIOCkleClgeCkqCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpLngpLDgpYIg4KSF4KS14KS44KWN4KSl4KS/4KSkIOCkueClgeCkqOCljeCkm+CkqOCljSDgpLAg4KSc4KSh4KS/4KSkIOCkm+CkqOCljSDgpJzgpLjgpLLgpYcg4KS54KWH4KSw4KWN4KSo4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iODAxODc1ODEzNjQwNDMyMzY1OCI+IuCkquClguCksOCljeCkoyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KS54KWB4KSB4KSaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSIzNDAzMDYyMTg3Nzc5NzI0MTg1Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOCkleClh+Ckn+CkueCksOClgiDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSoIOCksCDgpJXgpLjgpY3gpJ/gpK4g4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCljeCksOCli+Ckn+Cli+CkleCksiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkrOCljeCksOCkvuCkieCknOCksCDgpLAg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpIfgpKjgpY3gpJ/gpLDgpKjgpYfgpJ/gpK7gpL4g4KSh4KWH4KSf4KS+IOCkquCkoOCkvuCkieCkqOClhyDgpK7gpL7gpKfgpY3gpK/gpK4g4KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkm+CkqOCljSwg4KSk4KWN4KSv4KS44KWI4KSy4KWHIOCkh+CkqOCljeCkn+CksOCkqOClh+Ckn+CkruCkviDgpKHgpYfgpJ/gpL4g4KSq4KSg4KS+4KSJ4KSoIOCkr+CliyDgpIXgpKjgpYHgpK7gpKTgpL/gpJXgpYsg4KSG4KS14KS24KWN4KSv4KSV4KSk4KS+IOCkquCksOCljeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUwNTY2MDE1OTY3NTc1MTg5NiI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSwIOCkn+CljeCksOCkvuCkq+Ckv+CklSDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIC8g4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUzMzM3OTg4ODY0MTI3MTQxOTMiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCksCDgpLjgpKzgpYgg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkn+CljeCksOCkvuCkq+Ckv+CklSDgpLDgpYvgpJXgpY3gpKgg4KSwIOCkquCksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmywg4KSJ4KSm4KS+4KS54KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IEFQTiDgpJXgpYsg4KSq4KWN4KSw4KWL4KSV4KWN4KS44KWAIOCksCDgpKrgpYvgpLDgpY3gpJ8g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClpCDgpJbgpLDgpL7gpKwg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkguCkleCliyDgpJzgpY3gpJ7gpL7gpKgg4KSs4KS/4KSo4KS+IOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpY3gpK/gpL7gpJXgpYfgpJ/gpLngpLDgpYIg4KSu4KWL4KSo4KS/4KSf4KSwIOCkl+CksOCljeCkqCwg4KSq4KWB4KSoOuCkqOCkv+CksOCljeCkpuClh+CktuCkv+CkpCDgpJfgpLDgpY3gpKgsIOCkteCkviDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iOTU4ODg0MjkxNDU0MzI3MzA5Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCknOCkoeCkvuCkqCDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSc4KSh4KS+4KSo4KSV4KWLIOCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iNTk1MjU4NDk2NDM3MzAxNzk2MCI+IuCkn+Clh+CkpeCksOCljeCkoSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSc4KSh4KS+4KSoIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjE1MjQ0NDEzNDQ0MTIzMTk3ODAiPiLgpJ/gpL/gpKXgpLAg4KSX4KSw4KWH4KSV4KWLIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJzgpKHgpL7gpKjgpJXgpYsg4KS44KWN4KSl4KS/4KSk4KS/IOCkrOCkpuCksuCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iMTQwMDY2NjAxMjY3MTY0ODc0MSI+IuCkquClg+Ckt+CljeCkoOCkreClguCkruCkvyDgpKHgpYfgpJ/gpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iNTM0NzcyOTU3ODQ2ODc0NDM3OSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSh4KWH4KSf4KS+IOCkieCkquCkr+Cli+CklyDgpLjgpYfgpJ/gpL/gpJkg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MjAyMDEyOTQ5MjQ3MDQwMDExIj4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpJzgpKHgpL7gpKjgpLngpLDgpYIg4KS54KWH4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTAwMjc5ODA3NzM4NzgwMzcyNiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLXgpL7gpIct4KSr4KS+4KSHIOCkqOClh+Ckn+CkteCksOCljeCkleCkleCliyDgpKzgpL7gpLDgpYfgpK7gpL4g4KSc4KS+4KSo4KSV4KS+4KSw4KWAIOCkueClh+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSbLCDgpJzgpLjgpY3gpKTgpYgg4KSV4KS/IOCkteCkvuCkhy3gpKvgpL7gpIcg4KS44KSV4KWN4KS34KSuIOCkmyDgpJXgpL8g4KSb4KWI4KSoIOCksCDgpJzgpKHgpL7gpKgg4KSX4KSw4KS/4KSP4KSV4KWLIOCkteCkvuCkhy3gpKvgpL7gpIcg4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KSV4KWLIOCkqOCkvuCkruClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNjU1MDY0MTE4ODc0OTEyODAzNSI+IuCkteCkvuCkhy3gpKvgpL7gpIfgpLjgpIHgpJcg4KSc4KWL4KSh4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkteCkviDgpJvgpYHgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI3MTM3OTUwMjk3Mzg2MTI3NTMzIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkteCkvuCkhy3gpKvgpL7gpIcg4KSq4KS54KWB4KSB4KSaIOCkrOCkv+CkqOCljeCkpuClgeCkrOCkvuCknyDgpJzgpKHgpL7gpKgg4KSX4KSw4KWN4KSoIOCksCDgpLXgpL/gpJrgpY3gpJvgpYfgpKbgpKgg4KSX4KSw4KWN4KSoIOCksCDgpLXgpL7gpIct4KSr4KS+4KSHIOCkqOClh+Ckn+CkteCksOCljeCkleCkueCksOClguCkleCliyDgpLLgpL7gpJfgpL8g4KSJ4KSq4KSV4KSw4KSjIOCkleCkqOCljeCkq+Ckv+Ckl+CksOClh+CkuOCkqOCkruCkviDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKjgpLngpLDgpYIg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgbXNnaWQ9IjEzNjgyNTM4NzE0ODMyNTQ3ODQiPiLgpLXgpL7gpIct4KSr4KS+4KSHIE11bHRpY2FzdCDgpLjgpY3gpLXgpL/gpJXgpYPgpKTgpL/gpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzk2OTc3NDAyMTI1NjMzNjU0OCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpK7gpLLgpY3gpJ/gpL/gpJXgpL7gpLfgpY3gpJ8g4KSg4KWH4KSX4KS+4KSo4KS+4KS54KSw4KWCIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAg4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpK7gpL4g4KSq4KSg4KS+4KSH4KSP4KSV4KWLIOCkquCljeCkr+CkvuCkleClh+Ckn+CkueCksOClgiDgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJssIOCkleClh+CkteCksiDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkruCkvuCkpOCljeCksCDgpLngpYvgpIfgpKjgpaQg4KSv4KS44KSy4KWHIOCkl+CliOCksC3gpK7gpLLgpY3gpJ/gpL/gpJXgpL7gpLfgpY3gpJ8g4KSu4KWL4KShIOCkreCkqOCljeCkpuCkviDgpKzgpKLgpYAg4KSJ4KSw4KWN4KSc4KS+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUxOTQ5NzA2MDI1MzQ5OTI2Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkq+Cli+CkqCDgpK7gpL7gpKTgpY3gpLAg4KS54KWL4KSH4KSoLCDgpK7gpLLgpY3gpJ/gpL/gpJXgpL7gpLjgpY3gpJ8g4KSg4KWH4KSX4KS+4KSo4KS+4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYcg4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpJXgpL4g4KS44KSs4KWIIOCkieCkquCkleCksOCko+CkueCksOClguCkruCkviDgpKrgpKDgpL7gpIfgpI/gpJXgpL4g4KSq4KWN4KSv4KS+4KSV4KWH4KSf4KS54KSw4KWCIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkl+CliOCksC3gpK7gpLLgpY3gpJ/gpL/gpJXgpL7gpLjgpY3gpJ8g4KSu4KWL4KSh4KSt4KSo4KWN4KSm4KS+IOCkrOCkouClgCDgpIngpLDgpY3gpJzgpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmx1ZXRvb3RoQWRtaW4iIG1zZ2lkPSI2MDA2OTY3MzczOTM1OTI2NjU5Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClguCkruCkviDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY5MjExNzc0NzE3NDg4ODIxMzciPiLgpLjgpY3gpKXgpL7gpKjgpYDgpK8g4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpJXgpKjgpY3gpKvgpL/gpJfgpLAg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLAg4KSf4KS+4KSi4KS+4KSV4KS+IOCkieCkquCkleCksOCko+CkueCksOClguCksuCkvuCkiCDgpKrgpKTgpY3gpKTgpL4g4KSy4KSX4KS+4KSJ4KSoIOCksCDgpJzgpYvgpKHgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTMxNjgyMTU5MzMxNTQyMTM3Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCljeCkpeCkvuCkqOClgOCkryDgpKzgpY3gpLLgpYHgpJ/gpYHgpKUg4KSr4KWL4KSoIOCkleCkqOCljeCkq+Ckv+Ckl+CksCDgpJfgpLDgpY3gpKgg4KSwIOCkn+CkvuCkouCkvuCkleCkviDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLjgpIHgpJcg4KSW4KWL4KScIOCkl+CksOCljeCkqCDgpLAg4KSc4KWL4KSh4KWAIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNDE5NTkwNzAxMDYxMDIwNTcwMyI+IldpTUFY4KS44KSB4KSXIOCknOCli+CkoeCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSb4KWB4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjYzNjAxMDI4NzcyNjE5Nzg4ODciPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS14KS+4KSH4KSu4KWN4KSv4KS+4KSV4KWN4KS4IOCkuOCkleCljeCkt+CkriDgpJsg4KSV4KS/IOCkm+CliOCkqCDgpLAg4KSc4KSh4KS+4KSoIOCkreCkj+CkleCliyDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkteCkvuCkh+CkruCljeCkr+CkvuCkleCljeCkuCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpLngpLDgpYLgpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IOCknOCkvuCkqOCkleCkvuCksOClgCDgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpbWF4U3RhdGUiIG1zZ2lkPSIyNDA1MDQyMjY3MTMxNDk2NTc5Ij4i4KS14KS+4KSH4KSu4KWN4KSv4KS+4KSV4KWN4KS4IOCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpLDgpL/gpLXgpLDgpY3gpKTgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzE1NjQ1NjUwNDA4NDIwMTgwNSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpJXgpY3gpLgg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWC4KSs4KS+4KSfIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpJzgpKHgpL7gpKgg4KSX4KSw4KWN4KSoIOCksCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KS14KS/4KSa4KWN4KSb4KWH4KSm4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NzAyNTA0MzAwNDkyMzc5OCI+IuCkteCkvuCkh+CkruCljeCkr+CkvuCkleCljeCkuCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpLngpLDgpYLgpLjgpIHgpJcg4KSr4KWL4KSoIOCknOCli+CkoeCljeCkqCDgpLAg4KSb4KWB4KSf4KS+4KSJ4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGgiIG1zZ2lkPSI2MTI3NzY5MzM2MzM5Mjc2ODI4Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkieCkquCkleCksOCko+CkueCksOClguCkuOCkgeCklyDgpJzgpYvgpKHgpYAg4KSu4KS/4KSy4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDgwNzIyMTgxODUyNDM4NjI4Ij4i4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkrOCljeCksuClgeCkn+ClgeCkpeCkleCliyDgpJXgpKjgpY3gpKvgpL/gpJfgpYHgpLDgpYfgpLjgpKjgpLLgpL7gpIgg4KS54KWH4KSw4KWN4KSoIOCksCDgpKzgpKjgpL7gpIngpKgg4KSwIOCknOCli+CkoeClgCDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLjgpIHgpJcg4KSc4KSh4KS+4KSo4KS54KSw4KWC4KSy4KS+4KSIIOCkuOCljeCkteClgOCkleCkvuCksCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMjA3MTA2MzI0NDUyMzEyNzM5Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkq+Cli+CkqOCkruCkviDgpKzgpY3gpLLgpYHgpJ/gpYHgpKXgpJXgpYsg4KSV4KSo4KWN4KSr4KS/4KSX4KSw4KWH4KS44KSoIOCkueClh+CksOCljeCkqCDgpLAg4KSc4KWL4KSh4KWAIOCkreCkj+CkleCkviDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLjgpIHgpJcg4KSc4KSh4KS+4KSo4KS54KSw4KWCIOCkrOCkqOCkvuCkieCkqCDgpLAg4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9uZmMiIG1zZ2lkPSI0NDIzMzUxMjc0NzU3ODc2OTUzIj4i4KSo4KSc4KS/4KSVIOCkleCljeCkt+Clh+CkpOCljeCksCDgpLjgpILgpJrgpL7gpLAg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSj4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbmZjIiBtc2dpZD0iNzEyMDYxMTgxOTQwMTc4OTkwNyI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKjgpK/gpL7gpIEg4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkuOCkguCkmuCkvuCksCAoTkZDKSDgpJ/gpY3gpK/gpL7gpJfgpLngpLDgpYIsIOCkleCkvuCksOCljeCkoeCkueCksOClgiDgpLAg4KSq4KS+4KSg4KSV4KS54KSw4KWC4KS44KSB4KSXIOCkheCkqOCljeCkpOCksOCljeCkleCljeCksOCkv+Ckr+CkviDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iMzU5ODQ5NjMwMTQ4NjQzOTI1OCI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpLLgpJUg4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjYwMzQyMDMwNjUwNzcxMjI5OTIiPiLgpJXgpYHgpKjgpYgg4KS44KSu4KWN4KSs4KSo4KWN4KSn4KS/4KSkIOCkquCkvuCkuOCkteCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL4g4KSwIOCkleCkv+CksuCkleCksuCkvuCkiCDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkieCkpuCkvuCkueCksOCko+CkleCliyDgpLLgpL7gpJfgpL8sIOCkheCkqOCljeCkpOCksOCljeCkl+CkruCkqCDgpKvgpYvgpKgg4KSV4KSyIOCkquCljeCksOCkvuCkquCljeCkpCDgpJfgpLDgpY3gpKbgpL4g4KSr4KWL4KSo4KSy4KWHIOCkleCkv+CksuCkleCksuCkvuCkiCDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSbLCDgpKTgpY3gpK/gpLjgpKrgpJvgpL8g4KSV4KSyIOCkuOCkleCkv+Ckj+CkleCliyDgpKzgpYfgpLLgpL4g4KSV4KS/4KSy4KSVIOCkquClgeCkqOCkg+CkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSI2MjAxODEwMDA4MjMwNTAzMDUyIj4i4KS44KSu4KWA4KSV4KSw4KSjIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iMjcwNjc0NTY3NDU2OTY3ODY0NCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJbgpL7gpKTgpL7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOCkv+CkmeCljeCklSDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSJ4KSm4KS+4KS54KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpK/gpLjgpLLgpYcg4KS14KWN4KSv4KSV4KWN4KSk4KS/4KS54KSw4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpJbgpL7gpKTgpL7gpLjgpIHgpJcg4KS44KS/4KSZ4KWN4KSVIOCkreCkj+CkleCliyDgpKjgpK3gpI/gpJXgpYsg4KSo4KS/4KSw4KWN4KSn4KS+4KSw4KSjIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpKbgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU3luY1NldHRpbmdzIiBtc2dpZD0iNTQwODY5NDg3NTc5Mzk0NTMxNCI+IuCkn+Ckl+CksiDgpLjgpL/gpJngpY3gpJUg4KSW4KWB4KSy4KS+IOCksCDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9Ijg5NTYyNjI1OTEzMDYzNjk4NjgiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSW4KS+4KSk4KS+4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpL/gpJngpY3gpJUg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpIngpKbgpL7gpLngpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/LCDgpK/gpYsg4KSW4KS+4KSk4KS+4KS44KSB4KSXIOCkteCljeCkr+CkleCljeCkpOCkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KS44KS/4KSZ4KWN4KSVIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSI3Mzk2NTc3NDUxMzYwMjAyNDQ4Ij4i4KS44KS/4KSZ4KWN4KSVIOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU3luY1N0YXRzIiBtc2dpZD0iMTUxMDE0Mzc2MTc1NzYwNjE1NiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJbgpL7gpKTgpL7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkuOCkruClgOCkleCksOCko+CkleCliyDgpIbgpIHgpJXgpKHgpL4g4KS44KSu4KWA4KSV4KSw4KSjIOCkmOCkn+CkqOCkvuCkueCksOClguCkleCliyAg4KSH4KSk4KS/4KS54KS+4KS4IOCksCDgpLjgpK7gpYDgpJXgpLDgpKMg4KSX4KSw4KS/4KSP4KSV4KWLIOCkoeClh+Ckn+CkvuCkleCliyDgpK7gpL7gpKrgpKgg4KS44KSu4KWH4KSkLCDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjQ3NTY2MDk2MzcwNTMzNTMzMTgiPiLgpLjgpKbgpLjgpY3gpK8g4KSs4KSo4KS+4KSH4KSV4KS+IOCkq+Ckv+CkoeCkueCksOClgiDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNTU1NzA1ODkwNzkwNjE0NDUwNSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpLngpL/gpLLgpYfgpJXgpYsg4KS44KSu4KWA4KSV4KSw4KSjIOCkl+CksOCkv+Ckj+CkleCkviDgpLjgpYLgpJrgpJXgpLngpLDgpYIg4KSs4KS+4KSw4KWHIOCkteCkv+CkteCksOCko+CkueCksOClgiDgpLLgpL/gpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI5MDE1MjQ2MzI1NDA4MjA5Mjk2Ij4i4KS44KSm4KS44KWN4KSvIOCkrOCkqOCkvuCkh+CkleCkviDgpKvgpL/gpKHgpLngpLDgpYIg4KSy4KWH4KSW4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI2OTI4OTMwMTg4ODI2MDg5NDEzIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KS+IOCkreCksOCljeCkluCksOCliCDgpLjgpL/gpJngpY3gpJUg4KSr4KS/4KSh4KS54KSw4KWC4KSy4KS+4KSIIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpLjgpL/gpJngpY3gpJUg4KSr4KS/4KSh4KS54KSw4KWC4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkr+CkuOCksuClhyAg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI0MTA3MTAxNTI1NzQ2MDM1NzE4Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCktuCkrOCljeCkpuCkleCli+CktuCkruCkviDgpKXgpKrgpYfgpJXgpL4g4KS24KSs4KWN4KSm4KS54KSw4KWCIOCkquCkouCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWREaWN0aW9uYXJ5IiBtc2dpZD0iNjU5NjE0NjAwMzM4OTA0MjQzIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCksuClhyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KS24KSs4KWN4KSm4KSV4KWL4KS24KSu4KS+IOCkreCko+CljeCkoeCkvuCksOCkoyDgpJfgpLDgpYfgpJXgpL4g4KS54KWB4KSoIOCkuOCkleCljeCkqOClhyDgpLjgpKzgpYgg4KS24KSs4KWN4KSm4KS54KSw4KWCLCDgpKjgpL7gpK7gpLngpLDgpYIg4KSwIOCkquCkpuCkvuCkteCksuClgOCkueCksOClgiDgpKrgpKLgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iMjE4MzExMDQwMjMxNDQ0MTEwNiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvi3gpKrgpLDgpL/gpK3gpL7gpLfgpL/gpKQg4KS24KSs4KWN4KSm4KSV4KWL4KS24KSu4KS+IOCktuCkrOCljeCkpuCkueCksOClgiDgpKXgpKrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MTg1Mzg1NzE2MjU1MDY1MjkxIj4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCktuCkrOCljeCkpuCkleCli+CktuCkruCkviDgpKjgpK/gpL7gpIEg4KS24KSs4KWN4KSmIOCksuClh+CkluCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkl+CksOCkv+Ckj+CkleCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSq4KS54KWB4KSB4KSa4KSV4KWLIOCkquCksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkl+CksOCkv+Ckj+CkleCkviDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSq4KS54KWB4KSB4KSa4KSV4KWLIOCkquCksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM2NDI0NzMyOTIzNDgxMzIwNzIiPiLgpK3gpLXgpL/gpLfgpY3gpK8g4KSJ4KSq4KSV4KSw4KSj4KS54KSw4KWC4KSu4KS+IOCkieCkquCksuCkrOCljeCkpyDgpLngpYHgpKjgpYcgVVNCIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSu4KSk4KS/IOCkquCksOClgOCkleCljeCkt+CkoyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTkxNDQwMjY4NDY4NTg0ODgyOCI+IuCkreCkteCkv+Ckt+CljeCkryDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpK7gpL4g4KSJ4KSq4KSy4KSs4KWN4KSnIOCkueClgeCkqOClhyBTRCDgpJXgpL7gpLDgpY3gpKHgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkruCkpOCkvyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4NDg1OTc5MDYyMjU0NjY2NzQ4Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWB4KS54KSw4KWC4KSy4KS+4KSIIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4ODA1NjkzNjMwMDUwNDU4NzYzIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIFNEIOCkleCkvuCksOCljeCkoeCkleCliyDgpLXgpL/gpLfgpK/gpLjgpYLgpJrgpYAg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpK7gpL4g4KSy4KWH4KSW4KWN4oCN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDMzNzQxNzc5MDkzNjYzMjA5MCI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCBTRCDgpJXgpL7gpLDgpY3gpKHgpK7gpL4g4KSy4KWH4KSW4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1OTgzOTE5OTcwNjg3OTAxNSI+IuCkhuCkqOCljeCkpOCksOCkv+CklSDgpK7gpL/gpKHgpL/gpK/gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkuOCkvuCkruCkl+CljeCksOClgOCkueCksOClgiDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNL+CkruClh+Ckn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODE4OTE2MDU5NzY5ODUyOTE4NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSu4KS/4KSh4KS/4KSv4KS+IOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpLjgpL7gpK7gpJfgpY3gpLDgpYDgpLngpLDgpYIg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3ODMxODU5ODQ0ODg0OTgyOSI+IuCkleCkvuCkl+CknOCkvuCkpCDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURvY3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NzA0MzIzMTc2OTE0MTIxNDg0Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCkvuCkl+CknOCkvuCkpCDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KS44KSu4KS+4KSv4KWL4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSI4MTUwNjEzODIzOTAwNDYwNTc2Ij4i4KS44KSs4KWIIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkueCksOClguCkleCliyDgpKzgpL7gpLngpY3gpK8g4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSV4KWLIOCkquCkueClgeCkgeCkmiDgpLDgpL7gpJbgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSIzMjE1MjA4MzU3NDE1ODkxMzIwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkrOCliCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkrOCkvuCkueCljeCkryDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpK7gpL7gpKXgpL8g4KSq4KS54KWB4KSB4KSaIOCksOCkvuCkluCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTY1NjQ4NzI2NDgxOTY2OTgyNCI+IuCkleCljeCkr+CkvuCkuCDgpKvgpL7gpIfgpLIg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWNoZV9maWxlc3lzdGVtIiBtc2dpZD0iNTU3ODk2NzY0MjI2NTU1MDk1NSI+IuCkleClh+CkuCDgpKvgpL7gpIfgpLIg4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSy4KS+4KSIIOCkquCkouCljeCkqCDgpLAg4KSy4KWH4KSW4KWN4oCN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlX3NpcCIgbXNnaWQ9IjU5ODY5NTIzNjI3OTU4NzA1MDIiPiLgpIfgpKjgpY3gpJ/gpLDgpKjgpYfgpJ8g4KSV4KSy4KS54KSw4KWCIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLXgpL4g4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZV9zaXAiIG1zZ2lkPSI0NzE3NjMyMDAwMDYyNjc0Mjk0Ij4i4KSH4KSo4KWN4KSf4KSw4KSo4KWH4KSfIOCkleCksiDgpJfgpLDgpY3gpKgv4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCBTSVAg4KS44KWH4KS14KS+4KSy4KS+4KSIIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc4NjI1OTMyODM2MTE0OTMyMzIiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSX4KSV4KWLIOCkh+CkpOCkv+CkueCkvuCkuCDgpKrgpKLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc2ODkwNjA3NDk4MTkxMjY0NzIiPiLgpKjgpL/gpLbgpY3gpJrgpL/gpKQg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWCIOCksCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkkOCkpOCkv+CkueCkvuCkuOCkv+CklSDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkquCkouCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSIyNTYyMDUzNTkyMzM5ODU5OTkwIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkqOClgOCkpOCkvyDgpKrgpY3gpLDgpKzgpKjgpY3gpKcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9Ijc1Mzc1ODY3NzE1NTkzNzA2NjgiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSo4KWA4KSk4KS/4KS54KSw4KWCIOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkqCDgpJfgpLDgpY3gpKgg4KSwIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckly3gpLXgpL/gpLbgpYfgpLcg4KSo4KS/4KSv4KSu4KS54KSw4KWCIOCkquCksOCkv+CkreCkvuCkt+Ckv+CkpCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTA4ODIxNzMwOTA4ODcyOTY1MCI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpIngpKrgpK/gpYvgpJcg4KSy4KWH4KSW4KS+4KSy4KS+4KSIIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjU0NDM0MTI4NjY3NDYxOTgxMjMiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSV4KS44KSw4KWAIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCkleCliyDgpLXgpL/gpLDgpYLgpKbgpY3gpKfgpK7gpL4g4KSV4KS44KSw4KWAIOCkqOClh+Ckn+CkteCksOCljeCklSDgpIngpKrgpK/gpYvgpJfgpYAg4KSF4KSV4KS+4KSJ4KSo4KWN4KSf4KWH4KShIOCkmyDgpK3gpKjgpYfgpLAg4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KSoIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iMzY1ODUyNzIxNDkxNDk1OTc0OSI+IuCkuOCkleClh+Ckn+CkleCliyDgpKjgpL/gpLbgpL7gpKjgpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hcmtOZXR3b3JrU29ja2V0IiBtc2dpZD0iNzY1NTU2ODQzMzY5NjM1NjU3OCI+IuCkruCkvuCksOCljeCklyDgpKbgpLDgpY3gpLbgpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpLjgpJXgpYfgpJ/gpJXgpYsg4KSo4KS/4KS24KS+4KSo4KS54KSw4KWCIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTm90aWZpY2F0aW9ucyIgbXNnaWQ9Ijc2NzM0MTY0ODc4NzM0MzIyNjgiPiLgpLjgpYLgpJrgpKjgpL7gpLngpLDgpYIg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI0NTg0NTc3NDI2ODM0MzEzODciPiLgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSs4KS+4KSfIOCkquCli+CkuOCljeCknyDgpJfgpLDgpL/gpI/gpJXgpL7gpLjgpLngpL/gpKQg4KSq4KWB4KSo4KSD4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkl+CksOCljeCkqCwg4KSq4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqCDgpLAg4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIOCkueCkn+CkvuCkieCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9IjcwNTc3NjQ3NDIyMTE2NTY2NTQiPiLgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KS24KWN4KSw4KWL4KSk4KS+IOCkuOClh+CkteCkvuCkruCkviDgpKzgpL7gpIHgpKfgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIiBtc2dpZD0iOTg1Njk3OTE4NTc2OTAyOTg2Ij4i4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkuOClguCkmuCkqOCkviDgpLbgpY3gpLDgpYvgpKTgpL4g4KS44KWH4KS14KS+4KSV4KWLIOCktuClgOCksOCljeCkty3gpLjgpY3gpKTgpLDgpJXgpYsg4KSH4KSo4KWN4KSf4KSw4KSr4KWH4KS4IOCkrOCkvuCkgeCkp+CljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWHIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iMzY5OTYwMDgzMzk3NTExNzQ3OCI+IuCkteCkvuCkueCklS3gpKrgpY3gpLDgpKbgpL7gpKgg4KS14KS/4KSo4KWN4KSv4KS+4KS4IOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpYHgpLDgpYEg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iNDE1OTU0OTE1MjUyOTExMTkyMCI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCksuCkvuCkiCDgpLXgpL7gpLngpJUt4KSq4KWN4KSw4KSm4KS+4KSoIOCkteCkv+CkqOCljeCkr+CkvuCkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkp+CkvuCksOCkoyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKjgpYcg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjgyMDYwNzc0NDc4Mzg5MDk1MTYiPiLgpLjgpJ7gpY3gpJzgpL7gpLIg4KSF4KS14KS44KWN4KSl4KS+4KSV4KS+IOCkquCksOCljeCkr+CkteClh+CkleCljeCkt+Cko+CkleCkviDgpLLgpL7gpJfgpL8g4KS44KWB4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI2ODk5MTAyMDc1ODI1MjcyMjExIj4i4KS44KSe4KWN4KSc4KS+4KSyIOCkheCkteCkuOCljeCkpeCkvuCkleCkviDgpKrgpLDgpY3gpK/gpLXgpYfgpJXgpY3gpLfgpKMg4KS44KWB4KSo4KWN4KSo4KSV4KS+IOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSa4KS+4KSB4KS54KS/4KSm4KWIIOCkqOCkmuCkvuCkgeCkueCkv+CkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjQ0OTc0MjA3Mjg4NTc1ODU3OTEiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSo4KS/4KSv4KSu4KS54KSw4KWCIOCkruCkv+CksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjMyNTIxMTQyMDM5MTk1MTAzOTQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgt4KSF4KSo4KSy4KSVIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClguCkruCkviDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSH4KSP4KSV4KWLIOCksuCkruCljeCkrOCkvuCkhyDgpLAg4KSF4KSV4KWN4KS34KSw4KS54KSw4KWCIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2F0Y2hMb2dpbiIgbXNnaWQ9IjkxNDEzMDY0Njk0MjE5OTUwMyI+IuCkruCli+CkqOCkv+Ckn+CksCDgpLjgpY3gpJXgpY3gpLDgpL/gpKgt4KSF4KSo4KSy4KSVIOCkquCljeCksOCkr+CkpOCljeCkqOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzIxNTcyOTI5NDIxNTA3MDA3MiI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSm4KS+IOCkl+CksuCkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkreCkj+CkleCliyDgpLjgpILgpJbgpY3gpK/gpL4g4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSv4KSm4KS/IOCkqOCkv+CkleCliCDgpKfgpYfgpLDgpYgg4KSX4KSy4KSkIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClgiDgpJ/gpL7gpIfgpKog4KSt4KSP4KSV4KS+IOCkm+CkqCDgpK3gpKjgpYcg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkleCkviDgpLjgpKzgpYgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MTIzMjMwOTE4NDY3NjEwNzMiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSm4KS+IOCkl+CksuCkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkreCkj+CkleCliyDgpLjgpILgpJbgpY3gpK/gpL4g4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSv4KSm4KS/IOCkqOCkv+CkleCliCDgpKfgpYfgpLDgpYgg4KSX4KSy4KSkIOCkquCkvuCkuOCkteCksOCljeCkoeCkueCksOClgiDgpJ/gpL7gpIfgpKog4KSt4KSP4KSV4KS+IOCkm+CkqCDgpK3gpKjgpYcg4KSr4KWL4KSoIOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkq+Cli+CkqOCkleCkviDgpLjgpKzgpYgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9yZXNldFBhc3N3b3JkIiBtc2dpZD0iMjYyMDA3NzE5MTI0MjY4ODk1NSI+IuCkuOCljeCkleCljeCksOCkv+CkqC3gpIXgpKjgpLLgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkpuCksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjYwNTk2Mzk2MjMwMTkwNDQ1OCI+IuCkuOCljeCkleCljeCksOCkv+CkqC3gpIXgpKjgpLLgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZm9yY2VMb2NrIiBtc2dpZD0iMjI3NDA4NTM4NDcwNDI0ODQzMSI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpLLgpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19mb3JjZUxvY2siIG1zZ2lkPSIxMTQxNzk3NTg4NDAzODI3MTM4Ij4i4KSV4KS44KSw4KWAIOCksCDgpJXgpLngpL/gpLLgpYcg4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl93aXBlRGF0YSIgbXNnaWQ9IjM5MTA1NDU0NDY3NTg2Mzk3MTMiPiLgpLjgpKzgpYgg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2lwZURhdGEiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMDYxODQwOTYwNjc3NTY4NzYiPiLgpI/gpIngpJ/gpL4g4KSr4KWN4KSv4KS+4KSV4KWN4KSf4KWN4KSw4KS/IOCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KWH4KSwIOCkmuClh+CkpOCkvuCkteCkqOClgCDgpKjgpIbgpIngpIHgpKbgpYgg4KSf4KWN4KSv4KS+4KSs4KSy4KWN4KSf4KSV4KWLIOCkoeClh+Ckn+CkviDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTA5Njg5NTYwNDU3NDE4ODM5MSI+IuCkj+CkieCkn+CkviDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KSh4KWH4KSf4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpYfgpLAg4KSa4KWH4KSk4KS+4KS14KSo4KWAIOCkqOCkhuCkieCkgeCkpuCliCDgpKvgpYvgpKjgpJXgpYsg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9zZXRHbG9iYWxQcm94eSIgbXNnaWQ9IjI3ODQ4MjgyOTM3NDc3OTE0NDYiPiLgpIngpKrgpJXgpLDgpKMg4KS14KS/4KS24KWN4KS14KS14KWN4KSv4KS+4KSq4KWAIOCkquCljeCksOCli+CkleCljeCkuOClgCDgpK7gpL/gpLLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3NldEdsb2JhbFByb3h5IiBtc2dpZD0iNjM4NzQ5NzQ2NjY2MDE1NDkzMSI+IuCkqOClgOCkpOCkvyDgpLjgpJXgpY3gpLfgpK4g4KS54KWB4KSB4KSm4KS+IOCkquCljeCksOCkr+Cli+CklyDgpLngpYHgpKjgpYcg4KSJ4KSq4KSV4KSw4KSjICDgpLXgpL/gpLbgpY3gpLXgpLXgpY3gpK/gpL7gpKrgpYAg4KSq4KWN4KSw4KWL4KSV4KWN4KS44KWAIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSq4KWN4KSw4KSl4KSuIOCkieCkquCkleCksOCkoyDgpKrgpY3gpLDgpLbgpL7gpLjgpLbgpKjgpLLgpYcg4KSu4KS+4KSk4KWN4KSwIOCkquCljeCksOCkreCkvuCkteCkleCkvuCksOClgCDgpLXgpL/gpLbgpY3gpLXgpLXgpY3gpK/gpL7gpKrgpYAg4KSq4KWN4KSw4KWL4KSV4KWN4KS44KWAIOCkuOClh+CknyDgpJfgpLDgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSI4ODUyNzkxNTE4NDcyNTQwNTYiPiLgpLLgpJUt4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkquCkvuCkuOCkteCksOCljeCkoSDgpIXgpKjgpY3gpKQg4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSIxNzI5NzI1MjI2MzE0NjkxNTkxIj4i4KSq4KWN4KSw4KS+4KSv4KSDIOCkleCkpOCkvyDgpJvgpL/gpJ/gpYsg4KSy4KSVLeCkuOCljeCkleCljeCksOCkv+CkqCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSs4KSm4KSy4KWN4KSo4KWBIOCkquCksOCljeCkmyDgpK/gpLjgpLLgpL7gpIgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iODkwMTMyNjE5OTkwOTEzMjkxNSI+IuCkreCko+CljeCkoeCkvuCksOCkoyDgpIfgpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpLjgpKgg4KSu4KS/4KSy4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iMjYzNzczMjExNTMyNTMxNjk5MiI+IuCkreCko+CljeCkoeCkvuCksCDgpJfgpLDgpL/gpI/gpJXgpYsg4KSh4KWH4KSf4KS+IOCkh+CkqOCljeCkleCljeCksOCkv+CkquCljeCknyDgpLngpYHgpKjgpYEg4KSG4KS14KS24KWN4KSv4KSVIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iNjM5NTMwMTAyMzE1MjI5NzgyNiI+IuCkleCljeCkr+CkvuCkruClh+CksOCkvuCksuCkvuCkiCDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iMjMwNjM0OTA0MjgzNDc1NDU5NyI+IuCkuOCkrOCliCDgpIngpKrgpJXgpLDgpKMg4KSV4KWN4KSv4KS+4KSu4KSw4KS+4KS54KSw4KWC4KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIyNjYzMjkxMDQ1NDI2Mzg4MDIiPiLgpJXgpL/gpJfgpL7gpLDgpY3gpKHgpK7gpL4g4KSt4KSP4KSV4KS+IOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClgiDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjM0NjcwODIyNzIxODY1MzQ2MTQiPiLgpJXgpYfgpLngpYAg4KSV4KS/4KSX4KS+4KSw4KWN4KShIOCkteCkv+CktuClh+Ckt+CkpOCkvuCkueCksOClguCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBob25lVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI4OTAxMDk4MzM2NjU4NzEwMzU5Ij4i4KSX4KWD4KS5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY5OTIzNjUwNTI3MTM2NjE1Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzg5NzU0NDY1NDI0Mjg3NDU0MyI+IuCkleCkvuCkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMTAzNjAxNDMzMzgyMTU4MTU1Ij4i4KSV4KS+4KSw4KWN4KSvIOCkq+CljeCkr+CkvuCkleCljeCkuCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MzUxNzcxNDQ5NDgzMjkzNzAiPiLgpJjgpLDgpJXgpYsg4KSr4KWN4KSv4KS+4KSV4KWN4KS4IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjAzODc4Njc0NDc3MjA3Mzk0Ij4i4KSq4KWH4KSc4KSwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTY1MDgyNDI3NTE3NzkzMTYzNyI+IuCkheCkqOCljeCkryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiLgpIXgpKjgpYHgpJXgpYLgpLLgpKgiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJlbWFpbEFkZHJlc3NUeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9IjgwNzM5OTQzNTI5NTYxMjkxMjciPiLgpJfgpYPgpLkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3MDg0MjM3MzU2NjAyNjI1NjA0Ij4i4KSV4KS+4KSuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTExMjA0NDQxMDY1OTAxMTAyMyI+IuCkheCkqOCljeCkryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIzNzQ5MTM5NTI4NzAxMTA2MTgiPiLgpIXgpKjgpYHgpJXgpYLgpLLgpKgiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwb3N0YWxBZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI2ODgwMjU3NjI2NzQwMDQ3Mjg2Ij4i4KSX4KWD4KS5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTYyOTE1Mzk1NjA0NTEwOTI1MSI+IuCkleCkvuCkriI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ5NjY2MDQyNjQ1MDAzNDM0NjkiPiLgpIXgpKjgpY3gpK8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0OTMyNjgyODQ3NTk1Mjk5MzY5Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1BZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSIxNzM4NTg1MTk0NjAxNDc2Njk0Ij4i4KSX4KWD4KS5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM1OTY0NDU2NTY0NzM4MzcwOCI+IuCkleCkvuCkriI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4Njg1NDk0MDEwNTM2MTU2NzciPiLgpIXgpKjgpY3gpK8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTQ1MTE4OTQ0NjM5ODY5ODA5Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JnYW5pemF0aW9uVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NTQ2MzM1NjEyMTg5MTE1NjE1Ij4i4KSV4KS+4KSuIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQzNzgwNzQxMjkwNDk1MjAzNzMiPiLgpIXgpKjgpY3gpK8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNDU1MDQ3NDY4NTgzOTY1MTA0Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1Qcm90b2NvbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI4NTk1MjYxMzYzNTE4NDU5NTY1Ij4iQUlNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzM5MDQ3MzYyODI3NTQ5MDcwMCI+IldpbmRvd3MgTGl2ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4ODI4NzcxMzQ5MzE0NTgyMTciPiJZYWhvbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjUwMzUzNzYzMTMyMDA1ODUyNDIiPiLgpLjgpY3gpJXgpL7gpIfgpKoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3NTMyMzYzMTc4NDU5NDQ0OTQzIj4iUVEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNzEzNDQxMDM0Mjk5NjYwNzQ5Ij4iR29vZ2xlIFRhbGsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNTA2ODU3MzEyNzE4NjMwODIzIj4iSUNRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTY0ODc5NzkwMzc4NTI3OTM1MyI+IkphYmJlciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ3VzdG9tIiBtc2dpZD0iMTY0NDczODA1OTA1MzM1NTgyMCI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUhvbWUiIG1zZ2lkPSIyNTcwOTIzNDYzMDMzOTg1ODg3Ij4i4KSX4KWD4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW9iaWxlIiBtc2dpZD0iNjUwMTQ2MzU1Nzc1NDc1MTAzNyI+IuCkruCli+CkrOCkvuCkh+CksiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVdvcmsiIG1zZ2lkPSI4ODYzOTM5NjY3MDU5OTExNjMzIj4i4KSV4KS+4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4V29yayIgbXNnaWQ9IjM1MTc3OTIxNjAwMDg4OTA5MTIiPiLgpJXgpL7gpLDgpY3gpK8g4KSr4KWN4KSv4KS+4KSV4KWN4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4SG9tZSIgbXNnaWQ9IjIwNjcyNjU5NzIzMjI5NzE0NjciPiLgpJjgpLDgpJXgpYsg4KSr4KWN4KSv4KS+4KSV4KWN4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlUGFnZXIiIG1zZ2lkPSI3NTgyMzU5OTU1Mzk0OTIxNzMyIj4i4KSq4KWH4KSc4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXIiIG1zZ2lkPSIxNTQ0NDI1ODQ3ODY4NzY1OTkwIj4i4KSF4KSo4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FsbGJhY2siIG1zZ2lkPSIyNzEyMTc1MjAzMDY1Njc4MjA2Ij4i4KSV4KSy4KSs4KWN4KSv4KS+4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlQ2FyIiBtc2dpZD0iODczODM2MDY4OTYxNjcxNjk4MiI+IuCkleCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNvbXBhbnlNYWluIiBtc2dpZD0iNTQwNDM0MzU2NDYxNDc4OTE2Ij4i4KSV4KSu4KWN4KSq4KSo4KWAIOCkruClgeCkluCljeCkryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUlzZG4iIG1zZ2lkPSI4MDIyNDUzMTkzMTcxMzcwMzM3Ij4iSVNETiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1haW4iIG1zZ2lkPSI2NzY2MTM3MDEwNjI4MzI2OTE2Ij4i4KSu4KWB4KSW4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXJGYXgiIG1zZ2lkPSI4NTg3NjU3MTQ1MDcyNDQ2NTY1Ij4i4KSF4KSo4KWN4KSvIOCkq+CljeCkr+CkvuCkleCljeCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVJhZGlvIiBtc2dpZD0iNDA5MzczODA3OTkwODY2NzUxMyI+IuCksOClh+CkoeCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVRlbGV4IiBtc2dpZD0iMzM2Nzg3OTk1MjQ3NjI1MDUxMiI+IuCkn+Clh+CksuClh+CkleCljeCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVR0eVRkZCIgbXNnaWQ9Ijg2MDY1MTQzNzg1ODUwMDAwNDQiPiJUVFkgVEREIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya01vYmlsZSIgbXNnaWQ9IjEzMTE0MjY5ODkxODQwNjU3MDkiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KSs4KS+4KSH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya1BhZ2VyIiBtc2dpZD0iNjQ5OTM4NzMxMjMxMTU3MDU2Ij4i4KSV4KS+4KSw4KWN4KSvIOCkquClh+CknOCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjU1OTY3NzI2MzYxMjg1NjI4ODQiPiLgpLjgpLngpL7gpK/gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNbXMiIG1zZ2lkPSI3MjU0NDkyMjc1NTAyNzY4OTkyIj4iTU1TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQ3VzdG9tIiBtc2dpZD0iNzgzNzU4NjE5ODQ1ODA3MzQwNCI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUJpcnRoZGF5IiBtc2dpZD0iMjgxMzM3OTg0NDIxMTM5MDc0MCI+IuCknOCkqOCljeCkruCkpuCkv+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUFubml2ZXJzYXJ5IiBtc2dpZD0iMzg3Njc3OTc0NDUxODI4NDAwMCI+IuCkteCkvuCksOCljeCkt+Ckv+CklSDgpLjgpK7gpL7gpLDgpYvgpLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVPdGhlciIgbXNnaWQ9IjczODgxNzg5MzkwMTAxNDMwNzciPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVDdXN0b20iIG1zZ2lkPSI4NTI1OTYwMjU3ODA0MjEzODQ2Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlSG9tZSIgbXNnaWQ9IjQ0OTIyNzIzNjE0MDQzMzkxOSI+IuCkl+Clg+CkuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZVdvcmsiIG1zZ2lkPSIzNTQ4MDU4MDU5NjAxMTQ5OTczIj4i4KSV4KS+4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlT3RoZXIiIG1zZ2lkPSIyOTIzMDA4Njk1MjcyNjM5NTQ5Ij4i4KSF4KSo4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlTW9iaWxlIiBtc2dpZD0iMTE5OTE5MDA1MzIxMTY2MjA1Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg5MDMyMDY5MDMwNjA0Nzk5MDIiPiLgpIXgpKjgpYHgpJXgpYLgpLLgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlSG9tZSIgbXNnaWQ9IjgxNjU3NTY5NzcxODQ0ODMwOTciPiLgpJfgpYPgpLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlV29yayIgbXNnaWQ9IjUyNjgxNzI3NzIzODc2OTQ0OTUiPiLgpJXgpL7gpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlT3RoZXIiIG1zZ2lkPSIyNzI2MTExOTY2NjIzNTg0MzQxIj4i4KSF4KSo4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlQ3VzdG9tIiBtc2dpZD0iMjA3NDAyODc1NTUyNzgyNjA0NiI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZUhvbWUiIG1zZ2lkPSI2MjQxMTgxMDMyOTU0MjYzODkyIj4i4KSX4KWD4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlV29yayIgbXNnaWQ9IjEzNzE0ODkyOTAyNDI0MzMwOTAiPiLgpJXgpL7gpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVPdGhlciIgbXNnaWQ9IjUzNzcwMDc0OTU3MzU5MTU0NzgiPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQ3VzdG9tIiBtc2dpZD0iNjkxOTQ1MzgzNjYxODc0OTk5MiI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xBaW0iIG1zZ2lkPSI3MDUwMzYwNjEyMzY4MzgzNDE3Ij4iQUlNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE1zbiIgbXNnaWQ9IjE0NDU1NjU0NTQyMDc2OTQ0MiI+IldpbmRvd3MgTGl2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xZYWhvbyIgbXNnaWQ9IjgyNzE0Mzk0MDg0NjkwMjEyNzMiPiJZYWhvbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xTa3lwZSIgbXNnaWQ9IjkwMTkyOTY3NDQ2MjI4MzI5NTEiPiLgpLjgpY3gpJXgpL7gpIfgpKoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sUXEiIG1zZ2lkPSI4ODg3NDg0Mzc5NDk0MTExODg0Ij4iUVEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sR29vZ2xlVGFsayIgbXNnaWQ9IjQ5MzkwMjMyMTE0MDI3NzMwNCI+IuCkueCljeCkr+CkvuCkmeCkhuCkieCkn+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xJY3EiIG1zZ2lkPSIxNTc0ODcwNDMzNjA2NTE3MzE1Ij4iSUNRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEphYmJlciIgbXNnaWQ9IjIyNzk5MTc2MzA4NzU3NzE3MjIiPiJKYWJiZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTmV0TWVldGluZyIgbXNnaWQ9IjgyODc2MjU2NTU5ODY4Mjc5NzEiPiJOZXRNZWV0aW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZVdvcmsiIG1zZ2lkPSIyOTI2ODg3MDUwNTM2Mzg3MiI+IuCkleCkvuCkriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVPdGhlciIgbXNnaWQ9IjM5NTE3ODExMzE1NzAxMjQwODIiPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdUeXBlQ3VzdG9tIiBtc2dpZD0iMjI1NTIzNDE1MzcyMDg4MzIyIj4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ3VzdG9tIiBtc2dpZD0iMzU0MjQwMzY3OTgyNzI5NzMwMCI+IuCkheCkqOClgeCkleClguCksuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjYyNzQzMzQ4MjUxOTUzNzkwNzYiPiLgpLjgpLngpL7gpK/gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVCcm90aGVyIiBtc2dpZD0iODc1NzkxMzUwNjc4NDA2NzcxMyI+IuCkreCkvuCkhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUNoaWxkIiBtc2dpZD0iMTg5MDc0NjI3NzI3Njg4MTYyNiI+IuCkrOCkmuCljeCkmuCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZURvbWVzdGljUGFydG5lciIgbXNnaWQ9IjY5MDQ4MDcxMTIxMjExMjIxMzMiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KS44KS+4KSd4KWH4KSm4KS+4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlRmF0aGVyIiBtc2dpZD0iNTIyODAzNDY4NzA4MjA1MDcyNSI+IuCkrOClgeCkrOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUZyaWVuZCIgbXNnaWQ9IjczMTMxMDY3NjI0ODMzOTEyNjIiPiLgpK7gpL/gpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNYW5hZ2VyIiBtc2dpZD0iNjM2NTY3Nzg2MTYxMDEzNzg5NSI+IuCkrOCljeCkr+CkteCkuOCljeCkpeCkvuCkquCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZU1vdGhlciIgbXNnaWQ9IjQ1Nzg1NzEzNTI5NjI3NTgzMDQiPiLgpIbgpK7gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVQYXJlbnQiIG1zZ2lkPSI0NzU1NjM1NTY3NTYyOTI1MjI2Ij4i4KSF4KSt4KS/4KSt4KS+4KS14KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFydG5lciIgbXNnaWQ9IjcyNjY0OTAyODUxMjAyNjI3ODEiPiLgpKrgpL7gpLDgpY3gpJ/gpKjgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVSZWZlcnJlZEJ5IiBtc2dpZD0iMTAxNTczMDU5ODQ0MTM1NTI0Ij4i4KSm4KWN4KS14KS+4KSw4KS+IOCkieCksuCljeCksuCkv+CkluCkv+CkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVJlbGF0aXZlIiBtc2dpZD0iMTc5OTgxOTkzMDA4NTYxMDI3MSI+IuCkhuCkq+CkqOCljeCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVNpc3RlciIgbXNnaWQ9IjE3MzU5ODM1NTQ0NzkwNzY0ODEiPiLgpKzgpLngpL/gpKjgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTcG91c2UiIG1zZ2lkPSIzOTQxMzY5Mzk0Mjg2OTgxMTciPiLgpKrgpKTgpL8t4KSq4KSk4KWN4KSo4KS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVDdXN0b20iIG1zZ2lkPSIyNDczNTgwNTkzMTExNTkwOTQ1Ij4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVIb21lIiBtc2dpZD0iNjA5MzU5ODE4MTA2OTM1OTI5NSI+IuCkl+Clg+CkuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlV29yayIgbXNnaWQ9IjY5MjA3MjU3MzA3OTcwOTkwNDciPiLgpJXgpL7gpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVPdGhlciIgbXNnaWQ9IjQ0MDg0MzYxNjI5NTAxMTk4NDkiPiLgpIXgpKjgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJQSU4g4KSV4KWL4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUsg4KSwIOCkqOCkr+CkvuCkgSBQSU4g4KSV4KWL4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyDgpJXgpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IuCkqOCkr+CkvuCkgSBQSU4g4KSV4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWNIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKggUElOIOCkleCli+CkoSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4KSX4KSy4KSkIFBJTiDgpJXgpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpK7gpYfgpKjgpYEg4KSl4KS/4KSa4KWN4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpKTgpY3gpK/gpLjgpKrgpJvgpL8g4KWmIOCkpeCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsX2RpYWxvZ19udW1iZXJfZm9yX2Rpc3BsYXkiIG1zZ2lkPSI2OTYxOTIxMDMxOTUwOTA5NzAiPiLgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSo4KSu4KWN4KSs4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4OTYzODM5MjQyNTY1NjUzMTkyIj4i4KS44KWH4KS14KS+IOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2NyZWVuX2xvY2tlZCIgbXNnaWQ9IjcyODg0NDMwNzQ4MDY4MzI5MDQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSy4KSVIOCkl+CksOCkv+Ckj+CkleCli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5faW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9lbmFibGVkIiBtc2dpZD0iNDYxNTQwNTE2MTQxMjYwNDkiPiLgpIXgpKjgpLLgpJUg4KS14KS+IOCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpJXgpLIg4KSX4KSw4KWN4KSoIOCkruClh+CkqOClgSDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSI2ODYyNjAwMjg3OTcxNTgzNjQiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkruClh+CkqOClgSDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNzQ3ODcwMzI1NDk2NDgxMDMwMiI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYEg4KSi4KS+4KSB4KSa4KS+IOCkluCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZW1lcmdlbmN5X2NhbGwiIG1zZ2lkPSI1MzQ3NjMzNzg0NDAxMjg1MjI1Ij4i4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkleCksuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcmV0dXJuX3RvX2NhbGwiIG1zZ2lkPSI1MjQ0MjU5Nzg1NTAwMDQwMDIxIj4i4KSV4KSy4KSu4KS+IOCkq+CksOCljeCkleCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9jb3JyZWN0IiBtc2dpZD0iOTAzOTAwODY1MDM2MjI2MTIzNyI+IuCkuOCkueClgCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fd3JvbmciIG1zZ2lkPSI0MzE3OTU1MDE0OTQ4MTA4Nzk0Ij4i4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Bhc3N3b3JkX3dyb25nIiBtc2dpZD0iNTczNzgxNTM5MzI1MzE2NTMwMSI+IuCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+IuCkheCkpOCljeCkr+CkvuCkp+Ckv+CklSDgpK7gpYvgpLngpKHgpL4g4KSW4KWL4KSy4KWN4KSo4KWHIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClgiDgpKzgpKLgpYAg4KSt4KSP4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wbHVnZ2VkX2luIiBtc2dpZD0iODA1Nzc2MjgyODM1NTU3MjMxNSI+IuCkmuCkvuCksOCljeCknCDgpLngpYHgpIHgpKbgpYgsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiLgpJrgpL7gpLDgpY3gpJwg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9iYXR0ZXJ5X3Nob3J0IiBtc2dpZD0iNDQ3NzI2NDg0OTM4Njg1MDI2NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2xvd19iYXR0ZXJ5IiBtc2dpZD0iMTQ4Mjg3Mzk4MTkxOTI0OTc0MCI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpJrgpL7gpLDgpY3gpJzgpLAg4KSc4KWL4KSh4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNTA5OTQzOTI3NzgxOTIxNTM5OSI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTE2NTkxOTYwOTU3OTE0NzQiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpK7gpL4gU0lNIOCkleCkvuCksOCljeCkoSDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMTg2OTIwNTg1Njk1MTY5MDc4Ij4i4KSr4KWL4KSo4KSu4KS+IFNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4iU0lNIOCkleCkvuCksOCljeCkoSDgpJjgpYHgpLjgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSoIOCkteCkviDgpKrgpKLgpY3gpKgg4KSu4KS/4KSy4KWN4KSm4KWI4KSo4KWkIFNJTSDgpJXgpL7gpLDgpY3gpKEg4KS54KS+4KSy4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk2MTQ5NjY1MTM4OTE2MTg0Ij4i4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpIXgpK/gpYvgpJfgpY3gpK8gU0lNIOCkleCkvuCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsgU0lNIOCkleCkvuCksOCljeCkoSDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkheCkleCljeCkt+CkriDgpK3gpK/gpYvgpaRcbiDgpIXgpLDgpY3gpJXgpYsgU0lNIOCkleCkvuCksOCljeCkoeCkleCliyDgpLLgpL7gpJfgpL8g4KSG4KSr4KSo4KWLIOCkpOCkvuCksOCksOCkueCkv+CkpCDgpLjgpYfgpLXgpL4g4KSq4KWN4KSw4KSm4KS+4KSv4KSV4KS44KSB4KSXIOCkuOCkruCljeCkquCksOCljeCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjAxNTk0OTA1MTUyNzQ2ODg2Ij4i4KSF4KSY4KS/4KSy4KWN4KSy4KWLIOCkn+CljeCksOCkr+CkvuCklSDgpKzgpJ/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjA4OTI5NzY1MDQ4MTI5MjM2MyI+IuCkheCksOCljeCkleCliyDgpJ/gpY3gpLDgpK/gpL7gpJUg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU5MDg4Nzg2NzgwMTI4MDAxIj4i4KSw4KWL4KSV4KWN4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI1ODg4NDIyOTM4MzUxMDE5NDI2Ij4i4KSs4KSc4KS+4KSJ4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTYyMzE4Mzc4NzY2OTg3NjAxIj4i4KSs4KSf4KSoIOCksOCli+CkleCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsc19vbmx5IiBtc2dpZD0iNjczMzk3ODMwNDM4NjM2NTQwNyI+IuCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpJXgpLLgpLngpLDgpYIg4KSu4KS+4KSk4KWN4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMTQzMzg5MjI0OTg2MDI4NTAxIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCksuCklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI3NDQxNzk3MzM5OTc2MjMwIj4iU0lNIOCkleCkvuCksOCljeCkoSBQVUst4KSy4KSVIOCkl+CksOCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSo4KS/4KSw4KWN4KSm4KWH4KS24KSVIOCkteCkviDgpJfgpY3gpLDgpL7gpLngpJUg4KS44KWH4KS14KS+IOCkuOCkruCljeCkquCksOCljeCklSDgpLngpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjgwNjY2NjAxMjkyMDYwMDEwMzkiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCksuCklSDgpJfgpLDgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNTk1MzIzMjE0MDUyODgxMjY0Ij4iU0lNIOCkleCkvuCksOCljeCkoSDgpIXgpKjgpLLgpJUg4KSX4KSw4KS/4KSB4KSm4KWILi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2NDgxNjIzODMwMzQ0MTA3MjIyIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIXgpKjgpLLgpJUg4KSi4KS+4KSB4KSa4KS+IOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkluCkv+CkmuCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpJXgpYvgpLjgpL/gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSIyNzI1OTczMjg2MjM5MzQ0NTU1Ij4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkquCkvuCkuOCkteCksOCljeCkoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkreCkr+Cli+ClpCBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJbgpL/gpJrgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCDgpKrgpJvgpL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSl4KSqIOCkheCkuOCkq+CksiDgpJXgpYvgpLjgpL/gpLjgpLngpLDgpYIsIOCkpOCkquCkvuCkiOCkgeCkleCliyBHb29nbGUg4KS44KS+4KSH4KSoIOCkh+CkqCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWAIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpK3gpKjgpL/gpKjgpYcg4KSb4KWkXG5cbiAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI1OTAyMjc1NTk3NjM3NjI3NTEiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL7gpLLgpL7gpIgg4KSV4KWL4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQg4KSq4KSb4KS/IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkheCksOClgiDgpKfgpYfgpLDgpYgg4KSF4KS44KSr4KSyIOCkleCli+CkuOCkv+CkuOCkueCksOClguCkquCkm+Ckvywg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKggR29vZ2xlIOCkuOCkvuCkh+CkqCDgpIfgpKgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CksCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpYvgpKfgpL/gpKjgpYcg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquClgeCkqOCkgyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxMjgxMDYzOTk3NDU3NTU2MDQiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkleCli+CktuCkv+CkuCDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpYsg4KSb4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkheCksOClgiDgpKfgpYfgpLDgpYgg4KSF4KS44KSr4KSyIOCkleCli+CkuOCkv+CkuOCkueCksOClguCkquCkm+Ckvywg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkq+CljeCkr+CkvuCkn+CljeCksOCkvyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkueClgeCkqOClhyDgpJsg4KSwIOCkuOCkrOCliCDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSh4KWH4KSf4KS+IOCkueCksOCkvuCkieCkqOClhyDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2MDM1NjUxNDIxNTY4MjY1NjUiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSr4KWL4KSoIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkl+CksOCljeCkqOClgeCkreCkr+Cli+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKzgpKLgpYAg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkpOCljeCkqOCkueCksOClgiDgpKrgpJvgpL8sIOCkq+Cli+CkqCDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpLngpYHgpKjgpYcg4KSbIOCksCDgpLjgpKzgpYgg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjgwODczNTE2NDkzOTM0MzY1Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkn+CljeCkr+CkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQg4KSF4KSsIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpL/gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpKvgpYvgpKggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KWHIOCkquCljeCksOCkr+CkpOCljeCkqCDgpJfgpLDgpY3gpKjgpYHgpK3gpK/gpYvgpaQg4KSF4KSsIOCkq+Cli+CkqCDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpLngpYHgpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjI1MTQ4MDM0MzM5NDM4OTY2NSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iMjYyNjk5OTQ0OTYxMDY5NTkzMCI+IuCkouCkvuCkgeCkmuCkviDgpKzgpL/gpLDgpY3gpLjgpKjgpYEg4KSt4KSv4KWLPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+IuCkluCkvuCkpOCkviDgpIXgpKjgpLLgpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiLgpKjgpL/gpJXgpYgg4KSn4KWH4KSw4KWIIOCkleCli+CkuOCkv+CkuOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+Ckvywg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIEdvb2dsZSDgpJbgpL7gpKTgpL7gpLjgpIHgpJcg4KS44KS+4KSH4KSoIOCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iODg0Njg4MTQyNDEwNjQ4NDQ0NyI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkqOCkvuCkriAo4KSH4KSu4KWH4KSyKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI1OTU4MDI4MzgzOTU0NzM4NTI4Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI3MTMwODkzNjk0Nzk1Nzg2MzAwIj4i4KS44KS+4KSH4KSoIOCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iMTM2NDA1MTQ3MzM0NzQ4NTkwOCI+IuCkheCkruCkvuCkqOCljeCkryDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpKjgpL7gpK4g4KS14KS+IOCkquCkvuCkuOCkteCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjE2OTY5MjQ3NjM2OTAzNzkwNzMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkv+CksOCljeCkuOCkqOClgeCkreCkr+Cliz9cbiDgpK3gpY3gpLDgpK7gpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS4IjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iNzExNDYyNzM1MTI4NjkzMzg2NyI+IuCknOCkvuCkgeCkmiDgpJfgpLDgpY3gpKbgpYguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3VubG9ja19sYWJlbCIgbXNnaWQ9IjczNzQ0MDQ4MzIyMDY2NzA1NCI+IuCkluCli+CksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4i4KSG4KS14KS+4KScIOCkmuCkvuCksuClgSDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29mZl9sYWJlbCIgbXNnaWQ9Ijk5NjgyMjgyNTE1NDMxOTAyNiI+IuCkp+CljeCkteCkqOCkvyDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX3N0YXJ0IiBtc2dpZD0iMzk0MTA0NTUwMjkzMzE0Mjg0NyI+IuCkouCkvuCkgeCkmuCkviDgpLjgpYHgpLDgpYEg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jbGVhcmVkIiBtc2dpZD0iNTU4MzQ3OTcyMTAwMTYzOTU3OSI+IuCkouCkvuCkgeCkmuCkviDgpLngpJ/gpL7gpIfgpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NlbGxfYWRkZWQiIG1zZ2lkPSI2NzU2MDMxMjA4MzU5MjkyNDg3Ij4i4KS44KWH4KSyIOCkpeCkqiDgpJfgpLDgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2RldGVjdGVkIiBtc2dpZD0iNDk4ODczMDg5NTU1NDA1NzA1OCI+IuCkouCkvuCkgeCkmuCkviDgpKrgpYHgpLDgpL4g4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiDgpLXgpL/gpJzgpYfgpJ8gJTIkZCBvZiAlMyRk4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IuCkteCkv+CknOClh+CknyDgpKXgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLgpJbgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+IuCkheCkqOCksuCklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KS14KS/4KS44KWN4KSk4KS+4KSwIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IuCkheCkqOCksuCklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KSt4KSk4KWN4KSV4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4KS14KS/4KSc4KWH4KSf4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpJvgpKjgpYzgpJ/gpJXgpLDgpY3gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiLgpLjgpY3gpKXgpL/gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i4KSu4KS/4KSh4KS/4KSv4KS+IOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCko+CkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i4KS14KS/4KSc4KWH4KSfIOCkquClgeCkqOCkg+CkleCljeCksOCkriDgpJfgpLDgpY3gpKjgpYcg4KS44KWB4KSw4KWBIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IuCkteCkv+CknOClh+CknyDgpKrgpYHgpKjgpIPgpJXgpY3gpLDgpK4g4KS44KSu4KS+4KSq4KWN4KSkIOCkreCkj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IuCkteCkv+CknOClh+CknyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDgpK7gpYfgpJ/gpL7gpIfgpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLgpIXgpKjgpLLgpJUg4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IuCkuOCljeCksuCkvuCkh+CkoSDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IuCkouCkvuCkgeCkmuCkviDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IuCkq+Clh+CkuCDgpIXgpKjgpLLgpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUGluIOCkheCkqOCksuCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IuCkquCkvuCkuOCkteCksOCljeCkoSDgpIXgpKjgpLLgpJXgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLgpKLgpL7gpIHgpJrgpL4g4KSV4KWN4KS34KWH4KSk4KWN4KSw4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IuCkuOCljeCksuCkvuCkh+CkoSDgpJXgpY3gpLfgpYfgpKTgpY3gpLDgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iP+Clp+ClqOClqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2NoYXJhY3RlciIgbXNnaWQ9IjczMzY0NzA1MzUzODUwMDk1MjMiPiLgpIXgpJXgpY3gpLfgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF93b3JkIiBtc2dpZD0iNzA3NTU3MDMyODM3NDkxODY2MCI+IuCktuCkrOCljeCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2xpbmsiIG1zZ2lkPSI1ODE1NTA4ODgwNzgyNDg4MjY3Ij4i4KSy4KS/4KSZ4KWN4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluZSIgbXNnaWQ9IjU3NjQyNjcyMzUwMjYxMjA4ODgiPiLgpLLgpL7gpIfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX2FtcG0iIG1zZ2lkPSI0NTg0MzM4MDgzNTI5MzU1OTgyIj4iPHhsaWZmOmcgaWQ9IkhPVVIiPiUtbDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iQU1QTSI+JVA8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9jYXBfYW1wbSIgbXNnaWQ9IjIwODM0NjU5OTI5NDA0NDQzNjYiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lcDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9mYWlsZWQiIG1zZ2lkPSI1NDEwMjcwMzI5MTE0MjEyMDQxIj4i4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+IOCkquCksOClgOCkleCljeCkt+CkoyDgpIXgpLjgpKvgpLIg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiJGQUNUT1JZX1RFU1Qg4KSV4KS+4KSw4KWN4KSw4KS14KS+4KSH4KSy4KWHIC9zeXN0ZW0vYXBwIOCkruCkviDgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSq4KWN4KSv4KS+4KSV4KWH4KSc4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpK7gpL7gpKTgpY3gpLAg4KS44KSu4KSw4KWN4KSl4KSoIOCkl+CksOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+IuCkleClgeCkqOCliCDgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KSr4KWH4KSy4KS+IOCkquCkvuCksOCljeCkqCDgpLjgpJXgpL/gpI/gpKgg4KSc4KS44KSy4KWHIEZBQ1RPUllfVEVTVCDgpJXgpL7gpLDgpY3gpK8g4KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X3JlYm9vdCIgbXNnaWQ9IjYzMjAxNjgyMDMwNTA3OTE2NDMiPiLgpKrgpYHgpKjgpIPgpKzgpYHgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMTk4NzQ4Mzk3NzgzNDYwMzg3MiI+IuCkr+CkuCBcIjx4bGlmZjpnIGlkPSJUSVRMRSI+JXM8L3hsaWZmOmc+XCIg4KSu4KS+IOCkreCkj+CkleCliyDgpKrgpYPgpLfgpY3gpKDgpLLgpYcg4KSs4KSk4KS+4KSJ4KSB4KSbOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNjk2MTkwMzIxMzcyOTY2NzU3MyI+IuCknOCkvuCkreCkvuCkuOCljeCkleCljeCksOCkv+CkquCljeCknyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3RpdGxlIiBtc2dpZD0iMjYxOTM3NjU1NTUyNTExNjU5MyI+IuCkruCkvuCksOCljeCkl+CkqOCkv+CksOCljeCkpuClh+CktuCkqCDgpKrgpJXgpY3gpJXgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfcG9zaXRpdmVfYnV0dG9uIiBtc2dpZD0iMzExMjc1MjAxMDYwMDQ4NDEzMCI+IuCkr+CkuCDgpKrgpYPgpLfgpY3gpKDgpLLgpL7gpIgg4KSb4KWL4KSh4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfbmVnYXRpdmVfYnV0dG9uIiBtc2dpZD0iNTYxNDg2MTI5MzAyNjA5OTcxNSI+IuCkr+CkueClgCDgpKrgpYPgpLfgpY3gpKDgpK7gpL4g4KSw4KS54KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWQiIG1zZ2lkPSIzNDY4ODE2MzU3MDk1Mzc4NTkwIj4iPHhsaWZmOmcgaWQ9Ik1FU1NBR0UiPiVzPC94bGlmZjpnPlxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CliyDgpKrgpYfgpJzgpKzgpL7gpJ8g4KSo4KWH4KSt4KS/4KSX4KWH4KSfIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYEg4KS54KWB4KSo4KWN4KSbIOCkreCkqOCljeCkqOClhyDgpKjgpL/gpLbgpY3gpJrgpKQg4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbGFiZWwiIG1zZ2lkPSI2ODYwMjYxNzU4NjY1ODI1MDY5Ij4i4KSo4KS/4KS24KWN4KSa4KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvdWJsZV90YXBfdG9hc3QiIG1zZ2lkPSI0NTk1MDQ2NTE1NDAwMjY4ODgxIj4i4KSc4KWB4KSV4KWN4KSk4KS/OiDgpJzgpYHgpK7gpLLgpL7gpIgg4KSg4KWC4KSy4KWLIOCksCDgpLjgpL7gpKjgpYsg4KSq4KS+4KSw4KWN4KSoIOCkpuClgeCkiCDgpKrgpJ/gpJUg4KS54KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfdGhpc19mb3JtIiBtc2dpZD0iNDYxNjc1ODg0MTE1NzgxNjY3NiI+IuCkuOCljeCkteCkpOCkgyDgpK3gpLDgpY3gpKjgpYciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXR1cF9hdXRvZmlsbCIgbXNnaWQ9IjcxMDM0OTUwNzAxODA1OTA4MTQiPiLgpIXgpJ/gpYvgpKvgpL/gpLIg4KS44KWH4KSf4KSF4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3NfbmFtZV9zZXBhcmF0b3IiIG1zZ2lkPSI2MzUwMTQ1MTU0Nzc5NzA2NzcyIj4iICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9uYW1lX2Zvcm1hdCIgbXNnaWQ9IjMyNjgwNDEwNTQ4OTkyMTQ5NDUiPiIk4KWnJOClqCTgpakiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfc2VwYXJhdG9yIiBtc2dpZD0iNzQ4MzMwNzg5MzE3MDMyNDEyOSI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X2Zvcm1hdCIgbXNnaWQ9IjQ4NzQ0NTk0NTU3ODY4MjczNDQiPiIkMSQyJDMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcm92aW5jZSIgbXNnaWQ9IjIyMzE4MDY1NTM4NjM0MjIzMDAiPiLgpKrgpY3gpLDgpL7gpKjgpY3gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wb3N0YWxfY29kZSIgbXNnaWQ9IjQ2OTY0MzA0MDc2ODkzNzcxMDgiPiLgpLngpYHgpLLgpL7gpJXgpYAg4KSV4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfc3RhdGUiIG1zZ2lkPSI2OTg4ODk0MTk1NTIwMDQ0NjEzIj4i4KSw4KS+4KSc4KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfemlwX2NvZGUiIG1zZ2lkPSI4Njk3NTQ0NTkyNjI3MzIyOTQ2Ij4iWklQIOCkleCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2NvdW50eSIgbXNnaWQ9IjIzNzA3Mzc3MTAyMDM2Mjg5MSI+IuCkleCkvuCkieCkqOCljeCkn+ClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2lzbGFuZCIgbXNnaWQ9IjQwMjAxMDA4NzU5ODQ2NjcwMjUiPiLgpJ/gpL7gpKrgpYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kaXN0cmljdCIgbXNnaWQ9Ijg0MDA3MzUwNzMzOTIyNjc2NzIiPiLgpJzgpL/gpLLgpY3gpLLgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kZXBhcnRtZW50IiBtc2dpZD0iNTM0MzI3OTQ2MjU2NDQ1MzMwOSI+IuCkteCkv+CkreCkvuCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ByZWZlY3R1cmUiIG1zZ2lkPSIyMDI4NDk5NDg1MDY1ODAwNDE5Ij4i4KSq4KWN4KSw4KS24KS+4KS44KSV4KWA4KSvIOCkleCljeCkt+Clh+CkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3BhcmlzaCIgbXNnaWQ9IjgyMDIyMDYxMDU0Njg4MjAwNTciPiLgpKrgpYfgpLDgpL/gpLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hcmVhIiBtc2dpZD0iMzU0NzQwOTA1MDg4OTk1MjQyMyI+IuCkleCljeCkt+Clh+CkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2VtaXJhdGUiIG1zZ2lkPSIyODkzODgwOTc4ODM1Njk4ODE4Ij4i4KSH4KSu4KS/4KSw4KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3NzUyNjU3NzU0MDUxMDY5ODMiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpL4g4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSV4KS54KSw4KWCIOCksCDgpIfgpKTgpL/gpLngpL7gpLgg4KSq4KSi4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4i4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSy4KWHIOCkreCljeCksOCkruCkoyDgpJfgpLDgpYfgpJXgpYsg4KS44KSs4KWIIFVSTCDgpLngpLDgpYLgpJXgpYsg4KSH4KSk4KS/4KS54KS+4KS4IOCksCDgpKzgpY3gpLDgpL7gpIngpJzgpLDgpJXgpL4g4KS44KSs4KWIIOCkrOClgeCkleCkruCkvuCksOCljeCkleCkueCksOClgiDgpKrgpKLgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkqOCli+Cknzog4KSv4KWLIOCkheCkqOClgeCkruCkpOCkv+CksuCkvuCkiCDgpKTgpYfgpLjgpY3gpLDgpYsg4KSq4KSV4KWN4KS3IOCkrOCljeCksOCkvuCkieCknOCksOCkueCksOClguCkpuCljeCkteCkvuCksOCkviDgpLXgpL4g4KS14KWH4KSsIOCkrOCljeCksOCkvuCkieCknCDgpJfgpLDgpY3gpKjgpYcg4KSV4KWN4KS34KSu4KSk4KS+4KSm4KWN4KS14KS+4KSw4KS+IOCkrOCksuCkquClguCksOCljeCkteCklSDgpJfgpLDgpL7gpIngpKgg4KS44KSV4KS/4KSB4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzE0Nzg1MTY1MjczMzE0NDkwIj4i4KS14KWH4KSsIOCkrOClgeCkleCkruCkvuCksOCljeCkleCkueCksOClgiDgpLAg4KSH4KSk4KS/4KS54KS+4KS4IOCksuClh+CkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IOCkreCko+CljeCkoeCkvuCksCDgpJfgpLDgpL/gpI/gpJXgpYsg4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSV4KWLIOCkh+CkpOCkv+CkueCkvuCkuCDgpLXgpL4g4KSs4KWB4KSV4KSu4KS+4KSw4KWN4KSV4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkrOCljeCksOCkvuCknOCksCDgpKHgpYfgpJ/gpL4g4KSu4KWH4KSf4KS+4KSJ4KSoIOCkteCkviDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KS44KSV4KWN4KSm4KSb4KWkIOCkn+Ckv+CkquCljeCkquCko+ClgDog4KSv4KWLIOCkheCkqOClgeCkruCkpOCkvyDgpLXgpYfgpKwg4KSs4KWN4KSw4KS+4KSJ4KScIOCkl+CksOCljeCkqOClhyDgpJXgpY3gpLfgpK7gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KS44KS+4KSlIOCkpOClh+CkuOCljeCksOCliy3gpKrgpL7gpLDgpY3gpJ/gpYAg4KSs4KWN4KSw4KS+4KSJ4KSc4KSwIOCkteCkviDgpIXgpKjgpY3gpK8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSm4KWN4KS14KS+4KSw4KS+IOCksuCkvuCkl+ClgiDgpJfgpLDgpL/gpI/gpJXgpYsg4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODQ5NzM4OTUzMTAxNDE4NTUwOSI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKjgpK7gpL4g4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkreCkj+CkleCliyDgpKzgpY3gpLDgpL7gpIngpJzgpLDgpJXgpYsg4KSH4KSk4KS/4KS54KS+4KS4IOCkteCkviDgpKzgpYHgpJXgpK7gpL7gpLDgpY3gpJXgpLngpLDgpYIg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS44KSy4KWHIOCkuOCkvuCkr+CkpiDgpKzgpY3gpLDgpL7gpIngpJzgpLAg4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkruClh+Ckn+CljeCkqCDgpLXgpL4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSo4KWL4KSfOiDgpLXgpYfgpKwg4KSs4KWN4KSw4KS+4KSJ4KScIOCkl+CksOCljeCkqOClhyDgpJXgpY3gpLfgpK7gpKTgpL7gpLjgpLngpL/gpKTgpJXgpL4g4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLXgpL4g4KSk4KWH4KS44KWN4KSw4KWLLSDgpKrgpJXgpY3gpLcg4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSm4KWN4KS14KS+4KSw4KS+IOCkuOCkvuCkr+CkpiDgpK/gpLgg4KSF4KSo4KWB4KSu4KSk4KS/4KSy4KS+4KSIIOCksuCkvuCkl+ClgSDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSC4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbGFybSIgbXNnaWQ9IjEzNzkyOTQ1NTYzNjIwOTE4MTQiPiLgpI/gpIngpJ/gpL4g4KSG4KSy4KSw4KWN4KSuIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRBbGFybSIgbXNnaWQ9IjMxNjM5MjAzOTE1NzQ3Mzg0OCI+IuCkuOCljeCkpeCkvuCkquCkqOCkviDgpJfgpLDgpL/gpI/gpJXgpYsg4KS44KSZ4KWN4KSV4KWH4KSkIOCkmOCkoeClgCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KS44KSZ4KWN4KSV4KWH4KSkIOCkuOCkruCkryDgpK7gpL/gpLLgpL7gpIngpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSV4KWH4KS54KWAIOCkuOCkmeCljeCkleClh+CkpCDgpJjgpKHgpYAg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyDgpLjgpYHgpLXgpL/gpKfgpL4g4KSV4KS+4KSw4KWN4KSv4KS+4KSo4KWN4KS14KSv4KSoIOCkqOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjU1MjU2NjAwMjYwOTA5NTkwNDQiPiLgpK3gpY3gpLXgpL7gpIfgpLjgpK7gpYfgpLIg4KSl4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjY2MDQ1MDg2NTE0MjgyNTI0MzciPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSt4KWN4KS14KS+4KSH4KS44KSu4KWH4KSyIOCkh+CkqOCkrOCkleCljeCkuOCkruCkviDgpLjgpKjgpY3gpKbgpYfgpLYg4KSl4KSq4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iNTk2MjIyNDE1ODk1NTI3MzkzMiI+IuCkreClguCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpK7gpKTgpL/gpLngpLDgpYIg4KSs4KWN4KSw4KS+4KSJ4KSc4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSIxMDgzNzQzMjM0NTIyNjM4NzQ3Ij4i4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSV4KWLIOCkreClgi3gpLjgpY3gpKXgpL7gpKgg4KSF4KSo4KWB4KSu4KSk4KS/4KS54KSw4KWCIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyAg4KS44KWN4KSl4KS+4KSoIOCkuOClguCkmuCkqOCkviDgpK7gpKjgpKrgpLDgpYAg4KS14KWH4KSsIOCkuOCkvuCkh+Ckn+CkueCksOClguCkruCkviDgpKrgpKDgpL7gpIngpKjgpYcg4KSF4KSo4KWB4KSu4KSk4KS/4KSV4KWLIOCksuCkvuCkl+CkvyDgpK/gpLjgpLLgpL7gpIgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9IjU1NjgxMzkxMDA2NDU4MjkxMTciPiLgpKrgpY3gpK/gpJXgpYfgpJzgpLngpLDgpYLgpJXgpYsg4KSo4KS/4KSw4KWA4KSV4KWN4KS34KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BhY2thZ2VWZXJpZmljYXRpb25BZ2VudCIgbXNnaWQ9Ijg0Mzc1OTAxOTA5OTA4NDMzODEiPiLgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkr+Cli+Ckl+CljeCkryDgpJsg4KSV4KS/IOCkreCkqOClh+CksCDgpLDgpYHgpJzgpYEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iNDE4Nzc4Njc5MzM2MDMyNjY1NCI+IuCkj+CkieCkn+CkviDgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KSw4KWB4KSc4KWB4KSV4KSw4KWN4KSk4KS+4KSu4KS+IOCkrOCkvuCkgeCkp+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSIzMTgwNzQxNzczMjMzODYyMTI2Ij4i4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkquCljeCkr+CkvuCkleClh+CknCDgpKrgpY3gpLDgpK7gpL7gpKPgpL/gpKTgpJXgpLDgpY3gpKTgpL7gpLngpLDgpYLgpJXgpYsg4KSF4KSo4KWB4KSw4KWL4KSn4KS54KSw4KWCIOCkrOCkqOCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWHIOCkquCkqOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSo4KSq4KSw4KWN4KSoIOCkuOCkleCljeCkpuCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VyaWFsUG9ydCIgbXNnaWQ9IjU0NjA4MzMyNzY1NDYzMTA3NiI+IuCkquCkueClgeCkgeCkmiDgpLjgpL/gpLDgpL/gpK/gpLIg4KSq4KWL4KSw4KWN4KSf4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiLgpLngpYvgpLLgpY3gpKHgpLDgpLLgpL7gpIggU2VyaWFsTWFuYWdlciBBUEkg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CksCDgpLjgpL/gpLDgpL/gpK/gpLIg4KSq4KWL4KSw4KWN4KSf4KS54KSw4KWCIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29udGVudFByb3ZpZGVyc0V4dGVybmFsbHkiIG1zZ2lkPSI1MDc3Nzc0Mjk3OTQzNDA5Mjg1Ij4i4KS14KS/4KS34KSv4KS44KWC4KSa4KWAIOCkquCljeCksOCkpuCkvuCkpOCkvuCksuCkvuCkiCDgpKzgpL7gpLngpY3gpK8g4KSw4KWC4KSq4KSu4KS+IOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjQ1NDQzNDY0ODY2OTc4NTM2ODUiPiLgpLjgpYfgpLLgpKzgpL7gpJ8g4KSn4KS+4KSw4KSV4KSy4KWHIOCkteCkv+Ckt+Ckr+CkteCkuOCljeCkpOClgSDgpKrgpY3gpLDgpKbgpL7gpK/gpJXgpLngpLDgpYLgpLjgpK7gpY3gpK7gpJXgpYsg4KSq4KS54KWB4KSB4KSaIOCkquCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpLLgpL7gpIgg4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkhuCkteCktuCljeCkr+CklSDgpKrgpLDgpY3gpKbgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUxvY2siIG1zZ2lkPSIzNTI3NTU4MzY2NjE2NjgwODg5Ij4i4KS44KWN4KS14KSa4KS+4KSy4KS/4KSkIOCkieCkquCkleCksOCkoyDgpIXgpKrgpKHgpYfgpJ/gpLngpLDgpYIg4KS54KSk4KWL4KSk4KWN4KS44KS+4KS54KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUxvY2siIG1zZ2lkPSIxNjU1NjI1ODMyMTY2Nzc4NDkyIj4i4KS54KWL4KSy4KWN4KSh4KSw4KSy4KS+4KSIIOCkieCkquCkleCksOCkoyDgpIXgpKrgpJfgpY3gpLDgpYfgpKEg4KSX4KSw4KWN4KSoIOCkl+CliOCksCDgpKrgpL7gpLDgpLjgpY3gpKrgpLDgpL/gpJUg4KSq4KWB4KSo4KSD4KSs4KWB4KSf4KSV4KWLIOCksuCkvuCkl+CkvyDgpIngpJrgpL/gpKQg4KS44KSu4KSv4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpKrgpY3gpLDgpKPgpL7gpLLgpYDgpK7gpL4g4KSc4KS+4KSo4KS+4KSV4KS+4KSw4KWAIOCkquCljeCksOCkuOCljeCkpOCkvuCkteCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbWVzc2FnZSIgbXNnaWQ9Ijc2NzM0NDY4NzEzOTE5NTc5MCI+IuCkleClhyDgpKTgpKrgpL7gpIjgpIIg4KSs4KWN4KSw4KS+4KSJ4KSc4KSw4KSy4KWHIOCkr+CliyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KS44KSu4KWN4KSd4KWH4KSV4KWLIOCkmuCkvuCkueCkqOClgeCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25vdG5vdyIgbXNnaWQ9IjYzODk2NzUzMTY3MDY2OTk3NTgiPiLgpIXgpLngpL/gpLLgpYcg4KS54KWL4KSH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9yZW1lbWJlciIgbXNnaWQ9IjY0OTE4Nzk2Nzg5OTY3NDk0NjYiPiLgpLjgpK7gpY3gpJ3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25ldmVyIiBtc2dpZD0iODI3NDMzMDI5Njc4NTg1NTEwNSI+IuCkleCkueCkv+CksuCljeCkr+CliCDgpKrgpKjgpL8g4KS54KWL4KSH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4i4KSv4KWLIOCkquClg+Ckt+CljeCkoCDgpJbgpYvgpLLgpY3gpKgg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXh0X2NvcGllZCIgbXNnaWQ9IjQ5ODU3Mjk1MjQ2NzAxMzEzODUiPiLgpJXgpY3gpLLgpL/gpKrgpKzgpYvgpLDgpY3gpKHgpK7gpL4g4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSqIOCkl+CksOCkv+Ckj+CkleCliyDgpKrgpL7gpKDgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb3JlX2l0ZW1fbGFiZWwiIG1zZ2lkPSI0NjUwOTE4OTIzMDgzMzIwNDk1Ij4i4KSs4KSi4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcGVuZF9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI1NzIyMTQ0NjE2NzYwMTU2NDIiPiLgpK7gpYfgpKjgpYErIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zcGFjZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI0MTAzMjg2MzkyNzIxNjI1MzciPiLgpKDgpL7gpIngpIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2VudGVyX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjc0MzM2Mjc4NTExMTMwOTY2OCI+IuCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjM2NTgxNzgwMDcyMDI3NDgxNjQiPiLgpK7gpYfgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2hfZ28iIG1zZ2lkPSI4Mjk4MDE2NjY5ODIyMTQxNzE5Ij4i4KSW4KWL4KSc4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zZWFyY2giIG1zZ2lkPSI2NzQ5ODI2NjM5MDk4NTEyMTIwIj4i4KSW4KWL4KSc4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9xdWVyeSIgbXNnaWQ9IjU5MTE3Nzg1OTMxMjUzNTUxMjQiPiLgpJzgpL/gpJzgpY3gpJ7gpL7gpLjgpL4g4KSW4KWL4KScIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fY2xlYXIiIG1zZ2lkPSIxMzMwMjgxOTkwOTUxODMzMDMzIj4i4KSq4KWN4KSw4KS24KWN4oCN4KSoIOCkueCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc3VibWl0IiBtc2dpZD0iMjY4ODQ1MDEzMzI5Nzk4MzU0MiI+IuCknOCkv+CknOCljeCknuCkvuCkuOCkviDgpKrgpYfgpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl92b2ljZSIgbXNnaWQ9IjI0NTMyMDM2OTU2NzQ5OTQ0NDAiPiLgpK3gpY3gpLXgpL7gpIfgpLgg4KSW4KWL4KSc4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ190aXRsZSIgbXNnaWQ9Ijc0NjA2OTQwNzAzMDk3MzAxNDkiPiLgpJvgpYvgpI/gpLAg4KSF4KSo4KWN4KS14KWH4KS34KSjIOCkl+CksOCljeCkqOClhyDgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NjU1ODg3NTM5MDg5OTEwNTc3Ij4iPHhsaWZmOmcgaWQ9IkFDQ0VTU0lCSUxJVFlfU0VSVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPuCksuClhyDgpLjgpY3gpKrgpLDgpY3gpLfgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSo4KWN4KS14KWH4KS34KSjIOCkuOCkleCljeCkt+CkriDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWN4KSb4KWkIOCkuOCljeCkquCksOCljeCkt+CkpuCljeCkteCkvuCksOCkviDgpIXgpKjgpY3gpLXgpYfgpLfgpKMg4KS44KSV4KWN4KS34KSuIOCkreCkj+CkleCliyDgpKzgpYfgpLLgpL4sIOCkpOCkquCkvuCkiOCkgSDgpIbgpKvgpY3gpKjgpYsg4KSU4KSB4KSy4KS+4KSV4KWLIOCkruClgeCkqOCkvyDgpK3gpI/gpJXgpL4g4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWB4KS54KSw4KWCIOCkrOCkvuCksOClhyDgpLjgpYHgpKjgpY3gpKgg4KS14KS+IOCkteCkv+CkteCksOCkoyDgpLngpYfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkteCkviDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLjgpIHgpJcg4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpIfgpLbgpL7gpLDgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjcwODE5OTY3Mjg1MjM3MzE5NSI+Ijx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz7gpLLgpYcg4KS44KWN4KSq4KSw4KWN4KS34KSm4KWN4KS14KS+4KSw4KS+IOCkheCkqOCljeCkteClh+Ckt+CkoyDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOCljeCkm+ClpCDgpLjgpY3gpKrgpLDgpY3gpLfgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSo4KWN4KS14KWH4KS34KSjIOCkuOCkleCljeCkt+CkriDgpK3gpI/gpJXgpYsg4KSs4KWH4KSy4KS+IOCkpOCkquCkvuCkiOCkgSDgpIbgpKvgpY3gpKjgpYsg4KSU4KSB4KSy4KS+4KSV4KWLIOCkruClgeCkqOCkvyDgpK3gpI/gpJXgpL4g4KS14KS/4KS34KSv4KS14KS44KWN4KSk4KWB4KS54KSw4KWCIOCkrOCkvuCksOClhyDgpLjgpYHgpKjgpY3gpKgg4KS14KS+IOCkteCkv+CkteCksOCkoyDgpLngpYfgpLDgpY3gpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkteCkviDgpKvgpYvgpKjgpLjgpIHgpJcg4KSF4KSo4KWN4KSk4KSw4KWN4KSV4KWN4KSw4KS/4KSv4KS+IOCkl+CksOCljeCkqCDgpIfgpLbgpL7gpLDgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI3Mzk2Mzg0NTA4OTUzNzc5OTI1Ij4i4KWnIOCkruCkueCkv+CkqOCkviDgpIXgpJjgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiZWZvcmVPbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjkwOTEzNDU0NjgzNjQ5OTgyNiI+IuClpyDgpK7gpLngpL/gpKjgpL4g4KSF4KSY4KS/Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJudW1fc2Vjb25kc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0ODY5ODcwMDU2NTQ3ODk2MDExIj4i4KWnIOCkuOClh+CkleClh+CkqOCljeCkoSDgpIXgpJjgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM5MDM3MDY4MDQzNDk1NTYzNzkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKEg4KSF4KSY4KS/IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJudW1fbWludXRlc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMzA2Nzg3NDMzMDg4ODEwMTkxIj4i4KWnIOCkruCkv+CkqOClh+CknyDgpIXgpJjgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIxNzY5NDIwMDg5MTU0NTUxMTYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpK7gpL/gpKjgpYfgpJ8g4KSF4KSY4KS/IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJudW1faG91cnNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iOTE1MDc5Nzk0NDYxMDgyMTg0OSI+IuClpyDgpJjgpKjgpY3gpJ/gpL4g4KSF4KSY4KS/IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDY3MjczMjM5NTg3NTg3NTY5Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSY4KSo4KWN4KSf4KS+IOCkheCkmOCkvyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0ibGFzdF9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzA2OTk5MjgwODE2NDMxODI2OCI+IuCkheCkqOCljeCkpOCkv+CkriA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpKbgpL/gpKgiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJsYXN0X21vbnRoIiBtc2dpZD0iMzk1OTM0NjczOTk3OTA1NTQzMiI+IuCkheCkqOCljeCkpOCkv+CkriDgpK7gpLngpL/gpKjgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRlciIgbXNnaWQ9IjUyMTE5NzUwMjI4MTU1NTQ4NDAiPiLgpKrgpYHgpLDgpL7gpKjgpYsiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im51bV9kYXlzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9Ijg2MTM1ODUzNDM5ODExNTgyMCI+IuCkueCkv+CknOCliyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjQ3OTU4NjQ2NjE1MzMxNDYzMyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOCkpuCkv+CkqCDgpIXgpJjgpL8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9zZWNvbmRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMjcyOTc0NTU2MDk1NDkwNTEwMiI+IuClpyDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEyNDE5MjYxMTY0NDM5NzQ2ODciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODc5MzA5NTI1MTMyNTIwMDM5NSI+IuClpyDgpK7gpL/gpKjgpYfgpJ/gpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMzMzA3MTM5MzYzOTk0NDg3NDkiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPuCkruCkv+CkqOClh+Ckn+CkruCkviI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNzE2NDM1MzM0MjQ3Nzc2OTk5OSI+IuClpyDgpJjgpKjgpY3gpJ/gpL7gpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzI5MDY3NzM1MzcyNzM4OSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOCkmOCkqOCljeCkn+CkvuCkruCkviI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NDEzMDg4NzQzMDA5ODM5NTE4Ij4i4KSt4KWL4KSy4KS/IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1MTA5NDQ5Mzc1MTAwOTUzMjQ3Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSm4KS/4KSo4KSu4KS+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX3NlY29uZHNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMTg0OTAzNjg0MDIwMDA2OTExOCI+IuClpyDgpLjgpYfgpJXgpYfgpKjgpY3gpKEg4KSF4KSY4KS/IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNjk5MTY5MzY2NjUwOTMwNDE1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KShIOCkheCkl+CkvuCkoeCkvyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9taW51dGVzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjYzNjE0OTAxNDcxMTM4NzE1NDUiPiLgpacg4KSu4KS/4KSo4KWH4KSfIOCkheCkmOCkvyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODUxMTY0OTY4NTk3MTUwNzEwIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSu4KS/4KSo4KWH4KSfIOCkheCkmOCkvyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X251bV9ob3Vyc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0Nzk2MjEyMDM5NzI0NzIyMTE2Ij4i4KWnIOCkmOCkqOCljeCkn+CkviDgpIXgpJjgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY4ODk5NzA3NDU3NDg1Mzg5MDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpJjgpKjgpY3gpJ/gpL4g4KSF4KSY4KS/IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2RheXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODQ2MzE2MTcxMTQ5MjY4MDMwOSI+IuCkueCkv+CknOCliyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzQ1MzM0MjYzOTYxNjQ4MTE5MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOCkpuCkv+CkqCDgpIXgpJjgpL8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NDIyMjUzNzA3OTUwNjYyOTkiPiLgpacg4KS44KWH4KSV4KSo4KWN4KShIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDk1ODgwMTA4ODI1ODA1MTA4Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX21pbnV0ZXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NjI3ODYxNDk5MjgyODQ4NzgiPiLgpacg4KSu4KS/4KSo4KWH4KSf4KSu4KS+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MjE2MTEzMjkyNzA2NTY4NzI2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KSu4KS/4KSo4KWH4KSf4KSu4KS+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfaW5fbnVtX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI3NDcwODExODEyNDA0NTI0NiI+IuClpyDgpJjgpKjgpY3gpJ/gpL7gpK7gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM3MDUzNzM3NjY3OTgwMTM0MDYiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpJjgpKjgpY3gpJ/gpL7gpK7gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjIxNzg1NzYyNTQzODU3Mzk4NTUiPiLgpK3gpYvgpLLgpL8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI5NzMwNjI5NjgwMzgzNTU5OTEiPiLgpKbgpL/gpKg8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpK7gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfZGF0ZSIgbXNnaWQ9IjkwOTM5NDk3NTc3NTc0NDUxMTciPiI8eGxpZmY6ZyBpZD0iREFURSI+JXM8L3hsaWZmOmc+IOCkruCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl90aW1lIiBtc2dpZD0iNTUwNjgzMTI0NDI2MzA4Mzc5MyI+Ijx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4g4KSu4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3llYXIiIG1zZ2lkPSI1MDQwMzk1NjQwNzExODY3MTc3Ij4iPHhsaWZmOmcgaWQ9IllFQVIiPiVzPC94bGlmZjpnPiDgpK7gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXkiIG1zZ2lkPSI4MTQ0MTk1Nzc2MDU4MTE5NDI0Ij4i4KSm4KS/4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5cyIgbXNnaWQ9IjQ3NzQ1NDc2NjEwMjEzNDQ2MDIiPiLgpKbgpL/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyIiBtc2dpZD0iMjEyNjc3MTkxNjQyNjE4OTQ4MSI+IuCkmOCkqOCljeCkn+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJzIiBtc2dpZD0iODk0NDI0MDA1MjY2ODUyOTkzIj4i4KSY4KSo4KWN4KSf4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlIiBtc2dpZD0iOTE0ODg3ODY1NzcwMzc2OTg2OCI+IuCkruCkv+CkqOClh+CknyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZXMiIG1zZ2lkPSI1NjQ2MDAxMDA1ODI3MDM0NTA5Ij4i4KSu4KS/4KSo4KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kIiBtc2dpZD0iMzE4NDIzNTgwODAyMTQ3OCI+IuCkuOClh+CkleClh+CkqOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlY29uZHMiIG1zZ2lkPSIzMTYxNTE1MzQ3MjE2NTg5MjM1Ij4i4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VlayIgbXNnaWQ9IjU2MTc5NjE1MzcxNzMwNjE1ODMiPiLgpLngpKrgpY3gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWVrcyIgbXNnaWQ9IjY1MDk2MjM4MzQ1ODM5NDQ1MTgiPiLgpLngpKrgpY3gpKTgpL7gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyIiBtc2dpZD0iNDAwMTExODIyMTAxMzg5MjA3NiI+IuCkteCksOCljeCktyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJzIiBtc2dpZD0iNjg4MTU3NzcxNzk5MzIxMzUyMiI+IuCkteCksOCljeCkt+CkueCksOClgiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY5NjIwMTU1MjgzNzI5Njk0ODEiPiLgpacg4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxODg2MTA3NzY2NTc3MTY2Nzg2Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KShIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJkdXJhdGlvbl9taW51dGVzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDkxNTQxNDAwMjU0NjA4NTYxNyI+IuClpyDgpK7gpL/gpKjgpYfgpJ8iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMxNjUxODcxNjkyMjQ5MDg3NzUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpK7gpL/gpKjgpYfgpJ8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX2hvdXJzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODkxNzQ2NzQ5MTI0ODgwOTk3MiI+IuClpyDgpJjgpKjgpY3gpJ/gpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM4NjM5NjI4NTQyNDY3NzM5MzAiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgpJjgpKjgpY3gpJ/gpL4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGl0bGUiIG1zZ2lkPSIzNTM0NTA5MTM1NDM4MzUzMDc3Ij4i4KSt4KS/4KSh4KS/4KSv4KWLIOCkuOCkruCkuOCljeCkr+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90ZXh0X2ludmFsaWRfcHJvZ3Jlc3NpdmVfcGxheWJhY2siIG1zZ2lkPSIzMTg2NjcwMzM1OTM4NjcwNDQ0Ij4i4KSv4KWLIOCkreCkv+CkoeCkv+Ckr+CliyDgpK/gpLgg4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpY3gpJ/gpY3gpLDgpL/gpK7gpL/gpJkg4KSX4KSw4KWN4KSoIOCkruCkvuCkqOCljeCkryDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF91bmtub3duIiBtc2dpZD0iMzQ1MDQzOTE1NTE4NzgxMDA4NSI+IuCkr+CliyDgpK3gpL/gpKHgpL/gpK/gpYsg4KSa4KSy4KS+4KSJ4KSoIOCkuOCkleCljeCkpuCliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl9idXR0b24iIG1zZ2lkPSIyODIyMjM4MjE1MTAwNjc5NTkyIj4i4KSg4KWA4KSVIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aXZlX3RpbWUiIG1zZ2lkPSIxODE4NTU3MTc3ODI5NDExNDE3Ij4iPHhsaWZmOmcgaWQ9IkRBVEUiPiUxJHM8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub29uIiBtc2dpZD0iNzI0NTM1MzUyODgxODU4NzkwOCI+IuCkruCkp+CljeCkr+CkvuCkqOCljeCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Ik5vb24iIG1zZ2lkPSIzMzQyMTI3NzQ1MjMwMDEzMTI3Ij4i4KSu4KSn4KWN4KSv4KS+4KSo4KWN4KS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWlkbmlnaHQiIG1zZ2lkPSI3MTY2MjU5NTA4ODUwNDU3NTk1Ij4i4KSu4KSn4KWN4KSv4KSw4KS+4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iTWlkbmlnaHQiIG1zZ2lkPSI1NjMwODA2OTA2ODk3ODkyMjAxIj4i4KSu4KSn4KWN4KSv4KSw4KS+4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWxhcHNlZF90aW1lX3Nob3J0X2Zvcm1hdF9tbV9zcyIgbXNnaWQ9IjQ0MzE1NTU5NDM4Mjg3MTE0NzMiPiI8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTEkMDJkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iU0VDT05EUyI+JTIkMDJkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsYXBzZWRfdGltZV9zaG9ydF9mb3JtYXRfaF9tbV9zcyIgbXNnaWQ9IjE4NDYwNzE5OTc2MTY2NTQxMjQiPiI8eGxpZmY6ZyBpZD0iSE9VUlMiPiUxJGQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJNSU5VVEVTIj4lMiQwMmQ8L3hsaWZmOmc+Ojx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMyQwMmQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0QWxsIiBtc2dpZD0iNjg3NjUxODkyNTg0NDEyOTMzMSI+IuCkuOCkrOCliOCksuCkvuCkiCDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCkleCkvuCkn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSq4KS/IOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCkn+CkvuCkgeCkuOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4KS14KS/4KS44KWN4KSl4KS+4KSq4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCDgpJXgpYsg4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuCkquCkvuCkoCDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IuCkquCkvuCkoCDgpJrgpK/gpKjgpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4KS24KSs4KWN4KSm4KSV4KWL4KS24KSu4KS+IOCkpeCkquCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRNZXRob2QiIG1zZ2lkPSIxNjUzNjMwMDYyMzA0NTY3ODc5Ij4i4KSo4KS/4KS14KWH4KS2IOCkteCkv+Ckp+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVkaXRUZXh0TWVudVRpdGxlIiBtc2dpZD0iNDkwOTEzNTU2NDk0MTgxNTQ5NCI+IuCkquCkvuCkoCDgpJXgpL7gpLDgpY3gpK/gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RpdGxlIiBtc2dpZD0iNTU3NjI3MjQ5NjM2NTY4NDgzNCI+IuCkreCko+CljeCkoeCkvuCksOCkoyDgpKDgpL7gpIngpIEg4KS44KSV4KS/4KSB4KSm4KWIIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbnRlcm5hbF9zdG9yYWdlX3ZpZXdfdGV4dCIgbXNnaWQ9IjY2NDA1MDU4MTc2MTc0MTQzNzEiPiLgpLjgpL7gpK/gpKYg4KSV4KWH4KS54KWAIOCkquCljeCksOCko+CkvuCksuClgCDgpJXgpL7gpLDgpY3gpK/gpJXgpY3gpLDgpK7gpLngpLDgpYLgpLLgpYcg4KSV4KS+4KSuIOCkl+CksOCljeCkpuCliOCkqOCkqOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijg3MTgzMzUxMjEwNjA3ODc5MTQiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkmuCksuCkv+CksOCkueClh+CkleCliyDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjQ2NTM1ODY5NDc3NDczMzAwNTgiPiLgpKXgpKog4KS44KWC4KSa4KSo4KS+4KSV4KWLIOCksuCkvuCkl+CkvyDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY0g4KS14KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2siIG1zZ2lkPSI1OTcwMDYwNDMwNTYyNTI0OTEwIj4i4KSg4KS/4KSVIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjY0NDI1NjA1NzEyNTk5MzUxMzAiPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVzIiBtc2dpZD0iNTM2Mjk4MjMwMzMzNzk2OTMxMiI+IuCkoOCkv+CklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJubyIgbXNnaWQ9IjUxNDE1MzEwNDQ5MzU1NDE0OTciPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlhbG9nX2FsZXJ0X3RpdGxlIiBtc2dpZD0iMjA0OTY1ODcwODYwOTA0MzEwMyI+IuCkuOCkvuCkteCkp+CkvuCkqOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvYWRpbmciIG1zZ2lkPSI3OTMzNjgxMjYwMjk2MDIxMTgwIj4i4KSy4KWL4KShIOCkueClgeCkgeCkpuCliC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb24iIG1zZ2lkPSIxNTQ0NjgyNzU1NTE0NDk0Mjk4Ij4i4KSa4KS+4KSy4KWBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwaXRhbF9vZmYiIG1zZ2lkPSI2ODE1ODcwMzg2OTcyODA1ODMyIj4i4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2hpY2hBcHBsaWNhdGlvbiIgbXNnaWQ9IjQ1MzMxODU5NDcwNjQ3NzMzODYiPiLgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkleCkvuCksOCkrOCkvuCkueClgCDgpKrgpYHgpLDgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+IuCkr+CkuCDgpJXgpL7gpLDgpY3gpK/gpJXgpYsg4KSy4KS+4KSX4KS/IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCkrOCkvuCknyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWC4KSu4KS+IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCksuCkvuCkiCDgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0gJmd0OyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIgJmd0OyDgpKHgpL7gpIngpKjgpLLgpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiLgpI/gpIngpJ/gpL4g4KSV4KS+4KSw4KWN4KSv4KSV4KWLIOCkmuCkr+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VVc2JBY3Rpdml0eSIgbXNnaWQ9IjY4OTQ3NDg0MTYwNzM1ODM1MDkiPiJVU0Ig4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpI/gpIngpJ/gpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vQXBwbGljYXRpb25zIiBtc2dpZD0iMjk5MTgxNDI3MzkzNjUwNDY4OSI+IuCkleClgeCkqOCliCDgpKrgpKjgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkr+CliyDgpJXgpL7gpLDgpY3gpK8g4KSX4KSw4KWN4KSoIOCkuOCkleCljeCkpuCliOCkqOCkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfdGl0bGUiIG1zZ2lkPSIxOTA1ODAwNTYwMzE3MTM3NzUyIj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfYXBwbGljYXRpb24iIG1zZ2lkPSI5MzI2Mjg0ODgwMTMwOTI3NzYiPiLgpKbgpYHgpLDgpY3gpK3gpL7gpJfgpY3gpK/gpLXgpLYsIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz7gpLLgpYcg4KSw4KWL4KSV4KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfcHJvY2VzcyIgbXNnaWQ9IjQ1MDcwNTg5OTcwMzU2OTc1NzkiPiLgpKbgpYHgpLDgpY3gpK3gpL7gpJfgpY3gpK/gpLXgpLYsIOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkviA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g4KSs4KSo4KWN4KSmIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl90aXRsZSIgbXNnaWQ9IjQzNTE5NDg0ODE0NTkxMzU3MDkiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X2FwcGxpY2F0aW9uIiBtc2dpZD0iMTkwNDQ3NzE4OTA1NzE5OTA2NiI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTIkczwveGxpZmY6Zz7gpLLgpYcg4KSV4KS+4KSw4KWN4KSvIOCkl+CksOCkv+CksOCkueClh+CkleCliyDgpJvgpYjgpKjgpaRcblxu4KSV4KWHIOCkpOCkquCkvuCkiOCkgSDgpK/gpLjgpLLgpL7gpIgg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYEg4KS54KWB4KSo4KWN4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+IuCkl+CkpOCkv+CkteCkv+Ckp+CkvyA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOCksuClhyDgpKrgpY3gpLDgpKTgpL/gpJXgpY3gpLDgpL/gpK/gpL4g4KSm4KWH4KSW4KS+4KSH4KSw4KS54KWH4KSV4KWLIOCkm+CliOCkqOClpFxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSCIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FwcGxpY2F0aW9uX3Byb2Nlc3MiIG1zZ2lkPSI4OTQxNzU3NjA3MzQwNDgxMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgpJzgpLXgpL7gpKsg4KSm4KS/4KSH4KSw4KS54KWH4KSV4KWLIOCkm+CliOCkqOClpCDgpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX3Byb2Nlc3MiIG1zZ2lkPSI2NTEzMjA5ODc0ODgwNTE3MTI1Ij4i4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+IDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPuCksuClhyDgpJXgpL7gpLDgpY3gpK8g4KSX4KSw4KS/4KSw4KS54KWH4KSV4KWLIOCkm+CliOCkqOClpFxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfY2xvc2UiIG1zZ2lkPSI4MzQ2MDcyMDk0NTIxMjY1NjA1Ij4i4KSg4KS/4KSVIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlcG9ydCIgbXNnaWQ9IjQwNjAyMTgyNjA5ODQ3OTU3MDYiPiLgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FpdCIgbXNnaWQ9IjcxNDcxMTgyMTcyMjYzMTc3MzIiPiLgpKrgpY3gpLDgpKTgpYDgpJXgpY3gpLfgpL4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VicGFnZV91bnJlc3BvbnNpdmUiIG1zZ2lkPSIzMjcyNzU4MzUxMTM4MTIyNTAzIj4i4KSq4KWD4KS34KWN4KSgIOCkl+CliOCksCDgpJzgpL/gpK7gpY3gpK7gpYfgpLXgpL7gpLDgpYAg4KSt4KSP4KSV4KWLIOCkm+ClpFxuXG7gpJXgpYcg4KSk4KSq4KS+4KSI4KSCIOCkr+CkuOCksuCkvuCkiCDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgeCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE1NDc5OTc3ODA1MDY3MTM1ODEiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSq4KWB4KSo4KSDIOCkqOCkv+CksOCljeCkpuClh+CktuClgOCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3JlcGxhY2UiIG1zZ2lkPSI2MjAyNDk4OTQ5OTcwMjgxNDEyIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpIXgpLngpL/gpLLgpYcg4KSa4KSy4KS/4KSw4KS54KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpLXgpL7gpLjgpY3gpKTgpLXgpL/gpJUg4KS44KWB4KSw4KWB4KS14KS+4KSkIOCkreCkj+CkleCliyDgpKXgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2NhbGUiIG1zZ2lkPSIzMjAyOTU1NjY3Njc1OTQ0NDk5Ij4i4KS44KWN4KSV4KWH4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3Nob3ciIG1zZ2lkPSI0MDEzODc4ODc2NDg2NjU1ODkyIj4i4KS44KSn4KWI4KSBIOCkpuClh+CkluCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+IuCkquCljeCksOCko+CkvuCksuClgCDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpK7gpL4g4KSv4KS44KSy4KS+4KSIIOCkquClgeCkqOCkg+CkuOCkleCljeCkt+CkriDgpJfgpLDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0gJmd0OyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIgJmd0OyDgpKHgpL7gpIngpKjgpLLgpYvgpKEg4KSX4KSw4KWH4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+ICjgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSDgpLLgpYcg4KSv4KS44KSV4KWLIOCkuOCljeCkteCkr+Ckgi3gpLLgpL7gpJfgpYEg4KSX4KSw4KS/4KSP4KSV4KWLIOCkuOCljeCkn+CljeCksOCkv+Ckn+CkruCli+CkoSDgpKjgpYDgpKTgpL8g4KSJ4KSy4KSZ4KWN4KSY4KSoIOCkl+CksOClh+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiLgpKrgpY3gpLDgpJXgpY3gpLDgpL/gpK/gpL4gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IOCkr+CkuOCkleCliyDgpIbgpKvgpY3gpKjgpYgg4KSV4KSh4KS+4KSu4KWL4KShIOCkqOClgOCkpOCkv+CkleCkviDgpJXgpL7gpLDgpKMg4KSJ4KSy4KWN4KSy4KSZ4KWN4KSY4KSoIOCkl+CksOCkv+Ckj+CkleCliyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ190aXRsZSIgbXNnaWQ9IjE1ODQxOTIyODU0NDE0MDU3NDYiPiLgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKEg4KSF4KSq4KSX4KWN4KSw4KWH4KShIOCkueClgeCkgeCkpuCliOCkm+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2FwayIgbXNnaWQ9Ijc5MDQwNDI2ODIxMTE1MjYxNjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSF4KSo4KWB4KSV4KWB4KSyIOCkueClgeCkgeCkpuCliCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCkleCliyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfc3RhcnRpbmdfYXBwcyIgbXNnaWQ9IjQ1MTQ2NDUxNjM0NjkyNjcxMyI+IuCkuOClgeCksOClgeCkteCkvuCkpCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19jb21wbGV0ZSIgbXNnaWQ9IjE0MDU5NTQ3NTQxMTI5OTkyMjkiPiLgpKzgpYHgpJ8g4KSq4KWB4KSw4KS+IOCkueClgeCkgeCkpuCliOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb24iIG1zZ2lkPSI5MDg3MDYzOTg1Nzc2NjI2MTY2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JTEkczwveGxpZmY6Zz4g4KSa4KSy4KS/4KSw4KS54KWH4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb25fZGV0YWlsIiBtc2dpZD0iMTcyMTY4MTc0MTYxNzg5ODg2NSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkruCkviDgpLjgpY3gpLXgpL/gpJog4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90aXRsZSIgbXNnaWQ9IjcxNTMxNjcwODU0MDMyOTgxNjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KS44KWN4KS14KS/4KSaIOCkl+CksOCljeCkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RleHQiIG1zZ2lkPSI3MDIyNjMxOTI0NTM0NDA2NDAzIj4i4KSF4KSw4KWN4KSV4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpKrgpLngpL/gpLLgpYcg4KSo4KWIIOCkmuCkvuCksuClgSDgpJsg4KSc4KWB4KSoIOCkpOCkquCkvuCkiOCkguCksuClhyDgpI/gpIngpJ/gpL4g4KSo4KSv4KS+4KSBIOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYEg4KSF4KSY4KS/IOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpKrgpLDgpY3gpKjgpYcg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkX2FwcF9hY3Rpb24iIG1zZ2lkPSI0OTMxMjkxNzIyMzg1NjYyODIiPiI8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4g4KSu4KS+IOCkq+CksOCljeCkleCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDgyMDk0Mjc1NTgwMzU4MDQ5Ij4i4KSo4KSv4KS+4KSBIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLjgpYHgpLDgpYEg4KSo4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9hY3Rpb24iIG1zZ2lkPSI1NDcyNzU2OTI2OTQ1NDQwNzA2Ij4iPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+IOCkuOClgeCksOClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+IuCkrOCkmuCkpCDgpKjgpJfgpLDgpYAg4KSq4KWB4KSw4KS+4KSo4KWLIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZW5kVGV4dCIgbXNnaWQ9IjUyMDk4NzQ1NzE5NTk0NjkxNDIiPiLgpKrgpL7gpKDgpJXgpYsg4KSy4KS+4KSX4KS/IOCkj+CkieCkn+CkviDgpKrgpY3gpLDgpJXgpL7gpLDgpY3gpK8g4KSb4KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Jpbmd0b25lIiBtc2dpZD0iNjg4NTQyMTQwNjg0NTczNDY1MCI+IuCkrOCknOCkvuCkieCkqOClhyDgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWMiIG1zZ2lkPSI1NDIxNjUxMTU3MTM4NjI4MTcxIj4i4KSu4KS/4KSh4KS/4KSv4KS+4KSV4KWLIOCkruCkvuCkpOCljeCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpY19oaW50X3BsYXlpbmdfdGhyb3VnaF9ibHVldG9vdGgiIG1zZ2lkPSI5MTY1OTg0Mzc5Mzk0NjAxNTMzIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSl4KSV4KWLIOCkruCkvuCkp+CljeCkr+CkruCkpuCljeCkteCkvuCksOCkviDgpKzgpJzgpL7gpIfgpKbgpYgg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfc2lsZW50X3Jpbmd0b25lX3NlbGVjdGVkIiBtc2dpZD0iODMxMDczOTk2MDk3MzE1NjI3MiI+IuCktuCkvuCkqOCljeCkpCDgpLDgpL/gpJngpY3gpJfgpJ/gpYvgpKgg4KS44KWH4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2NhbGwiIG1zZ2lkPSIzOTQxNjgwMDQxMjgyNzg4NzExIj4i4KSH4KSoLeCkleCksiDgpK3gpYvgpLLgpY3gpK/gpYHgpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYmx1ZXRvb3RoX2NhbGwiIG1zZ2lkPSIyMDAyODkxOTI2MzUxMTUxNTM0Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkreCkv+CkpOCljeCksOClgC3gpJXgpLIg4KSu4KS+4KSk4KWN4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2FsYXJtIiBtc2dpZD0iMTk4NTE5MTYxNjA0MjY4OTEwMCI+IuCkhuCksuCksOCljeCkriDgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMjQyMjI2NTY1Njc0NDI3NjcxNSI+IuCkuOClguCkmuCkqOCkviDgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfdW5rbm93biIgbXNnaWQ9IjE0MDAyMTk2Njk3NzA0NDU5MDIiPiLgpK7gpL7gpKTgpY3gpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ibHVldG9vdGgiIG1zZ2lkPSI2NTM4ODk0MTc3MjU1OTY0MzQwIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkreCli+CksuCljeCkr+ClgeCkriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX3JpbmdlciIgbXNnaWQ9IjMzMjYwMDM4NDcwMDYxNjI0OTYiPiLgpJjgpKjgpY3gpJ/gpL/gpJXgpYsg4KSG4KS14KS+4KScIOCkruCkvuCkpOCljeCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2luY2FsbCIgbXNnaWQ9Ijg4OTAwNzMyMTgxNTQ1NDMzOTciPiLgpJXgpLLgpL4g4KSu4KS+4KSk4KWN4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbWVkaWEiIG1zZ2lkPSI0MjE3MzExNzE5NjY1MTk0MjE1Ij4i4KSu4KS/4KSh4KS/4KSv4KS+4KSV4KWLIOCkruCkvuCkpOCljeCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjcwNDQ5ODY1NDY0NzcyODIyNzQiPiLgpLjgpYLgpJrgpKjgpL4g4KSt4KWL4KSy4KWN4KSv4KWB4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdCIgbXNnaWQ9IjM3ODk3NTg5ODAzNTc2OTY5MzYiPiLgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSw4KS/4KSZ4KSf4KWL4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdF93aXRoX2FjdHVhbCIgbXNnaWQ9IjgxMjk1NjM0ODA4OTU5OTAzNzIiPiLgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSw4KS/4KSZ4KSf4KWL4KSoICg8eGxpZmY6ZyBpZD0iQUNUVUFMX1JJTkdUT05FIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9zaWxlbnQiIG1zZ2lkPSI3OTM3NjM0MzkyNDA4OTc3MDYyIj4i4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLngpYvgpIfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9waWNrZXJfdGl0bGUiIG1zZ2lkPSIzNTE1MTQzOTM5MTc1MTE5MDk0Ij4i4KSY4KSo4KWN4KSf4KWA4KSV4KS+IOCkuOCljeCkteCksOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3Vua25vd24iIG1zZ2lkPSI1NDc3OTE5OTg4NzAxNzg0Nzg4Ij4i4KSF4KSc4KWN4KSe4KS+4KSkIOCksOCkv+CkmeCkn+Cli+CkqCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NjU0MTIzOTg3NDE4MTY4NjkzIj4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkmyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDE5MjQyNDQ4OTE2ODM5NzM4NiI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSo4KWH4KSf4KS14KSw4KWN4KSV4KS54KSw4KWCIOCkieCkquCksuCkrOCljeCkpyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGVfZGV0YWlsZWQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4i4KSW4KWB4KSy4KWN4KSy4KS+IOCkteCkvuCkhy3gpKvgpL7gpIcg4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkieCkquCksuCkrOCljeCkpyDgpJsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc5MTU4OTUzMjM2NDQyOTI3NjgiPiLgpJbgpYHgpLLgpY3gpLLgpL4g4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkmyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI0MDI5NDg5NzE2NjA1MjU1Mzg2Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpK7gpL4g4KS44KS+4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSI4NDk1MTU1NTkzMzU4MDU0Njc2Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSV4KSu4KS+IOCkuOCkvuCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbmV0d29ya19hdmFpbGFibGVfc2lnbl9pbl9kZXRhaWxlZCAoODAwMDA4MTk0MTQ0Nzk3NjExOCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZCIgbXNnaWQ9Ijc5MDQyMTQyMzE2NTE1NDYzNDciPiLgpLXgpL7gpIct4KSr4KS+4KSH4KS44KSB4KSXIOCknOCkoeCkvuCkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiDgpJXgpK7gpJzgpYvgpLAg4KSH4KSo4KWN4KSf4KSw4KSo4KWH4KSfIOCknOCkoeCkvuCkqCDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI5NzYxMTc4MjY1OTMyNDUxNyI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSq4KWN4KSw4KSk4KWN4KSv4KSV4KWN4KS3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpLjgpL/gpKfgpL4g4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCDgpK/gpLjgpLLgpYcg4KS14KS+4KSHLeCkq+CkvuCkhyDgpJfgpY3gpLDgpL7gpLngpJUv4KS54KSf4KWN4KS44KWN4KSq4KSf4KSy4KS+4KSIIOCkrOCkqOCljeCkpiDgpJfgpLDgpL7gpIngpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UiIG1zZ2lkPSIzNzYzNjY5Njc3OTM1NjIzMDg0Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpLjgpL/gpKfgpL4g4KS44KWB4KSw4KWBIOCkueClgeCkqCDgpLjgpJXgpYfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIwNjgzMjE4ODE2NzM3MzQ4ODYiPiLgpLXgpL7gpIct4KSr4KS+4KSHIOCkquCljeCksOCkpOCljeCkr+CkleCljeCktyDgpJbgpYHgpLLgpY3gpLLgpL4g4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjE2Mzg5NDk5NTM5OTM4OTQzMzUiPiLgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkm+ClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiLgpLjgpY3gpLXgpYDgpJXgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWNsaW5lIiBtc2dpZD0iMjExMjIyNTQ1MTcwNjEzNzg5NCI+IuCkheCkuOCljeCkteClgOCkleCkvuCksCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3NlbnRfdGl0bGUiIG1zZ2lkPSIxMzE4OTc1MTg1MTEyMDcwNzM0Ij4i4KSo4KS/4KSu4KSo4KWN4KSk4KWN4KSw4KSj4KS+IOCkquCkoOCkvuCkh+Ckj+CkleCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ludml0YXRpb25fdG9fY29ubmVjdF90aXRsZSIgbXNnaWQ9IjQ5NTg4MDM5NDg2NTg1MzM2MzciPiLgpJzgpKHgpL7gpKjgpK7gpL4g4KSo4KS/4KSu4KSo4KWN4KSk4KWN4KSw4KSj4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJvbV9tZXNzYWdlIiBtc2dpZD0iNTcwMzg5MTc0NzMxOTUxNzY5Ij4i4KSs4KS+4KSfOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3RvX21lc3NhZ2UiIG1zZ2lkPSIyNDg5Njg5NzQ1MjIwNDQwOTkiPiLgpKrgpY3gpLDgpL7gpKrgpJU6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW50ZXJfcGluX21lc3NhZ2UiIG1zZ2lkPSI1OTIwOTI5NTUwMzY3ODI4OTcwIj4i4KSG4KS14KS24KWN4KSv4KSVIFBJTiDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UiIG1zZ2lkPSI4NTMwNTYzMzIzODgwOTIxMDk0Ij4iUElOOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MDEyOTgxMjU3NzQyMjMyNDc1Ij4i4KSv4KWLIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz7gpLjgpIHgpJcg4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkrOClh+CksuCkviDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpLXgpL7gpIct4KSr4KS+4KSH4KSs4KS+4KSfIOCkteCkv+CkmuCljeCkm+Clh+CkpiDgpJfgpLDgpL/gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4i4KSc4KSsIOCkr+CliyA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkuOCkgeCklyDgpJzgpKHgpL/gpKQg4KS54KWB4KSo4KWN4KSbLCDgpKvgpYvgpKgg4KSF4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpLXgpL7gpIct4KSr4KS+4KSH4KSs4KS+4KSfIOCkteCkv+CkmuCljeCkm+Clh+CkpiDgpLngpYHgpKjgpYcg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiLgpIXgpJXgpY3gpLfgpLDgpLngpLDgpYIg4KSq4KWN4KSw4KS14KWH4KS2IOCkl+CksOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+IlNNUyDgpLjgpKjgpY3gpKbgpYfgpLbgpLngpLDgpYIg4KSq4KSg4KS+4KSH4KSB4KSm4KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDgpLLgpYcg4KSn4KSw4KWIIOCkuOCkguCkluCljeCkr+CkvuCkruCkviBTTVMg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkoOCkvuCkieCkgeCkpuCliOCkm+ClpCDgpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSo4KWN4KSm4KWH4KS24KS54KSw4KWCIOCkquCkoOCkvuCkieCkqCDgpLjgpYHgpJrgpL7gpLDgpYEg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KSa4KS+4KS54KSo4KWBIOCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF95ZXMiIG1zZ2lkPSIzNjYzNzI1OTkzODU1ODE2ODA3Ij4i4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4i4KSF4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbWVzc2FnZSIgbXNnaWQ9IjE2NDU0MzY0NjYyODUzMTA4NTUiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyDgpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkuOCkqOCljeCkpuClh+CktiDgpKrgpKDgpL7gpIngpKgg4KSa4KS+4KS54KWB4KSo4KWBIOCkueClgeCkqOCljeCkmyAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDsvYiZndDsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjM0OTIwMjU3MTk4NjgwNzg0NTciPiLgpK/gpLjgpLLgpYcgIjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IiDgpLbgpYHgpLLgpY3gpJUg4KSy4KSX4KS+4KSJ4KSoIOCkuOCkleCljeCkmyI8L2ZvbnQ+IiDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkluCkvuCkpOCkvuCkruCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19wcmVtaXVtX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjU1MjM4MjYzNDkxMDUxMjM2ODciPjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IuCkr+CkuOCksuClhyDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSu4KWL4KSs4KS+4KSH4KSyIOCkluCkvuCkpOCkvuCkruCkviDgpJrgpL7gpLDgpY3gpJzgpLngpLDgpYIg4KSJ4KSk4KWN4KSq4KSo4KWN4KSoIOCkl+CksOCljeCkpuCkm+ClpCI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2FsbG93IiBtc2dpZD0iNDQ1ODg3ODYzNzExMTAyMzQxMyI+IuCkquCkoOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfY2hvaWNlIiBtc2dpZD0iNTI4OTUzODU5MjI3MjIxODEzNiI+IuCkruClh+CksOCliyDgpJvgpKjgpYzgpJ8g4KSv4KS+4KSmIOCksOCkvuCkluCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4i4KSk4KSq4KS+4KSI4KSBIOCkr+CkuOCksuCkvuCkiCDgpKrgpJvgpL8g4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWC4KSu4KS+IOCkrOCkpuCksuCljeCkqCDgpLjgpJXgpY3gpKjgpYEg4KS54KWB4KSo4KWN4KSbICZndDsg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbHdheXNfYWxsb3ciIG1zZ2lkPSIzMjQxMTgxMTU0ODY5NDkzMzY4Ij4i4KS44KSn4KWI4KSBIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX25ldmVyX2FsbG93IiBtc2dpZD0iNDQ2OTkyNzY1Nzc0MjY5NjczIj4i4KSV4KS54KS/4KSy4KWN4KSv4KWIIOCkheCkqOClgeCkruCkpOCkvyDgpKjgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkueCkn+CkvuCkh+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4i4KSP4KSJ4KSf4KS+IOCkruCkvuCkqOCljeCkryBTSU0g4KSV4KS+4KSw4KWN4KShIOCksOCkvuCkluClh+CksCDgpKrgpYHgpKjgpIPgpLjgpY3gpJ/gpL7gpLDgpY3gpJ8g4KSo4KSX4KSw4KWH4KS44KSu4KWN4KSuIOCkruCli+CkrOCkvuCkh+CksiDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSJ4KSq4KSy4KSs4KWN4KSnIOCkueClgeCkqOClhyDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiLgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfdGl0bGUiIG1zZ2lkPSIzNzE5NjcwNTEyODg5Njc0NjkzIj4iU0lNIOCkleCkvuCksOCljeCkoSDgpKXgpKog4KSX4KSw4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX21lc3NhZ2UiIG1zZ2lkPSI2NTk5OTQ1MzAxMTQxMDUwMjE2Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSoIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIngpKrgpJXgpLDgpKMg4KSq4KWB4KSo4KSD4KS44KWN4KSf4KS+4KSw4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZXN0YXJ0X2J1dHRvbiIgbXNnaWQ9IjQ3MjI0MDc4NDI4MTUyMzIzNDciPiLgpKrgpYHgpKjgpIPgpLjgpY3gpJ/gpL7gpLDgpY3gpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODM0OTM2MjYyMzA2ODgxOTI5NSI+IuCkuOCkruCkryDgpK7gpL/gpLLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI1ODc5NDUwNjU5NDUzNzgyMjc4Ij4i4KSu4KS/4KSk4KS/IOCkruCkv+CksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9zZXQiIG1zZ2lkPSI1Nzc3MDc1NjE0MzIxMDg3NzU4Ij4i4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9kb25lIiBtc2dpZD0iMjUwNzY4Mzc1MTc1OTMwODgyOCI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1zX25ld19wZXJtX3ByZWZpeCIgbXNnaWQ9IjgyNTc3NDA3MTA3NTQzMDE0MDciPjxmb250IHNpemU9IjEyIiBmZ2NvbG9yPSIjZmYzM2I1ZTUiPiLgpKjgpK/gpL7gpIE6ICI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtc19kZXNjcmlwdGlvbl9hcHAiIG1zZ2lkPSI1MTM5ODM2MTQzMjkzMjk5NDE3Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPuCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fcGVybWlzc2lvbnMiIG1zZ2lkPSI3MjgzMzU3NzI4MjE5MzM4MTEyIj4i4KSV4KWB4KSo4KWIIOCkheCkqOClgeCkruCkpOCkvyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybV9jb3N0c19tb25leSIgbXNnaWQ9IjQ5MDI0NzAzMjQxNDIxNTExMTYiPiLgpLjgpL7gpK/gpKYg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkquCliOCkuOCkviDgpKrgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYWN0aXZpdHlfdGl0bGUiIG1zZ2lkPSI0NDY1MDU1MTU3MjA5NjQ4NjQxIj4iVVNCIOCkoOClguCksuCliyDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjU5MDE0NTkwNDEzOTg3NTE0OTUiPiJVU0Ig4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+IuCkpOCkquCkvuCkiOCkgiDgpIbgpKvgpY3gpKjgpYsg4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSw4KSu4KS+IFVTQiDgpK7gpL7gpLDgpY3gpKvgpKQg4KSc4KSh4KS+4KSoIOCkueClgeCkqOClgeCkreCkr+Cli+ClpCDgpKTgpLLgpJXgpYsg4KSs4KSf4KSoIOCkn+CkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KSv4KSm4KS/IOCkpOCkquCkvuCkiOCkgiDgpIbgpKvgpY3gpKjgpYsg4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSwIOCksCDgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKHgpJXgpYsgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpYDgpJog4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkquCljeCksOCkpOCkv+CksuCkv+CkquCkvyDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkreCkqOClh+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDUzNTEwMDA0NDYwMzc4MTEiPiLgpKTgpKrgpL7gpIjgpIIg4KSG4KSr4KWN4KSo4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkruCkviBVU0Ig4KSu4KS+4KSw4KWN4KSr4KSkIOCknOCkoeCkvuCkqCDgpLngpYHgpKjgpYHgpK3gpK/gpYvgpaQg4KSk4KSy4KSV4KWLIOCkrOCkn+CkqCDgpJ/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCkr+CkpuCkvyDgpKTgpKrgpL7gpIjgpIIg4KSG4KSr4KWN4KSo4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksCDgpLAg4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KSh4KSV4KWLIFNEIOCkleCkvuCksOCljeCkoSDgpKzgpYDgpJog4KSr4KS+4KSH4KSy4KS54KSw4KWCIOCkquCljeCksOCkpOCkv+CksuCkv+CkquCkvyDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbIOCkreCkqOClh+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2J1dHRvbl9tb3VudCIgbXNnaWQ9IjEwNTIyNTk5MzAzNjk1MDgyMzUiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkmuCkvuCksuClgSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjMwMTcwNDUyMTczNjU1NDA2NTgiPiJVU0Ig4KSG4KSuIOCkreCko+CljeCkoeCkvuCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSk4KSq4KS+4KSI4KSB4KSV4KWLIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkpuCkviDgpI/gpIngpJ/gpL4g4KS44KSu4KS44KWN4KSv4KS+IOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODc2MDE4NTEyNzE2OTcwMzEzIj4iVVNCIOCkhuCkriDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkpOCkquCkvuCkiOCkgeCkleCliyBTRCDgpJXgpL7gpLDgpY3gpKEg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkpuCkviDgpI/gpIngpJ/gpL4g4KS44KSu4KS44KWN4KSv4KS+IOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0Ig4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTM5ODIyNzgzODI4MTgzNzYzIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkrOCkvuCknyDgpLXgpL4g4KSk4KS/4KSwIOCkq+CkvuCkh+CksuCkueCksOClgiDgpKrgpY3gpLDgpKTgpL/gpLLgpL/gpKog4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjMzNjA1ODM5NjY2MzUxNjAxNyI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3Bfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjU2ODUyMDk4NTU1NjIzODIyIj4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCljeCksOCkr+Cli+Ckl+CkruCkviDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkueClgeCkqOClgeCkreCkqOCljeCkpuCkviDgpKrgpLngpYDgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkrOCkvuCknyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSP4KSo4KWN4KSh4KWN4KSw4KWL4KSH4KShIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIChcIuCkneCkv+CkleCljeCkqOClgeCkueCli+CkuOCljVwiKSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA0Mzk2OTc4MjQ2MDYxMzExNCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClgeCkheCkmOCkvyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSw4KSs4KS+4KSfIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKHgpJXgpYsgU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkqOCkruCkvuCkieCkqOCljeCknyAoXCLgpKjgpL/gpJXgpL7gpLLgpYfgpJXgpYtcIikg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9idXR0b25fbW91bnQiIG1zZ2lkPSI3MDYwMjE4MDM0OTAwNjk2MDI5Ij4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpKjgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMTk3MDM3NDg5ODI2MzA2MzgzNiI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkpuCkviDgpI/gpIngpJ/gpL4g4KS44KSu4KS44KWN4KSv4KS+IOCkreCkr+Cli+ClpCDgpKTgpKrgpL7gpIjgpIHgpLLgpYcgVVNCIOCkueCli+CkuOCljeCknyDgpIXgpKjgpK7gpL7gpIngpKjgpY3gpJ8g4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJzgpL7gpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNLCDgpKTgpY3gpK/gpLjgpKrgpJvgpL8g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkluCli+CksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19jb25maXJtX2tpbGxfc3RvcmFnZV91c2Vyc190ZXh0IiBtc2dpZD0iNTEwMDQyODc1NzEwNzQ2OTQ1NCI+IuCkr+CkpuCkvyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpJbgpYvgpLLgpY3gpKjgpYEg4KSt4KSv4KWLIOCkreCkqOClhyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCkv+CksOCkueCkqOClgSDgpK3gpI/gpJXgpL4g4KSV4KWH4KS54KWAIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLDgpYvgpJXgpL/gpKjgpYcg4KSb4KSo4KWNIOCksCDgpKTgpKrgpL7gpIjgpIHgpLLgpYcgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpKzgpKjgpY3gpKYg4KSo4KSX4KSw4KWH4KS44KSu4KWN4KSuIOCkheCkqOClgeCkquCksuCkrOCljeCkpyDgpLngpYHgpKgg4KS44KSV4KWN4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX2Vycm9yX3RpdGxlIiBtc2dpZD0iNzMyMzY1ODQ2OTYyNjUxNDIwNyI+IlVTQiDgpLjgpILgpJrgpL7gpLLgpKgg4KSF4KS44KSr4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGxnX29rIiBtc2dpZD0iNzM3Njk1MzE2NzAzOTg2NTcwMSI+IuCkoOCkv+CklSDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiLgpK7gpL/gpKHgpL/gpK/gpL4g4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCksOClguCkquCkruCkviDgpJzgpKHgpL/gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE5NjA4MTcxOTIyMTYwNjQ4MzMiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL7gpJXgpYsg4KSw4KWC4KSq4KSu4KS+IOCknOCkoeCkvuCkqCDgpK3gpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfY2RfaW5zdGFsbGVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY3NzQ3MTI4Mjc4OTIwOTA3NTQiPiLgpI/gpIngpJ/gpL4g4KS44KWN4KSl4KS+4KSq4KSo4KSV4KSw4KWN4KSk4KS+4KSV4KWLIOCksOClguCkquCkruCkviDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI3ODQ4MjM2OTc0MDg3NjUzNjY2Ij4iVVNCIOCkuOCkueCkvuCkr+CkleCkruCkviDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjI5MDg1OTM5OTk4MzcyMDI3MSI+IuCkheCkqOCljeCkryBVU0Ig4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJ/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjkwMjAwOTIxOTYwNjEwMDcyNjIiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSy4KS+4KSIIOCkq+CksOCljeCkruCljeCkr+CkvuCknyAg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzY0ODQxNTkyMTUyNjUyNjA2OSI+IlNEIOCkleCkvuCksOCljeCkoSDgpKvgpLDgpY3gpK7gpY3gpK/gpL7gpJ8g4KSX4KSw4KWN4KSo4KWHPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MzQwMTY4NTM0MjU3NjEwNzgiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsgVVNC4KSu4KS+IOCkuOCkmeCljeCkl+CljeCksOCkuSDgpK3gpI/gpJXgpL4g4KS44KSs4KWIIOCkq+CkvuCkh+CksuCkueCksOClgiDgpK7gpYfgpJ/gpL/gpKjgpYcg4KSb4KSo4KWN4KWkIOCkr+CliyDgpJXgpL7gpLDgpY3gpK8g4KSJ4KSy4KWN4KSf4KS+4KSJ4KSoIOCkuOCkleCkv+CkgeCkpuCliOCkqCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0MTMxODk1MDI3NTQzODMwIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkleCkvuCksOCljeCkoeCkruCkviDgpK3gpI/gpJXgpL4g4KS44KSs4KWIIOCkoeClh+Ckn+CkvuCkueCksOClgiDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KSo4KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X2J1dHRvbl9mb3JtYXQiIG1zZ2lkPSI0MTMxMDY0NTYwMTI3NDc4Njk1Ij4i4KSr4KSw4KWN4KSu4KWN4KSv4KS+4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+IlVTQiDgpKHgpL/gpKzgpJcg4KSX4KSw4KWN4KSo4KWHIOCknOCkoeCkv+CkpCDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTAxNjY1NDYyNzYyNjQ3NjE0MiI+IlVTQiDgpKHgpL/gpKzgpJcg4KSX4KSw4KWN4KSo4KWHIOCkheCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2lucHV0X21ldGhvZCIgbXNnaWQ9IjQ2NTMzODczMzY3OTEyMjI5NzgiPiLgpKjgpL/gpLXgpYfgpLYg4KS14KS/4KSn4KS/IOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iOTA5MTY1MjE1NzcyMjQ5NTExNiI+IuCkh+CkqOCkquClgeCknyDgpLXgpL/gpKfgpL/gpLngpLDgpYIg4KS44KWH4KSf4KSF4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiLgpK3gpYzgpKTgpL/gpJUg4KSV4KS/4KSs4KWL4KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGFyZHdhcmUiIG1zZ2lkPSI3NTE3ODIxMDg2ODg4OTkwMjc4Ij4i4KS54KS+4KSw4KWN4KSh4KS14KWH4KSv4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxNDA3MzY3MDE3MjYzMDMwNzczIj4i4KSV4KS/4KSs4KWL4KSw4KWN4KShIOCksOClguCkquCksOClh+CkluCkviDgpJrgpK/gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0NjU5MDc3MDA0NDkyNTcwNjMiPiLgpJXgpL/gpKzgpYvgpLDgpY3gpKEg4KSw4KWC4KSq4KSw4KWH4KSW4KS+IOCkmuCkr+CkqCDgpJfgpLDgpY3gpKgg4KSf4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX2FscGhhYmV0IiBtc2dpZD0iNTQzMzI3NTQ4NTQ5OTAzOTE5OSI+IiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhc3Rfc2Nyb2xsX251bWVyaWNfYWxwaGFiZXQiIG1zZ2lkPSI0MDMwMTcwNTI0NTk1MTIzNjEwIj4iIDAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmRpZGF0ZXNfc3R5bGUiIG1zZ2lkPSI0MzMzOTEzMDg5NjM3MDYyMjU3Ij48dT4i4KSJ4KSu4KWN4KSu4KWH4KSm4KS14KS+4KSwIjwvdT48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzQ0OTgxNjAwNTM1MTQ2ODU2MCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKPgpJXgpYsg4KSk4KSv4KS+4KSw4KWAIOCkueClgeCkgeCkpuCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9jaGVja2luZ19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NDU3NjAzNDE4OTcwOTk0MDUwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkpOCkr+CkvuCksCDgpJfgpLDgpY3gpKbgpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4Mjg3MzE5ODgyOTI2NzM3MDUzIj4i4KSk4KWN4KSw4KWB4KSf4KS/4KS54KSw4KWC4KSV4KWLIOCksuCkvuCkl+CkvyDgpJzgpL7gpIHgpJog4KSX4KSw4KWN4KSm4KWI4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc3ODgwNDA3NDU2ODYyMjkzMDciPiLgpLDgpL/gpJXgpY3gpKQgVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc4MDQ3NzgzODI0MTIxMjk5NyI+IuCkluCkvuCksuClgCBTRCDgpJXgpL7gpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3ODQwMTIxMDY3NDI3MjY5NTAwIj4iVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpJbgpL7gpLLgpYAg4KS14KS+IOCkheCkuOCkruCksOCljeCkpeCkv+CkpCDgpKvgpL7gpIfgpLIg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODY0MTA2NTY0MTc4NjkyMzYwNCI+IlNEIOCkleCkvuCksOCljeCkoSDgpJbgpL7gpLLgpYAg4KSbIOCkheCkpeCkteCkviDgpLjgpK7gpLDgpY3gpKXgpKgg4KSo4KSX4KSw4KS/4KSP4KSV4KWLIOCkq+CkvuCkh+CksiDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyMDkwMDQ2NzY5NTMyNzEzNTYzIj4i4KSs4KS/4KSX4KWN4KSw4KS/4KSP4KSV4KWLIFVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQxMDcyMzkwNjAxOTEwMDE4OSI+IuCkrOCkv+Ckl+CljeCksOCkv+Ckj+CkleCliyBTRCDgpJXgpL7gpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTc5NTkxNzU3ODM5NTMzMzI4MCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSs4KS/4KSX4KWN4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCDgpK/gpLjgpLLgpL7gpIgg4KSq4KWB4KSo4KSD4KSr4KSw4KWN4KSu4KWN4KSv4KS+4KSfIOCkl+CksOCljeCkqCDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTc1Mzg5ODU2NzUyNTU2ODI1MyI+IlNEIOCkleCkvuCksOCljeCkoSDgpKzgpL/gpJfgpY3gpLDgpL/gpI/gpJXgpYsg4KSb4KWkIOCkr+CkuOCksuCkvuCkiCDgpKrgpYHgpKjgpIPgpKvgpLDgpY3gpK7gpY3gpK/gpL7gpJ8g4KSX4KSw4KWN4KSoIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTY2MTY4MzAzMTMzMDk1MTA3MyI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSF4KSq4KWN4KSw4KSk4KWN4KSv4KS+4KS24KS/4KSkIOCksOClguCkquCkruCkviDgpLngpJ/gpL7gpIfgpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg3MjE1Mjg4MjYwNDQwNzgzNyI+IlNEIOCkleCkvuCksOCljeCkoSDgpIXgpKjgpKrgpYfgpJXgpY3gpLfgpL/gpKQg4KSw4KWC4KSq4KSu4KS+IOCkueCkn+CkvuCkh+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiLgpKHgpYfgpJ/gpL4g4KSX4KWB4KSu4KWN4KSo4KSs4KS+4KSfIOCksOCli+CkleCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8gVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLngpJ/gpL7gpIngpKjgpYHgpIXgpJjgpL8g4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+IuCkoeClh+Ckn+CkviDgpKjgpL7gpLYg4KS54KWB4KSo4KSs4KS+4KSfIOCkrOCkmuCljeCkqCBTRCDgpJXgpL7gpLDgpY3gpKHgpLLgpL7gpIgg4KSo4KS/4KSV4KS+4KSy4KWN4KSo4KWB4KSt4KSo4KWN4KSm4KS+IOCkquCkueCkv+CksuCkviDgpIXgpKjgpK7gpL7gpIngpKjgpY3gpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzk2Nzk3Mzg5MzI3MDM2MDIzMCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KS54KSf4KS+4KSJ4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NzI5ODAxMTMwNzkwNjE2MjAwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkueCkn+CkvuCkieCkqCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MTQyMTk1MzYxNjA2NDkzNTMwIj4i4KSk4KSq4KS+4KSI4KSCIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLDgpYLgpKrgpK7gpL4gVVNCIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLngpJ/gpL7gpIngpKgg4KS44KSV4KWN4KSo4KWB4KS54KWB4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zYWZlX3VubW91bnRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Njg4NDEyNzgxMzgzNzc2MDQiPiLgpKTgpKrgpL7gpIjgpIEgU0Qg4KSV4KS+4KSw4KWN4KShIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLDgpYLgpKrgpK7gpL4g4KS54KSf4KS+4KSJ4KSoIOCkuOCkleCljeCkqOClgSDgpLngpYHgpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDQ4NjM3NzIzMDE0MDIyNzY1MSI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KS54KSf4KS+4KSH4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkwMjUxODAzMDQwNDM4MTMxOCI+IuCkueCkn+CkvuCkh+Ckj+CkleCliyBTRCDgpJXgpL7gpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2OTIxMTI2MTYyNTgwNTc0MTQzIj4iVVNEIOCkreCko+CljeCkoeCkvuCksOCkoyDgpLngpJ/gpL7gpIfgpK/gpYvgpaQg4KSo4KSv4KS+4KSBIOCkruCkv+CkoeCkv+Ckr+CkviDgpJjgpYHgpLjgpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KS54KSf4KS+4KSH4KSv4KWL4KWkIOCkj+CkieCkn+CkviDgpKjgpK/gpL7gpIEg4KSb4KS/4KSw4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbGlzdF9lbXB0eSIgbXNnaWQ9IjE2NzUzODgzMzA3ODY4NDEwNjYiPiLgpJXgpYHgpKjgpYgg4KSu4KS/4KSy4KWN4KSo4KWHIOCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpKrgpL7gpIfgpI/gpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSI4Nzg3MzUyMDc0MzI2NzQ4ODkyIj4i4KSW4KSj4KWN4KShIOCkquCljeCksOCkr+Cli+CklyDgpKTgpKXgpY3gpK/gpL7gpJngpY3gpJXgpLngpLDgpYIg4KSF4KSq4KSh4KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSIxMTA2NjEyNDI0MjU0Mjc3NjMwIj4i4KSc4KSu4KWN4KSu4KS+IOCkl+CksOCkv+Ckj+CkleCliyDgpJjgpJ/gpJUg4KSJ4KSq4KSv4KWL4KSXIOCkpOCkpeCljeCkr+CkvuCkmeCljeCkleCkueCksOClguCksuCkvuCkiCDgpKrgpLDgpL/gpK7gpL7gpLDgpY3gpJzgpKgg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkuOCkvuCkruCkvuCkqOCljeCkryDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYLgpKzgpL7gpJ8g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCksuCkvuCkl+CkvyDgpLngpYvgpIfgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM0MTAzNjMxMTIxMTQwNjY5MiI+IuCkuOCkvuCkruCkvuCkl+CljeCksOClgOCkleCliyDgpKjgpJXgpLIg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzkwNjk3MTI0Mjg4MzE3ODMxIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkvuCkruCkl+CljeCksOClgCDgpKrgpY3gpLDgpKTgpL/gpLLgpL/gpKrgpL8g4KSX4KSw4KWN4KSoIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpKjgpY3gpJ/gpYfgpKjgpLAg4KS44KWH4KS14KS+IOCkhuCkueCljeCkteCkvuCkqCDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCDgpLjgpL7gpKfgpL7gpLDgpKMg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSm4KWN4KS14KS+4KSw4KS+4KSV4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpLLgpL7gpJfgpL8g4KS54KWL4KSH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSIxNjQyMDI0NDU1NzUwNDE0Njk0Ij4i4KSu4KS/4KSh4KS/4KSv4KS+IOCkquCksOCkv+Cko+CkvuCkriDgpKbgpL/gpLbgpL7gpKjgpL/gpLDgpY3gpKbgpYfgpLYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iNDkzMjgxODc0OTU0NzI0NDM0NiI+IuCkruCkv+CkoeCkv+Ckr+CkviDgpKrgpLDgpL/gpKPgpL7gpK7gpLLgpL7gpIgg4KSF4KSo4KWN4KSvIOCkrOCkvuCkueCkv+CksOClgCDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYLgpLjgpIHgpJcg4KSy4KWI4KSc4KS+4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNzU2NTU1MjIzNzk3NzgxNTA0NyI+IuCkleCkv+Ckl+CkvuCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3Nfa2V5Z3VhcmRfc2VjdXJlX3N0b3JhZ2UiIG1zZ2lkPSI1ODY2MjQ1NDg0MzAzMjg1NzYyIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCkv+Ckl+CkvuCksOCljeCkoSDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbF9rZXlndWFyZCIgbXNnaWQ9IjE3MjE5NTE4NDIwNzgyODM4NyI+IuCkleCkv+Ckl+CkvuCksOCljeCkoSDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSX4KSw4KWN4KSo4KWHIOCksCDgpLLgpYHgpJXgpL7gpIngpKjgpYcg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIzMDQzNzMyMjkwNTE4NjI5MDYxIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkleCkv+Ckl+CkvuCksOCljeCkoSDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXRvcmlhbF9kb3VibGVfdGFwX3RvX3pvb21fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQwNzA0MzMyMDgxNjAwNjM1MzgiPiLgpJzgpYHgpK4g4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpKbgpYHgpIgg4KSa4KWL4KSf4KS/IOCkn+CkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnYWRnZXRfaG9zdF9lcnJvcl9pbmZsYXRpbmciIG1zZ2lkPSI0ODgyMDA0MzE0OTA2NDY2MTYyIj4i4KS14KS/4KSc4KWH4KSfIOCkpeCkqiDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSB4KSm4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9nbyIgbXNnaWQ9IjgzMjA4NDU2NTE3MzczNjkwMjciPiLgpJzgpL7gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlYXJjaCIgbXNnaWQ9IjY1ODExMDI3MTgyMjgwNzgxMSI+IuCkluCli+CknOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fc2VuZCIgbXNnaWQ9IjIzMTYxNjY1NTYzNDkzMTQ0MjQiPiLgpKrgpKDgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX25leHQiIG1zZ2lkPSIzMTM4ODQzOTA0MDA5ODEzODM0Ij4i4KSF4KSw4KWN4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kb25lIiBtc2dpZD0iODk3MTUxNjExNzkxMDkzNDYwNSI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fcHJldmlvdXMiIG1zZ2lkPSIxNDQzNTUwMDM5MjUwMTA1OTQ4Ij4i4KSF4KSY4KS/4KSy4KWN4KSy4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kZWZhdWx0IiBtc2dpZD0iMjg0MDkyMTg4NTU1ODA0NTcyMSI+IuCkmuCksuCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpYWxfbnVtYmVyX3VzaW5nIiBtc2dpZD0iNTc4OTE3NjQyNTE2NzU3MzU4NiI+XG4i4KSo4KSu4KWN4KSs4KSwIOCkoeCkvuCkr+CksiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JXM8L3hsaWZmOmc+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfY29udGFjdF91c2luZyIgbXNnaWQ9IjQ5NDc0MDUyMjY3ODgxMDQ1MzgiPiLgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljVxu4KSv4KWLIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2hlYWRlciIgbXNnaWQ9IjIxMDYxMDM4MTc5Mzc4NTk2NjIiPiLgpKjgpL/gpK7gpY3gpKgg4KSP4KSJ4KSf4KS+IOCkteCkviDgpKfgpYfgpLDgpYgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWC4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpJbgpL7gpKTgpL7gpK7gpL4g4KSq4KS54KWB4KSB4KSa4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSF4KS54KS/4KSy4KWHIOCksCDgpK3gpLXgpL/gpLfgpY3gpK/gpK7gpL4g4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCljeCkm+CkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9mb290ZXIiIG1zZ2lkPSIzMTI1MjExMzQzMzc5Mzc2NTYxIj4i4KSV4KWHIOCkpOCkquCkvuCkiOCkgSDgpK/gpLgg4KSF4KSo4KWB4KSw4KWL4KSn4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X3Blcm1pc3Npb25zX2hlYWRlcl90ZXh0IiBtc2dpZD0iNjg3NDQ5NzQwODIwMTgyNjcwOCI+IuCkheCkqOClgeCksOCli+CkpyDgpKrgpLngpYHgpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3ciIG1zZ2lkPSI3MjI1OTQ4ODExMjk2Mzg2NTUxIj4i4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4i4KSF4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1pc3Npb25fcmVxdWVzdF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NDg2NzU5Nzk1OTI2MjM3OTA3Ij4i4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCkv+Ckj+CkleCliyDgpIXgpKjgpYHgpK7gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIG1zZ2lkPSI4NTMwMzkzMTM5NjM5NTYwMTg5Ij5cbiLgpJbgpL7gpKTgpL4gPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiVzPC94bGlmZjpnPuCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCkv+Ckj+CkleCliyDgpIXgpKjgpYHgpK7gpKTgpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnB1dF9tZXRob2RfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyODM1NTcxNzk5NDQ5OTI2NDkiPiLgpIfgpKjgpKrgpYHgpJ8g4KS14KS/4KSn4KS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMzY4Nzk2OTEzODM3NTA5MjQyMyI+IuCkuOCkv+CkmeCljeCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI0MTQ4MTIwNzQyMDk2NDc0NjQxIj4i4KSJ4KSq4KSy4KSs4KWN4KSn4KSk4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLgpLjgpYLgpJrgpKjgpL4g4KS44KWB4KSo4KWN4KSo4KWH4KS14KS+4KSy4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4KS44KSV4KWN4KSw4KS/4KSvIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7gpKbgpY3gpLXgpL7gpLDgpL4g4KS44KSV4KWN4KSw4KS/4KSvIOCkl+CksOCkv+Ckj+CkleCliyDgpLngpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSq4KWN4KSw4KSs4KSo4KWN4KSnIOCkl+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dF9sb25nIiBtc2dpZD0iNjQwNzM1MTAwNjI0OTE3NDQ3MyI+Ijx4bGlmZjpnIGlkPSJTRVNTSU9OIj4lczwveGxpZmY6Zz7gpLjgpIHgpJcg4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkm+ClpCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KS14KWN4KSv4KS14KS44KWN4KSl4KS+4KSq4KSoIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDQzNDM4OTY0NDQwOTYwNzQ1Ij4iVlBOIOCknOCkoeCkvuCkqCDgpLjgpKfgpYgg4KSc4KWL4KSh4KWN4KSm4KWI4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Nvbm5lY3RlZCIgbXNnaWQ9IjgyMDI2Nzk2NzQ4MTkyMTM5MzEiPiLgpLjgpKfgpYjgpIEg4KSW4KWB4KSy4KWN4KSy4KS+IOCkueClgeCkqOClhyBWUE4g4KSc4KWL4KSh4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Vycm9yIiBtc2dpZD0iNjAwOTI0OTgxNDAzNDcwODE3NSI+IuCkuOCkp+CliOCkgSDgpK3gpLDgpL8gVlBOIOCkpOCljeCksOClgeCkn+Ckv+CkruCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25maWciIG1zZ2lkPSI2NDE1ODk5MTUwNjcxNTM3OTcwIj4i4KSV4KSo4KWN4KSr4KS/4KSX4KSwIOCkl+CksOCljeCkqCDgpJ/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXBsb2FkX2ZpbGUiIG1zZ2lkPSIyODk3OTU3MTcyMzY2NzMwNDE2Ij4i4KSr4KS+4KSH4KSyIOCkm+CkvuCkqOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2ZpbGVfY2hvc2VuIiBtc2dpZD0iNjM2MzY0ODU2MjE3MDc1OTQ2NSI+IuCkleClgeCkqOCliCDgpKvgpL7gpIfgpLIg4KSb4KS+4KSo4KS/4KSP4KSV4KWLIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc2V0IiBtc2dpZD0iMjQ0ODE2ODA4MDk2NDIwOTkwOCI+IuCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpY3gpKjgpYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdWJtaXQiIG1zZ2lkPSIxNjAyMzM1NTcyMDg5OTExOTQxIj4i4KSq4KWH4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE2NDc2ODIxMjAwMzg2NDMxNiI+IuCkleCkvuCksCDgpK7gpYvgpKEg4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI4MDM1MjMwNTM3NTYzNTAzMjYyIj4i4KSV4KS+4KSwIOCkruCli+CkoeCkrOCkvuCknyDgpKjgpL/gpLjgpY3gpJXgpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE0NjY5NDIzNDM5ODIwMjYwMSI+IuCkn+Clh+CkpeCksCDgpJfgpLDgpY3gpKjgpYcg4KS14KS+IOCkueCkn+CkuOCljeCkquCknyDgpLjgpJXgpY3gpLDgpL/gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjY4NTcwMzE3NjAxMDMwNjI5ODIiPiLgpLjgpYfgpJ/gpIXgpKog4KSX4KSw4KWN4KSoIOCkn+CkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjIzMDA0NzAwMDQ1MDMzNDM0MzkiPiLgpKrgpJvgpL7gpKHgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXh0X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEwODA1NTUxMDQ2Nzc5OTI0MDgiPiLgpIXgpLDgpY3gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJza2lwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEyNzUzNjIyOTk0NzE2MzE4MTkiPiLgpJvgpYvgpKHgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ4OTA4OTQyNjc0NTQ4NjcyNzYiPiLgpIngpJrgpY3gpJog4KSu4KWL4KSs4KS+4KSH4KSyIOCkoeClh+Ckn+CkviDgpKrgpY3gpLDgpK/gpYvgpJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMzM0MDgyMjIyODU5OTMzNzc0MyI+IuCkruCli+CkrOCkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCkrOCkvuCksOClh+CkruCkviDgpIXgpLDgpYIg4KSl4KSqIOCknOCkvuCkqOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8gIOCkm+ClgeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2MjY5NTQxODk3NzI5NzgxMzMyIj4i4KSu4KWL4KSs4KS+4KSH4KSyIOCkoeClh+Ckn+CkviDgpLjgpYDgpK7gpL4g4KSq4KS+4KSwIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRocm90dGxlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjU0NDM0NTczMjEzNTQ5MDcxODEiPiLgpK7gpYvgpKzgpL7gpIfgpLIg4KSh4KWH4KSf4KS+IOCkquCljeCksOCkr+Cli+CklyDgpKzgpL7gpLDgpYcg4KSl4KSqIOCkuOCkv+CkleCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19tYXRjaGVzIiBtc2dpZD0iODEyOTQyMTkwODkxNTg0MDczNyI+IuCkleClgeCkqOCliCDgpK7gpL/gpLLgpYfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX29uX3BhZ2UiIG1zZ2lkPSIxOTQ2Nzk5MjMzODIyODIwMzg0Ij4i4KSq4KWD4KS34KWN4KSg4KSu4KS+IOCkq+Clh+CksuCkviDgpKrgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im1hdGNoZXNfZm91bmQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTY3MTQ3MDgxMTM2NTc5NDM5Ij4i4KWnIOCkruClh+CksiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDY0MTg3Mjc5NzA2NzYwOTE3NyI+Ijx4bGlmZjpnIGlkPSJUT1RBTCI+JWQ8L3hsaWZmOmc+IOCkleCliyA8eGxpZmY6ZyBpZD0iSU5ERVgiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9tb2RlX2RvbmUiIG1zZ2lkPSI3MjE3NTgxNjQwNDYxOTIyMjg5Ij4i4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfdW5tb3VudGluZyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzOTIzODEwNDQ4NTA3NjEyNzQ2Ij4iVVNCICDgpK3gpKPgpY3gpKHgpL7gpLDgpKMg4KSF4KSo4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkpuCliC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzI3ODk0OTk4NDA5NTM3MTkwIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkqOCkruCkvuCkieCkqOCljeCknyDgpJfgpLDgpY3gpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiJVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCkruClh+Ckn+CkvuCkieCkgeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NTk2OTg4ODc1NTA3MDQzMDQyIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkruClh+Ckn+CkvuCkieCkgeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcm1hdF9lcnJvciIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2Mjk5NzY5NTYzNjI0Nzc2OTQ4Ij4iVVNCIOCkreCko+CljeCkoeCkvuCksOCko+CksuCkvuCkiCDgpK7gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IlNEIOCkleCkvuCksOCljeCkoSDgpK7gpYfgpJ/gpL7gpIngpKgg4KS44KSV4KWH4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfYmFkX3JlbW92YWwiIG1zZ2lkPSI3OTYwODY0MDYxMDE2NjAzMjgxIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkqOCkruCkvuCkieCkqOCljeCknyDgpLngpYHgpKjgpYHgpK3gpKjgpY3gpKbgpL4g4KSq4KS54KS/4KSy4KS+IOCkqOCkv+CkleCkvuCksuCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQxODE4ODcyMDAwOTU2OTY5MyI+IuCkheCkueCkv+CksuClhyBVU0Ig4KSt4KSj4KWN4KSh4KS+4KSw4KSjIOCknOCkvuCkgeCkmiDgpK3gpIfgpLDgpLngpYfgpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2hlY2tpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzM0NzYyNTAzOTA0ODI3NDgxIj4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkheCkueCkv+CksuClhyDgpKrgpLDgpYDgpJXgpY3gpLfgpKMg4KSt4KSH4KSw4KS54KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JlbW92ZWQiIG1zZ2lkPSI3MDAxNTI2OTA1MDU3OTUyMDk3Ij4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkueCkn+CkvuCkh+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI1ODMwODE0MzQ5MjUwODM0MjI1Ij4iU0Qg4KSV4KS+4KSw4KWN4KShIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkpuCljeCkteCkvuCksOCkviDgpIXgpLngpL/gpLLgpYcg4KSq4KWN4KSw4KSv4KWL4KSX4KSu4KS+IOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MDYxMzA1NjgxMzM1NDA0MzUiPiJTRCDgpJXgpL7gpLDgpY3gpKEg4KSF4KS54KS/4KSy4KWHIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfdW5rbm93bl9zdGF0ZSIgbXNnaWQ9IjcyOTE5Mjc4MjE5NzI5MDM4NSI+IuCkrOCkvuCkueCljeCkryDgpK7gpL/gpKHgpL/gpK/gpL4g4KSF4KSc4KWN4KSe4KS+4KSkIOCkheCkteCkuOCljeCkpeCkvuCkruCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlIiBtc2dpZD0iMTc3ODY4NjYxODIzMDAxMTk2NCI+IuCkuOCkvuCkneClh+CkpuCkvuCksOClgCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kIiBtc2dpZD0iNDgwODI3MDkwMDMyMjk4NTk2MCI+IuCkquCkpOCljeCkpOCkviDgpLLgpJfgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWJzZWFyY2giIG1zZ2lkPSI0MzM3MTU3OTc3NDAwMjExNTg5Ij4i4KS14KWH4KSsIOCkluCli+CknOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmRfbmV4dCIgbXNnaWQ9IjU3NDIxMjQ2MTg5NDIxOTM5NzgiPiLgpIXgpLDgpY3gpJXgpYsg4KSt4KWH4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZF9wcmV2aW91cyIgbXNnaWQ9IjIxOTY3MjM2NjkzODgzNjA1MDYiPiLgpIXgpJjgpL/gpLLgpY3gpLLgpYsg4KSr4KWH4KSy4KS+IOCkquCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGlja2VyIiBtc2dpZD0iNTYyMjY4MzkxMjYxNjQ5NjE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4g4KSs4KS+4KSfIOCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpLDgpYvgpKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZlRpdGxlIiBtc2dpZD0iNTQ0Njg1ODcxNzE1NzQxNjgzOSI+IuCkuOCljeCkpeCkvuCkqCDgpIXgpKjgpYHgpLDgpYvgpKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZk1lc3NhZ2UiIG1zZ2lkPSIxMzc0NzE4MDIzMjI0MDAwNzAyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+ICg8eGxpZmY6ZyBpZD0iU0VSVklDRSI+JTIkczwveGxpZmY6Zz4pIOCkpuCljeCkteCkvuCksOCkviDgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZZZXMiIG1zZ2lkPSIyMzQ2NTY2MDcyODY3MjEzNTYzIj4i4KS54KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZObyIgbXNnaWQ9IjExNDY1NjQ5MzczNDY0NTQ4NjUiPiLgpLngpYvgpIfgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXMiIG1zZ2lkPSI1Mjk2MzIxODUwNjYyNzQ2ODkwIj4i4KS44KWA4KSu4KS+IOCkqOCkvuCkmOClh+CkleCkvuCkueCksOClgiDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3Rvb19tYW55X2RlbGV0ZXNfZGVzYyIgbXNnaWQ9IjQ5NjU1MTY3MTAwODY5NDI0NSI+IuCkpOCljeCkr+CkueCkvuCkgSA8eGxpZmY6ZyBpZD0iTlVNQkVSX09GX0RFTEVURURfSVRFTVMiPiUxJGQ8L3hsaWZmOmc+IOCkruClh+Ckn+CkvuCkh+Ckj+CkleCkviDgpIbgpIfgpJ/gpK7gpLngpLDgpYIg4KSb4KSo4KWNIDx4bGlmZjpnIGlkPSJUWVBFX09GX1NZTkMiPiUyJHM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+Ckvywg4KSW4KS+4KSk4KS+IDx4bGlmZjpnIGlkPSJBQ0NPVU5UX05BTUUiPiUzJHM8L3hsaWZmOmc+4KWkIOCkpOCkquCkvuCkiOCkgiDgpJXgpYcg4KSX4KSw4KWN4KSoIOCkmuCkvuCkueCkqOClgSDgpLngpYHgpKjgpY3gpJs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19yZWFsbHlfZGVsZXRlIiBtc2dpZD0iMjU3MjYwMDEwMzEyMjU5NjI0MyI+IuCkteCkuOCljeCkpOClgeCkueCksOClgiDgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3VuZG9fZGVsZXRlcyIgbXNnaWQ9IjI5NDEzMTczNjA2MDAzMzg2MDIiPiLgpK7gpYfgpJ/gpL/gpI/gpJXgpL7gpLngpLDgpYIg4KSq4KWC4KSw4KWN4KS14KS14KSkIOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfZG9fbm90aGluZyIgbXNnaWQ9IjM3NDM3NjQ3NDA0MzA4MjE4NDUiPiLgpIXgpLngpL/gpLLgpYfgpJXgpYsg4KSy4KS+4KSX4KS/IOCkleClh+CkueClgCDgpKjgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfYWNjb3VudF9sYWJlbCIgbXNnaWQ9IjU2NTUyMDMwODk3NDY0MjM5MjciPiLgpI/gpIngpJ/gpL4g4KSW4KS+4KSk4KS+IOCkm+CkvuCkqOCljeKAjeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2xhYmVsIiBtc2dpZD0iMjkzNTI2NzM0NDg0OTk5MzU1MyI+IuCkj+CkieCkn+CkviDgpJbgpL7gpKTgpL4g4KSl4KSq4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX2FjY291bnRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzYxMTk4Mjg5NDg1MzQzNTg3NCI+IuCkluCkvuCkpOCkviDgpKXgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iMjQxMjA3MjI3MjgzMjI4NDMxMyI+IuCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfZGVjcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjQ3NjA1MDc3ODM4Njc3OTA2NyI+IuCkmOCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9tb2RlIiBtc2dpZD0iMzA3MzEwMTA2NzQ0MTYzODQyOCI+Ijx4bGlmZjpnIGlkPSJWQUxVRSI+JXM8L3hsaWZmOmc+4KSb4KWB4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpLjgpK7gpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2luY3JlbWVudF9zY3JvbGxfYWN0aW9uIiBtc2dpZD0iOTEwMTQ3MzA0NTg5MTgzNTQ5MCI+IuCkrOCkouCkvuCkieCkqCDgpK7gpL7gpKXgpL8g4KSwIOCkmOCkn+CkvuCkieCkqCDgpKTgpLIg4KS44KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X21pbnV0ZV9idXR0b24iIG1zZ2lkPSI4ODY1ODg1MTE0MDI4NjE0MzIxIj4i4KSu4KS/4KSo4KWH4KSfIOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iNjI0NjgzNDkzNzA4MDY4NDc5MSI+IuCkruCkv+CkqOClh+CknyDgpJjgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIzNjUyMDU2MDU1ODEwMjIzMTM5Ij4i4KSY4KSo4KWN4KSf4KS+IOCkrOCkouCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9ob3VyX2J1dHRvbiIgbXNnaWQ9IjEzNzc0Nzk4NjM0MjkyMTQ3OTIiPiLgpJjgpKjgpY3gpJ/gpL4g4KSY4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X3NldF9wbV9idXR0b24iIG1zZ2lkPSI0MTQ3NTkwNjk2MTUxMjMwODYzIj4iUE0g4KS44KWH4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9zZXRfYW1fYnV0dG9uIiBtc2dpZD0iODMwMjE0MDM1MzUzOTQ4Njc1MiI+IkFNIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iNTM2OTk5ODQ3OTA2NzkzNDExMCI+IuCkruCkueCkv+CkqOCkviDgpKzgpKLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iMTgzMjY5ODk5NTU0MTcyNjAxOSI+IuCkruCkueCkv+CkqOCkviDgpJjgpJ/gpL7gpIngpKjgpYHgpLngpYvgpY3gpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfZGF5X2J1dHRvbiIgbXNnaWQ9IjcxMzA0NjU0MTIzMDgxNzM5MDMiPiLgpKbgpL/gpKgg4KSs4KSi4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI0MTMxODgxNTIxODE4NzUwMDMxIj4i4KSm4KS/4KSoIOCkmOCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF95ZWFyX2J1dHRvbiIgbXNnaWQ9IjYzMTg2OTczODQzMTA4MDg4OTkiPiLgpLXgpLDgpY3gpLcg4KSs4KSi4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X3llYXJfYnV0dG9uIiBtc2dpZD0iNDQ4MjAyMTgxMzQ5MTEyMTcxNyI+IuCkteCksOCljeCktyDgpJjgpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IuCksOCkpuCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLgpK7gpYvgpKEg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4i4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IuCkj+CkieCkn+CkviDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSb4KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IOCkuOCkgeCklyDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IuCkp+Ckv+CkuOCkvuCksOCljeCkqOClhyDgpLngpY3gpK/gpL7gpKjgpY3gpKHgpLLgpaQg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWNICZhbXA7IOCkuOCkruCkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkruCkvuCkpeCkvyDgpKfgpL/gpLjgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4KSV4KWLIOCksuCkvuCkl+CkvyDgpKTgpLIg4KS44KWN4KSy4KS+4KSH4KShIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuCkuOCljeCksuCkvuCkh+CkoSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkrOCkvuCkr+CkvuCkgeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLgpLjgpY3gpLLgpL7gpIfgpKEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+CkvyDgpKbgpL7gpK/gpL7gpIHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuCkruCljOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLgpIbgpLXgpL7gpJwg4KSa4KS+4KSy4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLgpJbgpYvgpLLgpY3gpKjgpLLgpL7gpIcg4KS54KWB4KSk4KWN4KSk4KWN4KSv4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IuCkrOCli+CksuCkv+Ckj+CkleCliyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSV4KWB4KSe4KWN4KSc4KWA4KS54KSw4KWCIOCkuOClgeCkqOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KS54KWH4KSh4KS44KWH4KSfIOCkquCljeCksuCklyDgpIfgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i4KSh4KSf4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTI5MzYwMDQ5NjYwMTQ5MDIxNiI+IuCkl+Clg+CkuSDgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjIzNzQ5NjU2Mjk1MjE1MjU4OSI+IuCkruCkvuCkpeCkvyDgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbWVudV9vdmVyZmxvd19kZXNjcmlwdGlvbiIgbXNnaWQ9IjIyOTU2NTkwMzc1MDkwMDg0NTMiPiLgpKXgpKog4KS14KS/4KSV4KSy4KWN4KSq4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9Ijc5NjU5ODQzNjA5MDM2OTM5MDMiPiIlMSRzLCAlMiRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2Jhcl9ob21lX3N1YnRpdGxlX2Rlc2NyaXB0aW9uX2Zvcm1hdCIgbXNnaWQ9IjY5ODU1NDY1MzA0NzE3ODA3MjciPiIlMSRzLCAlMiRzLCAlMyRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9pbnRlcm5hbCIgbXNnaWQ9IjQ4OTE5MTY4MzM2NTc5MjkyNjMiPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV9zZF9jYXJkIiBtc2dpZD0iMzI4Mjk0ODg2MTM3ODI4Njc0NSI+IlNEIOCkleCkvuCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiIiBtc2dpZD0iMzAxNzk1NDA1OTUzODUxNzI3OCI+IlVTQiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRyYWN0X2VkaXRfbWVudV9idXR0b24iIG1zZ2lkPSI4OTQwNDc4NzMwNDk2NjEwMTM3Ij4i4KS44KSu4KWN4KSq4KS+4KSm4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE5NTU2Mzg4NjIxMjIyMzIzNDIiPiLgpKHgpYfgpJ/gpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkmuClh+CkpOCkvuCkteCkqOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ19ib2R5IiBtc2dpZD0iMjgxNDY3MzU1MTQ3MTk2OTk1NCI+IuCkieCkquCkr+Cli+CklyDgpLAg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIOCkueClh+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzA5MzMzNDQxOTUxODcwNjY4NiI+IjJHLTNHIOCkoeClh+Ckn+CkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF90aXRsZSIgbXNnaWQ9Ijc2MzY0ODk0MzY4MTk0NzA3NjEiPiI0RyDgpKHgpYfgpJ/gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzg2OTQwMjUxOTM5MTYzMTg4NCI+IuCkruCli+CkrOCkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF90aXRsZSIgbXNnaWQ9Ijg5OTIxNTQ3MzY0NDEyODQ4NjUiPiLgpLXgpL7gpIct4KSr4KS+4KSHIOCkoeClh+Ckn+CkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+IuCkuOCkleCljeCkt+CkriDgpKrgpL7gpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iNzAyNjczOTEyMTEzODAwNTIzMSI+IjJHLTNHIOCkoeClh+Ckn+CkviDgpLjgpYDgpK7gpL4g4KSt4KSo4KWN4KSm4KS+IOCkquCkvuCksCDgpK3gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMTEwNjU2Mjc3OTMxMTIwOTAzOSI+IjRHIOCkoeClh+Ckn+CkviBTSU3gpL4g4KSo4KS+4KSY4KWN4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjI3OTI0MDU3MjE2NTQxMjE2OCI+IuCkruCli+CkteCkvuCkh+CksiDgpKHgpYfgpJ/gpL4gU0lN4KS+IOCkqOCkvuCkmOCljeCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2lmaV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iODc0Mzg1NjAwNjM4NDgyNTk3NCI+IuCkteCkvuCkhy3gpKvgpL7gpIcg4KSh4KWH4KSf4KS+IFNJTeCkviDgpKjgpL7gpJjgpY3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2xpbWl0X3Nub296ZWRfYm9keSIgbXNnaWQ9IjcwMzU0OTAyNzgyOTg0NDE3NjciPiI8eGxpZmY6ZyBpZD0iU0laRSI+JXM8L3hsaWZmOmc+IOCkieCksuCljeCksuClh+CkluCkv+CkpCDgpLjgpYDgpK7gpL4g4KSt4KSo4KWN4KSm4KS+IOCkrOCkouClgCDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfdGl0bGUiIG1zZ2lkPSI1OTY1MTU3MzYxMDM2MzIxOTE0Ij4i4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/4KSV4KS+IOCkoeClh+Ckn+CkviDgpKrgpY3gpLDgpKTgpL/gpKzgpKjgpY3gpKfgpL/gpKQg4KSX4KSw4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF9ib2R5IiBtc2dpZD0iNjc0MTUyMTMzMDk5NzQ1Mjk5MCI+IuCkheCkteCksOCli+CkpyDgpLngpJ/gpL7gpIngpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlIiBtc2dpZD0iNjUxMDA0MDQ4NjA0OTIzNzYzOSI+IuCkuOClgeCksOCkleCljeCkt+CkviDgpKrgpY3gpLDgpK7gpL7gpKPgpKrgpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGVfaXNfdmFsaWQiIG1zZ2lkPSI2ODI1MjYzMjUwNzc0NTY5MzczIj4i4KSq4KWN4KSw4KSu4KS+4KSj4KSq4KSk4KWN4KSwIOCkruCkvuCkqOCljeCkryDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfdG8iIG1zZ2lkPSI0NTQyMzk0ODAyNzQ5MjEwMzIiPiLgpKbgpY3gpLXgpL7gpLDgpL4g4KSc4KS+4KSw4KWAIOCkl+CksOCkv+Ckj+CkleClizoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21tb25fbmFtZSIgbXNnaWQ9IjIyMzMyMDkyOTk0MzQxNzI2NDYiPiLgpLjgpL7gpKfgpL7gpLDgpKMg4KSo4KS+4KSuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ19uYW1lIiBtc2dpZD0iNjk3MzU2MTE5MDc2MjA4NTIzNiI+IuCkuOCkguCkl+CkoOCkqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdfdW5pdCIgbXNnaWQ9IjcyNjU5ODE4OTA0MjIwNzAzODMiPiLgpLjgpILgpJfgpKDgpKjgpL7gpKTgpY3gpK7gpJUg4KSP4KSV4KS+4KSHOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9ieSIgbXNnaWQ9IjI2NDc1ODQ5ODgwNTc0ODE1NjYiPiLgpKbgpY3gpLXgpL7gpLDgpL4g4KSc4KS+4KSw4KWAIOCkl+CksOCkv+Ckj+CkleClizoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2YWxpZGl0eV9wZXJpb2QiIG1zZ2lkPSI4ODE4ODg2MTM3NTQ1OTgzMTEwIj4i4KSu4KS+4KSo4KWN4KSv4KSk4KS+OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9vbiIgbXNnaWQ9IjU4OTUwMTc0MDQzNjEzOTcyMzIiPiLgpJzgpL7gpLDgpYAg4KSX4KSw4KS/4KSP4KSV4KWLOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4cGlyZXNfb24iIG1zZ2lkPSIzNjc2MjQyOTQ5OTE1OTU5ODIxIj4i4KSF4KS14KSn4KS/IOCkuOCkruCkvuCkquCljeCkpDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4i4KSV4KWN4KSw4KSuIOCkuOCkguCkluCljeCkr+CkvjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5nZXJwcmludHMiIG1zZ2lkPSI0NTE2MDE5NjE5ODUwNzYzMDQ5Ij4i4KSU4KSB4KSg4KS+4KSb4KS+4KSq4KS54KSw4KWCOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTI1Nl9maW5nZXJwcmludCIgbXNnaWQ9IjQzOTEyNzEyODY0NzcyNzkyNjMiPiJTSEEt4KWo4KWr4KWsIOCklOCkguCkoOCkvuCkm+CkvuCkqjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGExX2ZpbmdlcnByaW50IiBtc2dpZD0iNzkzMDMzMDIzNTI2OTQwNDU4MSI+IlNIQS0xIOCklOCkguCksuCkvuCkm+CkvuCkqjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfc2VlX2FsbCIgbXNnaWQ9IjQyOTI1NjkzODM5NzY2MzYyMDAiPiLgpLjgpKzgpYgg4KS54KWH4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNDcxMDAxMzg2NDk3NDA0MDYxNSI+IuCkl+CkpOCkv+CkteCkv+Ckp+CkvyDgpJvgpKjgpYzgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfYWN0aW9uX3Byb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI1MjQ3Njg0NDM1OTc5MTQ5MjE2Ij4i4KS44KS+4KSd4KWH4KSm4KS+4KSw4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfZGV2aWNlX2xvY2tlZCIgbXNnaWQ9IjMwOTI3MDM0NDg2OTA2Njk3NjgiPiLgpIngpKrgpJXgpLDgpKMg4KSy4KSVIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxpc3RfZGVsaW1ldGVyIiBtc2dpZD0iMzk3NTExNzU3MjE4NTQ5NDE1MiI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VuZGluZyIgbXNnaWQ9IjMyNDU2NTM2ODEwMDgyMTgwMzAiPiLgpKrgpKDgpL7gpIngpIHgpKbgpYguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hCcm93c2VyRGVmYXVsdCIgbXNnaWQ9IjIwNTc5NTE5NDcyOTc2MTQ3MjUiPiLgpKzgpY3gpLDgpL7gpIngpJzgpLAg4KS44KWB4KSw4KWBIOCkl+CksOCljeCkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iU2V0dXBDYWxsRGVmYXVsdCIgbXNnaWQ9IjU4MzQ5NDg0NjkyNTM3NTg1NzUiPiLgpJXgpLIg4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqOClgeCkueClgeCkqOCljeCkmz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9yZXNvbHZlcl91c2VfYWx3YXlzIiBtc2dpZD0iODAxNzc3MDc0NzgwMTQ5NDkzMyI+IuCkuOCkp+CliOCkgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9vbmNlIiBtc2dpZD0iMjQwNDY0NDc5NzE0OTE3Mzc1OCI+IuCkj+CkieCkn+CkviDgpK7gpL7gpKTgpY3gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MTcwNTM4OTgxNjcxMjc0NzEiPiLgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjM5MjkxMjczNDIwMTQwMTIzIj4i4KSr4KWL4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2hlYWRwaG9uZXMiIG1zZ2lkPSI4MTE5OTcxODQzODAzNDM5MTEwIj4i4KS54KWH4KSh4KSr4KWL4KSo4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2RvY2tfc3BlYWtlcnMiIG1zZ2lkPSI2MjQwNjAyOTgyMjc2NTkxODY0Ij4i4KSh4KSVIOCkuOCljeCkquCkv+CkleCksOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbWVkaWFfcm91dGVfbmFtZV9oZG1pIiBtc2dpZD0iMjQ1MDk3MDM5OTAyMzQ3ODA1NSI+IkhETUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKUg4KSF4KSh4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLgpKTgpL7gpLDgpLDgpLngpL/gpKQg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IuCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IuCkruCkv+CkoeCkv+Ckr+CkvuCkleCliyDgpIngpKTgpY3gpKrgpL7gpKbgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i4KS44KWN4KSV4KWN4KSv4KS+4KSoIOCkl+CksOCljeCkpuCliCAuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLgpJzgpKHgpL7gpKgg4KS54KWB4KSB4KSm4KWILi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLgpIngpKrgpLLgpKzgpY3gpKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9IjY3Mzk4OTk5NjI2ODE4ODY0MDEiPiLgpIngpKrgpLLgpKzgpY3gpKcg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpK7gpL4g4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2J1aWx0X2luX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjI1ODMxMzQyOTQyOTI1NjM5NDEiPiLgpKrgpYLgpLDgpY3gpLUt4KSo4KS/4KSw4KWN4KSu4KS/4KSkIOCkuOCljeCkleCljeCksOCkv+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9oZG1pX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjE1NTUyNjQ1NTkyMjc0NzAxMDkiPiJIRE1JIOCkuOCljeCkleCljeCksOCkv+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLgpIbgpLXgpLDgpKMgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IuCkpOCkvuCksOCksOCkueCkv+CkpCDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLgpIXgpLDgpY3gpJXgpYsg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkr+CliyDgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLLgpYcg4KSm4KWH4KSW4KS+4KSH4KSw4KS54KWH4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLgpLXgpL/gpJrgpY3gpJvgpYfgpKbgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSV4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4KSi4KS+4KSB4KSa4KS+IOCkrOCkv+CksOCljeCkuOCkqOClgSDgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IuCkl+CksuCkpCDgpKLgpL7gpIHgpJrgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiLgpJfgpLLgpKQg4KSq4KS+4KS44KS14KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+IuCkl+CksuCkpCBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJGQ8L3hsaWZmOmc+4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLgpIbgpKvgpY3gpKjgpYsg4KSi4KS+4KSB4KSa4KS+IOCkleCli+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNJTSBQSU4g4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iUElOIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkheCkueCkv+CksuClhyDgpIXgpLjgpJXgpY3gpLfgpK4g4KSb4KWkIOCkuOClgeCkmuCkvuCksOClgSDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IFBVSyDgpJXgpYvgpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCAg4KS14KS/4KS14KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpLXgpL7gpLngpJXgpLLgpL7gpIgg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLgpIfgpJrgpY3gpJvgpL/gpKQgUElOIOCkleCli+CkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IuCkruCkqOCkquCksOCljeCkpuCliyBQSU4g4KSV4KWL4KShIOCkqOCkv+CktuCljeCkmuCkv+CkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IuCkl+CksuCkpCBQSU4g4KSV4KWL4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4KWqIOCkpuClh+CkluCkvyDgpa4g4KS14KS+4KSfIOCkqOCkruCljeCkrOCksCDgpK3gpI/gpJXgpYsg4KSP4KSJ4KSf4KS+IFBJTiDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIOCkleCli+CkoSDgpa4g4KS14KSf4KS+IOCkqOCkruCljeCkrOCksCDgpLXgpL4g4KS44KWLIOCkreCkqOCljeCkpuCkviDgpKzgpKLgpYAg4KS54KWB4KSo4KWB4KSq4KSw4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iUFVLIOCkleCli+CkoSDgpKrgpYHgpKg64KSq4KWN4KSw4KSm4KS+4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCDgpKfgpYfgpLDgpYgg4KSq4KWB4KSoOuCkquCljeCksOCkr+CkvuCkuOCkueCksOClguCksuClhyBTSU3gpLLgpL7gpIgg4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpKjgpL/gpLfgpY3gpJXgpY3gpLDgpL/gpK8g4KSX4KSw4KS/4KSm4KS/4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4g4KSV4KWL4KSh4KS54KSw4KWCIOCkruClh+CksiDgpJbgpL7gpI/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLgpKjgpL/gpJXgpYgg4KSn4KWH4KSw4KWIIOCkouCkvuCkgeCkmuCkviDgpJXgpYvgpLjgpL/gpLjgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8sIOCkpOCkquCkvuCkiOCkgeCkleCliyBHb29nbGUg4KSW4KS+4KSk4KS+4KSV4KWLIOCkuOCkvuCkpSDgpLjgpL7gpIfgpKgg4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriAo4KSH4KSu4KWH4KSyKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLgpLjgpL7gpIfgpKgg4KSH4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i4KSF4KSu4KS+4KSo4KWN4KSvIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkvuCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuCkleClhyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriDgpLXgpL4g4KSq4KS+4KS44KS14KSw4KWN4KShIOCkrOCkv+CksOCljeCkuOCkqOClgeCkreCkr+Cliz9cbiI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDgpK7gpL4g4KSc4KS+4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i4KSW4KS+4KSk4KS+IOCknOCkvuCkgeCkmiDgpLngpYHgpIHgpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJfgpLLgpKQg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkreCkj+CkleCliyDgpJvgpaQgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIXgpKjgpLLgpJUg4KSi4KS+4KSB4KSa4KS+IOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkluCkv+CkmuCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpJXgpYvgpLjgpL/gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKrgpJvgpL8g4KSl4KSqIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYIsIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpL/gpKjgpYcg4KSbIOCksCDgpLjgpKzgpYgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkoeClh+Ckn+CkviDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJfgpLLgpKTgpLjgpIHgpJcg4KSr4KWL4KSo4KSy4KS+4KSIIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSv4KWL4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkquCkm+CkvyDgpKXgpKog4KSF4KS44KSr4KSyIOCkleCli+CkuOCkv+CkuOCkueCksOClgiwg4KSr4KWL4KSo4KSy4KS+4KSIIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpL7gpLDgpY3gpK/gpLbgpL7gpLLgpL7gpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkl+CksOCkv+CkqOClhyDgpJsg4KSwIOCkuOCkrOCliCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSh4KWH4KSf4KS+IOCkueCksOCkvuCkieCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJ/gpY3gpK/gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIOCkheCkrCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSkIOCkleCkvuCksOCljeCkr+CktuCkvuCksuCkvuCkruCkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KS/4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkq+Cli+CkqCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkl+CksOCljeCkqOClgeCkreCkr+Cli+ClpCDgpIXgpKwg4KSr4KWL4KSoIOCkq+CljeCkr+CkvuCkleCljeCkn+CljeCksOCkvyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkueClgeCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkleCli+CksOCljeCkqOClgeCkreCkr+Cli+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLXgpL/gpKvgpLIg4KSq4KWN4KSw4KSv4KSk4KWN4KSo4KS54KSw4KWCIOCkquCkm+Ckvywg4KSk4KSq4KS+4KSI4KSC4KSy4KS+4KSIIOCkhuCkq+CljeCkqOCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSH4KSu4KWH4KSyIOCkluCkvuCkpOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KS44KWL4KSn4KS/4KSo4KWHIOCkm+ClpFxuXG4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KS54KSw4KWC4KSu4KS+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL4g4KSX4KSy4KSkIOCksOClguCkquCkruCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSk4KS+4KSo4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSn4KWH4KSw4KWIIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpKrgpJvgpL8sIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpI/gpIngpJ/gpL4g4KSH4KSu4KWH4KSyIOCkluCkvuCkpOCkvuCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpLjgpYvgpKfgpL/gpKjgpYcg4KSb4KWkXG5cbiDgpKvgpYfgpLDgpL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYWZlX21lZGlhX3ZvbHVtZV93YXJuaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMyNDE2MTkzOTQ3NTQ3ODA2NiI+IuCkhuCkteCkvuCknCDgpLjgpLLgpY3gpLLgpL7gpLkg4KSm4KS/4KSP4KSV4KWLIOCkpOCkueCkreCkqOCljeCkpuCkviDgpK7gpL7gpKXgpL8gIOCkrOCkouCkvuCkieCkqOClhyDgpLngpYs/XG7gpKDgpYLgpLLgpYsg4KSG4KS14KS+4KSc4KSu4KS+IOCkuOClgeCkqOCljeCkpuCkviDgpLLgpL7gpK7gpYsg4KS44KSu4KSv4KSV4KWLIOCksuCkvuCkl+CkvyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KWB4KSo4KWN4KSo4KWHIOCktuCkleCljeCkpOClgOCksuCkvuCkiCDgpJbgpKTgpY3gpKTgpK4g4KSq4KS+4KSw4KWN4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRpbnVlX3RvX2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTYyNjQyNzM3MjMxNjA3MDI1OCI+IuCkieCkquCksuCkrOCljeCkp+CkpOCkviDgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkpuClgeCkiOCkteCkn+CkviDgpJTgpILgpLLgpL7gpLngpLDgpYLgpLLgpYcg4KSl4KS/4KSa4KS/4KSw4KS54KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9lbmFibGVkIiBtc2dpZD0iMTM4MTk3MjA0ODU2NDU0NzY4NSI+IuCkquCkueClgeCkgeCkmiDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2FjY2Vzc2liaWxpdHlfY2FuY2VsZWQiIG1zZ2lkPSIzODMzOTIzMjU3OTY2NjM1NjczIj4i4KSq4KS54KWB4KSB4KSa4KSv4KWL4KSX4KWN4KSv4KSk4KS+IOCksOCkpuCljeCkpiDgpJfgpLDgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IuCkheCkueCkv+CksuClh+CkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3duZXJfbmFtZSIgbXNnaWQ9IjI3MTY3NTU0NjAzNzYwMjgxNTQiPiLgpK7gpL7gpLLgpL/gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX3RpdGxlIiBtc2dpZD0iNDUxMDM3MzA4MzA4MjUwMDE5NSI+IuCkpOCljeCksOClgeCkn+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub19yZXN0cmljdGVkX2FjY291bnRzIiBtc2dpZD0iNTczOTQ2MzI0OTY3MzcyNzczNiI+IuCkquCljeCksOCkpOCkv+CkrOCkqOCljeCkp+Ckv+CkpCDgpKrgpY3gpLDgpYvgpKvgpL7gpIfgpLLgpLngpLDgpYLgpJXgpYsg4KSy4KS+4KSX4KS/IOCkr+CkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpYcg4KSW4KS+4KSk4KS+4KS54KSw4KWCIOCkuOCkruCksOCljeCkpeCkqCDgpJfgpLDgpY3gpKbgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbm90X2ZvdW5kIiBtc2dpZD0iMzQyOTE0MTg1MzQ5ODkyNzM3OSI+IuCkr+CkuCDgpJXgpL7gpLDgpY3gpK8g4KS44KSu4KWN4KS54KS+4KSy4KSo4KWHIOCkleClgeCkqOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSt4KWH4KSf4KS/4KSP4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmV2b2tlIiBtc2dpZD0iNTQwNDQ3OTE4NTIyODI3MTU4NiI+IuCksOCkpuCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EwIiBtc2dpZD0iNzg3NTQyNzQ4OTQyMDgyMTc5MyI+IklTTyBBMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEiIG1zZ2lkPSIzNzYwNzM0NDk5MDUwODc1MzU2Ij4iSVNPIEExIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMiIgbXNnaWQ9IjU5NzMyNjYzNzgwMjAxNDQzODIiPiJJU08gQTIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EzIiBtc2dpZD0iMTM3MzQwNzEwNTY4NzMwMDg4NCI+IklTTyBBMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTQiIG1zZ2lkPSI2Njg5NzcyODA3OTgyNTk3MjU0Ij4iSVNPIEE0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNSIgbXNnaWQ9IjUzNTM1NDk2NTIwMTU3NDEwNDAiPiJJU08gQTUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E2IiBtc2dpZD0iODU4NTAzODA0ODY3NDkxMTkwNyI+IklTTyBBNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTciIG1zZ2lkPSI2NjQxODM2NzE2OTYzODM5MTE5Ij4iSVNPIEE3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hOCIgbXNnaWQ9Ijc1NzExMzk0Mzc0NjU2OTMzNTUiPiJJU08gQTgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E5IiBtc2dpZD0iMTM3ODQ1NTg5MTk1NzExNTA3OSI+IklTTyBBOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEwIiBtc2dpZD0iMjQ4MDc0NzQ1NzQyOTQ3NTM0NCI+IklTTyBBMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IwIiBtc2dpZD0iMzk2NTkzNTA5NzY2MTEwODAzOSI+IklTTyBCMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEiIG1zZ2lkPSIyNTA1NzUzMjg1MDEwMTE1NDM3Ij4iSVNPIEIxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMiIgbXNnaWQ9Ijg3NjM4NzQ3MDk4NTk0NTg0NTMiPiJJU08gQjIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IzIiBtc2dpZD0iNDIxMDUwNjY4ODE5MTc2NDA3NiI+IklTTyBCMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjQiIG1zZ2lkPSI1NzQ5NDA0MTY1ODg4NTI2MDM0Ij4iSVNPIEI0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNSIgbXNnaWQ9Ijc2NDA2Mjc0MTQ2MjE5MDQ3MzMiPiJJU08gQjUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I2IiBtc2dpZD0iNzM0Mjk4ODg2NDcxMjc0ODU0NCI+IklTTyBCNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjciIG1zZ2lkPSI1MDY5ODQ0MDY1MjM1MzgyNDI5Ij4iSVNPIEI3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iOCIgbXNnaWQ9IjczMTY4MTg5MjIyNzg3Nzk3NzQiPiJJU08gQjgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I5IiBtc2dpZD0iNTQxNDcyNzA5NDAyNjUzMjM0MSI+IklTTyBCOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEwIiBtc2dpZD0iNTI1MTI1MzczMTgzMjA0ODE4NSI+IklTTyBCMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MwIiBtc2dpZD0iNDAwMzEzODM0MjY3MTk2NDIxNyI+IklTTyBDMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzEiIG1zZ2lkPSIxOTM1MTg4MDYzMzkzNTUzMDA4Ij4iSVNPIEMxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMiIgbXNnaWQ9IjMxOTczMDc5Njk3MTIwNjk5MDQiPiJJU08gQzIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MzIiBtc2dpZD0iNDMzNTgyNjA4NzMyMTkxMzUwOCI+IklTTyBDMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzQiIG1zZ2lkPSIzNzQ1NjM5NTk4MjgxMDE1MDA1Ij4iSVNPIEM0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNSIgbXNnaWQ9IjgyNjk0NTc3NjU4MjI3OTEwMTMiPiJJU08gQzUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M2IiBtc2dpZD0iNTY2NjY2MTA1MjYwMzQ2OTMwIj4iSVNPIEM2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNyIgbXNnaWQ9Ijg2Nzg0MTMxODA3ODI2MDg0OTgiPiJJU08gQzciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M4IiBtc2dpZD0iODM5MjM3NjIwNjYyNzA0MTczMCI+IklTTyBDOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzkiIG1zZ2lkPSI5MTkxNjEzMzcyMzI0ODQ1NDA1Ij4iSVNPIEM5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMTAiIG1zZ2lkPSI3MzI3NzA5Njk5MTg0OTIwODIyIj4iSVNPIEMxMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZXR0ZXIiIG1zZ2lkPSI0MTkxODA1NjE1ODI5NDcyOTUzIj4i4KSq4KSk4KWN4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2d2cm5tdF9sZXR0ZXIiIG1zZ2lkPSI3ODUzMzgyMTkyNjQ5NDA1NTA3Ij4i4KS44KSw4KSV4KS+4KSw4KWAIOCkquCkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZWdhbCIgbXNnaWQ9IjY2OTc5ODI5ODgyODM4MjMxNTAiPiLgpJXgpL7gpKjgpYLgpKjgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfanVuaW9yX2xlZ2FsIiBtc2dpZD0iMzcyNzc0Mzk2OTkwMjc1ODk0OCI+Ikp1bmlvciBMZWdhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZWRnZXIiIG1zZ2lkPSIyODE4NzE0NjQ4OTY2MDEyMzYiPiJMZWRnZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfdGFibG9pZCIgbXNnaWQ9IjU3NzU5NjY0MTYzMzM1NzgxMjciPiJUYWJsb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id3JpdGVfZmFpbF9yZWFzb25fY2FuY2VsbGVkIiBtc2dpZD0iNzA5MTI1ODM3ODEyMTYyNzYyNCI+IuCksOCkpuCljeCkpiDgpJfgpLDgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3cml0ZV9mYWlsX3JlYXNvbl9jYW5ub3Rfd3JpdGUiIG1zZ2lkPSI4MTMyNTA1NDE3OTM1MzM3NzI0Ij4i4KS44KS+4KSu4KS+4KSX4KWN4KSw4KWAIOCksuClh+CkluCkqOCkruCkviDgpKTgpY3gpLDgpYHgpJ/gpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfcGluIiBtc2dpZD0iMzM5NTk1MzQyMTM2ODQ3NjEwMyI+IlBJTiDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX29sZF9waW4iIG1zZ2lkPSIxNDYyMjA2MjI1NTEyOTEwNzU3Ij4i4KS14KSw4KWN4KSk4KSu4KS+4KSoIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9uZXdfcGluIiBtc2dpZD0iNTk1OTYwNjY5MTYxOTk1OTE4NCI+IuCkqOCkr+CkvuCkgSBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY29uZmlybV9waW4iIG1zZ2lkPSI4NTAxNTIzODI5NjMzMTQ2MjM5Ij4i4KSo4KSv4KS+4KSBIFBJTiDgpKjgpL/gpLbgpY3gpJrgpL/gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NyZWF0ZV9waW4iIG1zZ2lkPSI4MDE3NjAwMDAwMjYzNDUwMzM3Ij4i4KSq4KWN4KSw4KSk4KS/4KSs4KSo4KWN4KSn4KS54KSw4KWC4KSy4KS+4KSIIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkj+CkieCkn+CkviBQSU4g4KSs4KSo4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCIgbXNnaWQ9IjIyMjQyMTQxOTA5MDY5OTQ1NDgiPiJQSU4g4KS54KSw4KWCIOCkruClh+CksiDgpJbgpL7gpI/gpKjgpKjgpY3gpaQg4KSq4KWB4KSo4KSDIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfdG9vX3Nob3J0IiBtc2dpZD0iODE3Mzk4Mjc1NjI2NTc3Nzc5MiI+IlBJTiDgpIXgpKTgpL8g4KSb4KWL4KSf4KWLIOCkreCkr+Cli+ClpCDgpJXgpK7gpY3gpKTgpYDgpK7gpL4g4KWqIOCkheCkmeCljeCklSDgpLngpYHgpKgg4KSG4KS14KS24KWN4KSv4KSVIOCkm+ClpCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icmVzdHJfcGluX2NvdW50ZG93biI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ4MzU2Mzk5Njk1MDM3Mjk4NzQiPiLgpJfgpLLgpKQgUElOIOClpCDgpacg4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquClgeCkqOCkgyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4MDMwNjA3MzQzMjIzMjg3NjU0Ij4i4KSX4KSy4KSkIFBJTiDgpaQgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkquClgeCkqOCkgyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0idHJhbnNpZW50X25hdmlnYXRpb25fY29uZmlybWF0aW9uIiBtc2dpZD0iNDkwNzg0NDA0MzYxMTEyMzQyNiI+IuCkquCkn+CljeCkn+CkvyDgpKbgpYfgpJbgpL/gpKjgpYcg4KSs4KSo4KS+4KSJ4KSoIOCkuOCljeCkleCljeCksOCkv+CkqOCkleCliyDgpJvgpYfgpIngpK7gpL4g4KS44KWN4KS14KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRyYW5zaWVudF9uYXZpZ2F0aW9uX2NvbmZpcm1hdGlvbl9sb25nIiBtc2dpZD0iODA2MTY4NTkyMDUwODA4NjY5NyI+IuCkquCljeCksOCko+CkvuCksuClgCDgpKrgpJ/gpY3gpJ/gpL8g4KSm4KWH4KSW4KS/4KSo4KWHIOCkrOCkqOCkvuCkieCkqCDgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpJXgpYsg4KSb4KWH4KSJ4KSs4KS+4KSfIOCkuOCljeCkteCkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCmluZGV4IDMwYWZlYTcuLjMwN2RjYmUgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iVHlwIGVlbiBQVUstY29kZSBkaWUgOCBjaWpmZXJzIG9mIGxhbmdlciBpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iVXcgU0lNLWthYXJ0IGlzIHZlcmdyZW5kZWxkIG1ldCBkZSBQVUstY29kZS4gVHlwIGRlIFBVSy1jb2RlIG9tIHRlIG9udGdyZW5kZWxlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJWb2VyIGRlIFBVSzItY29kZSBpbiBvbSBkZSBTSU0ta2FhcnQgdGUgb250Z3JlbmRlbGVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+Ik1pc2x1a3QuIFNjaGFrZWwgU0lNL1JVSU0tdmVyZ3JlbmRlbGluZyBpbi4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJVIGhlZWZ0IG5vZyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9naW5nIG92ZXIgdm9vcmRhdCBkZSBzaW1rYWFydCB3b3JkdCB2ZXJncmVuZGVsZC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJVIGhlZWZ0IG5vZyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9naW5nZW4gb3ZlciB2b29yZGF0IGRlIHNpbWthYXJ0IHdvcmR0IHZlcmdyZW5kZWxkLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSW5rb21lbmRlIGJlbGxlci1pZCI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iU3RhYXQgZGUgaG91ZGVyIHRvZSB2ZXJiaW5kaW5nIHRlIG1ha2VuIG1ldCBkZSBob29mZGludGVyZmFjZSB2YW4gZWVuIFZQTi1zZXJ2aWNlLiBOb29pdCB2ZXJlaXN0IHZvb3Igbm9ybWFsZSBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJ2ZXJiaW5kZW4gbWV0IGVlbiBhY2h0ZXJncm9uZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iSGllcm1lZSB3b3JkdCBkZSBob3VkZXIgdG9lZ2VzdGFhbiB6aWNoIHRlIHZlcmJpbmRlbiBtZXQgZGUgaG9vZmRpbnRlcmZhY2UgdmFuIGVlbiBhY2h0ZXJncm9uZC4gTm9vaXQgdmVyZWlzdCB2b29yIG5vcm1hbGUgYXBwcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+InZlcmJpbmRpbmcgbWFrZW4gbWV0IGVlbiBleHRlcm4gZGlzcGxheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IkhpZXJtZWUgd29yZHQgZGUgaG91ZGVyIHRvZWdlc3RhYW4gdmVyYmluZGluZyB0ZSBtYWtlbiBtZXQgZGUgaG9vZmRpbnRlcmZhY2UgdmFuIGVlbiBleHRlcm4gZGlzcGxheS4gTm9vaXQgdmVyZWlzdCB2b29yIG5vcm1hbGUgYXBwcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJ2ZXJiaW5kZW4gbWV0IGVlbiB3aWRnZXRzZXJ2aWNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkhpZXJtZWUgd29yZHQgZGUgaG91ZGVyIHRvZWdlc3RhYW4gdmVyYmluZGluZyB0ZSBtYWtlbiBtZXQgZGUgaG9vZmRpbnRlcmZhY2UgdmFuIGVlbiB3aWRnZXRzZXJ2aWNlLiBOb29pdCB2ZXJlaXN0IHZvb3Igbm9ybWFsZSBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImludGVyYWN0aWUgbWV0IGFwcGFyYWF0YmVoZWVyIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJIaWVybWVlIGthbiBkZSBhcHAgU3VyZmFjZUZsaW5nZXItZnVuY3RpZXMgb3AgbGFhZyBuaXZlYXUgZ2VicnVpa2VuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImZyYW1lYnVmZmVyIGxlemVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IkhpZXJtZWUga2FuIGRlIGFwcCBkZSBpbmhvdWQgdmFuIGRlIGZyYW1lYnVmZmVyIGxlemVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+InRvZWdhbmcga3JpamdlbiB0b3QgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkhpZXJtZWUga2FuIGRlIGFwcCBJbnB1dEZsaW5nZXItZnVuY3RpZXMgb3AgbGFhZyBuaXZlYXUgZ2VicnVpa2VuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4id2lmaS1kaXNwbGF5cyBjb25maWd1cmVyZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJEZSBhcHAgdG9lc3RhYW4gd2lmaS1kaXNwbGF5cyB0ZSBjb25maWd1cmVyZW4gZW4gaGllcm1lZSB2ZXJiaW5kaW5nIHRlIG1ha2VuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4id2lmaS1kaXNwbGF5cyBiZWhlcmVuIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IkVlbiBhcHAgc2VsZWN0ZXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IkthbiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+IG5pZXQgc3RhcnRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkRlbGVuIG1ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJEZWxlbiBtZXQgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJTY2h1aWZncmVlcC4gVGlra2VuIGVuIGJsaWp2ZW4gYWFucmFrZW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlZlZWcgb21ob29nIHZvb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IlZlZWcgb21sYWFnIHZvb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlZlZWcgbmFhciBsaW5rcyB2b29yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iVmVlZyBuYWFyIHJlY2h0cyB2b29yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+Ik9udGdyZW5kZWxlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJDYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU3RpbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJHZWx1aWQgYWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJab2VrZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJWZWdlbiBvbSB0ZSBvbnRncmVuZGVsZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iU2x1aXQgZWVuIGhlYWRzZXQgYWFuIG9tIHdhY2h0d29vcmR0b2V0c2VuIHRlIGxhdGVuIHZvb3JsZXplbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJTdGlwLiI8L3N0cmluZz4KQEAgLTE0ODIsOSArMTQ4MywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9tZWRpYV9yb3V0ZV9uYW1lX2hkbWkiIG1zZ2lkPSIyNDUwOTcwMzk5MDIzNDc4MDU1Ij4iSERNSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTeXN0ZWVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGgtYXVkaW8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IkRyYWFkbG96ZSBkaXNwbGF5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IkdlcmVlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iRHJhYWRsb3plIHdlZXJnYXZlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iTWVkaWEtdWl0dm9lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iVmVyYmluZGluZyBtYWtlbiBtZXQgYXBwYXJhYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJTY2hlcm0gc3R1cmVuIG5hYXIgYXBwYXJhYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJab2VrZW4gbmFhciBhcHBhcmF0ZW7igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJJbnN0ZWxsaW5nZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iVmVyYmluZGluZyB2ZXJicmVrZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iU2Nhbm5lbi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IlZlcmJpbmRlbi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iQmVzY2hpa2JhYXIiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJPdmVybGF5IDx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBiZXZlaWxpZ2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkRyYWFkbG96ZSBkaXNwbGF5IGlzIGFhbmdlc2xvdGVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkRpdCBzY2hlcm0gd29yZHQgb3AgZWVuIGFuZGVyIGFwcGFyYWF0IHdlZXJnZWdldmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IlNjaGVybSBzdHVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJWZXJiaW5kZW4gbWV0IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IlNjaGVybSBzdHVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IlZlcmJvbmRlbiBtZXQgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IlZlcmJpbmRpbmcgdmVyYnJla2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJOb29kb3Byb2VwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iUGF0cm9vbiB2ZXJnZXRlbiI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY1NywxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iUHJvYmVlciBoZXQgbGF0ZXIgb3BuaWV1dyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJWZWVnIG9tbGFhZyB2YW5hZiBkZSBib3ZlbmthbnQgb20gaGV0IHZvbGxlZGlnZSBzY2hlcm0gdGUgc2x1aXRlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkdlcmVlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IlJvbmRlIHNjaHVpZnJlZ2VsYWFyIHZvb3IgdXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iUm9uZGUgc2NodWlmcmVnZWxhYXIgdm9vciBtaW51dGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlVyZW4gc2VsZWN0ZXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+Ik1pbnV0ZW4gc2VsZWN0ZXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iTWFhbmRyYXN0ZXIgdmFuIGRhZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iSmFhcmxpanN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJNYWFuZCBlbiBkYWcgc2VsZWN0ZXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IkphYXIgc2VsZWN0ZXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4gZ2VzZWxlY3RlZXJkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gdmVyd2lqZGVyZCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKaW5kZXggMGUxYmVlOS4uOWE4M2VmMyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJXcGlzeiBrb2QgUFVLIHNrxYJhZGFqxIVjeSBzacSZIHogY28gbmFqbW5pZWogOCBjeWZyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJLYXJ0YSBTSU0gamVzdCB6YWJsb2tvd2FuYSBrb2RlbSBQVUsuIFdwcm93YWTFuiBrb2QgUFVLLCBhYnkgb2RibG9rb3dhxIcga2FydMSZLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+Ildwcm93YWTFuiBrb2QgUFVLMiwgYWJ5IG9kYmxva293YcSHIGthcnTEmSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iTmllIHVkYcWCbyBzacSZLiBXxYLEhWN6IGJsb2thZMSZIGthcnR5IFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+Ik1hc3ogamVzemN6ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHLDs2LEmSwgemFuaW0ga2FydGEgU0lNIHpvc3RhbmllIHphYmxva293YW5hLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+Ik1hc3ogamVzemN6ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHLDs2IoeSksIHphbmltIGthcnRhIFNJTSB6b3N0YW5pZSB6YWJsb2tvd2FuYS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+Ik5hendhIHJvem3Ds3djeSBwcnp5IHBvxYLEhWN6ZW5pYWNoIHByenljaG9kesSFY3ljaCI8L3N0cmluZz4KQEAgLTI1OCw4ICsyNjMsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZU1tcyIgbXNnaWQ9IjUzMzAxOTQzNzI2MzIxMjI2MCI+IlBvendhbGEgYXBsaWthY2ppIG5hIG9kYmllcmFuaWUgaSBwcnpldHdhcnphbmllIE1NUy3Ds3cuIFRvIG96bmFjemEsIMW8ZSBhcGxpa2FjamEgYsSZZHppZSBtb2fFgmEgYmV6IFR3b2plaiB3aWVkenkgbW9uaXRvcm93YcSHIGkgdXN1d2HEhyB3aWFkb21vxZtjaSB3eXN5xYJhbmUgZG8gVHdvamVnbyB1cnrEhWR6ZW5pYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSIxODAzNDc3NjYwODQ2Mjg4MDg5Ij4ib2RiacOzciBlbWlzamkgYWxhcm1vd3ljaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVFbWVyZ2VuY3lCcm9hZGNhc3QiIG1zZ2lkPSI4NDg1MjQwNzAyNjI0MzE5NzQiPiJQb3p3YWxhIGFwbGlrYWNqaSBuYSBvZGJpZXJhbmllIGkgcHJ6ZXR3YXJ6YW5pZSBrb211bmlrYXTDs3cgdHJhbnNtaXNqaSBhbGFybW93eWNoLiBUbyBwb3p3b2xlbmllIGplc3QgZG9zdMSZcG5lIHR5bGtvIGRsYSBhcGxpa2Fjamkgc3lzdGVtb3d5Y2guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSIxNTk4MzI4ODQzNjE5NjQ2MTY2Ij4ib2Rjenl0IHdpYWRvbW/Fm2NpIHogc2llY2kga29tw7Nya293ZWoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2VsbEJyb2FkY2FzdHMiIG1zZ2lkPSI2MzYxOTcyNzc2MDgwNDU4OTc5Ij4iWmV6d2FsYSBhcGxpa2FjamkgbmEgb2Rjenl0IHdpYWRvbW/Fm2NpIHogc2llY2kga29tw7Nya293ZWogb2RlYnJhbnljaCBuYSB1cnrEhWR6ZW5pdS4gQWxlcnR5IHNpZWNpIGtvbcOzcmtvd2VqIHPEhSBkb3N0YXJjemFuZSB3IG5pZWt0w7NyeWNoIGxva2FsaXphY2phY2ggdyBjZWx1IG9zdHJ6ZcW8ZW5pYSBDacSZIG8gc3l0dWFjamFjaCBhbGFybW93eWNoLiBaxYJvxZtsaXdlIGFwbGlrYWNqZSBtb2fEhSB3cMWCeXdhxIcgbmEgd3lkYWpub8WbxIcgbHViIHpha8WCw7NjYcSHIGR6aWHFgmFuaWUgdXJ6xIVkemVuaWEgcG8gb2RlYnJhbml1IHdpYWRvbW/Fm2NpIGFsYXJtb3dlaiB6IHNpZWNpIGtvbcOzcmtvd2VqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iMTU5ODMyODg0MzYxOTY0NjE2NiI+Im9kY3p5dCBrb211bmlrYXTDs3cgeiBzaWVjaSBrb23Ds3Jrb3dlaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiJaZXp3YWxhIGFwbGlrYWNqaSBuYSBvZGN6eXQga29tdW5pa2F0w7N3IHogc2llY2kga29tw7Nya293ZWogb2RlYnJhbnljaCBuYSB1cnrEhWR6ZW5pdS4gS29tdW5pa2F0eSBhbGFybW93ZSB6IHNpZWNpIGtvbcOzcmtvd2VqIHPEhSBkb3N0YXJjemFuZSB3IG5pZWt0w7NyeWNoIGxva2FsaXphY2phY2ggdyBjZWx1IG9zdHJ6ZcW8ZW5pYSBDacSZIG8gc3l0dWFjamFjaCB6YWdyb8W8ZW5pYS4gWsWCb8WbbGl3ZSBhcGxpa2FjamUgbW9nxIUgd3DFgnl3YcSHIG5hIHd5ZGFqbm/Fm8SHIGx1YiB6YWvFgsOzY2HEhyBkemlhxYJhbmllIHVyesSFZHplbmlhIHBvIG9kZWJyYW5pdSBrb211bmlrYXR1IGFsYXJtb3dlZ28geiBzaWVjaSBrb23Ds3Jrb3dlai4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRTbXMiIG1zZ2lkPSI1NjAwODMwNjEyMTQ3NjcxNTI5Ij4id3lzecWCYW5pZSB3aWFkb21vxZtjaSBTTVMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+IlBvendhbGEgYXBsaWthY2ppIG5hIHd5c3nFgmFuaWUgU01TLcOzdy4gTW/FvGUgdG8gc2t1dGtvd2HEhyBuaWVvY3pla2l3YW55bWkgb3DFgmF0YW1pLiBaxYJvxZtsaXdlIGFwbGlrYWNqZSBtb2fEhSBnZW5lcm93YcSHIGtvc3p0eSwgd3lzecWCYWrEhWMgd2lhZG9tb8WbY2kgYmV6IFR3b2plZ28gcG90d2llcmR6ZW5pYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NlbmRSZXNwb25kVmlhTWVzc2FnZVJlcXVlc3QiIG1zZ2lkPSI4NzEzODg5MTA1MzA1OTQzMjAwIj4id3lzecWCYW5pZSB6ZGFyemXFhCBvZHBvd2llZHppIHByemV6IFNNUyI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iUG96d2FsYSBuYSB0d29yemVuaWUgcG93acSFemFuaWEgeiBpbnRlcmZlanNlbSBuYWp3ecW8c3plZ28gcG96aW9tdSB1c8WCdWdpIFZQTi4gTmllIHBvd2lubm8gYnnEhyBuaWdkeSBwb3RyemVibmUgdyBwcnp5cGFka3Ugend5a8WCeWNoIGFwbGlrYWNqaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4icG93acSFemFuaWUgeiB0YXBldMSFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJQb3p3YWxhIG5hIHR3b3J6ZW5pZSBwb3dpxIV6YW5pYSB6IGludGVyZmVqc2VtIG5hand5xbxzemVnbyBwb3ppb211IHRhcGV0eS4gTmllcHJ6ZXpuYWN6b25lIGRsYSB6d3lrxYJ5Y2ggYXBsaWthY2ppLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4icG93acSFemFuaWUgeiB3ecWbd2lldGxhY3plbSB6ZGFsbnltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iWmV6d2FsYSBuYSB0d29yemVuaWUgcG93acSFemFuaWEgeiBpbnRlcmZlanNlbSBuYWp3ecW8c3plZ28gcG96aW9tdSB3ecWbd2lldGxhY3phIHpkYWxuZWdvLiBOaWVwcnplem5hY3pvbmUgZGxhIHp3eWvFgnljaCBhcGxpa2FjamkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4icG93acSFemFuaWUgeiB1c8WCdWfEhSB3aWTFvGV0w7N3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IlplendhbGEgbmEgdHdvcnplbmllIHBvd2nEhXphbmlhIHogaW50ZXJmZWpzZW0gbmFqd3nFvHN6ZWdvIHBvemlvbXUgdXPFgnVnaSB3aWTFvGV0w7N3LiBOaWUgcG93aW5ubyBiecSHIG5pZ2R5IHBvdHJ6ZWJuZSB3IHByenlwYWRrdSB6d3lrxYJ5Y2ggYXBsaWthY2ppLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImludGVyYWtjamEgeiBhZG1pbmlzdHJhdG9yZW0gdXJ6xIVkemVuaWEiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlBvendhbGEgYXBsaWthY2ppIG5hIHd5a29yenlzdGFuaWUgZnVua2NqaSBuaXNraWVnbyBwb3ppb211IHVzxYJ1Z2kgU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4iY3p5dGFuaWUgYnVmb3JhIHJhbWtpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IlBvendhbGEgYXBsaWthY2ppIG5hIG9kY3p5dCB6YXdhcnRvxZtjaSBidWZvcmEgcmFta2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iZG9zdMSZcCBkbyBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iWmV6d2FsYSBhcGxpa2FjamkgbmEgd3lrb3J6eXN0YW5pZSBuaXNrb3BvemlvbW93eWNoIGZ1bmtjamkgdXPFgnVnaSBJbnB1dEZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJrb25maWd1cm93YW5pZSB3ecWbd2lldGxhY3p5IFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4iWmV6d2FsYSBhcGxpa2FjamkgbmEga29uZmlndXJhY2rEmSB3ecWbd2lldGxhY3p5IFdpLUZpIGkgxYLEhWN6ZW5pZSB6IG5pbWkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJ6YXJ6xIVkemFuaWUgd3nFm3dpZXRsYWN6YW1pIFdpLUZpIjwvc3RyaW5nPgpAQCAtMTIwNCw3ICsxMjEzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzM2MzkwNzIxMzc4NzQ2OTE1MSI+Ik5hIGN6YXMgcG/FgsSFY3plbmlhIHogPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiB0ZWxlZm9uIHpvc3RhbmllIHR5bWN6YXNvd28gb2TFgsSFY3pvbnkgb2QgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfY2hhcmFjdGVyIiBtc2dpZD0iMzM2NTU1MDEyMDYxNzcwMTc0NSI+IldzdGF3IHpuYWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF90aXRsZSIgbXNnaWQ9IjcyOTY2MTI3ODExMjg5MTc3MTkiPiJXeXN5xYJhbmllIHdpYWRvbW/Fm2NpIFNNUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsgd3lzecWCYSB3aWVsZSBTTVMtw7N3LiBDaGNlc3ogcG96d29sacSHIHRlaiBhcGxpa2FjamkgZGFsZWogd3lzecWCYcSHIFNNUy15PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX21lc3NhZ2UiIG1zZ2lkPSIzODY3ODk5MTY5NjUxNDk2NDMzIj4iQXBsaWthY2phICZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IHd5c3nFgmEgd2llbGUgU01TLcOzdy4gQ2hjZXN6IHBvendvbGnEhyB0ZWogYXBsaWthY2ppIGRhbGVqIHd5c3nFgmHEhyBTTVMteT8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF95ZXMiIG1zZ2lkPSIzNjYzNzI1OTkzODU1ODE2ODA3Ij4iUG96d8OzbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4iT2Rtw7N3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9tZXNzYWdlIiBtc2dpZD0iMTY0NTQzNjQ2NjI4NTMxMDg1NSI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IGNoY2Ugd3lzxYJhxIcgd2lhZG9tb8WbxIcgZG8gJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkRFU1RfQUREUkVTUyI+JTIkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7LiI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJXeWJpZXJ6IGFwbGlrYWNqxJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiJOaWUgdWRhxYJvIHNpxJkgdXJ1Y2hvbWnEhyBhcGxpa2FjamkgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IlVkb3N0xJlwbmlqIHByemV6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IlVkb3N0xJlwbmlqIHByemV6IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iVWNod3l0IHByemVzdXdueS4gRG90a25paiBpIHByenl0cnp5bWFqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJQcnplc3XFhCB3IGfDs3LEmTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IlByemVzdcWEIHcgZMOzxYI6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJQcnplc3XFhCB3IGxld286IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iUHJ6ZXN1xYQgdyBwcmF3bzogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iT2RibG9rdWoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iQXBhcmF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+Ild5Y2lzemVuaWUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iV8WCxIVjeiBkxbp3acSZayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iU3p1a2FqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iUHJ6ZXN1xYQsIGFieSBvZGJsb2tvd2HEhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUG9kxYLEhWN6IHplc3RhdyBzxYJ1Y2hhd2tvd3ksIGFieSB3eXPFgnVjaGHEhyB6bmFrw7N3IGhhc8WCYSB3eXBvd2lhZGFueWNoIG5hIGfFgm9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+Iktyb3BrYSI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iRMW6d2nEmWsgQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJXecWbd2lldGxhY3ogYmV6cHJ6ZXdvZG93eSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJHb3Rvd2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJXeWrFm2NpZSBtdWx0aW1lZGnDs3ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IlBvxYLEhWN6IHogdXJ6xIVkemVuaWVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iUHJlemVudHVqIGVrcmFuIG5hIHVyesSFZHplbml1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iU3p1a2FtIHVyesSFZHplxYTigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJVc3Rhd2llbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IlJvesWCxIVjeiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJTa2FudWrEmS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IsWBxIVjesSZLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJEb3N0xJlwbmUiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJOYWvFgmFka2EgbnIgPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz4geCA8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IiwgYmV6cGllY3pueSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iUG9kxYLEhWN6b255IGplc3Qgd3nFm3dpZXRsYWN6IGJlenByemV3b2Rvd3kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iVGVuIGVrcmFuIGplc3Qgd3nFm3dpZXRsYW55IG5hIGlubnltIHVyesSFZHplbml1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IlJvenBvY3p5bmFtIHByZXplbnRvd2FuaWUgZWtyYW51Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4ixYHEhWN6xJkgeiA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJUcndhIHByZXplbnRvd2FuaWUgZWtyYW51Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJQb8WCxIVjem9ubyB6IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJSb3rFgsSFY3oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IlBvxYLEhWN6ZW5pZSBhbGFybW93ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+Ik5pZSBwYW1pxJl0YW0gd3pvcnUiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NTcsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlNwcsOzYnVqIHBvbm93bmllIHDDs8W6bmllaiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJQcnplc3XFhCB6IGfDs3J5IHcgZMOzxYIsIGJ5IHphbWtuxIXEhyBwZcWCbnkgZWtyYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJHb3Rvd2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJLb8WCb3d5IHN1d2FrIGdvZHppbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iS2/Fgm93eSBzdXdhayBtaW51dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJXeWJpZXJ6IGdvZHppbnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJXeWJpZXJ6IG1pbnV0eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iU2lhdGthIG1pZXNpxJljem5hIHogZG5pYW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iTGlzdGEgbGF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJXeWJpZXJ6IG1pZXNpxIVjIGkgZHppZcWEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iV3liaWVyeiByb2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iV3licmHFgmXFmyA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiB1c3VuacSZdGUiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKaW5kZXggZjNjNDAyMC4uYWZjNTFkMCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IkludHJvZHV6YSB1bSBQVUsgcXVlIHRlbmhhIDggb3UgbWFpcyBhbGdhcmlzbW9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJPIHNldSBjYXJ0w6NvIFNJTSBlc3TDoSBibG9xdWVhZG8gY29tIFBVSy4gSW50cm9kdXphIG8gY8OzZGlnbyBQVUsgcGFyYSBkZXNibG9xdWXDoS1sby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJJbnRyb2R1emEgbyBQVUsyIHBhcmEgZGVzYmxvcXVlYXIgbyBjYXJ0w6NvIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJBw6fDo28gc2VtIMOqeGl0by4gQXRpdmUgbyBibG9xdWVpbyBkbyBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJUZW0gbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhIGFudGVzIGRlIG8gY2FydMOjbyBTSU0gZmljYXIgYmxvcXVlYWRvLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IlRlbSBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzIGFudGVzIGRlIG8gY2FydMOjbyBTSU0gZmljYXIgYmxvcXVlYWRvLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iSUQgZG8gQXV0b3IgZGEgQ2hhbWFkYSI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iUGVybWl0ZSBxdWUgbyB0aXR1bGFyIHNlIHZpbmN1bGUgw6AgaW50ZXJmYWNlIGRlIG7DrXZlbCBzdXBlcmlvciBkZSB1bSBzZXJ2acOnbyBkZSBWUE4uIE51bmNhIGRldmVyw6Egc2VyIG5lY2Vzc8OhcmlvIHBhcmEgYXBsaWNhw6fDtWVzIG5vcm1haXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+InZpbmN1bGFyIGEgdW1hIGltYWdlbSBkZSBmdW5kbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iUGVybWl0ZSBhbyB0aXR1bGFyIHZpbmN1bGFyLXNlIMOgIGludGVyZmFjZSBkZSBuw612ZWwgc3VwZXJpb3IgZGUgdW1hIGltYWdlbSBkZSBmdW5kby4gTnVuY2EgZGV2ZXLDoSBzZXIgbmVjZXNzw6FyaW8gcGFyYSBhcGxpY2HDp8O1ZXMgbm9ybWFpcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+ImFzc29jaWFyIGEgdW0gZWNyw6MgcmVtb3RvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iUGVybWl0ZSBhbyBkZXRlbnRvciBhc3NvY2lhciBhIGludGVyZmFjZSBkZSBuw612ZWwgc3VwZXJpb3IgYSB1bSBlY3LDoyByZW1vdG8uIE51bmNhIGRldmUgc2VyIG5lY2Vzc8OhcmlvIHBhcmEgYXBsaWNhw6fDtWVzIG5vcm1haXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4idmluY3VsYXIgYSB1bSBzZXJ2acOnbyBkZSB3aWRnZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iUGVybWl0ZSBxdWUgbyB0aXR1bGFyIHZpbmN1bGUgYSBpbnRlcmZhY2UgZGUgbsOtdmVsIHN1cGVyaW9yIGRlIHVtIHNlcnZpw6dvIGRlIHdpZGdldC4gTnVuY2EgZGV2ZXLDoSBzZXIgbmVjZXNzw6FyaW8gcGFyYSBhcGxpY2HDp8O1ZXMgbm9ybWFpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJpbnRlcmFnaXIgY29tIHVtIGFkbWluaXN0cmFkb3IgZG8gZGlzcG9zaXRpdm8iPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlBlcm1pdGUgw6AgYXBsaWNhw6fDo28gdXRpbGl6YXIgZnVuY2lvbmFsaWRhZGVzIGRlIFN1cmZhY2VGbGluZ2VyIGRlIG7DrXZlbCBpbmZlcmlvci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJsZXIgbWVtw7NyaWEgaW50ZXJtw6lkaWEgZGUgZm90b2dyYW1hcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJQZXJtaXRlIMOgIGFwbGljYcOnw6NvIGxlciBvIGNvbnRlw7pkbyBkYSBtZW3Ds3JpYSBpbnRlcm3DqWRpYSBkZSBmb3RvZ3JhbWFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImFjZWRlciBhIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJQZXJtaXRlIHF1ZSBhIGFwbGljYcOnw6NvIHV0aWxpemUgZnVuY2lvbmFsaWRhZGVzIGRlIElucHV0RmxpbmdlciBkZSBuw612ZWwgaW5mZXJpb3IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJjb25maWd1cmFyIHZpc29yZXMgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJQZXJtaXRlIHF1ZSBhIGFwbGljYcOnw6NvIHNlIGNvbmZpZ3VyZSBlIHNlIGxpZ3VlIGEgdmlzb3JlcyBXaS1GaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ImNvbnRyb2xhciB2aXNvcmVzIFdpLUZpIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IkVzY29saGVyIHVtYSBhcGxpY2HDp8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ik7Do28gZm9pIHBvc3PDrXZlbCBpbmljaWFyIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJQYXJ0aWxoYXIgY29tOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJDb21wYXJ0aWxoYXIgY29tIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iQmFycmEgZGVzbGl6YW50ZS4gVG9xdWUgJmFtcDsgbsOjbyBzb2x0ZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iRGVzbGl6ZSBwYXJhIGNpbWEgcGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IkRlc2xpemUgcGFyYSBiYWl4byBwYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRGVzbGl6ZSBwYXJhIGEgZXNxdWVyZGEgcGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJEZXNsaXplIHBhcmEgYSBkaXJlaXRhIHBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkRlc2Jsb3F1ZWFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkPDom1hcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU2lsZW5jaW9zbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJTb20gYXRpdmFkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iUGVzcXVpc2FyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iRGVzbGl6YXIgcmFwaWRhbWVudGUgcGFyYSBkZXNibG9xdWVhci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iTGlndWUgb3MgYXVzY3VsdGFkb3JlcyBjb20gbWljcm9mb25lIGludGVncmFkbyBwYXJhIG91dmlyIGFzIHRlY2xhcyBkYSBwYWxhdnJhLXBhc3NlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IlBvbnRvLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlNpc3RlbWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IsOBdWRpbyBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IlZpc3VhbGl6YcOnw6NvIHNlbSBmaW9zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IkNvbmNsdcOtZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJTYcOtZGEgZGUgc29tIG11bHRpbcOpZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJMaWdhciBhbyBkaXNwb3NpdGl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IlRyYW5zbWl0aXIgZWNyw6MgcGFyYSBvIGRpc3Bvc2l0aXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iQSBwZXNxdWlzYXIgZGlzcG9zaXRpdm9z4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iRGVmaW5pw6fDtWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkRlc2xpZ2FyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IkEgcHJvY3VyYXIuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJBIGxpZ2FyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJEaXNwb27DrXZlbCI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlNvYnJlcG9zacOnw6NvICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gcHBwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IiwgcHJvdGVnaWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJPIERpc3BsYXkgc2VtIGZpb3MgZXN0w6EgbGlnYWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IkVzdGUgZWNyw6MgZXN0w6EgYSBzZXIgYXByZXNlbnRhZG8gbm91dHJvIGRpc3Bvc2l0aXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IkEgdHJhbnNtaXRpciBvIGVjcsOjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iQSBsaWdhciBhIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+IkEgdHJhbnNtaXRpciBvIGVjcsOjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJMaWdhZG8gYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iRGVzbGlnYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IkNoYW1hZGEgZGUgZW1lcmfDqm5jaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJFc3F1ZWNldS1zZSBkYSBTZXF1w6puY2lhIjwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjU3LDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJUZW50ZSBub3ZhbWVudGUgbWFpcyB0YXJkZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJEZXNsaXplIHJhcGlkYW1lbnRlIHBhcmEgYmFpeG8gcGFyYSBzYWlyIGRvIGVjcsOjIGludGVpcm8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJDb25jbHXDrWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iQ29udHJvbG8gZGUgZGVzbGl6ZSBjaXJjdWxhciBkYXMgaG9yYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IkNvbnRyb2xvIGRlIGRlc2xpemUgY2lyY3VsYXIgZG9zIG1pbnV0b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iU2VsZWNpb25hciBob3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IlNlbGVjaW9uYXIgbWludXRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iR3JlbGhhIGRlIGRpYXMgZG8gbcOqcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+Ikxpc3RhIGRlIGFub3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlNlbGVjaW9uYXIgbcOqcyBlIGRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlNlbGVjaW9uYXIgYW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBzZWxlY2lvbmFkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IGVsaW1pbmFkbyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKaW5kZXggMTVhNjEzMC4uZmI4M2I4OCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJEaWdpdGUgdW0gUFVLIGNvbSBvaXRvIG7Dum1lcm9zIG91IG1haXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+Ik8gc2V1IGNhcnTDo28gU0lNIGVzdMOhIGJsb3F1ZWFkbyBwb3IgdW0gUFVLLiBEaWdpdGUgbyBjw7NkaWdvIFBVSyBwYXJhIGRlc2Jsb3F1ZcOhLWxvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IkRpZ2l0ZSBvIFBVSzIgcGFyYSBkZXNibG9xdWVhciBvIGNhcnTDo28gU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IkZhbGhhLiBBdGl2ZSBvIGJsb3F1ZWlvIGRvIFNJTS9SLVVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJUZW50YXRpdmFzIHJlc3RhbnRlczogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiBDYXNvIG8gY8OzZGlnbyBjb3JyZXRvIG7Do28gc2VqYSBkaWdpdGFkbywgbyBTSU0gc2Vyw6EgYmxvcXVlYWRvLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IlRlbnRhdGl2YXMgcmVzdGFudGVzOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIENhc28gbyBjw7NkaWdvIGNvcnJldG8gbsOjbyBzZWphIGRpZ2l0YWRvLCBvIFNJTSBzZXLDoSBibG9xdWVhZG8uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJRCBkbyBjaGFtYWRvciBkZSBlbnRyYWRhIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJQZXJtaXRlIHF1ZSBzZXUgcHJvcHJpZXTDoXJpbyBzdWplaXRlIGEgaW50ZXJmYWNlIGRlIGFsdG8gbsOtdmVsIGRlIHVtIHNlcnZpw6dvIGRlIFZQTi4gTnVuY2EgZGV2ZSBzZXIgbmVjZXNzw6FyaW8gcGFyYSBhcGxpY2F0aXZvcyBub3JtYWlzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJzdWplaXRhci1zZSBhIHVtIHBsYW5vIGRlIGZ1bmRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJQZXJtaXRlIHF1ZSBvIHByb3ByaWV0w6FyaW8gdXRpbGl6ZSBpbnRlcmZhY2UgZGUgbsOtdmVsIHN1cGVyaW9yIGRlIHVtIHBsYW5vIGRlIGZ1bmRvLiBOdW5jYSBkZXZlIHNlciBuZWNlc3PDoXJpbyBwYXJhIGFwbGljYXRpdm9zIG5vcm1haXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJ1c2FyIHVtYSB0ZWxhIHJlbW90YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IlBlcm1pdGUgcXVlIG8gcHJvcHJpZXTDoXJpbyB1c2UgYSBpbnRlcmZhY2UgZGUgbsOtdmVsIHN1cGVyaW9yIGRlIHVtYSB0ZWxhIHJlbW90YS4gTsOjbyBkZXZlIHNlciBuZWNlc3PDoXJpbyBwYXJhIGFwbGljYXRpdm9zIGNvbXVucy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJzdWplaXRhci1zZSBhIHVtIHNlcnZpw6dvIGRlIHdpZGdldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJQZXJtaXRlIHF1ZSBvIHByb3ByaWV0w6FyaW8gdXRpbGl6ZSBhIGludGVyZmFjZSBkZSBuw612ZWwgc3VwZXJpb3IgZGUgdW0gc2VydmnDp28gZGUgd2lkZ2V0LiBOdW5jYSBkZXZlIHNlciBuZWNlc3PDoXJpbyBwYXJhIGFwbGljYXRpdm9zIG5vcm1haXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaW50ZXJhZ2lyIGNvbSBvIGFkbWluaXN0cmFkb3IgZGUgdW0gZGlzcG9zaXRpdm8iPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlBlcm1pdGUgcXVlIG8gYXBsaWNhdGl2byB1c2UgcmVjdXJzb3MgY29tIGJhaXhvcyBuw612ZWlzIGRlIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImxlciBvIGJ1ZmZlciBkbyBmcmFtZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJQZXJtaXRlIHF1ZSBvIGFwbGljYXRpdm8gbGVpYSBvIGNvbnRlw7pkbyBkbyBidWZmZXIgZGUgZnJhbWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iYWNlc3NhciBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iUGVybWl0ZSBxdWUgbyBhcGxpY2F0aXZvIHVzZSByZWN1cnNvcyBjb20gYmFpeG9zIG7DrXZlaXMgZGUgSW5wdXRGaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJjb25maWd1cmFyIG1vbml0b3JlcyBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IlBlcm1pdGUgcXVlIG8gYXBsaWNhdGl2byBjb25maWd1cmUgZSBjb25lY3RlIGEgbW9uaXRvcmVzIFdpLUZpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iY29udHJvbGFyIG1vbml0b3JlcyBXaS1GaSI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJTZWxlY2lvbmUgdW0gYXBsaWNhdGl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ik7Do28gZm9pIHBvc3PDrXZlbCBpbmljaWFyIG8gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkNvbXBhcnRpbGhhciBjb20iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iQ29tcGFydGlsaGFyIGNvbSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IlJlY3Vyc28gZGVzbGl6YW50ZS4gVG9xdWUgZSBzZWd1cmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LCBkZXNsaXplIHBhcmEgY2ltYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJQYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiwgZGVzbGl6ZSBwYXJhIGJhaXhvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LCBkZXNsaXplIHBhcmEgYSBlc3F1ZXJkYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iUGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4sIGRlc2xpemUgcGFyYSBhIGRpcmVpdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJEZXNibG9xdWVhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJDw6JtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlNpbGVuY2lvc28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU29tIGF0aXZhZG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlBlc3F1aXNhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IkRlc2xpemUgcGFyYSBkZXNibG9xdWVhci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iQ29uZWN0ZSB1bSBmb25lIGRlIG91dmlkbyBwYXJhIG91dmlyIGFzIHRlY2xhcyBkYSBzZW5oYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJQb250byBmaW5hbC4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTaXN0ZW1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLDgXVkaW8gQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJEaXNwbGF5IHNlbSBmaW8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iQ29uY2x1w61kbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IlNhw61kYSBkZSBtw61kaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IkNvbmVjdGFyIGFvIGRpc3Bvc2l0aXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iVHJhbnNtaXRpciB0ZWxhIHBhcmEgZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJQcm9jdXJhbmRvIGRpc3Bvc2l0aXZvc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IkNvbmZpZ3VyYcOnw7VlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJEZXNjb25lY3RhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJWZXJpZmljYW5kby4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IkNvbmVjdGFuZG8uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkRpc3BvbsOtdmVsIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iU29icmVwb3Npw6fDo28gbsK6IDx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCBzZWd1cm8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+Ik8gRGlzcGxheSBzZW0gZmlvIGVzdMOhIGNvbmVjdGFkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJUZWxhIGV4aWJpZGEgZW0gb3V0cm8gZGlzcG9zaXRpdm8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IlRyYW5zbWl0aW5kbyBhIHRlbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJDb25lY3RhbmRvIGEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iVHJhbnNtaXRpbmRvIGEgdGVsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iQ29uZWN0YWRvIGEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IkRlc2NvbmVjdGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJDaGFtYWRhIGRlIGVtZXJnw6puY2lhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iRXNxdWVjaSBvIHBhZHLDo28iPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTYsMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iVGVudGUgbm92YW1lbnRlIGVtIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlRlbnRlIG5vdmFtZW50ZSBtYWlzIHRhcmRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IkRlc2xpemUgcGFyYSBiYWl4byBwYXJhIHNhaXIgZGEgdGVsYSBpbnRlaXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IkRlc2xpemUgZGUgY2ltYSBwYXJhIGJhaXhvIHBhcmEgc2FpciBkYSB0ZWxhIGludGVpcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkNvbmNsdcOtZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJDb250cm9sZSBkZXNsaXphbnRlIGNpcmN1bGFyIGRhcyBob3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iQ29udHJvbGUgZGVzbGl6YW50ZSBjaXJjdWxhciBkb3MgbWludXRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiJTZWxlY2lvbmUgYXMgaG9yYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJTZWxlY2lvbmUgb3MgbWludXRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iR3JhZGUgbWVuc2FsIGRlIGRpYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJMaXN0YSBkZSBhbm9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJTZWxlY2lvbmUgbyBtw6pzIGUgbyBkaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJTZWxlY2lvbmUgbyBhbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+IHNlbGVjaW9uYWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gZXhjbHXDrWRvIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJtL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ybS9zdHJpbmdzLnhtbAppbmRleCA5MTU0NjIxLi4zZGZhNzg2IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJtL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcm0vc3RyaW5ncy54bWwKQEAgLTU3LDYgKzU3LDEwIEBACiAgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJWb3NzYSBjYXJ0YSBTSU0gw6ggYmxvY2NhZGEgY3VuIGluIFBVSy4gRW5kYXRhaSBpbCBQVUsgcGVyIGRlYmxvY2NhciBlbGxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IkVuZGF0YWkgaWwgUFVLMiBwZXIgZGVibG9jY2FyIGxhIGNhcnRhIFNJTS4iPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZW5hYmxlUGluICgyMDk0MTIwMjA5MDcyMDc5NTApIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGlucHVrX2F0dGVtcHRzOm9uZSAoNjU5NjI0NTI4NTgwOTc5MDE0MikgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGlucHVrX2F0dGVtcHRzOm90aGVyICg3NTMwNTk3ODA4MzU4Nzc0NzQwKSAtLT4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBpbWVpICgyNjI1NDI5ODkwODY5MDA1NzgyKSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1laWQgKDQ4NDEyMjEyMzc2ODEyNTQxOTUpIC0tPgpAQCAtNTk0LDYgKzU5OCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+InNhIGZpeGFyIHZpZCBpbiBmdW5kIGRhdm9zIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2JpbmRXYWxscGFwZXIgKDcxMDg0Mjg2OTI1OTU0OTE2NjgpIC0tPgogICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSAoMTc4MjkyMzkzODAyOTk0MTk2MCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSAoMTI2MTI0MjcxODcyNzI5NTk4MSkgLS0+CisgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyAoNTY5Nzk4Nzc1OTg5NzM2NzA5OSkgLS0+CiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MgKDQ3MTc5ODc4MTAxMzc2OTI1NzIpIC0tPgpAQCAtNzgzLDYgKzc5MSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4ibGVnZXIgaWwgcGFyYWN1bHAgZGEgZnJhbWUiPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyICg0OTM3NDA1NTIxODA5NDU0NjgwKSAtLT4KICAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyICg1MzQ4NjM1MjcwNjg5NTUzODU3KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciAoMjEwNDg2NDk0MTIwMTIyNjYxNikgLS0+CisgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5ICg1NTk1NjYxNjk0NzQ2NzQyMTY4KSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5ICg3OTE2ODE1MTU4NjkwMjE4MDY1KSAtLT4KQEAgLTIyNjcsMzAgKzIyNzksMTQgQEAKICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uICgyMTI1MTY4MDU3MTk5OTQxMTk5KSAtLT4KICAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yICg4NjI0NjE4MzY1NDgxMTI2NjY4KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCAoODA2Njg4MDU2MTQxMTMxODE5KSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiAoNTYyNzQxMTM4NDYzODM4OTczOCkgLS0+CiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlICg0MTU5NzUwNTYxNTkyNjIyNDgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwICg3MTY5MDMyNDc4MjU5NDg1MTgwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duICg1MDg3NzM5NzI4NjM5MDE0NTk1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0ICg3MjA3NDc4NzE5ODA1NTYyMTY1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCAoODAzNDQzMzI0MjU3OTYwMDk4MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrICgyMjI4NTI0OTAwNDM5ODAxNDUzKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEgKDk2OTA3MTk5NzU1MjQ4NjgxNCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50ICg4OTM1NTEyODc3NDY1MjIxODIpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24gKDMwMDUyNDY2Njc1NTAwMTcyKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2ggKDMwOTE1ODcyNDk3NzYwMzMxMzkpIC0tPgotICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQgKDM4MzMxOTUzMzU2Mjk3OTUwNTUpIC0tPgogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkICg3MDExOTI3MzUyMjY3NjY4NjU3KSAtLT4KQEAgLTI0MDUsMTAgKzI0MDEsMTggQEAKICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHdpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24gKDkwNzAzNDY0MjUwMjM5Nzk2NTEpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lICg3OTY2NDM4MzA3NzIzMzE3MTY5KSAtLT4KLSAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uICg1NzU4NTUzNTY3MDY1MTQ1Mjc2KSAtLT4KICAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUgKDE3NTE2MTg1NTQ1MzkwODc2MjIpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkgKDMzOTU1NDE3NDU4NzIwMTc1ODMpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmcgKDQ3NzYyMzYyMDI2MTA4Mjg3MDYpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyAoODcwMTU1MzQyMzY3MDE2MDQpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0ICg4OTY2MTIwMjg2Mzc0MTU4NjQ5KSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIG1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyAoNzI3OTkwODc2MTc1ODI5Mzc4MykgLS0+CiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyAoNjQyMjU3MTcxNjAwNzgyNTQ0MCkgLS0+CkBAIC0yNDI5LDkgKzI0MzMsMTMgQEAKICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCAoNjAyMjExOTcwMjYyODU3MjA4MCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciB3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlICgyMjIzMDUwNjQ5MjQwMzI2NTU3KSAtLT4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciB3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUgKDI4Mzg2NDY0NzEwNTAzNTk3MDYpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igd2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlICg0NDk4ODAyMDEyNDY0MTcwNjg1KSAtLT4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciB3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSAoNTgzNzM1MDk5Mzc1Mjg0MTM4OSkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciB3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSAoODU2NzMwODA2NTkxMjY3NjI4NSkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciB3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlICgyNTg3MjA5MzI1NzAxMTA5NzE1KSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHdpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCAoNjE4Mzc1NDQ2MzU2MTE1MzM3MikgLS0+CiAgICAgPHNraXAgLz4KQEAgLTI3MzUsNCArMjc0MywyNiBAQAogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiAoNzIyNzQxNjg5NDk3OTA0NzQ2NykgLS0+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uICg4NTU0OTkxNDg4MDk2NjYyNTA4KSAtLT4KICAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRvbmVfbGFiZWwgKDIwOTM3MjYwOTk1MDU4OTIzOTgpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgaG91cl9waWNrZXJfZGVzY3JpcHRpb24gKDY2OTgxOTkxODY4NTk3MzY1MTIpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgbWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiAoODYwNjAxMDk2Njg3Mzc5MTE5MCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3RfaG91cnMgKDYwNDMwNzk1MTE3NjYwMDgyNDUpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X21pbnV0ZXMgKDM5NzQzNDU2MTU5MjAzMzYwODcpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiAoODk5MDg0NzkyNTk2MTI5Nzk2OCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciB5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiAoNTUyNDMzMTIwNzQzNjA1MjQwMykgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3RfZGF5ICg3Nzc0NzU5NjA0NzAxNzczMzMyKSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF95ZWFyICg3OTUyMDUyODY2OTk0MTk2MTcwKSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGl0ZW1faXNfc2VsZWN0ZWQgKDk0OTY4NzQwMTY4MjQ3NjYwOCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkZWxldGVkX2tleSAoNzY1OTQ3Nzg4NjYyNTU2NjU5MCkgLS0+CisgICAgPHNraXAgLz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKaW5kZXggZGM1YTIxMS4uZjQxNWU3YyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJJbnRyb2R1Y2XFo2kgdW4gY29kIFBVSyBjYXJlIHPEgyBhaWLEgyA4IGNpZnJlIHNhdSBtYWkgbXVsdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iQ2FyZHVsIFNJTSBlc3RlIGJsb2NhdCBjdSBjb2R1bCBQVUsuIEludHJvZHVjZcWjaSBjb2R1bCBQVUsgcGVudHJ1IGEtbCBkZWJsb2NhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IkludHJvZHVjZcWjaSBjb2R1bCBQVUsyIHBlbnRydSBhIGRlYmxvY2EgY2FyZHVsIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJPcGVyYcibaXVuZWEgbnUgYSByZXXImWl0LiBBY3RpdmHIm2kgYmxvY2FyZWEgY2FyZHVsdWkgU0lNL1JVSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iVi1hIG1haSByxINtYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IMOubmNlcmNhcmUgcMOibsSDIGxhIGJsb2NhcmVhIGNhcmR1bHVpIFNJTS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJWLWF1IG1haSByxINtYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IMOubmNlcmPEg3JpIHDDom7EgyBsYSBibG9jYXJlYSBjYXJkdWx1aSBTSU0uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJJRCBhcGVsYW50IGRlIHByaW1pcmUiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IlBlcm1pdGUgcHJvcHJpZXRhcnVsdWkgc8SDIHNlIGNvbmVjdGV6ZSBsYSBpbnRlcmZhxaNhIGRlIG5pdmVsIHN1cGVyaW9yIGEgdW51aSBzZXJ2aWNpdSBWUE4uIE51IGFyIHRyZWJ1aSBzxIMgZmllIG5pY2lvZGF0xIMgbmVjZXNhcsSDIHBlbnRydSBhcGxpY2HFo2lpbGUgb2JpxZ9udWl0ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iY29uZWN0YXJlIGxhIG8gaW1hZ2luZSBkZSBmdW5kYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IlBlcm1pdGUgcHJvcHJpZXRhcnVsdWkgc8SDIHNlIGNvbmVjdGV6ZSBsYSBpbnRlcmZhxaNhIGRlIG5pdmVsIHN1cGVyaW9yIGEgdW5laSBpbWFnaW5pIGRlIGZ1bmRhbC4gTnUgYXIgdHJlYnVpIHPEgyBmaWUgbmljaW9kYXTEgyBuZWNlc2FyxIMgcGVudHJ1IGFwbGljYcWjaWlsZSBvYmnFn251aXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4iY29uZWN0YXJlIGxhIHVuIGVjcmFuIGxhIGRpc3RhbsibxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJQZXJtaXRlIHByb3ByaWV0YXJ1bHVpIHPEgyBzZSBjb25lY3RlemUgbGEgaW50ZXJmYcibYSBkZSBuaXZlbCBzdXBlcmlvciBhIHVudWkgZWNyYW4gbGEgZGlzdGFuyJvEgy4gTnUgYXIgdHJlYnVpIHPEgyBmaWUgbmljaW9kYXTEgyBuZWNlc2FyxIMgcGVudHJ1IGFwbGljYcibaWlsZSBvYmnImW51aXRlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ImNvbmVjdGFyZSBsYSB1biBzZXJ2aWNpdSB3aWRnZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iUGVybWl0ZSBwcm9wcmlldGFydWx1aSBzxIMgc2UgY29uZWN0ZXplIGxhIGludGVyZmHFo2EgZGUgbml2ZWwgc3VwZXJpb3IgYSB1bnVpIHNlcnZpY2l1IHdpZGdldC4gTnUgYXIgdHJlYnVpIHPEgyBmaWUgbmljaW9kYXTEgyBuZWNlc2FyxIMgcGVudHJ1IGFwbGljYcWjaWlsZSBvYmnFn251aXRlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImludGVyYWPFo2lvbmFyZSBjdSBhZG1pbmlzdHJhdG9ydWwgdW51aSBkaXNwb3ppdGl2Ijwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJQZXJtaXRlIGFwbGljYcWjaWVpIHPEgyB1dGlsaXplemUgZnVuY8WjaWlsZSBkZSBuaXZlbCByZWR1cyBTdXJmYWNlRmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJjaXRpcmUgem9uxIMgdGFtcG9uIGRlIGNhZHJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IlBlcm1pdGUgYXBsaWNhxaNpZWkgc8SDIGNpdGVhc2PEgyBjb27Fo2ludXR1bCB6b25laS10YW1wb24gYSBjYWRydWx1aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJhY2NlcyBsYSBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iUGVybWl0ZSBhcGxpY2HIm2llaSBzxIMgdXRpbGl6ZXplIGZ1bmPIm2lpbGUgZGUgbml2ZWwgcmVkdXMgSW5wdXRGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4iY29uZmlndXJlYXrEgyBhZmnFn2FqZSBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IlBlcm1pdGUgYXBsaWNhxaNpZWkgc8SDIGNvbmZpZ3VyZXplIMWfaSBzxIMgc2UgY29uZWN0ZXplIGxhIGFmacWfYWplIFdpLUZpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iY29udHJvbGVhesSDIGFmacWfYWplIFdpLUZpIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IkFsZWdlxaNpIG8gYXBsaWNhxaNpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ik51IHMtYSBwdXR1dCBsYW5zYSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iUGVybWl0ZcWjaSBhY2Nlc3VsIHBlbnRydSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiJQZXJtaXRlxaNpIGFjY2VzdWwgcGVudHJ1IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iTcOibmVyIGdsaXNhbnQuIEF0aW5nZcWjaSDFn2kgxaNpbmXFo2kgYXDEg3NhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iR2xpc2HFo2kgw65uIHN1cyBwZW50cnUgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IkdsaXNhxaNpIMOubiBqb3MgcGVudHJ1IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJHbGlzYcWjaSBzcHJlIHN0w6JuZ2EgcGVudHJ1IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iR2xpc2HFo2kgc3ByZSBkcmVhcHRhIHBlbnRydSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJEZWJsb2NhxaNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkNhbWVyxIMgZm90byI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTaWxlbsWjaW9zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IlN1bmV0IGFjdGl2YXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkPEg3V0YcWjaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IkdsaXNhxaNpIHBlbnRydSBhIGRlYmxvY2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IkNvbmVjdGHFo2kgdW4gc2V0IGPEg8WfdGktbWljcm9mb24gcGVudHJ1IGEgYXV6aSB0YXN0ZWxlIGFwxINzYXRlIGPDom5kIGludHJvZHVjZcWjaSBwYXJvbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUHVuY3QuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJBdWRpbyBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IkVjcmFuIHdpcmVsZXNzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IlRlcm1pbmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iUmV6dWx0YXRlIG1lZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJDb25lY3RhyJtpLXbEgyBsYSBkaXNwb3ppdGl2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iVHJpbWl0ZcibaSBlY3JhbnVsIHBlIGRpc3Bveml0aXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJTZSBjYXV0xIMgZGlzcG96aXRpdmUuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJTZXTEg3JpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IkRlY29uZWN0YcibaS12xIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iU2Ugc2NhbmVhesSDLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iU2UgY29uZWN0ZWF6xIMuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IkRpc3BvbmliaWzEgyI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlN1cHJhcHVuZXJlYSA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgc2VjdXJpemF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJFY3JhbnVsIHdpcmVsZXNzIGVzdGUgY29uZWN0YXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iQWNlc3QgZWNyYW4gZXN0ZSBhZmnFn2F0IHBlIGFsdCBnYWRnZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iU2UgdHJpbWl0ZSBlY3JhbnVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iU2UgY29uZWN0ZWF6xIMgbGEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iU2UgdHJpbWl0ZSBlY3JhbnVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJDb25lY3RhdCBsYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iRGVjb25lY3RhxaNpLXbEgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iQXBlbCBkZSB1cmdlbsWjxIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJNb2RlbCB1aXRhdCI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY1NywxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iUmXDrm5jZXJjYcibaSBtYWkgdMOicnppdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJHbGlzYcibaSDDrm4gam9zIHBlbnRydSBhIGllyJlpIGRpbiBlY3JhbiBjb21wbGV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4iVGVybWluYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJTZWxlY3RvciBjaXJjdWxhciBwZW50cnUgb3JlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJTZWxlY3RvciBjaXJjdWxhciBwZW50cnUgbWludXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlNlbGVjdGHIm2kgb3JlbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiJTZWxlY3RhyJtpIG1pbnV0ZWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJBZmnImWFyZSBwZSBsdW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iTGlzdMSDIGRlIGFuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iU2VsZWN0YcibaSBsdW5hIMiZaSB6aXVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iU2VsZWN0YcibaSBhbnVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBzZWxlY3RhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ijx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IGEgZm9zdCDImXRlcnMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCmluZGV4IDUzNDgwODQuLjU4ZDNhYjcgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbApAQCAtNTAsNiArNTAsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4i0JLQstC10LTQuNGC0LUgUFVLLdC60L7QtCDQuNC3IDgg0LjQu9C4INCx0L7Qu9C10LUg0YbQuNGE0YAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlNJTS3QutCw0YDRgtCwINC30LDQsdC70L7QutC40YDQvtCy0LDQvdCwINGBINC/0L7QvNC+0YnRjNGOINC60L7QtNCwIFBVSy4g0JTQu9GPINGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQutC4INCy0LLQtdC00LjRgtC1INC60L7QtCBQVUsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4i0JTQu9GPINGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQutC4IFNJTS3QutCw0YDRgtGLINCy0LLQtdC00LjRgtC1IFBVSzIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4i0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsC4g0JLQutC70Y7Rh9C40YLQtSDQsdC70L7QutC40YDQvtCy0LrRgyBTSU0t0LrQsNGA0YLRiyDQuNC70Lgg0LrQsNGA0YLRiyBSLVVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiLQntGB0YLQsNC70L7RgdGMINC/0L7Qv9GL0YLQvtC6OiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uINCf0L7RgdC70LUg0Y3RgtC+0LPQviBTSU0t0LrQsNGA0YLQsCDQsdGD0LTQtdGCINC30LDQsdC70L7QutC40YDQvtCy0LDQvdCwLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+ItCe0YHRgtCw0LvQvtGB0Ywg0L/QvtC/0YvRgtC+0Lo6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4g0J/QvtGB0LvQtSDRjdGC0L7Qs9C+IFNJTS3QutCw0YDRgtCwINCx0YPQtNC10YIg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC90LAuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLQmNC00LXQvdGC0LjRhNC40LrQsNGG0LjRjyDQstGL0LfRi9Cy0LDRjtGJ0LXQs9C+INCw0LHQvtC90LXQvdGC0LAiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+ItCf0YDQuNC70L7QttC10L3QuNC1INGB0LzQvtC20LXRgiDQv9C+0LTQutC70Y7Rh9Cw0YLRjNGB0Y8g0Log0LHQsNC30L7QstC+0LzRgyDQuNC90YLQtdGA0YTQtdC50YHRgyDRgdC70YPQttCx0YsgVlBOLiDQrdGC0L4g0YDQsNC30YDQtdGI0LXQvdC40LUg0L3QtSDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0L7QsdGL0YfQvdGL0LzQuCDQv9GA0LjQu9C+0LbQtdC90LjRj9C80LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ItCf0YDQuNCy0Y/Qt9C60LAg0Log0YTQvtC90L7QstC+0LzRgyDRgNC40YHRg9C90LrRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i0J/RgNC40LvQvtC20LXQvdC40LUg0YHQvNC+0LbQtdGCINC/0L7QtNC60LvRjtGH0LDRgtGM0YHRjyDQuiDQsdCw0LfQvtCy0L7QvNGDINC40L3RgtC10YDRhNC10LnRgdGDINGB0LvRg9C20LHRiyDQvtCx0L7QtdCyLiDQrdGC0L4g0YDQsNC30YDQtdGI0LXQvdC40LUg0L3QtSDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0L7QsdGL0YfQvdGL0LzQuCDQv9GA0LjQu9C+0LbQtdC90LjRj9C80LguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLQn9C+0LTQutC70Y7Rh9C10L3QuNC1INC6INGD0LTQsNC70LXQvdC90L7QvNGDINC00LjRgdC/0LvQtdGOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i0J/RgNC40LvQvtC20LXQvdC40LUg0YHQvNC+0LbQtdGCINC/0L7QtNC60LvRjtGH0LDRgtGM0YHRjyDQuiDQsdCw0LfQvtCy0L7QvNGDINC40L3RgtC10YDRhNC10LnRgdGDINGD0LTQsNC70LXQvdC90L7Qs9C+INC00LjRgdC/0LvQtdGPLiDQrdGC0L4g0YDQsNC30YDQtdGI0LXQvdC40LUg0L7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDRgtC+0LvRjNC60L4g0YHQv9C10YbQuNCw0LvRjNC90YvQvNC4INC/0YDQuNC70L7QttC10L3QuNGP0LzQuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLQn9C+0LTQutC70Y7Rh9C10L3QuNC1INC6INGB0LvRg9C20LHQtSDQstC40LTQttC10YLQvtCyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+ItCf0YDQuNC70L7QttC10L3QuNC1INGB0LzQvtC20LXRgiDQv9C+0LTQutC70Y7Rh9Cw0YLRjNGB0Y8g0Log0LHQsNC30L7QstC+0LzRgyDQuNC90YLQtdGA0YTQtdC50YHRgyDRgdC70YPQttCx0Ysg0LLQuNC00LbQtdGC0L7Qsi4g0K3RgtC+INGA0LDQt9GA0LXRiNC10L3QuNC1INC90LUg0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC+0LHRi9GH0L3Ri9C80Lgg0L/RgNC40LvQvtC20LXQvdC40Y/QvNC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ItCS0LfQsNC40LzQvtC00LXQudGB0YLQstC40LUg0YEg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQvtC8INGD0YHRgtGA0L7QudGB0YLQstCwIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLQn9GA0LjQu9C+0LbQtdC90LjQtSDRgdC80L7QttC10YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC90LjQt9C60L7Rg9GA0L7QstC90LXQstGL0LUg0YTRg9C90LrRhtC40LggU3VyZmFjZUZsaW5nZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4i0KfRgtC10L3QuNC1INC00LDQvdC90YvRhSDQsiDQsdGD0YTQtdGA0LUg0LrQsNC00YDQvtCyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+ItCf0YDQuNC70L7QttC10L3QuNC1INGB0LzQvtC20LXRgiDRgdGH0LjRgtGL0LLQsNGC0Ywg0YHQvtC00LXRgNC20LDQvdC40LUg0LHRg9GE0LXRgNCwINGE0YDQtdC50LzQvtCyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ItCU0L7RgdGC0YPQvyDQuiBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4i0J/RgNC40LvQvtC20LXQvdC40LUg0YHQvNC+0LbQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvdC40LfQutC+0YPRgNC+0LLQvdC10LLRi9C1INGE0YPQvdC60YbQuNC4IElucHV0Rmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ItC90LDRgdGC0YDQsNC40LLQsNGC0Ywg0Y3QutGA0LDQvdGLLCDQv9C+0LTQutC70Y7Rh9C10L3QvdGL0LUg0YfQtdGA0LXQtyBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+ItCf0YDQuNC70L7QttC10L3QuNC1INGB0LzQvtC20LXRgiDQv9C+0LTQutC70Y7Rh9Cw0YLRjNGB0Y8g0Log0Y3QutGA0LDQvdCw0Lwg0YEg0L/QvtC80L7RidGM0Y4gV2ktRmkg0Lgg0L3QsNGB0YLRgNCw0LjQstCw0YLRjCDQuNGFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i0KPQv9GA0LDQstC70LXQvdC40LUg0LzQvtC90LjRgtC+0YDQsNC80LgsINC/0L7QtNC60LvRjtGH0LXQvdC90YvQvNC4INGH0LXRgNC10LcgV2ktRmkiPC9zdHJpbmc+CkBAIC0xMzQzLDcgKzEzNTIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3VibWl0IiBtc2dpZD0iMTYwMjMzNTU3MjA4OTkxMTk0MSI+ItCe0YLQv9GA0LDQstC40YLRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE2NDc2ODIxMjAwMzg2NDMxNiI+ItCS0LrQu9GO0YfQtdC9INGA0LXQttC40LwgXCLQqNGC0YPRgNC80LDQvVwiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FyX21vZGVfZGlzYWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgwMzUyMzA1Mzc1NjM1MDMyNjIiPiLQp9GC0L7QsdGLINCy0YvQudGC0LgsINC90LDQttC80LjRgtC1INC30LTQtdGB0YwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE0NjY5NDIzNDM5ODIwMjYwMSI+IlVTQi3QvNC+0LTQtdC8L9GC0L7Rh9C60LAg0LTQvtGB0YLRg9C/0LAgV2ktRmkg0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE0NjY5NDIzNDM5ODIwMjYwMSI+ItCS0LrQu9GO0YfQtdC9INGA0LXQttC40Lwg0LzQvtC00LXQvNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI2ODU3MDMxNzYwMTAzMDYyOTgyIj4i0J3QsNC20LzQuNGC0LUg0LTQu9GPINC90LDRgdGC0YDQvtC50LrQuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYWNrX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjIzMDA0NzAwMDQ1MDMzNDM0MzkiPiLQndCw0LfQsNC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmV4dF9idXR0b25fbGFiZWwiIG1zZ2lkPSIxMDgwNTU1MTA0Njc3OTkyNDA4Ij4i0JTQsNC70LXQtSI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+ItCa0LvQsNCy0LjRiNCwINGB0LzQtdC90Ysg0YDQtdCz0LjRgdGC0YDQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+ItCa0LvQsNCy0LjRiNCwINCy0LLQvtC00LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLQktGL0LHQtdGA0LjRgtC1INC/0YDQuNC70L7QttC10L3QuNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4i0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/Rg9GB0YLQuNGC0Ywg0L/RgNC40LvQvtC20LXQvdC40LUgXCI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+XCIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLQntGC0LrRgNGL0YLRjCDQtNC+0YHRgtGD0L86Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+ItCe0YLQutGA0YvRgtGMINC00L7RgdGC0YPQvyDQv9GA0LjQu9C+0LbQtdC90LjRjiBcIjx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz5cIiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLQn9C10YDQtdGC0LDRgdC60LjQstCw0LXQvNGL0Lkg0LfQvdCw0YfQvtC6INCx0LvQvtC60LjRgNC+0LLQutC4LiDQndCw0LbQvNC40YLQtSDQuCDRg9C00LXRgNC20LjQstCw0LnRgtC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLQn9GA0L7QstC10LTQuNGC0LUg0LLQstC10YDRhSwg0YfRgtC+0LHRiyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i0J/RgNC+0LLQtdC00LjRgtC1INCy0L3QuNC3LCDRh9GC0L7QsdGLIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLQn9GA0L7QstC10LTQuNGC0LUg0LLQu9C10LLQviwg0YfRgtC+0LHRiyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+ItCf0YDQvtCy0LXQtNC40YLQtSDQstC/0YDQsNCy0L4sINGH0YLQvtCx0YsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i0KDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLQmtCw0LzQtdGA0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i0JHQtdC3INC30LLRg9C60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i0JLQutC70Y7Rh9C40YLRjCDQt9Cy0YPQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i0J/QvtC40YHQuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+ItCf0YDQvtCy0LXQtNC40YLQtSDQv9C+INGN0LrRgNCw0L3Rgywg0YfRgtC+0LHRiyDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMINGD0YHRgtGA0L7QudGB0YLQstC+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLQn9C+0LTQutC70Y7Rh9C40YLQtSDQs9Cw0YDQvdC40YLRg9GA0YMsINGH0YLQvtCx0Ysg0YPRgdC70YvRiNCw0YLRjCDQv9Cw0YDQvtC70YwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i0KLQvtGH0LrQsCI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+ItCh0LjRgdGC0LXQvNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLQktC+0YHQv9GA0L7QuNC30LLQtdC00LXQvdC40LUg0LfQstGD0LrQsCDRh9C10YDQtdC3IEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i0JHQtdGB0L/RgNC+0LLQvtC00L3QvtC5INC80L7QvdC40YLQvtGAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+ItCT0L7RgtC+0LLQviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+ItCf0LXRgNC10L3QsNC/0YDQsNCy0LvRj9GC0Ywg0L/QvtGC0L7QuiDQvNGD0LvRjNGC0LjQvNC10LTQuNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLQn9C+0LTQutC70Y7Rh9C10L3QuNC1INC6INGD0YHRgtGA0L7QudGB0YLQstGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4i0J/QvtC00LrQu9GO0YfQtdC90LjQtSDQuiDRg9C00LDQu9C10L3QvdC+0LzRgyDQtNC40YHQv9C70LXRjiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+ItCf0L7QuNGB0Log0YPRgdGC0YDQvtC50YHRgtCy4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4i0J3QsNGB0YLRgNC+0LnQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+ItCe0YLQutC70Y7Rh9C40YLRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLQodC60LDQvdC40YDQvtCy0LDQvdC40LUuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLQn9C+0LTQutC70Y7Rh9C10L3QuNC1Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLQlNC+0YHRgtGD0L/QtdC9Ijwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4i0J3QsNC70L7QttC10L3QuNC1IOKEliA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPiDRhSA8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4g0YLRh9C6L9C00Y7QudC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwg0LHQtdC30L7Qv9Cw0YHQvdGL0LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+ItCR0LXRgdC/0YDQvtCy0L7QtNC90L7QuSDQv9GA0L7QtdC60YLQvtGAINC/0L7QtNC60LvRjtGH0LXQvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLQmNC30L7QsdGA0LDQttC10L3QuNC1INC/0LXRgNC10LTQsNC10YLRgdGPINC90LAg0LTRgNGD0LPQvtC1INGD0YHRgtGA0L7QudGB0YLQstC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+ItCf0L7QtNC60LvRjtGH0LXQvdC40LUg0Log0YPQtNCw0LvQtdC90L3QvtC80YMg0LTQuNGB0L/Qu9C10Y4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiLQn9C+0LTQutC70Y7Rh9C10L3QuNC1INC6IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+ItCj0LTQsNC70LXQvdC90YvQuSDQtNC40YHQv9C70LXQuSDQv9C+0LTQutC70Y7Rh9C10L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+ItCf0L7QtNC60LvRjtGH0LXQvdC+INC6IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLQntGC0LrQu9GO0YfQuNGC0YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+ItCt0LrRgdGC0YDQtdC90L3Ri9C5INCy0YvQt9C+0LIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLQl9Cw0LHRi9C70Lgg0LPRgNCw0YTQuNGH0LXRgdC60LjQuSDQutC70Y7Rhz8iPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTYsMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4i0J/QvtCy0YLQvtGAINGH0LXRgNC10LcgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz7CoNGB0LXQui4iPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i0J/QvtCy0YLQvtGA0LjRgtC1INC/0L7Qv9GL0YLQutGDINC/0L7Qt9C20LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+ItCn0YLQvtCx0Ysg0LLQtdGA0L3Rg9GC0YzRgdGPINCyINC+0LHRi9GH0L3Ri9C5INGA0LXQttC40LwsINC/0YDQvtCy0LXQtNC40YLQtSDQv9Cw0LvRjNGG0LXQvCDQstC90LjQtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLQp9GC0L7QsdGLINCy0LXRgNC90YPRgtGM0YHRjyDQsiDQvtCx0YvRh9C90YvQuSDRgNC10LbQuNC8LCDQv9GA0L7QstC10LTQuNGC0LUg0L/QsNC70YzRhtC10Lwg0LLQvdC40LcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLQk9C+0YLQvtCy0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLQktGL0LHQvtGAINGH0LDRgdC+0LIg0L3QsCDRhtC40YTQtdGA0LHQu9Cw0YLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4i0JLRi9Cx0L7RgCDQvNC40L3Rg9GCINC90LAg0YbQuNGE0LXRgNCx0LvQsNGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4i0JLRi9Cx0LXRgNC40YLQtSDRh9Cw0YHRiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+ItCS0YvQsdC10YDQuNGC0LUg0LzQuNC90YPRgtGLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLQntC60L3QviDQstGL0LHQvtGA0LAg0LTQsNGC0YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLQnNC10L3RjiDQstGL0LHQvtGA0LAg0LPQvtC00LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+ItCS0YvQsdC10YDQuNGC0LUg0LzQtdGB0Y/RhiDQuCDRh9C40YHQu9C+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4i0JLRi9Cx0LXRgNC40YLQtSDQs9C+0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4i0JLRi9Cx0YDQsNC9INGN0LvQtdC80LXQvdGCIDx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+ItCm0LjRhNGA0LAgPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4g0YPQtNCw0LvQtdC90LAiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiY2QwNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTU5NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJieXRlU2hvcnQiIG1zZ2lkPSI4MzQwOTczODkyNzQyMDE5MTAxIj4iQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtpbG9ieXRlU2hvcnQiIG1zZ2lkPSI1OTczNzg5NzgzNTA0NzcxODc4Ij4iS0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWdhYnl0ZVNob3J0IiBtc2dpZD0iNjM1NTg1MTU3Njc3MDQyODkyMiI+Ik1CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2lnYWJ5dGVTaG9ydCIgbXNnaWQ9IjMyNTk4ODI0NTUyMTIxOTMyMTQiPiJHQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRlcmFieXRlU2hvcnQiIG1zZ2lkPSIyMzE2MTMwMTgxNTkxODY5NjIiPiJUQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBldGFieXRlU2hvcnQiIG1zZ2lkPSI1NjM3ODE2NjgwMTQ0OTkwMjE5Ij4iUEIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaWxlU2l6ZVN1ZmZpeCIgbXNnaWQ9IjkxNjQyOTI3OTE1MDA1MzE5NDkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRzPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZsdDvgtrHgtrjgt4og4La64Lec4Lav4LePIOC2seC3kOC2rSZndDsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpcyIgbXNnaWQ9Ijc4OTk4Mjk1MTYwNDg4MTMyMzciPiLigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpc190d29fZG90cyIgbXNnaWQ9IjEyMjgwNzg5OTQ4NjYwMzA3MzYiPiLigKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eVBob25lTnVtYmVyIiBtc2dpZD0iNzY5NDA2MzA0MjA3OTY3NjUxNyI+Iijgtq/gt5Tgtrvgtprgtq7gtrEg4LaF4LaC4Laa4La64Laa4LeKIOC2seC3nOC2uOC3kOC2rSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmtub3duTmFtZSIgbXNnaWQ9IjIyNzc1NTY1NDY3NDI3NDY1MjIiPiIo4Lax4Lec4Lav4Lax4LeTKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIgbXNnaWQ9IjI2NjAwMjA5OTAwOTc3MzMwNzciPiLgtprgtqfgt4Tgtqwg4Lat4LeQ4La04LeR4La9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdE1zaXNkbkFscGhhVGFnIiBtc2dpZD0iMjg1MDg4OTc1NDkxOTU4NDY3NCI+Ik1TSVNETjEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlFcnJvciIgbXNnaWQ9IjUxNTQ0OTk0NTc3MzkwNTI5MDciPiLgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4Lac4LeQ4Lan4LeF4LeU4LeA4Laa4LeKIOC3hOC3nSDgtoXgt4Dgtr3gtoLgtpzgt5QgTU1JIOC2muC3muC2reC2uuC2muC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlGZG5FcnJvciIgbXNnaWQ9IjUyMjQzOTgyMTYzODUzMTY0NzEiPiLgt4Pgt4rgtq7gt4/gt4Dgtrsg4LaH4La44Lat4LeT4La44LeKIOC2heC2guC2miDgt4Dgtr3gtqcg4La04La44Lar4Laa4LeKIOC2uOC3meC3hOC3meC2uuC3lOC2uCDgt4Pgt5Pgtrjgt4/gtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkIiBtc2dpZD0iODE0NzI3ODM0NjQxNDcxNDMxNSI+IuC3g+C3muC3gOC3j+C3gCDgt4Pgtrbgtr0g4Laa4La74LaxIOC2veC2r+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZEZvciIgbXNnaWQ9IjY4NTYyMjgxNDA0NTM0NzEwNDEiPiLgt4Pgt5rgt4Dgt4/gt4Ag4LeD4La24La94La64LeSLCDgt4PgtrPgt4Tgt486Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZURpc2FibGVkIiBtc2dpZD0iMTkzNzU1MzIyNjU5MjUxNjQxMSI+IuC3g+C3muC3gOC3j+C3gCDgtoXgtrbgtr0g4Laa4La74LaxIOC2veC2r+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlUmVnaXN0ZXJlZCIgbXNnaWQ9IjYyNzUwMTkwODI1OTgxMDI0OTMiPiLgtr3gt5Lgtrrgt4/gtrTgtq/gt5LgtoLgtqDgt5Ig4LeA4LeT4La4IOC3g+C3j+C2u+C3iuC2ruC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRXJhc2VkIiBtc2dpZD0iMTI4ODU4NDY5NTI5NzIwMDk3MiI+IuC2uOC3kOC2muC3k+C2uCDgt4Pgt4/gtrvgt4rgtq7gtpog4LeA4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkSW5jb3JyZWN0IiBtc2dpZD0iNzYxMjIwODgzOTQ1MDEyODcxNSI+IuC3gOC3kOC2u+C2r+C3kiDgtrjgt5TgtrvgtrTgtq/gtrrgtprgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pQ29tcGxldGUiIG1zZ2lkPSI4MjMyNTI3NDk1NDExNjk4MzU5Ij4iTU1JIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2q+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQaW4iIG1zZ2lkPSI5MDE1Mjc3NjQ1NTQ2NzEwMDE0Ij4i4LaU4La2IOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrEg4La94LavIOC2tOC2u+C2qyBQSU4g4LaR4LaaIOC3gOC3kOC2u+C2r+C3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQdWsiIG1zZ2lkPSI1NDg3MjU3NjQ3MDgxMTMyMjAxIj4i4LaU4La2IOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrEg4La94LavIFBVSyDgtpHgtpog4LeA4LeQ4La74Lav4LeS4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pc21hdGNoUGluIiBtc2dpZD0iNjA5Mzc5MDU0NDk2ODYzNDE5Ij4i4LaU4La2IOC2p+C2uuC3kuC2tOC3iiDgtprgtr0gUElOIOC2seC3nOC2nOC3kOC3heC2tOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUGluIiBtc2dpZD0iMzg1MDAxODQ0NTE4NzQ3NTM3NyI+IjQg4LeD4LeS4LanIDgg4Lav4Laa4LeK4LeA4LePIOC2heC2guC2miDgt4Pgt4Tgt5Lgtq0gUElOIOC2keC2muC2muC3iiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4i4LaF4LaC4LaaIDgg4Laa4LeKIOC3hOC3nSDgtorgtqcg4LeA4LeQ4Lap4LeSIFBVSyDgtpHgtprgtprgt4og4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4i4LaU4La24Lac4LeaIFNJTSDgtrTgtq0g4La04Lat4LanIFBVSyDgtoXgtpzgt5Tgt4Xgt5Qg4LeA4LeQ4Lan4LeTIOC2h+C2rS4g4LaR4La4IOC2heC2nOC3lOC2vSDgtofgtrvgt5PgtrjgtqcgUFVLIOC2muC3muC2reC2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNJTSDgtrTgtq3gt5og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyBQVUsyIOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLgtrTgt5Dgtrjgt5Lgtqvgt5ngtrEg4LaF4La44Lat4Lax4LeK4Lax4LeP4Lac4LeaIElEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ2xpck1taSIgbXNnaWQ9Ijc3ODQ2NzM2NzM0NDY4MzMwOTEiPiLgtrTgt5Lgtqfgtq3gtqcg4La64LaxIOC2heC2uOC2reC2seC3iuC2seC3j+C2nOC3miBJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNmTW1pIiBtc2dpZD0iNTEyMzIxODk4OTE0MTU3MzUxNSI+IuC2h+C2uOC2reC3lOC2uCDgtongtq/gt5Lgtrvgt5Lgtrrgtqcg4La64LeQ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ3dNbWkiIG1zZ2lkPSI5MTI5Njc4MDU2Nzk1MDE2ODY3Ij4i4LaH4La44Lat4LeU4La44LeKIOC2u+C3kOC2s+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkJhTW1pIiBtc2dpZD0iNDU1MTkzMDY3OTI2NzcwNTgxIj4i4LaH4La44Lat4LeU4La4IOC2heC3gOC3hOC3kuC2uyDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJQd2RNbWkiIG1zZ2lkPSI3MDQzNzE1Njg3OTA1MjU0MTk5Ij4i4La44LeU4La74La04Lav4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJQaW5NbWkiIG1zZ2lkPSIzMTEzMTE3NzgwMzYxMTkwMzA0Ij4iUElOIOC3gOC3meC2seC3g+C3iiDgt4Dgt5Mg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ25pcE1taSIgbXNnaWQ9IjMxMTA1MzQ2ODA1NTc4NTcxNjIiPiLgtofgtrjgtq3gt5Tgtrjgt4og4LaF4LaC4Laa4La6IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNuaXJNbWkiIG1zZ2lkPSIzMDYyMTAyMTIxNDMwNTQ4NzMxIj4i4LaH4La44Lat4LeU4La44LeKIOC2heC2guC2muC2uiDgt4Pgt5Pgtrjgt48g4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlRocmVlV0NNbWkiIG1zZ2lkPSI5MDUxMDQ3MTcwMzIxMTkwMzY4Ij4i4Lat4LeU4Lax4LeKIOC2uOC3j+C2u+C3iuC2nCDgtofgtrjgtq3gt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSdWFjTW1pIiBtc2dpZD0iNzgyNzg4NzQ1OTEzODMwODg4NiI+IuC2heC2seC3gOC3geC3iuKAjeC2uiDgt4Tgt5Lgtrvgt5Lgt4Tgt5Dgtrvgtq/gt4/gtrrgtpog4LaH4La44Lat4LeU4La44LeKIOC2tOC3iuKAjeC2u+C2reC3kuC2muC3iuC3guC3muC2tCDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmRNbWkiIG1zZ2lkPSIzMTE2NDQ2MjM3MDgxNTc1ODA4Ij4i4LaH4La44Lat4LeT4La44LeaIOC2heC2guC2muC2uiDgtrfgt4/gtrvgtq/gt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJEbmRNbWkiIG1zZ2lkPSIxMjY1NDc4OTMyNDE4MzM0MzMxIj4i4La24LeP4Law4LePIOC2seC3nOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T25OZXh0Q2FsbE9uIiBtc2dpZD0iNDI5NDE1NDA5MTQ1NzgxOTIzIj4i4LaF4La44Lat4Lax4LeK4Lax4LeP4Lac4LeaIElEIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2ryDgtoXgtrHgt5Tgt4Ag4LeD4LeT4La44LePIOC3gOC3kyDgtofgtq0uIOC2uOC3k+C3heC2nyDgtofgtrjgtq3gt5Tgtrg6IOC3g+C3k+C2uOC3jyDgtprgtrsg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPbk5leHRDYWxsT2ZmIiBtc2dpZD0iMzA5MjkxODAwNjA3Nzg2NDYyNCI+IuC2heC2uOC2reC2seC3iuC2seC3j+C2nOC3miBJRCDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt5Qg4LaF4Lax4LeU4LeAIOC3g+C3k+C2uOC3jyDgt4Dgt5Mg4LaH4LatLiDgtrjgt5Pgt4Xgtp8g4LaH4La44Lat4LeU4La4OiDgt4Pgt5Pgtrjgt48g4Laa4La7IOC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPbiIgbXNnaWQ9IjYxNzk0MjUxODI4NTY0MTg0NjUiPiLgtoXgtrjgtq3gtrHgt4rgtrHgt4/gtpzgt5ogSUQg4LeD4LeU4La04LeU4La74LeU4Lav4LeUIOC2heC2seC3lOC3gCDgt4Pgt5Pgtrjgt48g4LeA4LeTIOC2seC3kOC2rS4g4La44LeT4LeF4LafIOC2h+C2uOC2reC3lOC2uDog4LeD4LeT4La44LePIOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT2ZmIiBtc2dpZD0iMjU2Nzk5ODYzMzEyNDQwODU1MiI+IuC2heC2uOC2reC2seC3iuC2seC3j+C2nOC3miBJRCDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt5Qg4LaF4Lax4LeU4LeAIOC3g+C3k+C2uOC3jyDgt4Dgt5Mg4Lax4LeQ4LatLiDgtrjgt5Pgt4Xgtp8g4LaH4La44Lat4LeU4La4OiDgt4Pgt5Pgtrjgt48g4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VOb3RQcm92aXNpb25lZCIgbXNnaWQ9Ijg2MTQ4MzAxODA1MDg2ODY2NjYiPiLgt4Pgt5rgt4Dgt4/gt4DgtrHgt4og4LeD4La04La64LePIOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSUGVybWFuZW50IiBtc2dpZD0iMzM3NzM3MTE0NTkyNjgzNTY3MSI+IuC2heC2uOC2reC2seC3iuC2seC3j+C2nOC3miBJRCDgt4Pgt5Dgtprgt4Pgt5Pgtrgg4LaU4La24LanIOC3gOC3meC2seC3g+C3iuC2muC2vSDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZENoYW5nZWRUaXRsZSIgbXNnaWQ9IjU1OTIxODkzOTg5NTYxODc0OTgiPiLgt4Pgt5Pgtrjgt5Lgtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5ngtrvgt5Lgtqvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25EYXRhIiBtc2dpZD0iODY1Mzc5NDc4NDY5MDA2NTU0MCI+IuC2r+C2reC3iuC2rSDgt4Pgt5rgt4Dgt4/gt4Ag4LaF4LeA4LeE4LeS4La7IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRW1lcmdlbmN5IiBtc2dpZD0iNjU4MTE2Mzc3OTA3MjgzMzY2NSI+IuC3hOC2r+C3kuC3g+C3kiDgt4Pgt5rgt4Dgt4/gt4Ag4LaF4LeA4LeE4LeS4La7IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uTm9ybWFsIiBtc2dpZD0iNDk1Mzg2NzAxMTM4OTc1MDY3MyI+IuC3hOC2rCDgt4Pgt5rgt4Dgt4/gt4Ag4La24LeP4Law4LePIOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsVm9pY2UiIG1zZ2lkPSIzMzk2OTYzNjUyMTA4MTUxMjYwIj4i4LeD4LeS4La64La94LeUIOC3hOC2rCDgt4Pgt5rgt4Dgt48g4LaF4LeA4LeE4LeS4La7IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uU21zIiBtc2dpZD0iODMxNDM1MjMyNzQ2MTYzODg5NyI+IlNNUyDgt4Pgt5rgt4Dgt4/gt4Ag4LaF4LeA4LeE4LeS4La7IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VEYXRhIiBtc2dpZD0iOTk2NjM2NDg3MTA2MTcxMzIwIj4i4LeE4LasL+C2r+C2reC3iuC2rSDgt4Pgt5rgt4Dgt48g4LaF4LeA4LeE4LeS4La7IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VTbXMiIG1zZ2lkPSIxODg4NTg4MTUyNzkyMDIzODczIj4i4LeE4LasL1NNUyDgt4Pgt5rgt4Dgt48g4LaF4LeA4LeE4LeS4La7IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsIiBtc2dpZD0iNTY0MzAyODI2NDQ2NjA5MjgyMSI+IuC3g+C3kuC2uuC2veC3lOC2uCDgt4Tgtqwv4Lav4Lat4LeK4LatL1NNUyDgt4Pgt5rgt4Dgt4/gt4DgtrHgt4og4La24LeP4Law4LePIOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzVm9pY2UiIG1zZ2lkPSIxMjU4MzkzODEyMzM1MjU4MDE5Ij4i4LeE4LasIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YSIgbXNnaWQ9Ijg3MjQ1Njc4MjA3NzkzNzg5MyI+IuC2r+C2reC3iuC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0ZBWCIgbXNnaWQ9IjU1NjY2MjQ5OTg4NDA0ODY0NzUiPiLgt4bgt5Dgtprgt4rgt4Pgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NTTVMiIG1zZ2lkPSIyMDE1NDYwMzczNzAxNTI3NDg5Ij4iU01TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YUFzeW5jIiBtc2dpZD0iNDUyMzQ1NDc4MzQ5ODU1MTQ2OCI+IuC2heC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhU3luYyIgbXNnaWQ9Ijc1MzAwMDA1MTk2NDYwNTQ3NzYiPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzUGFja2V0IiBtc2dpZD0iNjk5MTAwNjU1Nzk5MzQyMzQ1MyI+IuC2tOC3kOC2muC3kOC2p+C3iuC2p+C3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BBRCIgbXNnaWQ9IjMyMzUyNTkwODU2NDgyNzEwMzciPiJQQUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDAiIG1zZ2lkPSI3MTcwMzM1NDcyMTk4Njk0OTQ1Ij4i4La74Led4La44LeS4LaCIOC2r+C2u+C3iuC3geC2muC2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEiIG1zZ2lkPSI1MzE0ODYxNTE5NzUyNTM4OTIyIj4i4La74Led4La44LeS4LaCIOC2r+C2u+C3iuC3geC2muC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDIiIG1zZ2lkPSI4OTY5OTI5MDQ5MDgxMjY4MTE1Ij4i4La74Led4La44LeS4LaCIOC2r+C2u+C3iuC3geC2muC2uiDgt4Pgt5Dgtqvgt5ngtr3gt5Ig4LeA4LeZ4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQzIiBtc2dpZD0iNTE0ODI1NTAyNzA0Mzk0MzMxNyI+IuC3gOC2p+C2tOC3kuC2p+C3j+C3gOC3meC2seC3iiDgtongt4Dgtq3gt4rgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDQiIG1zZ2lkPSI4ODA4NDU2NjgyNTUwNzk2NTMwIj4i4Lac4Lec4Lap4Lax4LeQ4Lac4LeS4La94LeK4La94LeZ4Lax4LeKIOC2tOC3kuC2p+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NSIgbXNnaWQ9Ijc2MDQwNjMyNTI4NTAzNTQzNTAiPiLgtrvgt53gtrjgt5LgtoIgIC0g4Laa4LeQ4La44Lat4LeSIOC2tOC2r+C3iuC2sOC2reC3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NiIgbXNnaWQ9IjIwNTk0NDA4MjU3ODI4NzE1MTMiPiLgtrvgt53gtrjgt5LgtoIgIC0g4La94La24LeP4Lac4LatIOC3hOC3kOC2muC3kiDgtrTgtq/gt4rgtrDgtq3gt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDciIG1zZ2lkPSI3MTEyMDc4NzI0MDk3MjMzNjA1Ij4i4La74Led4La44LeS4LaCIC0g4La44LeS4Lat4LeK4oCN4La7IOC3hOC3gOC3lOC2veC3iuC2muC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0OCIgbXNnaWQ9IjU5ODk1Njk3Nzg2MDQwODkyOTEiPiLgtrvgt53gtrjgt5LgtoIgLSDgtoXgtrDgt5Lgtrjgt5Lgtr0g4LeE4LeA4LeU4La94LeK4Laa4La74LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ5IiBtc2dpZD0iNzk2OTI5NjgxMTM1NTE1MjQ5MSI+IuC2u+C3neC2uOC3kuC2giAgLSDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4LeD4Lea4LeA4LePIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kuC2reC3iuC3gOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTAiIG1zZ2lkPSIzOTkyOTA2OTk5ODE1MzE2NDE3Ij4i4La74Led4La44LeS4LaCIC0g4LaF4LeD4La44LeK4La04LeW4La74LeK4LarIOC3g+C3muC3gOC3jyDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Pgtq3gt4rgt4DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDExIiBtc2dpZD0iNDE1NDQ3Njg1NDQyNjkyMDk3MCI+IuC2u+C3neC2uOC3kuC2giAg4La24LeQ4Lax4La74La6IOC3g+C2muC3iuKAjeC2u+C3k+C2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTIiIG1zZ2lkPSIxMTg5MDcxMTE5OTkyNzI2MzIwIj4i4La74Led4La44LeS4LaCIOC2tuC3kOC2seC2u+C2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dFNlYXJjaGluZyIgbXNnaWQ9IjgzNjAxNDE4ODU5NzIyNzk5NjMiPiLgt4Pgt5rgt4Dgt4/gt4Ag4LeD4Laz4LeE4LePIOC3g+C3nOC2uuC2uOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVOb3RGb3J3YXJkZWQiIG1zZ2lkPSIxNjgzNjg1ODgzODQxMjcyNTYwIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IOC2ieC2r+C3kuC2u+C3kuC2uuC2pyDgtrHgt5zgtrrgt4DgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZUZvcndhcmRlZCIgbXNnaWQ9IjEzMDI5MjIxMTc0OTg1OTA1MjEiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IkRJQUxJTkdfTlVNQkVSIj57MX08L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZUZvcndhcmRlZFRpbWUiIG1zZ2lkPSI5MjA2MjUxNzM2NTI3MDg1MjU2Ij4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iVElNRV9ERUxBWSI+ezJ9PC94bGlmZjpnPiDgtqcg4La04LeD4LeU4LeAIDx4bGlmZjpnIGlkPSJESUFMSU5HX05VTUJFUiI+ezF9PC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkIiBtc2dpZD0iNTA3MzIzNzgyNzYyMDE2NjI4NSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiDgtongtq/gt5Lgtrvgt5Lgtrrgtqcg4Lax4Lec4La64LeA4LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkVGltZSIgbXNnaWQ9IjY3ODE2MjE5NjQzMjA2MzUxNzIiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjog4LaJ4Lav4LeS4La74LeS4La64LanIOC2seC3nOC2uuC3gOC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmY0NvbXBsZXRlIiBtc2dpZD0iMzExODg0ODIzMDk2Njg4NjU3NSI+IuC2heC2guC2nCDgtprgt5rgtq3gtrog4LeD4La44LeK4La04LeW4La74LeK4Lar4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZjRXJyb3IiIG1zZ2lkPSIzMzI3NTYwMTI2NTg4NTAwNzc3Ij4i4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2nOC3kOC2p+C3heC3lOC3gOC2muC3iiDgt4Tgt50g4LaF4LeA4La94LaC4Lac4LeUIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtprgt5rgtq3gtrrgtprgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yT2siIG1zZ2lkPSIxMTkxOTE5Mzc4MDgzNDcyMjA0Ij4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yIiBtc2dpZD0iNzk1NjM5MjUxMTE0NjY5ODUyMiI+IuC2ouC3j+C2vSDgtq/gt53gt4Lgtrrgtprgt4og4Lat4LeS4La24LeU4Lar4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiJVUkwg4La6IOC3g+C3meC3gOC3kuC2uiDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRBdXRoU2NoZW1lIiBtc2dpZD0iNjI5OTk4MDI4MDQ0MjA3Njc5OSI+IuC2heC2qeC3gOC3kuC2uuC3miDgt4Pgtq3gt4rigI3gtrrgt4/gtrTgtrEg4La04Lan4LeS4La04LeP4Lan4LeS4La6IOC3gOC3meC2rSDgt4Pgt4Tgtrog4Lax4Lec4Lav4Laa4LeK4LeA4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckF1dGgiIG1zZ2lkPSIxNDM1MDY1NjI5NDM4MDQ0NTM0Ij4i4LeD4Lat4LeK4oCN4La64LeP4La04Lax4La6IOC2muC3hSDgtrHgt5zgt4Tgt5DgtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JQcm94eUF1dGgiIG1zZ2lkPSIxNzg4MjA3MDEwNTU5MDgxMzMxIj4i4La04LeK4oCN4La74Lec4Laa4LeK4LeD4LeSIOC3g+C3muC3gOC3j+C2r+C3j+C2uuC2muC2uiDgt4Tgtrvgt4Tgt48g4LeD4Lat4LeK4oCN4La64LeP4La04Lax4La6IOC2heC3g+C3j+C2u+C3iuC2ruC2muC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JDb25uZWN0IiBtc2dpZD0iODcxNDI3MzIzNjM2NDY0MDU0OSI+IuC3g+C3muC3gOC3j+C2r+C3j+C2uuC2muC2uuC3j+C2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeS4La6IOC2seC3nOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JJTyIgbXNnaWQ9IjIzNDA1NTgxOTc0ODkzMDIxODgiPiLgt4Pgt5rgt4Dgt4/gtq/gt4/gtrrgtprgtrrgt48g4LeD4La44LacIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Pgtrjgtqcg4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2ui4g4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVGltZW91dCIgbXNnaWQ9IjQ3NDM0MDM3MDM3NjI4ODM5NTQiPiLgt4Pgt5rgt4Dgt4/gtq/gt4/gtrrgtprgtrog4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uiDgtprgtr3gt4og4LaJ4Laa4LeU4Lat4LeKIOC3gOC3kuC2q+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JSZWRpcmVjdExvb3AiIG1zZ2lkPSI4Njc5NTk2MDkwMzkyNzc5NTE2Ij4i4La04LeS4Lan4LeU4LeA4LeaIOC2tuC3nOC3hOC3nSDgt4Pgt5rgt4Dgt4/gtq/gt4/gtrrgtpog4Lax4LeQ4LeA4LatIOC3hOC2u+C3gOC3jyDgtrrgt5Dgt4Dgt5Pgtrjgt4og4LaF4Lap4LaC4Lac4LeUIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JVbnN1cHBvcnRlZFNjaGVtZSIgbXNnaWQ9IjUwMTU3MzA4MTI5MDYxOTIyMDgiPiLgtrTgt4rigI3gtrvgt5zgtqfgt53gtprgt53gtr3gtrog4LeA4LeZ4LatIOC3g+C3hOC2uiDgtrHgt5zgtq/gtprgt4rgt4Dgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmFpbGVkU3NsSGFuZHNoYWtlIiBtc2dpZD0iOTY1NDk2MDYwMDA2NTg2NDEiPiLgt4Pgt5Tgtrvgtprgt4rgt4Lgt5Lgtq0g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64Laa4LeKIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uOC2pyDgtrHgt5zgt4Tgt5Dgtprgt5Ig4LeA4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckJhZFVybCIgbXNnaWQ9IjM2MzY5Mjk3MjI3Mjg4ODE5NzIiPiJVUkwg4LeA4La94LaC4Lac4LeUIOC2seC3nOC3gOC2sSDgtrHgt5Lgt4Pgt48g4La04LeS4Lan4LeU4LeAIOC3gOC3kuC3gOC3mOC2rSDgtprgt5Lgtrvgt5Pgtrjgtqcg4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlIiBtc2dpZD0iMjE3MDc4ODUxNTA1MjU1ODY3NiI+IuC2nOC3nOC2seC3lOC3gCDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeS4La6IOC2seC3nOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlTm90Rm91bmQiIG1zZ2lkPSI2MjAzODU2NjEyMDQyNjU1MDg0Ij4i4LaJ4La94LeK4La94LaxIOC2veC2ryDgtpzgt5zgtrHgt5Qg4LeD4LeZ4LeA4LeS4La6IOC2seC3nOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUb29NYW55UmVxdWVzdHMiIG1zZ2lkPSIxMjM1Mzk2OTI3MDg3MTg4MjUzIj4i4LaJ4La94LeK4La94LeT4La44LeKIOC3gOC3kuC3geC3j+C2vSDgtrTgt4rigI3gtrvgtrjgt4/gtqvgtrrgtprgt4og4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC3gOC3meC2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5Lgtrrgt5IuIOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4OTY3NzEwMDI1MDM2MTYzODIyIj4iPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiUxJHM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgtrTgt5TgtrvgtrHgtrog4LeA4LeT4La44LeaIOC2r+C3neC3guC2uuC2muC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luYyIgbXNnaWQ9IjgzNTM1MjMwNjAyNjkzMzU2NjciPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jTm90aWZpY2F0aW9uVGl0bGUiIG1zZ2lkPSIzOTc3NDMzNDkxOTE5MDE0NTgiPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VUb29NYW55RGVsZXRlc05vdGlmaWNhdGlvbkRlc2MiIG1zZ2lkPSI4MTAwOTgxNDM1MDgwNjk2NDMxIj4iPHhsaWZmOmcgaWQ9IkNPTlRFTlRfVFlQRSI+JXM8L3hsaWZmOmc+IOC2uOC3kOC2muC3k+C2uOC3iiDgt4Dgt5Dgtqngt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NDk0MDE5MjM0MTAyMTU0ODk2Ij4i4Lan4LeQ4La24LeK4La94Lan4LeKIOC2huC2oOC2uuC2seC2uiDgtrTgt5Lgtrvgt5Ig4LaH4LatLiDgtongtqkg4Lax4LeS4Lav4LeE4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgtrjgt4Tgtrsg4Lac4Lec4Lax4LeUIOC2uOC2muC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ3NTk5OTI4NjY4MDAwMDU0MSI+IuC2r+C3lOC2u+C2muC2ruC2sSDgtobgtqDgtrrgtrHgtrog4La04LeS4La74LeTIOC2h+C2rS4g4LaJ4LapIOC2seC3kuC2r+C3hOC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4La44LeE4La7IOC2nOC3nOC2seC3lCDgtrjgtprgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWUiIG1zZ2lkPSI2NTQ1Njk2MDA3NjMxNDA0MjkyIj4i4La44La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTQ1MzUxNDIwODY1MjAyODUzIj4i4Lan4LeQ4La24LeK4La94LanIOC3gOC3kuC2muC2veC3iuC2tCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2RpYWxvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMTk5MTkwNzU0NjM5ODg2MzgiPiLgtq/gt5Tgtrvgtprgtq7gtrEg4LeA4LeS4Laa4La94LeK4La04La64Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGUiIG1zZ2lkPSI3MTY3NzAzMzg5ODAyNjE4NjYzIj4i4Lax4LeS4LeE4LasIOC2huC2muC3j+C2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR1cm5fb25fcmFkaW8iIG1zZ2lkPSIzOTEyNzkzMDkyMzM5OTYyMzcxIj4i4Lax4Lec4La74LeQ4LeE4Lax4LeKIOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXJuX29mZl9yYWRpbyIgbXNnaWQ9IjgxOTg3ODQ5NDk5ODcwNjIzNDYiPiLgtrHgt5zgtrvgt5Dgt4Tgt5DgtrHgt4og4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9sb2NrIiBtc2dpZD0iNzk5MDk0NjU1NDk2MDk4MTUzIj4i4Lat4LeS4La7IOC2heC2nOC3lOC2vSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX29mZiIgbXNnaWQ9IjQyNjY2MTQxMDc0MTI4NjUwNDgiPiLgtrbgtr3gtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3NpbGVudCIgbXNnaWQ9IjMxOTI5ODE2MzAxODQ3MzA3OCI+IuC3hOC2rCDgtrHgtp/gtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfdmlicmF0ZSIgbXNnaWQ9IjcwNzIwNDMzODg1ODE1NTEzOTUiPiLgt4Tgtqwg4Lax4Laf4Lax4La6IOC2muC2uOC3iuC2tOC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3JpbmciIG1zZ2lkPSI4NTkyMjQxODE2MTk0MDc0MzUzIj4i4LeE4LasIOC2seC2n+C2seC2uiDgt4Pgtprgt4rigI3gtrvgt5Pgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9wcm9ncmVzcyIgbXNnaWQ9IjIyODEwNzkyNTczMjk5ODEyMDMiPiLgt4Dgt4Pgt48g4Lav4La44La44LeS4Lax4LeK4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzM4NTc0NTE3OTU1NTczMTQ3MCI+IuC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LeA4LeQ4LeD4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDk3OTIxNzUyNDI4MjEzNTMiPiLgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La6IOC3gOC3kOC3g+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtX3F1ZXN0aW9uIiBtc2dpZD0iMjkwNjU0NDc2ODg4MTEzNjE4MyI+IuC2lOC2tuC2pyDgt4Dgt4Pgt48g4Lav4LeQ4La44LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfdGl0bGUiIG1zZ2lkPSI3MDU0NTA5OTE0NTAwMTQwMzYxIj4i4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC2huC2muC3j+C2u+C2uuC2pyDgtrHgt5Dgt4Dgtq0g4La04LarIOC2nOC2seC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV9jb25maXJtIiBtc2dpZD0iNTUyOTM5NDQ1MDI3ODQ2NjgiPiLgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4LaG4Laa4LeP4La74La64LanIOC2seC3kOC3gOC2rSDgtrTgtqsg4Lac4LeQ4Lax4LeK4LeA4LeT4La44LanIOC2lOC2tuC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/IOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtpTgtrYg4LeD4LeK4Lau4LeP4La04LeS4LatIOC2muC2uyDgtofgtq3gt5Ig4LeD4LeS4La64La94LeU4La4IOC2reC3meC3gOC2sSDgtrTgt4/gtrvgt4rgt4Hgt4Dgt5Pgtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C3kuC2uuC2veC3iuC2vSDgtoXgtrbgtr0g4LeA4LeTIOC2uuC2uuC3ki4g4LaU4La2IOC2seC3kOC3gOC2rSDgtrTgtqsg4Lac4Lax4LeK4LeA4LaxIOC3gOC3kuC2pyDgtpLgt4Dgt48g4Lax4LeQ4LeA4LatIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uCDgt4Pgt5Lgtq/gt5Qg4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiLgtrjgt5Hgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19yZWNlbnRfdGFza3MiIG1zZ2lkPSI4Nzk0OTA2NjU4NzMyMTkzNDczIj4i4La44LeR4LatIOC2uuC3meC2r+C3lOC2uOC3iiDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQwODQ3NzE0MDA4ODA1MzY2NSI+IuC2p+C3kOC2tuC3iuC2veC2p+C3iiDgt4Dgt5Lgtprgtr3gt4rgtrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiLgtq/gt5Tgtrvgtprgtq7gtrEg4LeA4LeS4Laa4La94LeK4La0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrIiBtc2dpZD0iMjg0NDk0NTE5MTc5MjExOTcxMiI+IuC2reC3kuC2uyDgtoXgtpzgt5Tgtr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3Bvd2VyX29mZiIgbXNnaWQ9IjQ0NzE4Nzk0NDA4Mzk4Nzk3MjIiPiLgtrbgtr3gtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fYnVnX3JlcG9ydCIgbXNnaWQ9Ijc5MzQwMTA1Nzg5MjIzMDQ3OTkiPiLgtq/gt53gt4Ig4LeA4La74LeK4Lat4LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3RpdGxlIiBtc2dpZD0iMjY2NzQ5NDgwMzc0MjU0ODUzMyI+IuC2r+C3neC3giDgt4Dgt4/gtrvgt4rgtq3gt4/gt4Dgtprgt4og4Lac4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X21lc3NhZ2UiIG1zZ2lkPSIzOTg0NDcwNDg3NTAzNTA0NTYiPiLgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2tOC2q+C3kuC3gOC3kuC2qeC2uuC2muC3iiDgtr3gt5ngt4Mg4La64LeQ4LeA4LeT4La44LanIOC2uOC3meC2uiDgtpTgtrbgtpzgt5og4LeA4Lat4LeK4La44Lax4LeKIOC2i+C2tOC3j+C2guC2nCDgtq3gtq3gt4rgt4Dgtrog4Lac4LeQ4LaxIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeUIOC2h+C2rS4g4Lav4Led4LeCIOC3gOC3j+C2u+C3iuC2reC3j+C3gCDgtobgtrvgtrjgt4rgtrcg4Laa4La7IOC2keC2uiDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LeD4LeW4Lav4LeP4Lax4La44LeKIOC2muC2u+C2sSDgtq3gt5ngtprgt4og4LaR4La64LanIOC2muC3kuC3g+C3kuC2uuC2uOC3iiDgtprgt4/gtr3gtrrgtprgt4og4Lac4Lat4LeA4Lax4LeUIOC2h+C2rTsg4Laa4La74LeU4Lar4LeP4Laa4La7IOC2ieC3gOC3g+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3RvZ2dsZV9zaWxlbnRfbW9kZSIgbXNnaWQ9IjgyMTk1MjUzNDQyNDY4MTA5MjUiPiLgtrHgt5Lgt4Tgtqwg4LaG4Laa4LeP4La74La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vbl9zdGF0dXMiIG1zZ2lkPSIzMjg5ODQxOTM3MDAzNzU4ODA2Ij4i4LeB4La24LeK4Lav4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2lsZW50X21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjE1MDYwNDY1NzkxNzcwNjY0MTkiPiLgt4Tgtqwg4LeD4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfdG9nZ2xlX2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI1ODg0MzMwMzA2OTI2MzA3NDU2Ij4i4LaF4LeE4LeD4LeK4La64LeP4Lax4LePIOC2huC2muC3j+C2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb25fc3RhdHVzIiBtc2dpZD0iMjcxOTU1Nzk4MjYwODkxOTc1MCI+IuC2heC3hOC3g+C3iuC2uuC3j+C2seC3jyDgtobgtprgt4/gtrvgtrog4LeD4Laa4LeK4oCN4La74LeT4La64La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjUwNzUwNzA0NDI4NTQ0OTAyOTYiPiLgtoXgt4Tgt4Pgt4rgtrrgt4/gtrHgt48g4LaF4Laa4LeP4La74La6IOC2heC2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgtobgtprgt4/gtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIOC2tOC2r+C3iuC2sOC2reC3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jb3N0TW9uZXkiIG1zZ2lkPSI1NDI5ODA4MjE3ODYxNDYwNDAxIj4i4LaU4La24Lac4LeaIOC2uOC3lOC2r+C2veC3iiDgt4Dgt5Dgtrrgt4DgtrEg4LeD4Lea4LeA4LeP4LeA4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jb3N0TW9uZXkiIG1zZ2lkPSIzMjkzMzAxOTAzNDA5ODY5NDk1Ij4i4LaU4La24Lac4LeZ4Lax4LeKIOC2uOC3lOC2r+C2veC3iiDgtrrgtrEg4Lav4Lea4LeA4La94LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWVzc2FnZXMiIG1zZ2lkPSI3NTIxMjQ5MTQ4NDQ1NDU2NjYyIj4i4LaU4La24Lac4LeaIOC2tOC2q+C3kuC3gOC3kuC2qSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWVzc2FnZXMiIG1zZ2lkPSI3ODIxOTk5MDcxMDAzNjk5MjM2Ij4i4LaU4La24Lac4LeaIFNNUywg4LaKLeC2reC3kOC2tOC3kOC2veC3iiwg4LeD4LeEIOC3gOC3meC2seC2reC3iiDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4Laa4LeS4La64LeA4Lax4LeK4LaxIOC3g+C3hCDgtr3gt5LgtrrgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3BlcnNvbmFsSW5mbyIgbXNnaWQ9IjM1MTkxNjMxNDEwNzA1MzM0NzQiPiLgtpTgtrbgtpzgt5og4La04Lee4Lav4LeK4Lac4La94LeS4LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfcGVyc29uYWxJbmZvIiBtc2dpZD0iODQyNjQ1MzEyOTc4ODg2MTMzOCI+IuC2lOC2tuC2nOC3miDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4La04Lat4LeaIOC2huC2oOC2uuC2seC2uiDgtprgtrvgtrEg4La94LavLCDgtpTgtrYg4Lac4LeQ4LaxIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Dgtr3gtqcg4LaN4Lai4LeUIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc29jaWFsSW5mbyIgbXNnaWQ9IjU3OTkwOTY2MjM0MTIwNDM3OTEiPiLgtpTgtrbgtpzgt5og4LeD4La44LeP4Lai4La64LeT4La6IOC2reC3nOC2u+C2reC3lOC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc29jaWFsSW5mbyIgbXNnaWQ9IjcxMjk4NDI0NTc2MTE2NDM0OTMiPiLgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC3g+C3hCDgt4Pgt4/gtrjgt4/gtqIg4LeD4La44LeK4La24Lax4LeK4Law4La64Lax4LeKIOC2nOC3kOC2sSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeA4LeZ4LatIOC2jeC2ouC3lCDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2xvY2F0aW9uIiBtc2dpZD0iNjM1MTQ5NzQyNDM2NjkyMDQ5Ij4i4LaU4La24Lac4LeaIOC3g+C3iuC2ruC3j+C2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbG9jYXRpb24iIG1zZ2lkPSI1NzA0Njc5NzYzMTI0MTcwMTAwIj4i4LaU4La24Lac4LeaIOC2t+C3nuC2reC3kuC2miDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgtrgg4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbmV0d29yayIgbXNnaWQ9IjU4MDg5ODMzNzc3MjcxMDk4MzEiPiLgtqLgt4/gtr0g4LeD4Lax4LeK4Lax4LeS4LeA4Lea4Lav4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19uZXR3b3JrIiBtc2dpZD0iNDQ3ODI5OTQxMzI0MTg2MTk4NyI+IuC3gOC3kuC3gOC3kuC2sCDgtqLgt4/gtr0g4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSIxNTg1NDAzNTQ0MTYyMTI4MTA5Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iNTYyNTI4ODU3NzE2NDI4MjM5MSI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgtpTgt4Pgt4rgt4Pgt5og4LaL4La04LeP4LaC4LacIOC3g+C3hCDgtqLgt4/gtr0g4LeA4LeZ4LatIOC2tOC3kuC3gOC3kuC3g+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjgzMjkyNjE2NzAxNTE4NzEyMzUiPiLgt4Hgt4rigI3gtrvgt4Dgt4rigI3gtrog4LeD4LeQ4Laa4LeD4LeT4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hdWRpb1NldHRpbmdzIiBtc2dpZD0iMjY0MTUxNTQwMzM0NzU2ODEzMCI+IuC3geC3iuKAjeC2u+C3gOC3iuKAjeC2uiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWZmZWN0c0JhdHRlcnkiIG1zZ2lkPSI2MjA5MjQ2NjUzNDI0Nzk4MDMzIj4i4La24LeQ4Lan4La74LeS4La6IOC3gOC3meC2rSDgtrbgtr3gtrTgt4/gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjQ0MTI3NTMyMDYzODkxNjk0NyI+IuC2tuC3kOC2p+C2u+C3kuC2uuC3miDgtrbgtr3gtrog4Laa4LeK4LeC4Lar4LeS4Laa4LeAIOC2heC2qeC3lCDgt4DgtrEg4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2NhbGVuZGFyIiBtc2dpZD0iNTg2MzUwODQzNzc4MzY4MzkwMiI+IuC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2NhbGVuZGFyIiBtc2dpZD0iNTc3NzUzNDMxNjk4MjE4NDQxNiI+IuC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrEg4LeD4LeS4Lav4LeK4Law4LeS4Lax4LeK4LanIOC3g+C3mOC2ouC3lOC3gCDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaWN0aW9uYXJ5IiBtc2dpZD0iNDE0ODU5NzEyODg0MzY0MTM3OSI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgt4Hgtrbgt4rgtq8g4Laa4Led4LeC4La6IOC2muC3kuC2uuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGljdGlvbmFyeSIgbXNnaWQ9Ijc5MjExNjYzNTU5NjQ3NjQ0OTAiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LeB4La24LeK4LavIOC2muC3neC3guC2uuC3miDgt4DgtqDgtrEg4Laa4LeS4La64LeA4LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MDkwMjM3NzAyNDMyNTc2Nzg4Ij4i4La04La74LeS4LeB4LeT4La94LaaIOC3geC2tuC3iuC2r+C2muC3neC3guC2uuC2pyDgtr3gt5Lgt4Dgt5LgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjI3MTE1NjE5OTQ0OTczNjE2NDYiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LeB4La24LeK4Lav4Laa4Led4LeC4La64LanIOC3gOC2oOC2sSDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ib29rbWFya3MiIG1zZ2lkPSIxOTQ5NTE5NjczMTAzOTY4MjI5Ij4i4La04LeS4Lan4LeU4LeD4Lax4LeKIOC3g+C3hCDgtongtq3gt5Lgt4Tgt4/gt4PgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Jvb2ttYXJrcyIgbXNnaWQ9IjQxNjk3NzE2MDYyNTc5NjMwMjgiPiLgtrTgt5Lgtqfgt5Tgt4PgtrHgt4og4LeD4LeEIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtongtq3gt5Lgt4Tgt4/gt4Pgtrog4LeA4LeZ4LatIOC2jeC2ouC3lCDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmljZUFsYXJtcyIgbXNnaWQ9IjYxMTc3MDQ2Mjk3Mjg4MjQxMDEiPiLgt4Pgt5PgtrHgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RldmljZUFsYXJtcyIgbXNnaWQ9IjQ3NjkzNTYzNjIyNTE2NDExNzUiPiLgt4Pgt5PgtrHgt5Tgt4Ag4LeD4Laa4LeD4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl92b2ljZW1haWwiIG1zZ2lkPSI0MTYyMjM3MTQ1MDI3NTkyMTMzIj4i4LeE4LasIOC2reC3kOC2tOC3keC2vSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfdm9pY2VtYWlsIiBtc2dpZD0iMjQ5ODQwMzk2OTg2Mjk1MTM5MyI+IuC3hOC2rCDgtq3gt5DgtrTgt5Hgtr0g4LeA4LeZ4LatIOC2jeC2ouC3lCDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21pY3JvcGhvbmUiIG1zZ2lkPSIxNzE1Mzk5MDAyNTAwNDM0NjQiPiLgtrjgtrrgt5Lgtprgt4rigI3gtrvgt5zgt4bgt53gtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21pY3JvcGhvbmUiIG1zZ2lkPSI3MTA2NjE4Mjg2OTA1NzM4NDA4Ij4i4LeB4La24LeK4Lav4La6IOC2tOC2p+C3kuC2nOC2rSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44La64LeS4Laa4LeK4oCN4La74Lec4LeG4Led4Lax4La6IOC3gOC3meC2rSDgto3gtqLgt5Qg4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jYW1lcmEiIG1zZ2lkPSI0ODIwMzcyNDk1ODk0NTg2NjE1Ij4i4Laa4LeQ4La44La74LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jYW1lcmEiIG1zZ2lkPSIyOTMzNjY3MzcyMjg5NTY3NzE0Ij4i4Lah4LeP4La64LeP4La74LeW4La0IOC3hOC3nSDgt4Dgt5Pgtqngt5Lgtrrgt50g4Lac4LeK4oCN4La74LeE4Lar4La6IOC3g+C2s+C3hOC3jyDgtprgt5Dgtrjgtrvgt4/gt4Ag4LeA4LeZ4LatIOC2jeC2ouC3lCDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NjcmVlbmxvY2siIG1zZ2lkPSI4Mjc1NTAwMTczMzMwNzE4MTY4Ij4i4LaF4Lac4LeU4LeF4LeUIOC2reC3kuC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc2NyZWVubG9jayIgbXNnaWQ9IjcwNjc0OTcxMjg5MjU0OTk0MDEiPiLgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La64LeaIOC2heC2nOC3lOC3heC3lCDgtq3gt5Lgtrvgtrrgt5og4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeS4Lat4LeK4LeA4La64LanIOC2tuC2veC2tOC3j+C2sSDgt4Tgt5Dgtprgt5Lgtrrgt4/gt4AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FwcEluZm8iIG1zZ2lkPSI4MDI4Nzg5NzYyNjM0MTQ3NzI1Ij4i4LaU4La24Lac4LeaIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr0g4Lat4Lec4La74Lat4LeU4La74LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hcHBJbmZvIiBtc2dpZD0iMzk1MDM3ODUzODA0OTYyNTkwNyI+IuC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrrgt5og4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr0g4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeS4Lat4LeK4LeA4La64LanIOC2tuC2veC2tOC3keC2uOC3iiDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC2tuC3gC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd2FsbHBhcGVyIiBtc2dpZD0iMzg1MDI4MDE1ODA0MTE3NTk5OCI+IuC2tuC3kuC2reC3lOC2tOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd2FsbHBhcGVyIiBtc2dpZD0iNTYzMDQxNzg1NDc1MDU0MDE1NCI+IuC2i+C2tOC3j+C2guC2nCDgtrbgt5Lgtq3gt5TgtrTgtq3gt5og4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbUNsb2NrIiBtc2dpZD0iNDA2NTM1NzU5MjM2NjEyOTkyIj4i4LaU4La74La94Led4LeD4LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1DbG9jayIgbXNnaWQ9IjM5NDQzNTk4MzM2MjQwOTQ5OTIiPiLgtovgtrTgt4/gtoLgtpwg4Laa4LeP4La9IOC3hOC3nSDgtprgt4/gtr0g4Laa4La94LeP4La0IOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0YXR1c0JhciIgbXNnaWQ9IjIwOTU4NjI1NjgxMTM5NDUzOTgiPiLgtq3gtq3gt4rgt4Ag4Lat4LeT4La74LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI2MjQyNTkzNDMyMjI2ODA3MTcxIj4i4LaL4La04LeP4LaC4LacIOC2reC2reC3iuC3gCDgtq3gt5Pgtrvgt5Qg4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5bmNTZXR0aW5ncyIgbXNnaWQ9IjMzNDE5OTA5ODYxNDc4MjY1NDEiPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4LeD4LeQ4Laa4LeD4LeT4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeW5jU2V0dGluZ3MiIG1zZ2lkPSI3NjAzMTk1MjY1MTI5MDMxNzk3Ij4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hY2NvdW50cyIgbXNnaWQ9IjMzNTk2NDYyOTExMjUzMjU1MTkiPiLgtpTgtrbgtpzgt5og4Lac4LeS4Lar4LeU4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2NvdW50cyIgbXNnaWQ9IjQ5NDg3MzI2NDE4MjcwOTEzMTIiPiLgtr3gtrbgt4/gtpzgtq0g4LeE4LeQ4Laa4LeSIOC2nOC3kuC2q+C3lOC2uOC3iiDgt4Dgtr3gtqcg4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfaGFyZHdhcmVDb250cm9scyIgbXNnaWQ9Ijc5OTgyMTQ5Njg3OTE1OTkzMjYiPiLgtq/gt5jgtqngt4/gtoLgtpwg4La04LeP4La94LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNDM1NzA1Nzg2MTIyNTQ2MjcwMiI+IuC3hOC3keC2seC3iuC2qeC3iuC3g+C3meC2p+C2uuC3miDgtq/gt5jgtqngt4/gtoLgtpwg4LeA4La94LanIOC3g+C3mOC2ouC3lOC3gOC2uCDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9waG9uZUNhbGxzIiBtc2dpZD0iOTA2NzE3Mzk4ODMyNTg2NTkyMyI+IuC2r+C3lOC2u+C2muC2ruC2sSDgtofgtrjgtq3gt5Tgtrjgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3Bob25lQ2FsbHMiIG1zZ2lkPSI3NDg5NzAxNjIwNDQ2MTgzNzcwIj4i4Lav4LeU4La74Laa4Lau4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgtrHgt5Lgtrvgt5Pgtprgt4rgt4Lgtqvgtrog4Laa4La74Lax4LeK4LaxLCDgtrTgtqfgt5Lgtpzgtq0g4Laa4La74Lax4LeK4LaxIOC3g+C3hCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1Ub29scyIgbXNnaWQ9IjQ2NTIxOTE2NDQwODI3MTQwNDgiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4La44LeZ4LeA4La94La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1Ub29scyIgbXNnaWQ9IjgxNjIxMDI2MDIxOTA3MzQzMDUiPiLgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgt5og4La04LeE4La9IOC2uOC2p+C3iuC2p+C2uOC3iiDgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgtrog4LeD4LeEIOC2tOC3j+C2veC2seC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGV2ZWxvcG1lbnRUb29scyIgbXNnaWQ9IjM0NDYxNjQ1ODQ3MTA1OTY1MTMiPiLgt4PgtoLgt4Dgtrvgt4rgtrDgtpog4La44LeZ4LeA4La94La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iNzA1ODgyODAzMjM1ODE0MjAxOCI+IuC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtoLgt4Dgtrvgt4rgtrDgtprgtrrgtrHgt4og4LeD4Laz4LeE4LePIOC2tOC2uOC2q+C2muC3iiDgtoXgt4Dgt4Hgt4rigI3gtrog4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaXNwbGF5IiBtc2dpZD0iNDI3OTkwOTY3NjAzNjQwMjYzNiI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4ogVUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Rpc3BsYXkiIG1zZ2lkPSI2MDUxMDAyMDMxOTMzMDEzNzE0Ij4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSBVSSDgt4PgtrPgt4Tgt48g4La24La94La04LeP4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdG9yYWdlIiBtc2dpZD0iMTk3MTExODc3MDU0NjMzNjk2NiI+IuC2huC2oOC2uuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3NDQyMzE4NTAyNDQ2ODc0OTk5Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiJTRCDgtrTgtq0g4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWNjZXNzaWJpbGl0eUZlYXR1cmVzIiBtc2dpZD0iNzkxOTAyNTYwMjI4MzU5MzkwNyI+IuC2tOC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3jyDgt4Dgt5Lgt4Hgt5rgt4Lgt4/gtoLgtpwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9IjQyMDUxOTY4ODE2NzgxNDQzMzUiPiLgtovgtrTgtprgt4/gtrvgt5Pgt4DgtrEg4Lat4LeP4Laa4LeK4LeC4LarIOC2ieC2veC3iuC2veC3k+C2uOC3iiDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC3gOC3kuC3geC3muC3guC3j+C2guC2nC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJldHJpZXZlV2luZG93Q29udGVudCIgbXNnaWQ9IjM5MDE3MTc5MzY5MzAxNzAzMjAiPiLgtprgt4Dgt5Tgt4Xgt5Qg4LaF4Lax4LeK4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC2veC2tuC3j+C2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzNzcyMjI1MDA4NjA1MzEwNjcyIj4i4LaU4La2IOC2heC2seC3iuC2reC2u+C3iuC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kyDgt4DgtrEg4Laa4LeA4LeU4LeF4LeU4LeA4LeaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdFRvdWNoRXhwbG9yYXRpb24iIG1zZ2lkPSIzMTA4NzIzMzY0Njc2NjY3MzIwIj4i4LeD4LeK4La04La74LeK4LeB4La64LeZ4Lax4LeKIOC2nOC3gOC3muC3guC2q+C2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iNTgwMDU1MjUxNjc3OTI0OTM1NiI+IuC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrEg4LaF4La64LeS4Lat4La4IOC3hOC2rCDgtrHgtpzgt48g4Laa4Lat4LePIOC2muC3meC2u+C3meC2seC3lCDgtofgtq3gt5Ig4LaF4Lat4La7IOC2ieC2guC2nOC3kuC2reC3kiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4Lat4LeS4La74La6IOC2nOC3gOC3muC3guC2q+C2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeU4LeF4LeU4LeA4Lax4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE3Mzk4ODE3NjY1MjI1OTQwNzMiPiLgtovgt4Pgt4Pgt4og4LeA4LeZ4La24LeKIOC2tOC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3j+C3gCDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSI3ODgxMDYzOTYxNTA3NTExNzY1Ij4i4La64LeZ4Lav4LeU4La44LeKIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uuC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Dgtrog4LeA4LeQ4Lap4LeS4LeA4LaxIOC2veC3meC3gyDgt4Pgtprgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2h+C2reC3kOC2uOC3iiDgt4Dgt5Lgtqcg4LeD4LeK4Laa4LeK4oCN4La74LeS4La04LeK4Lan4LeKIOC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9IjIxMDM0NDAzOTE5MDI0MTIxNzQiPiLgtpTgtrYg4Lan4La64LeS4La04LeKIOC2muC3hSDgtrTgt5ngt4Ug4La24La94Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i4Lar4La64LeA4La74La04Lat4LeKIOC2heC2guC2miDgt4Pgt4Qg4La44LeU4La74La04LavIOC3gOC3kOC2seC3kiDgtrTgt5Tgtq/gt4rgtpzgtr3gt5Lgtpog4Lav4Lat4LeK4LatIOC2h+C2reC3lOC3heC2reC3iiDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i4Lat4Lat4LeK4LeAIOC2reC3k+C2u+C3lOC3gCDgtoXgtrbgtr0g4Laa4La74Lax4LeK4LaxIOC3hOC3nSDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IuC2reC2reC3iuC3gCDgtq3gt5Pgtrvgt5Tgt4Ag4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Tgt50g4La04Lav4LeK4Law4Lat4LeSIOC2seC3kuC2u+C3luC2tOC2miDgtpHgtprgtq3gt5Qg4LeE4LedIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzI0NzI4MTkxMTM4NzkzMTQ4NSI+IuC2reC2reC3iuC3gCDgtq3gt5Pgtrvgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzE2MTEzNjYwNzk1OTc2MDYwIj4i4Lat4Lat4LeK4LeAIOC2reC3k+C2u+C3lOC3gCDgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSIxMTQ4MTk4Nzg1OTM3NDg5MjY0Ij4i4Lat4Lat4LeK4LeAIOC2reC3k+C2u+C3lOC3gCDgtq/gt5Lgtpwg4LeE4LeQ4La74LeT4La4L+C3hOC3kOC2muC3kuC2veC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjY5MTc1NDk0MzcxMjk0MDExMzIiPiLgtq3gtq3gt4rgt4Ag4Lat4LeT4La74LeU4LeAIOC2r+C3kuC2nCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LeE4LedIOC3hOC3kOC2muC3kuC3heC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iMzkwNjAwNzgzMTE5Mjk5MDk0NiI+IuC2tOC3kuC2p+C3gOC2sSDgtofgtrjgtq3gt5Tgtrjgt4og4LeA4La9IOC2uOC2nCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSI1MzMxMzE4OTMxOTM3NDAyMDQwIj4i4La04LeS4Lan4LeA4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgt4Pgtprgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgtofgtrjgtq3gt5Pgtrjgtqcg4Lax4LeS4La64La44LeS4LatIOC2heC2guC2muC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La64LeZ4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtrTgt5Lgtqfgt4DgtrEg4LaH4La44Lat4LeU4La44LeKIOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiwg4Lax4LeQ4LeA4LatIOC3hOC3kOC2u+C3gOC3k+C2uCDgt4Tgt50g4LeA4LeQ4LeF4Laa4LeK4LeA4LeT4La4IOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlU21zIiBtc2dpZD0iODY3MzQ3MTc2ODk0Nzg5NTA4MiI+IuC2muC3meC2p+C3kiDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La94La24LeP4Lac4LeQ4Lax4LeT4La4IChTTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiJTTVMg4La04Lar4LeS4LeA4LeS4LapIOC2veC3kOC2tuC3k+C2uOC2pyDgt4Pgt4Qg4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4LeE4LeSIOC2reC3muC2u+C3lOC2uCDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaU4La24Lac4LeaIOC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtr3gt5Dgtrbgt5ngtrEg4La04Lar4LeS4LeA4LeS4LapIOC2heC2sOC3k+C2muC3iuC3guC2q+C2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeE4LeQ4Laa4LeS4LeA4LeT4La4IOC3gOC2sSDgtoXgtq3gtrssIOC2kuC3gOC3jyDgtpTgtrbgtqcg4Lax4Lec4La04LeZ4Lax4LeK4LeA4LePIOC2uOC2muC3jyDgtq/gt5Dgtrjgt5Pgtrjgtqfgtq8g4LeE4LeQ4Laa4LeSIOC3gOC3k+C2uOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVNbXMiIG1zZ2lkPSIxODIxMzE3MzQ0NjY4MjU3MDk4Ij4i4La04LeZ4LeFIOC2tOC2q+C3kuC3gOC3lOC2qSDgtr3gtrbgt4/gtpzgtrHgt4rgtrEgKE1NUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlTW1zIiBtc2dpZD0iNTMzMDE5NDM3MjYzMjEyMjYwIj4iTU1TIOC2tOC2q+C3kuC3gOC3kuC2qSDgt4Pgt5zgtrrgt48g4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC3g+C3hCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrrgt5ngtq/gt5Tgtrgg4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC2u+C2seC3lCDgtr3gtrbgtrEg4LaF4Lat4La7IOC2lOC2tuC2pyDgtr3gt5Dgtrbgt5TgtrEg4La04Lar4LeS4LeA4LeS4LapIOC2tOC3meC2seC3iuC3gOC3k+C2uOC3meC2seC3iiDgtq3gt5zgtrvgt4Dgtrgg4La44Laa4LePIOC2r+C3kOC2uOC3kuC2uiDgt4Tgt5Dgtprgt5Ig4La24LeAIOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtoXgtq/gt4Tgt4Pgt4og4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9IjE4MDM0Nzc2NjA4NDYyODgwODkiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LeA4LeS4Laa4LeP4LeB4LaxIOC2veC2tuC3jyDgtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iODQ4NTI0MDcwMjYyNDMxOTc0Ij4i4LeE4Lav4LeS4LeD4LeSIOC3gOC3kuC2muC3j+C3gSDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La94LeQ4La24LeT4La44LanIOC3g+C3hCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrTgtq/gt4rgtrDgtq3gt5Ig4La64LeZ4Lav4LeU4La44LeKIOC3gOC2veC2pyDgtrTgtrjgtqvgtprgt4og4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtoXgtq/gt4/gt4Ug4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iMTU5ODMyODg0MzYxOTY0NjE2NiI+IuC3g+C3meC2veC3iiDgtrTgt4rigI3gtrvgtqDgt4/gtrvgtqsg4La04Lar4LeS4LeA4LeS4LapIOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiLgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La64LanIOC2veC3kOC2tuC3lOC2q+C3lCDgt4Pgt5ngtr3gt4og4LeA4LeS4Laa4LeP4LeB4LaxIOC2tOC2q+C3kuC3gOC3kuC2qSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tuC2pyDgt4Tgtq/gt5Lgt4Pgt5Ig4LaF4LeA4LeD4LeK4Lau4LeP4LeA4Lax4LeKIOC2tOC3kuC3heC3kuC2tuC2syDgtoXgtrHgtq3gt5Tgtrvgt5Qg4LaH4Laf4LeA4LeT4La44LanIOC3g+C3meC2veC3iiDgt4Dgt5Lgtprgt4/gt4HgtrEg4La04Lar4LeS4LeA4LeS4LapIOC2h+C2reC3kOC2uOC3iiDgt4Pgt4rgtq7gt4/gtrHgt4Dgtr0g4LeD4LeS4LanIOC2uuC3gOC2seC3lCDgtr3gtrbgtrrgt5IuIOC3hOC2r+C3kuC3g+C3kiDgt4Pgt5ngtr3gt4og4LeA4LeS4Laa4LeP4LeB4LaxIOC2veC3kOC2tuC3meC2sSDgtoXgt4Dgt4Pgt4rgtq7gt4/gt4Dgtprgtq/gt5MsIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44Laf4LeS4Lax4LeKIOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrrgtqcg4Laa4LeP4La74LeK4La6IOC3g+C3j+C2sOC2seC2uuC2pyDgt4Tgt50g4Laa4LeK4oCN4La74LeS4La64Laa4La74Lar4La64LanIOC2tuC3j+C2sOC3jyDgt4Pgt5Lgtq/gt5Tgt4Dgt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFNtcyIgbXNnaWQ9IjU2MDA4MzA2MTIxNDc2NzE1MjkiPiJTTVMg4La04Lar4LeS4LeA4LeS4LapIOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRTbXMiIG1zZ2lkPSI3MDk0NzI5Mjk4MjA0OTM3NjY3Ij4iU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtrbgtr3gt4/gtrTgt5zgtrvgt5zgtq3gt4rgtq3gt5Qg4Lax4Lec4LeA4LeWIOC2tOC3iuKAjeC2u+C2reC3kuC2teC2vSDgtoXgtq3gt4og4LeA4LeS4La6IOC3hOC3kOC2mi4g4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtpTgtrbgtpzgt5og4Lat4LeE4LeA4LeU4La74LeU4LeA4Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La64LeQ4LeA4LeT4La4IOC2uOC2n+C3kuC2seC3iiDgtpTgtrbgtpzgt5og4La44LeU4Lav4La94LeKIOC3gOC3kOC2uiDgtprgtr0g4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9Ijg3MTM4ODkxMDUzMDU5NDMyMDAiPiLgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LeD4LeS4Lav4LeU4LeA4LeT4La4IOC3hOC2u+C3hOC3jyDgtrTgt4rigI3gtrvgtq3gt5LgtqDgt4/gtrsg4La64LeQ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9IjcxMDc2NDg1NDg0Njg3Nzg3MzQiPiLgtrTgt5Dgtrjgt5Lgtqvgt5ngtrEg4LaH4La44Lat4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LaU4LeD4LeK4LeD4LeaIOC2tOC3iuKAjeC2u+C2reC3kuC2oOC3j+C2uyDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4og4LeE4LeD4LeU4La74LeU4LeA4LeT4La44LanIOC3gOC3meC2seC2reC3iiDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtongtr3gt4rgtr3gt5Pgtrjgt4og4La64LeQ4LeA4LeT4La44LanLCDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTbXMiIG1zZ2lkPSI4NzQ1MDg2NTcyMjEzMjcwNDgwIj4i4LaU4La24Lac4LeaIOC2tOC3meC3hSDgtrTgtqvgt5Lgt4Dgt5Tgtqkg4Laa4LeS4La64LeA4Lax4LeK4LaxIChTTVMg4LeE4LedIE1NUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4i4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgt4Tgt50gU0lNIOC2tOC2reC3miDgtobgtqDgtrrgtrHgtrog4Laa4La7IOC2h+C2reC3kiBTTVMg4La04Lar4LeS4LeA4LeS4LapIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC3hOC3nSDgt4Dgt5Lgt4Hgt4Dgt4/gt4Pgtq/gtrrgt5Ig4La24LeA4LeS4Lax4LeKIOC2reC3nOC2u+C3gOC2uCDgt4Pgt5Lgtrrgtr3gt5QgU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La44LeZ4La44Lac4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjk1OTY3NTMzNDU3MjQwNTUwIj4i4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgt4Tgt50gU0lNIOC2tOC2reC3miDgtobgtqDgtrrgtrHgtrog4Laa4La74LaxIOC2veC2ryBTTVMg4La04Lar4LeS4LeA4LeS4LapIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC3hOC3nSDgt4Dgt5Lgt4Hgt4rgt4Dgt4/gt4Pgtq/gt4/gtrrgt5Mg4La24LeA4LeS4Lax4LeKIOC2reC3nOC2u+C3gOC2uCDgt4Pgt5Lgtrrgtr3gt5QgU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La44LeZ4La44Lac4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTbXMiIG1zZ2lkPSIzMjE2OTUwNDcyNjM2MjE0Nzc0Ij4i4LaU4La24Lac4LeaIOC2muC3meC2p+C3kiDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LeD4LaC4LeD4LeK4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uCAoU01TIOC3hOC3nSBNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiLgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC3hOC3nSBTSU0g4La04Lat4LeaIOC2nOC2tuC2qeC3jyDgtprgtrsg4LaH4Lat4LeSIFNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LeA4LeZ4LatIOC2veC3kuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtpTgtrbgtpzgt5og4La04Lar4LeS4LeA4LeS4LapIOC2uOC2muC3jyDgtq/gt5Dgtrjgt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2ODY2ODcwOTA1MjMyODU2NyI+IuC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LeE4LedIFNJTSDgtrTgtq3gt5og4LaG4Lag4La64Lax4La6IOC2muC2u+C2sSDgtr3gtq8gU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtr3gt5Lgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LaU4La24Lac4LeaIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrjgtprgt48g4Lav4LeQ4La44LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+IuC2tOC3meC3hSDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La94La24LeP4Lac4LeQ4Lax4LeT4La4IChXQVApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiJXQVAg4La04Lar4LeS4LeA4LeS4LapIOC2veC3kOC2tuC3k+C2uOC2pyDgt4Pgt4Qg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeSIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uuC3meC3hOC3kiDgtpTgtrbgt4Ag4LaS4LeA4LeP4LanIOC2tOC3meC2seC3iuC3gOC3k+C2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LaU4La24LanIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrHgt5Lgtrvgt5Pgtprgt4rgt4Lgtqvgtrrgtqcg4LeE4LedIOC2uOC3kOC2muC3k+C2uOC2pyDgt4Tgt5Dgtprgt5Lgtrrgt4/gt4Ag4LaH4Lat4LeU4LeF4Lat4LeKIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRhc2tzIiBtc2dpZD0iNjQ2NjA5NTM5NjYyMzkzMzkwNiI+IuC2sOC3j+C3gOC2seC2uiDgt4DgtrEg4La64LeZ4Lav4LeU4La44LeKIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+IuC2r+C3kOC2seC2pyDgt4Pgt4Qg4La44LeR4LatIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgt4/gtrvgt4rgtrrgtrrgtrHgt4og4La04LeS4LeF4LeS4La24LazIOC3gOC3kuC3g+C3iuC2reC2u+C3j+C2reC3iuC2uOC2miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeD4Lec4La64LePIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La6IOC2muC3lOC2uOC2sSDgtrrgt5ngtq/gt5Tgtrjgt4og4LaL4La04LeP4LaC4Lac4La64LeaIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgtrvgtrHgt4rgtrHgt5rgtq8g4La64LaxIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LeD4Lec4La64LePIOC2nOC3kOC2seC3k+C2uOC2pyDgtongtqkg4Lav4LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSI3MTE0MjU1MjgxOTQ0MjExNjgyIj4i4La04La74LeS4LeB4LeT4La94Laa4La64Lax4LeKIOC2heC2reC2uyDgtoXgtrHgt4rgtq3gtrvgt4rgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJhY3RBY3Jvc3NVc2VycyIgbXNnaWQ9IjM2NDY3MDk2MzYyMzM4NTc4NiI+IuC2i+C2tOC3j+C2guC2nOC2uuC3miDgt4Dgt5Lgt4Dgt5LgtrAg4La04La74LeS4LeB4LeT4La94Laa4La64Lax4LeKIOC3hOC2u+C3hOC3jyDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4DgtrHgt4og4Lav4LeQ4Laa4LeK4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4og4LaF4Lat4La7IOC2huC2u+C2muC3iuC3guC3j+C3gCDgtprgtqngtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4LapIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMjU2NzczNDI4NTU0NTA3NDEwNSI+IuC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC2seC3iiDgtoXgtq3gtrsg4LaF4Lax4LeK4Lat4La74LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kyDgt4Dgt5Pgtrjgtqcg4LeD4La44LeK4La04LeW4La74LeK4LarIOC2tuC2veC2tOC2reC3iuKAjeC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMzc2ODQxMzY4Mzk1NTAyMzY2Ij4i4La04La74LeS4LeB4LeT4La94Laa4La64Lax4LeKIOC3hOC2u+C3hOC3jyDgt4Pgt5Lgtq/gt5Qg4Laa4LeFIOC3hOC3kOC2muC3kiDgt4Pgt5Lgtrrgtr3gt5Qg4LaF4Lax4LeK4Lat4La74LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3jyDgt4Dgtr3gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZVVzZXJzIiBtc2dpZD0iMTY3NjE1MDkxMTY3MjI4MjQyOCI+IuC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC2seC3iiDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNlcnMiIG1zZ2lkPSI4NDA5MzA2NjY3NjQ1MzU1NjM4Ij4i4LeA4LeS4LeD4LeK4Lat4La7IOC2veC2tuC3jyDgtpzgt5DgtrHgt5PgtrgsIOC2seC3kuC2u+C3iuC2uOC3j+C2q+C2muC2u+C2q+C2uiwg4La44Laa4LeP4Lav4LeQ4La44LeT4La4IOC2h+C2reC3lOC3heC3lCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4og4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La64LanIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjYyMjk0Njg2NzQ3NTM1Mjk1MDEiPiLgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr0g4Lat4Lec4La74Lat4LeU4La74LeUIOC3g+C3nOC2uuC3jyDgtr3gtrbgt4/gtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXREZXRhaWxlZFRhc2tzIiBtc2dpZD0iMTUzODI0NzQxNDQwNzE3NTk5Ij4i4Lav4LeQ4Lax4LanIOC3g+C3hCDgtrjgt5Hgtq3gtpog4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC3j+C2u+C3iuC2uuC2uuC2seC3iiDgtrTgt5Lgt4Xgt5LgtrbgtrMg4LeA4LeS4LeD4LeK4Lat4La74LeP4Lat4LeK4La44LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtoXgtrHgt5ngtprgt5Tgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2tOC3kuC3heC3kuC2tuC2syDgtrTgt5Tgtq/gt4rgtpzgtr3gt5Lgtpog4Lat4Lec4La74Lat4LeU4La74LeUIOC3g+C3nOC2uuC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LaJ4LapIOC2reC3kuC2tuC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9IjIwMTg1NzU1MjY5MzQ0MjI3NzkiPiLgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2uuC3meC2r+C3lOC2uOC3iiDgtrHgt5Dgt4Dgtq0g4LaF4Lax4LeU4La04LeS4LeF4LeS4LeA4LeZ4La94LanIOC3g+C3kOC2muC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9Ijc3MzQyMTc3NTQ4Nzc0MzkzNTEiPiLgtrTgt5ngtrvgtrbgt5Lgtrjgtqcg4LeE4LedIOC2tOC3g+C3lOC2tuC3kuC2uOC2pyDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4og4Lac4LeZ4Lax4La64LeP4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4LaG4Lav4LeP4Lax4La64Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtrrgt5ngtq/gt5Tgtrgg4La44LeZ4La6IOC3g+C3kuC2r+C3lOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlbW92ZVRhc2tzIiBtc2dpZD0iNjgyMTUxMzQwMTg3MDM3NzQwMyI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtrDgt4/gt4DgtrHgtrog4Lax4LeA4Lat4LeK4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVtb3ZlVGFza3MiIG1zZ2lkPSIxMzk0NzE0MzUyMDYyNjM1NDkzIj4i4Laa4LeP4La74LeK4La64La64Lax4LeKIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeEIOC2kuC3gOC3j+C2uuC3meC3hOC3kiDgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4LeQ4Lat4LeSIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Tgt5Dgt4Pgt5Lgtrvgt5Pgtrgg4La24LeP4Law4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY3Rpdml0eVN0YWNrcyIgbXNnaWQ9IjczOTExOTEzODQwMjczMDMwNjUiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4og4LaF4Lan4LeK4Lan4LeSIOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY3Rpdml0eVN0YWNrcyIgbXNnaWQ9IjE2MTU4ODE5MzMwMzQwODQ0NDAiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2sOC3j+C3gOC2seC2uiDgt4DgtrEg4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC2heC2p+C3iuC2p+C3kiDgt4Dgtr3gtqcg4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uOC2pywg4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pywg4LeD4LeEIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4LeE4LeQ4LeD4LeS4La74LeT4La4IOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44Lac4LeS4Lax4LeKIOC2tuC3j+C2sOC3jyDgt4Dgt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9IjI5MTg3NjgyMzgwNDUyMDY0NTYiPiLgtpXgtrHgt5Hgtrgg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Laa4LeKIOC2heC2u+C2ueC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSI5OTc4MjM2OTUzNDM1ODQwMDEiPiLgtoXgt4Dgt4Pgtrsg4LaG4La74Laa4LeK4LeC4LeP4LeAIOC3hOC3nSDgtrrgt5Dgt4Dgt5Tgtrjgt4og4Lat4Lat4LeK4LeA4La64LeZ4Lax4LeKIOC2reC3nOC2u+C3gOC2uCDgtpXgtrHgt5Hgtrgg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Laa4LeKIOC2huC2u+C2uOC3iuC2tyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRTY3JlZW5Db21wYXRpYmlsaXR5IiBtc2dpZD0iNjk3NTM4NzExODg2MTg0MjA2MSI+IuC2reC3kuC2uyDgtpzgt5Dgt4XgtrTgt5Tgtrgg4LeD4LeQ4Laa4LeD4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5MjA0MzYxODY5MzkxNzM3NCI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4Lat4LeS4La7IOC2nOC3kOC2veC2tOC3lOC2uOC3iiDgtrjgt4/gtq/gt5Lgtr3gt5Lgtrog4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC3hOC3kOC3g+C3kuC2u+C3k+C2uCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2muC3kOC2qeC3kuC2uiDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXREZWJ1Z0FwcCIgbXNnaWQ9IjMwMjIxMDcxOTg2ODY1ODQwNTIiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4LeS4Lav4Lec4LeD4LeK4Laa4La74Lar4La6IOC3g+C2tuC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXREZWJ1Z0FwcCIgbXNnaWQ9IjQ0NzQ1MTI0MTYyOTkwMTMyNTYiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44Laa4LeKIOC3g+C2s+C3hOC3jyDgtrHgt5Lgtq/gt5zgt4Pgt4rgtprgtrvgtqvgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5LgtrHgt4/gt4Eg4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQxNjIwOTIxODUxMjQyMzQ0ODAiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4LeD4LaC4Lav4La74LeK4LeB4LaaIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQzNzIyMjM4NzMxNTQyOTYwNzYiPiLgtrTgt5ngtq/gt5ngt4Pgt5Lgtrog4LeE4LedIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtoXgtprgt5Tgtrvgt5Qg4La04LeK4oCN4La74La44LeP4Lar4La6IOC3gOC3kOC2seC3kiDgtrTgt4Dgtq3gt5LgtrEg4LeA4LeS4Lax4LeK4oCN4La64LeP4LeD4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9lbmFibGVDYXJNb2RlIiBtc2dpZD0iNTY4NDUwNDA1ODE5MjkyMTA5OCI+IuC2uOC3neC2p+C2u+C3iiDgtrvgtq4g4LaG4Laa4LeP4La74La6IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19lbmFibGVDYXJNb2RlIiBtc2dpZD0iNDg1MzE4NzQyNTc1MTQxOTQ2NyI+IuC2muC3j+C2u+C3iiDgtobgtprgt4/gtrvgtrog4LeD4La24La9IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iMzkxNDAyNjY4NzQyMDE3NzIwMiI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeQ4LeD4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSI0NTkzMzUzMjM1OTU5NzMzMTE5Ij4i4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSDgtrTgt4Pgt5Tgtrbgt5Lgtrjgt4og4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeSIOC2heC3gOC3g+C2seC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4Law4LeP4LeA4Lax4La6IOC2seC3kOC3gOC2reC3k+C2uOC2pyDgtrjgt5ngtrog4LeE4Lea4Lat4LeU4LeA4Laa4LeKIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iMjMyOTYyNzQyODgzMjA2NzcwMCI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4La24La94LeZ4Lax4LeKIOC2seC3gOC2reC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iNTI1MzE1NzI5NjE4Mzk0MDgxMiI+IuC2uuC3meC2r+C3lOC2uOC2pyDgtrbgtr3gt5ngtrHgt4og4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtrHgt5Dgt4Dgtq3gt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlQmFjayIgbXNnaWQ9IjY1MjkzNTIwNDA3MjU4NDYxNiI+IuC2uuC3meC2r+C3lOC2uCDgt4Dgt5Dgt4Pgt5Pgtrjgtqcg4La24La9IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlQmFjayIgbXNnaWQ9IjM4OTIyOTU4MzA0MTk1MTM2MjMiPiLgtrHgt5Dgt4Dgtq3gt5Pgtrjgtqcg4La04LeZ4La74La24LeS4La44LeaIOC2h+C2reC3kiDgtpXgtrHgt5Hgtrgg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Laa4LeKIOC2tuC2veC3meC2seC3iiDgtrHgt5Dgt4Dgtq3gt5Pgtrjgtqcg4LeD4LeEIOC2tOC3kuC2p+C3lOC2tOC3g+C2pyDgtrrgt4/gtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZHVtcCIgbXNnaWQ9IjE2ODE3OTk4NjI0Mzg5NTQ3NTIiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2reC2reC3iuC3gOC2uiDgt4Pgt5zgtrrgt48g4La94La24LePIOC2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2R1bXAiIG1zZ2lkPSIxNzc4Mjk5MDg4NjkyMjkwMzI5Ij4i4La04Lav4LeK4Law4Lat4LeS4La64LeaIOC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtq3gtq3gt4rgt4Dgtrog4La94LeQ4La24LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgt4Dgt5TgtrHgt4og4LeD4LeP4La44LeP4Lax4LeK4oCN4La64La64LeZ4Lax4LeKIOC2t+C3j+C3gOC3kuC2rSDgtrHgt5zgtprgtrvgtrEg4LeA4LeS4LeA4LeS4Law4Lat4LeK4LeA4La64Laa4LeS4Lax4LeKIOC2uuC3lOC2reC3iiDgtrTgt5Tgtq/gt4rgtpzgtr3gt5Lgtpog4LeD4LeEIOC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Pgt5zgtrrgt48g4La94La24LePIOC2nOC2rSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjgwMjI1ODg2MDg5OTQ1ODk5MzgiPiLgtq3gt5Lgtrsg4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC3g+C3nOC2uuC3jyDgtr3gtrbgt4/gtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjMxOTMyNjkwNjk0Njk3MDAyNjUiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4Laa4LeA4LeU4LeF4LeU4LeA4LaaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtprgt4Dgt5Tgt4Xgt5Qg4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uCDgt4Pgt4Qg4La44LeU4La74La04Lav4La6IOC3hOC3kOC2uyDgtpLgt4Dgt4/gtrrgt5ngt4Tgt5Ig4La04LeZ4LeFIOC2tOC2u+C3kuC2muC3iuC3guC3jyDgtprgt5Lgtrvgt5Pgtrgg4LeD4LeS4Lav4LeU4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMjMxMjYxMjEzNTEyNzMxMDI1NCI+IuC2tOC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3j+C3gOC2uiDgtq3gt4/gt4Dgtprgt4/gtr3gt5Lgtprgt4Ag4LeD4La24La9IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjgwNzk0NTYyOTMxODI5NzU0NjQiPiLgtovgtrTgt4/gtoLgtpzgtrog4LeA4LeZ4LatIOC2tOKAjeC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3j+C3gCDgtq3gt4/gt4Dgtprgt4/gtr3gt5Lgtprgt4Ag4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La04La74LeS4LeB4LeT4La94LaaIOC2heC3gOC2sOC3j+C2seC2uuC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrTigI3gt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Ag4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9Ijg1MzIyOTUxOTkxMTI1MTkzNzgiPiLgtq3gt5Lgtrsg4Lat4Lec4La74Lat4LeU4La74LeUIOC3g+C3nOC2uuC3jyDgtr3gtrbgt4/gtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9IjQ5OTg4MzYzNzA0MjQxODY4NDkiPiLgtprgt4Dgt5Tgt4Xgt5Qg4Laa4LeF4La44Lax4LeP4Laa4La74LeUIOC2uOC2nOC3kuC2seC3iiDgtprgt4Dgt5Tgt4Xgt5Tgt4Ag4Lac4LeQ4LaxIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Pgt5zgtrrgt48g4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4La04Lav4LeK4Law4Lat4LeSIOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4Laa4LeQ4La44Lat4LeSIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtr3gtrbgt48g4Lac4LatIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4Njc1NTM1NjQ4ODA3NDI3Mzg5Ij4i4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKIOC2tOC3meC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4MDA2MjM2MzE1ODg4MzQ3NjgwIj4i4La04LeS4Lan4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrTgt5ngtrsg4LeD4LeS4La64La94LeUIOC2tOC2u+C3kuC3geC3k+C2veC2miDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4rgt4Dgtr0g4La04LeK4oCN4La74LeA4LeP4LeE4La64Laa4LeKIOC2tOC3meC2u+C3k+C2uOC2pyDgtrrgt5zgtq/gt48g4Lac4Lax4LeK4Lax4LePIOC2huC2r+C3j+C2sSDgtrTgt5ngtrvgt5Pgtrjgtprgt4og4La94LeS4La64LeP4La04Lav4LeS4LaC4Lag4LeSIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La04La74LeS4LeB4LeT4La94LaaIOC2uOC3kOC2r+C3kuC3hOC2reC3iiDgt4Dgt5Pgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2tOC2r+C3iuC2sOC2reC3kiBVSSDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI1OTczNjI2NzM4MTcwNjE4Nzc1Ij4i4Lav4La74LeK4LeB4Lax4La6IOC3gOC3kuC3geC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI3MTIxMjM1Njg0NTE1MDAzNzkyIj4i4Lav4LeD4LeU4Lax4LeaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgt4Dgt5Lgt4Hgt4/gtr0g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtofgtq3gt5Dgtrjgt4og4LeA4LeS4LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4osIOC2i+C2tOC3j+C2guC2nOC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeFIOC2seC3nOC3hOC3kOC2muC3kiDgtrbgt4Dgtqcg4La04Lat4LeKIOC2muC2u+C2uOC3kuC2seC3iiDgtq/gt4Pgt5TgtrHgt5og4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC3gOC3meC2seC3g+C3iiDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2h1dGRvd24iIG1zZ2lkPSI3MTg1NzQ3ODI0MDM4OTA5MDE2Ij4i4LaF4LapIOC3gOC3geC2uuC3meC2seC3iiDgt4Dgt5Dgt4Tgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaHV0ZG93biIgbXNnaWQ9IjcwNDY1MDA4Mzg3NDYyOTE3NzUiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4og4Laa4LeF4La44Lax4LeP4Laa4La74LeUIOC3gOC3kOC3hOC3k+C2uOC3miDgtq3gtq3gt4rgt4Dgtrrgtqcg4Lav4La44Lax4LeK4LaxLiDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4LeA4LeQ4LeE4LeT4La44Laa4LanIOC2tOC2reC3iiDgtrHgt5zgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI0MTM4NjA4NjEwNzE3NDI1NTczIj4i4La64LeZ4Lav4LeU4La44LeKIOC2uOC3j+C2u+C3lCDgt4Dgt5Pgtrgg4LeA4LeQ4LeF4Laa4LeK4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iODI2MjE5NTgwMjU4MjI1NTAyMSI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgtprgt4og4LeA4LeZ4LatIOC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC3j+C3gCDgtrjgt4/gtrvgt5Qg4LeA4LeT4La4IOC3gOC3heC2muC3iuC3gOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjI1Mzc5MjIzMTE0MTE1NDYwMTYiPiLgtrTgt4Dgtq3gt5LgtrEg4La64LeZ4Lav4LeU4La44LeaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtr3gtrbgt4/gtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSI4MTUzNjUxNDM0MTQ1MTMyNTA1Ij4i4Lat4LeS4La74La64LeaIOC2tOC3meC2u+C2tuC3kuC2uCDgtq3gt5Tgt4Ug4Lat4LeS4La24LeZ4LaxIOC2r+C3kOC2seC3iiDgtrTgt4Dgtq3gt4rgtrHgt48g4La64LeZ4Lav4LeU4La44LeaIOC3g+C3hCDgt4Pgt5rgt4Dgt4/gt4Dgtr0g4La04Lee4Lav4LeK4Lac4La94LeS4LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4Lav4La74Lax4LeK4Lax4LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ydW5TZXRBY3Rpdml0eVdhdGNoZXIiIG1zZ2lkPSI4OTIyMzkwOTQ4NjcxODI2NTYiPiLgt4Pgt5Lgtrrgtr3gt5Qg4La64LeZ4Lav4LeU4La44LeKIOC2r+C3kuC2uuC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgt4og4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC3g+C3hCDgtrTgt4/gtr3gtrHgtrog4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iNjAwMzYwMzE2MjU3ODU3NzQwNiI+IuC2tOC2r+C3iuC2sOC2reC3kuC2uiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4og4Lav4LeS4La64Lat4LeKIOC2muC2u+C2seC3iuC2seC3miDgtprgt5ngt4Pgt5rgtq/gt5Dgtrrgt5Ig4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La64LanIOC3g+C3hCDgtrTgt4/gtr3gtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44Lac4LeS4Lax4LeKIOC2tOC2r+C3iuC2sOC2reC3kuC2uiDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqvgtrrgt5ngtrHgt4rgtrgg4LeD4La44LeK4La44LeU4Lat4LeS4La64Laa4LanIOC2keC3heC2ueC3kuC2uiDgt4Tgt5DgtpouIOC3gOC2u+C3iuC2sOC2seC2uiDgt4PgtrPgt4Tgt48g4La04La44Lar4Laa4LeKIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4LaF4LeA4LeB4LeK4oCN4La6IOC3gOC3meC2uuC3kiwg4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeSIOC3gOC3kuC2p+C3meC2muC2reC3iiDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSIyNTc2MzMzNDM0ODkzNTMyNDc1Ij4i4La04LeQ4Laa4Lea4LaiIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgt5og4La04LeK4oCN4La74Lag4LeP4La74Lar4La64Laa4LeKIOC2uuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtrTgt5Dgtprgt5rgtqLgtrrgtprgt4og4LaJ4LeA4Lat4LeK4Laa4Lec4LanIOC2h+C2reC3kiDgtrbgt4Dgtqcg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44Laa4LeKIOC3gOC3kuC2muC3j+C3geC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4g4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgtoXgtrHgt5ngtprgt5Tgtq3gt4og4La64LeZ4Lav4LeU4La44Laa4LeKIOC2seC3kOC2reC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI1Njg5MDk1MDA5MDMwMzM2NTkzIj4iU01TLeC2veC3kOC2tuC3k+C2uCDgt4Dgt5Lgtprgt4/gt4HgtrEg4La64LeQ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI0MTUyMDM3NzIwMDM0MzY1NDkyIj4iU01TIOC2tOC2q+C3kuC3gOC3kuC2qeC2uuC2muC3iiDgt4Tgtrvgt4Tgt48g4La94LeQ4La24LeU4Lar4LeUIOC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC2muC3iiDgtrTgt4rigI3gtrvgtqDgt4/gtrvgtqvgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2tOC3kOC2uOC3kuC2q+C3meC2sSBTTVMg4La04Lar4LeS4LeA4LeS4LapIOC3gOC2guC2oOC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4LatIOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+IldBUC1QVVNILeC2veC3kOC2tuC3k+C2uCDgt4Dgt5Lgtprgt4/gt4HgtrEg4La64LeQ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjQ3ODM0MDI1MjUwMzk0NDI3MjkiPiJXQVAgUFVTSCDgtrTgtqvgt5Lgt4Dgt5Tgtqngtrrgtprgt4og4La94LeQ4La24LeTIOC2h+C2reC3kiDgtrbgt4Dgtqcg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44Laa4LeKIOC3gOC3kuC2muC3j+C3geC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC2guC2oOC3j+C2muC3j+C2u+C3kyBNTVMg4La04Lar4LeS4LeA4LeU4LapIOC2veC3kOC2tuC3k+C2uOC3iiDgt4Tgt50g4Lax4LeS4LeE4Las4LeAIOC2leC2seC3keC2uCDgt4Dgt5ngtrbgt4og4La04LeS4Lan4LeU4LeA4LaaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4LeA4LeS4Lag4La94LeK4oCN4La64LeA4La94LeS4Lax4LeKIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5PgtrjgtqcsIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSIyNDUxODczNjY0MzYzNjYyNjY2Ij4i4Law4LeP4LeA4LaxIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kiDgtpzgtqvgtrEg4LeD4LeT4La44LePIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjczMTgwNjEzMTQwNDA4Nzk1NDIiPiLgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2i+C2tOC2u+C3kuC2uCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Ig4Lac4Lar4LaxIOC2tOC3j+C2veC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNTUwOTU4NTA3Nzk4Nzk2OTY1Ij4i4La04LeD4LeU4La24LeS4La44LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr3gtqcg4LeA4LeQ4LeD4LeT4La44LanIOC2tuC2veC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiLgtrTgt4Pgt5Tgtrbgt5Lgtrjgtqcg4La04LeS4LeA4LeS4LeD4LeZ4Lax4LeA4LeP4Lat4LeKIOC3g+C2uOC2n+C2uCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4og4Lax4LeQ4LeA4Lat4LeT4La4IOC2tOC3j+C2veC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Lgt4Pgt5rgtq3gt4og4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjI3ODk2MTA2NzM1MTQxMDMzNjQiPiLgtrbgt5Dgtqfgtrvgt5Ig4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjU4OTczNDY1ODI4ODI5MTUxMTQiPiLgt4Dgtrvgt4rgtq3gtrjgt4/gtrEg4La04LeE4LeFIOC2uOC2p+C3iuC2p+C2uOC3miDgtrbgt5Dgtqfgtrvgt5Lgtrog4La34LeP4LeA4LeS4Lat4LePIOC2r+C2reC3iuC2rSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4La74LaxIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5zgtrHgt4Dgt48g4Lav4LeQ4La64LeSIOC2nOC3kOC2sSDgt4Dgt5Lgt4Pgt4rgtq3gtrvgt4/gtq3gt4rgtrjgtpog4Lat4Lec4La74Lat4LeU4La74LeUIOC2nOC3kOC2sSDgtq/gt5DgtrEg4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQmF0dGVyeVN0YXRzIiBtc2dpZD0iMzcxOTY4OTc2NDUzNjM3OTU1NyI+IuC2tuC3kOC2p+C2u+C3kiDgt4PgtoLgtpvgt4rigI3gtrrgt4/gtrEg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjY4NjI4MTc4NTcxNzgwMjUwMDIiPiLgtpHgtprgtq3gt5Qg4Laa4La74Lac4Lax4LeK4Lax4LePIOC2veC2ryDgtrbgt5Dgtqfgtrvgt5Ig4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBcHBPcHNTdGF0cyIgbXNnaWQ9IjE1MDg3Nzk2ODc0MzY1ODU3NDQiPiLgtrrgt5ngtq/gt5Tgtrjgt5og4LeA4LeS4Laa4La94LeK4La0IOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2guC2miDgt4Pgt5zgtrrgt48g4La94La24LeP4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSI2MjQzODg3MDQxNTc3OTEyODc3Ij4i4LaR4Laa4Lat4LeUIOC2muC2u+C2nOC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeS4Lat4LeK4LeAIOC3g+C2guC2m+C3iuKAjeC2uuC3jyDgtr3gt5rgtpvgtrEg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtovgtrTgt4/gtoLgtpzgtrrgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2i+C2tOC3j+C2guC2nCDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUFwcE9wc1N0YXRzIiBtc2dpZD0iODgyOTA5NzM3Mzg1MTUyMTUwNSI+IuC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgtprgtr3gt4rgtrQg4LeD4LaC4Lab4LeK4oCN4La64LeP4LaC4LaaIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9IjUwNzg0NTk2NTk0NDAzNDgzIj4i4LaR4Laa4Lat4LeUIOC2muC2u+C2nOC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeS4Lat4LeK4LeAIOC3g+C2guC2m+C3iuKAjeC2uuC3jyDgtr3gt5rgtpvgtrEg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhY2t1cCIgbXNnaWQ9IjQ3MDAxMzAyMjg2NTQ1MzkyMCI+IuC2tOC2r+C3iuC2sOC2reC3kiDgtovgtrTgt4Pgt4rgtq4g4La04LeP4La94Lax4La6IOC2muC2u+C2seC3iuC2sSDgt4Pgt4Qg4Lax4LeQ4LeA4LatIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhY2t1cCIgbXNnaWQ9IjY5MTIyMzA1MjUxNDA1ODk4OTEiPiLgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgt5og4LaL4La04LeD4LeK4Lau4La6IOC3g+C3hCDgtovgtrTgtprgt4rigI3gtrvgtrgg4Lax4LeQ4LeA4LatIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uCDgtrTgt4/gtr3gtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjU1NTcwNzEzMjU4MDQ0NjkxMDIiPiLgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4LaL4La04LeD4LeK4Lau4La6IOC3hOC3nSDgtrjgt5ngt4Tgt5ngtrrgt5Tgtrjgt4og4Lax4LeQ4LeA4LatIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uCDgt4PgtrHgt4/gtq4g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjE3NDg3NjIxNzE2Mzc2OTk1NjIiPiLgtrTgt5bgtrvgt4rgtqsg4LaL4La04LeD4LeK4LauIOC2reC3hOC3gOC3lOC2u+C3lOC2muC3kuC2u+C3k+C2uOC3iiBVSSDgtrTgt5TgtrvgtrHgt4rgtrHgtqcg4LaL4La04Laa4La74Lar4La64LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC2muC3kuC3g+C3kuC2uCDgtrrgt5ngtq/gt5Tgtrjgtprgt4og4La34LeP4LeA4LeS4Lat4LePIOC2seC3nOC2muC2u+C2seC3lCDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9IjIxNDg1NjM2MjgxNDAxOTMyMzEiPiLgtoXgt4Dgt4Pgtrsg4Lax4Lec4La94Lat4LeKIOC2muC3gOC3lOC3heC3lOC3gCDgtq/gtrvgt4rgt4HgtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2tOC2r+C3iuC2sOC2reC3kiDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LaF4Lat4LeU4La74LeU4La44LeU4LeE4LeU4Lar4Lat4LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2tuC2veC3j+C2tOC3nOC2u+C3nOC2reC3iuC2reC3lCDgt4DgtrEg4Laa4LeA4LeU4LeF4LeUIOC2seC3kuC2u+C3iuC2uOC3j+C2q+C2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4La34LeP4LeA4LeS4Lat4La6IOC3g+C2s+C3hOC3jyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9IjM1NDMzNDc5ODA4Mzk1MTg2MTMiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2i+C2qeC3kuC2seC3iiDgtoXgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9Ijg1ODQ2NzgzODE5NzI4MjAxMTgiPiLgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeKIOC2uOC2rSDgt4Tgt50g4La04La74LeS4LeB4LeT4La94LaaIOC2heC2reC3lOC2u+C3lCDgtrjgt5Tgt4Tgt5Tgtqvgtq3gt4og4Laa4Lec4Lan4LeD4LeK4LeA4La9IOC2h+C2s+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LaR4La6IOC2lOC2tuC3miDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5og4LaH4Lat4LeSIOC2leC2seC3keC2uCDgtrrgt5ngtq/gt5Tgtrjgtpog4La44LeU4LeE4LeU4Lar4LatIOC3g+C2uOC2nCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeT4La44LanIOC3hOC3nSDgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeKIOC2nOC3kOC2sSDgtpTgtrbgtqcg4La04LeZ4Lax4LeZ4LaxIOC2huC2muC3j+C2u+C2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9IjI4MDUxMDMyNDExNTM5MDcxNzQiPiLgtpzgt53gtr3gt5Pgtrog4LeD4Lai4LeT4LeA4LaxIOC3gOC3muC2nOC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4i4LaV4Lax4LeR4La4IOC3gOC3meC2veC3j+C3gOC2miDgtrTgt5zgtq/gt5Qg4LeD4Lai4LeT4LeA4LeT4Laa4La74LarIOC3gOC3muC2nOC2uiAo4LeA4Lea4Lac4LeA4Lat4LeKIOC3hOC3nSDgtrjgtrHgt4rgtq/gtpzgt4/gtrjgt5Mg4LeD4Lai4LeT4LeA4LeT4Laa4La74LarKSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iMTI4NjUwNTcxNzA1MDEyMTM3MCI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtqfgt53gtprgtrEg4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiLgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrogWiDgtrTgtqfgt5LgtrTgt4/gtqfgt5Lgtrog4La44Laf4LeE4LeQ4La74La64La44LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtoXgtrrgt5Lgtq3gt5Ig4Lan4Led4Laa4Lax4LeKIOC2tOC2reC3iiDgtrHgt5Lgtrvgt4rgtrjgt4/gtqvgtrrgtqcg4LeD4LeEIOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Lgt4Pgt5rgtq3gt4og4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9IjQ3MDgxODExODQ0NDE4ODAxNzUiPiLgtq3gt5Lgtrvgtrog4Lax4LeS4LeB4LeK4Lag4La9IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9Ijg1NTg5MjM3ODkyMjI2NzAwNjQiPiLgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4Lat4LeS4La7IOC3g+C2guC2muC3iuKAjeC2u+C2uOC2q+C2uiDgt4PgtrPgt4Tgt48g4Lat4LeS4La74La6IOC2reC3j+C3gOC2muC3j+C2veC3kuC2muC3gCDgtrjgt5Tgtq/gt4Dgt5Lgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbmplY3RFdmVudHMiIG1zZ2lkPSIxMzc4NzQ2NTg0MDIzNTg2NjAwIj4i4La64Lat4LeU4La74LeUIOC3g+C3hCDgtrTgt4/gtr3gtrEg4La24Lec4Lat4LeK4Lat4La44LeKIOC2lOC2tuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4i4Lat4La44Lax4LeK4Lac4LeaIOC2huC2r+C3j+C2sSDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4ogKOC2uuC2reC3lOC2u+C3lCDgtpHgtrbgt5Lgtrjgt4ogLCDgtobgtq/gt5MgKSDgtoXgtrHgt5ngtprgt5Tgtq3gt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2t+C3j+C2u+C2r+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4Lan4LeQ4La24LeK4La94Lan4La6IOC2veC2tuC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1MzEyODA1NzU3MjMyNjI1MyI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LaR4LeE4LeSIOC2huC2r+C3j+C2sSDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4ogKOC2uuC2reC3lOC2u+C3lCDgtpHgtrbgt5Pgtrjgt4osIOC2uuC2seC3j+C2r+C3kuC2ui4pIOC2huC2r+C3kuC2uiDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtq3gt4rgtprgtrsg4Lac4LeQ4Lax4LeT4La4IOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjQ2OTQyODkwMDA0MTI0OTIzNCI+IuC2lOC2tiDgtqfgtrrgt5LgtrTgt4og4Laa4La74LaxIOC2r+C3meC2uiDgt4Pgt4Qg4LaU4La2IOC2nOC2seC3iuC2seC3jyDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4DgtrHgt4og4La04Lan4LeS4Lac4LatIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iODM4Nzc1NDkwMTY4ODcyODA0MyI+IuC2uOC3lOC2u+C2tOC2r+C2uiDgtqfgtrrgt5LgtrTgt4og4Laa4LeS4La74LeT4La4IOC3gOC3kOC2seC3kiDgtoXgtrHgt5ngtprgt5Tgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC3g+C2uOC2nyDgtoXgtrHgt4rgtq3gtrvgt4rgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4LeA4Lax4LeA4LeS4LanIOC2uuC2seC3j+C2r+C3kyDgtpTgtrYg4LaU4La24LaxIOC2uuC2reC3lOC2u+C3lCDgtq/gt5Dgtprgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC3g+C3muC2reC3iiDgtoXgtq/gt4/gt4Ug4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzM2MDA2NDYyMDIzMDUxNTc3NiI+IuC2huC2r+C3j+C2sSDgtprgt4rigI3gtrvgtrjgtrrgtprgt4og4LeA4LeZ4LatIOC2tuC2s+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMyNTA0NDAzMjI4MDcyODYzMzEiPiLgtobgtq/gt4/gtrEg4Laa4LeK4oCN4La74La44La6IOC2ieC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt5og4LaF4Lat4LeU4La74LeUIOC2uOC3lOC3hOC3lOC2q+C2reC2muC3iiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC2muC3kuC2u+C3k+C2uOC2pyDgtrDgt4/gtrvgtprgtrrgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Ig4LeA4LeS4Lan4LeZ4LaaIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI1MzU3NzMzOTQyNTU2MDMxNTkzIj4i4La04oCN4LeK4oCN4La74LeA4Lea4LeB4LeK4oCN4La64Lat4LePIOC3g+C3muC3gOC3j+C3gOC2muC3iiDgt4Dgt5ngtq0g4La24Lav4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNzAzNDYxNTkyODYwOTMzMTM2OCI+IuC2tOKAjeC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3jyDgt4Pgt5rgt4Dgt4/gt4Dgt5og4LaJ4LeE4LeFIOC2uOC2p+C3iuC2p+C2uOC3miDgtoXgtq3gt5Tgtrvgt5Tgtrjgt5Tgt4Tgt5Tgtqvgtq3gtqcg4La24LeQ4Laz4LeT4La44LanIOC2r+C2u+C2seC3iuC2seC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeaLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgt4Dgt5Lgtqfgtpog4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI4NDYyODE1MTc5NTcyNzQ4NzYxIj4i4La44LeU4Lav4LeK4oCN4La74LarIOC3g+C3muC3gOC3j+C3gOC2muC2pyDgtrbgtq/gt4rgtrAg4LeA4LeTIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI3OTYwMDY3NjIzMjA5MTExMTM1Ij4i4La44LeU4Lav4LeK4oCN4La74LarIOC3g+C3muC3gOC3j+C3gCDgtongt4Tgtr0g4La44Lan4LeK4Lan4La44LeaIOC2heC2reC3lOC2u+C3lCDgtrjgt5Tgt4Tgt5Tgtqvgtq3gtprgt4og4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgt5Lgtrvgt5Pgtrjgtqcg4Law4LeP4La74Laa4La64LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeSIOC3gOC3kuC2p+C3meC2miDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFByaW50U3Bvb2xlclNlcnZpY2UiIG1zZ2lkPSI2ODA3NzYyNzgzNzQ0MTI1OTU0Ij4i4La44LeU4Lav4LeK4oCN4La74LarIOC3g+C3muC3gOC3j+C3gOC2muC2pyDgtrbgtq/gt4rgtrAg4LeA4LeTIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNwb29sZXJTZXJ2aWNlIiBtc2dpZD0iMzY4MDU1MjI4NTkzMzMxODM3MiI+IuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgt4Pgt5rgt4Dgt4/gt4Ag4LaJ4LeE4La9IOC2uOC2p+C3iuC2p+C2uOC3miDgtoXgtq3gt5Tgtrvgt5Qg4La44LeU4LeE4LeU4Lar4Lat4Laa4LeKIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4LeS4La74LeT4La44LanIOC2sOC3j+C2u+C2muC2uuC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2muC3kuC3g+C3kiDgt4Dgt5Lgtqfgt5ngtpog4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROZmNTZXJ2aWNlIiBtc2dpZD0iMjc1MjczMTMwMDQxOTQxMDcyNCI+Ik5GQyDgt4Pgt5rgt4Dgt4/gt4Ag4LeA4LeZ4LatIOC2tuC3kOC2s+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmROZmNTZXJ2aWNlIiBtc2dpZD0iNjEyMDY0NzYyOTE3NDA2Njg2MiI+Ik5GQyDgtprgt4/gtqngt4og4La04Lat4LeKIOC2huC2r+C2u+C3iuC3geC2seC2uiDgtprgtrvgtrEg4La64LeZ4Lav4LeU4La44LeKIOC2u+C2s+C3gOC2seC2uuC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeT4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iNzM1ODM3ODQwMTkxNTI4NzkzOCI+IuC2tOC3meC3hSDgt4Pgt5rgt4Dgt4/gt4Dgtprgtqcg4La24Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iODE1MTk2ODkxMDk3Mzk5ODY3MCI+IuC2muC3meC2p+C3kiDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LeD4Lea4LeA4LeP4LeA4LaaICjgtovgtq/gt48uIFNwZWxsQ2hlY2tlclNlcnZpY2UpIOC2ieC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt5og4LaF4Lat4LeU4La74LeUIOC2uOC3lOC3hOC3lOC2q+C2reC2muC3iiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC2muC3kuC2u+C3k+C2uOC2pyDgtrDgt4/gtrvgtprgtrrgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Ig4LeA4LeS4Lan4LeZ4LaaIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjQ3MDg1OTYwMjExNjE0NzMyNTUiPiJWUE4g4LeD4Lea4LeA4LeP4LeA4Laa4LanIOC2tuC3kOC2s+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IlZQTiDgt4Pgt5rgt4Dgt4/gt4Ag4LaJ4LeE4La9IOC2uOC2p+C3iuC2p+C2uOC3miDgtoXgtq3gt5Tgtrvgt5Qg4La44LeU4LeE4LeU4Lar4Lat4Laa4LeKIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4LeS4La74LeT4La44LanIOC2sOC3j+C2u+C2muC2uuC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2muC3kuC3g+C3kiDgt4Dgt5Lgtqfgt5ngtpog4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i4La24LeS4Lat4LeU4La04LatIOC3gOC3meC2rSDgtrbgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IuC2tuC3kuC2reC3lOC2tOC2rSDgtongt4Tgtr0g4La44Lan4LeK4Lan4La44LeaIOC2heC2reC3lOC2u+C3lCDgtrjgt5Tgt4Tgt5Tgtqvgtq3gtprgt4og4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgt5Lgtrvgt5Pgtrjgtqcg4Law4LeP4La74Laa4La64LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeSIOC3gOC3kuC2p+C3meC2miDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IuC3gOC3kuC2ouC2pyDgt4Pgt5rgt4Dgt4/gt4Dgtprgtqcg4La24Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IuC3gOC3kuC2ouC2p+C3iiDgt4Pgt5rgt4Dgt4/gt4Ag4LaJ4LeE4La9IOC2uOC2p+C3iuC2p+C2uOC3miDgtoXgtq3gt5Tgtrvgt5Qg4La44LeU4LeE4LeU4Lar4Lat4Laa4LeKIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4LeS4La74LeT4La44LanIOC2sOC3j+C2u+C2muC2uuC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2muC3kuC3g+C3kiDgt4Dgt5Lgtqfgt5ngtpog4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiLgtovgtrTgt4/gtoLgtpwg4La04La74LeS4La04LeP4La94LaaIOC3g+C2uOC2nyDgtoXgtrHgt4rgtq3gtrvgt4rgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4i4LaL4La04LeP4LaC4LacIOC2tOC3j+C2veC2muC2uuC3jyDgt4Dgt5ngtq3gtqcg4LaF4La34LeS4La04LeK4oCN4La74LeP4La64La64Lax4LeKIOC2uuC3kOC3gOC3k+C2uOC2pyDgtrDgt4/gtrvgtprgtrrgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Ig4LeA4LeS4Lan4LeZ4LaaIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4i4LaL4La04LeP4LaC4LacIOC2tOC2u+C3kuC2tOC3j+C2veC2muC2uuC3meC2muC3iiDgtpHgtprgt4og4Laa4LeS4La74LeT4La4IOC3hOC3nSDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNTAyNTYwODE2NzcwOTk0MjQ4NSI+IuC2r+C2u+C2seC3iuC2seC3j+C2pyDgtovgtrTgt4/gtoLgtpwg4La04La74LeS4La04LeP4La94Laa4La64LeS4Lax4LeKIOC2keC2muC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeE4LedIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3mi4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr3gtqcg4Laa4LeS4LeD4LeS4Lav4LePIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMzNjU5NDc3MTcxNjM4NjY4NDQiPiLgtq3gt5Lgtrsg4Lav4LeS4LeB4LeP4Lax4Lat4LeS4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiLgtq3gt5Lgtrvgtrrgt5og4La34LeK4oCN4La74La44Lar4La6IOC2leC2seC3keC2uCDgt4Dgt5rgtr3gt4/gt4Dgtpog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4Lav4LePIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4DgtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iOTE3NTM3MTYxMzMyMjU2MjkzNCI+IuC2r+C2u+C3iuC3geC2muC2uuC3miDgt4Dgt5rgtpzgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjY4NjY1NjMyMzQyNzQxMDQyMzMiPiLgtrjgt5bgt4Pgt5Lgtprgtrrgt5og4LeE4LedIOC2p+C3iuKAjeC2u+C3kOC2muC3iuC2tOC3keC2qeC2uuC3miDgt4Dgt5rgtpzgtrog4LaV4Lax4LeR4La4IOC2uOC3nOC3hOC3nOC2reC2miDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4LaL4La04LeP4LaC4Lac4La64Lax4LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC2seC3lCDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRLZXlib2FyZExheW91dCIgbXNnaWQ9IjQ3Nzg3MzE3MDM2MDA5MDkzNDAiPiLgtrrgtq3gt5Tgtrvgt5Qg4La04LeU4LeA4La74LeUIOC2tOC3kuC2u+C3kuC3g+C3kOC2veC3kOC3g+C3iuC2uCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI4NDgwMDE2NzcxMTM0MTc1ODc5Ij4i4La64Lat4LeU4La74LeU4La04LeU4LeA4La74LeUIOC2uOC3lOC3hOC3lOC2q+C2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0NTM5MDAyOTkxOTQ3Mzc2NjU5Ij4i4La64LeZ4Lav4LeU4La44LeKIOC3gOC3meC2rSBMaW51eCDgt4PgtoLgtqXgt48g4La64LeQ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ4OTY5OTIwNzkxODI2NDkxNDEiPiLgtrTgt4Dgtq3gt5LgtrEg4LeD4LeS4La64La94LeUIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kiDgt4Dgt5ngtq0g4LeD4LeQ4La04La64LeU4La44LeKIOC3g+C2guC2peC3jyDgtongtr3gt4rgtr3gt4Dgt5Lgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4i4La64LeZ4Lav4LeU4La4IOC3g+C3kOC2uOC3gOC3kuC2p+C2uCDgtrDgt4/gt4DgtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTI1MTg5MjcyMzI5MDg2MTM3Ij4i4La44Lat4Laa4La64LeaIOC2tOC3gOC2reC3kuC2sSDgtpHgt4Tgt5Ig4Laa4Lec4Lan4LeD4LeKIOC2seC3nOC2seC3kOC3g+C3kyDgtrTgt5Dgt4Dgtq3gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La94LanIOC2uOC2reC2muC2uiDgt4Pgt5Pgtrjgt48g4Laa4LeS4La74LeT4La44LeZ4Lax4LeKIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtrTgtrjgt48g4Laa4LeS4La74LeT4La4IOC2uOC2nOC3kuC2seC3iiAg4La44LeZ4La44Lac4LeS4Lax4LeKIOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDM4NDc2MDA0NzUwODI3ODI3MiI+IuC2uuC3meC2r+C3lOC2uOC2pyDgtq3gtrgg4Laa4Lec4Lan4LeD4LeKIOC2uOC2reC2muC2uiDgtq3gt5Tgtr0g4Lax4Lec4La24LeS4Laz4LeT4LeAIOC2u+C2s+C3jyDgtrTgt4Dgtq3gt4rgt4Dgt4/gtpzgt5ngtrEg4La64LeP4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4La44Lax4LeK4Lav4Lac4LeP4La44LeTIOC2muC2u+C2uOC3kuC2seC3iiDgtoXgtrHgt5ngtprgt5Tgtq3gt4og4LaL4La04LeP4LaC4Lac4La64Lax4LeKIOC3g+C2s+C3hOC3jyDgtongtq3gt5Lgtrvgt5Ig4La44Lat4Laa4La6IOC3g+C3k+C2uOC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSIxODQzODUxMjk1Mzc3MDU5MzgiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSI3NDExNDgwMjc1MTY3MjA1MDgxIj4iQW5kcm9pZCDgtrTgt5Dgtprgt5rgtqIg4La44LeQ4Laa4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5Dgtq/gtpzgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2uOC3kOC2muC3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjI3NDEwOTE5MTg0NTg0Mjc1NiI+IuC2uuC3meC2r+C3lOC2uOC3miDgt4Dgt5ngtrHgtq3gt4og4Lav4Lat4LeK4LatIOC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSI0NjI1MzIzNjg0MTI1NDU5NDg4Ij4i4La04La74LeS4LeB4LeT4La94LaaIOC2r+C2reC3iuC2rSDgt4Tgt5Lgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2muC2pyDgtongtqkg4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjMxMjg2NjU1NzE4Mzc0MDg2NzUiPiLgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC3hOC3kOC2ueC3kuC2veC3kiDgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVDYWNoZUZpbGVzIiBtc2dpZD0iMzgxMjk5ODU5OTAwNjczMDE5NiI+IuC3hOC3kOC2ueC3kuC2veC3kiDgtpzgt5zgtrHgt5Qg4La44LeQ4Laa4LeT4La44LanIOC2heC3gOC3g+C2uyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iNzQ3MjkyMTc2ODM1Nzk4MTk4NiI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtobgtqDgtrrgtrHgtrrgt5og4LaJ4LapIOC2tOC3iuKAjeC2u+C2uOC3j+C2q+C2uiDgtrjgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9IjM5MjEwNjgxNTQ0MjA3MzgyOTYiPiLgtrrgt5ngtq/gt5Tgtrjgtprgtqcg4LaR4LeE4LeSIOC2muC3muC2reC2uiwg4Lav4Lat4LeK4LatIOC3g+C3hCDgt4Tgt5Dgtrngt5Lgtr3gt5Ig4La04LeK4oCN4La74La44LeP4LarIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iMjE5OTEyODQ4MjgyMDMwNjkyNCI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtprgt5ngt4Xgt5LgtrHgt4rgtrgg4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLgtrHgt4Ag4LeE4LedIOC2uuC3j+C3gOC2reC3iuC2muC3j+C2veC3kuC2sSDgtprgtrvgtrEg4La94LavIEFuZHJvaWQg4La04LeQ4Laa4Lea4Lai4La64Lax4LeKIOC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4La24La94LeD4LeE4LeS4LatIOC2heC3gOC3g+C2uyDgtq3gt5PgtrHgt4rgtq/gt5Qg4LeD4La44LacIOC2seC3gCDgtrrgt5ngtq/gt5Tgtrjgt4og4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtq3gt5Lgtrbgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcENhY2hlIiBtc2dpZD0iNzQ4NzI3OTM5MTcyMzUyNjgxNSI+IuC2uuC3meC2r+C3lOC2uOC3miDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4LeE4LeQ4La54LeS4La94LeSIOC2r+C2reC3iuC2rSDgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTc0NjQwODcxOTQ1NDM0NTY1Ij4i4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSDgt4Tgt5Dgtrngt5Lgtr3gt5Ig4Lax4LeP4La44LeP4LeA4La94LeSIOC2reC3lOC3hSDgtofgtq3gt5Ig4Lac4Lec4Lax4LeUIOC2uOC3kOC2muC3k+C2uOC3meC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4Lan4LeQ4La24LeK4La94LanIOC2huC2oOC2uuC2seC2uiDgtrHgt5Lgtq/gt4Tgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uOC2nOC3kuC2seC3iiDgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2kuC3gOC3j+C2uuC3miDgtq/gtq3gt4rgtq0g4Lax4LeQ4LeA4LatIOC2veC2tuC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LaF4LeA4LeB4LeK4oCN4La6IOC3gOC2sSDgtrHgt5Lgt4Pgt48sIOC2kuC3gOC3j+C2uuC3miDgtobgtrvgtrjgt4rgtrfgtrog4Lat4LeA4Lat4LeKIOC3g+C3meC2uOC3kuC2seC3iiDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgtqcg4LaJ4LapIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjQ1OTQ0MTAyMTk1NjQzNjc3OSI+IuC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4LeE4LeQ4La54LeS4La94LeSIOC2seC3j+C2uOC3j+C3gOC2veC3kiDgtq3gt5Tgt4Ug4LaH4Lat4LeSIOC2nOC3nOC2seC3lCDgtrjgt5Dgtprgt5Pgtrjgt5ngtrHgt4og4La64LeZ4Lav4LeU4La44LanIOC2r+C3lOC2u+C2muC2ruC2sSDgtobgtqDgtrrgtrHgtrog4Lax4LeS4Lav4LeE4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtpLgt4Dgt4/gtrrgt5og4Lav4Lat4LeK4LatIOC2seC3kOC3gOC2rSDgtr3gtrbgt48g4Lac4LeQ4Lax4LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uiDgt4DgtrEg4Lax4LeS4LeD4LePLCDgtpLgt4Dgt4/gtrrgt5og4LaG4La74La44LeK4La34La6IOC2reC3gOC2reC3iiDgt4Pgt5ngtrjgt5LgtrHgt4og4LeD4LeS4Lav4LeU4LeA4LeT4La44LanIOC2ieC2qSDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3ZlUGFja2FnZSIgbXNnaWQ9IjMyODk4OTAyNzE2NDU5MjE0MTEiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4La44LeK4La04Lat4LeKIOC2nOC3meC2sSDgtrrgt4/gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3ZlUGFja2FnZSIgbXNnaWQ9IjMxOTU2MjIxNzc3ODI0NDUyNCI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgt4Pgt4Qg4La24LeP4LeE4LeS4La7IOC2uOC3j+C2sOC3iuKAjeC2uuC2uuC2seC3iuC2nOC3meC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgt5og4LeD4La44LeK4La04Lat4LeKIOC2nOC3meC2seC2uuC3j+C2uOC2pyDgt4Pgt4Qg4La64LeZ4Lav4LeU4La44LeaIOC3g+C2uOC3iuC2tOC2reC3iiDgt4Dgtr3gt5LgtrHgt4og4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC3g+C3hCDgtrbgt4/gt4Tgt5Lgtrsg4La44LeP4Law4LeK4oCN4La64La64Lax4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3miDgt4Pgtrjgt4rgtrTgtq3gt4og4Lac4LeZ4Lax4La64LeP4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZExvZ3MiIG1zZ2lkPSI2NjE1Nzc4NTQzMTk4OTY3NjE0Ij4i4LeD4LaC4LeA4Lea4Lav4LeTIOC2veC3nOC2nOC3iiDgtq/gtq3gt4rgtq0g4Laa4LeS4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4i4La04Lav4LeK4Law4Lat4LeS4La64LeaIOC3gOC3kuC3gOC3kuC2sCDgtr3gt5zgtpzgt4og4Lac4Lec4Lax4LeUIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC3g+C3hCDgtrTgt57gtq/gt4rgtpzgtr3gt5Lgtpog4Lat4Lec4La74Lat4LeU4La74LeUIOC2h+C2reC3lOC3heC2reC3iuC3gCDgtpTgtrYg4Lan4LeQ4La24LeK4La94Lan4La64LeZ4Lax4LeKIOC2muC3lOC2uOC2muC3iiDgtprgtrvgtrHgt4rgtrHgt5ngt4Tgt5Lgtq8g4La64Lax4LeP4Lav4LeTIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeD4LeZ4LeA4LeT4La44LanIOC2uOC3meC2uuC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjA2MzQzODE0MDI0MTU2MDQ0MyI+IuC2tOC2r+C3iuC2sOC2reC3kuC2uuC3miDgt4Dgt5Lgt4Dgt5LgtrAg4La94Lec4Lac4LeKIOC2nOC3nOC2seC3lCDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2tOC3lOC2r+C3iuC2nOC2veC3kuC2miDgt4Pgt4Qg4La04Lee4Lav4LeK4Lac4La94LeS4LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtofgtq3gt5Tgt4Xgtq3gt4rgt4Ag4LaU4La2IOC2r+C3lOC2u+C2muC2ruC2seC2uuC3meC2seC3iiDgtprgt5Tgtrjgtprgt4og4Laa4La74Lax4LeK4Lax4LeZ4LeE4LeS4LavIOC2uuC2seC3j+C2r+C3kyDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4Lat4Lec4La74Lat4LeU4La74LeUIOC3g+C3meC3gOC3k+C2uOC2pyDgtrjgt5ngtrrgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI3MTU4MDU1NTU4MjM4ODE4MTgiPiLgtrHgt5Dgt4Dgtq0g4Law4LeP4LeA4Lax4La6IOC3g+C2s+C3hOC3jyDgtpXgtrHgt5Hgtrgg4La44LeP4Law4LeK4oCN4La6IOC3gOC3kuC2muC3muC2reC2muC2uuC2muC3iiDgt4Tgt4/gt4Dgt5Lgtq3gt48g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiLgtrHgt5Dgt4Dgtq0g4Law4LeP4LeA4Lax4La6IOC3g+C2s+C3hOC3jyDgt4Dgt5Lgtprgt5rgtq3gtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2leC2seC3keC2uCDgt4Pgt4rgtq7gt4/gtrTgt5Lgtq0g4La44LeP4Law4LeK4oCN4La6IOC3gOC3kuC2muC3muC2reC2muC2uuC2muC3iiDgtrfgt4/gt4Dgt5Lgtq3gtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VDYUNlcnRpZmljYXRlcyIgbXNnaWQ9IjE2NzgzOTE4OTY3ODY4ODIwMTQiPiLgt4Dgt5Lgt4Hgt4rgt4Dgt4/gt4Pgtq/gt4/gtrrgt5Mg4LaF4Laa4LeK4Lat4La04Lat4LeK4oCN4La7IOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUNhQ2VydGlmaWNhdGVzIiBtc2dpZD0iNDAxNTY0NDA0NzE5NjkzNzAxNCI+IuC2uuC3meC2r+C3lOC2uOC2pyBDQSDgt4Pgt4Tgtq3gt5Lgtpog4LeA4LeS4LeB4LeK4LeA4LeP4LeD4Lav4LeP4La64LeTIOC2heC2muC3iuC2reC2tOC2reC3iuKAjeC2uyDgtr3gt5ngt4Mg4LeD4LeK4Lau4LeP4La04Lax4La6IOC3g+C3hCDgtoXgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kaWFnbm9zdGljIiBtc2dpZD0iODA3Njc0Mzk1MzkwODAwMDM0MiI+IkRpYWcg4LeA4LeS4LeD4LeS4Lax4LeKIOC3hOC3kuC2uOC3kuC2muC3j+C2u+C2reC3iuC3gOC2uiDgtq/gtrvgtqsg4LeD4La44LeK4La04Lat4LeK4LeA4La94LanIOC2muC3kuC2uuC3gOC3k+C2uC8g4La94LeS4LeA4LeS4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlhZ25vc3RpYyIgbXNnaWQ9IjY2MDgyOTU2OTIwMDI0NTIyODMiPiJEaWFnIOC2muC2q+C3iuC2qeC3j+C2uuC2uOC2pyDgtoXgtrrgt5Lgtq3gt5Ig4LaV4Lax4LeR4La4IOC3g+C2uOC3iuC2tOC2reC2muC3iiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4LeD4LeEIOC2veC3kuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaL4Lav4LeP4LeE4La74Lar4La64Laa4LeKIOC2veC3meC3gyAvZGV2IOC2reC3lOC2vSDgtofgtq3gt5Ig4Lac4Lec4Lax4LeULiDgtrjgt5ngtrrgtqcg4La04Lav4LeK4Law4Lat4LeSIOC3g+C3iuC2ruC3j+C2uuC3kuC2reC3j+C3gOC2pyDgt4Pgt4Qg4LaG4La74Laa4LeK4LeC4LeP4LeA4LanIOC2tuC2veC2tOC3keC2uOC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeE4LeQ4Laa4LeS4La64LeP4LeA4Laa4LeKIOC2h+C2rS4g4Lax4LeS4LeC4LeK4La04LeP4Lav4LaaIOC3hOC3nSDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgtrvgt5Qg4LeA4LeS4LeD4LeS4Lax4LeKIOC2r+C3mOC2qeC3j+C2guC2nC3gt4Dgt5Lgt4Hgt5rgt4Lgt5Lgtq0g4Lav4Led4LeCIOC2seC3kuC2u+C3iuC2q+C2uiDgt4PgtrPgt4Tgt48g4La04La44Lar4Laa4LeKIOC2uOC3meC2uiDgtrrgt5zgtq/gt4/gtpzgtq0g4La64LeU4Lat4LeU4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29tcG9uZW50U3RhdGUiIG1zZ2lkPSI2MzM1NTc2Nzc1NzExMDk1OTMxIj4i4La64LeZ4Lav4LeU4La44LeKIOC2heC2guC2nCDgt4Pgtrbgtr0g4LeE4LedIOC2heC2tuC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODg4NzQzNTc0MDk4MjIzNzI5NCI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgtpog4LaF4LaC4Lac4La64Laa4LeKIOC3g+C2tuC2vSDgtq8g4Lax4LeQ4Lav4LeK4LavIOC2uuC2seC3iuC2sSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5Dgtq/gtpzgtq3gt4og4Lan4LeQ4La24LeK4La94Lan4LeKIOC2heC3gOC3geC3iuKAjeC2uuC2reC3jyDgtoXgtrbgtr0g4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4LeE4LeQ4LaaLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC3g+C3kOC2veC2muC3kuC2veC3iuC2veC3meC2seC3iiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeFIOC2uuC3lOC2reC3lOC2uiwg4La34LeP4LeA4LeS4LatIOC2seC3nOC2muC2u+C2sSwg4LaF4LeD4LeK4Lau4LeS4La7IOC3hOC3nSDgtoXgt4Pgt4rgtq7gt4/gtrrgt5Ig4Lat4Lat4LeK4LeA4La64LanIOC2uuC3meC2r+C3lOC2uCDgtrTgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC2keC2uuC2pyDgt4Tgt5Dgtprgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29tcG9uZW50U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODI3MjMyNDg0NDE2NTA1NjE1Ij4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC2miDgtoXgtoLgtpzgtrrgtprgt4og4LeD4La24La9IOC2ryDgtrHgt5Dgtq/gt4rgtq8g4La64Lax4LeK4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC3kOC2r+C2nOC2reC3iiDgtq/gt5Tgtrvgtprgtq7gtrEg4LaF4LeA4LeB4LeK4oCN4La64Lat4LePIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4LatIOC2muC3hSDgt4Tgt5DgtpouIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4LeD4LeQ4La94Laa4LeS4La94LeK4La94LeZ4Lax4LeKIOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4La64LeU4Lat4LeU4La6LCDgtrfgt4/gt4Dgt5Lgtq0g4Lax4Lec4Laa4La74LaxLCDgtoXgt4Pgt4rgtq7gt5Lgtrsg4LeE4LedIOC2heC3g+C3iuC2ruC3j+C2uuC3kiDgtq3gtq3gt4rgt4Dgtrrgtqcg4La64LeZ4Lav4LeU4La4IOC2tOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaR4La64LanIOC3hOC3kOC2muC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dyYW50UmV2b2tlUGVybWlzc2lvbnMiIG1zZ2lkPSI0NjI3MzE1MzUxMDkzNTA4Nzk1Ij4i4LaF4LeA4LeD4La7IOC2tOC3iuKAjeC2u+C2r+C3j+C2seC2uiDgtprgt5Lgtrvgt5Pgtrgg4LeE4LedIOC2heC3hOC3neC3g+C3kiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ncmFudFJldm9rZVBlcm1pc3Npb25zIiBtc2dpZD0iNDA4ODY0MjY1NDA4NTg1MDY2MiI+IuC2uuC3meC2r+C3lOC2uOC2muC2pyDgtpHgtrrgtqcg4LeE4LedIOC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La94LanIOC3gOC3kuC3geC3muC3guC3kuC2rSDgtoXgt4Dgt4Pgtrsg4La04LeK4oCN4La74Lav4LeP4Lax4La64LanIOC3hOC3nSDgtoXgt4Tgt53gt4Pgt5Ig4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4osIOC2kuC3gOC3j+C2pyDgtoXgt4Dgt4Pgtrsg4La04LeK4oCN4La74Lav4LeP4Lax4La6IOC2seC3nOC2muC3hSDgtpzgt5Tgtqvgt4/gtoLgtpwg4LeA4La94LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5Pgtrjgtqcg4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iODQ2MzE4MTYyODY5NTM5NjM5MSI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0UHJlZmVycmVkQXBwbGljYXRpb25zIiBtc2dpZD0iNDk3Mzk4Njc2MjI0MTc4MzcxMiI+IuC2lOC2tuC2nOC3miDgtoXgtrfgt5Lgtrvgt5TgtqDgt5Ig4La64LeZ4Lav4LeU4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tuC2nOC3miDgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4LCDgtrTgt4Dgtq3gt5LgtrEg4La64LeZ4Lav4LeU4La44LeKIOC3gOC2veC3kuC2seC3iiDgtq/gtq3gt4rgtq0g4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uCwg4La04LeK4oCN4La74Led4Lap4LePIOC2muC3kuC2u+C3k+C2uCDgt4Dgt5DgtrHgt5Ig4Lav4LeaIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4LeS4LeB4LeK4LeB4La24Lav4LeA4La4IOC3g+C3kuC2r+C3lCDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVNldHRpbmdzIiBtc2dpZD0iMjIyNjE5NTI5MDk1NTIyNDczMCI+IuC2tOC2r+C3iuC2sOC2reC3kiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSI3Nzc1NzIzNDQxNTU4OTA3MTgxIj4i4La04Lav4LeK4Law4Lat4LeSIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtq/gtq3gt4rgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtpTgtrbgtpzgt5og4La04Lav4LeK4Law4Lat4LeSIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3gyDgtq/gt53gt4Ig4Lac4LeQ4Lax4LeK4LeA4LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2VjdXJlU2V0dGluZ3MiIG1zZ2lkPSIyMDQ2NzYyNTE4NzY3MTgyODgiPiLgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4La04Lav4LeK4Law4Lat4LeSIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjgxNTk1MzU2MTMwMjAxMzczOTEiPiLgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgt5og4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC2r+C2reC3iuC2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4LaL4La04LeP4LaC4LacIOC3g+C2s+C3hOC3jyDgtrfgt4/gt4Dgt5Lgtq3gtrrgtqcg4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIyMTQ5NDI2NjY0MjI2MTUyMTg1Ij4iR29vZ2xlIOC3g+C3muC3gOC3jyDgt4Pgt5Lgtq3gt5Lgtrrgtrgg4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlR3NlcnZpY2VzIiBtc2dpZD0iMTI4NzMwOTQzNzYzODM4MDIyOSI+Ikdvb2dsZSDgt4Pgt5rgt4Dgt48g4LeD4LeS4Lat4LeS4La64La4IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlQm9vdENvbXBsZXRlZCIgbXNnaWQ9IjUzMTI5NjU1NjU5ODc4MDAwMjUiPiLgtobgtrvgtrjgt4rgtrfgtrrgt5rgtq/gt5Mg4Law4LeP4LeA4Lax4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzkwMzA0NjY0MTE2ODgwNzA0Ij4i4La04Lav4LeK4Law4Lat4LeS4La6IOC2h+C2u+C2ueC3lOC2uCDgtoXgt4Dgt4PgtrHgt4og4LeA4LeWIOC3gOC3hOC3j+C2uCDgtrrgt5ngtq/gt5Tgtrgg4LaG4La74La44LeK4La3IOC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4Lan4LeQ4La24LeK4La94Lan4La6IOC2huC2u+C2uOC3iuC2tyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44LeZ4La44Laf4LeS4Lax4LeKIOC2tOC2uOC3jyDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC2heC2reC2uyDgt4Pgt5Dgtrjgt4Dgt5Lgtqfgtrgg4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgtrHgt5Lgt4Pgt48g4LeD4La44LeK4La04LeW4La74LeK4LarIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC2uCDgtrTgt4rigI3gtrvgtrjgt4/gtq8g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTEzOTUwNTg5MTAyNjE3NTA0Ij4i4La04Lav4LeK4Law4Lat4LeS4La6IOC2h+C2u+C2ueC3lOC2uCDgtoXgt4Dgt4PgtrHgt4og4LeA4LeWIOC3gOC3hOC3j+C2uCDgtrrgt5ngtq/gt5Tgtrgg4LaG4La74La44LeK4La3IOC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4Lav4LeU4La74Laa4Lau4Lax4La6IOC2huC2u+C2uOC3iuC2tyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44LeZ4La44Laf4LeS4Lax4LeKIOC2tOC2uOC3jyDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC2heC2reC2uyDgt4Pgt5Dgtrjgt4Dgt5Lgtqfgtrgg4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgtrHgt5Lgt4Pgt48g4LeD4La44LeK4La04LeW4La74LeK4LarIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3muC2uCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Lgtq3gt4rgt4Dgtrog4La04LeK4oCN4La74La44LeP4LavIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFN0aWNreSIgbXNnaWQ9Ijc5MTkxMjYzNzI2MDY4ODE2MTQiPiLgtrbgt5DgtrPgt5Tgtqvgt5Qg4LeA4LeS4Laa4LeP4LeB4Lax4La6IOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFN0aWNreSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzc0OTc2MDQ5NDM5OTkxNTY1MSI+IuC2tOC3iuKAjeC2u+C2oOC3j+C2u+C2q+C2uuC2pyDgtrTgt4Pgt5Tgt4Dgtq8g4La04LeA4Lat4LeS4LaxLCDgtrTgt4rigI3gtrvgtqDgt4/gtrvgtqvgtrrgtrHgt4og4La64LeQ4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5Dgtqngt5LgtrTgt5Tgtrsg4La44Lat4Laa4La6IOC2t+C3j+C3gOC3kuC2reC2uiDgt4Tgt5rgtq3gt5Qg4Laa4Lec4LanLCDgtoXgtrDgt5Lgtpog4La34LeP4LeA4LeS4Lat4La6IOC2uOC2n+C3kuC2seC3iiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4La04La44LePIOC2muC3kuC2u+C3k+C2uCDgt4Tgt50g4LaF4LeD4LeK4Lau4LeS4La7IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjgyNTgwMzc2NDIzMjQ0NTA5MSI+IuC2tOC3iuKAjeC2u+C2oOC3j+C2u+C2q+C2uuC2pyDgtrTgt4Pgt5Tgt4Dgtq8g4La04LeA4Lat4LeS4LaxLCDgtrTgt4rigI3gtrvgtqDgt4/gtrvgtqvgtrrgtrHgt4og4La64LeQ4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5Dgtqngt5LgtrTgt5Tgtrsg4La44Lat4Laa4La6IOC2t+C3j+C3gOC3kuC2reC2uiDgt4Tgt5rgtq3gt5Qg4Laa4Lec4LanLCDgtoXgtrDgt5Lgtpog4La34LeP4LeA4LeS4Lat4La6IOC2uOC2n+C3kuC2seC3iiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4La04La44LePIOC2muC3kuC2u+C3k+C2uCDgt4Tgt50g4LaF4LeD4LeK4Lau4LeS4La7IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ29udGFjdHMiIG1zZ2lkPSI4MzQ4NDgxMTMxODk5ODg2MTMxIj4i4LaU4La24Lac4LeaIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtprgt5Lgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUyOTQ4NjY4NTY5NDExNDk2MzkiPiLgt4PgtrPgt4TgtrHgt4og4La04LeU4Lav4LeK4Lac4La94La64Lax4LeKIOC3hOC2pyDgtpTgtrYg4LaH4La44Lat4LeU4La44LeKIOC2nOC2reC3iiwg4LaKLeC2reC3kOC2tOC3kOC2veC3iiwg4LeE4LedICDgtoXgtrHgt5ngtprgt5Tgtq3gt4og4LaG4Laa4LeP4La7IOC3gOC2veC3kuC2seC3iiDgt4PgtrHgt4rgtrHgt5Lgt4Dgt5rgtq/gtrHgtrog4Laa4La74Lac4Lat4LeKIOC3g+C2guC2m+C3iuKAjeC2uuC2reC2ryDgtofgtq3gt5Tgt4Xgt5Tgt4AsIOC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4Lac4La24Lap4LeP4LeA4LeTIOC2h+C2reC3kiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4La04LeS4LeF4LeS4La24LazIOC2r+C2reC3iuC2rSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La44Laf4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2tOC3kuC3heC3kuC2tuC2syDgtq/gtq3gt4rgtq0g4LeD4LeU4La74LeQ4Laa4LeT4La44LanIOC2ieC2qSDgtr3gtrbgt48g4Lav4LeZ4LaxIOC2heC2reC2uywg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LaU4La2IOC2seC3nOC2r+C3kOC2seC3lOC3gOC2reC3iuC3gOC2uCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4Lav4Lat4LeK4LatIOC2tuC3meC2r+C3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LaJ4LapIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NDQwNjU0MTUyNDU3MzAwNjYyIj4i4Lax4LeS4La64La44LeS4LatIOC2tOC3lOC2r+C3iuC2nOC2veC2uuC2seC3iiDgt4Pgtrjgtpwg4LaU4La2IOC2h+C2uOC2reC3lCwg4LaKLeC2reC3kOC2tOC3kOC2veC3iiDgtprgt4Ug4LeE4LedIOC3gOC3meC2seC2reC3iiDgtobgtprgt4/gtrvgtrrgtprgt5LgtrHgt4og4LeD4Lax4LeK4Lax4LeS4LeA4Lea4Lav4Lax4La6IOC2muC3hSDgt4PgtoLgtpvgt4rigI3gtrrgt4/gtq3gtrog4LaH4Lat4LeU4La94Lat4LeKIOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LaG4Lag4La64Lax4La6IOC2muC2u+C2sSDgtr3gtq8g4LaU4La24Lac4LeaIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtpzgt5DgtrEg4Lav4Lat4LeK4LatIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtq/gtq3gt4rgtq0g4LaL4La04LeD4LeK4LauIOC2muC3kuC2u+C3k+C2uOC2pyDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4LaxIOC2heC2reC2uyDgtpTgtrbgtpzgt5og4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtq/gtq3gt4rgtq0g4La24LeZ4Lav4LeP4Lac4LeQ4Lax4LeT4La4IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNvbnRhY3RzIiBtc2dpZD0iNTEwNzQ5MjA4NjQxNjc5MzU0NCI+IuC2lOC2tuC2nOC3miDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg5NzI0MzkzMjUyMTk1MzYwMiI+IuC2seC3kuC2uuC2uOC3kuC2rSDgtrTgt5Tgtq/gt4rgtpzgtr3gtrrgtrHgt4rgtqcg4LaU4La2IOC2h+C2uOC2reC3liwg4LaKLeC2reC3kOC2tOC3kOC2veC3iiDgtprgt4Ug4LeE4LedIOC2h+C2uOC2reC3lOC2uOC3iiDgtprgt4Ug4LeD4LaC4Lab4LeK4oCN4La64LeP4LatIOC2h+C2reC3lOC2veC2reC3iiDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2huC2oOC2uuC2seC2uiDgtprgtrvgtrEg4La94LavIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyAo4La94LeS4La04LeS4LaxKSDgtq/gtq3gt4rgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uuC3meC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2r+C2reC3iuC2rSDgtrjgt5Dgtprgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNvbnRhY3RzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTg5ODY5MjI0NjI1MTYzNTU4Ij4i4LeD4Laz4LeE4Lax4LeKIOC2tOC3lOC2r+C3iuC2nOC2veC2uuC2seC3iuC2pyDgtpTgtrYg4LaH4La44Lat4LeWLCDgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2muC3hSDgt4Tgt50g4LaH4La44Lat4LeU4La44LeKIOC2muC3hSDgt4PgtoLgtpvgt4rigI3gtrrgt4/gtrEg4LaH4Lat4LeU4La94Lat4LeKIOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LaG4Lag4La64Lax4La6IOC2muC2u+C2sSDgtr3gtq8g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePICjgtr3gt5LgtrTgt5LgtrEpIOC2r+C2reC3iuC2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La64LeZ4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4Lav4Lat4LeK4LatIOC2uOC3kOC2muC3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGxMb2ciIG1zZ2lkPSIzNDc4MTMzMTg0NjI0MTAyNzM5Ij4i4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC2uiDgtprgt5Lgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzcwMDY0NTE4NDg3MDc2MDI4NSI+IuC2tOC3kOC2uOC3kuC2q+C3meC2sSDgt4Pgt4Qg4La04LeS4Lan4LeA4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgtpzgt5DgtrEg4Lav4Lat4LeK4LatIOC2h+C2reC3lOC3heC2reC3iiwg4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4LacIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpwg4Lav4Lat4LeK4LatIOC3g+C3lOC2u+C2muC3iuC3guC3kuC2rSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3kiDgt4Pgt4Qg4LaU4La24Lac4LeaIOC2r+C3kOC2seC3lOC2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nCDgtq/gtq3gt4rgtq0g4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrbgt5ngtq/gt48g4Lac4LeQ4Lax4LeT4La4IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc3NzI1Nzk2ODEzMjE3MjQ0Ij4i4La94LeQ4La24LeZ4LaxIOC3g+C3hCDgtrTgt5Lgtqfgt4DgtrEg4LaH4La44Lat4LeU4La44LeKIOC2tOC3kuC3heC3kuC2tuC2syDgtq/gtq3gt4rgtq0g4LaH4Lat4LeU4LeF4Lat4LeK4LeAIOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC3iiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4LaU4La24Lac4LeaIOC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpzgt4og4Lav4Lat4LeK4LatIOC2i+C2tOC3g+C3iuC2riDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qeC2r+C3meC2sSDgtoXgtq3gtrsg4LaU4La24Lac4LeaIOC2heC2seC3lOC2r+C3kOC2seC3lOC2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC3iiDgtq/gtq3gt4rgtq0g4La24LeZ4Lav4LeP4Lac4LeQ4Lax4LeT4La4IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGxMb2ciIG1zZ2lkPSI4NTUyMDQ1NjY0NzQzNDk5MzU0Ij4i4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC2uiDgtr3gt5Lgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NjE4MDYwNjIyNzQxMTkyNDUiPiLgtr3gt5Dgtrbgt5ngtrEg4LaH4La44Lat4LeU4La44LeKIOC3g+C3hCDgtrTgt5Lgtqfgt4DgtrEg4LaH4La44Lat4LeU4La44LeKIOC2r+C2reC3iuC2rSDgtofgtq3gt5Tgt4Xgtq3gt4rgt4Ag4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4Lac4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tuC2nOC3miDgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4Lac4La6IOC2uOC3kOC2muC3k+C2uOC2pyDgt4Tgt50g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeZ4La74LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4Mzk0MTczNjM1Mjc4Nzg0MiI+IuC2tOC3kOC2uOC3kuC2q+C3meC2sSDgt4Pgt4Qg4La04LeS4Lan4LeA4LeZ4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgtq/gtq3gt4rgtq0g4LaH4Lat4LeU4LeF4LeU4LeAIOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC2uiDgtrjgt5Dgtprgt5Pgtrjgtqcg4LeE4LedIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4LatIOC2muC2vSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkUHJvZmlsZSIgbXNnaWQ9IjQ3MDE4ODk4NTI2MTI3MTY2NzgiPiLgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2tOC2rSDgtprgt5Lgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU0NjI0NzUxNTE4NDk4ODg4NDgiPiLgtpTgtrbgtpzgt5og4Lax4La4IOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LaG4Lav4LeTIOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrrgt5og4Lac4La24Lap4LePIOC3gOC3kyDgtofgtq3gt5Ig4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC2tOC3kOC2reC3kuC2muC2qSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngt4Tgt5Ig4Lat4Lea4La74LeU4La4IOC2uuC3meC2r+C3lOC2uOC2pyDgtpTgtrbgt4Ag4LeE4Laz4LeU4Lax4LePIOC2nOC3kOC2seC3k+C2uOC2pyDgt4Tgt5Dgtprgt5Ig4LeA4LaxIOC2tuC3gCDgt4Pgt4Qg4LaU4La24Lac4LeaIOC2tOC3lOC2r+C3iuC2nOC2veC3kuC2miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LaF4Lax4LeZ4Laa4LeKIOC2heC2uuC2pyDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LavIOC3hOC3kOC2muC3kiDgt4Dgt5Pgtrjgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVByb2ZpbGUiIG1zZ2lkPSI5MDc3OTM2Mjg3NzczOTc2NDMiPiLgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2tOC2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTU1MjA4NDI5NDU5ODQ2NTg5OSI+IuC2lOC2tuC2nOC3miDgtrHgtrgg4LeD4LeEIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeA4LeQ4Lax4LeSIOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrrgt5og4LaG4Lag4La64Lax4La6IOC2muC2u+C2sSDgtr3gtq8g4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC2tOC3kOC2reC3kuC2muC2qSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Tgt50g4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La44Lac4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtpTgtrbgt4Ag4LeE4Laz4LeU4Lax4LePIOC2nOC2rSDgt4Tgt5Dgtprgt5Ig4LaF4Lat4La7IOC2heC2seC3meC2muC3iiDgtoXgtrrgtqcg4LaU4La24Lac4LeaIOC2tOC3kOC2reC3kuC2muC2qSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La64LeQ4LeA4LeS4La6IOC3hOC3kOC2muC3kiDgtrbgt4Ag4Laa4LeS4La64LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEyNjg5MjA5NTYxNTI0MTkxNzAiPiLgtpTgtrbgtpzgt5og4LeD4La44LeP4LaiIOC2tOC3iuKAjeC2u+C3gOC3j+C3hOC2uiDgtprgt5Lgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDI1NTcwNjAyNzE3MjA1MDg3MiI+IuC2lOC2tuC2nOC3miDgt4Pgt4Qg4LaU4La24Lac4LeaIOC2uuC3hOC3heC3lOC3gOC2seC3iuC2nOC3miDgt4Pgtrjgt4/gtqIg4La64LeP4LeA4Lat4LeK4Laa4LeP4La94LeT4Lax4La64Lax4LeKIOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5Pgtrjgtqcg4LeE4LedIOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrbgt5ngtq/gt48g4Lac4LeQ4Lax4LeT4La44LeaIOC2r+C3kyDgt4Pgt5Dgtr3gtprgt5Lgtr3gt5Lgtrjgtq3gt4og4LeA4Lax4LeK4LaxIC0tIOC3gOC3kuC3geC3iuC3gOC3j+C3g+C2uuC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LeD4La44LeP4LaiIOC2ouC3j+C2veC3gOC2vSDgtpTgtrbgtpzgt5og4LeD4LeEIOC2lOC2tuC2nOC3miDgtrrgt4Tgt4Xgt5Tgt4DgtrHgt4og4LaF4Lat4La7IOC3g+C2seC3iuC2seC3kuC3gOC3muC2r+C2sSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La44LeZ4La44Lac4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiDgt4Pgtqfgt4TgtrE6IOC3g+C3kuC2uuC2veC3lCDgt4Pgtrjgt4/gtqIg4Lai4LeP4La94LeA4La9IOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La24La9IOC2seC3nOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzUwNDE3OTIyMjQ5MzIzNTY0NSI+IuC2lOC2tuC2nOC3miDgt4Pgtrjgt4/gtqIg4La04LeK4oCN4La74LeA4LeP4LeE4La6IOC3gOC3meC2rSDgtr3gt5Lgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNvY2lhbFN0cmVhbSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwODY1NTc1NTIyMDQxMTQ4NDkiPiLgtpTgtrbgtpzgt5og4La64LeE4LeF4LeU4LeA4Lax4LeK4Lac4LeaIOC3g+C2uOC3j+C2oiDgtrrgt4/gt4Dgtq3gt4rgtprgt4/gtr3gt5PgtrHgtrrgtrHgt4og4La04LeZ4Lax4LeK4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La24LeZ4Lav4LePIOC2nOC3kOC2seC3k+C2uOC3muC2r+C3kyDgt4Pgt5Dgtr3gtprgt5Lgtr3gt5Lgtrjgtq3gt4og4LeA4Lax4LeK4LaxIC0tIOC2uuC3hOC3heC3lOC3gOC3meC2muC3iuC2nOC3meC2seC3iiDgtrTgt5Dgtrjgt5Lgtqvgt5ngtrEg4La94LeZ4LeDIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrHgt5LgtrTgtq/gt4Dgt5Pgtrjgtqcg4La44LeZ4La44Laf4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgtqfgt4TgtrEgOiDgt4Pgt5Lgtrrgtr3gt5Qg4LeD4La44LeP4LaiIOC2ouC3j+C2vSDgt4PgtrPgt4Tgt48g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtrbgtr0g4Lax4Lec4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGVuZGFyIiBtc2dpZD0iNTk3MjcyNzU2MDI1NzYxMjM5OCI+IuC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrHgtrrgt5og4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKIOC3g+C3hCDgtrvgt4Tgt4Pgt5Lgtpzgtq0g4Lat4Lec4La74Lat4LeU4La74LeUIOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDIxNjQ2MjA0OTA1NzY1ODcyMyI+IuC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4Lat4LeU4La9IOC2nOC2tuC2qeC3jyAg4Laa4La7IOC2h+C2reC3kiDgtrjgt5Lgtq3gt5TgtrvgtrHgt4rgtpzgt5og4LeD4LeEIOC2keC2muC3iuC3gCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgtrvgtrHgt4rgtrHgtrHgt4rgtpzgt5og4LavIOC2h+C2reC3lOC3heC3lOC3gCDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4Lav4LeS4LaxIOC2r+C2u+C3iuC3geC2sSDgt4Pgt5Lgtq/gt4rgtrDgt5Ig4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrog4La74LeE4LeD4LeK4oCN4La64La34LeP4LeA4La6IOC3hOC3nSDgt4PgtoLgt4Dgt5rgtq/gt5Pgtq3gt4/gt4Dgtrog4Lax4Lec4LeD4La94Laa4LePIOC2lOC2tuC2nOC3miDgtq/gt5LgtrEg4Lav4La74LeK4LeB4LaxIOC2r+C2reC3iuC2rSDgtrbgt5ngtq/gt48g4Lac4LeQ4Lax4LeT4La44LanIOC3hOC3nSDgt4Pgt5Tgtrvgt5Dgtprgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzQzNDU0ODY4MjQ3MDg1MTU4MyI+IuC2uuC3hOC3heC3lOC3gOC2seC3iiDgt4Pgt4Qg4LeD4La44Laa4LeP4La94LeS4Lax4La64Lax4LeKIOC2h+C2reC3lOC2veC2reC3iiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2huC2oOC2uuC2seC2uiDgtprgtrvgtrEg4La94LavIOC3g+C3kuC2uuC2veC3lCDgtq/gt5LgtrEg4Lav4La74LeK4LeB4LaxIOC3g+C3kuC2r+C3lOC3gOC3k+C2uOC3iiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC3kuC3geC3iuC3gOC3j+C3g+C2uuC2muC3kuC2seC3iiDgt4Tgt50g4LeD4LaC4LeA4Lea4Lav4LeT4Lat4LeP4LeA4Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtpTgtrbgtpzgt5og4Lav4LeS4LaxIOC2r+C2u+C3iuC3geC2sSDgtq/gtq3gt4rgtq0g4La24LeZ4Lav4LePIOC2nOC3kOC2seC3k+C2uOC2pyDgt4Tgt50g4LaL4La04LeD4LeK4LauIOC2muC3kuC2u+C3k+C2uOC2pyDgtrjgt5ngtrjgtpzgt5LgtrHgt4og4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGVuZGFyIiBtc2dpZD0iODQzODg3NDc1NTE5MzgyNTY0NyI+IuC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrEg4LeD4LeS4Lav4LeK4Law4LeSIOC2keC2muC2reC3lCDgtprgt5Lgtrvgt5Pgtrgg4LeE4LedIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtprgt4og4LeD4LeS4Lav4LeU4Laa4La7IOC3hOC3kuC2uOC3kuC2muC2u+C3lOC2nOC3miDgtq/gt5DgtrHgt5Pgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2heC2uOC3lOC2reC3iuC2reC2seC3iuC2pyDgtoot4Lat4LeQ4La04LeR4La94Laa4LeKIOC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NzkwMzU1MjAxMTM2Njg1MjgiPiLgtrrgt4Tgt4Xgt5Tgt4DgtrHgt4og4LeE4LedIOC2keC2muC2py3gt4Dgt5DgtqngtprgtrvgtrHgt4rgtrHgtrHgt4og4LaH4Lat4LeU4LeF4Lat4LeK4LeAIOC2lOC2tuC2pyDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LeA4LeZ4Lax4LeD4LeKIOC2muC3hSDgt4Tgt5Dgtprgt5Ig4LeD4LeS4Lav4LeK4Law4LeSIOC2keC2muC2reC3lCDgtprgt5Lgtrvgt5PgtrjgtqcsIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5PgtrjgtqcsIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtq/gt5LgtrEg4Lav4La74LeK4LeB4LaxIOC3hOC3kuC2uOC3kuC2muC2u+C3lOC3gOC2seC3iuC2nOC3meC2seC3iiDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La64LeA4LaxIOC2tOC2u+C3kuC2r+C3kiDgtrjgt5ngtrHgt4og4La44LeA4LeP4La04LeR4La44LanIOC3hOC3nSDgt4Tgt5Lgtrjgt5Lgtprgtrvgt5Tgtpzgt5og4LaF4Lax4LeU4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgt4Pgt5Lgtq/gt4rgtrDgt5Ig4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2veC3kOC2tuC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjMyNDQ2OTQ5NjMyNzI0OTM3NiI+IuC2lOC2tuC2nOC3miDgtrrgt4Tgt4Xgt5Tgt4DgtrHgt4og4LeE4LedIOC3g+C2uOC2muC3j+C2veC3k+C2seC2uuC2seC3iiDgtofgtq3gt5Tgt4Xgtq3gt4og4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtpTgtrbgtqcg4LeA4LeZ4Lax4LeD4LeKIOC2muC3hSDgt4Tgt5Dgtprgt5Ig4LeD4LeS4Lav4LeUIOC3gOC3k+C2uOC3iiDgtpHgtprgtq3gt5Qg4Laa4LeS4La74LeT4La44LanLCDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanLCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrjgtpzgt5LgtrHgt4og4Lav4LeS4LaxIOC2r+C2u+C3iuC3geC2sSDgt4Tgt5Lgtrjgt5Lgtprgtrvgt5Tgt4DgtrHgt4rgtpzgt5ngtrHgt4og4La04LeQ4La44LeS4Lar4LeZ4LaxIOC3g+C3miDgtrTgt5ngtrHgt5ngtrEg4La04Lar4LeS4LeA4LeS4LapIOC2uuC3kOC3gOC3k+C2uOC2pyDgt4Tgt50g4LeE4LeS4La44LeS4Laa4La74LeU4Lac4LeaIOC2r+C3kOC2seC3lOC2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNb2NrTG9jYXRpb24iIG1zZ2lkPSI4Njg4MzM0OTc0MDM2ODIzMzMwIj4i4La04La74LeT4Laa4LeK4LeC4LarIOC3g+C2s+C3hOC3jyDgtobgtq/gtrvgt4rgt4Eg4LeD4LeK4Lau4LeP4LaxIOC2uOC3luC2veC3j+C3geC3iuKAjeC2uyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9IjU4MDg3MTEwMzk0ODIwNTE4MjQiPiLgtrTgtrvgt5Pgtprgt4rgt4Lgtqvgtrrgtqcg4LeA4LeK4oCN4La64LeP4LaiIOC3g+C3iuC2ruC3j+C2sSDgtrjgt5bgtr3gt4/gt4Hgt4rigI3gtrsg4LeD4LeP4Lav4Lax4LeK4LaxIOC3hOC3nSDgtrHgt4Ag4LeD4LeK4Lau4LeP4LaxIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lOC3gOC3meC2muC3lCDgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4La74Lax4LeK4LaxLiBHUFMg4LeE4LedIOC3g+C3iuC2ruC3j+C2sSDgt4Pgt5DgtrTgtrrgt5Tgtrjgt4rgtprgtrvgt5Tgt4DgtrHgt4og4LaG4Lav4LeTIOC3gOC3meC2seC2reC3iiDgt4Pgt4rgtq7gt4/gtrEg4La44LeW4La94LeP4LeB4LeK4oCN4La7IOC3gOC3kuC3g+C3kuC2seC3iiDgtr3gtrbgt48g4Lav4LeZ4LaxIOC3g+C3iuC2ruC3j+C2seC2uiDgt4Pgt4Qv4LeE4LedIOC2reC2reC3iuC3gOC2uiDgtrTgt4rigI3gtrvgtq3gt5Lgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtrjgt5ngtrog4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjI4MzYzMDgwNzY3MjA1NTM4MzciPiLgtoXgtrjgtq3gtrsg4LeD4LeK4Lau4LeP4LaxIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lCDgt4Dgt5LgtrDgt4/gtrEg4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSI1OTQ1MTY2NjQyMzM1ODAwNzYzIj4i4LaF4La44Lat4La7IOC3g+C3iuC2ruC3j+C2sSDgt4Pgt5DgtrTgtrrgt5Tgtrjgt4rgtprgtrvgt5Qg4LeA4LeS4Law4LeP4LaxIOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIEdQUyDgt4Tgt50g4LeA4LeZ4Lax4Lat4LeKIOC3g+C3iuC2ruC3j+C2sSDgtrjgt5bgtr3gt4/gt4Hgt4rigI3gtrsg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeSIOC3gOC3meC2rSDgtrbgt4/gtrDgt48g4Laa4LeS4La74LeT4La44LanIOC2uOC3meC2uiDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI2NTc4MTAxMTk5ODI1MTkzODczIj4i4LeD4LeK4Lau4LeP4LaxIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lOC3gOC3meC2muC3lCDgt4Pgt4rgtq7gt4/gtrTgtrHgtrrgtqcg4LaF4LeA4LeD4La74La6IOC2r+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxMb2NhdGlvblByb3ZpZGVyIiBtc2dpZD0iOTA2NjE0NjEyMDQ3MDU5MTUwOSI+IuC2tOC2u+C3k+C2muC3iuC3guC2q+C2uuC2pyDgt4Dgt4rigI3gtrrgt4/gtqIg4LeD4LeK4Lau4LeP4LaxIOC2uOC3luC2veC3j+C3geC3iuKAjeC2uyDgt4Pgt4/gtq/gtrHgt4rgtrEg4LeE4LedIOC2seC3gCDgt4Pgt4rgtq7gt4/gtrEg4LeD4LeQ4La04La64LeU4La44LeK4Laa4La74LeU4LeA4LeZ4Laa4LeUIOC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgtrvgtrHgt4rgtrEuIEdQUyDgt4Tgt50g4LeD4LeK4Lau4LeP4LaxIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lOC3gOC2seC3iiDgtobgtq/gt5Mg4LeA4LeZ4Lax4Lat4LeKIOC3g+C3iuC2ruC3j+C2sSDgtrjgt5bgtr3gt4/gt4Hgt4rigI3gtrsg4LeA4LeS4LeD4LeS4Lax4LeKIOC2veC2tuC3jyDgtq/gt5ngtrEg4LeD4LeK4Lau4LeP4Lax4La6IOC3g+C3hC/gt4Tgt50g4Lat4Lat4LeK4Lat4LeK4LeA4La6IOC2tOC3iuKAjeC2u+C2reC3kuC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2uOC3meC2uiDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iMTE5MTg5ODA2MTk2NTI3MzM3MiI+IuC2seC3kuC3gOC3kOC2u+C2r+C3kiDgt4Pgt4rgtq7gt4/gtrHgtrogKEdQUyDgt4Pgt4Qg4Lai4LeP4La94La6IOC2tOC2r+C2seC2uOC3iiDgtprgtrvgtpzgtq3gt4opIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iNTI5NTA0NzU2MzU2NDk4MTI1MCI+IuC2nOC3neC2veC3k+C2uiDgt4Pgt4rgtq7gt4/gtrHgt5Pgtrog4La04Lav4LeK4Law4Lat4LeS4La6IChHUFMpIOC3hOC3nSDgt4Pgt5ngtr3gt4og4Laa4LeU4LeF4LeU4Lar4LeUIOC3g+C3hCBXaS1GaSDgt4Dgt5DgtrHgt5Ig4Lai4LeP4La9IOC3g+C3iuC2ruC3j+C2seC3k+C2uiDgtrTgt4rigI3gtrvgtrfgt4Ag4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2lOC2tuC2nOC3miDgtrHgt5Lgt4Dgt5Dgtrvgtq/gt5Ig4LeD4LeK4Lau4LeP4Lax4La6IOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrgg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La64LeZ4Lav4LeU4La44LeKIOC3gOC2veC2pyDgt4Pgt4rgtq7gt4/gtrHgt5Pgtrog4LeD4Lea4LeA4LePIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5Lgtrvgt5PgtrjgtqcgIOC2kuC3gOC3jyDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeA4LeS4La6IOC2uuC3lOC2reC3lCDgt4Dgt5ouIOC2lOC2tuC3gCDgt4Pgt5zgtrrgt48g4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2sSDgtoXgtq3gtrsg4LaF4La44Lat4La7IOC2tuC3kOC2p+C2u+C3kiDgtrbgtr3gtrrgtprgt4rgtq8g4La04La74LeS4La34Led4Lai4Lax4La6IOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iNDg4Nzg5NTM2MjM1NDIzOTYyOCI+IuC2huC3g+C2seC3iuC2seC2reC2uCDgt4Pgt4rgtq7gt4/gtrHgtrogKOC2ouC3j+C2veC2ui3gtrTgt4/gtq/gtpog4LeA4LeWKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+IuC2lOC2tuC2nOC3miDgtq/gt4Ug4LeD4LeK4Lau4LeP4Lax4La6IOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4Lax4LeK4Lax4Lea4LeA4Lea4Lav4LaxIOC2muC3lOC3heC3lOC2q+C3lCDgt4Pgt4QgV2ktRmkg4LaG4Lav4LeTIOC2ouC3j+C2vSDgt4Pgt4rgtq7gt4/gtrEg4La44LeW4La94LeP4LeB4LeK4oCN4La7IOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrEg4LeD4LeK4Lau4LeP4LaxIOC3g+C3muC3gOC3jyDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La44LeZ4La4IOC3g+C3iuC2ruC3j+C2seC2uiDgt4Dgt4rigI3gtrrgt5Tgtq3gt4rgtrTgtrHgt4rgtrEg4Laa4La7IOC2h+C2rS4g4La64LeZ4Lav4LeU4La44LanIOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4La44LeZ4La4IOC3g+C3iuC2ruC3j+C2sSDgt4Pgt5rgt4Dgt48g4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC3hSDgtrrgt5Tgtq3gt5Qg4LaF4Lat4La7IOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrog4LeD4Laz4LeE4LePIOC2tOC3kOC3gOC2reC3kuC2uiDgtrrgt5Tgtq3gt5TgtrouIOC2lOC2tiDgt4Pgt5Lgtqfgt5LgtrEg4Lat4LeQ4LaxIOC2r+C3heC3gCDgt4TgtrPgt5TgtrHgt48g4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr3gtqcg4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4LeE4LeQ4Laa4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIyMzYzOTY5NjQxNzkyMzg4OTQ3Ij4iU3VyZmFjZUZsaW5nZXIg4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlN1cmZhY2VGbGluZ2VyIOC2tOC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt5og4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLgtrvgt4/gtrjgt5Qg4LaF4Lax4LeK4Lat4La74LeP4Lag4La6IOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiLgtrvgt4/gtrjgt5Qg4LaF4Lax4LeK4Lat4La74LeP4Lag4La64Lax4La64LeZ4Lax4LeKIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uuC2seC3iiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iSW5wdXRGbGluZ2VyIOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5ngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iSW5wdXRGbGluZ2VyIOC2tOC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt5og4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IldpZmkg4LeD4LaC4Lav4La74LeK4LeB4LaaIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3gyDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Mg4Laa4LeS4La74LeT4La44LanIOC3g+C3hCBXaWZpIOC3g+C2guC2r+C2u+C3iuC3geC2miDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IldpZmkg4LeD4LaC4Lav4La74LeK4LeB4LaaIOC2tOC3j+C2veC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjQ1NDM5MTIyOTI2ODE4MjY5ODYiPiJXaWZpIOC3g+C2guC2r+C2u+C3iuC3geC2muC2uuC3miDgtrTgt4Tgt4Ug4La44Lan4LeK4Lan4La44LeaIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtrTgt4/gtr3gtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2ODU3MTM0NDk4NDAyMzQ2NzA4Ij4i4LeB4La24LeK4LavIOC2tOC3iuKAjeC2u+C2reC3kuC2r+C3j+C2seC2uiDgtpzgt4rigI3gtrvgt4TgtqvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2MjEwNTk3NzU0MjEyMjA4ODUzIj4i4La64LeZ4Lav4LeU4La44LanIOC3geC2tuC3iuC2ryDgtrTgt4rigI3gtrvgtq3gt5Lgtq/gt4/gtrHgtrog4Lac4LeK4oCN4La74LeE4Lar4La6IOC2muC2uyDgt4Tgtrvgt4Dgt48g4La64LeQ4LeA4LeT4La44LanIOC2ieC2qSDgtq/gt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIyMjQ2ODI4NzczNTg5MDk0MDIzIj4i4LeA4LeT4Lap4LeS4La64LedIOC2tOC3iuKAjeC2u+C2reC3kuC2r+C3j+C2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjM1OTQ4MTY1ODAzNDE0OTg2MCI+IuC2uuC3meC2r+C3lOC2uOC2pyDgt4Dgt5Pgtqngt5Lgtrrgt50g4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La6IOC2nOC3iuKAjeC2u+C3hOC2q+C2uiDgtprgtrsg4LeE4La74LeA4LePIOC2uuC3kOC3gOC3k+C2uOC2pyDgtongtqkg4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iNzgxNTM5ODk2OTMwMzM4MjAxNiI+IuC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgt4Dgt5Pgtqngt5Lgtrrgt50g4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMjc3OTc5MzA2NDcwOTM1MDI4OSI+IuC2uuC3meC2r+C3lOC2uOC2pyDgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4LeA4LeT4Lap4LeS4La64LedIOC2tOC3iuKAjeC2u+C2reC3kuC2r+C3j+C2seC2uiDgtpzgt4rigI3gtrvgt4Tgtqvgtrog4Laa4La7IOC3hOC2u+C3gOC3jyDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LaJ4LapIOC2r+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI2MDk1ODU5OTM3MDY5MTQ2MDg2Ij4i4LaU4La24Lac4LeaIOC3geC3iuKAjeC2u+C3gOC3iuKAjeC2uiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSIzNTIyNTY1MzY2ODA2MjQ4NTE3Ij4i4LeB4La24LeK4Lav4La6IOC2huC2r+C3kyDgtpzgt53gtr3gt5Pgtrog4LeB4La24LeK4LavIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgtrTgt4rigI3gtrvgtq3gt5Lgtq/gt4/gtrHgtrog4LeD4Laz4LeE4LePIOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrHgt4rgtrHgt5og4Laa4LeU4La44LaxIOC2seC3j+C2r+C2muC2uiDgtq/gt5Dgtrrgt5Ig4Lat4Lea4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4i4LeB4La24LeK4LavIOC2tOC2p+C3kuC2nOC2rSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNvcmRBdWRpbyIgbXNnaWQ9IjQ5MDY4MzkzMDEwODc5ODA2ODAiPiLgtrjgtrrgt5Lgtprgt4rigI3gtrvgt5zgt4bgt53gtrHgtrog4La44Laf4LeS4Lax4LeKIOC3geC2tuC3iuC2ryDgtrTgtqfgt5Lgtpzgtq0g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2uOC2n+C3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaV4Lax4LeR4La4IOC3gOC3muC2veC3j+C3gOC2miDgtpTgtrbgtpzgt5og4LaF4Lax4LeU4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgt4Hgtrbgt4rgtq8g4La04Lan4LeS4Lac4LatIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4La94La24LePIOC2r+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiLgtrTgt5LgtrHgt4rgtq3gt5bgtrsg4LeD4LeEIOC3gOC3k+C2qeC3kuC2uuC3nSDgtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4Laa4LeQ4La44La74LeP4LeA4LeZ4Lax4LeKIOC2tOC3kuC2seC3iuC2reC3luC2uyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LeD4LeEIOC3gOC3k+C2qeC3kuC2uuC3nSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La44Laf4LeS4Lax4LeKIOC2lOC2tuC2nOC3miDgtoXgtrHgt5Tgtq/gt5DgtrHgt5Tgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2leC2seC3keC2uCDgt4Dgt5rgtr3gt4/gt4Dgtprgtq/gt5Mg4Laa4LeQ4La44La74LeP4LeAIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSIyNjUxMDcyNjMwNTAxMTI2MjIyIj4i4Laa4LeQ4La44La74LeP4LeAIOC2t+C3j+C3gOC3kuC2reC2uuC3muC2r+C3kyBMRUQg4Lav4La74LeK4LeB4LaaIOC3g+C2uOC3iuC2tOC3iuKAjeC2u+C3muC3guC2q+C2uiDgtoXgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhRGlzYWJsZVRyYW5zbWl0TGVkIiBtc2dpZD0iNDc2NDU4NTQ2NTQ4MDI5NTM0MSI+IuC2muC3kOC2uOC2u+C3jyDgtrfgt4/gt4Dgt5Lgtq3gtrog4La04LeS4LeF4LeS4La24LazIExFRCDgtq/gtrvgt4rgt4Hgtprgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pywg4Laa4La94LeS4Lax4LeKIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3jyDgtofgtq3gt5Ig4La04Lav4LeK4Law4Lat4LeSIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI5NjEyOTIyMDU3NjQ0ODgzMDQiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LeD4LeK4Lau4LeS4La74LeA4La4IOC2heC2tuC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JyaWNrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODMzNzgxNzA5MzMyNjM3MDUzNyI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgt4Pgt4rgtq7gt5Lgtrvgt4Ag4LaF4La24La9IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JyaWNrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzM0ODE4ODA4MDAxNjk5NTMwIj4i4La44LeU4LeF4LeUIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC2uCDgt4Pgt4rgtq7gt5Lgtrvgt4Dgtrgg4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La6IOC2ieC2reC3jyDgtrfgtrrgt4/gtrHgtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzg4OTAzMjk3NjI3MjgzMDk5Ij4i4La44LeU4LeF4LeUIOC2r+C3lOC2u+C2muC2ruC2seC2uuC2uCDgt4Pgt4rgtq7gt5Lgtrvgt4Dgtrgg4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La6IOC2ieC2reC3jyDgtrfgtrrgt4/gtrHgtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM0MzY2MzQ5NzI1NjE3OTUwMDIiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgt4og4Lax4LeQ4LeA4LatIOC2tOC2qyDgtpzgt5DgtrHgt4rgt4Dgt5Pgtrjgtqcg4La24La9IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg5ODU2MDg3MjQ2MjYzODI0MiI+IuC2r+C3lOC2u+C2muC2ruC2sSDgtrHgt5Dgt4Dgtq0g4La04LarIOC2nOC3kOC2seC3iuC3gOC3k+C2uOC2pyDgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4MTcyMDU2MTgwMDYzNzAwNzQxIj4i4Lan4LeQ4La24LeK4La94Lan4La6IOC2seC3kOC3gOC2rSDgtrbgtr0g4Lac4LeQ4Lax4LeK4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYm9vdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUzMjYwMDgxMjQyODk5ODk5NjkiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4Lax4LeQ4LeA4LatIOC2h+C2u+C2ueC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMjkyNzM2MTUzNzk0MjU5MTg0MSI+IlVTQiDgtobgtqDgtrrgtrHgtrog4Lac4Lec4Lax4LeUIOC2tOC2r+C3iuC2sOC2reC3kuC2uiDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQwMjMwNTA0OTg5MDk1MzgxMCI+IlNEIOC2tOC2reC3iiDgtpzgt5zgtrHgt5Qg4La04Lav4LeK4Law4Lat4LeS4La6IOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF91bm1vdW50X2ZpbGVzeXN0ZW1zIiBtc2dpZD0iMTgyOTI5MDcwMTY1ODk5MjM0NyI+IuC2ieC3gOC2reC3iiDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC2huC2oOC2uuC2seC2uiDgt4PgtrPgt4Tgt48g4Lac4Lec4Lax4LeUIOC2tOC2r+C3iuC2sOC2reC3kiDgtojgtrPgt5Pgtrjgtqcg4LeD4LeEIOC2nOC3kOC2veC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI2MjI3ODE5NTgyNjI0OTA0OTcyIj4iVVNCIOC2huC2oOC2uuC2seC2uiDgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI2MjU4MjY5ODYzOTI3NDA1NiI+IlNEIOC2tOC2rSDgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3VudF9mb3JtYXRfZmlsZXN5c3RlbXMiIG1zZ2lkPSI4Nzg0MjY4MjQ2Nzc5MTk4NjI3Ij4i4LaJ4LeA4Lat4LeKIOC2muC3hSDgt4Tgt5Dgtprgt5Ig4LaG4Lag4La64LaxIOC3huC3neC2uOC3kOC2p+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2FjY2VzcyIgbXNnaWQ9IjM0MTEzMzg2MzIwMDIxOTM4NDYiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LaG4Lag4La64Lax4La6IOC2tOC3kuC3heC3kuC2tuC2syDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La94La24LePIOC2nOC3kOC2seC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzA5NDU2Mzg0NDU5Mzg3ODU0OCI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrrgt5og4Lat4Lec4La74Lat4LeU4La74LeUIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfY3JlYXRlIiBtc2dpZD0iNjQxNDc1NzIzNDc4OTMzNjMyNyI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrog4Lax4LeS4La74LeK4La44LeP4Lar4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19jcmVhdGUiIG1zZ2lkPSI0NTU4ODY5MjczNTg1ODU2ODc2Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiDgt4Pgt5Dgtq/gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI1MjY5MjgzMjgzMDE2MTgwMjIiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LaG4Lag4La64Lax4La6IOC3gOC3kuC2seC3j+C3gSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2Rlc3Ryb3kiIG1zZ2lkPSI3MjE4NzQ5Mjg2MTQ1NTI2NTM3Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiDgt4Dgt5LgtrHgt4/gt4Eg4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19tb3VudF91bm1vdW50IiBtc2dpZD0iODg3Nzk5ODEwMTk0NDk5OTM4NiI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrog4Lax4LaC4LeA4LeT4La4L+C2nOC3kOC2veC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfbW91bnRfdW5tb3VudCIgbXNnaWQ9IjM0NTEzNjAxMTQ5MDI0OTA5MjkiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LaG4Lag4La64Lax4La6IOC3g+C3gOC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcv4Lac4LeQ4La94LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19yZW5hbWUiIG1zZ2lkPSI3NDk2NjMzOTU0MDgwNDcyNDE3Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiDgtrHgt5Dgt4Dgtq0g4Lax4La44LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfcmVuYW1lIiBtc2dpZD0iMTc5NDc1NzU4ODQ3MjEyNzY3NSI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrog4Lax4LeQ4LeA4LatIOC2seC2uOC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuC2muC2uOC3iuC2tOC2seC2uiDgtrTgt4/gtr3gtrHgtrog4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLgtprgtrjgt4rgtrTgtprgtrog4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLgt4Pgt5Dgtqvgt5ngt4Xgt5Ig4LaG4La94Led4Laa4La6IOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuC3g+C3kOC2q+C3meC3heC3kuC2uiDgtrTgt4/gtr3gtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VVc2IiIG1zZ2lkPSIxMTEzNDUzNDMwNjQ1NDAyNzIzIj4iVVNCIOC2i+C2tOC3j+C2guC2nCDgt4PgtrPgt4Tgt48g4Laa4LeQ4La44LeQ4Lat4LeK4LatIOC3g+C3hCDgtoXgt4Dgt4Pgtrsg4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZVVzYiIgbXNnaWQ9Ijc3NzYxNTU0MzAyMTgyMzk4MzMiPiJVU0Ig4LaL4La04LeP4LaC4LacIOC3g+C2s+C3hOC3jyDgtoXgtrfgt5Lgtrvgt5TgtqDgt5Ig4LeD4LeEIOC2heC3gOC3g+C2uyDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NNdHAiIG1zZ2lkPSI0OTUzNDY4Njc2Nzk1OTE3MDQyIj4iTVRQIOC2tOC3iuKAjeC2u+C3nOC2p+C3nOC2muC3neC2veC2uiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTXRwIiBtc2dpZD0iNjUzMjk2MTIwMDQ4Njc5MTU3MCI+Ik1UUCBVU0Ig4La04LeK4oCN4La74Lec4Lan4Led4Laa4Led4La94La6IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgt5Lgtrvgt5Pgtrjgtqcg4Laa4La74LeK4Lax4La9IE1UUCDgtrDgt4/gt4Dgtprgtrrgtqcg4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjQxNDgyOTA4NjA0MDA2NTkxNDYiPiLgtq/gt5jgtqngt4/gtoLgtpwg4La04La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hhcmR3YXJlX3Rlc3QiIG1zZ2lkPSI2NTk3OTY0MTkxMjA4MDE2NjA1Ij4i4Lav4LeY4Lap4LeP4LaC4LacIOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgt5Lgtrvgt5Pgtrjgt5og4LaF4La74La44LeU4LarIOC3g+C2s+C3hOC3jyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LeA4LeS4LeA4LeS4LawIOC2tOC2u+C3iuC2uuC2seC3iuC2rSDgtrTgt4/gtr3gtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i4Lav4LeU4La74Laa4Lau4LaxIOC2heC2guC2miDgt4Dgt5ngtq0g4LaN4Lai4LeU4LeA4La4IOC2heC2uOC2reC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLgtpTgtrbgtpzgt5og4La44LeQ4Lav4LeS4LeE4Lat4LeKIOC3gOC3k+C2uOC2muC3iiDgtrHgt5zgtrjgt5Dgtq3gt5Lgt4Ag4Lav4LeU4La74Laa4Lau4LaxIOC2heC2guC2miDgtofgtrjgtq3gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC3hOC3kiDgtrTgt4rigI3gtrvgtq3gt5LgtpHgtr3gtrog4LeA4Lax4LeK4Lax4LeaIOC2heC2seC2tOC3muC2muC3iuC3guC3kuC2rSDgtoXgtrrgtprgt5Lgtrvgt5Pgtrjgt4og4LeE4LedIOC2h+C2uOC2reC3lOC2uOC3iiDgtofgtq3gt5Lgt4Dgt5Pgtrjgtrrgt5IuIOC2uOC3meC2uuC2seC3iiDgt4Tgtq/gt5Lgt4Pgt5Ig4LaF4LaC4LaaIOC3gOC2veC2pyDgtofgtrjgtq3gt5Tgtrjgt4og4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lax4Lec4Lav4LeZ4LaxIOC2tuC3gOC2pyDgt4Pgtqfgt4TgtrHgt4og4Laa4La74Lac4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4LaF4Lax4LeU4Lav4LeQ4Lax4LeU4La44Laa4LeKIOC2seC3nOC2uOC3kOC2reC3kuC3gCDgtofgtrjgtq3gt5Tgtrjgt4og4Lac4LeQ4Lax4LeT4La44LeZ4Lax4LeKIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LaU4La24Lac4LeaIOC2uOC3lOC2r+C2veC3iiDgtrHgt5Lgtprgtrvgt5Tgtqvgt5og4LeA4LeQ4La6IOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iNDE5ODM0OTIxMTEwODQ5Nzg3OSI+IuC2leC2seC3keC2uCDgtq/gt5Tgtrvgtprgtq7gtrEg4LaF4LaC4Laa4La64Laa4LanIOC2jeC2ouC3lOC3gOC2uCDgtoXgtrjgtq3gtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUHJpdmlsZWdlZCIgbXNnaWQ9IjE2ODkwMjQ5MDE1MDk5OTY4MTAiPiLgtpTgtrbgtpzgt5og4La44LeQ4Lav4LeS4LeE4Lat4LeK4LeA4LeT4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgt4Tgtq/gt5Lgt4Pgt5Ig4LaF4LaC4LaaIOC2h+C2reC3lOC3heC2reC3iuC3gCDgtpXgtrHgt5Hgtrgg4Lav4LeU4La74Laa4Lau4LaxIOC2heC2guC2muC2uuC2muC2pyDgtofgtrjgtq3gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3hOC2r+C3kuC3g+C3kiDgt4Pgt5rgt4Dgt48g4LeA4LeZ4LatIOC2heC2seC3gOC3geC3iuKAjeC2uiDgt4Pgt4Qg4Lax4LeT4Lat4LeS4La44La6IOC2seC3nOC3gOC2sSDgtofgtrjgtq3gt5Tgtrgg4La94LeQ4La24LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrgg4LeD4LeS4Lav4LeUIOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDg0MjU3Njk5NDE0NDYwNDgyMSI+IkNETUEg4Lan4LeQ4La24LeK4La94LanIOC2tOC3kuC3hOC3kuC2p+C3lOC2uCDgt4Pgt5jgtqLgt5Tgt4Ag4LaH4La74La54LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJmb3JtQ2RtYVByb3Zpc2lvbmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2MDQ4NDgwOTUzMTU0MjE0MjUiPiJDRE1BIOC2r+C3lOC2u+C2muC2ruC2sSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgtrgg4LeD4LeY4Lai4LeU4LeAIOC2h+C2u+C2ueC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBtc2dpZD0iMTk5NDE5MzUzODgwMjMxNDE4NiI+IuC2uuC3meC2r+C3lOC2uOC2pyBDRE1BIOC2tOC3iuKAjeC2u+C2reC3kuC2tOC3j+C2r+C2sSDgtobgtrvgtrjgt4rgtrcg4Laa4LeS4La74LeT4La44LanIOC2ieC2qeC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtoXgtrHgt4Dgt4Hgt4rigI3gtrog4La94LeZ4LeDIENETUEg4La04LeK4oCN4La74Lat4LeS4La04LeP4Lav4LaxIOC2huC2u+C2uOC3iuC2tyDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbG9jYXRpb25VcGRhdGVzIiBtc2dpZD0iNzc4NTQwODI1MzM2NDMzNTc0MCI+IuC3g+C3iuC2ruC3j+C2sSDgtrrgt4/gt4Dgtq3gt4rgtprgt4/gtr3gt5PgtrEg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSIxMTIwNzQxNTU3ODkxNDM4ODc2Ij4i4LeD4LeK4Lau4LeP4Lax4LeT4La6IOC2uuC3j+C3gOC2reC3iuC2muC3j+C2veC3kuC2sSDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4La74Lea4Lap4LeS4La64Led4LeA4LeZ4Lax4LeKIOC3g+C2tuC2vS/gtoXgtrbgtr0g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI3ODU1MjU5NDYxMjY4NzM0OTE0Ij4i4La04LeS4La74LeS4Laa4LeK4LeD4LeU4La44LeKIOC2nOC3lOC2q+C3j+C2guC2nCDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hlY2tpblByb3BlcnRpZXMiIG1zZ2lkPSI0MDI0NTI2OTY4NjMwMTk0MTI4Ij4i4La04LeS4La74LeS4Laa4LeK4LeD4LeU4La44LeKIOC3g+C3muC3gOC3j+C3gCDgtrjgtpzgt5LgtrHgt4og4LaL4Lat4LeK4LeB4LeK4oCN4La74Lea4Lar4LeSIOC2muC3hSDgtpzgt5Tgtqvgt4/gtoLgtpwg4LeA4LeZ4LatIOC2muC3kuC2uuC3gOC3k+C2uOC3ii/gtr3gt5Lgt4Dgt5Pgtrjgt4og4La04LeS4LeA4LeS4LeD4LeU4La4IOC3g+C2s+C3hOC3jyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr0g4La34LeP4LeA4LeS4Lat4La64LanIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRHYWRnZXQiIG1zZ2lkPSI3NzY5MDUzMzkwMTU4NjM0NzEiPiLgt4Dgt5LgtqLgtqfgt4og4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEdhZGdldCIgbXNnaWQ9IjgyNjEzMjY5Mzg1OTkwNDkyOTAiPiLgtprgt5TgtrjgtrEg4LeA4LeS4Lai4Lan4La6IOC2muC3lOC2uOC2sSDgtrrgt5ngtq/gt5Tgtrjgt5ngtrHgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC2vSDgt4Tgt5Dgtprgt5Lgtq8g4La64Lax4LeK4LaxIOC2tOC2r+C3iuC2sOC2reC3kuC2uuC2pyDgtrTgt5Dgt4Dgt4Pgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4LaH4Lat4LeSIOC2uuC3meC2r+C3lOC2uOC2muC2pyDgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2tOC3lOC2r+C3iuC2nOC2veC3kuC2miDgtq/gtq3gt4rgtq0g4LeA4La94LanIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiDgtr3gtrbgt48g4Lav4LeS4La6IOC3hOC3kOC2mi4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr0g4La34LeP4LeA4LeS4Lat4La64LanIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeVBob25lU3RhdGUiIG1zZ2lkPSI4NDIzOTIzNzc3NjU5MjkyMjI4Ij4i4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2reC2reC3iuC3gOC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9IjEwMjk4Nzc1MjkwMDc2ODY3MzIiPiLgtovgtrTgt4/gtoLgtpzgtrrgt5og4Lav4LeU4La74Laa4Lau4LaxIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtrTgt4/gtr3gtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4LaH4Lat4LeSIOC2uuC3meC2r+C3lOC2uOC2pyDgtpTgtrbgtqcg4Lax4LeS4LeA4Lea4Lav4Lax4La64LeZ4Lax4LeKIOC2reC3nOC2u+C3gCDgtqLgt4/gtr0g4La44LeP4La74LeUIOC2muC3kuC2u+C3k+C2uCwg4Lav4LeU4La74Laa4Lau4LaxIOC2u+C3muC2qeC3kuC2uuC3neC3gCDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeD4LeEIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrgg4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iOTE3ODIyODUyNDUwNzYxMDQ4NiI+IuC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtq3gtq3gt4rgt4Dgtrog4LeD4LeEIOC2heC2seC2seC3iuKAjeC2uuC2reC3j+C3gOC2uiDgtprgt5Lgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjE2MzkyMTI3NzE4MjYxMjU1MjgiPiLgtovgtrTgt4/gtoLgtpzgtrrgt5og4Lav4LeU4La74Laa4Lau4LaxIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtofgtrjgtq3gt5Tgtrgg4LeD4Laa4LeK4oCN4La74LeS4La6IOC3gOC3lOC3gOC2reC3iiDgt4Pgt4Qg4LaH4La44Lat4LeU4La44Laa4LeS4Lax4LeKIOC2r+C3lOC2u+C3g+C3iuC2riDgtoXgtoLgtprgtrog4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3lOC3gOC2reC3iiDgtq/gt5Tgtrvgtprgtq7gtrEg4LaF4LaC4Laa4La6IOC3g+C3hCDgtovgtrTgt4/gtoLgtpwgSUQg4LeE4Laz4LeU4Lax4LePIOC2nOC3kOC2seC3k+C2uOC2pyDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MzE3MzE0MzUwMTE0OTUwMTUiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4Lax4LeS4Lax4LeK4Lav4LeZ4Lax4LeKIOC3gOC3kOC3heC2muC3iuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzM0ODAxODc5NDE0OTYxMzAiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lax4LeS4Lax4LeK4Lav4LanIOC2uuC3j+C2uOC3meC2seC3iiDgt4Dgt4XgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzMxMTMxOTgyNDQwMDQ0Nzg2OCI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtrHgt5LgtrHgt4rgtq/gtqcg4La64LeP4La44LeZ4Lax4LeKIOC3gOC3kOC2veC3kOC2muC3iuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg1NTkxMDA2NzczNzI5Mjg3NTQiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lax4LeS4Lax4LeK4Lav4LanIOC2uuC3j+C2uOC3meC2seC3iiDgt4Dgt5Dgtr3gt5Dgtprgt4rgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc4NzAzNDcyMjYxNjM1MDQxNyI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeE4LedIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RldmljZVBvd2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDkyODYyMjQ3MDk4MDk0MzIwNiI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgtrbgtr0g4Lac4LeQ4Lax4LeK4LeA4LeT4La4IOC3hOC3nSDgt4Dgt5Dgt4Pgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY4OTg2Mjg3ODk4NDYzMTgzMSI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeE4LedIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2MDM3MDU3MzQ4NDYzMTMxMDMyIj4i4Lav4LeU4La74Laa4Lau4Lax4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Pgt4Qg4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZhY3RvcnlUZXN0IiBtc2dpZD0iMzcxNTIyNTQ5MjY5NjQxNjE4NyI+IuC2muC2u+C3iuC2uOC3j+C2seC3iuC2reC3geC3j+C2veC3jyDgtrTgtrvgt5Pgtprgt4rgt4Lgtqsg4LaG4Laa4LeP4La74La6IOC2reC3lOC3hSDgtrDgt4/gt4DgtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmFjdG9yeVRlc3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NTIwNTkzMTgzNTk2NTMwOTEiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4Lav4LeY4Lap4LeP4LaC4LacIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4La04LeS4LeA4LeS4LeD4LeU4La4IOC3g+C2s+C3hOC3jyDgtoXgt4Dgt4Pgtrsg4Lav4LeT4La44LeZ4Lax4LeKIOC2tOC3hOC3hSDgtrjgtqfgt4rgtqfgtrjgt5og4Lax4LeS4La04LeQ4LeA4LeU4La44LeK4Laa4La74LeUIOC2tOC2u+C3k+C2muC3iuC3guC2q+C2uuC2muC3iiDgtr3gt5ngt4Mg4Law4LeP4LeA4Lax4La6IOC2muC2u+C2seC3iuC2sS4g4Lax4LeS4La04LeQ4LeA4LeU4La44LeK4Laa4La74LeUIOC2tOC2u+C3k+C2muC3iuC3guC2qyDgtobgtprgt4/gtrvgtrrgt5ngtrHgt4og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2sOC3j+C3gOC2seC2uiDgt4DgtrEg4LeA4LeS4LanIOC2tOC2uOC2q+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxMzY2NDQ5OTAzMTkyNDQ4MDIiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4Lav4LeY4Lap4LeP4LaC4LacIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4La04LeS4LeA4LeS4LeD4LeU4La4IOC3g+C2s+C3hOC3jyDgtoXgt4Dgt4Pgtrsg4Lav4LeT4La44LeZ4Lax4LeKIOC2tOC3hOC3hSDgtrjgtqfgt4rgtqfgtrjgt5og4Lax4LeS4La04LeQ4LeA4LeU4La44LeK4Laa4La74LeUIOC2tOC2u+C3k+C2muC3iuC3guC2q+C2uuC2muC3iiDgtr3gt5ngt4Mg4Law4LeP4LeA4Lax4La6IOC2muC2u+C2seC3iuC2sS4g4Lax4LeS4La04LeQ4LeA4LeU4La44LeK4Laa4La74LeUIOC2tOC2u+C3k+C2muC3iuC3guC2qyDgtobgtprgt4/gtrvgtrrgt5ngtrHgt4og4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2sOC3j+C3gOC2seC2uiDgt4DgtrEg4LeA4LeS4LanIOC2tOC2uOC2q+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlciIgbXNnaWQ9IjY2MjcxOTIzMzMzNzM0NjUxNDMiPiLgtrbgt5Lgtq3gt5TgtrTgtq0g4LeD4LeQ4Laa4LeD4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVyIiBtc2dpZD0iNzM3MzQ0NzkyMDk3NzYyNDc0NSI+IuC2tOC2r+C3iuC2sOC2reC3kiDgtrbgt5Lgtq3gt5TgtrTgtq0g4LeD4LeQ4Laa4LeD4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0V2FsbHBhcGVySGludHMiIG1zZ2lkPSIzMjc4NjA4MTY1OTc3NzM2NTM4Ij4i4LaU4La24Lac4LeaIOC2tuC3kuC2reC3lOC2tOC2reC3miDgtrTgt4rigI3gtrvgtrjgt4/gtqvgtrog4LeD4LeQ4Laa4LeD4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVySGludHMiIG1zZ2lkPSI4MjM1Nzg0Mzg0MjIzNzMwMDkxIj4i4La04Lav4LeK4Law4Lat4LeSIOC2tuC3kuC2reC3lOC2tOC2reC3miDgtrTgt4rigI3gtrvgtrjgt4/gtqsg4LaJ4Laf4LeSIOC3g+C2muC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXN0ZXJDbGVhciIgbXNnaWQ9IjIzMTU3NTA0MjMxMzk2OTczOTciPiLgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq3gt4Hgt4/gtr3gt48g4LeD4LeU4La04LeU4La74LeU4Lav4LeK4Lav4LanIOC2tOC2r+C3iuC2sOC2reC3kuC2uiDgtrHgt5Dgt4Dgtq0g4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hc3RlckNsZWFyIiBtc2dpZD0iMzY2NTM4MDQ5MjYzMzkxMDIyNiI+IuC3g+C3kuC2uuC2veC3lCDgtq/gtq3gt4rgtq0g4La44LeQ4Laa4LeT4La44LeZ4Lax4LeKLCDgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Mg4Laa4LeS4La74LeT4La44LeZ4Lax4LeKIOC3g+C3hCDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4LeK4Lau4LeP4La04Lax4La64LeZ4Lax4LeKIOC2keC3hOC3kiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtq0g4La04Lav4LeK4Law4Lat4LeS4La6IOC2seC3kOC3gOC2rSDgt4Pgt5Dgtprgt4Pgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lIiBtc2dpZD0iMjAyMTYxNDgyOTU5MTc3NTY0NiI+IuC3gOC3muC2veC3j+C3gCDgt4Pgt5Dgtprgt4Pgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxODk2MzQxNDM4MTUxMTUyODgxIj4i4Lan4LeQ4La24LeK4La94LanIOC2lOC2u+C2veC3neC3g+C3lOC3gOC3miDgt4Dgt5rgtr3gt4/gt4Ag4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg1NTcwMjczMDczODAyMCI+IuC2r+C3lOC2u+C2muC2ruC2sSDgtpTgtrvgtr3gt53gt4Pgt5Tgt4Dgt5og4LeA4Lea4La94LeP4LeAIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44Laa4LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lWm9uZSIgbXNnaWQ9IjI5NDUwNzk4MDEwMTMwNzczNDAiPiLgt4Dgt5rgtr3gt48g4Laa4La94LeP4La04La6IOC3g+C3kOC2muC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNjc2OTgzNzEyMzE1ODI3NjQ1Ij4i4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2muC3j+C2vSDgtprgtr3gt4/gtrTgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0OTk5NDM0ODg0MzY2MzMzOTgiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LeA4Lea4La94LePIOC2muC2veC3j+C2tOC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iNDgyOTI2MjM0OTY5MTM4Njk4NiI+IkFjY291bnRNYW5hZ2VyU2VydmljZSDgtr3gt5ngt4Mg4La04LeZ4Lax4LeTIOC3g+C3kuC2p+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY291bnRNYW5hZ2VyU2VydmljZSIgbXNnaWQ9IjE5NDg0NTU1NTIzMzM2MTU5NTQiPiJBY2NvdW50QXV0aGVudGljYXRvcnMg4LeA4LeZ4LatIOC2h+C2uOC2reC3lOC2uOC3iiDgtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBY2NvdW50cyIgbXNnaWQ9IjEwODY3OTU0Njc3NjAxMjIxMTQiPiLgtovgtrTgt4/gtoLgtpzgtrrgt5og4LaH4Lat4LeSIOC2nOC3kuC2q+C3lOC2uOC3iiDgt4Pgt5zgtrrgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjc0MTQ5NjUzNDc2OTY2MDAyNyI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4Lav4Lax4LeK4Lax4LePIOC2nOC3kuC2q+C3lOC2uOC3iiDgtr3gt5Dgtrrgt5Lgt4Pgt4rgtq3gt5Tgt4Dgtprgt4og4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrYg4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC3nOC2pyDgtofgtq3gt5Ig4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgt4Pgt4/gtq/gt48g4LaH4Lat4LeSIOC2nOC3kuC2q+C3lOC2uOC3iiDgtrjgt5Pgtqcg4LaH4Lat4LeU4LeF4Lat4LeKIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NDgzMTY4MjI0NTE4MDczODIiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LeA4LeS4LeD4LeS4Lax4LeKIOC2r+C2seC3iuC2seC3jyDgtpzgt5Lgtqvgt5Tgtrjgt4og4La94LeQ4La64LeS4LeD4LeK4Lat4LeU4LeA4Laa4LeKIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La2IOC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgt5zgtqcg4LaH4Lat4LeSIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LeD4LeP4Lav4LePIOC2h+C2reC3kiDgtpzgt5Lgtqvgt5Tgtrjgt4og4La44LeT4LanIOC2h+C2reC3lOC3heC2reC3iiDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjUyNjU5MDg0ODExNzI3MzY5MzMiPiLgtpzgt5Lgtqvgt5Tgtrjgt4og4LeD4LeP4Lav4Lax4LeK4LaxIOC3g+C3hCDgtrjgt5TgtrvgtrTgtq8g4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXV0aGVudGljYXRlQWNjb3VudHMiIG1zZ2lkPSI1NDcyMTI0Mjk2OTA4OTc3MjYwIj4i4Lac4LeS4Lar4LeU4La44LeKIOC3g+C3kOC2r+C3k+C2uOC2pyDgt4Pgt4Qg4La74LeE4LeD4LeKIOC2tOC2ryDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrgg4LeD4LeEIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtprgt5Lgtrvgt5Pgtrgg4LaH4Lat4LeU4LeF4Lat4LeK4LeAIEFjY291bnRNYW5hZ2VyIOC2nOC3miDgtpzgt5Lgtqvgt5Tgtrjgt4og4LeD4Lat4LeK4oCN4La64LeP4La04LaxIOC3hOC3kOC2muC3kuC2uuC3j+C3gOC2seC3iiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2muC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQWNjb3VudHMiIG1zZ2lkPSI0OTgzMTI2MzA0NzU3MTc3MzA1Ij4i4Lac4LeS4Lar4LeU4La44LeKIOC2keC2muC2reC3lCDgtprgtrvgtrHgt4rgtrEg4LeE4LedIOC2ieC3gOC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9Ijg2OTgyOTU2MjU0ODgyOTI1MDYiPiLgtpzgt5Lgtqvgt5Tgtrjgt4og4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uCwg4LeD4LeEIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrgg4LeD4LeEIOC2lOC3gOC3lOC2seC3iuC2nOC3miDgtrjgt5TgtrvgtrTgtq8g4La44LeQ4Laa4LeT4La4IOC2huC2r+C3kyDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Ig4LeD4LeS4Lav4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iMjM1NDgxMzk2MTYzODc3NjQyIj4i4LaL4La04LeP4LaC4Lac4La64LeaIOC2h+C2reC3kiDgtpzgt5Lgtqvgt5Tgtrjgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZUNyZWRlbnRpYWxzIiBtc2dpZD0iNzk4NDIyNzE0NzQwMzM0NjQyMiI+IuC3g+C2reC3iuKAjeC2uuC3j+C2tOC2sSDgtqfgt53gtprgtrEg4LaJ4La94LeK4La94LeT4La4IOC3g+C2s+C3hOC3jyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjQ5NTEwMjc5NjQzNDg5NzQ3NzMiPiLgtqLgt4/gtr0g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64Lax4LeKIOC2tuC3kOC2veC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiLgtprgt5TgtrjgtrEg4Lai4LeP4La9IOC2tOC3gOC2reC3kuC2seC3iuC2seC3miDgtq8g4LeD4LeEIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2rSDgtq8g4LaG4Lav4LeTIOC2ouC3j+C2vSDgt4PgtrbgtrPgtq3gt48g4Lac4LeQ4LaxIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrbgt5Dgtr3gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jcmVhdGVOZXR3b3JrU29ja2V0cyIgbXNnaWQ9IjgwMTg3NTgxMzY0MDQzMjM2NTgiPiLgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4Lai4LeP4La9IOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iMzQwMzA2MjE4Nzc3OTcyNDE4NSI+IuC2i+C2tOC2muC2u+C2q+C2uuC2pyDgtqLgt4/gtr0g4Laa4LeZ4LeA4Lax4LeS4La64Lax4LeKIOC3g+C3kOC2r+C3k+C2uOC2pyDgt4Pgt4Qg4Lai4LeP4La9IOC2tOC3iuKAjeC2u+C3nOC2p+C3neC2muC3neC2vSDgtoXgtrfgt5Lgtrvgt5TgtqDgt5Ig4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtovgtrTgtprgtrvgtqvgtrrgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeK4Lat4La74LeK4Lai4LeP4La94La64LanIOC2r+C2reC3iuC2rSDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LeA4LeS4Law4LeS4La64Lax4LeKIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2u+C2uiDgt4Pgt4Qg4LaF4Lax4LeZ4Laa4LeU4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrTgtrrgtrrgt5IsIOC2keC2seC3kuC3g+C3jyDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2r+C2reC3iuC2rSDgtoXgtrHgt4rgtq3gtrvgt4rgtqLgt4/gtr3gtrrgtqcg4La64LeQ4LeA4LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUFwblNldHRpbmdzIiBtc2dpZD0iNTA1NjYwMTU5Njc1NzUxODk2Ij4i4Lai4LeP4La94La64LeaIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Pgt4Qg4Lac4La44Lax4LeP4Lac4La44LaxIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEv4LaF4La94LeK4La94LePIOC2nOC3kOC2seC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MzMzNzk4ODg2NDEyNzE0MTkzIj4i4LaV4Lax4LeR4La4IEFQTiDgtpHgtprgtpog4Lax4LeS4La64LeU4Lat4LeU4LeAIOC3g+C3hCDgtq3gt5zgtqcg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCDgt4Dgt5DgtrHgt5Ig4Lai4LeP4La9IOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4Lai4LeP4La9IOC2heC2reC3lOC2u+C3lCDgtofgtrvgt5Pgtrjgtqcg4LeD4LeEIOC3g+C3neC2r+C3kuC3g+C3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2h+C2reC3kOC2uOC3iuC3gOC3kuC2pyDgtpTgtrbgtpzgt5og4LaF4Lax4LeU4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4LaL4La04LeP4LaC4LacIOC2ouC3j+C2vSDgtrTgt5Dgtprgt5Dgtqfgt4rgtqfgt5Qg4LaF4Law4LeT4Laa4LeK4LeC4Lar4La6LOC2huC2tOC3g+C3lCDgtq/gt5Lgt4Hgt4/gtpzgtq0g4Laa4LeS4La74LeT4La4IOC3hOC3nSDgt4Dgt5ngtrHgt4Pgt4rgtprgt5Lgtrvgt5Pgtrgg4LeD4LeS4Lav4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4Lat4LeS4La24LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iOTU4ODg0MjkxNDU0MzI3MzA5Ij4i4Lai4LeP4La9IOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlTmV0d29ya1N0YXRlIiBtc2dpZD0iNjc4OTEyMzkxMjQ3NjQxNjIxNCI+IuC2ouC3j+C2vSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Dgtrrgt5og4Lat4Lat4LeK4LeA4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjU5NTI1ODQ5NjQzNzMwMTc5NjAiPiLgtqfgt5ngtq/gtrvgt4og4Laa4La74LaxIOC2veC2ryDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iMTUyNDQ0MTM0NDQxMjMxOTc4MCI+IuC2p+C3meC2r+C2u+C3iiDgtprgt4Ug4Lai4LeP4La9IOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uuC3miDgtq3gtq3gt4rgt4Dgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjE0MDA2NjYwMTI2NzE2NDg3NDEiPiLgtrTgt4Pgt5Tgtrbgt5Lgtrjgt4og4Lav4Lat4LeK4LatIOC2t+C3j+C3gOC3kuC2rSDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUJhY2tncm91bmREYXRhU2V0dGluZyIgbXNnaWQ9IjUzNDc3Mjk1Nzg0Njg3NDQzNzkiPiLgtrTgt4Pgt5Tgtrbgt5Lgtrjgt4og4Lav4Lat4LeK4LatIOC2t+C3j+C3gOC3kuC2reC3jyDgt4Pgt5Dgtprgt4Pgt5Pgtrgg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUyMDIwMTI5NDkyNDcwNDAwMTEiPiJXaS1GaSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4DgtrHgt4og4La24LeQ4La94LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTAwMjc5ODA3NzM4NzgwMzcyNiI+IldpLUZpIOC3g+C2tuC2vSDgtrbgt4Ag4LeD4LeEIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2rSBXaS1GaSDgtovgtrTgt4/gtoLgtpwg4LeA4La9IOC2seC2uOC3iiDgtobgtq/gt5MgV2ktRmkg4Lai4LeP4La94Laa4La74Lar4La64LeaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrbgt5Dgtr3gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI2NTUwNjQxMTg4NzQ5MTI4MDM1Ij4iV2ktRmkg4LeA4La94LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Lgtrgg4LeD4LeEIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpU3RhdGUiIG1zZ2lkPSI3MTM3OTUwMjk3Mzg2MTI3NTMzIj4iV2ktRmkg4La04LeK4oCN4La74LeA4Lea4LeBIOC3g+C3iuC2ruC3j+C2seC2uuC2seC3iiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3k+C2uOC2pyDgt4Pgt4Qg4LeA4LeS4LeD4Lax4LeK4Law4LeSIOC3gOC3k+C2uOC2pyDgt4Pgt4QsIFdpLUZpIOC2ouC3j+C2vSDgt4PgtrPgt4Tgt48g4LaL4La04LeP4LaC4Lac4La64LeaIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3g+C2uuC2pyDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBtc2dpZD0iMTM2ODI1Mzg3MTQ4MzI1NDc4NCI+IldpLUZpIOC2tuC3hOC3lOC3gOC3kuC2muC3j+C3geC2sSDgtrTgt5Lgt4Xgt5Lgtpzgt5DgtrHgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzk2OTc3NDAyMTI1NjMzNjU0OCI+IuC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgtqcg4La04La44Lar4Laa4LeKIOC2seC3nOC3gCBXaS1GaSDgtqLgt4/gtr3gtrrgt5og4LaH4Lat4LeSIOC3g+C3kuC2uuC2veC3lOC2uCDgtovgtrTgt4/gtoLgtpzgt4Dgtr3gtqcg4La64LeQ4LeA4LeWIOC2tOC3kOC2muC3kOC2p+C3iuC2p+C3lCDgtrbgt4Tgt5Qg4LeA4LeS4Laa4LeP4LeBIOC2veC3kuC2tOC3kuC2sSDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiBub24tbXVsdGljYXN0IOC2huC2muC3j+C2u+C2uuC2pyDgt4Dgtqngt48g4LeA4LeQ4Lap4LeSIOC2tuC2veC2uuC2muC3iiDgtrjgt5ngt4Tgt5Lgtq/gt5Mg4La34LeP4LeA4LeS4Lat4LePIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUxOTQ5NzA2MDI1MzQ5OTI2Ij4i4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uuC2pyDgtrTgtrjgtqvgtprgt4og4Lax4Lec4LeAIFdpLUZpIOC2ouC3j+C2veC2uuC3miDgtofgtq3gt5Ig4LeD4LeS4La64La94LeU4La4IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtrrgt5Dgt4Dgt5Yg4La04LeQ4Laa4LeQ4Lan4LeK4Lan4LeUIOC2tuC3hOC3lOC3gOC3j+C3hOC2miDgtr3gt5LgtrTgt5LgtrEg4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2veC3kOC2tuC3mi4g4La24LeE4LeU4LeA4LeP4LeE4LaaIOC2seC3kOC2reC3kiDgtobgtprgt4/gtrvgtrrgtqcg4LeA4Lap4LePIOC3gOC3kOC2qeC3kiDgtrbgtr3gtrrgtprgt4og4La44LeZ4LeE4LeS4Lav4LeTIOC2t+C3j+C3gOC3kuC2reC3jyDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGhBZG1pbiIgbXNnaWQ9IjYwMDY5NjczNzM5MzU5MjY2NTkiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4i4LeD4LeK4Lau4LeP4Lax4LeT4La6IOC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgtqfgt5Dgtrbgt4rgtr3gtqfgt4rgtrrgtprgt4og4LeD4LeQ4Laa4LeD4LeT4La44LanIOC3g+C3hCDgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Mg4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgtq/gt5Tgtrvgt4Pgt4rgtq4g4LaL4La04LeP4LaC4LacIOC3g+C2uOC2nCDgtrrgt5Tgtpzgt4Ug4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+IuC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtrTgt5ngtq/gt5ngt4Pgt5Ig4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3gyDgtprgt5Lgtrvgt5PgtrjgtqcsIOC3g+C3hCDgtq/gt5Tgtrvgt4Pgt4rgtq4g4LaL4La04LeP4LaC4LacIOC2nOC3gOC3muC3guC2q+C2uuC2pyDgt4Pgt4Qg4La64LeU4Lac4La9IOC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI0MTk1OTA3MDEwNjEwMjA1NzAzIj4iV2lNQVgg4LeA4LeZ4Lat4LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgtrvgtrHgt4rgtrEg4LeE4LedIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaW1heFN0YXRlIiBtc2dpZD0iNjM2MDEwMjg3NzI2MTk3ODg4NyI+IldpTUFYIOC3g+C2tuC2vSDgtrbgt4Ag4LeD4LeEIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2rSDgtpXgtrHgt5HgtrggV2lNQVgg4Lai4LeP4La94La64LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrHgt5Lgt4Hgt4rgtqDgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2ltYXhTdGF0ZSIgbXNnaWQ9IjI0MDUwNDIyNjcxMzE0OTY1NzkiPiJXaU1BWCDgtq3gtq3gt4rgt4Dgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMxNTY0NTY1MDQwODQyMDE4MDUiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrogV2lNQVgg4Lai4LeP4La9IOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgt4Dgt5Lgt4PgtrHgt4rgtrDgt5Ig4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiJXaU1BWCDgtqLgt4/gtr3gtrrgtrHgt4rgtqcg4Lav4LeU4La74Laa4Lau4Lax4La6IOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeEIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGgiIG1zZ2lkPSI2MTI3NzY5MzM2MzM5Mjc2ODI4Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC2i+C2tOC3j+C2guC2nCDgt4Pgtrjgtp8g4La64LeU4Lac4La9IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQ4MDcyMjE4MTg1MjQzODYyOCI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeA4LeS4Lax4LeK4oCN4La64LeP4LeD4La6IOC2tuC3kOC2veC3kuC2uOC2pywg4LeD4LeQ4Laa4LeD4LeT4La44LanIOC3g+C3hCDgtrrgt5Tgtpzgtr0g4Laa4LeFIOC2i+C2tOC3j+C2guC2nCDgt4Pgtrjgtp8g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4Lax4LeKIOC2tOC3kuC3heC3kuC2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19ibHVldG9vdGgiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzMjA3MTA2MzI0NDUyMzEyNzM5Ij4i4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Pgtrog4Lav4LeQ4Laa4LeT4La44LanLCDgtrrgt5Tgtpzgtr0g4LaL4La04LeP4LaC4LacIOC3g+C2uOC2nyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4DgtrHgt4og4LeD4LeQ4Laa4LeD4LeT4La44LanIOC3g+C3hCDgtrfgt4/gtrvgtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9uZmMiIG1zZ2lkPSI0NDIzMzUxMjc0NzU3ODc2OTUzIj4i4LaG4LeD4Lax4LeK4LaxIOC2muC3iuC3guC3muC2reC3iuKAjeC2uyDgt4PgtrHgt4rgtrHgt5Lgt4Dgt5rgtq/gtrHgtrog4La04LeP4La94Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX25mYyIgbXNnaWQ9IjcxMjA2MTE4MTk0MDE3ODk5MDciPiLgtobgt4PgtrHgt4rgtrEg4Laa4LeK4LeC4Lea4Lat4LeK4oCN4La7IOC3g+C2seC3iuC2seC3kuC3gOC3muC2r+C2sSAoTkZDKSDgtqfgt5Dgtpzgt4osIOC2tOC2reC3iiwg4LeD4LeEIOC2muC3kuC2uuC3gOC2seC3iuC2seC2seC3iiDgt4Pgtrjgtp8g4LeD4Lax4LeK4Lax4LeS4LeA4Lea4Lav4Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Rpc2FibGVLZXlndWFyZCIgbXNnaWQ9IjM1OTg0OTYzMDE0ODY0MzkyNTgiPiLgtpTgtrbgtpzgt5og4Lat4LeS4La74La64LeaIOC2heC2nOC3lOC2vSDgtoXgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iNjAzNDIwMzA2NTA3NzEyMjk5MiI+IuC2uuC2reC3lOC2u+C3lCDgtoXgtpzgt5Tgtr0g4LeD4LeEIOC2leC2seC3keC2uCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq0g4La44LeU4La74La04LavIOC2huC2u+C2muC3iuC3guC3j+C3gOC2muC3iiDgtoXgtrbgtr0g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngt4Tgt5Ig4LaL4Lav4LeP4LeE4La74Lar4La64Laa4LeKIOC3gOC2seC3iuC2seC3miDgtrTgt5Dgtrjgt5Lgtqvgt5ngtrEg4LaH4La44Lat4LeU4La44Laa4LeKIOC2veC3kOC2tuC3meC2r+C3iuC2r+C3kywg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgt4DgtrEg4LaF4Lat4La7IOC2h+C2uOC2reC3lOC2uCDgtoXgt4Dgt4Pgt4/gtrEg4LeA4LaxIOC3gOC3kuC2pyDgtrrgtq3gt5Tgtrvgt5Qg4LaF4Lac4LeU4La9IOC2seC3kOC3gOC2rSDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFN5bmNTZXR0aW5ncyIgbXNnaWQ9IjYyMDE4MTAwMDgyMzA1MDMwNTIiPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2muC3kuC2uuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSIyNzA2NzQ1Njc0NTY5Njc4NjQ0Ij4i4Lac4LeS4Lar4LeU4La4IOC3g+C2s+C3hOC3jyDgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaL4Lav4LeP4LeE4La74Lar4La64Laa4LeKIOC2veC3meC3gywg4Lac4LeS4Lar4LeU4La44Laa4LeKIOC3g+C2uOC2nyDgtrTgt5Tgtq/gt4rgtpzgtr0g4La64LeZ4Lav4LeU4La4IOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgtq/gt5Dgtrrgt5Ig4La44LeZ4La64LanIOC3hOC2s+C3lOC2seC3jyDgtpzgtq0g4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI1NDA4Njk0ODc1NzkzOTQ1MzE0Ij4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uCDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIOC3g+C3hCDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTeW5jU2V0dGluZ3MiIG1zZ2lkPSI4OTU2MjYyNTkxMzA2MzY5ODY4Ij4i4Lac4LeS4Lar4LeU4La4IOC3g+C2s+C3hOC3jyDgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2i+C2r+C3j+C3hOC2u+C2q+C2uuC2muC3iiDgtr3gt5ngt4MsIOC2nOC3kuC2q+C3lOC2uCDgt4Pgtrjgtp8g4La04LeU4Lav4LeK4Lac4La9IOC2uuC3meC2r+C3lOC2uCDgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4LeS4La74LeT4La4IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La34LeP4LeA4LeS4LatIOC2muC2vSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1N0YXRzIiBtc2dpZD0iNzM5NjU3NzQ1MTM2MDIwMjQ0OCI+IuC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgtprgt5Lgtrvgt5Pgtrjgt5og4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSIxNTEwMTQzNzYxNzU3NjA2MTU2Ij4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uOC3miDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4og4LaJ4Lat4LeS4LeE4LeP4LeD4La6IOC3g+C3hCDgtprgt5ngtq3gtrvgtrjgt4og4Lav4Lat4LeK4LatIOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgt4Dgt5Mg4LaH4Lat4LeS4Lav4LeQ4La64LeSIOC2h+C2reC3lOC2veC2reC3iiDgtpzgt5Lgtqvgt5Tgtrgg4LeD4Laz4LeE4LePIOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgtprgt5Lgtrvgt5Pgtrjgt5og4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI0NzU2NjA5NjM3MDUzMzUzMzE4Ij4i4Lav4LeP4La64LaaIOC3gOC3liDgt4PgtoLgtpzgt4rigI3gtrvgt4Qg4Laa4LeS4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjU1NTcwNTg5MDc5MDYxNDQ1MDUiPiLgt4Dgtrvgt4rgtq3gtrjgt4/gtrEg4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3g+C2guC2nOC3iuKAjeC2u+C3hCDgtpzgt5DgtrEg4LeA4LeS4LeD4LeK4Lat4La7IOC2veC3kOC2tuC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N1YnNjcmliZWRGZWVkc1dyaXRlIiBtc2dpZD0iOTAxNTI0NjMyNTQwODIwOTI5NiI+IuC2r+C3j+C2uuC2miDgt4Dgt5Yg4LeD4LaC4Lac4LeK4oCN4La74LeEIOC2veC3kuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1dyaXRlIiBtc2dpZD0iNjkyODkzMDE4ODgyNjA4OTQxMyI+IuC2lOC2tuC2nOC3miDgt4Dgtrvgt4rgtq3gtrjgt4/gtrEg4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3g+C2guC2nOC3iuKAjeC2u+C3hCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3g+C2guC2nOC3iuKAjeC2u+C3hCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeK4LeA4La94LeS4Lax4LeKIOC3gOC3meC2seC3g+C3iiDgtprgtr0g4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI0MTA3MTAxNTI1NzQ2MDM1NzE4Ij4i4LaU4La2IOC3gOC3kuC3g+C3kuC2seC3iiDgt4Hgtrbgt4rgtq/gtprgt53gt4Lgtrrgtqcg4LaH4Lat4LeU4LeF4Lat4LeK4Laa4Lec4LanIOC2h+C2reC3kiDgtprgt5zgtrHgt4rgtq/gt5rgt4Pgt5Ig4Laa4LeS4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZERpY3Rpb25hcnkiIG1zZ2lkPSI2NTk2MTQ2MDAzMzg5MDQyNDMiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LeB4La24LeK4LavIOC2muC3neC3guC2uuC3miDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC2nOC2tuC2qeC3jyDgtprgtrsg4Lat4LeS4La24LeS4La6IOC3hOC3kOC2muC3kiDgt4DgtqDgtrEsIOC2seC2uOC3iiwg4LeA4LeP4Laa4LeK4oCN4La64LaC4LeBIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjIxODMxMTA0MDIzMTQ0NDExMDYiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgt5LgtrHgt4og4LaF4La74LeK4LauIOC2r+C3kOC2muC3iuC3gOC3liDgt4Hgtrbgt4rgtq8g4Laa4Led4LeC4La64LanIOC3gOC2oOC2sSDgtpHgtprgtq3gt5Qg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iODE4NTM4NTcxNjI1NTA2NTI5MSI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgt4Hgtrbgt4rgtq/gtprgt53gt4Lgtrog4Lat4LeU4LeF4LanIOC2heC2veC3lOC2reC3iiDgt4DgtqDgtrEg4La94LeS4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4i4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC2huC2oOC2uuC2seC2uiDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6IOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFJlYWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MjM1MzQxNTE1NjA1NTU5Njc3Ij4i4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC2huC2oOC2uuC2seC2uiDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6IOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM2NDI0NzMyOTIzNDgxMzIwNzIiPiLgtoXgtrHgt4/gtpzgtq0g4LaL4La04LeP4LaC4Lac4LeA4La9IOC2veC2tuC3j+C2nOC2rSDgt4Tgt5Dgtprgt5IgVVNCIOC2huC2oOC2uuC2seC2uiDgt4PgtrPgt4Tgt48g4LaF4LeA4LeD4La74La64Laa4LeKIOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU5MTQ0MDI2ODQ2ODU4NDg4MjgiPiLgtoXgtrHgt4/gtpzgtq0g4LaL4La04LeP4LaC4Lac4LeA4La9IOC2tOC3kOC3gOC2reC3meC2sSBTRCDgtprgt4/gtqngt4og4La04LatIOC3g+C2s+C3hOC3jyDgtoXgt4Dgt4Pgtrvgtrrgtprgt4og4La04LeS4La74LeS4Laa4LeK4LeD4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+IuC2lOC2tuC2nOC3miBVU0Ig4LaG4Lag4La64Lax4La64LeaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4IOC3hOC3nSDgtrjgt5Dgtprgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODgwNTY5MzYzMDA1MDQ1ODc2MyI+IuC2lOC2tuC2nOC3miBTRCDgtrTgtq3gt5og4LaF4Lax4LeK4Lat4La74LeK4Lac4LatIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrgg4LeE4LedIOC2uOC3kOC2muC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNzU0MDYyOTk0NDU3MTA4ODgiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC3gOC3meC2rSDgtr3gt5Lgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MzM3NDE3NzkwOTM2NjMyMDkwIj4iU0Qg4La04LatIOC3gOC3meC2rSDgtr3gt5Lgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTk4MzkxOTk3MDY4NzkwMTUiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4La44LeP4Law4LeK4oCN4La6IOC2huC2oOC2uuC2seC2uiDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sS8g4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWVkaWFTdG9yYWdlV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MTg5MTYwNTk3Njk4NTI5MTg1Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2uOC3j+C2sOC3iuKAjeC2uiDgtobgtqDgtrrgtrHgtrrgt5og4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaL4La04LeP4LaC4Lac4La64LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEb2NzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTc3ODMxODU5ODQ0ODg0OTgyOSI+IuC2veC3muC2m+C2sSDgtobgtqDgtrrgtrHgtrog4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZURvY3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NzA0MzIzMTc2OTE0MTIxNDg0Ij4i4La94Lea4Lab4LaxIOC2huC2oOC2uuC2seC2uiDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iODE1MDYxMzgyMzkwMDQ2MDU3NiI+IuC3g+C3kuC2uuC2veC3lOC2uCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4rgtpzgt5og4La24LeP4LeE4LeS4La7IOC2huC2oOC2uuC2sSDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkQWNjZXNzQWxsIiBtc2dpZD0iMzIxNTIwODM1NzQxNTg5MTMyMCI+IuC3g+C3kuC2uuC2veC3lCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4og4LeD4Laz4LeE4LePIOC2tuC3j+C3hOC3kuC2uyDgtobgtqDgtrrgtrHgtrog4LeA4LeZ4LatIOC2tOC3kuC3gOC3kuC3g+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NjU2NDg3MjY0ODE5NjY5ODI0Ij4i4LeE4LeQ4La54LeS4La94LeSIOC2nOC3nOC2seC3lCDgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgtqcg4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhY2hlX2ZpbGVzeXN0ZW0iIG1zZ2lkPSI1NTc4OTY3NjQyMjY1NTUwOTU1Ij4i4LeE4LeQ4La54LeS4La94LeSIOC2nOC3nOC2seC3lCDgtrTgtq/gt4rgtrDgtq3gt5Ig4Laa4LeS4La64LeA4LeT4La44LanIOC3g+C3hCDgtr3gt5Lgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2Vfc2lwIiBtc2dpZD0iNTk4Njk1MjM2Mjc5NTg3MDUwMiI+IuC2heC2seC3iuC2reC2u+C3iuC2ouC3j+C2vSDgtofgtrjgtq3gt5Tgtrjgt4og4Lac4Lax4LeK4LaxL+C2veC2tuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VzZV9zaXAiIG1zZ2lkPSI0NzE3NjMyMDAwMDYyNjc0Mjk0Ij4i4LaF4Lax4LeK4Lat4La74LeK4Lai4LeP4La9IOC2h+C2uOC2reC3lOC2uOC3iiDgtpzgt5DgtrHgt5Pgtrjgtqcv4La94LeQ4La24LeT4La44LanIFNJUCDgt4Pgt5rgt4Dgt4/gt4Ag4La34LeP4LeA4LeS4Lat4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3ODYyNTkzMjgzNjExNDkzMjMyIj4i4LaJ4Lat4LeS4LeE4LeP4LeD4Lac4LatIOC2ouC3j+C2vSDgtrfgt4/gt4Dgt5Lgtq3gtrog4Laa4LeS4La64LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZE5ldHdvcmtVc2FnZUhpc3RvcnkiIG1zZ2lkPSI3Njg5MDYwNzQ5ODE5MTI2NDcyIj4i4LeA4LeS4LeB4Lea4LeC4LeS4LatIOC2ouC3j+C2vSDgt4Pgt4Qg4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtongtq3gt5Lgt4Tgt4/gt4Pgtpzgtq0g4Lai4LeP4La9IOC2t+C3j+C3gOC3kuC2reC2uiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iMjU2MjA1MzU5MjMzOTg1OTk5MCI+IuC2ouC3j+C2vSDgtrTgt4rigI3gtrvgtq3gt5LgtrTgtq3gt4rgtq3gt5Lgtrog4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSI3NTM3NTg2NzcxNTU5MzcwNjY4Ij4i4Lai4LeP4La9IOC2muC3nOC2seC3iuC2r+C3muC3g+C3kiDgt4Pgt4Qg4LeD4Laz4LeE4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Hgt5rgt4Lgt5Pgtq0g4La74LeT4Lat4LeSIOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjUwODgyMTczMDkwODg3Mjk2NTAiPiLgtqLgt4/gtr0g4La34LeP4LeA4LeS4LatIOC2nOC3kuC2q+C3lOC2uOC3iiDgtprgt5Lgtrvgt5Pgtrgg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTQ0MzQxMjg2Njc0NjE5ODEyMyI+IuC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtqLgt4/gtr0g4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC3gOC2sSDgtrbgtr3gtrTgt5Hgtrgg4Laa4LeZ4LeD4Lea4LavIOC2uuC2seC3iuC2sSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSIzNjU4NTI3MjE0OTE0OTU5NzQ5Ij4i4Laa4LeZ4LeA4LeZ4Lax4LeSIOC2veC2muC3lOC2q+C3lCDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFya05ldHdvcmtTb2NrZXQiIG1zZ2lkPSI3NjU1NTY4NDMzNjk2MzU2NTc4Ij4i4La44LeP4La74LeK4Lac4Lac4LatIOC3gOC3k+C2uCDgt4PgtrPgt4Tgt48g4Laa4LeZ4LeA4LeZ4Lax4LeS4La64LeaIOC2veC2muC3lOC2q+C3lCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNzY3MzQxNjQ4Nzg3MzQzMjI2OCI+IuC2tOC3iuKAjeC2u+C3gOC3muC3gSDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNDU4NDU3NzQyNjgzNDMxMzg3Ij4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4Laa4LeFIOC2tOC2vSDgtprgt5Lgtrvgt5Pgtrjgt4rgtq8g4LaH4Lat4LeU4LeF4Lat4LeK4LeAIOC2r+C3kOC2seC3iuC3gOC3k+C2uOC3iiDgtr3gtrbgt48g4Lac4LeQ4Lax4LeT4La44LanLCDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgt4Tgt5Lgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9IjcwNTc3NjQ3NDIyMTE2NTY2NTQiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrgg4LaH4LeE4LeU4La44LeK4Laa4Lax4LeKIOC2r+C3k+C2uOC3iiDgt4Pgt5rgt4Dgt4/gt4Dgtprgt4og4LeA4LeZ4LatIOC2tuC2s+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI5ODU2OTc5MTg1NzY5MDI5ODYiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4LaF4LeD4Lax4LeK4Lax4LeP4Lac4LeaIOC3g+C3muC3gOC3j+C3gOC3miDgtongt4Tgt4Ug4La44Lan4LeK4Lan4La44LeaIOC2heC2reC3lOC2u+C3lOC2uOC3lOC3hOC3lOC2q+C2reC2pyDgtrbgt5DgtrPgt5Pgtrjgtqcg4Lav4La74Lax4LeK4Lax4LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC3g+C3muC2reC3iiDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iMzY5OTYwMDgzMzk3NTExNzQ3OCI+IuC3gOC3j+C3hOC2muC2uiDgt4Pgt5DgtrTgtrrgt5Qg4LeA4LeS4Lax4LeK4oCN4La64LeP4LeD4La6IOC2uuC3meC2r+C3lOC2uCDgtongtr3gt4rgtr3gt48g4LeD4LeS4Lan4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW52b2tlQ2FycmllclNldHVwIiBtc2dpZD0iNDE1OTU0OTE1MjUyOTExMTkyMCI+IuC3gOC3j+C3hOC2muC2uuC3jyDgtr3gtrbgt4/gtq/gt5TgtrHgt4og4LeD4LeQ4Laa4LeD4LeU4La44LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtovgtq3gt4rgtrTgt4/gtq/gtrHgtrrgtqcg4Law4LeP4La74Laa4La64LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI4MjA2MDc3NDQ3ODM4OTA5NTE2Ij4i4Lai4LeP4La9IOC2reC2reC3iuC3gCDgtrjgtq0g4Lax4LeS4La74LeT4Laa4LeK4LeC4LarIOC3gOC3meC2rSDgtofgt4Tgt5Tgtrjgt4rgtprgtrHgt4og4Lav4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya0NvbmRpdGlvbnMiIG1zZ2lkPSI2ODk5MTAyMDc1ODI1MjcyMjExIj4i4La64LeZ4Lav4LeU4La44Laa4LanIOC2ouC3j+C2vSDgtq3gtq3gt4rgt4Ag4La44LatIOC2seC3kuC2u+C3k+C2muC3iuC3guC2qyDgt4Dgt5ngtq0g4LaH4LeE4LeU4La44LeK4Laa4Lax4LeKIOC2r+C3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeaLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2hvdHdvcmRSZWNvZ25pdGlvbiIgbXNnaWQ9IjMyMjUwODA0MDg3NDYzNjEzMTMiPiLgtoXgtqvgt4Dgtq/gtrEg4LeE4Laz4LeU4Lax4LeP4Lac4LeQ4Lax4LeT4La4IOC2ieC2veC3iuC2veC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hvdHdvcmRSZWNvZ25pdGlvbiIgbXNnaWQ9IjM3MTY3NDEyNjAxOTUzNjQyNTIiPiLgtoXgtqvgt4Dgtq/gtrEg4LeE4Laz4LeU4Lax4LeP4Lac4LeQ4Lax4LeT4La4IOC3g+C2s+C3hOC3jyDgtongtr3gt4rgtr3gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9saW1pdFBhc3N3b3JkIiBtc2dpZD0iNDQ5NzQyMDcyODg1NzU4NTc5MSI+IuC2uOC3lOC2u+C2tOC2ryDgtrHgt5Pgtq3gt5Ig4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjMyNTIxMTQyMDM5MTk1MTAzOTQiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC3miDgtrjgt5TgtrvgtrTgtq/gtrrgtqcg4LaF4Lax4LeU4La44LatIOC2heC2muC3lOC2u+C3lCDgt4Pgt4Qg4Lav4LeS4LacIOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dhdGNoTG9naW4iIG1zZ2lkPSI5MTQxMzA2NDY5NDIxOTk1MDMiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC3miDgtovgtq3gt4rgt4Pgt4/gt4TgtrrgtrHgt4og4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzIxNTcyOTI5NDIxNTA3MDA3MiI+IuC2reC3kuC2u+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44Lea4Lav4LeTIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtqfgtrrgt5LgtrTgt4og4Laa4LeFIOC2uOC3lOC2u+C2tOC2ryDgtpzgtqvgtrEg4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC2u+C2seC3iuC2sSDgt4Pgt4Qg4Lan4LeQ4La24LeK4La94Lan4La6IOC2heC2nOC3lOC3heC3lCDgtq/gtrjgtrHgt4rgtrEg4LeE4LedIOC3gOC3kOC2u+C2r+C3kiDgtrjgt5TgtrvgtrTgtq8g4La24Lec4LeE4LedIOC2nOC2q+C2seC2muC3iiDgtqfgtrrgt5LgtrTgt4og4Laa4La7IOC2h+C2reC3kiDgtrHgtrjgt4og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC3g+C3kuC2uuC2veC3lCDgtq/gtq3gt4rgtq0g4La44Laa4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MTIzMjMwOTE4NDY3NjEwNzMiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3muC2r+C3kyDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeKIOC2muC3hSDgtrjgt5TgtrvgtrTgtq8g4Lac4Lar4LaxIOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiDgtprgtrvgtrHgt4rgtrEg4LeD4LeEIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44Lax4LeK4LaxIOC3hOC3nSDgt4Dgt5Dgtrvgtq/gt5Ig4La44LeU4La74La04LavIOC2tuC3nOC3hOC3nSDgtpzgtqvgtrHgtprgt4og4Lan4La64LeS4La04LeKIOC2muC2uyDgtofgtq3gt5Ig4Lax4La44LeKIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgt4Pgt5Lgtrrgtr3gt5Qg4Lav4Lat4LeK4LatIOC2uOC2muC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjI2MjAwNzcxOTEyNDI2ODg5NTUiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC3miDgtrjgt5TgtrvgtrTgtq/gtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjYwNTk2Mzk2MjMwMTkwNDQ1OCI+IuC2reC3kuC2u+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LeaIOC2uOC3lOC2u+C2tOC2r+C2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9mb3JjZUxvY2siIG1zZ2lkPSIyMjc0MDg1Mzg0NzA0MjQ4NDMxIj4i4Lat4LeS4La74La6IOC2heC2nOC3lOC3heC3lCDgtq/gt5Dgtrjgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2ZvcmNlTG9jayIgbXNnaWQ9IjExNDE3OTc1ODg0MDM4MjcxMzgiPiLgtq3gt5Lgtrvgtrrgtqcg4LaF4Lac4LeU4LeF4LeUIOC3gOC3kOC2p+C3k+C2uCDgt4Pgt5Lgtq/gt5Tgt4DgtrHgt4rgtrHgt5og4Laa4LeZ4LeD4Lea4LavIOC3g+C3hCDgtprgt4Dgtq/gt4/gtq8g4La64Lax4LeK4LaxIOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dpcGVEYXRhIiBtc2dpZD0iMzkxMDU0NTQ0Njc1ODYzOTcxMyI+IuC3g+C3kuC2uuC2veC3lCDgtq/gtq3gt4rgtq0g4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMwNjE4NDA5NjA2Nzc1Njg3NiI+IuC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt48g4Lav4Lat4LeK4LatIOC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrjgt5ngtrHgt4og4La04LeD4LeU4LeAIOC2heC2seC2reC3lOC2u+C3lCDgtofgtp/gt4Dgt5Lgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeA4La4IOC2p+C3kOC2tuC3iuC2veC2p+C3iiDgtq/gtq3gt4rgtq0g4La44Laa4LePIOC2r+C2uOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTA5Njg5NTYwNDU3NDE4ODM5MSI+IuC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt48g4Lav4Lat4LeK4LatIOC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrjgt5ngtrHgt4og4La04LeD4LeU4LeAIOC2heC2seC2reC3lOC2u+C3lCDgtofgtp/gt4Dgt5Lgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeA4La4IOC2r+C3lOC2u+C2muC2ruC2sSDgtq/gtq3gt4rgtq0g4La44Laa4LePIOC2r+C2uOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSIyNzg0ODI4MjkzNzQ3NzkxNDQ2Ij4i4LaL4La04LeP4LaC4LacIOC2nOC3neC2veC3k+C2uiDgtrHgt5Lgtrrgt5Tgtq3gt5Tgt4Ag4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSI2Mzg3NDk3NDY2NjYwMTU0OTMxIj4i4Laa4Lec4Lax4LeK4Lav4Lea4LeD4LeSIOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Dgt5Lgtqcg4La04Lec4Lav4LeUIOC2seC3kuC2uuC3lOC2reC3lCDgtpHgtprgtprgt4og4La34LeP4LeA4LeS4LatIOC2muC2u+C2sSDgtr3gt5ngt4Mg4LaL4La04LeP4LaC4Lac4La6IOC3g+C2muC3g+C2seC3iuC2sS4g4La04LeF4La44LeUIOC2i+C2tOC3j+C2guC2nCDgtrTgtrvgt5LgtrTgt4/gtr3gtprgtrrgt48g4La04La44Lar4Laa4LeKIOC2teC2veC2r+C3j+C2uuC3kiDgtrTgt5zgtq/gt5Qg4Lax4LeS4La64LeU4Lat4LeU4LeAIOC3g+C2muC3g+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSI4ODUyNzkxNTE4NDcyNTQwNTYiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC2r+C3kOC2uOC3k+C2uOC3miDgtrjgt5TgtrvgtrTgtq/gtrog4Laa4La94LeKIOC2ieC2muC3lOC2reC3iuC3gOC3k+C2uCDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iMTcyOTcyNTIyNjMxNDY5MTU5MSI+IuC2reC3kuC2uy3gtoXgtpzgt5Tgt4Xgt5og4La44LeU4La74La04Lav4La6IOC3gOC3meC2seC3g+C3iuC3gOC3k+C2uCDgtprgt5zgtrTgtrjgtqsg4Laa4LeP4La9IOC2tOC2u+C3j+C3g+C2uuC2muC3kuC2seC3iiDgt4Pgt5Lgtq/gt5Tgt4Dgt5Lgtrog4La64LeU4Lat4LeU4LavIOC2uuC2seC3iuC2sSDgtrTgt4/gtr3gtrHgtrog4Laa4LeS4La74LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iODkwMTMyNjE5OTkwOTEzMjkxNSI+IuC2huC2oOC2uuC2seC2uuC3miDgt4PgtoLgtprgt5rgtq3gtrHgtrog4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZW5jcnlwdGVkU3RvcmFnZSIgbXNnaWQ9IjI2Mzc3MzIxMTUzMjUzMTY5OTIiPiLgtobgtqDgtrrgtrHgtrog4Laa4LeFIOC2uuC3meC2r+C3lOC2uOC3iiDgtq/gtq3gt4rgtq0g4LeD4LaC4Laa4Lea4Lat4Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSI2Mzk1MzAxMDIzMTUyMjk3ODI2Ij4i4Laa4LeQ4La44La74LePIOC2heC2tuC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSIyMzA2MzQ5MDQyODM0NzU0NTk3Ij4i4LeD4LeS4La64La94LeUIOC2i+C2tOC3j+C2guC2nCDgtprgt5Dgtrjgtrvgt4/gt4Dgtr0g4La34LeP4LeA4LeS4Lat4La6IOC3gOC2veC2muC3iuC3gOC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIyNjYzMjkxMDQ1NDI2Mzg4MDIiPiLgtrrgtq3gt5Tgtrvgt5Qg4LaG4La74Laa4LeK4LeC4LeP4LeA4LeaIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtoXgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjM0NjcwODIyNzIxODY1MzQ2MTQiPiLgtrrgtq3gt5Tgtrvgt5Qg4LaG4La74Laa4LeK4LeC4LeP4LeAIOC3hOC3kiDgt4Pgtrjgt4Tgtrsg4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIOC2t+C3j+C3gOC3kuC2reC2uiDgt4Dgt4Xgtprgt4rgt4Dgtrrgt5IuIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBob25lVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI4OTAxMDk4MzM2NjU4NzEwMzU5Ij4i4Lax4LeS4LeA4LeDIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY5OTIzNjUwNTI3MTM2NjE1Ij4i4Lai4LaC4Lac4La4IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzg5NzU0NDY1NDI0Mjg3NDU0MyI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjExMDM2MDE0MzMzODIxNTgxNTUiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr0g4LeG4LeQ4Laa4LeK4LeD4LeKIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTczNTE3NzE0NDk0ODMyOTM3MCI+IuC2seC3kuC3gOC3g+C3miDgt4bgt5Dgtprgt4rgt4Pgt4oiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDM4Nzg2NzQ0NzcyMDczOTQiPiLgtrTgt5rgtqLgtrvgtroiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNjUwODI0Mjc1MTc3OTMxNjM3Ij4i4LeA4LeZ4Lax4Lat4LeKIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iOTE5MjUxNDgwNjk3NTg5ODk2MSI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImVtYWlsQWRkcmVzc1R5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iODA3Mzk5NDM1Mjk1NjEyOTEyNyI+IuC2uOC3lOC2veC3iiDgtrTgt5Lgtqfgt5Tgt4AiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3MDg0MjM3MzU2NjAyNjI1NjA0Ij4i4Laa4LeP4La74LeK4La64LeP4La94La6IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTExMjA0NDQxMDY1OTAxMTAyMyI+IuC3gOC3meC2seC2reC3iiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIzNzQ5MTM5NTI4NzAxMTA2MTgiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwb3N0YWxBZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI2ODgwMjU3NjI2NzQwMDQ3Mjg2Ij4i4Lax4LeS4LeA4LeDIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTYyOTE1Mzk1NjA0NTEwOTI1MSI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ5NjY2MDQyNjQ1MDAzNDM0NjkiPiLgt4Dgt5ngtrHgtq3gt4oiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0OTMyNjgyODQ3NTk1Mjk5MzY5Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1BZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSIxNzM4NTg1MTk0NjAxNDc2Njk0Ij4i4Lax4LeS4LeA4LeDIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM1OTY0NDU2NTY0NzM4MzcwOCI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4Njg1NDk0MDEwNTM2MTU2NzciPiLgt4Dgt5ngtrHgtq3gt4oiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTQ1MTE4OTQ0NjM5ODY5ODA5Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JnYW5pemF0aW9uVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NTQ2MzM1NjEyMTg5MTE1NjE1Ij4i4Laa4LeP4La74LeK4La64LeP4La94La6IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDM3ODA3NDEyOTA0OTUyMDM3MyI+IuC3gOC3meC2seC2reC3iiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM0NTUwNDc0Njg1ODM5NjUxMDQiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJpbVByb3RvY29scyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijg1OTUyNjEzNjM1MTg0NTk1NjUiPiJBSU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3MzkwNDczNjI4Mjc1NDkwNzAwIj4iV2luZG93cyBMaXZlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzg4Mjg3NzEzNDkzMTQ1ODIxNyI+IllhaG9vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTAzNTM3NjMxMzIwMDU4NTI0MiI+IlNreXBlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzUzMjM2MzE3ODQ1OTQ0NDk0MyI+IlFRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzcxMzQ0MTAzNDI5OTY2MDc0OSI+Ikdvb2dsZSBUYWxrIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjUwNjg1NzMxMjcxODYzMDgyMyI+IklDUSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE2NDg3OTc5MDM3ODUyNzkzNTMiPiJKYWJiZXIiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUN1c3RvbSIgbXNnaWQ9IjE2NDQ3MzgwNTkwNTMzNTU4MjAiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVIb21lIiBtc2dpZD0iMjU3MDkyMzQ2MzAzMzk4NTg4NyI+IuC2seC3kuC3gOC3gyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1vYmlsZSIgbXNnaWQ9IjY1MDE0NjM1NTc3NTQ3NTEwMzciPiLgtqLgtoLgtpzgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrIiBtc2dpZD0iODg2MzkzOTY2NzA1OTkxMTYzMyI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUZheFdvcmsiIG1zZ2lkPSIzNTE3NzkyMTYwMDA4ODkwOTEyIj4i4Laa4LeP4La74LeK4La64LeP4La9IOC3huC3kOC2muC3iuC3g+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUZheEhvbWUiIG1zZ2lkPSIyMDY3MjY1OTcyMzIyOTcxNDY3Ij4i4Lax4LeS4LeA4LeD4LeaIOC3huC3kOC2muC3iuC3g+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVBhZ2VyIiBtc2dpZD0iNzU4MjM1OTk1NTM5NDkyMTczMiI+IuC2tOC3muC2ouC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU90aGVyIiBtc2dpZD0iMTU0NDQyNTg0Nzg2ODc2NTk5MCI+IuC3gOC3meC2seC2reC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNhbGxiYWNrIiBtc2dpZD0iMjcxMjE3NTIwMzA2NTY3ODIwNiI+IuC2uuC3heC3kiDgtofgtrjgtq3gt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDYXIiIG1zZ2lkPSI4NzM4MzYwNjg5NjE2NzE2OTgyIj4i4La44Led4Lan4La74LeKIOC2u+C2ruC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNvbXBhbnlNYWluIiBtc2dpZD0iNTQwNDM0MzU2NDYxNDc4OTE2Ij4i4LaG4La64Lat4Lax4La64LeaIOC2uOC3luC2veC3kuC2muC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUlzZG4iIG1zZ2lkPSI4MDIyNDUzMTkzMTcxMzcwMzM3Ij4iSVNETiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1haW4iIG1zZ2lkPSI2NzY2MTM3MDEwNjI4MzI2OTE2Ij4i4La44LeW4La94LeS4LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXJGYXgiIG1zZ2lkPSI4NTg3NjU3MTQ1MDcyNDQ2NTY1Ij4i4LeA4LeZ4Lax4Lat4LeKIOC3huC3kOC2muC3iuC3g+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVJhZGlvIiBtc2dpZD0iNDA5MzczODA3OTkwODY2NzUxMyI+IuC2u+C3muC2qeC3kuC2uuC3neC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVRlbGV4IiBtc2dpZD0iMzM2Nzg3OTk1MjQ3NjI1MDUxMiI+IuC2p+C3meC2veC3meC2muC3iuC3g+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVR0eVRkZCIgbXNnaWQ9Ijg2MDY1MTQzNzg1ODUwMDAwNDQiPiJUVFkgVEREIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya01vYmlsZSIgbXNnaWQ9IjEzMTE0MjY5ODkxODQwNjU3MDkiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr0g4Lai4LaC4Lac4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya1BhZ2VyIiBtc2dpZD0iNjQ5OTM4NzMxMjMxMTU3MDU2Ij4i4Laa4LeP4La74LeK4La64LeP4La9IOC2tOC3muC2ouC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjU1OTY3NzI2MzYxMjg1NjI4ODQiPiLgt4Pgt4Tgt4/gtrrgtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNbXMiIG1zZ2lkPSI3MjU0NDkyMjc1NTAyNzY4OTkyIj4iTU1TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQ3VzdG9tIiBtc2dpZD0iNzgzNzU4NjE5ODQ1ODA3MzQwNCI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUJpcnRoZGF5IiBtc2dpZD0iMjgxMzM3OTg0NDIxMTM5MDc0MCI+IuC2i+C2tOC2seC3iuC2r+C3kuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUFubml2ZXJzYXJ5IiBtc2dpZD0iMzg3Njc3OTc0NDUxODI4NDAwMCI+IuC3g+C2guC3gOC2reC3iuC3g+C2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZU90aGVyIiBtc2dpZD0iNzM4ODE3ODkzOTAxMDE0MzA3NyI+IuC3gOC3meC2seC2reC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg1MjU5NjAyNTc4MDQyMTM4NDYiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVIb21lIiBtc2dpZD0iNDQ5MjI3MjM2MTQwNDMzOTE5Ij4i4Lax4LeS4LeA4LeDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlV29yayIgbXNnaWQ9IjM1NDgwNTgwNTk2MDExNDk5NzMiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVPdGhlciIgbXNnaWQ9IjI5MjMwMDg2OTUyNzI2Mzk1NDkiPiLgt4Dgt5ngtrHgtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVNb2JpbGUiIG1zZ2lkPSIxMTk5MTkwMDUzMjExNjYyMDUiPiLgtqLgtoLgtpzgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlQ3VzdG9tIiBtc2dpZD0iODkwMzIwNjkwMzA2MDQ3OTkwMiI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVIb21lIiBtc2dpZD0iODE2NTc1Njk3NzE4NDQ4MzA5NyI+IuC2seC3kuC3gOC3gyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVXb3JrIiBtc2dpZD0iNTI2ODE3Mjc3MjM4NzY5NDQ5NSI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVPdGhlciIgbXNnaWQ9IjI3MjYxMTE5NjY2MjM1ODQzNDEiPiLgt4Dgt5ngtrHgtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVDdXN0b20iIG1zZ2lkPSIyMDc0MDI4NzU1NTI3ODI2MDQ2Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlSG9tZSIgbXNnaWQ9IjYyNDExODEwMzI5NTQyNjM4OTIiPiLgtrjgt5Tgtr3gt4og4La04LeS4Lan4LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlV29yayIgbXNnaWQ9IjEzNzE0ODkyOTAyNDI0MzMwOTAiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVPdGhlciIgbXNnaWQ9IjUzNzcwMDc0OTU3MzU5MTU0NzgiPiLgt4Dgt5ngtrHgtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQ3VzdG9tIiBtc2dpZD0iNjkxOTQ1MzgzNjYxODc0OTk5MiI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xBaW0iIG1zZ2lkPSI3MDUwMzYwNjEyMzY4MzgzNDE3Ij4iQUlNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE1zbiIgbXNnaWQ9IjE0NDU1NjU0NTQyMDc2OTQ0MiI+IldpbmRvd3MgTGl2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xZYWhvbyIgbXNnaWQ9IjgyNzE0Mzk0MDg0NjkwMjEyNzMiPiJZYWhvbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xTa3lwZSIgbXNnaWQ9IjkwMTkyOTY3NDQ2MjI4MzI5NTEiPiJTa3lwZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xRcSIgbXNnaWQ9Ijg4ODc0ODQzNzk0OTQxMTE4ODQiPiJRUSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xHb29nbGVUYWxrIiBtc2dpZD0iNDkzOTAyMzIxMTQwMjc3MzA0Ij4iSGFuZ291dHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSWNxIiBtc2dpZD0iMTU3NDg3MDQzMzYwNjUxNzMxNSI+IklDUSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xKYWJiZXIiIG1zZ2lkPSIyMjc5OTE3NjMwODc1NzcxNzIyIj4iSmFiYmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE5ldE1lZXRpbmciIG1zZ2lkPSI4Mjg3NjI1NjU1OTg2ODI3OTcxIj4iTmV0TWVldGluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVXb3JrIiBtc2dpZD0iMjkyNjg4NzA1MDUzNjM4NzIiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdUeXBlT3RoZXIiIG1zZ2lkPSIzOTUxNzgxMTMxNTcwMTI0MDgyIj4i4LeA4LeZ4Lax4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZUN1c3RvbSIgbXNnaWQ9IjIyNTUyMzQxNTM3MjA4ODMyMiI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUN1c3RvbSIgbXNnaWQ9IjM1NDI0MDM2Nzk4MjcyOTczMDAiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVBc3Npc3RhbnQiIG1zZ2lkPSI2Mjc0MzM0ODI1MTk1Mzc5MDc2Ij4i4LeD4LeE4LeP4La64LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQnJvdGhlciIgbXNnaWQ9Ijg3NTc5MTM1MDY3ODQwNjc3MTMiPiLgt4Pgt4Tgt53gtq/gtrvgtrrgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVDaGlsZCIgbXNnaWQ9IjE4OTA3NDYyNzcyNzY4ODE2MjYiPiLgtq/gtrvgt5Tgt4Dgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVEb21lc3RpY1BhcnRuZXIiIG1zZ2lkPSI2OTA0ODA3MTEyMTIxMTIyMTMzIj4i4Lav4Lea4LeB4LeT4La6IOC3hOC3gOC3lOC2veC3iuC2muC2u+C3lOC3gOC3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUZhdGhlciIgbXNnaWQ9IjUyMjgwMzQ2ODcwODIwNTA3MjUiPiLgtrTgt5Lgtrrgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVGcmllbmQiIG1zZ2lkPSI3MzEzMTA2NzYyNDgzMzkxMjYyIj4i4La44LeS4Lat4LeK4oCN4La74La64LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlTWFuYWdlciIgbXNnaWQ9IjYzNjU2Nzc4NjE2MTAxMzc4OTUiPiLgtprgt4XgtrjgtrHgt4/gtprgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNb3RoZXIiIG1zZ2lkPSI0NTc4NTcxMzUyOTYyNzU4MzA0Ij4i4La44LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFyZW50IiBtc2dpZD0iNDc1NTYzNTU2NzU2MjkyNTIyNiI+IuC2uOC3gOC3iuC2tOC3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcnRuZXIiIG1zZ2lkPSI3MjY2NDkwMjg1MTIwMjYyNzgxIj4i4LeE4LeA4LeU4La94LeK4Laa4La74LeU4LeA4LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUmVmZXJyZWRCeSIgbXNnaWQ9IjEwMTU3MzA1OTg0NDEzNTUyNCI+IuC2uuC3nOC2uOC3lOC2muC2u+C2sSDgtr3gtq/gt4rgtq/gt5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVSZWxhdGl2ZSIgbXNnaWQ9IjE3OTk4MTk5MzAwODU2MTAyNzEiPiLgtrHgt5Hgtrrgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTaXN0ZXIiIG1zZ2lkPSIxNzM1OTgzNTU0NDc5MDc2NDgxIj4i4LeD4LeE4Led4Lav4La74LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlU3BvdXNlIiBtc2dpZD0iMzk0MTM2OTM5NDI4Njk4MTE3Ij4i4La34LeP4La74LeK4La64LeP4LeAIOC3hOC3nSDgt4Pgt4rgt4Dgt4/gtrjgt5LgtrTgt5Tgtrvgt5Tgt4Lgtrrgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUN1c3RvbSIgbXNnaWQ9IjI0NzM1ODA1OTMxMTE1OTA5NDUiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4i4Lax4LeS4LeA4LeDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4i4LeA4LeZ4Lax4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iUElOIOC2muC3muC2reC2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIOC3g+C3hCDgtrHgt4AgUElOIOC2muC3muC2reC2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsg4Laa4Lea4Lat4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLgtrHgt4AgUElOIOC2muC3muC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IuC2uOC3lOC2u+C2tOC2r+C2uiDgtqfgtrrgt5LgtrTgt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEiPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC2uOC3lOC2u+C2tOC2r+C2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyBQSU4g4LaR4LaaIOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLgt4Dgt5Dgtrvgtq/gt5IgUElOIOC2muC3muC2reC2uuC2muC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pywg4La44LeZ4Lax4LeU4LeAIOC2lOC2tuC3jyDgtrTgt4Pgt5Tgt4AgMCDgtq8g4LaU4La24Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsX2RpYWxvZ19udW1iZXJfZm9yX2Rpc3BsYXkiIG1zZ2lkPSI2OTYxOTIxMDMxOTUwOTA5NzAiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LaH4La44Lat4LeU4La44LeKIOC2heC2guC2muC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODk2MzgzOTI0MjU2NTY1MzE5MiI+IuC3g+C3muC3gOC3j+C3gCDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zY3JlZW5fbG9ja2VkIiBtc2dpZD0iNzI4ODQ0MzA3NDgwNjgzMjkwNCI+IuC2reC3kuC2u+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZW5hYmxlZCIgbXNnaWQ9IjQ2MTU0MDUxNjE0MTI2MDQ5Ij4i4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyDgtrjgt5ngtrHgt5Tgt4Ag4LaU4La24Lax4LeK4LaxIOC3hOC3nSDgt4Tgtq/gt5Lgt4Pgt5Ig4LaH4La44Lat4LeU4La4IOC2veC2tuC3j+C2nOC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSI2ODYyNjAwMjg3OTcxNTgzNjQiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC2uOC3meC2seC3lCDgtpTgtrbgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9Ijc0Nzg3MDMyNTQ5NjQ4MTAzMDIiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC2u+C2p+C3j+C3gCDgtoXgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2VtZXJnZW5jeV9jYWxsIiBtc2dpZD0iNTM0NzYzMzc4NDQwMTI4NTIyNSI+IuC3hOC2r+C3kuC3g+C3kiDgtofgtrjgtq3gt5Tgtrjgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3JldHVybl90b19jYWxsIiBtc2dpZD0iNTI0NDI1OTc4NTUwMDA0MDAyMSI+IuC2h+C2uOC2reC3lOC2uCDgt4Dgt5ngtq0g4Lax4LeQ4LeA4LatIOC2uuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9jb3JyZWN0IiBtc2dpZD0iOTAzOTAwODY1MDM2MjI2MTIzNyI+IuC2seC3kuC3gOC3kOC2u+C2r+C3kuC2uuC3kiEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fd3JvbmciIG1zZ2lkPSI0MzE3OTU1MDE0OTQ4MTA4Nzk0Ij4i4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Bhc3N3b3JkX3dyb25nIiBtc2dpZD0iNTczNzgxNTM5MzI1MzE2NTMwMSI+IuC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+IuC2uOC3lOC3hOC3lOC2qyDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaF4Laf4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3miDgtovgtrTgtrvgt5Lgtrgg4La04LeK4oCN4La74La64Lax4LeK4Lat4La64Lax4LeKIOC2nOC2q+C2sSDgtongtprgt4rgtrjgt4Dgt48g4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wbHVnZ2VkX2luIiBtc2dpZD0iODA1Nzc2MjgyODM1NTU3MjMxNSI+IuC2huC2u+C3neC2tOC2q+C2uiDgt4Dgt5ngtrjgt5LgtrHgt4osIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiLgtoXgtrvgt53gtrTgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2JhdHRlcnlfc2hvcnQiIG1zZ2lkPSI0NDc3MjY0ODQ5Mzg2ODUwMjY2Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbG93X2JhdHRlcnkiIG1zZ2lkPSIxNDgyODczOTgxOTE5MjQ5NzQwIj4i4LaU4La24Lac4LeaIOC2huC2u+C3neC2tOC2muC2uuC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTk0MzkyNzc4MTkyMTUzOTkiPiJTSU0g4La04LatIOC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUxNjU5MTk2MDk1NzkxNDc0Ij4i4Lan4LeQ4La24LeK4La94Lan4La64LeaIFNJTSDgtrTgtq0g4Lax4Lec4La44LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODY5MjA1ODU2OTUxNjkwNzgiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lat4LeU4LeFIFNJTSDgtrTgtq0g4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTM3Mjc4NzEzODAyMzI3MjYxNSI+IlNJTSDgtrTgtq3gtprgt4og4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IlNJTSDgtrTgtq0g4Lax4Lec4La44LeQ4LatIOC3hOC3nSDgtprgt5Lgtrrgt4Dgt5Lgtrog4Lax4Lec4LeE4LeQ4LaaLiBTSU0g4La04Lat4Laa4LeKIOC2h+C2reC3lOC2veC2reC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk2MTQ5NjY1MTM4OTE2MTg0Ij4i4La34LeP4LeA4LeS4Lat4LePIOC2muC3hSDgtrHgt5zgt4Tgt5Dgtprgt5IgU0lNIOC2tOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iOTEwOTA0NjQzNDMzMTUxMzcxIj4i4LaU4La24Lac4LeaIFNJTSDgtrTgtq0g4LeD4LeK4Lau4LeS4La74LeAIOC2heC2tuC2vSDgtprgtrsg4Lat4LeS4La24LeaLlxuIOC3gOC3meC2seC2reC3iiBTSU0g4La04Lat4Laa4LeKIOC3g+C2s+C3hOC3jyDgtpTgtrbgtpzgt5og4LeD4Lea4LeA4LeP4Lav4LeP4La64Laa4La64LePIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgtrvgtpzgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwMTU5NDkwNTE1Mjc0Njg4NiI+IuC2tOC3meC2uyDgtpzgt5Pgtq0g4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjYwODkyOTc2NTA0ODEyOTIzNjMiPiLgtorgt4Xgtp8g4Lac4LeT4LatIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1OTA4ODc4Njc4MDEyODAwMSI+IuC3gOC3kuC2u+C3j+C2uCDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTg4ODQyMjkzODM1MTAxOTQyNiI+IuC2sOC3j+C3gOC2miDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDU2MjMxODM3ODc2Njk4NzYwMSI+IuC2seC3kOC3gOC2reC3k+C2uOC3miDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbHNfb25seSIgbXNnaWQ9IjY3MzM5NzgzMDQzODYzNjU0MDciPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LaH4La44Lat4LeU4La44LeKIOC2tOC2uOC2q+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjE0MzM4OTIyNDk4NjAyODUwMSI+IuC2ouC3j+C2veC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9Ijc0NDE3OTczMzk5NzYyMzAiPiJTSU0g4La04LatIFBVSyDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LaL4La04Lav4Lea4LeB4La6IOC2tuC2veC2seC3iuC2sSDgt4Tgt50g4La04La74LeS4La34Led4Lac4LeS4LaaIOC3g+C3muC3gOC3j+C3gCDgtoXgtrjgtq3gtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI4MDY2NjYwMTI5MjA2MDAxMDM5Ij4iU0lNIOC2tOC2rSDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI1OTUzMjMyMTQwNTI4ODEyNjQiPiJTSU0g4La04LatIOC2heC2nOC3lOC3heC3lCDgtoXgtrvgt5Lgtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjY0ODE2MjM4MzAzNDQxMDcyMjIiPiLgtpTgtrYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgt5og4La74Lan4LeP4LeAIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtofgtrMg4LaH4LatLiBcblxu4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtofgtq3gt5Tgt4Xgtq0g4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSIyNzI1OTczMjg2MjM5MzQ0NTU1Ij4i4LaU4La2IOC2uOC3lOC2u+C2tOC2r+C2uiDgt4Dgt4/gtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtqfgtrrgt5LgtrTgt4rgtprgt5zgtqcg4LaH4LatLiBcblxu4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2MjE2NjcyNzA2NTQ1Njk2OTU1Ij4i4LaU4La2IFBJTiDgtoXgtoLgtprgtrogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtqfgtrrgt5LgtrTgt4og4Laa4Lec4LanIOC2h+C2rS5cblxuIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaH4Lat4LeU4LeF4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjkxOTE2MTE5ODQ2MjU0NjA4MjAiPiLgtpTgtrYg4LeA4LeQ4La74Lav4LeS4La64LanIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgtpTgtrbgtpzgt5og4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3miDgtrvgtqfgt4/gt4Ag4LaH4LazIOC2h+C2rS4g4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3hCDgtprgt5Lgtrvgt5Pgtrjgt4ogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Lax4LeKIOC2tOC3g+C3lOC3gCwg4LaU4La24Lac4LeaIEdvb2dsZSDgtrTgt5TgtrvgtrHgtrog4LeA4LeT4La44LeKIOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LaU4La24Lac4LeZ4Lax4LeKIOC2heC3g+C2uuC3ki5cblxuIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI1OTAyMjc1NTk3NjM3NjI3NTEiPiLgtpTgtrYg4LeA4LeQ4La74Lav4LeS4La64LanIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgtpTgtrbgtpzgt5og4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3miDgtrvgtqfgt4/gt4Ag4LaH4LazIOC2h+C2rS4g4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3hCDgtprgt5Lgtrvgt5Pgtrjgt4ogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Lax4LeKIOC2tOC3g+C3lOC3gCwg4LaU4La24Lac4LeaIEdvb2dsZSDgtrTgt5TgtrvgtrHgtrog4LeA4LeT4La4IOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LaU4La24Lac4LeZ4Lax4LeKIOC2heC3g+C2seC3lCDgtofgtq0uXG5cbiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTI4MTA2Mzk5NzQ1NzU1NjA0Ij4i4LaU4La2IOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtoXgt4Dgt4Pgt4rgtq7gt48gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrsg4LaH4LatLiDgtoXgt4Dgt4Pgt4rgtq7gt48gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2heC3g+C3j+C2u+C3iuC2ruC2muC3gCDgtovgtq3gt4rgt4Pgt4Qg4Laa4LeS4La74LeT4La44Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4Lan4LeQ4La24LeK4La94Lan4La6IOC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt48g4La44LeU4La94LeKIOC2reC2reC3iuC3gOC2uuC2pyDgtrHgt5Dgt4Dgtq0g4La04Lat4LeKIOC3gOC2sSDgtoXgtq3gtrsg4LeD4LeS4La64La94LeUIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeSIOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2MDM1NjUxNDIxNTY4MjY1NjUiPiLgtpTgtrYg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LeA4LeP4La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC2muC2r+C3kyDgt4Dgt5Dgtrvgtq/gt5Mg4La04LeK4oCN4La74La64Lat4LeK4Lax4La64Lax4LeKIOC2nOC3meC2sSDgtq3gt5Lgtrbgt5ouIOC2reC3gOC2reC3iiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4La04LeK4oCN4La74La64Lat4LeK4LaxIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq3gt4Hgt4/gtr3gt4/gt4Dgt5og4La04LeZ4La74Lax4LeS4La44LeS4La64LanIOC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrEg4LaF4Lat4La7IOC3g+C3kuC2uuC2veC3lOC2uCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kiDgt4Dgt5Mg4La64La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI4MDg3MzUxNjQ5MzkzNDM2NSI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC2lOC2tiDgt4Dgt5Dgtrvgtq/gt5Ig4La04LeK4oCN4La74La64Lat4LeK4LaxIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgt4Dgt4/gtrvgtrrgtprgt4og4Lac4LeZ4LaxIOC2h+C2rS4g4Lav4LeQ4Lax4LeKIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq3gt4Hgt4/gtr3gt48g4LeD4LeU4La04LeU4La74LeU4Lav4LeK4LavIOC3gOC3meC2rSDgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LeT4La4IOC2muC3meC2u+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzAyNTUwNDcyMTc2NDkyMjI0NiI+IuC2lOC2tiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgt4Dgt4/gtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC2muC2r+C3kyDgt4Dgt5Dgtrvgtq/gt5Mg4La04LeK4oCN4La74La64Lat4LeK4Lax4La64Lax4LeKIOC2nOC3meC2sSDgtq3gt5Lgtrbgt5ouIOC2r+C3kOC2seC3iiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Laa4La74LeK4La44LeP4Lax4LeK4Lat4LeB4LeP4La94LePIOC2tOC3meC2u+C2seC3kuC2uOC3kuC2uuC2pyDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt5Qg4La94La24La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYyNTE0ODAzNDMzOTQzODk2NjUiPiLgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iMjYyNjk5OTQ0OTYxMDY5NTkzMCI+IuC2u+C2p+C3j+C3gCDgtoXgtrjgtq3gtprgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fZm9yZ290X3BhdHRlcm4iIG1zZ2lkPSIyNTg4NTIxNTAxMTY2MDMyNzQ3Ij4i4Lac4LeS4Lar4LeU4La44LeaIOC2heC2nOC3lOC3heC3lCDgtoXgtrvgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiLgtrvgtqfgt48g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC3kuC2u+C3k+C2uOC3iiDgt4Dgt5Dgtqngt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4i4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pywg4LaU4La24Lac4LeaIEdvb2dsZSDgtpzgt5Lgtqvgt5Tgtrgg4LeD4La44LacIOC2tOC3lOC2u+C2seC2uiDgt4DgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9Ijg4NDY4ODE0MjQxMDY0ODQ0NDciPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La6ICjgtoot4Lat4LeQ4La04LeR4La9KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI1OTU4MDI4MzgzOTU0NzM4NTI4Ij4i4La44LeU4La74La04Lav4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjcxMzA4OTM2OTQ3OTU3ODYzMDAiPiLgtrTgt5TgtrvgtrHgtrog4LeA4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjEzNjQwNTE0NzMzNDc0ODU5MDgiPiLgt4Dgtr3gtoLgtpzgt5Qg4Lax4Lec4LeA4LaxIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtrHgt4/gtrjgtrrgtprgt4og4LeE4LedIOC2uOC3lOC2u+C2tOC2r+C2uuC2muC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSIxNjk2OTI0NzYzNjkwMzc5MDczIj4i4LaU4La24Lac4LeaIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtrHgt4/gtrjgtrog4LeE4LedIOC2uOC3lOC2u+C2tOC2r+C2uiDgtoXgtrjgtq3gtprgtq8/XG4gIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iIOC3gOC3meC2rSDgtrrgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSI3MTE0NjI3MzUxMjg2OTMzODY3Ij4i4La04La74LeS4Laa4LeK4LeC4LePIOC2muC2u+C2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdW5sb2NrX2xhYmVsIiBtc2dpZD0iNzM3NDQwNDgzMjIwNjY3MDU0Ij4i4LaF4Laf4LeU4La9IOC2heC2u+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4i4LeB4La24LeK4Lav4La6IOC3g+C2muC3iuKAjeC2u+C3k+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29mZl9sYWJlbCIgbXNnaWQ9Ijk5NjgyMjgyNTE1NDMxOTAyNiI+IuC3geC3iuKAjeC2u+C3gOC3iuKAjeC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9zdGFydCIgbXNnaWQ9IjM5NDEwNDU1MDI5MzMxNDI4NDciPiLgtrvgtqfgt4/gt4Ag4LaF4La74La54LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fY2xlYXJlZCIgbXNnaWQ9IjU1ODM0Nzk3MjEwMDE2Mzk1NzkiPiLgtrvgtqfgt4/gt4Ag4LeE4LeS4LeD4LeKIOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NlbGxfYWRkZWQiIG1zZ2lkPSI2NzU2MDMxMjA4MzU5MjkyNDg3Ij4i4Laa4Lec4Lan4LeU4LeA4Laa4LeKIOC2keC2muC2reC3lCDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9kZXRlY3RlZCIgbXNnaWQ9IjQ5ODg3MzA4OTU1NTQwNTcwNTgiPiLgtrvgtqfgt4/gt4Ag4LeD4La44LeK4La04LeW4La74LeK4Lar4La64LeSIjwvc3RyaW5nPgorICAgIDwhLS0gU3RyaW5nLmZvcm1hdCBmYWlsZWQgZm9yIHRyYW5zbGF0aW9uIC0tPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQgKDU2Nzg2MjQ2MjQ2ODE0MDAxOTEpIC0tPgorICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i4LeA4LeS4Lai4Lan4La6IOC2keC2muC2reC3lCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLgt4Tgt5Lgt4Pgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+IuC2heC2nOC3lOC3heC3lCDgtoXgtrvgt5LgtrEg4La04LeK4oCN4La74Lav4Lea4LeB4La6IOC3gOC3kuC2r+C3hOC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4i4LaF4Lac4LeU4LeF4LeUIOC2heC2u+C3kuC2sSDgtrTgt4rigI3gtrvgtq/gt5rgt4Hgtrog4LeE4LeQ4Laa4LeS4La94LeTIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5LgtqLgtqfgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgtq3gt53gtrvgtrHgt4rgtrHgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiLgtq3gtq3gt4rgt4DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiLgtprgt5Dgtrjgtrvgt4/gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i4La44LeP4Law4LeK4oCN4La6IOC2tOC3j+C2veC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i4LeA4LeS4Lai4Lan4La6IOC2seC3kOC3gOC2rSDgtoXgtrHgt5TgtrTgt5Lgt4Xgt5Lgt4Dgt5ngt4Xgtqcg4LeD4LeQ4Laa4LeD4LeS4La4IOC2h+C2u+C2ueC3lOC2q+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLgt4Dgt5LgtqLgtqfgt4og4Lax4LeQ4LeA4LatIOC2heC2seC3lOC2tOC3kuC3heC3kuC3gOC3meC2veC2pyDgt4Pgt5Dgtprgt4Pgt5Pgtrgg4LaF4LeA4LeD4LeP4Lax4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4LeA4LeS4Lai4Lan4La6IOC2uOC3kOC2muC3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4i4LaF4Lac4LeU4LeF4LeUIOC2seC3nOC2r+C3kOC2uOC3liDgtrTgt4rigI3gtrvgtq/gt5rgt4Hgtrog4La04LeU4LeF4LeU4La94LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiLgt4Pgtrvgt4rgtrTgtqsg4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IuC2u+C2p+C3jyDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i4La44LeU4LeE4LeU4LarIOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtoXgtp/gt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQSU4g4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLgtrjgt5TgtrvgtrTgtq8g4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLgtrvgtqfgt48g4La04LeK4oCN4La74Lav4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiLgt4Pgtrvgt4rgtrTgtqsg4La04LeK4oCN4La74Lav4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfY2hhcmFjdGVyIiBtc2dpZD0iNzMzNjQ3MDUzNTM4NTAwOTUyMyI+IuC2heC2muC3iuC3guC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX3dvcmQiIG1zZ2lkPSI3MDc1NTcwMzI4Mzc0OTE4NjYwIj4i4LeA4Lag4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluayIgbXNnaWQ9IjU4MTU1MDg4ODA3ODI0ODgyNjciPiLgt4Pgtrbgt5DgtrPgt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF9saW5lIiBtc2dpZD0iNTc2NDI2NzIzNTAyNjEyMDg4OCI+IuC2u+C3muC2m+C3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfYW1wbSIgbXNnaWQ9IjQ1ODQzMzgwODM1MjkzNTU5ODIiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lUDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX2NhcF9hbXBtIiBtc2dpZD0iMjA4MzQ2NTk5Mjk0MDQ0NDM2NiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IkFNUE0iPiVwPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X2ZhaWxlZCIgbXNnaWQ9IjU0MTAyNzAzMjkxMTQyMTIwNDEiPiLgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC2tOC2u+C3k+C2muC3iuC3guC2q+C2uiDgtoXgt4Pgt4/gtrvgt4rgtq7gtprgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub3Rfc3lzdGVtIiBtc2dpZD0iNDQzNTIwMTY1Njc2NzI3NjcyMyI+IkZBQ1RPUllfVEVTVCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4AgL3N5c3RlbS9hcHAg4LeE4LeSIOC3g+C3iuC2ruC3j+C2tOC3kuC2rSDgtrTgt5Dgtprgt5rgtqIg4LeD4Laz4LeE4LePIOC2tOC2uOC2q+C2muC3iiDgt4Pgt4Tgtrog4Lav4Laa4LeK4LeA4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+IkZBQ1RPUllfVEVTVCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Ag4La94La24LeP4Lav4LeZ4LaxIOC2tOC3kOC2muC3muC2ouC2uuC2muC3iiDgt4Pgt5zgtrrgt4/gtpzgtq0g4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9yZWJvb3QiIG1zZ2lkPSI2MzIwMTY4MjAzMDUwNzkxNjQzIj4i4La04LeU4Lax4La74LeP4La74La44LeK4La3IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjE5ODc0ODM5Nzc4MzQ2MDM4NzIiPiJcIjx4bGlmZjpnIGlkPSJUSVRMRSI+JXM8L3hsaWZmOmc+XCIg4LeE4LeSIOC2h+C2reC3kiDgtrTgt5Lgtqfgt5Tgt4Ag4Laa4LeS4La64Lax4LeK4Lax4LeaOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNjk2MTkwMzIxMzcyOTY2NzU3MyI+IuC2ouC3j+C3gOC3j+C3g+C3iuC2muC3iuKAjeC2u+C3kuC2tOC3iuC2p+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3RpdGxlIiBtc2dpZD0iMjYxOTM3NjU1NTUyNTExNjU5MyI+IuC3g+C2guC2oOC2veC2seC2uiDgtq3gt4Tgt4Dgt5Tgtrvgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfcG9zaXRpdmVfYnV0dG9uIiBtc2dpZD0iMzExMjc1MjAxMDYwMDQ4NDEzMCI+IuC2uOC3meC2uCDgtrTgt5Lgtqfgt5Tgt4Dgt5ngtrHgt4og4LaJ4LeA4Lat4LeKIOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX25lZ2F0aXZlX2J1dHRvbiIgbXNnaWQ9IjU2MTQ4NjEyOTMwMjYwOTk3MTUiPiLgtrjgt5ngtrgg4La04LeS4Lan4LeU4LeA4LeZ4LeE4LeSIOC2ieC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkIiBtc2dpZD0iMzQ2ODgxNjM1NzA5NTM3ODU5MCI+Ijx4bGlmZjpnIGlkPSJNRVNTQUdFIj4lczwveGxpZmY6Zz5cblxu4LaU4La24LanIOC2uOC3meC2uCDgtrTgt5Lgtqfgt5Tgt4Dgt5ngtrHgt4og4LeD4LaC4Lag4La94Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrog4La24LeA4LanIOC2lOC2tuC2pyDgt4Dgt5Lgt4Hgt4rgt4Dgt4/gt4Pgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9sYWJlbCIgbXNnaWQ9IjY4NjAyNjE3NTg2NjU4MjUwNjkiPiLgtq3gt4Tgt4Dgt5Tgtrvgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG91YmxlX3RhcF90b2FzdCIgbXNnaWQ9IjQ1OTUwNDY1MTU0MDAyNjg4ODEiPiLgtovgtrTgtq/gt5ngt4M6IOC3gOC3kuC3geC3j+C2veC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeEIOC2muC3lOC2qeC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4Lav4LeZ4LeA4La74Laa4LeKIOC2reC2p+C3iuC2p+C3lCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfdGhpc19mb3JtIiBtc2dpZD0iNDYxNjc1ODg0MTE1NzgxNjY3NiI+IuC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3kuC2uiDgtrTgt5Lgtrvgt4Dgt5TgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXR1cF9hdXRvZmlsbCIgbXNnaWQ9IjcxMDM0OTUwNzAxODA1OTA4MTQiPiLgt4Pgt4rgt4DgtrrgtoLgtprgt4rigI3gtrvgt5Lgtrog4La04LeS4La74LeA4LeU4La4IOC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3NfbmFtZV9zZXBhcmF0b3IiIG1zZ2lkPSI2MzUwMTQ1MTU0Nzc5NzA2NzcyIj4iICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9uYW1lX2Zvcm1hdCIgbXNnaWQ9IjMyNjgwNDEwNTQ4OTkyMTQ5NDUiPiIkMSQyJDMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfc2VwYXJhdG9yIiBtc2dpZD0iNzQ4MzMwNzg5MzE3MDMyNDEyOSI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X2Zvcm1hdCIgbXNnaWQ9IjQ4NzQ0NTk0NTU3ODY4MjczNDQiPiIkMSQyJDMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcm92aW5jZSIgbXNnaWQ9IjIyMzE4MDY1NTM4NjM0MjIzMDAiPiLgtrTgt4Xgt4/gtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wb3N0YWxfY29kZSIgbXNnaWQ9IjQ2OTY0MzA0MDc2ODkzNzcxMDgiPiLgtq3gt5DgtrTgt5Dgtr3gt4og4Laa4Lea4Lat4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfc3RhdGUiIG1zZ2lkPSI2OTg4ODk0MTk1NTIwMDQ0NjEzIj4i4Lai4Lax4La04Lav4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfemlwX2NvZGUiIG1zZ2lkPSI4Njk3NTQ0NTkyNjI3MzIyOTQ2Ij4iWklQIOC2muC3muC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2NvdW50eSIgbXNnaWQ9IjIzNzA3Mzc3MTAyMDM2Mjg5MSI+IuC2tOC3iuKAjeC2u+C3j+C2seC3iuC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2lzbGFuZCIgbXNnaWQ9IjQwMjAxMDA4NzU5ODQ2NjcwMjUiPiLgtq/gt5bgtrTgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kaXN0cmljdCIgbXNnaWQ9Ijg0MDA3MzUwNzMzOTIyNjc2NzIiPiLgtq/gt5Lgt4Pgt4rgtq3gt4rigI3gtrvgt5Lgtprgt4rgtprgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kZXBhcnRtZW50IiBtc2dpZD0iNTM0MzI3OTQ2MjU2NDQ1MzMwOSI+IuC2r+C3meC2tOC3j+C2u+C3iuC2reC2uOC3muC2seC3iuC2reC3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ByZWZlY3R1cmUiIG1zZ2lkPSIyMDI4NDk5NDg1MDY1ODAwNDE5Ij4i4La04LeK4oCN4La74LeP4Lax4LeK4Lat4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcGFyaXNoIiBtc2dpZD0iODIwMjIwNjEwNTQ2ODgyMDA1NyI+IuC2muC3neC2u+C2veC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FyZWEiIG1zZ2lkPSIzNTQ3NDA5MDUwODg5OTUyNDIzIj4i4La04LeK4oCN4La74Lav4Lea4LeB4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZW1pcmF0ZSIgbXNnaWQ9IjI4OTM4ODA5Nzg4MzU2OTg4MTgiPiLgtpHgtrjgt5Lgtrvgt5rgtqfgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzc3NTI2NTc3NTQwNTEwNjk4MyI+IuC2lOC2tuC2nOC3miDgt4Dgt5ngtrbgt4og4La04LeS4Lan4LeU4LeD4Lax4LeKIOC3g+C3hCDgtongtq3gt5Lgt4Tgt4/gt4Pgtrog4Laa4LeS4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4i4La24LeK4oCN4La74LeA4LeK4LeD4La74La6IOC2seC3kOC2u+C2ueC3liDgt4Pgt5Lgtrrgtr3gt5QgVVJMIOC3g+C3hCDgt4Pgt5Lgtrrgtr3gt5Qg4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC2tOC3kuC2p+C3lOC3g+C2seC3iiDgt4Dgtr0g4LaJ4Lat4LeS4LeE4LeP4LeD4La6IOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4Lan4LeE4LaxOiDgt4Dgt5ngtrbgt4og4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC2heC3gOC3geC3iuKAjeC2uuC2reC3jyDgt4Pgtrjgtpwg4Lat4LeZ4LeA4LeZ4Lax4LeSIOC2tOC3j+C2u+C3iuC3geC3gCDgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrsg4LeA4La94LanIOC3hOC3nSDgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La24La9IOC2seC3nOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3MTQ3ODUxNjUyNzMzMTQ0OTAiPiLgt4Dgt5ngtrbgt4og4La04LeS4Lan4LeU4LeD4Lax4LeKIOC3g+C3hCDgtongtq3gt5Lgt4Tgt4/gt4Pgtrrgtqcg4La94LeS4LeA4LeS4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2ODI1NTI3NDY5MTQ1NzYwOTIyIj4i4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtpzgtrbgtqngt48g4Laa4La7IOC2h+C2reC3kiDgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrvgtrrgt5og4LaJ4Lat4LeS4LeE4LeP4LeD4La6IOC3hOC3nSDgtrTgt5Lgtqfgt5Tgt4PgtrHgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC2r+C2reC3iuC2rSDgtrjgt5Dgtprgt5Pgtrjgtqcg4LeE4LedIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44LeZ4La44Laf4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiDgt4Pgtqfgt4TgtrE6IOC3gOC3meC2tuC3iiDgtpzgt4Dgt5rgt4Lgtqsg4LeE4LeQ4Laa4LeS4La64LeP4LeAIOC3g+C3hOC3kuC2rSDgtq3gt5ngt4Dgt5ngtrHgt5Ig4La04LeP4La74LeK4LeB4LeAIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgt4Tgt50g4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr3gt5LgtrHgt4og4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uuC2pyDgtrbgtr0g4Lax4Lec4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0OTczODk1MzEwMTQxODU1MDkiPiLgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2huC2oOC2uuC2seC2uiDgtprgtrvgtrEg4La94LavIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtongtq3gt5Lgt4Tgt4/gt4Pgtrog4LeE4LedIOC2tOC3kuC2p+C3lOC3g+C2sSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC2r+C2reC3iuC2rSDgtrjgt5Dgtprgt5Pgtrjgtqcg4LeE4LedIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4LatIOC2muC2u+C2uuC3ki4g4LeD4Lan4LeE4LaxOiDgt4Dgt5ngtrbgt4og4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC2heC3gOC3geC3iuKAjeC2uuC2reC3j+C3gOC2uiDgt4Pgtrjgtpwg4Lat4LeZ4LeA4LeZ4Lax4LeSIOC2tOC3j+C2u+C3iuC3geC3gCDgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrsg4LeE4LedIOC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La24La9IOC2nOC3kOC2seC3iuC3gOC3kuC2uiDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbGFybSIgbXNnaWQ9IjEzNzkyOTQ1NTYzNjIwOTE4MTQiPiLgt4Pgt5PgtrHgt5Tgt4Dgtprgt4og4LeD4LeQ4Laa4LeD4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWxhcm0iIG1zZ2lkPSIzMTYzOTIwMzkxNTc0NzM4NDgiPiLgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4La74LaxIOC2veC2ryDgt4Pgt5PgtrHgt5Qg4LaU4La74La94Led4LeD4LeUIOC2uuC3meC2r+C3lOC2uOC3miDgt4Pgt5PgtrHgt5Tgt4Ag4LeD4Laa4LeD4LeKIOC2muC2u+C2seC3iuC2seC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LaH4Lat4LeQ4La44LeKIOC3g+C3k+C2seC3lCDgtpTgtrvgtr3gt53gt4Pgt5Qg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uCDgtoXgtoLgtpzgtrog4Laa4LeK4oCN4La74LeS4La64LeP4LeA4LanIOC2seC2guC3gOC3jyDgtrHgt5zgtq3gt5Lgtrbgt5Pgtrjgtqcg4LaJ4LapIOC2reC3kuC2tuC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjU1MjU2NjAwMjYwOTA5NTkwNDQiPiLgt4Tgtqwg4Lat4LeQ4La04LeR4La9IOC2keC2muC3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hZGRWb2ljZW1haWwiIG1zZ2lkPSI2NjA0NTA4NjUxNDI4MjUyNDM3Ij4i4LaU4La24Lac4LeaIOC3hOC2rCDgtq3gt5DgtrTgt5Hgtr3gt5og4LaR4LaxIOC2veC3kuC2tOC3kiDgt4Dgt5ngtq0g4LaR4LaxIOC2tOC2q+C3kuC3gOC3kuC2qSDgtpHgtprgtq3gt5Qg4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iNTk2MjIyNDE1ODk1NTI3MzkzMiI+IuC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2u+C2uuC3miDgtrfgt5Yg4LaF4LeA4LeD4La7IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSIxMDgzNzQzMjM0NTIyNjM4NzQ3Ij4i4La24LeK4oCN4La74LeA4LeU4LeD4La74La64LeaIOC2t+C3liDgt4Pgt4rgtq7gt4/gtrHgt5Pgtrog4LaF4LeA4LeD4La7IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2t+C3kuC2uOC2rSDgt4Dgt5ngtrbgt4og4LaF4Lap4LeA4LeSIOC3gOC2veC2pyDgt4Pgt4rgtq7gt4/gtrHgt5Pgtrog4Lat4Lec4La74Lat4LeU4La74LeUIOC2uuC3kOC3gOC3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeZ4La74LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iNTU2ODEzOTEwMDY0NTgyOTExNyI+IuC2tOC3kOC2muC3muC2oiDgt4Pgtq3gt4rigI3gtrrgt4/gtrTgtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iODQzNzU5MDE5MDk5MDg0MzM4MSI+IuC3g+C3iuC2ruC3j+C2tOC3kuC2rSDgtprgt5zgtqcg4LaH4Lat4LeSIOC2tOC3kOC2muC3muC2ouC2uuC2muC3iiDgt4Pgtq3gt4rigI3gtrrgt4/gtrTgtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iNDE4Nzc4Njc5MzM2MDMyNjY1NCI+IuC2tOC3kOC2muC3muC2oiDgt4Pgtq3gt4rigI3gtrrgt4/gtrTgtprgtrrgtprgt4og4LeA4LeZ4LatIOC2tuC2s+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSIzMTgwNzQxNzczMjMzODYyMTI2Ij4i4La04LeQ4Laa4Lea4LaiIOC3g+C2reC3iuKAjeC2uuC3j+C2tOC2miDgtongtr3gt4rgtr3gt5Pgtrjgt4og4LeA4La94LanIOC2r+C2u+C2seC3iuC2seC3j+C2pyDgtongtqkg4La94La24LePIOC2r+C3mi4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4LeD4Lea4Lat4LeKIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXJpYWxQb3J0IiBtc2dpZD0iNTQ2MDgzMzI3NjU0NjMxMDc2Ij4i4LeB4LeK4oCN4La74Lea4Lar4LeS4Lac4LatIOC2tOC3nOC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiJTZXJpYWxNYW5hZ2VyIEFQSSDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaF4Lax4LeU4Laa4LeK4oCN4La74La4IOC2reC3nOC2pyDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC3k+C2uOC2pyDgtrvgtrPgt4DgtrHgtrrgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNTA3Nzc3NDI5Nzk0MzQwOTI4NSI+IuC2tuC3j+C3hOC3kuC2uyDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq0g4LeD4LeQ4La04La64LeU4La44LeK4Laa4La74LeU4LeA4Lax4LeKIOC3gOC3meC2rSDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjQ1NDQzNDY0ODY2OTc4NTM2ODUiPiLgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq0g4LeD4La04La64Lax4LeK4Lax4Lax4LeK4LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5Pgtrjgtqcg4Lav4La74Lax4LeK4Lax4Lax4LeK4LanIOC3guC3meC2veC3iiDgtpHgtprgt5og4LeD4LeS4LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4LeD4Lea4Lat4LeKIOC2heC2r+C3j+C3hSDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVMb2NrIiBtc2dpZD0iMzUyNzU1ODM2NjYxNjY4MDg4OSI+IuC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3k+C2uiDgtovgtrTgt4/gtoLgtpwg4La64LeA4Lat4LeK4Laa4LeP4La9IOC2muC3kuC2u+C3k+C2uOC3iiDgtrTgt4Pgt5Tgtrbgtqcg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlTG9jayIgbXNnaWQ9IjE2NTU2MjU4MzIxNjY3Nzg0OTIiPiLgtovgtrTgt4/gtoLgtpzgtrog4LaL4Lat4LeK4LeB4LeK4oCN4La74Lea4Lar4LeS4Laa4La74Lar4La64LanIOC2heC2seC3iuC2reC2u+C3iuC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kyDgtrHgt5zgt4DgtrEg4La64LeF4LeSIOC2h+C2u+C2ueC3k+C2uOC2muC3iiDgt4PgtrPgt4Tgt48g4LeD4LeU4Lav4LeU4LeD4LeUIOC3gOC3meC2veC3j+C3gCDgtprgt5Tgtrjgtprgt4rgtq8g4La64Lax4LeK4LaxIOC2nOC3kOC2sSDgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgtqcg4Lat4Lec4La74Lat4LeU4La74LeUIOC2veC2tuC3j+C2r+C3k+C2uOC2pyDgtq/gtrvgtrHgt4rgtrHgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX21lc3NhZ2UiIG1zZ2lkPSI3NjczNDQ2ODcxMzkxOTU3OTAiPiLgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrvgtrrgtqcg4La44LeZ4La4IOC2uOC3lOC2u+C2tOC2r+C2uiDgtrjgtq3gtpog4Lat4La24LePIOC2nOC3kOC2seC3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbm90bm93IiBtc2dpZD0iNjM4OTY3NTMxNjcwNjY5OTc1OCI+IuC2r+C3kOC2seC3iiDgtrHgt5zgt4Dgt5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX3JlbWVtYmVyIiBtc2dpZD0iNjQ5MTg3OTY3ODk5Njc0OTQ2NiI+IuC2uOC2reC2miDgtq3gtrbgt48g4Lac4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9uZXZlciIgbXNnaWQ9IjgyNzQzMzAyOTY3ODU4NTUxMDUiPiLgtprgt4Dgtq/gt4/gt4Dgtq3gt4og4Lax4Lec4LeA4LeaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4i4La44LeZ4La4IOC2tOC3kuC2p+C3lOC3gCDgt4Dgt5Lgt4Dgt5jgtq0g4Laa4LeS4La74LeT4La44LanIOC2lOC2tuC2pyDgtoXgt4Dgt4Pgtrsg4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRleHRfY29waWVkIiBtc2dpZD0iNDk4NTcyOTUyNDY3MDEzMTM4NSI+IuC2tOC3meC3hSDgtrTgt4Pgt5Tgtrvgt5Qg4La04LeU4LeA4La74LeU4LeA4LanIOC2tOC3kuC2p+C2tOC2reC3iiDgtprgtrvgtrEg4La94Lav4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vcmVfaXRlbV9sYWJlbCIgbXNnaWQ9IjQ2NTA5MTg5MjMwODMzMjA0OTUiPiLgtq3gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwZW5kX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjU3MjIxNDQ2MTY3NjAxNTY0MiI+IuC2uOC3meC2seC3lOC3gCsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NwYWNlX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjQxMDMyODYzOTI3MjE2MjUzNyI+InNwYWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9lbnRlcl9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI3NDMzNjI3ODUxMTEzMDk2NjgiPiLgtofgtq3gt5Tgtr3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGVfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIzNjU4MTc4MDA3MjAyNzQ4MTY0Ij4i4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoX2dvIiBtc2dpZD0iODI5ODAxNjY2OTgyMjE0MTcxOSI+IuC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc2VhcmNoIiBtc2dpZD0iNjc0OTgyNjYzOTA5ODUxMjEyMCI+IuC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fcXVlcnkiIG1zZ2lkPSI1OTExNzc4NTkzMTI1MzU1MTI0Ij4i4LeD4LeZ4LeA4LeU4La44LeKIOC3gOC3kuC2uOC3g+C3lOC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fY2xlYXIiIG1zZ2lkPSIxMzMwMjgxOTkwOTUxODMzMDMzIj4i4LeA4LeS4La44LeD4LeU4La4IOC3hOC3kuC3g+C3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3N1Ym1pdCIgbXNnaWQ9IjI2ODg0NTAxMzMyOTc5ODM1NDIiPiLgt4Dgt5Lgtrjgt4Pgt5Tgtrgg4La64Lec4La44LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fdm9pY2UiIG1zZ2lkPSIyNDUzMjAzNjk1Njc0OTk0NDQwIj4i4LeE4LasIOC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSI3NDYwNjk0MDcwMzA5NzMwMTQ5Ij4i4LeD4LeK4La04La74LeK4LeBIOC2muC3kuC2u+C3k+C2uOC3meC2seC3iiDgtpzgt4Dgt5rgt4Lgtqvgtrog4LeD4La24La9IOC2muC2u+C2seC3iuC2sSDgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NjU1ODg3NTM5MDg5OTEwNTc3Ij4i4LeD4LeK4La04La74LeK4LeB4La6IOC3gOC3meC2reC3kuC2seC3iiDgtpzgt4Dgt5rgt4Lgtqvgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iQUNDRVNTSUJJTElUWV9TRVJWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtrouIOC3g+C3iuC2tOC2u+C3iuC3geC2uiDgt4Dgt5ngtq3gt5LgtrHgt4og4Lac4LeA4Lea4LeC4Lar4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Dgt5LgtqcsIOC2lOC2tuC2nOC3miDgtofgtp/gt5Lgtr3gt5Lgt4Dgtr3gtqcg4La04LeE4LeFIOC3gOC3kuC3g+C3iuC2reC2uyDgtofgt4Pgt5Lgtrog4LeE4LedIOC2tuC3kOC2veC3kuC2uiDgt4Tgt5Dgtpog4LeE4LedIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgt4Pgtrjgtpwg4LaF4Lax4LeK4Lat4La74LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kyDgt4Dgt5Pgtrjgtqcg4LaJ4LaC4Lac4LeS4Lat4LeSIOC3g+C3kuC2r+C3lCDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI3MDgxOTk2NzI4NTIzNzMxOTUiPiLgt4Pgt4rgtrTgtrvgt4rgt4Hgtrog4LeA4LeZ4Lat4LeS4Lax4LeKIOC2nOC3gOC3muC3guC2q+C2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4LeS4La74LeT4La44LanIDx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4g4LanIOC2heC3gOC3geC3iuKAjeC2uuC2uuC3ki4g4LeD4LeK4La04La74LeK4LeB4La6IOC3gOC3meC2reC3kuC2seC3iiDgtpzgt4Dgt5rgt4Lgtqvgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC3gOC3kuC2pywg4LaU4La24Lac4LeaIOC2h+C2n+C3kuC2veC3kuC3gOC2veC2pyDgtrTgt4Tgt4Ug4LeA4LeS4LeD4LeK4Lat4La7IOC2h+C3g+C3kuC2uiDgt4Tgt50g4La24LeQ4La94LeS4La6IOC3hOC3kOC2miDgt4Tgt50g4Lav4LeU4La74Laa4Lau4Lax4La6IOC3g+C2uOC2nCDgtoXgtrHgt4rgtq3gtrvgt4og4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeTIOC3gOC3k+C2uOC2pyDgtongtoLgtpzgt5Lgtq3gt5Ig4LeD4LeS4Lav4LeUIOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI3Mzk2Mzg0NTA4OTUzNzc5OTI1Ij4i4La44LeP4LeDIDEg4Laa4LanIOC2tOC3meC2uyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJlZm9yZU9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iOTA5MTM0NTQ2ODM2NDk5ODI2Ij4i4La44LeP4LeDIDEg4Laa4LanIOC2tOC3meC2uyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX3NlY29uZHNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDg2OTg3MDA1NjU0Nzg5NjAxMSI+IuC2reC2reC3iuC2tOC2uyAxIOC2muC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM5MDM3MDY4MDQzNDk1NTYzNzkiPiLgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX21pbnV0ZXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzMwNjc4NzQzMzA4ODgxMDE5MSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCAxIOC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIxNzY5NDIwMDg5MTU0NTUxMTYiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX2hvdXJzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjkxNTA3OTc5NDQ2MTA4MjE4NDkiPiLgtrTgt5DgtrogMSDgtprgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDY3MjczMjM5NTg3NTg3NTY5Ij4i4La04LeQ4La6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9Imxhc3RfbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMwNjk5OTI4MDgxNjQzMTgyNjgiPiLgtoXgtrHgt4rgtq3gt5Lgtrgg4Lav4LeA4LeD4LeKIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ibGFzdF9tb250aCIgbXNnaWQ9IjM5NTkzNDY3Mzk5NzkwNTU0MzIiPiLgtoXgt4Dgt4Pgt4/gtrEg4La44LeP4LeD4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkZXIiIG1zZ2lkPSI1MjExOTc1MDIyODE1NTU0ODQwIj4i4La04La74LarIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJudW1fZGF5c19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NjEzNTg1MzQzOTgxMTU4MjAiPiLgtorgtrrgt5oiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI0Nzk1ODY0NjYxNTMzMTQ2MzMiPiLgtq/gt5LgtrEgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX3NlY29uZHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIyNzI5NzQ1NTYwOTU0OTA1MTAyIj4i4Lat4Lat4LeK4La04La7IDEg4Laa4LeS4Lax4LeKIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMjQxOTI2MTE2NDQzOTc0Njg3Ij4i4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC2r+C3kyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX21pbnV0ZXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NzkzMDk1MjUxMzI1MjAwMzk1Ij4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUIDEg4Laa4Lav4LeTIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMzMwNzEzOTM2Mzk5NDQ4NzQ5Ij4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9ob3VycyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjcxNjQzNTMzNDI0Nzc3Njk5OTkiPiLgtrTgt5DgtrogMSDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDcyOTA2NzczNTM3MjczODkiPiLgtrTgt5DgtrogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2reC3lOC3hSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NDEzMDg4NzQzMDA5ODM5NTE4Ij4i4LeE4LeZ4LanIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1MTA5NDQ5Mzc1MTAwOTUzMjQ3Ij4i4Lav4LeS4LaxIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9udW1fc2Vjb25kc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxODQ5MDM2ODQwMjAwMDY5MTE4Ij4i4Lat4Lat4LeK4La04La7IDEg4Laa4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzY5OTE2OTM2NjY1MDkzMDQxNSI+IuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX21pbnV0ZXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjM2MTQ5MDE0NzExMzg3MTU0NSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCAxIOC2muC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg1MTE2NDk2ODU5NzE1MDcxMCI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2hvdXJzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ3OTYyMTIwMzk3MjQ3MjIxMTYiPiLgtrTgt5DgtrogMSDgtprgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2ODg5OTcwNzQ1NzQ4NTM4OTAxIj4i4La04LeQ4La6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9udW1fZGF5c19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NDYzMTYxNzExNDkyNjgwMzA5Ij4i4LaK4La64LeaIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNDUzMzQyNjM5NjE2NDgxMTkxIj4i4Lav4LeS4LaxIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NDIyMjUzNzA3OTUwNjYyOTkiPiLgtq3gtq3gt4rgtrTgtrsgMSDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDk1ODgwMTA4ODI1ODA1MTA4Ij4i4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fbWludXRlcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU2Mjc4NjE0OTkyODI4NDg3OCI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCAxIOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQyMTYxMTMyOTI3MDY1Njg3MjYiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2reC3lOC3hSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9ob3VycyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNzQ3MDgxMTgxMjQwNDUyNDYiPiLgtrTgt5DgtrogMSDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNzA1MzczNzY2Nzk4MDEzNDA2Ij4i4La04LeQ4La6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjIxNzg1NzYyNTQzODU3Mzk4NTUiPiLgt4Tgt5ngtqciPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI5NzMwNjI5NjgwMzgzNTU5OTEiPiLgtq/gt5LgtrEgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2reC3lOC3hSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl9kYXRlIiBtc2dpZD0iOTA5Mzk0OTc1Nzc1NzQ0NTExNyI+Ijx4bGlmZjpnIGlkPSJEQVRFIj4lczwveGxpZmY6Zz4g4LeA4LaxIOC2r+C3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl90aW1lIiBtc2dpZD0iNTUwNjgzMTI0NDI2MzA4Mzc5MyI+Ijx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4g4LanIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3llYXIiIG1zZ2lkPSI1MDQwMzk1NjQwNzExODY3MTc3Ij4iPHhsaWZmOmcgaWQ9IllFQVIiPiVzPC94bGlmZjpnPiDgtq3gt5Tgt4UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXkiIG1zZ2lkPSI4MTQ0MTk1Nzc2MDU4MTE5NDI0Ij4i4Lav4LeA4LeDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5cyIgbXNnaWQ9IjQ3NzQ1NDc2NjEwMjEzNDQ2MDIiPiLgtq/gt5LgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyIiBtc2dpZD0iMjEyNjc3MTkxNjQyNjE4OTQ4MSI+IuC2tOC3kOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJzIiBtc2dpZD0iODk0NDI0MDA1MjY2ODUyOTkzIj4i4La04LeQ4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlIiBtc2dpZD0iOTE0ODg3ODY1NzcwMzc2OTg2OCI+Im1pbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZXMiIG1zZ2lkPSI1NjQ2MDAxMDA1ODI3MDM0NTA5Ij4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kIiBtc2dpZD0iMzE4NDIzNTgwODAyMTQ3OCI+IuC2reC2reC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlY29uZHMiIG1zZ2lkPSIzMTYxNTE1MzQ3MjE2NTg5MjM1Ij4i4Lat4Lat4LeK4La04La7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VlayIgbXNnaWQ9IjU2MTc5NjE1MzcxNzMwNjE1ODMiPiLgt4Pgtq3gt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWVrcyIgbXNnaWQ9IjY1MDk2MjM4MzQ1ODM5NDQ1MTgiPiLgt4Pgtq3gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyIiBtc2dpZD0iNDAwMTExODIyMTAxMzg5MjA3NiI+IuC2heC3gOC3lOC2u+C3lOC2r+C3iuC2ryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJzIiBtc2dpZD0iNjg4MTU3NzcxNzk5MzIxMzUyMiI+IuC2heC3gOC3lOC2u+C3lOC2r+C3lCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY5NjIwMTU1MjgzNzI5Njk0ODEiPiLgtq3gtq3gt4rgtrTgtrsgMSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTg4NjEwNzc2NjU3NzE2Njc4NiI+IuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fbWludXRlcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ5MTU0MTQwMDI1NDYwODU2MTciPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgMSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzE2NTE4NzE2OTIyNDkwODc3NSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25faG91cnMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4OTE3NDY3NDkxMjQ4ODA5OTcyIj4i4La04LeQ4La6IDEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM4NjM5NjI4NTQyNDY3NzM5MzAiPiLgtrTgt5DgtrogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LeKIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX3RpdGxlIiBtc2dpZD0iMzUzNDUwOTEzNTQzODM1MzA3NyI+IuC3gOC3k+C2qeC3kuC2uuC3nSDgtpzgt5Dgtqfgtr3gt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF9pbnZhbGlkX3Byb2dyZXNzaXZlX3BsYXliYWNrIiBtc2dpZD0iMzE4NjY3MDMzNTkzODY3MDQ0NCI+IuC2uOC3miDgt4Dgt5Pgtqngt5Lgtrrgt53gt4Ag4La44LeZ4La4IOC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtrTgt4rigI3gtrvgt4Dgt4/gt4TgtrHgtrog4LeD4Laz4LeE4LePIOC3gOC2veC2guC2nOC3lCDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX3RleHRfdW5rbm93biIgbXNnaWQ9IjM0NTA0MzkxNTUxODc4MTAwODUiPiLgtrjgt5ngtrgg4LeA4LeT4Lap4LeS4La64Led4LeAIOC2sOC3j+C3gOC2seC2uiDgtprgt4Ug4Lax4Lec4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl9idXR0b24iIG1zZ2lkPSIyODIyMjM4MjE1MTAwNjc5NTkyIj4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpdmVfdGltZSIgbXNnaWQ9IjE4MTg1NTcxNzc4Mjk0MTE0MTciPiI8eGxpZmY6ZyBpZD0iREFURSI+JTEkczwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vb24iIG1zZ2lkPSI3MjQ1MzUzNTI4ODE4NTg3OTA4Ij4i4La44Law4LeK4oCN4La64LeE4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iTm9vbiIgbXNnaWQ9IjMzNDIxMjc3NDUyMzAwMTMxMjciPiLgtrjgtrDgt4rigI3gtrrgt4/gt4TgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaWRuaWdodCIgbXNnaWQ9IjcxNjYyNTk1MDg4NTA0NTc1OTUiPiLgtrjgtrDgt4rigI3gtrrgtrgg4La74LeP4Lat4LeK4oCN4La74LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iTWlkbmlnaHQiIG1zZ2lkPSI1NjMwODA2OTA2ODk3ODkyMjAxIj4i4La44Law4LeK4oCN4La64La4IOC2u+C3j+C2reC3iuKAjeC2u+C3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsYXBzZWRfdGltZV9zaG9ydF9mb3JtYXRfbW1fc3MiIG1zZ2lkPSI0NDMxNTU1OTQzODI4NzExNDczIj4iPHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUxJDAyZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUyJDAyZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGFwc2VkX3RpbWVfc2hvcnRfZm9ybWF0X2hfbW1fc3MiIG1zZ2lkPSIxODQ2MDcxOTk3NjE2NjU0MTI0Ij4iPHhsaWZmOmcgaWQ9IkhPVVJTIj4lMSRkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTIkMDJkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iU0VDT05EUyI+JTMkMDJkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdEFsbCIgbXNnaWQ9IjY4NzY1MTg5MjU4NDQxMjkzMzEiPiLgt4Pgt5Lgtrrgtr3gt4rgtr0g4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuC2muC2tOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4La04LeS4Lan4La04Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuC2heC2veC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4La04LeK4oCN4La74Lat4LeS4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC2u+C2seC3iuC2sS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i4La04LeZ4LeFIOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLgtrTgt5ngt4Ug4Lat4Lea4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IuC3geC2tuC3iuC2ryDgtprgt53gt4Lgtrrgtqcg4LaR4Laa4Lat4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRNZXRob2QiIG1zZ2lkPSIxNjUzNjMwMDYyMzA0NTY3ODc5Ij4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVkaXRUZXh0TWVudVRpdGxlIiBtc2dpZD0iNDkwOTEzNTU2NDk0MTgxNTQ5NCI+IuC2tOC3meC3hSDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4DgtrHgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RpdGxlIiBtc2dpZD0iNTU3NjI3MjQ5NjM2NTY4NDgzNCI+IuC2huC2oOC2uuC2seC2uiDgtongtqkg4La04LeK4oCN4La74La44LeP4Lar4La6IOC2heC2qeC3lCDgt4Dgt5Mg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190ZXh0IiBtc2dpZD0iNjY0MDUwNTgxNzYxNzQxNDM3MSI+IuC3g+C2uOC3hOC2uyDgtrTgtq/gt4rgtrDgtq3gt5Ig4Laa4LeP4La74LeK4La64La64Lax4LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3jyDgtrHgt5zgtprgtrvgtrHgt5Qg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX3J1bm5pbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODcxODMzNTEyMTA2MDc4NzkxNCI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g4Law4LeP4LeA4Lax4La6IOC3gOC3miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iNDY1MzU4Njk0Nzc0NzMzMDA1OCI+IuC3gOC3kOC2qeC3kuC2tOC3lOC2uyDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeE4LedIOC2uuC3meC2r+C3lOC2uCDgtrHgt5Dgt4Dgtq3gt5Pgtrgg4LeD4Laz4LeE4LePIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2siIG1zZ2lkPSI1OTcwMDYwNDMwNTYyNTI0OTEwIj4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNjQ0MjU2MDU3MTI1OTkzNTEzMCI+IuC2heC3gOC2veC2guC2nOC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZXMiIG1zZ2lkPSI1MzYyOTgyMzAzMzM3OTY5MzEyIj4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm8iIG1zZ2lkPSI1MTQxNTMxMDQ0OTM1NTQxNDk3Ij4i4LaF4LeA4La94LaC4Lac4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpYWxvZ19hbGVydF90aXRsZSIgbXNnaWQ9IjIwNDk2NTg3MDg2MDkwNDMxMDMiPiLgtoXgt4DgtrDgt4/gtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2FkaW5nIiBtc2dpZD0iNzkzMzY4MTI2MDI5NjAyMTE4MCI+IuC2tOC3luC2u+C2q+C2uiDgt4Dgt5ngtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29uIiBtc2dpZD0iMTU0NDY4Mjc1NTUxNDQ5NDI5OCI+IuC3g+C2muC3iuKAjeC2u+C3k+C2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb2ZmIiBtc2dpZD0iNjgxNTg3MDM4Njk3MjgwNTgzMiI+IuC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aGljaEFwcGxpY2F0aW9uIiBtc2dpZD0iNDUzMzE4NTk0NzA2NDc3MzM4NiI+IuC2tOC3hOC2rSDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4Laa4LeK4oCN4La74LeS4La64LeP4LeAIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNVc2UiIG1zZ2lkPSI0NTgzMDE4MzY4MDAwNjEwNDM4Ij4i4La44LeZ4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gCDgt4PgtrPgt4Tgt48g4LeD4LeU4La04LeU4La74LeU4Lav4LeK4Lav4LeZ4Lax4LeKIOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4LeD4LeQ4Laa4LeD4LeT4La44LeKICZndDsg4La64LeZ4Lav4LeU4La44LeKICZndDsg4La24LeP4Lac4LeQ4Lax4LeT4La44LeKIOC2reC3lOC3hSDgtofgtq3gt5Ig4LeD4LeU4La04LeU4La74LeU4Lav4LeK4LavIOC3hOC3kuC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlQWN0aXZpdHkiIG1zZ2lkPSI3NDg2ODc2MTQ3NzUxODAzMzMzIj4i4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Laa4LeKIOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZVVzYkFjdGl2aXR5IiBtc2dpZD0iNjg5NDc0ODQxNjA3MzU4MzUwOSI+IlVTQiDgtovgtrTgt4/gtoLgtpzgtrog4LeD4Laz4LeE4LePIOC2uuC3meC2r+C3lOC2uOC2muC3iiDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub0FwcGxpY2F0aW9ucyIgbXNnaWQ9IjI5OTE4MTQyNzM5MzY1MDQ2ODkiPiLgtrjgt5ngtrgg4Laa4LeK4oCN4La74LeS4La64LeP4LeAIOC3g+C3kuC2r+C3lCDgtprgt5Lgtrvgt5Pgtrjgtqcg4Laa4LeS4LeD4LeS4Lav4LeUIOC2uuC3meC2r+C3lOC2uOC2muC2pyDgtrHgt5zgt4Tgt5Dgtprgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWVycl90aXRsZSIgbXNnaWQ9IjE5MDU4MDA1NjAzMTcxMzc3NTIiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWVycl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjkzMjYyODQ4ODAxMzA5Mjc3NiI+IuC2heC3gOC3j+C3g+C2seC3j+C3gOC2seC3iuC2rSDgtr3gt5ngt4MgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgtrHgt5Dgt4Dgtq3gt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfcHJvY2VzcyIgbXNnaWQ9IjQ1MDcwNTg5OTcwMzU2OTc1NzkiPiLgtoXgt4Dgt4/gt4PgtrHgt4/gt4DgtrHgt4rgtq0g4La94LeZ4LeDLCA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeS4La6IOC2seC2reC2uyDgt4Dgt5Lgtqvgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX3RpdGxlIiBtc2dpZD0iNDM1MTk0ODQ4MTQ1OTEzNTcwOSI+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfYWN0aXZpdHlfYXBwbGljYXRpb24iIG1zZ2lkPSIxOTA0NDc3MTg5MDU3MTk5MDY2Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMiRzPC94bGlmZjpnPiDgtrTgt4rigI3gtrvgtq3gt5LgtqDgt4/gtrsg4Lax4Lec4Lav4Laa4LeK4LeA4La64LeSLlxuXG7gtpTgtrbgtqcg4LaR4La6IOC2seC2reC2uyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+Ijx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La4IOC2tOC3iuKAjeC2u+C2reC3kuC2oOC3j+C2uyDgtrHgt5zgtq/gtprgt4rgt4Dgtrrgt5IuXG5cbuC2keC2uiDgt4Dgt4Pgt48g4Lav4LeQ4La44LeT4La44LanIOC2lOC2tuC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FwcGxpY2F0aW9uX3Byb2Nlc3MiIG1zZ2lkPSI4OTQxNzU3NjA3MzQwNDgxMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgtrTgt4rigI3gtrvgtq3gt5LgtqDgt4/gtrsg4Lax4Lec4Lav4Laa4LeK4LeA4La64LeSLiDgtpHgtrog4LeA4LeD4LePIOC2r+C3kOC2uOC3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9wcm9jZXNzIiBtc2dpZD0iNjUxMzIwOTg3NDg4MDUxNzEyNSI+Ijx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Lgtrog4La04LeK4oCN4La74Lat4LeS4Lag4LeP4La7IOC2seC3nOC2r+C2muC3iuC3gOC2uuC3ki5cblxu4LaU4La24LanIOC2keC2uiDgtrHgtq3gtrsg4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9jbG9zZSIgbXNnaWQ9IjgzNDYwNzIwOTQ1MjEyNjU2MDUiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXBvcnQiIG1zZ2lkPSI0MDYwMjE4MjYwOTg0Nzk1NzA2Ij4i4LeA4LeP4La74LeK4Lat4LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FpdCIgbXNnaWQ9IjcxNDcxMTgyMTcyMjYzMTc3MzIiPiLgtrvgt5DgtrPgt5Mg4LeD4LeS4Lan4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VicGFnZV91bnJlc3BvbnNpdmUiIG1zZ2lkPSIzMjcyNzU4MzUxMTM4MTIyNTAzIj4i4La04LeS4Lan4LeU4LeAIOC2tOC3iuKAjeC2u+C2reC3kuC2oOC3j+C2uyDgtrHgt5zgtq/gtprgt4rgt4DgtrEg4Lat4Lat4LeK4LeA4La64LanIOC2tOC2reC3iuC3gOC3kyDgtofgtq0uXG5cbuC2lOC2tuC2pyDgtpHgtrog4LeA4LeQ4LeD4LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE1NDc5OTc3ODA1MDY3MTM1ODEiPiLgtrrgt5ngtq/gt5Tgtrgg4Lax4LeQ4LeA4LatIOC3hOC2u+C3gOC3jyDgtrrgt4Dgt48g4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfcmVwbGFjZSIgbXNnaWQ9IjYyMDI0OTg5NDk5NzAyODE0MTIiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOC2r+C3kOC2seC3iiDgtrDgt4/gt4DgtrHgtrog4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgtrjgt5Tgtr3gt5LgtrHgt4rgtrgg4LaF4La74La54LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2NhbGUiIG1zZ2lkPSIzMjAyOTU1NjY3Njc1OTQ0NDk5Ij4i4La04La74LeS4La44LeP4Lar4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3Nob3ciIG1zZ2lkPSI0MDEzODc4ODc2NDg2NjU1ODkyIj4i4LeD4LeQ4La44LeA4LeS4Lan4La4IOC2tOC3meC2seC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+IuC2tOC2r+C3iuC2sOC2reC3kiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4Lat4LeU4LeFIOC2uOC3meC2uiDgtrHgt5Dgt4Dgtq0g4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC2u+C2seC3iuC2sSAmZ3Q7IOC2uuC3meC2r+C3lOC2uOC3iiAmZ3Q7IOC2tuC3j+C2nOC2seC3iuC2seC3jyDgtr3gtq/gt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g4La64LeZ4Lav4LeU4La4ICg8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTIkczwveGxpZmY6Zz4g4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeS4La6KSDgtpHgt4Tgt5IgU3RyaWN0TW9kZSDgtprgt5zgtrHgt4rgtq/gt5rgt4Pgt5Lgtrog4LaL4La94LeK4La94LaC4Lad4Lax4La6IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic212X3Byb2Nlc3MiIG1zZ2lkPSI1MTIwMzk3MDEyMDQ3NDYyNDQ2Ij4iPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kuC2uiDgtpHgt4Tgt5IgU3RyaWN0TW9kZSDgtprgt5zgtrHgt4rgtq/gt5rgt4Pgt5Lgtrog4LaL4La94LeK4La94LaC4Lad4Lax4La6IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfdGl0bGUiIG1zZ2lkPSIxNTg0MTkyMjg1NDQxNDA1NzQ2Ij4iQW5kcm9pZCDgtovgtq3gt4rgt4Hgt4rigI3gtrvgt5rgtqvgt5Ig4LeA4LeZ4La44LeS4Lax4LeKIOC2tOC3gOC2reC3ky4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2FwayIgbXNnaWQ9Ijc5MDQwNDI2ODIxMTE1MjYxNjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC3gOC3kOC2seC3kiDgtrrgt5ngtq/gt5TgtrjgtrTgt4rigI0g4La74LeB4LeD4LeK4LatIOC2muC2u+C2uOC3kuC2seC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19zdGFydGluZ19hcHBzIiBtc2dpZD0iNDUxNDY0NTE2MzQ2OTI2NzEzIj4i4La64LeZ4Lav4LeU4La44LeKIOC2huC2u+C2uOC3iuC2tyDgtprgtrvgtrjgt5LgtrHgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfY29tcGxldGUiIG1zZ2lkPSIxNDA1OTU0NzU0MTEyOTk5MjI5Ij4i4LaH4La74La54LeU4La4IOC2heC3gOC3g+C3j+C2sSDgtprgtrvgtrjgt5LgtrHgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbiIgbXNnaWQ9IjkwODcwNjM5ODU3NzY2MjYxNjYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lMSRzPC94bGlmZjpnPiDgtrDgt4/gt4DgtrHgtrog4LeA4LeZ4La44LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbl9kZXRhaWwiIG1zZ2lkPSIxNzIxNjgxNzQxNjE3ODk4ODY1Ij4i4La64LeZ4Lav4LeU4La44LanIOC2uOC3j+C2u+C3lCDgt4Dgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90aXRsZSIgbXNnaWQ9IjcxNTMxNjcwODU0MDMyOTgxNjkiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeP4La74LeUIOC3gOC2seC3gOC3j+C2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGV4dCIgbXNnaWQ9IjcwMjI2MzE5MjQ1MzQ0MDY0MDMiPiLgtoXgtr3gt5Tgtq3gt4og4La64LeZ4Lav4LeU4La44Laa4LeKIOC2huC2u+C2uOC3iuC2tyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeZ4La7IOC2reC3gOC2uOC2reC3iiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgt5ngt4Tgt5Ig4La64LeZ4Lav4LeZ4La44LeS4Lax4LeKIOC2tOC3gOC2reC3kuC2sSDgtrrgt5ngtq/gt5Tgtrgg4Lax4LeQ4LeA4LeQ4Lat4LeK4LeA4LeS4La6IOC2uuC3lOC2reC3lOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2FjdGlvbiIgbXNnaWQ9IjQ5MzEyOTE3MjIzODU2NjI4MiI+Ijx4bGlmZjpnIGlkPSJPTERfQVBQIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5ngtq0g4LaG4La04LeD4LeUIOC2uuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDgyMDk0Mjc1NTgwMzU4MDQ5Ij4i4Lax4LeAIOC2uuC3meC2r+C3lOC2uCDgtobgtrvgtrjgt4rgtrcg4Lax4Lec4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ld19hcHBfYWN0aW9uIiBtc2dpZD0iNTQ3Mjc1NjkyNjk0NTQ0MDcwNiI+Ijx4bGlmZjpnIGlkPSJPTERfQVBQIj4lMSRzPC94bGlmZjpnPiDgtoXgtrvgtrngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+IuC3g+C3lOC2u+C3kOC2muC3k+C2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4La04La74LarIOC2uuC3meC2r+C3lOC2uCDgtrHgt4Dgtq3gt4rgt4DgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VuZFRleHQiIG1zZ2lkPSI1MjA5ODc0NTcxOTU5NDY5MTQyIj4i4La04LeZ4LeFIOC3g+C2s+C3hOC3jyDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Ag4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Jpbmd0b25lIiBtc2dpZD0iNjg4NTQyMTQwNjg0NTczNDY1MCI+IuC3hOC2rCDgtrHgtp/gtrHgtrrgt5og4LeB4La24LeK4Lav4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljIiBtc2dpZD0iNTQyMTY1MTE1NzEzODYyODE3MSI+IuC2uOC3j+C2sOC3iuKAjeC2uiDgt4Hgtrbgt4rgtq/gtrog4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfcGxheWluZ190aHJvdWdoX2JsdWV0b290aCIgbXNnaWQ9IjkxNjU5ODQzNzkzOTQ2MDE1MzMiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeE4La74LeE4LePIOC2sOC3j+C3gOC2seC2uiDgt4Dgt5ngtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWNfaGludF9zaWxlbnRfcmluZ3RvbmVfc2VsZWN0ZWQiIG1zZ2lkPSI4MzEwNzM5OTYwOTczMTU2MjcyIj4i4Lax4LeS4LeE4LasIOC2u+C3kuC2nOC3kuC2seC3iiDgtqfgt53gtrHgtrrgtprgt4og4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2NhbGwiIG1zZ2lkPSIzOTQxNjgwMDQxMjgyNzg4NzExIj4i4LaH4La44Lat4LeU4La4LeC2reC3lOC3hSDgt4Hgtrbgt4rgtq8g4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2JsdWV0b290aF9jYWxsIiBtc2dpZD0iMjAwMjg5MTkyNjM1MTE1MTUzNCI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgtofgtrjgtq3gt5Tgtrgt4Lat4LeU4LeFIOC3geC2tuC3iuC2ryDgtq3gt4rigI3gtrvgt5Pgt4Dgtq3gt4/gt4DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYWxhcm0iIG1zZ2lkPSIxOTg1MTkxNjE2MDQyNjg5MTAwIj4i4LeD4LeT4Lax4LeU4LeA4LeaIOC3geC2tuC3iuC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIyNDIyMjY1NjU2NzQ0Mjc2NzE1Ij4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeaIOC3geC2tuC3iuC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV91bmtub3duIiBtc2dpZD0iMTQwMDIxOTY2OTc3MDQ0NTkwMiI+IuC3geC2tuC3iuC2r+C2uiDgtq3gt4rigI3gtrvgt5Pgt4Dgtq3gt4/gt4DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ibHVldG9vdGgiIG1zZ2lkPSI2NTM4ODk0MTc3MjU1OTY0MzQwIj4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3geC2tuC3iuC2ryDgtq3gt4rigI3gtrvgt5Pgt4Dgtq3gt4/gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9yaW5nZXIiIG1zZ2lkPSIzMzI2MDAzODQ3MDA2MTYyNDk2Ij4i4La74LeS4Lax4LeK4Lan4Led4Lax4La64LeaIOC3geC2tuC3iuC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2luY2FsbCIgbXNnaWQ9Ijg4OTAwNzMyMTgxNTQ1NDMzOTciPiLgtofgtrjgtq3gt5Tgtrjgt4og4LeB4La24LeK4Lav4La6IOC2reC3iuKAjeC2u+C3k+C3gOC2reC3j+C3gOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX21lZGlhIiBtc2dpZD0iNDIxNzMxMTcxOTY2NTE5NDIxNSI+IuC2uOC3j+C2sOC3iuKAjeC2uiDgt4Hgtrbgt4rgtq/gtrog4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbm90aWZpY2F0aW9uIiBtc2dpZD0iNzA0NDk4NjU0NjQ3NzI4MjI3NCI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3miDgt4Hgtrbgt4rgtq8g4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdCIgbXNnaWQ9IjM3ODk3NTg5ODAzNTc2OTY5MzYiPiLgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt5Qg4La74LeS4Lax4LeK4Lan4Led4Lax4La6IOC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX2RlZmF1bHRfd2l0aF9hY3R1YWwiIG1zZ2lkPSI4MTI5NTYzNDgwODk1OTkwMzcyIj4i4LeD4LeU4La04LeU4La74LeU4Lav4LeUIOC2u+C3kuC2seC3iuC2p+C3neC2seC2uiAoPHhsaWZmOmcgaWQ9IkFDVFVBTF9SSU5HVE9ORSI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfc2lsZW50IiBtc2dpZD0iNzkzNzYzNDM5MjQwODk3NzA2MiI+IuC2muC3kuC3g+C3kuC3gOC2muC3iiDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9waWNrZXJfdGl0bGUiIG1zZ2lkPSIzNTE1MTQzOTM5MTc1MTE5MDk0Ij4i4La74LeS4Lac4LeS4Lax4LeK4Lan4Led4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfdW5rbm93biIgbXNnaWQ9IjU0Nzc5MTk5ODg3MDE3ODQ3ODgiPiLgtrHgt5zgtq/gtrHgt4rgtrHgt48g4La74LeS4Lax4LeK4Lan4Led4Lax4La6Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJ3aWZpX2F2YWlsYWJsZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY2NTQxMjM5ODc0MTgxNjg2OTMiPiJXaS1GaSDgtqLgt4/gtr3gtrrgtprgt4og4Lat4LeS4La24LeaIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MTkyNDI0NDg5MTY4Mzk3Mzg2Ij4iV2ktRmkg4Lai4LeP4La9IOC2h+C2rSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGVfZGV0YWlsZWQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4i4LeA4LeS4LeA4LeY4LatIFdpLUZpIOC2ouC3j+C2veC2uiDgtr3gtrbgt4/gtpzgtq0g4LeE4LeQ4LaaIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3OTE1ODk1MzIzNjQ0MjkyNzY4Ij4i4LeA4LeS4LeA4LeY4LatIFdpLUZpIOC2ouC3j+C2vSDgtq3gt5Lgtrbgt5oiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iNDAyOTQ4OTcxNjYwNTI1NTM4NiI+IldpLUZpIOC2ouC2veC2uuC2pyDgtrTgt5TgtrvgtrHgtrog4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV0d29ya19hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9Ijg0OTUxNTU1OTMzNTgwNTQ2NzYiPiLgtqLgt4/gtr3gtrrgtqcg4La04LeU4La74Lax4La6IOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luX2RldGFpbGVkICg4MDAwMDgxOTQxNDQ3OTc2MTE4KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkIiBtc2dpZD0iNzkwNDIxNDIzMTY1MTU0NjM0NyI+IldpLUZpIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeS4La6IOC2seC3nOC3hOC3kOC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZF9kZXRhaWxlZCIgbXNnaWQ9IjU1NDg3ODA3NzY0MTgzMzI2NzUiPiIg4Lav4LeU4La24La9IOC2heC2seC3iuC2reC2u+C3iuC2ouC3j+C2vSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Dgtrrgtprgt4og4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijk3NjExNzgyNjU5MzI0NTE3Ij4i4LaN4Lai4LeUIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4i4LaN4Lai4LeUIFdpLUZpIOC2huC2u+C2uOC3iuC2tyDgtprgtrvgtrHgt4rgtrEuIOC2uOC3meC2uiBXaS1GaSDgt4Pgt5rgt4Dgt4/gtq/gt4/gtrrgtpov4LeE4Lec4Lan4LeK4LeD4LeK4La04Lec4Lan4LeKIOC2keC2miDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeUIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mYWlsZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NjM2Njk2Nzc5MzU2MjMwODQiPiLgto3gtqLgt5QgV2ktRmkg4LaG4La74La44LeK4La3IOC2muC3hSDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMDY4MzIxODgxNjczNzM0ODg2Ij4iV2ktRmkg4LaN4Lai4LeUIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gCDgt4Pgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTYzODk0OTk1Mzk5Mzg5NDMzNSI+IuC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4PgtrPgt4Tgt48g4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiLgtrTgt5Lgt4Xgt5LgtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWNsaW5lIiBtc2dpZD0iMjExMjIyNTQ1MTcwNjEzNzg5NCI+IuC2tOC3iuKAjeC2u+C2reC3kuC2muC3iuC3guC3muC2tCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3NlbnRfdGl0bGUiIG1zZ2lkPSIxMzE4OTc1MTg1MTEyMDcwNzM0Ij4i4LaG4La74LeP4Law4Lax4LeP4LeAIOC2uuC3gOC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3RvX2Nvbm5lY3RfdGl0bGUiIG1zZ2lkPSI0OTU4ODAzOTQ4NjU4NTMzNjM3Ij4i4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64LanIOC2h+C2u+C2uuC3lOC2uOC2muC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2Zyb21fbWVzc2FnZSIgbXNnaWQ9IjU3MDM4OTE3NDczMTk1MTc2OSI+IuC3gOC3meC2reC3kuC2seC3ijoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90b19tZXNzYWdlIiBtc2dpZD0iMjQ4OTY4OTc0NTIyMDQ0MDk5Ij4i4LeA4LeZ4LatOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VudGVyX3Bpbl9tZXNzYWdlIiBtc2dpZD0iNTkyMDkyOTU1MDM2NzgyODk3MCI+IuC2heC3gOC3geC3iuKAjeC2uiBQSU4g4LaR4LaaIOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfc2hvd19waW5fbWVzc2FnZSIgbXNnaWQ9Ijg1MzA1NjMzMjM4ODA5MjEwOTQiPiJQSU46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgwMTI5ODEyNTc3NDIyMzI0NzUiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrogPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC2sSDgtoXgtq3gtrvgtq3gt5Tgtrsg4LaR4La6IFdpLUZpIOC3gOC2veC3kuC2seC3iiDgtq3gt4/gt4Dgtprgt4/gtr3gt5Lgtprgt4Ag4LeA4LeS4LeD4Lax4LeK4Law4LeSIOC2muC3meC2u+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczNjM5MDcyMTM3ODc0NjkxNTEiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrogPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDgtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kyDgtrTgt4Dgtq3gt5LgtrEg4LeA4LeS4LanIFdpLUZpIOC3gOC2veC3kuC2seC3iiDgtpHgtrog4Lat4LeP4LeA4Laa4LeP4La94LeS4Laa4LeAIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiLgtoXgtprgt5Tgtrsg4LaH4Lat4LeU4LeF4Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+IlNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La64LeA4La44LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyBTTVMg4La04Lar4LeS4LeA4LeS4LapIOC3gOC3kuC3geC3j+C2vSDgtpzgtqvgtrHgtprgt4og4La64LeA4La64LeSLiDgtrjgt5ngtrgg4La64LeZ4Lav4LeU4La44LanIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrrgt5Dgt4Dgt5Pgtrgg4Lax4Lec4Lax4LeQ4LeA4Lat4LeTIOC2muC2u+C2nOC3meC2sSDgtrrgt4/gtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3llcyIgbXNnaWQ9IjM2NjM3MjU5OTM4NTU4MTY4MDciPiLgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbm8iIG1zZ2lkPSI2MjU0Mzg1NjEzOTU1MzQ5ODIiPiLgtrTgt4rigI3gtrvgtq3gt5Lgtprgt4rgt4Lgt5rgtrQg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9tZXNzYWdlIiBtc2dpZD0iMTY0NTQzNjQ2NjI4NTMxMDg1NSI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJERVNUX0FERFJFU1MiPiUyJHM8L3hsaWZmOmc+Jmx0O2ImZ3Q7IOC3gOC3meC2rSDgtprgt5ngtqfgt5Ig4La04Lar4LeS4LeA4LeT4Lap4La64Laa4LeKIOC2uuC3kOC3gOC3k+C2uOC2pyAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0O2ImZ3Q7IOC2muC3kOC2uOC2reC3kuC2ui4iPC9zdHJpbmc+CisgICAgPCEtLSBzeW50YXggZXJyb3IgaW4gdHJhbnNsYXRpb24gZm9yIHNtc19zaG9ydF9jb2RlX2RldGFpbHMgKDM0OTIwMjU3MTk4NjgwNzg0NTcpIG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb246IGV4cGVjdGVkOiAvc3RyaW5nIHJlYWQ6IGZvbnQgKHBvc2l0aW9uOkVORF9UQUcgPC9mb250PkAxOjgzIGluICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSIzNDkyMDI1NzE5ODY4MDc4NDU3Ij4i4La44LeZ4La6ICI8L2ZvbnQ+IuC2lOC2tuC2nOC3miDgtqLgtoLgtpzgtrgg4Lac4LeS4Lar4LeU4La44LeaIjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IiDgtoXgtrog4LeA4LeT4La44LeKIOC3gOC2veC2pyDgt4Tgt5rgtq3gt5Tgt4Dgtprgt4og4LeA4LeaLiI8L3N0cmluZz4KKykgIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3ByZW1pdW1fc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iNTUyMzgyNjM0OTEwNTEyMzY4NyI+PGZvbnQgZmdjb2xvcj0iI2ZmZmZiMDYwIj4i4La44LeZ4La6IOC2lOC2tuC2nOC3miDgtqLgtoLgtpzgtrgg4Lac4LeS4Lar4LeU4La44LeZ4Lax4LeKIOC2heC2uuC3gOC3k+C2uOC2pyDgt4Tgt5rgtq3gt5Qg4LeA4LeaLiI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2FsbG93IiBtc2dpZD0iNDQ1ODg3ODYzNzExMTAyMzQxMyI+IuC2uuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiLgtoXgt4Dgtr3gtoLgtpzgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfY2hvaWNlIiBtc2dpZD0iNTI4OTUzODU5MjI3MjIxODEzNiI+IuC2uOC2nOC3miDgtq3gt5rgtrvgt5Pgtrgg4La44Lat4LaaIOC2reC2tuC3j+C2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4i4LaU4La24LanIOC2uOC3meC2uiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4Lat4LeU4LeFIOC3gOC3meC2seC3g+C3iuC2muC2uyDgtpzgt5DgtrHgt5Pgtrgg4La04LeD4LeU4LeAIOC2muC3hSDgt4Tgt5DgtprCoCZndDvCoOC2uuC3meC2r+C3lOC2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWx3YXlzX2FsbG93IiBtc2dpZD0iMzI0MTE4MTE1NDg2OTQ5MzM2OCI+IuC3g+C3kOC2uOC3gOC3kuC2p+C2uCDgtongtqkg4Lav4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9uZXZlcl9hbGxvdyIgbXNnaWQ9IjQ0Njk5Mjc2NTc3NDI2OTY3MyI+IuC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Pgtrsg4Lax4Lec4Lav4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfdGl0bGUiIG1zZ2lkPSI2MjI3NzEyMzE5MjIzMjI2MTg1Ij4iU0lNIOC2tOC2rSDgtongt4Dgtq3gt4og4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4i4LaU4La2IOC2h+C2reC3lOC3heC2reC3iiDgtprgtrvgtrEg4La94LavIOC3gOC2veC2guC2nOC3lCBTSU0g4La04LatIOC3g+C2uOC2nyDgtrHgt5Dgt4Dgtq0g4LaH4La74La54LeT4La4IOC2muC2u+C2sSDgtq3gt5Tgtrvgt5Qg4Lai4LaC4Lac4La4IOC2ouC3j+C2veC2uiDgtrHgt5zgtq3gt5Lgtrbgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2RvbmVfYnV0dG9uIiBtc2dpZD0iODI3OTQ5OTg5MzY5OTYzNzc1Ij4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX3RpdGxlIiBtc2dpZD0iMzcxOTY3MDUxMjg4OTY3NDY5MyI+IlNJTSDgtrTgtq3gtprgt4og4LaR4Laa4Lat4LeUIOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfbWVzc2FnZSIgbXNnaWQ9IjY1OTk5NDUzMDExNDEwNTAyMTYiPiLgtqLgtoLgtpzgtrgg4Lai4LeP4La94La64LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5Pgtrjgtqcg4LaU4La24Lac4LeaIOC2i+C2tOC3j+C2guC2nOC2uiDgtrHgt5Dgt4Dgtq0g4LaF4La74La54Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZXN0YXJ0X2J1dHRvbiIgbXNnaWQ9IjQ3MjI0MDc4NDI4MTUyMzIzNDciPiLgtrrgt4Xgt5Ig4LaF4La74La54Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODM0OTM2MjYyMzA2ODgxOTI5NSI+IuC3gOC3muC2veC3j+C3gCDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI1ODc5NDUwNjU5NDUzNzgyMjc4Ij4i4Lav4LeS4Lax4La6IOC3g+C3kOC2muC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9zZXQiIG1zZ2lkPSI1Nzc3MDc1NjE0MzIxMDg3NzU4Ij4i4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV90aW1lX2RvbmUiIG1zZ2lkPSIyNTA3NjgzNzUxNzU5MzA4ODI4Ij4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybXNfbmV3X3Blcm1fcHJlZml4IiBtc2dpZD0iODI1Nzc0MDcxMDc1NDMwMTQwNyI+PGZvbnQgc2l6ZT0iMTIiIGZnY29sb3I9IiNmZjMzYjVlNSI+IuC2heC2veC3lOC2reC3ijogIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1zX2Rlc2NyaXB0aW9uX2FwcCIgbXNnaWQ9IjUxMzk4MzYxNDMyOTMyOTk0MTciPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOC3gOC3kuC3g+C3kuC2seC3iiDgt4PgtrTgtrrgtrEg4La94Lav4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX3Blcm1pc3Npb25zIiBtc2dpZD0iNzI4MzM1NzcyODIxOTMzODExMiI+IuC2heC3gOC3g+C2uyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4La44LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybV9jb3N0c19tb25leSIgbXNnaWQ9IjQ5MDI0NzAzMjQxNDIxNTExMTYiPiLgtrjgt5ngtrjgtp/gt5LgtrHgt4og4LaU4La24LanIOC2uOC3lOC2r+C2veC3iiDgt4Dgt5Dgtrog4LeA4LeS4La6IOC3hOC3kOC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2FjdGl2aXR5X3RpdGxlIiBtc2dpZD0iNDQ2NTA1NTE1NzIwOTY0ODY0MSI+IlVTQiDgtrjgt4Tgt48g4LaG4Lag4La64Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1OTAxNDU5MDQxMzk4NzUxNDk1Ij4iVVNCIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2reC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+IuC2lOC2tiDgtpTgtrbgtpzgt5og4La04La74LeS4Lac4Lar4Laa4La64LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Mg4LaH4Lat4LeK4Lat4LeaIFVTQiDgt4Pgt4rgtrTgtrvgt4rgt4Hgtrog4LeE4La74LeE4LeP4La6LiDgtpTgtrbgtqcg4LaU4La24LeaIOC2tOC2u+C3kuC2nOC2q+C2muC2uiDgt4Tgt48g4LaU4La24Lac4LeaIEFuZHJvaWQgVVNCIOC2huC2oOC2uuC2seC2uiDgtoXgtq3gtrsg4Lac4Lec4Lax4LeUIOC2tOC3kuC2p+C2tOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeB4LeK4oCN4La6IOC2seC2uOC3iiDgtrTgt4Tgtq0g4La24Lec4Lat4LeK4Lat4La4IOC2lOC2tuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA1MzUxMDAwNDQ2MDM3ODExIj4i4LaU4La2IOC2lOC2tuC2nOC3miDgtrTgtrvgt5LgtpzgtqvgtprgtrrgtqcgVVNCIOC3hOC2u+C3hOC3jyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeTIOC2h+C2rS4g4LaU4La24LanIOC2lOC2tuC3miDgtrTgtrvgt5Lgtpzgtqvgtprgtrog4LeE4LePIOC2lOC2tuC2nOC3miBBbmRyb2lkIFNEIOC2tOC2rSDgtoXgtq3gtrsg4Lac4Lec4Lax4LeUIOC2tOC3kuC2p+C2tOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeB4LeK4oCN4La6IOC2seC2uOC3iiDgtrTgt4Tgtq0g4La24Lec4Lat4LeK4Lat4La4IOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYnV0dG9uX21vdW50IiBtc2dpZD0iMTA1MjI1OTkzMDM2OTUwODIzNSI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzAxNzA0NTIxNzM2NTU0MDY1OCI+IlVTQiDgtrjgt4Tgt48g4LaG4Lag4La64Lax4La6IOC3g+C2s+C3hOC3jyDgtpTgtrbgtpzgt5ogVVNCIOC2huC2oOC2uuC2seC2uiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5rgtq/gt5Mg4Lac4LeQ4Lan4LeF4LeU4LeA4Laa4LeKIOC2reC3kuC2tuC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg3NjAxODUxMjcxNjk3MDMxMyI+IlVTQiDgtrjgt4Tgt48g4LaG4Lag4La64Lax4La6IOC3g+C2s+C3hOC3jyDgtpTgtrbgtpzgt5ogU0Qg4La04LatIOC2t+C3j+C3gOC3kuC2reC2uuC3muC2r+C3kyDgtpzgt5Dgtqfgt4Xgt5Tgt4Dgtprgt4og4Lat4LeS4La24LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0Ig4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5Mzk4MjI3ODM4MjgxODM3NjMiPiLgtpTgtrbgtpzgt5og4La04La74LeS4Lac4Lar4Laa4La6IOC3gOC3meC2reC2py/gt4Dgt5ngtq3gt5LgtrHgt4og4Lac4Lec4Lax4LeUIOC2tOC3kuC2p+C2tOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzMzYwNTgzOTY2NjM1MTYwMTciPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTY1Njg1MjA5ODU1NTYyMzgyMiI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2t+C3j+C3gOC3kuC2reC2uuC3miDgtrTgt4Dgtq3gt5MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrTgt5ngtrssIOC2lOC2tuC2nOC3miDgtrTgtrvgt5Lgtpzgtqvgtprgtrrgt5ngtrHgt4ogQW5kcm9pZCBVU0Ig4LaG4Lag4La64Lax4La6IOC2nOC2veC3gOC3jyDgtq/gtrjgtrHgt4rgtrEgKFwi4La04LeS4LanIOC2muC2u+C2seC3iuC2sVwiKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQzOTY5NzgyNDYwNjEzMTE0Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4LeS4La74LeT4La44LanIOC2tOC3meC2uywg4LaU4La24Lac4LeaIEFuZHJvaWQgU0Qg4La04LatIOC2tOC2u+C3kuC2nOC2q+C2muC2uuC3meC2seC3iiDgtpzgtr3gt4DgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9idXR0b25fbW91bnQiIG1zZ2lkPSI3MDYwMjE4MDM0OTAwNjk2MDI5Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMTk3MDM3NDg5ODI2MzA2MzgzNiI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC3muC2r+C3kyDgtpzgt5Dgtqfgt4Xgt5Tgt4Dgtprgt4og4LaH4Lat4LeS4LeA4LeS4La6LiBVU0Ig4LeD4LaC4Lac4LeK4oCN4La74LeP4LeE4Laa4La6IOC2nOC2veC3gOC3jyDgtofgtq3gt5Ig4Lav4LeQ4La64LeSIOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgtrvgtrHgt4rgtrEsIOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq3gtq3gt4og4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiJVU0Ig4LaG4Lag4La64Lax4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGV4dCIgbXNnaWQ9IjUxMDA0Mjg3NTcxMDc0Njk0NTQiPiLgtpTgtrYgVVNCIOC2huC2oOC2uuC2seC2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Lax4La44LeKLCDgtpTgtrYg4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2sSDgt4Pgtrjgt4Tgtrsg4La64LeZ4Lav4LeU4La44LeKIOC2seC3kOC3gOC2reC3k+C2uCDgt4Pgt4Qg4LaU4La2IFVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2sSDgtq3gt5Tgtrvgt5Qg4Lax4Lec4Lat4LeS4La24Lea4LeA4LeTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19lcnJvcl90aXRsZSIgbXNnaWQ9IjczMjM2NTg0Njk2MjY1MTQyMDciPiJVU0Ig4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeS4La6IOC2heC3g+C3j+C2u+C3iuC2ruC2muC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19vayIgbXNnaWQ9IjczNzY5NTMxNjcwMzk4NjU3MDEiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiLgtrjgt4/gtrDgt4rigI3gtrog4LaL4La04LeP4LaC4Lac4La64Laa4LeKIOC2veC3meC3gyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE5NjA4MTcxOTIyMTYwNjQ4MzMiPiLgtprgt5Dgtrjgtrvgt4/gt4Dgtprgt4og4La94LeZ4LeDIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgtrsg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2NkX2luc3RhbGxlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2Nzc0NzEyODI3ODkyMDkwNzU0Ij4i4LeD4LeK4Lau4LeP4La04LeS4Lat4La64Laa4LeKIOC2veC3meC3gyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijc4NDgyMzY5NzQwODc2NTM2NjYiPiJVU0Ig4La44LeZ4LeA4La94La44Laa4LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2reC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjIyOTA4NTkzOTk5ODM3MjAyNzEiPiLgtoXgtrHgt5ngtprgt4ogVVNCIOC3gOC3kuC2muC2veC3iuC2tOC2uiDgt4PgtrPgt4Tgt48g4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iOTAyMDA5MjE5NjA2MTAwNzI2MiI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LeG4Led4La44LeQ4Lan4LeKIOC2muC2u+C2seC3iuC2seC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjQ4NDE1OTIxNTI2NTI2MDY5Ij4iU0Qg4La04LatIOC3huC3neC2uOC3kOC2p+C3iiDgtprgtrvgtrHgt4rgtrHgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkzNDAxNjg1MzQyNTc2MTA3OCI+IuC2lOC2tuC2nOC3miBVU0Ig4LaG4Lag4La64Lax4La64LeaIOC2h+C2reC3kiDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4Lac4Lec4Lax4LeUIOC2uOC3kOC2muC3kyDgtrrgtrHgt5Qg4LaH4LatLiDgtrjgt5ngtrgg4Laa4LeK4oCN4La74LeS4La64LeP4LeAIOC2huC2tOC3g+C3lCDgt4Tgt5Dgtrvgt4Dgt5Lgtrog4Lax4Lec4LeE4LeQ4LaaISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQxMzE4OTUwMjc1NDM4MzAiPiLgtpTgtrbgtpzgt5og4La04Lat4LeaIOC3g+C3kuC2uuC2veC3lCDgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeSIOC3gOC2seC3lCDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X2J1dHRvbl9mb3JtYXQiIG1zZ2lkPSI0MTMxMDY0NTYwMTI3NDc4Njk1Ij4i4LeG4Led4La44LeQ4Lan4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NzI5MDQ0Nzc4OTQ5MTg5OTE4Ij4iVVNCIOC2seC3kuC2r+C3nOC3g+C3iuC2muC2u+C2q+C2uiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTAxNjY1NDYyNzYyNjQ3NjE0MiI+IlVTQiDgtrHgt5Lgtq/gt5zgt4Pgt4rgtprgtrvgtqvgtrog4LaF4La24La9IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9pbnB1dF9tZXRob2QiIG1zZ2lkPSI0NjUzMzg3MzM2NzkxMjIyOTc4Ij4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uOC2uuC2muC3iiDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjkwOTE2NTIxNTc3MjI0OTUxMTYiPiLgtobgtq/gt4/gtrEg4Laa4LeK4oCN4La74La4IOC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiLgtrfgt57gtq3gt5Lgtpog4La64Lat4LeU4La74LeUIOC2tOC3lOC3gOC2u+C3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhhcmR3YXJlIiBtc2dpZD0iNzUxNzgyMTA4Njg4ODk5MDI3OCI+IuC2r+C3mOC2qOC3j+C2guC2nCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9rZXlib2FyZF9sYXlvdXRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMTQwNzM2NzAxNzI2MzAzMDc3MyI+IuC2uuC2reC3lOC2u+C3lCDgtrTgt5Tgt4Dgtrvgt5Tgt4Dgtqcg4La04LeS4La74LeS4LeD4LeQ4La94LeQ4LeD4LeK4La4IOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9rZXlib2FyZF9sYXlvdXRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDY1OTA3NzAwNDQ5MjU3MDYzIj4i4La64Lat4LeU4La74LeUIOC2tOC3lOC3gOC2u+C3lOC3gOC2pyDgtrTgt5Lgtrvgt5Lgt4Pgt5Dgtr3gt5Dgt4Pgt4rgtrjgtprgt4og4Lat4Lea4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfYWxwaGFiZXQiIG1zZ2lkPSI1NDMzMjc1NDg1NDk5MDM5MTk5Ij4iIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfbnVtZXJpY19hbHBoYWJldCIgbXNnaWQ9IjQwMzAxNzA1MjQ1OTUxMjM2MTAiPiIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuZGlkYXRlc19zdHlsZSIgbXNnaWQ9IjQzMzM5MTMwODk2MzcwNjIyNTciPjx1PiLgtoXgtrTgt5rgtprgt4rgt4LgtprgtrrgtrHgt4oiPC91Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ5ODE2MDA1MzUxNDY4NTYwIj4iVVNCIOC2huC2oOC2uuC2seC2uiDgt4Pgtprgt4Pgtrjgt5LgtrHgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ1NzYwMzQxODk3MDk5NDA1MCI+IlNEIOC2tOC2rSDgt4Pgt5Tgtq/gt4/gtrHgtrjgt4og4Laa4La74La44LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iODI4NzMxOTg4MjkyNjczNzA1MyI+IuC3gOC3kOC2u+C2r+C3kiDgt4PgtrPgt4Tgt48g4La04La74LeT4Laa4LeK4LeC4LePIOC2muC2u+C2uOC3kuC2seC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzc4ODA0MDc0NTY4NjIyOTMwNyI+IuC3hOC3kuC3g+C3iiBVU0Ig4LaG4Lag4La64Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzgwNDc3ODM4MjQxMjEyOTk3Ij4i4LeE4LeS4LeD4LeKIFNEIOC2tOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc4NDAxMjEwNjc0MjcyNjk1MDAiPiJTRCDgtrTgtq0g4LeE4LeS4LeD4LeKIOC3hOC3nSDgt4Pgt4Tgt4/gtrog4Lax4Lec4Lav4Laa4LeK4LeA4LaxIOC2nOC3nOC2seC3lCDgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgtprgt4og4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODY0MTA2NTY0MTc4NjkyMzYwNCI+IlNEIOC2tOC2rSDgt4Tgt5Lgt4Pgt4og4LeE4LedIOC3g+C3hOC2uiDgtrHgt5zgtq/gtprgt4rgt4DgtrEg4Lac4Lec4Lax4LeUIOC2tOC2r+C3iuC2sOC2reC3kuC2uuC2muC3iiDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjIwOTAwNDY3Njk1MzI3MTM1NjMiPiLgt4Tgt4/gtrHgt5Ig4LeA4LeWIFVTQiDgtobgtqDgtrrgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQxMDcyMzkwNjAxOTEwMDE4OSI+IuC3hOC3j+C2seC3kiDgt4Dgt5YgU0Qg4La04LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE3OTU5MTc1NzgzOTUzMzMyODAiPiJVU0Ig4LaG4Lag4La64Lax4La64LanIOC3hOC3j+C2seC3kiDgt4Dgt5Mg4LaH4LatLiDgtpHgtrog4Lax4LeQ4LeA4LatIOC3huC3neC2uOC3kOC2p+C3iiDgtpzgt5DgtrHgt4rgt4Dgt5Pgtrjgtqcg4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNzUzODk4NTY3NTI1NTY4MjUzIj4iU0Qg4La04Lat4LanIOC3hOC3j+C2seC3kiDgt4Dgt5Mg4LaH4LatLiDgtpHgtrog4Lax4LeQ4LeA4LatIOC3huC3neC2uOC3kOC2p+C3iiDgtpzgt5DgtrHgt4rgt4Dgt5Pgtrjgtqcg4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTY2MTY4MzAzMTMzMDk1MTA3MyI+IuC2tuC2veC3j+C2tOC3nOC2u+C3nOC2reC3iuC2reC3lCDgtrHgt5zgt4Dgt5Yg4La94LeZ4LeDIFVTQiDgtobgtqDgtrrgtrHgtrog4LaJ4LeA4Lat4LeKIOC2muC3meC2u+C3kuC2q+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NzIxNTI4ODI2MDQ0MDc4MzciPiJTRCDgtrTgtq0g4La24La94LeP4La04Lec4La74Lec4Lat4LeK4Lat4LeUIOC2u+C3hOC3kuC2reC3gCDgtongt4Dgtq3gt4og4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiLgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeS4LeA4LeT4La4IOC3gOC3kOC3heC2muC3iuC3gOC3k+C2uOC2pyBVU0Ig4LaG4Lag4La64Lax4La6IOC2ieC3gOC2reC3iuC2muC3kuC2u+C3k+C2uOC2pyDgtrTgt5ngtrsg4Lac4La94LeA4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+IuC2r+C2reC3iuC2rSDgtrHgt5Dgtq3gt5Lgt4Dgt5Pgtrgg4LeA4LeQ4LeF4Laa4LeK4LeA4LeT4La44LanIOC2nOC3kOC2veC3gOC3k+C2uOC2pyDgtprgtr3gt5LgtrHgt4ogU0Qg4La04LatIOC2ieC3gOC2reC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzk2Nzk3Mzg5MzI3MDM2MDIzMCI+IuC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5PgtrjgtqcgVVNCIOC2huC2oOC2uuC2seC2uiDgtobgtrvgtprgt4rgt4Lgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY3Mjk4MDExMzA3OTA2MTYyMDAiPiJTRCDgtrTgtq0g4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt5Tgtrvgtprgt4rgt4Lgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNDIxOTUzNjE2MDY0OTM1MzAiPiLgtpTgtrbgtqcgVVNCIOC2huC2oOC2uuC2seC2uiDgtobgtrvgtprgt4rgt4Lgt5Lgtq3gt4Ag4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrTgt5Tgt4Xgt5Tgt4DgtrHgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2ODg0MTI3ODEzODM3NzYwNCI+IuC2lOC2tuC2pyDgtobgtrvgtprgt4rgt4Lgt5Lgtq3gt4AgU0Qg4La04LatIOC2ieC3gOC2reC3iiDgtprgt4Ug4LeE4LeQ4LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ0ODYzNzcyMzAxNDAyMjc2NTEiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2ieC3gOC2reC3iiDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkwMjUxODAzMDQwNDM4MTMxOCI+IlNEIOC2tOC2rSDgtongt4Dgtq3gt4og4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjY5MjExMjYxNjI1ODA1NzQxNDMiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2ieC3gOC2reC3iuC2muC3nOC2pyDgtofgtq0uIOC2heC2veC3lOC2reC3iiDgtrjgt4/gtrDgt4rigI3gtrrgtrrgtprgt4og4LaH4Lat4LeU4LeF4Lat4LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiJTRCDgtrTgtq0g4LaJ4LeA4Lat4LeKIOC2muC2u+C2sSDgtr3gtq/gt5IuIOC2heC2veC3lOC2reC3iiDgtpHgtprgtprgt4og4LaH4Lat4LeU4LeF4Lat4LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9saXN0X2VtcHR5IiBtc2dpZD0iMTY3NTM4ODMzMDc4Njg0MTA2NiI+IuC2nOC3kOC2veC2tOC3meC2sSDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4og4LeE4La44LeUIOC2seC3nOC3gOC3lOC2q+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSI4Nzg3MzUyMDc0MzI2NzQ4ODkyIj4i4LeD4LaC4La74Lag4Laa4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt5Lgtrvgt5Pgtrjgt5og4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC2uuC3j+C3gOC2reC3iuC2muC3j+C2veC3k+C2sSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wa2dVc2FnZVN0YXRzIiBtc2dpZD0iMTEwNjYxMjQyNDI1NDI3NzYzMCI+IuC2keC2muC2reC3lCDgtprgtrvgtrEg4La94LavIOC3g+C2guC2u+C2oOC2muC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM0MTAzNjMxMTIxMTQwNjY5MiI+IuC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzkwNjk3MTI0Mjg4MzE3ODMxIj4i4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC2tOC3kuC2p+C2tOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeU4La04LeU4La74LeU4Lav4LeUIOC2heC2seC3iuC2reC2u+C3iuC2nOC2rSDgt4Pgt5rgt4Dgt4/gt4Ag4LaJ4La94LeK4LeA4LePIOC3g+C3kuC2p+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JvdXRlX21lZGlhX291dHB1dCIgbXNnaWQ9IjE2NDIwMjQ0NTU3NTA0MTQ2OTQiPiLgtrjgt4/gtrDgt4rigI3gtrog4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La64LeaIOC2uOC3j+C2u+C3iuC2nOC2nOC2rSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSI0OTMyODE4NzQ5NTQ3MjQ0MzQ2Ij4i4LeA4LeZ4Lax4Lat4LeKIOC2tuC3j+C3hOC3kuC2uyDgtovgtrTgt4/gtoLgtpwg4LeA4LeZ4LatIOC2uOC3j+C2sOC3iuKAjeC2uiDgtrTgt4rigI3gtrvgtq3gt5Lgtq/gt4/gtrHgtrog4La64LeQ4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNzU2NTU1MjIzNzk3NzgxNTA0NyI+IuC2uuC2reC3lOC2u+C3lCDgtrTgt4/gtr3gtpog4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC2huC2oOC2uuC2seC2uiDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNTg2NjI0NTQ4NDMwMzI4NTc2MiI+IuC2uuC2reC3lOC2u+C3lCDgtobgtrvgtprgt4rgt4Lgtpog4LaG4Lag4La64Lax4La64LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIxNzIxOTUxODQyMDc4MjgzODciPiLgtrTgt5ngtrHgt4rgt4Dgt5Pgtrjgt5og4LeE4LePIOC3g+C3kOC2n+C3gOC3k+C2uOC3miDgtrrgtq3gt5Tgtrvgt5Qg4LaG4La74Laa4LeK4LeC4Laa4La6IOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sX2tleWd1YXJkIiBtc2dpZD0iMzA0MzczMjI5MDUxODYyOTA2MSI+IuC2uuC2reC3lOC2u+C3lCDgtobgtrvgtprgt4rgt4Lgtprgtrog4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2muC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR1dG9yaWFsX2RvdWJsZV90YXBfdG9fem9vbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDA3MDQzMzIwODE2MDA2MzUzOCI+IuC3gOC3kuC3geC3j+C2veC2sSDgtrTgt4/gtr3gtrHgtrog4LeD4Laz4LeE4LePIOC2r+C3meC3gOC2u+C2muC3iiDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2FkZ2V0X2hvc3RfZXJyb3JfaW5mbGF0aW5nIiBtc2dpZD0iNDg4MjAwNDMxNDkwNjQ2NjE2MiI+IuC3gOC3kuC2ouC2p+C2uiDgtpHgtprgtq3gt5Qg4Laa4LeS4La74LeT4La44LanIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9nbyIgbXNnaWQ9IjgzMjA4NDU2NTE3MzczNjkwMjciPiLgtrrgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlYXJjaCIgbXNnaWQ9IjY1ODExMDI3MTgyMjgwNzgxMSI+IuC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fc2VuZCIgbXNnaWQ9IjIzMTYxNjY1NTYzNDkzMTQ0MjQiPiLgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX25leHQiIG1zZ2lkPSIzMTM4ODQzOTA0MDA5ODEzODM0Ij4i4La44LeT4La94LafIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kb25lIiBtc2dpZD0iODk3MTUxNjExNzkxMDkzNDYwNSI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fcHJldmlvdXMiIG1zZ2lkPSIxNDQzNTUwMDM5MjUwMTA1OTQ4Ij4i4La04LeZ4La7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kZWZhdWx0IiBtc2dpZD0iMjg0MDkyMTg4NTU1ODA0NTcyMSI+IuC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC2u+C3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpYWxfbnVtYmVyX3VzaW5nIiBtc2dpZD0iNTc4OTE3NjQyNTE2NzU3MzU4NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4pcbuC2heC2guC2muC2uiDgtoXgtrjgtq3gtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfY29udGFjdF91c2luZyIgbXNnaWQ9IjQ5NDc0MDUyMjY3ODgxMDQ1MzgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz4g4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKXG7gt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Dgtrrgtprgt4og4Lax4LeS4La74LeK4La44LeP4Lar4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9oZWFkZXIiIG1zZ2lkPSIyMTA2MTAzODE3OTM3ODU5NjYyIj4i4La04LeE4LatIOC2r+C3kOC2muC3iuC3gOC3meC2sSDgtpHgtprgtprgt4og4LeE4LedIOC2iuC2pyDgt4Dgt5Dgtqngt5Ig4La64LeZ4Lav4LeU4La44LeKIOC2nOC2q+C2seC2muC3iiDgtpTgtrbgtpzgt5og4Lac4LeS4Lar4LeU4La44LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5PgtrjgtqcsIOC2r+C3kOC2seC3iiDgt4Pgt4Qg4LaJ4Lav4LeS4La74LeS4La64Lea4Lav4LeTIOC2heC3gOC3g+C2uyDgtongtr3gt4rgtr3gtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2Zvb3RlciIgbXNnaWQ9IjMxMjUyMTEzNDMzNzkzNzY1NjEiPiLgtrjgt5ngtrgg4LaJ4La94LeK4La94LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5Pgtrjgtqcg4LaU4La24LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudF9wZXJtaXNzaW9uc19oZWFkZXJfdGV4dCIgbXNnaWQ9IjY4NzQ0OTc0MDgyMDE4MjY3MDgiPiLgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgtrog4LaJ4La94LeK4La94LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3ciIG1zZ2lkPSI3MjI1OTQ4ODExMjk2Mzg2NTUxIj4i4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4i4La04LeK4oCN4La74Lat4LeS4Laa4LeK4LeC4Lea4La0IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1pc3Npb25fcmVxdWVzdF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NDg2NzU5Nzk1OTI2MjM3OTA3Ij4i4LaF4LeA4LeD4La7IOC2ieC2veC3iuC2veC3jyDgt4Pgt5Lgtqfgt5MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIG1zZ2lkPSI4NTMwMzkzMTM5NjM5NTYwMTg5Ij4iPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiVzPC94bGlmZjpnPiDgtpzgt5Lgtqvgt5Tgtrgg4LeD4Laz4LeE4LePXG7gtoXgt4Dgt4Pgtrsg4LaJ4La94LeK4La94LaxIOC2veC2r+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnB1dF9tZXRob2RfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyODM1NTcxNzk5NDQ5OTI2NDkiPiLgtobgtq/gt4/gtrEg4Laa4LeK4oCN4La74La44La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMzY4Nzk2OTEzODM3NTA5MjQyMyI+IuC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjQxNDgxMjA3NDIwOTY0NzQ2NDEiPiLgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YWxscGFwZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyNDAwODc4NDQzMDQ2ODc2NjIiPiLgtrbgt5Lgtq3gt5TgtrTgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLgtrbgt5Lgtq3gt5TgtrTgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiDgtoXgt4PgtrHgt4rgtrHgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtprgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4La44Laf4LeS4Lax4LeKIFZQTiDgt4Pgtprgt4rigI3gtrvgt5Pgtrog4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IuC2ouC3j+C2veC2uiDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrog4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHRfbG9uZyIgbXNnaWQ9IjY0MDczNTEwMDYyNDkxNzQ0NzMiPiI8eGxpZmY6ZyBpZD0iU0VTU0lPTiI+JXM8L3hsaWZmOmc+IOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeU4Lar4LeSLiDgtqLgt4/gtr3gtrog4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0aW5nIiBtc2dpZD0iNjQ0MzQzODk2NDQ0MDk2MDc0NSI+IuC3g+C3kOC2uOC3gOC3kuC2p+C2uCBWUE4g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3meC2uOC3kuC2seC3iuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0ZWQiIG1zZ2lkPSI4MjAyNjc5Njc0ODE5MjEzOTMxIj4i4Lax4LeS4La74Lat4LeU4La74LeU4LeA4La4IFZQTiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9lcnJvciIgbXNnaWQ9IjYwMDkyNDk4MTQwMzQ3MDgxNzUiPiLgt4Pgt5Dgtrjgt4Dgt5Lgtqcg4LeD4Laa4LeK4oCN4La74LeS4La6IFZQTiDgtq/gt53gt4LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29uZmlnIiBtc2dpZD0iNjQxNTg5OTE1MDY3MTUzNzk3MCI+IuC3gOC3kuC2seC3iuKAjeC2uuC3j+C3gyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVwbG9hZF9maWxlIiBtc2dpZD0iMjg5Nzk1NzE3MjM2NjczMDQxNiI+IuC2nOC3nOC2seC3lOC3gCDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19maWxlX2Nob3NlbiIgbXNnaWQ9IjYzNjM2NDg1NjIxNzA3NTk0NjUiPiLgtpzgt5zgtrHgt5Tgt4Dgtprgt4og4Lat4Led4La74LeP4Lac4LeZ4LaxIOC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc2V0IiBtc2dpZD0iMjQ0ODE2ODA4MDk2NDIwOTkwOCI+IuC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdWJtaXQiIG1zZ2lkPSIxNjAyMzM1NTcyMDg5OTExOTQxIj4i4La64Lec4La44LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE2NDc2ODIxMjAwMzg2NDMxNiI+IuC2uOC3neC2p+C2u+C3iiDgtrvgtq4g4LaG4Laa4LeP4La74La6IOC3g+C2tuC2vSDgtprgtrsg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FyX21vZGVfZGlzYWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgwMzUyMzA1Mzc1NjM1MDMyNjIiPiLgtrjgt53gtqfgtrvgt4og4La74LauIOC2huC2muC3j+C2u+C2uuC3meC2seC3iiDgtrTgt5Lgtqfgt4Dgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzMTQ2Njk0MjM0Mzk4MjAyNjAxIj4i4Lan4LeZ4Lav4La74LeS4Lax4LeKIOC3hOC3nSDgt4Tgt5zgtqfgt4rgt4Pgt4rgtrTgt5zgtqfgt4og4LeD4Laa4LeK4oCN4La74LeT4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI2ODU3MDMxNzYwMTAzMDYyOTgyIj4i4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2tfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjMwMDQ3MDAwNDUwMzM0MzQzOSI+IuC2huC2tOC3g+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5leHRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTA4MDU1NTEwNDY3Nzk5MjQwOCI+IuC2uOC3k+C2veC2nyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNraXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTI3NTM2MjI5OTQ3MTYzMTgxOSI+IuC2uOC2nyDgt4Tgtrvgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ4OTA4OTQyNjc0NTQ4NjcyNzYiPiLgtongt4Tgt4Ug4Lai4LaC4Lac4La4IOC2r+C2reC3iuC2rSDgtrfgt4/gt4Dgt5Lgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMzM0MDgyMjIyODU5OTMzNzc0MyI+IuC2ouC2guC2nOC2uCDgtq/gtq3gt4rgtq0g4La34LeP4LeA4LeS4Lat4La6IOC2nOC3kOC2sSDgtq3gt4Ag4Lav4LeQ4Lax4Lac4LeQ4Lax4LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjYyNjk1NDE4OTc3Mjk3ODEzMzIiPiLgtqLgtoLgtpzgtrgg4Lav4Lat4LeK4LatIOC3g+C3k+C2uOC3j+C3gCDgtongtprgt4rgtrjgt4Dgt48g4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNTQ0MzQ1NzMyMTM1NDkwNzE4MSI+IuC2ouC2guC2nOC2uCDgtq/gtq3gt4rgtq0g4La34LeP4LeA4LeS4Lat4La6IOC2nOC3kOC2sSDgtq3gt4Ag4Lav4LeQ4Lax4Lac4LeQ4Lax4LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fbWF0Y2hlcyIgbXNnaWQ9IjgxMjk0MjE5MDg5MTU4NDA3MzciPiLgtpzgt5Dgtr3gtrTgt5Pgtrjgt4og4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZF9vbl9wYWdlIiBtc2dpZD0iMTk0Njc5OTIzMzgyMjgyMDM4NCI+IuC2tOC3kuC2p+C3lOC3gOC3meC3hOC3kiDgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im1hdGNoZXNfZm91bmQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTY3MTQ3MDgxMTM2NTc5NDM5Ij4i4Lac4LeQ4LeF4La04LeT4La44LeKIDEg4La64LeSIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NjQxODcyNzk3MDY3NjA5MTc3Ij4iPHhsaWZmOmcgaWQ9IlRPVEFMIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIDx4bGlmZjpnIGlkPSJJTkRFWCI+JWQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21vZGVfZG9uZSIgbXNnaWQ9IjcyMTc1ODE2NDA0NjE5MjIyODkiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MjM4MTA0NDg1MDc2MTI3NDYiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2nOC3kOC2veC3gOC3k+C2uC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzI3ODk0OTk4NDA5NTM3MTkwIj4iU0Qg4La04LatIOC2nOC2veC3gOC2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDUyMTU3MzMyMTUyNDM0MDA1OCI+IlVTQiDgtobgtqDgtrrgtrHgtrog4La44Laa4La44LeS4Lax4LeKLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1OTY5ODg4NzU1MDcwNDMwNDIiPiJTRCDgtrTgtq0g4La44Laa4La44LeS4Lax4LeKLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2uOC3kOC2muC3kuC2uiDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IlNEIOC2tOC2rSDgtrjgt5Dgtprgt5Pgtrjgtqcg4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9iYWRfcmVtb3ZhbCIgbXNnaWQ9Ijc5NjA4NjQwNjEwMTY2MDMyODEiPiLgtpzgt5Dgtr3gt4Dgt5Pgtrjgtqcg4La04LeZ4La7IFNEIOC2tOC2rSDgtongt4Dgtq3gt4rgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQxODE4ODcyMDAwOTU2OTY5MyI+IlVTQiDgtobgtqDgtrrgtrHgtrog4La44LeaIOC3gOC2seC3gOC3kuC2pyDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4La74La44LeS4Lax4LeKIOC2tOC3gOC2reC3ky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMzQ3NjI1MDM5MDQ4Mjc0ODEiPiJTRCDgtrTgtq0g4Lav4LeQ4Lax4LeKIOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgtrvgtrjgt5LgtrHgt4og4La04LeA4Lat4LeTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JlbW92ZWQiIG1zZ2lkPSI3MDAxNTI2OTA1MDU3OTUyMDk3Ij4iU0Qg4La04LatIOC2ieC3gOC2reC3iiDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI1ODMwODE0MzQ5MjUwODM0MjI1Ij4i4La04La74LeS4Lac4Lar4Laa4La64Laa4LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtq/gt5DgtrHgt4ogVVNCIOC2huC2oOC2uuC2seC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MDYxMzA1NjgxMzM1NDA0MzUiPiJTRCDgtrTgtq0g4Lav4LeQ4Lax4LanIOC2tOC2u+C3kuC2nOC2q+C2muC2uuC2muC3kuC2seC3iiDgtrTgt4/gt4Dgt5LgtqDgt4rgtqDgt5Ig4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Vua25vd25fc3RhdGUiIG1zZ2lkPSI3MjkxOTI3ODIxOTcyOTAzODUiPiLgtrbgt4/gt4Tgt5Lgtrsg4La44LeP4Law4LeK4oCN4La64La6IOC2seC3nOC2r+C2seC3iuC2seC3jyDgtoXgt4Dgt4Pgt4rgtq7gt4/gt4Dgt5og4La04LeA4Lat4LeS4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlIiBtc2dpZD0iMTc3ODY4NjYxODIzMDAxMTk2NCI+IuC2tuC3meC2r+C3j+C2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmQiIG1zZ2lkPSI0ODA4MjcwOTAwMzIyOTg1OTYwIj4i4LeD4Lec4La64Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2Vic2VhcmNoIiBtc2dpZD0iNDMzNzE1Nzk3NzQwMDIxMTU4OSI+IuC3gOC3meC2tuC3iiDgt4Pgt5ngt4Dgt5TgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX25leHQiIG1zZ2lkPSI1NzQyMTI0NjE4OTQyMTkzOTc4Ij4i4La44LeT4LeF4LafIOC3g+C3nOC2uuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmRfcHJldmlvdXMiIG1zZ2lkPSIyMTk2NzIzNjY5Mzg4MzYwNTA2Ij4i4La04LeZ4La7IOC2keC2miDgt4Pgt5zgtrrgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZlRpY2tlciIgbXNnaWQ9IjU2MjI2ODM5MTI2MTY0OTYxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JXM8L3hsaWZmOmc+IOC2nOC3meC2seC3iiDgt4Pgt4rgtq7gt4/gtrHgtrog4LaJ4La94LeK4La94LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZUaXRsZSIgbXNnaWQ9IjU0NDY4NTg3MTcxNTc0MTY4MzkiPiLgt4Pgt4rgtq7gt4/gtrEg4LaJ4La94LeK4La94LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZNZXNzYWdlIiBtc2dpZD0iMTM3NDcxODAyMzIyNDAwMDcwMiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiAoPHhsaWZmOmcgaWQ9IlNFUlZJQ0UiPiUyJHM8L3hsaWZmOmc+KSDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LaJ4La94LeK4La94LaxIOC2veC2ryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc1ZlcmlmWWVzIiBtc2dpZD0iMjM0NjU2NjA3Mjg2NzIxMzU2MyI+IuC2lOC3gOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc1ZlcmlmTm8iIG1zZ2lkPSIxMTQ2NTY0OTM3MzQ2NDU0ODY1Ij4i4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY190b29fbWFueV9kZWxldGVzIiBtc2dpZD0iNTI5NjMyMTg1MDY2Mjc0Njg5MCI+IuC2uOC3kOC2muC3k+C2uOC3miDgt4Pgt5Pgtrjgt4/gt4Ag4LaJ4Laa4LeK4La44LeA4LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlc19kZXNjIiBtc2dpZD0iNDk2NTUxNjcxMDA4Njk0MjQ1Ij4iPHhsaWZmOmcgaWQ9IlRZUEVfT0ZfU1lOQyI+JTIkczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIDx4bGlmZjpnIGlkPSJBQ0NPVU5UX05BTUUiPiUzJHM8L3hsaWZmOmc+IOC2nOC3kuC2q+C3lOC2uOC3miDgtrjgtprgtrEg4La94LavIOC2heC2uuC3kuC2reC2uCA8eGxpZmY6ZyBpZD0iTlVNQkVSX09GX0RFTEVURURfSVRFTVMiPiUxJGQ8L3hsaWZmOmc+IOC2muC3iiDgtofgtq0uIOC2lOC2tuC2pyDgtprgt5Tgtrjgtprgt4og4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3JlYWxseV9kZWxldGUiIG1zZ2lkPSIyNTcyNjAwMTAzMTIyNTk2MjQzIj4i4LaF4La64LeS4Lat4La4IOC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfdW5kb19kZWxldGVzIiBtc2dpZD0iMjk0MTMxNzM2MDYwMDMzODYwMiI+IuC2uOC3kOC2muC3k+C2uOC3iiDgtoXgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19kb19ub3RoaW5nIiBtc2dpZD0iMzc0Mzc2NDc0MDQzMDgyMTg0NSI+IuC2r+C3kOC2seC2pyDgtprgt5Lgt4Pgt5Lgt4Dgtprgt4og4Lax4Lec4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX2FjY291bnRfbGFiZWwiIG1zZ2lkPSI1NjU1MjAzMDg5NzQ2NDIzOTI3Ij4i4Lac4LeS4Lar4LeU4La44Laa4LeKIOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2xhYmVsIiBtc2dpZD0iMjkzNTI2NzM0NDg0OTk5MzU1MyI+IuC2nOC3kuC2q+C3lOC2uOC2muC3iiDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX2FjY291bnRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzYxMTk4Mjg5NDg1MzQzNTg3NCI+IuC2nOC3kuC2q+C3lOC2uOC2muC3iiDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iMjQxMjA3MjI3MjgzMjI4NDMxMyI+IuC3gOC3kOC2qeC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2RlY3JlbWVudF9idXR0b24iIG1zZ2lkPSI0NzYwNTA3NzgzODY3NzkwNjciPiLgtoXgtqngt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfc2Nyb2xsX21vZGUiIG1zZ2lkPSIzMDczMTAxMDY3NDQxNjM4NDI4Ij4iPHhsaWZmOmcgaWQ9IlZBTFVFIj4lczwveGxpZmY6Zz4g4LeD4LeK4La04La74LeK4LeBIOC2muC2uyDgtrvgtrPgt4Dgt48g4LeD4LeS4Lan4LeS4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9hY3Rpb24iIG1zZ2lkPSI5MTAxNDczMDQ1ODkxODM1NDkwIj4i4LeA4LeQ4Lap4LeSIOC2muC3kuC2u+C3k+C2uOC2pyDgtongt4Tgtr3gtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sSDgt4Pgt4Qg4LaF4Lap4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtrTgt4Tgtr3gtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfbWludXRlX2J1dHRvbiIgbXNnaWQ9Ijg4NjU4ODUxMTQwMjg2MTQzMjEiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5Tgt4Dgtprgt4og4LeA4LeQ4Lap4LeSIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iNjI0NjgzNDkzNzA4MDY4NDc5MSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lOC3gCDgtoXgtqngt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X2hvdXJfYnV0dG9uIiBtc2dpZD0iMzY1MjA1NjA1NTgxMDIyMzEzOSI+IuC2tOC3kOC2uiDgt4Dgt5Dgtqngt5LgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIxMzc3NDc5ODYzNDI5MjE0NzkyIj4i4La04LeQ4La6IOC2heC2qeC3lOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9zZXRfcG1fYnV0dG9uIiBtc2dpZD0iNDE0NzU5MDY5NjE1MTIzMDg2MyI+IuC2tC7gt4Au4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X3NldF9hbV9idXR0b24iIG1zZ2lkPSI4MzAyMTQwMzUzNTM5NDg2NzUyIj4i4La04LeZLuC3gC4g4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9tb250aF9idXR0b24iIG1zZ2lkPSI1MzY5OTk4NDc5MDY3OTM0MTEwIj4i4La44LeP4LeD4La6IOC3gOC3kOC2qeC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iMTgzMjY5ODk5NTU0MTcyNjAxOSI+IuC2uOC3j+C3g+C2uuC2muC3iiDgtoXgtqngt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfaW5jcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI3MTMwNDY1NDEyMzA4MTczOTAzIj4i4Lav4LeA4LeDIOC3gOC3kOC2qeC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfZGF5X2J1dHRvbiIgbXNnaWQ9IjQxMzE4ODE1MjE4MTg3NTAwMzEiPiLgtq/gt4Dgt4Mg4LaF4Lap4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF95ZWFyX2J1dHRvbiIgbXNnaWQ9IjYzMTg2OTczODQzMTA4MDg4OTkiPiLgt4Dgt4Pgtrsg4LeA4LeQ4Lap4LeSIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF95ZWFyX2J1dHRvbiIgbXNnaWQ9IjQ0ODIwMjE4MTM0OTExMjE3MTciPiLgt4Dgt4Pgtrsg4LaF4Lap4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4i4LaF4LeA4La94LaC4Lac4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiLgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IuC2huC2muC3j+C2u+C2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiLgtofgtq3gt5Tgtr3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i4La64LeZ4Lav4LeU4La44Laa4LeKIOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IuC3g+C2uOC2nyDgtrbgt5ngtq/gt4/gtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiDgt4Pgtrjgtp/gt5LgtrHgt4og4La24LeZ4Lav4LePIOC2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLgt4Pgtrvgt4rgtrTgtqsg4LeE4LeQ4Lap4La94La6LiDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La7IOC2u+C2s+C3gOC3jyDgt4Pgt5Lgtqfgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgt4PgtrPgt4Tgt48g4LaL4Lap4LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgtrTgt4Tgtr3gtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIOC3gOC2uOC2pyDgt4Pgtrvgt4rgtrTgtqvgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIOC2r+C2muC3lOC2q+C2pyDgt4Pgtrvgt4rgtrTgtqvgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i4LaF4Laf4LeU4La9IOC2heC2u+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLgtprgt5Dgtrjgtrvgt4/gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i4Lax4LeS4LeE4LasIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IuC3geC2tuC3iuC2ryDgt4Pgtprgt4rigI3gtrvgt5Pgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC3g+C3iuC3gOC2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IuC2uOC3lOC2u+C2tOC2ryDgtrrgtq3gt5Tgtrvgt5Qg4Laa4LeS4La64LeA4Lax4LeUIOC2h+C3g+C3k+C2uOC2pyDgtongt4Pgt4og4La24Lar4LeU4LeA4Laa4LeKIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i4Lax4LeQ4LeA4Lat4LeU4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUyOTM2MDA0OTY2MDE0OTAyMTYiPiLgtrjgt5Tgtr3gt4og4La04LeS4Lan4LeU4LeA4LanIOC3g+C2guC2oOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjIzNzQ5NjU2Mjk1MjE1MjU4OSI+IuC2ieC3hOC2veC2pyDgt4PgtoLgtqDgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21lbnVfb3ZlcmZsb3dfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMjk1NjU5MDM3NTA5MDA4NDUzIj4i4Lat4LeA4Lat4LeKIOC3gOC3kuC2muC2veC3iuC2tCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI3OTY1OTg0MzYwOTAzNjkzOTAzIj4iJTEkcywgJTIkcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9zdWJ0aXRsZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI2OTg1NTQ2NTMwNDcxNzgwNzI3Ij4iJTEkcywgJTIkcywgJTMkcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfaW50ZXJuYWwiIG1zZ2lkPSI0ODkxOTE2ODMzNjU3OTI5MjYzIj4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2Vfc2RfY2FyZCIgbXNnaWQ9IjMyODI5NDg4NjEzNzgyODY3NDUiPiJTRCDgtrTgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3VzYiIgbXNnaWQ9IjMwMTc5NTQwNTk1Mzg1MTcyNzgiPiJVU0Ig4LaG4Lag4La64Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0cmFjdF9lZGl0X21lbnVfYnV0dG9uIiBtc2dpZD0iODk0MDQ3ODczMDQ5NjYxMDEzNyI+IuC3g+C2guC3g+C3iuC2muC2u+C2q+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSIxOTU1NjM4ODYyMTIyMjMyMzQyIj4i4Lav4Lat4LeK4LatIOC2t+C3j+C3gOC3kuC2reC3jyDgtoXgt4Dgt4Dgt4/gtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfYm9keSIgbXNnaWQ9IjI4MTQ2NzM1NTE0NzE5Njk5NTQiPiLgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4LeEIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtrbgt5Dgtr3gt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzA5MzMzNDQxOTUxODcwNjY4NiI+IjJHLTNHIOC2r+C2reC3iuC2rSDgtoXgtrbgtr3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzYzNjQ4OTQzNjgxOTQ3MDc2MSI+IjRHIOC2r+C2reC3iuC2rSDgtoXgtrbgtr0g4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzg2OTQwMjUxOTM5MTYzMTg4NCI+IuC2ouC2guC2nOC2uCDgtq/gtq3gt4rgtq0g4LaF4La24La9IOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfdGl0bGUiIG1zZ2lkPSI4OTkyMTU0NzM2NDQxMjg0ODY1Ij4iV2ktRmkg4Lav4Lat4LeK4LatIOC2heC2tuC2vSDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+IuC3g+C2tuC2vSDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI3MDI2NzM5MTIxMTM4MDA1MjMxIj4iMkctM0cg4Lav4Lat4LeK4LatIOC3g+C3k+C2uOC3j+C3gCDgtongtprgt4rgtrjgt4DgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMTEwNjU2Mjc3OTMxMTIwOTAzOSI+IjRHIOC2r+C2reC3iuC2rSDgt4Pgt5Pgtrjgt4/gt4Ag4LaJ4Laa4LeK4La44LeA4LePIOC2uuC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMjc5MjQwNTcyMTY1NDEyMTY4Ij4i4Lai4LaC4Lac4La4IOC2r+C2reC3iuC2rSDgt4Pgt5Pgtrjgt4/gt4Ag4LaJ4Laa4LeK4La44LeA4LePIOC2uuC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9Ijg3NDM4NTYwMDYzODQ4MjU5NzQiPiJXaS1GaSDgtq/gtq3gt4rgtq0g4LeD4LeT4La44LeP4LeAIOC2ieC2muC3iuC2uOC3gOC3jyDgtrrgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9zbm9vemVkX2JvZHkiIG1zZ2lkPSI3MDM1NDkwMjc4Mjk4NDQxNzY3Ij4i4LeD4Laz4LeE4Lax4LeKIOC2muC3hSDgt4Pgt5Pgtrjgt4/gt4Dgtqcg4LeA4Lap4LePIDx4bGlmZjpnIGlkPSJTSVpFIj4lczwveGxpZmY6Zz4g4LeA4LeQ4Lap4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF90aXRsZSIgbXNnaWQ9IjU5NjUxNTczNjEwMzYzMjE5MTQiPiLgtrTgt4Pgt5Tgtrbgt5Lgtrjgt4og4Lav4Lat4LeK4LatIOC3g+C3kuC2uOC3jyDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX2JvZHkiIG1zZ2lkPSI2NzQxNTIxMzMwOTk3NDUyOTkwIj4i4LeD4LeT4La44LePIOC2muC3kuC2u+C3k+C2uCDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGUiIG1zZ2lkPSI2NTEwMDQwNDg2MDQ5MjM3NjM5Ij4i4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC3g+C3hOC2reC3kuC2muC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jZXJ0aWZpY2F0ZV9pc192YWxpZCIgbXNnaWQ9IjY4MjUyNjMyNTA3NzQ1NjkzNzMiPiLgtrjgt5ngtrgg4LeD4LeE4Lat4LeS4Laa4La6IOC3gOC2veC2guC2nOC3lOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfdG8iIG1zZ2lkPSI0NTQyMzk0ODAyNzQ5MjEwMzIiPiLgtr3gtrbgt4/gtq/gt5TgtrHgt4rgtrHgt5o6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tbW9uX25hbWUiIG1zZ2lkPSIyMjMzMjA5Mjk5NDM0MTcyNjQ2Ij4i4La04Lec4Lav4LeUIOC2seC3j+C2uOC2ujoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdfbmFtZSIgbXNnaWQ9IjY5NzM1NjExOTA3NjIwODUyMzYiPiLgt4PgtoLgt4Dgt5LgtrDgt4/gtrHgtro6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnX3VuaXQiIG1zZ2lkPSI3MjY1OTgxODkwNDIyMDcwMzgzIj4i4LeD4LaC4LeA4LeS4Law4LeP4Lax4LeP4Lat4LeK4La44LaaIOC2kuC2muC2muC2ujoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfYnkiIG1zZ2lkPSIyNjQ3NTg0OTg4MDU3NDgxNTY2Ij4i4La94La24LeP4Lav4LeZ4LaxIOC2veC2r+C3iuC2r+C3mjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2YWxpZGl0eV9wZXJpb2QiIG1zZ2lkPSI4ODE4ODg2MTM3NTQ1OTgzMTEwIj4i4LeA4La94LaC4Lac4LeU4Lat4LeP4LeA4La6OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9vbiIgbXNnaWQ9IjU4OTUwMTc0MDQzNjEzOTcyMzIiPiLgtrHgt5Lgtprgt5Tgtq3gt4og4Laa4La74LaxIOC2veC2r+C3iuC2r+C3mjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHBpcmVzX29uIiBtc2dpZD0iMzY3NjI0Mjk0OTkxNTk1OTgyMSI+IuC2muC2veC3iiDgtongtprgt5Tgtq3gt4og4LeA4Lax4LeK4Lax4LeaOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcmlhbF9udW1iZXIiIG1zZ2lkPSI3NTg4MTQwNjc2NjA4NjI0OTMiPiLgtoXgtrHgt5Tgtprgt4rigI3gtrvgtrjgt4/gtoLgtprgtro6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZ2VycHJpbnRzIiBtc2dpZD0iNDUxNjAxOTYxOTg1MDc2MzA0OSI+IuC2h+C2n+C3kuC2veC3kiDgt4Pgtr3gtprgt5Tgtqvgt5Q6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhMjU2X2ZpbmdlcnByaW50IiBtc2dpZD0iNDM5MTI3MTI4NjQ3NzI3OTI2MyI+IlNIQS0yNTYg4LaH4Laf4LeS4La94LeS4LeD4La94Laa4LeU4LarOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTFfZmluZ2VycHJpbnQiIG1zZ2lkPSI3OTMwMzMwMjM1MjY5NDA0NTgxIj4iU0hBLTEg4LaH4Laf4LeS4La94LeSIOC3g+C2veC2muC3lOC2qzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfc2VlX2FsbCIgbXNnaWQ9IjQyOTI1NjkzODM5NzY2MzYyMDAiPiLgt4Pgt5Lgtrrgtr3gt4rgtr0g4La24La94Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNDcxMDAxMzg2NDk3NDA0MDYxNSI+IuC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C2muC2uCDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV9hY3Rpb25fcHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjUyNDc2ODQ0MzU5NzkxNDkyMTYiPiLgt4Pgtrjgtp8g4La24LeZ4Lav4LeP4Lac4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGlzdF9kZWxpbWV0ZXIiIG1zZ2lkPSIzOTc1MTE3NTcyMTg1NDk0MTUyIj4iLCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZW5kaW5nIiBtc2dpZD0iMzI0NTY1MzY4MTAwODIxODAzMCI+IuC2uuC3gOC2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaEJyb3dzZXJEZWZhdWx0IiBtc2dpZD0iMjA1Nzk1MTk0NzI5NzYxNDcyNSI+IuC2tuC3iuKAjeC2u+C3gOC3lOC3g+C2u+C2uiDgtq/gt5Lgtrrgtq3gt4og4Laa4La74Lax4LeK4Lax4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlNldHVwQ2FsbERlZmF1bHQiIG1zZ2lkPSI1ODM0OTQ4NDY5MjUzNzU4NTc1Ij4i4LaH4La44Lat4LeU4La4IOC2tOC3kuC3heC3kuC2nOC2seC3iuC2seC3gOC3j+C2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9yZXNvbHZlcl91c2VfYWx3YXlzIiBtc2dpZD0iODAxNzc3MDc0NzgwMTQ5NDkzMyI+IuC3g+C3kOC2uCDgt4Dgt5LgtqfgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9yZXNvbHZlcl91c2Vfb25jZSIgbXNnaWQ9IjI0MDQ2NDQ3OTcxNDkxNzM3NTgiPiLgtpHgtprgt4og4LeA4LeP4La74La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjE3MDUzODk4MTY3MTI3NDcxIj4i4Lan4LeQ4La24LeK4La94Lan4LeK4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDIzOTI5MTI3MzQyMDE0MDEyMyI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9oZWFkcGhvbmVzIiBtc2dpZD0iODExOTk3MTg0MzgwMzQzOTExMCI+IuC2ieC3g+C3iiDgtrbgtqvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWVfZG9ja19zcGVha2VycyIgbXNnaWQ9IjYyNDA2MDI5ODIyNzY1OTE4NjQiPiLgtrHgt4/gtq/gtpog4Lap4Lec4Laa4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbWVkaWFfcm91dGVfbmFtZV9oZG1pIiBtc2dpZD0iMjQ1MDk3MDM5OTAyMzQ3ODA1NSI+IkhETUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i4La04Lav4LeK4Law4Lat4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeB4LeK4oCN4La74LeA4LeK4oCN4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLgtrvgt5Dgt4Tgt5DgtrHgt4og4La74LeE4LeS4LatIOC2r+C2u+C3iuC3geC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLgtrjgt4/gtrDgt4rigI3gtrog4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IuC2tOC2u+C3kuC2veC3neC2muC2seC2uiDgtprgtrvgtrjgt5LgtrHgt4rigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeZ4La44LeS4Lax4LeK4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLgtr3gtrbgt4/gtpzgtq0g4LeE4LeQ4LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI2NzM5ODk5OTYyNjgxODg2NDAxIj4i4La94La24LeP4Lac4LatIOC2seC3nOC3hOC3kOC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19pbl91c2UiIG1zZ2lkPSI0NTMzNzg2MDMxMDkwMTk4MDYzIj4i4La34LeP4LeA4LeS4Lat4La64LeaIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9idWlsdF9pbl9kaXNwbGF5X25hbWUiIG1zZ2lkPSIyNTgzMTM0Mjk0MjkyNTYzOTQxIj4i4Lat4LeS4LeF4LeQ4La94LeSIOC2reC3kuC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9oZG1pX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjE1NTUyNjQ1NTkyMjc0NzAxMDkiPiJIRE1JIOC2reC3kuC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLgtovgtqngt5Dgtq3gt5Lgtrvgt5LgtrogIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iRFBJIj4lNCRkPC94bGlmZjpnPiBkcGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3NlY3VyZV9zdWZmaXgiIG1zZ2lkPSI2MDIyMTE5NzAyNjI4NTcyMDgwIj4iLCDgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IuC2seC3nOC2u+C3kOC3hOC3kOC2seC3iiDgt4PgtoLgtq/gtrvgt4rgt4Hgtprgtrog4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IuC3gOC3meC2seC2reC3iiDgtovgtrTgt4/gtoLgtpzgtrrgtprgt4og4La44LatIOC2uOC3meC2uCDgtq3gt5Lgtrvgtrog4La04LeZ4Lax4LeK4LeA4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IuC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IuC3hOC2r+C3kuC3g+C3kiDgtofgtrjgtq3gt5TgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLgtrvgtqfgt4/gt4Ag4LaF4La44Lat4Laa4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiLgt4Dgt5Dgtrvgtq/gt5Ig4La74Lan4LeP4LeA4Laa4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4i4LeA4LeQ4La74Lav4LeSIOC2uOC3lOC2u+C2tOC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJQSU4g4LaR4LaaIOC3gOC3kOC2u+C2r+C3kuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4i4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiUxJGQ8L3hsaWZmOmc+IOC2pyDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLgtpTgtrbgtpzgt5og4La74Lan4LeP4LeAIOC2heC2s+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNJTSBQSU4g4LaH4Lat4LeU4La94LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iUElOIOC2keC2miDgtofgtq3gt5Tgt4Xgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IuC2uOC3lOC2u+C2tOC2r+C2uiDgtofgtq3gt5Tgt4Xgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4i4Lav4LeQ4Lax4LeKIFNJTSDgtpHgtpog4LaF4La24La9IOC2muC2uyDgtofgtq0uIOC2ieC2r+C3kuC2u+C3kuC2uuC2pyDgtrrgt4/gtrjgtqcgUFVLIOC2muC3muC2reC2uiDgtrrgt5zgtq/gtrHgt4rgtrEuIOC3gOC3kuC3g+C3iuC2reC2uyDgt4PgtrPgt4Tgt48g4LeA4LeP4LeE4Laa4La64LePIOC2heC2uOC2reC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i4LaF4La04Lea4Laa4LeK4LeC4LeS4LatIFBJTiDgtprgt5rgtq3gtrog4LaH4Lat4LeU4LeF4Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLgtoXgtrTgt5rgtprgt4rgt4Lgt5Lgtq0gUElOIOC2muC3muC2reC2uiDgt4Pgt4rgtq7gt5Lgtrsg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJTSU0g4La04LatIOC2heC2nOC3lOC3heC3lCDgtoXgtrvgt5Lgtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiLgt4Dgt5Dgtrvgtq/gt5IgUElOIOC2muC3muC2reC2uuC2muC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLgtoXgtoLgtpogNCDgt4Pgt5LgtqcgOCDgtoXgtq3gtrsg4LeA4LaxIFBJTiDgtpHgtprgtprgt4og4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsg4Laa4Lea4Lat4La6IOC3g+C2guC2m+C3iuKAjeC2uuC3jyA4IOC2muC3iiDgt4Tgt50g4LeA4LeQ4Lap4LeSIOC3gOC3kuC2uiDgtrrgt5Tgtq3gt5TgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4Lax4LeS4LeA4LeQ4La74Lav4LeSIFBVSyDgtprgt5rgtq3gtrog4Lax4LeQ4LeA4LatIOC2h+C2reC3lOC2veC2reC3iiDgtprgtrvgtrHgt4rgtrEuIOC2seC3kOC3gOC2rSDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC3kuC2u+C3k+C2uOC3meC2seC3iiBTSU0g4LaR4LaaIOC3g+C3iuC2ruC3kuC2u+C3gOC2uCDgtoXgtrbgtr0g4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4g4Laa4Lea4LatIOC2nOC3kOC2veC2tOC3kyDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLgtrvgtqfgt48g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC3kuC2u+C3k+C2uOC3iiDgt4Dgt5Dgtqngt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pywg4LaU4La24Lac4LeaIEdvb2dsZSDgtpzgt5Lgtqvgt5Tgtrgg4LeD4La44LacIOC2tOC3lOC2u+C2seC2uiDgt4DgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La6ICjgtoot4Lat4LeQ4La04LeR4La9KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i4La44LeU4La74La04Lav4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLgtrTgt5TgtrvgtrHgtrog4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLgt4Dgtr3gtoLgtpzgt5Qg4Lax4Lec4LeA4LaxIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtrHgt4/gtrjgtrrgtprgt4og4LeE4LedIOC2uOC3lOC2u+C2tOC2r+C2uuC2muC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4LaU4La24Lac4LeaIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtrHgt4/gtrjgtrog4LeE4LedIOC2uOC3lOC2u+C2tOC2r+C2uiDgtoXgtrjgtq3gtprgtq8/XG4gIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iIOC3gOC3meC2rSDgtrrgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i4Lac4LeS4Lar4LeU4La4IOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgtrvgtrjgt5LgtrHgt4rigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuC2lOC2tiBQSU4g4LaF4LaC4Laa4La6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC3j+C2u+C2uuC2muC3iiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeKIOC2muC3nOC2pyDgtofgtq0uXG5cbiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2h+C2reC3lOC3heC2rSDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4Lat4LeP4LeA4Laa4LeKIOC2lOC2tuC2nOC3miDgtrjgt5TgtrvgtrTgtq/gtrog4LaU4La2IOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtqfgtrrgt5LgtrTgt4og4Laa4La7IOC2h+C2rS4gXG5cbuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtqcg4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLgtpTgtrYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgt5og4La74Lan4LeP4LeAIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtofgtrMg4LaH4LatLiBcblxu4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtofgtq3gt5Tgt4Xgtq0g4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i4LaU4La2IOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtoXgt4Dgt4Pgt4rgtq7gt48gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrsg4LaH4LatLiDgtoXgt4Dgt4Pgt4rgtq7gt48gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2heC3g+C3j+C2u+C3iuC2ruC2muC3gCDgtovgtq3gt4rgt4Pgt4Qg4Laa4LeS4La74LeT4La44Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4Laa4La74LeK4La44LeP4Lax4LeK4LatIOC3geC3j+C2veC3jyDgtrjgt5Tgtr3gt4og4Lat4Lat4LeK4LeA4La64LanIOC2seC3kOC3gOC2rSDgtrTgtq3gt4og4LeA4LaxIOC2heC2reC2uyDgt4Pgt5Lgtrrgtr3gt5Qg4La04La74LeS4LeB4LeT4La94LaaIOC2r+C2reC3iuC2rSDgtrHgt5Dgtq3gt5Ig4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiLgtpTgtrYg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LeA4LeP4La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC2muC2r+C3kyDgt4Dgt5Dgtrvgtq/gt5Mg4La04LeK4oCN4La74La64Lat4LeK4Lax4La64Lax4LeKIOC2nOC3meC2sSDgtq3gt5Lgtrbgt5ouIOC2reC3gOC2reC3iiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4La04LeK4oCN4La74La64Lat4LeK4LaxIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LeP4LeA4LeaIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2r+C2pyDgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LaxIOC2heC2reC2uyDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4La04La74LeS4LeB4LeT4La94LaaIOC2r+C2reC3iuC2rSDgtrHgt5Dgtq3gt5Ig4LeA4LeTIOC2uuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC2lOC2tiDgt4Dgt5Dgtrvgtq/gt5Ig4La04LeK4oCN4La74La64Lat4LeK4LaxIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgt4Dgt4/gtrvgtrrgtprgt4og4Lac4LeZ4LaxIOC2h+C2rS4g4Lav4LeQ4Lax4LeKIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2ryDgt4Dgt5ngtq0g4La64LeF4LeSIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uCDgtprgt5ngtrvgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4i4LaU4La2IOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC3gOC3j+C2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Laa4Lav4LeTIOC3gOC3kOC2u+C2r+C3kyDgtrTgt4rigI3gtrvgtrrgtrHgt4rgtq3gtrrgtrHgt4og4Lac4LeZ4LaxIOC2reC3kuC2tuC3mi4g4Lav4LeQ4Lax4LeKIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq3gt4Hgt4/gtr3gt48g4LeD4LeU4La04LeU4La74LeU4Lav4LeK4Lav4LanIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC2seC3lCDgtr3gtrbgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuC2lOC2tiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeS4La44LeaIOC2u+C2p+C3j+C3gCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LeA4LeQ4La74Lav4LeS4La64LanIOC2h+C2syDgtofgtq0uIOC2reC3gOC2reC3iiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4LaL4Lat4LeK4LeD4LeP4LeEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4og4Lac4LeS4Lar4LeU4La4IOC2t+C3j+C3gOC3kuC2reC3jyDgtprgtrvgtrjgt5LgtrHgt4og4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC2lOC2tuC2pyDgtrTgt4Dgt4PgtrHgt5Qg4LaH4LatLlxuXG4g4Lax4LeQ4LeA4LatIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuC2lOC2tiDgt4Dgt5Dgtrvgtq/gt5LgtrrgtqcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4Lat4LeP4LeA4Laa4LeKIOC2lOC2tuC2nOC3miDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LeaIOC2u+C2p+C3j+C3gCDgtofgtrMg4LaH4LatLiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4LaL4Lat4LeK4LeD4LeEIOC2muC3kuC2u+C3k+C2uOC3iiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtrHgt4og4La04LeD4LeU4LeALCDgtpTgtrbgtpzgt5og4LaKLeC2reC3kOC2tOC3kOC2veC3iiDgtr3gt5LgtrTgt5LgtrHgtrog4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyDgtpTgtrbgtpzgt5ngtrHgt4og4LaF4LeD4La64LeSLlxuXG4g4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC2seC3iiDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i4LaJ4LeA4Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhZmVfbWVkaWFfdm9sdW1lX3dhcm5pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzI0MTYxOTM5NDc1NDc4MDY2Ij4i4Lax4LeS4La74LeK4Lav4Lea4LeB4LeS4LatIOC2uOC2p+C3iuC2p+C2uOC3meC2seC3iiDgtongt4Tgt4Xgtqcg4LeB4La24LeK4Lav4La6IOC3gOC3kOC2qeC3kiDgtprgtrvgtrHgt4Dgtq8/XG7gt4Dgt5Dgtqngt5Ig4Laa4LeP4La94La64Laa4LeKIOC2ieC3hOC3hSDgt4Hgtrbgt4rgtq/gtrrgtprgt4og4LeB4LeK4oCN4La74LeA4Lax4La6IOC2muC3kuC2u+C3k+C2uOC3meC2seC3iiDgtpTgtrbgtpzgt5og4LeB4LeK4oCN4La74LeA4Lax4La64LanIOC3hOC3j+C2seC3kiDgt4Dgt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRpbnVlX3RvX2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMTYyNjQyNzM3MjMxNjA3MDI1OCI+IuC2tOC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3j+C3gOC2uiDgt4Pgtrbgtr0g4Laa4LeS4La74LeT4La44LanIOC2h+C2n+C3kuC2veC3kiDgtq/gt5ngtprgtprgt4og4La04LeE4LeF4LanIOC2u+C2s+C3gOC3jyDgt4Pgt5Lgtqfgt5LgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9lbmFibGVkIiBtc2dpZD0iMTM4MTk3MjA0ODU2NDU0NzY4NSI+IuC2tOKAjeC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3j+C3gCDgt4Pgtrbgtr0g4Laa4La74LaxIOC2veC2r+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYWNjZXNzaWJpbGl0eV9jYW5jZWxlZCIgbXNnaWQ9IjM4MzM5MjMyNTc5NjY2MzU2NzMiPiLgtrTigI3gt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Ag4LaF4LeA4La94LaC4Lac4LeUIOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiLgtq/gt5DgtrHgtqcg4LeD4LeS4Lan4LeS4LaxIOC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC3jyA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3duZXJfbmFtZSIgbXNnaWQ9IjI3MTY3NTU0NjAzNzYwMjgxNTQiPiLgt4Tgt5Lgtrjgt5Lgtprgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX3RpdGxlIiBtc2dpZD0iNDUxMDM3MzA4MzA4MjUwMDE5NSI+IuC2r+C3neC3guC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub19yZXN0cmljdGVkX2FjY291bnRzIiBtc2dpZD0iNTczOTQ2MzI0OTY3MzcyNzczNiI+IuC3g+C3k+C2uOC3jyDgt4Pgt4Tgt5Lgtq0g4La04LeQ4Lat4LeS4Laa4LapIOC3g+C2s+C3hOC3jyDgt4DgtrEg4Lac4LeS4Lar4LeU4La44LeKIOC3gOC3meC2rSDgtrjgt5ngtrgg4La64LeZ4Lav4LeU4La4IOC3g+C3hOC2uiDgtrHgt5zgtq/gtprgt4rgt4Dgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbm90X2ZvdW5kIiBtc2dpZD0iMzQyOTE0MTg1MzQ5ODkyNzM3OSI+IuC2uOC3meC2uCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Ag4LeE4LeD4LeU4La74LeU4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2muC3iiDgt4Pgt5zgtrrgt4/gtpzgtq3gt4rgtq3gt5og4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmV2b2tlIiBtc2dpZD0iNTQwNDQ3OTE4NTIyODI3MTU4NiI+IuC2heC3hOC3neC3g+C3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EwIiBtc2dpZD0iNzg3NTQyNzQ4OTQyMDgyMTc5MyI+IklTTyBBMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEiIG1zZ2lkPSIzNzYwNzM0NDk5MDUwODc1MzU2Ij4iSVNPIEExIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMiIgbXNnaWQ9IjU5NzMyNjYzNzgwMjAxNDQzODIiPiJJU08gQTIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EzIiBtc2dpZD0iMTM3MzQwNzEwNTY4NzMwMDg4NCI+IklTTyBBMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTQiIG1zZ2lkPSI2Njg5NzcyODA3OTgyNTk3MjU0Ij4iSVNPIEE0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNSIgbXNnaWQ9IjUzNTM1NDk2NTIwMTU3NDEwNDAiPiJJU08gQTUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E2IiBtc2dpZD0iODU4NTAzODA0ODY3NDkxMTkwNyI+IklTTyBBNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTciIG1zZ2lkPSI2NjQxODM2NzE2OTYzODM5MTE5Ij4iSVNPIEE3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hOCIgbXNnaWQ9Ijc1NzExMzk0Mzc0NjU2OTMzNTUiPiJJU08gQTgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E5IiBtc2dpZD0iMTM3ODQ1NTg5MTk1NzExNTA3OSI+IklTTyBBOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTEwIiBtc2dpZD0iMjQ4MDc0NzQ1NzQyOTQ3NTM0NCI+IklTTyBBMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IwIiBtc2dpZD0iMzk2NTkzNTA5NzY2MTEwODAzOSI+IklTTyBCMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEiIG1zZ2lkPSIyNTA1NzUzMjg1MDEwMTE1NDM3Ij4iSVNPIEIxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMiIgbXNnaWQ9Ijg3NjM4NzQ3MDk4NTk0NTg0NTMiPiJJU08gQjIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IzIiBtc2dpZD0iNDIxMDUwNjY4ODE5MTc2NDA3NiI+IklTTyBCMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjQiIG1zZ2lkPSI1NzQ5NDA0MTY1ODg4NTI2MDM0Ij4iSVNPIEI0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNSIgbXNnaWQ9Ijc2NDA2Mjc0MTQ2MjE5MDQ3MzMiPiJJU08gQjUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I2IiBtc2dpZD0iNzM0Mjk4ODg2NDcxMjc0ODU0NCI+IklTTyBCNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjciIG1zZ2lkPSI1MDY5ODQ0MDY1MjM1MzgyNDI5Ij4iSVNPIEI3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iOCIgbXNnaWQ9IjczMTY4MTg5MjIyNzg3Nzk3NzQiPiJJU08gQjgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I5IiBtc2dpZD0iNTQxNDcyNzA5NDAyNjUzMjM0MSI+IklTTyBCOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjEwIiBtc2dpZD0iNTI1MTI1MzczMTgzMjA0ODE4NSI+IklTTyBCMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MwIiBtc2dpZD0iNDAwMzEzODM0MjY3MTk2NDIxNyI+IklTTyBDMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzEiIG1zZ2lkPSIxOTM1MTg4MDYzMzkzNTUzMDA4Ij4iSVNPIEMxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMiIgbXNnaWQ9IjMxOTczMDc5Njk3MTIwNjk5MDQiPiJJU08gQzIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MzIiBtc2dpZD0iNDMzNTgyNjA4NzMyMTkxMzUwOCI+IklTTyBDMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzQiIG1zZ2lkPSIzNzQ1NjM5NTk4MjgxMDE1MDA1Ij4iSVNPIEM0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNSIgbXNnaWQ9IjgyNjk0NTc3NjU4MjI3OTEwMTMiPiJJU08gQzUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M2IiBtc2dpZD0iNTY2NjY2MTA1MjYwMzQ2OTMwIj4iSVNPIEM2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNyIgbXNnaWQ9Ijg2Nzg0MTMxODA3ODI2MDg0OTgiPiJJU08gQzciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M4IiBtc2dpZD0iODM5MjM3NjIwNjYyNzA0MTczMCI+IklTTyBDOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzkiIG1zZ2lkPSI5MTkxNjEzMzcyMzI0ODQ1NDA1Ij4iSVNPIEM5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMTAiIG1zZ2lkPSI3MzI3NzA5Njk5MTg0OTIwODIyIj4iSVNPIEMxMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZXR0ZXIiIG1zZ2lkPSI0MTkxODA1NjE1ODI5NDcyOTUzIj4i4LaF4Laa4LeU4La74LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2d2cm5tdF9sZXR0ZXIiIG1zZ2lkPSI3ODUzMzgyMTkyNjQ5NDA1NTA3Ij4i4La74Lai4La64LeaIOC2veC3kuC2tOC3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZWdhbCIgbXNnaWQ9IjY2OTc5ODI5ODgyODM4MjMxNTAiPiLgtrHgt5Pgtq3gt4rigI3gtrrgtrHgt5Tgtprgt5bgtr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfanVuaW9yX2xlZ2FsIiBtc2dpZD0iMzcyNzc0Mzk2OTkwMjc1ODk0OCI+IuC2tOC3iuKAjeC2u+C3j+C2ruC2uOC3kuC2miDgtrHgt5Pgtq3gt5LgtrjgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfbGVkZ2VyIiBtc2dpZD0iMjgxODcxNDY0ODk2NjAxMjM2Ij4i4La94LeZ4Lai4La74La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX3RhYmxvaWQiIG1zZ2lkPSI1Nzc1OTY2NDE2MzMzNTc4MTI3Ij4i4Laa4LeU4Lap4LePIOC2tOC3lOC3gOC2reC3iuC2tOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndyaXRlX2ZhaWxfcmVhc29uX2NhbmNlbGxlZCIgbXNnaWQ9IjcwOTEyNTgzNzgxMjE2Mjc2MjQiPiLgtoXgt4Dgtr3gtoLgtpzgt5Qg4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndyaXRlX2ZhaWxfcmVhc29uX2Nhbm5vdF93cml0ZSIgbXNnaWQ9IjgxMzI1MDU0MTc5MzUzMzc3MjQiPiLgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrog4La94LeS4LeA4LeT4La44Lea4Lav4LeTIOC2r+C3neC3guC2uuC2muC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNjA0ODkxMzg4MDE4NDYyODExOSI+IuC2seC3nOC2r+C2seC3kyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9hZG1pbl9waW4iIG1zZ2lkPSI3ODM2NDM3MzE4OTUxNDM5NzAiPiLgtrTgtrvgt5LgtrTgt4/gtr3gtprgtrrgt4/gtpzgt5ogUElOIOC2keC2miDgtofgtq3gt5Tgt4Xgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX3BpbiIgbXNnaWQ9IjMzOTU5NTM0MjEzNjg0NzYxMDMiPiJQSU4g4LaR4LaaIOC2h+C2reC3lOC3heC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5faW5jb3JyZWN0IiBtc2dpZD0iODU3MTUxMjAwMzk1NTA3NzkyNCI+IuC3gOC3kOC2u+C2r+C3kuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lbnRlcl9vbGRfcGluIiBtc2dpZD0iMTQ2MjIwNjIyNTUxMjkxMDc1NyI+IuC3gOC2reC3iuC2uOC2seC3iiBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfbmV3X3BpbiIgbXNnaWQ9IjU5NTk2MDY2OTE2MTk5NTkxODQiPiLgtrHgt4AgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2NvbmZpcm1fcGluIiBtc2dpZD0iODUwMTUyMzgyOTYzMzE0NjIzOSI+IuC2seC3gCBQSU4g4Lat4LeE4LeA4LeU4La74LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jcmVhdGVfcGluIiBtc2dpZD0iODAxNzYwMDAwMDI2MzQ1MDMzNyI+IuC3g+C3kuC2uOC3jyDgt4Dgt5Dgtqngt5Lgtq/gt5Lgtrrgt5Tgtqvgt5Qg4Laa4LeS4La74LeT4La44LanIFBJTiDgt4Pgt4/gtq/gtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfZG9lc250X21hdGNoIiBtc2dpZD0iMjIyNDIxNDE5MDkwNjk5NDU0OCI+IlBJTiDgtrHgt5zgtpzgt5Dgt4XgtrTgt5ngtrrgt5IuIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9lcnJvcl90b29fc2hvcnQiIG1zZ2lkPSI4MTczOTgyNzU2MjY1Nzc3NzkyIj4iUElOIOC2muC3lOC2qeC3jyDgt4Dgt5Dgtqngt5LgtrouIOC2ieC2veC2muC3iuC2muC2uOC3iiA0IOC3gOC2reC3iiDgt4Dgt5Lgtrog4La64LeU4Lat4LeU4La6LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icmVzdHJfcGluX2NvdW50ZG93biI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMxMTA1MDk5NTE5ODU0ODY3NSI+IuC2reC3gOC2reC3iiDgtq3gtq3gt4rgtrTgtrsgMSDgtprgt5LgtrHgt4og4La64LeF4LeSIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiLgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IuC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRyYW5zaWVudF9uYXZpZ2F0aW9uX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjQ5MDc4NDQwNDM2MTExMjM0MjYiPiLgtq3gt5Pgtrvgt5Tgt4Ag4LaF4Lax4LeP4LeA4La74Lar4La64LanIOC2reC3kuC2u+C2uuC3miDgtprgt5ngtr3gt4Dgtrsg4LaF4Lav4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHJhbnNpZW50X25hdmlnYXRpb25fY29uZmlybWF0aW9uX2xvbmciIG1zZ2lkPSI4MDYxNjg1OTIwNTA4MDg2Njk3Ij4i4La04Lav4LeK4Law4Lat4LeSIOC2reC3k+C2u+C3lOC3gCDgtoXgtrHgt4/gt4Dgtrvgtqvgtrrgtqcg4Lat4LeS4La74La64LeaIOC2muC3meC2veC3gOC2u+C3kuC2seC3iiDgtoXgtq/gt5LgtrHgt4rgtrEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NTE2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTU5MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJieXRlU2hvcnQiIG1zZ2lkPSI4MzQwOTczODkyNzQyMDE5MTAxIj4iQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtpbG9ieXRlU2hvcnQiIG1zZ2lkPSI1OTczNzg5NzgzNTA0NzcxODc4Ij4iS0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWdhYnl0ZVNob3J0IiBtc2dpZD0iNjM1NTg1MTU3Njc3MDQyODkyMiI+Ik1CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2lnYWJ5dGVTaG9ydCIgbXNnaWQ9IjMyNTk4ODI0NTUyMTIxOTMyMTQiPiJHQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRlcmFieXRlU2hvcnQiIG1zZ2lkPSIyMzE2MTMwMTgxNTkxODY5NjIiPiJUQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBldGFieXRlU2hvcnQiIG1zZ2lkPSI1NjM3ODE2NjgwMTQ0OTkwMjE5Ij4iUEIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaWxlU2l6ZVN1ZmZpeCIgbXNnaWQ9IjkxNjQyOTI3OTE1MDA1MzE5NDkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lMSRzPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJVTklUIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZsdDvgtrHgtrjgt4og4La64Lec4Lav4LePIOC2seC3kOC2rSZndDsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpcyIgbXNnaWQ9Ijc4OTk4Mjk1MTYwNDg4MTMyMzciPiLigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGxpcHNpc190d29fZG90cyIgbXNnaWQ9IjEyMjgwNzg5OTQ4NjYwMzA3MzYiPiLigKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eVBob25lTnVtYmVyIiBtc2dpZD0iNzY5NDA2MzA0MjA3OTY3NjUxNyI+Iijgtq/gt5Tgtrvgtprgtq7gtrEg4LaF4LaC4Laa4La64Laa4LeKIOC2seC3nOC2uOC3kOC2rSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmtub3duTmFtZSIgbXNnaWQ9IjIyNzc1NTY1NDY3NDI3NDY1MjIiPiIo4Lax4Lec4Lav4Lax4LeTKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIgbXNnaWQ9IjI2NjAwMjA5OTAwOTc3MzMwNzciPiLgtprgtqfgt4Tgtqwg4Lat4LeQ4La04LeR4La9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdE1zaXNkbkFscGhhVGFnIiBtc2dpZD0iMjg1MDg4OTc1NDkxOTU4NDY3NCI+Ik1TSVNETjEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlFcnJvciIgbXNnaWQ9IjUxNTQ0OTk0NTc3MzkwNTI5MDciPiLgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4Lac4LeQ4Lan4LeF4LeU4LeA4Laa4LeKIOC3hOC3nSDgtoXgt4Dgtr3gtoLgtpzgt5QgTU1JIOC2muC3muC2reC2uuC2muC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtbWlGZG5FcnJvciIgbXNnaWQ9IjUyMjQzOTgyMTYzODUzMTY0NzEiPiLgt4Pgt4rgtq7gt4/gt4Dgtrsg4LaH4La44Lat4LeT4La44LeKIOC2heC2guC2miDgt4Dgtr3gtqcg4La04La44Lar4Laa4LeKIOC2uOC3meC3hOC3meC2uuC3lOC2uCDgt4Pgt5Pgtrjgt4/gtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VFbmFibGVkIiBtc2dpZD0iODE0NzI3ODM0NjQxNDcxNDMxNSI+IuC3g+C3muC3gOC3j+C3gCDgt4Pgtrbgtr0g4Laa4La74LaxIOC2veC2r+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRW5hYmxlZEZvciIgbXNnaWQ9IjY4NTYyMjgxNDA0NTM0NzEwNDEiPiLgt4Pgt5rgt4Dgt4/gt4Ag4LeD4La24La94La64LeSLCDgt4PgtrPgt4Tgt486Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZURpc2FibGVkIiBtc2dpZD0iMTkzNzU1MzIyNjU5MjUxNjQxMSI+IuC3g+C3muC3gOC3j+C3gCDgtoXgtrbgtr0g4Laa4La74LaxIOC2veC2r+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlUmVnaXN0ZXJlZCIgbXNnaWQ9IjYyNzUwMTkwODI1OTgxMDI0OTMiPiLgtr3gt5Lgtrrgt4/gtrTgtq/gt5LgtoLgtqDgt5Ig4LeA4LeT4La4IOC3g+C3j+C2u+C3iuC2ruC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRXJhc2VkIiBtc2dpZD0iMTI4ODU4NDY5NTI5NzIwMDk3MiI+IuC2uOC3kOC2muC3k+C2uCDgt4Pgt4/gtrvgt4rgtq7gtpog4LeA4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkSW5jb3JyZWN0IiBtc2dpZD0iNzYxMjIwODgzOTQ1MDEyODcxNSI+IuC3gOC3kOC2u+C2r+C3kiDgtrjgt5TgtrvgtrTgtq/gtrrgtprgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pQ29tcGxldGUiIG1zZ2lkPSI4MjMyNTI3NDk1NDExNjk4MzU5Ij4iTU1JIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2q+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQaW4iIG1zZ2lkPSI5MDE1Mjc3NjQ1NTQ2NzEwMDE0Ij4i4LaU4La2IOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrEg4La94LavIOC2tOC2u+C2qyBQSU4g4LaR4LaaIOC3gOC3kOC2u+C2r+C3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQdWsiIG1zZ2lkPSI1NDg3MjU3NjQ3MDgxMTMyMjAxIj4i4LaU4La2IOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrEg4La94LavIFBVSyDgtpHgtpog4LeA4LeQ4La74Lav4LeS4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pc21hdGNoUGluIiBtc2dpZD0iNjA5Mzc5MDU0NDk2ODYzNDE5Ij4i4LaU4La2IOC2p+C2uuC3kuC2tOC3iiDgtprgtr0gUElOIOC2seC3nOC2nOC3kOC3heC2tOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUGluIiBtc2dpZD0iMzg1MDAxODQ0NTE4NzQ3NTM3NyI+IjQg4LeD4LeS4LanIDgg4Lav4Laa4LeK4LeA4LePIOC2heC2guC2miDgt4Pgt4Tgt5Lgtq0gUElOIOC2keC2muC2muC3iiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4i4LaF4LaC4LaaIDgg4Laa4LeKIOC3hOC3nSDgtorgtqcg4LeA4LeQ4Lap4LeSIFBVSyDgtpHgtprgtprgt4og4Lan4La64LeS4La04LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4i4LaU4La24Lac4LeaIFNJTSDgtrTgtq0g4La04Lat4LanIFBVSyDgtoXgtpzgt5Tgt4Xgt5Qg4LeA4LeQ4Lan4LeTIOC2h+C2rS4g4LaR4La4IOC2heC2nOC3lOC2vSDgtofgtrvgt5PgtrjgtqcgUFVLIOC2muC3muC2reC2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IlNJTSDgtrTgtq3gt5og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyBQVUsyIOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLgtrTgt5Dgtrjgt5Lgtqvgt5ngtrEg4LaF4La44Lat4Lax4LeK4Lax4LeP4Lac4LeaIElEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ2xpck1taSIgbXNnaWQ9Ijc3ODQ2NzM2NzM0NDY4MzMwOTEiPiLgtrTgt5Lgtqfgtq3gtqcg4La64LaxIOC2heC2uOC2reC2seC3iuC2seC3j+C2nOC3miBJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNmTW1pIiBtc2dpZD0iNTEyMzIxODk4OTE0MTU3MzUxNSI+IuC2h+C2uOC2reC3lOC2uCDgtongtq/gt5Lgtrvgt5Lgtrrgtqcg4La64LeQ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ3dNbWkiIG1zZ2lkPSI5MTI5Njc4MDU2Nzk1MDE2ODY3Ij4i4LaH4La44Lat4LeU4La44LeKIOC2u+C3kOC2s+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkJhTW1pIiBtc2dpZD0iNDU1MTkzMDY3OTI2NzcwNTgxIj4i4LaH4La44Lat4LeU4La4IOC2heC3gOC3hOC3kuC2uyDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJQd2RNbWkiIG1zZ2lkPSI3MDQzNzE1Njg3OTA1MjU0MTk5Ij4i4La44LeU4La74La04Lav4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJQaW5NbWkiIG1zZ2lkPSIzMTEzMTE3NzgwMzYxMTkwMzA0Ij4iUElOIOC3gOC3meC2seC3g+C3iiDgt4Dgt5Mg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ25pcE1taSIgbXNnaWQ9IjMxMTA1MzQ2ODA1NTc4NTcxNjIiPiLgtofgtrjgtq3gt5Tgtrjgt4og4LaF4LaC4Laa4La6IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNuaXJNbWkiIG1zZ2lkPSIzMDYyMTAyMTIxNDMwNTQ4NzMxIj4i4LaH4La44Lat4LeU4La44LeKIOC2heC2guC2muC2uiDgt4Pgt5Pgtrjgt48g4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlRocmVlV0NNbWkiIG1zZ2lkPSI5MDUxMDQ3MTcwMzIxMTkwMzY4Ij4i4Lat4LeU4Lax4LeKIOC2uOC3j+C2u+C3iuC2nCDgtofgtrjgtq3gt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSdWFjTW1pIiBtc2dpZD0iNzgyNzg4NzQ1OTEzODMwODg4NiI+IuC2heC2seC3gOC3geC3iuKAjeC2uiDgt4Tgt5Lgtrvgt5Lgt4Tgt5Dgtrvgtq/gt4/gtrrgtpog4LaH4La44Lat4LeU4La44LeKIOC2tOC3iuKAjeC2u+C2reC3kuC2muC3iuC3guC3muC2tCDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmRNbWkiIG1zZ2lkPSIzMTE2NDQ2MjM3MDgxNTc1ODA4Ij4i4LaH4La44Lat4LeT4La44LeaIOC2heC2guC2muC2uiDgtrfgt4/gtrvgtq/gt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJEbmRNbWkiIG1zZ2lkPSIxMjY1NDc4OTMyNDE4MzM0MzMxIj4i4La24LeP4Law4LePIOC2seC3nOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T25OZXh0Q2FsbE9uIiBtc2dpZD0iNDI5NDE1NDA5MTQ1NzgxOTIzIj4i4LaF4La44Lat4Lax4LeK4Lax4LeP4Lac4LeaIElEIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2ryDgtoXgtrHgt5Tgt4Ag4LeD4LeT4La44LePIOC3gOC3kyDgtofgtq0uIOC2uOC3k+C3heC2nyDgtofgtrjgtq3gt5Tgtrg6IOC3g+C3k+C2uOC3jyDgtprgtrsg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPbk5leHRDYWxsT2ZmIiBtc2dpZD0iMzA5MjkxODAwNjA3Nzg2NDYyNCI+IuC2heC2uOC2reC2seC3iuC2seC3j+C2nOC3miBJRCDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt5Qg4LaF4Lax4LeU4LeAIOC3g+C3k+C2uOC3jyDgt4Dgt5Mg4LaH4LatLiDgtrjgt5Pgt4Xgtp8g4LaH4La44Lat4LeU4La4OiDgt4Pgt5Pgtrjgt48g4Laa4La7IOC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPbiIgbXNnaWQ9IjYxNzk0MjUxODI4NTY0MTg0NjUiPiLgtoXgtrjgtq3gtrHgt4rgtrHgt4/gtpzgt5ogSUQg4LeD4LeU4La04LeU4La74LeU4Lav4LeUIOC2heC2seC3lOC3gCDgt4Pgt5Pgtrjgt48g4LeA4LeTIOC2seC3kOC2rS4g4La44LeT4LeF4LafIOC2h+C2uOC2reC3lOC2uDog4LeD4LeT4La44LePIOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT2ZmIiBtc2dpZD0iMjU2Nzk5ODYzMzEyNDQwODU1MiI+IuC2heC2uOC2reC2seC3iuC2seC3j+C2nOC3miBJRCDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt5Qg4LaF4Lax4LeU4LeAIOC3g+C3k+C2uOC3jyDgt4Dgt5Mg4Lax4LeQ4LatLiDgtrjgt5Pgt4Xgtp8g4LaH4La44Lat4LeU4La4OiDgt4Pgt5Pgtrjgt48g4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VOb3RQcm92aXNpb25lZCIgbXNnaWQ9Ijg2MTQ4MzAxODA1MDg2ODY2NjYiPiLgt4Pgt5rgt4Dgt4/gt4DgtrHgt4og4LeD4La04La64LePIOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSUGVybWFuZW50IiBtc2dpZD0iMzM3NzM3MTE0NTkyNjgzNTY3MSI+IuC2heC2uOC2reC2seC3iuC2seC3j+C2nOC3miBJRCDgt4Pgt5Dgtprgt4Pgt5Pgtrgg4LaU4La24LanIOC3gOC3meC2seC3g+C3iuC2muC2vSDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZENoYW5nZWRUaXRsZSIgbXNnaWQ9IjU1OTIxODkzOTg5NTYxODc0OTgiPiLgt4Pgt5Pgtrjgt5Lgtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5ngtrvgt5Lgtqvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25EYXRhIiBtc2dpZD0iODY1Mzc5NDc4NDY5MDA2NTU0MCI+IuC2r+C2reC3iuC2rSDgt4Pgt5rgt4Dgt4/gt4Ag4LaF4LeA4LeE4LeS4La7IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRW1lcmdlbmN5IiBtc2dpZD0iNjU4MTE2Mzc3OTA3MjgzMzY2NSI+IuC3hOC2r+C3kuC3g+C3kiDgt4Pgt5rgt4Dgt4/gt4Ag4LaF4LeA4LeE4LeS4La7IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uTm9ybWFsIiBtc2dpZD0iNDk1Mzg2NzAxMTM4OTc1MDY3MyI+IuC3hOC2rCDgt4Pgt5rgt4Dgt4/gt4Ag4La24LeP4Law4LePIOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsVm9pY2UiIG1zZ2lkPSIzMzk2OTYzNjUyMTA4MTUxMjYwIj4i4LeD4LeS4La64La94LeUIOC3hOC2rCDgt4Pgt5rgt4Dgt48g4LaF4LeA4LeE4LeS4La7IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uU21zIiBtc2dpZD0iODMxNDM1MjMyNzQ2MTYzODg5NyI+IlNNUyDgt4Pgt5rgt4Dgt4/gt4Ag4LaF4LeA4LeE4LeS4La7IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VEYXRhIiBtc2dpZD0iOTk2NjM2NDg3MTA2MTcxMzIwIj4i4LeE4LasL+C2r+C2reC3iuC2rSDgt4Pgt5rgt4Dgt48g4LaF4LeA4LeE4LeS4La7IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uVm9pY2VTbXMiIG1zZ2lkPSIxODg4NTg4MTUyNzkyMDIzODczIj4i4LeE4LasL1NNUyDgt4Pgt5rgt4Dgt48g4LaF4LeA4LeE4LeS4La7IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uQWxsIiBtc2dpZD0iNTY0MzAyODI2NDQ2NjA5MjgyMSI+IuC3g+C3kuC2uuC2veC3lOC2uCDgt4Tgtqwv4Lav4Lat4LeK4LatL1NNUyDgt4Pgt5rgt4Dgt4/gt4DgtrHgt4og4La24LeP4Law4LePIOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzVm9pY2UiIG1zZ2lkPSIxMjU4MzkzODEyMzM1MjU4MDE5Ij4i4LeE4LasIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YSIgbXNnaWQ9Ijg3MjQ1Njc4MjA3NzkzNzg5MyI+IuC2r+C2reC3iuC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc0ZBWCIgbXNnaWQ9IjU1NjY2MjQ5OTg4NDA0ODY0NzUiPiLgt4bgt5Dgtprgt4rgt4Pgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NTTVMiIG1zZ2lkPSIyMDE1NDYwMzczNzAxNTI3NDg5Ij4iU01TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YUFzeW5jIiBtc2dpZD0iNDUyMzQ1NDc4MzQ5ODU1MTQ2OCI+IuC2heC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhU3luYyIgbXNnaWQ9Ijc1MzAwMDA1MTk2NDYwNTQ3NzYiPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzUGFja2V0IiBtc2dpZD0iNjk5MTAwNjU1Nzk5MzQyMzQ1MyI+IuC2tOC3kOC2muC3kOC2p+C3iuC2p+C3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BBRCIgbXNnaWQ9IjMyMzUyNTkwODU2NDgyNzEwMzciPiJQQUQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDAiIG1zZ2lkPSI3MTcwMzM1NDcyMTk4Njk0OTQ1Ij4i4La74Led4La44LeS4LaCIOC2r+C2u+C3iuC3geC2muC2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEiIG1zZ2lkPSI1MzE0ODYxNTE5NzUyNTM4OTIyIj4i4La74Led4La44LeS4LaCIOC2r+C2u+C3iuC3geC2muC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDIiIG1zZ2lkPSI4OTY5OTI5MDQ5MDgxMjY4MTE1Ij4i4La74Led4La44LeS4LaCIOC2r+C2u+C3iuC3geC2muC2uiDgt4Pgt5Dgtqvgt5ngtr3gt5Ig4LeA4LeZ4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQzIiBtc2dpZD0iNTE0ODI1NTAyNzA0Mzk0MzMxNyI+IuC3gOC2p+C2tOC3kuC2p+C3j+C3gOC3meC2seC3iiDgtongt4Dgtq3gt4rgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDQiIG1zZ2lkPSI4ODA4NDU2NjgyNTUwNzk2NTMwIj4i4Lac4Lec4Lap4Lax4LeQ4Lac4LeS4La94LeK4La94LeZ4Lax4LeKIOC2tOC3kuC2p+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NSIgbXNnaWQ9Ijc2MDQwNjMyNTI4NTAzNTQzNTAiPiLgtrvgt53gtrjgt5LgtoIgIC0g4Laa4LeQ4La44Lat4LeSIOC2tOC2r+C3iuC2sOC2reC3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0NiIgbXNnaWQ9IjIwNTk0NDA4MjU3ODI4NzE1MTMiPiLgtrvgt53gtrjgt5LgtoIgIC0g4La94La24LeP4Lac4LatIOC3hOC3kOC2muC3kiDgtrTgtq/gt4rgtrDgtq3gt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDciIG1zZ2lkPSI3MTEyMDc4NzI0MDk3MjMzNjA1Ij4i4La74Led4La44LeS4LaCIC0g4La44LeS4Lat4LeK4oCN4La7IOC3hOC3gOC3lOC2veC3iuC2muC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0OCIgbXNnaWQ9IjU5ODk1Njk3Nzg2MDQwODkyOTEiPiLgtrvgt53gtrjgt5LgtoIgLSDgtoXgtrDgt5Lgtrjgt5Lgtr0g4LeE4LeA4LeU4La94LeK4Laa4La74LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ5IiBtc2dpZD0iNzk2OTI5NjgxMTM1NTE1MjQ5MSI+IuC2u+C3neC2uOC3kuC2giAgLSDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4LeD4Lea4LeA4LePIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kuC2reC3iuC3gOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTAiIG1zZ2lkPSIzOTkyOTA2OTk5ODE1MzE2NDE3Ij4i4La74Led4La44LeS4LaCIC0g4LaF4LeD4La44LeK4La04LeW4La74LeK4LarIOC3g+C3muC3gOC3jyDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Pgtq3gt4rgt4DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDExIiBtc2dpZD0iNDE1NDQ3Njg1NDQyNjkyMDk3MCI+IuC2u+C3neC2uOC3kuC2giAg4La24LeQ4Lax4La74La6IOC3g+C2muC3iuKAjeC2u+C3k+C2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTIiIG1zZ2lkPSIxMTg5MDcxMTE5OTkyNzI2MzIwIj4i4La74Led4La44LeS4LaCIOC2tuC3kOC2seC2u+C2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dFNlYXJjaGluZyIgbXNnaWQ9IjgzNjAxNDE4ODU5NzIyNzk5NjMiPiLgt4Pgt5rgt4Dgt4/gt4Ag4LeD4Laz4LeE4LePIOC3g+C3nOC2uuC2uOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVOb3RGb3J3YXJkZWQiIG1zZ2lkPSIxNjgzNjg1ODgzODQxMjcyNTYwIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IOC2ieC2r+C3kuC2u+C3kuC2uuC2pyDgtrHgt5zgtrrgt4DgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZUZvcndhcmRlZCIgbXNnaWQ9IjEzMDI5MjIxMTc0OTg1OTA1MjEiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IkRJQUxJTkdfTlVNQkVSIj57MX08L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZUZvcndhcmRlZFRpbWUiIG1zZ2lkPSI5MjA2MjUxNzM2NTI3MDg1MjU2Ij4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iVElNRV9ERUxBWSI+ezJ9PC94bGlmZjpnPiDgtqcg4La04LeD4LeU4LeAIDx4bGlmZjpnIGlkPSJESUFMSU5HX05VTUJFUiI+ezF9PC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkIiBtc2dpZD0iNTA3MzIzNzgyNzYyMDE2NjI4NSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiDgtongtq/gt5Lgtrvgt5Lgtrrgtqcg4Lax4Lec4La64LeA4LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkVGltZSIgbXNnaWQ9IjY3ODE2MjE5NjQzMjA2MzUxNzIiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjog4LaJ4Lav4LeS4La74LeS4La64LanIOC2seC3nOC2uuC3gOC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmY0NvbXBsZXRlIiBtc2dpZD0iMzExODg0ODIzMDk2Njg4NjU3NSI+IuC2heC2guC2nCDgtprgt5rgtq3gtrog4LeD4La44LeK4La04LeW4La74LeK4Lar4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZjRXJyb3IiIG1zZ2lkPSIzMzI3NTYwMTI2NTg4NTAwNzc3Ij4i4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2nOC3kOC2p+C3heC3lOC3gOC2muC3iiDgt4Tgt50g4LaF4LeA4La94LaC4Lac4LeUIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtprgt5rgtq3gtrrgtprgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yT2siIG1zZ2lkPSIxMTkxOTE5Mzc4MDgzNDcyMjA0Ij4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yIiBtc2dpZD0iNzk1NjM5MjUxMTE0NjY5ODUyMiI+IuC2ouC3j+C2vSDgtq/gt53gt4Lgtrrgtprgt4og4Lat4LeS4La24LeU4Lar4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckxvb2t1cCIgbXNnaWQ9IjQ3MTE2ODc0NTYxMTE5NjMxNjMiPiJVUkwg4La6IOC3g+C3meC3gOC3kuC2uiDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVW5zdXBwb3J0ZWRBdXRoU2NoZW1lIiBtc2dpZD0iNjI5OTk4MDI4MDQ0MjA3Njc5OSI+IuC2heC2qeC3gOC3kuC2uuC3miDgt4Pgtq3gt4rigI3gtrrgt4/gtrTgtrEg4La04Lan4LeS4La04LeP4Lan4LeS4La6IOC3gOC3meC2rSDgt4Pgt4Tgtrog4Lax4Lec4Lav4Laa4LeK4LeA4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckF1dGgiIG1zZ2lkPSIxNDM1MDY1NjI5NDM4MDQ0NTM0Ij4i4LeD4Lat4LeK4oCN4La64LeP4La04Lax4La6IOC2muC3hSDgtrHgt5zgt4Tgt5DgtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JQcm94eUF1dGgiIG1zZ2lkPSIxNzg4MjA3MDEwNTU5MDgxMzMxIj4i4La04LeK4oCN4La74Lec4Laa4LeK4LeD4LeSIOC3g+C3muC3gOC3j+C2r+C3j+C2uuC2muC2uiDgt4Tgtrvgt4Tgt48g4LeD4Lat4LeK4oCN4La64LeP4La04Lax4La6IOC2heC3g+C3j+C2u+C3iuC2ruC2muC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JDb25uZWN0IiBtc2dpZD0iODcxNDI3MzIzNjM2NDY0MDU0OSI+IuC3g+C3muC3gOC3j+C2r+C3j+C2uuC2muC2uuC3j+C2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeS4La6IOC2seC3nOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JJTyIgbXNnaWQ9IjIzNDA1NTgxOTc0ODkzMDIxODgiPiLgt4Pgt5rgt4Dgt4/gtq/gt4/gtrrgtprgtrrgt48g4LeD4La44LacIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Pgtrjgtqcg4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2ui4g4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVGltZW91dCIgbXNnaWQ9IjQ3NDM0MDM3MDM3NjI4ODM5NTQiPiLgt4Pgt5rgt4Dgt4/gtq/gt4/gtrrgtprgtrog4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uiDgtprgtr3gt4og4LaJ4Laa4LeU4Lat4LeKIOC3gOC3kuC2q+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JSZWRpcmVjdExvb3AiIG1zZ2lkPSI4Njc5NTk2MDkwMzkyNzc5NTE2Ij4i4La04LeS4Lan4LeU4LeA4LeaIOC2tuC3nOC3hOC3nSDgt4Pgt5rgt4Dgt4/gtq/gt4/gtrrgtpog4Lax4LeQ4LeA4LatIOC3hOC2u+C3gOC3jyDgtrrgt5Dgt4Dgt5Pgtrjgt4og4LaF4Lap4LaC4Lac4LeUIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JVbnN1cHBvcnRlZFNjaGVtZSIgbXNnaWQ9IjUwMTU3MzA4MTI5MDYxOTIyMDgiPiLgtrTgt4rigI3gtrvgt5zgtqfgt53gtprgt53gtr3gtrog4LeA4LeZ4LatIOC3g+C3hOC2uiDgtrHgt5zgtq/gtprgt4rgt4Dgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmFpbGVkU3NsSGFuZHNoYWtlIiBtc2dpZD0iOTY1NDk2MDYwMDA2NTg2NDEiPiLgt4Pgt5Tgtrvgtprgt4rgt4Lgt5Lgtq0g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64Laa4LeKIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uOC2pyDgtrHgt5zgt4Tgt5Dgtprgt5Ig4LeA4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckJhZFVybCIgbXNnaWQ9IjM2MzY5Mjk3MjI3Mjg4ODE5NzIiPiJVUkwg4LeA4La94LaC4Lac4LeUIOC2seC3nOC3gOC2sSDgtrHgt5Lgt4Pgt48g4La04LeS4Lan4LeU4LeAIOC3gOC3kuC3gOC3mOC2rSDgtprgt5Lgtrvgt5Pgtrjgtqcg4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlIiBtc2dpZD0iMjE3MDc4ODUxNTA1MjU1ODY3NiI+IuC2nOC3nOC2seC3lOC3gCDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeS4La6IOC2seC3nOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlTm90Rm91bmQiIG1zZ2lkPSI2MjAzODU2NjEyMDQyNjU1MDg0Ij4i4LaJ4La94LeK4La94LaxIOC2veC2ryDgtpzgt5zgtrHgt5Qg4LeD4LeZ4LeA4LeS4La6IOC2seC3nOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JUb29NYW55UmVxdWVzdHMiIG1zZ2lkPSIxMjM1Mzk2OTI3MDg3MTg4MjUzIj4i4LaJ4La94LeK4La94LeT4La44LeKIOC3gOC3kuC3geC3j+C2vSDgtrTgt4rigI3gtrvgtrjgt4/gtqvgtrrgtprgt4og4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC3gOC3meC2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5Lgtrrgt5IuIOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4OTY3NzEwMDI1MDM2MTYzODIyIj4iPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiUxJHM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgtrTgt5TgtrvgtrHgtrog4LeA4LeT4La44LeaIOC2r+C3neC3guC2uuC2muC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luYyIgbXNnaWQ9IjgzNTM1MjMwNjAyNjkzMzU2NjciPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jTm90aWZpY2F0aW9uVGl0bGUiIG1zZ2lkPSIzOTc3NDMzNDkxOTE5MDE0NTgiPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VUb29NYW55RGVsZXRlc05vdGlmaWNhdGlvbkRlc2MiIG1zZ2lkPSI4MTAwOTgxNDM1MDgwNjk2NDMxIj4iPHhsaWZmOmcgaWQ9IkNPTlRFTlRfVFlQRSI+JXM8L3hsaWZmOmc+IOC2uOC3kOC2muC3k+C2uOC3iiDgt4Dgt5Dgtqngt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NDk0MDE5MjM0MTAyMTU0ODk2Ij4i4Lan4LeQ4La24LeK4La94Lan4LeKIOC2huC2oOC2uuC2seC2uiDgtrTgt5Lgtrvgt5Ig4LaH4LatLiDgtongtqkg4Lax4LeS4Lav4LeE4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgtrjgt4Tgtrsg4Lac4Lec4Lax4LeUIOC2uOC2muC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ3NTk5OTI4NjY4MDAwMDU0MSI+IuC2r+C3lOC2u+C2muC2ruC2sSDgtobgtqDgtrrgtrHgtrog4La04LeS4La74LeTIOC2h+C2rS4g4LaJ4LapIOC2seC3kuC2r+C3hOC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4La44LeE4La7IOC2nOC3nOC2seC3lCDgtrjgtprgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWUiIG1zZ2lkPSI2NTQ1Njk2MDA3NjMxNDA0MjkyIj4i4La44La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTQ1MzUxNDIwODY1MjAyODUzIj4i4Lan4LeQ4La24LeK4La94LanIOC3gOC3kuC2muC2veC3iuC2tCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2RpYWxvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjEzMTk5MTkwNzU0NjM5ODg2MzgiPiLgtq/gt5Tgtrvgtprgtq7gtrEg4LeA4LeS4Laa4La94LeK4La04La64Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGUiIG1zZ2lkPSI3MTY3NzAzMzg5ODAyNjE4NjYzIj4i4Lax4LeS4LeE4LasIOC2huC2muC3j+C2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR1cm5fb25fcmFkaW8iIG1zZ2lkPSIzOTEyNzkzMDkyMzM5OTYyMzcxIj4i4Lax4Lec4La74LeQ4LeE4Lax4LeKIOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dXJuX29mZl9yYWRpbyIgbXNnaWQ9IjgxOTg3ODQ5NDk5ODcwNjIzNDYiPiLgtrHgt5zgtrvgt5Dgt4Tgt5DgtrHgt4og4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9sb2NrIiBtc2dpZD0iNzk5MDk0NjU1NDk2MDk4MTUzIj4i4Lat4LeS4La7IOC2heC2nOC3lOC2vSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX29mZiIgbXNnaWQ9IjQyNjY2MTQxMDc0MTI4NjUwNDgiPiLgtrbgtr3gtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3NpbGVudCIgbXNnaWQ9IjMxOTI5ODE2MzAxODQ3MzA3OCI+IuC3hOC2rCDgtrHgtp/gtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfdmlicmF0ZSIgbXNnaWQ9IjcwNzIwNDMzODg1ODE1NTEzOTUiPiLgt4Tgtqwg4Lax4Laf4Lax4La6IOC2muC2uOC3iuC2tOC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3JpbmciIG1zZ2lkPSI4NTkyMjQxODE2MTk0MDc0MzUzIj4i4LeE4LasIOC2seC2n+C2seC2uiDgt4Pgtprgt4rigI3gtrvgt5Pgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9wcm9ncmVzcyIgbXNnaWQ9IjIyODEwNzkyNTczMjk5ODEyMDMiPiLgt4Dgt4Pgt48g4Lav4La44La44LeS4Lax4LeK4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzM4NTc0NTE3OTU1NTczMTQ3MCI+IuC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LeA4LeQ4LeD4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDk3OTIxNzUyNDI4MjEzNTMiPiLgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La6IOC3gOC3kOC3g+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtX3F1ZXN0aW9uIiBtc2dpZD0iMjkwNjU0NDc2ODg4MTEzNjE4MyI+IuC2lOC2tuC2pyDgt4Dgt4Pgt48g4Lav4LeQ4La44LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfdGl0bGUiIG1zZ2lkPSI3MDU0NTA5OTE0NTAwMTQwMzYxIj4i4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC2huC2muC3j+C2u+C2uuC2pyDgtrHgt5Dgt4Dgtq0g4La04LarIOC2nOC2seC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV9jb25maXJtIiBtc2dpZD0iNTUyOTM5NDQ1MDI3ODQ2NjgiPiLgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4LaG4Laa4LeP4La74La64LanIOC2seC3kOC3gOC2rSDgtrTgtqsg4Lac4LeQ4Lax4LeK4LeA4LeT4La44LanIOC2lOC2tuC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/IOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtpTgtrYg4LeD4LeK4Lau4LeP4La04LeS4LatIOC2muC2uyDgtofgtq3gt5Ig4LeD4LeS4La64La94LeU4La4IOC2reC3meC3gOC2sSDgtrTgt4/gtrvgt4rgt4Hgt4Dgt5Pgtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C3kuC2uuC2veC3iuC2vSDgtoXgtrbgtr0g4LeA4LeTIOC2uuC2uuC3ki4g4LaU4La2IOC2seC3kOC3gOC2rSDgtrTgtqsg4Lac4Lax4LeK4LeA4LaxIOC3gOC3kuC2pyDgtpLgt4Dgt48g4Lax4LeQ4LeA4LatIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uCDgt4Pgt5Lgtq/gt5Qg4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiLgtrjgt5Hgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19yZWNlbnRfdGFza3MiIG1zZ2lkPSI4Nzk0OTA2NjU4NzMyMTkzNDczIj4i4La44LeR4LatIOC2uuC3meC2r+C3lOC2uOC3iiDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQwODQ3NzE0MDA4ODA1MzY2NSI+IuC2p+C3kOC2tuC3iuC2veC2p+C3iiDgt4Dgt5Lgtprgtr3gt4rgtrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiLgtq/gt5Tgtrvgtprgtq7gtrEg4LeA4LeS4Laa4La94LeK4La0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrIiBtc2dpZD0iMjg0NDk0NTE5MTc5MjExOTcxMiI+IuC2reC3kuC2uyDgtoXgtpzgt5Tgtr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3Bvd2VyX29mZiIgbXNnaWQ9IjQ0NzE4Nzk0NDA4Mzk4Nzk3MjIiPiLgtrbgtr3gtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fYnVnX3JlcG9ydCIgbXNnaWQ9Ijc5MzQwMTA1Nzg5MjIzMDQ3OTkiPiLgtq/gt53gt4Ig4LeA4La74LeK4Lat4LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3RpdGxlIiBtc2dpZD0iMjY2NzQ5NDgwMzc0MjU0ODUzMyI+IuC2r+C3neC3giDgt4Dgt4/gtrvgt4rgtq3gt4/gt4Dgtprgt4og4Lac4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X21lc3NhZ2UiIG1zZ2lkPSIzOTg0NDcwNDg3NTAzNTA0NTYiPiLgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2tOC2q+C3kuC3gOC3kuC2qeC2uuC2muC3iiDgtr3gt5ngt4Mg4La64LeQ4LeA4LeT4La44LanIOC2uOC3meC2uiDgtpTgtrbgtpzgt5og4LeA4Lat4LeK4La44Lax4LeKIOC2i+C2tOC3j+C2guC2nCDgtq3gtq3gt4rgt4Dgtrog4Lac4LeQ4LaxIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeUIOC2h+C2rS4g4Lav4Led4LeCIOC3gOC3j+C2u+C3iuC2reC3j+C3gCDgtobgtrvgtrjgt4rgtrcg4Laa4La7IOC2keC2uiDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LeD4LeW4Lav4LeP4Lax4La44LeKIOC2muC2u+C2sSDgtq3gt5ngtprgt4og4LaR4La64LanIOC2muC3kuC3g+C3kuC2uuC2uOC3iiDgtprgt4/gtr3gtrrgtprgt4og4Lac4Lat4LeA4Lax4LeUIOC2h+C2rTsg4Laa4La74LeU4Lar4LeP4Laa4La7IOC2ieC3gOC3g+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3RvZ2dsZV9zaWxlbnRfbW9kZSIgbXNnaWQ9IjgyMTk1MjUzNDQyNDY4MTA5MjUiPiLgtrHgt5Lgt4Tgtqwg4LaG4Laa4LeP4La74La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vbl9zdGF0dXMiIG1zZ2lkPSIzMjg5ODQxOTM3MDAzNzU4ODA2Ij4i4LeB4La24LeK4Lav4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2lsZW50X21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjE1MDYwNDY1NzkxNzcwNjY0MTkiPiLgt4Tgtqwg4LeD4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfdG9nZ2xlX2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI1ODg0MzMwMzA2OTI2MzA3NDU2Ij4i4LaF4LeE4LeD4LeK4La64LeP4Lax4LePIOC2huC2muC3j+C2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb25fc3RhdHVzIiBtc2dpZD0iMjcxOTU1Nzk4MjYwODkxOTc1MCI+IuC2heC3hOC3g+C3iuC2uuC3j+C2seC3jyDgtobgtprgt4/gtrvgtrog4LeD4Laa4LeK4oCN4La74LeT4La64La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zX2FpcnBsYW5lX21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjUwNzUwNzA0NDI4NTQ0OTAyOTYiPiLgtoXgt4Tgt4Pgt4rgtrrgt4/gtrHgt48g4LaF4Laa4LeP4La74La6IOC2heC2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgtobgtprgt4/gtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIOC2tOC2r+C3iuC2sOC2reC3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jb3N0TW9uZXkiIG1zZ2lkPSI1NDI5ODA4MjE3ODYxNDYwNDAxIj4i4LaU4La24Lac4LeaIOC2uOC3lOC2r+C2veC3iiDgt4Dgt5Dgtrrgt4DgtrEg4LeD4Lea4LeA4LeP4LeA4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jb3N0TW9uZXkiIG1zZ2lkPSIzMjkzMzAxOTAzNDA5ODY5NDk1Ij4i4LaU4La24Lac4LeZ4Lax4LeKIOC2uOC3lOC2r+C2veC3iiDgtrrgtrEg4Lav4Lea4LeA4La94LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbWVzc2FnZXMiIG1zZ2lkPSI3NTIxMjQ5MTQ4NDQ1NDU2NjYyIj4i4LaU4La24Lac4LeaIOC2tOC2q+C3kuC3gOC3kuC2qSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWVzc2FnZXMiIG1zZ2lkPSI3ODIxOTk5MDcxMDAzNjk5MjM2Ij4i4LaU4La24Lac4LeaIFNNUywg4LaKLeC2reC3kOC2tOC3kOC2veC3iiwg4LeD4LeEIOC3gOC3meC2seC2reC3iiDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4Laa4LeS4La64LeA4Lax4LeK4LaxIOC3g+C3hCDgtr3gt5LgtrrgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3BlcnNvbmFsSW5mbyIgbXNnaWQ9IjM1MTkxNjMxNDEwNzA1MzM0NzQiPiLgtpTgtrbgtpzgt5og4La04Lee4Lav4LeK4Lac4La94LeS4LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfcGVyc29uYWxJbmZvIiBtc2dpZD0iODQyNjQ1MzEyOTc4ODg2MTMzOCI+IuC2lOC2tuC2nOC3miDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4La04Lat4LeaIOC2huC2oOC2uuC2seC2uiDgtprgtrvgtrEg4La94LavLCDgtpTgtrYg4Lac4LeQ4LaxIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Dgtr3gtqcg4LaN4Lai4LeUIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc29jaWFsSW5mbyIgbXNnaWQ9IjU3OTkwOTY2MjM0MTIwNDM3OTEiPiLgtpTgtrbgtpzgt5og4LeD4La44LeP4Lai4La64LeT4La6IOC2reC3nOC2u+C2reC3lOC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc29jaWFsSW5mbyIgbXNnaWQ9IjcxMjk4NDI0NTc2MTE2NDM0OTMiPiLgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC3g+C3hCDgt4Pgt4/gtrjgt4/gtqIg4LeD4La44LeK4La24Lax4LeK4Law4La64Lax4LeKIOC2nOC3kOC2sSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeA4LeZ4LatIOC2jeC2ouC3lCDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2xvY2F0aW9uIiBtc2dpZD0iNjM1MTQ5NzQyNDM2NjkyMDQ5Ij4i4LaU4La24Lac4LeaIOC3g+C3iuC2ruC3j+C2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbG9jYXRpb24iIG1zZ2lkPSI1NzA0Njc5NzYzMTI0MTcwMTAwIj4i4LaU4La24Lac4LeaIOC2t+C3nuC2reC3kuC2miDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgtrgg4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfbmV0d29yayIgbXNnaWQ9IjU4MDg5ODMzNzc3MjcxMDk4MzEiPiLgtqLgt4/gtr0g4LeD4Lax4LeK4Lax4LeS4LeA4Lea4Lav4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19uZXR3b3JrIiBtc2dpZD0iNDQ3ODI5OTQxMzI0MTg2MTk4NyI+IuC3gOC3kuC3gOC3kuC2sCDgtqLgt4/gtr0g4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2JsdWV0b290aE5ldHdvcmsiIG1zZ2lkPSIxNTg1NDAzNTQ0MTYyMTI4MTA5Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19ibHVldG9vdGhOZXR3b3JrIiBtc2dpZD0iNTYyNTI4ODU3NzE2NDI4MjM5MSI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgtpTgt4Pgt4rgt4Pgt5og4LaL4La04LeP4LaC4LacIOC3g+C3hCDgtqLgt4/gtr0g4LeA4LeZ4LatIOC2tOC3kuC3gOC3kuC3g+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjgzMjkyNjE2NzAxNTE4NzEyMzUiPiLgt4Hgt4rigI3gtrvgt4Dgt4rigI3gtrog4LeD4LeQ4Laa4LeD4LeT4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hdWRpb1NldHRpbmdzIiBtc2dpZD0iMjY0MTUxNTQwMzM0NzU2ODEzMCI+IuC3geC3iuKAjeC2u+C3gOC3iuKAjeC2uiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWZmZWN0c0JhdHRlcnkiIG1zZ2lkPSI2MjA5MjQ2NjUzNDI0Nzk4MDMzIj4i4La24LeQ4Lan4La74LeS4La6IOC3gOC3meC2rSDgtrbgtr3gtrTgt4/gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FmZmVjdHNCYXR0ZXJ5IiBtc2dpZD0iNjQ0MTI3NTMyMDYzODkxNjk0NyI+IuC2tuC3kOC2p+C2u+C3kuC2uuC3miDgtrbgtr3gtrog4Laa4LeK4LeC4Lar4LeS4Laa4LeAIOC2heC2qeC3lCDgt4DgtrEg4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2NhbGVuZGFyIiBtc2dpZD0iNTg2MzUwODQzNzc4MzY4MzkwMiI+IuC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2NhbGVuZGFyIiBtc2dpZD0iNTc3NzUzNDMxNjk4MjE4NDQxNiI+IuC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrEg4LeD4LeS4Lav4LeK4Law4LeS4Lax4LeK4LanIOC3g+C3mOC2ouC3lOC3gCDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaWN0aW9uYXJ5IiBtc2dpZD0iNDE0ODU5NzEyODg0MzY0MTM3OSI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgt4Hgtrbgt4rgtq8g4Laa4Led4LeC4La6IOC2muC3kuC2uuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfZGljdGlvbmFyeSIgbXNnaWQ9Ijc5MjExNjYzNTU5NjQ3NjQ0OTAiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LeB4La24LeK4LavIOC2muC3neC3guC2uuC3miDgt4DgtqDgtrEg4Laa4LeS4La64LeA4LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl93cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MDkwMjM3NzAyNDMyNTc2Nzg4Ij4i4La04La74LeS4LeB4LeT4La94LaaIOC3geC2tuC3iuC2r+C2muC3neC3guC2uuC2pyDgtr3gt5Lgt4Dgt5LgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3dyaXRlRGljdGlvbmFyeSIgbXNnaWQ9IjI3MTE1NjE5OTQ0OTczNjE2NDYiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LeB4La24LeK4Lav4Laa4Led4LeC4La64LanIOC3gOC2oOC2sSDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9ib29rbWFya3MiIG1zZ2lkPSIxOTQ5NTE5NjczMTAzOTY4MjI5Ij4i4La04LeS4Lan4LeU4LeD4Lax4LeKIOC3g+C3hCDgtongtq3gt5Lgt4Tgt4/gt4PgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Jvb2ttYXJrcyIgbXNnaWQ9IjQxNjk3NzE2MDYyNTc5NjMwMjgiPiLgtrTgt5Lgtqfgt5Tgt4PgtrHgt4og4LeD4LeEIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtongtq3gt5Lgt4Tgt4/gt4Pgtrog4LeA4LeZ4LatIOC2jeC2ouC3lCDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2RldmljZUFsYXJtcyIgbXNnaWQ9IjYxMTc3MDQ2Mjk3Mjg4MjQxMDEiPiLgt4Pgt5PgtrHgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2RldmljZUFsYXJtcyIgbXNnaWQ9IjQ3NjkzNTYzNjIyNTE2NDExNzUiPiLgt4Pgt5PgtrHgt5Tgt4Ag4LeD4Laa4LeD4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl92b2ljZW1haWwiIG1zZ2lkPSI0MTYyMjM3MTQ1MDI3NTkyMTMzIj4i4LeE4LasIOC2reC3kOC2tOC3keC2vSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfdm9pY2VtYWlsIiBtc2dpZD0iMjQ5ODQwMzk2OTg2Mjk1MTM5MyI+IuC3hOC2rCDgtq3gt5DgtrTgt5Hgtr0g4LeA4LeZ4LatIOC2jeC2ouC3lCDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21pY3JvcGhvbmUiIG1zZ2lkPSIxNzE1Mzk5MDAyNTAwNDM0NjQiPiLgtrjgtrrgt5Lgtprgt4rigI3gtrvgt5zgt4bgt53gtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX21pY3JvcGhvbmUiIG1zZ2lkPSI3MTA2NjE4Mjg2OTA1NzM4NDA4Ij4i4LeB4La24LeK4Lav4La6IOC2tOC2p+C3kuC2nOC2rSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44La64LeS4Laa4LeK4oCN4La74Lec4LeG4Led4Lax4La6IOC3gOC3meC2rSDgto3gtqLgt5Qg4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jYW1lcmEiIG1zZ2lkPSI0ODIwMzcyNDk1ODk0NTg2NjE1Ij4i4Laa4LeQ4La44La74LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19jYW1lcmEiIG1zZ2lkPSIyOTMzNjY3MzcyMjg5NTY3NzE0Ij4i4Lah4LeP4La64LeP4La74LeW4La0IOC3hOC3nSDgt4Dgt5Pgtqngt5Lgtrrgt50g4Lac4LeK4oCN4La74LeE4Lar4La6IOC3g+C2s+C3hOC3jyDgtprgt5Dgtrjgtrvgt4/gt4Ag4LeA4LeZ4LatIOC2jeC2ouC3lCDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NjcmVlbmxvY2siIG1zZ2lkPSI4Mjc1NTAwMTczMzMwNzE4MTY4Ij4i4LaF4Lac4LeU4LeF4LeUIOC2reC3kuC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc2NyZWVubG9jayIgbXNnaWQ9IjcwNjc0OTcxMjg5MjU0OTk0MDEiPiLgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La64LeaIOC2heC2nOC3lOC3heC3lCDgtq3gt5Lgtrvgtrrgt5og4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeS4Lat4LeK4LeA4La64LanIOC2tuC2veC2tOC3j+C2sSDgt4Tgt5Dgtprgt5Lgtrrgt4/gt4AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX2FwcEluZm8iIG1zZ2lkPSI4MDI4Nzg5NzYyNjM0MTQ3NzI1Ij4i4LaU4La24Lac4LeaIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr0g4Lat4Lec4La74Lat4LeU4La74LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hcHBJbmZvIiBtc2dpZD0iMzk1MDM3ODUzODA0OTYyNTkwNyI+IuC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrrgt5og4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr0g4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeS4Lat4LeK4LeA4La64LanIOC2tuC2veC2tOC3keC2uOC3iiDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC2tuC3gC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfd2FsbHBhcGVyIiBtc2dpZD0iMzg1MDI4MDE1ODA0MTE3NTk5OCI+IuC2tuC3kuC2reC3lOC2tOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfd2FsbHBhcGVyIiBtc2dpZD0iNTYzMDQxNzg1NDc1MDU0MDE1NCI+IuC2i+C2tOC3j+C2guC2nCDgtrbgt5Lgtq3gt5TgtrTgtq3gt5og4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5c3RlbUNsb2NrIiBtc2dpZD0iNDA2NTM1NzU5MjM2NjEyOTkyIj4i4LaU4La74La94Led4LeD4LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1DbG9jayIgbXNnaWQ9IjM5NDQzNTk4MzM2MjQwOTQ5OTIiPiLgtovgtrTgt4/gtoLgtpwg4Laa4LeP4La9IOC3hOC3nSDgtprgt4/gtr0g4Laa4La94LeP4La0IOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N0YXR1c0JhciIgbXNnaWQ9IjIwOTU4NjI1NjgxMTM5NDUzOTgiPiLgtq3gtq3gt4rgt4Ag4Lat4LeT4La74LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI2MjQyNTkzNDMyMjI2ODA3MTcxIj4i4LaL4La04LeP4LaC4LacIOC2reC2reC3iuC3gCDgtq3gt5Pgtrvgt5Qg4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3N5bmNTZXR0aW5ncyIgbXNnaWQ9IjMzNDE5OTA5ODYxNDc4MjY1NDEiPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4LeD4LeQ4Laa4LeD4LeT4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeW5jU2V0dGluZ3MiIG1zZ2lkPSI3NjAzMTk1MjY1MTI5MDMxNzk3Ij4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9hY2NvdW50cyIgbXNnaWQ9IjMzNTk2NDYyOTExMjUzMjU1MTkiPiLgtpTgtrbgtpzgt5og4Lac4LeS4Lar4LeU4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19hY2NvdW50cyIgbXNnaWQ9IjQ5NDg3MzI2NDE4MjcwOTEzMTIiPiLgtr3gtrbgt4/gtpzgtq0g4LeE4LeQ4Laa4LeSIOC2nOC3kuC2q+C3lOC2uOC3iiDgt4Dgtr3gtqcg4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfaGFyZHdhcmVDb250cm9scyIgbXNnaWQ9Ijc5OTgyMTQ5Njg3OTE1OTkzMjYiPiLgtq/gt5jgtqngt4/gtoLgtpwg4La04LeP4La94LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19oYXJkd2FyZUNvbnRyb2xzIiBtc2dpZD0iNDM1NzA1Nzg2MTIyNTQ2MjcwMiI+IuC3hOC3keC2seC3iuC2qeC3iuC3g+C3meC2p+C2uuC3miDgtq/gt5jgtqngt4/gtoLgtpwg4LeA4La94LanIOC3g+C3mOC2ouC3lOC3gOC2uCDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9waG9uZUNhbGxzIiBtc2dpZD0iOTA2NzE3Mzk4ODMyNTg2NTkyMyI+IuC2r+C3lOC2u+C2muC2ruC2sSDgtofgtrjgtq3gt5Tgtrjgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3Bob25lQ2FsbHMiIG1zZ2lkPSI3NDg5NzAxNjIwNDQ2MTgzNzcwIj4i4Lav4LeU4La74Laa4Lau4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgtrHgt5Lgtrvgt5Pgtprgt4rgt4Lgtqvgtrog4Laa4La74Lax4LeK4LaxLCDgtrTgtqfgt5Lgtpzgtq0g4Laa4La74Lax4LeK4LaxIOC3g+C3hCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zeXN0ZW1Ub29scyIgbXNnaWQ9IjQ2NTIxOTE2NDQwODI3MTQwNDgiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4La44LeZ4LeA4La94La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zeXN0ZW1Ub29scyIgbXNnaWQ9IjgxNjIxMDI2MDIxOTA3MzQzMDUiPiLgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgt5og4La04LeE4La9IOC2uOC2p+C3iuC2p+C2uOC3iiDgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgtrog4LeD4LeEIOC2tOC3j+C2veC2seC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfZGV2ZWxvcG1lbnRUb29scyIgbXNnaWQ9IjM0NDYxNjQ1ODQ3MTA1OTY1MTMiPiLgt4PgtoLgt4Dgtrvgt4rgtrDgtpog4La44LeZ4LeA4La94La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19kZXZlbG9wbWVudFRvb2xzIiBtc2dpZD0iNzA1ODgyODAzMjM1ODE0MjAxOCI+IuC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtoLgt4Dgtrvgt4rgtrDgtprgtrrgtrHgt4og4LeD4Laz4LeE4LePIOC2tOC2uOC2q+C2muC3iiDgtoXgt4Dgt4Hgt4rigI3gtrog4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9kaXNwbGF5IiBtc2dpZD0iNDI3OTkwOTY3NjAzNjQwMjYzNiI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4ogVUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2Rpc3BsYXkiIG1zZ2lkPSI2MDUxMDAyMDMxOTMzMDEzNzE0Ij4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSBVSSDgt4PgtrPgt4Tgt48g4La24La94La04LeP4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9zdG9yYWdlIiBtc2dpZD0iMTk3MTExODc3MDU0NjMzNjk2NiI+IuC2huC2oOC2uuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI3NDQyMzE4NTAyNDQ2ODc0OTk5Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc3RvcmFnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjkyMDMzMDIyMTQ5MTUzNTU3NzQiPiJTRCDgtrTgtq0g4LeA4LeZ4LatIOC2tOC3iuKAjeC2u+C3gOC3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfYWNjZXNzaWJpbGl0eUZlYXR1cmVzIiBtc2dpZD0iNzkxOTAyNTYwMjI4MzU5MzkwNyI+IuC2tOC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3jyDgt4Dgt5Lgt4Hgt5rgt4Lgt4/gtoLgtpwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX2FjY2Vzc2liaWxpdHlGZWF0dXJlcyIgbXNnaWQ9IjQyMDUxOTY4ODE2NzgxNDQzMzUiPiLgtovgtrTgtprgt4/gtrvgt5Pgt4DgtrEg4Lat4LeP4Laa4LeK4LeC4LarIOC2ieC2veC3iuC2veC3k+C2uOC3iiDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC3gOC3kuC3geC3muC3guC3j+C2guC2nC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJldHJpZXZlV2luZG93Q29udGVudCIgbXNnaWQ9IjM5MDE3MTc5MzY5MzAxNzAzMjAiPiLgtprgt4Dgt5Tgt4Xgt5Qg4LaF4Lax4LeK4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC2veC2tuC3j+C2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIG1zZ2lkPSIzNzcyMjI1MDA4NjA1MzEwNjcyIj4i4LaU4La2IOC2heC2seC3iuC2reC2u+C3iuC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kyDgt4DgtrEg4Laa4LeA4LeU4LeF4LeU4LeA4LeaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdFRvdWNoRXhwbG9yYXRpb24iIG1zZ2lkPSIzMTA4NzIzMzY0Njc2NjY3MzIwIj4i4LeD4LeK4La04La74LeK4LeB4La64LeZ4Lax4LeKIOC2nOC3gOC3muC3guC2q+C2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iNTgwMDU1MjUxNjc3OTI0OTM1NiI+IuC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrEg4LaF4La64LeS4Lat4La4IOC3hOC2rCDgtrHgtpzgt48g4Laa4Lat4LePIOC2muC3meC2u+C3meC2seC3lCDgtofgtq3gt5Ig4LaF4Lat4La7IOC2ieC2guC2nOC3kuC2reC3kiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4Lat4LeS4La74La6IOC2nOC3gOC3muC3guC2q+C2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeU4LeF4LeU4LeA4Lax4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE3Mzk4ODE3NjY1MjI1OTQwNzMiPiLgtovgt4Pgt4Pgt4og4LeA4LeZ4La24LeKIOC2tOC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3j+C3gCDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSI3ODgxMDYzOTYxNTA3NTExNzY1Ij4i4La64LeZ4Lav4LeU4La44LeKIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uuC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Dgtrog4LeA4LeQ4Lap4LeS4LeA4LaxIOC2veC3meC3gyDgt4Pgtprgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2h+C2reC3kOC2uOC3iiDgt4Dgt5Lgtqcg4LeD4LeK4Laa4LeK4oCN4La74LeS4La04LeK4Lan4LeKIOC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9IjIxMDM0NDAzOTE5MDI0MTIxNzQiPiLgtpTgtrYg4Lan4La64LeS4La04LeKIOC2muC3hSDgtrTgt5ngt4Ug4La24La94Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i4Lar4La64LeA4La74La04Lat4LeKIOC2heC2guC2miDgt4Pgt4Qg4La44LeU4La74La04LavIOC3gOC3kOC2seC3kiDgtrTgt5Tgtq/gt4rgtpzgtr3gt5Lgtpog4Lav4Lat4LeK4LatIOC2h+C2reC3lOC3heC2reC3iiDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i4Lat4Lat4LeK4LeAIOC2reC3k+C2u+C3lOC3gCDgtoXgtrbgtr0g4Laa4La74Lax4LeK4LaxIOC3hOC3nSDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IuC2reC2reC3iuC3gCDgtq3gt5Pgtrvgt5Tgt4Ag4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Tgt50g4La04Lav4LeK4Law4Lat4LeSIOC2seC3kuC2u+C3luC2tOC2miDgtpHgtprgtq3gt5Qg4LeE4LedIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzI0NzI4MTkxMTM4NzkzMTQ4NSI+IuC2reC2reC3iuC3gCDgtq3gt5Pgtrvgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNzE2MTEzNjYwNzk1OTc2MDYwIj4i4Lat4Lat4LeK4LeAIOC2reC3k+C2u+C3lOC3gCDgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9leHBhbmRTdGF0dXNCYXIiIG1zZ2lkPSIxMTQ4MTk4Nzg1OTM3NDg5MjY0Ij4i4Lat4Lat4LeK4LeAIOC2reC3k+C2u+C3lOC3gCDgtq/gt5Lgtpwg4LeE4LeQ4La74LeT4La4L+C3hOC3kOC2muC3kuC2veC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjY5MTc1NDk0MzcxMjk0MDExMzIiPiLgtq3gtq3gt4rgt4Ag4Lat4LeT4La74LeU4LeAIOC2r+C3kuC2nCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LeE4LedIOC3hOC3kOC2muC3kuC3heC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iMzkwNjAwNzgzMTE5Mjk5MDk0NiI+IuC2tOC3kuC2p+C3gOC2sSDgtofgtrjgtq3gt5Tgtrjgt4og4LeA4La9IOC2uOC2nCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcHJvY2Vzc091dGdvaW5nQ2FsbHMiIG1zZ2lkPSI1MzMxMzE4OTMxOTM3NDAyMDQwIj4i4La04LeS4Lan4LeA4LaxIOC2h+C2uOC2reC3lOC2uOC3iiDgt4Pgtprgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3hCDgtofgtrjgtq3gt5Pgtrjgtqcg4Lax4LeS4La64La44LeS4LatIOC2heC2guC2muC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La64LeZ4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtrTgt5Lgtqfgt4DgtrEg4LaH4La44Lat4LeU4La44LeKIOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiwg4Lax4LeQ4LeA4LatIOC3hOC3kOC2u+C3gOC3k+C2uCDgt4Tgt50g4LeA4LeQ4LeF4Laa4LeK4LeA4LeT4La4IOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlU21zIiBtc2dpZD0iODY3MzQ3MTc2ODk0Nzg5NTA4MiI+IuC2muC3meC2p+C3kiDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La94La24LeP4Lac4LeQ4Lax4LeT4La4IChTTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVNtcyIgbXNnaWQ9IjY0MjQzODc3NTQyMjg3NjY5MzkiPiJTTVMg4La04Lar4LeS4LeA4LeS4LapIOC2veC3kOC2tuC3k+C2uOC2pyDgt4Pgt4Qg4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4LeE4LeSIOC2reC3muC2u+C3lOC2uCDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaU4La24Lac4LeaIOC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtr3gt5Dgtrbgt5ngtrEg4La04Lar4LeS4LeA4LeS4LapIOC2heC2sOC3k+C2muC3iuC3guC2q+C2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeE4LeQ4Laa4LeS4LeA4LeT4La4IOC3gOC2sSDgtoXgtq3gtrssIOC2kuC3gOC3jyDgtpTgtrbgtqcg4Lax4Lec4La04LeZ4Lax4LeK4LeA4LePIOC2uOC2muC3jyDgtq/gt5Dgtrjgt5Pgtrjgtqfgtq8g4LeE4LeQ4Laa4LeSIOC3gOC3k+C2uOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVNbXMiIG1zZ2lkPSIxODIxMzE3MzQ0NjY4MjU3MDk4Ij4i4La04LeZ4LeFIOC2tOC2q+C3kuC3gOC3lOC2qSDgtr3gtrbgt4/gtpzgtrHgt4rgtrEgKE1NUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlTW1zIiBtc2dpZD0iNTMzMDE5NDM3MjYzMjEyMjYwIj4iTU1TIOC2tOC2q+C3kuC3gOC3kuC2qSDgt4Pgt5zgtrrgt48g4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC3g+C3hCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrrgt5ngtq/gt5Tgtrgg4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC2u+C2seC3lCDgtr3gtrbgtrEg4LaF4Lat4La7IOC2lOC2tuC2pyDgtr3gt5Dgtrbgt5TgtrEg4La04Lar4LeS4LeA4LeS4LapIOC2tOC3meC2seC3iuC3gOC3k+C2uOC3meC2seC3iiDgtq3gt5zgtrvgt4Dgtrgg4La44Laa4LePIOC2r+C3kOC2uOC3kuC2uiDgt4Tgt5Dgtprgt5Ig4La24LeAIOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtoXgtq/gt4Tgt4Pgt4og4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUVtZXJnZW5jeUJyb2FkY2FzdCIgbXNnaWQ9IjE4MDM0Nzc2NjA4NDYyODgwODkiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LeA4LeS4Laa4LeP4LeB4LaxIOC2veC2tuC3jyDgtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlRW1lcmdlbmN5QnJvYWRjYXN0IiBtc2dpZD0iODQ4NTI0MDcwMjYyNDMxOTc0Ij4i4LeE4Lav4LeS4LeD4LeSIOC3gOC3kuC2muC3j+C3gSDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La94LeQ4La24LeT4La44LanIOC3g+C3hCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrTgtq/gt4rgtrDgtq3gt5Ig4La64LeZ4Lav4LeU4La44LeKIOC3gOC2veC2pyDgtrTgtrjgtqvgtprgt4og4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtoXgtq/gt4/gt4Ug4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iMTU5ODMyODg0MzYxOTY0NjE2NiI+IuC3g+C3meC2veC3iiDgtrTgt4rigI3gtrvgtqDgt4/gtrvgtqsg4La04Lar4LeS4LeA4LeS4LapIOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjYzNjE5NzI3NzYwODA0NTg5NzkiPiLgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La64LanIOC2veC3kOC2tuC3lOC2q+C3lCDgt4Pgt5ngtr3gt4og4LeA4LeS4Laa4LeP4LeB4LaxIOC2tOC2q+C3kuC3gOC3kuC2qSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tuC2pyDgt4Tgtq/gt5Lgt4Pgt5Ig4LaF4LeA4LeD4LeK4Lau4LeP4LeA4Lax4LeKIOC2tOC3kuC3heC3kuC2tuC2syDgtoXgtrHgtq3gt5Tgtrvgt5Qg4LaH4Laf4LeA4LeT4La44LanIOC3g+C3meC2veC3iiDgt4Dgt5Lgtprgt4/gt4HgtrEg4La04Lar4LeS4LeA4LeS4LapIOC2h+C2reC3kOC2uOC3iiDgt4Pgt4rgtq7gt4/gtrHgt4Dgtr0g4LeD4LeS4LanIOC2uuC3gOC2seC3lCDgtr3gtrbgtrrgt5IuIOC3hOC2r+C3kuC3g+C3kiDgt4Pgt5ngtr3gt4og4LeA4LeS4Laa4LeP4LeB4LaxIOC2veC3kOC2tuC3meC2sSDgtoXgt4Dgt4Pgt4rgtq7gt4/gt4Dgtprgtq/gt5MsIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44Laf4LeS4Lax4LeKIOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrrgtqcg4Laa4LeP4La74LeK4La6IOC3g+C3j+C2sOC2seC2uuC2pyDgt4Tgt50g4Laa4LeK4oCN4La74LeS4La64Laa4La74Lar4La64LanIOC2tuC3j+C2sOC3jyDgt4Pgt5Lgtq/gt5Tgt4Dgt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFNtcyIgbXNnaWQ9IjU2MDA4MzA2MTIxNDc2NzE1MjkiPiJTTVMg4La04Lar4LeS4LeA4LeS4LapIOC2uuC3kOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NlbmRTbXMiIG1zZ2lkPSI3MDk0NzI5Mjk4MjA0OTM3NjY3Ij4iU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uOC2n+C3kuC2seC3iiDgtrbgtr3gt4/gtrTgt5zgtrvgt5zgtq3gt4rgtq3gt5Qg4Lax4Lec4LeA4LeWIOC2tOC3iuKAjeC2u+C2reC3kuC2teC2vSDgtoXgtq3gt4og4LeA4LeS4La6IOC3hOC3kOC2mi4g4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtpTgtrbgtpzgt5og4Lat4LeE4LeA4LeU4La74LeU4LeA4Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La64LeQ4LeA4LeT4La4IOC2uOC2n+C3kuC2seC3iiDgtpTgtrbgtpzgt5og4La44LeU4Lav4La94LeKIOC3gOC3kOC2uiDgtprgtr0g4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9Ijg3MTM4ODkxMDUzMDU5NDMyMDAiPiLgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LeD4LeS4Lav4LeU4LeA4LeT4La4IOC3hOC2u+C3hOC3jyDgtrTgt4rigI3gtrvgtq3gt5LgtqDgt4/gtrsg4La64LeQ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VuZFJlc3BvbmRWaWFNZXNzYWdlUmVxdWVzdCIgbXNnaWQ9IjcxMDc2NDg1NDg0Njg3Nzg3MzQiPiLgtrTgt5Dgtrjgt5Lgtqvgt5ngtrEg4LaH4La44Lat4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LaU4LeD4LeK4LeD4LeaIOC2tOC3iuKAjeC2u+C2reC3kuC2oOC3j+C2uyDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4og4LeE4LeD4LeU4La74LeU4LeA4LeT4La44LanIOC3gOC3meC2seC2reC3iiDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtongtr3gt4rgtr3gt5Pgtrjgt4og4La64LeQ4LeA4LeT4La44LanLCDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTbXMiIG1zZ2lkPSI4NzQ1MDg2NTcyMjEzMjcwNDgwIj4i4LaU4La24Lac4LeaIOC2tOC3meC3hSDgtrTgtqvgt5Lgt4Dgt5Tgtqkg4Laa4LeS4La64LeA4Lax4LeK4LaxIChTTVMg4LeE4LedIE1NUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4i4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgt4Tgt50gU0lNIOC2tOC2reC3miDgtobgtqDgtrrgtrHgtrog4Laa4La7IOC2h+C2reC3kiBTTVMg4La04Lar4LeS4LeA4LeS4LapIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC3hOC3nSDgt4Dgt5Lgt4Hgt4Dgt4/gt4Pgtq/gtrrgt5Ig4La24LeA4LeS4Lax4LeKIOC2reC3nOC2u+C3gOC2uCDgt4Pgt5Lgtrrgtr3gt5QgU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La44LeZ4La44Lac4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjk1OTY3NTMzNDU3MjQwNTUwIj4i4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgt4Tgt50gU0lNIOC2tOC2reC3miDgtobgtqDgtrrgtrHgtrog4Laa4La74LaxIOC2veC2ryBTTVMg4La04Lar4LeS4LeA4LeS4LapIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC3hOC3nSDgt4Dgt5Lgt4Hgt4rgt4Dgt4/gt4Pgtq/gt4/gtrrgt5Mg4La24LeA4LeS4Lax4LeKIOC2reC3nOC2u+C3gOC2uCDgt4Pgt5Lgtrrgtr3gt5QgU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La44LeZ4La44Lac4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTbXMiIG1zZ2lkPSIzMjE2OTUwNDcyNjM2MjE0Nzc0Ij4i4LaU4La24Lac4LeaIOC2muC3meC2p+C3kiDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LeD4LaC4LeD4LeK4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uCAoU01TIOC3hOC3nSBNTVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTbXMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUxNjA0MTM5NDc3OTQ1MDE1MzgiPiLgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC3hOC3nSBTSU0g4La04Lat4LeaIOC2nOC2tuC2qeC3jyDgtprgtrsg4LaH4Lat4LeSIFNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LeA4LeZ4LatIOC2veC3kuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtpTgtrbgtpzgt5og4La04Lar4LeS4LeA4LeS4LapIOC2uOC2muC3jyDgtq/gt5Dgtrjgt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU21zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2ODY2ODcwOTA1MjMyODU2NyI+IuC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LeE4LedIFNJTSDgtrTgtq3gt5og4LaG4Lag4La64Lax4La6IOC2muC2u+C2sSDgtr3gtq8gU01TIOC2tOC2q+C3kuC3gOC3kuC2qSDgtr3gt5Lgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LaU4La24Lac4LeaIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrjgtprgt48g4Lav4LeQ4La44LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNTk5MTM5ODcxMTkzNjU5MDQxMCI+IuC2tOC3meC3hSDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La94La24LeP4Lac4LeQ4Lax4LeT4La4IChXQVApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI3NDgyMzIxOTAyMjA1ODMzODUiPiJXQVAg4La04Lar4LeS4LeA4LeS4LapIOC2veC3kOC2tuC3k+C2uOC2pyDgt4Pgt4Qg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeSIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uuC3meC3hOC3kiDgtpTgtrbgt4Ag4LaS4LeA4LeP4LanIOC2tOC3meC2seC3iuC3gOC3k+C2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LaU4La24LanIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrHgt5Lgtrvgt5Pgtprgt4rgt4Lgtqvgtrrgtqcg4LeE4LedIOC2uOC3kOC2muC3k+C2uOC2pyDgt4Tgt5Dgtprgt5Lgtrrgt4/gt4Ag4LaH4Lat4LeU4LeF4Lat4LeKIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRhc2tzIiBtc2dpZD0iNjQ2NjA5NTM5NjYyMzkzMzkwNiI+IuC2sOC3j+C3gOC2seC2uiDgt4DgtrEg4La64LeZ4Lav4LeU4La44LeKIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldFRhc2tzIiBtc2dpZD0iNzQ1NDIxNTk5NTg0NzY1ODEwMiI+IuC2r+C3kOC2seC2pyDgt4Pgt4Qg4La44LeR4LatIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgt4/gtrvgt4rgtrrgtrrgtrHgt4og4La04LeS4LeF4LeS4La24LazIOC3gOC3kuC3g+C3iuC2reC2u+C3j+C2reC3iuC2uOC2miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeD4Lec4La64LePIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La6IOC2muC3lOC2uOC2sSDgtrrgt5ngtq/gt5Tgtrjgt4og4LaL4La04LeP4LaC4Lac4La64LeaIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgtrvgtrHgt4rgtrHgt5rgtq8g4La64LaxIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LeD4Lec4La64LePIOC2nOC3kOC2seC3k+C2uOC2pyDgtongtqkg4Lav4LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnMiIG1zZ2lkPSI3MTE0MjU1MjgxOTQ0MjExNjgyIj4i4La04La74LeS4LeB4LeT4La94Laa4La64Lax4LeKIOC2heC2reC2uyDgtoXgtrHgt4rgtq3gtrvgt4rgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJhY3RBY3Jvc3NVc2VycyIgbXNnaWQ9IjM2NDY3MDk2MzYyMzM4NTc4NiI+IuC2i+C2tOC3j+C2guC2nOC2uuC3miDgt4Dgt5Lgt4Dgt5LgtrAg4La04La74LeS4LeB4LeT4La94Laa4La64Lax4LeKIOC3hOC2u+C3hOC3jyDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4DgtrHgt4og4Lav4LeQ4Laa4LeK4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4og4LaF4Lat4La7IOC2huC2u+C2muC3iuC3guC3j+C3gCDgtprgtqngtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4LapIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMjU2NzczNDI4NTU0NTA3NDEwNSI+IuC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC2seC3iiDgtoXgtq3gtrsg4LaF4Lax4LeK4Lat4La74LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kyDgt4Dgt5Pgtrjgtqcg4LeD4La44LeK4La04LeW4La74LeK4LarIOC2tuC2veC2tOC2reC3iuKAjeC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludGVyYWN0QWNyb3NzVXNlcnNGdWxsIiBtc2dpZD0iMzc2ODQxMzY4Mzk1NTAyMzY2Ij4i4La04La74LeS4LeB4LeT4La94Laa4La64Lax4LeKIOC3hOC2u+C3hOC3jyDgt4Pgt5Lgtq/gt5Qg4Laa4LeFIOC3hOC3kOC2muC3kiDgt4Pgt5Lgtrrgtr3gt5Qg4LaF4Lax4LeK4Lat4La74LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3jyDgt4Dgtr3gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZVVzZXJzIiBtc2dpZD0iMTY3NjE1MDkxMTY3MjI4MjQyOCI+IuC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC2seC3iiDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNlcnMiIG1zZ2lkPSI4NDA5MzA2NjY3NjQ1MzU1NjM4Ij4i4LeA4LeS4LeD4LeK4Lat4La7IOC2veC2tuC3jyDgtpzgt5DgtrHgt5PgtrgsIOC2seC3kuC2u+C3iuC2uOC3j+C2q+C2muC2u+C2q+C2uiwg4La44Laa4LeP4Lav4LeQ4La44LeT4La4IOC2h+C2reC3lOC3heC3lCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgtrHgt4og4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La64LanIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0RGV0YWlsZWRUYXNrcyIgbXNnaWQ9IjYyMjk0Njg2NzQ3NTM1Mjk1MDEiPiLgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr0g4Lat4Lec4La74Lat4LeU4La74LeUIOC3g+C3nOC2uuC3jyDgtr3gtrbgt4/gtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXREZXRhaWxlZFRhc2tzIiBtc2dpZD0iMTUzODI0NzQxNDQwNzE3NTk5Ij4i4Lav4LeQ4Lax4LanIOC3g+C3hCDgtrjgt5Hgtq3gtpog4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC3j+C2u+C3iuC2uuC2uuC2seC3iiDgtrTgt5Lgt4Xgt5LgtrbgtrMg4LeA4LeS4LeD4LeK4Lat4La74LeP4Lat4LeK4La44LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtoXgtrHgt5ngtprgt5Tgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2tOC3kuC3heC3kuC2tuC2syDgtrTgt5Tgtq/gt4rgtpzgtr3gt5Lgtpog4Lat4Lec4La74Lat4LeU4La74LeUIOC3g+C3nOC2uuC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LaJ4LapIOC2reC3kuC2tuC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9IjIwMTg1NzU1MjY5MzQ0MjI3NzkiPiLgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2uuC3meC2r+C3lOC2uOC3iiDgtrHgt5Dgt4Dgtq0g4LaF4Lax4LeU4La04LeS4LeF4LeS4LeA4LeZ4La94LanIOC3g+C3kOC2muC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Jlb3JkZXJUYXNrcyIgbXNnaWQ9Ijc3MzQyMTc3NTQ4Nzc0MzkzNTEiPiLgtrTgt5ngtrvgtrbgt5Lgtrjgtqcg4LeE4LedIOC2tOC3g+C3lOC2tuC3kuC2uOC2pyDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4og4Lac4LeZ4Lax4La64LeP4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4LaG4Lav4LeP4Lax4La64Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtrrgt5ngtq/gt5Tgtrgg4La44LeZ4La6IOC3g+C3kuC2r+C3lOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlbW92ZVRhc2tzIiBtc2dpZD0iNjgyMTUxMzQwMTg3MDM3NzQwMyI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtrDgt4/gt4DgtrHgtrog4Lax4LeA4Lat4LeK4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVtb3ZlVGFza3MiIG1zZ2lkPSIxMzk0NzE0MzUyMDYyNjM1NDkzIj4i4Laa4LeP4La74LeK4La64La64Lax4LeKIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeEIOC2kuC3gOC3j+C2uuC3meC3hOC3kiDgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4LeQ4Lat4LeSIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Tgt5Dgt4Pgt5Lgtrvgt5Pgtrgg4La24LeP4Law4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY3Rpdml0eVN0YWNrcyIgbXNnaWQ9IjczOTExOTEzODQwMjczMDMwNjUiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4og4LaF4Lan4LeK4Lan4LeSIOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VBY3Rpdml0eVN0YWNrcyIgbXNnaWQ9IjE2MTU4ODE5MzMwMzQwODQ0NDAiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2sOC3j+C3gOC2seC2uiDgt4DgtrEg4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC2heC2p+C3iuC2p+C3kiDgt4Dgtr3gtqcg4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uOC2pywg4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pywg4LeD4LeEIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4LeE4LeQ4LeD4LeS4La74LeT4La4IOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44Lac4LeS4Lax4LeKIOC2tuC3j+C2sOC3jyDgt4Dgt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhcnRBbnlBY3Rpdml0eSIgbXNnaWQ9IjI5MTg3NjgyMzgwNDUyMDY0NTYiPiLgtpXgtrHgt5Hgtrgg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Laa4LeKIOC2heC2u+C2ueC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXJ0QW55QWN0aXZpdHkiIG1zZ2lkPSI5OTc4MjM2OTUzNDM1ODQwMDEiPiLgtoXgt4Dgt4Pgtrsg4LaG4La74Laa4LeK4LeC4LeP4LeAIOC3hOC3nSDgtrrgt5Dgt4Dgt5Tgtrjgt4og4Lat4Lat4LeK4LeA4La64LeZ4Lax4LeKIOC2reC3nOC2u+C3gOC2uCDgtpXgtrHgt5Hgtrgg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Laa4LeKIOC2huC2u+C2uOC3iuC2tyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRTY3JlZW5Db21wYXRpYmlsaXR5IiBtc2dpZD0iNjk3NTM4NzExODg2MTg0MjA2MSI+IuC2reC3kuC2uyDgtpzgt5Dgt4XgtrTgt5Tgtrgg4LeD4LeQ4Laa4LeD4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0U2NyZWVuQ29tcGF0aWJpbGl0eSIgbXNnaWQ9IjY5MjA0MzYxODY5MzkxNzM3NCI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4Lat4LeS4La7IOC2nOC3kOC2veC2tOC3lOC2uOC3iiDgtrjgt4/gtq/gt5Lgtr3gt5Lgtrog4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC3hOC3kOC3g+C3kuC2u+C3k+C2uCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2muC3kOC2qeC3kuC2uiDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXREZWJ1Z0FwcCIgbXNnaWQ9IjMwMjIxMDcxOTg2ODY1ODQwNTIiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4LeS4Lav4Lec4LeD4LeK4Laa4La74Lar4La6IOC3g+C2tuC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXREZWJ1Z0FwcCIgbXNnaWQ9IjQ0NzQ1MTI0MTYyOTkwMTMyNTYiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44Laa4LeKIOC3g+C2s+C3hOC3jyDgtrHgt5Lgtq/gt5zgt4Pgt4rgtprgtrvgtqvgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5LgtrHgt4/gt4Eg4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQxNjIwOTIxODUxMjQyMzQ0ODAiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4LeD4LaC4Lav4La74LeK4LeB4LaaIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQ29uZmlndXJhdGlvbiIgbXNnaWQ9IjQzNzIyMjM4NzMxNTQyOTYwNzYiPiLgtrTgt5ngtq/gt5ngt4Pgt5Lgtrog4LeE4LedIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtoXgtprgt5Tgtrvgt5Qg4La04LeK4oCN4La74La44LeP4Lar4La6IOC3gOC3kOC2seC3kiDgtrTgt4Dgtq3gt5LgtrEg4LeA4LeS4Lax4LeK4oCN4La64LeP4LeD4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9lbmFibGVDYXJNb2RlIiBtc2dpZD0iNTY4NDUwNDA1ODE5MjkyMTA5OCI+IuC2uOC3neC2p+C2u+C3iiDgtrvgtq4g4LaG4Laa4LeP4La74La6IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19lbmFibGVDYXJNb2RlIiBtc2dpZD0iNDg1MzE4NzQyNTc1MTQxOTQ2NyI+IuC2muC3j+C2u+C3iiDgtobgtprgt4/gtrvgtrog4LeD4La24La9IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iMzkxNDAyNjY4NzQyMDE3NzIwMiI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeQ4LeD4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSI0NTkzMzUzMjM1OTU5NzMzMTE5Ij4i4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSDgtrTgt4Pgt5Tgtrbgt5Lgtrjgt4og4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeSIOC2heC3gOC3g+C2seC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4Law4LeP4LeA4Lax4La6IOC2seC3kOC3gOC2reC3k+C2uOC2pyDgtrjgt5ngtrog4LeE4Lea4Lat4LeU4LeA4Laa4LeKIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iMjMyOTYyNzQyODgzMjA2NzcwMCI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4La24La94LeZ4Lax4LeKIOC2seC3gOC2reC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlU3RvcFBhY2thZ2VzIiBtc2dpZD0iNTI1MzE1NzI5NjE4Mzk0MDgxMiI+IuC2uuC3meC2r+C3lOC2uOC2pyDgtrbgtr3gt5ngtrHgt4og4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgtrHgt5Dgt4Dgtq3gt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZvcmNlQmFjayIgbXNnaWQ9IjY1MjkzNTIwNDA3MjU4NDYxNiI+IuC2uuC3meC2r+C3lOC2uCDgt4Dgt5Dgt4Pgt5Pgtrjgtqcg4La24La9IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZvcmNlQmFjayIgbXNnaWQ9IjM4OTIyOTU4MzA0MTk1MTM2MjMiPiLgtrHgt5Dgt4Dgtq3gt5Pgtrjgtqcg4La04LeZ4La74La24LeS4La44LeaIOC2h+C2reC3kiDgtpXgtrHgt5Hgtrgg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Laa4LeKIOC2tuC2veC3meC2seC3iiDgtrHgt5Dgt4Dgtq3gt5Pgtrjgtqcg4LeD4LeEIOC2tOC3kuC2p+C3lOC2tOC3g+C2pyDgtrrgt4/gtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZHVtcCIgbXNnaWQ9IjE2ODE3OTk4NjI0Mzg5NTQ3NTIiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2reC2reC3iuC3gOC2uiDgt4Pgt5zgtrrgt48g4La94La24LePIOC2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2R1bXAiIG1zZ2lkPSIxNzc4Mjk5MDg4NjkyMjkwMzI5Ij4i4La04Lav4LeK4Law4Lat4LeS4La64LeaIOC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtq3gtq3gt4rgt4Dgtrog4La94LeQ4La24LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgt4Dgt5TgtrHgt4og4LeD4LeP4La44LeP4Lax4LeK4oCN4La64La64LeZ4Lax4LeKIOC2t+C3j+C3gOC3kuC2rSDgtrHgt5zgtprgtrvgtrEg4LeA4LeS4LeA4LeS4Law4Lat4LeK4LeA4La64Laa4LeS4Lax4LeKIOC2uuC3lOC2reC3iiDgtrTgt5Tgtq/gt4rgtpzgtr3gt5Lgtpog4LeD4LeEIOC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Pgt5zgtrrgt48g4La94La24LePIOC2nOC2rSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjgwMjI1ODg2MDg5OTQ1ODk5MzgiPiLgtq3gt5Lgtrsg4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC3g+C3nOC2uuC3jyDgtr3gtrbgt4/gtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfY29udGVudCIgbXNnaWQ9IjMxOTMyNjkwNjk0Njk3MDAyNjUiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4Laa4LeA4LeU4LeF4LeU4LeA4LaaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtprgt4Dgt5Tgt4Xgt5Qg4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uCDgt4Pgt4Qg4La44LeU4La74La04Lav4La6IOC3hOC3kOC2uyDgtpLgt4Dgt4/gtrrgt5ngt4Tgt5Ig4La04LeZ4LeFIOC2tOC2u+C3kuC2muC3iuC3guC3jyDgtprgt5Lgtrvgt5Pgtrgg4LeD4LeS4Lav4LeU4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdGVtcG9yYXJ5X2VuYWJsZV9hY2Nlc3NpYmlsaXR5IiBtc2dpZD0iMjMxMjYxMjEzNTEyNzMxMDI1NCI+IuC2tOC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3j+C3gOC2uiDgtq3gt4/gt4Dgtprgt4/gtr3gt5Lgtprgt4Ag4LeD4La24La9IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RlbXBvcmFyeV9lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjgwNzk0NTYyOTMxODI5NzU0NjQiPiLgtovgtrTgt4/gtoLgtpzgtrog4LeA4LeZ4LatIOC2tOKAjeC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3j+C3gCDgtq3gt4/gt4Dgtprgt4/gtr3gt5Lgtprgt4Ag4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La04La74LeS4LeB4LeT4La94LaaIOC2heC3gOC2sOC3j+C2seC2uuC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrTigI3gt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4Ag4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9Ijg1MzIyOTUxOTkxMTI1MTkzNzgiPiLgtq3gt5Lgtrsg4Lat4Lec4La74Lat4LeU4La74LeUIOC3g+C3nOC2uuC3jyDgtr3gtrbgt4/gtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZXRyaWV2ZV93aW5kb3dfaW5mbyIgbXNnaWQ9IjQ5OTg4MzYzNzA0MjQxODY4NDkiPiLgtprgt4Dgt5Tgt4Xgt5Qg4Laa4LeF4La44Lax4LeP4Laa4La74LeUIOC2uOC2nOC3kuC2seC3iiDgtprgt4Dgt5Tgt4Xgt5Tgt4Ag4Lac4LeQ4LaxIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Pgt5zgtrrgt48g4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4La04Lav4LeK4Law4Lat4LeSIOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4Laa4LeQ4La44Lat4LeSIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtr3gtrbgt48g4Lac4LatIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4Njc1NTM1NjQ4ODA3NDI3Mzg5Ij4i4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKIOC2tOC3meC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZpbHRlcl9ldmVudHMiIG1zZ2lkPSI4MDA2MjM2MzE1ODg4MzQ3NjgwIj4i4La04LeS4Lan4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrTgt5ngtrsg4LeD4LeS4La64La94LeUIOC2tOC2u+C3kuC3geC3k+C2veC2miDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4rgt4Dgtr0g4La04LeK4oCN4La74LeA4LeP4LeE4La64Laa4LeKIOC2tOC3meC2u+C3k+C2uOC2pyDgtrrgt5zgtq/gt48g4Lac4Lax4LeK4Lax4LePIOC2huC2r+C3j+C2sSDgtrTgt5ngtrvgt5Pgtrjgtprgt4og4La94LeS4La64LeP4La04Lav4LeS4LaC4Lag4LeSIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La04La74LeS4LeB4LeT4La94LaaIOC2uOC3kOC2r+C3kuC3hOC2reC3iiDgt4Dgt5Pgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2tOC2r+C3iuC2sOC2reC3kiBVSSDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI1OTczNjI2NzM4MTcwNjE4Nzc1Ij4i4Lav4La74LeK4LeB4Lax4La6IOC3gOC3kuC3geC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYWduaWZ5X2Rpc3BsYXkiIG1zZ2lkPSI3MTIxMjM1Njg0NTE1MDAzNzkyIj4i4Lav4LeD4LeU4Lax4LeaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgt4Dgt5Lgt4Hgt4/gtr0g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtofgtq3gt5Dgtrjgt4og4LeA4LeS4LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4osIOC2i+C2tOC3j+C2guC2nOC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeFIOC2seC3nOC3hOC3kOC2muC3kiDgtrbgt4Dgtqcg4La04Lat4LeKIOC2muC2u+C2uOC3kuC2seC3iiDgtq/gt4Pgt5TgtrHgt5og4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC3gOC3meC2seC3g+C3iiDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2h1dGRvd24iIG1zZ2lkPSI3MTg1NzQ3ODI0MDM4OTA5MDE2Ij4i4LaF4LapIOC3gOC3geC2uuC3meC2seC3iiDgt4Dgt5Dgt4Tgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaHV0ZG93biIgbXNnaWQ9IjcwNDY1MDA4Mzg3NDYyOTE3NzUiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4og4Laa4LeF4La44Lax4LeP4Laa4La74LeUIOC3gOC3kOC3hOC3k+C2uOC3miDgtq3gtq3gt4rgt4Dgtrrgtqcg4Lav4La44Lax4LeK4LaxLiDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4LeA4LeQ4LeE4LeT4La44Laa4LanIOC2tOC2reC3iiDgtrHgt5zgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdG9wQXBwU3dpdGNoZXMiIG1zZ2lkPSI0MTM4NjA4NjEwNzE3NDI1NTczIj4i4La64LeZ4Lav4LeU4La44LeKIOC2uOC3j+C2u+C3lCDgt4Dgt5Pgtrgg4LeA4LeQ4LeF4Laa4LeK4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RvcEFwcFN3aXRjaGVzIiBtc2dpZD0iODI2MjE5NTgwMjU4MjI1NTAyMSI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgtprgt4og4LeA4LeZ4LatIOC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC3j+C3gCDgtrjgt4/gtrvgt5Qg4LeA4LeT4La4IOC3gOC3heC2muC3iuC3gOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFRvcEFjdGl2aXR5SW5mbyIgbXNnaWQ9IjI1Mzc5MjIzMTE0MTE1NDYwMTYiPiLgtrTgt4Dgtq3gt5LgtrEg4La64LeZ4Lav4LeU4La44LeaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtr3gtrbgt4/gtpzgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRUb3BBY3Rpdml0eUluZm8iIG1zZ2lkPSI4MTUzNjUxNDM0MTQ1MTMyNTA1Ij4i4Lat4LeS4La74La64LeaIOC2tOC3meC2u+C2tuC3kuC2uCDgtq3gt5Tgt4Ug4Lat4LeS4La24LeZ4LaxIOC2r+C3kOC2seC3iiDgtrTgt4Dgtq3gt4rgtrHgt48g4La64LeZ4Lav4LeU4La44LeaIOC3g+C3hCDgt4Pgt5rgt4Dgt4/gt4Dgtr0g4La04Lee4Lav4LeK4Lac4La94LeS4LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4Lav4La74Lax4LeK4Lax4LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ydW5TZXRBY3Rpdml0eVdhdGNoZXIiIG1zZ2lkPSI4OTIyMzkwOTQ4NjcxODI2NTYiPiLgt4Pgt5Lgtrrgtr3gt5Qg4La64LeZ4Lav4LeU4La44LeKIOC2r+C3kuC2uuC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgt4og4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC3g+C3hCDgtrTgt4/gtr3gtrHgtrog4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcnVuU2V0QWN0aXZpdHlXYXRjaGVyIiBtc2dpZD0iNjAwMzYwMzE2MjU3ODU3NzQwNiI+IuC2tOC2r+C3iuC2sOC2reC3kuC2uiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4og4Lav4LeS4La64Lat4LeKIOC2muC2u+C2seC3iuC2seC3miDgtprgt5ngt4Pgt5rgtq/gt5Dgtrrgt5Ig4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La64LanIOC3g+C3hCDgtrTgt4/gtr3gtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44Lac4LeS4Lax4LeKIOC2tOC2r+C3iuC2sOC2reC3kuC2uiDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqvgtrrgt5ngtrHgt4rgtrgg4LeD4La44LeK4La44LeU4Lat4LeS4La64Laa4LanIOC2keC3heC2ueC3kuC2uiDgt4Tgt5DgtpouIOC3gOC2u+C3iuC2sOC2seC2uiDgt4PgtrPgt4Tgt48g4La04La44Lar4Laa4LeKIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4LaF4LeA4LeB4LeK4oCN4La6IOC3gOC3meC2uuC3kiwg4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeSIOC3gOC3kuC2p+C3meC2muC2reC3iiDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0UGFja2FnZVJlbW92ZWQiIG1zZ2lkPSIyNTc2MzMzNDM0ODkzNTMyNDc1Ij4i4La04LeQ4Laa4Lea4LaiIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgt5og4La04LeK4oCN4La74Lag4LeP4La74Lar4La64Laa4LeKIOC2uuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Jyb2FkY2FzdFBhY2thZ2VSZW1vdmVkIiBtc2dpZD0iNjYyMTkwMTIxNjIwNzkzMTA4OSI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtrTgt5Dgtprgt5rgtqLgtrrgtprgt4og4LaJ4LeA4Lat4LeK4Laa4Lec4LanIOC2h+C2reC3kiDgtrbgt4Dgtqcg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44Laa4LeKIOC3gOC3kuC2muC3j+C3geC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4g4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgtoXgtrHgt5ngtprgt5Tgtq3gt4og4La64LeZ4Lav4LeU4La44Laa4LeKIOC2seC3kOC2reC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI1Njg5MDk1MDA5MDMwMzM2NTkzIj4iU01TLeC2veC3kOC2tuC3k+C2uCDgt4Dgt5Lgtprgt4/gt4HgtrEg4La64LeQ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U21zUmVjZWl2ZWQiIG1zZ2lkPSI0MTUyMDM3NzIwMDM0MzY1NDkyIj4iU01TIOC2tOC2q+C3kuC3gOC3kuC2qeC2uuC2muC3iiDgt4Tgtrvgt4Tgt48g4La94LeQ4La24LeU4Lar4LeUIOC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC2muC3iiDgtrTgt4rigI3gtrvgtqDgt4/gtrvgtqvgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2tOC3kOC2uOC3kuC2q+C3meC2sSBTTVMg4La04Lar4LeS4LeA4LeS4LapIOC3gOC2guC2oOC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4LatIOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RXYXBQdXNoIiBtc2dpZD0iMzE0NTM0NzQxMzAyODU4MjM3MSI+IldBUC1QVVNILeC2veC3kOC2tuC3k+C2uCDgt4Dgt5Lgtprgt4/gt4HgtrEg4La64LeQ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0V2FwUHVzaCIgbXNnaWQ9IjQ3ODM0MDI1MjUwMzk0NDI3MjkiPiJXQVAgUFVTSCDgtrTgtqvgt5Lgt4Dgt5Tgtqngtrrgtprgt4og4La94LeQ4La24LeTIOC2h+C2reC3kiDgtrbgt4Dgtqcg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44Laa4LeKIOC3gOC3kuC2muC3j+C3geC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC2guC2oOC3j+C2muC3j+C2u+C3kyBNTVMg4La04Lar4LeS4LeA4LeU4LapIOC2veC3kOC2tuC3k+C2uOC3iiDgt4Tgt50g4Lax4LeS4LeE4Las4LeAIOC2leC2seC3keC2uCDgt4Dgt5ngtrbgt4og4La04LeS4Lan4LeU4LeA4LaaIOC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4LeA4LeS4Lag4La94LeK4oCN4La64LeA4La94LeS4Lax4LeKIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5PgtrjgtqcsIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcm9jZXNzTGltaXQiIG1zZ2lkPSIyNDUxODczNjY0MzYzNjYyNjY2Ij4i4Law4LeP4LeA4LaxIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kiDgtpzgtqvgtrEg4LeD4LeT4La44LePIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFByb2Nlc3NMaW1pdCIgbXNnaWQ9IjczMTgwNjEzMTQwNDA4Nzk1NDIiPiLgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2i+C2tOC2u+C3kuC2uCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Ig4Lac4Lar4LaxIOC2tOC3j+C2veC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0QWx3YXlzRmluaXNoIiBtc2dpZD0iNTUwOTU4NTA3Nzk4Nzk2OTY1Ij4i4La04LeD4LeU4La24LeS4La44LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr3gtqcg4LeA4LeQ4LeD4LeT4La44LanIOC2tuC2veC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldEFsd2F5c0ZpbmlzaCIgbXNnaWQ9Ijc0NzEzMTA2NTI4Njg4NDE0OTkiPiLgtrTgt4Pgt5Tgtrbgt5Lgtrjgtqcg4La04LeS4LeA4LeS4LeD4LeZ4Lax4LeA4LeP4Lat4LeKIOC3g+C2uOC2n+C2uCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4og4Lax4LeQ4LeA4Lat4LeT4La4IOC2tOC3j+C2veC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Lgt4Pgt5rgtq3gt4og4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjI3ODk2MTA2NzM1MTQxMDMzNjQiPiLgtrbgt5Dgtqfgtrvgt5Ig4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhdHRlcnlTdGF0cyIgbXNnaWQ9IjU4OTczNDY1ODI4ODI5MTUxMTQiPiLgt4Dgtrvgt4rgtq3gtrjgt4/gtrEg4La04LeE4LeFIOC2uOC2p+C3iuC2p+C2uOC3miDgtrbgt5Dgtqfgtrvgt5Lgtrog4La34LeP4LeA4LeS4Lat4LePIOC2r+C2reC3iuC2rSDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4La74LaxIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5zgtrHgt4Dgt48g4Lav4LeQ4La64LeSIOC2nOC3kOC2sSDgt4Dgt5Lgt4Pgt4rgtq3gtrvgt4/gtq3gt4rgtrjgtpog4Lat4Lec4La74Lat4LeU4La74LeUIOC2nOC3kOC2sSDgtq/gt5DgtrEg4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXBkYXRlQmF0dGVyeVN0YXRzIiBtc2dpZD0iMzcxOTY4OTc2NDUzNjM3OTU1NyI+IuC2tuC3kOC2p+C2u+C3kiDgt4PgtoLgtpvgt4rigI3gtrrgt4/gtrEg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3VwZGF0ZUJhdHRlcnlTdGF0cyIgbXNnaWQ9IjY4NjI4MTc4NTcxNzgwMjUwMDIiPiLgtpHgtprgtq3gt5Qg4Laa4La74Lac4Lax4LeK4Lax4LePIOC2veC2ryDgtrbgt5Dgtqfgtrvgt5Ig4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRBcHBPcHNTdGF0cyIgbXNnaWQ9IjE1MDg3Nzk2ODc0MzY1ODU3NDQiPiLgtrrgt5ngtq/gt5Tgtrjgt5og4LeA4LeS4Laa4La94LeK4La0IOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2guC2miDgt4Pgt5zgtrrgt48g4La94La24LeP4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QXBwT3BzU3RhdHMiIG1zZ2lkPSI2MjQzODg3MDQxNTc3OTEyODc3Ij4i4LaR4Laa4Lat4LeUIOC2muC2u+C2nOC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeS4Lat4LeK4LeAIOC3g+C2guC2m+C3iuKAjeC2uuC3jyDgtr3gt5rgtpvgtrEg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtovgtrTgt4/gtoLgtpzgtrrgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2i+C2tOC3j+C2guC2nCDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUFwcE9wc1N0YXRzIiBtc2dpZD0iODgyOTA5NzM3Mzg1MTUyMTUwNSI+IuC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgt5Lgtprgtr3gt4rgtrQg4LeD4LaC4Lab4LeK4oCN4La64LeP4LaC4LaaIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVBcHBPcHNTdGF0cyIgbXNnaWQ9IjUwNzg0NTk2NTk0NDAzNDgzIj4i4LaR4Laa4Lat4LeUIOC2muC2u+C2nOC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeS4Lat4LeK4LeAIOC3g+C2guC2m+C3iuKAjeC2uuC3jyDgtr3gt5rgtpvgtrEg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JhY2t1cCIgbXNnaWQ9IjQ3MDAxMzAyMjg2NTQ1MzkyMCI+IuC2tOC2r+C3iuC2sOC2reC3kiDgtovgtrTgt4Pgt4rgtq4g4La04LeP4La94Lax4La6IOC2muC2u+C2seC3iuC2sSDgt4Pgt4Qg4Lax4LeQ4LeA4LatIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JhY2t1cCIgbXNnaWQ9IjY5MTIyMzA1MjUxNDA1ODk4OTEiPiLgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgt5og4LaL4La04LeD4LeK4Lau4La6IOC3g+C3hCDgtovgtrTgtprgt4rigI3gtrvgtrgg4Lax4LeQ4LeA4LatIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uCDgtrTgt4/gtr3gtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La9IOC2t+C3j+C3gOC3kuC2reC2uiDgt4PgtrPgt4Tgt48g4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjU1NTcwNzEzMjU4MDQ0NjkxMDIiPiLgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4LaL4La04LeD4LeK4Lau4La6IOC3hOC3nSDgtrjgt5ngt4Tgt5ngtrrgt5Tgtrjgt4og4Lax4LeQ4LeA4LatIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uCDgt4PgtrHgt4/gtq4g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlybV9mdWxsX2JhY2t1cCIgbXNnaWQ9IjE3NDg3NjIxNzE2Mzc2OTk1NjIiPiLgtrTgt5bgtrvgt4rgtqsg4LaL4La04LeD4LeK4LauIOC2reC3hOC3gOC3lOC2u+C3lOC2muC3kuC2u+C3k+C2uOC3iiBVSSDgtrTgt5TgtrvgtrHgt4rgtrHgtqcg4LaL4La04Laa4La74Lar4La64LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC2muC3kuC3g+C3kuC2uCDgtrrgt5ngtq/gt5Tgtrjgtprgt4og4La34LeP4LeA4LeS4Lat4LePIOC2seC3nOC2muC2u+C2seC3lCDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnRlcm5hbFN5c3RlbVdpbmRvdyIgbXNnaWQ9IjIxNDg1NjM2MjgxNDAxOTMyMzEiPiLgtoXgt4Dgt4Pgtrsg4Lax4Lec4La94Lat4LeKIOC2muC3gOC3lOC3heC3lOC3gCDgtq/gtrvgt4rgt4HgtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW50ZXJuYWxTeXN0ZW1XaW5kb3ciIG1zZ2lkPSI3NDU4Mzg3NzU5NDYxNDY2Mzk3Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2tOC2r+C3iuC2sOC2reC3kiDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LaF4Lat4LeU4La74LeU4La44LeU4LeE4LeU4Lar4Lat4LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2tuC2veC3j+C2tOC3nOC2u+C3nOC2reC3iuC2reC3lCDgt4DgtrEg4Laa4LeA4LeU4LeF4LeUIOC2seC3kuC2u+C3iuC2uOC3j+C2q+C2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4La34LeP4LeA4LeS4Lat4La6IOC3g+C2s+C3hOC3jyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9IjM1NDMzNDc5ODA4Mzk1MTg2MTMiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2i+C2qeC3kuC2seC3iiDgtoXgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zeXN0ZW1BbGVydFdpbmRvdyIgbXNnaWQ9Ijg1ODQ2NzgzODE5NzI4MjAxMTgiPiLgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeKIOC2uOC2rSDgt4Tgt50g4La04La74LeS4LeB4LeT4La94LaaIOC2heC2reC3lOC2u+C3lCDgtrjgt5Tgt4Tgt5Tgtqvgtq3gt4og4Laa4Lec4Lan4LeD4LeK4LeA4La9IOC2h+C2s+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LaR4La6IOC2lOC2tuC3miDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5og4LaH4Lat4LeSIOC2leC2seC3keC2uCDgtrrgt5ngtq/gt5Tgtrjgtpog4La44LeU4LeE4LeU4Lar4LatIOC3g+C2uOC2nCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeT4La44LanIOC3hOC3nSDgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeKIOC2nOC3kOC2sSDgtpTgtrbgtqcg4La04LeZ4Lax4LeZ4LaxIOC2huC2muC3j+C2u+C2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbmltYXRpb25TY2FsZSIgbXNnaWQ9IjI4MDUxMDMyNDExNTM5MDcxNzQiPiLgtpzgt53gtr3gt5Pgtrog4LeD4Lai4LeT4LeA4LaxIOC3gOC3muC2nOC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QW5pbWF0aW9uU2NhbGUiIG1zZ2lkPSI3NjkwMDYzNDI4OTI0MzQzNTcxIj4i4LaV4Lax4LeR4La4IOC3gOC3meC2veC3j+C3gOC2miDgtrTgt5zgtq/gt5Qg4LeD4Lai4LeT4LeA4LeT4Laa4La74LarIOC3gOC3muC2nOC2uiAo4LeA4Lea4Lac4LeA4Lat4LeKIOC3hOC3nSDgtrjgtrHgt4rgtq/gtpzgt4/gtrjgt5Mg4LeD4Lai4LeT4LeA4LeT4Laa4La74LarKSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbWFuYWdlQXBwVG9rZW5zIiBtc2dpZD0iMTI4NjUwNTcxNzA1MDEyMTM3MCI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtqfgt53gtprgtrEg4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFwcFRva2VucyIgbXNnaWQ9IjgwNDM0MzE3MTMwMTQzOTU2NzEiPiLgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrogWiDgtrTgtqfgt5LgtrTgt4/gtqfgt5Lgtrog4La44Laf4LeE4LeQ4La74La64La44LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtoXgtrrgt5Lgtq3gt5Ig4Lan4Led4Laa4Lax4LeKIOC2tOC2reC3iiDgtrHgt5Lgtrvgt4rgtrjgt4/gtqvgtrrgtqcg4LeD4LeEIOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Lgt4Pgt5rgtq3gt4og4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9IjQ3MDgxODExODQ0NDE4ODAxNzUiPiLgtq3gt5Lgtrvgtrog4Lax4LeS4LeB4LeK4Lag4La9IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZyZWV6ZVNjcmVlbiIgbXNnaWQ9Ijg1NTg5MjM3ODkyMjI2NzAwNjQiPiLgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4Lat4LeS4La7IOC3g+C2guC2muC3iuKAjeC2u+C2uOC2q+C2uiDgt4PgtrPgt4Tgt48g4Lat4LeS4La74La6IOC2reC3j+C3gOC2muC3j+C2veC3kuC2muC3gCDgtrjgt5Tgtq/gt4Dgt5Lgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbmplY3RFdmVudHMiIG1zZ2lkPSIxMzc4NzQ2NTg0MDIzNTg2NjAwIj4i4La64Lat4LeU4La74LeUIOC3g+C3hCDgtrTgt4/gtr3gtrEg4La24Lec4Lat4LeK4Lat4La44LeKIOC2lOC2tuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA2MzUyNTY1NTk5OTY4NjMyIj4i4Lat4La44Lax4LeK4Lac4LeaIOC2huC2r+C3j+C2sSDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4ogKOC2uuC2reC3lOC2u+C3lCDgtpHgtrbgt5Lgtrjgt4ogLCDgtobgtq/gt5MgKSDgtoXgtrHgt5ngtprgt5Tgtq3gt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2t+C3j+C2u+C2r+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4Lan4LeQ4La24LeK4La94Lan4La6IOC2veC2tuC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luamVjdEV2ZW50cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1MzEyODA1NzU3MjMyNjI1MyI+IuC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4LaR4LeE4LeSIOC2huC2r+C3j+C2sSDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4ogKOC2uuC2reC3lOC2u+C3lCDgtpHgtrbgt5Pgtrjgt4osIOC2uuC2seC3j+C2r+C3kuC2ui4pIOC2huC2r+C3kuC2uiDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtq3gt4rgtprgtrsg4Lac4LeQ4Lax4LeT4La4IOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkSW5wdXRTdGF0ZSIgbXNnaWQ9IjQ2OTQyODkwMDA0MTI0OTIzNCI+IuC2lOC2tiDgtqfgtrrgt5LgtrTgt4og4Laa4La74LaxIOC2r+C3meC2uiDgt4Pgt4Qg4LaU4La2IOC2nOC2seC3iuC2seC3jyDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4DgtrHgt4og4La04Lan4LeS4Lac4LatIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRJbnB1dFN0YXRlIiBtc2dpZD0iODM4Nzc1NDkwMTY4ODcyODA0MyI+IuC2uOC3lOC2u+C2tOC2r+C2uiDgtqfgtrrgt5LgtrTgt4og4Laa4LeS4La74LeT4La4IOC3gOC3kOC2seC3kiDgtoXgtrHgt5ngtprgt5Tgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC3g+C2uOC2nyDgtoXgtrHgt4rgtq3gtrvgt4rgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4LeA4Lax4LeA4LeS4LanIOC2uuC2seC3j+C2r+C3kyDgtpTgtrYg4LaU4La24LaxIOC2uuC2reC3lOC2u+C3lCDgtq/gt5Dgtprgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC3g+C3muC2reC3iiDgtoXgtq/gt4/gt4Ug4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZElucHV0TWV0aG9kIiBtc2dpZD0iMzM2MDA2NDYyMDIzMDUxNTc3NiI+IuC2huC2r+C3j+C2sSDgtprgt4rigI3gtrvgtrjgtrrgtprgt4og4LeA4LeZ4LatIOC2tuC2s+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRJbnB1dE1ldGhvZCIgbXNnaWQ9IjMyNTA0NDAzMjI4MDcyODYzMzEiPiLgtobgtq/gt4/gtrEg4Laa4LeK4oCN4La74La44La6IOC2ieC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt5og4LaF4Lat4LeU4La74LeUIOC2uOC3lOC3hOC3lOC2q+C2reC2muC3iiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC2muC3kuC2u+C3k+C2uOC2pyDgtrDgt4/gtrvgtprgtrrgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Ig4LeA4LeS4Lan4LeZ4LaaIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2UiIG1zZ2lkPSI1MzU3NzMzOTQyNTU2MDMxNTkzIj4i4La04oCN4LeK4oCN4La74LeA4Lea4LeB4LeK4oCN4La64Lat4LePIOC3g+C3muC3gOC3j+C3gOC2muC3iiDgt4Dgt5ngtq0g4La24Lav4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlIiBtc2dpZD0iNzAzNDYxNTkyODYwOTMzMTM2OCI+IuC2tOKAjeC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3jyDgt4Pgt5rgt4Dgt4/gt4Dgt5og4LaJ4LeE4LeFIOC2uOC2p+C3iuC2p+C2uOC3miDgtoXgtq3gt5Tgtrvgt5Tgtrjgt5Tgt4Tgt5Tgtqvgtq3gtqcg4La24LeQ4Laz4LeT4La44LanIOC2r+C2u+C2seC3iuC2seC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeaLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgt4Dgt5Lgtqfgtpog4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI4NDYyODE1MTc5NTcyNzQ4NzYxIj4i4La44LeU4Lav4LeK4oCN4La74LarIOC3g+C3muC3gOC3j+C3gOC2muC2pyDgtrbgtq/gt4rgtrAg4LeA4LeTIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQcmludFNlcnZpY2UiIG1zZ2lkPSI3OTYwMDY3NjIzMjA5MTExMTM1Ij4i4La44LeU4Lav4LeK4oCN4La74LarIOC3g+C3muC3gOC3j+C3gCDgtongt4Tgtr0g4La44Lan4LeK4Lan4La44LeaIOC2heC2reC3lOC2u+C3lCDgtrjgt5Tgt4Tgt5Tgtqvgtq3gtprgt4og4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgt5Lgtrvgt5Pgtrjgtqcg4Law4LeP4La74Laa4La64LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeSIOC3gOC3kuC2p+C3meC2miDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQWxsUHJpbnRKb2JzIiBtc2dpZD0iMTEyMDc5MjQ2ODQ2NTcxMTE1OSI+IuC3g+C3kuC2uuC2veC3lCDgtrjgt5Tgtq/gt4rigI3gtrvgtqsg4Laa4LeP4La74LeK4La64La64Lax4LeKIOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5ngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NBbGxQcmludEpvYnMiIG1zZ2lkPSIyOTc4MTg1MzExMDQxODY0NzYyIj4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC2muC3kuC2seC3iiDgt4Pgt5Hgtq/gt5Qg4La44LeU4Lav4LeK4oCN4La74LarIOC2muC3j+C2u+C3iuC2uiDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeT4La44LanIOC2sOC3j+C2u+C2muC2uuC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROZmNTZXJ2aWNlIiBtc2dpZD0iMjc1MjczMTMwMDQxOTQxMDcyNCI+Ik5GQyDgt4Pgt5rgt4Dgt4/gt4Ag4LeA4LeZ4LatIOC2tuC3kOC2s+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmROZmNTZXJ2aWNlIiBtc2dpZD0iNjEyMDY0NzYyOTE3NDA2Njg2MiI+Ik5GQyDgtprgt4/gtqngt4og4La04Lat4LeKIOC2huC2r+C2u+C3iuC3geC2seC2uiDgtprgtrvgtrEg4La64LeZ4Lav4LeU4La44LeKIOC2u+C2s+C3gOC2seC2uuC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeT4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iNzM1ODM3ODQwMTkxNTI4NzkzOCI+IuC2tOC3meC3hSDgt4Pgt5rgt4Dgt4/gt4Dgtprgtqcg4La24Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFRleHRTZXJ2aWNlIiBtc2dpZD0iODE1MTk2ODkxMDk3Mzk5ODY3MCI+IuC2muC3meC2p+C3kiDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4LeD4Lea4LeA4LeP4LeA4LaaICjgtovgtq/gt48uIFNwZWxsQ2hlY2tlclNlcnZpY2UpIOC2ieC3hOC2vSDgtrjgtqfgt4rgtqfgtrjgt5og4LaF4Lat4LeU4La74LeUIOC2uOC3lOC3hOC3lOC2q+C2reC2muC3iiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC2muC3kuC2u+C3k+C2uOC2pyDgtrDgt4/gtrvgtprgtrrgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Ig4LeA4LeS4Lan4LeZ4LaaIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjQ3MDg1OTYwMjExNjE0NzMyNTUiPiJWUE4g4LeD4Lea4LeA4LeP4LeA4Laa4LanIOC2tuC3kOC2s+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IlZQTiDgt4Pgt5rgt4Dgt4/gt4Ag4LaJ4LeE4La9IOC2uOC2p+C3iuC2p+C2uOC3miDgtoXgtq3gt5Tgtrvgt5Qg4La44LeU4LeE4LeU4Lar4Lat4Laa4LeKIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4LeS4La74LeT4La44LanIOC2sOC3j+C2u+C2muC2uuC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2muC3kuC3g+C3kiDgt4Dgt5Lgtqfgt5ngtpog4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4i4La24LeS4Lat4LeU4La04LatIOC3gOC3meC2rSDgtrbgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IuC2tuC3kuC2reC3lOC2tOC2rSDgtongt4Tgtr0g4La44Lan4LeK4Lan4La44LeaIOC2heC2reC3lOC2u+C3lCDgtrjgt5Tgt4Tgt5Tgtqvgtq3gtprgt4og4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgt5Lgtrvgt5Pgtrjgtqcg4Law4LeP4La74Laa4La64LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4Laa4LeS4LeD4LeSIOC3gOC3kuC2p+C3meC2miDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IuC3gOC3kuC2ouC2pyDgt4Pgt5rgt4Dgt4/gt4Dgtprgtqcg4La24Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IuC3gOC3kuC2ouC2p+C3iiDgt4Pgt5rgt4Dgt4/gt4Ag4LaJ4LeE4La9IOC2uOC2p+C3iuC2p+C2uOC3miDgtoXgtq3gt5Tgtrvgt5Qg4La44LeU4LeE4LeU4Lar4Lat4Laa4LeKIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4LeS4La74LeT4La44LanIOC2sOC3j+C2u+C2muC2uuC3j+C2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2muC3kuC3g+C3kiDgt4Dgt5Lgtqfgt5ngtpog4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiLgtovgtrTgt4/gtoLgtpwg4La04La74LeS4La04LeP4La94LaaIOC3g+C2uOC2nyDgtoXgtrHgt4rgtq3gtrvgt4rgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Mg4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZERldmljZUFkbWluIiBtc2dpZD0iNTY5NzE1NDE5NTQzOTA3OTMwIj4i4LaL4La04LeP4LaC4LacIOC2tOC3j+C2veC2muC2uuC3jyDgt4Dgt5ngtq3gtqcg4LaF4La34LeS4La04LeK4oCN4La74LeP4La64La64Lax4LeKIOC2uuC3kOC3gOC3k+C2uOC2pyDgtrDgt4/gtrvgtprgtrrgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtprgt5Lgt4Pgt5Ig4LeA4LeS4Lan4LeZ4LaaIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VEZXZpY2VBZG1pbnMiIG1zZ2lkPSI0MjQ4ODI4OTAwMDQ1ODA4NzIyIj4i4LaL4La04LeP4LaC4LacIOC2tOC2u+C3kuC2tOC3j+C2veC2muC2uuC3meC2muC3iiDgtpHgtprgt4og4Laa4LeS4La74LeT4La4IOC3hOC3nSDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRGV2aWNlQWRtaW5zIiBtc2dpZD0iNTAyNTYwODE2NzcwOTk0MjQ4NSI+IuC2r+C2u+C2seC3iuC2seC3j+C2pyDgtovgtrTgt4/gtoLgtpwg4La04La74LeS4La04LeP4La94Laa4La64LeS4Lax4LeKIOC2keC2muC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeE4LedIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3mi4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr3gtqcg4Laa4LeS4LeD4LeS4Lav4LePIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMzNjU5NDc3MTcxNjM4NjY4NDQiPiLgtq3gt5Lgtrsg4Lav4LeS4LeB4LeP4Lax4Lat4LeS4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRPcmllbnRhdGlvbiIgbXNnaWQ9IjMwNDYxMjY2MTkzMTY2NzE0NzYiPiLgtq3gt5Lgtrvgtrrgt5og4La34LeK4oCN4La74La44Lar4La6IOC2leC2seC3keC2uCDgt4Dgt5rgtr3gt4/gt4Dgtpog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4Lav4LePIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4DgtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0UG9pbnRlclNwZWVkIiBtc2dpZD0iOTE3NTM3MTYxMzMyMjU2MjkzNCI+IuC2r+C2u+C3iuC3geC2muC2uuC3miDgt4Dgt5rgtpzgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFBvaW50ZXJTcGVlZCIgbXNnaWQ9IjY4NjY1NjMyMzQyNzQxMDQyMzMiPiLgtrjgt5bgt4Pgt5Lgtprgtrrgt5og4LeE4LedIOC2p+C3iuKAjeC2u+C3kOC2muC3iuC2tOC3keC2qeC2uuC3miDgt4Dgt5rgtpzgtrog4LaV4Lax4LeR4La4IOC2uOC3nOC3hOC3nOC2reC2miDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4LaL4La04LeP4LaC4Lac4La64Lax4LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC2seC3lCDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRLZXlib2FyZExheW91dCIgbXNnaWQ9IjQ3Nzg3MzE3MDM2MDA5MDkzNDAiPiLgtrrgtq3gt5Tgtrvgt5Qg4La04LeU4LeA4La74LeUIOC2tOC3kuC2u+C3kuC3g+C3kOC2veC3kOC3g+C3iuC2uCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0S2V5Ym9hcmRMYXlvdXQiIG1zZ2lkPSI4NDgwMDE2NzcxMTM0MTc1ODc5Ij4i4La64Lat4LeU4La74LeU4La04LeU4LeA4La74LeUIOC2uOC3lOC3hOC3lOC2q+C2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3g+C2s+C3hOC3jyDgtprgt5Lgt4Pgt5Lgtq/gt48g4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NpZ25hbFBlcnNpc3RlbnRQcm9jZXNzZXMiIG1zZ2lkPSI0NTM5MDAyOTkxOTQ3Mzc2NjU5Ij4i4La64LeZ4Lav4LeU4La44LeKIOC3gOC3meC2rSBMaW51eCDgt4PgtoLgtqXgt48g4La64LeQ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2lnbmFsUGVyc2lzdGVudFByb2Nlc3NlcyIgbXNnaWQ9IjQ4OTY5OTIwNzkxODI2NDkxNDEiPiLgtrTgt4Dgtq3gt5LgtrEg4LeD4LeS4La64La94LeUIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kiDgt4Dgt5ngtq0g4LeD4LeQ4La04La64LeU4La44LeKIOC3g+C2guC2peC3jyDgtongtr3gt4rgtr3gt4Dgt5Lgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4i4La64LeZ4Lav4LeU4La4IOC3g+C3kOC2uOC3gOC3kuC2p+C2uCDgtrDgt4/gt4DgtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTI1MTg5MjcyMzI5MDg2MTM3Ij4i4La44Lat4Laa4La64LeaIOC2tOC3gOC2reC3kuC2sSDgtpHgt4Tgt5Ig4Laa4Lec4Lan4LeD4LeKIOC2seC3nOC2seC3kOC3g+C3kyDgtrTgt5Dgt4Dgtq3gt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La94LanIOC2uOC2reC2muC2uiDgt4Pgt5Pgtrjgt48g4Laa4LeS4La74LeT4La44LeZ4Lax4LeKIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtrTgtrjgt48g4Laa4LeS4La74LeT4La4IOC2uOC2nOC3kuC2seC3iiAg4La44LeZ4La44Lac4LeS4Lax4LeKIOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyc2lzdGVudEFjdGl2aXR5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDM4NDc2MDA0NzUwODI3ODI3MiI+IuC2uuC3meC2r+C3lOC2uOC2pyDgtq3gtrgg4Laa4Lec4Lan4LeD4LeKIOC2uOC2reC2muC2uiDgtq3gt5Tgtr0g4Lax4Lec4La24LeS4Laz4LeT4LeAIOC2u+C2s+C3jyDgtrTgt4Dgtq3gt4rgt4Dgt4/gtpzgt5ngtrEg4La64LeP4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4La44Lax4LeK4Lav4Lac4LeP4La44LeTIOC2muC2u+C2uOC3kuC2seC3iiDgtoXgtrHgt5ngtprgt5Tgtq3gt4og4LaL4La04LeP4LaC4Lac4La64Lax4LeKIOC3g+C2s+C3hOC3jyDgtongtq3gt5Lgtrvgt5Ig4La44Lat4Laa4La6IOC3g+C3k+C2uOC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSIxODQzODUxMjk1Mzc3MDU5MzgiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZGVsZXRlUGFja2FnZXMiIG1zZ2lkPSI3NDExNDgwMjc1MTY3MjA1MDgxIj4iQW5kcm9pZCDgtrTgt5Dgtprgt5rgtqIg4La44LeQ4Laa4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Dgt5Dgtq/gtpzgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2uOC3kOC2muC3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtongtqkg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2xlYXJBcHBVc2VyRGF0YSIgbXNnaWQ9IjI3NDEwOTE5MTg0NTg0Mjc1NiI+IuC2uuC3meC2r+C3lOC2uOC3miDgt4Dgt5ngtrHgtq3gt4og4Lav4Lat4LeK4LatIOC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NsZWFyQXBwVXNlckRhdGEiIG1zZ2lkPSI0NjI1MzIzNjg0MTI1NDU5NDg4Ij4i4La04La74LeS4LeB4LeT4La94LaaIOC2r+C2reC3iuC2rSDgt4Tgt5Lgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2muC2pyDgtongtqkg4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGVsZXRlQ2FjaGVGaWxlcyIgbXNnaWQ9IjMxMjg2NjU1NzE4Mzc0MDg2NzUiPiLgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La9IOC3hOC3kOC2ueC3kuC2veC3kiDgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZWxldGVDYWNoZUZpbGVzIiBtc2dpZD0iMzgxMjk5ODU5OTAwNjczMDE5NiI+IuC3hOC3kOC2ueC3kuC2veC3kiDgtpzgt5zgtrHgt5Qg4La44LeQ4Laa4LeT4La44LanIOC2heC3gOC3g+C2uyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldFBhY2thZ2VTaXplIiBtc2dpZD0iNzQ3MjkyMTc2ODM1Nzk4MTk4NiI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtobgtqDgtrrgtrHgtrrgt5og4LaJ4LapIOC2tOC3iuKAjeC2u+C2uOC3j+C2q+C2uiDgtrjgt5DgtrHgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9IjM5MjEwNjgxNTQ0MjA3MzgyOTYiPiLgtrrgt5ngtq/gt5Tgtrjgtprgtqcg4LaR4LeE4LeSIOC2muC3muC2reC2uiwg4Lav4Lat4LeK4LatIOC3g+C3hCDgt4Tgt5Dgtrngt5Lgtr3gt5Ig4La04LeK4oCN4La74La44LeP4LarIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iMjE5OTEyODQ4MjgyMDMwNjkyNCI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtprgt5ngt4Xgt5LgtrHgt4rgtrgg4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2luc3RhbGxQYWNrYWdlcyIgbXNnaWQ9IjU2Mjg1MzA5NzI1NDgwNzEyODQiPiLgtrHgt4Ag4LeE4LedIOC2uuC3j+C3gOC2reC3iuC2muC3j+C2veC3kuC2sSDgtprgtrvgtrEg4La94LavIEFuZHJvaWQg4La04LeQ4Laa4Lea4Lai4La64Lax4LeKIOC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4La24La94LeD4LeE4LeS4LatIOC2heC3gOC3g+C2uyDgtq3gt5PgtrHgt4rgtq/gt5Qg4LeD4La44LacIOC2seC3gCDgtrrgt5ngtq/gt5Tgtrjgt4og4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtq3gt5Lgtrbgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jbGVhckFwcENhY2hlIiBtc2dpZD0iNzQ4NzI3OTM5MTcyMzUyNjgxNSI+IuC2uuC3meC2r+C3lOC2uOC3miDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4LeE4LeQ4La54LeS4La94LeSIOC2r+C2reC3iuC2rSDgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4OTc0NjQwODcxOTQ1NDM0NTY1Ij4i4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSDgt4Tgt5Dgtrngt5Lgtr3gt5Ig4Lax4LeP4La44LeP4LeA4La94LeSIOC2reC3lOC3hSDgtofgtq3gt5Ig4Lac4Lec4Lax4LeUIOC2uOC3kOC2muC3k+C2uOC3meC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4Lan4LeQ4La24LeK4La94LanIOC2huC2oOC2uuC2seC2uiDgtrHgt5Lgtq/gt4Tgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uOC2nOC3kuC2seC3iiDgtoXgtrHgt5ngtprgt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2kuC3gOC3j+C2uuC3miDgtq/gtq3gt4rgtq0g4Lax4LeQ4LeA4LatIOC2veC2tuC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LaF4LeA4LeB4LeK4oCN4La6IOC3gOC2sSDgtrHgt5Lgt4Pgt48sIOC2kuC3gOC3j+C2uuC3miDgtobgtrvgtrjgt4rgtrfgtrog4Lat4LeA4Lat4LeKIOC3g+C3meC2uOC3kuC2seC3iiDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgtqcg4LaJ4LapIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jbGVhckFwcENhY2hlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjQ1OTQ0MTAyMTk1NjQzNjc3OSI+IuC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4LeE4LeQ4La54LeS4La94LeSIOC2seC3j+C2uOC3j+C3gOC2veC3kiDgtq3gt5Tgt4Ug4LaH4Lat4LeSIOC2nOC3nOC2seC3lCDgtrjgt5Dgtprgt5Pgtrjgt5ngtrHgt4og4La64LeZ4Lav4LeU4La44LanIOC2r+C3lOC2u+C2muC2ruC2sSDgtobgtqDgtrrgtrHgtrog4Lax4LeS4Lav4LeE4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtpLgt4Dgt4/gtrrgt5og4Lav4Lat4LeK4LatIOC2seC3kOC3gOC2rSDgtr3gtrbgt48g4Lac4LeQ4Lax4LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uiDgt4DgtrEg4Lax4LeS4LeD4LePLCDgtpLgt4Dgt4/gtrrgt5og4LaG4La74La44LeK4La34La6IOC2reC3gOC2reC3iiDgt4Pgt5ngtrjgt5LgtrHgt4og4LeD4LeS4Lav4LeU4LeA4LeT4La44LanIOC2ieC2qSDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb3ZlUGFja2FnZSIgbXNnaWQ9IjMyODk4OTAyNzE2NDU5MjE0MTEiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4La44LeK4La04Lat4LeKIOC2nOC3meC2sSDgtrrgt4/gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb3ZlUGFja2FnZSIgbXNnaWQ9IjMxOTU2MjIxNzc3ODI0NDUyNCI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgt4Pgt4Qg4La24LeP4LeE4LeS4La7IOC2uOC3j+C2sOC3iuKAjeC2uuC2uuC2seC3iuC2nOC3meC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgt5og4LeD4La44LeK4La04Lat4LeKIOC2nOC3meC2seC2uuC3j+C2uOC2pyDgt4Pgt4Qg4La64LeZ4Lav4LeU4La44LeaIOC3g+C2uOC3iuC2tOC2reC3iiDgt4Dgtr3gt5LgtrHgt4og4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC3g+C3hCDgtrbgt4/gt4Tgt5Lgtrsg4La44LeP4Law4LeK4oCN4La64La64Lax4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3miDgt4Pgtrjgt4rgtrTgtq3gt4og4Lac4LeZ4Lax4La64LeP4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZExvZ3MiIG1zZ2lkPSI2NjE1Nzc4NTQzMTk4OTY3NjE0Ij4i4LeD4LaC4LeA4Lea4Lav4LeTIOC2veC3nOC2nOC3iiDgtq/gtq3gt4rgtq0g4Laa4LeS4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZExvZ3MiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgyMDYxMzEzMjkzNDU1MTUxIj4i4La04Lav4LeK4Law4Lat4LeS4La64LeaIOC3gOC3kuC3gOC3kuC2sCDgtr3gt5zgtpzgt4og4Lac4Lec4Lax4LeUIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC3g+C3hCDgtrTgt57gtq/gt4rgtpzgtr3gt5Lgtpog4Lat4Lec4La74Lat4LeU4La74LeUIOC2h+C2reC3lOC3heC2reC3iuC3gCDgtpTgtrYg4Lan4LeQ4La24LeK4La94Lan4La64LeZ4Lax4LeKIOC2muC3lOC2uOC2muC3iiDgtprgtrvgtrHgt4rgtrHgt5ngt4Tgt5Lgtq8g4La64Lax4LeP4Lav4LeTIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeD4LeZ4LeA4LeT4La44LanIOC2uOC3meC2uuC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRMb2dzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjA2MzQzODE0MDI0MTU2MDQ0MyI+IuC2tOC2r+C3iuC2sOC2reC3kuC2uuC3miDgt4Dgt5Lgt4Dgt5LgtrAg4La94Lec4Lac4LeKIOC2nOC3nOC2seC3lCDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2tOC3lOC2r+C3iuC2nOC2veC3kuC2miDgt4Pgt4Qg4La04Lee4Lav4LeK4Lac4La94LeS4LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtofgtq3gt5Tgt4Xgtq3gt4rgt4Ag4LaU4La2IOC2r+C3lOC2u+C2muC2ruC2seC2uuC3meC2seC3iiDgtprgt5Tgtrjgtprgt4og4Laa4La74Lax4LeK4Lax4LeZ4LeE4LeS4LavIOC2uuC2seC3j+C2r+C3kyDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4Lat4Lec4La74Lat4LeU4La74LeUIOC3g+C3meC3gOC3k+C2uOC2pyDgtrjgt5ngtrrgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FueUNvZGVjRm9yUGxheWJhY2siIG1zZ2lkPSI3MTU4MDU1NTU4MjM4ODE4MTgiPiLgtrHgt5Dgt4Dgtq0g4Law4LeP4LeA4Lax4La6IOC3g+C2s+C3hOC3jyDgtpXgtrHgt5Hgtrgg4La44LeP4Law4LeK4oCN4La6IOC3gOC3kuC2muC3muC2reC2muC2uuC2muC3iiDgt4Tgt4/gt4Dgt5Lgtq3gt48g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYW55Q29kZWNGb3JQbGF5YmFjayIgbXNnaWQ9IjgyODM5MTI0ODg0MzMxODkwMTAiPiLgtrHgt5Dgt4Dgtq0g4Law4LeP4LeA4Lax4La6IOC3g+C2s+C3hOC3jyDgt4Dgt5Lgtprgt5rgtq3gtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2leC2seC3keC2uCDgt4Pgt4rgtq7gt4/gtrTgt5Lgtq0g4La44LeP4Law4LeK4oCN4La6IOC3gOC3kuC2muC3muC2reC2muC2uuC2muC3iiDgtrfgt4/gt4Dgt5Lgtq3gtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHBlcm1sYWJfbWFuYWdlQ2FDZXJ0aWZpY2F0ZXMgKDE2NzgzOTE4OTY3ODY4ODIwMTQpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcGVybWRlc2NfbWFuYWdlQ2FDZXJ0aWZpY2F0ZXMgKDQwMTU2NDQwNDcxOTY5MzcwMTQpIC0tPgorICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RpYWdub3N0aWMiIG1zZ2lkPSI4MDc2NzQzOTUzOTA4MDAwMzQyIj4iRGlhZyDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LeE4LeS4La44LeS4Laa4LeP4La74Lat4LeK4LeA4La6IOC2r+C2u+C2qyDgt4Pgtrjgt4rgtrTgtq3gt4rgt4Dgtr3gtqcg4Laa4LeS4La64LeA4LeT4La4LyDgtr3gt5Lgt4Dgt5LgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaWFnbm9zdGljIiBtc2dpZD0iNjYwODI5NTY5MjAwMjQ1MjI4MyI+IkRpYWcg4Laa4Lar4LeK4Lap4LeP4La64La44LanIOC2heC2uuC3kuC2reC3kiDgtpXgtrHgt5Hgtrgg4LeD4La44LeK4La04Lat4Laa4LeKIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgt4Pgt4Qg4La94LeS4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtovgtq/gt4/gt4Tgtrvgtqvgtrrgtprgt4og4La94LeZ4LeDIC9kZXYg4Lat4LeU4La9IOC2h+C2reC3kiDgtpzgt5zgtrHgt5QuIOC2uOC3meC2uuC2pyDgtrTgtq/gt4rgtrDgtq3gt5Ig4LeD4LeK4Lau4LeP4La64LeS4Lat4LeP4LeA4LanIOC3g+C3hCDgtobgtrvgtprgt4rgt4Lgt4/gt4Dgtqcg4La24La94La04LeR4La44LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Tgt5Dgtprgt5Lgtrrgt4/gt4Dgtprgt4og4LaH4LatLiDgtrHgt5Lgt4Lgt4rgtrTgt4/gtq/gtpog4LeE4LedIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC2u+C3lCDgt4Dgt5Lgt4Pgt5LgtrHgt4og4Lav4LeY4Lap4LeP4LaC4LacLeC3gOC3kuC3geC3muC3guC3kuC2rSDgtq/gt53gt4Ig4Lax4LeS4La74LeK4Lar4La6IOC3g+C2s+C3hOC3jyDgtrTgtrjgtqvgtprgt4og4La44LeZ4La6IOC2uuC3nOC2r+C3j+C2nOC2rSDgtrrgt5Tgtq3gt5TgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VDb21wb25lbnRTdGF0ZSIgbXNnaWQ9IjYzMzU1NzY3NzU3MTEwOTU5MzEiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4LaF4LaC4LacIOC3g+C2tuC2vSDgt4Tgt50g4LaF4La24La9IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZUNvbXBvbmVudFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4ODg3NDM1NzQwOTgyMjM3Mjk0Ij4i4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC2miDgtoXgtoLgtpzgtrrgtprgt4og4LeD4La24La9IOC2ryDgtrHgt5Dgtq/gt4rgtq8g4La64Lax4LeK4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC3kOC2r+C2nOC2reC3iiDgtqfgt5Dgtrbgt4rgtr3gtqfgt4og4LaF4LeA4LeB4LeK4oCN4La64Lat4LePIOC2heC2tuC2vSDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4LatIOC2muC3hSDgt4Tgt5DgtpouIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4LeD4LeQ4La94Laa4LeS4La94LeK4La94LeZ4Lax4LeKIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt4Ug4La64LeU4Lat4LeU4La6LCDgtrfgt4/gt4Dgt5Lgtq0g4Lax4Lec4Laa4La74LaxLCDgtoXgt4Pgt4rgtq7gt5Lgtrsg4LeE4LedIOC2heC3g+C3iuC2ruC3j+C2uuC3kiDgtq3gtq3gt4rgt4Dgtrrgtqcg4La64LeZ4Lav4LeU4La4IOC2tOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaR4La64LanIOC3hOC3kOC2muC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VDb21wb25lbnRTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4MjcyMzI0ODQ0MTY1MDU2MTUiPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LaaIOC2heC2guC2nOC2uuC2muC3iiDgt4Pgtrbgtr0g4LavIOC2seC3kOC2r+C3iuC2ryDgtrrgtrHgt4rgtrEg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeA4LeQ4Lav4Lac4Lat4LeKIOC2r+C3lOC2u+C2muC2ruC2sSDgtoXgt4Dgt4Hgt4rigI3gtrrgtq3gt48g4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4LeFIOC3hOC3kOC2mi4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgt4Pgt5Dgtr3gtprgt5Lgtr3gt4rgtr3gt5ngtrHgt4og4La34LeP4LeA4LeS4LatIOC2muC3hSDgtrrgt5Tgtq3gt5TgtrosIOC2t+C3j+C3gOC3kuC2rSDgtrHgt5zgtprgtrvgtrEsIOC2heC3g+C3iuC2ruC3kuC2uyDgt4Tgt50g4LaF4LeD4LeK4Lau4LeP4La64LeSIOC2reC2reC3iuC3gOC2uuC2pyDgtrrgt5ngtq/gt5Tgtrgg4La04Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtpHgtrrgtqcg4LeE4LeQ4Laa4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ3JhbnRSZXZva2VQZXJtaXNzaW9ucyIgbXNnaWQ9IjQ2MjczMTUzNTEwOTM1MDg3OTUiPiLgtoXgt4Dgt4Pgtrsg4La04LeK4oCN4La74Lav4LeP4Lax4La6IOC2muC3kuC2u+C3k+C2uCDgt4Tgt50g4LaF4LeE4Led4LeD4LeSIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dyYW50UmV2b2tlUGVybWlzc2lvbnMiIG1zZ2lkPSI0MDg4NjQyNjU0MDg1ODUwNjYyIj4i4La64LeZ4Lav4LeU4La44Laa4LanIOC2keC2uuC2pyDgt4Tgt50g4LaF4Lax4LeZ4Laa4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr3gtqcg4LeA4LeS4LeB4Lea4LeC4LeS4LatIOC2heC3gOC3g+C2uyDgtrTgt4rigI3gtrvgtq/gt4/gtrHgtrrgtqcg4LeE4LedIOC2heC3hOC3neC3g+C3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiwg4LaS4LeA4LeP4LanIOC2heC3gOC3g+C2uyDgtrTgt4rigI3gtrvgtq/gt4/gtrHgtrog4Lax4Lec4Laa4LeFIOC2nOC3lOC2q+C3j+C2guC2nCDgt4Dgtr3gtqcg4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC3k+C2uOC2pyDgtrjgt5ngtrog4La34LeP4LeA4LeS4Lat4LePIOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI4NDYzMTgxNjI4Njk1Mzk2MzkxIj4i4LaF4La34LeS4La74LeU4Lag4LeSIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRQcmVmZXJyZWRBcHBsaWNhdGlvbnMiIG1zZ2lkPSI0OTczOTg2NzYyMjQxNzgzNzEyIj4i4LaU4La24Lac4LeaIOC2heC2t+C3kuC2u+C3lOC2oOC3kiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC2sOC3j+C3gOC2seC2uiDgt4DgtrEg4La64LeZ4Lav4LeU4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgsIOC2tOC3gOC2reC3kuC2sSDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La94LeS4Lax4LeKIOC2r+C2reC3iuC2rSDgtpHgtprgtq3gt5Qg4Laa4LeS4La74LeT4La4LCDgtrTgt4rigI3gtrvgt53gtqngt48g4Laa4LeS4La74LeT4La4IOC3gOC3kOC2seC3kiDgtq/gt5og4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrHgt5Lgt4Hgt4rgt4Hgtrbgtq/gt4Dgtrgg4LeD4LeS4Lav4LeUIOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlU2V0dGluZ3MiIG1zZ2lkPSIyMjI2MTk1MjkwOTU1MjI0NzMwIj4i4La04Lav4LeK4Law4Lat4LeSIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9Ijc3NzU3MjM0NDE1NTg5MDcxODEiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2r+C2reC3iuC2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2lOC2tuC2nOC3miDgtrTgtq/gt4rgtrDgtq3gt5Ig4LeA4LeS4Lax4LeK4oCN4La64LeP4LeDIOC2r+C3neC3giDgtpzgt5DgtrHgt4rgt4Dgt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZWN1cmVTZXR0aW5ncyIgbXNnaWQ9IjIwNDY3NjI1MTg3NjcxODI4OCI+IuC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgtrTgtq/gt4rgtrDgtq3gt5Ig4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNlY3VyZVNldHRpbmdzIiBtc2dpZD0iODE1OTUzNTYxMzAyMDEzNzM5MSI+IuC2tOC2r+C3iuC2sOC2reC3kuC2uuC3miDgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4Lav4Lat4LeK4LatIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaL4La04LeP4LaC4Lac4La64LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtovgtrTgt4/gtoLgtpwg4LeD4Laz4LeE4LePIOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUdzZXJ2aWNlcyIgbXNnaWQ9IjIxNDk0MjY2NjQyMjYxNTIxODUiPiJHb29nbGUg4LeD4Lea4LeA4LePIOC3g+C3kuC2reC3kuC2uuC2uCDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHc2VydmljZXMiIG1zZ2lkPSIxMjg3MzA5NDM3NjM4MzgwMjI5Ij4iR29vZ2xlIOC3g+C3muC3gOC3jyDgt4Pgt5Lgtq3gt5Lgtrrgtrgg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4La34LeP4LeA4LeS4Lat4La64LanIOC2seC3nOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlY2VpdmVCb290Q29tcGxldGVkIiBtc2dpZD0iNTMxMjk2NTU2NTk4NzgwMDAyNSI+IuC2huC2u+C2uOC3iuC2t+C2uuC3muC2r+C3kyDgtrDgt4/gt4DgtrHgtrog4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczOTAzMDQ2NjQxMTY4ODA3MDQiPiLgtrTgtq/gt4rgtrDgtq3gt5Lgtrog4LaH4La74La54LeU4La4IOC2heC3gOC3g+C2seC3iiDgt4Dgt5Yg4LeA4LeE4LeP4La4IOC2uuC3meC2r+C3lOC2uCDgtobgtrvgtrjgt4rgtrcg4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LaG4La74La44LeK4La3IOC2muC3kuC2u+C3k+C2uOC2pyDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4La04La44LePIOC2muC3hSDgt4Tgt5Dgtprgt5Ig4LaF4Lat4La7IOC3g+C3kOC2uOC3gOC3kuC2p+C2uCDgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2seC3kuC3g+C3jyDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4Lan4LeQ4La24LeK4La94Lan4La64La4IOC2tOC3iuKAjeC2u+C2uOC3j+C2ryDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1MTM5NTA1ODkxMDI2MTc1MDQiPiLgtrTgtq/gt4rgtrDgtq3gt5Lgtrog4LaH4La74La54LeU4La4IOC2heC3gOC3g+C2seC3iiDgt4Dgt5Yg4LeA4LeE4LeP4La4IOC2uuC3meC2r+C3lOC2uCDgtobgtrvgtrjgt4rgtrcg4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaG4La74La44LeK4La3IOC2muC3kuC2u+C3k+C2uOC2pyDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4La04La44LePIOC2muC3hSDgt4Tgt5Dgtprgt5Ig4LaF4Lat4La7IOC3g+C3kOC2uOC3gOC3kuC2p+C2uCDgtrDgt4/gt4DgtrHgtrog4LeA4LaxIOC2seC3kuC3g+C3jyDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4Lav4LeU4La74Laa4Lau4Lax4La64Lea4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kuC2reC3iuC3gOC2uiDgtrTgt4rigI3gtrvgtrjgt4/gtq8g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJvYWRjYXN0U3RpY2t5IiBtc2dpZD0iNzkxOTEyNjM3MjYwNjg4MTYxNCI+IuC2tuC3kOC2s+C3lOC2q+C3lCDgt4Dgt5Lgtprgt4/gt4HgtrHgtrog4La64LeQ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3NzQ5NzYwNDk0Mzk5OTE1NjUxIj4i4La04LeK4oCN4La74Lag4LeP4La74Lar4La64LanIOC2tOC3g+C3lOC3gOC2ryDgtrTgt4Dgtq3gt5LgtrEsIOC2tOC3iuKAjeC2u+C2oOC3j+C2u+C2q+C2uuC2seC3iiDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC3kOC2qeC3kuC2tOC3lOC2uyDgtrjgtq3gtprgtrog4La34LeP4LeA4LeS4Lat4La6IOC3hOC3muC2reC3lCDgtprgt5zgtqcsIOC2heC2sOC3kuC2miDgtrfgt4/gt4Dgt5Lgtq3gtrog4La44Laf4LeS4Lax4LeKIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtrTgtrjgt48g4Laa4LeS4La74LeT4La4IOC3hOC3nSDgtoXgt4Pgt4rgtq7gt5Lgtrsg4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4i4La04LeK4oCN4La74Lag4LeP4La74Lar4La64LanIOC2tOC3g+C3lOC3gOC2ryDgtrTgt4Dgtq3gt5LgtrEsIOC2tOC3iuKAjeC2u+C2oOC3j+C2u+C2q+C2uuC2seC3iiDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3gOC3kOC2qeC3kuC2tOC3lOC2uyDgtrjgtq3gtprgtrog4La34LeP4LeA4LeS4Lat4La6IOC3hOC3muC2reC3lCDgtprgt5zgtqcsIOC2heC2sOC3kuC2miDgtrfgt4/gt4Dgt5Lgtq3gtrog4La44Laf4LeS4Lax4LeKIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtrTgtrjgt48g4Laa4LeS4La74LeT4La4IOC3hOC3nSDgtoXgt4Pgt4rgtq7gt5Lgtrsg4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDb250YWN0cyIgbXNnaWQ9IjgzNDg0ODExMzE4OTk4ODYxMzEiPiLgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTI5NDg2Njg1Njk0MTE0OTYzOSI+IuC3g+C2s+C3hOC2seC3iiDgtrTgt5Tgtq/gt4rgtpzgtr3gtrrgtrHgt4og4LeE4LanIOC2lOC2tiDgtofgtrjgtq3gt5Tgtrjgt4og4Lac4Lat4LeKLCDgtoot4Lat4LeQ4La04LeQ4La94LeKLCDgt4Tgt50gIOC2heC2seC3meC2muC3lOC2reC3iiDgtobgtprgt4/gtrsg4LeA4La94LeS4Lax4LeKIOC3g+C2seC3iuC2seC3kuC3gOC3muC2r+C2seC2uiDgtprgtrvgtpzgtq3gt4og4LeD4LaC4Lab4LeK4oCN4La64Lat4LavIOC2h+C2reC3lOC3heC3lOC3gCwg4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtpzgtrbgtqngt4/gt4Dgt5Mg4LaH4Lat4LeSIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtrTgt5Lgt4Xgt5LgtrbgtrMg4Lav4Lat4LeK4LatIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtrjgtp/gt5LgtrHgt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2lOC2tuC2nOC3miDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4La04LeS4LeF4LeS4La24LazIOC2r+C2reC3iuC2rSDgt4Pgt5Tgtrvgt5Dgtprgt5Pgtrjgtqcg4LaJ4LapIOC2veC2tuC3jyDgtq/gt5ngtrEg4LaF4Lat4La7LCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtpTgtrYg4Lax4Lec4Lav4LeQ4Lax4LeU4LeA4Lat4LeK4LeA4La4IOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtq/gtq3gt4rgtq0g4La24LeZ4Lav4LePIOC2nOC3kOC2seC3k+C2uOC2pyDgtongtqkg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0NDA2NTQxNTI0NTczMDA2NjIiPiLgtrHgt5Lgtrrgtrjgt5Lgtq0g4La04LeU4Lav4LeK4Lac4La94La64Lax4LeKIOC3g+C2uOC2nCDgtpTgtrYg4LaH4La44Lat4LeULCDgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2muC3hSDgt4Tgt50g4LeA4LeZ4Lax4Lat4LeKIOC2huC2muC3j+C2u+C2uuC2muC3kuC2seC3iiDgt4PgtrHgt4rgtrHgt5Lgt4Dgt5rgtq/gtrHgtrog4Laa4LeFIOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2reC2uiDgtofgtq3gt5Tgtr3gtq3gt4og4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtobgtqDgtrrgtrHgtrog4Laa4La74LaxIOC2veC2ryDgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2nOC3kOC2sSDgtq/gtq3gt4rgtq0g4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2r+C2reC3iuC2rSDgtovgtrTgt4Pgt4rgtq4g4Laa4LeS4La74LeT4La44LanIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrEg4LaF4Lat4La7IOC2lOC2tuC2nOC3miDgtq/gt5DgtrHgt5Tgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2r+C2reC3iuC2rSDgtrbgt5ngtq/gt4/gtpzgt5DgtrHgt5Pgtrgg4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ29udGFjdHMiIG1zZ2lkPSI1MTA3NDkyMDg2NDE2NzkzNTQ0Ij4i4LaU4La24Lac4LeaIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDb250YWN0cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODk3MjQzOTMyNTIxOTUzNjAyIj4i4Lax4LeS4La64La44LeS4LatIOC2tOC3lOC2r+C3iuC2nOC2veC2uuC2seC3iuC2pyDgtpTgtrYg4LaH4La44Lat4LeWLCDgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2muC3hSDgt4Tgt50g4LaH4La44Lat4LeU4La44LeKIOC2muC3hSDgt4PgtoLgtpvgt4rigI3gtrrgt4/gtq0g4LaH4Lat4LeU4La94Lat4LeKIOC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LaG4Lag4La64Lax4La6IOC2muC2u+C2sSDgtr3gtq8g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePICjgtr3gt5LgtrTgt5LgtrEpIOC2r+C2reC3iuC2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La64LeZ4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4Lav4Lat4LeK4LatIOC2uOC3kOC2muC3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1ODk4NjkyMjQ2MjUxNjM1NTgiPiLgt4PgtrPgt4TgtrHgt4og4La04LeU4Lav4LeK4Lac4La94La64Lax4LeK4LanIOC2lOC2tiDgtofgtrjgtq3gt5YsIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4og4Laa4LeFIOC3hOC3nSDgtofgtrjgtq3gt5Tgtrjgt4og4Laa4LeFIOC3g+C2guC2m+C3iuKAjeC2uuC3j+C2sSDgtofgtq3gt5Tgtr3gtq3gt4og4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtobgtqDgtrrgtrHgtrog4Laa4La74LaxIOC2veC2ryDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48gKOC2veC3kuC2tOC3kuC2sSkg4Lav4Lat4LeK4LatIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrrgt5ngtrHgt4og4La64LeZ4Lav4LeU4La44LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgtq/gtq3gt4rgtq0g4La44LeQ4Laa4LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsbExvZyIgbXNnaWQ9IjM0NzgxMzMxODQ2MjQxMDI3MzkiPiLgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4Lac4La6IOC2muC3kuC2uuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNzAwNjQ1MTg0ODcwNzYwMjg1Ij4i4La04LeQ4La44LeS4Lar4LeZ4LaxIOC3g+C3hCDgtrTgt5Lgtqfgt4DgtrEg4LaH4La44Lat4LeU4La44LeKIOC2nOC3kOC2sSDgtq/gtq3gt4rgtq0g4LaH4Lat4LeU4LeF4Lat4LeKLCDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpwg4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nCDgtq/gtq3gt4rgtq0g4LeD4LeU4La74Laa4LeK4LeC4LeS4LatIOC2muC3kuC2u+C3k+C2uOC2pyDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2veC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSIOC3g+C3hCDgtpTgtrbgtpzgt5og4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4LacIOC2r+C2reC3iuC2rSDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2tuC3meC2r+C3jyDgtpzgt5DgtrHgt5Pgtrgg4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3Nzc3MjU3OTY4MTMyMTcyNDQiPiLgtr3gt5Dgtrbgt5ngtrEg4LeD4LeEIOC2tOC3kuC2p+C3gOC2sSDgtofgtrjgtq3gt5Tgtrjgt4og4La04LeS4LeF4LeS4La24LazIOC2r+C2reC3iuC2rSDgtofgtq3gt5Tgt4Xgtq3gt4rgt4Ag4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4Lac4LeKIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtpTgtrbgtpzgt5og4LaH4La44Lat4LeU4La44LeKIOC2veC3nOC2nOC3iiDgtq/gtq3gt4rgtq0g4LaL4La04LeD4LeK4LauIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4Lap4Lav4LeZ4LaxIOC2heC2reC2uyDgtpTgtrbgtpzgt5og4LaF4Lax4LeU4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4Lac4LeKIOC2r+C2reC3iuC2rSDgtrbgt5ngtq/gt4/gtpzgt5DgtrHgt5Pgtrgg4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsbExvZyIgbXNnaWQ9Ijg1NTIwNDU2NjQ3NDM0OTkzNTQiPiLgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4Lac4La6IOC2veC3kuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY2MTgwNjA2MjI3NDExOTI0NSI+IuC2veC3kOC2tuC3meC2sSDgtofgtrjgtq3gt5Tgtrjgt4og4LeD4LeEIOC2tOC3kuC2p+C3gOC2sSDgtofgtrjgtq3gt5Tgtrjgt4og4Lav4Lat4LeK4LatIOC2h+C2reC3lOC3heC2reC3iuC3gCDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpzgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC2h+C2uOC2reC3lOC2uOC3iiDgtr3gt5zgtpzgtrog4La44LeQ4Laa4LeT4La44LanIOC3hOC3nSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeZ4La6IOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5ngtrvgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjgzOTQxNzM2MzUyNzg3ODQyIj4i4La04LeQ4La44LeS4Lar4LeZ4LaxIOC3g+C3hCDgtrTgt5Lgtqfgt4Dgt5ngtrEg4LaH4La44Lat4LeU4La44LeKIOC2r+C2reC3iuC2rSDgtofgtq3gt5Tgt4Xgt5Tgt4Ag4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4Lac4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tuC2nOC3miDgtofgtrjgtq3gt5Tgtrjgt4og4La94Lec4Lac4La6IOC2uOC3kOC2muC3k+C2uOC2pyDgt4Tgt50g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4La9IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRQcm9maWxlIiBtc2dpZD0iNDcwMTg4OTg1MjYxMjcxNjY3OCI+IuC2lOC2tuC2nOC3miDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4La04LatIOC2muC3kuC2uuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ2MjQ3NTE1MTg0OTg4ODg0OCI+IuC2lOC2tuC2nOC3miDgtrHgtrgg4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtobgtq/gt5Mg4LaU4La24Lac4LeaIOC2i+C2tOC3j+C2guC2nOC2uuC3miDgtpzgtrbgtqngt48g4LeA4LeTIOC2h+C2reC3kiDgtrTgt5Tgtq/gt4rgtpzgtr3gt5Lgtpog4La04LeQ4Lat4LeS4Laa4LapIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC3hOC3kiDgtq3gt5rgtrvgt5Tgtrgg4La64LeZ4Lav4LeU4La44LanIOC2lOC2tuC3gCDgt4TgtrPgt5TgtrHgt48g4Lac4LeQ4Lax4LeT4La44LanIOC3hOC3kOC2muC3kiDgt4DgtrEg4La24LeAIOC3g+C3hCDgtpTgtrbgtpzgt5og4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtoXgtrHgt5ngtprgt4og4LaF4La64LanIOC2uuC3kOC3gOC3k+C2uOC2pyDgtq8g4LeE4LeQ4Laa4LeSIOC3gOC3k+C2uOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlUHJvZmlsZSIgbXNnaWQ9IjkwNzc5MzYyODc3NzM5NzY0MyI+IuC2lOC2tuC2nOC3miDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48g4La04LatIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVByb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NTUyMDg0Mjk0NTk4NDY1ODk5Ij4i4LaU4La24Lac4LeaIOC2seC2uCDgt4Pgt4Qg4LeD4La44LeK4La24Lax4LeK4Law4Lat4LePIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Dgt5DgtrHgt5Ig4LaU4La24Lac4LeaIOC2i+C2tOC3j+C2guC2nOC2uuC3miDgtobgtqDgtrrgtrHgtrog4Laa4La74LaxIOC2veC2ryDgtrTgt5Tgtq/gt4rgtpzgtr3gt5Lgtpog4La04LeQ4Lat4LeS4Laa4LapIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC3hOC3nSDgtpHgtprgtq3gt5Qg4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrjgtpzgt5LgtrHgt4og4La64LeZ4Lav4LeU4La44LanIOC2lOC2tuC3gCDgt4TgtrPgt5TgtrHgt48g4Lac4LatIOC3hOC3kOC2muC3kiDgtoXgtq3gtrsg4LaF4Lax4LeZ4Laa4LeKIOC2heC2uuC2pyDgtpTgtrbgtpzgt5og4La04LeQ4Lat4LeS4Laa4LapIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrrgt5Dgt4Dgt5Lgtrog4LeE4LeQ4Laa4LeSIOC2tuC3gCDgtprgt5Lgtrrgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTI2ODkyMDk1NjE1MjQxOTE3MCI+IuC2lOC2tuC2nOC3miDgt4Pgtrjgt4/gtqIg4La04LeK4oCN4La74LeA4LeP4LeE4La6IOC2muC3kuC2uuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjU1NzA2MDI3MTcyMDUwODcyIj4i4LaU4La24Lac4LeaIOC3g+C3hCDgtpTgtrbgtpzgt5og4La64LeE4LeF4LeU4LeA4Lax4LeK4Lac4LeaIOC3g+C2uOC3j+C2oiDgtrrgt4/gt4Dgtq3gt4rgtprgt4/gtr3gt5PgtrHgtrrgtrHgt4og4LeA4LeZ4LatIOC2tOC3kuC3gOC3kuC3g+C3k+C2uOC2pyDgt4Tgt50g4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4Lat4Lec4La74Lat4LeU4La74LeUIOC2tuC3meC2r+C3jyDgtpzgt5DgtrHgt5Pgtrjgt5og4Lav4LeTIOC3g+C3kOC2veC2muC3kuC2veC3kuC2uOC2reC3iiDgt4DgtrHgt4rgtrEgLS0g4LeA4LeS4LeB4LeK4LeA4LeP4LeD4La64Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgt4Pgtrjgt4/gtqIg4Lai4LeP4La94LeA4La9IOC2lOC2tuC2nOC3miDgt4Pgt4Qg4LaU4La24Lac4LeaIOC2uuC3hOC3heC3lOC3gOC2seC3iiDgtoXgtq3gtrsg4LeD4Lax4LeK4Lax4LeS4LeA4Lea4Lav4LaxIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrjgt5ngtrjgtpzgt5LgtrHgt4og4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIOC3g+C2p+C3hOC2sTog4LeD4LeS4La64La94LeUIOC3g+C2uOC3j+C2oiDgtqLgt4/gtr3gt4Dgtr0g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtrbgtr0g4Lax4Lec4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTb2NpYWxTdHJlYW0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNTA0MTc5MjIyNDkzMjM1NjQ1Ij4i4LaU4La24Lac4LeaIOC3g+C2uOC3j+C2oiDgtrTgt4rigI3gtrvgt4Dgt4/gt4Tgtrog4LeA4LeZ4LatIOC2veC3kuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlU29jaWFsU3RyZWFtIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzA4NjU1NzU1MjIwNDExNDg0OSI+IuC2lOC2tuC2nOC3miDgtrrgt4Tgt4Xgt5Tgt4DgtrHgt4rgtpzgt5og4LeD4La44LeP4LaiIOC2uuC3j+C3gOC2reC3iuC2muC3j+C2veC3k+C2seC2uuC2seC3iiDgtrTgt5ngtrHgt4rgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtrbgt5ngtq/gt48g4Lac4LeQ4Lax4LeT4La44Lea4Lav4LeTIOC3g+C3kOC2veC2muC3kuC2veC3kuC2uOC2reC3iiDgt4DgtrHgt4rgtrEgLS0g4La64LeE4LeF4LeU4LeA4LeZ4Laa4LeK4Lac4LeZ4Lax4LeKIOC2tOC3kOC2uOC3kuC2q+C3meC2sSDgtr3gt5ngt4Mg4La04Lar4LeS4LeA4LeS4LapIOC2seC3kuC2tOC2r+C3gOC3k+C2uOC2pyDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C2p+C3hOC2sSA6IOC3g+C3kuC2uuC2veC3lCDgt4Pgtrjgt4/gtqIg4Lai4LeP4La9IOC3g+C2s+C3hOC3jyDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2tuC2vSDgtrHgt5zgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkQ2FsZW5kYXIiIG1zZ2lkPSI1OTcyNzI3NTYwMjU3NjEyMzk4Ij4i4Lav4LeS4LaxIOC2r+C2u+C3iuC3geC2seC2uuC3miDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4og4LeD4LeEIOC2u+C3hOC3g+C3kuC2nOC2rSDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4Laa4LeS4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MjE2NDYyMDQ5MDU3NjU4NzIzIj4i4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtq3gt5Tgtr0g4Lac4La24Lap4LePICDgtprgtrsg4LaH4Lat4LeSIOC2uOC3kuC2reC3lOC2u+C2seC3iuC2nOC3miDgt4Pgt4Qg4LaR4Laa4LeK4LeAIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC2u+C2seC3iuC2seC2seC3iuC2nOC3miDgtq8g4LaH4Lat4LeU4LeF4LeU4LeAIOC3g+C3kuC2uuC2veC3lOC2uCDgtq/gt5LgtrEg4Lav4La74LeK4LeB4LaxIOC3g+C3kuC2r+C3iuC2sOC3kiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uiDgtrvgt4Tgt4Pgt4rigI3gtrrgtrfgt4/gt4Dgtrog4LeE4LedIOC3g+C2guC3gOC3muC2r+C3k+C2reC3j+C3gOC2uiDgtrHgt5zgt4Pgtr3gtprgt48g4LaU4La24Lac4LeaIOC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrEg4Lav4Lat4LeK4LatIOC2tuC3meC2r+C3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4LeE4LedIOC3g+C3lOC2u+C3kOC2muC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NDM0NTQ4NjgyNDcwODUxNTgzIj4i4La64LeE4LeF4LeU4LeA4Lax4LeKIOC3g+C3hCDgt4Pgtrjgtprgt4/gtr3gt5LgtrHgtrrgtrHgt4og4LaH4Lat4LeU4La94Lat4LeKIOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4LaG4Lag4La64Lax4La6IOC2muC2u+C2sSDgtr3gtq8g4LeD4LeS4La64La94LeUIOC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrEg4LeD4LeS4Lav4LeU4LeA4LeT4La44LeKIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeA4LeS4LeB4LeK4LeA4LeP4LeD4La64Laa4LeS4Lax4LeKIOC3hOC3nSDgt4PgtoLgt4Dgt5rgtq/gt5Pgtq3gt4/gt4Dgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2lOC2tuC2nOC3miDgtq/gt5LgtrEg4Lav4La74LeK4LeB4LaxIOC2r+C2reC3iuC2rSDgtrbgt5ngtq/gt48g4Lac4LeQ4Lax4LeT4La44LanIOC3hOC3nSDgtovgtrTgt4Pgt4rgtq4g4Laa4LeS4La74LeT4La44LanIOC2uOC3meC2uOC2nOC3kuC2seC3iiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsZW5kYXIiIG1zZ2lkPSI4NDM4ODc0NzU1MTkzODI1NjQ3Ij4i4Lav4LeS4LaxIOC2r+C2u+C3iuC3geC2sSDgt4Pgt5Lgtq/gt4rgtrDgt5Ig4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uCDgt4Tgt50g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2muC3iiDgt4Pgt5Lgtq/gt5Tgtprgtrsg4LeE4LeS4La44LeS4Laa4La74LeU4Lac4LeaIOC2r+C3kOC2seC3k+C2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LaF4La44LeU4Lat4LeK4Lat4Lax4LeK4LanIOC2ii3gtq3gt5DgtrTgt5Hgtr3gtprgt4og4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjY3OTAzNTUyMDExMzY2ODUyOCI+IuC2uuC3hOC3heC3lOC3gOC2seC3iiDgt4Tgt50g4LaR4Laa4LanLeC3gOC3kOC2qeC2muC2u+C2seC3iuC2seC2seC3iiDgtofgtq3gt5Tgt4Xgtq3gt4rgt4Ag4LaU4La24LanIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeFIOC3hOC3kOC2muC3kiDgt4Pgt5Lgtq/gt4rgtrDgt5Ig4LaR4Laa4Lat4LeUIOC2muC3kuC2u+C3k+C2uOC2pywg4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pywg4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La44Laf4LeS4Lax4LeKIOC2r+C3kuC2sSDgtq/gtrvgt4rgt4HgtrEg4LeE4LeS4La44LeS4Laa4La74LeU4LeA4Lax4LeK4Lac4LeZ4Lax4LeKIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrrgt4DgtrEg4La04La74LeS4Lav4LeSIOC2uOC3meC2seC3iiDgtrjgt4Dgt4/gtrTgt5Hgtrjgtqcg4LeE4LedIOC3hOC3kuC2uOC3kuC2muC2u+C3lOC2nOC3miDgtoXgtrHgt5Tgtq/gt5DgtrHgt5Tgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC3g+C3kuC2r+C3iuC2sOC3kiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4La94LeQ4La24LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMzI0NDY5NDk2MzI3MjQ5Mzc2Ij4i4LaU4La24Lac4LeaIOC2uuC3hOC3heC3lOC3gOC2seC3iiDgt4Tgt50g4LeD4La44Laa4LeP4La94LeT4Lax4La64Lax4LeKIOC2h+C2reC3lOC3heC2reC3iiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2lOC2tuC2pyDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeFIOC3hOC3kOC2muC3kiDgt4Pgt5Lgtq/gt5Qg4LeA4LeT4La44LeKIOC2keC2muC2reC3lCDgtprgt5Lgtrvgt5PgtrjgtqcsIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5PgtrjgtqcsIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uOC2nOC3kuC2seC3iiDgtq/gt5LgtrEg4Lav4La74LeK4LeB4LaxIOC3hOC3kuC2uOC3kuC2muC2u+C3lOC3gOC2seC3iuC2nOC3meC2seC3iiDgtrTgt5Dgtrjgt5Lgtqvgt5ngtrEg4LeD4LeaIOC2tOC3meC2seC3meC2sSDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La64LeQ4LeA4LeT4La44LanIOC3hOC3nSDgt4Tgt5Lgtrjgt5Lgtprgtrvgt5Tgtpzgt5og4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgt4Pgt5Lgtq/gt5Tgt4Dgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc01vY2tMb2NhdGlvbiIgbXNnaWQ9Ijg2ODgzMzQ5NzQwMzY4MjMzMzAiPiLgtrTgtrvgt5Pgtprgt4rgt4Lgtqsg4LeD4Laz4LeE4LePIOC2huC2r+C2u+C3iuC3gSDgt4Pgt4rgtq7gt4/gtrEg4La44LeW4La94LeP4LeB4LeK4oCN4La7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTW9ja0xvY2F0aW9uIiBtc2dpZD0iNTgwODcxMTAzOTQ4MjA1MTgyNCI+IuC2tOC2u+C3k+C2muC3iuC3guC2q+C2uuC2pyDgt4Dgt4rigI3gtrrgt4/gtqIg4LeD4LeK4Lau4LeP4LaxIOC2uOC3luC2veC3j+C3geC3iuKAjeC2uyDgt4Pgt4/gtq/gtrHgt4rgtrEg4LeE4LedIOC2seC3gCDgt4Pgt4rgtq7gt4/gtrEg4LeD4LeQ4La04La64LeU4La44LeK4Laa4La74LeU4LeA4LeZ4Laa4LeUIOC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgtrvgtrHgt4rgtrEuIEdQUyDgt4Tgt50g4LeD4LeK4Lau4LeP4LaxIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lOC3gOC2seC3iiDgtobgtq/gt5Mg4LeA4LeZ4Lax4Lat4LeKIOC3g+C3iuC2ruC3j+C2sSDgtrjgt5bgtr3gt4/gt4Hgt4rigI3gtrsg4LeA4LeS4LeD4LeS4Lax4LeKIOC2veC2tuC3jyDgtq/gt5ngtrEg4LeD4LeK4Lau4LeP4Lax4La6IOC3g+C3hC/gt4Tgt50g4Lat4Lat4LeK4LeA4La6IOC2tOC3iuKAjeC2u+C2reC3kuC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2uOC3meC2uiDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTG9jYXRpb25FeHRyYUNvbW1hbmRzIiBtc2dpZD0iMjgzNjMwODA3NjcyMDU1MzgzNyI+IuC2heC2uOC2reC2uyDgt4Pgt4rgtq7gt4/gtrEg4LeD4LeQ4La04La64LeU4La44LeK4Laa4La74LeUIOC3gOC3kuC2sOC3j+C2sSDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0xvY2F0aW9uRXh0cmFDb21tYW5kcyIgbXNnaWQ9IjU5NDUxNjY2NDIzMzU4MDA3NjMiPiLgtoXgtrjgtq3gtrsg4LeD4LeK4Lau4LeP4LaxIOC3g+C3kOC2tOC2uuC3lOC2uOC3iuC2muC2u+C3lCDgt4Dgt5LgtrDgt4/gtrEg4LeA4LeZ4LatIOC2tOC3kuC3gOC3kuC3g+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4gR1BTIOC3hOC3nSDgt4Dgt5ngtrHgtq3gt4og4LeD4LeK4Lau4LeP4LaxIOC2uOC3luC2veC3j+C3geC3iuKAjeC2uyDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Ig4LeA4LeZ4LatIOC2tuC3j+C2sOC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44LeZ4La6IOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnN0YWxsTG9jYXRpb25Qcm92aWRlciIgbXNnaWQ9IjY1NzgxMDExOTk4MjUxOTM4NzMiPiLgt4Pgt4rgtq7gt4/gtrEg4LeD4LeQ4La04La64LeU4La44LeK4Laa4La74LeU4LeA4LeZ4Laa4LeUIOC3g+C3iuC2ruC3j+C2tOC2seC2uuC2pyDgtoXgt4Dgt4Pgtrvgtrog4Lav4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaW5zdGFsbExvY2F0aW9uUHJvdmlkZXIiIG1zZ2lkPSI5MDY2MTQ2MTIwNDcwNTkxNTA5Ij4i4La04La74LeT4Laa4LeK4LeC4Lar4La64LanIOC3gOC3iuKAjeC2uuC3j+C2oiDgt4Pgt4rgtq7gt4/gtrEg4La44LeW4La94LeP4LeB4LeK4oCN4La7IOC3g+C3j+C2r+C2seC3iuC2sSDgt4Tgt50g4Lax4LeAIOC3g+C3iuC2ruC3j+C2sSDgt4Pgt5DgtrTgtrrgt5Tgtrjgt4rgtprgtrvgt5Tgt4Dgt5ngtprgt5Qg4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC2u+C2seC3iuC2sS4gR1BTIOC3hOC3nSDgt4Pgt4rgtq7gt4/gtrEg4LeD4LeQ4La04La64LeU4La44LeK4Laa4La74LeU4LeA4Lax4LeKIOC2huC2r+C3kyDgt4Dgt5ngtrHgtq3gt4og4LeD4LeK4Lau4LeP4LaxIOC2uOC3luC2veC3j+C3geC3iuKAjeC2uyDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La94La24LePIOC2r+C3meC2sSDgt4Pgt4rgtq7gt4/gtrHgtrog4LeD4LeEL+C3hOC3nSDgtq3gtq3gt4rgtq3gt4rgt4Dgtrog4La04LeK4oCN4La74Lat4LeS4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4La44LeZ4La6IOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSIxMTkxODk4MDYxOTY1MjczMzcyIj4i4Lax4LeS4LeA4LeQ4La74Lav4LeSIOC3g+C3iuC2ruC3j+C2seC2uiAoR1BTIOC3g+C3hCDgtqLgt4/gtr3gtrog4La04Lav4Lax4La44LeKIOC2muC2u+C2nOC2reC3iikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4i4Lac4Led4La94LeT4La6IOC3g+C3iuC2ruC3j+C2seC3k+C2uiDgtrTgtq/gt4rgtrDgtq3gt5LgtrogKEdQUykg4LeE4LedIOC3g+C3meC2veC3iiDgtprgt5Tgt4Xgt5Tgtqvgt5Qg4LeD4LeEIFdpLUZpIOC3gOC3kOC2seC3kiDgtqLgt4/gtr0g4LeD4LeK4Lau4LeP4Lax4LeT4La6IOC2tOC3iuKAjeC2u+C2t+C3gCDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaU4La24Lac4LeaIOC2seC3kuC3gOC3kOC2u+C2r+C3kiDgt4Pgt4rgtq7gt4/gtrHgtrog4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uCDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4La94LanIOC3g+C3iuC2ruC3j+C2seC3k+C2uiDgt4Pgt5rgt4Dgt48g4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyAg4LaS4LeA4LePIOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Dgt5Lgtrog4La64LeU4Lat4LeUIOC3gOC3mi4g4LaU4La24LeAIOC3g+C3nOC2uuC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La74LaxIOC2heC2reC2uyDgtoXgtrjgtq3gtrsg4La24LeQ4Lan4La74LeSIOC2tuC2veC2uuC2muC3iuC2ryDgtrTgtrvgt5Lgtrfgt53gtqLgtrHgtrog4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSI0ODg3ODk1MzYyMzU0MjM5NjI4Ij4i4LaG4LeD4Lax4LeK4Lax4Lat4La4IOC3g+C3iuC2ruC3j+C2seC2uiAo4Lai4LeP4La94La6LeC2tOC3j+C2r+C2miDgt4Dgt5YpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzQ29hcnNlTG9jYXRpb24iIG1zZ2lkPSIyNTM4MjAwMTg0MzczMzAyMjk1Ij4i4LaU4La24Lac4LeaIOC2r+C3hSDgt4Pgt4rgtq7gt4/gtrHgtrog4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4PgtrHgt4rgtrHgt5rgt4Dgt5rgtq/gtrEg4Laa4LeU4LeF4LeU4Lar4LeUIOC3g+C3hCBXaS1GaSDgtobgtq/gt5Mg4Lai4LeP4La9IOC3g+C3iuC2ruC3j+C2sSDgtrjgt5bgtr3gt4/gt4Hgt4rigI3gtrsg4La34LeP4LeA4LeS4LatIOC2muC2u+C2sSDgt4Pgt4rgtq7gt4/gtrEg4LeD4Lea4LeA4LePIOC3gOC3kuC3g+C3kuC2seC3iiDgtrjgt5ngtrgg4LeD4LeK4Lau4LeP4Lax4La6IOC3gOC3iuKAjeC2uuC3lOC2reC3iuC2tOC2seC3iuC2sSDgtprgtrsg4LaH4LatLiDgtrrgt5ngtq/gt5Tgtrjgtqcg4La34LeP4LeA4LeS4Lat4La6IOC3g+C2s+C3hOC3jyDgtrjgt5ngtrgg4LeD4LeK4Lau4LeP4LaxIOC3g+C3muC3gOC3jyDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4LeFIOC2uuC3lOC2reC3lCDgtoXgtq3gtrsg4LaU4La24Lac4LeaIOC2i+C2tOC3j+C2guC2nOC2uiDgt4PgtrPgt4Tgt48g4La04LeQ4LeA4Lat4LeS4La6IOC2uuC3lOC2reC3lOC2ui4g4LaU4La2IOC3g+C3kuC2p+C3kuC2sSDgtq3gt5DgtrEg4Lav4LeF4LeAIOC3hOC2s+C3lOC2seC3jyDgtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LeKIOC3gOC2veC2pyDgtrjgt5ngtrog4La34LeP4LeA4LeS4LatIOC2muC3hSDgt4Tgt5Dgtprgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjIzNjM5Njk2NDE3OTIzODg5NDciPiJTdXJmYWNlRmxpbmdlciDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iU3VyZmFjZUZsaW5nZXIg4La04LeE4La9IOC2uOC2p+C3iuC2p+C2uOC3miDgt4Dgt5Lgt4Hgt5rgt4Lgt4/gtoLgtpwg4La34LeP4LeA4LeS4Lat4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+IuC2u+C3j+C2uOC3lCDgtoXgtrHgt4rgtq3gtrvgt4/gtqDgtrog4Laa4LeS4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuC2u+C3j+C2uOC3lCDgtoXgtrHgt4rgtq3gtrvgt4/gtqDgtrrgtrHgtrrgt5ngtrHgt4og4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La64Lax4LeKIOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJJbnB1dEZsaW5nZXIg4LeA4LeZ4LatIOC2tOC3kuC3gOC3kuC3g+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJJbnB1dEZsaW5nZXIg4La04LeE4La9IOC2uOC2p+C3iuC2p+C2uOC3miDgt4Dgt5Lgt4Hgt5rgt4Lgt4/gtoLgtpwg4La34LeP4LeA4LeS4Lat4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4iV2lmaSDgt4PgtoLgtq/gtrvgt4rgt4Hgtpog4LeA4LeS4Lax4LeK4oCN4La64LeP4LeDIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IuC3gOC3kuC2seC3iuKAjeC2uuC3j+C3gyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeEIFdpZmkg4LeD4LaC4Lav4La74LeK4LeB4LaaIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4iV2lmaSDgt4PgtoLgtq/gtrvgt4rgt4Hgtpog4La04LeP4La94Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iNDU0MzkxMjI5MjY4MTgyNjk4NiI+IldpZmkg4LeD4LaC4Lav4La74LeK4LeB4Laa4La64LeaIOC2tOC3hOC3hSDgtrjgtqfgt4rgtqfgtrjgt5og4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIOC2tOC3j+C2veC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjY4NTcxMzQ0OTg0MDIzNDY3MDgiPiLgt4Hgtrbgt4rgtq8g4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La6IOC2nOC3iuKAjeC2u+C3hOC2q+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjYyMTA1OTc3NTQyMTIyMDg4NTMiPiLgtrrgt5ngtq/gt5Tgtrjgtqcg4LeB4La24LeK4LavIOC2tOC3iuKAjeC2u+C2reC3kuC2r+C3j+C2seC2uiDgtpzgt4rigI3gtrvgt4Tgtqvgtrog4Laa4La7IOC3hOC2u+C3gOC3jyDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LaJ4LapIOC2r+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjIyNDY4Mjg3NzM1ODkwOTQwMjMiPiLgt4Dgt5Pgtqngt5Lgtrrgt50g4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMzU5NDgxNjU4MDM0MTQ5ODYwIj4i4La64LeZ4Lav4LeU4La44LanIOC3gOC3k+C2qeC3kuC2uuC3nSDgtrTgt4rigI3gtrvgtq3gt5Lgtq/gt4/gtrHgtrog4Lac4LeK4oCN4La74LeE4Lar4La6IOC2muC2uyDgt4Tgtrvgt4Dgt48g4La64LeQ4LeA4LeT4La44LanIOC2ieC2qSDgtq/gt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlU2VjdXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSI3ODE1Mzk4OTY5MzAzMzgyMDE2Ij4i4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC3gOC3k+C2qeC3kuC2uuC3nSDgtrTgt4rigI3gtrvgtq3gt5Lgtq/gt4/gtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlU2VjdXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIyNzc5NzkzMDY0NzA5MzUwMjg5Ij4i4La64LeZ4Lav4LeU4La44LanIOC2huC2u+C2muC3iuKAjeC3guC3kuC2rSDgt4Dgt5Pgtqngt5Lgtrrgt50g4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La6IOC2nOC3iuKAjeC2u+C3hOC2q+C2uiDgtprgtrsg4LeE4La74LeA4LePIOC2uuC3kOC3gOC3k+C2uOC2pyDgtongtqkg4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjYwOTU4NTk5MzcwNjkxNDYwODYiPiLgtpTgtrbgtpzgt5og4LeB4LeK4oCN4La74LeA4LeK4oCN4La6IOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5QXVkaW9TZXR0aW5ncyIgbXNnaWQ9IjM1MjI1NjUzNjY4MDYyNDg1MTciPiLgt4Hgtrbgt4rgtq/gtrog4LaG4Lav4LeTIOC2nOC3neC2veC3k+C2uiDgt4Hgtrbgt4rgtq8g4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeEIOC2tOC3iuKAjeC2u+C2reC3kuC2r+C3j+C2seC2uiDgt4PgtrPgt4Tgt48g4La34LeP4LeA4LeS4LatIOC2muC2u+C2seC3iuC2seC3miDgtprgt5TgtrjgtrEg4Lax4LeP4Lav4Laa4La6IOC2r+C3kOC2uuC3kiDgtq3gt5rgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNvcmRBdWRpbyIgbXNnaWQ9IjM4NzYwNDk3NzE0Mjc0NjYzMjMiPiLgt4Hgtrbgt4rgtq8g4La04Lan4LeS4Lac4LatIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY29yZEF1ZGlvIiBtc2dpZD0iNDkwNjgzOTMwMTA4Nzk4MDY4MCI+IuC2uOC2uuC3kuC2muC3iuKAjeC2u+C3nOC3huC3neC2seC2uiDgtrjgtp/gt5LgtrHgt4og4LeB4La24LeK4LavIOC2tOC2p+C3kuC2nOC2rSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La44Laf4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtpXgtrHgt5Hgtrgg4LeA4Lea4La94LeP4LeA4LaaIOC2lOC2tuC2nOC3miDgtoXgtrHgt5Tgtq/gt5DgtrHgt5Tgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC3geC2tuC3iuC2ryDgtrTgtqfgt5Lgtpzgtq0g4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtr3gtrbgt48g4Lav4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FtZXJhIiBtc2dpZD0iMzYxNjM5MTkxOTU1OTc1MTE5MiI+IuC2tOC3kuC2seC3iuC2reC3luC2uyDgt4Pgt4Qg4LeA4LeT4Lap4LeS4La64LedIOC2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLgtprgt5Dgtrjgtrvgt4/gt4Dgt5ngtrHgt4og4La04LeS4Lax4LeK4Lat4LeW4La7IOC2nOC3kOC2seC3k+C2uOC2pyDgt4Pgt4Qg4LeA4LeT4Lap4LeS4La64LedIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtrjgtp/gt5LgtrHgt4og4LaU4La24Lac4LeaIOC2heC2seC3lOC2r+C3kOC2seC3lOC2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4LaV4Lax4LeR4La4IOC3gOC3muC2veC3j+C3gOC2muC2r+C3kyDgtprgt5Dgtrjgtrvgt4/gt4Ag4La34LeP4LeA4LeS4Lat4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYURpc2FibGVUcmFuc21pdExlZCIgbXNnaWQ9IjI2NTEwNzI2MzA1MDExMjYyMjIiPiLgtprgt5Dgtrjgtrvgt4/gt4Ag4La34LeP4LeA4LeS4Lat4La64Lea4Lav4LeTIExFRCDgtq/gtrvgt4rgt4Hgtpog4LeD4La44LeK4La04LeK4oCN4La74Lea4LeC4Lar4La6IOC2heC2tuC2vSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmFEaXNhYmxlVHJhbnNtaXRMZWQiIG1zZ2lkPSI0NzY0NTg1NDY1NDgwMjk1MzQxIj4i4Laa4LeQ4La44La74LePIOC2t+C3j+C3gOC3kuC2reC2uiDgtrTgt5Lgt4Xgt5LgtrbgtrMgTEVEIOC2r+C2u+C3iuC3geC2muC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4LeS4La74LeT4La44LanLCDgtprgtr3gt5LgtrHgt4og4La04LeS4LeE4LeS4Lan4LeU4LeA4LePIOC2h+C2reC3kiDgtrTgtq/gt4rgtrDgtq3gt5Ig4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icmljayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjk2MTI5MjIwNTc2NDQ4ODMwNCI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uiDgt4Pgt4rgtq7gt5Lgtrvgt4Dgtrgg4LaF4La24La9IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYnJpY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MzM3ODE3MDkzMzI2MzcwNTM3Ij4i4Lav4LeU4La74Laa4Lau4Lax4La6IOC3g+C3iuC2ruC3kuC2u+C3gCDgtoXgtrbgtr0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJpY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQzMzQ4MTg4MDgwMDE2OTk1MzAiPiLgtrjgt5Tgt4Xgt5Qg4Lan4LeQ4La24LeK4La94Lan4La64La4IOC3g+C3iuC2ruC3kuC2u+C3gOC2uCDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrog4LaJ4Lat4LePIOC2t+C2uuC3j+C2seC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icmljayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3ODg5MDMyOTc2MjcyODMwOTkiPiLgtrjgt5Tgt4Xgt5Qg4Lav4LeU4La74Laa4Lau4Lax4La64La4IOC3g+C3iuC2ruC3kuC2u+C3gOC2uCDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrog4LaJ4Lat4LePIOC2t+C2uuC3j+C2seC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYm9vdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzQzNjYzNDk3MjU2MTc5NTAwMiI+IuC2p+C3kOC2tuC3iuC2veC2p+C3iiDgtrHgt5Dgt4Dgtq0g4La04LarIOC2nOC3kOC2seC3iuC3gOC3k+C2uOC2pyDgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWJvb3QiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODk4NTYwODcyNDYyNjM4MjQyIj4i4Lav4LeU4La74Laa4Lau4LaxIOC2seC3kOC3gOC2rSDgtrTgtqsg4Lac4LeQ4Lax4LeK4LeA4LeT4La44LanIOC2tuC2vSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWJvb3QiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgxNzIwNTYxODAwNjM3MDA3NDEiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4Lax4LeQ4LeA4LatIOC2tuC2vSDgtpzgt5DgtrHgt4rgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVib290IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTMyNjAwODEyNDI4OTk4OTk2OSI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtrHgt5Dgt4Dgtq0g4LaH4La74La54LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfdW5tb3VudF9maWxlc3lzdGVtcyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIyOTI3MzYxNTM3OTQyNTkxODQxIj4iVVNCIOC2huC2oOC2uuC2seC2uiDgtpzgt5zgtrHgt5Qg4La04Lav4LeK4Law4Lat4LeS4La6IOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0NDAyMzA1MDQ5ODkwOTUzODEwIj4iU0Qg4La04Lat4LeKIOC2nOC3nOC2seC3lCDgtrTgtq/gt4rgtrDgtq3gt5Lgtrog4La04LeK4oCN4La74LeA4Lea4LeBIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X3VubW91bnRfZmlsZXN5c3RlbXMiIG1zZ2lkPSIxODI5MjkwNzAxNjU4OTkyMzQ3Ij4i4LaJ4LeA4Lat4LeKIOC2muC3hSDgt4Tgt5Dgtprgt5Ig4LaG4Lag4La64Lax4La6IOC3g+C2s+C3hOC3jyDgtpzgt5zgtrHgt5Qg4La04Lav4LeK4Law4Lat4LeSIOC2iOC2s+C3k+C2uOC2pyDgt4Pgt4Qg4Lac4LeQ4La94LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyMjc4MTk1ODI2MjQ5MDQ5NzIiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW91bnRfZm9ybWF0X2ZpbGVzeXN0ZW1zIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYyNTgyNjk4NjM5Mjc0MDU2Ij4iU0Qg4La04LatIOC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21vdW50X2Zvcm1hdF9maWxlc3lzdGVtcyIgbXNnaWQ9Ijg3ODQyNjgyNDY3NzkxOTg2MjciPiLgtongt4Dgtq3gt4og4Laa4LeFIOC3hOC3kOC2muC3kiDgtobgtqDgtrrgtrEg4LeG4Led4La44LeQ4Lan4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfYWNjZXNzIiBtc2dpZD0iMzQxMTMzODYzMjAwMjE5Mzg0NiI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrog4La04LeS4LeF4LeS4La24LazIOC2reC3nOC2u+C2reC3lOC2u+C3lCDgtr3gtrbgt48g4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19hY2Nlc3MiIG1zZ2lkPSIzMDk0NTYzODQ0NTkzODc4NTQ4Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uuC3miDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYXNlY19jcmVhdGUiIG1zZ2lkPSI2NDE0NzU3MjM0Nzg5MzM2MzI3Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiDgtrHgt5Lgtrvgt4rgtrjgt4/gtqvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hc2VjX2NyZWF0ZSIgbXNnaWQ9IjQ1NTg4NjkyNzM1ODU4NTY4NzYiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LaG4Lag4La64Lax4La6IOC3g+C3kOC2r+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjUyNjkyODMyODMwMTYxODAyMiI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrog4LeA4LeS4Lax4LeP4LeBIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FzZWNfZGVzdHJveSIgbXNnaWQ9IjcyMTg3NDkyODYxNDU1MjY1MzciPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LaG4Lag4La64Lax4La6IOC3gOC3kuC2seC3j+C3gSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX21vdW50X3VubW91bnQiIG1zZ2lkPSI4ODc3OTk4MTAxOTQ0OTk5Mzg2Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiDgtrHgtoLgt4Dgt5Pgtrgv4Lac4LeQ4La94LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19tb3VudF91bm1vdW50IiBtc2dpZD0iMzQ1MTM2MDExNDkwMjQ5MDkyOSI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtrog4LeD4LeA4LeSIOC2muC3kuC2u+C3k+C2uOC2py/gtpzgt5Dgtr3gt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hc2VjX3JlbmFtZSIgbXNnaWQ9Ijc0OTY2MzM5NTQwODA0NzI0MTciPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4LaG4Lag4La64Lax4La6IOC2seC3kOC3gOC2rSDgtrHgtrjgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYXNlY19yZW5hbWUiIG1zZ2lkPSIxNzk0NzU3NTg4NDcyMTI3Njc1Ij4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiDgtrHgt5Dgt4Dgtq0g4Lax4La44LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i4Laa4La44LeK4La04Lax4La6IOC2tOC3j+C2veC2seC2uiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuC2muC2uOC3iuC2tOC2muC2uiDgtrTgt4/gtr3gtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IuC3g+C3kOC2q+C3meC3heC3kiDgtobgtr3gt53gtprgtrog4La04LeP4La94Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4LeD4LeQ4Lar4LeZ4LeF4LeS4La6IOC2tOC3j+C2veC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZVVzYiIgbXNnaWQ9IjExMTM0NTM0MzA2NDU0MDI3MjMiPiJVU0Ig4LaL4La04LeP4LaC4LacIOC3g+C2s+C3hOC3jyDgtprgt5Dgtrjgt5Dgtq3gt4rgtq0g4LeD4LeEIOC2heC3gOC3g+C2uyDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrog4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlVXNiIiBtc2dpZD0iNzc3NjE1NTQzMDIxODIzOTgzMyI+IlVTQiDgtovgtrTgt4/gtoLgtpwg4LeD4Laz4LeE4LePIOC2heC2t+C3kuC2u+C3lOC2oOC3kiDgt4Pgt4Qg4LaF4LeA4LeD4La7IOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc010cCIgbXNnaWQ9IjQ5NTM0Njg2NzY3OTU5MTcwNDIiPiJNVFAg4La04LeK4oCN4La74Lec4Lan4Lec4Laa4Led4La94La6IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NNdHAiIG1zZ2lkPSI2NTMyOTYxMjAwNDg2NzkxNTcwIj4iTVRQIFVTQiDgtrTgt4rigI3gtrvgt5zgtqfgt53gtprgt53gtr3gtrog4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC3kuC2u+C3k+C2uOC2pyDgtprgtrvgt4rgtrHgtr0gTVRQIOC2sOC3j+C3gOC2muC2uuC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9oYXJkd2FyZV90ZXN0IiBtc2dpZD0iNDE0ODI5MDg2MDQwMDY1OTE0NiI+IuC2r+C3mOC2qeC3j+C2guC2nCDgtrTgtrvgt5Pgtprgt4rgt4Lgtqvgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfaGFyZHdhcmVfdGVzdCIgbXNnaWQ9IjY1OTc5NjQxOTEyMDgwMTY2MDUiPiLgtq/gt5jgtqngt4/gtoLgtpwg4La04La74LeT4Laa4LeK4LeC4LePIOC2muC3kuC2u+C3k+C2uOC3miDgtoXgtrvgtrjgt5Tgtqsg4LeD4Laz4LeE4LePIOC2uuC3meC2r+C3lOC2uOC2pyDgt4Dgt5Lgt4Dgt5LgtrAg4La04La74LeK4La64Lax4LeK4LatIOC2tOC3j+C2veC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLgtq/gt5Tgtrvgtprgtq7gtrEg4LaF4LaC4LaaIOC3gOC3meC2rSDgto3gtqLgt5Tgt4Dgtrgg4LaF4La44Lat4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuC2lOC2tuC2nOC3miDgtrjgt5Dgtq/gt5Lgt4Tgtq3gt4og4LeA4LeT4La44Laa4LeKIOC2seC3nOC2uOC3kOC2reC3kuC3gCDgtq/gt5Tgtrvgtprgtq7gtrEg4LaF4LaC4LaaIOC2h+C2uOC2reC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4LeE4LeSIOC2tOC3iuKAjeC2u+C2reC3kuC2keC2veC2uiDgt4DgtrHgt4rgtrHgt5og4LaF4Lax4La04Lea4Laa4LeK4LeC4LeS4LatIOC2heC2uuC2muC3kuC2u+C3k+C2uOC3iiDgt4Tgt50g4LaH4La44Lat4LeU4La44LeKIOC2h+C2reC3kuC3gOC3k+C2uOC2uuC3ki4g4La44LeZ4La64Lax4LeKIOC3hOC2r+C3kuC3g+C3kiDgtoXgtoLgtpog4LeA4La94LanIOC2h+C2uOC2reC3lOC2uOC3iiDgtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtrHgt5zgtq/gt5ngtrEg4La24LeA4LanIOC3g+C2p+C3hOC2seC3iiDgtprgtrvgtpzgtrHgt4rgtrEuIOC2lOC2tuC2nOC3miDgtoXgtrHgt5Tgtq/gt5DgtrHgt5Tgtrjgtprgt4og4Lax4Lec4La44LeQ4Lat4LeS4LeAIOC2h+C2uOC2reC3lOC2uOC3iiDgtpzgt5DgtrHgt5Pgtrjgt5ngtrHgt4og4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtpTgtrbgtpzgt5og4La44LeU4Lav4La94LeKIOC2seC3kuC2muC2u+C3lOC2q+C3miDgt4Dgt5Dgtrog4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFByaXZpbGVnZWQiIG1zZ2lkPSI0MTk4MzQ5MjExMTA4NDk3ODc5Ij4i4LaV4Lax4LeR4La4IOC2r+C3lOC2u+C2muC2ruC2sSDgtoXgtoLgtprgtrrgtprgtqcg4LaN4Lai4LeU4LeA4La4IOC2heC2uOC2reC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQcml2aWxlZ2VkIiBtc2dpZD0iMTY4OTAyNDkwMTUwOTk5NjgxMCI+IuC2lOC2tuC2nOC3miDgtrjgt5Dgtq/gt5Lgt4Tgtq3gt4rgt4Dgt5Pgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC3hOC2r+C3kuC3g+C3kiDgtoXgtoLgtpog4LaH4Lat4LeU4LeF4Lat4LeK4LeAIOC2leC2seC3keC2uCDgtq/gt5Tgtrvgtprgtq7gtrEg4LaF4LaC4Laa4La64Laa4LanIOC2h+C2uOC2reC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeE4Lav4LeS4LeD4LeSIOC3g+C3muC3gOC3jyDgt4Dgt5ngtq0g4LaF4Lax4LeA4LeB4LeK4oCN4La6IOC3g+C3hCDgtrHgt5Pgtq3gt5Lgtrjgtrog4Lax4Lec4LeA4LaxIOC2h+C2uOC2reC3lOC2uCDgtr3gt5Dgtrbgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uCDgt4Pgt5Lgtq/gt5Qg4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0ODQyNTc2OTk0MTQ0NjA0ODIxIj4iQ0RNQSDgtqfgt5Dgtrbgt4rgtr3gtqcg4La04LeS4LeE4LeS4Lan4LeU4La4IOC3g+C3mOC2ouC3lOC3gCDgtofgtrvgtrngt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BlcmZvcm1DZG1hUHJvdmlzaW9uaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTYwNDg0ODA5NTMxNTQyMTQyNSI+IkNETUEg4Lav4LeU4La74Laa4Lau4LaxIOC2tOC3kuC3hOC3kuC2p+C3lOC2uCDgt4Pgt5jgtqLgt5Tgt4Ag4LaH4La74La54LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGVyZm9ybUNkbWFQcm92aXNpb25pbmciIG1zZ2lkPSIxOTk0MTkzNTM4ODAyMzE0MTg2Ij4i4La64LeZ4Lav4LeU4La44LanIENETUEg4La04LeK4oCN4La74Lat4LeS4La04LeP4Lav4LaxIOC2huC2u+C2uOC3iuC2tyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4Lap4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2heC2seC3gOC3geC3iuKAjeC2uiDgtr3gt5ngt4MgQ0RNQSDgtrTgt4rigI3gtrvgtq3gt5LgtrTgt4/gtq/gtrEg4LaG4La74La44LeK4La3IOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9sb2NhdGlvblVwZGF0ZXMiIG1zZ2lkPSI3Nzg1NDA4MjUzMzY0MzM1NzQwIj4i4LeD4LeK4Lau4LeP4LaxIOC2uuC3j+C3gOC2reC3iuC2muC3j+C2veC3k+C2sSDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4La04LeP4La94Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2xvY2F0aW9uVXBkYXRlcyIgbXNnaWQ9IjExMjA3NDE1NTc4OTE0Mzg4NzYiPiLgt4Pgt4rgtq7gt4/gtrHgt5Pgtrog4La64LeP4LeA4Lat4LeK4Laa4LeP4La94LeS4LaxIOC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiDgtrvgt5rgtqngt5Lgtrrgt53gt4Dgt5ngtrHgt4og4LeD4La24La9L+C2heC2tuC2vSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4La34LeP4LeA4LeS4Lat4La6IOC3g+C2s+C3hOC3jyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9Ijc4NTUyNTk0NjEyNjg3MzQ5MTQiPiLgtrTgt5Lgtrvgt5Lgtprgt4rgt4Pgt5Tgtrjgt4og4Lac4LeU4Lar4LeP4LaC4LacIOC3gOC3meC2rSDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9IjQwMjQ1MjY5Njg2MzAxOTQxMjgiPiLgtrTgt5Lgtrvgt5Lgtprgt4rgt4Pgt5Tgtrjgt4og4LeD4Lea4LeA4LeP4LeAIOC2uOC2nOC3kuC2seC3iiDgtovgtq3gt4rgt4Hgt4rigI3gtrvgt5rgtqvgt5Ig4Laa4LeFIOC2nOC3lOC2q+C3j+C2guC2nCDgt4Dgt5ngtq0g4Laa4LeS4La64LeA4LeT4La44LeKL+C2veC3kuC3gOC3k+C2uOC3iiDgtrTgt5Lgt4Dgt5Lgt4Pgt5Tgtrgg4LeD4Laz4LeE4LePIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3gOC2vSDgtrfgt4/gt4Dgt5Lgtq3gtrrgtqcg4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZEdhZGdldCIgbXNnaWQ9Ijc3NjkwNTMzOTAxNTg2MzQ3MSI+IuC3gOC3kuC2ouC2p+C3iiDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kR2FkZ2V0IiBtc2dpZD0iODI2MTMyNjkzODU5OTA0OTI5MCI+IuC2muC3lOC2uOC2sSDgt4Dgt5LgtqLgtqfgtrog4Laa4LeU4La44LaxIOC2uuC3meC2r+C3lOC2uOC3meC2seC3iiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La9IOC3hOC3kOC2muC3kuC2ryDgtrrgtrHgt4rgtrEg4La04Lav4LeK4Law4Lat4LeS4La64LanIOC2tOC3kOC3gOC3g+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtofgtq3gt5Ig4La64LeZ4Lav4LeU4La44Laa4LanIOC2heC2seC3meC2muC3iiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gtqcg4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC2r+C2reC3iuC2rSDgt4Dgtr3gtqcg4La04LeK4oCN4La74LeA4Lea4LeB4La6IOC2veC2tuC3jyDgtq/gt5Lgtrog4LeE4LeQ4LaaLiDgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtrog4La64LeZ4Lav4LeU4La44LeKIOC3gOC2vSDgtrfgt4/gt4Dgt5Lgtq3gtrrgtqcg4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9Ijg0MjM5MjM3Nzc2NTkyOTIyMjgiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4Lat4Lat4LeK4LeA4La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+IuC2i+C2tOC3j+C2guC2nOC2uuC3miDgtq/gt5Tgtrvgtprgtq7gtrEg4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIOC2tOC3j+C2veC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uiDgtofgtq3gt5Ig4La64LeZ4Lav4LeU4La44LanIOC2lOC2tuC2pyDgtrHgt5Lgt4Dgt5rgtq/gtrHgtrrgt5ngtrHgt4og4Lat4Lec4La74LeAIOC2ouC3j+C2vSDgtrjgt4/gtrvgt5Qg4Laa4LeS4La74LeT4La4LCDgtq/gt5Tgtrvgtprgtq7gtrEg4La74Lea4Lap4LeS4La64Led4LeAIOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Pgt4Qg4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uCDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSI5MTc4MjI4NTI0NTA3NjEwNDg2Ij4i4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2reC2reC3iuC3gOC2uiDgt4Pgt4Qg4LaF4Lax4Lax4LeK4oCN4La64Lat4LeP4LeA4La6IOC2muC3kuC2uuC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRQaG9uZVN0YXRlIiBtc2dpZD0iMTYzOTIxMjc3MTgyNjEyNTUyOCI+IuC2i+C2tOC3j+C2guC2nOC2uuC3miDgtq/gt5Tgtrvgtprgtq7gtrEg4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2h+C2uOC2reC3lOC2uCDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4LeA4LeU4LeA4Lat4LeKIOC3g+C3hCDgtofgtrjgtq3gt5Tgtrjgtprgt5LgtrHgt4og4Lav4LeU4La74LeD4LeK4LauIOC2heC2guC2muC2uiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeU4LeA4Lat4LeKIOC2r+C3lOC2u+C2muC2ruC2sSDgtoXgtoLgtprgtrog4LeD4LeEIOC2i+C2tOC3j+C2guC2nCBJRCDgt4TgtrPgt5TgtrHgt48g4Lac4LeQ4Lax4LeT4La44LanIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUzMTczMTQzNTAxMTQ5NTAxNSI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtrHgt5LgtrHgt4rgtq/gt5ngtrHgt4og4LeA4LeQ4LeF4Laa4LeK4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MzQ4MDE4Nzk0MTQ5NjEzMCI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgtrHgt5LgtrHgt4rgtq/gtqcg4La64LeP4La44LeZ4Lax4LeKIOC3gOC3heC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzExMzE5ODI0NDAwNDQ3ODY4Ij4i4Lan4LeQ4La24LeK4La94Lan4La6IOC2seC3kuC2seC3iuC2r+C2pyDgtrrgt4/gtrjgt5ngtrHgt4og4LeA4LeQ4La94LeQ4Laa4LeK4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODU1OTEwMDY3NzM3MjkyODc1NCI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgtrHgt5LgtrHgt4rgtq/gtqcg4La64LeP4La44LeZ4Lax4LeKIOC3gOC3kOC2veC3kOC2muC3iuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2RldmljZVBvd2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNzg3MDM0NzIyNjE2MzUwNDE3Ij4i4Lan4LeQ4La24LeK4La94Lan4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Tgt50g4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGV2aWNlUG93ZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTI4NjIyNDcwOTgwOTQzMjA2Ij4i4Lav4LeU4La74Laa4Lau4Lax4La6IOC2tuC2vSDgtpzgt5DgtrHgt4rgt4Dgt5Pgtrgg4LeE4LedIOC3gOC3kOC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2RldmljZVBvd2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2Njg5ODYyODc4OTg0NjMxODMxIj4i4Lan4LeQ4La24LeK4La94Lan4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Tgt50g4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kZXZpY2VQb3dlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjYwMzcwNTczNDg0NjMxMzEwMzIiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC3g+C3hCDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmFjdG9yeVRlc3QiIG1zZ2lkPSIzNzE1MjI1NDkyNjk2NDE2MTg3Ij4i4Laa4La74LeK4La44LeP4Lax4LeK4Lat4LeB4LeP4La94LePIOC2tOC2u+C3k+C2muC3iuC3guC2qyDgtobgtprgt4/gtrvgtrog4Lat4LeU4LeFIOC2sOC3j+C3gOC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mYWN0b3J5VGVzdCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk1MjA1OTMxODM1OTY1MzA5MSI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtq/gt5jgtqngt4/gtoLgtpwg4LeA4LeZ4LatIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtrTgt5Lgt4Dgt5Lgt4Pgt5Tgtrgg4LeD4Laz4LeE4LePIOC2heC3gOC3g+C2uyDgtq/gt5Pgtrjgt5ngtrHgt4og4La04LeE4LeFIOC2uOC2p+C3iuC2p+C2uOC3miDgtrHgt5LgtrTgt5Dgt4Dgt5Tgtrjgt4rgtprgtrvgt5Qg4La04La74LeT4Laa4LeK4LeC4Lar4La64Laa4LeKIOC2veC3meC3gyDgtrDgt4/gt4DgtrHgtrog4Laa4La74Lax4LeK4LaxLiDgtrHgt5LgtrTgt5Dgt4Dgt5Tgtrjgt4rgtprgtrvgt5Qg4La04La74LeT4Laa4LeK4LeC4LarIOC2huC2muC3j+C2u+C2uuC3meC2seC3iiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgt4Dgt5Lgtqcg4La04La44Lar4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZhY3RvcnlUZXN0IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODEzNjY0NDk5MDMxOTI0NDgwMiI+IuC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgtq/gt5jgtqngt4/gtoLgtpwg4LeA4LeZ4LatIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtrTgt5Lgt4Dgt5Lgt4Pgt5Tgtrgg4LeD4Laz4LeE4LePIOC2heC3gOC3g+C2uyDgtq/gt5Pgtrjgt5ngtrHgt4og4La04LeE4LeFIOC2uOC2p+C3iuC2p+C2uOC3miDgtrHgt5LgtrTgt5Dgt4Dgt5Tgtrjgt4rgtprgtrvgt5Qg4La04La74LeT4Laa4LeK4LeC4Lar4La64Laa4LeKIOC2veC3meC3gyDgtrDgt4/gt4DgtrHgtrog4Laa4La74Lax4LeK4LaxLiDgtrHgt5LgtrTgt5Dgt4Dgt5Tgtrjgt4rgtprgtrvgt5Qg4La04La74LeT4Laa4LeK4LeC4LarIOC2huC2muC3j+C2u+C2uuC3meC2seC3iiDgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4Law4LeP4LeA4Lax4La6IOC3gOC2sSDgt4Dgt5Lgtqcg4La04La44Lar4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0V2FsbHBhcGVyIiBtc2dpZD0iNjYyNzE5MjMzMzM3MzQ2NTE0MyI+IuC2tuC3kuC2reC3lOC2tOC2rSDgt4Pgt5Dgtprgt4Pgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXIiIG1zZ2lkPSI3MzczNDQ3OTIwOTc3NjI0NzQ1Ij4i4La04Lav4LeK4Law4Lat4LeSIOC2tuC3kuC2reC3lOC2tOC2rSDgt4Pgt5Dgtprgt4Pgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjMyNzg2MDgxNjU5Nzc3MzY1MzgiPiLgtpTgtrbgtpzgt5og4La24LeS4Lat4LeU4La04Lat4LeaIOC2tOC3iuKAjeC2u+C2uOC3j+C2q+C2uiDgt4Pgt5Dgtprgt4Pgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXJIaW50cyIgbXNnaWQ9IjgyMzU3ODQzODQyMjM3MzAwOTEiPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4La24LeS4Lat4LeU4La04Lat4LeaIOC2tOC3iuKAjeC2u+C2uOC3j+C2qyDgtongtp/gt5Ig4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hc3RlckNsZWFyIiBtc2dpZD0iMjMxNTc1MDQyMzEzOTY5NzM5NyI+IuC2muC2u+C3iuC2uOC3j+C2seC3iuC2reC3geC3j+C2veC3jyDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq/gtqcg4La04Lav4LeK4Law4Lat4LeS4La6IOC2seC3kOC3gOC2rSDgt4Pgtprgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFzdGVyQ2xlYXIiIG1zZ2lkPSIzNjY1MzgwNDkyNjMzOTEwMjI2Ij4i4LeD4LeS4La64La94LeUIOC2r+C2reC3iuC2rSDgtrjgt5Dgtprgt5Pgtrjgt5ngtrHgt4osIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3gyDgtprgt5Lgtrvgt5Pgtrjgt5ngtrHgt4og4LeD4LeEIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Pgt4rgtq7gt4/gtrTgtrHgtrrgt5ngtrHgt4og4LaR4LeE4LeSIOC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt48g4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2rSDgtrTgtq/gt4rgtrDgtq3gt5Lgtrog4Lax4LeQ4LeA4LatIOC3g+C3kOC2muC3g+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWUiIG1zZ2lkPSIyMDIxNjE0ODI5NTkxNzc1NjQ2Ij4i4LeA4Lea4La94LeP4LeAIOC3g+C3kOC2muC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE4OTYzNDE0MzgxNTExNTI4ODEiPiLgtqfgt5Dgtrbgt4rgtr3gtqcg4LaU4La74La94Led4LeD4LeU4LeA4LeaIOC3gOC3muC2veC3j+C3gCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODU1NzAyNzMwNzM4MDIwIj4i4Lav4LeU4La74Laa4Lau4LaxIOC2lOC2u+C2veC3neC3g+C3lOC3gOC3miDgt4Dgt5rgtr3gt4/gt4Ag4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtprgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFRpbWVab25lIiBtc2dpZD0iMjk0NTA3OTgwMTAxMzA3NzM0MCI+IuC3gOC3muC2veC3jyDgtprgtr3gt4/gtrTgtrog4LeD4LeQ4Laa4LeD4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE2NzY5ODM3MTIzMTU4Mjc2NDUiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4Laa4LeP4La9IOC2muC2veC3j+C2tOC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQ5OTk0MzQ4ODQzNjYzMzM5OCI+IuC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgt4Dgt5rgtr3gt48g4Laa4La94LeP4La04La6IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaL4La04LeP4LaC4Lac4La64LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2NvdW50TWFuYWdlclNlcnZpY2UiIG1zZ2lkPSI0ODI5MjYyMzQ5NjkxMzg2OTg2Ij4iQWNjb3VudE1hbmFnZXJTZXJ2aWNlIOC2veC3meC3gyDgtrTgt5ngtrHgt5Mg4LeD4LeS4Lan4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjb3VudE1hbmFnZXJTZXJ2aWNlIiBtc2dpZD0iMTk0ODQ1NTU1MjMzMzYxNTk1NCI+IkFjY291bnRBdXRoZW50aWNhdG9ycyDgt4Dgt5ngtq0g4LaH4La44Lat4LeU4La44LeKIOC2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFjY291bnRzIiBtc2dpZD0iMTA4Njc5NTQ2Nzc2MDEyMjExNCI+IuC2i+C2tOC3j+C2guC2nOC2uuC3miDgtofgtq3gt5Ig4Lac4LeS4Lar4LeU4La44LeKIOC3g+C3nOC2uuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNzQxNDk2NTM0NzY5NjYwMDI3Ij4i4Lan4LeQ4La24LeK4La94Lan4La6IOC3gOC3kuC3g+C3kuC2seC3iiDgtq/gtrHgt4rgtrHgt48g4Lac4LeS4Lar4LeU4La44LeKIOC2veC3kOC2uuC3kuC3g+C3iuC2reC3lOC3gOC2muC3iiDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tiDgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4Lec4LanIOC2h+C2reC3kiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC3g+C3j+C2r+C3jyDgtofgtq3gt5Ig4Lac4LeS4Lar4LeU4La44LeKIOC2uOC3k+C2pyDgtofgtq3gt5Tgt4Xgtq3gt4og4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ0ODMxNjgyMjQ1MTgwNzM4MiI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4Lav4Lax4LeK4Lax4LePIOC2nOC3kuC2q+C3lOC2uOC3iiDgtr3gt5Dgtrrgt5Lgt4Pgt4rgtq3gt5Tgt4Dgtprgt4og4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrYg4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC3nOC2pyDgtofgtq3gt5Ig4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgt4Pgt4/gtq/gt48g4LaH4Lat4LeSIOC2nOC3kuC2q+C3lOC2uOC3iiDgtrjgt5Pgtqcg4LaH4Lat4LeU4LeF4Lat4LeKIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2F1dGhlbnRpY2F0ZUFjY291bnRzIiBtc2dpZD0iNTI2NTkwODQ4MTE3MjczNjkzMyI+IuC2nOC3kuC2q+C3lOC2uOC3iiDgt4Pgt4/gtq/gtrHgt4rgtrEg4LeD4LeEIOC2uOC3lOC2u+C2tOC2ryDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hdXRoZW50aWNhdGVBY2NvdW50cyIgbXNnaWQ9IjU0NzIxMjQyOTY5MDg5NzcyNjAiPiLgtpzgt5Lgtqvgt5Tgtrjgt4og4LeD4LeQ4Lav4LeT4La44LanIOC3g+C3hCDgtrvgt4Tgt4Pgt4og4La04LavIOC2veC2tuC3j+C2nOC3kOC2seC3k+C2uCDgt4Pgt4Qg4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2muC3kuC2u+C3k+C2uCDgtofgtq3gt5Tgt4Xgtq3gt4rgt4AgQWNjb3VudE1hbmFnZXIg4Lac4LeaIOC2nOC3kuC2q+C3lOC2uOC3iiDgt4Pgtq3gt4rigI3gtrrgt4/gtrTgtrEg4LeE4LeQ4Laa4LeS4La64LeP4LeA4Lax4LeKIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44Laa4LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VBY2NvdW50cyIgbXNnaWQ9IjQ5ODMxMjYzMDQ3NTcxNzczMDUiPiLgtpzgt5Lgtqvgt5Tgtrjgt4og4LaR4Laa4Lat4LeUIOC2muC2u+C2seC3iuC2sSDgt4Tgt50g4LaJ4LeA4Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX21hbmFnZUFjY291bnRzIiBtc2dpZD0iODY5ODI5NTYyNTQ4ODI5MjUwNiI+IuC2nOC3kuC2q+C3lOC2uOC3iiDgtpHgtprgtq3gt5Qg4Laa4LeS4La74LeT4La4LCDgt4Pgt4Qg4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uCDgt4Pgt4Qg4LaU4LeA4LeU4Lax4LeK4Lac4LeaIOC2uOC3lOC2u+C2tOC2ryDgtrjgt5Dgtprgt5Pgtrgg4LaG4Lav4LeTIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kiDgt4Pgt5Lgtq/gt5Qg4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSIyMzU0ODEzOTYxNjM4Nzc2NDIiPiLgtovgtrTgt4/gtoLgtpzgtrrgt5og4LaH4Lat4LeSIOC2nOC3kuC2q+C3lOC2uOC3iiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlQ3JlZGVudGlhbHMiIG1zZ2lkPSI3OTg0MjI3MTQ3NDAzMzQ2NDIyIj4i4LeD4Lat4LeK4oCN4La64LeP4La04LaxIOC2p+C3neC2muC2sSDgtongtr3gt4rgtr3gt5Pgtrgg4LeD4Laz4LeE4LePIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTmV0d29ya1N0YXRlIiBtc2dpZD0iNDk1MTAyNzk2NDM0ODk3NDc3MyI+IuC2ouC3j+C2vSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4DgtrrgtrHgt4og4La24LeQ4La94LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya1N0YXRlIiBtc2dpZD0iODMxODk2NDQyNDY3NTk2MDk3NSI+IuC2muC3lOC2uOC2sSDgtqLgt4/gtr0g4La04LeA4Lat4LeS4Lax4LeK4Lax4LeaIOC2ryDgt4Pgt4Qg4LeD4La44LeK4La24Lax4LeK4Law4LeS4LatIOC2ryDgtobgtq/gt5Mg4Lai4LeP4La9IOC3g+C2tuC2s+C2reC3jyDgtpzgt5DgtrEg4Lat4Lec4La74Lat4LeU4La74LeUIOC2tuC3kOC2veC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iODAxODc1ODEzNjQwNDMyMzY1OCI+IuC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtqLgt4/gtr0g4La04LeK4oCN4La74LeA4Lea4LeB4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSIzNDAzMDYyMTg3Nzc5NzI0MTg1Ij4i4LaL4La04Laa4La74Lar4La64LanIOC2ouC3j+C2vSDgtprgt5ngt4DgtrHgt5LgtrrgtrHgt4og4LeD4LeQ4Lav4LeT4La44LanIOC3g+C3hCDgtqLgt4/gtr0g4La04LeK4oCN4La74Lec4Lan4Led4Laa4Led4La9IOC2heC2t+C3kuC2u+C3lOC2oOC3kiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2i+C2tOC2muC2u+C2q+C2uuC2pyDgtongtqkg4Lav4LeZ4Lax4LeK4LaxLiDgtoXgtrHgt4rgtq3gtrvgt4rgtqLgt4/gtr3gtrrgtqcg4Lav4Lat4LeK4LatIOC2uuC3kOC3gOC3k+C2uOC2pyDgt4Dgt5LgtrDgt5LgtrrgtrHgt4og4La24LeK4oCN4La74LeA4LeK4LeD4La74La6IOC3g+C3hCDgtoXgtrHgt5ngtprgt5Tgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC3g+C2tOC2uuC2uuC3kiwg4LaR4Lax4LeS4LeD4LePIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4Lav4Lat4LeK4LatIOC2heC2seC3iuC2reC2u+C3iuC2ouC3j+C2veC2uuC2pyDgtrrgt5Dgt4Dgt5Pgtrjgtqcg4LaF4LeA4LeB4LeK4oCN4La6IOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQXBuU2V0dGluZ3MiIG1zZ2lkPSI1MDU2NjAxNTk2NzU3NTE4OTYiPiLgtqLgt4/gtr3gtrrgt5og4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3g+C3hCDgtpzgtrjgtrHgt4/gtpzgtrjgtrEg4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sS/gtoXgtr3gt4rgtr3gt48g4Lac4LeQ4Lax4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVBcG5TZXR0aW5ncyIgbXNnaWQ9IjUzMzM3OTg4ODY0MTI3MTQxOTMiPiLgtpXgtrHgt5HgtrggQVBOIOC2keC2muC2miDgtrHgt5Lgtrrgt5Tgtq3gt5Tgt4Ag4LeD4LeEIOC2reC3nOC2pyDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4IOC3gOC3kOC2seC3kiDgtqLgt4/gtr0g4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeEIOC3g+C3kuC2uuC2veC3lOC2uCDgtqLgt4/gtr0g4LaF4Lat4LeU4La74LeUIOC2h+C2u+C3k+C2uOC2pyDgt4Pgt4Qg4LeD4Led4Lav4LeS4LeD4LeSIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaH4Lat4LeQ4La44LeK4LeA4LeS4LanIOC2lOC2tuC2nOC3miDgtoXgtrHgt5Tgtq/gt5DgtrHgt5Tgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeAIOC2heC2seC3kuC3guC3iuC2pyDgtovgtrTgt4/gtoLgtpwg4Lai4LeP4La9IOC2tOC3kOC2muC3kOC2p+C3iuC2p+C3lCDgtoXgtrDgt5Pgtprgt4rgt4Lgtqvgtros4LaG4La04LeD4LeUIOC2r+C3kuC3geC3j+C2nOC2rSDgtprgt5Lgtrvgt5Pgtrgg4LeE4LedIOC3gOC3meC2seC3g+C3iuC2muC3kuC2u+C3k+C2uCDgt4Pgt5Lgtq/gt5Qg4Laa4LeS4La74LeT4La44LanIOC2ieC2qSDgtq3gt5Lgtrbgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VOZXR3b3JrU3RhdGUiIG1zZ2lkPSI5NTg4ODQyOTE0NTQzMjczMDkiPiLgtqLgt4/gtr0g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeAIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VOZXR3b3JrU3RhdGUiIG1zZ2lkPSI2Nzg5MTIzOTEyNDc2NDE2MjE0Ij4i4Lai4LeP4La9IOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uuC3miDgtq3gtq3gt4rgt4Dgtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVRldGhlclN0YXRlIiBtc2dpZD0iNTk1MjU4NDk2NDM3MzAxNzk2MCI+IuC2p+C3meC2r+C2u+C3iiDgtprgtrvgtrEg4La94LavIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3jyDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlVGV0aGVyU3RhdGUiIG1zZ2lkPSIxNTI0NDQxMzQ0NDEyMzE5NzgwIj4i4Lan4LeZ4Lav4La74LeKIOC2muC3hSDgtqLgt4/gtr0g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64LeaIOC2reC2reC3iuC3gOC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iMTQwMDY2NjAxMjY3MTY0ODc0MSI+IuC2tOC3g+C3lOC2tuC3kuC2uOC3iiDgtq/gtq3gt4rgtq0g4La34LeP4LeA4LeS4LatIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlQmFja2dyb3VuZERhdGFTZXR0aW5nIiBtc2dpZD0iNTM0NzcyOTU3ODQ2ODc0NDM3OSI+IuC2tOC3g+C3lOC2tuC3kuC2uOC3iiDgtq/gtq3gt4rgtq0g4La34LeP4LeA4LeS4Lat4LePIOC3g+C3kOC2muC3g+C3k+C2uCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTIwMjAxMjk0OTI0NzA0MDAxMSI+IldpLUZpIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2seC3iiDgtrbgt5Dgtr3gt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NXaWZpU3RhdGUiIG1zZ2lkPSI1MDAyNzk4MDc3Mzg3ODAzNzI2Ij4iV2ktRmkg4LeD4La24La9IOC2tuC3gCDgt4Pgt4Qg4LeD4La44LeK4La24Lax4LeK4Law4LeS4LatIFdpLUZpIOC2i+C2tOC3j+C2guC2nCDgt4Dgtr0g4Lax4La44LeKIOC2huC2r+C3kyBXaS1GaSDgtqLgt4/gtr3gtprgtrvgtqvgtrrgt5og4Lat4Lec4La74Lat4LeU4La74LeUIOC2tuC3kOC2veC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjY1NTA2NDExODg3NDkxMjgwMzUiPiJXaS1GaSDgt4Dgtr3gtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kuC2uCDgt4Pgt4Qg4LeA4LeS4LeD4Lax4LeK4Law4LeSIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjcxMzc5NTAyOTczODYxMjc1MzMiPiJXaS1GaSDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeD4LeK4Lau4LeP4Lax4La64Lax4LeKIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeT4La44LanIOC3g+C3hCDgt4Dgt5Lgt4PgtrHgt4rgtrDgt5Ig4LeA4LeT4La44LanIOC3g+C3hCwgV2ktRmkg4Lai4LeP4La9IOC3g+C2s+C3hOC3jyDgtovgtrTgt4/gtoLgtpzgtrrgt5og4LeA4LeS4Lax4LeK4oCN4La64LeP4LeD4La64LanIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIG1zZ2lkPSIxMzY4MjUzODcxNDgzMjU0Nzg0Ij4iV2ktRmkg4La24LeE4LeU4LeA4LeS4Laa4LeP4LeB4LaxIOC2tOC3kuC3heC3kuC2nOC3kOC2seC3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3OTY5Nzc0MDIxMjU2MzM2NTQ4Ij4i4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC2pyDgtrTgtrjgtqvgtprgt4og4Lax4Lec4LeAIFdpLUZpIOC2ouC3j+C2veC2uuC3miDgtofgtq3gt5Ig4LeD4LeS4La64La94LeU4La4IOC2i+C2tOC3j+C2guC2nOC3gOC2veC2pyDgtrrgt5Dgt4Dgt5Yg4La04LeQ4Laa4LeQ4Lan4LeK4Lan4LeUIOC2tuC3hOC3lCDgt4Dgt5Lgtprgt4/gt4Eg4La94LeS4La04LeS4LaxIOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtr3gtrbgt4/gtpzgt5DgtrHgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIG5vbi1tdWx0aWNhc3Qg4LaG4Laa4LeP4La74La64LanIOC3gOC2qeC3jyDgt4Dgt5Dgtqngt5Ig4La24La94La64Laa4LeKIOC2uOC3meC3hOC3kuC2r+C3kyDgtrfgt4/gt4Dgt5Lgtq3gt48g4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTE5NDk3MDYwMjUzNDk5MjYiPiLgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La64LanIOC2tOC2uOC2q+C2muC3iiDgtrHgt5zgt4AgV2ktRmkg4Lai4LeP4La94La64LeaIOC2h+C2reC3kiDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2uuC3kOC3gOC3liDgtrTgt5Dgtprgt5Dgtqfgt4rgtqfgt5Qg4La24LeE4LeU4LeA4LeP4LeE4LaaIOC2veC3kuC2tOC3kuC2sSDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4La94La24LeP4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4La94LeQ4La24LeaLiDgtrbgt4Tgt5Tgt4Dgt4/gt4Tgtpog4Lax4LeQ4Lat4LeSIOC2huC2muC3j+C2u+C2uuC2pyDgt4Dgtqngt48g4LeA4LeQ4Lap4LeSIOC2tuC2veC2uuC2muC3iiDgtrjgt5ngt4Tgt5Lgtq/gt5Mg4La34LeP4LeA4LeS4Lat4LePIOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aEFkbWluIiBtc2dpZD0iNjAwNjk2NzM3MzkzNTkyNjY1OSI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4La04LeK4oCN4La74LeA4Lea4LeB4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY5MjExNzc0NzE3NDg4ODIxMzciPiLgt4Pgt4rgtq7gt4/gtrHgt5Pgtrog4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC2p+C3kOC2tuC3iuC2veC2p+C3iuC2uuC2muC3iiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgtqcg4LeD4LeEIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3gyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeEIOC2r+C3lOC2u+C3g+C3iuC2riDgtovgtrTgt4/gtoLgtpwg4LeD4La44LacIOC2uuC3lOC2nOC3hSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4OTMxNjgyMTU5MzMxNTQyMTM3Ij4i4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2tOC3meC2r+C3meC3g+C3kiDgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeA4LeS4Lax4LeK4oCN4La64LeP4LeDIOC2muC3kuC2u+C3k+C2uOC2pywg4LeD4LeEIOC2r+C3lOC2u+C3g+C3iuC2riDgtovgtrTgt4/gtoLgtpwg4Lac4LeA4Lea4LeC4Lar4La64LanIOC3g+C3hCDgtrrgt5Tgtpzgtr0g4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2ltYXhTdGF0ZSIgbXNnaWQ9IjQxOTU5MDcwMTA2MTAyMDU3MDMiPiJXaU1BWCDgt4Dgt5ngtq3gtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC2muC2u+C2seC3iuC2sSDgt4Tgt50g4LeA4LeS4LeD4Lax4LeK4Law4LeSIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI2MzYwMTAyODc3MjYxOTc4ODg3Ij4iV2lNQVgg4LeD4La24La9IOC2tuC3gCDgt4Pgt4Qg4LeD4La44LeK4La24Lax4LeK4Law4LeS4LatIOC2leC2seC3keC2uCBXaU1BWCDgtqLgt4/gtr3gtrrgtpog4Lat4Lec4La74Lat4LeU4La74LeUIOC2seC3kuC3geC3iuC2oOC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMjQwNTA0MjI2NzEzMTQ5NjU3OSI+IldpTUFYIOC2reC2reC3iuC3gOC2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzE1NjQ1NjUwNDA4NDIwMTgwNSI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uiBXaU1BWCDgtqLgt4/gtr0g4LeA4LeZ4LatIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeEIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NzAyNTA0MzAwNDkyMzc5OCI+IldpTUFYIOC2ouC3j+C2veC2uuC2seC3iuC2pyDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LeD4La44LeK4La24Lax4LeK4LawIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4Qg4LeA4LeS4LeD4Lax4LeK4Law4LeSIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aCIgbXNnaWQ9IjYxMjc3NjkzMzYzMzkyNzY4MjgiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LaL4La04LeP4LaC4LacIOC3g+C2uOC2nyDgtrrgt5Tgtpzgtr0g4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDgwNzIyMTgxODUyNDM4NjI4Ij4i4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Pgtrog4La24LeQ4La94LeS4La44LanLCDgt4Pgt5Dgtprgt4Pgt5Pgtrjgtqcg4LeD4LeEIOC2uuC3lOC2nOC2vSDgtprgt4Ug4LaL4La04LeP4LaC4LacIOC3g+C2uOC2nyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4DgtrHgt4og4La04LeS4LeF4LeS4Lac4LeQ4Lax4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrrgt5og4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3gOC3kuC2seC3iuKAjeC2uuC3j+C3g+C2uiDgtq/gt5Dgtprgt5PgtrjgtqcsIOC2uuC3lOC2nOC2vSDgtovgtrTgt4/gtoLgtpwg4LeD4La44LafIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2seC3iiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgtqcg4LeD4LeEIOC2t+C3j+C2u+C2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX25mYyIgbXNnaWQ9IjQ0MjMzNTEyNzQ3NTc4NzY5NTMiPiLgtobgt4PgtrHgt4rgtrEg4Laa4LeK4LeC4Lea4Lat4LeK4oCN4La7IOC3g+C2seC3iuC2seC3kuC3gOC3muC2r+C2seC2uiDgtrTgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbmZjIiBtc2dpZD0iNzEyMDYxMTgxOTQwMTc4OTkwNyI+IuC2huC3g+C2seC3iuC2sSDgtprgt4rgt4Lgt5rgtq3gt4rigI3gtrsg4LeD4Lax4LeK4Lax4LeS4LeA4Lea4Lav4LaxIChORkMpIOC2p+C3kOC2nOC3iiwg4La04Lat4LeKLCDgt4Pgt4Qg4Laa4LeS4La64LeA4Lax4LeK4Lax4Lax4LeKIOC3g+C2uOC2nyDgt4PgtrHgt4rgtrHgt5Lgt4Dgt5rgtq/gtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iMzU5ODQ5NjMwMTQ4NjQzOTI1OCI+IuC2lOC2tuC2nOC3miDgtq3gt5Lgtrvgtrrgt5og4LaF4Lac4LeU4La9IOC2heC2tuC2vSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSI2MDM0MjAzMDY1MDc3MTIyOTkyIj4i4La64Lat4LeU4La74LeUIOC2heC2nOC3lOC2vSDgt4Pgt4Qg4LaV4Lax4LeR4La4IOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2rSDgtrjgt5TgtrvgtrTgtq8g4LaG4La74Laa4LeK4LeC4LeP4LeA4Laa4LeKIOC2heC2tuC2vSDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2uOC3meC3hOC3kiDgtovgtq/gt4/gt4Tgtrvgtqvgtrrgtprgt4og4LeA4Lax4LeK4Lax4LeaIOC2tOC3kOC2uOC3kuC2q+C3meC2sSDgtofgtrjgtq3gt5Tgtrjgtprgt4og4La94LeQ4La24LeZ4Lav4LeK4Lav4LeTLCDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC3gOC2sSDgtoXgtq3gtrsg4LaH4La44Lat4LeU4La4IOC2heC3gOC3g+C3j+C2sSDgt4DgtrEg4LeA4LeS4LanIOC2uuC2reC3lOC2u+C3lCDgtoXgtpzgt5Tgtr0g4Lax4LeQ4LeA4LatIOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkU3luY1NldHRpbmdzIiBtc2dpZD0iNjIwMTgxMDAwODIzMDUwMzA1MiI+IuC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4Laa4LeS4La64LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFN5bmNTZXR0aW5ncyIgbXNnaWQ9IjI3MDY3NDU2NzQ1Njk2Nzg2NDQiPiLgtpzgt5Lgtqvgt5Tgtrgg4LeD4Laz4LeE4LePIOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtovgtq/gt4/gt4Tgtrvgtqvgtrrgtprgt4og4La94LeZ4LeDLCDgtpzgt5Lgtqvgt5Tgtrjgtprgt4og4LeD4La44LafIOC2tOC3lOC2r+C3iuC2nOC2vSDgtrrgt5ngtq/gt5Tgtrgg4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2r+C3kOC2uuC3kiDgtrjgt5ngtrrgtqcg4LeE4Laz4LeU4Lax4LePIOC2nOC2rSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9IjU0MDg2OTQ4NzU3OTM5NDUzMTQiPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4LeS4La74LeT4La4IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEg4LeD4LeEIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9Ijg5NTYyNjI1OTEzMDYzNjk4NjgiPiLgtpzgt5Lgtqvgt5Tgtrgg4LeD4Laz4LeE4LePIOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LaL4Lav4LeP4LeE4La74Lar4La64Laa4LeKIOC2veC3meC3gywg4Lac4LeS4Lar4LeU4La4IOC3g+C2uOC2nyDgtrTgt5Tgtq/gt4rgtpzgtr0g4La64LeZ4Lav4LeU4La4IOC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2rSDgtprgt5Lgtrvgt5Pgtrgg4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrfgt4/gt4Dgt5Lgtq0g4Laa4La9IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSI3Mzk2NTc3NDUxMzYwMjAyNDQ4Ij4i4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uOC3miDgt4PgtoLgtpvgt4rigI3gtrrgt4/gtrEg4Laa4LeS4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFN5bmNTdGF0cyIgbXNnaWQ9IjE1MTAxNDM3NjE3NTc2MDYxNTYiPiLgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4Laa4LeS4La74LeT4La44LeaIOC3g+C3kuC2r+C3lOC3gOC3k+C2uOC3iiDgtongtq3gt5Lgt4Tgt4/gt4Pgtrog4LeD4LeEIOC2muC3meC2reC2u+C2uOC3iiDgtq/gtq3gt4rgtq0g4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC3gOC3kyDgtofgtq3gt5Lgtq/gt5Dgtrrgt5Ig4LaH4Lat4LeU4La94Lat4LeKIOC2nOC3kuC2q+C3lOC2uCDgt4PgtrPgt4Tgt48g4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uOC3miDgt4PgtoLgtpvgt4rigI3gtrrgt4/gtrEg4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzUmVhZCIgbXNnaWQ9IjQ3NTY2MDk2MzcwNTMzNTMzMTgiPiLgtq/gt4/gtrrgtpog4LeA4LeWIOC3g+C2guC2nOC3iuKAjeC2u+C3hCDgtprgt5Lgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdWJzY3JpYmVkRmVlZHNSZWFkIiBtc2dpZD0iNTU1NzA1ODkwNzkwNjE0NDUwNSI+IuC3gOC2u+C3iuC2reC2uOC3j+C2sSDgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4LeD4LaC4Lac4LeK4oCN4La74LeEIOC2nOC3kOC2sSDgt4Dgt5Lgt4Pgt4rgtq3gtrsg4La94LeQ4La24LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI5MDE1MjQ2MzI1NDA4MjA5Mjk2Ij4i4Lav4LeP4La64LaaIOC3gOC3liDgt4PgtoLgtpzgt4rigI3gtrvgt4Qg4La94LeS4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3Vic2NyaWJlZEZlZWRzV3JpdGUiIG1zZ2lkPSI2OTI4OTMwMTg4ODI2MDg5NDEzIj4i4LaU4La24Lac4LeaIOC3gOC2u+C3iuC2reC2uOC3j+C2sSDgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4LeD4LaC4Lac4LeK4oCN4La74LeEIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2lOC2tuC2nOC3miDgt4Pgtrjgtrjgt5Tgt4Tgt5Tgtrvgt4rgtq0g4LeD4LaC4Lac4LeK4oCN4La74LeEIOC2heC2seC3kuC3guC3iuC2pyDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr3gt5LgtrHgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC2vSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjQxMDcxMDE1MjU3NDYwMzU3MTgiPiLgtpTgtrYg4LeA4LeS4LeD4LeS4Lax4LeKIOC3geC2tuC3iuC2r+C2muC3neC3guC2uuC2pyDgtofgtq3gt5Tgt4Xgtq3gt4rgtprgt5zgtqcg4LaH4Lat4LeSIOC2muC3nOC2seC3iuC2r+C3muC3g+C3kiDgtprgt5Lgtrrgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRGljdGlvbmFyeSIgbXNnaWQ9IjY1OTYxNDYwMDMzODkwNDI0MyI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgt4Hgtrbgt4rgtq8g4Laa4Led4LeC4La64LeaIOC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC2seC3iiDgt4Dgt5Lgt4Pgt5LgtrHgt4og4Lac4La24Lap4LePIOC2muC2uyDgtq3gt5Lgtrbgt5Lgtrog4LeE4LeQ4Laa4LeSIOC3gOC2oOC2sSwg4Lax4La44LeKLCDgt4Dgt4/gtprgt4rigI3gtrrgtoLgt4Eg4Laa4LeS4La64LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVEaWN0aW9uYXJ5IiBtc2dpZD0iMjE4MzExMDQwMjMxNDQ0MTEwNiI+IuC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC3kuC2seC3iiDgtoXgtrvgt4rgtq4g4Lav4LeQ4Laa4LeK4LeA4LeWIOC3geC2tuC3iuC2ryDgtprgt53gt4Lgtrrgtqcg4LeA4Lag4LaxIOC2keC2muC2reC3lCDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZURpY3Rpb25hcnkiIG1zZ2lkPSI4MTg1Mzg1NzE2MjU1MDY1MjkxIj4i4La04La74LeS4LeB4LeT4La94LaaIOC3geC2tuC3iuC2r+C2muC3neC3guC2uiDgtq3gt5Tgt4Xgtqcg4LaF4La94LeU4Lat4LeKIOC3gOC2oOC2sSDgtr3gt5Lgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjgyMzUzNDE1MTU2MDU1NTk2NzciPiLgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4LaG4Lag4La64Lax4La6IOC3gOC3meC2rSDgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgtrog4La04La74LeT4Laa4LeK4LeC4LePIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgyMzUzNDE1MTU2MDU1NTk2NzciPiLgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4LaG4Lag4La64Lax4La6IOC3gOC3meC2rSDgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgtrog4La04La74LeT4Laa4LeK4LeC4LePIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFJlYWQiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzY0MjQ3MzI5MjM0ODEzMjA3MiI+IuC2heC2seC3j+C2nOC2rSDgtovgtrTgt4/gtoLgtpzgt4Dgtr0g4La94La24LeP4Lac4LatIOC3hOC3kOC2muC3kiBVU0Ig4LaG4Lag4La64Lax4La6IOC3g+C2s+C3hOC3jyDgtoXgt4Dgt4Pgtrvgtrrgtprgt4og4La04La74LeT4Laa4LeK4LeC4LePIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTkxNDQwMjY4NDY4NTg0ODgyOCI+IuC2heC2seC3j+C2nOC2rSDgtovgtrTgt4/gtoLgtpzgt4Dgtr0g4La04LeQ4LeA4Lat4LeZ4LaxIFNEIOC2muC3j+C2qeC3iiDgtrTgtq0g4LeD4Laz4LeE4LePIOC2heC3gOC3g+C2u+C2uuC2muC3iiDgtrTgt5Lgtrvgt5Lgtprgt4rgt4Pgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRXcml0ZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI4NDg1OTc5MDYyMjU0NjY2NzQ4Ij4i4LaU4La24Lac4LeaIFVTQiDgtobgtqDgtrrgtrHgtrrgt5og4LaF4Lax4LeK4Lat4La74LeK4Lac4LatIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrgg4LeE4LedIOC2uOC3kOC2muC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4ODA1NjkzNjMwMDUwNDU4NzYzIj4i4LaU4La24Lac4LeaIFNEIOC2tOC2reC3miDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCDgt4Tgt50g4La44LeQ4Laa4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LeA4LeZ4LatIOC2veC3kuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzMzc0MTc3OTA5MzY2MzIwOTAiPiJTRCDgtrTgtq0g4LeA4LeZ4LatIOC2veC3kuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21lZGlhU3RvcmFnZVdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1OTgzOTE5OTcwNjg3OTAxNSI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtrjgt4/gtrDgt4rigI3gtrog4LaG4Lag4La64Lax4La6IOC2heC2seC3iuC2reC2u+C3iuC2nOC2rSDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxLyDgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tZWRpYVN0b3JhZ2VXcml0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjgxODkxNjA1OTc2OTg1MjkxODUiPiLgtoXgtrfgt4rigI3gtrrgtrHgt4rgtq3gtrsg4La44LeP4Law4LeK4oCN4La6IOC2huC2oOC2uuC2seC2uuC3miDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq3gtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtovgtrTgt4/gtoLgtpzgtrrgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZURvY3MiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc4MzE4NTk4NDQ4ODQ5ODI5Ij4i4La94Lea4Lab4LaxIOC2huC2oOC2uuC2seC2uiDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRG9jcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg3MDQzMjMxNzY5MTQxMjE0ODQiPiLgtr3gt5rgtpvgtrEg4LaG4Lag4La64Lax4La6IOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSI4MTUwNjEzODIzOTAwNDYwNTc2Ij4i4LeD4LeS4La64La94LeU4La4IOC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC2seC3iuC2nOC3miDgtrbgt4/gt4Tgt5Lgtrsg4LaG4Lag4La64LaxIOC3gOC3meC2rSDgtrTgt5Lgt4Dgt5Lgt4Pgt5ngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRBY2Nlc3NBbGwiIG1zZ2lkPSIzMjE1MjA4MzU3NDE1ODkxMzIwIj4i4LeD4LeS4La64La94LeUIOC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC2seC3iiDgt4PgtrPgt4Tgt48g4La24LeP4LeE4LeS4La7IOC2huC2oOC2uuC2seC2uiDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU2NTY0ODcyNjQ4MTk2Njk4MjQiPiLgt4Tgt5Dgtrngt5Lgtr3gt5Ig4Lac4Lec4Lax4LeUIOC2tOC2r+C3iuC2sOC2reC3kuC2uuC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FjaGVfZmlsZXN5c3RlbSIgbXNnaWQ9IjU1Nzg5Njc2NDIyNjU1NTA5NTUiPiLgt4Tgt5Dgtrngt5Lgtr3gt5Ig4Lac4Lec4Lax4LeUIOC2tOC2r+C3iuC2sOC2reC3kiDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4LeD4LeEIOC2veC3kuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZV9zaXAiIG1zZ2lkPSI1OTg2OTUyMzYyNzk1ODcwNTAyIj4i4LaF4Lax4LeK4Lat4La74LeK4Lai4LeP4La9IOC2h+C2uOC2reC3lOC2uOC3iiDgtpzgtrHgt4rgtrEv4La94La24Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXNlX3NpcCIgbXNnaWQ9IjQ3MTc2MzIwMDAwNjI2NzQyOTQiPiLgtoXgtrHgt4rgtq3gtrvgt4rgtqLgt4/gtr0g4LaH4La44Lat4LeU4La44LeKIOC2nOC3kOC2seC3k+C2uOC2py/gtr3gt5Dgtrbgt5PgtrjgtqcgU0lQIOC3g+C3muC3gOC3j+C3gCDgtrfgt4/gt4Dgt5Lgtq3gtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc4NjI1OTMyODM2MTE0OTMyMzIiPiLgtongtq3gt5Lgt4Tgt4/gt4Pgtpzgtq0g4Lai4LeP4La9IOC2t+C3j+C3gOC3kuC2reC2uiDgtprgt5Lgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc2ODkwNjA3NDk4MTkxMjY0NzIiPiLgt4Dgt5Lgt4Hgt5rgt4Lgt5Lgtq0g4Lai4LeP4La9IOC3g+C3hCDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2ieC2reC3kuC3hOC3j+C3g+C2nOC2rSDgtqLgt4/gtr0g4La34LeP4LeA4LeS4Lat4La6IOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZU5ldHdvcmtQb2xpY3kiIG1zZ2lkPSIyNTYyMDUzNTkyMzM5ODU5OTkwIj4i4Lai4LeP4La9IOC2tOC3iuKAjeC2u+C2reC3kuC2tOC2reC3iuC2reC3kuC2uiDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrog4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9Ijc1Mzc1ODY3NzE1NTkzNzA2NjgiPiLgtqLgt4/gtr0g4Laa4Lec4Lax4LeK4Lav4Lea4LeD4LeSIOC3g+C3hCDgt4PgtrPgt4TgtrHgt4og4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3geC3muC3guC3k+C2rSDgtrvgt5Pgtq3gt5Ig4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeU5ldHdvcmtBY2NvdW50aW5nIiBtc2dpZD0iNTA4ODIxNzMwOTA4ODcyOTY1MCI+IuC2ouC3j+C2vSDgtrfgt4/gt4Dgt5Lgtq0g4Lac4LeS4Lar4LeU4La44LeKIOC2muC3kuC2u+C3k+C2uCDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1NDQzNDEyODY2NzQ2MTk4MTIzIj4i4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2ouC3j+C2vSDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LeA4LaxIOC2tuC2veC2tOC3keC2uCDgtprgt5ngt4Pgt5rgtq8g4La64Lax4LeK4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4rgt4Dgtr0g4La34LeP4LeA4LeS4Lat4La6IOC3g+C2s+C3hOC3jyDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9IjM2NTg1MjcyMTQ5MTQ5NTk3NDkiPiLgtprgt5ngt4Dgt5ngtrHgt5Ig4La94Laa4LeU4Lar4LeUIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYXJrTmV0d29ya1NvY2tldCIgbXNnaWQ9Ijc2NTU1Njg0MzM2OTYzNTY1NzgiPiLgtrjgt4/gtrvgt4rgtpzgtpzgtq0g4LeA4LeT4La4IOC3g+C2s+C3hOC3jyDgtprgt5ngt4Dgt5ngtrHgt5Lgtrrgt5og4La94Laa4LeU4Lar4LeUIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2ieC2qSDgtq/gt5ngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI3NjczNDE2NDg3ODczNDMyMjY4Ij4i4La04LeK4oCN4La74LeA4Lea4LeBIOC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05vdGlmaWNhdGlvbnMiIG1zZ2lkPSI0NTg0NTc3NDI2ODM0MzEzODciPiLgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtprgt4Ug4La04La9IOC2muC3kuC2u+C3k+C2uOC3iuC2ryDgtofgtq3gt5Tgt4Xgtq3gt4rgt4Ag4Lav4LeQ4Lax4LeK4LeA4LeT4La44LeKIOC2veC2tuC3jyDgtpzgt5DgtrHgt5PgtrjgtqcsIOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeEIOC3hOC3kuC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIiBtc2dpZD0iNzA1Nzc2NDc0MjIxMTY1NjY1NCI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uCDgtofgt4Tgt5Tgtrjgt4rgtprgtrHgt4og4Lav4LeT4La44LeKIOC3g+C3muC3gOC3j+C3gOC2muC3iiDgt4Dgt5ngtq0g4La24Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgbXNnaWQ9Ijk4NTY5NzkxODU3NjkwMjk4NiI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiDgtoXgt4PgtrHgt4rgtrHgt4/gtpzgt5og4LeD4Lea4LeA4LeP4LeA4LeaIOC2ieC3hOC3hSDgtrjgtqfgt4rgtqfgtrjgt5og4LaF4Lat4LeU4La74LeU4La44LeU4LeE4LeU4Lar4Lat4LanIOC2tuC3kOC2s+C3k+C2uOC2pyDgtq/gtrvgtrHgt4rgtrHgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3mi4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4LeD4Lea4Lat4LeKIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9pbnZva2VDYXJyaWVyU2V0dXAiIG1zZ2lkPSIzNjk5NjAwODMzOTc1MTE3NDc4Ij4i4LeA4LeP4LeE4Laa4La6IOC3g+C3kOC2tOC2uuC3lCDgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Pgtrog4La64LeZ4Lav4LeU4La4IOC2ieC2veC3iuC2veC3jyDgt4Pgt5Lgtqfgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnZva2VDYXJyaWVyU2V0dXAiIG1zZ2lkPSI0MTU5NTQ5MTUyNTI5MTExOTIwIj4i4LeA4LeP4LeE4Laa4La64LePIOC2veC2tuC3j+C2r+C3lOC2seC3iiDgt4Pgt5Dgtprgt4Pgt5Tgtrjgt4og4La64LeZ4Lav4LeU4La44LeKIOC2i+C2reC3iuC2tOC3j+C2r+C2seC2uuC2pyDgtrDgt4/gtrvgtprgtrrgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4Lav4LePIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjgyMDYwNzc0NDc4Mzg5MDk1MTYiPiLgtqLgt4/gtr0g4Lat4Lat4LeK4LeAIOC2uOC2rSDgtrHgt5Lgtrvgt5Pgtprgt4rgt4Lgtqsg4LeA4LeZ4LatIOC2h+C3hOC3lOC2uOC3iuC2muC2seC3iiDgtq/gt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjY4OTkxMDIwNzU4MjUyNzIyMTEiPiLgtrrgt5ngtq/gt5Tgtrjgtprgtqcg4Lai4LeP4La9IOC2reC2reC3iuC3gCDgtrjgtq0g4Lax4LeS4La74LeT4Laa4LeK4LeC4LarIOC3gOC3meC2rSDgtofgt4Tgt5Tgtrjgt4rgtprgtrHgt4og4Lav4LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9saW1pdFBhc3N3b3JkIiBtc2dpZD0iNDQ5NzQyMDcyODg1NzU4NTc5MSI+IuC2uOC3lOC2u+C2tOC2ryDgtrHgt5Pgtq3gt5Ig4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjMyNTIxMTQyMDM5MTk1MTAzOTQiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC3miDgtrjgt5TgtrvgtrTgtq/gtrrgtqcg4LaF4Lax4LeU4La44LatIOC2heC2muC3lOC2u+C3lCDgt4Pgt4Qg4Lav4LeS4LacIOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dhdGNoTG9naW4iIG1zZ2lkPSI5MTQxMzA2NDY5NDIxOTk1MDMiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC3miDgtovgtq3gt4rgt4Pgt4/gt4TgtrrgtrHgt4og4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzIxNTcyOTI5NDIxNTA3MDA3MiI+IuC2reC3kuC2u+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44Lea4Lav4LeTIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtqfgtrrgt5LgtrTgt4og4Laa4LeFIOC2uOC3lOC2u+C2tOC2ryDgtpzgtqvgtrEg4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC2u+C2seC3iuC2sSDgt4Pgt4Qg4Lan4LeQ4La24LeK4La94Lan4La6IOC2heC2nOC3lOC3heC3lCDgtq/gtrjgtrHgt4rgtrEg4LeE4LedIOC3gOC3kOC2u+C2r+C3kiDgtrjgt5TgtrvgtrTgtq8g4La24Lec4LeE4LedIOC2nOC2q+C2seC2muC3iiDgtqfgtrrgt5LgtrTgt4og4Laa4La7IOC2h+C2reC3kiDgtrHgtrjgt4og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC3g+C3kuC2uuC2veC3lCDgtq/gtq3gt4rgtq0g4La44Laa4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MTIzMjMwOTE4NDY3NjEwNzMiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3muC2r+C3kyDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeKIOC2muC3hSDgtrjgt5TgtrvgtrTgtq8g4Lac4Lar4LaxIOC2seC3kuC2u+C3k+C2muC3iuC3guC2q+C2uiDgtprgtrvgtrHgt4rgtrEg4LeD4LeEIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44Lax4LeK4LaxIOC3hOC3nSDgt4Dgt5Dgtrvgtq/gt5Ig4La44LeU4La74La04LavIOC2tuC3nOC3hOC3nSDgtpzgtqvgtrHgtprgt4og4Lan4La64LeS4La04LeKIOC2muC2uyDgtofgtq3gt5Ig4Lax4La44LeKIOC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgt4Pgt5Lgtrrgtr3gt5Qg4Lav4Lat4LeK4LatIOC2uOC2muC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjI2MjAwNzcxOTEyNDI2ODg5NTUiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC3miDgtrjgt5TgtrvgtrTgtq/gtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjYwNTk2Mzk2MjMwMTkwNDQ1OCI+IuC2reC3kuC2u+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LeaIOC2uOC3lOC2u+C2tOC2r+C2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9mb3JjZUxvY2siIG1zZ2lkPSIyMjc0MDg1Mzg0NzA0MjQ4NDMxIj4i4Lat4LeS4La74La6IOC2heC2nOC3lOC3heC3lCDgtq/gt5Dgtrjgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2ZvcmNlTG9jayIgbXNnaWQ9IjExNDE3OTc1ODg0MDM4MjcxMzgiPiLgtq3gt5Lgtrvgtrrgtqcg4LaF4Lac4LeU4LeF4LeUIOC3gOC3kOC2p+C3k+C2uCDgt4Pgt5Lgtq/gt5Tgt4DgtrHgt4rgtrHgt5og4Laa4LeZ4LeD4Lea4LavIOC3g+C3hCDgtprgt4Dgtq/gt4/gtq8g4La64Lax4LeK4LaxIOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dpcGVEYXRhIiBtc2dpZD0iMzkxMDU0NTQ0Njc1ODYzOTcxMyI+IuC3g+C3kuC2uuC2veC3lCDgtq/gtq3gt4rgtq0g4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDMwNjE4NDA5NjA2Nzc1Njg3NiI+IuC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt48g4Lav4Lat4LeK4LatIOC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrjgt5ngtrHgt4og4La04LeD4LeU4LeAIOC2heC2seC2reC3lOC2u+C3lCDgtofgtp/gt4Dgt5Lgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeA4La4IOC2p+C3kOC2tuC3iuC2veC2p+C3iiDgtq/gtq3gt4rgtq0g4La44Laa4LePIOC2r+C2uOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTA5Njg5NTYwNDU3NDE4ODM5MSI+IuC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt48g4Lav4Lat4LeK4LatIOC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrjgt5ngtrHgt4og4La04LeD4LeU4LeAIOC2heC2seC2reC3lOC2u+C3lCDgtofgtp/gt4Dgt5Lgtrjgtprgt5LgtrHgt4og4Lat4Lec4La74LeA4La4IOC2r+C3lOC2u+C2muC2ruC2sSDgtq/gtq3gt4rgtq0g4La44Laa4LePIOC2r+C2uOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSIyNzg0ODI4MjkzNzQ3NzkxNDQ2Ij4i4LaL4La04LeP4LaC4LacIOC2nOC3neC2veC3k+C2uiDgtrHgt5Lgtrrgt5Tgtq3gt5Tgt4Ag4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfc2V0R2xvYmFsUHJveHkiIG1zZ2lkPSI2Mzg3NDk3NDY2NjYwMTU0OTMxIj4i4Laa4Lec4Lax4LeK4Lav4Lea4LeD4LeSIOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Dgt5Lgtqcg4La04Lec4Lav4LeUIOC2seC3kuC2uuC3lOC2reC3lCDgtpHgtprgtprgt4og4La34LeP4LeA4LeS4LatIOC2muC2u+C2sSDgtr3gt5ngt4Mg4LaL4La04LeP4LaC4Lac4La6IOC3g+C2muC3g+C2seC3iuC2sS4g4La04LeF4La44LeUIOC2i+C2tOC3j+C2guC2nCDgtrTgtrvgt5LgtrTgt4/gtr3gtprgtrrgt48g4La04La44Lar4Laa4LeKIOC2teC2veC2r+C3j+C2uuC3kiDgtrTgt5zgtq/gt5Qg4Lax4LeS4La64LeU4Lat4LeU4LeAIOC3g+C2muC3g+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSI4ODUyNzkxNTE4NDcyNTQwNTYiPiLgtq3gt5Lgtrvgtrog4LaF4Lac4LeU4LeF4LeUIOC2r+C3kOC2uOC3k+C2uOC3miDgtrjgt5TgtrvgtrTgtq/gtrog4Laa4La94LeKIOC2ieC2muC3lOC2reC3iuC3gOC3k+C2uCDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2V4cGlyZVBhc3N3b3JkIiBtc2dpZD0iMTcyOTcyNTIyNjMxNDY5MTU5MSI+IuC2reC3kuC2uy3gtoXgtpzgt5Tgt4Xgt5og4La44LeU4La74La04Lav4La6IOC3gOC3meC2seC3g+C3iuC3gOC3k+C2uCDgtprgt5zgtrTgtrjgtqsg4Laa4LeP4La9IOC2tOC2u+C3j+C3g+C2uuC2muC3kuC2seC3iiDgt4Pgt5Lgtq/gt5Tgt4Dgt5Lgtrog4La64LeU4Lat4LeU4LavIOC2uuC2seC3iuC2sSDgtrTgt4/gtr3gtrHgtrog4Laa4LeS4La74LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9lbmNyeXB0ZWRTdG9yYWdlIiBtc2dpZD0iODkwMTMyNjE5OTkwOTEzMjkxNSI+IuC2huC2oOC2uuC2seC2uuC3miDgt4PgtoLgtprgt5rgtq3gtrHgtrog4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZW5jcnlwdGVkU3RvcmFnZSIgbXNnaWQ9IjI2Mzc3MzIxMTUzMjUzMTY5OTIiPiLgtobgtqDgtrrgtrHgtrog4Laa4LeFIOC2uuC3meC2r+C3lOC2uOC3iiDgtq/gtq3gt4rgtq0g4LeD4LaC4Laa4Lea4Lat4Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSI2Mzk1MzAxMDIzMTUyMjk3ODI2Ij4i4Laa4LeQ4La44La74LePIOC2heC2tuC2vSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSIyMzA2MzQ5MDQyODM0NzU0NTk3Ij4i4LeD4LeS4La64La94LeUIOC2i+C2tOC3j+C2guC2nCDgtprgt5Dgtrjgtrvgt4/gt4Dgtr0g4La34LeP4LeA4LeS4Lat4La6IOC3gOC2veC2muC3iuC3gOC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSIyNjYzMjkxMDQ1NDI2Mzg4MDIiPiLgtrrgtq3gt5Tgtrvgt5Qg4LaG4La74Laa4LeK4LeC4LeP4LeA4LeaIOC3gOC3kuC3geC3muC3guC3j+C2guC2nCDgtoXgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjM0NjcwODIyNzIxODY1MzQ2MTQiPiLgtrrgtq3gt5Tgtrvgt5Qg4LaG4La74Laa4LeK4LeC4LeP4LeAIOC3hOC3kiDgt4Pgtrjgt4Tgtrsg4LeA4LeS4LeB4Lea4LeC4LeP4LaC4LacIOC2t+C3j+C3gOC3kuC2reC2uiDgt4Dgt4Xgtprgt4rgt4Dgtrrgt5IuIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBob25lVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI4OTAxMDk4MzM2NjU4NzEwMzU5Ij4i4Lax4LeS4LeA4LeDIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY5OTIzNjUwNTI3MTM2NjE1Ij4i4Lai4LaC4Lac4La4IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzg5NzU0NDY1NDI0Mjg3NDU0MyI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjExMDM2MDE0MzMzODIxNTgxNTUiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr0g4LeG4LeQ4Laa4LeK4LeD4LeKIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTczNTE3NzE0NDk0ODMyOTM3MCI+IuC2seC3kuC3gOC3g+C3miDgt4bgt5Dgtprgt4rgt4Pgt4oiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDM4Nzg2NzQ0NzcyMDczOTQiPiLgtrTgt5rgtqLgtrvgtroiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNjUwODI0Mjc1MTc3OTMxNjM3Ij4i4LeA4LeZ4Lax4Lat4LeKIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iOTE5MjUxNDgwNjk3NTg5ODk2MSI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImVtYWlsQWRkcmVzc1R5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iODA3Mzk5NDM1Mjk1NjEyOTEyNyI+IuC2uOC3lOC2veC3iiDgtrTgt5Lgtqfgt5Tgt4AiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3MDg0MjM3MzU2NjAyNjI1NjA0Ij4i4Laa4LeP4La74LeK4La64LeP4La94La6IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTExMjA0NDQxMDY1OTAxMTAyMyI+IuC3gOC3meC2seC2reC3iiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIzNzQ5MTM5NTI4NzAxMTA2MTgiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwb3N0YWxBZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI2ODgwMjU3NjI2NzQwMDQ3Mjg2Ij4i4Lax4LeS4LeA4LeDIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTYyOTE1Mzk1NjA0NTEwOTI1MSI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ5NjY2MDQyNjQ1MDAzNDM0NjkiPiLgt4Dgt5ngtrHgtq3gt4oiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0OTMyNjgyODQ3NTk1Mjk5MzY5Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iaW1BZGRyZXNzVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSIxNzM4NTg1MTk0NjAxNDc2Njk0Ij4i4Lax4LeS4LeA4LeDIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM1OTY0NDU2NTY0NzM4MzcwOCI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4Njg1NDk0MDEwNTM2MTU2NzciPiLgt4Dgt5ngtrHgtq3gt4oiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTQ1MTE4OTQ0NjM5ODY5ODA5Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JnYW5pemF0aW9uVHlwZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NTQ2MzM1NjEyMTg5MTE1NjE1Ij4i4Laa4LeP4La74LeK4La64LeP4La94La6IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDM3ODA3NDEyOTA0OTUyMDM3MyI+IuC3gOC3meC2seC2reC3iiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM0NTUwNDc0Njg1ODM5NjUxMDQiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJpbVByb3RvY29scyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijg1OTUyNjEzNjM1MTg0NTk1NjUiPiJBSU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3MzkwNDczNjI4Mjc1NDkwNzAwIj4iV2luZG93cyBMaXZlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzg4Mjg3NzEzNDkzMTQ1ODIxNyI+IllhaG9vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTAzNTM3NjMxMzIwMDU4NTI0MiI+IlNreXBlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzUzMjM2MzE3ODQ1OTQ0NDk0MyI+IlFRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzcxMzQ0MTAzNDI5OTY2MDc0OSI+Ikdvb2dsZSBUYWxrIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjUwNjg1NzMxMjcxODYzMDgyMyI+IklDUSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE2NDg3OTc5MDM3ODUyNzkzNTMiPiJKYWJiZXIiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUN1c3RvbSIgbXNnaWQ9IjE2NDQ3MzgwNTkwNTMzNTU4MjAiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVIb21lIiBtc2dpZD0iMjU3MDkyMzQ2MzAzMzk4NTg4NyI+IuC2seC3kuC3gOC3gyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1vYmlsZSIgbXNnaWQ9IjY1MDE0NjM1NTc3NTQ3NTEwMzciPiLgtqLgtoLgtpzgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrIiBtc2dpZD0iODg2MzkzOTY2NzA1OTkxMTYzMyI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUZheFdvcmsiIG1zZ2lkPSIzNTE3NzkyMTYwMDA4ODkwOTEyIj4i4Laa4LeP4La74LeK4La64LeP4La9IOC3huC3kOC2muC3iuC3g+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUZheEhvbWUiIG1zZ2lkPSIyMDY3MjY1OTcyMzIyOTcxNDY3Ij4i4Lax4LeS4LeA4LeD4LeaIOC3huC3kOC2muC3iuC3g+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVBhZ2VyIiBtc2dpZD0iNzU4MjM1OTk1NTM5NDkyMTczMiI+IuC2tOC3muC2ouC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU90aGVyIiBtc2dpZD0iMTU0NDQyNTg0Nzg2ODc2NTk5MCI+IuC3gOC3meC2seC2reC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNhbGxiYWNrIiBtc2dpZD0iMjcxMjE3NTIwMzA2NTY3ODIwNiI+IuC2uuC3heC3kiDgtofgtrjgtq3gt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDYXIiIG1zZ2lkPSI4NzM4MzYwNjg5NjE2NzE2OTgyIj4i4La44Led4Lan4La74LeKIOC2u+C2ruC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNvbXBhbnlNYWluIiBtc2dpZD0iNTQwNDM0MzU2NDYxNDc4OTE2Ij4i4LaG4La64Lat4Lax4La64LeaIOC2uOC3luC2veC3kuC2muC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUlzZG4iIG1zZ2lkPSI4MDIyNDUzMTkzMTcxMzcwMzM3Ij4iSVNETiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1haW4iIG1zZ2lkPSI2NzY2MTM3MDEwNjI4MzI2OTE2Ij4i4La44LeW4La94LeS4LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXJGYXgiIG1zZ2lkPSI4NTg3NjU3MTQ1MDcyNDQ2NTY1Ij4i4LeA4LeZ4Lax4Lat4LeKIOC3huC3kOC2muC3iuC3g+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVJhZGlvIiBtc2dpZD0iNDA5MzczODA3OTkwODY2NzUxMyI+IuC2u+C3muC2qeC3kuC2uuC3neC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVRlbGV4IiBtc2dpZD0iMzM2Nzg3OTk1MjQ3NjI1MDUxMiI+IuC2p+C3meC2veC3meC2muC3iuC3g+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVR0eVRkZCIgbXNnaWQ9Ijg2MDY1MTQzNzg1ODUwMDAwNDQiPiJUVFkgVEREIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya01vYmlsZSIgbXNnaWQ9IjEzMTE0MjY5ODkxODQwNjU3MDkiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr0g4Lai4LaC4Lac4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya1BhZ2VyIiBtc2dpZD0iNjQ5OTM4NzMxMjMxMTU3MDU2Ij4i4Laa4LeP4La74LeK4La64LeP4La9IOC2tOC3muC2ouC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUFzc2lzdGFudCIgbXNnaWQ9IjU1OTY3NzI2MzYxMjg1NjI4ODQiPiLgt4Pgt4Tgt4/gtrrgtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVNbXMiIG1zZ2lkPSI3MjU0NDkyMjc1NTAyNzY4OTkyIj4iTU1TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXZlbnRUeXBlQ3VzdG9tIiBtc2dpZD0iNzgzNzU4NjE5ODQ1ODA3MzQwNCI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUJpcnRoZGF5IiBtc2dpZD0iMjgxMzM3OTg0NDIxMTM5MDc0MCI+IuC2i+C2tOC2seC3iuC2r+C3kuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUFubml2ZXJzYXJ5IiBtc2dpZD0iMzg3Njc3OTc0NDUxODI4NDAwMCI+IuC3g+C2guC3gOC2reC3iuC3g+C2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZU90aGVyIiBtc2dpZD0iNzM4ODE3ODkzOTAxMDE0MzA3NyI+IuC3gOC3meC2seC2reC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUN1c3RvbSIgbXNnaWQ9Ijg1MjU5NjAyNTc4MDQyMTM4NDYiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVIb21lIiBtc2dpZD0iNDQ5MjI3MjM2MTQwNDMzOTE5Ij4i4Lax4LeS4LeA4LeDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlV29yayIgbXNnaWQ9IjM1NDgwNTgwNTk2MDExNDk5NzMiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVPdGhlciIgbXNnaWQ9IjI5MjMwMDg2OTUyNzI2Mzk1NDkiPiLgt4Dgt5ngtrHgtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVNb2JpbGUiIG1zZ2lkPSIxMTk5MTkwMDUzMjExNjYyMDUiPiLgtqLgtoLgtpzgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlQ3VzdG9tIiBtc2dpZD0iODkwMzIwNjkwMzA2MDQ3OTkwMiI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVIb21lIiBtc2dpZD0iODE2NTc1Njk3NzE4NDQ4MzA5NyI+IuC2seC3kuC3gOC3gyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVXb3JrIiBtc2dpZD0iNTI2ODE3Mjc3MjM4NzY5NDQ5NSI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVPdGhlciIgbXNnaWQ9IjI3MjYxMTE5NjY2MjM1ODQzNDEiPiLgt4Dgt5ngtrHgtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVDdXN0b20iIG1zZ2lkPSIyMDc0MDI4NzU1NTI3ODI2MDQ2Ij4i4LaF4La34LeS4La74LeU4Lag4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlSG9tZSIgbXNnaWQ9IjYyNDExODEwMzI5NTQyNjM4OTIiPiLgtrjgt5Tgtr3gt4og4La04LeS4Lan4LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlV29yayIgbXNnaWQ9IjEzNzE0ODkyOTAyNDI0MzMwOTAiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVPdGhlciIgbXNnaWQ9IjUzNzcwMDc0OTU3MzU5MTU0NzgiPiLgt4Dgt5ngtrHgtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sQ3VzdG9tIiBtc2dpZD0iNjkxOTQ1MzgzNjYxODc0OTk5MiI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xBaW0iIG1zZ2lkPSI3MDUwMzYwNjEyMzY4MzgzNDE3Ij4iQUlNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE1zbiIgbXNnaWQ9IjE0NDU1NjU0NTQyMDc2OTQ0MiI+IldpbmRvd3MgTGl2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xZYWhvbyIgbXNnaWQ9IjgyNzE0Mzk0MDg0NjkwMjEyNzMiPiJZYWhvbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xTa3lwZSIgbXNnaWQ9IjkwMTkyOTY3NDQ2MjI4MzI5NTEiPiJTa3lwZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xRcSIgbXNnaWQ9Ijg4ODc0ODQzNzk0OTQxMTE4ODQiPiJRUSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xHb29nbGVUYWxrIiBtc2dpZD0iNDkzOTAyMzIxMTQwMjc3MzA0Ij4iSGFuZ291dHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sSWNxIiBtc2dpZD0iMTU3NDg3MDQzMzYwNjUxNzMxNSI+IklDUSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xKYWJiZXIiIG1zZ2lkPSIyMjc5OTE3NjMwODc1NzcxNzIyIj4iSmFiYmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbE5ldE1lZXRpbmciIG1zZ2lkPSI4Mjg3NjI1NjU1OTg2ODI3OTcxIj4iTmV0TWVldGluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ1R5cGVXb3JrIiBtc2dpZD0iMjkyNjg4NzA1MDUzNjM4NzIiPiLgtprgt4/gtrvgt4rgtrrgt4/gtr3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdUeXBlT3RoZXIiIG1zZ2lkPSIzOTUxNzgxMTMxNTcwMTI0MDgyIj4i4LeA4LeZ4Lax4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZUN1c3RvbSIgbXNnaWQ9IjIyNTUyMzQxNTM3MjA4ODMyMiI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUN1c3RvbSIgbXNnaWQ9IjM1NDI0MDM2Nzk4MjcyOTczMDAiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVBc3Npc3RhbnQiIG1zZ2lkPSI2Mjc0MzM0ODI1MTk1Mzc5MDc2Ij4i4LeD4LeE4LeP4La64LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQnJvdGhlciIgbXNnaWQ9Ijg3NTc5MTM1MDY3ODQwNjc3MTMiPiLgt4Pgt4Tgt53gtq/gtrvgtrrgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVDaGlsZCIgbXNnaWQ9IjE4OTA3NDYyNzcyNzY4ODE2MjYiPiLgtq/gtrvgt5Tgt4Dgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVEb21lc3RpY1BhcnRuZXIiIG1zZ2lkPSI2OTA0ODA3MTEyMTIxMTIyMTMzIj4i4Lav4Lea4LeB4LeT4La6IOC3hOC3gOC3lOC2veC3iuC2muC2u+C3lOC3gOC3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUZhdGhlciIgbXNnaWQ9IjUyMjgwMzQ2ODcwODIwNTA3MjUiPiLgtrTgt5Lgtrrgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVGcmllbmQiIG1zZ2lkPSI3MzEzMTA2NzYyNDgzMzkxMjYyIj4i4La44LeS4Lat4LeK4oCN4La74La64LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlTWFuYWdlciIgbXNnaWQ9IjYzNjU2Nzc4NjE2MTAxMzc4OTUiPiLgtprgt4XgtrjgtrHgt4/gtprgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNb3RoZXIiIG1zZ2lkPSI0NTc4NTcxMzUyOTYyNzU4MzA0Ij4i4La44LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUGFyZW50IiBtc2dpZD0iNDc1NTYzNTU2NzU2MjkyNTIyNiI+IuC2uOC3gOC3iuC2tOC3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcnRuZXIiIG1zZ2lkPSI3MjY2NDkwMjg1MTIwMjYyNzgxIj4i4LeE4LeA4LeU4La94LeK4Laa4La74LeU4LeA4LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlUmVmZXJyZWRCeSIgbXNnaWQ9IjEwMTU3MzA1OTg0NDEzNTUyNCI+IuC2uuC3nOC2uOC3lOC2muC2u+C2sSDgtr3gtq/gt4rgtq/gt5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVSZWxhdGl2ZSIgbXNnaWQ9IjE3OTk4MTk5MzAwODU2MTAyNzEiPiLgtrHgt5Hgtrrgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTaXN0ZXIiIG1zZ2lkPSIxNzM1OTgzNTU0NDc5MDc2NDgxIj4i4LeD4LeE4Led4Lav4La74LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlU3BvdXNlIiBtc2dpZD0iMzk0MTM2OTM5NDI4Njk4MTE3Ij4i4La34LeP4La74LeK4La64LeP4LeAIOC3hOC3nSDgt4Pgt4rgt4Dgt4/gtrjgt5LgtrTgt5Tgtrvgt5Tgt4Lgtrrgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUN1c3RvbSIgbXNnaWQ9IjI0NzM1ODA1OTMxMTE1OTA5NDUiPiLgtoXgtrfgt5Lgtrvgt5TgtqDgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4i4Lax4LeS4LeA4LeDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lwQWRkcmVzc1R5cGVXb3JrIiBtc2dpZD0iNjkyMDcyNTczMDc5NzA5OTA0NyI+IuC2muC3j+C2u+C3iuC2uuC3j+C2veC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpcEFkZHJlc3NUeXBlT3RoZXIiIG1zZ2lkPSI0NDA4NDM2MTYyOTUwMTE5ODQ5Ij4i4LeA4LeZ4Lax4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iUElOIOC2muC3muC2reC2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIOC3g+C3hCDgtrHgt4AgUElOIOC2muC3muC2reC2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsg4Laa4Lea4Lat4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLgtrHgt4AgUElOIOC2muC3muC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IuC2uOC3lOC2u+C2tOC2r+C2uiDgtqfgtrrgt5LgtrTgt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEiPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC2uOC3lOC2u+C2tOC2r+C2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyBQSU4g4LaR4LaaIOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLgt4Dgt5Dgtrvgtq/gt5IgUElOIOC2muC3muC2reC2uuC2muC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pywg4La44LeZ4Lax4LeU4LeAIOC2lOC2tuC3jyDgtrTgt4Pgt5Tgt4AgMCDgtq8g4LaU4La24Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsX2RpYWxvZ19udW1iZXJfZm9yX2Rpc3BsYXkiIG1zZ2lkPSI2OTYxOTIxMDMxOTUwOTA5NzAiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LaH4La44Lat4LeU4La44LeKIOC2heC2guC2muC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODk2MzgzOTI0MjU2NTY1MzE5MiI+IuC3g+C3muC3gOC3j+C3gCDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zY3JlZW5fbG9ja2VkIiBtc2dpZD0iNzI4ODQ0MzA3NDgwNjgzMjkwNCI+IuC2reC3kuC2u+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZW5hYmxlZCIgbXNnaWQ9IjQ2MTU0MDUxNjE0MTI2MDQ5Ij4i4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyDgtrjgt5ngtrHgt5Tgt4Ag4LaU4La24Lax4LeK4LaxIOC3hOC3nSDgt4Tgtq/gt5Lgt4Pgt5Ig4LaH4La44Lat4LeU4La4IOC2veC2tuC3j+C2nOC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSI2ODYyNjAwMjg3OTcxNTgzNjQiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC2uOC3meC2seC3lCDgtpTgtrbgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9Ijc0Nzg3MDMyNTQ5NjQ4MTAzMDIiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC2u+C2p+C3j+C3gCDgtoXgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2VtZXJnZW5jeV9jYWxsIiBtc2dpZD0iNTM0NzYzMzc4NDQwMTI4NTIyNSI+IuC3hOC2r+C3kuC3g+C3kiDgtofgtrjgtq3gt5Tgtrjgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3JldHVybl90b19jYWxsIiBtc2dpZD0iNTI0NDI1OTc4NTUwMDA0MDAyMSI+IuC2h+C2uOC2reC3lOC2uCDgt4Dgt5ngtq0g4Lax4LeQ4LeA4LatIOC2uuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGF0dGVybl9jb3JyZWN0IiBtc2dpZD0iOTAzOTAwODY1MDM2MjI2MTIzNyI+IuC2seC3kuC3gOC3kOC2u+C2r+C3kuC2uuC3kiEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fd3JvbmciIG1zZ2lkPSI0MzE3OTU1MDE0OTQ4MTA4Nzk0Ij4i4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Bhc3N3b3JkX3dyb25nIiBtc2dpZD0iNTczNzgxNTM5MzI1MzE2NTMwMSI+IuC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+IuC2uOC3lOC3hOC3lOC2qyDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaF4Laf4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3miDgtovgtrTgtrvgt5Lgtrgg4La04LeK4oCN4La74La64Lax4LeK4Lat4La64Lax4LeKIOC2nOC2q+C2sSDgtongtprgt4rgtrjgt4Dgt48g4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wbHVnZ2VkX2luIiBtc2dpZD0iODA1Nzc2MjgyODM1NTU3MjMxNSI+IuC2huC2u+C3neC2tOC2q+C2uiDgt4Dgt5ngtrjgt5LgtrHgt4osIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NoYXJnZWQiIG1zZ2lkPSIzMjE2MzU3NDU2ODQwNjA2MjQiPiLgtoXgtrvgt53gtrTgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2JhdHRlcnlfc2hvcnQiIG1zZ2lkPSI0NDc3MjY0ODQ5Mzg2ODUwMjY2Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbG93X2JhdHRlcnkiIG1zZ2lkPSIxNDgyODczOTgxOTE5MjQ5NzQwIj4i4LaU4La24Lac4LeaIOC2huC2u+C3neC2tOC2muC2uuC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTk0MzkyNzc4MTkyMTUzOTkiPiJTSU0g4La04LatIOC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUxNjU5MTk2MDk1NzkxNDc0Ij4i4Lan4LeQ4La24LeK4La94Lan4La64LeaIFNJTSDgtrTgtq0g4Lax4Lec4La44LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODY5MjA1ODU2OTUxNjkwNzgiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lat4LeU4LeFIFNJTSDgtrTgtq0g4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTM3Mjc4NzEzODAyMzI3MjYxNSI+IlNJTSDgtrTgtq3gtprgt4og4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IlNJTSDgtrTgtq0g4Lax4Lec4La44LeQ4LatIOC3hOC3nSDgtprgt5Lgtrrgt4Dgt5Lgtrog4Lax4Lec4LeE4LeQ4LaaLiBTSU0g4La04Lat4Laa4LeKIOC2h+C2reC3lOC2veC2reC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI1MDk2MTQ5NjY1MTM4OTE2MTg0Ij4i4La34LeP4LeA4LeS4Lat4LePIOC2muC3hSDgtrHgt5zgt4Tgt5Dgtprgt5IgU0lNIOC2tOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iOTEwOTA0NjQzNDMzMTUxMzcxIj4i4LaU4La24Lac4LeaIFNJTSDgtrTgtq0g4LeD4LeK4Lau4LeS4La74LeAIOC2heC2tuC2vSDgtprgtrsg4Lat4LeS4La24LeaLlxuIOC3gOC3meC2seC2reC3iiBTSU0g4La04Lat4Laa4LeKIOC3g+C2s+C3hOC3jyDgtpTgtrbgtpzgt5og4LeD4Lea4LeA4LeP4Lav4LeP4La64Laa4La64LePIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgtrvgtpzgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIwMTU5NDkwNTE1Mjc0Njg4NiI+IuC2tOC3meC2uyDgtpzgt5Pgtq0g4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjYwODkyOTc2NTA0ODEyOTIzNjMiPiLgtorgt4Xgtp8g4Lac4LeT4LatIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1OTA4ODc4Njc4MDEyODAwMSI+IuC3gOC3kuC2u+C3j+C2uCDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTg4ODQyMjkzODM1MTAxOTQyNiI+IuC2sOC3j+C3gOC2miDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDU2MjMxODM3ODc2Njk4NzYwMSI+IuC2seC3kOC3gOC2reC3k+C2uOC3miDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbHNfb25seSIgbXNnaWQ9IjY3MzM5NzgzMDQzODYzNjU0MDciPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LaH4La44Lat4LeU4La44LeKIOC2tOC2uOC2q+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjE0MzM4OTIyNDk4NjAyODUwMSI+IuC2ouC3j+C2veC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9Ijc0NDE3OTczMzk5NzYyMzAiPiJTSU0g4La04LatIFBVSyDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4LaL4La04Lav4Lea4LeB4La6IOC2tuC2veC2seC3iuC2sSDgt4Tgt50g4La04La74LeS4La34Led4Lac4LeS4LaaIOC3g+C3muC3gOC3j+C3gCDgtoXgtrjgtq3gtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI4MDY2NjYwMTI5MjA2MDAxMDM5Ij4iU0lNIOC2tOC2rSDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI1OTUzMjMyMTQwNTI4ODEyNjQiPiJTSU0g4La04LatIOC2heC2nOC3lOC3heC3lCDgtoXgtrvgt5Lgtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjY0ODE2MjM4MzAzNDQxMDcyMjIiPiLgtpTgtrYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgt5og4La74Lan4LeP4LeAIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtofgtrMg4LaH4LatLiBcblxu4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtofgtq3gt5Tgt4Xgtq0g4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSIyNzI1OTczMjg2MjM5MzQ0NTU1Ij4i4LaU4La2IOC2uOC3lOC2u+C2tOC2r+C2uiDgt4Dgt4/gtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtqfgtrrgt5LgtrTgt4rgtprgt5zgtqcg4LaH4LatLiBcblxu4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2MjE2NjcyNzA2NTQ1Njk2OTU1Ij4i4LaU4La2IFBJTiDgtoXgtoLgtprgtrogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtqfgtrrgt5LgtrTgt4og4Laa4Lec4LanIOC2h+C2rS5cblxuIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaH4Lat4LeU4LeF4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjkxOTE2MTE5ODQ2MjU0NjA4MjAiPiLgtpTgtrYg4LeA4LeQ4La74Lav4LeS4La64LanIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgtpTgtrbgtpzgt5og4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3miDgtrvgtqfgt4/gt4Ag4LaH4LazIOC2h+C2rS4g4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3hCDgtprgt5Lgtrvgt5Pgtrjgt4ogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Lax4LeKIOC2tOC3g+C3lOC3gCwg4LaU4La24Lac4LeaIEdvb2dsZSDgtrTgt5TgtrvgtrHgtrog4LeA4LeT4La44LeKIOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LaU4La24Lac4LeZ4Lax4LeKIOC2heC3g+C2uuC3ki5cblxuIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI1OTAyMjc1NTk3NjM3NjI3NTEiPiLgtpTgtrYg4LeA4LeQ4La74Lav4LeS4La64LanIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgtpTgtrbgtpzgt5og4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3miDgtrvgtqfgt4/gt4Ag4LaH4LazIOC2h+C2rS4g4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3hCDgtprgt5Lgtrvgt5Pgtrjgt4ogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Lax4LeKIOC2tOC3g+C3lOC3gCwg4LaU4La24Lac4LeaIEdvb2dsZSDgtrTgt5TgtrvgtrHgtrog4LeA4LeT4La4IOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LaU4La24Lac4LeZ4Lax4LeKIOC2heC3g+C2seC3lCDgtofgtq0uXG5cbiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTI4MTA2Mzk5NzQ1NzU1NjA0Ij4i4LaU4La2IOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtoXgt4Dgt4Pgt4rgtq7gt48gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrsg4LaH4LatLiDgtoXgt4Dgt4Pgt4rgtq7gt48gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2heC3g+C3j+C2u+C3iuC2ruC2muC3gCDgtovgtq3gt4rgt4Pgt4Qg4Laa4LeS4La74LeT4La44Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4Lan4LeQ4La24LeK4La94Lan4La6IOC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt48g4La44LeU4La94LeKIOC2reC2reC3iuC3gOC2uuC2pyDgtrHgt5Dgt4Dgtq0g4La04Lat4LeKIOC3gOC2sSDgtoXgtq3gtrsg4LeD4LeS4La64La94LeUIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeSIOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2MDM1NjUxNDIxNTY4MjY1NjUiPiLgtpTgtrYg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LeA4LeP4La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC2muC2r+C3kyDgt4Dgt5Dgtrvgtq/gt5Mg4La04LeK4oCN4La74La64Lat4LeK4Lax4La64Lax4LeKIOC2nOC3meC2sSDgtq3gt5Lgtrbgt5ouIOC2reC3gOC2reC3iiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4La04LeK4oCN4La74La64Lat4LeK4LaxIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq3gt4Hgt4/gtr3gt4/gt4Dgt5og4La04LeZ4La74Lax4LeS4La44LeS4La64LanIOC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrEg4LaF4Lat4La7IOC3g+C3kuC2uuC2veC3lOC2uCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kiDgt4Dgt5Mg4La64La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI4MDg3MzUxNjQ5MzkzNDM2NSI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC2lOC2tiDgt4Dgt5Dgtrvgtq/gt5Ig4La04LeK4oCN4La74La64Lat4LeK4LaxIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgt4Dgt4/gtrvgtrrgtprgt4og4Lac4LeZ4LaxIOC2h+C2rS4g4Lav4LeQ4Lax4LeKIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq3gt4Hgt4/gtr3gt48g4LeD4LeU4La04LeU4La74LeU4Lav4LeK4LavIOC3gOC3meC2rSDgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LeT4La4IOC2muC3meC2u+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzAyNTUwNDcyMTc2NDkyMjI0NiI+IuC2lOC2tiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgt4Dgt4/gtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC2muC2r+C3kyDgt4Dgt5Dgtrvgtq/gt5Mg4La04LeK4oCN4La74La64Lat4LeK4Lax4La64Lax4LeKIOC2nOC3meC2sSDgtq3gt5Lgtrbgt5ouIOC2r+C3kOC2seC3iiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Laa4La74LeK4La44LeP4Lax4LeK4Lat4LeB4LeP4La94LePIOC2tOC3meC2u+C2seC3kuC2uOC3kuC2uuC2pyDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt5Qg4La94La24La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYyNTE0ODAzNDMzOTQzODk2NjUiPiLgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iMjYyNjk5OTQ0OTYxMDY5NTkzMCI+IuC2u+C2p+C3j+C3gCDgtoXgtrjgtq3gtprgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fZm9yZ290X3BhdHRlcm4iIG1zZ2lkPSIyNTg4NTIxNTAxMTY2MDMyNzQ3Ij4i4Lac4LeS4Lar4LeU4La44LeaIOC2heC2nOC3lOC3heC3lCDgtoXgtrvgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjI3NTEzNjg2MDUyODcyODg4MDgiPiLgtrvgtqfgt48g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC3kuC2u+C3k+C2uOC3iiDgt4Dgt5Dgtqngt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTMxODE2MjU2MTAwNzA3Nzg0Ij4i4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pywg4LaU4La24Lac4LeaIEdvb2dsZSDgtpzgt5Lgtqvgt5Tgtrgg4LeD4La44LacIOC2tOC3lOC2u+C2seC2uiDgt4DgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9Ijg4NDY4ODE0MjQxMDY0ODQ0NDciPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La6ICjgtoot4Lat4LeQ4La04LeR4La9KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI1OTU4MDI4MzgzOTU0NzM4NTI4Ij4i4La44LeU4La74La04Lav4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjcxMzA4OTM2OTQ3OTU3ODYzMDAiPiLgtrTgt5TgtrvgtrHgtrog4LeA4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjEzNjQwNTE0NzMzNDc0ODU5MDgiPiLgt4Dgtr3gtoLgtpzgt5Qg4Lax4Lec4LeA4LaxIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtrHgt4/gtrjgtrrgtprgt4og4LeE4LedIOC2uOC3lOC2u+C2tOC2r+C2uuC2muC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSIxNjk2OTI0NzYzNjkwMzc5MDczIj4i4LaU4La24Lac4LeaIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtrHgt4/gtrjgtrog4LeE4LedIOC2uOC3lOC2u+C2tOC2r+C2uiDgtoXgtrjgtq3gtprgtq8/XG4gIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iIOC3gOC3meC2rSDgtrrgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSI3MTE0NjI3MzUxMjg2OTMzODY3Ij4i4La04La74LeS4Laa4LeK4LeC4LePIOC2muC2u+C2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdW5sb2NrX2xhYmVsIiBtc2dpZD0iNzM3NDQwNDgzMjIwNjY3MDU0Ij4i4LaF4Laf4LeU4La9IOC2heC2u+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc291bmRfb25fbGFiZWwiIG1zZ2lkPSI5MDY4ODc3NTc2NTEzNDI1OTcwIj4i4LeB4La24LeK4Lav4La6IOC3g+C2muC3iuKAjeC2u+C3k+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29mZl9sYWJlbCIgbXNnaWQ9Ijk5NjgyMjgyNTE1NDMxOTAyNiI+IuC3geC3iuKAjeC2u+C3gOC3iuKAjeC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9zdGFydCIgbXNnaWQ9IjM5NDEwNDU1MDI5MzMxNDI4NDciPiLgtrvgtqfgt4/gt4Ag4LaF4La74La54LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fY2xlYXJlZCIgbXNnaWQ9IjU1ODM0Nzk3MjEwMDE2Mzk1NzkiPiLgtrvgtqfgt4/gt4Ag4LeE4LeS4LeD4LeKIOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2FjY2Vzc19wYXR0ZXJuX2NlbGxfYWRkZWQiIG1zZ2lkPSI2NzU2MDMxMjA4MzU5MjkyNDg3Ij4i4Laa4Lec4Lan4LeU4LeA4Laa4LeKIOC2keC2muC2reC3lCDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9kZXRlY3RlZCIgbXNnaWQ9IjQ5ODg3MzA4OTU1NTQwNTcwNTgiPiLgtrvgtqfgt4/gt4Ag4LeD4La44LeK4La04LeW4La74LeK4Lar4La64LeSIjwvc3RyaW5nPgorICAgIDwhLS0gU3RyaW5nLmZvcm1hdCBmYWlsZWQgZm9yIHRyYW5zbGF0aW9uIC0tPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQgKDU2Nzg2MjQ2MjQ2ODE0MDAxOTEpIC0tPgorICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i4LeA4LeS4Lai4Lan4La6IOC2keC2muC2reC3lCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLgt4Tgt5Lgt4Pgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+IuC2heC2nOC3lOC3heC3lCDgtoXgtrvgt5LgtrEg4La04LeK4oCN4La74Lav4Lea4LeB4La6IOC3gOC3kuC2r+C3hOC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4i4LaF4Lac4LeU4LeF4LeUIOC2heC2u+C3kuC2sSDgtrTgt4rigI3gtrvgtq/gt5rgt4Hgtrog4LeE4LeQ4Laa4LeS4La94LeTIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5LgtqLgtqfgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgtq3gt53gtrvgtrHgt4rgtrHgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiLgtq3gtq3gt4rgt4DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiLgtprgt5Dgtrjgtrvgt4/gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i4La44LeP4Law4LeK4oCN4La6IOC2tOC3j+C2veC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i4LeA4LeS4Lai4Lan4La6IOC2seC3kOC3gOC2rSDgtoXgtrHgt5TgtrTgt5Lgt4Xgt5Lgt4Dgt5ngt4Xgtqcg4LeD4LeQ4Laa4LeD4LeS4La4IOC2h+C2u+C2ueC3lOC2q+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLgt4Dgt5LgtqLgtqfgt4og4Lax4LeQ4LeA4LatIOC2heC2seC3lOC2tOC3kuC3heC3kuC3gOC3meC2veC2pyDgt4Pgt5Dgtprgt4Pgt5Pgtrgg4LaF4LeA4LeD4LeP4Lax4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4LeA4LeS4Lai4Lan4La6IOC2uOC3kOC2muC3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4i4LaF4Lac4LeU4LeF4LeUIOC2seC3nOC2r+C3kOC2uOC3liDgtrTgt4rigI3gtrvgtq/gt5rgt4Hgtrog4La04LeU4LeF4LeU4La94LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiLgt4Pgtrvgt4rgtrTgtqsg4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IuC2u+C2p+C3jyDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i4La44LeU4LeE4LeU4LarIOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtoXgtp/gt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQSU4g4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLgtrjgt5TgtrvgtrTgtq8g4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLgtrvgtqfgt48g4La04LeK4oCN4La74Lav4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiLgt4Pgtrvgt4rgtrTgtqsg4La04LeK4oCN4La74Lav4Lea4LeB4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfY2hhcmFjdGVyIiBtc2dpZD0iNzMzNjQ3MDUzNTM4NTAwOTUyMyI+IuC2heC2muC3iuC3guC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX3dvcmQiIG1zZ2lkPSI3MDc1NTcwMzI4Mzc0OTE4NjYwIj4i4LeA4Lag4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnVsYXJpdHlfbGFiZWxfbGluayIgbXNnaWQ9IjU4MTU1MDg4ODA3ODI0ODgyNjciPiLgt4Pgtrbgt5DgtrPgt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF9saW5lIiBtc2dpZD0iNTc2NDI2NzIzNTAyNjEyMDg4OCI+IuC2u+C3muC2m+C3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfYW1wbSIgbXNnaWQ9IjQ1ODQzMzgwODM1MjkzNTU5ODIiPiI8eGxpZmY6ZyBpZD0iSE9VUiI+JS1sPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJBTVBNIj4lUDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX2NhcF9hbXBtIiBtc2dpZD0iMjA4MzQ2NTk5Mjk0MDQ0NDM2NiI+Ijx4bGlmZjpnIGlkPSJIT1VSIj4lLWw8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IkFNUE0iPiVwPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X2ZhaWxlZCIgbXNnaWQ9IjU0MTAyNzAzMjkxMTQyMTIwNDEiPiLgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC2tOC2u+C3k+C2muC3iuC3guC2q+C2uiDgtoXgt4Pgt4/gtrvgt4rgtq7gtprgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9ub3Rfc3lzdGVtIiBtc2dpZD0iNDQzNTIwMTY1Njc2NzI3NjcyMyI+IkZBQ1RPUllfVEVTVCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4AgL3N5c3RlbS9hcHAg4LeE4LeSIOC3g+C3iuC2ruC3j+C2tOC3kuC2rSDgtrTgt5Dgtprgt5rgtqIg4LeD4Laz4LeE4LePIOC2tOC2uOC2q+C2muC3iiDgt4Pgt4Tgtrog4Lav4Laa4LeK4LeA4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3Rvcnl0ZXN0X25vX2FjdGlvbiIgbXNnaWQ9Ijg3Mjk5MTg3NDc5OTk5ODU2MSI+IkZBQ1RPUllfVEVTVCDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Ag4La94La24LeP4Lav4LeZ4LaxIOC2tOC3kOC2muC3muC2ouC2uuC2muC3iiDgt4Pgt5zgtrrgt4/gtpzgtq0g4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWN0b3J5dGVzdF9yZWJvb3QiIG1zZ2lkPSI2MzIwMTY4MjAzMDUwNzkxNjQzIj4i4La04LeU4Lax4La74LeP4La74La44LeK4La3IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjE5ODc0ODM5Nzc4MzQ2MDM4NzIiPiJcIjx4bGlmZjpnIGlkPSJUSVRMRSI+JXM8L3hsaWZmOmc+XCIg4LeE4LeSIOC2h+C2reC3kiDgtrTgt5Lgtqfgt5Tgt4Ag4Laa4LeS4La64Lax4LeK4Lax4LeaOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNjk2MTkwMzIxMzcyOTY2NzU3MyI+IuC2ouC3j+C3gOC3j+C3g+C3iuC2muC3iuKAjeC2u+C3kuC2tOC3iuC2p+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX3RpdGxlIiBtc2dpZD0iMjYxOTM3NjU1NTUyNTExNjU5MyI+IuC3g+C2guC2oOC2veC2seC2uiDgtq3gt4Tgt4Dgt5Tgtrvgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfcG9zaXRpdmVfYnV0dG9uIiBtc2dpZD0iMzExMjc1MjAxMDYwMDQ4NDEzMCI+IuC2uOC3meC2uCDgtrTgt5Lgtqfgt5Tgt4Dgt5ngtrHgt4og4LaJ4LeA4Lat4LeKIOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkX25lZ2F0aXZlX2J1dHRvbiIgbXNnaWQ9IjU2MTQ4NjEyOTMwMjYwOTk3MTUiPiLgtrjgt5ngtrgg4La04LeS4Lan4LeU4LeA4LeZ4LeE4LeSIOC2ieC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImpzX2RpYWxvZ19iZWZvcmVfdW5sb2FkIiBtc2dpZD0iMzQ2ODgxNjM1NzA5NTM3ODU5MCI+Ijx4bGlmZjpnIGlkPSJNRVNTQUdFIj4lczwveGxpZmY6Zz5cblxu4LaU4La24LanIOC2uOC3meC2uCDgtrTgt5Lgtqfgt5Tgt4Dgt5ngtrHgt4og4LeD4LaC4Lag4La94Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrog4La24LeA4LanIOC2lOC2tuC2pyDgt4Dgt5Lgt4Hgt4rgt4Dgt4/gt4Pgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9sYWJlbCIgbXNnaWQ9IjY4NjAyNjE3NTg2NjU4MjUwNjkiPiLgtq3gt4Tgt4Dgt5Tgtrvgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG91YmxlX3RhcF90b2FzdCIgbXNnaWQ9IjQ1OTUwNDY1MTU0MDAyNjg4ODEiPiLgtovgtrTgtq/gt5ngt4M6IOC3gOC3kuC3geC3j+C2veC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeEIOC2muC3lOC2qeC3jyDgtprgt5Lgtrvgt5Pgtrjgtqcg4Lav4LeZ4LeA4La74Laa4LeKIOC2reC2p+C3iuC2p+C3lCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfdGhpc19mb3JtIiBtc2dpZD0iNDYxNjc1ODg0MTE1NzgxNjY3NiI+IuC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3kuC2uiDgtrTgt5Lgtrvgt4Dgt5TgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXR1cF9hdXRvZmlsbCIgbXNnaWQ9IjcxMDM0OTUwNzAxODA1OTA4MTQiPiLgt4Pgt4rgt4DgtrrgtoLgtprgt4rigI3gtrvgt5Lgtrog4La04LeS4La74LeA4LeU4La4IOC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3NfbmFtZV9zZXBhcmF0b3IiIG1zZ2lkPSI2MzUwMTQ1MTU0Nzc5NzA2NzcyIj4iICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9uYW1lX2Zvcm1hdCIgbXNnaWQ9IjMyNjgwNDEwNTQ4OTkyMTQ5NDUiPiIkMSQyJDMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfc2VwYXJhdG9yIiBtc2dpZD0iNzQ4MzMwNzg5MzE3MDMyNDEyOSI+IiwgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X2Zvcm1hdCIgbXNnaWQ9IjQ4NzQ0NTk0NTU3ODY4MjczNDQiPiIkMSQyJDMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wcm92aW5jZSIgbXNnaWQ9IjIyMzE4MDY1NTM4NjM0MjIzMDAiPiLgtrTgt4Xgt4/gtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9wb3N0YWxfY29kZSIgbXNnaWQ9IjQ2OTY0MzA0MDc2ODkzNzcxMDgiPiLgtq3gt5DgtrTgt5Dgtr3gt4og4Laa4Lea4Lat4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfc3RhdGUiIG1zZ2lkPSI2OTg4ODk0MTk1NTIwMDQ0NjEzIj4i4Lai4Lax4La04Lav4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfemlwX2NvZGUiIG1zZ2lkPSI4Njk3NTQ0NTkyNjI3MzIyOTQ2Ij4iWklQIOC2muC3muC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2NvdW50eSIgbXNnaWQ9IjIzNzA3Mzc3MTAyMDM2Mjg5MSI+IuC2tOC3iuKAjeC2u+C3j+C2seC3iuC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2lzbGFuZCIgbXNnaWQ9IjQwMjAxMDA4NzU5ODQ2NjcwMjUiPiLgtq/gt5bgtrTgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kaXN0cmljdCIgbXNnaWQ9Ijg0MDA3MzUwNzMzOTIyNjc2NzIiPiLgtq/gt5Lgt4Pgt4rgtq3gt4rigI3gtrvgt5Lgtprgt4rgtprgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kZXBhcnRtZW50IiBtc2dpZD0iNTM0MzI3OTQ2MjU2NDQ1MzMwOSI+IuC2r+C3meC2tOC3j+C2u+C3iuC2reC2uOC3muC2seC3iuC2reC3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3ByZWZlY3R1cmUiIG1zZ2lkPSIyMDI4NDk5NDg1MDY1ODAwNDE5Ij4i4La04LeK4oCN4La74LeP4Lax4LeK4Lat4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcGFyaXNoIiBtc2dpZD0iODIwMjIwNjEwNTQ2ODgyMDA1NyI+IuC2muC3neC2u+C2veC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FyZWEiIG1zZ2lkPSIzNTQ3NDA5MDUwODg5OTUyNDIzIj4i4La04LeK4oCN4La74Lav4Lea4LeB4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfZW1pcmF0ZSIgbXNnaWQ9IjI4OTM4ODA5Nzg4MzU2OTg4MTgiPiLgtpHgtrjgt5Lgtrvgt5rgtqfgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzc3NTI2NTc3NTQwNTEwNjk4MyI+IuC2lOC2tuC2nOC3miDgt4Dgt5ngtrbgt4og4La04LeS4Lan4LeU4LeD4Lax4LeKIOC3g+C3hCDgtongtq3gt5Lgt4Tgt4/gt4Pgtrog4Laa4LeS4La64LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSI4NDYyMzc4MjI2NjAwNDM5NjU4Ij4i4La24LeK4oCN4La74LeA4LeK4LeD4La74La6IOC2seC3kOC2u+C2ueC3liDgt4Pgt5Lgtrrgtr3gt5QgVVJMIOC3g+C3hCDgt4Pgt5Lgtrrgtr3gt5Qg4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC2tOC3kuC2p+C3lOC3g+C2seC3iiDgt4Dgtr0g4LaJ4Lat4LeS4LeE4LeP4LeD4La6IOC2muC3kuC2uuC3gOC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4Lan4LeE4LaxOiDgt4Dgt5ngtrbgt4og4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC2heC3gOC3geC3iuKAjeC2uuC2reC3jyDgt4Pgtrjgtpwg4Lat4LeZ4LeA4LeZ4Lax4LeSIOC2tOC3j+C2u+C3iuC3geC3gCDgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrsg4LeA4La94LanIOC3hOC3nSDgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeK4LeA4La94LanIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La24La9IOC2seC3nOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgbXNnaWQ9IjM3MTQ3ODUxNjUyNzMzMTQ0OTAiPiLgt4Dgt5ngtrbgt4og4La04LeS4Lan4LeU4LeD4Lax4LeKIOC3g+C3hCDgtongtq3gt5Lgt4Tgt4/gt4Pgtrrgtqcg4La94LeS4LeA4LeS4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2ODI1NTI3NDY5MTQ1NzYwOTIyIj4i4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miDgtpzgtrbgtqngt48g4Laa4La7IOC2h+C2reC3kiDgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrvgtrrgt5og4LaJ4Lat4LeS4LeE4LeP4LeD4La6IOC3hOC3nSDgtrTgt5Lgtqfgt5Tgt4PgtrHgt4og4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC2r+C2reC3iuC2rSDgtrjgt5Dgtprgt5Pgtrjgtqcg4LeE4LedIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La44LeZ4La44Laf4LeS4Lax4LeKIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4La64LeSLiDgt4Pgtqfgt4TgtrE6IOC3gOC3meC2tuC3iiDgtpzgt4Dgt5rgt4Lgtqsg4LeE4LeQ4Laa4LeS4La64LeP4LeAIOC3g+C3hOC3kuC2rSDgtq3gt5ngt4Dgt5ngtrHgt5Ig4La04LeP4La74LeK4LeB4LeAIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgt4Tgt50g4LeA4LeZ4Lax4Lat4LeKIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Dgtr3gt5LgtrHgt4og4La44LeZ4La4IOC2heC3gOC3g+C2u+C2uuC2pyDgtrbgtr0g4Lax4Lec4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0OTczODk1MzEwMTQxODU1MDkiPiLgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC2huC2oOC2uuC2seC2uiDgtprgtrvgtrEg4La94LavIOC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2uyDgtongtq3gt5Lgt4Tgt4/gt4Pgtrog4LeE4LedIOC2tOC3kuC2p+C3lOC3g+C2sSDgt4Dgt5ngtrHgt4Pgt4og4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtpTgtrbgtpzgt5og4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC2r+C2reC3iuC2rSDgtrjgt5Dgtprgt5Pgtrjgtqcg4LeE4LedIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4Lax4LeS4LeC4LeK4LanIOC2uuC3meC2r+C3lOC2uOC3iiDgtrjgt5ngtrog4La34LeP4LeA4LeS4LatIOC2muC2u+C2uuC3ki4g4LeD4Lan4LeE4LaxOiDgt4Dgt5ngtrbgt4og4La24LeK4oCN4La74LeA4LeK4LeD4La7IOC2heC3gOC3geC3iuKAjeC2uuC2reC3j+C3gOC2uiDgt4Pgtrjgtpwg4Lat4LeZ4LeA4LeZ4Lax4LeSIOC2tOC3j+C2u+C3iuC3geC3gCDgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrsg4LeE4LedIOC3gOC3meC2seC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeA4LeS4LeD4LeS4Lax4LeKIOC2uOC3meC2uCDgtoXgt4Dgt4Pgtrvgtrog4La24La9IOC2nOC3kOC2seC3iuC3gOC3kuC2uiDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbGFybSIgbXNnaWQ9IjEzNzkyOTQ1NTYzNjIwOTE4MTQiPiLgt4Pgt5PgtrHgt5Tgt4Dgtprgt4og4LeD4LeQ4Laa4LeD4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWxhcm0iIG1zZ2lkPSIzMTYzOTIwMzkxNTc0NzM4NDgiPiLgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4La74LaxIOC2veC2ryDgt4Pgt5PgtrHgt5Qg4LaU4La74La94Led4LeD4LeUIOC2uuC3meC2r+C3lOC2uOC3miDgt4Pgt5PgtrHgt5Tgt4Ag4LeD4Laa4LeD4LeKIOC2muC2u+C2seC3iuC2seC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaJ4LapIOC2r+C3meC2seC3iuC2sS4g4LaH4Lat4LeQ4La44LeKIOC3g+C3k+C2seC3lCDgtpTgtrvgtr3gt53gt4Pgt5Qg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uCDgtoXgtoLgtpzgtrog4Laa4LeK4oCN4La74LeS4La64LeP4LeA4LanIOC2seC2guC3gOC3jyDgtrHgt5zgtq3gt5Lgtrbgt5Pgtrjgtqcg4LaJ4LapIOC2reC3kuC2tuC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjU1MjU2NjAwMjYwOTA5NTkwNDQiPiLgt4Tgtqwg4Lat4LeQ4La04LeR4La9IOC2keC2muC3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hZGRWb2ljZW1haWwiIG1zZ2lkPSI2NjA0NTA4NjUxNDI4MjUyNDM3Ij4i4LaU4La24Lac4LeaIOC3hOC2rCDgtq3gt5DgtrTgt5Hgtr3gt5og4LaR4LaxIOC2veC3kuC2tOC3kiDgt4Dgt5ngtq0g4LaR4LaxIOC2tOC2q+C3kuC3gOC3kuC2qSDgtpHgtprgtq3gt5Qg4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iNTk2MjIyNDE1ODk1NTI3MzkzMiI+IuC2tuC3iuKAjeC2u+C3gOC3iuC3g+C2u+C2uuC3miDgtrfgt5Yg4LaF4LeA4LeD4La7IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUdlb2xvY2F0aW9uUGVybWlzc2lvbnMiIG1zZ2lkPSIxMDgzNzQzMjM0NTIyNjM4NzQ3Ij4i4La24LeK4oCN4La74LeA4LeU4LeD4La74La64LeaIOC2t+C3liDgt4Pgt4rgtq7gt4/gtrHgt5Pgtrog4LaF4LeA4LeD4La7IOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC2heC2t+C3kuC2uOC2rSDgt4Dgt5ngtrbgt4og4LaF4Lap4LeA4LeSIOC3gOC2veC2pyDgt4Pgt4rgtq7gt4/gtrHgt5Pgtrog4Lat4Lec4La74Lat4LeU4La74LeUIOC2uuC3kOC3gOC3k+C2uOC2pyDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeZ4La74LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iNTU2ODEzOTEwMDY0NTgyOTExNyI+IuC2tOC3kOC2muC3muC2oiDgt4Pgtq3gt4rigI3gtrrgt4/gtrTgtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcGFja2FnZVZlcmlmaWNhdGlvbkFnZW50IiBtc2dpZD0iODQzNzU5MDE5MDk5MDg0MzM4MSI+IuC3g+C3iuC2ruC3j+C2tOC3kuC2rSDgtprgt5zgtqcg4LaH4Lat4LeSIOC2tOC3kOC2muC3muC2ouC2uuC2muC3iiDgt4Pgtq3gt4rigI3gtrrgt4/gtrTgtrHgtrrgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUGFja2FnZVZlcmlmaWVyIiBtc2dpZD0iNDE4Nzc4Njc5MzM2MDMyNjY1NCI+IuC2tOC3kOC2muC3muC2oiDgt4Pgtq3gt4rigI3gtrrgt4/gtrTgtprgtrrgtprgt4og4LeA4LeZ4LatIOC2tuC2s+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRQYWNrYWdlVmVyaWZpZXIiIG1zZ2lkPSIzMTgwNzQxNzczMjMzODYyMTI2Ij4i4La04LeQ4Laa4Lea4LaiIOC3g+C2reC3iuKAjeC2uuC3j+C2tOC2miDgtongtr3gt4rgtr3gt5Pgtrjgt4og4LeA4La94LanIOC2r+C2u+C2seC3iuC2seC3j+C2pyDgtongtqkg4La94La24LePIOC2r+C3mi4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4LeD4Lea4Lat4LeKIOC2heC3gOC3geC3iuKAjeC2uiDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXJpYWxQb3J0IiBtc2dpZD0iNTQ2MDgzMzI3NjU0NjMxMDc2Ij4i4LeB4LeK4oCN4La74Lea4Lar4LeS4Lac4LatIOC2tOC3nOC2pyDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2VyaWFsUG9ydCIgbXNnaWQ9IjI5OTE2Mzk5ODUyMjQ1OTgxOTMiPiJTZXJpYWxNYW5hZ2VyIEFQSSDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaF4Lax4LeU4Laa4LeK4oCN4La74La4IOC2reC3nOC2pyDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeBIOC3gOC3k+C2uOC2pyDgtrvgtrPgt4DgtrHgtrrgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0NvbnRlbnRQcm92aWRlcnNFeHRlcm5hbGx5IiBtc2dpZD0iNTA3Nzc3NDI5Nzk0MzQwOTI4NSI+IuC2tuC3j+C3hOC3kuC2uyDgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq0g4LeD4LeQ4La04La64LeU4La44LeK4Laa4La74LeU4LeA4Lax4LeKIOC3gOC3meC2rSDgtrTgt4rigI3gtrvgt4Dgt5rgt4HgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NDb250ZW50UHJvdmlkZXJzRXh0ZXJuYWxseSIgbXNnaWQ9IjQ1NDQzNDY0ODY2OTc4NTM2ODUiPiLgtoXgtrHgt4rgtq3gtrvgt4rgtpzgtq0g4LeD4La04La64Lax4LeK4Lax4Lax4LeK4LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5Pgtrjgtqcg4Lav4La74Lax4LeK4Lax4Lax4LeK4LanIOC3guC3meC2veC3iiDgtpHgtprgt5og4LeD4LeS4LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5Pgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iiDgt4PgtrPgt4Tgt48g4Laa4LeS4LeD4LeS4LeD4Lea4Lat4LeKIOC2heC2r+C3j+C3hSDgtrHgt5zgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91cGRhdGVMb2NrIiBtc2dpZD0iMzUyNzU1ODM2NjYxNjY4MDg4OSI+IuC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3k+C2uiDgtovgtrTgt4/gtoLgtpwg4La64LeA4Lat4LeK4Laa4LeP4La9IOC2muC3kuC2u+C3k+C2uOC3iiDgtrTgt4Pgt5Tgtrbgtqcg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdXBkYXRlTG9jayIgbXNnaWQ9IjE2NTU2MjU4MzIxNjY3Nzg0OTIiPiLgtovgtrTgt4/gtoLgtpzgtrog4LaL4Lat4LeK4LeB4LeK4oCN4La74Lea4Lar4LeS4Laa4La74Lar4La64LanIOC2heC2seC3iuC2reC2u+C3iuC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kyDgtrHgt5zgt4DgtrEg4La64LeF4LeSIOC2h+C2u+C2ueC3k+C2uOC2muC3iiDgt4PgtrPgt4Tgt48g4LeD4LeU4Lav4LeU4LeD4LeUIOC3gOC3meC2veC3j+C3gCDgtprgt5Tgtrjgtprgt4rgtq8g4La64Lax4LeK4LaxIOC2nOC3kOC2sSDgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgtqcg4Lat4Lec4La74Lat4LeU4La74LeUIOC2veC2tuC3j+C2r+C3k+C2uOC2pyDgtq/gtrvgtrHgt4rgtrHgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX21lc3NhZ2UiIG1zZ2lkPSI3NjczNDQ2ODcxMzkxOTU3OTAiPiLgtrbgt4rigI3gtrvgt4Dgt4rgt4Pgtrvgtrrgtqcg4La44LeZ4La4IOC2uOC3lOC2u+C2tOC2r+C2uiDgtrjgtq3gtpog4Lat4La24LePIOC2nOC3kOC2seC3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbm90bm93IiBtc2dpZD0iNjM4OTY3NTMxNjcwNjY5OTc1OCI+IuC2r+C3kOC2seC3iiDgtrHgt5zgt4Dgt5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX3JlbWVtYmVyIiBtc2dpZD0iNjQ5MTg3OTY3ODk5Njc0OTQ2NiI+IuC2uOC2reC2miDgtq3gtrbgt48g4Lac4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9uZXZlciIgbXNnaWQ9IjgyNzQzMzAyOTY3ODU4NTUxMDUiPiLgtprgt4Dgtq/gt4/gt4Dgtq3gt4og4Lax4Lec4LeA4LeaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4i4La44LeZ4La4IOC2tOC3kuC2p+C3lOC3gCDgt4Dgt5Lgt4Dgt5jgtq0g4Laa4LeS4La74LeT4La44LanIOC2lOC2tuC2pyDgtoXgt4Dgt4Pgtrsg4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRleHRfY29waWVkIiBtc2dpZD0iNDk4NTcyOTUyNDY3MDEzMTM4NSI+IuC2tOC3meC3hSDgtrTgt4Pgt5Tgtrvgt5Qg4La04LeU4LeA4La74LeU4LeA4LanIOC2tOC3kuC2p+C2tOC2reC3iiDgtprgtrvgtrEg4La94Lav4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vcmVfaXRlbV9sYWJlbCIgbXNnaWQ9IjQ2NTA5MTg5MjMwODMzMjA0OTUiPiLgtq3gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwZW5kX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjU3MjIxNDQ2MTY3NjAxNTY0MiI+IuC2uOC3meC2seC3lOC3gCsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NwYWNlX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjQxMDMyODYzOTI3MjE2MjUzNyI+InNwYWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9lbnRlcl9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI3NDMzNjI3ODUxMTEzMDk2NjgiPiLgtofgtq3gt5Tgtr3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGVfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIzNjU4MTc4MDA3MjAyNzQ4MTY0Ij4i4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoX2dvIiBtc2dpZD0iODI5ODAxNjY2OTgyMjE0MTcxOSI+IuC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc2VhcmNoIiBtc2dpZD0iNjc0OTgyNjYzOTA5ODUxMjEyMCI+IuC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fcXVlcnkiIG1zZ2lkPSI1OTExNzc4NTkzMTI1MzU1MTI0Ij4i4LeD4LeZ4LeA4LeU4La44LeKIOC3gOC3kuC2uOC3g+C3lOC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fY2xlYXIiIG1zZ2lkPSIxMzMwMjgxOTkwOTUxODMzMDMzIj4i4LeA4LeS4La44LeD4LeU4La4IOC3hOC3kuC3g+C3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2h2aWV3X2Rlc2NyaXB0aW9uX3N1Ym1pdCIgbXNnaWQ9IjI2ODg0NTAxMzMyOTc5ODM1NDIiPiLgt4Dgt5Lgtrjgt4Pgt5Tgtrgg4La64Lec4La44LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fdm9pY2UiIG1zZ2lkPSIyNDUzMjAzNjk1Njc0OTk0NDQwIj4i4LeE4LasIOC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSI3NDYwNjk0MDcwMzA5NzMwMTQ5Ij4i4LeD4LeK4La04La74LeK4LeBIOC2muC3kuC2u+C3k+C2uOC3meC2seC3iiDgtpzgt4Dgt5rgt4Lgtqvgtrog4LeD4La24La9IOC2muC2u+C2seC3iuC2sSDgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2V4cGxvcmVfYnlfdG91Y2hfd2FybmluZ19tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NjU1ODg3NTM5MDg5OTEwNTc3Ij4i4LeD4LeK4La04La74LeK4LeB4La6IOC3gOC3meC2reC3kuC2seC3iiDgtpzgt4Dgt5rgt4Lgtqvgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iQUNDRVNTSUJJTElUWV9TRVJWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IOC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtrouIOC3g+C3iuC2tOC2u+C3iuC3geC2uiDgt4Dgt5ngtq3gt5LgtrHgt4og4Lac4LeA4Lea4LeC4Lar4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgt4Dgt5LgtqcsIOC2lOC2tuC2nOC3miDgtofgtp/gt5Lgtr3gt5Lgt4Dgtr3gtqcg4La04LeE4LeFIOC3gOC3kuC3g+C3iuC2reC2uyDgtofgt4Pgt5Lgtrog4LeE4LedIOC2tuC3kOC2veC3kuC2uiDgt4Tgt5Dgtpog4LeE4LedIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgt4Pgtrjgtpwg4LaF4Lax4LeK4Lat4La74LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kyDgt4Dgt5Pgtrjgtqcg4LaJ4LaC4Lac4LeS4Lat4LeSIOC3g+C3kuC2r+C3lCDgtprgt4Ug4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI3MDgxOTk2NzI4NTIzNzMxOTUiPiLgt4Pgt4rgtrTgtrvgt4rgt4Hgtrog4LeA4LeZ4Lat4LeS4Lax4LeKIOC2nOC3gOC3muC3guC2q+C2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Laa4LeS4La74LeT4La44LanIDx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4g4LanIOC2heC3gOC3geC3iuKAjeC2uuC2uuC3ki4g4LeD4LeK4La04La74LeK4LeB4La6IOC3gOC3meC2reC3kuC2seC3iiDgtpzgt4Dgt5rgt4Lgtqvgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC3gOC3kuC2pywg4LaU4La24Lac4LeaIOC2h+C2n+C3kuC2veC3kuC3gOC2veC2pyDgtrTgt4Tgt4Ug4LeA4LeS4LeD4LeK4Lat4La7IOC2h+C3g+C3kuC2uiDgt4Tgt50g4La24LeQ4La94LeS4La6IOC3hOC3kOC2miDgt4Tgt50g4Lav4LeU4La74Laa4Lau4Lax4La6IOC3g+C2uOC2nCDgtoXgtrHgt4rgtq3gtrvgt4og4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeTIOC3gOC3k+C2uOC2pyDgtongtoLgtpzgt5Lgtq3gt5Ig4LeD4LeS4Lav4LeUIOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI3Mzk2Mzg0NTA4OTUzNzc5OTI1Ij4i4La44LeP4LeDIDEg4Laa4LanIOC2tOC3meC2uyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJlZm9yZU9uZU1vbnRoRHVyYXRpb25QYXN0IiBtc2dpZD0iOTA5MTM0NTQ2ODM2NDk5ODI2Ij4i4La44LeP4LeDIDEg4Laa4LanIOC2tOC3meC2uyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX3NlY29uZHNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDg2OTg3MDA1NjU0Nzg5NjAxMSI+IuC2reC2reC3iuC2tOC2uyAxIOC2muC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM5MDM3MDY4MDQzNDk1NTYzNzkiPiLgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX21pbnV0ZXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzMwNjc4NzQzMzA4ODgxMDE5MSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCAxIOC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIxNzY5NDIwMDg5MTU0NTUxMTYiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0ibnVtX2hvdXJzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjkxNTA3OTc5NDQ2MTA4MjE4NDkiPiLgtrTgt5DgtrogMSDgtprgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyNDY3MjczMjM5NTg3NTg3NTY5Ij4i4La04LeQ4La6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9Imxhc3RfbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjMwNjk5OTI4MDgxNjQzMTgyNjgiPiLgtoXgtrHgt4rgtq3gt5Lgtrgg4Lav4LeA4LeD4LeKIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ibGFzdF9tb250aCIgbXNnaWQ9IjM5NTkzNDY3Mzk5NzkwNTU0MzIiPiLgtoXgt4Dgt4Pgt4/gtrEg4La44LeP4LeD4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkZXIiIG1zZ2lkPSI1MjExOTc1MDIyODE1NTU0ODQwIj4i4La04La74LarIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJudW1fZGF5c19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NjEzNTg1MzQzOTgxMTU4MjAiPiLgtorgtrrgt5oiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI0Nzk1ODY0NjYxNTMzMTQ2MzMiPiLgtq/gt5LgtrEgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX3NlY29uZHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIyNzI5NzQ1NTYwOTU0OTA1MTAyIj4i4Lat4Lat4LeK4La04La7IDEg4Laa4LeS4Lax4LeKIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMjQxOTI2MTE2NDQzOTc0Njg3Ij4i4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC2r+C3kyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX21pbnV0ZXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NzkzMDk1MjUxMzI1MjAwMzk1Ij4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUIDEg4Laa4Lav4LeTIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzMzMwNzEzOTM2Mzk5NDQ4NzQ5Ij4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImluX251bV9ob3VycyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjcxNjQzNTMzNDI0Nzc3Njk5OTkiPiLgtrTgt5DgtrogMSDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDcyOTA2NzczNTM3MjczODkiPiLgtrTgt5DgtrogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2reC3lOC3hSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iaW5fbnVtX2RheXMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1NDEzMDg4NzQzMDA5ODM5NTE4Ij4i4LeE4LeZ4LanIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1MTA5NDQ5Mzc1MTAwOTUzMjQ3Ij4i4Lav4LeS4LaxIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9udW1fc2Vjb25kc19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxODQ5MDM2ODQwMjAwMDY5MTE4Ij4i4Lat4Lat4LeK4La04La7IDEg4Laa4LanIOC2tOC3meC2uyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzY5OTE2OTM2NjY1MDkzMDQxNSI+IuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX21pbnV0ZXNfYWdvIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjM2MTQ5MDE0NzExMzg3MTU0NSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCAxIOC2muC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg1MTE2NDk2ODU5NzE1MDcxMCI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICA8cGx1cmFscyBuYW1lPSJhYmJyZXZfbnVtX2hvdXJzX2FnbyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ3OTYyMTIwMzk3MjQ3MjIxMTYiPiLgtrTgt5DgtrogMSDgtprgtqcg4La04LeZ4La7IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2ODg5OTcwNzQ1NzQ4NTM4OTAxIj4i4La04LeQ4La6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9udW1fZGF5c19hZ28iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4NDYzMTYxNzExNDkyNjgwMzA5Ij4i4LaK4La64LeaIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNDUzMzQyNjM5NjE2NDgxMTkxIj4i4Lav4LeS4LaxIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2pyDgtrTgt5ngtrsiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NDIyMjUzNzA3OTUwNjYyOTkiPiLgtq3gtq3gt4rgtrTgtrsgMSDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDk1ODgwMTA4ODI1ODA1MTA4Ij4i4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fbWludXRlcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU2Mjc4NjE0OTkyODI4NDg3OCI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCAxIOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQyMTYxMTMyOTI3MDY1Njg3MjYiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2reC3lOC3hSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iYWJicmV2X2luX251bV9ob3VycyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNzQ3MDgxMTgxMjQwNDUyNDYiPiLgtrTgt5DgtrogMSDgtprgt4og4Lat4LeU4LeFIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIzNzA1MzczNzY2Nzk4MDEzNDA2Ij4i4La04LeQ4La6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt5Tgt4UiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgIDxwbHVyYWxzIG5hbWU9ImFiYnJldl9pbl9udW1fZGF5cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjIxNzg1NzYyNTQzODU3Mzk4NTUiPiLgt4Tgt5ngtqciPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjI5NzMwNjI5NjgwMzgzNTU5OTEiPiLgtq/gt5LgtrEgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2reC3lOC3hSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl9kYXRlIiBtc2dpZD0iOTA5Mzk0OTc1Nzc1NzQ0NTExNyI+Ijx4bGlmZjpnIGlkPSJEQVRFIj4lczwveGxpZmY6Zz4g4LeA4LaxIOC2r+C3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl90aW1lIiBtc2dpZD0iNTUwNjgzMTI0NDI2MzA4Mzc5MyI+Ijx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4g4LanIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlcG9zaXRpb25fZm9yX3llYXIiIG1zZ2lkPSI1MDQwMzk1NjQwNzExODY3MTc3Ij4iPHhsaWZmOmcgaWQ9IllFQVIiPiVzPC94bGlmZjpnPiDgtq3gt5Tgt4UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXkiIG1zZ2lkPSI4MTQ0MTk1Nzc2MDU4MTE5NDI0Ij4i4Lav4LeA4LeDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5cyIgbXNnaWQ9IjQ3NzQ1NDc2NjEwMjEzNDQ2MDIiPiLgtq/gt5LgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyIiBtc2dpZD0iMjEyNjc3MTkxNjQyNjE4OTQ4MSI+IuC2tOC3kOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJzIiBtc2dpZD0iODk0NDI0MDA1MjY2ODUyOTkzIj4i4La04LeQ4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlIiBtc2dpZD0iOTE0ODg3ODY1NzcwMzc2OTg2OCI+Im1pbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZXMiIG1zZ2lkPSI1NjQ2MDAxMDA1ODI3MDM0NTA5Ij4i4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kIiBtc2dpZD0iMzE4NDIzNTgwODAyMTQ3OCI+IuC2reC2reC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlY29uZHMiIG1zZ2lkPSIzMTYxNTE1MzQ3MjE2NTg5MjM1Ij4i4Lat4Lat4LeK4La04La7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VlayIgbXNnaWQ9IjU2MTc5NjE1MzcxNzMwNjE1ODMiPiLgt4Pgtq3gt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWVrcyIgbXNnaWQ9IjY1MDk2MjM4MzQ1ODM5NDQ1MTgiPiLgt4Pgtq3gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyIiBtc2dpZD0iNDAwMTExODIyMTAxMzg5MjA3NiI+IuC2heC3gOC3lOC2u+C3lOC2r+C3iuC2ryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJzIiBtc2dpZD0iNjg4MTU3NzcxNzk5MzIxMzUyMiI+IuC2heC3gOC3lOC2u+C3lOC2r+C3lCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fc2Vjb25kcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY5NjIwMTU1MjgzNzI5Njk0ODEiPiLgtq3gtq3gt4rgtrTgtrsgMSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTg4NjEwNzc2NjU3NzE2Njc4NiI+IuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25fbWludXRlcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ5MTU0MTQwMDI1NDYwODU2MTciPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgMSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMzE2NTE4NzE2OTIyNDkwODc3NSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0iZHVyYXRpb25faG91cnMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4OTE3NDY3NDkxMjQ4ODA5OTcyIj4i4La04LeQ4La6IDEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjM4NjM5NjI4NTQyNDY3NzM5MzAiPiLgtrTgt5DgtrogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4g4Laa4LeKIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX3RpdGxlIiBtc2dpZD0iMzUzNDUwOTEzNTQzODM1MzA3NyI+IuC3gOC3k+C2qeC3kuC2uuC3nSDgtpzgt5Dgtqfgtr3gt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF9pbnZhbGlkX3Byb2dyZXNzaXZlX3BsYXliYWNrIiBtc2dpZD0iMzE4NjY3MDMzNTkzODY3MDQ0NCI+IuC2uOC3miDgt4Dgt5Pgtqngt5Lgtrrgt53gt4Ag4La44LeZ4La4IOC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtrTgt4rigI3gtrvgt4Dgt4/gt4TgtrHgtrog4LeD4Laz4LeE4LePIOC3gOC2veC2guC2nOC3lCDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iVmlkZW9WaWV3X2Vycm9yX3RleHRfdW5rbm93biIgbXNnaWQ9IjM0NTA0MzkxNTUxODc4MTAwODUiPiLgtrjgt5ngtrgg4LeA4LeT4Lap4LeS4La64Led4LeAIOC2sOC3j+C3gOC2seC2uiDgtprgt4Ug4Lax4Lec4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl9idXR0b24iIG1zZ2lkPSIyODIyMjM4MjE1MTAwNjc5NTkyIj4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpdmVfdGltZSIgbXNnaWQ9IjE4MTg1NTcxNzc4Mjk0MTE0MTciPiI8eGxpZmY6ZyBpZD0iREFURSI+JTEkczwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vb24iIG1zZ2lkPSI3MjQ1MzUzNTI4ODE4NTg3OTA4Ij4i4La44Law4LeK4oCN4La64LeE4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iTm9vbiIgbXNnaWQ9IjMzNDIxMjc3NDUyMzAwMTMxMjciPiLgtrjgtrDgt4rigI3gtrrgt4/gt4TgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaWRuaWdodCIgbXNnaWQ9IjcxNjYyNTk1MDg4NTA0NTc1OTUiPiLgtrjgtrDgt4rigI3gtrrgtrgg4La74LeP4Lat4LeK4oCN4La74LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iTWlkbmlnaHQiIG1zZ2lkPSI1NjMwODA2OTA2ODk3ODkyMjAxIj4i4La44Law4LeK4oCN4La64La4IOC2u+C3j+C2reC3iuKAjeC2u+C3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsYXBzZWRfdGltZV9zaG9ydF9mb3JtYXRfbW1fc3MiIG1zZ2lkPSI0NDMxNTU1OTQzODI4NzExNDczIj4iPHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUxJDAyZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUyJDAyZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGFwc2VkX3RpbWVfc2hvcnRfZm9ybWF0X2hfbW1fc3MiIG1zZ2lkPSIxODQ2MDcxOTk3NjE2NjU0MTI0Ij4iPHhsaWZmOmcgaWQ9IkhPVVJTIj4lMSRkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTIkMDJkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iU0VDT05EUyI+JTMkMDJkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdEFsbCIgbXNnaWQ9IjY4NzY1MTg5MjU4NDQxMjkzMzEiPiLgt4Pgt5Lgtrrgtr3gt4rgtr0g4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuC2muC2tOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4La04LeS4Lan4La04Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuC2heC2veC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4La04LeK4oCN4La74Lat4LeS4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC2u+C2seC3iuC2sS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i4La04LeZ4LeFIOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLgtrTgt5ngt4Ug4Lat4Lea4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IuC3geC2tuC3iuC2ryDgtprgt53gt4Lgtrrgtqcg4LaR4Laa4Lat4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4La44Laa4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5wdXRNZXRob2QiIG1zZ2lkPSIxNjUzNjMwMDYyMzA0NTY3ODc5Ij4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVkaXRUZXh0TWVudVRpdGxlIiBtc2dpZD0iNDkwOTEzNTU2NDk0MTgxNTQ5NCI+IuC2tOC3meC3hSDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4DgtrHgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RpdGxlIiBtc2dpZD0iNTU3NjI3MjQ5NjM2NTY4NDgzNCI+IuC2huC2oOC2uuC2seC2uiDgtongtqkg4La04LeK4oCN4La74La44LeP4Lar4La6IOC2heC2qeC3lCDgt4Dgt5Mg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190ZXh0IiBtc2dpZD0iNjY0MDUwNTgxNzYxNzQxNDM3MSI+IuC3g+C2uOC3hOC2uyDgtrTgtq/gt4rgtrDgtq3gt5Ig4Laa4LeP4La74LeK4La64La64Lax4LeKIOC2muC3iuKAjeC2u+C3kuC2uuC3jyDgtrHgt5zgtprgtrvgtrHgt5Qg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX3J1bm5pbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODcxODMzNTEyMTA2MDc4NzkxNCI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g4Law4LeP4LeA4Lax4La6IOC3gOC3miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iNDY1MzU4Njk0Nzc0NzMzMDA1OCI+IuC3gOC3kOC2qeC3kuC2tOC3lOC2uyDgtq3gt5zgtrvgtq3gt5Tgtrvgt5Qg4LeE4LedIOC2uuC3meC2r+C3lOC2uCDgtrHgt5Dgt4Dgtq3gt5Pgtrgg4LeD4Laz4LeE4LePIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2siIG1zZ2lkPSI1OTcwMDYwNDMwNTYyNTI0OTEwIj4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNjQ0MjU2MDU3MTI1OTkzNTEzMCI+IuC2heC3gOC2veC2guC2nOC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZXMiIG1zZ2lkPSI1MzYyOTgyMzAzMzM3OTY5MzEyIj4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm8iIG1zZ2lkPSI1MTQxNTMxMDQ0OTM1NTQxNDk3Ij4i4LaF4LeA4La94LaC4Lac4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpYWxvZ19hbGVydF90aXRsZSIgbXNnaWQ9IjIwNDk2NTg3MDg2MDkwNDMxMDMiPiLgtoXgt4DgtrDgt4/gtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2FkaW5nIiBtc2dpZD0iNzkzMzY4MTI2MDI5NjAyMTE4MCI+IuC2tOC3luC2u+C2q+C2uiDgt4Dgt5ngtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29uIiBtc2dpZD0iMTU0NDY4Mjc1NTUxNDQ5NDI5OCI+IuC3g+C2muC3iuKAjeC2u+C3k+C2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb2ZmIiBtc2dpZD0iNjgxNTg3MDM4Njk3MjgwNTgzMiI+IuC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aGljaEFwcGxpY2F0aW9uIiBtc2dpZD0iNDUzMzE4NTk0NzA2NDc3MzM4NiI+IuC2tOC3hOC2rSDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4Laa4LeK4oCN4La74LeS4La64LeP4LeAIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNVc2UiIG1zZ2lkPSI0NTgzMDE4MzY4MDAwNjEwNDM4Ij4i4La44LeZ4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gCDgt4PgtrPgt4Tgt48g4LeD4LeU4La04LeU4La74LeU4Lav4LeK4Lav4LeZ4Lax4LeKIOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4LeD4LeQ4Laa4LeD4LeT4La44LeKICZndDsg4La64LeZ4Lav4LeU4La44LeKICZndDsg4La24LeP4Lac4LeQ4Lax4LeT4La44LeKIOC2reC3lOC3hSDgtofgtq3gt5Ig4LeD4LeU4La04LeU4La74LeU4Lav4LeK4LavIOC3hOC3kuC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlQWN0aXZpdHkiIG1zZ2lkPSI3NDg2ODc2MTQ3NzUxODAzMzMzIj4i4Laa4LeK4oCN4La74LeS4La64LeP4LeA4Laa4LeKIOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZVVzYkFjdGl2aXR5IiBtc2dpZD0iNjg5NDc0ODQxNjA3MzU4MzUwOSI+IlVTQiDgtovgtrTgt4/gtoLgtpzgtrog4LeD4Laz4LeE4LePIOC2uuC3meC2r+C3lOC2uOC2muC3iiDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub0FwcGxpY2F0aW9ucyIgbXNnaWQ9IjI5OTE4MTQyNzM5MzY1MDQ2ODkiPiLgtrjgt5ngtrgg4Laa4LeK4oCN4La74LeS4La64LeP4LeAIOC3g+C3kuC2r+C3lCDgtprgt5Lgtrvgt5Pgtrjgtqcg4Laa4LeS4LeD4LeS4Lav4LeUIOC2uuC3meC2r+C3lOC2uOC2muC2pyDgtrHgt5zgt4Tgt5Dgtprgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWVycl90aXRsZSIgbXNnaWQ9IjE5MDU4MDA1NjAzMTcxMzc3NTIiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWVycl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjkzMjYyODQ4ODAxMzA5Mjc3NiI+IuC2heC3gOC3j+C3g+C2seC3j+C3gOC2seC3iuC2rSDgtr3gt5ngt4MgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgtrHgt5Dgt4Dgtq3gt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFlcnJfcHJvY2VzcyIgbXNnaWQ9IjQ1MDcwNTg5OTcwMzU2OTc1NzkiPiLgtoXgt4Dgt4/gt4PgtrHgt4/gt4DgtrHgt4rgtq0g4La94LeZ4LeDLCA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4g4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeS4La6IOC2seC2reC2uyDgt4Dgt5Lgtqvgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX3RpdGxlIiBtc2dpZD0iNDM1MTk0ODQ4MTQ1OTEzNTcwOSI+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfYWN0aXZpdHlfYXBwbGljYXRpb24iIG1zZ2lkPSIxOTA0NDc3MTg5MDU3MTk5MDY2Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMiRzPC94bGlmZjpnPiDgtrTgt4rigI3gtrvgtq3gt5LgtqDgt4/gtrsg4Lax4Lec4Lav4Laa4LeK4LeA4La64LeSLlxuXG7gtpTgtrbgtqcg4LaR4La6IOC2seC2reC2uyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+Ijx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La4IOC2tOC3iuKAjeC2u+C2reC3kuC2oOC3j+C2uyDgtrHgt5zgtq/gtprgt4rgt4Dgtrrgt5IuXG5cbuC2keC2uiDgt4Dgt4Pgt48g4Lav4LeQ4La44LeT4La44LanIOC2lOC2tuC2pyDgtoXgt4Dgt4Hgt4rigI3gtrrgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FwcGxpY2F0aW9uX3Byb2Nlc3MiIG1zZ2lkPSI4OTQxNzU3NjA3MzQwNDgxMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgtrTgt4rigI3gtrvgtq3gt5LgtqDgt4/gtrsg4Lax4Lec4Lav4Laa4LeK4LeA4La64LeSLiDgtpHgtrog4LeA4LeD4LePIOC2r+C3kOC2uOC3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9wcm9jZXNzIiBtc2dpZD0iNjUxMzIwOTg3NDg4MDUxNzEyNSI+Ijx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgtr3gt5Lgtrog4La04LeK4oCN4La74Lat4LeS4Lag4LeP4La7IOC2seC3nOC2r+C2muC3iuC3gOC2uuC3ki5cblxu4LaU4La24LanIOC2keC2uiDgtrHgtq3gtrsg4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9jbG9zZSIgbXNnaWQ9IjgzNDYwNzIwOTQ1MjEyNjU2MDUiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXBvcnQiIG1zZ2lkPSI0MDYwMjE4MjYwOTg0Nzk1NzA2Ij4i4LeA4LeP4La74LeK4Lat4LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FpdCIgbXNnaWQ9IjcxNDcxMTgyMTcyMjYzMTc3MzIiPiLgtrvgt5DgtrPgt5Mg4LeD4LeS4Lan4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VicGFnZV91bnJlc3BvbnNpdmUiIG1zZ2lkPSIzMjcyNzU4MzUxMTM4MTIyNTAzIj4i4La04LeS4Lan4LeU4LeAIOC2tOC3iuKAjeC2u+C2reC3kuC2oOC3j+C2uyDgtrHgt5zgtq/gtprgt4rgt4DgtrEg4Lat4Lat4LeK4LeA4La64LanIOC2tOC2reC3iuC3gOC3kyDgtofgtq0uXG5cbuC2lOC2tuC2pyDgtpHgtrog4LeA4LeQ4LeD4LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE1NDc5OTc3ODA1MDY3MTM1ODEiPiLgtrrgt5ngtq/gt5Tgtrgg4Lax4LeQ4LeA4LatIOC3hOC2u+C3gOC3jyDgtrrgt4Dgt48g4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfcmVwbGFjZSIgbXNnaWQ9IjYyMDI0OTg5NDk5NzAyODE0MTIiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOC2r+C3kOC2seC3iiDgtrDgt4/gt4DgtrHgtrog4LeA4LeZ4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgtrjgt5Tgtr3gt5LgtrHgt4rgtrgg4LaF4La74La54LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2NhbGUiIG1zZ2lkPSIzMjAyOTU1NjY3Njc1OTQ0NDk5Ij4i4La04La74LeS4La44LeP4Lar4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3Nob3ciIG1zZ2lkPSI0MDEzODc4ODc2NDg2NjU1ODkyIj4i4LeD4LeQ4La44LeA4LeS4Lan4La4IOC2tOC3meC2seC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+IuC2tOC2r+C3iuC2sOC2reC3kiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4Lat4LeU4LeFIOC2uOC3meC2uiDgtrHgt5Dgt4Dgtq0g4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC2u+C2seC3iuC2sSAmZ3Q7IOC2uuC3meC2r+C3lOC2uOC3iiAmZ3Q7IOC2tuC3j+C2nOC2seC3iuC2seC3jyDgtr3gtq/gt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic212X2FwcGxpY2F0aW9uIiBtc2dpZD0iMzMwNzIwOTE5MjE1NTQ0MjgyOSI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g4La64LeZ4Lav4LeU4La4ICg8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTIkczwveGxpZmY6Zz4g4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeS4La6KSDgtpHgt4Tgt5IgU3RyaWN0TW9kZSDgtprgt5zgtrHgt4rgtq/gt5rgt4Pgt5Lgtrog4LaL4La94LeK4La94LaC4Lad4Lax4La6IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic212X3Byb2Nlc3MiIG1zZ2lkPSI1MTIwMzk3MDEyMDQ3NDYyNDQ2Ij4iPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kuC2uiDgtpHgt4Tgt5IgU3RyaWN0TW9kZSDgtprgt5zgtrHgt4rgtq/gt5rgt4Pgt5Lgtrog4LaL4La94LeK4La94LaC4Lad4Lax4La6IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfdGl0bGUiIG1zZ2lkPSIxNTg0MTkyMjg1NDQxNDA1NzQ2Ij4iQW5kcm9pZCDgtovgtq3gt4rgt4Hgt4rigI3gtrvgt5rgtqvgt5Ig4LeA4LeZ4La44LeS4Lax4LeKIOC2tOC3gOC2reC3ky4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX2FwayIgbXNnaWQ9Ijc5MDQwNDI2ODIxMTE1MjYxNjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC3gOC3kOC2seC3kiDgtrrgt5ngtq/gt5TgtrjgtrTgt4rigI0g4La74LeB4LeD4LeK4LatIOC2muC2u+C2uOC3kuC2seC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19zdGFydGluZ19hcHBzIiBtc2dpZD0iNDUxNDY0NTE2MzQ2OTI2NzEzIj4i4La64LeZ4Lav4LeU4La44LeKIOC2huC2u+C2uOC3iuC2tyDgtprgtrvgtrjgt5LgtrHgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfY29tcGxldGUiIG1zZ2lkPSIxNDA1OTU0NzU0MTEyOTk5MjI5Ij4i4LaH4La74La54LeU4La4IOC2heC3gOC3g+C3j+C2sSDgtprgtrvgtrjgt5LgtrHgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbiIgbXNnaWQ9IjkwODcwNjM5ODU3NzY2MjYxNjYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lMSRzPC94bGlmZjpnPiDgtrDgt4/gt4DgtrHgtrog4LeA4LeZ4La44LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbl9kZXRhaWwiIG1zZ2lkPSIxNzIxNjgxNzQxNjE3ODk4ODY1Ij4i4La64LeZ4Lav4LeU4La44LanIOC2uOC3j+C2u+C3lCDgt4Dgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90aXRsZSIgbXNnaWQ9IjcxNTMxNjcwODU0MDMyOTgxNjkiPiLgtrrgt5ngtq/gt5Tgtrjgt4og4La44LeP4La74LeUIOC3gOC2seC3gOC3j+C2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGV4dCIgbXNnaWQ9IjcwMjI2MzE5MjQ1MzQ0MDY0MDMiPiLgtoXgtr3gt5Tgtq3gt4og4La64LeZ4Lav4LeU4La44Laa4LeKIOC2huC2u+C2uOC3iuC2tyDgtprgt5Lgtrvgt5Pgtrjgtqcg4La04LeZ4La7IOC2reC3gOC2uOC2reC3iiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgt5ngt4Tgt5Ig4La64LeZ4Lav4LeZ4La44LeS4Lax4LeKIOC2tOC3gOC2reC3kuC2sSDgtrrgt5ngtq/gt5Tgtrgg4Lax4LeQ4LeA4LeQ4Lat4LeK4LeA4LeS4La6IOC2uuC3lOC2reC3lOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2FjdGlvbiIgbXNnaWQ9IjQ5MzEyOTE3MjIzODU2NjI4MiI+Ijx4bGlmZjpnIGlkPSJPTERfQVBQIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5ngtq0g4LaG4La04LeD4LeUIOC2uuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDgyMDk0Mjc1NTgwMzU4MDQ5Ij4i4Lax4LeAIOC2uuC3meC2r+C3lOC2uCDgtobgtrvgtrjgt4rgtrcg4Lax4Lec4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ld19hcHBfYWN0aW9uIiBtc2dpZD0iNTQ3Mjc1NjkyNjk0NTQ0MDcwNiI+Ijx4bGlmZjpnIGlkPSJPTERfQVBQIj4lMSRzPC94bGlmZjpnPiDgtoXgtrvgtrngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZXdfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTkzMjE0MzU5ODM3MTUzNzM0MCI+IuC3g+C3lOC2u+C3kOC2muC3k+C2uOC2muC3kuC2seC3iiDgtq3gt5zgtrvgt4Ag4La04La74LarIOC2uuC3meC2r+C3lOC2uCDgtrHgt4Dgtq3gt4rgt4DgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VuZFRleHQiIG1zZ2lkPSI1MjA5ODc0NTcxOTU5NDY5MTQyIj4i4La04LeZ4LeFIOC3g+C2s+C3hOC3jyDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Ag4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX3Jpbmd0b25lIiBtc2dpZD0iNjg4NTQyMTQwNjg0NTczNDY1MCI+IuC3hOC2rCDgtrHgtp/gtrHgtrrgt5og4LeB4La24LeK4Lav4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljIiBtc2dpZD0iNTQyMTY1MTE1NzEzODYyODE3MSI+IuC2uOC3j+C2sOC3iuKAjeC2uiDgt4Hgtrbgt4rgtq/gtrog4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfcGxheWluZ190aHJvdWdoX2JsdWV0b290aCIgbXNnaWQ9IjkxNjU5ODQzNzkzOTQ2MDE1MzMiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeE4La74LeE4LePIOC2sOC3j+C3gOC2seC2uiDgt4Dgt5ngtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfbXVzaWNfaGludF9zaWxlbnRfcmluZ3RvbmVfc2VsZWN0ZWQiIG1zZ2lkPSI4MzEwNzM5OTYwOTczMTU2MjcyIj4i4Lax4LeS4LeE4LasIOC2u+C3kuC2nOC3kuC2seC3iiDgtqfgt53gtrHgtrrgtprgt4og4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2NhbGwiIG1zZ2lkPSIzOTQxNjgwMDQxMjgyNzg4NzExIj4i4LaH4La44Lat4LeU4La4LeC2reC3lOC3hSDgt4Hgtrbgt4rgtq8g4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2JsdWV0b290aF9jYWxsIiBtc2dpZD0iMjAwMjg5MTkyNjM1MTE1MTUzNCI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgtofgtrjgtq3gt5Tgtrgt4Lat4LeU4LeFIOC3geC2tuC3iuC2ryDgtq3gt4rigI3gtrvgt5Pgt4Dgtq3gt4/gt4DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYWxhcm0iIG1zZ2lkPSIxOTg1MTkxNjE2MDQyNjg5MTAwIj4i4LeD4LeT4Lax4LeU4LeA4LeaIOC3geC2tuC3iuC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIyNDIyMjY1NjU2NzQ0Mjc2NzE1Ij4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeaIOC3geC2tuC3iuC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV91bmtub3duIiBtc2dpZD0iMTQwMDIxOTY2OTc3MDQ0NTkwMiI+IuC3geC2tuC3iuC2r+C2uiDgtq3gt4rigI3gtrvgt5Pgt4Dgtq3gt4/gt4DgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ibHVldG9vdGgiIG1zZ2lkPSI2NTM4ODk0MTc3MjU1OTY0MzQwIj4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3geC2tuC3iuC2ryDgtq3gt4rigI3gtrvgt5Pgt4Dgtq3gt4/gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9yaW5nZXIiIG1zZ2lkPSIzMzI2MDAzODQ3MDA2MTYyNDk2Ij4i4La74LeS4Lax4LeK4Lan4Led4Lax4La64LeaIOC3geC2tuC3iuC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2luY2FsbCIgbXNnaWQ9Ijg4OTAwNzMyMTgxNTQ1NDMzOTciPiLgtofgtrjgtq3gt5Tgtrjgt4og4LeB4La24LeK4Lav4La6IOC2reC3iuKAjeC2u+C3k+C3gOC2reC3j+C3gOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX21lZGlhIiBtc2dpZD0iNDIxNzMxMTcxOTY2NTE5NDIxNSI+IuC2uOC3j+C2sOC3iuKAjeC2uiDgt4Hgtrbgt4rgtq/gtrog4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbm90aWZpY2F0aW9uIiBtc2dpZD0iNzA0NDk4NjU0NjQ3NzI4MjI3NCI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3miDgt4Hgtrbgt4rgtq8g4Lat4LeK4oCN4La74LeT4LeA4Lat4LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdCIgbXNnaWQ9IjM3ODk3NTg5ODAzNTc2OTY5MzYiPiLgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt5Qg4La74LeS4Lax4LeK4Lan4Led4Lax4La6IOC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX2RlZmF1bHRfd2l0aF9hY3R1YWwiIG1zZ2lkPSI4MTI5NTYzNDgwODk1OTkwMzcyIj4i4LeD4LeU4La04LeU4La74LeU4Lav4LeUIOC2u+C3kuC2seC3iuC2p+C3neC2seC2uiAoPHhsaWZmOmcgaWQ9IkFDVFVBTF9SSU5HVE9ORSI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfc2lsZW50IiBtc2dpZD0iNzkzNzYzNDM5MjQwODk3NzA2MiI+IuC2muC3kuC3g+C3kuC3gOC2muC3iiDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9waWNrZXJfdGl0bGUiIG1zZ2lkPSIzNTE1MTQzOTM5MTc1MTE5MDk0Ij4i4La74LeS4Lac4LeS4Lax4LeK4Lan4Led4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfdW5rbm93biIgbXNnaWQ9IjU0Nzc5MTk5ODg3MDE3ODQ3ODgiPiLgtrHgt5zgtq/gtrHgt4rgtrHgt48g4La74LeS4Lax4LeK4Lan4Led4Lax4La6Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJ3aWZpX2F2YWlsYWJsZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY2NTQxMjM5ODc0MTgxNjg2OTMiPiJXaS1GaSDgtqLgt4/gtr3gtrrgtprgt4og4Lat4LeS4La24LeaIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0MTkyNDI0NDg5MTY4Mzk3Mzg2Ij4iV2ktRmkg4Lai4LeP4La9IOC2h+C2rSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgPHBsdXJhbHMgbmFtZT0id2lmaV9hdmFpbGFibGVfZGV0YWlsZWQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIxNjM0MTAxNDUwMzQzMjc3MzQ1Ij4i4LeA4LeS4LeA4LeY4LatIFdpLUZpIOC2ouC3j+C2veC2uiDgtr3gtrbgt4/gtpzgtq0g4LeE4LeQ4LaaIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3OTE1ODk1MzIzNjQ0MjkyNzY4Ij4i4LeA4LeS4LeA4LeY4LatIFdpLUZpIOC2ouC3j+C2vSDgtq3gt5Lgtrbgt5oiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iNDAyOTQ4OTcxNjYwNTI1NTM4NiI+IldpLUZpIOC2ouC2veC2uuC2pyDgtrTgt5TgtrvgtrHgtrog4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV0d29ya19hdmFpbGFibGVfc2lnbl9pbiIgbXNnaWQ9Ijg0OTUxNTU1OTMzNTgwNTQ2NzYiPiLgtqLgt4/gtr3gtrrgtqcg4La04LeU4La74Lax4La6IOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luX2RldGFpbGVkICg4MDAwMDgxOTQxNDQ3OTc2MTE4KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkIiBtc2dpZD0iNzkwNDIxNDIzMTY1MTU0NjM0NyI+IldpLUZpIOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeS4La6IOC2seC3nOC3hOC3kOC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfd2F0Y2hkb2dfbmV0d29ya19kaXNhYmxlZF9kZXRhaWxlZCIgbXNnaWQ9IjU1NDg3ODA3NzY0MTgzMzI2NzUiPiIg4Lav4LeU4La24La9IOC2heC2seC3iuC2reC2u+C3iuC2ouC3j+C2vSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Dgtrrgtprgt4og4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijk3NjExNzgyNjU5MzI0NTE3Ij4i4LaN4Lai4LeUIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdHVybm9uX21lc3NhZ2UiIG1zZ2lkPSIyOTA5MjUwOTQyMjk5NjI3MjQ0Ij4i4LaN4Lai4LeUIFdpLUZpIOC2huC2u+C2uOC3iuC2tyDgtprgtrvgtrHgt4rgtrEuIOC2uOC3meC2uiBXaS1GaSDgt4Pgt5rgt4Dgt4/gtq/gt4/gtrrgtpov4LeE4Lec4Lan4LeK4LeD4LeK4La04Lec4Lan4LeKIOC2keC2miDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeUIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mYWlsZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NjM2Njk2Nzc5MzU2MjMwODQiPiLgto3gtqLgt5QgV2ktRmkg4LaG4La74La44LeK4La3IOC2muC3hSDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMDY4MzIxODgxNjczNzM0ODg2Ij4iV2ktRmkg4LaN4Lai4LeUIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gCDgt4Pgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9lbmFibGVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTYzODk0OTk1Mzk5Mzg5NDMzNSI+IuC3g+C3kOC2muC3g+C3k+C2uOC3iiDgt4PgtrPgt4Tgt48g4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiLgtrTgt5Lgt4Xgt5LgtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWNsaW5lIiBtc2dpZD0iMjExMjIyNTQ1MTcwNjEzNzg5NCI+IuC2tOC3iuKAjeC2u+C2reC3kuC2muC3iuC3guC3muC2tCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3NlbnRfdGl0bGUiIG1zZ2lkPSIxMzE4OTc1MTg1MTEyMDcwNzM0Ij4i4LaG4La74LeP4Law4Lax4LeP4LeAIOC2uuC3gOC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3RvX2Nvbm5lY3RfdGl0bGUiIG1zZ2lkPSI0OTU4ODAzOTQ4NjU4NTMzNjM3Ij4i4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64LanIOC2h+C2u+C2uuC3lOC2uOC2muC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2Zyb21fbWVzc2FnZSIgbXNnaWQ9IjU3MDM4OTE3NDczMTk1MTc2OSI+IuC3gOC3meC2reC3kuC2seC3ijoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90b19tZXNzYWdlIiBtc2dpZD0iMjQ4OTY4OTc0NTIyMDQ0MDk5Ij4i4LeA4LeZ4LatOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VudGVyX3Bpbl9tZXNzYWdlIiBtc2dpZD0iNTkyMDkyOTU1MDM2NzgyODk3MCI+IuC2heC3gOC3geC3iuKAjeC2uiBQSU4g4LaR4LaaIOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfc2hvd19waW5fbWVzc2FnZSIgbXNnaWQ9Ijg1MzA1NjMzMjM4ODA5MjEwOTQiPiJQSU46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgwMTI5ODEyNTc3NDIyMzI0NzUiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrogPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5ngtq0g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC2sSDgtoXgtq3gtrvgtq3gt5Tgtrsg4LaR4La6IFdpLUZpIOC3gOC2veC3kuC2seC3iiDgtq3gt4/gt4Dgtprgt4/gtr3gt5Lgtprgt4Ag4LeA4LeS4LeD4Lax4LeK4Law4LeSIOC2muC3meC2u+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczNjM5MDcyMTM3ODc0NjkxNTEiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrogPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiDgtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kyDgtrTgt4Dgtq3gt5LgtrEg4LeA4LeS4LanIFdpLUZpIOC3gOC2veC3kuC2seC3iiDgtpHgtrog4Lat4LeP4LeA4Laa4LeP4La94LeS4Laa4LeAIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiLgtoXgtprgt5Tgtrsg4LaH4Lat4LeU4LeF4Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+IlNNUyDgtrTgtqvgt5Lgt4Dgt5Lgtqkg4La64LeA4La44LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbWVzc2FnZSIgbXNnaWQ9IjM4Njc4OTkxNjk2NTE0OTY0MzMiPiImbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0Oy9iJmd0OyBTTVMg4La04Lar4LeS4LeA4LeS4LapIOC3gOC3kuC3geC3j+C2vSDgtpzgtqvgtrHgtprgt4og4La64LeA4La64LeSLiDgtrjgt5ngtrgg4La64LeZ4Lav4LeU4La44LanIOC2tOC2q+C3kuC3gOC3kuC2qSDgtrrgt5Dgt4Dgt5Pgtrgg4Lax4Lec4Lax4LeQ4LeA4Lat4LeTIOC2muC2u+C2nOC3meC2sSDgtrrgt4/gtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3llcyIgbXNnaWQ9IjM2NjM3MjU5OTM4NTU4MTY4MDciPiLgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfbm8iIG1zZ2lkPSI2MjU0Mzg1NjEzOTU1MzQ5ODIiPiLgtrTgt4rigI3gtrvgtq3gt5Lgtprgt4rgt4Lgt5rgtrQg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9tZXNzYWdlIiBtc2dpZD0iMTY0NTQzNjQ2NjI4NTMxMDg1NSI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJERVNUX0FERFJFU1MiPiUyJHM8L3hsaWZmOmc+Jmx0O2ImZ3Q7IOC3gOC3meC2rSDgtprgt5ngtqfgt5Ig4La04Lar4LeS4LeA4LeT4Lap4La64Laa4LeKIOC2uuC3kOC3gOC3k+C2uOC2pyAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+Jmx0O2ImZ3Q7IOC2muC3kOC2uOC2reC3kuC2ui4iPC9zdHJpbmc+CisgICAgPCEtLSBzeW50YXggZXJyb3IgaW4gdHJhbnNsYXRpb24gZm9yIHNtc19zaG9ydF9jb2RlX2RldGFpbHMgKDM0OTIwMjU3MTk4NjgwNzg0NTcpIG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb246IGV4cGVjdGVkOiAvc3RyaW5nIHJlYWQ6IGZvbnQgKHBvc2l0aW9uOkVORF9UQUcgPC9mb250PkAxOjgzIGluICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSIzNDkyMDI1NzE5ODY4MDc4NDU3Ij4i4La44LeZ4La6ICI8L2ZvbnQ+IuC2lOC2tuC2nOC3miDgtqLgtoLgtpzgtrgg4Lac4LeS4Lar4LeU4La44LeaIjxmb250IGZnY29sb3I9IiNmZmZmYjA2MCI+IiDgtoXgtrog4LeA4LeT4La44LeKIOC3gOC2veC2pyDgt4Tgt5rgtq3gt5Tgt4Dgtprgt4og4LeA4LeaLiI8L3N0cmluZz4KKykgIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3ByZW1pdW1fc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iNTUyMzgyNjM0OTEwNTEyMzY4NyI+PGZvbnQgZmdjb2xvcj0iI2ZmZmZiMDYwIj4i4La44LeZ4La6IOC2lOC2tuC2nOC3miDgtqLgtoLgtpzgtrgg4Lac4LeS4Lar4LeU4La44LeZ4Lax4LeKIOC2heC2uuC3gOC3k+C2uOC2pyDgt4Tgt5rgtq3gt5Qg4LeA4LeaLiI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2FsbG93IiBtc2dpZD0iNDQ1ODg3ODYzNzExMTAyMzQxMyI+IuC2uuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fZGVueSIgbXNnaWQ9IjI5MjczODk4NDAyMDkxNzA3MDYiPiLgtoXgt4Dgtr3gtoLgtpzgt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfY2hvaWNlIiBtc2dpZD0iNTI4OTUzODU5MjI3MjIxODEzNiI+IuC2uOC2nOC3miDgtq3gt5rgtrvgt5Pgtrgg4La44Lat4LaaIOC2reC2tuC3j+C2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4i4LaU4La24LanIOC2uOC3meC2uiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4Lat4LeU4LeFIOC3gOC3meC2seC3g+C3iuC2muC2uyDgtpzgt5DgtrHgt5Pgtrgg4La04LeD4LeU4LeAIOC2muC3hSDgt4Tgt5DgtprCoCZndDvCoOC2uuC3meC2r+C3lOC2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWx3YXlzX2FsbG93IiBtc2dpZD0iMzI0MTE4MTE1NDg2OTQ5MzM2OCI+IuC3g+C3kOC2uOC3gOC3kuC2p+C2uCDgtongtqkg4Lav4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9uZXZlcl9hbGxvdyIgbXNnaWQ9IjQ0Njk5Mjc2NTc3NDI2OTY3MyI+IuC2muC3kuC3g+C3kuC2r+C3jyDgtoXgt4Dgt4Pgtrsg4Lax4Lec4Lav4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfdGl0bGUiIG1zZ2lkPSI2MjI3NzEyMzE5MjIzMjI2MTg1Ij4iU0lNIOC2tOC2rSDgtongt4Dgtq3gt4og4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZW1vdmVkX21lc3NhZ2UiIG1zZ2lkPSIyMzMzMTY0NTU5OTcwOTU4NjQ1Ij4i4LaU4La2IOC2h+C2reC3lOC3heC2reC3iiDgtprgtrvgtrEg4La94LavIOC3gOC2veC2guC2nOC3lCBTSU0g4La04LatIOC3g+C2uOC2nyDgtrHgt5Dgt4Dgtq0g4LaH4La74La54LeT4La4IOC2muC2u+C2sSDgtq3gt5Tgtrvgt5Qg4Lai4LaC4Lac4La4IOC2ouC3j+C2veC2uiDgtrHgt5zgtq3gt5Lgtrbgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2RvbmVfYnV0dG9uIiBtc2dpZD0iODI3OTQ5OTg5MzY5OTYzNzc1Ij4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX3RpdGxlIiBtc2dpZD0iMzcxOTY3MDUxMjg4OTY3NDY5MyI+IlNJTSDgtrTgtq3gtprgt4og4LaR4Laa4Lat4LeUIOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfbWVzc2FnZSIgbXNnaWQ9IjY1OTk5NDUzMDExNDEwNTAyMTYiPiLgtqLgtoLgtpzgtrgg4Lai4LeP4La94La64LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5Pgtrjgtqcg4LaU4La24Lac4LeaIOC2i+C2tOC3j+C2guC2nOC2uiDgtrHgt5Dgt4Dgtq0g4LaF4La74La54Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZXN0YXJ0X2J1dHRvbiIgbXNnaWQ9IjQ3MjI0MDc4NDI4MTUyMzIzNDciPiLgtrrgt4Xgt5Ig4LaF4La74La54Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODM0OTM2MjYyMzA2ODgxOTI5NSI+IuC3gOC3muC2veC3j+C3gCDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI1ODc5NDUwNjU5NDUzNzgyMjc4Ij4i4Lav4LeS4Lax4La6IOC3g+C3kOC2muC3g+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfdGltZV9zZXQiIG1zZ2lkPSI1Nzc3MDc1NjE0MzIxMDg3NzU4Ij4i4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV90aW1lX2RvbmUiIG1zZ2lkPSIyNTA3NjgzNzUxNzU5MzA4ODI4Ij4i4LeE4La74LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybXNfbmV3X3Blcm1fcHJlZml4IiBtc2dpZD0iODI1Nzc0MDcxMDc1NDMwMTQwNyI+PGZvbnQgc2l6ZT0iMTIiIGZnY29sb3I9IiNmZjMzYjVlNSI+IuC2heC2veC3lOC2reC3ijogIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1zX2Rlc2NyaXB0aW9uX2FwcCIgbXNnaWQ9IjUxMzk4MzYxNDMyOTMyOTk0MTciPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOC3gOC3kuC3g+C3kuC2seC3iiDgt4PgtrTgtrrgtrEg4La94Lav4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX3Blcm1pc3Npb25zIiBtc2dpZD0iNzI4MzM1NzcyODIxOTMzODExMiI+IuC2heC3gOC3g+C2uyDgtoXgt4Dgt4Hgt4rigI3gtrog4Lax4Lec4La44LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybV9jb3N0c19tb25leSIgbXNnaWQ9IjQ5MDI0NzAzMjQxNDIxNTExMTYiPiLgtrjgt5ngtrjgtp/gt5LgtrHgt4og4LaU4La24LanIOC2uOC3lOC2r+C2veC3iiDgt4Dgt5Dgtrog4LeA4LeS4La6IOC3hOC3kOC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2FjdGl2aXR5X3RpdGxlIiBtc2dpZD0iNDQ2NTA1NTE1NzIwOTY0ODY0MSI+IlVTQiDgtrjgt4Tgt48g4LaG4Lag4La64Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1OTAxNDU5MDQxMzk4NzUxNDk1Ij4iVVNCIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2reC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzMwODUzODA5NDMxNjQ3NzgzOSI+IuC2lOC2tiDgtpTgtrbgtpzgt5og4La04La74LeS4Lac4Lar4Laa4La64LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Mg4LaH4Lat4LeK4Lat4LeaIFVTQiDgt4Pgt4rgtrTgtrvgt4rgt4Hgtrog4LeE4La74LeE4LeP4La6LiDgtpTgtrbgtqcg4LaU4La24LeaIOC2tOC2u+C3kuC2nOC2q+C2muC2uiDgt4Tgt48g4LaU4La24Lac4LeaIEFuZHJvaWQgVVNCIOC2huC2oOC2uuC2seC2uiDgtoXgtq3gtrsg4Lac4Lec4Lax4LeUIOC2tOC3kuC2p+C2tOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeB4LeK4oCN4La6IOC2seC2uOC3iiDgtrTgt4Tgtq0g4La24Lec4Lat4LeK4Lat4La4IOC2lOC2tuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODA1MzUxMDAwNDQ2MDM3ODExIj4i4LaU4La2IOC2lOC2tuC2nOC3miDgtrTgtrvgt5LgtpzgtqvgtprgtrrgtqcgVVNCIOC3hOC2u+C3hOC3jyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeTIOC2h+C2rS4g4LaU4La24LanIOC2lOC2tuC3miDgtrTgtrvgt5Lgtpzgtqvgtprgtrog4LeE4LePIOC2lOC2tuC2nOC3miBBbmRyb2lkIFNEIOC2tOC2rSDgtoXgtq3gtrsg4Lac4Lec4Lax4LeUIOC2tOC3kuC2p+C2tOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaF4LeA4LeB4LeK4oCN4La6IOC2seC2uOC3iiDgtrTgt4Tgtq0g4La24Lec4Lat4LeK4Lat4La4IOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2VfYnV0dG9uX21vdW50IiBtc2dpZD0iMTA1MjI1OTkzMDM2OTUwODIzNSI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX2Vycm9yX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzAxNzA0NTIxNzM2NTU0MDY1OCI+IlVTQiDgtrjgt4Tgt48g4LaG4Lag4La64Lax4La6IOC3g+C2s+C3hOC3jyDgtpTgtrbgtpzgt5ogVVNCIOC2huC2oOC2uuC2seC2uiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5rgtq/gt5Mg4Lac4LeQ4Lan4LeF4LeU4LeA4Laa4LeKIOC2reC3kuC2tuC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9lcnJvcl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjg3NjAxODUxMjcxNjk3MDMxMyI+IlVTQiDgtrjgt4Tgt48g4LaG4Lag4La64Lax4La6IOC3g+C2s+C3hOC3jyDgtpTgtrbgtpzgt5ogU0Qg4La04LatIOC2t+C3j+C3gOC3kuC2reC2uuC3muC2r+C3kyDgtpzgt5Dgtqfgt4Xgt5Tgt4Dgtprgt4og4Lat4LeS4La24LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgxNzU4OTI1NTQ3NTcyMTY1MjUiPiJVU0Ig4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5Mzk4MjI3ODM4MjgxODM3NjMiPiLgtpTgtrbgtpzgt5og4La04La74LeS4Lac4Lar4Laa4La6IOC3gOC3meC2reC2py/gt4Dgt5ngtq3gt5LgtrHgt4og4Lac4Lec4Lax4LeUIOC2tOC3kuC2p+C2tOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzMzYwNTgzOTY2NjM1MTYwMTciPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTY1Njg1MjA5ODU1NTYyMzgyMiI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9zdG9yYWdlX3N0b3BfdGl0bGUiIG1zZ2lkPSI2NjAxMjk4NTE3MDg3NzU4NTMiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2t+C3j+C3gOC3kuC2reC2uuC3miDgtrTgt4Dgtq3gt5MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDI2NDAyNTI4MDc3NzIxOTUyMSI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrTgt5ngtrssIOC2lOC2tuC2nOC3miDgtrTgtrvgt5Lgtpzgtqvgtprgtrrgt5ngtrHgt4ogQW5kcm9pZCBVU0Ig4LaG4Lag4La64Lax4La6IOC2nOC2veC3gOC3jyDgtq/gtrjgtrHgt4rgtrEgKFwi4La04LeS4LanIOC2muC2u+C2seC3iuC2sVwiKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfc3RvcmFnZV9zdG9wX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4MDQzOTY5NzgyNDYwNjEzMTE0Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4LeS4La74LeT4La44LanIOC2tOC3meC2uywg4LaU4La24Lac4LeaIEFuZHJvaWQgU0Qg4La04LatIOC2tOC2u+C3kuC2nOC2q+C2muC2uuC3meC2seC3iiDgtpzgtr3gt4DgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9idXR0b25fbW91bnQiIG1zZ2lkPSI3MDYwMjE4MDM0OTAwNjk2MDI5Ij4iVVNCIOC2huC2oOC2uuC2seC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3N0b3JhZ2Vfc3RvcF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMTk3MDM3NDg5ODI2MzA2MzgzNiI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC3muC2r+C3kyDgtpzgt5Dgtqfgt4Xgt5Tgt4Dgtprgt4og4LaH4Lat4LeS4LeA4LeS4La6LiBVU0Ig4LeD4LaC4Lac4LeK4oCN4La74LeP4LeE4Laa4La6IOC2nOC2veC3gOC3jyDgtofgtq3gt5Ig4Lav4LeQ4La64LeSIOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgtrvgtrHgt4rgtrEsIOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq3gtq3gt4og4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGl0bGUiIG1zZ2lkPSI5NjMwMzkwMzM0NzA0Nzg2OTciPiJVU0Ig4LaG4Lag4La64Lax4La6IOC3g+C2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfY29uZmlybV9raWxsX3N0b3JhZ2VfdXNlcnNfdGV4dCIgbXNnaWQ9IjUxMDA0Mjg3NTcxMDc0Njk0NTQiPiLgtpTgtrYgVVNCIOC2huC2oOC2uuC2seC2uiDgt4Pgtprgt4rigI3gtrvgt5Lgtrog4Lax4La44LeKLCDgtpTgtrYg4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2sSDgt4Pgtrjgt4Tgtrsg4La64LeZ4Lav4LeU4La44LeKIOC2seC3kOC3gOC2reC3k+C2uCDgt4Pgt4Qg4LaU4La2IFVTQiDgtobgtqDgtrrgtrHgtrog4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2sSDgtq3gt5Tgtrvgt5Qg4Lax4Lec4Lat4LeS4La24Lea4LeA4LeTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19lcnJvcl90aXRsZSIgbXNnaWQ9IjczMjM2NTg0Njk2MjY1MTQyMDciPiJVU0Ig4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeS4La6IOC2heC3g+C3j+C2u+C3iuC2ruC2muC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRsZ19vayIgbXNnaWQ9IjczNzY5NTMxNjcwMzk4NjU3MDEiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfbXRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM2OTk5MTMwOTczOTE1NTAzOTQiPiLgtrjgt4/gtrDgt4rigI3gtrog4LaL4La04LeP4LaC4Lac4La64Laa4LeKIOC2veC3meC3gyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHRwX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE5NjA4MTcxOTIyMTYwNjQ4MzMiPiLgtprgt5Dgtrjgtrvgt4/gt4Dgtprgt4og4La94LeZ4LeDIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgtrsg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2NkX2luc3RhbGxlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2Nzc0NzEyODI3ODkyMDkwNzU0Ij4i4LeD4LeK4Lau4LeP4La04LeS4Lat4La64Laa4LeKIOC2veC3meC3gyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijc4NDgyMzY5NzQwODc2NTM2NjYiPiJVU0Ig4La44LeZ4LeA4La94La44Laa4LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2reC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjIyOTA4NTkzOTk5ODM3MjAyNzEiPiLgtoXgtrHgt5ngtprgt4ogVVNCIOC3gOC3kuC2muC2veC3iuC2tOC2uiDgt4PgtrPgt4Tgt48g4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iOTAyMDA5MjE5NjA2MTAwNzI2MiI+IlVTQiDgtobgtqDgtrrgtrHgtrog4LeG4Led4La44LeQ4Lan4LeKIOC2muC2u+C2seC3iuC2seC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRtZWRpYV9mb3JtYXRfdGl0bGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNjQ4NDE1OTIxNTI2NTI2MDY5Ij4iU0Qg4La04LatIOC3huC3neC2uOC3kOC2p+C3iiDgtprgtrvgtrHgt4rgtrHgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X21lc3NhZ2UiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzkzNDAxNjg1MzQyNTc2MTA3OCI+IuC2lOC2tuC2nOC3miBVU0Ig4LaG4Lag4La64Lax4La64LeaIOC2h+C2reC3kiDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4Lac4Lec4Lax4LeUIOC2uOC3kOC2muC3kyDgtrrgtrHgt5Qg4LaH4LatLiDgtrjgt5ngtrgg4Laa4LeK4oCN4La74LeS4La64LeP4LeAIOC2huC2tOC3g+C3lCDgt4Tgt5Dgtrvgt4Dgt5Lgtrog4Lax4Lec4LeE4LeQ4LaaISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dG1lZGlhX2Zvcm1hdF9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQxMzE4OTUwMjc1NDM4MzAiPiLgtpTgtrbgtpzgt5og4La04Lat4LeaIOC3g+C3kuC2uuC2veC3lCDgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeSIOC3gOC2seC3lCDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0bWVkaWFfZm9ybWF0X2J1dHRvbl9mb3JtYXQiIG1zZ2lkPSI0MTMxMDY0NTYwMTI3NDc4Njk1Ij4i4LeG4Led4La44LeQ4Lan4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRiX2FjdGl2ZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NzI5MDQ0Nzc4OTQ5MTg5OTE4Ij4iVVNCIOC2seC3kuC2r+C3nOC3g+C3iuC2muC2u+C2q+C2uiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTAxNjY1NDYyNzYyNjQ3NjE0MiI+IlVTQiDgtrHgt5Lgtq/gt5zgt4Pgt4rgtprgtrvgtqvgtrog4LaF4La24La9IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9pbnB1dF9tZXRob2QiIG1zZ2lkPSI0NjUzMzg3MzM2NzkxMjIyOTc4Ij4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uOC2uuC2muC3iiDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjkwOTE2NTIxNTc3MjI0OTUxMTYiPiLgtobgtq/gt4/gtrEg4Laa4LeK4oCN4La74La4IOC3g+C2muC3g+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9IjYyMDMxMTI0NzgwOTUxMTc2MjUiPiLgtrfgt57gtq3gt5Lgtpog4La64Lat4LeU4La74LeUIOC2tOC3lOC3gOC2u+C3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhhcmR3YXJlIiBtc2dpZD0iNzUxNzgyMTA4Njg4ODk5MDI3OCI+IuC2r+C3mOC2qOC3j+C2guC2nCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9rZXlib2FyZF9sYXlvdXRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMTQwNzM2NzAxNzI2MzAzMDc3MyI+IuC2uuC2reC3lOC2u+C3lCDgtrTgt5Tgt4Dgtrvgt5Tgt4Dgtqcg4La04LeS4La74LeS4LeD4LeQ4La94LeQ4LeD4LeK4La4IOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9rZXlib2FyZF9sYXlvdXRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDY1OTA3NzAwNDQ5MjU3MDYzIj4i4La64Lat4LeU4La74LeUIOC2tOC3lOC3gOC2u+C3lOC3gOC2pyDgtrTgt5Lgtrvgt5Lgt4Pgt5Dgtr3gt5Dgt4Pgt4rgtrjgtprgt4og4Lat4Lea4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfYWxwaGFiZXQiIG1zZ2lkPSI1NDMzMjc1NDg1NDk5MDM5MTk5Ij4iIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFzdF9zY3JvbGxfbnVtZXJpY19hbHBoYWJldCIgbXNnaWQ9IjQwMzAxNzA1MjQ1OTUxMjM2MTAiPiIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuZGlkYXRlc19zdHlsZSIgbXNnaWQ9IjQzMzM5MTMwODk2MzcwNjIyNTciPjx1PiLgtoXgtrTgt5rgtprgt4rgt4LgtprgtrrgtrHgt4oiPC91Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ5ODE2MDA1MzUxNDY4NTYwIj4iVVNCIOC2huC2oOC2uuC2seC2uiDgt4Pgtprgt4Pgtrjgt5LgtrHgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTQ1NzYwMzQxODk3MDk5NDA1MCI+IlNEIOC2tOC2rSDgt4Pgt5Tgtq/gt4/gtrHgtrjgt4og4Laa4La74La44LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2NoZWNraW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iODI4NzMxOTg4MjkyNjczNzA1MyI+IuC3gOC3kOC2u+C2r+C3kiDgt4PgtrPgt4Tgt48g4La04La74LeT4Laa4LeK4LeC4LePIOC2muC2u+C2uOC3kuC2seC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9mc19ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNzc4ODA0MDc0NTY4NjIyOTMwNyI+IuC3hOC3kuC3g+C3iiBVU0Ig4LaG4Lag4La64Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vZnNfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzgwNDc3ODM4MjQxMjEyOTk3Ij4i4LeE4LeS4LeD4LeKIFNEIOC2tOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9Ijc4NDAxMjEwNjc0MjcyNjk1MDAiPiJTRCDgtrTgtq0g4LeE4LeS4LeD4LeKIOC3hOC3nSDgt4Pgt4Tgt4/gtrog4Lax4Lec4Lav4Laa4LeK4LeA4LaxIOC2nOC3nOC2seC3lCDgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgtprgt4og4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub2ZzX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODY0MTA2NTY0MTc4NjkyMzYwNCI+IlNEIOC2tOC2rSDgt4Tgt5Lgt4Pgt4og4LeE4LedIOC3g+C3hOC2uiDgtrHgt5zgtq/gtprgt4rgt4DgtrEg4Lac4Lec4Lax4LeUIOC2tOC2r+C3iuC2sOC2reC3kuC2uuC2muC3iiDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjIwOTAwNDY3Njk1MzI3MTM1NjMiPiLgt4Tgt4/gtrHgt5Ig4LeA4LeWIFVTQiDgtobgtqDgtrrgtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjQxMDcyMzkwNjAxOTEwMDE4OSI+IuC3hOC3j+C2seC3kiDgt4Dgt5YgU0Qg4La04LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjE3OTU5MTc1NzgzOTUzMzMyODAiPiJVU0Ig4LaG4Lag4La64Lax4La64LanIOC3hOC3j+C2seC3kiDgt4Dgt5Mg4LaH4LatLiDgtpHgtrog4Lax4LeQ4LeA4LatIOC3huC3neC2uOC3kOC2p+C3iiDgtpzgt5DgtrHgt4rgt4Dgt5Pgtrjgtqcg4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudGFibGVfbm90aWZpY2F0aW9uX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNzUzODk4NTY3NTI1NTY4MjUzIj4iU0Qg4La04Lat4LanIOC3hOC3j+C2seC3kiDgt4Dgt5Mg4LaH4LatLiDgtpHgtrog4Lax4LeQ4LeA4LatIOC3huC3neC2uOC3kOC2p+C3iiDgtpzgt5DgtrHgt4rgt4Dgt5Pgtrjgtqcg4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMTY2MTY4MzAzMTMzMDk1MTA3MyI+IuC2tuC2veC3j+C2tOC3nOC2u+C3nOC2reC3iuC2reC3lCDgtrHgt5zgt4Dgt5Yg4La94LeZ4LeDIFVTQiDgtobgtqDgtrrgtrHgtrog4LaJ4LeA4Lat4LeKIOC2muC3meC2u+C3kuC2q+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NzIxNTI4ODI2MDQ0MDc4MzciPiJTRCDgtrTgtq0g4La24La94LeP4La04Lec4La74Lec4Lat4LeK4Lat4LeUIOC2u+C3hOC3kuC2reC3gCDgtongt4Dgtq3gt4og4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQzMjk4NDg4MTk4NjU1OTQyNDEiPiLgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeS4LeA4LeT4La4IOC3gOC3kOC3heC2muC3iuC3gOC3k+C2uOC2pyBVU0Ig4LaG4Lag4La64Lax4La6IOC2ieC3gOC2reC3iuC2muC3kuC2u+C3k+C2uOC2pyDgtrTgt5ngtrsg4Lac4La94LeA4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9iYWRyZW1vdmFsX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzI2MDE4MzI5Mzc0NzQ0ODI0MSI+IuC2r+C2reC3iuC2rSDgtrHgt5Dgtq3gt5Lgt4Dgt5Pgtrgg4LeA4LeQ4LeF4Laa4LeK4LeA4LeT4La44LanIOC2nOC3kOC2veC3gOC3k+C2uOC2pyDgtprgtr3gt5LgtrHgt4ogU0Qg4La04LatIOC2ieC3gOC2reC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fdGl0bGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iMzk2Nzk3Mzg5MzI3MDM2MDIzMCI+IuC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5PgtrjgtqcgVVNCIOC2huC2oOC2uuC2seC2uiDgtobgtrvgtprgt4rgt4Lgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl90aXRsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY3Mjk4MDExMzA3OTA2MTYyMDAiPiJTRCDgtrTgtq0g4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt5Tgtrvgtprgt4rgt4Lgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc2FmZV91bm1vdW50X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYxNDIxOTUzNjE2MDY0OTM1MzAiPiLgtpTgtrbgtqcgVVNCIOC2huC2oOC2uuC2seC2uiDgtobgtrvgtprgt4rgt4Lgt5Lgtq3gt4Ag4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgtrTgt5Tgt4Xgt5Tgt4DgtrHgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3NhZmVfdW5tb3VudF9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU2ODg0MTI3ODEzODM3NzYwNCI+IuC2lOC2tuC2pyDgtobgtrvgtprgt4rgt4Lgt5Lgtq3gt4AgU0Qg4La04LatIOC2ieC3gOC2reC3iiDgtprgt4Ug4LeE4LeQ4LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ0ODYzNzcyMzAxNDAyMjc2NTEiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2ieC3gOC2reC3iiDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkwMjUxODAzMDQwNDM4MTMxOCI+IlNEIOC2tOC2rSDgtongt4Dgtq3gt4og4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjY5MjExMjYxNjI1ODA1NzQxNDMiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2ieC3gOC2reC3iuC2muC3nOC2pyDgtofgtq0uIOC2heC2veC3lOC2reC3iiDgtrjgt4/gtrDgt4rigI3gtrrgtrrgtprgt4og4LaH4Lat4LeU4LeF4Lat4LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbm9tZWRpYV9ub3RpZmljYXRpb25fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM4NzAxMjA2NTI5ODM2NTk2NDEiPiJTRCDgtrTgtq0g4LaJ4LeA4Lat4LeKIOC2muC2u+C2sSDgtr3gtq/gt5IuIOC2heC2veC3lOC2reC3iiDgtpHgtprgtprgt4og4LaH4Lat4LeU4LeF4Lat4LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9saXN0X2VtcHR5IiBtc2dpZD0iMTY3NTM4ODMzMDc4Njg0MTA2NiI+IuC2nOC3kOC2veC2tOC3meC2sSDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4og4LeE4La44LeUIOC2seC3nOC3gOC3lOC2q+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3BrZ1VzYWdlU3RhdHMiIG1zZ2lkPSI4Nzg3MzUyMDc0MzI2NzQ4ODkyIj4i4LeD4LaC4La74Lag4Laa4La6IOC2t+C3j+C3gOC3kuC2rSDgtprgt5Lgtrvgt5Pgtrjgt5og4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC2uuC3j+C3gOC2reC3iuC2muC3j+C2veC3k+C2sSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19wa2dVc2FnZVN0YXRzIiBtc2dpZD0iMTEwNjYxMjQyNDI1NDI3NzYzMCI+IuC2keC2muC2reC3lCDgtprgtrvgtrEg4La94LavIOC3g+C2guC2u+C2oOC2muC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4LeD4LaC4Lab4LeK4oCN4La64LeP4LaxIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEuIOC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgtrrgt5ngtq/gt5Tgtrjgt4og4LeD4Laz4LeE4LePIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvcHlQcm90ZWN0ZWREYXRhIiBtc2dpZD0iNDM0MTAzNjMxMTIxMTQwNjY5MiI+IuC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtrTgt5LgtqfgtrTgtq3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29weVByb3RlY3RlZERhdGEiIG1zZ2lkPSI0MzkwNjk3MTI0Mjg4MzE3ODMxIj4i4LaF4Lax4LeK4Lat4La74LeK4Lac4Lat4La6IOC2tOC3kuC2p+C2tOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeU4La04LeU4La74LeU4Lav4LeUIOC2heC2seC3iuC2reC2u+C3iuC2nOC2rSDgt4Pgt5rgt4Dgt4/gt4Ag4LaJ4La94LeK4LeA4LePIOC3g+C3kuC2p+C3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4g4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC2uuC3meC2r+C3lOC2uOC3iuC3gOC2vSDgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4Laz4LeE4LePIOC2seC3nOC3gOC3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JvdXRlX21lZGlhX291dHB1dCIgbXNnaWQ9IjE2NDIwMjQ0NTU3NTA0MTQ2OTQiPiLgtrjgt4/gtrDgt4rigI3gtrog4La04LeK4oCN4La74Lat4LeS4Lav4LeP4Lax4La64LeaIOC2uOC3j+C2u+C3iuC2nOC2nOC2rSDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSI0OTMyODE4NzQ5NTQ3MjQ0MzQ2Ij4i4LeA4LeZ4Lax4Lat4LeKIOC2tuC3j+C3hOC3kuC2uyDgtovgtrTgt4/gtoLgtpwg4LeA4LeZ4LatIOC2uOC3j+C2sOC3iuKAjeC2uiDgtrTgt4rigI3gtrvgtq3gt5Lgtq/gt4/gtrHgtrog4La64LeQ4LeA4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNzU2NTU1MjIzNzk3NzgxNTA0NyI+IuC2uuC2reC3lOC2u+C3lCDgtrTgt4/gtr3gtpog4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC2huC2oOC2uuC2seC2uiDgt4Dgt5ngtq0g4La04LeK4oCN4La74LeA4Lea4LeB4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzX2tleWd1YXJkX3NlY3VyZV9zdG9yYWdlIiBtc2dpZD0iNTg2NjI0NTQ4NDMwMzI4NTc2MiI+IuC2uuC2reC3lOC2u+C3lCDgtobgtrvgtprgt4rgt4Lgtpog4LaG4Lag4La64Lax4La64LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2r+C3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xfa2V5Z3VhcmQiIG1zZ2lkPSIxNzIxOTUxODQyMDc4MjgzODciPiLgtrTgt5ngtrHgt4rgt4Dgt5Pgtrjgt5og4LeE4LePIOC3g+C3kOC2n+C3gOC3k+C2uOC3miDgtrrgtq3gt5Tgtrvgt5Qg4LaG4La74Laa4LeK4LeC4Laa4La6IOC2tOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sX2tleWd1YXJkIiBtc2dpZD0iMzA0MzczMjI5MDUxODYyOTA2MSI+IuC2uuC2reC3lOC2u+C3lCDgtobgtrvgtprgt4rgt4Lgtprgtrog4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2muC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR1dG9yaWFsX2RvdWJsZV90YXBfdG9fem9vbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDA3MDQzMzIwODE2MDA2MzUzOCI+IuC3gOC3kuC3geC3j+C2veC2sSDgtrTgt4/gtr3gtrHgtrog4LeD4Laz4LeE4LePIOC2r+C3meC3gOC2u+C2muC3iiDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2FkZ2V0X2hvc3RfZXJyb3JfaW5mbGF0aW5nIiBtc2dpZD0iNDg4MjAwNDMxNDkwNjQ2NjE2MiI+IuC3gOC3kuC2ouC2p+C2uiDgtpHgtprgtq3gt5Qg4Laa4LeS4La74LeT4La44LanIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9nbyIgbXNnaWQ9IjgzMjA4NDU2NTE3MzczNjkwMjciPiLgtrrgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlYXJjaCIgbXNnaWQ9IjY1ODExMDI3MTgyMjgwNzgxMSI+IuC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fc2VuZCIgbXNnaWQ9IjIzMTYxNjY1NTYzNDkzMTQ0MjQiPiLgtrrgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX25leHQiIG1zZ2lkPSIzMTM4ODQzOTA0MDA5ODEzODM0Ij4i4La44LeT4La94LafIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kb25lIiBtc2dpZD0iODk3MTUxNjExNzkxMDkzNDYwNSI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fcHJldmlvdXMiIG1zZ2lkPSIxNDQzNTUwMDM5MjUwMTA1OTQ4Ij4i4La04LeZ4La7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9kZWZhdWx0IiBtc2dpZD0iMjg0MDkyMTg4NTU1ODA0NTcyMSI+IuC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC2u+C3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpYWxfbnVtYmVyX3VzaW5nIiBtc2dpZD0iNTc4OTE3NjQyNTE2NzU3MzU4NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVzPC94bGlmZjpnPiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4pcbuC2heC2guC2muC2uiDgtoXgtrjgtq3gtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfY29udGFjdF91c2luZyIgbXNnaWQ9IjQ5NDc0MDUyMjY3ODgxMDQ1MzgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz4g4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKXG7gt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Dgtrrgtprgt4og4Lax4LeS4La74LeK4La44LeP4Lar4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9oZWFkZXIiIG1zZ2lkPSIyMTA2MTAzODE3OTM3ODU5NjYyIj4i4La04LeE4LatIOC2r+C3kOC2muC3iuC3gOC3meC2sSDgtpHgtprgtprgt4og4LeE4LedIOC2iuC2pyDgt4Dgt5Dgtqngt5Ig4La64LeZ4Lav4LeU4La44LeKIOC2nOC2q+C2seC2muC3iiDgtpTgtrbgtpzgt5og4Lac4LeS4Lar4LeU4La44LanIOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgt4Dgt5PgtrjgtqcsIOC2r+C3kOC2seC3iiDgt4Pgt4Qg4LaJ4Lav4LeS4La74LeS4La64Lea4Lav4LeTIOC2heC3gOC3g+C2uyDgtongtr3gt4rgtr3gtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2Zvb3RlciIgbXNnaWQ9IjMxMjUyMTEzNDMzNzkzNzY1NjEiPiLgtrjgt5ngtrgg4LaJ4La94LeK4La94LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5Pgtrjgtqcg4LaU4La24LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudF9wZXJtaXNzaW9uc19oZWFkZXJfdGV4dCIgbXNnaWQ9IjY4NzQ0OTc0MDgyMDE4MjY3MDgiPiLgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgtrog4LaJ4La94LeK4La94LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3ciIG1zZ2lkPSI3MjI1OTQ4ODExMjk2Mzg2NTUxIj4i4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4i4La04LeK4oCN4La74Lat4LeS4Laa4LeK4LeC4Lea4La0IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1pc3Npb25fcmVxdWVzdF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2NDg2NzU5Nzk1OTI2MjM3OTA3Ij4i4LaF4LeA4LeD4La7IOC2ieC2veC3iuC2veC3jyDgt4Pgt5Lgtqfgt5MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIG1zZ2lkPSI4NTMwMzkzMTM5NjM5NTYwMTg5Ij4iPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiVzPC94bGlmZjpnPiDgtpzgt5Lgtqvgt5Tgtrgg4LeD4Laz4LeE4LePXG7gtoXgt4Dgt4Pgtrsg4LaJ4La94LeK4La94LaxIOC2veC2r+C3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnB1dF9tZXRob2RfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyODM1NTcxNzk5NDQ5OTI2NDkiPiLgtobgtq/gt4/gtrEg4Laa4LeK4oCN4La74La44La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMzY4Nzk2OTEzODM3NTA5MjQyMyI+IuC3g+C2uOC2uOC3lOC3hOC3lOC2u+C3iuC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjQxNDgxMjA3NDIwOTY0NzQ2NDEiPiLgtrTgt4rigI3gtrvgt4Dgt5rgt4Hgt4rigI3gtrrgtq3gt4/gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YWxscGFwZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEyNDAwODc4NDQzMDQ2ODc2NjIiPiLgtrbgt5Lgtq3gt5TgtrTgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLgtrbgt5Lgtq3gt5TgtrTgtq0g4LeA4LeZ4Lax4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiDgtoXgt4PgtrHgt4rgtrHgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtprgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4La44Laf4LeS4Lax4LeKIFZQTiDgt4Pgtprgt4rigI3gtrvgt5Pgtrog4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IuC2ouC3j+C2veC2uiDgtprgt4XgtrjgtrHgt4/gtprgtrvgtqvgtrog4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHRfbG9uZyIgbXNnaWQ9IjY0MDczNTEwMDYyNDkxNzQ0NzMiPiI8eGxpZmY6ZyBpZD0iU0VTU0lPTiI+JXM8L3hsaWZmOmc+IOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeU4Lar4LeSLiDgtqLgt4/gtr3gtrog4Laa4LeF4La44Lax4LeP4Laa4La74Lar4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0aW5nIiBtc2dpZD0iNjQ0MzQzODk2NDQ0MDk2MDc0NSI+IuC3g+C3kOC2uOC3gOC3kuC2p+C2uCBWUE4g4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3meC2uOC3kuC2seC3iuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9jb25uZWN0ZWQiIG1zZ2lkPSI4MjAyNjc5Njc0ODE5MjEzOTMxIj4i4Lax4LeS4La74Lat4LeU4La74LeU4LeA4La4IFZQTiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl9sb2NrZG93bl9lcnJvciIgbXNnaWQ9IjYwMDkyNDk4MTQwMzQ3MDgxNzUiPiLgt4Pgt5Dgtrjgt4Dgt5Lgtqcg4LeD4Laa4LeK4oCN4La74LeS4La6IFZQTiDgtq/gt53gt4LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29uZmlnIiBtc2dpZD0iNjQxNTg5OTE1MDY3MTUzNzk3MCI+IuC3gOC3kuC2seC3iuKAjeC2uuC3j+C3gyDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVwbG9hZF9maWxlIiBtc2dpZD0iMjg5Nzk1NzE3MjM2NjczMDQxNiI+IuC2nOC3nOC2seC3lOC3gCDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19maWxlX2Nob3NlbiIgbXNnaWQ9IjYzNjM2NDg1NjIxNzA3NTk0NjUiPiLgtpzgt5zgtrHgt5Tgt4Dgtprgt4og4Lat4Led4La74LeP4Lac4LeZ4LaxIOC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc2V0IiBtc2dpZD0iMjQ0ODE2ODA4MDk2NDIwOTkwOCI+IuC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdWJtaXQiIG1zZ2lkPSIxNjAyMzM1NTcyMDg5OTExOTQxIj4i4La64Lec4La44LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE2NDc2ODIxMjAwMzg2NDMxNiI+IuC2uOC3neC2p+C2u+C3iiDgtrvgtq4g4LaG4Laa4LeP4La74La6IOC3g+C2tuC2vSDgtprgtrsg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FyX21vZGVfZGlzYWJsZV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjgwMzUyMzA1Mzc1NjM1MDMyNjIiPiLgtrjgt53gtqfgtrvgt4og4La74LauIOC2huC2muC3j+C2u+C2uuC3meC2seC3iiDgtrTgt5Lgtqfgt4Dgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXRoZXJlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIzMTQ2Njk0MjM0Mzk4MjAyNjAxIj4i4Lan4LeZ4Lav4La74LeS4Lax4LeKIOC3hOC3nSDgt4Tgt5zgtqfgt4rgt4Pgt4rgtrTgt5zgtqfgt4og4LeD4Laa4LeK4oCN4La74LeT4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI2ODU3MDMxNzYwMTAzMDYyOTgyIj4i4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2tfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjMwMDQ3MDAwNDUwMzM0MzQzOSI+IuC2huC2tOC3g+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5leHRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTA4MDU1NTEwNDY3Nzk5MjQwOCI+IuC2uOC3k+C2veC2nyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNraXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTI3NTM2MjI5OTQ3MTYzMTgxOSI+IuC2uOC2nyDgt4Tgtrvgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ4OTA4OTQyNjc0NTQ4NjcyNzYiPiLgtongt4Tgt4Ug4Lai4LaC4Lac4La4IOC2r+C2reC3iuC2rSDgtrfgt4/gt4Dgt5Lgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aHJvdHRsZV93YXJuaW5nX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMzM0MDgyMjIyODU5OTMzNzc0MyI+IuC2ouC2guC2nOC2uCDgtq/gtq3gt4rgtq0g4La34LeP4LeA4LeS4Lat4La6IOC2nOC3kOC2sSDgtq3gt4Ag4Lav4LeQ4Lax4Lac4LeQ4Lax4LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjYyNjk1NDE4OTc3Mjk3ODEzMzIiPiLgtqLgtoLgtpzgtrgg4Lav4Lat4LeK4LatIOC3g+C3k+C2uOC3j+C3gCDgtongtprgt4rgtrjgt4Dgt48g4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGhyb3R0bGVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNTQ0MzQ1NzMyMTM1NDkwNzE4MSI+IuC2ouC2guC2nOC2uCDgtq/gtq3gt4rgtq0g4La34LeP4LeA4LeS4Lat4La6IOC2nOC3kOC2sSDgtq3gt4Ag4Lav4LeQ4Lax4Lac4LeQ4Lax4LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fbWF0Y2hlcyIgbXNnaWQ9IjgxMjk0MjE5MDg5MTU4NDA3MzciPiLgtpzgt5Dgtr3gtrTgt5Pgtrjgt4og4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZF9vbl9wYWdlIiBtc2dpZD0iMTk0Njc5OTIzMzgyMjgyMDM4NCI+IuC2tOC3kuC2p+C3lOC3gOC3meC3hOC3kiDgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9Im1hdGNoZXNfZm91bmQiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTY3MTQ3MDgxMTM2NTc5NDM5Ij4i4Lac4LeQ4LeF4La04LeT4La44LeKIDEg4La64LeSIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NjQxODcyNzk3MDY3NjA5MTc3Ij4iPHhsaWZmOmcgaWQ9IlRPVEFMIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIDx4bGlmZjpnIGlkPSJJTkRFWCI+JWQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21vZGVfZG9uZSIgbXNnaWQ9IjcyMTc1ODE2NDA0NjE5MjIyODkiPiLgt4Tgtrvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc191bm1vdW50aW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjM5MjM4MTA0NDg1MDc2MTI3NDYiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2nOC3kOC2veC3gOC3k+C2uC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX3VubW91bnRpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxMzI3ODk0OTk4NDA5NTM3MTkwIj4iU0Qg4La04LatIOC2nOC2veC3gOC2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2dyZXNzX2VyYXNpbmciIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNDUyMTU3MzMyMTUyNDM0MDA1OCI+IlVTQiDgtobgtqDgtrrgtrHgtrog4La44Laa4La44LeS4Lax4LeKLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvZ3Jlc3NfZXJhc2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY1OTY5ODg4NzU1MDcwNDMwNDIiPiJTRCDgtrTgtq0g4La44Laa4La44LeS4Lax4LeKLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjYyOTk3Njk1NjM2MjQ3NzY5NDgiPiJVU0Ig4LaG4Lag4La64Lax4La6IOC2uOC3kOC2muC3kuC2uiDgtrHgt5zgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9ybWF0X2Vycm9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzMxNTI0ODY5NjY0NDUxMDkzNSI+IlNEIOC2tOC2rSDgtrjgt5Dgtprgt5Pgtrjgtqcg4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9iYWRfcmVtb3ZhbCIgbXNnaWQ9Ijc5NjA4NjQwNjEwMTY2MDMyODEiPiLgtpzgt5Dgtr3gt4Dgt5Pgtrjgtqcg4La04LeZ4La7IFNEIOC2tOC2rSDgtongt4Dgtq3gt4rgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX2NoZWNraW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQxODE4ODcyMDAwOTU2OTY5MyI+IlVTQiDgtobgtqDgtrrgtrHgtrog4La44LeaIOC3gOC2seC3gOC3kuC2pyDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4La74La44LeS4Lax4LeKIOC2tOC3gOC2reC3ky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9jaGVja2luZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMzQ3NjI1MDM5MDQ4Mjc0ODEiPiJTRCDgtrTgtq0g4Lav4LeQ4Lax4LeKIOC2tOC2u+C3k+C2muC3iuC3guC3jyDgtprgtrvgtrjgt5LgtrHgt4og4La04LeA4Lat4LeTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JlbW92ZWQiIG1zZ2lkPSI3MDAxNTI2OTA1MDU3OTUyMDk3Ij4iU0Qg4La04LatIOC2ieC3gOC2reC3iiDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI1ODMwODE0MzQ5MjUwODM0MjI1Ij4i4La04La74LeS4Lac4Lar4Laa4La64Laa4LeKIOC3gOC3kuC3g+C3kuC2seC3iiDgtq/gt5DgtrHgt4ogVVNCIOC2huC2oOC2uuC2seC2uiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3NoYXJlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MDYxMzA1NjgxMzM1NDA0MzUiPiJTRCDgtrTgtq0g4Lav4LeQ4Lax4LanIOC2tOC2u+C3kuC2nOC2q+C2muC2uuC2muC3kuC2seC3iiDgtrTgt4/gt4Dgt5LgtqDgt4rgtqDgt5Ig4Laa4La74La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Vua25vd25fc3RhdGUiIG1zZ2lkPSI3MjkxOTI3ODIxOTcyOTAzODUiPiLgtrbgt4/gt4Tgt5Lgtrsg4La44LeP4Law4LeK4oCN4La64La6IOC2seC3nOC2r+C2seC3iuC2seC3jyDgtoXgt4Dgt4Pgt4rgtq7gt4/gt4Dgt5og4La04LeA4Lat4LeS4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlIiBtc2dpZD0iMTc3ODY4NjYxODIzMDAxMTk2NCI+IuC2tuC3meC2r+C3j+C2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmQiIG1zZ2lkPSI0ODA4MjcwOTAwMzIyOTg1OTYwIj4i4LeD4Lec4La64Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2Vic2VhcmNoIiBtc2dpZD0iNDMzNzE1Nzk3NzQwMDIxMTU4OSI+IuC3gOC3meC2tuC3iiDgt4Pgt5ngt4Dgt5TgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX25leHQiIG1zZ2lkPSI1NzQyMTI0NjE4OTQyMTkzOTc4Ij4i4La44LeT4LeF4LafIOC3g+C3nOC2uuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmRfcHJldmlvdXMiIG1zZ2lkPSIyMTk2NzIzNjY5Mzg4MzYwNTA2Ij4i4La04LeZ4La7IOC2keC2miDgt4Pgt5zgtrrgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNOb3RpZlRpY2tlciIgbXNnaWQ9IjU2MjI2ODM5MTI2MTY0OTYxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JXM8L3hsaWZmOmc+IOC2nOC3meC2seC3iiDgt4Pgt4rgtq7gt4/gtrHgtrog4LaJ4La94LeK4La94LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZUaXRsZSIgbXNnaWQ9IjU0NDY4NTg3MTcxNTc0MTY4MzkiPiLgt4Pgt4rgtq7gt4/gtrEg4LaJ4La94LeK4La94LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZNZXNzYWdlIiBtc2dpZD0iMTM3NDcxODAyMzIyNDAwMDcwMiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiAoPHhsaWZmOmcgaWQ9IlNFUlZJQ0UiPiUyJHM8L3hsaWZmOmc+KSDgt4Dgt5Lgt4Pgt5LgtrHgt4og4LaJ4La94LeK4La94LaxIOC2veC2ryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc1ZlcmlmWWVzIiBtc2dpZD0iMjM0NjU2NjA3Mjg2NzIxMzU2MyI+IuC2lOC3gOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc1ZlcmlmTm8iIG1zZ2lkPSIxMTQ2NTY0OTM3MzQ2NDU0ODY1Ij4i4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY190b29fbWFueV9kZWxldGVzIiBtc2dpZD0iNTI5NjMyMTg1MDY2Mjc0Njg5MCI+IuC2uOC3kOC2muC3k+C2uOC3miDgt4Pgt5Pgtrjgt4/gt4Ag4LaJ4Laa4LeK4La44LeA4LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfdG9vX21hbnlfZGVsZXRlc19kZXNjIiBtc2dpZD0iNDk2NTUxNjcxMDA4Njk0MjQ1Ij4iPHhsaWZmOmcgaWQ9IlRZUEVfT0ZfU1lOQyI+JTIkczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIDx4bGlmZjpnIGlkPSJBQ0NPVU5UX05BTUUiPiUzJHM8L3hsaWZmOmc+IOC2nOC3kuC2q+C3lOC2uOC3miDgtrjgtprgtrEg4La94LavIOC2heC2uuC3kuC2reC2uCA8eGxpZmY6ZyBpZD0iTlVNQkVSX09GX0RFTEVURURfSVRFTVMiPiUxJGQ8L3hsaWZmOmc+IOC2muC3iiDgtofgtq0uIOC2lOC2tuC2pyDgtprgt5Tgtrjgtprgt4og4Laa4LeS4La74LeT4La44LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX3JlYWxseV9kZWxldGUiIG1zZ2lkPSIyNTcyNjAwMTAzMTIyNTk2MjQzIj4i4LaF4La64LeS4Lat4La4IOC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfdW5kb19kZWxldGVzIiBtc2dpZD0iMjk0MTMxNzM2MDYwMDMzODYwMiI+IuC2uOC3kOC2muC3k+C2uOC3iiDgtoXgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19kb19ub3RoaW5nIiBtc2dpZD0iMzc0Mzc2NDc0MDQzMDgyMTg0NSI+IuC2r+C3kOC2seC2pyDgtprgt5Lgt4Pgt5Lgt4Dgtprgt4og4Lax4Lec4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX2FjY291bnRfbGFiZWwiIG1zZ2lkPSI1NjU1MjAzMDg5NzQ2NDIzOTI3Ij4i4Lac4LeS4Lar4LeU4La44Laa4LeKIOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2xhYmVsIiBtc2dpZD0iMjkzNTI2NzM0NDg0OTk5MzU1MyI+IuC2nOC3kuC2q+C3lOC2uOC2muC3iiDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX2FjY291bnRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzYxMTk4Mjg5NDg1MzQzNTg3NCI+IuC2nOC3kuC2q+C3lOC2uOC2muC3iiDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iMjQxMjA3MjI3MjgzMjI4NDMxMyI+IuC3gOC3kOC2qeC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJudW1iZXJfcGlja2VyX2RlY3JlbWVudF9idXR0b24iIG1zZ2lkPSI0NzYwNTA3NzgzODY3NzkwNjciPiLgtoXgtqngt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfc2Nyb2xsX21vZGUiIG1zZ2lkPSIzMDczMTAxMDY3NDQxNjM4NDI4Ij4iPHhsaWZmOmcgaWQ9IlZBTFVFIj4lczwveGxpZmY6Zz4g4LeD4LeK4La04La74LeK4LeBIOC2muC2uyDgtrvgtrPgt4Dgt48g4LeD4LeS4Lan4LeS4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9hY3Rpb24iIG1zZ2lkPSI5MTAxNDczMDQ1ODkxODM1NDkwIj4i4LeA4LeQ4Lap4LeSIOC2muC3kuC2u+C3k+C2uOC2pyDgtongt4Tgtr3gtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sSDgt4Pgt4Qg4LaF4Lap4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgtrTgt4Tgtr3gtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfbWludXRlX2J1dHRvbiIgbXNnaWQ9Ijg4NjU4ODUxMTQwMjg2MTQzMjEiPiLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5Tgt4Dgtprgt4og4LeA4LeQ4Lap4LeSIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iNjI0NjgzNDkzNzA4MDY4NDc5MSI+IuC2uOC3kuC2seC3kuC2reC3iuC2reC3lOC3gCDgtoXgtqngt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfaW5jcmVtZW50X2hvdXJfYnV0dG9uIiBtc2dpZD0iMzY1MjA1NjA1NTgxMDIyMzEzOSI+IuC2tOC3kOC2uiDgt4Dgt5Dgtqngt5LgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIxMzc3NDc5ODYzNDI5MjE0NzkyIj4i4La04LeQ4La6IOC2heC2qeC3lOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9zZXRfcG1fYnV0dG9uIiBtc2dpZD0iNDE0NzU5MDY5NjE1MTIzMDg2MyI+IuC2tC7gt4Au4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9waWNrZXJfZGVjcmVtZW50X3NldF9hbV9idXR0b24iIG1zZ2lkPSI4MzAyMTQwMzUzNTM5NDg2NzUyIj4i4La04LeZLuC3gC4g4LeD4Laa4LeD4LeKIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9tb250aF9idXR0b24iIG1zZ2lkPSI1MzY5OTk4NDc5MDY3OTM0MTEwIj4i4La44LeP4LeD4La6IOC3gOC3kOC2qeC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iMTgzMjY5ODk5NTU0MTcyNjAxOSI+IuC2uOC3j+C3g+C2uuC2muC3iiDgtoXgtqngt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfaW5jcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI3MTMwNDY1NDEyMzA4MTczOTAzIj4i4Lav4LeA4LeDIOC3gOC3kOC2qeC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfZGF5X2J1dHRvbiIgbXNnaWQ9IjQxMzE4ODE1MjE4MTg3NTAwMzEiPiLgtq/gt4Dgt4Mg4LaF4Lap4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF95ZWFyX2J1dHRvbiIgbXNnaWQ9IjYzMTg2OTczODQzMTA4MDg4OTkiPiLgt4Dgt4Pgtrsg4LeA4LeQ4Lap4LeSIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RlY3JlbWVudF95ZWFyX2J1dHRvbiIgbXNnaWQ9IjQ0ODIwMjE4MTM0OTExMjE3MTciPiLgt4Dgt4Pgtrsg4LaF4Lap4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4i4LaF4LeA4La94LaC4Lac4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiLgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IuC2huC2muC3j+C2u+C2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiLgtofgtq3gt5Tgtr3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i4La64LeZ4Lav4LeU4La44Laa4LeKIOC2reC3neC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IuC3g+C2uOC2nyDgtrbgt5ngtq/gt4/gtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiDgt4Pgtrjgtp/gt5LgtrHgt4og4La24LeZ4Lav4LePIOC2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLgt4Pgtrvgt4rgtrTgtqsg4LeE4LeQ4Lap4La94La6LiDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La7IOC2u+C2s+C3gOC3jyDgt4Pgt5Lgtqfgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgt4PgtrPgt4Tgt48g4LaL4Lap4LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgtrTgt4Tgtr3gtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIOC3gOC2uOC2pyDgt4Pgtrvgt4rgtrTgtqvgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIOC2r+C2muC3lOC2q+C2pyDgt4Pgtrvgt4rgtrTgtqvgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i4LaF4Laf4LeU4La9IOC2heC2u+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLgtprgt5Dgtrjgtrvgt4/gt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i4Lax4LeS4LeE4LasIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IuC3geC2tuC3iuC2ryDgt4Pgtprgt4rigI3gtrvgt5Pgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC3g+C3iuC3gOC2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IuC2uOC3lOC2u+C2tOC2ryDgtrrgtq3gt5Tgtrvgt5Qg4Laa4LeS4La64LeA4Lax4LeUIOC2h+C3g+C3k+C2uOC2pyDgtongt4Pgt4og4La24Lar4LeU4LeA4Laa4LeKIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i4Lax4LeQ4LeA4Lat4LeU4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUyOTM2MDA0OTY2MDE0OTAyMTYiPiLgtrjgt5Tgtr3gt4og4La04LeS4Lan4LeU4LeA4LanIOC3g+C2guC2oOC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjIzNzQ5NjU2Mjk1MjE1MjU4OSI+IuC2ieC3hOC2veC2pyDgt4PgtoLgtqDgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21lbnVfb3ZlcmZsb3dfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMjk1NjU5MDM3NTA5MDA4NDUzIj4i4Lat4LeA4Lat4LeKIOC3gOC3kuC2muC2veC3iuC2tCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI3OTY1OTg0MzYwOTAzNjkzOTAzIj4iJTEkcywgJTIkcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9zdWJ0aXRsZV9kZXNjcmlwdGlvbl9mb3JtYXQiIG1zZ2lkPSI2OTg1NTQ2NTMwNDcxNzgwNzI3Ij4iJTEkcywgJTIkcywgJTMkcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfaW50ZXJuYWwiIG1zZ2lkPSI0ODkxOTE2ODMzNjU3OTI5MjYzIj4i4LaF4La34LeK4oCN4La64Lax4LeK4Lat4La7IOC2huC2oOC2uuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2Vfc2RfY2FyZCIgbXNnaWQ9IjMyODI5NDg4NjEzNzgyODY3NDUiPiJTRCDgtrTgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3VzYiIgbXNnaWQ9IjMwMTc5NTQwNTk1Mzg1MTcyNzgiPiJVU0Ig4LaG4Lag4La64Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0cmFjdF9lZGl0X21lbnVfYnV0dG9uIiBtc2dpZD0iODk0MDQ3ODczMDQ5NjYxMDEzNyI+IuC3g+C2guC3g+C3iuC2muC2u+C2q+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSIxOTU1NjM4ODYyMTIyMjMyMzQyIj4i4Lav4Lat4LeK4LatIOC2t+C3j+C3gOC3kuC2reC3jyDgtoXgt4Dgt4Dgt4/gtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dhcm5pbmdfYm9keSIgbXNnaWQ9IjI4MTQ2NzM1NTE0NzE5Njk5NTQiPiLgtrfgt4/gt4Dgt5Lgtq3gtrog4LeD4LeEIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtrbgt5Dgtr3gt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzA5MzMzNDQxOTUxODcwNjY4NiI+IjJHLTNHIOC2r+C2reC3iuC2rSDgtoXgtrbgtr3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzYzNjQ4OTQzNjgxOTQ3MDc2MSI+IjRHIOC2r+C2reC3iuC2rSDgtoXgtrbgtr0g4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbW9iaWxlX2xpbWl0X3RpdGxlIiBtc2dpZD0iNzg2OTQwMjUxOTM5MTYzMTg4NCI+IuC2ouC2guC2nOC2uCDgtq/gtq3gt4rgtq0g4LaF4La24La9IOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfdGl0bGUiIG1zZ2lkPSI4OTkyMTU0NzM2NDQxMjg0ODY1Ij4iV2ktRmkg4Lav4Lat4LeK4LatIOC2heC2tuC2vSDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9ib2R5IiBtc2dpZD0iMzMxNzk2NDcwNjk3MzYwMTM4NiI+IuC3g+C2tuC2vSDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzNnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI3MDI2NzM5MTIxMTM4MDA1MjMxIj4iMkctM0cg4Lav4Lat4LeK4LatIOC3g+C3k+C2uOC3j+C3gCDgtongtprgt4rgtrjgt4DgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMTEwNjU2Mjc3OTMxMTIwOTAzOSI+IjRHIOC2r+C2reC3iuC2rSDgt4Pgt5Pgtrjgt4/gt4Ag4LaJ4Laa4LeK4La44LeA4LePIOC2uuC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX21vYmlsZV9saW1pdF9zbm9vemVkX3RpdGxlIiBtc2dpZD0iMjc5MjQwNTcyMTY1NDEyMTY4Ij4i4Lai4LaC4Lac4La4IOC2r+C2reC3iuC2rSDgt4Pgt5Pgtrjgt4/gt4Ag4LaJ4Laa4LeK4La44LeA4LePIOC2uuC2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9Ijg3NDM4NTYwMDYzODQ4MjU5NzQiPiJXaS1GaSDgtq/gtq3gt4rgtq0g4LeD4LeT4La44LeP4LeAIOC2ieC2muC3iuC2uOC3gOC3jyDgtrrgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9saW1pdF9zbm9vemVkX2JvZHkiIG1zZ2lkPSI3MDM1NDkwMjc4Mjk4NDQxNzY3Ij4i4LeD4Laz4LeE4Lax4LeKIOC2muC3hSDgt4Pgt5Pgtrjgt4/gt4Dgtqcg4LeA4Lap4LePIDx4bGlmZjpnIGlkPSJTSVpFIj4lczwveGxpZmY6Zz4g4LeA4LeQ4Lap4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfcmVzdHJpY3RlZF90aXRsZSIgbXNnaWQ9IjU5NjUxNTczNjEwMzYzMjE5MTQiPiLgtrTgt4Pgt5Tgtrbgt5Lgtrjgt4og4Lav4Lat4LeK4LatIOC3g+C3kuC2uOC3jyDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9yZXN0cmljdGVkX2JvZHkiIG1zZ2lkPSI2NzQxNTIxMzMwOTk3NDUyOTkwIj4i4LeD4LeT4La44LePIOC2muC3kuC2u+C3k+C2uCDgtongt4Dgtq3gt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2VydGlmaWNhdGUiIG1zZ2lkPSI2NTEwMDQwNDg2MDQ5MjM3NjM5Ij4i4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC3g+C3hOC2reC3kuC2muC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jZXJ0aWZpY2F0ZV9pc192YWxpZCIgbXNnaWQ9IjY4MjUyNjMyNTA3NzQ1NjkzNzMiPiLgtrjgt5ngtrgg4LeD4LeE4Lat4LeS4Laa4La6IOC3gOC2veC2guC2nOC3lOC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfdG8iIG1zZ2lkPSI0NTQyMzk0ODAyNzQ5MjEwMzIiPiLgtr3gtrbgt4/gtq/gt5TgtrHgt4rgtrHgt5o6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tbW9uX25hbWUiIG1zZ2lkPSIyMjMzMjA5Mjk5NDM0MTcyNjQ2Ij4i4La04Lec4Lav4LeUIOC2seC3j+C2uOC2ujoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvcmdfbmFtZSIgbXNnaWQ9IjY5NzM1NjExOTA3NjIwODUyMzYiPiLgt4PgtoLgt4Dgt5LgtrDgt4/gtrHgtro6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnX3VuaXQiIG1zZ2lkPSI3MjY1OTgxODkwNDIyMDcwMzgzIj4i4LeD4LaC4LeA4LeS4Law4LeP4Lax4LeP4Lat4LeK4La44LaaIOC2kuC2muC2muC2ujoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfYnkiIG1zZ2lkPSIyNjQ3NTg0OTg4MDU3NDgxNTY2Ij4i4La94La24LeP4Lav4LeZ4LaxIOC2veC2r+C3iuC2r+C3mjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2YWxpZGl0eV9wZXJpb2QiIG1zZ2lkPSI4ODE4ODg2MTM3NTQ1OTgzMTEwIj4i4LeA4La94LaC4Lac4LeU4Lat4LeP4LeA4La6OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imlzc3VlZF9vbiIgbXNnaWQ9IjU4OTUwMTc0MDQzNjEzOTcyMzIiPiLgtrHgt5Lgtprgt5Tgtq3gt4og4Laa4La74LaxIOC2veC2r+C3iuC2r+C3mjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHBpcmVzX29uIiBtc2dpZD0iMzY3NjI0Mjk0OTkxNTk1OTgyMSI+IuC2muC2veC3iiDgtongtprgt5Tgtq3gt4og4LeA4Lax4LeK4Lax4LeaOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcmlhbF9udW1iZXIiIG1zZ2lkPSI3NTg4MTQwNjc2NjA4NjI0OTMiPiLgtoXgtrHgt5Tgtprgt4rigI3gtrvgtrjgt4/gtoLgtprgtro6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZ2VycHJpbnRzIiBtc2dpZD0iNDUxNjAxOTYxOTg1MDc2MzA0OSI+IuC2h+C2n+C3kuC2veC3kiDgt4Pgtr3gtprgt5Tgtqvgt5Q6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhMjU2X2ZpbmdlcnByaW50IiBtc2dpZD0iNDM5MTI3MTI4NjQ3NzI3OTI2MyI+IlNIQS0yNTYg4LaH4Laf4LeS4La94LeS4LeD4La94Laa4LeU4LarOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTFfZmluZ2VycHJpbnQiIG1zZ2lkPSI3OTMwMzMwMjM1MjY5NDA0NTgxIj4iU0hBLTEg4LaH4Laf4LeS4La94LeSIOC3g+C2veC2muC3lOC2qzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfc2VlX2FsbCIgbXNnaWQ9IjQyOTI1NjkzODM5NzY2MzYyMDAiPiLgt4Pgt5Lgtrrgtr3gt4rgtr0g4La24La94Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfY2hvb3Nlcl92aWV3X2RpYWxvZ190aXRsZV9kZWZhdWx0IiBtc2dpZD0iNDcxMDAxMzg2NDk3NDA0MDYxNSI+IuC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C2muC2uCDgtq3gt53gtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV9hY3Rpb25fcHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjUyNDc2ODQ0MzU5NzkxNDkyMTYiPiLgt4Pgtrjgtp8g4La24LeZ4Lav4LeP4Lac4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9kZXZpY2VfbG9ja2VkIiBtc2dpZD0iMzA5MjcwMzQ0ODY5MDY2OTc2OCI+IuC2i+C2tOC3j+C2guC2nOC2uuC2pyDgtoXgtpzgt5Tgt4Xgt5Qg4LeA4LeQ4Lan4LeSIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsaXN0X2RlbGltZXRlciIgbXNnaWQ9IjM5NzUxMTc1NzIxODU0OTQxNTIiPiIsICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbmRpbmciIG1zZ2lkPSIzMjQ1NjUzNjgxMDA4MjE4MDMwIj4i4La64LeA4La44LeS4Lax4LeKLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoQnJvd3NlckRlZmF1bHQiIG1zZ2lkPSIyMDU3OTUxOTQ3Mjk3NjE0NzI1Ij4i4La24LeK4oCN4La74LeA4LeU4LeD4La74La6IOC2r+C3kuC2uuC2reC3iiDgtprgtrvgtrHgt4rgtrHgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iU2V0dXBDYWxsRGVmYXVsdCIgbXNnaWQ9IjU4MzQ5NDg0NjkyNTM3NTg1NzUiPiLgtofgtrjgtq3gt5Tgtrgg4La04LeS4LeF4LeS4Lac4Lax4LeK4Lax4LeA4LeP4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9hbHdheXMiIG1zZ2lkPSI4MDE3NzcwNzQ3ODAxNDk0OTMzIj4i4LeD4LeQ4La4IOC3gOC3kuC2p+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X3Jlc29sdmVyX3VzZV9vbmNlIiBtc2dpZD0iMjQwNDY0NDc5NzE0OTE3Mzc1OCI+IuC2keC2muC3iiDgt4Dgt4/gtrvgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MTcwNTM4OTgxNjcxMjc0NzEiPiLgtqfgt5Dgtrbgt4rgtr3gtqfgt4rgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MjM5MjkxMjczNDIwMTQwMTIzIj4i4Lav4LeU4La74Laa4Lau4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2hlYWRwaG9uZXMiIG1zZ2lkPSI4MTE5OTcxODQzODAzNDM5MTEwIj4i4LaJ4LeD4LeKIOC2tuC2q+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfbmFtZV9kb2NrX3NwZWFrZXJzIiBtc2dpZD0iNjI0MDYwMjk4MjI3NjU5MTg2NCI+IuC2seC3j+C2r+C2miDgtqngt5zgtprgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9tZWRpYV9yb3V0ZV9uYW1lX2hkbWkiIG1zZ2lkPSIyNDUwOTcwMzk5MDIzNDc4MDU1Ij4iSERNSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLgtrTgtq/gt4rgtrDgtq3gt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgt4Hgt4rigI3gtrvgt4Dgt4rigI3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IuC2u+C3kOC3hOC3kOC2seC3iiDgtrvgt4Tgt5Lgtq0g4Lav4La74LeK4LeB4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IuC2uOC3j+C2sOC3iuKAjeC2uiDgtrTgt4rigI3gtrvgtq3gt5Lgtq/gt4/gtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i4La04La74LeS4La94Led4Laa4Lax4La6IOC2muC2u+C2uOC3kuC2seC3iuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IuC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5ngtrjgt5LgtrHgt4rigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IuC2veC2tuC3j+C2nOC2rSDgt4Tgt5DgtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9IjY3Mzk4OTk5NjI2ODE4ODY0MDEiPiLgtr3gtrbgt4/gtpzgtq0g4Lax4Lec4LeE4LeQ4LaaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiLgtrfgt4/gt4Dgt5Lgtq3gtrrgt5og4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2J1aWx0X2luX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjI1ODMxMzQyOTQyOTI1NjM5NDEiPiLgtq3gt5Lgt4Xgt5Dgtr3gt5Ig4Lat4LeS4La74La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2hkbWlfZGlzcGxheV9uYW1lIiBtc2dpZD0iMTU1NTI2NDU1OTIyNzQ3MDEwOSI+IkhETUkg4Lat4LeS4La74La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IuC2i+C2qeC3kOC2reC3kuC2u+C3kuC2uiAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIOC2huC2u+C2muC3iuKAjeC3guC3kuC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4i4Lax4Lec4La74LeQ4LeE4LeQ4Lax4LeKIOC3g+C2guC2r+C2u+C3iuC3geC2muC2uiDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i4LeA4LeZ4Lax4Lat4LeKIOC2i+C2tOC3j+C2guC2nOC2uuC2muC3iiDgtrjgtq0g4La44LeZ4La4IOC2reC3kuC2u+C2uiDgtrTgt5ngtrHgt4rgt4Dgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i4LeA4LeS4LeD4Lax4LeK4Law4LeSIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i4LeE4Lav4LeS4LeD4LeSIOC2h+C2uOC2reC3lOC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IuC2u+C2p+C3j+C3gCDgtoXgtrjgtq3gtprgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IuC3gOC3kOC2u+C2r+C3kiDgtrvgtqfgt4/gt4Dgtprgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiLgt4Dgt5Dgtrvgtq/gt5Ig4La44LeU4La74La04Lav4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+IlBJTiDgtpHgtpog4LeA4LeQ4La74Lav4LeS4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiLgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkZDwveGxpZmY6Zz4g4LanIOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+IuC2lOC2tuC2nOC3miDgtrvgtqfgt4/gt4Ag4LaF4Laz4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iU0lNIFBJTiDgtofgtq3gt5Tgtr3gt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJQSU4g4LaR4LaaIOC2h+C2reC3lOC3heC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i4La44LeU4La74La04Lav4La6IOC2h+C2reC3lOC3heC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiLgtq/gt5DgtrHgt4ogU0lNIOC2keC2miDgtoXgtrbgtr0g4Laa4La7IOC2h+C2rS4g4LaJ4Lav4LeS4La74LeS4La64LanIOC2uuC3j+C2uOC2pyBQVUsg4Laa4Lea4Lat4La6IOC2uuC3nOC2r+C2seC3iuC2sS4g4LeA4LeS4LeD4LeK4Lat4La7IOC3g+C2s+C3hOC3jyDgt4Dgt4/gt4Tgtprgtrrgt48g4LaF4La44Lat4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLgtoXgtrTgt5rgtprgt4rgt4Lgt5Lgtq0gUElOIOC2muC3muC2reC2uiDgtofgtq3gt5Tgt4Xgtq3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IuC2heC2tOC3muC2muC3iuC3guC3kuC2rSBQSU4g4Laa4Lea4Lat4La6IOC3g+C3iuC2ruC3kuC2uyDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDgtrTgtq0g4LaF4Lac4LeU4LeF4LeUIOC2heC2u+C3kuC2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IuC3gOC3kOC2u+C2r+C3kiBQSU4g4Laa4Lea4Lat4La64Laa4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IuC2heC2guC2miA0IOC3g+C3kuC2pyA4IOC2heC2reC2uyDgt4DgtrEgUElOIOC2keC2muC2muC3iiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDgtprgt5rgtq3gtrog4LeD4LaC4Lab4LeK4oCN4La64LePIDgg4Laa4LeKIOC3hOC3nSDgt4Dgt5Dgtqngt5Ig4LeA4LeS4La6IOC2uuC3lOC2reC3lOC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLgtrHgt5Lgt4Dgt5Dgtrvgtq/gt5IgUFVLIOC2muC3muC2reC2uiDgtrHgt5Dgt4Dgtq0g4LaH4Lat4LeU4La94Lat4LeKIOC2muC2u+C2seC3iuC2sS4g4Lax4LeQ4LeA4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4LeS4La74LeT4La44LeZ4Lax4LeKIFNJTSDgtpHgtpog4LeD4LeK4Lau4LeS4La74LeA4La4IOC2heC2tuC2vSDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiDgtprgt5rgtq0g4Lac4LeQ4La94La04LeTIOC2seC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuC2u+C2p+C3jyDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4LeS4La74LeT4La44LeKIOC3gOC3kOC2qeC3kuC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanLCDgtpTgtrbgtpzgt5ogR29vZ2xlIOC2nOC3kuC2q+C3lOC2uCDgt4Pgtrjgtpwg4La04LeU4La74Lax4La6IOC3gOC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+IuC2tOC2u+C3kuC3geC3k+C2veC2miDgtrHgt4/gtrjgtrogKOC2ii3gtq3gt5DgtrTgt5Hgtr0pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLgtrjgt5TgtrvgtrTgtq/gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IuC2tOC3lOC2u+C2seC2uiDgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+IuC3gOC2veC2guC2nOC3lCDgtrHgt5zgt4DgtrEg4La04La74LeS4LeB4LeT4La94LaaIOC2seC3j+C2uOC2uuC2muC3iiDgt4Tgt50g4La44LeU4La74La04Lav4La64Laa4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLgtpTgtrbgtpzgt5og4La04La74LeS4LeB4LeT4La94LaaIOC2seC3j+C2uOC2uiDgt4Tgt50g4La44LeU4La74La04Lav4La6IOC2heC2uOC2reC2muC2rz9cbiAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIg4LeA4LeZ4LatIOC2uuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiLgtpzgt5Lgtqvgt5Tgtrgg4La04La74LeT4Laa4LeK4LeC4LePIOC2muC2u+C2uOC3kuC2seC3iuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4LaU4La2IFBJTiDgtoXgtoLgtprgtrogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtqfgtrrgt5LgtrTgt4og4Laa4Lec4LanIOC2h+C2rS5cblxuIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaH4Lat4LeU4LeF4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LaU4La24Lac4LeaIOC2uOC3lOC2u+C2tOC2r+C2uiDgtpTgtrYg4LeA4LeQ4La74Lav4LeS4La64LanIOC2p+C2uuC3kuC2tOC3iiDgtprgtrsg4LaH4LatLiBcblxu4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2pyDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuC2lOC2tiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgt4/gtrvgtrrgtprgt4og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC3miDgtrvgtqfgt4/gt4Ag4LeA4LeQ4La74Lav4LeS4La64LanIOC2h+C2syDgtofgtq0uIFxuXG7gtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2h+C2reC3lOC3heC2rSDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiLgtpTgtrYg4Lan4LeQ4La24LeK4La94Lan4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LeA4LeQ4La74Lav4LeS4La64LanIOC2heC3gOC3g+C3iuC2ruC3jyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgtprgt4og4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2uyDgtofgtq0uIOC2heC3gOC3g+C3iuC2ruC3jyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaF4LeD4LeP4La74LeK4Lau4Laa4LeAIOC2i+C2reC3iuC3g+C3hCDgtprgt5Lgtrvgt5Pgtrjgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtprgtrvgt4rgtrjgt4/gtrHgt4rgtq0g4LeB4LeP4La94LePIOC2uOC3lOC2veC3iiDgtq3gtq3gt4rgt4Dgtrrgtqcg4Lax4LeQ4LeA4LatIOC2tOC2reC3iiDgt4DgtrEg4LaF4Lat4La7IOC3g+C3kuC2uuC2veC3lCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kiDgt4Dgt5ngtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IuC2lOC2tiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgt4Dgt4/gtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Laa4Lav4LeTIOC3gOC3kOC2u+C2r+C3kyDgtrTgt4rigI3gtrvgtrrgtq3gt4rgtrHgtrrgtrHgt4og4Lac4LeZ4LaxIOC2reC3kuC2tuC3mi4g4Lat4LeA4Lat4LeKIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtrTgt4rigI3gtrvgtrrgtq3gt4rgtrEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt4/gt4Dgt5og4LeD4LeU4La04LeU4La74LeU4Lav4LeK4Lav4LanIOC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrEg4LaF4Lat4La7IOC3g+C3kuC2uuC2veC3lOC2uCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2seC3kOC2reC3kiDgt4Dgt5Mg4La64La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4i4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LaU4La2IOC3gOC3kOC2u+C2r+C3kiDgtrTgt4rigI3gtrvgtrrgtq3gt4rgtrEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC3gOC3j+C2u+C2uuC2muC3iiDgtpzgt5ngtrEg4LaH4LatLiDgtq/gt5DgtrHgt4og4Lan4LeQ4La24LeK4La94Lan4La6IOC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt48g4LeD4LeU4La04LeU4La74LeU4Lav4LeK4LavIOC3gOC3meC2rSDgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LeT4La4IOC2muC3meC2u+C3mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiLgtpTgtrYg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LeA4LeP4La7IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgtprgtq/gt5Mg4LeA4LeQ4La74Lav4LeTIOC2tOC3iuKAjeC2u+C2uuC2seC3iuC2reC2uuC2seC3iiDgtpzgt5ngtrEg4Lat4LeS4La24LeaLiDgtq/gt5DgtrHgt4og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2muC2u+C3iuC2uOC3j+C2seC3iuC2reC3geC3j+C2veC3jyDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq/gtqcg4La04LeS4LeE4LeS4Lan4LeU4LeA4Lax4LeUIOC2veC2tuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4LaU4La2IOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Lgtrjgt5og4La74Lan4LeP4LeAIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4LaH4LazIOC2h+C2rS4g4Lat4LeA4Lat4LeKIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtovgtq3gt4rgt4Pgt4/gt4QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4LaKLeC2reC3kOC2tOC3kOC2veC3iiDgtpzgt5Lgtqvgt5Tgtrgg4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2uOC3kuC2seC3iiDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LaU4La24LanIOC2tOC3gOC3g+C2seC3lCDgtofgtq0uXG5cbiDgtrHgt5Dgt4Dgtq0g4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4LaU4La2IOC3gOC3kOC2u+C2r+C3kuC2uuC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LaU4La24Lac4LeaIOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgt5og4La74Lan4LeP4LeAIOC2h+C2syDgtofgtq0uIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtovgtq3gt4rgt4Pgt4Qg4Laa4LeS4La74LeT4La44LeKIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2lOC2tuC2nOC3miDgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2veC3kuC2tOC3kuC2seC2uiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC2lOC2tuC2nOC3meC2seC3iiDgtoXgt4Pgtrrgt5IuXG5cbiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Lax4LeKIOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLgtongt4Dgtq3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2FmZV9tZWRpYV92b2x1bWVfd2FybmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjczMjQxNjE5Mzk0NzU0NzgwNjYiPiLgtrHgt5Lgtrvgt4rgtq/gt5rgt4Hgt5Lgtq0g4La44Lan4LeK4Lan4La44LeZ4Lax4LeKIOC2ieC3hOC3heC2pyDgt4Hgtrbgt4rgtq/gtrog4LeA4LeQ4Lap4LeSIOC2muC2u+C2seC3gOC2rz9cbuC3gOC3kOC2qeC3kiDgtprgt4/gtr3gtrrgtprgt4og4LaJ4LeE4LeFIOC3geC2tuC3iuC2r+C2uuC2muC3iiDgt4Hgt4rigI3gtrvgt4DgtrHgtrog4Laa4LeS4La74LeT4La44LeZ4Lax4LeKIOC2lOC2tuC2nOC3miDgt4Hgt4rigI3gtrvgt4DgtrHgtrrgtqcg4LeE4LeP4Lax4LeSIOC3gOC3kuC2uiDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGludWVfdG9fZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNjI2NDI3MzcyMzE2MDcwMjU4Ij4i4La04LeK4oCN4La74LeA4Lea4LeB4LeK4oCN4La64Lat4LeP4LeA4La6IOC3g+C2tuC2vSDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaH4Laf4LeS4La94LeSIOC2r+C3meC2muC2muC3iiDgtrTgt4Tgt4Xgtqcg4La74Laz4LeA4LePIOC3g+C3kuC2p+C3kuC2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2VuYWJsZWQiIG1zZ2lkPSIxMzgxOTcyMDQ4NTY0NTQ3Njg1Ij4i4La04oCN4LeK4oCN4La74LeA4Lea4LeB4LeK4oCN4La64Lat4LeP4LeAIOC3g+C2tuC2vSDgtprgtrvgtrEg4La94Lav4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9hY2Nlc3NpYmlsaXR5X2NhbmNlbGVkIiBtc2dpZD0iMzgzMzkyMzI1Nzk2NjYzNTY3MyI+IuC2tOKAjeC3iuKAjeC2u+C3gOC3muC3geC3iuKAjeC2uuC2reC3j+C3gCDgtoXgt4Dgtr3gtoLgtpzgt5Qg4Laa4La7IOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IuC2r+C3kOC2seC2pyDgt4Pgt5Lgtqfgt5LgtrEg4La04La74LeS4LeB4LeT4La94Laa4La64LePIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvd25lcl9uYW1lIiBtc2dpZD0iMjcxNjc1NTQ2MDM3NjAyODE1NCI+IuC3hOC3kuC2uOC3kuC2muC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVycm9yX21lc3NhZ2VfdGl0bGUiIG1zZ2lkPSI0NTEwMzczMDgzMDgyNTAwMTk1Ij4i4Lav4Led4LeC4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX25vX3Jlc3RyaWN0ZWRfYWNjb3VudHMiIG1zZ2lkPSI1NzM5NDYzMjQ5NjczNzI3NzM2Ij4i4LeD4LeT4La44LePIOC3g+C3hOC3kuC2rSDgtrTgt5Dgtq3gt5Lgtprgtqkg4LeD4Laz4LeE4LePIOC3gOC2sSDgtpzgt5Lgtqvgt5Tgtrjgt4og4LeA4LeZ4LatIOC2uOC3meC2uCDgtrrgt5ngtq/gt5Tgtrgg4LeD4LeE4La6IOC2seC3nOC2r+C2muC3iuC3gOC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ub3RfZm91bmQiIG1zZ2lkPSIzNDI5MTQxODUzNDk4OTI3Mzc5Ij4i4La44LeZ4La4IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gCDgt4Tgt4Pgt5Tgtrvgt5Tgt4Dgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44Laa4LeKIOC3g+C3nOC2uuC3j+C2nOC2reC3iuC2reC3miDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXZva2UiIG1zZ2lkPSI1NDA0NDc5MTg1MjI4MjcxNTg2Ij4i4LaF4LeE4Led4LeD4LeSIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTAiIG1zZ2lkPSI3ODc1NDI3NDg5NDIwODIxNzkzIj4iSVNPIEEwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMSIgbXNnaWQ9IjM3NjA3MzQ0OTkwNTA4NzUzNTYiPiJJU08gQTEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2EyIiBtc2dpZD0iNTk3MzI2NjM3ODAyMDE0NDM4MiI+IklTTyBBMiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTMiIG1zZ2lkPSIxMzczNDA3MTA1Njg3MzAwODg0Ij4iSVNPIEEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNCIgbXNnaWQ9IjY2ODk3NzI4MDc5ODI1OTcyNTQiPiJJU08gQTQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E1IiBtc2dpZD0iNTM1MzU0OTY1MjAxNTc0MTA0MCI+IklTTyBBNSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTYiIG1zZ2lkPSI4NTg1MDM4MDQ4Njc0OTExOTA3Ij4iSVNPIEE2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hNyIgbXNnaWQ9IjY2NDE4MzY3MTY5NjM4MzkxMTkiPiJJU08gQTciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2E4IiBtc2dpZD0iNzU3MTEzOTQzNzQ2NTY5MzM1NSI+IklTTyBBOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYTkiIG1zZ2lkPSIxMzc4NDU1ODkxOTU3MTE1MDc5Ij4iSVNPIEE5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19hMTAiIG1zZ2lkPSIyNDgwNzQ3NDU3NDI5NDc1MzQ0Ij4iSVNPIEExMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjAiIG1zZ2lkPSIzOTY1OTM1MDk3NjYxMTA4MDM5Ij4iSVNPIEIwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMSIgbXNnaWQ9IjI1MDU3NTMyODUwMTAxMTU0MzciPiJJU08gQjEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2IyIiBtc2dpZD0iODc2Mzg3NDcwOTg1OTQ1ODQ1MyI+IklTTyBCMiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjMiIG1zZ2lkPSI0MjEwNTA2Njg4MTkxNzY0MDc2Ij4iSVNPIEIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNCIgbXNnaWQ9IjU3NDk0MDQxNjU4ODg1MjYwMzQiPiJJU08gQjQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I1IiBtc2dpZD0iNzY0MDYyNzQxNDYyMTkwNDczMyI+IklTTyBCNSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjYiIG1zZ2lkPSI3MzQyOTg4ODY0NzEyNzQ4NTQ0Ij4iSVNPIEI2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iNyIgbXNnaWQ9IjUwNjk4NDQwNjUyMzUzODI0MjkiPiJJU08gQjciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2I4IiBtc2dpZD0iNzMxNjgxODkyMjI3ODc3OTc3NCI+IklTTyBCOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYjkiIG1zZ2lkPSI1NDE0NzI3MDk0MDI2NTMyMzQxIj4iSVNPIEI5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19iMTAiIG1zZ2lkPSI1MjUxMjUzNzMxODMyMDQ4MTg1Ij4iSVNPIEIxMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzAiIG1zZ2lkPSI0MDAzMTM4MzQyNjcxOTY0MjE3Ij4iSVNPIEMwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jMSIgbXNnaWQ9IjE5MzUxODgwNjMzOTM1NTMwMDgiPiJJU08gQzEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MyIiBtc2dpZD0iMzE5NzMwNzk2OTcxMjA2OTkwNCI+IklTTyBDMiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzMiIG1zZ2lkPSI0MzM1ODI2MDg3MzIxOTEzNTA4Ij4iSVNPIEMzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jNCIgbXNnaWQ9IjM3NDU2Mzk1OTgyODEwMTUwMDUiPiJJU08gQzQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M1IiBtc2dpZD0iODI2OTQ1Nzc2NTgyMjc5MTAxMyI+IklTTyBDNSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzYiIG1zZ2lkPSI1NjY2NjYxMDUyNjAzNDY5MzAiPiJJU08gQzYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2M3IiBtc2dpZD0iODY3ODQxMzE4MDc4MjYwODQ5OCI+IklTTyBDNyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9pc29fYzgiIG1zZ2lkPSI4MzkyMzc2MjA2NjI3MDQxNzMwIj4iSVNPIEM4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX2lzb19jOSIgbXNnaWQ9IjkxOTE2MTMzNzIzMjQ4NDU0MDUiPiJJU08gQzkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfaXNvX2MxMCIgbXNnaWQ9IjczMjc3MDk2OTkxODQ5MjA4MjIiPiJJU08gQzEwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2xldHRlciIgbXNnaWQ9IjQxOTE4MDU2MTU4Mjk0NzI5NTMiPiLgtoXgtprgt5Tgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfZ3Zybm10X2xldHRlciIgbXNnaWQ9Ijc4NTMzODIxOTI2NDk0MDU1MDciPiLgtrvgtqLgtrrgt5og4La94LeS4La04LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFTaXplX25hX2xlZ2FsIiBtc2dpZD0iNjY5Nzk4Mjk4ODI4MzgyMzE1MCI+IuC2seC3k+C2reC3iuKAjeC2uuC2seC3lOC2muC3luC2vSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9qdW5pb3JfbGVnYWwiIG1zZ2lkPSIzNzI3NzQzOTY5OTAyNzU4OTQ4Ij4i4La04LeK4oCN4La74LeP4Lau4La44LeS4LaaIOC2seC3k+C2reC3kuC2uOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhU2l6ZV9uYV9sZWRnZXIiIG1zZ2lkPSIyODE4NzE0NjQ4OTY2MDEyMzYiPiLgtr3gt5ngtqLgtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYVNpemVfbmFfdGFibG9pZCIgbXNnaWQ9IjU3NzU5NjY0MTYzMzM1NzgxMjciPiLgtprgt5Tgtqngt48g4La04LeU4LeA4Lat4LeK4La04LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id3JpdGVfZmFpbF9yZWFzb25fY2FuY2VsbGVkIiBtc2dpZD0iNzA5MTI1ODM3ODEyMTYyNzYyNCI+IuC2heC3gOC2veC2guC2nOC3lCDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id3JpdGVfZmFpbF9yZWFzb25fY2Fubm90X3dyaXRlIiBtc2dpZD0iODEzMjUwNTQxNzkzNTMzNzcyNCI+IuC2heC2seC3iuC2reC2u+C3iuC2nOC2reC2uiDgtr3gt5Lgt4Dgt5Pgtrjgt5rgtq/gt5Mg4Lav4Led4LeC4La64Laa4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX3BpbiIgbXNnaWQ9IjMzOTU5NTM0MjEzNjg0NzYxMDMiPiJQSU4g4LaR4LaaIOC2h+C2reC3lOC3heC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfb2xkX3BpbiIgbXNnaWQ9IjE0NjIyMDYyMjU1MTI5MTA3NTciPiLgt4Dgtq3gt4rgtrjgtrHgt4ogUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX25ld19waW4iIG1zZ2lkPSI1OTU5NjA2NjkxNjE5OTU5MTg0Ij4i4Lax4LeAIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jb25maXJtX3BpbiIgbXNnaWQ9Ijg1MDE1MjM4Mjk2MzMxNDYyMzkiPiLgtrHgt4AgUElOIOC2reC3hOC3gOC3lOC2u+C3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY3JlYXRlX3BpbiIgbXNnaWQ9IjgwMTc2MDAwMDAyNjM0NTAzMzciPiLgt4Pgt5Lgtrjgt48g4LeA4LeQ4Lap4LeS4Lav4LeS4La64LeU4Lar4LeUIOC2muC3kuC2u+C3k+C2uOC2pyBQSU4g4LeD4LeP4Lav4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX2RvZXNudF9tYXRjaCIgbXNnaWQ9IjIyMjQyMTQxOTA5MDY5OTQ1NDgiPiJQSU4g4Lax4Lec4Lac4LeQ4LeF4La04LeZ4La64LeSLiDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfdG9vX3Nob3J0IiBtc2dpZD0iODE3Mzk4Mjc1NjI2NTc3Nzc5MiI+IlBJTiDgtprgt5Tgtqngt48g4LeA4LeQ4Lap4LeS4La6LiDgtongtr3gtprgt4rgtprgtrjgt4ogNCDgt4Dgtq3gt4og4LeA4LeS4La6IOC2uuC3lOC2reC3lOC2ui4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InJlc3RyX3Bpbl9jb3VudGRvd24iPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0ODM1NjM5OTY5NTAzNzI5ODc0Ij4i4LeA4LeQ4La74Lav4LeSIFBJTi4g4Lat4Lat4LeK4La04La74La64Laa4LeS4Lax4LeKIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODAzMDYwNzM0MzIyMzI4NzY1NCI+IuC3gOC3kOC2u+C2r+C3kiBQSU4uIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0idHJhbnNpZW50X25hdmlnYXRpb25fY29uZmlybWF0aW9uIiBtc2dpZD0iNDkwNzg0NDA0MzYxMTEyMzQyNiI+IuC2reC3k+C2u+C3lOC3gCDgtoXgtrHgt4/gt4Dgtrvgtqvgtrrgtqcg4Lat4LeS4La74La64LeaIOC2muC3meC2veC3gOC2uyDgtoXgtq/gt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0cmFuc2llbnRfbmF2aWdhdGlvbl9jb25maXJtYXRpb25fbG9uZyIgbXNnaWQ9IjgwNjE2ODU5MjA1MDgwODY2OTciPiLgtrTgtq/gt4rgtrDgtq3gt5Ig4Lat4LeT4La74LeU4LeAIOC2heC2seC3j+C3gOC2u+C2q+C2uuC2pyDgtq3gt5Lgtrvgtrrgt5og4Laa4LeZ4La94LeA4La74LeS4Lax4LeKIOC2heC2r+C3kuC2seC3iuC2sSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKaW5kZXggY2Q4NjVhYS4uODc4NjBmMyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJaYWRhanRlIGvDs2QgUFVLLCBrdG9yw70gbcOhIDggYWxlYm8gdmlhYyDEjcOtc2VsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJLYXJ0YSBTSU0gamUgdXphbWtudXTDoSBwb21vY291IGvDs2R1IFBVSy4gT2RvbWtuaXRlIGp1IHphZGFuw61tIGvDs2R1IFBVSy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJBayBjaGNldGUgb2RibG9rb3ZhxaUga2FydHUgU0lNLCB6YWRhanRlIGvDs2QgUFVLMi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJOZcO6c3BlxaFuw6ksIHBvdm/EvnRlIHV6YW1rbnV0aWUgU0lNL1JVSU0uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iWm9zdMOhdmEgdsOhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9rdXMsIG5lxb4gc2EgdmHFoWEga2FydGEgU0lNIHV6YW1rbmUuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iUG/EjWV0IHpvc3TDoXZhasO6Y2ljaCBwb2t1c292IHByZWQgdXphbWtudXTDrW0ga2FydHkgU0lNOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJQcmljaMOhZHphasO6Y2EgaWRlbnRpZmlrw6FjaWEgdm9sYWrDumNlaG8iPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IlVtb8W+xYh1amUgZHLFvml0ZcS+b3ZpIHZpYXphxaUgc2EgbmEgbmFqdnnFocWhaXUgw7pyb3ZlxYggcm96aHJhbmlhIHNsdcW+YnkgVlBOLiBCZcW+bsOpIGFwbGlrw6FjaWUgYnkgdG90byBuYXN0YXZlbmllIG5lbWFsaSBuaWtkeSBwb3RyZWJvdmHFpS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4idsOkemJhIG5hIHRhcGV0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iVW1vxb7FiHVqZSBkcsW+aXRlxL5vdmkgdmlhemHFpSBzYSBuYSBuYWp2ecWhxaFpdSDDunJvdmXFiCByb3pocmFuaWEgdGFwZXR5LiBCZcW+bsOpIGFwbGlrw6FjaWUgYnkgdG90byBuYXN0YXZlbmllIG5lbWFsaSBuaWtkeSBwb3RyZWJvdmHFpS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+InZpYXphxaUgbmEgdnpkaWFsZW7DvSBkaXNwbGVqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iVW1vxb7FiHVqZSBkcsW+aXRlxL5vdmkgdmlhemHFpSBzYSBuYSBuYWp2ecWhxaFpdSDDunJvdmXFiCByb3pocmFuaWEgdnpkaWFsZW7DqWhvIGRpc3BsZWphLiBCZcW+bsOpIGFwbGlrw6FjaWUgYnkgdG90byBuYXN0YXZlbmllIG5lbWFsaSBuaWtkeSBwb3RyZWJvdmHFpS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiJ2aWF6YcWlIHNhIGsgc2x1xb5iZSBtaW5pYXBsaWvDoWNpZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJVbW/FvsWIdWplIGRyxb5pdGXEvm92aSB2aWF6YcWlIHNhIG5hIG5hanZ5xaHFoWl1IMO6cm92ZcWIIHJvemhyYW5pYSBzbHXFvmJ5IG1pbmlhcGxpa8OhY2nDrS4gQmXFvm7DqSBhcGxpa8OhY2llIGJ5IHRvdG8gbmFzdGF2ZW5pZSBuZW1hbGkgbmlrZHkgcG90cmVib3ZhxaUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4ia29tdW5pa292YcWlIHNvIHNwcsOhdmNvbSB6YXJpYWRlbmlhIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiJVbW/FvsWIdWplIGFwbGlrw6FjaWkgcG91xb7DrXZhxaUgZnVua2NpZSBuw616a2VqIMO6cm92bmUgYXBsaWvDoWNpZSBTdXJmYWNlRmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLEjcOtdGFuaWUgdnlyb3Zuw6F2YWNlaiBwYW3DpHRlIHNuw61tb2siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iVW1vxb7FiHVqZSBhcGxpa8OhY2lpIMSNw610YcWlIG9ic2FoIHZ5cm92bsOhdmFjZWogcGFtw6R0ZSBzbsOtbW9rLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+InByw61zdHVwIGsgYXBsaWvDoWNpaSBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iVW1vxb7FiHVqZSBhcGxpa8OhY2lpIHBvdcW+w612YcWlIGZ1bmtjaWUgbsOtemtlaiDDunJvdm5lIGFwbGlrw6FjaWUgSW5wdXRGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ia29uZmlndXJvdmHFpSBkaXNwbGVqZSBjZXogc2llxaUgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJVbW/FvsWIdWplIGFwbGlrw6FjaWkga29uZmlndXJvdmHFpSBkaXNwbGVqZSBhIHByaXBvamnFpSBzYSBrIG5pbSBjZXogc2lldGUgV2ktRmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJvdmzDoWRhxaUgZGlzcGxlamUgY2V6IHNpZcWlIFdpLUZpIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+Ilp2b8S+dGUgYXBsaWvDoWNpdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IkFwbGlrw6FjaXUgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiBuaWUgamUgbW/Fvm7DqSBzcHVzdGnFpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IlpkaWXEvmHFpSBzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IlpkaWXEvmHFpSBzIGFwbGlrw6FjaW91IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iUG9zdXZuw6kgdGxhxI1pZGxvLiBEb3Rrbml0ZSBzYSBhIHBvZHLFvnRlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJQcmVqZGl0ZSBwcnN0b20gbmFob3I6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJQcmVqZGl0ZSBwcnN0b20gbmFkb2w6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJQcmVqZGl0ZSBwcnN0b20gZG/EvmF2YTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJQcmVqZGl0ZSBwcnN0b20gZG9wcmF2YTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iT2RvbWtuw7rFpSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJGb3RvYXBhcsOhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJUaWNow70iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iWmFwbsO6xaUgenZ1ayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iVnloxL5hZMOhdmFuaWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJQb3N1bm9tIG9kb21rbsO6xaUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IkFrIHNpIGNoY2V0ZSB2eXBvxI11xaUgdnlzbG92ZW7DqSBrbMOhdmVzeSBoZXNsYSwgcHJpcG9qdGUgbsOhaGxhdm7DuiBzw7pwcmF2dS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiJCb2RrYS4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTeXN0w6ltIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGggYXVkaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IkJlemRyw7R0b3bDvSBkaXNwbGVqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IkhvdG92byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IlbDvXN0dXAgbcOpZGnDrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iUHJpcG9qZW5pZSBrIHphcmlhZGVuaXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJPZG92emRhbmllIG9icmF6LiBuYSBwcmVocmF0aWUgdiB6YXJpYWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iUHJlYmllaGEgdnloxL5hZMOhdmFuaWUgemFyaWFkZW7DreKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+Ik5hc3RhdmVuaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iT2Rwb2ppxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iUHJlYmllaGEgdnloxL5hZMOhdmFuaWUuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJQcmViaWVoYSBwcmlww6FqYW5pZeKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iSyBkaXNwb3rDrWNpaSI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IlByZWtyeXRpZSDEjS4gPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz4geCA8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IiwgemFiZXpwZcSNZW7DqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iQmV6ZHLDtHRvdsO9IGRpc3BsZWogamUgcHJpcG9qZW7DvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJUw6F0byBvYnJhem92a2Egc2Egem9icmF6dWplIG5hIGlub20gemFyaWFkZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJPZG92emTDoXZhbmllIG9icmF6b3ZreSBuYSBwcmVocmF0aWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiJQcmViaWVoYSBwcmlww6FqYW5pZSBrIG9icmF6b3ZrZSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJPZG92emTDoXZhbmllIG9icmF6b3ZreSBuYSBwcmVocmF0aWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IlByaXBvamVuw6kgayBvYnJhem92a2UgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+Ik9kcG9qacWlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJUaWVzxYhvdsOpIHZvbGFuaWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJOZXBhbcOkdMOhbSBzaSB2em9yIjwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU2LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+IlNrw7pzdGUgdG8gemFzIG8gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gcyI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJTa8O6c3RlIHRvIHpub3ZhIG5lc2vDtHIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iUmXFvmltIGNlbGVqIG9icmF6LiB1a29uxI3DrXRlIHBvc3VudXTDrW0gbmFkb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iUmXFvmltIGNlbGVqIG9icmF6b3ZreSB1a29uxI3DrXRlIHBvc3VudXTDrW0gbmFkb2wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJIb3Rvdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiJLcnVob3bDvSBwb3PDunZhxI0gaG9kw61uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJLcnVob3bDvSBwb3PDunZhxI0gbWluw7p0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlZ5YmVydGUgaG9kaW55Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iVnliZXJ0ZSBtaW7DunR5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJUYWJ1xL5rYSBkbsOtIHYgbWVzaWFjaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+Ilpvem5hbSByb2tvdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iVnliZXJ0ZSBtZXNpYWMgYSBkZcWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iVnliZXJ0ZSByb2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iQm9sYSB2eWJyYXTDoSBwb2xvxb5rYSA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiLEjMOtc2xvIDx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+IGJvbG8gb2RzdHLDoW5lbsOpIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbAppbmRleCA0M2RhODExLi5mYTQ5ODI3IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IlZuZXNpdGUgOC0gYWxpIHZlxI0gbWVzdG5pIFBVSy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iS2FydGljYSBTSU0gamUgemFrbGVuamVuYSBzIGtvZG8gUFVLLiDEjGUgam8gxb5lbGl0ZSBvZGtsZW5pdGksIHZuZXNpdGUga29kbyBQVUsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4ixIxlIMW+ZWxpdGUgb2RzdHJhbml0aSBibG9raXJhbmplIGthcnRpY2UgU0lNLCB2bmVzaXRlIFBVSzIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iTmkgdXNwZWxvLiBPbW9nb8SNaXRlIHpha2xlcGFuamUga2FydGljZSBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJOYSB2b2xqbyBpbWF0ZSDFoWUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBvc2t1cy4gUG90ZW0gc2UgYm8ga2FydGljYSBTSU0gemFrbGVuaWxhLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IlBvc2t1c2l0ZSBsYWhrbyDFoWUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LWtyYXQuIFBvdGVtIHNlIGJvIGthcnRpY2EgU0lNIHpha2xlbmlsYS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IklEIGRvaG9kbmVnYSBrbGljYXRlbGphIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJMYXN0bmlrdSBvbW9nb8SNYSBwb3Zlem92YW5qZSB6IHZtZXNuaWtvbSBzdG9yaXR2ZSBuYXZpZGV6bmVnYSB6YXNlYm5lZ2Egb21yZcW+amEgbmFqdmnFoWplIHJhdm5pLiBOZSB1cG9yYWJsamFqdGUgemEgbmF2YWRuZSBwcm9ncmFtZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4icG92ZXpvdmFuamUgeiBvemFkamVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJJbWV0bmlrdSBvbW9nb8SNYSBwb3ZlemF2byB6IHZtZXNuaWtvbSBvemFkamEgbmFqdmnFoWplIHJhdm5pLiBUZWdhIG5pa29saSBuaSB0cmViYSB1cG9yYWJpdGkgemEgbmF2YWRuZSBwcm9ncmFtZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+InBvdmV6YXZhIHogb2RkYWxqZW5pbSBwcmlrYXpvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IkltZXRuaWt1IG9tb2dvxI1hIHBvdmV6b3ZhbmplIHogdm1lc25pa29tIG9kZGFsamVuZWdhIHByaWthemEgbmFqdmnFoWplIHJhdm5pLiBUZWdhIG5pIHRyZWJhIG5pa29saSB1cG9yYWJpdGkgemEgbmF2YWRuZSBhcGxpa2FjaWplLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+InBvdmXFvmkgcyBzdG9yaXR2aWpvIHByaXBvbW/EjWthIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+Ikxhc3RuaWt1IG9tb2dvxI1hIHBvdmV6b3ZhbmplIHogdm1lc25pa29tIHN0b3JpdHZlIHByaXBvbW/EjWthIG5hanZpxaFqZSByYXZuaS4gVGVnYSBuaSB0cmViYSBuaWtvbGkgdXBvcmFiaXRpIHphIG5hdmFkbmUgcHJvZ3JhbWUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaW50ZXJha2NpamEgcyBza3Jibmlrb20gbmFwcmF2ZSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iUHJvZ3JhbXUgb21vZ2/EjWEgdXBvcmFibyBmdW5rY2lqIG5pemtlIHJhdm5pIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImJyYW5qZSBncmFmacSNbmVnYS9zbGlrb3ZuZWdhIG1lZHBvbW5pbG5pa2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iUHJvZ3JhbXUgb21vZ2/EjWEgYnJhbmplIHZzZWJpbmUgZ3JhZmnEjW5lZ2Evc2xpa292bmVnYSBtZWRwb21uaWxuaWthLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImRvc3RvcCBkbyBmdW5rY2lqIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJBcGxpa2FjaWppIGRvdm9sanVqZSB1cG9yYWJvIGZ1bmtjaWogSW5wdXRGbGluZ2VyIG5pemtlIHJhdm5pLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ia29uZmlndXJpcmFuamUgemFzbG9ub3YgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJPbW9nb8SNYSBhcGxpa2FjaWppIGtvbmZpZ3VyaXJhbmplIHphc2xvbm92IFdpLUZpIGluIHBvdmV6b3ZhbmplIHogbmppbWkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJuYWR6b3IgemFzbG9ub3YgV2ktRmkiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJUaXBrYSBTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IlRpcGthIEVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iSXpiZXJpdGUgcHJvZ3JhbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IkFwbGlrYWNpamUgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiBuaSBiaWxvIG1vZ2/EjWUgemFnbmF0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkRlbGl0ZSB6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkRlbGl0ZSBzIHByb2dyYW1vbSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IkRyc25hIHJvxI1pY2EuIERvdGFrbml0ZSBzZSBpbiBwcmlkcsW+aXRlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJQb3ZsZWNpdGUgbmF2emdvciB6YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iUG92bGVjaXRlIG5hdnpkb2wgemEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlBvdmxlY2l0ZSB2IGxldm8gemEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iUG92bGVjaXRlIHYgZGVzbm8gemEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iT2RrbGVuaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJGb3RvYXBhcmF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlRpaG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iVmtsb3BsamVuIHp2b2siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Iklza2FuamUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJQb3ZsZWNpdGUsIMSNZSDFvmVsaXRlIG9ka2xlbml0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUHJpa2xqdcSNaXRlIHNsdcWhYWxrZSwgxI1lIMW+ZWxpdGUgc2xpxaFhdGkgaXpnb3ZvcmplbmUgdGlwa2UgZ2VzbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUGlrYS4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiJTaXN0ZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+Ilp2b2sgcHJlayBCbHVldG9vdGhhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJCcmV6xb5pxI1uaSBwcmlrYXoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4iS29uxI1hbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJJemhvZCBwcmVkc3Rhdm5vc3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJQb3Zlem92YW5qZSB6IG5hcHJhdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJQcmVkdmFqYW5qZSB6YXNsb25hIHYgbmFwcmF2aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+Iklza2FuamUgbmFwcmF2IOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+Ik5hc3Rhdml0dmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iUHJla2luaXRldiBwb3ZlemF2ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiJQcmVnbGVkb3ZhbmplIC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IlZ6cG9zdGF2bGphbmplIHBvdmV6YXZlIC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iTmEgdm9sam8iPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJQcmVrcml2YW5qZSAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz4geCA8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gcGlrIG5hIHBhbGVjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IiwgdmFyZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IkJyZXrFvmnEjW5pIHphc2xvbiBqZSBwb3ZlemFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IlRhIHphc2xvbiBqZSBwcmlrYXphbiB2IGRydWdpIG5hcHJhdmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4iUHJlZHZhamFuamUgemFzbG9uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IlBvdmV6b3ZhbmplIHogemFzbG9ub20gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iUHJlZHZhamFuamUgemFzbG9uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iVnpwb3N0YXZsamVuYSBwb3ZlemF2YSB6IHphc2xvbm9tIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJQcmVraW5pIHBvdmV6YXZvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJLbGljIHYgc2lsaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IlBvemFibGplbiB2em9yZWMiPC9zdHJpbmc+CkBAIC0xNjUwLDQgKzE2NTcsMTUgQEAKICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlBvc2t1c2l0ZSB6bm92YSBwb3puZWplIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlBvdmxlY2l0ZSB6IHZyaGEsIGRhIHphcHJldGUgY2Vsb3phc2xvbnNraSBuYcSNaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJEb2tvbsSNYW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iT2tyb2dsaSBkcnNuaWsgemEgdXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJPa3JvZ2xpIGRyc25payB6YSBtaW51dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iSXpiZXJpdGUgdXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iSXpiZXJpdGUgbWludXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJNZXNlxI1uYSBtcmXFvmEgZG5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4iU2V6bmFtIGxldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iSXpiZXJpdGUgbWVzZWMgaW4gZGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iSXpiZXJpdGUgbGV0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiJJemJyYW5vOiA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiLFoHRldmlsa2EgPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gamUgaXpicmlzYW5hIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbAppbmRleCAxNGIyMmNjLi5lOTUzMTgwIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+ItCj0L3QtdGB0LjRgtC1IFBVSyDQutC+0ZjQuCDRgdC1INGB0LDRgdGC0L7RmNC4INC+0LQgOCDRhtC40YTQsNGA0LAg0LjQu9C4INCy0LjRiNC1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJTSU0g0LrQsNGA0YLQuNGG0LAg0ZjQtSDQt9Cw0LrRmdGD0YfQsNC90LAgUFVLINC60L7QtNC+0LwuINCj0L3QtdGB0LjRgtC1IFBVSyDQusO00LQg0LTQsCDQsdC40YHRgtC1INGY0LUg0L7RgtC60ZnRg9GH0LDQu9C4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+ItCj0L3QtdGB0LjRgtC1IFBVSzIg0LTQsCDQsdC40YHRgtC1INC00LXQsdC70L7QutC40YDQsNC70LggU0lNINC60LDRgNGC0LjRhtGDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+ItCd0LjRmNC1INGD0YHQv9C10LvQvi4g0J7QvNC+0LPRg9Gb0LjRgtC1INC30LDQutGZ0YPRh9Cw0LLQsNGa0LUgU0lNL1JVSU0g0LrQsNGA0YLQuNGG0LUuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC/0L7QutGD0YjQsNGYINC/0YDQtSDQvdC10LPQviDRiNGC0L4g0YHQtSBTSU0g0LrQsNGA0YLQuNGG0LAg0LfQsNC60ZnRg9GH0LAuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4i0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC/0L7QutGD0YjQsNGY0LAg0L/RgNC1INC90LXQs9C+INGI0YLQviDRgdC1IFNJTSDQutCw0YDRgtC40YbQsCDQt9Cw0LrRmdGD0YfQsC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+ItCU0L7Qu9Cw0LfQvdC4INCY0JQg0L/QvtC30LjQstCw0L7RhtCwIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLQlNC+0LfQstC+0ZnQsNCy0LAg0LLQu9Cw0YHQvdC40LrRgyDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0LjQvdGC0LXRgNGE0LXRmNGB0L7QvCBWUE4g0YPRgdC70YPQs9C1INC90LDRmNCy0LjRiNC10LMg0L3QuNCy0L7QsC4g0KPQvtCx0LjRh9Cw0ZjQtdC90LUg0LDQv9C70LjQutCw0YbQuNGY0LUg0L3QuNC60LDQtNCwINC90LUg0LHQuCDRgtGA0LXQsdCw0LvQviDQtNCwINGY0LUg0LrQvtGA0LjRgdGC0LUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+ItC+0LHQsNCy0LXQt9C40LLQsNGa0LUg0L3QsCDQv9C+0LfQsNC00LjQvdGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLQlNC+0LfQstC+0ZnQsNCy0LAg0LLQu9Cw0YHQvdC40LrRgyDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0LjQvdGC0LXRgNGE0LXRmNGB0L7QvCDQv9C+0LfQsNC00LjQvdC1INC90LDRmNCy0LjRiNC10LMg0L3QuNCy0L7QsC4g0KPQvtCx0LjRh9Cw0ZjQtdC90LUg0LDQv9C70LjQutCw0YbQuNGY0LUg0L3QuNC60LDQtNCwINC90LUg0LHQuCDRgtGA0LXQsdCw0LvQviDQtNCwINGY0LUg0LrQvtGA0LjRgdGC0LUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLQv9C+0LLQtdC30LjQstCw0ZrQtSDRgdCwINGD0LTQsNGZ0LXQvdC40Lwg0LXQutGA0LDQvdC+0LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLQlNC+0LfQstC+0ZnQsNCy0LAg0LLQu9Cw0YHQvdC40LrRgyDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0LjQvdGC0LXRgNGE0LXRmNGB0L7QvCDRg9C00LDRmdC10L3QvtCzINC10LrRgNCw0L3QsCDQvdCw0ZjQstC40YjQtdCzINC90LjQstC+0LAuINCj0L7QsdC40YfQsNGY0LXQvdC1INCw0L/Qu9C40LrQsNGG0LjRmNC1INC90LjQutCw0LTQsCDQvdC1INCx0Lgg0YLRgNC10LHQsNC70L4g0LTQsCDRmNC1INC60L7RgNC40YHRgtC1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ItC+0LHQsNCy0LXQt9C40LLQsNGa0LUg0L3QsCDRg9GB0LvRg9Cz0YMg0LLQuNGf0LXRgtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+ItCU0L7Qt9Cy0L7RmdCw0LLQsCDQstC70LDRgdC90LjQutGDINC00LAg0YHQtSDQvtCx0LDQstC10LbQtSDQvdCwINC40L3RgtC10YDRhNC10ZjRgSDRg9GB0LvRg9Cz0LUg0LLQuNGf0LXRgtCwINC90LDRmNCy0LjRiNC10LMg0L3QuNCy0L7QsC4g0KPQvtCx0LjRh9Cw0ZjQtdC90LUg0LDQv9C70LjQutCw0YbQuNGY0LUg0L3QuNC60LDQtNCwINC90LUg0LHQuCDRgtGA0LXQsdCw0LvQviDQtNCwINGY0LUg0LrQvtGA0LjRgdGC0LUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i0LjQvdGC0LXRgNCw0LrRhtC40ZjQsCDRgdCwINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0L7QvCDRg9GA0LXRktCw0ZjQsCI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4i0JTQvtC30LLQvtGZ0LDQstCwINCw0L/Qu9C40LrQsNGG0LjRmNC4INC00LAg0LrQvtGA0LjRgdGC0LggU3VyZmFjZUZsaW5nZXIg0YTRg9C90LrRhtC40ZjQtSDQvdC40YHQutC+0LMg0L3QuNCy0L7QsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLRh9C40YLQsNGa0LUg0LHQsNGE0LXRgNCwINC60LDQtNGA0L7QstCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+ItCU0L7Qt9Cy0L7RmdCw0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQuCDQtNCwINGH0LjRgtCwINGB0LDQtNGA0LbQsNGYINC80LXRktGD0LzQtdC80L7RgNC40ZjQtSDQutCw0LTRgNC+0LLQsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiLQv9GA0LjRgdGC0YPQvyBJbnB1dEZsaW5nZXIg0YTRg9C90LrRhtC40ZjQsNC80LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4i0JTQvtC30LLQvtGZ0LDQstCwINCw0L/Qu9C40LrQsNGG0LjRmNC4INC00LAg0LrQvtGA0LjRgdGC0LggSW5wdXRGbGluZ2VyINGE0YPQvdC60YbQuNGY0LUg0L3QuNGB0LrQvtCzINC90LjQstC+0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLQutC+0L3RhNC40LPRg9GA0LjRgdCw0ZrQtSBXaS1GaSDQtdC60YDQsNC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLQlNC+0LfQstC+0ZnQsNCy0LAg0LDQv9C70LjQutCw0YbQuNGY0Lgg0LTQsCDQutC+0L3RhNC40LPRg9GA0LjRiNC1IFdpLUZpINC10LrRgNCw0L3QtSDQuCDQv9C+0LLQtdC30YPRmNC1INGB0LUg0YHQsCDRmtC40LzQsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ItC60L7QvdGC0YDQvtC70LAgV2ktRmkg0LXQutGA0LDQvdCwIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+ItCY0LfQsNCx0LXRgNC40YLQtSDQsNC/0LvQuNC60LDRhtC40ZjRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+ItCd0LjRmNC1INC80L7Qs9GD0ZvQtSDQv9C+0LrRgNC10L3Rg9GC0LggPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+ItCU0LXQu9C4INGB0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i0JTQtdC70Lgg0YHQsCDQsNC/0LvQuNC60LDRhtC40ZjQvtC8IDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4i0JrQu9C40LfQvdCwINGA0YPRh9C40YbQsC4g0JTQvtC00LjRgNC90LjRgtC1INC4INC30LDQtNGA0LbQuNGC0LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+ItCf0YDQtdCy0YPRhtC40YLQtSDQvdCw0LPQvtGA0LUg0LfQsCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i0J/RgNC10LLRg9GG0LjRgtC1INC90LDQtNC+0LvQtSDQt9CwIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLQn9GA0LXQstGD0YbQuNGC0LUg0YPQu9C10LLQviDQt9CwIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4i0J/RgNC10LLRg9GG0LjRgtC1INGD0LTQtdGB0L3QviDQt9CwIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+ItCe0YLQutGZ0YPRh9Cw0ZgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i0JrQsNC80LXRgNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+ItCd0LXRh9GD0ZjQvdC+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+ItCj0LrRmdGD0YfQuCDQt9Cy0YPQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i0J/RgNC10YLRgNCw0LPQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+ItCf0YDQtdCy0YPRhtC40YLQtSDQtNCwINCx0LjRgdGC0LUg0L7RgtC60ZnRg9GH0LDQu9C4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLQn9GA0LjQutGZ0YPRh9C40YLQtSDRgdC70YPRiNCw0LvQuNGG0LUg0LTQsCDQsdC40YHRgtC1INGH0YPQu9C4INC40LfQs9C+0LLQvtGA0LXQvdC1INGC0LDRgdGC0LXRgNC1INC30LAg0LvQvtC30LjQvdC60YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i0KLQsNGH0LrQsC4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLQodC40YHRgtC10LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IkJsdWV0b290aCDQsNGD0LTQuNC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLQkdC10LbQuNGH0L3QuCDQtdC60YDQsNC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+ItCT0L7RgtC+0LLQviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+ItCY0LfQu9Cw0Lcg0LzQtdC00LjRmNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLQn9C+0LLQtdC20LjRgtC1INGB0LAg0YPRgNC10ZLQsNGY0LXQvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+ItCf0YDQtdCx0LDRhtC40YLQtSDQtdC60YDQsNC9INC90LAg0YPRgNC10ZLQsNGYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i0KLRgNCw0LbQtdGa0LUg0YPRgNC10ZLQsNGY0LDigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLQn9C+0LTQtdGI0LDQstCw0ZrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiLQn9GA0LXQutC40L3QuCDQstC10LfRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLQodC60LXQvdC40YDQsNGa0LUuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLQn9C+0LLQtdC30LjQstCw0ZrQtS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i0JTQvtGB0YLRg9C/0L3QsCI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+ItCf0L7RgdGC0LDQstGZ0LXQvdC4INC10LvQtdC80LXQvdGCINCx0YAuIDx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+w5c8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwg0LHQtdC30LHQtdC00L3QviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4i0JHQtdC20LjRh9C90Lgg0LXQutGA0LDQvSDRmNC1INC/0L7QstC10LfQsNC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+ItCe0LLQsNGYINC10LrRgNCw0L0g0YHQtSDQv9GA0LjQutCw0LfRg9GY0LUg0L3QsCDQtNGA0YPQs9C+0Lwg0YPRgNC10ZLQsNGY0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4i0J/RgNC10LHQsNGG0LjQstCw0ZrQtSDQtdC60YDQsNC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiLQn9C+0LLQtdC30LjQstCw0ZrQtSDRgdCwIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+ItCf0YDQtdCx0LDRhtC40LLQsNGa0LUg0LXQutGA0LDQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiLQn9C+0LLQtdC30LDQvdC+INGY0LUg0YHQsCA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i0J/RgNC10LrQuNC90Lgg0LLQtdC30YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+ItCl0LjRgtC90Lgg0L/QvtC30LjQsiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+ItCX0LDQsdC+0YDQsNCy0ZnQtdC90Lgg0YjQsNCx0LvQvtC9Ijwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjU3LDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLQn9C+0LrRg9GI0LDRmNGC0LUg0L/QvtC90L7QstC+INC60LDRgdC90LjRmNC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+ItCf0YDQtdCy0YPRhtC40YLQtSDQv9GA0YHRgtC+0Lwg0L7QtNC+0LfQs9C+INC90LDQtNC+0LvQtSDQtNCwINCx0LjRgdGC0LUg0LjQt9Cw0YjQu9C4INC40Lcg0YbQtdC70L7QsyDQtdC60YDQsNC90LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLQk9C+0YLQvtCy0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLQmtGA0YPQttC90Lgg0LrQu9C40LfQsNGHINC30LAg0YHQsNGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+ItCa0YDRg9C20L3QuCDQutC70LjQt9Cw0Ycg0LfQsCDQvNC40L3Rg9GC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4i0JjQt9Cw0LHQtdGA0LjRgtC1INGB0LDRgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4i0JjQt9Cw0LHQtdGA0LjRgtC1INC80LjQvdGD0YLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i0J/RgNC40LrQsNC3INC00LDQvdCwINGDINC80LXRgdC10YbRgyDRgyDQstC40LTRgyDQvNGA0LXQttC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i0JvQuNGB0YLQsCDQs9C+0LTQuNC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+ItCY0LfQsNCx0LXRgNC40YLQtSDQvNC10YHQtdGGINC4INC00LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+ItCY0LfQsNCx0LXRgNC40YLQtSDQs9C+0LTQuNC90YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4i0JjQt9Cw0LHRgNCw0LvQuCDRgdGC0LUgPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4i0JjQt9Cx0YDQuNGB0LDQu9C4INGB0YLQtSA8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKaW5kZXggYWEyMGE2NC4uNWVmNTFjZSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJBbmdlIGVuIFBVSy1rb2QgbWVkIG1pbnN0IDggc2lmZnJvci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iRGl0dCBTSU0ta29ydCDDpHIgUFVLLWzDpXN0LiBBbmdlIFBVSy1rb2RlbiBvbSBkdSB2aWxsIGzDpXNhIHVwcCBkZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iQW5nZSBQVUsyLWtvZGVuIGbDtnIgYXR0IGjDpHZhIHNww6RycmVuIGF2IFNJTS1rb3J0ZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iRsO2cnPDtmtldCBtaXNzbHlja2FkZXMuIEFrdGl2ZXJhIFNJTS0vUlVJTS1sw6VzLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IkR1IGhhciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZsO2cnPDtmsga3ZhciBpbm5hbiBTSU0ta29ydGV0IGzDpXNlcy4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJEdSBoYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGbDtnJzw7ZrIGt2YXIgaW5uYW4gU0lNLWtvcnRldCBsw6VzZXMuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJLWtvZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iTnVtbWVycHJlc2VudGF0w7ZyIGbDtnIgaW5rb21tYW5kZSBzYW10YWwiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IklubmVoYXZhcmVuIHRpbGzDpXRzIGF0dCBiaW5kYSB0aWxsIGRlbiDDtnZlcnN0YSBuaXbDpW5zIGdyw6Ruc3NuaXR0IGbDtnIgZW4gVlBOLXRqw6Ruc3QuIFNrYSBpbnRlIGJlaMO2dmFzIGbDtnIgdmFubGlnYSBhcHBhci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iYmluZGEgdGlsbCBlbiBiYWtncnVuZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iSW5uZWhhdmFyZW4ga2FuIGJpbmRhIHRpbGwgZGVuIMO2dmVyc3RhIG5pdsOlbnMgZ3LDpG5zc25pdHQgZsO2ciBlbiBiYWtncnVuZC4gU2thIGludGUgYmVow7Z2YXMgZsO2ciB2YW5saWdhIGFwcGFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4iYmluZCB0aWxsIGVuIGZqw6RycnNrw6RybSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTI2MTI0MjcxODcyNzI5NTk4MSI+IklubmVoYXZhcmVuIHRpbGzDpXRzIGF0dCBiaW5kYSB0aWxsIGRlbiDDtnZlcnN0YSBuaXbDpW5zIGdyw6Ruc3NuaXR0IGbDtnIgZW4gZmrDpHJyc2vDpHJtLiBTa2EgaW50ZSBiZWjDtnZhcyBmw7ZyIHZhbmxpZ2EgYXBwYXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4iYmluZCB0aWxsIGVuIHdpZGdldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJJbm5laGF2YXJlbiB0aWxsw6V0cyBhdHQgYmluZGEgdGlsbCBkZW4gw7Z2ZXJzdGEgbml2w6VucyBncsOkbnNzbml0dCBmw7ZyIGVuIHdpZGdldC4gU2thIGludGUgYmVow7Z2YXMgZsO2ciB2YW5saWdhIGFwcGFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERldmljZUFkbWluIiBtc2dpZD0iODcwNDk4NjE2MzcxMTQ1NTAxMCI+ImFyYmV0YSBtZWQgZW4gZW5oZXRzYWRtaW5pc3RyYXTDtnIiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlRpbGzDpXRlciBhdHQgYXBwZW4gYW52w6RuZGVyIGzDpWduaXbDpWZ1bmt0aW9uZXIgaSBTdXJmYWNlRmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJsw6RzYSByYW1idWZmZXJ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IlRpbGzDpXRlciBhdHQgYXBwZW4gbMOkc2VyIGlubmVow6VsbGV0IGkgcmFtYnVmZmVydGVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+ImbDpSB0aWxsZ8OlbmcgdGlsbCBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4iVGlsbMOldGVyIGF0dCBhcHBlbiBhbnbDpG5kZXIgbMOlZ25pdsOlZnVua3Rpb25lciBpIElucHV0Rmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+ImtvbmZpZ3VyZXJhciBXaS1GaS1za8Okcm1hciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IlRpbGzDpXRlciBhdHQgYXBwZW4ga29uZmlndXJlcmFyIG9jaCBhbnNsdXRlciB0aWxsIFdpLUZpLXNrw6RybWFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4ia29udHJvbGxlcmFyIFdpLUZpLXNrw6RybWFyIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2tpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJSZXR1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IlbDpGxqIGVuIGFwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IkRldCBnaWNrIGludGUgYXR0IHN0YXJ0YSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iRGVsYSBtZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iRGVsYSBtZWQgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJTa8Okcm1sw6VzZnVua3Rpb24uIFRyeWNrIG9jaCBkcmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkRyYSB1cHDDpXQgZsO2ciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IkRyYSBuZWTDpXQgZsO2ciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRHJhIMOldCB2w6Ruc3RlciBmw7ZyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkRyYSDDpXQgaMO2Z2VyIGbDtnIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IkzDpXMgdXBwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJUeXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkxqdWQgcMOlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTw7ZrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iTMOlcyB1cHAgZ2Vub20gYXR0IGRyYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iQW5zbHV0IG1pa3JvZm9ubHVyYXIgb20gZHUgdmlsbCBhdHQgbMO2c2Vub3JkZXQgc2thIGzDpHNhcyB1cHAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iUHVua3QuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU3lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGgtbGp1ZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iVHLDpWRsw7ZzIHNrw6RybSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJLbGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iTWVkaWV1cHBzcGVsbmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iQW5zbHV0IHRpbGwgZW5oZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLDlnZlcmbDtnIgc2vDpHJtZW4gdGlsbCBlbmhldGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iU8O2a2VyIGVmdGVyIGVuaGV0ZXIgLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iSW5zdMOkbGxuaW5nYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iS29wcGxhIGZyw6VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNrYW5uYXLigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJBbnNsdXRlciAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IlRpbGxnw6RuZ2xpZ2EiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLDlnZlcmxhZ3JpbmcgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+IHggPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIHPDpGtlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4iVHLDpWRsw7ZzIGFuc2x1dG5pbmcgdGlsbCBza8Okcm0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4iRGVuIGjDpHIgc2vDpHJtZW4gdmlzYXMgcMOlIGVuIGFubmFuIGVuaGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IsOWdmVyZsO2ciBza8Okcm1lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IkFuc2x1dGVyIHRpbGwgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iw5Z2ZXJmw7ZyIHNrw6RybWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiJBbnNsdXRlbiB0aWxsIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJLb3BwbGEgZnLDpW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+Ik7DtmRzYW10YWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJIYXIgZHUgZ2zDtm10IGRpdHQgZ3JhZmlza2EgbMO2c2Vub3JkPyI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY1NywxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iRsO2cnPDtmsgaWdlbiBzZW5hcmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iRHJhIG5lZMOldCBvbSBkdSB2aWxsIGF2YnJ5dGEgZnVsbHNrw6RybXNsw6RnZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJLbGFydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkNpcmtlbHJlZ2xhZ2UgZsO2ciB0aW1tYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IkNpcmtlbHJlZ2xhZ2UgZsO2ciBtaW51dGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlbDpGxqIHRpbW1hciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IlbDpGxqIG1pbnV0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IlJ1dG7DpHQgZsO2ciBtw6VuYWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJMaXN0YSDDtnZlciDDpXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IlbDpGxqIG3DpW5hZCBvY2ggZGFnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iVsOkbGogw6VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBoYXIgbWFya2VyYXRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4gaGFyIHRhZ2l0cyBib3J0Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbAppbmRleCBiMDY2NzU4Li4yNTI0MTAyIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IkFuZGlrYSBQVUsgYW1iYXlvIGluYSB1cmVmdSB3YSBuYW1iYXJpIDggYXUgemFpZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IkthZGkgeWFrbyB5YSBTSU0gaW1lZnVuZ3dhIG5hIFBVSy4gQW5pa2EgbXNpbWJvIHdhIFBVSyBpbGkga3VpZnVuZ3VhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IkNoYXBpc2hhIFBVSzIgaWxpIGt1ZnVuZ3VhIFNJTSBrYWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IkltZXNoaW5kd2EswqB3YXNoYSB1ZnVuZ2FqaSB3YSBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJVbWVzYWxpYSBuYSBtYWphcmliaW/CoDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYWJsYSB5YSBTSU0ga3VmdW5nd2EuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iVW1lc2FsaWEgbmEgbWFqYXJpYmlvwqA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2FibGEgeWEgU0lNIGt1ZnVuZ3dhLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iS2l0YW1idWxpc2hvIGNoYSBNcGlnYWppIHdhIFNpbXUgSW5heW9pbmdpYSI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iSW5hcnVodXN1IGtpc2hpa2lsaWFqaSBrdXNodXJ1dGlzaGEga3VzYW5vIHlhIGtpd2FuZ28gY2hhIGp1dSBjaGEgaHVkdW1hIHlhIFZwbi4gSGFpcGFzd2kga3VoaXRhamlrYSBrd2EgcHJvZ3JhbXUgemEga2F3YWlkYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iZnVuZ2Ega3dhIG1hbmRoYXJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiJJbmFydWh1c3Uga2lzaGlraWxpYWppIGt1c2h1cnV0aXNoYSBrd2Ega3VzYW5vIHlhIGtpd2FuZ28gY2hhIGp1dSBjaGEgbWFuZGhhcmkuIEhhaXBhc3dpIGthbXdlIGt1aGl0YWppa2Ega3dhIHByb2dyYW11IHphIGthd2FpZGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJmdW5naXNoYSBrd2VueWUgbXdvbmVrYW5vIHdhIG1iYWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iSHVydWh1c3UgbXR1bWlhamkga3VqaWZ1bmdpYSBraW9sZXN1cmEgY2hhIGtpd2FuZ28gY2hhIGp1dSBjaGEgbXdvbmVrYW5vIHdhIG1iYWxpLiBIYWlwYXN3aSBrdWhpdGFqaWthIGt3YSBwcm9ncmFtdSB6YSBrYXdhaWRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ImZ1bmdhIGt3ZW55ZSBodWR1bWEgeWEgd2lkZ2V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkluYXJ1aHVzdSBtbWlsaWtpIGt1c2h1cnV0aXNoYSBrdXNhbm8geWEga2l3YW5nbyBjaGEganV1IHlhIGh1ZHVtYSB5YSB3aWpldGkuIEhhaXBhc3dpIGt1aGl0YWppa2Ega3dhIHByb2dyYW11IHphIGthd2FpZGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iaml1bmdlIG5hIG1zaW1hbWl6aSB3YSBraWZhYSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iSW5hcnVodXN1IHByb2dyYW11IGt1dHVtaWEgdmlwZW5nZWUgdnlhIGtpd2FuZ28gY2hhIGNoaW5pIHZ5YSBTdXJmYWNlRmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJzb21hIGJhZmEgeWEgZnJlbXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iSW5hcnVodXN1IHByb2dyYW11IGt1c29tYSBtYXVkaHVpIHlhIGZyZW11IHlhIGJhZmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iZmlraWEgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+IkluYXJ1aHVzdSBwcm9ncmFtdSBrdXR1bWlhIHZpcGVuZ2VsZSB2eWEgY2hpbmkgdnlhIElucHV0Rmxpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+InNhbmlkaSBtYW9ueWVzaG8geWEgV2lmaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IkluYXJ1aHVzdSBwcm9ncmFtdSBrdXNhbmlkaSBuYSBrdXVuZ2FuaWthIGt3ZW55ZSBtYW9ueWVzaG8geWEgV2lmaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+ImRoaWJpdGkgbWFvbnllc2hvIHlhIFdpZmkiPC9zdHJpbmc+CkBAIC01NTEsNyArNTYwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSI5MTc4MjI4NTI0NTA3NjEwNDg2Ij4ia3Vzb21hIGhhbGkgbmEga2l0YW1idWxpc2hvIGNoYSBzaW11Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSIxNjM5MjEyNzcxODI2MTI1NTI4Ij4iSW5hcnVodXN1IHByb2dyYW11IGt1ZmlraWEgdmlwZW5nZWxlIHZ5YSBzaW11IHZ5YSBraWZhYS4gSWRoaW5pIGhpaSBpbmFydWh1c3UgcHJvZ3JhbXUga3V0YW1idWEgbmFtYmFyaSB5YSBzaW11IG5hIGtpZmFhLCBrYW1hIHNpbXUgbmkgYW1pbGlmdSwgbmEgbmFtYmFyaSB5YSBtYmFsaSBpbGl5b3VuZ2FuaXNod2Ega3dhIHNpbXUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTUzMTczMTQzNTAxMTQ5NTAxNSI+Inp1aWEga29tcHl1dGEgbmRvZ28gZGhpZGkgeWEga3VsYWxhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MzQ4MDE4Nzk0MTQ5NjEzMCI+Inp1aWEgc2ltdSBkaGlkaSB5YSBrdWxhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dha2VMb2NrIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTczNDgwMTg3OTQxNDk2MTMwIj4ia3V6dWlhIHNpbXUgaXNpbGFsZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dha2VMb2NrIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3MzExMzE5ODI0NDAwNDQ3ODY4Ij4iSW5hcnVodXN1IHByb2dyYW11IGt1enVpYSBrb21weXV0YSBraWJhbyAga3dlbmRhIGt1bGFsYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg1NTkxMDA2NzczNzI5Mjg3NTQiPiJJbmFydWh1c3UgcHJvZ3JhbXUga3V6dWlhIHNpbXUgaXNpZW5kZSBrdWxhbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl90cmFuc21pdElyIiBtc2dpZD0iNzU0NTg1ODUwNDIzODUzMDEwNSI+InNhbWJhemEgaW5mcmFyZWQiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTb25nYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iQ2hhZ3VhIHByb2dyYW11Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iSGFpa3V3ZXphIGt1emluZHVhIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJTaGlyaWtpIG5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IlNoaXJpa2kgbmEgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJVdGFtYm8gdW5hb3NvbmdhLiBHdXNhICZhbXA7IHNoaWthIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlNvZ2V6YSBqdXUga3dhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iU29nZXphIGNoaW5pIGt3YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iU29nZXphIGt1c2hvdG8ga3dhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IlNvZ2V6YSBrdWxpa2Ega3dhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJGdW5ndWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iS2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IktpbXlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IlNhdXRpIGltZXdhc2h3YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iVGFmdXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iUGl0aXNoYSBpbGkga3VmdW5ndWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IkNob21la2Ega2lmYWEgY2hhIHNhdXRpIGlsaSBrdXNpa2lsaXphIHZpYm9ueWUgdnlhIG5lbm9zaXJpIHZpa2l6dW5ndW16d2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iTnVrdGEuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iTWZ1bW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IlNhdXRpIHlhIEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iVW9ueWVzaGFqaSB1c2lvdHVtaWEgd2F5YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJOaW1lbWFsaXphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iVG93ZSBsYSBtaWRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4iVW5nYW5pc2hhIGt3ZW55ZSBraWZhYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IlR1bWEgc2tyaW5pIGt3ZW55ZSBraWZhYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IkluYXRhZnV0YSB2aWZhYS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+Ik1pcGFuZ2lsaW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iT25kb2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iSW5hdGFtYmF6YS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IkluYXVuZ2FuaXNoYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iSW5hcGF0aWthbmEiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJVd2VrZWxlYWppICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgc2FsYW1hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJPbnllc2hvIHBhc2l3YXlhIGxpbWV1bmdhbmlzaHdhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IlNrcmluaSBoaWkgaW5hb255ZXNoYSBrd2VueWUga2lmYWEga2luZ2luZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJJbmF0dW1hIHNrcmluaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IkluYXVuZ2FuaXNod2EgbmEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iSW5hdHVtYSBza3JpbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IkltZXVuZ3dhbmlzaHdhIG5hIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJUZW5nYW5pc2hhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJTaW11IHlhIGRoYXJ1cmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiJVbWVzYWhhdSBSdXdhemEiPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTYsMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iSmFyaWJ1IHRlbmEgYmFhZGEgeWEgc2VrdW5kZSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJKYXJpYnUgdGVuYSBiYWFkYXllIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlRlbGV6ZXNoYSBraWRvbGUga3dhIGthc2kgY2hpbmkga3VhbnppYSBqdXUgaWxpIHVvbmRva2Uga3dlbnllIHNrcmluaSBrYW1pbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iVGVsZXplc2hhIGtpZG9sZSBrd2Ega2FzaSBjaGluaSBrdWFuemlhIGp1dSBpbGkgdW9uZG9rZSBrd2VueWUgc2tyaW5pIHppbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJJbWVrYW1pbGlrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IktpdGVsZXppIGNoYSBtdmlyaW5nbyB3YSBzYWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IktpdGVsZXppIGNoYSBtdmlyaW5nbyB3YSBkYWtpa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iQ2hhZ3VhIHNhYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IkNoYWd1YSBkYWtpa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IkdyaWRpIHlhIG13ZXppIHlhIHNpa3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJPcm9kaGEgeWEgbWlha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IkNoYWd1YSBtd2V6aSBuYSBzaWt1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iQ2hhZ3VhIG13YWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ijx4bGlmZjpnIGlkPSJJVEVNIj4lMSRzPC94bGlmZjpnPiBraW1lY2hhZ3VsaXdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4ga2ltZWZ1dHdhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAppbmRleCA1OGY1MjY4Li42ODZmNzk1IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IuC4nuC4tOC4oeC4nuC5jOC4o+C4q+C4seC4qiBQVUsg4LiL4Li24LmI4LiH4LiV4LmJ4Lit4LiH4LmA4Lib4LmH4LiZ4LiV4Lix4Lin4LmA4Lil4LiC4Lit4Lii4LmI4Liy4LiH4LiZ4LmJ4Lit4LiiIDgg4Lir4Lil4Lix4LiBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IuC4i+C4tOC4oeC4geC4suC4o+C5jOC4lOC4guC4reC4h+C4hOC4uOC4k+C4luC4ueC4geC4peC5h+C4reC4geC4lOC5ieC4p+C4oiBQVUsg4Lie4Li04Lih4Lie4LmM4Lij4Lir4Lix4LiqIFBVSyDguYDguJ7guLfguYjguK3guJvguKXguJTguKXguYfguK3guIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLguJ7guLTguKHguJ7guYwgUFVLMiDguYDguJ7guLfguYjguK3guKLguIHguYDguKXguLTguIHguIHguLLguKPguJvguLTguJTguIHguLHguYnguJnguIvguLTguKHguIHguLLguKPguYzguJQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiLguYTguKHguYjguKrguLPguYDguKPguYfguIgg4LmA4Lib4Li04LiU4LmD4LiK4LmJ4LiB4Liy4Lij4Lil4LmH4Lit4LiB4LiL4Li04LihL1JVSU0iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiLguITguLjguJPguJ7guKLguLLguKLguLLguKHguYTguJTguYnguK3guLXguIEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4h+C4geC5iOC4reC4meC4l+C4teC5iOC4i+C4tOC4oeC4iOC4sOC4luC4ueC4geC4peC5h+C4reC4gSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IuC4hOC4uOC4k+C4nuC4ouC4suC4ouC4suC4oeC5hOC4lOC5ieC4reC4teC4gSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiH4LiB4LmI4Lit4LiZ4LiX4Li14LmI4LiL4Li04Lih4LiI4Liw4LiW4Li54LiB4Lil4LmH4Lit4LiBIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLguKvguKHguLLguKLguYDguKXguILguJzguLnguYnguYLguJfguKPguYDguILguYnguLIiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IuC4reC4meC4uOC4jeC4suC4leC5g+C4q+C5ieC5gOC4iOC5ieC4suC4guC4reC4h+C5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C4geC4seC4muC4quC5iOC4p+C4meC4leC4tOC4lOC4leC5iOC4reC4nOC4ueC5ieC5g+C4iuC5ieC4o+C4sOC4lOC4seC4muC4quC4ueC4h+C4quC4uOC4lOC4guC4reC4h+C4muC4o+C4tOC4geC4suC4oyBWUE4g4LmE4Lih4LmI4LiE4Lin4Lij4LiV4LmJ4Lit4LiH4LmD4LiK4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4LiX4Lix4LmI4Lin4LmE4LibIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+IuC5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C4geC4seC4muC4p+C4reC4peC5gOC4m+C5gOC4m+C4reC4o+C5jCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4Lic4Li54LmJ4LmD4LiK4LmJ4LmA4LiK4Li34LmI4Lit4Lih4LmC4Lii4LiH4LiB4Lix4Lia4Liq4LmI4Lin4LiZ4LiV4Li04LiU4LiV4LmI4Lit4Lic4Li54LmJ4LmD4LiK4LmJ4Lij4Liw4LiU4Lix4Lia4Liq4Li54LiH4Liq4Li44LiU4LiC4Lit4LiH4Lin4Lit4Lil4LmA4Lib4LmA4Lib4Lit4Lij4LmMIOC5hOC4oeC5iOC4hOC4p+C4o+C4leC5ieC4reC4h+C5g+C4iuC5ieC4quC4s+C4q+C4o+C4seC4muC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC4l+C4seC5iOC4p+C5hOC4myI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4i4Lic4Li54LiB4LiB4Lix4Lia4LiI4Lit4LmB4Liq4LiU4LiH4Lic4Lil4Lij4Liw4Lii4Liw4LmE4LiB4LilIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4Lic4Li54LmJ4LmD4LiK4LmJ4Lic4Li54LiB4LiB4Lix4Lia4Lit4Li04LiZ4LmA4LiX4Lit4Lij4LmM4LmA4Lif4LiL4Lij4Liw4LiU4Lix4Lia4Liq4Li54LiH4Liq4Li44LiU4LiC4Lit4LiH4LiI4Lit4LmB4Liq4LiU4LiH4Lic4Lil4Lij4Liw4Lii4Liw4LmE4LiB4LilIOC4i+C4tuC5iOC4h+C5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC4l+C4seC5iOC4p+C5hOC4m+C5hOC4oeC5iOC4iOC4s+C5gOC4m+C5h+C4meC4leC5ieC4reC4h+C5g+C4iuC5iSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+IuC5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C4geC4seC4muC4muC4o+C4tOC4geC4suC4o+C4p+C4tOC4lOC5gOC4iOC5h+C4lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiLguK3guJnguLjguI3guLLguJXguYPguKvguYnguJzguLnguYnguYPguIrguYnguYDguIrguLfguYjguK3guKHguYLguKLguIfguIHguLHguJrguKrguYjguKfguJnguJXguLTguJTguJXguYjguK3guJzguLnguYnguYPguIrguYnguKPguLDguJTguLHguJrguKrguLnguIfguKrguLjguJTguILguK3guIfguJrguKPguLTguIHguLLguKPguKfguLTguJTguYDguIjguYfguJUg4LmE4Lih4LmI4LiE4Lin4Lij4LiV4LmJ4Lit4LiH4LmD4LiK4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4LiX4Lix4LmI4Lin4LmE4LibIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i4LiV4Li04LiU4LiV4LmI4Lit4LiB4Lix4Lia4Lic4Li54LmJ4LiU4Li54LmB4Lil4Lit4Li44Lib4LiB4Lij4LiT4LmMIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLguK3guJnguLjguI3guLLguJXguYPguKvguYnguYHguK3guJvguJ7guKXguLTguYDguITguIrguLHguJnguYPguIrguYnguITguLjguJPguKXguLHguIHguKnguJPguLDguKPguLDguJTguLHguJrguJXguYjguLPguILguK3guIcgU3VyZmFjZUZsaW5nZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLguK3guYjguLLguJnguYDguJ/guKPguKHguJrguLHguJ/guYDguJ/guK3guKPguYwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4i4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4Lit4LmI4Liy4LiZ4LmA4LiZ4Li34LmJ4Lit4Lir4Liy4LmD4LiZ4LmA4Lif4Lij4Lih4Lia4Lix4Lif4LmA4Lif4Lit4Lij4LmMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4i4LmA4LiC4LmJ4Liy4LiW4Li24LiHIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLguK3guJnguLjguI3guLLguJXguYPguKvguYnguYHguK3guJvguYPguIrguYnguITguLjguJPguKXguLHguIHguKnguJPguLDguKPguLDguJTguLHguJrguJXguYjguLPguILguK3guIcgSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiLguIHguLPguKvguJnguJTguITguYjguLLguIHguLLguKPguYHguKrguJTguIfguJzguKXguJTguYnguKfguKIgV2lGaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IuC4reC4meC4uOC4jeC4suC4leC5g+C4q+C5ieC5geC4reC4m+C4geC4s+C4q+C4meC4lOC4hOC5iOC4suC5geC4peC4sOC5gOC4iuC4t+C5iOC4reC4oeC4leC5iOC4reC4geC4seC4muC4iOC4reC5geC4quC4lOC4h+C4nOC4pSBXaUZpIOC5hOC4lOC5iSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i4LiE4Lin4Lia4LiE4Li44Lih4LiB4Liy4Lij4LmB4Liq4LiU4LiH4Lic4Lil4LiU4LmJ4Lin4LiiIFdpRmkiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IuC4m+C5ieC4reC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IuC5gOC4peC4t+C4reC4geC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IuC5hOC4oeC5iOC4quC4suC4oeC4suC4o+C4luC5gOC4m+C4tOC4lCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4i4LmB4Lia4LmI4LiH4Lib4Lix4LiZ4LiB4Lix4LiaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IuC5geC4muC5iOC4h+C4m+C4seC4meC4lOC5ieC4p+C4oiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IuC4l+C4teC5iOC4iOC4seC4muC4quC4s+C4q+C4o+C4seC4muC5gOC4peC4t+C5iOC4reC4mSDguYHguJXguLDguITguYnguLLguIfguYTguKfguYkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i4LmA4Lil4Li34LmI4Lit4LiZ4LiC4Li24LmJ4LiZ4LmA4Lie4Li34LmI4LitIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IuC5gOC4peC4t+C5iOC4reC4meC4peC4h+C5gOC4nuC4t+C5iOC4rSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLguYDguKXguLfguYjguK3guJnguYTguJvguJfguLLguIfguIvguYnguLLguKLguYDguJ7guLfguYjguK0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IuC5gOC4peC4t+C5iOC4reC4meC5hOC4m+C4l+C4suC4h+C4guC4p+C4suC5gOC4nuC4t+C5iOC4rSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuC4m+C4peC4lOC4peC5h+C4reC4gSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLguIHguKXguYnguK3guIciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i4Lib4Li04LiU4LmA4Liq4Li14Lii4LiHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IuC5gOC4m+C4tOC4lOC5gOC4quC4teC4ouC4hyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i4LiE4LmJ4LiZ4Lir4LiyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4i4LiB4Lin4Liy4LiU4LmA4Lie4Li34LmI4Lit4Lib4Lil4LiU4Lil4LmH4Lit4LiBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IuC5gOC4quC4teC4ouC4muC4iuC4uOC4lOC4q+C4ueC4n+C4seC4h+C5gOC4nuC4t+C5iOC4reC4n+C4seC4h+C5gOC4quC4teC4ouC4h+C5gOC4oeC4t+C5iOC4reC4nuC4tOC4oeC4nuC5jOC4o+C4q+C4seC4quC4nOC5iOC4suC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+IuC5gOC4hOC4o+C4t+C5iOC4reC4h+C4q+C4oeC4suC4ouC4iOC4uOC4lCI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IuC4o+C4sOC4muC4miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i4LmA4Liq4Li14Lii4LiH4Lia4Lil4Li54LiX4Li54LiYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiLguIHguLLguKPguYHguKrguJTguIfguJzguKXguYHguJrguJrguYTguKPguYnguKrguLLguKIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2dyb3VwaW5nX2RvbmUiIG1zZ2lkPSI3OTY2NDM4MzA3NzIzMzE3MTY5Ij4i4LmA4Liq4Lij4LmH4LiI4Liq4Li04LmJ4LiZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4i4LmA4Lit4Liy4LiV4LmM4Lie4Li44LiV4Liq4Li34LmI4LitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLguYDguIrguLfguYjguK3guKHguJXguYjguK3guIHguLHguJrguK3guLjguJvguIHguKPguJPguYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLguKrguYjguIfguKvguJnguYnguLLguIjguK3guYTguJvguKLguLHguIfguK3guLjguJvguIHguKPguJPguYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiLguIHguLPguKXguLHguIfguITguYnguJnguKvguLLguK3guLjguJvguIHguKPguJPguYzigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLguIHguLLguKPguJXguLHguYnguIfguITguYjguLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i4Lii4LiB4LmA4Lil4Li04LiB4LiB4Liy4Lij4LmA4LiK4Li34LmI4Lit4Lih4LiV4LmI4LitIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IuC4geC4s+C4peC4seC4h+C4quC5geC4geC4mS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IuC4geC4s+C4peC4seC4h+C5gOC4iuC4t+C5iOC4reC4oeC4leC5iOC4rS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4i4Lie4Lij4LmJ4Lit4Lih4LmD4LiK4LmJ4LiH4Liy4LiZIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4i4LiB4Liy4Lij4Lin4Liy4LiH4LiL4LmJ4Lit4LiZICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwg4Lib4Lil4Lit4LiU4Lig4Lix4LiiIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLguYDguIrguLfguYjguK3guKHguJXguYjguK3guIHguLLguKPguYHguKrguJTguIfguJzguKXguYHguJrguJrguYTguKPguYnguKrguLLguKLguK3guKLguLnguYgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i4Lir4LiZ4LmJ4Liy4LiI4Lit4LiZ4Li14LmJ4LiB4Liz4Lil4Lix4LiH4LmB4Liq4LiU4LiH4Lia4LiZ4Lit4Li44Lib4LiB4Lij4LiT4LmM4Lit4Li34LmI4LiZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IuC4geC4s+C4peC4seC4h+C4quC5iOC4h+C4q+C4meC5ieC4suC4iOC4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+IuC4geC4s+C4peC4seC4h+C5gOC4iuC4t+C5iOC4reC4oeC4leC5iOC4reC5hOC4m+C4ouC4seC4hyA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLguIHguLPguKXguLHguIfguKrguYjguIfguKvguJnguYnguLLguIjguK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IuC5gOC4iuC4t+C5iOC4reC4oeC4leC5iOC4reC4geC4seC4miA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4g4LmB4Lil4LmJ4LinIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IuC4q+C4ouC4uOC4lOC5gOC4iuC4t+C5iOC4reC4oeC4leC5iOC4rSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i4Lir4Lih4Liy4Lii4LmA4Lil4LiC4LiJ4Li44LiB4LmA4LiJ4Li04LiZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4Lil4Li34Lih4Lij4Li54Lib4LmB4Lia4Lia4LmD4LiK4LmI4Lir4Lij4Li34Lit4LmE4Lih4LmIIjwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjU3LDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLguKXguK3guIfguK3guLXguIHguITguKPguLHguYnguIfguYPguJnguKDguLLguKLguKvguKXguLHguIciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i4LiB4Lin4Liy4LiU4LiZ4Li04LmJ4Lin4LiI4Liy4LiB4Lia4LiZ4Lil4LiH4Lil4LmI4Liy4LiH4LmA4Lie4Li34LmI4Lit4Lit4Lit4LiB4LiI4Liy4LiB4LmC4Lir4Lih4LiU4LmA4LiV4LmH4Lih4Lir4LiZ4LmJ4Liy4LiI4LitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLguYDguKrguKPguYfguIjguKrguLTguYnguJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLguJXguLHguKfguYDguKXguLfguYjguK3guJnguKvguKHguLjguJnguKPguLDguJrguLjguIrguLHguYjguKfguYLguKHguIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IuC4leC4seC4p+C5gOC4peC4t+C5iOC4reC4meC4q+C4oeC4uOC4meC4o+C4sOC4muC4uOC4meC4suC4l+C4tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLguYDguKXguLfguK3guIHguIrguLHguYjguKfguYLguKHguIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfbWludXRlcyIgbXNnaWQ9IjM5NzQzNDU2MTU5MjAzMzYwODciPiLguYDguKXguLfguK3guIHguJnguLLguJfguLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IuC4leC4suC4o+C4suC4h+C5gOC4lOC4t+C4reC4meC4guC4reC4h+C4p+C4seC4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IuC4o+C4suC4ouC4geC4suC4o+C4m+C4tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4i4LmA4Lil4Li34Lit4LiB4LmA4LiU4Li34Lit4LiZ4LmB4Lil4Liw4Lin4Lix4LiZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4i4LmA4Lil4Li34Lit4LiB4Lib4Li1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+IuC5gOC4peC4t+C4reC4gSA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiLguKXguJogPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4g4LmB4Lil4LmJ4LinIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbAppbmRleCBiYzM5NmVkLi4xYjZiYzc4IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+Ik1hZy10eXBlIG5nIFBVSyBuYSBtYXkgOCBudW1iZXJvIG8gbWFzIG1haGFiYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iTmEtUFVLLWxvY2sgYW5nIGl5b25nIFNJTSBjYXJkLiBJLXR5cGUgYW5nIFBVSyBjb2RlIHVwYW5nIGktdW5sb2NrIGl0by4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJJLXR5cGUgYW5nIFBVSzIgdXBhbmcgaS11bmJsb2NrIGFuZyBTSU0gY2FyZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiJIaW5kaSBtYXRhZ3VtcGF5LCBpLWVuYWJsZSBhbmcgU0lNL1JVSU0gTG9jay4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiJNYXlyb29uIGthbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IChuYSkgbmF0aXRpcmFuZyBwYWdzdWJvayBiYWdvIG1hLWxvY2sgYW5nIFNJTS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJNYXlyb29uIGthbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IChuYSkgbmF0aXRpcmFuZyBwYWdzdWJvayBiYWdvIG1hLWxvY2sgYW5nIFNJTS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IlBhcGFzb2sgbmEgQ2FsbGVyIElEIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJQaW5hcGF5YWdhbiBhbmcgbWF5LWhhd2FrIG5hIHN1bWFpbGFsaW0gc2EgbmFuZ3VuZ3VuYW5nIGludGVyZmFjZSBuZyBzZXJiaXN5byBuZyBWcG4uIEhpbmRpIGthaWxhbm1hbiBkYXBhdCBuYSBrYWlsYW5nYW5pbiBwYXJhIHNhIG5vcm1hbCBuYSBhcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJzdW1haWxhbGltIHNhIHdhbGxwYXBlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iUGluYXBheWFnYW4gYW5nIG1heS1oYXdhayBuYSBzdW1haWxhbGltIHNhIG5hbmd1bmd1bmFuZyBpbnRlcmZhY2UgbmcgaXNhbmcgd2FsbHBhcGVyLiBIaW5kaSBrYWlsYW5tYW4gZGFwYXQgbmEga2FpbGFuZ2FuaW4gcGFyYSBzYSBub3JtYWwgbmEgYXBwcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVEaXNwbGF5IiBtc2dpZD0iMTc4MjkyMzkzODAyOTk0MTk2MCI+Im1hZ3Bhc2FrbGF3IHNhIGlzYW5nIHJlbW90ZSBuYSBkaXNwbGF5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4iQmluaWJpZ3lhbmctZGFhbiBhbmcgbWF5LWhhd2FrIG5hIG1hc2FrbGF3IGFuZyBwaW5ha2FtYXRhYXMgbmEgYW50YXMgbmcgaW50ZXJmYWNlIG5nIGlzYW5nIHJlbW90ZSBuYSBkaXNwbGF5LiBIaW5kaSBkYXBhdCBrYWlsYW5tYW4ga2FpbGFuZ2FuaW4gbmcgbm9ybWFsIG5hIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4iaXRhbGkgc2Egc2VyYmlzeW8gbmcgd2lkZ2V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IlBpbmFwYXlhZ2FuIGFuZyBtYXktaGF3YWsgbmEgc3VtYWlsYWxpbSBzYSBuYW5ndW5ndW5hbmcgaW50ZXJmYWNlIG5nIHNlcmJpc3lvIG5nIHdpZGdldC4gSGluZGkga2FpbGFubWFuIGRhcGF0IG5hIGthaWxhbmdhbmluIHBhcmEgc2Egbm9ybWFsIG5hIGFwcHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4ibWFraXBhZy11Z25heSBzYSB0YWdhcGFuZ2FzaXdhIG5nIGRldmljZSI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iUGluYXBheWFnYW4gYW5nIGFwcCBuYSBnYW1pdGluIGFuZyBtYWJhYmFuZyBhbnRhcyBuYSBtZ2EgdGFtcG9rIG5nIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ImJhc2FoaW4gYW5nIGJ1ZmZlciBuZyBmcmFtZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJQaW5hcGF5YWdhbiBhbmcgYXBwIG5hIGJhc2FoaW4gYW5nIG5pbGFsYW1hbiBuZyBidWZmZXIgbmcgZnJhbWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iaS1hY2Nlc3MgYW5nIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJOYWdiaWJpZ2F5LWRhYW4gc2EgYXBwIG5hIGd1bWFtaXQgbmcgbWdhIHRhbXBvayBuZyBJbnB1dEZsaW5nZXIgc2EgbWFiYWJhbmcgYW50YXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9IjU1OTU2NjE2OTQ3NDY3NDIxNjgiPiJtYWctY29uZmlndXJlIG5nIG1nYSBXaWZpIGRpc3BsYXkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJQaW5hcGF5YWdhbiBhbmcgYXBwIG5hIG1hZy1jb25maWd1cmUgYXQga3Vtb25la3RhIHNhIG1nYSBXaWZpIGRpc3BsYXkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiJtYWdrb250cm9sIG5nIG1nYSBXaWZpIGRpc3BsYXkiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iUHVtaWxpIG5nIGlzYW5nIGFwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IkhpbmRpIG1haWx1bnNhZCBhbmcgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IkliYWhhZ2kgc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4iSWJhaGFnaSBzYSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+Ikhhd2FrYW4gc2EgcGFnLXNsaWRlLiBQaW5kdXRpbiBuYW5nIG1hdGFnYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ik1hZy1zbGlkZSBwYXRhYXMgcGFyYSBzYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iTWFnLXNsaWRlIHBhYmFiYSBwYXJhIHNhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJNYWctc2xpZGUgcGFrYWxpd2EgcGFyYSBzYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ik1hZy1zbGlkZSBwYWthbmFuIHBhcmEgc2EgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iSS11bmxvY2siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iQ2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlRhaGltaWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iSS1vbiBhbmcgdHVub2ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Ik1hZ2hhbmFwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iTWFnLXN3aXBlIHVwYW5nIGktdW5sb2NrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiJNYWctcGx1ZyBpbiBuZyBpc2FuZyBoZWFkc2V0IHVwYW5nIG1hcmluaWcgYW5nIG1nYSBwYXNzd29yZCBrZXkgbmEgYmluYWJhbmdnaXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iRG90LiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQXVkaW8gc2EgQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJXaXJlbGVzcyBkaXNwbGF5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IlRhcG9zIG5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfYnV0dG9uX2NvbnRlbnRfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NzU4NTUzNTY3MDY1MTQ1Mjc2Ij4iT3V0cHV0IG5nIG1lZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJLdW1vbmVrdGEgc2EgZGV2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iSS1jYXN0IGFuZyBzY3JlZW4gc2EgZGV2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4iTmFnaGFoYW5hcCBuZyBtZ2EgZGV2aWNl4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4iTWdhIFNldHRpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iSWRpc2tvbmVrdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iTmFnc2Etc2Nhbi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+Ikt1bXVrb25la3RhLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJBdmFpbGFibGUiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJPdmVybGF5ICM8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+Iiwgc2VjdXJlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJOYWtha29uZWt0YSBhbmcgd2lyZWxlc3MgbmEgZGlzcGxheSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJMdW1hbGFiYXMgYW5nIHNjcmVlbiBuYSBpdG8gc2EgaXNhIHBhbmcgZGV2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+IktpbmEtY2FzdCBhbmcgc2NyZWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4iS3Vtb2tvbmVrdGEgc2EgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iS2luYS1jYXN0IGFuZyBzY3JlZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+Ik5ha2Frb25la3RhIHNhIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJBbGlzaW4gc2EgcGFna2FrYWtvbmVrdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IkVtZXJnZW5jeSBuYSB0YXdhZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+Ik5ha2FsaW11dGFuIGFuZyBQYXR0ZXJuIjwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU2LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+IlN1YnVrYW4gbXVsaSBzYSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzZWciPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iU3VidWthbmcgbXVsaSBzYSBpYmFuZyBwYWdrYWthdGFvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJNYWctc3dpcGUgcGFiYWJhIHVwYW5nIGx1bWFiYXMgc2EgZnVsbCBzY3JlZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iTWFnLXN3aXBlIHBhYmFiYSBtdWxhIHNhIGl0YWFzIHVwYW5nIGx1bWFiYXMgc2EgZnVsbCBzY3JlZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJUYXBvcyBuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IlBhYmlsb2cgbmEgc2xpZGVyIG5nIG1nYSBvcmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJQYWJpbG9nIG5hIHNsaWRlciBuZyBtZ2EgbWludXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IlB1bWlsaSBuZyBtZ2Egb3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IlB1bWlsaSBuZyBtZ2EgbWludXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiJHcmlkIG5nIG1nYSBhcmF3IGF5b24gc2EgYnV3YW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJMaXN0YWhhbiBuZyB0YW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiJQdW1pbGkgbmcgYnV3YW4gYXQgYXJhdyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IlB1bWlsaSBuZyB0YW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+Ik5hcGlsaSBhbmcgPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iVGluYW5nZ2FsIGFuZyA8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKaW5kZXggOTlhMTM3Yi4uYzA1YTY4NCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiI4IHZleWEgZGFoYSB1enVuIGJhc2FtYWtsxLEgYmlyIFBVSyBrb2R1IHlhesSxbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iU0lNIGthcnTEsW7EsXrEsW4gUFVLIGtpbGlkaSBkZXZyZWRlLiBLaWxpZGkgYcOnbWFrIGnDp2luIFBVSyBrb2R1bnUgeWF6xLFuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+IkVuZ2VsbGVuZW4gU0lNIGthcnTEsSBhw6dtYWsgacOnaW4gUFVLMiBrb2R1bnUgeWF6xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IkJhxZ9hcsSxc8Sxei4gU0lNL1JVSU0gS2lsaWRpbmkgZXRraW5sZcWfdGlyaW4uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4iU0lNIGtpbGl0bGVubWVkZW4gw7ZuY2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGRlbmVtZSBoYWtrxLFuxLF6IGthbGTEsS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJTSU0ga2lsaXRsZW5tZWRlbiDDtm5jZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZGVuZW1lIGhha2vEsW7EsXoga2FsZMSxLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iR2VsZW4gw4dhxJ9yxLEgS2ltbGnEn2kiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IkNpaGF6xLFuIHNhaGliaW5lIGJpciBWUE4gaGl6bWV0aW5pbiBlbiDDvHN0IGTDvHpleSBhcmF5w7x6w7xuZSBiYcSfbGFubWEgaXpuaSB2ZXJpci4gTm9ybWFsIHV5Z3VsYW1hbGFyZGEgaGnDp2JpciB6YW1hbiBnZXJlayBkdXl1bG1hei4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iYmlyIGR1dmFyIGthxJ/EsWTEsW5hIHRhYmkga8SxbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iQ2loYXrEsW4gc2FoaWJpbmUsIGR1dmFyIGthxJ/EsWTEsW7EsW4gZW4gw7xzdCBkw7x6ZXkgYXJhecO8esO8bmUgYmHEn2xhbm1hIGl6bmkgdmVyaXIuIE5vcm1hbCB1eWd1bGFtYWxhcmRhIGhpw6diaXIgemFtYW4gZ2VyZWsgZHV5dWxtYXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJ1emFrIGVrcmFuYSBiYcSfbGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4ixLB6aW4gc2FoaWJpbmUsIGJpciB1emFrIGVrcmFuxLFuIGVuIMO8c3QgZMO8emV5IGFyYXnDvHrDvG5lIGJhxJ9sYW5tYSBpem5pIHZlcmlyLiBOb3JtYWwgdXlndWxhbWFsYXJkYSBoacOnYmlyIHphbWFuIGdlcmVrIGR1eXVsbWF6LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNTY5Nzk4Nzc1OTg5NzM2NzA5OSI+ImJpciB3aWRnZXQgaGl6bWV0aW5lIGJhxJ9sYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjQ3MTc5ODc4MTAxMzc2OTI1NzIiPiJDaWhhesSxbiBzYWhpYmluZSBiaXIgd2lkZ2V0IGhpem1ldGluaW4gZW4gw7xzdCBkw7x6ZXkgYXJhecO8esO8bmUgYmHEn2xhbm1hIGl6bmkgdmVyaXIuIE5vcm1hbCB1eWd1bGFtYWxhcmRhIGhpw6diaXIgemFtYW4gZ2VyZWsgZHV5dWxtYXouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4iYmlyIGNpaGF6IHnDtm5ldGljaXNpIGlsZSBldGtpbGXFn2ltZGUgYnVsdW4iPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IlV5Z3VsYW1heWEsIFN1cmZhY2VGbGluZ2VyXCdhIGFpdCBkw7zFn8O8ayBkw7x6ZXkgw7Z6ZWxsaWtsZXJpIGt1bGxhbm1hIGl6bmkgdmVyaXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4iw6dlcsOnZXZlIGFyYWJlbGxlxJ9pbmkgb2t1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IlV5Z3VsYW1heWEsIMOnZXLDp2V2ZSBhcmFiZWxsZcSfaW5pbiBpw6dlcmnEn2luaSBva3VtYSBpem5pIHZlcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IklucHV0RmxpbmdlclwnYSBlcmnFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJVeWd1bGFtYXlhLCBhbHQgZMO8emV5IElucHV0RmxpbmdlciDDtnplbGxpa2xlcmluaSBrdWxsYW5tYSBpem5pIHZlcmlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4iS2FibG9zdXogZWtyYW5sYXLEsSB5YXDEsWxhbmTEsXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJVeWd1bGFtYXlhIGthYmxvc3V6IGVrcmFubGFyxLEgeWFwxLFsYW5kxLFybWEgdmUgYnVubGFyYSBiYcSfbGFubWEgaXpuaSB2ZXJpci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IkthYmxvc3V6IGVrcmFubGFyxLEgZGVuZXRsZSI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IsOcc3RLcmt0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iR2lyacWfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iQmlyIHV5Z3VsYW1hIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4gYmHFn2xhdMSxbGFtYWTEsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IsWedW51bmxhIHBheWxhxZ86Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4gaWxlIHBheWxhxZ8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iS2F5YW4gdHV0bWEgeWVyaS4gRG9rdW51biB2ZSBiYXPEsWzEsSB0dXR1bi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IGnDp2luIHl1a2FyxLEga2F5ZMSxcsSxbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gacOnaW4gYcWfYcSfxLEga2F5ZMSxcsSxbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gacOnaW4gc29sYSBrYXlkxLFyxLFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gacOnaW4gc2HEn2Ega2F5ZMSxcsSxbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IktpbGlkaSBhw6ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iS2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlNlc3NpeiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJTZXMgYcOnxLFrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJBcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiJLaWxpZGkgYcOnbWFrIGnDp2luIGtheWTEsXLEsW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IsWeaWZyZSB0dcWfbGFyxLFuxLFuIHNlc2xpIG9rdW5tYXPEsW7EsSBkaW5sZW1layBpw6dpbiBtaWtyb2Zvbmx1IGt1bGFrbMSxayB0YWvEsW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iTm9rdGEuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iU2lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiJCbHVldG9vdGggc2VzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJLYWJsb3N1eiBla3JhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJUYW1hbWxhbmTEsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+Ik1lZHlhIMOnxLFrxLHFn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJDaWhhemEgYmHEn2xhbsSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IkVrcmFuxLEgY2loYXphIHlhecSxbmxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IkNpaGF6IGFyYW7EsXlvcuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IkF5YXJsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iQmHEn2xhbnTEsXnEsSBrZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4iVGFyYW7EsXlvci4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IkJhxJ9sYW7EsWzEsXlvci4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iS3VsbGFuxLFsYWJpbGlyIjwvc3RyaW5nPgpAQCAtMTQ5NSw4ICsxNTAwLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X25hbWUiIG1zZ2lkPSI1MTQyMzY1OTgyMjcxNjIwNzE2Ij4iWWVyIFBheWxhxZ/EsW3EsSBOby4gPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIGfDvHZlbmxpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJLYWJsb3N1eiBla3JhbmEgYmHEn2xhbmTEsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJCdSBla3JhbiBiYcWfa2EgYmlyIGNpaGF6ZGEgZ8O2c3RlcmlsaXlvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJFa3JhbiB5YXnEsW5sYW7EsXlvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiBiYcSfbGFudMSxc8SxIHlhcMSxbMSxeW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iRWtyYW4geWF5xLFubGFuxLF5b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiBiYcSfbGFudMSxc8SxIHlhcMSxbGTEsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJCYcSfbGFudMSxecSxIGtlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iQWNpbCBkdXJ1bSDDp2HEn3LEsXPEsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IkRlc2VuaSBVbnV0dHVudXogbXU/Ijwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU2LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNhbml5ZSBpw6dpbmRlIHRla3JhciBkZW5leWluIjwvaXRlbT4KICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IkRhaGEgc29ucmEgdGVrcmFyIGRlbmV5aW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iVGFtIGVrcmFuZGFuIMOnxLFrbWFrIGnDp2luIGHFn2HEn8SxeWEgaMSxemzEsWNhIGtheWTEsXLEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4iVGFtIGVrcmFuZGFuIMOnxLFrbWFrIGnDp2luIHl1a2FyxLFkYW4gYcWfYcSfxLF5YSBoxLF6bMSxY2Ega2F5ZMSxcsSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkJpdHRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iU2FhdCBrYXlkxLFybWEgw6dlbWJlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IkRha2lrYSBrYXlkxLFybWEgw6dlbWJlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4iU2FhdGkgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iRGFraWthecSxIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iQXnEsW4gZ8O8bmxlcmkgdGFibG9zdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IlnEsWwgbGlzdGVzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iQXnEsSB2ZSBnw7xuw7wgc2XDp2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iWcSxbMSxIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiI8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4gc2XDp2lsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBzaWxpbmRpIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbAppbmRleCA2MWY0NWVjLi5iYzNmNDViIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+ItCS0LLQtdC00ZbRgtGMIFBVSy3QutC+0LQg0ZbQtyA4INCw0LHQviDQsdGW0LvRjNGI0LUg0YbQuNGE0YAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlNJTS3QutCw0YDRgtCwINC30LDQsdC70L7Qui4gUFVLLdC60L7QtNC+0LwuINCS0LLQtdC00ZbRgtGMIFBVSy3QutC+0LQsINGJ0L7QsSDRl9GXINGA0L7Qt9Cx0LvQvtC6LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+ItCS0LLQtdC0LiBQVUsyLCDRidC+0LEg0YDQvtC30LHQuy4gU0lNLdC60LDRgNGC0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4i0J/QvtC80LjQu9C60LAuINCj0LLRltC80LrQvdGW0YLRjCDQsdC70L7QutGD0LLQsNC90L3RjyBTSU0vUlVJTS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjY1OTYyNDUyODU4MDk3OTAxNDIiPiLQoyDQstCw0YEg0LfQsNC70LjRiNC40LvQsNGB0YwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INGB0L/RgNC+0LHQsC4g0J/RltGB0LvRjyDRhtGM0L7Qs9C+IFNJTS3QutCw0YDRgtGDINCx0YPQtNC1INC30LDQsdC70L7QutC+0LLQsNC90L4uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4i0KMg0LLQsNGBINC30LDQu9C40YjQuNC70L7RgdGPINGB0YLRltC70YzQutC4INGB0L/RgNC+0LE6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4g0J/RltGB0LvRjyDRhtGM0L7Qs9C+IFNJTS3QutCw0YDRgtGDINCx0YPQtNC1INC30LDQsdC70L7QutC+0LLQsNC90L4uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLQktGF0ZbQtNC9LiDRltC0LiDQsNCx0L7QvdC10L3RgtCwIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLQlNC+0LfQstC+0LvRj9GUINCy0LvQsNGB0L3QuNC60L7QstGWINC/0YDQuNCy4oCZ0Y/Qt9GD0LLQsNGC0LjRgdGPINC00L4g0ZbQvdGC0LXRgNGE0LXQudGB0YMg0LLQtdGA0YXQvdGM0L7Qs9C+INGA0ZbQstC90Y8g0YHQu9GD0LbQsdC4IFZQTi4g0J3RltC60L7Qu9C4INC90LUg0LfQsNGB0YLQvtGB0L7QstGD0ZTRgtGM0YHRjyDQtNC70Y8g0LfQstC40YfQsNC50L3QuNGFINC/0YDQvtCz0YDQsNC8LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiLQv9GA0LjQsuKAmdGP0LfQsNGC0Lgg0LTQviDRhNC+0L3QvtCy0L7Qs9C+INC80LDQu9GO0L3QutCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFdhbGxwYXBlciIgbXNnaWQ9IjcxMDg0Mjg2OTI1OTU0OTE2NjgiPiLQlNC+0LfQstC+0LvRj9GUINCy0LvQsNGB0L3QuNC60YMg0L/RgNC40LLigJnRj9C30YPQstCw0YLQuNGB0Y8g0LTQviDRltC90YLQtdGA0YTQtdC50YHRgyDQstC10YDRhdC90YzQvtCz0L4g0YDRltCy0L3RjyDRhNC+0L3QvtCy0L7Qs9C+INC80LDQu9GO0L3QutCwLiDQndGW0LrQvtC70Lgg0L3QtSDQt9Cw0YHRgtC+0YHQvtCy0YPRlNGC0YzRgdGPINC00LvRjyDQt9Cy0LjRh9Cw0LnQvdC40YUg0L/RgNC+0LPRgNCw0LwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLQv9GA0LjQsuKAmdGP0LfRg9Cy0LDRgtC40YHRjyDQtNC+INCy0ZbQtNC00LDQu9C10L3QvtCz0L4g0LXQutGA0LDQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i0JTQvtC30LLQvtC70Y/RlCDQstC70LDRgdC90LjQutC+0LLRliDQv9GA0LjQsuKAmdGP0LfRg9Cy0LDRgtC40YHRjyDQtNC+INGW0L3RgtC10YDRhNC10LnRgdGDINCy0LXRgNGF0L3RjNC+0LPQviDRgNGW0LLQvdGPINCy0ZbQtNC00LDQu9C10L3QvtCz0L4g0LXQutGA0LDQvdCwLiDQndGW0LrQvtC70Lgg0L3QtSDQt9Cw0YHRgtC+0YHQvtCy0YPRlNGC0YzRgdGPINC00LvRjyDQt9Cy0LjRh9Cw0LnQvdC40YUg0L/RgNC+0LPRgNCw0LwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i0L/RgNC40LJcJ9GP0LfRg9Cy0LDRgtC4INC00L4g0YHQu9GD0LbQsdC4INCy0ZbQtNC20LXRgtGW0LIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i0JTQvtC30LLQvtC70Y/RlCDQstC70LDRgdC90LjQutC+0LLRliDQv9GA0LjQsuKAmdGP0LfRg9Cy0LDRgtC40YHRjyDQtNC+INGW0L3RgtC10YDRhNC10LnRgdGDINCy0LXRgNGF0L3RjNC+0LPQviDRgNGW0LLQvdGPINGB0LvRg9C20LHQuCDQstGW0LTQttC10YLRltCyLiDQndGW0LrQvtC70Lgg0L3QtSDQt9Cw0YHRgtC+0YHQvtCy0YPRlNGC0YzRgdGPINC00LvRjyDQt9Cy0LjRh9Cw0LnQvdC40YUg0L/RgNC+0LPRgNCw0LwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i0LLQt9Cw0ZTQvNC+0LTRltGP0YLQuCDQtyDQsNC00LzRltC9LiDQv9GA0LjRgdGC0YDQvtGOIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLQlNC+0LfQstC+0LvRj9GUINC/0YDQvtCz0YDQsNC80ZYg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC90LjQt9GM0LrQvtGA0ZbQstC90LXQstGWINGE0YPQvdC60YbRltGXIFN1cmZhY2VGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNjY5MDUwNDI0ODE3ODQ5ODEzNiI+ItGH0LjRgtCw0YLQuCDRhNGA0LXQudC8LdCx0YPRhNC10YAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4i0JTQvtC30LLQvtC70Y/RlCDQv9GA0L7Qs9GA0LDQvNGWINGH0LjRgtCw0YLQuCDQstC80ZbRgdGCINCx0YPRhNC10YDQsCDQutCw0LTRgNGW0LIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4i0L7RgtGA0LjQvNGD0LLQsNGC0Lgg0LTQvtGB0YLRg9C/INC00L4gSW5wdXRGbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iMjEwNDg2NDk0MTIwMTIyNjYxNiI+ItCU0L7Qt9Cy0L7Qu9GP0ZQg0L/RgNC+0LPRgNCw0LzRliDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNGC0Lgg0L3QuNC30YzQutC+0YDRltCy0L3QtdCy0ZYg0YTRg9C90LrRhtGW0ZcgSW5wdXRGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i0L3QsNC70LDRiNGC0YPQstCw0YLQuCDQtdC60YDQsNC90LggV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLQlNC+0LfQstC+0LvRj9GUINC/0YDQvtCz0YDQsNC80ZYg0L3QsNC70LDRiNGC0L7QstGD0LLQsNGC0Lgg0LXQutGA0LDQvdC4IFdpLUZpINGWINC/0ZbQtOKAmdGU0LTQvdGD0LLQsNGC0LjRgdGPINC00L4g0L3QuNGFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4i0LrQtdGA0YPQstCw0YLQuCDQtdC60YDQsNC90LDQvNC4IFdpLUZpIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+ItCS0LjQsdGA0LDRgtC4INC/0YDQvtCz0YDQsNC80YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiLQndC1INCy0LTQsNC70L7RgdGPINC30LDQv9GD0YHRgtC40YLQuCDQv9GA0L7Qs9GA0LDQvNGDIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLQndCw0LTRltGB0LvQsNGC0Lgg0YfQtdGA0LXQtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiLQndCw0LTRltGB0LvQsNGC0Lgg0YfQtdGA0LXQtyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+ItCS0LrQsNC30ZbQstC90LjQui3Qv9C+0LLQt9GD0L3QvtC6LiDQotC+0YDQutC90ZbRgtGM0YHRjyDQuSDRg9GC0YDQuNC80YPQudGC0LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+ItCf0YDQvtCy0LXQtNGW0YLRjCDQv9Cw0LvRjNGG0LXQvCDRg9Cz0L7RgNGDLCDRidC+0LEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+ItCf0YDQvtCy0LXQtNGW0YLRjCDQv9Cw0LvRjNGG0LXQvCDRg9C90LjQtywg0YnQvtCxIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLQn9GA0L7QstC10LTRltGC0Ywg0L/QsNC70YzRhtC10Lwg0LvRltCy0L7RgNGD0YcsINGJ0L7QsSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+ItCf0YDQvtCy0LXQtNGW0YLRjCDQv9Cw0LvRjNGG0LXQvCDQv9GA0LDQstC+0YDRg9GHLCDRidC+0LEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i0KDQvtC30LHQu9C+0LrRg9Cy0LDRgtC4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+ItCa0LDQvNC10YDQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLQkdC10Lcg0LfQstGD0LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLQo9Cy0ZbQvNC60L3Rg9GC0Lgg0LfQstGD0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+ItCf0L7RiNGD0LoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLQk9C+0YDRgtCw0LnRgtC1LCDRidC+0LEg0YDQvtC30LHQu9C+0LrRg9Cy0LDRgtC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLQn9GW0LTQutC70Y7Rh9GW0YLRjCDQs9Cw0YDQvdGW0YLRg9GA0YMsINGJ0L7QsSDQv9GA0L7RgdC70YPRhdCw0YLQuCDQstGW0LTRgtCy0L7RgNC10L3RliDQstCz0L7Qu9C+0YEg0YHQuNC80LLQvtC70Lgg0L/QsNGA0L7Qu9GPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Bhc3N3b3JkX2NoYXJhY3Rlcl9ub19oZWFkc2V0IiBtc2dpZD0iMjg1OTg3Mzc3MDg4NjE1MzY3OCI+ItCa0YDQsNC/0LrQsC4iPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLQodC40YHRgtC10LzQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4i0JDRg9C00ZbQviBCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+ItCR0LXQt9C00YDQvtGC0L7QstC40Lkg0LXQutGA0LDQvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLQk9C+0YLQvtCy0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLQktC40LLRltC0INC80LXQtNGW0LAt0LTQsNC90LjRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i0J/RltC04oCZ0ZTQtNC90LDRgtC40YHRjyDQtNC+INC/0YDQuNGB0YLRgNC+0Y4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiLQotGA0LDQvdGB0LvRjtCy0LDRgtC4INC10LrRgNCw0L0g0L3QsCDQv9GA0LjRgdGC0YDRltC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i0J/QvtGI0YPQuiDQv9GA0LjRgdGC0YDQvtGX0LLigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLQndCw0LvQsNGI0YLRg9Cy0LDQvdC90Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i0JLRltC04oCZ0ZTQtNC90LDRgtC40YHRjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLQodC60LDQvdGD0LLQsNC90L3Rjy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+ItCX4oCZ0ZTQtNC90LDQvdC90Y8uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+ItCU0L7RgdGC0YPQv9C90L4iPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLQndCw0LrQu9Cw0LTQsNC90L3RjyDihJY8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPtGFPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsINCx0LXQt9C/0LXRh9C90LjQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4i0JHQtdC30LTRgNC+0YLQvtCy0LjQuSDQtdC60YDQsNC9INC/0ZbQtOKAmdGU0LTQvdCw0L3QviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLQptC10Lkg0LXQutGA0LDQvSDQstGW0LTQvtCx0YDQsNC20LDRlNGC0YzRgdGPINC90LAg0ZbQvdGI0L7QvNGDINC/0YDQuNGB0YLRgNC+0ZciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4i0KLRgNCw0L3RgdC70Y7QstCw0L3QvdGPINC10LrRgNCw0L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiDigJMg0L/RltC04oCZ0ZTQtNC90LDQvdC90Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLQotGA0LDQvdGB0LvRjtCy0LDQvdC90Y8g0LXQutGA0LDQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTINC/0ZbQtOKAmdGU0LTQvdCw0L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLQktGW0LTigJnRlNC00L3QsNGC0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+ItCV0LrRgdGC0YDQtdC90LjQuSDQstC40LrQu9C40LoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLQndC1INC/0LDQvOKAmdGP0YLQsNGOINC60LvRjtGHIjwvc3RyaW5nPgpAQCAtMTY1MCw0ICsxNjU3LDE1IEBACiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLQodC/0YDQvtCx0YPQudGC0LUg0L/RltC30L3RltGI0LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i0J/RgNC+0LLQtdC00ZbRgtGMINC/0LDQu9GM0YbQtdC8INC30LLQtdGA0YXRgyDQstC90LjQtywg0YnQvtCxINCy0LjQudGC0Lgg0Lcg0L/QvtCy0L3QvtC10LrRgNCw0L3QvdC+0LPQviDRgNC10LbQuNC80YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiLQk9C+0YLQvtCy0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjY2OTgxOTkxODY4NTk3MzY1MTIiPiLQktC40LHRltGAINCz0L7QtNC40L0g0L3QsCDRhtC40YTQtdGA0LHQu9Cw0YLRliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4i0JLQuNCx0ZbRgCDRhdCy0LjQu9C40L0g0L3QsCDRhtC40YTQtdGA0LHQu9Cw0YLRliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyIgbXNnaWQ9IjYwNDMwNzk1MTE3NjYwMDgyNDUiPiLQktC40LHQtdGA0ZbRgtGMINCz0L7QtNC40L3QuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+ItCS0LjQsdC10YDRltGC0Ywg0YXQstC40LvQuNC90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+ItCS0ZbQutC90L4g0LLQuNCx0L7RgNGDINC00LDRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i0JzQtdC90Y4g0LLQuNCx0L7RgNGDINGA0L7QutGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLQktC40LHQtdGA0ZbRgtGMINC80ZbRgdGP0YbRjCDRliDQtNC10L3RjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+ItCS0LjQsdC10YDRltGC0Ywg0YDRltC6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXRlbV9pc19zZWxlY3RlZCIgbXNnaWQ9Ijk0OTY4NzQwMTY4MjQ3NjYwOCI+ItCS0LjQsdGA0LDQvdC+OiA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiI8eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiDQstC40LTQsNC70LXQvdC+Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAppbmRleCA4Mjc1MmI3Li5iZDk2NTZlIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+Ik5o4bqtcCBQVUsgY8OzIHThu6sgOCBz4buRIHRy4bufIGzDqm4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlRo4bq7IFNJTSBj4bunYSBi4bqhbiDEkcOjIGLhu4sga2jDs2EgUFVLLiBOaOG6rXAgbcOjIFBVSyDEkeG7gyBt4bufIGtow7NhIHRo4bq7IFNJTSDEkcOzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+Ik5o4bqtcCBtw6MgUFVLMiDEkeG7gyBi4buPIGNo4bq3biB0aOG6uyBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iS2jDtG5nIHRow6BuaCBjw7RuZywga8OtY2ggaG/huqF0IHTDrW5oIG7Eg25nIGtow7NhIFNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IkLhuqFuIGPDsm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGzhuqduIHRo4butIHRyxrDhu5tjIGtoaSBTSU0gYuG7iyBraMOzYS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiJC4bqhbiBjw7JuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBs4bqnbiB0aOG7rSB0csaw4bubYyBraGkgU0lNIGLhu4sga2jDs2EuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiJT4buRIGfhu41pIMSR4bq/biI8L3N0cmluZz4KQEAgLTM3Nyw2ICszODIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFZwblNlcnZpY2UiIG1zZ2lkPSIyMDY3ODQ1NTY0NTgxNjkzOTA1Ij4iQ2hvIHBow6lwIGNo4bunIHPhu58gaOG7r3UgbGnDqm4ga+G6v3QgduG7m2kgZ2lhbyBkaeG7h24gY+G6pXAgY2FvIG5o4bqldCBj4bunYSBk4buLY2ggduG7pSBWcG4uIEtow7RuZyBj4bqnbiB0aGnhur90IGNobyBjw6FjIOG7qW5nIGThu6VuZyB0aMO0bmcgdGjGsOG7nW5nLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiJsacOqbiBr4bq/dCB24bubaSBow6xuaCBu4buBbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iQ2hvIHBow6lwIGNo4bunIHPhu58gaOG7r3UgbGnDqm4ga+G6v3QgduG7m2kgZ2lhbyBkaeG7h24gY+G6pXAgY2FvIG5o4bqldCBj4bunYSBow6xuaCBu4buBbi4gS2jDtG5nIGPhuqduIHRoaeG6v3QgY2hvIGPDoWMg4bupbmcgZOG7pW5nIHRow7RuZyB0aMaw4budbmcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJsacOqbiBr4bq/dCB24bubaSBtw6BuIGjDrG5oIHThu6sgeGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJDaG8gcGjDqXAgY2jhu6cgc+G7nyBo4buvdSBsacOqbiBr4bq/dCB24bubaSBnaWFvIGRp4buHbiBj4bqlcCBjYW8gbmjhuqV0IGPhu6dhIG3DoG4gaMOsbmggdOG7qyB4YS4gS2jDtG5nIGPhuqduIHRoaeG6v3QgY2hvIGPDoWMg4bupbmcgZOG7pW5nIHRow7RuZyB0aMaw4budbmcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4ibGnDqm4ga+G6v3QgduG7m2kgZOG7i2NoIHbhu6UgdGnhu4duIMOtY2ggY29uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IkNobyBwaMOpcCBjaOG7pyBz4bufIGjhu691IGxpw6puIGvhur90IHbhu5tpIGdpYW8gZGnhu4duIGPhuqVwIGNhbyBuaOG6pXQgY+G7p2EgZOG7i2NoIHbhu6UgdGnhu4duIMOtY2ggY29uLiBLaMO0bmcgY+G6p24gdGhp4bq/dCBjaG8gY8OhYyDhu6luZyBk4bulbmcgdGjDtG5nIHRoxrDhu51uZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJ0xrDGoW5nIHTDoWMgduG7m2kgcXXhuqNuIHRy4buLIHZpw6puIHRoaeG6v3QgYuG7iyI8L3N0cmluZz4KQEAgLTQ3Nyw2ICs0ODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzU3VyZmFjZUZsaW5nZXIiIG1zZ2lkPSIxMDQxNjE5NTE2NzMzMjkzNTUxIj4iQ2hvIHBow6lwIOG7qW5nIGThu6VuZyBz4butIGThu6VuZyBjw6FjIHTDrW5oIG7Eg25nIFN1cmZhY2VGbGluZ2VyIGPhuqVwIMSR4buZIHRo4bqlcC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLEkeG7jWMgYuG7mSDEkeG7h20ga2h1bmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4iQ2hvIHBow6lwIOG7qW5nIGThu6VuZyDEkeG7jWMgbuG7mWkgZHVuZyBj4bunYSBi4buZIMSR4buHbSBraHVuZy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjUzNDg2MzUyNzA2ODk1NTM4NTciPiJ0cnV5IGPhuq1wIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJDaG8gcGjDqXAg4bupbmcgZOG7pW5nIHPhu60gZOG7pW5nIGPDoWMgdMOtbmggbsSDbmcgSW5wdXRGbGluZ2VyIGPhuqVwIMSR4buZIHRo4bqlcC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IsSR4buLbmggY+G6pXUgaMOsbmggbcOgbiBow6xuaCBXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IkNobyBwaMOpcCDhu6luZyBk4bulbmcgxJHhu4tuaCBj4bqldSBow6xuaCB2w6Aga+G6v3QgbuG7kWkgduG7m2kgbcOgbiBow6xuaCBXaS1GaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+Imtp4buDbSBzb8OhdCBtw6BuIGjDrG5oIFdpLUZpIjwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IkNo4buNbiBt4buZdCDhu6luZyBk4bulbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiJLaMO0bmcgdGjhu4Mga2jhu59pIGNo4bqheSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iODA2Njg4MDU2MTQxMTMxODE5Ij4iQ2hpYSBz4bq7IHbhu5tpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkNoaWEgc+G6uyB24bubaSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+IlRheSB0csaw4bujdC4gQ2jhuqFtICZhbXA7IGdp4buvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJUcsaw4bujdCBsw6puIMSR4buDIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJUcsaw4bujdCB4deG7kW5nIMSR4buDIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJUcsaw4bujdCBzYW5nIHRyw6FpIMSR4buDIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iVHLGsOG7o3Qgc2FuZyBwaOG6o2kgxJHhu4MgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iTeG7nyBraMOzYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJNw6F5IOG6o25oIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IkltIGzhurduZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJC4bqtdCDDom0gdGhhbmgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlTDrG0ga2nhur9tIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iVHLGsOG7o3QgxJHhu4MgbeG7nyBraMOzYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iQ+G6r20gdGFpIG5naGUgxJHhu4MgbmdoZSBjw6FjIGtow7NhIG3huq10IGto4bqpdSDEkcaw4bujYyDEkeG7jWMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iROG6pXUgY2jhuqVtLiI8L3N0cmluZz4KQEAgLTE0ODMsOCArMTQ4NCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+Ikjhu4cgdGjhu5FuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iw4JtIHRoYW5oIEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4iSGnhu4NuIHRo4buLIGtow7RuZyBkw6J5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IlhvbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLEkOG6p3UgcmEgcGjGsMahbmcgdGnhu4duIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJL4bq/dCBu4buRaSB24bubaSB0aGnhur90IGLhu4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJUcnV54buBbiBtw6BuIGjDrG5oIHThu5tpIHRoaeG6v3QgYuG7iyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+IsSQYW5nIHTDrG0ga2nhur9tIHRoaeG6v3QgYuG7i+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IkPDoGkgxJHhurd0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+Ik5n4bqvdCBr4bq/dCBu4buRaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLEkGFuZyBxdcOpdC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19jb25uZWN0aW5nIiBtc2dpZD0iNjQyMjU3MTcxNjAwNzgyNTQ0MCI+IsSQYW5nIGvhur90IG7hu5FpLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiJLaOG6oyBk4bulbmciPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJM4bubcCBwaOG7pyAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIGFuIHRvw6BuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiJIaeG7g24gdGjhu4sga2jDtG5nIGTDonkgxJHDoyDEkcaw4bujYyBr4bq/dCBu4buRaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiJNw6BuIGjDrG5oIG7DoHkgxJFhbmcgaGnhu4NuIHRo4buLIHRyw6puIHRoaeG6v3QgYuG7iyBraMOhYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJUcnV54buBbiBtw6BuIGjDrG5oIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4ixJBhbmcga+G6v3QgbuG7kWkgduG7m2kgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4iVHJ1eeG7gW4gbcOgbiBow6xuaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4ixJDDoyBr4bq/dCBu4buRaSB24bubaSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4iTmfhuq90IGvhur90IG7hu5FpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJDdeG7mWMgZ+G7jWkga2jhuqluIGPhuqVwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4ixJDDoyBxdcOqbiBow6xuaCI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1NiwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiJIw6N5IHRo4butIGzhuqFpIHNhdSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBnacOieSI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiJIw6N5IHRo4butIGzhuqFpIHNhdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiJWdeG7kXQgdOG7qyB0csOqbiB4deG7kW5nIMSR4buDIHRob8OhdCB0b8OgbiBtw6BuIGjDrG5oIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlZ14buRdCB04burIHRyw6puIHh14buRbmcgxJHhu4MgdGhvw6F0IHRvw6BuIG3DoG4gaMOsbmguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJYb25nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4iVGhhbmggdHLGsOG7o3QgZ2nhu50gaMOsbmggdHLDsm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtaW51dGVfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODYwNjAxMDk2Njg3Mzc5MTE5MCI+IlRoYW5oIHRyxrDhu6N0IHBow7p0IGjDrG5oIHRyw7JuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IkNo4buNbiBnaeG7nSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IkNo4buNbiBwaMO6dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4iTMaw4bubaSBuZ8OgeSB0aGVvIHRow6FuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTUyNDMzMTIwNzQzNjA1MjQwMyI+IkRhbmggc8OhY2ggbsSDbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iQ2jhu41uIHRow6FuZyB2w6AgbmfDoHkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiJDaOG7jW4gbsSDbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiLEkMOjIGNo4buNbiA8eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSIgbXNnaWQ9Ijc2NTk0Nzc4ODY2MjU1NjY1OTAiPiLEkMOjIHjDs2EgPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKaW5kZXggZGJmZDAzOS4uNzk0Y2FhNiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+Iuivt+mUruWFpeiHs+WwkSA4IOS9jeaVsOWtl+eahCBQVUsg56CB44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IuW3suWvuSBTSU0g5Y2h6L+b6KGMIFBVSyDnoIHplIHlrprjgILplK7lhaUgUFVLIOeggeWwhuWFtuino+mUgeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsyIiBtc2dpZD0iNDUyNjAzMzM3MTk4NzE5MzA3MCI+Iui+k+WFpSBQVUsyIOeggeS7peino+mUgSBTSU0g5Y2h44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4i5aSx6LSl77yM6K+35ZCv55SoIFNJTS9SVUlNIOWNoemUgeWumuiuvue9ruOAgiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IuaCqOi/mOaciTx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuasoeWwneivleacuuS8muOAguWmguaenOS7jeeEtuWksei0pe+8jFNJTSDljaHlsIbooqvplIHlrprjgIIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijc1MzA1OTc4MDgzNTg3NzQ3NDAiPiLmgqjov5jmnIk8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7mrKHlsJ3or5XmnLrkvJrjgILlpoLmnpzku43nhLblpLHotKXvvIxTSU0g5Y2h5bCG6KKr6ZSB5a6a44CCIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLmnaXnlLXmmL7npLoiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IuWFgeiuuOeUqOaIt+e7keWumuWIsCBWUE4g5pyN5Yqh55qE6aG257qn5o6l5Y+j44CC5pmu6YCa5bqU55So57ud5LiN6ZyA6KaB5q2k5p2D6ZmQ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+Iue7keWumuWIsOWjgee6uCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i5YWB6K6455So5oi357uR5a6a5Yiw5aOB57q455qE6aG257qn5o6l5Y+j44CC5pmu6YCa5bqU55So57ud5LiN6ZyA6KaB5q2k5p2D6ZmQ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLnu5Hlrproh7Pov5znqIvmmL7npLrlsY8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLlhYHorrjlupTnlKjnu5Hlrproh7Pov5znqIvmmL7npLrlsY/nmoTpobbnuqfmjqXlj6PjgILmma7pgJrlupTnlKjnu53kuI3pnIDopoHmraTmnYPpmZDjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLnu5HlrprliLDlsI/pg6jku7bmnI3liqEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i5YWB6K645bqU55So57uR5a6a5Yiw5bCP6YOo5Lu25pyN5Yqh55qE6aG257qn5o6l5Y+j44CC5pmu6YCa5bqU55So57ud5LiN6ZyA6KaB5q2k5p2D6ZmQ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i5LiO6K6+5aSH566h55CG5Zmo5Lqk5LqSIjwvc3RyaW5nPgpAQCAtNDc3LDE0ICs0ODQsMTYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IuWFgeiuuOW6lOeUqOS9v+eUqCBTdXJmYWNlRmxpbmdlciDkvY7nuqflip/og73jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLor7vlj5bluKfnvJPlhrLljLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4i5YWB6K645bqU55So6K+75Y+W5bin57yT5Yay5Yy655qE5YaF5a6544CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4i5L2/55SoIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLlhYHorrjlupTnlKjkvb/nlKggSW5wdXRGbGluZ2VyIOW6leWxguWKn+iDveOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i6YWN572uIFdMQU4g5pi+56S66K6+5aSHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI3OTE2ODE1MTU4NjkwMjE4MDY1Ij4i5YWB6K645bqU55So6YWN572u5bm26L+e5o6l5YiwIFdMQU4g5pi+56S66K6+5aSH44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiLmjqfliLYgV0xBTiDmmL7npLrorr7lpIciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSI0NTQzOTEyMjkyNjgxODI2OTg2Ij4i5YWB6K645bqU55So5o6n5Yi2IFdMQU4g5pi+56S66K6+5aSH55qE5Z+656GA5Yqf6IO944CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYXB0dXJlQXVkaW9PdXRwdXQiIG1zZ2lkPSI2ODU3MTM0NDk4NDAyMzQ2NzA4Ij4i5o2V6I636Z+z6aKR6L6T5Ye6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjIxMDU5Nzc1NDIxMjIwODg1MyI+IuWFgeiuuOivpeW6lOeUqOaNleiOt+WSjOmHjeWumuWQkemfs+mikei+k+WHuuOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvSG90d29yZCIgbXNnaWQ9IjE4OTA1NTM5MzU2NTAzNDk4MDgiPiLmo4DmtYvlhbPplK7or40iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlQXVkaW9Ib3R3b3JkIiBtc2dpZD0iOTE1MTgwNzk1ODE1MzA1NjgxMCI+IuWFgeiuuOW6lOeUqOaNleiOt+mfs+mikeS7peS+v+ajgOa1i+ivremfs+aMh+S7pOeahOWFs+mUruivjeOAguaNleiOt+aTjeS9nOS8muWcqOWQjuWPsOi/m+ihjO+8jOS9huS4jeS8muWmqOeijeWFtuS7lumfs+mikeaNleiOt+W3peWFt++8iOS+i+WmguaRhOWDj+acuu+8ieOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvSG90d29yZCIgbXNnaWQ9IjE4OTA1NTM5MzU2NTAzNDk4MDgiPiLlkK/liqjmjIfku6Tmo4DmtYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlQXVkaW9Ib3R3b3JkIiBtc2dpZD0iOTE1MTgwNzk1ODE1MzA1NjgxMCI+IuWFgeiuuOW6lOeUqOaNleiOt+mfs+mikeS7peS+v+ajgOa1i+ivremfs+WQr+WKqOaMh+S7pOOAguaNleiOt+aTjeS9nOS8muWcqOWQjuWPsOi/m+ihjO+8jOS9huS4jeS8muWmqOeijeWFtuS7lumfs+mikeaNleiOt+W3peWFt++8iOS+i+WmguaRhOWDj+acuu+8ieOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVZpZGVvT3V0cHV0IiBtc2dpZD0iMjI0NjgyODc3MzU4OTA5NDAyMyI+IuaNleiOt+inhumikei+k+WHuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjM1OTQ4MTY1ODAzNDE0OTg2MCI+IuWFgeiuuOivpeW6lOeUqOaNleiOt+WSjOmHjeWumuWQkeinhumikei+k+WHuuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZVNlY3VyZVZpZGVvT3V0cHV0IiBtc2dpZD0iNzgxNTM5ODk2OTMwMzM4MjAxNiI+IuaNleiOt+WuieWFqOinhumikei+k+WHuiI8L3N0cmluZz4KQEAgLTU0NSw3ICs1NTQsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9Ijc4NTUyNTk0NjEyNjg3MzQ5MTQiPiLorr/pl67mo4DlhaXlsZ7mgKciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGVja2luUHJvcGVydGllcyIgbXNnaWQ9IjQwMjQ1MjY5Njg2MzAxOTQxMjgiPiLlhYHorrjlupTnlKjlr7nnmbvorrDmnI3liqHkuIrkvKDnmoTlsZ7mgKfmi6XmnInor7vlj5Yv5YaZ5YWl5p2D6ZmQ44CC5pmu6YCa5bqU55So5LiN5bqU5L2/55So5q2k5p2D6ZmQ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kR2FkZ2V0IiBtc2dpZD0iNzc2OTA1MzM5MDE1ODYzNDcxIj4i6YCJ5oup5bCP6YOo5Lu2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZEdhZGdldCIgbXNnaWQ9IjgyNjEzMjY5Mzg1OTkwNDkyOTAiPiLlhYHorrjlupTnlKjlkYrnn6Xns7vnu5/lk6rkupvlsI/pg6jku7blj6/kvpvlk6rkuKrlupTnlKjkvb/nlKjjgILmi6XmnInmraTmnYPpmZDnmoTlupTnlKjlj6/lkJHlhbbku5blupTnlKjmjojkuojlr7nkuKrkurrotYTmlpnnmoTorr/pl67mnYPpmZDjgILmma7pgJrlupTnlKjkuI3lupTkvb/nlKjmraTmnYPpmZDjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kR2FkZ2V0IiBtc2dpZD0iODI2MTMyNjkzODU5OTA0OTI5MCI+IuWFgeiuuOW6lOeUqOWRiuefpeezu+e7n+WTquS6m+Wwj+mDqOS7tuWPr+S+m+WTquS4quW6lOeUqOS9v+eUqOOAguaLpeacieatpOadg+mZkOeahOW6lOeUqOWPr+WQkeWFtuS7luW6lOeUqOaOiOS6iOWvueS4quS6uuaVsOaNrueahOiuv+mXruadg+mZkOOAguaZrumAmuW6lOeUqOS4jeW6lOS9v+eUqOatpOadg+mZkOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfbW9kaWZ5UGhvbmVTdGF0ZSIgbXNnaWQ9Ijg0MjM5MjM3Nzc2NTkyOTIyMjgiPiLkv67mlLnmiYvmnLrnirbmgIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlQaG9uZVN0YXRlIiBtc2dpZD0iMTAyOTg3NzUyOTAwNzY4NjczMiI+IuWFgeiuuOW6lOeUqOaOp+WItuiuvuWkh+eahOeUteivneWKn+iDveOAguaLpeacieatpOadg+mZkOeahOW6lOeUqOWPr+WcqOS4jemAmuefpeaCqOeahOaDheWGteS4i+aJp+ihjOWIh+aNoue9kee7nOOAgeW8gOWFs+aJi+acuuaXoOe6v+ijhee9ruetieatpOexu+aTjeS9nOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSI5MTc4MjI4NTI0NTA3NjEwNDg2Ij4i6K+75Y+W5omL5py654q25oCB5ZKM6Lqr5Lu9Ijwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uIiBtc2dpZD0iMjEyNTE2ODA1NzE5OTk0MTE5OSI+IumAieaLqeW6lOeUqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5Y2hvb3NlcnZpZXdfY2hvb3NlX2FwcGxpY2F0aW9uX2Vycm9yIiBtc2dpZD0iODYyNDYxODM2NTQ4MTEyNjY2OCI+IuaXoOazleWQr+WKqOKAnDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz7igJ0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLliIbkuqvmlrnlvI8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i5L2/55SoPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPuWIhuS6qyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLmu5HliqjmiYvmn4TjgILop6bmkbjlubbmjInkvY/jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i5ZCR5LiK5ruR5Yqo5LulPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i5ZCR5LiL5ruR5Yqo5LulPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i5ZCR5bem5ruR5Yqo5LulPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IuWQkeWPs+a7keWKqOS7pTx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i6Kej6ZSBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IuebuOacuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLpnZnpn7MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i5omT5byA5aOw6Z+zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLmkJzntKIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLmu5Hliqjop6PplIHjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4i6ZyA6KaB5o+S5YWl6ICz5py65omN6IO95ZCs5Yiw5a+G56CB55qE5oyJ6ZSu5aOw44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i54K544CCIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i57O757ufIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLok53niZnpn7PpopEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IuaXoOe6v+aYvuekuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLlrozmiJAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLlqpLkvZPovpPlh7rnur/ot68iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+Iui/nuaOpeWIsOiuvuWkhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IuWwhuWxj+W5leaKleWwhOWIsOiuvuWkh+S4iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+Iuato+WcqOaQnOe0ouiuvuWkh+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+Iuiuvue9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiLmlq3lvIDov57mjqUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i5q2j5Zyo5omr5o+PLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i5q2j5Zyo6L+e5o6lLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLlj6/ov57mjqUiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLlj6DliqDop4blm74gIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+77yaPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPu+8jDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiLvvIzlronlhagiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IuW3sui/nuaOpeWIsOaXoOe6v+aYvuekuuiuvuWkhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjQ0OTg4MDIwMTI0NjQxNzA2ODUiPiLmraTlsY/luZXnmoTlhoXlrrnmraPmmL7npLrlnKjlj6bkuIDlj7Dorr7lpIfkuIoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfdGl0bGUiIG1zZ2lkPSIyODM4NjQ2NDcxMDUwMzU5NzA2Ij4i5q2j5Zyo5oqV5bCE5bGP5bmVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX21lc3NhZ2UiIG1zZ2lkPSI1ODM3MzUwOTkzNzUyODQxMzg5Ij4i5q2j5Zyo6L+e5o6l5Yiw4oCcPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+4oCdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfdGl0bGUiIG1zZ2lkPSI4NTY3MzA4MDY1OTEyNjc2Mjg1Ij4i5q2j5Zyo5oqV5bCE5bGP5bmVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0ZWRfbWVzc2FnZSIgbXNnaWQ9IjI1ODcyMDkzMjU3MDExMDk3MTUiPiLlt7Lov57mjqXliLDigJw8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7igJ0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI2MTgzNzU0NDYzNTYxMTUzMzcyIj4i5pat5byA6L+e5o6lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLntKfmgKXlkbzmlZEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLlv5jorrDkuoblm77moYgiPC9zdHJpbmc+CkBAIC0xNjQ5LDUgKzE2NTYsMTYgQEAKICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI0NzMwODY4OTIwNzQyOTUyODE3Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz7np5LlkI7ph43or5UiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i56iN5ZCO6YeN6K+VIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IuS7jumhtumDqOWQkeS4i+a7keWKqOWNs+WPr+mAgOWHuuWFqOWxj+aooeW8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLku47pobbpg6jlkJHkuIvmu5HliqjljbPlj6/pgIDlh7rlhajlsY/mqKHlvI/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IuWujOaIkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IuWwj+aXtui9rOebmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4i5YiG6ZKf6L2s55uYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IumAieaLqeWwj+aXtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IumAieaLqeWIhumSnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i5oyJ5pyI5Lu95YiS5YiG55qE5pel5pyf572R5qC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i5bm05Lu95YiX6KGoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLpgInmi6nmnIjku73lkozml6XmnJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLpgInmi6nlubTku70iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4i5bey6YCJ5oupPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4i5bey5Yig6ZmkPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKaW5kZXggMmQyZTc3ZS4uOWIyODMwNiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+Iui8uOWFpSA4IOS9jeaVuOS7peS4iueahCBQVUvjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4i5oKo55qEIFNJTSDljaHlt7LpjpblrpogUFVL77yM6KuL6Ly45YWlIFBVSyDnorzku6Xop6PpmaTpjpblrprjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiLovLjlhaUgUFVLMiDngrogU0lNIOWNoeino+mZpOWwgemOluOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZVBpbiIgbXNnaWQ9IjIwOTQxMjAyMDkwNzIwNzk1MCI+IuaTjeS9nOWkseaVl++8jOiri+WVn+eUqOOAjFNJTS9SVUlNIOmOluWumuOAjeOAgiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IuaCqOWJqeS4iyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh5qmf5pyD6Ly45YWl44CC5aaC5p6c5LuN54S26Ly45YWl6Yyv6Kqk77yMU0lNIOWwh+acg+iiq+mOluWumuOAgiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNzUzMDU5NzgwODM1ODc3NDc0MCI+IuaCqOWJqeS4iyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh5qmf5pyD6Ly45YWl44CC5aaC5p6c5LuN54S26Ly45YWl6Yyv6Kqk77yMU0lNIOWwh+acg+iiq+mOluWumuOAgiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4i5L6G6Zu76aGv56S6Ijwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiLlhYHoqLHmh4nnlKjnqIvlvI/nuavntZDoh7MgVlBOIOacjeWLmeeahOmgguWxpOS7i+mdoiAo5LiN5bu66K2w5LiA6Iis5oeJ55So56iL5byP5L2/55SoKeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFdhbGxwYXBlciIgbXNnaWQ9Ijg3MTY0MDAyNzk5Mzc4NTY0NjIiPiLnuavntZDoh7PmoYzluIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kV2FsbHBhcGVyIiBtc2dpZD0iNzEwODQyODY5MjU5NTQ5MTY2OCI+IuWFgeioseaHieeUqOeoi+W8j+e5q+e1kOiHs+ahjOW4g+eahOmgguWxpOS7i+mdoiAo5LiN5bu66K2w5LiA6Iis5oeJ55So56iL5byP5L2/55SoKeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxNzgyOTIzOTM4MDI5OTQxOTYwIj4i57mr57WQ6Iez6YGg56uv6J6i5bmVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZURpc3BsYXkiIG1zZ2lkPSIxMjYxMjQyNzE4NzI3Mjk1OTgxIj4i5YWB6Kix5oeJ55So56iL5byP57mr57WQ6Iez6YGg56uv5bGP6J6i55qE6aCC5bGk5LuL6Z2iICjkuI3lu7rorbDkuIDoiKzmh4nnlKjnqIvlvI/kvb/nlKgp44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4i57mr57WQ6Iez5bCP5bel5YW35pyN5YuZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmluZFJlbW90ZVZpZXdzIiBtc2dpZD0iNDcxNzk4NzgxMDEzNzY5MjU3MiI+IuWFgeioseaHieeUqOeoi+W8j+e5q+e1kOiHs+Wwj+W3peWFt+acjeWLmeeahOmgguWxpOS7i+mdouOAgCjkuI3lu7rorbDkuIDoiKzmh4nnlKjnqIvlvI/kvb/nlKgp44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i6IiH6KOd572u566h55CG5ZOh5LqS5YuVIjwvc3RyaW5nPgpAQCAtNDc3LDYgKzQ4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NTdXJmYWNlRmxpbmdlciIgbXNnaWQ9IjEwNDE2MTk1MTY3MzMyOTM1NTEiPiLlhYHoqLHmh4nnlKjnqIvlvI/kvb/nlKggU3VyZmFjZUZsaW5nZXIg55qE5L2O5bGk5Yqf6IO944CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI2NjkwNTA0MjQ4MTc4NDk4MTM2Ij4i6K6A5Y+W5qGG5p6257ep6KGd5Y2AIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIiBtc2dpZD0iNDkzNzQwNTUyMTgwOTQ1NDY4MCI+IuWFgeioseaHieeUqOeoi+W8j+iugOWPlueVq+mdoue3qeihneWNgOeahOWFp+WuueOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIiBtc2dpZD0iNTM0ODYzNTI3MDY4OTU1Mzg1NyI+IuWtmOWPliBJbnB1dEZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSIyMTA0ODY0OTQxMjAxMjI2NjE2Ij4i5YWB6Kix5oeJ55So56iL5byP5L2/55SoIElucHV0RmxpbmdlciDnmoTkvY7pmo7lip/og73jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNTU5NTY2MTY5NDc0Njc0MjE2OCI+IuioreWumiBXaUZpIERpc3BsYXkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiLlhYHoqLHmh4nnlKjnqIvlvI/oqK3lrprlj4rpgKPmjqUgV2lGaSBEaXNwbGF544CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSIzOTM2NDEyNzY3MjM2OTU0OTYiPiLmjqfliLYgV2lGaSBEaXNwbGF5Ijwvc3RyaW5nPgpAQCAtMTQxNCwxOCArMTQyMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQg6Y21Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIg6Y21Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4i6YG45pOH5oeJ55So56iL5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4i54Sh5rOV5ZWf5YuVIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiLliIbkuqvntaYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGhfYXBwbGljYXRpb24iIG1zZ2lkPSI1NjI3NDExMzg0NjM4Mzg5NzM4Ij4i6IiH44CMPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPuOAjeWIhuS6qyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiLmu5Hli5XmjqfliLbjgILmjIHnuozovJXop7jjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i5ZCR5LiK5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i5ZCR5LiL5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i5ZCR5bem5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IuWQkeWPs+a7keWLleWNs+WPrzx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i6Kej6Y6WIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IuebuOapnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLpnZzpn7MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i6Z+z5pWI5bey6ZaL5ZWfIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLmkJzlsIsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCIgbXNnaWQ9IjM4MzMxOTUzMzU2Mjk3OTUwNTUiPiLmu5Hli5XljbPlj6/op6PpjpbjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4i5o+S5LiK6ICz5qmf5Y2z5Y+v6IG95Yiw57O757Wx5pyX6K6A5a+G56K86Y2144CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4i6bue44CCIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4i57O757WxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2EyZHBfYXVkaW9fcm91dGVfbmFtZSIgbXNnaWQ9Ijg1NzU2MjQwMzA0MDY3NzEwMTUiPiLol43niZnpn7PpoLsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3aXJlbGVzc19kaXNwbGF5X3JvdXRlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iOTA3MDM0NjQyNTAyMzk3OTY1MSI+IueEoee3muieouW5leWIhuS6qyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiLlrozmiJAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiLlqpLpq5TovLjlh7oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IumAo+aOpeijnee9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGVfZm9yX3JlbW90ZV9kaXNwbGF5IiBtc2dpZD0iMzM5NTU0MTc0NTg3MjAxNzU4MyI+IuWcqOijnee9ruS4iuaUvumAgeieouW5lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfc2VhcmNoaW5nIiBtc2dpZD0iNDc3NjIzNjIwMjYxMDgyODcwNiI+Iuato+WcqOaQnOWwi+ijnee9ruKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+IuioreWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiLlgZzmraLpgKPmjqUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i5q2j5Zyo5o6D5o+P4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i5q2j5Zyo6YCj57eaLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2F2YWlsYWJsZSIgbXNnaWQ9IjY5ODMyNTgwNjcxOTQ2NDkzOTEiPiLlj6/nlKgiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiLph43nlormlYjmnpwgIzx4bGlmZjpnIGlkPSJJRCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfb3ZlcmxheV9kaXNwbGF5X3RpdGxlIiBtc2dpZD0iNjUyMTI0NTE3NjcyMjU3MTcyIj4iPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+77yaPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPng8eGxpZmY6ZyBpZD0iSEVJR0hUIj4lMyRkPC94bGlmZjpnPu+8jDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIo5a6J5YWoKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMjIzMDUwNjQ5MjQwMzI2NTU3Ij4i5bey6YCj5o6l54Sh57ea6aGv56S66KOd572uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+IumAmeWAi+eVq+mdouato+WcqOWPpuS4gOmDqOijnee9ruS4iumhr+ekuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiLmraPlnKjmraTmlL7pgIHonqLluZUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RpbmdfbWVzc2FnZSIgbXNnaWQ9IjU4MzczNTA5OTM3NTI4NDEzODkiPiLmraPlnKjpgKPnt5rliLDjgIw8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7jgI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiLmraPlnKjmraTmlL7pgIHonqLluZUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF9tZXNzYWdlIiBtc2dpZD0iMjU4NzIwOTMyNTcwMTEwOTcxNSI+IuW3sumAo+e3muWIsOOAjDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuOAjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiLkuK3mlrfpgKPnt5oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+Iue3iuaApembu+ipsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IuW/mOiomOWcluahiCI8L3N0cmluZz4KQEAgLTE2NDksNSArMTY1NiwxNiBAQAogICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjQ3MzA4Njg5MjA3NDI5NTI4MTciPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKEiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4i56iN5b6M5YaN6KmmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IuW+numgguerr+W+gOS4i+a7keWLleWNs+WPr+e1kOadn+WFqOieouW5leOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NvbmZpcm1hdGlvbiIgbXNnaWQ9IjcyMjc0MTY4OTQ5NzkwNDc0NjciPiLnlLHpoILnq6/lvoDkuIvlv6vpgJ/mu5Hli5XljbPlj6/pm6LplovlhajonqLluZXjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IuWujOaIkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IuWwj+aZgueSsOW9oua7keahvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4i5YiG6ZCY55Kw5b2i5ruR5qG/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IumBuOWPluWwj+aZgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIiBtc2dpZD0iMzk3NDM0NTYxNTkyMDMzNjA4NyI+IumBuOWPluWIhumQmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4OTkwODQ3OTI1OTYxMjk3OTY4Ij4i6aGv56S65q+P5pel55qE5pyI5puG5pa55qC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTI0MzMxMjA3NDM2MDUyNDAzIj4i5bm05Lu95riF5ZauIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSIgbXNnaWQ9Ijc3NzQ3NTk2MDQ3MDE3NzMzMzIiPiLpgbjlj5bmnIjku73lkozml6XmnJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciIgbXNnaWQ9Ijc5NTIwNTI4NjY5OTQxOTYxNzAiPiLpgbjlj5blubTku70iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4i5bey6YG45Y+WPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4g5bey5Yiq6ZmkIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCmluZGV4IDNlYzhkNGMuLjUzMmFmMGEgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCkBAIC01MCw2ICs1MCwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiLovLjlhaUgOCDkvY3mlbjku6XkuIrnmoQgUFVL44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlNJTSDljaHnmoQgUFVLIOW3sumOluWumuOAguiri+i8uOWFpSBQVUsg56K86Kej6Zmk6Y6W5a6a44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4i6KuL6Ly45YWlIFBVSzIg5Lul6Kej6Y6WIFNJTSDljaHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVQaW4iIG1zZ2lkPSIyMDk0MTIwMjA5MDcyMDc5NTAiPiLmk43kvZzlpLHmlZfvvIzoq4vllZ/nlKggU0lNL1JVSU0g6Y6W5a6a44CCIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwaW5wdWtfYXR0ZW1wdHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI2NTk2MjQ1Mjg1ODA5NzkwMTQyIj4i5oKo6YKE5Y+v5Lul5YaN6KmmIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDmrKHjgILlpoLmnpzku43nhLblpLHmlZfvvIxTSU0g5Y2h5bCH6KKr6Y6W5L2P44CCIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4i5oKo6YKE5Y+v5Lul5YaN6KmmIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDmrKHjgILlpoLmnpzku43nhLblpLHmlZfvvIxTSU0g5Y2h5bCH6KKr6Y6W5L2P44CCIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iaW1laSIgbXNnaWQ9IjI2MjU0Mjk4OTA4NjkwMDU3ODIiPiJJTUVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVpZCIgbXNnaWQ9IjQ4NDEyMjEyMzc2ODEyNTQxOTUiPiJNRUlEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ2xpcE1taSIgbXNnaWQ9IjY5NTI4MjEyMTY0ODAyODkyODUiPiLkvobpm7vpoa/npLoiPC9zdHJpbmc+CkBAIC0zNzcsNiArMzgyLDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRWcG5TZXJ2aWNlIiBtc2dpZD0iMjA2Nzg0NTU2NDU4MTY5MzkwNSI+IuWFgeioseaHieeUqOeoi+W8j+iBr+e5q+iHsyBWUE4g5pyN5YuZ55qE6aCC5bGk5LuL6Z2iICjkuIDoiKzmh4nnlKjnqIvlvI/kuI3pnIDkvb/nlKgp44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kV2FsbHBhcGVyIiBtc2dpZD0iODcxNjQwMDI3OTkzNzg1NjQ2MiI+IumAo+e1kOiHs+ahjOW4gyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4i5YWB6Kix5oeJ55So56iL5byP57mr57WQ6Iez5qGM5biD55qE6aCC5bGk5LuL6Z2iICjkuIDoiKzmh4nnlKjnqIvlvI/kuI3pnIDkvb/nlKgp44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiLnuavntZDoh7PpgaDnq6/onqLluZUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiLlhYHoqLHmh4nnlKjnqIvlvI/nuavntZDoh7PpgaDnq6/onqLluZXnmoTpoILlsaTku4vpnaIgKOS4gOiIrOaHieeUqOeoi+W8j+S4jemcgOS9v+eUqCnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRSZW1vdGVWaWV3cyIgbXNnaWQ9IjU2OTc5ODc3NTk4OTczNjcwOTkiPiLnuavntZDoh7PlsI/lt6XlhbfmnI3li5kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4i5YWB6Kix5oeJ55So56iL5byP57mr57WQ6Iez5bCP5bel5YW35pyN5YuZ55qE6aCC5bGk5LuL6Z2iICjkuIDoiKzmh4nnlKjnqIvlvI/kuI3pnIDkvb/nlKgp44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kRGV2aWNlQWRtaW4iIG1zZ2lkPSI4NzA0OTg2MTYzNzExNDU1MDEwIj4i6IiH6KOd572u566h55CG5ZOh5LqS5YuVIjwvc3RyaW5nPgpAQCAtNDc3LDE0ICs0ODQsMTYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+IuWFgeioseaHieeUqOeoi+W8j+S9v+eUqCBTdXJmYWNlRmxpbmdlciDnmoTkvY7pmo7lip/og73jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiLoroDlj5bmoYbmnrbnt6nooZ0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkRnJhbWVCdWZmZXIiIG1zZ2lkPSI0OTM3NDA1NTIxODA5NDU0NjgwIj4i5YWB6Kix5oeJ55So56iL5byP6K6A5Y+W55Wr6Z2i57ep6KGd5Y2A55qE5YWn5a6544CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4i5a2Y5Y+WIElucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiLlhYHoqLHmh4nnlKjnqIvlvI/kvb/nlKggSW5wdXRGbGluZ2VyIOeahOS9jumajuWKn+iDveOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4i6Kit5a6aIFdpLUZpIOmhr+ekuuijnee9riI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NvbmZpZ3VyZVdpZmlEaXNwbGF5IiBtc2dpZD0iNzkxNjgxNTE1ODY5MDIxODA2NSI+IuWFgeioseaHieeUqOeoi+W8j+ioreWumuWPiumAo+aOpSBXaS1GaSDpoa/npLroo53nva7jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbnRyb2xXaWZpRGlzcGxheSIgbXNnaWQ9IjM5MzY0MTI3NjcyMzY5NTQ5NiI+IuaOp+WItiBXaS1GaSDpoa/npLroo53nva4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sV2lmaURpc3BsYXkiIG1zZ2lkPSI0NTQzOTEyMjkyNjgxODI2OTg2Ij4i5YWB6Kix5oeJ55So56iL5byP5o6n5Yi2IFdpLUZpIOmhr+ekuuijnee9rueahOS9jumajuWKn+iDveOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FwdHVyZUF1ZGlvT3V0cHV0IiBtc2dpZD0iNjg1NzEzNDQ5ODQwMjM0NjcwOCI+IuaTt+WPlumfs+ioiui8uOWHuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhcHR1cmVBdWRpb091dHB1dCIgbXNnaWQ9IjYyMTA1OTc3NTQyMTIyMDg4NTMiPiLlhYHoqLHmh4nnlKjnqIvlvI/mk7flj5blj4rph43mlrDlsI7lkJHpn7PoqIrovLjlh7rjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVBdWRpb0hvdHdvcmQiIG1zZ2lkPSIxODkwNTUzOTM1NjUwMzQ5ODA4Ij4i54ax6ZaA5a2X6Kme5YG15risIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvSG90d29yZCIgbXNnaWQ9IjkxNTE4MDc5NTgxNTMwNTY4MTAiPiLlhYHoqLHmh4nnlKjnqIvlvI/mk7flj5bpn7PoqIrnlKjmlrznhrHploDlrZfoqZ7lgbXmuKzjgILmk7flj5bkvZzmpa3lj6/lnKjog4zmma/ln7fooYzvvIzkvYbkuKbmnKrnpoHmraLkvb/nlKjlhbbku5bpn7PoqIrmk7flj5blt6XlhbcgKOS+i+WmguaUnemMhOW9seapnynjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVBdWRpb0hvdHdvcmQiIG1zZ2lkPSIxODkwNTUzOTM1NjUwMzQ5ODA4Ij4i5ZWf5YuV5a2X6Kme5YG15risIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FwdHVyZUF1ZGlvSG90d29yZCIgbXNnaWQ9IjkxNTE4MDc5NTgxNTMwNTY4MTAiPiLlhYHoqLHmh4nnlKjnqIvlvI/mk7flj5bpn7PoqIrnlKjmlrzllZ/li5XlrZfoqZ7lgbXmuKzjgILmk7flj5bkvZzmpa3lj6/lnKjog4zmma/ln7fooYzvvIzkvYbkuKbmnKrnpoHmraLkvb/nlKjlhbbku5bpn7PoqIrmk7flj5blt6XlhbcgKOS+i+WmguaUnemMhOW9seapnynjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVWaWRlb091dHB1dCIgbXNnaWQ9IjIyNDY4Mjg3NzM1ODkwOTQwMjMiPiLmk7flj5boppboqIrovLjlh7oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYXB0dXJlVmlkZW9PdXRwdXQiIG1zZ2lkPSIzNTk0ODE2NTgwMzQxNDk4NjAiPiLlhYHoqLHmh4nnlKjnqIvlvI/mk7flj5blj4rph43mlrDlsI7lkJHoppboqIrovLjlh7rjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhcHR1cmVTZWN1cmVWaWRlb091dHB1dCIgbXNnaWQ9Ijc4MTUzOTg5NjkzMDMzODIwMTYiPiLmk7flj5blronlhajoppboqIrovLjlh7oiPC9zdHJpbmc+CkBAIC0xNDE0LDE4ICsxNDIzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCDpjbUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciDpjbUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiLpgbjmk4fmh4nnlKjnqIvlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiLnhKHms5XllZ/li5UgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IuWIhuS6q+Wwjeixoe+8miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjU2Mjc0MTEzODQ2MzgzODk3MzgiPiLoiIfjgIw8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT05fTkFNRSI+JXM8L3hsaWZmOmc+44CN5YiG5LqrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudF9kZXNjcmlwdGlvbl9zbGlkaW5nX2hhbmRsZSIgbXNnaWQ9IjQxNTk3NTA1NjE1OTI2MjI0OCI+Iua7keWLleaOp+WItuOAguaMgee6jOi8leinuOOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLlkJHkuIrmu5Hli5XljbPlj688eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLlkJHkuIvmu5Hli5XljbPlj688eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLlkJHlt6bmu5Hli5XljbPlj688eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4i5ZCR5Y+z5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLop6PpmaTpjpblrpoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i55u45qmfIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IumdnOmfsyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLplovllZ/pn7PmlYgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuaQnOWwiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+Iua7keWLleWNs+WPr+ino+mOluOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2hlYWRzZXRfcmVxdWlyZWRfdG9faGVhcl9wYXNzd29yZCIgbXNnaWQ9IjcwMTE5MjczNTIyNjc2Njg2NTciPiLpgKPmjqXogLPmqZ/ljbPlj6/ogb3lj5bns7vntbHmnJforoDlr4bnorzmjInpjbXjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9wYXNzd29yZF9jaGFyYWN0ZXJfbm9faGVhZHNldCIgbXNnaWQ9IjI4NTk4NzM3NzA4ODYxNTM2NzgiPiLpu57jgIIiPC9zdHJpbmc+CkBAIC0xNDgzLDggKzE0ODQsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfYXVkaW9fcm91dGVfY2F0ZWdvcnlfbmFtZSIgbXNnaWQ9IjM3MjI4MTExNzQwMDM4ODY5NDYiPiLns7vntbEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IuiXjeeJmemfs+ioiiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24iIG1zZ2lkPSI5MDcwMzQ2NDI1MDIzOTc5NjUxIj4i54Sh57ea6J6i5bmV5YiG5LqrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9ncm91cGluZ19kb25lIiBtc2dpZD0iNzk2NjQzODMwNzcyMzMxNzE2OSI+IuWujOaIkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2J1dHRvbl9jb250ZW50X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTc1ODU1MzU2NzA2NTE0NTI3NiI+IuWqkumrlOi8uOWHuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfdGl0bGUiIG1zZ2lkPSIxNzUxNjE4NTU0NTM5MDg3NjIyIj4i6YCj57ea6Iez6KOd572uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4i5bCH6J6i5bmV5oqV5pS+5Yiw6KOd572u5LiKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i5q2j5Zyo5pCc5bCL6KOd572uLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9leHRlbmRlZF9zZXR0aW5ncyIgbXNnaWQ9Ijg3MDE1NTM0MjM2NzAxNjA0Ij4i6Kit5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY29udHJvbGxlcl9kaXNjb25uZWN0IiBtc2dpZD0iODk2NjEyMDI4NjM3NDE1ODY0OSI+IuS4reaWt+mAo+e3miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19zY2FubmluZyIgbXNnaWQ9IjcyNzk5MDg3NjE3NTgyOTM3ODMiPiLmjoPmj4/kuK0uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiLpgKPnt5rkuK3igKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+IuWPr+S7peS9v+eUqCI8L3N0cmluZz4KQEAgLTE0OTUsOCArMTUwMCwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9uYW1lIiBtc2dpZD0iNTE0MjM2NTk4MjI3MTYyMDcxNiI+IuesrCA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+IOWAi+mHjeeWiuaViOaenCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7vvJo8eGxpZmY6ZyBpZD0iV0lEVEgiPiUyJGQ8L3hsaWZmOmc+eDx4bGlmZjpnIGlkPSJIRUlHSFQiPiUzJGQ8L3hsaWZmOmc+77yMPHhsaWZmOmcgaWQ9IkRQSSI+JTQkZDwveGxpZmY6Zz4gZHBpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV9zZWN1cmVfc3VmZml4IiBtc2dpZD0iNjAyMjExOTcwMjYyODU3MjA4MCI+IijlronlhagpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIyMjMwNTA2NDkyNDAzMjY1NTciPiLlt7LpgKPmjqXnhKHnt5rpoa/npLrlmagiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDk4ODAyMDEyNDY0MTcwNjg1Ij4i5YW25LuW6KOd572u5q2j5Zyo6aGv56S66YCZ5YCL55Wr6Z2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9jb25uZWN0aW5nX3RpdGxlIiBtc2dpZD0iMjgzODY0NjQ3MTA1MDM1OTcwNiI+Iuato+WcqOaKleaUvuieouW5lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Iuato+WcqOmAo+e3muiHs+OAjDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuOAjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX3RpdGxlIiBtc2dpZD0iODU2NzMwODA2NTkxMjY3NjI4NSI+Iuato+WcqOaKleaUvuieouW5lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4i5bey6YCj57ea6Iez44CMPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+44CNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9kaXNjb25uZWN0IiBtc2dpZD0iNjE4Mzc1NDQ2MzU2MTE1MzM3MiI+IuS4reaWt+mAo+e3miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i57eK5oCl6Zu76KmxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i5b+Y6KiY5ZyW5b2iIjwvc3RyaW5nPgpAQCAtMTY0OSw1ICsxNjU2LDE2IEBACiAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNDczMDg2ODkyMDc0Mjk1MjgxNyI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoSI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl90cnlfbGF0ZXIiIG1zZ2lkPSI5NzMxNDQ0NzI0OTA1MzIzNzciPiLnqI3lvozlho3oqaYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI3MjI3NDE2ODk0OTc5MDQ3NDY3Ij4i5b6e6aCC56uv5b6A5LiL5ruR5YuV5Y2z5Y+v57WQ5p2f5YWo6J6i5bmV44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IuW+numgguerr+W+gOS4i+a7keWLleWNs+WPr+mAgOWHuuWFqOieouW5leaooeW8j+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfbGFiZWwiIG1zZ2lkPSIyMDkzNzI2MDk5NTA1ODkyMzk4Ij4i5a6M5oiQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cl9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI2Njk4MTk5MTg2ODU5NzM2NTEyIj4i5bCP5pmC5pW455Kw54uA5ruR5qG/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiLliIbpkJjmlbjnkrDni4Dmu5Hmob8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfaG91cnMiIG1zZ2lkPSI2MDQzMDc5NTExNzY2MDA4MjQ1Ij4i6YG45Y+W5bCP5pmC5pW4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4i6YG45Y+W5YiG6ZCY5pW4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg5OTA4NDc5MjU5NjEyOTc5NjgiPiLml6XmnJ/ntrLmoLwgKOaMieaciOmhr+ekuikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiLlubTku73muIXllq4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IumBuOWPluaciOS7veWSjOaXpeacnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IumBuOWPluW5tOS7vSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiIG1zZ2lkPSI5NDk2ODc0MDE2ODI0NzY2MDgiPiLlt7Lpgbjlj5YgPHhsaWZmOmcgaWQ9IklURU0iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4i5bey5Yiq6ZmkIDx4bGlmZjpnIGlkPSJLRVkiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAppbmRleCA1N2Q1OWMzLi5kOTAyMzE0IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKQEAgLTUwLDYgKzUwLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IlRoYXlpcGhhIGktUFVLIGVuZXppbm9tYm9sbyBlemluZ3UtOCBub21hIG5nYXBoZXp1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJJa2hhZGkgbGFraG8gbGUtU0lNIGxpdmFsd2UgbmdlLVBVSy4gVGhheWlwaGEgaWtob2RpIHllLVBVSyB1a3VsaXZ1bGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iVGhheWlwaGEgaS1QVUsyIHVrdXplIHV2dWxlIGlraGFkaSBsZS1TSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iQWt1cGh1bWVsZWxhbmdhLCBuaWthIGFtYW5kbGEgdWtoaXllIHdlLVNJTS9SVUlNLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNjU5NjI0NTI4NTgwOTc5MDE0MiI+IlVuZW1pemFtbyBlbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBuZ2FwaGFtYmkga29rdWJhIGktU0lNIGlraGl5d2UuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI3NTMwNTk3ODA4MzU4Nzc0NzQwIj4iVW5lbWl6YW1vIGVuZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IG5nYXBoYW1iaSBrb2t1YmEgaS1TSU0gaWtoaXl3ZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJpbWVpIiBtc2dpZD0iMjYyNTQyOTg5MDg2OTAwNTc4MiI+IklNRUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWlkIiBtc2dpZD0iNDg0MTIyMTIzNzY4MTI1NDE5NSI+Ik1FSUQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJDbGlwTW1pIiBtc2dpZD0iNjk1MjgyMTIxNjQ4MDI4OTI4NSI+IkktSUQgWW9jaW5nbyBPbHVuZ2VuYXlvIjwvc3RyaW5nPgpAQCAtMzc3LDYgKzM4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kVnBuU2VydmljZSIgbXNnaWQ9IjIwNjc4NDU1NjQ1ODE2OTM5MDUiPiJJdnVtZWxhIHVtbmluaSB1a3V0aGkgYWJvcGhlbGUga3dpc3Nla2VsbyBlc2luZ2FwaGV6dWx1IHNlc2V2aXNpIHllLVZwbS4gQXlpZGluZ2FrZWxpIGl6aW5obGVsbyB6b2t1c2ViZW56YSBlemVqd2F5ZWxla2lsZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI4NzE2NDAwMjc5OTM3ODU2NDYyIj4iaGxhbmdhbmlzYSBrd2lwaGVwaGFkb25nYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRXYWxscGFwZXIiIG1zZ2lkPSI3MTA4NDI4NjkyNTk1NDkxNjY4Ij4iSXZ1bWVsYSB1bWJhbWJpIHVrdWhsYW5nYW5pc2EgdXhodW1hbm8gbm9tc2ViZW56aXNpIGt3ZXppbmdhIGVsaXBoZXp1bHUgbHdlcGhlcGhhZG9uZ2EuIEFrdXNvemUga3dhZGluZ2VrYSBrd2V6aW5obGVsbyB6b2t1c2ViZW56YSBleml2YW1pbGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjE3ODI5MjM5MzgwMjk5NDE5NjAiPiJib3BoZXplbGEga3VzaWJvbmlzaSBzZXNpbGF3dWxpIGt1ZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlRGlzcGxheSIgbXNnaWQ9IjEyNjEyNDI3MTg3MjcyOTU5ODEiPiJJdnVtZWxhIHVtYmFtYmkgdWt1aGxhbmdhbmlzYSBpc2l4aHVtaSBlc2lib25ha2FsYXlvIGVzaXNlemluZ2VuaSBlbGlwaGV6dWx1IHNlc2lib25pc2kgc2VzaWxhd3VsaSBrdWRlLiBBa3VtZWxlIGlkaW5nZWx3ZSBpemluaGxlbG8gem9rdXNlYmVuemEgZXppandheWVsZWtpbGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI1Njk3OTg3NzU5ODk3MzY3MDk5Ij4iYm9waGV6ZWxhIGt1YmUgaXNldmlzaSB5ZXNpbnF1bmphbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kUmVtb3RlVmlld3MiIG1zZ2lkPSI0NzE3OTg3ODEwMTM3NjkyNTcyIj4iSXZ1bWVsYSB1bWJhbWJpIHVrdWhsYW5nYW5pc2EgdXhodW1hbm8gbm9tc2ViZW56aXNpIGt3ZXppbmdhIGVsaXBoZXp1bHUgbGVuc2l6YWthbG8geWVzaW5xdW5qd2FuYS4gQWt1c296ZSBrd2FkaW5nZWthIGt3ZXppbmhsZWxvIHpva3VzZWJlbnphIGV6aXZhbWlsZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmREZXZpY2VBZG1pbiIgbXNnaWQ9Ijg3MDQ5ODYxNjM3MTE0NTUwMTAiPiJ4aHVtYW5hIG5vbXBoYXRoaSB3ZWRpdmF5c2kiPC9zdHJpbmc+CkBAIC00NzcsNiArNDg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1N1cmZhY2VGbGluZ2VyIiBtc2dpZD0iMTA0MTYxOTUxNjczMzI5MzU1MSI+Ikl2dW1lbGEgdWhsZWxvIGxva3VzZWJlbnphIHVrdXRoaSBpc2ViZW56aXNlIG9rdXF1a2V0aHdlIGktU3VyZmFjZUZsaW5nZXIgb2t1c2V6aW5nZW5pIGVsaXBoYW5zaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjY2OTA1MDQyNDgxNzg0OTgxMzYiPiJmdW5kYSBpc2lraHVtYnVsaSBzZXNpa2hhc2hhbmEgc2VuZGlraW1iYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRGcmFtZUJ1ZmZlciIgbXNnaWQ9IjQ5Mzc0MDU1MjE4MDk0NTQ2ODAiPiJJdnVtZWxhIHVobGVsbyBsb2t1c2ViZW56YSB1a3V0aGkgaWZ1bmRlIG9rdXF1a2V0aHdlIGlmcmV5aW11IHllYmhhZmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbnB1dEZsaW5nZXIiIG1zZ2lkPSI1MzQ4NjM1MjcwNjg5NTUzODU3Ij4iZmlueWVsZWxhIGt1LUlucHV0RmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0lucHV0RmxpbmdlciIgbXNnaWQ9IjIxMDQ4NjQ5NDEyMDEyMjY2MTYiPiJJdnVtZWxhIHVobGVsbyBsb2t1c2ViZW56YSB1a3V0aGkgbHVzZWJlbnppc2UgaXppY2kgemV6aW5nYSBlbGlwaGFuc2kgemUtSW5wdXRGbGluZ2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29uZmlndXJlV2lmaURpc3BsYXkiIG1zZ2lkPSI1NTk1NjYxNjk0NzQ2NzQyMTY4Ij4ibHVuZ2lzYSB1a3VidWt3YSBrd2UtV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb25maWd1cmVXaWZpRGlzcGxheSIgbXNnaWQ9Ijc5MTY4MTUxNTg2OTAyMTgwNjUiPiJJdnVtZWxhIHVobGVsbyBsb2t1c2ViZW56YSB1a3VsdW5naXNhIG5va3V4aHVtYSBla3VidWtpc3dlbmkga3dlLVdpLUZpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY29udHJvbFdpZmlEaXNwbGF5IiBtc2dpZD0iMzkzNjQxMjc2NzIzNjk1NDk2Ij4ibGF3dWxhIHVrdWJ1a3dhIGt3ZS1XaS1GaSI8L3N0cmluZz4KQEAgLTE0MTQsMTggKzE0MjMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IkJla2Ega3dlbnllIGluZGF3byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkZha2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjIxMjUxNjgwNTcxOTk5NDExOTkiPiJLaGV0aGEgdWhsZWxvIGxva3VzZWJlbnphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb25fZXJyb3IiIG1zZ2lkPSI4NjI0NjE4MzY1NDgxMTI2NjY4Ij4iQXlpa3dhemFuZ2EgdWt1cWFsaXNhIGktPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNoYXJlYWN0aW9ucHJvdmlkZXJfc2hhcmVfd2l0aCIgbXNnaWQ9IjgwNjY4ODA1NjE0MTEzMTgxOSI+IllhYmVsYW5hIG5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IllhYmVsYW5hIG5vIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50X2Rlc2NyaXB0aW9uX3NsaWRpbmdfaGFuZGxlIiBtc2dpZD0iNDE1OTc1MDU2MTU5MjYyMjQ4Ij4iSWhhYW1iaXMgaXNpYmFtYm8uIFRoaW50YSAmYW1wOyB1YmFtYmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlNoZWxlbGlzZWxhIG5nZW5obGEga3UtPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IlNoZWxlbGlzZWxhIG5nZXphbnNpIGt1LTx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJTaGVsZWxpc2VsYSBuZ2Frd2Vzb2t1bnhlbGUga3UtPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJTaGVsZWxpc2VsYSBuZ2Frd2Vzb2t1ZGxhIGt1LTx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IlZ1bGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iSWtoYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iVGh1bGlsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJVbXNpbmRvIHV2dWxpd2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlNlc2hhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9ja190YWJsZXQiIG1zZ2lkPSIzODMzMTk1MzM1NjI5Nzk1MDU1Ij4iU3dheWlwaGEgdWt1emUgdXZ1bGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfaGVhZHNldF9yZXF1aXJlZF90b19oZWFyX3Bhc3N3b3JkIiBtc2dpZD0iNzAxMTkyNzM1MjI2NzY2ODY1NyI+IlBsYWthIGt1LWhlYWRzZXQgdWt1emUgdXp3ZSBva2hpeWUgYmVwaGFzaXdlZGkgZXppbmRsZWJlbmkgemFraG8gYmV6d2FrYWxhIGtha2h1bHUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iSWNhc2hhemkuIjwvc3RyaW5nPgpAQCAtMTQ4Myw4ICsxNDg0LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX2NhdGVnb3J5X25hbWUiIG1zZ2lkPSIzNzIyODExMTc0MDAzODg2OTQ2Ij4iSXNpc3RpbXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lIiBtc2dpZD0iODU3NTYyNDAzMDQwNjc3MTAxNSI+IlVtc2luZG8gd2UtQmx1ZXRvb3RoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJVa3Vib25pc2Egb2t1bmdlbmF6aW50YW1ibyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZ3JvdXBpbmdfZG9uZSIgbXNnaWQ9Ijc5NjY0MzgzMDc3MjMzMTcxNjkiPiJRZWRpbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3NTg1NTM1NjcwNjUxNDUyNzYiPiJPa3VraGlwaGF5byBrd2VtaWRpeWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlIiBtc2dpZD0iMTc1MTYxODU1NDUzOTA4NzYyMiI+IlhodW1hIGt1ZGl2YXlpc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3RpdGxlX2Zvcl9yZW1vdGVfZGlzcGxheSIgbXNnaWQ9IjMzOTU1NDE3NDU4NzIwMTc1ODMiPiJMaW5naXNhIGlzaWtyaW5pIGt1ZGl2YXlpc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJJc2VzaGEgYW1hZGl2YXlpc2nigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJJemlsdW5naXNlbGVsbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2NvbnRyb2xsZXJfZGlzY29ubmVjdCIgbXNnaWQ9Ijg5NjYxMjAyODYzNzQxNTg2NDkiPiJOcWFtdWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+Ikl5YXNrZW5hLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4iSXlheGh1bWEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfYXZhaWxhYmxlIiBtc2dpZD0iNjk4MzI1ODA2NzE5NDY0OTM5MSI+Ikt1eWF0aG9sYWthbGEiPC9zdHJpbmc+CkBAIC0xNDk1LDggKzE1MDAsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJJc2VuZGxhbGVsbyAjPHhsaWZmOmcgaWQ9IklEIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfdGl0bGUiIG1zZ2lkPSI2NTIxMjQ1MTc2NzIyNTcxNzIiPiI8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJXSURUSCI+JTIkZDwveGxpZmY6Zz54PHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIGt1cGhlcGhpbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjIyMzA1MDY0OTI0MDMyNjU1NyI+IlVrdWJ1a2VrYSBva3VuZ2VuYW50YW1ibyBrdXhodW55aXdlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNwbGF5X25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNDQ5ODgwMjAxMjQ2NDE3MDY4NSI+Ikxlc2kgc2lrcmluaSBzaXlhYm9uYWthbGEga3dlbnllIGlkaXZheWlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ190aXRsZSIgbXNnaWQ9IjI4Mzg2NDY0NzEwNTAzNTk3MDYiPiJJc2lrcmluaSBzb2t1bGluZ2lzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGluZ19tZXNzYWdlIiBtc2dpZD0iNTgzNzM1MDk5Mzc1Mjg0MTM4OSI+Ikl4aHVtYSBrdS08eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc3BsYXlfbm90aWZpY2F0aW9uX2Nvbm5lY3RlZF90aXRsZSIgbXNnaWQ9Ijg1NjczMDgwNjU5MTI2NzYyODUiPiJJc2lrcmluaSBzb2t1bGluZ2lzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fY29ubmVjdGVkX21lc3NhZ2UiIG1zZ2lkPSIyNTg3MjA5MzI1NzAxMTA5NzE1Ij4iS3V4aHVueXdlIGt1LTx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9ub3RpZmljYXRpb25fZGlzY29ubmVjdCIgbXNnaWQ9IjYxODM3NTQ0NjM1NjExNTMzNzIiPiJOcWFtdWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJVY2luZ28gbHdlemltbyBlemlwaHV0aHVtYXlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iVWtob2hsd2UgaXBoZXRoaW5pPyI8L3N0cmluZz4KQEAgLTE2NTAsNCArMTY1NywxNSBAQAogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fdHJ5X2xhdGVyIiBtc2dpZD0iOTczMTQ0NDcyNDkwNTMyMzc3Ij4iWmFtYSBmdXRoaSBlbXZhIGt3ZXNpa2hhdGhpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaW1tZXJzaXZlX21vZGVfY29uZmlybWF0aW9uIiBtc2dpZD0iNzIyNzQxNjg5NDk3OTA0NzQ2NyI+IlN3YXlpcGhlbGEgcGhhbnNpIGt1c3VrZWxhIHBoZXp1bHUgdWt1emUgdXBodW1lIGt1c2lrcmluaSBlc2lnY3dlbGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9sYWJlbCIgbXNnaWQ9IjIwOTM3MjYwOTk1MDU4OTIzOTgiPiJLd2Vueml3ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IkFtYWhvcmEgd2VzbGF5aWRpIGVzaXlpbmRpbmdpbGl6aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZV9waWNrZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NjA2MDEwOTY2ODczNzkxMTkwIj4iQW1hbWluaXRoaSB3ZXNsYXlpZGkgZXNpeWluZGluZ2lsaXppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+IktoZXRoYSBhbWFob3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iS2hldGhhIGFtYW1pbml0aGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXlfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODk5MDg0NzkyNTk2MTI5Nzk2OCI+IklncmlkaSB5ZW55YW5nYSB5ZXppbnN1a3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ5ZWFyX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU1MjQzMzEyMDc0MzYwNTI0MDMiPiJVaGx1IGxvbnlha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfZGF5IiBtc2dpZD0iNzc3NDc1OTYwNDcwMTc3MzMzMiI+IktoZXRoYSBpbnlhbmdhIG5vc3VrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF95ZWFyIiBtc2dpZD0iNzk1MjA1Mjg2Njk5NDE5NjE3MCI+IktoZXRoYSB1bnlha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpdGVtX2lzX3NlbGVjdGVkIiBtc2dpZD0iOTQ5Njg3NDAxNjgyNDc2NjA4Ij4iSS08eGxpZmY6ZyBpZD0iSVRFTSI+JTEkczwveGxpZmY6Zz4gZWtoZXRoaXdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlZF9rZXkiIG1zZ2lkPSI3NjU5NDc3ODg2NjI1NTY2NTkwIj4iSS08eGxpZmY6ZyBpZD0iS0VZIj4lMSRzPC94bGlmZjpnPiBpc3VzaXdlIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2F0dHJzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvYXR0cnMueG1sCmluZGV4IDQyZTNiNTAuLjViYTc0OWEgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvYXR0cnMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvYXR0cnMueG1sCkBAIC00NDcsNiArNDQ3LDE1IEBACiAgICAgICAgICAgICAgdG8ge0BsaW5rIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcyNGTEFHX1RSQU5TTFVDRU5UX05BVklHQVRJT059LiAtLT4KICAgICAgICAgPGF0dHIgbmFtZT0id2luZG93VHJhbnNsdWNlbnROYXZpZ2F0aW9uIiBmb3JtYXQ9ImJvb2xlYW4iIC8+CiAKKyAgICAgICAgPCEtLSBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGlzIHdpbmRvdyByZXF1ZXN0cyB0aGF0IGNvbnRlbnQgY2hhbmdlcyBiZSBwZXJmb3JtZWQKKyAgICAgICAgICAgICBhcyBzY2VuZSBjaGFuZ2VzIHdpdGggdHJhbnNpdGlvbnMuIENvcnJlc3BvbmRzIHRvCisgICAgICAgICAgICAge0BsaW5rIGFuZHJvaWQudmlldy5XaW5kb3cjRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TfS4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9IndpbmRvd0NvbnRlbnRUcmFuc2l0aW9ucyIgZm9ybWF0PSJib29sZWFuIiAvPgorCisgICAgICAgIDwhLS0gUmVmZXJlbmNlIHRvIGEgVHJhbnNpdGlvbk1hbmFnZXIgWE1MIHJlc291cmNlIGRlZmluaW5nIHRoZSBkZXNpcmVkCisgICAgICAgICAgICAgdHJhbnNpdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgd2luZG93IGNvbnRlbnQuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJ3aW5kb3dDb250ZW50VHJhbnNpdGlvbk1hbmFnZXIiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgorCiAgICAgICAgIDwhLS0gPT09PT09PT09PT09IC0tPgogICAgICAgICA8IS0tIEFsZXJ0IERpYWxvZyBzdHlsZXMgLS0+CiAgICAgICAgIDwhLS0gPT09PT09PT09PT09IC0tPgpAQCAtNjA3LDYgKzYxNiw4IEBACiAgICAgICAgIDxhdHRyIG5hbWU9InBvcHVwTWVudVN0eWxlIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KICAgICAgICAgPCEtLSBEZWZhdWx0IFN0YWNrVmlldyBzdHlsZS4gLS0+CiAgICAgICAgIDxhdHRyIG5hbWU9InN0YWNrVmlld1N0eWxlIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KKyAgICAgICAgPCEtLSBEZWZhdWx0IHN0eWxlIGZvciB0aGUgRnJhZ21lbnRCcmVhZENydW1icyB3aWRnZXQuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJmcmFnbWVudEJyZWFkQ3J1bWJzU3R5bGUiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgogCiAgICAgICAgIDwhLS0gTnVtYmVyUGlja2VyIHN0eWxlLiAtLT4KICAgICAgICAgPGF0dHIgbmFtZT0ibnVtYmVyUGlja2VyU3R5bGUiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgpAQCAtNjE3LDYgKzYyOCwxOCBAQAogICAgICAgICA8IS0tIFRoZSBUaW1lUGlja2VyIHN0eWxlLiAtLT4KICAgICAgICAgPGF0dHIgbmFtZT0idGltZVBpY2tlclN0eWxlIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KIAorICAgICAgICA8IS0tIFRoZSBUaW1lUGlja2VyIEhlYWRlciBiYWNrZ3JvdW5kIGNvbG9yIC4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJCYWNrZ3JvdW5kQ29sb3IiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgorCisgICAgICAgIDwhLS0gVGhlIFRpbWVQaWNrZXIgSGVhZGVyIHRpbWUgbGFiZWwgdGV4dCBhcHBlYXJhbmNlIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJ0aW1lUGlja2VySGVhZGVyVGltZUxhYmVsVGV4dEFwcGVhcmFuY2UiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgorCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBIZWFkZXIgYW0gcG0gbGFiZWwgdGV4dCBhcHBlYXJhbmNlIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJ0aW1lUGlja2VySGVhZGVyQW1QbUxhYmVsVGV4dEFwcGVhcmFuY2UiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgorCisgICAgICAgIDwhLS0gVGhlIFRpbWVQaWNrZXIgZGlhbG9nIHRoZW1lLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0idGltZVBpY2tlckRpYWxvZ1RoZW1lIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KKwogICAgICAgICA8IS0tIFRoZSBEYXRlUGlja2VyIHN0eWxlLiAtLT4KICAgICAgICAgPGF0dHIgbmFtZT0iZGF0ZVBpY2tlclN0eWxlIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KIApAQCAtMTYwNCw2ICsxNjI3LDkgQEAKICAgICAgICAgPGF0dHIgbmFtZT0id2luZG93Q2xvc2VPblRvdWNoT3V0c2lkZSIgLz4KICAgICAgICAgPGF0dHIgbmFtZT0id2luZG93VHJhbnNsdWNlbnRTdGF0dXMiIC8+CiAgICAgICAgIDxhdHRyIG5hbWU9IndpbmRvd1RyYW5zbHVjZW50TmF2aWdhdGlvbiIgLz4KKyAgICAgICAgPGF0dHIgbmFtZT0id2luZG93Q29udGVudFRyYW5zaXRpb25zIiAvPgorICAgICAgICA8YXR0ciBuYW1lPSJ3aW5kb3dDb250ZW50VHJhbnNpdGlvbk1hbmFnZXIiIC8+CisKICAgICAgICAgPCEtLSBUaGUgbWluaW11bSB3aWR0aCB0aGUgd2luZG93IGlzIGFsbG93ZWQgdG8gYmUsIGFsb25nIHRoZSBtYWpvcgogICAgICAgICAgICAgIGF4aXMgb2YgdGhlIHNjcmVlbi4gIFRoYXQgaXMsIHdoZW4gaW4gbGFuZHNjYXBlLiAgQ2FuIGJlIGVpdGhlcgogICAgICAgICAgICAgIGFuIGFic29sdXRlIGRpbWVuc2lvbiBvciBhIGZyYWN0aW9uIG9mIHRoZSBzY3JlZW4gc2l6ZSBpbiB0aGF0CkBAIC0yNzI1LDYgKzI3NTEsOCBAQAogICAgICAgICA8IS0tIEVuYWJsZXMgdGhlIGZhc3Qgc2Nyb2xsIHRodW1iIHRoYXQgY2FuIGJlIGRyYWdnZWQgdG8gcXVpY2tseSBzY3JvbGwgdGhyb3VnaAogICAgICAgICAgICAgIHRoZSBsaXN0LiAtLT4KICAgICAgICAgPGF0dHIgbmFtZT0iZmFzdFNjcm9sbEVuYWJsZWQiIGZvcm1hdD0iYm9vbGVhbiIgLz4KKyAgICAgICAgPCEtLSBTcGVjaWZpZXMgdGhlIHN0eWxlIG9mIHRoZSBmYXN0IHNjcm9sbCBkZWNvcmF0aW9ucy4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9ImZhc3RTY3JvbGxTdHlsZSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+CiAgICAgICAgIDwhLS0gV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIGxpc3Qgd2lsbCB1c2UgYSBtb3JlIHJlZmluZWQgY2FsY3VsYXRpb24KICAgICAgICAgICAgICBtZXRob2QgYmFzZWQgb24gdGhlIHBpeGVscyBoZWlnaHQgb2YgdGhlIGl0ZW1zIHZpc2libGUgb24gc2NyZWVuLiBUaGlzCiAgICAgICAgICAgICAgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUgYnkgZGVmYXVsdCBidXQgc2hvdWxkIGJlIHNldCB0byBmYWxzZSBpZiB5b3VyIGFkYXB0ZXIKQEAgLTI3OTMsNiArMjgyMSwzNiBAQAogICAgIDwvZGVjbGFyZS1zdHlsZWFibGU+CiAgICAgPGRlY2xhcmUtc3R5bGVhYmxlIG5hbWU9IkVkaXRUZXh0Ij4KICAgICA8L2RlY2xhcmUtc3R5bGVhYmxlPgorICAgIDxkZWNsYXJlLXN0eWxlYWJsZSBuYW1lPSJGYXN0U2Nyb2xsIj4KKyAgICAgICAgPCEtLSBEcmF3YWJsZSB1c2VkIGZvciB0aGUgc2Nyb2xsIGJhciB0aHVtYi4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9InRodW1iRHJhd2FibGUiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgorICAgICAgICA8IS0tIE1pbmltdW0gd2lkdGggb2YgdGhlIHRodW1iLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0idGh1bWJNaW5XaWR0aCIgZm9ybWF0PSJkaW1lbnNpb24iIC8+CisgICAgICAgIDwhLS0gTWluaW11bSBoZWlnaHQgb2YgdGhlIHRodW1iLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0idGh1bWJNaW5IZWlnaHQiIGZvcm1hdD0iZGltZW5zaW9uIiAvPgorICAgICAgICA8IS0tIERyYXdhYmxlIHVzZWQgZm9yIHRoZSBzY3JvbGwgYmFyIHRyYWNrLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0idHJhY2tEcmF3YWJsZSIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gRHJhd2FibGUgdXNlZCBmb3IgdGhlIHNlY3Rpb24gaGVhZGVyIHByZXZpZXcgd2hlbiByaWdodC1hbGlnbmVkLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0iYmFja2dyb3VuZFJpZ2h0IiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KKyAgICAgICAgPCEtLSBEcmF3YWJsZSB1c2VkIGZvciB0aGUgc2VjdGlvbiBoZWFkZXIgcHJldmlldyB3aGVuIGxlZnQtYWxpZ25lZC4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9ImJhY2tncm91bmRMZWZ0IiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KKyAgICAgICAgPCEtLSBQb3NpdGlvbiBvZiBzZWN0aW9uIGhlYWRlciBwcmV2aWV3LiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0icG9zaXRpb24iPgorICAgICAgICAgICAgPCEtLSBGbG9hdGluZyBhdCB0aGUgdG9wIG9mIHRoZSBjb250ZW50LiAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9ImZsb2F0aW5nIiB2YWx1ZT0iMCIgLz4KKyAgICAgICAgICAgIDwhLS0gUGlubmVkIGFsb25nc2lkZSB0aGUgdGh1bWIuIC0tPgorICAgICAgICAgICAgPGVudW0gbmFtZT0iYXRUaHVtYiIgdmFsdWU9IjEiIC8+CisgICAgICAgIDwvYXR0cj4KKyAgICAgICAgPGF0dHIgbmFtZT0idGV4dEFwcGVhcmFuY2UiIC8+CisgICAgICAgIDxhdHRyIG5hbWU9InRleHRDb2xvciIgLz4KKyAgICAgICAgPGF0dHIgbmFtZT0idGV4dFNpemUiIC8+CisgICAgICAgIDwhLS0gTWluaW11bSB3aWR0aCBvZiB0aGUgc2VjdGlvbiBoZWFkZXIgcHJldmlldy4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9Im1pbldpZHRoIiAvPgorICAgICAgICA8IS0tIE1pbmltdW0gaGVpZ2h0IG9mIHRoZSBzZWN0aW9uIGhlYWRlciBwcmV2aWV3LiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0ibWluSGVpZ2h0IiAvPgorICAgICAgICA8IS0tIFBhZGRpbmcgZm9yIHRoZSBzZWN0aW9uIGhlYWRlciBwcmV2aWV3LiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0icGFkZGluZyIgLz4KKyAgICA8L2RlY2xhcmUtc3R5bGVhYmxlPgogICAgIDxkZWNsYXJlLXN0eWxlYWJsZSBuYW1lPSJGcmFtZUxheW91dCI+CiAgICAgICAgIDwhLS0gRGVmaW5lcyB0aGUgZHJhd2FibGUgdG8gZHJhdyBvdmVyIHRoZSBjb250ZW50LiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuIG92ZXJsYXkuCiAgICAgICAgICAgICAgVGhlIGZvcmVncm91bmQgZHJhd2FibGUgcGFydGljaXBhdGVzIGluIHRoZSBwYWRkaW5nIG9mIHRoZSBjb250ZW50IGlmIHRoZSBncmF2aXR5CkBAIC0zOTU4LDYgKzQwMTYsMzAgQEAKICAgICA8ZGVjbGFyZS1zdHlsZWFibGUgbmFtZT0iVGltZVBpY2tlciI+CiAgICAgICAgIDwhLS0gQGhpZGUgVGhlIGxheW91dCBvZiB0aGUgdGltZSBwaWNrZXIuIC0tPgogICAgICAgICA8YXR0ciBuYW1lPSJpbnRlcm5hbExheW91dCIgLz4KKyAgICAgICAgPCEtLSBAaGlkZSBUaGUgbGF5b3V0IG9mIHRoZSBsZWdhY3kgdGltZSBwaWNrZXIuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJsZWdhY3lMYXlvdXQiIGZvcm1hdD0icmVmZXJlbmNlIiAvPgorICAgICAgICA8IS0tIEBoaWRlIEVuYWJsZXMgb3IgZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBsZWdhY3kgbGF5b3V0IGZvciB0aGUgVGltZVBpY2tlci4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9ImxlZ2FjeU1vZGUiIGZvcm1hdD0iYm9vbGVhbiIgLz4KKyAgICAgICAgPCEtLSBAaGlkZSBUaGUgY29sb3Igd2hlbiB0aGUgbm9uIGxlZ2FjeSBUaW1lUGlja2VyIGlzIGRpc2FibGVkLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0iZGlzYWJsZWRDb2xvciIgZm9ybWF0PSJjb2xvcnxyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gQGhpZGUgVGhlIGNvbG9yIGZvciBzZWxlY3RlZCB0ZXh0IG9mIHRoZSBub24gbGVnYWN5IFRpbWVQaWNrZXIuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJoZWFkZXJTZWxlY3RlZFRleHRDb2xvciIgZm9ybWF0PSJjb2xvcnxyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gQGhpZGUgVGhlIGNvbG9yIGZvciB1bnNlbGVjdGVkIHRleHQgb2YgdGhlIG5vbiBsZWdhY3kgVGltZVBpY2tlci4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9ImhlYWRlclVuc2VsZWN0ZWRUZXh0Q29sb3IiIGZvcm1hdD0iY29sb3J8cmVmZXJlbmNlIiAvPgorICAgICAgICA8IS0tIEBoaWRlIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgaGVhZGVyIG9mIHRoZSBub24gbGVnYWN5IFRpbWVQaWNrZXIuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJoZWFkZXJCYWNrZ3JvdW5kQ29sb3IiIGZvcm1hdD0iY29sb3J8cmVmZXJlbmNlIiAvPgorICAgICAgICA8IS0tIEBoaWRlIFRoZSBjb2xvciBmb3IgdGhlIGhvdXJzL21pbnV0ZXMgbnVtYmVycyBvZiB0aGUgbm9uIGxlZ2FjeSBUaW1lUGlja2VyLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0ibnVtYmVyc1RleHRDb2xvciIgZm9ybWF0PSJjb2xvcnxyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gQGhpZGUgVGhlIGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBob3Vycy9taW51dGVzIG51bWJlcnMgb2YgdGhlIG5vbiBsZWdhY3kgVGltZVBpY2tlci4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9Im51bWJlcnNCYWNrZ3JvdW5kQ29sb3IiIGZvcm1hdD0iY29sb3J8cmVmZXJlbmNlIiAvPgorICAgICAgICA8IS0tIEBoaWRlIFRoZSBjb2xvciBmb3IgdGhlIEFNL1BNIHNlbGVjdG9ycyBvZiB0aGUgbm9uIGxlZ2FjeSBUaW1lUGlja2VyLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0iYW1QbVRleHRDb2xvciIgZm9ybWF0PSJjb2xvcnxyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gQGhpZGUgVGhlIGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBBTS9QTSBzZWxlY3RvcnMgb2YgdGhlIG5vbiBsZWdhY3kgVGltZVBpY2tlciB3aGVuIHVuc2VsZWN0ZWQuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJhbVBtVW5zZWxlY3RlZEJhY2tncm91bmRDb2xvciIgZm9ybWF0PSJjb2xvcnxyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gQGhpZGUgVGhlIGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBBTS9QTSBzZWxlY3RvcnMgb2YgdGhlIG5vbiBsZWdhY3kgVGltZVBpY2tlciB3aGVuIHNlbGVjdGVkLiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0iYW1QbVNlbGVjdGVkQmFja2dyb3VuZENvbG9yIiBmb3JtYXQ9ImNvbG9yfHJlZmVyZW5jZSIgLz4KKyAgICAgICAgPCEtLSBAaGlkZSBUaGUgY29sb3IgZm9yIHRoZSBob3Vycy9taW51dGVzIHNlbGVjdG9yIG9mIHRoZSBub24gbGVnYWN5IFRpbWVQaWNrZXIuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJudW1iZXJzU2VsZWN0b3JDb2xvciIgZm9ybWF0PSJjb2xvcnxyZWZlcmVuY2UiIC8+CiAgICAgPC9kZWNsYXJlLXN0eWxlYWJsZT4KIAogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTQxNTksNiArNDI0MSwxNCBAQAogICAgICAgICA8IS0tIEluZGljYXRlcyBpZiB0aGUgZHJhd2FibGUgbmVlZHMgdG8gYmUgbWlycm9yZWQgd2hlbiBpdHMgbGF5b3V0IGRpcmVjdGlvbiBpcwogICAgICAgICAgICAgIFJUTCAocmlnaHQtdG8tbGVmdCkuIC0tPgogICAgICAgICA8YXR0ciBuYW1lPSJhdXRvTWlycm9yZWQiIC8+CisgICAgICAgIDwhLS0gSW5kaWNhdGVzIGhvdyBsYXllciBwYWRkaW5nIHNob3VsZCBhZmZlY3QgdGhlIGJvdW5kcyBvZiBzdWJzZXF1ZW50IGxheWVycy4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG5lc3QuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJwYWRkaW5nTW9kZSI+CisgICAgICAgICAgICA8IS0tIE5lc3QgZWFjaCBsYXllciBpbnNpZGUgdGhlIHBhZGRpbmcgb2YgdGhlIHByZXZpb3VzIGxheWVyLiAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9Im5lc3QiIHZhbHVlPSIwIiAvPgorICAgICAgICAgICAgPCEtLSBTdGFjayBlYWNoIGxheWVyIGRpcmVjdGx5IGF0b3AgdGhlIHByZXZpb3VzIGxheWVyLiAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9InN0YWNrIiB2YWx1ZT0iMSIgLz4KKyAgICAgICAgPC9hdHRyPgogICAgIDwvZGVjbGFyZS1zdHlsZWFibGU+CiAKICAgICA8IS0tIERlc2NyaWJlcyBhbiBpdGVtIChvciBjaGlsZCkgb2YgYSBMYXllckRyYXdhYmxlLiAtLT4KQEAgLTQxNzQsNyArNDI2NCw3IEBACiAgICAgICAgIDwhLS0gRHJhd2FibGUgdXNlZCB0byByZW5kZXIgdGhlIGxheWVyLiAtLT4KICAgICAgICAgPGF0dHIgbmFtZT0iZHJhd2FibGUiIC8+CiAgICAgICAgIDwhLS0gSWRlbnRpZmllciBvZiB0aGUgbGF5ZXIuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIGxheWVyCi0gICAgICAgICAgICAgZnJvbSBhIGRyYXdiYWJsZSBjb250YWluZXIuIC0tPgorICAgICAgICAgICAgIGZyb20gYSBkcmF3YWJsZSBjb250YWluZXIuIC0tPgogICAgICAgICA8YXR0ciBuYW1lPSJpZCIgLz4KICAgICA8L2RlY2xhcmUtc3R5bGVhYmxlPgogCkBAIC00NjA1LDYgKzQ2OTUsMTQgQEAKICAgICAgICAgPGF0dHIgbmFtZT0iZnJvbVNjZW5lIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KICAgICAgICAgPCEtLSBUaGUgZGVzdGluYXRpb24gc2NlbmUgaW4gdGhpcyBzY2VuZSBjaGFuZ2UuIC0tPgogICAgICAgICA8YXR0ciBuYW1lPSJ0b1NjZW5lIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KKyAgICAgICAgPCEtLSBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYXRpbmcgc2NlbmUgaW4gdGhpcyBzY2VuZSBjaGFuZ2UuCisgICAgICAgICAgICAgQXBwcyBzaG91bGQgdHJlYXQgdGhpcyBuYW1lIGFzIGFuIEFQSSBpbiB0aGUgc2FtZSBzZW5zZQorICAgICAgICAgICAgIHRoYXQgYW4gSW50ZW50IGFjdGlvbiBvciBleHRyYSBrZXkgaXMuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJmcm9tU2NlbmVOYW1lIiBmb3JtYXQ9InN0cmluZyIgLz4KKyAgICAgICAgPCEtLSBUaGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gc2NlbmUgaW4gdGhpcyBzY2VuZSBjaGFuZ2UuCisgICAgICAgICAgICAgQXBwcyBzaG91bGQgdHJlYXQgdGhpcyBuYW1lIGFzIGFuIEFQSSBpbiB0aGUgc2FtZSBzZW5zZQorICAgICAgICAgICAgIHRoYXQgYW4gSW50ZW50IGFjdGlvbiBvciBleHRyYSBrZXkgaXMuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJ0b1NjZW5lTmFtZSIgZm9ybWF0PSJzdHJpbmciIC8+CiAgICAgPC9kZWNsYXJlLXN0eWxlYWJsZT4KIAogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2NvbG9ycy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2NvbG9ycy54bWwKaW5kZXggMjhlN2FmNy4uNTViYWJmYSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9jb2xvcnMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvY29sb3JzLnhtbApAQCAtMjIsOCArMjIsNiBAQAogICAgIDxkcmF3YWJsZSBuYW1lPSJzY3JlZW5fYmFja2dyb3VuZF9kYXJrIj4jZmYwMDAwMDA8L2RyYXdhYmxlPgogICAgIDxkcmF3YWJsZSBuYW1lPSJzdGF0dXNfYmFyX2Nsb3NlZF9kZWZhdWx0X2JhY2tncm91bmQiPiNmZjAwMDAwMDwvZHJhd2FibGU+CiAgICAgPGRyYXdhYmxlIG5hbWU9InN0YXR1c19iYXJfb3BlbmVkX2RlZmF1bHRfYmFja2dyb3VuZCI+I2ZmMDAwMDAwPC9kcmF3YWJsZT4KLSAgICA8ZHJhd2FibGUgbmFtZT0ibm90aWZpY2F0aW9uX2l0ZW1fYmFja2dyb3VuZF9jb2xvciI+I2ZmMTExMTExPC9kcmF3YWJsZT4KLSAgICA8ZHJhd2FibGUgbmFtZT0ibm90aWZpY2F0aW9uX2l0ZW1fYmFja2dyb3VuZF9jb2xvcl9wcmVzc2VkIj4jZmY0NTQ1NDU8L2RyYXdhYmxlPgogICAgIDxkcmF3YWJsZSBuYW1lPSJzZWFyY2hfYmFyX2RlZmF1bHRfY29sb3IiPiNmZjAwMDAwMDwvZHJhd2FibGU+CiAgICAgPGRyYXdhYmxlIG5hbWU9InNhZmVfbW9kZV9iYWNrZ3JvdW5kIj4jNjAwMDAwMDA8L2RyYXdhYmxlPgogICAgIDwhLS0gQmFja2dyb3VuZCBkcmF3YWJsZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBhIHRyYW5zcGFyZW50IGFjdGl2aXR5IHRvCkBAIC0yMDIsNSArMjAwLDIyIEBACiAgICAgPGNvbG9yIG5hbWU9ImtleWd1YXJkX2F2YXRhcl9mcmFtZV9wcmVzc2VkX2NvbG9yIj4jZmYzNWI1ZTU8L2NvbG9yPgogCiAgICAgPGNvbG9yIG5hbWU9ImFjY2Vzc2liaWxpdHlfZm9jdXNfaGlnaGxpZ2h0Ij4jODBmZmZmMDA8L2NvbG9yPgorCisgICAgPCEtLSBOZXcgVGltZVBpY2tlciBjb2xvcnMgLS0+CisgICAgPGNvbG9yIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF9iYWNrZ3JvdW5kX2hvbG9fbGlnaHQiPkBhbmRyb2lkOmNvbG9yL3doaXRlPC9jb2xvcj4KKyAgICA8Y29sb3IgbmFtZT0idGltZXBpY2tlcl9kZWZhdWx0X2JhY2tncm91bmRfaG9sb19kYXJrIj4jZmYzMDMwMzA8L2NvbG9yPgorCisgICAgPGNvbG9yIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fbGlnaHQiPiM4YzhjOGM8L2NvbG9yPgorICAgIDxjb2xvciBuYW1lPSJ0aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2RhcmsiPkBhbmRyb2lkOmNvbG9yL3doaXRlPC9jb2xvcj4KKworICAgIDxjb2xvciBuYW1lPSJ0aW1lcGlja2VyX2RlZmF1bHRfZGlzYWJsZWRfY29sb3JfaG9sb19saWdodCI+IzdmMDAwMDAwPC9jb2xvcj4KKyAgICA8Y29sb3IgbmFtZT0idGltZXBpY2tlcl9kZWZhdWx0X2Rpc2FibGVkX2NvbG9yX2hvbG9fZGFyayI+IzdmMDhjOGM4PC9jb2xvcj4KKworICAgIDxjb2xvciBuYW1lPSJ0aW1lcGlja2VyX2RlZmF1bHRfYW1wbV9zZWxlY3RlZF9iYWNrZ3JvdW5kX2NvbG9yX2hvbG9fbGlnaHQiPkBhbmRyb2lkOmNvbG9yL2hvbG9fYmx1ZV9saWdodDwvY29sb3I+CisgICAgPGNvbG9yIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF9hbXBtX3NlbGVjdGVkX2JhY2tncm91bmRfY29sb3JfaG9sb19kYXJrIj5AYW5kcm9pZDpjb2xvci9ob2xvX2JsdWVfbGlnaHQ8L2NvbG9yPgorCisgICAgPGNvbG9yIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF9hbXBtX3Vuc2VsZWN0ZWRfYmFja2dyb3VuZF9jb2xvcl9ob2xvX2xpZ2h0Ij5AYW5kcm9pZDpjb2xvci93aGl0ZTwvY29sb3I+CisgICAgPGNvbG9yIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF9hbXBtX3Vuc2VsZWN0ZWRfYmFja2dyb3VuZF9jb2xvcl9ob2xvX2RhcmsiPkBhbmRyb2lkOmNvbG9yL3RyYW5zcGFyZW50PC9jb2xvcj4KKwogPC9yZXNvdXJjZXM+CiAKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvY29uZmlnLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvY29uZmlnLnhtbAppbmRleCBiMzRjNzkyLi5iMWIxZjQyIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2NvbmZpZy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9jb25maWcueG1sCkBAIC01MDgsNiArNTA4LDEyIEBACiAgICAgICAgIDxpdGVtPjQwPC9pdGVtPgogICAgIDwvaW50ZWdlci1hcnJheT4KIAorICAgIDwhLS0gVmlicmF0b3IgcGF0dGVybiBmb3IgZmVlZGJhY2sgd2hlbiBzZWxlY3RpbmcgYW4gaG91ci9taW51dGUgdGljayBvZiBhIENsb2NrIC0tPgorICAgIDxpbnRlZ2VyLWFycmF5IG5hbWU9ImNvbmZpZ19jbG9ja1RpY2tWaWJlUGF0dGVybiI+CisgICAgICAgIDxpdGVtPjEyNTwvaXRlbT4KKyAgICAgICAgPGl0ZW0+NTwvaXRlbT4KKyAgICA8L2ludGVnZXItYXJyYXk+CisKICAgICA8IS0tIFZpYnJhdG9yIHBhdHRlcm4gZm9yIGZlZWRiYWNrIGFib3V0IGJvb3Rpbmcgd2l0aCBzYWZlIG1vZGUgZGlzYWJsZWQgLS0+CiAgICAgPGludGVnZXItYXJyYXkgbmFtZT0iY29uZmlnX3NhZmVNb2RlRGlzYWJsZWRWaWJlUGF0dGVybiI+CiAgICAgICAgIDxpdGVtPjA8L2l0ZW0+CkBAIC0xMzA0LDQgKzEzMTAsMTIgQEAKICAgICAgICAgPGl0ZW0+MzMzPC9pdGVtPgogICAgICAgICA8aXRlbT4zNTM8L2l0ZW0+CiAgICAgPC9zdHJpbmctYXJyYXk+CisKKyAgICA8IS0tIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGRldGVjdGlvbiBiZWhhdmlvciBmb3IgdGhlIGZyYW1ld29yayBtZXRob2QKKyAgICAgICAgIGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbiNoYXNQZXJtYW5lbnRNZW51S2V5KCkuCisgICAgICAgICBWYWxpZCBzZXR0aW5ncyBhcmU6CisgICAgICAgICAwIC0gTm8gY2hhbmdlLiBVc2UgdGhlIGRlZmF1bHQgYXV0b2RldGVjdGlvbiBiZWhhdmlvci4KKyAgICAgICAgIDEgLSBUaGUgZGV2aWNlIERPRVMgaGF2ZSBhIHBlcm1hbmVudCBtZW51IGtleTsgaWdub3JlIGF1dG9kZXRlY3Rpb24uCisgICAgICAgICAyIC0gVGhlIGRldmljZSBET0VTIE5PVCBoYXZlIGEgcGVybWFuZW50IG1lbnUga2V5OyBpZ25vcmUgYXV0b2RldGVjdGlvbi4gLS0+CisgICAgPGludGVnZXIgbmFtZT0iY29uZmlnX292ZXJyaWRlSGFzUGVybWFuZW50TWVudUtleSI+MDwvaW50ZWdlcj4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9kaW1lbnMueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9kaW1lbnMueG1sCmluZGV4IGY5NjE5NWMuLjhjOGMzMjIgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvZGltZW5zLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2RpbWVucy54bWwKQEAgLTUwLDE2ICs1MCw2IEBACiAgICAgPCEtLSBNYXJnaW4gYXQgdGhlIGVkZ2Ugb2YgdGhlIHNjcmVlbiB0byBpZ25vcmUgdG91Y2ggZXZlbnRzIGZvciBpbiB0aGUgd2luZG93c2hhZGUuIC0tPgogICAgIDxkaW1lbiBuYW1lPSJzdGF0dXNfYmFyX2VkZ2VfaWdub3JlIj41ZHA8L2RpbWVuPgogCi0gICAgPCEtLSBNaW5pbXVtIHNpemUgb2YgdGhlIGZhc3RzY3JvbGwgb3ZlcmxheSAtLT4KLSAgICA8ZGltZW4gbmFtZT0iZmFzdHNjcm9sbF9vdmVybGF5X3NpemUiPjEwNGRwPC9kaW1lbj4KLSAgICA8IS0tIFRleHQgc2l6ZSBvZiB0aGUgZmFzdHNjcm9sbCBvdmVybGF5IC0tPgotICAgIDxkaW1lbiBuYW1lPSJmYXN0c2Nyb2xsX292ZXJsYXlfdGV4dF9zaXplIj41MnNwPC9kaW1lbj4KLSAgICA8IS0tIFBhZGRpbmcgb2YgdGhlIGZhc3RzY3JvbGwgb3ZlcmxheSAtLT4KLSAgICA8ZGltZW4gbmFtZT0iZmFzdHNjcm9sbF9vdmVybGF5X3BhZGRpbmciPjE2ZHA8L2RpbWVuPgotICAgIDwhLS0gV2lkdGggb2YgdGhlIGZhc3RzY3JvbGwgdGh1bWIgLS0+Ci0gICAgPGRpbWVuIG5hbWU9ImZhc3RzY3JvbGxfdGh1bWJfd2lkdGgiPjY0ZHA8L2RpbWVuPgotICAgIDwhLS0gSGVpZ2h0IG9mIHRoZSBmYXN0c2Nyb2xsIHRodW1iIC0tPgotICAgIDxkaW1lbiBuYW1lPSJmYXN0c2Nyb2xsX3RodW1iX2hlaWdodCI+NTJkcDwvZGltZW4+CiAgICAgPCEtLSBNaW4gd2lkdGggZm9yIGEgdGFibGV0IGRldmljZSAtLT4KICAgICA8ZGltZW4gbmFtZT0ibWluX3hsYXJnZV9zY3JlZW5fd2lkdGgiPjgwMGRwPC9kaW1lbj4KIApAQCAtNzcsMTggKzY3LDYgQEAKICAgICA8IS0tIFNpemUgb2YgbG9ja3NjcmVlbiBvdXRlcnJpbmcgb24gdW5zZWN1cmUgdW5sb2NrIExvY2tTY3JlZW4gLS0+CiAgICAgPGRpbWVuIG5hbWU9ImtleWd1YXJkX2xvY2tzY3JlZW5fb3V0ZXJyaW5nX2RpYW1ldGVyIj4yNzBkcDwvZGltZW4+CiAKLSAgICA8IS0tIERlZmF1bHQgdGFyZ2V0IHBsYWNlbWVudCByYWRpdXMgZm9yIEdsb3dQYWRWaWV3LiBTaG91bGQgYmUgMS8yIG9mIG91dGVycmluZyBkaWFtZXRlci4gLS0+Ci0gICAgPGRpbWVuIG5hbWU9Imdsb3dwYWR2aWV3X3RhcmdldF9wbGFjZW1lbnRfcmFkaXVzIj4xMzVkaXA8L2RpbWVuPgotCi0gICAgPCEtLSBEZWZhdWx0IGdsb3cgcmFkaXVzIGZvciBHbG93UGFkVmlldyAtLT4KLSAgICA8ZGltZW4gbmFtZT0iZ2xvd3BhZHZpZXdfZ2xvd19yYWRpdXMiPjc1ZGlwPC9kaW1lbj4KLQotICAgIDwhLS0gRGVmYXVsdCBkaXN0YW5jZSBiZXlvbmQgd2hpY2ggR2xvd1BhZFZpZXcgc25hcHMgdG8gdGhlIG1hdGNoaW5nIHRhcmdldCAtLT4KLSAgICA8ZGltZW4gbmFtZT0iZ2xvd3BhZHZpZXdfc25hcF9tYXJnaW4iPjQwZGlwPC9kaW1lbj4KLQotICAgIDwhLS0gRGVmYXVsdCBkaXN0YW5jZSBmcm9tIGVhY2ggc25hcCB0YXJnZXQgdGhhdCBHbG93UGFkVmlldyBjb25zaWRlcnMgYSAiaGl0IiAtLT4KLSAgICA8ZGltZW4gbmFtZT0iZ2xvd3BhZHZpZXdfaW5uZXJfcmFkaXVzIj4xNWRpcDwvZGltZW4+Ci0KICAgICA8IS0tIFByZWZlcmVuY2UgYWN0aXZpdHkgc2lkZSBtYXJnaW5zIC0tPgogICAgIDxkaW1lbiBuYW1lPSJwcmVmZXJlbmNlX3NjcmVlbl9zaWRlX21hcmdpbiI+MGRwPC9kaW1lbj4KICAgICA8IS0tIFByZWZlcmVuY2UgYWN0aXZpdHkgc2lkZSBtYXJnaW5zIG5lZ2F0aXZlLS0+CkBAIC0zNTYsNiArMzM0LDMyIEBACiAgICAgPCEtLSBPdXRsaW5lIHdpZHRoIGZvciB2aWRlbyBzdWJ0aXRsZXMuIC0tPgogICAgIDxkaW1lbiBuYW1lPSJzdWJ0aXRsZV9vdXRsaW5lX3dpZHRoIj4yZHA8L2RpbWVuPgogCisgICAgPCEtLSBOZXcgVGltZVBpY2tlciBkaW1lbnNpb25zLiAtLT4KKyAgICA8aXRlbSBuYW1lPSJ0aW1lcGlja2VyX2NpcmNsZV9yYWRpdXNfbXVsdGlwbGllciIgZm9ybWF0PSJmbG9hdCIgdHlwZT0ic3RyaW5nIj4wLjgyPC9pdGVtPgorICAgIDxpdGVtIG5hbWU9InRpbWVwaWNrZXJfY2lyY2xlX3JhZGl1c19tdWx0aXBsaWVyXzI0SG91ck1vZGUiIGZvcm1hdD0iZmxvYXQiIHR5cGU9InN0cmluZyI+MC44NTwvaXRlbT4KKyAgICA8aXRlbSBuYW1lPSJ0aW1lcGlja2VyX3NlbGVjdGlvbl9yYWRpdXNfbXVsdGlwbGllciIgZm9ybWF0PSJmbG9hdCIgdHlwZT0ic3RyaW5nIj4wLjE2PC9pdGVtPgorICAgIDxpdGVtIG5hbWU9InRpbWVwaWNrZXJfYW1wbV9jaXJjbGVfcmFkaXVzX211bHRpcGxpZXIiIGZvcm1hdD0iZmxvYXQiIHR5cGU9InN0cmluZyI+MC4xOTwvaXRlbT4KKyAgICA8aXRlbSBuYW1lPSJ0aW1lcGlja2VyX251bWJlcnNfcmFkaXVzX211bHRpcGxpZXJfbm9ybWFsIiBmb3JtYXQ9ImZsb2F0IiB0eXBlPSJzdHJpbmciPjAuODE8L2l0ZW0+CisgICAgPGl0ZW0gbmFtZT0idGltZXBpY2tlcl9udW1iZXJzX3JhZGl1c19tdWx0aXBsaWVyX2lubmVyIiBmb3JtYXQ9ImZsb2F0IiB0eXBlPSJzdHJpbmciPjAuNjA8L2l0ZW0+CisgICAgPGl0ZW0gbmFtZT0idGltZXBpY2tlcl9udW1iZXJzX3JhZGl1c19tdWx0aXBsaWVyX291dGVyIiBmb3JtYXQ9ImZsb2F0IiB0eXBlPSJzdHJpbmciPjAuODM8L2l0ZW0+CisgICAgPGl0ZW0gbmFtZT0idGltZXBpY2tlcl90ZXh0X3NpemVfbXVsdGlwbGllcl9ub3JtYWwiIGZvcm1hdD0iZmxvYXQiIHR5cGU9InN0cmluZyI+MC4xNzwvaXRlbT4KKyAgICA8aXRlbSBuYW1lPSJ0aW1lcGlja2VyX3RleHRfc2l6ZV9tdWx0aXBsaWVyX2lubmVyIiBmb3JtYXQ9ImZsb2F0IiB0eXBlPSJzdHJpbmciPjAuMTQ8L2l0ZW0+CisgICAgPGl0ZW0gbmFtZT0idGltZXBpY2tlcl90ZXh0X3NpemVfbXVsdGlwbGllcl9vdXRlciIgZm9ybWF0PSJmbG9hdCIgdHlwZT0ic3RyaW5nIj4wLjExPC9pdGVtPgorICAgIDxpdGVtIG5hbWU9InRpbWVwaWNrZXJfdHJhbnNpdGlvbl9taWRfcmFkaXVzX211bHRpcGxpZXIiIGZvcm1hdD0iZmxvYXQiIHR5cGU9InN0cmluZyI+MC45NTwvaXRlbT4KKyAgICA8aXRlbSBuYW1lPSJ0aW1lcGlja2VyX3RyYW5zaXRpb25fZW5kX3JhZGl1c19tdWx0aXBsaWVyIiBmb3JtYXQ9ImZsb2F0IiB0eXBlPSJzdHJpbmciPjEuMzwvaXRlbT4KKworICAgIDxkaW1lbiBuYW1lPSJ0aW1lcGlja2VyX3RpbWVfbGFiZWxfc2l6ZSI+NjBzcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9InRpbWVwaWNrZXJfZXh0cmFfdGltZV9sYWJlbF9tYXJnaW4iPi0zMGRwPC9kaW1lbj4KKyAgICA8ZGltZW4gbmFtZT0idGltZXBpY2tlcl9hbXBtX2xhYmVsX3NpemUiPjE2c3A8L2RpbWVuPgorICAgIDxkaW1lbiBuYW1lPSJ0aW1lcGlja2VyX2RvbmVfbGFiZWxfc2l6ZSI+MTRzcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9InRpbWVwaWNrZXJfYW1wbV9sZWZ0X3BhZGRpbmciPjZkaXA8L2RpbWVuPgorICAgIDxkaW1lbiBuYW1lPSJ0aW1lcGlja2VyX3NlcGFyYXRvcl9wYWRkaW5nIj40ZGlwPC9kaW1lbj4KKyAgICA8ZGltZW4gbmFtZT0idGltZXBpY2tlcl9oZWFkZXJfaGVpZ2h0Ij45NmRpcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9InRpbWVwaWNrZXJfbWluaW11bV9tYXJnaW5fc2lkZXMiPjQ4ZGlwPC9kaW1lbj4KKyAgICA8ZGltZW4gbmFtZT0idGltZXBpY2tlcl9taW5pbXVtX21hcmdpbl90b3BfYm90dG9tIj4yNGRpcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9InRpbWVwaWNrZXJfcmFkaWFsX3BpY2tlcl9kaW1lbiI+MjcwZGlwPC9kaW1lbj4KKwogICAgIDwhLS0gd2lkdGggb2YgSW1tZXJzaXZlTW9kZUNvbmZpcm1hdGlvbiAoLTEgZm9yIG1hdGNoX3BhcmVudCkgLS0+CiAgICAgPGRpbWVuIG5hbWU9ImltbWVyc2l2ZV9tb2RlX2NsaW5nX3dpZHRoIj4tMXB4PC9kaW1lbj4KKwogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3B1YmxpYy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3B1YmxpYy54bWwKaW5kZXggODE4NzkzOS4uMDkwNzAyZCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9wdWJsaWMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvcHVibGljLnhtbApAQCAtMjA4Nyw0ICsyMDg3LDI2IEBACiAgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLkRldmljZURlZmF1bHQuTm9BY3Rpb25CYXIuVHJhbnNsdWNlbnREZWNvciIgaWQ9IjB4MDEwMzAxZTMiIC8+CiAgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLkRldmljZURlZmF1bHQuTGlnaHQuTm9BY3Rpb25CYXIuVHJhbnNsdWNlbnREZWNvciIgaWQ9IjB4MDEwMzAxZTQiIC8+CiAKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIFJlc291cmNlcyBhZGRlZCBpbiB2ZXJzaW9uIDIwIG9mIHRoZSBwbGF0Zm9ybQorICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisgIDxlYXQtY29tbWVudCAvPgorCisgIDxwdWJsaWMgdHlwZT0iYXR0ciIgbmFtZT0iZnJhZ21lbnRCcmVhZENydW1ic1N0eWxlIiAvPgorICA8cHVibGljIHR5cGU9ImF0dHIiIG5hbWU9ImZhc3RTY3JvbGxTdHlsZSIgLz4KKyAgPHB1YmxpYyB0eXBlPSJhdHRyIiBuYW1lPSJ3aW5kb3dDb250ZW50VHJhbnNpdGlvbnMiIC8+CisgIDxwdWJsaWMgdHlwZT0iYXR0ciIgbmFtZT0id2luZG93Q29udGVudFRyYW5zaXRpb25NYW5hZ2VyIiAvPgorCisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5Ib2xvLkZyYWdtZW50QnJlYWRDcnVtYnMiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5Ib2xvLkxpZ2h0LkZyYWdtZW50QnJlYWRDcnVtYnMiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5EZXZpY2VEZWZhdWx0LkZyYWdtZW50QnJlYWRDcnVtYnMiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5EZXZpY2VEZWZhdWx0LkxpZ2h0LkZyYWdtZW50QnJlYWRDcnVtYnMiIC8+CisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IldpZGdldC5GYXN0U2Nyb2xsIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuSG9sby5GYXN0U2Nyb2xsIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuSG9sby5MaWdodC5GYXN0U2Nyb2xsIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuRGV2aWNlRGVmYXVsdC5GYXN0U2Nyb2xsIiAvPgorICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuRGV2aWNlRGVmYXVsdC5MaWdodC5GYXN0U2Nyb2xsIiAvPgorCisgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLlF1YW50dW0iIC8+CisKIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKaW5kZXggOTAyNTQwMGEuLjlhODUwYjEgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApAQCAtOTMyLDEzICs5MzIsMTMgQEAKICAgICA8IS0tIFtDSEFSIExJTUlUPU5PTkVdIERlc2NyaXB0aW9uIG9mIGFuIGFwcGxpY2F0aW9uIHBlcm1pc3Npb24sIGxpc3RlZCBzbyB0aGUgdXNlciBjYW4gY2hvb3NlIHdoZXRoZXIgdGhleSB3YW50IHRvIGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkbyB0aGlzLiAtLT4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFwcE9wc1N0YXRzIj5BbGxvd3MgdGhlIGFwcCB0byByZXRyaWV2ZQogICAgICAgICBjb2xsZWN0ZWQgYXBwbGljYXRpb24gb3BlcmF0aW9uIHN0YXRpc3RpY3MuIE5vdCBmb3IgdXNlIGJ5IG5vcm1hbCBhcHBzLjwvc3RyaW5nPgotICAgIAorCiAgICAgPCEtLSBbQ0hBUiBMSU1JVD1OT05FXSBUaXRsZSBvZiBhbiBhcHBsaWNhdGlvbiBwZXJtaXNzaW9uLCBsaXN0ZWQgc28gdGhlIHVzZXIgY2FuIGNob29zZSB3aGV0aGVyIHRoZXkgd2FudCB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gZG8gdGhpcy4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VwZGF0ZUFwcE9wc1N0YXRzIj5tb2RpZnkgYXBwIG9wcyBzdGF0aXN0aWNzPC9zdHJpbmc+CiAgICAgPCEtLSBbQ0hBUiBMSU1JVD1OT05FXSBEZXNjcmlwdGlvbiBvZiBhbiBhcHBsaWNhdGlvbiBwZXJtaXNzaW9uLCBsaXN0ZWQgc28gdGhlIHVzZXIgY2FuIGNob29zZSB3aGV0aGVyIHRoZXkgd2FudCB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gZG8gdGhpcy4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191cGRhdGVBcHBPcHNTdGF0cyI+QWxsb3dzIHRoZSBhcHAgdG8gbW9kaWZ5CiAgICAgICAgIGNvbGxlY3RlZCBhcHBsaWNhdGlvbiBvcGVyYXRpb24gc3RhdGlzdGljcy4gTm90IGZvciB1c2UgYnkgbm9ybWFsIGFwcHMuPC9zdHJpbmc+Ci0gICAgCisKICAgICA8IS0tIFRpdGxlIG9mIGFuIGFwcGxpY2F0aW9uIHBlcm1pc3Npb24sIGxpc3RlZCBzbyB0aGUgdXNlciBjYW4gY2hvb3NlIHdoZXRoZXIgdGhleSB3YW50IHRvIGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkbyB0aGlzLiAtLT4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmFja3VwIj5jb250cm9sIHN5c3RlbSBiYWNrdXAgYW5kIHJlc3RvcmU8L3N0cmluZz4KICAgICA8IS0tIERlc2NyaXB0aW9uIG9mIGFuIGFwcGxpY2F0aW9uIHBlcm1pc3Npb24sIGxpc3RlZCBzbyB0aGUgdXNlciBjYW4gY2hvb3NlIHdoZXRoZXIgdGhleSB3YW50IHRvIGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkbyB0aGlzLiAtLT4KQEAgLTE0MzEsNiArMTQzMSwxMSBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEZyYW1lQnVmZmVyIj5BbGxvd3MgdGhlIGFwcCB0byByZWFkIHRoZSBjb250ZW50IG9mIHRoZSBmcmFtZSBidWZmZXIuPC9zdHJpbmc+CiAKICAgICA8IS0tIFRpdGxlIG9mIGFuIGFwcGxpY2F0aW9uIHBlcm1pc3Npb24sIGxpc3RlZCBzbyB0aGUgdXNlciBjYW4gY2hvb3NlIHdoZXRoZXIgdGhleSB3YW50IHRvIGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBkbyB0aGlzLiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW5wdXRGbGluZ2VyIj5hY2Nlc3MgSW5wdXRGbGluZ2VyPC9zdHJpbmc+CisgICAgPCEtLSBEZXNjcmlwdGlvbiBvZiBhbiBhcHBsaWNhdGlvbiBwZXJtaXNzaW9uLCBsaXN0ZWQgc28gdGhlIHVzZXIgY2FuIGNob29zZSB3aGV0aGVyIHRoZXkgd2FudCB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gZG8gdGhpcy4gLS0+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NJbnB1dEZsaW5nZXIiPkFsbG93cyB0aGUgYXBwIHRvIHVzZSBJbnB1dEZsaW5nZXIgbG93LWxldmVsIGZlYXR1cmVzLjwvc3RyaW5nPgorCisgICAgPCEtLSBUaXRsZSBvZiBhbiBhcHBsaWNhdGlvbiBwZXJtaXNzaW9uLCBsaXN0ZWQgc28gdGhlIHVzZXIgY2FuIGNob29zZSB3aGV0aGVyIHRoZXkgd2FudCB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gZG8gdGhpcy4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NvbmZpZ3VyZVdpZmlEaXNwbGF5Ij5jb25maWd1cmUgV2lmaSBkaXNwbGF5czwvc3RyaW5nPgogICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgYW4gYXBwbGljYXRpb24gcGVybWlzc2lvbiwgbGlzdGVkIHNvIHRoZSB1c2VyIGNhbiBjaG9vc2Ugd2hldGhlciB0aGV5IHdhbnQgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGRvIHRoaXMuIC0tPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY29uZmlndXJlV2lmaURpc3BsYXkiPkFsbG93cyB0aGUgYXBwIHRvIGNvbmZpZ3VyZSBhbmQgY29ubmVjdCB0byBXaWZpIGRpc3BsYXlzLjwvc3RyaW5nPgpAQCAtMjI0Nyw2ICsyMjUyLDEwIEBACiAgICAgPCEtLSBPdGhlciBTSVAgYWRkcmVzcyB0eXBlLiBTYW1lIGNvbnRleHQgYXMgT3RoZXIgcGhvbmUgdHlwZS4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIj5PdGhlcjwvc3RyaW5nPgogCisgICAgPCEtLSBFcnJvciBtZXNzYWdlIHRoYXQgaXMgZGlzcGxheWVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIGEgcXVpY2sgY29udGFjdHMgYmFkZ2UsIGJ1dAorICAgICAgICAgdGhlcmUgaXMgbm8gY29udGFjdHMgYXBwbGljYXRpb24gaW5zdGFsbGVkIHRoYXQgY2FuIGRpc3BsYXkgdGhlIHF1aWNrIGNvbnRhY3QgLS0+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19jb250YWN0c19ub3RfYXZhaWxhYmxlIj5ObyBhcHBsaWNhdGlvbiBmb3VuZCB0byB2aWV3IHRoaXMgY29udGFjdC48L3N0cmluZz4KKwogICAgIDwhLS0gSW5zdHJ1Y3Rpb25zIHRlbGxpbmcgdGhlIHVzZXIgdG8gZW50ZXIgdGhlaXIgU0lNIFBJTiB0byB1bmxvY2sgdGhlIGtleWd1YXJkLgogICAgICAgICAgRGlzcGxheWVkIGluIG9uZSBsaW5lIGluIGEgbGFyZ2UgZm9udC4gIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiPlR5cGUgUElOIGNvZGU8L3N0cmluZz4KQEAgLTM5MjEsMjYgKzM5MzAsNiBAQAogICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgdGhlIHNsaWRpbmcgaGFuZGxlIGluIHRoZSBTbGlkZSB1bmxvY2sgc2NyZWVuLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiPiJTbGlkaW5nIGhhbmRsZS4gVG91Y2ggJmFtcDsgaG9sZC4iPC9zdHJpbmc+CiAKLSAgICA8IS0tIERlc2NyaXB0aW9uIG9mIHRoZSB1cCBkaXJlY3Rpb24gaW4gd2hpY2ggb25lIGNhbiB0byBzbGlkZSB0aGUgaGFuZGxlIGluIHRoZSBTbGlkZSB1bmxvY2sgc2NyZWVuLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCI+U2xpZGUgdXAgZm9yIDx4bGlmZjpnIGlkPSJ0YXJnZXRfZGVzY3JpcHRpb24iIGV4YW1wbGU9IlVubG9jayI+JXM8L3hsaWZmOmc+Ljwvc3RyaW5nPgotICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgdGhlIGRvd24gZGlyZWN0aW9uIGluIHdoaWNoIG9uZSBjYW4gdG8gc2xpZGUgdGhlIGhhbmRsZSBpbiB0aGUgU2xpZGUgdW5sb2NrIHNjcmVlbi4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biI+U2xpZGUgZG93biBmb3IgPHhsaWZmOmcgaWQ9InRhcmdldF9kZXNjcmlwdGlvbiIgZXhhbXBsZT0iVW5sb2NrIj4lczwveGxpZmY6Zz4uPC9zdHJpbmc+Ci0gICAgPCEtLSBEZXNjcmlwdGlvbiBvZiB0aGUgbGVmdCBkaXJlY3Rpb24gaW4gd2hpY2ggb25lIGNhbiB0byBzbGlkZSB0aGUgaGFuZGxlIGluIHRoZSBTbGlkZSB1bmxvY2sgc2NyZWVuLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0Ij4iU2xpZGUgbGVmdCBmb3IgPHhsaWZmOmcgaWQ9InRhcmdldF9kZXNjcmlwdGlvbiIgZXhhbXBsZT0iVW5sb2NrIj4lczwveGxpZmY6Zz4uPC9zdHJpbmc+Ci0gICAgPCEtLSBEZXNjcmlwdGlvbiBvZiB0aGUgcmlnaHQgZGlyZWN0aW9uIGluIHdoaWNoIG9uZSBjYW4gdG8gc2xpZGUgdGhlIGhhbmRsZSBpbiB0aGUgU2xpZGUgdW5sb2NrIHNjcmVlbi4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiPlNsaWRlIHJpZ2h0IGZvciA8eGxpZmY6ZyBpZD0idGFyZ2V0X2Rlc2NyaXB0aW9uIiBleGFtcGxlPSJVbmxvY2siPiVzPC94bGlmZjpnPi48L3N0cmluZz4KLQotICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgdGhlIHVubG9jayB0YXJnZXQgaW4gdGhlIFNsaWRlIHVubG9jayBzY3JlZW4uIFtDSEFSIExJTUlUPU5PTkVdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayI+VW5sb2NrPC9zdHJpbmc+Ci0gICAgPCEtLSBEZXNjcmlwdGlvbiBvZiB0aGUgY2FtZXJhIHRhcmdldCBpbiB0aGUgU2xpZGUgdW5sb2NrIHNjcmVlbi4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIj5DYW1lcmE8L3N0cmluZz4KLSAgICA8IS0tIERlc2NyaXB0aW9uIG9mIHRoZSBzaWxlbnQgdGFyZ2V0IGluIHRoZSBTbGlkZSB1bmxvY2sgc2NyZWVuLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiPlNpbGVudDwvc3RyaW5nPgotICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgdGhlIHNvdW5kIG9uIHRhcmdldCBpbiB0aGUgU2xpZGUgdW5sb2NrIHNjcmVlbi4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiI+U291bmQgb248L3N0cmluZz4KLSAgICA8IS0tIERlc2NyaXB0aW9uIG9mIHRoZSB1bmxvY2sgdGFyZ2V0IGluIHRoZSBTbGlkZSB1bmxvY2sgc2NyZWVuLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giPlNlYXJjaDwvc3RyaW5nPgotCiAgICAgPCEtLSBEZXNjcmlwdGlvbiBvZiB0aGUgdW5sb2NrIGhhbmRsZSBpbiB0aGUgU2xpZGUgdW5sb2NrIHNjcmVlbiBmb3IgdGFibGV0cy4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrX3RhYmxldCI+U3dpcGUgdG8gdW5sb2NrLjwvc3RyaW5nPgogCkBAIC00NTIxLDQgKzQ1MTAsNTUgQEAKICAgICA8IS0tIENsaW5nIGhlbHAgbWVzc2FnZSB3aGVuIGhpZGluZyB0aGUgbmF2aWdhdGlvbiBiYXIgZW50ZXJpbmcgaW1tZXJzaXZlIG1vZGUgW0NIQVIgTElNSVQ9bm9uZV0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfbW9kZV9jb25maXJtYXRpb24iIG1zZ2lkPSI4NTU0OTkxNDg4MDk2NjYyNTA4Ij5Td2lwZSBkb3duIGZyb20gdGhlIHRvcCB0byBleGl0IGZ1bGwgc2NyZWVuLjwvc3RyaW5nPgogCisgICAgPCEtLSBMYWJlbCBmb3IgYnV0dG9uIHRvIGNvbmZpcm0gY2hvc2VuIGRhdGUgb3IgdGltZSBbQ0hBUiBMSU1JVD0zMF0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIj5Eb25lPC9zdHJpbmc+CisgICAgPCEtLQorICAgICAgICAgQ29udGVudCBkZXNjcmlwdGlvbiBmb3IgdGhlIGhvdXIgc2VsZWN0b3IgaW4gdGhlIHRpbWUgcGlja2VyLCB3aGljaCBkaXNwbGF5cworICAgICAgICAgc2VsZWN0YWJsZSBob3VycyBvZiB0aGUgZGF5IGFsb25nIHRoZSBpbnNpZGUgZWRnZSBvZiBhIGNpcmNsZSwgYXMgaW4gYW4gYW5hbG9nIGNsb2NrLgorICAgICAgICAgW0NIQVIgTElNSVQ9NTBdCisgICAgLS0+CisgICAgPHN0cmluZyBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiI+SG91cnMgY2lyY3VsYXIgc2xpZGVyPC9zdHJpbmc+CisgICAgPCEtLQorICAgICAgICAgQ29udGVudCBkZXNjcmlwdGlvbiBmb3IgdGhlIG1pbnV0ZSBzZWxlY3RvciBpbiB0aGUgdGltZSBwaWNrZXIsIHdoaWNoIGRpc3BsYXlzCisgICAgICAgICBzZWxlY3RhYmxlIGZpdmUtbWludXRlIGludGVydmFscyBhbG9uZyB0aGUgaW5zaWRlIGVkZ2Ugb2YgYSBjaXJjbGUsIGFzIGluIGFuIGFuYWxvZyBjbG9jay4KKyAgICAgICAgIFtDSEFSIExJTUlUPTUwXQorICAgIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiI+TWludXRlcyBjaXJjdWxhciBzbGlkZXI8L3N0cmluZz4KKyAgICA8IS0tIEFjY2Vzc2liaWxpdHkgYW5ub3VuY2VtZW50IGZvciBob3VyIGNpcmN1bGFyIHBpY2tlciBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9ob3VycyI+U2VsZWN0IGhvdXJzPC9zdHJpbmc+CisgICAgPCEtLSBBY2Nlc3NpYmlsaXR5IGFubm91bmNlbWVudCBmb3IgbWludXRlIGNpcmN1bGFyIHBpY2tlciBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9taW51dGVzIj5TZWxlY3QgbWludXRlczwvc3RyaW5nPgorCisgICAgPCEtLQorICAgICAgICBDb250ZW50IGRlc2NyaXB0aW9uIGZvciB0aGUgbW9udGggYW5kIGRheSBzZWxlY3RvciBpbiB0aGUgZGF0ZSBwaWNrZXIsIHdoaWNoIGRpc3BsYXlzCisgICAgICAgIGEgc2VsZWN0YWJsZSBncmlkIG9mIGRheXMgbGFpZCBvdXQgYnkgbW9udGguCisgICAgICAgIFtDSEFSIExJTUlUPTUwXQorICAgICAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImRheV9waWNrZXJfZGVzY3JpcHRpb24iPk1vbnRoIGdyaWQgb2YgZGF5czwvc3RyaW5nPgorICAgIDwhLS0KKyAgICAgICAgQ29udGVudCBkZXNjcmlwdGlvbiBmb3IgdGhlIHllYXIgc2VsZWN0b3IgaW4gdGhlIGRhdGUgcGlja2VyLCB3aGljaCBkaXNwbGF5cworICAgICAgICBhIHNjcm9sbGluZywgdmVydGljYWwgbGlzdCBvZiB5ZWFycy4KKyAgICAgICAgW0NIQVIgTElNSVQ9NTBdCisgICAgIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcl9waWNrZXJfZGVzY3JpcHRpb24iPlllYXIgbGlzdDwvc3RyaW5nPgorICAgIDwhLS0gQWNjZXNzaWJpbGl0eSBhbm5vdW5jZW1lbnQgZm9yIHRoZSBkYXkgcGlja2VyIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2RheSI+U2VsZWN0IG1vbnRoIGFuZCBkYXk8L3N0cmluZz4KKyAgICA8IS0tIEFjY2Vzc2liaWxpdHkgYW5ub3VuY2VtZW50IGZvciB0aGUgeWVhciBwaWNrZXIgW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfeWVhciI+U2VsZWN0IHllYXI8L3N0cmluZz4KKyAgICA8IS0tIEFjY2Vzc2liaWxpdHkgZGVzY3JpcHRpb24gZm9yIHRoZSBpdGVtIHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkLiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9Iml0ZW1faXNfc2VsZWN0ZWQiPjx4bGlmZjpnIGlkPSJpdGVtIiBleGFtcGxlPSIyMDEzIj4lMSRzPC94bGlmZjpnPiBzZWxlY3RlZDwvc3RyaW5nPgorICAgIDwhLS0gQWNjZXNzaWJpbGl0eSBhbm5vdW5jZW1lbnQgd2hlbiBhIG51bWJlciB0aGF0IGhhZCBiZWVuIHR5cGVkIGluIGlzIGRlbGV0ZWQgW0NIQVJfTElNSVQ9Tk9ORV0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGVkX2tleSI+PHhsaWZmOmcgaWQ9ImtleSIgZXhhbXBsZT0iNCI+JTEkczwveGxpZmY6Zz4gZGVsZXRlZDwvc3RyaW5nPgorCisgICAgPCEtLSBETyBOT1QgVFJBTlNMQVRFIC0tPgorICAgIDxzdHJpbmcgbmFtZT0idGltZV9wbGFjZWhvbGRlciI+LS08L3N0cmluZz4KKworICAgIDwhLS0gRE8gTk9UIFRSQU5TTEFURSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InJhZGlhbF9udW1iZXJzX3R5cGVmYWNlIj5zYW5zLXNlcmlmPC9zdHJpbmc+CisgICAgPCEtLSBETyBOT1QgVFJBTlNMQVRFIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ic2Fuc19zZXJpZiI+c2Fucy1zZXJpZjwvc3RyaW5nPgorCisgICAgPCEtLSBETyBOT1QgVFJBTlNMQVRFIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5X29mX3dlZWtfbGFiZWxfdHlwZWZhY2UiPnNhbnMtc2VyaWY8L3N0cmluZz4KKwogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0eWxlcy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0eWxlcy54bWwKaW5kZXggY2IyZmQ2ZC4uM2FmNWQ2ZCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzLnhtbApAQCAtMjkyLDYgKzI5Miw3IEBACiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5BYnNMaXN0VmlldyI+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c2Nyb2xsYmFycyI+dmVydGljYWw8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZmFkaW5nRWRnZSI+dmVydGljYWw8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZmFzdFNjcm9sbFN0eWxlIj4/YW5kcm9pZDphdHRyL2Zhc3RTY3JvbGxTdHlsZTwvaXRlbT4KICAgICA8L3N0eWxlPgogCiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5HZXN0dXJlT3ZlcmxheVZpZXciPgpAQCAtNTEwLDYgKzUxMSwxMSBAQAogICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmNoaWxkRGl2aWRlciI+QGFuZHJvaWQ6ZHJhd2FibGUvZGl2aWRlcl9ob3Jpem9udGFsX2JyaWdodF9vcGFxdWU8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAorICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuRnJhZ21lbnRCcmVhZENydW1icyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cGFkZGluZyI+NGRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFuaW1hdGVMYXlvdXRDaGFuZ2VzIj50cnVlPC9pdGVtPgorICAgIDwvc3R5bGU+CisKICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkltYWdlV2VsbCI+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUvcGFuZWxfcGljdHVyZV9mcmFtZV9iYWNrZ3JvdW5kPC9pdGVtPgogICAgIDwvc3R5bGU+CkBAIC01NDQsNyArNTUwLDcgQEAKICAgICA8L3N0eWxlPgogCiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5UaW1lUGlja2VyIj4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbnRlcm5hbExheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3RpbWVfcGlja2VyPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxlZ2FjeUxheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3RpbWVfcGlja2VyX2xlZ2FjeTwvaXRlbT4KICAgICA8L3N0eWxlPgogCiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5EYXRlUGlja2VyIj4KQEAgLTY4MSwxMiArNjg3LDYgQEAKICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwb3B1cEFuaW1hdGlvblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9BbmltYXRpb24uUG9wdXBXaW5kb3c8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAotICAgIDwhLS0gRGVmYXVsdCBzdHlsZSBmb3Ige0BsaW5rIGFuZHJvaWQuYXBwLkZyYWdtZW50QnJlYWRDcnVtYnN9IHZpZXcuIC0tPgotICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuRnJhZ21lbnRCcmVhZENydW1icyI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cGFkZGluZyI+NGRwPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFuaW1hdGVMYXlvdXRDaGFuZ2VzIj50cnVlPC9pdGVtPgotICAgIDwvc3R5bGU+Ci0KICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LktleWJvYXJkVmlldyIgcGFyZW50PSJhbmRyb2lkOldpZGdldCI+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZCI+QGFuZHJvaWQ6ZHJhd2FibGUva2V5Ym9hcmRfYmFja2dyb3VuZDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDprZXlCYWNrZ3JvdW5kIj5AYW5kcm9pZDpkcmF3YWJsZS9idG5fa2V5Ym9hcmRfa2V5PC9pdGVtPgpAQCAtMTY2Miw2ICsxNjYyLDkgQEAKICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkhvbG8uRXhwYW5kYWJsZUxpc3RWaWV3LldoaXRlIj4KICAgICA8L3N0eWxlPgogCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5Ib2xvLkZyYWdtZW50QnJlYWRDcnVtYnMiIHBhcmVudD0iV2lkZ2V0LkZyYWdtZW50QnJlYWRDcnVtYnMiPgorICAgIDwvc3R5bGU+CisKICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkhvbG8uR2FsbGVyeSIgcGFyZW50PSJXaWRnZXQuR2FsbGVyeSI+CiAgICAgPC9zdHlsZT4KIApAQCAtMTY5OCw3ICsxNzAxLDE4IEBACiAgICAgPC9zdHlsZT4KIAogICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuSG9sby5UaW1lUGlja2VyIiBwYXJlbnQ9IldpZGdldC5UaW1lUGlja2VyIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsZWdhY3lMYXlvdXQiPkBhbmRyb2lkOmxheW91dC90aW1lX3BpY2tlcl9sZWdhY3lfaG9sbzwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDppbnRlcm5hbExheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3RpbWVfcGlja2VyX2hvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6ZGlzYWJsZWRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X2Rpc2FibGVkX2NvbG9yX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpoZWFkZXJTZWxlY3RlZFRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvaG9sb19ibHVlX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmhlYWRlclVuc2VsZWN0ZWRUZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpoZWFkZXJCYWNrZ3JvdW5kQ29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF9iYWNrZ3JvdW5kX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpudW1iZXJzVGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2Rhcms8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bnVtYmVyc0JhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X2JhY2tncm91bmRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFtUG1UZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDphbVBtVW5zZWxlY3RlZEJhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X2JhY2tncm91bmRfaG9sb19kYXJrPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFtUG1TZWxlY3RlZEJhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvaG9sb19ibHVlX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm51bWJlcnNTZWxlY3RvckNvbG9yIj5AYW5kcm9pZDpjb2xvci9ob2xvX2JsdWVfbGlnaHQ8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAogICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuSG9sby5EYXRlUGlja2VyIiBwYXJlbnQ9IldpZGdldC5EYXRlUGlja2VyIj4KQEAgLTIwOTEsNiArMjEwNSw5IEBACiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5Ib2xvLkxpZ2h0LkV4cGFuZGFibGVMaXN0Vmlldy5XaGl0ZSI+CiAgICAgPC9zdHlsZT4KIAorICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuSG9sby5MaWdodC5GcmFnbWVudEJyZWFkQ3J1bWJzIiBwYXJlbnQ9IldpZGdldC5GcmFnbWVudEJyZWFkQ3J1bWJzIj4KKyAgICA8L3N0eWxlPgorCiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5Ib2xvLkxpZ2h0LkdhbGxlcnkiIHBhcmVudD0iV2lkZ2V0LkdhbGxlcnkiPgogICAgIDwvc3R5bGU+CiAKQEAgLTIxMTYsNyArMjEzMywxOSBAQAogICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuSG9sby5MaWdodC5OdW1iZXJQaWNrZXIiIHBhcmVudD0iV2lkZ2V0LkhvbG8uTnVtYmVyUGlja2VyIj4KICAgICA8L3N0eWxlPgogCi0gICAgPHN0eWxlIG5hbWU9IldpZGdldC5Ib2xvLkxpZ2h0LlRpbWVQaWNrZXIiIHBhcmVudD0iV2lkZ2V0LkhvbG8uVGltZVBpY2tlciI+CisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5Ib2xvLkxpZ2h0LlRpbWVQaWNrZXIiIHBhcmVudD0iV2lkZ2V0LlRpbWVQaWNrZXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxlZ2FjeUxheW91dCI+QGFuZHJvaWQ6bGF5b3V0L3RpbWVfcGlja2VyX2xlZ2FjeV9ob2xvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmludGVybmFsTGF5b3V0Ij5AYW5kcm9pZDpsYXlvdXQvdGltZV9waWNrZXJfaG9sbzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpkaXNhYmxlZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfZGlzYWJsZWRfY29sb3JfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpoZWFkZXJTZWxlY3RlZFRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvaG9sb19ibHVlX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmhlYWRlclVuc2VsZWN0ZWRUZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6aGVhZGVyQmFja2dyb3VuZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfYmFja2dyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm51bWJlcnNUZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fbGlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bnVtYmVyc0JhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X2JhY2tncm91bmRfaG9sb19saWdodDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDphbVBtVGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFtUG1VbnNlbGVjdGVkQmFja2dyb3VuZENvbG9yIj5AYW5kcm9pZDpjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfYmFja2dyb3VuZF9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmFtUG1TZWxlY3RlZEJhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvaG9sb19ibHVlX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm51bWJlcnNTZWxlY3RvckNvbG9yIj5AYW5kcm9pZDpjb2xvci9ob2xvX2JsdWVfbGlnaHQ8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAogICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuSG9sby5MaWdodC5EYXRlUGlja2VyIiBwYXJlbnQ9IldpZGdldC5Ib2xvLkRhdGVQaWNrZXIiPgpAQCAtMjM3OSw2ICsyNDA4LDE2IEBACiAgICAgPHN0eWxlIG5hbWU9IkFuaW1hdGlvbi5Ib2xvLkRpYWxvZyIgcGFyZW50PSJBbmltYXRpb24uRGlhbG9nIj4KICAgICA8L3N0eWxlPgogCisgICAgPHN0eWxlIG5hbWU9IkFuaW1hdGlvbi5RdWFudHVtIiBwYXJlbnQ9IkFuaW1hdGlvbi5Ib2xvIj4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IkFuaW1hdGlvbi5RdWFudHVtLkFjdGl2aXR5IiBwYXJlbnQ9IkFuaW1hdGlvbi5Ib2xvLkFjdGl2aXR5Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aXZpdHlPcGVuRW50ZXJBbmltYXRpb24iPkBudWxsPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpdml0eU9wZW5FeGl0QW5pbWF0aW9uIj5AbnVsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aXZpdHlDbG9zZUVudGVyQW5pbWF0aW9uIj5AbnVsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aXZpdHlDbG9zZUV4aXRBbmltYXRpb24iPkBhbmltL2ZhZGVfb3V0PC9pdGVtPgorICAgIDwvc3R5bGU+CisKICAgICA8IS0tIERpYWxvZyBzdHlsZXMgLS0+CiAKICAgICA8c3R5bGUgbmFtZT0iQWxlcnREaWFsb2cuSG9sbyIgcGFyZW50PSJBbGVydERpYWxvZyI+CkBAIC0yNTMxLDQgKzI1NzAsNTcgQEAKICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPiM4MGZmZmZmZjwvaXRlbT4KICAgICA8L3N0eWxlPgogCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlRpbWVQaWNrZXIuVGltZUxhYmVsIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlIj4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLlRpbWVQaWNrZXIuQW1QbUxhYmVsIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlIj4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLkhvbG8uVGltZVBpY2tlci5UaW1lTGFiZWwiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuSG9sbyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFNpemUiPkBkaW1lbi90aW1lcGlja2VyX3RpbWVfbGFiZWxfc2l6ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fZGFyazwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLkhvbG8uVGltZVBpY2tlci5BbVBtTGFiZWwiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuSG9sbyI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFNpemUiPkBkaW1lbi90aW1lcGlja2VyX2FtcG1fbGFiZWxfc2l6ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0QWxsQ2FwcyI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF90ZXh0X2NvbG9yX2hvbG9fZGFyazwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U3R5bGUiPmJvbGQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5Ib2xvLkxpZ2h0LlRpbWVQaWNrZXIuVGltZUxhYmVsIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLkhvbG8uTGlnaHQiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj5AZGltZW4vdGltZXBpY2tlcl90aW1lX2xhYmVsX3NpemU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AY29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X3RleHRfY29sb3JfaG9sb19saWdodDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLkhvbG8uTGlnaHQuVGltZVBpY2tlci5BbVBtTGFiZWwiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuSG9sby5MaWdodCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dFNpemUiPkBkaW1lbi90aW1lcGlja2VyX2FtcG1fbGFiZWxfc2l6ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0QWxsQ2FwcyI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPkBjb2xvci90aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2xpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTdHlsZSI+Ym9sZDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5GYXN0U2Nyb2xsIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0aHVtYkRyYXdhYmxlIj4/YW5kcm9pZDphdHRyL2Zhc3RTY3JvbGxUaHVtYkRyYXdhYmxlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRyYWNrRHJhd2FibGUiPj9hbmRyb2lkOmF0dHIvZmFzdFNjcm9sbFRyYWNrRHJhd2FibGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YmFja2dyb3VuZExlZnQiPj9hbmRyb2lkOmF0dHIvZmFzdFNjcm9sbFByZXZpZXdCYWNrZ3JvdW5kTGVmdDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpiYWNrZ3JvdW5kUmlnaHQiPj9hbmRyb2lkOmF0dHIvZmFzdFNjcm9sbFByZXZpZXdCYWNrZ3JvdW5kUmlnaHQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cG9zaXRpb24iPj9hbmRyb2lkOmF0dHIvZmFzdFNjcm9sbE92ZXJsYXlQb3NpdGlvbjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPj9hbmRyb2lkOmF0dHIvZmFzdFNjcm9sbFRleHRDb2xvcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0aHVtYk1pbldpZHRoIj42NGRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRodW1iTWluSGVpZ2h0Ij41MmRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj41MnNwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1pbldpZHRoIj43MmRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm1pbkhlaWdodCI+NzJkcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpwYWRkaW5nIj4xNmRwPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkhvbG8uRmFzdFNjcm9sbCIgcGFyZW50PSJXaWRnZXQuRmFzdFNjcm9sbCI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGh1bWJNaW5XaWR0aCI+MGRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRodW1iTWluSGVpZ2h0Ij4wZHA8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuSG9sby5MaWdodC5GYXN0U2Nyb2xsIiBwYXJlbnQ9IldpZGdldC5Ib2xvLkZhc3RTY3JvbGwiPgorICAgIDwvc3R5bGU+CisKIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXNfZGV2aWNlX2RlZmF1bHRzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzX2RldmljZV9kZWZhdWx0cy54bWwKaW5kZXggZWRlYmEwMi4uNTEyYzliOCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXNfZGV2aWNlX2RlZmF1bHRzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0eWxlc19kZXZpY2VfZGVmYXVsdHMueG1sCkBAIC0yMDYsNiArMjA2LDEyIEBACiAgICAgPHN0eWxlIG5hbWU9IldpZGdldC5EZXZpY2VEZWZhdWx0LkV4cGFuZGFibGVMaXN0Vmlldy5XaGl0ZSIgcGFyZW50PSJXaWRnZXQuSG9sby5FeHBhbmRhYmxlTGlzdFZpZXcuV2hpdGUiPgogCiAgICAgPC9zdHlsZT4KKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkRldmljZURlZmF1bHQuRmFzdFNjcm9sbCIgcGFyZW50PSJXaWRnZXQuSG9sby5GYXN0U2Nyb2xsIj4KKworICAgIDwvc3R5bGU+CisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5EZXZpY2VEZWZhdWx0LkZyYWdtZW50QnJlYWRDcnVtYnMiIHBhcmVudD0iV2lkZ2V0LkhvbG8uRnJhZ21lbnRCcmVhZENydW1icyI+CisKKyAgICA8L3N0eWxlPgogICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuRGV2aWNlRGVmYXVsdC5HYWxsZXJ5IiBwYXJlbnQ9IldpZGdldC5Ib2xvLkdhbGxlcnkiPgogCiAgICAgPC9zdHlsZT4KQEAgLTMwOSw2ICszMTUsMTIgQEAKICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkRldmljZURlZmF1bHQuTGlnaHQuRXhwYW5kYWJsZUxpc3RWaWV3IiBwYXJlbnQ9IldpZGdldC5Ib2xvLkxpZ2h0LkV4cGFuZGFibGVMaXN0VmlldyIgPgogCiAgICAgPC9zdHlsZT4KKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkRldmljZURlZmF1bHQuTGlnaHQuRmFzdFNjcm9sbCIgcGFyZW50PSJXaWRnZXQuSG9sby5MaWdodC5GYXN0U2Nyb2xsIj4KKworICAgIDwvc3R5bGU+CisgICAgPHN0eWxlIG5hbWU9IldpZGdldC5EZXZpY2VEZWZhdWx0LkxpZ2h0LkZyYWdtZW50QnJlYWRDcnVtYnMiIHBhcmVudD0iV2lkZ2V0LkhvbG8uTGlnaHQuRnJhZ21lbnRCcmVhZENydW1icyI+CisKKyAgICA8L3N0eWxlPgogICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuRGV2aWNlRGVmYXVsdC5MaWdodC5HcmlkVmlldyIgcGFyZW50PSJXaWRnZXQuSG9sby5MaWdodC5HcmlkVmlldyIgPgogCiAgICAgPC9zdHlsZT4KQEAgLTcyOSw0ICs3NDEsMjIgQEAKICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0LkRldmljZURlZmF1bHQuTWVkaWFSb3V0ZUJ1dHRvbiIgcGFyZW50PSJXaWRnZXQuSG9sby5NZWRpYVJvdXRlQnV0dG9uIiAvPgogICAgIDxzdHlsZSBuYW1lPSJXaWRnZXQuRGV2aWNlRGVmYXVsdC5MaWdodC5NZWRpYVJvdXRlQnV0dG9uIiBwYXJlbnQ9IldpZGdldC5Ib2xvLkxpZ2h0Lk1lZGlhUm91dGVCdXR0b24iIC8+CiAKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuRGV2aWNlRGVmYXVsdC5UaW1lUGlja2VyLlRpbWVMYWJlbCIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5Ib2xvLlRpbWVQaWNrZXIuVGltZUxhYmVsIj4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLkRldmljZURlZmF1bHQuTGlnaHQuVGltZVBpY2tlci5UaW1lTGFiZWwiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuSG9sby5MaWdodC5UaW1lUGlja2VyLlRpbWVMYWJlbCI+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5EZXZpY2VEZWZhdWx0LlRpbWVQaWNrZXIuQW1QbUxhYmVsIiBwYXJlbnQ9IlRleHRBcHBlYXJhbmNlLkhvbG8uVGltZVBpY2tlci5BbVBtTGFiZWwiPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuRGV2aWNlRGVmYXVsdC5MaWdodC5UaW1lUGlja2VyLkFtUG1MYWJlbCIgcGFyZW50PSJUZXh0QXBwZWFyYW5jZS5Ib2xvLkxpZ2h0LlRpbWVQaWNrZXIuQW1QbUxhYmVsIj4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLkRldmljZURlZmF1bHQuRGlhbG9nLlRpbWVQaWNrZXIiIHBhcmVudD0iVGhlbWUuSG9sby5EaWFsb2cuVGltZVBpY2tlciI+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5EZXZpY2VEZWZhdWx0LkxpZ2h0LkRpYWxvZy5UaW1lUGlja2VyIiBwYXJlbnQ9IlRoZW1lLkhvbG8uTGlnaHQuRGlhbG9nLlRpbWVQaWNrZXIiPgorICAgIDwvc3R5bGU+CisKIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zeW1ib2xzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3ltYm9scy54bWwKaW5kZXggNmQ5MDk3My4uM2FjNzYyZiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zeW1ib2xzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N5bWJvbHMueG1sCkBAIC0yMjQsNiArMjI0LDcgQEAKIAogICA8amF2YS1zeW1ib2wgdHlwZT0iYXR0ciIgbmFtZT0iYWN0aW9uTW9kZVNoYXJlRHJhd2FibGUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJhdHRyIiBuYW1lPSJhbGVydERpYWxvZ0NlbnRlckJ1dHRvbnMiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJhdHRyIiBuYW1lPSJmcmFnbWVudEJyZWFkQ3J1bWJzU3R5bGUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJhdHRyIiBuYW1lPSJnZXN0dXJlT3ZlcmxheVZpZXdTdHlsZSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImF0dHIiIG5hbWU9ImtleWJvYXJkVmlld1N0eWxlIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iYXR0ciIgbmFtZT0ibnVtYmVyUGlja2VyU3R5bGUiIC8+CkBAIC0zMTksNiArMzIwLDcgQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9ImludGVnZXIiIG5hbWU9ImNvbmZpZ19tb2JpbGVfbXR1IiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iaW50ZWdlciIgbmFtZT0iY29uZmlnX3ZvbHRlX3JlcGxhY2VtZW50X3JhdCIvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iaW50ZWdlciIgbmFtZT0iY29uZmlnX3ZhbGlkX3dhcHB1c2hfaW5kZXgiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJpbnRlZ2VyIiBuYW1lPSJjb25maWdfb3ZlcnJpZGVIYXNQZXJtYW5lbnRNZW51S2V5IiAvPgogCiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJjb2xvciIgbmFtZT0idGFiX2luZGljYXRvcl90ZXh0X3Y0IiAvPgogCkBAIC0zMzIsMTEgKzMzNCw2IEBACiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0iZGVmYXVsdF9nYXAiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0iZHJvcGRvd25pdGVtX2ljb25fd2lkdGgiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0iZHJvcGRvd25pdGVtX3RleHRfcGFkZGluZ19sZWZ0IiAvPgotICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9ImZhc3RzY3JvbGxfb3ZlcmxheV9zaXplIiAvPgotICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9ImZhc3RzY3JvbGxfb3ZlcmxheV90ZXh0X3NpemUiIC8+Ci0gIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0iZmFzdHNjcm9sbF9vdmVybGF5X3BhZGRpbmciIC8+Ci0gIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0iZmFzdHNjcm9sbF90aHVtYl9oZWlnaHQiIC8+Ci0gIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0iZmFzdHNjcm9sbF90aHVtYl93aWR0aCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9zcGFjZWJhcl92ZXJ0aWNhbF9jb3JyZWN0aW9uIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9InNlYXJjaF92aWV3X3ByZWZlcnJlZF93aWR0aCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJ0ZXh0dmlld19lcnJvcl9wb3B1cF9kZWZhdWx0X3dpZHRoIiAvPgpAQCAtNjkwLDYgKzY4Nyw3IEBACiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9Im1vYmlsZV9wcm92aXNpb25pbmdfYXBuIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJtb2JpbGVfcHJvdmlzaW9uaW5nX3VybCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0ibW9iaWxlX3JlZGlyZWN0ZWRfcHJvdmlzaW9uaW5nX3VybCIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0icmVib290X3NhZmVtb2RlX2NvbmZpcm0iIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InJlYm9vdF9zYWZlbW9kZV90aXRsZSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0icmVsYXRpb25UeXBlQXNzaXN0YW50IiAvPgpAQCAtMTA5MSw3ICsxMDg5LDYgQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJ1bmxvY2tfaGFsbyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJ1bmxvY2tfcmluZyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJ1bmxvY2tfd2F2ZSIgLz4KLSAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJpY19hY3Rpb25fYXNzaXN0X2dlbmVyaWMiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkcmF3YWJsZSIgbmFtZT0ibm90aWZpY2F0aW9uX2JnIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZHJhd2FibGUiIG5hbWU9Im5vdGlmaWNhdGlvbl9iZ19sb3ciIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkcmF3YWJsZSIgbmFtZT0ibm90aWZpY2F0aW9uX3RlbXBsYXRlX2ljb25fYmciIC8+CkBAIC0xMTc5LDcgKzExNzYsNyBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0ibGF5b3V0IiBuYW1lPSJ0YWJfY29udGVudCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImxheW91dCIgbmFtZT0idGFiX2luZGljYXRvcl9ob2xvIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ibGF5b3V0IiBuYW1lPSJ0ZXh0dmlld19oaW50IiAvPgotICA8amF2YS1zeW1ib2wgdHlwZT0ibGF5b3V0IiBuYW1lPSJ0aW1lX3BpY2tlciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImxheW91dCIgbmFtZT0idGltZV9waWNrZXJfbGVnYWN5IiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ibGF5b3V0IiBuYW1lPSJ0aW1lX3BpY2tlcl9kaWFsb2ciIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJsYXlvdXQiIG5hbWU9InRyYW5zaWVudF9ub3RpZmljYXRpb24iIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJsYXlvdXQiIG5hbWU9InZvbHVtZV9hZGp1c3QiIC8+CkBAIC0xNzU3LDQgKzE3NTQsNTUgQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJzdWJ0aXRsZV9zaGFkb3dfcmFkaXVzIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9InN1YnRpdGxlX3NoYWRvd19vZmZzZXQiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0ic3VidGl0bGVfb3V0bGluZV93aWR0aCIgLz4KKworICA8IS0tIEZyb20gdGhlIG5ldyBUaW1lUGlja2VyIC0tPgorICA8amF2YS1zeW1ib2wgdHlwZT0iYXR0ciIgbmFtZT0idGltZVBpY2tlckhlYWRlckJhY2tncm91bmRDb2xvciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImF0dHIiIG5hbWU9InRpbWVQaWNrZXJEaWFsb2dUaGVtZSIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImF0dHIiIG5hbWU9ImhlYWRlclNlbGVjdGVkVGV4dENvbG9yIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iYXR0ciIgbmFtZT0iaGVhZGVyVW5zZWxlY3RlZFRleHRDb2xvciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImF0dHIiIG5hbWU9Im51bWJlcnNUZXh0Q29sb3IiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJhdHRyIiBuYW1lPSJudW1iZXJzQmFja2dyb3VuZENvbG9yIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iYXR0ciIgbmFtZT0iYW1QbVRleHRDb2xvciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImF0dHIiIG5hbWU9ImFtUG1VbnNlbGVjdGVkQmFja2dyb3VuZENvbG9yIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iYXR0ciIgbmFtZT0iYW1QbVNlbGVjdGVkQmFja2dyb3VuZENvbG9yIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iYXR0ciIgbmFtZT0ibnVtYmVyc1NlbGVjdG9yQ29sb3IiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJhdHRyIiBuYW1lPSJ0aW1lUGlja2VySGVhZGVyVGltZUxhYmVsVGV4dEFwcGVhcmFuY2UiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHlsZSIgbmFtZT0iVGV4dEFwcGVhcmFuY2UuSG9sby5UaW1lUGlja2VyLlRpbWVMYWJlbCIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImxheW91dCIgbmFtZT0idGltZV9waWNrZXJfaG9sbyIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImxheW91dCIgbmFtZT0idGltZV9oZWFkZXJfbGFiZWwiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0idGltZV9oZWFkZXIiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0iaG91cnMiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0ibWludXRlcyIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJhbXBtX2xhYmVsIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iaWQiIG5hbWU9InJhZGlhbF9waWNrZXIiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0ic2VwYXJhdG9yIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iaWQiIG5hbWU9ImxheW91dF9idXR0b25zIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iaWQiIG5hbWU9ImRvbmVfYnV0dG9uIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJkb25lX2xhYmVsIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJob3VyX3BpY2tlcl9kZXNjcmlwdGlvbiIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0ic2VsZWN0X2hvdXJzIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJzZWxlY3RfbWludXRlcyIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0idGltZV9wbGFjZWhvbGRlciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0idGltZXBpY2tlcl9jaXJjbGVfcmFkaXVzX211bHRpcGxpZXIiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InRpbWVwaWNrZXJfY2lyY2xlX3JhZGl1c19tdWx0aXBsaWVyXzI0SG91ck1vZGUiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InRpbWVwaWNrZXJfYW1wbV9jaXJjbGVfcmFkaXVzX211bHRpcGxpZXIiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImRlbGV0ZWRfa2V5IiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJzYW5zX3NlcmlmIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJyYWRpYWxfbnVtYmVyc190eXBlZmFjZSIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0idGltZXBpY2tlcl90ZXh0X3NpemVfbXVsdGlwbGllcl9pbm5lciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0idGltZXBpY2tlcl90ZXh0X3NpemVfbXVsdGlwbGllcl9vdXRlciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0idGltZXBpY2tlcl90ZXh0X3NpemVfbXVsdGlwbGllcl9ub3JtYWwiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InRpbWVwaWNrZXJfbnVtYmVyc19yYWRpdXNfbXVsdGlwbGllcl9vdXRlciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0idGltZXBpY2tlcl9zZWxlY3Rpb25fcmFkaXVzX211bHRpcGxpZXIiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InRpbWVwaWNrZXJfbnVtYmVyc19yYWRpdXNfbXVsdGlwbGllcl9pbm5lciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0idGltZXBpY2tlcl9udW1iZXJzX3JhZGl1c19tdWx0aXBsaWVyX25vcm1hbCIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0idGltZXBpY2tlcl90cmFuc2l0aW9uX21pZF9yYWRpdXNfbXVsdGlwbGllciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0idGltZXBpY2tlcl90cmFuc2l0aW9uX2VuZF9yYWRpdXNfbXVsdGlwbGllciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImNvbG9yIiBuYW1lPSJ0aW1lcGlja2VyX2RlZmF1bHRfdGV4dF9jb2xvcl9ob2xvX2xpZ2h0IiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iY29sb3IiIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF9kaXNhYmxlZF9jb2xvcl9ob2xvX2xpZ2h0IiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iY29sb3IiIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF9hbXBtX3Vuc2VsZWN0ZWRfYmFja2dyb3VuZF9jb2xvcl9ob2xvX2xpZ2h0IiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iY29sb3IiIG5hbWU9InRpbWVwaWNrZXJfZGVmYXVsdF9hbXBtX3NlbGVjdGVkX2JhY2tncm91bmRfY29sb3JfaG9sb19saWdodCIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImFycmF5IiBuYW1lPSJjb25maWdfY2xvY2tUaWNrVmliZVBhdHRlcm4iIC8+CisKIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy90aGVtZXMueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy90aGVtZXMueG1sCmluZGV4IGM4ZDlmYzYuLjAzNjFkZjEgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvdGhlbWVzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3RoZW1lcy54bWwKQEAgLTI0OSw2ICsyNDksNyBAQAogICAgICAgICA8aXRlbSBuYW1lPSJlZGl0VGV4dFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuRWRpdFRleHQ8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImV4cGFuZGFibGVMaXN0Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuRXhwYW5kYWJsZUxpc3RWaWV3PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJleHBhbmRhYmxlTGlzdFZpZXdXaGl0ZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuRXhwYW5kYWJsZUxpc3RWaWV3LldoaXRlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJmYXN0U2Nyb2xsU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5GYXN0U2Nyb2xsPC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJnYWxsZXJ5U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5HYWxsZXJ5PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJnZXN0dXJlT3ZlcmxheVZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0Lkdlc3R1cmVPdmVybGF5VmlldzwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZ3JpZFZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkdyaWRWaWV3PC9pdGVtPgpAQCAtMjk2LDggKzI5Nyw4IEBACiAgICAgICAgIDxpdGVtIG5hbWU9Imxpc3RQb3B1cFdpbmRvd1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuTGlzdFBvcHVwV2luZG93PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJwb3B1cE1lbnVTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LlBvcHVwTWVudTwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aXZpdHlDaG9vc2VyVmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuQWN0aXZpdHlDaG9vc2VyVmlldzwvaXRlbT4KLQogICAgICAgICA8aXRlbSBuYW1lPSJtZWRpYVJvdXRlQnV0dG9uU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5EZXZpY2VEZWZhdWx0Lk1lZGlhUm91dGVCdXR0b248L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImZyYWdtZW50QnJlYWRDcnVtYnNTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkZyYWdtZW50QnJlYWRDcnVtYnM8L2l0ZW0+CiAKICAgICAgICAgPCEtLSBQcmVmZXJlbmNlIHN0eWxlcyAtLT4KICAgICAgICAgPGl0ZW0gbmFtZT0icHJlZmVyZW5jZVNjcmVlblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9QcmVmZXJlbmNlLlByZWZlcmVuY2VTY3JlZW48L2l0ZW0+CkBAIC0zODIsNiArMzgzLDE4IEBACiAgICAgICAgIDwhLS0gVGltZVBpY2tlciBzdHlsZSAtLT4KICAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlclN0eWxlIj5Ac3R5bGUvV2lkZ2V0LlRpbWVQaWNrZXI8L2l0ZW0+CiAKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIGJhY2tncm91bmQgY29sb3IgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJCYWNrZ3JvdW5kQ29sb3IiPkBhbmRyb2lkOmNvbG9yL2Rhcmtlcl9ncmF5PC9pdGVtPgorCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBIZWFkZXIgdGltZSBsYWJlbCB0ZXh0IGFwcGVhcmFuY2UgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJUaW1lTGFiZWxUZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLlRpbWVQaWNrZXIuVGltZUxhYmVsPC9pdGVtPgorCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBIZWFkZXIgYW0gcG0gbGFiZWwgdGV4dCBhcHBlYXJhbmNlIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VySGVhZGVyQW1QbUxhYmVsVGV4dEFwcGVhcmFuY2UiPkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5UaW1lUGlja2VyLkFtUG1MYWJlbDwvaXRlbT4KKworICAgICAgICA8IS0tIFRpbWVQaWNrZXIgZGlhbG9nIHRoZW1lIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VyRGlhbG9nVGhlbWUiPkBhbmRyb2lkOnN0eWxlL1RoZW1lLkRpYWxvZy5UaW1lUGlja2VyPC9pdGVtPgorCiAgICAgICAgIDwhLS0gRGF0ZVBpY2tlciBzdHlsZSAtLT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZGF0ZVBpY2tlclN0eWxlIj5Ac3R5bGUvV2lkZ2V0LkRhdGVQaWNrZXI8L2l0ZW0+CiAKQEAgLTM5MSw3ICs0MDQsNiBAQAogICAgICAgICA8aXRlbSBuYW1lPSJmYXN0U2Nyb2xsUHJldmlld0JhY2tncm91bmRMZWZ0Ij5AYW5kcm9pZDpkcmF3YWJsZS9tZW51X3N1Ym1lbnVfYmFja2dyb3VuZDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZmFzdFNjcm9sbE92ZXJsYXlQb3NpdGlvbiI+ZmxvYXRpbmc8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImZhc3RTY3JvbGxUZXh0Q29sb3IiPkBhbmRyb2lkOmNvbG9yL3ByaW1hcnlfdGV4dF9kYXJrPC9pdGVtPgotCiAgICAgICAgIDwhLS0gUG9pbnRlciBzdHlsZSAtLT4KICAgICAgICAgPGl0ZW0gbmFtZT0icG9pbnRlclN0eWxlIj5AYW5kcm9pZDpzdHlsZS9Qb2ludGVyPC9pdGVtPgogCkBAIC02ODgsNyArNzAwLDE1IEBACiAgICAgICAgIDxpdGVtIG5hbWU9InRleHRBcHBlYXJhbmNlTGlzdEl0ZW0iPkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLkxhcmdlLkludmVyc2U8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9InRleHRBcHBlYXJhbmNlTGlzdEl0ZW1TbWFsbCI+QGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuTGFyZ2UuSW52ZXJzZTwvaXRlbT4KICAgICA8L3N0eWxlPgotICAgIAorCisgICAgPCEtLSBEZWZhdWx0IGhlbWUgZm9yIHRoZSBUaW1lUGlja2VyIGRpYWxvZyB3aW5kb3dzLCB3aGljaCBpcyB1c2VkIGJ5IHRoZQorICAgICAgICAge0BsaW5rIGFuZHJvaWQuYXBwLlRpbWVQaWNrZXJEaWFsb2d9IGNsYXNzLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuRGlhbG9nLlRpbWVQaWNrZXIiPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dCYWNrZ3JvdW5kIj5AYW5kcm9pZDpjb2xvci90cmFuc3BhcmVudDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93VGl0bGVTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvRGlhbG9nV2luZG93VGl0bGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0NvbnRlbnRPdmVybGF5Ij5AbnVsbDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCiAgICAgPCEtLSBEZWZhdWx0IGRhcmsgdGhlbWUgZm9yIHBhbmVsIHdpbmRvd3MgKG9uIEFQSSBsZXZlbCAxMCBhbmQgbG93ZXIpLiAgVGhpcyByZW1vdmVzIGFsbAogICAgICAgICAgZXh0cmFuZW91cyB3aW5kb3cgZGVjb3JhdGlvbnMsIHNvIHlvdSBiYXNpY2FsbHkgaGF2ZSBhbiBlbXB0eSByZWN0YW5nbGUgaW4gd2hpY2gKICAgICAgICAgIHRvIHBsYWNlIHlvdXIgY29udGVudC4gIEl0IG1ha2VzIHRoZSB3aW5kb3cgZmxvYXRpbmcsIHdpdGggYSB0cmFuc3BhcmVudApAQCAtMTA4OCw2ICsxMTA4LDcgQEAKICAgICAgICAgPGl0ZW0gbmFtZT0iZWRpdFRleHRTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkhvbG8uRWRpdFRleHQ8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImV4cGFuZGFibGVMaXN0Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5FeHBhbmRhYmxlTGlzdFZpZXc8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImV4cGFuZGFibGVMaXN0Vmlld1doaXRlU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkV4cGFuZGFibGVMaXN0Vmlldy5XaGl0ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZmFzdFNjcm9sbFN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5GYXN0U2Nyb2xsPC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJnYWxsZXJ5U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkdhbGxlcnk8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9Imdlc3R1cmVPdmVybGF5Vmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5HZXN0dXJlT3ZlcmxheVZpZXc8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImdyaWRWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkdyaWRWaWV3PC9pdGVtPgpAQCAtMTEzNSw2ICsxMTU2LDcgQEAKICAgICAgICAgPGl0ZW0gbmFtZT0icG9wdXBNZW51U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLlBvcHVwTWVudTwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0ic3RhY2tWaWV3U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLlN0YWNrVmlldzwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aXZpdHlDaG9vc2VyVmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5BY3Rpdml0eUNob29zZXJWaWV3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJmcmFnbWVudEJyZWFkQ3J1bWJzU3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkZyYWdtZW50QnJlYWRDcnVtYnM8L2l0ZW0+CiAKICAgICAgICAgPCEtLSBQcmVmZXJlbmNlIHN0eWxlcyAtLT4KICAgICAgICAgPGl0ZW0gbmFtZT0icHJlZmVyZW5jZVNjcmVlblN0eWxlIj5AYW5kcm9pZDpzdHlsZS9QcmVmZXJlbmNlLkhvbG8uUHJlZmVyZW5jZVNjcmVlbjwvaXRlbT4KQEAgLTEyMDIsNiArMTIyNCwxOCBAQAogICAgICAgICA8IS0tIFRpbWVQaWNrZXIgc3R5bGUgLS0+CiAgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJTdHlsZSI+QHN0eWxlL1dpZGdldC5Ib2xvLlRpbWVQaWNrZXI8L2l0ZW0+CiAKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIGJhY2tncm91bmQgY29sb3IgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJCYWNrZ3JvdW5kQ29sb3IiPkBhbmRyb2lkOmNvbG9yL3RpbWVwaWNrZXJfZGVmYXVsdF9iYWNrZ3JvdW5kX2hvbG9fZGFyazwvaXRlbT4KKworICAgICAgICA8IS0tIFRpbWVQaWNrZXIgSGVhZGVyIHRpbWUgbGFiZWwgdGV4dCBhcHBlYXJhbmNlIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VySGVhZGVyVGltZUxhYmVsVGV4dEFwcGVhcmFuY2UiPkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5Ib2xvLlRpbWVQaWNrZXIuVGltZUxhYmVsPC9pdGVtPgorCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBIZWFkZXIgYW0gcG0gbGFiZWwgdGV4dCBhcHBlYXJhbmNlIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VySGVhZGVyQW1QbUxhYmVsVGV4dEFwcGVhcmFuY2UiPkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5Ib2xvLlRpbWVQaWNrZXIuQW1QbUxhYmVsPC9pdGVtPgorCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBkaWFsb2cgdGhlbWUgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJEaWFsb2dUaGVtZSI+QGFuZHJvaWQ6c3R5bGUvVGhlbWUuSG9sby5EaWFsb2cuVGltZVBpY2tlcjwvaXRlbT4KKwogICAgICAgICA8IS0tIERhdGVQaWNrZXIgc3R5bGUgLS0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImRhdGVQaWNrZXJTdHlsZSI+QHN0eWxlL1dpZGdldC5Ib2xvLkRhdGVQaWNrZXI8L2l0ZW0+CiAKQEAgLTE0MDMsNiArMTQzNyw3IEBACiAgICAgICAgIDxpdGVtIG5hbWU9ImVkaXRUZXh0U3R5bGUiPkBhbmRyb2lkOnN0eWxlL1dpZGdldC5Ib2xvLkxpZ2h0LkVkaXRUZXh0PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJleHBhbmRhYmxlTGlzdFZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkhvbG8uTGlnaHQuRXhwYW5kYWJsZUxpc3RWaWV3PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJleHBhbmRhYmxlTGlzdFZpZXdXaGl0ZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5MaWdodC5FeHBhbmRhYmxlTGlzdFZpZXcuV2hpdGU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImZhc3RTY3JvbGxTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkhvbG8uTGlnaHQuRmFzdFNjcm9sbDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZ2FsbGVyeVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5MaWdodC5HYWxsZXJ5PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJnZXN0dXJlT3ZlcmxheVZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkhvbG8uTGlnaHQuR2VzdHVyZU92ZXJsYXlWaWV3PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJncmlkVmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5MaWdodC5HcmlkVmlldzwvaXRlbT4KQEAgLTE0NTAsNiArMTQ4NSw3IEBACiAgICAgICAgIDxpdGVtIG5hbWU9InBvcHVwTWVudVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5MaWdodC5Qb3B1cE1lbnU8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9InN0YWNrVmlld1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5TdGFja1ZpZXc8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFjdGl2aXR5Q2hvb3NlclZpZXdTdHlsZSI+QGFuZHJvaWQ6c3R5bGUvV2lkZ2V0LkhvbG8uTGlnaHQuQWN0aXZpdHlDaG9vc2VyVmlldzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iZnJhZ21lbnRCcmVhZENydW1ic1N0eWxlIj5AYW5kcm9pZDpzdHlsZS9XaWRnZXQuSG9sby5MaWdodC5GcmFnbWVudEJyZWFkQ3J1bWJzPC9pdGVtPgogCiAgICAgICAgIDwhLS0gUHJlZmVyZW5jZSBzdHlsZXMgLS0+CiAgICAgICAgIDxpdGVtIG5hbWU9InByZWZlcmVuY2VTY3JlZW5TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvUHJlZmVyZW5jZS5Ib2xvLlByZWZlcmVuY2VTY3JlZW48L2l0ZW0+CkBAIC0xNTE3LDYgKzE1NTMsMTggQEAKICAgICAgICAgPCEtLSBUaW1lUGlja2VyIHN0eWxlIC0tPgogICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VyU3R5bGUiPkBzdHlsZS9XaWRnZXQuSG9sby5MaWdodC5UaW1lUGlja2VyPC9pdGVtPgogCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBIZWFkZXIgYmFja2dyb3VuZCBjb2xvciAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckhlYWRlckJhY2tncm91bmRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvdGltZXBpY2tlcl9kZWZhdWx0X2JhY2tncm91bmRfaG9sb19saWdodDwvaXRlbT4KKworICAgICAgICA8IS0tIFRpbWVQaWNrZXIgSGVhZGVyIHRpbWUgbGFiZWwgdGV4dCBhcHBlYXJhbmNlIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VySGVhZGVyVGltZUxhYmVsVGV4dEFwcGVhcmFuY2UiPkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5Ib2xvLkxpZ2h0LlRpbWVQaWNrZXIuVGltZUxhYmVsPC9pdGVtPgorCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBIZWFkZXIgYW0gcG0gbGFiZWwgdGV4dCBhcHBlYXJhbmNlIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VySGVhZGVyQW1QbUxhYmVsVGV4dEFwcGVhcmFuY2UiPkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5Ib2xvLkxpZ2h0LlRpbWVQaWNrZXIuQW1QbUxhYmVsPC9pdGVtPgorCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBkaWFsb2cgdGhlbWUgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJEaWFsb2dUaGVtZSI+QGFuZHJvaWQ6c3R5bGUvVGhlbWUuSG9sby5MaWdodC5EaWFsb2cuVGltZVBpY2tlcjwvaXRlbT4KKwogICAgICAgICA8IS0tIERhdGVQaWNrZXIgc3R5bGUgLS0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImRhdGVQaWNrZXJTdHlsZSI+QHN0eWxlL1dpZGdldC5Ib2xvLkxpZ2h0LkRhdGVQaWNrZXI8L2l0ZW0+CiAKQEAgLTE3MjksNiArMTc3NywxNCBAQAogICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd01pbldpZHRoTWlub3IiPkBhbmRyb2lkOmRpbWVuL2RpYWxvZ19taW5fd2lkdGhfbWlub3I8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAorICAgIDwhLS0gSG9sbyB0aGVtZSBmb3IgdGhlIFRpbWVQaWNrZXIgZGlhbG9nIHdpbmRvd3MsIHdoaWNoIGlzIHVzZWQgYnkgdGhlCisgICAgICAgICB7QGxpbmsgYW5kcm9pZC5hcHAuVGltZVBpY2tlckRpYWxvZ30gY2xhc3MuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5Ib2xvLkRpYWxvZy5UaW1lUGlja2VyIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0id2luZG93QmFja2dyb3VuZCI+QGFuZHJvaWQ6Y29sb3IvdHJhbnNwYXJlbnQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd1RpdGxlU3R5bGUiPkBhbmRyb2lkOnN0eWxlL0RpYWxvZ1dpbmRvd1RpdGxlLkhvbG88L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0NvbnRlbnRPdmVybGF5Ij5AbnVsbDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCiAgICAgPCEtLSBUaGVtZSBmb3IgYSB3aW5kb3cgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBlaXRoZXIgZnVsbC1zY3JlZW4gb24KICAgICAgICAgIHNtYWxsZXIgc2NyZWVucyAoc21hbGwsIG5vcm1hbCkgb3IgYXMgYSBkaWFsb2cgb24gbGFyZ2VyIHNjcmVlbnMKICAgICAgICAgIChsYXJnZSwgeGxhcmdlKS4gLS0+CkBAIC0xODQ0LDYgKzE5MDAsMTQgQEAKICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dNaW5XaWR0aE1pbm9yIj5AYW5kcm9pZDpkaW1lbi9kaWFsb2dfbWluX3dpZHRoX21pbm9yPC9pdGVtPgogICAgIDwvc3R5bGU+CiAKKyAgICA8IS0tIEhvbG8gTGlnaHQgdGhlbWUgZm9yIHRoZSBUaW1lUGlja2VyIGRpYWxvZyB3aW5kb3dzLCB3aGljaCBpcyB1c2VkIGJ5IHRoZQorICAgICAgICAge0BsaW5rIGFuZHJvaWQuYXBwLlRpbWVQaWNrZXJEaWFsb2d9IGNsYXNzLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iVGhlbWUuSG9sby5MaWdodC5EaWFsb2cuVGltZVBpY2tlciI+CisgICAgICAgIDxpdGVtIG5hbWU9IndpbmRvd0JhY2tncm91bmQiPkBhbmRyb2lkOmNvbG9yL3RyYW5zcGFyZW50PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dUaXRsZVN0eWxlIj5AYW5kcm9pZDpzdHlsZS9EaWFsb2dXaW5kb3dUaXRsZS5Ib2xvLkxpZ2h0PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ3aW5kb3dDb250ZW50T3ZlcmxheSI+QG51bGw8L2l0ZW0+CisgICAgPC9zdHlsZT4KKwogICAgIDwhLS0gVGhlbWUgZm9yIGEgcHJlc2VudGF0aW9uIHdpbmRvdyBvbiBhIHNlY29uZGFyeSBkaXNwbGF5LiAtLT4KICAgICA8c3R5bGUgbmFtZT0iVGhlbWUuSG9sby5MaWdodC5EaWFsb2cuUHJlc2VudGF0aW9uIiBwYXJlbnQ9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLkhvbG8uTGlnaHQuTm9BY3Rpb25CYXIuRnVsbHNjcmVlbiIgPgogICAgIDwvc3R5bGU+CkBAIC0xODYxLDQgKzE5MjUsMTEgQEAKICAgICA8c3R5bGUgbmFtZT0iVGhlbWUuSG9sby5XYWxscGFwZXIuTm9UaXRsZUJhciI+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93Tm9UaXRsZSI+dHJ1ZTwvaXRlbT4KICAgICA8L3N0eWxlPgorCisgICAgPCEtLSBEZWZhdWx0IFF1YW50dW0gUGFwZXIgdGhlbWUuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJUaGVtZS5RdWFudHVtIiBwYXJlbnQ9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLkhvbG8uTGlnaHQiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0NvbnRlbnRUcmFuc2l0aW9ucyI+dHJ1ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dBbmltYXRpb25TdHlsZSI+QGFuZHJvaWQ6c3R5bGUvQW5pbWF0aW9uLlF1YW50dW0uQWN0aXZpdHk8L2l0ZW0+CisgICAgPC9zdHlsZT4KKwogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3RoZW1lc19kZXZpY2VfZGVmYXVsdHMueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy90aGVtZXNfZGV2aWNlX2RlZmF1bHRzLnhtbAppbmRleCA3MjFjNmIwLi4xOTU1NmExIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3RoZW1lc19kZXZpY2VfZGVmYXVsdHMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvdGhlbWVzX2RldmljZV9kZWZhdWx0cy54bWwKQEAgLTE5NCw2ICsxOTQsMTUgQEAKICAgICAgICAgPCEtLSBUaW1lUGlja2VyIHN0eWxlIC0tPgogICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VyU3R5bGUiPkBzdHlsZS9XaWRnZXQuRGV2aWNlRGVmYXVsdC5UaW1lUGlja2VyPC9pdGVtPgogCisgICAgICAgIDwhLS0gVGltZVBpY2tlciBIZWFkZXIgdGltZSBsYWJlbCB0ZXh0IGFwcGVhcmFuY2UgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJUaW1lTGFiZWxUZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLkRldmljZURlZmF1bHQuVGltZVBpY2tlci5UaW1lTGFiZWw8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIEhlYWRlciBhbSBwbSBsYWJlbCB0ZXh0IGFwcGVhcmFuY2UgLS0+CisgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJIZWFkZXJBbVBtTGFiZWxUZXh0QXBwZWFyYW5jZSI+QHN0eWxlL1RleHRBcHBlYXJhbmNlLkRldmljZURlZmF1bHQuVGltZVBpY2tlci5BbVBtTGFiZWw8L2l0ZW0+CisKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIGRpYWxvZyB0aGVtZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckRpYWxvZ1RoZW1lIj5AYW5kcm9pZDpzdHlsZS9UaGVtZS5EZXZpY2VEZWZhdWx0LkRpYWxvZy5UaW1lUGlja2VyPC9pdGVtPgorCiAgICAgICAgIDwhLS0gRGF0ZVBpY2tlciBzdHlsZSAtLT4KICAgICAgICAgPGl0ZW0gbmFtZT0iZGF0ZVBpY2tlclN0eWxlIj5Ac3R5bGUvV2lkZ2V0LkRldmljZURlZmF1bHQuRGF0ZVBpY2tlcjwvaXRlbT4KIApAQCAtMzYzLDYgKzM3MiwxNSBAQAogICAgICAgICA8IS0tIFRpbWVQaWNrZXIgc3R5bGUgLS0+CiAgICAgICAgIDxpdGVtIG5hbWU9InRpbWVQaWNrZXJTdHlsZSI+QHN0eWxlL1dpZGdldC5EZXZpY2VEZWZhdWx0LkxpZ2h0LlRpbWVQaWNrZXI8L2l0ZW0+CiAKKyAgICAgICAgPCEtLSBUaW1lUGlja2VyIEhlYWRlciB0aW1lIGxhYmVsIHRleHQgYXBwZWFyYW5jZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckhlYWRlclRpbWVMYWJlbFRleHRBcHBlYXJhbmNlIj5Ac3R5bGUvVGV4dEFwcGVhcmFuY2UuRGV2aWNlRGVmYXVsdC5MaWdodC5UaW1lUGlja2VyLlRpbWVMYWJlbDwvaXRlbT4KKworICAgICAgICA8IS0tIFRpbWVQaWNrZXIgSGVhZGVyIGFtIHBtIGxhYmVsIHRleHQgYXBwZWFyYW5jZSAtLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGltZVBpY2tlckhlYWRlckFtUG1MYWJlbFRleHRBcHBlYXJhbmNlIj5Ac3R5bGUvVGV4dEFwcGVhcmFuY2UuRGV2aWNlRGVmYXVsdC5MaWdodC5UaW1lUGlja2VyLkFtUG1MYWJlbDwvaXRlbT4KKworICAgICAgICA8IS0tIFRpbWVQaWNrZXIgZGlhbG9nIHRoZW1lIC0tPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aW1lUGlja2VyRGlhbG9nVGhlbWUiPkBhbmRyb2lkOnN0eWxlL1RoZW1lLkRldmljZURlZmF1bHQuTGlnaHQuRGlhbG9nLlRpbWVQaWNrZXI8L2l0ZW0+CisKICAgICAgICAgPCEtLSBEYXRlUGlja2VyIHN0eWxlIC0tPgogICAgICAgICA8aXRlbSBuYW1lPSJkYXRlUGlja2VyU3R5bGUiPkBzdHlsZS9XaWRnZXQuRGV2aWNlRGVmYXVsdC5MaWdodC5EYXRlUGlja2VyPC9pdGVtPgogCmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9BbmRyb2lkLm1rIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvQW5kcm9pZC5tawppbmRleCBiZTU1NDQ0Li43M2E1M2NiIDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9BbmRyb2lkLm1rCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL0FuZHJvaWQubWsKQEAgLTIyLDYgKzIyLDcgQEAKIAkkKGNhbGwgYWxsLWphdmEtZmlsZXMtdW5kZXIsIEVuYWJsZWRUZXN0QXBwL3NyYykKIAogTE9DQUxfRFhfRkxBR1MgOj0gLS1jb3JlLWxpYnJhcnkKK0xPQ0FMX0FBUFRfRkxBR1MgPSAtMCBkYXQgLTAgZ2xkCiBMT0NBTF9TVEFUSUNfSkFWQV9MSUJSQVJJRVMgOj0gY29yZS10ZXN0cy1zdXBwb3J0IGFuZHJvaWQtY29tbW9uIGZyYW1ld29ya3MtY29yZS11dGlsLWxpYiBtb2Nrd2Vic2VydmVyIGd1YXZhIGxpdHRsZW1vY2sKIExPQ0FMX0pBVkFfTElCUkFSSUVTIDo9IGFuZHJvaWQudGVzdC5ydW5uZXIgY29uc2NyeXB0IHRlbGVwaG9ueS1jb21tb24KIExPQ0FMX1BBQ0tBR0VfTkFNRSA6PSBGcmFtZXdvcmtzQ29yZVRlc3RzCmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9hc3NldHMvYmFja3VwX21vY2suZGF0IGIvY29yZS90ZXN0cy9jb3JldGVzdHMvYXNzZXRzL2JhY2t1cF9tb2NrLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzBiNTczCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvYXNzZXRzL2JhY2t1cF9tb2NrLmRhdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9hc3NldHMvYmFja3VwX21vY2suZ2xkIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvYXNzZXRzL2JhY2t1cF9tb2NrLmdsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTk3YzIzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvYXNzZXRzL2JhY2t1cF9tb2NrLmdsZApAQCAtMCwwICsxLDQgQEAKK2tleTE6CitrZXkyYTpZV0pqWkdWbVp3PT0KK2tleTNiYzpZV0pqWkdWbVoyZz0KK2tleTRkYWQ6CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9hc3NldHMvYmFja3VwX3JlYWwuZGF0IGIvY29yZS90ZXN0cy9jb3JldGVzdHMvYXNzZXRzL2JhY2t1cF9yZWFsLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjYyNTY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvYXNzZXRzL2JhY2t1cF9yZWFsLmRhdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9hc3NldHMvYmFja3VwX3JlYWwuZ2xkIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvYXNzZXRzL2JhY2t1cF9yZWFsLmdsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjI4ZjliCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvYXNzZXRzL2JhY2t1cF9yZWFsLmdsZApAQCAtMCwwICsxLDMgQEAKK0NBRVlMdzpDQzhRQUJvSVIwVk1JRk4wZFdJZ25QLy8vLy8vLy8vL0FTZ0JNQUpBQVVnQmFwZ0JJMGx1ZEdWdWREdGhZM1JwYjI0OVlXNWtjbTlwWkM1cGJuUmxiblF1WVdOMGFXOXVMazFCU1U0N1kyRjBaV2R2Y25rOVlXNWtjbTlwWkM1cGJuUmxiblF1WTJGMFpXZHZjbmt1VEVGVlRrTklSVkk3YkdGMWJtTm9SbXhoWjNNOU1IZ3hNREl3TURBd01EdGpiMjF3YjI1bGJuUTlZMjl0TG1kdmIyZHNaUzVoYm1SeWIybGtMbWRsYkM4dVUzUjFZa0Z3Y0R0bGJtUT0KK0NBRVlMUToKK0NBRVlMQToKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL2FwcC9iYWNrdXAvQmFja3VwRGF0YVRlc3QuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL2FwcC9iYWNrdXAvQmFja3VwRGF0YVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzIwNGUwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvYXBwL2JhY2t1cC9CYWNrdXBEYXRhVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLmFwcC5iYWNrdXA7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5iYWNrdXAuQmFja3VwRGF0YUlucHV0OworaW1wb3J0IGFuZHJvaWQuYXBwLmJhY2t1cC5CYWNrdXBEYXRhT3V0cHV0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRGaWxlRGVzY3JpcHRvcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CitpbXBvcnQgYW5kcm9pZC50ZXN0LkFuZHJvaWRUZXN0Q2FzZTsKK2ltcG9ydCBhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7CitpbXBvcnQgYW5kcm9pZC51dGlsLkJhc2U2NDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IG9yZy5qc29uLkpTT05PYmplY3Q7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEubGFuZy5FeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKKworcHVibGljIGNsYXNzIEJhY2t1cERhdGFUZXN0IGV4dGVuZHMgQW5kcm9pZFRlc3RDYXNlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZMSA9ICJrZXkxIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZMiA9ICJrZXkyYSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWTMgPSAia2V5M2JjIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZNCA9ICJrZXk0ZGFkIjsgIC8vIHZhcmlhYmxlIGtleSBsZW5ndGhzIHRvIHRlc3QgcGFkZGluZworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEtFWVMgPSB7S0VZMSwgS0VZMiwgS0VZMywgS0VZNH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQTEgPSAiYWJjZGVmIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQTIgPSAiYWJjZGVmZyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEEzID0gImFiY2RlZmdoIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQTQgPSAiYWJjZGVmZmhpIjsgLy92YXJpYWJsZSBkYXRhIGxlbmd0aHMgdG8gdGVzdCBwYWRkaW5nCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gREFUQSA9IHtEQVRBMSwgREFUQTIsIERBVEEzLCBEQVRBNH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJCYWNrdXBEYXRhVGVzdCI7CisKKyAgICBwcml2YXRlIEZpbGUgbUZpbGU7CisgICAgcHJpdmF0ZSBQYXJjZWxGaWxlRGVzY3JpcHRvciBtRGF0YUZpbGU7CisgICAgcHJpdmF0ZSBGaWxlIG1EaXJlY3Rvcnk7CisgICAgcHJpdmF0ZSBCdW5kbGUgbVN0YXR1c0J1bmRsZTsKKyAgICBwcml2YXRlIEFzc2V0TWFuYWdlciBtQXNzZXRzOworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuc2V0VXAoKTsKKyAgICAgICAgbURpcmVjdG9yeSA9IG5ldyBGaWxlKEVudmlyb25tZW50LmdldEV4dGVybmFsU3RvcmFnZURpcmVjdG9yeSgpLCAidGVzdF9kYXRhIik7CisgICAgICAgIG1EaXJlY3RvcnkubWtkaXJzKCk7CisgICAgICAgIG1Bc3NldHMgPSBtQ29udGV4dC5nZXRBc3NldHMoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdXBlci50ZWFyRG93bigpOworICAgICAgICBpZiAobURhdGFGaWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1EYXRhRmlsZS5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFNpbmdsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIG1GaWxlID0gbmV3IEZpbGUobURpcmVjdG9yeSwgImJhY2t1cF9taXhlZF9zaW5sZ2UuZGF0Iik7CisgICAgICAgIG9wZW5Gb3JXcml0aW5nKCk7CisgICAgICAgIEJhY2t1cERhdGFPdXRwdXQgYmRvID0gbmV3IEJhY2t1cERhdGFPdXRwdXQobURhdGFGaWxlLmdldEZpbGVEZXNjcmlwdG9yKCkpOworCisgICAgICAgIHdyaXRlRW50aXR5KGJkbywgS0VZMSwgREFUQTEuZ2V0Qnl0ZXMoKSk7CisKKyAgICAgICAgbURhdGFGaWxlLmNsb3NlKCk7CisgICAgICAgIG9wZW5Gb3JSZWFkaW5nKCk7CisKKyAgICAgICAgQmFja3VwRGF0YUlucHV0IGJkaSA9IG5ldyBCYWNrdXBEYXRhSW5wdXQobURhdGFGaWxlLmdldEZpbGVEZXNjcmlwdG9yKCkpOworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICB3aGlsZSAoYmRpLnJlYWROZXh0SGVhZGVyKCkpIHsKKyAgICAgICAgICAgIHJlYWRBbmRWZXJpZnlFbnRpdHkoYmRpLCBLRVkxLCBEQVRBMS5nZXRCeXRlcygpKTsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJvbmx5IG9uZSBlbnRpdHkgaW4gdGhpcyBzdHJlYW0iLCAxLCBjb3VudCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdE11bHRpcGxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgbUZpbGUgPSBuZXcgRmlsZShtRGlyZWN0b3J5LCAiYmFja3VwX211bHRpcGxlX3Rlc3QuZGF0Iik7CisgICAgICAgIG9wZW5Gb3JXcml0aW5nKCk7CisgICAgICAgIEJhY2t1cERhdGFPdXRwdXQgYmRvID0gbmV3IEJhY2t1cERhdGFPdXRwdXQobURhdGFGaWxlLmdldEZpbGVEZXNjcmlwdG9yKCkpOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBLRVlTLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB3cml0ZUVudGl0eShiZG8sIEtFWVNbaV0sIERBVEFbaV0uZ2V0Qnl0ZXMoKSk7CisgICAgICAgIH0KKworICAgICAgICBtRGF0YUZpbGUuY2xvc2UoKTsKKyAgICAgICAgb3BlbkZvclJlYWRpbmcoKTsKKworICAgICAgICBCYWNrdXBEYXRhSW5wdXQgYmRpID0gbmV3IEJhY2t1cERhdGFJbnB1dChtRGF0YUZpbGUuZ2V0RmlsZURlc2NyaXB0b3IoKSk7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChiZGkucmVhZE5leHRIZWFkZXIoKSkgeworICAgICAgICAgICAgcmVhZEFuZFZlcmlmeUVudGl0eShiZGksIEtFWVNbY291bnRdLCBEQVRBW2NvdW50XS5nZXRCeXRlcygpKTsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJmb3VyIGVudGl0aWVzIGluIHRoaXMgc3RyZWFtIiwgS0VZUy5sZW5ndGgsIGNvdW50KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgbUZpbGUgPSBuZXcgRmlsZShtRGlyZWN0b3J5LCAiYmFja3VwX2RlbGV0ZV90ZXN0LmRhdCIpOworICAgICAgICBvcGVuRm9yV3JpdGluZygpOworICAgICAgICBCYWNrdXBEYXRhT3V0cHV0IGJkbyA9IG5ldyBCYWNrdXBEYXRhT3V0cHV0KG1EYXRhRmlsZS5nZXRGaWxlRGVzY3JpcHRvcigpKTsKKworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgS0VZUy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgZGVsZXRlRW50aXR5KGJkbywgS0VZU1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBtRGF0YUZpbGUuY2xvc2UoKTsKKyAgICAgICAgb3BlbkZvclJlYWRpbmcoKTsKKworICAgICAgICBCYWNrdXBEYXRhSW5wdXQgYmRpID0gbmV3IEJhY2t1cERhdGFJbnB1dChtRGF0YUZpbGUuZ2V0RmlsZURlc2NyaXB0b3IoKSk7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChiZGkucmVhZE5leHRIZWFkZXIoKSkgeworICAgICAgICAgICAgcmVhZEFuZFZlcmlmeURlbGV0ZWRFbnRpdHkoYmRpLCBLRVlTW2NvdW50XSk7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgICAgIGFzc2VydEVxdWFscygiZm91ciBkZWxldGVzIGluIHRoaXMgc3RyZWFtIiwgS0VZUy5sZW5ndGgsIGNvdW50KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TWl4ZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBtRmlsZSA9IG5ldyBGaWxlKG1EaXJlY3RvcnksICJiYWNrdXBfbWl4ZWRfdGVzdC5kYXQiKTsKKyAgICAgICAgb3BlbkZvcldyaXRpbmcoKTsKKworICAgICAgICBCYWNrdXBEYXRhT3V0cHV0IGJkbyA9IG5ldyBCYWNrdXBEYXRhT3V0cHV0KG1EYXRhRmlsZS5nZXRGaWxlRGVzY3JpcHRvcigpKTsKKworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIGRlbGV0ZUVudGl0eShiZG8sIEtFWVNbaV0pOyBpKys7CisgICAgICAgIHdyaXRlRW50aXR5KGJkbywgS0VZU1tpXSwgREFUQVtpXS5nZXRCeXRlcygpKTsgaSsrOworICAgICAgICB3cml0ZUVudGl0eShiZG8sIEtFWVNbaV0sIERBVEFbaV0uZ2V0Qnl0ZXMoKSk7IGkrKzsKKyAgICAgICAgZGVsZXRlRW50aXR5KGJkbywgS0VZU1tpXSk7IGkrKzsKKworICAgICAgICBtRGF0YUZpbGUuY2xvc2UoKTsKKyAgICAgICAgb3BlbkZvclJlYWRpbmcoKTsKKworICAgICAgICBCYWNrdXBEYXRhSW5wdXQgYmRpID0gbmV3IEJhY2t1cERhdGFJbnB1dChtRGF0YUZpbGUuZ2V0RmlsZURlc2NyaXB0b3IoKSk7CisgICAgICAgIGludCBvdXQgPSAwOworICAgICAgICBhc3NlcnRUcnVlKGJkaS5yZWFkTmV4dEhlYWRlcigpKTsKKyAgICAgICAgcmVhZEFuZFZlcmlmeURlbGV0ZWRFbnRpdHkoYmRpLCBLRVlTW291dF0pOyBvdXQrKzsKKyAgICAgICAgYXNzZXJ0VHJ1ZShiZGkucmVhZE5leHRIZWFkZXIoKSk7CisgICAgICAgIHJlYWRBbmRWZXJpZnlFbnRpdHkoYmRpLCBLRVlTW291dF0sIERBVEFbb3V0XS5nZXRCeXRlcygpKTsgb3V0Kys7CisgICAgICAgIGFzc2VydFRydWUoYmRpLnJlYWROZXh0SGVhZGVyKCkpOworICAgICAgICByZWFkQW5kVmVyaWZ5RW50aXR5KGJkaSwgS0VZU1tvdXRdLCBEQVRBW291dF0uZ2V0Qnl0ZXMoKSk7IG91dCsrOworICAgICAgICBhc3NlcnRUcnVlKGJkaS5yZWFkTmV4dEhlYWRlcigpKTsKKyAgICAgICAgcmVhZEFuZFZlcmlmeURlbGV0ZWRFbnRpdHkoYmRpLCBLRVlTW291dF0pOyBvdXQrKzsKKyAgICAgICAgYXNzZXJ0RmFsc2UoImZvdXIgaXRlbXMgaW4gdGhpcyBzdHJlYW0iLAorICAgICAgICAgICAgICAgIGJkaS5yZWFkTmV4dEhlYWRlcigpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UmVhZE1vY2tEYXRhKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgY29weUFzc2V0VG9GaWxlKCJiYWNrdXBfbW9jay5kYXQiLCAiYmFja3VwX3JlYWRfbW9ja190ZXN0LmRhdCIpOworCisgICAgICAgIG9wZW5Gb3JSZWFkaW5nKCk7CisgICAgICAgIEJhY2t1cERhdGFJbnB1dCBiZGkgPSBuZXcgQmFja3VwRGF0YUlucHV0KG1EYXRhRmlsZS5nZXRGaWxlRGVzY3JpcHRvcigpKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgdHJ1dGggPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKAorICAgICAgICAgICAgICAgIG1Bc3NldHMub3BlbkZkKCJiYWNrdXBfbW9jay5nbGQiKS5jcmVhdGVJbnB1dFN0cmVhbSgpKSk7CisgICAgICAgIHdoaWxlKCBiZGkucmVhZE5leHRIZWFkZXIoKSkgeworICAgICAgICAgICAgU3RyaW5nW10gZXhwZWN0ZWQgPSB0cnV0aC5yZWFkTGluZSgpLnNwbGl0KCI6Iik7CisgICAgICAgICAgICBieXRlW10gZXhwZWN0ZWRCeXRlcyA9IG51bGw7CisgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAgIGV4cGVjdGVkQnl0ZXMgPSBCYXNlNjQuZGVjb2RlKGV4cGVjdGVkWzFdLCBCYXNlNjQuREVGQVVMVCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmcga2V5ID0gYmRpLmdldEtleSgpOworICAgICAgICAgICAgaW50IGRhdGFTaXplID0gYmRpLmdldERhdGFTaXplKCk7CisKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygid3Jvbmcga2V5IiwgZXhwZWN0ZWRbMF0sIGtleSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIndyb25nIGxlbmd0aCBmb3Iga2V5ICIgKyBrZXksCisgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZEJ5dGVzID09IG51bGwgPyAtMTogZXhwZWN0ZWRCeXRlcy5sZW5ndGgpLCBkYXRhU2l6ZSk7CisgICAgICAgICAgICBpZiAoZGF0YVNpemUgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbZGF0YVNpemVdOworICAgICAgICAgICAgICAgIGJkaS5yZWFkRW50aXR5RGF0YShidWZmZXIsIDAsIGRhdGFTaXplKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIndyb25nIGRhdGEgZm9yIGtleSAiICsga2V5LCBleHBlY3RlZFsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2U2NC5lbmNvZGVUb1N0cmluZyhidWZmZXIsIDAsIGRhdGFTaXplLCBCYXNlNjQuTk9fV1JBUCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFzc2VydE51bGwoInRoZXJlIGFyZSB1bnVzZWQgZW50cmllcyBpbiB0aGUgZ29sZGVuIGZpbGUiLCB0cnV0aC5yZWFkTGluZSgpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UmVhZFJlYWxEYXRhKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgY29weUFzc2V0VG9GaWxlKCJiYWNrdXBfcmVhbC5kYXQiLCAiYmFja3VwX3JlYWRfcmVhbF90ZXN0LmRhdCIpOworCisgICAgICAgIG9wZW5Gb3JSZWFkaW5nKCk7CisgICAgICAgIEJhY2t1cERhdGFJbnB1dCBiZGkgPSBuZXcgQmFja3VwRGF0YUlucHV0KG1EYXRhRmlsZS5nZXRGaWxlRGVzY3JpcHRvcigpKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgdHJ1dGggPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKAorICAgICAgICAgICAgICAgIG1Bc3NldHMub3BlbkZkKCJiYWNrdXBfcmVhbC5nbGQiKS5jcmVhdGVJbnB1dFN0cmVhbSgpKSk7CisKKyAgICAgICAgd2hpbGUoYmRpLnJlYWROZXh0SGVhZGVyKCkpIHsKKyAgICAgICAgICAgIFN0cmluZ1tdIGV4cGVjdGVkID0gdHJ1dGgucmVhZExpbmUoKS5zcGxpdCgiOiIpOworICAgICAgICAgICAgYnl0ZVtdIGV4cGVjdGVkQnl0ZXMgPSBudWxsOworICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICBleHBlY3RlZEJ5dGVzID0gQmFzZTY0LmRlY29kZShleHBlY3RlZFsxXSwgQmFzZTY0LkRFRkFVTFQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIGtleSA9IGJkaS5nZXRLZXkoKTsKKyAgICAgICAgICAgIGludCBkYXRhU2l6ZSA9IGJkaS5nZXREYXRhU2l6ZSgpOworCisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIndyb25nIGtleSIsIGV4cGVjdGVkWzBdLCBrZXkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3cm9uZyBsZW5ndGggZm9yIGtleSAiICsga2V5LAorICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRCeXRlcyA9PSBudWxsID8gLTE6IGV4cGVjdGVkQnl0ZXMubGVuZ3RoKSwgZGF0YVNpemUpOworICAgICAgICAgICAgaWYgKGRhdGFTaXplICE9IC0xKSB7CisgICAgICAgICAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlW2RhdGFTaXplXTsKKyAgICAgICAgICAgICAgICBiZGkucmVhZEVudGl0eURhdGEoYnVmZmVyLCAwLCBkYXRhU2l6ZSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3cm9uZyBkYXRhIGZvciBrZXkgIiArIGtleSwgZXhwZWN0ZWRbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICBCYXNlNjQuZW5jb2RlVG9TdHJpbmcoYnVmZmVyLCAwLCBkYXRhU2l6ZSwgQmFzZTY0Lk5PX1dSQVApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhc3NlcnROdWxsKCJ0aGVyZSBhcmUgdW51c2VkIGVudHJpZXMgaW4gdGhlIGdvbGRlbiBmaWxlIiwgdHJ1dGgucmVhZExpbmUoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNvcHlBc3NldFRvRmlsZShTdHJpbmcgc291cmNlLCBTdHJpbmcgZGVzdGluYXRpb24pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIG1GaWxlID0gbmV3IEZpbGUobURpcmVjdG9yeSwgZGVzdGluYXRpb24pOworICAgICAgICBvcGVuRm9yV3JpdGluZygpOworICAgICAgICBGaWxlSW5wdXRTdHJlYW0gZmlsZUlucHV0U3RyZWFtID0gbUFzc2V0cy5vcGVuRmQoc291cmNlKS5jcmVhdGVJbnB1dFN0cmVhbSgpOworICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZpbGVPdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShtRGF0YUZpbGUuZ2V0RmlsZURlc2NyaXB0b3IoKSk7CisgICAgICAgIGJ5dGVbXSBjb3B5YnVmZmVyID0gbmV3IGJ5dGVbMTAyNF07CisgICAgICAgIGludCBudW1CeXRlcyA9IGZpbGVJbnB1dFN0cmVhbS5yZWFkKGNvcHlidWZmZXIpOworICAgICAgICBmaWxlT3V0cHV0U3RyZWFtLndyaXRlKGNvcHlidWZmZXIsIDAsIG51bUJ5dGVzKTsKKyAgICAgICAgZmlsZU91dHB1dFN0cmVhbS5jbG9zZSgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBvcGVuRm9yV3JpdGluZygpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICBtRGF0YUZpbGUgPSBQYXJjZWxGaWxlRGVzY3JpcHRvci5vcGVuKG1GaWxlLAorICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfV1JJVEVfT05MWSB8CisgICAgICAgICAgICAgICAgICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRvci5NT0RFX0NSRUFURSB8CisgICAgICAgICAgICAgICAgICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRvci5NT0RFX1RSVU5DQVRFKTsgIC8vIE1ha2UgYW4gZW1wdHkgZmlsZSBpZiBuZWNlc3NhcnkKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgb3BlbkZvclJlYWRpbmcoKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgbURhdGFGaWxlID0gUGFyY2VsRmlsZURlc2NyaXB0b3Iub3BlbihtRmlsZSwKKyAgICAgICAgICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRvci5NT0RFX1JFQURfT05MWSB8CisgICAgICAgICAgICAgICAgICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRvci5NT0RFX0NSRUFURSk7ICAvLyBNYWtlIGFuIGVtcHR5IGZpbGUgaWYgbmVjZXNzYXJ5CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHdyaXRlRW50aXR5KEJhY2t1cERhdGFPdXRwdXQgYmRvLCBTdHJpbmcga2V5LCBieXRlW10gZGF0YSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaW50IHN0YXR1cyA9IGJkby53cml0ZUVudGl0eUhlYWRlcihrZXksIGRhdGEubGVuZ3RoKTsKKyAgICAgICAgLy8gZG9jdW1lbnRhdGlvbiBzYXlzICJudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiIgYnV0IHRoYXQncyBub3Qgd2hhdCB3ZSBnZXQ6CisgICAgICAgIGFzc2VydEVxdWFscygwLCBzdGF0dXMpOworCisgICAgICAgIHN0YXR1cyA9IGJkby53cml0ZUVudGl0eURhdGEoZGF0YSwgZGF0YS5sZW5ndGgpOworICAgICAgICAvLyBkb2N1bWVudGF0aW9uIHNheXMgIm51bWJlciBvZiBieXRlcyB3cml0dGVuIiBidXQgdGhhdCdzIG5vdCB3aGF0IHdlIGdldDoKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHN0YXR1cyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUVudGl0eShCYWNrdXBEYXRhT3V0cHV0IGJkbywgU3RyaW5nIGtleSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaW50IHN0YXR1cyA9IGJkby53cml0ZUVudGl0eUhlYWRlcihrZXksIC0xKTsKKyAgICAgICAgLy8gZG9jdW1lbnRhdGlvbiBzYXlzICJudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiIgYnV0IHRoYXQncyBub3Qgd2hhdCB3ZSBnZXQ6CisgICAgICAgIGFzc2VydEVxdWFscygwLCBzdGF0dXMpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCByZWFkQW5kVmVyaWZ5RW50aXR5KEJhY2t1cERhdGFJbnB1dCBiZGksIFN0cmluZyBleHBlY3RlZEtleSwgYnl0ZVtdIGV4cGVjdGVkRGF0YSkKKyAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGFzc2VydEVxdWFscygiS2V5IG1pc21hdGNoIiwKKyAgICAgICAgICAgICAgICBleHBlY3RlZEtleSwgYmRpLmdldEtleSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJkYXRhIHNpemUgbWlzbWF0Y2giLAorICAgICAgICAgICAgICAgIGV4cGVjdGVkRGF0YS5sZW5ndGgsIGJkaS5nZXREYXRhU2l6ZSgpKTsKKyAgICAgICAgYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVtiZGkuZ2V0RGF0YVNpemUoKV07CisgICAgICAgIGJkaS5yZWFkRW50aXR5RGF0YShkYXRhLCAwLCBiZGkuZ2V0RGF0YVNpemUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygicGF5bG9hZCBzaXplIGlzIHdyb25nIiwKKyAgICAgICAgICAgICAgICBleHBlY3RlZERhdGEubGVuZ3RoLCBkYXRhLmxlbmd0aCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwYXlsb2FkIG1pc21hdGNoIiwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWREYXRhW2ldLCBkYXRhW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcml2YXRlIHZvaWQgcmVhZEFuZFZlcmlmeURlbGV0ZWRFbnRpdHkoQmFja3VwRGF0YUlucHV0IGJkaSwgU3RyaW5nIGV4cGVjdGVkS2V5KQorICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJLZXkgbWlzbWF0Y2giLAorICAgICAgICAgICAgICAgIGV4cGVjdGVkS2V5LCBiZGkuZ2V0S2V5KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoImRlbGV0aW9uIG1pcy1yZXBvcnRlZCIsCisgICAgICAgICAgICAgICAgLTEsIGJkaS5nZXREYXRhU2l6ZSgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC9uZXQvU1NMU2Vzc2lvbkNhY2hlVGVzdC5qYXZhIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvbmV0L1NTTFNlc3Npb25DYWNoZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTE5MzAzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvbmV0L1NTTFNlc3Npb25DYWNoZVRlc3QuamF2YQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlCisgKi8KKworcGFja2FnZSBhbmRyb2lkLm5ldDsKKworaW1wb3J0IGNvbS5hbmRyb2lkLm9yZy5jb25zY3J5cHQuQ2xpZW50U2Vzc2lvbkNvbnRleHQ7CitpbXBvcnQgY29tLmFuZHJvaWQub3JnLmNvbnNjcnlwdC5TU0xDbGllbnRTZXNzaW9uQ2FjaGU7CisKK2ltcG9ydCBjb20uZ29vZ2xlLnRlc3RpbmcubGl0dGxlbW9jay5MaXR0bGVNb2NrOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgamF2YS5zZWN1cml0eS5LZXlNYW5hZ2VtZW50RXhjZXB0aW9uOworaW1wb3J0IGphdmEuc2VjdXJpdHkuU2VjdXJlUmFuZG9tOworCitpbXBvcnQgamF2YXgubmV0LnNzbC5LZXlNYW5hZ2VyOworaW1wb3J0IGphdmF4Lm5ldC5zc2wuU1NMQ29udGV4dDsKK2ltcG9ydCBqYXZheC5uZXQuc3NsLlNTTENvbnRleHRTcGk7CitpbXBvcnQgamF2YXgubmV0LnNzbC5TU0xFbmdpbmU7CitpbXBvcnQgamF2YXgubmV0LnNzbC5TU0xTZXJ2ZXJTb2NrZXRGYWN0b3J5OworaW1wb3J0IGphdmF4Lm5ldC5zc2wuU1NMU2Vzc2lvbkNvbnRleHQ7CitpbXBvcnQgamF2YXgubmV0LnNzbC5TU0xTb2NrZXRGYWN0b3J5OworaW1wb3J0IGphdmF4Lm5ldC5zc2wuVHJ1c3RNYW5hZ2VyOworCitwdWJsaWMgY2xhc3MgU1NMU2Vzc2lvbkNhY2hlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworICAgIHB1YmxpYyB2b2lkIHRlc3RJbnN0YWxsX2NvbXBhdGlibGVDb250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFNTTENvbnRleHQgY3R4ID0gU1NMQ29udGV4dC5nZXREZWZhdWx0KCk7CisgICAgICAgIGZpbmFsIFNTTENsaWVudFNlc3Npb25DYWNoZSBtb2NrID0gTGl0dGxlTW9jay5tb2NrKFNTTENsaWVudFNlc3Npb25DYWNoZS5jbGFzcyk7CisgICAgICAgIGZpbmFsIENsaWVudFNlc3Npb25Db250ZXh0IGNsaWVudEN0eCA9IChDbGllbnRTZXNzaW9uQ29udGV4dCkgY3R4LmdldENsaWVudFNlc3Npb25Db250ZXh0KCk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFNTTFNlc3Npb25DYWNoZS5pbnN0YWxsKG5ldyBTU0xTZXNzaW9uQ2FjaGUobW9jayksIGN0eCk7CisgICAgICAgICAgICBjbGllbnRDdHguZ2V0U2Vzc2lvbigid3d3LmZvb2dsZS5jb20iLCA0NDMpOworICAgICAgICAgICAgTGl0dGxlTW9jay52ZXJpZnkobW9jaykuZ2V0U2Vzc2lvbkRhdGEoTGl0dGxlTW9jay5hbnlTdHJpbmcoKSwgTGl0dGxlTW9jay5hbnlJbnQoKSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAvLyBSZXN0b3JlIGNhY2hlbGVzcyBiZWhhdmlvdXIuCisgICAgICAgICAgICBTU0xTZXNzaW9uQ2FjaGUuaW5zdGFsbChudWxsLCBjdHgpOworICAgICAgICAgICAgY2xpZW50Q3R4LmdldFNlc3Npb24oInd3dy5mb29nbGUuY29tIiwgNDQzKTsKKyAgICAgICAgICAgIExpdHRsZU1vY2sudmVyaWZ5Tm9Nb3JlSW50ZXJhY3Rpb25zKG1vY2spOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdEluc3RhbGxfaW5jb21wYXRpYmxlQ29udGV4dCgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFNTTFNlc3Npb25DYWNoZS5pbnN0YWxsKAorICAgICAgICAgICAgICAgICAgICBuZXcgU1NMU2Vzc2lvbkNhY2hlKExpdHRsZU1vY2subW9jayhTU0xDbGllbnRTZXNzaW9uQ2FjaGUuY2xhc3MpKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IEZha2VTU0xDb250ZXh0KCkpOworICAgICAgICAgICAgZmFpbCgpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXhwZWN0ZWQpIHt9CisgICAgfQorCisgICAgc3RhdGljIGZpbmFsIGNsYXNzIEZha2VTU0xDb250ZXh0IGV4dGVuZHMgU1NMQ29udGV4dCB7CisgICAgICAgIHByb3RlY3RlZCBGYWtlU1NMQ29udGV4dCgpIHsKKyAgICAgICAgICAgIHN1cGVyKG5ldyBGYWtlU1NMQ29udGV4dFNwaSgpLCBudWxsLCAidGVzdCIpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGZpbmFsIGNsYXNzIEZha2VTU0xDb250ZXh0U3BpIGV4dGVuZHMgU1NMQ29udGV4dFNwaSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbmdpbmVJbml0KEtleU1hbmFnZXJbXSBrZXlNYW5hZ2VycywgVHJ1c3RNYW5hZ2VyW10gdHJ1c3RNYW5hZ2VycywKKyAgICAgICAgICAgICAgICBTZWN1cmVSYW5kb20gc2VjdXJlUmFuZG9tKSB0aHJvd3MgS2V5TWFuYWdlbWVudEV4Y2VwdGlvbiB7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIFNTTFNvY2tldEZhY3RvcnkgZW5naW5lR2V0U29ja2V0RmFjdG9yeSgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBTU0xTZXJ2ZXJTb2NrZXRGYWN0b3J5IGVuZ2luZUdldFNlcnZlclNvY2tldEZhY3RvcnkoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgU1NMRW5naW5lIGVuZ2luZUNyZWF0ZVNTTEVuZ2luZShTdHJpbmcgcywgaW50IGkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBTU0xFbmdpbmUgZW5naW5lQ3JlYXRlU1NMRW5naW5lKCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIFNTTFNlc3Npb25Db250ZXh0IGVuZ2luZUdldFNlcnZlclNlc3Npb25Db250ZXh0KCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIFNTTFNlc3Npb25Db250ZXh0IGVuZ2luZUdldENsaWVudFNlc3Npb25Db250ZXh0KCkgeworICAgICAgICAgICAgcmV0dXJuIExpdHRsZU1vY2subW9jayhTU0xTZXNzaW9uQ29udGV4dC5jbGFzcyk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC90ZXh0L0h0bWxUZXN0LmphdmEgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC90ZXh0L0h0bWxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMjk4ZjcuLjAwMDAwMDAKLS0tIGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvdGV4dC9IdG1sVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudGV4dDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3Q7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5UeXBlZmFjZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotaW1wb3J0IGFuZHJvaWQudGV4dC5zdHlsZS5Gb3JlZ3JvdW5kQ29sb3JTcGFuOwotaW1wb3J0IGFuZHJvaWQudGV4dC5zdHlsZS5RdW90ZVNwYW47Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLlN0cmlrZXRocm91Z2hTcGFuOwotaW1wb3J0IGFuZHJvaWQudGV4dC5zdHlsZS5TdHlsZVNwYW47Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLlN1YnNjcmlwdFNwYW47Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLlN1cGVyc2NyaXB0U3BhbjsKLWltcG9ydCBhbmRyb2lkLnRleHQuc3R5bGUuVGV4dEFwcGVhcmFuY2VTcGFuOwotaW1wb3J0IGFuZHJvaWQudGV4dC5zdHlsZS5UeXBlZmFjZVNwYW47Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLlVSTFNwYW47Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLlVuZGVybGluZVNwYW47Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBIdG1sVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotICAgIEBTbWFsbFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2luZ2xlVGFnT25XaGlsZVN0cmluZygpIHsKLSAgICAgICAgU3Bhbm5lZCBzcGFubmVkID0gSHRtbC5mcm9tSHRtbCgiPGI+aGVsbG88L2I+Iik7Ci0gICAgICAgIE9iamVjdFtdIHNwYW5zID0gc3Bhbm5lZC5nZXRTcGFucygtMSwgMTAwLCBPYmplY3QuY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc3BhbnMubGVuZ3RoKTsKLSAgICAgICAgT2JqZWN0IHNwYW4gPSBzcGFuc1swXTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHNwYW5uZWQuZ2V0U3BhblN0YXJ0KHNwYW4pKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIHNwYW5uZWQuZ2V0U3BhbkVuZChzcGFuKSk7Ci0gICAgfQotCi0gICAgQFNtYWxsVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RFbXB0eUZvbnRUYWcoKSB7Ci0gICAgICAgIFNwYW5uZWQgc3Bhbm5lZCA9IEh0bWwuZnJvbUh0bWwoIkhlbGxvIDxmb250IGNvbG9yPVwiI2ZmMDBmZjAwXCI+PC9mb250PiIpOwotICAgICAgICBPYmplY3RbXSBzcGFucyA9IHNwYW5uZWQuZ2V0U3BhbnMoMCwgMTAwLCBPYmplY3QuY2xhc3MpOwotICAgICAgICAvLyBUT0RPOiBmaWd1cmUgb3V0IHdoYXQgdGhlIHNwYW5zIHNob3VsZCBiZSBhZnRlciB0aGUgY3Jhc2hlcyBhcmUgZml4ZWQgYW5kIGFzc2VydCB0aGVtLgotICAgIH0KLQotICAgIC8qKiBUZXN0cyB0aGF0IHRoZSBwYXJzZXIgY2FuIGhhbmRsZSBtYWwtZm9ybWVkIEhUTUwuICovCi0gICAgQFNtYWxsVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RCYWRIdG1sKCkgewotICAgICAgICBTcGFubmVkIHNwYW5uZWQgPSBIdG1sLmZyb21IdG1sKCJIZWxsbyA8Yj5iPGk+Ymk8L2I+aTwvaT4iKTsKLSAgICAgICAgT2JqZWN0W10gc3BhbnMgPSBzcGFubmVkLmdldFNwYW5zKDAsIDEwMCwgT2JqZWN0LmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFR5cGVmYWNlLklUQUxJQywgKChTdHlsZVNwYW4pIHNwYW5zWzBdKS5nZXRTdHlsZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDcsIHNwYW5uZWQuZ2V0U3BhblN0YXJ0KHNwYW5zWzBdKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg5LCBzcGFubmVkLmdldFNwYW5FbmQoc3BhbnNbMF0pKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFR5cGVmYWNlLkJPTEQsICgoU3R5bGVTcGFuKSBzcGFuc1sxXSkuZ2V0U3R5bGUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBzcGFubmVkLmdldFNwYW5TdGFydChzcGFuc1sxXSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoOSwgc3Bhbm5lZC5nZXRTcGFuRW5kKHNwYW5zWzFdKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhUeXBlZmFjZS5JVEFMSUMsICgoU3R5bGVTcGFuKSBzcGFuc1syXSkuZ2V0U3R5bGUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg5LCBzcGFubmVkLmdldFNwYW5TdGFydChzcGFuc1syXSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTAsIHNwYW5uZWQuZ2V0U3BhbkVuZChzcGFuc1syXSkpOwotICAgIH0KLQotICAgIEBTbWFsbFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U3ltYm9scygpIHsKLSAgICAgICAgU3RyaW5nIHNwYW5uZWQgPSBIdG1sLmZyb21IdG1sKCImY29weTsgJmd0OyAmbHQiKS50b1N0cmluZygpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIlx1MDBhOSA+IDwiLCBzcGFubmVkKTsKLSAgICB9Ci0gICAgCi0gICAgQFNtYWxsVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RDb2xvcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTcGFubmVkIHM7Ci0gICAgICAgIEZvcmVncm91bmRDb2xvclNwYW5bXSBjb2xvcnM7Ci0KLSAgICAgICAgcyA9IEh0bWwuZnJvbUh0bWwoIjxmb250IGNvbG9yPVwiIzAwRkYwMFwiPnNvbWV0aGluZzwvZm9udD4iKTsKLSAgICAgICAgY29sb3JzID0gcy5nZXRTcGFucygwLCBzLmxlbmd0aCgpLCBGb3JlZ3JvdW5kQ29sb3JTcGFuLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvbG9ycy5sZW5ndGgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMHhGRjAwRkYwMCwgY29sb3JzWzBdLmdldEZvcmVncm91bmRDb2xvcigpKTsKLQotICAgICAgICBzID0gSHRtbC5mcm9tSHRtbCgiPGZvbnQgY29sb3I9XCJuYXZ5XCI+c29tZXRoaW5nPC9mb250PiIpOwotICAgICAgICBjb2xvcnMgPSBzLmdldFNwYW5zKDAsIHMubGVuZ3RoKCksIEZvcmVncm91bmRDb2xvclNwYW4uY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY29sb3JzLmxlbmd0aCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygweEZGMDAwMDgwLCBjb2xvcnNbMF0uZ2V0Rm9yZWdyb3VuZENvbG9yKCkpOwotCi0gICAgICAgIHMgPSBIdG1sLmZyb21IdG1sKCI8Zm9udCBjb2xvcj1cImdpYmJlcmlzaFwiPnNvbWV0aGluZzwvZm9udD4iKTsKLSAgICAgICAgY29sb3JzID0gcy5nZXRTcGFucygwLCBzLmxlbmd0aCgpLCBGb3JlZ3JvdW5kQ29sb3JTcGFuLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGNvbG9ycy5sZW5ndGgpOwotICAgIH0KLQotICAgIEBTbWFsbFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0UmVzb3VyY2VDb2xvcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBDb2xvclN0YXRlTGlzdCBjID0KLSAgICAgICAgICAgICAgICBSZXNvdXJjZXMuZ2V0U3lzdGVtKCkuZ2V0Q29sb3JTdGF0ZUxpc3QoYW5kcm9pZC5SLmNvbG9yLnByaW1hcnlfdGV4dF9kYXJrKTsKLSAgICAgICAgU3Bhbm5lZCBzOwotICAgICAgICBUZXh0QXBwZWFyYW5jZVNwYW5bXSBjb2xvcnM7Ci0KLSAgICAgICAgcyA9IEh0bWwuZnJvbUh0bWwoIjxmb250IGNvbG9yPVwiQGFuZHJvaWQ6Y29sb3IvcHJpbWFyeV90ZXh0X2RhcmtcIj5zb21ldGhpbmc8L2ZvbnQ+Iik7Ci0gICAgICAgIGNvbG9ycyA9IHMuZ2V0U3BhbnMoMCwgcy5sZW5ndGgoKSwgVGV4dEFwcGVhcmFuY2VTcGFuLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvbG9ycy5sZW5ndGgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoYy50b1N0cmluZygpLCBjb2xvcnNbMF0uZ2V0VGV4dENvbG9yKCkudG9TdHJpbmcoKSk7Ci0KLSAgICAgICAgcyA9IEh0bWwuZnJvbUh0bWwoIjxmb250IGNvbG9yPVwiQGFuZHJvaWQ6cHJpbWFyeV90ZXh0X2RhcmtcIj5zb21ldGhpbmc8L2ZvbnQ+Iik7Ci0gICAgICAgIGNvbG9ycyA9IHMuZ2V0U3BhbnMoMCwgcy5sZW5ndGgoKSwgVGV4dEFwcGVhcmFuY2VTcGFuLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvbG9ycy5sZW5ndGgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoYy50b1N0cmluZygpLCBjb2xvcnNbMF0uZ2V0VGV4dENvbG9yKCkudG9TdHJpbmcoKSk7Ci0KLSAgICAgICAgcyA9IEh0bWwuZnJvbUh0bWwoIjxmb250IGNvbG9yPVwiQGNvbG9yL3ByaW1hcnlfdGV4dF9kYXJrXCI+c29tZXRoaW5nPC9mb250PiIpOwotICAgICAgICBjb2xvcnMgPSBzLmdldFNwYW5zKDAsIHMubGVuZ3RoKCksIFRleHRBcHBlYXJhbmNlU3Bhbi5jbGFzcyk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb2xvcnMubGVuZ3RoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGMudG9TdHJpbmcoKSwgY29sb3JzWzBdLmdldFRleHRDb2xvcigpLnRvU3RyaW5nKCkpOwotCi0gICAgICAgIHMgPSBIdG1sLmZyb21IdG1sKCI8Zm9udCBjb2xvcj1cIkBwcmltYXJ5X3RleHRfZGFya1wiPnNvbWV0aGluZzwvZm9udD4iKTsKLSAgICAgICAgY29sb3JzID0gcy5nZXRTcGFucygwLCBzLmxlbmd0aCgpLCBUZXh0QXBwZWFyYW5jZVNwYW4uY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY29sb3JzLmxlbmd0aCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjLnRvU3RyaW5nKCksIGNvbG9yc1swXS5nZXRUZXh0Q29sb3IoKS50b1N0cmluZygpKTsKLQotICAgICAgICBzID0gSHRtbC5mcm9tSHRtbCgiPGZvbnQgY29sb3I9XCJAIiArIGFuZHJvaWQuUi5jb2xvci5wcmltYXJ5X3RleHRfZGFyawotICAgICAgICAgICAgICAgICsgIlwiPnNvbWV0aGluZzwvZm9udD4iKTsKLSAgICAgICAgY29sb3JzID0gcy5nZXRTcGFucygwLCBzLmxlbmd0aCgpLCBUZXh0QXBwZWFyYW5jZVNwYW4uY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY29sb3JzLmxlbmd0aCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjLnRvU3RyaW5nKCksIGNvbG9yc1swXS5nZXRUZXh0Q29sb3IoKS50b1N0cmluZygpKTsKLQotICAgICAgICBzID0gSHRtbC5mcm9tSHRtbCgiPGZvbnQgY29sb3I9XCJnaWJiZXJpc2hcIj5zb21ldGhpbmc8L2ZvbnQ+Iik7Ci0gICAgICAgIGNvbG9ycyA9IHMuZ2V0U3BhbnMoMCwgcy5sZW5ndGgoKSwgVGV4dEFwcGVhcmFuY2VTcGFuLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbG9ycy5sZW5ndGgsIDApOwotICAgIH0KLQotICAgIEBTbWFsbFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0UGFyYWdyYXBocygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTcGFubmFibGVTdHJpbmcgczsKLQotICAgICAgICBzID0gbmV3IFNwYW5uYWJsZVN0cmluZygiSGVsbG8gd29ybGQiKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEh0bWwudG9IdG1sKHMpLCAiPHA+SGVsbG8gd29ybGQ8L3A+XG4iKTsKLQotICAgICAgICBzID0gbmV3IFNwYW5uYWJsZVN0cmluZygiSGVsbG8gd29ybGRcbm9yIHNvbWV0aGluZyIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSHRtbC50b0h0bWwocyksICI8cD5IZWxsbyB3b3JsZDxicj5cbm9yIHNvbWV0aGluZzwvcD5cbiIpOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyB3b3JsZFxuXG5vciBzb21ldGhpbmciKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEh0bWwudG9IdG1sKHMpLCAiPHA+SGVsbG8gd29ybGQ8L3A+XG48cD5vciBzb21ldGhpbmc8L3A+XG4iKTsKLQotICAgICAgICBzID0gbmV3IFNwYW5uYWJsZVN0cmluZygiSGVsbG8gd29ybGRcblxuXG5vciBzb21ldGhpbmciKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEh0bWwudG9IdG1sKHMpLCAiPHA+SGVsbG8gd29ybGQ8YnI+PC9wPlxuPHA+b3Igc29tZXRoaW5nPC9wPlxuIik7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJmb29cbmJhciIsIEh0bWwuZnJvbUh0bWwoImZvbzxicj5iYXIiKS50b1N0cmluZygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJmb29cbmJhciIsIEh0bWwuZnJvbUh0bWwoImZvbzxicj5cbmJhciIpLnRvU3RyaW5nKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImZvb1xuYmFyIiwgSHRtbC5mcm9tSHRtbCgiZm9vPGJyPlxuIFxuYmFyIikudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgQFNtYWxsVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RCbG9ja3F1b3RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFNwYW5uYWJsZVN0cmluZyBzOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyB3b3JsZCIpOwotICAgICAgICBzLnNldFNwYW4obmV3IFF1b3RlU3BhbigpLCAwLCBzLmxlbmd0aCgpLCBTcGFubmFibGUuU1BBTl9QQVJBR1JBUEgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSHRtbC50b0h0bWwocyksICI8YmxvY2txdW90ZT48cD5IZWxsbyB3b3JsZDwvcD5cbjwvYmxvY2txdW90ZT5cbiIpOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsb1xuXG53b3JsZCIpOwotICAgICAgICBzLnNldFNwYW4obmV3IFF1b3RlU3BhbigpLCAwLCA3LCBTcGFubmFibGUuU1BBTl9QQVJBR1JBUEgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSHRtbC50b0h0bWwocyksICI8YmxvY2txdW90ZT48cD5IZWxsbzwvcD5cbjwvYmxvY2txdW90ZT5cbjxwPndvcmxkPC9wPlxuIik7Ci0gICAgfQotCi0gICAgQFNtYWxsVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RFbnRpdGllcygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTcGFubmFibGVTdHJpbmcgczsKLQotICAgICAgICBzID0gbmV3IFNwYW5uYWJsZVN0cmluZygiSGVsbG8gPCY+IHdvcmxkIik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhIdG1sLnRvSHRtbChzKSwgIjxwPkhlbGxvICZsdDsmYW1wOyZndDsgd29ybGQ8L3A+XG4iKTsKLQotICAgICAgICBzID0gbmV3IFNwYW5uYWJsZVN0cmluZygiSGVsbG8gXHUwM0Q1IHdvcmxkIik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhIdG1sLnRvSHRtbChzKSwgIjxwPkhlbGxvICYjOTgxOyB3b3JsZDwvcD5cbiIpOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyAgd29ybGQiKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEh0bWwudG9IdG1sKHMpLCAiPHA+SGVsbG8mbmJzcDsgd29ybGQ8L3A+XG4iKTsKLSAgICB9Ci0KLSAgICBAU21hbGxUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdE1hcmt1cCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTcGFubmFibGVTdHJpbmcgczsKLQotICAgICAgICBzID0gbmV3IFNwYW5uYWJsZVN0cmluZygiSGVsbG8gYm9sZCB3b3JsZCIpOwotICAgICAgICBzLnNldFNwYW4obmV3IFN0eWxlU3BhbihUeXBlZmFjZS5CT0xEKSwgNiwgcy5sZW5ndGgoKSAtIDYsCi0gICAgICAgICAgICAgICAgICBTcGFubmFibGUuU1BBTl9FWENMVVNJVkVfSU5DTFVTSVZFKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEh0bWwudG9IdG1sKHMpLCAiPHA+SGVsbG8gPGI+Ym9sZDwvYj4gd29ybGQ8L3A+XG4iKTsKLQotICAgICAgICBzID0gbmV3IFNwYW5uYWJsZVN0cmluZygiSGVsbG8gaXRhbGljIHdvcmxkIik7Ci0gICAgICAgIHMuc2V0U3BhbihuZXcgU3R5bGVTcGFuKFR5cGVmYWNlLklUQUxJQyksIDYsIHMubGVuZ3RoKCkgLSA2LAotICAgICAgICAgICAgICAgICAgU3Bhbm5hYmxlLlNQQU5fRVhDTFVTSVZFX0lOQ0xVU0lWRSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhIdG1sLnRvSHRtbChzKSwgIjxwPkhlbGxvIDxpPml0YWxpYzwvaT4gd29ybGQ8L3A+XG4iKTsKLQotICAgICAgICBzID0gbmV3IFNwYW5uYWJsZVN0cmluZygiSGVsbG8gbW9ub3NwYWNlIHdvcmxkIik7Ci0gICAgICAgIHMuc2V0U3BhbihuZXcgVHlwZWZhY2VTcGFuKCJtb25vc3BhY2UiKSwgNiwgcy5sZW5ndGgoKSAtIDYsCi0gICAgICAgICAgICAgICAgICBTcGFubmFibGUuU1BBTl9FWENMVVNJVkVfSU5DTFVTSVZFKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEh0bWwudG9IdG1sKHMpLCAiPHA+SGVsbG8gPHR0Pm1vbm9zcGFjZTwvdHQ+IHdvcmxkPC9wPlxuIik7Ci0KLSAgICAgICAgcyA9IG5ldyBTcGFubmFibGVTdHJpbmcoIkhlbGxvIHN1cGVyc2NyaXB0IHdvcmxkIik7Ci0gICAgICAgIHMuc2V0U3BhbihuZXcgU3VwZXJzY3JpcHRTcGFuKCksIDYsIHMubGVuZ3RoKCkgLSA2LAotICAgICAgICAgICAgICAgICAgU3Bhbm5hYmxlLlNQQU5fRVhDTFVTSVZFX0lOQ0xVU0lWRSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhIdG1sLnRvSHRtbChzKSwgIjxwPkhlbGxvIDxzdXA+c3VwZXJzY3JpcHQ8L3N1cD4gd29ybGQ8L3A+XG4iKTsKLQotICAgICAgICBzID0gbmV3IFNwYW5uYWJsZVN0cmluZygiSGVsbG8gc3Vic2NyaXB0IHdvcmxkIik7Ci0gICAgICAgIHMuc2V0U3BhbihuZXcgU3Vic2NyaXB0U3BhbigpLCA2LCBzLmxlbmd0aCgpIC0gNiwKLSAgICAgICAgICAgICAgICAgIFNwYW5uYWJsZS5TUEFOX0VYQ0xVU0lWRV9JTkNMVVNJVkUpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSHRtbC50b0h0bWwocyksICI8cD5IZWxsbyA8c3ViPnN1YnNjcmlwdDwvc3ViPiB3b3JsZDwvcD5cbiIpOwotCi0gICAgICAgIHMgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nKCJIZWxsbyB1bmRlcmxpbmUgd29ybGQiKTsKLSAgICAgICAgcy5zZXRTcGFuKG5ldyBVbmRlcmxpbmVTcGFuKCksIDYsIHMubGVuZ3RoKCkgLSA2LAotICAgICAgICAgICAgICAgICAgU3Bhbm5hYmxlLlNQQU5fRVhDTFVTSVZFX0lOQ0xVU0lWRSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhIdG1sLnRvSHRtbChzKSwgIjxwPkhlbGxvIDx1PnVuZGVybGluZTwvdT4gd29ybGQ8L3A+XG4iKTsKLQotICAgICAgICBzID0gbmV3IFNwYW5uYWJsZVN0cmluZygiSGVsbG8gc3RydWNrIHdvcmxkIik7Ci0gICAgICAgIHMuc2V0U3BhbihuZXcgU3RyaWtldGhyb3VnaFNwYW4oKSwgNiwgcy5sZW5ndGgoKSAtIDYsCi0gICAgICAgICAgICAgICAgICBTcGFubmFibGUuU1BBTl9FWENMVVNJVkVfSU5DTFVTSVZFKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEh0bWwudG9IdG1sKHMpLCAiPHA+SGVsbG8gPHN0cmlrZT5zdHJ1Y2s8L3N0cmlrZT4gd29ybGQ8L3A+XG4iKTsKLQotICAgICAgICBzID0gbmV3IFNwYW5uYWJsZVN0cmluZygiSGVsbG8gbGlua3kgd29ybGQiKTsKLSAgICAgICAgcy5zZXRTcGFuKG5ldyBVUkxTcGFuKCJodHRwOi8vd3d3Lmdvb2dsZS5jb20iKSwgNiwgcy5sZW5ndGgoKSAtIDYsCi0gICAgICAgICAgICAgICAgICBTcGFubmFibGUuU1BBTl9FWENMVVNJVkVfSU5DTFVTSVZFKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEh0bWwudG9IdG1sKHMpLAotICAgICAgICAgICAgICAgICAgICAgIjxwPkhlbGxvIDxhIGhyZWY9XCJodHRwOi8vd3d3Lmdvb2dsZS5jb21cIj5saW5reTwvYT4gd29ybGQ8L3A+XG4iKTsKLSAgICB9Ci0KLSAgICBAU21hbGxUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdEltZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTcGFubmVkIHM7Ci0KLSAgICAgICAgcyA9IEh0bWwuZnJvbUh0bWwoInllczxpbWcgc3JjPVwiaHR0cDovL2V4YW1wbGUuY29tL2Zvby5naWZcIj5ubyIpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygiPHA+eWVzPGltZyBzcmM9XCJodHRwOi8vZXhhbXBsZS5jb20vZm9vLmdpZlwiPm5vPC9wPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgIEh0bWwudG9IdG1sKHMpKTsKLSAgICB9Ci0KLSAgICBAU21hbGxUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdFV0ZjgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3Bhbm5lZCBzOwotCi0gICAgICAgIHMgPSBIdG1sLmZyb21IdG1sKCI8cD5cdTAxMjRcdTAwZWJcdTAxNDJcdTAxNDJvLCB3b3JsZCE8L3A+Iik7Ci0gICAgICAgIGFzc2VydEVxdWFscygiPHA+JiMyOTI7JiMyMzU7JiMzMjI7JiMzMjI7bywgd29ybGQhPC9wPlxuIiwgSHRtbC50b0h0bWwocykpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvZGF0YS9rZXlib2FyZHMvR2VuZXJpYy5rbCBiL2RhdGEva2V5Ym9hcmRzL0dlbmVyaWMua2wKaW5kZXggMTQxMzMxOS4uMjA0MjM0NSAxMDA2NDQKLS0tIGEvZGF0YS9rZXlib2FyZHMvR2VuZXJpYy5rbAorKysgYi9kYXRhL2tleWJvYXJkcy9HZW5lcmljLmtsCkBAIC00MjMsMyArNDIzLDE2IEBACiBheGlzIDB4MGEgQlJBS0UKIGF4aXMgMHgxMCBIQVRfWAogYXhpcyAweDExIEhBVF9ZCisKKyMgTEVEcworbGVkIDB4MDAgTlVNX0xPQ0sKK2xlZCAweDAxIENBUFNfTE9DSworbGVkIDB4MDIgU0NST0xMX0xPQ0sKK2xlZCAweDAzIENPTVBPU0UKK2xlZCAweDA0IEtBTkEKK2xlZCAweDA1IFNMRUVQCitsZWQgMHgwNiBTVVNQRU5ECitsZWQgMHgwNyBNVVRFCitsZWQgMHgwOCBNSVNDCitsZWQgMHgwOSBNQUlMCitsZWQgMHgwYSBDSEFSR0lORwpkaWZmIC0tZ2l0IGEvZGF0YS9zb3VuZHMvZWZmZWN0cy9vZ2cvS2V5cHJlc3NJbnZhbGlkXzQ4ay5vZ2cgYi9kYXRhL3NvdW5kcy9lZmZlY3RzL29nZy9LZXlwcmVzc0ludmFsaWRfNDhrLm9nZwppbmRleCAyNDkzNWFkLi5kMTg0M2E3IDEwMDY0NAotLS0gYS9kYXRhL3NvdW5kcy9lZmZlY3RzL29nZy9LZXlwcmVzc0ludmFsaWRfNDhrLm9nZworKysgYi9kYXRhL3NvdW5kcy9lZmZlY3RzL29nZy9LZXlwcmVzc0ludmFsaWRfNDhrLm9nZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9idXR0b25zLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvYnV0dG9ucy5qZAppbmRleCAxZjdlMjVkLi4yYTc3ZTI0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9idXR0b25zLmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL2J1dHRvbnMuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUJ1dHRvbnMKLXBhZ2UudGFncz0iYnV0dG9uIiwiaW5wdXQiCitwYWdlLnRhZ3M9YnV0dG9uLGlucHV0CiBAamQ6Ym9keQogCiA8YSBjbGFzcz0ibm90aWNlLWRldmVsb3BlcnMiIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvdWkvY29udHJvbHMvYnV0dG9uLmh0bWwiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvZGlhbG9ncy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL2RpYWxvZ3MuamQKaW5kZXggZjRiYjg3ZS4uZjk4OTdmNCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvZGlhbG9ncy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9kaWFsb2dzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1EaWFsb2dzCi1wYWdlLnRhZ3M9ImRpYWxvZyIsImFsZXJ0IiwicG9wdXAiLCJ0b2FzdCIKK3BhZ2UudGFncz1kaWFsb2csYWxlcnQscG9wdXAsdG9hc3QKIEBqZDpib2R5CiAKIDxhIGNsYXNzPSJub3RpY2UtZGV2ZWxvcGVycyIgaHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy91aS9kaWFsb2dzLmh0bWwiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvZ3JpZC1saXN0cy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL2dyaWQtbGlzdHMuamQKaW5kZXggMWEwOWVmNS4uY2VmNzUxNCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvZ3JpZC1saXN0cy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9ncmlkLWxpc3RzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1HcmlkIExpc3RzCi1wYWdlLnRhZ3M9ImdyaWR2aWV3IiwibGF5b3V0IiwibGlzdHZpZXciCitwYWdlLnRhZ3M9Z3JpZHZpZXcsbGF5b3V0LGxpc3R2aWV3CiBAamQ6Ym9keQogCiA8aW1nIHNyYz0ie0Bkb2NSb290fWRlc2lnbi9tZWRpYS9ncmlkdmlld19vdmVydmlldy5wbmciPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvbGlzdHMuamQgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9saXN0cy5qZAppbmRleCA1NTE0ODI0Li41NGZhNDQyIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9saXN0cy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9saXN0cy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9TGlzdHMKLXBhZ2UudGFncz0ibGlzdHZpZXciLCJsYXlvdXQiCitwYWdlLnRhZ3M9bGlzdHZpZXcsbGF5b3V0CiBAamQ6Ym9keQogCiA8YSBjbGFzcz0ibm90aWNlLWRldmVsb3BlcnMiIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvdWkvbGF5b3V0L2xpc3R2aWV3Lmh0bWwiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvcGlja2Vycy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3BpY2tlcnMuamQKaW5kZXggNmRkNzJiYS4uODYwYTEyNiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvcGlja2Vycy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9waWNrZXJzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1QaWNrZXJzCi1wYWdlLnRhZ3M9ImRhdGVwaWNrZXIiLCJ0aW1lcGlja2VyIgorcGFnZS50YWdzPWRhdGVwaWNrZXIsdGltZXBpY2tlcgogQGpkOmJvZHkKIAogPGEgY2xhc3M9Im5vdGljZS1kZXZlbG9wZXJzIiBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3BpY2tlcnMuaHRtbCI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9wcm9ncmVzcy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3Byb2dyZXNzLmpkCmluZGV4IDkwNzMyZjQuLjY5NDZhNzUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3Byb2dyZXNzLmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3Byb2dyZXNzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Qcm9ncmVzcyAmYW1wOyBBY3Rpdml0eQotcGFnZS50YWdzPSJwcm9ncmVzc2JhciIsImRvd25sb2FkIiwibmV0d29yayIKK3BhZ2UudGFncz1wcm9ncmVzc2Jhcixkb3dubG9hZCxuZXR3b3JrCiBAamQ6Ym9keQogCiA8cD5Qcm9ncmVzcyBiYXJzIGFuZCBhY3Rpdml0eSBpbmRpY2F0b3JzIHNpZ25hbCB0byB1c2VycyB0aGF0IHNvbWV0aGluZyBpcyBoYXBwZW5pbmcgdGhhdCB3aWxsIHRha2UgYSBtb21lbnQuPC9wPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3Mvc2Nyb2xsaW5nLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3Mvc2Nyb2xsaW5nLmpkCmluZGV4IDEzYjNiMDkuLjQxZTdjZWMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3Njcm9sbGluZy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zY3JvbGxpbmcuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNjcm9sbGluZwotcGFnZS50YWdzPSJzY3JvbGx2aWV3IiwibGlzdHZpZXciCitwYWdlLnRhZ3M9c2Nyb2xsdmlldyxsaXN0dmlldwogQGpkOmJvZHkKIAogPHA+U2Nyb2xsaW5nIGFsbG93cyB0aGUgdXNlciB0byBuYXZpZ2F0ZSB0byBjb250ZW50IGluIHRoZSBvdmVyZmxvdyB1c2luZyBhIHN3aXBlIGdlc3R1cmUuIFRoZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3Mvc2Vlay1iYXJzLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3Mvc2Vlay1iYXJzLmpkCmluZGV4IDlkMzhlMzYuLjE0NjU2ODggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3NlZWstYmFycy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zZWVrLWJhcnMuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNlZWsgQmFycyBhbmQgU2xpZGVycwotcGFnZS50YWdzPSJzZWVrYmFyIiwicHJvZ3Jlc3NiYXIiCitwYWdlLnRhZ3M9c2Vla2Jhcixwcm9ncmVzc2JhcgogQGpkOmJvZHkKIAogPHA+SW50ZXJhY3RpdmUgc2xpZGVycyBtYWtlIGl0IHBvc3NpYmxlIHRvIHNlbGVjdCBhIHZhbHVlIGZyb20gYSBjb250aW51b3VzIG9yIGRpc2NyZXRlIHJhbmdlIG9mIHZhbHVlcwpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3Mvc3Bpbm5lcnMuamQgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zcGlubmVycy5qZAppbmRleCBjMDBiNjM5Li5mOGQ5MmQ0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zcGlubmVycy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zcGlubmVycy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U3Bpbm5lcnMKLXBhZ2UudGFncz0ic3Bpbm5lciIsImRyb3Bkb3duIgorcGFnZS50YWdzPXNwaW5uZXIsZHJvcGRvd24KIEBqZDpib2R5CiAKIDxhIGNsYXNzPSJub3RpY2UtZGV2ZWxvcGVycyIgaHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy91aS9jb250cm9scy9zcGlubmVyLmh0bWwiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3Mvc3dpdGNoZXMuamQgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zd2l0Y2hlcy5qZAppbmRleCA3NGNhYjVhLi5iMjk0Njg5IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zd2l0Y2hlcy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy9zd2l0Y2hlcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U3dpdGNoZXMKLXBhZ2UudGFncz0ic3dpdGNoIiwiY2hlY2tib3giLCJyYWRpb2J1dHRvbiIsImJ1dHRvbiIKK3BhZ2UudGFncz1zd2l0Y2gsY2hlY2tib3gscmFkaW9idXR0b24sYnV0dG9uCiBAamQ6Ym9keQogCiA8cD5Td2l0Y2hlcyBhbGxvdyB0aGUgdXNlciB0byBzZWxlY3Qgb3B0aW9ucy4gVGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIHN3aXRjaGVzOiBjaGVja2JveGVzLCByYWRpbwpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvdGFicy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3RhYnMuamQKaW5kZXggNWE1ZGE1ZDguLjFmYTM0NjEgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vYnVpbGRpbmctYmxvY2tzL3RhYnMuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvdGFicy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9VGFicwotcGFnZS50YWdzPSJ0YWJzIiwiYWN0aW9uYmFyIiwibmF2aWdhdGlvbiIsInZpZXdwYWdlciIKK3BhZ2UudGFncz10YWJzLGFjdGlvbmJhcixuYXZpZ2F0aW9uLHZpZXdwYWdlcgogQGpkOmJvZHkKIAogPGltZyBzcmM9IntAZG9jUm9vdH1kZXNpZ24vbWVkaWEvdGFic19vdmVydmlldy5wbmciPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9idWlsZGluZy1ibG9ja3MvdGV4dC1maWVsZHMuamQgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy90ZXh0LWZpZWxkcy5qZAppbmRleCAzODM1MzFiLi40NTQ1YmZiIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy90ZXh0LWZpZWxkcy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL2J1aWxkaW5nLWJsb2Nrcy90ZXh0LWZpZWxkcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9VGV4dCBGaWVsZHMKLXBhZ2UudGFncz0idGV4dCIsImVkaXR0ZXh0IiwiaW5wdXQiCitwYWdlLnRhZ3M9dGV4dCxlZGl0dGV4dCxpbnB1dAogQGpkOmJvZHkKIAogPGEgY2xhc3M9Im5vdGljZS1kZXZlbG9wZXJzIiBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3RleHQuaHRtbCI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL2Rvd25sb2Fkcy9pbmRleC5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vZG93bmxvYWRzL2luZGV4LmpkCmluZGV4IDE2ZjU1MDkuLmRkZWRhNWMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vZG93bmxvYWRzL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vZG93bmxvYWRzL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Eb3dubG9hZHMKLXBhZ2UgdGFncz0iSWNvbnMiLCAic3RlbmNpbHMiLCAiY29sb3Igc3dhdGNoZXMiCitwYWdlLnRhZ3M9SWNvbnMsc3RlbmNpbHMsY29sb3Igc3dhdGNoZXMKIEBqZDpib2R5CiAKIDxkaXYgY2xhc3M9ImxheW91dC1jb250ZW50LXJvdyI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2FjY2Vzc2liaWxpdHkuamQgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2FjY2Vzc2liaWxpdHkuamQKaW5kZXggNTMyOTAwZS4uNTBjODJmZSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9hY2Nlc3NpYmlsaXR5LmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvYWNjZXNzaWJpbGl0eS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QWNjZXNzaWJpbGl0eQotcGFnZS50YWdzPSJhY2Nlc3NpYmlsaXR5IiwibmF2aWdhdGlvbiIsImlucHV0IgorcGFnZS50YWdzPWFjY2Vzc2liaWxpdHksbmF2aWdhdGlvbixpbnB1dAogQGpkOmJvZHkKIAogPGEgY2xhc3M9Im5vdGljZS1kZXZlbG9wZXJzIiBocmVmPSJ7QGRvY1Jvb3R9dHJhaW5pbmcvYWNjZXNzaWJpbGl0eS9pbmRleC5odG1sIj4KQEAgLTg2LDQgKzg2LDQgQEAKICAgPGxpPlByb3ZpZGUgYWx0ZXJuYXRpdmVzIHRvIGFmZm9yZGFuY2VzIHRoYXQgdGltZSBvdXQ8L2xpPgogICA8bGk+VXNlIHN0YW5kYXJkIGZyYW1ld29yayBjb250cm9scyBvciBlbmFibGUgVGFsa0JhY2sgZm9yIGN1c3RvbSBjb250cm9sczwvbGk+CiAgIDxsaT5UcnkgaXQgb3V0IHlvdXJzZWxmPC9saT4KLTwvdWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC91bD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvYWN0aW9uYmFyLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9hY3Rpb25iYXIuamQKaW5kZXggYjZlM2ExNi4uZjAxMDRiNSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9hY3Rpb25iYXIuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9hY3Rpb25iYXIuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFjdGlvbiBCYXIKLXBhZ2UudGFncz0iYWN0aW9uYmFyIiwibmF2aWdhdGlvbiIKK3BhZ2UudGFncz1hY3Rpb25iYXIsbmF2aWdhdGlvbgogQGpkOmJvZHkKIAogPGltZyBzcmM9IntAZG9jUm9vdH1kZXNpZ24vbWVkaWEvYWN0aW9uX2Jhcl9wYXR0ZXJuX292ZXJ2aWV3LnBuZyI+CkBAIC0yNzcsNCArMjc3LDQgQEAKIDxwPlNvbWV0aW1lcyBpdCBpcyBpbXBvcnRhbnQgdG8gZGlzcGxheSBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGZvciB5b3VyIGFwcCB0aGF0J3MgYWx3YXlzIHZpc2libGUuCiBFeGFtcGxlcyBhcmUgdGhlIG51bWJlciBvZiB1bnJlYWQgbWVzc2FnZXMgaW4gYSBtZXNzYWdpbmcgaW5ib3ggdmlldyBvciB0aGUgTm93IFBsYXlpbmcgaW5mb3JtYXRpb24KIGluIGEgbXVzaWMgcGxheWVyLiBDYXJlZnVsbHkgcGxhbiB3aGljaCBpbXBvcnRhbnQgaW5mb3JtYXRpb24geW91IHdvdWxkIGxpa2UgdG8gZGlzcGxheSBhbmQKLXN0cnVjdHVyZSB5b3VyIGFjdGlvbiBiYXJzIGFjY29yZGluZ2x5LjwvcD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitzdHJ1Y3R1cmUgeW91ciBhY3Rpb24gYmFycyBhY2NvcmRpbmdseS48L3A+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2FwcC1zdHJ1Y3R1cmUuamQgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2FwcC1zdHJ1Y3R1cmUuamQKaW5kZXggMTQ0N2Q0ZS4uZTBhMTFlZCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9hcHAtc3RydWN0dXJlLmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvYXBwLXN0cnVjdHVyZS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QXBwIFN0cnVjdHVyZQotcGFnZS50YWdzPSJuYXZpZ2F0aW9uIiwibGF5b3V0IiwidGFibGV0IgorcGFnZS50YWdzPW5hdmlnYXRpb24sbGF5b3V0LHRhYmxldAogQGpkOmJvZHkKIAogICAgIDxwPkFwcHMgY29tZSBpbiBtYW55IHZhcmlldGllcyB0aGF0IGFkZHJlc3MgdmVyeSBkaWZmZXJlbnQgbmVlZHMuIEZvciBleGFtcGxlOjwvcD4KQEAgLTMwNyw0ICszMDcsNCBAQAogPGxpPgogPHA+QWxsb3cgZm9yIHF1aWNrIG5hdmlnYXRpb24gYmV0d2VlbiBkZXRhaWwgaXRlbXMgd2l0aCBzd2lwZSB2aWV3cy48L3A+CiA8L2xpPgotPC91bD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L3VsPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9idXR0b25zLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9idXR0b25zLmpkCmluZGV4IDQ2ZTQxYzguLjJkNjViMmQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvYnV0dG9ucy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2J1dHRvbnMuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUJ1dHRvbnMKLXBhZ2UudGFncz0iYnV0dG9ucyIKK3BhZ2UudGFncz1idXR0b25zCiBAamQ6Ym9keQogCiA8cD4KQEAgLTE0OCw0ICsxNDgsNCBAQAogICBSZXBsYWNlIHByZXZpb3VzIGltcGxlbWVudGF0aW9ucyBvZiBMaWdodHMgT3V0IG1vZGUgd2l0aCB0aGUgTGVhbiBCYWNrIG9yCiAgIEltbWVyc2l2ZSBhcHByb2FjaGVzLiBDb250aW51ZSB0byB1c2UgTGlnaHRzIE91dCBtb2RlIGZvciBpbXBsZW1lbnRhdGlvbnMgb2YKICAgeW91ciBhcHAgdGFyZ2V0ZWQgZm9yIGVhcmxpZXIgcmVsZWFzZXMuCi08L3A+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9wPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9jb21wYXRpYmlsaXR5LmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9jb21wYXRpYmlsaXR5LmpkCmluZGV4IDVjYTZkOGIuLjVhMTU2MmMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvY29tcGF0aWJpbGl0eS5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2NvbXBhdGliaWxpdHkuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUJhY2t3YXJkcyBDb21wYXRpYmlsaXR5Ci1wYWdlLnRhZ3M9InN1cHBvcnQiCitwYWdlLnRhZ3M9c3VwcG9ydAogQGpkOmJvZHkKIAogPGEgY2xhc3M9Im5vdGljZS1kZXZlbG9wZXJzIiBocmVmPSJ7QGRvY1Jvb3R9dHJhaW5pbmcvYmFzaWNzL3N1cHBvcnRpbmctZGV2aWNlcy9pbmRleC5odG1sIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvY29uZmlybWluZy1hY2tub3dsZWRnaW5nLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9jb25maXJtaW5nLWFja25vd2xlZGdpbmcuamQKaW5kZXggZTM0NzIzMS4uZDM5ZDMyZCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9jb25maXJtaW5nLWFja25vd2xlZGdpbmcuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9jb25maXJtaW5nLWFja25vd2xlZGdpbmcuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUNvbmZpcm1pbmcgJmFtcDsgQWNrbm93bGVkZ2luZwotcGFnZS50YWdzPSJkaWFsb2ciLCJ0b2FzdCIsIm5vdGlmaWNhdGlvbiIKK3BhZ2UudGFncz1kaWFsb2csdG9hc3Qsbm90aWZpY2F0aW9uCiBAamQ6Ym9keQogCiA8cD5JbiBzb21lIHNpdHVhdGlvbnMsIHdoZW4gYSB1c2VyIGludm9rZXMgYW4gYWN0aW9uIGluIHlvdXIgYXBwLCBpdCdzIGEgZ29vZCBpZGVhIHRvIDxlbT5jb25maXJtPC9lbT4gb3IgPGVtPmFja25vd2xlZGdlPC9lbT4gdGhhdCBhY3Rpb24gdGhyb3VnaCB0ZXh0LjwvcD4KQEAgLTY3LDQgKzY3LDQgQEAKICAgICA8cD48c3Ryb25nPkFja25vd2xlZGdtZW50IGlzIHVubmVjZXNzYXJ5PC9zdHJvbmc+LiBUaGUgdXNlciB3aWxsIGtub3cgdGhlIGFwcCBpcyBnb25lIGZyb20gdGhlIEhvbWUgU2NyZWVuIGJlY2F1c2UgdGhleSBtYWRlIGl0IGRpc2FwcGVhciBieSBkcmFnZ2luZyBpdCBhd2F5LjwvcD4KIAogICA8L2Rpdj4KLTwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvZGl2PgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9mdWxsc2NyZWVuLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9mdWxsc2NyZWVuLmpkCmluZGV4IGRlMDE2ZmUuLjYyNGQ0NGMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvZnVsbHNjcmVlbi5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2Z1bGxzY3JlZW4uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUZ1bGwgU2NyZWVuCi1wYWdlLnRhZ3M9ImZ1bGwgc2NyZWVuIiwiaW1tZXJzaXZlIiwgImxlYW5iYWNrIgorcGFnZS50YWdzPWZ1bGwgc2NyZWVuLGltbWVyc2l2ZSxsZWFuYmFjawogQGpkOmJvZHkKIAogPHA+CkBAIC0xNDgsNCArMTQ4LDQgQEAKICAgUmVwbGFjZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbnMgb2YgTGlnaHRzIE91dCBtb2RlIHdpdGggdGhlIExlYW4gQmFjayBvcgogICBJbW1lcnNpdmUgYXBwcm9hY2hlcy4gQ29udGludWUgdG8gdXNlIExpZ2h0cyBPdXQgbW9kZSBmb3IgaW1wbGVtZW50YXRpb25zIG9mCiAgIHlvdXIgYXBwIHRhcmdldGVkIGZvciBlYXJsaWVyIHJlbGVhc2VzLgotPC9wPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvcD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvZ2VzdHVyZXMuamQgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2dlc3R1cmVzLmpkCmluZGV4IDIxMzkwMmYuLjFlYzcwOTQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvZ2VzdHVyZXMuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9nZXN0dXJlcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9R2VzdHVyZXMKLXBhZ2UudGFncz0iZ2VzdHVyZSIsImlucHV0IiwidG91Y2giCitwYWdlLnRhZ3M9Z2VzdHVyZSxpbnB1dCx0b3VjaAogQGpkOmJvZHkKIAogPHA+R2VzdHVyZXMgYWxsb3cgdXNlcnMgdG8gaW50ZXJhY3Qgd2l0aCB5b3VyIGFwcCBieSBtYW5pcHVsYXRpbmcgdGhlIHNjcmVlbiBvYmplY3RzIHlvdSBwcm92aWRlLiBUaGUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvaGVscC5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvaGVscC5qZAppbmRleCBhZDU3NDJkLi5iZjcwOGIxIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL2hlbHAuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9oZWxwLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1IZWxwCi1wYWdlLnRhZ3M9InNldHRpbmdzIiwicHJlZmVyZW5jZXMiCitwYWdlLnRhZ3M9c2V0dGluZ3MscHJlZmVyZW5jZXMKIEBqZDpib2R5CiAKIDxwPldlIHdpc2ggd2UgY291bGQgZ3VhcmFudGVlIHRoYXQgaWYgeW91IGZvbGxvdyBldmVyeSBwaWVjZSBvZiBhZHZpY2Ugb24gdGhpcyB3ZWJzaXRlLCBldmVyeW9uZSB3aWxsIGJlIGFibGUgdG8gbGVhcm4gYW5kIHVzZSB5b3VyIGFwcCB3aXRob3V0IGEgaGl0Y2guIFNhZGx5LCB0aGF0J3Mgbm90IHRoZSBjYXNlLjwvcD4KQEAgLTExMCw0ICsxMTAsNCBAQAogPHA+UGVvcGxlIGRvbid0IHJlYWQgaGVscCBmcm9tIHN0YXJ0IHRvIGZpbmlzaC4gVGhleSBzY2FuIGFyb3VuZCwgbG9va2luZyBmb3IgYSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBjb250YWluaW5nIHRoZSBhbnN3ZXIgdGhleSBuZWVkLiBNYWtlIGl0IGxlc3MgYnVyZGVuc29tZSB3aXRoIGZyaWVuZGx5IGZvcm1hdHRpbmcgYW5kIGxheW91dCBjaG9pY2VzIGxpa2UgYm9sZCBoZWFkaW5ncywgYnVsbGV0ZWQgYW5kIG51bWJlcmVkIGxpc3RzLCB0YWJsZXMsIGFuZCB3aGl0ZSBzcGFjZSBiZXR3ZWVuIHBhcmFncmFwaHMuIEFuZCBpZiB5b3UgaGF2ZSBhIGxhcmdlIGFtb3VudCBvZiBjb250ZW50LCBkaXZpZGUgaXQgaW50byBtdWx0aXBsZSBzY3JlZW5zIHRvIGN1dCBkb3duIG9uIHNjcm9sbGluZy48L3A+CiAKIDxoND5UYWtlIG1lIHN0cmFpZ2h0IHRvIHRoZSBhbnN3ZXI8L2g0PgotPHA+V2hhdCdzIGJldHRlciB0aGFuIGEgc2NyZWVuIHRoYXQncyBlYXN5IHRvIHNjYW4/IEEgc2NyZWVuIHRoYXQgcmVxdWlyZXMgbm8gc2Nhbm5pbmcgYXQgYWxsIGJlY2F1c2UgdGhlIGFuc3dlcidzIHJpZ2h0IHRoZXJlLiBDb25zaWRlciBoYXZpbmcgZWFjaCBzY3JlZW4gaW4geW91ciBhcHAgbmF2aWdhdGUgdG8gaGVscCB0aGF0J3MgcmVsZXZhbnQganVzdCB0byB0aGF0IHNjcmVlbi4gV2UgY2FsbCB0aGlzIDxlbT5jb250ZXh0dWFsIGhlbHA8L2VtPiwgYW5kIGl0J3MgdGhlIGhvbHkgZ3JhaWwgb2YgdXNlciBhc3Npc3RhbmNlLiBJZiB5b3UgdGFrZSB0aGlzIGFwcHJvYWNoLCBiZSBzdXJlIHRvIGFsc28gcHJvdmlkZSBhIHdheSB0byBnZXQgdG8gdGhlIHJlc3Qgb2YgdGhlIGhlbHAgY29udGVudC48L3A+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPHA+V2hhdCdzIGJldHRlciB0aGFuIGEgc2NyZWVuIHRoYXQncyBlYXN5IHRvIHNjYW4/IEEgc2NyZWVuIHRoYXQgcmVxdWlyZXMgbm8gc2Nhbm5pbmcgYXQgYWxsIGJlY2F1c2UgdGhlIGFuc3dlcidzIHJpZ2h0IHRoZXJlLiBDb25zaWRlciBoYXZpbmcgZWFjaCBzY3JlZW4gaW4geW91ciBhcHAgbmF2aWdhdGUgdG8gaGVscCB0aGF0J3MgcmVsZXZhbnQganVzdCB0byB0aGF0IHNjcmVlbi4gV2UgY2FsbCB0aGlzIDxlbT5jb250ZXh0dWFsIGhlbHA8L2VtPiwgYW5kIGl0J3MgdGhlIGhvbHkgZ3JhaWwgb2YgdXNlciBhc3Npc3RhbmNlLiBJZiB5b3UgdGFrZSB0aGlzIGFwcHJvYWNoLCBiZSBzdXJlIHRvIGFsc28gcHJvdmlkZSBhIHdheSB0byBnZXQgdG8gdGhlIHJlc3Qgb2YgdGhlIGhlbHAgY29udGVudC48L3A+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL211bHRpLXBhbmUtbGF5b3V0cy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvbXVsdGktcGFuZS1sYXlvdXRzLmpkCmluZGV4IDA2YzgxODkuLmZmMmRkNGUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvbXVsdGktcGFuZS1sYXlvdXRzLmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvbXVsdGktcGFuZS1sYXlvdXRzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1NdWx0aS1wYW5lIExheW91dHMKLXBhZ2UudGFncz0idGFibGV0IiwibmF2aWdhdGlvbiIsImxheW91dCIsImZyYWdtZW50IgorcGFnZS50YWdzPXRhYmxldCxuYXZpZ2F0aW9uLGxheW91dCxmcmFnbWVudAogQGpkOmJvZHkKIAogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL25hdmlnYXRpb24tZHJhd2VyLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9uYXZpZ2F0aW9uLWRyYXdlci5qZAppbmRleCBiZjY2MDllLi43ZTYzYmE2YyAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9uYXZpZ2F0aW9uLWRyYXdlci5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL25hdmlnYXRpb24tZHJhd2VyLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1OYXZpZ2F0aW9uIERyYXdlcgotcGFnZS50YWdzPSJEcmF3ZXJMYXlvdXQiLCJTbGlkaW5nUGFuZUxheW91dCIKK3BhZ2UudGFncz1EcmF3ZXJMYXlvdXQsU2xpZGluZ1BhbmVMYXlvdXQKIEBqZDpib2R5CiAKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9uYXZpZ2F0aW9uLmpkIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9uYXZpZ2F0aW9uLmpkCmluZGV4IDZmMjIxNWEuLjA4ODI4ZTggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvbmF2aWdhdGlvbi5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL25hdmlnYXRpb24uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPU5hdmlnYXRpb24gd2l0aCBCYWNrIGFuZCBVcAotcGFnZS50YWdzPSJuYXZpZ2F0aW9uIiwiYWN0aXZpdHkiLCJ0YXNrIiwidXAgbmF2aWdhdGlvbiIsImJhY2sgbmF2aWdhdGlvbiIKK3BhZ2UudGFncz1uYXZpZ2F0aW9uLGFjdGl2aXR5LHRhc2ssdXAgbmF2aWdhdGlvbixiYWNrIG5hdmlnYXRpb24KIEBqZDpib2R5CiAKIDxhIGNsYXNzPSJub3RpY2UtZGV2ZWxvcGVycyIgaHJlZj0ie0Bkb2NSb290fXRyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL2luZGV4Lmh0bWwiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9uZXcuamQgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL25ldy5qZAppbmRleCA1MGNiOTUwLi5kNjcyZTQ2IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL25ldy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL25ldy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9TmV3IGluIEFuZHJvaWQKLXBhZ2UudGFncz0iS2l0S2F0IiwgIkFuZHJvaWQgNC40IgorcGFnZS50YWdzPUtpdEthdCxBbmRyb2lkIDQuNAogQGpkOmJvZHkKIAogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL3NlbGVjdGlvbi5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvc2VsZWN0aW9uLmpkCmluZGV4IDk3M2ZmZGUuLmVlNDY3OTUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvc2VsZWN0aW9uLmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvc2VsZWN0aW9uLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1TZWxlY3Rpb24KLXBhZ2UudGFncz0iYWN0aW9ubW9kZSIsIm5hdmlnYXRpb24iLCJjb250ZXh0dWFsIgorcGFnZS50YWdzPWFjdGlvbm1vZGUsbmF2aWdhdGlvbixjb250ZXh0dWFsCiBAamQ6Ym9keQogCiA8YSBjbGFzcz0ibm90aWNlLWRldmVsb3BlcnMiIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvdWkvbWVudXMuaHRtbCNjb250ZXh0LW1lbnUiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9zZXR0aW5ncy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvc2V0dGluZ3MuamQKaW5kZXggZmEzZTUzOC4uYTA5MTkzZCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9zZXR0aW5ncy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL3NldHRpbmdzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1TZXR0aW5ncwotcGFnZS50YWdzPSJwcmVmZXJlbmNlcyIsInNoYXJlZHByZWZlcmVuY2VzIgorcGFnZS50YWdzPXByZWZlcmVuY2VzLHNoYXJlZHByZWZlcmVuY2VzCiBAamQ6Ym9keQogCiA8YSBjbGFzcz0ibm90aWNlLWRldmVsb3BlcnMiIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvdWkvc2V0dGluZ3MuaHRtbCI+CkBAIC02OTYsNCArNjk2LDQgQEAKIDxsaT48cD5Vc2UgZGVzaWduIHBhdHRlcm5zIHdoZXJldmVyIGFwcGxpY2FibGUgc28gdXNlcnMgZG9uJ3QgZmFjZSBhIGxlYXJuaW5nIGN1cnZlLjwvcD48L2xpPgogPGxpPjxwPkNob29zZSBkZWZhdWx0cyB0aGF0IGFyZSBzYWZlLCBuZXV0cmFsLCBhbmQgZml0IHRoZSBtYWpvcml0eSBvZiB1c2Vycy48L3A+PC9saT4KIDxsaT48cD5HaXZlIGVhY2ggc2V0dGluZyBhIGNsZWFyLCBjb25jaXNlIGxhYmVsIGFuZCB1c2Ugc2Vjb25kYXJ5IHRleHQgYXBwcm9wcmlhdGVseS48L3A+PC9saT4KLTwvdWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC91bD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvc3dpcGUtdmlld3MuamQgYi9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL3N3aXBlLXZpZXdzLmpkCmluZGV4IDRjOWZiODguLjg5Mzk3YWUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvc3dpcGUtdmlld3MuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy9zd2lwZS12aWV3cy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U3dpcGUgVmlld3MKLXBhZ2UudGFncz0idmlld3BhZ2VyIiwibmF2aWdhdGlvbiIsInRhYnMiCitwYWdlLnRhZ3M9dmlld3BhZ2VyLG5hdmlnYXRpb24sdGFicwogQGpkOmJvZHkKIAogPGEgY2xhc3M9Im5vdGljZS1kZXZlbG9wZXJzIiBocmVmPSJ7QGRvY1Jvb3R9dHJhaW5pbmcvaW1wbGVtZW50aW5nLW5hdmlnYXRpb24vbGF0ZXJhbC5odG1sIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvd2lkZ2V0cy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vcGF0dGVybnMvd2lkZ2V0cy5qZAppbmRleCA4N2ViYmI5Li45NTNjMTI1IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL3BhdHRlcm5zL3dpZGdldHMuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9wYXR0ZXJucy93aWRnZXRzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1XaWRnZXRzCi1wYWdlLnRhZ3M9ImFwcHdpZGdldCIsImhvbWUiCitwYWdlLnRhZ3M9YXBwd2lkZ2V0LGhvbWUKIEBqZDpib2R5CiAKIDxhIGNsYXNzPSJub3RpY2UtZGV2ZWxvcGVycyIgaHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9hcHB3aWRnZXRzL2luZGV4Lmh0bWwiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS9icmFuZGluZy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvYnJhbmRpbmcuamQKaW5kZXggMmVhNGQ0Ny4uMjM1M2E5MyAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS9icmFuZGluZy5qZAorKysgYi9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL2JyYW5kaW5nLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Zb3VyIEJyYW5kaW5nCi1wYWdlLnRhZ3M9ImJyYW5kaW5nIiwibG9nbyIKK3BhZ2UudGFncz1icmFuZGluZyxsb2dvCiBAamQ6Ym9keQogCiA8cD5Gb2xsb3dpbmcgQW5kcm9pZCBkZXNpZ24gcGF0dGVybnMgZG9lc24ndCBtZWFuIHRoYXQgeW91ciBhcHAgaGFzIHRvIGxvb2sgdGhlIHNhbWUgYXMKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvaWNvbm9ncmFwaHkuamQgYi9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL2ljb25vZ3JhcGh5LmpkCmluZGV4IGZlNGEzZjkuLjVkZGU2MDAgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvaWNvbm9ncmFwaHkuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS9pY29ub2dyYXBoeS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9SWNvbm9ncmFwaHkKLXBhZ2UudGFncz0iaWNvbnMiCitwYWdlLnRhZ3M9aWNvbnMKIEBqZDpib2R5CiAKIDxpbWcgc3JjPSJ7QGRvY1Jvb3R9ZGVzaWduL21lZGlhL2ljb25vZ3JhcGh5X292ZXJ2aWV3LnBuZyI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL21ldHJpY3MtZ3JpZHMuamQgYi9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL21ldHJpY3MtZ3JpZHMuamQKaW5kZXggYzM3NTYzMS4uYTU1MzQ3NSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS9tZXRyaWNzLWdyaWRzLmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvbWV0cmljcy1ncmlkcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9TWV0cmljcyBhbmQgR3JpZHMKLXBhZ2UudGFncz0ibGF5b3V0Iiwic2NyZWVucyIKK3BhZ2UudGFncz1sYXlvdXQsc2NyZWVucwogQGpkOmJvZHkKIAogPHA+RGV2aWNlcyB2YXJ5IG5vdCBvbmx5IGluIHBoeXNpY2FsIHNpemUsIGJ1dCBhbHNvIGluIHNjcmVlbiBkZW5zaXR5ICg8YWNyb255bSB0aXRsZT0iRG90cyBwZXIKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvdG91Y2gtZmVlZGJhY2suamQgYi9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL3RvdWNoLWZlZWRiYWNrLmpkCmluZGV4IDIwMTdkOGUuLjlmMzZmZWQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvdG91Y2gtZmVlZGJhY2suamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS90b3VjaC1mZWVkYmFjay5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9VG91Y2ggRmVlZGJhY2sKLXBhZ2UudGFncz0iaW5wdXQiLCJidXR0b24iCitwYWdlLnRhZ3M9aW5wdXQsYnV0dG9uCiBAamQ6Ym9keQogCiAgICAgPGRpdiBjbGFzcz0ibGF5b3V0LWNvbnRlbnQtcm93IiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogLTEwMHB4Ij4KQEAgLTgzLDQgKzgzLDQgQEAKICAgd2lkZ2V0cywgbGlrZSBsaXN0cyBhbmQgZ3JpZCBsaXN0cywgaGF2ZSBzdXBwb3J0IGZvciBib3VuZGFyeSBmZWVkYmFjayBidWlsdAogICBpbi4gSWYgeW914oCZcmUgYnVpbGRpbmcgY3VzdG9tIHdpZGdldHMsIGtlZXAgYm91bmRhcnkgZmVlZGJhY2sgaW4gbWluZCBhbmQKICAgcHJvdmlkZSBpdCBmcm9tIHdpdGhpbiB5b3VyIGFwcC4KLTwvcD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L3A+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL3R5cG9ncmFwaHkuamQgYi9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL3R5cG9ncmFwaHkuamQKaW5kZXggM2MyMDFmNy4uZWM2ZmJhMiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS90eXBvZ3JhcGh5LmpkCisrKyBiL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvdHlwb2dyYXBoeS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9VHlwb2dyYXBoeQotcGFnZS50YWdzPSJ0ZXh0dmlldyIsImZvbnQiCitwYWdlLnRhZ3M9dGV4dHZpZXcsZm9udAogQGpkOmJvZHkKIAogPGRpdiBjbGFzcz0ibGF5b3V0LWNvbnRlbnQtcm93Ij4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvd3JpdGluZy5qZCBiL2RvY3MvaHRtbC9kZXNpZ24vc3R5bGUvd3JpdGluZy5qZAppbmRleCBjZGExN2ViLi40ZjYyMjUzIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZGVzaWduL3N0eWxlL3dyaXRpbmcuamQKKysrIGIvZG9jcy9odG1sL2Rlc2lnbi9zdHlsZS93cml0aW5nLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Xcml0aW5nIFN0eWxlCi1wYWdlLnRhZ3M9ImRpYWxvZyIsInRvYXN0Iiwibm90aWZpY2F0aW9uIgorcGFnZS50YWdzPWRpYWxvZyx0b2FzdCxub3RpZmljYXRpb24KIEBqZDpib2R5CiAKIDxoMiBpZD0idm9hIj5BbmRyb2lkJ3MgVm9pY2U8L2gyPgpAQCAtMzE5LDQgKzMxOSw0IEBACiAgICAgICAgIGVsbGlwc2lzLiA8L2xpPgogICAgIDwvdWw+CiAgIDwvbGk+Ci08L3VsPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvdWw+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGlzdHJpYnV0ZS9nb29nbGVwbGF5L2VkdS9pbmRleC5qZCBiL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvZWR1L2luZGV4LmpkCmluZGV4IDQ4NzAyOGYuLmEyN2Y4MmYgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvZWR1L2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvZWR1L2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Hb29nbGUgUGxheSBmb3IgRWR1Y2F0aW9uCi1wYWdlLnRhZ3M9Ikdvb2dsZSBQbGF5IiwiZWR1Y2F0aW9uIiwic2Nob29scyIsICJkaXN0cmlidXRpb24iCitwYWdlLnRhZ3M9R29vZ2xlIFBsYXksZWR1Y2F0aW9uLHNjaG9vbHMsZGlzdHJpYnV0aW9uCiBoZWFkZXIuaGlkZT0xCiAKIEBqZDpib2R5CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZGlzdHJpYnV0ZS9nb29nbGVwbGF5L3B1Ymxpc2gvbG9jYWxpemluZy5qZCBiL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvcHVibGlzaC9sb2NhbGl6aW5nLmpkCmluZGV4IDFhNWYzYzEuLjMwZjEwYjcgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvcHVibGlzaC9sb2NhbGl6aW5nLmpkCisrKyBiL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvcHVibGlzaC9sb2NhbGl6aW5nLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Mb2NhbGl6YXRpb24gQ2hlY2tsaXN0Ci1wYWdlLnRhZ3M9ImxvY2FsaXplIiwibG9jYWxpemF0aW9uIiwicmVzb3VyY2VzIiwgImZvcm1hdHMiLCAibDEwbiIKK3BhZ2UudGFncz1sb2NhbGl6ZSxsb2NhbGl6YXRpb24scmVzb3VyY2VzLGZvcm1hdHMsbDEwbgogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+PGRpdiBpZD0icXYiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2Rpc3RyaWJ1dGUvZ29vZ2xlcGxheS9wdWJsaXNoL3ByZXBhcmluZy5qZCBiL2RvY3MvaHRtbC9kaXN0cmlidXRlL2dvb2dsZXBsYXkvcHVibGlzaC9wcmVwYXJpbmcuamQKaW5kZXggYjlkZDBlMC4uNmFmM2VlYSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2Rpc3RyaWJ1dGUvZ29vZ2xlcGxheS9wdWJsaXNoL3ByZXBhcmluZy5qZAorKysgYi9kb2NzL2h0bWwvZGlzdHJpYnV0ZS9nb29nbGVwbGF5L3B1Ymxpc2gvcHJlcGFyaW5nLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1MYXVuY2ggQ2hlY2tsaXN0Ci1wYWdlLnRhZ3M9InB1Ymxpc2hpbmciLCJsYXVuY2giLCJHb29nbGUgUGxheSIsICJEZXZlbG9wZXIgQ29uc29sZSIKK3BhZ2UudGFncz1wdWJsaXNoaW5nLGxhdW5jaCxHb29nbGUgUGxheSxEZXZlbG9wZXIgQ29uc29sZQogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+PGRpdiBpZD0icXYiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2dvb2dsZS9nY20vY2xpZW50LmpkIGIvZG9jcy9odG1sL2dvb2dsZS9nY20vY2xpZW50LmpkCmluZGV4IGVlNzY0ZWYuLjkxNmVjZWUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2NsaWVudC5qZAorKysgYi9kb2NzL2h0bWwvZ29vZ2xlL2djbS9jbGllbnQuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUltcGxlbWVudGluZyBHQ00gQ2xpZW50Ci1wYWdlLnRhZ3M9ImNsb3VkIiwicHVzaCIsIm1lc3NhZ2luZyIKK3BhZ2UudGFncz1jbG91ZCxwdXNoLG1lc3NhZ2luZwogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ29vZ2xlL2djbS9ncy5qZCBiL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2dzLmpkCmluZGV4IDJhMmMxYzkuLjNmMDI5MDcgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2dzLmpkCisrKyBiL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2dzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1HZXR0aW5nIFN0YXJ0ZWQKLXBhZ2UudGFncz0iY2xvdWQiLCJwdXNoIiwibWVzc2FnaW5nIgorcGFnZS50YWdzPWNsb3VkLHB1c2gsbWVzc2FnaW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2hlbHBlci5qZCBiL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2hlbHBlci5qZAppbmRleCBlN2YyZjczLi4xOWRjZGM1IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ29vZ2xlL2djbS9oZWxwZXIuamQKKysrIGIvZG9jcy9odG1sL2dvb2dsZS9nY20vaGVscGVyLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Vc2luZyB0aGUgR0NNIEhlbHBlciBMaWJyYXJpZXMKLXBhZ2UudGFncz0iY2xvdWQiLCJwdXNoIiwibWVzc2FnaW5nIgorcGFnZS50YWdzPWNsb3VkLHB1c2gsbWVzc2FnaW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJkZXByZWNhdGVkU3RpY2tlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ29vZ2xlL2djbS9pbmRleC5qZCBiL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2luZGV4LmpkCmluZGV4IDhmMzI1YjguLjcwZjdhOWMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC9nb29nbGUvZ2NtL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Hb29nbGUgQ2xvdWQgTWVzc2FnaW5nIGZvciBBbmRyb2lkCi1wYWdlLnRhZ3M9ImdjbSIKK3BhZ2UudGFncz1nY20KIGhlYWRlci5oaWRlPTEKIEBqZDpib2R5CiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9hZHMuamQgYi9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvYWRzLmpkCmluZGV4IGM2NjZjZTkuLjc1MzZjYjAgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9hZHMuamQKKysrIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL2Fkcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9R29vZ2xlIE1vYmlsZSBBZHMKLXBhZ2UudGFncz0iQWRzIiwibW9uZXRpemF0aW9uIiwgIkFkTW9iIiwgIkdvb2dsZSBQbGF5IHNlcnZpY2VzIgorcGFnZS50YWdzPUFkcyxtb25ldGl6YXRpb24sQWRNb2IsR29vZ2xlIFBsYXkgc2VydmljZXMKIGhlYWRlci5oaWRlPTEKIAogQGpkOmJvZHkKQEAgLTgyLDQgKzgyLDQgQEAKICAgICA8cCBjbGFzcz0ibm90ZSI+PHN0cm9uZz5Ob3RlPC9zdHJvbmc+OiBUaGUgU0RLIGRvZXNu4oCZdCBjdXJyZW50bHkgc3VwcG9ydCBERlAsIEFkIEV4Y2hhbmdlIG9yIFNlYXJjaAogICAgIEFkcyBmb3IgTW9iaWxlIEFwcHMgYnV0IHN1cHBvcnQgaXMgY29taW5nIHNvb24uPC9wPgogICA8L2Rpdj4KLTwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvZGl2PgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL2F1dGguamQgYi9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvYXV0aC5qZAppbmRleCA3YWNhZjFjLi5kZGVkNTk5IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvYXV0aC5qZAorKysgYi9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvYXV0aC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QXV0aG9yaXphdGlvbgotcGFnZS50YWdzPSJBY2NvdW50TWFuYWdlciIsIm9hdXRoMiIKK3BhZ2UudGFncz1BY2NvdW50TWFuYWdlcixvYXV0aDIKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpAQCAtMjM2LDQgKzIzNiw0IEBACiAgICAgY2FzZSwgb2J0YWluIGEgbmV3IHRva2VuIHVzaW5nIDxhCiBocmVmPSJ7QGRvY1Jvb3R9cmVmZXJlbmNlL2NvbS9nb29nbGUvYW5kcm9pZC9nbXMvYXV0aC9Hb29nbGVBdXRoVXRpbC5odG1sI2dldFRva2VuKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSIKID57QGNvZGUgR29vZ2xlQXV0aFV0aWwuZ2V0VG9rZW4oKX08L2E+LgotPC9wPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvcD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9pZC5qZCBiL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9pZC5qZAppbmRleCA2NjRjNmU2Li5iZDMwMmMwIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvaWQuamQKKysrIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL2lkLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1BZHZlcnRpc2luZyBJRAotcGFnZS50YWdzPSJBZHMiLCJBZHZlcnRpc2luZyBJRCIsICJJRCIKK3BhZ2UudGFncz1BZHMsQWR2ZXJ0aXNpbmcgSUQsSUQKIGhlYWRlci5oaWRlPTEKIAogQGpkOmJvZHkKQEAgLTE5NSw0ICsxOTUsNCBAQAogICB9CiAgIGZpbmFsIFN0cmluZyBpZCA9IGFkSW5mby5nZXRJZCgpOwogICBmaW5hbCBib29sZWFuIGlzTEFUID0gYWRJbmZvLmlzTGltaXRBZFRyYWNraW5nRW5hYmxlZCgpOwotfTwvcHJlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK308L3ByZT4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9sb2NhdGlvbi5qZCBiL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9sb2NhdGlvbi5qZAppbmRleCAxY2RkMjQ3Li4zZmJmMDBlIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvbG9jYXRpb24uamQKKysrIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL2xvY2F0aW9uLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Mb2NhdGlvbiBBUElzCi1wYWdlLnRhZ3M9ImxvY2F0aW9uIiwiZ2VvZmVuY2UiLCAiZ2VvZmVuY2luZyIsICJncHMiCitwYWdlLnRhZ3M9bG9jYXRpb24sZ2VvZmVuY2UsZ2VvZmVuY2luZyxncHMKIGhlYWRlci5oaWRlPTEKIEBqZDpib2R5CiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9tYXBzLmpkIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL21hcHMuamQKaW5kZXggOTY1NDQ0YS4uMjQ2NjY0ZSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL21hcHMuamQKKysrIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL21hcHMuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUdvb2dsZSBNYXBzIEFuZHJvaWQgQVBJCi1wYWdlLnRhZ3M9Im1hcHZpZXciLCJsb2NhdGlvbiIKK3BhZ2UudGFncz1tYXB2aWV3LGxvY2F0aW9uCiBoZWFkZXIuaGlkZT0xCiAKIEBqZDpib2R5CkBAIC04OCw0ICs4OCw0IEBACiAgICAgPC9wPgogICA8L2Rpdj4KIAotPC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9kaXY+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvcGx1cy5qZCBiL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9wbHVzLmpkCmluZGV4IGUxMjZkYWQuLjAwYjA0ODggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9wbHVzLmpkCisrKyBiL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy9wbHVzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Hb29nbGUrIFBsYXRmb3JtIGZvciBBbmRyb2lkCi1wYWdlLnRhZ3M9ImF1dGhlbnRpY2F0aW9uIiwic2lnbmluIiwic29jaWFsIgorcGFnZS50YWdzPWF1dGhlbnRpY2F0aW9uLHNpZ25pbixzb2NpYWwKIGhlYWRlci5oaWRlPTEKIAogQGpkOmJvZHkKQEAgLTg3LDQgKzg3LDQgQEAKICAgICBHb29nbGUrIGRldmVsb3BlciBkb2N1bWVudHMgYXQgPGEgY2xhc3M9ImV4dGVybmFsLWxpbmsiCiAgICAgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vKy9tb2JpbGUvYW5kcm9pZC8iPmRldmVsb3BlcnMuZ29vZ2xlLmNvbS8rPC9hPi48L3A+CiAgIDwvZGl2PgotPC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9kaXY+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvd2FsbGV0LmpkIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5LXNlcnZpY2VzL3dhbGxldC5qZAppbmRleCBiOWI5OGQ5Li45NDY3YmUxIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ29vZ2xlL3BsYXktc2VydmljZXMvd2FsbGV0LmpkCisrKyBiL2RvY3MvaHRtbC9nb29nbGUvcGxheS1zZXJ2aWNlcy93YWxsZXQuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUdvb2dsZSBXYWxsZXQgSW5zdGFudCBCdXkgZm9yIEFuZHJvaWQKLXBhZ2UudGFncz0iV2FsbGV0IiwicGF5bWVudHMiLCJJbnN0YW50IEJ1eSIKK3BhZ2UudGFncz1XYWxsZXQscGF5bWVudHMsSW5zdGFudCBCdXkKIGhlYWRlci5oaWRlPTEKIAogQGpkOmJvZHkKQEAgLTgzLDQgKzgzLDQgQEAKIAogCiAgIDwvZGl2PgotPC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9kaXY+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ29vZ2xlL3BsYXkvYmlsbGluZy9ncC1wdXJjaGFzZS1zdGF0dXMtYXBpLmpkIGIvZG9jcy9odG1sL2dvb2dsZS9wbGF5L2JpbGxpbmcvZ3AtcHVyY2hhc2Utc3RhdHVzLWFwaS5qZAppbmRleCA0ZDgwNjgwLi44ZGI3MTMzIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ29vZ2xlL3BsYXkvYmlsbGluZy9ncC1wdXJjaGFzZS1zdGF0dXMtYXBpLmpkCisrKyBiL2RvY3MvaHRtbC9nb29nbGUvcGxheS9iaWxsaW5nL2dwLXB1cmNoYXNlLXN0YXR1cy1hcGkuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVB1cmNoYXNlIFN0YXR1cyBBUEkKLXBhZ2UudGFncz0iSW4tYXBwIEJpbGxpbmciLCAiR29vZ2xlIFBsYXkiLCAiaW5hcHAgYmlsbGluZyIsICJpbiBhcHAgYmlsbGluZyIsICJpYWIiLCAiYmlsbGluZyIKK3BhZ2UudGFncz1Jbi1hcHAgQmlsbGluZyxHb29nbGUgUGxheSxpbmFwcCBiaWxsaW5nLGluIGFwcCBiaWxsaW5nLGlhYixiaWxsaW5nCiAKIEBqZDpib2R5CiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS9hcHBlbmRpeC9tZWRpYS1mb3JtYXRzLmpkIGIvZG9jcy9odG1sL2d1aWRlL2FwcGVuZGl4L21lZGlhLWZvcm1hdHMuamQKaW5kZXggN2M2YzE0NS4uMTlmNTEwYSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL2FwcGVuZGl4L21lZGlhLWZvcm1hdHMuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL2FwcGVuZGl4L21lZGlhLWZvcm1hdHMuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVN1cHBvcnRlZCBNZWRpYSBGb3JtYXRzCi1wYWdlLnRhZ3M9InZpZGVvIiwiYXVkaW8iLCJtcGVnIiwibXA0IiwibTRhIiwibXAzIiwiM2dwIiwiM2dwcCIsImZsYWMiLCJ3YXZlIiwid2F2IgorcGFnZS50YWdzPXZpZGVvLGF1ZGlvLG1wZWcsbXA0LG00YSxtcDMsM2dwLDNncHAsZmxhYyx3YXZlLHdhdgogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvY29tcG9uZW50cy9hY3Rpdml0aWVzLmpkIGIvZG9jcy9odG1sL2d1aWRlL2NvbXBvbmVudHMvYWN0aXZpdGllcy5qZAppbmRleCAxY2JhYTc5Li5iNDYxN2ZiIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvY29tcG9uZW50cy9hY3Rpdml0aWVzLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS9jb21wb25lbnRzL2FjdGl2aXRpZXMuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFjdGl2aXRpZXMKLXBhZ2UudGFncz0iYWN0aXZpdHkiLCJpbnRlbnQiCitwYWdlLnRhZ3M9YWN0aXZpdHksaW50ZW50CiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS9jb21wb25lbnRzL3Byb2Nlc3Nlcy1hbmQtdGhyZWFkcy5qZCBiL2RvY3MvaHRtbC9ndWlkZS9jb21wb25lbnRzL3Byb2Nlc3Nlcy1hbmQtdGhyZWFkcy5qZAppbmRleCAxZmVkNzEyLi5jOGMzNzY0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvY29tcG9uZW50cy9wcm9jZXNzZXMtYW5kLXRocmVhZHMuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL2NvbXBvbmVudHMvcHJvY2Vzc2VzLWFuZC10aHJlYWRzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Qcm9jZXNzZXMgYW5kIFRocmVhZHMKLXBhZ2UudGFncz0ibGlmZWN5Y2xlIiwiYmFja2dyb3VuZCIKK3BhZ2UudGFncz1saWZlY3ljbGUsYmFja2dyb3VuZAogCiBAamQ6Ym9keQogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvZmFxL3NlY3VyaXR5LmpkIGIvZG9jcy9odG1sL2d1aWRlL2ZhcS9zZWN1cml0eS5qZAppbmRleCA5NmZjN2Y1Li44Y2NmMjFmIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvZmFxL3NlY3VyaXR5LmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS9mYXEvc2VjdXJpdHkuamQKQEAgLTQ3LDggKzQ3LDcgQEAKIDxhIG5hbWU9Imlzc3VlIiBpZD0iaXNzdWUiPjwvYT48aDI+SSB0aGluayBJIGZvdW5kIGEgc2VjdXJpdHkgZmxhdy4gSG93IGRvIEkKIHJlcG9ydCBpdD88L2gyPgogCi08cD5Zb3UgY2FuIHJlYWNoIHRoZSBBbmRyb2lkIHNlY3VyaXR5IHRlYW0gYXQgPGEKLWhyZWY9Im1haWx0bzpzZWN1cml0eUBhbmRyb2lkLmNvbSI+c2VjdXJpdHlAYW5kcm9pZC5jb208L2E+LiBJZiB5b3UgbGlrZSwgeW91Cis8cD5Zb3UgY2FuIHJlYWNoIHRoZSBBbmRyb2lkIHNlY3VyaXR5IHRlYW0gYXQgc2VjdXJpdHlAYW5kcm9pZC5jb20uIElmIHlvdSBsaWtlLCB5b3UKIGNhbiBwcm90ZWN0IHlvdXIgbWVzc2FnZSB1c2luZyBvdXIgPGEKIGhyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vYW5kcm9pZC9zZWN1cml0eV9hdF9hbmRyb2lkX2RvdF9jb20udHh0Ij5QR1AKIGtleTwvYT4uPC9wPgpAQCAtNTgsNiArNTcsMTUgQEAKIHVzZXJzIGFyZSBhdCByaXNrLiBJbiByZXR1cm4sIHdlIHdpbGwgbWFrZSBzdXJlIHRvIGtlZXAgdGhlIHJlc2VhcmNoZXIgaW5mb3JtZWQKIG9mIG91ciBwcm9ncmVzcyBpbiBpc3N1aW5nIGEgZml4LiA8L3A+CiAKKzxwPlZ1bG5lcmFiaWxpdGllcyBzcGVjaWZpYyB0byBBbmRyb2lkIE9FTXMgc2hvdWxkIGJlIHJlcG9ydGVkIHRvIHRoZSByZWxldmFudAordmVuZG9yLiBBbiBpbmNvbXBsZXRlIGxpc3Qgb2YgQW5kcm9pZCB2ZW5kb3Igc2VjdXJpdHkgY29udGFjdHMgY2FuIGJlIGZvdW5kIGJlbG93LgorVG8gYmUgYWRkZWQgdG8gdGhpcyBsaXN0LCBwbGVhc2UgY29udGFjdCBzZWN1cml0eUBhbmRyb2lkLmNvbS48L3A+CisKKzx1bD4KKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuaHRjLmNvbS93d3cvdGVybXMvcHJvZHVjdC1zZWN1cml0eS8iPkhUQzwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5tb3Rvcm9sYXNvbHV0aW9ucy5jb20vVVMtRU4vQWJvdXQvU2VjdXJpdHklMjBWdWxuZXJhYmlsaXR5Ij5Nb3Rvcm9sYTwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci5zYW1zdW5nLmNvbS9ub3RpY2UvSG93LXRvLVVzZS10aGUtRm9ydW0iPlNhbXN1bmc8L2E+IC0gbS5zZWN1cml0eUBzYW1zdW5nLmNvbTwvbGk+Cis8L3VsPgogCiA8YSBuYW1lPSJpbmZvcm1lZCIgaWQ9ImluZm9ybWVkIj48L2E+PGgyPkhvdyBjYW4gSSBzdGF5IGluZm9ybWVkIGFib3V0IEFuZHJvaWQgc2VjdXJpdHk/PC9oMj4KIApAQCAtOTEsOCArOTksOCBAQAogPHA+TGlrZSBhbnkgb3RoZXIgcGxhdGZvcm0sIGl0IHdpbGwgYmUgcG9zc2libGUgZm9yIHVuZXRoaWNhbCBkZXZlbG9wZXJzCiB0byBjcmVhdGUgbWFsaWNpb3VzIHNvZnR3YXJlLCBrbm93biBhcyA8YQogaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWx3YXJlIj5tYWx3YXJlPC9hPiwgZm9yIEFuZHJvaWQuIElmIHlvdQotdGhpbmsgc29tZWJvZHkgaXMgdHJ5aW5nIHRvIHNwcmVhZCBtYWx3YXJlLCBwbGVhc2UgbGV0IHVzIGtub3cgYXQgPGEKLWhyZWY9Im1haWx0bzpzZWN1cml0eUBhbmRyb2lkLmNvbSI+c2VjdXJpdHlAYW5kcm9pZC5jb208L2E+LiBQbGVhc2UgaW5jbHVkZSBhcwordGhpbmsgc29tZWJvZHkgaXMgdHJ5aW5nIHRvIHNwcmVhZCBtYWx3YXJlLCBwbGVhc2UgbGV0IHVzIGtub3cgYXQKK3NlY3VyaXR5QGFuZHJvaWQuY29tLiBQbGVhc2UgaW5jbHVkZSBhcwogbXVjaCBkZXRhaWwgYWJvdXQgdGhlIGFwcGxpY2F0aW9uIGFzIHBvc3NpYmxlLCB3aXRoIHRoZSBsb2NhdGlvbiBpdCBpcwogYmVpbmcgZGlzdHJpYnV0ZWQgZnJvbSBhbmQgd2h5IHlvdSBzdXNwZWN0IGl0IG9mIGJlaW5nIG1hbGljaW91cyBzb2Z0d2FyZS48L3A+CiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvYWRtaW4vZGV2aWNlLWFkbWluLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9hZG1pbi9kZXZpY2UtYWRtaW4uamQKaW5kZXggYTQ3NDQ5OC4uZWU2YjgxNCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9hZG1pbi9kZXZpY2UtYWRtaW4uamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9hZG1pbi9kZXZpY2UtYWRtaW4uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPURldmljZSBBZG1pbmlzdHJhdGlvbgotcGFnZS50YWdzPSJkZXZpY2Vwb2xpY3ltYW5hZ2VyIiwicG9saWN5Iiwic2VjdXJpdHkiCitwYWdlLnRhZ3M9ZGV2aWNlcG9saWN5bWFuYWdlcixwb2xpY3ksc2VjdXJpdHkKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9hcHB3aWRnZXRzL2hvc3QuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2FwcHdpZGdldHMvaG9zdC5qZAppbmRleCBkYTc0MDhmLi4xNjllMzg4IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2FwcHdpZGdldHMvaG9zdC5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2FwcHdpZGdldHMvaG9zdC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QXBwIFdpZGdldCBIb3N0Ci1wYWdlLnRhZ3M9IkFwcFdpZGdldEhvc3QiLCJob21lIHNjcmVlbiIsImxhdW5jaGVyIgorcGFnZS50YWdzPUFwcFdpZGdldEhvc3QsaG9tZSBzY3JlZW4sbGF1bmNoZXIKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9hcHB3aWRnZXRzL2luZGV4LmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9hcHB3aWRnZXRzL2luZGV4LmpkCmluZGV4IGQ4YWQ4NDQuLmE3ODNhZDEgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvYXBwd2lkZ2V0cy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2FwcHdpZGdldHMvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFwcCBXaWRnZXRzCi1wYWdlLnRhZ3M9ImhvbWUiLCJBcHBXaWRnZXRQcm92aWRlciIKK3BhZ2UudGFncz1ob21lLEFwcFdpZGdldFByb3ZpZGVyCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L2JsdWV0b290aC1sZS5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L2JsdWV0b290aC1sZS5qZAppbmRleCA0NDljODkyLi41YzMyZTU2IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2Nvbm5lY3Rpdml0eS9ibHVldG9vdGgtbGUuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvYmx1ZXRvb3RoLWxlLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1CbHVldG9vdGggTG93IEVuZXJneQotcGFnZS50YWdzPSJ3aXJlbGVzcyIsImJsdWV0b290aGFkYXB0ZXIiLCJibHVldG9vdGhkZXZpY2UiLCJCTEUiLCJCVExFIgorcGFnZS50YWdzPXdpcmVsZXNzLGJsdWV0b290aGFkYXB0ZXIsYmx1ZXRvb3RoZGV2aWNlLEJMRSxCVExFCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L2JsdWV0b290aC5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L2JsdWV0b290aC5qZAppbmRleCBiNTdmM2UyLi45NjAwOGM1IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2Nvbm5lY3Rpdml0eS9ibHVldG9vdGguamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvYmx1ZXRvb3RoLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1CbHVldG9vdGgKLXBhZ2UudGFncz0id2lyZWxlc3MiLCJibHVldG9vdGhhZGFwdGVyIiwiYmx1ZXRvb3RoZGV2aWNlIgorcGFnZS50YWdzPXdpcmVsZXNzLGJsdWV0b290aGFkYXB0ZXIsYmx1ZXRvb3RoZGV2aWNlCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L25mYy9oY2UuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2Nvbm5lY3Rpdml0eS9uZmMvaGNlLmpkCmluZGV4IDRlZjY4NTkuLjc2ZjdjN2MgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L25mYy9oY2UuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvbmZjL2hjZS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9SG9zdC1iYXNlZCBDYXJkIEVtdWxhdGlvbgotcGFnZS50YWdzPSJob3N0IGNhcmQgZW11bGF0aW9uIiwgImhjZSIsIkhvc3RBcGR1U2VydmljZSIsIk9mZkhvc3RBcGR1U2VydmljZSIsInRhcCBhbmQgcGF5IgorcGFnZS50YWdzPWhvc3QgY2FyZCBlbXVsYXRpb24saGNlLEhvc3RBcGR1U2VydmljZSxPZmZIb3N0QXBkdVNlcnZpY2UsdGFwIGFuZCBwYXkKIAogQGpkOmJvZHkKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvc2lwLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvc2lwLmpkCmluZGV4IDUyNmViODMuLjUxNTQ3NjcgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L3NpcC5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2Nvbm5lY3Rpdml0eS9zaXAuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNlc3Npb24gSW5pdGlhdGlvbiBQcm90b2NvbAotcGFnZS50YWdzPSJzaXBtYW5hZ2VyIiwic2lwcHJvZmlsZSIsInNpcGF1ZGlvY2FsbCIsInRlbGVwaG9ueSIKK3BhZ2UudGFncz1zaXBtYW5hZ2VyLHNpcHByb2ZpbGUsc2lwYXVkaW9jYWxsLHRlbGVwaG9ueQogQGpkOmJvZHkKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgogPGRpdiBpZD0icXYiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvd2lmaXAycC5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvY29ubmVjdGl2aXR5L3dpZmlwMnAuamQKaW5kZXggN2NhZGRlMS4uZDdlMTI2OSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9jb25uZWN0aXZpdHkvd2lmaXAycC5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2Nvbm5lY3Rpdml0eS93aWZpcDJwLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1XaS1GaSBQZWVyLXRvLVBlZXIKLXBhZ2UudGFncz0id2lyZWxlc3MiLCJXaWZpUDJwTWFuYWdlciIsIldpLUZpIERpcmVjdCIsIldpRmkgRGlyZWN0IiwiUDJQIiwiV2ktRmkgUDJQIiwiV2lGaSBQMlAiCitwYWdlLnRhZ3M9d2lyZWxlc3MsV2lmaVAycE1hbmFnZXIsV2ktRmkgRGlyZWN0LFdpRmkgRGlyZWN0LFAyUCxXaS1GaSBQMlAsV2lGaSBQMlAKIAogQGpkOmJvZHkKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9kYXRhL2RhdGEtc3RvcmFnZS5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvZGF0YS9kYXRhLXN0b3JhZ2UuamQKaW5kZXggMzg1YzExNi4uNmZjYTAyZjAgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvZGF0YS9kYXRhLXN0b3JhZ2UuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9kYXRhL2RhdGEtc3RvcmFnZS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U3RvcmFnZSBPcHRpb25zCi1wYWdlLnRhZ3M9ImRhdGFiYXNlIiwic2hhcmVkcHJlZmVyZW5jZXMiLCJzZGNhcmQiCitwYWdlLnRhZ3M9ZGF0YWJhc2Usc2hhcmVkcHJlZmVyZW5jZXMsc2RjYXJkCiBAamQ6Ym9keQogCiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvZGF0YS9pbnN0YWxsLWxvY2F0aW9uLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9kYXRhL2luc3RhbGwtbG9jYXRpb24uamQKaW5kZXggMmVjMGQ1YS4uY2M1OGI0NiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9kYXRhL2luc3RhbGwtbG9jYXRpb24uamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9kYXRhL2luc3RhbGwtbG9jYXRpb24uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFwcCBJbnN0YWxsIExvY2F0aW9uCi1wYWdlLnRhZ3M9InNkY2FyZCIsImV4dGVybmFsIgorcGFnZS50YWdzPXNkY2FyZCxleHRlcm5hbAogQGpkOmJvZHkKIAogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL2dyYXBoaWNzL29wZW5nbC5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvZ3JhcGhpY3Mvb3BlbmdsLmpkCmluZGV4IGY0NjExM2QuLmQxOTQwODIgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvZ3JhcGhpY3Mvb3BlbmdsLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvZ3JhcGhpY3Mvb3BlbmdsLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1PcGVuR0wgRVMKLXBhZ2UudGFncz0iZ2FtZXMiCitwYWdlLnRhZ3M9Z2FtZXMKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9ncmFwaGljcy9wcm9wLWFuaW1hdGlvbi5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvZ3JhcGhpY3MvcHJvcC1hbmltYXRpb24uamQKaW5kZXggMjJiZjc2OTYuLmU0NTU0OTYgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvZ3JhcGhpY3MvcHJvcC1hbmltYXRpb24uamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9ncmFwaGljcy9wcm9wLWFuaW1hdGlvbi5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9UHJvcGVydHkgQW5pbWF0aW9uCi1wYWdlLnRhZ3M9InZhbHVlYW5pbWF0b3IiLCJvYmplY3RhbmltYXRvciIsImxheW91dHRyYW5zaXRpb24iLCJWaWV3UHJvcGVydHlBbmltYXRvciIKK3BhZ2UudGFncz12YWx1ZWFuaW1hdG9yLG9iamVjdGFuaW1hdG9yLGxheW91dHRyYW5zaXRpb24sVmlld1Byb3BlcnR5QW5pbWF0b3IKIEBqZDpib2R5CiAKICAgPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21hbmlmZXN0L3VzZXMtZmVhdHVyZS1lbGVtZW50LmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9tYW5pZmVzdC91c2VzLWZlYXR1cmUtZWxlbWVudC5qZAppbmRleCA5NWY2MmE1Li40NDVkNWNlIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21hbmlmZXN0L3VzZXMtZmVhdHVyZS1lbGVtZW50LmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWFuaWZlc3QvdXNlcy1mZWF0dXJlLWVsZW1lbnQuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPSZsdDt1c2VzLWZlYXR1cmUmZ3Q7Ci1wYWdlLnRhZ3M9ImZpbHRlcmluZyIsImZlYXR1cmVzIiwiZ29vZ2xlIHBsYXkgZmlsdGVycyIsInBlcm1pc3Npb25zIgorcGFnZS50YWdzPWZpbHRlcmluZyxmZWF0dXJlcyxnb29nbGUgcGxheSBmaWx0ZXJzLHBlcm1pc3Npb25zCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTEwNzEsNCArMTA3MSw0IEBACiAgIDx0ZD48Y29kZT5hbmRyb2lkLmhhcmR3YXJlLndpZmk8L2NvZGU+PC90ZD4KIDwhLS0gIDx0ZD48L3RkPiAtLT4KIDwvdHI+Ci08L3RhYmxlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvdGFibGU+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21hbmlmZXN0L3VzZXMtc2RrLWVsZW1lbnQuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21hbmlmZXN0L3VzZXMtc2RrLWVsZW1lbnQuamQKaW5kZXggOGRlNDczOS4uYzg4ZTZiZSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9tYW5pZmVzdC91c2VzLXNkay1lbGVtZW50LmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWFuaWZlc3QvdXNlcy1zZGstZWxlbWVudC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9Jmx0O3VzZXMtc2RrJmd0OwotcGFnZS50YWdzPSJhcGkgbGV2ZWxzIiwic2RrIHZlcnNpb24iLCJtaW5zZGt2ZXJzaW9uIiwidGFyZ2V0c2RrdmVyc2lvbiIsIm1heHNka3ZlcnNpb24iCitwYWdlLnRhZ3M9YXBpIGxldmVscyxzZGsgdmVyc2lvbixtaW5zZGt2ZXJzaW9uLHRhcmdldHNka3ZlcnNpb24sbWF4c2RrdmVyc2lvbgogQGpkOmJvZHkKIAogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21lZGlhL2F1ZGlvLWNhcHR1cmUuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21lZGlhL2F1ZGlvLWNhcHR1cmUuamQKaW5kZXggNDRjNjE4Zi4uOGU2MGM4ZiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9tZWRpYS9hdWRpby1jYXB0dXJlLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWVkaWEvYXVkaW8tY2FwdHVyZS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QXVkaW8gQ2FwdHVyZQotcGFnZS50YWdzPSJtZWRpYXJlY29yZGVyIgorcGFnZS50YWdzPW1lZGlhcmVjb3JkZXIKIEBqZDpib2R5CiAKICAgICA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTI0OSw0ICsyNDksNCBAQAogICAgICAgICB9CiAgICAgfQogfQotPC9wcmU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9wcmU+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21lZGlhL2NhbWVyYS5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWVkaWEvY2FtZXJhLmpkCmluZGV4IGU0ODEwOWEuLjU2ZWY2MjQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWVkaWEvY2FtZXJhLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWVkaWEvY2FtZXJhLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1DYW1lcmEKLXBhZ2UudGFncz0icGhvdG8iLCJ2aWRlbyIsInBpY3R1cmUiLCJtZWRpYXJlY29yZGVyIgorcGFnZS50YWdzPXBob3RvLHZpZGVvLHBpY3R1cmUsbWVkaWFyZWNvcmRlcgogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21lZGlhL21lZGlhcGxheWVyLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9tZWRpYS9tZWRpYXBsYXllci5qZAppbmRleCBmYjI3MmQyLi42M2MwNGEyIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL21lZGlhL21lZGlhcGxheWVyLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvbWVkaWEvbWVkaWFwbGF5ZXIuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPU1lZGlhIFBsYXliYWNrCi1wYWdlLnRhZ3M9Im1lZGlhcGxheWVyIiwic291bmRwb29sIiwiYXVkaW9tYW5hZ2VyIgorcGFnZS50YWdzPW1lZGlhcGxheWVyLHNvdW5kcG9vbCxhdWRpb21hbmFnZXIKIEBqZDpib2R5CiAKICAgICA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTc0Myw0ICs3NDMsNCBAQAogbU1lZGlhUGxheWVyLnNldERhdGFTb3VyY2UoZ2V0QXBwbGljYXRpb25Db250ZXh0KCksIGNvbnRlbnRVcmkpOwogCiAvLyAuLi5wcmVwYXJlIGFuZCBzdGFydC4uLgotPC9wcmU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9wcmU+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3Jlc291cmNlcy9sb2NhbGl6YXRpb24uamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3Jlc291cmNlcy9sb2NhbGl6YXRpb24uamQKaW5kZXggNzI4OGFlYi4uM2JiOWFiNSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9yZXNvdXJjZXMvbG9jYWxpemF0aW9uLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvcmVzb3VyY2VzL2xvY2FsaXphdGlvbi5qZApAQCAtMSw0ODcgKzEsNDg1IEBACi1wYWdlLnRpdGxlPUxvY2FsaXppbmcgd2l0aCBSZXNvdXJjZXMNCi1wYXJlbnQudGl0bGU9QXBwbGljYXRpb24gUmVzb3VyY2VzDQotcGFnZS50YWdzPSJsb2NhbGl6aW5nIiwibG9jYWxpemF0aW9uIiwicmVzb3VyY2VzIiwgImZvcm1hdHMiLCAibDEwbiINCi1wYXJlbnQubGluaz1pbmRleC5odG1sDQotQGpkOmJvZHkNCi0NCi08ZGl2IGlkPSJxdi13cmFwcGVyIj4NCi0gICAgPGRpdiBpZD0icXYiPg0KLQ0KLTxoMj5RdWlja3ZpZXc8L2gyPg0KLQ0KLTx1bD4NCi0gIDxsaT5Vc2UgcmVzb3VyY2Ugc2V0cyB0byBjcmVhdGUgYSBsb2NhbGl6ZWQgYXBwLjwvbGk+DQotICA8bGk+QW5kcm9pZCBsb2FkcyB0aGUgY29ycmVjdCByZXNvdXJjZSBzZXQgZm9yIHRoZSB1c2VyJ3MgbGFuZ3VhZ2UgYW5kIGxvY2FsZS48L2xpPg0KLSAgPGxpPklmIGxvY2FsaXplZCByZXNvdXJjZXMgYXJlIG5vdCBhdmFpbGFibGUsIEFuZHJvaWQgbG9hZHMgeW91ciBkZWZhdWx0IHJlc291cmNlcy48L2xpPg0KLTwvdWw+DQotDQotPGgyPkluIHRoaXMgZG9jdW1lbnQ8L2gyPg0KLTxvbD4NCi0gIDxsaT48YSBocmVmPSIjcmVzb3VyY2Utc3dpdGNoaW5nIj5PdmVydmlldzogUmVzb3VyY2UtU3dpdGNoaW5nIGluIEFuZHJvaWQ8L2E+PC9saT4NCi08bGk+PGEgaHJlZj0iI3VzaW5nLWZyYW1ld29yayI+VXNpbmcgUmVzb3VyY2VzIGZvciBMb2NhbGl6YXRpb248L2E+PC9saT4NCi08bGk+PGEgaHJlZj0iI3N0cmF0ZWdpZXMiPkxvY2FsaXphdGlvbiBUaXBzPC9hPjwvbGk+DQotPGxpPjxhIGhyZWY9IiN0ZXN0aW5nIj5UZXN0aW5nIExvY2FsaXplZCBBcHBsaWNhdGlvbnM8L2E+PC9saT4NCi08L29sPg0KLQ0KLTxoMj5TZWUgYWxzbzwvaDI+DQotICA8b2w+DQotICAgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9ZGlzdHJpYnV0ZS9nb29nbGVwbGF5L3B1Ymxpc2gvbG9jYWxpemluZy5odG1sIj5Mb2NhbGl6YXRpb24gQ2hlY2tsaXN0PC9hPjwvbGk+DQotICAgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3Jlc291cmNlcy9wcm92aWRpbmctcmVzb3VyY2VzLmh0bWwiPlByb3ZpZGluZyBSZXNvdXJjZXM8L2E+PC9saT4NCi0gICAgPGxpPjxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvdWkvZGVjbGFyaW5nLWxheW91dC5odG1sIj5MYXlvdXRzPC9hPjwvbGk+DQotICAgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9cmVmZXJlbmNlL2FuZHJvaWQvYXBwL0FjdGl2aXR5Lmh0bWwjQWN0aXZpdHlMaWZlY3ljbGUiPkFjdGl2aXR5IExpZmVjeWNsZTwvYT48L2xpPg0KLTwvb2w+DQotPC9kaXY+DQotPC9kaXY+DQotDQotPHA+QW5kcm9pZCB3aWxsIHJ1biBvbiBtYW55ICBkZXZpY2VzIGluIG1hbnkgIHJlZ2lvbnMuIFRvIHJlYWNoIHRoZSBtb3N0IHVzZXJzLA0KLXlvdXIgYXBwbGljYXRpb24gc2hvdWxkIGhhbmRsZSB0ZXh0LCBhdWRpbyBmaWxlcywgbnVtYmVycywgY3VycmVuY3ksIGFuZA0KLWdyYXBoaWNzIGluIHdheXMgYXBwcm9wcmlhdGUgdG8gdGhlIGxvY2FsZXMgd2hlcmUgeW91ciBhcHBsaWNhdGlvbiB3aWxsIGJlIHVzZWQuDQotPC9wPg0KLQ0KLTxwPlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGJlc3QgcHJhY3RpY2VzIGZvciBsb2NhbGl6aW5nIEFuZHJvaWQNCi1hcHBsaWNhdGlvbnMuIFRoZSBwcmluY2lwbGVzIGFwcGx5IHdoZXRoZXIgeW91IGFyZSBkZXZlbG9waW5nIHlvdXIgYXBwbGljYXRpb24gIA0KLXVzaW5nIEFEVCB3aXRoIEVjbGlwc2UsIEFudC1iYXNlZCB0b29scywgb3IgYW55IG90aGVyIElERS4gPC9wPg0KLQ0KLTxwPllvdSBzaG91bGQgYWxyZWFkeSBoYXZlIGEgd29ya2luZyBrbm93bGVkZ2Ugb2YgSmF2YSBhbmQgYmUgIGZhbWlsaWFyIHdpdGgNCi1BbmRyb2lkIHJlc291cmNlIGxvYWRpbmcsIHRoZSBkZWNsYXJhdGlvbiBvZiB1c2VyIGludGVyZmFjZSBlbGVtZW50cyBpbiBYTUwsDQotZGV2ZWxvcG1lbnQgY29uc2lkZXJhdGlvbnMgc3VjaCBhcyBBY3Rpdml0eSBsaWZlY3ljbGUsIGFuZCBnZW5lcmFsIHByaW5jaXBsZXMgb2YNCi1pbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgbG9jYWxpemF0aW9uLiA8L3A+DQotDQotPHA+SXQgaXMgZ29vZCBwcmFjdGljZSB0byB1c2UgdGhlIEFuZHJvaWQgcmVzb3VyY2UgZnJhbWV3b3JrIHRvIHNlcGFyYXRlIHRoZQ0KLWxvY2FsaXplZCBhc3BlY3RzIG9mIHlvdXIgYXBwbGljYXRpb24gYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIHRoZSBjb3JlIEphdmENCi1mdW5jdGlvbmFsaXR5OjwvcD4NCi0NCi08dWw+DQotICA8bGk+WW91IGNhbiBwdXQgbW9zdCBvciBhbGwgb2YgdGhlIDxlbT5jb250ZW50czwvZW0+IG9mIHlvdXIgYXBwbGljYXRpb24ncw0KLXVzZXIgaW50ZXJmYWNlIGludG8gcmVzb3VyY2UgZmlsZXMsIGFzIGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50IGFuZCBpbiA8YQ0KLWhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3Byb3ZpZGluZy1yZXNvdXJjZXMuaHRtbCI+UHJvdmlkaW5nIFJlc291cmNlczwvYT4uPC9saT4NCi0gIDxsaT5UaGUgPGVtPmJlaGF2aW9yPC9lbT4gb2YgdGhlIHVzZXIgaW50ZXJmYWNlLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgZHJpdmVuDQotYnkgeW91ciBKYXZhIGNvZGUuIA0KLSAgICBGb3IgZXhhbXBsZSwgaWYgdXNlcnMgaW5wdXQgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIGZvcm1hdHRlZCBvciBzb3J0ZWQNCi1kaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gbG9jYWxlLCB0aGVuIHlvdSB3b3VsZCB1c2UgSmF2YSB0byBoYW5kbGUgdGhlIGRhdGENCi1wcm9ncmFtbWF0aWNhbGx5LiBUaGlzIGRvY3VtZW50IGRvZXMgbm90IGNvdmVyIGhvdyB0byAgbG9jYWxpemUgeW91ciBKYXZhIGNvZGUuDQotPC9saT4NCi08L3VsPg0KLQ0KLTxwPkZvciBhIHNob3J0IGd1aWRlIHRvIGxvY2FsaXppbmcgc3RyaW5ncyBpbiB5b3VyIGFwcCwgc2VlIHRoZSB0cmFpbmluZyBsZXNzb24sIDxhDQotaHJlZj0ie0Bkb2NSb290fXRyYWluaW5nL2Jhc2ljcy9zdXBwb3J0aW5nLWRldmljZXMvbGFuZ3VhZ2VzLmh0bWwiPlN1cHBvcnRpbmcgRGlmZmVyZW50IExhbmd1YWdlczwvYT4uIDwvcD4NCi0NCi0NCi08aDIgaWQ9InJlc291cmNlLXN3aXRjaGluZyI+T3ZlcnZpZXc6IFJlc291cmNlLVN3aXRjaGluZyBpbiBBbmRyb2lkPC9oMj4NCi0NCi08cD5SZXNvdXJjZXMgYXJlIHRleHQgc3RyaW5ncywgbGF5b3V0cywgc291bmRzLCBncmFwaGljcywgYW5kIGFueSBvdGhlciBzdGF0aWMNCi1kYXRhIHRoYXQgeW91ciAgQW5kcm9pZCBhcHBsaWNhdGlvbiAgbmVlZHMuIEFuIGFwcGxpY2F0aW9uIGNhbiBpbmNsdWRlIG11bHRpcGxlDQotc2V0cyBvZiByZXNvdXJjZXMsIGVhY2ggY3VzdG9taXplZCBmb3IgYSBkaWZmZXJlbnQgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIFdoZW4gYQ0KLXVzZXIgcnVucyB0aGUgYXBwbGljYXRpb24sICBBbmRyb2lkICAgIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyBhbmQgbG9hZHMgdGhlIA0KLXJlc291cmNlcyB0aGF0IGJlc3QgbWF0Y2ggdGhlIGRldmljZS48L3A+DQotDQotPHA+KFRoaXMgZG9jdW1lbnQgZm9jdXNlcyBvbiBsb2NhbGl6YXRpb24gYW5kIGxvY2FsZS4gRm9yIGEgY29tcGxldGUgZGVzY3JpcHRpb24NCi1vZiByZXNvdXJjZS1zd2l0Y2hpbmcgYW5kIGFsbCB0aGUgdHlwZXMgb2YgY29uZmlndXJhdGlvbnMgdGhhdCB5b3UgY2FuDQotc3BlY2lmeSAmIzgyMTI7IHNjcmVlbiBvcmllbnRhdGlvbiwgdG91Y2hzY3JlZW4gdHlwZSwgYW5kIHNvIG9uICYjODIxMjsgc2VlIDxhDQotaHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9yZXNvdXJjZXMvcHJvdmlkaW5nLXJlc291cmNlcy5odG1sI0FsdGVybmF0aXZlUmVzb3VyY2VzIj5Qcm92aWRpbmcNCi1BbHRlcm5hdGl2ZSBSZXNvdXJjZXM8L2E+Lik8L3A+DQotDQotPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4NCi0gIDx0ciBib3JkZXI9IjAiPg0KLSAgICA8dGQgd2lkdGg9IjE4MCIgc3R5bGU9ImJvcmRlcjogMHB0IG5vbmUgOyI+PHAgY2xhc3M9InNwZWNpYWwtbm90ZSI+DQotICAgIDxzdHJvbmc+V2hlbiB5b3Ugd3JpdGUgeW91ciBhcHBsaWNhdGlvbjo8L3N0cm9uZz4NCi0gICAgPGJyPjxicj4NCi0gICAgWW91IGNyZWF0ZSBhIHNldCBvZiBkZWZhdWx0IHJlc291cmNlcywgcGx1cyBhbHRlcm5hdGl2ZXMgdG8gYmUgdXNlZCBpbg0KLSAgICBkaWZmZXJlbnQgbG9jYWxlcy48L3A+PC90ZD4NCi0gICAgPHRkIHN0eWxlPSJib3JkZXI6IDBwdCBub25lOyBwYWRkaW5nOjAiPg0KLSAgICA8cCBzdHlsZT0iYm9yZGVyOjA7IHBhZGRpbmc6MCI+PGltZyBzcmM9Ii4uLy4uLy4uL2ltYWdlcy9yZXNvdXJjZXMvcmlnaHQtYXJyb3cucG5nIiBhbHQ9InJpZ2h0LWFycm93IiANCi0gICAgd2lkdGg9IjUxIiBoZWlnaHQ9IjE3Ij48L3A+PC90ZD4NCi0gICAgPHRkIHdpZHRoPSIxODAiIHN0eWxlPSJib3JkZXI6IDBwdCBub25lIDsiPjxwIGNsYXNzPSJzcGVjaWFsLW5vdGUiPg0KLSAgICA8c3Ryb25nPldoZW4gYSB1c2VyIHJ1bnMgeW91ciBhcHBsaWNhdGlvbjo8L3N0cm9uZz4NCi0gICAgPGJyPjxicj5UaGUgQW5kcm9pZCBzeXN0ZW0gc2VsZWN0cyB3aGljaCByZXNvdXJjZXMgdG8gbG9hZCwgYmFzZWQgb24gdGhlDQotICAgIGRldmljZSdzIGxvY2FsZS48L3A+PC90ZD4NCi0gIDwvdHI+DQotPC90YWJsZT4NCi0NCi08cD5XaGVuIHlvdSB3cml0ZSB5b3VyIGFwcGxpY2F0aW9uLCB5b3UgY3JlYXRlIGRlZmF1bHQgYW5kIGFsdGVybmF0aXZlIHJlc291cmNlcw0KLWZvciB5b3VyIGFwcGxpY2F0aW9uIHRvIHVzZS4gVG8gY3JlYXRlICByZXNvdXJjZXMsIHlvdSBwbGFjZSBmaWxlcyB3aXRoaW4NCi1zcGVjaWFsbHkgbmFtZWQgc3ViZGlyZWN0b3JpZXMgb2YgdGhlIHByb2plY3QncyA8Y29kZT5yZXMvPC9jb2RlPiBkaXJlY3RvcnkuDQotPC9wPg0KLQ0KLQ0KLQ0KLTxoMyBpZD0iZGVmYXVsdHMtci1pbXBvcnRhbnQiPldoeSBEZWZhdWx0IFJlc291cmNlcyBBcmUgSW1wb3J0YW50PC9oMz4NCi0NCi08cD5XaGVuZXZlciB0aGUgYXBwbGljYXRpb24gcnVucyBpbiBhIGxvY2FsZSBmb3Igd2hpY2ggeW91IGhhdmUgbm90IHByb3ZpZGVkDQotbG9jYWxlLXNwZWNpZmljIHRleHQsICBBbmRyb2lkIHdpbGwgbG9hZCB0aGUgZGVmYXVsdCBzdHJpbmdzIGZyb20NCi08Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPi4gSWYgdGhpcyBkZWZhdWx0ICBmaWxlIGlzIGFic2VudCwgb3IgaWYgaXQgDQotaXMgbWlzc2luZyBhIHN0cmluZyB0aGF0IHlvdXIgYXBwbGljYXRpb24gbmVlZHMsIHRoZW4geW91ciBhcHBsaWNhdGlvbiB3aWxsIG5vdCBydW4gDQotYW5kIHdpbGwgc2hvdyBhbiBlcnJvci4gDQotVGhlIGV4YW1wbGUgYmVsb3cgaWxsdXN0cmF0ZXMgd2hhdCBjYW4gaGFwcGVuIHdoZW4gdGhlIGRlZmF1bHQgdGV4dCBmaWxlIGlzIGluY29tcGxldGUuIDwvcD4NCi0NCi08cD48ZW0+RXhhbXBsZTo8L2VtPg0KLTxwPkFuIGFwcGxpY2F0aW9uJ3MgSmF2YSBjb2RlIHJlZmVycyB0byBqdXN0IHR3byBzdHJpbmdzLCA8Y29kZT50ZXh0X2E8L2NvZGU+IGFuZCANCi0JPGNvZGU+dGV4dF9iPC9jb2RlPi4gVGhpcyBhcHBsaWNhdGlvbiBpbmNsdWRlcyBhIGxvY2FsaXplZCByZXNvdXJjZSBmaWxlIA0KLQkoPGNvZGU+cmVzL3ZhbHVlcy1lbi9zdHJpbmdzLnhtbDwvY29kZT4pIHRoYXQgZGVmaW5lcyA8Y29kZT50ZXh0X2E8L2NvZGU+IGFuZCANCi0JPGNvZGU+dGV4dF9iPC9jb2RlPiBpbiBFbmdsaXNoLiBUaGlzIGFwcGxpY2F0aW9uIGFsc28gaW5jbHVkZXMgYSBkZWZhdWx0IA0KLQlyZXNvdXJjZSBmaWxlICg8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPikgdGhhdCBpbmNsdWRlcyBhDQotZGVmaW5pdGlvbiBmb3IgPGNvZGU+dGV4dF9hPC9jb2RlPiwgYnV0IG5vdCBmb3IgPGNvZGU+dGV4dF9iPC9jb2RlPjoNCi08dWw+DQotICA8bGk+VGhpcyBhcHBsaWNhdGlvbiBtaWdodCBjb21waWxlIHdpdGhvdXQgYSBwcm9ibGVtLiBBbiBJREUgc3VjaCBhcyBFY2xpcHNlIA0KLSAgCXdpbGwgbm90IGhpZ2hsaWdodCBhbnkgZXJyb3JzIGlmIGEgcmVzb3VyY2UgaXMgbWlzc2luZy48L2xpPg0KLSAgPGxpPldoZW4gdGhpcyBhcHBsaWNhdGlvbiBpcyBsYXVuY2hlZCBvbiBhIGRldmljZSB3aXRoIGxvY2FsZSBzZXQgdG8gRW5nbGlzaCwgDQotICAJdGhlIGFwcGxpY2F0aW9uICBtaWdodCBydW4gd2l0aG91dCBhIHByb2JsZW0sIGJlY2F1c2UgDQotICAJPGNvZGU+cmVzL3ZhbHVlcy1lbi9zdHJpbmdzLnhtbDwvY29kZT4gY29udGFpbnMgYm90aCBvZiB0aGUgbmVlZGVkIHRleHQgDQotICAJc3RyaW5ncy48L2xpPg0KLSAgPGxpPkhvd2V2ZXIsIDxzdHJvbmc+dGhlIHVzZXIgIHdpbGwgc2VlIGFuIGVycm9yIG1lc3NhZ2UgYW5kIGEgRm9yY2UgQ2xvc2UgDQotICAJYnV0dG9uPC9zdHJvbmc+IHdoZW4gdGhpcyBhcHBsaWNhdGlvbiBpcyBsYXVuY2hlZCBvbiBhIGRldmljZSBzZXQgdG8gYSANCi0gIAlsYW5ndWFnZSBvdGhlciB0aGFuIEVuZ2xpc2guIFRoZSBhcHBsaWNhdGlvbiB3aWxsIG5vdCBsb2FkLjwvbGk+DQotPC91bD4NCi0NCi0NCi08cD5UbyBwcmV2ZW50IHRoaXMgc2l0dWF0aW9uLCBtYWtlIHN1cmUgdGhhdCBhIDxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+IA0KLQlmaWxlIGV4aXN0cyBhbmQgdGhhdCBpdCBkZWZpbmVzIGV2ZXJ5IG5lZWRlZCBzdHJpbmcuIFRoZSBzaXR1YXRpb24gYXBwbGllcyB0byANCi0JYWxsIHR5cGVzIG9mIHJlc291cmNlcywgbm90IGp1c3Qgc3RyaW5nczogWW91IA0KLQluZWVkIHRvIGNyZWF0ZSBhICBzZXQgb2YgZGVmYXVsdCByZXNvdXJjZSBmaWxlcyBjb250YWluaW5nIGFsbCANCi0JdGhlIHJlc291cmNlcyB0aGF0IHlvdXIgYXBwbGljYXRpb24gY2FsbHMgdXBvbiAmIzgyMTI7IGxheW91dHMsIGRyYXdhYmxlcywgDQotCWFuaW1hdGlvbnMsIGV0Yy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IHRlc3RpbmcsIHNlZSA8YSBocmVmPSIjdGVzdC1mb3ItZGVmYXVsdCI+DQotCVRlc3RpbmcgZm9yIERlZmF1bHQgUmVzb3VyY2VzPC9hPi48L3A+DQotDQotPGgyIGlkPSJ1c2luZy1mcmFtZXdvcmsiPlVzaW5nIFJlc291cmNlcyBmb3IgTG9jYWxpemF0aW9uPC9oMj4NCi0NCi08aDMgaWQ9ImNyZWF0aW5nLWRlZmF1bHRzIj5Ib3cgdG8gQ3JlYXRlIERlZmF1bHQgUmVzb3VyY2VzPC9oMz4NCi0NCi08cD5QdXQgdGhlIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCB0ZXh0IGluDQotYSBmaWxlIHdpdGggdGhlIGZvbGxvd2luZyBsb2NhdGlvbiBhbmQgbmFtZTo8L3A+DQotPHA+PGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT4gKHJlcXVpcmVkIGRpcmVjdG9yeSk8L3A+DQotDQotPHA+VGhlIHRleHQgc3RyaW5ncyBpbiA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiBzaG91bGQgIHVzZSB0aGUNCi1kZWZhdWx0IGxhbmd1YWdlLCB3aGljaCBpcyB0aGUgbGFuZ3VhZ2UgdGhhdCB5b3UgZXhwZWN0IG1vc3Qgb2YgeW91ciBhcHBsaWNhdGlvbidzIHVzZXJzIHRvDQotc3BlYWsuICA8L3A+DQotDQotPHA+VGhlIGRlZmF1bHQgcmVzb3VyY2Ugc2V0IG11c3QgYWxzbyBpbmNsdWRlIGFueSBkZWZhdWx0IGRyYXdhYmxlcyBhbmQgbGF5b3V0cywgDQotCWFuZCBjYW4gaW5jbHVkZSBvdGhlciB0eXBlcyBvZiByZXNvdXJjZXMgc3VjaCBhcyBhbmltYXRpb25zLiANCi08YnI+DQotICA8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvZHJhd2FibGUvPC9jb2RlPihyZXF1aXJlZCBkaXJlY3RvcnkgaG9sZGluZyBhdCBsZWFzdA0KLSAgb25lIGdyYXBoaWMgZmlsZSwgZm9yIHRoZSBhcHBsaWNhdGlvbidzIGljb24gb24gR29vZ2xlIFBsYXkpPGJyPg0KLSAgPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cmVzL2xheW91dC88L2NvZGU+IChyZXF1aXJlZCBkaXJlY3RvcnkgaG9sZGluZyBhbiBYTUwNCi0gIGZpbGUgdGhhdCBkZWZpbmVzIHRoZSBkZWZhdWx0IGxheW91dCk8YnI+DQotICA8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvYW5pbS88L2NvZGU+IChyZXF1aXJlZCBpZiB5b3UgaGF2ZSBhbnkgDQotICA8Y29kZT5yZXMvYW5pbS08ZW0+Jmx0O3F1YWxpZmllcnMmZ3Q7PC9lbT48L2NvZGU+IGZvbGRlcnMpPGJyPg0KLSAgPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cmVzL3htbC88L2NvZGU+IChyZXF1aXJlZCBpZiB5b3UgaGF2ZSBhbnkgDQotICA8Y29kZT5yZXMveG1sLTxlbT4mbHQ7cXVhbGlmaWVycyZndDs8L2VtPjwvY29kZT4gZm9sZGVycyk8YnI+DQotICA8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvcmF3LzwvY29kZT4gKHJlcXVpcmVkIGlmIHlvdSBoYXZlIGFueSANCi0gIDxjb2RlPnJlcy9yYXctPGVtPiZsdDtxdWFsaWZpZXJzJmd0OzwvZW0+PC9jb2RlPiBmb2xkZXJzKQ0KLTwvcD4NCi0NCi08cCBjbGFzcz0ibm90ZSI+PHN0cm9uZz5UaXA6PC9zdHJvbmc+IEluIHlvdXIgY29kZSwgZXhhbWluZSBlYWNoIHJlZmVyZW5jZSB0byANCi0JYW4gQW5kcm9pZCByZXNvdXJjZS4gTWFrZSBzdXJlIHRoYXQgYSBkZWZhdWx0IHJlc291cmNlIGlzIGRlZmluZWQgZm9yIGVhY2gNCi0Jb25lLiBBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHN0cmluZyBmaWxlIGlzIGNvbXBsZXRlOiBBIDxlbT4NCi0JbG9jYWxpemVkPC9lbT4gc3RyaW5nIGZpbGUgY2FuIGNvbnRhaW4gYSBzdWJzZXQgb2YgdGhlIHN0cmluZ3MsIGJ1dCB0aGUgDQotCTxlbT5kZWZhdWx0PC9lbT4gc3RyaW5nIGZpbGUgbXVzdCBjb250YWluIHRoZW0gYWxsLiANCi08L3A+DQotDQotPGgzIGlkPSJjcmVhdGluZy1hbHRlcm5hdGl2ZXMiPkhvdyB0byBDcmVhdGUgQWx0ZXJuYXRpdmUgUmVzb3VyY2VzPC9oMz4NCi0NCi08cD5BIGxhcmdlIHBhcnQgb2YgbG9jYWxpemluZyBhbiBhcHBsaWNhdGlvbiBpcyBwcm92aWRpbmcgYWx0ZXJuYXRpdmUgdGV4dCBmb3INCi1kaWZmZXJlbnQgbGFuZ3VhZ2VzLiBJbiBzb21lIGNhc2VzIHlvdSB3aWxsIGFsc28gcHJvdmlkZSBhbHRlcm5hdGl2ZSBncmFwaGljcywNCi1zb3VuZHMsIGxheW91dHMsIGFuZCBvdGhlciBsb2NhbGUtc3BlY2lmaWMgcmVzb3VyY2VzLiA8L3A+DQotDQotPHA+QW4gYXBwbGljYXRpb24gY2FuIHNwZWNpZnkgbWFueSA8Y29kZT5yZXMvPGVtPiZsdDtxdWFsaWZpZXJzJmd0OzwvZW0+LzwvY29kZT4NCi1kaXJlY3RvcmllcywgZWFjaCB3aXRoIGRpZmZlcmVudCBxdWFsaWZpZXJzLiBUbyBjcmVhdGUgYW4gYWx0ZXJuYXRpdmUgcmVzb3VyY2UgZm9yDQotYSBkaWZmZXJlbnQgbG9jYWxlLCB5b3UgdXNlIGEgcXVhbGlmaWVyIHRoYXQgc3BlY2lmaWVzIGEgbGFuZ3VhZ2Ugb3IgYSANCi1sYW5ndWFnZS1yZWdpb24gY29tYmluYXRpb24uIChUaGUgbmFtZSBvZiBhIHJlc291cmNlIGRpcmVjdG9yeSBtdXN0IGNvbmZvcm0gDQotdG8gdGhlIG5hbWluZyBzY2hlbWUgZGVzY3JpYmVkIGluIA0KLTxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3Byb3ZpZGluZy1yZXNvdXJjZXMuaHRtbCNBbHRlcm5hdGl2ZVJlc291cmNlcyI+UHJvdmlkaW5nDQotQWx0ZXJuYXRpdmUgUmVzb3VyY2VzPC9hPiwNCi1vciBlbHNlIGl0IHdpbGwgbm90IGNvbXBpbGUuKTwvcD4NCi0NCi08cD48ZW0+RXhhbXBsZTo8L2VtPjwvcD4NCi0NCi08cD5TdXBwb3NlIHRoYXQgeW91ciBhcHBsaWNhdGlvbidzIGRlZmF1bHQgbGFuZ3VhZ2UgaXMgRW5nbGlzaC4gU3VwcG9zZSBhbHNvDQotdGhhdCB5b3Ugd2FudCB0byBsb2NhbGl6ZSBhbGwgdGhlIHRleHQgaW4geW91ciBhcHBsaWNhdGlvbiB0byBGcmVuY2gsIGFuZCBtb3N0DQotb2YgdGhlIHRleHQgaW4geW91ciBhcHBsaWNhdGlvbiAoZXZlcnl0aGluZyBleGNlcHQgdGhlIGFwcGxpY2F0aW9uJ3MgdGl0bGUpIHRvDQotSmFwYW5lc2UuIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIGNyZWF0ZSB0aHJlZSBhbHRlcm5hdGl2ZSA8Y29kZT5zdHJpbmdzLnhtbDwvY29kZT4NCi1maWxlcywgZWFjaCBzdG9yZWQgaW4gYSBsb2NhbGUtc3BlY2lmaWMgcmVzb3VyY2UgZGlyZWN0b3J5OjwvcD4NCi0NCi08b2w+DQotICA8bGk+PGNvZGU+cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT48YnI+DQotICAgIENvbnRhaW5zICBFbmdsaXNoIHRleHQgZm9yIGFsbCAgdGhlIHN0cmluZ3MgdGhhdCB0aGUgYXBwbGljYXRpb24gdXNlcywNCi1pbmNsdWRpbmcgdGV4dCBmb3IgYSBzdHJpbmcgbmFtZWQgPGNvZGU+dGl0bGU8L2NvZGU+LjwvbGk+DQotICA8bGk+PGNvZGU+cmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbDwvY29kZT48YnI+DQotICAgIENvbnRhaW4gRnJlbmNoIHRleHQgZm9yIGFsbCAgdGhlIHN0cmluZ3MsIGluY2x1ZGluZyA8Y29kZT50aXRsZTwvY29kZT4uPC9saT4NCi0gIDxsaT48Y29kZT5yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sPC9jb2RlPjxicj4NCi0gICAgQ29udGFpbiBKYXBhbmVzZSB0ZXh0IGZvciBhbGwgIHRoZSBzdHJpbmdzIDxlbT5leGNlcHQ8L2VtPg0KLTxjb2RlPnRpdGxlPC9jb2RlPi48YnI+DQotICA8Y29kZT48L2NvZGU+PC9saT4NCi08L29sPg0KLQ0KLTxwPklmIHlvdXIgSmF2YSBjb2RlIHJlZmVycyB0byA8Y29kZT5SLnN0cmluZy50aXRsZTwvY29kZT4sICBoZXJlIGlzIHdoYXQgd2lsbA0KLWhhcHBlbiBhdCBydW50aW1lOjwvcD4NCi0NCi08dWw+DQotICA8bGk+SWYgdGhlIGRldmljZSBpcyBzZXQgdG8gYW55IGxhbmd1YWdlIG90aGVyIHRoYW4gRnJlbmNoLCBBbmRyb2lkIHdpbGwgbG9hZA0KLTxjb2RlPnRpdGxlPC9jb2RlPiBmcm9tIHRoZSA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiBmaWxlLjwvbGk+DQotICA8bGk+SWYgdGhlIGRldmljZSBpcyBzZXQgdG8gRnJlbmNoLCBBbmRyb2lkIHdpbGwgbG9hZCA8Y29kZT50aXRsZTwvY29kZT4gZnJvbQ0KLXRoZSA8Y29kZT5yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sPC9jb2RlPiBmaWxlLjwvbGk+DQotPC91bD4NCi0NCi08cD5Ob3RpY2UgdGhhdCBpZiB0aGUgZGV2aWNlIGlzIHNldCB0byBKYXBhbmVzZSwgQW5kcm9pZCB3aWxsIGxvb2sgZm9yDQotPGNvZGU+dGl0bGU8L2NvZGU+IGluIHRoZSA8Y29kZT5yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sPC9jb2RlPiBmaWxlLiBCdXQNCi1iZWNhdXNlIG5vIHN1Y2ggc3RyaW5nIGlzIGluY2x1ZGVkIGluIHRoYXQgZmlsZSwgQW5kcm9pZCB3aWxsIGZhbGwgYmFjayB0byB0aGUNCi1kZWZhdWx0LCBhbmQgd2lsbCBsb2FkICA8Y29kZT50aXRsZTwvY29kZT4gaW4gRW5nbGlzaCBmcm9tIHRoZQ0KLTxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+IGZpbGUuICA8L3A+DQotDQotPGgzIGlkPSJyZXNvdXJjZS1wcmVjZWRlbmNlIj5XaGljaCBSZXNvdXJjZXMgVGFrZSBQcmVjZWRlbmNlPzwvaDM+DQotDQotPHA+IElmIG11bHRpcGxlIHJlc291cmNlIGZpbGVzIG1hdGNoIGEgZGV2aWNlJ3MgY29uZmlndXJhdGlvbiwgQW5kcm9pZCBmb2xsb3dzIGENCi1zZXQgb2YgcnVsZXMgaW4gZGVjaWRpbmcgd2hpY2ggZmlsZSB0byB1c2UuIEFtb25nIHRoZSBxdWFsaWZpZXJzIHRoYXQgY2FuIGJlDQotc3BlY2lmaWVkIGluIGEgcmVzb3VyY2UgZGlyZWN0b3J5IG5hbWUsIDxzdHJvbmc+bG9jYWxlIGFsbW9zdCBhbHdheXMgdGFrZXMNCi1wcmVjZWRlbmNlPC9zdHJvbmc+LiA8L3A+DQotPHA+PGVtPkV4YW1wbGU6PC9lbT48L3A+DQotDQotPHA+QXNzdW1lIHRoYXQgYW4gYXBwbGljYXRpb24gIGluY2x1ZGVzIGEgZGVmYXVsdCBzZXQgb2YgZ3JhcGhpY3MgYW5kIHR3byBvdGhlcg0KLXNldHMgb2YgZ3JhcGhpY3MsIGVhY2ggb3B0aW1pemVkIGZvciBhIGRpZmZlcmVudCBkZXZpY2Ugc2V0dXA6PC9wPg0KLQ0KLTx1bD4NCi0gIDxsaT48Y29kZT5yZXMvZHJhd2FibGUvPC9jb2RlPjxicj4NCi0gICAgQ29udGFpbnMNCi0gIGRlZmF1bHQgZ3JhcGhpY3MuPC9saT4NCi0gIDxsaT48Y29kZT5yZXMvZHJhd2FibGUtc21hbGwtbGFuZC1zdHlsdXMvPC9jb2RlPjxicj4NCi0gIENvbnRhaW5zICBncmFwaGljcyBvcHRpbWl6ZWQgZm9yIHVzZSB3aXRoIGEgZGV2aWNlIHRoYXQgZXhwZWN0cyBpbnB1dCBmcm9tIGEgDQotICBzdHlsdXMgYW5kIGhhcyBhIFFWR0EgbG93LWRlbnNpdHkgc2NyZWVuIGluIGxhbmRzY2FwZSBvcmllbnRhdGlvbi48L2xpPg0KLSAgPGxpPjxjb2RlPnJlcy9kcmF3YWJsZS1qYS88L2NvZGU+IDxicj4NCi0gIENvbnRhaW5zICBncmFwaGljcyBvcHRpbWl6ZWQgZm9yIHVzZSB3aXRoIEphcGFuZXNlLjwvbGk+DQotPC91bD4NCi0NCi08cD5JZiB0aGUgYXBwbGljYXRpb24gcnVucyBvbiBhIGRldmljZSB0aGF0IGlzIGNvbmZpZ3VyZWQgdG8gdXNlIEphcGFuZXNlLA0KLUFuZHJvaWQgd2lsbCBsb2FkIGdyYXBoaWNzIGZyb20gIDxjb2RlPnJlcy9kcmF3YWJsZS1qYS88L2NvZGU+LCBldmVuIGlmIHRoZQ0KLWRldmljZSBoYXBwZW5zIHRvIGJlIG9uZSB0aGF0IGV4cGVjdHMgaW5wdXQgZnJvbSBhIHN0eWx1cyBhbmQgaGFzIGEgUVZHQSANCi1sb3ctZGVuc2l0eSBzY3JlZW4gaW4gbGFuZHNjYXBlIG9yaWVudGF0aW9uLjwvcD4NCi0NCi08cCBjbGFzcz0ibm90ZSI+PHN0cm9uZz5FeGNlcHRpb246PC9zdHJvbmc+IFRoZSBvbmx5IHF1YWxpZmllcnMgdGhhdCB0YWtlDQotcHJlY2VkZW5jZSBvdmVyIGxvY2FsZSBpbiB0aGUgc2VsZWN0aW9uIHByb2Nlc3MgYXJlIE1DQyBhbmQgTU5DIChtb2JpbGUgY291bnRyeQ0KLWNvZGUgYW5kIG1vYmlsZSBuZXR3b3JrIGNvZGUpLiA8L3A+DQotDQotPHA+PGVtPkV4YW1wbGU6PC9lbT48L3A+DQotDQotPHA+QXNzdW1lIHRoYXQgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBzaXR1YXRpb246PC9wPg0KLQ0KLTx1bD4NCi0gIDxsaT5UaGUgYXBwbGljYXRpb24gY29kZSBjYWxscyBmb3IgPGNvZGU+Ui5zdHJpbmcudGV4dF9hPC9jb2RlPjwvbGk+DQotICA8bGk+VHdvIHJlbGV2YW50IHJlc291cmNlIGZpbGVzIGFyZSBhdmFpbGFibGU6DQotICAgIDx1bD4NCi0gICAgICA8bGk+PGNvZGU+cmVzL3ZhbHVlcy1tY2M0MDQvc3RyaW5ncy54bWw8L2NvZGU+LCB3aGljaCBpbmNsdWRlcw0KLTxjb2RlPnRleHRfYTwvY29kZT4gaW4gdGhlIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCBsYW5ndWFnZSwgaW4gdGhpcyBjYXNlDQotRW5nbGlzaC48L2xpPg0KLSAgICAgIDxsaT48Y29kZT5yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sPC9jb2RlPiwgd2hpY2ggaW5jbHVkZXMNCi08Y29kZT50ZXh0X2E8L2NvZGU+IGluIEhpbmRpLjwvbGk+DQotICAgIDwvdWw+DQotICA8L2xpPg0KLSAgPGxpPlRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIG9uIGEgZGV2aWNlIHRoYXQgaGFzIHRoZSBmb2xsb3dpbmcNCi1jb25maWd1cmF0aW9uOg0KLSAgICA8dWw+DQotICAgICAgPGxpPlRoZSBTSU0gY2FyZCBpcyBjb25uZWN0ZWQgdG8gYSBtb2JpbGUgbmV0d29yayBpbiBJbmRpYSAoTUNDIDQwNCkuPC9saT4NCi0gICAgICA8bGk+VGhlIGxhbmd1YWdlIGlzIHNldCB0byBIaW5kaSAoPGNvZGU+aGk8L2NvZGU+KS48L2xpPg0KLSAgICA8L3VsPg0KLSAgPC9saT4NCi08L3VsPg0KLQ0KLTxwPkFuZHJvaWQgd2lsbCBsb2FkIDxjb2RlPnRleHRfYTwvY29kZT4gZnJvbQ0KLTxjb2RlPnJlcy92YWx1ZXMtbWNjNDA0L3N0cmluZ3MueG1sPC9jb2RlPiAoaW4gRW5nbGlzaCksIGV2ZW4gaWYgdGhlIGRldmljZSBpcw0KLWNvbmZpZ3VyZWQgZm9yIEhpbmRpLiBUaGF0IGlzIGJlY2F1c2UgaW4gdGhlIHJlc291cmNlLXNlbGVjdGlvbiBwcm9jZXNzLCBBbmRyb2lkDQotd2lsbCBwcmVmZXIgYW4gTUNDIG1hdGNoIG92ZXIgYSBsYW5ndWFnZSBtYXRjaC4gPC9wPg0KLQ0KLTxwPlRoZSBzZWxlY3Rpb24gcHJvY2VzcyBpcyBub3QgYWx3YXlzIGFzIHN0cmFpZ2h0Zm9yd2FyZCBhcyB0aGVzZSBleGFtcGxlcw0KLXN1Z2dlc3QuIFBsZWFzZSByZWFkICA8YQ0KLWhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3Byb3ZpZGluZy1yZXNvdXJjZXMuaHRtbCNCZXN0TWF0Y2giPkhvdyBBbmRyb2lkIEZpbmRzDQotdGhlIEJlc3QtbWF0Y2hpbmcgUmVzb3VyY2U8L2E+IGZvciBhIG1vcmUgbnVhbmNlZCBkZXNjcmlwdGlvbiBvZiB0aGUNCi1wcm9jZXNzLiBBbGwgdGhlIHF1YWxpZmllcnMgYXJlIGRlc2NyaWJlZCBhbmQgbGlzdGVkIGluIG9yZGVyIG9mDQotcHJlY2VkZW5jZSBpbiA8YQ0KLWhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3Byb3ZpZGluZy1yZXNvdXJjZXMuaHRtbCN0YWJsZTIiPlRhYmxlIDIgb2YgUHJvdmlkaW5nDQotQWx0ZXJuYXRpdmUgUmVzb3VyY2VzPC9hPi48L3A+DQotDQotPGgzIGlkPSJyZWZlcnJpbmctdG8tcmVzb3VyY2VzIj5SZWZlcnJpbmcgdG8gUmVzb3VyY2VzIGluIEphdmE8L2gzPg0KLQ0KLTxwPkluIHlvdXIgYXBwbGljYXRpb24ncyBKYXZhIGNvZGUsIHlvdSByZWZlciB0byAgcmVzb3VyY2VzIHVzaW5nIHRoZSBzeW50YXgNCi08Y29kZT5SLjxlbT5yZXNvdXJjZV90eXBlPC9lbT4uPGVtPnJlc291cmNlX25hbWU8L2VtPjwvY29kZT4gb3INCi08Y29kZT5hbmRyb2lkLlIuPGVtPnJlc291cmNlX3R5cGU8L2VtPi48ZW0+cmVzb3VyY2VfbmFtZTwvZW0+PC9jb2RlPjxlbT4uPC9lbT4NCi1Gb3IgbW9yZSBhYm91dCB0aGlzLCBzZWUgPGENCi1ocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3Jlc291cmNlcy9hY2Nlc3NpbmctcmVzb3VyY2VzLmh0bWwiPkFjY2Vzc2luZyBSZXNvdXJjZXM8L2E+LjwvcD4NCi0NCi08aDIgaWQ9ImNoZWNrbGlzdCI+TG9jYWxpemF0aW9uIENoZWNrbGlzdDwvaDI+DQotDQotPHA+Rm9yIGEgY29tcGxldGUgb3ZlcnZpZXcgb2YgdGhlIHByb2Nlc3Mgb2YgbG9jYWxpemluZyBhbmQgZGlzdHJpYnV0aW5nIGFuIEFuZHJvaWQgYXBwbGljYXRpb24sDQotc2VlIHRoZSA8YSBocmVmPSJ7QGRvY1Jvb3R9ZGlzdHJpYnV0ZS9nb29nbGVwbGF5L3B1Ymxpc2gvbG9jYWxpemluZy5odG1sIj5Mb2NhbGl6YXRpb24NCi1DaGVja2xpc3Q8L2E+IGRvY3VtZW50LjwvcD4NCi0NCi08aDIgaWQ9InN0cmF0ZWdpZXMiPkxvY2FsaXphdGlvbiBUaXBzPC9oMj4NCi0NCi08aDQgaWQ9ImZhaWxpbmcyIj5EZXNpZ24geW91ciBhcHBsaWNhdGlvbiAgdG8gd29yayBpbiBhbnkgbG9jYWxlPC9oND4NCi0NCi08cD5Zb3UgY2Fubm90IGFzc3VtZSBhbnl0aGluZyBhYm91dCB0aGUgZGV2aWNlIG9uIHdoaWNoIGEgdXNlciB3aWxsDQotcnVuIHlvdXIgYXBwbGljYXRpb24uIFRoZSBkZXZpY2UgbWlnaHQgaGF2ZSBoYXJkd2FyZSB0aGF0IHlvdSB3ZXJlIG5vdA0KLWFudGljaXBhdGluZywgb3IgaXQgbWlnaHQgYmUgc2V0IHRvIGEgbG9jYWxlIHRoYXQgeW91IGRpZCBub3QgcGxhbiBmb3Igb3IgdGhhdCANCi15b3UgY2Fubm90IHRlc3QuIERlc2lnbiB5b3VyIGFwcGxpY2F0aW9uIHNvIHRoYXQgaXQgd2lsbCBmdW5jdGlvbiBub3JtYWxseSBvciBmYWlsIGdyYWNlZnVsbHkgbm8gDQotbWF0dGVyIHdoYXQgZGV2aWNlIGl0IHJ1bnMgb24uPC9wPg0KLQ0KLTxwIGNsYXNzPSJub3RlIj48c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gTWFrZSBzdXJlIHRoYXQgeW91ciBhcHBsaWNhdGlvbg0KLWluY2x1ZGVzIGEgZnVsbCBzZXQgb2YgZGVmYXVsdCByZXNvdXJjZXMuPC9wPiA8cD5NYWtlIHN1cmUgdG8gaW5jbHVkZQ0KLTxjb2RlPnJlcy9kcmF3YWJsZS88L2NvZGU+IGFuZCBhIDxjb2RlPnJlcy92YWx1ZXMvPC9jb2RlPiBmb2xkZXJzICh3aXRob3V0IGFueQ0KLWFkZGl0aW9uYWwgbW9kaWZpZXJzIGluIHRoZSBmb2xkZXIgbmFtZXMpIHRoYXQgY29udGFpbiBhbGwgdGhlIGltYWdlcyBhbmQgdGV4dA0KLXRoYXQgeW91ciBhcHBsaWNhdGlvbiB3aWxsIG5lZWQuIDwvcD4NCi0NCi08cD5JZiBhbiBhcHBsaWNhdGlvbiBpcyBtaXNzaW5nIGV2ZW4gb25lIGRlZmF1bHQgcmVzb3VyY2UsIGl0IHdpbGwgbm90IHJ1biBvbiBhIA0KLQlkZXZpY2UgdGhhdCBpcyBzZXQgdG8gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlLiBGb3IgZXhhbXBsZSwgdGhlIA0KLQk8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiBkZWZhdWx0IGZpbGUgbWlnaHQgbGFjayBvbmUgc3RyaW5nIHRoYXQgDQotCXRoZSBhcHBsaWNhdGlvbiBuZWVkczogV2hlbiB0aGUgYXBwbGljYXRpb24gcnVucyBpbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgYW5kIA0KLQlhdHRlbXB0cyB0byBsb2FkIDxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+LCB0aGUgdXNlciB3aWxsIHNlZSBhbiANCi0JZXJyb3IgbWVzc2FnZSBhbmQgYSBGb3JjZSBDbG9zZSBidXR0b24uIEFuIElERSBzdWNoIGFzIEVjbGlwc2Ugd2lsbCBub3QgDQotCWhpZ2hsaWdodCB0aGlzIGtpbmQgb2YgZXJyb3IsIGFuZCB5b3Ugd2lsbCBub3Qgc2VlIHRoZSBwcm9ibGVtIHdoZW4geW91IA0KLQl0ZXN0IHRoZSBhcHBsaWNhdGlvbiBvbiBhIGRldmljZSBvciBlbXVsYXRvciB0aGF0IGlzIHNldCB0byBhIHN1cHBvcnRlZCBsb2NhbGUuPC9wPg0KLQ0KLTxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj0iI3Rlc3QtZm9yLWRlZmF1bHQiPlRlc3RpbmcgZm9yIERlZmF1bHQgUmVzb3VyY2VzPC9hPi48L3A+DQotDQotPGg0PkRlc2lnbiBhIGZsZXhpYmxlIGxheW91dDwvaDQ+DQotDQotPHA+IElmIHlvdSBuZWVkIHRvIHJlYXJyYW5nZSB5b3VyIGxheW91dCB0byBmaXQgYSBjZXJ0YWluIGxhbmd1YWdlIChmb3IgZXhhbXBsZQ0KLUdlcm1hbiB3aXRoIGl0cyBsb25nIHdvcmRzKSwgeW91IGNhbiBjcmVhdGUgYW4gYWx0ZXJuYXRpdmUgbGF5b3V0IGZvciB0aGF0DQotbGFuZ3VhZ2UgKGZvciBleGFtcGxlIDxjb2RlPnJlcy9sYXlvdXQtZGUvbWFpbi54bWw8L2NvZGU+KS4gSG93ZXZlciwgZG9pbmcgdGhpcw0KLWNhbiBtYWtlIHlvdXIgYXBwbGljYXRpb24gaGFyZGVyIHRvIG1haW50YWluLiAgSXQgaXMgYmV0dGVyIHRvIGNyZWF0ZSBhIHNpbmdsZQ0KLWxheW91dCB0aGF0IGlzIG1vcmUgZmxleGlibGUuPC9wPg0KLQ0KLTxwPkFub3RoZXIgdHlwaWNhbCBzaXR1YXRpb24gaXMgYSBsYW5ndWFnZSB0aGF0IHJlcXVpcmVzIHNvbWV0aGluZyBkaWZmZXJlbnQgaW4NCi1pdHMgbGF5b3V0LiBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IGhhdmUgYSBjb250YWN0IGZvcm0gdGhhdCBzaG91bGQgaW5jbHVkZSAgdHdvDQotbmFtZSBmaWVsZHMgd2hlbiB0aGUgYXBwbGljYXRpb24gcnVucyBpbiBKYXBhbmVzZSwgYnV0IHRocmVlIG5hbWUgZmllbGRzIHdoZW4NCi10aGUgYXBwbGljYXRpb24gIHJ1bnMgaW4gc29tZSBvdGhlciBsYW5ndWFnZS4gWW91IGNvdWxkIGhhbmRsZSB0aGlzIGluIGVpdGhlciBvZg0KLXR3byB3YXlzOjwvcD4NCi0NCi08dWw+DQotICA8bGk+Q3JlYXRlICBvbmUgIGxheW91dCB3aXRoIGEgZmllbGQgdGhhdCB5b3UgY2FuIHByb2dyYW1tYXRpY2FsbHkgZW5hYmxlIG9yDQotZGlzYWJsZSwgYmFzZWQgb24gdGhlIGxhbmd1YWdlLCBvcjwvbGk+DQotICA8bGk+SGF2ZSB0aGUgbWFpbiBsYXlvdXQgaW5jbHVkZSBhbm90aGVyIGxheW91dCB0aGF0ICBpbmNsdWRlcyB0aGUgY2hhbmdlYWJsZQ0KLWZpZWxkLiBUaGUgc2Vjb25kIGxheW91dCBjYW4gaGF2ZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgZm9yIGRpZmZlcmVudA0KLWxhbmd1YWdlcy48L2xpPg0KLTwvdWw+DQotDQotPGg0PkF2b2lkIGNyZWF0aW5nIG1vcmUgcmVzb3VyY2UgZmlsZXMgYW5kIHRleHQgc3RyaW5ncyB0aGFuIHlvdSBuZWVkPC9oND4NCi0NCi08cD5Zb3UgcHJvYmFibHkgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGEgbG9jYWxlLXNwZWNpZmljDQotYWx0ZXJuYXRpdmUgZm9yIGV2ZXJ5IHJlc291cmNlIGluIHlvdXIgYXBwbGljYXRpb24uIEZvciBleGFtcGxlLCB0aGUgbGF5b3V0DQotZGVmaW5lZCBpbiB0aGUgPGNvZGU+cmVzL2xheW91dC9tYWluLnhtbDwvY29kZT4gZmlsZSBtaWdodCB3b3JrIGluIGFueSBsb2NhbGUsDQotaW4gd2hpY2ggY2FzZSB0aGVyZSB3b3VsZCBiZSBubyBuZWVkIHRvIGNyZWF0ZSBhbnkgYWx0ZXJuYXRpdmUgbGF5b3V0IGZpbGVzLg0KLTwvcD4NCi0NCi08cD5BbHNvLCB5b3UgbWlnaHQgbm90IG5lZWQgdG8gY3JlYXRlIGFsdGVybmF0aXZlIHRleHQgZm9yIGV2ZXJ5DQotc3RyaW5nLiBGb3IgZXhhbXBsZSwgYXNzdW1lIHRoZSBmb2xsb3dpbmc6PC9wPg0KLQ0KLTx1bD4NCi0gIDxsaT5Zb3VyIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCBsYW5ndWFnZSBpcyBBbWVyaWNhbg0KLUVuZ2xpc2guIEV2ZXJ5IHN0cmluZyB0aGF0IHRoZSBhcHBsaWNhdGlvbiB1c2VzIGlzIGRlZmluZWQsIHVzaW5nIEFtZXJpY2FuDQotRW5nbGlzaCBzcGVsbGluZ3MsIGluIDxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+LiA8L2xpPg0KLQ0KLSAgPGxpPkZvciAgYSBmZXcgaW1wb3J0YW50IHBocmFzZXMsIHlvdSB3YW50IHRvIHByb3ZpZGUNCi1Ccml0aXNoIEVuZ2xpc2ggc3BlbGxpbmcuIFlvdSB3YW50IHRoZXNlIGFsdGVybmF0aXZlIHN0cmluZ3MgdG8gYmUgdXNlZCB3aGVuIHlvdXINCi1hcHBsaWNhdGlvbiBydW5zIG9uIGEgZGV2aWNlIGluIHRoZSBVbml0ZWQgS2luZ2RvbS4gPC9saT4NCi08L3VsPg0KLQ0KLTxwPlRvIGRvIHRoaXMsIHlvdSBjb3VsZCBjcmVhdGUgYSBzbWFsbCBmaWxlIGNhbGxlZA0KLTxjb2RlPnJlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sPC9jb2RlPiB0aGF0IGluY2x1ZGVzIG9ubHkgdGhlIHN0cmluZ3MgdGhhdA0KLXNob3VsZCBiZSBkaWZmZXJlbnQgd2hlbiB0aGUgYXBwbGljYXRpb24gIHJ1bnMgaW4gdGhlIFUuSy4gRm9yIGFsbCB0aGUgcmVzdCBvZg0KLXRoZSBzdHJpbmdzLCB0aGUgYXBwbGljYXRpb24gd2lsbCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHRzIGFuZCB1c2Ugd2hhdCBpcw0KLWRlZmluZWQgaW4gPGNvZGU+cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT4uPC9wPg0KLQ0KLTxoND5Vc2UgdGhlIEFuZHJvaWQgQ29udGV4dCBvYmplY3QgZm9yIG1hbnVhbCBsb2NhbGUgbG9va3VwPC9oND4NCi0NCi08cD5Zb3UgY2FuIGxvb2sgdXAgdGhlIGxvY2FsZSB1c2luZyB0aGUge0BsaW5rIGFuZHJvaWQuY29udGVudC5Db250ZXh0fSBvYmplY3QNCi10aGF0IEFuZHJvaWQgbWFrZXMgYXZhaWxhYmxlOjwvcD4NCi0NCi08cHJlPlN0cmluZyBsb2NhbGUgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldENvbmZpZ3VyYXRpb24oKS5sb2NhbGUuZ2V0RGlzcGxheU5hbWUoKTs8L3ByZT4NCi0NCi08aDIgaWQ9InRlc3RpbmciPlRlc3RpbmcgTG9jYWxpemVkIEFwcGxpY2F0aW9uczwvaDI+DQotDQotPGgzIGlkPSJkZXZpY2UiPlRlc3Rpbmcgb24gYSBEZXZpY2U8L2gzPg0KLTxwPktlZXAgaW4gbWluZCB0aGF0IHRoZSBkZXZpY2UgeW91IGFyZSB0ZXN0aW5nIG1heSBiZSBzaWduaWZpY2FudGx5IGRpZmZlcmVudCBmcm9tIA0KLQl0aGUgZGV2aWNlcyBhdmFpbGFibGUgdG8gY29uc3VtZXJzIGluIG90aGVyIGdlb2dyYXBoaWVzLiBUaGUgbG9jYWxlcyBhdmFpbGFibGUgDQotCW9uIHlvdXIgZGV2aWNlIG1heSBkaWZmZXIgZnJvbSB0aG9zZSBhdmFpbGFibGUgb24gb3RoZXIgZGV2aWNlcy4gQWxzbywgdGhlIA0KLQlyZXNvbHV0aW9uIGFuZCBkZW5zaXR5IG9mIHRoZSBkZXZpY2Ugc2NyZWVuIG1heSBkaWZmZXIsIHdoaWNoIGNvdWxkIGFmZmVjdCANCi0JdGhlIGRpc3BsYXkgb2Ygc3RyaW5ncyBhbmQgZHJhd2FibGVzIGluIHlvdXIgVUkuPC9wPg0KLQ0KLTxwPlRvIGNoYW5nZSB0aGUgbG9jYWxlIG9uIGEgZGV2aWNlLCB1c2UgIHRoZSBTZXR0aW5ncyBhcHBsaWNhdGlvbiAgKEhvbWUgJmd0Ow0KLU1lbnUgJmd0OyBTZXR0aW5ncyAmZ3Q7IExvY2FsZSAmYW1wOyB0ZXh0ICZndDsgU2VsZWN0IGxvY2FsZSkuIDwvcD4NCi0NCi08aDMgaWQ9ImVtdWxhdG9yIj5UZXN0aW5nIG9uIGFuIEVtdWxhdG9yPC9oMz4NCi0NCi08cD5Gb3IgZGV0YWlscyBhYm91dCB1c2luZyB0aGUgZW11bGF0b3IsIHNlZSBTZWUgPGENCi1ocmVmPSJ7QGRvY1Jvb3R9dG9vbHMvaGVscC9lbXVsYXRvci5odG1sIj5BbmRyb2lkIEVtdWxhdG9yPC9hPi48L3A+DQotPGg0PkNyZWF0aW5nIGFuZCB1c2luZyBhIGN1c3RvbSBsb2NhbGU8L2g0Pg0KLQ0KLTxwPkEgJnF1b3Q7Y3VzdG9tJnF1b3Q7IGxvY2FsZSBpcyBhIGxhbmd1YWdlL3JlZ2lvbiBjb21iaW5hdGlvbiB0aGF0IHRoZSBBbmRyb2lkDQotc3lzdGVtIGltYWdlIGRvZXMgbm90IGV4cGxpY2l0bHkgc3VwcG9ydC4gKEZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGxvY2FsZXMgaW4NCi1BbmRyb2lkIHBsYXRmb3JtcyBzZWUgdGhlIFZlcnNpb24gTm90ZXMgaW4gdGhlIDxhDQotaHJlZj0ie0Bkb2NSb290fXNkay9pbmRleC5odG1sIj5TREs8L2E+IHRhYikuIFlvdSBjYW4gdGVzdA0KLWhvdyB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgcnVuIGluIGEgY3VzdG9tIGxvY2FsZSBieSBjcmVhdGluZyBhIGN1c3RvbSBsb2NhbGUgaW4NCi10aGUgZW11bGF0b3IuIFRoZXJlIGFyZSB0d28gd2F5cyB0byBkbyB0aGlzOjwvcD4NCi0NCi08dWw+DQotICA8bGk+VXNlIHRoZSBDdXN0b20gTG9jYWxlIGFwcGxpY2F0aW9uLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdGhlDQotQXBwbGljYXRpb24gdGFiLiAoQWZ0ZXIgeW91IGNyZWF0ZSBhIGN1c3RvbSBsb2NhbGUsIHN3aXRjaCB0byBpdCBieSANCi1wcmVzc2luZyBhbmQgaG9sZGluZyB0aGUgbG9jYWxlIG5hbWUuKTwvbGk+DQotICA8bGk+Q2hhbmdlIHRvIGEgY3VzdG9tIGxvY2FsZSBmcm9tIHRoZSBhZGIgc2hlbGwsIGFzIGRlc2NyaWJlZCBiZWxvdy48L2xpPg0KLTwvdWw+DQotDQotPHA+V2hlbiB5b3Ugc2V0IHRoZSBlbXVsYXRvciB0byBhIGxvY2FsZSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIEFuZHJvaWQNCi1zeXN0ZW0gaW1hZ2UsIHRoZSBzeXN0ZW0gaXRzZWxmIHdpbGwgZGlzcGxheSBpbiBpdHMgZGVmYXVsdCBsYW5ndWFnZS4gWW91cg0KLWFwcGxpY2F0aW9uLCBob3dldmVyLCBzaG91bGQgbG9jYWxpemUgcHJvcGVybHkuPC9wPg0KLQ0KLTxoND5DaGFuZ2luZyB0aGUgZW11bGF0b3IgbG9jYWxlIGZyb20gdGhlIGFkYiBzaGVsbDwvaDQ+DQotDQotPHA+VG8gY2hhbmdlIHRoZSBsb2NhbGUgaW4gdGhlIGVtdWxhdG9yIGJ5IHVzaW5nIHRoZSBhZGIgc2hlbGwuIDwvcD4NCi0NCi08b2w+DQotICA8bGk+UGljayB0aGUgbG9jYWxlIHlvdSB3YW50IHRvIHRlc3QgYW5kIGRldGVybWluZSBpdHMgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBjb2RlcywgZm9yDQotZXhhbXBsZSA8Y29kZT5mcjwvY29kZT4gZm9yIEZyZW5jaCBhbmQgPGNvZGU+Q0E8L2NvZGU+IGZvciBDYW5hZGEuPGJyPg0KLSAgPC9saT4NCi0gIDxsaT5MYXVuY2ggYW4gZW11bGF0b3IuPC9saT4NCi0gIDxsaT5Gcm9tIGEgY29tbWFuZC1saW5lIHNoZWxsIG9uIHRoZSBob3N0IGNvbXB1dGVyLCBydW4gdGhlIGZvbGxvd2luZw0KLWNvbW1hbmQ6PGJyPg0KLSAgICA8Y29kZT5hZGIgc2hlbGw8L2NvZGU+PGJyPg0KLSAgb3IgaWYgeW91IGhhdmUgYSBkZXZpY2UgYXR0YWNoZWQsIHNwZWNpZnkgdGhhdCB5b3Ugd2FudCB0aGUgZW11bGF0b3IgYnkgYWRkaW5nDQotdGhlIDxjb2RlPi1lPC9jb2RlPiBvcHRpb246PGJyPg0KLSAgPGNvZGU+YWRiIC1lIHNoZWxsPC9jb2RlPjwvbGk+DQotICA8bGk+QXQgIHRoZSAgYWRiIHNoZWxsIHByb21wdCAoPGNvZGU+IzwvY29kZT4pLCBydW4gdGhpcyBjb21tYW5kOiA8YnI+DQotICAgIDxjb2RlPnNldHByb3AgcGVyc2lzdC5zeXMubGFuZ3VhZ2UgIFs8ZW0+bGFuZ3VhZ2UgY29kZTwvZW0+XTtzZXRwcm9wDQotcGVyc2lzdC5zeXMuY291bnRyeSBbPGVtPmNvdW50cnkgIGNvZGU8L2VtPl07c3RvcDtzbGVlcCA1O3N0YXJ0IDxicj4NCi0gICAgPC9jb2RlPlJlcGxhY2UgYnJhY2tldGVkIHNlY3Rpb25zIHdpdGggdGhlICBhcHByb3ByaWF0ZSBjb2RlcyBmcm9tIFN0ZXANCi0xLjwvbGk+DQotPC9vbD4NCi0NCi08cD5Gb3IgaW5zdGFuY2UsIHRvIHRlc3QgaW4gQ2FuYWRpYW4gRnJlbmNoOjwvcD4NCi0NCi08cD48Y29kZT5zZXRwcm9wIHBlcnNpc3Quc3lzLmxhbmd1YWdlICBmcjtzZXRwcm9wIHBlcnNpc3Quc3lzLmNvdW50cnkNCi1DQTtzdG9wO3NsZWVwIDU7c3RhcnQgPC9jb2RlPjwvcD4NCi0NCi08cD5UaGlzIHdpbGwgY2F1c2UgdGhlIGVtdWxhdG9yICB0byByZXN0YXJ0LiAoSXQgd2lsbCBsb29rIGxpa2UgYSBmdWxsIHJlYm9vdCwNCi1idXQgaXQgaXMgbm90LikgT25jZSB0aGUgSG9tZSBzY3JlZW4gYXBwZWFycyBhZ2FpbiwgcmUtbGF1bmNoIHlvdXIgYXBwbGljYXRpb24gKGZvcg0KLWV4YW1wbGUsIGNsaWNrIHRoZSBSdW4gaWNvbiBpbiBFY2xpcHNlKSwgYW5kIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGxhdW5jaCB3aXRoDQotdGhlIG5ldyBsb2NhbGUuIDwvcD4NCi0NCi08aDMgaWQ9InRlc3QtZm9yLWRlZmF1bHQiPlRlc3RpbmcgZm9yIERlZmF1bHQgUmVzb3VyY2VzPC9oMz4NCi08cD5IZXJlJ3MgaG93IHRvIHRlc3Qgd2hldGhlciBhbiBhcHBsaWNhdGlvbiBpbmNsdWRlcyBldmVyeSBzdHJpbmcgcmVzb3VyY2UgdGhhdCBpdCBuZWVkczogIDwvcD4NCi08b2w+PGxpPlNldCB0aGUgZW11bGF0b3Igb3IgZGV2aWNlIHRvIGEgbGFuZ3VhZ2UgdGhhdCB5b3VyIGFwcGxpY2F0aW9uIGRvZXMgbm90IA0KLQlzdXBwb3J0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFwcGxpY2F0aW9uIGhhcyBGcmVuY2ggc3RyaW5ncyBpbiANCi0JPGNvZGU+cmVzL3ZhbHVlcy1mci88L2NvZGU+IGJ1dCBkb2VzIG5vdCBoYXZlIGFueSBTcGFuaXNoIHN0cmluZ3MgaW4gDQotCTxjb2RlPnJlcy92YWx1ZXMtZXMvPC9jb2RlPiwgdGhlbiBzZXQgdGhlIGVtdWxhdG9yJ3MgbG9jYWxlIHRvIFNwYW5pc2guIA0KLQkoWW91IGNhbiB1c2UgdGhlIEN1c3RvbSBMb2NhbGUgYXBwbGljYXRpb24gdG8gc2V0IHRoZSBlbXVsYXRvciB0byBhbiANCi0JdW5zdXBwb3J0ZWQgbG9jYWxlLik8L2xpPg0KLQk8bGk+UnVuIHRoZSBhcHBsaWNhdGlvbi48L2xpPiAgDQotPGxpPklmIHRoZSBhcHBsaWNhdGlvbiBzaG93cyBhbiBlcnJvciBtZXNzYWdlIGFuZCBhIEZvcmNlIENsb3NlIGJ1dHRvbiwgaXQgbWlnaHQgDQotCWJlIGxvb2tpbmcgZm9yIGEgc3RyaW5nIHRoYXQgaXMgbm90IGF2YWlsYWJsZS4gTWFrZSBzdXJlIHRoYXQgeW91ciANCi0JPGNvZGU+cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT4gZmlsZSBpbmNsdWRlcyBhIGRlZmluaXRpb24gZm9yIA0KLQlldmVyeSBzdHJpbmcgdGhhdCB0aGUgYXBwbGljYXRpb24gdXNlcy48L2xpPg0KLTwvb2w+IA0KLTwvcD4gDQotDQotPHA+SWYgdGhlIHRlc3QgaXMgc3VjY2Vzc2Z1bCwgcmVwZWF0IGl0IGZvciBvdGhlciB0eXBlcyBvZiANCi0JY29uZmlndXJhdGlvbnMuIEZvciBleGFtcGxlLCBpZiB0aGUgYXBwbGljYXRpb24gaGFzIGEgbGF5b3V0IGZpbGUgY2FsbGVkIA0KLQk8Y29kZT5yZXMvbGF5b3V0LWxhbmQvbWFpbi54bWw8L2NvZGU+IGJ1dCBkb2VzIG5vdCBjb250YWluIGEgZmlsZSBjYWxsZWQgDQotCTxjb2RlPnJlcy9sYXlvdXQtcG9ydC9tYWluLnhtbDwvY29kZT4sIHRoZW4gc2V0IHRoZSBlbXVsYXRvciBvciBkZXZpY2UgdG8gDQotCXBvcnRyYWl0IG9yaWVudGF0aW9uIGFuZCBzZWUgaWYgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcnVuLiANCi0NCi0NCi0NCitwYWdlLnRpdGxlPUxvY2FsaXppbmcgd2l0aCBSZXNvdXJjZXMKK3BhcmVudC50aXRsZT1BcHBsaWNhdGlvbiBSZXNvdXJjZXMKK3BhZ2UudGFncz1sb2NhbGl6aW5nLGxvY2FsaXphdGlvbixyZXNvdXJjZXMsZm9ybWF0cyxsMTBuCitwYXJlbnQubGluaz1pbmRleC5odG1sCitAamQ6Ym9keQorCis8ZGl2IGlkPSJxdi13cmFwcGVyIj4KKyAgICA8ZGl2IGlkPSJxdiI+CisKKzxoMj5RdWlja3ZpZXc8L2gyPgorCis8dWw+CisgIDxsaT5Vc2UgcmVzb3VyY2Ugc2V0cyB0byBjcmVhdGUgYSBsb2NhbGl6ZWQgYXBwLjwvbGk+CisgIDxsaT5BbmRyb2lkIGxvYWRzIHRoZSBjb3JyZWN0IHJlc291cmNlIHNldCBmb3IgdGhlIHVzZXIncyBsYW5ndWFnZSBhbmQgbG9jYWxlLjwvbGk+CisgIDxsaT5JZiBsb2NhbGl6ZWQgcmVzb3VyY2VzIGFyZSBub3QgYXZhaWxhYmxlLCBBbmRyb2lkIGxvYWRzIHlvdXIgZGVmYXVsdCByZXNvdXJjZXMuPC9saT4KKzwvdWw+CisKKzxoMj5JbiB0aGlzIGRvY3VtZW50PC9oMj4KKzxvbD4KKyAgPGxpPjxhIGhyZWY9IiNyZXNvdXJjZS1zd2l0Y2hpbmciPk92ZXJ2aWV3OiBSZXNvdXJjZS1Td2l0Y2hpbmcgaW4gQW5kcm9pZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IiN1c2luZy1mcmFtZXdvcmsiPlVzaW5nIFJlc291cmNlcyBmb3IgTG9jYWxpemF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iI3N0cmF0ZWdpZXMiPkxvY2FsaXphdGlvbiBUaXBzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iI3Rlc3RpbmciPlRlc3RpbmcgTG9jYWxpemVkIEFwcGxpY2F0aW9uczwvYT48L2xpPgorPC9vbD4KKworPGgyPlNlZSBhbHNvPC9oMj4KKyAgPG9sPgorICAgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9ZGlzdHJpYnV0ZS9nb29nbGVwbGF5L3B1Ymxpc2gvbG9jYWxpemluZy5odG1sIj5Mb2NhbGl6YXRpb24gQ2hlY2tsaXN0PC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3Byb3ZpZGluZy1yZXNvdXJjZXMuaHRtbCI+UHJvdmlkaW5nIFJlc291cmNlczwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3VpL2RlY2xhcmluZy1sYXlvdXQuaHRtbCI+TGF5b3V0czwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9cmVmZXJlbmNlL2FuZHJvaWQvYXBwL0FjdGl2aXR5Lmh0bWwjQWN0aXZpdHlMaWZlY3ljbGUiPkFjdGl2aXR5IExpZmVjeWNsZTwvYT48L2xpPgorPC9vbD4KKzwvZGl2PgorPC9kaXY+CisKKzxwPkFuZHJvaWQgd2lsbCBydW4gb24gbWFueSAgZGV2aWNlcyBpbiBtYW55ICByZWdpb25zLiBUbyByZWFjaCB0aGUgbW9zdCB1c2VycywKK3lvdXIgYXBwbGljYXRpb24gc2hvdWxkIGhhbmRsZSB0ZXh0LCBhdWRpbyBmaWxlcywgbnVtYmVycywgY3VycmVuY3ksIGFuZAorZ3JhcGhpY3MgaW4gd2F5cyBhcHByb3ByaWF0ZSB0byB0aGUgbG9jYWxlcyB3aGVyZSB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgYmUgdXNlZC4KKzwvcD4KKworPHA+VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgYmVzdCBwcmFjdGljZXMgZm9yIGxvY2FsaXppbmcgQW5kcm9pZAorYXBwbGljYXRpb25zLiBUaGUgcHJpbmNpcGxlcyBhcHBseSB3aGV0aGVyIHlvdSBhcmUgZGV2ZWxvcGluZyB5b3VyIGFwcGxpY2F0aW9uCit1c2luZyBBRFQgd2l0aCBFY2xpcHNlLCBBbnQtYmFzZWQgdG9vbHMsIG9yIGFueSBvdGhlciBJREUuIDwvcD4KKworPHA+WW91IHNob3VsZCBhbHJlYWR5IGhhdmUgYSB3b3JraW5nIGtub3dsZWRnZSBvZiBKYXZhIGFuZCBiZSAgZmFtaWxpYXIgd2l0aAorQW5kcm9pZCByZXNvdXJjZSBsb2FkaW5nLCB0aGUgZGVjbGFyYXRpb24gb2YgdXNlciBpbnRlcmZhY2UgZWxlbWVudHMgaW4gWE1MLAorZGV2ZWxvcG1lbnQgY29uc2lkZXJhdGlvbnMgc3VjaCBhcyBBY3Rpdml0eSBsaWZlY3ljbGUsIGFuZCBnZW5lcmFsIHByaW5jaXBsZXMgb2YKK2ludGVybmF0aW9uYWxpemF0aW9uIGFuZCBsb2NhbGl6YXRpb24uIDwvcD4KKworPHA+SXQgaXMgZ29vZCBwcmFjdGljZSB0byB1c2UgdGhlIEFuZHJvaWQgcmVzb3VyY2UgZnJhbWV3b3JrIHRvIHNlcGFyYXRlIHRoZQorbG9jYWxpemVkIGFzcGVjdHMgb2YgeW91ciBhcHBsaWNhdGlvbiBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGNvcmUgSmF2YQorZnVuY3Rpb25hbGl0eTo8L3A+CisKKzx1bD4KKyAgPGxpPllvdSBjYW4gcHV0IG1vc3Qgb3IgYWxsIG9mIHRoZSA8ZW0+Y29udGVudHM8L2VtPiBvZiB5b3VyIGFwcGxpY2F0aW9uJ3MKK3VzZXIgaW50ZXJmYWNlIGludG8gcmVzb3VyY2UgZmlsZXMsIGFzIGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50IGFuZCBpbiA8YQoraHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9yZXNvdXJjZXMvcHJvdmlkaW5nLXJlc291cmNlcy5odG1sIj5Qcm92aWRpbmcgUmVzb3VyY2VzPC9hPi48L2xpPgorICA8bGk+VGhlIDxlbT5iZWhhdmlvcjwvZW0+IG9mIHRoZSB1c2VyIGludGVyZmFjZSwgb24gdGhlIG90aGVyIGhhbmQsIGlzIGRyaXZlbgorYnkgeW91ciBKYXZhIGNvZGUuCisgICAgRm9yIGV4YW1wbGUsIGlmIHVzZXJzIGlucHV0IGRhdGEgdGhhdCBuZWVkcyB0byBiZSBmb3JtYXR0ZWQgb3Igc29ydGVkCitkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gbG9jYWxlLCB0aGVuIHlvdSB3b3VsZCB1c2UgSmF2YSB0byBoYW5kbGUgdGhlIGRhdGEKK3Byb2dyYW1tYXRpY2FsbHkuIFRoaXMgZG9jdW1lbnQgZG9lcyBub3QgY292ZXIgaG93IHRvICBsb2NhbGl6ZSB5b3VyIEphdmEgY29kZS4KKzwvbGk+Cis8L3VsPgorCis8cD5Gb3IgYSBzaG9ydCBndWlkZSB0byBsb2NhbGl6aW5nIHN0cmluZ3MgaW4geW91ciBhcHAsIHNlZSB0aGUgdHJhaW5pbmcgbGVzc29uLCA8YQoraHJlZj0ie0Bkb2NSb290fXRyYWluaW5nL2Jhc2ljcy9zdXBwb3J0aW5nLWRldmljZXMvbGFuZ3VhZ2VzLmh0bWwiPlN1cHBvcnRpbmcgRGlmZmVyZW50IExhbmd1YWdlczwvYT4uIDwvcD4KKworCis8aDIgaWQ9InJlc291cmNlLXN3aXRjaGluZyI+T3ZlcnZpZXc6IFJlc291cmNlLVN3aXRjaGluZyBpbiBBbmRyb2lkPC9oMj4KKworPHA+UmVzb3VyY2VzIGFyZSB0ZXh0IHN0cmluZ3MsIGxheW91dHMsIHNvdW5kcywgZ3JhcGhpY3MsIGFuZCBhbnkgb3RoZXIgc3RhdGljCitkYXRhIHRoYXQgeW91ciAgQW5kcm9pZCBhcHBsaWNhdGlvbiAgbmVlZHMuIEFuIGFwcGxpY2F0aW9uIGNhbiBpbmNsdWRlIG11bHRpcGxlCitzZXRzIG9mIHJlc291cmNlcywgZWFjaCBjdXN0b21pemVkIGZvciBhIGRpZmZlcmVudCBkZXZpY2UgY29uZmlndXJhdGlvbi4gV2hlbiBhCit1c2VyIHJ1bnMgdGhlIGFwcGxpY2F0aW9uLCAgQW5kcm9pZCAgICBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgYW5kIGxvYWRzIHRoZQorcmVzb3VyY2VzIHRoYXQgYmVzdCBtYXRjaCB0aGUgZGV2aWNlLjwvcD4KKworPHA+KFRoaXMgZG9jdW1lbnQgZm9jdXNlcyBvbiBsb2NhbGl6YXRpb24gYW5kIGxvY2FsZS4gRm9yIGEgY29tcGxldGUgZGVzY3JpcHRpb24KK29mIHJlc291cmNlLXN3aXRjaGluZyBhbmQgYWxsIHRoZSB0eXBlcyBvZiBjb25maWd1cmF0aW9ucyB0aGF0IHlvdSBjYW4KK3NwZWNpZnkgJiM4MjEyOyBzY3JlZW4gb3JpZW50YXRpb24sIHRvdWNoc2NyZWVuIHR5cGUsIGFuZCBzbyBvbiAmIzgyMTI7IHNlZSA8YQoraHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9yZXNvdXJjZXMvcHJvdmlkaW5nLXJlc291cmNlcy5odG1sI0FsdGVybmF0aXZlUmVzb3VyY2VzIj5Qcm92aWRpbmcKK0FsdGVybmF0aXZlIFJlc291cmNlczwvYT4uKTwvcD4KKworPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KKyAgPHRyIGJvcmRlcj0iMCI+CisgICAgPHRkIHdpZHRoPSIxODAiIHN0eWxlPSJib3JkZXI6IDBwdCBub25lIDsiPjxwIGNsYXNzPSJzcGVjaWFsLW5vdGUiPgorICAgIDxzdHJvbmc+V2hlbiB5b3Ugd3JpdGUgeW91ciBhcHBsaWNhdGlvbjo8L3N0cm9uZz4KKyAgICA8YnI+PGJyPgorICAgIFlvdSBjcmVhdGUgYSBzZXQgb2YgZGVmYXVsdCByZXNvdXJjZXMsIHBsdXMgYWx0ZXJuYXRpdmVzIHRvIGJlIHVzZWQgaW4KKyAgICBkaWZmZXJlbnQgbG9jYWxlcy48L3A+PC90ZD4KKyAgICA8dGQgc3R5bGU9ImJvcmRlcjogMHB0IG5vbmU7IHBhZGRpbmc6MCI+CisgICAgPHAgc3R5bGU9ImJvcmRlcjowOyBwYWRkaW5nOjAiPjxpbWcgc3JjPSIuLi8uLi8uLi9pbWFnZXMvcmVzb3VyY2VzL3JpZ2h0LWFycm93LnBuZyIgYWx0PSJyaWdodC1hcnJvdyIKKyAgICB3aWR0aD0iNTEiIGhlaWdodD0iMTciPjwvcD48L3RkPgorICAgIDx0ZCB3aWR0aD0iMTgwIiBzdHlsZT0iYm9yZGVyOiAwcHQgbm9uZSA7Ij48cCBjbGFzcz0ic3BlY2lhbC1ub3RlIj4KKyAgICA8c3Ryb25nPldoZW4gYSB1c2VyIHJ1bnMgeW91ciBhcHBsaWNhdGlvbjo8L3N0cm9uZz4KKyAgICA8YnI+PGJyPlRoZSBBbmRyb2lkIHN5c3RlbSBzZWxlY3RzIHdoaWNoIHJlc291cmNlcyB0byBsb2FkLCBiYXNlZCBvbiB0aGUKKyAgICBkZXZpY2UncyBsb2NhbGUuPC9wPjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8cD5XaGVuIHlvdSB3cml0ZSB5b3VyIGFwcGxpY2F0aW9uLCB5b3UgY3JlYXRlIGRlZmF1bHQgYW5kIGFsdGVybmF0aXZlIHJlc291cmNlcworZm9yIHlvdXIgYXBwbGljYXRpb24gdG8gdXNlLiBUbyBjcmVhdGUgIHJlc291cmNlcywgeW91IHBsYWNlIGZpbGVzIHdpdGhpbgorc3BlY2lhbGx5IG5hbWVkIHN1YmRpcmVjdG9yaWVzIG9mIHRoZSBwcm9qZWN0J3MgPGNvZGU+cmVzLzwvY29kZT4gZGlyZWN0b3J5LgorPC9wPgorCisKKworPGgzIGlkPSJkZWZhdWx0cy1yLWltcG9ydGFudCI+V2h5IERlZmF1bHQgUmVzb3VyY2VzIEFyZSBJbXBvcnRhbnQ8L2gzPgorCis8cD5XaGVuZXZlciB0aGUgYXBwbGljYXRpb24gcnVucyBpbiBhIGxvY2FsZSBmb3Igd2hpY2ggeW91IGhhdmUgbm90IHByb3ZpZGVkCitsb2NhbGUtc3BlY2lmaWMgdGV4dCwgIEFuZHJvaWQgd2lsbCBsb2FkIHRoZSBkZWZhdWx0IHN0cmluZ3MgZnJvbQorPGNvZGU+cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT4uIElmIHRoaXMgZGVmYXVsdCAgZmlsZSBpcyBhYnNlbnQsIG9yIGlmIGl0CitpcyBtaXNzaW5nIGEgc3RyaW5nIHRoYXQgeW91ciBhcHBsaWNhdGlvbiBuZWVkcywgdGhlbiB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgbm90IHJ1bgorYW5kIHdpbGwgc2hvdyBhbiBlcnJvci4KK1RoZSBleGFtcGxlIGJlbG93IGlsbHVzdHJhdGVzIHdoYXQgY2FuIGhhcHBlbiB3aGVuIHRoZSBkZWZhdWx0IHRleHQgZmlsZSBpcyBpbmNvbXBsZXRlLiA8L3A+CisKKzxwPjxlbT5FeGFtcGxlOjwvZW0+Cis8cD5BbiBhcHBsaWNhdGlvbidzIEphdmEgY29kZSByZWZlcnMgdG8ganVzdCB0d28gc3RyaW5ncywgPGNvZGU+dGV4dF9hPC9jb2RlPiBhbmQKKyAgPGNvZGU+dGV4dF9iPC9jb2RlPi4gVGhpcyBhcHBsaWNhdGlvbiBpbmNsdWRlcyBhIGxvY2FsaXplZCByZXNvdXJjZSBmaWxlCisgICg8Y29kZT5yZXMvdmFsdWVzLWVuL3N0cmluZ3MueG1sPC9jb2RlPikgdGhhdCBkZWZpbmVzIDxjb2RlPnRleHRfYTwvY29kZT4gYW5kCisgIDxjb2RlPnRleHRfYjwvY29kZT4gaW4gRW5nbGlzaC4gVGhpcyBhcHBsaWNhdGlvbiBhbHNvIGluY2x1ZGVzIGEgZGVmYXVsdAorICByZXNvdXJjZSBmaWxlICg8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPikgdGhhdCBpbmNsdWRlcyBhCitkZWZpbml0aW9uIGZvciA8Y29kZT50ZXh0X2E8L2NvZGU+LCBidXQgbm90IGZvciA8Y29kZT50ZXh0X2I8L2NvZGU+OgorPHVsPgorICA8bGk+VGhpcyBhcHBsaWNhdGlvbiBtaWdodCBjb21waWxlIHdpdGhvdXQgYSBwcm9ibGVtLiBBbiBJREUgc3VjaCBhcyBFY2xpcHNlCisgICAgd2lsbCBub3QgaGlnaGxpZ2h0IGFueSBlcnJvcnMgaWYgYSByZXNvdXJjZSBpcyBtaXNzaW5nLjwvbGk+CisgIDxsaT5XaGVuIHRoaXMgYXBwbGljYXRpb24gaXMgbGF1bmNoZWQgb24gYSBkZXZpY2Ugd2l0aCBsb2NhbGUgc2V0IHRvIEVuZ2xpc2gsCisgICAgdGhlIGFwcGxpY2F0aW9uICBtaWdodCBydW4gd2l0aG91dCBhIHByb2JsZW0sIGJlY2F1c2UKKyAgICA8Y29kZT5yZXMvdmFsdWVzLWVuL3N0cmluZ3MueG1sPC9jb2RlPiBjb250YWlucyBib3RoIG9mIHRoZSBuZWVkZWQgdGV4dAorICAgIHN0cmluZ3MuPC9saT4KKyAgPGxpPkhvd2V2ZXIsIDxzdHJvbmc+dGhlIHVzZXIgIHdpbGwgc2VlIGFuIGVycm9yIG1lc3NhZ2UgYW5kIGEgRm9yY2UgQ2xvc2UKKyAgICBidXR0b248L3N0cm9uZz4gd2hlbiB0aGlzIGFwcGxpY2F0aW9uIGlzIGxhdW5jaGVkIG9uIGEgZGV2aWNlIHNldCB0byBhCisgICAgbGFuZ3VhZ2Ugb3RoZXIgdGhhbiBFbmdsaXNoLiBUaGUgYXBwbGljYXRpb24gd2lsbCBub3QgbG9hZC48L2xpPgorPC91bD4KKworCis8cD5UbyBwcmV2ZW50IHRoaXMgc2l0dWF0aW9uLCBtYWtlIHN1cmUgdGhhdCBhIDxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+CisgIGZpbGUgZXhpc3RzIGFuZCB0aGF0IGl0IGRlZmluZXMgZXZlcnkgbmVlZGVkIHN0cmluZy4gVGhlIHNpdHVhdGlvbiBhcHBsaWVzIHRvCisgIGFsbCB0eXBlcyBvZiByZXNvdXJjZXMsIG5vdCBqdXN0IHN0cmluZ3M6IFlvdQorICBuZWVkIHRvIGNyZWF0ZSBhICBzZXQgb2YgZGVmYXVsdCByZXNvdXJjZSBmaWxlcyBjb250YWluaW5nIGFsbAorICB0aGUgcmVzb3VyY2VzIHRoYXQgeW91ciBhcHBsaWNhdGlvbiBjYWxscyB1cG9uICYjODIxMjsgbGF5b3V0cywgZHJhd2FibGVzLAorICBhbmltYXRpb25zLCBldGMuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0ZXN0aW5nLCBzZWUgPGEgaHJlZj0iI3Rlc3QtZm9yLWRlZmF1bHQiPgorICBUZXN0aW5nIGZvciBEZWZhdWx0IFJlc291cmNlczwvYT4uPC9wPgorCis8aDIgaWQ9InVzaW5nLWZyYW1ld29yayI+VXNpbmcgUmVzb3VyY2VzIGZvciBMb2NhbGl6YXRpb248L2gyPgorCis8aDMgaWQ9ImNyZWF0aW5nLWRlZmF1bHRzIj5Ib3cgdG8gQ3JlYXRlIERlZmF1bHQgUmVzb3VyY2VzPC9oMz4KKworPHA+UHV0IHRoZSBhcHBsaWNhdGlvbidzIGRlZmF1bHQgdGV4dCBpbgorYSBmaWxlIHdpdGggdGhlIGZvbGxvd2luZyBsb2NhdGlvbiBhbmQgbmFtZTo8L3A+Cis8cD48Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiAocmVxdWlyZWQgZGlyZWN0b3J5KTwvcD4KKworPHA+VGhlIHRleHQgc3RyaW5ncyBpbiA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiBzaG91bGQgIHVzZSB0aGUKK2RlZmF1bHQgbGFuZ3VhZ2UsIHdoaWNoIGlzIHRoZSBsYW5ndWFnZSB0aGF0IHlvdSBleHBlY3QgbW9zdCBvZiB5b3VyIGFwcGxpY2F0aW9uJ3MgdXNlcnMgdG8KK3NwZWFrLiAgPC9wPgorCis8cD5UaGUgZGVmYXVsdCByZXNvdXJjZSBzZXQgbXVzdCBhbHNvIGluY2x1ZGUgYW55IGRlZmF1bHQgZHJhd2FibGVzIGFuZCBsYXlvdXRzLAorICBhbmQgY2FuIGluY2x1ZGUgb3RoZXIgdHlwZXMgb2YgcmVzb3VyY2VzIHN1Y2ggYXMgYW5pbWF0aW9ucy4KKzxicj4KKyAgPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cmVzL2RyYXdhYmxlLzwvY29kZT4ocmVxdWlyZWQgZGlyZWN0b3J5IGhvbGRpbmcgYXQgbGVhc3QKKyAgb25lIGdyYXBoaWMgZmlsZSwgZm9yIHRoZSBhcHBsaWNhdGlvbidzIGljb24gb24gR29vZ2xlIFBsYXkpPGJyPgorICA8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvbGF5b3V0LzwvY29kZT4gKHJlcXVpcmVkIGRpcmVjdG9yeSBob2xkaW5nIGFuIFhNTAorICBmaWxlIHRoYXQgZGVmaW5lcyB0aGUgZGVmYXVsdCBsYXlvdXQpPGJyPgorICA8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvYW5pbS88L2NvZGU+IChyZXF1aXJlZCBpZiB5b3UgaGF2ZSBhbnkKKyAgPGNvZGU+cmVzL2FuaW0tPGVtPiZsdDtxdWFsaWZpZXJzJmd0OzwvZW0+PC9jb2RlPiBmb2xkZXJzKTxicj4KKyAgPGNvZGU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cmVzL3htbC88L2NvZGU+IChyZXF1aXJlZCBpZiB5b3UgaGF2ZSBhbnkKKyAgPGNvZGU+cmVzL3htbC08ZW0+Jmx0O3F1YWxpZmllcnMmZ3Q7PC9lbT48L2NvZGU+IGZvbGRlcnMpPGJyPgorICA8Y29kZT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXMvcmF3LzwvY29kZT4gKHJlcXVpcmVkIGlmIHlvdSBoYXZlIGFueQorICA8Y29kZT5yZXMvcmF3LTxlbT4mbHQ7cXVhbGlmaWVycyZndDs8L2VtPjwvY29kZT4gZm9sZGVycykKKzwvcD4KKworPHAgY2xhc3M9Im5vdGUiPjxzdHJvbmc+VGlwOjwvc3Ryb25nPiBJbiB5b3VyIGNvZGUsIGV4YW1pbmUgZWFjaCByZWZlcmVuY2UgdG8KKyAgYW4gQW5kcm9pZCByZXNvdXJjZS4gTWFrZSBzdXJlIHRoYXQgYSBkZWZhdWx0IHJlc291cmNlIGlzIGRlZmluZWQgZm9yIGVhY2gKKyAgb25lLiBBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHN0cmluZyBmaWxlIGlzIGNvbXBsZXRlOiBBIDxlbT4KKyAgbG9jYWxpemVkPC9lbT4gc3RyaW5nIGZpbGUgY2FuIGNvbnRhaW4gYSBzdWJzZXQgb2YgdGhlIHN0cmluZ3MsIGJ1dCB0aGUKKyAgPGVtPmRlZmF1bHQ8L2VtPiBzdHJpbmcgZmlsZSBtdXN0IGNvbnRhaW4gdGhlbSBhbGwuCis8L3A+CisKKzxoMyBpZD0iY3JlYXRpbmctYWx0ZXJuYXRpdmVzIj5Ib3cgdG8gQ3JlYXRlIEFsdGVybmF0aXZlIFJlc291cmNlczwvaDM+CisKKzxwPkEgbGFyZ2UgcGFydCBvZiBsb2NhbGl6aW5nIGFuIGFwcGxpY2F0aW9uIGlzIHByb3ZpZGluZyBhbHRlcm5hdGl2ZSB0ZXh0IGZvcgorZGlmZmVyZW50IGxhbmd1YWdlcy4gSW4gc29tZSBjYXNlcyB5b3Ugd2lsbCBhbHNvIHByb3ZpZGUgYWx0ZXJuYXRpdmUgZ3JhcGhpY3MsCitzb3VuZHMsIGxheW91dHMsIGFuZCBvdGhlciBsb2NhbGUtc3BlY2lmaWMgcmVzb3VyY2VzLiA8L3A+CisKKzxwPkFuIGFwcGxpY2F0aW9uIGNhbiBzcGVjaWZ5IG1hbnkgPGNvZGU+cmVzLzxlbT4mbHQ7cXVhbGlmaWVycyZndDs8L2VtPi88L2NvZGU+CitkaXJlY3RvcmllcywgZWFjaCB3aXRoIGRpZmZlcmVudCBxdWFsaWZpZXJzLiBUbyBjcmVhdGUgYW4gYWx0ZXJuYXRpdmUgcmVzb3VyY2UgZm9yCithIGRpZmZlcmVudCBsb2NhbGUsIHlvdSB1c2UgYSBxdWFsaWZpZXIgdGhhdCBzcGVjaWZpZXMgYSBsYW5ndWFnZSBvciBhCitsYW5ndWFnZS1yZWdpb24gY29tYmluYXRpb24uIChUaGUgbmFtZSBvZiBhIHJlc291cmNlIGRpcmVjdG9yeSBtdXN0IGNvbmZvcm0KK3RvIHRoZSBuYW1pbmcgc2NoZW1lIGRlc2NyaWJlZCBpbgorPGEgaHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9yZXNvdXJjZXMvcHJvdmlkaW5nLXJlc291cmNlcy5odG1sI0FsdGVybmF0aXZlUmVzb3VyY2VzIj5Qcm92aWRpbmcKK0FsdGVybmF0aXZlIFJlc291cmNlczwvYT4sCitvciBlbHNlIGl0IHdpbGwgbm90IGNvbXBpbGUuKTwvcD4KKworPHA+PGVtPkV4YW1wbGU6PC9lbT48L3A+CisKKzxwPlN1cHBvc2UgdGhhdCB5b3VyIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCBsYW5ndWFnZSBpcyBFbmdsaXNoLiBTdXBwb3NlIGFsc28KK3RoYXQgeW91IHdhbnQgdG8gbG9jYWxpemUgYWxsIHRoZSB0ZXh0IGluIHlvdXIgYXBwbGljYXRpb24gdG8gRnJlbmNoLCBhbmQgbW9zdAorb2YgdGhlIHRleHQgaW4geW91ciBhcHBsaWNhdGlvbiAoZXZlcnl0aGluZyBleGNlcHQgdGhlIGFwcGxpY2F0aW9uJ3MgdGl0bGUpIHRvCitKYXBhbmVzZS4gSW4gdGhpcyBjYXNlLCB5b3UgY291bGQgY3JlYXRlIHRocmVlIGFsdGVybmF0aXZlIDxjb2RlPnN0cmluZ3MueG1sPC9jb2RlPgorZmlsZXMsIGVhY2ggc3RvcmVkIGluIGEgbG9jYWxlLXNwZWNpZmljIHJlc291cmNlIGRpcmVjdG9yeTo8L3A+CisKKzxvbD4KKyAgPGxpPjxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+PGJyPgorICAgIENvbnRhaW5zICBFbmdsaXNoIHRleHQgZm9yIGFsbCAgdGhlIHN0cmluZ3MgdGhhdCB0aGUgYXBwbGljYXRpb24gdXNlcywKK2luY2x1ZGluZyB0ZXh0IGZvciBhIHN0cmluZyBuYW1lZCA8Y29kZT50aXRsZTwvY29kZT4uPC9saT4KKyAgPGxpPjxjb2RlPnJlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWw8L2NvZGU+PGJyPgorICAgIENvbnRhaW4gRnJlbmNoIHRleHQgZm9yIGFsbCAgdGhlIHN0cmluZ3MsIGluY2x1ZGluZyA8Y29kZT50aXRsZTwvY29kZT4uPC9saT4KKyAgPGxpPjxjb2RlPnJlcy92YWx1ZXMtamEvc3RyaW5ncy54bWw8L2NvZGU+PGJyPgorICAgIENvbnRhaW4gSmFwYW5lc2UgdGV4dCBmb3IgYWxsICB0aGUgc3RyaW5ncyA8ZW0+ZXhjZXB0PC9lbT4KKzxjb2RlPnRpdGxlPC9jb2RlPi48YnI+CisgIDxjb2RlPjwvY29kZT48L2xpPgorPC9vbD4KKworPHA+SWYgeW91ciBKYXZhIGNvZGUgcmVmZXJzIHRvIDxjb2RlPlIuc3RyaW5nLnRpdGxlPC9jb2RlPiwgIGhlcmUgaXMgd2hhdCB3aWxsCitoYXBwZW4gYXQgcnVudGltZTo8L3A+CisKKzx1bD4KKyAgPGxpPklmIHRoZSBkZXZpY2UgaXMgc2V0IHRvIGFueSBsYW5ndWFnZSBvdGhlciB0aGFuIEZyZW5jaCwgQW5kcm9pZCB3aWxsIGxvYWQKKzxjb2RlPnRpdGxlPC9jb2RlPiBmcm9tIHRoZSA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiBmaWxlLjwvbGk+CisgIDxsaT5JZiB0aGUgZGV2aWNlIGlzIHNldCB0byBGcmVuY2gsIEFuZHJvaWQgd2lsbCBsb2FkIDxjb2RlPnRpdGxlPC9jb2RlPiBmcm9tCit0aGUgPGNvZGU+cmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbDwvY29kZT4gZmlsZS48L2xpPgorPC91bD4KKworPHA+Tm90aWNlIHRoYXQgaWYgdGhlIGRldmljZSBpcyBzZXQgdG8gSmFwYW5lc2UsIEFuZHJvaWQgd2lsbCBsb29rIGZvcgorPGNvZGU+dGl0bGU8L2NvZGU+IGluIHRoZSA8Y29kZT5yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sPC9jb2RlPiBmaWxlLiBCdXQKK2JlY2F1c2Ugbm8gc3VjaCBzdHJpbmcgaXMgaW5jbHVkZWQgaW4gdGhhdCBmaWxlLCBBbmRyb2lkIHdpbGwgZmFsbCBiYWNrIHRvIHRoZQorZGVmYXVsdCwgYW5kIHdpbGwgbG9hZCAgPGNvZGU+dGl0bGU8L2NvZGU+IGluIEVuZ2xpc2ggZnJvbSB0aGUKKzxjb2RlPnJlcy92YWx1ZXMvc3RyaW5ncy54bWw8L2NvZGU+IGZpbGUuICA8L3A+CisKKzxoMyBpZD0icmVzb3VyY2UtcHJlY2VkZW5jZSI+V2hpY2ggUmVzb3VyY2VzIFRha2UgUHJlY2VkZW5jZT88L2gzPgorCis8cD4gSWYgbXVsdGlwbGUgcmVzb3VyY2UgZmlsZXMgbWF0Y2ggYSBkZXZpY2UncyBjb25maWd1cmF0aW9uLCBBbmRyb2lkIGZvbGxvd3MgYQorc2V0IG9mIHJ1bGVzIGluIGRlY2lkaW5nIHdoaWNoIGZpbGUgdG8gdXNlLiBBbW9uZyB0aGUgcXVhbGlmaWVycyB0aGF0IGNhbiBiZQorc3BlY2lmaWVkIGluIGEgcmVzb3VyY2UgZGlyZWN0b3J5IG5hbWUsIDxzdHJvbmc+bG9jYWxlIGFsbW9zdCBhbHdheXMgdGFrZXMKK3ByZWNlZGVuY2U8L3N0cm9uZz4uIDwvcD4KKzxwPjxlbT5FeGFtcGxlOjwvZW0+PC9wPgorCis8cD5Bc3N1bWUgdGhhdCBhbiBhcHBsaWNhdGlvbiAgaW5jbHVkZXMgYSBkZWZhdWx0IHNldCBvZiBncmFwaGljcyBhbmQgdHdvIG90aGVyCitzZXRzIG9mIGdyYXBoaWNzLCBlYWNoIG9wdGltaXplZCBmb3IgYSBkaWZmZXJlbnQgZGV2aWNlIHNldHVwOjwvcD4KKworPHVsPgorICA8bGk+PGNvZGU+cmVzL2RyYXdhYmxlLzwvY29kZT48YnI+CisgICAgQ29udGFpbnMKKyAgZGVmYXVsdCBncmFwaGljcy48L2xpPgorICA8bGk+PGNvZGU+cmVzL2RyYXdhYmxlLXNtYWxsLWxhbmQtc3R5bHVzLzwvY29kZT48YnI+CisgIENvbnRhaW5zICBncmFwaGljcyBvcHRpbWl6ZWQgZm9yIHVzZSB3aXRoIGEgZGV2aWNlIHRoYXQgZXhwZWN0cyBpbnB1dCBmcm9tIGEKKyAgc3R5bHVzIGFuZCBoYXMgYSBRVkdBIGxvdy1kZW5zaXR5IHNjcmVlbiBpbiBsYW5kc2NhcGUgb3JpZW50YXRpb24uPC9saT4KKyAgPGxpPjxjb2RlPnJlcy9kcmF3YWJsZS1qYS88L2NvZGU+IDxicj4KKyAgQ29udGFpbnMgIGdyYXBoaWNzIG9wdGltaXplZCBmb3IgdXNlIHdpdGggSmFwYW5lc2UuPC9saT4KKzwvdWw+CisKKzxwPklmIHRoZSBhcHBsaWNhdGlvbiBydW5zIG9uIGEgZGV2aWNlIHRoYXQgaXMgY29uZmlndXJlZCB0byB1c2UgSmFwYW5lc2UsCitBbmRyb2lkIHdpbGwgbG9hZCBncmFwaGljcyBmcm9tICA8Y29kZT5yZXMvZHJhd2FibGUtamEvPC9jb2RlPiwgZXZlbiBpZiB0aGUKK2RldmljZSBoYXBwZW5zIHRvIGJlIG9uZSB0aGF0IGV4cGVjdHMgaW5wdXQgZnJvbSBhIHN0eWx1cyBhbmQgaGFzIGEgUVZHQQorbG93LWRlbnNpdHkgc2NyZWVuIGluIGxhbmRzY2FwZSBvcmllbnRhdGlvbi48L3A+CisKKzxwIGNsYXNzPSJub3RlIj48c3Ryb25nPkV4Y2VwdGlvbjo8L3N0cm9uZz4gVGhlIG9ubHkgcXVhbGlmaWVycyB0aGF0IHRha2UKK3ByZWNlZGVuY2Ugb3ZlciBsb2NhbGUgaW4gdGhlIHNlbGVjdGlvbiBwcm9jZXNzIGFyZSBNQ0MgYW5kIE1OQyAobW9iaWxlIGNvdW50cnkKK2NvZGUgYW5kIG1vYmlsZSBuZXR3b3JrIGNvZGUpLiA8L3A+CisKKzxwPjxlbT5FeGFtcGxlOjwvZW0+PC9wPgorCis8cD5Bc3N1bWUgdGhhdCB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbjo8L3A+CisKKzx1bD4KKyAgPGxpPlRoZSBhcHBsaWNhdGlvbiBjb2RlIGNhbGxzIGZvciA8Y29kZT5SLnN0cmluZy50ZXh0X2E8L2NvZGU+PC9saT4KKyAgPGxpPlR3byByZWxldmFudCByZXNvdXJjZSBmaWxlcyBhcmUgYXZhaWxhYmxlOgorICAgIDx1bD4KKyAgICAgIDxsaT48Y29kZT5yZXMvdmFsdWVzLW1jYzQwNC9zdHJpbmdzLnhtbDwvY29kZT4sIHdoaWNoIGluY2x1ZGVzCis8Y29kZT50ZXh0X2E8L2NvZGU+IGluIHRoZSBhcHBsaWNhdGlvbidzIGRlZmF1bHQgbGFuZ3VhZ2UsIGluIHRoaXMgY2FzZQorRW5nbGlzaC48L2xpPgorICAgICAgPGxpPjxjb2RlPnJlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWw8L2NvZGU+LCB3aGljaCBpbmNsdWRlcworPGNvZGU+dGV4dF9hPC9jb2RlPiBpbiBIaW5kaS48L2xpPgorICAgIDwvdWw+CisgIDwvbGk+CisgIDxsaT5UaGUgYXBwbGljYXRpb24gaXMgcnVubmluZyBvbiBhIGRldmljZSB0aGF0IGhhcyB0aGUgZm9sbG93aW5nCitjb25maWd1cmF0aW9uOgorICAgIDx1bD4KKyAgICAgIDxsaT5UaGUgU0lNIGNhcmQgaXMgY29ubmVjdGVkIHRvIGEgbW9iaWxlIG5ldHdvcmsgaW4gSW5kaWEgKE1DQyA0MDQpLjwvbGk+CisgICAgICA8bGk+VGhlIGxhbmd1YWdlIGlzIHNldCB0byBIaW5kaSAoPGNvZGU+aGk8L2NvZGU+KS48L2xpPgorICAgIDwvdWw+CisgIDwvbGk+Cis8L3VsPgorCis8cD5BbmRyb2lkIHdpbGwgbG9hZCA8Y29kZT50ZXh0X2E8L2NvZGU+IGZyb20KKzxjb2RlPnJlcy92YWx1ZXMtbWNjNDA0L3N0cmluZ3MueG1sPC9jb2RlPiAoaW4gRW5nbGlzaCksIGV2ZW4gaWYgdGhlIGRldmljZSBpcworY29uZmlndXJlZCBmb3IgSGluZGkuIFRoYXQgaXMgYmVjYXVzZSBpbiB0aGUgcmVzb3VyY2Utc2VsZWN0aW9uIHByb2Nlc3MsIEFuZHJvaWQKK3dpbGwgcHJlZmVyIGFuIE1DQyBtYXRjaCBvdmVyIGEgbGFuZ3VhZ2UgbWF0Y2guIDwvcD4KKworPHA+VGhlIHNlbGVjdGlvbiBwcm9jZXNzIGlzIG5vdCBhbHdheXMgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIHRoZXNlIGV4YW1wbGVzCitzdWdnZXN0LiBQbGVhc2UgcmVhZCAgPGEKK2hyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3Byb3ZpZGluZy1yZXNvdXJjZXMuaHRtbCNCZXN0TWF0Y2giPkhvdyBBbmRyb2lkIEZpbmRzCit0aGUgQmVzdC1tYXRjaGluZyBSZXNvdXJjZTwvYT4gZm9yIGEgbW9yZSBudWFuY2VkIGRlc2NyaXB0aW9uIG9mIHRoZQorcHJvY2Vzcy4gQWxsIHRoZSBxdWFsaWZpZXJzIGFyZSBkZXNjcmliZWQgYW5kIGxpc3RlZCBpbiBvcmRlciBvZgorcHJlY2VkZW5jZSBpbiA8YQoraHJlZj0ie0Bkb2NSb290fWd1aWRlL3RvcGljcy9yZXNvdXJjZXMvcHJvdmlkaW5nLXJlc291cmNlcy5odG1sI3RhYmxlMiI+VGFibGUgMiBvZiBQcm92aWRpbmcKK0FsdGVybmF0aXZlIFJlc291cmNlczwvYT4uPC9wPgorCis8aDMgaWQ9InJlZmVycmluZy10by1yZXNvdXJjZXMiPlJlZmVycmluZyB0byBSZXNvdXJjZXMgaW4gSmF2YTwvaDM+CisKKzxwPkluIHlvdXIgYXBwbGljYXRpb24ncyBKYXZhIGNvZGUsIHlvdSByZWZlciB0byAgcmVzb3VyY2VzIHVzaW5nIHRoZSBzeW50YXgKKzxjb2RlPlIuPGVtPnJlc291cmNlX3R5cGU8L2VtPi48ZW0+cmVzb3VyY2VfbmFtZTwvZW0+PC9jb2RlPiBvcgorPGNvZGU+YW5kcm9pZC5SLjxlbT5yZXNvdXJjZV90eXBlPC9lbT4uPGVtPnJlc291cmNlX25hbWU8L2VtPjwvY29kZT48ZW0+LjwvZW0+CitGb3IgbW9yZSBhYm91dCB0aGlzLCBzZWUgPGEKK2hyZWY9IntAZG9jUm9vdH1ndWlkZS90b3BpY3MvcmVzb3VyY2VzL2FjY2Vzc2luZy1yZXNvdXJjZXMuaHRtbCI+QWNjZXNzaW5nIFJlc291cmNlczwvYT4uPC9wPgorCis8aDIgaWQ9ImNoZWNrbGlzdCI+TG9jYWxpemF0aW9uIENoZWNrbGlzdDwvaDI+CisKKzxwPkZvciBhIGNvbXBsZXRlIG92ZXJ2aWV3IG9mIHRoZSBwcm9jZXNzIG9mIGxvY2FsaXppbmcgYW5kIGRpc3RyaWJ1dGluZyBhbiBBbmRyb2lkIGFwcGxpY2F0aW9uLAorc2VlIHRoZSA8YSBocmVmPSJ7QGRvY1Jvb3R9ZGlzdHJpYnV0ZS9nb29nbGVwbGF5L3B1Ymxpc2gvbG9jYWxpemluZy5odG1sIj5Mb2NhbGl6YXRpb24KK0NoZWNrbGlzdDwvYT4gZG9jdW1lbnQuPC9wPgorCis8aDIgaWQ9InN0cmF0ZWdpZXMiPkxvY2FsaXphdGlvbiBUaXBzPC9oMj4KKworPGg0IGlkPSJmYWlsaW5nMiI+RGVzaWduIHlvdXIgYXBwbGljYXRpb24gIHRvIHdvcmsgaW4gYW55IGxvY2FsZTwvaDQ+CisKKzxwPllvdSBjYW5ub3QgYXNzdW1lIGFueXRoaW5nIGFib3V0IHRoZSBkZXZpY2Ugb24gd2hpY2ggYSB1c2VyIHdpbGwKK3J1biB5b3VyIGFwcGxpY2F0aW9uLiBUaGUgZGV2aWNlIG1pZ2h0IGhhdmUgaGFyZHdhcmUgdGhhdCB5b3Ugd2VyZSBub3QKK2FudGljaXBhdGluZywgb3IgaXQgbWlnaHQgYmUgc2V0IHRvIGEgbG9jYWxlIHRoYXQgeW91IGRpZCBub3QgcGxhbiBmb3Igb3IgdGhhdAoreW91IGNhbm5vdCB0ZXN0LiBEZXNpZ24geW91ciBhcHBsaWNhdGlvbiBzbyB0aGF0IGl0IHdpbGwgZnVuY3Rpb24gbm9ybWFsbHkgb3IgZmFpbCBncmFjZWZ1bGx5IG5vCittYXR0ZXIgd2hhdCBkZXZpY2UgaXQgcnVucyBvbi48L3A+CisKKzxwIGNsYXNzPSJub3RlIj48c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gTWFrZSBzdXJlIHRoYXQgeW91ciBhcHBsaWNhdGlvbgoraW5jbHVkZXMgYSBmdWxsIHNldCBvZiBkZWZhdWx0IHJlc291cmNlcy48L3A+IDxwPk1ha2Ugc3VyZSB0byBpbmNsdWRlCis8Y29kZT5yZXMvZHJhd2FibGUvPC9jb2RlPiBhbmQgYSA8Y29kZT5yZXMvdmFsdWVzLzwvY29kZT4gZm9sZGVycyAod2l0aG91dCBhbnkKK2FkZGl0aW9uYWwgbW9kaWZpZXJzIGluIHRoZSBmb2xkZXIgbmFtZXMpIHRoYXQgY29udGFpbiBhbGwgdGhlIGltYWdlcyBhbmQgdGV4dAordGhhdCB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgbmVlZC4gPC9wPgorCis8cD5JZiBhbiBhcHBsaWNhdGlvbiBpcyBtaXNzaW5nIGV2ZW4gb25lIGRlZmF1bHQgcmVzb3VyY2UsIGl0IHdpbGwgbm90IHJ1biBvbiBhCisgIGRldmljZSB0aGF0IGlzIHNldCB0byBhbiB1bnN1cHBvcnRlZCBsb2NhbGUuIEZvciBleGFtcGxlLCB0aGUKKyAgPGNvZGU+cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT4gZGVmYXVsdCBmaWxlIG1pZ2h0IGxhY2sgb25lIHN0cmluZyB0aGF0CisgIHRoZSBhcHBsaWNhdGlvbiBuZWVkczogV2hlbiB0aGUgYXBwbGljYXRpb24gcnVucyBpbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgYW5kCisgIGF0dGVtcHRzIHRvIGxvYWQgPGNvZGU+cmVzL3ZhbHVlcy9zdHJpbmdzLnhtbDwvY29kZT4sIHRoZSB1c2VyIHdpbGwgc2VlIGFuCisgIGVycm9yIG1lc3NhZ2UgYW5kIGEgRm9yY2UgQ2xvc2UgYnV0dG9uLiBBbiBJREUgc3VjaCBhcyBFY2xpcHNlIHdpbGwgbm90CisgIGhpZ2hsaWdodCB0aGlzIGtpbmQgb2YgZXJyb3IsIGFuZCB5b3Ugd2lsbCBub3Qgc2VlIHRoZSBwcm9ibGVtIHdoZW4geW91CisgIHRlc3QgdGhlIGFwcGxpY2F0aW9uIG9uIGEgZGV2aWNlIG9yIGVtdWxhdG9yIHRoYXQgaXMgc2V0IHRvIGEgc3VwcG9ydGVkIGxvY2FsZS48L3A+CisKKzxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj0iI3Rlc3QtZm9yLWRlZmF1bHQiPlRlc3RpbmcgZm9yIERlZmF1bHQgUmVzb3VyY2VzPC9hPi48L3A+CisKKzxoND5EZXNpZ24gYSBmbGV4aWJsZSBsYXlvdXQ8L2g0PgorCis8cD4gSWYgeW91IG5lZWQgdG8gcmVhcnJhbmdlIHlvdXIgbGF5b3V0IHRvIGZpdCBhIGNlcnRhaW4gbGFuZ3VhZ2UgKGZvciBleGFtcGxlCitHZXJtYW4gd2l0aCBpdHMgbG9uZyB3b3JkcyksIHlvdSBjYW4gY3JlYXRlIGFuIGFsdGVybmF0aXZlIGxheW91dCBmb3IgdGhhdAorbGFuZ3VhZ2UgKGZvciBleGFtcGxlIDxjb2RlPnJlcy9sYXlvdXQtZGUvbWFpbi54bWw8L2NvZGU+KS4gSG93ZXZlciwgZG9pbmcgdGhpcworY2FuIG1ha2UgeW91ciBhcHBsaWNhdGlvbiBoYXJkZXIgdG8gbWFpbnRhaW4uICBJdCBpcyBiZXR0ZXIgdG8gY3JlYXRlIGEgc2luZ2xlCitsYXlvdXQgdGhhdCBpcyBtb3JlIGZsZXhpYmxlLjwvcD4KKworPHA+QW5vdGhlciB0eXBpY2FsIHNpdHVhdGlvbiBpcyBhIGxhbmd1YWdlIHRoYXQgcmVxdWlyZXMgc29tZXRoaW5nIGRpZmZlcmVudCBpbgoraXRzIGxheW91dC4gRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBoYXZlIGEgY29udGFjdCBmb3JtIHRoYXQgc2hvdWxkIGluY2x1ZGUgIHR3bworbmFtZSBmaWVsZHMgd2hlbiB0aGUgYXBwbGljYXRpb24gcnVucyBpbiBKYXBhbmVzZSwgYnV0IHRocmVlIG5hbWUgZmllbGRzIHdoZW4KK3RoZSBhcHBsaWNhdGlvbiAgcnVucyBpbiBzb21lIG90aGVyIGxhbmd1YWdlLiBZb3UgY291bGQgaGFuZGxlIHRoaXMgaW4gZWl0aGVyIG9mCit0d28gd2F5czo8L3A+CisKKzx1bD4KKyAgPGxpPkNyZWF0ZSAgb25lICBsYXlvdXQgd2l0aCBhIGZpZWxkIHRoYXQgeW91IGNhbiBwcm9ncmFtbWF0aWNhbGx5IGVuYWJsZSBvcgorZGlzYWJsZSwgYmFzZWQgb24gdGhlIGxhbmd1YWdlLCBvcjwvbGk+CisgIDxsaT5IYXZlIHRoZSBtYWluIGxheW91dCBpbmNsdWRlIGFub3RoZXIgbGF5b3V0IHRoYXQgIGluY2x1ZGVzIHRoZSBjaGFuZ2VhYmxlCitmaWVsZC4gVGhlIHNlY29uZCBsYXlvdXQgY2FuIGhhdmUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGZvciBkaWZmZXJlbnQKK2xhbmd1YWdlcy48L2xpPgorPC91bD4KKworPGg0PkF2b2lkIGNyZWF0aW5nIG1vcmUgcmVzb3VyY2UgZmlsZXMgYW5kIHRleHQgc3RyaW5ncyB0aGFuIHlvdSBuZWVkPC9oND4KKworPHA+WW91IHByb2JhYmx5IGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBhIGxvY2FsZS1zcGVjaWZpYworYWx0ZXJuYXRpdmUgZm9yIGV2ZXJ5IHJlc291cmNlIGluIHlvdXIgYXBwbGljYXRpb24uIEZvciBleGFtcGxlLCB0aGUgbGF5b3V0CitkZWZpbmVkIGluIHRoZSA8Y29kZT5yZXMvbGF5b3V0L21haW4ueG1sPC9jb2RlPiBmaWxlIG1pZ2h0IHdvcmsgaW4gYW55IGxvY2FsZSwKK2luIHdoaWNoIGNhc2UgdGhlcmUgd291bGQgYmUgbm8gbmVlZCB0byBjcmVhdGUgYW55IGFsdGVybmF0aXZlIGxheW91dCBmaWxlcy4KKzwvcD4KKworPHA+QWxzbywgeW91IG1pZ2h0IG5vdCBuZWVkIHRvIGNyZWF0ZSBhbHRlcm5hdGl2ZSB0ZXh0IGZvciBldmVyeQorc3RyaW5nLiBGb3IgZXhhbXBsZSwgYXNzdW1lIHRoZSBmb2xsb3dpbmc6PC9wPgorCis8dWw+CisgIDxsaT5Zb3VyIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCBsYW5ndWFnZSBpcyBBbWVyaWNhbgorRW5nbGlzaC4gRXZlcnkgc3RyaW5nIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHVzZXMgaXMgZGVmaW5lZCwgdXNpbmcgQW1lcmljYW4KK0VuZ2xpc2ggc3BlbGxpbmdzLCBpbiA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPi4gPC9saT4KKworICA8bGk+Rm9yICBhIGZldyBpbXBvcnRhbnQgcGhyYXNlcywgeW91IHdhbnQgdG8gcHJvdmlkZQorQnJpdGlzaCBFbmdsaXNoIHNwZWxsaW5nLiBZb3Ugd2FudCB0aGVzZSBhbHRlcm5hdGl2ZSBzdHJpbmdzIHRvIGJlIHVzZWQgd2hlbiB5b3VyCithcHBsaWNhdGlvbiBydW5zIG9uIGEgZGV2aWNlIGluIHRoZSBVbml0ZWQgS2luZ2RvbS4gPC9saT4KKzwvdWw+CisKKzxwPlRvIGRvIHRoaXMsIHlvdSBjb3VsZCBjcmVhdGUgYSBzbWFsbCBmaWxlIGNhbGxlZAorPGNvZGU+cmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWw8L2NvZGU+IHRoYXQgaW5jbHVkZXMgb25seSB0aGUgc3RyaW5ncyB0aGF0CitzaG91bGQgYmUgZGlmZmVyZW50IHdoZW4gdGhlIGFwcGxpY2F0aW9uICBydW5zIGluIHRoZSBVLksuIEZvciBhbGwgdGhlIHJlc3Qgb2YKK3RoZSBzdHJpbmdzLCB0aGUgYXBwbGljYXRpb24gd2lsbCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHRzIGFuZCB1c2Ugd2hhdCBpcworZGVmaW5lZCBpbiA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPi48L3A+CisKKzxoND5Vc2UgdGhlIEFuZHJvaWQgQ29udGV4dCBvYmplY3QgZm9yIG1hbnVhbCBsb2NhbGUgbG9va3VwPC9oND4KKworPHA+WW91IGNhbiBsb29rIHVwIHRoZSBsb2NhbGUgdXNpbmcgdGhlIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dH0gb2JqZWN0Cit0aGF0IEFuZHJvaWQgbWFrZXMgYXZhaWxhYmxlOjwvcD4KKworPHByZT5TdHJpbmcgbG9jYWxlID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCkubG9jYWxlLmdldERpc3BsYXlOYW1lKCk7PC9wcmU+CisKKzxoMiBpZD0idGVzdGluZyI+VGVzdGluZyBMb2NhbGl6ZWQgQXBwbGljYXRpb25zPC9oMj4KKworPGgzIGlkPSJkZXZpY2UiPlRlc3Rpbmcgb24gYSBEZXZpY2U8L2gzPgorPHA+S2VlcCBpbiBtaW5kIHRoYXQgdGhlIGRldmljZSB5b3UgYXJlIHRlc3RpbmcgbWF5IGJlIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGZyb20KKyAgdGhlIGRldmljZXMgYXZhaWxhYmxlIHRvIGNvbnN1bWVycyBpbiBvdGhlciBnZW9ncmFwaGllcy4gVGhlIGxvY2FsZXMgYXZhaWxhYmxlCisgIG9uIHlvdXIgZGV2aWNlIG1heSBkaWZmZXIgZnJvbSB0aG9zZSBhdmFpbGFibGUgb24gb3RoZXIgZGV2aWNlcy4gQWxzbywgdGhlCisgIHJlc29sdXRpb24gYW5kIGRlbnNpdHkgb2YgdGhlIGRldmljZSBzY3JlZW4gbWF5IGRpZmZlciwgd2hpY2ggY291bGQgYWZmZWN0CisgIHRoZSBkaXNwbGF5IG9mIHN0cmluZ3MgYW5kIGRyYXdhYmxlcyBpbiB5b3VyIFVJLjwvcD4KKworPHA+VG8gY2hhbmdlIHRoZSBsb2NhbGUgb24gYSBkZXZpY2UsIHVzZSAgdGhlIFNldHRpbmdzIGFwcGxpY2F0aW9uICAoSG9tZSAmZ3Q7CitNZW51ICZndDsgU2V0dGluZ3MgJmd0OyBMb2NhbGUgJmFtcDsgdGV4dCAmZ3Q7IFNlbGVjdCBsb2NhbGUpLiA8L3A+CisKKzxoMyBpZD0iZW11bGF0b3IiPlRlc3Rpbmcgb24gYW4gRW11bGF0b3I8L2gzPgorCis8cD5Gb3IgZGV0YWlscyBhYm91dCB1c2luZyB0aGUgZW11bGF0b3IsIHNlZSBTZWUgPGEKK2hyZWY9IntAZG9jUm9vdH10b29scy9oZWxwL2VtdWxhdG9yLmh0bWwiPkFuZHJvaWQgRW11bGF0b3I8L2E+LjwvcD4KKzxoND5DcmVhdGluZyBhbmQgdXNpbmcgYSBjdXN0b20gbG9jYWxlPC9oND4KKworPHA+QSAmcXVvdDtjdXN0b20mcXVvdDsgbG9jYWxlIGlzIGEgbGFuZ3VhZ2UvcmVnaW9uIGNvbWJpbmF0aW9uIHRoYXQgdGhlIEFuZHJvaWQKK3N5c3RlbSBpbWFnZSBkb2VzIG5vdCBleHBsaWNpdGx5IHN1cHBvcnQuIChGb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBsb2NhbGVzIGluCitBbmRyb2lkIHBsYXRmb3JtcyBzZWUgdGhlIFZlcnNpb24gTm90ZXMgaW4gdGhlIDxhCitocmVmPSJ7QGRvY1Jvb3R9c2RrL2luZGV4Lmh0bWwiPlNESzwvYT4gdGFiKS4gWW91IGNhbiB0ZXN0Citob3cgeW91ciBhcHBsaWNhdGlvbiB3aWxsIHJ1biBpbiBhIGN1c3RvbSBsb2NhbGUgYnkgY3JlYXRpbmcgYSBjdXN0b20gbG9jYWxlIGluCit0aGUgZW11bGF0b3IuIFRoZXJlIGFyZSB0d28gd2F5cyB0byBkbyB0aGlzOjwvcD4KKworPHVsPgorICA8bGk+VXNlIHRoZSBDdXN0b20gTG9jYWxlIGFwcGxpY2F0aW9uLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdGhlCitBcHBsaWNhdGlvbiB0YWIuIChBZnRlciB5b3UgY3JlYXRlIGEgY3VzdG9tIGxvY2FsZSwgc3dpdGNoIHRvIGl0IGJ5CitwcmVzc2luZyBhbmQgaG9sZGluZyB0aGUgbG9jYWxlIG5hbWUuKTwvbGk+CisgIDxsaT5DaGFuZ2UgdG8gYSBjdXN0b20gbG9jYWxlIGZyb20gdGhlIGFkYiBzaGVsbCwgYXMgZGVzY3JpYmVkIGJlbG93LjwvbGk+Cis8L3VsPgorCis8cD5XaGVuIHlvdSBzZXQgdGhlIGVtdWxhdG9yIHRvIGEgbG9jYWxlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgQW5kcm9pZAorc3lzdGVtIGltYWdlLCB0aGUgc3lzdGVtIGl0c2VsZiB3aWxsIGRpc3BsYXkgaW4gaXRzIGRlZmF1bHQgbGFuZ3VhZ2UuIFlvdXIKK2FwcGxpY2F0aW9uLCBob3dldmVyLCBzaG91bGQgbG9jYWxpemUgcHJvcGVybHkuPC9wPgorCis8aDQ+Q2hhbmdpbmcgdGhlIGVtdWxhdG9yIGxvY2FsZSBmcm9tIHRoZSBhZGIgc2hlbGw8L2g0PgorCis8cD5UbyBjaGFuZ2UgdGhlIGxvY2FsZSBpbiB0aGUgZW11bGF0b3IgYnkgdXNpbmcgdGhlIGFkYiBzaGVsbC4gPC9wPgorCis8b2w+CisgIDxsaT5QaWNrIHRoZSBsb2NhbGUgeW91IHdhbnQgdG8gdGVzdCBhbmQgZGV0ZXJtaW5lIGl0cyBsYW5ndWFnZSBhbmQgcmVnaW9uIGNvZGVzLCBmb3IKK2V4YW1wbGUgPGNvZGU+ZnI8L2NvZGU+IGZvciBGcmVuY2ggYW5kIDxjb2RlPkNBPC9jb2RlPiBmb3IgQ2FuYWRhLjxicj4KKyAgPC9saT4KKyAgPGxpPkxhdW5jaCBhbiBlbXVsYXRvci48L2xpPgorICA8bGk+RnJvbSBhIGNvbW1hbmQtbGluZSBzaGVsbCBvbiB0aGUgaG9zdCBjb21wdXRlciwgcnVuIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQ6PGJyPgorICAgIDxjb2RlPmFkYiBzaGVsbDwvY29kZT48YnI+CisgIG9yIGlmIHlvdSBoYXZlIGEgZGV2aWNlIGF0dGFjaGVkLCBzcGVjaWZ5IHRoYXQgeW91IHdhbnQgdGhlIGVtdWxhdG9yIGJ5IGFkZGluZwordGhlIDxjb2RlPi1lPC9jb2RlPiBvcHRpb246PGJyPgorICA8Y29kZT5hZGIgLWUgc2hlbGw8L2NvZGU+PC9saT4KKyAgPGxpPkF0ICB0aGUgIGFkYiBzaGVsbCBwcm9tcHQgKDxjb2RlPiM8L2NvZGU+KSwgcnVuIHRoaXMgY29tbWFuZDogPGJyPgorICAgIDxjb2RlPnNldHByb3AgcGVyc2lzdC5zeXMubGFuZ3VhZ2UgIFs8ZW0+bGFuZ3VhZ2UgY29kZTwvZW0+XTtzZXRwcm9wCitwZXJzaXN0LnN5cy5jb3VudHJ5IFs8ZW0+Y291bnRyeSAgY29kZTwvZW0+XTtzdG9wO3NsZWVwIDU7c3RhcnQgPGJyPgorICAgIDwvY29kZT5SZXBsYWNlIGJyYWNrZXRlZCBzZWN0aW9ucyB3aXRoIHRoZSAgYXBwcm9wcmlhdGUgY29kZXMgZnJvbSBTdGVwCisxLjwvbGk+Cis8L29sPgorCis8cD5Gb3IgaW5zdGFuY2UsIHRvIHRlc3QgaW4gQ2FuYWRpYW4gRnJlbmNoOjwvcD4KKworPHA+PGNvZGU+c2V0cHJvcCBwZXJzaXN0LnN5cy5sYW5ndWFnZSAgZnI7c2V0cHJvcCBwZXJzaXN0LnN5cy5jb3VudHJ5CitDQTtzdG9wO3NsZWVwIDU7c3RhcnQgPC9jb2RlPjwvcD4KKworPHA+VGhpcyB3aWxsIGNhdXNlIHRoZSBlbXVsYXRvciAgdG8gcmVzdGFydC4gKEl0IHdpbGwgbG9vayBsaWtlIGEgZnVsbCByZWJvb3QsCitidXQgaXQgaXMgbm90LikgT25jZSB0aGUgSG9tZSBzY3JlZW4gYXBwZWFycyBhZ2FpbiwgcmUtbGF1bmNoIHlvdXIgYXBwbGljYXRpb24gKGZvcgorZXhhbXBsZSwgY2xpY2sgdGhlIFJ1biBpY29uIGluIEVjbGlwc2UpLCBhbmQgdGhlIGFwcGxpY2F0aW9uIHdpbGwgbGF1bmNoIHdpdGgKK3RoZSBuZXcgbG9jYWxlLiA8L3A+CisKKzxoMyBpZD0idGVzdC1mb3ItZGVmYXVsdCI+VGVzdGluZyBmb3IgRGVmYXVsdCBSZXNvdXJjZXM8L2gzPgorPHA+SGVyZSdzIGhvdyB0byB0ZXN0IHdoZXRoZXIgYW4gYXBwbGljYXRpb24gaW5jbHVkZXMgZXZlcnkgc3RyaW5nIHJlc291cmNlIHRoYXQgaXQgbmVlZHM6ICA8L3A+Cis8b2w+PGxpPlNldCB0aGUgZW11bGF0b3Igb3IgZGV2aWNlIHRvIGEgbGFuZ3VhZ2UgdGhhdCB5b3VyIGFwcGxpY2F0aW9uIGRvZXMgbm90CisgIHN1cHBvcnQuIEZvciBleGFtcGxlLCBpZiB0aGUgYXBwbGljYXRpb24gaGFzIEZyZW5jaCBzdHJpbmdzIGluCisgIDxjb2RlPnJlcy92YWx1ZXMtZnIvPC9jb2RlPiBidXQgZG9lcyBub3QgaGF2ZSBhbnkgU3BhbmlzaCBzdHJpbmdzIGluCisgIDxjb2RlPnJlcy92YWx1ZXMtZXMvPC9jb2RlPiwgdGhlbiBzZXQgdGhlIGVtdWxhdG9yJ3MgbG9jYWxlIHRvIFNwYW5pc2guCisgIChZb3UgY2FuIHVzZSB0aGUgQ3VzdG9tIExvY2FsZSBhcHBsaWNhdGlvbiB0byBzZXQgdGhlIGVtdWxhdG9yIHRvIGFuCisgIHVuc3VwcG9ydGVkIGxvY2FsZS4pPC9saT4KKyAgPGxpPlJ1biB0aGUgYXBwbGljYXRpb24uPC9saT4KKzxsaT5JZiB0aGUgYXBwbGljYXRpb24gc2hvd3MgYW4gZXJyb3IgbWVzc2FnZSBhbmQgYSBGb3JjZSBDbG9zZSBidXR0b24sIGl0IG1pZ2h0CisgIGJlIGxvb2tpbmcgZm9yIGEgc3RyaW5nIHRoYXQgaXMgbm90IGF2YWlsYWJsZS4gTWFrZSBzdXJlIHRoYXQgeW91cgorICA8Y29kZT5yZXMvdmFsdWVzL3N0cmluZ3MueG1sPC9jb2RlPiBmaWxlIGluY2x1ZGVzIGEgZGVmaW5pdGlvbiBmb3IKKyAgZXZlcnkgc3RyaW5nIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHVzZXMuPC9saT4KKzwvb2w+Cis8L3A+CisKKzxwPklmIHRoZSB0ZXN0IGlzIHN1Y2Nlc3NmdWwsIHJlcGVhdCBpdCBmb3Igb3RoZXIgdHlwZXMgb2YKKyAgY29uZmlndXJhdGlvbnMuIEZvciBleGFtcGxlLCBpZiB0aGUgYXBwbGljYXRpb24gaGFzIGEgbGF5b3V0IGZpbGUgY2FsbGVkCisgIDxjb2RlPnJlcy9sYXlvdXQtbGFuZC9tYWluLnhtbDwvY29kZT4gYnV0IGRvZXMgbm90IGNvbnRhaW4gYSBmaWxlIGNhbGxlZAorICA8Y29kZT5yZXMvbGF5b3V0LXBvcnQvbWFpbi54bWw8L2NvZGU+LCB0aGVuIHNldCB0aGUgZW11bGF0b3Igb3IgZGV2aWNlIHRvCisgIHBvcnRyYWl0IG9yaWVudGF0aW9uIGFuZCBzZWUgaWYgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcnVuLgorCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3Jlc291cmNlcy9ydW50aW1lLWNoYW5nZXMuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3Jlc291cmNlcy9ydW50aW1lLWNoYW5nZXMuamQKaW5kZXggNDVhNTQ4YS4uNjk1NjQ3YiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9yZXNvdXJjZXMvcnVudGltZS1jaGFuZ2VzLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvcmVzb3VyY2VzL3J1bnRpbWUtY2hhbmdlcy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9SGFuZGxpbmcgUnVudGltZSBDaGFuZ2VzCi1wYWdlLnRhZ3M9ImFjdGl2aXR5IiwibGlmZWN5Y2xlIgorcGFnZS50YWdzPWFjdGl2aXR5LGxpZmVjeWNsZQogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlYXJjaC9hZGRpbmctY3VzdG9tLXN1Z2dlc3Rpb25zLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZWFyY2gvYWRkaW5nLWN1c3RvbS1zdWdnZXN0aW9ucy5qZAppbmRleCA0N2FkMmZlLi42ZWJlZjA4IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlYXJjaC9hZGRpbmctY3VzdG9tLXN1Z2dlc3Rpb25zLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2VhcmNoL2FkZGluZy1jdXN0b20tc3VnZ2VzdGlvbnMuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFkZGluZyBDdXN0b20gU3VnZ2VzdGlvbnMKLXBhZ2UudGFncz0iU2VhcmNoUmVjZW50U3VnZ2VzdGlvbnNQcm92aWRlciIsCitwYWdlLnRhZ3M9U2VhcmNoUmVjZW50U3VnZ2VzdGlvbnNQcm92aWRlciwKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZWFyY2gvYWRkaW5nLXJlY2VudC1xdWVyeS1zdWdnZXN0aW9ucy5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2VhcmNoL2FkZGluZy1yZWNlbnQtcXVlcnktc3VnZ2VzdGlvbnMuamQKaW5kZXggYzFkNTlkNC4uZTEwMjBkZCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZWFyY2gvYWRkaW5nLXJlY2VudC1xdWVyeS1zdWdnZXN0aW9ucy5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlYXJjaC9hZGRpbmctcmVjZW50LXF1ZXJ5LXN1Z2dlc3Rpb25zLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1BZGRpbmcgUmVjZW50IFF1ZXJ5IFN1Z2dlc3Rpb25zCi1wYWdlLnRhZ3M9IlNlYXJjaFJlY2VudFN1Z2dlc3Rpb25zIiwiU2VhcmNoUmVjZW50U3VnZ2VzdGlvbnNQcm92aWRlciIKK3BhZ2UudGFncz1TZWFyY2hSZWNlbnRTdWdnZXN0aW9ucyxTZWFyY2hSZWNlbnRTdWdnZXN0aW9uc1Byb3ZpZGVyCiAKIEBqZDpib2R5CiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2VhcmNoL3NlYXJjaC1kaWFsb2cuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlYXJjaC9zZWFyY2gtZGlhbG9nLmpkCmluZGV4IGZjNzIyYjIuLmZjYWFlZDM2IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlYXJjaC9zZWFyY2gtZGlhbG9nLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2VhcmNoL3NlYXJjaC1kaWFsb2cuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUNyZWF0aW5nIGEgU2VhcmNoIEludGVyZmFjZQotcGFnZS50YWdzPSJzZWFyY2h2aWV3IgorcGFnZS50YWdzPXNlYXJjaHZpZXcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL2luZGV4LmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL2luZGV4LmpkCmluZGV4IDY1NTYwZTYuLjA5ZDI3ZTcgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2Vuc29ycy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlbnNvcnMvaW5kZXguamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUxvY2F0aW9uIGFuZCBTZW5zb3JzIEFQSXMKIHBhZ2UubGFuZGluZz10cnVlCi1wYWdlLnRhZ3M9ImxvY2F0aW9uIiwic2Vuc29ycyIKK3BhZ2UudGFncz1sb2NhdGlvbixzZW5zb3JzCiBwYWdlLmxhbmRpbmcuaW50cm89VXNlIHNlbnNvcnMgb24gdGhlIGRldmljZSB0byBhZGQgcmljaCBsb2NhdGlvbiBhbmQgbW90aW9uIGNhcGFiaWxpdGllcyB0byB5b3VyIGFwcCwgZnJvbSBHUFMgb3IgbmV0d29yayBsb2NhdGlvbiB0byBhY2NlbGVyb21ldGVyLCBneXJvc2NvcGUsIHRlbXBlcmF0dXJlLCBiYXJvbWV0ZXIsIGFuZCBtb3JlLiAKIHBhZ2UubGFuZGluZy5pbWFnZT0KIApAQCAtMzgsNCArMzgsNCBAQAogICAgIDwvYT4KICAgPC9kaXY+CiAKLTwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvZGl2PgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL3NlbnNvcnNfbW90aW9uLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL3NlbnNvcnNfbW90aW9uLmpkCmluZGV4IDI4OWM2MzkuLjk5YjY4OWYgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2Vuc29ycy9zZW5zb3JzX21vdGlvbi5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3NlbnNvcnMvc2Vuc29yc19tb3Rpb24uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPU1vdGlvbiBTZW5zb3JzCi1wYWdlLnRhZ3M9InNlbnNvcmV2ZW50IiwiYWNjZWxlcm9tZXRlciIsImd5cm9zY29wZSIsImdyYXZpdHkiLCJyb3RhdGlvbiIKK3BhZ2UudGFncz1zZW5zb3JldmVudCxhY2NlbGVyb21ldGVyLGd5cm9zY29wZSxncmF2aXR5LHJvdGF0aW9uCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTQ1MCw0ICs0NTAsNCBAQAogPHA+VGhlIEFuZHJvaWQgU0RLIHByb3ZpZGVzIGEgc2FtcGxlIGFwcGxpY2F0aW9uIHRoYXQgc2hvd3MgaG93IHRvIHVzZSB0aGUgcm90YXRpb24gdmVjdG9yIHNlbnNvci4KIFRoZSBzYW1wbGUgYXBwbGljYXRpb24gaXMgbG9jYXRlZCBpbiB0aGUgQVBJIERlbW9zIGNvZGUgKDxhCiBocmVmPSJ7QGRvY1Jvb3R9cmVzb3VyY2VzL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9vcy9Sb3RhdGlvblZlY3RvckRlbW8uaHRtbCI+Ci1PUyAtIFJvdGF0aW9uVmVjdG9yRGVtbzwvYT4pLjwvcD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitPUyAtIFJvdGF0aW9uVmVjdG9yRGVtbzwvYT4pLjwvcD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3Mvc2Vuc29ycy9zZW5zb3JzX3Bvc2l0aW9uLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL3NlbnNvcnNfcG9zaXRpb24uamQKaW5kZXggNTViMjgyYi4uNjViOTM1MCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL3NlbnNvcnNfcG9zaXRpb24uamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy9zZW5zb3JzL3NlbnNvcnNfcG9zaXRpb24uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVBvc2l0aW9uIFNlbnNvcnMKLXBhZ2UudGFncz0ic2Vuc29yZXZlbnQiLCJvcmllbnRhdGlvbiIsInByb3hpbWl0eSIKK3BhZ2UudGFncz1zZW5zb3JldmVudCxvcmllbnRhdGlvbixwcm94aW1pdHkKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpAQCAtMzEzLDQgKzMxMyw0IEBACiAibmVhciIgb3IgImZhci4iIEluIHRoaXMgY2FzZSwgdGhlIHNlbnNvciB1c3VhbGx5IHJlcG9ydHMgaXRzIG1heGltdW0gcmFuZ2UgdmFsdWUgaW4gdGhlIGZhciBzdGF0ZQogYW5kIGEgbGVzc2VyIHZhbHVlIGluIHRoZSBuZWFyIHN0YXRlLiBUeXBpY2FsbHksIHRoZSBmYXIgdmFsdWUgaXMgYSB2YWx1ZSA+IDUgY20sIGJ1dCB0aGlzIGNhbiB2YXJ5CiBmcm9tIHNlbnNvciB0byBzZW5zb3IuIFlvdSBjYW4gZGV0ZXJtaW5lIGEgc2Vuc29yJ3MgbWF4aW11bSByYW5nZSBieSB1c2luZyB0aGUge0BsaW5rCi1hbmRyb2lkLmhhcmR3YXJlLlNlbnNvciNnZXRNYXhpbXVtUmFuZ2V9IG1ldGhvZC48L3A+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorYW5kcm9pZC5oYXJkd2FyZS5TZW5zb3IjZ2V0TWF4aW11bVJhbmdlfSBtZXRob2QuPC9wPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy90ZXh0L2NvcHktcGFzdGUuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3RleHQvY29weS1wYXN0ZS5qZAppbmRleCBiMzRmMGZhLi44Zjg5OGU0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3RleHQvY29weS1wYXN0ZS5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3RleHQvY29weS1wYXN0ZS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9Q29weSBhbmQgUGFzdGUKLXBhZ2UudGFncz0iY2xpcGJvYXJkbWFuYWdlciIsImNsaXBkYXRhIiwiaW5wdXQiCitwYWdlLnRhZ3M9Y2xpcGJvYXJkbWFuYWdlcixjbGlwZGF0YSxpbnB1dAogQGpkOmJvZHkKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgogICAgIDxkaXYgaWQ9InF2Ij4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdGV4dC9jcmVhdGluZy1pbnB1dC1tZXRob2QuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3RleHQvY3JlYXRpbmctaW5wdXQtbWV0aG9kLmpkCmluZGV4IDcyNTQ1OTQuLjIwNWZkOTYgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdGV4dC9jcmVhdGluZy1pbnB1dC1tZXRob2QuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy90ZXh0L2NyZWF0aW5nLWlucHV0LW1ldGhvZC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9Q3JlYXRpbmcgYW4gSW5wdXQgTWV0aG9kCi1wYWdlLnRhZ3M9ImltZSIsImtleWJvYXJkIiwiaW5wdXRtZXRob2RzZXJ2aWNlIgorcGFnZS50YWdzPWltZSxrZXlib2FyZCxpbnB1dG1ldGhvZHNlcnZpY2UKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy90ZXh0L3NwZWxsLWNoZWNrZXItZnJhbWV3b3JrLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy90ZXh0L3NwZWxsLWNoZWNrZXItZnJhbWV3b3JrLmpkCmluZGV4IDM2NmY5Y2MuLmE1ZDk5MzIgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdGV4dC9zcGVsbC1jaGVja2VyLWZyYW1ld29yay5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3RleHQvc3BlbGwtY2hlY2tlci1mcmFtZXdvcmsuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNwZWxsaW5nIENoZWNrZXIgRnJhbWV3b3JrCi1wYWdlLnRhZ3M9ImlucHV0Iiwic3BlbGxjaGVja2Vyc2VydmljZSIKK3BhZ2UudGFncz1pbnB1dCxzcGVsbGNoZWNrZXJzZXJ2aWNlCiBAamQ6Ym9keQogPGRpdiBpZD0icXYtd3JhcHBlciI+CiA8ZGl2IGlkPSJxdiI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2FjdGlvbmJhci5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvYWN0aW9uYmFyLmpkCmluZGV4IDMxNzNmZjEuLmExMjI0NDMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvYWN0aW9uYmFyLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvYWN0aW9uYmFyLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1BY3Rpb24gQmFyCi1wYWdlLnRhZ3M9ImFjdGlvbmJhciIsIm1lbnUiLCJ0YWJzIgorcGFnZS50YWdzPWFjdGlvbmJhcixtZW51LHRhYnMKIAogQGpkOmJvZHkKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9idXR0b24uamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL2J1dHRvbi5qZAppbmRleCA0MWI2N2I3Zi4uMDI1OTdjOCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9idXR0b24uamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9idXR0b24uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUJ1dHRvbnMKLXBhZ2UudGFncz0iYnV0dG9uIiwiaW1hZ2VidXR0b24iCitwYWdlLnRhZ3M9YnV0dG9uLGltYWdlYnV0dG9uCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTI0MSw0ICsyNDEsNCBAQAogICA8cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIFhNTCBzeW50YXgsIGluY2x1ZGluZyBob3cgdG8gZGVmaW5lIGEgZGlzYWJsZWQsIGhvdmVyZWQsIG9yCiBvdGhlciBidXR0b24gc3RhdGVzLCByZWFkIGFib3V0IDxhCiBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3Jlc291cmNlcy9kcmF3YWJsZS1yZXNvdXJjZS5odG1sI1N0YXRlTGlzdCI+U3RhdGUgTGlzdAotRHJhd2FibGU8L2E+LjwvcD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitEcmF3YWJsZTwvYT4uPC9wPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9waWNrZXJzLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9waWNrZXJzLmpkCmluZGV4IDRjNTU4NDAuLjMxZTRkM2Y1IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3BpY2tlcnMuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9waWNrZXJzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1QaWNrZXJzCi1wYWdlLnRhZ3M9ImRhdGVwaWNrZXIiLCJ0aW1lcGlja2VyIgorcGFnZS50YWdzPWRhdGVwaWNrZXIsdGltZXBpY2tlcgogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3JhZGlvYnV0dG9uLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9yYWRpb2J1dHRvbi5qZAppbmRleCBkMGM0OGVkLi5iMjU1NmUxOSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9yYWRpb2J1dHRvbi5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3JhZGlvYnV0dG9uLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1SYWRpbyBCdXR0b25zCi1wYWdlLnRhZ3M9InJhZGlvYnV0dG9uIiwicmFkaW9ncm91cCIKK3BhZ2UudGFncz1yYWRpb2J1dHRvbixyYWRpb2dyb3VwCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvY29udHJvbHMvc3Bpbm5lci5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvY29udHJvbHMvc3Bpbm5lci5qZAppbmRleCA4NTcxNGI2Li5kMmRiN2E0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3NwaW5uZXIuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy9zcGlubmVyLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1TcGlubmVycwotcGFnZS50YWdzPSJhZGFwdGVydmlldyIsInNwaW5uZXJhZGFwdGVyIgorcGFnZS50YWdzPWFkYXB0ZXJ2aWV3LHNwaW5uZXJhZGFwdGVyCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTE0Myw0ICsxNDMsNCBAQAogPHA+SWYgeW91IGltcGxlbWVudCB0aGUge0BsaW5rCiBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldy5Pbkl0ZW1TZWxlY3RlZExpc3RlbmVyfSBpbnRlcmZhY2Ugd2l0aCB5b3VyIHtAbGluawogYW5kcm9pZC5hcHAuQWN0aXZpdHl9IG9yIHtAbGluayBhbmRyb2lkLmFwcC5GcmFnbWVudH0gKHN1Y2ggYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUpLCB5b3UgY2FuIHBhc3MKLTxjb2RlPnRoaXM8L2NvZGU+IGFzIHRoZSBpbnRlcmZhY2UgaW5zdGFuY2UuPC9wPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzxjb2RlPnRoaXM8L2NvZGU+IGFzIHRoZSBpbnRlcmZhY2UgaW5zdGFuY2UuPC9wPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy90ZXh0LmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy90ZXh0LmpkCmluZGV4IGMwYjk4NzMuLjk0NzRkZWUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvY29udHJvbHMvdGV4dC5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3RleHQuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVRleHQgRmllbGRzCi1wYWdlLnRhZ3M9ImVkaXR0ZXh0IiwiYXV0b2NvbXBsZXRldGV4dHZpZXciCitwYWdlLnRhZ3M9ZWRpdHRleHQsYXV0b2NvbXBsZXRldGV4dHZpZXcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jb250cm9scy90b2dnbGVidXR0b24uamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3RvZ2dsZWJ1dHRvbi5qZAppbmRleCAzMTE5Y2Q5Li5jNTdiNTEwIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3RvZ2dsZWJ1dHRvbi5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3RvZ2dsZWJ1dHRvbi5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9VG9nZ2xlIEJ1dHRvbnMKLXBhZ2UudGFncz0ic3dpdGNoIiwidG9nZ2xlYnV0dG9uIgorcGFnZS50YWdzPXN3aXRjaCx0b2dnbGVidXR0b24KIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jdXN0b20tY29tcG9uZW50cy5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvY3VzdG9tLWNvbXBvbmVudHMuamQKaW5kZXggNzAzYTVjZS4uYjE0NjA5OCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9jdXN0b20tY29tcG9uZW50cy5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2N1c3RvbS1jb21wb25lbnRzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1DdXN0b20gQ29tcG9uZW50cwotcGFnZS50YWdzPSJ2aWV3Iiwid2lkZ2V0IgorcGFnZS50YWdzPXZpZXcsd2lkZ2V0CiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvZGVjbGFyaW5nLWxheW91dC5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvZGVjbGFyaW5nLWxheW91dC5qZAppbmRleCA2NTg2YzJmLi42MTY5NDliIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2RlY2xhcmluZy1sYXlvdXQuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9kZWNsYXJpbmctbGF5b3V0LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1MYXlvdXRzCi1wYWdlLnRhZ3M9InZpZXciLCJ2aWV3Z3JvdXAiCitwYWdlLnRhZ3M9dmlldyx2aWV3Z3JvdXAKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9kaWFsb2dzLmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9kaWFsb2dzLmpkCmluZGV4IGQ5MzRjNGIuLjQ3NTRkMTEgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvZGlhbG9ncy5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2RpYWxvZ3MuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPURpYWxvZ3MKLXBhZ2UudGFncz0iYWxlcnRkaWFsb2ciLCJkaWFsb2dmcmFnbWVudCIKK3BhZ2UudGFncz1hbGVydGRpYWxvZyxkaWFsb2dmcmFnbWVudAogCiBAamQ6Ym9keQogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2RyYWctZHJvcC5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvZHJhZy1kcm9wLmpkCmluZGV4IDlhNmIwZTkuLjlkOGFhOWIgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvZHJhZy1kcm9wLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvZHJhZy1kcm9wLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1EcmFnIGFuZCBEcm9wCi1wYWdlLnRhZ3M9ImNsaXBkYXRhIiwiZHJhZ2V2ZW50Iiwib25sb25nY2xpY2tsaXN0ZW5lciIKK3BhZ2UudGFncz1jbGlwZGF0YSxkcmFnZXZlbnQsb25sb25nY2xpY2tsaXN0ZW5lcgogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9ncmlkdmlldy5qZCBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvbGF5b3V0L2dyaWR2aWV3LmpkCmluZGV4IGJjMTg5YzQuLmI4ZDI0YjYwIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9ncmlkdmlldy5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9ncmlkdmlldy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9R3JpZCBWaWV3Ci1wYWdlLnRhZ3M9ImdyaWR2aWV3IgorcGFnZS50YWdzPWdyaWR2aWV3CiBAamQ6Ym9keQogPGRpdiBpZD0icXYtd3JhcHBlciI+CiA8ZGl2IGlkPSJxdiI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9saW5lYXIuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9saW5lYXIuamQKaW5kZXggNDQ0ZGM3MS4uOTAyZjIyZiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9sYXlvdXQvbGluZWFyLmpkCisrKyBiL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvbGF5b3V0L2xpbmVhci5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9TGluZWFyIExheW91dAotcGFnZS50YWdzPSJsaW5lYXJsYXlvdXQiCitwYWdlLnRhZ3M9bGluZWFybGF5b3V0CiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvbGF5b3V0L2xpc3R2aWV3LmpkIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9sYXlvdXQvbGlzdHZpZXcuamQKaW5kZXggZjgzMTVjNS4uM2M2ZTMyYyAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9sYXlvdXQvbGlzdHZpZXcuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9sYXlvdXQvbGlzdHZpZXcuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUxpc3QgVmlldwotcGFnZS50YWdzPSJsaXN0dmlldyIKK3BhZ2UudGFncz1saXN0dmlldwogQGpkOmJvZHkKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgogPGRpdiBpZD0icXYiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9sYXlvdXQvcmVsYXRpdmUuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9yZWxhdGl2ZS5qZAppbmRleCA2NWM1NjE3Li42OWY1YzBhIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9yZWxhdGl2ZS5qZAorKysgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL2xheW91dC9yZWxhdGl2ZS5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9UmVsYXRpdmUgTGF5b3V0Ci1wYWdlLnRhZ3M9InJlbGF0aXZlbGF5b3V0IgorcGFnZS50YWdzPXJlbGF0aXZlbGF5b3V0CiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTExNCw0ICsxMTQsNCBAQAogPC9wcmU+CiAKIDxwPkZvciBkZXRhaWxzIGFib3V0IGFsbCB0aGUgbGF5b3V0IGF0dHJpYnV0ZXMgYXZhaWxhYmxlIHRvIGVhY2ggY2hpbGQgdmlldyBvZiBhIHtAbGluawotYW5kcm9pZC53aWRnZXQuUmVsYXRpdmVMYXlvdXR9LCBzZWUge0BsaW5rIGFuZHJvaWQud2lkZ2V0LlJlbGF0aXZlTGF5b3V0LkxheW91dFBhcmFtc30uPC9wPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2FuZHJvaWQud2lkZ2V0LlJlbGF0aXZlTGF5b3V0fSwgc2VlIHtAbGluayBhbmRyb2lkLndpZGdldC5SZWxhdGl2ZUxheW91dC5MYXlvdXRQYXJhbXN9LjwvcD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvc2V0dGluZ3MuamQgYi9kb2NzL2h0bWwvZ3VpZGUvdG9waWNzL3VpL3NldHRpbmdzLmpkCmluZGV4IGQ5NjQ0N2QuLjFkMzY0MzAgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC9ndWlkZS90b3BpY3MvdWkvc2V0dGluZ3MuamQKKysrIGIvZG9jcy9odG1sL2d1aWRlL3RvcGljcy91aS9zZXR0aW5ncy5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U2V0dGluZ3MKLXBhZ2UudGFncz0icHJlZmVyZW5jZSIsInByZWZlcmVuY2VhY3Rpdml0eSIsInByZWZlcmVuY2VmcmFnbWVudCIKK3BhZ2UudGFncz1wcmVmZXJlbmNlLHByZWZlcmVuY2VhY3Rpdml0eSxwcmVmZXJlbmNlZnJhZ21lbnQKIAogQGpkOmJvZHkKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3NhbXBsZXMvaW5kZXguamQgYi9kb2NzL2h0bWwvc2FtcGxlcy9pbmRleC5qZAppbmRleCBjMTIxM2I2Li5hYjE1ZTMyIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvc2FtcGxlcy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvc2FtcGxlcy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U2FtcGxlcwotcGFnZS50YWdzPSJzYW1wbGVzIiwiZXhhbXBsZXMiLCJjb2RlIgorcGFnZS50YWdzPXNhbXBsZXMsZXhhbXBsZXMsY29kZQogCiBAamQ6Ym9keQogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvc2RrL2luZGV4LmpkIGIvZG9jcy9odG1sL3Nkay9pbmRleC5qZAppbmRleCBhNzdjZGZiLi5iYzIyNDE2IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvc2RrL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC9zZGsvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFuZHJvaWQgU0RLCi1wYWdlLnRhZ3M9ImRvd25sb2FkIgorcGFnZS50YWdzPWRvd25sb2FkCiBwYWdlLnRlbXBsYXRlPXNkawogaGVhZGVyLmhpZGU9MQogcGFnZS5tZXRhRGVzY3JpcHRpb249RG93bmxvYWQgdGhlIG9mZmljaWFsIEFuZHJvaWQgU0RLIHRvIGRldmVsb3AgYXBwcyBmb3IgQW5kcm9pZC1wb3dlcmVkIGRldmljZXMuCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvc2RrL2luc3RhbGxpbmcvc3R1ZGlvLmpkIGIvZG9jcy9odG1sL3Nkay9pbnN0YWxsaW5nL3N0dWRpby5qZAppbmRleCBmMTllOGJjLi5mMzAyN2E5IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvc2RrL2luc3RhbGxpbmcvc3R1ZGlvLmpkCisrKyBiL2RvY3MvaHRtbC9zZGsvaW5zdGFsbGluZy9zdHVkaW8uamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUdldHRpbmcgU3RhcnRlZCB3aXRoIEFuZHJvaWQgU3R1ZGlvCi1wYWdlLnRhZ3M9InN0dWRpbyIKK3BhZ2UudGFncz1zdHVkaW8KIEBqZDpib2R5CiAKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3Rvb2xzL2Fkay9hZGsuamQgYi9kb2NzL2h0bWwvdG9vbHMvYWRrL2Fkay5qZAppbmRleCAxNjUxNzQ3Li43ZTc1YzExIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdG9vbHMvYWRrL2Fkay5qZAorKysgYi9kb2NzL2h0bWwvdG9vbHMvYWRrL2Fkay5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QWNjZXNzb3J5IERldmVsb3BtZW50IEtpdCAyMDExIEd1aWRlCi1wYWdlLnRhZ3M9ImFkayIKK3BhZ2UudGFncz1hZGsKIEBqZDpib2R5CiAKICAgPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdG9vbHMvYWRrL2FkazIuamQgYi9kb2NzL2h0bWwvdG9vbHMvYWRrL2FkazIuamQKaW5kZXggYzYwZTkyMC4uZDY5MTI1YSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3Rvb2xzL2Fkay9hZGsyLmpkCisrKyBiL2RvY3MvaHRtbC90b29scy9hZGsvYWRrMi5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QWNjZXNzb3J5IERldmVsb3BtZW50IEtpdCAyMDEyIEd1aWRlCi1wYWdlLnRhZ3M9ImFkayIKK3BhZ2UudGFncz1hZGsKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3Rvb2xzL2Fkay9pbmRleC5qZCBiL2RvY3MvaHRtbC90b29scy9hZGsvaW5kZXguamQKaW5kZXggZTAzNTExNS4uZTA4NzQ4ZmMgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90b29scy9hZGsvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3Rvb2xzL2Fkay9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QWNjZXNzb3J5IERldmVsb3BtZW50IEtpdAotcGFnZS50YWdzPSJhZGsiCitwYWdlLnRhZ3M9YWRrCiBAamQ6Ym9keQogCiA8cD5UaGUgQWNjZXNzb3J5IERldmVsb3BtZW50IEtpdCAoQURLKSBpcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBmb3IgaGFyZHdhcmUgbWFudWZhY3R1cmVycyBhbmQKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90b29scy9kZWJ1Z2dpbmcvZGVidWdnaW5nLW1lbW9yeS5qZCBiL2RvY3MvaHRtbC90b29scy9kZWJ1Z2dpbmcvZGVidWdnaW5nLW1lbW9yeS5qZAppbmRleCBhN2Y0NDNjLi5mY2NiNjdlIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdG9vbHMvZGVidWdnaW5nL2RlYnVnZ2luZy1tZW1vcnkuamQKKysrIGIvZG9jcy9odG1sL3Rvb2xzL2RlYnVnZ2luZy9kZWJ1Z2dpbmctbWVtb3J5LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1JbnZlc3RpZ2F0aW5nIFlvdXIgUkFNIFVzYWdlCi1wYWdlLnRhZ3M9Im1lbW9yeSIsIk91dE9mTWVtb3J5RXJyb3IiCitwYWdlLnRhZ3M9bWVtb3J5LE91dE9mTWVtb3J5RXJyb3IKIEBqZDpib2R5CiAKICA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KQEAgLTQ5Miw0ICs0OTIsNCBAQAogPHAgY2xhc3M9Im5vdGUiPjxzdHJvbmc+VGlwOjwvc3Ryb25nPiBZb3UgY2FuIGFsc28gcGVyZm9ybSB0aGUgYWJvdmUgc3RlcHMgYnkgdXNpbmcgdGhlICJtb25rZXkiCiB0ZXN0IGZyYW1ld29yay4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcnVubmluZyB0aGUgbW9ua2V5IHRlc3QgZnJhbWV3b3JrLCByZWFkIHRoZSA8YSBocmVmPQogIntAZG9jUm9vdH10b29scy9oZWxwL21vbmtleXJ1bm5lcl9jb25jZXB0cy5odG1sIj5tb25rZXlydW5uZXI8L2E+Ci1kb2N1bWVudGF0aW9uLjwvcD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkb2N1bWVudGF0aW9uLjwvcD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90b29scy9oZWxwL2FkYi5qZCBiL2RvY3MvaHRtbC90b29scy9oZWxwL2FkYi5qZAppbmRleCBjMjU5OTBmLi4xODUwMTIzIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdG9vbHMvaGVscC9hZGIuamQKKysrIGIvZG9jcy9odG1sL3Rvb2xzL2hlbHAvYWRiLmpkCkBAIC0xLDcgKzEsNyBAQAogcGFnZS50aXRsZT1BbmRyb2lkIERlYnVnIEJyaWRnZQogcGFyZW50LnRpdGxlPVRvb2xzCiBwYXJlbnQubGluaz1pbmRleC5odG1sCi1wYWdlLnRhZ3M9ImFkYiIKK3BhZ2UudGFncz1hZGIKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3Rvb2xzL2hlbHAvYWR0LmpkIGIvZG9jcy9odG1sL3Rvb2xzL2hlbHAvYWR0LmpkCmluZGV4IDRkYWM1NzQuLjFiYjMwMTUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90b29scy9oZWxwL2FkdC5qZAorKysgYi9kb2NzL2h0bWwvdG9vbHMvaGVscC9hZHQuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFuZHJvaWQgRGV2ZWxvcGVyIFRvb2xzCi1wYWdlLnRhZ3M9ImFkdCIKK3BhZ2UudGFncz1hZHQKIEBqZDpib2R5CiAKICAgPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdG9vbHMvaGVscC9kcmF3OXBhdGNoLmpkIGIvZG9jcy9odG1sL3Rvb2xzL2hlbHAvZHJhdzlwYXRjaC5qZAppbmRleCBlYmYyYzZjLi44NTliMWNmIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdG9vbHMvaGVscC9kcmF3OXBhdGNoLmpkCisrKyBiL2RvY3MvaHRtbC90b29scy9oZWxwL2RyYXc5cGF0Y2guamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPURyYXcgOS1wYXRjaAotcGFnZS50YWdzPSJOaW5lUGF0Y2giCitwYWdlLnRhZ3M9TmluZVBhdGNoCiBAamQ6Ym9keQogCiA8cD5UaGUgRHJhdyA5LXBhdGNoIHRvb2wgYWxsb3dzIHlvdSB0byBlYXNpbHkgY3JlYXRlIGEgCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdG9vbHMvc2FtcGxlcy9pbmRleC5qZCBiL2RvY3MvaHRtbC90b29scy9zYW1wbGVzL2luZGV4LmpkCmluZGV4IDc2YmEzN2EuLmEwZDExZTkgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90b29scy9zYW1wbGVzL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90b29scy9zYW1wbGVzL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1TYW1wbGVzCi1wYWdlLnRhZ3M9ImV4YW1wbGUiLCJjb2RlIgorcGFnZS50YWdzPWV4YW1wbGUsY29kZQogQGpkOmJvZHkKIAogPHA+VG8gaGVscCB5b3UgdW5kZXJzdGFuZCBzb21lIGZ1bmRhbWVudGFsIEFuZHJvaWQgQVBJcyBhbmQgY29kaW5nIHByYWN0aWNlcywgYSB2YXJpZXR5IG9mIHNhbXBsZQpAQCAtMjksNCArMjksNCBAQAogICA8YSBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL21hbmlmZXN0L3VzZXMtc2RrLWVsZW1lbnQuaHRtbCNBcGlMZXZlbHMiPkFQSSBsZXZlbDwvYT4uPC9wPgogCiA8cD5Zb3UgY2FuIGVhc2lseSBjcmVhdGUgbmV3IEFuZHJvaWQgcHJvamVjdHMgd2l0aCB0aGUgZG93bmxvYWRlZCBzYW1wbGVzLCBtb2RpZnkgdGhlbQotaWYgeW91J2QgbGlrZSwgYW5kIHRoZW4gcnVuIHRoZW0gb24gYW4gZW11bGF0b3Igb3IgZGV2aWNlLjwvcD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitpZiB5b3UnZCBsaWtlLCBhbmQgdGhlbiBydW4gdGhlbSBvbiBhbiBlbXVsYXRvciBvciBkZXZpY2UuPC9wPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2FjY2Vzc2liaWxpdHkvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYWNjZXNzaWJpbGl0eS9pbmRleC5qZAppbmRleCAwYWYxZDg3Li5lYTU0ZGM0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvYWNjZXNzaWJpbGl0eS9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYWNjZXNzaWJpbGl0eS9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9SW1wbGVtZW50aW5nIEFjY2Vzc2liaWxpdHkKLXBhZ2UudGFncz0ibmF2aWdhdGlvbiIsImlucHV0IgorcGFnZS50YWdzPW5hdmlnYXRpb24saW5wdXQKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9hY3Rpdml0eS10ZXN0aW5nL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2FjdGl2aXR5LXRlc3RpbmcvaW5kZXguamQKaW5kZXggZGRlZGU3MS4uYjk1NDJiNiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2FjdGl2aXR5LXRlc3RpbmcvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2FjdGl2aXR5LXRlc3RpbmcvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVRlc3RpbmcgWW91ciBBbmRyb2lkIEFjdGl2aXR5Ci1wYWdlLnRhZ3M9InRlc3RpbmciCitwYWdlLnRhZ3M9dGVzdGluZwogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2FuaW1hdGlvbi9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9hbmltYXRpb24vaW5kZXguamQKaW5kZXggYjY5NDBmOC4uNGYzNzc4OCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2FuaW1hdGlvbi9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYW5pbWF0aW9uL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1BZGRpbmcgQW5pbWF0aW9ucwotcGFnZS50YWdzPSJBbmltYXRvciIsInZpZXdzIiwibGF5b3V0IiwidXNlciBpbnRlcmZhY2UiCitwYWdlLnRhZ3M9QW5pbWF0b3Isdmlld3MsbGF5b3V0LHVzZXIgaW50ZXJmYWNlCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQogCkBAIC04NCw0ICs4NCw0IEBACiAgICAgICA8ZGQ+CiAgICAgICAgIExlYXJuIGhvdyB0byBlbmFibGUgYnVpbHQtaW4gYW5pbWF0aW9ucyB3aGVuIGFkZGluZywgcmVtb3ZpbmcsIG9yIHVwZGF0aW5nIGNoaWxkIHZpZXdzIGluIGEgbGF5b3V0LgogICAgICAgPC9kZD4KLSAgICA8L2RsPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICA8L2RsPgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2FydGljbGVzL21lbW9yeS5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9tZW1vcnkuamQKaW5kZXggY2RjMGNkNC4uZjE1YWY2OCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2FydGljbGVzL21lbW9yeS5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvbWVtb3J5LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1NYW5hZ2luZyBZb3VyIEFwcCdzIE1lbW9yeQotcGFnZS50YWdzPSJyYW0iLCJsb3cgbWVtb3J5IiwiT3V0T2ZNZW1vcnlFcnJvciIsIm9uVHJpbU1lbW9yeSIKK3BhZ2UudGFncz1yYW0sbG93IG1lbW9yeSxPdXRPZk1lbW9yeUVycm9yLG9uVHJpbU1lbW9yeQogcGFnZS5hcnRpY2xlPXRydWUKIEBqZDpib2R5CiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9wZXJmLWFuci5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9wZXJmLWFuci5qZAppbmRleCA4N2NmYzFjLi5iMzJjYzRmIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvcGVyZi1hbnIuamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2FydGljbGVzL3BlcmYtYW5yLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1LZWVwaW5nIFlvdXIgQXBwIFJlc3BvbnNpdmUKLXBhZ2UudGFncz0idGhyZWFkcyIsImFzeW5jdGFzayIKK3BhZ2UudGFncz10aHJlYWRzLGFzeW5jdGFzawogCiBwYWdlLmFydGljbGU9dHJ1ZQogQGpkOmJvZHkKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9wZXJmLWpuaS5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9wZXJmLWpuaS5qZAppbmRleCA5Zjg4MGVjLi40MzVkMjMxIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvcGVyZi1qbmkuamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2FydGljbGVzL3BlcmYtam5pLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1KTkkgVGlwcwotcGFnZS50YWdzPSJuZGsiLCJuYXRpdmUiCitwYWdlLnRhZ3M9bmRrLG5hdGl2ZQogCiBwYWdlLmFydGljbGU9dHJ1ZQogQGpkOmJvZHkKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9zZWN1cml0eS1zc2wuamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvc2VjdXJpdHktc3NsLmpkCmluZGV4IGY1Mjg2NWEuLjA2MzlmYjAgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9zZWN1cml0eS1zc2wuamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2FydGljbGVzL3NlY3VyaXR5LXNzbC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU977u/U2VjdXJpdHkgd2l0aCBIVFRQUyBhbmQgU1NMCi1wYWdlLnRhZ3M9Im5ldHdvcmsiLCJjZXJ0aWZpY2F0ZXMiCitwYWdlLnRhZ3M9bmV0d29yayxjZXJ0aWZpY2F0ZXMKIAogcGFnZS5hcnRpY2xlPXRydWUKIEBqZDpib2R5CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvc21wLmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2FydGljbGVzL3NtcC5qZAppbmRleCA3MjQwZWVjLi4wYjQ1OTg3IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvYXJ0aWNsZXMvc21wLmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9hcnRpY2xlcy9zbXAuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNNUCBQcmltZXIgZm9yIEFuZHJvaWQKLXBhZ2UudGFncz0ibmRrIiwibmF0aXZlIgorcGFnZS50YWdzPW5kayxuYXRpdmUKIAogcGFnZS5hcnRpY2xlPXRydWUKIEBqZDpib2R5CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvYmFja3dhcmQtY29tcGF0aWJsZS11aS9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9iYWNrd2FyZC1jb21wYXRpYmxlLXVpL2luZGV4LmpkCmluZGV4IDRiYWE1NWMuLmM4YjZlY2MgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9iYWNrd2FyZC1jb21wYXRpYmxlLXVpL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9iYWNrd2FyZC1jb21wYXRpYmxlLXVpL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1DcmVhdGluZyBCYWNrd2FyZC1Db21wYXRpYmxlIFVJcwotcGFnZS50YWdzPSJ3aWRnZXRzIiwic3VwcG9ydCIKK3BhZ2UudGFncz13aWRnZXRzLHN1cHBvcnQKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvYWN0aW9uYmFyL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9hY3Rpb25iYXIvaW5kZXguamQKaW5kZXggZjBkZTc1OC4uMDMwMzA0MyAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9hY3Rpb25iYXIvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9hY3Rpb25iYXIvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUFkZGluZyB0aGUgQWN0aW9uIEJhcgotcGFnZS50YWdzPSJhY3Rpb25iYXIiCitwYWdlLnRhZ3M9YWN0aW9uYmFyCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL2RhdGEtc3RvcmFnZS9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvZGF0YS1zdG9yYWdlL2luZGV4LmpkCmluZGV4IDRjY2FkNzUuLmZjMGM4YjUgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvZGF0YS1zdG9yYWdlL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvZGF0YS1zdG9yYWdlL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1TYXZpbmcgRGF0YQotcGFnZS50YWdzPSJkYXRhIHN0b3JhZ2UiLCJmaWxlcyIsInNxbCIsImRhdGFiYXNlIiwicHJlZmVyZW5jZXMiCitwYWdlLnRhZ3M9ZGF0YSBzdG9yYWdlLGZpbGVzLHNxbCxkYXRhYmFzZSxwcmVmZXJlbmNlcwogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9mcmFnbWVudHMvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL2ZyYWdtZW50cy9pbmRleC5qZAppbmRleCA5ODdkZWNmLi5lNzhiNjk0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL2ZyYWdtZW50cy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL2ZyYWdtZW50cy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QnVpbGRpbmcgYSBEeW5hbWljIFVJIHdpdGggRnJhZ21lbnRzCi1wYWdlLnRhZ3M9ImZyYWdtZW50cyIsICJ1c2VyIGludGVyZmFjZSIsICJzdXBwb3J0IGxpYnJhcnkiCitwYWdlLnRhZ3M9ZnJhZ21lbnRzLHVzZXIgaW50ZXJmYWNlLHN1cHBvcnQgbGlicmFyeQogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9mcmFnbWVudHMvc3VwcG9ydC1saWIuamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL2ZyYWdtZW50cy9zdXBwb3J0LWxpYi5qZAppbmRleCBkOTQ5MjY3Li4xZDUzOGFmIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL2ZyYWdtZW50cy9zdXBwb3J0LWxpYi5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL2ZyYWdtZW50cy9zdXBwb3J0LWxpYi5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9VXNpbmcgdGhlIFN1cHBvcnQgTGlicmFyeQotcGFnZS50YWdzPSJzdXBwb3J0IGxpYnJhcnkiCitwYWdlLnRhZ3M9c3VwcG9ydCBsaWJyYXJ5CiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9pbnRlbnRzL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9pbnRlbnRzL2luZGV4LmpkCmluZGV4IDU5YmExMWYuLmFhMDIzMmEgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvaW50ZW50cy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL2ludGVudHMvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUludGVyYWN0aW5nIHdpdGggT3RoZXIgQXBwcwotcGFnZS50YWdzPSJpbnRlbnRzIiwiYWN0aXZpdHkiCitwYWdlLnRhZ3M9aW50ZW50cyxhY3Rpdml0eQogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9uZXR3b3JrLW9wcy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3MvbmV0d29yay1vcHMvaW5kZXguamQKaW5kZXggY2IzYTM5MC4uODlhYjUzOSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9uZXR3b3JrLW9wcy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL25ldHdvcmstb3BzL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1QZXJmb3JtaW5nIE5ldHdvcmsgT3BlcmF0aW9ucwotcGFnZS50YWdzPSJuZXR3b3JrIiwid2lyZWxlc3MiCitwYWdlLnRhZ3M9bmV0d29yayx3aXJlbGVzcwogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9zdXBwb3J0aW5nLWRldmljZXMvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL3N1cHBvcnRpbmctZGV2aWNlcy9pbmRleC5qZAppbmRleCAxZTNlYjQyLi42ZjMzOWY0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL3N1cHBvcnRpbmctZGV2aWNlcy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL3N1cHBvcnRpbmctZGV2aWNlcy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U3VwcG9ydGluZyBEaWZmZXJlbnQgRGV2aWNlcwotcGFnZS50YWdzPSJyZXNvdXJjZXMiLCJzY3JlZW5zIiwidmVyc2lvbnMiLCJsb2NhbGl6YXRpb24iCitwYWdlLnRhZ3M9cmVzb3VyY2VzLHNjcmVlbnMsdmVyc2lvbnMsbG9jYWxpemF0aW9uCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL3N1cHBvcnRpbmctZGV2aWNlcy9sYW5ndWFnZXMuamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvYmFzaWNzL3N1cHBvcnRpbmctZGV2aWNlcy9sYW5ndWFnZXMuamQKaW5kZXggMTMwODQ4ZS4uNWExNTA3YyAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2Jhc2ljcy9zdXBwb3J0aW5nLWRldmljZXMvbGFuZ3VhZ2VzLmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9iYXNpY3Mvc3VwcG9ydGluZy1kZXZpY2VzL2xhbmd1YWdlcy5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9U3VwcG9ydGluZyBEaWZmZXJlbnQgTGFuZ3VhZ2VzCiBwYXJlbnQudGl0bGU9U3VwcG9ydGluZyBEaWZmZXJlbnQgRGV2aWNlcwotcGFnZS50YWdzPSJsb2NhbGl6aW5nIiwibG9jYWxpemF0aW9uIiwicmVzb3VyY2VzIiwgImZvcm1hdHMiLCAibDEwbiIKK3BhZ2UudGFncz1sb2NhbGl6aW5nLGxvY2FsaXphdGlvbixyZXNvdXJjZXMsZm9ybWF0cyxsMTBuCiBwYXJlbnQubGluaz1pbmRleC5odG1sCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9iZWFtLWZpbGVzL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2JlYW0tZmlsZXMvaW5kZXguamQKaW5kZXggZTRiYWMyZS4uOTEwZmEzOCAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2JlYW0tZmlsZXMvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2JlYW0tZmlsZXMvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNoYXJpbmcgRmlsZXMgd2l0aCBORkMKLXBhZ2UudGFncz0iTmZjQWRhcHRlciIsIkFuZHJvaWQgQmVhbSIsInNoYXJlIiwiZmlsZSB0cmFuc2ZlciIKK3BhZ2UudGFncz1OZmNBZGFwdGVyLEFuZHJvaWQgQmVhbSxzaGFyZSxmaWxlIHRyYW5zZmVyCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvY2FtZXJhL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2NhbWVyYS9pbmRleC5qZAppbmRleCBkNjMwNWQ2Li41NTYwNjQ5IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvY2FtZXJhL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9jYW1lcmEvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPUNhcHR1cmluZyBQaG90b3MKLXBhZ2UudGFncz0iY2FtZXJhIiwidmlkZW8iLCJwaWN0dXJlIgorcGFnZS50YWdzPWNhbWVyYSx2aWRlbyxwaWN0dXJlCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvY2xvdWRzYXZlL2NvbmZsaWN0LXJlcy5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9jbG91ZHNhdmUvY29uZmxpY3QtcmVzLmpkCmluZGV4IDBmZjUwZTIuLjczZTc1ZGIgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9jbG91ZHNhdmUvY29uZmxpY3QtcmVzLmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9jbG91ZHNhdmUvY29uZmxpY3QtcmVzLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1SZXNvbHZpbmcgQ2xvdWQgU2F2ZSBDb25mbGljdHMKLXBhZ2UudGFncz0iY2xvdWQiCitwYWdlLnRhZ3M9Y2xvdWQKIAogcGFnZS5hcnRpY2xlPXRydWUKIEBqZDpib2R5CkBAIC01OTQsNCArNTk0LDQgQEAKIGxpbWl0ZWQuIERlcGVuZGluZyBvbiB5b3VyIGltcGxlbWVudGF0aW9uLCBpdCBtaWdodCBtYWtlIHNlbnNlIHRvIHN0b3JlIHRoZQogdGltZXN0YW1wIGZvciB3aGVuIGVhY2ggZW50cnkgaW4gdGhlIGRpY3Rpb25hcnkgd2FzIG1vZGlmaWVkLiBXaGVuIHlvdSBkZXRlY3QgdGhhdCBhCiBnaXZlbiBlbnRyeSBoYXMgbm90IGJlZW4gbW9kaWZpZWQgaW4gdGhlIGxhc3Qgc2V2ZXJhbCB3ZWVrcyBvciBtb250aHMsIGl0IGlzCi1wcm9iYWJseSBzYWZlIHRvIHRyYW5zZmVyIHRoZSBjb2lucyBpbnRvIGFub3RoZXIgZW50cnkgYW5kIGRlbGV0ZSB0aGUgb2xkIGVudHJ5LjwvcD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitwcm9iYWJseSBzYWZlIHRvIHRyYW5zZmVyIHRoZSBjb2lucyBpbnRvIGFub3RoZXIgZW50cnkgYW5kIGRlbGV0ZSB0aGUgb2xkIGVudHJ5LjwvcD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9jbG91ZHN5bmMvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvY2xvdWRzeW5jL2luZGV4LmpkCmluZGV4IDU1YjI3NWIuLmViN2RmM2QgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9jbG91ZHN5bmMvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2Nsb3Vkc3luYy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U3luY2luZyB0byB0aGUgQ2xvdWQKLXBhZ2UudGFncz0iY2xvdWQiLCJzeW5jIiwiYmFja3VwIgorcGFnZS50YWdzPWNsb3VkLHN5bmMsYmFja3VwCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvY29ubmVjdC1kZXZpY2VzLXdpcmVsZXNzbHkvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvY29ubmVjdC1kZXZpY2VzLXdpcmVsZXNzbHkvaW5kZXguamQKaW5kZXggYWFkYTFmZC4uMzIwNmQ3ZiAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2Nvbm5lY3QtZGV2aWNlcy13aXJlbGVzc2x5L2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9jb25uZWN0LWRldmljZXMtd2lyZWxlc3NseS9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9Q29ubmVjdGluZyBEZXZpY2VzIFdpcmVsZXNzbHkKLXBhZ2UudGFncz0id2lmaSIsIm5ldHdvcmsiLCJ3aXJlbGVzcyIKK3BhZ2UudGFncz13aWZpLG5ldHdvcmssd2lyZWxlc3MKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9jdXN0b20tdmlld3MvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvY3VzdG9tLXZpZXdzL2luZGV4LmpkCmluZGV4IDFjMDllNjYuLjg3Y2QwYjAgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9jdXN0b20tdmlld3MvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2N1c3RvbS12aWV3cy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9Q3JlYXRpbmcgQ3VzdG9tIFZpZXdzCi1wYWdlLnRhZ3M9IndpZGdldHMiLCJ1aSIsImxheW91dCIKK3BhZ2UudGFncz13aWRnZXRzLHVpLGxheW91dAogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2Rpc3BsYXlpbmctYml0bWFwcy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9kaXNwbGF5aW5nLWJpdG1hcHMvaW5kZXguamQKaW5kZXggZmJhOWZjNS4uNzAwMzU4NSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2Rpc3BsYXlpbmctYml0bWFwcy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvZGlzcGxheWluZy1iaXRtYXBzL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1EaXNwbGF5aW5nIEJpdG1hcHMgRWZmaWNpZW50bHkKLXBhZ2UudGFncz0iYml0bWFwcyIsImltYWdlcyIsImdyYXBoaWNzIgorcGFnZS50YWdzPWJpdG1hcHMsaW1hZ2VzLGdyYXBoaWNzCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvZWZmaWNpZW50LWRvd25sb2Fkcy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9lZmZpY2llbnQtZG93bmxvYWRzL2luZGV4LmpkCmluZGV4IDJhYjkzYWUuLmQ5ZDdlZjAgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9lZmZpY2llbnQtZG93bmxvYWRzL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9lZmZpY2llbnQtZG93bmxvYWRzL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1UcmFuc2ZlcnJpbmcgRGF0YSBXaXRob3V0IERyYWluaW5nIHRoZSBCYXR0ZXJ5Ci1wYWdlLnRhZ3M9ImJhdHRlcnkiLCJuZXR3b3JrIiwid2lyZWxlc3MiCitwYWdlLnRhZ3M9YmF0dGVyeSxuZXR3b3JrLHdpcmVsZXNzCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvZW50ZXJwcmlzZS9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9lbnRlcnByaXNlL2luZGV4LmpkCmluZGV4IGFjMWI1NjUuLjI5MjZmNzEgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9lbnRlcnByaXNlL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9lbnRlcnByaXNlL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1EZXZlbG9waW5nIGZvciBFbnRlcnByaXNlCi1wYWdlLnRhZ3M9InBvbGljeSIsInByaXZhY3kiCitwYWdlLnRhZ3M9cG9saWN5LHByaXZhY3kKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9nZXN0dXJlcy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9nZXN0dXJlcy9pbmRleC5qZAppbmRleCA5ZDIxYjA4Li4yNjBjZmZmIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvZ2VzdHVyZXMvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2dlc3R1cmVzL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Vc2luZyBUb3VjaCBHZXN0dXJlcwotcGFnZS50YWdzPSJpbnB1dCIsIm5hdmlnYXRpb24iLCJnZXN0dXJlZGV0ZWN0b3IiLCJzY3JvbGxlciIKK3BhZ2UudGFncz1pbnB1dCxuYXZpZ2F0aW9uLGdlc3R1cmVkZXRlY3RvcixzY3JvbGxlcgogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2dyYXBoaWNzL29wZW5nbC9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9ncmFwaGljcy9vcGVuZ2wvaW5kZXguamQKaW5kZXggY2YzM2Q4MC4uMzU0OWY5NSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2dyYXBoaWNzL29wZW5nbC9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvZ3JhcGhpY3Mvb3BlbmdsL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1EaXNwbGF5aW5nIEdyYXBoaWNzIHdpdGggT3BlbkdMIEVTCi1wYWdlPXRhZ3M9Im9wZW4gZ2wiLCJncmFwaGljcyIKK3BhZ2UudGFncz1vcGVuIGdsLGdyYXBoaWNzCiB0cmFpbmluZ25hdnRvcD10cnVlCiAKIEBqZDpib2R5CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvaWQtYXV0aC9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9pZC1hdXRoL2luZGV4LmpkCmluZGV4IDJiYWU5YzQuLmYxNWVlMjkgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9pZC1hdXRoL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9pZC1hdXRoL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1SZW1lbWJlcmluZyBVc2VycwotcGFnZS50YWdzPSJwcml2YWN5Iiwib2F1dGgiLCJhY2NvdW50cyIKK3BhZ2UudGFncz1wcml2YWN5LG9hdXRoLGFjY291bnRzCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wbGVtZW50aW5nLW5hdmlnYXRpb24vYW5jZXN0cmFsLmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL2FuY2VzdHJhbC5qZAppbmRleCAxMmQ1MDA1Li41NzI1MWMxIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wbGVtZW50aW5nLW5hdmlnYXRpb24vYW5jZXN0cmFsLmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9pbXBsZW1lbnRpbmctbmF2aWdhdGlvbi9hbmNlc3RyYWwuamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVByb3ZpZGluZyBVcCBOYXZpZ2F0aW9uCi1wYWdlLnRhZ3M9InVwIG5hdmlnYXRpb24iLCJOYXZVdGlscyIsIlRhc2tTdGFja0J1aWxkZXIiCitwYWdlLnRhZ3M9dXAgbmF2aWdhdGlvbixOYXZVdGlscyxUYXNrU3RhY2tCdWlsZGVyCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL2xhdGVyYWwuamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wbGVtZW50aW5nLW5hdmlnYXRpb24vbGF0ZXJhbC5qZAppbmRleCBiYjlkNzhjLi45YzgzNDc5IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wbGVtZW50aW5nLW5hdmlnYXRpb24vbGF0ZXJhbC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wbGVtZW50aW5nLW5hdmlnYXRpb24vbGF0ZXJhbC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9Q3JlYXRpbmcgU3dpcGUgVmlld3Mgd2l0aCBUYWJzCi1wYWdlLnRhZ3M9InZpZXdwYWdlciIsImhvcml6b250YWwiLCJwYWdpbmciLCJzd2lwZSB2aWV3IiwidGFicyIKK3BhZ2UudGFncz12aWV3cGFnZXIsaG9yaXpvbnRhbCxwYWdpbmcsc3dpcGUgdmlldyx0YWJzCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL25hdi1kcmF3ZXIuamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wbGVtZW50aW5nLW5hdmlnYXRpb24vbmF2LWRyYXdlci5qZAppbmRleCA5YTk0ODEwLi5iOWM0ODczIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wbGVtZW50aW5nLW5hdmlnYXRpb24vbmF2LWRyYXdlci5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wbGVtZW50aW5nLW5hdmlnYXRpb24vbmF2LWRyYXdlci5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9Q3JlYXRpbmcgYSBOYXZpZ2F0aW9uIERyYXdlcgotcGFnZS50YWdzPSJEcmF3ZXJMYXlvdXQiLCAibmF2aWdhdGlvbiIKK3BhZ2UudGFncz1EcmF3ZXJMYXlvdXQsbmF2aWdhdGlvbgogCiB0cmFpbmluZ25hdnRvcD10cnVlCiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9pbXBsZW1lbnRpbmctbmF2aWdhdGlvbi90ZW1wb3JhbC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9pbXBsZW1lbnRpbmctbmF2aWdhdGlvbi90ZW1wb3JhbC5qZAppbmRleCAzYWJhYjUzLi5lNzM2NjQ4IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wbGVtZW50aW5nLW5hdmlnYXRpb24vdGVtcG9yYWwuamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2ltcGxlbWVudGluZy1uYXZpZ2F0aW9uL3RlbXBvcmFsLmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Qcm92aWRpbmcgUHJvcGVyIEJhY2sgTmF2aWdhdGlvbgotcGFnZS50YWdzPSJiYWNrIG5hdmlnYXRpb24iLCJOYXZVdGlscyIsIlRhc2tTdGFja0J1aWxkZXIiCitwYWdlLnRhZ3M9YmFjayBuYXZpZ2F0aW9uLE5hdlV0aWxzLFRhc2tTdGFja0J1aWxkZXIKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wcm92aW5nLWxheW91dHMvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvaW1wcm92aW5nLWxheW91dHMvaW5kZXguamQKaW5kZXggOGNiMjI1OC4uYTJhYjdhMSAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL2ltcHJvdmluZy1sYXlvdXRzL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9pbXByb3ZpbmctbGF5b3V0cy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9SW1wcm92aW5nIExheW91dCBQZXJmb3JtYW5jZQotcGFnZS50YWdzPSJpbmNsdWRlIiwibWVyZ2UiLCJ2aWV3c3R1YiIsImxpc3R2aWV3IgorcGFnZS50YWdzPWluY2x1ZGUsbWVyZ2Usdmlld3N0dWIsbGlzdHZpZXcKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKQEAgLTYzLDQgKzYzLDQgQEAKICAgICA8ZGQ+SWYgeW91J3ZlIGJ1aWx0IGFuIGluc3RhbmNlIG9mIHtAbGluayBhbmRyb2lkLndpZGdldC5MaXN0Vmlld30gdGhhdCBjb250YWlucyBjb21wbGV4IG9yCiBkYXRhLWhlYXZ5IGNvbnRlbnQgaW4gZWFjaCBsaXN0IGl0ZW0sIHRoZSBzY3JvbGwgcGVyZm9ybWFuY2Ugb2YgdGhlIGxpc3QgbWlnaHQgc3VmZmVyLiBUaGlzCiBsZXNzb24gcHJvdmlkZXMgc29tZSB0aXBzIGFib3V0IGhvdyB5b3UgY2FuIG1ha2UgeW91ciBzY3JvbGxpbmcgcGVyZm9ybWFuY2UgbW9yZSBzbW9vdGguPC9kZD4KLTwvZGw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9kbD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9pbi1hcHAtYmlsbGluZy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9pbi1hcHAtYmlsbGluZy9pbmRleC5qZAppbmRleCA5NDcwOGI4Li40YTQ0NmYzIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvaW4tYXBwLWJpbGxpbmcvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2luLWFwcC1iaWxsaW5nL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1TZWxsaW5nIEluLWFwcCBQcm9kdWN0cwotcGFnZS50YWdzPSJiaWxsaW5nIgorcGFnZS50YWdzPWJpbGxpbmcKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9rZXlib2FyZC1pbnB1dC9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9rZXlib2FyZC1pbnB1dC9pbmRleC5qZAppbmRleCA3YWM3OWU2Li40Njc5NWM0IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcva2V5Ym9hcmQtaW5wdXQvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2tleWJvYXJkLWlucHV0L2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1IYW5kbGluZyBLZXlib2FyZCBJbnB1dAotcGFnZS50YWdzPSJlZGl0dGV4dCIsImFjY2Vzc2liaWxpdHkiCitwYWdlLnRhZ3M9ZWRpdHRleHQsYWNjZXNzaWJpbGl0eQogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpAQCAtNTIsNCArNTIsNCBAQAogICAgIDxkZD5MZWFybiBob3cgdG8gcmVzcG9uZCBkaXJlY3RseSB0byBrZXlib2FyZCBpbnB1dCBmb3IgdXNlciBhY3Rpb25zLgogICAgIDwvZGQ+CiAgCi08L2RsPiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L2RsPiAKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9sb2FkLWRhdGEtYmFja2dyb3VuZC9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9sb2FkLWRhdGEtYmFja2dyb3VuZC9pbmRleC5qZAppbmRleCAyOTEwOGU4Li5lOTkxMDAzIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvbG9hZC1kYXRhLWJhY2tncm91bmQvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL2xvYWQtZGF0YS1iYWNrZ3JvdW5kL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1Mb2FkaW5nIERhdGEgaW4gdGhlIEJhY2tncm91bmQKLXBhZ2UudGFncz0iY3Vyc29ybG9hZGVyIgorcGFnZS50YWdzPWN1cnNvcmxvYWRlcgogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL2xvY2F0aW9uL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL2xvY2F0aW9uL2luZGV4LmpkCmluZGV4IGUwM2VhYzYuLjI0OWM0MmQgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9sb2NhdGlvbi9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvbG9jYXRpb24vaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPU1ha2luZyBZb3VyIEFwcCBMb2NhdGlvbi1Bd2FyZQotcGFnZS50YWdzPSJsb2NhdGlvbiIsImdlb2ZlbmNlIiwgImdlb2ZlbmNpbmciLCAiYWN0aXZpdHkgcmVjb2duaXRpb24iLCAiYWN0aXZpdHkgZGV0ZWN0aW9uIiwgImdwcyIKK3BhZ2UudGFncz1sb2NhdGlvbixnZW9mZW5jZSxnZW9mZW5jaW5nLGFjdGl2aXR5IHJlY29nbml0aW9uLGFjdGl2aXR5IGRldGVjdGlvbixncHMKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9tYW5hZ2luZy1hdWRpby9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9tYW5hZ2luZy1hdWRpby9pbmRleC5qZAppbmRleCAzZTNiY2YwLi45MzkxNDQ5IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvbWFuYWdpbmctYXVkaW8vaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL21hbmFnaW5nLWF1ZGlvL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1NYW5hZ2luZyBBdWRpbyBQbGF5YmFjawotcGFnZS50YWdzPSJhdWRpbyIsIm1lZGlhIgorcGFnZS50YWdzPWF1ZGlvLG1lZGlhCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCkBAIC01OCw0ICs1OCw0IEBACiAgIDxkdD48Yj48YSBocmVmPSJhdWRpby1vdXRwdXQuaHRtbCI+RGVhbGluZyB3aXRoIEF1ZGlvIE91dHB1dCBIYXJkd2FyZTwvYT48L2I+PC9kdD4KICAgPGRkPkF1ZGlvIGNhbiBiZSBwbGF5ZWQgZnJvbSBhIG51bWJlciBvZiBzb3VyY2VzLiBMZWFybiBob3cgdG8gZmluZCBvdXQgd2hlcmUgdGhlIGF1ZGlvIGlzIGJlaW5nCiBwbGF5ZWQgYW5kIGhvdyB0byBoYW5kbGUgYSBoZWFkc2V0IGJlaW5nIGRpc2Nvbm5lY3RlZCBkdXJpbmcgcGxheWJhY2suPC9kZD4gCi0gPC9kbD4gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorIDwvZGw+IApkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL21vbml0b3JpbmctZGV2aWNlLXN0YXRlL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL21vbml0b3JpbmctZGV2aWNlLXN0YXRlL2luZGV4LmpkCmluZGV4IGMzZDcwMGEuLjk0OWMxZGEgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9tb25pdG9yaW5nLWRldmljZS1zdGF0ZS9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvbW9uaXRvcmluZy1kZXZpY2Utc3RhdGUvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPU9wdGltaXppbmcgQmF0dGVyeSBMaWZlCi1wYWdlLnRhZ3M9Im5ldHdvcmsiLCJpbnRlcm5ldCIKK3BhZ2UudGFncz1uZXR3b3JrLGludGVybmV0CiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCkBAIC01OSw0ICs1OSw0IEBACiB0aG9zZSB0aGF0IGFyZW4ndCBuZWNlc3NhcnkgZHVlIHRvIHRoZSBjdXJyZW50IGRldmljZSBzdGF0ZS4gTGVhcm4gdG8gaW1wcm92ZQogZWZmaWNpZW5jeSBieSB0b2dnbGluZyBhbmQgY2FzY2FkaW5nIHN0YXRlIGNoYW5nZSByZWNlaXZlcnMgYW5kIGRlbGF5IGFjdGlvbnMgdW50aWwgdGhlIGRldmljZSBpcyBpbgogYSBzcGVjaWZpYyBzdGF0ZS48L2RkPgotPC9kbD4gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9kbD4gCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvbXVsdGlwbGUtYXBrcy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9tdWx0aXBsZS1hcGtzL2luZGV4LmpkCmluZGV4IDU3NTRkYTkuLjQwYTI2YjkgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9tdWx0aXBsZS1hcGtzL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9tdWx0aXBsZS1hcGtzL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1NYWludGFpbmluZyBNdWx0aXBsZSBBUEtzCi1wYWdlLnRhZ3M9InN1cHBvcnQiCitwYWdlLnRhZ3M9c3VwcG9ydAogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL211bHRpcGxlLXRocmVhZHMvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvbXVsdGlwbGUtdGhyZWFkcy9pbmRleC5qZAppbmRleCBjYmQ0MmI0Li4xMzZmMGFmIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvbXVsdGlwbGUtdGhyZWFkcy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvbXVsdGlwbGUtdGhyZWFkcy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9U2VuZGluZyBPcGVyYXRpb25zIHRvIE11bHRpcGxlIFRocmVhZHMKLXBhZ2UudGFncz0idGhyZWFkcG9vbCIsInJ1bm5hYmxlIgorcGFnZS50YWdzPXRocmVhZHBvb2wscnVubmFibGUKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9tdWx0aXNjcmVlbi9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9tdWx0aXNjcmVlbi9pbmRleC5qZAppbmRleCAyZDM0YjI4Li40NWI2MTYxIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvbXVsdGlzY3JlZW4vaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL211bHRpc2NyZWVuL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1EZXNpZ25pbmcgZm9yIE11bHRpcGxlIFNjcmVlbnMKLXBhZ2UudGFncz0idGFibGV0IiwidHYiLCJmcmFnbWVudHMiLCJzdXBwb3J0IgorcGFnZS50YWdzPXRhYmxldCx0dixmcmFnbWVudHMsc3VwcG9ydAogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL25vdGlmeS11c2VyL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL25vdGlmeS11c2VyL2luZGV4LmpkCmluZGV4IDUxZjA1OGYuLmY3ZDBmODcgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9ub3RpZnktdXNlci9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvbm90aWZ5LXVzZXIvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPU5vdGlmeWluZyB0aGUgVXNlcgotcGFnZS50YWdzPSJub3RpZmljYXRpb25zIgorcGFnZS50YWdzPW5vdGlmaWNhdGlvbnMKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9wcmludGluZy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9wcmludGluZy9pbmRleC5qZAppbmRleCA4MTYxYjZiLi5lMzNlNWU4IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvcHJpbnRpbmcvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL3ByaW50aW5nL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1QcmludGluZyBDb250ZW50Ci1wYWdlLnRhZ3M9InByaW50IiwibmF2aWdhdGlvbiIsImdlc3R1cmVkZXRlY3RvciIsInNjcm9sbGVyIgorcGFnZS50YWdzPXByaW50LG5hdmlnYXRpb24sZ2VzdHVyZWRldGVjdG9yLHNjcm9sbGVyCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvcnVuLWJhY2tncm91bmQtc2VydmljZS9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9ydW4tYmFja2dyb3VuZC1zZXJ2aWNlL2luZGV4LmpkCmluZGV4IDMzNjBkZjUuLjIyZjNmYzggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9ydW4tYmFja2dyb3VuZC1zZXJ2aWNlL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9ydW4tYmFja2dyb3VuZC1zZXJ2aWNlL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1SdW5uaW5nIGluIGEgQmFja2dyb3VuZCBTZXJ2aWNlCi1wYWdlLnRhZ3M9ImludGVudHNlcnZpY2UiCitwYWdlLnRhZ3M9aW50ZW50c2VydmljZQogCiB0cmFpbmluZ25hdnRvcD10cnVlCiBzdGFydHBhZ2U9dHJ1ZQpkaWZmIC0tZ2l0IGEvZG9jcy9odG1sL3RyYWluaW5nL3NjaGVkdWxpbmcvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvc2NoZWR1bGluZy9pbmRleC5qZAppbmRleCA5ZmZiYzE2Li40ZDJkYjYwIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvc2NoZWR1bGluZy9pbmRleC5qZAorKysgYi9kb2NzL2h0bWwvdHJhaW5pbmcvc2NoZWR1bGluZy9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9TWFuYWdpbmcgRGV2aWNlIEF3YWtlIFN0YXRlCi1wYWdlLnRhZ3M9IiIKK3BhZ2UudGFncz0KIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9zZWFyY2gvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvc2VhcmNoL2luZGV4LmpkCmluZGV4IDQwNzAzNzIuLjYxMmU4ZTggMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9zZWFyY2gvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL3NlYXJjaC9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9QWRkaW5nIFNlYXJjaCBGdW5jdGlvbmFsaXR5Ci1wYWdlLnRhZ3M9InNlYXJjaHZpZXciLCJkYXRhYmFzZSIKK3BhZ2UudGFncz1zZWFyY2h2aWV3LGRhdGFiYXNlCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCkBAIC01MCw0ICs1MCw0IEBACiAgICAgPGR0PjxiPjxhIGhyZWY9ImJhY2t3YXJkLWNvbXBhdC5odG1sIj5SZW1haW5pbmcgQmFja3dhcmQgQ29tcGF0aWJsZTwvYT48L2I+PC9kdD4KIAogICAgIDxkZD5MZWFybiBob3cgdG8ga2VlcCBzZWFyY2ggZmVhdHVyZXMgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIG9sZGVyIGRldmljZXMgYnkgdXNpbmcuPC9kZD4KLSAgPC9kbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisgIDwvZGw+CmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdHJhaW5pbmcvc2VjdXJlLWZpbGUtc2hhcmluZy9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy9zZWN1cmUtZmlsZS1zaGFyaW5nL2luZGV4LmpkCmluZGV4IGFhMDA5ZmMuLjRhZGMxYzAgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9zZWN1cmUtZmlsZS1zaGFyaW5nL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90cmFpbmluZy9zZWN1cmUtZmlsZS1zaGFyaW5nL2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1TaGFyaW5nIEZpbGVzCi1wYWdlLnRhZ3M9IkZpbGVQcm92aWRlciIsInNoYXJlIiwiQ29udGVudFByb3ZpZGVyIgorcGFnZS50YWdzPUZpbGVQcm92aWRlcixzaGFyZSxDb250ZW50UHJvdmlkZXIKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9zaGFyaW5nL2luZGV4LmpkIGIvZG9jcy9odG1sL3RyYWluaW5nL3NoYXJpbmcvaW5kZXguamQKaW5kZXggMDZkNDJmYy4uNThhNjlmYyAxMDA2NDQKLS0tIGEvZG9jcy9odG1sL3RyYWluaW5nL3NoYXJpbmcvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL3NoYXJpbmcvaW5kZXguamQKQEAgLTEsNSArMSw1IEBACiBwYWdlLnRpdGxlPVNoYXJpbmcgU2ltcGxlIERhdGEKLXBhZ2UudGFncz0iaW50ZW50cyIsInNoYXJlIgorcGFnZS50YWdzPWludGVudHMsc2hhcmUKIAogdHJhaW5pbmduYXZ0b3A9dHJ1ZQogc3RhcnRwYWdlPXRydWUKZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy9zeXN0ZW0tdWkvaW5kZXguamQgYi9kb2NzL2h0bWwvdHJhaW5pbmcvc3lzdGVtLXVpL2luZGV4LmpkCmluZGV4IGM0NTMyN2YuLjU2ZmE1NGIgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90cmFpbmluZy9zeXN0ZW0tdWkvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL3N5c3RlbS11aS9pbmRleC5qZApAQCAtMSw1ICsxLDUgQEAKIHBhZ2UudGl0bGU9TWFuYWdpbmcgdGhlIFN5c3RlbSBVSQotcGFnZS50YWdzPSIiCitwYWdlLnRhZ3M9CiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCkBAIC0xMjAsNCArMTIwLDQgQEAKICAgICAgICAgc28gdGhhdCB5b3UgY2FuIGFkanVzdCB5b3VyIGFwcCdzIFVJIGFjY29yZGluZ2x5LgogICAgIDwvZGQ+CiAKLTwvZGw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9kbD4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC90cmFpbmluZy90di9pbmRleC5qZCBiL2RvY3MvaHRtbC90cmFpbmluZy90di9pbmRleC5qZAppbmRleCA1NGY3MDE2Li5hOTllMzc4IDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvdHJhaW5pbmcvdHYvaW5kZXguamQKKysrIGIvZG9jcy9odG1sL3RyYWluaW5nL3R2L2luZGV4LmpkCkBAIC0xLDUgKzEsNSBAQAogcGFnZS50aXRsZT1EZXNpZ25pbmcgZm9yIFRWCi1wYWdlLnRhZ3M9ImlucHV0Iiwic2NyZWVucyIKK3BhZ2UudGFncz1pbnB1dCxzY3JlZW5zCiAKIHRyYWluaW5nbmF2dG9wPXRydWUKIHN0YXJ0cGFnZT10cnVlCmRpZmYgLS1naXQgYS9kcm0vamF2YS9hbmRyb2lkL2RybS9Ecm1VdGlscy5qYXZhIGIvZHJtL2phdmEvYW5kcm9pZC9kcm0vRHJtVXRpbHMuamF2YQppbmRleCA0ZjdjYjIyLi4yYTg2OTk2IDEwMDY0NAotLS0gYS9kcm0vamF2YS9hbmRyb2lkL2RybS9Ecm1VdGlscy5qYXZhCisrKyBiL2RybS9qYXZhL2FuZHJvaWQvZHJtL0RybVV0aWxzLmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIGltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkuamF2YQppbmRleCA0MjliZTQ5Li5iNzE0ZmFiIDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5LmphdmEKQEAgLTMwMCwxNyArMzAwLDIyIEBACiAgICAgICAgIHB1YmxpYyBib29sZWFuIGluUHJlZmVyUXVhbGl0eU92ZXJTcGVlZDsKIAogICAgICAgICAvKioKLSAgICAgICAgICogVGhlIHJlc3VsdGluZyB3aWR0aCBvZiB0aGUgYml0bWFwLCBzZXQgaW5kZXBlbmRlbnQgb2YgdGhlIHN0YXRlIG9mCi0gICAgICAgICAqIGluSnVzdERlY29kZUJvdW5kcy4gSG93ZXZlciwgaWYgdGhlcmUgaXMgYW4gZXJyb3IgdHJ5aW5nIHRvIGRlY29kZSwKLSAgICAgICAgICogb3V0V2lkdGggd2lsbCBiZSBzZXQgdG8gLTEuCisgICAgICAgICAqIFRoZSByZXN1bHRpbmcgd2lkdGggb2YgdGhlIGJpdG1hcC4gSWYge0BsaW5rICNpbkp1c3REZWNvZGVCb3VuZHN9IGlzCisgICAgICAgICAqIHNldCB0byBmYWxzZSwgdGhpcyB3aWxsIGJlIHdpZHRoIG9mIHRoZSBvdXRwdXQgYml0bWFwIGFmdGVyIGFueQorICAgICAgICAgKiBzY2FsaW5nIGlzIGFwcGxpZWQuIElmIHRydWUsIGl0IHdpbGwgYmUgdGhlIHdpZHRoIG9mIHRoZSBpbnB1dCBpbWFnZQorICAgICAgICAgKiB3aXRob3V0IGFueSBhY2NvdW50aW5nIGZvciBzY2FsaW5nLgorICAgICAgICAgKgorICAgICAgICAgKiA8cD5vdXRXaWR0aCB3aWxsIGJlIHNldCB0byAtMSBpZiB0aGVyZSBpcyBhbiBlcnJvciB0cnlpbmcgdG8gZGVjb2RlLjwvcD4KICAgICAgICAgICovCi0KICAgICAgICAgcHVibGljIGludCBvdXRXaWR0aDsKIAogICAgICAgICAvKioKLSAgICAgICAgICogVGhlIHJlc3VsdGluZyBoZWlnaHQgb2YgdGhlIGJpdG1hcCwgc2V0IGluZGVwZW5kZW50IG9mIHRoZSBzdGF0ZSBvZgotICAgICAgICAgKiBpbkp1c3REZWNvZGVCb3VuZHMuIEhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIGVycm9yIHRyeWluZyB0byBkZWNvZGUsCi0gICAgICAgICAqIG91dEhlaWdodCB3aWxsIGJlIHNldCB0byAtMS4gCisgICAgICAgICAqIFRoZSByZXN1bHRpbmcgaGVpZ2h0IG9mIHRoZSBiaXRtYXAuIElmIHtAbGluayAjaW5KdXN0RGVjb2RlQm91bmRzfSBpcworICAgICAgICAgKiBzZXQgdG8gZmFsc2UsIHRoaXMgd2lsbCBiZSBoZWlnaHQgb2YgdGhlIG91dHB1dCBiaXRtYXAgYWZ0ZXIgYW55CisgICAgICAgICAqIHNjYWxpbmcgaXMgYXBwbGllZC4gSWYgdHJ1ZSwgaXQgd2lsbCBiZSB0aGUgaGVpZ2h0IG9mIHRoZSBpbnB1dCBpbWFnZQorICAgICAgICAgKiB3aXRob3V0IGFueSBhY2NvdW50aW5nIGZvciBzY2FsaW5nLgorICAgICAgICAgKgorICAgICAgICAgKiA8cD5vdXRIZWlnaHQgd2lsbCBiZSBzZXQgdG8gLTEgaWYgdGhlcmUgaXMgYW4gZXJyb3IgdHJ5aW5nIHRvIGRlY29kZS48L3A+CiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgaW50IG91dEhlaWdodDsKIApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NhbnZhcy5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NhbnZhcy5qYXZhCmluZGV4IGQ0NjIzOGYuLjEzZjQyOTkgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9DYW52YXMuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzLmphdmEKQEAgLTE0MDMsNyArMTQwMyw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigpOwogICAgICAgICB9CiAgICAgICAgIG5hdGl2ZV9kcmF3VGV4dChtTmF0aXZlQ2FudmFzLCB0ZXh0LCBpbmRleCwgY291bnQsIHgsIHksIHBhaW50Lm1CaWRpRmxhZ3MsCi0gICAgICAgICAgICAgICAgcGFpbnQubU5hdGl2ZVBhaW50KTsKKyAgICAgICAgICAgICAgICBwYWludC5tTmF0aXZlUGFpbnQsIHBhaW50Lm1OYXRpdmVUeXBlZmFjZSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNDE3LDcgKzE0MTcsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRyYXdUZXh0KFN0cmluZyB0ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBQYWludCBwYWludCkgewogICAgICAgICBuYXRpdmVfZHJhd1RleHQobU5hdGl2ZUNhbnZhcywgdGV4dCwgMCwgdGV4dC5sZW5ndGgoKSwgeCwgeSwgcGFpbnQubUJpZGlGbGFncywKLSAgICAgICAgICAgICAgICBwYWludC5tTmF0aXZlUGFpbnQpOworICAgICAgICAgICAgICAgIHBhaW50Lm1OYXRpdmVQYWludCwgcGFpbnQubU5hdGl2ZVR5cGVmYWNlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTE0MzYsNyArMTQzNiw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigpOwogICAgICAgICB9CiAgICAgICAgIG5hdGl2ZV9kcmF3VGV4dChtTmF0aXZlQ2FudmFzLCB0ZXh0LCBzdGFydCwgZW5kLCB4LCB5LCBwYWludC5tQmlkaUZsYWdzLAotICAgICAgICAgICAgICAgIHBhaW50Lm1OYXRpdmVQYWludCk7CisgICAgICAgICAgICAgICAgcGFpbnQubU5hdGl2ZVBhaW50LCBwYWludC5tTmF0aXZlVHlwZWZhY2UpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTQ1Niw3ICsxNDU2LDcgQEAKICAgICAgICAgaWYgKHRleHQgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdGV4dCBpbnN0YW5jZW9mIFNwYW5uZWRTdHJpbmcgfHwKICAgICAgICAgICAgIHRleHQgaW5zdGFuY2VvZiBTcGFubmFibGVTdHJpbmcpIHsKICAgICAgICAgICAgIG5hdGl2ZV9kcmF3VGV4dChtTmF0aXZlQ2FudmFzLCB0ZXh0LnRvU3RyaW5nKCksIHN0YXJ0LCBlbmQsIHgsIHksCi0gICAgICAgICAgICAgICAgICAgIHBhaW50Lm1CaWRpRmxhZ3MsIHBhaW50Lm1OYXRpdmVQYWludCk7CisgICAgICAgICAgICAgICAgICAgIHBhaW50Lm1CaWRpRmxhZ3MsIHBhaW50Lm1OYXRpdmVQYWludCwgcGFpbnQubU5hdGl2ZVR5cGVmYWNlKTsKICAgICAgICAgfSBlbHNlIGlmICh0ZXh0IGluc3RhbmNlb2YgR3JhcGhpY3NPcGVyYXRpb25zKSB7CiAgICAgICAgICAgICAoKEdyYXBoaWNzT3BlcmF0aW9ucykgdGV4dCkuZHJhd1RleHQodGhpcywgc3RhcnQsIGVuZCwgeCwgeSwKICAgICAgICAgICAgICAgICAgICAgcGFpbnQpOwpAQCAtMTQ2NCw3ICsxNDY0LDcgQEAKICAgICAgICAgICAgIGNoYXJbXSBidWYgPSBUZW1wb3JhcnlCdWZmZXIub2J0YWluKGVuZCAtIHN0YXJ0KTsKICAgICAgICAgICAgIFRleHRVdGlscy5nZXRDaGFycyh0ZXh0LCBzdGFydCwgZW5kLCBidWYsIDApOwogICAgICAgICAgICAgbmF0aXZlX2RyYXdUZXh0KG1OYXRpdmVDYW52YXMsIGJ1ZiwgMCwgZW5kIC0gc3RhcnQsIHgsIHksCi0gICAgICAgICAgICAgICAgICAgIHBhaW50Lm1CaWRpRmxhZ3MsIHBhaW50Lm1OYXRpdmVQYWludCk7CisgICAgICAgICAgICAgICAgICAgIHBhaW50Lm1CaWRpRmxhZ3MsIHBhaW50Lm1OYXRpdmVQYWludCwgcGFpbnQubU5hdGl2ZVR5cGVmYWNlKTsKICAgICAgICAgICAgIFRlbXBvcmFyeUJ1ZmZlci5yZWN5Y2xlKGJ1Zik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTA3LDcgKzE1MDcsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgbmF0aXZlX2RyYXdUZXh0UnVuKG1OYXRpdmVDYW52YXMsIHRleHQsIGluZGV4LCBjb3VudCwKLSAgICAgICAgICAgICAgICBjb250ZXh0SW5kZXgsIGNvbnRleHRDb3VudCwgeCwgeSwgZGlyLCBwYWludC5tTmF0aXZlUGFpbnQpOworICAgICAgICAgICAgICAgIGNvbnRleHRJbmRleCwgY29udGV4dENvdW50LCB4LCB5LCBkaXIsIHBhaW50Lm1OYXRpdmVQYWludCwgcGFpbnQubU5hdGl2ZVR5cGVmYWNlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTE1NDUsNyArMTU0NSw3IEBACiAgICAgICAgIGlmICh0ZXh0IGluc3RhbmNlb2YgU3RyaW5nIHx8IHRleHQgaW5zdGFuY2VvZiBTcGFubmVkU3RyaW5nIHx8CiAgICAgICAgICAgICAgICAgdGV4dCBpbnN0YW5jZW9mIFNwYW5uYWJsZVN0cmluZykgewogICAgICAgICAgICAgbmF0aXZlX2RyYXdUZXh0UnVuKG1OYXRpdmVDYW52YXMsIHRleHQudG9TdHJpbmcoKSwgc3RhcnQsIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dFN0YXJ0LCBjb250ZXh0RW5kLCB4LCB5LCBmbGFncywgcGFpbnQubU5hdGl2ZVBhaW50KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dFN0YXJ0LCBjb250ZXh0RW5kLCB4LCB5LCBmbGFncywgcGFpbnQubU5hdGl2ZVBhaW50LCBwYWludC5tTmF0aXZlVHlwZWZhY2UpOwogICAgICAgICB9IGVsc2UgaWYgKHRleHQgaW5zdGFuY2VvZiBHcmFwaGljc09wZXJhdGlvbnMpIHsKICAgICAgICAgICAgICgoR3JhcGhpY3NPcGVyYXRpb25zKSB0ZXh0KS5kcmF3VGV4dFJ1bih0aGlzLCBzdGFydCwgZW5kLAogICAgICAgICAgICAgICAgICAgICBjb250ZXh0U3RhcnQsIGNvbnRleHRFbmQsIHgsIHksIGZsYWdzLCBwYWludCk7CkBAIC0xNTU1LDcgKzE1NTUsNyBAQAogICAgICAgICAgICAgY2hhcltdIGJ1ZiA9IFRlbXBvcmFyeUJ1ZmZlci5vYnRhaW4oY29udGV4dExlbik7CiAgICAgICAgICAgICBUZXh0VXRpbHMuZ2V0Q2hhcnModGV4dCwgY29udGV4dFN0YXJ0LCBjb250ZXh0RW5kLCBidWYsIDApOwogICAgICAgICAgICAgbmF0aXZlX2RyYXdUZXh0UnVuKG1OYXRpdmVDYW52YXMsIGJ1Ziwgc3RhcnQgLSBjb250ZXh0U3RhcnQsIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgMCwgY29udGV4dExlbiwgeCwgeSwgZmxhZ3MsIHBhaW50Lm1OYXRpdmVQYWludCk7CisgICAgICAgICAgICAgICAgICAgIDAsIGNvbnRleHRMZW4sIHgsIHksIGZsYWdzLCBwYWludC5tTmF0aXZlUGFpbnQsIHBhaW50Lm1OYXRpdmVUeXBlZmFjZSk7CiAgICAgICAgICAgICBUZW1wb3JhcnlCdWZmZXIucmVjeWNsZShidWYpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTgxNCwxOCArMTgxNCwxOCBAQAogICAgIAogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZV9kcmF3VGV4dChpbnQgbmF0aXZlQ2FudmFzLCBjaGFyW10gdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LCBpbnQgY291bnQsIGZsb2F0IHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHksIGludCBmbGFncywgaW50IHBhaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeSwgaW50IGZsYWdzLCBpbnQgcGFpbnQsIGludCB0eXBlZmFjZSk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlX2RyYXdUZXh0KGludCBuYXRpdmVDYW52YXMsIFN0cmluZyB0ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsIGludCBlbmQsIGZsb2F0IHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHksIGludCBmbGFncywgaW50IHBhaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeSwgaW50IGZsYWdzLCBpbnQgcGFpbnQsIGludCB0eXBlZmFjZSk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVfZHJhd1RleHRSdW4oaW50IG5hdGl2ZUNhbnZhcywgU3RyaW5nIHRleHQsCiAgICAgICAgICAgICBpbnQgc3RhcnQsIGludCBlbmQsIGludCBjb250ZXh0U3RhcnQsIGludCBjb250ZXh0RW5kLAotICAgICAgICAgICAgZmxvYXQgeCwgZmxvYXQgeSwgaW50IGZsYWdzLCBpbnQgcGFpbnQpOworICAgICAgICAgICAgZmxvYXQgeCwgZmxvYXQgeSwgaW50IGZsYWdzLCBpbnQgcGFpbnQsIGludCB0eXBlZmFjZSk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVfZHJhd1RleHRSdW4oaW50IG5hdGl2ZUNhbnZhcywgY2hhcltdIHRleHQsCiAgICAgICAgICAgICBpbnQgc3RhcnQsIGludCBjb3VudCwgaW50IGNvbnRleHRTdGFydCwgaW50IGNvbnRleHRDb3VudCwKLSAgICAgICAgICAgIGZsb2F0IHgsIGZsb2F0IHksIGludCBmbGFncywgaW50IHBhaW50KTsKKyAgICAgICAgICAgIGZsb2F0IHgsIGZsb2F0IHksIGludCBmbGFncywgaW50IHBhaW50LCBpbnQgdHlwZWZhY2UpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlX2RyYXdQb3NUZXh0KGludCBuYXRpdmVDYW52YXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJbXSB0ZXh0LCBpbnQgaW5kZXgsCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JGaWx0ZXIuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlci5qYXZhCmluZGV4IGU1Y2Y4MzAuLjhlMGFmNzcgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlci5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlci5qYXZhCkBAIC0yMSwyMiArMjEsMzAgQEAKIAogcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwogCi0KKy8qKgorICogQSBjb2xvciBmaWx0ZXIgY2FuIGJlIHVzZWQgd2l0aCBhIHtAbGluayBQYWludH0gdG8gbW9kaWZ5IHRoZSBjb2xvciBvZgorICogZWFjaCBwaXhlbCBkcmF3biB3aXRoIHRoYXQgcGFpbnQuIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgdGhhdCBzaG91bGQKKyAqIG5ldmVyIGJlIHVzZWQgZGlyZWN0bHkuCisgKi8KIHB1YmxpYyBjbGFzcyBDb2xvckZpbHRlciB7CisgICAgLy8gSG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIG5hdGl2ZSBTa0NvbG9yRmlsdGVyIGluc3RhbmNlCiAgICAgaW50IG5hdGl2ZV9pbnN0YW5jZTsKIAogICAgIC8qKgorICAgICAqIEhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBuYXRpdmUgU2tpYUNvbG9yRmlsdGVyIGluc3RhbmNlLCBmcm9tIGxpYmh3dWkuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBpbnQgbmF0aXZlQ29sb3JGaWx0ZXI7CiAKKyAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3VwZXIuZmluYWxpemUoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGZpbmFsaXplcihuYXRpdmVfaW5zdGFuY2UsIG5hdGl2ZUNvbG9yRmlsdGVyKTsKKyAgICAgICAgICAgIGRlc3Ryb3lGaWx0ZXIobmF0aXZlX2luc3RhbmNlLCBuYXRpdmVDb2xvckZpbHRlcik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBmaW5hbGl6ZXIoaW50IG5hdGl2ZV9pbnN0YW5jZSwgaW50IG5hdGl2ZUNvbG9yRmlsdGVyKTsKKyAgICBzdGF0aWMgbmF0aXZlIHZvaWQgZGVzdHJveUZpbHRlcihpbnQgbmF0aXZlX2luc3RhbmNlLCBpbnQgbmF0aXZlQ29sb3JGaWx0ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yTWF0cml4LmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JNYXRyaXguamF2YQppbmRleCBlMzU5NmM4Li4xMjQyZWI1IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JNYXRyaXguamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JNYXRyaXguamF2YQpAQCAtMTgsMjMgKzE4LDI5IEBACiAKIGltcG9ydCBhbmRyb2lkLnV0aWwuRmxvYXRNYXRoOwogCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKwogLyoqCiAgKiAgNHg1IG1hdHJpeCBmb3IgdHJhbnNmb3JtaW5nIHRoZSBjb2xvcithbHBoYSBjb21wb25lbnRzIG9mIGEgQml0bWFwLgogICogIFRoZSBtYXRyaXggaXMgc3RvcmVkIGluIGEgc2luZ2xlIGFycmF5LCBhbmQgaXRzIHRyZWF0ZWQgYXMgZm9sbG93czoKKyAqIDxwcmU+CiAgKiAgWyBhLCBiLCBjLCBkLCBlLAogICogICAgZiwgZywgaCwgaSwgaiwKICAqICAgIGssIGwsIG0sIG4sIG8sCiAgKiAgICBwLCBxLCByLCBzLCB0IF0KKyAqIDwvcHJlPgogICoKLSAqIFdoZW4gYXBwbGllZCB0byBhIGNvbG9yIFtyLCBnLCBiLCBhXSwgdGhlIHJlc3VsdGluZyBjb2xvciBpcyBjb21wdXRlZCBhcwotICogKGFmdGVyIGNsYW1waW5nKQorICogV2hlbiBhcHBsaWVkIHRvIGEgY29sb3IgPGNvZGU+W3IsIGcsIGIsIGFdPC9jb2RlPiwgdGhlIHJlc3VsdGluZyBjb2xvcgorICogaXMgY29tcHV0ZWQgYXMgKGFmdGVyIGNsYW1waW5nKToKKyAqIDxwcmU+CiAgKiAgIFInID0gYSpSICsgYipHICsgYypCICsgZCpBICsgZTsKICAqICAgRycgPSBmKlIgKyBnKkcgKyBoKkIgKyBpKkEgKyBqOwogICogICBCJyA9IGsqUiArIGwqRyArIG0qQiArIG4qQSArIG87CiAgKiAgIEEnID0gcCpSICsgcSpHICsgcipCICsgcypBICsgdDsKKyAqIDwvcHJlPgogICovCitAU3VwcHJlc3NXYXJuaW5ncyh7ICJNaXNtYXRjaGVkUmVhZEFuZFdyaXRlT2ZBcnJheSIsICJQb2ludGxlc3NBcml0aG1ldGljRXhwcmVzc2lvbiIgfSkKIHB1YmxpYyBjbGFzcyBDb2xvck1hdHJpeCB7Ci0KICAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbUFycmF5ID0gbmV3IGZsb2F0WzIwXTsKIAogICAgIC8qKgpAQCAtNjYsMTcgKzcyLDE2IEBACiAgICAgCiAgICAgLyoqCiAgICAgICogU2V0IHRoaXMgY29sb3JtYXRyaXggdG8gaWRlbnRpdHk6CisgICAgICogPHByZT4KICAgICAgKiBbIDEgMCAwIDAgMCAgIC0gcmVkIHZlY3RvcgogICAgICAqICAgMCAxIDAgMCAwICAgLSBncmVlbiB2ZWN0b3IKICAgICAgKiAgIDAgMCAxIDAgMCAgIC0gYmx1ZSB2ZWN0b3IKICAgICAgKiAgIDAgMCAwIDEgMCBdIC0gYWxwaGEgdmVjdG9yCisgICAgICogPC9wcmU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVzZXQoKSB7CiAgICAgICAgIGZpbmFsIGZsb2F0W10gYSA9IG1BcnJheTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkgPSAxOTsgaSA+IDA7IC0taSkgewotICAgICAgICAgICAgYVtpXSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgQXJyYXlzLmZpbGwoYSwgMCk7CiAgICAgICAgIGFbMF0gPSBhWzZdID0gYVsxMl0gPSBhWzE4XSA9IDE7CiAgICAgfQogICAgIApAQCAtMTEyLDkgKzExNyw5IEBACiAgICAgCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSByb3RhdGlvbiBvbiBhIGNvbG9yIGF4aXMgYnkgdGhlIHNwZWNpZmllZCB2YWx1ZXMuCi0gICAgICogYXhpcz0wIGNvcnJlc3BvbmQgdG8gYSByb3RhdGlvbiBhcm91bmQgdGhlIFJFRCBjb2xvcgotICAgICAqIGF4aXM9MSBjb3JyZXNwb25kIHRvIGEgcm90YXRpb24gYXJvdW5kIHRoZSBHUkVFTiBjb2xvcgotICAgICAqIGF4aXM9MiBjb3JyZXNwb25kIHRvIGEgcm90YXRpb24gYXJvdW5kIHRoZSBCTFVFIGNvbG9yCisgICAgICogPGNvZGU+YXhpcz0wPC9jb2RlPiBjb3JyZXNwb25kIHRvIGEgcm90YXRpb24gYXJvdW5kIHRoZSBSRUQgY29sb3IKKyAgICAgKiA8Y29kZT5heGlzPTE8L2NvZGU+IGNvcnJlc3BvbmQgdG8gYSByb3RhdGlvbiBhcm91bmQgdGhlIEdSRUVOIGNvbG9yCisgICAgICogPGNvZGU+YXhpcz0yPC9jb2RlPiBjb3JyZXNwb25kIHRvIGEgcm90YXRpb24gYXJvdW5kIHRoZSBCTFVFIGNvbG9yCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Um90YXRlKGludCBheGlzLCBmbG9hdCBkZWdyZWVzKSB7CiAgICAgICAgIHJlc2V0KCk7CkBAIC0xNDQsNyArMTQ5LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhpcyBjb2xvcm1hdHJpeCB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgdHdvIHNwZWNpZmllZAogICAgICAqIGNvbG9ybWF0cmljZXMsIHN1Y2ggdGhhdCB0aGUgcmVzdWx0aW5nIGNvbG9ybWF0cml4IGhhcyB0aGUgc2FtZSBlZmZlY3QKQEAgLTE1MiwxMiArMTU3LDEwIEBACiAgICAgICogbWF0QiB0byBiZSB0aGUgc2FtZSBjb2xvcm1hdHJpeCBhcyB0aGlzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbmNhdChDb2xvck1hdHJpeCBtYXRBLCBDb2xvck1hdHJpeCBtYXRCKSB7Ci0gICAgICAgIGZsb2F0W10gdG1wID0gbnVsbDsKLSAgICAgICAgCisgICAgICAgIGZsb2F0W10gdG1wOwogICAgICAgICBpZiAobWF0QSA9PSB0aGlzIHx8IG1hdEIgPT0gdGhpcykgewogICAgICAgICAgICAgdG1wID0gbmV3IGZsb2F0WzIwXTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRtcCA9IG1BcnJheTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE3OCw3ICsxODEsNyBAQAogICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSh0bXAsIDAsIG1BcnJheSwgMCwgMjApOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uY2F0IHRoaXMgY29sb3JtYXRyaXggd2l0aCB0aGUgc3BlY2lmaWVkIHByZW1hdHJpeC4gVGhpcyBpcyBsb2dpY2FsbHkKICAgICAgKiB0aGUgc2FtZSBhcyBjYWxsaW5nIHNldENvbmNhdCh0aGlzLCBwcmVtYXRyaXgpOwpAQCAtMTg2LDcgKzE4OSw3IEBACiAgICAgcHVibGljIHZvaWQgcHJlQ29uY2F0KENvbG9yTWF0cml4IHByZW1hdHJpeCkgewogICAgICAgICBzZXRDb25jYXQodGhpcywgcHJlbWF0cml4KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25jYXQgdGhpcyBjb2xvcm1hdHJpeCB3aXRoIHRoZSBzcGVjaWZpZWQgcG9zdG1hdHJpeC4gVGhpcyBpcyBsb2dpY2FsbHkKICAgICAgKiB0aGUgc2FtZSBhcyBjYWxsaW5nIHNldENvbmNhdChwb3N0bWF0cml4LCB0aGlzKTsKQEAgLTE5NCw3ICsxOTcsNyBAQAogICAgIHB1YmxpYyB2b2lkIHBvc3RDb25jYXQoQ29sb3JNYXRyaXggcG9zdG1hdHJpeCkgewogICAgICAgICBzZXRDb25jYXQocG9zdG1hdHJpeCwgdGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAgCiAgICAgLyoqCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JNYXRyaXhDb2xvckZpbHRlci5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yTWF0cml4Q29sb3JGaWx0ZXIuamF2YQppbmRleCA0ZjMyMzQyLi44ZGUzMmVjIDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JNYXRyaXhDb2xvckZpbHRlci5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Db2xvck1hdHJpeENvbG9yRmlsdGVyLmphdmEKQEAgLTE2LDI0ICsxNiwzMSBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7CiAKKy8qKgorICogQSBjb2xvciBmaWx0ZXIgdGhhdCB0cmFuc2Zvcm1zIGNvbG9ycyB0aHJvdWdoIGEgNHg1IGNvbG9yIG1hdHJpeC4gVGhpcyBmaWx0ZXIKKyAqIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgc2F0dXJhdGlvbiBvZiBwaXhlbHMsIGNvbnZlcnQgZnJvbSBZVVYgdG8gUkdCLCBldGMuCisgKgorICogQHNlZSBDb2xvck1hdHJpeAorICovCiBwdWJsaWMgY2xhc3MgQ29sb3JNYXRyaXhDb2xvckZpbHRlciBleHRlbmRzIENvbG9yRmlsdGVyIHsKKyAgICBwcml2YXRlIGZpbmFsIENvbG9yTWF0cml4IG1NYXRyaXggPSBuZXcgQ29sb3JNYXRyaXgoKTsKKwogICAgIC8qKgotICAgICAqIENyZWF0ZSBhIGNvbG9yZmlsdGVyIHRoYXQgdHJhbnNmb3JtcyBjb2xvcnMgdGhyb3VnaCBhIDR4NSBjb2xvciBtYXRyaXguCisgICAgICogQ3JlYXRlIGEgY29sb3IgZmlsdGVyIHRoYXQgdHJhbnNmb3JtcyBjb2xvcnMgdGhyb3VnaCBhIDR4NSBjb2xvciBtYXRyaXguCiAgICAgICoKICAgICAgKiBAcGFyYW0gbWF0cml4IDR4NSBtYXRyaXggdXNlZCB0byB0cmFuc2Zvcm0gY29sb3JzLiBJdCBpcyBjb3BpZWQgaW50bwogICAgICAqICAgICAgICAgICAgICAgdGhlIGZpbHRlciwgc28gY2hhbmdlcyBtYWRlIHRvIHRoZSBtYXRyaXggYWZ0ZXIgdGhlIGZpbHRlcgogICAgICAqICAgICAgICAgICAgICAgaXMgY29uc3RydWN0ZWQgd2lsbCBub3QgYmUgcmVmbGVjdGVkIGluIHRoZSBmaWx0ZXIuCiAgICAgICovCiAgICAgcHVibGljIENvbG9yTWF0cml4Q29sb3JGaWx0ZXIoQ29sb3JNYXRyaXggbWF0cml4KSB7Ci0gICAgICAgIGZpbmFsIGZsb2F0W10gY29sb3JNYXRyaXggPSBtYXRyaXguZ2V0QXJyYXkoKTsKLSAgICAgICAgbmF0aXZlX2luc3RhbmNlID0gbmF0aXZlQ29sb3JNYXRyaXhGaWx0ZXIoY29sb3JNYXRyaXgpOwotICAgICAgICBuYXRpdmVDb2xvckZpbHRlciA9IG5Db2xvck1hdHJpeEZpbHRlcihuYXRpdmVfaW5zdGFuY2UsIGNvbG9yTWF0cml4KTsKKyAgICAgICAgbU1hdHJpeC5zZXQobWF0cml4KTsKKyAgICAgICAgdXBkYXRlKCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgKiBDcmVhdGUgYSBjb2xvcmZpbHRlciB0aGF0IHRyYW5zZm9ybXMgY29sb3JzIHRocm91Z2ggYSA0eDUgY29sb3IgbWF0cml4LgorICAgICAqIENyZWF0ZSBhIGNvbG9yIGZpbHRlciB0aGF0IHRyYW5zZm9ybXMgY29sb3JzIHRocm91Z2ggYSA0eDUgY29sb3IgbWF0cml4LgogICAgICAqCi0gICAgICogQHBhcmFtIGFycmF5IGFycmF5IG9mIGZsb2F0cyB1c2VkIHRvIHRyYW5zZm9ybSBjb2xvcnMsIHRyZWF0ZWQgYXMgYSA0eDUKKyAgICAgKiBAcGFyYW0gYXJyYXkgQXJyYXkgb2YgZmxvYXRzIHVzZWQgdG8gdHJhbnNmb3JtIGNvbG9ycywgdHJlYXRlZCBhcyBhIDR4NQogICAgICAqICAgICAgICAgICAgICBtYXRyaXguIFRoZSBmaXJzdCAyMCBlbnRyaWVzIG9mIHRoZSBhcnJheSBhcmUgY29waWVkIGludG8KICAgICAgKiAgICAgICAgICAgICAgdGhlIGZpbHRlci4gU2VlIENvbG9yTWF0cml4LgogICAgICAqLwpAQCAtNDEsOCArNDgsNzUgQEAKICAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA8IDIwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7CiAgICAgICAgIH0KLSAgICAgICAgbmF0aXZlX2luc3RhbmNlID0gbmF0aXZlQ29sb3JNYXRyaXhGaWx0ZXIoYXJyYXkpOwotICAgICAgICBuYXRpdmVDb2xvckZpbHRlciA9IG5Db2xvck1hdHJpeEZpbHRlcihuYXRpdmVfaW5zdGFuY2UsIGFycmF5KTsKKyAgICAgICAgbU1hdHJpeC5zZXQoYXJyYXkpOworICAgICAgICB1cGRhdGUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgQ29sb3JNYXRyaXh9IHVzZWQgYnkgdGhpcyBmaWx0ZXIuIFRoZSByZXR1cm5lZAorICAgICAqIHZhbHVlIGlzIG5ldmVyIG51bGwuIE1vZGlmeWluZyB0aGUgcmV0dXJuZWQgbWF0cml4IGRvZXMgbm90IGhhdmUKKyAgICAgKiBhbnkgZWZmZWN0IHVudGlsIHlvdSBjYWxsIHtAbGluayAjc2V0Q29sb3JNYXRyaXgoQ29sb3JNYXRyaXgpfS4KKyAgICAgKgorICAgICAqIEBzZWUgI3NldENvbG9yTWF0cml4KENvbG9yTWF0cml4KQorICAgICAqLworICAgIHB1YmxpYyBDb2xvck1hdHJpeCBnZXRDb2xvck1hdHJpeCgpIHsKKyAgICAgICAgcmV0dXJuIG1NYXRyaXg7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIHRoZSBjb2xvciBtYXRyaXggdXNlZCBieSB0aGlzIGZpbHRlci4gSWYgdGhlIHNwZWNpZmllZAorICAgICAqIGNvbG9yIG1hdHJpeCBpcyBudWxsLCB0aGlzIGZpbHRlcidzIGNvbG9yIG1hdHJpeCB3aWxsIGJlIHJlc2V0IHRvCisgICAgICogdGhlIGlkZW50aXR5IG1hdHJpeC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtYXRyaXggQSB7QGxpbmsgQ29sb3JNYXRyaXh9IG9yIG51bGwKKyAgICAgKgorICAgICAqIEBzZWUgI2dldENvbG9yTWF0cml4KCkKKyAgICAgKiBAc2VlIGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JNYXRyaXgjcmVzZXQoKQorICAgICAqIEBzZWUgI3NldENvbG9yTWF0cml4KGZsb2F0W10pCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q29sb3JNYXRyaXgoQ29sb3JNYXRyaXggbWF0cml4KSB7CisgICAgICAgIGlmIChtYXRyaXggPT0gbnVsbCkgeworICAgICAgICAgICAgbU1hdHJpeC5yZXNldCgpOworICAgICAgICB9IGVsc2UgaWYgKG1hdHJpeCAhPSBtTWF0cml4KSB7CisgICAgICAgICAgICBtTWF0cml4LnNldChtYXRyaXgpOworICAgICAgICB9CisgICAgICAgIHVwZGF0ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB0aGUgY29sb3IgbWF0cml4IHVzZWQgYnkgdGhpcyBmaWx0ZXIuIElmIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBjb2xvciBtYXRyaXggaXMgbnVsbCwgdGhpcyBmaWx0ZXIncyBjb2xvciBtYXRyaXggd2lsbCBiZSByZXNldCB0bworICAgICAqIHRoZSBpZGVudGl0eSBtYXRyaXguCisgICAgICoKKyAgICAgKiBAcGFyYW0gYXJyYXkgQXJyYXkgb2YgZmxvYXRzIHVzZWQgdG8gdHJhbnNmb3JtIGNvbG9ycywgdHJlYXRlZCBhcyBhIDR4NQorICAgICAqICAgICAgICAgICAgICBtYXRyaXguIFRoZSBmaXJzdCAyMCBlbnRyaWVzIG9mIHRoZSBhcnJheSBhcmUgY29waWVkIGludG8KKyAgICAgKiAgICAgICAgICAgICAgdGhlIGZpbHRlci4gU2VlIHtAbGluayBDb2xvck1hdHJpeH0uCisgICAgICoKKyAgICAgKiBAc2VlICNnZXRDb2xvck1hdHJpeCgpCisgICAgICogQHNlZSBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yTWF0cml4I3Jlc2V0KCkKKyAgICAgKiBAc2VlICNzZXRDb2xvck1hdHJpeChDb2xvck1hdHJpeCkKKyAgICAgKgorICAgICAqIEB0aHJvd3MgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIHRoZSBzcGVjaWZpZWQgYXJyYXkncworICAgICAqICAgICAgICAgbGVuZ3RoIGlzIDwgMjAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb2xvck1hdHJpeChmbG9hdFtdIGFycmF5KSB7CisgICAgICAgIGlmIChhcnJheSA9PSBudWxsKSB7CisgICAgICAgICAgICBtTWF0cml4LnJlc2V0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoYXJyYXkubGVuZ3RoIDwgMjApIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1NYXRyaXguc2V0KGFycmF5KTsKKyAgICAgICAgfQorICAgICAgICB1cGRhdGUoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlKCkgeworICAgICAgICBmaW5hbCBmbG9hdFtdIGNvbG9yTWF0cml4ID0gbU1hdHJpeC5nZXRBcnJheSgpOworICAgICAgICBkZXN0cm95RmlsdGVyKG5hdGl2ZV9pbnN0YW5jZSwgbmF0aXZlQ29sb3JGaWx0ZXIpOworICAgICAgICBuYXRpdmVfaW5zdGFuY2UgPSBuYXRpdmVDb2xvck1hdHJpeEZpbHRlcihjb2xvck1hdHJpeCk7CisgICAgICAgIG5hdGl2ZUNvbG9yRmlsdGVyID0gbkNvbG9yTWF0cml4RmlsdGVyKG5hdGl2ZV9pbnN0YW5jZSwgY29sb3JNYXRyaXgpOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBpbnQgbmF0aXZlQ29sb3JNYXRyaXhGaWx0ZXIoZmxvYXRbXSBhcnJheSk7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvSW1hZ2VGb3JtYXQuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9JbWFnZUZvcm1hdC5qYXZhCmluZGV4IDFiY2ZjMTguLmUwOGVkNTAgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9JbWFnZUZvcm1hdC5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9JbWFnZUZvcm1hdC5qYXZhCkBAIC0xODcsNiArMTg3LDEwIEBACiAgICAgICogPT0ge0BsaW5rIGFuZHJvaWQubWVkaWEuSW1hZ2UuUGxhbmUjZ2V0UGl4ZWxTdHJpZGUoKSB2UGxhbmUuZ2V0UGl4ZWxTdHJpZGUoKX07CiAgICAgICogKS48L3A+CiAgICAgICoKKyAgICAgKiA8cD5Gb3IgZXhhbXBsZSwgdGhlIHtAbGluayBhbmRyb2lkLm1lZGlhLkltYWdlfSBvYmplY3QgY2FuIHByb3ZpZGUgZGF0YQorICAgICAqIGluIHRoaXMgZm9ybWF0IGZyb20gYSB7QGxpbmsgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZX0KKyAgICAgKiB0aHJvdWdoIGEge0BsaW5rIGFuZHJvaWQubWVkaWEuSW1hZ2VSZWFkZXJ9IG9iamVjdC48L3A+CisgICAgICoKICAgICAgKiBAc2VlIGFuZHJvaWQubWVkaWEuSW1hZ2UKICAgICAgKiBAc2VlIGFuZHJvaWQubWVkaWEuSW1hZ2VSZWFkZXIKICAgICAgKiBAc2VlIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2UKQEAgLTIwMyw4ICsyMDcsNiBAQAogICAgICAqIG5lZWRlZCBpbmZvcm1hdGlvbiB0byBpbnRlcnByZXQgYSByYXcgc2Vuc29yIGltYWdlIG11c3QgYmUgcXVlcmllZCBmcm9tCiAgICAgICogdGhlIHtAbGluayBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlfSB3aGljaCBwcm9kdWNlZCB0aGUKICAgICAgKiBpbWFnZS48L3A+Ci0gICAgICoKLSAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJBV19TRU5TT1IgPSAweDIwOwogCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvTGFyZ2VCaXRtYXAuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9MYXJnZUJpdG1hcC5qYXZhCmluZGV4IDY2NTZiMTcuLmM3MGM3MDkgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9MYXJnZUJpdG1hcC5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9MYXJnZUJpdG1hcC5qYXZhCkBAIC0xNiwxNiArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7CiAKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOwotCi1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uaW8uQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uSW50QnVmZmVyOwotaW1wb3J0IGphdmEubmlvLlNob3J0QnVmZmVyOwotCiAvKioKICAqIExhcmdlQml0bWFwIGNhbiBiZSB1c2VkIHRvIGRlY29kZSBhIHJlY3RhbmdsZSByZWdpb24gZnJvbSBhbiBpbWFnZS4KICAqIExhcmdlQmltYXAgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIGFuIG9yaWdpbmFsIGltYWdlIGlzIGxhcmdlIGFuZApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0xpZ2h0aW5nQ29sb3JGaWx0ZXIuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9MaWdodGluZ0NvbG9yRmlsdGVyLmphdmEKaW5kZXggYzYyMWRlNi4uNzVmMTgyNyAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0xpZ2h0aW5nQ29sb3JGaWx0ZXIuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvTGlnaHRpbmdDb2xvckZpbHRlci5qYXZhCkBAIC0yMSwxNiArMjEsODcgQEAKIAogcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwogCisvKioKKyAqIEEgY29sb3IgZmlsdGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgc2ltcGxlIGxpZ2h0aW5nIGVmZmVjdHMuCisgKiBBIDxjb2RlPkxpZ2h0aW5nQ29sb3JGaWx0ZXI8L2NvZGU+IGlzIGRlZmluZWQgYnkgdHdvIHBhcmFtZXRlcnMsIG9uZQorICogdXNlZCB0byBtdWx0aXBseSB0aGUgc291cmNlIGNvbG9yIChjYWxsZWQgPGNvZGU+Y29sb3JNdWx0aXBseTwvY29kZT4pCisgKiBhbmQgb25lIHVzZWQgdG8gYWRkIHRvIHRoZSBzb3VyY2UgY29sb3IgKGNhbGxlZCA8Y29kZT5jb2xvckFkZDwvY29kZT4pLgorICogVGhlIGFscGhhIGNoYW5uZWwgaXMgbGVmdCB1bnRvdWNoZWQgYnkgdGhpcyBjb2xvciBmaWx0ZXIuCisgKgorICogR2l2ZW4gYSBzb3VyY2UgY29sb3IgUkdCLCB0aGUgcmVzdWx0aW5nIFInRydCJyBjb2xvciBpcyBjb21wdXRlZCB0aHVzbHk6CisgKiA8cHJlPgorICogUicgPSBSICogY29sb3JNdWx0aXBseS5SICsgY29sb3JBZGQuUgorICogRycgPSBHICogY29sb3JNdWx0aXBseS5HICsgY29sb3JBZGQuRworICogQicgPSBCICogY29sb3JNdWx0aXBseS5CICsgY29sb3JBZGQuQgorICogPC9wcmU+CisgKiBUaGUgcmVzdWx0IGlzIHBpbm5lZCB0byB0aGUgPGNvZGU+WzAuLjI1NV08L2NvZGU+IHJhbmdlIGZvciBlYWNoIGNoYW5uZWwuCisgKi8KIHB1YmxpYyBjbGFzcyBMaWdodGluZ0NvbG9yRmlsdGVyIGV4dGVuZHMgQ29sb3JGaWx0ZXIgeworICAgIHByaXZhdGUgaW50IG1NdWw7CisgICAgcHJpdmF0ZSBpbnQgbUFkZDsKIAogICAgIC8qKgotICAgICAqIENyZWF0ZSBhIGNvbG9yZmlsdGVyIHRoYXQgbXVsdGlwbGllcyB0aGUgUkdCIGNoYW5uZWxzIGJ5IG9uZSBjb2xvciwgYW5kIHRoZW4gYWRkcyBhIHNlY29uZCBjb2xvciwKLSAgICAgKiBwaW5uaW5nIHRoZSByZXN1bHQgZm9yIGVhY2ggY29tcG9uZW50IHRvIFswLi4yNTVdLiBUaGUgYWxwaGEgY29tcG9uZW50cyBvZiB0aGUgbXVsIGFuZCBhZGQgYXJndW1lbnRzCi0gICAgICogYXJlIGlnbm9yZWQuCisgICAgICogQ3JlYXRlIGEgY29sb3JmaWx0ZXIgdGhhdCBtdWx0aXBsaWVzIHRoZSBSR0IgY2hhbm5lbHMgYnkgb25lIGNvbG9yLAorICAgICAqIGFuZCB0aGVuIGFkZHMgYSBzZWNvbmQgY29sb3IuIFRoZSBhbHBoYSBjb21wb25lbnRzIG9mIHRoZSBtdWwgYW5kIGFkZAorICAgICAqIGFyZ3VtZW50cyBhcmUgaWdub3JlZC4KKyAgICAgKgorICAgICAqIEBzZWUgI3NldENvbG9yTXVsdGlwbHkoaW50KQorICAgICAqIEBzZWUgI3NldENvbG9yQWRkKGludCkKICAgICAgKi8KICAgICBwdWJsaWMgTGlnaHRpbmdDb2xvckZpbHRlcihpbnQgbXVsLCBpbnQgYWRkKSB7Ci0gICAgICAgIG5hdGl2ZV9pbnN0YW5jZSA9IG5hdGl2ZV9DcmVhdGVMaWdodGluZ0ZpbHRlcihtdWwsIGFkZCk7Ci0gICAgICAgIG5hdGl2ZUNvbG9yRmlsdGVyID0gbkNyZWF0ZUxpZ2h0aW5nRmlsdGVyKG5hdGl2ZV9pbnN0YW5jZSwgbXVsLCBhZGQpOworICAgICAgICBtTXVsID0gbXVsOworICAgICAgICBtQWRkID0gYWRkOworICAgICAgICB1cGRhdGUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBSR0IgY29sb3IgdXNlZCB0byBtdWx0aXBseSB0aGUgc291cmNlIGNvbG9yIHdoZW4gdGhlCisgICAgICogY29sb3IgZmlsdGVyIGlzIGFwcGxpZWQuCisgICAgICoKKyAgICAgKiBAc2VlICNzZXRDb2xvck11bHRpcGx5KGludCkKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldENvbG9yTXVsdGlwbHkoKSB7CisgICAgICAgIHJldHVybiBtTXVsOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB0aGUgUkdCIGNvbG9yIHVzZWQgdG8gbXVsdGlwbHkgdGhlIHNvdXJjZSBjb2xvciB3aGVuIHRoZQorICAgICAqIGNvbG9yIGZpbHRlciBpcyBhcHBsaWVkLgorICAgICAqIFRoZSBhbHBoYSBjaGFubmVsIG9mIHRoaXMgY29sb3IgaXMgaWdub3JlZC4KKyAgICAgKgorICAgICAqIEBzZWUgI2dldENvbG9yTXVsdGlwbHkoKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvbG9yTXVsdGlwbHkoaW50IG11bCkgeworICAgICAgICBtTXVsID0gbXVsOworICAgICAgICB1cGRhdGUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBSR0IgY29sb3IgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzb3VyY2UgY29sb3IKKyAgICAgKiB3aGVuIHRoZSBjb2xvciBmaWx0ZXIgaXMgYXBwbGllZC4KKyAgICAgKgorICAgICAqIEBzZWUgI3NldENvbG9yQWRkKGludCkKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldENvbG9yQWRkKCkgeworICAgICAgICByZXR1cm4gbUFkZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgdGhlIFJHQiB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNvdXJjZSBjb2xvciB3aGVuCisgICAgICogdGhlIGNvbG9yIGZpbHRlciBpcyBhcHBsaWVkLgorICAgICAqIFRoZSBhbHBoYSBjaGFubmVsIG9mIHRoaXMgY29sb3IgaXMgaWdub3JlZC4KKyAgICAgKgorICAgICAqIEBzZWUgI2dldENvbG9yQWRkKCkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb2xvckFkZChpbnQgYWRkKSB7CisgICAgICAgIG1BZGQgPSBhZGQ7CisgICAgICAgIHVwZGF0ZSgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGUoKSB7CisgICAgICAgIGRlc3Ryb3lGaWx0ZXIobmF0aXZlX2luc3RhbmNlLCBuYXRpdmVDb2xvckZpbHRlcik7CisgICAgICAgIG5hdGl2ZV9pbnN0YW5jZSA9IG5hdGl2ZV9DcmVhdGVMaWdodGluZ0ZpbHRlcihtTXVsLCBtQWRkKTsKKyAgICAgICAgbmF0aXZlQ29sb3JGaWx0ZXIgPSBuQ3JlYXRlTGlnaHRpbmdGaWx0ZXIobmF0aXZlX2luc3RhbmNlLCBtTXVsLCBtQWRkKTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgaW50IG5hdGl2ZV9DcmVhdGVMaWdodGluZ0ZpbHRlcihpbnQgbXVsLCBpbnQgYWRkKTsKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9QYWludC5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1BhaW50LmphdmEKaW5kZXggNWZjMjU4OC4uYzJkNGRmMiAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1BhaW50LmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1BhaW50LmphdmEKQEAgLTMzLDYgKzMzLDEwIEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgaW50IG1OYXRpdmVQYWludDsKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBpbnQgbU5hdGl2ZVR5cGVmYWNlOwogCiAgICAgcHJpdmF0ZSBDb2xvckZpbHRlciBtQ29sb3JGaWx0ZXI7CiAgICAgcHJpdmF0ZSBNYXNrRmlsdGVyICBtTWFza0ZpbHRlcjsKQEAgLTQ4MSw2ICs0ODUsNyBAQAogICAgICAgICBtUmFzdGVyaXplciA9IG51bGw7CiAgICAgICAgIG1TaGFkZXIgPSBudWxsOwogICAgICAgICBtVHlwZWZhY2UgPSBudWxsOworICAgICAgICBtTmF0aXZlVHlwZWZhY2UgPSAwOwogICAgICAgICBtWGZlcm1vZGUgPSBudWxsOwogCiAgICAgICAgIG1IYXNDb21wYXRTY2FsaW5nID0gZmFsc2U7CkBAIC01MjUsNiArNTMwLDcgQEAKICAgICAgICAgICAgIG1TaGFkZXIgPSBudWxsOwogICAgICAgICB9CiAgICAgICAgIG1UeXBlZmFjZSA9IHBhaW50Lm1UeXBlZmFjZTsKKyAgICAgICAgbU5hdGl2ZVR5cGVmYWNlID0gcGFpbnQubU5hdGl2ZVR5cGVmYWNlOwogICAgICAgICBtWGZlcm1vZGUgPSBwYWludC5tWGZlcm1vZGU7CiAKICAgICAgICAgbUhhc0NvbXBhdFNjYWxpbmcgPSBwYWludC5tSGFzQ29tcGF0U2NhbGluZzsKQEAgLTEwODcsNiArMTA5Myw3IEBACiAgICAgICAgIH0KICAgICAgICAgbmF0aXZlX3NldFR5cGVmYWNlKG1OYXRpdmVQYWludCwgdHlwZWZhY2VOYXRpdmUpOwogICAgICAgICBtVHlwZWZhY2UgPSB0eXBlZmFjZTsKKyAgICAgICAgbU5hdGl2ZVR5cGVmYWNlID0gdHlwZWZhY2VOYXRpdmU7CiAgICAgICAgIHJldHVybiB0eXBlZmFjZTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aC5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1BhdGguamF2YQppbmRleCA1YjA0YTkxLi40Nzc2MDg4IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aC5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9QYXRoLmphdmEKQEAgLTE2LDggKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwogCi1pbXBvcnQgYW5kcm9pZC52aWV3LkhhcmR3YXJlUmVuZGVyZXI7Ci0KIC8qKgogICogVGhlIFBhdGggY2xhc3MgZW5jYXBzdWxhdGVzIGNvbXBvdW5kIChtdWx0aXBsZSBjb250b3VyKSBnZW9tZXRyaWMgcGF0aHMKICAqIGNvbnNpc3Rpbmcgb2Ygc3RyYWlnaHQgbGluZSBzZWdtZW50cywgcXVhZHJhdGljIGN1cnZlcywgYW5kIGN1YmljIGN1cnZlcy4KQEAgLTMwLDYgKzI4LDcgQEAKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBmaW5hbCBpbnQgbU5hdGl2ZVBhdGg7CisgICAgcHJpdmF0ZSBpbnQgbU5hdGl2ZVBhdGhNZWFzdXJlOwogCiAgICAgLyoqCiAgICAgICogQGhpZGUKQEAgLTM5LDcgKzM4LDYgQEAKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBSZWdpb24gcmVjdHM7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1EZXRlY3RTaW1wbGVQYXRoczsKICAgICBwcml2YXRlIERpcmVjdGlvbiBtTGFzdERpcmVjdGlvbiA9IG51bGw7CiAKICAgICAvKioKQEAgLTQ3LDcgKzQ1LDYgQEAKICAgICAgKi8KICAgICBwdWJsaWMgUGF0aCgpIHsKICAgICAgICAgbU5hdGl2ZVBhdGggPSBpbml0MSgpOwotICAgICAgICBtRGV0ZWN0U2ltcGxlUGF0aHMgPSBIYXJkd2FyZVJlbmRlcmVyLmlzQXZhaWxhYmxlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC02NSw3ICs2Miw2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbU5hdGl2ZVBhdGggPSBpbml0Mih2YWxOYXRpdmUpOwotICAgICAgICBtRGV0ZWN0U2ltcGxlUGF0aHMgPSBIYXJkd2FyZVJlbmRlcmVyLmlzQXZhaWxhYmxlKCk7CiAgICAgfQogICAgIAogICAgIC8qKgpAQCAtNzQsMTUgKzcwLDIxIEBACiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVzZXQoKSB7CiAgICAgICAgIGlzU2ltcGxlUGF0aCA9IHRydWU7Ci0gICAgICAgIGlmIChtRGV0ZWN0U2ltcGxlUGF0aHMpIHsKLSAgICAgICAgICAgIG1MYXN0RGlyZWN0aW9uID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChyZWN0cyAhPSBudWxsKSByZWN0cy5zZXRFbXB0eSgpOwotICAgICAgICB9CisgICAgICAgIG1MYXN0RGlyZWN0aW9uID0gbnVsbDsKKyAgICAgICAgaWYgKHJlY3RzICE9IG51bGwpIHJlY3RzLnNldEVtcHR5KCk7CiAgICAgICAgIC8vIFdlIHByb21pc2VkIG5vdCB0byBjaGFuZ2UgdGhpcywgc28gcHJlc2VydmUgaXQgYXJvdW5kIHRoZSBuYXRpdmUKICAgICAgICAgLy8gY2FsbCwgd2hpY2ggZG9lcyBub3cgcmVzZXQgZmlsbCB0eXBlLgogICAgICAgICBmaW5hbCBGaWxsVHlwZSBmaWxsVHlwZSA9IGdldEZpbGxUeXBlKCk7CiAgICAgICAgIG5hdGl2ZV9yZXNldChtTmF0aXZlUGF0aCk7CiAgICAgICAgIHNldEZpbGxUeXBlKGZpbGxUeXBlKTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNsZWFyTWVhc3VyZSgpIHsKKyAgICAgICAgaWYgKG1OYXRpdmVQYXRoTWVhc3VyZSAhPSAwKSB7CisgICAgICAgICAgICBuYXRpdmVfZGVzdHJveU1lYXN1cmUobU5hdGl2ZVBhdGhNZWFzdXJlKTsKKyAgICAgICAgICAgIG1OYXRpdmVQYXRoTWVhc3VyZSA9IDA7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTkxLDExICs5MywxMCBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJld2luZCgpIHsKICAgICAgICAgaXNTaW1wbGVQYXRoID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1EZXRlY3RTaW1wbGVQYXRocykgewotICAgICAgICAgICAgbUxhc3REaXJlY3Rpb24gPSBudWxsOwotICAgICAgICAgICAgaWYgKHJlY3RzICE9IG51bGwpIHJlY3RzLnNldEVtcHR5KCk7Ci0gICAgICAgIH0KKyAgICAgICAgbUxhc3REaXJlY3Rpb24gPSBudWxsOworICAgICAgICBpZiAocmVjdHMgIT0gbnVsbCkgcmVjdHMuc2V0RW1wdHkoKTsKICAgICAgICAgbmF0aXZlX3Jld2luZChtTmF0aXZlUGF0aCk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKiBSZXBsYWNlIHRoZSBjb250ZW50cyBvZiB0aGlzIHdpdGggdGhlIGNvbnRlbnRzIG9mIHNyYy4KQEAgLTEwNCw2ICsxMDUsNyBAQAogICAgICAgICBpZiAodGhpcyAhPSBzcmMpIHsKICAgICAgICAgICAgIGlzU2ltcGxlUGF0aCA9IHNyYy5pc1NpbXBsZVBhdGg7CiAgICAgICAgICAgICBuYXRpdmVfc2V0KG1OYXRpdmVQYXRoLCBzcmMubU5hdGl2ZVBhdGgpOworICAgICAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIzMiw2ICsyMzQsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEZpbGxUeXBlKEZpbGxUeXBlIGZ0KSB7CiAgICAgICAgIG5hdGl2ZV9zZXRGaWxsVHlwZShtTmF0aXZlUGF0aCwgZnQubmF0aXZlSW50KTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogICAgIAogICAgIC8qKgpAQCAtMjUxLDYgKzI1NCw3IEBACiAgICAgICAgIGludCBmdCA9IG5hdGl2ZV9nZXRGaWxsVHlwZShtTmF0aXZlUGF0aCk7CiAgICAgICAgIGZ0IF49IDI7CiAgICAgICAgIG5hdGl2ZV9zZXRGaWxsVHlwZShtTmF0aXZlUGF0aCwgZnQpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAgICAgCiAgICAgLyoqCkBAIC0zMDcsNiArMzExLDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBtb3ZlVG8oZmxvYXQgeCwgZmxvYXQgeSkgewogICAgICAgICBuYXRpdmVfbW92ZVRvKG1OYXRpdmVQYXRoLCB4LCB5KTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0zMjEsNiArMzI2LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByTW92ZVRvKGZsb2F0IGR4LCBmbG9hdCBkeSkgewogICAgICAgICBuYXRpdmVfck1vdmVUbyhtTmF0aXZlUGF0aCwgZHgsIGR5KTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0zMzQsNiArMzQwLDcgQEAKICAgICBwdWJsaWMgdm9pZCBsaW5lVG8oZmxvYXQgeCwgZmxvYXQgeSkgewogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX2xpbmVUbyhtTmF0aXZlUGF0aCwgeCwgeSk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMzQ5LDYgKzM1Niw3IEBACiAgICAgcHVibGljIHZvaWQgckxpbmVUbyhmbG9hdCBkeCwgZmxvYXQgZHkpIHsKICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9yTGluZVRvKG1OYXRpdmVQYXRoLCBkeCwgZHkpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTM2NCw2ICszNzIsNyBAQAogICAgIHB1YmxpYyB2b2lkIHF1YWRUbyhmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5MikgewogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX3F1YWRUbyhtTmF0aXZlUGF0aCwgeDEsIHkxLCB4MiwgeTIpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTM4Myw2ICszOTIsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJRdWFkVG8oZmxvYXQgZHgxLCBmbG9hdCBkeTEsIGZsb2F0IGR4MiwgZmxvYXQgZHkyKSB7CiAgICAgICAgIGlzU2ltcGxlUGF0aCA9IGZhbHNlOwogICAgICAgICBuYXRpdmVfclF1YWRUbyhtTmF0aXZlUGF0aCwgZHgxLCBkeTEsIGR4MiwgZHkyKTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MDEsNiArNDExLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHgzLCBmbG9hdCB5MykgewogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX2N1YmljVG8obU5hdGl2ZVBhdGgsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQxMiw2ICs0MjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHgzLCBmbG9hdCB5MykgewogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX3JDdWJpY1RvKG1OYXRpdmVQYXRoLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MzEsNiArNDQzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZvcmNlTW92ZVRvKSB7CiAgICAgICAgIGlzU2ltcGxlUGF0aCA9IGZhbHNlOwogICAgICAgICBuYXRpdmVfYXJjVG8obU5hdGl2ZVBhdGgsIG92YWwsIHN0YXJ0QW5nbGUsIHN3ZWVwQW5nbGUsIGZvcmNlTW92ZVRvKTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogICAgIAogICAgIC8qKgpAQCAtNDQ3LDYgKzQ2MCw3IEBACiAgICAgcHVibGljIHZvaWQgYXJjVG8oUmVjdEYgb3ZhbCwgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgc3dlZXBBbmdsZSkgewogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX2FyY1RvKG1OYXRpdmVQYXRoLCBvdmFsLCBzdGFydEFuZ2xlLCBzd2VlcEFuZ2xlLCBmYWxzZSk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KICAgICAKICAgICAvKioKQEAgLTQ1Niw2ICs0NzAsNyBAQAogICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgewogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX2Nsb3NlKG1OYXRpdmVQYXRoKTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC00NzUsMTYgKzQ5MCwxNCBAQAogICAgIH0KICAgICAKICAgICBwcml2YXRlIHZvaWQgZGV0ZWN0U2ltcGxlUGF0aChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIERpcmVjdGlvbiBkaXIpIHsKLSAgICAgICAgaWYgKG1EZXRlY3RTaW1wbGVQYXRocykgewotICAgICAgICAgICAgaWYgKG1MYXN0RGlyZWN0aW9uID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtTGFzdERpcmVjdGlvbiA9IGRpcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtTGFzdERpcmVjdGlvbiAhPSBkaXIpIHsKLSAgICAgICAgICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlY3RzID09IG51bGwpIHJlY3RzID0gbmV3IFJlZ2lvbigpOwotICAgICAgICAgICAgICAgIHJlY3RzLm9wKChpbnQpIGxlZnQsIChpbnQpIHRvcCwgKGludCkgcmlnaHQsIChpbnQpIGJvdHRvbSwgUmVnaW9uLk9wLlVOSU9OKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKG1MYXN0RGlyZWN0aW9uID09IG51bGwpIHsKKyAgICAgICAgICAgIG1MYXN0RGlyZWN0aW9uID0gZGlyOworICAgICAgICB9CisgICAgICAgIGlmIChtTGFzdERpcmVjdGlvbiAhPSBkaXIpIHsKKyAgICAgICAgICAgIGlzU2ltcGxlUGF0aCA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHJlY3RzID09IG51bGwpIHJlY3RzID0gbmV3IFJlZ2lvbigpOworICAgICAgICAgICAgcmVjdHMub3AoKGludCkgbGVmdCwgKGludCkgdG9wLCAoaW50KSByaWdodCwgKGludCkgYm90dG9tLCBSZWdpb24uT3AuVU5JT04pOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MDAsNiArNTEzLDcgQEAKICAgICAgICAgfQogICAgICAgICBkZXRlY3RTaW1wbGVQYXRoKHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tLCBkaXIpOwogICAgICAgICBuYXRpdmVfYWRkUmVjdChtTmF0aXZlUGF0aCwgcmVjdCwgZGlyLm5hdGl2ZUludCk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTE0LDYgKzUyOCw3IEBACiAgICAgcHVibGljIHZvaWQgYWRkUmVjdChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIERpcmVjdGlvbiBkaXIpIHsKICAgICAgICAgZGV0ZWN0U2ltcGxlUGF0aChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGRpcik7CiAgICAgICAgIG5hdGl2ZV9hZGRSZWN0KG1OYXRpdmVQYXRoLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGRpci5uYXRpdmVJbnQpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTUyOCw2ICs1NDMsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlzU2ltcGxlUGF0aCA9IGZhbHNlOwogICAgICAgICBuYXRpdmVfYWRkT3ZhbChtTmF0aXZlUGF0aCwgb3ZhbCwgZGlyLm5hdGl2ZUludCk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTQxLDYgKzU1Nyw3IEBACiAgICAgcHVibGljIHZvaWQgYWRkQ2lyY2xlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1cywgRGlyZWN0aW9uIGRpcikgewogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX2FkZENpcmNsZShtTmF0aXZlUGF0aCwgeCwgeSwgcmFkaXVzLCBkaXIubmF0aXZlSW50KTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC01NTYsNiArNTczLDcgQEAKICAgICAgICAgfQogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX2FkZEFyYyhtTmF0aXZlUGF0aCwgb3ZhbCwgc3RhcnRBbmdsZSwgc3dlZXBBbmdsZSk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTcyLDYgKzU5MCw3IEBACiAgICAgICAgIH0KICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9hZGRSb3VuZFJlY3QobU5hdGl2ZVBhdGgsIHJlY3QsIHJ4LCByeSwgZGlyLm5hdGl2ZUludCk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KICAgICAKICAgICAvKioKQEAgLTU5Miw2ICs2MTEsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlzU2ltcGxlUGF0aCA9IGZhbHNlOwogICAgICAgICBuYXRpdmVfYWRkUm91bmRSZWN0KG1OYXRpdmVQYXRoLCByZWN0LCByYWRpaSwgZGlyLm5hdGl2ZUludCk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KICAgICAKICAgICAvKioKQEAgLTYwMyw2ICs2MjMsNyBAQAogICAgIHB1YmxpYyB2b2lkIGFkZFBhdGgoUGF0aCBzcmMsIGZsb2F0IGR4LCBmbG9hdCBkeSkgewogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX2FkZFBhdGgobU5hdGl2ZVBhdGgsIHNyYy5tTmF0aXZlUGF0aCwgZHgsIGR5KTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC02MTMsNiArNjM0LDcgQEAKICAgICBwdWJsaWMgdm9pZCBhZGRQYXRoKFBhdGggc3JjKSB7CiAgICAgICAgIGlzU2ltcGxlUGF0aCA9IGZhbHNlOwogICAgICAgICBuYXRpdmVfYWRkUGF0aChtTmF0aXZlUGF0aCwgc3JjLm1OYXRpdmVQYXRoKTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC02MjMsNiArNjQ1LDcgQEAKICAgICBwdWJsaWMgdm9pZCBhZGRQYXRoKFBhdGggc3JjLCBNYXRyaXggbWF0cml4KSB7CiAgICAgICAgIGlmICghc3JjLmlzU2ltcGxlUGF0aCkgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9hZGRQYXRoKG1OYXRpdmVQYXRoLCBzcmMubU5hdGl2ZVBhdGgsIG1hdHJpeC5uYXRpdmVfaW5zdGFuY2UpOworICAgICAgICBjbGVhck1lYXN1cmUoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTY0MCw2ICs2NjMsMTEgQEAKICAgICAgICAgICAgIGRzdC5pc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBuYXRpdmVfb2Zmc2V0KG1OYXRpdmVQYXRoLCBkeCwgZHksIGRzdE5hdGl2ZSk7CisgICAgICAgIGlmIChkc3QgIT0gbnVsbCkgeworICAgICAgICAgICAgZHN0LmNsZWFyTWVhc3VyZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2xlYXJNZWFzdXJlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTY1MSw2ICs2NzksNyBAQAogICAgIHB1YmxpYyB2b2lkIG9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpIHsKICAgICAgICAgaXNTaW1wbGVQYXRoID0gZmFsc2U7CiAgICAgICAgIG5hdGl2ZV9vZmZzZXQobU5hdGl2ZVBhdGgsIGR4LCBkeSk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNjYyLDYgKzY5MSw3IEBACiAgICAgcHVibGljIHZvaWQgc2V0TGFzdFBvaW50KGZsb2F0IGR4LCBmbG9hdCBkeSkgewogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX3NldExhc3RQb2ludChtTmF0aXZlUGF0aCwgZHgsIGR5KTsKKyAgICAgICAgY2xlYXJNZWFzdXJlKCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC02NzksNiArNzA5LDExIEBACiAgICAgICAgICAgICBkc3ROYXRpdmUgPSBkc3QubU5hdGl2ZVBhdGg7CiAgICAgICAgIH0KICAgICAgICAgbmF0aXZlX3RyYW5zZm9ybShtTmF0aXZlUGF0aCwgbWF0cml4Lm5hdGl2ZV9pbnN0YW5jZSwgZHN0TmF0aXZlKTsKKyAgICAgICAgaWYgKGRzdCAhPSBudWxsKSB7CisgICAgICAgICAgICBkc3QuY2xlYXJNZWFzdXJlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjbGVhck1lYXN1cmUoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtNjg5LDEwICs3MjQsMTQgQEAKICAgICBwdWJsaWMgdm9pZCB0cmFuc2Zvcm0oTWF0cml4IG1hdHJpeCkgewogICAgICAgICBpc1NpbXBsZVBhdGggPSBmYWxzZTsKICAgICAgICAgbmF0aXZlX3RyYW5zZm9ybShtTmF0aXZlUGF0aCwgbWF0cml4Lm5hdGl2ZV9pbnN0YW5jZSk7CisgICAgICAgIGNsZWFyTWVhc3VyZSgpOwogICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIGZpbmFsaXplKCkgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAobU5hdGl2ZVBhdGhNZWFzdXJlICE9IDApIHsKKyAgICAgICAgICAgICAgICBuYXRpdmVfZGVzdHJveU1lYXN1cmUobU5hdGl2ZVBhdGhNZWFzdXJlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZpbmFsaXplcihtTmF0aXZlUGF0aCk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBzdXBlci5maW5hbGl6ZSgpOwpAQCAtNzAzLDYgKzc0Miw5MiBAQAogICAgICAgICByZXR1cm4gbU5hdGl2ZVBhdGg7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQXBwcm94aW1hdGUgdGhlIDxjb2RlPlBhdGg8L2NvZGU+IHdpdGggYSBzZXJpZXMgb2YgbGluZSBzZWdtZW50cy4KKyAgICAgKiBUaGlzIHJldHVybnMgZmxvYXRbXSB3aXRoIHRoZSBhcnJheSBjb250YWluaW5nIHBvaW50IGNvbXBvbmVudHMuCisgICAgICogVGhlcmUgYXJlIHRocmVlIGNvbXBvbmVudHMgZm9yIGVhY2ggcG9pbnQsIGluIG9yZGVyOgorICAgICAqIDx1bD4KKyAgICAgKiAgICAgPGxpPkZyYWN0aW9uIGFsb25nIHRoZSBsZW5ndGggb2YgdGhlIHBhdGggdGhhdCB0aGUgcG9pbnQgcmVzaWRlczwvbGk+CisgICAgICogICAgIDxsaT5UaGUgeCBjb29yZGluYXRlIG9mIHRoZSBwb2ludDwvbGk+CisgICAgICogICAgIDxsaT5UaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwb2ludDwvbGk+CisgICAgICogPC91bD4KKyAgICAgKiA8cD5Ud28gcG9pbnRzIG1heSBzaGFyZSB0aGUgc2FtZSBmcmFjdGlvbiBhbG9uZyBpdHMgbGVuZ3RoIHdoZW4gdGhlcmUgaXMKKyAgICAgKiBhIG1vdmUgYWN0aW9uIHdpdGhpbiB0aGUgUGF0aC48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gYWNjZXB0YWJsZUVycm9yIFRoZSBhY2NlcHRhYmxlIGVycm9yIGZvciBhIGxpbmUgb24gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBQYXRoLiBUeXBpY2FsbHkgdGhpcyB3b3VsZCBiZSAwLjUgc28gdGhhdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGVycm9yIGlzIGxlc3MgdGhhbiBoYWxmIGEgcGl4ZWwuCisgICAgICogQHJldHVybiBBbiBhcnJheSBvZiBjb21wb25lbnRzIGZvciBwb2ludHMgYXBwcm94aW1hdGluZyB0aGUgUGF0aC4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBmbG9hdFtdIGFwcHJveGltYXRlKGZsb2F0IGFjY2VwdGFibGVFcnJvcikgeworICAgICAgICByZXR1cm4gbmF0aXZlX2FwcHJveGltYXRlKG1OYXRpdmVQYXRoLCBhY2NlcHRhYmxlRXJyb3IpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1vZGlmaWVzIHRoZSA8Y29kZT5QYXRoPC9jb2RlPiBieSBleHRyYWN0aW5nIGEgcG9ydGlvbiBvZiBpdC4KKyAgICAgKiBUaGUgcG9ydGlvbiBvZiB0aGUgPGNvZGU+UGF0aDwvY29kZT4gdXNlZCBpcyBiZXR3ZWVuIDxjb2RlPnRyaW1TdGFydDwvY29kZT4gYW5kCisgICAgICogPGNvZGU+dHJpbUVuZDwvY29kZT4gd2l0aCB0aGUgdmFsdWUgb2Zmc2V0IGJ5IDxjb2RlPnRyaW1PZmZzZXQ8L2NvZGU+LiBXaGVuCisgICAgICogPGNvZGU+dHJpbU9mZnNldDwvY29kZT4gYWRkZWQgdG8gPGNvZGU+dHJpbUVuZDwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIDEsIHRoZQorICAgICAqIHRyaW1tZWQgcG9ydGlvbiAid3JhcHMiIHRvIHRoZSBzdGFydCBvZiB0aGUgPGNvZGU+UGF0aDwvY29kZT4uCisgICAgICogPHA+Rm9yIGV4YW1wbGUsIGlmIDxjb2RlPlBhdGg8L2NvZGU+IGlzIGEgY2lyY2xlIGFuZCA8Y29kZT50cmltU3RhcnQ8L2NvZGU+IGlzIDAKKyAgICAgKiBhbmQgPGNvZGU+dHJpbUVuZDwvY29kZT4gaXMgMC41LCB0aGUgcmVzdWx0aW5nIDxjb2RlPlBhdGg8L2NvZGU+IGlzIHRoZSBhcmMgb2YKKyAgICAgKiBhIHNlbWljaXJjbGUuIElmIDxjb2RlPnRyaW1PZmZzZXQ8L2NvZGU+IGlzIHNldCB0byAwLjc1LCB0aGUgYXJjIHdpbGwgc3RhcnQgYXQKKyAgICAgKiAzLzQgb2YgdGhlIGNpcmNsZSBhbmQgY29udGludWUgdG8gdGhlIGVuZCBvZiB0aGUgY2lyY2xlLCB0aGVuIHN0YXJ0IGFnYWluIGF0IHRoZQorICAgICAqIGJlZ2lubmluZyBvZiB0aGUgY2lyY2xlIGFuZCBlbmQgYXQgMS80IG9mIHRoZSB3YXkgYXJvdW5kLiBJdCB3aWxsIGFwcGVhciBhcyBpZgorICAgICAqIHRoZSBzZW1pY2lyY2xlIGFyYyB3cmFwcGVkIGFyb3VuZCB0aGUgPGNvZGU+UGF0aDwvY29kZT4gc3RhcnQgYW5kIGVuZC48L3A+CisgICAgICogQHBhcmFtIHRyaW1TdGFydCBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDxjb2RlPnRyaW1FbmQ8L2NvZGU+IGluZGljYXRpbmcgdGhlIGZyYWN0aW9uIG9mIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgPGNvZGU+UGF0aDwvY29kZT4gdG8gc3RhcnQuIEEgdmFsdWUgb2YgMCB0cmltcyBub3RoaW5nIGZyb20gdGhlIHN0YXJ0LgorICAgICAqIEBwYXJhbSB0cmltRW5kIEEgbnVtYmVyIGJldHdlZW4gPGNvZGU+dHJpbVN0YXJ0PC9jb2RlPiBhbmQgMSBpbmRpY2F0aW5nIHRoZSBmcmFjdGlvbiBvZiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5QYXRoPC9jb2RlPiB0byBlbmQuIEEgdmFsdWUgb2YgMSB0cmltcyBub3RoaW5nIGZyb20gdGhlIGVuZC4KKyAgICAgKiBAcGFyYW0gdHJpbU9mZnNldCBBIGZyYWN0aW9uIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIHRoZSBvZmZzZXQgb2YgdGhlIHRyaW1tZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICBwb3J0aW9uIG9mIHRoZSA8Y29kZT5QYXRoPC9jb2RlPi4KKyAgICAgKiBAc2VlICN0cmltKGZsb2F0LCBmbG9hdCwgZmxvYXQsIFBhdGgpCisgICAgICovCisgICAgcHVibGljIHZvaWQgdHJpbShmbG9hdCB0cmltU3RhcnQsIGZsb2F0IHRyaW1FbmQsIGZsb2F0IHRyaW1PZmZzZXQpIHsKKyAgICAgICAgdHJpbSh0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1PZmZzZXQsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEV4dHJhY3RzIGEgcG9ydGlvbiBvZiB0aGUgPGNvZGU+UGF0aDwvY29kZT4gYW5kIHdyaXRlcyBpdCB0byA8Y29kZT5kc3Q8L2NvZGU+LgorICAgICAqIFRoZSBwb3J0aW9uIG9mIHRoZSA8Y29kZT5QYXRoPC9jb2RlPiB1c2VkIGlzIGJldHdlZW4gPGNvZGU+dHJpbVN0YXJ0PC9jb2RlPiBhbmQKKyAgICAgKiA8Y29kZT50cmltRW5kPC9jb2RlPiB3aXRoIHRoZSB2YWx1ZSBvZmZzZXQgYnkgPGNvZGU+dHJpbU9mZnNldDwvY29kZT4uIFdoZW4KKyAgICAgKiA8Y29kZT50cmltT2Zmc2V0PC9jb2RlPiBhZGRlZCB0byA8Y29kZT50cmltRW5kPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gMSwgdGhlCisgICAgICogdHJpbW1lZCBwb3J0aW9uICJ3cmFwcyIgdG8gdGhlIHN0YXJ0IG9mIHRoZSA8Y29kZT5QYXRoPC9jb2RlPi4KKyAgICAgKiA8cD5Gb3IgZXhhbXBsZSwgaWYgPGNvZGU+UGF0aDwvY29kZT4gaXMgYSBjaXJjbGUgYW5kIDxjb2RlPnRyaW1TdGFydDwvY29kZT4gaXMgMAorICAgICAqIGFuZCA8Y29kZT50cmltRW5kPC9jb2RlPiBpcyAwLjUsIHRoZSByZXN1bHRpbmcgPGNvZGU+UGF0aDwvY29kZT4gaXMgdGhlIGFyYyBvZgorICAgICAqIGEgc2VtaWNpcmNsZS4gSWYgPGNvZGU+dHJpbU9mZnNldDwvY29kZT4gaXMgc2V0IHRvIDAuNzUsIHRoZSBhcmMgd2lsbCBzdGFydCBhdAorICAgICAqIDMvNCBvZiB0aGUgY2lyY2xlIGFuZCBjb250aW51ZSB0byB0aGUgZW5kIG9mIHRoZSBjaXJjbGUsIHRoZW4gc3RhcnQgYWdhaW4gYXQgdGhlCisgICAgICogYmVnaW5uaW5nIG9mIHRoZSBjaXJjbGUgYW5kIGVuZCBhdCAxLzQgb2YgdGhlIHdheSBhcm91bmQuIEl0IHdpbGwgYXBwZWFyIGFzIGlmCisgICAgICogdGhlIHNlbWljaXJjbGUgYXJjIHdyYXBwZWQgYXJvdW5kIHRoZSA8Y29kZT5QYXRoPC9jb2RlPiBzdGFydCBhbmQgZW5kLjwvcD4KKyAgICAgKiBAcGFyYW0gdHJpbVN0YXJ0IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgPGNvZGU+dHJpbUVuZDwvY29kZT4gaW5kaWNhdGluZyB0aGUgZnJhY3Rpb24gb2YgdGhlCisgICAgICogICAgICAgICAgICAgICAgICA8Y29kZT5QYXRoPC9jb2RlPiB0byBzdGFydC4gQSB2YWx1ZSBvZiAwIHRyaW1zIG5vdGhpbmcgZnJvbSB0aGUgc3RhcnQuCisgICAgICogQHBhcmFtIHRyaW1FbmQgQSBudW1iZXIgYmV0d2VlbiA8Y29kZT50cmltU3RhcnQ8L2NvZGU+IGFuZCAxIGluZGljYXRpbmcgdGhlIGZyYWN0aW9uIG9mIHRoZQorICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPlBhdGg8L2NvZGU+IHRvIGVuZC4gQSB2YWx1ZSBvZiAxIHRyaW1zIG5vdGhpbmcgZnJvbSB0aGUgZW5kLgorICAgICAqIEBwYXJhbSB0cmltT2Zmc2V0IEEgZnJhY3Rpb24gYmV0d2VlbiAwIGFuZCAxIGluZGljYXRpbmcgdGhlIG9mZnNldCBvZiB0aGUgdHJpbW1lZAorICAgICAqICAgICAgICAgICAgICAgICAgIHBvcnRpb24gb2YgdGhlIDxjb2RlPlBhdGg8L2NvZGU+LgorICAgICAqIEBwYXJhbSBkc3QgVGhlIHRyaW1tZWQgPGNvZGU+UGF0aDwvY29kZT4gaXMgd3JpdHRlbiBoZXJlLiBJZiA8Y29kZT5kc3Q8L2NvZGU+IGlzIG51bGwsCisgICAgICogICAgICAgICAgICB0aGVuIHRoZSBvcmlnaW5hbCA8Y29kZT5QYXRoPC9jb2RlPiBpcyBtb2RpZmllZC4KKyAgICAgKiBAc2VlICN0cmltKGZsb2F0LCBmbG9hdCwgZmxvYXQpCisgICAgICovCisgICAgcHVibGljIHZvaWQgdHJpbShmbG9hdCB0cmltU3RhcnQsIGZsb2F0IHRyaW1FbmQsIGZsb2F0IHRyaW1PZmZzZXQsIFBhdGggZHN0KSB7CisgICAgICAgIGlmICh0cmltU3RhcnQgPiAxIHx8IHRyaW1FbmQgPiAxIHx8IHRyaW1PZmZzZXQgPiAxCisgICAgICAgICAgICAgICAgfHwgdHJpbVN0YXJ0IDwgMCB8fCB0cmltRW5kIDwgMCB8fCB0cmltT2Zmc2V0IDwgMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidHJpbSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSIpOworICAgICAgICB9CisgICAgICAgIGlmICh0cmltU3RhcnQgPiB0cmltRW5kKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ0cmltIGVuZCBjYW5ub3QgYmUgbGVzcyB0aGFuIHN0YXJ0Iik7CisgICAgICAgIH0KKyAgICAgICAgaW50IGRzdE5hdGl2ZSA9IDA7CisgICAgICAgIGlmIChkc3QgIT0gbnVsbCkgeworICAgICAgICAgICAgZHN0TmF0aXZlID0gZHN0Lm1OYXRpdmVQYXRoOworICAgICAgICAgICAgZHN0LmlzU2ltcGxlUGF0aCA9IGZhbHNlOworICAgICAgICAgICAgZHN0LmNsZWFyTWVhc3VyZSgpOworICAgICAgICB9CisgICAgICAgIG1OYXRpdmVQYXRoTWVhc3VyZSA9IG5hdGl2ZV90cmltKG1OYXRpdmVQYXRoLCBkc3ROYXRpdmUsIG1OYXRpdmVQYXRoTWVhc3VyZSwKKyAgICAgICAgICAgICAgICB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1PZmZzZXQpOworICAgIH0KKwogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBpbnQgaW5pdDEoKTsKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgaW50IGluaXQyKGludCBuUGF0aCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlX3Jlc2V0KGludCBuUGF0aCk7CkBAIC03NDksNCArODc0LDggQEAKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVfdHJhbnNmb3JtKGludCBuUGF0aCwgaW50IG1hdHJpeCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlX29wKGludCBwYXRoMSwgaW50IHBhdGgyLCBpbnQgb3AsIGludCByZXN1bHQpOwogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIGZpbmFsaXplcihpbnQgblBhdGgpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdFtdIG5hdGl2ZV9hcHByb3hpbWF0ZShpbnQgblBhdGgsIGZsb2F0IGVycm9yKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgaW50IG5hdGl2ZV90cmltKGludCBuUGF0aCwgaW50IG5UYXJnZXRQYXRoLCBpbnQgblBhdGhNZWFzdXJlLAorICAgICAgICAgICAgZmxvYXQgdHJpbVN0YXJ0LCBmbG9hdCB0cmltRW5kLCBmbG9hdCB0cmltT2Zmc2V0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVfZGVzdHJveU1lYXN1cmUoaW50IG5QYXRoTWVhc3VyZSk7CiB9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZkNvbG9yRmlsdGVyLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZkNvbG9yRmlsdGVyLmphdmEKaW5kZXggZWNjN2MyNC4uOTg3MGFkMiAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmZDb2xvckZpbHRlci5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmQ29sb3JGaWx0ZXIuamF2YQpAQCAtMTYsMTcgKzE2LDg0IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKIAorLyoqCisgKiBBIGNvbG9yIGZpbHRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIHRpbnQgdGhlIHNvdXJjZSBwaXhlbHMgdXNpbmcgYSBzaW5nbGUKKyAqIGNvbG9yIGFuZCBhIHNwZWNpZmljIHtAbGluayBQb3J0ZXJEdWZmIFBvcnRlci1EdWZmIGNvbXBvc2l0ZSBtb2RlfS4KKyAqLwogcHVibGljIGNsYXNzIFBvcnRlckR1ZmZDb2xvckZpbHRlciBleHRlbmRzIENvbG9yRmlsdGVyIHsKKyAgICBwcml2YXRlIGludCBtQ29sb3I7CisgICAgcHJpdmF0ZSBQb3J0ZXJEdWZmLk1vZGUgbU1vZGU7CisKICAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBjb2xvcmZpbHRlciB0aGF0IHVzZXMgdGhlIHNwZWNpZmllZCBjb2xvciBhbmQgcG9ydGVyLWR1ZmYgbW9kZS4KKyAgICAgKiBDcmVhdGUgYSBjb2xvciBmaWx0ZXIgdGhhdCB1c2VzIHRoZSBzcGVjaWZpZWQgY29sb3IgYW5kIFBvcnRlci1EdWZmIG1vZGUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gc3JjQ29sb3IgICAgICAgVGhlIHNvdXJjZSBjb2xvciB1c2VkIHdpdGggdGhlIHNwZWNpZmllZAotICAgICAqICAgICAgICAgICAgICAgICAgICAgICBwb3J0ZXItZHVmZiBtb2RlCi0gICAgICogQHBhcmFtIG1vZGUgICAgICAgICAgIFRoZSBwb3J0ZXItZHVmZiBtb2RlIHRoYXQgaXMgYXBwbGllZAorICAgICAqIEBwYXJhbSBjb2xvciBUaGUgQVJHQiBzb3VyY2UgY29sb3IgdXNlZCB3aXRoIHRoZSBzcGVjaWZpZWQgUG9ydGVyLUR1ZmYgbW9kZQorICAgICAqIEBwYXJhbSBtb2RlIFRoZSBwb3J0ZXItZHVmZiBtb2RlIHRoYXQgaXMgYXBwbGllZAorICAgICAqCisgICAgICogQHNlZSBDb2xvcgorICAgICAqIEBzZWUgI3NldENvbG9yKGludCkKKyAgICAgKiBAc2VlICNzZXRNb2RlKGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZi5Nb2RlKQogICAgICAqLwotICAgIHB1YmxpYyBQb3J0ZXJEdWZmQ29sb3JGaWx0ZXIoaW50IHNyY0NvbG9yLCBQb3J0ZXJEdWZmLk1vZGUgbW9kZSkgewotICAgICAgICBuYXRpdmVfaW5zdGFuY2UgPSBuYXRpdmVfQ3JlYXRlUG9ydGVyRHVmZkZpbHRlcihzcmNDb2xvciwgbW9kZS5uYXRpdmVJbnQpOwotICAgICAgICBuYXRpdmVDb2xvckZpbHRlciA9IG5DcmVhdGVQb3J0ZXJEdWZmRmlsdGVyKG5hdGl2ZV9pbnN0YW5jZSwgc3JjQ29sb3IsIG1vZGUubmF0aXZlSW50KTsKKyAgICBwdWJsaWMgUG9ydGVyRHVmZkNvbG9yRmlsdGVyKGludCBjb2xvciwgUG9ydGVyRHVmZi5Nb2RlIG1vZGUpIHsKKyAgICAgICAgbUNvbG9yID0gY29sb3I7CisgICAgICAgIG1Nb2RlID0gbW9kZTsKKyAgICAgICAgdXBkYXRlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgQVJHQiBjb2xvciB1c2VkIHRvIHRpbnQgdGhlIHNvdXJjZSBwaXhlbHMgd2hlbiB0aGlzIGZpbHRlcgorICAgICAqIGlzIGFwcGxpZWQuCisgICAgICoKKyAgICAgKiBAc2VlIENvbG9yCisgICAgICogQHNlZSAjc2V0Q29sb3IoaW50KQorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0Q29sb3IoKSB7CisgICAgICAgIHJldHVybiBtQ29sb3I7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIHRoZSBjb2xvciB0byB0aW50IHRoZSBzb3VyY2UgcGl4ZWxzIHdpdGggd2hlbiB0aGlzIGNvbG9yCisgICAgICogZmlsdGVyIGlzIGFwcGxpZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29sb3IgQW4gQVJHQiB7QGxpbmsgQ29sb3IgY29sb3J9CisgICAgICoKKyAgICAgKiBAc2VlIENvbG9yCisgICAgICogQHNlZSAjZ2V0Q29sb3IoKQorICAgICAqIEBzZWUgI2dldE1vZGUoKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvbG9yKGludCBjb2xvcikgeworICAgICAgICBtQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgdXBkYXRlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgUG9ydGVyLUR1ZmYgbW9kZSB1c2VkIHRvIGNvbXBvc2l0ZSB0aGlzIGNvbG9yIGZpbHRlcidzCisgICAgICogY29sb3Igd2l0aCB0aGUgc291cmNlIHBpeGVsIHdoZW4gdGhpcyBmaWx0ZXIgaXMgYXBwbGllZC4KKyAgICAgKgorICAgICAqIEBzZWUgUG9ydGVyRHVmZgorICAgICAqIEBzZWUgI3NldE1vZGUoYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmLk1vZGUpCisgICAgICovCisgICAgcHVibGljIFBvcnRlckR1ZmYuTW9kZSBnZXRNb2RlKCkgeworICAgICAgICByZXR1cm4gbU1vZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3BlY2lmaWVzIHRoZSBQb3J0ZXItRHVmZiBtb2RlIHRvIHVzZSB3aGVuIGNvbXBvc2l0aW5nIHRoaXMgY29sb3IKKyAgICAgKiBmaWx0ZXIncyBjb2xvciB3aXRoIHRoZSBzb3VyY2UgcGl4ZWwgYXQgZHJhdyB0aW1lLgorICAgICAqCisgICAgICogQHNlZSBQb3J0ZXJEdWZmCisgICAgICogQHNlZSAjZ2V0TW9kZSgpCisgICAgICogQHNlZSAjZ2V0Q29sb3IoKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1vZGUoUG9ydGVyRHVmZi5Nb2RlIG1vZGUpIHsKKyAgICAgICAgbU1vZGUgPSBtb2RlOworICAgICAgICB1cGRhdGUoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlKCkgeworICAgICAgICBkZXN0cm95RmlsdGVyKG5hdGl2ZV9pbnN0YW5jZSwgbmF0aXZlQ29sb3JGaWx0ZXIpOworICAgICAgICBuYXRpdmVfaW5zdGFuY2UgPSBuYXRpdmVfQ3JlYXRlUG9ydGVyRHVmZkZpbHRlcihtQ29sb3IsIG1Nb2RlLm5hdGl2ZUludCk7CisgICAgICAgIG5hdGl2ZUNvbG9yRmlsdGVyID0gbkNyZWF0ZVBvcnRlckR1ZmZGaWx0ZXIobmF0aXZlX2luc3RhbmNlLCBtQ29sb3IsIG1Nb2RlLm5hdGl2ZUludCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGludCBuYXRpdmVfQ3JlYXRlUG9ydGVyRHVmZkZpbHRlcihpbnQgc3JjQ29sb3IsIGludCBwb3J0ZXJEdWZmTW9kZSk7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2UuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZS5qYXZhCmluZGV4IGM2OGM5ZjcuLmFlYTNlZTUgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZS5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZS5qYXZhCkBAIC00OCw3ICs0OCwxMCBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNwYXJzZUFycmF5PFNwYXJzZUFycmF5PFR5cGVmYWNlPj4gc1R5cGVmYWNlQ2FjaGUgPQogICAgICAgICAgICAgbmV3IFNwYXJzZUFycmF5PFNwYXJzZUFycmF5PFR5cGVmYWNlPj4oMyk7CiAKLSAgICBpbnQgbmF0aXZlX2luc3RhbmNlOworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIGludCBuYXRpdmVfaW5zdGFuY2U7CiAKICAgICAvLyBTdHlsZQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PUk1BTCA9IDA7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvQW5pbWF0aW9uRHJhd2FibGUuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9BbmltYXRpb25EcmF3YWJsZS5qYXZhCmluZGV4IGJkZTk3OGQuLjAyYjI1ODggMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9BbmltYXRpb25EcmF3YWJsZS5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9BbmltYXRpb25EcmF3YWJsZS5qYXZhCkBAIC04MSw2ICs4MSw3IEBACiBwdWJsaWMgY2xhc3MgQW5pbWF0aW9uRHJhd2FibGUgZXh0ZW5kcyBEcmF3YWJsZUNvbnRhaW5lciBpbXBsZW1lbnRzIFJ1bm5hYmxlLCBBbmltYXRhYmxlIHsKICAgICBwcml2YXRlIGZpbmFsIEFuaW1hdGlvblN0YXRlIG1BbmltYXRpb25TdGF0ZTsKICAgICBwcml2YXRlIGludCBtQ3VyRnJhbWUgPSAtMTsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUFuaW1hdGluZzsKICAgICBwcml2YXRlIGJvb2xlYW4gbU11dGF0ZWQ7CiAKICAgICBwdWJsaWMgQW5pbWF0aW9uRHJhd2FibGUoKSB7CkBAIC0xMzcsNyArMTM4LDcgQEAKICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGFuaW1hdGlvbiBpcyBydW5uaW5nLCBmYWxzZSBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1J1bm5pbmcoKSB7Ci0gICAgICAgIHJldHVybiBtQ3VyRnJhbWUgPiAtMTsKKyAgICAgICAgcmV0dXJuIG1BbmltYXRpbmc7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNTMsNiArMTU0LDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB1bnNjaGVkdWxlU2VsZihSdW5uYWJsZSB3aGF0KSB7CiAgICAgICAgIG1DdXJGcmFtZSA9IC0xOworICAgICAgICBtQW5pbWF0aW5nID0gZmFsc2U7CiAgICAgICAgIHN1cGVyLnVuc2NoZWR1bGVTZWxmKHdoYXQpOwogICAgIH0KIApAQCAtMjIyLDEyICsyMjQsMTMgQEAKICAgICAgICAgfQogICAgICAgICBtQ3VyRnJhbWUgPSBmcmFtZTsKICAgICAgICAgc2VsZWN0RHJhd2FibGUoZnJhbWUpOwotICAgICAgICBpZiAodW5zY2hlZHVsZSkgeworICAgICAgICBpZiAodW5zY2hlZHVsZSB8fCBhbmltYXRlKSB7CiAgICAgICAgICAgICB1bnNjaGVkdWxlU2VsZih0aGlzKTsKICAgICAgICAgfQogICAgICAgICBpZiAoYW5pbWF0ZSkgewotICAgICAgICAgICAgLy8gVW5zY2hlZHVsaW5nIG1heSBoYXZlIGNsb2JiZXJlZCB0aGlzIHZhbHVlOyByZXN0b3JlIGl0IHRvIHJlY29yZCB0aGF0IHdlJ3JlIGFuaW1hdGluZworICAgICAgICAgICAgLy8gVW5zY2hlZHVsaW5nIG1heSBoYXZlIGNsb2JiZXJlZCB0aGVzZSB2YWx1ZXM7IHJlc3RvcmUgdGhlbQogICAgICAgICAgICAgbUN1ckZyYW1lID0gZnJhbWU7CisgICAgICAgICAgICBtQW5pbWF0aW5nID0gdHJ1ZTsKICAgICAgICAgICAgIHNjaGVkdWxlU2VsZih0aGlzLCBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSArIG1BbmltYXRpb25TdGF0ZS5tRHVyYXRpb25zW2ZyYW1lXSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvRHJhd2FibGUuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZS5qYXZhCmluZGV4IDkzNzM4YjAuLmM4NGNkYjAgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZS5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9EcmF3YWJsZS5qYXZhCkBAIC0zOSw2ICszOSw3IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlN0YXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5YbWw7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CkBAIC0zOTksNyArNDAwLDcgQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0TGF5b3V0RGlyZWN0aW9uKGludCBsYXlvdXREaXJlY3Rpb24pIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRMYXlvdXREaXJlY3Rpb24oQFZpZXcuUmVzb2x2ZWRMYXlvdXREaXIgaW50IGxheW91dERpcmVjdGlvbikgewogICAgICAgICBpZiAoZ2V0TGF5b3V0RGlyZWN0aW9uKCkgIT0gbGF5b3V0RGlyZWN0aW9uKSB7CiAgICAgICAgICAgICBtTGF5b3V0RGlyZWN0aW9uID0gbGF5b3V0RGlyZWN0aW9uOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvR3JhZGllbnREcmF3YWJsZS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0dyYWRpZW50RHJhd2FibGUuamF2YQppbmRleCBiMzQwNzc3Li5kNDc5OWU2IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvR3JhZGllbnREcmF3YWJsZS5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9HcmFkaWVudERyYXdhYmxlLmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlOwogCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CkBAIC0yNCwxMiArMjUsMTIgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkRhc2hQYXRoRWZmZWN0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTGluZWFyR3JhZGllbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhdGg7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QaXhlbEZvcm1hdDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJhZGlhbEdyYWRpZW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3RGOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU2hhZGVyOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGF0aDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJhZGlhbEdyYWRpZW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3dlZXBHcmFkaWVudDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CkBAIC0yMzMsNiArMjM0LDIzIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogPHA+U2V0IHRoZSBzdHJva2Ugd2lkdGggYW5kIGNvbG9yIHN0YXRlIGxpc3QgZm9yIHRoZSBkcmF3YWJsZS4gSWYgd2lkdGgKKyAgICAgKiBpcyB6ZXJvLCB0aGVuIG5vIHN0cm9rZSBpcyBkcmF3bi48L3A+CisgICAgICogPHA+PHN0cm9uZz5Ob3RlPC9zdHJvbmc+OiBjaGFuZ2luZyB0aGlzIHByb3BlcnR5IHdpbGwgYWZmZWN0IGFsbCBpbnN0YW5jZXMKKyAgICAgKiBvZiBhIGRyYXdhYmxlIGxvYWRlZCBmcm9tIGEgcmVzb3VyY2UuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGludm9rZQorICAgICAqIHtAbGluayAjbXV0YXRlKCl9IGJlZm9yZSBjaGFuZ2luZyB0aGlzIHByb3BlcnR5LjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSB3aWR0aCBUaGUgd2lkdGggaW4gcGl4ZWxzIG9mIHRoZSBzdHJva2UKKyAgICAgKiBAcGFyYW0gY29sb3JTdGF0ZUxpc3QgVGhlIGNvbG9yIHN0YXRlIGxpc3Qgb2YgdGhlIHN0cm9rZQorICAgICAqCisgICAgICogQHNlZSAjbXV0YXRlKCkKKyAgICAgKiBAc2VlICNzZXRTdHJva2UoaW50LCBDb2xvclN0YXRlTGlzdCwgZmxvYXQsIGZsb2F0KQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFN0cm9rZShpbnQgd2lkdGgsIENvbG9yU3RhdGVMaXN0IGNvbG9yU3RhdGVMaXN0KSB7CisgICAgICAgIHNldFN0cm9rZSh3aWR0aCwgY29sb3JTdGF0ZUxpc3QsIDAsIDApOworICAgIH0KKworICAgIC8qKgogICAgICAqIDxwPlNldCB0aGUgc3Ryb2tlIHdpZHRoIGFuZCBjb2xvciBmb3IgdGhlIGRyYXdhYmxlLiBJZiB3aWR0aCBpcyB6ZXJvLAogICAgICAqIHRoZW4gbm8gc3Ryb2tlIGlzIGRyYXduLiBUaGlzIG1ldGhvZCBjYW4gYWxzbyBiZSB1c2VkIHRvIGRhc2ggdGhlIHN0cm9rZS48L3A+CiAgICAgICogPHA+PHN0cm9uZz5Ob3RlPC9zdHJvbmc+OiBjaGFuZ2luZyB0aGlzIHByb3BlcnR5IHdpbGwgYWZmZWN0IGFsbCBpbnN0YW5jZXMKQEAgLTI0OSw3ICsyNjcsMzkgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTdHJva2UoaW50IHdpZHRoLCBpbnQgY29sb3IsIGZsb2F0IGRhc2hXaWR0aCwgZmxvYXQgZGFzaEdhcCkgewogICAgICAgICBtR3JhZGllbnRTdGF0ZS5zZXRTdHJva2Uod2lkdGgsIGNvbG9yLCBkYXNoV2lkdGgsIGRhc2hHYXApOworICAgICAgICBzZXRTdHJva2VJbnRlcm5hbCh3aWR0aCwgY29sb3IsIGRhc2hXaWR0aCwgZGFzaEdhcCk7CisgICAgfQogCisgICAgLyoqCisgICAgICogPHA+U2V0IHRoZSBzdHJva2Ugd2lkdGggYW5kIGNvbG9yIHN0YXRlIGxpc3QgZm9yIHRoZSBkcmF3YWJsZS4gSWYgd2lkdGgKKyAgICAgKiBpcyB6ZXJvLCB0aGVuIG5vIHN0cm9rZSBpcyBkcmF3bi4gVGhpcyBtZXRob2QgY2FuIGFsc28gYmUgdXNlZCB0byBkYXNoCisgICAgICogdGhlIHN0cm9rZS48L3A+CisgICAgICogPHA+PHN0cm9uZz5Ob3RlPC9zdHJvbmc+OiBjaGFuZ2luZyB0aGlzIHByb3BlcnR5IHdpbGwgYWZmZWN0IGFsbCBpbnN0YW5jZXMKKyAgICAgKiBvZiBhIGRyYXdhYmxlIGxvYWRlZCBmcm9tIGEgcmVzb3VyY2UuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGludm9rZQorICAgICAqIHtAbGluayAjbXV0YXRlKCl9IGJlZm9yZSBjaGFuZ2luZyB0aGlzIHByb3BlcnR5LjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSB3aWR0aCBUaGUgd2lkdGggaW4gcGl4ZWxzIG9mIHRoZSBzdHJva2UKKyAgICAgKiBAcGFyYW0gY29sb3JTdGF0ZUxpc3QgVGhlIGNvbG9yIHN0YXRlIGxpc3Qgb2YgdGhlIHN0cm9rZQorICAgICAqIEBwYXJhbSBkYXNoV2lkdGggVGhlIGxlbmd0aCBpbiBwaXhlbHMgb2YgdGhlIGRhc2hlcywgc2V0IHRvIDAgdG8gZGlzYWJsZSBkYXNoZXMKKyAgICAgKiBAcGFyYW0gZGFzaEdhcCBUaGUgZ2FwIGluIHBpeGVscyBiZXR3ZWVuIGRhc2hlcworICAgICAqCisgICAgICogQHNlZSAjbXV0YXRlKCkKKyAgICAgKiBAc2VlICNzZXRTdHJva2UoaW50LCBDb2xvclN0YXRlTGlzdCkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRTdHJva2UoCisgICAgICAgICAgICBpbnQgd2lkdGgsIENvbG9yU3RhdGVMaXN0IGNvbG9yU3RhdGVMaXN0LCBmbG9hdCBkYXNoV2lkdGgsIGZsb2F0IGRhc2hHYXApIHsKKyAgICAgICAgaWYgKGNvbG9yU3RhdGVMaXN0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHNldFN0cm9rZSh3aWR0aCwgQ29sb3IuVFJBTlNQQVJFTlQsIGRhc2hXaWR0aCwgZGFzaEdhcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtR3JhZGllbnRTdGF0ZS5zZXRTdHJva2Uod2lkdGgsIGNvbG9yU3RhdGVMaXN0LCBkYXNoV2lkdGgsIGRhc2hHYXApOworCisgICAgICAgICAgICBmaW5hbCBpbnRbXSBzdGF0ZVNldCA9IGdldFN0YXRlKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgY29sb3IgPSBjb2xvclN0YXRlTGlzdC5nZXRDb2xvckZvclN0YXRlKHN0YXRlU2V0LCAwKTsKKyAgICAgICAgICAgIHNldFN0cm9rZUludGVybmFsKHdpZHRoLCBjb2xvciwgZGFzaFdpZHRoLCBkYXNoR2FwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRTdHJva2VJbnRlcm5hbChpbnQgd2lkdGgsIGludCBjb2xvciwgZmxvYXQgZGFzaFdpZHRoLCBmbG9hdCBkYXNoR2FwKSB7CiAgICAgICAgIGlmIChtU3Ryb2tlUGFpbnQgPT0gbnVsbCkgIHsKICAgICAgICAgICAgIG1TdHJva2VQYWludCA9IG5ldyBQYWludChQYWludC5BTlRJX0FMSUFTX0ZMQUcpOwogICAgICAgICAgICAgbVN0cm9rZVBhaW50LnNldFN0eWxlKFBhaW50LlN0eWxlLlNUUk9LRSk7CkBAIC00NzksNyArNTI5LDggQEAKICAgICAgICAgICAgIG1GaWxsUGFpbnQuc2V0QWxwaGEoY3VyckZpbGxBbHBoYSk7CiAgICAgICAgICAgICBtRmlsbFBhaW50LnNldERpdGhlcihtRGl0aGVyKTsKICAgICAgICAgICAgIG1GaWxsUGFpbnQuc2V0Q29sb3JGaWx0ZXIobUNvbG9yRmlsdGVyKTsKLSAgICAgICAgICAgIGlmIChtQ29sb3JGaWx0ZXIgIT0gbnVsbCAmJiAhbUdyYWRpZW50U3RhdGUubUhhc1NvbGlkQ29sb3IpIHsKKyAgICAgICAgICAgIGlmIChtQ29sb3JGaWx0ZXIgIT0gbnVsbCAmJiAhbUdyYWRpZW50U3RhdGUubUhhc1NvbGlkQ29sb3IKKyAgICAgICAgICAgICAgICAgICAgJiYgbUdyYWRpZW50U3RhdGUubUNvbG9yU3RhdGVMaXN0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBtRmlsbFBhaW50LnNldENvbG9yKG1BbHBoYSA8PCAyNCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaGF2ZVN0cm9rZSkgewpAQCAtNjEwLDcgKzY2MSw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogPHA+Q2hhbmdlcyB0aGlzIGRyYXdiYWxlIHRvIHVzZSBhIHNpbmdsZSBjb2xvciBpbnN0ZWFkIG9mIGEgZ3JhZGllbnQuPC9wPgorICAgICAqIDxwPkNoYW5nZXMgdGhpcyBkcmF3YWJsZSB0byB1c2UgYSBzaW5nbGUgY29sb3IgaW5zdGVhZCBvZiBhIGdyYWRpZW50LjwvcD4KICAgICAgKiA8cD48c3Ryb25nPk5vdGU8L3N0cm9uZz46IGNoYW5naW5nIGNvbG9yIHdpbGwgYWZmZWN0IGFsbCBpbnN0YW5jZXMKICAgICAgKiBvZiBhIGRyYXdhYmxlIGxvYWRlZCBmcm9tIGEgcmVzb3VyY2UuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGludm9rZQogICAgICAqIHtAbGluayAjbXV0YXRlKCl9IGJlZm9yZSBjaGFuZ2luZyB0aGUgY29sb3IuPC9wPgpAQCAtNjI2LDYgKzY3Nyw3NCBAQAogICAgICAgICBpbnZhbGlkYXRlU2VsZigpOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIENoYW5nZXMgdGhpcyBkcmF3YWJsZSB0byB1c2UgYSBzaW5nbGUgY29sb3Igc3RhdGUgbGlzdCBpbnN0ZWFkIG9mIGEKKyAgICAgKiBncmFkaWVudC4gQ2FsbGluZyB0aGlzIG1ldGhvZCB3aXRoIGEgbnVsbCBhcmd1bWVudCB3aWxsIGNsZWFyIHRoZSBjb2xvcgorICAgICAqIGFuZCBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcge0BsaW5rICNzZXRDb2xvcihpbnQpfSB3aXRoIHRoZSBhcmd1bWVudAorICAgICAqIHtAbGluayBDb2xvciNUUkFOU1BBUkVOVH0uCisgICAgICogPHA+CisgICAgICogPHN0cm9uZz5Ob3RlPC9zdHJvbmc+OiBjaGFuZ2luZyBjb2xvciB3aWxsIGFmZmVjdCBhbGwgaW5zdGFuY2VzIG9mIGEKKyAgICAgKiBkcmF3YWJsZSBsb2FkZWQgZnJvbSBhIHJlc291cmNlLiBJdCBpcyByZWNvbW1lbmRlZCB0byBpbnZva2UKKyAgICAgKiB7QGxpbmsgI211dGF0ZSgpfSBiZWZvcmUgY2hhbmdpbmcgdGhlIGNvbG9yLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb2xvclN0YXRlTGlzdCBUaGUgY29sb3Igc3RhdGUgbGlzdCB1c2VkIHRvIGZpbGwgdGhlIHNoYXBlCisgICAgICogQHNlZSAjbXV0YXRlKCkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb2xvcihDb2xvclN0YXRlTGlzdCBjb2xvclN0YXRlTGlzdCkgeworICAgICAgICBpZiAoY29sb3JTdGF0ZUxpc3QgPT0gbnVsbCkgeworICAgICAgICAgICAgc2V0Q29sb3IoQ29sb3IuVFJBTlNQQVJFTlQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmluYWwgaW50IGNvbG9yID0gY29sb3JTdGF0ZUxpc3QuZ2V0Q29sb3JGb3JTdGF0ZShnZXRTdGF0ZSgpLCAwKTsKKyAgICAgICAgICAgIG1HcmFkaWVudFN0YXRlLnNldENvbG9yU3RhdGVMaXN0KGNvbG9yU3RhdGVMaXN0KTsKKyAgICAgICAgICAgIG1GaWxsUGFpbnQuc2V0Q29sb3IoY29sb3IpOworICAgICAgICAgICAgaW52YWxpZGF0ZVNlbGYoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uU3RhdGVDaGFuZ2UoaW50W10gc3RhdGVTZXQpIHsKKyAgICAgICAgYm9vbGVhbiBpbnZhbGlkYXRlU2VsZiA9IGZhbHNlOworCisgICAgICAgIGZpbmFsIEdyYWRpZW50U3RhdGUgcyA9IG1HcmFkaWVudFN0YXRlOworICAgICAgICBmaW5hbCBDb2xvclN0YXRlTGlzdCBzdGF0ZUxpc3QgPSBzLm1Db2xvclN0YXRlTGlzdDsKKyAgICAgICAgaWYgKHN0YXRlTGlzdCAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgbmV3Q29sb3IgPSBzdGF0ZUxpc3QuZ2V0Q29sb3JGb3JTdGF0ZShzdGF0ZVNldCwgMCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgb2xkQ29sb3IgPSBtRmlsbFBhaW50LmdldENvbG9yKCk7CisgICAgICAgICAgICBpZiAob2xkQ29sb3IgIT0gbmV3Q29sb3IpIHsKKyAgICAgICAgICAgICAgICBtRmlsbFBhaW50LnNldENvbG9yKG5ld0NvbG9yKTsKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlU2VsZiA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBQYWludCBzdHJva2VQYWludCA9IG1TdHJva2VQYWludDsKKyAgICAgICAgaWYgKHN0cm9rZVBhaW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIENvbG9yU3RhdGVMaXN0IHN0cm9rZVN0YXRlTGlzdCA9IHMubVN0cm9rZUNvbG9yU3RhdGVMaXN0OworICAgICAgICAgICAgaWYgKHN0cm9rZVN0YXRlTGlzdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IG5ld1N0cm9rZUNvbG9yID0gc3Ryb2tlU3RhdGVMaXN0LmdldENvbG9yRm9yU3RhdGUoc3RhdGVTZXQsIDApOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBvbGRTdHJva2VDb2xvciA9IHN0cm9rZVBhaW50LmdldENvbG9yKCk7CisgICAgICAgICAgICAgICAgaWYgKG9sZFN0cm9rZUNvbG9yICE9IG5ld1N0cm9rZUNvbG9yKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cm9rZVBhaW50LnNldENvbG9yKG5ld1N0cm9rZUNvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZVNlbGYgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbnZhbGlkYXRlU2VsZikgeworICAgICAgICAgICAgaW52YWxpZGF0ZVNlbGYoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzU3RhdGVmdWwoKSB7CisgICAgICAgIGZpbmFsIEdyYWRpZW50U3RhdGUgcyA9IG1HcmFkaWVudFN0YXRlOworICAgICAgICByZXR1cm4gc3VwZXIuaXNTdGF0ZWZ1bCgpCisgICAgICAgICAgICAgICAgfHwgKHMubUNvbG9yU3RhdGVMaXN0ICE9IG51bGwgJiYgcy5tQ29sb3JTdGF0ZUxpc3QuaXNTdGF0ZWZ1bCgpKQorICAgICAgICAgICAgICAgIHx8IChzLm1TdHJva2VDb2xvclN0YXRlTGlzdCAhPSBudWxsICYmIHMubVN0cm9rZUNvbG9yU3RhdGVMaXN0LmlzU3RhdGVmdWwoKSk7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBnZXRDaGFuZ2luZ0NvbmZpZ3VyYXRpb25zKCkgewogICAgICAgICByZXR1cm4gc3VwZXIuZ2V0Q2hhbmdpbmdDb25maWd1cmF0aW9ucygpIHwgbUdyYWRpZW50U3RhdGUubUNoYW5naW5nQ29uZmlndXJhdGlvbnM7CkBAIC03OTEsNyArOTEwLDcgQEAKIAogICAgICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBzb2xpZCBjb2xvciwgdGhlIGFscGhhIGNoYW5uZWwgbXVzdCBiZQogICAgICAgICAgICAgICAgIC8vIG1heGVkIG91dCBzbyB0aGF0IGFscGhhIG1vZHVsYXRpb24gd29ya3MgY29ycmVjdGx5LgotICAgICAgICAgICAgICAgIGlmICghc3QubUhhc1NvbGlkQ29sb3IpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0Lm1IYXNTb2xpZENvbG9yICYmIHN0Lm1Db2xvclN0YXRlTGlzdCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG1GaWxsUGFpbnQuc2V0Q29sb3IoQ29sb3IuQkxBQ0spOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTk2NywyNSArMTA4NiwyNSBAQAogICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygic29saWQiKSkgewogICAgICAgICAgICAgICAgIGEgPSByLm9idGFpbkF0dHJpYnV0ZXMoYXR0cnMsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5HcmFkaWVudERyYXdhYmxlU29saWQpOwotICAgICAgICAgICAgICAgIGludCBhcmdiID0gYS5nZXRDb2xvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdyYWRpZW50RHJhd2FibGVTb2xpZF9jb2xvciwgMCk7CisgICAgICAgICAgICAgICAgZmluYWwgQ29sb3JTdGF0ZUxpc3QgY29sb3JTdGF0ZUxpc3QgPSBhLmdldENvbG9yU3RhdGVMaXN0KAorICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuR3JhZGllbnREcmF3YWJsZVNvbGlkX2NvbG9yKTsKICAgICAgICAgICAgICAgICBhLnJlY3ljbGUoKTsKLSAgICAgICAgICAgICAgICBzZXRDb2xvcihhcmdiKTsKKyAgICAgICAgICAgICAgICBzZXRDb2xvcihjb2xvclN0YXRlTGlzdCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJzdHJva2UiKSkgewogICAgICAgICAgICAgICAgIGEgPSByLm9idGFpbkF0dHJpYnV0ZXMoYXR0cnMsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5HcmFkaWVudERyYXdhYmxlU3Ryb2tlKTsKLSAgICAgICAgICAgICAgICBpbnQgd2lkdGggPSBhLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgd2lkdGggPSBhLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdyYWRpZW50RHJhd2FibGVTdHJva2Vfd2lkdGgsIDApOwotICAgICAgICAgICAgICAgIGludCBjb2xvciA9IGEuZ2V0Q29sb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5HcmFkaWVudERyYXdhYmxlU3Ryb2tlX2NvbG9yLCAwKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBkYXNoV2lkdGggPSBhLmdldERpbWVuc2lvbigKKyAgICAgICAgICAgICAgICBmaW5hbCBDb2xvclN0YXRlTGlzdCBjb2xvclN0YXRlTGlzdCA9IGEuZ2V0Q29sb3JTdGF0ZUxpc3QoCisgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5HcmFkaWVudERyYXdhYmxlU3Ryb2tlX2NvbG9yKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCBkYXNoV2lkdGggPSBhLmdldERpbWVuc2lvbigKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLkdyYWRpZW50RHJhd2FibGVTdHJva2VfZGFzaFdpZHRoLCAwKTsKICAgICAgICAgICAgICAgICBpZiAoZGFzaFdpZHRoICE9IDAuMGYpIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGFzaEdhcCA9IGEuZ2V0RGltZW5zaW9uKAorICAgICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCBkYXNoR2FwID0gYS5nZXREaW1lbnNpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuR3JhZGllbnREcmF3YWJsZVN0cm9rZV9kYXNoR2FwLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0U3Ryb2tlKHdpZHRoLCBjb2xvciwgZGFzaFdpZHRoLCBkYXNoR2FwKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0U3Ryb2tlKHdpZHRoLCBjb2xvclN0YXRlTGlzdCwgZGFzaFdpZHRoLCBkYXNoR2FwKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzZXRTdHJva2Uod2lkdGgsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0U3Ryb2tlKHdpZHRoLCBjb2xvclN0YXRlTGlzdCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGEucmVjeWNsZSgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygiY29ybmVycyIpKSB7CkBAIC0xMDc3LDYgKzExOTYsOCBAQAogICAgICAgICBwdWJsaWMgaW50IG1TaGFwZSA9IFJFQ1RBTkdMRTsKICAgICAgICAgcHVibGljIGludCBtR3JhZGllbnQgPSBMSU5FQVJfR1JBRElFTlQ7CiAgICAgICAgIHB1YmxpYyBPcmllbnRhdGlvbiBtT3JpZW50YXRpb247CisgICAgICAgIHB1YmxpYyBDb2xvclN0YXRlTGlzdCBtQ29sb3JTdGF0ZUxpc3Q7CisgICAgICAgIHB1YmxpYyBDb2xvclN0YXRlTGlzdCBtU3Ryb2tlQ29sb3JTdGF0ZUxpc3Q7CiAgICAgICAgIHB1YmxpYyBpbnRbXSBtQ29sb3JzOwogICAgICAgICBwdWJsaWMgaW50W10gbVRlbXBDb2xvcnM7IC8vIG5vIG5lZWQgdG8gY29weQogICAgICAgICBwdWJsaWMgZmxvYXRbXSBtVGVtcFBvc2l0aW9uczsgLy8gbm8gbmVlZCB0byBjb3B5CkBAIC0xMTEzLDYgKzEyMzQsNyBAQAogICAgICAgICAgICAgbVNoYXBlID0gc3RhdGUubVNoYXBlOwogICAgICAgICAgICAgbUdyYWRpZW50ID0gc3RhdGUubUdyYWRpZW50OwogICAgICAgICAgICAgbU9yaWVudGF0aW9uID0gc3RhdGUubU9yaWVudGF0aW9uOworICAgICAgICAgICAgbUNvbG9yU3RhdGVMaXN0ID0gc3RhdGUubUNvbG9yU3RhdGVMaXN0OwogICAgICAgICAgICAgaWYgKHN0YXRlLm1Db2xvcnMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1Db2xvcnMgPSBzdGF0ZS5tQ29sb3JzLmNsb25lKCk7CiAgICAgICAgICAgICB9CkBAIC0xMTc4LDEzICsxMzAwLDIyIEBACiAgICAgICAgIHB1YmxpYyB2b2lkIHNldENvbG9ycyhpbnRbXSBjb2xvcnMpIHsKICAgICAgICAgICAgIG1IYXNTb2xpZENvbG9yID0gZmFsc2U7CiAgICAgICAgICAgICBtQ29sb3JzID0gY29sb3JzOworICAgICAgICAgICAgbUNvbG9yU3RhdGVMaXN0ID0gbnVsbDsKICAgICAgICAgICAgIGNvbXB1dGVPcGFjaXR5KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHB1YmxpYyB2b2lkIHNldFNvbGlkQ29sb3IoaW50IGFyZ2IpIHsKLSAgICAgICAgICAgIG1IYXNTb2xpZENvbG9yID0gdHJ1ZTsKKyAgICAgICAgICAgIG1IYXNTb2xpZENvbG9yID0gYXJnYiAhPSBDb2xvci5UUkFOU1BBUkVOVDsKICAgICAgICAgICAgIG1Tb2xpZENvbG9yID0gYXJnYjsKICAgICAgICAgICAgIG1Db2xvcnMgPSBudWxsOworICAgICAgICAgICAgbUNvbG9yU3RhdGVMaXN0ID0gbnVsbDsKKyAgICAgICAgICAgIGNvbXB1dGVPcGFjaXR5KCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRDb2xvclN0YXRlTGlzdChDb2xvclN0YXRlTGlzdCBjb2xvclN0YXRlTGlzdCkgeworICAgICAgICAgICAgbUhhc1NvbGlkQ29sb3IgPSBmYWxzZTsKKyAgICAgICAgICAgIG1Db2xvcnMgPSBudWxsOworICAgICAgICAgICAgbUNvbG9yU3RhdGVMaXN0ID0gY29sb3JTdGF0ZUxpc3Q7CiAgICAgICAgICAgICBjb21wdXRlT3BhY2l0eSgpOwogICAgICAgICB9CiAKQEAgLTExOTksMTEgKzEzMzAsMjMgQEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtU3Ryb2tlV2lkdGggPiAwICYmICFpc09wYXF1ZShtU3Ryb2tlQ29sb3IpKSB7CisgICAgICAgICAgICBpZiAobVN0cm9rZVdpZHRoID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChtU3Ryb2tlQ29sb3JTdGF0ZUxpc3QgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1TdHJva2VDb2xvclN0YXRlTGlzdC5pc09wYXF1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtT3BhcXVlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc09wYXF1ZShtU3Ryb2tlQ29sb3IpKSB7CisgICAgICAgICAgICAgICAgICAgIG1PcGFxdWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1Db2xvclN0YXRlTGlzdCAhPSBudWxsICYmICFtQ29sb3JTdGF0ZUxpc3QuaXNPcGFxdWUoKSkgewogICAgICAgICAgICAgICAgIG1PcGFxdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKG1IYXNTb2xpZENvbG9yKSB7CiAgICAgICAgICAgICAgICAgbU9wYXF1ZSA9IGlzT3BhcXVlKG1Tb2xpZENvbG9yKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjI4LDEyICsxMzcxLDIzIEBACiAgICAgICAgIHB1YmxpYyB2b2lkIHNldFN0cm9rZShpbnQgd2lkdGgsIGludCBjb2xvcikgewogICAgICAgICAgICAgbVN0cm9rZVdpZHRoID0gd2lkdGg7CiAgICAgICAgICAgICBtU3Ryb2tlQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgICAgIG1TdHJva2VDb2xvclN0YXRlTGlzdCA9IG51bGw7CiAgICAgICAgICAgICBjb21wdXRlT3BhY2l0eSgpOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgc2V0U3Ryb2tlKGludCB3aWR0aCwgaW50IGNvbG9yLCBmbG9hdCBkYXNoV2lkdGgsIGZsb2F0IGRhc2hHYXApIHsKICAgICAgICAgICAgIG1TdHJva2VXaWR0aCA9IHdpZHRoOwogICAgICAgICAgICAgbVN0cm9rZUNvbG9yID0gY29sb3I7CisgICAgICAgICAgICBtU3Ryb2tlQ29sb3JTdGF0ZUxpc3QgPSBudWxsOworICAgICAgICAgICAgbVN0cm9rZURhc2hXaWR0aCA9IGRhc2hXaWR0aDsKKyAgICAgICAgICAgIG1TdHJva2VEYXNoR2FwID0gZGFzaEdhcDsKKyAgICAgICAgICAgIGNvbXB1dGVPcGFjaXR5KCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRTdHJva2UoCisgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBDb2xvclN0YXRlTGlzdCBjb2xvclN0YXRlTGlzdCwgZmxvYXQgZGFzaFdpZHRoLCBmbG9hdCBkYXNoR2FwKSB7CisgICAgICAgICAgICBtU3Ryb2tlV2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIG1TdHJva2VDb2xvclN0YXRlTGlzdCA9IGNvbG9yU3RhdGVMaXN0OwogICAgICAgICAgICAgbVN0cm9rZURhc2hXaWR0aCA9IGRhc2hXaWR0aDsKICAgICAgICAgICAgIG1TdHJva2VEYXNoR2FwID0gZGFzaEdhcDsKICAgICAgICAgICAgIGNvbXB1dGVPcGFjaXR5KCk7CkBAIC0xMjc0LDYgKzE0MjgsMTAgQEAKICAgICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVdpdGhTdGF0ZShHcmFkaWVudFN0YXRlIHN0YXRlKSB7CiAgICAgICAgIGlmIChzdGF0ZS5tSGFzU29saWRDb2xvcikgewogICAgICAgICAgICAgbUZpbGxQYWludC5zZXRDb2xvcihzdGF0ZS5tU29saWRDb2xvcik7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubUNvbG9yU3RhdGVMaXN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIGludFtdIGN1cnJlbnRTdGF0ZSA9IGdldFN0YXRlKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgc3RhdGVDb2xvciA9IHN0YXRlLm1Db2xvclN0YXRlTGlzdC5nZXRDb2xvckZvclN0YXRlKGN1cnJlbnRTdGF0ZSwgMCk7CisgICAgICAgICAgICBtRmlsbFBhaW50LnNldENvbG9yKHN0YXRlQ29sb3IpOwogICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLm1Db2xvcnMgPT0gbnVsbCkgewogICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHNvbGlkIGNvbG9yIGFuZCB3ZSBkb24ndCBoYXZlIGEgZ3JhZGllbnQsCiAgICAgICAgICAgICAvLyB0aGUgYXBwIGlzIHN0cm9raW5nIHRoZSBzaGFwZSwgc2V0IHRoZSBjb2xvciB0byB0aGUgZGVmYXVsdApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0xheWVyRHJhd2FibGUuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9MYXllckRyYXdhYmxlLmphdmEKaW5kZXggODFjYzExYi4uZjJlOTk4OCAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0xheWVyRHJhd2FibGUuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvTGF5ZXJEcmF3YWJsZS5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogCi0vKiogCisvKioKICAqIEEgRHJhd2FibGUgdGhhdCBtYW5hZ2VzIGFuIGFycmF5IG9mIG90aGVyIERyYXdhYmxlcy4gVGhlc2UgYXJlIGRyYXduIGluIGFycmF5CiAgKiBvcmRlciwgc28gdGhlIGVsZW1lbnQgd2l0aCB0aGUgbGFyZ2VzdCBpbmRleCB3aWxsIGJlIGRyYXduIG9uIHRvcC4KICAqIDxwPgpAQCAtNDcsNiArNDcsMTUgQEAKICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0xheWVyRHJhd2FibGVJdGVtX2lkCiAqLwogcHVibGljIGNsYXNzIExheWVyRHJhd2FibGUgZXh0ZW5kcyBEcmF3YWJsZSBpbXBsZW1lbnRzIERyYXdhYmxlLkNhbGxiYWNrIHsKKyAgICAvKioKKyAgICAgKiBQYWRkaW5nIG1vZGUgdXNlZCB0byBuZXN0IGVhY2ggbGF5ZXIgaW5zaWRlIHRoZSBwYWRkaW5nIG9mIHRoZSBwcmV2aW91cworICAgICAqIGxheWVyLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBRERJTkdfTU9ERV9ORVNUID0gMDsKKworICAgIC8qKiBQYWRkaW5nIG1vZGUgdXNlZCB0byBzdGFjayBlYWNoIGxheWVyIGRpcmVjdGx5IGF0b3AgdGhlIHByZXZpb3VzIGxheWVyLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBRERJTkdfTU9ERV9TVEFDSyA9IDE7CisKICAgICBMYXllclN0YXRlIG1MYXllclN0YXRlOwogCiAgICAgcHJpdmF0ZSBpbnQgbU9wYWNpdHlPdmVycmlkZSA9IFBpeGVsRm9ybWF0LlVOS05PV047CkBAIC01NSw4ICs2NCwxMCBAQAogICAgIHByaXZhdGUgaW50W10gbVBhZGRpbmdSOwogICAgIHByaXZhdGUgaW50W10gbVBhZGRpbmdCOwogCisgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1DYWNoZWRQYWRkaW5nID0gbmV3IFJlY3QoKTsKICAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRtcFJlY3QgPSBuZXcgUmVjdCgpOwogICAgIHByaXZhdGUgYm9vbGVhbiBtTXV0YXRlZDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUhhc0NhY2hlZFBhZGRpbmc7CiAKICAgICAvKioKICAgICAgKiBDcmVhdGUgYSBuZXcgbGF5ZXIgZHJhd2FibGUgd2l0aCB0aGUgbGlzdCBvZiBzcGVjaWZpZWQgbGF5ZXJzLgpAQCAtOTAsNyArMTAxLDcgQEAKIAogICAgICAgICBlbnN1cmVQYWRkaW5nKCk7CiAgICAgfQotICAgIAorCiAgICAgTGF5ZXJEcmF3YWJsZSgpIHsKICAgICAgICAgdGhpcygoTGF5ZXJTdGF0ZSkgbnVsbCwgbnVsbCk7CiAgICAgfQpAQCAtMTIyLDYgKzEzMyw5IEBACiAgICAgICAgIHNldEF1dG9NaXJyb3JlZChhLmdldEJvb2xlYW4oY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGF5ZXJEcmF3YWJsZV9hdXRvTWlycm9yZWQsCiAgICAgICAgICAgICAgICAgZmFsc2UpKTsKIAorICAgICAgICBtTGF5ZXJTdGF0ZS5tUGFkZGluZ01vZGUgPSBhLmdldEludGVnZXIoCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuTGF5ZXJEcmF3YWJsZUl0ZW1fZHJhd2FibGUsIFBBRERJTkdfTU9ERV9ORVNUKTsKKwogICAgICAgICBhLnJlY3ljbGUoKTsKIAogICAgICAgICBmaW5hbCBpbnQgaW5uZXJEZXB0aCA9IHBhcnNlci5nZXREZXB0aCgpICsgMTsKQEAgLTE4NywxOSArMjAxLDIwIEBACiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGFkZExheWVyKERyYXdhYmxlIGxheWVyLCBpbnQgaWQsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pIHsKICAgICAgICAgZmluYWwgTGF5ZXJTdGF0ZSBzdCA9IG1MYXllclN0YXRlOwotICAgICAgICBpbnQgTiA9IHN0Lm1DaGlsZHJlbiAhPSBudWxsID8gc3QubUNoaWxkcmVuLmxlbmd0aCA6IDA7Ci0gICAgICAgIGludCBpID0gc3QubU51bTsKKyAgICAgICAgZmluYWwgaW50IE4gPSBzdC5tQ2hpbGRyZW4gIT0gbnVsbCA/IHN0Lm1DaGlsZHJlbi5sZW5ndGggOiAwOworICAgICAgICBmaW5hbCBpbnQgaSA9IHN0Lm1OdW07CiAgICAgICAgIGlmIChpID49IE4pIHsKLSAgICAgICAgICAgIENoaWxkRHJhd2FibGVbXSBudSA9IG5ldyBDaGlsZERyYXdhYmxlW04gKyAxMF07CisgICAgICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gbnUgPSBuZXcgQ2hpbGREcmF3YWJsZVtOICsgMTBdOwogICAgICAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShzdC5tQ2hpbGRyZW4sIDAsIG51LCAwLCBpKTsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgc3QubUNoaWxkcmVuID0gbnU7CiAgICAgICAgIH0KIAogICAgICAgICBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW5DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zIHw9IGxheWVyLmdldENoYW5naW5nQ29uZmlndXJhdGlvbnMoKTsKLSAgICAgICAgCi0gICAgICAgIENoaWxkRHJhd2FibGUgY2hpbGREcmF3YWJsZSA9IG5ldyBDaGlsZERyYXdhYmxlKCk7CisKKyAgICAgICAgZmluYWwgQ2hpbGREcmF3YWJsZSBjaGlsZERyYXdhYmxlID0gbmV3IENoaWxkRHJhd2FibGUoKTsKICAgICAgICAgc3QubUNoaWxkcmVuW2ldID0gY2hpbGREcmF3YWJsZTsKICAgICAgICAgY2hpbGREcmF3YWJsZS5tSWQgPSBpZDsKICAgICAgICAgY2hpbGREcmF3YWJsZS5tRHJhd2FibGUgPSBsYXllcjsKQEAgLTIyMSwyNiArMjM2LDI2IEBACiAgICAgICovCiAgICAgcHVibGljIERyYXdhYmxlIGZpbmREcmF3YWJsZUJ5TGF5ZXJJZChpbnQgaWQpIHsKICAgICAgICAgZmluYWwgQ2hpbGREcmF3YWJsZVtdIGxheWVycyA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkgPSBtTGF5ZXJTdGF0ZS5tTnVtIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgaWYgKGxheWVyc1tpXS5tSWQgPT0gaWQpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXJzW2ldLm1EcmF3YWJsZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBJRCBvZiBhIGxheWVyLgotICAgICAqIAotICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGxheWVyIHdoaWNoIHdpbGwgcmVjZWl2ZWQgdGhlIElELiAKKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGxheWVyIHdoaWNoIHdpbGwgcmVjZWl2ZWQgdGhlIElELgogICAgICAqIEBwYXJhbSBpZCBUaGUgSUQgdG8gYXNzaWduIHRvIHRoZSBsYXllci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRJZChpbnQgaW5kZXgsIGludCBpZCkgewogICAgICAgICBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW5baW5kZXhdLm1JZCA9IGlkOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBsYXllcnMgY29udGFpbmVkIHdpdGhpbiB0aGlzLgogICAgICAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBsYXllcnMuCkBAIC0yNjUsMTUgKzI4MCwxNSBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgbGF5ZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBpZCBvZiB0aGUgbGF5ZXIgb3Ige0BsaW5rIGFuZHJvaWQudmlldy5WaWV3I05PX0lEfSBpZiB0aGUgbGF5ZXIgaGFzIG5vIGlkLiAKKyAgICAgKiBAcmV0dXJuIFRoZSBpZCBvZiB0aGUgbGF5ZXIgb3Ige0BsaW5rIGFuZHJvaWQudmlldy5WaWV3I05PX0lEfSBpZiB0aGUgbGF5ZXIgaGFzIG5vIGlkLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0SWQoaW50IGluZGV4KSB7CiAgICAgICAgIHJldHVybiBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW5baW5kZXhdLm1JZDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIChvciByZXBsYWNlcykgdGhlIHtAbGluayBEcmF3YWJsZX0gZm9yIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBpZC4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBpZCBUaGUgbGF5ZXIgSUQgdG8gc2VhcmNoIGZvci4KICAgICAgKiBAcGFyYW0gZHJhd2FibGUgVGhlIHJlcGxhY2VtZW50IHtAbGluayBEcmF3YWJsZX0uCiAgICAgICogQHJldHVybiBXaGV0aGVyIHRoZSB7QGxpbmsgRHJhd2FibGV9IHdhcyByZXBsYWNlZCAoY291bGQgcmV0dXJuIGZhbHNlIGlmCkBAIC0yODEsNDMgKzI5Niw4OCBAQAogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHNldERyYXdhYmxlQnlMYXllcklkKGludCBpZCwgRHJhd2FibGUgZHJhd2FibGUpIHsKICAgICAgICAgZmluYWwgQ2hpbGREcmF3YWJsZVtdIGxheWVycyA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkgPSBtTGF5ZXJTdGF0ZS5tTnVtIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIGlmIChsYXllcnNbaV0ubUlkID09IGlkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxheWVyc1tpXS5tRHJhd2FibGUgIT0gbnVsbCkgeworICAgICAgICBmaW5hbCBpbnQgTiA9IG1MYXllclN0YXRlLm1OdW07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlIGNoaWxkRHJhd2FibGUgPSBsYXllcnNbaV07CisgICAgICAgICAgICBpZiAoY2hpbGREcmF3YWJsZS5tSWQgPT0gaWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGREcmF3YWJsZS5tRHJhd2FibGUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZHJhd2FibGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVjdCBib3VuZHMgPSBsYXllcnNbaV0ubURyYXdhYmxlLmdldEJvdW5kcygpOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVjdCBib3VuZHMgPSBjaGlsZERyYXdhYmxlLm1EcmF3YWJsZS5nZXRCb3VuZHMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlLnNldEJvdW5kcyhib3VuZHMpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyc1tpXS5tRHJhd2FibGUuc2V0Q2FsbGJhY2sobnVsbCk7CisKKyAgICAgICAgICAgICAgICAgICAgY2hpbGREcmF3YWJsZS5tRHJhd2FibGUuc2V0Q2FsbGJhY2sobnVsbCk7CiAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgaWYgKGRyYXdhYmxlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgZHJhd2FibGUuc2V0Q2FsbGJhY2sodGhpcyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxheWVyc1tpXS5tRHJhd2FibGUgPSBkcmF3YWJsZTsKKworICAgICAgICAgICAgICAgIGNoaWxkRHJhd2FibGUubURyYXdhYmxlID0gZHJhd2FibGU7CisKKyAgICAgICAgICAgICAgICBpZiAocmVmcmVzaENoaWxkUGFkZGluZyhpLCBjaGlsZERyYXdhYmxlKSkgeworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlUGFkZGluZygpOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgLyoqIFNwZWNpZnkgbW9kaWZpZXJzIHRvIHRoZSBib3VuZHMgZm9yIHRoZSBkcmF3YWJsZVtpbmRleF0uCi0gICAgICAgIGxlZnQgKz0gbAotICAgICAgICB0b3AgKz0gdDsKLSAgICAgICAgcmlnaHQgLT0gcjsKLSAgICAgICAgYm90dG9tIC09IGI7Ci0gICAgKi8KKworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB0aGUgaW5zZXRzIGluIHBpeGVscyBmb3IgdGhlIGRyYXdhYmxlIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguCisgICAgICogSW5zZXRzIGFyZSB1c2VkIHRvIGFkanVzdCB0aGUgZHJhd2FibGUgYm91bmRzLgorICAgICAqCisgICAgICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgZHJhd2FibGUgdG8gYWRqdXN0CisgICAgICogQHBhcmFtIGwgbnVtYmVyIG9mIHBpeGVscyB0byBhZGQgdG8gdGhlIGxlZnQgYm91bmQKKyAgICAgKiBAcGFyYW0gdCBudW1iZXIgb2YgcGl4ZWxzIHRvIGFkZCB0byB0aGUgdG9wIGJvdW5kCisgICAgICogQHBhcmFtIHIgbnVtYmVyIG9mIHBpeGVscyB0byBzdWJ0cmFjdCBmcm9tIHRoZSByaWdodCBib3VuZAorICAgICAqIEBwYXJhbSBiIG51bWJlciBvZiBwaXhlbHMgdG8gc3VidHJhY3QgZnJvbSB0aGUgYm90dG9tIGJvdW5kCisgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TGF5ZXJJbnNldChpbnQgaW5kZXgsIGludCBsLCBpbnQgdCwgaW50IHIsIGludCBiKSB7Ci0gICAgICAgIENoaWxkRHJhd2FibGUgY2hpbGREcmF3YWJsZSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbltpbmRleF07CisgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGUgY2hpbGREcmF3YWJsZSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbltpbmRleF07CiAgICAgICAgIGNoaWxkRHJhd2FibGUubUluc2V0TCA9IGw7CiAgICAgICAgIGNoaWxkRHJhd2FibGUubUluc2V0VCA9IHQ7CiAgICAgICAgIGNoaWxkRHJhd2FibGUubUluc2V0UiA9IHI7CiAgICAgICAgIGNoaWxkRHJhd2FibGUubUluc2V0QiA9IGI7CiAgICAgfQogCi0gICAgLy8gb3ZlcnJpZGVzIGZyb20gRHJhd2FibGUuQ2FsbGJhY2sKKyAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgaG93IGxheWVyIHBhZGRpbmcgc2hvdWxkIGFmZmVjdCB0aGUgYm91bmRzIG9mIHN1YnNlcXVlbnQKKyAgICAgKiBsYXllcnMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHtAbGluayAjUEFERElOR19NT0RFX05FU1R9LgorICAgICAqCisgICAgICogQHBhcmFtIG1vZGUgcGFkZGluZyBtb2RlLCBvbmUgb2Y6CisgICAgICogICAgICAgICAgICA8dWw+CisgICAgICogICAgICAgICAgICA8bGk+e0BsaW5rICNQQURESU5HX01PREVfTkVTVH0KKyAgICAgKiAgICAgICAgICAgIDxsaT57QGxpbmsgI1BBRERJTkdfTU9ERV9TVEFDS30KKyAgICAgKiAgICAgICAgICAgIDwvdWw+CisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UGFkZGluZ01vZGUoaW50IG1vZGUpIHsKKyAgICAgICAgaWYgKG1MYXllclN0YXRlLm1QYWRkaW5nTW9kZSAhPSBtb2RlKSB7CisgICAgICAgICAgICBtTGF5ZXJTdGF0ZS5tUGFkZGluZ01vZGUgPSBtb2RlOworICAgICAgICAgICAgaW52YWxpZGF0ZVBhZGRpbmcoKTsKKyAgICAgICAgfQorICAgIH0KIAorICAgIC8qKgorICAgICAqIEByZXR1cm4gdGhlIGN1cnJlbnQgcGFkZGluZyBtb2RlCisgICAgICogQHNlZSAjc2V0UGFkZGluZ01vZGUoaW50KQorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0UGFkZGluZ01vZGUoKSB7CisgICAgICByZXR1cm4gbUxheWVyU3RhdGUubVBhZGRpbmdNb2RlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEludmFsaWRhdGVzIGNhY2hlZCBwYWRkaW5nLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlUGFkZGluZygpIHsKKyAgICAgICAgbUhhc0NhY2hlZFBhZGRpbmcgPSBmYWxzZTsKKyAgICAgICAgb25Cb3VuZHNDaGFuZ2UoZ2V0Qm91bmRzKCkpOworICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGludmFsaWRhdGVEcmF3YWJsZShEcmF3YWJsZSB3aG8pIHsKICAgICAgICAgZmluYWwgQ2FsbGJhY2sgY2FsbGJhY2sgPSBnZXRDYWxsYmFjaygpOwogICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgewpAQCAtMzI1LDYgKzM4NSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzY2hlZHVsZURyYXdhYmxlKERyYXdhYmxlIHdobywgUnVubmFibGUgd2hhdCwgbG9uZyB3aGVuKSB7CiAgICAgICAgIGZpbmFsIENhbGxiYWNrIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2soKTsKICAgICAgICAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHsKQEAgLTMzMiw2ICszOTMsNyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgdW5zY2hlZHVsZURyYXdhYmxlKERyYXdhYmxlIHdobywgUnVubmFibGUgd2hhdCkgewogICAgICAgICBmaW5hbCBDYWxsYmFjayBjYWxsYmFjayA9IGdldENhbGxiYWNrKCk7CiAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7CkBAIC0zMzksMTMgKzQwMSwxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gb3ZlcnJpZGVzIGZyb20gRHJhd2FibGUKLQogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGRyYXcoQ2FudmFzIGNhbnZhcykgewogICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gYXJyYXkgPSBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW47CiAgICAgICAgIGZpbmFsIGludCBOID0gbUxheWVyU3RhdGUubU51bTsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgYXJyYXlbaV0ubURyYXdhYmxlLmRyYXcoY2FudmFzKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM1NiwzNiArNDE2LDcyIEBACiAgICAgICAgICAgICAgICAgfCBtTGF5ZXJTdGF0ZS5tQ2hhbmdpbmdDb25maWd1cmF0aW9ucwogICAgICAgICAgICAgICAgIHwgbUxheWVyU3RhdGUubUNoaWxkcmVuQ2hhbmdpbmdDb25maWd1cmF0aW9uczsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBnZXRQYWRkaW5nKFJlY3QgcGFkZGluZykgewotICAgICAgICAvLyBBcmJpdHJhcmlseSBnZXQgdGhlIHBhZGRpbmcgZnJvbSB0aGUgZmlyc3QgaW1hZ2UuCi0gICAgICAgIC8vIFRlY2huaWNhbGx5IHdlIHNob3VsZCBtYXliZSBkbyBzb21ldGhpbmcgbW9yZSBpbnRlbGxpZ2VudCwKLSAgICAgICAgLy8gbGlrZSB0YWtlIHRoZSBtYXggcGFkZGluZyBvZiBhbGwgdGhlIGltYWdlcy4KKyAgICAgICAgZmluYWwgUmVjdCBjYWNoZWRQYWRkaW5nID0gbUNhY2hlZFBhZGRpbmc7CisgICAgICAgIGlmICghbUhhc0NhY2hlZFBhZGRpbmcpIHsKKyAgICAgICAgICAgIGlmIChtTGF5ZXJTdGF0ZS5tUGFkZGluZ01vZGUgPT0gUEFERElOR19NT0RFX05FU1QpIHsKKyAgICAgICAgICAgICAgICBjb21wdXRlTmVzdGVkUGFkZGluZyhjYWNoZWRQYWRkaW5nKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZVN0YWNrZWRQYWRkaW5nKGNhY2hlZFBhZGRpbmcpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtSGFzQ2FjaGVkUGFkZGluZyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBwYWRkaW5nLnNldChjYWNoZWRQYWRkaW5nKTsKKworICAgICAgICByZXR1cm4gcGFkZGluZy5sZWZ0ICE9IDAgfHwgcGFkZGluZy50b3AgIT0gMCB8fCBwYWRkaW5nLnJpZ2h0ICE9IDAgfHwgcGFkZGluZy5ib3R0b20gIT0gMDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29tcHV0ZU5lc3RlZFBhZGRpbmcoUmVjdCBwYWRkaW5nKSB7CiAgICAgICAgIHBhZGRpbmcubGVmdCA9IDA7CiAgICAgICAgIHBhZGRpbmcudG9wID0gMDsKICAgICAgICAgcGFkZGluZy5yaWdodCA9IDA7CiAgICAgICAgIHBhZGRpbmcuYm90dG9tID0gMDsKKworICAgICAgICAvLyBBZGQgYWxsIHRoZSBwYWRkaW5nLgogICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gYXJyYXkgPSBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW47CiAgICAgICAgIGZpbmFsIGludCBOID0gbUxheWVyU3RhdGUubU51bTsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgcmVhcHBseVBhZGRpbmcoaSwgYXJyYXlbaV0pOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgICAgICAgICAgcmVmcmVzaENoaWxkUGFkZGluZyhpLCBhcnJheVtpXSk7CisKICAgICAgICAgICAgIHBhZGRpbmcubGVmdCArPSBtUGFkZGluZ0xbaV07CiAgICAgICAgICAgICBwYWRkaW5nLnRvcCArPSBtUGFkZGluZ1RbaV07CiAgICAgICAgICAgICBwYWRkaW5nLnJpZ2h0ICs9IG1QYWRkaW5nUltpXTsKICAgICAgICAgICAgIHBhZGRpbmcuYm90dG9tICs9IG1QYWRkaW5nQltpXTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29tcHV0ZVN0YWNrZWRQYWRkaW5nKFJlY3QgcGFkZGluZykgeworICAgICAgICBwYWRkaW5nLmxlZnQgPSAwOworICAgICAgICBwYWRkaW5nLnRvcCA9IDA7CisgICAgICAgIHBhZGRpbmcucmlnaHQgPSAwOworICAgICAgICBwYWRkaW5nLmJvdHRvbSA9IDA7CisKKyAgICAgICAgLy8gVGFrZSB0aGUgbWF4IHBhZGRpbmcuCisgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBhcnJheSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKKyAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgICAgICAgICAgcmVmcmVzaENoaWxkUGFkZGluZyhpLCBhcnJheVtpXSk7CisKKyAgICAgICAgICAgIHBhZGRpbmcubGVmdCA9IE1hdGgubWF4KHBhZGRpbmcubGVmdCwgbVBhZGRpbmdMW2ldKTsKKyAgICAgICAgICAgIHBhZGRpbmcudG9wID0gTWF0aC5tYXgocGFkZGluZy50b3AsIG1QYWRkaW5nVFtpXSk7CisgICAgICAgICAgICBwYWRkaW5nLnJpZ2h0ID0gTWF0aC5tYXgocGFkZGluZy5yaWdodCwgbVBhZGRpbmdSW2ldKTsKKyAgICAgICAgICAgIHBhZGRpbmcuYm90dG9tID0gTWF0aC5tYXgocGFkZGluZy5ib3R0b20sIG1QYWRkaW5nQltpXSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSwgYm9vbGVhbiByZXN0YXJ0KSB7Ci0gICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IHN1cGVyLnNldFZpc2libGUodmlzaWJsZSwgcmVzdGFydCk7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gY2hhbmdlZCA9IHN1cGVyLnNldFZpc2libGUodmlzaWJsZSwgcmVzdGFydCk7CiAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBhcnJheSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKICAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICBhcnJheVtpXS5tRHJhd2FibGUuc2V0VmlzaWJsZSh2aXNpYmxlLCByZXN0YXJ0KTsKICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KIApAQCAtMzkzLDcgKzQ4OSw3IEBACiAgICAgcHVibGljIHZvaWQgc2V0RGl0aGVyKGJvb2xlYW4gZGl0aGVyKSB7CiAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBhcnJheSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKICAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICBhcnJheVtpXS5tRHJhd2FibGUuc2V0RGl0aGVyKGRpdGhlcik7CiAgICAgICAgIH0KICAgICB9CkBAIC00MDIsNyArNDk4LDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRBbHBoYShpbnQgYWxwaGEpIHsKICAgICAgICAgZmluYWwgQ2hpbGREcmF3YWJsZVtdIGFycmF5ID0gbUxheWVyU3RhdGUubUNoaWxkcmVuOwogICAgICAgICBmaW5hbCBpbnQgTiA9IG1MYXllclN0YXRlLm1OdW07Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgIGFycmF5W2ldLm1EcmF3YWJsZS5zZXRBbHBoYShhbHBoYSk7CiAgICAgICAgIH0KICAgICB9CkBAIC00MjIsNyArNTE4LDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRDb2xvckZpbHRlcihDb2xvckZpbHRlciBjZikgewogICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gYXJyYXkgPSBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW47CiAgICAgICAgIGZpbmFsIGludCBOID0gbUxheWVyU3RhdGUubU51bTsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgYXJyYXlbaV0ubURyYXdhYmxlLnNldENvbG9yRmlsdGVyKGNmKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ0Miw3ICs1MzgsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNldE9wYWNpdHkoaW50IG9wYWNpdHkpIHsKICAgICAgICAgbU9wYWNpdHlPdmVycmlkZSA9IG9wYWNpdHk7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBnZXRPcGFjaXR5KCkgewogICAgICAgICBpZiAobU9wYWNpdHlPdmVycmlkZSAhPSBQaXhlbEZvcm1hdC5VTktOT1dOKSB7CkBAIC00NTQsOSArNTUwLDEwIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0QXV0b01pcnJvcmVkKGJvb2xlYW4gbWlycm9yZWQpIHsKICAgICAgICAgbUxheWVyU3RhdGUubUF1dG9NaXJyb3JlZCA9IG1pcnJvcmVkOworCiAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBhcnJheSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKICAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICBhcnJheVtpXS5tRHJhd2FibGUuc2V0QXV0b01pcnJvcmVkKG1pcnJvcmVkKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ3MCwxMDUgKzU2NywxMzcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1N0YXRlZnVsKCkgewogICAgICAgICByZXR1cm4gbUxheWVyU3RhdGUuaXNTdGF0ZWZ1bCgpOwogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCBib29sZWFuIG9uU3RhdGVDaGFuZ2UoaW50W10gc3RhdGUpIHsKLSAgICAgICAgZmluYWwgQ2hpbGREcmF3YWJsZVtdIGFycmF5ID0gbUxheWVyU3RhdGUubUNoaWxkcmVuOwotICAgICAgICBmaW5hbCBpbnQgTiA9IG1MYXllclN0YXRlLm1OdW07CiAgICAgICAgIGJvb2xlYW4gcGFkZGluZ0NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgYm9vbGVhbiBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKworICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gYXJyYXkgPSBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW47CisgICAgICAgIGZpbmFsIGludCBOID0gbUxheWVyU3RhdGUubU51bTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGUgciA9IGFycmF5W2ldOwogICAgICAgICAgICAgaWYgKHIubURyYXdhYmxlLnNldFN0YXRlKHN0YXRlKSkgewogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlYXBwbHlQYWRkaW5nKGksIHIpKSB7CisKKyAgICAgICAgICAgIGlmIChyZWZyZXNoQ2hpbGRQYWRkaW5nKGksIHIpKSB7CiAgICAgICAgICAgICAgICAgcGFkZGluZ0NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgaWYgKHBhZGRpbmdDaGFuZ2VkKSB7Ci0gICAgICAgICAgICBvbkJvdW5kc0NoYW5nZShnZXRCb3VuZHMoKSk7CisgICAgICAgICAgICBpbnZhbGlkYXRlUGFkZGluZygpOwogICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gb25MZXZlbENoYW5nZShpbnQgbGV2ZWwpIHsKLSAgICAgICAgZmluYWwgQ2hpbGREcmF3YWJsZVtdIGFycmF5ID0gbUxheWVyU3RhdGUubUNoaWxkcmVuOwotICAgICAgICBmaW5hbCBpbnQgTiA9IG1MYXllclN0YXRlLm1OdW07CiAgICAgICAgIGJvb2xlYW4gcGFkZGluZ0NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgYm9vbGVhbiBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKworICAgICAgICBmaW5hbCBDaGlsZERyYXdhYmxlW10gYXJyYXkgPSBtTGF5ZXJTdGF0ZS5tQ2hpbGRyZW47CisgICAgICAgIGZpbmFsIGludCBOID0gbUxheWVyU3RhdGUubU51bTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGUgciA9IGFycmF5W2ldOwogICAgICAgICAgICAgaWYgKHIubURyYXdhYmxlLnNldExldmVsKGxldmVsKSkgewogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlYXBwbHlQYWRkaW5nKGksIHIpKSB7CisKKyAgICAgICAgICAgIGlmIChyZWZyZXNoQ2hpbGRQYWRkaW5nKGksIHIpKSB7CiAgICAgICAgICAgICAgICAgcGFkZGluZ0NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgaWYgKHBhZGRpbmdDaGFuZ2VkKSB7Ci0gICAgICAgICAgICBvbkJvdW5kc0NoYW5nZShnZXRCb3VuZHMoKSk7CisgICAgICAgICAgICBpbnZhbGlkYXRlUGFkZGluZygpOwogICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgb25Cb3VuZHNDaGFuZ2UoUmVjdCBib3VuZHMpIHsKKyAgICAgICAgaW50IHBhZEwgPSAwOworICAgICAgICBpbnQgcGFkVCA9IDA7CisgICAgICAgIGludCBwYWRSID0gMDsKKyAgICAgICAgaW50IHBhZEIgPSAwOworCisgICAgICAgIGZpbmFsIGJvb2xlYW4gbmVzdCA9IG1MYXllclN0YXRlLm1QYWRkaW5nTW9kZSA9PSBQQURESU5HX01PREVfTkVTVDsKICAgICAgICAgZmluYWwgQ2hpbGREcmF3YWJsZVtdIGFycmF5ID0gbUxheWVyU3RhdGUubUNoaWxkcmVuOwogICAgICAgICBmaW5hbCBpbnQgTiA9IG1MYXllclN0YXRlLm1OdW07Ci0gICAgICAgIGludCBwYWRMPTAsIHBhZFQ9MCwgcGFkUj0wLCBwYWRCPTA7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGUgciA9IGFycmF5W2ldOwotICAgICAgICAgICAgci5tRHJhd2FibGUuc2V0Qm91bmRzKGJvdW5kcy5sZWZ0ICsgci5tSW5zZXRMICsgcGFkTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMudG9wICsgci5tSW5zZXRUICsgcGFkVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMucmlnaHQgLSByLm1JbnNldFIgLSBwYWRSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5ib3R0b20gLSByLm1JbnNldEIgLSBwYWRCKTsKLSAgICAgICAgICAgIHBhZEwgKz0gbVBhZGRpbmdMW2ldOwotICAgICAgICAgICAgcGFkUiArPSBtUGFkZGluZ1JbaV07Ci0gICAgICAgICAgICBwYWRUICs9IG1QYWRkaW5nVFtpXTsKLSAgICAgICAgICAgIHBhZEIgKz0gbVBhZGRpbmdCW2ldOworICAgICAgICAgICAgci5tRHJhd2FibGUuc2V0Qm91bmRzKGJvdW5kcy5sZWZ0ICsgci5tSW5zZXRMICsgcGFkTCwgYm91bmRzLnRvcCArIHIubUluc2V0VCArIHBhZFQsCisgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5yaWdodCAtIHIubUluc2V0UiAtIHBhZFIsIGJvdW5kcy5ib3R0b20gLSByLm1JbnNldEIgLSBwYWRCKTsKKworICAgICAgICAgICAgaWYgKG5lc3QpIHsKKyAgICAgICAgICAgICAgICBwYWRMICs9IG1QYWRkaW5nTFtpXTsKKyAgICAgICAgICAgICAgICBwYWRSICs9IG1QYWRkaW5nUltpXTsKKyAgICAgICAgICAgICAgICBwYWRUICs9IG1QYWRkaW5nVFtpXTsKKyAgICAgICAgICAgICAgICBwYWRCICs9IG1QYWRkaW5nQltpXTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZ2V0SW50cmluc2ljV2lkdGgoKSB7CiAgICAgICAgIGludCB3aWR0aCA9IC0xOworICAgICAgICBpbnQgcGFkTCA9IDA7CisgICAgICAgIGludCBwYWRSID0gMDsKKworICAgICAgICBmaW5hbCBib29sZWFuIG5lc3QgPSBtTGF5ZXJTdGF0ZS5tUGFkZGluZ01vZGUgPT0gUEFERElOR19NT0RFX05FU1Q7CiAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBhcnJheSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKICAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOwotICAgICAgICBpbnQgcGFkTD0wLCBwYWRSPTA7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGUgciA9IGFycmF5W2ldOwotICAgICAgICAgICAgaW50IHcgPSByLm1EcmF3YWJsZS5nZXRJbnRyaW5zaWNXaWR0aCgpCi0gICAgICAgICAgICAgICAgICArIHIubUluc2V0TCArIHIubUluc2V0UiArIHBhZEwgKyBwYWRSOworICAgICAgICAgICAgZmluYWwgaW50IHcgPSByLm1EcmF3YWJsZS5nZXRJbnRyaW5zaWNXaWR0aCgpICsgci5tSW5zZXRMICsgci5tSW5zZXRSICsgcGFkTCArIHBhZFI7CiAgICAgICAgICAgICBpZiAodyA+IHdpZHRoKSB7CiAgICAgICAgICAgICAgICAgd2lkdGggPSB3OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFkTCArPSBtUGFkZGluZ0xbaV07Ci0gICAgICAgICAgICBwYWRSICs9IG1QYWRkaW5nUltpXTsKKworICAgICAgICAgICAgaWYgKG5lc3QpIHsKKyAgICAgICAgICAgICAgICBwYWRMICs9IG1QYWRkaW5nTFtpXTsKKyAgICAgICAgICAgICAgICBwYWRSICs9IG1QYWRkaW5nUltpXTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiB3aWR0aDsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGdldEludHJpbnNpY0hlaWdodCgpIHsKICAgICAgICAgaW50IGhlaWdodCA9IC0xOworICAgICAgICBpbnQgcGFkVCA9IDA7CisgICAgICAgIGludCBwYWRCID0gMDsKKworICAgICAgICBmaW5hbCBib29sZWFuIG5lc3QgPSBtTGF5ZXJTdGF0ZS5tUGFkZGluZ01vZGUgPT0gUEFERElOR19NT0RFX05FU1Q7CiAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBhcnJheSA9IG1MYXllclN0YXRlLm1DaGlsZHJlbjsKICAgICAgICAgZmluYWwgaW50IE4gPSBtTGF5ZXJTdGF0ZS5tTnVtOwotICAgICAgICBpbnQgcGFkVD0wLCBwYWRCPTA7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGUgciA9IGFycmF5W2ldOwotICAgICAgICAgICAgaW50IGggPSByLm1EcmF3YWJsZS5nZXRJbnRyaW5zaWNIZWlnaHQoKSArIHIubUluc2V0VCArIHIubUluc2V0QiArICsgcGFkVCArIHBhZEI7CisgICAgICAgICAgICBpbnQgaCA9IHIubURyYXdhYmxlLmdldEludHJpbnNpY0hlaWdodCgpICsgci5tSW5zZXRUICsgci5tSW5zZXRCICsgcGFkVCArIHBhZEI7CiAgICAgICAgICAgICBpZiAoaCA+IGhlaWdodCkgewogICAgICAgICAgICAgICAgIGhlaWdodCA9IGg7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYWRUICs9IG1QYWRkaW5nVFtpXTsKLSAgICAgICAgICAgIHBhZEIgKz0gbVBhZGRpbmdCW2ldOworCisgICAgICAgICAgICBpZiAobmVzdCkgeworICAgICAgICAgICAgICAgIHBhZFQgKz0gbVBhZGRpbmdUW2ldOworICAgICAgICAgICAgICAgIHBhZEIgKz0gbVBhZGRpbmdCW2ldOworICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIGhlaWdodDsKICAgICB9CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gcmVhcHBseVBhZGRpbmcoaW50IGksIENoaWxkRHJhd2FibGUgcikgeworICAgIC8qKgorICAgICAqIFJlZnJlc2hlcyB0aGUgY2FjaGVkIHBhZGRpbmcgdmFsdWVzIGZvciB0aGUgc3BlY2lmaWVkIGNoaWxkLgorICAgICAqCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjaGlsZCdzIHBhZGRpbmcgaGFzIGNoYW5nZWQKKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gcmVmcmVzaENoaWxkUGFkZGluZyhpbnQgaSwgQ2hpbGREcmF3YWJsZSByKSB7CiAgICAgICAgIGZpbmFsIFJlY3QgcmVjdCA9IG1UbXBSZWN0OwogICAgICAgICByLm1EcmF3YWJsZS5nZXRQYWRkaW5nKHJlY3QpOwogICAgICAgICBpZiAocmVjdC5sZWZ0ICE9IG1QYWRkaW5nTFtpXSB8fCByZWN0LnRvcCAhPSBtUGFkZGluZ1RbaV0gfHwKQEAgLTU4MiwxMSArNzExLDE1IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBFbnN1cmVzIHRoZSBjaGlsZCBwYWRkaW5nIGNhY2hlcyBhcmUgbGFyZ2UgZW5vdWdoLgorICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBlbnN1cmVQYWRkaW5nKCkgewogICAgICAgICBmaW5hbCBpbnQgTiA9IG1MYXllclN0YXRlLm1OdW07CiAgICAgICAgIGlmIChtUGFkZGluZ0wgIT0gbnVsbCAmJiBtUGFkZGluZ0wubGVuZ3RoID49IE4pIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIG1QYWRkaW5nTCA9IG5ldyBpbnRbTl07CiAgICAgICAgIG1QYWRkaW5nVCA9IG5ldyBpbnRbTl07CiAgICAgICAgIG1QYWRkaW5nUiA9IG5ldyBpbnRbTl07CkBAIC02MzksNyArNzcyLDcgQEAKIAogICAgICAgICBpbnQgbUNoYW5naW5nQ29uZmlndXJhdGlvbnM7CiAgICAgICAgIGludCBtQ2hpbGRyZW5DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwotICAgICAgICAKKwogICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUhhdmVPcGFjaXR5ID0gZmFsc2U7CiAgICAgICAgIHByaXZhdGUgaW50IG1PcGFjaXR5OwogCkBAIC02NTEsNiArNzg0LDggQEAKIAogICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUF1dG9NaXJyb3JlZDsKIAorICAgICAgICBwcml2YXRlIGludCBtUGFkZGluZ01vZGUgPSBQQURESU5HX01PREVfTkVTVDsKKwogICAgICAgICBMYXllclN0YXRlKExheWVyU3RhdGUgb3JpZywgTGF5ZXJEcmF3YWJsZSBvd25lciwgUmVzb3VyY2VzIHJlcykgewogICAgICAgICAgICAgaWYgKG9yaWcgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGVbXSBvcmlnQ2hpbGREcmF3YWJsZSA9IG9yaWcubUNoaWxkcmVuOwpAQCAtNjYxLDcgKzc5Niw3IEBACiAKICAgICAgICAgICAgICAgICBtQ2hhbmdpbmdDb25maWd1cmF0aW9ucyA9IG9yaWcubUNoYW5naW5nQ29uZmlndXJhdGlvbnM7CiAgICAgICAgICAgICAgICAgbUNoaWxkcmVuQ2hhbmdpbmdDb25maWd1cmF0aW9ucyA9IG9yaWcubUNoaWxkcmVuQ2hhbmdpbmdDb25maWd1cmF0aW9uczsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGUgciA9IG1DaGlsZHJlbltpXSA9IG5ldyBDaGlsZERyYXdhYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGUgb3IgPSBvcmlnQ2hpbGREcmF3YWJsZVtpXTsKQEAgLTY4NSw2ICs4MjAsNyBAQAogICAgICAgICAgICAgICAgIG1TdGF0ZWZ1bCA9IG9yaWcubVN0YXRlZnVsOwogICAgICAgICAgICAgICAgIG1DaGVja2VkQ29uc3RhbnRTdGF0ZSA9IG1DYW5Db25zdGFudFN0YXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBtQXV0b01pcnJvcmVkID0gb3JpZy5tQXV0b01pcnJvcmVkOworICAgICAgICAgICAgICAgIG1QYWRkaW5nTW9kZSA9IG9yaWcubVBhZGRpbmdNb2RlOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtTnVtID0gMDsKICAgICAgICAgICAgICAgICBtQ2hpbGRyZW4gPSBudWxsOwpAQCAtNjk1LDEyICs4MzEsMTIgQEAKICAgICAgICAgcHVibGljIERyYXdhYmxlIG5ld0RyYXdhYmxlKCkgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBMYXllckRyYXdhYmxlKHRoaXMsIG51bGwpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgRHJhd2FibGUgbmV3RHJhd2FibGUoUmVzb3VyY2VzIHJlcykgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBMYXllckRyYXdhYmxlKHRoaXMsIHJlcyk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBpbnQgZ2V0Q2hhbmdpbmdDb25maWd1cmF0aW9ucygpIHsKICAgICAgICAgICAgIHJldHVybiBtQ2hhbmdpbmdDb25maWd1cmF0aW9uczsKQEAgLTcyMCwxMiArODU2LDEyIEBACiAgICAgICAgICAgICBtSGF2ZU9wYWNpdHkgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIG9wOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU3RhdGVmdWwoKSB7CiAgICAgICAgICAgICBpZiAobUhhdmVTdGF0ZWZ1bCkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU3RhdGVmdWw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYm9vbGVhbiBzdGF0ZWZ1bCA9IGZhbHNlOwogICAgICAgICAgICAgZmluYWwgaW50IE4gPSBtTnVtOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKQEAgLTczNCw3ICs4NzAsNyBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgbVN0YXRlZnVsID0gc3RhdGVmdWw7CiAgICAgICAgICAgICBtSGF2ZVN0YXRlZnVsID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBzdGF0ZWZ1bDsKQEAgLTc0NCw3ICs4ODAsNyBAQAogICAgICAgICAgICAgaWYgKCFtQ2hlY2tlZENvbnN0YW50U3RhdGUgJiYgbUNoaWxkcmVuICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtQ2FuQ29uc3RhbnRTdGF0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgZmluYWwgaW50IE4gPSBtTnVtOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgICAgICAgICBpZiAobUNoaWxkcmVuW2ldLm1EcmF3YWJsZS5nZXRDb25zdGFudFN0YXRlKCkgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgbUNhbkNvbnN0YW50U3RhdGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1BpY3R1cmVEcmF3YWJsZS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1BpY3R1cmVEcmF3YWJsZS5qYXZhCmluZGV4IDFmNWQ0ZDguLmNiMmQ4ZjYgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9QaWN0dXJlRHJhd2FibGUuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvUGljdHVyZURyYXdhYmxlLmphdmEKQEAgLTE2LDE2ICsxNiwxMiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGU7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yRmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4LlNjYWxlVG9GaXQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBpY3R1cmU7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QaXhlbEZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7CiAKIC8qKgogICogRHJhd2FibGUgc3ViY2xhc3MgdGhhdCB3cmFwcyBhIFBpY3R1cmUsIGFsbG93aW5nIHRoZSBwaWN0dXJlIHRvIGJlIHVzZWQKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvQXJjU2hhcGUuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9zaGFwZXMvQXJjU2hhcGUuamF2YQppbmRleCBiOTBlODUzLi44NDczMWIwIDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvc2hhcGVzL0FyY1NoYXBlLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL3NoYXBlcy9BcmNTaGFwZS5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7CiAKIC8qKgogICogQ3JlYXRlcyBhbiBhcmMgc2hhcGUuIFRoZSBhcmMgc2hhcGUgc3RhcnRzIGF0IGEgc3BlY2lmaWVkCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb24uamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbi5qYXZhCmluZGV4IGRjYTkzNGYuLjQ1ZGQyNWEgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbi5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbi5qYXZhCkBAIC0xNiwxNyArMTYsMTIgQEAKIAogcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKIAotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwogaW1wb3J0IGFuZHJvaWQub3MuVHJhY2U7CiAKQEAgLTc4LDEwICs3Myw2OSBAQAogICAgIGludCBtQ3VycmVudERpbVk7CiAgICAgaW50IG1DdXJyZW50RGltWjsKICAgICBpbnQgbUN1cnJlbnRDb3VudDsKLSAgICBzdGF0aWMgSGFzaE1hcDxJbnRlZ2VyLCBBbGxvY2F0aW9uPiBtQWxsb2NhdGlvbk1hcCA9Ci0gICAgICAgICAgICBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBBbGxvY2F0aW9uPigpOworICAgIHN0YXRpYyBIYXNoTWFwPExvbmcsIEFsbG9jYXRpb24+IG1BbGxvY2F0aW9uTWFwID0KKyAgICAgICAgICAgIG5ldyBIYXNoTWFwPExvbmcsIEFsbG9jYXRpb24+KCk7CiAgICAgT25CdWZmZXJBdmFpbGFibGVMaXN0ZW5lciBtQnVmZmVyTm90aWZpZXI7CiAKKyAgICBwcml2YXRlIEVsZW1lbnQuRGF0YVR5cGUgdmFsaWRhdGVPYmplY3RJc1ByaW1pdGl2ZUFycmF5KE9iamVjdCBkLCBib29sZWFuIGNoZWNrVHlwZSkgeworICAgICAgICBmaW5hbCBDbGFzcyBjID0gZC5nZXRDbGFzcygpOworICAgICAgICBpZiAoIWMuaXNBcnJheSgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk9iamVjdCBwYXNzZWQgaXMgbm90IGFuIGFycmF5IG9mIHByaW1pdGl2ZXMuIik7CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgQ2xhc3MgY21wID0gYy5nZXRDb21wb25lbnRUeXBlKCk7CisgICAgICAgIGlmICghY21wLmlzUHJpbWl0aXZlKCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiT2JqZWN0IHBhc3NlZCBpcyBub3QgYW4gQXJyYXkgb2YgcHJpbWl0aXZlcy4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbXAgPT0gTG9uZy5UWVBFKSB7CisgICAgICAgICAgICBpZiAoY2hlY2tUeXBlKSB7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVJc0ludDY0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1UeXBlLm1FbGVtZW50Lm1UeXBlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnQuRGF0YVR5cGUuU0lHTkVEXzY0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNtcCA9PSBJbnRlZ2VyLlRZUEUpIHsKKyAgICAgICAgICAgIGlmIChjaGVja1R5cGUpIHsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUlzSW50MzIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbVR5cGUubUVsZW1lbnQubVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMzI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY21wID09IFNob3J0LlRZUEUpIHsKKyAgICAgICAgICAgIGlmIChjaGVja1R5cGUpIHsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUlzSW50MTYoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbVR5cGUubUVsZW1lbnQubVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMTY7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY21wID09IEJ5dGUuVFlQRSkgeworICAgICAgICAgICAgaWYgKGNoZWNrVHlwZSkgeworICAgICAgICAgICAgICAgIHZhbGlkYXRlSXNJbnQ4KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1UeXBlLm1FbGVtZW50Lm1UeXBlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnQuRGF0YVR5cGUuU0lHTkVEXzg7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY21wID09IEZsb2F0LlRZUEUpIHsKKyAgICAgICAgICAgIGlmIChjaGVja1R5cGUpIHsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZUlzRmxvYXQzMigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnQuRGF0YVR5cGUuRkxPQVRfMzI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY21wID09IERvdWJsZS5UWVBFKSB7CisgICAgICAgICAgICBpZiAoY2hlY2tUeXBlKSB7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVJc0Zsb2F0NjQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBFbGVtZW50LkRhdGFUeXBlLkZMT0FUXzY0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworCiAgICAgLyoqCiAgICAgICogVGhlIHVzYWdlIG9mIHRoZSBBbGxvY2F0aW9uLiAgVGhlc2Ugc2lnbmFsIHRvIFJlbmRlclNjcmlwdCB3aGVyZSB0byBwbGFjZQogICAgICAqIHRoZSBBbGxvY2F0aW9uIGluIG1lbW9yeS4KQEAgLTEyNywxNyArMTgxLDE3IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNBR0VfR1JBUEhJQ1NfUkVOREVSX1RBUkdFVCA9IDB4MDAxMDsKIAogICAgIC8qKgotICAgICAqIFRoZSBBbGxvY2F0aW9uIHdpbGwgYmUgdXNlZCBhcyBhIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlfQotICAgICAqIGNvbnN1bWVyLiAgVGhpcyB1c2FnZSB3aWxsIGNhdXNlIHRoZSBBbGxvY2F0aW9uIHRvIGJlIGNyZWF0ZWQgYXMKLSAgICAgKiByZWFkLW9ubHkuCisgICAgICogVGhlIEFsbG9jYXRpb24gd2lsbCBiZSB1c2VkIGFzIGEge0BsaW5rIGFuZHJvaWQudmlldy5TdXJmYWNlfQorICAgICAqIGNvbnN1bWVyLiAgVGhpcyB1c2FnZSB3aWxsIGNhdXNlIHRoZSBBbGxvY2F0aW9uIHRvIGJlIGNyZWF0ZWQKKyAgICAgKiBhcyByZWFkLW9ubHkuCiAgICAgICoKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0FHRV9JT19JTlBVVCA9IDB4MDAyMDsKIAogICAgIC8qKgotICAgICAqIFRoZSBBbGxvY2F0aW9uIHdpbGwgYmUgdXNlZCBhcyBhIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlfQorICAgICAqIFRoZSBBbGxvY2F0aW9uIHdpbGwgYmUgdXNlZCBhcyBhIHtAbGluayBhbmRyb2lkLnZpZXcuU3VyZmFjZX0KICAgICAgKiBwcm9kdWNlci4gIFRoZSBkaW1lbnNpb25zIGFuZCBmb3JtYXQgb2YgdGhlIHtAbGluawotICAgICAqIGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmV9IHdpbGwgYmUgZm9yY2VkIHRvIHRob3NlIG9mIHRoZQorICAgICAqIGFuZHJvaWQudmlldy5TdXJmYWNlfSB3aWxsIGJlIGZvcmNlZCB0byB0aG9zZSBvZiB0aGUKICAgICAgKiBBbGxvY2F0aW9uLgogICAgICAqCiAgICAgICovCkBAIC0xODgsNyArMjQyLDcgQEAKICAgICB9CiAKIAotICAgIHByaXZhdGUgaW50IGdldElEU2FmZSgpIHsKKyAgICBwcml2YXRlIGxvbmcgZ2V0SURTYWZlKCkgewogICAgICAgICBpZiAobUFkYXB0ZWRBbGxvY2F0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBtQWRhcHRlZEFsbG9jYXRpb24uZ2V0SUQobVJTKTsKICAgICAgICAgfQpAQCAtMjQ0LDcgKzI5OCw3IEBACiAgICAgICAgIG1CaXRtYXAgPSBiOwogICAgIH0KIAotICAgIEFsbG9jYXRpb24oaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMsIFR5cGUgdCwgaW50IHVzYWdlKSB7CisgICAgQWxsb2NhdGlvbihsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMsIFR5cGUgdCwgaW50IHVzYWdlKSB7CiAgICAgICAgIHN1cGVyKGlkLCBycyk7CiAgICAgICAgIGlmICgodXNhZ2UgJiB+KFVTQUdFX1NDUklQVCB8CiAgICAgICAgICAgICAgICAgICAgICAgIFVTQUdFX0dSQVBISUNTX1RFWFRVUkUgfApAQCAtMjkwLDYgKzM0NCwxNSBAQAogICAgICAgICBzdXBlci5maW5hbGl6ZSgpOwogICAgIH0KIAorICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZUlzSW50NjQoKSB7CisgICAgICAgIGlmICgobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5TSUdORURfNjQpIHx8CisgICAgICAgICAgICAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5VTlNJR05FRF82NCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAiNjQgYml0IGludGVnZXIgc291cmNlIGRvZXMgbm90IG1hdGNoIGFsbG9jYXRpb24gdHlwZSAiICsgbVR5cGUubUVsZW1lbnQubVR5cGUpOworICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZUlzSW50MzIoKSB7CiAgICAgICAgIGlmICgobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMzIpIHx8CiAgICAgICAgICAgICAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5VTlNJR05FRF8zMikpIHsKQEAgLTMyNSw2ICszODgsMTQgQEAKICAgICAgICAgICAgICIzMiBiaXQgZmxvYXQgc291cmNlIGRvZXMgbm90IG1hdGNoIGFsbG9jYXRpb24gdHlwZSAiICsgbVR5cGUubUVsZW1lbnQubVR5cGUpOwogICAgIH0KIAorICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZUlzRmxvYXQ2NCgpIHsKKyAgICAgICAgaWYgKG1UeXBlLm1FbGVtZW50Lm1UeXBlID09IEVsZW1lbnQuRGF0YVR5cGUuRkxPQVRfNjQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAiNjQgYml0IGZsb2F0IHNvdXJjZSBkb2VzIG5vdCBtYXRjaCBhbGxvY2F0aW9uIHR5cGUgIiArIG1UeXBlLm1FbGVtZW50Lm1UeXBlKTsKKyAgICB9CisKICAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVJc09iamVjdCgpIHsKICAgICAgICAgaWYgKChtVHlwZS5tRWxlbWVudC5tVHlwZSA9PSBFbGVtZW50LkRhdGFUeXBlLlJTX0VMRU1FTlQpIHx8CiAgICAgICAgICAgICAobVR5cGUubUVsZW1lbnQubVR5cGUgPT0gRWxlbWVudC5EYXRhVHlwZS5SU19UWVBFKSB8fApAQCAtMzQ1LDcgKzQxNiw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgdm9pZCB1cGRhdGVGcm9tTmF0aXZlKCkgewogICAgICAgICBzdXBlci51cGRhdGVGcm9tTmF0aXZlKCk7Ci0gICAgICAgIGludCB0eXBlSUQgPSBtUlMubkFsbG9jYXRpb25HZXRUeXBlKGdldElEKG1SUykpOworICAgICAgICBsb25nIHR5cGVJRCA9IG1SUy5uQWxsb2NhdGlvbkdldFR5cGUoZ2V0SUQobVJTKSk7CiAgICAgICAgIGlmKHR5cGVJRCAhPSAwKSB7CiAgICAgICAgICAgICBtVHlwZSA9IG5ldyBUeXBlKHR5cGVJRCwgbVJTKTsKICAgICAgICAgICAgIG1UeXBlLnVwZGF0ZUZyb21OYXRpdmUoKTsKQEAgLTQxMiwxNCArNDgzLDYgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBEZWxldGUgb25jZSBjb2RlIGlzIHVwZGF0ZWQuCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBpb1NlbmRPdXRwdXQoKSB7Ci0gICAgICAgIGlvU2VuZCgpOwotICAgIH0KLQotICAgIC8qKgogICAgICAqIFJlY2VpdmUgdGhlIGxhdGVzdCBpbnB1dCBpbnRvIHRoZSBBbGxvY2F0aW9uLiBUaGlzIG9wZXJhdGlvbgogICAgICAqIGlzIG9ubHkgdmFsaWQgaWYge0BsaW5rICNVU0FHRV9JT19JTlBVVH0gaXMgc2V0IG9uIHRoZSBBbGxvY2F0aW9uLgogICAgICAqCkBAIC00NDgsOSArNTExLDExIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkFycmF5IHNpemUgbWlzbWF0Y2gsIGFsbG9jYXRpb24gc2l6ZVggPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VycmVudENvdW50ICsgIiwgYXJyYXkgbGVuZ3RoID0gIiArIGQubGVuZ3RoKTsKICAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogcmVxdWlyZXMgNjQtYml0IHBhdGgKKwogICAgICAgICBpbnQgaVtdID0gbmV3IGludFtkLmxlbmd0aF07CiAgICAgICAgIGZvciAoaW50IGN0PTA7IGN0IDwgZC5sZW5ndGg7IGN0KyspIHsKLSAgICAgICAgICAgIGlbY3RdID0gZFtjdF0uZ2V0SUQobVJTKTsKKyAgICAgICAgICAgIGlbY3RdID0gKGludClkW2N0XS5nZXRJRChtUlMpOwogICAgICAgICB9CiAgICAgICAgIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCBtQ3VycmVudENvdW50LCBpKTsKICAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7CkBAIC01MTEsNiArNTc2LDMzIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgY29weUZyb21VbmNoZWNrZWQoT2JqZWN0IGFycmF5LCBFbGVtZW50LkRhdGFUeXBlIGR0LCBpbnQgYXJyYXlMZW4pIHsKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weUZyb21VbmNoZWNrZWQiKTsKKyAgICAgICAgbVJTLnZhbGlkYXRlKCk7CisgICAgICAgIGlmIChtQ3VycmVudERpbVogPiAwKSB7CisgICAgICAgICAgICBjb3B5M0RSYW5nZUZyb21VbmNoZWNrZWQoMCwgMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIG1DdXJyZW50RGltWiwgYXJyYXksIGR0LCBhcnJheUxlbik7CisgICAgICAgIH0gZWxzZSBpZiAobUN1cnJlbnREaW1ZID4gMCkgeworICAgICAgICAgICAgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKDAsIDAsIG1DdXJyZW50RGltWCwgbUN1cnJlbnREaW1ZLCBhcnJheSwgZHQsIGFycmF5TGVuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCBtQ3VycmVudENvdW50LCBhcnJheSwgZHQsIGFycmF5TGVuKTsKKyAgICAgICAgfQorICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGludG8gdGhpcyBBbGxvY2F0aW9uIGZyb20gYW4gYXJyYXkuIFRoaXMgbWV0aG9kIGRvZXMgbm90IGd1YXJhbnRlZQorICAgICAqIHRoYXQgdGhlIEFsbG9jYXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBpbnB1dCBidWZmZXI7IGl0IGNvcGllcyBtZW1vcnkKKyAgICAgKiB3aXRob3V0IHJlaW50ZXJwcmV0YXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYXJyYXkgVGhlIHNvdXJjZSBkYXRhIGFycmF5CisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weUZyb21VbmNoZWNrZWQoT2JqZWN0IGFycmF5KSB7CisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHlGcm9tVW5jaGVja2VkIik7CisgICAgICAgIGNvcHlGcm9tVW5jaGVja2VkKGFycmF5LCB2YWxpZGF0ZU9iamVjdElzUHJpbWl0aXZlQXJyYXkoYXJyYXksIGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLnJlZmxlY3QuQXJyYXkuZ2V0TGVuZ3RoKGFycmF5KSk7CisgICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENvcHkgaW50byB0aGlzIEFsbG9jYXRpb24gZnJvbSBhbiBhcnJheS4gVGhpcyBtZXRob2QgZG9lcyBub3QgZ3VhcmFudGVlCiAgICAgICogdGhhdCB0aGUgQWxsb2NhdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGlucHV0IGJ1ZmZlcjsgaXQgY29waWVzIG1lbW9yeQpAQCAtNTE5LDE2ICs2MTEsNyBAQAogICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tVW5jaGVja2VkKGludFtdIGQpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weUZyb21VbmNoZWNrZWQiKTsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChtQ3VycmVudERpbVogPiAwKSB7Ci0gICAgICAgICAgICBjb3B5M0RSYW5nZUZyb21VbmNoZWNrZWQoMCwgMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIG1DdXJyZW50RGltWiwgZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobUN1cnJlbnREaW1ZID4gMCkgewotICAgICAgICAgICAgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKDAsIDAsIG1DdXJyZW50RGltWCwgbUN1cnJlbnREaW1ZLCBkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCBtQ3VycmVudENvdW50LCBkKTsKLSAgICAgICAgfQotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICAgICAgY29weUZyb21VbmNoZWNrZWQoZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMzIsIGQubGVuZ3RoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTUzOSwxNiArNjIyLDcgQEAKICAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb3B5RnJvbVVuY2hlY2tlZChzaG9ydFtdIGQpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weUZyb21VbmNoZWNrZWQiKTsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChtQ3VycmVudERpbVogPiAwKSB7Ci0gICAgICAgICAgICBjb3B5M0RSYW5nZUZyb21VbmNoZWNrZWQoMCwgMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIG1DdXJyZW50RGltWiwgZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobUN1cnJlbnREaW1ZID4gMCkgewotICAgICAgICAgICAgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKDAsIDAsIG1DdXJyZW50RGltWCwgbUN1cnJlbnREaW1ZLCBkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCBtQ3VycmVudENvdW50LCBkKTsKLSAgICAgICAgfQotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICAgICAgY29weUZyb21VbmNoZWNrZWQoZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMTYsIGQubGVuZ3RoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTU1OSwxNiArNjMzLDcgQEAKICAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb3B5RnJvbVVuY2hlY2tlZChieXRlW10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5RnJvbVVuY2hlY2tlZCIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgaWYgKG1DdXJyZW50RGltWiA+IDApIHsKLSAgICAgICAgICAgIGNvcHkzRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCAwLCAwLCBtQ3VycmVudERpbVgsIG1DdXJyZW50RGltWSwgbUN1cnJlbnREaW1aLCBkKTsKLSAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudERpbVkgPiAwKSB7Ci0gICAgICAgICAgICBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIGQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKDAsIG1DdXJyZW50Q291bnQsIGQpOwotICAgICAgICB9Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgICAgICBjb3B5RnJvbVVuY2hlY2tlZChkLCBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF84LCBkLmxlbmd0aCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC01NzksMzcgKzY0NCwzNSBAQAogICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tVW5jaGVja2VkKGZsb2F0W10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5RnJvbVVuY2hlY2tlZCIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgaWYgKG1DdXJyZW50RGltWiA+IDApIHsKLSAgICAgICAgICAgIGNvcHkzRFJhbmdlRnJvbVVuY2hlY2tlZCgwLCAwLCAwLCBtQ3VycmVudERpbVgsIG1DdXJyZW50RGltWSwgbUN1cnJlbnREaW1aLCBkKTsKLSAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudERpbVkgPiAwKSB7Ci0gICAgICAgICAgICBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIGQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKDAsIG1DdXJyZW50Q291bnQsIGQpOwotICAgICAgICB9Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgICAgICBjb3B5RnJvbVVuY2hlY2tlZChkLCBFbGVtZW50LkRhdGFUeXBlLkZMT0FUXzMyLCBkLmxlbmd0aCk7CiAgICAgfQogCiAKICAgICAvKioKICAgICAgKiBDb3B5IGludG8gdGhpcyBBbGxvY2F0aW9uIGZyb20gYW4gYXJyYXkuICBUaGlzIHZhcmlhbnQgaXMgdHlwZSBjaGVja2VkCiAgICAgICogYW5kIHdpbGwgZ2VuZXJhdGUgZXhjZXB0aW9ucyBpZiB0aGUgQWxsb2NhdGlvbidzIHtAbGluaworICAgICAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnR9IGRvZXMgbm90IG1hdGNoIHRoZSBhcnJheSdzCisgICAgICogcHJpbWl0aXZlIHR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYXJyYXkgVGhlIHNvdXJjZSBkYXRhIGFycmF5CisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weUZyb20oT2JqZWN0IGFycmF5KSB7CisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHlGcm9tIik7CisgICAgICAgIGNvcHlGcm9tVW5jaGVja2VkKGFycmF5LCB2YWxpZGF0ZU9iamVjdElzUHJpbWl0aXZlQXJyYXkoYXJyYXksIHRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcucmVmbGVjdC5BcnJheS5nZXRMZW5ndGgoYXJyYXkpKTsKKyAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29weSBpbnRvIHRoaXMgQWxsb2NhdGlvbiBmcm9tIGFuIGFycmF5LiAgVGhpcyB2YXJpYW50IGlzIHR5cGUgY2hlY2tlZAorICAgICAqIGFuZCB3aWxsIGdlbmVyYXRlIGV4Y2VwdGlvbnMgaWYgdGhlIEFsbG9jYXRpb24ncyB7QGxpbmsKICAgICAgKiBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50fSBpcyBub3QgYSAzMiBiaXQgaW50ZWdlciB0eXBlLgogICAgICAqCiAgICAgICogQHBhcmFtIGQgdGhlIHNvdXJjZSBkYXRhIGFycmF5CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29weUZyb20oaW50W10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5RnJvbSIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgaWYgKG1DdXJyZW50RGltWiA+IDApIHsKLSAgICAgICAgICAgIGNvcHkzRFJhbmdlRnJvbSgwLCAwLCAwLCBtQ3VycmVudERpbVgsIG1DdXJyZW50RGltWSwgbUN1cnJlbnREaW1aLCBkKTsKLSAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudERpbVkgPiAwKSB7Ci0gICAgICAgICAgICBjb3B5MkRSYW5nZUZyb20oMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIGQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29weTFEUmFuZ2VGcm9tKDAsIG1DdXJyZW50Q291bnQsIGQpOwotICAgICAgICB9Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgICAgICB2YWxpZGF0ZUlzSW50MzIoKTsKKyAgICAgICAgY29weUZyb21VbmNoZWNrZWQoZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMzIsIGQubGVuZ3RoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTYyMCwxNiArNjgzLDggQEAKICAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb3B5RnJvbShzaG9ydFtdIGQpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weUZyb20iKTsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChtQ3VycmVudERpbVogPiAwKSB7Ci0gICAgICAgICAgICBjb3B5M0RSYW5nZUZyb20oMCwgMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIG1DdXJyZW50RGltWiwgZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobUN1cnJlbnREaW1ZID4gMCkgewotICAgICAgICAgICAgY29weTJEUmFuZ2VGcm9tKDAsIDAsIG1DdXJyZW50RGltWCwgbUN1cnJlbnREaW1ZLCBkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvcHkxRFJhbmdlRnJvbSgwLCBtQ3VycmVudENvdW50LCBkKTsKLSAgICAgICAgfQotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICAgICAgdmFsaWRhdGVJc0ludDE2KCk7CisgICAgICAgIGNvcHlGcm9tVW5jaGVja2VkKGQsIEVsZW1lbnQuRGF0YVR5cGUuU0lHTkVEXzE2LCBkLmxlbmd0aCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC02NDAsMTYgKzY5NSw4IEBACiAgICAgICogQHBhcmFtIGQgdGhlIHNvdXJjZSBkYXRhIGFycmF5CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29weUZyb20oYnl0ZVtdIGQpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weUZyb20iKTsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChtQ3VycmVudERpbVogPiAwKSB7Ci0gICAgICAgICAgICBjb3B5M0RSYW5nZUZyb20oMCwgMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIG1DdXJyZW50RGltWiwgZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobUN1cnJlbnREaW1ZID4gMCkgewotICAgICAgICAgICAgY29weTJEUmFuZ2VGcm9tKDAsIDAsIG1DdXJyZW50RGltWCwgbUN1cnJlbnREaW1ZLCBkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvcHkxRFJhbmdlRnJvbSgwLCBtQ3VycmVudENvdW50LCBkKTsKLSAgICAgICAgfQotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICAgICAgdmFsaWRhdGVJc0ludDgoKTsKKyAgICAgICAgY29weUZyb21VbmNoZWNrZWQoZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfOCwgZC5sZW5ndGgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNjYwLDE2ICs3MDcsOCBAQAogICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvcHlGcm9tKGZsb2F0W10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5RnJvbSIpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgaWYgKG1DdXJyZW50RGltWiA+IDApIHsKLSAgICAgICAgICAgIGNvcHkzRFJhbmdlRnJvbSgwLCAwLCAwLCBtQ3VycmVudERpbVgsIG1DdXJyZW50RGltWSwgbUN1cnJlbnREaW1aLCBkKTsKLSAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudERpbVkgPiAwKSB7Ci0gICAgICAgICAgICBjb3B5MkRSYW5nZUZyb20oMCwgMCwgbUN1cnJlbnREaW1YLCBtQ3VycmVudERpbVksIGQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29weTFEUmFuZ2VGcm9tKDAsIG1DdXJyZW50Q291bnQsIGQpOwotICAgICAgICB9Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgICAgICB2YWxpZGF0ZUlzRmxvYXQzMigpOworICAgICAgICBjb3B5RnJvbVVuY2hlY2tlZChkLCBFbGVtZW50LkRhdGFUeXBlLkZMT0FUXzMyLCBkLmxlbmd0aCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC03OTgsNiArODM3LDI5IEBACiAgICAgICAgIG1SUy5uQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyhnZXRJRChtUlMpKTsKICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKGludCBvZmYsIGludCBjb3VudCwgT2JqZWN0IGFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudC5EYXRhVHlwZSBkdCwgaW50IGFycmF5TGVuKSB7CisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCIpOworICAgICAgICBmaW5hbCBpbnQgZGF0YVNpemUgPSBtVHlwZS5tRWxlbWVudC5nZXRCeXRlc1NpemUoKSAqIGNvdW50OworICAgICAgICBkYXRhMURDaGVja3Mob2ZmLCBjb3VudCwgYXJyYXlMZW4gKiBkdC5tU2l6ZSwgZGF0YVNpemUpOworICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhMUQoZ2V0SURTYWZlKCksIG9mZiwgbVNlbGVjdGVkTE9ELCBjb3VudCwgYXJyYXksIGRhdGFTaXplLCBkdCk7CisgICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgYW4gYXJyYXkgaW50byBwYXJ0IG9mIHRoaXMgQWxsb2NhdGlvbi4gIFRoaXMgbWV0aG9kIGRvZXMgbm90CisgICAgICogZ3VhcmFudGVlIHRoYXQgdGhlIEFsbG9jYXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBpbnB1dCBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb2ZmIFRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdG8gYmUgY29waWVkLgorICAgICAqIEBwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGNvcGllZC4KKyAgICAgKiBAcGFyYW0gYXJyYXkgVGhlIHNvdXJjZSBkYXRhIGFycmF5CisgICAgICovCisgICAgcHVibGljIHZvaWQgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKGludCBvZmYsIGludCBjb3VudCwgT2JqZWN0IGFycmF5KSB7CisgICAgICAgIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChvZmYsIGNvdW50LCBhcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlT2JqZWN0SXNQcmltaXRpdmVBcnJheShhcnJheSwgZmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLnJlZmxlY3QuQXJyYXkuZ2V0TGVuZ3RoKGFycmF5KSk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ29weSBhbiBhcnJheSBpbnRvIHBhcnQgb2YgdGhpcyBBbGxvY2F0aW9uLiAgVGhpcyBtZXRob2QgZG9lcyBub3QKICAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgQWxsb2NhdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGlucHV0IGJ1ZmZlci4KQEAgLTgwNywxMSArODY5LDcgQEAKICAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQoaW50IG9mZiwgaW50IGNvdW50LCBpbnRbXSBkKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZCIpOwotICAgICAgICBpbnQgZGF0YVNpemUgPSBtVHlwZS5tRWxlbWVudC5nZXRCeXRlc1NpemUoKSAqIGNvdW50OwotICAgICAgICBkYXRhMURDaGVja3Mob2ZmLCBjb3VudCwgZC5sZW5ndGggKiA0LCBkYXRhU2l6ZSk7Ci0gICAgICAgIG1SUy5uQWxsb2NhdGlvbkRhdGExRChnZXRJRFNhZmUoKSwgb2ZmLCBtU2VsZWN0ZWRMT0QsIGNvdW50LCBkLCBkYXRhU2l6ZSk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgKE9iamVjdClkLCBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF8zMiwgZC5sZW5ndGgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtODIzLDExICs4ODEsNyBAQAogICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQgb2ZmLCBpbnQgY291bnQsIHNob3J0W10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQiKTsKLSAgICAgICAgaW50IGRhdGFTaXplID0gbVR5cGUubUVsZW1lbnQuZ2V0Qnl0ZXNTaXplKCkgKiBjb3VudDsKLSAgICAgICAgZGF0YTFEQ2hlY2tzKG9mZiwgY291bnQsIGQubGVuZ3RoICogMiwgZGF0YVNpemUpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhMUQoZ2V0SURTYWZlKCksIG9mZiwgbVNlbGVjdGVkTE9ELCBjb3VudCwgZCwgZGF0YVNpemUpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKG9mZiwgY291bnQsIChPYmplY3QpZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMTYsIGQubGVuZ3RoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTgzOSwxMSArODkzLDcgQEAKICAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQoaW50IG9mZiwgaW50IGNvdW50LCBieXRlW10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQiKTsKLSAgICAgICAgaW50IGRhdGFTaXplID0gbVR5cGUubUVsZW1lbnQuZ2V0Qnl0ZXNTaXplKCkgKiBjb3VudDsKLSAgICAgICAgZGF0YTFEQ2hlY2tzKG9mZiwgY291bnQsIGQubGVuZ3RoLCBkYXRhU2l6ZSk7Ci0gICAgICAgIG1SUy5uQWxsb2NhdGlvbkRhdGExRChnZXRJRFNhZmUoKSwgb2ZmLCBtU2VsZWN0ZWRMT0QsIGNvdW50LCBkLCBkYXRhU2l6ZSk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgKE9iamVjdClkLCBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF84LCBkLmxlbmd0aCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC04NTUsMTEgKzkwNSwyMyBAQAogICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQgb2ZmLCBpbnQgY291bnQsIGZsb2F0W10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQiKTsKLSAgICAgICAgaW50IGRhdGFTaXplID0gbVR5cGUubUVsZW1lbnQuZ2V0Qnl0ZXNTaXplKCkgKiBjb3VudDsKLSAgICAgICAgZGF0YTFEQ2hlY2tzKG9mZiwgY291bnQsIGQubGVuZ3RoICogNCwgZGF0YVNpemUpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhMUQoZ2V0SURTYWZlKCksIG9mZiwgbVNlbGVjdGVkTE9ELCBjb3VudCwgZCwgZGF0YVNpemUpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKG9mZiwgY291bnQsIChPYmplY3QpZCwgRWxlbWVudC5EYXRhVHlwZS5GTE9BVF8zMiwgZC5sZW5ndGgpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogQ29weSBhbiBhcnJheSBpbnRvIHBhcnQgb2YgdGhpcyBBbGxvY2F0aW9uLiAgVGhpcyB2YXJpYW50IGlzIHR5cGUgY2hlY2tlZAorICAgICAqIGFuZCB3aWxsIGdlbmVyYXRlIGV4Y2VwdGlvbnMgaWYgdGhlIEFsbG9jYXRpb24gdHlwZSBkb2VzIG5vdAorICAgICAqIG1hdGNoIHRoZSBjb21wb25lbnQgdHlwZSBvZiB0aGUgYXJyYXkgcGFzc2VkIGluLgorICAgICAqCisgICAgICogQHBhcmFtIG9mZiBUaGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBlbGVtZW50IHRvIGJlIGNvcGllZC4KKyAgICAgKiBAcGFyYW0gY291bnQgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBiZSBjb3BpZWQuCisgICAgICogQHBhcmFtIGFycmF5IFRoZSBzb3VyY2UgZGF0YSBhcnJheS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb20oaW50IG9mZiwgaW50IGNvdW50LCBPYmplY3QgYXJyYXkpIHsKKyAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKG9mZiwgY291bnQsIGFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVPYmplY3RJc1ByaW1pdGl2ZUFycmF5KGFycmF5LCB0cnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5yZWZsZWN0LkFycmF5LmdldExlbmd0aChhcnJheSkpOwogICAgIH0KIAogICAgIC8qKgpAQCAtODcyLDEwICs5MzQsOCBAQAogICAgICAqIEBwYXJhbSBkIHRoZSBzb3VyY2UgZGF0YSBhcnJheQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbShpbnQgb2ZmLCBpbnQgY291bnQsIGludFtdIGQpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTFEUmFuZ2VGcm9tIik7CiAgICAgICAgIHZhbGlkYXRlSXNJbnQzMigpOwotICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgZCk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMzIsIGQubGVuZ3RoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTg4OCwxMCArOTQ4LDggQEAKICAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb20oaW50IG9mZiwgaW50IGNvdW50LCBzaG9ydFtdIGQpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTFEUmFuZ2VGcm9tIik7CiAgICAgICAgIHZhbGlkYXRlSXNJbnQxNigpOwotICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgZCk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgICAgICBjb3B5MURSYW5nZUZyb21VbmNoZWNrZWQob2ZmLCBjb3VudCwgZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMTYsIGQubGVuZ3RoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTkwNCwxMCArOTYyLDggQEAKICAgICAgKiBAcGFyYW0gZCB0aGUgc291cmNlIGRhdGEgYXJyYXkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb3B5MURSYW5nZUZyb20oaW50IG9mZiwgaW50IGNvdW50LCBieXRlW10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MURSYW5nZUZyb20iKTsKICAgICAgICAgdmFsaWRhdGVJc0ludDgoKTsKLSAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKG9mZiwgY291bnQsIGQpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKG9mZiwgY291bnQsIGQsIEVsZW1lbnQuRGF0YVR5cGUuU0lHTkVEXzgsIGQubGVuZ3RoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTkyMCwxMSArOTc2LDEwIEBACiAgICAgICogQHBhcmFtIGQgdGhlIHNvdXJjZSBkYXRhIGFycmF5LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvcHkxRFJhbmdlRnJvbShpbnQgb2ZmLCBpbnQgY291bnQsIGZsb2F0W10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MURSYW5nZUZyb20iKTsKICAgICAgICAgdmFsaWRhdGVJc0Zsb2F0MzIoKTsKLSAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKG9mZiwgY291bnQsIGQpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICAgICAgY29weTFEUmFuZ2VGcm9tVW5jaGVja2VkKG9mZiwgY291bnQsIGQsIEVsZW1lbnQuRGF0YVR5cGUuRkxPQVRfMzIsIGQubGVuZ3RoKTsKICAgICB9CisKICAgICAgLyoqCiAgICAgICogQ29weSBwYXJ0IG9mIGFuIEFsbG9jYXRpb24gaW50byB0aGlzIEFsbG9jYXRpb24uCiAgICAgICoKQEAgLTk1OSwzOSArMTAxNCwzMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgdywgaW50IGgsIGJ5dGVbXSBkYXRhKSB7CisgICAgdm9pZCBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgdywgaW50IGgsIE9iamVjdCBhcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50LkRhdGFUeXBlIGR0LCBpbnQgYXJyYXlMZW4pIHsKICAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkIik7CiAgICAgICAgIG1SUy52YWxpZGF0ZSgpOwogICAgICAgICB2YWxpZGF0ZTJEUmFuZ2UoeG9mZiwgeW9mZiwgdywgaCk7Ci0gICAgICAgIG1SUy5uQWxsb2NhdGlvbkRhdGEyRChnZXRJRFNhZmUoKSwgeG9mZiwgeW9mZiwgbVNlbGVjdGVkTE9ELCBtU2VsZWN0ZWRGYWNlLm1JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsIGgsIGRhdGEsIGRhdGEubGVuZ3RoKTsKKyAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTJEKGdldElEU2FmZSgpLCB4b2ZmLCB5b2ZmLCBtU2VsZWN0ZWRMT0QsIG1TZWxlY3RlZEZhY2UubUlELCB3LCBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXksIGFycmF5TGVuICogZHQubVNpemUsIGR0KTsKICAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7CiAgICAgfQogCi0gICAgdm9pZCBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgdywgaW50IGgsIHNob3J0W10gZGF0YSkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQiKTsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIHZhbGlkYXRlMkRSYW5nZSh4b2ZmLCB5b2ZmLCB3LCBoKTsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTJEKGdldElEU2FmZSgpLCB4b2ZmLCB5b2ZmLCBtU2VsZWN0ZWRMT0QsIG1TZWxlY3RlZEZhY2UubUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdywgaCwgZGF0YSwgZGF0YS5sZW5ndGggKiAyKTsKLSAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7Ci0gICAgfQotCi0gICAgdm9pZCBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgdywgaW50IGgsIGludFtdIGRhdGEpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkIik7Ci0gICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICB2YWxpZGF0ZTJEUmFuZ2UoeG9mZiwgeW9mZiwgdywgaCk7Ci0gICAgICAgIG1SUy5uQWxsb2NhdGlvbkRhdGEyRChnZXRJRFNhZmUoKSwgeG9mZiwgeW9mZiwgbVNlbGVjdGVkTE9ELCBtU2VsZWN0ZWRGYWNlLm1JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsIGgsIGRhdGEsIGRhdGEubGVuZ3RoICogNCk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwotICAgIH0KLQotICAgIHZvaWQgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHcsIGludCBoLCBmbG9hdFtdIGRhdGEpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkIik7Ci0gICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICB2YWxpZGF0ZTJEUmFuZ2UoeG9mZiwgeW9mZiwgdywgaCk7Ci0gICAgICAgIG1SUy5uQWxsb2NhdGlvbkRhdGEyRChnZXRJRFNhZmUoKSwgeG9mZiwgeW9mZiwgbVNlbGVjdGVkTE9ELCBtU2VsZWN0ZWRGYWNlLm1JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsIGgsIGRhdGEsIGRhdGEubGVuZ3RoICogNCk7CisgICAgLyoqCisgICAgICogQ29weSBmcm9tIGFuIGFycmF5IGludG8gYSByZWN0YW5ndWxhciByZWdpb24gaW4gdGhpcyBBbGxvY2F0aW9uLiAgVGhlCisgICAgICogYXJyYXkgaXMgYXNzdW1lZCB0byBiZSB0aWdodGx5IHBhY2tlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB4b2ZmIFggb2Zmc2V0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlIGluIHRoaXMgQWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSB5b2ZmIFkgb2Zmc2V0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlIGluIHRoaXMgQWxsb2NhdGlvbgorICAgICAqIEBwYXJhbSB3IFdpZHRoIG9mIHRoZSByZWdpb24gdG8gdXBkYXRlCisgICAgICogQHBhcmFtIGggSGVpZ2h0IG9mIHRoZSByZWdpb24gdG8gdXBkYXRlCisgICAgICogQHBhcmFtIGFycmF5IERhdGEgdG8gYmUgcGxhY2VkIGludG8gdGhlIEFsbG9jYXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjb3B5MkRSYW5nZUZyb20oaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgdywgaW50IGgsIE9iamVjdCBhcnJheSkgeworICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MkRSYW5nZUZyb20iKTsKKyAgICAgICAgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKHhvZmYsIHlvZmYsIHcsIGgsIGFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVPYmplY3RJc1ByaW1pdGl2ZUFycmF5KGFycmF5LCB0cnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5yZWZsZWN0LkFycmF5LmdldExlbmd0aChhcnJheSkpOwogICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKICAgICB9CiAKQEAgLTEwMDYsMTAgKzEwNTMsOSBAQAogICAgICAqIEBwYXJhbSBkYXRhIHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBBbGxvY2F0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29weTJEUmFuZ2VGcm9tKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHcsIGludCBoLCBieXRlW10gZGF0YSkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5MkRSYW5nZUZyb20iKTsKICAgICAgICAgdmFsaWRhdGVJc0ludDgoKTsKLSAgICAgICAgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKHhvZmYsIHlvZmYsIHcsIGgsIGRhdGEpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICAgICAgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKHhvZmYsIHlvZmYsIHcsIGgsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF84LCBkYXRhLmxlbmd0aCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMDIzLDEwICsxMDY5LDkgQEAKICAgICAgKiBAcGFyYW0gZGF0YSB0byBiZSBwbGFjZWQgaW50byB0aGUgQWxsb2NhdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvcHkyRFJhbmdlRnJvbShpbnQgeG9mZiwgaW50IHlvZmYsIGludCB3LCBpbnQgaCwgc2hvcnRbXSBkYXRhKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkyRFJhbmdlRnJvbSIpOwogICAgICAgICB2YWxpZGF0ZUlzSW50MTYoKTsKLSAgICAgICAgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKHhvZmYsIHlvZmYsIHcsIGgsIGRhdGEpOwotICAgICAgICBUcmFjZS50cmFjZUVuZChSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHKTsKKyAgICAgICAgY29weTJEUmFuZ2VGcm9tVW5jaGVja2VkKHhvZmYsIHlvZmYsIHcsIGgsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF8xNiwgZGF0YS5sZW5ndGgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTA0MCwxMCArMTA4NSw5IEBACiAgICAgICogQHBhcmFtIGRhdGEgdG8gYmUgcGxhY2VkIGludG8gdGhlIEFsbG9jYXRpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb3B5MkRSYW5nZUZyb20oaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgdywgaW50IGgsIGludFtdIGRhdGEpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weTJEUmFuZ2VGcm9tIik7CiAgICAgICAgIHZhbGlkYXRlSXNJbnQzMigpOwotICAgICAgICBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoeG9mZiwgeW9mZiwgdywgaCwgZGF0YSk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgICAgICBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoeG9mZiwgeW9mZiwgdywgaCwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQuRGF0YVR5cGUuU0lHTkVEXzMyLCBkYXRhLmxlbmd0aCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMDU3LDEwICsxMTAxLDkgQEAKICAgICAgKiBAcGFyYW0gZGF0YSB0byBiZSBwbGFjZWQgaW50byB0aGUgQWxsb2NhdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvcHkyRFJhbmdlRnJvbShpbnQgeG9mZiwgaW50IHlvZmYsIGludCB3LCBpbnQgaCwgZmxvYXRbXSBkYXRhKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkyRFJhbmdlRnJvbSIpOwogICAgICAgICB2YWxpZGF0ZUlzRmxvYXQzMigpOwotICAgICAgICBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoeG9mZiwgeW9mZiwgdywgaCwgZGF0YSk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgICAgICBjb3B5MkRSYW5nZUZyb21VbmNoZWNrZWQoeG9mZiwgeW9mZiwgdywgaCwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQuRGF0YVR5cGUuRkxPQVRfMzIsIGRhdGEubGVuZ3RoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTExMzMsNDkgKzExNzYsMTggQEAKICAgICAgKiBAaGlkZQogICAgICAqCiAgICAgICovCi0gICAgdm9pZCBjb3B5M0RSYW5nZUZyb21VbmNoZWNrZWQoaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IHcsIGludCBoLCBpbnQgZCwgYnl0ZVtdIGRhdGEpIHsKKyAgICBwcml2YXRlIHZvaWQgY29weTNEUmFuZ2VGcm9tVW5jaGVja2VkKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCB3LCBpbnQgaCwgaW50IGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgYXJyYXksIEVsZW1lbnQuRGF0YVR5cGUgZHQsIGludCBhcnJheUxlbikgeworICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5M0RSYW5nZUZyb21VbmNoZWNrZWQiKTsKICAgICAgICAgbVJTLnZhbGlkYXRlKCk7CiAgICAgICAgIHZhbGlkYXRlM0RSYW5nZSh4b2ZmLCB5b2ZmLCB6b2ZmLCB3LCBoLCBkKTsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTNEKGdldElEU2FmZSgpLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBtU2VsZWN0ZWRMT0QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBkLCBkYXRhLCBkYXRhLmxlbmd0aCk7CisgICAgICAgIG1SUy5uQWxsb2NhdGlvbkRhdGEzRChnZXRJRFNhZmUoKSwgeG9mZiwgeW9mZiwgem9mZiwgbVNlbGVjdGVkTE9ELCB3LCBoLCBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXksIGFycmF5TGVuICogZHQubVNpemUsIGR0KTsKKyAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQGhpZGUKLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgY29weTNEUmFuZ2VGcm9tVW5jaGVja2VkKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCB3LCBpbnQgaCwgaW50IGQsIHNob3J0W10gZGF0YSkgewotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgdmFsaWRhdGUzRFJhbmdlKHhvZmYsIHlvZmYsIHpvZmYsIHcsIGgsIGQpOwotICAgICAgICBtUlMubkFsbG9jYXRpb25EYXRhM0QoZ2V0SURTYWZlKCksIHhvZmYsIHlvZmYsIHpvZmYsIG1TZWxlY3RlZExPRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsIGgsIGQsIGRhdGEsIGRhdGEubGVuZ3RoICogMik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGhpZGUKLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgY29weTNEUmFuZ2VGcm9tVW5jaGVja2VkKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCB3LCBpbnQgaCwgaW50IGQsIGludFtdIGRhdGEpIHsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIHZhbGlkYXRlM0RSYW5nZSh4b2ZmLCB5b2ZmLCB6b2ZmLCB3LCBoLCBkKTsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTNEKGdldElEU2FmZSgpLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBtU2VsZWN0ZWRMT0QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBkLCBkYXRhLCBkYXRhLmxlbmd0aCAqIDQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICoKLSAgICAgKi8KLSAgICB2b2lkIGNvcHkzRFJhbmdlRnJvbVVuY2hlY2tlZChpbnQgeG9mZiwgaW50IHlvZmYsIGludCB6b2ZmLCBpbnQgdywgaW50IGgsIGludCBkLCBmbG9hdFtdIGRhdGEpIHsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIHZhbGlkYXRlM0RSYW5nZSh4b2ZmLCB5b2ZmLCB6b2ZmLCB3LCBoLCBkKTsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uRGF0YTNEKGdldElEU2FmZSgpLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBtU2VsZWN0ZWRMT0QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBoLCBkLCBkYXRhLCBkYXRhLmxlbmd0aCAqIDQpOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogQGhpZGUKICAgICAgKiBDb3B5IGEgcmVjdGFuZ3VsYXIgcmVnaW9uIGZyb20gdGhlIGFycmF5IGludG8gdGhlIGFsbG9jYXRpb24uCiAgICAgICogVGhlIGFycmF5IGlzIGFzc3VtZWQgdG8gYmUgdGlnaHRseSBwYWNrZWQuCiAgICAgICoKQEAgLTExODcsMzYgKzExOTksMTIgQEAKICAgICAgKiBAcGFyYW0gZCBEZXB0aCBvZiB0aGUgcmVnaW9uIHRvIHVwZGF0ZQogICAgICAqIEBwYXJhbSBkYXRhIHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBhbGxvY2F0aW9uCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgY29weTNEUmFuZ2VGcm9tKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCB3LCBpbnQgaCwgaW50IGQsIGJ5dGVbXSBkYXRhKSB7Ci0gICAgICAgIHZhbGlkYXRlSXNJbnQ4KCk7Ci0gICAgICAgIGNvcHkzRFJhbmdlRnJvbVVuY2hlY2tlZCh4b2ZmLCB5b2ZmLCB6b2ZmLCB3LCBoLCBkLCBkYXRhKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAaGlkZQotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29weTNEUmFuZ2VGcm9tKGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCB3LCBpbnQgaCwgaW50IGQsIHNob3J0W10gZGF0YSkgewotICAgICAgICB2YWxpZGF0ZUlzSW50MTYoKTsKLSAgICAgICAgY29weTNEUmFuZ2VGcm9tVW5jaGVja2VkKHhvZmYsIHlvZmYsIHpvZmYsIHcsIGgsIGQsIGRhdGEpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5M0RSYW5nZUZyb20oaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IHcsIGludCBoLCBpbnQgZCwgaW50W10gZGF0YSkgewotICAgICAgICB2YWxpZGF0ZUlzSW50MzIoKTsKLSAgICAgICAgY29weTNEUmFuZ2VGcm9tVW5jaGVja2VkKHhvZmYsIHlvZmYsIHpvZmYsIHcsIGgsIGQsIGRhdGEpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjb3B5M0RSYW5nZUZyb20oaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IHcsIGludCBoLCBpbnQgZCwgZmxvYXRbXSBkYXRhKSB7Ci0gICAgICAgIHZhbGlkYXRlSXNGbG9hdDMyKCk7Ci0gICAgICAgIGNvcHkzRFJhbmdlRnJvbVVuY2hlY2tlZCh4b2ZmLCB5b2ZmLCB6b2ZmLCB3LCBoLCBkLCBkYXRhKTsKKyAgICBwdWJsaWMgdm9pZCBjb3B5M0RSYW5nZUZyb20oaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IHcsIGludCBoLCBpbnQgZCwgT2JqZWN0IGFycmF5KSB7CisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHkzRFJhbmdlRnJvbSIpOworICAgICAgICBjb3B5M0RSYW5nZUZyb21VbmNoZWNrZWQoeG9mZiwgeW9mZiwgem9mZiwgdywgaCwgZCwgYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdElzUHJpbWl0aXZlQXJyYXkoYXJyYXksIHRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLnJlZmxlY3QuQXJyYXkuZ2V0TGVuZ3RoKGFycmF5KSk7CisgICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTI2MCw2ICsxMjQ4LDI2IEBACiAgICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOwogICAgIH0KIAorICAgIHByaXZhdGUgdm9pZCBjb3B5VG8oT2JqZWN0IGFycmF5LCBFbGVtZW50LkRhdGFUeXBlIGR0LCBpbnQgYXJyYXlMZW4pIHsKKyAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weVRvIik7CisgICAgICAgIG1SUy52YWxpZGF0ZSgpOworICAgICAgICBtUlMubkFsbG9jYXRpb25SZWFkKGdldElEKG1SUyksIGFycmF5LCBkdCk7CisgICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcHkgZnJvbSB0aGUgQWxsb2NhdGlvbiBpbnRvIGFuIGFycmF5LiAgVGhlIGFycmF5IG11c3QgYmUgYXQKKyAgICAgKiBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgQWxsb2NhdGlvbi4gIFRoZQorICAgICAqIHtAbGluayBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50fSBtdXN0IG1hdGNoIHRoZSBjb21wb25lbnQKKyAgICAgKiB0eXBlIG9mIHRoZSBhcnJheSBwYXNzZWQgaW4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYXJyYXkgVGhlIGFycmF5IHRvIGJlIHNldCBmcm9tIHRoZSBBbGxvY2F0aW9uLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNvcHlUbyhPYmplY3QgYXJyYXkpIHsKKyAgICAgICAgY29weVRvKGFycmF5LCB2YWxpZGF0ZU9iamVjdElzUHJpbWl0aXZlQXJyYXkoYXJyYXksIHRydWUpLAorICAgICAgICAgICAgICAgamF2YS5sYW5nLnJlZmxlY3QuQXJyYXkuZ2V0TGVuZ3RoKGFycmF5KSk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ29weSBmcm9tIHRoZSBBbGxvY2F0aW9uIGludG8gYSBieXRlIGFycmF5LiAgVGhlIGFycmF5IG11c3QgYmUgYXQgbGVhc3QKICAgICAgKiBhcyBsYXJnZSBhcyB0aGUgQWxsb2NhdGlvbi4gIFRoZSBhbGxvY2F0aW9uIG11c3QgYmUgb2YgYW4gOCBiaXQgaW50ZWdlcgpAQCAtMTI2OCwxMSArMTI3Niw4IEBACiAgICAgICogQHBhcmFtIGQgVGhlIGFycmF5IHRvIGJlIHNldCBmcm9tIHRoZSBBbGxvY2F0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvcHlUbyhieXRlW10gZCkgewotICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcsICJjb3B5VG8iKTsKICAgICAgICAgdmFsaWRhdGVJc0ludDgoKTsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIG1SUy5uQWxsb2NhdGlvblJlYWQoZ2V0SUQobVJTKSwgZCk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgICAgICBjb3B5VG8oZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfOCwgZC5sZW5ndGgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTI4MywxMSArMTI4OCw4IEBACiAgICAgICogQHBhcmFtIGQgVGhlIGFycmF5IHRvIGJlIHNldCBmcm9tIHRoZSBBbGxvY2F0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvcHlUbyhzaG9ydFtdIGQpIHsKLSAgICAgICAgVHJhY2UudHJhY2VCZWdpbihSZW5kZXJTY3JpcHQuVFJBQ0VfVEFHLCAiY29weVRvIik7CiAgICAgICAgIHZhbGlkYXRlSXNJbnQxNigpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uUmVhZChnZXRJRChtUlMpLCBkKTsKLSAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7CisgICAgICAgIGNvcHlUbyhkLCBFbGVtZW50LkRhdGFUeXBlLlNJR05FRF8xNiwgZC5sZW5ndGgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTI5OCwxMSArMTMwMCw4IEBACiAgICAgICogQHBhcmFtIGQgVGhlIGFycmF5IHRvIGJlIHNldCBmcm9tIHRoZSBBbGxvY2F0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvcHlUbyhpbnRbXSBkKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHlUbyIpOwogICAgICAgICB2YWxpZGF0ZUlzSW50MzIoKTsKLSAgICAgICAgbVJTLnZhbGlkYXRlKCk7Ci0gICAgICAgIG1SUy5uQWxsb2NhdGlvblJlYWQoZ2V0SUQobVJTKSwgZCk7Ci0gICAgICAgIFRyYWNlLnRyYWNlRW5kKFJlbmRlclNjcmlwdC5UUkFDRV9UQUcpOworICAgICAgICBjb3B5VG8oZCwgRWxlbWVudC5EYXRhVHlwZS5TSUdORURfMzIsIGQubGVuZ3RoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTEzMTMsMTEgKzEzMTIsOCBAQAogICAgICAqIEBwYXJhbSBkIFRoZSBhcnJheSB0byBiZSBzZXQgZnJvbSB0aGUgQWxsb2NhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb3B5VG8oZmxvYXRbXSBkKSB7Ci0gICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oUmVuZGVyU2NyaXB0LlRSQUNFX1RBRywgImNvcHlUbyIpOwogICAgICAgICB2YWxpZGF0ZUlzRmxvYXQzMigpOwotICAgICAgICBtUlMudmFsaWRhdGUoKTsKLSAgICAgICAgbVJTLm5BbGxvY2F0aW9uUmVhZChnZXRJRChtUlMpLCBkKTsKLSAgICAgICAgVHJhY2UudHJhY2VFbmQoUmVuZGVyU2NyaXB0LlRSQUNFX1RBRyk7CisgICAgICAgIGNvcHlUbyhkLCBFbGVtZW50LkRhdGFUeXBlLkZMT0FUXzMyLCBkLmxlbmd0aCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMzQyLDcgKzEzMzgsNyBAQAogICAgICAgICBtUlMubkFsbG9jYXRpb25SZXNpemUxRChnZXRJRChtUlMpLCBkaW1YKTsKICAgICAgICAgbVJTLmZpbmlzaCgpOyAgLy8gTmVjZXNzYXJ5IGJlY2F1c2UgcmVzaXplIGlzIGZpZm9lZCBhbmQgdXBkYXRlIGlzIGFzeW5jLgogCi0gICAgICAgIGludCB0eXBlSUQgPSBtUlMubkFsbG9jYXRpb25HZXRUeXBlKGdldElEKG1SUykpOworICAgICAgICBsb25nIHR5cGVJRCA9IG1SUy5uQWxsb2NhdGlvbkdldFR5cGUoZ2V0SUQobVJTKSk7CiAgICAgICAgIG1UeXBlID0gbmV3IFR5cGUodHlwZUlELCBtUlMpOwogICAgICAgICBtVHlwZS51cGRhdGVGcm9tTmF0aXZlKCk7CiAgICAgICAgIHVwZGF0ZUNhY2hlSW5mbyhtVHlwZSk7CkBAIC0xMzcyLDcgKzEzNjgsNyBAQAogICAgICAgICBpZiAodHlwZS5nZXRJRChycykgPT0gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKCJCYWQgVHlwZSIpOwogICAgICAgICB9Ci0gICAgICAgIGludCBpZCA9IHJzLm5BbGxvY2F0aW9uQ3JlYXRlVHlwZWQodHlwZS5nZXRJRChycyksIG1pcHMubUlELCB1c2FnZSwgMCk7CisgICAgICAgIGxvbmcgaWQgPSBycy5uQWxsb2NhdGlvbkNyZWF0ZVR5cGVkKHR5cGUuZ2V0SUQocnMpLCBtaXBzLm1JRCwgdXNhZ2UsIDApOwogICAgICAgICBpZiAoaWQgPT0gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiQWxsb2NhdGlvbiBjcmVhdGlvbiBmYWlsZWQuIik7CiAgICAgICAgIH0KQEAgLTE0MjcsNyArMTQyMyw3IEBACiAgICAgICAgIGIuc2V0WChjb3VudCk7CiAgICAgICAgIFR5cGUgdCA9IGIuY3JlYXRlKCk7CiAKLSAgICAgICAgaW50IGlkID0gcnMubkFsbG9jYXRpb25DcmVhdGVUeXBlZCh0LmdldElEKHJzKSwgTWlwbWFwQ29udHJvbC5NSVBNQVBfTk9ORS5tSUQsIHVzYWdlLCAwKTsKKyAgICAgICAgbG9uZyBpZCA9IHJzLm5BbGxvY2F0aW9uQ3JlYXRlVHlwZWQodC5nZXRJRChycyksIE1pcG1hcENvbnRyb2wuTUlQTUFQX05PTkUubUlELCB1c2FnZSwgMCk7CiAgICAgICAgIGlmIChpZCA9PSAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJBbGxvY2F0aW9uIGNyZWF0aW9uIGZhaWxlZC4iKTsKICAgICAgICAgfQpAQCAtMTUxMSw3ICsxNTA3LDcgQEAKICAgICAgICAgaWYgKG1pcHMgPT0gTWlwbWFwQ29udHJvbC5NSVBNQVBfTk9ORSAmJgogICAgICAgICAgICAgdC5nZXRFbGVtZW50KCkuaXNDb21wYXRpYmxlKEVsZW1lbnQuUkdCQV84ODg4KHJzKSkgJiYKICAgICAgICAgICAgIHVzYWdlID09IChVU0FHRV9TSEFSRUQgfCBVU0FHRV9TQ1JJUFQgfCBVU0FHRV9HUkFQSElDU19URVhUVVJFKSkgewotICAgICAgICAgICAgaW50IGlkID0gcnMubkFsbG9jYXRpb25DcmVhdGVCaXRtYXBCYWNrZWRBbGxvY2F0aW9uKHQuZ2V0SUQocnMpLCBtaXBzLm1JRCwgYiwgdXNhZ2UpOworICAgICAgICAgICAgbG9uZyBpZCA9IHJzLm5BbGxvY2F0aW9uQ3JlYXRlQml0bWFwQmFja2VkQWxsb2NhdGlvbih0LmdldElEKHJzKSwgbWlwcy5tSUQsIGIsIHVzYWdlKTsKICAgICAgICAgICAgIGlmIChpZCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiTG9hZCBmYWlsZWQuIik7CiAgICAgICAgICAgICB9CkBAIC0xNTIzLDcgKzE1MTksNyBAQAogICAgICAgICB9CiAKIAotICAgICAgICBpbnQgaWQgPSBycy5uQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAodC5nZXRJRChycyksIG1pcHMubUlELCBiLCB1c2FnZSk7CisgICAgICAgIGxvbmcgaWQgPSBycy5uQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAodC5nZXRJRChycyksIG1pcHMubUlELCBiLCB1c2FnZSk7CiAgICAgICAgIGlmIChpZCA9PSAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJMb2FkIGZhaWxlZC4iKTsKICAgICAgICAgfQpAQCAtMTU0NywxMyArMTU0Myw2IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRTdXJmYWNlVGV4dHVyZShTdXJmYWNlVGV4dHVyZSBzdCkgewotICAgICAgICBzZXRTdXJmYWNlKG5ldyBTdXJmYWNlKHN0KSk7Ci0gICAgfQotCi0gICAgLyoqCiAgICAgICogQXNzb2NpYXRlIGEge0BsaW5rIGFuZHJvaWQudmlldy5TdXJmYWNlfSB3aXRoIHRoaXMgQWxsb2NhdGlvbi4gVGhpcwogICAgICAqIG9wZXJhdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBBbGxvY2F0aW9ucyB3aXRoIHtAbGluayAjVVNBR0VfSU9fT1VUUFVUfS4KICAgICAgKgpAQCAtMTYzMyw3ICsxNjIyLDcgQEAKICAgICAgICAgdGIuc2V0TWlwbWFwcyhtaXBzID09IE1pcG1hcENvbnRyb2wuTUlQTUFQX0ZVTEwpOwogICAgICAgICBUeXBlIHQgPSB0Yi5jcmVhdGUoKTsKIAotICAgICAgICBpbnQgaWQgPSBycy5uQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwKHQuZ2V0SUQocnMpLCBtaXBzLm1JRCwgYiwgdXNhZ2UpOworICAgICAgICBsb25nIGlkID0gcnMubkFsbG9jYXRpb25DdWJlQ3JlYXRlRnJvbUJpdG1hcCh0LmdldElEKHJzKSwgbWlwcy5tSUQsIGIsIHVzYWdlKTsKICAgICAgICAgaWYoaWQgPT0gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiTG9hZCBmYWlsZWQgZm9yIGJpdG1hcCAiICsgYiArICIgZWxlbWVudCAiICsgZSk7CiAgICAgICAgIH0KQEAgLTE4NTgsMTQgKzE4NDcsMTQgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRPbkJ1ZmZlckF2YWlsYWJsZUxpc3RlbmVyKE9uQnVmZmVyQXZhaWxhYmxlTGlzdGVuZXIgY2FsbGJhY2spIHsKICAgICAgICAgc3luY2hyb25pemVkKG1BbGxvY2F0aW9uTWFwKSB7Ci0gICAgICAgICAgICBtQWxsb2NhdGlvbk1hcC5wdXQobmV3IEludGVnZXIoZ2V0SUQobVJTKSksIHRoaXMpOworICAgICAgICAgICAgbUFsbG9jYXRpb25NYXAucHV0KG5ldyBMb25nKGdldElEKG1SUykpLCB0aGlzKTsKICAgICAgICAgICAgIG1CdWZmZXJOb3RpZmllciA9IGNhbGxiYWNrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgc2VuZEJ1ZmZlck5vdGlmaWNhdGlvbihpbnQgaWQpIHsKICAgICAgICAgc3luY2hyb25pemVkKG1BbGxvY2F0aW9uTWFwKSB7Ci0gICAgICAgICAgICBBbGxvY2F0aW9uIGEgPSBtQWxsb2NhdGlvbk1hcC5nZXQobmV3IEludGVnZXIoaWQpKTsKKyAgICAgICAgICAgIEFsbG9jYXRpb24gYSA9IG1BbGxvY2F0aW9uTWFwLmdldChuZXcgTG9uZyhpZCkpOwogCiAgICAgICAgICAgICBpZiAoKGEgIT0gbnVsbCkgJiYgKGEubUJ1ZmZlck5vdGlmaWVyICE9IG51bGwpKSB7CiAgICAgICAgICAgICAgICAgYS5tQnVmZmVyTm90aWZpZXIub25CdWZmZXJBdmFpbGFibGUoYSk7CkBAIC0xODc0LDQgKzE4NjMsMyBAQAogICAgIH0KIAogfQotCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb25BZGFwdGVyLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0FsbG9jYXRpb25BZGFwdGVyLmphdmEKaW5kZXggYTY2NDViYi4uNmMxYjFlZCAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9BbGxvY2F0aW9uQWRhcHRlci5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQWxsb2NhdGlvbkFkYXB0ZXIuamF2YQpAQCAtMTYsMjIgKzE2LDE3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7Ci0KIC8qKgogICogT25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IGdlbmVyYXRlZCByZWZsZWN0ZWQgY29kZS4KICAqCiAgKiovCiBwdWJsaWMgY2xhc3MgQWxsb2NhdGlvbkFkYXB0ZXIgZXh0ZW5kcyBBbGxvY2F0aW9uIHsKLSAgICBBbGxvY2F0aW9uQWRhcHRlcihpbnQgaWQsIFJlbmRlclNjcmlwdCBycywgQWxsb2NhdGlvbiBhbGxvYykgeworICAgIEFsbG9jYXRpb25BZGFwdGVyKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycywgQWxsb2NhdGlvbiBhbGxvYykgewogICAgICAgICBzdXBlcihpZCwgcnMsIGFsbG9jLm1UeXBlLCBhbGxvYy5tVXNhZ2UpOwogICAgICAgICBtQWRhcHRlZEFsbG9jYXRpb24gPSBhbGxvYzsKICAgICB9CiAKLSAgICBpbnQgZ2V0SUQoUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgbG9uZyBnZXRJRChSZW5kZXJTY3JpcHQgcnMpIHsKICAgICAgICAgdGhyb3cgbmV3IFJTSW52YWxpZFN0YXRlRXhjZXB0aW9uKAogICAgICAgICAgICAgIlRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBhZGFwdGVycyBhdCB0aGlzIHRpbWUuIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9CYXNlT2JqLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmouamF2YQppbmRleCBlMTdkNzlhLi4xYTE1Y2U2IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmouamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0Jhc2VPYmouamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogLyoqCiAgKiBCYXNlT2JqIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgUmVuZGVyU2NyaXB0IG9iamVjdHMgb3duZWQgYnkgYSBSUyBjb250ZXh0LgogICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGxpZmV0aW1lIG1hbmFnZW1lbnQgYW5kIHJlc291cmNlIHRyYWNraW5nLiBUaGlzIGNsYXNzCkBAIC0yNSw3ICsyMyw3IEBACiAgKgogICoqLwogcHVibGljIGNsYXNzIEJhc2VPYmogewotICAgIEJhc2VPYmooaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICBCYXNlT2JqKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgewogICAgICAgICBycy52YWxpZGF0ZSgpOwogICAgICAgICBtUlMgPSByczsKICAgICAgICAgbUlEID0gaWQ7CkBAIC00Niw5ICs0NCw5IEBACiAgICAgICogQHBhcmFtIHJzIENvbnRleHQgdG8gdmVyaWZ5IGFnYWluc3QgaW50ZXJuYWwgY29udGV4dCBmb3IKICAgICAgKiAgICAgICAgICAgbWF0Y2guCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIGludAorICAgICAqIEByZXR1cm4gbG9uZwogICAgICAqLwotICAgIGludCBnZXRJRChSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICBsb25nIGdldElEKFJlbmRlclNjcmlwdCBycykgewogICAgICAgICBtUlMudmFsaWRhdGUoKTsKICAgICAgICAgaWYgKG1EZXN0cm95ZWQpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSU0ludmFsaWRTdGF0ZUV4Y2VwdGlvbigidXNpbmcgYSBkZXN0cm95ZWQgb2JqZWN0LiIpOwpAQCAtNjgsNyArNjYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBpbnQgbUlEOworICAgIHByaXZhdGUgbG9uZyBtSUQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1EZXN0cm95ZWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbU5hbWU7CiAgICAgUmVuZGVyU2NyaXB0IG1SUzsKQEAgLTE1Miw3ICsxNTAsNyBAQAogICAgICAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgICAgIHJldHVybiBtSUQ7CisgICAgICAgIHJldHVybiAoaW50KSgobUlEICYgMHhmZmZmZmZmKSBeIChtSUQgPj4gMzIpKTsKICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTIuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTIuamF2YQppbmRleCBmNzk2ZGUzLi4zYWQ3OWU0IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0J5dGUyLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9CeXRlMi5qYXZhCkBAIC0xNiw5ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CiAKLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAKIC8qKgogICogQ2xhc3MgZm9yIGV4cG9zaW5nIHRoZSBuYXRpdmUgUmVuZGVyU2NyaXB0IGJ5dGUyIHR5cGUgYmFjayB0byB0aGUgQW5kcm9pZCBzeXN0ZW0uCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0J5dGUzLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0J5dGUzLmphdmEKaW5kZXggZjJhOTVhYy4uYTEzODMxMyAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9CeXRlMy5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTMuamF2YQpAQCAtMTYsOSArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwogCi1pbXBvcnQgamF2YS5sYW5nLk1hdGg7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogCiAvKioKICAqIENsYXNzIGZvciBleHBvc2luZyB0aGUgbmF0aXZlIFJlbmRlclNjcmlwdCBieXRlMyB0eXBlIGJhY2sgdG8gdGhlIEFuZHJvaWQgc3lzdGVtLgpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9CeXRlNC5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9CeXRlNC5qYXZhCmluZGV4IGI4YThhNmIuLmZhNGMxM2QgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvQnl0ZTQuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0J5dGU0LmphdmEKQEAgLTE2LDkgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKIAotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIAogLyoqCiAgKiBDbGFzcyBmb3IgZXhwb3NpbmcgdGhlIG5hdGl2ZSBSZW5kZXJTY3JpcHQgYnl0ZTQgdHlwZSBiYWNrIHRvIHRoZSBBbmRyb2lkIHN5c3RlbS4KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRWxlbWVudC5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50LmphdmEKaW5kZXggNjhiYWRmYS4uOTNlODM5ZSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50LmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9FbGVtZW50LmphdmEKQEAgLTE2LDkgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKIAotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIC8qKgogICogPHA+QW4gRWxlbWVudCByZXByZXNlbnRzIG9uZSBpdGVtIHdpdGhpbiBhbiB7QGxpbmsKICAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb259LiAgQW4gRWxlbWVudCBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYSBDCkBAIC03NTksNyArNzU2LDcgQEAKICAgICAgICAgcmV0dXJuIHJzLm1FbGVtZW50X01BVFJJWF8yWDI7CiAgICAgfQogCi0gICAgRWxlbWVudChpbnQgaWQsIFJlbmRlclNjcmlwdCBycywgRWxlbWVudFtdIGUsIFN0cmluZ1tdIG4sIGludFtdIGFzKSB7CisgICAgRWxlbWVudChsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnRbXSBlLCBTdHJpbmdbXSBuLCBpbnRbXSBhcykgewogICAgICAgICBzdXBlcihpZCwgcnMpOwogICAgICAgICBtU2l6ZSA9IDA7CiAgICAgICAgIG1WZWN0b3JTaXplID0gMTsKQEAgLTc3Niw3ICs3NzMsNyBAQAogICAgICAgICB1cGRhdGVWaXNpYmxlU3ViRWxlbWVudHMoKTsKICAgICB9CiAKLSAgICBFbGVtZW50KGludCBpZCwgUmVuZGVyU2NyaXB0IHJzLCBEYXRhVHlwZSBkdCwgRGF0YUtpbmQgZGssIGJvb2xlYW4gbm9ybSwgaW50IHNpemUpIHsKKyAgICBFbGVtZW50KGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycywgRGF0YVR5cGUgZHQsIERhdGFLaW5kIGRrLCBib29sZWFuIG5vcm0sIGludCBzaXplKSB7CiAgICAgICAgIHN1cGVyKGlkLCBycyk7CiAgICAgICAgIGlmICgoZHQgIT0gRGF0YVR5cGUuVU5TSUdORURfNV82XzUpICYmCiAgICAgICAgICAgICAoZHQgIT0gRGF0YVR5cGUuVU5TSUdORURfNF80XzRfNCkgJiYKQEAgLTc5NSw3ICs3OTIsNyBAQAogICAgICAgICBtVmVjdG9yU2l6ZSA9IHNpemU7CiAgICAgfQogCi0gICAgRWxlbWVudChpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgIEVsZW1lbnQobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CiAgICAgICAgIHN1cGVyKGlkLCBycyk7CiAgICAgfQogCkBAIC04MDMsNiArODAwLDggQEAKICAgICB2b2lkIHVwZGF0ZUZyb21OYXRpdmUoKSB7CiAgICAgICAgIHN1cGVyLnVwZGF0ZUZyb21OYXRpdmUoKTsKIAorICAgICAgICAvLyBGSVhNRTogdXBkYXRlRnJvbU5hdGl2ZSBpcyBicm9rZW4gaW4gSk5JIGZvciA2NC1iaXQKKwogICAgICAgICAvLyB3ZSB3aWxsIHBhY2sgbVR5cGU7IG1LaW5kOyBtTm9ybWFsaXplZDsgbVZlY3RvclNpemU7IE51bVN1YkVsZW1lbnRzCiAgICAgICAgIGludFtdIGRhdGFCdWZmZXIgPSBuZXcgaW50WzVdOwogICAgICAgICBtUlMubkVsZW1lbnRHZXROYXRpdmVEYXRhKGdldElEKG1SUyksIGRhdGFCdWZmZXIpOwpAQCAtODUzLDcgKzg1Miw3IEBACiAgICAgICAgIERhdGFLaW5kIGRrID0gRGF0YUtpbmQuVVNFUjsKICAgICAgICAgYm9vbGVhbiBub3JtID0gZmFsc2U7CiAgICAgICAgIGludCB2ZWNTaXplID0gMTsKLSAgICAgICAgaW50IGlkID0gcnMubkVsZW1lbnRDcmVhdGUoZHQubUlELCBkay5tSUQsIG5vcm0sIHZlY1NpemUpOworICAgICAgICBsb25nIGlkID0gcnMubkVsZW1lbnRDcmVhdGUoZHQubUlELCBkay5tSUQsIG5vcm0sIHZlY1NpemUpOwogICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnQoaWQsIHJzLCBkdCwgZGssIG5vcm0sIHZlY1NpemUpOwogICAgIH0KIApAQCAtODkwLDcgKzg4OSw3IEBACiAgICAgICAgIGNhc2UgQk9PTEVBTjogewogICAgICAgICAgICAgRGF0YUtpbmQgZGsgPSBEYXRhS2luZC5VU0VSOwogICAgICAgICAgICAgYm9vbGVhbiBub3JtID0gZmFsc2U7Ci0gICAgICAgICAgICBpbnQgaWQgPSBycy5uRWxlbWVudENyZWF0ZShkdC5tSUQsIGRrLm1JRCwgbm9ybSwgc2l6ZSk7CisgICAgICAgICAgICBsb25nIGlkID0gcnMubkVsZW1lbnRDcmVhdGUoZHQubUlELCBkay5tSUQsIG5vcm0sIHNpemUpOwogICAgICAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50KGlkLCBycywgZHQsIGRrLCBub3JtLCBzaXplKTsKICAgICAgICAgfQogCkBAIC05NjEsNyArOTYwLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGJvb2xlYW4gbm9ybSA9IHRydWU7Ci0gICAgICAgIGludCBpZCA9IHJzLm5FbGVtZW50Q3JlYXRlKGR0Lm1JRCwgZGsubUlELCBub3JtLCBzaXplKTsKKyAgICAgICAgbG9uZyBpZCA9IHJzLm5FbGVtZW50Q3JlYXRlKGR0Lm1JRCwgZGsubUlELCBub3JtLCBzaXplKTsKICAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50KGlkLCBycywgZHQsIGRrLCBub3JtLCBzaXplKTsKICAgICB9CiAKQEAgLTEwODgsMTEgKzEwODcsMTIgQEAKICAgICAgICAgICAgIGphdmEubGFuZy5TeXN0ZW0uYXJyYXljb3B5KG1FbGVtZW50TmFtZXMsIDAsIHNpbiwgMCwgbUNvdW50KTsKICAgICAgICAgICAgIGphdmEubGFuZy5TeXN0ZW0uYXJyYXljb3B5KG1BcnJheVNpemVzLCAwLCBhc2luLCAwLCBtQ291bnQpOwogCisgICAgICAgICAgICAvLyBGSVhNRTogYnJva2VuIGZvciA2NC1iaXQKICAgICAgICAgICAgIGludFtdIGlkcyA9IG5ldyBpbnRbZWluLmxlbmd0aF07CiAgICAgICAgICAgICBmb3IgKGludCBjdCA9IDA7IGN0IDwgZWluLmxlbmd0aDsgY3QrKyApIHsKLSAgICAgICAgICAgICAgICBpZHNbY3RdID0gZWluW2N0XS5nZXRJRChtUlMpOworICAgICAgICAgICAgICAgIGlkc1tjdF0gPSAoaW50KWVpbltjdF0uZ2V0SUQobVJTKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBpZCA9IG1SUy5uRWxlbWVudENyZWF0ZTIoaWRzLCBzaW4sIGFzaW4pOworICAgICAgICAgICAgbG9uZyBpZCA9IG1SUy5uRWxlbWVudENyZWF0ZTIoaWRzLCBzaW4sIGFzaW4pOwogICAgICAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50KGlkLCBtUlMsIGVpbiwgc2luLCBhc2luKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmllbGRQYWNrZXIuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmllbGRQYWNrZXIuamF2YQppbmRleCBmZWQ5N2Q2Li43MjNhYjI0IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ZpZWxkUGFja2VyLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWVsZFBhY2tlci5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGphdmEudXRpbC5CaXRTZXQ7CiAKIC8qKgpAQCAtMjMyLDcgKzIzMSw4IEBACiAKICAgICBwdWJsaWMgdm9pZCBhZGRPYmooQmFzZU9iaiBvYmopIHsKICAgICAgICAgaWYgKG9iaiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhZGRJMzIob2JqLmdldElEKG51bGwpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIGZpbmUgZm9yIDMyLWJpdCBidXQgbmVlZHMgYSBwYXRoIGZvciA2NC1iaXQKKyAgICAgICAgICAgIGFkZEkzMigoaW50KW9iai5nZXRJRChudWxsKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhZGRJMzIoMCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmlsZUEzRC5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWxlQTNELmphdmEKaW5kZXggZTQxZjAyZC4uZjBhY2I1NiAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWxlQTNELmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GaWxlQTNELmphdmEKQEAgLTE3LDE1ICsxNywxMCBAQAogcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKIAogLyoqCiAgKiBAaGlkZQpAQCAtODAsNyArNzUsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW5kZXhFbnRyeSB7CiAgICAgICAgIFJlbmRlclNjcmlwdCBtUlM7CiAgICAgICAgIGludCBtSW5kZXg7Ci0gICAgICAgIGludCBtSUQ7CisgICAgICAgIGxvbmcgbUlEOwogICAgICAgICBTdHJpbmcgbU5hbWU7CiAgICAgICAgIEVudHJ5VHlwZSBtRW50cnlUeXBlOwogICAgICAgICBCYXNlT2JqIG1Mb2FkZWRPYmo7CkBAIC0xNTYsNyArMTUxLDcgQEAKICAgICAgICAgICAgIHJldHVybiBlbnRyeS5tTG9hZGVkT2JqOwogICAgICAgICB9CiAKLSAgICAgICAgSW5kZXhFbnRyeShSZW5kZXJTY3JpcHQgcnMsIGludCBpbmRleCwgaW50IGlkLCBTdHJpbmcgbmFtZSwgRW50cnlUeXBlIHR5cGUpIHsKKyAgICAgICAgSW5kZXhFbnRyeShSZW5kZXJTY3JpcHQgcnMsIGludCBpbmRleCwgbG9uZyBpZCwgU3RyaW5nIG5hbWUsIEVudHJ5VHlwZSB0eXBlKSB7CiAgICAgICAgICAgICBtUlMgPSByczsKICAgICAgICAgICAgIG1JbmRleCA9IGluZGV4OwogICAgICAgICAgICAgbUlEID0gaWQ7CkBAIC0xNjksNyArMTY0LDcgQEAKICAgICBJbmRleEVudHJ5W10gbUZpbGVFbnRyaWVzOwogICAgIElucHV0U3RyZWFtIG1JbnB1dFN0cmVhbTsKIAotICAgIEZpbGVBM0QoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMsIElucHV0U3RyZWFtIHN0cmVhbSkgeworICAgIEZpbGVBM0QobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzLCBJbnB1dFN0cmVhbSBzdHJlYW0pIHsKICAgICAgICAgc3VwZXIoaWQsIHJzKTsKICAgICAgICAgbUlucHV0U3RyZWFtID0gc3RyZWFtOwogICAgIH0KQEAgLTIzMiw3ICsyMjcsNyBAQAogICAgICovCiAgICAgc3RhdGljIHB1YmxpYyBGaWxlQTNEIGNyZWF0ZUZyb21Bc3NldChSZW5kZXJTY3JpcHQgcnMsIEFzc2V0TWFuYWdlciBtZ3IsIFN0cmluZyBwYXRoKSB7CiAgICAgICAgIHJzLnZhbGlkYXRlKCk7Ci0gICAgICAgIGludCBmaWxlSWQgPSBycy5uRmlsZUEzRENyZWF0ZUZyb21Bc3NldChtZ3IsIHBhdGgpOworICAgICAgICBsb25nIGZpbGVJZCA9IHJzLm5GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0KG1nciwgcGF0aCk7CiAKICAgICAgICAgaWYoZmlsZUlkID09IDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBjcmVhdGUgYTNkIGZpbGUgZnJvbSBhc3NldCAiICsgcGF0aCk7CkBAIC0yNTIsNyArMjQ3LDcgQEAKICAgICAqIEByZXR1cm4gYTNkIGZpbGUgY29udGFpbmluZyByZW5kZXJzY3JpcHQgb2JqZWN0cwogICAgICovCiAgICAgc3RhdGljIHB1YmxpYyBGaWxlQTNEIGNyZWF0ZUZyb21GaWxlKFJlbmRlclNjcmlwdCBycywgU3RyaW5nIHBhdGgpIHsKLSAgICAgICAgaW50IGZpbGVJZCA9IHJzLm5GaWxlQTNEQ3JlYXRlRnJvbUZpbGUocGF0aCk7CisgICAgICAgIGxvbmcgZmlsZUlkID0gcnMubkZpbGVBM0RDcmVhdGVGcm9tRmlsZShwYXRoKTsKIAogICAgICAgICBpZihmaWxlSWQgPT0gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIGNyZWF0ZSBhM2QgZmlsZSBmcm9tICIgKyBwYXRoKTsKQEAgLTI5NSw3ICsyOTAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIG9wZW4gcmVzb3VyY2UgIiArIGlkKTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBmaWxlSWQgPSAwOworICAgICAgICBsb25nIGZpbGVJZCA9IDA7CiAgICAgICAgIGlmIChpcyBpbnN0YW5jZW9mIEFzc2V0TWFuYWdlci5Bc3NldElucHV0U3RyZWFtKSB7CiAgICAgICAgICAgICBpbnQgYXNzZXQgPSAoKEFzc2V0TWFuYWdlci5Bc3NldElucHV0U3RyZWFtKSBpcykuZ2V0QXNzZXRJbnQoKTsKICAgICAgICAgICAgIGZpbGVJZCA9IHJzLm5GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0U3RyZWFtKGFzc2V0KTsKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQyLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0Zsb2F0Mi5qYXZhCmluZGV4IDI2MTkzZDIuLmU5ZjhjYTcgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRmxvYXQyLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9GbG9hdDIuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogCiAgICAgcHVibGljIEZsb2F0MigpIHsKICAgICB9Ci0gICAgLyoqIEBoaWRlICovIAorICAgIC8qKiBAaGlkZSAqLwogICAgIHB1YmxpYyBGbG9hdDIoRmxvYXQyIGRhdGEpIHsKICAgICAgICAgdGhpcy54ID0gZGF0YS54OwogICAgICAgICB0aGlzLnkgPSBkYXRhLnk7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ZvbnQuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRm9udC5qYXZhCmluZGV4IDAzNzVkMmIuLjRjZDg5ZGIgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRm9udC5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvRm9udC5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiBwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwpAQCAtMjYsOCArMjUsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKIAogLyoqCiAgKiBAaGlkZQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9JbnQzLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0ludDMuamF2YQppbmRleCBjNzcwMzk1Li41NDMxYjlhNyAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9JbnQzLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9JbnQzLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogICAgIHB1YmxpYyBJbnQzKCkgewogICAgIH0KLSAgICAKKwogICAgIC8qKiBAaGlkZSAqLwogICAgIHB1YmxpYyBJbnQzKGludCBpKSB7CiAgICAgICAgIHRoaXMueCA9IHRoaXMueSA9IHRoaXMueiA9IGk7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0xvbmczLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L0xvbmczLmphdmEKaW5kZXggODhmZjg1NS4uOGUyNDNjYyAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Mb25nMy5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTG9uZzMuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAgICAgcHVibGljIExvbmczKCkgewogICAgIH0KLSAgICAKKwogICAgIC8qKiBAaGlkZSAqLwogICAgIHB1YmxpYyBMb25nMyhsb25nIGkpIHsKICAgICAgICAgdGhpcy54ID0gdGhpcy55ID0gdGhpcy56ID0gaTsKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4MmYuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4MmYuamF2YQppbmRleCBkMzYyMWZhLi4wNDgyNjJkIDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDJmLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgyZi5qYXZhCkBAIC0xNiw5ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CiAKLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAKIC8qKgogICogQ2xhc3MgZm9yIGV4cG9zaW5nIHRoZSBuYXRpdmUgUmVuZGVyU2NyaXB0IHJzX21hdHJpeDJ4MiB0eXBlIGJhY2sgdG8gdGhlIEFuZHJvaWQgc3lzdGVtLgpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgzZi5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXgzZi5qYXZhCmluZGV4IDhjM2MzMzAuLjlhNGFmNzcgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4M2YuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDNmLmphdmEKQEAgLTE2LDkgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKIAotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIAogLyoqCiAgKiBDbGFzcyBmb3IgZXhwb3NpbmcgdGhlIG5hdGl2ZSBSZW5kZXJTY3JpcHQgcnNfbWF0cml4M3gzIHR5cGUgYmFjayB0byB0aGUgQW5kcm9pZCBzeXN0ZW0uCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDRmLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L01hdHJpeDRmLmphdmEKaW5kZXggY2QxOGUzMC4uNWQ1YmY1ZiAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9NYXRyaXg0Zi5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWF0cml4NGYuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKIAogaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIAogLyoqCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L01lc2guamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaC5qYXZhCmluZGV4IGJjYTRhYTMuLmE0ZWNjMzggMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaC5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvTWVzaC5qYXZhCkBAIC0xOCw4ICsxOCw2IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogLyoqCiAgKiBAaGlkZQogICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CkBAIC05MSw3ICs4OSw3IEBACiAgICAgQWxsb2NhdGlvbltdIG1JbmRleEJ1ZmZlcnM7CiAgICAgUHJpbWl0aXZlW10gbVByaW1pdGl2ZXM7CiAKLSAgICBNZXNoKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgTWVzaChsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKICAgICAgICAgc3VwZXIoaWQsIHJzKTsKICAgICB9CiAKQEAgLTM2Nyw3ICszNjUsNyBAQAogICAgICAgICAgICAgICAgICAgICBhbGxvYyA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQobVJTLCBlbnRyeS5lLCBlbnRyeS5zaXplLCBtVXNhZ2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJzW2N0XSA9IGFsbG9jOwotICAgICAgICAgICAgICAgIHZ0eFtjdF0gPSBhbGxvYy5nZXRJRChtUlMpOworICAgICAgICAgICAgICAgIHZ0eFtjdF0gPSAoaW50KWFsbG9jLmdldElEKG1SUyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvcihpbnQgY3QgPSAwOyBjdCA8IG1JbmRleFR5cGVzLnNpemUoKTsgY3QgKyspIHsKQEAgLTM3OCwxNSArMzc2LDE1IEBACiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKGVudHJ5LmUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBhbGxvYyA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQobVJTLCBlbnRyeS5lLCBlbnRyeS5zaXplLCBtVXNhZ2UpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnQgYWxsb2NJRCA9IChhbGxvYyA9PSBudWxsKSA/IDAgOiBhbGxvYy5nZXRJRChtUlMpOworICAgICAgICAgICAgICAgIGxvbmcgYWxsb2NJRCA9IChhbGxvYyA9PSBudWxsKSA/IDAgOiBhbGxvYy5nZXRJRChtUlMpOwogICAgICAgICAgICAgICAgIGluZGV4QnVmZmVyc1tjdF0gPSBhbGxvYzsKICAgICAgICAgICAgICAgICBwcmltaXRpdmVzW2N0XSA9IGVudHJ5LnByaW07CiAKLSAgICAgICAgICAgICAgICBpZHhbY3RdID0gYWxsb2NJRDsKKyAgICAgICAgICAgICAgICBpZHhbY3RdID0gKGludClhbGxvY0lEOwogICAgICAgICAgICAgICAgIHByaW1bY3RdID0gZW50cnkucHJpbS5tSUQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGludCBpZCA9IG1SUy5uTWVzaENyZWF0ZSh2dHgsIGlkeCwgcHJpbSk7CisgICAgICAgICAgICBsb25nIGlkID0gbVJTLm5NZXNoQ3JlYXRlKHZ0eCwgaWR4LCBwcmltKTsKICAgICAgICAgICAgIE1lc2ggbmV3TWVzaCA9IG5ldyBNZXNoKGlkLCBtUlMpOwogICAgICAgICAgICAgbmV3TWVzaC5tVmVydGV4QnVmZmVycyA9IHZlcnRleEJ1ZmZlcnM7CiAgICAgICAgICAgICBuZXdNZXNoLm1JbmRleEJ1ZmZlcnMgPSBpbmRleEJ1ZmZlcnM7CkBAIC01MTcsMjAgKzUxNSwyMCBAQAogICAgICAgICAgICAgZm9yKGludCBjdCA9IDA7IGN0IDwgbVZlcnRleFR5cGVDb3VudDsgY3QgKyspIHsKICAgICAgICAgICAgICAgICBFbnRyeSBlbnRyeSA9IG1WZXJ0ZXhUeXBlc1tjdF07CiAgICAgICAgICAgICAgICAgdmVydGV4QnVmZmVyc1tjdF0gPSBlbnRyeS5hOwotICAgICAgICAgICAgICAgIHZ0eFtjdF0gPSBlbnRyeS5hLmdldElEKG1SUyk7CisgICAgICAgICAgICAgICAgdnR4W2N0XSA9IChpbnQpZW50cnkuYS5nZXRJRChtUlMpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmb3IoaW50IGN0ID0gMDsgY3QgPCBtSW5kZXhUeXBlcy5zaXplKCk7IGN0ICsrKSB7CiAgICAgICAgICAgICAgICAgRW50cnkgZW50cnkgPSAoRW50cnkpbUluZGV4VHlwZXMuZWxlbWVudEF0KGN0KTsKLSAgICAgICAgICAgICAgICBpbnQgYWxsb2NJRCA9IChlbnRyeS5hID09IG51bGwpID8gMCA6IGVudHJ5LmEuZ2V0SUQobVJTKTsKKyAgICAgICAgICAgICAgICBsb25nIGFsbG9jSUQgPSAoZW50cnkuYSA9PSBudWxsKSA/IDAgOiBlbnRyeS5hLmdldElEKG1SUyk7CiAgICAgICAgICAgICAgICAgaW5kZXhCdWZmZXJzW2N0XSA9IGVudHJ5LmE7CiAgICAgICAgICAgICAgICAgcHJpbWl0aXZlc1tjdF0gPSBlbnRyeS5wcmltOwogCi0gICAgICAgICAgICAgICAgaWR4W2N0XSA9IGFsbG9jSUQ7CisgICAgICAgICAgICAgICAgaWR4W2N0XSA9IChpbnQpYWxsb2NJRDsKICAgICAgICAgICAgICAgICBwcmltW2N0XSA9IGVudHJ5LnByaW0ubUlEOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpbnQgaWQgPSBtUlMubk1lc2hDcmVhdGUodnR4LCBpZHgsIHByaW0pOworICAgICAgICAgICAgbG9uZyBpZCA9IG1SUy5uTWVzaENyZWF0ZSh2dHgsIGlkeCwgcHJpbSk7CiAgICAgICAgICAgICBNZXNoIG5ld01lc2ggPSBuZXcgTWVzaChpZCwgbVJTKTsKICAgICAgICAgICAgIG5ld01lc2gubVZlcnRleEJ1ZmZlcnMgPSB2ZXJ0ZXhCdWZmZXJzOwogICAgICAgICAgICAgbmV3TWVzaC5tSW5kZXhCdWZmZXJzID0gaW5kZXhCdWZmZXJzOwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9QYXRoLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1BhdGguamF2YQppbmRleCA5YzRkNDFiLi5mMzUwMmFhIDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1BhdGguamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1BhdGguamF2YQpAQCAtMTYsOSArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwogCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIEBoaWRlCiAgKgpAQCAtNDEsNyArMzgsNyBAQAogICAgIGZsb2F0IG1RdWFsaXR5OwogICAgIGJvb2xlYW4gbUNvdmVyYWdlVG9BbHBoYTsKIAotICAgIFBhdGgoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMsIFByaW1pdGl2ZSBwLCBBbGxvY2F0aW9uIHZ0eCwgQWxsb2NhdGlvbiBsb29wLCBmbG9hdCBxKSB7CisgICAgUGF0aChsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMsIFByaW1pdGl2ZSBwLCBBbGxvY2F0aW9uIHZ0eCwgQWxsb2NhdGlvbiBsb29wLCBmbG9hdCBxKSB7CiAgICAgICAgIHN1cGVyKGlkLCBycyk7CiAgICAgICAgIG1WZXJ0ZXhCdWZmZXIgPSB2dHg7CiAgICAgICAgIG1Mb29wQnVmZmVyID0gbG9vcDsKQEAgLTY3LDcgKzY0LDcgQEAKIAogCiAgICAgcHVibGljIHN0YXRpYyBQYXRoIGNyZWF0ZVN0YXRpY1BhdGgoUmVuZGVyU2NyaXB0IHJzLCBQcmltaXRpdmUgcCwgZmxvYXQgcXVhbGl0eSwgQWxsb2NhdGlvbiB2dHgpIHsKLSAgICAgICAgaW50IGlkID0gcnMublBhdGhDcmVhdGUocC5tSUQsIGZhbHNlLCB2dHguZ2V0SUQocnMpLCAwLCBxdWFsaXR5KTsKKyAgICAgICAgbG9uZyBpZCA9IHJzLm5QYXRoQ3JlYXRlKHAubUlELCBmYWxzZSwgdnR4LmdldElEKHJzKSwgMCwgcXVhbGl0eSk7CiAgICAgICAgIFBhdGggbmV3UGF0aCA9IG5ldyBQYXRoKGlkLCBycywgcCwgbnVsbCwgbnVsbCwgcXVhbGl0eSk7CiAgICAgICAgIHJldHVybiBuZXdQYXRoOwogICAgIH0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtLmphdmEKaW5kZXggYmMyY2EzNS4uM2ViOWI3NSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtLmphdmEKQEAgLTc0LDcgKzc0LDcgQEAKICAgICBpbnQgbVRleHR1cmVDb3VudDsKICAgICBTdHJpbmcgbVNoYWRlcjsKIAotICAgIFByb2dyYW0oaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICBQcm9ncmFtKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgewogICAgICAgICBzdXBlcihpZCwgcnMpOwogICAgIH0KIApAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgICAgICBhLmdldFR5cGUoKS5nZXRJRChtUlMpICE9IG1Db25zdGFudHNbc2xvdF0uZ2V0SUQobVJTKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQWxsb2NhdGlvbiB0eXBlIGRvZXMgbm90IG1hdGNoIHNsb3QgdHlwZS4iKTsKICAgICAgICAgfQotICAgICAgICBpbnQgaWQgPSBhICE9IG51bGwgPyBhLmdldElEKG1SUykgOiAwOworICAgICAgICBsb25nIGlkID0gYSAhPSBudWxsID8gYS5nZXRJRChtUlMpIDogMDsKICAgICAgICAgbVJTLm5Qcm9ncmFtQmluZENvbnN0YW50cyhnZXRJRChtUlMpLCBzbG90LCBpZCk7CiAgICAgfQogCkBAIC0xNzIsNyArMTcyLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNhbm5vdCBiaW5kIGN1YmVtYXAgdG8gMmQgdGV4dHVyZSBzbG90Iik7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgaWQgPSB2YSAhPSBudWxsID8gdmEuZ2V0SUQobVJTKSA6IDA7CisgICAgICAgIGxvbmcgaWQgPSB2YSAhPSBudWxsID8gdmEuZ2V0SUQobVJTKSA6IDA7CiAgICAgICAgIG1SUy5uUHJvZ3JhbUJpbmRUZXh0dXJlKGdldElEKG1SUyksIHNsb3QsIGlkKTsKICAgICB9CiAKQEAgLTE5Miw3ICsxOTIsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU2xvdCBJRCBvdXQgb2YgcmFuZ2UuIik7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgaWQgPSB2cyAhPSBudWxsID8gdnMuZ2V0SUQobVJTKSA6IDA7CisgICAgICAgIGxvbmcgaWQgPSB2cyAhPSBudWxsID8gdnMuZ2V0SUQobVJTKSA6IDA7CiAgICAgICAgIG1SUy5uUHJvZ3JhbUJpbmRTYW1wbGVyKGdldElEKG1SUyksIHNsb3QsIGlkKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbUZyYWdtZW50LmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudC5qYXZhCmluZGV4IGI5YmEzZmQuLjI3MDQxMzAgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbUZyYWdtZW50LmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtRnJhZ21lbnQuamF2YQpAQCAtMTcsOSArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKIAogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotCiAvKioKICAqIEBoaWRlCiAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKQEAgLTM5LDcgKzM2LDcgQEAKICAqCiAgKiovCiBwdWJsaWMgY2xhc3MgUHJvZ3JhbUZyYWdtZW50IGV4dGVuZHMgUHJvZ3JhbSB7Ci0gICAgUHJvZ3JhbUZyYWdtZW50KGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgUHJvZ3JhbUZyYWdtZW50KGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgewogICAgICAgICBzdXBlcihpZCwgcnMpOwogICAgIH0KIApAQCAtNzEsMjMgKzY4LDIzIEBACiAKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1JbnB1dENvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLklOUFVULm1JRDsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gbUlucHV0c1tpXS5nZXRJRChtUlMpOworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSAoaW50KW1JbnB1dHNbaV0uZ2V0SUQobVJTKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1PdXRwdXRDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5PVVRQVVQubUlEOwotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBtT3V0cHV0c1tpXS5nZXRJRChtUlMpOworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSAoaW50KW1PdXRwdXRzW2ldLmdldElEKG1SUyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtQ29uc3RhbnRDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5DT05TVEFOVC5tSUQ7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IG1Db25zdGFudHNbaV0uZ2V0SUQobVJTKTsKKyAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gKGludCltQ29uc3RhbnRzW2ldLmdldElEKG1SUyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtVGV4dHVyZUNvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLlRFWFRVUkVfVFlQRS5tSUQ7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IG1UZXh0dXJlVHlwZXNbaV0ubUlEOworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSAoaW50KW1UZXh0dXJlVHlwZXNbaV0ubUlEOwogICAgICAgICAgICAgICAgIHRleE5hbWVzW2ldID0gbVRleHR1cmVOYW1lc1tpXTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaW50IGlkID0gbVJTLm5Qcm9ncmFtRnJhZ21lbnRDcmVhdGUobVNoYWRlciwgdGV4TmFtZXMsIHRtcCk7CisgICAgICAgICAgICBsb25nIGlkID0gbVJTLm5Qcm9ncmFtRnJhZ21lbnRDcmVhdGUobVNoYWRlciwgdGV4TmFtZXMsIHRtcCk7CiAgICAgICAgICAgICBQcm9ncmFtRnJhZ21lbnQgcGYgPSBuZXcgUHJvZ3JhbUZyYWdtZW50KGlkLCBtUlMpOwogICAgICAgICAgICAgaW5pdFByb2dyYW0ocGYpOwogICAgICAgICAgICAgcmV0dXJuIHBmOwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uamF2YQppbmRleCA4YWUxNzc3Li5lMWMzNWM1IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uamF2YQpAQCAtMTcsOSArMTcsNiBAQAogcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKIAogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotCiAvKioKICAqIEBoaWRlCiAgKiBAZGVwcmVjYXRlZCBpbiBBUEkgMTYKQEAgLTMxLDcgKzI4LDcgQEAKICAqCiAgKiovCiBwdWJsaWMgY2xhc3MgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbiBleHRlbmRzIFByb2dyYW1GcmFnbWVudCB7Ci0gICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbihpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgIFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24obG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CiAgICAgICAgIHN1cGVyKGlkLCBycyk7CiAgICAgfQogCkBAIC01OCwyMyArNTUsMjMgQEAKIAogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbUlucHV0Q291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uSU5QVVQubUlEOwotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBtSW5wdXRzW2ldLmdldElEKG1SUyk7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IChpbnQpbUlucHV0c1tpXS5nZXRJRChtUlMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbU91dHB1dENvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLk9VVFBVVC5tSUQ7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IG1PdXRwdXRzW2ldLmdldElEKG1SUyk7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IChpbnQpbU91dHB1dHNbaV0uZ2V0SUQobVJTKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1Db25zdGFudENvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLkNPTlNUQU5ULm1JRDsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gbUNvbnN0YW50c1tpXS5nZXRJRChtUlMpOworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSAoaW50KW1Db25zdGFudHNbaV0uZ2V0SUQobVJTKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1UZXh0dXJlQ291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uVEVYVFVSRV9UWVBFLm1JRDsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gbVRleHR1cmVUeXBlc1tpXS5tSUQ7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IChpbnQpbVRleHR1cmVUeXBlc1tpXS5tSUQ7CiAgICAgICAgICAgICAgICAgdGV4TmFtZXNbaV0gPSBtVGV4dHVyZU5hbWVzW2ldOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpbnQgaWQgPSBtUlMublByb2dyYW1GcmFnbWVudENyZWF0ZShtU2hhZGVyLCB0ZXhOYW1lcywgdG1wKTsKKyAgICAgICAgICAgIGxvbmcgaWQgPSBtUlMublByb2dyYW1GcmFnbWVudENyZWF0ZShtU2hhZGVyLCB0ZXhOYW1lcywgdG1wKTsKICAgICAgICAgICAgIFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24gcGYgPSBuZXcgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbihpZCwgbVJTKTsKICAgICAgICAgICAgIGluaXRQcm9ncmFtKHBmKTsKICAgICAgICAgICAgIHJldHVybiBwZjsKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVJhc3Rlci5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtUmFzdGVyLmphdmEKaW5kZXggMjE2Y2I0ZS4uOGM3YzlhYSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtUmFzdGVyLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtUmFzdGVyLmphdmEKQEAgLTE3LDkgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CiAKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLQogLyoqCiAgKiBAaGlkZQogICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CkBAIC01NCw3ICs1MSw3IEBACiAgICAgYm9vbGVhbiBtUG9pbnRTcHJpdGU7CiAgICAgQ3VsbE1vZGUgbUN1bGxNb2RlOwogCi0gICAgUHJvZ3JhbVJhc3RlcihpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgIFByb2dyYW1SYXN0ZXIobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CiAgICAgICAgIHN1cGVyKGlkLCBycyk7CiAKICAgICAgICAgbVBvaW50U3ByaXRlID0gZmFsc2U7CkBAIC0xNTQsNyArMTUxLDcgQEAKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBQcm9ncmFtUmFzdGVyIGNyZWF0ZSgpIHsKICAgICAgICAgICAgIG1SUy52YWxpZGF0ZSgpOwotICAgICAgICAgICAgaW50IGlkID0gbVJTLm5Qcm9ncmFtUmFzdGVyQ3JlYXRlKG1Qb2ludFNwcml0ZSwgbUN1bGxNb2RlLm1JRCk7CisgICAgICAgICAgICBsb25nIGlkID0gbVJTLm5Qcm9ncmFtUmFzdGVyQ3JlYXRlKG1Qb2ludFNwcml0ZSwgbUN1bGxNb2RlLm1JRCk7CiAgICAgICAgICAgICBQcm9ncmFtUmFzdGVyIHByb2dyYW1SYXN0ZXIgPSBuZXcgUHJvZ3JhbVJhc3RlcihpZCwgbVJTKTsKICAgICAgICAgICAgIHByb2dyYW1SYXN0ZXIubVBvaW50U3ByaXRlID0gbVBvaW50U3ByaXRlOwogICAgICAgICAgICAgcHJvZ3JhbVJhc3Rlci5tQ3VsbE1vZGUgPSBtQ3VsbE1vZGU7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtU3RvcmUuamF2YQppbmRleCBkYWM5ZTc2Li43MzBjNTFiIDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1TdG9yZS5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVN0b3JlLmphdmEKQEAgLTE3LDkgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CiAKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLQogLyoqCiAgKiBAaGlkZQogICogPHA+UHJvZ3JhbVN0b3JlIGNvbnRhaW5zIGEgc2V0IG9mIHBhcmFtZXRlcnMgdGhhdCBjb250cm9sIGhvdwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtVmVydGV4LmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1WZXJ0ZXguamF2YQppbmRleCAxYzVhMTkxLi5kMTk0YmE5IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1WZXJ0ZXguamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1WZXJ0ZXguamF2YQpAQCAtMzksMTAgKzM5LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CiAKIAotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLQogLyoqCiAgKiBAaGlkZQogICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CkBAIC01Myw3ICs0OSw3IEBACiAgKiovCiBwdWJsaWMgY2xhc3MgUHJvZ3JhbVZlcnRleCBleHRlbmRzIFByb2dyYW0gewogCi0gICAgUHJvZ3JhbVZlcnRleChpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgIFByb2dyYW1WZXJ0ZXgobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CiAgICAgICAgIHN1cGVyKGlkLCBycyk7CiAgICAgfQogCkBAIC0xMzIsMjMgKzEyOCwyMyBAQAogCiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtSW5wdXRDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5JTlBVVC5tSUQ7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IG1JbnB1dHNbaV0uZ2V0SUQobVJTKTsKKyAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gKGludCltSW5wdXRzW2ldLmdldElEKG1SUyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtT3V0cHV0Q291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uT1VUUFVULm1JRDsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gbU91dHB1dHNbaV0uZ2V0SUQobVJTKTsKKyAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gKGludCltT3V0cHV0c1tpXS5nZXRJRChtUlMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbUNvbnN0YW50Q291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uQ09OU1RBTlQubUlEOwotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBtQ29uc3RhbnRzW2ldLmdldElEKG1SUyk7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IChpbnQpbUNvbnN0YW50c1tpXS5nZXRJRChtUlMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbVRleHR1cmVDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IFByb2dyYW1QYXJhbS5URVhUVVJFX1RZUEUubUlEOwotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBtVGV4dHVyZVR5cGVzW2ldLm1JRDsKKyAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gKGludCltVGV4dHVyZVR5cGVzW2ldLm1JRDsKICAgICAgICAgICAgICAgICB0ZXhOYW1lc1tpXSA9IG1UZXh0dXJlTmFtZXNbaV07CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGludCBpZCA9IG1SUy5uUHJvZ3JhbVZlcnRleENyZWF0ZShtU2hhZGVyLCB0ZXhOYW1lcywgdG1wKTsKKyAgICAgICAgICAgIGxvbmcgaWQgPSBtUlMublByb2dyYW1WZXJ0ZXhDcmVhdGUobVNoYWRlciwgdGV4TmFtZXMsIHRtcCk7CiAgICAgICAgICAgICBQcm9ncmFtVmVydGV4IHB2ID0gbmV3IFByb2dyYW1WZXJ0ZXgoaWQsIG1SUyk7CiAgICAgICAgICAgICBpbml0UHJvZ3JhbShwdik7CiAgICAgICAgICAgICByZXR1cm4gcHY7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Byb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLmphdmEKaW5kZXggYWQ0ODZmMy4uMmQyODFiOCAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9Qcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uamF2YQpAQCAtMTcsMTAgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CiAKIAotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLQogLyoqCiAgKiBAaGlkZQogICogQGRlcHJlY2F0ZWQgaW4gQVBJIDE2CkBAIC0zMSw3ICsyNyw3IEBACiAgKiovCiBwdWJsaWMgY2xhc3MgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24gZXh0ZW5kcyBQcm9ncmFtVmVydGV4IHsKIAotICAgIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24obG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CiAgICAgICAgIHN1cGVyKGlkLCBycyk7CiAgICAgfQogCkBAIC04NSwyMyArODEsMjMgQEAKIAogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbUlucHV0Q291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uSU5QVVQubUlEOwotICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBtSW5wdXRzW2ldLmdldElEKG1SUyk7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IChpbnQpbUlucHV0c1tpXS5nZXRJRChtUlMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbU91dHB1dENvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLk9VVFBVVC5tSUQ7Ci0gICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IG1PdXRwdXRzW2ldLmdldElEKG1SUyk7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IChpbnQpbU91dHB1dHNbaV0uZ2V0SUQobVJTKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1Db25zdGFudENvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gUHJvZ3JhbVBhcmFtLkNPTlNUQU5ULm1JRDsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gbUNvbnN0YW50c1tpXS5nZXRJRChtUlMpOworICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSAoaW50KW1Db25zdGFudHNbaV0uZ2V0SUQobVJTKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1UZXh0dXJlQ291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgIHRtcFtpZHgrK10gPSBQcm9ncmFtUGFyYW0uVEVYVFVSRV9UWVBFLm1JRDsKLSAgICAgICAgICAgICAgICB0bXBbaWR4KytdID0gbVRleHR1cmVUeXBlc1tpXS5tSUQ7CisgICAgICAgICAgICAgICAgdG1wW2lkeCsrXSA9IChpbnQpbVRleHR1cmVUeXBlc1tpXS5tSUQ7CiAgICAgICAgICAgICAgICAgdGV4TmFtZXNbaV0gPSBtVGV4dHVyZU5hbWVzW2ldOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpbnQgaWQgPSBtUlMublByb2dyYW1WZXJ0ZXhDcmVhdGUobVNoYWRlciwgdGV4TmFtZXMsIHRtcCk7CisgICAgICAgICAgICBsb25nIGlkID0gbVJTLm5Qcm9ncmFtVmVydGV4Q3JlYXRlKG1TaGFkZXIsIHRleE5hbWVzLCB0bXApOwogICAgICAgICAgICAgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24gcHYgPSBuZXcgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24oaWQsIG1SUyk7CiAgICAgICAgICAgICBpbml0UHJvZ3JhbShwdik7CiAgICAgICAgICAgICByZXR1cm4gcHY7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1JTU3VyZmFjZVZpZXcuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNTdXJmYWNlVmlldy5qYXZhCmluZGV4IDMwOGQ5N2EuLjVkYjcyZDkgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNTdXJmYWNlVmlldy5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNTdXJmYWNlVmlldy5qYXZhCkBAIC0xNiwxNiArMTYsOCBAQAogCiBwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwogCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5TZW1hcGhvcmU7Ci0KIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7CiAKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUlNUZXh0dXJlVmlldy5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SU1RleHR1cmVWaWV3LmphdmEKaW5kZXggN2VlZWVhZS4uYWYzMjU4YSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SU1RleHR1cmVWaWV3LmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SU1RleHR1cmVWaWV3LmphdmEKQEAgLTE2LDE2ICsxNiw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CiAKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNlbWFwaG9yZTsKLQogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlRleHR1cmVWaWV3OwogCiAvKioKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0LmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdC5qYXZhCmluZGV4IDdkNGE1YzQuLmQyYzc0NTYgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0LmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHQuamF2YQpAQCAtMTcsMTUgKzE3LDExIEBACiBwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwogaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwpAQCAtOTEsMTQgKzg3LDE0IEBACiAgICAgfQogCiAgICAgLy8gTm9uLXRocmVhZHNhZmUgZnVuY3Rpb25zLgotICAgIG5hdGl2ZSBpbnQgIG5EZXZpY2VDcmVhdGUoKTsKLSAgICBuYXRpdmUgdm9pZCBuRGV2aWNlRGVzdHJveShpbnQgZGV2KTsKLSAgICBuYXRpdmUgdm9pZCBuRGV2aWNlU2V0Q29uZmlnKGludCBkZXYsIGludCBwYXJhbSwgaW50IHZhbHVlKTsKLSAgICBuYXRpdmUgaW50IG5Db250ZXh0R2V0VXNlck1lc3NhZ2UoaW50IGNvbiwgaW50W10gZGF0YSk7Ci0gICAgbmF0aXZlIFN0cmluZyBuQ29udGV4dEdldEVycm9yTWVzc2FnZShpbnQgY29uKTsKLSAgICBuYXRpdmUgaW50ICBuQ29udGV4dFBlZWtNZXNzYWdlKGludCBjb24sIGludFtdIHN1YklEKTsKLSAgICBuYXRpdmUgdm9pZCBuQ29udGV4dEluaXRUb0NsaWVudChpbnQgY29uKTsKLSAgICBuYXRpdmUgdm9pZCBuQ29udGV4dERlaW5pdFRvQ2xpZW50KGludCBjb24pOworICAgIG5hdGl2ZSBsb25nICBuRGV2aWNlQ3JlYXRlKCk7CisgICAgbmF0aXZlIHZvaWQgbkRldmljZURlc3Ryb3kobG9uZyBkZXYpOworICAgIG5hdGl2ZSB2b2lkIG5EZXZpY2VTZXRDb25maWcobG9uZyBkZXYsIGludCBwYXJhbSwgaW50IHZhbHVlKTsKKyAgICBuYXRpdmUgaW50IG5Db250ZXh0R2V0VXNlck1lc3NhZ2UobG9uZyBjb24sIGludFtdIGRhdGEpOworICAgIG5hdGl2ZSBTdHJpbmcgbkNvbnRleHRHZXRFcnJvck1lc3NhZ2UobG9uZyBjb24pOworICAgIG5hdGl2ZSBpbnQgIG5Db250ZXh0UGVla01lc3NhZ2UobG9uZyBjb24sIGludFtdIHN1YklEKTsKKyAgICBuYXRpdmUgdm9pZCBuQ29udGV4dEluaXRUb0NsaWVudChsb25nIGNvbik7CisgICAgbmF0aXZlIHZvaWQgbkNvbnRleHREZWluaXRUb0NsaWVudChsb25nIGNvbik7CiAKICAgICBzdGF0aWMgRmlsZSBtQ2FjaGVEaXI7CiAKQEAgLTE1NCwxMyArMTUwLDEzIEBACiAKICAgICAvLyBNZXRob2RzIGJlbG93IGFyZSB3cmFwcGVkIHRvIHByb3RlY3QgdGhlIG5vbi10aHJlYWRzYWZlCiAgICAgLy8gbG9ja2xlc3MgZmlmby4KLSAgICBuYXRpdmUgaW50ICByc25Db250ZXh0Q3JlYXRlR0woaW50IGRldiwgaW50IHZlciwgaW50IHNka1ZlciwKKyAgICBuYXRpdmUgbG9uZyAgcnNuQ29udGV4dENyZWF0ZUdMKGxvbmcgZGV2LCBpbnQgdmVyLCBpbnQgc2RrVmVyLAogICAgICAgICAgICAgICAgICBpbnQgY29sb3JNaW4sIGludCBjb2xvclByZWYsCiAgICAgICAgICAgICAgICAgIGludCBhbHBoYU1pbiwgaW50IGFscGhhUHJlZiwKICAgICAgICAgICAgICAgICAgaW50IGRlcHRoTWluLCBpbnQgZGVwdGhQcmVmLAogICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbE1pbiwgaW50IHN0ZW5jaWxQcmVmLAogICAgICAgICAgICAgICAgICBpbnQgc2FtcGxlc01pbiwgaW50IHNhbXBsZXNQcmVmLCBmbG9hdCBzYW1wbGVzUSwgaW50IGRwaSk7Ci0gICAgc3luY2hyb25pemVkIGludCBuQ29udGV4dENyZWF0ZUdMKGludCBkZXYsIGludCB2ZXIsIGludCBzZGtWZXIsCisgICAgc3luY2hyb25pemVkIGxvbmcgbkNvbnRleHRDcmVhdGVHTChsb25nIGRldiwgaW50IHZlciwgaW50IHNka1ZlciwKICAgICAgICAgICAgICAgICAgaW50IGNvbG9yTWluLCBpbnQgY29sb3JQcmVmLAogICAgICAgICAgICAgICAgICBpbnQgYWxwaGFNaW4sIGludCBhbHBoYVByZWYsCiAgICAgICAgICAgICAgICAgIGludCBkZXB0aE1pbiwgaW50IGRlcHRoUHJlZiwKQEAgLTE3MSwxMDAgKzE2NywxMDAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVuY2lsTWluLCBzdGVuY2lsUHJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVzTWluLCBzYW1wbGVzUHJlZiwgc2FtcGxlc1EsIGRwaSk7CiAgICAgfQotICAgIG5hdGl2ZSBpbnQgIHJzbkNvbnRleHRDcmVhdGUoaW50IGRldiwgaW50IHZlciwgaW50IHNka1ZlciwgaW50IGNvbnRleHRUeXBlKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5Db250ZXh0Q3JlYXRlKGludCBkZXYsIGludCB2ZXIsIGludCBzZGtWZXIsIGludCBjb250ZXh0VHlwZSkgeworICAgIG5hdGl2ZSBsb25nICByc25Db250ZXh0Q3JlYXRlKGxvbmcgZGV2LCBpbnQgdmVyLCBpbnQgc2RrVmVyLCBpbnQgY29udGV4dFR5cGUpOworICAgIHN5bmNocm9uaXplZCBsb25nIG5Db250ZXh0Q3JlYXRlKGxvbmcgZGV2LCBpbnQgdmVyLCBpbnQgc2RrVmVyLCBpbnQgY29udGV4dFR5cGUpIHsKICAgICAgICAgcmV0dXJuIHJzbkNvbnRleHRDcmVhdGUoZGV2LCB2ZXIsIHNka1ZlciwgY29udGV4dFR5cGUpOwogICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0RGVzdHJveShpbnQgY29uKTsKKyAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0RGVzdHJveShsb25nIGNvbik7CiAgICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHREZXN0cm95KCkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25Db250ZXh0RGVzdHJveShtQ29udGV4dCk7CiAgICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRTZXRTdXJmYWNlKGludCBjb24sIGludCB3LCBpbnQgaCwgU3VyZmFjZSBzdXIpOworICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRTZXRTdXJmYWNlKGxvbmcgY29uLCBpbnQgdywgaW50IGgsIFN1cmZhY2Ugc3VyKTsKICAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dFNldFN1cmZhY2UoaW50IHcsIGludCBoLCBTdXJmYWNlIHN1cikgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25Db250ZXh0U2V0U3VyZmFjZShtQ29udGV4dCwgdywgaCwgc3VyKTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dFNldFN1cmZhY2VUZXh0dXJlKGludCBjb24sIGludCB3LCBpbnQgaCwgU3VyZmFjZVRleHR1cmUgc3VyKTsKKyAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0U2V0U3VyZmFjZVRleHR1cmUobG9uZyBjb24sIGludCB3LCBpbnQgaCwgU3VyZmFjZVRleHR1cmUgc3VyKTsKICAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dFNldFN1cmZhY2VUZXh0dXJlKGludCB3LCBpbnQgaCwgU3VyZmFjZVRleHR1cmUgc3VyKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzbkNvbnRleHRTZXRTdXJmYWNlVGV4dHVyZShtQ29udGV4dCwgdywgaCwgc3VyKTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dFNldFByaW9yaXR5KGludCBjb24sIGludCBwKTsKKyAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0U2V0UHJpb3JpdHkobG9uZyBjb24sIGludCBwKTsKICAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dFNldFByaW9yaXR5KGludCBwKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzbkNvbnRleHRTZXRQcmlvcml0eShtQ29udGV4dCwgcCk7CiAgICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHREdW1wKGludCBjb24sIGludCBiaXRzKTsKKyAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0RHVtcChsb25nIGNvbiwgaW50IGJpdHMpOwogICAgIHN5bmNocm9uaXplZCB2b2lkIG5Db250ZXh0RHVtcChpbnQgYml0cykgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25Db250ZXh0RHVtcChtQ29udGV4dCwgYml0cyk7CiAgICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRGaW5pc2goaW50IGNvbik7CisgICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dEZpbmlzaChsb25nIGNvbik7CiAgICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRGaW5pc2goKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzbkNvbnRleHRGaW5pc2gobUNvbnRleHQpOwogICAgIH0KIAotICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRTZW5kTWVzc2FnZShpbnQgY29uLCBpbnQgaWQsIGludFtdIGRhdGEpOworICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRTZW5kTWVzc2FnZShsb25nIGNvbiwgaW50IGlkLCBpbnRbXSBkYXRhKTsKICAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dFNlbmRNZXNzYWdlKGludCBpZCwgaW50W10gZGF0YSkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25Db250ZXh0U2VuZE1lc3NhZ2UobUNvbnRleHQsIGlkLCBkYXRhKTsKICAgICB9CiAKLSAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0QmluZFJvb3RTY3JpcHQoaW50IGNvbiwgaW50IHNjcmlwdCk7CisgICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dEJpbmRSb290U2NyaXB0KGxvbmcgY29uLCBpbnQgc2NyaXB0KTsKICAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQ29udGV4dEJpbmRSb290U2NyaXB0KGludCBzY3JpcHQpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuQ29udGV4dEJpbmRSb290U2NyaXB0KG1Db250ZXh0LCBzY3JpcHQpOwogICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0QmluZFNhbXBsZXIoaW50IGNvbiwgaW50IHNhbXBsZXIsIGludCBzbG90KTsKKyAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0QmluZFNhbXBsZXIobG9uZyBjb24sIGludCBzYW1wbGVyLCBpbnQgc2xvdCk7CiAgICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRCaW5kU2FtcGxlcihpbnQgc2FtcGxlciwgaW50IHNsb3QpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuQ29udGV4dEJpbmRTYW1wbGVyKG1Db250ZXh0LCBzYW1wbGVyLCBzbG90KTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dEJpbmRQcm9ncmFtU3RvcmUoaW50IGNvbiwgaW50IHBmcyk7CisgICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dEJpbmRQcm9ncmFtU3RvcmUobG9uZyBjb24sIGludCBwZnMpOwogICAgIHN5bmNocm9uaXplZCB2b2lkIG5Db250ZXh0QmluZFByb2dyYW1TdG9yZShpbnQgcGZzKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlKG1Db250ZXh0LCBwZnMpOwogICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0QmluZFByb2dyYW1GcmFnbWVudChpbnQgY29uLCBpbnQgcGYpOworICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50KGxvbmcgY29uLCBpbnQgcGYpOwogICAgIHN5bmNocm9uaXplZCB2b2lkIG5Db250ZXh0QmluZFByb2dyYW1GcmFnbWVudChpbnQgcGYpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuQ29udGV4dEJpbmRQcm9ncmFtRnJhZ21lbnQobUNvbnRleHQsIHBmKTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dEJpbmRQcm9ncmFtVmVydGV4KGludCBjb24sIGludCBwdik7CisgICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dEJpbmRQcm9ncmFtVmVydGV4KGxvbmcgY29uLCBpbnQgcHYpOwogICAgIHN5bmNocm9uaXplZCB2b2lkIG5Db250ZXh0QmluZFByb2dyYW1WZXJ0ZXgoaW50IHB2KSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleChtQ29udGV4dCwgcHYpOwogICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIoaW50IGNvbiwgaW50IHByKTsKKyAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIobG9uZyBjb24sIGludCBwcik7CiAgICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRCaW5kUHJvZ3JhbVJhc3RlcihpbnQgcHIpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuQ29udGV4dEJpbmRQcm9ncmFtUmFzdGVyKG1Db250ZXh0LCBwcik7CiAgICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRQYXVzZShpbnQgY29uKTsKKyAgICBuYXRpdmUgdm9pZCByc25Db250ZXh0UGF1c2UobG9uZyBjb24pOwogICAgIHN5bmNocm9uaXplZCB2b2lkIG5Db250ZXh0UGF1c2UoKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzbkNvbnRleHRQYXVzZShtQ29udGV4dCk7CiAgICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkNvbnRleHRSZXN1bWUoaW50IGNvbik7CisgICAgbmF0aXZlIHZvaWQgcnNuQ29udGV4dFJlc3VtZShsb25nIGNvbik7CiAgICAgc3luY2hyb25pemVkIHZvaWQgbkNvbnRleHRSZXN1bWUoKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzbkNvbnRleHRSZXN1bWUobUNvbnRleHQpOwogICAgIH0KIAotICAgIG5hdGl2ZSB2b2lkIHJzbkFzc2lnbk5hbWUoaW50IGNvbiwgaW50IG9iaiwgYnl0ZVtdIG5hbWUpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5Bc3NpZ25OYW1lKGludCBvYmosIGJ5dGVbXSBuYW1lKSB7CisgICAgbmF0aXZlIHZvaWQgcnNuQXNzaWduTmFtZShsb25nIGNvbiwgbG9uZyBvYmosIGJ5dGVbXSBuYW1lKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQXNzaWduTmFtZShsb25nIG9iaiwgYnl0ZVtdIG5hbWUpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuQXNzaWduTmFtZShtQ29udGV4dCwgb2JqLCBuYW1lKTsKICAgICB9Ci0gICAgbmF0aXZlIFN0cmluZyByc25HZXROYW1lKGludCBjb24sIGludCBvYmopOwotICAgIHN5bmNocm9uaXplZCBTdHJpbmcgbkdldE5hbWUoaW50IG9iaikgeworICAgIG5hdGl2ZSBTdHJpbmcgcnNuR2V0TmFtZShsb25nIGNvbiwgbG9uZyBvYmopOworICAgIHN5bmNocm9uaXplZCBTdHJpbmcgbkdldE5hbWUobG9uZyBvYmopIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuIHJzbkdldE5hbWUobUNvbnRleHQsIG9iaik7CiAgICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbk9iakRlc3Ryb3koaW50IGNvbiwgaW50IGlkKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuT2JqRGVzdHJveShpbnQgaWQpIHsKKyAgICBuYXRpdmUgdm9pZCByc25PYmpEZXN0cm95KGxvbmcgY29uLCBsb25nIGlkKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuT2JqRGVzdHJveShsb25nIGlkKSB7CiAgICAgICAgIC8vIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gaGVyZS4gIFRoZSBjYWxsaW5nIGNvZGUgbWF5IGJlIHJ1bgogICAgICAgICAvLyBieSB0aGUgZ2Mgd2hpbGUgdGVhcmRvd24gaXMgb2NjdXJpbmcuICBUaGlzIHByb3RlY3RzIGFnYWludHMKICAgICAgICAgLy8gZGVsZXRpbmcgZGVhZCBvYmplY3RzLgpAQCAtMjczLDE1NiArMjY5LDE0MCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgbmF0aXZlIGludCAgcnNuRWxlbWVudENyZWF0ZShpbnQgY29uLCBpbnQgdHlwZSwgaW50IGtpbmQsIGJvb2xlYW4gbm9ybSwgaW50IHZlY1NpemUpOwotICAgIHN5bmNocm9uaXplZCBpbnQgbkVsZW1lbnRDcmVhdGUoaW50IHR5cGUsIGludCBraW5kLCBib29sZWFuIG5vcm0sIGludCB2ZWNTaXplKSB7CisgICAgbmF0aXZlIGxvbmcgcnNuRWxlbWVudENyZWF0ZShsb25nIGNvbiwgbG9uZyB0eXBlLCBpbnQga2luZCwgYm9vbGVhbiBub3JtLCBpbnQgdmVjU2l6ZSk7CisgICAgc3luY2hyb25pemVkIGxvbmcgbkVsZW1lbnRDcmVhdGUobG9uZyB0eXBlLCBpbnQga2luZCwgYm9vbGVhbiBub3JtLCBpbnQgdmVjU2l6ZSkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuRWxlbWVudENyZWF0ZShtQ29udGV4dCwgdHlwZSwga2luZCwgbm9ybSwgdmVjU2l6ZSk7CiAgICAgfQotICAgIG5hdGl2ZSBpbnQgIHJzbkVsZW1lbnRDcmVhdGUyKGludCBjb24sIGludFtdIGVsZW1lbnRzLCBTdHJpbmdbXSBuYW1lcywgaW50W10gYXJyYXlTaXplcyk7Ci0gICAgc3luY2hyb25pemVkIGludCBuRWxlbWVudENyZWF0ZTIoaW50W10gZWxlbWVudHMsIFN0cmluZ1tdIG5hbWVzLCBpbnRbXSBhcnJheVNpemVzKSB7CisgICAgbmF0aXZlIGxvbmcgcnNuRWxlbWVudENyZWF0ZTIobG9uZyBjb24sIGludFtdZWxlbWVudHMsIFN0cmluZ1tdIG5hbWVzLCBpbnRbXSBhcnJheVNpemVzKTsKKyAgICBzeW5jaHJvbml6ZWQgbG9uZyBuRWxlbWVudENyZWF0ZTIoaW50W10gZWxlbWVudHMsIFN0cmluZ1tdIG5hbWVzLCBpbnRbXSBhcnJheVNpemVzKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybiByc25FbGVtZW50Q3JlYXRlMihtQ29udGV4dCwgZWxlbWVudHMsIG5hbWVzLCBhcnJheVNpemVzKTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuRWxlbWVudEdldE5hdGl2ZURhdGEoaW50IGNvbiwgaW50IGlkLCBpbnRbXSBlbGVtZW50RGF0YSk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkVsZW1lbnRHZXROYXRpdmVEYXRhKGludCBpZCwgaW50W10gZWxlbWVudERhdGEpIHsKKyAgICBuYXRpdmUgdm9pZCByc25FbGVtZW50R2V0TmF0aXZlRGF0YShsb25nIGNvbiwgbG9uZyBpZCwgaW50W10gZWxlbWVudERhdGEpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5FbGVtZW50R2V0TmF0aXZlRGF0YShsb25nIGlkLCBpbnRbXSBlbGVtZW50RGF0YSkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25FbGVtZW50R2V0TmF0aXZlRGF0YShtQ29udGV4dCwgaWQsIGVsZW1lbnREYXRhKTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuRWxlbWVudEdldFN1YkVsZW1lbnRzKGludCBjb24sIGludCBpZCwKKyAgICBuYXRpdmUgdm9pZCByc25FbGVtZW50R2V0U3ViRWxlbWVudHMobG9uZyBjb24sIGxvbmcgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFtdIElEcywgU3RyaW5nW10gbmFtZXMsIGludFtdIGFycmF5U2l6ZXMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5FbGVtZW50R2V0U3ViRWxlbWVudHMoaW50IGlkLCBpbnRbXSBJRHMsIFN0cmluZ1tdIG5hbWVzLCBpbnRbXSBhcnJheVNpemVzKSB7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkVsZW1lbnRHZXRTdWJFbGVtZW50cyhsb25nIGlkLCBpbnRbXSBJRHMsIFN0cmluZ1tdIG5hbWVzLCBpbnRbXSBhcnJheVNpemVzKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzbkVsZW1lbnRHZXRTdWJFbGVtZW50cyhtQ29udGV4dCwgaWQsIElEcywgbmFtZXMsIGFycmF5U2l6ZXMpOwogICAgIH0KIAotICAgIG5hdGl2ZSBpbnQgcnNuVHlwZUNyZWF0ZShpbnQgY29uLCBpbnQgZWlkLCBpbnQgeCwgaW50IHksIGludCB6LCBib29sZWFuIG1pcHMsIGJvb2xlYW4gZmFjZXMsIGludCB5dXYpOwotICAgIHN5bmNocm9uaXplZCBpbnQgblR5cGVDcmVhdGUoaW50IGVpZCwgaW50IHgsIGludCB5LCBpbnQgeiwgYm9vbGVhbiBtaXBzLCBib29sZWFuIGZhY2VzLCBpbnQgeXV2KSB7CisgICAgbmF0aXZlIGxvbmcgcnNuVHlwZUNyZWF0ZShsb25nIGNvbiwgbG9uZyBlaWQsIGludCB4LCBpbnQgeSwgaW50IHosIGJvb2xlYW4gbWlwcywgYm9vbGVhbiBmYWNlcywgaW50IHl1dik7CisgICAgc3luY2hyb25pemVkIGxvbmcgblR5cGVDcmVhdGUobG9uZyBlaWQsIGludCB4LCBpbnQgeSwgaW50IHosIGJvb2xlYW4gbWlwcywgYm9vbGVhbiBmYWNlcywgaW50IHl1dikgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuVHlwZUNyZWF0ZShtQ29udGV4dCwgZWlkLCB4LCB5LCB6LCBtaXBzLCBmYWNlcywgeXV2KTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuVHlwZUdldE5hdGl2ZURhdGEoaW50IGNvbiwgaW50IGlkLCBpbnRbXSB0eXBlRGF0YSk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgblR5cGVHZXROYXRpdmVEYXRhKGludCBpZCwgaW50W10gdHlwZURhdGEpIHsKKyAgICBuYXRpdmUgdm9pZCByc25UeXBlR2V0TmF0aXZlRGF0YShsb25nIGNvbiwgbG9uZyBpZCwgaW50W10gdHlwZURhdGEpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5UeXBlR2V0TmF0aXZlRGF0YShsb25nIGlkLCBpbnRbXSB0eXBlRGF0YSkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25UeXBlR2V0TmF0aXZlRGF0YShtQ29udGV4dCwgaWQsIHR5cGVEYXRhKTsKICAgICB9CiAKLSAgICBuYXRpdmUgaW50ICByc25BbGxvY2F0aW9uQ3JlYXRlVHlwZWQoaW50IGNvbiwgaW50IHR5cGUsIGludCBtaXAsIGludCB1c2FnZSwgaW50IHBvaW50ZXIpOwotICAgIHN5bmNocm9uaXplZCBpbnQgbkFsbG9jYXRpb25DcmVhdGVUeXBlZChpbnQgdHlwZSwgaW50IG1pcCwgaW50IHVzYWdlLCBpbnQgcG9pbnRlcikgeworICAgIG5hdGl2ZSBsb25nIHJzbkFsbG9jYXRpb25DcmVhdGVUeXBlZChsb25nIGNvbiwgbG9uZyB0eXBlLCBpbnQgbWlwLCBpbnQgdXNhZ2UsIGludCBwb2ludGVyKTsKKyAgICBzeW5jaHJvbml6ZWQgbG9uZyBuQWxsb2NhdGlvbkNyZWF0ZVR5cGVkKGxvbmcgdHlwZSwgaW50IG1pcCwgaW50IHVzYWdlLCBpbnQgcG9pbnRlcikgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuQWxsb2NhdGlvbkNyZWF0ZVR5cGVkKG1Db250ZXh0LCB0eXBlLCBtaXAsIHVzYWdlLCBwb2ludGVyKTsKICAgICB9Ci0gICAgbmF0aXZlIGludCAgcnNuQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAoaW50IGNvbiwgaW50IHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSk7Ci0gICAgc3luY2hyb25pemVkIGludCBuQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAoaW50IHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSkgeworICAgIG5hdGl2ZSBsb25nIHJzbkFsbG9jYXRpb25DcmVhdGVGcm9tQml0bWFwKGxvbmcgY29uLCBsb25nIHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSk7CisgICAgc3luY2hyb25pemVkIGxvbmcgbkFsbG9jYXRpb25DcmVhdGVGcm9tQml0bWFwKGxvbmcgdHlwZSwgaW50IG1pcCwgQml0bWFwIGJtcCwgaW50IHVzYWdlKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybiByc25BbGxvY2F0aW9uQ3JlYXRlRnJvbUJpdG1hcChtQ29udGV4dCwgdHlwZSwgbWlwLCBibXAsIHVzYWdlKTsKICAgICB9CiAKLSAgICBuYXRpdmUgaW50ICByc25BbGxvY2F0aW9uQ3JlYXRlQml0bWFwQmFja2VkQWxsb2NhdGlvbihpbnQgY29uLCBpbnQgdHlwZSwgaW50IG1pcCwgQml0bWFwIGJtcCwgaW50IHVzYWdlKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5BbGxvY2F0aW9uQ3JlYXRlQml0bWFwQmFja2VkQWxsb2NhdGlvbihpbnQgdHlwZSwgaW50IG1pcCwgQml0bWFwIGJtcCwgaW50IHVzYWdlKSB7CisgICAgbmF0aXZlIGxvbmcgcnNuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcEJhY2tlZEFsbG9jYXRpb24obG9uZyBjb24sIGxvbmcgdHlwZSwgaW50IG1pcCwgQml0bWFwIGJtcCwgaW50IHVzYWdlKTsKKyAgICBzeW5jaHJvbml6ZWQgbG9uZyBuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcEJhY2tlZEFsbG9jYXRpb24obG9uZyB0eXBlLCBpbnQgbWlwLCBCaXRtYXAgYm1wLCBpbnQgdXNhZ2UpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuIHJzbkFsbG9jYXRpb25DcmVhdGVCaXRtYXBCYWNrZWRBbGxvY2F0aW9uKG1Db250ZXh0LCB0eXBlLCBtaXAsIGJtcCwgdXNhZ2UpOwogICAgIH0KIAotCi0gICAgbmF0aXZlIGludCAgcnNuQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwKGludCBjb24sIGludCB0eXBlLCBpbnQgbWlwLCBCaXRtYXAgYm1wLCBpbnQgdXNhZ2UpOwotICAgIHN5bmNocm9uaXplZCBpbnQgbkFsbG9jYXRpb25DdWJlQ3JlYXRlRnJvbUJpdG1hcChpbnQgdHlwZSwgaW50IG1pcCwgQml0bWFwIGJtcCwgaW50IHVzYWdlKSB7CisgICAgbmF0aXZlIGxvbmcgcnNuQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwKGxvbmcgY29uLCBsb25nIHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSk7CisgICAgc3luY2hyb25pemVkIGxvbmcgbkFsbG9jYXRpb25DdWJlQ3JlYXRlRnJvbUJpdG1hcChsb25nIHR5cGUsIGludCBtaXAsIEJpdG1hcCBibXAsIGludCB1c2FnZSkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwKG1Db250ZXh0LCB0eXBlLCBtaXAsIGJtcCwgdXNhZ2UpOwogICAgIH0KLSAgICBuYXRpdmUgaW50ICByc25BbGxvY2F0aW9uQ3JlYXRlQml0bWFwUmVmKGludCBjb24sIGludCB0eXBlLCBCaXRtYXAgYm1wKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5BbGxvY2F0aW9uQ3JlYXRlQml0bWFwUmVmKGludCB0eXBlLCBCaXRtYXAgYm1wKSB7CisgICAgbmF0aXZlIGxvbmcgIHJzbkFsbG9jYXRpb25DcmVhdGVCaXRtYXBSZWYobG9uZyBjb24sIGxvbmcgdHlwZSwgQml0bWFwIGJtcCk7CisgICAgc3luY2hyb25pemVkIGxvbmcgbkFsbG9jYXRpb25DcmVhdGVCaXRtYXBSZWYobG9uZyB0eXBlLCBCaXRtYXAgYm1wKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybiByc25BbGxvY2F0aW9uQ3JlYXRlQml0bWFwUmVmKG1Db250ZXh0LCB0eXBlLCBibXApOwogICAgIH0KLSAgICBuYXRpdmUgaW50ICByc25BbGxvY2F0aW9uQ3JlYXRlRnJvbUFzc2V0U3RyZWFtKGludCBjb24sIGludCBtaXBzLCBpbnQgYXNzZXRTdHJlYW0sIGludCB1c2FnZSk7Ci0gICAgc3luY2hyb25pemVkIGludCBuQWxsb2NhdGlvbkNyZWF0ZUZyb21Bc3NldFN0cmVhbShpbnQgbWlwcywgaW50IGFzc2V0U3RyZWFtLCBpbnQgdXNhZ2UpIHsKKyAgICBuYXRpdmUgbG9uZyAgcnNuQWxsb2NhdGlvbkNyZWF0ZUZyb21Bc3NldFN0cmVhbShsb25nIGNvbiwgaW50IG1pcHMsIGludCBhc3NldFN0cmVhbSwgaW50IHVzYWdlKTsKKyAgICBzeW5jaHJvbml6ZWQgbG9uZyBuQWxsb2NhdGlvbkNyZWF0ZUZyb21Bc3NldFN0cmVhbShpbnQgbWlwcywgaW50IGFzc2V0U3RyZWFtLCBpbnQgdXNhZ2UpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuIHJzbkFsbG9jYXRpb25DcmVhdGVGcm9tQXNzZXRTdHJlYW0obUNvbnRleHQsIG1pcHMsIGFzc2V0U3RyZWFtLCB1c2FnZSk7CiAgICAgfQogCi0gICAgbmF0aXZlIHZvaWQgIHJzbkFsbG9jYXRpb25Db3B5VG9CaXRtYXAoaW50IGNvbiwgaW50IGFsbG9jLCBCaXRtYXAgYm1wKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkNvcHlUb0JpdG1hcChpbnQgYWxsb2MsIEJpdG1hcCBibXApIHsKKyAgICBuYXRpdmUgdm9pZCAgcnNuQWxsb2NhdGlvbkNvcHlUb0JpdG1hcChsb25nIGNvbiwgbG9uZyBhbGxvYywgQml0bWFwIGJtcCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25Db3B5VG9CaXRtYXAobG9uZyBhbGxvYywgQml0bWFwIGJtcCkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25BbGxvY2F0aW9uQ29weVRvQml0bWFwKG1Db250ZXh0LCBhbGxvYywgYm1wKTsKICAgICB9CiAKIAotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25TeW5jQWxsKGludCBjb24sIGludCBhbGxvYywgaW50IHNyYyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25TeW5jQWxsKGludCBhbGxvYywgaW50IHNyYykgeworICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25TeW5jQWxsKGxvbmcgY29uLCBsb25nIGFsbG9jLCBpbnQgc3JjKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvblN5bmNBbGwobG9uZyBhbGxvYywgaW50IHNyYykgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25BbGxvY2F0aW9uU3luY0FsbChtQ29udGV4dCwgYWxsb2MsIHNyYyk7CiAgICAgfQotICAgIG5hdGl2ZSBTdXJmYWNlIHJzbkFsbG9jYXRpb25HZXRTdXJmYWNlKGludCBjb24sIGludCBhbGxvYyk7Ci0gICAgc3luY2hyb25pemVkIFN1cmZhY2UgbkFsbG9jYXRpb25HZXRTdXJmYWNlKGludCBhbGxvYykgeworICAgIG5hdGl2ZSBTdXJmYWNlIHJzbkFsbG9jYXRpb25HZXRTdXJmYWNlKGxvbmcgY29uLCBsb25nIGFsbG9jKTsKKyAgICBzeW5jaHJvbml6ZWQgU3VyZmFjZSBuQWxsb2NhdGlvbkdldFN1cmZhY2UobG9uZyBhbGxvYykgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuQWxsb2NhdGlvbkdldFN1cmZhY2UobUNvbnRleHQsIGFsbG9jKTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvblNldFN1cmZhY2UoaW50IGNvbiwgaW50IGFsbG9jLCBTdXJmYWNlIHN1cik7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25TZXRTdXJmYWNlKGludCBhbGxvYywgU3VyZmFjZSBzdXIpIHsKKyAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uU2V0U3VyZmFjZShsb25nIGNvbiwgbG9uZyBhbGxvYywgU3VyZmFjZSBzdXIpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uU2V0U3VyZmFjZShsb25nIGFsbG9jLCBTdXJmYWNlIHN1cikgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25BbGxvY2F0aW9uU2V0U3VyZmFjZShtQ29udGV4dCwgYWxsb2MsIHN1cik7CiAgICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25Jb1NlbmQoaW50IGNvbiwgaW50IGFsbG9jKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbklvU2VuZChpbnQgYWxsb2MpIHsKKyAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uSW9TZW5kKGxvbmcgY29uLCBsb25nIGFsbG9jKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbklvU2VuZChsb25nIGFsbG9jKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzbkFsbG9jYXRpb25Jb1NlbmQobUNvbnRleHQsIGFsbG9jKTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbklvUmVjZWl2ZShpbnQgY29uLCBpbnQgYWxsb2MpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uSW9SZWNlaXZlKGludCBhbGxvYykgeworICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25Jb1JlY2VpdmUobG9uZyBjb24sIGxvbmcgYWxsb2MpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uSW9SZWNlaXZlKGxvbmcgYWxsb2MpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuQWxsb2NhdGlvbklvUmVjZWl2ZShtQ29udGV4dCwgYWxsb2MpOwogICAgIH0KIAogCi0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyhpbnQgY29uLCBpbnQgYWxsb2MpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uR2VuZXJhdGVNaXBtYXBzKGludCBhbGxvYykgeworICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25HZW5lcmF0ZU1pcG1hcHMobG9uZyBjb24sIGxvbmcgYWxsb2MpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uR2VuZXJhdGVNaXBtYXBzKGxvbmcgYWxsb2MpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyhtQ29udGV4dCwgYWxsb2MpOwogICAgIH0KLSAgICBuYXRpdmUgdm9pZCAgcnNuQWxsb2NhdGlvbkNvcHlGcm9tQml0bWFwKGludCBjb24sIGludCBhbGxvYywgQml0bWFwIGJtcCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25Db3B5RnJvbUJpdG1hcChpbnQgYWxsb2MsIEJpdG1hcCBibXApIHsKKyAgICBuYXRpdmUgdm9pZCAgcnNuQWxsb2NhdGlvbkNvcHlGcm9tQml0bWFwKGxvbmcgY29uLCBsb25nIGFsbG9jLCBCaXRtYXAgYm1wKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkNvcHlGcm9tQml0bWFwKGxvbmcgYWxsb2MsIEJpdG1hcCBibXApIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuQWxsb2NhdGlvbkNvcHlGcm9tQml0bWFwKG1Db250ZXh0LCBhbGxvYywgYm1wKTsKICAgICB9CiAKIAotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25EYXRhMUQoaW50IGNvbiwgaW50IGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIGludFtdIGQsIGludCBzaXplQnl0ZXMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uRGF0YTFEKGludCBpZCwgaW50IG9mZiwgaW50IG1pcCwgaW50IGNvdW50LCBpbnRbXSBkLCBpbnQgc2l6ZUJ5dGVzKSB7CisgICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkRhdGExRChsb25nIGNvbiwgbG9uZyBpZCwgaW50IG9mZiwgaW50IG1pcCwgaW50IGNvdW50LCBPYmplY3QgZCwgaW50IHNpemVCeXRlcywgaW50IGR0KTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkRhdGExRChsb25nIGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIE9iamVjdCBkLCBpbnQgc2l6ZUJ5dGVzLCBFbGVtZW50LkRhdGFUeXBlIGR0KSB7CiAgICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhMUQobUNvbnRleHQsIGlkLCBvZmYsIG1pcCwgY291bnQsIGQsIHNpemVCeXRlcyk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25EYXRhMUQoaW50IGNvbiwgaW50IGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIHNob3J0W10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMUQoaW50IGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIHNob3J0W10gZCwgaW50IHNpemVCeXRlcykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uRGF0YTFEKG1Db250ZXh0LCBpZCwgb2ZmLCBtaXAsIGNvdW50LCBkLCBzaXplQnl0ZXMpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTFEKGludCBjb24sIGludCBpZCwgaW50IG9mZiwgaW50IG1pcCwgaW50IGNvdW50LCBieXRlW10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMUQoaW50IGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIGJ5dGVbXSBkLCBpbnQgc2l6ZUJ5dGVzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhMUQobUNvbnRleHQsIGlkLCBvZmYsIG1pcCwgY291bnQsIGQsIHNpemVCeXRlcyk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25EYXRhMUQoaW50IGNvbiwgaW50IGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIGZsb2F0W10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMUQoaW50IGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIGZsb2F0W10gZCwgaW50IHNpemVCeXRlcykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uRGF0YTFEKG1Db250ZXh0LCBpZCwgb2ZmLCBtaXAsIGNvdW50LCBkLCBzaXplQnl0ZXMpOworICAgICAgICByc25BbGxvY2F0aW9uRGF0YTFEKG1Db250ZXh0LCBpZCwgb2ZmLCBtaXAsIGNvdW50LCBkLCBzaXplQnl0ZXMsIGR0Lm1JRCk7CiAgICAgfQogCi0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkVsZW1lbnREYXRhMUQoaW50IGNvbiwgaW50IGlkLCBpbnQgeG9mZiwgaW50IG1pcCwgaW50IGNvbXBJZHgsIGJ5dGVbXSBkLCBpbnQgc2l6ZUJ5dGVzKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkVsZW1lbnREYXRhMUQoaW50IGlkLCBpbnQgeG9mZiwgaW50IG1pcCwgaW50IGNvbXBJZHgsIGJ5dGVbXSBkLCBpbnQgc2l6ZUJ5dGVzKSB7CisgICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkVsZW1lbnREYXRhMUQobG9uZyBjb24sbG9uZyBpZCwgaW50IHhvZmYsIGludCBtaXAsIGludCBjb21wSWR4LCBieXRlW10gZCwgaW50IHNpemVCeXRlcyk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25FbGVtZW50RGF0YTFEKGxvbmcgaWQsIGludCB4b2ZmLCBpbnQgbWlwLCBpbnQgY29tcElkeCwgYnl0ZVtdIGQsIGludCBzaXplQnl0ZXMpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuQWxsb2NhdGlvbkVsZW1lbnREYXRhMUQobUNvbnRleHQsIGlkLCB4b2ZmLCBtaXAsIGNvbXBJZHgsIGQsIHNpemVCeXRlcyk7CiAgICAgfQogCi0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkRhdGEyRChpbnQgY29uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRzdEFsbG9jLCBpbnQgZHN0WG9mZiwgaW50IGRzdFlvZmYsCisgICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkRhdGEyRChsb25nIGNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZHN0QWxsb2MsIGludCBkc3RYb2ZmLCBpbnQgZHN0WW9mZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkc3RNaXAsIGludCBkc3RGYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY0FsbG9jLCBpbnQgc3JjWG9mZiwgaW50IHNyY1lvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNyY0FsbG9jLCBpbnQgc3JjWG9mZiwgaW50IHNyY1lvZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjTWlwLCBpbnQgc3JjRmFjZSk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMkQoaW50IGRzdEFsbG9jLCBpbnQgZHN0WG9mZiwgaW50IGRzdFlvZmYsCisgICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMkQobG9uZyBkc3RBbGxvYywgaW50IGRzdFhvZmYsIGludCBkc3RZb2ZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkc3RNaXAsIGludCBkc3RGYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjQWxsb2MsIGludCBzcmNYb2ZmLCBpbnQgc3JjWW9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNyY0FsbG9jLCBpbnQgc3JjWG9mZiwgaW50IHNyY1lvZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY01pcCwgaW50IHNyY0ZhY2UpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuQWxsb2NhdGlvbkRhdGEyRChtQ29udGV4dCwKQEAgLTQzMyw0MiArNDEzLDMwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjTWlwLCBzcmNGYWNlKTsKICAgICB9CiAKLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTJEKGludCBjb24sIGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwgaW50IHcsIGludCBoLCBieXRlW10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMkQoaW50IGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCBtaXAsIGludCBmYWNlLCBpbnQgdywgaW50IGgsIGJ5dGVbXSBkLCBpbnQgc2l6ZUJ5dGVzKSB7CisgICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkRhdGEyRChsb25nIGNvbiwgbG9uZyBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3LCBpbnQgaCwgT2JqZWN0IGQsIGludCBzaXplQnl0ZXMsIGludCBkdCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMkQobG9uZyBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdywgaW50IGgsIE9iamVjdCBkLCBpbnQgc2l6ZUJ5dGVzLCBFbGVtZW50LkRhdGFUeXBlIGR0KSB7CiAgICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhMkQobUNvbnRleHQsIGlkLCB4b2ZmLCB5b2ZmLCBtaXAsIGZhY2UsIHcsIGgsIGQsIHNpemVCeXRlcyk7CisgICAgICAgIHJzbkFsbG9jYXRpb25EYXRhMkQobUNvbnRleHQsIGlkLCB4b2ZmLCB5b2ZmLCBtaXAsIGZhY2UsIHcsIGgsIGQsIHNpemVCeXRlcywgZHQubUlEKTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkRhdGEyRChpbnQgY29uLCBpbnQgaWQsIGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IG1pcCwgaW50IGZhY2UsIGludCB3LCBpbnQgaCwgc2hvcnRbXSBkLCBpbnQgc2l6ZUJ5dGVzKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkRhdGEyRChpbnQgaWQsIGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IG1pcCwgaW50IGZhY2UsIGludCB3LCBpbnQgaCwgc2hvcnRbXSBkLCBpbnQgc2l6ZUJ5dGVzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhMkQobUNvbnRleHQsIGlkLCB4b2ZmLCB5b2ZmLCBtaXAsIGZhY2UsIHcsIGgsIGQsIHNpemVCeXRlcyk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25EYXRhMkQoaW50IGNvbiwgaW50IGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCBtaXAsIGludCBmYWNlLCBpbnQgdywgaW50IGgsIGludFtdIGQsIGludCBzaXplQnl0ZXMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uRGF0YTJEKGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwgaW50IHcsIGludCBoLCBpbnRbXSBkLCBpbnQgc2l6ZUJ5dGVzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhMkQobUNvbnRleHQsIGlkLCB4b2ZmLCB5b2ZmLCBtaXAsIGZhY2UsIHcsIGgsIGQsIHNpemVCeXRlcyk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25EYXRhMkQoaW50IGNvbiwgaW50IGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCBtaXAsIGludCBmYWNlLCBpbnQgdywgaW50IGgsIGZsb2F0W10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhMkQoaW50IGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCBtaXAsIGludCBmYWNlLCBpbnQgdywgaW50IGgsIGZsb2F0W10gZCwgaW50IHNpemVCeXRlcykgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uRGF0YTJEKG1Db250ZXh0LCBpZCwgeG9mZiwgeW9mZiwgbWlwLCBmYWNlLCB3LCBoLCBkLCBzaXplQnl0ZXMpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTJEKGludCBjb24sIGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwgQml0bWFwIGIpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uRGF0YTJEKGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgbWlwLCBpbnQgZmFjZSwgQml0bWFwIGIpIHsKKworICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25EYXRhMkQobG9uZyBjb24sIGxvbmcgaWQsIGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IG1pcCwgaW50IGZhY2UsIEJpdG1hcCBiKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkRhdGEyRChsb25nIGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCBtaXAsIGludCBmYWNlLCBCaXRtYXAgYikgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25BbGxvY2F0aW9uRGF0YTJEKG1Db250ZXh0LCBpZCwgeG9mZiwgeW9mZiwgbWlwLCBmYWNlLCBiKTsKICAgICB9CiAKLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTNEKGludCBjb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0QWxsb2MsIGludCBkc3RYb2ZmLCBpbnQgZHN0WW9mZiwgaW50IGRzdFpvZmYsCisgICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkRhdGEzRChsb25nIGNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZHN0QWxsb2MsIGludCBkc3RYb2ZmLCBpbnQgZHN0WW9mZiwgaW50IGRzdFpvZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0TWlwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGVwdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjQWxsb2MsIGludCBzcmNYb2ZmLCBpbnQgc3JjWW9mZiwgaW50IHNyY1pvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNyY0FsbG9jLCBpbnQgc3JjWG9mZiwgaW50IHNyY1lvZmYsIGludCBzcmNab2ZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY01pcCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhM0QoaW50IGRzdEFsbG9jLCBpbnQgZHN0WG9mZiwgaW50IGRzdFlvZmYsIGludCBkc3Rab2ZmLAorICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uRGF0YTNEKGxvbmcgZHN0QWxsb2MsIGludCBkc3RYb2ZmLCBpbnQgZHN0WW9mZiwgaW50IGRzdFpvZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRzdE1pcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXB0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjQWxsb2MsIGludCBzcmNYb2ZmLCBpbnQgc3JjWW9mZiwgaW50IHNyY1pvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzcmNBbGxvYywgaW50IHNyY1hvZmYsIGludCBzcmNZb2ZmLCBpbnQgc3JjWm9mZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjTWlwKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzbkFsbG9jYXRpb25EYXRhM0QobUNvbnRleHQsCkBAIC00NzcsMTMwICs0NDUsMTE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjQWxsb2MsIHNyY1hvZmYsIHNyY1lvZmYsIHNyY1pvZmYsIHNyY01pcCk7CiAgICAgfQogCi0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkRhdGEzRChpbnQgY29uLCBpbnQgaWQsIGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCBtaXAsIGludCB3LCBpbnQgaCwgaW50IGRlcHRoLCBieXRlW10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhM0QoaW50IGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCB6b2ZmLCBpbnQgbWlwLCBpbnQgdywgaW50IGgsIGludCBkZXB0aCwgYnl0ZVtdIGQsIGludCBzaXplQnl0ZXMpIHsKKyAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTNEKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCB6b2ZmLCBpbnQgbWlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHcsIGludCBoLCBpbnQgZGVwdGgsIE9iamVjdCBkLCBpbnQgc2l6ZUJ5dGVzLCBpbnQgZHQpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uRGF0YTNEKGxvbmcgaWQsIGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCBtaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHcsIGludCBoLCBpbnQgZGVwdGgsIE9iamVjdCBkLCBpbnQgc2l6ZUJ5dGVzLCBFbGVtZW50LkRhdGFUeXBlIGR0KSB7CiAgICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhM0QobUNvbnRleHQsIGlkLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBtaXAsIHcsIGgsIGRlcHRoLCBkLCBzaXplQnl0ZXMpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTNEKGludCBjb24sIGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IG1pcCwgaW50IHcsIGludCBoLCBpbnQgZGVwdGgsIHNob3J0W10gZCwgaW50IHNpemVCeXRlcyk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25EYXRhM0QoaW50IGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCB6b2ZmLCBpbnQgbWlwLCBpbnQgdywgaW50IGgsIGludCBkZXB0aCwgc2hvcnRbXSBkLCBpbnQgc2l6ZUJ5dGVzKSB7Ci0gICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIHJzbkFsbG9jYXRpb25EYXRhM0QobUNvbnRleHQsIGlkLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBtaXAsIHcsIGgsIGRlcHRoLCBkLCBzaXplQnl0ZXMpOwotICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uRGF0YTNEKGludCBjb24sIGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IG1pcCwgaW50IHcsIGludCBoLCBpbnQgZGVwdGgsIGludFtdIGQsIGludCBzaXplQnl0ZXMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uRGF0YTNEKGludCBpZCwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgem9mZiwgaW50IG1pcCwgaW50IHcsIGludCBoLCBpbnQgZGVwdGgsIGludFtdIGQsIGludCBzaXplQnl0ZXMpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQWxsb2NhdGlvbkRhdGEzRChtQ29udGV4dCwgaWQsIHhvZmYsIHlvZmYsIHpvZmYsIG1pcCwgdywgaCwgZGVwdGgsIGQsIHNpemVCeXRlcyk7Ci0gICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzbkFsbG9jYXRpb25EYXRhM0QoaW50IGNvbiwgaW50IGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCB6b2ZmLCBpbnQgbWlwLCBpbnQgdywgaW50IGgsIGludCBkZXB0aCwgZmxvYXRbXSBkLCBpbnQgc2l6ZUJ5dGVzKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvbkRhdGEzRChpbnQgaWQsIGludCB4b2ZmLCBpbnQgeW9mZiwgaW50IHpvZmYsIGludCBtaXAsIGludCB3LCBpbnQgaCwgaW50IGRlcHRoLCBmbG9hdFtdIGQsIGludCBzaXplQnl0ZXMpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQWxsb2NhdGlvbkRhdGEzRChtQ29udGV4dCwgaWQsIHhvZmYsIHlvZmYsIHpvZmYsIG1pcCwgdywgaCwgZGVwdGgsIGQsIHNpemVCeXRlcyk7CisgICAgICAgIHJzbkFsbG9jYXRpb25EYXRhM0QobUNvbnRleHQsIGlkLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBtaXAsIHcsIGgsIGRlcHRoLCBkLCBzaXplQnl0ZXMsIGR0Lm1JRCk7CiAgICAgfQogCisgICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvblJlYWQobG9uZyBjb24sIGxvbmcgaWQsIE9iamVjdCBkLCBpbnQgZHQpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uUmVhZChsb25nIGlkLCBPYmplY3QgZCwgRWxlbWVudC5EYXRhVHlwZSBkdCkgeworICAgICAgICB2YWxpZGF0ZSgpOworICAgICAgICByc25BbGxvY2F0aW9uUmVhZChtQ29udGV4dCwgaWQsIGQsIGR0Lm1JRCk7CisgICAgfQogCi0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvblJlYWQoaW50IGNvbiwgaW50IGlkLCBieXRlW10gZCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25SZWFkKGludCBpZCwgYnl0ZVtdIGQpIHsKKyAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uUmVhZDFEKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIE9iamVjdCBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemVCeXRlcywgaW50IGR0KTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvblJlYWQxRChsb25nIGlkLCBpbnQgb2ZmLCBpbnQgbWlwLCBpbnQgY291bnQsIE9iamVjdCBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplQnl0ZXMsIEVsZW1lbnQuRGF0YVR5cGUgZHQpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQWxsb2NhdGlvblJlYWQobUNvbnRleHQsIGlkLCBkKTsKKyAgICAgICAgcnNuQWxsb2NhdGlvblJlYWQxRChtQ29udGV4dCwgaWQsIG9mZiwgbWlwLCBjb3VudCwgZCwgc2l6ZUJ5dGVzLCBkdC5tSUQpOwogICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uUmVhZChpbnQgY29uLCBpbnQgaWQsIHNob3J0W10gZCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25SZWFkKGludCBpZCwgc2hvcnRbXSBkKSB7CisKKyAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uUmVhZDJEKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCBtaXAsIGludCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHcsIGludCBoLCBPYmplY3QgZCwgaW50IHNpemVCeXRlcywgaW50IGR0KTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuQWxsb2NhdGlvblJlYWQyRChsb25nIGlkLCBpbnQgeG9mZiwgaW50IHlvZmYsIGludCBtaXAsIGludCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3LCBpbnQgaCwgT2JqZWN0IGQsIGludCBzaXplQnl0ZXMsIEVsZW1lbnQuRGF0YVR5cGUgZHQpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQWxsb2NhdGlvblJlYWQobUNvbnRleHQsIGlkLCBkKTsKKyAgICAgICAgcnNuQWxsb2NhdGlvblJlYWQyRChtQ29udGV4dCwgaWQsIHhvZmYsIHlvZmYsIG1pcCwgZmFjZSwgdywgaCwgZCwgc2l6ZUJ5dGVzLCBkdC5tSUQpOwogICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uUmVhZChpbnQgY29uLCBpbnQgaWQsIGludFtdIGQpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uUmVhZChpbnQgaWQsIGludFtdIGQpIHsKLSAgICAgICAgdmFsaWRhdGUoKTsKLSAgICAgICAgcnNuQWxsb2NhdGlvblJlYWQobUNvbnRleHQsIGlkLCBkKTsKLSAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvblJlYWQoaW50IGNvbiwgaW50IGlkLCBmbG9hdFtdIGQpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5BbGxvY2F0aW9uUmVhZChpbnQgaWQsIGZsb2F0W10gZCkgewotICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICByc25BbGxvY2F0aW9uUmVhZChtQ29udGV4dCwgaWQsIGQpOwotICAgIH0KLSAgICBuYXRpdmUgaW50ICByc25BbGxvY2F0aW9uR2V0VHlwZShpbnQgY29uLCBpbnQgaWQpOwotICAgIHN5bmNocm9uaXplZCBpbnQgbkFsbG9jYXRpb25HZXRUeXBlKGludCBpZCkgeworCisgICAgbmF0aXZlIGxvbmcgIHJzbkFsbG9jYXRpb25HZXRUeXBlKGxvbmcgY29uLCBsb25nIGlkKTsKKyAgICBzeW5jaHJvbml6ZWQgbG9uZyBuQWxsb2NhdGlvbkdldFR5cGUobG9uZyBpZCkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuQWxsb2NhdGlvbkdldFR5cGUobUNvbnRleHQsIGlkKTsKICAgICB9CiAKLSAgICBuYXRpdmUgdm9pZCByc25BbGxvY2F0aW9uUmVzaXplMUQoaW50IGNvbiwgaW50IGlkLCBpbnQgZGltWCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25SZXNpemUxRChpbnQgaWQsIGludCBkaW1YKSB7CisgICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvblJlc2l6ZTFEKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgZGltWCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbkFsbG9jYXRpb25SZXNpemUxRChsb25nIGlkLCBpbnQgZGltWCkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25BbGxvY2F0aW9uUmVzaXplMUQobUNvbnRleHQsIGlkLCBkaW1YKTsKICAgICB9CiAKLSAgICBuYXRpdmUgaW50ICByc25GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0U3RyZWFtKGludCBjb24sIGludCBhc3NldFN0cmVhbSk7Ci0gICAgc3luY2hyb25pemVkIGludCBuRmlsZUEzRENyZWF0ZUZyb21Bc3NldFN0cmVhbShpbnQgYXNzZXRTdHJlYW0pIHsKKyAgICBuYXRpdmUgbG9uZyByc25GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0U3RyZWFtKGxvbmcgY29uLCBpbnQgYXNzZXRTdHJlYW0pOworICAgIHN5bmNocm9uaXplZCBsb25nIG5GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0U3RyZWFtKGludCBhc3NldFN0cmVhbSkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuRmlsZUEzRENyZWF0ZUZyb21Bc3NldFN0cmVhbShtQ29udGV4dCwgYXNzZXRTdHJlYW0pOwogICAgIH0KLSAgICBuYXRpdmUgaW50ICByc25GaWxlQTNEQ3JlYXRlRnJvbUZpbGUoaW50IGNvbiwgU3RyaW5nIHBhdGgpOwotICAgIHN5bmNocm9uaXplZCBpbnQgbkZpbGVBM0RDcmVhdGVGcm9tRmlsZShTdHJpbmcgcGF0aCkgeworICAgIG5hdGl2ZSBsb25nIHJzbkZpbGVBM0RDcmVhdGVGcm9tRmlsZShsb25nIGNvbiwgU3RyaW5nIHBhdGgpOworICAgIHN5bmNocm9uaXplZCBsb25nIG5GaWxlQTNEQ3JlYXRlRnJvbUZpbGUoU3RyaW5nIHBhdGgpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuIHJzbkZpbGVBM0RDcmVhdGVGcm9tRmlsZShtQ29udGV4dCwgcGF0aCk7CiAgICAgfQotICAgIG5hdGl2ZSBpbnQgIHJzbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXQoaW50IGNvbiwgQXNzZXRNYW5hZ2VyIG1nciwgU3RyaW5nIHBhdGgpOwotICAgIHN5bmNocm9uaXplZCBpbnQgbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXQoQXNzZXRNYW5hZ2VyIG1nciwgU3RyaW5nIHBhdGgpIHsKKyAgICBuYXRpdmUgbG9uZyByc25GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0KGxvbmcgY29uLCBBc3NldE1hbmFnZXIgbWdyLCBTdHJpbmcgcGF0aCk7CisgICAgc3luY2hyb25pemVkIGxvbmcgbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXQoQXNzZXRNYW5hZ2VyIG1nciwgU3RyaW5nIHBhdGgpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuIHJzbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXQobUNvbnRleHQsIG1nciwgcGF0aCk7CiAgICAgfQotICAgIG5hdGl2ZSBpbnQgIHJzbkZpbGVBM0RHZXROdW1JbmRleEVudHJpZXMoaW50IGNvbiwgaW50IGZpbGVBM0QpOwotICAgIHN5bmNocm9uaXplZCBpbnQgbkZpbGVBM0RHZXROdW1JbmRleEVudHJpZXMoaW50IGZpbGVBM0QpIHsKKyAgICBuYXRpdmUgaW50ICByc25GaWxlQTNER2V0TnVtSW5kZXhFbnRyaWVzKGxvbmcgY29uLCBsb25nIGZpbGVBM0QpOworICAgIHN5bmNocm9uaXplZCBpbnQgbkZpbGVBM0RHZXROdW1JbmRleEVudHJpZXMobG9uZyBmaWxlQTNEKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybiByc25GaWxlQTNER2V0TnVtSW5kZXhFbnRyaWVzKG1Db250ZXh0LCBmaWxlQTNEKTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuRmlsZUEzREdldEluZGV4RW50cmllcyhpbnQgY29uLCBpbnQgZmlsZUEzRCwgaW50IG51bUVudHJpZXMsIGludFtdIElEcywgU3RyaW5nW10gbmFtZXMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5GaWxlQTNER2V0SW5kZXhFbnRyaWVzKGludCBmaWxlQTNELCBpbnQgbnVtRW50cmllcywgaW50W10gSURzLCBTdHJpbmdbXSBuYW1lcykgeworICAgIG5hdGl2ZSB2b2lkIHJzbkZpbGVBM0RHZXRJbmRleEVudHJpZXMobG9uZyBjb24sIGxvbmcgZmlsZUEzRCwgaW50IG51bUVudHJpZXMsIGludFtdIElEcywgU3RyaW5nW10gbmFtZXMpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5GaWxlQTNER2V0SW5kZXhFbnRyaWVzKGxvbmcgZmlsZUEzRCwgaW50IG51bUVudHJpZXMsIGludFtdIElEcywgU3RyaW5nW10gbmFtZXMpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuRmlsZUEzREdldEluZGV4RW50cmllcyhtQ29udGV4dCwgZmlsZUEzRCwgbnVtRW50cmllcywgSURzLCBuYW1lcyk7CiAgICAgfQotICAgIG5hdGl2ZSBpbnQgIHJzbkZpbGVBM0RHZXRFbnRyeUJ5SW5kZXgoaW50IGNvbiwgaW50IGZpbGVBM0QsIGludCBpbmRleCk7Ci0gICAgc3luY2hyb25pemVkIGludCBuRmlsZUEzREdldEVudHJ5QnlJbmRleChpbnQgZmlsZUEzRCwgaW50IGluZGV4KSB7CisgICAgbmF0aXZlIGludCAgcnNuRmlsZUEzREdldEVudHJ5QnlJbmRleChsb25nIGNvbiwgbG9uZyBmaWxlQTNELCBpbnQgaW5kZXgpOworICAgIHN5bmNocm9uaXplZCBpbnQgbkZpbGVBM0RHZXRFbnRyeUJ5SW5kZXgobG9uZyBmaWxlQTNELCBpbnQgaW5kZXgpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuIHJzbkZpbGVBM0RHZXRFbnRyeUJ5SW5kZXgobUNvbnRleHQsIGZpbGVBM0QsIGluZGV4KTsKICAgICB9CiAKLSAgICBuYXRpdmUgaW50ICByc25Gb250Q3JlYXRlRnJvbUZpbGUoaW50IGNvbiwgU3RyaW5nIGZpbGVOYW1lLCBmbG9hdCBzaXplLCBpbnQgZHBpKTsKKyAgICBuYXRpdmUgaW50ICByc25Gb250Q3JlYXRlRnJvbUZpbGUobG9uZyBjb24sIFN0cmluZyBmaWxlTmFtZSwgZmxvYXQgc2l6ZSwgaW50IGRwaSk7CiAgICAgc3luY2hyb25pemVkIGludCBuRm9udENyZWF0ZUZyb21GaWxlKFN0cmluZyBmaWxlTmFtZSwgZmxvYXQgc2l6ZSwgaW50IGRwaSkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuRm9udENyZWF0ZUZyb21GaWxlKG1Db250ZXh0LCBmaWxlTmFtZSwgc2l6ZSwgZHBpKTsKICAgICB9Ci0gICAgbmF0aXZlIGludCAgcnNuRm9udENyZWF0ZUZyb21Bc3NldFN0cmVhbShpbnQgY29uLCBTdHJpbmcgbmFtZSwgZmxvYXQgc2l6ZSwgaW50IGRwaSwgaW50IGFzc2V0U3RyZWFtKTsKKyAgICBuYXRpdmUgaW50ICByc25Gb250Q3JlYXRlRnJvbUFzc2V0U3RyZWFtKGxvbmcgY29uLCBTdHJpbmcgbmFtZSwgZmxvYXQgc2l6ZSwgaW50IGRwaSwgaW50IGFzc2V0U3RyZWFtKTsKICAgICBzeW5jaHJvbml6ZWQgaW50IG5Gb250Q3JlYXRlRnJvbUFzc2V0U3RyZWFtKFN0cmluZyBuYW1lLCBmbG9hdCBzaXplLCBpbnQgZHBpLCBpbnQgYXNzZXRTdHJlYW0pIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuIHJzbkZvbnRDcmVhdGVGcm9tQXNzZXRTdHJlYW0obUNvbnRleHQsIG5hbWUsIHNpemUsIGRwaSwgYXNzZXRTdHJlYW0pOwogICAgIH0KLSAgICBuYXRpdmUgaW50ICByc25Gb250Q3JlYXRlRnJvbUFzc2V0KGludCBjb24sIEFzc2V0TWFuYWdlciBtZ3IsIFN0cmluZyBwYXRoLCBmbG9hdCBzaXplLCBpbnQgZHBpKTsKKyAgICBuYXRpdmUgaW50ICByc25Gb250Q3JlYXRlRnJvbUFzc2V0KGxvbmcgY29uLCBBc3NldE1hbmFnZXIgbWdyLCBTdHJpbmcgcGF0aCwgZmxvYXQgc2l6ZSwgaW50IGRwaSk7CiAgICAgc3luY2hyb25pemVkIGludCBuRm9udENyZWF0ZUZyb21Bc3NldChBc3NldE1hbmFnZXIgbWdyLCBTdHJpbmcgcGF0aCwgZmxvYXQgc2l6ZSwgaW50IGRwaSkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuRm9udENyZWF0ZUZyb21Bc3NldChtQ29udGV4dCwgbWdyLCBwYXRoLCBzaXplLCBkcGkpOwogICAgIH0KIAogCi0gICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0QmluZEFsbG9jYXRpb24oaW50IGNvbiwgaW50IHNjcmlwdCwgaW50IGFsbG9jLCBpbnQgc2xvdCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdEJpbmRBbGxvY2F0aW9uKGludCBzY3JpcHQsIGludCBhbGxvYywgaW50IHNsb3QpIHsKKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRCaW5kQWxsb2NhdGlvbihsb25nIGNvbiwgbG9uZyBzY3JpcHQsIGxvbmcgYWxsb2MsIGludCBzbG90KTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0QmluZEFsbG9jYXRpb24obG9uZyBzY3JpcHQsIGxvbmcgYWxsb2MsIGludCBzbG90KSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzblNjcmlwdEJpbmRBbGxvY2F0aW9uKG1Db250ZXh0LCBzY3JpcHQsIGFsbG9jLCBzbG90KTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VGltZVpvbmUoaW50IGNvbiwgaW50IHNjcmlwdCwgYnl0ZVtdIHRpbWVab25lKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0U2V0VGltZVpvbmUoaW50IHNjcmlwdCwgYnl0ZVtdIHRpbWVab25lKSB7CisgICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VGltZVpvbmUobG9uZyBjb24sIGxvbmcgc2NyaXB0LCBieXRlW10gdGltZVpvbmUpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRTZXRUaW1lWm9uZShsb25nIHNjcmlwdCwgYnl0ZVtdIHRpbWVab25lKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzblNjcmlwdFNldFRpbWVab25lKG1Db250ZXh0LCBzY3JpcHQsIHRpbWVab25lKTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0SW52b2tlKGludCBjb24sIGludCBpZCwgaW50IHNsb3QpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRJbnZva2UoaW50IGlkLCBpbnQgc2xvdCkgeworICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEludm9rZShsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRJbnZva2UobG9uZyBpZCwgaW50IHNsb3QpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuU2NyaXB0SW52b2tlKG1Db250ZXh0LCBpZCwgc2xvdCk7CiAgICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEZvckVhY2goaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCwgaW50IGFpbiwgaW50IGFvdXQsIGJ5dGVbXSBwYXJhbXMpOwotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEZvckVhY2goaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCwgaW50IGFpbiwgaW50IGFvdXQpOwotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEZvckVhY2hDbGlwcGVkKGludCBjb24sIGludCBpZCwgaW50IHNsb3QsIGludCBhaW4sIGludCBhb3V0LCBieXRlW10gcGFyYW1zLAorICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEZvckVhY2gobG9uZyBjb24sIGxvbmcgaWQsIGludCBzbG90LCBsb25nIGFpbiwgbG9uZyBhb3V0LCBieXRlW10gcGFyYW1zKTsKKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRGb3JFYWNoKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgc2xvdCwgbG9uZyBhaW4sIGxvbmcgYW91dCk7CisgICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0Rm9yRWFjaENsaXBwZWQobG9uZyBjb24sIGxvbmcgaWQsIGludCBzbG90LCBsb25nIGFpbiwgbG9uZyBhb3V0LCBieXRlW10gcGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4c3RhcnQsIGludCB4ZW5kLCBpbnQgeXN0YXJ0LCBpbnQgeWVuZCwgaW50IHpzdGFydCwgaW50IHplbmQpOwotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEZvckVhY2hDbGlwcGVkKGludCBjb24sIGludCBpZCwgaW50IHNsb3QsIGludCBhaW4sIGludCBhb3V0LAorICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEZvckVhY2hDbGlwcGVkKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgc2xvdCwgbG9uZyBhaW4sIGxvbmcgYW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeHN0YXJ0LCBpbnQgeGVuZCwgaW50IHlzdGFydCwgaW50IHllbmQsIGludCB6c3RhcnQsIGludCB6ZW5kKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0Rm9yRWFjaChpbnQgaWQsIGludCBzbG90LCBpbnQgYWluLCBpbnQgYW91dCwgYnl0ZVtdIHBhcmFtcykgeworICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRGb3JFYWNoKGxvbmcgaWQsIGludCBzbG90LCBsb25nIGFpbiwgbG9uZyBhb3V0LCBieXRlW10gcGFyYW1zKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIGlmIChwYXJhbXMgPT0gbnVsbCkgewogICAgICAgICAgICAgcnNuU2NyaXB0Rm9yRWFjaChtQ29udGV4dCwgaWQsIHNsb3QsIGFpbiwgYW91dCk7CkBAIC02MDksNyArNTY1LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRGb3JFYWNoQ2xpcHBlZChpbnQgaWQsIGludCBzbG90LCBpbnQgYWluLCBpbnQgYW91dCwgYnl0ZVtdIHBhcmFtcywKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0Rm9yRWFjaENsaXBwZWQobG9uZyBpZCwgaW50IHNsb3QsIGxvbmcgYWluLCBsb25nIGFvdXQsIGJ5dGVbXSBwYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4c3RhcnQsIGludCB4ZW5kLCBpbnQgeXN0YXJ0LCBpbnQgeWVuZCwgaW50IHpzdGFydCwgaW50IHplbmQpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgaWYgKHBhcmFtcyA9PSBudWxsKSB7CkBAIC02MTksMTI3ICs1NzUsMTI3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRJbnZva2VWKGludCBjb24sIGludCBpZCwgaW50IHNsb3QsIGJ5dGVbXSBwYXJhbXMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRJbnZva2VWKGludCBpZCwgaW50IHNsb3QsIGJ5dGVbXSBwYXJhbXMpIHsKKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRJbnZva2VWKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgc2xvdCwgYnl0ZVtdIHBhcmFtcyk7CisgICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdEludm9rZVYobG9uZyBpZCwgaW50IHNsb3QsIGJ5dGVbXSBwYXJhbXMpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuU2NyaXB0SW52b2tlVihtQ29udGV4dCwgaWQsIHNsb3QsIHBhcmFtcyk7CiAgICAgfQogCi0gICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VmFySShpbnQgY29uLCBpbnQgaWQsIGludCBzbG90LCBpbnQgdmFsKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0U2V0VmFySShpbnQgaWQsIGludCBzbG90LCBpbnQgdmFsKSB7CisgICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VmFySShsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QsIGludCB2YWwpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRTZXRWYXJJKGxvbmcgaWQsIGludCBzbG90LCBpbnQgdmFsKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzblNjcmlwdFNldFZhckkobUNvbnRleHQsIGlkLCBzbG90LCB2YWwpOwogICAgIH0KLSAgICBuYXRpdmUgaW50IHJzblNjcmlwdEdldFZhckkoaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCk7Ci0gICAgc3luY2hyb25pemVkIGludCBuU2NyaXB0R2V0VmFySShpbnQgaWQsIGludCBzbG90KSB7CisgICAgbmF0aXZlIGludCByc25TY3JpcHRHZXRWYXJJKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgc2xvdCk7CisgICAgc3luY2hyb25pemVkIGludCBuU2NyaXB0R2V0VmFySShsb25nIGlkLCBpbnQgc2xvdCkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuU2NyaXB0R2V0VmFySShtQ29udGV4dCwgaWQsIHNsb3QpOwogICAgIH0KIAotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdFNldFZhckooaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCwgbG9uZyB2YWwpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRTZXRWYXJKKGludCBpZCwgaW50IHNsb3QsIGxvbmcgdmFsKSB7CisgICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VmFySihsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QsIGxvbmcgdmFsKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0U2V0VmFySihsb25nIGlkLCBpbnQgc2xvdCwgbG9uZyB2YWwpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuU2NyaXB0U2V0VmFySihtQ29udGV4dCwgaWQsIHNsb3QsIHZhbCk7CiAgICAgfQotICAgIG5hdGl2ZSBsb25nIHJzblNjcmlwdEdldFZhckooaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCk7Ci0gICAgc3luY2hyb25pemVkIGxvbmcgblNjcmlwdEdldFZhckooaW50IGlkLCBpbnQgc2xvdCkgeworICAgIG5hdGl2ZSBsb25nIHJzblNjcmlwdEdldFZhckoobG9uZyBjb24sIGxvbmcgaWQsIGludCBzbG90KTsKKyAgICBzeW5jaHJvbml6ZWQgbG9uZyBuU2NyaXB0R2V0VmFySihsb25nIGlkLCBpbnQgc2xvdCkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuU2NyaXB0R2V0VmFySihtQ29udGV4dCwgaWQsIHNsb3QpOwogICAgIH0KIAotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdFNldFZhckYoaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCwgZmxvYXQgdmFsKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0U2V0VmFyRihpbnQgaWQsIGludCBzbG90LCBmbG9hdCB2YWwpIHsKKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRTZXRWYXJGKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgc2xvdCwgZmxvYXQgdmFsKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0U2V0VmFyRihsb25nIGlkLCBpbnQgc2xvdCwgZmxvYXQgdmFsKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzblNjcmlwdFNldFZhckYobUNvbnRleHQsIGlkLCBzbG90LCB2YWwpOwogICAgIH0KLSAgICBuYXRpdmUgZmxvYXQgcnNuU2NyaXB0R2V0VmFyRihpbnQgY29uLCBpbnQgaWQsIGludCBzbG90KTsKLSAgICBzeW5jaHJvbml6ZWQgZmxvYXQgblNjcmlwdEdldFZhckYoaW50IGlkLCBpbnQgc2xvdCkgeworICAgIG5hdGl2ZSBmbG9hdCByc25TY3JpcHRHZXRWYXJGKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgc2xvdCk7CisgICAgc3luY2hyb25pemVkIGZsb2F0IG5TY3JpcHRHZXRWYXJGKGxvbmcgaWQsIGludCBzbG90KSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybiByc25TY3JpcHRHZXRWYXJGKG1Db250ZXh0LCBpZCwgc2xvdCk7CiAgICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdFNldFZhckQoaW50IGNvbiwgaW50IGlkLCBpbnQgc2xvdCwgZG91YmxlIHZhbCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdFNldFZhckQoaW50IGlkLCBpbnQgc2xvdCwgZG91YmxlIHZhbCkgeworICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdFNldFZhckQobG9uZyBjb24sIGxvbmcgaWQsIGludCBzbG90LCBkb3VibGUgdmFsKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0U2V0VmFyRChsb25nIGlkLCBpbnQgc2xvdCwgZG91YmxlIHZhbCkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25TY3JpcHRTZXRWYXJEKG1Db250ZXh0LCBpZCwgc2xvdCwgdmFsKTsKICAgICB9Ci0gICAgbmF0aXZlIGRvdWJsZSByc25TY3JpcHRHZXRWYXJEKGludCBjb24sIGludCBpZCwgaW50IHNsb3QpOwotICAgIHN5bmNocm9uaXplZCBkb3VibGUgblNjcmlwdEdldFZhckQoaW50IGlkLCBpbnQgc2xvdCkgeworICAgIG5hdGl2ZSBkb3VibGUgcnNuU2NyaXB0R2V0VmFyRChsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QpOworICAgIHN5bmNocm9uaXplZCBkb3VibGUgblNjcmlwdEdldFZhckQobG9uZyBpZCwgaW50IHNsb3QpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuIHJzblNjcmlwdEdldFZhckQobUNvbnRleHQsIGlkLCBzbG90KTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VmFyVihpbnQgY29uLCBpbnQgaWQsIGludCBzbG90LCBieXRlW10gdmFsKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0U2V0VmFyVihpbnQgaWQsIGludCBzbG90LCBieXRlW10gdmFsKSB7CisgICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VmFyVihsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QsIGJ5dGVbXSB2YWwpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRTZXRWYXJWKGxvbmcgaWQsIGludCBzbG90LCBieXRlW10gdmFsKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzblNjcmlwdFNldFZhclYobUNvbnRleHQsIGlkLCBzbG90LCB2YWwpOwogICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRHZXRWYXJWKGludCBjb24sIGludCBpZCwgaW50IHNsb3QsIGJ5dGVbXSB2YWwpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRHZXRWYXJWKGludCBpZCwgaW50IHNsb3QsIGJ5dGVbXSB2YWwpIHsKKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRHZXRWYXJWKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgc2xvdCwgYnl0ZVtdIHZhbCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdEdldFZhclYobG9uZyBpZCwgaW50IHNsb3QsIGJ5dGVbXSB2YWwpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuU2NyaXB0R2V0VmFyVihtQ29udGV4dCwgaWQsIHNsb3QsIHZhbCk7CiAgICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdFNldFZhclZFKGludCBjb24sIGludCBpZCwgaW50IHNsb3QsIGJ5dGVbXSB2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGUsIGludFtdIGRpbXMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRTZXRWYXJWRShpbnQgaWQsIGludCBzbG90LCBieXRlW10gdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZSwgaW50W10gZGltcykgeworICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdFNldFZhclZFKGxvbmcgY29uLCBsb25nIGlkLCBpbnQgc2xvdCwgYnl0ZVtdIHZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGUsIGludFtdIGRpbXMpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRTZXRWYXJWRShsb25nIGlkLCBpbnQgc2xvdCwgYnl0ZVtdIHZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBlLCBpbnRbXSBkaW1zKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzblNjcmlwdFNldFZhclZFKG1Db250ZXh0LCBpZCwgc2xvdCwgdmFsLCBlLCBkaW1zKTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0U2V0VmFyT2JqKGludCBjb24sIGludCBpZCwgaW50IHNsb3QsIGludCB2YWwpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRTZXRWYXJPYmooaW50IGlkLCBpbnQgc2xvdCwgaW50IHZhbCkgeworICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdFNldFZhck9iaihsb25nIGNvbiwgbG9uZyBpZCwgaW50IHNsb3QsIGxvbmcgdmFsKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0U2V0VmFyT2JqKGxvbmcgaWQsIGludCBzbG90LCBsb25nIHZhbCkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25TY3JpcHRTZXRWYXJPYmoobUNvbnRleHQsIGlkLCBzbG90LCB2YWwpOwogICAgIH0KIAotICAgIG5hdGl2ZSBpbnQgIHJzblNjcmlwdENDcmVhdGUoaW50IGNvbiwgU3RyaW5nIHJlc05hbWUsIFN0cmluZyBjYWNoZURpciwKKyAgICBuYXRpdmUgaW50ICByc25TY3JpcHRDQ3JlYXRlKGxvbmcgY29uLCBTdHJpbmcgcmVzTmFtZSwgU3RyaW5nIGNhY2hlRGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIHNjcmlwdCwgaW50IGxlbmd0aCk7CiAgICAgc3luY2hyb25pemVkIGludCBuU2NyaXB0Q0NyZWF0ZShTdHJpbmcgcmVzTmFtZSwgU3RyaW5nIGNhY2hlRGlyLCBieXRlW10gc2NyaXB0LCBpbnQgbGVuZ3RoKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybiByc25TY3JpcHRDQ3JlYXRlKG1Db250ZXh0LCByZXNOYW1lLCBjYWNoZURpciwgc2NyaXB0LCBsZW5ndGgpOwogICAgIH0KIAotICAgIG5hdGl2ZSBpbnQgIHJzblNjcmlwdEludHJpbnNpY0NyZWF0ZShpbnQgY29uLCBpbnQgaWQsIGludCBlaWQpOwotICAgIHN5bmNocm9uaXplZCBpbnQgblNjcmlwdEludHJpbnNpY0NyZWF0ZShpbnQgaWQsIGludCBlaWQpIHsKKyAgICBuYXRpdmUgbG9uZyByc25TY3JpcHRJbnRyaW5zaWNDcmVhdGUobG9uZyBjb24sIGludCBpZCwgbG9uZyBlaWQpOworICAgIHN5bmNocm9uaXplZCBsb25nIG5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoaW50IGlkLCBsb25nIGVpZCkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuU2NyaXB0SW50cmluc2ljQ3JlYXRlKG1Db250ZXh0LCBpZCwgZWlkKTsKICAgICB9CiAKLSAgICBuYXRpdmUgaW50ICByc25TY3JpcHRLZXJuZWxJRENyZWF0ZShpbnQgY29uLCBpbnQgc2lkLCBpbnQgc2xvdCwgaW50IHNpZyk7Ci0gICAgc3luY2hyb25pemVkIGludCBuU2NyaXB0S2VybmVsSURDcmVhdGUoaW50IHNpZCwgaW50IHNsb3QsIGludCBzaWcpIHsKKyAgICBuYXRpdmUgbG9uZyAgcnNuU2NyaXB0S2VybmVsSURDcmVhdGUobG9uZyBjb24sIGxvbmcgc2lkLCBpbnQgc2xvdCwgaW50IHNpZyk7CisgICAgc3luY2hyb25pemVkIGxvbmcgblNjcmlwdEtlcm5lbElEQ3JlYXRlKGxvbmcgc2lkLCBpbnQgc2xvdCwgaW50IHNpZykgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuU2NyaXB0S2VybmVsSURDcmVhdGUobUNvbnRleHQsIHNpZCwgc2xvdCwgc2lnKTsKICAgICB9CiAKLSAgICBuYXRpdmUgaW50ICByc25TY3JpcHRGaWVsZElEQ3JlYXRlKGludCBjb24sIGludCBzaWQsIGludCBzbG90KTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5TY3JpcHRGaWVsZElEQ3JlYXRlKGludCBzaWQsIGludCBzbG90KSB7CisgICAgbmF0aXZlIGxvbmcgIHJzblNjcmlwdEZpZWxkSURDcmVhdGUobG9uZyBjb24sIGxvbmcgc2lkLCBpbnQgc2xvdCk7CisgICAgc3luY2hyb25pemVkIGxvbmcgblNjcmlwdEZpZWxkSURDcmVhdGUobG9uZyBzaWQsIGludCBzbG90KSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybiByc25TY3JpcHRGaWVsZElEQ3JlYXRlKG1Db250ZXh0LCBzaWQsIHNsb3QpOwogICAgIH0KIAotICAgIG5hdGl2ZSBpbnQgIHJzblNjcmlwdEdyb3VwQ3JlYXRlKGludCBjb24sIGludFtdIGtlcm5lbHMsIGludFtdIHNyYywgaW50W10gZHN0aywgaW50W10gZHN0ZiwgaW50W10gdHlwZXMpOwotICAgIHN5bmNocm9uaXplZCBpbnQgblNjcmlwdEdyb3VwQ3JlYXRlKGludFtdIGtlcm5lbHMsIGludFtdIHNyYywgaW50W10gZHN0aywgaW50W10gZHN0ZiwgaW50W10gdHlwZXMpIHsKKyAgICBuYXRpdmUgbG9uZyByc25TY3JpcHRHcm91cENyZWF0ZShsb25nIGNvbiwgaW50W10ga2VybmVscywgaW50W10gc3JjLCBpbnRbXSBkc3RrLCBpbnRbXSBkc3RmLCBpbnRbXSB0eXBlcyk7CisgICAgc3luY2hyb25pemVkIGxvbmcgblNjcmlwdEdyb3VwQ3JlYXRlKGludFtdIGtlcm5lbHMsIGludFtdIHNyYywgaW50W10gZHN0aywgaW50W10gZHN0ZiwgaW50W10gdHlwZXMpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuIHJzblNjcmlwdEdyb3VwQ3JlYXRlKG1Db250ZXh0LCBrZXJuZWxzLCBzcmMsIGRzdGssIGRzdGYsIHR5cGVzKTsKICAgICB9CiAKLSAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRHcm91cFNldElucHV0KGludCBjb24sIGludCBncm91cCwgaW50IGtlcm5lbCwgaW50IGFsbG9jKTsKLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0R3JvdXBTZXRJbnB1dChpbnQgZ3JvdXAsIGludCBrZXJuZWwsIGludCBhbGxvYykgeworICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEdyb3VwU2V0SW5wdXQobG9uZyBjb24sIGxvbmcgZ3JvdXAsIGxvbmcga2VybmVsLCBsb25nIGFsbG9jKTsKKyAgICBzeW5jaHJvbml6ZWQgdm9pZCBuU2NyaXB0R3JvdXBTZXRJbnB1dChsb25nIGdyb3VwLCBsb25nIGtlcm5lbCwgbG9uZyBhbGxvYykgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25TY3JpcHRHcm91cFNldElucHV0KG1Db250ZXh0LCBncm91cCwga2VybmVsLCBhbGxvYyk7CiAgICAgfQogCi0gICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0R3JvdXBTZXRPdXRwdXQoaW50IGNvbiwgaW50IGdyb3VwLCBpbnQga2VybmVsLCBpbnQgYWxsb2MpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRHcm91cFNldE91dHB1dChpbnQgZ3JvdXAsIGludCBrZXJuZWwsIGludCBhbGxvYykgeworICAgIG5hdGl2ZSB2b2lkIHJzblNjcmlwdEdyb3VwU2V0T3V0cHV0KGxvbmcgY29uLCBsb25nIGdyb3VwLCBsb25nIGtlcm5lbCwgbG9uZyBhbGxvYyk7CisgICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdEdyb3VwU2V0T3V0cHV0KGxvbmcgZ3JvdXAsIGxvbmcga2VybmVsLCBsb25nIGFsbG9jKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJzblNjcmlwdEdyb3VwU2V0T3V0cHV0KG1Db250ZXh0LCBncm91cCwga2VybmVsLCBhbGxvYyk7CiAgICAgfQogCi0gICAgbmF0aXZlIHZvaWQgcnNuU2NyaXB0R3JvdXBFeGVjdXRlKGludCBjb24sIGludCBncm91cCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgblNjcmlwdEdyb3VwRXhlY3V0ZShpbnQgZ3JvdXApIHsKKyAgICBuYXRpdmUgdm9pZCByc25TY3JpcHRHcm91cEV4ZWN1dGUobG9uZyBjb24sIGxvbmcgZ3JvdXApOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5TY3JpcHRHcm91cEV4ZWN1dGUobG9uZyBncm91cCkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25TY3JpcHRHcm91cEV4ZWN1dGUobUNvbnRleHQsIGdyb3VwKTsKICAgICB9CiAKLSAgICBuYXRpdmUgaW50ICByc25TYW1wbGVyQ3JlYXRlKGludCBjb24sIGludCBtYWdGaWx0ZXIsIGludCBtaW5GaWx0ZXIsCisgICAgbmF0aXZlIGludCAgcnNuU2FtcGxlckNyZWF0ZShsb25nIGNvbiwgaW50IG1hZ0ZpbHRlciwgaW50IG1pbkZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3cmFwUywgaW50IHdyYXBULCBpbnQgd3JhcFIsIGZsb2F0IGFuaXNvKTsKICAgICBzeW5jaHJvbml6ZWQgaW50IG5TYW1wbGVyQ3JlYXRlKGludCBtYWdGaWx0ZXIsIGludCBtaW5GaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd3JhcFMsIGludCB3cmFwVCwgaW50IHdyYXBSLCBmbG9hdCBhbmlzbykgewpAQCAtNzQ3LDcgKzcwMyw3IEBACiAgICAgICAgIHJldHVybiByc25TYW1wbGVyQ3JlYXRlKG1Db250ZXh0LCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgd3JhcFMsIHdyYXBULCB3cmFwUiwgYW5pc28pOwogICAgIH0KIAotICAgIG5hdGl2ZSBpbnQgIHJzblByb2dyYW1TdG9yZUNyZWF0ZShpbnQgY29uLCBib29sZWFuIHIsIGJvb2xlYW4gZywgYm9vbGVhbiBiLCBib29sZWFuIGEsCisgICAgbmF0aXZlIGludCAgcnNuUHJvZ3JhbVN0b3JlQ3JlYXRlKGxvbmcgY29uLCBib29sZWFuIHIsIGJvb2xlYW4gZywgYm9vbGVhbiBiLCBib29sZWFuIGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZGVwdGhNYXNrLCBib29sZWFuIGRpdGhlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY01vZGUsIGludCBkc3RNb2RlLCBpbnQgZGVwdGhGdW5jKTsKICAgICBzeW5jaHJvbml6ZWQgaW50IG5Qcm9ncmFtU3RvcmVDcmVhdGUoYm9vbGVhbiByLCBib29sZWFuIGcsIGJvb2xlYW4gYiwgYm9vbGVhbiBhLApAQCAtNzU4LDcyICs3MTQsNzIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RNb2RlLCBkZXB0aEZ1bmMpOwogICAgIH0KIAotICAgIG5hdGl2ZSBpbnQgIHJzblByb2dyYW1SYXN0ZXJDcmVhdGUoaW50IGNvbiwgYm9vbGVhbiBwb2ludFNwcml0ZSwgaW50IGN1bGxNb2RlKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5Qcm9ncmFtUmFzdGVyQ3JlYXRlKGJvb2xlYW4gcG9pbnRTcHJpdGUsIGludCBjdWxsTW9kZSkgeworICAgIG5hdGl2ZSBsb25nIHJzblByb2dyYW1SYXN0ZXJDcmVhdGUobG9uZyBjb24sIGJvb2xlYW4gcG9pbnRTcHJpdGUsIGludCBjdWxsTW9kZSk7CisgICAgc3luY2hyb25pemVkIGxvbmcgblByb2dyYW1SYXN0ZXJDcmVhdGUoYm9vbGVhbiBwb2ludFNwcml0ZSwgaW50IGN1bGxNb2RlKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybiByc25Qcm9ncmFtUmFzdGVyQ3JlYXRlKG1Db250ZXh0LCBwb2ludFNwcml0ZSwgY3VsbE1vZGUpOwogICAgIH0KIAotICAgIG5hdGl2ZSB2b2lkIHJzblByb2dyYW1CaW5kQ29uc3RhbnRzKGludCBjb24sIGludCBwdiwgaW50IHNsb3QsIGludCBtSUQpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5Qcm9ncmFtQmluZENvbnN0YW50cyhpbnQgcHYsIGludCBzbG90LCBpbnQgbUlEKSB7CisgICAgbmF0aXZlIHZvaWQgcnNuUHJvZ3JhbUJpbmRDb25zdGFudHMobG9uZyBjb24sIGxvbmcgcHYsIGludCBzbG90LCBsb25nIG1JRCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgblByb2dyYW1CaW5kQ29uc3RhbnRzKGxvbmcgcHYsIGludCBzbG90LCBsb25nIG1JRCkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25Qcm9ncmFtQmluZENvbnN0YW50cyhtQ29udGV4dCwgcHYsIHNsb3QsIG1JRCk7CiAgICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzblByb2dyYW1CaW5kVGV4dHVyZShpbnQgY29uLCBpbnQgdnBmLCBpbnQgc2xvdCwgaW50IGEpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5Qcm9ncmFtQmluZFRleHR1cmUoaW50IHZwZiwgaW50IHNsb3QsIGludCBhKSB7CisgICAgbmF0aXZlIHZvaWQgcnNuUHJvZ3JhbUJpbmRUZXh0dXJlKGxvbmcgY29uLCBsb25nIHZwZiwgaW50IHNsb3QsIGxvbmcgYSk7CisgICAgc3luY2hyb25pemVkIHZvaWQgblByb2dyYW1CaW5kVGV4dHVyZShsb25nIHZwZiwgaW50IHNsb3QsIGxvbmcgYSkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25Qcm9ncmFtQmluZFRleHR1cmUobUNvbnRleHQsIHZwZiwgc2xvdCwgYSk7CiAgICAgfQotICAgIG5hdGl2ZSB2b2lkIHJzblByb2dyYW1CaW5kU2FtcGxlcihpbnQgY29uLCBpbnQgdnBmLCBpbnQgc2xvdCwgaW50IHMpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5Qcm9ncmFtQmluZFNhbXBsZXIoaW50IHZwZiwgaW50IHNsb3QsIGludCBzKSB7CisgICAgbmF0aXZlIHZvaWQgcnNuUHJvZ3JhbUJpbmRTYW1wbGVyKGxvbmcgY29uLCBsb25nIHZwZiwgaW50IHNsb3QsIGxvbmcgcyk7CisgICAgc3luY2hyb25pemVkIHZvaWQgblByb2dyYW1CaW5kU2FtcGxlcihsb25nIHZwZiwgaW50IHNsb3QsIGxvbmcgcykgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25Qcm9ncmFtQmluZFNhbXBsZXIobUNvbnRleHQsIHZwZiwgc2xvdCwgcyk7CiAgICAgfQotICAgIG5hdGl2ZSBpbnQgIHJzblByb2dyYW1GcmFnbWVudENyZWF0ZShpbnQgY29uLCBTdHJpbmcgc2hhZGVyLCBTdHJpbmdbXSB0ZXhOYW1lcywgaW50W10gcGFyYW1zKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5Qcm9ncmFtRnJhZ21lbnRDcmVhdGUoU3RyaW5nIHNoYWRlciwgU3RyaW5nW10gdGV4TmFtZXMsIGludFtdIHBhcmFtcykgeworICAgIG5hdGl2ZSBsb25nIHJzblByb2dyYW1GcmFnbWVudENyZWF0ZShsb25nIGNvbiwgU3RyaW5nIHNoYWRlciwgU3RyaW5nW10gdGV4TmFtZXMsIGludFtdIHBhcmFtcyk7CisgICAgc3luY2hyb25pemVkIGxvbmcgblByb2dyYW1GcmFnbWVudENyZWF0ZShTdHJpbmcgc2hhZGVyLCBTdHJpbmdbXSB0ZXhOYW1lcywgaW50W10gcGFyYW1zKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybiByc25Qcm9ncmFtRnJhZ21lbnRDcmVhdGUobUNvbnRleHQsIHNoYWRlciwgdGV4TmFtZXMsIHBhcmFtcyk7CiAgICAgfQotICAgIG5hdGl2ZSBpbnQgIHJzblByb2dyYW1WZXJ0ZXhDcmVhdGUoaW50IGNvbiwgU3RyaW5nIHNoYWRlciwgU3RyaW5nW10gdGV4TmFtZXMsIGludFtdIHBhcmFtcyk7Ci0gICAgc3luY2hyb25pemVkIGludCBuUHJvZ3JhbVZlcnRleENyZWF0ZShTdHJpbmcgc2hhZGVyLCBTdHJpbmdbXSB0ZXhOYW1lcywgaW50W10gcGFyYW1zKSB7CisgICAgbmF0aXZlIGxvbmcgcnNuUHJvZ3JhbVZlcnRleENyZWF0ZShsb25nIGNvbiwgU3RyaW5nIHNoYWRlciwgU3RyaW5nW10gdGV4TmFtZXMsIGludFtdIHBhcmFtcyk7CisgICAgc3luY2hyb25pemVkIGxvbmcgblByb2dyYW1WZXJ0ZXhDcmVhdGUoU3RyaW5nIHNoYWRlciwgU3RyaW5nW10gdGV4TmFtZXMsIGludFtdIHBhcmFtcykgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuUHJvZ3JhbVZlcnRleENyZWF0ZShtQ29udGV4dCwgc2hhZGVyLCB0ZXhOYW1lcywgcGFyYW1zKTsKICAgICB9CiAKLSAgICBuYXRpdmUgaW50ICByc25NZXNoQ3JlYXRlKGludCBjb24sIGludFtdIHZ0eCwgaW50W10gaWR4LCBpbnRbXSBwcmltKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5NZXNoQ3JlYXRlKGludFtdIHZ0eCwgaW50W10gaWR4LCBpbnRbXSBwcmltKSB7CisgICAgbmF0aXZlIGxvbmcgcnNuTWVzaENyZWF0ZShsb25nIGNvbiwgaW50W10gdnR4LCBpbnRbXSBpZHgsIGludFtdIHByaW0pOworICAgIHN5bmNocm9uaXplZCBsb25nIG5NZXNoQ3JlYXRlKGludFtdIHZ0eCwgaW50W10gaWR4LCBpbnRbXSBwcmltKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybiByc25NZXNoQ3JlYXRlKG1Db250ZXh0LCB2dHgsIGlkeCwgcHJpbSk7CiAgICAgfQotICAgIG5hdGl2ZSBpbnQgIHJzbk1lc2hHZXRWZXJ0ZXhCdWZmZXJDb3VudChpbnQgY29uLCBpbnQgaWQpOwotICAgIHN5bmNocm9uaXplZCBpbnQgbk1lc2hHZXRWZXJ0ZXhCdWZmZXJDb3VudChpbnQgaWQpIHsKKyAgICBuYXRpdmUgaW50ICByc25NZXNoR2V0VmVydGV4QnVmZmVyQ291bnQobG9uZyBjb24sIGxvbmcgaWQpOworICAgIHN5bmNocm9uaXplZCBpbnQgbk1lc2hHZXRWZXJ0ZXhCdWZmZXJDb3VudChsb25nIGlkKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybiByc25NZXNoR2V0VmVydGV4QnVmZmVyQ291bnQobUNvbnRleHQsIGlkKTsKICAgICB9Ci0gICAgbmF0aXZlIGludCAgcnNuTWVzaEdldEluZGV4Q291bnQoaW50IGNvbiwgaW50IGlkKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5NZXNoR2V0SW5kZXhDb3VudChpbnQgaWQpIHsKKyAgICBuYXRpdmUgaW50ICByc25NZXNoR2V0SW5kZXhDb3VudChsb25nIGNvbiwgbG9uZyBpZCk7CisgICAgc3luY2hyb25pemVkIGludCBuTWVzaEdldEluZGV4Q291bnQobG9uZyBpZCkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gcnNuTWVzaEdldEluZGV4Q291bnQobUNvbnRleHQsIGlkKTsKICAgICB9Ci0gICAgbmF0aXZlIHZvaWQgcnNuTWVzaEdldFZlcnRpY2VzKGludCBjb24sIGludCBpZCwgaW50W10gdnR4SWRzLCBpbnQgdnR4SWRDb3VudCk7Ci0gICAgc3luY2hyb25pemVkIHZvaWQgbk1lc2hHZXRWZXJ0aWNlcyhpbnQgaWQsIGludFtdIHZ0eElkcywgaW50IHZ0eElkQ291bnQpIHsKKyAgICBuYXRpdmUgdm9pZCByc25NZXNoR2V0VmVydGljZXMobG9uZyBjb24sIGxvbmcgaWQsIGludFtdIHZ0eElkcywgaW50IHZ0eElkQ291bnQpOworICAgIHN5bmNocm9uaXplZCB2b2lkIG5NZXNoR2V0VmVydGljZXMobG9uZyBpZCwgaW50W10gdnR4SWRzLCBpbnQgdnR4SWRDb3VudCkgewogICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICByc25NZXNoR2V0VmVydGljZXMobUNvbnRleHQsIGlkLCB2dHhJZHMsIHZ0eElkQ291bnQpOwogICAgIH0KLSAgICBuYXRpdmUgdm9pZCByc25NZXNoR2V0SW5kaWNlcyhpbnQgY29uLCBpbnQgaWQsIGludFtdIGlkeElkcywgaW50W10gcHJpbWl0aXZlcywgaW50IHZ0eElkQ291bnQpOwotICAgIHN5bmNocm9uaXplZCB2b2lkIG5NZXNoR2V0SW5kaWNlcyhpbnQgaWQsIGludFtdIGlkeElkcywgaW50W10gcHJpbWl0aXZlcywgaW50IHZ0eElkQ291bnQpIHsKKyAgICBuYXRpdmUgdm9pZCByc25NZXNoR2V0SW5kaWNlcyhsb25nIGNvbiwgbG9uZyBpZCwgaW50W10gaWR4SWRzLCBpbnRbXSBwcmltaXRpdmVzLCBpbnQgdnR4SWRDb3VudCk7CisgICAgc3luY2hyb25pemVkIHZvaWQgbk1lc2hHZXRJbmRpY2VzKGxvbmcgaWQsIGludFtdIGlkeElkcywgaW50W10gcHJpbWl0aXZlcywgaW50IHZ0eElkQ291bnQpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcnNuTWVzaEdldEluZGljZXMobUNvbnRleHQsIGlkLCBpZHhJZHMsIHByaW1pdGl2ZXMsIHZ0eElkQ291bnQpOwogICAgIH0KIAotICAgIG5hdGl2ZSBpbnQgIHJzblBhdGhDcmVhdGUoaW50IGNvbiwgaW50IHByaW0sIGJvb2xlYW4gaXNTdGF0aWMsIGludCB2dHgsIGludCBsb29wLCBmbG9hdCBxKTsKLSAgICBzeW5jaHJvbml6ZWQgaW50IG5QYXRoQ3JlYXRlKGludCBwcmltLCBib29sZWFuIGlzU3RhdGljLCBpbnQgdnR4LCBpbnQgbG9vcCwgZmxvYXQgcSkgeworICAgIG5hdGl2ZSBsb25nIHJzblBhdGhDcmVhdGUobG9uZyBjb24sIGludCBwcmltLCBib29sZWFuIGlzU3RhdGljLCBsb25nIHZ0eCwgaW50IGxvb3AsIGZsb2F0IHEpOworICAgIHN5bmNocm9uaXplZCBsb25nIG5QYXRoQ3JlYXRlKGludCBwcmltLCBib29sZWFuIGlzU3RhdGljLCBsb25nIHZ0eCwgaW50IGxvb3AsIGZsb2F0IHEpIHsKICAgICAgICAgdmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuIHJzblBhdGhDcmVhdGUobUNvbnRleHQsIHByaW0sIGlzU3RhdGljLCB2dHgsIGxvb3AsIHEpOwogICAgIH0KIAotICAgIGludCAgICAgbURldjsKLSAgICBpbnQgICAgIG1Db250ZXh0OworICAgIGxvbmcgICAgIG1EZXY7CisgICAgbG9uZyAgICAgbUNvbnRleHQ7CiAgICAgQFN1cHByZXNzV2FybmluZ3MoeyJGaWVsZENhbkJlTG9jYWwifSkKICAgICBNZXNzYWdlVGhyZWFkIG1NZXNzYWdlVGhyZWFkOwogCkBAIC0xMjQ4LDcgKzEyMDQsNyBAQAogICAgICAgICByZXR1cm4gbUNvbnRleHQgIT0gMDsKICAgICB9CiAKLSAgICBpbnQgc2FmZUlEKEJhc2VPYmogbykgeworICAgIGxvbmcgc2FmZUlEKEJhc2VPYmogbykgewogICAgICAgICBpZihvICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBvLmdldElEKHRoaXMpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdEdMLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1JlbmRlclNjcmlwdEdMLmphdmEKaW5kZXggYmFjOWM2OC4uNzE0ZTgzNSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9SZW5kZXJTY3JpcHRHTC5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvUmVuZGVyU2NyaXB0R0wuamF2YQpAQCAtMTYsMTcgKzE2LDEwIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CiAKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKLQogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGl4ZWxGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7CiAKIC8qKgogICogQGhpZGUKQEAgLTI4Niw3ICsyNzksNyBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGJpbmRSb290U2NyaXB0KFNjcmlwdCBzKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIG5Db250ZXh0QmluZFJvb3RTY3JpcHQoc2FmZUlEKHMpKTsKKyAgICAgICAgbkNvbnRleHRCaW5kUm9vdFNjcmlwdCgoaW50KXNhZmVJRChzKSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0yOTgsNyArMjkxLDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBiaW5kUHJvZ3JhbVN0b3JlKFByb2dyYW1TdG9yZSBwKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIG5Db250ZXh0QmluZFByb2dyYW1TdG9yZShzYWZlSUQocCkpOworICAgICAgICBuQ29udGV4dEJpbmRQcm9ncmFtU3RvcmUoKGludClzYWZlSUQocCkpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMzEwLDcgKzMwMyw3IEBACiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYmluZFByb2dyYW1GcmFnbWVudChQcm9ncmFtRnJhZ21lbnQgcCkgewogICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICBuQ29udGV4dEJpbmRQcm9ncmFtRnJhZ21lbnQoc2FmZUlEKHApKTsKKyAgICAgICAgbkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50KChpbnQpc2FmZUlEKHApKTsKICAgICB9CiAKICAgICAvKioKQEAgLTMyMiw3ICszMTUsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGJpbmRQcm9ncmFtUmFzdGVyKFByb2dyYW1SYXN0ZXIgcCkgewogICAgICAgICB2YWxpZGF0ZSgpOwotICAgICAgICBuQ29udGV4dEJpbmRQcm9ncmFtUmFzdGVyKHNhZmVJRChwKSk7CisgICAgICAgIG5Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIoKGludClzYWZlSUQocCkpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMzM0LDcgKzMyNyw3IEBACiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYmluZFByb2dyYW1WZXJ0ZXgoUHJvZ3JhbVZlcnRleCBwKSB7CiAgICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgIG5Db250ZXh0QmluZFByb2dyYW1WZXJ0ZXgoc2FmZUlEKHApKTsKKyAgICAgICAgbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleCgoaW50KXNhZmVJRChwKSk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NhbXBsZXIuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2FtcGxlci5qYXZhCmluZGV4IDYyMzA1NWZlLi4zOWI4NjdiIDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NhbXBsZXIuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NhbXBsZXIuamF2YQpAQCAtMTYsMTcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKIAotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKLQogLyoqCiAgKiBTYW1wbGVyIG9iamVjdCB0aGF0IGRlZmluZXMgaG93IEFsbG9jYXRpb25zIGNhbiBiZSByZWFkIGFzIHRleHR1cmVzIHdpdGhpbiBhCiAgKiBrZXJuZWwuIFNhbXBsZXJzIGFyZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHtAY29kZSByc1NhbXBsZX0gcnVudGltZQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0LmphdmEKaW5kZXggMDAyNmUwZS4uNWFiMThmNyAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHQuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdC5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIFNjcmlwdCBtU2NyaXB0OwogICAgICAgICBpbnQgbVNsb3Q7CiAgICAgICAgIGludCBtU2lnOwotICAgICAgICBLZXJuZWxJRChpbnQgaWQsIFJlbmRlclNjcmlwdCBycywgU2NyaXB0IHMsIGludCBzbG90LCBpbnQgc2lnKSB7CisgICAgICAgIEtlcm5lbElEKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycywgU2NyaXB0IHMsIGludCBzbG90LCBpbnQgc2lnKSB7CiAgICAgICAgICAgICBzdXBlcihpZCwgcnMpOwogICAgICAgICAgICAgbVNjcmlwdCA9IHM7CiAgICAgICAgICAgICBtU2xvdCA9IHNsb3Q7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICByZXR1cm4gazsKICAgICAgICAgfQogCi0gICAgICAgIGludCBpZCA9IG1SUy5uU2NyaXB0S2VybmVsSURDcmVhdGUoZ2V0SUQobVJTKSwgc2xvdCwgc2lnKTsKKyAgICAgICAgbG9uZyBpZCA9IG1SUy5uU2NyaXB0S2VybmVsSURDcmVhdGUoZ2V0SUQobVJTKSwgc2xvdCwgc2lnKTsKICAgICAgICAgaWYgKGlkID09IDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSU0RyaXZlckV4Y2VwdGlvbigiRmFpbGVkIHRvIGNyZWF0ZSBLZXJuZWxJRCIpOwogICAgICAgICB9CkBAIC03NSw3ICs3NSw3IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGaWVsZElEIGV4dGVuZHMgQmFzZU9iaiB7CiAgICAgICAgIFNjcmlwdCBtU2NyaXB0OwogICAgICAgICBpbnQgbVNsb3Q7Ci0gICAgICAgIEZpZWxkSUQoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMsIFNjcmlwdCBzLCBpbnQgc2xvdCkgeworICAgICAgICBGaWVsZElEKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycywgU2NyaXB0IHMsIGludCBzbG90KSB7CiAgICAgICAgICAgICBzdXBlcihpZCwgcnMpOwogICAgICAgICAgICAgbVNjcmlwdCA9IHM7CiAgICAgICAgICAgICBtU2xvdCA9IHNsb3Q7CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICByZXR1cm4gZjsKICAgICAgICAgfQogCi0gICAgICAgIGludCBpZCA9IG1SUy5uU2NyaXB0RmllbGRJRENyZWF0ZShnZXRJRChtUlMpLCBzbG90KTsKKyAgICAgICAgbG9uZyBpZCA9IG1SUy5uU2NyaXB0RmllbGRJRENyZWF0ZShnZXRJRChtUlMpLCBzbG90KTsKICAgICAgICAgaWYgKGlkID09IDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSU0RyaXZlckV4Y2VwdGlvbigiRmFpbGVkIHRvIGNyZWF0ZSBGaWVsZElEIik7CiAgICAgICAgIH0KQEAgLTEzMiwxMSArMTMyLDExIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgIkF0IGxlYXN0IG9uZSBvZiBhaW4gb3IgYW91dCBpcyByZXF1aXJlZCB0byBiZSBub24tbnVsbC4iKTsKICAgICAgICAgfQotICAgICAgICBpbnQgaW5faWQgPSAwOworICAgICAgICBsb25nIGluX2lkID0gMDsKICAgICAgICAgaWYgKGFpbiAhPSBudWxsKSB7CiAgICAgICAgICAgICBpbl9pZCA9IGFpbi5nZXRJRChtUlMpOwogICAgICAgICB9Ci0gICAgICAgIGludCBvdXRfaWQgPSAwOworICAgICAgICBsb25nIG91dF9pZCA9IDA7CiAgICAgICAgIGlmIChhb3V0ICE9IG51bGwpIHsKICAgICAgICAgICAgIG91dF9pZCA9IGFvdXQuZ2V0SUQobVJTKTsKICAgICAgICAgfQpAQCAtMTYxLDExICsxNjEsMTEgQEAKICAgICAgICAgICAgIGZvckVhY2goc2xvdCwgYWluLCBhb3V0LCB2KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpbnQgaW5faWQgPSAwOworICAgICAgICBsb25nIGluX2lkID0gMDsKICAgICAgICAgaWYgKGFpbiAhPSBudWxsKSB7CiAgICAgICAgICAgICBpbl9pZCA9IGFpbi5nZXRJRChtUlMpOwogICAgICAgICB9Ci0gICAgICAgIGludCBvdXRfaWQgPSAwOworICAgICAgICBsb25nIG91dF9pZCA9IDA7CiAgICAgICAgIGlmIChhb3V0ICE9IG51bGwpIHsKICAgICAgICAgICAgIG91dF9pZCA9IGFvdXQuZ2V0SUQobVJTKTsKICAgICAgICAgfQpAQCAtMTc2LDcgKzE3Niw3IEBACiAgICAgICAgIG1SUy5uU2NyaXB0Rm9yRWFjaENsaXBwZWQoZ2V0SUQobVJTKSwgc2xvdCwgaW5faWQsIG91dF9pZCwgcGFyYW1zLCBzYy54c3RhcnQsIHNjLnhlbmQsIHNjLnlzdGFydCwgc2MueWVuZCwgc2MuenN0YXJ0LCBzYy56ZW5kKTsKICAgICB9CiAKLSAgICBTY3JpcHQoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICBTY3JpcHQobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CiAgICAgICAgIHN1cGVyKGlkLCBycyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEMuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0Qy5qYXZhCmluZGV4IGIwYTU3NTkuLmM3OTc5ZjYgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0Qy5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0Qy5qYXZhCkBAIC0xNiwxOCArMTYsMTEgQEAKIAogcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKIAogLyoqCiAgKiBUaGUgc3VwZXJjbGFzcyBmb3IgYWxsIHVzZXItZGVmaW5lZCBzY3JpcHRzLiBUaGlzIGlzIG9ubHkKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0R3JvdXAuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0R3JvdXAuamF2YQppbmRleCAxNDE2NjQxLi5mMWE3MjczIDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEdyb3VwLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRHcm91cC5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CiAKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIAogLyoqCkBAIC04OSw3ICs4OCw3IEBACiAgICAgfQogCiAKLSAgICBTY3JpcHRHcm91cChpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgIFNjcmlwdEdyb3VwKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgewogICAgICAgICBzdXBlcihpZCwgcnMpOwogICAgIH0KIApAQCAtMzgwLDYgKzM3OSw3IEBACiAgICAgICAgICAqIEByZXR1cm4gU2NyaXB0R3JvdXAgVGhlIG5ldyBTY3JpcHRHcm91cAogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIFNjcmlwdEdyb3VwIGNyZWF0ZSgpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIGJyb2tlbiBmb3IgNjQtYml0CiAKICAgICAgICAgICAgIGlmIChtTm9kZXMuc2l6ZSgpID09IDApIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkVtcHR5IHNjcmlwdCBncm91cHMgYXJlIG5vdCBhbGxvd2VkIik7CkBAIC00MDAsNyArNDAwLDcgQEAKICAgICAgICAgICAgICAgICBOb2RlIG4gPSBtTm9kZXMuZ2V0KGN0KTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBjdDI9MDsgY3QyIDwgbi5tS2VybmVscy5zaXplKCk7IGN0MisrKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNjcmlwdC5LZXJuZWxJRCBraWQgPSBuLm1LZXJuZWxzLmdldChjdDIpOwotICAgICAgICAgICAgICAgICAgICBrZXJuZWxzW2lkeCsrXSA9IGtpZC5nZXRJRChtUlMpOworICAgICAgICAgICAgICAgICAgICBrZXJuZWxzW2lkeCsrXSA9IChpbnQpa2lkLmdldElEKG1SUyk7CiAKICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBoYXNJbnB1dCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBib29sZWFuIGhhc091dHB1dCA9IGZhbHNlOwpAQCAtNDM0LDE3ICs0MzQsMTcgQEAKIAogICAgICAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCBtTGluZXMuc2l6ZSgpOyBjdCsrKSB7CiAgICAgICAgICAgICAgICAgQ29ubmVjdExpbmUgY2wgPSBtTGluZXMuZ2V0KGN0KTsKLSAgICAgICAgICAgICAgICBzcmNbY3RdID0gY2wubUZyb20uZ2V0SUQobVJTKTsKKyAgICAgICAgICAgICAgICBzcmNbY3RdID0gKGludCljbC5tRnJvbS5nZXRJRChtUlMpOwogICAgICAgICAgICAgICAgIGlmIChjbC5tVG9LICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgZHN0a1tjdF0gPSBjbC5tVG9LLmdldElEKG1SUyk7CisgICAgICAgICAgICAgICAgICAgIGRzdGtbY3RdID0gKGludCljbC5tVG9LLmdldElEKG1SUyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChjbC5tVG9GICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgZHN0ZltjdF0gPSBjbC5tVG9GLmdldElEKG1SUyk7CisgICAgICAgICAgICAgICAgICAgIGRzdGZbY3RdID0gKGludCljbC5tVG9GLmdldElEKG1SUyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHR5cGVzW2N0XSA9IGNsLm1BbGxvY2F0aW9uVHlwZS5nZXRJRChtUlMpOworICAgICAgICAgICAgICAgIHR5cGVzW2N0XSA9IChpbnQpY2wubUFsbG9jYXRpb25UeXBlLmdldElEKG1SUyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGludCBpZCA9IG1SUy5uU2NyaXB0R3JvdXBDcmVhdGUoa2VybmVscywgc3JjLCBkc3RrLCBkc3RmLCB0eXBlcyk7CisgICAgICAgICAgICBsb25nIGlkID0gbVJTLm5TY3JpcHRHcm91cENyZWF0ZShrZXJuZWxzLCBzcmMsIGRzdGssIGRzdGYsIHR5cGVzKTsKICAgICAgICAgICAgIGlmIChpZCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJTUnVudGltZUV4Y2VwdGlvbigiT2JqZWN0IGNyZWF0aW9uIGVycm9yLCBzaG91bGQgbm90IGhhcHBlbi4iKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpYy5qYXZhCmluZGV4IDA5NjI2OGEuLjg3MTllMDE3IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpYy5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKICAqIE5vdCBpbnRlbmRlZCBmb3IgZGlyZWN0IHVzZS4KICAqKi8KIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTY3JpcHRJbnRyaW5zaWMgZXh0ZW5kcyBTY3JpcHQgewotICAgIFNjcmlwdEludHJpbnNpYyhpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgIFNjcmlwdEludHJpbnNpYyhsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKICAgICAgICAgc3VwZXIoaWQsIHJzKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpYzNETFVULmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpYzNETFVULmphdmEKaW5kZXggMzQ1NDBhMS4uMzNlNjRiZCAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWMzRExVVC5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljM0RMVVQuamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogLyoqCiAgKgogICogSW50cmluc2ljIGZvciBjb252ZXJ0aW5nIFJHQiB0byBSR0JBIGJ5IHVzaW5nIGEgM0QgbG9va3VwIHRhYmxlLiAgVGhlCkBAIC0zMCw3ICsyOCw3IEBACiAgICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1MVVQ7CiAgICAgcHJpdmF0ZSBFbGVtZW50IG1FbGVtZW50OwogCi0gICAgcHJpdmF0ZSBTY3JpcHRJbnRyaW5zaWMzRExVVChpbnQgaWQsIFJlbmRlclNjcmlwdCBycywgRWxlbWVudCBlKSB7CisgICAgcHJpdmF0ZSBTY3JpcHRJbnRyaW5zaWMzRExVVChsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnQgZSkgewogICAgICAgICBzdXBlcihpZCwgcnMpOwogICAgICAgICBtRWxlbWVudCA9IGU7CiAgICAgfQpAQCAtNDYsNyArNDQsNyBAQAogICAgICAqIEByZXR1cm4gU2NyaXB0SW50cmluc2ljM0RMVVQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFNjcmlwdEludHJpbnNpYzNETFVUIGNyZWF0ZShSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnQgZSkgewotICAgICAgICBpbnQgaWQgPSBycy5uU2NyaXB0SW50cmluc2ljQ3JlYXRlKDgsIGUuZ2V0SUQocnMpKTsKKyAgICAgICAgbG9uZyBpZCA9IHJzLm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoOCwgZS5nZXRJRChycykpOwogCiAgICAgICAgIGlmICghZS5pc0NvbXBhdGlibGUoRWxlbWVudC5VOF80KHJzKSkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRWxlbWVudCBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB1Y2hhcjQuIik7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0JsZW5kLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0JsZW5kLmphdmEKaW5kZXggMGUwNWJjOC4uNDBmMWEzZSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNCbGVuZC5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQmxlbmQuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogICogSW50cmluc2ljIGtlcm5lbHMgZm9yIGJsZW5kaW5nIHR3byB7QGxpbmsgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbn0gb2JqZWN0cy4KICAqKi8KIHB1YmxpYyBjbGFzcyBTY3JpcHRJbnRyaW5zaWNCbGVuZCBleHRlbmRzIFNjcmlwdEludHJpbnNpYyB7Ci0gICAgU2NyaXB0SW50cmluc2ljQmxlbmQoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICBTY3JpcHRJbnRyaW5zaWNCbGVuZChsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKICAgICAgICAgc3VwZXIoaWQsIHJzKTsKICAgICB9CiAKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFNjcmlwdEludHJpbnNpY0JsZW5kIGNyZWF0ZShSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnQgZSkgewogICAgICAgICAvLyA3IGNvbWVzIGZyb20gUlNfU0NSSVBUX0lOVFJJTlNJQ19JRF9CTEVORCBpbiByc0RlZmluZXMuaAotICAgICAgICBpbnQgaWQgPSBycy5uU2NyaXB0SW50cmluc2ljQ3JlYXRlKDcsIGUuZ2V0SUQocnMpKTsKKyAgICAgICAgbG9uZyBpZCA9IHJzLm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoNywgZS5nZXRJRChycykpOwogICAgICAgICByZXR1cm4gbmV3IFNjcmlwdEludHJpbnNpY0JsZW5kKGlkLCBycyk7CiAKICAgICB9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0JsdXIuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQmx1ci5qYXZhCmluZGV4IGFhZjVmZmMuLjJiMzZkMjcgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQmx1ci5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQmx1ci5qYXZhCkBAIC0xNiwxMCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwogCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogLyoqCiAgKiBJbnRyaW5zaWMgR2F1c2lhbiBibHVyIGZpbHRlci4gQXBwbGllcyBhIGdhdXNzaWFuIGJsdXIgb2YgdGhlCiAgKiBzcGVjaWZpZWQgcmFkaXVzIHRvIGFsbCBlbGVtZW50cyBvZiBhbiBhbGxvY2F0aW9uLgpAQCAtMzAsNyArMjYsNyBAQAogICAgIHByaXZhdGUgZmluYWwgZmxvYXRbXSBtVmFsdWVzID0gbmV3IGZsb2F0WzldOwogICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtSW5wdXQ7CiAKLSAgICBwcml2YXRlIFNjcmlwdEludHJpbnNpY0JsdXIoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICBwcml2YXRlIFNjcmlwdEludHJpbnNpY0JsdXIobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CiAgICAgICAgIHN1cGVyKGlkLCBycyk7CiAgICAgfQogCkBAIC00OSw3ICs0NSw3IEBACiAgICAgICAgIGlmICgoIWUuaXNDb21wYXRpYmxlKEVsZW1lbnQuVThfNChycykpKSAmJiAoIWUuaXNDb21wYXRpYmxlKEVsZW1lbnQuVTgocnMpKSkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSU0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5zdXBvcnRlZCBlbGVtZW50IHR5cGUuIik7CiAgICAgICAgIH0KLSAgICAgICAgaW50IGlkID0gcnMublNjcmlwdEludHJpbnNpY0NyZWF0ZSg1LCBlLmdldElEKHJzKSk7CisgICAgICAgIGxvbmcgaWQgPSBycy5uU2NyaXB0SW50cmluc2ljQ3JlYXRlKDUsIGUuZ2V0SUQocnMpKTsKICAgICAgICAgU2NyaXB0SW50cmluc2ljQmx1ciBzaWIgPSBuZXcgU2NyaXB0SW50cmluc2ljQmx1cihpZCwgcnMpOwogICAgICAgICBzaWIuc2V0UmFkaXVzKDUuZik7CiAgICAgICAgIHJldHVybiBzaWI7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0NvbG9yTWF0cml4LmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0NvbG9yTWF0cml4LmphdmEKaW5kZXggMzJjM2QxNS4uNGIwZDUwNyAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeC5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29sb3JNYXRyaXguamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogLyoqCiAgKiBJbnRyaW5zaWMgZm9yIGFwcGx5aW5nIGEgY29sb3IgbWF0cml4IHRvIGFsbG9jYXRpb25zLgogICoKQEAgLTQzLDcgKzQxLDcgQEAKICAgICBwcml2YXRlIGZpbmFsIE1hdHJpeDRmIG1NYXRyaXggPSBuZXcgTWF0cml4NGYoKTsKICAgICBwcml2YXRlIGZpbmFsIEZsb2F0NCBtQWRkID0gbmV3IEZsb2F0NCgpOwogCi0gICAgcHJpdmF0ZSBTY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeChpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgIHByaXZhdGUgU2NyaXB0SW50cmluc2ljQ29sb3JNYXRyaXgobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CiAgICAgICAgIHN1cGVyKGlkLCBycyk7CiAgICAgfQogCkBAIC03NSw3ICs3Myw3IEBACiAgICAgICogQHJldHVybiBTY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljQ29sb3JNYXRyaXggY3JlYXRlKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBpbnQgaWQgPSBycy5uU2NyaXB0SW50cmluc2ljQ3JlYXRlKDIsIDApOworICAgICAgICBsb25nIGlkID0gcnMublNjcmlwdEludHJpbnNpY0NyZWF0ZSgyLCAwKTsKICAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRJbnRyaW5zaWNDb2xvck1hdHJpeChpZCwgcnMpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb252b2x2ZTN4My5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb252b2x2ZTN4My5qYXZhCmluZGV4IDVkM2MxZDMuLmExYTFiN2UgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29udm9sdmUzeDMuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0NvbnZvbHZlM3gzLmphdmEKQEAgLTE2LDggKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIC8qKgogICogSW50cmluc2ljIGZvciBhcHBseWluZyBhIDN4MyBjb252b2x2ZSB0byBhbiBhbGxvY2F0aW9uLgogICoKQEAgLTI2LDcgKzI0LDcgQEAKICAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVZhbHVlcyA9IG5ldyBmbG9hdFs5XTsKICAgICBwcml2YXRlIEFsbG9jYXRpb24gbUlucHV0OwogCi0gICAgcHJpdmF0ZSBTY3JpcHRJbnRyaW5zaWNDb252b2x2ZTN4MyhpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgIHByaXZhdGUgU2NyaXB0SW50cmluc2ljQ29udm9sdmUzeDMobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CiAgICAgICAgIHN1cGVyKGlkLCBycyk7CiAgICAgfQogCkBAIC02MSw3ICs1OSw3IEBACiAgICAgICAgICAgICAhZS5pc0NvbXBhdGlibGUoRWxlbWVudC5GMzJfNChycykpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuc3Vwb3J0ZWQgZWxlbWVudCB0eXBlLiIpOwogICAgICAgICB9Ci0gICAgICAgIGludCBpZCA9IHJzLm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoMSwgZS5nZXRJRChycykpOworICAgICAgICBsb25nIGlkID0gcnMublNjcmlwdEludHJpbnNpY0NyZWF0ZSgxLCBlLmdldElEKHJzKSk7CiAgICAgICAgIFNjcmlwdEludHJpbnNpY0NvbnZvbHZlM3gzIHNpID0gbmV3IFNjcmlwdEludHJpbnNpY0NvbnZvbHZlM3gzKGlkLCBycyk7CiAgICAgICAgIHNpLnNldENvZWZmaWNpZW50cyhmKTsKICAgICAgICAgcmV0dXJuIHNpOwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb252b2x2ZTV4NS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNDb252b2x2ZTV4NS5qYXZhCmluZGV4IGFkMDlmOTUuLjhiNjY4OTYgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljQ29udm9sdmU1eDUuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0NvbnZvbHZlNXg1LmphdmEKQEAgLTE2LDggKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIC8qKgogICogSW50cmluc2ljIGZvciBhcHBseWluZyBhIDV4NSBjb252b2x2ZSB0byBhbiBhbGxvY2F0aW9uLgogICoKQEAgLTI2LDcgKzI0LDcgQEAKICAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVZhbHVlcyA9IG5ldyBmbG9hdFsyNV07CiAgICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1JbnB1dDsKIAotICAgIHByaXZhdGUgU2NyaXB0SW50cmluc2ljQ29udm9sdmU1eDUoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICBwcml2YXRlIFNjcmlwdEludHJpbnNpY0NvbnZvbHZlNXg1KGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgewogICAgICAgICBzdXBlcihpZCwgcnMpOwogICAgIH0KIApAQCAtNjIsNyArNjAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJTSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnN1cG9ydGVkIGVsZW1lbnQgdHlwZS4iKTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBpZCA9IHJzLm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoNCwgZS5nZXRJRChycykpOworICAgICAgICBsb25nIGlkID0gcnMublNjcmlwdEludHJpbnNpY0NyZWF0ZSg0LCBlLmdldElEKHJzKSk7CiAgICAgICAgIHJldHVybiBuZXcgU2NyaXB0SW50cmluc2ljQ29udm9sdmU1eDUoaWQsIHJzKTsKIAogICAgIH0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljSGlzdG9ncmFtLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0hpc3RvZ3JhbS5qYXZhCmluZGV4IGFkYzJkOTUuLjUzNjY2M2QgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljSGlzdG9ncmFtLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNIaXN0b2dyYW0uamF2YQpAQCAtMTYsMTAgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnJlbmRlcnNjcmlwdDsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIC8qKgogICogSW50cmluc2ljIEhpc3RvZ3JhbSBmaWx0ZXIuCiAgKgpAQCAtMjgsNyArMjQsNyBAQAogcHVibGljIGZpbmFsIGNsYXNzIFNjcmlwdEludHJpbnNpY0hpc3RvZ3JhbSBleHRlbmRzIFNjcmlwdEludHJpbnNpYyB7CiAgICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1PdXQ7CiAKLSAgICBwcml2YXRlIFNjcmlwdEludHJpbnNpY0hpc3RvZ3JhbShpbnQgaWQsIFJlbmRlclNjcmlwdCBycykgeworICAgIHByaXZhdGUgU2NyaXB0SW50cmluc2ljSGlzdG9ncmFtKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgewogICAgICAgICBzdXBlcihpZCwgcnMpOwogICAgIH0KIApAQCAtNTIsNyArNDgsNyBAQAogICAgICAgICAgICAgKCFlLmlzQ29tcGF0aWJsZShFbGVtZW50LlU4KHJzKSkpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuc3Vwb3J0ZWQgZWxlbWVudCB0eXBlLiIpOwogICAgICAgICB9Ci0gICAgICAgIGludCBpZCA9IHJzLm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoOSwgZS5nZXRJRChycykpOworICAgICAgICBsb25nIGlkID0gcnMublNjcmlwdEludHJpbnNpY0NyZWF0ZSg5LCBlLmdldElEKHJzKSk7CiAgICAgICAgIFNjcmlwdEludHJpbnNpY0hpc3RvZ3JhbSBzaWIgPSBuZXcgU2NyaXB0SW50cmluc2ljSGlzdG9ncmFtKGlkLCBycyk7CiAgICAgICAgIHJldHVybiBzaWI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNMVVQuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljTFVULmphdmEKaW5kZXggMGY3YWIzOC4uMDAxMDk1YyAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNMVVQuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY0xVVC5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIEludHJpbnNpYyBmb3IgYXBwbHlpbmcgYSBwZXItY2hhbm5lbCBsb29rdXAgdGFibGUuIEVhY2gKICAqIGNoYW5uZWwgb2YgdGhlIGlucHV0IGhhcyBhbiBpbmRlcGVuZGFudCBsb29rdXAgdGFibGUuIFRoZQpAQCAtMzAsNyArMjgsNyBAQAogICAgIHByaXZhdGUgZmluYWwgYnl0ZSBtQ2FjaGVbXSA9IG5ldyBieXRlWzEwMjRdOwogICAgIHByaXZhdGUgYm9vbGVhbiBtRGlydHkgPSB0cnVlOwogCi0gICAgcHJpdmF0ZSBTY3JpcHRJbnRyaW5zaWNMVVQoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICBwcml2YXRlIFNjcmlwdEludHJpbnNpY0xVVChsb25nIGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKICAgICAgICAgc3VwZXIoaWQsIHJzKTsKICAgICAgICAgbVRhYmxlcyA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQocnMsIEVsZW1lbnQuVTgocnMpLCAxMDI0KTsKICAgICAgICAgZm9yIChpbnQgY3Q9MDsgY3QgPCAyNTY7IGN0KyspIHsKQEAgLTUzLDcgKzUxLDcgQEAKICAgICAgKiBAcmV0dXJuIFNjcmlwdEludHJpbnNpY0xVVAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgU2NyaXB0SW50cmluc2ljTFVUIGNyZWF0ZShSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnQgZSkgewotICAgICAgICBpbnQgaWQgPSBycy5uU2NyaXB0SW50cmluc2ljQ3JlYXRlKDMsIGUuZ2V0SUQocnMpKTsKKyAgICAgICAgbG9uZyBpZCA9IHJzLm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoMywgZS5nZXRJRChycykpOwogICAgICAgICByZXR1cm4gbmV3IFNjcmlwdEludHJpbnNpY0xVVChpZCwgcnMpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNZdXZUb1JHQi5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TY3JpcHRJbnRyaW5zaWNZdXZUb1JHQi5qYXZhCmluZGV4IDg0NTYyNWQuLmY5NDI5ODIgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2NyaXB0SW50cmluc2ljWXV2VG9SR0IuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1NjcmlwdEludHJpbnNpY1l1dlRvUkdCLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIHB1YmxpYyBmaW5hbCBjbGFzcyBTY3JpcHRJbnRyaW5zaWNZdXZUb1JHQiBleHRlbmRzIFNjcmlwdEludHJpbnNpYyB7CiAgICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1JbnB1dDsKIAotICAgIFNjcmlwdEludHJpbnNpY1l1dlRvUkdCKGludCBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CisgICAgU2NyaXB0SW50cmluc2ljWXV2VG9SR0IobG9uZyBpZCwgUmVuZGVyU2NyaXB0IHJzKSB7CiAgICAgICAgIHN1cGVyKGlkLCBycyk7CiAgICAgfQogCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBTY3JpcHRJbnRyaW5zaWNZdXZUb1JHQiBjcmVhdGUoUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUpIHsKICAgICAgICAgLy8gNiBjb21lcyBmcm9tIFJTX1NDUklQVF9JTlRSSU5TSUNfWVVWX1RPX1JHQiBpbiByc0RlZmluZXMuaAotICAgICAgICBpbnQgaWQgPSBycy5uU2NyaXB0SW50cmluc2ljQ3JlYXRlKDYsIGUuZ2V0SUQocnMpKTsKKyAgICAgICAgbG9uZyBpZCA9IHJzLm5TY3JpcHRJbnRyaW5zaWNDcmVhdGUoNiwgZS5nZXRJRChycykpOwogICAgICAgICBTY3JpcHRJbnRyaW5zaWNZdXZUb1JHQiBzaSA9IG5ldyBTY3JpcHRJbnRyaW5zaWNZdXZUb1JHQihpZCwgcnMpOwogICAgICAgICByZXR1cm4gc2k7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TaG9ydDIuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvU2hvcnQyLmphdmEKaW5kZXggMDcwZDYwOC4uMjQ4MDlmNyAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9TaG9ydDIuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvcmVuZGVyc2NyaXB0L1Nob3J0Mi5qYXZhCkBAIC0xNiw3ICsxNiwxMCBAQAogCiBwYWNrYWdlIGFuZHJvaWQucmVuZGVyc2NyaXB0OwogCi0vKiogCisKKy8qKgorICogQ2xhc3MgZm9yIGV4cG9zaW5nIHRoZSBuYXRpdmUgUmVuZGVyU2NyaXB0IFNob3J0MiB0eXBlIGJhY2sgdG8gdGhlIEFuZHJvaWQgc3lzdGVtLgorICoKICAqIFZlY3RvciB2ZXJzaW9uIG9mIHRoZSBiYXNpYyBzaG9ydCB0eXBlLgogICogUHJvdmlkZXMgdHdvIHNob3J0IGZpZWxkcyBwYWNrZWQuCiAgKi8KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9yZW5kZXJzY3JpcHQvVHlwZS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlLmphdmEKaW5kZXggZTAyMzczOS4uODNiZjRhNSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL3JlbmRlcnNjcmlwdC9UeXBlLmphdmEKQEAgLTE2LDEyICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5yZW5kZXJzY3JpcHQ7CiAKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIDxwPkEgVHlwZSBkZXNjcmliZXMgdGhlIHtAbGluayBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50fSBhbmQgZGltZW5zaW9ucyB1c2VkIGZvciBhbiB7QGxpbmsKICAqIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb259IG9yIGEgcGFyYWxsZWwgb3BlcmF0aW9uLiBUeXBlcyBhcmUgY3JlYXRlZCB0aHJvdWdoIHtAbGluawpAQCAtMTkwLDE2ICsxODQsMTggQEAKICAgICB9CiAKIAotICAgIFR5cGUoaW50IGlkLCBSZW5kZXJTY3JpcHQgcnMpIHsKKyAgICBUeXBlKGxvbmcgaWQsIFJlbmRlclNjcmlwdCBycykgewogICAgICAgICBzdXBlcihpZCwgcnMpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHZvaWQgdXBkYXRlRnJvbU5hdGl2ZSgpIHsKKyAgICAgICAgLy8gRklYTUU6IHJzYVR5cGVHZXROYXRpdmVEYXRhIG5lZWRzIDMyLWJpdCBhbmQgNjQtYml0IHBhdGhzCisKICAgICAgICAgLy8gV2UgaGF2ZSA2IGludGVnZXIgdG8gb2J0YWluIG1EaW1YOyBtRGltWTsgbURpbVo7CiAgICAgICAgIC8vIG1EaW1MT0Q7IG1EaW1GYWNlczsgbUVsZW1lbnQ7CiAgICAgICAgIGludFtdIGRhdGFCdWZmZXIgPSBuZXcgaW50WzZdOwotICAgICAgICBtUlMublR5cGVHZXROYXRpdmVEYXRhKGdldElEKG1SUyksIGRhdGFCdWZmZXIpOworICAgICAgICBtUlMublR5cGVHZXROYXRpdmVEYXRhKChpbnQpZ2V0SUQobVJTKSwgZGF0YUJ1ZmZlcik7CiAKICAgICAgICAgbURpbVggPSBkYXRhQnVmZmVyWzBdOwogICAgICAgICBtRGltWSA9IGRhdGFCdWZmZXJbMV07CkBAIC0yMTYsNiArMjEyLDgxIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYmFzaWMgMUQgdHlwZXMuIFRoZSB0eXBlIGlzCisgICAgICogY3JlYXRlZCB3aXRob3V0IG1pcG1hcHMgZW5hYmxlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyBUaGUgUmVuZGVyU2NyaXB0IGNvbnRleHQKKyAgICAgKiBAcGFyYW0gZSBUaGUgRWxlbWVudCBmb3IgdGhlIFR5cGUKKyAgICAgKiBAcGFyYW0gZGltWCBUaGUgWCBkaW1lbnNpb24sIG11c3QgYmUgPiAwCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFR5cGUKKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIFR5cGUgY3JlYXRlWChSZW5kZXJTY3JpcHQgcnMsIEVsZW1lbnQgZSwgaW50IGRpbVgpIHsKKyAgICAgICAgaWYgKGRpbVggPCAxKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkRpbWVuc2lvbiBtdXN0IGJlID49IDEuIik7CisgICAgICAgIH0KKworICAgICAgICBsb25nIGlkID0gcnMublR5cGVDcmVhdGUoZS5nZXRJRChycyksIGRpbVgsIDAsIDAsIGZhbHNlLCBmYWxzZSwgMCk7CisgICAgICAgIFR5cGUgdCA9IG5ldyBUeXBlKGlkLCBycyk7CisgICAgICAgIHQubUVsZW1lbnQgPSBlOworICAgICAgICB0Lm1EaW1YID0gZGltWDsKKyAgICAgICAgdC5jYWxjRWxlbWVudENvdW50KCk7CisgICAgICAgIHJldHVybiB0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGJhc2ljIDJEIHR5cGVzLiBUaGUgdHlwZSBpcworICAgICAqIGNyZWF0ZWQgd2l0aG91dCBtaXBtYXBzIG9yIGN1YmVtYXBzLgorICAgICAqCisgICAgICogQHBhcmFtIHJzIFRoZSBSZW5kZXJTY3JpcHQgY29udGV4dAorICAgICAqIEBwYXJhbSBlIFRoZSBFbGVtZW50IGZvciB0aGUgVHlwZQorICAgICAqIEBwYXJhbSBkaW1YIFRoZSBYIGRpbWVuc2lvbiwgbXVzdCBiZSA+IDAKKyAgICAgKiBAcGFyYW0gZGltWSBUaGUgWSBkaW1lbnNpb24sIG11c3QgYmUgPiAwCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFR5cGUKKyAgICAgKi8KKyAgICBzdGF0aWMgcHVibGljIFR5cGUgY3JlYXRlWFkoUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUsIGludCBkaW1YLCBpbnQgZGltWSkgeworICAgICAgICBpZiAoKGRpbVggPCAxKSB8fCAoZGltWSA8IDEpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkRpbWVuc2lvbiBtdXN0IGJlID49IDEuIik7CisgICAgICAgIH0KKworICAgICAgICBsb25nIGlkID0gcnMublR5cGVDcmVhdGUoZS5nZXRJRChycyksIGRpbVgsIGRpbVksIDAsIGZhbHNlLCBmYWxzZSwgMCk7CisgICAgICAgIFR5cGUgdCA9IG5ldyBUeXBlKGlkLCBycyk7CisgICAgICAgIHQubUVsZW1lbnQgPSBlOworICAgICAgICB0Lm1EaW1YID0gZGltWDsKKyAgICAgICAgdC5tRGltWSA9IGRpbVk7CisgICAgICAgIHQuY2FsY0VsZW1lbnRDb3VudCgpOworICAgICAgICByZXR1cm4gdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBiYXNpYyAzRCB0eXBlcy4gVGhlIHR5cGUgaXMKKyAgICAgKiBjcmVhdGVkIHdpdGhvdXQgbWlwbWFwcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyBUaGUgUmVuZGVyU2NyaXB0IGNvbnRleHQKKyAgICAgKiBAcGFyYW0gZSBUaGUgRWxlbWVudCBmb3IgdGhlIFR5cGUKKyAgICAgKiBAcGFyYW0gZGltWCBUaGUgWCBkaW1lbnNpb24sIG11c3QgYmUgPiAwCisgICAgICogQHBhcmFtIGRpbVkgVGhlIFkgZGltZW5zaW9uLCBtdXN0IGJlID4gMAorICAgICAqIEBwYXJhbSBkaW1aIFRoZSBaIGRpbWVuc2lvbiwgbXVzdCBiZSA+IDAKKyAgICAgKgorICAgICAqIEByZXR1cm4gVHlwZQorICAgICAqLworICAgIHN0YXRpYyBwdWJsaWMgVHlwZSBjcmVhdGVYWVooUmVuZGVyU2NyaXB0IHJzLCBFbGVtZW50IGUsIGludCBkaW1YLCBpbnQgZGltWSwgaW50IGRpbVopIHsKKyAgICAgICAgaWYgKChkaW1YIDwgMSkgfHwgKGRpbVkgPCAxKSB8fCAoZGltWiA8IDEpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUlNJbnZhbGlkU3RhdGVFeGNlcHRpb24oIkRpbWVuc2lvbiBtdXN0IGJlID49IDEuIik7CisgICAgICAgIH0KKworICAgICAgICBsb25nIGlkID0gcnMublR5cGVDcmVhdGUoZS5nZXRJRChycyksIGRpbVgsIGRpbVksIGRpbVosIGZhbHNlLCBmYWxzZSwgMCk7CisgICAgICAgIFR5cGUgdCA9IG5ldyBUeXBlKGlkLCBycyk7CisgICAgICAgIHQubUVsZW1lbnQgPSBlOworICAgICAgICB0Lm1EaW1YID0gZGltWDsKKyAgICAgICAgdC5tRGltWSA9IGRpbVk7CisgICAgICAgIHQubURpbVogPSBkaW1aOworICAgICAgICB0LmNhbGNFbGVtZW50Q291bnQoKTsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorCisgICAgLyoqCiAgICAgICogQnVpbGRlciBjbGFzcyBmb3IgVHlwZS4KICAgICAgKgogICAgICAqLwpAQCAtMzM2LDcgKzQwNyw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpbnQgaWQgPSBtUlMublR5cGVDcmVhdGUobUVsZW1lbnQuZ2V0SUQobVJTKSwKKyAgICAgICAgICAgIGxvbmcgaWQgPSBtUlMublR5cGVDcmVhdGUobUVsZW1lbnQuZ2V0SUQobVJTKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGltWCwgbURpbVksIG1EaW1aLCBtRGltTWlwbWFwcywgbURpbUZhY2VzLCBtWXV2KTsKICAgICAgICAgICAgIFR5cGUgdCA9IG5ldyBUeXBlKGlkLCBtUlMpOwogICAgICAgICAgICAgdC5tRWxlbWVudCA9IG1FbGVtZW50OwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3Mvam5pL0FuZHJvaWQubWsgYi9ncmFwaGljcy9qbmkvQW5kcm9pZC5tawppbmRleCBlOGJlYWU1My4uY2JiNWIzYiAxMDA2NDQKLS0tIGEvZ3JhcGhpY3Mvam5pL0FuZHJvaWQubWsKKysrIGIvZ3JhcGhpY3Mvam5pL0FuZHJvaWQubWsKQEAgLTI2LDcgKzI2LDcgQEAKIAkkKHJzX2dlbmVyYXRlZF9pbmNsdWRlX2RpcikgXAogCSQoY2FsbCBpbmNsdWRlLXBhdGgtZm9yLCBjb3JlY2cgZ3JhcGhpY3MpCiAKLUxPQ0FMX0NGTEFHUyArPQorTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tdW51c2VkLXBhcmFtZXRlcgogCiBMT0NBTF9MRExJQlMgOj0gLWxwdGhyZWFkCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGFkZHByZWZpeCAkKHJzX2dlbmVyYXRlZF9pbmNsdWRlX2RpcikvLHJzZ0FwaUZ1bmNEZWNsLmgpCmRpZmYgLS1naXQgYS9ncmFwaGljcy9qbmkvYW5kcm9pZF9yZW5kZXJzY3JpcHRfUmVuZGVyU2NyaXB0LmNwcCBiL2dyYXBoaWNzL2puaS9hbmRyb2lkX3JlbmRlcnNjcmlwdF9SZW5kZXJTY3JpcHQuY3BwCmluZGV4IGNiYzRlNWEuLjYxOWU3MzcgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2puaS9hbmRyb2lkX3JlbmRlcnNjcmlwdF9SZW5kZXJTY3JpcHQuY3BwCisrKyBiL2dyYXBoaWNzL2puaS9hbmRyb2lkX3JlbmRlcnNjcmlwdF9SZW5kZXJTY3JpcHQuY3BwCkBAIC01MCw2ICs1MCw2MyBAQAogCiB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKIAorI2RlZmluZSBQRVJfQVJSQVlfVFlQRShmbGFnLCBmbmMsIC4uLikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBqaW50IGxlbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdm9pZCAqcHRyID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNpemVfdCB0eXBlQnl0ZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzd2l0Y2goZGF0YVR5cGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBSU19UWVBFX0ZMT0FUXzMyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aCgoamZsb2F0QXJyYXkpZGF0YSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHRyID0gX2Vudi0+R2V0RmxvYXRBcnJheUVsZW1lbnRzKChqZmxvYXRBcnJheSlkYXRhLCBmbGFnKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHR5cGVCeXRlcyA9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmbmMoX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2Vudi0+UmVsZWFzZUZsb2F0QXJyYXlFbGVtZW50cygoamZsb2F0QXJyYXkpZGF0YSwgKGpmbG9hdCAqKXB0ciwgSk5JX0FCT1JUKTsgICBcCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUlNfVFlQRV9GTE9BVF82NDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoKGpkb3VibGVBcnJheSlkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHB0ciA9IF9lbnYtPkdldERvdWJsZUFycmF5RWxlbWVudHMoKGpkb3VibGVBcnJheSlkYXRhLCBmbGFnKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0eXBlQnl0ZXMgPSA4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZm5jKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9lbnYtPlJlbGVhc2VEb3VibGVBcnJheUVsZW1lbnRzKChqZG91YmxlQXJyYXkpZGF0YSwgKGpkb3VibGUgKilwdHIsIEpOSV9BQk9SVCk7XAorICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFJTX1RZUEVfU0lHTkVEXzg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBSU19UWVBFX1VOU0lHTkVEXzg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aCgoamJ5dGVBcnJheSlkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHRyID0gX2Vudi0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoKGpieXRlQXJyYXkpZGF0YSwgZmxhZyk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHR5cGVCeXRlcyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmbmMoX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2Vudi0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKChqYnl0ZUFycmF5KWRhdGEsIChqYnl0ZSopcHRyLCBKTklfQUJPUlQpOyAgICAgICBcCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUlNfVFlQRV9TSUdORURfMTY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFJTX1RZUEVfVU5TSUdORURfMTY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKChqc2hvcnRBcnJheSlkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwdHIgPSBfZW52LT5HZXRTaG9ydEFycmF5RWxlbWVudHMoKGpzaG9ydEFycmF5KWRhdGEsIGZsYWcpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdHlwZUJ5dGVzID0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZuYyhfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfZW52LT5SZWxlYXNlU2hvcnRBcnJheUVsZW1lbnRzKChqc2hvcnRBcnJheSlkYXRhLCAoanNob3J0ICopcHRyLCBKTklfQUJPUlQpOyAgIFwKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBSU19UWVBFX1NJR05FRF8zMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUlNfVFlQRV9VTlNJR05FRF8zMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoKGppbnRBcnJheSlkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHB0ciA9IF9lbnYtPkdldEludEFycmF5RWxlbWVudHMoKGppbnRBcnJheSlkYXRhLCBmbGFnKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0eXBlQnl0ZXMgPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZm5jKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKChqaW50QXJyYXkpZGF0YSwgKGppbnQgKilwdHIsIEpOSV9BQk9SVCk7ICAgICAgICAgXAorICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFJTX1RZUEVfU0lHTkVEXzY0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBSU19UWVBFX1VOU0lHTkVEXzY0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aCgoamxvbmdBcnJheSlkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHRyID0gX2Vudi0+R2V0TG9uZ0FycmF5RWxlbWVudHMoKGpsb25nQXJyYXkpZGF0YSwgZmxhZyk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHR5cGVCeXRlcyA9IDg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmbmMoX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2Vudi0+UmVsZWFzZUxvbmdBcnJheUVsZW1lbnRzKChqbG9uZ0FycmF5KWRhdGEsIChqbG9uZyAqKXB0ciwgSk5JX0FCT1JUKTsgICAgICBcCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisKIGNsYXNzIEF1dG9KYXZhU3RyaW5nVG9VVEY4IHsKIHB1YmxpYzoKICAgICBBdXRvSmF2YVN0cmluZ1RvVVRGOChKTklFbnYqIGVudiwganN0cmluZyBzdHIpIDogZkVudihlbnYpLCBmSlN0cihzdHIpIHsKQEAgLTExMyw3ICsxNzAsNyBAQAogCiBzdGF0aWMgdm9pZCBfbkluaXQoSk5JRW52ICpfZW52LCBqY2xhc3MgX3RoaXMpCiB7Ci0gICAgZ0NvbnRleHRJZCAgICAgICAgICAgICA9IF9lbnYtPkdldEZpZWxkSUQoX3RoaXMsICJtQ29udGV4dCIsICJJIik7CisgICAgZ0NvbnRleHRJZCAgICAgICAgICAgICA9IF9lbnYtPkdldEZpZWxkSUQoX3RoaXMsICJtQ29udGV4dCIsICJKIik7CiAKICAgICBqY2xhc3MgYml0bWFwQ2xhc3MgPSBfZW52LT5GaW5kQ2xhc3MoImFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwIik7CiAgICAgZ05hdGl2ZUJpdG1hcElEID0gX2Vudi0+R2V0RmllbGRJRChiaXRtYXBDbGFzcywgIm1OYXRpdmVCaXRtYXAiLCAiSSIpOwpAQCAtMTIyLDI4ICsxNzksMjggQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgdm9pZAotbkNvbnRleHRGaW5pc2goSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uKQorbkNvbnRleHRGaW5pc2goSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24pCiB7CiAgICAgTE9HX0FQSSgibkNvbnRleHRGaW5pc2gsIGNvbiglcCkiLCBjb24pOwotICAgIHJzQ29udGV4dEZpbmlzaChjb24pOworICAgIHJzQ29udGV4dEZpbmlzaCgoUnNDb250ZXh0KWNvbik7CiB9CiAKIHN0YXRpYyB2b2lkCi1uQXNzaWduTmFtZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgb2JqLCBqYnl0ZUFycmF5IHN0cikKK25Bc3NpZ25OYW1lKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBvYmosIGpieXRlQXJyYXkgc3RyKQogewogICAgIExPR19BUEkoIm5Bc3NpZ25OYW1lLCBjb24oJXApLCBvYmooJXApIiwgY29uLCAodm9pZCAqKW9iaik7CiAgICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChzdHIpOwogICAgIGpieXRlICogY3B0ciA9IChqYnl0ZSAqKSBfZW52LT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKHN0ciwgMCk7Ci0gICAgcnNBc3NpZ25OYW1lKGNvbiwgKHZvaWQgKilvYmosIChjb25zdCBjaGFyICopY3B0ciwgbGVuKTsKKyAgICByc0Fzc2lnbk5hbWUoKFJzQ29udGV4dCljb24sICh2b2lkICopb2JqLCAoY29uc3QgY2hhciAqKWNwdHIsIGxlbik7CiAgICAgX2Vudi0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoc3RyLCBjcHRyLCBKTklfQUJPUlQpOwogfQogCiBzdGF0aWMganN0cmluZwotbkdldE5hbWUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IG9iaikKK25HZXROYW1lKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBvYmopCiB7CiAgICAgTE9HX0FQSSgibkdldE5hbWUsIGNvbiglcCksIG9iaiglcCkiLCBjb24sICh2b2lkICopb2JqKTsKICAgICBjb25zdCBjaGFyICpuYW1lID0gTlVMTDsKLSAgICByc2FHZXROYW1lKGNvbiwgKHZvaWQgKilvYmosICZuYW1lKTsKKyAgICByc2FHZXROYW1lKChSc0NvbnRleHQpY29uLCAodm9pZCAqKW9iaiwgJm5hbWUpOwogICAgIGlmKG5hbWUgPT0gTlVMTCB8fCBzdHJsZW4obmFtZSkgPT0gMCkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xNTEsMTUgKzIwOCwxNSBAQAogfQogCiBzdGF0aWMgdm9pZAotbk9iakRlc3Ryb3koSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IG9iaikKK25PYmpEZXN0cm95KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBvYmopCiB7CiAgICAgTE9HX0FQSSgibk9iakRlc3Ryb3ksIGNvbiglcCkgb2JqKCVwKSIsIGNvbiwgKHZvaWQgKilvYmopOwotICAgIHJzT2JqRGVzdHJveShjb24sICh2b2lkICopb2JqKTsKKyAgICByc09iakRlc3Ryb3koKFJzQ29udGV4dCljb24sICh2b2lkICopb2JqKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBqaW50CitzdGF0aWMgamxvbmcKIG5EZXZpY2VDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzKQogewogICAgIExPR19BUEkoIm5EZXZpY2VDcmVhdGUiKTsKQEAgLTE4MCwxNCArMjM3LDE0IEBACiAgICAgcmV0dXJuIHJzRGV2aWNlU2V0Q29uZmlnKChSc0RldmljZSlkZXYsIChSc0RldmljZVBhcmFtKXAsIHZhbHVlKTsKIH0KIAotc3RhdGljIGppbnQKK3N0YXRpYyBqbG9uZwogbkNvbnRleHRDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IGRldiwgamludCB2ZXIsIGppbnQgc2RrVmVyLCBqaW50IGN0KQogewogICAgIExPR19BUEkoIm5Db250ZXh0Q3JlYXRlIik7CiAgICAgcmV0dXJuIChqaW50KXJzQ29udGV4dENyZWF0ZSgoUnNEZXZpY2UpZGV2LCB2ZXIsIHNka1ZlciwgKFJzQ29udGV4dFR5cGUpY3QsIDApOwogfQogCi1zdGF0aWMgamludAorc3RhdGljIGpsb25nCiBuQ29udGV4dENyZWF0ZUdMKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBkZXYsIGppbnQgdmVyLCBqaW50IHNka1ZlciwKICAgICAgICAgICAgICAgICAgaW50IGNvbG9yTWluLCBpbnQgY29sb3JQcmVmLAogICAgICAgICAgICAgICAgICBpbnQgYWxwaGFNaW4sIGludCBhbHBoYVByZWYsCkBAIC0yMTIsMTYgKzI2OSwxNiBAQAogfQogCiBzdGF0aWMgdm9pZAotbkNvbnRleHRTZXRQcmlvcml0eShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgcCkKK25Db250ZXh0U2V0UHJpb3JpdHkoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnQgcCkKIHsKICAgICBMT0dfQVBJKCJDb250ZXh0U2V0UHJpb3JpdHksIGNvbiglcCksIHByaW9yaXR5KCVpKSIsIGNvbiwgcCk7Ci0gICAgcnNDb250ZXh0U2V0UHJpb3JpdHkoY29uLCBwKTsKKyAgICByc0NvbnRleHRTZXRQcmlvcml0eSgoUnNDb250ZXh0KWNvbiwgcCk7CiB9CiAKIAogCiBzdGF0aWMgdm9pZAotbkNvbnRleHRTZXRTdXJmYWNlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCB3aWR0aCwgamludCBoZWlnaHQsIGpvYmplY3Qgd25kKQorbkNvbnRleHRTZXRTdXJmYWNlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqaW50IHdpZHRoLCBqaW50IGhlaWdodCwgam9iamVjdCB3bmQpCiB7CiAgICAgTE9HX0FQSSgibkNvbnRleHRTZXRTdXJmYWNlLCBjb24oJXApLCB3aWR0aCglaSksIGhlaWdodCglaSksIHN1cmZhY2UoJXApIiwgY29uLCB3aWR0aCwgaGVpZ2h0LCAoU3VyZmFjZSAqKXduZCk7CiAKQEAgLTIzMiw0NyArMjg5LDQ3IEBACiAgICAgICAgIHdpbmRvdyA9IGFuZHJvaWRfdmlld19TdXJmYWNlX2dldE5hdGl2ZVdpbmRvdyhfZW52LCB3bmQpLmdldCgpOwogICAgIH0KIAotICAgIHJzQ29udGV4dFNldFN1cmZhY2UoY29uLCB3aWR0aCwgaGVpZ2h0LCB3aW5kb3cpOworICAgIHJzQ29udGV4dFNldFN1cmZhY2UoKFJzQ29udGV4dCljb24sIHdpZHRoLCBoZWlnaHQsIHdpbmRvdyk7CiB9CiAKIHN0YXRpYyB2b2lkCi1uQ29udGV4dERlc3Ryb3koSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uKQorbkNvbnRleHREZXN0cm95KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uKQogewogICAgIExPR19BUEkoIm5Db250ZXh0RGVzdHJveSwgY29uKCVwKSIsIGNvbik7Ci0gICAgcnNDb250ZXh0RGVzdHJveShjb24pOworICAgIHJzQ29udGV4dERlc3Ryb3koKFJzQ29udGV4dCljb24pOwogfQogCiBzdGF0aWMgdm9pZAotbkNvbnRleHREdW1wKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBiaXRzKQorbkNvbnRleHREdW1wKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqaW50IGJpdHMpCiB7CiAgICAgTE9HX0FQSSgibkNvbnRleHREdW1wLCBjb24oJXApICBiaXRzKCVpKSIsIChSc0NvbnRleHQpY29uLCBiaXRzKTsKICAgICByc0NvbnRleHREdW1wKChSc0NvbnRleHQpY29uLCBiaXRzKTsKIH0KIAogc3RhdGljIHZvaWQKLW5Db250ZXh0UGF1c2UoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uKQorbkNvbnRleHRQYXVzZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbikKIHsKICAgICBMT0dfQVBJKCJuQ29udGV4dFBhdXNlLCBjb24oJXApIiwgY29uKTsKLSAgICByc0NvbnRleHRQYXVzZShjb24pOworICAgIHJzQ29udGV4dFBhdXNlKChSc0NvbnRleHQpY29uKTsKIH0KIAogc3RhdGljIHZvaWQKLW5Db250ZXh0UmVzdW1lKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbikKK25Db250ZXh0UmVzdW1lKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uKQogewogICAgIExPR19BUEkoIm5Db250ZXh0UmVzdW1lLCBjb24oJXApIiwgY29uKTsKLSAgICByc0NvbnRleHRSZXN1bWUoY29uKTsKKyAgICByc0NvbnRleHRSZXN1bWUoKFJzQ29udGV4dCljb24pOwogfQogCiAKIHN0YXRpYyBqc3RyaW5nCi1uQ29udGV4dEdldEVycm9yTWVzc2FnZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24pCituQ29udGV4dEdldEVycm9yTWVzc2FnZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbikKIHsKICAgICBMT0dfQVBJKCJuQ29udGV4dEdldEVycm9yTWVzc2FnZSwgY29uKCVwKSIsIGNvbik7CiAgICAgY2hhciBidWZbMTAyNF07CiAKICAgICBzaXplX3QgcmVjZWl2ZUxlbjsKICAgICB1aW50MzJfdCBzdWJJRDsKLSAgICBpbnQgaWQgPSByc0NvbnRleHRHZXRNZXNzYWdlKGNvbiwKKyAgICBpbnQgaWQgPSByc0NvbnRleHRHZXRNZXNzYWdlKChSc0NvbnRleHQpY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWNlaXZlTGVuLCBzaXplb2YocmVjZWl2ZUxlbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3ViSUQsIHNpemVvZihzdWJJRCkpOwpAQCAtMjgzLDE0ICszNDAsMTQgQEAKIH0KIAogc3RhdGljIGppbnQKLW5Db250ZXh0R2V0VXNlck1lc3NhZ2UoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50QXJyYXkgZGF0YSkKK25Db250ZXh0R2V0VXNlck1lc3NhZ2UoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnRBcnJheSBkYXRhKQogewogICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7CiAgICAgTE9HX0FQSSgibkNvbnRleHRHZXRNZXNzYWdlLCBjb24oJXApLCBsZW4oJWkpIiwgY29uLCBsZW4pOwogICAgIGppbnQgKnB0ciA9IF9lbnYtPkdldEludEFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7CiAgICAgc2l6ZV90IHJlY2VpdmVMZW47CiAgICAgdWludDMyX3Qgc3ViSUQ7Ci0gICAgaW50IGlkID0gcnNDb250ZXh0R2V0TWVzc2FnZShjb24sCisgICAgaW50IGlkID0gcnNDb250ZXh0R2V0TWVzc2FnZSgoUnNDb250ZXh0KWNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciwgbGVuICogNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWNlaXZlTGVuLCBzaXplb2YocmVjZWl2ZUxlbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3ViSUQsIHNpemVvZihzdWJJRCkpOwpAQCAtMzAyLDEzICszNTksMTMgQEAKIH0KIAogc3RhdGljIGppbnQKLW5Db250ZXh0UGVla01lc3NhZ2UoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50QXJyYXkgYXV4RGF0YSkKK25Db250ZXh0UGVla01lc3NhZ2UoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnRBcnJheSBhdXhEYXRhKQogewogICAgIExPR19BUEkoIm5Db250ZXh0UGVla01lc3NhZ2UsIGNvbiglcCkiLCBjb24pOwogICAgIGppbnQgKmF1eERhdGFQdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGF1eERhdGEsIE5VTEwpOwogICAgIHNpemVfdCByZWNlaXZlTGVuOwogICAgIHVpbnQzMl90IHN1YklEOwotICAgIGludCBpZCA9IHJzQ29udGV4dFBlZWtNZXNzYWdlKGNvbiwgJnJlY2VpdmVMZW4sIHNpemVvZihyZWNlaXZlTGVuKSwKKyAgICBpbnQgaWQgPSByc0NvbnRleHRQZWVrTWVzc2FnZSgoUnNDb250ZXh0KWNvbiwgJnJlY2VpdmVMZW4sIHNpemVvZihyZWNlaXZlTGVuKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3ViSUQsIHNpemVvZihzdWJJRCkpOwogICAgIGF1eERhdGFQdHJbMF0gPSAoamludClzdWJJRDsKICAgICBhdXhEYXRhUHRyWzFdID0gKGppbnQpcmVjZWl2ZUxlbjsKQEAgLTMxNiwyMCArMzczLDIwIEBACiAgICAgcmV0dXJuIGlkOwogfQogCi1zdGF0aWMgdm9pZCBuQ29udGV4dEluaXRUb0NsaWVudChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24pCitzdGF0aWMgdm9pZCBuQ29udGV4dEluaXRUb0NsaWVudChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbikKIHsKICAgICBMT0dfQVBJKCJuQ29udGV4dEluaXRUb0NsaWVudCwgY29uKCVwKSIsIGNvbik7Ci0gICAgcnNDb250ZXh0SW5pdFRvQ2xpZW50KGNvbik7CisgICAgcnNDb250ZXh0SW5pdFRvQ2xpZW50KChSc0NvbnRleHQpY29uKTsKIH0KIAotc3RhdGljIHZvaWQgbkNvbnRleHREZWluaXRUb0NsaWVudChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24pCitzdGF0aWMgdm9pZCBuQ29udGV4dERlaW5pdFRvQ2xpZW50KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uKQogewogICAgIExPR19BUEkoIm5Db250ZXh0RGVpbml0VG9DbGllbnQsIGNvbiglcCkiLCBjb24pOwotICAgIHJzQ29udGV4dERlaW5pdFRvQ2xpZW50KGNvbik7CisgICAgcnNDb250ZXh0RGVpbml0VG9DbGllbnQoKFJzQ29udGV4dCljb24pOwogfQogCiBzdGF0aWMgdm9pZAotbkNvbnRleHRTZW5kTWVzc2FnZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgaWQsIGppbnRBcnJheSBkYXRhKQorbkNvbnRleHRTZW5kTWVzc2FnZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamludCBpZCwgamludEFycmF5IGRhdGEpCiB7CiAgICAgamludCAqcHRyID0gTlVMTDsKICAgICBqaW50IGxlbiA9IDA7CkBAIC0zMzgsNyArMzk1LDcgQEAKICAgICAgICAgamludCAqcHRyID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKICAgICB9CiAgICAgTE9HX0FQSSgibkNvbnRleHRTZW5kTWVzc2FnZSwgY29uKCVwKSwgaWQoJWkpLCBsZW4oJWkpIiwgY29uLCBpZCwgbGVuKTsKLSAgICByc0NvbnRleHRTZW5kTWVzc2FnZShjb24sIGlkLCAoY29uc3QgdWludDhfdCAqKXB0ciwgbGVuICogc2l6ZW9mKGludCkpOworICAgIHJzQ29udGV4dFNlbmRNZXNzYWdlKChSc0NvbnRleHQpY29uLCBpZCwgKGNvbnN0IHVpbnQ4X3QgKilwdHIsIGxlbiAqIHNpemVvZihpbnQpKTsKICAgICBpZiAoZGF0YSkgewogICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7CiAgICAgfQpAQCAtMzQ2LDE1ICs0MDMsMTUgQEAKIAogCiAKLXN0YXRpYyBqaW50Ci1uRWxlbWVudENyZWF0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgdHlwZSwgamludCBraW5kLCBqYm9vbGVhbiBub3JtLCBqaW50IHNpemUpCitzdGF0aWMgamxvbmcKK25FbGVtZW50Q3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyB0eXBlLCBqaW50IGtpbmQsIGpib29sZWFuIG5vcm0sIGppbnQgc2l6ZSkKIHsKICAgICBMT0dfQVBJKCJuRWxlbWVudENyZWF0ZSwgY29uKCVwKSwgdHlwZSglaSksIGtpbmQoJWkpLCBub3JtKCVpKSwgc2l6ZSglaSkiLCBjb24sIHR5cGUsIGtpbmQsIG5vcm0sIHNpemUpOwotICAgIHJldHVybiAoamludClyc0VsZW1lbnRDcmVhdGUoY29uLCAoUnNEYXRhVHlwZSl0eXBlLCAoUnNEYXRhS2luZClraW5kLCBub3JtLCBzaXplKTsKKyAgICByZXR1cm4gKGpsb25nKXJzRWxlbWVudENyZWF0ZSgoUnNDb250ZXh0KWNvbiwgKFJzRGF0YVR5cGUpdHlwZSwgKFJzRGF0YUtpbmQpa2luZCwgbm9ybSwgc2l6ZSk7CiB9CiAKLXN0YXRpYyBqaW50Ci1uRWxlbWVudENyZWF0ZTIoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLAorc3RhdGljIGpsb25nCituRWxlbWVudENyZWF0ZTIoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sCiAgICAgICAgICAgICAgICAgamludEFycmF5IF9pZHMsIGpvYmplY3RBcnJheSBfbmFtZXMsIGppbnRBcnJheSBfYXJyYXlTaXplcykKIHsKICAgICBpbnQgZmllbGRDb3VudCA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKF9pZHMpOwpAQCAtMzY4LDcgKzQyNSw3IEBACiAgICAgY29uc3QgY2hhciAqKm5hbWVBcnJheSA9IG5hbWVzLmNfc3RyKCk7CiAgICAgc2l6ZV90ICpzaXplQXJyYXkgPSBuYW1lcy5jX3N0cl9sZW4oKTsKIAotICAgIGppbnQgaWQgPSAoamludClyc0VsZW1lbnRDcmVhdGUyKGNvbiwKKyAgICBqbG9uZyBpZCA9IChqbG9uZylyc0VsZW1lbnRDcmVhdGUyKChSc0NvbnRleHQpY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc0VsZW1lbnQgKilpZHMsIGZpZWxkQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZUFycmF5LCBmaWVsZENvdW50ICogc2l6ZW9mKHNpemVfdCksICBzaXplQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVpbnQzMl90ICopYXJyYXlTaXplcywgZmllbGRDb3VudCk7CkBAIC0zNzksNyArNDM2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLW5FbGVtZW50R2V0TmF0aXZlRGF0YShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgaWQsIGppbnRBcnJheSBfZWxlbWVudERhdGEpCituRWxlbWVudEdldE5hdGl2ZURhdGEoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIGlkLCBqaW50QXJyYXkgX2VsZW1lbnREYXRhKQogewogICAgIGludCBkYXRhU2l6ZSA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKF9lbGVtZW50RGF0YSk7CiAgICAgTE9HX0FQSSgibkVsZW1lbnRHZXROYXRpdmVEYXRhLCBjb24oJXApIiwgY29uKTsKQEAgLTM4OCw3ICs0NDUsNyBAQAogICAgIGFzc2VydChkYXRhU2l6ZSA9PSA1KTsKIAogICAgIHVpbnQzMl90IGVsZW1lbnREYXRhWzVdOwotICAgIHJzYUVsZW1lbnRHZXROYXRpdmVEYXRhKGNvbiwgKFJzRWxlbWVudClpZCwgZWxlbWVudERhdGEsIGRhdGFTaXplKTsKKyAgICByc2FFbGVtZW50R2V0TmF0aXZlRGF0YSgoUnNDb250ZXh0KWNvbiwgKFJzRWxlbWVudClpZCwgZWxlbWVudERhdGEsIGRhdGFTaXplKTsKIAogICAgIGZvcihqaW50IGkgPSAwOyBpIDwgZGF0YVNpemU7IGkgKyspIHsKICAgICAgICAgX2Vudi0+U2V0SW50QXJyYXlSZWdpb24oX2VsZW1lbnREYXRhLCBpLCAxLCAoY29uc3QgamludCopJmVsZW1lbnREYXRhW2ldKTsKQEAgLTM5Nyw3ICs0NTQsNyBAQAogCiAKIHN0YXRpYyB2b2lkCi1uRWxlbWVudEdldFN1YkVsZW1lbnRzKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBpZCwKK25FbGVtZW50R2V0U3ViRWxlbWVudHMoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIGlkLAogICAgICAgICAgICAgICAgICAgICAgICBqaW50QXJyYXkgX0lEcywKICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdEFycmF5IF9uYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgamludEFycmF5IF9hcnJheVNpemVzKQpAQCAtNDA5LDcgKzQ2Niw3IEBACiAgICAgY29uc3QgY2hhciAqKm5hbWVzID0gKGNvbnN0IGNoYXIgKiopbWFsbG9jKCh1aW50MzJfdClkYXRhU2l6ZSAqIHNpemVvZihjb25zdCBjaGFyICopKTsKICAgICB1aW50MzJfdCAqYXJyYXlTaXplcyA9ICh1aW50MzJfdCAqKW1hbGxvYygodWludDMyX3QpZGF0YVNpemUgKiBzaXplb2YodWludDMyX3QpKTsKIAotICAgIHJzYUVsZW1lbnRHZXRTdWJFbGVtZW50cyhjb24sIChSc0VsZW1lbnQpaWQsIGlkcywgbmFtZXMsIGFycmF5U2l6ZXMsICh1aW50MzJfdClkYXRhU2l6ZSk7CisgICAgcnNhRWxlbWVudEdldFN1YkVsZW1lbnRzKChSc0NvbnRleHQpY29uLCAoUnNFbGVtZW50KWlkLCBpZHMsIG5hbWVzLCBhcnJheVNpemVzLCAodWludDMyX3QpZGF0YVNpemUpOwogCiAgICAgZm9yKGppbnQgaSA9IDA7IGkgPCBkYXRhU2l6ZTsgaSsrKSB7CiAgICAgICAgIF9lbnYtPlNldE9iamVjdEFycmF5RWxlbWVudChfbmFtZXMsIGksIF9lbnYtPk5ld1N0cmluZ1VURihuYW1lc1tpXSkpOwpAQCAtNDI0LDE5ICs0ODEsMTggQEAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIGludAotblR5cGVDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBSc0VsZW1lbnQgZWlkLAorc3RhdGljIGpsb25nCituVHlwZUNyZWF0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgZWlkLAogICAgICAgICAgICAgamludCBkaW14LCBqaW50IGRpbXksIGppbnQgZGlteiwgamJvb2xlYW4gbWlwcywgamJvb2xlYW4gZmFjZXMsIGppbnQgeXV2KQogewogICAgIExPR19BUEkoIm5UeXBlQ3JlYXRlLCBjb24oJXApIGVpZCglcCksIHgoJWkpLCB5KCVpKSwgeiglaSksIG1pcHMoJWkpLCBmYWNlcyglaSksIHl1diglaSkiLAogICAgICAgICAgICAgY29uLCBlaWQsIGRpbXgsIGRpbXksIGRpbXosIG1pcHMsIGZhY2VzLCB5dXYpOwogCi0gICAgamludCBpZCA9IChqaW50KXJzVHlwZUNyZWF0ZShjb24sIChSc0VsZW1lbnQpZWlkLCBkaW14LCBkaW15LCBkaW16LCBtaXBzLCBmYWNlcywgeXV2KTsKLSAgICByZXR1cm4gKGppbnQpaWQ7CisgICAgcmV0dXJuIChqbG9uZylyc1R5cGVDcmVhdGUoKFJzQ29udGV4dCljb24sIChSc0VsZW1lbnQpZWlkLCBkaW14LCBkaW15LCBkaW16LCBtaXBzLCBmYWNlcywgeXV2KTsKIH0KIAogc3RhdGljIHZvaWQKLW5UeXBlR2V0TmF0aXZlRGF0YShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgaWQsIGppbnRBcnJheSBfdHlwZURhdGEpCituVHlwZUdldE5hdGl2ZURhdGEoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIGlkLCBqaW50QXJyYXkgX3R5cGVEYXRhKQogewogICAgIC8vIFdlIGFyZSBwYWNraW5nIDYgaXRlbXM6IG1EaW1YOyBtRGltWTsgbURpbVo7CiAgICAgLy8gbURpbUxPRDsgbURpbUZhY2VzOyBtRWxlbWVudDsgaW50byB0eXBlRGF0YQpAQCAtNDQ2LDcgKzUwMiw3IEBACiAgICAgTE9HX0FQSSgiblR5cGVDcmVhdGUsIGNvbiglcCkiLCBjb24pOwogCiAgICAgdWludDMyX3QgdHlwZURhdGFbNl07Ci0gICAgcnNhVHlwZUdldE5hdGl2ZURhdGEoY29uLCAoUnNUeXBlKWlkLCB0eXBlRGF0YSwgNik7CisgICAgcnNhVHlwZUdldE5hdGl2ZURhdGEoKFJzQ29udGV4dCljb24sIChSc1R5cGUpaWQsIHR5cGVEYXRhLCA2KTsKIAogICAgIGZvcihqaW50IGkgPSAwOyBpIDwgZWxlbWVudENvdW50OyBpICsrKSB7CiAgICAgICAgIF9lbnYtPlNldEludEFycmF5UmVnaW9uKF90eXBlRGF0YSwgaSwgMSwgKGNvbnN0IGppbnQqKSZ0eXBlRGF0YVtpXSk7CkBAIC00NTUsMjYgKzUxMSwyNiBAQAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgamludAotbkFsbG9jYXRpb25DcmVhdGVUeXBlZChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgdHlwZSwgamludCBtaXBzLCBqaW50IHVzYWdlLCBqaW50IHBvaW50ZXIpCitzdGF0aWMgamxvbmcKK25BbGxvY2F0aW9uQ3JlYXRlVHlwZWQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHR5cGUsIGppbnQgbWlwcywgamludCB1c2FnZSwgamludCBwb2ludGVyKQogewogICAgIExPR19BUEkoIm5BbGxvY2F0aW9uQ3JlYXRlVHlwZWQsIGNvbiglcCksIHR5cGUoJXApLCBtaXAoJWkpLCB1c2FnZSglaSksIHB0ciglcCkiLCBjb24sIChSc0VsZW1lbnQpdHlwZSwgbWlwcywgdXNhZ2UsICh2b2lkICopcG9pbnRlcik7Ci0gICAgcmV0dXJuIChqaW50KSByc0FsbG9jYXRpb25DcmVhdGVUeXBlZChjb24sIChSc1R5cGUpdHlwZSwgKFJzQWxsb2NhdGlvbk1pcG1hcENvbnRyb2wpbWlwcywgKHVpbnQzMl90KXVzYWdlLCAodWludDMyX3QpcG9pbnRlcik7CisgICAgcmV0dXJuIChqaW50KSByc0FsbG9jYXRpb25DcmVhdGVUeXBlZCgoUnNDb250ZXh0KWNvbiwgKFJzVHlwZSl0eXBlLCAoUnNBbGxvY2F0aW9uTWlwbWFwQ29udHJvbCltaXBzLCAodWludDMyX3QpdXNhZ2UsICh1aW50MzJfdClwb2ludGVyKTsKIH0KIAogc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uU3luY0FsbChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYSwgamludCBiaXRzKQorbkFsbG9jYXRpb25TeW5jQWxsKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBhLCBqaW50IGJpdHMpCiB7CiAgICAgTE9HX0FQSSgibkFsbG9jYXRpb25TeW5jQWxsLCBjb24oJXApLCBhKCVwKSwgYml0cygweCUwOHgpIiwgY29uLCAoUnNBbGxvY2F0aW9uKWEsIGJpdHMpOwotICAgIHJzQWxsb2NhdGlvblN5bmNBbGwoY29uLCAoUnNBbGxvY2F0aW9uKWEsIChSc0FsbG9jYXRpb25Vc2FnZVR5cGUpYml0cyk7CisgICAgcnNBbGxvY2F0aW9uU3luY0FsbCgoUnNDb250ZXh0KWNvbiwgKFJzQWxsb2NhdGlvbilhLCAoUnNBbGxvY2F0aW9uVXNhZ2VUeXBlKWJpdHMpOwogfQogCiBzdGF0aWMgam9iamVjdAotbkFsbG9jYXRpb25HZXRTdXJmYWNlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhKQorbkFsbG9jYXRpb25HZXRTdXJmYWNlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBhKQogewogICAgIExPR19BUEkoIm5BbGxvY2F0aW9uR2V0U3VyZmFjZSwgY29uKCVwKSwgYSglcCkiLCBjb24sIChSc0FsbG9jYXRpb24pYSk7CiAKLSAgICBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyICp2ID0gKElHcmFwaGljQnVmZmVyUHJvZHVjZXIgKilyc0FsbG9jYXRpb25HZXRTdXJmYWNlKGNvbiwgKFJzQWxsb2NhdGlvbilhKTsKKyAgICBJR3JhcGhpY0J1ZmZlclByb2R1Y2VyICp2ID0gKElHcmFwaGljQnVmZmVyUHJvZHVjZXIgKilyc0FsbG9jYXRpb25HZXRTdXJmYWNlKChSc0NvbnRleHQpY29uLCAoUnNBbGxvY2F0aW9uKWEpOwogICAgIHNwPElHcmFwaGljQnVmZmVyUHJvZHVjZXI+IGJwID0gdjsKICAgICB2LT5kZWNTdHJvbmcoTlVMTCk7CiAKQEAgLTQ4Myw3ICs1MzksNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbkFsbG9jYXRpb25TZXRTdXJmYWNlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgUnNBbGxvY2F0aW9uIGFsbG9jLCBqb2JqZWN0IHN1cikKK25BbGxvY2F0aW9uU2V0U3VyZmFjZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgYWxsb2MsIGpvYmplY3Qgc3VyKQogewogICAgIExPR19BUEkoIm5BbGxvY2F0aW9uU2V0U3VyZmFjZSwgY29uKCVwKSwgYWxsb2MoJXApLCBzdXJmYWNlKCVwKSIsCiAgICAgICAgICAgICBjb24sIGFsbG9jLCAoU3VyZmFjZSAqKXN1cik7CkBAIC00OTMsMzMgKzU0OSwzMyBAQAogICAgICAgICBzID0gYW5kcm9pZF92aWV3X1N1cmZhY2VfZ2V0U3VyZmFjZShfZW52LCBzdXIpOwogICAgIH0KIAotICAgIHJzQWxsb2NhdGlvblNldFN1cmZhY2UoY29uLCBhbGxvYywgc3RhdGljX2Nhc3Q8QU5hdGl2ZVdpbmRvdyAqPihzLmdldCgpKSk7CisgICAgcnNBbGxvY2F0aW9uU2V0U3VyZmFjZSgoUnNDb250ZXh0KWNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgc3RhdGljX2Nhc3Q8QU5hdGl2ZVdpbmRvdyAqPihzLmdldCgpKSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbklvU2VuZChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIFJzQWxsb2NhdGlvbiBhbGxvYykKK25BbGxvY2F0aW9uSW9TZW5kKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBhbGxvYykKIHsKICAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbklvU2VuZCwgY29uKCVwKSwgYWxsb2MoJXApIiwgY29uLCBhbGxvYyk7Ci0gICAgcnNBbGxvY2F0aW9uSW9TZW5kKGNvbiwgYWxsb2MpOworICAgIHJzQWxsb2NhdGlvbklvU2VuZCgoUnNDb250ZXh0KWNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYyk7CiB9CiAKIHN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbklvUmVjZWl2ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIFJzQWxsb2NhdGlvbiBhbGxvYykKK25BbGxvY2F0aW9uSW9SZWNlaXZlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBhbGxvYykKIHsKICAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbklvUmVjZWl2ZSwgY29uKCVwKSwgYWxsb2MoJXApIiwgY29uLCBhbGxvYyk7Ci0gICAgcnNBbGxvY2F0aW9uSW9SZWNlaXZlKGNvbiwgYWxsb2MpOworICAgIHJzQWxsb2NhdGlvbklvUmVjZWl2ZSgoUnNDb250ZXh0KWNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYyk7CiB9CiAKIAogc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uR2VuZXJhdGVNaXBtYXBzKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhbGxvYykKK25BbGxvY2F0aW9uR2VuZXJhdGVNaXBtYXBzKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBhbGxvYykKIHsKICAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcywgY29uKCVwKSwgYSglcCkiLCBjb24sIChSc0FsbG9jYXRpb24pYWxsb2MpOwotICAgIHJzQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyhjb24sIChSc0FsbG9jYXRpb24pYWxsb2MpOworICAgIHJzQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcygoUnNDb250ZXh0KWNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYyk7CiB9CiAKLXN0YXRpYyBpbnQKLW5BbGxvY2F0aW9uQ3JlYXRlRnJvbUJpdG1hcChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgdHlwZSwgamludCBtaXAsIGpvYmplY3QgamJpdG1hcCwgamludCB1c2FnZSkKK3N0YXRpYyBqbG9uZworbkFsbG9jYXRpb25DcmVhdGVGcm9tQml0bWFwKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyB0eXBlLCBqaW50IG1pcCwgam9iamVjdCBqYml0bWFwLCBqaW50IHVzYWdlKQogewogICAgIFNrQml0bWFwIGNvbnN0ICogbmF0aXZlQml0bWFwID0KICAgICAgICAgICAgIChTa0JpdG1hcCBjb25zdCAqKV9lbnYtPkdldEludEZpZWxkKGpiaXRtYXAsIGdOYXRpdmVCaXRtYXBJRCk7CkBAIC01MjcsMTUgKzU4MywxNSBAQAogCiAgICAgYml0bWFwLmxvY2tQaXhlbHMoKTsKICAgICBjb25zdCB2b2lkKiBwdHIgPSBiaXRtYXAuZ2V0UGl4ZWxzKCk7Ci0gICAgamludCBpZCA9IChqaW50KXJzQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAoY29uLAorICAgIGpsb25nIGlkID0gKGpsb25nKXJzQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAoKFJzQ29udGV4dCljb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc1R5cGUpdHlwZSwgKFJzQWxsb2NhdGlvbk1pcG1hcENvbnRyb2wpbWlwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIsIGJpdG1hcC5nZXRTaXplKCksIHVzYWdlKTsKICAgICBiaXRtYXAudW5sb2NrUGl4ZWxzKCk7CiAgICAgcmV0dXJuIGlkOwogfQogCi1zdGF0aWMgaW50Ci1uQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcEJhY2tlZEFsbG9jYXRpb24oSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHR5cGUsIGppbnQgbWlwLCBqb2JqZWN0IGpiaXRtYXAsIGppbnQgdXNhZ2UpCitzdGF0aWMgamxvbmcKK25BbGxvY2F0aW9uQ3JlYXRlQml0bWFwQmFja2VkQWxsb2NhdGlvbihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgdHlwZSwgamludCBtaXAsIGpvYmplY3QgamJpdG1hcCwgamludCB1c2FnZSkKIHsKICAgICBTa0JpdG1hcCBjb25zdCAqIG5hdGl2ZUJpdG1hcCA9CiAgICAgICAgICAgICAoU2tCaXRtYXAgY29uc3QgKilfZW52LT5HZXRJbnRGaWVsZChqYml0bWFwLCBnTmF0aXZlQml0bWFwSUQpOwpAQCAtNTQzLDE1ICs1OTksMTUgQEAKIAogICAgIGJpdG1hcC5sb2NrUGl4ZWxzKCk7CiAgICAgY29uc3Qgdm9pZCogcHRyID0gYml0bWFwLmdldFBpeGVscygpOwotICAgIGppbnQgaWQgPSAoamludClyc0FsbG9jYXRpb25DcmVhdGVUeXBlZChjb24sCisgICAgamxvbmcgaWQgPSAoamxvbmcpcnNBbGxvY2F0aW9uQ3JlYXRlVHlwZWQoKFJzQ29udGV4dCljb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc1R5cGUpdHlwZSwgKFJzQWxsb2NhdGlvbk1pcG1hcENvbnRyb2wpbWlwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpdXNhZ2UsIChzaXplX3QpcHRyKTsKICAgICBiaXRtYXAudW5sb2NrUGl4ZWxzKCk7CiAgICAgcmV0dXJuIGlkOwogfQogCi1zdGF0aWMgaW50Ci1uQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCB0eXBlLCBqaW50IG1pcCwgam9iamVjdCBqYml0bWFwLCBqaW50IHVzYWdlKQorc3RhdGljIGpsb25nCituQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyB0eXBlLCBqaW50IG1pcCwgam9iamVjdCBqYml0bWFwLCBqaW50IHVzYWdlKQogewogICAgIFNrQml0bWFwIGNvbnN0ICogbmF0aXZlQml0bWFwID0KICAgICAgICAgICAgIChTa0JpdG1hcCBjb25zdCAqKV9lbnYtPkdldEludEZpZWxkKGpiaXRtYXAsIGdOYXRpdmVCaXRtYXBJRCk7CkBAIC01NTksNyArNjE1LDcgQEAKIAogICAgIGJpdG1hcC5sb2NrUGl4ZWxzKCk7CiAgICAgY29uc3Qgdm9pZCogcHRyID0gYml0bWFwLmdldFBpeGVscygpOwotICAgIGppbnQgaWQgPSAoamludClyc0FsbG9jYXRpb25DdWJlQ3JlYXRlRnJvbUJpdG1hcChjb24sCisgICAgamxvbmcgaWQgPSAoamxvbmcpcnNBbGxvY2F0aW9uQ3ViZUNyZWF0ZUZyb21CaXRtYXAoKFJzQ29udGV4dCljb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNUeXBlKXR5cGUsIChSc0FsbG9jYXRpb25NaXBtYXBDb250cm9sKW1pcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciwgYml0bWFwLmdldFNpemUoKSwgdXNhZ2UpOwogICAgIGJpdG1hcC51bmxvY2tQaXhlbHMoKTsKQEAgLTU2Nyw3ICs2MjMsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbkFsbG9jYXRpb25Db3B5RnJvbUJpdG1hcChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGpvYmplY3QgamJpdG1hcCkKK25BbGxvY2F0aW9uQ29weUZyb21CaXRtYXAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIGFsbG9jLCBqb2JqZWN0IGpiaXRtYXApCiB7CiAgICAgU2tCaXRtYXAgY29uc3QgKiBuYXRpdmVCaXRtYXAgPQogICAgICAgICAgICAgKFNrQml0bWFwIGNvbnN0ICopX2Vudi0+R2V0SW50RmllbGQoamJpdG1hcCwgZ05hdGl2ZUJpdG1hcElEKTsKQEAgLTU3NywxNCArNjMzLDE0IEBACiAKICAgICBiaXRtYXAubG9ja1BpeGVscygpOwogICAgIGNvbnN0IHZvaWQqIHB0ciA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKLSAgICByc0FsbG9jYXRpb24yRERhdGEoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCAwLCAwLAorICAgIHJzQWxsb2NhdGlvbjJERGF0YSgoUnNDb250ZXh0KWNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgMCwgUlNfQUxMT0NBVElPTl9DVUJFTUFQX0ZBQ0VfUE9TSVRJVkVfWCwKICAgICAgICAgICAgICAgICAgICAgICAgdywgaCwgcHRyLCBiaXRtYXAuZ2V0U2l6ZSgpLCAwKTsKICAgICBiaXRtYXAudW5sb2NrUGl4ZWxzKCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkNvcHlUb0JpdG1hcChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGpvYmplY3QgamJpdG1hcCkKK25BbGxvY2F0aW9uQ29weVRvQml0bWFwKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBhbGxvYywgam9iamVjdCBqYml0bWFwKQogewogICAgIFNrQml0bWFwIGNvbnN0ICogbmF0aXZlQml0bWFwID0KICAgICAgICAgICAgIChTa0JpdG1hcCBjb25zdCAqKV9lbnYtPkdldEludEZpZWxkKGpiaXRtYXAsIGdOYXRpdmVCaXRtYXBJRCk7CkBAIC01OTIsNyArNjQ4LDcgQEAKIAogICAgIGJpdG1hcC5sb2NrUGl4ZWxzKCk7CiAgICAgdm9pZCogcHRyID0gYml0bWFwLmdldFBpeGVscygpOwotICAgIHJzQWxsb2NhdGlvbkNvcHlUb0JpdG1hcChjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIHB0ciwgYml0bWFwLmdldFNpemUoKSk7CisgICAgcnNBbGxvY2F0aW9uQ29weVRvQml0bWFwKChSc0NvbnRleHQpY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBwdHIsIGJpdG1hcC5nZXRTaXplKCkpOwogICAgIGJpdG1hcC51bmxvY2tQaXhlbHMoKTsKICAgICBiaXRtYXAubm90aWZ5UGl4ZWxzQ2hhbmdlZCgpOwogfQpAQCAtNjA1LDEwNiArNjYxLDQzIEBACiAKIAogc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uRGF0YTFEX2koSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGFsbG9jLCBqaW50IG9mZnNldCwgamludCBsb2QsIGppbnQgY291bnQsIGppbnRBcnJheSBkYXRhLCBpbnQgc2l6ZUJ5dGVzKQorbkFsbG9jYXRpb25EYXRhMUQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIF9hbGxvYywgamludCBvZmZzZXQsIGppbnQgbG9kLAorICAgICAgICAgICAgICAgICAgamludCBjb3VudCwgam9iamVjdCBkYXRhLCBpbnQgc2l6ZUJ5dGVzLCBpbnQgZGF0YVR5cGUpCiB7Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjFERGF0YV9pLCBjb24oJXApLCBhZGFwdGVyKCVwKSwgb2Zmc2V0KCVpKSwgY291bnQoJWkpLCBsZW4oJWkpLCBzaXplQnl0ZXMoJWkpIiwgY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBvZmZzZXQsIGNvdW50LCBsZW4sIHNpemVCeXRlcyk7Ci0gICAgamludCAqcHRyID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICByc0FsbG9jYXRpb24xRERhdGEoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBvZmZzZXQsIGxvZCwgY291bnQsIHB0ciwgc2l6ZUJ5dGVzKTsKLSAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkRhdGExRF9zKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhbGxvYywgamludCBvZmZzZXQsIGppbnQgbG9kLCBqaW50IGNvdW50LCBqc2hvcnRBcnJheSBkYXRhLCBpbnQgc2l6ZUJ5dGVzKQotewotICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7Ci0gICAgTE9HX0FQSSgibkFsbG9jYXRpb24xRERhdGFfcywgY29uKCVwKSwgYWRhcHRlciglcCksIG9mZnNldCglaSksIGNvdW50KCVpKSwgbGVuKCVpKSwgc2l6ZUJ5dGVzKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgb2Zmc2V0LCBjb3VudCwgbGVuLCBzaXplQnl0ZXMpOwotICAgIGpzaG9ydCAqcHRyID0gX2Vudi0+R2V0U2hvcnRBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIHJzQWxsb2NhdGlvbjFERGF0YShjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIG9mZnNldCwgbG9kLCBjb3VudCwgcHRyLCBzaXplQnl0ZXMpOwotICAgIF9lbnYtPlJlbGVhc2VTaG9ydEFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCBKTklfQUJPUlQpOwotfQotCi1zdGF0aWMgdm9pZAotbkFsbG9jYXRpb25EYXRhMURfYihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGppbnQgb2Zmc2V0LCBqaW50IGxvZCwgamludCBjb3VudCwgamJ5dGVBcnJheSBkYXRhLCBpbnQgc2l6ZUJ5dGVzKQotewotICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7Ci0gICAgTE9HX0FQSSgibkFsbG9jYXRpb24xRERhdGFfYiwgY29uKCVwKSwgYWRhcHRlciglcCksIG9mZnNldCglaSksIGNvdW50KCVpKSwgbGVuKCVpKSwgc2l6ZUJ5dGVzKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgb2Zmc2V0LCBjb3VudCwgbGVuLCBzaXplQnl0ZXMpOwotICAgIGpieXRlICpwdHIgPSBfZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICByc0FsbG9jYXRpb24xRERhdGEoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBvZmZzZXQsIGxvZCwgY291bnQsIHB0ciwgc2l6ZUJ5dGVzKTsKLSAgICBfZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCBKTklfQUJPUlQpOwotfQotCi1zdGF0aWMgdm9pZAotbkFsbG9jYXRpb25EYXRhMURfZihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGppbnQgb2Zmc2V0LCBqaW50IGxvZCwgamludCBjb3VudCwgamZsb2F0QXJyYXkgZGF0YSwgaW50IHNpemVCeXRlcykKLXsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uMUREYXRhX2YsIGNvbiglcCksIGFkYXB0ZXIoJXApLCBvZmZzZXQoJWkpLCBjb3VudCglaSksIGxlbiglaSksIHNpemVCeXRlcyglaSkiLCBjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIG9mZnNldCwgY291bnQsIGxlbiwgc2l6ZUJ5dGVzKTsKLSAgICBqZmxvYXQgKnB0ciA9IF9lbnYtPkdldEZsb2F0QXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICByc0FsbG9jYXRpb24xRERhdGEoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBvZmZzZXQsIGxvZCwgY291bnQsIHB0ciwgc2l6ZUJ5dGVzKTsKLSAgICBfZW52LT5SZWxlYXNlRmxvYXRBcnJheUVsZW1lbnRzKGRhdGEsIHB0ciwgSk5JX0FCT1JUKTsKKyAgICBSc0FsbG9jYXRpb24gKmFsbG9jID0gKFJzQWxsb2NhdGlvbiAqKV9hbGxvYzsKKyAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjFERGF0YSwgY29uKCVwKSwgYWRhcHRlciglcCksIG9mZnNldCglaSksIGNvdW50KCVpKSwgbGVuKCVpKSwgc2l6ZUJ5dGVzKCVpKSwgZGF0YVR5cGUoJWkpIiwKKyAgICAgICAgICAgIGNvbiwgYWxsb2MsIG9mZnNldCwgY291bnQsIGxlbiwgc2l6ZUJ5dGVzLCBkYXRhVHlwZSk7CisgICAgUEVSX0FSUkFZX1RZUEUoTlVMTCwgcnNBbGxvY2F0aW9uMUREYXRhLCAoUnNDb250ZXh0KWNvbiwgYWxsb2MsIG9mZnNldCwgbG9kLCBjb3VudCwgcHRyLCBzaXplQnl0ZXMpOwogfQogCiBzdGF0aWMgdm9pZAogLy8gICAgbmF0aXZlIHZvaWQgcnNuQWxsb2NhdGlvbkVsZW1lbnREYXRhMUQoaW50IGNvbiwgaW50IGlkLCBpbnQgeG9mZiwgaW50IGNvbXBJZHgsIGJ5dGVbXSBkLCBpbnQgc2l6ZUJ5dGVzKTsKLW5BbGxvY2F0aW9uRWxlbWVudERhdGExRChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGppbnQgb2Zmc2V0LCBqaW50IGxvZCwgamludCBjb21wSWR4LCBqYnl0ZUFycmF5IGRhdGEsIGludCBzaXplQnl0ZXMpCituQWxsb2NhdGlvbkVsZW1lbnREYXRhMUQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIGFsbG9jLCBqaW50IG9mZnNldCwgamludCBsb2QsIGppbnQgY29tcElkeCwgamJ5dGVBcnJheSBkYXRhLCBpbnQgc2l6ZUJ5dGVzKQogewogICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7CiAgICAgTE9HX0FQSSgibkFsbG9jYXRpb25FbGVtZW50RGF0YTFELCBjb24oJXApLCBhbGxvYyglcCksIG9mZnNldCglaSksIGNvbXAoJWkpLCBsZW4oJWkpLCBzaXplQnl0ZXMoJWkpIiwgY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBvZmZzZXQsIGNvbXBJZHgsIGxlbiwgc2l6ZUJ5dGVzKTsKICAgICBqYnl0ZSAqcHRyID0gX2Vudi0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7Ci0gICAgcnNBbGxvY2F0aW9uMURFbGVtZW50RGF0YShjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIG9mZnNldCwgbG9kLCBwdHIsIHNpemVCeXRlcywgY29tcElkeCk7CisgICAgcnNBbGxvY2F0aW9uMURFbGVtZW50RGF0YSgoUnNDb250ZXh0KWNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgb2Zmc2V0LCBsb2QsIHB0ciwgc2l6ZUJ5dGVzLCBjb21wSWR4KTsKICAgICBfZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCBKTklfQUJPUlQpOwogfQogCiBzdGF0aWMgdm9pZAotbkFsbG9jYXRpb25EYXRhMkRfcyhKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGppbnQgeG9mZiwgamludCB5b2ZmLCBqaW50IGxvZCwgamludCBmYWNlLAotICAgICAgICAgICAgICAgICAgICBqaW50IHcsIGppbnQgaCwganNob3J0QXJyYXkgZGF0YSwgaW50IHNpemVCeXRlcykKK25BbGxvY2F0aW9uRGF0YTJEKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBfYWxsb2MsIGppbnQgeG9mZiwgamludCB5b2ZmLCBqaW50IGxvZCwgamludCBfZmFjZSwKKyAgICAgICAgICAgICAgICAgIGppbnQgdywgamludCBoLCBqb2JqZWN0IGRhdGEsIGludCBzaXplQnl0ZXMsIGludCBkYXRhVHlwZSkKIHsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uMkREYXRhX3MsIGNvbiglcCksIGFkYXB0ZXIoJXApLCB4b2ZmKCVpKSwgeW9mZiglaSksIHcoJWkpLCBoKCVpKSwgbGVuKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgeG9mZiwgeW9mZiwgdywgaCwgbGVuKTsKLSAgICBqc2hvcnQgKnB0ciA9IF9lbnYtPkdldFNob3J0QXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICByc0FsbG9jYXRpb24yRERhdGEoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCB4b2ZmLCB5b2ZmLCBsb2QsIChSc0FsbG9jYXRpb25DdWJlbWFwRmFjZSlmYWNlLCB3LCBoLCBwdHIsIHNpemVCeXRlcywgMCk7Ci0gICAgX2Vudi0+UmVsZWFzZVNob3J0QXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7CisgICAgUnNBbGxvY2F0aW9uICphbGxvYyA9IChSc0FsbG9jYXRpb24gKilfYWxsb2M7CisgICAgUnNBbGxvY2F0aW9uQ3ViZW1hcEZhY2UgZmFjZSA9IChSc0FsbG9jYXRpb25DdWJlbWFwRmFjZSlfZmFjZTsKKyAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjJERGF0YSwgY29uKCVwKSwgYWRhcHRlciglcCksIHhvZmYoJWkpLCB5b2ZmKCVpKSwgdyglaSksIGgoJWkpLCBsZW4oJWkpIHR5cGUoJWkpIiwKKyAgICAgICAgICAgIGNvbiwgYWxsb2MsIHhvZmYsIHlvZmYsIHcsIGgsIHNpemVCeXRlcywgZGF0YVR5cGUpOworICAgIFBFUl9BUlJBWV9UWVBFKE5VTEwsIHJzQWxsb2NhdGlvbjJERGF0YSwgKFJzQ29udGV4dCljb24sIGFsbG9jLCB4b2ZmLCB5b2ZmLCBsb2QsIGZhY2UsIHcsIGgsIHB0ciwgc2l6ZUJ5dGVzLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uRGF0YTJEX2IoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGFsbG9jLCBqaW50IHhvZmYsIGppbnQgeW9mZiwgamludCBsb2QsIGppbnQgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgamludCB3LCBqaW50IGgsIGpieXRlQXJyYXkgZGF0YSwgaW50IHNpemVCeXRlcykKLXsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uMkREYXRhX2IsIGNvbiglcCksIGFkYXB0ZXIoJXApLCB4b2ZmKCVpKSwgeW9mZiglaSksIHcoJWkpLCBoKCVpKSwgbGVuKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgeG9mZiwgeW9mZiwgdywgaCwgbGVuKTsKLSAgICBqYnl0ZSAqcHRyID0gX2Vudi0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7Ci0gICAgcnNBbGxvY2F0aW9uMkREYXRhKGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgeG9mZiwgeW9mZiwgbG9kLCAoUnNBbGxvY2F0aW9uQ3ViZW1hcEZhY2UpZmFjZSwgdywgaCwgcHRyLCBzaXplQnl0ZXMsIDApOwotICAgIF9lbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkRhdGEyRF9pKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhbGxvYywgamludCB4b2ZmLCBqaW50IHlvZmYsIGppbnQgbG9kLCBqaW50IGZhY2UsCi0gICAgICAgICAgICAgICAgICAgIGppbnQgdywgamludCBoLCBqaW50QXJyYXkgZGF0YSwgaW50IHNpemVCeXRlcykKLXsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uMkREYXRhX2ksIGNvbiglcCksIGFkYXB0ZXIoJXApLCB4b2ZmKCVpKSwgeW9mZiglaSksIHcoJWkpLCBoKCVpKSwgbGVuKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgeG9mZiwgeW9mZiwgdywgaCwgbGVuKTsKLSAgICBqaW50ICpwdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIHJzQWxsb2NhdGlvbjJERGF0YShjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIHhvZmYsIHlvZmYsIGxvZCwgKFJzQWxsb2NhdGlvbkN1YmVtYXBGYWNlKWZhY2UsIHcsIGgsIHB0ciwgc2l6ZUJ5dGVzLCAwKTsKLSAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkRhdGEyRF9mKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhbGxvYywgamludCB4b2ZmLCBqaW50IHlvZmYsIGppbnQgbG9kLCBqaW50IGZhY2UsCi0gICAgICAgICAgICAgICAgICAgIGppbnQgdywgamludCBoLCBqZmxvYXRBcnJheSBkYXRhLCBpbnQgc2l6ZUJ5dGVzKQotewotICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7Ci0gICAgTE9HX0FQSSgibkFsbG9jYXRpb24yRERhdGFfaSwgY29uKCVwKSwgYWRhcHRlciglcCksIHhvZmYoJWkpLCB5b2ZmKCVpKSwgdyglaSksIGgoJWkpLCBsZW4oJWkpIiwgY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCB4b2ZmLCB5b2ZmLCB3LCBoLCBsZW4pOwotICAgIGpmbG9hdCAqcHRyID0gX2Vudi0+R2V0RmxvYXRBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIHJzQWxsb2NhdGlvbjJERGF0YShjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIHhvZmYsIHlvZmYsIGxvZCwgKFJzQWxsb2NhdGlvbkN1YmVtYXBGYWNlKWZhY2UsIHcsIGgsIHB0ciwgc2l6ZUJ5dGVzLCAwKTsKLSAgICBfZW52LT5SZWxlYXNlRmxvYXRBcnJheUVsZW1lbnRzKGRhdGEsIHB0ciwgSk5JX0FCT1JUKTsKLX0KLQotc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uRGF0YTJEX2FsbG9jKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgZHN0QWxsb2MsIGppbnQgZHN0WG9mZiwgamludCBkc3RZb2ZmLAorbkFsbG9jYXRpb25EYXRhMkRfYWxsb2MoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sCisgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBkc3RBbGxvYywgamludCBkc3RYb2ZmLCBqaW50IGRzdFlvZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGRzdE1pcCwgamludCBkc3RGYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgamludCB3aWR0aCwgamludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBqaW50IHNyY0FsbG9jLCBqaW50IHNyY1hvZmYsIGppbnQgc3JjWW9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIHNyY0FsbG9jLCBqaW50IHNyY1hvZmYsIGppbnQgc3JjWW9mZiwKICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgc3JjTWlwLCBqaW50IHNyY0ZhY2UpCiB7CiAgICAgTE9HX0FQSSgibkFsbG9jYXRpb24yRERhdGFfcywgY29uKCVwKSwgZHN0QWxsb2MoJXApLCBkc3RYb2ZmKCVpKSwgZHN0WW9mZiglaSksIgpAQCAtNzEzLDcgKzcwNiw3IEBACiAgICAgICAgICAgICBjb24sIChSc0FsbG9jYXRpb24pZHN0QWxsb2MsIGRzdFhvZmYsIGRzdFlvZmYsIGRzdE1pcCwgZHN0RmFjZSwKICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIChSc0FsbG9jYXRpb24pc3JjQWxsb2MsIHNyY1hvZmYsIHNyY1lvZmYsIHNyY01pcCwgc3JjRmFjZSk7CiAKLSAgICByc0FsbG9jYXRpb25Db3B5MkRSYW5nZShjb24sCisgICAgcnNBbGxvY2F0aW9uQ29weTJEUmFuZ2UoKFJzQ29udGV4dCljb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzQWxsb2NhdGlvbilkc3RBbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RYb2ZmLCBkc3RZb2ZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdE1pcCwgZHN0RmFjZSwKQEAgLTcyNCw1NSArNzE3LDIxIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkRhdGEzRF9zKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhbGxvYywgamludCB4b2ZmLCBqaW50IHlvZmYsIGppbnQgem9mZiwgamludCBsb2QsCi0gICAgICAgICAgICAgICAgICAgIGppbnQgdywgamludCBoLCBqaW50IGQsIGpzaG9ydEFycmF5IGRhdGEsIGludCBzaXplQnl0ZXMpCituQWxsb2NhdGlvbkRhdGEzRChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgX2FsbG9jLCBqaW50IHhvZmYsIGppbnQgeW9mZiwgamludCB6b2ZmLCBqaW50IGxvZCwKKyAgICAgICAgICAgICAgICAgICAgamludCB3LCBqaW50IGgsIGppbnQgZCwgam9iamVjdCBkYXRhLCBpbnQgc2l6ZUJ5dGVzLCBpbnQgZGF0YVR5cGUpCiB7Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjNERGF0YV9zLCBjb24oJXApLCBhZGFwdGVyKCVwKSwgeG9mZiglaSksIHlvZmYoJWkpLCB3KCVpKSwgaCglaSksIGxlbiglaSkiLCBjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIHhvZmYsIHlvZmYsIHpvZmYsIHcsIGgsIGQsIGxlbik7Ci0gICAganNob3J0ICpwdHIgPSBfZW52LT5HZXRTaG9ydEFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7Ci0gICAgcnNBbGxvY2F0aW9uM0REYXRhKGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgeG9mZiwgeW9mZiwgem9mZiwgbG9kLCB3LCBoLCBkLCBwdHIsIHNpemVCeXRlcywgMCk7Ci0gICAgX2Vudi0+UmVsZWFzZVNob3J0QXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7CisgICAgUnNBbGxvY2F0aW9uICphbGxvYyA9IChSc0FsbG9jYXRpb24gKilfYWxsb2M7CisgICAgTE9HX0FQSSgibkFsbG9jYXRpb24zRERhdGEsIGNvbiglcCksIGFsbG9jKCVwKSwgeG9mZiglaSksIHlvZmYoJWkpLCB6b2ZmKCVpKSwgbG9kKCVpKSwgdyglaSksIGgoJWkpLCBkKCVpKSwgc2l6ZUJ5dGVzKCVpKSIsCisgICAgICAgICAgICBjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIHhvZmYsIHlvZmYsIHpvZmYsIGxvZCwgdywgaCwgZCwgc2l6ZUJ5dGVzKTsKKyAgICBQRVJfQVJSQVlfVFlQRShOVUxMLCByc0FsbG9jYXRpb24zRERhdGEsIChSc0NvbnRleHQpY29uLCBhbGxvYywgeG9mZiwgeW9mZiwgem9mZiwgbG9kLCB3LCBoLCBkLCBwdHIsIHNpemVCeXRlcywgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkRhdGEzRF9iKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhbGxvYywgamludCB4b2ZmLCBqaW50IHlvZmYsIGppbnQgem9mZiwgamludCBsb2QsCi0gICAgICAgICAgICAgICAgICAgIGppbnQgdywgamludCBoLCBqaW50IGQsIGpieXRlQXJyYXkgZGF0YSwgaW50IHNpemVCeXRlcykKLXsKLSAgICBqaW50IGxlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIExPR19BUEkoIm5BbGxvY2F0aW9uM0REYXRhX2IsIGNvbiglcCksIGFkYXB0ZXIoJXApLCB4b2ZmKCVpKSwgeW9mZiglaSksIHcoJWkpLCBoKCVpKSwgbGVuKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgeG9mZiwgeW9mZiwgem9mZiwgdywgaCwgZCwgbGVuKTsKLSAgICBqYnl0ZSAqcHRyID0gX2Vudi0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7Ci0gICAgcnNBbGxvY2F0aW9uM0REYXRhKGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgeG9mZiwgeW9mZiwgem9mZiwgbG9kLCB3LCBoLCBkLCBwdHIsIHNpemVCeXRlcywgMCk7Ci0gICAgX2Vudi0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKGRhdGEsIHB0ciwgSk5JX0FCT1JUKTsKLX0KLQotc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uRGF0YTNEX2koSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGFsbG9jLCBqaW50IHhvZmYsIGppbnQgeW9mZiwgamludCB6b2ZmLCBqaW50IGxvZCwKLSAgICAgICAgICAgICAgICAgICAgamludCB3LCBqaW50IGgsIGppbnQgZCwgamludEFycmF5IGRhdGEsIGludCBzaXplQnl0ZXMpCi17Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjNERGF0YV9pLCBjb24oJXApLCBhZGFwdGVyKCVwKSwgeG9mZiglaSksIHlvZmYoJWkpLCB3KCVpKSwgaCglaSksIGxlbiglaSkiLCBjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIHhvZmYsIHlvZmYsIHpvZmYsIHcsIGgsIGQsIGxlbik7Ci0gICAgamludCAqcHRyID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICByc0FsbG9jYXRpb24zRERhdGEoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCB4b2ZmLCB5b2ZmLCB6b2ZmLCBsb2QsIHcsIGgsIGQsIHB0ciwgc2l6ZUJ5dGVzLCAwKTsKLSAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkRhdGEzRF9mKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhbGxvYywgamludCB4b2ZmLCBqaW50IHlvZmYsIGppbnQgem9mZiwgamludCBsb2QsCi0gICAgICAgICAgICAgICAgICAgIGppbnQgdywgamludCBoLCBqaW50IGQsIGpmbG9hdEFycmF5IGRhdGEsIGludCBzaXplQnl0ZXMpCi17Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjNERGF0YV9mLCBjb24oJXApLCBhZGFwdGVyKCVwKSwgeG9mZiglaSksIHlvZmYoJWkpLCB3KCVpKSwgaCglaSksIGxlbiglaSkiLCBjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIHhvZmYsIHlvZmYsIHpvZmYsIHcsIGgsIGQsIGxlbik7Ci0gICAgamZsb2F0ICpwdHIgPSBfZW52LT5HZXRGbG9hdEFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7Ci0gICAgcnNBbGxvY2F0aW9uM0REYXRhKGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgeG9mZiwgeW9mZiwgem9mZiwgbG9kLCB3LCBoLCBkLCBwdHIsIHNpemVCeXRlcywgMCk7Ci0gICAgX2Vudi0+UmVsZWFzZUZsb2F0QXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvbkRhdGEzRF9hbGxvYyhKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBqaW50IGRzdEFsbG9jLCBqaW50IGRzdFhvZmYsIGppbnQgZHN0WW9mZiwgamludCBkc3Rab2ZmLAorbkFsbG9jYXRpb25EYXRhM0RfYWxsb2MoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sCisgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBkc3RBbGxvYywgamludCBkc3RYb2ZmLCBqaW50IGRzdFlvZmYsIGppbnQgZHN0Wm9mZiwKICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgZHN0TWlwLAogICAgICAgICAgICAgICAgICAgICAgICAgamludCB3aWR0aCwgamludCBoZWlnaHQsIGppbnQgZGVwdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBqaW50IHNyY0FsbG9jLCBqaW50IHNyY1hvZmYsIGppbnQgc3JjWW9mZiwgamludCBzcmNab2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgc3JjQWxsb2MsIGppbnQgc3JjWG9mZiwgamludCBzcmNZb2ZmLCBqaW50IHNyY1pvZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IHNyY01pcCkKIHsKICAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbkRhdGEzRF9hbGxvYywgY29uKCVwKSwgZHN0QWxsb2MoJXApLCBkc3RYb2ZmKCVpKSwgZHN0WW9mZiglaSksIgpAQCAtNzgxLDcgKzc0MCw3IEBACiAgICAgICAgICAgICBjb24sIChSc0FsbG9jYXRpb24pZHN0QWxsb2MsIGRzdFhvZmYsIGRzdFlvZmYsIGRzdE1pcCwgZHN0RmFjZSwKICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIChSc0FsbG9jYXRpb24pc3JjQWxsb2MsIHNyY1hvZmYsIHNyY1lvZmYsIHNyY01pcCwgc3JjRmFjZSk7CiAKLSAgICByc0FsbG9jYXRpb25Db3B5M0RSYW5nZShjb24sCisgICAgcnNBbGxvY2F0aW9uQ29weTNEUmFuZ2UoKFJzQ29udGV4dCljb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzQWxsb2NhdGlvbilkc3RBbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RYb2ZmLCBkc3RZb2ZmLCBkc3Rab2ZmLCBkc3RNaXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgZGVwdGgsCkBAIC03ODksNzkgKzc0OCw2NSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1hvZmYsIHNyY1lvZmYsIHNyY1pvZmYsIHNyY01pcCk7CiB9CiAKKwogc3RhdGljIHZvaWQKLW5BbGxvY2F0aW9uUmVhZF9pKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhbGxvYywgamludEFycmF5IGRhdGEpCituQWxsb2NhdGlvblJlYWQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIF9hbGxvYywgam9iamVjdCBkYXRhLCBpbnQgZGF0YVR5cGUpCiB7Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvblJlYWRfaSwgY29uKCVwKSwgYWxsb2MoJXApLCBsZW4oJWkpIiwgY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBsZW4pOwotICAgIGppbnQgKnB0ciA9IF9lbnYtPkdldEludEFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7Ci0gICAganNpemUgbGVuZ3RoID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7Ci0gICAgcnNBbGxvY2F0aW9uUmVhZChjb24sIChSc0FsbG9jYXRpb24pYWxsb2MsIHB0ciwgbGVuZ3RoICogc2l6ZW9mKGludCkpOwotICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKGRhdGEsIHB0ciwgMCk7CisgICAgUnNBbGxvY2F0aW9uICphbGxvYyA9IChSc0FsbG9jYXRpb24gKilfYWxsb2M7CisgICAgTE9HX0FQSSgibkFsbG9jYXRpb25SZWFkLCBjb24oJXApLCBhbGxvYyglcCkiLCBjb24sIChSc0FsbG9jYXRpb24pYWxsb2MpOworICAgIFBFUl9BUlJBWV9UWVBFKDAsIHJzQWxsb2NhdGlvblJlYWQsIChSc0NvbnRleHQpY29uLCBhbGxvYywgcHRyLCBsZW4gKiB0eXBlQnl0ZXMpOwogfQogCiBzdGF0aWMgdm9pZAotbkFsbG9jYXRpb25SZWFkX3MoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGFsbG9jLCBqc2hvcnRBcnJheSBkYXRhKQorbkFsbG9jYXRpb25SZWFkMUQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIF9hbGxvYywgamludCBvZmZzZXQsIGppbnQgbG9kLAorICAgICAgICAgICAgICAgICAgamludCBjb3VudCwgam9iamVjdCBkYXRhLCBpbnQgc2l6ZUJ5dGVzLCBpbnQgZGF0YVR5cGUpCiB7Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvblJlYWRfaSwgY29uKCVwKSwgYWxsb2MoJXApLCBsZW4oJWkpIiwgY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBsZW4pOwotICAgIGpzaG9ydCAqcHRyID0gX2Vudi0+R2V0U2hvcnRBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIGpzaXplIGxlbmd0aCA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIHJzQWxsb2NhdGlvblJlYWQoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBwdHIsIGxlbmd0aCAqIHNpemVvZihzaG9ydCkpOwotICAgIF9lbnYtPlJlbGVhc2VTaG9ydEFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCAwKTsKKyAgICBSc0FsbG9jYXRpb24gKmFsbG9jID0gKFJzQWxsb2NhdGlvbiAqKV9hbGxvYzsKKyAgICBMT0dfQVBJKCJuQWxsb2NhdGlvbjFEUmVhZCwgY29uKCVwKSwgYWRhcHRlciglcCksIG9mZnNldCglaSksIGNvdW50KCVpKSwgbGVuKCVpKSwgc2l6ZUJ5dGVzKCVpKSwgZGF0YVR5cGUoJWkpIiwKKyAgICAgICAgICAgIGNvbiwgYWxsb2MsIG9mZnNldCwgY291bnQsIGxlbiwgc2l6ZUJ5dGVzLCBkYXRhVHlwZSk7CisgICAgUEVSX0FSUkFZX1RZUEUoMCwgcnNBbGxvY2F0aW9uMURSZWFkLCAoUnNDb250ZXh0KWNvbiwgYWxsb2MsIG9mZnNldCwgbG9kLCBjb3VudCwgcHRyLCBzaXplQnl0ZXMpOwogfQogCiBzdGF0aWMgdm9pZAotbkFsbG9jYXRpb25SZWFkX2IoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGFsbG9jLCBqYnl0ZUFycmF5IGRhdGEpCituQWxsb2NhdGlvblJlYWQyRChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgX2FsbG9jLCBqaW50IHhvZmYsIGppbnQgeW9mZiwgamludCBsb2QsIGppbnQgX2ZhY2UsCisgICAgICAgICAgICAgICAgICBqaW50IHcsIGppbnQgaCwgam9iamVjdCBkYXRhLCBpbnQgc2l6ZUJ5dGVzLCBpbnQgZGF0YVR5cGUpCiB7Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvblJlYWRfaSwgY29uKCVwKSwgYWxsb2MoJXApLCBsZW4oJWkpIiwgY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBsZW4pOwotICAgIGpieXRlICpwdHIgPSBfZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgICBqc2l6ZSBsZW5ndGggPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICByc0FsbG9jYXRpb25SZWFkKGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgcHRyLCBsZW5ndGggKiBzaXplb2YoY2hhcikpOwotICAgIF9lbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIDApOworICAgIFJzQWxsb2NhdGlvbiAqYWxsb2MgPSAoUnNBbGxvY2F0aW9uICopX2FsbG9jOworICAgIFJzQWxsb2NhdGlvbkN1YmVtYXBGYWNlIGZhY2UgPSAoUnNBbGxvY2F0aW9uQ3ViZW1hcEZhY2UpX2ZhY2U7CisgICAgTE9HX0FQSSgibkFsbG9jYXRpb24yRFJlYWQsIGNvbiglcCksIGFkYXB0ZXIoJXApLCB4b2ZmKCVpKSwgeW9mZiglaSksIHcoJWkpLCBoKCVpKSwgbGVuKCVpKSB0eXBlKCVpKSIsCisgICAgICAgICAgICBjb24sIGFsbG9jLCB4b2ZmLCB5b2ZmLCB3LCBoLCBzaXplQnl0ZXMsIGRhdGFUeXBlKTsKKyAgICBQRVJfQVJSQVlfVFlQRSgwLCByc0FsbG9jYXRpb24yRFJlYWQsIChSc0NvbnRleHQpY29uLCBhbGxvYywgeG9mZiwgeW9mZiwgbG9kLCBmYWNlLCB3LCBoLCBwdHIsIHNpemVCeXRlcywgMCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvblJlYWRfZihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYWxsb2MsIGpmbG9hdEFycmF5IGRhdGEpCi17Ci0gICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKLSAgICBMT0dfQVBJKCJuQWxsb2NhdGlvblJlYWRfZiwgY29uKCVwKSwgYWxsb2MoJXApLCBsZW4oJWkpIiwgY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBsZW4pOwotICAgIGpmbG9hdCAqcHRyID0gX2Vudi0+R2V0RmxvYXRBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIGpzaXplIGxlbmd0aCA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKGRhdGEpOwotICAgIHJzQWxsb2NhdGlvblJlYWQoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBwdHIsIGxlbmd0aCAqIHNpemVvZihmbG9hdCkpOwotICAgIF9lbnYtPlJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCAwKTsKLX0KLQotc3RhdGljIGppbnQKLW5BbGxvY2F0aW9uR2V0VHlwZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgYSkKK3N0YXRpYyBqbG9uZworbkFsbG9jYXRpb25HZXRUeXBlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBhKQogewogICAgIExPR19BUEkoIm5BbGxvY2F0aW9uR2V0VHlwZSwgY29uKCVwKSwgYSglcCkiLCBjb24sIChSc0FsbG9jYXRpb24pYSk7Ci0gICAgcmV0dXJuIChqaW50KSByc2FBbGxvY2F0aW9uR2V0VHlwZShjb24sIChSc0FsbG9jYXRpb24pYSk7CisgICAgcmV0dXJuIChqbG9uZykgcnNhQWxsb2NhdGlvbkdldFR5cGUoKFJzQ29udGV4dCljb24sIChSc0FsbG9jYXRpb24pYSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1uQWxsb2NhdGlvblJlc2l6ZTFEKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBhbGxvYywgamludCBkaW1YKQorbkFsbG9jYXRpb25SZXNpemUxRChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgYWxsb2MsIGppbnQgZGltWCkKIHsKICAgICBMT0dfQVBJKCJuQWxsb2NhdGlvblJlc2l6ZTFELCBjb24oJXApLCBhbGxvYyglcCksIHNpemVYKCVpKSIsIGNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgZGltWCk7Ci0gICAgcnNBbGxvY2F0aW9uUmVzaXplMUQoY29uLCAoUnNBbGxvY2F0aW9uKWFsbG9jLCBkaW1YKTsKKyAgICByc0FsbG9jYXRpb25SZXNpemUxRCgoUnNDb250ZXh0KWNvbiwgKFJzQWxsb2NhdGlvbilhbGxvYywgZGltWCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBpbnQKLW5GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0U3RyZWFtKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBuYXRpdmVfYXNzZXQpCitzdGF0aWMgamxvbmcKK25GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0U3RyZWFtKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBuYXRpdmVfYXNzZXQpCiB7CiAgICAgQUxPR1YoIl9fX19fX25GaWxlQTNEICV1IiwgKHVpbnQzMl90KSBuYXRpdmVfYXNzZXQpOwogCiAgICAgQXNzZXQqIGFzc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxBc3NldCo+KG5hdGl2ZV9hc3NldCk7CiAKLSAgICBqaW50IGlkID0gKGppbnQpcnNhRmlsZUEzRENyZWF0ZUZyb21NZW1vcnkoY29uLCBhc3NldC0+Z2V0QnVmZmVyKGZhbHNlKSwgYXNzZXQtPmdldExlbmd0aCgpKTsKKyAgICBqbG9uZyBpZCA9IChqbG9uZylyc2FGaWxlQTNEQ3JlYXRlRnJvbU1lbW9yeSgoUnNDb250ZXh0KWNvbiwgYXNzZXQtPmdldEJ1ZmZlcihmYWxzZSksIGFzc2V0LT5nZXRMZW5ndGgoKSk7CiAgICAgcmV0dXJuIGlkOwogfQogCi1zdGF0aWMgaW50Ci1uRmlsZUEzRENyZWF0ZUZyb21Bc3NldChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGpvYmplY3QgX2Fzc2V0TWdyLCBqc3RyaW5nIF9wYXRoKQorc3RhdGljIGpsb25nCituRmlsZUEzRENyZWF0ZUZyb21Bc3NldChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgam9iamVjdCBfYXNzZXRNZ3IsIGpzdHJpbmcgX3BhdGgpCiB7CiAgICAgQXNzZXRNYW5hZ2VyKiBtZ3IgPSBhc3NldE1hbmFnZXJGb3JKYXZhT2JqZWN0KF9lbnYsIF9hc3NldE1ncik7CiAgICAgaWYgKG1nciA9PSBOVUxMKSB7CkBAIC04NzQsMzQgKzgxOSwzNCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBqaW50IGlkID0gKGppbnQpcnNhRmlsZUEzRENyZWF0ZUZyb21Bc3NldChjb24sIGFzc2V0KTsKKyAgICBqbG9uZyBpZCA9IChqbG9uZylyc2FGaWxlQTNEQ3JlYXRlRnJvbUFzc2V0KChSc0NvbnRleHQpY29uLCBhc3NldCk7CiAgICAgcmV0dXJuIGlkOwogfQogCi1zdGF0aWMgaW50Ci1uRmlsZUEzRENyZWF0ZUZyb21GaWxlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwganN0cmluZyBmaWxlTmFtZSkKK3N0YXRpYyBqbG9uZworbkZpbGVBM0RDcmVhdGVGcm9tRmlsZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwganN0cmluZyBmaWxlTmFtZSkKIHsKICAgICBBdXRvSmF2YVN0cmluZ1RvVVRGOCBmaWxlTmFtZVVURihfZW52LCBmaWxlTmFtZSk7Ci0gICAgamludCBpZCA9IChqaW50KXJzYUZpbGVBM0RDcmVhdGVGcm9tRmlsZShjb24sIGZpbGVOYW1lVVRGLmNfc3RyKCkpOworICAgIGpsb25nIGlkID0gKGpsb25nKXJzYUZpbGVBM0RDcmVhdGVGcm9tRmlsZSgoUnNDb250ZXh0KWNvbiwgZmlsZU5hbWVVVEYuY19zdHIoKSk7CiAKICAgICByZXR1cm4gaWQ7CiB9CiAKLXN0YXRpYyBpbnQKLW5GaWxlQTNER2V0TnVtSW5kZXhFbnRyaWVzKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBmaWxlQTNEKQorc3RhdGljIGppbnQKK25GaWxlQTNER2V0TnVtSW5kZXhFbnRyaWVzKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBmaWxlQTNEKQogewogICAgIGludDMyX3QgbnVtRW50cmllcyA9IDA7Ci0gICAgcnNhRmlsZUEzREdldE51bUluZGV4RW50cmllcyhjb24sICZudW1FbnRyaWVzLCAoUnNGaWxlKWZpbGVBM0QpOworICAgIHJzYUZpbGVBM0RHZXROdW1JbmRleEVudHJpZXMoKFJzQ29udGV4dCljb24sICZudW1FbnRyaWVzLCAoUnNGaWxlKWZpbGVBM0QpOwogICAgIHJldHVybiBudW1FbnRyaWVzOwogfQogCiBzdGF0aWMgdm9pZAotbkZpbGVBM0RHZXRJbmRleEVudHJpZXMoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGZpbGVBM0QsIGppbnQgbnVtRW50cmllcywgamludEFycmF5IF9pZHMsIGpvYmplY3RBcnJheSBfZW50cmllcykKK25GaWxlQTNER2V0SW5kZXhFbnRyaWVzKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBmaWxlQTNELCBqaW50IG51bUVudHJpZXMsIGppbnRBcnJheSBfaWRzLCBqb2JqZWN0QXJyYXkgX2VudHJpZXMpCiB7CiAgICAgQUxPR1YoIl9fX19fX25GaWxlQTNEICV1IiwgKHVpbnQzMl90KSBmaWxlQTNEKTsKICAgICBSc0ZpbGVJbmRleEVudHJ5ICpmaWxlRW50cmllcyA9IChSc0ZpbGVJbmRleEVudHJ5KiltYWxsb2MoKHVpbnQzMl90KW51bUVudHJpZXMgKiBzaXplb2YoUnNGaWxlSW5kZXhFbnRyeSkpOwogCi0gICAgcnNhRmlsZUEzREdldEluZGV4RW50cmllcyhjb24sIGZpbGVFbnRyaWVzLCAodWludDMyX3QpbnVtRW50cmllcywgKFJzRmlsZSlmaWxlQTNEKTsKKyAgICByc2FGaWxlQTNER2V0SW5kZXhFbnRyaWVzKChSc0NvbnRleHQpY29uLCBmaWxlRW50cmllcywgKHVpbnQzMl90KW51bUVudHJpZXMsIChSc0ZpbGUpZmlsZUEzRCk7CiAKICAgICBmb3IoamludCBpID0gMDsgaSA8IG51bUVudHJpZXM7IGkgKyspIHsKICAgICAgICAgX2Vudi0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KF9lbnRyaWVzLCBpLCBfZW52LT5OZXdTdHJpbmdVVEYoZmlsZUVudHJpZXNbaV0ub2JqZWN0TmFtZSkpOwpAQCAtOTEyLDIxICs4NTcsMjEgQEAKIH0KIAogc3RhdGljIGludAotbkZpbGVBM0RHZXRFbnRyeUJ5SW5kZXgoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IGZpbGVBM0QsIGppbnQgaW5kZXgpCituRmlsZUEzREdldEVudHJ5QnlJbmRleChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgZmlsZUEzRCwgamludCBpbmRleCkKIHsKICAgICBBTE9HVigiX19fX19fbkZpbGVBM0QgJXUiLCAodWludDMyX3QpIGZpbGVBM0QpOwotICAgIGppbnQgaWQgPSAoamludClyc2FGaWxlQTNER2V0RW50cnlCeUluZGV4KGNvbiwgKHVpbnQzMl90KWluZGV4LCAoUnNGaWxlKWZpbGVBM0QpOworICAgIGppbnQgaWQgPSAoamludClyc2FGaWxlQTNER2V0RW50cnlCeUluZGV4KChSc0NvbnRleHQpY29uLCAodWludDMyX3QpaW5kZXgsIChSc0ZpbGUpZmlsZUEzRCk7CiAgICAgcmV0dXJuIGlkOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgaW50Ci1uRm9udENyZWF0ZUZyb21GaWxlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwKK25Gb250Q3JlYXRlRnJvbUZpbGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sCiAgICAgICAgICAgICAgICAgICAgIGpzdHJpbmcgZmlsZU5hbWUsIGpmbG9hdCBmb250U2l6ZSwgamludCBkcGkpCiB7CiAgICAgQXV0b0phdmFTdHJpbmdUb1VURjggZmlsZU5hbWVVVEYoX2VudiwgZmlsZU5hbWUpOwotICAgIGppbnQgaWQgPSAoamludClyc0ZvbnRDcmVhdGVGcm9tRmlsZShjb24sCisgICAgamludCBpZCA9IChqaW50KXJzRm9udENyZWF0ZUZyb21GaWxlKChSc0NvbnRleHQpY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZVVURi5jX3N0cigpLCBmaWxlTmFtZVVURi5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemUsIGRwaSk7CiAKQEAgLTkzNCwxMyArODc5LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQKLW5Gb250Q3JlYXRlRnJvbUFzc2V0U3RyZWFtKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwKK25Gb250Q3JlYXRlRnJvbUFzc2V0U3RyZWFtKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAganN0cmluZyBuYW1lLCBqZmxvYXQgZm9udFNpemUsIGppbnQgZHBpLCBqaW50IG5hdGl2ZV9hc3NldCkKIHsKICAgICBBc3NldCogYXNzZXQgPSByZWludGVycHJldF9jYXN0PEFzc2V0Kj4obmF0aXZlX2Fzc2V0KTsKICAgICBBdXRvSmF2YVN0cmluZ1RvVVRGOCBuYW1lVVRGKF9lbnYsIG5hbWUpOwogCi0gICAgamludCBpZCA9IChqaW50KXJzRm9udENyZWF0ZUZyb21NZW1vcnkoY29uLAorICAgIGppbnQgaWQgPSAoamludClyc0ZvbnRDcmVhdGVGcm9tTWVtb3J5KChSc0NvbnRleHQpY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVVVEYuY19zdHIoKSwgbmFtZVVURi5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZSwgZHBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0LT5nZXRCdWZmZXIoZmFsc2UpLCBhc3NldC0+Z2V0TGVuZ3RoKCkpOwpAQCAtOTQ4LDcgKzg5Myw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLW5Gb250Q3JlYXRlRnJvbUFzc2V0KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgam9iamVjdCBfYXNzZXRNZ3IsIGpzdHJpbmcgX3BhdGgsCituRm9udENyZWF0ZUZyb21Bc3NldChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgam9iamVjdCBfYXNzZXRNZ3IsIGpzdHJpbmcgX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICBqZmxvYXQgZm9udFNpemUsIGppbnQgZHBpKQogewogICAgIEFzc2V0TWFuYWdlciogbWdyID0gYXNzZXRNYW5hZ2VyRm9ySmF2YU9iamVjdChfZW52LCBfYXNzZXRNZ3IpOwpAQCAtOTYyLDcgKzkwNyw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGppbnQgaWQgPSAoamludClyc0ZvbnRDcmVhdGVGcm9tTWVtb3J5KGNvbiwKKyAgICBqaW50IGlkID0gKGppbnQpcnNGb250Q3JlYXRlRnJvbU1lbW9yeSgoUnNDb250ZXh0KWNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIuY19zdHIoKSwgc3RyLmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplLCBkcGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXQtPmdldEJ1ZmZlcihmYWxzZSksIGFzc2V0LT5nZXRMZW5ndGgoKSk7CkBAIC05NzMsMTEyICs5MTgsMTEyIEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgdm9pZAotblNjcmlwdEJpbmRBbGxvY2F0aW9uKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBzY3JpcHQsIGppbnQgYWxsb2MsIGppbnQgc2xvdCkKK25TY3JpcHRCaW5kQWxsb2NhdGlvbihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqbG9uZyBhbGxvYywgamludCBzbG90KQogewogICAgIExPR19BUEkoIm5TY3JpcHRCaW5kQWxsb2NhdGlvbiwgY29uKCVwKSwgc2NyaXB0KCVwKSwgYWxsb2MoJXApLCBzbG90KCVpKSIsIGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgKFJzQWxsb2NhdGlvbilhbGxvYywgc2xvdCk7Ci0gICAgcnNTY3JpcHRCaW5kQWxsb2NhdGlvbihjb24sIChSc1NjcmlwdClzY3JpcHQsIChSc0FsbG9jYXRpb24pYWxsb2MsIHNsb3QpOworICAgIHJzU2NyaXB0QmluZEFsbG9jYXRpb24oKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIChSc0FsbG9jYXRpb24pYWxsb2MsIHNsb3QpOwogfQogCiBzdGF0aWMgdm9pZAotblNjcmlwdFNldFZhckkoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHNjcmlwdCwgamludCBzbG90LCBqaW50IHZhbCkKK25TY3JpcHRTZXRWYXJJKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBzY3JpcHQsIGppbnQgc2xvdCwgamludCB2YWwpCiB7CiAgICAgTE9HX0FQSSgiblNjcmlwdFNldFZhckksIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSwgdmFsKCVpKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QsIHZhbCk7Ci0gICAgcnNTY3JpcHRTZXRWYXJJKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgdmFsKTsKKyAgICByc1NjcmlwdFNldFZhckkoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIHZhbCk7CiB9CiAKIHN0YXRpYyBqaW50Ci1uU2NyaXB0R2V0VmFySShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgc2NyaXB0LCBqaW50IHNsb3QpCituU2NyaXB0R2V0VmFySShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QpCiB7CiAgICAgTE9HX0FQSSgiblNjcmlwdEdldFZhckksIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QpOwogICAgIGludCB2YWx1ZSA9IDA7Ci0gICAgcnNTY3JpcHRHZXRWYXJWKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKyAgICByc1NjcmlwdEdldFZhclYoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCiBzdGF0aWMgdm9pZAotblNjcmlwdFNldFZhck9iaihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgc2NyaXB0LCBqaW50IHNsb3QsIGppbnQgdmFsKQorblNjcmlwdFNldFZhck9iaihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QsIGpsb25nIHZhbCkKIHsKICAgICBMT0dfQVBJKCJuU2NyaXB0U2V0VmFyT2JqLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSksIHZhbCglaSkiLCBjb24sICh2b2lkICopc2NyaXB0LCBzbG90LCB2YWwpOwotICAgIHJzU2NyaXB0U2V0VmFyT2JqKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgKFJzT2JqZWN0QmFzZSl2YWwpOworICAgIHJzU2NyaXB0U2V0VmFyT2JqKChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCAoUnNPYmplY3RCYXNlKXZhbCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1uU2NyaXB0U2V0VmFySihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgc2NyaXB0LCBqaW50IHNsb3QsIGpsb25nIHZhbCkKK25TY3JpcHRTZXRWYXJKKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBzY3JpcHQsIGppbnQgc2xvdCwgamxvbmcgdmFsKQogewogICAgIExPR19BUEkoIm5TY3JpcHRTZXRWYXJKLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSksIHZhbCglbGxpKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QsIHZhbCk7Ci0gICAgcnNTY3JpcHRTZXRWYXJKKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgdmFsKTsKKyAgICByc1NjcmlwdFNldFZhckooKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIHZhbCk7CiB9CiAKIHN0YXRpYyBqbG9uZwotblNjcmlwdEdldFZhckooSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHNjcmlwdCwgamludCBzbG90KQorblNjcmlwdEdldFZhckooSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHNjcmlwdCwgamludCBzbG90KQogewogICAgIExPR19BUEkoIm5TY3JpcHRHZXRWYXJKLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSkiLCBjb24sICh2b2lkICopc2NyaXB0LCBzbG90KTsKICAgICBqbG9uZyB2YWx1ZSA9IDA7Ci0gICAgcnNTY3JpcHRHZXRWYXJWKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKyAgICByc1NjcmlwdEdldFZhclYoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCiBzdGF0aWMgdm9pZAotblNjcmlwdFNldFZhckYoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHNjcmlwdCwgamludCBzbG90LCBmbG9hdCB2YWwpCituU2NyaXB0U2V0VmFyRihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QsIGZsb2F0IHZhbCkKIHsKICAgICBMT0dfQVBJKCJuU2NyaXB0U2V0VmFyRiwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpLCB2YWwoJWYpIiwgY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCwgdmFsKTsKLSAgICByc1NjcmlwdFNldFZhckYoY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCB2YWwpOworICAgIHJzU2NyaXB0U2V0VmFyRigoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgdmFsKTsKIH0KIAogc3RhdGljIGpmbG9hdAotblNjcmlwdEdldFZhckYoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHNjcmlwdCwgamludCBzbG90KQorblNjcmlwdEdldFZhckYoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHNjcmlwdCwgamludCBzbG90KQogewogICAgIExPR19BUEkoIm5TY3JpcHRHZXRWYXJGLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSkiLCBjb24sICh2b2lkICopc2NyaXB0LCBzbG90KTsKICAgICBqZmxvYXQgdmFsdWUgPSAwOwotICAgIHJzU2NyaXB0R2V0VmFyVihjb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgcnNTY3JpcHRHZXRWYXJWKChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAogc3RhdGljIHZvaWQKLW5TY3JpcHRTZXRWYXJEKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBzY3JpcHQsIGppbnQgc2xvdCwgZG91YmxlIHZhbCkKK25TY3JpcHRTZXRWYXJEKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBzY3JpcHQsIGppbnQgc2xvdCwgZG91YmxlIHZhbCkKIHsKICAgICBMT0dfQVBJKCJuU2NyaXB0U2V0VmFyRCwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpLCB2YWwoJWxmKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QsIHZhbCk7Ci0gICAgcnNTY3JpcHRTZXRWYXJEKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgdmFsKTsKKyAgICByc1NjcmlwdFNldFZhckQoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIHZhbCk7CiB9CiAKIHN0YXRpYyBqZG91YmxlCi1uU2NyaXB0R2V0VmFyRChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgc2NyaXB0LCBqaW50IHNsb3QpCituU2NyaXB0R2V0VmFyRChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QpCiB7CiAgICAgTE9HX0FQSSgiblNjcmlwdEdldFZhckQsIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QpOwogICAgIGpkb3VibGUgdmFsdWUgPSAwOwotICAgIHJzU2NyaXB0R2V0VmFyVihjb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgcnNTY3JpcHRHZXRWYXJWKChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAogc3RhdGljIHZvaWQKLW5TY3JpcHRTZXRWYXJWKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBzY3JpcHQsIGppbnQgc2xvdCwgamJ5dGVBcnJheSBkYXRhKQorblNjcmlwdFNldFZhclYoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHNjcmlwdCwgamludCBzbG90LCBqYnl0ZUFycmF5IGRhdGEpCiB7CiAgICAgTE9HX0FQSSgiblNjcmlwdFNldFZhclYsIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QpOwogICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGF0YSk7CiAgICAgamJ5dGUgKnB0ciA9IF9lbnYtPkdldEJ5dGVBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICAgIHJzU2NyaXB0U2V0VmFyVihjb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIHB0ciwgbGVuKTsKKyAgICByc1NjcmlwdFNldFZhclYoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIHB0ciwgbGVuKTsKICAgICBfZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgcHRyLCBKTklfQUJPUlQpOwogfQogCiBzdGF0aWMgdm9pZAotblNjcmlwdEdldFZhclYoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHNjcmlwdCwgamludCBzbG90LCBqYnl0ZUFycmF5IGRhdGEpCituU2NyaXB0R2V0VmFyVihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QsIGpieXRlQXJyYXkgZGF0YSkKIHsKICAgICBMT0dfQVBJKCJuU2NyaXB0U2V0VmFyViwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpIiwgY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7CiAgICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKICAgICBqYnl0ZSAqcHRyID0gX2Vudi0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7Ci0gICAgcnNTY3JpcHRHZXRWYXJWKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgcHRyLCBsZW4pOworICAgIHJzU2NyaXB0R2V0VmFyVigoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgcHRyLCBsZW4pOwogICAgIF9lbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1uU2NyaXB0U2V0VmFyVkUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHNjcmlwdCwgamludCBzbG90LCBqYnl0ZUFycmF5IGRhdGEsIGppbnQgZWxlbSwgamludEFycmF5IGRpbXMpCituU2NyaXB0U2V0VmFyVkUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHNjcmlwdCwgamludCBzbG90LCBqYnl0ZUFycmF5IGRhdGEsIGpsb25nIGVsZW0sIGppbnRBcnJheSBkaW1zKQogewogICAgIExPR19BUEkoIm5TY3JpcHRTZXRWYXJWRSwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpIiwgY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7CiAgICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKICAgICBqYnl0ZSAqcHRyID0gX2Vudi0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7CiAgICAgamludCBkaW1zTGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoZGltcykgKiBzaXplb2YoaW50KTsKICAgICBqaW50ICpkaW1zUHRyID0gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhkaW1zLCBOVUxMKTsKLSAgICByc1NjcmlwdFNldFZhclZFKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgcHRyLCBsZW4sIChSc0VsZW1lbnQpZWxlbSwKKyAgICByc1NjcmlwdFNldFZhclZFKChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCBwdHIsIGxlbiwgKFJzRWxlbWVudCllbGVtLAogICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpemVfdCopIGRpbXNQdHIsIGRpbXNMZW4pOwogICAgIF9lbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7CiAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoZGltcywgZGltc1B0ciwgSk5JX0FCT1JUKTsKQEAgLTEwODYsNyArMTAzMSw3IEBACiAKIAogc3RhdGljIHZvaWQKLW5TY3JpcHRTZXRUaW1lWm9uZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgc2NyaXB0LCBqYnl0ZUFycmF5IHRpbWVab25lKQorblNjcmlwdFNldFRpbWVab25lKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBzY3JpcHQsIGpieXRlQXJyYXkgdGltZVpvbmUpCiB7CiAgICAgTE9HX0FQSSgiblNjcmlwdENTZXRUaW1lWm9uZSwgY29uKCVwKSwgcyglcCksIHRpbWVab25lKCVzKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIChjb25zdCBjaGFyICopdGltZVpvbmUpOwogCkBAIC0xMDk0LDcgKzEwMzksNyBAQAogICAgIGpieXRlKiB0aW1lWm9uZV9wdHI7CiAgICAgdGltZVpvbmVfcHRyID0gKGpieXRlICopIF9lbnYtPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwodGltZVpvbmUsIChqYm9vbGVhbiAqKTApOwogCi0gICAgcnNTY3JpcHRTZXRUaW1lWm9uZShjb24sIChSc1NjcmlwdClzY3JpcHQsIChjb25zdCBjaGFyICopdGltZVpvbmVfcHRyLCBsZW5ndGgpOworICAgIHJzU2NyaXB0U2V0VGltZVpvbmUoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIChjb25zdCBjaGFyICopdGltZVpvbmVfcHRyLCBsZW5ndGgpOwogCiAgICAgaWYgKHRpbWVab25lX3B0cikgewogICAgICAgICBfZW52LT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbCh0aW1lWm9uZSwgdGltZVpvbmVfcHRyLCAwKTsKQEAgLTExMDIsNDMgKzEwNDcsNDMgQEAKIH0KIAogc3RhdGljIHZvaWQKLW5TY3JpcHRJbnZva2UoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IG9iaiwgamludCBzbG90KQorblNjcmlwdEludm9rZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgb2JqLCBqaW50IHNsb3QpCiB7CiAgICAgTE9HX0FQSSgiblNjcmlwdEludm9rZSwgY29uKCVwKSwgc2NyaXB0KCVwKSIsIGNvbiwgKHZvaWQgKilvYmopOwotICAgIHJzU2NyaXB0SW52b2tlKGNvbiwgKFJzU2NyaXB0KW9iaiwgc2xvdCk7CisgICAgcnNTY3JpcHRJbnZva2UoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClvYmosIHNsb3QpOwogfQogCiBzdGF0aWMgdm9pZAotblNjcmlwdEludm9rZVYoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHNjcmlwdCwgamludCBzbG90LCBqYnl0ZUFycmF5IGRhdGEpCituU2NyaXB0SW52b2tlVihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QsIGpieXRlQXJyYXkgZGF0YSkKIHsKICAgICBMT0dfQVBJKCJuU2NyaXB0SW52b2tlViwgY29uKCVwKSwgcyglcCksIHNsb3QoJWkpIiwgY29uLCAodm9pZCAqKXNjcmlwdCwgc2xvdCk7CiAgICAgamludCBsZW4gPSBfZW52LT5HZXRBcnJheUxlbmd0aChkYXRhKTsKICAgICBqYnl0ZSAqcHRyID0gX2Vudi0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7Ci0gICAgcnNTY3JpcHRJbnZva2VWKGNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgcHRyLCBsZW4pOworICAgIHJzU2NyaXB0SW52b2tlVigoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgcHRyLCBsZW4pOwogICAgIF9lbnYtPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBwdHIsIEpOSV9BQk9SVCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1uU2NyaXB0Rm9yRWFjaChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sCi0gICAgICAgICAgICAgICBqaW50IHNjcmlwdCwgamludCBzbG90LCBqaW50IGFpbiwgamludCBhb3V0KQorblNjcmlwdEZvckVhY2goSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sCisgICAgICAgICAgICAgICBqbG9uZyBzY3JpcHQsIGppbnQgc2xvdCwgamxvbmcgYWluLCBqbG9uZyBhb3V0KQogewogICAgIExPR19BUEkoIm5TY3JpcHRGb3JFYWNoLCBjb24oJXApLCBzKCVwKSwgc2xvdCglaSkiLCBjb24sICh2b2lkICopc2NyaXB0LCBzbG90KTsKLSAgICByc1NjcmlwdEZvckVhY2goY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCAoUnNBbGxvY2F0aW9uKWFpbiwgKFJzQWxsb2NhdGlvbilhb3V0LCBOVUxMLCAwLCBOVUxMLCAwKTsKKyAgICByc1NjcmlwdEZvckVhY2goKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIChSc0FsbG9jYXRpb24pYWluLCAoUnNBbGxvY2F0aW9uKWFvdXQsIE5VTEwsIDAsIE5VTEwsIDApOwogfQogc3RhdGljIHZvaWQKLW5TY3JpcHRGb3JFYWNoVihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sCi0gICAgICAgICAgICAgICAgamludCBzY3JpcHQsIGppbnQgc2xvdCwgamludCBhaW4sIGppbnQgYW91dCwgamJ5dGVBcnJheSBwYXJhbXMpCituU2NyaXB0Rm9yRWFjaFYoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sCisgICAgICAgICAgICAgICAgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QsIGpsb25nIGFpbiwgamxvbmcgYW91dCwgamJ5dGVBcnJheSBwYXJhbXMpCiB7CiAgICAgTE9HX0FQSSgiblNjcmlwdEZvckVhY2gsIGNvbiglcCksIHMoJXApLCBzbG90KCVpKSIsIGNvbiwgKHZvaWQgKilzY3JpcHQsIHNsb3QpOwogICAgIGppbnQgbGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgocGFyYW1zKTsKICAgICBqYnl0ZSAqcHRyID0gX2Vudi0+R2V0Qnl0ZUFycmF5RWxlbWVudHMocGFyYW1zLCBOVUxMKTsKLSAgICByc1NjcmlwdEZvckVhY2goY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCAoUnNBbGxvY2F0aW9uKWFpbiwgKFJzQWxsb2NhdGlvbilhb3V0LCBwdHIsIGxlbiwgTlVMTCwgMCk7CisgICAgcnNTY3JpcHRGb3JFYWNoKChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCAoUnNBbGxvY2F0aW9uKWFpbiwgKFJzQWxsb2NhdGlvbilhb3V0LCBwdHIsIGxlbiwgTlVMTCwgMCk7CiAgICAgX2Vudi0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKHBhcmFtcywgcHRyLCBKTklfQUJPUlQpOwogfQogCiBzdGF0aWMgdm9pZAotblNjcmlwdEZvckVhY2hDbGlwcGVkKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwKLSAgICAgICAgICAgICAgICAgICAgICBqaW50IHNjcmlwdCwgamludCBzbG90LCBqaW50IGFpbiwgamludCBhb3V0LAorblNjcmlwdEZvckVhY2hDbGlwcGVkKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLAorICAgICAgICAgICAgICAgICAgICAgIGpsb25nIHNjcmlwdCwgamludCBzbG90LCBqbG9uZyBhaW4sIGpsb25nIGFvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgamludCB4c3RhcnQsIGppbnQgeGVuZCwKICAgICAgICAgICAgICAgICAgICAgICBqaW50IHlzdGFydCwgamludCB5ZW5kLCBqaW50IHpzdGFydCwgamludCB6ZW5kKQogewpAQCAtMTE1MywxMiArMTA5OCwxMiBAQAogICAgIHNjLnN0cmF0ZWd5ID0gUlNfRk9SX0VBQ0hfU1RSQVRFR1lfRE9OVF9DQVJFOwogICAgIHNjLmFycmF5U3RhcnQgPSAwOwogICAgIHNjLmFycmF5RW5kID0gMDsKLSAgICByc1NjcmlwdEZvckVhY2goY29uLCAoUnNTY3JpcHQpc2NyaXB0LCBzbG90LCAoUnNBbGxvY2F0aW9uKWFpbiwgKFJzQWxsb2NhdGlvbilhb3V0LCBOVUxMLCAwLCAmc2MsIHNpemVvZihzYykpOworICAgIHJzU2NyaXB0Rm9yRWFjaCgoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgKFJzQWxsb2NhdGlvbilhaW4sIChSc0FsbG9jYXRpb24pYW91dCwgTlVMTCwgMCwgJnNjLCBzaXplb2Yoc2MpKTsKIH0KIAogc3RhdGljIHZvaWQKLW5TY3JpcHRGb3JFYWNoQ2xpcHBlZFYoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLAotICAgICAgICAgICAgICAgICAgICAgICBqaW50IHNjcmlwdCwgamludCBzbG90LCBqaW50IGFpbiwgamludCBhb3V0LAorblNjcmlwdEZvckVhY2hDbGlwcGVkVihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgc2NyaXB0LCBqaW50IHNsb3QsIGpsb25nIGFpbiwgamxvbmcgYW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgamJ5dGVBcnJheSBwYXJhbXMsIGppbnQgeHN0YXJ0LCBqaW50IHhlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgeXN0YXJ0LCBqaW50IHllbmQsIGppbnQgenN0YXJ0LCBqaW50IHplbmQpCiB7CkBAIC0xMTc1LDE0ICsxMTIwLDE0IEBACiAgICAgc2Muc3RyYXRlZ3kgPSBSU19GT1JfRUFDSF9TVFJBVEVHWV9ET05UX0NBUkU7CiAgICAgc2MuYXJyYXlTdGFydCA9IDA7CiAgICAgc2MuYXJyYXlFbmQgPSAwOwotICAgIHJzU2NyaXB0Rm9yRWFjaChjb24sIChSc1NjcmlwdClzY3JpcHQsIHNsb3QsIChSc0FsbG9jYXRpb24pYWluLCAoUnNBbGxvY2F0aW9uKWFvdXQsIHB0ciwgbGVuLCAmc2MsIHNpemVvZihzYykpOworICAgIHJzU2NyaXB0Rm9yRWFjaCgoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0KXNjcmlwdCwgc2xvdCwgKFJzQWxsb2NhdGlvbilhaW4sIChSc0FsbG9jYXRpb24pYW91dCwgcHRyLCBsZW4sICZzYywgc2l6ZW9mKHNjKSk7CiAgICAgX2Vudi0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKHBhcmFtcywgcHRyLCBKTklfQUJPUlQpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgamludAotblNjcmlwdENDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLAorblNjcmlwdENDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sCiAgICAgICAgICAgICAgICBqc3RyaW5nIHJlc05hbWUsIGpzdHJpbmcgY2FjaGVEaXIsCiAgICAgICAgICAgICAgICBqYnl0ZUFycmF5IHNjcmlwdFJlZiwgamludCBsZW5ndGgpCiB7CkBAIC0xMjE0LDkgKzExNTksOSBAQAogICAgIHNjcmlwdF9wdHIgPSAoamJ5dGUgKikKICAgICAgICAgX2Vudi0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChzY3JpcHRSZWYsIChqYm9vbGVhbiAqKTApOwogCi0gICAgLy9yc1NjcmlwdENTZXRUZXh0KGNvbiwgKGNvbnN0IGNoYXIgKilzY3JpcHRfcHRyLCBsZW5ndGgpOworICAgIC8vcnNTY3JpcHRDU2V0VGV4dCgoUnNDb250ZXh0KWNvbiwgKGNvbnN0IGNoYXIgKilzY3JpcHRfcHRyLCBsZW5ndGgpOwogCi0gICAgcmV0ID0gKGppbnQpcnNTY3JpcHRDQ3JlYXRlKGNvbiwKKyAgICByZXQgPSAoamludClyc1NjcmlwdENDcmVhdGUoKFJzQ29udGV4dCljb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc05hbWVVVEYuY19zdHIoKSwgcmVzTmFtZVVURi5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVEaXJVVEYuY19zdHIoKSwgY2FjaGVEaXJVVEYubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopc2NyaXB0X3B0ciwgbGVuZ3RoKTsKQEAgLTEyMzAsMjkgKzExNzUsMjkgQEAKICAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgamludAotblNjcmlwdEludHJpbnNpY0NyZWF0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgaWQsIGppbnQgZWlkKQorc3RhdGljIGpsb25nCituU2NyaXB0SW50cmluc2ljQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqaW50IGlkLCBqbG9uZyBlaWQpCiB7CiAgICAgTE9HX0FQSSgiblNjcmlwdEludHJpbnNpY0NyZWF0ZSwgY29uKCVwKSBpZCglaSkgZWxlbWVudCglcCkiLCBjb24sIGlkLCAodm9pZCAqKWVpZCk7Ci0gICAgcmV0dXJuIChqaW50KXJzU2NyaXB0SW50cmluc2ljQ3JlYXRlKGNvbiwgaWQsIChSc0VsZW1lbnQpZWlkKTsKKyAgICByZXR1cm4gKGpsb25nKXJzU2NyaXB0SW50cmluc2ljQ3JlYXRlKChSc0NvbnRleHQpY29uLCBpZCwgKFJzRWxlbWVudCllaWQpOwogfQogCi1zdGF0aWMgamludAotblNjcmlwdEtlcm5lbElEQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBzaWQsIGppbnQgc2xvdCwgamludCBzaWcpCitzdGF0aWMgamxvbmcKK25TY3JpcHRLZXJuZWxJRENyZWF0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2lkLCBqaW50IHNsb3QsIGppbnQgc2lnKQogewogICAgIExPR19BUEkoIm5TY3JpcHRLZXJuZWxJRENyZWF0ZSwgY29uKCVwKSBzY3JpcHQoJXApLCBzbG90KCVpKSwgc2lnKCVpKSIsIGNvbiwgKHZvaWQgKilzaWQsIHNsb3QsIHNpZyk7Ci0gICAgcmV0dXJuIChqaW50KXJzU2NyaXB0S2VybmVsSURDcmVhdGUoY29uLCAoUnNTY3JpcHQpc2lkLCBzbG90LCBzaWcpOworICAgIHJldHVybiAoamludClyc1NjcmlwdEtlcm5lbElEQ3JlYXRlKChSc0NvbnRleHQpY29uLCAoUnNTY3JpcHQpc2lkLCBzbG90LCBzaWcpOwogfQogCi1zdGF0aWMgamludAotblNjcmlwdEZpZWxkSURDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHNpZCwgamludCBzbG90KQorc3RhdGljIGpsb25nCituU2NyaXB0RmllbGRJRENyZWF0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgc2lkLCBqaW50IHNsb3QpCiB7CiAgICAgTE9HX0FQSSgiblNjcmlwdEZpZWxkSURDcmVhdGUsIGNvbiglcCkgc2NyaXB0KCVwKSwgc2xvdCglaSkiLCBjb24sICh2b2lkICopc2lkLCBzbG90KTsKLSAgICByZXR1cm4gKGppbnQpcnNTY3JpcHRGaWVsZElEQ3JlYXRlKGNvbiwgKFJzU2NyaXB0KXNpZCwgc2xvdCk7CisgICAgcmV0dXJuIChqaW50KXJzU2NyaXB0RmllbGRJRENyZWF0ZSgoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0KXNpZCwgc2xvdCk7CiB9CiAKLXN0YXRpYyBqaW50Ci1uU2NyaXB0R3JvdXBDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50QXJyYXkgX2tlcm5lbHMsIGppbnRBcnJheSBfc3JjLAorc3RhdGljIGpsb25nCituU2NyaXB0R3JvdXBDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnRBcnJheSBfa2VybmVscywgamludEFycmF5IF9zcmMsCiAgICAgamludEFycmF5IF9kc3RrLCBqaW50QXJyYXkgX2RzdGYsIGppbnRBcnJheSBfdHlwZXMpCiB7CiAgICAgTE9HX0FQSSgiblNjcmlwdEdyb3VwQ3JlYXRlLCBjb24oJXApIiwgY29uKTsKQEAgLTEyNjgsNyArMTIxMyw3IEBACiAgICAgamludCB0eXBlc0xlbiA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKF90eXBlcykgKiBzaXplb2YoaW50KTsKICAgICBqaW50ICp0eXBlc1B0ciA9IF9lbnYtPkdldEludEFycmF5RWxlbWVudHMoX3R5cGVzLCBOVUxMKTsKIAotICAgIGludCBpZCA9IChpbnQpcnNTY3JpcHRHcm91cENyZWF0ZShjb24sCisgICAgaW50IGlkID0gKGludClyc1NjcmlwdEdyb3VwQ3JlYXRlKChSc0NvbnRleHQpY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc1NjcmlwdEtlcm5lbElEICopa2VybmVsc1B0ciwga2VybmVsc0xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNTY3JpcHRLZXJuZWxJRCAqKXNyY1B0ciwgc3JjTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc1NjcmlwdEtlcm5lbElEICopZHN0a1B0ciwgZHN0a0xlbiwKQEAgLTEyODQsMzkgKzEyMjksMzkgQEAKIH0KIAogc3RhdGljIHZvaWQKLW5TY3JpcHRHcm91cFNldElucHV0KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBnaWQsIGppbnQga2lkLCBqaW50IGFsbG9jKQorblNjcmlwdEdyb3VwU2V0SW5wdXQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIGdpZCwgamxvbmcga2lkLCBqbG9uZyBhbGxvYykKIHsKICAgICBMT0dfQVBJKCJuU2NyaXB0R3JvdXBTZXRJbnB1dCwgY29uKCVwKSBncm91cCglcCksIGtlcm5lbElkKCVwKSwgYWxsb2MoJXApIiwgY29uLAogICAgICAgICAodm9pZCAqKWdpZCwgKHZvaWQgKilraWQsICh2b2lkICopYWxsb2MpOwotICAgIHJzU2NyaXB0R3JvdXBTZXRJbnB1dChjb24sIChSc1NjcmlwdEdyb3VwKWdpZCwgKFJzU2NyaXB0S2VybmVsSUQpa2lkLCAoUnNBbGxvY2F0aW9uKWFsbG9jKTsKKyAgICByc1NjcmlwdEdyb3VwU2V0SW5wdXQoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdEdyb3VwKWdpZCwgKFJzU2NyaXB0S2VybmVsSUQpa2lkLCAoUnNBbGxvY2F0aW9uKWFsbG9jKTsKIH0KIAogc3RhdGljIHZvaWQKLW5TY3JpcHRHcm91cFNldE91dHB1dChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgZ2lkLCBqaW50IGtpZCwgamludCBhbGxvYykKK25TY3JpcHRHcm91cFNldE91dHB1dChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgZ2lkLCBqbG9uZyBraWQsIGpsb25nIGFsbG9jKQogewogICAgIExPR19BUEkoIm5TY3JpcHRHcm91cFNldE91dHB1dCwgY29uKCVwKSBncm91cCglcCksIGtlcm5lbElkKCVwKSwgYWxsb2MoJXApIiwgY29uLAogICAgICAgICAodm9pZCAqKWdpZCwgKHZvaWQgKilraWQsICh2b2lkICopYWxsb2MpOwotICAgIHJzU2NyaXB0R3JvdXBTZXRPdXRwdXQoY29uLCAoUnNTY3JpcHRHcm91cClnaWQsIChSc1NjcmlwdEtlcm5lbElEKWtpZCwgKFJzQWxsb2NhdGlvbilhbGxvYyk7CisgICAgcnNTY3JpcHRHcm91cFNldE91dHB1dCgoUnNDb250ZXh0KWNvbiwgKFJzU2NyaXB0R3JvdXApZ2lkLCAoUnNTY3JpcHRLZXJuZWxJRClraWQsIChSc0FsbG9jYXRpb24pYWxsb2MpOwogfQogCiBzdGF0aWMgdm9pZAotblNjcmlwdEdyb3VwRXhlY3V0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgZ2lkKQorblNjcmlwdEdyb3VwRXhlY3V0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgZ2lkKQogewogICAgIExPR19BUEkoIm5TY3JpcHRHcm91cFNldE91dHB1dCwgY29uKCVwKSBncm91cCglcCkiLCBjb24sICh2b2lkICopZ2lkKTsKLSAgICByc1NjcmlwdEdyb3VwRXhlY3V0ZShjb24sIChSc1NjcmlwdEdyb3VwKWdpZCk7CisgICAgcnNTY3JpcHRHcm91cEV4ZWN1dGUoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdEdyb3VwKWdpZCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgamludAotblByb2dyYW1TdG9yZUNyZWF0ZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sCituUHJvZ3JhbVN0b3JlQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLAogICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBjb2xvck1hc2tSLCBqYm9vbGVhbiBjb2xvck1hc2tHLCBqYm9vbGVhbiBjb2xvck1hc2tCLCBqYm9vbGVhbiBjb2xvck1hc2tBLAogICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBkZXB0aE1hc2ssIGpib29sZWFuIGRpdGhlckVuYWJsZSwKICAgICAgICAgICAgICAgICAgICAgamludCBzcmNGdW5jLCBqaW50IGRlc3RGdW5jLAogICAgICAgICAgICAgICAgICAgICBqaW50IGRlcHRoRnVuYykKIHsKICAgICBMT0dfQVBJKCJuUHJvZ3JhbVN0b3JlQ3JlYXRlLCBjb24oJXApIiwgY29uKTsKLSAgICByZXR1cm4gKGppbnQpcnNQcm9ncmFtU3RvcmVDcmVhdGUoY29uLCBjb2xvck1hc2tSLCBjb2xvck1hc2tHLCBjb2xvck1hc2tCLCBjb2xvck1hc2tBLAorICAgIHJldHVybiAoamludClyc1Byb2dyYW1TdG9yZUNyZWF0ZSgoUnNDb250ZXh0KWNvbiwgY29sb3JNYXNrUiwgY29sb3JNYXNrRywgY29sb3JNYXNrQiwgY29sb3JNYXNrQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhNYXNrLCBkaXRoZXJFbmFibGUsIChSc0JsZW5kU3JjRnVuYylzcmNGdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNCbGVuZERzdEZ1bmMpZGVzdEZ1bmMsIChSc0RlcHRoRnVuYylkZXB0aEZ1bmMpOwogfQpAQCAtMTMyNCwzMCArMTI2OSwzMCBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyB2b2lkCi1uUHJvZ3JhbUJpbmRDb25zdGFudHMoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHZwdiwgamludCBzbG90LCBqaW50IGEpCituUHJvZ3JhbUJpbmRDb25zdGFudHMoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHZwdiwgamludCBzbG90LCBqbG9uZyBhKQogewogICAgIExPR19BUEkoIm5Qcm9ncmFtQmluZENvbnN0YW50cywgY29uKCVwKSwgdnBmKCVwKSwgc2xvYXQoJWkpLCBhKCVwKSIsIGNvbiwgKFJzUHJvZ3JhbVZlcnRleCl2cHYsIHNsb3QsIChSc0FsbG9jYXRpb24pYSk7Ci0gICAgcnNQcm9ncmFtQmluZENvbnN0YW50cyhjb24sIChSc1Byb2dyYW0pdnB2LCBzbG90LCAoUnNBbGxvY2F0aW9uKWEpOworICAgIHJzUHJvZ3JhbUJpbmRDb25zdGFudHMoKFJzQ29udGV4dCljb24sIChSc1Byb2dyYW0pdnB2LCBzbG90LCAoUnNBbGxvY2F0aW9uKWEpOwogfQogCiBzdGF0aWMgdm9pZAotblByb2dyYW1CaW5kVGV4dHVyZShKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgdnBmLCBqaW50IHNsb3QsIGppbnQgYSkKK25Qcm9ncmFtQmluZFRleHR1cmUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIHZwZiwgamludCBzbG90LCBqbG9uZyBhKQogewogICAgIExPR19BUEkoIm5Qcm9ncmFtQmluZFRleHR1cmUsIGNvbiglcCksIHZwZiglcCksIHNsb3QoJWkpLCBhKCVwKSIsIGNvbiwgKFJzUHJvZ3JhbUZyYWdtZW50KXZwZiwgc2xvdCwgKFJzQWxsb2NhdGlvbilhKTsKLSAgICByc1Byb2dyYW1CaW5kVGV4dHVyZShjb24sIChSc1Byb2dyYW1GcmFnbWVudCl2cGYsIHNsb3QsIChSc0FsbG9jYXRpb24pYSk7CisgICAgcnNQcm9ncmFtQmluZFRleHR1cmUoKFJzQ29udGV4dCljb24sIChSc1Byb2dyYW1GcmFnbWVudCl2cGYsIHNsb3QsIChSc0FsbG9jYXRpb24pYSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1uUHJvZ3JhbUJpbmRTYW1wbGVyKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCB2cGYsIGppbnQgc2xvdCwgamludCBhKQorblByb2dyYW1CaW5kU2FtcGxlcihKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgdnBmLCBqaW50IHNsb3QsIGpsb25nIGEpCiB7CiAgICAgTE9HX0FQSSgiblByb2dyYW1CaW5kU2FtcGxlciwgY29uKCVwKSwgdnBmKCVwKSwgc2xvdCglaSksIGEoJXApIiwgY29uLCAoUnNQcm9ncmFtRnJhZ21lbnQpdnBmLCBzbG90LCAoUnNTYW1wbGVyKWEpOwotICAgIHJzUHJvZ3JhbUJpbmRTYW1wbGVyKGNvbiwgKFJzUHJvZ3JhbUZyYWdtZW50KXZwZiwgc2xvdCwgKFJzU2FtcGxlcilhKTsKKyAgICByc1Byb2dyYW1CaW5kU2FtcGxlcigoUnNDb250ZXh0KWNvbiwgKFJzUHJvZ3JhbUZyYWdtZW50KXZwZiwgc2xvdCwgKFJzU2FtcGxlcilhKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBqaW50Ci1uUHJvZ3JhbUZyYWdtZW50Q3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwganN0cmluZyBzaGFkZXIsCitzdGF0aWMgamxvbmcKK25Qcm9ncmFtRnJhZ21lbnRDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpzdHJpbmcgc2hhZGVyLAogICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0QXJyYXkgdGV4TmFtZXMsIGppbnRBcnJheSBwYXJhbXMpCiB7CiAgICAgQXV0b0phdmFTdHJpbmdUb1VURjggc2hhZGVyVVRGKF9lbnYsIHNoYWRlcik7CkBAIC0xMzYxLDcgKzEzMDYsNyBAQAogCiAgICAgTE9HX0FQSSgiblByb2dyYW1GcmFnbWVudENyZWF0ZSwgY29uKCVwKSwgcGFyYW1MZW4oJWkpIiwgY29uLCBwYXJhbUxlbik7CiAKLSAgICBqaW50IHJldCA9IChqaW50KXJzUHJvZ3JhbUZyYWdtZW50Q3JlYXRlKGNvbiwgc2hhZGVyVVRGLmNfc3RyKCksIHNoYWRlclVURi5sZW5ndGgoKSwKKyAgICBqbG9uZyByZXQgPSAoamxvbmcpcnNQcm9ncmFtRnJhZ21lbnRDcmVhdGUoKFJzQ29udGV4dCljb24sIHNoYWRlclVURi5jX3N0cigpLCBzaGFkZXJVVEYubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lQXJyYXksIHRleENvdW50LCBzaXplQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgKilwYXJhbVB0ciwgcGFyYW1MZW4pOwogCkBAIC0xMzcyLDggKzEzMTcsOCBAQAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIGppbnQKLW5Qcm9ncmFtVmVydGV4Q3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwganN0cmluZyBzaGFkZXIsCitzdGF0aWMgamxvbmcKK25Qcm9ncmFtVmVydGV4Q3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqc3RyaW5nIHNoYWRlciwKICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3RBcnJheSB0ZXhOYW1lcywgamludEFycmF5IHBhcmFtcykKIHsKICAgICBBdXRvSmF2YVN0cmluZ1RvVVRGOCBzaGFkZXJVVEYoX2Vudiwgc2hhZGVyKTsKQEAgLTEzODcsNyArMTMzMiw3IEBACiAgICAgY29uc3QgY2hhciAqKiBuYW1lQXJyYXkgPSBuYW1lcy5jX3N0cigpOwogICAgIHNpemVfdCogc2l6ZUFycmF5ID0gbmFtZXMuY19zdHJfbGVuKCk7CiAKLSAgICBqaW50IHJldCA9IChqaW50KXJzUHJvZ3JhbVZlcnRleENyZWF0ZShjb24sIHNoYWRlclVURi5jX3N0cigpLCBzaGFkZXJVVEYubGVuZ3RoKCksCisgICAgamxvbmcgcmV0ID0gKGpsb25nKXJzUHJvZ3JhbVZlcnRleENyZWF0ZSgoUnNDb250ZXh0KWNvbiwgc2hhZGVyVVRGLmNfc3RyKCksIHNoYWRlclVURi5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lQXJyYXksIHRleENvdW50LCBzaXplQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopcGFyYW1QdHIsIHBhcmFtTGVuKTsKIApAQCAtMTM5Nyw2MCArMTM0Miw2MCBAQAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIGppbnQKLW5Qcm9ncmFtUmFzdGVyQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamJvb2xlYW4gcG9pbnRTcHJpdGUsIGppbnQgY3VsbCkKK3N0YXRpYyBqbG9uZworblByb2dyYW1SYXN0ZXJDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpib29sZWFuIHBvaW50U3ByaXRlLCBqaW50IGN1bGwpCiB7CiAgICAgTE9HX0FQSSgiblByb2dyYW1SYXN0ZXJDcmVhdGUsIGNvbiglcCksIHBvaW50U3ByaXRlKCVpKSwgY3VsbCglaSkiLCBjb24sIHBvaW50U3ByaXRlLCBjdWxsKTsKLSAgICByZXR1cm4gKGppbnQpcnNQcm9ncmFtUmFzdGVyQ3JlYXRlKGNvbiwgcG9pbnRTcHJpdGUsIChSc0N1bGxNb2RlKWN1bGwpOworICAgIHJldHVybiAoamludClyc1Byb2dyYW1SYXN0ZXJDcmVhdGUoKFJzQ29udGV4dCljb24sIHBvaW50U3ByaXRlLCAoUnNDdWxsTW9kZSljdWxsKTsKIH0KIAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RhdGljIHZvaWQKLW5Db250ZXh0QmluZFJvb3RTY3JpcHQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHNjcmlwdCkKK25Db250ZXh0QmluZFJvb3RTY3JpcHQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnQgc2NyaXB0KQogewogICAgIExPR19BUEkoIm5Db250ZXh0QmluZFJvb3RTY3JpcHQsIGNvbiglcCksIHNjcmlwdCglcCkiLCBjb24sIChSc1NjcmlwdClzY3JpcHQpOwotICAgIHJzQ29udGV4dEJpbmRSb290U2NyaXB0KGNvbiwgKFJzU2NyaXB0KXNjcmlwdCk7CisgICAgcnNDb250ZXh0QmluZFJvb3RTY3JpcHQoKFJzQ29udGV4dCljb24sIChSc1NjcmlwdClzY3JpcHQpOwogfQogCiBzdGF0aWMgdm9pZAotbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBwZnMpCituQ29udGV4dEJpbmRQcm9ncmFtU3RvcmUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnQgcGZzKQogewogICAgIExPR19BUEkoIm5Db250ZXh0QmluZFByb2dyYW1TdG9yZSwgY29uKCVwKSwgcGZzKCVwKSIsIGNvbiwgKFJzUHJvZ3JhbVN0b3JlKXBmcyk7Ci0gICAgcnNDb250ZXh0QmluZFByb2dyYW1TdG9yZShjb24sIChSc1Byb2dyYW1TdG9yZSlwZnMpOworICAgIHJzQ29udGV4dEJpbmRQcm9ncmFtU3RvcmUoKFJzQ29udGV4dCljb24sIChSc1Byb2dyYW1TdG9yZSlwZnMpOwogfQogCiBzdGF0aWMgdm9pZAotbkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBwZikKK25Db250ZXh0QmluZFByb2dyYW1GcmFnbWVudChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamludCBwZikKIHsKICAgICBMT0dfQVBJKCJuQ29udGV4dEJpbmRQcm9ncmFtRnJhZ21lbnQsIGNvbiglcCksIHBmKCVwKSIsIGNvbiwgKFJzUHJvZ3JhbUZyYWdtZW50KXBmKTsKLSAgICByc0NvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50KGNvbiwgKFJzUHJvZ3JhbUZyYWdtZW50KXBmKTsKKyAgICByc0NvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50KChSc0NvbnRleHQpY29uLCAoUnNQcm9ncmFtRnJhZ21lbnQpcGYpOwogfQogCiBzdGF0aWMgdm9pZAotbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgcGYpCituQ29udGV4dEJpbmRQcm9ncmFtVmVydGV4KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqaW50IHBmKQogewogICAgIExPR19BUEkoIm5Db250ZXh0QmluZFByb2dyYW1WZXJ0ZXgsIGNvbiglcCksIHBmKCVwKSIsIGNvbiwgKFJzUHJvZ3JhbVZlcnRleClwZik7Ci0gICAgcnNDb250ZXh0QmluZFByb2dyYW1WZXJ0ZXgoY29uLCAoUnNQcm9ncmFtVmVydGV4KXBmKTsKKyAgICByc0NvbnRleHRCaW5kUHJvZ3JhbVZlcnRleCgoUnNDb250ZXh0KWNvbiwgKFJzUHJvZ3JhbVZlcnRleClwZik7CiB9CiAKIHN0YXRpYyB2b2lkCi1uQ29udGV4dEJpbmRQcm9ncmFtUmFzdGVyKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBwZikKK25Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnQgcGYpCiB7CiAgICAgTE9HX0FQSSgibkNvbnRleHRCaW5kUHJvZ3JhbVJhc3RlciwgY29uKCVwKSwgcGYoJXApIiwgY29uLCAoUnNQcm9ncmFtUmFzdGVyKXBmKTsKLSAgICByc0NvbnRleHRCaW5kUHJvZ3JhbVJhc3Rlcihjb24sIChSc1Byb2dyYW1SYXN0ZXIpcGYpOworICAgIHJzQ29udGV4dEJpbmRQcm9ncmFtUmFzdGVyKChSc0NvbnRleHQpY29uLCAoUnNQcm9ncmFtUmFzdGVyKXBmKTsKIH0KIAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RhdGljIGppbnQKLW5TYW1wbGVyQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBtYWdGaWx0ZXIsIGppbnQgbWluRmlsdGVyLAorblNhbXBsZXJDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGppbnQgbWFnRmlsdGVyLCBqaW50IG1pbkZpbHRlciwKICAgICAgICAgICAgICAgIGppbnQgd3JhcFMsIGppbnQgd3JhcFQsIGppbnQgd3JhcFIsIGpmbG9hdCBhbmlzbykKIHsKICAgICBMT0dfQVBJKCJuU2FtcGxlckNyZWF0ZSwgY29uKCVwKSIsIGNvbik7Ci0gICAgcmV0dXJuIChqaW50KXJzU2FtcGxlckNyZWF0ZShjb24sCisgICAgcmV0dXJuIChqaW50KXJzU2FtcGxlckNyZWF0ZSgoUnNDb250ZXh0KWNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc1NhbXBsZXJWYWx1ZSltYWdGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNTYW1wbGVyVmFsdWUpbWluRmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzU2FtcGxlclZhbHVlKXdyYXBTLApAQCAtMTQ2MSwxOSArMTQwNiwxOCBAQAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLy9uYXRpdmUgaW50ICByc25QYXRoQ3JlYXRlKGludCBjb24sIGludCBwcmltLCBib29sZWFuIGlzU3RhdGljLCBpbnQgdnR4LCBpbnQgbG9vcCwgZmxvYXQgcSk7Ci1zdGF0aWMgamludAotblBhdGhDcmVhdGUoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBSc0NvbnRleHQgY29uLCBqaW50IHByaW0sIGpib29sZWFuIGlzU3RhdGljLCBqaW50IF92dHgsIGppbnQgX2xvb3AsIGpmbG9hdCBxKSB7CitzdGF0aWMgamxvbmcKK25QYXRoQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqaW50IHByaW0sIGpib29sZWFuIGlzU3RhdGljLCBqbG9uZyBfdnR4LCBqaW50IF9sb29wLCBqZmxvYXQgcSkgewogICAgIExPR19BUEkoIm5QYXRoQ3JlYXRlLCBjb24oJXApIiwgY29uKTsKIAotICAgIGludCBpZCA9IChpbnQpcnNQYXRoQ3JlYXRlKGNvbiwgKFJzUGF0aFByaW1pdGl2ZSlwcmltLCBpc1N0YXRpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNBbGxvY2F0aW9uKV92dHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzQWxsb2NhdGlvbilfbG9vcCwgcSk7CisgICAgamxvbmcgaWQgPSAoamxvbmcpcnNQYXRoQ3JlYXRlKChSc0NvbnRleHQpY29uLCAoUnNQYXRoUHJpbWl0aXZlKXByaW0sIGlzU3RhdGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNBbGxvY2F0aW9uKV92dHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSc0FsbG9jYXRpb24pX2xvb3AsIHEpOwogICAgIHJldHVybiBpZDsKIH0KIAotc3RhdGljIGppbnQKLW5NZXNoQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludEFycmF5IF92dHgsIGppbnRBcnJheSBfaWR4LCBqaW50QXJyYXkgX3ByaW0pCitzdGF0aWMgamxvbmcKK25NZXNoQ3JlYXRlKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqaW50QXJyYXkgX3Z0eCwgamludEFycmF5IF9pZHgsIGppbnRBcnJheSBfcHJpbSkKIHsKICAgICBMT0dfQVBJKCJuTWVzaENyZWF0ZSwgY29uKCVwKSIsIGNvbik7CiAKQEAgLTE0ODQsNyArMTQyOCw3IEBACiAgICAgamludCBwcmltTGVuID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgoX3ByaW0pOwogICAgIGppbnQgKnByaW1QdHIgPSBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9wcmltLCBOVUxMKTsKIAotICAgIGludCBpZCA9IChpbnQpcnNNZXNoQ3JlYXRlKGNvbiwKKyAgICBpbnQgaWQgPSAoaW50KXJzTWVzaENyZWF0ZSgoUnNDb250ZXh0KWNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUnNBbGxvY2F0aW9uICopdnR4UHRyLCB2dHhMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJzQWxsb2NhdGlvbiAqKWlkeFB0ciwgaWR4TGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKXByaW1QdHIsIHByaW1MZW4pOwpAQCAtMTQ5NiwzMCArMTQ0MCwzMCBAQAogfQogCiBzdGF0aWMgamludAotbk1lc2hHZXRWZXJ0ZXhCdWZmZXJDb3VudChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgbWVzaCkKK25NZXNoR2V0VmVydGV4QnVmZmVyQ291bnQoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBjb24sIGpsb25nIG1lc2gpCiB7CiAgICAgTE9HX0FQSSgibk1lc2hHZXRWZXJ0ZXhCdWZmZXJDb3VudCwgY29uKCVwKSwgTWVzaCglcCkiLCBjb24sIChSc01lc2gpbWVzaCk7CiAgICAgamludCB2dHhDb3VudCA9IDA7Ci0gICAgcnNhTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50KGNvbiwgKFJzTWVzaCltZXNoLCAmdnR4Q291bnQpOworICAgIHJzYU1lc2hHZXRWZXJ0ZXhCdWZmZXJDb3VudCgoUnNDb250ZXh0KWNvbiwgKFJzTWVzaCltZXNoLCAmdnR4Q291bnQpOwogICAgIHJldHVybiB2dHhDb3VudDsKIH0KIAogc3RhdGljIGppbnQKLW5NZXNoR2V0SW5kZXhDb3VudChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgbWVzaCkKK25NZXNoR2V0SW5kZXhDb3VudChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgbWVzaCkKIHsKICAgICBMT0dfQVBJKCJuTWVzaEdldEluZGV4Q291bnQsIGNvbiglcCksIE1lc2goJXApIiwgY29uLCAoUnNNZXNoKW1lc2gpOwogICAgIGppbnQgaWR4Q291bnQgPSAwOwotICAgIHJzYU1lc2hHZXRJbmRleENvdW50KGNvbiwgKFJzTWVzaCltZXNoLCAmaWR4Q291bnQpOworICAgIHJzYU1lc2hHZXRJbmRleENvdW50KChSc0NvbnRleHQpY29uLCAoUnNNZXNoKW1lc2gsICZpZHhDb3VudCk7CiAgICAgcmV0dXJuIGlkeENvdW50OwogfQogCiBzdGF0aWMgdm9pZAotbk1lc2hHZXRWZXJ0aWNlcyhKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIFJzQ29udGV4dCBjb24sIGppbnQgbWVzaCwgamludEFycmF5IF9pZHMsIGludCBudW1WdHhJRHMpCituTWVzaEdldFZlcnRpY2VzKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamxvbmcgY29uLCBqbG9uZyBtZXNoLCBqaW50QXJyYXkgX2lkcywgaW50IG51bVZ0eElEcykKIHsKICAgICBMT0dfQVBJKCJuTWVzaEdldFZlcnRpY2VzLCBjb24oJXApLCBNZXNoKCVwKSIsIGNvbiwgKFJzTWVzaCltZXNoKTsKIAogICAgIFJzQWxsb2NhdGlvbiAqYWxsb2NzID0gKFJzQWxsb2NhdGlvbiopbWFsbG9jKCh1aW50MzJfdCludW1WdHhJRHMgKiBzaXplb2YoUnNBbGxvY2F0aW9uKSk7Ci0gICAgcnNhTWVzaEdldFZlcnRpY2VzKGNvbiwgKFJzTWVzaCltZXNoLCBhbGxvY3MsICh1aW50MzJfdCludW1WdHhJRHMpOworICAgIHJzYU1lc2hHZXRWZXJ0aWNlcygoUnNDb250ZXh0KWNvbiwgKFJzTWVzaCltZXNoLCBhbGxvY3MsICh1aW50MzJfdCludW1WdHhJRHMpOwogCiAgICAgZm9yKGppbnQgaSA9IDA7IGkgPCBudW1WdHhJRHM7IGkgKyspIHsKICAgICAgICAgX2Vudi0+U2V0SW50QXJyYXlSZWdpb24oX2lkcywgaSwgMSwgKGNvbnN0IGppbnQqKSZhbGxvY3NbaV0pOwpAQCAtMTUyOSwxNCArMTQ3MywxNCBAQAogfQogCiBzdGF0aWMgdm9pZAotbk1lc2hHZXRJbmRpY2VzKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgUnNDb250ZXh0IGNvbiwgamludCBtZXNoLCBqaW50QXJyYXkgX2lkeElkcywgamludEFycmF5IF9wcmltaXRpdmVzLCBpbnQgbnVtSW5kaWNlcykKK25NZXNoR2V0SW5kaWNlcyhKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIGNvbiwgamxvbmcgbWVzaCwgamludEFycmF5IF9pZHhJZHMsIGppbnRBcnJheSBfcHJpbWl0aXZlcywgaW50IG51bUluZGljZXMpCiB7CiAgICAgTE9HX0FQSSgibk1lc2hHZXRWZXJ0aWNlcywgY29uKCVwKSwgTWVzaCglcCkiLCBjb24sIChSc01lc2gpbWVzaCk7CiAKICAgICBSc0FsbG9jYXRpb24gKmFsbG9jcyA9IChSc0FsbG9jYXRpb24qKW1hbGxvYygodWludDMyX3QpbnVtSW5kaWNlcyAqIHNpemVvZihSc0FsbG9jYXRpb24pKTsKICAgICB1aW50MzJfdCAqcHJpbXM9ICh1aW50MzJfdCopbWFsbG9jKCh1aW50MzJfdCludW1JbmRpY2VzICogc2l6ZW9mKHVpbnQzMl90KSk7CiAKLSAgICByc2FNZXNoR2V0SW5kaWNlcyhjb24sIChSc01lc2gpbWVzaCwgYWxsb2NzLCBwcmltcywgKHVpbnQzMl90KW51bUluZGljZXMpOworICAgIHJzYU1lc2hHZXRJbmRpY2VzKChSc0NvbnRleHQpY29uLCAoUnNNZXNoKW1lc2gsIGFsbG9jcywgcHJpbXMsICh1aW50MzJfdCludW1JbmRpY2VzKTsKIAogICAgIGZvcihqaW50IGkgPSAwOyBpIDwgbnVtSW5kaWNlczsgaSArKykgewogICAgICAgICBfZW52LT5TZXRJbnRBcnJheVJlZ2lvbihfaWR4SWRzLCBpLCAxLCAoY29uc3QgamludCopJmFsbG9jc1tpXSk7CkBAIC0xNTU1LDE0MiArMTQ5OSwxMzIgQEAKIHN0YXRpYyBKTklOYXRpdmVNZXRob2QgbWV0aG9kc1tdID0gewogeyJfbkluaXQiLCAgICAgICAgICAgICAgICAgICAgICAgICAiKClWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKV9uSW5pdCB9LAogCi17Im5EZXZpY2VDcmVhdGUiLCAgICAgICAgICAgICAgICAgICIoKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkRldmljZUNyZWF0ZSB9LAoteyJuRGV2aWNlRGVzdHJveSIsICAgICAgICAgICAgICAgICAiKEkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5EZXZpY2VEZXN0cm95IH0sCi17Im5EZXZpY2VTZXRDb25maWciLCAgICAgICAgICAgICAgICIoSUlJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkRldmljZVNldENvbmZpZyB9LAoteyJuQ29udGV4dEdldFVzZXJNZXNzYWdlIiwgICAgICAgICAiKElbSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0R2V0VXNlck1lc3NhZ2UgfSwKLXsibkNvbnRleHRHZXRFcnJvck1lc3NhZ2UiLCAgICAgICAgIihJKUxqYXZhL2xhbmcvU3RyaW5nOyIsICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dEdldEVycm9yTWVzc2FnZSB9LAoteyJuQ29udGV4dFBlZWtNZXNzYWdlIiwgICAgICAgICAgICAiKElbSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0UGVla01lc3NhZ2UgfSwKK3sibkRldmljZUNyZWF0ZSIsICAgICAgICAgICAgICAgICAgIigpSiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluRGV2aWNlQ3JlYXRlIH0sCit7Im5EZXZpY2VEZXN0cm95IiwgICAgICAgICAgICAgICAgICIoSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkRldmljZURlc3Ryb3kgfSwKK3sibkRldmljZVNldENvbmZpZyIsICAgICAgICAgICAgICAgIihKSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluRGV2aWNlU2V0Q29uZmlnIH0sCit7Im5Db250ZXh0R2V0VXNlck1lc3NhZ2UiLCAgICAgICAgICIoSltJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRHZXRVc2VyTWVzc2FnZSB9LAoreyJuQ29udGV4dEdldEVycm9yTWVzc2FnZSIsICAgICAgICAiKEopTGphdmEvbGFuZy9TdHJpbmc7IiwgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0R2V0RXJyb3JNZXNzYWdlIH0sCit7Im5Db250ZXh0UGVla01lc3NhZ2UiLCAgICAgICAgICAgICIoSltJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRQZWVrTWVzc2FnZSB9LAogCi17Im5Db250ZXh0SW5pdFRvQ2xpZW50IiwgICAgICAgICAgICIoSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRJbml0VG9DbGllbnQgfSwKLXsibkNvbnRleHREZWluaXRUb0NsaWVudCIsICAgICAgICAgIihJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dERlaW5pdFRvQ2xpZW50IH0sCit7Im5Db250ZXh0SW5pdFRvQ2xpZW50IiwgICAgICAgICAgICIoSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRJbml0VG9DbGllbnQgfSwKK3sibkNvbnRleHREZWluaXRUb0NsaWVudCIsICAgICAgICAgIihKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dERlaW5pdFRvQ2xpZW50IH0sCiAKIAogLy8gQWxsIG1ldGhvZHMgYmVsb3cgYXJlIHRocmVhZCBwcm90ZWN0ZWQgaW4gamF2YS4KLXsicnNuQ29udGV4dENyZWF0ZSIsICAgICAgICAgICAgICAgICAiKElJSUkpSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dENyZWF0ZSB9LAoteyJyc25Db250ZXh0Q3JlYXRlR0wiLCAgICAgICAgICAgICAgICIoSUlJSUlJSUlJSUlJSUZJKUkiLCAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0Q3JlYXRlR0wgfSwKLXsicnNuQ29udGV4dEZpbmlzaCIsICAgICAgICAgICAgICAgICAiKEkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dEZpbmlzaCB9LAoteyJyc25Db250ZXh0U2V0UHJpb3JpdHkiLCAgICAgICAgICAgICIoSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0U2V0UHJpb3JpdHkgfSwKLXsicnNuQ29udGV4dFNldFN1cmZhY2UiLCAgICAgICAgICAgICAiKElJSUxhbmRyb2lkL3ZpZXcvU3VyZmFjZTspViIsICAgICAgICAgICh2b2lkKiluQ29udGV4dFNldFN1cmZhY2UgfSwKLXsicnNuQ29udGV4dERlc3Ryb3kiLCAgICAgICAgICAgICAgICAiKEkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dERlc3Ryb3kgfSwKLXsicnNuQ29udGV4dER1bXAiLCAgICAgICAgICAgICAgICAgICAiKElJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dER1bXAgfSwKLXsicnNuQ29udGV4dFBhdXNlIiwgICAgICAgICAgICAgICAgICAiKEkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dFBhdXNlIH0sCi17InJzbkNvbnRleHRSZXN1bWUiLCAgICAgICAgICAgICAgICAgIihJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRSZXN1bWUgfSwKLXsicnNuQ29udGV4dFNlbmRNZXNzYWdlIiwgICAgICAgICAgICAiKElJW0kpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dFNlbmRNZXNzYWdlIH0sCi17InJzbkFzc2lnbk5hbWUiLCAgICAgICAgICAgICAgICAgICAgIihJSVtCKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFzc2lnbk5hbWUgfSwKLXsicnNuR2V0TmFtZSIsICAgICAgICAgICAgICAgICAgICAgICAiKElJKUxqYXZhL2xhbmcvU3RyaW5nOyIsICAgICAgICAgICAgICAgICh2b2lkKiluR2V0TmFtZSB9LAoteyJyc25PYmpEZXN0cm95IiwgICAgICAgICAgICAgICAgICAgICIoSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5PYmpEZXN0cm95IH0sCit7InJzbkNvbnRleHRDcmVhdGUiLCAgICAgICAgICAgICAgICAgIihKSUlJKUoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRDcmVhdGUgfSwKK3sicnNuQ29udGV4dENyZWF0ZUdMIiwgICAgICAgICAgICAgICAiKEpJSUlJSUlJSUlJSUlGSSlKIiwgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dENyZWF0ZUdMIH0sCit7InJzbkNvbnRleHRGaW5pc2giLCAgICAgICAgICAgICAgICAgIihKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRGaW5pc2ggfSwKK3sicnNuQ29udGV4dFNldFByaW9yaXR5IiwgICAgICAgICAgICAiKEpJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dFNldFByaW9yaXR5IH0sCit7InJzbkNvbnRleHRTZXRTdXJmYWNlIiwgICAgICAgICAgICAgIihKSUlMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiLCAgICAgICAgICAodm9pZCopbkNvbnRleHRTZXRTdXJmYWNlIH0sCit7InJzbkNvbnRleHREZXN0cm95IiwgICAgICAgICAgICAgICAgIihKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHREZXN0cm95IH0sCit7InJzbkNvbnRleHREdW1wIiwgICAgICAgICAgICAgICAgICAgIihKSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHREdW1wIH0sCit7InJzbkNvbnRleHRQYXVzZSIsICAgICAgICAgICAgICAgICAgIihKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRQYXVzZSB9LAoreyJyc25Db250ZXh0UmVzdW1lIiwgICAgICAgICAgICAgICAgICIoSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0UmVzdW1lIH0sCit7InJzbkNvbnRleHRTZW5kTWVzc2FnZSIsICAgICAgICAgICAgIihKSVtJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRTZW5kTWVzc2FnZSB9LAoreyJyc25Bc3NpZ25OYW1lIiwgICAgICAgICAgICAgICAgICAgICIoSkpbQilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Bc3NpZ25OYW1lIH0sCit7InJzbkdldE5hbWUiLCAgICAgICAgICAgICAgICAgICAgICAgIihKSilMamF2YS9sYW5nL1N0cmluZzsiLCAgICAgICAgICAgICAgICAodm9pZCopbkdldE5hbWUgfSwKK3sicnNuT2JqRGVzdHJveSIsICAgICAgICAgICAgICAgICAgICAiKEpKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluT2JqRGVzdHJveSB9LAogCi17InJzbkZpbGVBM0RDcmVhdGVGcm9tRmlsZSIsICAgICAgICAgIihJTGphdmEvbGFuZy9TdHJpbmc7KUkiLCAgICAgICAgICAgICAgICAodm9pZCopbkZpbGVBM0RDcmVhdGVGcm9tRmlsZSB9LAoteyJyc25GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0U3RyZWFtIiwgICIoSUkpSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5GaWxlQTNEQ3JlYXRlRnJvbUFzc2V0U3RyZWFtIH0sCi17InJzbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXQiLCAgICAgICAgIihJTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRNYW5hZ2VyO0xqYXZhL2xhbmcvU3RyaW5nOylJIiwgICAgICAgICAgICAodm9pZCopbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXQgfSwKLXsicnNuRmlsZUEzREdldE51bUluZGV4RW50cmllcyIsICAgICAiKElJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluRmlsZUEzREdldE51bUluZGV4RW50cmllcyB9LAoteyJyc25GaWxlQTNER2V0SW5kZXhFbnRyaWVzIiwgICAgICAgICIoSUlJW0lbTGphdmEvbGFuZy9TdHJpbmc7KVYiLCAgICAgICAgICAgKHZvaWQqKW5GaWxlQTNER2V0SW5kZXhFbnRyaWVzIH0sCi17InJzbkZpbGVBM0RHZXRFbnRyeUJ5SW5kZXgiLCAgICAgICAgIihJSUkpSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkZpbGVBM0RHZXRFbnRyeUJ5SW5kZXggfSwKK3sicnNuRmlsZUEzRENyZWF0ZUZyb21GaWxlIiwgICAgICAgICAiKEpMamF2YS9sYW5nL1N0cmluZzspSiIsICAgICAgICAgICAgICAgICh2b2lkKiluRmlsZUEzRENyZWF0ZUZyb21GaWxlIH0sCit7InJzbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXRTdHJlYW0iLCAgIihKSSlKIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkZpbGVBM0RDcmVhdGVGcm9tQXNzZXRTdHJlYW0gfSwKK3sicnNuRmlsZUEzRENyZWF0ZUZyb21Bc3NldCIsICAgICAgICAiKEpMYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXI7TGphdmEvbGFuZy9TdHJpbmc7KUoiLCAgICAgICAgICAgICh2b2lkKiluRmlsZUEzRENyZWF0ZUZyb21Bc3NldCB9LAoreyJyc25GaWxlQTNER2V0TnVtSW5kZXhFbnRyaWVzIiwgICAgICIoSkopSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5GaWxlQTNER2V0TnVtSW5kZXhFbnRyaWVzIH0sCit7InJzbkZpbGVBM0RHZXRJbmRleEVudHJpZXMiLCAgICAgICAgIihKSklbSVtMamF2YS9sYW5nL1N0cmluZzspViIsICAgICAgICAgICAodm9pZCopbkZpbGVBM0RHZXRJbmRleEVudHJpZXMgfSwKK3sicnNuRmlsZUEzREdldEVudHJ5QnlJbmRleCIsICAgICAgICAiKEpKSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluRmlsZUEzREdldEVudHJ5QnlJbmRleCB9LAogCi17InJzbkZvbnRDcmVhdGVGcm9tRmlsZSIsICAgICAgICAgICAgIihJTGphdmEvbGFuZy9TdHJpbmc7RkkpSSIsICAgICAgICAgICAgICAodm9pZCopbkZvbnRDcmVhdGVGcm9tRmlsZSB9LAoteyJyc25Gb250Q3JlYXRlRnJvbUFzc2V0U3RyZWFtIiwgICAgICIoSUxqYXZhL2xhbmcvU3RyaW5nO0ZJSSlJIiwgICAgICAgICAgICAgKHZvaWQqKW5Gb250Q3JlYXRlRnJvbUFzc2V0U3RyZWFtIH0sCi17InJzbkZvbnRDcmVhdGVGcm9tQXNzZXQiLCAgICAgICAgIihJTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRNYW5hZ2VyO0xqYXZhL2xhbmcvU3RyaW5nO0ZJKUkiLCAgICAgICAgICAgICh2b2lkKiluRm9udENyZWF0ZUZyb21Bc3NldCB9LAoreyJyc25Gb250Q3JlYXRlRnJvbUZpbGUiLCAgICAgICAgICAgICIoSkxqYXZhL2xhbmcvU3RyaW5nO0ZJKUkiLCAgICAgICAgICAgICAgKHZvaWQqKW5Gb250Q3JlYXRlRnJvbUZpbGUgfSwKK3sicnNuRm9udENyZWF0ZUZyb21Bc3NldFN0cmVhbSIsICAgICAiKEpMamF2YS9sYW5nL1N0cmluZztGSUkpSSIsICAgICAgICAgICAgICh2b2lkKiluRm9udENyZWF0ZUZyb21Bc3NldFN0cmVhbSB9LAoreyJyc25Gb250Q3JlYXRlRnJvbUFzc2V0IiwgICAgICAgICIoSkxhbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0TWFuYWdlcjtMamF2YS9sYW5nL1N0cmluZztGSSlJIiwgICAgICAgICAgICAodm9pZCopbkZvbnRDcmVhdGVGcm9tQXNzZXQgfSwKIAoteyJyc25FbGVtZW50Q3JlYXRlIiwgICAgICAgICAgICAgICAgICIoSUlJWkkpSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5FbGVtZW50Q3JlYXRlIH0sCi17InJzbkVsZW1lbnRDcmVhdGUyIiwgICAgICAgICAgICAgICAgIihJW0lbTGphdmEvbGFuZy9TdHJpbmc7W0kpSSIsICAgICAgICAgICAodm9pZCopbkVsZW1lbnRDcmVhdGUyIH0sCi17InJzbkVsZW1lbnRHZXROYXRpdmVEYXRhIiwgICAgICAgICAgIihJSVtJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkVsZW1lbnRHZXROYXRpdmVEYXRhIH0sCi17InJzbkVsZW1lbnRHZXRTdWJFbGVtZW50cyIsICAgICAgICAgIihJSVtJW0xqYXZhL2xhbmcvU3RyaW5nO1tJKVYiLCAgICAgICAgICAodm9pZCopbkVsZW1lbnRHZXRTdWJFbGVtZW50cyB9LAoreyJyc25FbGVtZW50Q3JlYXRlIiwgICAgICAgICAgICAgICAgICIoSkpJWkkpSiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5FbGVtZW50Q3JlYXRlIH0sCit7InJzbkVsZW1lbnRDcmVhdGUyIiwgICAgICAgICAgICAgICAgIihKW0lbTGphdmEvbGFuZy9TdHJpbmc7W0kpSiIsICAgICAgICAgICAodm9pZCopbkVsZW1lbnRDcmVhdGUyIH0sCit7InJzbkVsZW1lbnRHZXROYXRpdmVEYXRhIiwgICAgICAgICAgIihKSltJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkVsZW1lbnRHZXROYXRpdmVEYXRhIH0sCit7InJzbkVsZW1lbnRHZXRTdWJFbGVtZW50cyIsICAgICAgICAgIihKSltJW0xqYXZhL2xhbmcvU3RyaW5nO1tJKVYiLCAgICAgICAgICAodm9pZCopbkVsZW1lbnRHZXRTdWJFbGVtZW50cyB9LAogCi17InJzblR5cGVDcmVhdGUiLCAgICAgICAgICAgICAgICAgICAgIihJSUlJSVpaSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblR5cGVDcmVhdGUgfSwKLXsicnNuVHlwZUdldE5hdGl2ZURhdGEiLCAgICAgICAgICAgICAiKElJW0kpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluVHlwZUdldE5hdGl2ZURhdGEgfSwKK3sicnNuVHlwZUNyZWF0ZSIsICAgICAgICAgICAgICAgICAgICAiKEpKSUlJWlpJKUoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluVHlwZUNyZWF0ZSB9LAoreyJyc25UeXBlR2V0TmF0aXZlRGF0YSIsICAgICAgICAgICAgICIoSkpbSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5UeXBlR2V0TmF0aXZlRGF0YSB9LAogCi17InJzbkFsbG9jYXRpb25DcmVhdGVUeXBlZCIsICAgICAgICAgIihJSUlJSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uQ3JlYXRlVHlwZWQgfSwKLXsicnNuQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAiLCAgICAiKElJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtJKUkiLCAgICAgICh2b2lkKiluQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAgfSwKLXsicnNuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcEJhY2tlZEFsbG9jYXRpb24iLCAgICAiKElJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtJKUkiLCAgICAgICh2b2lkKiluQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcEJhY2tlZEFsbG9jYXRpb24gfSwKLXsicnNuQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwIiwiKElJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtJKUkiLCAgICAgICh2b2lkKiluQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwIH0sCit7InJzbkFsbG9jYXRpb25DcmVhdGVUeXBlZCIsICAgICAgICAgIihKSklJSSlKIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uQ3JlYXRlVHlwZWQgfSwKK3sicnNuQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAiLCAgICAiKEpKSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtJKUoiLCAgICAgICh2b2lkKiluQWxsb2NhdGlvbkNyZWF0ZUZyb21CaXRtYXAgfSwKK3sicnNuQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcEJhY2tlZEFsbG9jYXRpb24iLCAgICAiKEpKSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtJKUoiLCAgICAgICh2b2lkKiluQWxsb2NhdGlvbkNyZWF0ZUJpdG1hcEJhY2tlZEFsbG9jYXRpb24gfSwKK3sicnNuQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwIiwiKEpKSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDtJKUoiLCAgICAgICh2b2lkKiluQWxsb2NhdGlvbkN1YmVDcmVhdGVGcm9tQml0bWFwIH0sCiAKLXsicnNuQWxsb2NhdGlvbkNvcHlGcm9tQml0bWFwIiwgICAgICAiKElJTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylWIiwgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkNvcHlGcm9tQml0bWFwIH0sCi17InJzbkFsbG9jYXRpb25Db3B5VG9CaXRtYXAiLCAgICAgICAgIihJSUxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspViIsICAgICAgICAodm9pZCopbkFsbG9jYXRpb25Db3B5VG9CaXRtYXAgfSwKK3sicnNuQWxsb2NhdGlvbkNvcHlGcm9tQml0bWFwIiwgICAgICAiKEpKTGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwOylWIiwgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkNvcHlGcm9tQml0bWFwIH0sCit7InJzbkFsbG9jYXRpb25Db3B5VG9CaXRtYXAiLCAgICAgICAgIihKSkxhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcDspViIsICAgICAgICAodm9pZCopbkFsbG9jYXRpb25Db3B5VG9CaXRtYXAgfSwKIAoteyJyc25BbGxvY2F0aW9uU3luY0FsbCIsICAgICAgICAgICAgICIoSUlJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uU3luY0FsbCB9LAoteyJyc25BbGxvY2F0aW9uR2V0U3VyZmFjZSIsICAgICAgICAgICIoSUkpTGFuZHJvaWQvdmlldy9TdXJmYWNlOyIsICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uR2V0U3VyZmFjZSB9LAoteyJyc25BbGxvY2F0aW9uU2V0U3VyZmFjZSIsICAgICAgICAgICIoSUlMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiLCAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uU2V0U3VyZmFjZSB9LAoteyJyc25BbGxvY2F0aW9uSW9TZW5kIiwgICAgICAgICAgICAgICIoSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uSW9TZW5kIH0sCi17InJzbkFsbG9jYXRpb25Jb1JlY2VpdmUiLCAgICAgICAgICAgIihJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25Jb1JlY2VpdmUgfSwKLXsicnNuQWxsb2NhdGlvbkRhdGExRCIsICAgICAgICAgICAgICAiKElJSUlJW0lJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkRhdGExRF9pIH0sCi17InJzbkFsbG9jYXRpb25EYXRhMUQiLCAgICAgICAgICAgICAgIihJSUlJSVtTSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25EYXRhMURfcyB9LAoteyJyc25BbGxvY2F0aW9uRGF0YTFEIiwgICAgICAgICAgICAgICIoSUlJSUlbQkkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRGF0YTFEX2IgfSwKLXsicnNuQWxsb2NhdGlvbkRhdGExRCIsICAgICAgICAgICAgICAiKElJSUlJW0ZJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkRhdGExRF9mIH0sCi17InJzbkFsbG9jYXRpb25FbGVtZW50RGF0YTFEIiwgICAgICAgIihJSUlJSVtCSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25FbGVtZW50RGF0YTFEIH0sCi17InJzbkFsbG9jYXRpb25EYXRhMkQiLCAgICAgICAgICAgICAgIihJSUlJSUlJSVtJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25EYXRhMkRfaSB9LAoteyJyc25BbGxvY2F0aW9uRGF0YTJEIiwgICAgICAgICAgICAgICIoSUlJSUlJSUlbU0kpViIsICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRGF0YTJEX3MgfSwKLXsicnNuQWxsb2NhdGlvbkRhdGEyRCIsICAgICAgICAgICAgICAiKElJSUlJSUlJW0JJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkRhdGEyRF9iIH0sCi17InJzbkFsbG9jYXRpb25EYXRhMkQiLCAgICAgICAgICAgICAgIihJSUlJSUlJSVtGSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25EYXRhMkRfZiB9LAoteyJyc25BbGxvY2F0aW9uRGF0YTJEIiwgICAgICAgICAgICAgICIoSUlJSUlJSUlJSUlJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRGF0YTJEX2FsbG9jIH0sCi17InJzbkFsbG9jYXRpb25EYXRhM0QiLCAgICAgICAgICAgICAgIihJSUlJSUlJSUlbSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25EYXRhM0RfaSB9LAoteyJyc25BbGxvY2F0aW9uRGF0YTNEIiwgICAgICAgICAgICAgICIoSUlJSUlJSUlJW1NJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRGF0YTNEX3MgfSwKLXsicnNuQWxsb2NhdGlvbkRhdGEzRCIsICAgICAgICAgICAgICAiKElJSUlJSUlJSVtCSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkRhdGEzRF9iIH0sCi17InJzbkFsbG9jYXRpb25EYXRhM0QiLCAgICAgICAgICAgICAgIihJSUlJSUlJSUlbRkkpViIsICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25EYXRhM0RfZiB9LAoteyJyc25BbGxvY2F0aW9uRGF0YTNEIiwgICAgICAgICAgICAgICIoSUlJSUlJSUlJSUlJSUkpViIsICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRGF0YTNEX2FsbG9jIH0sCi17InJzbkFsbG9jYXRpb25SZWFkIiwgICAgICAgICAgICAgICAgIihJSVtJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25SZWFkX2kgfSwKLXsicnNuQWxsb2NhdGlvblJlYWQiLCAgICAgICAgICAgICAgICAiKElJW1MpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvblJlYWRfcyB9LAoteyJyc25BbGxvY2F0aW9uUmVhZCIsICAgICAgICAgICAgICAgICIoSUlbQilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uUmVhZF9iIH0sCi17InJzbkFsbG9jYXRpb25SZWFkIiwgICAgICAgICAgICAgICAgIihJSVtGKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25SZWFkX2YgfSwKLXsicnNuQWxsb2NhdGlvbkdldFR5cGUiLCAgICAgICAgICAgICAiKElJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkdldFR5cGV9LAoteyJyc25BbGxvY2F0aW9uUmVzaXplMUQiLCAgICAgICAgICAgICIoSUlJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uUmVzaXplMUQgfSwKLXsicnNuQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyIsICAgICAiKElJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkdlbmVyYXRlTWlwbWFwcyB9LAoreyJyc25BbGxvY2F0aW9uU3luY0FsbCIsICAgICAgICAgICAgICIoSkpJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uU3luY0FsbCB9LAoreyJyc25BbGxvY2F0aW9uR2V0U3VyZmFjZSIsICAgICAgICAgICIoSkopTGFuZHJvaWQvdmlldy9TdXJmYWNlOyIsICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uR2V0U3VyZmFjZSB9LAoreyJyc25BbGxvY2F0aW9uU2V0U3VyZmFjZSIsICAgICAgICAgICIoSkpMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVYiLCAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uU2V0U3VyZmFjZSB9LAoreyJyc25BbGxvY2F0aW9uSW9TZW5kIiwgICAgICAgICAgICAgICIoSkopViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uSW9TZW5kIH0sCit7InJzbkFsbG9jYXRpb25Jb1JlY2VpdmUiLCAgICAgICAgICAgIihKSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25Jb1JlY2VpdmUgfSwKK3sicnNuQWxsb2NhdGlvbkRhdGExRCIsICAgICAgICAgICAgICAiKEpKSUlJTGphdmEvbGFuZy9PYmplY3Q7SUkpViIsICAgICAgICAgICh2b2lkKiluQWxsb2NhdGlvbkRhdGExRCB9LAoreyJyc25BbGxvY2F0aW9uRWxlbWVudERhdGExRCIsICAgICAgICIoSkpJSUlbQkkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRWxlbWVudERhdGExRCB9LAoreyJyc25BbGxvY2F0aW9uRGF0YTJEIiwgICAgICAgICAgICAgICIoSkpJSUlJSUlMamF2YS9sYW5nL09iamVjdDtJSSlWIiwgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRGF0YTJEIH0sCit7InJzbkFsbG9jYXRpb25EYXRhMkQiLCAgICAgICAgICAgICAgIihKSklJSUlJSUpJSUlJKVYiLCAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25EYXRhMkRfYWxsb2MgfSwKK3sicnNuQWxsb2NhdGlvbkRhdGEzRCIsICAgICAgICAgICAgICAiKEpKSUlJSUlJSUxqYXZhL2xhbmcvT2JqZWN0O0lJKVYiLCAgICAgICh2b2lkKiluQWxsb2NhdGlvbkRhdGEzRCB9LAoreyJyc25BbGxvY2F0aW9uRGF0YTNEIiwgICAgICAgICAgICAgICIoSkpJSUlJSUlJSklJSUkpViIsICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uRGF0YTNEX2FsbG9jIH0sCit7InJzbkFsbG9jYXRpb25SZWFkIiwgICAgICAgICAgICAgICAgIihKSkxqYXZhL2xhbmcvT2JqZWN0O0kpViIsICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25SZWFkIH0sCit7InJzbkFsbG9jYXRpb25SZWFkMUQiLCAgICAgICAgICAgICAgIihKSklJSUxqYXZhL2xhbmcvT2JqZWN0O0lJKVYiLCAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25SZWFkMUQgfSwKK3sicnNuQWxsb2NhdGlvblJlYWQyRCIsICAgICAgICAgICAgICAiKEpKSUlJSUlJTGphdmEvbGFuZy9PYmplY3Q7SUkpViIsICAgICAgICh2b2lkKiluQWxsb2NhdGlvblJlYWQyRCB9LAoreyJyc25BbGxvY2F0aW9uR2V0VHlwZSIsICAgICAgICAgICAgICIoSkopSiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uR2V0VHlwZX0sCit7InJzbkFsbG9jYXRpb25SZXNpemUxRCIsICAgICAgICAgICAgIihKSkkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkFsbG9jYXRpb25SZXNpemUxRCB9LAoreyJyc25BbGxvY2F0aW9uR2VuZXJhdGVNaXBtYXBzIiwgICAgICIoSkopViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5BbGxvY2F0aW9uR2VuZXJhdGVNaXBtYXBzIH0sCiAKLXsicnNuU2NyaXB0QmluZEFsbG9jYXRpb24iLCAgICAgICAgICAiKElJSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0QmluZEFsbG9jYXRpb24gfSwKLXsicnNuU2NyaXB0U2V0VGltZVpvbmUiLCAgICAgICAgICAgICAiKElJW0IpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0U2V0VGltZVpvbmUgfSwKLXsicnNuU2NyaXB0SW52b2tlIiwgICAgICAgICAgICAgICAgICAiKElJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0SW52b2tlIH0sCi17InJzblNjcmlwdEludm9rZVYiLCAgICAgICAgICAgICAgICAgIihJSUlbQilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEludm9rZVYgfSwKLXsicnNuU2NyaXB0Rm9yRWFjaCIsICAgICAgICAgICAgICAgICAiKElJSUlJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0Rm9yRWFjaCB9LAoteyJyc25TY3JpcHRGb3JFYWNoIiwgICAgICAgICAgICAgICAgICIoSUlJSUlbQilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRGb3JFYWNoViB9LAoteyJyc25TY3JpcHRGb3JFYWNoQ2xpcHBlZCIsICAgICAgICAgICIoSUlJSUlJSUlJSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRGb3JFYWNoQ2xpcHBlZCB9LAoteyJyc25TY3JpcHRGb3JFYWNoQ2xpcHBlZCIsICAgICAgICAgICIoSUlJSUlbQklJSUlJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRGb3JFYWNoQ2xpcHBlZFYgfSwKLXsicnNuU2NyaXB0U2V0VmFySSIsICAgICAgICAgICAgICAgICAiKElJSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0U2V0VmFySSB9LAoteyJyc25TY3JpcHRHZXRWYXJJIiwgICAgICAgICAgICAgICAgICIoSUlJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHZXRWYXJJIH0sCi17InJzblNjcmlwdFNldFZhckoiLCAgICAgICAgICAgICAgICAgIihJSUlKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdFNldFZhckogfSwKLXsicnNuU2NyaXB0R2V0VmFySiIsICAgICAgICAgICAgICAgICAiKElJSSlKIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0R2V0VmFySiB9LAoteyJyc25TY3JpcHRTZXRWYXJGIiwgICAgICAgICAgICAgICAgICIoSUlJRilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRTZXRWYXJGIH0sCi17InJzblNjcmlwdEdldFZhckYiLCAgICAgICAgICAgICAgICAgIihJSUkpRiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEdldFZhckYgfSwKLXsicnNuU2NyaXB0U2V0VmFyRCIsICAgICAgICAgICAgICAgICAiKElJSUQpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0U2V0VmFyRCB9LAoteyJyc25TY3JpcHRHZXRWYXJEIiwgICAgICAgICAgICAgICAgICIoSUlJKUQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHZXRWYXJEIH0sCi17InJzblNjcmlwdFNldFZhclYiLCAgICAgICAgICAgICAgICAgIihJSUlbQilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdFNldFZhclYgfSwKLXsicnNuU2NyaXB0R2V0VmFyViIsICAgICAgICAgICAgICAgICAiKElJSVtCKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0R2V0VmFyViB9LAoteyJyc25TY3JpcHRTZXRWYXJWRSIsICAgICAgICAgICAgICAgICIoSUlJW0JJW0kpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRTZXRWYXJWRSB9LAoteyJyc25TY3JpcHRTZXRWYXJPYmoiLCAgICAgICAgICAgICAgICIoSUlJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRTZXRWYXJPYmogfSwKK3sicnNuU2NyaXB0QmluZEFsbG9jYXRpb24iLCAgICAgICAgICAiKEpKSkkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0QmluZEFsbG9jYXRpb24gfSwKK3sicnNuU2NyaXB0U2V0VGltZVpvbmUiLCAgICAgICAgICAgICAiKEpKW0IpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0U2V0VGltZVpvbmUgfSwKK3sicnNuU2NyaXB0SW52b2tlIiwgICAgICAgICAgICAgICAgICAiKEpKSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0SW52b2tlIH0sCit7InJzblNjcmlwdEludm9rZVYiLCAgICAgICAgICAgICAgICAgIihKSklbQilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEludm9rZVYgfSwKK3sicnNuU2NyaXB0Rm9yRWFjaCIsICAgICAgICAgICAgICAgICAiKEpKSUpKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0Rm9yRWFjaCB9LAoreyJyc25TY3JpcHRGb3JFYWNoIiwgICAgICAgICAgICAgICAgICIoSkpJSkpbQilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRGb3JFYWNoViB9LAoreyJyc25TY3JpcHRGb3JFYWNoQ2xpcHBlZCIsICAgICAgICAgICIoSkpJSkpJSUlJSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRGb3JFYWNoQ2xpcHBlZCB9LAoreyJyc25TY3JpcHRGb3JFYWNoQ2xpcHBlZCIsICAgICAgICAgICIoSkpJSkpbQklJSUlJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRGb3JFYWNoQ2xpcHBlZFYgfSwKK3sicnNuU2NyaXB0U2V0VmFySSIsICAgICAgICAgICAgICAgICAiKEpKSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0U2V0VmFySSB9LAoreyJyc25TY3JpcHRHZXRWYXJJIiwgICAgICAgICAgICAgICAgICIoSkpJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHZXRWYXJJIH0sCit7InJzblNjcmlwdFNldFZhckoiLCAgICAgICAgICAgICAgICAgIihKSklKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdFNldFZhckogfSwKK3sicnNuU2NyaXB0R2V0VmFySiIsICAgICAgICAgICAgICAgICAiKEpKSSlKIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0R2V0VmFySiB9LAoreyJyc25TY3JpcHRTZXRWYXJGIiwgICAgICAgICAgICAgICAgICIoSkpJRilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRTZXRWYXJGIH0sCit7InJzblNjcmlwdEdldFZhckYiLCAgICAgICAgICAgICAgICAgIihKSkkpRiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEdldFZhckYgfSwKK3sicnNuU2NyaXB0U2V0VmFyRCIsICAgICAgICAgICAgICAgICAiKEpKSUQpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0U2V0VmFyRCB9LAoreyJyc25TY3JpcHRHZXRWYXJEIiwgICAgICAgICAgICAgICAgICIoSkpJKUQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHZXRWYXJEIH0sCit7InJzblNjcmlwdFNldFZhclYiLCAgICAgICAgICAgICAgICAgIihKSklbQilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdFNldFZhclYgfSwKK3sicnNuU2NyaXB0R2V0VmFyViIsICAgICAgICAgICAgICAgICAiKEpKSVtCKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0R2V0VmFyViB9LAoreyJyc25TY3JpcHRTZXRWYXJWRSIsICAgICAgICAgICAgICAgICIoSkpJW0JKW0kpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRTZXRWYXJWRSB9LAoreyJyc25TY3JpcHRTZXRWYXJPYmoiLCAgICAgICAgICAgICAgICIoSkpJSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRTZXRWYXJPYmogfSwKIAoteyJyc25TY3JpcHRDQ3JlYXRlIiwgICAgICAgICAgICAgICAgICIoSUxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tCSSlJIiwgICh2b2lkKiluU2NyaXB0Q0NyZWF0ZSB9LAoteyJyc25TY3JpcHRJbnRyaW5zaWNDcmVhdGUiLCAgICAgICAgICIoSUlJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRJbnRyaW5zaWNDcmVhdGUgfSwKLXsicnNuU2NyaXB0S2VybmVsSURDcmVhdGUiLCAgICAgICAgICAiKElJSUkpSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0S2VybmVsSURDcmVhdGUgfSwKLXsicnNuU2NyaXB0RmllbGRJRENyZWF0ZSIsICAgICAgICAgICAiKElJSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0RmllbGRJRENyZWF0ZSB9LAoteyJyc25TY3JpcHRHcm91cENyZWF0ZSIsICAgICAgICAgICAgICIoSVtJW0lbSVtJW0kpSSIsICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHcm91cENyZWF0ZSB9LAoteyJyc25TY3JpcHRHcm91cFNldElucHV0IiwgICAgICAgICAgICIoSUlJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHcm91cFNldElucHV0IH0sCi17InJzblNjcmlwdEdyb3VwU2V0T3V0cHV0IiwgICAgICAgICAgIihJSUlJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEdyb3VwU2V0T3V0cHV0IH0sCi17InJzblNjcmlwdEdyb3VwRXhlY3V0ZSIsICAgICAgICAgICAgIihJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEdyb3VwRXhlY3V0ZSB9LAoreyJyc25TY3JpcHRDQ3JlYXRlIiwgICAgICAgICAgICAgICAgICIoSkxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO1tCSSlJIiwgICh2b2lkKiluU2NyaXB0Q0NyZWF0ZSB9LAoreyJyc25TY3JpcHRJbnRyaW5zaWNDcmVhdGUiLCAgICAgICAgICIoSklKKUoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRJbnRyaW5zaWNDcmVhdGUgfSwKK3sicnNuU2NyaXB0S2VybmVsSURDcmVhdGUiLCAgICAgICAgICAiKEpKSUkpSiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0S2VybmVsSURDcmVhdGUgfSwKK3sicnNuU2NyaXB0RmllbGRJRENyZWF0ZSIsICAgICAgICAgICAiKEpKSSlKIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluU2NyaXB0RmllbGRJRENyZWF0ZSB9LAoreyJyc25TY3JpcHRHcm91cENyZWF0ZSIsICAgICAgICAgICAgICIoSltJW0lbSVtJW0kpSiIsICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHcm91cENyZWF0ZSB9LAoreyJyc25TY3JpcHRHcm91cFNldElucHV0IiwgICAgICAgICAgICIoSkpKSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TY3JpcHRHcm91cFNldElucHV0IH0sCit7InJzblNjcmlwdEdyb3VwU2V0T3V0cHV0IiwgICAgICAgICAgIihKSkpKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEdyb3VwU2V0T3V0cHV0IH0sCit7InJzblNjcmlwdEdyb3VwRXhlY3V0ZSIsICAgICAgICAgICAgIihKSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNjcmlwdEdyb3VwRXhlY3V0ZSB9LAogCi17InJzblByb2dyYW1TdG9yZUNyZWF0ZSIsICAgICAgICAgICAgIihJWlpaWlpaSUlJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblByb2dyYW1TdG9yZUNyZWF0ZSB9LAoreyJyc25Qcm9ncmFtU3RvcmVDcmVhdGUiLCAgICAgICAgICAgICIoSlpaWlpaWklJSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtU3RvcmVDcmVhdGUgfSwKIAoteyJyc25Qcm9ncmFtQmluZENvbnN0YW50cyIsICAgICAgICAgICIoSUlJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtQmluZENvbnN0YW50cyB9LAoteyJyc25Qcm9ncmFtQmluZFRleHR1cmUiLCAgICAgICAgICAgICIoSUlJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtQmluZFRleHR1cmUgfSwKLXsicnNuUHJvZ3JhbUJpbmRTYW1wbGVyIiwgICAgICAgICAgICAiKElJSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluUHJvZ3JhbUJpbmRTYW1wbGVyIH0sCit7InJzblByb2dyYW1CaW5kQ29uc3RhbnRzIiwgICAgICAgICAgIihKSklKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblByb2dyYW1CaW5kQ29uc3RhbnRzIH0sCit7InJzblByb2dyYW1CaW5kVGV4dHVyZSIsICAgICAgICAgICAgIihKSklKKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblByb2dyYW1CaW5kVGV4dHVyZSB9LAoreyJyc25Qcm9ncmFtQmluZFNhbXBsZXIiLCAgICAgICAgICAgICIoSkpJSilWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtQmluZFNhbXBsZXIgfSwKIAoteyJyc25Qcm9ncmFtRnJhZ21lbnRDcmVhdGUiLCAgICAgICAgICIoSUxqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL1N0cmluZztbSSlJIiwgICAgICAgICAgICAgICh2b2lkKiluUHJvZ3JhbUZyYWdtZW50Q3JlYXRlIH0sCi17InJzblByb2dyYW1SYXN0ZXJDcmVhdGUiLCAgICAgICAgICAgIihJWkkpSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblByb2dyYW1SYXN0ZXJDcmVhdGUgfSwKLXsicnNuUHJvZ3JhbVZlcnRleENyZWF0ZSIsICAgICAgICAgICAiKElMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7W0kpSSIsICAgICAgICAgICAgICAodm9pZCopblByb2dyYW1WZXJ0ZXhDcmVhdGUgfSwKK3sicnNuUHJvZ3JhbUZyYWdtZW50Q3JlYXRlIiwgICAgICAgICAiKEpMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9TdHJpbmc7W0kpSiIsICAgICAgICAgICAgICAodm9pZCopblByb2dyYW1GcmFnbWVudENyZWF0ZSB9LAoreyJyc25Qcm9ncmFtUmFzdGVyQ3JlYXRlIiwgICAgICAgICAgICIoSlpJKUoiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtUmFzdGVyQ3JlYXRlIH0sCit7InJzblByb2dyYW1WZXJ0ZXhDcmVhdGUiLCAgICAgICAgICAgIihKTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvU3RyaW5nO1tJKUoiLCAgICAgICAgICAgICAgKHZvaWQqKW5Qcm9ncmFtVmVydGV4Q3JlYXRlIH0sCiAKLXsicnNuQ29udGV4dEJpbmRSb290U2NyaXB0IiwgICAgICAgICAiKElJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dEJpbmRSb290U2NyaXB0IH0sCi17InJzbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlIiwgICAgICAgIihJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlIH0sCi17InJzbkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50IiwgICAgIihJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50IH0sCi17InJzbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleCIsICAgICAgIihJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleCB9LAoteyJyc25Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIiLCAgICAgICIoSUkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIgfSwKK3sicnNuQ29udGV4dEJpbmRSb290U2NyaXB0IiwgICAgICAgICAiKEpJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluQ29udGV4dEJpbmRSb290U2NyaXB0IH0sCit7InJzbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlIiwgICAgICAgIihKSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRCaW5kUHJvZ3JhbVN0b3JlIH0sCit7InJzbkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50IiwgICAgIihKSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRCaW5kUHJvZ3JhbUZyYWdtZW50IH0sCit7InJzbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleCIsICAgICAgIihKSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbkNvbnRleHRCaW5kUHJvZ3JhbVZlcnRleCB9LAoreyJyc25Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIiLCAgICAgICIoSkkpViIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5Db250ZXh0QmluZFByb2dyYW1SYXN0ZXIgfSwKIAoteyJyc25TYW1wbGVyQ3JlYXRlIiwgICAgICAgICAgICAgICAgICIoSUlJSUlJRilJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5TYW1wbGVyQ3JlYXRlIH0sCit7InJzblNhbXBsZXJDcmVhdGUiLCAgICAgICAgICAgICAgICAgIihKSUlJSUlGKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopblNhbXBsZXJDcmVhdGUgfSwKIAoteyJyc25QYXRoQ3JlYXRlIiwgICAgICAgICAgICAgICAgICAgICIoSUlaSUlGKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5QYXRoQ3JlYXRlIH0sCi17InJzbk1lc2hDcmVhdGUiLCAgICAgICAgICAgICAgICAgICAgIihJW0lbSVtJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbk1lc2hDcmVhdGUgfSwKK3sicnNuUGF0aENyZWF0ZSIsICAgICAgICAgICAgICAgICAgICAiKEpJWkpJRilKIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluUGF0aENyZWF0ZSB9LAoreyJyc25NZXNoQ3JlYXRlIiwgICAgICAgICAgICAgICAgICAgICIoSltJW0lbSSlKIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5NZXNoQ3JlYXRlIH0sCiAKLXsicnNuTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50IiwgICAgICAiKElJKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluTWVzaEdldFZlcnRleEJ1ZmZlckNvdW50IH0sCi17InJzbk1lc2hHZXRJbmRleENvdW50IiwgICAgICAgICAgICAgIihJSSlJIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbk1lc2hHZXRJbmRleENvdW50IH0sCi17InJzbk1lc2hHZXRWZXJ0aWNlcyIsICAgICAgICAgICAgICAgIihJSVtJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbk1lc2hHZXRWZXJ0aWNlcyB9LAoteyJyc25NZXNoR2V0SW5kaWNlcyIsICAgICAgICAgICAgICAgICIoSUlbSVtJSSlWIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5NZXNoR2V0SW5kaWNlcyB9LAoreyJyc25NZXNoR2V0VmVydGV4QnVmZmVyQ291bnQiLCAgICAgICIoSkopSSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKW5NZXNoR2V0VmVydGV4QnVmZmVyQ291bnQgfSwKK3sicnNuTWVzaEdldEluZGV4Q291bnQiLCAgICAgICAgICAgICAiKEpKKUkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluTWVzaEdldEluZGV4Q291bnQgfSwKK3sicnNuTWVzaEdldFZlcnRpY2VzIiwgICAgICAgICAgICAgICAiKEpKW0lJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiluTWVzaEdldFZlcnRpY2VzIH0sCit7InJzbk1lc2hHZXRJbmRpY2VzIiwgICAgICAgICAgICAgICAgIihKSltJW0lJKVYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopbk1lc2hHZXRJbmRpY2VzIH0sCiAKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYW5kcm9pZGZ3L0Fzc2V0LmggYi9pbmNsdWRlL2FuZHJvaWRmdy9Bc3NldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmUwZTA2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYW5kcm9pZGZ3L0Fzc2V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8vCi0vLyBDbGFzcyBwcm92aWRpbmcgYWNjZXNzIHRvIGEgcmVhZC1vbmx5IGFzc2V0LiAgQXNzZXQgb2JqZWN0cyBhcmUgTk9UCi0vLyB0aHJlYWQtc2FmZSwgYW5kIHNob3VsZCBub3QgYmUgc2hhcmVkIGFjcm9zcyB0aHJlYWRzLgotLy8KLSNpZm5kZWYgX19MSUJTX0FTU0VUX0gKLSNkZWZpbmUgX19MSUJTX0FTU0VUX0gKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDx1dGlscy9Db21wYXQuaD4KLSNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KLSNpbmNsdWRlIDx1dGlscy9GaWxlTWFwLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLS8qCi0gKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBwcm92aWRlIHJlYWQtb25seSBvcGVyYXRpb25zIG9uIGEgYnl0ZSBzdHJlYW0uCi0gKgotICogQWNjZXNzIG1heSBiZSBvcHRpbWl6ZWQgZm9yIHN0cmVhbWluZywgcmFuZG9tLCBvciB3aG9sZSBidWZmZXIgbW9kZXMuICBBbGwKLSAqIG9wZXJhdGlvbnMgYXJlIHN1cHBvcnRlZCByZWdhcmRsZXNzIG9mIGhvdyB0aGUgZmlsZSB3YXMgb3BlbmVkLCBidXQgc29tZQotICogdGhpbmdzIHdpbGwgYmUgbGVzcyBlZmZpY2llbnQuICBbcGFzcyB0aGF0IGluPz9dCi0gKgotICogIkFzc2V0IiBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIHR5cGVzIG9mIGFzc2V0cy4gIFRoZSBjbGFzc2VzIGJlbG93Ci0gKiBwcm92aWRlIG1vc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9uLiAgVGhlIEFzc2V0TWFuYWdlciB1c2VzIG9uZSBvZiB0aGUKLSAqIHN0YXRpYyAiY3JlYXRlIiBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZS4KLSAqLwotY2xhc3MgQXNzZXQgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFzc2V0KHZvaWQpOwotCi0gICAgc3RhdGljIGludDMyX3QgZ2V0R2xvYmFsQ291bnQoKTsKLSAgICBzdGF0aWMgU3RyaW5nOCBnZXRBc3NldEFsbG9jYXRpb25zKCk7Ci0gICAgCi0gICAgLyogdXNlZCB3aGVuIG9wZW5pbmcgYW4gYXNzZXQgKi8KLSAgICB0eXBlZGVmIGVudW0gQWNjZXNzTW9kZSB7Ci0gICAgICAgIEFDQ0VTU19VTktOT1dOID0gMCwKLQotICAgICAgICAvKiByZWFkIGNodW5rcywgYW5kIHNlZWsgZm9yd2FyZCBhbmQgYmFja3dhcmQgKi8KLSAgICAgICAgQUNDRVNTX1JBTkRPTSwKLQotICAgICAgICAvKiByZWFkIHNlcXVlbnRpYWxseSwgd2l0aCBhbiBvY2Nhc2lvbmFsIGZvcndhcmQgc2VlayAqLwotICAgICAgICBBQ0NFU1NfU1RSRUFNSU5HLAotCi0gICAgICAgIC8qIGNhbGxlciBwbGFucyB0byBhc2sgZm9yIGEgcmVhZC1vbmx5IGJ1ZmZlciB3aXRoIGFsbCBkYXRhICovCi0gICAgICAgIEFDQ0VTU19CVUZGRVIsCi0gICAgfSBBY2Nlc3NNb2RlOwotCi0gICAgLyoKLSAgICAgKiBSZWFkIGRhdGEgZnJvbSB0aGUgY3VycmVudCBvZmZzZXQuICBSZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVyIG9mCi0gICAgICogYnl0ZXMgcmVhZCwgMCBvbiBFT0YsIG9yIC0xIG9uIGVycm9yLgotICAgICAqLwotICAgIHZpcnR1YWwgc3NpemVfdCByZWFkKHZvaWQqIGJ1Ziwgc2l6ZV90IGNvdW50KSA9IDA7Ci0KLSAgICAvKgotICAgICAqIFNlZWsgdG8gdGhlIHNwZWNpZmllZCBvZmZzZXQuICAid2hlbmNlIiB1c2VzIHRoZSBzYW1lIHZhbHVlcyBhcwotICAgICAqIGxzZWVrL2ZzZWVrLiAgUmV0dXJucyB0aGUgbmV3IHBvc2l0aW9uIG9uIHN1Y2Nlc3MsIG9yIChvZmY2NF90KSAtMQotICAgICAqIG9uIGZhaWx1cmUuCi0gICAgICovCi0gICAgdmlydHVhbCBvZmY2NF90IHNlZWsob2ZmNjRfdCBvZmZzZXQsIGludCB3aGVuY2UpID0gMDsKLQotICAgIC8qCi0gICAgICogQ2xvc2UgdGhlIGFzc2V0LCBmcmVlaW5nIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4KLSAgICAgKi8KLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2Uodm9pZCkgPSAwOwotCi0gICAgLyoKLSAgICAgKiBHZXQgYSBwb2ludGVyIHRvIGEgYnVmZmVyIHdpdGggdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KLSAgICAgKi8KLSAgICB2aXJ0dWFsIGNvbnN0IHZvaWQqIGdldEJ1ZmZlcihib29sIHdvcmRBbGlnbmVkKSA9IDA7Ci0KLSAgICAvKgotICAgICAqIEdldCB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgdGhhdCBjYW4gYmUgcmVhZC4KLSAgICAgKi8KLSAgICB2aXJ0dWFsIG9mZjY0X3QgZ2V0TGVuZ3RoKHZvaWQpIGNvbnN0ID0gMDsKLQotICAgIC8qCi0gICAgICogR2V0IHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSB0aGF0IGNhbiBiZSByZWFkIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gICAgICovCi0gICAgdmlydHVhbCBvZmY2NF90IGdldFJlbWFpbmluZ0xlbmd0aCh2b2lkKSBjb25zdCA9IDA7Ci0KLSAgICAvKgotICAgICAqIE9wZW4gYSBuZXcgZmlsZSBkZXNjcmlwdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVhZCB0aGlzIGFzc2V0LgotICAgICAqIFJldHVybnMgLTEgaWYgeW91IGNhbiBub3QgdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgKGZvciBleGFtcGxlIGlmIHRoZQotICAgICAqIGFzc2V0IGlzIGNvbXByZXNzZWQpLgotICAgICAqLwotICAgIHZpcnR1YWwgaW50IG9wZW5GaWxlRGVzY3JpcHRvcihvZmY2NF90KiBvdXRTdGFydCwgb2ZmNjRfdCogb3V0TGVuZ3RoKSBjb25zdCA9IDA7Ci0KLSAgICAvKgotICAgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgYXNzZXQncyBidWZmZXIgaXMgYWxsb2NhdGVkIGluIFJBTSAobm90IG1tYXBwZWQpLgotICAgICAqIE5vdGU6IG5vdCB2aXJ0dWFsIHNvIGl0IGlzIHNhZmUgdG8gY2FsbCBldmVuIHdoZW4gYmVpbmcgZGVzdHJveWVkLgotICAgICAqLwotICAgIHZpcnR1YWwgYm9vbCBpc0FsbG9jYXRlZCh2b2lkKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLyoKLSAgICAgKiBHZXQgYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGFzc2V0J3Mgc291cmNlLiAgVGhpcyBtaWdodCBiZSBhIGZ1bGwKLSAgICAgKiBwYXRoLCBpdCBtaWdodCBiZSBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGlkZW50aWZpZXJzLgotICAgICAqCi0gICAgICogVGhpcyBpcyBOT1QgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgYW55dGhpbmcgZXhjZXB0IGRlYnVnIG91dHB1dC4KLSAgICAgKiBETyBOT1QgdHJ5IHRvIHBhcnNlIHRoaXMgb3IgdXNlIGl0IHRvIG9wZW4gYSBmaWxlLgotICAgICAqLwotICAgIGNvbnN0IGNoYXIqIGdldEFzc2V0U291cmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Bc3NldFNvdXJjZS5zdHJpbmcoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgQXNzZXQodm9pZCk7ICAgICAgICAvLyBjb25zdHJ1Y3Rvcjsgb25seSBpbnZva2VkIGluZGlyZWN0bHkKLQotICAgIC8qIGhhbmRsZSBjb21tb24gc2VlaygpIGhvdXNla2VlcGluZyAqLwotICAgIG9mZjY0X3QgaGFuZGxlU2VlayhvZmY2NF90IG9mZnNldCwgaW50IHdoZW5jZSwgb2ZmNjRfdCBjdXJQb3NuLCBvZmY2NF90IG1heFBvc24pOwotCi0gICAgLyogc2V0IHRoZSBhc3NldCBzb3VyY2Ugc3RyaW5nICovCi0gICAgdm9pZCBzZXRBc3NldFNvdXJjZShjb25zdCBTdHJpbmc4JiBwYXRoKSB7IG1Bc3NldFNvdXJjZSA9IHBhdGg7IH0KLQotICAgIEFjY2Vzc01vZGUgZ2V0QWNjZXNzTW9kZSh2b2lkKSBjb25zdCB7IHJldHVybiBtQWNjZXNzTW9kZTsgfQotCi1wcml2YXRlOgotICAgIC8qIHRoZXNlIG9wZXJhdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZCAqLwotICAgIEFzc2V0KGNvbnN0IEFzc2V0JiBzcmMpOwotICAgIEFzc2V0JiBvcGVyYXRvcj0oY29uc3QgQXNzZXQmIHNyYyk7Ci0KLSAgICAvKiBBc3NldE1hbmFnZXIgbmVlZHMgYWNjZXNzIHRvIG91ciAiY3JlYXRlIiBmdW5jdGlvbnMgKi8KLSAgICBmcmllbmQgY2xhc3MgQXNzZXRNYW5hZ2VyOwotCi0gICAgLyoKLSAgICAgKiBDcmVhdGUgdGhlIGFzc2V0IGZyb20gYSBuYW1lZCBmaWxlIG9uIGRpc2suCi0gICAgICovCi0gICAgc3RhdGljIEFzc2V0KiBjcmVhdGVGcm9tRmlsZShjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlKTsKLQotICAgIC8qCi0gICAgICogQ3JlYXRlIHRoZSBhc3NldCBmcm9tIGEgbmFtZWQsIGNvbXByZXNzZWQgZmlsZSBvbiBkaXNrIChlLmcuICIuZ3oiKS4KLSAgICAgKi8KLSAgICBzdGF0aWMgQXNzZXQqIGNyZWF0ZUZyb21Db21wcmVzc2VkRmlsZShjb25zdCBjaGFyKiBmaWxlTmFtZSwKLSAgICAgICAgQWNjZXNzTW9kZSBtb2RlKTsKLQotI2lmIDAKLSAgICAvKgotICAgICAqIENyZWF0ZSB0aGUgYXNzZXQgZnJvbSBhIHNlZ21lbnQgb2YgYW4gb3BlbiBmaWxlLiAgVGhpcyB3aWxsIGZhaWwKLSAgICAgKiBpZiAib2Zmc2V0IiBhbmQgImxlbmd0aCIgZG9uJ3QgZml0IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBmaWxlLgotICAgICAqCi0gICAgICogVGhlIGFzc2V0IHRha2VzIG93bmVyc2hpcCBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yLgotICAgICAqLwotICAgIHN0YXRpYyBBc3NldCogY3JlYXRlRnJvbUZpbGVTZWdtZW50KGludCBmZCwgb2ZmNjRfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsCi0gICAgICAgIEFjY2Vzc01vZGUgbW9kZSk7Ci0KLSAgICAvKgotICAgICAqIENyZWF0ZSBmcm9tIGNvbXByZXNzZWQgZGF0YS4gICJmZCIgc2hvdWxkIGJlIHNlZWtlZCB0byB0aGUgc3RhcnQgb2YKLSAgICAgKiB0aGUgY29tcHJlc3NlZCBkYXRhLiAgVGhpcyBjb3VsZCBiZSBpbnNpZGUgYSBnemlwIGZpbGUgb3IgcGFydCBvZiBhCi0gICAgICogWmlwIGFyY2hpdmUuCi0gICAgICoKLSAgICAgKiBUaGUgYXNzZXQgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IuCi0gICAgICoKLSAgICAgKiBUaGlzIG1heSBub3QgdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIHVudGlsIGZpcnN0Ci0gICAgICogdXNlLgotICAgICAqLwotICAgIHN0YXRpYyBBc3NldCogY3JlYXRlRnJvbUNvbXByZXNzZWREYXRhKGludCBmZCwgb2ZmNjRfdCBvZmZzZXQsCi0gICAgICAgIGludCBjb21wcmVzc2lvbk1ldGhvZCwgc2l6ZV90IGNvbXByZXNzZWRMZW5ndGgsCi0gICAgICAgIHNpemVfdCB1bmNvbXByZXNzZWRMZW5ndGgsIEFjY2Vzc01vZGUgbW9kZSk7Ci0jZW5kaWYKLQotICAgIC8qCi0gICAgICogQ3JlYXRlIHRoZSBhc3NldCBmcm9tIGEgbWVtb3J5LW1hcHBlZCBmaWxlIHNlZ21lbnQuCi0gICAgICoKLSAgICAgKiBUaGUgYXNzZXQgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBGaWxlTWFwLgotICAgICAqLwotICAgIHN0YXRpYyBBc3NldCogY3JlYXRlRnJvbVVuY29tcHJlc3NlZE1hcChGaWxlTWFwKiBkYXRhTWFwLCBBY2Nlc3NNb2RlIG1vZGUpOwotCi0gICAgLyoKLSAgICAgKiBDcmVhdGUgdGhlIGFzc2V0IGZyb20gYSBtZW1vcnktbWFwcGVkIGZpbGUgc2VnbWVudCB3aXRoIGNvbXByZXNzZWQKLSAgICAgKiBkYXRhLiAgIm1ldGhvZCIgaXMgYSBaaXAgYXJjaGl2ZSBjb21wcmVzc2lvbiBtZXRob2QgY29uc3RhbnQuCi0gICAgICoKLSAgICAgKiBUaGUgYXNzZXQgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBGaWxlTWFwLgotICAgICAqLwotICAgIHN0YXRpYyBBc3NldCogY3JlYXRlRnJvbUNvbXByZXNzZWRNYXAoRmlsZU1hcCogZGF0YU1hcCwgaW50IG1ldGhvZCwKLSAgICAgICAgc2l6ZV90IHVuY29tcHJlc3NlZExlbiwgQWNjZXNzTW9kZSBtb2RlKTsKLQotCi0gICAgLyoKLSAgICAgKiBDcmVhdGUgZnJvbSBhIHJlZmVyZW5jZS1jb3VudGVkIGNodW5rIG9mIHNoYXJlZCBtZW1vcnkuCi0gICAgICovCi0gICAgLy8gVE9ETwotCi0gICAgQWNjZXNzTW9kZSAgbUFjY2Vzc01vZGU7ICAgICAgICAvLyBob3cgdGhlIGFzc2V0IHdhcyBvcGVuZWQKLSAgICBTdHJpbmc4ICAgIG1Bc3NldFNvdXJjZTsgICAgICAgLy8gZGVidWcgc3RyaW5nCi0gICAgCi0gICAgQXNzZXQqCQltTmV4dDsJCQkJLy8gbGlua2VkIGxpc3QuCi0gICAgQXNzZXQqCQltUHJldjsKLX07Ci0KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoKLSAqIElubmFyZHMgZm9sbG93LiAgRG8gbm90IHVzZSB0aGVzZSBjbGFzc2VzIGRpcmVjdGx5LgotICovCi0KLS8qCi0gKiBBbiBhc3NldCBiYXNlZCBvbiBhbiB1bmNvbXByZXNzZWQgZmlsZSBvbiBkaXNrLiAgSXQgbWF5IGVuY29tcGFzcyB0aGUKLSAqIGVudGlyZSBmaWxlIG9yIGp1c3QgYSBwaWVjZSBvZiBpdC4gIEFjY2VzcyBpcyB0aHJvdWdoIGZyZWFkL2ZzZWVrLgotICovCi1jbGFzcyBfRmlsZUFzc2V0IDogcHVibGljIEFzc2V0IHsKLXB1YmxpYzoKLSAgICBfRmlsZUFzc2V0KHZvaWQpOwotICAgIHZpcnR1YWwgfl9GaWxlQXNzZXQodm9pZCk7Ci0KLSAgICAvKgotICAgICAqIFVzZSBhIHBpZWNlIG9mIGFuIGFscmVhZHktb3BlbiBmaWxlLgotICAgICAqCi0gICAgICogT24gc3VjY2VzcywgdGhlIG9iamVjdCB0YWtlcyBvd25lcnNoaXAgb2YgImZkIi4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBvcGVuQ2h1bmsoY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBmZCwgb2ZmNjRfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpOwotCi0gICAgLyoKLSAgICAgKiBVc2UgYSBtZW1vcnktbWFwcGVkIHJlZ2lvbi4KLSAgICAgKgotICAgICAqIE9uIHN1Y2Nlc3MsIHRoZSBvYmplY3QgdGFrZXMgb3duZXJzaGlwIG9mICJkYXRhTWFwIi4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBvcGVuQ2h1bmsoRmlsZU1hcCogZGF0YU1hcCk7Ci0KLSAgICAvKgotICAgICAqIFN0YW5kYXJkIEFzc2V0IGludGVyZmFjZXMuCi0gICAgICovCi0gICAgdmlydHVhbCBzc2l6ZV90IHJlYWQodm9pZCogYnVmLCBzaXplX3QgY291bnQpOwotICAgIHZpcnR1YWwgb2ZmNjRfdCBzZWVrKG9mZjY0X3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2Uodm9pZCk7Ci0gICAgdmlydHVhbCBjb25zdCB2b2lkKiBnZXRCdWZmZXIoYm9vbCB3b3JkQWxpZ25lZCk7Ci0gICAgdmlydHVhbCBvZmY2NF90IGdldExlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGVuZ3RoOyB9Ci0gICAgdmlydHVhbCBvZmY2NF90IGdldFJlbWFpbmluZ0xlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGVuZ3RoLW1PZmZzZXQ7IH0KLSAgICB2aXJ0dWFsIGludCBvcGVuRmlsZURlc2NyaXB0b3Iob2ZmNjRfdCogb3V0U3RhcnQsIG9mZjY0X3QqIG91dExlbmd0aCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQWxsb2NhdGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWYgIT0gTlVMTDsgfQotCi1wcml2YXRlOgotICAgIG9mZjY0X3QgICAgIG1TdGFydDsgICAgICAgICAvLyBhYnNvbHV0ZSBmaWxlIG9mZnNldCBvZiBzdGFydCBvZiBjaHVuawotICAgIG9mZjY0X3QgICAgIG1MZW5ndGg7ICAgICAgICAvLyBsZW5ndGggb2YgdGhlIGNodW5rCi0gICAgb2ZmNjRfdCAgICAgbU9mZnNldDsgICAgICAgIC8vIGN1cnJlbnQgbG9jYWwgb2Zmc2V0LCAwID09IG1TdGFydAotICAgIEZJTEUqICAgICAgIG1GcDsgICAgICAgICAgICAvLyBmb3IgcmVhZC9zZWVrCi0gICAgY2hhciogICAgICAgbUZpbGVOYW1lOyAgICAgIC8vIGZvciBvcGVuaW5nCi0KLSAgICAvKgotICAgICAqIFRvIHN1cHBvcnQgZ2V0QnVmZmVyKCkgd2UgZWl0aGVyIG5lZWQgdG8gcmVhZCB0aGUgZW50aXJlIHRoaW5nIGludG8KLSAgICAgKiBhIGJ1ZmZlciBvciBtZW1vcnktbWFwIGl0LiAgRm9yIHNtYWxsIGZpbGVzIGl0J3MgcHJvYmFibHkgYmVzdCB0bwotICAgICAqIGp1c3QgcmVhZCB0aGVtIGluLgotICAgICAqLwotICAgIGVudW0geyBrUmVhZFZzTWFwVGhyZXNob2xkID0gNDA5NiB9OwotCi0gICAgRmlsZU1hcCogICAgbU1hcDsgICAgICAgICAgIC8vIGZvciBtZW1vcnkgbWFwCi0gICAgdW5zaWduZWQgY2hhciogbUJ1ZjsgICAgICAgIC8vIGZvciByZWFkCi0gICAgCi0gICAgY29uc3Qgdm9pZCogZW5zdXJlQWxpZ25tZW50KEZpbGVNYXAqIG1hcCk7Ci19OwotCi0KLS8qCi0gKiBBbiBhc3NldCBiYXNlZCBvbiBjb21wcmVzc2VkIGRhdGEgaW4gYSBmaWxlLgotICovCi1jbGFzcyBfQ29tcHJlc3NlZEFzc2V0IDogcHVibGljIEFzc2V0IHsKLXB1YmxpYzoKLSAgICBfQ29tcHJlc3NlZEFzc2V0KHZvaWQpOwotICAgIHZpcnR1YWwgfl9Db21wcmVzc2VkQXNzZXQodm9pZCk7Ci0KLSAgICAvKgotICAgICAqIFVzZSBhIHBpZWNlIG9mIGFuIGFscmVhZHktb3BlbiBmaWxlLgotICAgICAqCi0gICAgICogT24gc3VjY2VzcywgdGhlIG9iamVjdCB0YWtlcyBvd25lcnNoaXAgb2YgImZkIi4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBvcGVuQ2h1bmsoaW50IGZkLCBvZmY2NF90IG9mZnNldCwgaW50IGNvbXByZXNzaW9uTWV0aG9kLAotICAgICAgICBzaXplX3QgdW5jb21wcmVzc2VkTGVuLCBzaXplX3QgY29tcHJlc3NlZExlbik7Ci0KLSAgICAvKgotICAgICAqIFVzZSBhIG1lbW9yeS1tYXBwZWQgcmVnaW9uLgotICAgICAqCi0gICAgICogT24gc3VjY2VzcywgdGhlIG9iamVjdCB0YWtlcyBvd25lcnNoaXAgb2YgImZkIi4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBvcGVuQ2h1bmsoRmlsZU1hcCogZGF0YU1hcCwgaW50IGNvbXByZXNzaW9uTWV0aG9kLAotICAgICAgICBzaXplX3QgdW5jb21wcmVzc2VkTGVuKTsKLQotICAgIC8qCi0gICAgICogU3RhbmRhcmQgQXNzZXQgaW50ZXJmYWNlcy4KLSAgICAgKi8KLSAgICB2aXJ0dWFsIHNzaXplX3QgcmVhZCh2b2lkKiBidWYsIHNpemVfdCBjb3VudCk7Ci0gICAgdmlydHVhbCBvZmY2NF90IHNlZWsob2ZmNjRfdCBvZmZzZXQsIGludCB3aGVuY2UpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZSh2b2lkKTsKLSAgICB2aXJ0dWFsIGNvbnN0IHZvaWQqIGdldEJ1ZmZlcihib29sIHdvcmRBbGlnbmVkKTsKLSAgICB2aXJ0dWFsIG9mZjY0X3QgZ2V0TGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1VbmNvbXByZXNzZWRMZW47IH0KLSAgICB2aXJ0dWFsIG9mZjY0X3QgZ2V0UmVtYWluaW5nTGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1VbmNvbXByZXNzZWRMZW4tbU9mZnNldDsgfQotICAgIHZpcnR1YWwgaW50IG9wZW5GaWxlRGVzY3JpcHRvcihvZmY2NF90KiBvdXRTdGFydCwgb2ZmNjRfdCogb3V0TGVuZ3RoKSBjb25zdCB7IHJldHVybiAtMTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0FsbG9jYXRlZCh2b2lkKSBjb25zdCB7IHJldHVybiBtQnVmICE9IE5VTEw7IH0KLQotcHJpdmF0ZToKLSAgICBvZmY2NF90ICAgICBtU3RhcnQ7ICAgICAgICAgLy8gb2Zmc2V0IHRvIHN0YXJ0IG9mIGNvbXByZXNzZWQgZGF0YQotICAgIG9mZjY0X3QgICAgIG1Db21wcmVzc2VkTGVuOyAvLyBsZW5ndGggb2YgdGhlIGNvbXByZXNzZWQgZGF0YQotICAgIG9mZjY0X3QgICAgIG1VbmNvbXByZXNzZWRMZW47IC8vIGxlbmd0aCBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEKLSAgICBvZmY2NF90ICAgICBtT2Zmc2V0OyAgICAgICAgLy8gY3VycmVudCBvZmZzZXQsIDAgPT0gc3RhcnQgb2YgdW5jb21wIGRhdGEKLQotICAgIEZpbGVNYXAqICAgIG1NYXA7ICAgICAgICAgICAvLyBmb3IgbWVtb3J5LW1hcHBlZCBpbnB1dAotICAgIGludCAgICAgICAgIG1GZDsgICAgICAgICAgICAvLyBmb3IgZmlsZSBpbnB1dAotCi0gICAgY2xhc3MgU3RyZWFtaW5nWmlwSW5mbGF0ZXIqIG1aaXBJbmZsYXRlcjsgIC8vIGZvciBzdHJlYW1pbmcgbGFyZ2UgY29tcHJlc3NlZCBhc3NldHMKLQotICAgIHVuc2lnbmVkIGNoYXIqICBtQnVmOyAgICAgICAvLyBmb3IgZ2V0QnVmZmVyKCkKLX07Ci0KLS8vIG5lZWQ6IHNoYXJlZCBtbWFwIHZlcnNpb24/Ci0KLX07IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBfX0xJQlNfQVNTRVRfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hbmRyb2lkZncvQXNzZXREaXIuaCBiL2luY2x1ZGUvYW5kcm9pZGZ3L0Fzc2V0RGlyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkODlkN2QuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hbmRyb2lkZncvQXNzZXREaXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8KLS8vIEFjY2VzcyBhIGNodW5rIG9mIHRoZSBhc3NldCBoaWVyYXJjaHkgYXMgaWYgaXQgd2VyZSBhIHNpbmdsZSBkaXJlY3RvcnkuCi0vLwotI2lmbmRlZiBfX0xJQlNfQVNTRVRESVJfSAotI2RlZmluZSBfX0xJQlNfQVNTRVRESVJfSAotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L21pc2MuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU29ydGVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLyoKLSAqIFRoaXMgcHJvdmlkZXMgdmVjdG9yLXN0eWxlIGFjY2VzcyB0byBhIGRpcmVjdG9yeS4gIFdlIGRvIHRoaXMgcmF0aGVyCi0gKiB0aGFuIG1vZGVsaW5nIG9wZW5kaXIvcmVhZGRpciBhY2Nlc3MgYmVjYXVzZSBpdCdzIHNpbXBsZXIgYW5kIHRoZQotICogbmF0dXJlIG9mIHRoZSBvcGVyYXRpb24gcmVxdWlyZXMgdXMgdG8gaGF2ZSBhbGwgZGF0YSBvbiBoYW5kIGFueXdheS4KLSAqCi0gKiBUaGUgbGlzdCBvZiBmaWxlcyB3aWxsIGJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgQVNDSUkgdmFsdWUuCi0gKgotICogVGhlIGNvbnRlbnRzIGFyZSBwb3B1bGF0ZWQgYnkgb3VyIGZyaWVuZCwgdGhlIEFzc2V0TWFuYWdlci4KLSAqLwotY2xhc3MgQXNzZXREaXIgewotcHVibGljOgotICAgIEFzc2V0RGlyKHZvaWQpCi0gICAgICAgIDogbUZpbGVJbmZvKE5VTEwpCi0gICAgICAgIHt9Ci0gICAgdmlydHVhbCB+QXNzZXREaXIodm9pZCkgewotICAgICAgICBkZWxldGUgbUZpbGVJbmZvOwotICAgIH0KLQotICAgIC8qCi0gICAgICogVmVjdG9yLXN0eWxlIGFjY2Vzcy4KLSAgICAgKi8KLSAgICBzaXplX3QgZ2V0RmlsZUNvdW50KHZvaWQpIHsgcmV0dXJuIG1GaWxlSW5mby0+c2l6ZSgpOyB9Ci0gICAgY29uc3QgU3RyaW5nOCYgZ2V0RmlsZU5hbWUoaW50IGlkeCkgewotICAgICAgICByZXR1cm4gbUZpbGVJbmZvLT5pdGVtQXQoaWR4KS5nZXRGaWxlTmFtZSgpOwotICAgIH0KLSAgICBjb25zdCBTdHJpbmc4JiBnZXRTb3VyY2VOYW1lKGludCBpZHgpIHsKLSAgICAgICAgcmV0dXJuIG1GaWxlSW5mby0+aXRlbUF0KGlkeCkuZ2V0U291cmNlTmFtZSgpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogR2V0IHRoZSB0eXBlIG9mIGEgZmlsZSAodXN1YWxseSByZWd1bGFyIG9yIGRpcmVjdG9yeSkuCi0gICAgICovCi0gICAgRmlsZVR5cGUgZ2V0RmlsZVR5cGUoaW50IGlkeCkgewotICAgICAgICByZXR1cm4gbUZpbGVJbmZvLT5pdGVtQXQoaWR4KS5nZXRGaWxlVHlwZSgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICAvKiB0aGVzZSBvcGVyYXRpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgKi8KLSAgICBBc3NldERpcihjb25zdCBBc3NldERpciYgc3JjKTsKLSAgICBjb25zdCBBc3NldERpciYgb3BlcmF0b3I9KGNvbnN0IEFzc2V0RGlyJiBzcmMpOwotCi0gICAgZnJpZW5kIGNsYXNzIEFzc2V0TWFuYWdlcjsKLQotICAgIC8qCi0gICAgICogVGhpcyBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBpbiB0aGUgYXNzZXQgaGllcmFyY2h5LgotICAgICAqLwotICAgIGNsYXNzIEZpbGVJbmZvIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEZpbGVJbmZvKHZvaWQpIHt9Ci0gICAgICAgIEZpbGVJbmZvKGNvbnN0IFN0cmluZzgmIHBhdGgpICAgICAgLy8gdXNlZnVsIGZvciBlLmcuIHN2ZWN0LmluZGV4T2YKLSAgICAgICAgICAgIDogbUZpbGVOYW1lKHBhdGgpLCBtRmlsZVR5cGUoa0ZpbGVUeXBlVW5rbm93bikKLSAgICAgICAgICAgIHt9Ci0gICAgICAgIH5GaWxlSW5mbyh2b2lkKSB7fQotICAgICAgICBGaWxlSW5mbyhjb25zdCBGaWxlSW5mbyYgc3JjKSB7Ci0gICAgICAgICAgICBjb3B5TWVtYmVycyhzcmMpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IEZpbGVJbmZvJiBvcGVyYXRvcj0gKGNvbnN0IEZpbGVJbmZvJiBzcmMpIHsKLSAgICAgICAgICAgIGlmICh0aGlzICE9ICZzcmMpCi0gICAgICAgICAgICAgICAgY29weU1lbWJlcnMoc3JjKTsKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY29weU1lbWJlcnMoY29uc3QgRmlsZUluZm8mIHNyYykgewotICAgICAgICAgICAgbUZpbGVOYW1lID0gc3JjLm1GaWxlTmFtZTsKLSAgICAgICAgICAgIG1GaWxlVHlwZSA9IHNyYy5tRmlsZVR5cGU7Ci0gICAgICAgICAgICBtU291cmNlTmFtZSA9IHNyYy5tU291cmNlTmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIG5lZWQgdGhpcyBmb3IgU29ydGVkVmVjdG9yOyBtdXN0IGNvbXBhcmUgb25seSBvbiBmaWxlIG5hbWUgKi8KLSAgICAgICAgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IEZpbGVJbmZvJiByaHMpIGNvbnN0IHsKLSAgICAgICAgICAgIHJldHVybiBtRmlsZU5hbWUgPCByaHMubUZpbGVOYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogdXNlZCBieSBBc3NldE1hbmFnZXIgKi8KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBGaWxlSW5mbyYgcmhzKSBjb25zdCB7Ci0gICAgICAgICAgICByZXR1cm4gbUZpbGVOYW1lID09IHJocy5tRmlsZU5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldChjb25zdCBTdHJpbmc4JiBwYXRoLCBGaWxlVHlwZSB0eXBlKSB7Ci0gICAgICAgICAgICBtRmlsZU5hbWUgPSBwYXRoOwotICAgICAgICAgICAgbUZpbGVUeXBlID0gdHlwZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFN0cmluZzgmIGdldEZpbGVOYW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1GaWxlTmFtZTsgfQotICAgICAgICB2b2lkIHNldEZpbGVOYW1lKGNvbnN0IFN0cmluZzgmIHBhdGgpIHsgbUZpbGVOYW1lID0gcGF0aDsgfQotCi0gICAgICAgIEZpbGVUeXBlIGdldEZpbGVUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1GaWxlVHlwZTsgfQotICAgICAgICB2b2lkIHNldEZpbGVUeXBlKEZpbGVUeXBlIHR5cGUpIHsgbUZpbGVUeXBlID0gdHlwZTsgfQotCi0gICAgICAgIGNvbnN0IFN0cmluZzgmIGdldFNvdXJjZU5hbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbVNvdXJjZU5hbWU7IH0KLSAgICAgICAgdm9pZCBzZXRTb3VyY2VOYW1lKGNvbnN0IFN0cmluZzgmIHBhdGgpIHsgbVNvdXJjZU5hbWUgPSBwYXRoOyB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogSGFuZHkgdXRpbGl0eSBmb3IgZmluZGluZyBhbiBlbnRyeSBpbiBhIHNvcnRlZCB2ZWN0b3Igb2YgRmlsZUluZm8uCi0gICAgICAgICAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGluZyBlbnRyeSwgb3IgLTEgaWYgbm9uZSBmb3VuZC4KLSAgICAgICAgICovCi0gICAgICAgIHN0YXRpYyBpbnQgZmluZEVudHJ5KGNvbnN0IFNvcnRlZFZlY3RvcjxGaWxlSW5mbz4qIHBWZWN0b3IsCi0gICAgICAgICAgICBjb25zdCBTdHJpbmc4JiBmaWxlTmFtZSk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTdHJpbmc4ICAgIG1GaWxlTmFtZTsgICAgICAvLyBmaWxlbmFtZSBvbmx5Ci0gICAgICAgIEZpbGVUeXBlICAgIG1GaWxlVHlwZTsgICAgICAvLyByZWd1bGFyLCBkaXJlY3RvcnksIGV0YwotCi0gICAgICAgIFN0cmluZzggICAgbVNvdXJjZU5hbWU7ICAgIC8vIGN1cnJlbnRseSBkZWJ1Zy1vbmx5Ci0gICAgfTsKLQotICAgIC8qIEFzc2V0TWFuYWdlciB1c2VzIHRoaXMgdG8gaW5pdGlhbGl6ZSB1cyAqLwotICAgIHZvaWQgc2V0RmlsZUxpc3QoU29ydGVkVmVjdG9yPEZpbGVJbmZvPiogbGlzdCkgeyBtRmlsZUluZm8gPSBsaXN0OyB9Ci0KLSAgICBTb3J0ZWRWZWN0b3I8RmlsZUluZm8+KiBtRmlsZUluZm87Ci19OwotCi19OyAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gX19MSUJTX0FTU0VURElSX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5oIGIvaW5jbHVkZS9hbmRyb2lkZncvQXNzZXRNYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NWI0NWUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hbmRyb2lkZncvQXNzZXRNYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8vCi0vLyBBc3NldCBtYW5hZ2VtZW50IGNsYXNzLiAgQXNzZXRNYW5hZ2VyIG9iamVjdHMgYXJlIHRocmVhZC1zYWZlLgotLy8KLSNpZm5kZWYgX19MSUJTX0FTU0VUTUFOQUdFUl9ICi0jZGVmaW5lIF9fTElCU19BU1NFVE1BTkFHRVJfSAotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L0Fzc2V0Lmg+Ci0jaW5jbHVkZSA8YW5kcm9pZGZ3L0Fzc2V0RGlyLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZGZ3L1ppcEZpbGVSTy5oPgotI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU29ydGVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nMTYuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgotI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgotCi0vKgotICogTmF0aXZlLWFwcCBhY2Nlc3MgaXMgdmlhIHRoZSBvcGFxdWUgdHlwZWRlZiBzdHJ1Y3QgQUFzc2V0TWFuYWdlciBpbiB0aGUgQyBuYW1lc3BhY2UuCi0gKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotc3RydWN0IEFBc3NldE1hbmFnZXIgeyB9OwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX07Ci0jZW5kaWYKLQotCi0vKgotICogTm93IHRoZSBwcm9wZXIgQysrIGFuZHJvaWQtbmFtZXNwYWNlIGRlZmluaXRpb25zCi0gKi8KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1jbGFzcyBBc3NldDsgICAgICAgIC8vIGZ3ZCBkZWNsIGZvciB0aGluZ3MgdGhhdCBpbmNsdWRlIEFzc2V0LmggZmlyc3QKLWNsYXNzIFJlc1RhYmxlOwotc3RydWN0IFJlc1RhYmxlX2NvbmZpZzsKLQotLyoKLSAqIEV2ZXJ5IGFwcGxpY2F0aW9uIHRoYXQgdXNlcyBhc3NldHMgbmVlZHMgb25lIGluc3RhbmNlIG9mIHRoaXMuICBBCi0gKiBzaW5nbGUgaW5zdGFuY2UgbWF5IGJlIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcywgYW5kIGEgc2luZ2xlCi0gKiB0aHJlYWQgbWF5IGhhdmUgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSAodGhlIGxhdHRlciBpcyBkaXNjb3VyYWdlZCkuCi0gKgotICogVGhlIHB1cnBvc2Ugb2YgdGhlIEFzc2V0TWFuYWdlciBpcyB0byBjcmVhdGUgQXNzZXQgb2JqZWN0cy4gIFRvIGRvCi0gKiB0aGlzIGVmZmljaWVudGx5IGl0IG1heSBjYWNoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9jYXRpb25zIG9mCi0gKiBmaWxlcyBpdCBoYXMgc2Vlbi4gIFRoaXMgY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCB0aGUgImNhY2hlTW9kZSIKLSAqIGFyZ3VtZW50LgotICoKLSAqIFRoZSBhc3NldCBoaWVyYXJjaHkgbWF5IGJlIGV4YW1pbmVkIGxpa2UgYSBmaWxlc3lzdGVtLCB1c2luZwotICogQXNzZXREaXIgb2JqZWN0cyB0byBwZXJ1c2UgYSBzaW5nbGUgZGlyZWN0b3J5LgotICovCi1jbGFzcyBBc3NldE1hbmFnZXIgOiBwdWJsaWMgQUFzc2V0TWFuYWdlciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBlbnVtIENhY2hlTW9kZSB7Ci0gICAgICAgIENBQ0hFX1VOS05PV04gPSAwLAotICAgICAgICBDQUNIRV9PRkYsICAgICAgICAgIC8vIGRvbid0IHRyeSB0byBjYWNoZSBmaWxlIGxvY2F0aW9ucwotICAgICAgICBDQUNIRV9ERUZFUiwgICAgICAgIC8vIGNvbnN0cnVjdCBjYWNoZSBhcyBwaWVjZXMgYXJlIG5lZWRlZAotICAgICAgICAvL0NBQ0hFX1NDQU4sICAgICAgICAgLy8gc2NhbiBmdWxsKCEpIGFzc2V0IGhpZXJhcmNoeSBhdCBpbml0KCkgdGltZQotICAgIH0gQ2FjaGVNb2RlOwotCi0gICAgQXNzZXRNYW5hZ2VyKENhY2hlTW9kZSBjYWNoZU1vZGUgPSBDQUNIRV9PRkYpOwotICAgIHZpcnR1YWwgfkFzc2V0TWFuYWdlcih2b2lkKTsKLQotICAgIHN0YXRpYyBpbnQzMl90IGdldEdsb2JhbENvdW50KCk7Ci0gICAgCi0gICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAqIEFkZCBhIG5ldyBzb3VyY2UgZm9yIGFzc2V0cy4gIFRoaXMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0bwotICAgICAqIGxvb2sgaW4gbXVsdGlwbGUgcGxhY2VzIGZvciBhc3NldHMuICBJdCBjYW4gYmUgZWl0aGVyIGEgZGlyZWN0b3J5IChmb3IKLSAgICAgKiBmaW5kaW5nIGFzc2V0cyBhcyByYXcgZmlsZXMgb24gdGhlIGRpc2spIG9yIGEgWklQIGZpbGUuICBUaGlzIG5ld2x5Ci0gICAgICogYWRkZWQgYXNzZXQgcGF0aCB3aWxsIGJlIGV4YW1pbmVkIGZpcnN0IHdoZW4gc2VhcmNoaW5nIGZvciBhc3NldHMsCi0gICAgICogYmVmb3JlIGFueSB0aGF0IHdlcmUgcHJldmlvdXNseSBhZGRlZC4KLSAgICAgKgotICAgICAqIFJldHVybnMgInRydWUiIG9uIHN1Y2Nlc3MsICJmYWxzZSIgb24gZmFpbHVyZS4gIElmICdjb29raWUnIGlzIG5vbi1OVUxMLAotICAgICAqIHRoZW4gb24gc3VjY2VzcywgKmNvb2tpZSBpcyBzZXQgdG8gdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0gICAgICogbmV3bHktYWRkZWQgYXNzZXQgc291cmNlLgotICAgICAqLwotICAgIGJvb2wgYWRkQXNzZXRQYXRoKGNvbnN0IFN0cmluZzgmIHBhdGgsIHZvaWQqKiBjb29raWUpOwotCi0gICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAqIENvbnZlbmllbmNlIGZvciBhZGRpbmcgdGhlIHN0YW5kYXJkIHN5c3RlbSBhc3NldHMuICBVc2VzIHRoZQotICAgICAqIEFORFJPSURfUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBmaW5kIHRoZW0uCi0gICAgICovCi0gICAgYm9vbCBhZGREZWZhdWx0QXNzZXRzKCk7Ci0KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICogSXRlcmF0ZSBvdmVyIHRoZSBhc3NldCBwYXRocyBpbiB0aGlzIG1hbmFnZXIuICAoUHJldmlvdXNseQotICAgICAqIGFkZGVkIHZpYSBhZGRBc3NldFBhdGgoKSBhbmQgYWRkRGVmYXVsdEFzc2V0cygpLikgIE9uIGZpcnN0IGNhbGwsCi0gICAgICogJ2Nvb2tpZScgbXVzdCBiZSBOVUxMLCByZXN1bHRpbmcgaW4gdGhlIGZpcnN0IGNvb2tpZSBiZWluZyByZXR1cm5lZC4KLSAgICAgKiBFYWNoIG5leHQgY29va2llIHdpbGwgYmUgcmV0dXJuZWQgdGhlcmUtYWZ0ZXIsIHVudGlsIE5VTEwgaW5kaWNhdGluZwotICAgICAqIHRoZSBlbmQgaGFzIGJlZW4gcmVhY2hlZC4KLSAgICAgKi8KLSAgICB2b2lkKiBuZXh0QXNzZXRQYXRoKHZvaWQqIGNvb2tpZSkgY29uc3Q7Ci0KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICogUmV0dXJuIGFuIGFzc2V0IHBhdGggaW4gdGhlIG1hbmFnZXIuICAnd2hpY2gnIG11c3QgYmUgYmV0d2VlbiAwIGFuZAotICAgICAqIGNvdW50QXNzZXRQYXRocygpLgotICAgICAqLwotICAgIFN0cmluZzggZ2V0QXNzZXRQYXRoKHZvaWQqIGNvb2tpZSkgY29uc3Q7Ci0KLSAgICAvKgotICAgICAqIFNldCB0aGUgY3VycmVudCBsb2NhbGUgYW5kIHZlbmRvci4gIFRoZSBsb2NhbGUgY2FuIGNoYW5nZSBkdXJpbmcKLSAgICAgKiB0aGUgbGlmZXRpbWUgb2YgYW4gQXNzZXRNYW5hZ2VyIGlmIHRoZSB1c2VyIHVwZGF0ZXMgdGhlIGRldmljZSdzCi0gICAgICogbGFuZ3VhZ2Ugc2V0dGluZy4gIFRoZSB2ZW5kb3IgaXMgbGVzcyBsaWtlbHkgdG8gY2hhbmdlLgotICAgICAqCi0gICAgICogUGFzcyBpbiBOVUxMIHRvIGluZGljYXRlIG5vIHByZWZlcmVuY2UuCi0gICAgICovCi0gICAgdm9pZCBzZXRMb2NhbGUoY29uc3QgY2hhciogbG9jYWxlKTsKLSAgICB2b2lkIHNldFZlbmRvcihjb25zdCBjaGFyKiB2ZW5kb3IpOwotCi0gICAgLyoKLSAgICAgKiBDaG9vc2Ugc2NyZWVuIG9yaWVudGF0aW9uIGZvciByZXNvdXJjZXMgdmFsdWVzIHJldHVybmVkLgotICAgICAqLwotICAgIHZvaWQgc2V0Q29uZmlndXJhdGlvbihjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZywgY29uc3QgY2hhciogbG9jYWxlID0gTlVMTCk7Ci0KLSAgICB2b2lkIGdldENvbmZpZ3VyYXRpb24oUmVzVGFibGVfY29uZmlnKiBvdXRDb25maWcpIGNvbnN0OwotCi0gICAgdHlwZWRlZiBBc3NldDo6QWNjZXNzTW9kZSBBY2Nlc3NNb2RlOyAgICAgICAvLyB0eXBpbmcgc2hvcnRjdXQKLQotICAgIC8qCi0gICAgICogT3BlbiBhbiBhc3NldC4KLSAgICAgKgotICAgICAqIFRoaXMgd2lsbCBzZWFyY2ggdGhyb3VnaCBsb2NhbGUtc3BlY2lmaWMgYW5kIHZlbmRvci1zcGVjaWZpYwotICAgICAqIGRpcmVjdG9yaWVzIGFuZCBwYWNrYWdlcyB0byBmaW5kIHRoZSBmaWxlLgotICAgICAqCi0gICAgICogVGhlIG9iamVjdCByZXR1cm5lZCBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIEFzc2V0TWFuYWdlci4gIEl0IHNob3VsZAotICAgICAqIGJlIGZyZWVkIGJ5IGNhbGxpbmcgQXNzZXQ6OmNsb3NlKCkuCi0gICAgICovCi0gICAgQXNzZXQqIG9wZW4oY29uc3QgY2hhciogZmlsZU5hbWUsIEFjY2Vzc01vZGUgbW9kZSk7Ci0KLSAgICAvKgotICAgICAqIE9wZW4gYSBub24tYXNzZXQgZmlsZSBhcyBhbiBhc3NldC4KLSAgICAgKgotICAgICAqIFRoaXMgaXMgZm9yIG9wZW5pbmcgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gYW4gYXNzZXQgcGFja2FnZQotICAgICAqIGJ1dCBhcmVuJ3QgYXNzZXRzLiAgVGhlc2Ugc2l0IG91dHNpZGUgdGhlIHVzdWFsICJsb2NhbGUvdmVuZG9yIgotICAgICAqIHBhdGggaGllcmFyY2h5LCBhbmQgd2lsbCBub3QgYmUgc2VlbiBieSAiQXNzZXREaXIiIG9yIGluY2x1ZGVkCi0gICAgICogaW4gb3VyIGZpbGVuYW1lIGNhY2hlLgotICAgICAqLwotICAgIEFzc2V0KiBvcGVuTm9uQXNzZXQoY29uc3QgY2hhciogZmlsZU5hbWUsIEFjY2Vzc01vZGUgbW9kZSk7Ci0KLSAgICAvKgotICAgICAqIEV4cGxpY2l0IG5vbi1hc3NldCBmaWxlLiAgVGhlIGZpbGUgZXhwbGljaXRseSBuYW1lZCBieSB0aGUgY29va2llICh0aGUKLSAgICAgKiByZXNvdXJjZSBzZXQgdG8gbG9vayBpbikgYW5kIGZpbGVOYW1lIHdpbGwgYmUgb3BlbmVkIGFuZCByZXR1cm5lZC4KLSAgICAgKi8KLSAgICBBc3NldCogb3Blbk5vbkFzc2V0KHZvaWQqIGNvb2tpZSwgY29uc3QgY2hhciogZmlsZU5hbWUsIEFjY2Vzc01vZGUgbW9kZSk7Ci0KLSAgICAvKgotICAgICAqIE9wZW4gYSBkaXJlY3Rvcnkgd2l0aGluIHRoZSBhc3NldCBoaWVyYXJjaHkuCi0gICAgICoKLSAgICAgKiBUaGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBhcmUgYW4gYW1hbGdhbSBvZiB2ZW5kb3Itc3BlY2lmaWMsCi0gICAgICogbG9jYWxlLXNwZWNpZmljLCBhbmQgZ2VuZXJpYyBhc3NldHMgc3RvcmVkIGxvb3NlbHkgb3IgaW4gYXNzZXQKLSAgICAgKiBwYWNrYWdlcy4gIERlcGVuZGluZyBvbiB0aGUgY2FjaGUgc2V0dGluZyBhbmQgcHJldmlvdXMgYWNjZXNzZXMsCi0gICAgICogdGhpcyBjYWxsIG1heSBpbmN1ciBzaWduaWZpY2FudCBkaXNrIG92ZXJoZWFkLgotICAgICAqCi0gICAgICogVG8gb3BlbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSwgcGFzcyBpbiAiIi4KLSAgICAgKi8KLSAgICBBc3NldERpciogb3BlbkRpcihjb25zdCBjaGFyKiBkaXJOYW1lKTsKLQotICAgIC8qCi0gICAgICogT3BlbiBhIGRpcmVjdG9yeSB3aXRoaW4gYSBwYXJ0aWN1bGFyIHBhdGggb2YgdGhlIGFzc2V0IG1hbmFnZXIuCi0gICAgICoKLSAgICAgKiBUaGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBhcmUgYW4gYW1hbGdhbSBvZiB2ZW5kb3Itc3BlY2lmaWMsCi0gICAgICogbG9jYWxlLXNwZWNpZmljLCBhbmQgZ2VuZXJpYyBhc3NldHMgc3RvcmVkIGxvb3NlbHkgb3IgaW4gYXNzZXQKLSAgICAgKiBwYWNrYWdlcy4gIERlcGVuZGluZyBvbiB0aGUgY2FjaGUgc2V0dGluZyBhbmQgcHJldmlvdXMgYWNjZXNzZXMsCi0gICAgICogdGhpcyBjYWxsIG1heSBpbmN1ciBzaWduaWZpY2FudCBkaXNrIG92ZXJoZWFkLgotICAgICAqCi0gICAgICogVG8gb3BlbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSwgcGFzcyBpbiAiIi4KLSAgICAgKi8KLSAgICBBc3NldERpciogb3Blbk5vbkFzc2V0RGlyKHZvaWQqIGNvb2tpZSwgY29uc3QgY2hhciogZGlyTmFtZSk7Ci0KLSAgICAvKgotICAgICAqIEdldCB0aGUgdHlwZSBvZiBhIGZpbGUgaW4gdGhlIGFzc2V0IGhpZXJhcmNoeS4gIFRoZXkgd2lsbCBlaXRoZXIKLSAgICAgKiBiZSAicmVndWxhciIgb3IgImRpcmVjdG9yeSIuICBbQ3VycmVudGx5IG9ubHkgd29ya3MgZm9yICJyZWd1bGFyIi5dCi0gICAgICoKLSAgICAgKiBDYW4gYWxzbyBiZSB1c2VkIGFzIGEgcXVpY2sgdGVzdCBmb3IgZXhpc3RlbmNlIG9mIGEgZmlsZS4KLSAgICAgKi8KLSAgICBGaWxlVHlwZSBnZXRGaWxlVHlwZShjb25zdCBjaGFyKiBmaWxlTmFtZSk7Ci0KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICogUmV0dXJuIHRoZSBjb21wbGV0ZSByZXNvdXJjZSB0YWJsZSB0byBmaW5kIHRoaW5ncyBpbiB0aGUgcGFja2FnZS4KLSAgICAgKi8KLSAgICBjb25zdCBSZXNUYWJsZSYgZ2V0UmVzb3VyY2VzKGJvb2wgcmVxdWlyZWQgPSB0cnVlKSBjb25zdDsKLQotICAgIC8qCi0gICAgICogRGlzY2FyZCBjYWNoZWQgZmlsZW5hbWUgaW5mb3JtYXRpb24uICBUaGlzIG9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkCi0gICAgICogaWYgc29tZWJvZHkgaGFzIHVwZGF0ZWQgdGhlIHNldCBvZiAibG9vc2UiIGZpbGVzLCBhbmQgd2Ugd2FudCB0bwotICAgICAqIGRpc2NhcmQgb3VyIGNhY2hlZCBub3Rpb24gb2Ygd2hhdCdzIHdoZXJlLgotICAgICAqLwotICAgIHZvaWQgcHVyZ2Uodm9pZCkgeyBwdXJnZUZpbGVOYW1lQ2FjaGVMb2NrZWQoKTsgfQotCi0gICAgLyoKLSAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsZXMgdGhpcyBBc3NldE1hbmFnZXIgcmVmZXJlbmNlcyBhcmUgYWxsCi0gICAgICogdXAtdG8tZGF0ZSAoaGF2ZSBub3QgYmVlbiBjaGFuZ2VkIHNpbmNlIGl0IHdhcyBjcmVhdGVkKS4gIElmIGZhbHNlCi0gICAgICogaXMgcmV0dXJuZWQsIHlvdSB3aWxsIG5lZWQgdG8gY3JlYXRlIGEgbmV3IEFzc2V0TWFuYWdlciB0byBnZXQKLSAgICAgKiB0aGUgY3VycmVudCBkYXRhLgotICAgICAqLwotICAgIGJvb2wgaXNVcFRvRGF0ZSgpOwotICAgIAotICAgIC8qKgotICAgICAqIEdldCB0aGUga25vd24gbG9jYWxlcyBmb3IgdGhpcyBhc3NldCBtYW5hZ2VyIG9iamVjdC4KLSAgICAgKi8KLSAgICB2b2lkIGdldExvY2FsZXMoVmVjdG9yPFN0cmluZzg+KiBsb2NhbGVzKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgYXNzZXRfcGF0aAotICAgIHsKLSAgICAgICAgU3RyaW5nOCBwYXRoOwotICAgICAgICBGaWxlVHlwZSB0eXBlOwotICAgICAgICBTdHJpbmc4IGlkbWFwOwotICAgIH07Ci0KLSAgICBBc3NldCogb3BlbkluUGF0aExvY2tlZChjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlLAotICAgICAgICBjb25zdCBhc3NldF9wYXRoJiBwYXRoKTsKLSAgICBBc3NldCogb3Blbk5vbkFzc2V0SW5QYXRoTG9ja2VkKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBBY2Nlc3NNb2RlIG1vZGUsCi0gICAgICAgIGNvbnN0IGFzc2V0X3BhdGgmIHBhdGgpOwotICAgIEFzc2V0KiBvcGVuSW5Mb2NhbGVWZW5kb3JMb2NrZWQoY29uc3QgY2hhciogZmlsZU5hbWUsIEFjY2Vzc01vZGUgbW9kZSwKLSAgICAgICAgY29uc3QgYXNzZXRfcGF0aCYgcGF0aCwgY29uc3QgY2hhciogbG9jYWxlLCBjb25zdCBjaGFyKiB2ZW5kb3IpOwotICAgIFN0cmluZzggY3JlYXRlUGF0aE5hbWVMb2NrZWQoY29uc3QgYXNzZXRfcGF0aCYgcGF0aCwgY29uc3QgY2hhciogbG9jYWxlLAotICAgICAgICBjb25zdCBjaGFyKiB2ZW5kb3IpOwotICAgIFN0cmluZzggY3JlYXRlUGF0aE5hbWVMb2NrZWQoY29uc3QgYXNzZXRfcGF0aCYgcGF0aCwgY29uc3QgY2hhciogcm9vdERpcik7Ci0gICAgU3RyaW5nOCBjcmVhdGVaaXBTb3VyY2VOYW1lTG9ja2VkKGNvbnN0IFN0cmluZzgmIHppcEZpbGVOYW1lLAotICAgICAgICBjb25zdCBTdHJpbmc4JiBkaXJOYW1lLCBjb25zdCBTdHJpbmc4JiBmaWxlTmFtZSk7Ci0KLSAgICBaaXBGaWxlUk8qIGdldFppcEZpbGVMb2NrZWQoY29uc3QgYXNzZXRfcGF0aCYgcGF0aCk7Ci0gICAgQXNzZXQqIG9wZW5Bc3NldEZyb21GaWxlTG9ja2VkKGNvbnN0IFN0cmluZzgmIGZpbGVOYW1lLCBBY2Nlc3NNb2RlIG1vZGUpOwotICAgIEFzc2V0KiBvcGVuQXNzZXRGcm9tWmlwTG9ja2VkKGNvbnN0IFppcEZpbGVSTyogcFppcEZpbGUsCi0gICAgICAgIGNvbnN0IFppcEVudHJ5Uk8gZW50cnksIEFjY2Vzc01vZGUgbW9kZSwgY29uc3QgU3RyaW5nOCYgZW50cnlOYW1lKTsKLQotICAgIGJvb2wgc2NhbkFuZE1lcmdlRGlyTG9ja2VkKFNvcnRlZFZlY3RvcjxBc3NldERpcjo6RmlsZUluZm8+KiBwTWVyZ2VkSW5mbywKLSAgICAgICAgY29uc3QgYXNzZXRfcGF0aCYgcGF0aCwgY29uc3QgY2hhciogcm9vdERpciwgY29uc3QgY2hhciogZGlyTmFtZSk7Ci0gICAgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHNjYW5EaXJMb2NrZWQoY29uc3QgU3RyaW5nOCYgcGF0aCk7Ci0gICAgYm9vbCBzY2FuQW5kTWVyZ2VaaXBMb2NrZWQoU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBNZXJnZWRJbmZvLAotICAgICAgICBjb25zdCBhc3NldF9wYXRoJiBwYXRoLCBjb25zdCBjaGFyKiByb290RGlyLCBjb25zdCBjaGFyKiBkaXJOYW1lKTsKLSAgICB2b2lkIG1lcmdlSW5mb0xvY2tlZChTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogcE1lcmdlZEluZm8sCi0gICAgICAgIGNvbnN0IFNvcnRlZFZlY3RvcjxBc3NldERpcjo6RmlsZUluZm8+KiBwQ29udGVudHMpOwotCi0gICAgdm9pZCBsb2FkRmlsZU5hbWVDYWNoZUxvY2tlZCh2b2lkKTsKLSAgICB2b2lkIGZuY1NjYW5Mb2NrZWQoU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBNZXJnZWRJbmZvLAotICAgICAgICBjb25zdCBjaGFyKiBkaXJOYW1lKTsKLSAgICBib29sIGZuY1NjYW5BbmRNZXJnZURpckxvY2tlZCgKLSAgICAgICAgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBNZXJnZWRJbmZvLAotICAgICAgICBjb25zdCBhc3NldF9wYXRoJiBwYXRoLCBjb25zdCBjaGFyKiBsb2NhbGUsIGNvbnN0IGNoYXIqIHZlbmRvciwKLSAgICAgICAgY29uc3QgY2hhciogZGlyTmFtZSk7Ci0gICAgdm9pZCBwdXJnZUZpbGVOYW1lQ2FjaGVMb2NrZWQodm9pZCk7Ci0KLSAgICBjb25zdCBSZXNUYWJsZSogZ2V0UmVzVGFibGUoYm9vbCByZXF1aXJlZCA9IHRydWUpIGNvbnN0OwotICAgIHZvaWQgc2V0TG9jYWxlTG9ja2VkKGNvbnN0IGNoYXIqIGxvY2FsZSk7Ci0gICAgdm9pZCB1cGRhdGVSZXNvdXJjZVBhcmFtc0xvY2tlZCgpIGNvbnN0OwotCi0gICAgYm9vbCBjcmVhdGVJZG1hcEZpbGVMb2NrZWQoY29uc3QgU3RyaW5nOCYgb3JpZ2luYWxQYXRoLCBjb25zdCBTdHJpbmc4JiBvdmVybGF5UGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiBpZG1hcFBhdGgpOwotCi0gICAgYm9vbCBpc0lkbWFwU3RhbGVMb2NrZWQoY29uc3QgU3RyaW5nOCYgb3JpZ2luYWxQYXRoLCBjb25zdCBTdHJpbmc4JiBvdmVybGF5UGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiBpZG1hcFBhdGgpOwotCi0gICAgQXNzZXQqIG9wZW5JZG1hcExvY2tlZChjb25zdCBzdHJ1Y3QgYXNzZXRfcGF0aCYgYXApIGNvbnN0OwotCi0gICAgYm9vbCBnZXRaaXBFbnRyeUNyY0xvY2tlZChjb25zdCBTdHJpbmc4JiB6aXBQYXRoLCBjb25zdCBjaGFyKiBlbnRyeUZpbGVuYW1lLCB1aW50MzJfdCogcENyYyk7Ci0KLSAgICBjbGFzcyBTaGFyZWRaaXAgOiBwdWJsaWMgUmVmQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgc3A8U2hhcmVkWmlwPiBnZXQoY29uc3QgU3RyaW5nOCYgcGF0aCk7Ci0KLSAgICAgICAgWmlwRmlsZVJPKiBnZXRaaXAoKTsKLQotICAgICAgICBBc3NldCogZ2V0UmVzb3VyY2VUYWJsZUFzc2V0KCk7Ci0gICAgICAgIEFzc2V0KiBzZXRSZXNvdXJjZVRhYmxlQXNzZXQoQXNzZXQqIGFzc2V0KTsKLQotICAgICAgICBSZXNUYWJsZSogZ2V0UmVzb3VyY2VUYWJsZSgpOwotICAgICAgICBSZXNUYWJsZSogc2V0UmVzb3VyY2VUYWJsZShSZXNUYWJsZSogcmVzKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNVcFRvRGF0ZSgpOwotICAgICAgICAKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIH5TaGFyZWRaaXAoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFNoYXJlZFppcChjb25zdCBTdHJpbmc4JiBwYXRoLCB0aW1lX3QgbW9kV2hlbik7Ci0gICAgICAgIFNoYXJlZFppcCgpOyAvLyA8LS0gbm90IGltcGxlbWVudGVkCi0KLSAgICAgICAgU3RyaW5nOCBtUGF0aDsKLSAgICAgICAgWmlwRmlsZVJPKiBtWmlwRmlsZTsKLSAgICAgICAgdGltZV90IG1Nb2RXaGVuOwotCi0gICAgICAgIEFzc2V0KiBtUmVzb3VyY2VUYWJsZUFzc2V0OwotICAgICAgICBSZXNUYWJsZSogbVJlc291cmNlVGFibGU7Ci0KLSAgICAgICAgc3RhdGljIE11dGV4IGdMb2NrOwotICAgICAgICBzdGF0aWMgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzgsIHdwPFNoYXJlZFppcD4gPiBnT3BlbjsKLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBNYW5hZ2UgYSBzZXQgb2YgWmlwIGZpbGVzLiAgRm9yIGVhY2ggZmlsZSB3ZSBuZWVkIGEgcG9pbnRlciB0byB0aGUKLSAgICAgKiBaaXBGaWxlIGFuZCBhIHRpbWVfdCB3aXRoIHRoZSBmaWxlJ3MgbW9kaWZpY2F0aW9uIGRhdGUuCi0gICAgICoKLSAgICAgKiBXZSBjdXJyZW50bHkgb25seSBoYXZlIHR3byB6aXAgZmlsZXMgKGN1cnJlbnQgYXBwLCAiY29tbW9uIiBhcHApLgotICAgICAqIChUaGlzIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIDgsIGJhc2VkIG9uIGFwcC9sb2NhbGUvdmVuZG9yLikKLSAgICAgKi8KLSAgICBjbGFzcyBaaXBTZXQgewotICAgIHB1YmxpYzoKLSAgICAgICAgWmlwU2V0KHZvaWQpOwotICAgICAgICB+WmlwU2V0KHZvaWQpOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFJldHVybiBhIFppcEZpbGVSTyBzdHJ1Y3R1cmUgZm9yIGEgWmlwRmlsZVJPIHdpdGggdGhlIHNwZWNpZmllZAotICAgICAgICAgKiBwYXJhbWV0ZXJzLgotICAgICAgICAgKi8KLSAgICAgICAgWmlwRmlsZVJPKiBnZXRaaXAoY29uc3QgU3RyaW5nOCYgcGF0aCk7Ci0KLSAgICAgICAgQXNzZXQqIGdldFppcFJlc291cmNlVGFibGVBc3NldChjb25zdCBTdHJpbmc4JiBwYXRoKTsKLSAgICAgICAgQXNzZXQqIHNldFppcFJlc291cmNlVGFibGVBc3NldChjb25zdCBTdHJpbmc4JiBwYXRoLCBBc3NldCogYXNzZXQpOwotCi0gICAgICAgIFJlc1RhYmxlKiBnZXRaaXBSZXNvdXJjZVRhYmxlKGNvbnN0IFN0cmluZzgmIHBhdGgpOwotICAgICAgICBSZXNUYWJsZSogc2V0WmlwUmVzb3VyY2VUYWJsZShjb25zdCBTdHJpbmc4JiBwYXRoLCBSZXNUYWJsZSogcmVzKTsKLQotICAgICAgICAvLyBnZW5lcmF0ZSBwYXRoLCBlLmcuICJjb21tb24vZW4tVVMtbm9vZ2xlLnppcCIKLSAgICAgICAgc3RhdGljIFN0cmluZzggZ2V0UGF0aE5hbWUoY29uc3QgY2hhciogcGF0aCk7Ci0KLSAgICAgICAgYm9vbCBpc1VwVG9EYXRlKCk7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgY2xvc2VaaXAoaW50IGlkeCk7Ci0KLSAgICAgICAgaW50IGdldEluZGV4KGNvbnN0IFN0cmluZzgmIHppcCkgY29uc3Q7Ci0gICAgICAgIG11dGFibGUgVmVjdG9yPFN0cmluZzg+IG1aaXBQYXRoOwotICAgICAgICBtdXRhYmxlIFZlY3RvcjxzcDxTaGFyZWRaaXA+ID4gbVppcEZpbGU7Ci0gICAgfTsKLQotICAgIC8vIFByb3RlY3QgYWxsIGludGVybmFsIHN0YXRlLgotICAgIG11dGFibGUgTXV0ZXggICBtTG9jazsKLQotICAgIFppcFNldCAgICAgICAgICBtWmlwU2V0OwotCi0gICAgVmVjdG9yPGFzc2V0X3BhdGg+IG1Bc3NldFBhdGhzOwotICAgIGNoYXIqICAgICAgICAgICBtTG9jYWxlOwotICAgIGNoYXIqICAgICAgICAgICBtVmVuZG9yOwotCi0gICAgbXV0YWJsZSBSZXNUYWJsZSogbVJlc291cmNlczsKLSAgICBSZXNUYWJsZV9jb25maWcqIG1Db25maWc7Ci0KLSAgICAvKgotICAgICAqIENhY2hlZCBkYXRhIGZvciAibG9vc2UiIGZpbGVzLiAgVGhpcyBsZXRzIHVzIGF2b2lkIHBva2luZyBhdCB0aGUKLSAgICAgKiBmaWxlc3lzdGVtIHdoZW4gc2VhcmNoaW5nIGZvciBsb29zZSBhc3NldHMuICBFYWNoIGVudHJ5IGlzIHRoZQotICAgICAqICJleHRlbmRlZCBwYXJ0aWFsIiBwYXRoLCBlLmcuICJkZWZhdWx0L2RlZmF1bHQvZm9vL2Jhci50eHQiLiAgVGhlCi0gICAgICogZnVsbCBzZXQgb2YgZmlsZXMgaXMgcHJlc2VudCwgaW5jbHVkaW5nICIuRVhDTFVERSIgZW50cmllcy4KLSAgICAgKgotICAgICAqIFdlIGRvIG5vdCBjYWNoZSBkaXJlY3RvcnkgbmFtZXMuICBXZSBkb24ndCByZXRhaW4gdGhlICIuZ3oiLAotICAgICAqIGJlY2F1c2UgdG8gb3VyIGNsaWVudHMgImZvbyIgYW5kICJmb28uZ3oiIGJvdGggbG9vayBsaWtlICJmb28iLgotICAgICAqLwotICAgIENhY2hlTW9kZSAgICAgICBtQ2FjaGVNb2RlOyAgICAgICAgIC8vIGlzIHRoZSBjYWNoZSBlbmFibGVkPwotICAgIGJvb2wgICAgICAgICAgICBtQ2FjaGVWYWxpZDsgICAgICAgIC8vIGNsZWFyIHdoZW4gbG9jYWxlIG9yIHZlbmRvciBjaGFuZ2VzCi0gICAgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4gbUNhY2hlOwotfTsKLQotfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIF9fTElCU19BU1NFVE1BTkFHRVJfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hbmRyb2lkZncvQmFja3VwSGVscGVycy5oIGIvaW5jbHVkZS9hbmRyb2lkZncvQmFja3VwSGVscGVycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmIwNGE3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYW5kcm9pZGZ3L0JhY2t1cEhlbHBlcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBfVVRJTFNfQkFDS1VQX0hFTFBFUlNfSAotI2RlZmluZSBfVVRJTFNfQkFDS1VQX0hFTFBFUlNfSAotCi0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotZW51bSB7Ci0gICAgQkFDS1VQX0hFQURFUl9FTlRJVFlfVjEgPSAweDYxNzQ2MTQ0LCAvLyBEYXRhIChsaXR0bGUgZW5kaWFuKQotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGludCB0eXBlOyAvLyBCQUNLVVBfSEVBREVSX0VOVElUWV9WMQotICAgIGludCBrZXlMZW47IC8vIGxlbmd0aCBvZiB0aGUga2V5IG5hbWUsIG5vdCBpbmNsdWRpbmcgdGhlIG51bGwgdGVybWluYXRvcgotICAgIGludCBkYXRhU2l6ZTsgLy8gc2l6ZSBvZiB0aGUgZGF0YSwgbm90IGluY2x1ZGluZyB0aGUgcGFkZGluZywgLTEgbWVhbnMgZGVsZXRlCi19IGVudGl0eV9oZWFkZXJfdjE7Ci0KLXN0cnVjdCBTbmFwc2hvdEhlYWRlciB7Ci0gICAgaW50IG1hZ2ljMDsKLSAgICBpbnQgZmlsZUNvdW50OwotICAgIGludCBtYWdpYzE7Ci0gICAgaW50IHRvdGFsU2l6ZTsKLX07Ci0KLXN0cnVjdCBGaWxlU3RhdGUgewotICAgIGludCBtb2RUaW1lX3NlYzsKLSAgICBpbnQgbW9kVGltZV9uc2VjOwotICAgIGludCBtb2RlOwotICAgIGludCBzaXplOwotICAgIGludCBjcmMzMjsKLSAgICBpbnQgbmFtZUxlbjsKLX07Ci0KLXN0cnVjdCBGaWxlUmVjIHsKLSAgICBTdHJpbmc4IGZpbGU7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIEZpbGVTdGF0ZSBzOwotfTsKLQotCi0vKioKLSAqIFdyaXRlcyB0aGUgZGF0YS4KLSAqCi0gKiBJZiBhbiBlcnJvciBvY2N1cnMsIGl0IHBvaXNvbnMgdGhpcyBvYmplY3QgYW5kIGFsbCB3cml0ZSBjYWxscyB3aWxsIGZhaWwKLSAqIHdpdGggdGhlIGVycm9yIHRoYXQgb2NjdXJyZWQuCi0gKi8KLWNsYXNzIEJhY2t1cERhdGFXcml0ZXIKLXsKLXB1YmxpYzoKLSAgICBCYWNrdXBEYXRhV3JpdGVyKGludCBmZCk7Ci0gICAgLy8gZG9lcyBub3QgY2xvc2UgZmQKLSAgICB+QmFja3VwRGF0YVdyaXRlcigpOwotCi0gICAgc3RhdHVzX3QgV3JpdGVFbnRpdHlIZWFkZXIoY29uc3QgU3RyaW5nOCYga2V5LCBzaXplX3QgZGF0YVNpemUpOwotCi0gICAgLyogTm90ZTogV3JpdGVFbnRpdHlEYXRhIHdpbGwgd3JpdGUgYXJiaXRyYXJ5IGRhdGEgaW50byB0aGUgZmlsZSB3aXRob3V0Ci0gICAgICogdmFsaWRhdGlvbiBvciBhIHByZXZpb3VzbHktc3VwcGxpZWQgaGVhZGVyLiAgVGhlIGZ1bGwgYmFja3VwIGltcGxlbWVudGF0aW9uCi0gICAgICogdXNlcyBpdCB0aGlzIHdheSB0byBnZW5lcmF0ZSBhIGNvbnRyb2xsZWQgYmluYXJ5IHN0cmVhbSB0aGF0IGlzIG5vdAotICAgICAqIGVudGl0eS1zdHJ1Y3R1cmVkLiAgSWYgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUgaXMgY2hhbmdlZCwgZWl0aGVyIHRoaXMKLSAgICAgKiB1c2UgY2FzZSBtdXN0IHJlbWFpbiB2YWxpZCwgb3IgdGhlIGZ1bGwgYmFja3VwIGltcGxlbWVudGF0aW9uIHNob3VsZCBiZQotICAgICAqIGFkanVzdGVkIHRvIHVzZSBzb21lIG90aGVyIGFwcHJvcHJpYXRlIG1lY2hhbmlzbS4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBXcml0ZUVudGl0eURhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpOwotCi0gICAgdm9pZCBTZXRLZXlQcmVmaXgoY29uc3QgU3RyaW5nOCYga2V5UHJlZml4KTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBCYWNrdXBEYXRhV3JpdGVyKCk7Ci0gICAgc3RhdHVzX3Qgd3JpdGVfcGFkZGluZ19mb3IoaW50IG4pOwotICAgIAotICAgIGludCBtX2ZkOwotICAgIHN0YXR1c190IG1fc3RhdHVzOwotICAgIHNzaXplX3QgbV9wb3M7Ci0gICAgaW50IG1fZW50aXR5Q291bnQ7Ci0gICAgU3RyaW5nOCBtX2tleVByZWZpeDsKLX07Ci0KLS8qKgotICogUmVhZHMgdGhlIGRhdGEuCi0gKgotICogSWYgYW4gZXJyb3Igb2NjdXJzLCBpdCBwb2lzb25zIHRoaXMgb2JqZWN0IGFuZCBhbGwgd3JpdGUgY2FsbHMgd2lsbCBmYWlsCi0gKiB3aXRoIHRoZSBlcnJvciB0aGF0IG9jY3VycmVkLgotICovCi1jbGFzcyBCYWNrdXBEYXRhUmVhZGVyCi17Ci1wdWJsaWM6Ci0gICAgQmFja3VwRGF0YVJlYWRlcihpbnQgZmQpOwotICAgIC8vIGRvZXMgbm90IGNsb3NlIGZkCi0gICAgfkJhY2t1cERhdGFSZWFkZXIoKTsKLQotICAgIHN0YXR1c190IFN0YXR1cygpOwotICAgIHN0YXR1c190IFJlYWROZXh0SGVhZGVyKGJvb2wqIGRvbmUsIGludCogdHlwZSk7Ci0KLSAgICBib29sIEhhc0VudGl0aWVzKCk7Ci0gICAgc3RhdHVzX3QgUmVhZEVudGl0eUhlYWRlcihTdHJpbmc4KiBrZXksIHNpemVfdCogZGF0YVNpemUpOwotICAgIHN0YXR1c190IFNraXBFbnRpdHlEYXRhKCk7IC8vIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHBvaW50ZXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGF0YS4KLSAgICBzc2l6ZV90IFJlYWRFbnRpdHlEYXRhKHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBCYWNrdXBEYXRhUmVhZGVyKCk7Ci0gICAgc3RhdHVzX3Qgc2tpcF9wYWRkaW5nKCk7Ci0gICAgCi0gICAgaW50IG1fZmQ7Ci0gICAgYm9vbCBtX2RvbmU7Ci0gICAgc3RhdHVzX3QgbV9zdGF0dXM7Ci0gICAgc3NpemVfdCBtX3BvczsKLSAgICBzc2l6ZV90IG1fZGF0YUVuZFBvczsKLSAgICBpbnQgbV9lbnRpdHlDb3VudDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIGludCB0eXBlOwotICAgICAgICBlbnRpdHlfaGVhZGVyX3YxIGVudGl0eTsKLSAgICB9IG1faGVhZGVyOwotICAgIFN0cmluZzggbV9rZXk7Ci19OwotCi1pbnQgYmFja191cF9maWxlcyhpbnQgb2xkU25hcHNob3RGRCwgQmFja3VwRGF0YVdyaXRlciogZGF0YVN0cmVhbSwgaW50IG5ld1NuYXBzaG90RkQsCi0gICAgICAgIGNoYXIgY29uc3QqIGNvbnN0KiBmaWxlcywgY2hhciBjb25zdCogY29uc3QgKmtleXMsIGludCBmaWxlQ291bnQpOwotCi1pbnQgd3JpdGVfdGFyZmlsZShjb25zdCBTdHJpbmc4JiBwYWNrYWdlTmFtZSwgY29uc3QgU3RyaW5nOCYgZG9tYWluLAotICAgICAgICBjb25zdCBTdHJpbmc4JiByb290UGF0aCwgY29uc3QgU3RyaW5nOCYgZmlsZVBhdGgsIEJhY2t1cERhdGFXcml0ZXIqIG91dHB1dFN0cmVhbSk7Ci0KLWNsYXNzIFJlc3RvcmVIZWxwZXJCYXNlCi17Ci1wdWJsaWM6Ci0gICAgUmVzdG9yZUhlbHBlckJhc2UoKTsKLSAgICB+UmVzdG9yZUhlbHBlckJhc2UoKTsKLQotICAgIHN0YXR1c190IFdyaXRlRmlsZShjb25zdCBTdHJpbmc4JiBmaWxlbmFtZSwgQmFja3VwRGF0YVJlYWRlciogaW4pOwotICAgIHN0YXR1c190IFdyaXRlU25hcHNob3QoaW50IGZkKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkKiBtX2J1ZjsKLSAgICBib29sIG1fbG9nZ2VkVW5rbm93bk1ldGFkYXRhOwotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsRmlsZVJlYz4gbV9maWxlczsKLX07Ci0KLSNkZWZpbmUgVEVTVF9CQUNLVVBfSEVMUEVSUyAxCi0KLSNpZiBURVNUX0JBQ0tVUF9IRUxQRVJTCi1pbnQgYmFja3VwX2hlbHBlcl90ZXN0X2VtcHR5KCk7Ci1pbnQgYmFja3VwX2hlbHBlcl90ZXN0X2ZvdXIoKTsKLWludCBiYWNrdXBfaGVscGVyX3Rlc3RfZmlsZXMoKTsKLWludCBiYWNrdXBfaGVscGVyX3Rlc3RfbnVsbF9iYXNlKCk7Ci1pbnQgYmFja3VwX2hlbHBlcl90ZXN0X21pc3NpbmdfZmlsZSgpOwotaW50IGJhY2t1cF9oZWxwZXJfdGVzdF9kYXRhX3dyaXRlcigpOwotaW50IGJhY2t1cF9oZWxwZXJfdGVzdF9kYXRhX3JlYWRlcigpOwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIF9VVElMU19CQUNLVVBfSEVMUEVSU19ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FuZHJvaWRmdy9DdXJzb3JXaW5kb3cuaCBiL2luY2x1ZGUvYW5kcm9pZGZ3L0N1cnNvcldpbmRvdy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTI5NzlhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYW5kcm9pZGZ3L0N1cnNvcldpbmRvdy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIF9BTkRST0lEX19EQVRBQkFTRV9XSU5ET1dfSAotI2RlZmluZSBfQU5EUk9JRF9fREFUQUJBU0VfV0lORE9XX0gKLQotI2luY2x1ZGUgPGN1dGlscy9sb2cuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotI2luY2x1ZGUgPGJpbmRlci9QYXJjZWwuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLSNpZiBMT0dfTkRFQlVHCi0KLSNkZWZpbmUgSUZfTE9HX1dJTkRPVygpIGlmIChmYWxzZSkKLSNkZWZpbmUgTE9HX1dJTkRPVyguLi4pCi0KLSNlbHNlCi0KLSNkZWZpbmUgSUZfTE9HX1dJTkRPVygpIElGX0FMT0coTE9HX0RFQlVHLCAiQ3Vyc29yV2luZG93IikKLSNkZWZpbmUgTE9HX1dJTkRPVyguLi4pIEFMT0coTE9HX0RFQlVHLCAiQ3Vyc29yV2luZG93IiwgX19WQV9BUkdTX18pCi0KLSNlbmRpZgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBzdG9yZXMgYSBzZXQgb2Ygcm93cyBmcm9tIGEgZGF0YWJhc2UgaW4gYSBidWZmZXIuIFRoZSBiZWdpbmluZyBvZiB0aGUKLSAqIHdpbmRvdyBoYXMgZmlyc3QgY2h1bmsgb2YgUm93U2xvdHMsIHdoaWNoIGFyZSBvZmZzZXRzIHRvIHRoZSByb3cgZGlyZWN0b3J5LCBmb2xsb3dlZCBieQotICogYW4gb2Zmc2V0IHRvIHRoZSBuZXh0IGNodW5rIGluIGEgbGlua2VkLWxpc3Qgb2YgYWRkaXRpb25hbCBjaHVuayBvZiBSb3dTbG90cyBpbiBjYXNlCi0gKiB0aGUgcHJlLWFsbG9jYXRlZCBjaHVuayBpc24ndCBiaWcgZW5vdWdoIHRvIHJlZmVyIHRvIGFsbCByb3dzLiBFYWNoIHJvdyBkaXJlY3RvcnkgaGFzIGEKLSAqIEZpZWxkU2xvdCBwZXIgY29sdW1uLCB3aGljaCBoYXMgdGhlIHNpemUsIG9mZnNldCwgYW5kIHR5cGUgb2YgdGhlIGRhdGEgZm9yIHRoYXQgZmllbGQuCi0gKiBOb3RlIHRoYXQgdGhlIGRhdGEgdHlwZXMgY29tZSBmcm9tIHNxbGl0ZTMuaC4KLSAqCi0gKiBTdHJpbmdzIGFyZSBzdG9yZWQgaW4gVVRGLTguCi0gKi8KLWNsYXNzIEN1cnNvcldpbmRvdyB7Ci0gICAgQ3Vyc29yV2luZG93KGNvbnN0IFN0cmluZzgmIG5hbWUsIGludCBhc2htZW1GZCwKLSAgICAgICAgICAgIHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCBib29sIHJlYWRPbmx5KTsKLQotcHVibGljOgotICAgIC8qIEZpZWxkIHR5cGVzLiAqLwotICAgIGVudW0gewotICAgICAgICBGSUVMRF9UWVBFX05VTEwgPSAwLAotICAgICAgICBGSUVMRF9UWVBFX0lOVEVHRVIgPSAxLAotICAgICAgICBGSUVMRF9UWVBFX0ZMT0FUID0gMiwKLSAgICAgICAgRklFTERfVFlQRV9TVFJJTkcgPSAzLAotICAgICAgICBGSUVMRF9UWVBFX0JMT0IgPSA0LAotICAgIH07Ci0KLSAgICAvKiBPcGFxdWUgdHlwZSB0aGF0IGRlc2NyaWJlcyBhIGZpZWxkIHNsb3QuICovCi0gICAgc3RydWN0IEZpZWxkU2xvdCB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgaW50MzJfdCB0eXBlOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBkb3VibGUgZDsKLSAgICAgICAgICAgIGludDY0X3QgbDsKLSAgICAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0OwotICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemU7Ci0gICAgICAgICAgICB9IGJ1ZmZlcjsKLSAgICAgICAgfSBkYXRhOwotCi0gICAgICAgIGZyaWVuZCBjbGFzcyBDdXJzb3JXaW5kb3c7Ci0gICAgfSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0KLSAgICB+Q3Vyc29yV2luZG93KCk7Ci0KLSAgICBzdGF0aWMgc3RhdHVzX3QgY3JlYXRlKGNvbnN0IFN0cmluZzgmIG5hbWUsIHNpemVfdCBzaXplLCBDdXJzb3JXaW5kb3cqKiBvdXRDdXJzb3JXaW5kb3cpOwotICAgIHN0YXRpYyBzdGF0dXNfdCBjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCogcGFyY2VsLCBDdXJzb3JXaW5kb3cqKiBvdXRDdXJzb3JXaW5kb3cpOwotCi0gICAgc3RhdHVzX3Qgd3JpdGVUb1BhcmNlbChQYXJjZWwqIHBhcmNlbCk7Ci0KLSAgICBpbmxpbmUgU3RyaW5nOCBuYW1lKCkgeyByZXR1cm4gbU5hbWU7IH0KLSAgICBpbmxpbmUgc2l6ZV90IHNpemUoKSB7IHJldHVybiBtU2l6ZTsgfQotICAgIGlubGluZSBzaXplX3QgZnJlZVNwYWNlKCkgeyByZXR1cm4gbVNpemUgLSBtSGVhZGVyLT5mcmVlT2Zmc2V0OyB9Ci0gICAgaW5saW5lIHVpbnQzMl90IGdldE51bVJvd3MoKSB7IHJldHVybiBtSGVhZGVyLT5udW1Sb3dzOyB9Ci0gICAgaW5saW5lIHVpbnQzMl90IGdldE51bUNvbHVtbnMoKSB7IHJldHVybiBtSGVhZGVyLT5udW1Db2x1bW5zOyB9Ci0KLSAgICBzdGF0dXNfdCBjbGVhcigpOwotICAgIHN0YXR1c190IHNldE51bUNvbHVtbnModWludDMyX3QgbnVtQ29sdW1ucyk7Ci0KLSAgICAvKioKLSAgICAgKiBBbGxvY2F0ZSBhIHJvdyBzbG90IGFuZCBpdHMgZGlyZWN0b3J5LgotICAgICAqIFRoZSByb3cgaXMgaW5pdGlhbGl6ZWQgd2lsbCBudWxsIGVudHJpZXMgZm9yIGVhY2ggZmllbGQuCi0gICAgICovCi0gICAgc3RhdHVzX3QgYWxsb2NSb3coKTsKLSAgICBzdGF0dXNfdCBmcmVlTGFzdFJvdygpOwotCi0gICAgc3RhdHVzX3QgcHV0QmxvYih1aW50MzJfdCByb3csIHVpbnQzMl90IGNvbHVtbiwgY29uc3Qgdm9pZCogdmFsdWUsIHNpemVfdCBzaXplKTsKLSAgICBzdGF0dXNfdCBwdXRTdHJpbmcodWludDMyX3Qgcm93LCB1aW50MzJfdCBjb2x1bW4sIGNvbnN0IGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZUluY2x1ZGluZ051bGwpOwotICAgIHN0YXR1c190IHB1dExvbmcodWludDMyX3Qgcm93LCB1aW50MzJfdCBjb2x1bW4sIGludDY0X3QgdmFsdWUpOwotICAgIHN0YXR1c190IHB1dERvdWJsZSh1aW50MzJfdCByb3csIHVpbnQzMl90IGNvbHVtbiwgZG91YmxlIHZhbHVlKTsKLSAgICBzdGF0dXNfdCBwdXROdWxsKHVpbnQzMl90IHJvdywgdWludDMyX3QgY29sdW1uKTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGZpZWxkIHNsb3QgYXQgdGhlIHNwZWNpZmllZCByb3cgYW5kIGNvbHVtbi4KLSAgICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIHJlcXVlc3RlZCByb3cgb3IgY29sdW1uIGlzIG5vdCBpbiB0aGUgd2luZG93LgotICAgICAqLwotICAgIEZpZWxkU2xvdCogZ2V0RmllbGRTbG90KHVpbnQzMl90IHJvdywgdWludDMyX3QgY29sdW1uKTsKLQotICAgIGlubGluZSBpbnQzMl90IGdldEZpZWxkU2xvdFR5cGUoRmllbGRTbG90KiBmaWVsZFNsb3QpIHsKLSAgICAgICAgcmV0dXJuIGZpZWxkU2xvdC0+dHlwZTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgaW50NjRfdCBnZXRGaWVsZFNsb3RWYWx1ZUxvbmcoRmllbGRTbG90KiBmaWVsZFNsb3QpIHsKLSAgICAgICAgcmV0dXJuIGZpZWxkU2xvdC0+ZGF0YS5sOwotICAgIH0KLQotICAgIGlubGluZSBkb3VibGUgZ2V0RmllbGRTbG90VmFsdWVEb3VibGUoRmllbGRTbG90KiBmaWVsZFNsb3QpIHsKLSAgICAgICAgcmV0dXJuIGZpZWxkU2xvdC0+ZGF0YS5kOwotICAgIH0KLQotICAgIGlubGluZSBjb25zdCBjaGFyKiBnZXRGaWVsZFNsb3RWYWx1ZVN0cmluZyhGaWVsZFNsb3QqIGZpZWxkU2xvdCwKLSAgICAgICAgICAgIHNpemVfdCogb3V0U2l6ZUluY2x1ZGluZ051bGwpIHsKLSAgICAgICAgKm91dFNpemVJbmNsdWRpbmdOdWxsID0gZmllbGRTbG90LT5kYXRhLmJ1ZmZlci5zaXplOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KG9mZnNldFRvUHRyKGZpZWxkU2xvdC0+ZGF0YS5idWZmZXIub2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgaW5saW5lIGNvbnN0IHZvaWQqIGdldEZpZWxkU2xvdFZhbHVlQmxvYihGaWVsZFNsb3QqIGZpZWxkU2xvdCwgc2l6ZV90KiBvdXRTaXplKSB7Ci0gICAgICAgICpvdXRTaXplID0gZmllbGRTbG90LT5kYXRhLmJ1ZmZlci5zaXplOwotICAgICAgICByZXR1cm4gb2Zmc2V0VG9QdHIoZmllbGRTbG90LT5kYXRhLmJ1ZmZlci5vZmZzZXQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IFJPV19TTE9UX0NIVU5LX05VTV9ST1dTID0gMTAwOwotCi0gICAgc3RydWN0IEhlYWRlciB7Ci0gICAgICAgIC8vIE9mZnNldCBvZiB0aGUgbG93ZXN0IHVudXNlZCBieXRlIGluIHRoZSB3aW5kb3cuCi0gICAgICAgIHVpbnQzMl90IGZyZWVPZmZzZXQ7Ci0KLSAgICAgICAgLy8gT2Zmc2V0IG9mIHRoZSBmaXJzdCByb3cgc2xvdCBjaHVuay4KLSAgICAgICAgdWludDMyX3QgZmlyc3RDaHVua09mZnNldDsKLQotICAgICAgICB1aW50MzJfdCBudW1Sb3dzOwotICAgICAgICB1aW50MzJfdCBudW1Db2x1bW5zOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUm93U2xvdCB7Ci0gICAgICAgIHVpbnQzMl90IG9mZnNldDsKLSAgICB9OwotCi0gICAgc3RydWN0IFJvd1Nsb3RDaHVuayB7Ci0gICAgICAgIFJvd1Nsb3Qgc2xvdHNbUk9XX1NMT1RfQ0hVTktfTlVNX1JPV1NdOwotICAgICAgICB1aW50MzJfdCBuZXh0Q2h1bmtPZmZzZXQ7Ci0gICAgfTsKLQotICAgIFN0cmluZzggbU5hbWU7Ci0gICAgaW50IG1Bc2htZW1GZDsKLSAgICB2b2lkKiBtRGF0YTsKLSAgICBzaXplX3QgbVNpemU7Ci0gICAgYm9vbCBtUmVhZE9ubHk7Ci0gICAgSGVhZGVyKiBtSGVhZGVyOwotCi0gICAgaW5saW5lIHZvaWQqIG9mZnNldFRvUHRyKHVpbnQzMl90IG9mZnNldCkgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1EYXRhKSArIG9mZnNldDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdWludDMyX3Qgb2Zmc2V0RnJvbVB0cih2b2lkKiBwdHIpIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihwdHIpIC0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1EYXRhKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBbGxvY2F0ZSBhIHBvcnRpb24gb2YgdGhlIHdpbmRvdy4gUmV0dXJucyB0aGUgb2Zmc2V0Ci0gICAgICogb2YgdGhlIGFsbG9jYXRpb24sIG9yIDAgaWYgdGhlcmUgaXNuJ3QgZW5vdWdoIHNwYWNlLgotICAgICAqIElmIGFsaWduZWQgaXMgdHJ1ZSwgdGhlIGFsbG9jYXRpb24gZ2V0cyA0IGJ5dGUgYWxpZ25tZW50LgotICAgICAqLwotICAgIHVpbnQzMl90IGFsbG9jKHNpemVfdCBzaXplLCBib29sIGFsaWduZWQgPSBmYWxzZSk7Ci0KLSAgICBSb3dTbG90KiBnZXRSb3dTbG90KHVpbnQzMl90IHJvdyk7Ci0gICAgUm93U2xvdCogYWxsb2NSb3dTbG90KCk7Ci0KLSAgICBzdGF0dXNfdCBwdXRCbG9iT3JTdHJpbmcodWludDMyX3Qgcm93LCB1aW50MzJfdCBjb2x1bW4sCi0gICAgICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGludDMyX3QgdHlwZSk7Ci19OwotCi19OyAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYW5kcm9pZGZ3L09iYkZpbGUuaCBiL2luY2x1ZGUvYW5kcm9pZGZ3L09iYkZpbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc1NTljZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FuZHJvaWRmdy9PYmJGaWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgT0JCRklMRV9IXwotI2RlZmluZSBPQkJGSUxFX0hfCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0KLSNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLS8vIE9CQiBmbGFncyAoYml0IDApCi0jZGVmaW5lIE9CQl9PVkVSTEFZICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgT0JCX1NBTFRFRCAgICAgICAgICAoMSA8PCAxKQotCi1jbGFzcyBPYmJGaWxlIDogcHVibGljIFJlZkJhc2UgewotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfk9iYkZpbGUoKTsKLQotcHVibGljOgotICAgIE9iYkZpbGUoKTsKLQotICAgIGJvb2wgcmVhZEZyb20oY29uc3QgY2hhciogZmlsZW5hbWUpOwotICAgIGJvb2wgcmVhZEZyb20oaW50IGZkKTsKLSAgICBib29sIHdyaXRlVG8oY29uc3QgY2hhciogZmlsZW5hbWUpOwotICAgIGJvb2wgd3JpdGVUbyhpbnQgZmQpOwotICAgIGJvb2wgcmVtb3ZlRnJvbShjb25zdCBjaGFyKiBmaWxlbmFtZSk7Ci0gICAgYm9vbCByZW1vdmVGcm9tKGludCBmZCk7Ci0KLSAgICBjb25zdCBjaGFyKiBnZXRGaWxlTmFtZSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1GaWxlTmFtZTsKLSAgICB9Ci0KLSAgICBjb25zdCBTdHJpbmc4IGdldFBhY2thZ2VOYW1lKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbVBhY2thZ2VOYW1lOwotICAgIH0KLQotICAgIHZvaWQgc2V0UGFja2FnZU5hbWUoU3RyaW5nOCBwYWNrYWdlTmFtZSkgewotICAgICAgICBtUGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZTsKLSAgICB9Ci0KLSAgICBpbnQzMl90IGdldFZlcnNpb24oKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtVmVyc2lvbjsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFZlcnNpb24oaW50MzJfdCB2ZXJzaW9uKSB7Ci0gICAgICAgIG1WZXJzaW9uID0gdmVyc2lvbjsKLSAgICB9Ci0KLSAgICBpbnQzMl90IGdldEZsYWdzKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbUZsYWdzOwotICAgIH0KLQotICAgIHZvaWQgc2V0RmxhZ3MoaW50MzJfdCBmbGFncykgewotICAgICAgICBtRmxhZ3MgPSBmbGFnczsKLSAgICB9Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBnZXRTYWx0KHNpemVfdCogbGVuZ3RoKSBjb25zdCB7Ci0gICAgICAgIGlmICgobUZsYWdzICYgT0JCX1NBTFRFRCkgPT0gMCkgewotICAgICAgICAgICAgKmxlbmd0aCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgICpsZW5ndGggPSBzaXplb2YobVNhbHQpOwotICAgICAgICByZXR1cm4gbVNhbHQ7Ci0gICAgfQotCi0gICAgYm9vbCBzZXRTYWx0KGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNhbHQsIHNpemVfdCBsZW5ndGgpIHsKLSAgICAgICAgaWYgKGxlbmd0aCAhPSBzaXplb2YobVNhbHQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtZW1jcHkobVNhbHQsIHNhbHQsIHNpemVvZihtU2FsdCkpOwotICAgICAgICBtRmxhZ3MgfD0gT0JCX1NBTFRFRDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBpc092ZXJsYXkoKSB7Ci0gICAgICAgIHJldHVybiAobUZsYWdzICYgT0JCX09WRVJMQVkpID09IE9CQl9PVkVSTEFZOwotICAgIH0KLQotICAgIHZvaWQgc2V0T3ZlcmxheShib29sIG92ZXJsYXkpIHsKLSAgICAgICAgaWYgKG92ZXJsYXkpIHsKLSAgICAgICAgICAgIG1GbGFncyB8PSBPQkJfT1ZFUkxBWTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1GbGFncyAmPSB+T0JCX09WRVJMQVk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgaW5saW5lIHVpbnQzMl90IGdldDRMRShjb25zdCB1bnNpZ25lZCBjaGFyKiBidWYpIHsKLSAgICAgICAgcmV0dXJuIGJ1ZlswXSB8IChidWZbMV0gPDwgOCkgfCAoYnVmWzJdIDw8IDE2KSB8IChidWZbM10gPDwgMjQpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXQ0TEUodW5zaWduZWQgY2hhciogYnVmLCB1aW50MzJfdCB2YWwpIHsKLSAgICAgICAgYnVmWzBdID0gdmFsICYgMHhGRjsKLSAgICAgICAgYnVmWzFdID0gKHZhbCA+PiA4KSAmIDB4RkY7Ci0gICAgICAgIGJ1ZlsyXSA9ICh2YWwgPj4gMTYpICYgMHhGRjsKLSAgICAgICAgYnVmWzNdID0gKHZhbCA+PiAyNCkgJiAweEZGOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICAvKiBQYWNrYWdlIG5hbWUgdGhpcyBPYmJGaWxlIGlzIGFzc29jaWF0ZWQgd2l0aCAqLwotICAgIFN0cmluZzggbVBhY2thZ2VOYW1lOwotCi0gICAgLyogUGFja2FnZSB2ZXJzaW9uIHRoaXMgT2JiRmlsZSBpcyBhc3NvY2lhdGVkIHdpdGggKi8KLSAgICBpbnQzMl90IG1WZXJzaW9uOwotCi0gICAgLyogRmxhZ3MgZm9yIHRoaXMgT0JCIHR5cGUuICovCi0gICAgaW50MzJfdCBtRmxhZ3M7Ci0KLSAgICAvKiBXaGV0aGVyIHRoZSBmaWxlIGlzIHNhbHRlZC4gKi8KLSAgICBib29sIG1TYWx0ZWQ7Ci0KLSAgICAvKiBUaGUgZW5jcnlwdGlvbiBzYWx0LiAqLwotICAgIHVuc2lnbmVkIGNoYXIgbVNhbHRbOF07Ci0KLSAgICBjb25zdCBjaGFyKiBtRmlsZU5hbWU7Ci0KLSAgICBzaXplX3QgbUZpbGVTaXplOwotCi0gICAgc2l6ZV90IG1Gb290ZXJTdGFydDsKLQotICAgIHVuc2lnbmVkIGNoYXIqIG1SZWFkQnVmOwotCi0gICAgYm9vbCBwYXJzZU9iYkZpbGUoaW50IGZkKTsKLX07Ci0KLX0KLSNlbmRpZiAvKiBPQkJGSUxFX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FuZHJvaWRmdy9Qb3dlck1hbmFnZXIuaCBiL2luY2x1ZGUvYW5kcm9pZGZ3L1Bvd2VyTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTk4ZGIwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYW5kcm9pZGZ3L1Bvd2VyTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgX0FORFJPSURGV19QT1dFUl9NQU5BR0VSX0gKLSNkZWZpbmUgX0FORFJPSURGV19QT1dFUl9NQU5BR0VSX0gKLQotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWVudW0gewotICAgIFVTRVJfQUNUSVZJVFlfRVZFTlRfT1RIRVIgPSAwLAotICAgIFVTRVJfQUNUSVZJVFlfRVZFTlRfQlVUVE9OID0gMSwKLSAgICBVU0VSX0FDVElWSVRZX0VWRU5UX1RPVUNIID0gMiwKLQotICAgIFVTRVJfQUNUSVZJVFlfRVZFTlRfTEFTVCA9IFVTRVJfQUNUSVZJVFlfRVZFTlRfVE9VQ0gsIC8vIExhc3QgdmFsaWQgZXZlbnQgY29kZS4KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIF9BTkRST0lERldfUE9XRVJfTUFOQUdFUl9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmggYi9pbmNsdWRlL2FuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YWZhNTkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8KLS8vIERlZmluaXRpb25zIG9mIHJlc291cmNlIGRhdGEgc3RydWN0dXJlcy4KLS8vCi0jaWZuZGVmIF9MSUJTX1VUSUxTX1JFU09VUkNFX1RZUEVTX0gKLSNkZWZpbmUgX0xJQlNfVVRJTFNfUkVTT1VSQ0VfVFlQRVNfSAotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L0Fzc2V0Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvQnl0ZU9yZGVyLmg+Ci0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nMTYuaD4KLSNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KLQotI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KLQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaW5jbHVkZSA8YW5kcm9pZC9jb25maWd1cmF0aW9uLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgUE5HIEV4dGVuc2lvbnMKLSAqCi0gKiAgTmV3IHByaXZhdGUgY2h1bmtzIHRoYXQgbWF5IGJlIHBsYWNlZCBpbiBQTkcgaW1hZ2VzLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKioKLSAqIFRoaXMgY2h1bmsgc3BlY2lmaWVzIGhvdyB0byBzcGxpdCBhbiBpbWFnZSBpbnRvIHNlZ21lbnRzIGZvcgotICogc2NhbGluZy4KLSAqCi0gKiBUaGVyZSBhcmUgSiBob3Jpem9udGFsIGFuZCBLIHZlcnRpY2FsIHNlZ21lbnRzLiAgVGhlc2Ugc2VnbWVudHMgZGl2aWRlCi0gKiB0aGUgaW1hZ2UgaW50byBKKksgcmVnaW9ucyBhcyBmb2xsb3dzICh3aGVyZSBKPTQgYW5kIEs9Myk6Ci0gKgotICogICAgICBGMCAgIFMwICAgIEYxICAgICBTMQotICogICArLS0tLS0rLS0tLSstLS0tLS0rLS0tLS0tLSsKLSAqIFMyfCAgMCAgfCAgMSB8ICAyICAgfCAgIDMgICB8Ci0gKiAgICstLS0tLSstLS0tKy0tLS0tLSstLS0tLS0tKwotICogICB8ICAgICB8ICAgIHwgICAgICB8ICAgICAgIHwKLSAqICAgfCAgICAgfCAgICB8ICAgICAgfCAgICAgICB8Ci0gKiBGMnwgIDQgIHwgIDUgfCAgNiAgIHwgICA3ICAgfAotICogICB8ICAgICB8ICAgIHwgICAgICB8ICAgICAgIHwKLSAqICAgfCAgICAgfCAgICB8ICAgICAgfCAgICAgICB8Ci0gKiAgICstLS0tLSstLS0tKy0tLS0tLSstLS0tLS0tKwotICogUzN8ICA4ICB8ICA5IHwgIDEwICB8ICAgMTEgIHwKLSAqICAgKy0tLS0tKy0tLS0rLS0tLS0tKy0tLS0tLS0rCi0gKgotICogRWFjaCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzZWdtZW50IGlzIGNvbnNpZGVyZWQgdG8gYnkgZWl0aGVyCi0gKiBzdHJldGNoYWJsZSAobWFya2VkIGJ5IHRoZSBTeCBsYWJlbHMpIG9yIGZpeGVkIChtYXJrZWQgYnkgdGhlIEZ5Ci0gKiBsYWJlbHMpLCBpbiB0aGUgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBheGlzLCByZXNwZWN0aXZlbHkuIEluIHRoZQotICogYWJvdmUgZXhhbXBsZSwgdGhlIGZpcnN0IGlzIGhvcml6b250YWwgc2VnbWVudCAoRjApIGlzIGZpeGVkLCB0aGUKLSAqIG5leHQgaXMgc3RyZXRjaGFibGUgYW5kIHRoZW4gdGhleSBjb250aW51ZSB0byBhbHRlcm5hdGUuIE5vdGUgdGhhdAotICogdGhlIHNlZ21lbnQgbGlzdCBmb3IgZWFjaCBheGlzIGNhbiBiZWdpbiBvciBlbmQgd2l0aCBhIHN0cmV0Y2hhYmxlCi0gKiBvciBmaXhlZCBzZWdtZW50LgotICoKLSAqIFRoZSByZWxhdGl2ZSBzaXplcyBvZiB0aGUgc3RyZXRjaHkgc2VnbWVudHMgaW5kaWNhdGVzIHRoZSByZWxhdGl2ZQotICogYW1vdW50IG9mIHN0cmV0Y2hpbmVzcyBvZiB0aGUgcmVnaW9ucyBib3JkZXJlZCBieSB0aGUgc2VnbWVudHMuICBGb3IKLSAqIGV4YW1wbGUsIHJlZ2lvbnMgMywgNyBhbmQgMTEgYWJvdmUgd2lsbCB0YWtlIHVwIG1vcmUgaG9yaXpvbnRhbCBzcGFjZQotICogdGhhbiByZWdpb25zIDEsIDUgYW5kIDkgc2luY2UgdGhlIGhvcml6b250YWwgc2VnbWVudCBhc3NvY2lhdGVkIHdpdGgKLSAqIHRoZSBmaXJzdCBzZXQgb2YgcmVnaW9ucyBpcyBsYXJnZXIgdGhhbiB0aGUgb3RoZXIgc2V0IG9mIHJlZ2lvbnMuICBUaGUKLSAqIHJhdGlvcyBvZiB0aGUgYW1vdW50IG9mIGhvcml6b250YWwgKG9yIHZlcnRpY2FsKSBzcGFjZSB0YWtlbiBieSBhbnkKLSAqIHR3byBzdHJldGNoYWJsZSBzbGljZXMgaXMgZXhhY3RseSB0aGUgcmF0aW8gb2YgdGhlaXIgY29ycmVzcG9uZGluZwotICogc2VnbWVudCBsZW5ndGhzLgotICoKLSAqIHhEaXZzIGFuZCB5RGl2cyBwb2ludCB0byBhcnJheXMgb2YgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgcGl4ZWwKLSAqIGluZGljZXMuICBUaGUgZmlyc3QgcGFpciBvZiBEaXZzIChpbiBlaXRoZXIgYXJyYXkpIGluZGljYXRlIHRoZQotICogc3RhcnRpbmcgYW5kIGVuZGluZyBwb2ludHMgb2YgdGhlIGZpcnN0IHN0cmV0Y2hhYmxlIHNlZ21lbnQgaW4gdGhhdAotICogYXhpcy4gVGhlIG5leHQgcGFpciBzcGVjaWZpZXMgdGhlIG5leHQgc3RyZXRjaGFibGUgc2VnbWVudCwgZXRjLiBTbwotICogaW4gdGhlIGFib3ZlIGV4YW1wbGUgeERpdlswXSBhbmQgeERpdlsxXSBzcGVjaWZ5IHRoZSBob3Jpem9udGFsCi0gKiBjb29yZGluYXRlcyBmb3IgdGhlIHJlZ2lvbnMgbGFiZWxlZCAxLCA1IGFuZCA5LiAgeERpdlsyXSBhbmQKLSAqIHhEaXZbM10gc3BlY2lmeSB0aGUgY29vcmRpbmF0ZXMgZm9yIHJlZ2lvbnMgMywgNyBhbmQgMTEuIE5vdGUgdGhhdAotICogdGhlIGxlZnRtb3N0IHNsaWNlcyBhbHdheXMgc3RhcnQgYXQgeD0wIGFuZCB0aGUgcmlnaHRtb3N0IHNsaWNlcwotICogYWx3YXlzIGVuZCBhdCB0aGUgZW5kIG9mIHRoZSBpbWFnZS4gU28sIGZvciBleGFtcGxlLCB0aGUgcmVnaW9ucyAwLAotICogNCBhbmQgOCAod2hpY2ggYXJlIGZpeGVkIGFsb25nIHRoZSBYIGF4aXMpIHN0YXJ0IGF0IHggdmFsdWUgMCBhbmQKLSAqIGdvIHRvIHhEaXZbMF0gYW5kIHNsaWNlcyAyLCA2IGFuZCAxMCBzdGFydCBhdCB4RGl2WzFdIGFuZCBlbmQgYXQKLSAqIHhEaXZbMl0uCi0gKgotICogVGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgdGhlIGNvbG9ycyBmaWVsZCBsaXN0cyBjb250YWlucyBoaW50cyBmb3IKLSAqIGVhY2ggb2YgdGhlIHJlZ2lvbnMuICBUaGV5IGFyZSBvcmRlcmVkIGFjY29yZGluZyBsZWZ0LXRvLXJpZ2h0IGFuZAotICogdG9wLXRvLWJvdHRvbSBhcyBpbmRpY2F0ZWQgYWJvdmUuIEZvciBlYWNoIHNlZ21lbnQgdGhhdCBpcyBhIHNvbGlkCi0gKiBjb2xvciB0aGUgYXJyYXkgZW50cnkgd2lsbCBjb250YWluIHRoYXQgY29sb3IgdmFsdWU7IG90aGVyd2lzZSBpdAotICogd2lsbCBjb250YWluIE5PX0NPTE9SLiAgU2VnbWVudHMgdGhhdCBhcmUgY29tcGxldGVseSB0cmFuc3BhcmVudAotICogd2lsbCBhbHdheXMgaGF2ZSB0aGUgdmFsdWUgVFJBTlNQQVJFTlRfQ09MT1IuCi0gKgotICogVGhlIFBORyBjaHVuayB0eXBlIGlzICJucFRjIi4KLSAqLwotc3RydWN0IFJlc19wbmdfOXBhdGNoCi17Ci0gICAgUmVzX3BuZ185cGF0Y2goKSA6IHdhc0Rlc2VyaWFsaXplZChmYWxzZSksIHhEaXZzKE5VTEwpLAotICAgICAgICAgICAgICAgICAgICAgICB5RGl2cyhOVUxMKSwgY29sb3JzKE5VTEwpIHsgfQotCi0gICAgaW50OF90IHdhc0Rlc2VyaWFsaXplZDsKLSAgICBpbnQ4X3QgbnVtWERpdnM7Ci0gICAgaW50OF90IG51bVlEaXZzOwotICAgIGludDhfdCBudW1Db2xvcnM7Ci0KLSAgICAvLyBUaGVzZSB0ZWxsIHdoZXJlIHRoZSBuZXh0IHNlY3Rpb24gb2YgYSBwYXRjaCBzdGFydHMuCi0gICAgLy8gRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCBwYXRjaCBpbmNsdWRlcyB0aGUgcGl4ZWxzIGZyb20KLSAgICAvLyAwIHRvIHhEaXZzWzBdLTEgYW5kIHRoZSBzZWNvbmQgcGF0Y2ggaW5jbHVkZXMgdGhlIHBpeGVscwotICAgIC8vIGZyb20geERpdnNbMF0gdG8geERpdnNbMV0tMS4KLSAgICAvLyBOb3RlOiBhbGxvY2F0aW9uL2ZyZWUgb2YgdGhlc2UgcG9pbnRlcnMgaXMgbGVmdCB0byB0aGUgY2FsbGVyLgotICAgIGludDMyX3QqIHhEaXZzOwotICAgIGludDMyX3QqIHlEaXZzOwotCi0gICAgaW50MzJfdCBwYWRkaW5nTGVmdCwgcGFkZGluZ1JpZ2h0OwotICAgIGludDMyX3QgcGFkZGluZ1RvcCwgcGFkZGluZ0JvdHRvbTsKLQotICAgIGVudW0gewotICAgICAgICAvLyBUaGUgOSBwYXRjaCBzZWdtZW50IGlzIG5vdCBhIHNvbGlkIGNvbG9yLgotICAgICAgICBOT19DT0xPUiA9IDB4MDAwMDAwMDEsCi0KLSAgICAgICAgLy8gVGhlIDkgcGF0Y2ggc2VnbWVudCBpcyBjb21wbGV0ZWx5IHRyYW5zcGFyZW50LgotICAgICAgICBUUkFOU1BBUkVOVF9DT0xPUiA9IDB4MDAwMDAwMDAKLSAgICB9OwotICAgIC8vIE5vdGU6IGFsbG9jYXRpb24vZnJlZSBvZiB0aGlzIHBvaW50ZXIgaXMgbGVmdCB0byB0aGUgY2FsbGVyLgotICAgIHVpbnQzMl90KiBjb2xvcnM7Ci0KLSAgICAvLyBDb252ZXJ0IGRhdGEgZnJvbSBkZXZpY2UgcmVwcmVzZW50YXRpb24gdG8gUE5HIGZpbGUgcmVwcmVzZW50YXRpb24uCi0gICAgdm9pZCBkZXZpY2VUb0ZpbGUoKTsKLSAgICAvLyBDb252ZXJ0IGRhdGEgZnJvbSBQTkcgZmlsZSByZXByZXNlbnRhdGlvbiB0byBkZXZpY2UgcmVwcmVzZW50YXRpb24uCi0gICAgdm9pZCBmaWxlVG9EZXZpY2UoKTsKLSAgICAvLyBTZXJpYWxpemUvTWFyc2hhbGwgdGhlIHBhdGNoIGRhdGEgaW50byBhIG5ld2x5IG1hbGxvYy1lZCBibG9jawotICAgIHZvaWQqIHNlcmlhbGl6ZSgpOwotICAgIC8vIFNlcmlhbGl6ZS9NYXJzaGFsbCB0aGUgcGF0Y2ggZGF0YQotICAgIHZvaWQgc2VyaWFsaXplKHZvaWQqIG91dERhdGEpOwotICAgIC8vIERlc2VyaWFsaXplL1VubWFyc2hhbGwgdGhlIHBhdGNoIGRhdGEKLSAgICBzdGF0aWMgUmVzX3BuZ185cGF0Y2gqIGRlc2VyaWFsaXplKGNvbnN0IHZvaWQqIGRhdGEpOwotICAgIC8vIENvbXB1dGUgdGhlIHNpemUgb2YgdGhlIHNlcmlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmUKLSAgICBzaXplX3Qgc2VyaWFsaXplZFNpemUoKTsKLX07Ci0KLS8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIEJhc2UgVHlwZXMKLSAqCi0gKiAgVGhlc2UgYXJlIHN0YW5kYXJkIHR5cGVzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIHNwZWNpZmljCi0gKiAgcmVzb3VyY2UgdHlwZXMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qKgotICogSGVhZGVyIHRoYXQgYXBwZWFycyBhdCB0aGUgZnJvbnQgb2YgZXZlcnkgZGF0YSBjaHVuayBpbiBhIHJlc291cmNlLgotICovCi1zdHJ1Y3QgUmVzQ2h1bmtfaGVhZGVyCi17Ci0gICAgLy8gVHlwZSBpZGVudGlmaWVyIGZvciB0aGlzIGNodW5rLiAgVGhlIG1lYW5pbmcgb2YgdGhpcyB2YWx1ZSBkZXBlbmRzCi0gICAgLy8gb24gdGhlIGNvbnRhaW5pbmcgY2h1bmsuCi0gICAgdWludDE2X3QgdHlwZTsKLQotICAgIC8vIFNpemUgb2YgdGhlIGNodW5rIGhlYWRlciAoaW4gYnl0ZXMpLiAgQWRkaW5nIHRoaXMgdmFsdWUgdG8KLSAgICAvLyB0aGUgYWRkcmVzcyBvZiB0aGUgY2h1bmsgYWxsb3dzIHlvdSB0byBmaW5kIGl0cyBhc3NvY2lhdGVkIGRhdGEKLSAgICAvLyAoaWYgYW55KS4KLSAgICB1aW50MTZfdCBoZWFkZXJTaXplOwotCi0gICAgLy8gVG90YWwgc2l6ZSBvZiB0aGlzIGNodW5rIChpbiBieXRlcykuICBUaGlzIGlzIHRoZSBjaHVua1NpemUgcGx1cwotICAgIC8vIHRoZSBzaXplIG9mIGFueSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2h1bmsuICBBZGRpbmcgdGhpcyB2YWx1ZQotICAgIC8vIHRvIHRoZSBjaHVuayBhbGxvd3MgeW91IHRvIGNvbXBsZXRlbHkgc2tpcCBpdHMgY29udGVudHMgKGluY2x1ZGluZwotICAgIC8vIGFueSBjaGlsZCBjaHVua3MpLiAgSWYgdGhpcyB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBjaHVua1NpemUsIHRoZXJlIGlzCi0gICAgLy8gbm8gZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGNodW5rLgotICAgIHVpbnQzMl90IHNpemU7Ci19OwotCi1lbnVtIHsKLSAgICBSRVNfTlVMTF9UWVBFICAgICAgICAgICAgICAgPSAweDAwMDAsCi0gICAgUkVTX1NUUklOR19QT09MX1RZUEUgICAgICAgID0gMHgwMDAxLAotICAgIFJFU19UQUJMRV9UWVBFICAgICAgICAgICAgICA9IDB4MDAwMiwKLSAgICBSRVNfWE1MX1RZUEUgICAgICAgICAgICAgICAgPSAweDAwMDMsCi0KLSAgICAvLyBDaHVuayB0eXBlcyBpbiBSRVNfWE1MX1RZUEUKLSAgICBSRVNfWE1MX0ZJUlNUX0NIVU5LX1RZUEUgICAgPSAweDAxMDAsCi0gICAgUkVTX1hNTF9TVEFSVF9OQU1FU1BBQ0VfVFlQRT0gMHgwMTAwLAotICAgIFJFU19YTUxfRU5EX05BTUVTUEFDRV9UWVBFICA9IDB4MDEwMSwKLSAgICBSRVNfWE1MX1NUQVJUX0VMRU1FTlRfVFlQRSAgPSAweDAxMDIsCi0gICAgUkVTX1hNTF9FTkRfRUxFTUVOVF9UWVBFICAgID0gMHgwMTAzLAotICAgIFJFU19YTUxfQ0RBVEFfVFlQRSAgICAgICAgICA9IDB4MDEwNCwKLSAgICBSRVNfWE1MX0xBU1RfQ0hVTktfVFlQRSAgICAgPSAweDAxN2YsCi0gICAgLy8gVGhpcyBjb250YWlucyBhIHVpbnQzMl90IGFycmF5IG1hcHBpbmcgc3RyaW5ncyBpbiB0aGUgc3RyaW5nCi0gICAgLy8gcG9vbCBiYWNrIHRvIHJlc291cmNlIGlkZW50aWZpZXJzLiAgSXQgaXMgb3B0aW9uYWwuCi0gICAgUkVTX1hNTF9SRVNPVVJDRV9NQVBfVFlQRSAgID0gMHgwMTgwLAotCi0gICAgLy8gQ2h1bmsgdHlwZXMgaW4gUkVTX1RBQkxFX1RZUEUKLSAgICBSRVNfVEFCTEVfUEFDS0FHRV9UWVBFICAgICAgPSAweDAyMDAsCi0gICAgUkVTX1RBQkxFX1RZUEVfVFlQRSAgICAgICAgID0gMHgwMjAxLAotICAgIFJFU19UQUJMRV9UWVBFX1NQRUNfVFlQRSAgICA9IDB4MDIwMgotfTsKLQotLyoqCi0gKiBNYWNyb3MgZm9yIGJ1aWxkaW5nL3NwbGl0dGluZyByZXNvdXJjZSBpZGVudGlmaWVycy4KLSAqLwotI2RlZmluZSBSZXNfVkFMSURJRChyZXNpZCkgKHJlc2lkICE9IDApCi0jZGVmaW5lIFJlc19DSEVDS0lEKHJlc2lkKSAoKHJlc2lkJjB4RkZGRjAwMDApICE9IDApCi0jZGVmaW5lIFJlc19NQUtFSUQocGFja2FnZSwgdHlwZSwgZW50cnkpIFwKLSAgICAoKChwYWNrYWdlKzEpPDwyNCkgfCAoKCh0eXBlKzEpJjB4RkYpPDwxNikgfCAoZW50cnkmMHhGRkZGKSkKLSNkZWZpbmUgUmVzX0dFVFBBQ0tBR0UoaWQpICgoaWQ+PjI0KS0xKQotI2RlZmluZSBSZXNfR0VUVFlQRShpZCkgKCgoaWQ+PjE2KSYweEZGKS0xKQotI2RlZmluZSBSZXNfR0VURU5UUlkoaWQpIChpZCYweEZGRkYpCi0KLSNkZWZpbmUgUmVzX0lOVEVSTkFMSUQocmVzaWQpICgocmVzaWQmMHhGRkZGMDAwMCkgIT0gMCAmJiAocmVzaWQmMHhGRjAwMDApID09IDApCi0jZGVmaW5lIFJlc19NQUtFSU5URVJOQUwoZW50cnkpICgweDAxMDAwMDAwIHwgKGVudHJ5JjB4RkZGRikpCi0jZGVmaW5lIFJlc19NQUtFQVJSQVkoZW50cnkpICgweDAyMDAwMDAwIHwgKGVudHJ5JjB4RkZGRikpCi0KLSNkZWZpbmUgUmVzX01BWFBBQ0tBR0UgMjU1Ci0KLS8qKgotICogUmVwcmVzZW50YXRpb24gb2YgYSB2YWx1ZSBpbiBhIHJlc291cmNlLCBzdXBwbHlpbmcgdHlwZQotICogaW5mb3JtYXRpb24uCi0gKi8KLXN0cnVjdCBSZXNfdmFsdWUKLXsKLSAgICAvLyBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhpcyBzdHJ1Y3R1cmUuCi0gICAgdWludDE2X3Qgc2l6ZTsKLQotICAgIC8vIEFsd2F5cyBzZXQgdG8gMC4KLSAgICB1aW50OF90IHJlczA7Ci0gICAgICAgIAotICAgIC8vIFR5cGUgb2YgdGhlIGRhdGEgdmFsdWUuCi0gICAgZW51bSB7Ci0gICAgICAgIC8vIENvbnRhaW5zIG5vIGRhdGEuCi0gICAgICAgIFRZUEVfTlVMTCA9IDB4MDAsCi0gICAgICAgIC8vIFRoZSAnZGF0YScgaG9sZHMgYSBSZXNUYWJsZV9yZWYsIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgcmVzb3VyY2UKLSAgICAgICAgLy8gdGFibGUgZW50cnkuCi0gICAgICAgIFRZUEVfUkVGRVJFTkNFID0gMHgwMSwKLSAgICAgICAgLy8gVGhlICdkYXRhJyBob2xkcyBhbiBhdHRyaWJ1dGUgcmVzb3VyY2UgaWRlbnRpZmllci4KLSAgICAgICAgVFlQRV9BVFRSSUJVVEUgPSAweDAyLAotICAgICAgICAvLyBUaGUgJ2RhdGEnIGhvbGRzIGFuIGluZGV4IGludG8gdGhlIGNvbnRhaW5pbmcgcmVzb3VyY2UgdGFibGUncwotICAgICAgICAvLyBnbG9iYWwgdmFsdWUgc3RyaW5nIHBvb2wuCi0gICAgICAgIFRZUEVfU1RSSU5HID0gMHgwMywKLSAgICAgICAgLy8gVGhlICdkYXRhJyBob2xkcyBhIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVyLgotICAgICAgICBUWVBFX0ZMT0FUID0gMHgwNCwKLSAgICAgICAgLy8gVGhlICdkYXRhJyBob2xkcyBhIGNvbXBsZXggbnVtYmVyIGVuY29kaW5nIGEgZGltZW5zaW9uIHZhbHVlLAotICAgICAgICAvLyBzdWNoIGFzICIxMDBpbiIuCi0gICAgICAgIFRZUEVfRElNRU5TSU9OID0gMHgwNSwKLSAgICAgICAgLy8gVGhlICdkYXRhJyBob2xkcyBhIGNvbXBsZXggbnVtYmVyIGVuY29kaW5nIGEgZnJhY3Rpb24gb2YgYQotICAgICAgICAvLyBjb250YWluZXIuCi0gICAgICAgIFRZUEVfRlJBQ1RJT04gPSAweDA2LAotCi0gICAgICAgIC8vIEJlZ2lubmluZyBvZiBpbnRlZ2VyIGZsYXZvcnMuLi4KLSAgICAgICAgVFlQRV9GSVJTVF9JTlQgPSAweDEwLAotCi0gICAgICAgIC8vIFRoZSAnZGF0YScgaXMgYSByYXcgaW50ZWdlciB2YWx1ZSBvZiB0aGUgZm9ybSBuLi5uLgotICAgICAgICBUWVBFX0lOVF9ERUMgPSAweDEwLAotICAgICAgICAvLyBUaGUgJ2RhdGEnIGlzIGEgcmF3IGludGVnZXIgdmFsdWUgb2YgdGhlIGZvcm0gMHhuLi5uLgotICAgICAgICBUWVBFX0lOVF9IRVggPSAweDExLAotICAgICAgICAvLyBUaGUgJ2RhdGEnIGlzIGVpdGhlciAwIG9yIDEsIGZvciBpbnB1dCAiZmFsc2UiIG9yICJ0cnVlIiByZXNwZWN0aXZlbHkuCi0gICAgICAgIFRZUEVfSU5UX0JPT0xFQU4gPSAweDEyLAotCi0gICAgICAgIC8vIEJlZ2lubmluZyBvZiBjb2xvciBpbnRlZ2VyIGZsYXZvcnMuLi4KLSAgICAgICAgVFlQRV9GSVJTVF9DT0xPUl9JTlQgPSAweDFjLAotCi0gICAgICAgIC8vIFRoZSAnZGF0YScgaXMgYSByYXcgaW50ZWdlciB2YWx1ZSBvZiB0aGUgZm9ybSAjYWFycmdnYmIuCi0gICAgICAgIFRZUEVfSU5UX0NPTE9SX0FSR0I4ID0gMHgxYywKLSAgICAgICAgLy8gVGhlICdkYXRhJyBpcyBhIHJhdyBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBmb3JtICNycmdnYmIuCi0gICAgICAgIFRZUEVfSU5UX0NPTE9SX1JHQjggPSAweDFkLAotICAgICAgICAvLyBUaGUgJ2RhdGEnIGlzIGEgcmF3IGludGVnZXIgdmFsdWUgb2YgdGhlIGZvcm0gI2FyZ2IuCi0gICAgICAgIFRZUEVfSU5UX0NPTE9SX0FSR0I0ID0gMHgxZSwKLSAgICAgICAgLy8gVGhlICdkYXRhJyBpcyBhIHJhdyBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBmb3JtICNyZ2IuCi0gICAgICAgIFRZUEVfSU5UX0NPTE9SX1JHQjQgPSAweDFmLAotCi0gICAgICAgIC8vIC4uLmVuZCBvZiBpbnRlZ2VyIGZsYXZvcnMuCi0gICAgICAgIFRZUEVfTEFTVF9DT0xPUl9JTlQgPSAweDFmLAotCi0gICAgICAgIC8vIC4uLmVuZCBvZiBpbnRlZ2VyIGZsYXZvcnMuCi0gICAgICAgIFRZUEVfTEFTVF9JTlQgPSAweDFmCi0gICAgfTsKLSAgICB1aW50OF90IGRhdGFUeXBlOwotCi0gICAgLy8gU3RydWN0dXJlIG9mIGNvbXBsZXggZGF0YSB2YWx1ZXMgKFRZUEVfVU5JVCBhbmQgVFlQRV9GUkFDVElPTikKLSAgICBlbnVtIHsKLSAgICAgICAgLy8gV2hlcmUgdGhlIHVuaXQgdHlwZSBpbmZvcm1hdGlvbiBpcy4gIFRoaXMgZ2l2ZXMgdXMgMTYgcG9zc2libGUKLSAgICAgICAgLy8gdHlwZXMsIGFzIGRlZmluZWQgYmVsb3cuCi0gICAgICAgIENPTVBMRVhfVU5JVF9TSElGVCA9IDAsCi0gICAgICAgIENPTVBMRVhfVU5JVF9NQVNLID0gMHhmLAotCi0gICAgICAgIC8vIFRZUEVfRElNRU5TSU9OOiBWYWx1ZSBpcyByYXcgcGl4ZWxzLgotICAgICAgICBDT01QTEVYX1VOSVRfUFggPSAwLAotICAgICAgICAvLyBUWVBFX0RJTUVOU0lPTjogVmFsdWUgaXMgRGV2aWNlIEluZGVwZW5kZW50IFBpeGVscy4KLSAgICAgICAgQ09NUExFWF9VTklUX0RJUCA9IDEsCi0gICAgICAgIC8vIFRZUEVfRElNRU5TSU9OOiBWYWx1ZSBpcyBhIFNjYWxlZCBkZXZpY2UgaW5kZXBlbmRlbnQgUGl4ZWxzLgotICAgICAgICBDT01QTEVYX1VOSVRfU1AgPSAyLAotICAgICAgICAvLyBUWVBFX0RJTUVOU0lPTjogVmFsdWUgaXMgaW4gcG9pbnRzLgotICAgICAgICBDT01QTEVYX1VOSVRfUFQgPSAzLAotICAgICAgICAvLyBUWVBFX0RJTUVOU0lPTjogVmFsdWUgaXMgaW4gaW5jaGVzLgotICAgICAgICBDT01QTEVYX1VOSVRfSU4gPSA0LAotICAgICAgICAvLyBUWVBFX0RJTUVOU0lPTjogVmFsdWUgaXMgaW4gbWlsbGltZXRlcnMuCi0gICAgICAgIENPTVBMRVhfVU5JVF9NTSA9IDUsCi0KLSAgICAgICAgLy8gVFlQRV9GUkFDVElPTjogQSBiYXNpYyBmcmFjdGlvbiBvZiB0aGUgb3ZlcmFsbCBzaXplLgotICAgICAgICBDT01QTEVYX1VOSVRfRlJBQ1RJT04gPSAwLAotICAgICAgICAvLyBUWVBFX0ZSQUNUSU9OOiBBIGZyYWN0aW9uIG9mIHRoZSBwYXJlbnQgc2l6ZS4KLSAgICAgICAgQ09NUExFWF9VTklUX0ZSQUNUSU9OX1BBUkVOVCA9IDEsCi0KLSAgICAgICAgLy8gV2hlcmUgdGhlIHJhZGl4IGluZm9ybWF0aW9uIGlzLCB0ZWxsaW5nIHdoZXJlIHRoZSBkZWNpbWFsIHBsYWNlCi0gICAgICAgIC8vIGFwcGVhcnMgaW4gdGhlIG1hbnRpc3NhLiAgVGhpcyBnaXZlIHVzIDQgcG9zc2libGUgZml4ZWQgcG9pbnQKLSAgICAgICAgLy8gcmVwcmVzZW50YXRpb25zIGFzIGRlZmluZWQgYmVsb3cuCi0gICAgICAgIENPTVBMRVhfUkFESVhfU0hJRlQgPSA0LAotICAgICAgICBDT01QTEVYX1JBRElYX01BU0sgPSAweDMsCi0KLSAgICAgICAgLy8gVGhlIG1hbnRpc3NhIGlzIGFuIGludGVncmFsIG51bWJlciAtLSBpLmUuLCAweG5ubm5ubi4wCi0gICAgICAgIENPTVBMRVhfUkFESVhfMjNwMCA9IDAsCi0gICAgICAgIC8vIFRoZSBtYW50aXNzYSBtYWduaXR1ZGUgaXMgMTYgYml0cyAtLSBpLmUsIDB4bm5ubi5ubgotICAgICAgICBDT01QTEVYX1JBRElYXzE2cDcgPSAxLAotICAgICAgICAvLyBUaGUgbWFudGlzc2EgbWFnbml0dWRlIGlzIDggYml0cyAtLSBpLmUsIDB4bm4ubm5ubgotICAgICAgICBDT01QTEVYX1JBRElYXzhwMTUgPSAyLAotICAgICAgICAvLyBUaGUgbWFudGlzc2EgbWFnbml0dWRlIGlzIDAgYml0cyAtLSBpLmUsIDB4MC5ubm5ubm4KLSAgICAgICAgQ09NUExFWF9SQURJWF8wcDIzID0gMywKLQotICAgICAgICAvLyBXaGVyZSB0aGUgYWN0dWFsIHZhbHVlIGlzLiAgVGhpcyBnaXZlcyB1cyAyMyBiaXRzIG9mCi0gICAgICAgIC8vIHByZWNpc2lvbi4gIFRoZSB0b3AgYml0IGlzIHRoZSBzaWduLgotICAgICAgICBDT01QTEVYX01BTlRJU1NBX1NISUZUID0gOCwKLSAgICAgICAgQ09NUExFWF9NQU5USVNTQV9NQVNLID0gMHhmZmZmZmYKLSAgICB9OwotCi0gICAgLy8gVGhlIGRhdGEgZm9yIHRoaXMgaXRlbSwgYXMgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIGRhdGFUeXBlLgotICAgIHVpbnQzMl90IGRhdGE7Ci0KLSAgICB2b2lkIGNvcHlGcm9tX2R0b2goY29uc3QgUmVzX3ZhbHVlJiBzcmMpOwotfTsKLQotLyoqCi0gKiAgVGhpcyBpcyBhIHJlZmVyZW5jZSB0byBhIHVuaXF1ZSBlbnRyeSAoYSBSZXNUYWJsZV9lbnRyeSBzdHJ1Y3R1cmUpCi0gKiAgaW4gYSByZXNvdXJjZSB0YWJsZS4gIFRoZSB2YWx1ZSBpcyBzdHJ1Y3R1cmVkIGFzOiAweHBwdHRlZWVlLAotICogIHdoZXJlIHBwIGlzIHRoZSBwYWNrYWdlIGluZGV4LCB0dCBpcyB0aGUgdHlwZSBpbmRleCBpbiB0aGF0Ci0gKiAgcGFja2FnZSwgYW5kIGVlZWUgaXMgdGhlIGVudHJ5IGluZGV4IGluIHRoYXQgdHlwZS4gIFRoZSBwYWNrYWdlCi0gKiAgYW5kIHR5cGUgdmFsdWVzIHN0YXJ0IGF0IDEgZm9yIHRoZSBmaXJzdCBpdGVtLCB0byBoZWxwIGNhdGNoIGNhc2VzCi0gKiAgd2hlcmUgdGhleSBoYXZlIG5vdCBiZWVuIHN1cHBsaWVkLgotICovCi1zdHJ1Y3QgUmVzVGFibGVfcmVmCi17Ci0gICAgdWludDMyX3QgaWRlbnQ7Ci19OwotCi0vKioKLSAqIFJlZmVyZW5jZSB0byBhIHN0cmluZyBpbiBhIHN0cmluZyBwb29sLgotICovCi1zdHJ1Y3QgUmVzU3RyaW5nUG9vbF9yZWYKLXsKLSAgICAvLyBJbmRleCBpbnRvIHRoZSBzdHJpbmcgcG9vbCB0YWJsZSAodWludDMyX3Qtb2Zmc2V0IGZyb20gdGhlIGluZGljZXMKLSAgICAvLyBpbW1lZGlhdGVseSBhZnRlciBSZXNTdHJpbmdQb29sX2hlYWRlcikgYXQgd2hpY2ggdG8gZmluZCB0aGUgbG9jYXRpb24KLSAgICAvLyBvZiB0aGUgc3RyaW5nIGRhdGEgaW4gdGhlIHBvb2wuCi0gICAgdWludDMyX3QgaW5kZXg7Ci19OwotCi0vKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBTdHJpbmcgUG9vbAotICoKLSAqICBBIHNldCBvZiBzdHJpbmdzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZXMgYnkgb3RoZXJzIHRocm91Z2ggYQotICogIFJlc1N0cmluZ1Bvb2xfcmVmLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKioKLSAqIERlZmluaXRpb24gZm9yIGEgcG9vbCBvZiBzdHJpbmdzLiAgVGhlIGRhdGEgb2YgdGhpcyBjaHVuayBpcyBhbgotICogYXJyYXkgb2YgdWludDMyX3QgcHJvdmlkaW5nIGluZGljZXMgaW50byB0aGUgcG9vbCwgcmVsYXRpdmUgdG8KLSAqIHN0cmluZ3NTdGFydC4gIEF0IHN0cmluZ3NTdGFydCBhcmUgYWxsIG9mIHRoZSBVVEYtMTYgc3RyaW5ncwotICogY29uY2F0ZW5hdGVkIHRvZ2V0aGVyOyBlYWNoIHN0YXJ0cyB3aXRoIGEgdWludDE2X3Qgb2YgdGhlIHN0cmluZydzCi0gKiBsZW5ndGggYW5kIGVhY2ggZW5kcyB3aXRoIGEgMHgwMDAwIHRlcm1pbmF0b3IuICBJZiBhIHN0cmluZyBpcyA+Ci0gKiAzMjc2NyBjaGFyYWN0ZXJzLCB0aGUgaGlnaCBiaXQgb2YgdGhlIGxlbmd0aCBpcyBzZXQgbWVhbmluZyB0byB0YWtlCi0gKiB0aG9zZSAxNSBiaXRzIGFzIGEgaGlnaCB3b3JkIGFuZCBpdCB3aWxsIGJlIGZvbGxvd2VkIGJ5IGFub3RoZXIKLSAqIHVpbnQxNl90IGNvbnRhaW5pbmcgdGhlIGxvdyB3b3JkLgotICoKLSAqIElmIHN0eWxlQ291bnQgaXMgbm90IHplcm8sIHRoZW4gaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBhcnJheSBvZgotICogdWludDMyX3QgaW5kaWNlcyBpbnRvIHRoZSBzdHJpbmcgdGFibGUgaXMgYW5vdGhlciBhcnJheSBvZiBpbmRpY2VzCi0gKiBpbnRvIGEgc3R5bGUgdGFibGUgc3RhcnRpbmcgYXQgc3R5bGVzU3RhcnQuICBFYWNoIGVudHJ5IGluIHRoZQotICogc3R5bGUgdGFibGUgaXMgYW4gYXJyYXkgb2YgUmVzU3RyaW5nUG9vbF9zcGFuIHN0cnVjdHVyZXMuCi0gKi8KLXN0cnVjdCBSZXNTdHJpbmdQb29sX2hlYWRlcgotewotICAgIHN0cnVjdCBSZXNDaHVua19oZWFkZXIgaGVhZGVyOwotCi0gICAgLy8gTnVtYmVyIG9mIHN0cmluZ3MgaW4gdGhpcyBwb29sIChudW1iZXIgb2YgdWludDMyX3QgaW5kaWNlcyB0aGF0IGZvbGxvdwotICAgIC8vIGluIHRoZSBkYXRhKS4KLSAgICB1aW50MzJfdCBzdHJpbmdDb3VudDsKLQotICAgIC8vIE51bWJlciBvZiBzdHlsZSBzcGFuIGFycmF5cyBpbiB0aGUgcG9vbCAobnVtYmVyIG9mIHVpbnQzMl90IGluZGljZXMKLSAgICAvLyBmb2xsb3cgdGhlIHN0cmluZyBpbmRpY2VzKS4KLSAgICB1aW50MzJfdCBzdHlsZUNvdW50OwotCi0gICAgLy8gRmxhZ3MuCi0gICAgZW51bSB7Ci0gICAgICAgIC8vIElmIHNldCwgdGhlIHN0cmluZyBpbmRleCBpcyBzb3J0ZWQgYnkgdGhlIHN0cmluZyB2YWx1ZXMgKGJhc2VkCi0gICAgICAgIC8vIG9uIHN0cmNtcDE2KCkpLgotICAgICAgICBTT1JURURfRkxBRyA9IDE8PDAsCi0KLSAgICAgICAgLy8gU3RyaW5nIHBvb2wgaXMgZW5jb2RlZCBpbiBVVEYtOAotICAgICAgICBVVEY4X0ZMQUcgPSAxPDw4Ci0gICAgfTsKLSAgICB1aW50MzJfdCBmbGFnczsKLQotICAgIC8vIEluZGV4IGZyb20gaGVhZGVyIG9mIHRoZSBzdHJpbmcgZGF0YS4KLSAgICB1aW50MzJfdCBzdHJpbmdzU3RhcnQ7Ci0KLSAgICAvLyBJbmRleCBmcm9tIGhlYWRlciBvZiB0aGUgc3R5bGUgZGF0YS4KLSAgICB1aW50MzJfdCBzdHlsZXNTdGFydDsKLX07Ci0KLS8qKgotICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhIHNwYW4gb2Ygc3R5bGUgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoCi0gKiBhIHN0cmluZyBpbiB0aGUgcG9vbC4KLSAqLwotc3RydWN0IFJlc1N0cmluZ1Bvb2xfc3BhbgotewotICAgIGVudW0gewotICAgICAgICBFTkQgPSAweEZGRkZGRkZGCi0gICAgfTsKLQotICAgIC8vIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIHNwYW4gLS0gdGhhdCBpcywgdGhlIG5hbWUgb2YgdGhlIFhNTAotICAgIC8vIHRhZyB0aGF0IGRlZmluZWQgaXQuICBUaGUgc3BlY2lhbCB2YWx1ZSBFTkQgKDB4RkZGRkZGRkYpIGluZGljYXRlcwotICAgIC8vIHRoZSBlbmQgb2YgYW4gYXJyYXkgb2Ygc3BhbnMuCi0gICAgUmVzU3RyaW5nUG9vbF9yZWYgbmFtZTsKLQotICAgIC8vIFRoZSByYW5nZSBvZiBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgdGhhdCB0aGlzIHNwYW4gYXBwbGllcyB0by4KLSAgICB1aW50MzJfdCBmaXJzdENoYXIsIGxhc3RDaGFyOwotfTsKLQotLyoqCi0gKiBDb252ZW5pZW5jZSBjbGFzcyBmb3IgYWNjZXNzaW5nIGRhdGEgaW4gYSBSZXNTdHJpbmdQb29sIHJlc291cmNlLgotICovCi1jbGFzcyBSZXNTdHJpbmdQb29sCi17Ci1wdWJsaWM6Ci0gICAgUmVzU3RyaW5nUG9vbCgpOwotICAgIFJlc1N0cmluZ1Bvb2woY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIGJvb2wgY29weURhdGE9ZmFsc2UpOwotICAgIH5SZXNTdHJpbmdQb29sKCk7Ci0KLSAgICBzdGF0dXNfdCBzZXRUbyhjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgYm9vbCBjb3B5RGF0YT1mYWxzZSk7Ci0KLSAgICBzdGF0dXNfdCBnZXRFcnJvcigpIGNvbnN0OwotCi0gICAgdm9pZCB1bmluaXQoKTsKLQotICAgIC8vIFJldHVybiBzdHJpbmcgZW50cnkgYXMgVVRGMTY7IGlmIHRoZSBwb29sIGlzIFVURjgsIHRoZSBzdHJpbmcgd2lsbAotICAgIC8vIGJlIGNvbnZlcnRlZCBiZWZvcmUgcmV0dXJuaW5nLgotICAgIGlubGluZSBjb25zdCBjaGFyMTZfdCogc3RyaW5nQXQoY29uc3QgUmVzU3RyaW5nUG9vbF9yZWYmIHJlZiwgc2l6ZV90KiBvdXRMZW4pIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0F0KHJlZi5pbmRleCwgb3V0TGVuKTsKLSAgICB9Ci0gICAgY29uc3QgY2hhcjE2X3QqIHN0cmluZ0F0KHNpemVfdCBpZHgsIHNpemVfdCogb3V0TGVuKSBjb25zdDsKLQotICAgIC8vIE5vdGU6IHJldHVybnMgbnVsbCBpZiB0aGUgc3RyaW5nIHBvb2wgaXMgbm90IFVURjguCi0gICAgY29uc3QgY2hhciogc3RyaW5nOEF0KHNpemVfdCBpZHgsIHNpemVfdCogb3V0TGVuKSBjb25zdDsKLQotICAgIC8vIFJldHVybiBzdHJpbmcgd2hldGhlciB0aGUgcG9vbCBpcyBVVEY4IG9yIFVURjE2LiAgRG9lcyBub3QgYWxsb3cgeW91Ci0gICAgLy8gdG8gZGlzdGluZ3Vpc2ggbnVsbC4KLSAgICBjb25zdCBTdHJpbmc4IHN0cmluZzhPYmplY3RBdChzaXplX3QgaWR4KSBjb25zdDsKLQotICAgIGNvbnN0IFJlc1N0cmluZ1Bvb2xfc3Bhbiogc3R5bGVBdChjb25zdCBSZXNTdHJpbmdQb29sX3JlZiYgcmVmKSBjb25zdDsKLSAgICBjb25zdCBSZXNTdHJpbmdQb29sX3NwYW4qIHN0eWxlQXQoc2l6ZV90IGlkeCkgY29uc3Q7Ci0KLSAgICBzc2l6ZV90IGluZGV4T2ZTdHJpbmcoY29uc3QgY2hhcjE2X3QqIHN0ciwgc2l6ZV90IHN0ckxlbikgY29uc3Q7Ci0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OwotICAgIHNpemVfdCBzdHlsZUNvdW50KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGJ5dGVzKCkgY29uc3Q7Ci0KLSAgICBib29sIGlzU29ydGVkKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1VURjgoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBzdGF0dXNfdCAgICAgICAgICAgICAgICAgICAgbUVycm9yOwotICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICAgICBtT3duZWREYXRhOwotICAgIGNvbnN0IFJlc1N0cmluZ1Bvb2xfaGVhZGVyKiBtSGVhZGVyOwotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICBtU2l6ZTsKLSAgICBtdXRhYmxlIE11dGV4ICAgICAgICAgICAgICAgbURlY29kZUxvY2s7Ci0gICAgY29uc3QgdWludDMyX3QqICAgICAgICAgICAgIG1FbnRyaWVzOwotICAgIGNvbnN0IHVpbnQzMl90KiAgICAgICAgICAgICBtRW50cnlTdHlsZXM7Ci0gICAgY29uc3Qgdm9pZCogICAgICAgICAgICAgICAgIG1TdHJpbmdzOwotICAgIGNoYXIxNl90IG11dGFibGUqKiAgICAgICAgICBtQ2FjaGU7Ci0gICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIG1TdHJpbmdQb29sU2l6ZTsgICAgLy8gbnVtYmVyIG9mIHVpbnQxNl90Ci0gICAgY29uc3QgdWludDMyX3QqICAgICAgICAgICAgIG1TdHlsZXM7Ci0gICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIG1TdHlsZVBvb2xTaXplOyAgICAvLyBudW1iZXIgb2YgdWludDMyX3QKLX07Ci0KLS8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIFhNTCBUcmVlCi0gKgotICogIEJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZG9jdW1lbnQuICBUaGlzIGlzIGRlc2lnbmVkIHRvCi0gKiAgZXhwcmVzcyBldmVyeXRoaW5nIGluIGFuIFhNTCBkb2N1bWVudCwgaW4gYSBmb3JtIHRoYXQgaXMgbXVjaAotICogIGVhc2llciB0byBwYXJzZSBvbiB0aGUgZGV2aWNlLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKioKLSAqIFhNTCB0cmVlIGhlYWRlci4gIFRoaXMgYXBwZWFycyBhdCB0aGUgZnJvbnQgb2YgYW4gWE1MIHRyZWUsCi0gKiBkZXNjcmliaW5nIGl0cyBjb250ZW50LiAgSXQgaXMgZm9sbG93ZWQgYnkgYSBmbGF0IGFycmF5IG9mCi0gKiBSZXNYTUxUcmVlX25vZGUgc3RydWN0dXJlczsgdGhlIGhpZXJhcmNoeSBvZiB0aGUgWE1MIGRvY3VtZW50Ci0gKiBpcyBkZXNjcmliZWQgYnkgdGhlIG9jY3VycmFuY2Ugb2YgUkVTX1hNTF9TVEFSVF9FTEVNRU5UX1RZUEUKLSAqIGFuZCBjb3JyZXNwb25kaW5nIFJFU19YTUxfRU5EX0VMRU1FTlRfVFlQRSBub2RlcyBpbiB0aGUgYXJyYXkuCi0gKi8KLXN0cnVjdCBSZXNYTUxUcmVlX2hlYWRlcgotewotICAgIHN0cnVjdCBSZXNDaHVua19oZWFkZXIgaGVhZGVyOwotfTsKLQotLyoqCi0gKiBCYXNpYyBYTUwgdHJlZSBub2RlLiAgQSBzaW5nbGUgaXRlbSBpbiB0aGUgWE1MIGRvY3VtZW50LiAgRXh0ZW5kZWQgaW5mbwotICogYWJvdXQgdGhlIG5vZGUgY2FuIGJlIGZvdW5kIGFmdGVyIGhlYWRlci5oZWFkZXJTaXplLgotICovCi1zdHJ1Y3QgUmVzWE1MVHJlZV9ub2RlCi17Ci0gICAgc3RydWN0IFJlc0NodW5rX2hlYWRlciBoZWFkZXI7Ci0KLSAgICAvLyBMaW5lIG51bWJlciBpbiBvcmlnaW5hbCBzb3VyY2UgZmlsZSBhdCB3aGljaCB0aGlzIGVsZW1lbnQgYXBwZWFyZWQuCi0gICAgdWludDMyX3QgbGluZU51bWJlcjsKLQotICAgIC8vIE9wdGlvbmFsIFhNTCBjb21tZW50IHRoYXQgd2FzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVsZW1lbnQ7IC0xIGlmIG5vbmUuCi0gICAgc3RydWN0IFJlc1N0cmluZ1Bvb2xfcmVmIGNvbW1lbnQ7Ci19OwotCi0vKioKLSAqIEV4dGVuZGVkIFhNTCB0cmVlIG5vZGUgZm9yIENEQVRBIHRhZ3MgLS0gaW5jbHVkZXMgdGhlIENEQVRBIHN0cmluZy4KLSAqIEFwcGVhcnMgaGVhZGVyLmhlYWRlclNpemUgYnl0ZXMgYWZ0ZXIgYSBSZXNYTUxUcmVlX25vZGUuCi0gKi8KLXN0cnVjdCBSZXNYTUxUcmVlX2NkYXRhRXh0Ci17Ci0gICAgLy8gVGhlIHJhdyBDREFUQSBjaGFyYWN0ZXIgZGF0YS4KLSAgICBzdHJ1Y3QgUmVzU3RyaW5nUG9vbF9yZWYgZGF0YTsKLSAgICAKLSAgICAvLyBUaGUgdHlwZWQgdmFsdWUgb2YgdGhlIGNoYXJhY3RlciBkYXRhIGlmIHRoaXMgaXMgYSBDREFUQSBub2RlLgotICAgIHN0cnVjdCBSZXNfdmFsdWUgdHlwZWREYXRhOwotfTsKLQotLyoqCi0gKiBFeHRlbmRlZCBYTUwgdHJlZSBub2RlIGZvciBuYW1lc3BhY2Ugc3RhcnQvZW5kIG5vZGVzLgotICogQXBwZWFycyBoZWFkZXIuaGVhZGVyU2l6ZSBieXRlcyBhZnRlciBhIFJlc1hNTFRyZWVfbm9kZS4KLSAqLwotc3RydWN0IFJlc1hNTFRyZWVfbmFtZXNwYWNlRXh0Ci17Ci0gICAgLy8gVGhlIHByZWZpeCBvZiB0aGUgbmFtZXNwYWNlLgotICAgIHN0cnVjdCBSZXNTdHJpbmdQb29sX3JlZiBwcmVmaXg7Ci0gICAgCi0gICAgLy8gVGhlIFVSSSBvZiB0aGUgbmFtZXNwYWNlLgotICAgIHN0cnVjdCBSZXNTdHJpbmdQb29sX3JlZiB1cmk7Ci19OwotCi0vKioKLSAqIEV4dGVuZGVkIFhNTCB0cmVlIG5vZGUgZm9yIGVsZW1lbnQgc3RhcnQvZW5kIG5vZGVzLgotICogQXBwZWFycyBoZWFkZXIuaGVhZGVyU2l6ZSBieXRlcyBhZnRlciBhIFJlc1hNTFRyZWVfbm9kZS4KLSAqLwotc3RydWN0IFJlc1hNTFRyZWVfZW5kRWxlbWVudEV4dAotewotICAgIC8vIFN0cmluZyBvZiB0aGUgZnVsbCBuYW1lc3BhY2Ugb2YgdGhpcyBlbGVtZW50LgotICAgIHN0cnVjdCBSZXNTdHJpbmdQb29sX3JlZiBuczsKLSAgICAKLSAgICAvLyBTdHJpbmcgbmFtZSBvZiB0aGlzIG5vZGUgaWYgaXQgaXMgYW4gRUxFTUVOVDsgdGhlIHJhdwotICAgIC8vIGNoYXJhY3RlciBkYXRhIGlmIHRoaXMgaXMgYSBDREFUQSBub2RlLgotICAgIHN0cnVjdCBSZXNTdHJpbmdQb29sX3JlZiBuYW1lOwotfTsKLQotLyoqCi0gKiBFeHRlbmRlZCBYTUwgdHJlZSBub2RlIGZvciBzdGFydCB0YWdzIC0tIGluY2x1ZGVzIGF0dHJpYnV0ZQotICogaW5mb3JtYXRpb24uCi0gKiBBcHBlYXJzIGhlYWRlci5oZWFkZXJTaXplIGJ5dGVzIGFmdGVyIGEgUmVzWE1MVHJlZV9ub2RlLgotICovCi1zdHJ1Y3QgUmVzWE1MVHJlZV9hdHRyRXh0Ci17Ci0gICAgLy8gU3RyaW5nIG9mIHRoZSBmdWxsIG5hbWVzcGFjZSBvZiB0aGlzIGVsZW1lbnQuCi0gICAgc3RydWN0IFJlc1N0cmluZ1Bvb2xfcmVmIG5zOwotICAgIAotICAgIC8vIFN0cmluZyBuYW1lIG9mIHRoaXMgbm9kZSBpZiBpdCBpcyBhbiBFTEVNRU5UOyB0aGUgcmF3Ci0gICAgLy8gY2hhcmFjdGVyIGRhdGEgaWYgdGhpcyBpcyBhIENEQVRBIG5vZGUuCi0gICAgc3RydWN0IFJlc1N0cmluZ1Bvb2xfcmVmIG5hbWU7Ci0gICAgCi0gICAgLy8gQnl0ZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhpcyBzdHJ1Y3R1cmUgd2hlcmUgdGhlIGF0dHJpYnV0ZXMgc3RhcnQuCi0gICAgdWludDE2X3QgYXR0cmlidXRlU3RhcnQ7Ci0gICAgCi0gICAgLy8gU2l6ZSBvZiB0aGUgUmVzWE1MVHJlZV9hdHRyaWJ1dGUgc3RydWN0dXJlcyB0aGF0IGZvbGxvdy4KLSAgICB1aW50MTZfdCBhdHRyaWJ1dGVTaXplOwotICAgIAotICAgIC8vIE51bWJlciBvZiBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBhbiBFTEVNRU5ULiAgVGhlc2UgYXJlCi0gICAgLy8gYXZhaWxhYmxlIGFzIGFuIGFycmF5IG9mIFJlc1hNTFRyZWVfYXR0cmlidXRlIHN0cnVjdHVyZXMKLSAgICAvLyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBub2RlLgotICAgIHVpbnQxNl90IGF0dHJpYnV0ZUNvdW50OwotICAgIAotICAgIC8vIEluZGV4ICgxLWJhc2VkKSBvZiB0aGUgImlkIiBhdHRyaWJ1dGUuIDAgaWYgbm9uZS4KLSAgICB1aW50MTZfdCBpZEluZGV4OwotICAgIAotICAgIC8vIEluZGV4ICgxLWJhc2VkKSBvZiB0aGUgImNsYXNzIiBhdHRyaWJ1dGUuIDAgaWYgbm9uZS4KLSAgICB1aW50MTZfdCBjbGFzc0luZGV4OwotICAgIAotICAgIC8vIEluZGV4ICgxLWJhc2VkKSBvZiB0aGUgInN0eWxlIiBhdHRyaWJ1dGUuIDAgaWYgbm9uZS4KLSAgICB1aW50MTZfdCBzdHlsZUluZGV4OwotfTsKLQotc3RydWN0IFJlc1hNTFRyZWVfYXR0cmlidXRlCi17Ci0gICAgLy8gTmFtZXNwYWNlIG9mIHRoaXMgYXR0cmlidXRlLgotICAgIHN0cnVjdCBSZXNTdHJpbmdQb29sX3JlZiBuczsKLSAgICAKLSAgICAvLyBOYW1lIG9mIHRoaXMgYXR0cmlidXRlLgotICAgIHN0cnVjdCBSZXNTdHJpbmdQb29sX3JlZiBuYW1lOwotCi0gICAgLy8gVGhlIG9yaWdpbmFsIHJhdyBzdHJpbmcgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUuCi0gICAgc3RydWN0IFJlc1N0cmluZ1Bvb2xfcmVmIHJhd1ZhbHVlOwotICAgIAotICAgIC8vIFByb2Nlc3Nlc2QgdHlwZWQgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUuCi0gICAgc3RydWN0IFJlc192YWx1ZSB0eXBlZFZhbHVlOwotfTsKLQotY2xhc3MgUmVzWE1MVHJlZTsKLQotY2xhc3MgUmVzWE1MUGFyc2VyCi17Ci1wdWJsaWM6Ci0gICAgUmVzWE1MUGFyc2VyKGNvbnN0IFJlc1hNTFRyZWUmIHRyZWUpOwotCi0gICAgZW51bSBldmVudF9jb2RlX3QgewotICAgICAgICBCQURfRE9DVU1FTlQgPSAtMSwKLSAgICAgICAgU1RBUlRfRE9DVU1FTlQgPSAwLAotICAgICAgICBFTkRfRE9DVU1FTlQgPSAxLAotICAgICAgICAKLSAgICAgICAgRklSU1RfQ0hVTktfQ09ERSA9IFJFU19YTUxfRklSU1RfQ0hVTktfVFlQRSwgCi0gICAgICAgIAotICAgICAgICBTVEFSVF9OQU1FU1BBQ0UgPSBSRVNfWE1MX1NUQVJUX05BTUVTUEFDRV9UWVBFLAotICAgICAgICBFTkRfTkFNRVNQQUNFID0gUkVTX1hNTF9FTkRfTkFNRVNQQUNFX1RZUEUsCi0gICAgICAgIFNUQVJUX1RBRyA9IFJFU19YTUxfU1RBUlRfRUxFTUVOVF9UWVBFLAotICAgICAgICBFTkRfVEFHID0gUkVTX1hNTF9FTkRfRUxFTUVOVF9UWVBFLAotICAgICAgICBURVhUID0gUkVTX1hNTF9DREFUQV9UWVBFCi0gICAgfTsKLQotICAgIHN0cnVjdCBSZXNYTUxQb3NpdGlvbgotICAgIHsKLSAgICAgICAgZXZlbnRfY29kZV90ICAgICAgICAgICAgICAgIGV2ZW50Q29kZTsKLSAgICAgICAgY29uc3QgUmVzWE1MVHJlZV9ub2RlKiAgICAgIGN1ck5vZGU7Ci0gICAgICAgIGNvbnN0IHZvaWQqICAgICAgICAgICAgICAgICBjdXJFeHQ7Ci0gICAgfTsKLQotICAgIHZvaWQgcmVzdGFydCgpOwotCi0gICAgY29uc3QgUmVzU3RyaW5nUG9vbCYgZ2V0U3RyaW5ncygpIGNvbnN0OwotCi0gICAgZXZlbnRfY29kZV90IGdldEV2ZW50VHlwZSgpIGNvbnN0OwotICAgIC8vIE5vdGUsIHVubGlrZSBYbWxQdWxsUGFyc2VyLCB0aGUgZmlyc3QgY2FsbCB0byBuZXh0KCkgd2lsbCByZXR1cm4KLSAgICAvLyBTVEFSVF9UQUcgb2YgdGhlIGZpcnN0IGVsZW1lbnQuCi0gICAgZXZlbnRfY29kZV90IG5leHQoKTsKLQotICAgIC8vIFRoZXNlIGFyZSBhdmFpbGFibGUgZm9yIGFsbCBub2RlczoKLSAgICBpbnQzMl90IGdldENvbW1lbnRJRCgpIGNvbnN0OwotICAgIGNvbnN0IHVpbnQxNl90KiBnZXRDb21tZW50KHNpemVfdCogb3V0TGVuKSBjb25zdDsKLSAgICB1aW50MzJfdCBnZXRMaW5lTnVtYmVyKCkgY29uc3Q7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyBhdmFpbGFibGUgZm9yIFRFWFQ6Ci0gICAgaW50MzJfdCBnZXRUZXh0SUQoKSBjb25zdDsKLSAgICBjb25zdCB1aW50MTZfdCogZ2V0VGV4dChzaXplX3QqIG91dExlbikgY29uc3Q7Ci0gICAgc3NpemVfdCBnZXRUZXh0VmFsdWUoUmVzX3ZhbHVlKiBvdXRWYWx1ZSkgY29uc3Q7Ci0gICAgCi0gICAgLy8gVGhlc2UgYXJlIGF2YWlsYWJsZSBmb3IgU1RBUlRfTkFNRVNQQUNFIGFuZCBFTkRfTkFNRVNQQUNFOgotICAgIGludDMyX3QgZ2V0TmFtZXNwYWNlUHJlZml4SUQoKSBjb25zdDsKLSAgICBjb25zdCB1aW50MTZfdCogZ2V0TmFtZXNwYWNlUHJlZml4KHNpemVfdCogb3V0TGVuKSBjb25zdDsKLSAgICBpbnQzMl90IGdldE5hbWVzcGFjZVVyaUlEKCkgY29uc3Q7Ci0gICAgY29uc3QgdWludDE2X3QqIGdldE5hbWVzcGFjZVVyaShzaXplX3QqIG91dExlbikgY29uc3Q7Ci0gICAgCi0gICAgLy8gVGhlc2UgYXJlIGF2YWlsYWJsZSBmb3IgU1RBUlRfVEFHIGFuZCBFTkRfVEFHOgotICAgIGludDMyX3QgZ2V0RWxlbWVudE5hbWVzcGFjZUlEKCkgY29uc3Q7Ci0gICAgY29uc3QgdWludDE2X3QqIGdldEVsZW1lbnROYW1lc3BhY2Uoc2l6ZV90KiBvdXRMZW4pIGNvbnN0OwotICAgIGludDMyX3QgZ2V0RWxlbWVudE5hbWVJRCgpIGNvbnN0OwotICAgIGNvbnN0IHVpbnQxNl90KiBnZXRFbGVtZW50TmFtZShzaXplX3QqIG91dExlbikgY29uc3Q7Ci0gICAgCi0gICAgLy8gUmVtYWluaW5nIG1ldGhvZHMgYXJlIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGFib3V0IGF0dHJpYnV0ZXMKLSAgICAvLyBhc3NvY2lhdGVkIHdpdGggYSBTVEFSVF9UQUc6Ci0gICAgCi0gICAgc2l6ZV90IGdldEF0dHJpYnV0ZUNvdW50KCkgY29uc3Q7Ci0gICAgCi0gICAgLy8gUmV0dXJucyAtMSBpZiBubyBuYW1lc3BhY2UsIC0yIGlmIGlkeCBvdXQgb2YgcmFuZ2UuCi0gICAgaW50MzJfdCBnZXRBdHRyaWJ1dGVOYW1lc3BhY2VJRChzaXplX3QgaWR4KSBjb25zdDsKLSAgICBjb25zdCB1aW50MTZfdCogZ2V0QXR0cmlidXRlTmFtZXNwYWNlKHNpemVfdCBpZHgsIHNpemVfdCogb3V0TGVuKSBjb25zdDsKLQotICAgIGludDMyX3QgZ2V0QXR0cmlidXRlTmFtZUlEKHNpemVfdCBpZHgpIGNvbnN0OwotICAgIGNvbnN0IHVpbnQxNl90KiBnZXRBdHRyaWJ1dGVOYW1lKHNpemVfdCBpZHgsIHNpemVfdCogb3V0TGVuKSBjb25zdDsKLSAgICB1aW50MzJfdCBnZXRBdHRyaWJ1dGVOYW1lUmVzSUQoc2l6ZV90IGlkeCkgY29uc3Q7Ci0KLSAgICAvLyBUaGVzZSB3aWxsIHdvcmsgb25seSBpZiB0aGUgdW5kZXJseWluZyBzdHJpbmcgcG9vbCBpcyBVVEYtOC4KLSAgICBjb25zdCBjaGFyKiBnZXRBdHRyaWJ1dGVOYW1lc3BhY2U4KHNpemVfdCBpZHgsIHNpemVfdCogb3V0TGVuKSBjb25zdDsKLSAgICBjb25zdCBjaGFyKiBnZXRBdHRyaWJ1dGVOYW1lOChzaXplX3QgaWR4LCBzaXplX3QqIG91dExlbikgY29uc3Q7Ci0KLSAgICBpbnQzMl90IGdldEF0dHJpYnV0ZVZhbHVlU3RyaW5nSUQoc2l6ZV90IGlkeCkgY29uc3Q7Ci0gICAgY29uc3QgdWludDE2X3QqIGdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKHNpemVfdCBpZHgsIHNpemVfdCogb3V0TGVuKSBjb25zdDsKLSAgICAKLSAgICBpbnQzMl90IGdldEF0dHJpYnV0ZURhdGFUeXBlKHNpemVfdCBpZHgpIGNvbnN0OwotICAgIGludDMyX3QgZ2V0QXR0cmlidXRlRGF0YShzaXplX3QgaWR4KSBjb25zdDsKLSAgICBzc2l6ZV90IGdldEF0dHJpYnV0ZVZhbHVlKHNpemVfdCBpZHgsIFJlc192YWx1ZSogb3V0VmFsdWUpIGNvbnN0OwotCi0gICAgc3NpemVfdCBpbmRleE9mQXR0cmlidXRlKGNvbnN0IGNoYXIqIG5zLCBjb25zdCBjaGFyKiBhdHRyKSBjb25zdDsKLSAgICBzc2l6ZV90IGluZGV4T2ZBdHRyaWJ1dGUoY29uc3QgY2hhcjE2X3QqIG5zLCBzaXplX3QgbnNMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBhdHRyLCBzaXplX3QgYXR0ckxlbikgY29uc3Q7Ci0KLSAgICBzc2l6ZV90IGluZGV4T2ZJRCgpIGNvbnN0OwotICAgIHNzaXplX3QgaW5kZXhPZkNsYXNzKCkgY29uc3Q7Ci0gICAgc3NpemVfdCBpbmRleE9mU3R5bGUoKSBjb25zdDsKLQotICAgIHZvaWQgZ2V0UG9zaXRpb24oUmVzWE1MUG9zaXRpb24qIHBvcykgY29uc3Q7Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBSZXNYTUxQb3NpdGlvbiYgcG9zKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgUmVzWE1MVHJlZTsKLSAgICAKLSAgICBldmVudF9jb2RlX3QgbmV4dE5vZGUoKTsKLQotICAgIGNvbnN0IFJlc1hNTFRyZWUmICAgICAgICAgICBtVHJlZTsKLSAgICBldmVudF9jb2RlX3QgICAgICAgICAgICAgICAgbUV2ZW50Q29kZTsKLSAgICBjb25zdCBSZXNYTUxUcmVlX25vZGUqICAgICAgbUN1ck5vZGU7Ci0gICAgY29uc3Qgdm9pZCogICAgICAgICAgICAgICAgIG1DdXJFeHQ7Ci19OwotCi0vKioKLSAqIENvbnZlbmllbmNlIGNsYXNzIGZvciBhY2Nlc3NpbmcgZGF0YSBpbiBhIFJlc1hNTFRyZWUgcmVzb3VyY2UuCi0gKi8KLWNsYXNzIFJlc1hNTFRyZWUgOiBwdWJsaWMgUmVzWE1MUGFyc2VyCi17Ci1wdWJsaWM6Ci0gICAgUmVzWE1MVHJlZSgpOwotICAgIFJlc1hNTFRyZWUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIGJvb2wgY29weURhdGE9ZmFsc2UpOwotICAgIH5SZXNYTUxUcmVlKCk7Ci0KLSAgICBzdGF0dXNfdCBzZXRUbyhjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgYm9vbCBjb3B5RGF0YT1mYWxzZSk7Ci0KLSAgICBzdGF0dXNfdCBnZXRFcnJvcigpIGNvbnN0OwotCi0gICAgdm9pZCB1bmluaXQoKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgUmVzWE1MUGFyc2VyOwotCi0gICAgc3RhdHVzX3QgdmFsaWRhdGVOb2RlKGNvbnN0IFJlc1hNTFRyZWVfbm9kZSogbm9kZSkgY29uc3Q7Ci0KLSAgICBzdGF0dXNfdCAgICAgICAgICAgICAgICAgICAgbUVycm9yOwotICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICAgICBtT3duZWREYXRhOwotICAgIGNvbnN0IFJlc1hNTFRyZWVfaGVhZGVyKiAgICBtSGVhZGVyOwotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICBtU2l6ZTsKLSAgICBjb25zdCB1aW50OF90KiAgICAgICAgICAgICAgbURhdGFFbmQ7Ci0gICAgUmVzU3RyaW5nUG9vbCAgICAgICAgICAgICAgIG1TdHJpbmdzOwotICAgIGNvbnN0IHVpbnQzMl90KiAgICAgICAgICAgICBtUmVzSWRzOwotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICBtTnVtUmVzSWRzOwotICAgIGNvbnN0IFJlc1hNTFRyZWVfbm9kZSogICAgICBtUm9vdE5vZGU7Ci0gICAgY29uc3Qgdm9pZCogICAgICAgICAgICAgICAgIG1Sb290RXh0OwotICAgIGV2ZW50X2NvZGVfdCAgICAgICAgICAgICAgICBtUm9vdENvZGU7Ci19OwotCi0vKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBSRVNPVVJDRSBUQUJMRQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKioKLSAqIEhlYWRlciBmb3IgYSByZXNvdXJjZSB0YWJsZS4gIEl0cyBkYXRhIGNvbnRhaW5zIGEgc2VyaWVzIG9mCi0gKiBhZGRpdGlvbmFsIGNodW5rczoKLSAqICAgKiBBIFJlc1N0cmluZ1Bvb2xfaGVhZGVyIGNvbnRhaW5pbmcgYWxsIHRhYmxlIHZhbHVlcy4gIFRoaXMgc3RyaW5nIHBvb2wKLSAqICAgICBjb250YWlucyBhbGwgb2YgdGhlIHN0cmluZyB2YWx1ZXMgaW4gdGhlIGVudGlyZSByZXNvdXJjZSB0YWJsZSAobm90Ci0gKiAgICAgdGhlIG5hbWVzIG9mIGVudHJpZXMgb3IgdHlwZSBpZGVudGlmaWVycyBob3dldmVyKS4KLSAqICAgKiBPbmUgb3IgbW9yZSBSZXNUYWJsZV9wYWNrYWdlIGNodW5rcy4KLSAqCi0gKiBTcGVjaWZpYyBlbnRyaWVzIHdpdGhpbiBhIHJlc291cmNlIHRhYmxlIGNhbiBiZSB1bmlxdWVseSBpZGVudGlmaWVkCi0gKiB3aXRoIGEgc2luZ2xlIGludGVnZXIgYXMgZGVmaW5lZCBieSB0aGUgUmVzVGFibGVfcmVmIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IFJlc1RhYmxlX2hlYWRlcgotewotICAgIHN0cnVjdCBSZXNDaHVua19oZWFkZXIgaGVhZGVyOwotCi0gICAgLy8gVGhlIG51bWJlciBvZiBSZXNUYWJsZV9wYWNrYWdlIHN0cnVjdHVyZXMuCi0gICAgdWludDMyX3QgcGFja2FnZUNvdW50OwotfTsKLQotLyoqCi0gKiBBIGNvbGxlY3Rpb24gb2YgcmVzb3VyY2UgZGF0YSB0eXBlcyB3aXRoaW4gYSBwYWNrYWdlLiAgRm9sbG93ZWQgYnkKLSAqIG9uZSBvciBtb3JlIFJlc1RhYmxlX3R5cGUgYW5kIFJlc1RhYmxlX3R5cGVTcGVjIHN0cnVjdHVyZXMgY29udGFpbmluZyB0aGUKLSAqIGVudHJ5IHZhbHVlcyBmb3IgZWFjaCByZXNvdXJjZSB0eXBlLgotICovCi1zdHJ1Y3QgUmVzVGFibGVfcGFja2FnZQotewotICAgIHN0cnVjdCBSZXNDaHVua19oZWFkZXIgaGVhZGVyOwotCi0gICAgLy8gSWYgdGhpcyBpcyBhIGJhc2UgcGFja2FnZSwgaXRzIElELiAgUGFja2FnZSBJRHMgc3RhcnQKLSAgICAvLyBhdCAxIChjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUgcGFja2FnZSBiaXRzIGluIGEKLSAgICAvLyByZXNvdXJjZSBpZGVudGlmaWVyKS4gIDAgbWVhbnMgdGhpcyBpcyBub3QgYSBiYXNlIHBhY2thZ2UuCi0gICAgdWludDMyX3QgaWQ7Ci0KLSAgICAvLyBBY3R1YWwgbmFtZSBvZiB0aGlzIHBhY2thZ2UsIFwwLXRlcm1pbmF0ZWQuCi0gICAgY2hhcjE2X3QgbmFtZVsxMjhdOwotCi0gICAgLy8gT2Zmc2V0IHRvIGEgUmVzU3RyaW5nUG9vbF9oZWFkZXIgZGVmaW5pbmcgdGhlIHJlc291cmNlCi0gICAgLy8gdHlwZSBzeW1ib2wgdGFibGUuICBJZiB6ZXJvLCB0aGlzIHBhY2thZ2UgaXMgaW5oZXJpdGluZyBmcm9tCi0gICAgLy8gYW5vdGhlciBiYXNlIHBhY2thZ2UgKG92ZXJyaWRpbmcgc3BlY2lmaWMgdmFsdWVzIGluIGl0KS4KLSAgICB1aW50MzJfdCB0eXBlU3RyaW5nczsKLQotICAgIC8vIExhc3QgaW5kZXggaW50byB0eXBlU3RyaW5ncyB0aGF0IGlzIGZvciBwdWJsaWMgdXNlIGJ5IG90aGVycy4KLSAgICB1aW50MzJfdCBsYXN0UHVibGljVHlwZTsKLQotICAgIC8vIE9mZnNldCB0byBhIFJlc1N0cmluZ1Bvb2xfaGVhZGVyIGRlZmluaW5nIHRoZSByZXNvdXJjZQotICAgIC8vIGtleSBzeW1ib2wgdGFibGUuICBJZiB6ZXJvLCB0aGlzIHBhY2thZ2UgaXMgaW5oZXJpdGluZyBmcm9tCi0gICAgLy8gYW5vdGhlciBiYXNlIHBhY2thZ2UgKG92ZXJyaWRpbmcgc3BlY2lmaWMgdmFsdWVzIGluIGl0KS4KLSAgICB1aW50MzJfdCBrZXlTdHJpbmdzOwotCi0gICAgLy8gTGFzdCBpbmRleCBpbnRvIGtleVN0cmluZ3MgdGhhdCBpcyBmb3IgcHVibGljIHVzZSBieSBvdGhlcnMuCi0gICAgdWludDMyX3QgbGFzdFB1YmxpY0tleTsKLX07Ci0KLS8qKgotICogRGVzY3JpYmVzIGEgcGFydGljdWxhciByZXNvdXJjZSBjb25maWd1cmF0aW9uLgotICovCi1zdHJ1Y3QgUmVzVGFibGVfY29uZmlnCi17Ci0gICAgLy8gTnVtYmVyIG9mIGJ5dGVzIGluIHRoaXMgc3RydWN0dXJlLgotICAgIHVpbnQzMl90IHNpemU7Ci0gICAgCi0gICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgLy8gTW9iaWxlIGNvdW50cnkgY29kZSAoZnJvbSBTSU0pLiAgMCBtZWFucyAiYW55Ii4KLSAgICAgICAgICAgIHVpbnQxNl90IG1jYzsKLSAgICAgICAgICAgIC8vIE1vYmlsZSBuZXR3b3JrIGNvZGUgKGZyb20gU0lNKS4gIDAgbWVhbnMgImFueSIuCi0gICAgICAgICAgICB1aW50MTZfdCBtbmM7Ci0gICAgICAgIH07Ci0gICAgICAgIHVpbnQzMl90IGltc2k7Ci0gICAgfTsKLSAgICAKLSAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAvLyBcMFwwIG1lYW5zICJhbnkiLiAgT3RoZXJ3aXNlLCBlbiwgZnIsIGV0Yy4KLSAgICAgICAgICAgIGNoYXIgbGFuZ3VhZ2VbMl07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFwwXDAgbWVhbnMgImFueSIuICBPdGhlcndpc2UsIFVTLCBDQSwgZXRjLgotICAgICAgICAgICAgY2hhciBjb3VudHJ5WzJdOwotICAgICAgICB9OwotICAgICAgICB1aW50MzJfdCBsb2NhbGU7Ci0gICAgfTsKLSAgICAKLSAgICBlbnVtIHsKLSAgICAgICAgT1JJRU5UQVRJT05fQU5ZICA9IEFDT05GSUdVUkFUSU9OX09SSUVOVEFUSU9OX0FOWSwKLSAgICAgICAgT1JJRU5UQVRJT05fUE9SVCA9IEFDT05GSUdVUkFUSU9OX09SSUVOVEFUSU9OX1BPUlQsCi0gICAgICAgIE9SSUVOVEFUSU9OX0xBTkQgPSBBQ09ORklHVVJBVElPTl9PUklFTlRBVElPTl9MQU5ELAotICAgICAgICBPUklFTlRBVElPTl9TUVVBUkUgPSBBQ09ORklHVVJBVElPTl9PUklFTlRBVElPTl9TUVVBUkUsCi0gICAgfTsKLSAgICAKLSAgICBlbnVtIHsKLSAgICAgICAgVE9VQ0hTQ1JFRU5fQU5ZICA9IEFDT05GSUdVUkFUSU9OX1RPVUNIU0NSRUVOX0FOWSwKLSAgICAgICAgVE9VQ0hTQ1JFRU5fTk9UT1VDSCAgPSBBQ09ORklHVVJBVElPTl9UT1VDSFNDUkVFTl9OT1RPVUNILAotICAgICAgICBUT1VDSFNDUkVFTl9TVFlMVVMgID0gQUNPTkZJR1VSQVRJT05fVE9VQ0hTQ1JFRU5fU1RZTFVTLAotICAgICAgICBUT1VDSFNDUkVFTl9GSU5HRVIgID0gQUNPTkZJR1VSQVRJT05fVE9VQ0hTQ1JFRU5fRklOR0VSLAotICAgIH07Ci0gICAgCi0gICAgZW51bSB7Ci0gICAgICAgIERFTlNJVFlfREVGQVVMVCA9IEFDT05GSUdVUkFUSU9OX0RFTlNJVFlfREVGQVVMVCwKLSAgICAgICAgREVOU0lUWV9MT1cgPSBBQ09ORklHVVJBVElPTl9ERU5TSVRZX0xPVywKLSAgICAgICAgREVOU0lUWV9NRURJVU0gPSBBQ09ORklHVVJBVElPTl9ERU5TSVRZX01FRElVTSwKLSAgICAgICAgREVOU0lUWV9UViA9IEFDT05GSUdVUkFUSU9OX0RFTlNJVFlfVFYsCi0gICAgICAgIERFTlNJVFlfSElHSCA9IEFDT05GSUdVUkFUSU9OX0RFTlNJVFlfSElHSCwKLSAgICAgICAgREVOU0lUWV9YSElHSCA9IEFDT05GSUdVUkFUSU9OX0RFTlNJVFlfWEhJR0gsCi0gICAgICAgIERFTlNJVFlfWFhISUdIID0gQUNPTkZJR1VSQVRJT05fREVOU0lUWV9YWEhJR0gsCi0gICAgICAgIERFTlNJVFlfWFhYSElHSCA9IEFDT05GSUdVUkFUSU9OX0RFTlNJVFlfWFhYSElHSCwKLSAgICAgICAgREVOU0lUWV9OT05FID0gQUNPTkZJR1VSQVRJT05fREVOU0lUWV9OT05FCi0gICAgfTsKLSAgICAKLSAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1aW50OF90IG9yaWVudGF0aW9uOwotICAgICAgICAgICAgdWludDhfdCB0b3VjaHNjcmVlbjsKLSAgICAgICAgICAgIHVpbnQxNl90IGRlbnNpdHk7Ci0gICAgICAgIH07Ci0gICAgICAgIHVpbnQzMl90IHNjcmVlblR5cGU7Ci0gICAgfTsKLSAgICAKLSAgICBlbnVtIHsKLSAgICAgICAgS0VZQk9BUkRfQU5ZICA9IEFDT05GSUdVUkFUSU9OX0tFWUJPQVJEX0FOWSwKLSAgICAgICAgS0VZQk9BUkRfTk9LRVlTICA9IEFDT05GSUdVUkFUSU9OX0tFWUJPQVJEX05PS0VZUywKLSAgICAgICAgS0VZQk9BUkRfUVdFUlRZICA9IEFDT05GSUdVUkFUSU9OX0tFWUJPQVJEX1FXRVJUWSwKLSAgICAgICAgS0VZQk9BUkRfMTJLRVkgID0gQUNPTkZJR1VSQVRJT05fS0VZQk9BUkRfMTJLRVksCi0gICAgfTsKLSAgICAKLSAgICBlbnVtIHsKLSAgICAgICAgTkFWSUdBVElPTl9BTlkgID0gQUNPTkZJR1VSQVRJT05fTkFWSUdBVElPTl9BTlksCi0gICAgICAgIE5BVklHQVRJT05fTk9OQVYgID0gQUNPTkZJR1VSQVRJT05fTkFWSUdBVElPTl9OT05BViwKLSAgICAgICAgTkFWSUdBVElPTl9EUEFEICA9IEFDT05GSUdVUkFUSU9OX05BVklHQVRJT05fRFBBRCwKLSAgICAgICAgTkFWSUdBVElPTl9UUkFDS0JBTEwgID0gQUNPTkZJR1VSQVRJT05fTkFWSUdBVElPTl9UUkFDS0JBTEwsCi0gICAgICAgIE5BVklHQVRJT05fV0hFRUwgID0gQUNPTkZJR1VSQVRJT05fTkFWSUdBVElPTl9XSEVFTCwKLSAgICB9OwotICAgIAotICAgIGVudW0gewotICAgICAgICBNQVNLX0tFWVNISURERU4gPSAweDAwMDMsCi0gICAgICAgIEtFWVNISURERU5fQU5ZID0gQUNPTkZJR1VSQVRJT05fS0VZU0hJRERFTl9BTlksCi0gICAgICAgIEtFWVNISURERU5fTk8gPSBBQ09ORklHVVJBVElPTl9LRVlTSElEREVOX05PLAotICAgICAgICBLRVlTSElEREVOX1lFUyA9IEFDT05GSUdVUkFUSU9OX0tFWVNISURERU5fWUVTLAotICAgICAgICBLRVlTSElEREVOX1NPRlQgPSBBQ09ORklHVVJBVElPTl9LRVlTSElEREVOX1NPRlQsCi0gICAgfTsKLSAgICAKLSAgICBlbnVtIHsKLSAgICAgICAgTUFTS19OQVZISURERU4gPSAweDAwMGMsCi0gICAgICAgIFNISUZUX05BVkhJRERFTiA9IDIsCi0gICAgICAgIE5BVkhJRERFTl9BTlkgPSBBQ09ORklHVVJBVElPTl9OQVZISURERU5fQU5ZIDw8IFNISUZUX05BVkhJRERFTiwKLSAgICAgICAgTkFWSElEREVOX05PID0gQUNPTkZJR1VSQVRJT05fTkFWSElEREVOX05PIDw8IFNISUZUX05BVkhJRERFTiwKLSAgICAgICAgTkFWSElEREVOX1lFUyA9IEFDT05GSUdVUkFUSU9OX05BVkhJRERFTl9ZRVMgPDwgU0hJRlRfTkFWSElEREVOLAotICAgIH07Ci0gICAgCi0gICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdWludDhfdCBrZXlib2FyZDsKLSAgICAgICAgICAgIHVpbnQ4X3QgbmF2aWdhdGlvbjsKLSAgICAgICAgICAgIHVpbnQ4X3QgaW5wdXRGbGFnczsKLSAgICAgICAgICAgIHVpbnQ4X3QgaW5wdXRQYWQwOwotICAgICAgICB9OwotICAgICAgICB1aW50MzJfdCBpbnB1dDsKLSAgICB9OwotICAgIAotICAgIGVudW0gewotICAgICAgICBTQ1JFRU5XSURUSF9BTlkgPSAwCi0gICAgfTsKLSAgICAKLSAgICBlbnVtIHsKLSAgICAgICAgU0NSRUVOSEVJR0hUX0FOWSA9IDAKLSAgICB9OwotICAgIAotICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVpbnQxNl90IHNjcmVlbldpZHRoOwotICAgICAgICAgICAgdWludDE2X3Qgc2NyZWVuSGVpZ2h0OwotICAgICAgICB9OwotICAgICAgICB1aW50MzJfdCBzY3JlZW5TaXplOwotICAgIH07Ci0gICAgCi0gICAgZW51bSB7Ci0gICAgICAgIFNES1ZFUlNJT05fQU5ZID0gMAotICAgIH07Ci0gICAgCi0gICAgZW51bSB7Ci0gICAgICAgIE1JTk9SVkVSU0lPTl9BTlkgPSAwCi0gICAgfTsKLSAgICAKLSAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1aW50MTZfdCBzZGtWZXJzaW9uOwotICAgICAgICAgICAgLy8gRm9yIG5vdyBtaW5vclZlcnNpb24gbXVzdCBhbHdheXMgYmUgMCEhISAgSXRzIG1lYW5pbmcKLSAgICAgICAgICAgIC8vIGlzIGN1cnJlbnRseSB1bmRlZmluZWQuCi0gICAgICAgICAgICB1aW50MTZfdCBtaW5vclZlcnNpb247Ci0gICAgICAgIH07Ci0gICAgICAgIHVpbnQzMl90IHZlcnNpb247Ci0gICAgfTsKLSAgICAKLSAgICBlbnVtIHsKLSAgICAgICAgLy8gc2NyZWVuTGF5b3V0IGJpdHMgZm9yIHNjcmVlbiBzaXplIGNsYXNzLgotICAgICAgICBNQVNLX1NDUkVFTlNJWkUgPSAweDBmLAotICAgICAgICBTQ1JFRU5TSVpFX0FOWSA9IEFDT05GSUdVUkFUSU9OX1NDUkVFTlNJWkVfQU5ZLAotICAgICAgICBTQ1JFRU5TSVpFX1NNQUxMID0gQUNPTkZJR1VSQVRJT05fU0NSRUVOU0laRV9TTUFMTCwKLSAgICAgICAgU0NSRUVOU0laRV9OT1JNQUwgPSBBQ09ORklHVVJBVElPTl9TQ1JFRU5TSVpFX05PUk1BTCwKLSAgICAgICAgU0NSRUVOU0laRV9MQVJHRSA9IEFDT05GSUdVUkFUSU9OX1NDUkVFTlNJWkVfTEFSR0UsCi0gICAgICAgIFNDUkVFTlNJWkVfWExBUkdFID0gQUNPTkZJR1VSQVRJT05fU0NSRUVOU0laRV9YTEFSR0UsCi0gICAgICAgIAotICAgICAgICAvLyBzY3JlZW5MYXlvdXQgYml0cyBmb3Igd2lkZS9sb25nIHNjcmVlbiB2YXJpYXRpb24uCi0gICAgICAgIE1BU0tfU0NSRUVOTE9ORyA9IDB4MzAsCi0gICAgICAgIFNISUZUX1NDUkVFTkxPTkcgPSA0LAotICAgICAgICBTQ1JFRU5MT05HX0FOWSA9IEFDT05GSUdVUkFUSU9OX1NDUkVFTkxPTkdfQU5ZIDw8IFNISUZUX1NDUkVFTkxPTkcsCi0gICAgICAgIFNDUkVFTkxPTkdfTk8gPSBBQ09ORklHVVJBVElPTl9TQ1JFRU5MT05HX05PIDw8IFNISUZUX1NDUkVFTkxPTkcsCi0gICAgICAgIFNDUkVFTkxPTkdfWUVTID0gQUNPTkZJR1VSQVRJT05fU0NSRUVOTE9OR19ZRVMgPDwgU0hJRlRfU0NSRUVOTE9ORywKLQotICAgICAgICAvLyBzY3JlZW5MYXlvdXQgYml0cyBmb3IgbGF5b3V0IGRpcmVjdGlvbi4KLSAgICAgICAgTUFTS19MQVlPVVRESVIgPSAweEMwLAotICAgICAgICBTSElGVF9MQVlPVVRESVIgPSA2LAotICAgICAgICBMQVlPVVRESVJfQU5ZID0gQUNPTkZJR1VSQVRJT05fTEFZT1VURElSX0FOWSA8PCBTSElGVF9MQVlPVVRESVIsCi0gICAgICAgIExBWU9VVERJUl9MVFIgPSBBQ09ORklHVVJBVElPTl9MQVlPVVRESVJfTFRSIDw8IFNISUZUX0xBWU9VVERJUiwKLSAgICAgICAgTEFZT1VURElSX1JUTCA9IEFDT05GSUdVUkFUSU9OX0xBWU9VVERJUl9SVEwgPDwgU0hJRlRfTEFZT1VURElSLAotICAgIH07Ci0gICAgCi0gICAgZW51bSB7Ci0gICAgICAgIC8vIHVpTW9kZSBiaXRzIGZvciB0aGUgbW9kZSB0eXBlLgotICAgICAgICBNQVNLX1VJX01PREVfVFlQRSA9IDB4MGYsCi0gICAgICAgIFVJX01PREVfVFlQRV9BTlkgPSBBQ09ORklHVVJBVElPTl9VSV9NT0RFX1RZUEVfQU5ZLAotICAgICAgICBVSV9NT0RFX1RZUEVfTk9STUFMID0gQUNPTkZJR1VSQVRJT05fVUlfTU9ERV9UWVBFX05PUk1BTCwKLSAgICAgICAgVUlfTU9ERV9UWVBFX0RFU0sgPSBBQ09ORklHVVJBVElPTl9VSV9NT0RFX1RZUEVfREVTSywKLSAgICAgICAgVUlfTU9ERV9UWVBFX0NBUiA9IEFDT05GSUdVUkFUSU9OX1VJX01PREVfVFlQRV9DQVIsCi0gICAgICAgIFVJX01PREVfVFlQRV9URUxFVklTSU9OID0gQUNPTkZJR1VSQVRJT05fVUlfTU9ERV9UWVBFX1RFTEVWSVNJT04sCi0gICAgICAgIFVJX01PREVfVFlQRV9BUFBMSUFOQ0UgPSBBQ09ORklHVVJBVElPTl9VSV9NT0RFX1RZUEVfQVBQTElBTkNFLAotCi0gICAgICAgIC8vIHVpTW9kZSBiaXRzIGZvciB0aGUgbmlnaHQgc3dpdGNoLgotICAgICAgICBNQVNLX1VJX01PREVfTklHSFQgPSAweDMwLAotICAgICAgICBTSElGVF9VSV9NT0RFX05JR0hUID0gNCwKLSAgICAgICAgVUlfTU9ERV9OSUdIVF9BTlkgPSBBQ09ORklHVVJBVElPTl9VSV9NT0RFX05JR0hUX0FOWSA8PCBTSElGVF9VSV9NT0RFX05JR0hULAotICAgICAgICBVSV9NT0RFX05JR0hUX05PID0gQUNPTkZJR1VSQVRJT05fVUlfTU9ERV9OSUdIVF9OTyA8PCBTSElGVF9VSV9NT0RFX05JR0hULAotICAgICAgICBVSV9NT0RFX05JR0hUX1lFUyA9IEFDT05GSUdVUkFUSU9OX1VJX01PREVfTklHSFRfWUVTIDw8IFNISUZUX1VJX01PREVfTklHSFQsCi0gICAgfTsKLQotICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVpbnQ4X3Qgc2NyZWVuTGF5b3V0OwotICAgICAgICAgICAgdWludDhfdCB1aU1vZGU7Ci0gICAgICAgICAgICB1aW50MTZfdCBzbWFsbGVzdFNjcmVlbldpZHRoRHA7Ci0gICAgICAgIH07Ci0gICAgICAgIHVpbnQzMl90IHNjcmVlbkNvbmZpZzsKLSAgICB9OwotICAgIAotICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVpbnQxNl90IHNjcmVlbldpZHRoRHA7Ci0gICAgICAgICAgICB1aW50MTZfdCBzY3JlZW5IZWlnaHREcDsKLSAgICAgICAgfTsKLSAgICAgICAgdWludDMyX3Qgc2NyZWVuU2l6ZURwOwotICAgIH07Ci0KLSAgICB2b2lkIGNvcHlGcm9tRGV2aWNlTm9Td2FwKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgbyk7Ci0gICAgCi0gICAgdm9pZCBjb3B5RnJvbUR0b0goY29uc3QgUmVzVGFibGVfY29uZmlnJiBvKTsKLSAgICAKLSAgICB2b2lkIHN3YXBIdG9EKCk7Ci0KLSAgICBpbnQgY29tcGFyZShjb25zdCBSZXNUYWJsZV9jb25maWcmIG8pIGNvbnN0OwotICAgIGludCBjb21wYXJlTG9naWNhbChjb25zdCBSZXNUYWJsZV9jb25maWcmIG8pIGNvbnN0OwotCi0gICAgLy8gRmxhZ3MgaW5kaWNhdGluZyBhIHNldCBvZiBjb25maWcgdmFsdWVzLiAgVGhlc2UgZmxhZyBjb25zdGFudHMgbXVzdAotICAgIC8vIG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIG9uZXMgaW4gYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mbyBhbmQKLSAgICAvLyBhdHRyc19tYW5pZmVzdC54bWwuCi0gICAgZW51bSB7Ci0gICAgICAgIENPTkZJR19NQ0MgPSBBQ09ORklHVVJBVElPTl9NQ0MsCi0gICAgICAgIENPTkZJR19NTkMgPSBBQ09ORklHVVJBVElPTl9NQ0MsCi0gICAgICAgIENPTkZJR19MT0NBTEUgPSBBQ09ORklHVVJBVElPTl9MT0NBTEUsCi0gICAgICAgIENPTkZJR19UT1VDSFNDUkVFTiA9IEFDT05GSUdVUkFUSU9OX1RPVUNIU0NSRUVOLAotICAgICAgICBDT05GSUdfS0VZQk9BUkQgPSBBQ09ORklHVVJBVElPTl9LRVlCT0FSRCwKLSAgICAgICAgQ09ORklHX0tFWUJPQVJEX0hJRERFTiA9IEFDT05GSUdVUkFUSU9OX0tFWUJPQVJEX0hJRERFTiwKLSAgICAgICAgQ09ORklHX05BVklHQVRJT04gPSBBQ09ORklHVVJBVElPTl9OQVZJR0FUSU9OLAotICAgICAgICBDT05GSUdfT1JJRU5UQVRJT04gPSBBQ09ORklHVVJBVElPTl9PUklFTlRBVElPTiwKLSAgICAgICAgQ09ORklHX0RFTlNJVFkgPSBBQ09ORklHVVJBVElPTl9ERU5TSVRZLAotICAgICAgICBDT05GSUdfU0NSRUVOX1NJWkUgPSBBQ09ORklHVVJBVElPTl9TQ1JFRU5fU0laRSwKLSAgICAgICAgQ09ORklHX1NNQUxMRVNUX1NDUkVFTl9TSVpFID0gQUNPTkZJR1VSQVRJT05fU01BTExFU1RfU0NSRUVOX1NJWkUsCi0gICAgICAgIENPTkZJR19WRVJTSU9OID0gQUNPTkZJR1VSQVRJT05fVkVSU0lPTiwKLSAgICAgICAgQ09ORklHX1NDUkVFTl9MQVlPVVQgPSBBQ09ORklHVVJBVElPTl9TQ1JFRU5fTEFZT1VULAotICAgICAgICBDT05GSUdfVUlfTU9ERSA9IEFDT05GSUdVUkFUSU9OX1VJX01PREUsCi0gICAgICAgIENPTkZJR19MQVlPVVRESVIgPSBBQ09ORklHVVJBVElPTl9MQVlPVVRESVIsCi0gICAgfTsKLSAgICAKLSAgICAvLyBDb21wYXJlIHR3byBjb25maWd1cmF0aW9uLCByZXR1cm5pbmcgQ09ORklHXyogZmxhZ3Mgc2V0IGZvciBlYWNoIHZhbHVlCi0gICAgLy8gdGhhdCBpcyBkaWZmZXJlbnQuCi0gICAgaW50IGRpZmYoY29uc3QgUmVzVGFibGVfY29uZmlnJiBvKSBjb25zdDsKLSAgICAKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiAndGhpcycgaXMgbW9yZSBzcGVjaWZpYyB0aGFuICdvJy4KLSAgICBib29sIGlzTW9yZVNwZWNpZmljVGhhbihjb25zdCBSZXNUYWJsZV9jb25maWcmIG8pIGNvbnN0OwotCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgJ3RoaXMnIGlzIGEgYmV0dGVyIG1hdGNoIHRoYW4gJ28nIGZvciB0aGUgJ3JlcXVlc3RlZCcKLSAgICAvLyBjb25maWd1cmF0aW9uLiAgVGhpcyBhc3N1bWVzIHRoYXQgbWF0Y2goKSBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgdG8KLSAgICAvLyByZW1vdmUgYW55IGNvbmZpZ3VyYXRpb25zIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIHJlcXVlc3RlZCBjb25maWd1cmF0aW9uCi0gICAgLy8gYXQgYWxsOyBpZiB0aGV5IGFyZSBub3QgZmlyc3QgZmlsdGVyZWQsIG5vbi1tYXRjaGluZyByZXN1bHRzIGNhbiBiZQotICAgIC8vIGNvbnNpZGVyZWQgYmV0dGVyIHRoYW4gbWF0Y2hpbmcgb25lcy4KLSAgICAvLyBUaGUgZ2VuZXJhbCBydWxlIHBlciBhdHRyaWJ1dGU6IGlmIHRoZSByZXF1ZXN0IGNhcmVzIGFib3V0IGFuIGF0dHJpYnV0ZQotICAgIC8vIChpdCBub3JtYWxseSBkb2VzKSwgaWYgdGhlIHR3byAodGhpcyBhbmQgbykgYXJlIGVxdWFsIGl0J3MgYSB0aWUuICBJZgotICAgIC8vIHRoZXkgYXJlIG5vdCBlcXVhbCB0aGVuIG9uZSBtdXN0IGJlIGdlbmVyaWMgYmVjYXVzZSBvbmx5IGdlbmVyaWMgYW5kCi0gICAgLy8gJz09cmVxdWVzdGVkJyB3aWxsIHBhc3MgdGhlIG1hdGNoKCkgY2FsbC4gIFNvIGlmIHRoaXMgaXMgbm90IGdlbmVyaWMsCi0gICAgLy8gaXQgd2lucy4gIElmIHRoaXMgSVMgZ2VuZXJpYywgbyB3aW5zIChyZXR1cm4gZmFsc2UpLgotICAgIGJvb2wgaXNCZXR0ZXJUaGFuKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgbywgY29uc3QgUmVzVGFibGVfY29uZmlnKiByZXF1ZXN0ZWQpIGNvbnN0OwotCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgJ3RoaXMnIGNhbiBiZSBjb25zaWRlcmVkIGEgbWF0Y2ggZm9yIHRoZSBwYXJhbWV0ZXJzIGluIAotICAgIC8vICdzZXR0aW5ncycuCi0gICAgLy8gTm90ZSB0aGlzIGlzIGFzeW1ldHJpYy4gIEEgZGVmYXVsdCBwaWVjZSBvZiBkYXRhIHdpbGwgbWF0Y2ggZXZlcnkgcmVxdWVzdAotICAgIC8vIGJ1dCBhIHJlcXVlc3QgZm9yIHRoZSBkZWZhdWx0IHNob3VsZCBub3QgbWF0Y2ggb2RkIHNwZWNpZmljcwotICAgIC8vIChpZSwgcmVxdWVzdCB3aXRoIG5vIG1jYyBzaG91bGQgbm90IG1hdGNoIGEgcGFydGljdWxhciBtY2MncyBkYXRhKQotICAgIC8vIHNldHRpbmdzIGlzIHRoZSByZXF1ZXN0ZWQgc2V0dGluZ3MKLSAgICBib29sIG1hdGNoKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgc2V0dGluZ3MpIGNvbnN0OwotCi0gICAgdm9pZCBnZXRMb2NhbGUoY2hhciBzdHJbNl0pIGNvbnN0OwotCi0gICAgU3RyaW5nOCB0b1N0cmluZygpIGNvbnN0OwotfTsKLQotLyoqCi0gKiBBIHNwZWNpZmljYXRpb24gb2YgdGhlIHJlc291cmNlcyBkZWZpbmVkIGJ5IGEgcGFydGljdWxhciB0eXBlLgotICoKLSAqIFRoZXJlIHNob3VsZCBiZSBvbmUgb2YgdGhlc2UgY2h1bmtzIGZvciBlYWNoIHJlc291cmNlIHR5cGUuCi0gKgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgZm9sbG93ZWQgYnkgYW4gYXJyYXkgb2YgaW50ZWdlcnMgcHJvdmlkaW5nIHRoZSBzZXQgb2YKLSAqIGNvbmZpZ3VyYXRpb24gY2hhbmdlIGZsYWdzIChSZXNUYWJsZV9jb25maWc6OkNPTkZJR18qKSB0aGF0IGhhdmUgbXVsdGlwbGUKLSAqIHJlc291cmNlcyBmb3IgdGhhdCBjb25maWd1cmF0aW9uLiAgSW4gYWRkaXRpb24sIHRoZSBoaWdoIGJpdCBpcyBzZXQgaWYgdGhhdAotICogcmVzb3VyY2UgaGFzIGJlZW4gbWFkZSBwdWJsaWMuCi0gKi8KLXN0cnVjdCBSZXNUYWJsZV90eXBlU3BlYwotewotICAgIHN0cnVjdCBSZXNDaHVua19oZWFkZXIgaGVhZGVyOwotCi0gICAgLy8gVGhlIHR5cGUgaWRlbnRpZmllciB0aGlzIGNodW5rIGlzIGhvbGRpbmcuICBUeXBlIElEcyBzdGFydAotICAgIC8vIGF0IDEgKGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZSB0eXBlIGJpdHMgaW4gYQotICAgIC8vIHJlc291cmNlIGlkZW50aWZpZXIpLiAgMCBpcyBpbnZhbGlkLgotICAgIHVpbnQ4X3QgaWQ7Ci0gICAgCi0gICAgLy8gTXVzdCBiZSAwLgotICAgIHVpbnQ4X3QgcmVzMDsKLSAgICAvLyBNdXN0IGJlIDAuCi0gICAgdWludDE2X3QgcmVzMTsKLSAgICAKLSAgICAvLyBOdW1iZXIgb2YgdWludDMyX3QgZW50cnkgY29uZmlndXJhdGlvbiBtYXNrcyB0aGF0IGZvbGxvdy4KLSAgICB1aW50MzJfdCBlbnRyeUNvdW50OwotCi0gICAgZW51bSB7Ci0gICAgICAgIC8vIEFkZGl0aW9uYWwgZmxhZyBpbmRpY2F0aW5nIGFuIGVudHJ5IGlzIHB1YmxpYy4KLSAgICAgICAgU1BFQ19QVUJMSUMgPSAweDQwMDAwMDAwCi0gICAgfTsKLX07Ci0KLS8qKgotICogQSBjb2xsZWN0aW9uIG9mIHJlc291cmNlIGVudHJpZXMgZm9yIGEgcGFydGljdWxhciByZXNvdXJjZSBkYXRhCi0gKiB0eXBlLiBGb2xsb3dlZCBieSBhbiBhcnJheSBvZiB1aW50MzJfdCBkZWZpbmluZyB0aGUgcmVzb3VyY2UKLSAqIHZhbHVlcywgY29ycmVzcG9uZGluZyB0byB0aGUgYXJyYXkgb2YgdHlwZSBzdHJpbmdzIGluIHRoZQotICogUmVzVGFibGVfcGFja2FnZTo6dHlwZVN0cmluZ3Mgc3RyaW5nIGJsb2NrLiBFYWNoIG9mIHRoZXNlIGhvbGQgYW4KLSAqIGluZGV4IGZyb20gZW50cmllc1N0YXJ0OyBhIHZhbHVlIG9mIE5PX0VOVFJZIG1lYW5zIHRoYXQgZW50cnkgaXMKLSAqIG5vdCBkZWZpbmVkLgotICoKLSAqIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBvZiB0aGVzZSBjaHVua3MgZm9yIGEgcGFydGljdWxhciByZXNvdXJjZSB0eXBlLAotICogc3VwcGx5IGRpZmZlcmVudCBjb25maWd1cmF0aW9uIHZhcmlhdGlvbnMgZm9yIHRoZSByZXNvdXJjZSB2YWx1ZXMgb2YKLSAqIHRoYXQgdHlwZS4KLSAqCi0gKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgYW4gYWRkaXRpb25hbCBvcmRlcmVkIGluZGV4IG9mIGVudHJpZXMsIHNvCi0gKiB3ZSBjYW4gZG8gYSBiaW5hcnkgc2VhcmNoIGlmIHRyeWluZyB0byBmaW5kIGEgcmVzb3VyY2UgYnkgc3RyaW5nIG5hbWUuCi0gKi8KLXN0cnVjdCBSZXNUYWJsZV90eXBlCi17Ci0gICAgc3RydWN0IFJlc0NodW5rX2hlYWRlciBoZWFkZXI7Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgTk9fRU5UUlkgPSAweEZGRkZGRkZGCi0gICAgfTsKLSAgICAKLSAgICAvLyBUaGUgdHlwZSBpZGVudGlmaWVyIHRoaXMgY2h1bmsgaXMgaG9sZGluZy4gIFR5cGUgSURzIHN0YXJ0Ci0gICAgLy8gYXQgMSAoY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlIHR5cGUgYml0cyBpbiBhCi0gICAgLy8gcmVzb3VyY2UgaWRlbnRpZmllcikuICAwIGlzIGludmFsaWQuCi0gICAgdWludDhfdCBpZDsKLSAgICAKLSAgICAvLyBNdXN0IGJlIDAuCi0gICAgdWludDhfdCByZXMwOwotICAgIC8vIE11c3QgYmUgMC4KLSAgICB1aW50MTZfdCByZXMxOwotICAgIAotICAgIC8vIE51bWJlciBvZiB1aW50MzJfdCBlbnRyeSBpbmRpY2VzIHRoYXQgZm9sbG93LgotICAgIHVpbnQzMl90IGVudHJ5Q291bnQ7Ci0KLSAgICAvLyBPZmZzZXQgZnJvbSBoZWFkZXIgd2hlcmUgUmVzVGFibGVfZW50cnkgZGF0YSBzdGFydHMuCi0gICAgdWludDMyX3QgZW50cmllc1N0YXJ0OwotICAgIAotICAgIC8vIENvbmZpZ3VyYXRpb24gdGhpcyBjb2xsZWN0aW9uIG9mIGVudHJpZXMgaXMgZGVzaWduZWQgZm9yLgotICAgIFJlc1RhYmxlX2NvbmZpZyBjb25maWc7Ci19OwotCi0vKioKLSAqIFRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiBpbmZvcm1hdGlvbiBhYm91dCBhbiBlbnRyeSBpbiB0aGUgcmVzb3VyY2UKLSAqIHRhYmxlLiAgSXQgaG9sZHMgdGhlIHJlZmVyZW5jZSB0byB0aGUgbmFtZSBvZiB0aGlzIGVudHJ5LCBhbmQgaXMKLSAqIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IG9uZSBvZjoKLSAqICAgKiBBIFJlc192YWx1ZSBzdHJ1Y3R1cmUsIGlmIEZMQUdfQ09NUExFWCBpcyAtbm90LSBzZXQuCi0gKiAgICogQW4gYXJyYXkgb2YgUmVzVGFibGVfbWFwIHN0cnVjdHVyZXMsIGlmIEZMQUdfQ09NUExFWCBpcyBzZXQuCi0gKiAgICAgVGhlc2Ugc3VwcGx5IGEgc2V0IG9mIG5hbWUvdmFsdWUgbWFwcGluZ3Mgb2YgZGF0YS4KLSAqLwotc3RydWN0IFJlc1RhYmxlX2VudHJ5Ci17Ci0gICAgLy8gTnVtYmVyIG9mIGJ5dGVzIGluIHRoaXMgc3RydWN0dXJlLgotICAgIHVpbnQxNl90IHNpemU7Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgLy8gSWYgc2V0LCB0aGlzIGlzIGEgY29tcGxleCBlbnRyeSwgaG9sZGluZyBhIHNldCBvZiBuYW1lL3ZhbHVlCi0gICAgICAgIC8vIG1hcHBpbmdzLiAgSXQgaXMgZm9sbG93ZWQgYnkgYW4gYXJyYXkgb2YgUmVzVGFibGVfbWFwIHN0cnVjdHVyZXMuCi0gICAgICAgIEZMQUdfQ09NUExFWCA9IDB4MDAwMSwKLSAgICAgICAgLy8gSWYgc2V0LCB0aGlzIHJlc291cmNlIGhhcyBiZWVuIGRlY2xhcmVkIHB1YmxpYywgc28gbGlicmFyaWVzCi0gICAgICAgIC8vIGFyZSBhbGxvd2VkIHRvIHJlZmVyZW5jZSBpdC4KLSAgICAgICAgRkxBR19QVUJMSUMgPSAweDAwMDIKLSAgICB9OwotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIAotICAgIC8vIFJlZmVyZW5jZSBpbnRvIFJlc1RhYmxlX3BhY2thZ2U6OmtleVN0cmluZ3MgaWRlbnRpZnlpbmcgdGhpcyBlbnRyeS4KLSAgICBzdHJ1Y3QgUmVzU3RyaW5nUG9vbF9yZWYga2V5OwotfTsKLQotLyoqCi0gKiBFeHRlbmRlZCBmb3JtIG9mIGEgUmVzVGFibGVfZW50cnkgZm9yIG1hcCBlbnRyaWVzLCBkZWZpbmluZyBhIHBhcmVudCBtYXAKLSAqIHJlc291cmNlIGZyb20gd2hpY2ggdG8gaW5oZXJpdCB2YWx1ZXMuCi0gKi8KLXN0cnVjdCBSZXNUYWJsZV9tYXBfZW50cnkgOiBwdWJsaWMgUmVzVGFibGVfZW50cnkKLXsKLSAgICAvLyBSZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBwYXJlbnQgbWFwcGluZywgb3IgMCBpZiB0aGVyZSBpcyBub25lLgotICAgIFJlc1RhYmxlX3JlZiBwYXJlbnQ7Ci0gICAgLy8gTnVtYmVyIG9mIG5hbWUvdmFsdWUgcGFpcnMgdGhhdCBmb2xsb3cgZm9yIEZMQUdfQ09NUExFWC4KLSAgICB1aW50MzJfdCBjb3VudDsKLX07Ci0KLS8qKgotICogQSBzaW5nbGUgbmFtZS92YWx1ZSBtYXBwaW5nIHRoYXQgaXMgcGFydCBvZiBhIGNvbXBsZXggcmVzb3VyY2UKLSAqIGVudHJ5LgotICovCi1zdHJ1Y3QgUmVzVGFibGVfbWFwCi17Ci0gICAgLy8gVGhlIHJlc291cmNlIGlkZW50aWZpZXIgZGVmaW5pbmcgdGhpcyBtYXBwaW5nJ3MgbmFtZS4gIEZvciBhdHRyaWJ1dGUKLSAgICAvLyByZXNvdXJjZXMsICduYW1lJyBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCByZXNvdXJjZSB0eXBlcwotICAgIC8vIHRvIHN1cHBseSBtZXRhLWRhdGEgYWJvdXQgdGhlIGF0dHJpYnV0ZTsgZm9yIGFsbCBvdGhlciByZXNvdXJjZSB0eXBlcwotICAgIC8vIGl0IG11c3QgYmUgYW4gYXR0cmlidXRlIHJlc291cmNlLgotICAgIFJlc1RhYmxlX3JlZiBuYW1lOwotCi0gICAgLy8gU3BlY2lhbCB2YWx1ZXMgZm9yICduYW1lJyB3aGVuIGRlZmluaW5nIGF0dHJpYnV0ZSByZXNvdXJjZXMuCi0gICAgZW51bSB7Ci0gICAgICAgIC8vIFRoaXMgZW50cnkgaG9sZHMgdGhlIGF0dHJpYnV0ZSdzIHR5cGUgY29kZS4KLSAgICAgICAgQVRUUl9UWVBFID0gUmVzX01BS0VJTlRFUk5BTCgwKSwKLQotICAgICAgICAvLyBGb3IgaW50ZWdyYWwgYXR0cmlidXRlcywgdGhpcyBpcyB0aGUgbWluaW11bSB2YWx1ZSBpdCBjYW4gaG9sZC4KLSAgICAgICAgQVRUUl9NSU4gPSBSZXNfTUFLRUlOVEVSTkFMKDEpLAotCi0gICAgICAgIC8vIEZvciBpbnRlZ3JhbCBhdHRyaWJ1dGVzLCB0aGlzIGlzIHRoZSBtYXhpbXVtIHZhbHVlIGl0IGNhbiBob2xkLgotICAgICAgICBBVFRSX01BWCA9IFJlc19NQUtFSU5URVJOQUwoMiksCi0KLSAgICAgICAgLy8gTG9jYWxpemF0aW9uIG9mIHRoaXMgcmVzb3VyY2UgaXMgY2FuIGJlIGVuY291cmFnZWQgb3IgcmVxdWlyZWQgd2l0aAotICAgICAgICAvLyBhbiBhYXB0IGZsYWcgaWYgdGhpcyBpcyBzZXQKLSAgICAgICAgQVRUUl9MMTBOID0gUmVzX01BS0VJTlRFUk5BTCgzKSwKLQotICAgICAgICAvLyBmb3IgcGx1cmFsIHN1cHBvcnQsIHNlZSBhbmRyb2lkLmNvbnRlbnQucmVzLlBsdXJhbFJ1bGVzI2F0dHJGb3JRdWFudGl0eShpbnQpCi0gICAgICAgIEFUVFJfT1RIRVIgPSBSZXNfTUFLRUlOVEVSTkFMKDQpLAotICAgICAgICBBVFRSX1pFUk8gPSBSZXNfTUFLRUlOVEVSTkFMKDUpLAotICAgICAgICBBVFRSX09ORSA9IFJlc19NQUtFSU5URVJOQUwoNiksCi0gICAgICAgIEFUVFJfVFdPID0gUmVzX01BS0VJTlRFUk5BTCg3KSwKLSAgICAgICAgQVRUUl9GRVcgPSBSZXNfTUFLRUlOVEVSTkFMKDgpLAotICAgICAgICBBVFRSX01BTlkgPSBSZXNfTUFLRUlOVEVSTkFMKDkpCi0gICAgICAgIAotICAgIH07Ci0KLSAgICAvLyBCaXQgbWFzayBvZiBhbGxvd2VkIHR5cGVzLCBmb3IgdXNlIHdpdGggQVRUUl9UWVBFLgotICAgIGVudW0gewotICAgICAgICAvLyBObyB0eXBlIGhhcyBiZWVuIGRlZmluZWQgZm9yIHRoaXMgYXR0cmlidXRlLCB1c2UgZ2VuZXJpYwotICAgICAgICAvLyB0eXBlIGhhbmRsaW5nLiAgVGhlIGxvdyAxNiBiaXRzIGFyZSBmb3IgdHlwZXMgdGhhdCBjYW4gYmUKLSAgICAgICAgLy8gaGFuZGxlZCBnZW5lcmljYWxseTsgdGhlIHVwcGVyIDE2IHJlcXVpcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICAgICAgICAvLyBpbiB0aGUgYmFnIHNvIGNhbiBub3QgYmUgaGFuZGxlZCBnZW5lcmljYWxseSBmb3IgVFlQRV9BTlkuCi0gICAgICAgIFRZUEVfQU5ZID0gMHgwMDAwRkZGRiwKLQotICAgICAgICAvLyBBdHRyaWJ1dGUgaG9sZHMgYSByZWZlcmVuY2VzIHRvIGFub3RoZXIgcmVzb3VyY2UuCi0gICAgICAgIFRZUEVfUkVGRVJFTkNFID0gMTw8MCwKLQotICAgICAgICAvLyBBdHRyaWJ1dGUgaG9sZHMgYSBnZW5lcmljIHN0cmluZy4KLSAgICAgICAgVFlQRV9TVFJJTkcgPSAxPDwxLAotCi0gICAgICAgIC8vIEF0dHJpYnV0ZSBob2xkcyBhbiBpbnRlZ2VyIHZhbHVlLiAgQVRUUl9NSU4gYW5kIEFUVFJfTUlOIGNhbgotICAgICAgICAvLyBvcHRpb25hbGx5IHNwZWNpZnkgYSBjb25zdHJhaW5lZCByYW5nZSBvZiBwb3NzaWJsZSBpbnRlZ2VyIHZhbHVlcy4KLSAgICAgICAgVFlQRV9JTlRFR0VSID0gMTw8MiwKLQotICAgICAgICAvLyBBdHRyaWJ1dGUgaG9sZHMgYSBib29sZWFuIGludGVnZXIuCi0gICAgICAgIFRZUEVfQk9PTEVBTiA9IDE8PDMsCi0KLSAgICAgICAgLy8gQXR0cmlidXRlIGhvbGRzIGEgY29sb3IgdmFsdWUuCi0gICAgICAgIFRZUEVfQ09MT1IgPSAxPDw0LAotCi0gICAgICAgIC8vIEF0dHJpYnV0ZSBob2xkcyBhIGZsb2F0aW5nIHBvaW50IHZhbHVlLgotICAgICAgICBUWVBFX0ZMT0FUID0gMTw8NSwKLQotICAgICAgICAvLyBBdHRyaWJ1dGUgaG9sZHMgYSBkaW1lbnNpb24gdmFsdWUsIHN1Y2ggYXMgIjIwcHgiLgotICAgICAgICBUWVBFX0RJTUVOU0lPTiA9IDE8PDYsCi0KLSAgICAgICAgLy8gQXR0cmlidXRlIGhvbGRzIGEgZnJhY3Rpb24gdmFsdWUsIHN1Y2ggYXMgIjIwJSIuCi0gICAgICAgIFRZUEVfRlJBQ1RJT04gPSAxPDw3LAotCi0gICAgICAgIC8vIEF0dHJpYnV0ZSBob2xkcyBhbiBlbnVtZXJhdGlvbi4gIFRoZSBlbnVtZXJhdGlvbiB2YWx1ZXMgYXJlCi0gICAgICAgIC8vIHN1cHBsaWVkIGFzIGFkZGl0aW9uYWwgZW50cmllcyBpbiB0aGUgbWFwLgotICAgICAgICBUWVBFX0VOVU0gPSAxPDwxNiwKLQotICAgICAgICAvLyBBdHRyaWJ1dGUgaG9sZHMgYSBiaXRtYWtzIG9mIGZsYWdzLiAgVGhlIGZsYWcgYml0IHZhbHVlcyBhcmUKLSAgICAgICAgLy8gc3VwcGxpZWQgYXMgYWRkaXRpb25hbCBlbnRyaWVzIGluIHRoZSBtYXAuCi0gICAgICAgIFRZUEVfRkxBR1MgPSAxPDwxNwotICAgIH07Ci0KLSAgICAvLyBFbnVtIG9mIGxvY2FsaXphdGlvbiBtb2RlcywgZm9yIHVzZSB3aXRoIEFUVFJfTDEwTi4KLSAgICBlbnVtIHsKLSAgICAgICAgTDEwTl9OT1RfUkVRVUlSRUQgPSAwLAotICAgICAgICBMMTBOX1NVR0dFU1RFRCAgICA9IDEKLSAgICB9OwotICAgIAotICAgIC8vIFRoaXMgbWFwcGluZydzIHZhbHVlLgotICAgIFJlc192YWx1ZSB2YWx1ZTsKLX07Ci0KLS8qKgotICogQ29udmVuaWVuY2UgY2xhc3MgZm9yIGFjY2Vzc2luZyBkYXRhIGluIGEgUmVzVGFibGUgcmVzb3VyY2UuCi0gKi8KLWNsYXNzIFJlc1RhYmxlCi17Ci1wdWJsaWM6Ci0gICAgUmVzVGFibGUoKTsKLSAgICBSZXNUYWJsZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgdm9pZCogY29va2llLAotICAgICAgICAgICAgIGJvb2wgY29weURhdGE9ZmFsc2UpOwotICAgIH5SZXNUYWJsZSgpOwotCi0gICAgc3RhdHVzX3QgYWRkKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCB2b2lkKiBjb29raWUsCi0gICAgICAgICAgICAgICAgIGJvb2wgY29weURhdGE9ZmFsc2UsIGNvbnN0IHZvaWQqIGlkbWFwID0gTlVMTCk7Ci0gICAgc3RhdHVzX3QgYWRkKEFzc2V0KiBhc3NldCwgdm9pZCogY29va2llLAotICAgICAgICAgICAgICAgICBib29sIGNvcHlEYXRhPWZhbHNlLCBjb25zdCB2b2lkKiBpZG1hcCA9IE5VTEwpOwotICAgIHN0YXR1c190IGFkZChSZXNUYWJsZSogc3JjKTsKLQotICAgIHN0YXR1c190IGdldEVycm9yKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHVuaW5pdCgpOwotCi0gICAgc3RydWN0IHJlc291cmNlX25hbWUKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIxNl90KiBwYWNrYWdlOwotICAgICAgICBzaXplX3QgcGFja2FnZUxlbjsKLSAgICAgICAgY29uc3QgY2hhcjE2X3QqIHR5cGU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHR5cGU4OwotICAgICAgICBzaXplX3QgdHlwZUxlbjsKLSAgICAgICAgY29uc3QgY2hhcjE2X3QqIG5hbWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWU4OwotICAgICAgICBzaXplX3QgbmFtZUxlbjsKLSAgICB9OwotCi0gICAgYm9vbCBnZXRSZXNvdXJjZU5hbWUodWludDMyX3QgcmVzSUQsIGJvb2wgYWxsb3dVdGY4LCByZXNvdXJjZV9uYW1lKiBvdXROYW1lKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiBhIHJlc291cmNlLiAgSWYgdGhlIHJlc291cmNlIGlzIGZvdW5kLCByZXR1cm5zIGEKLSAgICAgKiB2YWx1ZSA+PSAwIGluZGljYXRpbmcgdGhlIHRhYmxlIGl0IGlzIGluIChmb3IgdXNlIHdpdGgKLSAgICAgKiBnZXRUYWJsZVN0cmluZ0Jsb2NrKCkgYW5kIGdldFRhYmxlQ29va2llKCkpIGFuZCBmaWxscyBpbiAnb3V0VmFsdWUnLiAgSWYKLSAgICAgKiBub3QgZm91bmQsIHJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgotICAgICAqCi0gICAgICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZG8gcmVmZXJlbmNlIHRyYXZlcnNhbC4gIElmIHlvdSB3YW50Ci0gICAgICogdG8gZm9sbG93IHJlZmVyZW5jZXMgdG8gb3RoZXIgcmVzb3VyY2VzIHRvIGdldCB0aGUgInJlYWwiIHZhbHVlIHRvCi0gICAgICogdXNlLCB5b3UgbmVlZCB0byBjYWxsIHJlc29sdmVSZWZlcmVuY2UoKSBhZnRlciB0aGlzIGZ1bmN0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIHJlc0lEIFRoZSBkZXNpcmVkIHJlc29ydWNlIGlkZW50aWZpZXIuCi0gICAgICogQHBhcmFtIG91dFZhbHVlIEZpbGxlZCBpbiB3aXRoIHRoZSByZXNvdXJjZSBkYXRhIHRoYXQgd2FzIGZvdW5kLgotICAgICAqCi0gICAgICogQHJldHVybiBzc2l6ZV90IEVpdGhlciBhID49IDAgdGFibGUgaW5kZXggb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgotICAgICAqLwotICAgIHNzaXplX3QgZ2V0UmVzb3VyY2UodWludDMyX3QgcmVzSUQsIFJlc192YWx1ZSogb3V0VmFsdWUsIGJvb2wgbWF5QmVCYWcgPSBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgZGVuc2l0eSA9IDAsCi0gICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiBvdXRTcGVjRmxhZ3MgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZV9jb25maWcqIG91dENvbmZpZyA9IE5VTEwpIGNvbnN0OwotCi0gICAgaW5saW5lIHNzaXplX3QgZ2V0UmVzb3VyY2UoY29uc3QgUmVzVGFibGVfcmVmJiByZXMsIFJlc192YWx1ZSogb3V0VmFsdWUsCi0gICAgICAgICAgICB1aW50MzJfdCogb3V0U3BlY0ZsYWdzPU5VTEwpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIGdldFJlc291cmNlKHJlcy5pZGVudCwgb3V0VmFsdWUsIGZhbHNlLCAwLCBvdXRTcGVjRmxhZ3MsIE5VTEwpOwotICAgIH0KLQotICAgIHNzaXplX3QgcmVzb2x2ZVJlZmVyZW5jZShSZXNfdmFsdWUqIGluT3V0VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgYmxvY2tJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIG91dExhc3RSZWYgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogaW5vdXRUeXBlU3BlY0ZsYWdzID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnKiBvdXRDb25maWcgPSBOVUxMKSBjb25zdDsKLQotICAgIGVudW0gewotICAgICAgICBUTVBfQlVGRkVSX1NJWkUgPSAxNgotICAgIH07Ci0gICAgY29uc3QgY2hhcjE2X3QqIHZhbHVlVG9TdHJpbmcoY29uc3QgUmVzX3ZhbHVlKiB2YWx1ZSwgc2l6ZV90IHN0cmluZ0Jsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIxNl90IHRtcEJ1ZmZlcltUTVBfQlVGRkVSX1NJWkVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogb3V0TGVuKTsKLQotICAgIHN0cnVjdCBiYWdfZW50cnkgewotICAgICAgICBzc2l6ZV90IHN0cmluZ0Jsb2NrOwotICAgICAgICBSZXNUYWJsZV9tYXAgbWFwOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSB0aGUgYmFnIG9mIGEgcmVzb3VyY2UuICBJZiB0aGUgcmVzb3J1Y2UgaXMgZm91bmQsIHJldHVybnMgdGhlCi0gICAgICogbnVtYmVyIG9mIGJhZ3MgaXQgY29udGFpbnMgYW5kICdvdXRCYWcnIHBvaW50cyB0byBhbiBhcnJheSBvZiB0aGVpcgotICAgICAqIHZhbHVlcy4gIElmIG5vdCBmb3VuZCwgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlzIHJldHVybmVkLgotICAgICAqCi0gICAgICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gLWRvZXMtIGRvIHJlZmVyZW5jZSB0cmF2ZXJzYWwgb2YgdGhlIGJhZyBkYXRhLgotICAgICAqCi0gICAgICogQHBhcmFtIHJlc0lEIFRoZSBkZXNpcmVkIHJlc291cmNlIGlkZW50aWZpZXIuCi0gICAgICogQHBhcmFtIG91dEJhZyBGaWxsZWQgaW5tIHdpdGggYSBwb2ludGVyIHRvIHRoZSBiYWcgbWFwcGluZ3MuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHNzaXplX3QgRWl0aGVyIGEgPj0gMCBiYWcgY291bnQgb2YgbmVnYXRpdmUgZXJyb3IgY29kZS4KLSAgICAgKi8KLSAgICBzc2l6ZV90IGxvY2tCYWcodWludDMyX3QgcmVzSUQsIGNvbnN0IGJhZ19lbnRyeSoqIG91dEJhZykgY29uc3Q7Ci0KLSAgICB2b2lkIHVubG9ja0JhZyhjb25zdCBiYWdfZW50cnkqIGJhZykgY29uc3Q7Ci0KLSAgICB2b2lkIGxvY2soKSBjb25zdDsKLQotICAgIHNzaXplX3QgZ2V0QmFnTG9ja2VkKHVpbnQzMl90IHJlc0lELCBjb25zdCBiYWdfZW50cnkqKiBvdXRCYWcsCi0gICAgICAgICAgICB1aW50MzJfdCogb3V0VHlwZVNwZWNGbGFncz1OVUxMKSBjb25zdDsKLQotICAgIHZvaWQgdW5sb2NrKCkgY29uc3Q7Ci0KLSAgICBjbGFzcyBUaGVtZSB7Ci0gICAgcHVibGljOgotICAgICAgICBUaGVtZShjb25zdCBSZXNUYWJsZSYgdGFibGUpOwotICAgICAgICB+VGhlbWUoKTsKLQotICAgICAgICBpbmxpbmUgY29uc3QgUmVzVGFibGUmIGdldFJlc1RhYmxlKCkgY29uc3QgeyByZXR1cm4gbVRhYmxlOyB9Ci0KLSAgICAgICAgc3RhdHVzX3QgYXBwbHlTdHlsZSh1aW50MzJfdCByZXNJRCwgYm9vbCBmb3JjZT1mYWxzZSk7Ci0gICAgICAgIHN0YXR1c190IHNldFRvKGNvbnN0IFRoZW1lJiBvdGhlcik7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHJpZXZlIGEgdmFsdWUgaW4gdGhlIHRoZW1lLiAgSWYgdGhlIHRoZW1lIGRlZmluZXMgdGhpcwotICAgICAgICAgKiB2YWx1ZSwgcmV0dXJucyBhIHZhbHVlID49IDAgaW5kaWNhdGluZyB0aGUgdGFibGUgaXQgaXMgaW4KLSAgICAgICAgICogKGZvciB1c2Ugd2l0aCBnZXRUYWJsZVN0cmluZ0Jsb2NrKCkgYW5kIGdldFRhYmxlQ29va2llKSBhbmQKLSAgICAgICAgICogZmlsbHMgaW4gJ291dFZhbHVlJy4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yCi0gICAgICAgICAqIGNvZGUuCi0gICAgICAgICAqCi0gICAgICAgICAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGRvIHJlZmVyZW5jZSB0cmF2ZXJzYWwuICBJZiB5b3Ugd2FudAotICAgICAgICAgKiB0byBmb2xsb3cgcmVmZXJlbmNlcyB0byBvdGhlciByZXNvdXJjZXMgdG8gZ2V0IHRoZSAicmVhbCIgdmFsdWUgdG8KLSAgICAgICAgICogdXNlLCB5b3UgbmVlZCB0byBjYWxsIHJlc29sdmVSZWZlcmVuY2UoKSBhZnRlciB0aGlzIGZ1bmN0aW9uLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gcmVzSUQgQSByZXNvdXJjZSBpZGVudGlmaWVyIG5hbWluZyB0aGUgZGVzaXJlZCB0aGVtZQotICAgICAgICAgKiAgICAgICAgICAgICAgYXR0cmlidXRlLgotICAgICAgICAgKiBAcGFyYW0gb3V0VmFsdWUgRmlsbGVkIGluIHdpdGggdGhlIHRoZW1lIHZhbHVlIHRoYXQgd2FzCi0gICAgICAgICAqICAgICAgICAgICAgICAgICBmb3VuZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBzc2l6ZV90IEVpdGhlciBhID49IDAgdGFibGUgaW5kZXggb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgotICAgICAgICAgKi8KLSAgICAgICAgc3NpemVfdCBnZXRBdHRyaWJ1dGUodWludDMyX3QgcmVzSUQsIFJlc192YWx1ZSogb3V0VmFsdWUsCi0gICAgICAgICAgICAgICAgdWludDMyX3QqIG91dFR5cGVTcGVjRmxhZ3MgPSBOVUxMKSBjb25zdDsKLQotICAgICAgICAvKioKLSAgICAgICAgICogVGhpcyBpcyBsaWtlIFJlc1RhYmxlOjpyZXNvbHZlUmVmZXJlbmNlKCksIGJ1dCBhbHNvIHRha2VzCi0gICAgICAgICAqIGNhcmUgb2YgcmVzb2x2aW5nIGF0dHJpYnV0ZSByZWZlcmVuY2VzIHRvIHRoZSB0aGVtZS4KLSAgICAgICAgICovCi0gICAgICAgIHNzaXplX3QgcmVzb2x2ZUF0dHJpYnV0ZVJlZmVyZW5jZShSZXNfdmFsdWUqIGluT3V0VmFsdWUsCi0gICAgICAgICAgICAgICAgc3NpemVfdCBibG9ja0luZGV4LCB1aW50MzJfdCogb3V0TGFzdFJlZiA9IE5VTEwsCi0gICAgICAgICAgICAgICAgdWludDMyX3QqIGlub3V0VHlwZVNwZWNGbGFncyA9IE5VTEwsCi0gICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnKiBpbm91dENvbmZpZyA9IE5VTEwpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgZHVtcFRvTG9nKCkgY29uc3Q7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFRoZW1lKGNvbnN0IFRoZW1lJik7Ci0gICAgICAgIFRoZW1lJiBvcGVyYXRvcj0oY29uc3QgVGhlbWUmKTsKLQotICAgICAgICBzdHJ1Y3QgdGhlbWVfZW50cnkgewotICAgICAgICAgICAgc3NpemVfdCBzdHJpbmdCbG9jazsKLSAgICAgICAgICAgIHVpbnQzMl90IHR5cGVTcGVjRmxhZ3M7Ci0gICAgICAgICAgICBSZXNfdmFsdWUgdmFsdWU7Ci0gICAgICAgIH07Ci0gICAgICAgIHN0cnVjdCB0eXBlX2luZm8gewotICAgICAgICAgICAgc2l6ZV90IG51bUVudHJpZXM7Ci0gICAgICAgICAgICB0aGVtZV9lbnRyeSogZW50cmllczsKLSAgICAgICAgfTsKLSAgICAgICAgc3RydWN0IHBhY2thZ2VfaW5mbyB7Ci0gICAgICAgICAgICBzaXplX3QgbnVtVHlwZXM7Ci0gICAgICAgICAgICB0eXBlX2luZm8gdHlwZXNbXTsKLSAgICAgICAgfTsKLQotICAgICAgICB2b2lkIGZyZWVfcGFja2FnZShwYWNrYWdlX2luZm8qIHBpKTsKLSAgICAgICAgcGFja2FnZV9pbmZvKiBjb3B5X3BhY2thZ2UocGFja2FnZV9pbmZvKiBwaSk7Ci0KLSAgICAgICAgY29uc3QgUmVzVGFibGUmIG1UYWJsZTsKLSAgICAgICAgcGFja2FnZV9pbmZvKiAgIG1QYWNrYWdlc1tSZXNfTUFYUEFDS0FHRV07Ci0gICAgfTsKLQotICAgIHZvaWQgc2V0UGFyYW1ldGVycyhjb25zdCBSZXNUYWJsZV9jb25maWcqIHBhcmFtcyk7Ci0gICAgdm9pZCBnZXRQYXJhbWV0ZXJzKFJlc1RhYmxlX2NvbmZpZyogcGFyYW1zKSBjb25zdDsKLQotICAgIC8vIFJldHJpZXZlIGFuIGlkZW50aWZpZXIgKHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gZ2V0UmVzb3VyY2UpCi0gICAgLy8gZm9yIGEgZ2l2ZW4gcmVzb3VyY2UgbmFtZS4gIFRoZSAnbmFtZScgY2FuIGJlIGZ1bGx5IHF1YWxpZmllZAotICAgIC8vICg8cGFja2FnZT46PHR5cGU+LjxiYXNlbmFtZT4pIG9yIHRoZSBwYWNrYWdlIG9yIHR5cGUgY29tcG9uZW50cwotICAgIC8vIGNhbiBiZSBkcm9wcGVkIGlmIGRlZmF1bHQgdmFsdWVzIGFyZSBzdXBwbGllZCBoZXJlLgotICAgIC8vCi0gICAgLy8gUmV0dXJucyAwIGlmIG5vIHN1Y2ggcmVzb3VyY2Ugd2FzIGZvdW5kLCBlbHNlIGEgdmFsaWQgcmVzb3VyY2UgSUQuCi0gICAgdWludDMyX3QgaWRlbnRpZmllckZvck5hbWUoY29uc3QgY2hhcjE2X3QqIG5hbWUsIHNpemVfdCBuYW1lTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiB0eXBlID0gMCwgc2l6ZV90IHR5cGVMZW4gPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBkZWZQYWNrYWdlID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGVmUGFja2FnZUxlbiA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIG91dFR5cGVTcGVjRmxhZ3MgPSBOVUxMKSBjb25zdDsKLQotICAgIHN0YXRpYyBib29sIGV4cGFuZFJlc291cmNlUmVmKGNvbnN0IHVpbnQxNl90KiByZWZTdHIsIHNpemVfdCByZWZMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYqIG91dFBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYqIG91dFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYqIG91dE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlR5cGUgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2KiBkZWZQYWNrYWdlID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogb3V0RXJyb3JNc2cgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIG91dFB1YmxpY09ubHkgPSBOVUxMKTsKLQotICAgIHN0YXRpYyBib29sIHN0cmluZ1RvSW50KGNvbnN0IGNoYXIxNl90KiBzLCBzaXplX3QgbGVuLCBSZXNfdmFsdWUqIG91dFZhbHVlKTsKLSAgICBzdGF0aWMgYm9vbCBzdHJpbmdUb0Zsb2F0KGNvbnN0IGNoYXIxNl90KiBzLCBzaXplX3QgbGVuLCBSZXNfdmFsdWUqIG91dFZhbHVlKTsKLQotICAgIC8vIFVzZWQgd2l0aCBzdHJpbmdUb1ZhbHVlLgotICAgIGNsYXNzIEFjY2Vzc29yCi0gICAgewotICAgIHB1YmxpYzoKLSAgICAgICAgaW5saW5lIHZpcnR1YWwgfkFjY2Vzc29yKCkgeyB9Ci0KLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBnZXRDdXN0b21SZXNvdXJjZShjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGdldEN1c3RvbVJlc291cmNlV2l0aENyZWF0aW9uKGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgY3JlYXRlSWZOZWVkZWQgPSBmYWxzZSkgPSAwOwotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGdldFJlbWFwcGVkUGFja2FnZSh1aW50MzJfdCBvcmlnUGFja2FnZSkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0QXR0cmlidXRlVHlwZSh1aW50MzJfdCBhdHRySUQsIHVpbnQzMl90KiBvdXRUeXBlKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRBdHRyaWJ1dGVNaW4odWludDMyX3QgYXR0cklELCB1aW50MzJfdCogb3V0TWluKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRBdHRyaWJ1dGVNYXgodWludDMyX3QgYXR0cklELCB1aW50MzJfdCogb3V0TWF4KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRBdHRyaWJ1dGVFbnVtKHVpbnQzMl90IGF0dHJJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIG5hbWUsIHNpemVfdCBuYW1lTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNfdmFsdWUqIG91dFZhbHVlKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRBdHRyaWJ1dGVGbGFncyh1aW50MzJfdCBhdHRySUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogbmFtZSwgc2l6ZV90IG5hbWVMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNfdmFsdWUqIG91dFZhbHVlKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZ2V0QXR0cmlidXRlTDEwTih1aW50MzJfdCBhdHRySUQpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGdldExvY2FsaXphdGlvblNldHRpbmcoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXBvcnRFcnJvcih2b2lkKiBhY2Nlc3NvckNvb2tpZSwgY29uc3QgY2hhciogZm10LCAuLi4pID0gMDsKLSAgICB9OwotCi0gICAgLy8gQ29udmVydCBhIHN0cmluZyB0byBhIHJlc291cmNlIHZhbHVlLiAgSGFuZGxlcyBzdGFuZGFyZCAiQHJlcyIsCi0gICAgLy8gIiNjb2xvciIsICIxMjMiLCBhbmQgIjB4MWJkIiB0eXBlczsgcGVyZm9ybXMgZXNjYXBpbmcgb2Ygc3RyaW5ncy4KLSAgICAvLyBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHBsYWNlZCBpbiAnb3V0VmFsdWUnOyBpZiBpdCBpcyBhIHN0cmluZyB0eXBlLAotICAgIC8vICdvdXRTdHJpbmcnIHJlY2VpdmVzIHRoZSBzdHJpbmcuICBJZiAnYXR0cklEJyBpcyBzdXBwbGllZCwgdGhlIHZhbHVlIGlzCi0gICAgLy8gdHlwZSBjaGVja2VkIGFnYWluc3QgdGhpcyBhdHRyaWJ1dGUgYW5kIGl0IGlzIHVzZWQgdG8gcGVyZm9ybSBlbnVtCi0gICAgLy8gZXZhbHVhdGlvbi4gIElmICdhY2NjZXNzb3InIGlzIHN1cHBsaWVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gYXR0ZW1wdCB0bwotICAgIC8vIHJlc29sdmUgcmVzb3VyY2VzIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoaXMgUmVzVGFibGUuICBJZiAnYXR0clR5cGUnIGlzCi0gICAgLy8gc3VwcGxpZWQsIHRoZSB2YWx1ZSB3aWxsIGJlIHR5cGUgY2hlY2tlZCBmb3IgdGhpcyBmb3JtYXQgaWYgJ2F0dHJJRCcKLSAgICAvLyBpcyBub3Qgc3VwcGxpZWQgb3IgZm91bmQuCi0gICAgYm9vbCBzdHJpbmdUb1ZhbHVlKFJlc192YWx1ZSogb3V0VmFsdWUsIFN0cmluZzE2KiBvdXRTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBzLCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZXNlcnZlU3BhY2VzLCBib29sIGNvZXJjZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGF0dHJJRCA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2KiBkZWZUeXBlID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlBhY2thZ2UgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NvciogYWNjZXNzb3IgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhY2Nlc3NvckNvb2tpZSA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGF0dHJUeXBlID0gUmVzVGFibGVfbWFwOjpUWVBFX0FOWSwKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmZvcmNlUHJpdmF0ZSA9IHRydWUpIGNvbnN0OwotCi0gICAgLy8gUGVyZm9ybSBwcm9jZXNzaW5nIG9mIGVzY2FwZXMgYW5kIHF1b3RlcyBpbiBhIHN0cmluZy4KLSAgICBzdGF0aWMgYm9vbCBjb2xsZWN0U3RyaW5nKFN0cmluZzE2KiBvdXRTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogcywgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlc2VydmVTcGFjZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogb3V0RXJyb3JNc2cgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmQgPSBmYWxzZSk7Ci0KLSAgICBzaXplX3QgZ2V0QmFzZVBhY2thZ2VDb3VudCgpIGNvbnN0OwotICAgIGNvbnN0IGNoYXIxNl90KiBnZXRCYXNlUGFja2FnZU5hbWUoc2l6ZV90IGlkeCkgY29uc3Q7Ci0gICAgdWludDMyX3QgZ2V0QmFzZVBhY2thZ2VJZChzaXplX3QgaWR4KSBjb25zdDsKLQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHJlc291cmNlIHRhYmxlcyB0aGF0IHRoZSBvYmplY3QgY29udGFpbnMuCi0gICAgc2l6ZV90IGdldFRhYmxlQ291bnQoKSBjb25zdDsKLSAgICAvLyBSZXR1cm4gdGhlIHZhbHVlcyBzdHJpbmcgcG9vbCBmb3IgdGhlIHJlc291cmNlIHRhYmxlIGF0IHRoZSBnaXZlbgotICAgIC8vIGluZGV4LiAgVGhpcyBzdHJpbmcgcG9vbCBjb250YWlucyBhbGwgb2YgdGhlIHN0cmluZ3MgZm9yIHZhbHVlcwotICAgIC8vIGNvbnRhaW5lZCBpbiB0aGUgcmVzb3VyY2UgdGFibGUgLS0gdGhhdCBpcyB0aGUgaXRlbSB2YWx1ZXMgdGhlbXNlbHZlcywKLSAgICAvLyBidXQgbm90IHRoZSBuYW1lcyB0aGVpciBlbnRyaWVzIG9yIHR5cGVzLgotICAgIGNvbnN0IFJlc1N0cmluZ1Bvb2wqIGdldFRhYmxlU3RyaW5nQmxvY2soc2l6ZV90IGluZGV4KSBjb25zdDsKLSAgICAvLyBSZXR1cm4gdW5pcXVlIGNvb2tpZSBpZGVudGlmaWVyIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2UgdGFibGUuCi0gICAgdm9pZCogZ2V0VGFibGVDb29raWUoc2l6ZV90IGluZGV4KSBjb25zdDsKLQotICAgIC8vIFJldHVybiB0aGUgY29uZmlndXJhdGlvbnMgKFJlc1RhYmxlX2NvbmZpZykgdGhhdCB3ZSBrbm93IGFib3V0Ci0gICAgdm9pZCBnZXRDb25maWd1cmF0aW9ucyhWZWN0b3I8UmVzVGFibGVfY29uZmlnPiogY29uZmlncykgY29uc3Q7Ci0KLSAgICB2b2lkIGdldExvY2FsZXMoVmVjdG9yPFN0cmluZzg+KiBsb2NhbGVzKSBjb25zdDsKLQotICAgIC8vIEdlbmVyYXRlIGFuIGlkbWFwLgotICAgIC8vCi0gICAgLy8gUmV0dXJuIHZhbHVlOiBvbiBzdWNjZXNzOiBOT19FUlJPUjsgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlLWluZwotICAgIC8vIG91dERhdGEgKHVzaW5nIGZyZWUoMykpLiBPbiBmYWlsdXJlLCBhbnkgc3RhdHVzX3QgdmFsdWUgb3RoZXIgdGhhbgotICAgIC8vIE5PX0VSUk9SOyB0aGUgY2FsbGVyIHNob3VsZCBub3QgZnJlZSBvdXREYXRhLgotICAgIHN0YXR1c190IGNyZWF0ZUlkbWFwKGNvbnN0IFJlc1RhYmxlJiBvdmVybGF5LCB1aW50MzJfdCBvcmlnaW5hbENyYywgdWludDMyX3Qgb3ZlcmxheUNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogb3V0RGF0YSwgc2l6ZV90KiBvdXRTaXplKSBjb25zdDsKLQotICAgIGVudW0gewotICAgICAgICBJRE1BUF9IRUFERVJfU0laRV9CWVRFUyA9IDMgKiBzaXplb2YodWludDMyX3QpLAotICAgIH07Ci0gICAgLy8gUmV0cmlldmUgaWRtYXAgbWV0YS1kYXRhLgotICAgIC8vCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IHJlcXVpcmVzIHRoZSBpZG1hcCBoZWFkZXIgKHRoZSBmaXJzdAotICAgIC8vIElETUFQX0hFQURFUl9TSVpFX0JZVEVTKSBieXRlcyBvZiBhbiBpZG1hcCBmaWxlLgotICAgIHN0YXRpYyBib29sIGdldElkbWFwSW5mbyhjb25zdCB2b2lkKiBpZG1hcCwgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiBwT3JpZ2luYWxDcmMsIHVpbnQzMl90KiBwT3ZlcmxheUNyYyk7Ci0KLSAgICB2b2lkIHByaW50KGJvb2wgaW5jbFZhbHVlcykgY29uc3Q7Ci0gICAgc3RhdGljIFN0cmluZzggbm9ybWFsaXplRm9yT3V0cHV0KGNvbnN0IGNoYXIqIGlucHV0KTsKLQotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgSGVhZGVyOwotICAgIHN0cnVjdCBUeXBlOwotICAgIHN0cnVjdCBQYWNrYWdlOwotICAgIHN0cnVjdCBQYWNrYWdlR3JvdXA7Ci0gICAgc3RydWN0IGJhZ19zZXQ7Ci0KLSAgICBzdGF0dXNfdCBhZGQoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIHZvaWQqIGNvb2tpZSwKLSAgICAgICAgICAgICAgICAgQXNzZXQqIGFzc2V0LCBib29sIGNvcHlEYXRhLCBjb25zdCBBc3NldCogaWRtYXApOwotCi0gICAgc3NpemVfdCBnZXRSZXNvdXJjZVBhY2thZ2VJbmRleCh1aW50MzJfdCByZXNJRCkgY29uc3Q7Ci0gICAgc3NpemVfdCBnZXRFbnRyeSgKLSAgICAgICAgY29uc3QgUGFja2FnZSogcGFja2FnZSwgaW50IHR5cGVJbmRleCwgaW50IGVudHJ5SW5kZXgsCi0gICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogY29uZmlnLAotICAgICAgICBjb25zdCBSZXNUYWJsZV90eXBlKiogb3V0VHlwZSwgY29uc3QgUmVzVGFibGVfZW50cnkqKiBvdXRFbnRyeSwKLSAgICAgICAgY29uc3QgVHlwZSoqIG91dFR5cGVDbGFzcykgY29uc3Q7Ci0gICAgc3RhdHVzX3QgcGFyc2VQYWNrYWdlKAotICAgICAgICBjb25zdCBSZXNUYWJsZV9wYWNrYWdlKiBjb25zdCBwa2csIGNvbnN0IEhlYWRlciogY29uc3QgaGVhZGVyLCB1aW50MzJfdCBpZG1hcF9pZCk7Ci0KLSAgICB2b2lkIHByaW50X3ZhbHVlKGNvbnN0IFBhY2thZ2UqIHBrZywgY29uc3QgUmVzX3ZhbHVlJiB2YWx1ZSkgY29uc3Q7Ci0gICAgCi0gICAgbXV0YWJsZSBNdXRleCAgICAgICAgICAgICAgIG1Mb2NrOwotCi0gICAgc3RhdHVzX3QgICAgICAgICAgICAgICAgICAgIG1FcnJvcjsKLQotICAgIFJlc1RhYmxlX2NvbmZpZyAgICAgICAgICAgICBtUGFyYW1zOwotCi0gICAgLy8gQXJyYXkgb2YgYWxsIHJlc291cmNlIHRhYmxlcy4KLSAgICBWZWN0b3I8SGVhZGVyKj4gICAgICAgICAgICAgbUhlYWRlcnM7Ci0KLSAgICAvLyBBcnJheSBvZiBwYWNrYWdlcyBpbiBhbGwgcmVzb3VyY2UgdGFibGVzLgotICAgIFZlY3RvcjxQYWNrYWdlR3JvdXAqPiAgICAgICBtUGFja2FnZUdyb3VwczsKLQotICAgIC8vIE1hcHBpbmcgZnJvbSByZXNvdXJjZSBwYWNrYWdlIElEcyB0byBpbmRpY2VzIGludG8gdGhlIGludGVybmFsCi0gICAgLy8gcGFja2FnZSBhcnJheS4KLSAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgbVBhY2thZ2VNYXBbMjU2XTsKLX07Ci0KLX0gICAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gX0xJQlNfVVRJTFNfUkVTT1VSQ0VfVFlQRVNfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hbmRyb2lkZncvU3RyZWFtaW5nWmlwSW5mbGF0ZXIuaCBiL2luY2x1ZGUvYW5kcm9pZGZ3L1N0cmVhbWluZ1ppcEluZmxhdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhY2U1ZDUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hbmRyb2lkZncvU3RyZWFtaW5nWmlwSW5mbGF0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIF9fTElCU19TVFJFQU1JTkdaSVBJTkZMQVRFUl9ICi0jZGVmaW5lIF9fTElCU19TVFJFQU1JTkdaSVBJTkZMQVRFUl9ICi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPHpsaWIuaD4KLQotI2luY2x1ZGUgPHV0aWxzL0NvbXBhdC5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWNsYXNzIFN0cmVhbWluZ1ppcEluZmxhdGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IElOUFVUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBPVVRQVVRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDsKLQotICAgIC8vIEZsYXZvciB0aGF0IHBhZ2VzIGluIHRoZSBjb21wcmVzc2VkIGRhdGEgZnJvbSBhIGZkCi0gICAgU3RyZWFtaW5nWmlwSW5mbGF0ZXIoaW50IGZkLCBvZmY2NF90IGNvbXBEYXRhU3RhcnQsIHNpemVfdCB1bmNvbXBTaXplLCBzaXplX3QgY29tcFNpemUpOwotCi0gICAgLy8gRmxhdm9yIHRoYXQgZ2V0cyB0aGUgY29tcHJlc3NlZCBkYXRhIGZyb20gYW4gaW4tbWVtb3J5IGJ1ZmZlcgotICAgIFN0cmVhbWluZ1ppcEluZmxhdGVyKGNsYXNzIEZpbGVNYXAqIGRhdGFNYXAsIHNpemVfdCB1bmNvbXBTaXplKTsKLQotICAgIH5TdHJlYW1pbmdaaXBJbmZsYXRlcigpOwotCi0gICAgLy8gcmVhZCAnY291bnQnIGJ5dGVzIG9mIHVuY29tcHJlc3NlZCBkYXRhIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uICBvdXRCdWYgbWF5Ci0gICAgLy8gYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSB0aGUgZGF0YSBpcyBjb25zdW1lZCBhbmQgZGlzY2FyZGVkLgotICAgIHNzaXplX3QgcmVhZCh2b2lkKiBvdXRCdWYsIHNpemVfdCBjb3VudCk7Ci0KLSAgICAvLyBzZWVraW5nIGJhY2t3YXJkcyByZXF1aXJlcyB1bmNvbXByZXNzaW5nIGZvbSB0aGUgYmVnaW5uaW5nLCBzbyBpcyB2ZXJ5Ci0gICAgLy8gZXhwZW5zaXZlLiAgc2Vla2luZyBmb3J3YXJkcyBvbmx5IHJlcXVpcmVzIHVuY29tcHJlc3NpbmcgZnJvbSB0aGUgY3VycmVudAotICAgIC8vIHBvc2l0aW9uIHRvIHRoZSBkZXN0aW5hdGlvbi4KLSAgICBvZmY2NF90IHNlZWtBYnNvbHV0ZShvZmY2NF90IGFic29sdXRlSW5wdXRQb3NpdGlvbik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBpbml0SW5mbGF0ZVN0YXRlKCk7Ci0gICAgaW50IHJlYWROZXh0Q2h1bmsoKTsKLQotICAgIC8vIHdoZXJlIHRvIGZpbmQgdGhlIHVuY29tcHJlc3NlZCBkYXRhCi0gICAgaW50IG1GZDsKLSAgICBvZmY2NF90IG1JbkZpbGVTdGFydDsgICAgICAgICAvLyB3aGVyZSB0aGUgY29tcHJlc3NlZCBkYXRhIGxpdmVzIGluIHRoZSBmaWxlCi0gICAgY2xhc3MgRmlsZU1hcCogbURhdGFNYXA7Ci0KLSAgICB6X3N0cmVhbSBtSW5mbGF0ZVN0YXRlOwotICAgIGJvb2wgbVN0cmVhbU5lZWRzSW5pdDsKLQotICAgIC8vIG91dHB1dCBpbnZhcmlhbnRzIGZvciB0aGlzIGFzc2V0Ci0gICAgdWludDhfdCogbU91dEJ1ZjsgICAgICAgICAgIC8vIG91dHB1dCBidWYgZm9yIGRlY29tcHJlc3NlZCBieXRlcwotICAgIHNpemVfdCBtT3V0QnVmU2l6ZTsgICAgICAgICAvLyBhbGxvY2F0ZWQgc2l6ZSBvZiBtT3V0QnVmCi0gICAgc2l6ZV90IG1PdXRUb3RhbFNpemU7ICAgICAgIC8vIHRvdGFsIHVuY29tcHJlc3NlZCBzaXplIG9mIHRoZSBibG9iCi0KLSAgICAvLyBjdXJyZW50IG91dHB1dCBzdGF0ZSBib29ra2VlcGluZwotICAgIG9mZjY0X3QgbU91dEN1clBvc2l0aW9uOyAgICAgIC8vIGN1cnJlbnQgcG9zaXRpb24gaW4gdG90YWwgb2Zmc2V0Ci0gICAgc2l6ZV90IG1PdXRMYXN0RGVjb2RlZDsgICAgIC8vIGxhc3QgZGVjb2RlZCBieXRlICsgMSBpbiBtT3V0YnVmCi0gICAgc2l6ZV90IG1PdXREZWxpdmVyYWJsZTsgICAgIC8vIG5leHQgdW5kZWxpdmVyZWQgYnl0ZSBvZiBkZWNvZGVkIG91dHB1dCBpbiBtT3V0QnVmCi0KLSAgICAvLyBpbnB1dCBpbnZhcmlhbnRzCi0gICAgdWludDhfdCogbUluQnVmOwotICAgIHNpemVfdCBtSW5CdWZTaXplOyAgICAgICAgICAvLyBhbGxvY2F0ZWQgc2l6ZSBvZiBtSW5CdWY7Ci0gICAgc2l6ZV90IG1JblRvdGFsU2l6ZTsgICAgICAgIC8vIHRvdGFsIHNpemUgb2YgY29tcHJlc3NlZCBkYXRhIGZvciB0aGlzIGJsb2IKLQotICAgIC8vIGlucHV0IHN0YXRlIGJvb2trZWVwaW5nCi0gICAgc2l6ZV90IG1Jbk5leHRDaHVua09mZnNldDsgIC8vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGJsb2IgYXQgd2hpY2ggdGhlIG5leHQgaW5wdXQgY2h1bmsgbGllcwotICAgIC8vIHRoZSB6X3N0cmVhbSBjb250YWlucyBzdGF0ZSBhYm91dCBpbnB1dCBibG9jayBjb25zdW1wdGlvbgotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYW5kcm9pZGZ3L1ppcEZpbGVSTy5oIGIvaW5jbHVkZS9hbmRyb2lkZncvWmlwRmlsZVJPLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNWJlMTIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hbmRyb2lkZncvWmlwRmlsZVJPLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qCi0gKiBSZWFkLW9ubHkgYWNjZXNzIHRvIFppcCBhcmNoaXZlcywgd2l0aCBtaW5pbWFsIGhlYXAgYWxsb2NhdGlvbi4KLSAqCi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIG1vcmUtY29tcGxldGUgWmlwRmlsZSBjbGFzcywgYnV0IG5vIGF0dGVtcHQKLSAqIGhhcyBiZWVuIG1hZGUgdG8gbWFrZSB0aGVtIGludGVyY2hhbmdlYWJsZS4gIFRoaXMgY2xhc3Mgb3BlcmF0ZXMgdW5kZXIKLSAqIGEgdmVyeSBkaWZmZXJlbnQgc2V0IG9mIGFzc3VtcHRpb25zIGFuZCBjb25zdHJhaW50cy4KLSAqCi0gKiBPbmUgc3VjaCBhc3N1bXB0aW9uIGlzIHRoYXQgaWYgeW91J3JlIGdldHRpbmcgZmlsZSBkZXNjcmlwdG9ycyBmb3IKLSAqIHVzZSB3aXRoIHRoaXMgY2xhc3MgYXMgYSBjaGlsZCBvZiBhIGZvcmsoKSBvcGVyYXRpb24sIHlvdSBtdXN0IGJlIG9uCi0gKiBhIHByZWFkKCkgdG8gZ3VhcmFudGVlIGNvcnJlY3Qgb3BlcmF0aW9uLiBUaGlzIGlzIGJlY2F1c2UgcHJlYWQoKSBjYW4KLSAqIGF0b21pY2FsbHkgcmVhZCBhdCBhIGZpbGUgb2Zmc2V0IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgYSBsb2NrIGFyb3VuZCBhbgotICogbHNlZWsoKSArIHJlYWQoKSBwYWlyLgotICovCi0jaWZuZGVmIF9fTElCU19aSVBGSUxFUk9fSAotI2RlZmluZSBfX0xJQlNfWklQRklMRVJPX0gKLQotI2luY2x1ZGUgPHV0aWxzL0NvbXBhdC5oPgotI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotI2luY2x1ZGUgPHV0aWxzL0ZpbGVNYXAuaD4KLSNpbmNsdWRlIDx1dGlscy90aHJlYWRzLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLQotdHlwZWRlZiB2b2lkKiBaaXBBcmNoaXZlSGFuZGxlOwotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLS8qCi0gKiBUcml2aWFsIHR5cGVkZWYgdG8gZW5zdXJlIHRoYXQgWmlwRW50cnlSTyBpcyBub3QgdHJlYXRlZCBhcyBhIHNpbXBsZQotICogaW50ZWdlci4gIFdlIHVzZSBOVUxMIHRvIGluZGljYXRlIGFuIGludmFsaWQgdmFsdWUuCi0gKi8KLXR5cGVkZWYgdm9pZCogWmlwRW50cnlSTzsKLQotLyoKLSAqIE9wZW4gYSBaaXAgYXJjaGl2ZSBmb3IgcmVhZGluZy4KLSAqCi0gKiBJbXBsZW1lbnRlZCBhcyBhIHRoaW4gd3JhcHBlciBvdmVyIHN5c3RlbS9jb3JlL2xpYnppcGFyY2hpdmUuCi0gKgotICogIm9wZW4iIGFuZCAiZmluZCBlbnRyeSBieSBuYW1lIiBhcmUgZmFzdCBvcGVyYXRpb25zIGFuZCB1c2UgYXMgbGl0dGxlCi0gKiBtZW1vcnkgYXMgcG9zc2libGUuCi0gKgotICogV2UgYWxzbyBzdXBwb3J0IGZhc3QgaXRlcmF0aW9uIG92ZXIgYWxsIGVudHJpZXMgaW4gdGhlIGZpbGUgKHdpdGggYQotICogc3RhYmxlLCBidXQgdW5zcGVjaWZpZWQgaXRlcmF0aW9uIG9yZGVyKS4KLSAqCi0gKiBOT1RFOiBJZiB0aGlzIGlzIHVzZWQgb24gZmlsZSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSBhIGZvcmsoKSBvcGVyYXRpb24sCi0gKiB5b3UgbXVzdCBiZSBvbiBhIHBsYXRmb3JtIHRoYXQgaW1wbGVtZW50cyBwcmVhZCgpIHRvIGd1YXJhbnRlZSBjb3JyZWN0bmVzcwotICogb24gdGhlIHNoYXJlZCBmaWxlIGRlc2NyaXB0b3JzLgotICovCi1jbGFzcyBaaXBGaWxlUk8gewotcHVibGljOgotICAgIC8qIFppcCBjb21wcmVzc2lvbiBtZXRob2RzIHdlIHN1cHBvcnQgKi8KLSAgICBlbnVtIHsKLSAgICAgICAga0NvbXByZXNzU3RvcmVkICAgICA9IDAsICAgICAgICAvLyBubyBjb21wcmVzc2lvbgotICAgICAgICBrQ29tcHJlc3NEZWZsYXRlZCAgID0gOCwgICAgICAgIC8vIHN0YW5kYXJkIGRlZmxhdGUKLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBPcGVuIGFuIGFyY2hpdmUuCi0gICAgICovCi0gICAgc3RhdGljIFppcEZpbGVSTyogb3Blbihjb25zdCBjaGFyKiB6aXBGaWxlTmFtZSk7Ci0KLSAgICAvKgotICAgICAqIEZpbmQgYW4gZW50cnksIGJ5IG5hbWUuICBSZXR1cm5zIHRoZSBlbnRyeSBpZGVudGlmaWVyLCBvciBOVUxMIGlmCi0gICAgICogbm90IGZvdW5kLgotICAgICAqLwotICAgIFppcEVudHJ5Uk8gZmluZEVudHJ5QnlOYW1lKGNvbnN0IGNoYXIqIGVudHJ5TmFtZSkgY29uc3Q7Ci0KLQotICAgIC8qCi0gICAgICogU3RhcnQgaXRlcmF0aW5nIG92ZXIgdGhlIGxpc3Qgb2YgZW50cmllcyBpbiB0aGUgemlwIGZpbGUuIFJlcXVpcmVzCi0gICAgICogYSBtYXRjaGluZyBjYWxsIHRvIGVuZEl0ZXJhdGlvbiB3aXRoIHRoZSBzYW1lIGNvb2tpZS4KLSAgICAgKi8KLSAgICBib29sIHN0YXJ0SXRlcmF0aW9uKHZvaWQqKiBjb29raWUpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRoZSBuZXh0IGVudHJ5IGluIGl0ZXJhdGlvbiBvcmRlciwgb3IgTlVMTCBpZiB0aGVyZSBhcmUgbm8gbW9yZQotICAgICAqIGVudHJpZXMgaW4gdGhpcyBhcmNoaXZlLgotICAgICAqLwotICAgIFppcEVudHJ5Uk8gbmV4dEVudHJ5KHZvaWQqIGNvb2tpZSk7Ci0KLSAgICB2b2lkIGVuZEl0ZXJhdGlvbih2b2lkKiBjb29raWUpOwotCi0gICAgdm9pZCByZWxlYXNlRW50cnkoWmlwRW50cnlSTyBlbnRyeSkgY29uc3Q7Ci0KLSAgICAvKgotICAgICAqIFJldHVybiB0aGUgI29mIGVudHJpZXMgaW4gdGhlIFppcCBhcmNoaXZlLgotICAgICAqLwotICAgIGludCBnZXROdW1FbnRyaWVzKCk7Ci0KLSAgICAvKgotICAgICAqIENvcHkgdGhlIGZpbGVuYW1lIGludG8gdGhlIHN1cHBsaWVkIGJ1ZmZlci4gIFJldHVybnMgMCBvbiBzdWNjZXNzLAotICAgICAqIC0xIGlmICJlbnRyeSIgaXMgaW52YWxpZCwgb3IgdGhlIGZpbGVuYW1lIGxlbmd0aCBpZiBpdCBkaWRuJ3QgZml0LiAgVGhlCi0gICAgICogbGVuZ3RoLCBhbmQgdGhlIHJldHVybmVkIHN0cmluZywgaW5jbHVkZSB0aGUgbnVsbC10ZXJtaW5hdGlvbi4KLSAgICAgKi8KLSAgICBpbnQgZ2V0RW50cnlGaWxlTmFtZShaaXBFbnRyeVJPIGVudHJ5LCBjaGFyKiBidWZmZXIsIGludCBidWZMZW4pIGNvbnN0OwotCi0gICAgLyoKLSAgICAgKiBHZXQgdGhlIHZpdGFsIHN0YXRzIGZvciBhbiBlbnRyeS4gIFBhc3MgaW4gTlVMTCBwb2ludGVycyBmb3IgYW55dGhpbmcKLSAgICAgKiB5b3UgZG9uJ3QgbmVlZC4KLSAgICAgKgotICAgICAqICIqcE9mZnNldCIgaG9sZHMgdGhlIFppcCBmaWxlIG9mZnNldCBvZiB0aGUgZW50cnkncyBkYXRhLgotICAgICAqCi0gICAgICogUmV0dXJucyAiZmFsc2UiIGlmICJlbnRyeSIgaXMgYm9ndXMgb3IgaWYgdGhlIGRhdGEgaW4gdGhlIFppcCBmaWxlCi0gICAgICogYXBwZWFycyB0byBiZSBiYWQuCi0gICAgICovCi0gICAgYm9vbCBnZXRFbnRyeUluZm8oWmlwRW50cnlSTyBlbnRyeSwgaW50KiBwTWV0aG9kLCBzaXplX3QqIHBVbmNvbXBMZW4sCi0gICAgICAgIHNpemVfdCogcENvbXBMZW4sIG9mZjY0X3QqIHBPZmZzZXQsIGxvbmcqIHBNb2RXaGVuLCBsb25nKiBwQ3JjMzIpIGNvbnN0OwotCi0gICAgLyoKLSAgICAgKiBDcmVhdGUgYSBuZXcgRmlsZU1hcCBvYmplY3QgdGhhdCBtYXBzIGEgc3Vic2V0IG9mIHRoZSBhcmNoaXZlLiAgRm9yCi0gICAgICogYW4gdW5jb21wcmVzc2VkIGVudHJ5IHRoaXMgZWZmZWN0aXZlbHkgcHJvdmlkZXMgYSBwb2ludGVyIHRvIHRoZQotICAgICAqIGFjdHVhbCBkYXRhLCBmb3IgYSBjb21wcmVzc2VkIGVudHJ5IHRoaXMgcHJvdmlkZXMgdGhlIGlucHV0IGJ1ZmZlcgotICAgICAqIGZvciBpbmZsYXRlKCkuCi0gICAgICovCi0gICAgRmlsZU1hcCogY3JlYXRlRW50cnlGaWxlTWFwKFppcEVudHJ5Uk8gZW50cnkpIGNvbnN0OwotCi0gICAgLyoKLSAgICAgKiBVbmNvbXByZXNzIHRoZSBkYXRhIGludG8gYSBidWZmZXIuICBEZXBlbmRpbmcgb24gdGhlIGNvbXByZXNzaW9uCi0gICAgICogZm9ybWF0LCB0aGlzIGlzIGVpdGhlciBhbiAiaW5mbGF0ZSIgb3BlcmF0aW9uIG9yIGEgbWVtY3B5LgotICAgICAqCi0gICAgICogVXNlICJ1bmNvbXBMZW4iIGZyb20gZ2V0RW50cnlJbmZvKCkgdG8gZGV0ZXJtaW5lIHRoZSByZXF1aXJlZAotICAgICAqIGJ1ZmZlciBzaXplLgotICAgICAqCi0gICAgICogUmV0dXJucyAidHJ1ZSIgb24gc3VjY2Vzcy4KLSAgICAgKi8KLSAgICBib29sIHVuY29tcHJlc3NFbnRyeShaaXBFbnRyeVJPIGVudHJ5LCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKSBjb25zdDsKLQotICAgIC8qCi0gICAgICogVW5jb21wcmVzcyB0aGUgZGF0YSB0byBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4KLSAgICAgKi8KLSAgICBib29sIHVuY29tcHJlc3NFbnRyeShaaXBFbnRyeVJPIGVudHJ5LCBpbnQgZmQpIGNvbnN0OwotCi0gICAgflppcEZpbGVSTygpOwotCi1wcml2YXRlOgotICAgIC8qIHRoZXNlIGFyZSBwcml2YXRlIGFuZCBub3QgZGVmaW5lZCAqLwotICAgIFppcEZpbGVSTyhjb25zdCBaaXBGaWxlUk8mIHNyYyk7Ci0gICAgWmlwRmlsZVJPJiBvcGVyYXRvcj0oY29uc3QgWmlwRmlsZVJPJiBzcmMpOwotCi0gICAgWmlwRmlsZVJPKFppcEFyY2hpdmVIYW5kbGUgaGFuZGxlLCBjaGFyKiBmaWxlTmFtZSkgOiBtSGFuZGxlKGhhbmRsZSksCi0gICAgICAgIG1GaWxlTmFtZShmaWxlTmFtZSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgWmlwQXJjaGl2ZUhhbmRsZSBtSGFuZGxlOwotICAgIGNoYXIqIG1GaWxlTmFtZTsKLX07Ci0KLX07IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvKl9fTElCU19aSVBGSUxFUk9fSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FuZHJvaWRmdy9aaXBVdGlscy5oIGIvaW5jbHVkZS9hbmRyb2lkZncvWmlwVXRpbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJlYTI1YS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FuZHJvaWRmdy9aaXBVdGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8vCi0vLyBNaXNjZWxsYW5lb3VzIHppcC9nemlwIHV0aWxpdHkgZnVuY3Rpb25zLgotLy8KLSNpZm5kZWYgX19MSUJTX1pJUFVUSUxTX0gKLSNkZWZpbmUgX19MSUJTX1pJUFVUSUxTX0gKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLS8qCi0gKiBDb250YWluZXIgY2xhc3MgZm9yIHV0aWxpdHkgZnVuY3Rpb25zLCBwcmltYXJpbHkgZm9yIG5hbWVzcGFjZSByZWFzb25zLgotICovCi1jbGFzcyBaaXBVdGlscyB7Ci1wdWJsaWM6Ci0gICAgLyoKLSAgICAgKiBHZW5lcmFsIHV0aWxpdHkgZnVuY3Rpb24gZm9yIHVuY29tcHJlc3NpbmcgImRlZmxhdGUiIGRhdGEgZnJvbSBhIGZpbGUKLSAgICAgKiB0byBhIGJ1ZmZlci4KLSAgICAgKi8KLSAgICBzdGF0aWMgYm9vbCBpbmZsYXRlVG9CdWZmZXIoRklMRSogZnAsIHZvaWQqIGJ1ZiwgbG9uZyB1bmNvbXByZXNzZWRMZW4sCi0gICAgICAgIGxvbmcgY29tcHJlc3NlZExlbik7Ci0gICAgc3RhdGljIGJvb2wgaW5mbGF0ZVRvQnVmZmVyKGludCBmZCwgdm9pZCogYnVmLCBsb25nIHVuY29tcHJlc3NlZExlbiwKLSAgICAgICAgbG9uZyBjb21wcmVzc2VkTGVuKTsKLSAgICBzdGF0aWMgYm9vbCBpbmZsYXRlVG9CdWZmZXIodm9pZCAqaW4sIHZvaWQqIGJ1ZiwgbG9uZyB1bmNvbXByZXNzZWRMZW4sCi0gICAgICAgIGxvbmcgY29tcHJlc3NlZExlbik7Ci0KLSAgICAvKgotICAgICAqIFNvbWVkYXkgd2UgbWlnaHQgd2FudCB0byBtYWtlIHRoaXMgZ2VuZXJpYyBhbmQgaGFuZGxlIGJ6aXAyICIuYnoyIgotICAgICAqIGZpbGVzIHRvby4KLSAgICAgKgotICAgICAqIFdlIGNvdWxkIGRlY2xhcmUgZ3ppcCB0byBiZSBhIHN1Yi1jbGFzcyBvZiB6aXAgdGhhdCBoYXMgZXhhY3RseQotICAgICAqIG9uZSBhbHdheXMtY29tcHJlc3NlZCBlbnRyeSwgYnV0IHdlIGN1cnJlbnRseSB3YW50IHRvIHRyZWF0IFppcAotICAgICAqIGFuZCBnemlwIGFzIGRpc3RpbmN0LCBzbyB0aGVyZSdzIG5vIHZhbHVlLgotICAgICAqCi0gICAgICogVGhlIHpsaWIgbGlicmFyeSBoYXMgc29tZSBnemlwIHV0aWxpdGllcywgYnV0IGl0IGhhcyBubyBpbnRlcmZhY2UKLSAgICAgKiBmb3IgZXh0cmFjdGluZyB0aGUgdW5jb21wcmVzc2VkIGxlbmd0aCBvZiB0aGUgZmlsZSAoeW91IGRvICpub3QqCi0gICAgICogd2FudCB0byBnenNlZWsgdG8gdGhlIGVuZCkuCi0gICAgICoKLSAgICAgKiBQYXNzIGluIGEgc2Vla2VkIGZpbGUgcG9pbnRlciBmb3IgdGhlIGd6aXAgZmlsZS4gIElmIHRoaXMgaXMgYSBnemlwCi0gICAgICogZmlsZSwgd2Ugc2V0IG91ciByZXR1cm4gdmFsdWVzIGFwcHJvcHJpYXRlbHkgYW5kIHJldHVybiAidHJ1ZSIgd2l0aAotICAgICAqIHRoZSBmaWxlIHNlZWtlZCB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YS4KLSAgICAgKi8KLSAgICBzdGF0aWMgYm9vbCBleGFtaW5lR3ppcChGSUxFKiBmcCwgaW50KiBwQ29tcHJlc3Npb25NZXRob2QsCi0gICAgICAgIGxvbmcqIHBVbmNvbXByZXNzZWRMZW4sIGxvbmcqIHBDb21wcmVzc2VkTGVuLCB1bnNpZ25lZCBsb25nKiBwQ1JDMzIpOwotCi0gICAgLyoKLSAgICAgKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGNvbnZlcnQgWklQJ3MgdGltZSBmb3JtYXQgdG8gYSB0aW1lc3BlYyBzdHJ1Y3QuCi0gICAgICovCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHppcFRpbWVUb1RpbWVzcGVjKGxvbmcgd2hlbiwgc3RydWN0IHRtKiB0aW1lc3BlYykgewotICAgICAgICBjb25zdCBsb25nIGRhdGUgPSB3aGVuID4+IDE2OwotICAgICAgICB0aW1lc3BlYy0+dG1feWVhciA9ICgoZGF0ZSA+PiA5KSAmIDB4N0YpICsgODA7IC8vIFppcCBpcyB5ZWFycyBzaW5jZSAxOTgwCi0gICAgICAgIHRpbWVzcGVjLT50bV9tb24gPSAoZGF0ZSA+PiA1KSAmIDB4MEY7Ci0gICAgICAgIHRpbWVzcGVjLT50bV9tZGF5ID0gZGF0ZSAmIDB4MUY7Ci0KLSAgICAgICAgdGltZXNwZWMtPnRtX2hvdXIgPSAod2hlbiA+PiAxMSkgJiAweDFGOwotICAgICAgICB0aW1lc3BlYy0+dG1fbWluID0gKHdoZW4gPj4gNSkgJiAweDNGOwotICAgICAgICB0aW1lc3BlYy0+dG1fc2VjID0gKHdoZW4gJiAweDFGKSA8PCAxOwotICAgIH0KLXByaXZhdGU6Ci0gICAgWmlwVXRpbHMoKSB7fQotICAgIH5aaXBVdGlscygpIHt9Ci19OwotCi19OyAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLypfX0xJQlNfWklQVVRJTFNfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FuZHJvaWRmdy9taXNjLmggYi9pbmNsdWRlL2FuZHJvaWRmdy9taXNjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNWEwZTIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hbmRyb2lkZncvbWlzYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotLy8KLS8vIEhhbmR5IHV0aWxpdHkgZnVuY3Rpb25zIGFuZCBwb3J0YWJpbGl0eSBjb2RlLgotLy8KLSNpZm5kZWYgX0xJQlNfQU5EUk9JRF9GV19NSVNDX0gKLSNkZWZpbmUgX0xJQlNfQU5EUk9JRF9GV19NSVNDX0gKLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi0vKgotICogU29tZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIGZpbGVzLiAgVGhlc2UgY291bGQgYmUgbWFkZQotICogcGFydCBvZiBhICJGaWxlIiBjbGFzcy4KLSAqLwotdHlwZWRlZiBlbnVtIEZpbGVUeXBlIHsKLSAgICBrRmlsZVR5cGVVbmtub3duID0gMCwKLSAgICBrRmlsZVR5cGVOb25leGlzdGVudCwgICAgICAgLy8gaS5lLiBFTk9FTlQKLSAgICBrRmlsZVR5cGVSZWd1bGFyLAotICAgIGtGaWxlVHlwZURpcmVjdG9yeSwKLSAgICBrRmlsZVR5cGVDaGFyRGV2LAotICAgIGtGaWxlVHlwZUJsb2NrRGV2LAotICAgIGtGaWxlVHlwZUZpZm8sCi0gICAga0ZpbGVUeXBlU3ltbGluaywKLSAgICBrRmlsZVR5cGVTb2NrZXQsCi19IEZpbGVUeXBlOwotLyogZ2V0IHRoZSBmaWxlJ3MgdHlwZTsgZm9sbG93cyBzeW1saW5rcyAqLwotRmlsZVR5cGUgZ2V0RmlsZVR5cGUoY29uc3QgY2hhciogZmlsZU5hbWUpOwotLyogZ2V0IHRoZSBmaWxlJ3MgbW9kaWZpY2F0aW9uIGRhdGU7IHJldHVybnMgLTEgdy9lcnJubyBzZXQgb24gZmFpbHVyZSAqLwotdGltZV90IGdldEZpbGVNb2REYXRlKGNvbnN0IGNoYXIqIGZpbGVOYW1lKTsKLQotfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIF9MSUJTX0FORFJPSURfRldfTUlTQ19ICmRpZmYgLS1naXQgYS9rZXlzdG9yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvQW5kcm9pZEtleVBhaXJHZW5lcmF0b3IuamF2YSBiL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9BbmRyb2lkS2V5UGFpckdlbmVyYXRvci5qYXZhCmluZGV4IDFhYjBhZWIuLjQ1OGE0NmMgMTAwNjQ0Ci0tLSBhL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9BbmRyb2lkS2V5UGFpckdlbmVyYXRvci5qYXZhCisrKyBiL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9BbmRyb2lkS2V5UGFpckdlbmVyYXRvci5qYXZhCkBAIC0zNSw3ICszNSw2IEBACiBpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZTsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LnNwZWMuQWxnb3JpdGhtUGFyYW1ldGVyU3BlYzsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LnNwZWMuRFNBUGFyYW1ldGVyU3BlYzsKLWltcG9ydCBqYXZhLnNlY3VyaXR5LnNwZWMuRUNQYXJhbWV0ZXJTcGVjOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuc3BlYy5JbnZhbGlkS2V5U3BlY0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LnNwZWMuUlNBS2V5R2VuUGFyYW1ldGVyU3BlYzsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LnNwZWMuWDUwOUVuY29kZWRLZXlTcGVjOwpkaWZmIC0tZ2l0IGEva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0NyZWRlbnRpYWxzLmphdmEgYi9rZXlzdG9yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvQ3JlZGVudGlhbHMuamF2YQppbmRleCA3Njc2NDdjLi5hZjc2ZDlkIDEwMDY0NAotLS0gYS9rZXlzdG9yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvQ3JlZGVudGlhbHMuamF2YQorKysgYi9rZXlzdG9yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvQ3JlZGVudGlhbHMuamF2YQpAQCAtMjcsNyArMjcsNiBAQAogaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKIGltcG9ydCBqYXZhLmlvLlJlYWRlcjsKIGltcG9ydCBqYXZhLmlvLldyaXRlcjsKZGlmZiAtLWdpdCBhL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9LZXlDaGFpbkFsaWFzQ2FsbGJhY2suamF2YSBiL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9LZXlDaGFpbkFsaWFzQ2FsbGJhY2suamF2YQppbmRleCBmYzllNjRiLi4yNTAwODYzIDEwMDY0NAotLS0gYS9rZXlzdG9yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvS2V5Q2hhaW5BbGlhc0NhbGxiYWNrLmphdmEKKysrIGIva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0tleUNoYWluQWxpYXNDYWxsYmFjay5qYXZhCkBAIC0xNSwxMCArMTUsNiBAQAogICovCiBwYWNrYWdlIGFuZHJvaWQuc2VjdXJpdHk7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGphdmEuc2VjdXJpdHkuUHJpdmF0ZUtleTsKLWltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlOwotCiAvKioKICAqIFRoZSBLZXlDaGFpbkFsaWFzQ2FsbGJhY2sgaXMgdGhlIGNhbGxiYWNrIGZvciB7QGxpbmsKICAqIEtleUNoYWluI2Nob29zZVByaXZhdGVLZXlBbGlhc30uCmRpZmYgLS1naXQgYS9rZXlzdG9yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvS2V5U3RvcmVQYXJhbWV0ZXIuamF2YSBiL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9LZXlTdG9yZVBhcmFtZXRlci5qYXZhCmluZGV4IDYyMWE2MDUuLmI3MWVmYzQgMTAwNjQ0Ci0tLSBhL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9LZXlTdG9yZVBhcmFtZXRlci5qYXZhCisrKyBiL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9LZXlTdG9yZVBhcmFtZXRlci5qYXZhCkBAIC0xNywxMiArMTcsOSBAQAogcGFja2FnZSBhbmRyb2lkLnNlY3VyaXR5OwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5zZWN1cml0eS5LZXlQYWlyR2VuZXJhdG9yU3BlYy5CdWlsZGVyOwogCiBpbXBvcnQgamF2YS5zZWN1cml0eS5LZXlQYWlyR2VuZXJhdG9yOwotaW1wb3J0IGphdmEuc2VjdXJpdHkuUHJpdmF0ZUtleTsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LktleVN0b3JlLlByb3RlY3Rpb25QYXJhbWV0ZXI7Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlOwogCiAvKioKICAqIFRoaXMgcHJvdmlkZXMgdGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGZvcgpkaWZmIC0tZ2l0IGEva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L1N5c3RlbUtleVN0b3JlLmphdmEgYi9rZXlzdG9yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvU3lzdGVtS2V5U3RvcmUuamF2YQppbmRleCBiY2E4ZjY4Li5lMDdlYWEyIDEwMDY0NAotLS0gYS9rZXlzdG9yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvU3lzdGVtS2V5U3RvcmUuamF2YQorKysgYi9rZXlzdG9yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvU3lzdGVtS2V5U3RvcmUuamF2YQpAQCAtMTgsMTAgKzE4LDggQEAKIAogaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5GaWxlVXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvbGlicy9hbmRyb2lkZncvQW5kcm9pZC5tayBiL2xpYnMvYW5kcm9pZGZ3L0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMTE5N2UuLjAwMDAwMDAKLS0tIGEvbGlicy9hbmRyb2lkZncvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLUxPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQotCi0jIGxpYmFuZHJvaWRmdyBpcyBwYXJ0aWFsbHkgYnVpbHQgZm9yIHRoZSBob3N0ICh1c2VkIGJ5IG9iYnRvb2wgYW5kIG90aGVycykKLSMgVGhlc2UgZmlsZXMgYXJlIGNvbW1vbiB0byBob3N0IGFuZCB0YXJnZXQgYnVpbGRzLgotCi1jb21tb25Tb3VyY2VzIDo9IFwKLSAgICBBc3NldC5jcHAgXAotICAgIEFzc2V0RGlyLmNwcCBcCi0gICAgQXNzZXRNYW5hZ2VyLmNwcCBcCi0gICAgbWlzYy5jcHAgXAotICAgIE9iYkZpbGUuY3BwIFwKLSAgICBSZXNvdXJjZVR5cGVzLmNwcCBcCi0gICAgU3RyZWFtaW5nWmlwSW5mbGF0ZXIuY3BwIFwKLSAgICBaaXBGaWxlUk8uY3BwIFwKLSAgICBaaXBVdGlscy5jcHAKLQotZGV2aWNlU291cmNlcyA6PSBcCi0gICAgJChjb21tb25Tb3VyY2VzKSBcCi0gICAgQmFja3VwRGF0YS5jcHAgXAotICAgIEJhY2t1cEhlbHBlcnMuY3BwIFwKLSAgICBDdXJzb3JXaW5kb3cuY3BwCi0KLWhvc3RTb3VyY2VzIDo9IFwKLSAgICAkKGNvbW1vblNvdXJjZXMpCi0KLSMgRm9yIHRoZSBob3N0Ci0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVM6PSAkKGhvc3RTb3VyY2VzKQotCi1MT0NBTF9NT0RVTEU6PSBsaWJhbmRyb2lkZncKLQotTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKLQotTE9DQUxfQ0ZMQUdTICs9IC1EU1RBVElDX0FORFJPSURGV19GT1JfVE9PTFMKLQotTE9DQUxfQ19JTkNMVURFUyA6PSBcCi0JZXh0ZXJuYWwvemxpYgotCi1MT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmxvZyBsaWJ6aXBhcmNoaXZlLWhvc3QgbGlidXRpbHMKLQotaW5jbHVkZSAkKEJVSUxEX0hPU1RfU1RBVElDX0xJQlJBUlkpCi0KLQotIyBGb3IgdGhlIGRldmljZQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTOj0gJChkZXZpY2VTb3VyY2VzKQotCi1MT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKLQlsaWJiaW5kZXIgXAotCWxpYmxvZyBcCi0JbGliY3V0aWxzIFwKLQlsaWJ1dGlscyBcCi0JbGliegotCi1MT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYnppcGFyY2hpdmUKLQotTE9DQUxfQ19JTkNMVURFUyA6PSBcCi0gICAgZXh0ZXJuYWwvaWN1NGMvY29tbW9uIFwKLSAgICBleHRlcm5hbC96bGliIFwKLSAgICBzeXN0ZW0vY29yZS9pbmNsdWRlCi0KLUxPQ0FMX01PRFVMRTo9IGxpYmFuZHJvaWRmdwotCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAotCi1pbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCi0KLQotIyBJbmNsdWRlIHN1YmRpcmVjdG9yeSBtYWtlZmlsZXMKLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSMgSWYgd2UncmUgYnVpbGRpbmcgd2l0aCBPTkVfU0hPVF9NQUtFRklMRSAobW0sIG1tbSksIHRoZW4gd2hhdCB0aGUgZnJhbWV3b3JrCi0jIHRlYW0gcmVhbGx5IHdhbnRzIGlzIHRvIGJ1aWxkIHRoZSBzdHVmZiBkZWZpbmVkIGJ5IHRoaXMgbWFrZWZpbGUuCi1pZmVxICgsJChPTkVfU0hPVF9NQUtFRklMRSkpCi1pbmNsdWRlICQoY2FsbCBmaXJzdC1tYWtlZmlsZXMtdW5kZXIsJChMT0NBTF9QQVRIKSkKLWVuZGlmCmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9Bc3NldC5jcHAgYi9saWJzL2FuZHJvaWRmdy9Bc3NldC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNmNjMzguLjAwMDAwMDAKLS0tIGEvbGlicy9hbmRyb2lkZncvQXNzZXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLwotLy8gUHJvdmlkZSBhY2Nlc3MgdG8gYSByZWFkLW9ubHkgYXNzZXQuCi0vLwotCi0jZGVmaW5lIExPR19UQUcgImFzc2V0IgotLy8jZGVmaW5lIE5ERUJVRyAwCi0KLSNpbmNsdWRlIDxhbmRyb2lkZncvQXNzZXQuaD4KLSNpbmNsdWRlIDxhbmRyb2lkZncvU3RyZWFtaW5nWmlwSW5mbGF0ZXIuaD4KLSNpbmNsdWRlIDxhbmRyb2lkZncvWmlwRmlsZVJPLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZGZ3L1ppcFV0aWxzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvQXRvbWljLmg+Ci0jaW5jbHVkZSA8dXRpbHMvRmlsZU1hcC5oPgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxtZW1vcnkuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotI2lmbmRlZiBPX0JJTkFSWQotIyBkZWZpbmUgT19CSU5BUlkgMAotI2VuZGlmCi0KLXN0YXRpYyBNdXRleCBnQXNzZXRMb2NrOwotc3RhdGljIGludDMyX3QgZ0NvdW50ID0gMDsKLXN0YXRpYyBBc3NldCogZ0hlYWQgPSBOVUxMOwotc3RhdGljIEFzc2V0KiBnVGFpbCA9IE5VTEw7Ci0KLWludDMyX3QgQXNzZXQ6OmdldEdsb2JhbENvdW50KCkKLXsKLSAgICBBdXRvTXV0ZXggX2woZ0Fzc2V0TG9jayk7Ci0gICAgcmV0dXJuIGdDb3VudDsKLX0KLQotU3RyaW5nOCBBc3NldDo6Z2V0QXNzZXRBbGxvY2F0aW9ucygpCi17Ci0gICAgQXV0b011dGV4IF9sKGdBc3NldExvY2spOwotICAgIFN0cmluZzggcmVzOwotICAgIEFzc2V0KiBjdXIgPSBnSGVhZDsKLSAgICB3aGlsZSAoY3VyICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKGN1ci0+aXNBbGxvY2F0ZWQoKSkgewotICAgICAgICAgICAgcmVzLmFwcGVuZCgiICAgICIpOwotICAgICAgICAgICAgcmVzLmFwcGVuZChjdXItPmdldEFzc2V0U291cmNlKCkpOwotICAgICAgICAgICAgb2ZmNjRfdCBzaXplID0gKGN1ci0+Z2V0TGVuZ3RoKCkrNTEyKS8xMDI0OwotICAgICAgICAgICAgY2hhciBidWZbNjRdOwotICAgICAgICAgICAgc3ByaW50ZihidWYsICI6ICVkS1xuIiwgKGludClzaXplKTsKLSAgICAgICAgICAgIHJlcy5hcHBlbmQoYnVmKTsKLSAgICAgICAgfQotICAgICAgICBjdXIgPSBjdXItPm1OZXh0OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzOwotfQotCi1Bc3NldDo6QXNzZXQodm9pZCkKLSAgICA6IG1BY2Nlc3NNb2RlKEFDQ0VTU19VTktOT1dOKQotewotICAgIEF1dG9NdXRleCBfbChnQXNzZXRMb2NrKTsKLSAgICBnQ291bnQrKzsKLSAgICBtTmV4dCA9IG1QcmV2ID0gTlVMTDsKLSAgICBpZiAoZ1RhaWwgPT0gTlVMTCkgewotICAgICAgICBnSGVhZCA9IGdUYWlsID0gdGhpczsKLSAgCX0gZWxzZSB7Ci0gIAkgICAgbVByZXYgPSBnVGFpbDsKLSAgCSAgICBnVGFpbC0+bU5leHQgPSB0aGlzOwotICAJICAgIGdUYWlsID0gdGhpczsKLSAgCX0KLSAgICAvL0FMT0dJKCJDcmVhdGluZyBBc3NldCAlcCAjJWRcbiIsIHRoaXMsIGdDb3VudCk7Ci19Ci0KLUFzc2V0Ojp+QXNzZXQodm9pZCkKLXsKLSAgICBBdXRvTXV0ZXggX2woZ0Fzc2V0TG9jayk7Ci0JZ0NvdW50LS07Ci0gICAgaWYgKGdIZWFkID09IHRoaXMpIHsKLSAgICAgICAgZ0hlYWQgPSBtTmV4dDsKLSAgICB9Ci0gICAgaWYgKGdUYWlsID09IHRoaXMpIHsKLSAgICAgICAgZ1RhaWwgPSBtUHJldjsKLSAgICB9Ci0gICAgaWYgKG1OZXh0ICE9IE5VTEwpIHsKLSAgICAgICAgbU5leHQtPm1QcmV2ID0gbVByZXY7Ci0gICAgfQotICAgIGlmIChtUHJldiAhPSBOVUxMKSB7Ci0gICAgICAgIG1QcmV2LT5tTmV4dCA9IG1OZXh0OwotICAgIH0KLSAgICBtTmV4dCA9IG1QcmV2ID0gTlVMTDsKLSAgICAvL0FMT0dJKCJEZXN0cm95aW5nIEFzc2V0IGluICVwICMlZFxuIiwgdGhpcywgZ0NvdW50KTsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIG5ldyBBc3NldCBmcm9tIGEgZmlsZSBvbiBkaXNrLiAgVGhlcmUgaXMgYSBmYWlyIGNoYW5jZSB0aGF0Ci0gKiB0aGUgZmlsZSBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0LgotICoKLSAqIFdlIGNhbiB1c2UgIm1vZGUiIHRvIGRlY2lkZSBob3cgd2Ugd2FudCB0byBnbyBhYm91dCBpdC4KLSAqLwotLypzdGF0aWMqLyBBc3NldCogQXNzZXQ6OmNyZWF0ZUZyb21GaWxlKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBBY2Nlc3NNb2RlIG1vZGUpCi17Ci0gICAgX0ZpbGVBc3NldCogcEFzc2V0OwotICAgIHN0YXR1c190IHJlc3VsdDsKLSAgICBvZmY2NF90IGxlbmd0aDsKLSAgICBpbnQgZmQ7Ci0KLSAgICBmZCA9IG9wZW4oZmlsZU5hbWUsIE9fUkRPTkxZIHwgT19CSU5BUlkpOwotICAgIGlmIChmZCA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyoKLSAgICAgKiBVbmRlciBMaW51eCwgdGhlIGxzZWVrIGZhaWxzIGlmIHdlIGFjdHVhbGx5IG9wZW5lZCBhIGRpcmVjdG9yeS4gIFRvCi0gICAgICogYmUgY29ycmVjdCB3ZSBzaG91bGQgdGVzdCB0aGUgZmlsZSB0eXBlIGV4cGxpY2l0bHksIGJ1dCBzaW5jZSB3ZQotICAgICAqIGFsd2F5cyBvcGVuIHRoaW5ncyByZWFkLW9ubHkgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyLCBzbyB0aGVyZSdzCi0gICAgICogbm8gdmFsdWUgaW4gaW5jdXJyaW5nIHRoZSBleHRyYSBvdmVyaGVhZCBvZiBhbiBmc3RhdCgpIGNhbGwuCi0gICAgICovCi0gICAgLy8gVE9ETyhrcm9vdCk6IHJlcGxhY2UgdGhpcyB3aXRoIGZzdGF0IGRlc3BpdGUgdGhlIHBsZWEgYWJvdmUuCi0jaWYgMQotICAgIGxlbmd0aCA9IGxzZWVrNjQoZmQsIDAsIFNFRUtfRU5EKTsKLSAgICBpZiAobGVuZ3RoIDwgMCkgewotICAgICAgICA6OmNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgICh2b2lkKSBsc2VlazY0KGZkLCAwLCBTRUVLX1NFVCk7Ci0jZWxzZQotICAgIHN0cnVjdCBzdGF0IHN0OwotICAgIGlmIChmc3RhdChmZCwgJnN0KSA8IDApIHsKLSAgICAgICAgOjpjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmICghU19JU1JFRyhzdC5zdF9tb2RlKSkgewotICAgICAgICA6OmNsb3NlKGZkKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBwQXNzZXQgPSBuZXcgX0ZpbGVBc3NldDsKLSAgICByZXN1bHQgPSBwQXNzZXQtPm9wZW5DaHVuayhmaWxlTmFtZSwgZmQsIDAsIGxlbmd0aCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikgewotICAgICAgICBkZWxldGUgcEFzc2V0OwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBwQXNzZXQtPm1BY2Nlc3NNb2RlID0gbW9kZTsKLSAgICByZXR1cm4gcEFzc2V0OwotfQotCi0KLS8qCi0gKiBDcmVhdGUgYSBuZXcgQXNzZXQgZnJvbSBhIGNvbXByZXNzZWQgZmlsZSBvbiBkaXNrLiAgVGhlcmUgaXMgYSBmYWlyIGNoYW5jZQotICogdGhhdCB0aGUgZmlsZSBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0LgotICoKLSAqIFdlIGN1cnJlbnRseSBzdXBwb3J0IGd6aXAgZmlsZXMuICBXZSBtaWdodCB3YW50IHRvIGhhbmRsZSAuYnoyIHNvbWVkYXkuCi0gKi8KLS8qc3RhdGljKi8gQXNzZXQqIEFzc2V0OjpjcmVhdGVGcm9tQ29tcHJlc3NlZEZpbGUoY29uc3QgY2hhciogZmlsZU5hbWUsCi0gICAgQWNjZXNzTW9kZSBtb2RlKQotewotICAgIF9Db21wcmVzc2VkQXNzZXQqIHBBc3NldDsKLSAgICBzdGF0dXNfdCByZXN1bHQ7Ci0gICAgb2ZmNjRfdCBmaWxlTGVuOwotICAgIGJvb2wgc2NhblJlc3VsdDsKLSAgICBsb25nIG9mZnNldDsKLSAgICBpbnQgbWV0aG9kOwotICAgIGxvbmcgdW5jb21wcmVzc2VkTGVuLCBjb21wcmVzc2VkTGVuOwotICAgIGludCBmZDsKLQotICAgIGZkID0gb3BlbihmaWxlTmFtZSwgT19SRE9OTFkgfCBPX0JJTkFSWSk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBmaWxlTGVuID0gbHNlZWsoZmQsIDAsIFNFRUtfRU5EKTsKLSAgICBpZiAoZmlsZUxlbiA8IDApIHsKLSAgICAgICAgOjpjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICAodm9pZCkgbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsKLQotICAgIC8qIHdhbnQgYnVmZmVyZWQgSS9PIGZvciB0aGUgZmlsZSBzY2FuOyBtdXN0IGR1cCBzbyBmY2xvc2UoKSBpcyBzYWZlICovCi0gICAgRklMRSogZnAgPSBmZG9wZW4oZHVwKGZkKSwgInJiIik7Ci0gICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgOjpjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGxvbmcgY3JjMzI7Ci0gICAgc2NhblJlc3VsdCA9IFppcFV0aWxzOjpleGFtaW5lR3ppcChmcCwgJm1ldGhvZCwgJnVuY29tcHJlc3NlZExlbiwKLSAgICAgICAgICAgICAgICAgICAgJmNvbXByZXNzZWRMZW4sICZjcmMzMik7Ci0gICAgb2Zmc2V0ID0gZnRlbGwoZnApOwotICAgIGZjbG9zZShmcCk7Ci0gICAgaWYgKCFzY2FuUmVzdWx0KSB7Ci0gICAgICAgIEFMT0dEKCJGaWxlICclcycgaXMgbm90IGluIGd6aXAgZm9ybWF0XG4iLCBmaWxlTmFtZSk7Ci0gICAgICAgIDo6Y2xvc2UoZmQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBwQXNzZXQgPSBuZXcgX0NvbXByZXNzZWRBc3NldDsKLSAgICByZXN1bHQgPSBwQXNzZXQtPm9wZW5DaHVuayhmZCwgb2Zmc2V0LCBtZXRob2QsIHVuY29tcHJlc3NlZExlbiwKLSAgICAgICAgICAgICAgICBjb21wcmVzc2VkTGVuKTsKLSAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGRlbGV0ZSBwQXNzZXQ7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHBBc3NldC0+bUFjY2Vzc01vZGUgPSBtb2RlOwotICAgIHJldHVybiBwQXNzZXQ7Ci19Ci0KLQotI2lmIDAKLS8qCi0gKiBDcmVhdGUgYSBuZXcgQXNzZXQgZnJvbSBwYXJ0IG9mIGFuIG9wZW4gZmlsZS4KLSAqLwotLypzdGF0aWMqLyBBc3NldCogQXNzZXQ6OmNyZWF0ZUZyb21GaWxlU2VnbWVudChpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LAotICAgIHNpemVfdCBsZW5ndGgsIEFjY2Vzc01vZGUgbW9kZSkKLXsKLSAgICBfRmlsZUFzc2V0KiBwQXNzZXQ7Ci0gICAgc3RhdHVzX3QgcmVzdWx0OwotCi0gICAgcEFzc2V0ID0gbmV3IF9GaWxlQXNzZXQ7Ci0gICAgcmVzdWx0ID0gcEFzc2V0LT5vcGVuQ2h1bmsoTlVMTCwgZmQsIG9mZnNldCwgbGVuZ3RoKTsKLSAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHBBc3NldC0+bUFjY2Vzc01vZGUgPSBtb2RlOwotICAgIHJldHVybiBwQXNzZXQ7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYSBuZXcgQXNzZXQgZnJvbSBjb21wcmVzc2VkIGRhdGEgaW4gYW4gb3BlbiBmaWxlLgotICovCi0vKnN0YXRpYyovIEFzc2V0KiBBc3NldDo6Y3JlYXRlRnJvbUNvbXByZXNzZWREYXRhKGludCBmZCwgb2ZmNjRfdCBvZmZzZXQsCi0gICAgaW50IGNvbXByZXNzaW9uTWV0aG9kLCBzaXplX3QgdW5jb21wcmVzc2VkTGVuLCBzaXplX3QgY29tcHJlc3NlZExlbiwKLSAgICBBY2Nlc3NNb2RlIG1vZGUpCi17Ci0gICAgX0NvbXByZXNzZWRBc3NldCogcEFzc2V0OwotICAgIHN0YXR1c190IHJlc3VsdDsKLQotICAgIHBBc3NldCA9IG5ldyBfQ29tcHJlc3NlZEFzc2V0OwotICAgIHJlc3VsdCA9IHBBc3NldC0+b3BlbkNodW5rKGZkLCBvZmZzZXQsIGNvbXByZXNzaW9uTWV0aG9kLAotICAgICAgICAgICAgICAgIHVuY29tcHJlc3NlZExlbiwgY29tcHJlc3NlZExlbik7Ci0gICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBwQXNzZXQtPm1BY2Nlc3NNb2RlID0gbW9kZTsKLSAgICByZXR1cm4gcEFzc2V0OwotfQotI2VuZGlmCi0KLS8qCi0gKiBDcmVhdGUgYSBuZXcgQXNzZXQgZnJvbSBhIG1lbW9yeSBtYXBwaW5nLgotICovCi0vKnN0YXRpYyovIEFzc2V0KiBBc3NldDo6Y3JlYXRlRnJvbVVuY29tcHJlc3NlZE1hcChGaWxlTWFwKiBkYXRhTWFwLAotICAgIEFjY2Vzc01vZGUgbW9kZSkKLXsKLSAgICBfRmlsZUFzc2V0KiBwQXNzZXQ7Ci0gICAgc3RhdHVzX3QgcmVzdWx0OwotCi0gICAgcEFzc2V0ID0gbmV3IF9GaWxlQXNzZXQ7Ci0gICAgcmVzdWx0ID0gcEFzc2V0LT5vcGVuQ2h1bmsoZGF0YU1hcCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBwQXNzZXQtPm1BY2Nlc3NNb2RlID0gbW9kZTsKLSAgICByZXR1cm4gcEFzc2V0OwotfQotCi0vKgotICogQ3JlYXRlIGEgbmV3IEFzc2V0IGZyb20gY29tcHJlc3NlZCBkYXRhIGluIGEgbWVtb3J5IG1hcHBpbmcuCi0gKi8KLS8qc3RhdGljKi8gQXNzZXQqIEFzc2V0OjpjcmVhdGVGcm9tQ29tcHJlc3NlZE1hcChGaWxlTWFwKiBkYXRhTWFwLAotICAgIGludCBtZXRob2QsIHNpemVfdCB1bmNvbXByZXNzZWRMZW4sIEFjY2Vzc01vZGUgbW9kZSkKLXsKLSAgICBfQ29tcHJlc3NlZEFzc2V0KiBwQXNzZXQ7Ci0gICAgc3RhdHVzX3QgcmVzdWx0OwotCi0gICAgcEFzc2V0ID0gbmV3IF9Db21wcmVzc2VkQXNzZXQ7Ci0gICAgcmVzdWx0ID0gcEFzc2V0LT5vcGVuQ2h1bmsoZGF0YU1hcCwgbWV0aG9kLCB1bmNvbXByZXNzZWRMZW4pOwotICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcEFzc2V0LT5tQWNjZXNzTW9kZSA9IG1vZGU7Ci0gICAgcmV0dXJuIHBBc3NldDsKLX0KLQotCi0vKgotICogRG8gZ2VuZXJpYyBzZWVrKCkgaG91c2VrZWVwaW5nLiAgUGFzcyBpbiB0aGUgb2Zmc2V0L3doZW5jZSB2YWx1ZXMgZnJvbQotICogdGhlIHNlZWsgcmVxdWVzdCwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBjaHVuayBvZmZzZXQgYW5kIHRoZSBjaHVuawotICogbGVuZ3RoLgotICoKLSAqIFJldHVybnMgdGhlIG5ldyBjaHVuayBvZmZzZXQsIG9yIC0xIGlmIHRoZSBzZWVrIGlzIGlsbGVnYWwuCi0gKi8KLW9mZjY0X3QgQXNzZXQ6OmhhbmRsZVNlZWsob2ZmNjRfdCBvZmZzZXQsIGludCB3aGVuY2UsIG9mZjY0X3QgY3VyUG9zbiwgb2ZmNjRfdCBtYXhQb3NuKQotewotICAgIG9mZjY0X3QgbmV3T2Zmc2V0OwotCi0gICAgc3dpdGNoICh3aGVuY2UpIHsKLSAgICBjYXNlIFNFRUtfU0VUOgotICAgICAgICBuZXdPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VFS19DVVI6Ci0gICAgICAgIG5ld09mZnNldCA9IGN1clBvc24gKyBvZmZzZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VFS19FTkQ6Ci0gICAgICAgIG5ld09mZnNldCA9IG1heFBvc24gKyBvZmZzZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFMT0dXKCJ1bmV4cGVjdGVkIHdoZW5jZSAlZFxuIiwgd2hlbmNlKTsKLSAgICAgICAgLy8gdGhpcyB3YXMgaGFwcGVuaW5nIGR1ZSB0byBhbiBvZmY2NF90IHNpemUgbWlzbWF0Y2gKLSAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIChvZmY2NF90KSAtMTsKLSAgICB9Ci0KLSAgICBpZiAobmV3T2Zmc2V0IDwgMCB8fCBuZXdPZmZzZXQgPiBtYXhQb3NuKSB7Ci0gICAgICAgIEFMT0dXKCJzZWVrIG91dCBvZiByYW5nZTogd2FudCAlbGQsIGVuZD0lbGRcbiIsCi0gICAgICAgICAgICAobG9uZykgbmV3T2Zmc2V0LCAobG9uZykgbWF4UG9zbik7Ci0gICAgICAgIHJldHVybiAob2ZmNjRfdCkgLTE7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld09mZnNldDsKLX0KLQotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgICAgIF9GaWxlQXNzZXQKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLS8qCi0gKiBDb25zdHJ1Y3Rvci4KLSAqLwotX0ZpbGVBc3NldDo6X0ZpbGVBc3NldCh2b2lkKQotICAgIDogbVN0YXJ0KDApLCBtTGVuZ3RoKDApLCBtT2Zmc2V0KDApLCBtRnAoTlVMTCksIG1GaWxlTmFtZShOVUxMKSwgbU1hcChOVUxMKSwgbUJ1ZihOVUxMKQotewotfQotCi0vKgotICogRGVzdHJ1Y3Rvci4gIFJlbGVhc2UgcmVzb3VyY2VzLgotICovCi1fRmlsZUFzc2V0Ojp+X0ZpbGVBc3NldCh2b2lkKQotewotICAgIGNsb3NlKCk7Ci19Ci0KLS8qCi0gKiBPcGVyYXRlIG9uIGEgY2h1bmsgb2YgYW4gdW5jb21wcmVzc2VkIGZpbGUuCi0gKgotICogWmVyby1sZW5ndGggY2h1bmtzIGFyZSBhbGxvd2VkLgotICovCi1zdGF0dXNfdCBfRmlsZUFzc2V0OjpvcGVuQ2h1bmsoY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBmZCwgb2ZmNjRfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgYXNzZXJ0KG1GcCA9PSBOVUxMKTsgICAgLy8gbm8gcmVvcGVuCi0gICAgYXNzZXJ0KG1NYXAgPT0gTlVMTCk7Ci0gICAgYXNzZXJ0KGZkID49IDApOwotICAgIGFzc2VydChvZmZzZXQgPj0gMCk7Ci0KLSAgICAvKgotICAgICAqIFNlZWsgdG8gZW5kIHRvIGdldCBmaWxlIGxlbmd0aC4KLSAgICAgKi8KLSAgICBvZmY2NF90IGZpbGVMZW5ndGg7Ci0gICAgZmlsZUxlbmd0aCA9IGxzZWVrNjQoZmQsIDAsIFNFRUtfRU5EKTsKLSAgICBpZiAoZmlsZUxlbmd0aCA9PSAob2ZmNjRfdCkgLTEpIHsKLSAgICAgICAgLy8gcHJvYmFibHkgYSBiYWQgZmlsZSBkZXNjcmlwdG9yCi0gICAgICAgIEFMT0dEKCJmYWlsZWQgbHNlZWsgKGVycm5vPSVkKVxuIiwgZXJybm8pOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAoKG9mZjY0X3QpIChvZmZzZXQgKyBsZW5ndGgpID4gZmlsZUxlbmd0aCkgewotICAgICAgICBBTE9HRCgic3RhcnQgKCVsZCkgKyBsZW4gKCVsZCkgPiBlbmQgKCVsZClcbiIsCi0gICAgICAgICAgICAobG9uZykgb2Zmc2V0LCAobG9uZykgbGVuZ3RoLCAobG9uZykgZmlsZUxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBCQURfSU5ERVg7Ci0gICAgfQotCi0gICAgLyogYWZ0ZXIgZmRvcGVuLCB0aGUgZmQgd2lsbCBiZSBjbG9zZWQgb24gZmNsb3NlKCkgKi8KLSAgICBtRnAgPSBmZG9wZW4oZmQsICJyYiIpOwotICAgIGlmIChtRnAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0KLSAgICBtU3RhcnQgPSBvZmZzZXQ7Ci0gICAgbUxlbmd0aCA9IGxlbmd0aDsKLSAgICBhc3NlcnQobU9mZnNldCA9PSAwKTsKLQotICAgIC8qIHNlZWsgdGhlIEZJTEUqIHRvIHRoZSBzdGFydCBvZiBjaHVuayAqLwotICAgIGlmIChmc2VlayhtRnAsIG1TdGFydCwgU0VFS19TRVQpICE9IDApIHsKLSAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICB9Ci0KLSAgICBtRmlsZU5hbWUgPSBmaWxlTmFtZSAhPSBOVUxMID8gc3RyZHVwKGZpbGVOYW1lKSA6IE5VTEw7Ci0gICAgCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgotICogQ3JlYXRlIHRoZSBjaHVuayBmcm9tIHRoZSBtYXAuCi0gKi8KLXN0YXR1c190IF9GaWxlQXNzZXQ6Om9wZW5DaHVuayhGaWxlTWFwKiBkYXRhTWFwKQotewotICAgIGFzc2VydChtRnAgPT0gTlVMTCk7ICAgIC8vIG5vIHJlb3BlbgotICAgIGFzc2VydChtTWFwID09IE5VTEwpOwotICAgIGFzc2VydChkYXRhTWFwICE9IE5VTEwpOwotCi0gICAgbU1hcCA9IGRhdGFNYXA7Ci0gICAgbVN0YXJ0ID0gLTE7ICAgICAgICAgICAgLy8gbm90IHVzZWQKLSAgICBtTGVuZ3RoID0gZGF0YU1hcC0+Z2V0RGF0YUxlbmd0aCgpOwotICAgIGFzc2VydChtT2Zmc2V0ID09IDApOwotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgotICogUmVhZCBhIGNodW5rIG9mIGRhdGEuCi0gKi8KLXNzaXplX3QgX0ZpbGVBc3NldDo6cmVhZCh2b2lkKiBidWYsIHNpemVfdCBjb3VudCkKLXsKLSAgICBzaXplX3QgbWF4TGVuOwotICAgIHNpemVfdCBhY3R1YWw7Ci0KLSAgICBhc3NlcnQobU9mZnNldCA+PSAwICYmIG1PZmZzZXQgPD0gbUxlbmd0aCk7Ci0KLSAgICBpZiAoZ2V0QWNjZXNzTW9kZSgpID09IEFDQ0VTU19CVUZGRVIpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogT24gZmlyc3QgYWNjZXNzLCByZWFkIG9yIG1hcCB0aGUgZW50aXJlIGZpbGUuICBUaGUgY2FsbGVyIGhhcwotICAgICAgICAgKiByZXF1ZXN0ZWQgYnVmZmVyIGFjY2VzcywgZWl0aGVyIGJlY2F1c2UgdGhleSdyZSBnb2luZyB0byBiZQotICAgICAgICAgKiB1c2luZyB0aGUgYnVmZmVyIG9yIGJlY2F1c2Ugd2hhdCB0aGV5J3JlIGRvaW5nIGhhcyBhcHByb3ByaWF0ZQotICAgICAgICAgKiBwZXJmb3JtYW5jZSBuZWVkcyBhbmQgYWNjZXNzIHBhdHRlcm5zLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKG1CdWYgPT0gTlVMTCkKLSAgICAgICAgICAgIGdldEJ1ZmZlcihmYWxzZSk7Ci0gICAgfQotCi0gICAgLyogYWRqdXN0IGNvdW50IGlmIHdlJ3JlIG5lYXIgRU9GICovCi0gICAgbWF4TGVuID0gbUxlbmd0aCAtIG1PZmZzZXQ7Ci0gICAgaWYgKGNvdW50ID4gbWF4TGVuKQotICAgICAgICBjb3VudCA9IG1heExlbjsKLQotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1NYXAgIT0gTlVMTCkgewotICAgICAgICAvKiBjb3B5IGZyb20gbWFwcGVkIGFyZWEgKi8KLSAgICAgICAgLy9wcmludGYoIm1hcCByZWFkXG4iKTsKLSAgICAgICAgbWVtY3B5KGJ1ZiwgKGNoYXIqKW1NYXAtPmdldERhdGFQdHIoKSArIG1PZmZzZXQsIGNvdW50KTsKLSAgICAgICAgYWN0dWFsID0gY291bnQ7Ci0gICAgfSBlbHNlIGlmIChtQnVmICE9IE5VTEwpIHsKLSAgICAgICAgLyogY29weSBmcm9tIGJ1ZmZlciAqLwotICAgICAgICAvL3ByaW50ZigiYnVmIHJlYWRcbiIpOwotICAgICAgICBtZW1jcHkoYnVmLCAoY2hhciopbUJ1ZiArIG1PZmZzZXQsIGNvdW50KTsKLSAgICAgICAgYWN0dWFsID0gY291bnQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogcmVhZCBmcm9tIHRoZSBmaWxlICovCi0gICAgICAgIC8vcHJpbnRmKCJmaWxlIHJlYWRcbiIpOwotICAgICAgICBpZiAoZnRlbGwobUZwKSAhPSBtU3RhcnQgKyBtT2Zmc2V0KSB7Ci0gICAgICAgICAgICBBTE9HRSgiSG9zZWQ6ICVsZCAhPSAlbGQrJWxkXG4iLAotICAgICAgICAgICAgICAgIGZ0ZWxsKG1GcCksIChsb25nKSBtU3RhcnQsIChsb25nKSBtT2Zmc2V0KTsKLSAgICAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIHJldHVybnMgMCBvbiBlcnJvciBvciBlb2YuICBXZSBuZWVkIHRvIHVzZSBmZXJyb3IoKSBvciBmZW9mKCkKLSAgICAgICAgICogdG8gdGVsbCB0aGUgZGlmZmVyZW5jZSwgYnV0IHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIHRob3NlIG9uIHRoZQotICAgICAgICAgKiBkZXZpY2UuICBIb3dldmVyLCB3ZSBrbm93IGhvdyBtdWNoIGRhdGEgaXMgKnN1cHBvc2VkKiB0byBiZSBpbiB0aGUKLSAgICAgICAgICogZmlsZSwgc28gaWYgd2UgZG9uJ3QgcmVhZCB0aGUgZnVsbCBhbW91bnQgd2Uga25vdyBzb21ldGhpbmcgaXMKLSAgICAgICAgICogaG9zZWQuCi0gICAgICAgICAqLwotICAgICAgICBhY3R1YWwgPSBmcmVhZChidWYsIDEsIGNvdW50LCBtRnApOwotICAgICAgICBpZiAoYWN0dWFsID09IDApICAgICAgICAvLyBzb21ldGhpbmcgZmFpbGVkIC0tIEkvTyBlcnJvcj8KLSAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICBhc3NlcnQoYWN0dWFsID09IGNvdW50KTsKLSAgICB9Ci0KLSAgICBtT2Zmc2V0ICs9IGFjdHVhbDsKLSAgICByZXR1cm4gYWN0dWFsOwotfQotCi0vKgotICogU2VlayB0byBhIG5ldyBwb3NpdGlvbi4KLSAqLwotb2ZmNjRfdCBfRmlsZUFzc2V0OjpzZWVrKG9mZjY0X3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQotewotICAgIG9mZjY0X3QgbmV3UG9zbjsKLSAgICBvZmY2NF90IGFjdHVhbE9mZnNldDsKLQotICAgIC8vIGNvbXB1dGUgbmV3IHBvc2l0aW9uIHdpdGhpbiBjaHVuawotICAgIG5ld1Bvc24gPSBoYW5kbGVTZWVrKG9mZnNldCwgd2hlbmNlLCBtT2Zmc2V0LCBtTGVuZ3RoKTsKLSAgICBpZiAobmV3UG9zbiA9PSAob2ZmNjRfdCkgLTEpCi0gICAgICAgIHJldHVybiBuZXdQb3NuOwotCi0gICAgYWN0dWFsT2Zmc2V0ID0gbVN0YXJ0ICsgbmV3UG9zbjsKLQotICAgIGlmIChtRnAgIT0gTlVMTCkgewotICAgICAgICBpZiAoZnNlZWsobUZwLCAobG9uZykgYWN0dWFsT2Zmc2V0LCBTRUVLX1NFVCkgIT0gMCkKLSAgICAgICAgICAgIHJldHVybiAob2ZmNjRfdCkgLTE7Ci0gICAgfQotCi0gICAgbU9mZnNldCA9IGFjdHVhbE9mZnNldCAtIG1TdGFydDsKLSAgICByZXR1cm4gbU9mZnNldDsKLX0KLQotLyoKLSAqIENsb3NlIHRoZSBhc3NldC4KLSAqLwotdm9pZCBfRmlsZUFzc2V0OjpjbG9zZSh2b2lkKQotewotICAgIGlmIChtTWFwICE9IE5VTEwpIHsKLSAgICAgICAgbU1hcC0+cmVsZWFzZSgpOwotICAgICAgICBtTWFwID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKG1CdWYgIT0gTlVMTCkgewotICAgICAgICBkZWxldGVbXSBtQnVmOwotICAgICAgICBtQnVmID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUZpbGVOYW1lICE9IE5VTEwpIHsKLSAgICAgICAgZnJlZShtRmlsZU5hbWUpOwotICAgICAgICBtRmlsZU5hbWUgPSBOVUxMOwotICAgIH0KLSAgICAKLSAgICBpZiAobUZwICE9IE5VTEwpIHsKLSAgICAgICAgLy8gY2FuIG9ubHkgYmUgTlVMTCB3aGVuIGNhbGxlZCBmcm9tIGRlc3RydWN0b3IKLSAgICAgICAgLy8gKG90aGVyd2lzZSB3ZSB3b3VsZCBuZXZlciByZXR1cm4gdGhpcyBvYmplY3QpCi0gICAgICAgIGZjbG9zZShtRnApOwotICAgICAgICBtRnAgPSBOVUxMOwotICAgIH0KLX0KLQotLyoKLSAqIFJldHVybiBhIHJlYWQtb25seSBwb2ludGVyIHRvIGEgYnVmZmVyLgotICoKLSAqIFdlIGNhbiBlaXRoZXIgcmVhZCB0aGUgd2hvbGUgdGhpbmcgaW4gb3IgbWFwIHRoZSByZWxldmFudCBwaWVjZSBvZgotICogdGhlIHNvdXJjZSBmaWxlLiAgSWRlYWxseSBhIG1hcCB3b3VsZCBiZSBlc3RhYmxpc2hlZCBhdCBhIGhpZ2hlcgotICogbGV2ZWwgYW5kIHdlJ2QgYmUgdXNpbmcgYSBkaWZmZXJlbnQgb2JqZWN0LCBidXQgd2UgZGlkbid0LCBzbyB3ZQotICogZGVhbCB3aXRoIGl0IGhlcmUuCi0gKi8KLWNvbnN0IHZvaWQqIF9GaWxlQXNzZXQ6OmdldEJ1ZmZlcihib29sIHdvcmRBbGlnbmVkKQotewotICAgIC8qIHN1YnNlcXVlbnQgcmVxdWVzdHMganVzdCB1c2Ugd2hhdCB3ZSBkaWQgcHJldmlvdXNseSAqLwotICAgIGlmIChtQnVmICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBtQnVmOwotICAgIGlmIChtTWFwICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKCF3b3JkQWxpZ25lZCkgewotICAgICAgICAgICAgcmV0dXJuICBtTWFwLT5nZXREYXRhUHRyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVuc3VyZUFsaWdubWVudChtTWFwKTsKLSAgICB9Ci0KLSAgICBhc3NlcnQobUZwICE9IE5VTEwpOwotCi0gICAgaWYgKG1MZW5ndGggPCBrUmVhZFZzTWFwVGhyZXNob2xkKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZjsKLSAgICAgICAgbG9uZyBhbGxvY0xlbjsKLQotICAgICAgICAvKiB6ZXJvLWxlbmd0aCBmaWxlcyBhcmUgYWxsb3dlZDsgbm90IHN1cmUgYWJvdXQgemVyby1sZW4gYWxsb2NzICovCi0gICAgICAgIC8qICh3b3JrcyBmaW5lIHdpdGggZ2NjICsgeDg2bGludXgpICovCi0gICAgICAgIGFsbG9jTGVuID0gbUxlbmd0aDsKLSAgICAgICAgaWYgKG1MZW5ndGggPT0gMCkKLSAgICAgICAgICAgIGFsbG9jTGVuID0gMTsKLQotICAgICAgICBidWYgPSBuZXcgdW5zaWduZWQgY2hhclthbGxvY0xlbl07Ci0gICAgICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICAgICAgQUxPR0UoImFsbG9jIG9mICVsZCBieXRlcyBmYWlsZWRcbiIsIChsb25nKSBhbGxvY0xlbik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIEFMT0dWKCJBc3NldCAlcCBhbGxvY2F0aW5nIGJ1ZmZlciBzaXplICVkIChzbWFsbGVyIHRoYW4gdGhyZXNob2xkKSIsIHRoaXMsIChpbnQpYWxsb2NMZW4pOwotICAgICAgICBpZiAobUxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgIGxvbmcgb2xkUG9zbiA9IGZ0ZWxsKG1GcCk7Ci0gICAgICAgICAgICBmc2VlayhtRnAsIG1TdGFydCwgU0VFS19TRVQpOwotICAgICAgICAgICAgaWYgKGZyZWFkKGJ1ZiwgMSwgbUxlbmd0aCwgbUZwKSAhPSAoc2l6ZV90KSBtTGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgQUxPR0UoImZhaWxlZCByZWFkaW5nICVsZCBieXRlc1xuIiwgKGxvbmcpIG1MZW5ndGgpOwotICAgICAgICAgICAgICAgIGRlbGV0ZVtdIGJ1ZjsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZzZWVrKG1GcCwgb2xkUG9zbiwgU0VFS19TRVQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQUxPR1YoIiBnZXRCdWZmZXI6IGxvYWRlZCBpbnRvIGJ1ZmZlclxuIik7Ci0KLSAgICAgICAgbUJ1ZiA9IGJ1ZjsKLSAgICAgICAgcmV0dXJuIG1CdWY7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRmlsZU1hcCogbWFwOwotCi0gICAgICAgIG1hcCA9IG5ldyBGaWxlTWFwOwotICAgICAgICBpZiAoIW1hcC0+Y3JlYXRlKE5VTEwsIGZpbGVubyhtRnApLCBtU3RhcnQsIG1MZW5ndGgsIHRydWUpKSB7Ci0gICAgICAgICAgICBtYXAtPnJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgQUxPR1YoIiBnZXRCdWZmZXI6IG1hcHBlZFxuIik7Ci0KLSAgICAgICAgbU1hcCA9IG1hcDsKLSAgICAgICAgaWYgKCF3b3JkQWxpZ25lZCkgewotICAgICAgICAgICAgcmV0dXJuICBtTWFwLT5nZXREYXRhUHRyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVuc3VyZUFsaWdubWVudChtTWFwKTsKLSAgICB9Ci19Ci0KLWludCBfRmlsZUFzc2V0OjpvcGVuRmlsZURlc2NyaXB0b3Iob2ZmNjRfdCogb3V0U3RhcnQsIG9mZjY0X3QqIG91dExlbmd0aCkgY29uc3QKLXsKLSAgICBpZiAobU1hcCAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZuYW1lID0gbU1hcC0+Z2V0RmlsZU5hbWUoKTsKLSAgICAgICAgaWYgKGZuYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZuYW1lID0gbUZpbGVOYW1lOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmbmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgKm91dFN0YXJ0ID0gbU1hcC0+Z2V0RGF0YU9mZnNldCgpOwotICAgICAgICAqb3V0TGVuZ3RoID0gbU1hcC0+Z2V0RGF0YUxlbmd0aCgpOwotICAgICAgICByZXR1cm4gb3BlbihmbmFtZSwgT19SRE9OTFkgfCBPX0JJTkFSWSk7Ci0gICAgfQotICAgIGlmIChtRmlsZU5hbWUgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgICpvdXRTdGFydCA9IG1TdGFydDsKLSAgICAqb3V0TGVuZ3RoID0gbUxlbmd0aDsKLSAgICByZXR1cm4gb3BlbihtRmlsZU5hbWUsIE9fUkRPTkxZIHwgT19CSU5BUlkpOwotfQotCi1jb25zdCB2b2lkKiBfRmlsZUFzc2V0OjplbnN1cmVBbGlnbm1lbnQoRmlsZU1hcCogbWFwKQotewotICAgIHZvaWQqIGRhdGEgPSBtYXAtPmdldERhdGFQdHIoKTsKLSAgICBpZiAoKCgoc2l6ZV90KWRhdGEpJjB4MykgPT0gMCkgewotICAgICAgICAvLyBXZSBjYW4gcmV0dXJuIHRoaXMgZGlyZWN0bHkgaWYgaXQgaXMgYWxpZ25lZCBvbiBhIHdvcmQKLSAgICAgICAgLy8gYm91bmRhcnkuCi0gICAgICAgIEFMT0dWKCJSZXR1cm5pbmcgYWxpZ25lZCBGaWxlQXNzZXQgJXAgKCVzKS4iLCB0aGlzLAotICAgICAgICAgICAgICAgIGdldEFzc2V0U291cmNlKCkpOwotICAgICAgICByZXR1cm4gZGF0YTsKLSAgICB9Ci0gICAgLy8gSWYgbm90IGFsaWduZWQgb24gYSB3b3JkIGJvdW5kYXJ5LCB0aGVuIHdlIG5lZWQgdG8gY29weSBpdCBpbnRvCi0gICAgLy8gb3VyIG93biBidWZmZXIuCi0gICAgQUxPR1YoIkNvcHlpbmcgRmlsZUFzc2V0ICVwICglcykgdG8gYnVmZmVyIHNpemUgJWQgdG8gbWFrZSBpdCBhbGlnbmVkLiIsIHRoaXMsCi0gICAgICAgICAgICBnZXRBc3NldFNvdXJjZSgpLCAoaW50KW1MZW5ndGgpOwotICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW21MZW5ndGhdOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICBBTE9HRSgiYWxsb2Mgb2YgJWxkIGJ5dGVzIGZhaWxlZFxuIiwgKGxvbmcpIG1MZW5ndGgpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbWVtY3B5KGJ1ZiwgZGF0YSwgbUxlbmd0aCk7Ci0gICAgbUJ1ZiA9IGJ1ZjsKLSAgICByZXR1cm4gYnVmOwotfQotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgICAgIF9Db21wcmVzc2VkQXNzZXQKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLS8qCi0gKiBDb25zdHJ1Y3Rvci4KLSAqLwotX0NvbXByZXNzZWRBc3NldDo6X0NvbXByZXNzZWRBc3NldCh2b2lkKQotICAgIDogbVN0YXJ0KDApLCBtQ29tcHJlc3NlZExlbigwKSwgbVVuY29tcHJlc3NlZExlbigwKSwgbU9mZnNldCgwKSwKLSAgICAgIG1NYXAoTlVMTCksIG1GZCgtMSksIG1aaXBJbmZsYXRlcihOVUxMKSwgbUJ1ZihOVUxMKQotewotfQotCi0vKgotICogRGVzdHJ1Y3Rvci4gIFJlbGVhc2UgcmVzb3VyY2VzLgotICovCi1fQ29tcHJlc3NlZEFzc2V0Ojp+X0NvbXByZXNzZWRBc3NldCh2b2lkKQotewotICAgIGNsb3NlKCk7Ci19Ci0KLS8qCi0gKiBPcGVuIGEgY2h1bmsgb2YgY29tcHJlc3NlZCBkYXRhIGluc2lkZSBhIGZpbGUuCi0gKgotICogVGhpcyBjdXJyZW50bHkganVzdCBzZXRzIHVwIHNvbWUgdmFsdWVzIGFuZCByZXR1cm5zLiAgT24gdGhlIGZpcnN0Ci0gKiByZWFkLCB3ZSBleHBhbmQgdGhlIGVudGlyZSBmaWxlIGludG8gYSBidWZmZXIgYW5kIHJldHVybiBkYXRhIGZyb20gaXQuCi0gKi8KLXN0YXR1c190IF9Db21wcmVzc2VkQXNzZXQ6Om9wZW5DaHVuayhpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LAotICAgIGludCBjb21wcmVzc2lvbk1ldGhvZCwgc2l6ZV90IHVuY29tcHJlc3NlZExlbiwgc2l6ZV90IGNvbXByZXNzZWRMZW4pCi17Ci0gICAgYXNzZXJ0KG1GZCA8IDApOyAgICAgICAgLy8gbm8gcmUtb3BlbgotICAgIGFzc2VydChtTWFwID09IE5VTEwpOwotICAgIGFzc2VydChmZCA+PSAwKTsKLSAgICBhc3NlcnQob2Zmc2V0ID49IDApOwotICAgIGFzc2VydChjb21wcmVzc2VkTGVuID4gMCk7Ci0KLSAgICBpZiAoY29tcHJlc3Npb25NZXRob2QgIT0gWmlwRmlsZVJPOjprQ29tcHJlc3NEZWZsYXRlZCkgewotICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBtU3RhcnQgPSBvZmZzZXQ7Ci0gICAgbUNvbXByZXNzZWRMZW4gPSBjb21wcmVzc2VkTGVuOwotICAgIG1VbmNvbXByZXNzZWRMZW4gPSB1bmNvbXByZXNzZWRMZW47Ci0gICAgYXNzZXJ0KG1PZmZzZXQgPT0gMCk7Ci0gICAgbUZkID0gZmQ7Ci0gICAgYXNzZXJ0KG1CdWYgPT0gTlVMTCk7Ci0KLSAgICBpZiAodW5jb21wcmVzc2VkTGVuID4gU3RyZWFtaW5nWmlwSW5mbGF0ZXI6Ok9VVFBVVF9DSFVOS19TSVpFKSB7Ci0gICAgICAgIG1aaXBJbmZsYXRlciA9IG5ldyBTdHJlYW1pbmdaaXBJbmZsYXRlcihtRmQsIG9mZnNldCwgdW5jb21wcmVzc2VkTGVuLCBjb21wcmVzc2VkTGVuKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLS8qCi0gKiBPcGVuIGEgY2h1bmsgb2YgY29tcHJlc3NlZCBkYXRhIGluIGEgbWFwcGVkIHJlZ2lvbi4KLSAqCi0gKiBOb3RoaW5nIGlzIGV4cGFuZGVkIHVudGlsIHRoZSBmaXJzdCByZWFkIGNhbGwuCi0gKi8KLXN0YXR1c190IF9Db21wcmVzc2VkQXNzZXQ6Om9wZW5DaHVuayhGaWxlTWFwKiBkYXRhTWFwLCBpbnQgY29tcHJlc3Npb25NZXRob2QsCi0gICAgc2l6ZV90IHVuY29tcHJlc3NlZExlbikKLXsKLSAgICBhc3NlcnQobUZkIDwgMCk7ICAgICAgICAvLyBubyByZS1vcGVuCi0gICAgYXNzZXJ0KG1NYXAgPT0gTlVMTCk7Ci0gICAgYXNzZXJ0KGRhdGFNYXAgIT0gTlVMTCk7Ci0KLSAgICBpZiAoY29tcHJlc3Npb25NZXRob2QgIT0gWmlwRmlsZVJPOjprQ29tcHJlc3NEZWZsYXRlZCkgewotICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBtTWFwID0gZGF0YU1hcDsKLSAgICBtU3RhcnQgPSAtMTsgICAgICAgIC8vIG5vdCB1c2VkCi0gICAgbUNvbXByZXNzZWRMZW4gPSBkYXRhTWFwLT5nZXREYXRhTGVuZ3RoKCk7Ci0gICAgbVVuY29tcHJlc3NlZExlbiA9IHVuY29tcHJlc3NlZExlbjsKLSAgICBhc3NlcnQobU9mZnNldCA9PSAwKTsKLQotICAgIGlmICh1bmNvbXByZXNzZWRMZW4gPiBTdHJlYW1pbmdaaXBJbmZsYXRlcjo6T1VUUFVUX0NIVU5LX1NJWkUpIHsKLSAgICAgICAgbVppcEluZmxhdGVyID0gbmV3IFN0cmVhbWluZ1ppcEluZmxhdGVyKGRhdGFNYXAsIHVuY29tcHJlc3NlZExlbik7Ci0gICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotLyoKLSAqIFJlYWQgZGF0YSBmcm9tIGEgY2h1bmsgb2YgY29tcHJlc3NlZCBkYXRhLgotICoKLSAqIFtGb3Igbm93LCB0aGF0J3MganVzdCBjb3B5aW5nIGRhdGEgb3V0IG9mIGEgYnVmZmVyLl0KLSAqLwotc3NpemVfdCBfQ29tcHJlc3NlZEFzc2V0OjpyZWFkKHZvaWQqIGJ1Ziwgc2l6ZV90IGNvdW50KQotewotICAgIHNpemVfdCBtYXhMZW47Ci0gICAgc2l6ZV90IGFjdHVhbDsKLQotICAgIGFzc2VydChtT2Zmc2V0ID49IDAgJiYgbU9mZnNldCA8PSBtVW5jb21wcmVzc2VkTGVuKTsKLQotICAgIC8qIElmIHdlJ3JlIHJlbHlpbmcgb24gYSBzdHJlYW1pbmcgaW5mbGF0ZXIsIGdvIHRocm91Z2ggdGhhdCAqLwotICAgIGlmIChtWmlwSW5mbGF0ZXIpIHsKLSAgICAgICAgYWN0dWFsID0gbVppcEluZmxhdGVyLT5yZWFkKGJ1ZiwgY291bnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtQnVmID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChnZXRCdWZmZXIoZmFsc2UpID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydChtQnVmICE9IE5VTEwpOwotCi0gICAgICAgIC8qIGFkanVzdCBjb3VudCBpZiB3ZSdyZSBuZWFyIEVPRiAqLwotICAgICAgICBtYXhMZW4gPSBtVW5jb21wcmVzc2VkTGVuIC0gbU9mZnNldDsKLSAgICAgICAgaWYgKGNvdW50ID4gbWF4TGVuKQotICAgICAgICAgICAgY291bnQgPSBtYXhMZW47Ci0KLSAgICAgICAgaWYgKCFjb3VudCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIC8qIGNvcHkgZnJvbSBidWZmZXIgKi8KLSAgICAgICAgLy9wcmludGYoImNvbXAgYnVmIHJlYWRcbiIpOwotICAgICAgICBtZW1jcHkoYnVmLCAoY2hhciopbUJ1ZiArIG1PZmZzZXQsIGNvdW50KTsKLSAgICAgICAgYWN0dWFsID0gY291bnQ7Ci0gICAgfQotCi0gICAgbU9mZnNldCArPSBhY3R1YWw7Ci0gICAgcmV0dXJuIGFjdHVhbDsKLX0KLQotLyoKLSAqIEhhbmRsZSBhIHNlZWsgcmVxdWVzdC4KLSAqCi0gKiBJZiB3ZSdyZSB3b3JraW5nIGluIGEgc3RyZWFtaW5nIG1vZGUsIHRoaXMgaXMgZ29pbmcgdG8gYmUgZmFpcmx5Ci0gKiBleHBlbnNpdmUsIGJlY2F1c2UgaXQgcmVxdWlyZXMgcGxvd2luZyB0aHJvdWdoIGEgYnVuY2ggb2YgY29tcHJlc3NlZAotICogZGF0YS4KLSAqLwotb2ZmNjRfdCBfQ29tcHJlc3NlZEFzc2V0OjpzZWVrKG9mZjY0X3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQotewotICAgIG9mZjY0X3QgbmV3UG9zbjsKLQotICAgIC8vIGNvbXB1dGUgbmV3IHBvc2l0aW9uIHdpdGhpbiBjaHVuawotICAgIG5ld1Bvc24gPSBoYW5kbGVTZWVrKG9mZnNldCwgd2hlbmNlLCBtT2Zmc2V0LCBtVW5jb21wcmVzc2VkTGVuKTsKLSAgICBpZiAobmV3UG9zbiA9PSAob2ZmNjRfdCkgLTEpCi0gICAgICAgIHJldHVybiBuZXdQb3NuOwotCi0gICAgaWYgKG1aaXBJbmZsYXRlcikgewotICAgICAgICBtWmlwSW5mbGF0ZXItPnNlZWtBYnNvbHV0ZShuZXdQb3NuKTsKLSAgICB9Ci0gICAgbU9mZnNldCA9IG5ld1Bvc247Ci0gICAgcmV0dXJuIG1PZmZzZXQ7Ci19Ci0KLS8qCi0gKiBDbG9zZSB0aGUgYXNzZXQuCi0gKi8KLXZvaWQgX0NvbXByZXNzZWRBc3NldDo6Y2xvc2Uodm9pZCkKLXsKLSAgICBpZiAobU1hcCAhPSBOVUxMKSB7Ci0gICAgICAgIG1NYXAtPnJlbGVhc2UoKTsKLSAgICAgICAgbU1hcCA9IE5VTEw7Ci0gICAgfQotCi0gICAgZGVsZXRlW10gbUJ1ZjsKLSAgICBtQnVmID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtWmlwSW5mbGF0ZXI7Ci0gICAgbVppcEluZmxhdGVyID0gTlVMTDsKLQotICAgIGlmIChtRmQgPiAwKSB7Ci0gICAgICAgIDo6Y2xvc2UobUZkKTsKLSAgICAgICAgbUZkID0gLTE7Ci0gICAgfQotfQotCi0vKgotICogR2V0IGEgcG9pbnRlciB0byBhIHJlYWQtb25seSBidWZmZXIgb2YgZGF0YS4KLSAqCi0gKiBUaGUgZmlyc3QgdGltZSB0aGlzIGlzIGNhbGxlZCwgd2UgZXhwYW5kIHRoZSBjb21wcmVzc2VkIGRhdGEgaW50byBhCi0gKiBidWZmZXIuCi0gKi8KLWNvbnN0IHZvaWQqIF9Db21wcmVzc2VkQXNzZXQ6OmdldEJ1ZmZlcihib29sKQotewotICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZiA9IE5VTEw7Ci0KLSAgICBpZiAobUJ1ZiAhPSBOVUxMKQotICAgICAgICByZXR1cm4gbUJ1ZjsKLQotICAgIC8qCi0gICAgICogQWxsb2NhdGUgYSBidWZmZXIgYW5kIHJlYWQgdGhlIGZpbGUgaW50byBpdC4KLSAgICAgKi8KLSAgICBidWYgPSBuZXcgdW5zaWduZWQgY2hhclttVW5jb21wcmVzc2VkTGVuXTsKLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgQUxPR1coImFsbG9jICVsZCBieXRlcyBmYWlsZWRcbiIsIChsb25nKSBtVW5jb21wcmVzc2VkTGVuKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGlmIChtTWFwICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKCFaaXBVdGlsczo6aW5mbGF0ZVRvQnVmZmVyKG1NYXAtPmdldERhdGFQdHIoKSwgYnVmLAotICAgICAgICAgICAgICAgIG1VbmNvbXByZXNzZWRMZW4sIG1Db21wcmVzc2VkTGVuKSkKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICB9IGVsc2UgewotICAgICAgICBhc3NlcnQobUZkID49IDApOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNlZWsgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb21wcmVzc2VkIGRhdGEuCi0gICAgICAgICAqLwotICAgICAgICBpZiAobHNlZWsobUZkLCBtU3RhcnQsIFNFRUtfU0VUKSAhPSBtU3RhcnQpCi0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogRXhwYW5kIHRoZSBkYXRhIGludG8gaXQuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIVppcFV0aWxzOjppbmZsYXRlVG9CdWZmZXIobUZkLCBidWYsIG1VbmNvbXByZXNzZWRMZW4sCi0gICAgICAgICAgICAgICAgbUNvbXByZXNzZWRMZW4pKQotICAgICAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8qCi0gICAgICogU3VjY2VzcyAtIG5vdyB0aGF0IHdlIGhhdmUgdGhlIGZ1bGwgYXNzZXQgaW4gUkFNIHdlCi0gICAgICogbm8gbG9uZ2VyIG5lZWQgdGhlIHN0cmVhbWluZyBpbmZsYXRlcgotICAgICAqLwotICAgIGRlbGV0ZSBtWmlwSW5mbGF0ZXI7Ci0gICAgbVppcEluZmxhdGVyID0gTlVMTDsKLQotICAgIG1CdWYgPSBidWY7Ci0gICAgYnVmID0gTlVMTDsKLQotYmFpbDoKLSAgICBkZWxldGVbXSBidWY7Ci0gICAgcmV0dXJuIG1CdWY7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYnMvYW5kcm9pZGZ3L0Fzc2V0RGlyLmNwcCBiL2xpYnMvYW5kcm9pZGZ3L0Fzc2V0RGlyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc1ZjUyMS4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy9Bc3NldERpci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8KLS8vIFByb3ZpZGUgYWNjZXNzIHRvIGEgdmlydHVhbCBkaXJlY3RvcnkgaW4gImFzc2V0IHNwYWNlIi4gIE1vc3Qgb2YgdGhlCi0vLyBpbXBsZW1lbnRhdGlvbiBpcyBpbiB0aGUgaGVhZGVyIGZpbGUgb3IgaW4gZnJpZW5kIGZ1bmN0aW9ucyBpbgotLy8gQXNzZXRNYW5hZ2VyLgotLy8KLSNpbmNsdWRlIDxhbmRyb2lkZncvQXNzZXREaXIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLQotLyoKLSAqIEZpbmQgYSBtYXRjaGluZyBlbnRyeSBpbiBhIHZlY3RvciBvZiBGaWxlSW5mby4gIEJlY2F1c2UgaXQncyBzb3J0ZWQsIHdlCi0gKiBjYW4gdXNlIGEgYmluYXJ5IHNlYXJjaC4KLSAqCi0gKiBBc3N1bWVzIHRoZSB2ZWN0b3IgaXMgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4KLSAqLwotLypzdGF0aWMqLyBpbnQgQXNzZXREaXI6OkZpbGVJbmZvOjpmaW5kRW50cnkoY29uc3QgU29ydGVkVmVjdG9yPEZpbGVJbmZvPiogcFZlY3RvciwKLSAgICBjb25zdCBTdHJpbmc4JiBmaWxlTmFtZSkKLXsKLSAgICBGaWxlSW5mbyB0bXBJbmZvOwotCi0gICAgdG1wSW5mby5zZXRGaWxlTmFtZShmaWxlTmFtZSk7Ci0gICAgcmV0dXJuIHBWZWN0b3ItPmluZGV4T2YodG1wSW5mbyk7Ci0KLSNpZiAwICAvLyBkb24ndCBuZWVkIHRoaXMgYWZ0ZXIgYWxsICh1c2VzIDEvMiBjb21wYXJlcyBvZiBTb3J0ZWRWZWN0b3IgdGhvdWdoKQotICAgIGludCBsbywgaGksIGN1cjsKLQotICAgIGxvID0gMDsKLSAgICBoaSA9IHBWZWN0b3ItPnNpemUoKSAtMTsKLSAgICB3aGlsZSAobG8gPD0gaGkpIHsKLSAgICAgICAgaW50IGNtcDsKLQotICAgICAgICBjdXIgPSAoaGkgKyBsbykgLyAyOwotICAgICAgICBjbXAgPSBzdHJjbXAocFZlY3Rvci0+aXRlbUF0KGN1cikuZ2V0RmlsZU5hbWUoKSwgZmlsZU5hbWUpOwotICAgICAgICBpZiAoY21wID09IDApIHsKLSAgICAgICAgICAgIC8qIG1hdGNoLCBiYWlsICovCi0gICAgICAgICAgICByZXR1cm4gY3VyOwotICAgICAgICB9IGVsc2UgaWYgKGNtcCA8IDApIHsKLSAgICAgICAgICAgIC8qIHRvbyBsb3cgKi8KLSAgICAgICAgICAgIGxvID0gY3VyICsgMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIHRvbyBoaWdoICovCi0gICAgICAgICAgICBoaSA9IGN1ciAtMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLSNlbmRpZgotfQotCmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9Bc3NldE1hbmFnZXIuY3BwIGIvbGlicy9hbmRyb2lkZncvQXNzZXRNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAzYzAzMC4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy9Bc3NldE1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjAzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8KLS8vIFByb3ZpZGUgYWNjZXNzIHRvIHJlYWQtb25seSBhc3NldHMuCi0vLwotCi0jZGVmaW5lIExPR19UQUcgImFzc2V0IgotI2RlZmluZSBBVFJBQ0VfVEFHIEFUUkFDRV9UQUdfUkVTT1VSQ0VTCi0vLyNkZWZpbmUgTE9HX05ERUJVRyAwCi0KLSNpbmNsdWRlIDxhbmRyb2lkZncvQXNzZXQuaD4KLSNpbmNsdWRlIDxhbmRyb2lkZncvQXNzZXREaXIuaD4KLSNpbmNsdWRlIDxhbmRyb2lkZncvQXNzZXRNYW5hZ2VyLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZGZ3L21pc2MuaD4KLSNpbmNsdWRlIDxhbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5oPgotI2luY2x1ZGUgPGFuZHJvaWRmdy9aaXBGaWxlUk8uaD4KLSNpbmNsdWRlIDx1dGlscy9BdG9taWMuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KLSNpbmNsdWRlIDx1dGlscy9UaW1lcnMuaD4KLSNpZmRlZiBIQVZFX0FORFJPSURfT1MKLSNpbmNsdWRlIDxjdXRpbHMvdHJhY2UuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaWZuZGVmIFRFTVBfRkFJTFVSRV9SRVRSWQotLyogVXNlZCB0byByZXRyeSBzeXNjYWxscyB0aGF0IGNhbiByZXR1cm4gRUlOVFIuICovCi0jZGVmaW5lIFRFTVBfRkFJTFVSRV9SRVRSWShleHApICh7ICAgICAgICAgXAotICAgIHR5cGVvZiAoZXhwKSBfcmM7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9yYyA9IChleHApOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKF9yYyA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7IFwKLSAgICBfcmM7IH0pCi0jZW5kaWYKLQotI2lmZGVmIEhBVkVfQU5EUk9JRF9PUwotI2RlZmluZSBNWV9UUkFDRV9CRUdJTih4KSBBVFJBQ0VfQkVHSU4oeCkKLSNkZWZpbmUgTVlfVFJBQ0VfRU5EKCkgQVRSQUNFX0VORCgpCi0jZWxzZQotI2RlZmluZSBNWV9UUkFDRV9CRUdJTih4KQotI2RlZmluZSBNWV9UUkFDRV9FTkQoKQotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi0vKgotICogTmFtZXMgZm9yIGRlZmF1bHQgYXBwLCBsb2NhbGUsIGFuZCB2ZW5kb3IuICBXZSBtaWdodCB3YW50IHRvIGNoYW5nZQotICogdGhlc2UgdG8gYmUgYW4gYWN0dWFsIGxvY2FsZSwgZS5nLiBhbHdheXMgdXNlIGVuLVVTIGFzIHRoZSBkZWZhdWx0LgotICovCi1zdGF0aWMgY29uc3QgY2hhcioga0RlZmF1bHRMb2NhbGUgPSAiZGVmYXVsdCI7Ci1zdGF0aWMgY29uc3QgY2hhcioga0RlZmF1bHRWZW5kb3IgPSAiZGVmYXVsdCI7Ci1zdGF0aWMgY29uc3QgY2hhcioga0Fzc2V0c1Jvb3QgPSAiYXNzZXRzIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrQXBwWmlwTmFtZSA9IE5VTEw7IC8vImNsYXNzZXMuamFyIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrU3lzdGVtQXNzZXRzID0gImZyYW1ld29yay9mcmFtZXdvcmstcmVzLmFwayI7Ci1zdGF0aWMgY29uc3QgY2hhcioga0lkbWFwQ2FjaGVEaXIgPSAicmVzb3VyY2UtY2FjaGUiOwotCi1zdGF0aWMgY29uc3QgY2hhcioga0V4Y2x1ZGVFeHRlbnNpb24gPSAiLkVYQ0xVREUiOwotCi1zdGF0aWMgQXNzZXQqIGNvbnN0IGtFeGNsdWRlZEFzc2V0ID0gKEFzc2V0KikgMHhkMDAwMDAwZDsKLQotc3RhdGljIHZvbGF0aWxlIGludDMyX3QgZ0NvdW50ID0gMDsKLQotbmFtZXNwYWNlIHsKLSAgICAvLyBUcmFuc2Zvcm0gc3RyaW5nIC9hL2IvYy5hcGsgdG8gL2RhdGEvcmVzb3VyY2UtY2FjaGUvYUBiQGMuYXBrQGlkbWFwCi0gICAgU3RyaW5nOCBpZG1hcFBhdGhGb3JQYWNrYWdlUGF0aChjb25zdCBTdHJpbmc4JiBwa2dQYXRoKQotICAgIHsKLSAgICAgICAgY29uc3QgY2hhciogcm9vdCA9IGdldGVudigiQU5EUk9JRF9EQVRBIik7Ci0gICAgICAgIExPR19BTFdBWVNfRkFUQUxfSUYocm9vdCA9PSBOVUxMLCAiQU5EUk9JRF9EQVRBIG5vdCBzZXQiKTsKLSAgICAgICAgU3RyaW5nOCBwYXRoKHJvb3QpOwotICAgICAgICBwYXRoLmFwcGVuZFBhdGgoa0lkbWFwQ2FjaGVEaXIpOwotCi0gICAgICAgIGNoYXIgYnVmWzI1Nl07IC8vIDI1NiBjaGFycyBzaG91bGQgYmUgZW5vdWdoIGZvciBhbnlvbmUuLi4KLSAgICAgICAgc3RybmNweShidWYsIHBrZ1BhdGguc3RyaW5nKCksIDI1NSk7Ci0gICAgICAgIGJ1ZlsyNTVdID0gJ1wwJzsKLSAgICAgICAgY2hhciogZmlsZW5hbWUgPSBidWY7Ci0gICAgICAgIHdoaWxlICgqZmlsZW5hbWUgJiYgKmZpbGVuYW1lID09ICcvJykgewotICAgICAgICAgICAgKytmaWxlbmFtZTsKLSAgICAgICAgfQotICAgICAgICBjaGFyKiBwID0gZmlsZW5hbWU7Ci0gICAgICAgIHdoaWxlICgqcCkgewotICAgICAgICAgICAgaWYgKCpwID09ICcvJykgewotICAgICAgICAgICAgICAgICpwID0gJ0AnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKytwOwotICAgICAgICB9Ci0gICAgICAgIHBhdGguYXBwZW5kUGF0aChmaWxlbmFtZSk7Ci0gICAgICAgIHBhdGguYXBwZW5kKCJAaWRtYXAiKTsKLQotICAgICAgICByZXR1cm4gcGF0aDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIExpa2Ugc3RyZHVwKCksIGJ1dCB1c2VzIEMrKyAibmV3IiBvcGVyYXRvciBpbnN0ZWFkIG9mIG1hbGxvYy4KLSAgICAgKi8KLSAgICBzdGF0aWMgY2hhciogc3RyZHVwTmV3KGNvbnN0IGNoYXIqIHN0cikKLSAgICB7Ci0gICAgICAgIGNoYXIqIG5ld1N0cjsKLSAgICAgICAgaW50IGxlbjsKLQotICAgICAgICBpZiAoc3RyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICBsZW4gPSBzdHJsZW4oc3RyKTsKLSAgICAgICAgbmV3U3RyID0gbmV3IGNoYXJbbGVuKzFdOwotICAgICAgICBtZW1jcHkobmV3U3RyLCBzdHIsIGxlbisxKTsKLQotICAgICAgICByZXR1cm4gbmV3U3RyOwotICAgIH0KLX0KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogICAgICBBc3NldE1hbmFnZXIKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLWludDMyX3QgQXNzZXRNYW5hZ2VyOjpnZXRHbG9iYWxDb3VudCgpCi17Ci0gICAgcmV0dXJuIGdDb3VudDsKLX0KLQotQXNzZXRNYW5hZ2VyOjpBc3NldE1hbmFnZXIoQ2FjaGVNb2RlIGNhY2hlTW9kZSkKLSAgICA6IG1Mb2NhbGUoTlVMTCksIG1WZW5kb3IoTlVMTCksCi0gICAgICBtUmVzb3VyY2VzKE5VTEwpLCBtQ29uZmlnKG5ldyBSZXNUYWJsZV9jb25maWcpLAotICAgICAgbUNhY2hlTW9kZShjYWNoZU1vZGUpLCBtQ2FjaGVWYWxpZChmYWxzZSkKLXsKLSAgICBpbnQgY291bnQgPSBhbmRyb2lkX2F0b21pY19pbmMoJmdDb3VudCkrMTsKLSAgICAvL0FMT0dJKCJDcmVhdGluZyBBc3NldE1hbmFnZXIgJXAgIyVkXG4iLCB0aGlzLCBjb3VudCk7Ci0gICAgbWVtc2V0KG1Db25maWcsIDAsIHNpemVvZihSZXNUYWJsZV9jb25maWcpKTsKLX0KLQotQXNzZXRNYW5hZ2VyOjp+QXNzZXRNYW5hZ2VyKHZvaWQpCi17Ci0gICAgaW50IGNvdW50ID0gYW5kcm9pZF9hdG9taWNfZGVjKCZnQ291bnQpOwotICAgIC8vQUxPR0koIkRlc3Ryb3lpbmcgQXNzZXRNYW5hZ2VyIGluICVwICMlZFxuIiwgdGhpcywgY291bnQpOwotCi0gICAgZGVsZXRlIG1Db25maWc7Ci0gICAgZGVsZXRlIG1SZXNvdXJjZXM7Ci0KLSAgICAvLyBkb24ndCBoYXZlIGEgU3RyaW5nIGNsYXNzIHlldCwgc28gbWFrZSBzdXJlIHdlIGNsZWFuIHVwCi0gICAgZGVsZXRlW10gbUxvY2FsZTsKLSAgICBkZWxldGVbXSBtVmVuZG9yOwotfQotCi1ib29sIEFzc2V0TWFuYWdlcjo6YWRkQXNzZXRQYXRoKGNvbnN0IFN0cmluZzgmIHBhdGgsIHZvaWQqKiBjb29raWUpCi17Ci0gICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKLQotICAgIGFzc2V0X3BhdGggYXA7Ci0KLSAgICBTdHJpbmc4IHJlYWxQYXRoKHBhdGgpOwotICAgIGlmIChrQXBwWmlwTmFtZSkgewotICAgICAgICByZWFsUGF0aC5hcHBlbmRQYXRoKGtBcHBaaXBOYW1lKTsKLSAgICB9Ci0gICAgYXAudHlwZSA9IDo6Z2V0RmlsZVR5cGUocmVhbFBhdGguc3RyaW5nKCkpOwotICAgIGlmIChhcC50eXBlID09IGtGaWxlVHlwZVJlZ3VsYXIpIHsKLSAgICAgICAgYXAucGF0aCA9IHJlYWxQYXRoOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFwLnBhdGggPSBwYXRoOwotICAgICAgICBhcC50eXBlID0gOjpnZXRGaWxlVHlwZShwYXRoLnN0cmluZygpKTsKLSAgICAgICAgaWYgKGFwLnR5cGUgIT0ga0ZpbGVUeXBlRGlyZWN0b3J5ICYmIGFwLnR5cGUgIT0ga0ZpbGVUeXBlUmVndWxhcikgewotICAgICAgICAgICAgQUxPR1coIkFzc2V0IHBhdGggJXMgaXMgbmVpdGhlciBhIGRpcmVjdG9yeSBub3IgZmlsZSAodHlwZT0lZCkuIiwKLSAgICAgICAgICAgICAgICAgcGF0aC5zdHJpbmcoKSwgKGludClhcC50eXBlKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFNraXAgaWYgd2UgaGF2ZSBpdCBhbHJlYWR5LgotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxtQXNzZXRQYXRocy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAobUFzc2V0UGF0aHNbaV0ucGF0aCA9PSBhcC5wYXRoKSB7Ci0gICAgICAgICAgICBpZiAoY29va2llKSB7Ci0gICAgICAgICAgICAgICAgKmNvb2tpZSA9ICh2b2lkKikoaSsxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQUxPR1YoIkluICVwIEFzc2V0ICVzIHBhdGg6ICVzIiwgdGhpcywKLSAgICAgICAgIGFwLnR5cGUgPT0ga0ZpbGVUeXBlRGlyZWN0b3J5ID8gImRpciIgOiAiemlwIiwgYXAucGF0aC5zdHJpbmcoKSk7Ci0KLSAgICBtQXNzZXRQYXRocy5hZGQoYXApOwotCi0gICAgLy8gbmV3IHBhdGhzIGFyZSBhbHdheXMgYWRkZWQgYXQgdGhlIGVuZAotICAgIGlmIChjb29raWUpIHsKLSAgICAgICAgKmNvb2tpZSA9ICh2b2lkKiltQXNzZXRQYXRocy5zaXplKCk7Ci0gICAgfQotCi0gICAgLy8gYWRkIG92ZXJsYXkgcGFja2FnZXMgZm9yIC9zeXN0ZW0vZnJhbWV3b3JrOyBhcHBzIGFyZSBoYW5kbGVkIGJ5IHRoZQotICAgIC8vIChKYXZhKSBwYWNrYWdlIG1hbmFnZXIKLSAgICBpZiAoc3RybmNtcChwYXRoLnN0cmluZygpLCAiL3N5c3RlbS9mcmFtZXdvcmsvIiwgMTgpID09IDApIHsKLSAgICAgICAgLy8gV2hlbiB0aGVyZSBpcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgL3ZlbmRvciwgdGhpcwotICAgICAgICAvLyBzaG91bGQgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgc2ltaWxhciB0byBob3cgQU5EUk9JRF9ST09UCi0gICAgICAgIC8vIGFuZCBBTkRST0lEX0RBVEEgYXJlIHVzZWQgaW4gdGhpcyBmaWxlLgotICAgICAgICBTdHJpbmc4IG92ZXJsYXlQYXRoKCIvdmVuZG9yL292ZXJsYXkvZnJhbWV3b3JrLyIpOwotICAgICAgICBvdmVybGF5UGF0aC5hcHBlbmQocGF0aC5nZXRQYXRoTGVhZigpKTsKLSAgICAgICAgaWYgKFRFTVBfRkFJTFVSRV9SRVRSWShhY2Nlc3Mob3ZlcmxheVBhdGguc3RyaW5nKCksIFJfT0spKSA9PSAwKSB7Ci0gICAgICAgICAgICBhc3NldF9wYXRoIG9hcDsKLSAgICAgICAgICAgIG9hcC5wYXRoID0gb3ZlcmxheVBhdGg7Ci0gICAgICAgICAgICBvYXAudHlwZSA9IDo6Z2V0RmlsZVR5cGUob3ZlcmxheVBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgYm9vbCBhZGRPdmVybGF5ID0gKG9hcC50eXBlID09IGtGaWxlVHlwZVJlZ3VsYXIpOyAvLyBvbmx5IC5hcGtzIHN1cHBvcnRlZCBhcyBvdmVybGF5Ci0gICAgICAgICAgICBpZiAoYWRkT3ZlcmxheSkgewotICAgICAgICAgICAgICAgIG9hcC5pZG1hcCA9IGlkbWFwUGF0aEZvclBhY2thZ2VQYXRoKG92ZXJsYXlQYXRoKTsKLQotICAgICAgICAgICAgICAgIGlmIChpc0lkbWFwU3RhbGVMb2NrZWQoYXAucGF0aCwgb2FwLnBhdGgsIG9hcC5pZG1hcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkT3ZlcmxheSA9IGNyZWF0ZUlkbWFwRmlsZUxvY2tlZChhcC5wYXRoLCBvYXAucGF0aCwgb2FwLmlkbWFwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYWRkT3ZlcmxheSkgewotICAgICAgICAgICAgICAgIG1Bc3NldFBhdGhzLmFkZChvYXApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiZmFpbGVkIHRvIGFkZCBvdmVybGF5IHBhY2thZ2UgJXNcbiIsIG92ZXJsYXlQYXRoLnN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFzc2V0TWFuYWdlcjo6aXNJZG1hcFN0YWxlTG9ja2VkKGNvbnN0IFN0cmluZzgmIG9yaWdpbmFsUGF0aCwgY29uc3QgU3RyaW5nOCYgb3ZlcmxheVBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIGlkbWFwUGF0aCkKLXsKLSAgICBzdHJ1Y3Qgc3RhdCBzdDsKLSAgICBpZiAoVEVNUF9GQUlMVVJFX1JFVFJZKHN0YXQoaWRtYXBQYXRoLnN0cmluZygpLCAmc3QpKSA9PSAtMSkgewotICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gbm9uLWV4aXN0aW5nIGlkbWFwIGlzIGFsd2F5cyBzdGFsZQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQUxPR1coImZhaWxlZCB0byBzdGF0IGZpbGUgJXM6ICVzXG4iLCBpZG1hcFBhdGguc3RyaW5nKCksIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHN0LnN0X3NpemUgPCBSZXNUYWJsZTo6SURNQVBfSEVBREVSX1NJWkVfQllURVMpIHsKLSAgICAgICAgQUxPR1coImZpbGUgJXMgaGFzIHVuZXhwZWN0ZWRseSBzbWFsbCBzaXplPSV6ZFxuIiwgaWRtYXBQYXRoLnN0cmluZygpLCAoc2l6ZV90KXN0LnN0X3NpemUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGludCBmZCA9IFRFTVBfRkFJTFVSRV9SRVRSWSg6Om9wZW4oaWRtYXBQYXRoLnN0cmluZygpLCBPX1JET05MWSkpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBBTE9HVygiZmFpbGVkIHRvIG9wZW4gZmlsZSAlczogJXNcbiIsIGlkbWFwUGF0aC5zdHJpbmcoKSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjaGFyIGJ1ZltSZXNUYWJsZTo6SURNQVBfSEVBREVSX1NJWkVfQllURVNdOwotICAgIHNzaXplX3QgYnl0ZXNMZWZ0ID0gUmVzVGFibGU6OklETUFQX0hFQURFUl9TSVpFX0JZVEVTOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgc3NpemVfdCByID0gVEVNUF9GQUlMVVJFX1JFVFJZKHJlYWQoZmQsIGJ1ZiArIFJlc1RhYmxlOjpJRE1BUF9IRUFERVJfU0laRV9CWVRFUyAtIGJ5dGVzTGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNMZWZ0KSk7Ci0gICAgICAgIGlmIChyIDwgMCkgewotICAgICAgICAgICAgVEVNUF9GQUlMVVJFX1JFVFJZKGNsb3NlKGZkKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnl0ZXNMZWZ0IC09IHI7Ci0gICAgICAgIGlmIChieXRlc0xlZnQgPT0gMCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVEVNUF9GQUlMVVJFX1JFVFJZKGNsb3NlKGZkKSk7Ci0KLSAgICB1aW50MzJfdCBjYWNoZWRPcmlnaW5hbENyYywgY2FjaGVkT3ZlcmxheUNyYzsKLSAgICBpZiAoIVJlc1RhYmxlOjpnZXRJZG1hcEluZm8oYnVmLCBSZXNUYWJsZTo6SURNQVBfSEVBREVSX1NJWkVfQllURVMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWNoZWRPcmlnaW5hbENyYywgJmNhY2hlZE92ZXJsYXlDcmMpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBhY3R1YWxPcmlnaW5hbENyYywgYWN0dWFsT3ZlcmxheUNyYzsKLSAgICBpZiAoIWdldFppcEVudHJ5Q3JjTG9ja2VkKG9yaWdpbmFsUGF0aCwgInJlc291cmNlcy5hcnNjIiwgJmFjdHVhbE9yaWdpbmFsQ3JjKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghZ2V0WmlwRW50cnlDcmNMb2NrZWQob3ZlcmxheVBhdGgsICJyZXNvdXJjZXMuYXJzYyIsICZhY3R1YWxPdmVybGF5Q3JjKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBjYWNoZWRPcmlnaW5hbENyYyAhPSBhY3R1YWxPcmlnaW5hbENyYyB8fCBjYWNoZWRPdmVybGF5Q3JjICE9IGFjdHVhbE92ZXJsYXlDcmM7Ci19Ci0KLWJvb2wgQXNzZXRNYW5hZ2VyOjpnZXRaaXBFbnRyeUNyY0xvY2tlZChjb25zdCBTdHJpbmc4JiB6aXBQYXRoLCBjb25zdCBjaGFyKiBlbnRyeUZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiBwQ3JjKQotewotICAgIGFzc2V0X3BhdGggYXA7Ci0gICAgYXAucGF0aCA9IHppcFBhdGg7Ci0gICAgY29uc3QgWmlwRmlsZVJPKiB6aXAgPSBnZXRaaXBGaWxlTG9ja2VkKGFwKTsKLSAgICBpZiAoemlwID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjb25zdCBaaXBFbnRyeVJPIGVudHJ5ID0gemlwLT5maW5kRW50cnlCeU5hbWUoZW50cnlGaWxlbmFtZSk7Ci0gICAgaWYgKGVudHJ5ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNvbnN0IGJvb2wgZ290SW5mbyA9IHppcC0+Z2V0RW50cnlJbmZvKGVudHJ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAobG9uZyopcENyYyk7Ci0gICAgemlwLT5yZWxlYXNlRW50cnkoZW50cnkpOwotCi0gICAgcmV0dXJuIGdvdEluZm87Ci19Ci0KLWJvb2wgQXNzZXRNYW5hZ2VyOjpjcmVhdGVJZG1hcEZpbGVMb2NrZWQoY29uc3QgU3RyaW5nOCYgb3JpZ2luYWxQYXRoLCBjb25zdCBTdHJpbmc4JiBvdmVybGF5UGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nOCYgaWRtYXBQYXRoKQotewotICAgIEFMT0dEKCIlczogb3JpZ2luYWxQYXRoPSVzIG92ZXJsYXlQYXRoPSVzIGlkbWFwUGF0aD0lc1xuIiwKLSAgICAgICAgIF9fRlVOQ1RJT05fXywgb3JpZ2luYWxQYXRoLnN0cmluZygpLCBvdmVybGF5UGF0aC5zdHJpbmcoKSwgaWRtYXBQYXRoLnN0cmluZygpKTsKLSAgICBSZXNUYWJsZSB0YWJsZXNbMl07Ci0gICAgY29uc3QgU3RyaW5nOCogcGF0aHNbMl0gPSB7ICZvcmlnaW5hbFBhdGgsICZvdmVybGF5UGF0aCB9OwotICAgIHVpbnQzMl90IG9yaWdpbmFsQ3JjLCBvdmVybGF5Q3JjOwotICAgIGJvb2wgcmV0dmFsID0gZmFsc2U7Ci0gICAgc3NpemVfdCBvZmZzZXQgPSAwOwotICAgIGludCBmZCA9IDA7Ci0gICAgdWludDMyX3QqIGRhdGEgPSBOVUxMOwotICAgIHNpemVfdCBzaXplOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICAgICAgYXNzZXRfcGF0aCBhcDsKLSAgICAgICAgYXAudHlwZSA9IGtGaWxlVHlwZVJlZ3VsYXI7Ci0gICAgICAgIGFwLnBhdGggPSAqcGF0aHNbaV07Ci0gICAgICAgIEFzc2V0KiBhc3MgPSBvcGVuTm9uQXNzZXRJblBhdGhMb2NrZWQoInJlc291cmNlcy5hcnNjIiwgQXNzZXQ6OkFDQ0VTU19CVUZGRVIsIGFwKTsKLSAgICAgICAgaWYgKGFzcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBBTE9HVygiZmFpbGVkIHRvIGZpbmQgcmVzb3VyY2VzLmFyc2MgaW4gJXNcbiIsIGFwLnBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICB0YWJsZXNbaV0uYWRkKGFzcywgKHZvaWQqKTEsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWdldFppcEVudHJ5Q3JjTG9ja2VkKG9yaWdpbmFsUGF0aCwgInJlc291cmNlcy5hcnNjIiwgJm9yaWdpbmFsQ3JjKSkgewotICAgICAgICBBTE9HVygiZmFpbGVkIHRvIHJldHJpZXZlIGNyYyBmb3IgcmVzb3VyY2VzLmFyc2MgaW4gJXNcbiIsIG9yaWdpbmFsUGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIGlmICghZ2V0WmlwRW50cnlDcmNMb2NrZWQob3ZlcmxheVBhdGgsICJyZXNvdXJjZXMuYXJzYyIsICZvdmVybGF5Q3JjKSkgewotICAgICAgICBBTE9HVygiZmFpbGVkIHRvIHJldHJpZXZlIGNyYyBmb3IgcmVzb3VyY2VzLmFyc2MgaW4gJXNcbiIsIG92ZXJsYXlQYXRoLnN0cmluZygpKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0KLSAgICBpZiAodGFibGVzWzBdLmNyZWF0ZUlkbWFwKHRhYmxlc1sxXSwgb3JpZ2luYWxDcmMsIG92ZXJsYXlDcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCoqKSZkYXRhLCAmc2l6ZSkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgQUxPR1coImZhaWxlZCB0byBnZW5lcmF0ZSBpZG1hcCBkYXRhIGZvciBmaWxlICVzXG4iLCBpZG1hcFBhdGguc3RyaW5nKCkpOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLQotICAgIC8vIFRoaXMgc2hvdWxkIGJlIGFic3RyYWN0ZWQgKGVnIHJlcGxhY2VkIGJ5IGEgc3RhbmQtYWxvbmUKLSAgICAvLyBhcHBsaWNhdGlvbiBsaWtlIGRleG9wdCwgdHJpZ2dlcmVkIGJ5IHNvbWV0aGluZyBlcXVpdmFsZW50IHRvCi0gICAgLy8gaW5zdGFsbGQpLgotICAgIGZkID0gVEVNUF9GQUlMVVJFX1JFVFJZKDo6b3BlbihpZG1hcFBhdGguc3RyaW5nKCksIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NDQpKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgQUxPR1coImZhaWxlZCB0byB3cml0ZSBpZG1hcCBmaWxlICVzIChvcGVuOiAlcylcbiIsIGlkbWFwUGF0aC5zdHJpbmcoKSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgZ290byBlcnJvcl9mcmVlOwotICAgIH0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHNzaXplX3Qgd3JpdHRlbiA9IFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZShmZCwgZGF0YSArIG9mZnNldCwgc2l6ZSkpOwotICAgICAgICBpZiAod3JpdHRlbiA8IDApIHsKLSAgICAgICAgICAgIEFMT0dXKCJmYWlsZWQgdG8gd3JpdGUgaWRtYXAgZmlsZSAlcyAod3JpdGU6ICVzKVxuIiwgaWRtYXBQYXRoLnN0cmluZygpLAotICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAgICAgZ290byBlcnJvcl9jbG9zZTsKLSAgICAgICAgfQotICAgICAgICBzaXplIC09IChzaXplX3Qpd3JpdHRlbjsKLSAgICAgICAgb2Zmc2V0ICs9IHdyaXR0ZW47Ci0gICAgICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dmFsID0gdHJ1ZTsKLWVycm9yX2Nsb3NlOgotICAgIFRFTVBfRkFJTFVSRV9SRVRSWShjbG9zZShmZCkpOwotZXJyb3JfZnJlZToKLSAgICBmcmVlKGRhdGEpOwotZXJyb3I6Ci0gICAgcmV0dXJuIHJldHZhbDsKLX0KLQotYm9vbCBBc3NldE1hbmFnZXI6OmFkZERlZmF1bHRBc3NldHMoKQotewotICAgIGNvbnN0IGNoYXIqIHJvb3QgPSBnZXRlbnYoIkFORFJPSURfUk9PVCIpOwotICAgIExPR19BTFdBWVNfRkFUQUxfSUYocm9vdCA9PSBOVUxMLCAiQU5EUk9JRF9ST09UIG5vdCBzZXQiKTsKLQotICAgIFN0cmluZzggcGF0aChyb290KTsKLSAgICBwYXRoLmFwcGVuZFBhdGgoa1N5c3RlbUFzc2V0cyk7Ci0KLSAgICByZXR1cm4gYWRkQXNzZXRQYXRoKHBhdGgsIE5VTEwpOwotfQotCi12b2lkKiBBc3NldE1hbmFnZXI6Om5leHRBc3NldFBhdGgodm9pZCogY29va2llKSBjb25zdAotewotICAgIEF1dG9NdXRleCBfbChtTG9jayk7Ci0gICAgc2l6ZV90IG5leHQgPSAoKHNpemVfdCljb29raWUpKzE7Ci0gICAgcmV0dXJuIG5leHQgPiBtQXNzZXRQYXRocy5zaXplKCkgPyBOVUxMIDogKHZvaWQqKW5leHQ7Ci19Ci0KLVN0cmluZzggQXNzZXRNYW5hZ2VyOjpnZXRBc3NldFBhdGgodm9pZCogY29va2llKSBjb25zdAotewotICAgIEF1dG9NdXRleCBfbChtTG9jayk7Ci0gICAgY29uc3Qgc2l6ZV90IHdoaWNoID0gKChzaXplX3QpY29va2llKS0xOwotICAgIGlmICh3aGljaCA8IG1Bc3NldFBhdGhzLnNpemUoKSkgewotICAgICAgICByZXR1cm4gbUFzc2V0UGF0aHNbd2hpY2hdLnBhdGg7Ci0gICAgfQotICAgIHJldHVybiBTdHJpbmc4KCk7Ci19Ci0KLS8qCi0gKiBTZXQgdGhlIGN1cnJlbnQgbG9jYWxlLiAgVXNlIE5VTEwgdG8gaW5kaWNhdGUgbm8gbG9jYWxlLgotICoKLSAqIENsb3NlIGFuZCByZW9wZW4gWmlwIGFyY2hpdmVzIGFzIGFwcHJvcHJpYXRlLCBhbmQgcmVzZXQgY2FjaGVkCi0gKiBpbmZvcm1hdGlvbiBpbiB0aGUgbG9jYWxlLXNwZWNpZmljIHNlY3Rpb25zIG9mIHRoZSB0cmVlLgotICovCi12b2lkIEFzc2V0TWFuYWdlcjo6c2V0TG9jYWxlKGNvbnN0IGNoYXIqIGxvY2FsZSkKLXsKLSAgICBBdXRvTXV0ZXggX2wobUxvY2spOwotICAgIHNldExvY2FsZUxvY2tlZChsb2NhbGUpOwotfQotCi12b2lkIEFzc2V0TWFuYWdlcjo6c2V0TG9jYWxlTG9ja2VkKGNvbnN0IGNoYXIqIGxvY2FsZSkKLXsKLSAgICBpZiAobUxvY2FsZSAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIHByZXZpb3VzbHkgc2V0LCBwdXJnZSBjYWNoZWQgZGF0YSAqLwotICAgICAgICBwdXJnZUZpbGVOYW1lQ2FjaGVMb2NrZWQoKTsKLSAgICAgICAgLy9tWmlwU2V0LnB1cmdlTG9jYWxlKCk7Ci0gICAgICAgIGRlbGV0ZVtdIG1Mb2NhbGU7Ci0gICAgfQotICAgIG1Mb2NhbGUgPSBzdHJkdXBOZXcobG9jYWxlKTsKLQotICAgIHVwZGF0ZVJlc291cmNlUGFyYW1zTG9ja2VkKCk7Ci19Ci0KLS8qCi0gKiBTZXQgdGhlIGN1cnJlbnQgdmVuZG9yLiAgVXNlIE5VTEwgdG8gaW5kaWNhdGUgbm8gdmVuZG9yLgotICoKLSAqIENsb3NlIGFuZCByZW9wZW4gWmlwIGFyY2hpdmVzIGFzIGFwcHJvcHJpYXRlLCBhbmQgcmVzZXQgY2FjaGVkCi0gKiBpbmZvcm1hdGlvbiBpbiB0aGUgdmVuZG9yLXNwZWNpZmljIHNlY3Rpb25zIG9mIHRoZSB0cmVlLgotICovCi12b2lkIEFzc2V0TWFuYWdlcjo6c2V0VmVuZG9yKGNvbnN0IGNoYXIqIHZlbmRvcikKLXsKLSAgICBBdXRvTXV0ZXggX2wobUxvY2spOwotCi0gICAgaWYgKG1WZW5kb3IgIT0gTlVMTCkgewotICAgICAgICAvKiBwcmV2aW91c2x5IHNldCwgcHVyZ2UgY2FjaGVkIGRhdGEgKi8KLSAgICAgICAgcHVyZ2VGaWxlTmFtZUNhY2hlTG9ja2VkKCk7Ci0gICAgICAgIC8vbVppcFNldC5wdXJnZVZlbmRvcigpOwotICAgICAgICBkZWxldGVbXSBtVmVuZG9yOwotICAgIH0KLSAgICBtVmVuZG9yID0gc3RyZHVwTmV3KHZlbmRvcik7Ci19Ci0KLXZvaWQgQXNzZXRNYW5hZ2VyOjpzZXRDb25maWd1cmF0aW9uKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgY29uZmlnLCBjb25zdCBjaGFyKiBsb2NhbGUpCi17Ci0gICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKLSAgICAqbUNvbmZpZyA9IGNvbmZpZzsKLSAgICBpZiAobG9jYWxlKSB7Ci0gICAgICAgIHNldExvY2FsZUxvY2tlZChsb2NhbGUpOwotICAgIH0gZWxzZSBpZiAoY29uZmlnLmxhbmd1YWdlWzBdICE9IDApIHsKLSAgICAgICAgY2hhciBzcGVjWzldOwotICAgICAgICBzcGVjWzBdID0gY29uZmlnLmxhbmd1YWdlWzBdOwotICAgICAgICBzcGVjWzFdID0gY29uZmlnLmxhbmd1YWdlWzFdOwotICAgICAgICBpZiAoY29uZmlnLmNvdW50cnlbMF0gIT0gMCkgewotICAgICAgICAgICAgc3BlY1syXSA9ICdfJzsKLSAgICAgICAgICAgIHNwZWNbM10gPSBjb25maWcuY291bnRyeVswXTsKLSAgICAgICAgICAgIHNwZWNbNF0gPSBjb25maWcuY291bnRyeVsxXTsKLSAgICAgICAgICAgIHNwZWNbNV0gPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3BlY1szXSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0TG9jYWxlTG9ja2VkKHNwZWMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVwZGF0ZVJlc291cmNlUGFyYW1zTG9ja2VkKCk7Ci0gICAgfQotfQotCi12b2lkIEFzc2V0TWFuYWdlcjo6Z2V0Q29uZmlndXJhdGlvbihSZXNUYWJsZV9jb25maWcqIG91dENvbmZpZykgY29uc3QKLXsKLSAgICBBdXRvTXV0ZXggX2wobUxvY2spOwotICAgICpvdXRDb25maWcgPSAqbUNvbmZpZzsKLX0KLQotLyoKLSAqIE9wZW4gYW4gYXNzZXQuCi0gKgotICogVGhlIGRhdGEgY291bGQgYmU7Ci0gKiAgLSBJbiBhIGZpbGUgb24gZGlzayAoYXNzZXRCYXNlICsgZmlsZU5hbWUpLgotICogIC0gSW4gYSBjb21wcmVzc2VkIGZpbGUgb24gZGlzayAoYXNzZXRCYXNlICsgZmlsZU5hbWUuZ3opLgotICogIC0gSW4gYSBaaXAgYXJjaGl2ZSwgdW5jb21wcmVzc2VkIG9yIGNvbXByZXNzZWQuCi0gKgotICogSXQgY2FuIGJlIGluIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBkaXJlY3RvcmllcyBhbmQgWmlwIGFyY2hpdmVzLgotICogVGhlIHNlYXJjaCBvcmRlciBpczoKLSAqICAtIFthcHBuYW1lXQotICogICAgLSBsb2NhbGUgKyB2ZW5kb3IKLSAqICAgIC0gImRlZmF1bHQiICsgdmVuZG9yCi0gKiAgICAtIGxvY2FsZSArICJkZWZhdWx0IgotICogICAgLSAiZGVmYXVsdCArICJkZWZhdWx0IgotICogIC0gImNvbW1vbiIKLSAqICAgIC0gKHNhbWUgYXMgYWJvdmUpCi0gKgotICogVG8gZmluZCBhIHBhcnRpY3VsYXIgZmlsZSwgd2UgaGF2ZSB0byB0cnkgdXAgdG8gZWlnaHQgcGF0aHMgd2l0aAotICogYWxsIHRocmVlIGZvcm1zIG9mIGRhdGEuCi0gKgotICogV2Ugc2hvdWxkIHByb2JhYmx5IHJlamVjdCByZXF1ZXN0cyBmb3IgImlsbGVnYWwiIGZpbGVuYW1lcywgZS5nLiB0aG9zZQotICogd2l0aCBpbGxlZ2FsIGNoYXJhY3RlcnMgb3IgIi4uLyIgYmFja3dhcmQgcmVsYXRpdmUgcGF0aHMuCi0gKi8KLUFzc2V0KiBBc3NldE1hbmFnZXI6Om9wZW4oY29uc3QgY2hhciogZmlsZU5hbWUsIEFjY2Vzc01vZGUgbW9kZSkKLXsKLSAgICBBdXRvTXV0ZXggX2wobUxvY2spOwotCi0gICAgTE9HX0ZBVEFMX0lGKG1Bc3NldFBhdGhzLnNpemUoKSA9PSAwLCAiTm8gYXNzZXRzIGFkZGVkIHRvIEFzc2V0TWFuYWdlciIpOwotCi0KLSAgICBpZiAobUNhY2hlTW9kZSAhPSBDQUNIRV9PRkYgJiYgIW1DYWNoZVZhbGlkKQotICAgICAgICBsb2FkRmlsZU5hbWVDYWNoZUxvY2tlZCgpOwotCi0gICAgU3RyaW5nOCBhc3NldE5hbWUoa0Fzc2V0c1Jvb3QpOwotICAgIGFzc2V0TmFtZS5hcHBlbmRQYXRoKGZpbGVOYW1lKTsKLQotICAgIC8qCi0gICAgICogRm9yIGVhY2ggdG9wLWxldmVsIGFzc2V0IHBhdGgsIHNlYXJjaCBmb3IgdGhlIGFzc2V0LgotICAgICAqLwotCi0gICAgc2l6ZV90IGkgPSBtQXNzZXRQYXRocy5zaXplKCk7Ci0gICAgd2hpbGUgKGkgPiAwKSB7Ci0gICAgICAgIGktLTsKLSAgICAgICAgQUxPR1YoIkxvb2tpbmcgZm9yIGFzc2V0ICclcycgaW4gJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICBhc3NldE5hbWUuc3RyaW5nKCksIG1Bc3NldFBhdGhzLml0ZW1BdChpKS5wYXRoLnN0cmluZygpKTsKLSAgICAgICAgQXNzZXQqIHBBc3NldCA9IG9wZW5Ob25Bc3NldEluUGF0aExvY2tlZChhc3NldE5hbWUuc3RyaW5nKCksIG1vZGUsIG1Bc3NldFBhdGhzLml0ZW1BdChpKSk7Ci0gICAgICAgIGlmIChwQXNzZXQgIT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIHBBc3NldCAhPSBrRXhjbHVkZWRBc3NldCA/IHBBc3NldCA6IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIE9wZW4gYSBub24tYXNzZXQgZmlsZSBhcyBpZiBpdCB3ZXJlIGFuIGFzc2V0LgotICoKLSAqIFRoZSAiZmlsZU5hbWUiIGlzIHRoZSBwYXJ0aWFsIHBhdGggc3RhcnRpbmcgZnJvbSB0aGUgYXBwbGljYXRpb24KLSAqIG5hbWUuCi0gKi8KLUFzc2V0KiBBc3NldE1hbmFnZXI6Om9wZW5Ob25Bc3NldChjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlKQotewotICAgIEF1dG9NdXRleCBfbChtTG9jayk7Ci0KLSAgICBMT0dfRkFUQUxfSUYobUFzc2V0UGF0aHMuc2l6ZSgpID09IDAsICJObyBhc3NldHMgYWRkZWQgdG8gQXNzZXRNYW5hZ2VyIik7Ci0KLQotICAgIGlmIChtQ2FjaGVNb2RlICE9IENBQ0hFX09GRiAmJiAhbUNhY2hlVmFsaWQpCi0gICAgICAgIGxvYWRGaWxlTmFtZUNhY2hlTG9ja2VkKCk7Ci0KLSAgICAvKgotICAgICAqIEZvciBlYWNoIHRvcC1sZXZlbCBhc3NldCBwYXRoLCBzZWFyY2ggZm9yIHRoZSBhc3NldC4KLSAgICAgKi8KLQotICAgIHNpemVfdCBpID0gbUFzc2V0UGF0aHMuc2l6ZSgpOwotICAgIHdoaWxlIChpID4gMCkgewotICAgICAgICBpLS07Ci0gICAgICAgIEFMT0dWKCJMb29raW5nIGZvciBub24tYXNzZXQgJyVzJyBpbiAnJXMnXG4iLCBmaWxlTmFtZSwgbUFzc2V0UGF0aHMuaXRlbUF0KGkpLnBhdGguc3RyaW5nKCkpOwotICAgICAgICBBc3NldCogcEFzc2V0ID0gb3Blbk5vbkFzc2V0SW5QYXRoTG9ja2VkKAotICAgICAgICAgICAgZmlsZU5hbWUsIG1vZGUsIG1Bc3NldFBhdGhzLml0ZW1BdChpKSk7Ci0gICAgICAgIGlmIChwQXNzZXQgIT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIHBBc3NldCAhPSBrRXhjbHVkZWRBc3NldCA/IHBBc3NldCA6IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotQXNzZXQqIEFzc2V0TWFuYWdlcjo6b3Blbk5vbkFzc2V0KHZvaWQqIGNvb2tpZSwgY29uc3QgY2hhciogZmlsZU5hbWUsIEFjY2Vzc01vZGUgbW9kZSkKLXsKLSAgICBjb25zdCBzaXplX3Qgd2hpY2ggPSAoKHNpemVfdCljb29raWUpLTE7Ci0KLSAgICBBdXRvTXV0ZXggX2wobUxvY2spOwotCi0gICAgTE9HX0ZBVEFMX0lGKG1Bc3NldFBhdGhzLnNpemUoKSA9PSAwLCAiTm8gYXNzZXRzIGFkZGVkIHRvIEFzc2V0TWFuYWdlciIpOwotCi0KLSAgICBpZiAobUNhY2hlTW9kZSAhPSBDQUNIRV9PRkYgJiYgIW1DYWNoZVZhbGlkKQotICAgICAgICBsb2FkRmlsZU5hbWVDYWNoZUxvY2tlZCgpOwotCi0gICAgaWYgKHdoaWNoIDwgbUFzc2V0UGF0aHMuc2l6ZSgpKSB7Ci0gICAgICAgIEFMT0dWKCJMb29raW5nIGZvciBub24tYXNzZXQgJyVzJyBpbiAnJXMnXG4iLCBmaWxlTmFtZSwKLSAgICAgICAgICAgICAgICBtQXNzZXRQYXRocy5pdGVtQXQod2hpY2gpLnBhdGguc3RyaW5nKCkpOwotICAgICAgICBBc3NldCogcEFzc2V0ID0gb3Blbk5vbkFzc2V0SW5QYXRoTG9ja2VkKAotICAgICAgICAgICAgZmlsZU5hbWUsIG1vZGUsIG1Bc3NldFBhdGhzLml0ZW1BdCh3aGljaCkpOwotICAgICAgICBpZiAocEFzc2V0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBwQXNzZXQgIT0ga0V4Y2x1ZGVkQXNzZXQgPyBwQXNzZXQgOiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBHZXQgdGhlIHR5cGUgb2YgYSBmaWxlIGluIHRoZSBhc3NldCBuYW1lc3BhY2UuCi0gKgotICogVGhpcyBjdXJyZW50bHkgb25seSB3b3JrcyBmb3IgcmVndWxhciBmaWxlcy4gIEFsbCBvdGhlcnMgKGluY2x1ZGluZwotICogZGlyZWN0b3JpZXMpIHdpbGwgcmV0dXJuIGtGaWxlVHlwZU5vbmV4aXN0ZW50LgotICovCi1GaWxlVHlwZSBBc3NldE1hbmFnZXI6OmdldEZpbGVUeXBlKGNvbnN0IGNoYXIqIGZpbGVOYW1lKQotewotICAgIEFzc2V0KiBwQXNzZXQgPSBOVUxMOwotCi0gICAgLyoKLSAgICAgKiBPcGVuIHRoZSBhc3NldC4gIFRoaXMgaXMgbGVzcyBlZmZpY2llbnQgdGhhbiBzaW1wbHkgZmluZGluZyB0aGUKLSAgICAgKiBmaWxlLCBidXQgaXQncyBub3QgdG9vIGJhZCAod2UgZG9uJ3QgdW5jb21wcmVzcyBvciBtbWFwIGRhdGEgdW50aWwKLSAgICAgKiB0aGUgZmlyc3QgcmVhZCgpIGNhbGwpLgotICAgICAqLwotICAgIHBBc3NldCA9IG9wZW4oZmlsZU5hbWUsIEFzc2V0OjpBQ0NFU1NfU1RSRUFNSU5HKTsKLSAgICBkZWxldGUgcEFzc2V0OwotCi0gICAgaWYgKHBBc3NldCA9PSBOVUxMKQotICAgICAgICByZXR1cm4ga0ZpbGVUeXBlTm9uZXhpc3RlbnQ7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4ga0ZpbGVUeXBlUmVndWxhcjsKLX0KLQotY29uc3QgUmVzVGFibGUqIEFzc2V0TWFuYWdlcjo6Z2V0UmVzVGFibGUoYm9vbCByZXF1aXJlZCkgY29uc3QKLXsKLSAgICBSZXNUYWJsZSogcnQgPSBtUmVzb3VyY2VzOwotICAgIGlmIChydCkgewotICAgICAgICByZXR1cm4gcnQ7Ci0gICAgfQotCi0gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBhc3NldCBwYWNrYWdlcywgY29sbGVjdGluZyByZXNvdXJjZXMgZnJvbSBlYWNoLgotCi0gICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKLQotICAgIGlmIChtUmVzb3VyY2VzICE9IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIG1SZXNvdXJjZXM7Ci0gICAgfQotCi0gICAgaWYgKHJlcXVpcmVkKSB7Ci0gICAgICAgIExPR19GQVRBTF9JRihtQXNzZXRQYXRocy5zaXplKCkgPT0gMCwgIk5vIGFzc2V0cyBhZGRlZCB0byBBc3NldE1hbmFnZXIiKTsKLSAgICB9Ci0KLSAgICBpZiAobUNhY2hlTW9kZSAhPSBDQUNIRV9PRkYgJiYgIW1DYWNoZVZhbGlkKQotICAgICAgICBjb25zdF9jYXN0PEFzc2V0TWFuYWdlcio+KHRoaXMpLT5sb2FkRmlsZU5hbWVDYWNoZUxvY2tlZCgpOwotCi0gICAgY29uc3Qgc2l6ZV90IE4gPSBtQXNzZXRQYXRocy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBBc3NldCogYXNzID0gTlVMTDsKLSAgICAgICAgUmVzVGFibGUqIHNoYXJlZFJlcyA9IE5VTEw7Ci0gICAgICAgIGJvb2wgc2hhcmVkID0gdHJ1ZTsKLSAgICAgICAgY29uc3QgYXNzZXRfcGF0aCYgYXAgPSBtQXNzZXRQYXRocy5pdGVtQXQoaSk7Ci0gICAgICAgIE1ZX1RSQUNFX0JFR0lOKGFwLnBhdGguc3RyaW5nKCkpOwotICAgICAgICBBc3NldCogaWRtYXAgPSBvcGVuSWRtYXBMb2NrZWQoYXApOwotICAgICAgICBBTE9HVigiTG9va2luZyBmb3IgcmVzb3VyY2UgYXNzZXQgaW4gJyVzJ1xuIiwgYXAucGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgIGlmIChhcC50eXBlICE9IGtGaWxlVHlwZURpcmVjdG9yeSkgewotICAgICAgICAgICAgaWYgKGkgPT0gMCkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBpdGVtIGlzIHR5cGljYWxseSB0aGUgZnJhbWV3b3JrIHJlc291cmNlcywKLSAgICAgICAgICAgICAgICAvLyB3aGljaCB3ZSB3YW50IHRvIGF2b2lkIHBhcnNpbmcgZXZlcnkgdGltZS4KLSAgICAgICAgICAgICAgICBzaGFyZWRSZXMgPSBjb25zdF9jYXN0PEFzc2V0TWFuYWdlcio+KHRoaXMpLT4KLSAgICAgICAgICAgICAgICAgICAgbVppcFNldC5nZXRaaXBSZXNvdXJjZVRhYmxlKGFwLnBhdGgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNoYXJlZFJlcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgYXNzID0gY29uc3RfY2FzdDxBc3NldE1hbmFnZXIqPih0aGlzKS0+Ci0gICAgICAgICAgICAgICAgICAgIG1aaXBTZXQuZ2V0WmlwUmVzb3VyY2VUYWJsZUFzc2V0KGFwLnBhdGgpOwotICAgICAgICAgICAgICAgIGlmIChhc3MgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBBTE9HVigibG9hZGluZyByZXNvdXJjZSB0YWJsZSAlc1xuIiwgYXAucGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzcyA9IGNvbnN0X2Nhc3Q8QXNzZXRNYW5hZ2VyKj4odGhpcyktPgotICAgICAgICAgICAgICAgICAgICAgICAgb3Blbk5vbkFzc2V0SW5QYXRoTG9ja2VkKCJyZXNvdXJjZXMuYXJzYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXQ6OkFDQ0VTU19CVUZGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXApOwotICAgICAgICAgICAgICAgICAgICBpZiAoYXNzICE9IE5VTEwgJiYgYXNzICE9IGtFeGNsdWRlZEFzc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3MgPSBjb25zdF9jYXN0PEFzc2V0TWFuYWdlcio+KHRoaXMpLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtWmlwU2V0LnNldFppcFJlc291cmNlVGFibGVBc3NldChhcC5wYXRoLCBhc3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiBhc3MgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCByZXNvdXJjZSB0YWJsZSBpbiB0aGUgYXNzZXQKLSAgICAgICAgICAgICAgICAgICAgLy8gbWFuYWdlciwgdGhlbiB3ZSBhcmUgZ29pbmcgdG8gY2FjaGUgaXQgc28gdGhhdCB3ZQotICAgICAgICAgICAgICAgICAgICAvLyBjYW4gcXVpY2tseSBjb3B5IGl0IG91dCBmb3Igb3RoZXJzLgotICAgICAgICAgICAgICAgICAgICBBTE9HVigiQ3JlYXRpbmcgc2hhcmVkIHJlc291cmNlcyBmb3IgJXMiLCBhcC5wYXRoLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVzID0gbmV3IFJlc1RhYmxlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlcy0+YWRkKGFzcywgKHZvaWQqKShpKzEpLCBmYWxzZSwgaWRtYXApOwotICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZXMgPSBjb25zdF9jYXN0PEFzc2V0TWFuYWdlcio+KHRoaXMpLT4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1aaXBTZXQuc2V0WmlwUmVzb3VyY2VUYWJsZShhcC5wYXRoLCBzaGFyZWRSZXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFMT0dWKCJsb2FkaW5nIHJlc291cmNlIHRhYmxlICVzXG4iLCBhcC5wYXRoLnN0cmluZygpKTsKLSAgICAgICAgICAgIGFzcyA9IGNvbnN0X2Nhc3Q8QXNzZXRNYW5hZ2VyKj4odGhpcyktPgotICAgICAgICAgICAgICAgIG9wZW5Ob25Bc3NldEluUGF0aExvY2tlZCgicmVzb3VyY2VzLmFyc2MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NldDo6QUNDRVNTX0JVRkZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXApOwotICAgICAgICAgICAgc2hhcmVkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChhc3MgIT0gTlVMTCB8fCBzaGFyZWRSZXMgIT0gTlVMTCkgJiYgYXNzICE9IGtFeGNsdWRlZEFzc2V0KSB7Ci0gICAgICAgICAgICBpZiAocnQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIG1SZXNvdXJjZXMgPSBydCA9IG5ldyBSZXNUYWJsZSgpOwotICAgICAgICAgICAgICAgIHVwZGF0ZVJlc291cmNlUGFyYW1zTG9ja2VkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBTE9HVigiSW5zdGFsbGluZyByZXNvdXJjZSBhc3NldCAlcCBpbiB0byB0YWJsZSAlcFxuIiwgYXNzLCBtUmVzb3VyY2VzKTsKLSAgICAgICAgICAgIGlmIChzaGFyZWRSZXMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIEFMT0dWKCJDb3B5aW5nIGV4aXN0aW5nIHJlc291cmNlcyBmb3IgJXMiLCBhcC5wYXRoLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBydC0+YWRkKHNoYXJlZFJlcyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFMT0dWKCJQYXJzaW5nIHJlc291cmNlcyBmb3IgJXMiLCBhcC5wYXRoLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBydC0+YWRkKGFzcywgKHZvaWQqKShpKzEpLCAhc2hhcmVkLCBpZG1hcCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc2hhcmVkKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGFzczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoaWRtYXAgIT0gTlVMTCkgewotICAgICAgICAgICAgZGVsZXRlIGlkbWFwOwotICAgICAgICB9Ci0gICAgICAgIE1ZX1RSQUNFX0VORCgpOwotICAgIH0KLQotICAgIGlmIChyZXF1aXJlZCAmJiAhcnQpIEFMT0dXKCJVbmFibGUgdG8gZmluZCByZXNvdXJjZXMgZmlsZSByZXNvdXJjZXMuYXJzYyIpOwotICAgIGlmICghcnQpIHsKLSAgICAgICAgbVJlc291cmNlcyA9IHJ0ID0gbmV3IFJlc1RhYmxlKCk7Ci0gICAgfQotICAgIHJldHVybiBydDsKLX0KLQotdm9pZCBBc3NldE1hbmFnZXI6OnVwZGF0ZVJlc291cmNlUGFyYW1zTG9ja2VkKCkgY29uc3QKLXsKLSAgICBSZXNUYWJsZSogcmVzID0gbVJlc291cmNlczsKLSAgICBpZiAoIXJlcykgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2l6ZV90IGxsZW4gPSBtTG9jYWxlID8gc3RybGVuKG1Mb2NhbGUpIDogMDsKLSAgICBtQ29uZmlnLT5sYW5ndWFnZVswXSA9IDA7Ci0gICAgbUNvbmZpZy0+bGFuZ3VhZ2VbMV0gPSAwOwotICAgIG1Db25maWctPmNvdW50cnlbMF0gPSAwOwotICAgIG1Db25maWctPmNvdW50cnlbMV0gPSAwOwotICAgIGlmIChsbGVuID49IDIpIHsKLSAgICAgICAgbUNvbmZpZy0+bGFuZ3VhZ2VbMF0gPSBtTG9jYWxlWzBdOwotICAgICAgICBtQ29uZmlnLT5sYW5ndWFnZVsxXSA9IG1Mb2NhbGVbMV07Ci0gICAgfQotICAgIGlmIChsbGVuID49IDUpIHsKLSAgICAgICAgbUNvbmZpZy0+Y291bnRyeVswXSA9IG1Mb2NhbGVbM107Ci0gICAgICAgIG1Db25maWctPmNvdW50cnlbMV0gPSBtTG9jYWxlWzRdOwotICAgIH0KLSAgICBtQ29uZmlnLT5zaXplID0gc2l6ZW9mKCptQ29uZmlnKTsKLQotICAgIHJlcy0+c2V0UGFyYW1ldGVycyhtQ29uZmlnKTsKLX0KLQotQXNzZXQqIEFzc2V0TWFuYWdlcjo6b3BlbklkbWFwTG9ja2VkKGNvbnN0IHN0cnVjdCBhc3NldF9wYXRoJiBhcCkgY29uc3QKLXsKLSAgICBBc3NldCogYXNzID0gTlVMTDsKLSAgICBpZiAoYXAuaWRtYXAuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgYXNzID0gY29uc3RfY2FzdDxBc3NldE1hbmFnZXIqPih0aGlzKS0+Ci0gICAgICAgICAgICBvcGVuQXNzZXRGcm9tRmlsZUxvY2tlZChhcC5pZG1hcCwgQXNzZXQ6OkFDQ0VTU19CVUZGRVIpOwotICAgICAgICBpZiAoYXNzKSB7Ci0gICAgICAgICAgICBBTE9HVigibG9hZGluZyBpZG1hcCAlc1xuIiwgYXAuaWRtYXAuc3RyaW5nKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQUxPR1coImZhaWxlZCB0byBsb2FkIGlkbWFwICVzXG4iLCBhcC5pZG1hcC5zdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGFzczsKLX0KLQotY29uc3QgUmVzVGFibGUmIEFzc2V0TWFuYWdlcjo6Z2V0UmVzb3VyY2VzKGJvb2wgcmVxdWlyZWQpIGNvbnN0Ci17Ci0gICAgY29uc3QgUmVzVGFibGUqIHJ0ID0gZ2V0UmVzVGFibGUocmVxdWlyZWQpOwotICAgIHJldHVybiAqcnQ7Ci19Ci0KLWJvb2wgQXNzZXRNYW5hZ2VyOjppc1VwVG9EYXRlKCkKLXsKLSAgICBBdXRvTXV0ZXggX2wobUxvY2spOwotICAgIHJldHVybiBtWmlwU2V0LmlzVXBUb0RhdGUoKTsKLX0KLQotdm9pZCBBc3NldE1hbmFnZXI6OmdldExvY2FsZXMoVmVjdG9yPFN0cmluZzg+KiBsb2NhbGVzKSBjb25zdAotewotICAgIFJlc1RhYmxlKiByZXMgPSBtUmVzb3VyY2VzOwotICAgIGlmIChyZXMgIT0gTlVMTCkgewotICAgICAgICByZXMtPmdldExvY2FsZXMobG9jYWxlcyk7Ci0gICAgfQotfQotCi0vKgotICogT3BlbiBhIG5vbi1hc3NldCBmaWxlIGFzIGlmIGl0IHdlcmUgYW4gYXNzZXQsIHNlYXJjaGluZyBmb3IgaXQgaW4gdGhlCi0gKiBzcGVjaWZpZWQgYXBwLgotICoKLSAqIFBhc3MgaW4gYSBOVUxMIHZhbHVlcyBmb3IgImFwcE5hbWUiIGlmIHRoZSBjb21tb24gYXBwIGRpcmVjdG9yeSBzaG91bGQKLSAqIGJlIHVzZWQuCi0gKi8KLUFzc2V0KiBBc3NldE1hbmFnZXI6Om9wZW5Ob25Bc3NldEluUGF0aExvY2tlZChjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlLAotICAgIGNvbnN0IGFzc2V0X3BhdGgmIGFwKQotewotICAgIEFzc2V0KiBwQXNzZXQgPSBOVUxMOwotCi0gICAgLyogbG9vayBhdCB0aGUgZmlsZXN5c3RlbSBvbiBkaXNrICovCi0gICAgaWYgKGFwLnR5cGUgPT0ga0ZpbGVUeXBlRGlyZWN0b3J5KSB7Ci0gICAgICAgIFN0cmluZzggcGF0aChhcC5wYXRoKTsKLSAgICAgICAgcGF0aC5hcHBlbmRQYXRoKGZpbGVOYW1lKTsKLQotICAgICAgICBwQXNzZXQgPSBvcGVuQXNzZXRGcm9tRmlsZUxvY2tlZChwYXRoLCBtb2RlKTsKLQotICAgICAgICBpZiAocEFzc2V0ID09IE5VTEwpIHsKLSAgICAgICAgICAgIC8qIHRyeSBhZ2FpbiwgdGhpcyB0aW1lIHdpdGggIi5neiIgKi8KLSAgICAgICAgICAgIHBhdGguYXBwZW5kKCIuZ3oiKTsKLSAgICAgICAgICAgIHBBc3NldCA9IG9wZW5Bc3NldEZyb21GaWxlTG9ja2VkKHBhdGgsIG1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBBc3NldCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAvL3ByaW50ZigiRk9VTkQgTkEgJyVzJyBvbiBkaXNrXG4iLCBmaWxlTmFtZSk7Ci0gICAgICAgICAgICBwQXNzZXQtPnNldEFzc2V0U291cmNlKHBhdGgpOwotICAgICAgICB9Ci0KLSAgICAvKiBsb29rIGluc2lkZSB0aGUgemlwIGZpbGUgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBTdHJpbmc4IHBhdGgoZmlsZU5hbWUpOwotCi0gICAgICAgIC8qIGNoZWNrIHRoZSBhcHByb3ByaWF0ZSBaaXAgZmlsZSAqLwotICAgICAgICBaaXBGaWxlUk8qIHBaaXAgPSBnZXRaaXBGaWxlTG9ja2VkKGFwKTsKLSAgICAgICAgaWYgKHBaaXAgIT0gTlVMTCkgewotICAgICAgICAgICAgLy9wcmludGYoIkdPVCB6aXAsIGNoZWNraW5nIE5BICclcydcbiIsIChjb25zdCBjaGFyKikgcGF0aCk7Ci0gICAgICAgICAgICBaaXBFbnRyeVJPIGVudHJ5ID0gcFppcC0+ZmluZEVudHJ5QnlOYW1lKHBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAvL3ByaW50ZigiRk9VTkQgTkEgaW4gWmlwIGZpbGUgZm9yICVzXG4iLCBhcHBOYW1lID8gYXBwTmFtZSA6IGtBcHBDb21tb24pOwotICAgICAgICAgICAgICAgIHBBc3NldCA9IG9wZW5Bc3NldEZyb21aaXBMb2NrZWQocFppcCwgZW50cnksIG1vZGUsIHBhdGgpOwotICAgICAgICAgICAgICAgIHBaaXAtPnJlbGVhc2VFbnRyeShlbnRyeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocEFzc2V0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIC8qIGNyZWF0ZSBhICJzb3VyY2UiIG5hbWUsIGZvciBkZWJ1Zy9kaXNwbGF5ICovCi0gICAgICAgICAgICBwQXNzZXQtPnNldEFzc2V0U291cmNlKAotICAgICAgICAgICAgICAgICAgICBjcmVhdGVaaXBTb3VyY2VOYW1lTG9ja2VkKFppcFNldDo6Z2V0UGF0aE5hbWUoYXAucGF0aC5zdHJpbmcoKSksIFN0cmluZzgoIiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChmaWxlTmFtZSkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwQXNzZXQ7Ci19Ci0KLS8qCi0gKiBPcGVuIGFuIGFzc2V0LCBzZWFyY2hpbmcgZm9yIGl0IGluIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5IGZvciB0aGUKLSAqIHNwZWNpZmllZCBhcHAuCi0gKgotICogUGFzcyBpbiBhIE5VTEwgdmFsdWVzIGZvciAiYXBwTmFtZSIgaWYgdGhlIGNvbW1vbiBhcHAgZGlyZWN0b3J5IHNob3VsZAotICogYmUgdXNlZC4KLSAqLwotQXNzZXQqIEFzc2V0TWFuYWdlcjo6b3BlbkluUGF0aExvY2tlZChjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlLAotICAgIGNvbnN0IGFzc2V0X3BhdGgmIGFwKQotewotICAgIEFzc2V0KiBwQXNzZXQgPSBOVUxMOwotCi0gICAgLyoKLSAgICAgKiBUcnkgdmFyaW91cyBjb21iaW5hdGlvbnMgb2YgbG9jYWxlIGFuZCB2ZW5kb3IuCi0gICAgICovCi0gICAgaWYgKG1Mb2NhbGUgIT0gTlVMTCAmJiBtVmVuZG9yICE9IE5VTEwpCi0gICAgICAgIHBBc3NldCA9IG9wZW5JbkxvY2FsZVZlbmRvckxvY2tlZChmaWxlTmFtZSwgbW9kZSwgYXAsIG1Mb2NhbGUsIG1WZW5kb3IpOwotICAgIGlmIChwQXNzZXQgPT0gTlVMTCAmJiBtVmVuZG9yICE9IE5VTEwpCi0gICAgICAgIHBBc3NldCA9IG9wZW5JbkxvY2FsZVZlbmRvckxvY2tlZChmaWxlTmFtZSwgbW9kZSwgYXAsIE5VTEwsIG1WZW5kb3IpOwotICAgIGlmIChwQXNzZXQgPT0gTlVMTCAmJiBtTG9jYWxlICE9IE5VTEwpCi0gICAgICAgIHBBc3NldCA9IG9wZW5JbkxvY2FsZVZlbmRvckxvY2tlZChmaWxlTmFtZSwgbW9kZSwgYXAsIG1Mb2NhbGUsIE5VTEwpOwotICAgIGlmIChwQXNzZXQgPT0gTlVMTCkKLSAgICAgICAgcEFzc2V0ID0gb3BlbkluTG9jYWxlVmVuZG9yTG9ja2VkKGZpbGVOYW1lLCBtb2RlLCBhcCwgTlVMTCwgTlVMTCk7Ci0KLSAgICByZXR1cm4gcEFzc2V0OwotfQotCi0vKgotICogT3BlbiBhbiBhc3NldCwgc2VhcmNoaW5nIGZvciBpdCBpbiB0aGUgZGlyZWN0b3J5IGhpZXJhcmNoeSBmb3IgdGhlCi0gKiBzcGVjaWZpZWQgbG9jYWxlIGFuZCB2ZW5kb3IuCi0gKgotICogV2UgYWxzbyBzZWFyY2ggaW4gImFwcC5qYXIiLgotICoKLSAqIFBhc3MgaW4gTlVMTCB2YWx1ZXMgZm9yICJhcHBOYW1lIiwgImxvY2FsZSIsIGFuZCAidmVuZG9yIiBpZiB0aGUKLSAqIGRlZmF1bHRzIHNob3VsZCBiZSB1c2VkLgotICovCi1Bc3NldCogQXNzZXRNYW5hZ2VyOjpvcGVuSW5Mb2NhbGVWZW5kb3JMb2NrZWQoY29uc3QgY2hhciogZmlsZU5hbWUsIEFjY2Vzc01vZGUgbW9kZSwKLSAgICBjb25zdCBhc3NldF9wYXRoJiBhcCwgY29uc3QgY2hhciogbG9jYWxlLCBjb25zdCBjaGFyKiB2ZW5kb3IpCi17Ci0gICAgQXNzZXQqIHBBc3NldCA9IE5VTEw7Ci0KLSAgICBpZiAoYXAudHlwZSA9PSBrRmlsZVR5cGVEaXJlY3RvcnkpIHsKLSAgICAgICAgaWYgKG1DYWNoZU1vZGUgPT0gQ0FDSEVfT0ZGKSB7Ci0gICAgICAgICAgICAvKiBsb29rIGF0IHRoZSBmaWxlc3lzdGVtIG9uIGRpc2sgKi8KLSAgICAgICAgICAgIFN0cmluZzggcGF0aChjcmVhdGVQYXRoTmFtZUxvY2tlZChhcCwgbG9jYWxlLCB2ZW5kb3IpKTsKLSAgICAgICAgICAgIHBhdGguYXBwZW5kUGF0aChmaWxlTmFtZSk7Ci0KLSAgICAgICAgICAgIFN0cmluZzggZXhjbHVkZU5hbWUocGF0aCk7Ci0gICAgICAgICAgICBleGNsdWRlTmFtZS5hcHBlbmQoa0V4Y2x1ZGVFeHRlbnNpb24pOwotICAgICAgICAgICAgaWYgKDo6Z2V0RmlsZVR5cGUoZXhjbHVkZU5hbWUuc3RyaW5nKCkpICE9IGtGaWxlVHlwZU5vbmV4aXN0ZW50KSB7Ci0gICAgICAgICAgICAgICAgLyogc2F5IG5vIG1vcmUgKi8KLSAgICAgICAgICAgICAgICAvL3ByaW50ZigiKysrIGV4Y2x1ZGluZyAnJXMnXG4iLCAoY29uc3QgY2hhciopIGV4Y2x1ZGVOYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4ga0V4Y2x1ZGVkQXNzZXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBBc3NldCA9IG9wZW5Bc3NldEZyb21GaWxlTG9ja2VkKHBhdGgsIG1vZGUpOwotCi0gICAgICAgICAgICBpZiAocEFzc2V0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAvKiB0cnkgYWdhaW4sIHRoaXMgdGltZSB3aXRoICIuZ3oiICovCi0gICAgICAgICAgICAgICAgcGF0aC5hcHBlbmQoIi5neiIpOwotICAgICAgICAgICAgICAgIHBBc3NldCA9IG9wZW5Bc3NldEZyb21GaWxlTG9ja2VkKHBhdGgsIG1vZGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocEFzc2V0ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcEFzc2V0LT5zZXRBc3NldFNvdXJjZShwYXRoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIGZpbmQgaW4gY2FjaGUgKi8KLSAgICAgICAgICAgIFN0cmluZzggcGF0aChjcmVhdGVQYXRoTmFtZUxvY2tlZChhcCwgbG9jYWxlLCB2ZW5kb3IpKTsKLSAgICAgICAgICAgIHBhdGguYXBwZW5kUGF0aChmaWxlTmFtZSk7Ci0KLSAgICAgICAgICAgIEFzc2V0RGlyOjpGaWxlSW5mbyB0bXBJbmZvOwotICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotCi0gICAgICAgICAgICBTdHJpbmc4IGV4Y2x1ZGVOYW1lKHBhdGgpOwotICAgICAgICAgICAgZXhjbHVkZU5hbWUuYXBwZW5kKGtFeGNsdWRlRXh0ZW5zaW9uKTsKLQotICAgICAgICAgICAgaWYgKG1DYWNoZS5pbmRleE9mKGV4Y2x1ZGVOYW1lKSAhPSBOQU1FX05PVF9GT1VORCkgewotICAgICAgICAgICAgICAgIC8qIGdvIG5vIGZhcnRoZXIgKi8KLSAgICAgICAgICAgICAgICAvL3ByaW50ZigiKysrIEV4Y2x1ZGluZyAnJXMnXG4iLCAoY29uc3QgY2hhciopIGV4Y2x1ZGVOYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4ga0V4Y2x1ZGVkQXNzZXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBGaWxlIGNvbXByZXNzaW9uIGV4dGVuc2lvbnMgKCIuZ3oiKSBkb24ndCBnZXQgc3RvcmVkIGluIHRoZQotICAgICAgICAgICAgICogbmFtZSBjYWNoZSwgc28gd2UgaGF2ZSB0byB0cnkgYm90aCBoZXJlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAobUNhY2hlLmluZGV4T2YocGF0aCkgIT0gTkFNRV9OT1RfRk9VTkQpIHsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcEFzc2V0ID0gb3BlbkFzc2V0RnJvbUZpbGVMb2NrZWQocGF0aCwgbW9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBBc3NldCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIHRyeSBhZ2FpbiwgdGhpcyB0aW1lIHdpdGggIi5neiIgKi8KLSAgICAgICAgICAgICAgICAgICAgcGF0aC5hcHBlbmQoIi5neiIpOwotICAgICAgICAgICAgICAgICAgICBwQXNzZXQgPSBvcGVuQXNzZXRGcm9tRmlsZUxvY2tlZChwYXRoLCBtb2RlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChwQXNzZXQgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBwQXNzZXQtPnNldEFzc2V0U291cmNlKHBhdGgpOwotCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogRG9uJ3QgY29udGludWUgdGhlIHNlYXJjaCBpbnRvIHRoZSBaaXAgZmlsZXMuICBPdXIgY2FjaGVkIGluZm8KLSAgICAgICAgICAgICAqIHNhaWQgaXQgd2FzIGEgZmlsZSBvbiBkaXNrOyB0byBiZSBjb25zaXN0ZW50IHdpdGggb3BlbkRpcigpCi0gICAgICAgICAgICAgKiB3ZSB3YW50IHRvIHJldHVybiB0aGUgbG9vc2UgYXNzZXQuICBJZiB0aGUgY2FjaGVkIGZpbGUgZ2V0cwotICAgICAgICAgICAgICogcmVtb3ZlZCwgd2UgZmFpbC4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBUaGUgYWx0ZXJuYXRpdmUgaXMgdG8gdXBkYXRlIG91ciBjYWNoZSB3aGVuIGZpbGVzIGdldCBkZWxldGVkLAotICAgICAgICAgICAgICogb3IgbWFrZSBzb21lIHNvcnQgb2YgImJlc3QgZWZmb3J0IiBwcm9taXNlLCBidXQgZm9yIG5vdyBJJ20KLSAgICAgICAgICAgICAqIHRha2luZyB0aGUgaGFyZCBsaW5lLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoZm91bmQpIHsKLSAgICAgICAgICAgICAgICBpZiAocEFzc2V0ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIEFMT0dEKCJFeHBlY3RlZCBmaWxlIG5vdCBmb3VuZDogJyVzJ1xuIiwgcGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBBc3NldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogRWl0aGVyIGl0IHdhc24ndCBmb3VuZCBvbiBkaXNrIG9yIG9uIHRoZSBjYWNoZWQgdmlldyBvZiB0aGUgZGlzay4KLSAgICAgKiBEaWcgdGhyb3VnaCB0aGUgY3VycmVudGx5LW9wZW5lZCBzZXQgb2YgWmlwIGZpbGVzLiAgSWYgY2FjaGluZwotICAgICAqIGlzIGRpc2FibGVkLCB0aGUgWmlwIGZpbGUgbWF5IGdldCByZW9wZW5lZC4KLSAgICAgKi8KLSAgICBpZiAocEFzc2V0ID09IE5VTEwgJiYgYXAudHlwZSA9PSBrRmlsZVR5cGVSZWd1bGFyKSB7Ci0gICAgICAgIFN0cmluZzggcGF0aDsKLQotICAgICAgICBwYXRoLmFwcGVuZFBhdGgoKGxvY2FsZSAhPSBOVUxMKSA/IGxvY2FsZSA6IGtEZWZhdWx0TG9jYWxlKTsKLSAgICAgICAgcGF0aC5hcHBlbmRQYXRoKCh2ZW5kb3IgIT0gTlVMTCkgPyB2ZW5kb3IgOiBrRGVmYXVsdFZlbmRvcik7Ci0gICAgICAgIHBhdGguYXBwZW5kUGF0aChmaWxlTmFtZSk7Ci0KLSAgICAgICAgLyogY2hlY2sgdGhlIGFwcHJvcHJpYXRlIFppcCBmaWxlICovCi0gICAgICAgIFppcEZpbGVSTyogcFppcCA9IGdldFppcEZpbGVMb2NrZWQoYXApOwotICAgICAgICBpZiAocFppcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAvL3ByaW50ZigiR09UIHppcCwgY2hlY2tpbmcgJyVzJ1xuIiwgKGNvbnN0IGNoYXIqKSBwYXRoKTsKLSAgICAgICAgICAgIFppcEVudHJ5Uk8gZW50cnkgPSBwWmlwLT5maW5kRW50cnlCeU5hbWUocGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBpZiAoZW50cnkgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJGT1VORCBpbiBaaXAgZmlsZSBmb3IgJXMvJXMtJXNcbiIsCi0gICAgICAgICAgICAgICAgLy8gICAgYXBwTmFtZSwgbG9jYWxlLCB2ZW5kb3IpOwotICAgICAgICAgICAgICAgIHBBc3NldCA9IG9wZW5Bc3NldEZyb21aaXBMb2NrZWQocFppcCwgZW50cnksIG1vZGUsIHBhdGgpOwotICAgICAgICAgICAgICAgIHBaaXAtPnJlbGVhc2VFbnRyeShlbnRyeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocEFzc2V0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIC8qIGNyZWF0ZSBhICJzb3VyY2UiIG5hbWUsIGZvciBkZWJ1Zy9kaXNwbGF5ICovCi0gICAgICAgICAgICBwQXNzZXQtPnNldEFzc2V0U291cmNlKGNyZWF0ZVppcFNvdXJjZU5hbWVMb2NrZWQoWmlwU2V0OjpnZXRQYXRoTmFtZShhcC5wYXRoLnN0cmluZygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KCIiKSwgU3RyaW5nOChmaWxlTmFtZSkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwQXNzZXQ7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYSAic291cmNlIG5hbWUiIGZvciBhIGZpbGUgZnJvbSBhIFppcCBhcmNoaXZlLgotICovCi1TdHJpbmc4IEFzc2V0TWFuYWdlcjo6Y3JlYXRlWmlwU291cmNlTmFtZUxvY2tlZChjb25zdCBTdHJpbmc4JiB6aXBGaWxlTmFtZSwKLSAgICBjb25zdCBTdHJpbmc4JiBkaXJOYW1lLCBjb25zdCBTdHJpbmc4JiBmaWxlTmFtZSkKLXsKLSAgICBTdHJpbmc4IHNvdXJjZU5hbWUoInppcDoiKTsKLSAgICBzb3VyY2VOYW1lLmFwcGVuZCh6aXBGaWxlTmFtZSk7Ci0gICAgc291cmNlTmFtZS5hcHBlbmQoIjoiKTsKLSAgICBpZiAoZGlyTmFtZS5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgc291cmNlTmFtZS5hcHBlbmRQYXRoKGRpck5hbWUpOwotICAgIH0KLSAgICBzb3VyY2VOYW1lLmFwcGVuZFBhdGgoZmlsZU5hbWUpOwotICAgIHJldHVybiBzb3VyY2VOYW1lOwotfQotCi0vKgotICogQ3JlYXRlIGEgcGF0aCB0byBhIGxvb3NlIGFzc2V0IChhc3NldC1iYXNlL2FwcC9sb2NhbGUvdmVuZG9yKS4KLSAqLwotU3RyaW5nOCBBc3NldE1hbmFnZXI6OmNyZWF0ZVBhdGhOYW1lTG9ja2VkKGNvbnN0IGFzc2V0X3BhdGgmIGFwLCBjb25zdCBjaGFyKiBsb2NhbGUsCi0gICAgY29uc3QgY2hhciogdmVuZG9yKQotewotICAgIFN0cmluZzggcGF0aChhcC5wYXRoKTsKLSAgICBwYXRoLmFwcGVuZFBhdGgoKGxvY2FsZSAhPSBOVUxMKSA/IGxvY2FsZSA6IGtEZWZhdWx0TG9jYWxlKTsKLSAgICBwYXRoLmFwcGVuZFBhdGgoKHZlbmRvciAhPSBOVUxMKSA/IHZlbmRvciA6IGtEZWZhdWx0VmVuZG9yKTsKLSAgICByZXR1cm4gcGF0aDsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIHBhdGggdG8gYSBsb29zZSBhc3NldCAoYXNzZXQtYmFzZS9hcHAvcm9vdERpcikuCi0gKi8KLVN0cmluZzggQXNzZXRNYW5hZ2VyOjpjcmVhdGVQYXRoTmFtZUxvY2tlZChjb25zdCBhc3NldF9wYXRoJiBhcCwgY29uc3QgY2hhciogcm9vdERpcikKLXsKLSAgICBTdHJpbmc4IHBhdGgoYXAucGF0aCk7Ci0gICAgaWYgKHJvb3REaXIgIT0gTlVMTCkgcGF0aC5hcHBlbmRQYXRoKHJvb3REaXIpOwotICAgIHJldHVybiBwYXRoOwotfQotCi0vKgotICogUmV0dXJuIGEgcG9pbnRlciB0byBvbmUgb2Ygb3VyIG9wZW4gWmlwIGFyY2hpdmVzLiAgUmV0dXJucyBOVUxMIGlmIG5vCi0gKiBtYXRjaGluZyBaaXAgZmlsZSBleGlzdHMuCi0gKgotICogUmlnaHQgbm93IHdlIGhhdmUgMiBwb3NzaWJsZSBaaXAgZmlsZXMgKDEgZWFjaCBpbiBhcHAvImNvbW1vbiIpLgotICoKLSAqIElmIGNhY2hpbmcgaXMgc2V0IHRvIENBQ0hFX09GRiwgdG8gZ2V0IHRoZSBleHBlY3RlZCBiZWhhdmlvciB3ZQotICogbmVlZCB0byByZW9wZW4gdGhlIFppcCBmaWxlIG9uIGV2ZXJ5IHJlcXVlc3QuICBUaGF0IHdvdWxkIGJlIHNpbGx5Ci0gKiBhbmQgZXhwZW5zaXZlLCBzbyBpbnN0ZWFkIHdlIGp1c3QgY2hlY2sgdGhlIGZpbGUgbW9kaWZpY2F0aW9uIGRhdGUuCi0gKgotICogUGFzcyBpbiBOVUxMIHZhbHVlcyBmb3IgImFwcE5hbWUiLCAibG9jYWxlIiwgYW5kICJ2ZW5kb3IiIGlmIHRoZQotICogZ2VuZXJpY3Mgc2hvdWxkIGJlIHVzZWQuCi0gKi8KLVppcEZpbGVSTyogQXNzZXRNYW5hZ2VyOjpnZXRaaXBGaWxlTG9ja2VkKGNvbnN0IGFzc2V0X3BhdGgmIGFwKQotewotICAgIEFMT0dWKCJnZXRaaXBGaWxlTG9ja2VkKCkgaW4gJXBcbiIsIHRoaXMpOwotCi0gICAgcmV0dXJuIG1aaXBTZXQuZ2V0WmlwKGFwLnBhdGgpOwotfQotCi0vKgotICogVHJ5IHRvIG9wZW4gYW4gYXNzZXQgZnJvbSBhIGZpbGUgb24gZGlzay4KLSAqCi0gKiBJZiB0aGUgZmlsZSBpcyBjb21wcmVzc2VkIHdpdGggZ3ppcCwgd2Ugc2VlayB0byB0aGUgc3RhcnQgb2YgdGhlCi0gKiBkZWZsYXRlZCBkYXRhIGFuZCBwYXNzIHRoYXQgaW4gKGp1c3QgbGlrZSB3ZSB3b3VsZCBmb3IgYSBaaXAgYXJjaGl2ZSkuCi0gKgotICogRm9yIHVuY29tcHJlc3NlZCBkYXRhLCB3ZSBtYXkgYWxyZWFkeSBoYXZlIGFuIG1tYXAoKWVkIHZlcnNpb24gc2l0dGluZwotICogYXJvdW5kLiAgSWYgc28sIHdlIHdhbnQgdG8gaGFuZCB0aGF0IHRvIHRoZSBBc3NldCBpbnN0ZWFkLgotICoKLSAqIFRoaXMgcmV0dXJucyBOVUxMIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIGNvdWxkbid0IGJlIG9wZW5lZCwgb3IKLSAqIGNsYWltcyB0byBiZSBhICIuZ3oiIGJ1dCBpc24ndC4KLSAqLwotQXNzZXQqIEFzc2V0TWFuYWdlcjo6b3BlbkFzc2V0RnJvbUZpbGVMb2NrZWQoY29uc3QgU3RyaW5nOCYgcGF0aE5hbWUsCi0gICAgQWNjZXNzTW9kZSBtb2RlKQotewotICAgIEFzc2V0KiBwQXNzZXQgPSBOVUxMOwotCi0gICAgaWYgKHN0cmNhc2VjbXAocGF0aE5hbWUuZ2V0UGF0aEV4dGVuc2lvbigpLnN0cmluZygpLCAiLmd6IikgPT0gMCkgewotICAgICAgICAvL3ByaW50ZigiVFJZSU5HICclcydcbiIsIChjb25zdCBjaGFyKikgcGF0aE5hbWUpOwotICAgICAgICBwQXNzZXQgPSBBc3NldDo6Y3JlYXRlRnJvbUNvbXByZXNzZWRGaWxlKHBhdGhOYW1lLnN0cmluZygpLCBtb2RlKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvL3ByaW50ZigiVFJZSU5HICclcydcbiIsIChjb25zdCBjaGFyKikgcGF0aE5hbWUpOwotICAgICAgICBwQXNzZXQgPSBBc3NldDo6Y3JlYXRlRnJvbUZpbGUocGF0aE5hbWUuc3RyaW5nKCksIG1vZGUpOwotICAgIH0KLQotICAgIHJldHVybiBwQXNzZXQ7Ci19Ci0KLS8qCi0gKiBHaXZlbiBhbiBlbnRyeSBpbiBhIFppcCBhcmNoaXZlLCBjcmVhdGUgYSBuZXcgQXNzZXQgb2JqZWN0LgotICoKLSAqIElmIHRoZSBlbnRyeSBpcyB1bmNvbXByZXNzZWQsIHdlIG1heSB3YW50IHRvIGNyZWF0ZSBvciBzaGFyZSBhCi0gKiBzbGljZSBvZiBzaGFyZWQgbWVtb3J5LgotICovCi1Bc3NldCogQXNzZXRNYW5hZ2VyOjpvcGVuQXNzZXRGcm9tWmlwTG9ja2VkKGNvbnN0IFppcEZpbGVSTyogcFppcEZpbGUsCi0gICAgY29uc3QgWmlwRW50cnlSTyBlbnRyeSwgQWNjZXNzTW9kZSBtb2RlLCBjb25zdCBTdHJpbmc4JiBlbnRyeU5hbWUpCi17Ci0gICAgQXNzZXQqIHBBc3NldCA9IE5VTEw7Ci0KLSAgICAvLyBUT0RPOiBsb29rIGZvciBwcmV2aW91c2x5LWNyZWF0ZWQgc2hhcmVkIG1lbW9yeSBzbGljZT8KLSAgICBpbnQgbWV0aG9kOwotICAgIHNpemVfdCB1bmNvbXByZXNzZWRMZW47Ci0KLSAgICAvL3ByaW50ZigiVVNJTkcgWmlwICclcydcbiIsIHBFbnRyeS0+Z2V0RmlsZU5hbWUoKSk7Ci0KLSAgICAvL3BaaXBGaWxlLT5nZXRFbnRyeUluZm8oZW50cnksICZtZXRob2QsICZ1bmNvbXByZXNzZWRMZW4sICZjb21wcmVzc2VkTGVuLAotICAgIC8vICAgICZvZmZzZXQpOwotICAgIGlmICghcFppcEZpbGUtPmdldEVudHJ5SW5mbyhlbnRyeSwgJm1ldGhvZCwgJnVuY29tcHJlc3NlZExlbiwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgIE5VTEwsIE5VTEwpKQotICAgIHsKLSAgICAgICAgQUxPR1coImdldEVudHJ5SW5mbyBmYWlsZWRcbiIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBGaWxlTWFwKiBkYXRhTWFwID0gcFppcEZpbGUtPmNyZWF0ZUVudHJ5RmlsZU1hcChlbnRyeSk7Ci0gICAgaWYgKGRhdGFNYXAgPT0gTlVMTCkgewotICAgICAgICBBTE9HVygiY3JlYXRlIG1hcCBmcm9tIGVudHJ5IGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmIChtZXRob2QgPT0gWmlwRmlsZVJPOjprQ29tcHJlc3NTdG9yZWQpIHsKLSAgICAgICAgcEFzc2V0ID0gQXNzZXQ6OmNyZWF0ZUZyb21VbmNvbXByZXNzZWRNYXAoZGF0YU1hcCwgbW9kZSk7Ci0gICAgICAgIEFMT0dWKCJPcGVuZWQgdW5jb21wcmVzc2VkIGVudHJ5ICVzIGluIHppcCAlcyBtb2RlICVkOiAlcCIsIGVudHJ5TmFtZS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBkYXRhTWFwLT5nZXRGaWxlTmFtZSgpLCBtb2RlLCBwQXNzZXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBBc3NldCA9IEFzc2V0OjpjcmVhdGVGcm9tQ29tcHJlc3NlZE1hcChkYXRhTWFwLCBtZXRob2QsCi0gICAgICAgICAgICB1bmNvbXByZXNzZWRMZW4sIG1vZGUpOwotICAgICAgICBBTE9HVigiT3BlbmVkIGNvbXByZXNzZWQgZW50cnkgJXMgaW4gemlwICVzIG1vZGUgJWQ6ICVwIiwgZW50cnlOYW1lLnN0cmluZygpLAotICAgICAgICAgICAgICAgIGRhdGFNYXAtPmdldEZpbGVOYW1lKCksIG1vZGUsIHBBc3NldCk7Ci0gICAgfQotICAgIGlmIChwQXNzZXQgPT0gTlVMTCkgewotICAgICAgICAvKiB1bmV4cGVjdGVkICovCi0gICAgICAgIEFMT0dXKCJjcmVhdGUgZnJvbSBzZWdtZW50IGZhaWxlZFxuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBBc3NldDsKLX0KLQotCi0KLS8qCi0gKiBPcGVuIGEgZGlyZWN0b3J5IGluIHRoZSBhc3NldCBuYW1lc3BhY2UuCi0gKgotICogQW4gImFzc2V0IGRpcmVjdG9yeSIgaXMgc2ltcGx5IHRoZSBjb21iaW5hdGlvbiBvZiBhbGwgZmlsZXMgaW4gYWxsCi0gKiBsb2NhdGlvbnMsIHdpdGggIi5neiIgc3RyaXBwZWQgZm9yIGxvb3NlIGZpbGVzLiAgV2l0aCBhcHAsIGxvY2FsZSwgYW5kCi0gKiB2ZW5kb3IgZGVmaW5lZCwgd2UgaGF2ZSA4IGRpcmVjdG9yaWVzIGFuZCAyIFppcCBhcmNoaXZlcyB0byBzY2FuLgotICoKLSAqIFBhc3MgaW4gIiIgZm9yIHRoZSByb290IGRpci4KLSAqLwotQXNzZXREaXIqIEFzc2V0TWFuYWdlcjo6b3BlbkRpcihjb25zdCBjaGFyKiBkaXJOYW1lKQotewotICAgIEF1dG9NdXRleCBfbChtTG9jayk7Ci0KLSAgICBBc3NldERpciogcERpciA9IE5VTEw7Ci0gICAgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBNZXJnZWRJbmZvID0gTlVMTDsKLQotICAgIExPR19GQVRBTF9JRihtQXNzZXRQYXRocy5zaXplKCkgPT0gMCwgIk5vIGFzc2V0cyBhZGRlZCB0byBBc3NldE1hbmFnZXIiKTsKLSAgICBhc3NlcnQoZGlyTmFtZSAhPSBOVUxMKTsKLQotICAgIC8vcHJpbnRmKCIrKysgb3BlbkRpciglcykgaW4gJyVzJ1xuIiwgZGlyTmFtZSwgKGNvbnN0IGNoYXIqKSBtQXNzZXRCYXNlKTsKLQotICAgIGlmIChtQ2FjaGVNb2RlICE9IENBQ0hFX09GRiAmJiAhbUNhY2hlVmFsaWQpCi0gICAgICAgIGxvYWRGaWxlTmFtZUNhY2hlTG9ja2VkKCk7Ci0KLSAgICBwRGlyID0gbmV3IEFzc2V0RGlyOwotCi0gICAgLyoKLSAgICAgKiBTY2FuIHRoZSB2YXJpb3VzIGRpcmVjdG9yaWVzLCBtZXJnaW5nIHdoYXQgd2UgZmluZCBpbnRvIGEgc2luZ2xlCi0gICAgICogdmVjdG9yLiAgV2Ugd2FudCB0byBzY2FuIHRoZW0gaW4gcmV2ZXJzZSBwcmlvcml0eSBvcmRlciBzbyB0aGF0Ci0gICAgICogdGhlICIuRVhDTFVERSIgcHJvY2Vzc2luZyB3b3JrcyBjb3JyZWN0bHkuICBBbHNvLCBpZiB3ZSBkZWNpZGUgd2UKLSAgICAgKiB3YW50IHRvIHJlbWVtYmVyIHdoZXJlIHRoZSBmaWxlIGlzIGNvbWluZyBmcm9tLCB3ZSdsbCBnZXQgdGhlIHJpZ2h0Ci0gICAgICogdmVyc2lvbi4KLSAgICAgKgotICAgICAqIFdlIHN0YXJ0IHdpdGggWmlwIGFyY2hpdmVzLCB0aGVuIGRvIGxvb3NlIGZpbGVzLgotICAgICAqLwotICAgIHBNZXJnZWRJbmZvID0gbmV3IFNvcnRlZFZlY3RvcjxBc3NldERpcjo6RmlsZUluZm8+OwotCi0gICAgc2l6ZV90IGkgPSBtQXNzZXRQYXRocy5zaXplKCk7Ci0gICAgd2hpbGUgKGkgPiAwKSB7Ci0gICAgICAgIGktLTsKLSAgICAgICAgY29uc3QgYXNzZXRfcGF0aCYgYXAgPSBtQXNzZXRQYXRocy5pdGVtQXQoaSk7Ci0gICAgICAgIGlmIChhcC50eXBlID09IGtGaWxlVHlwZVJlZ3VsYXIpIHsKLSAgICAgICAgICAgIEFMT0dWKCJBZGRpbmcgZGlyZWN0b3J5ICVzIGZyb20gemlwICVzIiwgZGlyTmFtZSwgYXAucGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBzY2FuQW5kTWVyZ2VaaXBMb2NrZWQocE1lcmdlZEluZm8sIGFwLCBrQXNzZXRzUm9vdCwgZGlyTmFtZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HVigiQWRkaW5nIGRpcmVjdG9yeSAlcyBmcm9tIGRpciAlcyIsIGRpck5hbWUsIGFwLnBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgc2NhbkFuZE1lcmdlRGlyTG9ja2VkKHBNZXJnZWRJbmZvLCBhcCwga0Fzc2V0c1Jvb3QsIGRpck5hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWYgMAotICAgIHByaW50ZigiRklMRSBMSVNUOlxuIik7Ci0gICAgZm9yIChpID0gMDsgaSA8IChzaXplX3QpIHBNZXJnZWRJbmZvLT5zaXplKCk7IGkrKykgewotICAgICAgICBwcmludGYoIiAlZDogKCVkKSAnJXMnXG4iLCBpLAotICAgICAgICAgICAgcE1lcmdlZEluZm8tPml0ZW1BdChpKS5nZXRGaWxlVHlwZSgpLAotICAgICAgICAgICAgKGNvbnN0IGNoYXIqKSBwTWVyZ2VkSW5mby0+aXRlbUF0KGkpLmdldEZpbGVOYW1lKCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgcERpci0+c2V0RmlsZUxpc3QocE1lcmdlZEluZm8pOwotICAgIHJldHVybiBwRGlyOwotfQotCi0vKgotICogT3BlbiBhIGRpcmVjdG9yeSBpbiB0aGUgbm9uLWFzc2V0IG5hbWVzcGFjZS4KLSAqCi0gKiBBbiAiYXNzZXQgZGlyZWN0b3J5IiBpcyBzaW1wbHkgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCBmaWxlcyBpbiBhbGwKLSAqIGxvY2F0aW9ucywgd2l0aCAiLmd6IiBzdHJpcHBlZCBmb3IgbG9vc2UgZmlsZXMuICBXaXRoIGFwcCwgbG9jYWxlLCBhbmQKLSAqIHZlbmRvciBkZWZpbmVkLCB3ZSBoYXZlIDggZGlyZWN0b3JpZXMgYW5kIDIgWmlwIGFyY2hpdmVzIHRvIHNjYW4uCi0gKgotICogUGFzcyBpbiAiIiBmb3IgdGhlIHJvb3QgZGlyLgotICovCi1Bc3NldERpciogQXNzZXRNYW5hZ2VyOjpvcGVuTm9uQXNzZXREaXIodm9pZCogY29va2llLCBjb25zdCBjaGFyKiBkaXJOYW1lKQotewotICAgIEF1dG9NdXRleCBfbChtTG9jayk7Ci0KLSAgICBBc3NldERpciogcERpciA9IE5VTEw7Ci0gICAgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBNZXJnZWRJbmZvID0gTlVMTDsKLQotICAgIExPR19GQVRBTF9JRihtQXNzZXRQYXRocy5zaXplKCkgPT0gMCwgIk5vIGFzc2V0cyBhZGRlZCB0byBBc3NldE1hbmFnZXIiKTsKLSAgICBhc3NlcnQoZGlyTmFtZSAhPSBOVUxMKTsKLQotICAgIC8vcHJpbnRmKCIrKysgb3BlbkRpciglcykgaW4gJyVzJ1xuIiwgZGlyTmFtZSwgKGNvbnN0IGNoYXIqKSBtQXNzZXRCYXNlKTsKLQotICAgIGlmIChtQ2FjaGVNb2RlICE9IENBQ0hFX09GRiAmJiAhbUNhY2hlVmFsaWQpCi0gICAgICAgIGxvYWRGaWxlTmFtZUNhY2hlTG9ja2VkKCk7Ci0KLSAgICBwRGlyID0gbmV3IEFzc2V0RGlyOwotCi0gICAgcE1lcmdlZEluZm8gPSBuZXcgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz47Ci0KLSAgICBjb25zdCBzaXplX3Qgd2hpY2ggPSAoKHNpemVfdCljb29raWUpLTE7Ci0KLSAgICBpZiAod2hpY2ggPCBtQXNzZXRQYXRocy5zaXplKCkpIHsKLSAgICAgICAgY29uc3QgYXNzZXRfcGF0aCYgYXAgPSBtQXNzZXRQYXRocy5pdGVtQXQod2hpY2gpOwotICAgICAgICBpZiAoYXAudHlwZSA9PSBrRmlsZVR5cGVSZWd1bGFyKSB7Ci0gICAgICAgICAgICBBTE9HVigiQWRkaW5nIGRpcmVjdG9yeSAlcyBmcm9tIHppcCAlcyIsIGRpck5hbWUsIGFwLnBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgc2NhbkFuZE1lcmdlWmlwTG9ja2VkKHBNZXJnZWRJbmZvLCBhcCwgTlVMTCwgZGlyTmFtZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HVigiQWRkaW5nIGRpcmVjdG9yeSAlcyBmcm9tIGRpciAlcyIsIGRpck5hbWUsIGFwLnBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgc2NhbkFuZE1lcmdlRGlyTG9ja2VkKHBNZXJnZWRJbmZvLCBhcCwgTlVMTCwgZGlyTmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiAwCi0gICAgcHJpbnRmKCJGSUxFIExJU1Q6XG4iKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgKHNpemVfdCkgcE1lcmdlZEluZm8tPnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiICVkOiAoJWQpICclcydcbiIsIGksCi0gICAgICAgICAgICBwTWVyZ2VkSW5mby0+aXRlbUF0KGkpLmdldEZpbGVUeXBlKCksCi0gICAgICAgICAgICAoY29uc3QgY2hhciopIHBNZXJnZWRJbmZvLT5pdGVtQXQoaSkuZ2V0RmlsZU5hbWUoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBwRGlyLT5zZXRGaWxlTGlzdChwTWVyZ2VkSW5mbyk7Ci0gICAgcmV0dXJuIHBEaXI7Ci19Ci0KLS8qCi0gKiBTY2FuIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBhbmQgbWVyZ2UgdGhlbSBpbnRvIHRoZQotICogInBNZXJnZWRJbmZvIiB2ZWN0b3IsIHJlbW92aW5nIHByZXZpb3VzIGVudHJpZXMgaWYgd2UgZmluZCAiZXhjbHVkZSIKLSAqIGRpcmVjdGl2ZXMuCi0gKgotICogUmV0dXJucyAiZmFsc2UiIGlmIHdlIGZvdW5kIG5vdGhpbmcgdG8gY29udHJpYnV0ZS4KLSAqLwotYm9vbCBBc3NldE1hbmFnZXI6OnNjYW5BbmRNZXJnZURpckxvY2tlZChTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogcE1lcmdlZEluZm8sCi0gICAgY29uc3QgYXNzZXRfcGF0aCYgYXAsIGNvbnN0IGNoYXIqIHJvb3REaXIsIGNvbnN0IGNoYXIqIGRpck5hbWUpCi17Ci0gICAgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBDb250ZW50czsKLSAgICBTdHJpbmc4IHBhdGg7Ci0KLSAgICBhc3NlcnQocE1lcmdlZEluZm8gIT0gTlVMTCk7Ci0KLSAgICAvL3ByaW50Zigic2NhbkFuZE1lcmdlRGlyOiAlcyAlcyAlcyAlc1xuIiwgYXBwTmFtZSwgbG9jYWxlLCB2ZW5kb3IsZGlyTmFtZSk7Ci0KLSAgICBpZiAobUNhY2hlVmFsaWQpIHsKLSAgICAgICAgaW50IGksIHN0YXJ0LCBjb3VudDsKLQotICAgICAgICBwQ29udGVudHMgPSBuZXcgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz47Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogR2V0IHRoZSBiYXNpYyBwYXJ0aWFsIHBhdGggYW5kIGZpbmQgaXQgaW4gdGhlIGNhY2hlLiAgVGhhdCdzCi0gICAgICAgICAqIHRoZSBzdGFydCBwb2ludCBmb3IgdGhlIHNlYXJjaC4KLSAgICAgICAgICovCi0gICAgICAgIHBhdGggPSBjcmVhdGVQYXRoTmFtZUxvY2tlZChhcCwgcm9vdERpcik7Ci0gICAgICAgIGlmIChkaXJOYW1lWzBdICE9ICdcMCcpCi0gICAgICAgICAgICBwYXRoLmFwcGVuZFBhdGgoZGlyTmFtZSk7Ci0KLSAgICAgICAgc3RhcnQgPSBtQ2FjaGUuaW5kZXhPZihwYXRoKTsKLSAgICAgICAgaWYgKHN0YXJ0ID09IE5BTUVfTk9UX0ZPVU5EKSB7Ci0gICAgICAgICAgICAvL3ByaW50ZigiKysrIG5vdCBmb3VuZCBpbiBjYWNoZTogZGlyICclcydcbiIsIChjb25zdCBjaGFyKikgcGF0aCk7Ci0gICAgICAgICAgICBkZWxldGUgcENvbnRlbnRzOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhlIG1hdGNoIHN0cmluZyBsb29rcyBsaWtlICJjb21tb24vZGVmYXVsdC9kZWZhdWx0L2Zvby9iYXIvIi4KLSAgICAgICAgICogVGhlICcvJyBvbiB0aGUgZW5kIGVuc3VyZXMgdGhhdCB3ZSBkb24ndCBtYXRjaCBvbiB0aGUgZGlyZWN0b3J5Ci0gICAgICAgICAqIGl0c2VsZiBvciBvbiAiLi4uL2Zvby9iYXJmeS8iLgotICAgICAgICAgKi8KLSAgICAgICAgcGF0aC5hcHBlbmQoIi8iKTsKLQotICAgICAgICBjb3VudCA9IG1DYWNoZS5zaXplKCk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogUGljayBvdXQgdGhlIHN0dWZmIGluIHRoZSBjdXJyZW50IGRpciBieSBleGFtaW5pbmcgdGhlIHBhdGhuYW1lLgotICAgICAgICAgKiBJdCBuZWVkcyB0byBtYXRjaCB0aGUgcGFydGlhbCBwYXRobmFtZSBwcmVmaXgsIGFuZCBub3QgaGF2ZSBhICcvJwotICAgICAgICAgKiAoZnNzZXApIGFueXdoZXJlIGFmdGVyIHRoZSBwcmVmaXguCi0gICAgICAgICAqLwotICAgICAgICBmb3IgKGkgPSBzdGFydCsxOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKG1DYWNoZVtpXS5nZXRGaWxlTmFtZSgpLmxlbmd0aCgpID4gcGF0aC5sZW5ndGgoKSAmJgotICAgICAgICAgICAgICAgIHN0cm5jbXAobUNhY2hlW2ldLmdldEZpbGVOYW1lKCkuc3RyaW5nKCksIHBhdGguc3RyaW5nKCksIHBhdGgubGVuZ3RoKCkpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IG1DYWNoZVtpXS5nZXRGaWxlTmFtZSgpLnN0cmluZygpOwotICAgICAgICAgICAgICAgIC8vIFhYWCBUSElTIElTIEJST0tFTiEgIExvb2tzIGxpa2Ugd2UgbmVlZCB0byBzdG9yZSB0aGUgZnVsbAotICAgICAgICAgICAgICAgIC8vIHBhdGggcHJlZml4IHNlcGFyYXRlbHkgZnJvbSB0aGUgZmlsZSBwYXRoLgotICAgICAgICAgICAgICAgIGlmIChzdHJjaHIobmFtZSArIHBhdGgubGVuZ3RoKCksICcvJykgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAvKiBncmFiIGl0LCByZWR1Y2luZyBwYXRoIHRvIGp1c3QgdGhlIGZpbGVuYW1lIGNvbXBvbmVudCAqLwotICAgICAgICAgICAgICAgICAgICBBc3NldERpcjo6RmlsZUluZm8gdG1wID0gbUNhY2hlW2ldOwotICAgICAgICAgICAgICAgICAgICB0bXAuc2V0RmlsZU5hbWUodG1wLmdldEZpbGVOYW1lKCkuZ2V0UGF0aExlYWYoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBDb250ZW50cy0+YWRkKHRtcCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBubyBsb25nZXIgaW4gdGhlIGRpciBvciBpdHMgc3ViZGlycyAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBwYXRoID0gY3JlYXRlUGF0aE5hbWVMb2NrZWQoYXAsIHJvb3REaXIpOwotICAgICAgICBpZiAoZGlyTmFtZVswXSAhPSAnXDAnKQotICAgICAgICAgICAgcGF0aC5hcHBlbmRQYXRoKGRpck5hbWUpOwotICAgICAgICBwQ29udGVudHMgPSBzY2FuRGlyTG9ja2VkKHBhdGgpOwotICAgICAgICBpZiAocENvbnRlbnRzID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gaWYgd2Ugd2FudGVkIHRvIGRvIGFuIGluY3JlbWVudGFsIGNhY2hlIGZpbGwsIHdlIHdvdWxkIGRvIGl0IGhlcmUKLQotICAgIC8qCi0gICAgICogUHJvY2VzcyAiZXhjbHVkZSIgZGlyZWN0aXZlcy4gIElmIHdlIGZpbmQgYSBmaWxlbmFtZSB0aGF0IGVuZHMgd2l0aAotICAgICAqICIuRVhDTFVERSIsIHdlIGxvb2sgZm9yIGEgbWF0Y2hpbmcgZW50cnkgaW4gdGhlICJtZXJnZWQiIHNldCwgYW5kCi0gICAgICogcmVtb3ZlIGl0IGlmIHdlIGZpbmQgaXQuICBXZSBhbHNvIGRlbGV0ZSB0aGUgImV4Y2x1ZGUiIGVudHJ5LgotICAgICAqLwotICAgIGludCBpLCBjb3VudCwgZXhjbEV4dExlbjsKLQotICAgIGNvdW50ID0gcENvbnRlbnRzLT5zaXplKCk7Ci0gICAgZXhjbEV4dExlbiA9IHN0cmxlbihrRXhjbHVkZUV4dGVuc2lvbik7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZTsKLSAgICAgICAgaW50IG5hbWVMZW47Ci0KLSAgICAgICAgbmFtZSA9IHBDb250ZW50cy0+aXRlbUF0KGkpLmdldEZpbGVOYW1lKCkuc3RyaW5nKCk7Ci0gICAgICAgIG5hbWVMZW4gPSBzdHJsZW4obmFtZSk7Ci0gICAgICAgIGlmIChuYW1lTGVuID4gZXhjbEV4dExlbiAmJgotICAgICAgICAgICAgc3RyY21wKG5hbWUgKyAobmFtZUxlbiAtIGV4Y2xFeHRMZW4pLCBrRXhjbHVkZUV4dGVuc2lvbikgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nOCBtYXRjaChuYW1lLCBuYW1lTGVuIC0gZXhjbEV4dExlbik7Ci0gICAgICAgICAgICBpbnQgbWF0Y2hJZHg7Ci0KLSAgICAgICAgICAgIG1hdGNoSWR4ID0gQXNzZXREaXI6OkZpbGVJbmZvOjpmaW5kRW50cnkocE1lcmdlZEluZm8sIG1hdGNoKTsKLSAgICAgICAgICAgIGlmIChtYXRjaElkeCA+IDApIHsKLSAgICAgICAgICAgICAgICBBTE9HVigiRXhjbHVkaW5nICclcycgWyVzXVxuIiwKLSAgICAgICAgICAgICAgICAgICAgcE1lcmdlZEluZm8tPml0ZW1BdChtYXRjaElkeCkuZ2V0RmlsZU5hbWUoKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgcE1lcmdlZEluZm8tPml0ZW1BdChtYXRjaElkeCkuZ2V0U291cmNlTmFtZSgpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBwTWVyZ2VkSW5mby0+cmVtb3ZlQXQobWF0Y2hJZHgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvL3ByaW50ZigiKysrIG5vIG1hdGNoIG9uICclcydcbiIsIChjb25zdCBjaGFyKikgbWF0Y2gpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBTE9HRCgiSEVZOiBzaXplPSVkIHJlbW92aW5nICVkXG4iLCAoaW50KXBDb250ZW50cy0+c2l6ZSgpLCBpKTsKLSAgICAgICAgICAgIHBDb250ZW50cy0+cmVtb3ZlQXQoaSk7Ci0gICAgICAgICAgICBpLS07ICAgICAgICAvLyBhZGp1c3QgImZvciIgbG9vcAotICAgICAgICAgICAgY291bnQtLTsgICAgLy8gIGFuZCBsb29wIGxpbWl0Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtZXJnZUluZm9Mb2NrZWQocE1lcmdlZEluZm8sIHBDb250ZW50cyk7Ci0KLSAgICBkZWxldGUgcENvbnRlbnRzOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBTY2FuIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwgYW5kIHN0dWZmIHdoYXQgd2UgZmluZAotICogaW50byBhIG5ld2x5LWFsbG9jYXRlZCB2ZWN0b3IuCi0gKgotICogRmlsZXMgZW5kaW5nIGluICIuZ3oiIHdpbGwgaGF2ZSB0aGVpciBleHRlbnNpb25zIHJlbW92ZWQuCi0gKgotICogV2Ugc2hvdWxkIHByb2JhYmx5IHRoaW5rIGFib3V0IHNraXBwaW5nIGZpbGVzIHdpdGggImlsbGVnYWwiIG5hbWVzLAotICogZS5nLiBpbGxlZ2FsIGNoYXJhY3RlcnMgKC9cOikgb3IgZXhjZXNzaXZlIGxlbmd0aC4KLSAqCi0gKiBSZXR1cm5zIE5VTEwgaWYgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgZG9lc24ndCBleGlzdC4KLSAqLwotU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIEFzc2V0TWFuYWdlcjo6c2NhbkRpckxvY2tlZChjb25zdCBTdHJpbmc4JiBwYXRoKQotewotICAgIFNvcnRlZFZlY3RvcjxBc3NldERpcjo6RmlsZUluZm8+KiBwQ29udGVudHMgPSBOVUxMOwotICAgIERJUiogZGlyOwotICAgIHN0cnVjdCBkaXJlbnQqIGVudHJ5OwotICAgIEZpbGVUeXBlIGZpbGVUeXBlOwotCi0gICAgQUxPR1YoIlNjYW5uaW5nIGRpciAnJXMnXG4iLCBwYXRoLnN0cmluZygpKTsKLQotICAgIGRpciA9IG9wZW5kaXIocGF0aC5zdHJpbmcoKSk7Ci0gICAgaWYgKGRpciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHBDb250ZW50cyA9IG5ldyBTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPjsKLQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGVudHJ5ID0gcmVhZGRpcihkaXIpOwotICAgICAgICBpZiAoZW50cnkgPT0gTlVMTCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChzdHJjbXAoZW50cnktPmRfbmFtZSwgIi4iKSA9PSAwIHx8Ci0gICAgICAgICAgICBzdHJjbXAoZW50cnktPmRfbmFtZSwgIi4uIikgPT0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0jaWZkZWYgX0RJUkVOVF9IQVZFX0RfVFlQRQotICAgICAgICBpZiAoZW50cnktPmRfdHlwZSA9PSBEVF9SRUcpCi0gICAgICAgICAgICBmaWxlVHlwZSA9IGtGaWxlVHlwZVJlZ3VsYXI7Ci0gICAgICAgIGVsc2UgaWYgKGVudHJ5LT5kX3R5cGUgPT0gRFRfRElSKQotICAgICAgICAgICAgZmlsZVR5cGUgPSBrRmlsZVR5cGVEaXJlY3Rvcnk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZpbGVUeXBlID0ga0ZpbGVUeXBlVW5rbm93bjsKLSNlbHNlCi0gICAgICAgIC8vIHN0YXQgdGhlIGZpbGUKLSAgICAgICAgZmlsZVR5cGUgPSA6OmdldEZpbGVUeXBlKHBhdGguYXBwZW5kUGF0aENvcHkoZW50cnktPmRfbmFtZSkuc3RyaW5nKCkpOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKGZpbGVUeXBlICE9IGtGaWxlVHlwZVJlZ3VsYXIgJiYgZmlsZVR5cGUgIT0ga0ZpbGVUeXBlRGlyZWN0b3J5KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQXNzZXREaXI6OkZpbGVJbmZvIGluZm87Ci0gICAgICAgIGluZm8uc2V0KFN0cmluZzgoZW50cnktPmRfbmFtZSksIGZpbGVUeXBlKTsKLSAgICAgICAgaWYgKHN0cmNhc2VjbXAoaW5mby5nZXRGaWxlTmFtZSgpLmdldFBhdGhFeHRlbnNpb24oKS5zdHJpbmcoKSwgIi5neiIpID09IDApCi0gICAgICAgICAgICBpbmZvLnNldEZpbGVOYW1lKGluZm8uZ2V0RmlsZU5hbWUoKS5nZXRCYXNlUGF0aCgpKTsKLSAgICAgICAgaW5mby5zZXRTb3VyY2VOYW1lKHBhdGguYXBwZW5kUGF0aENvcHkoaW5mby5nZXRGaWxlTmFtZSgpKSk7Ci0gICAgICAgIHBDb250ZW50cy0+YWRkKGluZm8pOwotICAgIH0KLQotICAgIGNsb3NlZGlyKGRpcik7Ci0gICAgcmV0dXJuIHBDb250ZW50czsKLX0KLQotLyoKLSAqIFNjYW4gdGhlIGNvbnRlbnRzIG91dCBvZiB0aGUgc3BlY2lmaWVkIFppcCBhcmNoaXZlLCBhbmQgbWVyZ2Ugd2hhdCB3ZQotICogZmluZCBpbnRvICJwTWVyZ2VkSW5mbyIuICBJZiB0aGUgWmlwIGFyY2hpdmUgaW4gcXVlc3Rpb24gZG9lc24ndCBleGlzdCwKLSAqIHdlIHJldHVybiBpbW1lZGlhdGVseS4KLSAqCi0gKiBSZXR1cm5zICJmYWxzZSIgaWYgd2UgZm91bmQgbm90aGluZyB0byBjb250cmlidXRlLgotICovCi1ib29sIEFzc2V0TWFuYWdlcjo6c2NhbkFuZE1lcmdlWmlwTG9ja2VkKFNvcnRlZFZlY3RvcjxBc3NldERpcjo6RmlsZUluZm8+KiBwTWVyZ2VkSW5mbywKLSAgICBjb25zdCBhc3NldF9wYXRoJiBhcCwgY29uc3QgY2hhciogcm9vdERpciwgY29uc3QgY2hhciogYmFzZURpck5hbWUpCi17Ci0gICAgWmlwRmlsZVJPKiBwWmlwOwotICAgIFZlY3RvcjxTdHJpbmc4PiBkaXJzOwotICAgIEFzc2V0RGlyOjpGaWxlSW5mbyBpbmZvOwotICAgIFNvcnRlZFZlY3RvcjxBc3NldERpcjo6RmlsZUluZm8+IGNvbnRlbnRzOwotICAgIFN0cmluZzggc291cmNlTmFtZSwgemlwTmFtZSwgZGlyTmFtZTsKLQotICAgIHBaaXAgPSBtWmlwU2V0LmdldFppcChhcC5wYXRoKTsKLSAgICBpZiAocFppcCA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dXKCJGYWlsdXJlIG9wZW5pbmcgemlwICVzXG4iLCBhcC5wYXRoLnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHppcE5hbWUgPSBaaXBTZXQ6OmdldFBhdGhOYW1lKGFwLnBhdGguc3RyaW5nKCkpOwotCi0gICAgLyogY29udmVydCAic291bmRzIiB0byAicm9vdERpci9zb3VuZHMiICovCi0gICAgaWYgKHJvb3REaXIgIT0gTlVMTCkgZGlyTmFtZSA9IHJvb3REaXI7Ci0gICAgZGlyTmFtZS5hcHBlbmRQYXRoKGJhc2VEaXJOYW1lKTsKLQotICAgIC8qCi0gICAgICogU2NhbiB0aHJvdWdoIHRoZSBsaXN0IG9mIGZpbGVzLCBsb29raW5nIGZvciBhIG1hdGNoLiAgVGhlIGZpbGVzIGluCi0gICAgICogdGhlIFppcCB0YWJsZSBvZiBjb250ZW50cyBhcmUgbm90IGluIHNvcnRlZCBvcmRlciwgc28gd2UgaGF2ZSB0bwotICAgICAqIHByb2Nlc3MgdGhlIGVudGlyZSBsaXN0LiAgV2UncmUgbG9va2luZyBmb3IgYSBzdHJpbmcgdGhhdCBiZWdpbnMKLSAgICAgKiB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluICJkaXJOYW1lIiwgaXMgZm9sbG93ZWQgYnkgYSAnLycsIGFuZCBoYXMgbm8KLSAgICAgKiBzdWJzZXF1ZW50ICcvJyBpbiB0aGUgc3R1ZmYgdGhhdCBmb2xsb3dzLgotICAgICAqCi0gICAgICogV2hhdCBtYWtlcyB0aGlzIGVzcGVjaWFsbHkgZnVuIGlzIHRoYXQgZGlyZWN0b3JpZXMgYXJlIG5vdCBzdG9yZWQKLSAgICAgKiBleHBsaWNpdGx5IGluIFppcCBhcmNoaXZlcywgc28gd2UgaGF2ZSB0byBpbmZlciB0aGVtIGZyb20gY29udGV4dC4KLSAgICAgKiBXaGVuIHdlIHNlZSAic291bmRzL2Zvby53YXYiIHdlIGhhdmUgdG8gbGVhdmUgYSBub3RlIHRvIG91cnNlbHZlcwotICAgICAqIHRvIGluc2VydCBhIGRpcmVjdG9yeSBjYWxsZWQgInNvdW5kcyIgaW50byB0aGUgbGlzdC4gIFdlIHN0b3JlCi0gICAgICogdGhlc2UgaW4gdGVtcG9yYXJ5IHZlY3RvciBzbyB0aGF0IHdlIG9ubHkgcmV0dXJuIGVhY2ggb25lIG9uY2UuCi0gICAgICoKLSAgICAgKiBOYW1lIGNvbXBhcmlzb25zIGFyZSBjYXNlLXNlbnNpdGl2ZSB0byBtYXRjaCBVTklYIGZpbGVzeXN0ZW0KLSAgICAgKiBzZW1hbnRpY3MuCi0gICAgICovCi0gICAgaW50IGRpck5hbWVMZW4gPSBkaXJOYW1lLmxlbmd0aCgpOwotICAgIHZvaWQgKml0ZXJhdGlvbkNvb2tpZTsKLSAgICBpZiAoIXBaaXAtPnN0YXJ0SXRlcmF0aW9uKCZpdGVyYXRpb25Db29raWUpKSB7Ci0gICAgICAgIEFMT0dXKCJaaXBGaWxlUk86OnN0YXJ0SXRlcmF0aW9uIHJldHVybmVkIGZhbHNlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBaaXBFbnRyeVJPIGVudHJ5OwotICAgIHdoaWxlICgoZW50cnkgPSBwWmlwLT5uZXh0RW50cnkoaXRlcmF0aW9uQ29va2llKSkgIT0gTlVMTCkgewotICAgICAgICBjaGFyIG5hbWVCdWZbMjU2XTsKLQotICAgICAgICBpZiAocFppcC0+Z2V0RW50cnlGaWxlTmFtZShlbnRyeSwgbmFtZUJ1Ziwgc2l6ZW9mKG5hbWVCdWYpKSAhPSAwKSB7Ci0gICAgICAgICAgICAvLyBUT0RPOiBmaXggdGhpcyBpZiB3ZSBleHBlY3QgdG8gaGF2ZSBsb25nIG5hbWVzCi0gICAgICAgICAgICBBTE9HRSgiQVJHSDogbmFtZSB0b28gbG9uZz9cbiIpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy9wcmludGYoIkNvbXBhcmluZyAlcyBpbiAlcz9cbiIsIG5hbWVCdWYsIGRpck5hbWUuc3RyaW5nKCkpOwotICAgICAgICBpZiAoZGlyTmFtZUxlbiA9PSAwIHx8Ci0gICAgICAgICAgICAoc3RybmNtcChuYW1lQnVmLCBkaXJOYW1lLnN0cmluZygpLCBkaXJOYW1lTGVuKSA9PSAwICYmCi0gICAgICAgICAgICAgbmFtZUJ1ZltkaXJOYW1lTGVuXSA9PSAnLycpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBjcDsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5leHRTbGFzaDsKLQotICAgICAgICAgICAgY3AgPSBuYW1lQnVmICsgZGlyTmFtZUxlbjsKLSAgICAgICAgICAgIGlmIChkaXJOYW1lTGVuICE9IDApCi0gICAgICAgICAgICAgICAgY3ArKzsgICAgICAgLy8gYWR2YW5jZSBwYXN0IHRoZSAnLycKLQotICAgICAgICAgICAgbmV4dFNsYXNoID0gc3RyY2hyKGNwLCAnLycpOwotLy94eHggdGhpcyBtYXkgYnJlYWsgaWYgdGhlcmUgYXJlIGJhcmUgZGlyZWN0b3J5IGVudHJpZXMKLSAgICAgICAgICAgIGlmIChuZXh0U2xhc2ggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIC8qIHRoaXMgaXMgYSBmaWxlIGluIHRoZSByZXF1ZXN0ZWQgZGlyZWN0b3J5ICovCi0KLSAgICAgICAgICAgICAgICBpbmZvLnNldChTdHJpbmc4KG5hbWVCdWYpLmdldFBhdGhMZWFmKCksIGtGaWxlVHlwZVJlZ3VsYXIpOwotCi0gICAgICAgICAgICAgICAgaW5mby5zZXRTb3VyY2VOYW1lKAotICAgICAgICAgICAgICAgICAgICBjcmVhdGVaaXBTb3VyY2VOYW1lTG9ja2VkKHppcE5hbWUsIGRpck5hbWUsIGluZm8uZ2V0RmlsZU5hbWUoKSkpOwotCi0gICAgICAgICAgICAgICAgY29udGVudHMuYWRkKGluZm8pOwotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJGT1VORDogZmlsZSAnJXMnXG4iLCBpbmZvLmdldEZpbGVOYW1lKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiB0aGlzIGlzIGEgc3ViZGlyOyBhZGQgaXQgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGl0Ki8KLSAgICAgICAgICAgICAgICBTdHJpbmc4IHN1YmRpck5hbWUoY3AsIG5leHRTbGFzaCAtIGNwKTsKLSAgICAgICAgICAgICAgICBzaXplX3QgajsKLSAgICAgICAgICAgICAgICBzaXplX3QgTiA9IGRpcnMuc2l6ZSgpOwotCi0gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IE47IGorKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3ViZGlyTmFtZSA9PSBkaXJzW2pdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaiA9PSBOKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRpcnMuYWRkKHN1YmRpck5hbWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJGT1VORDogZGlyICclcydcbiIsIHN1YmRpck5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcFppcC0+ZW5kSXRlcmF0aW9uKGl0ZXJhdGlvbkNvb2tpZSk7Ci0KLSAgICAvKgotICAgICAqIEFkZCB0aGUgc2V0IG9mIHVuaXF1ZSBkaXJlY3Rvcmllcy4KLSAgICAgKi8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpIGRpcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaW5mby5zZXQoZGlyc1tpXSwga0ZpbGVUeXBlRGlyZWN0b3J5KTsKLSAgICAgICAgaW5mby5zZXRTb3VyY2VOYW1lKAotICAgICAgICAgICAgY3JlYXRlWmlwU291cmNlTmFtZUxvY2tlZCh6aXBOYW1lLCBkaXJOYW1lLCBpbmZvLmdldEZpbGVOYW1lKCkpKTsKLSAgICAgICAgY29udGVudHMuYWRkKGluZm8pOwotICAgIH0KLQotICAgIG1lcmdlSW5mb0xvY2tlZChwTWVyZ2VkSW5mbywgJmNvbnRlbnRzKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0KLS8qCi0gKiBNZXJnZSB0d28gdmVjdG9ycyBvZiBGaWxlSW5mby4KLSAqCi0gKiBUaGUgbWVyZ2VkIGNvbnRlbnRzIHdpbGwgYmUgc3R1ZmZlZCBpbnRvICpwTWVyZ2VkSW5mby4KLSAqCi0gKiBJZiBhbiBlbnRyeSBmb3IgYSBmaWxlIGV4aXN0cyBpbiBib3RoICJwTWVyZ2VkSW5mbyIgYW5kICJwQ29udGVudHMiLAotICogd2UgdXNlIHRoZSBuZXdlciAicENvbnRlbnRzIiBlbnRyeS4KLSAqLwotdm9pZCBBc3NldE1hbmFnZXI6Om1lcmdlSW5mb0xvY2tlZChTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogcE1lcmdlZEluZm8sCi0gICAgY29uc3QgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBDb250ZW50cykKLXsKLSAgICAvKgotICAgICAqIE1lcmdlIHdoYXQgd2UgZm91bmQgaW4gdGhpcyBkaXJlY3Rvcnkgd2l0aCB3aGF0IHdlIGZvdW5kIGluCi0gICAgICogb3RoZXIgcGxhY2VzLgotICAgICAqCi0gICAgICogVHdvIGJhc2ljIGFwcHJvYWNoZXM6Ci0gICAgICogKDEpIENyZWF0ZSBhIG5ldyBhcnJheSB0aGF0IGhvbGRzIHRoZSB1bmlxdWUgdmFsdWVzIG9mIHRoZSB0d28KLSAgICAgKiAgICAgYXJyYXlzLgotICAgICAqICgyKSBUYWtlIHRoZSBlbGVtZW50cyBmcm9tIHBDb250ZW50cyBhbmQgc2hvdmUgdGhlbSBpbnRvIHBNZXJnZWRJbmZvLgotICAgICAqCi0gICAgICogQmVjYXVzZSB0aGVzZSBhcmUgdmVjdG9ycyBvZiBjb21wbGV4IG9iamVjdHMsIG1vdmluZyBlbGVtZW50cyBhcm91bmQKLSAgICAgKiBpbnNpZGUgdGhlIHZlY3RvciByZXF1aXJlcyBjb25zdHJ1Y3RpbmcgbmV3IG9iamVjdHMgYW5kIGFsbG9jYXRpbmcKLSAgICAgKiBzdG9yYWdlIGZvciBtZW1iZXJzLiAgV2l0aCBhcHByb2FjaCAjMSwgd2UncmUgYWx3YXlzIGFkZGluZyB0byB0aGUKLSAgICAgKiBlbmQsIHdoZXJlYXMgd2l0aCAjMiB3ZSBjb3VsZCBiZSBpbnNlcnRpbmcgbXVsdGlwbGUgZWxlbWVudHMgYXQgdGhlCi0gICAgICogZnJvbnQgb2YgdGhlIHZlY3Rvci4gIEFwcHJvYWNoICMxIHJlcXVpcmVzIGEgZnVsbCBjb3B5IG9mIHRoZQotICAgICAqIGNvbnRlbnRzIG9mIHBNZXJnZWRJbmZvLCBidXQgYXBwcm9hY2ggIzIgcmVxdWlyZXMgdGhlIHNhbWUgY29weSBmb3IKLSAgICAgKiBldmVyeSBpbnNlcnRpb24gYXQgdGhlIGZyb250IG9mIHBNZXJnZWRJbmZvLgotICAgICAqCi0gICAgICogKFdlIHNob3VsZCBwcm9iYWJseSB1c2UgYSBTb3J0ZWRWZWN0b3IgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHVzIHRvCi0gICAgICoganVzdCBzdHVmZiBpdGVtcyBpbiwgdHJ1c3RpbmcgdXMgdG8gbWFpbnRhaW4gdGhlIHNvcnQgb3JkZXIuKQotICAgICAqLwotICAgIFNvcnRlZFZlY3RvcjxBc3NldERpcjo6RmlsZUluZm8+KiBwTmV3U29ydGVkOwotICAgIGludCBtZXJnZU1heCwgY29udE1heDsKLSAgICBpbnQgbWVyZ2VJZHgsIGNvbnRJZHg7Ci0KLSAgICBwTmV3U29ydGVkID0gbmV3IFNvcnRlZFZlY3RvcjxBc3NldERpcjo6RmlsZUluZm8+OwotICAgIG1lcmdlTWF4ID0gcE1lcmdlZEluZm8tPnNpemUoKTsKLSAgICBjb250TWF4ID0gcENvbnRlbnRzLT5zaXplKCk7Ci0gICAgbWVyZ2VJZHggPSBjb250SWR4ID0gMDsKLQotICAgIHdoaWxlIChtZXJnZUlkeCA8IG1lcmdlTWF4IHx8IGNvbnRJZHggPCBjb250TWF4KSB7Ci0gICAgICAgIGlmIChtZXJnZUlkeCA9PSBtZXJnZU1heCkgewotICAgICAgICAgICAgLyogaGl0IGVuZCBvZiAibWVyZ2UiIGxpc3QsIGNvcHkgcmVzdCBvZiAiY29udGVudHMiICovCi0gICAgICAgICAgICBwTmV3U29ydGVkLT5hZGQocENvbnRlbnRzLT5pdGVtQXQoY29udElkeCkpOwotICAgICAgICAgICAgY29udElkeCsrOwotICAgICAgICB9IGVsc2UgaWYgKGNvbnRJZHggPT0gY29udE1heCkgewotICAgICAgICAgICAgLyogaGl0IGVuZCBvZiAiY29udCIgbGlzdCwgY29weSByZXN0IG9mICJtZXJnZSIgKi8KLSAgICAgICAgICAgIHBOZXdTb3J0ZWQtPmFkZChwTWVyZ2VkSW5mby0+aXRlbUF0KG1lcmdlSWR4KSk7Ci0gICAgICAgICAgICBtZXJnZUlkeCsrOwotICAgICAgICB9IGVsc2UgaWYgKHBNZXJnZWRJbmZvLT5pdGVtQXQobWVyZ2VJZHgpID09IHBDb250ZW50cy0+aXRlbUF0KGNvbnRJZHgpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvKiBpdGVtcyBhcmUgaWRlbnRpY2FsLCBhZGQgbmV3ZXIgYW5kIGFkdmFuY2UgYm90aCBpbmRpY2VzICovCi0gICAgICAgICAgICBwTmV3U29ydGVkLT5hZGQocENvbnRlbnRzLT5pdGVtQXQoY29udElkeCkpOwotICAgICAgICAgICAgbWVyZ2VJZHgrKzsKLSAgICAgICAgICAgIGNvbnRJZHgrKzsKLSAgICAgICAgfSBlbHNlIGlmIChwTWVyZ2VkSW5mby0+aXRlbUF0KG1lcmdlSWR4KSA8IHBDb250ZW50cy0+aXRlbUF0KGNvbnRJZHgpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvKiAibWVyZ2UiIGlzIGxvd2VyLCBhZGQgdGhhdCBvbmUgKi8KLSAgICAgICAgICAgIHBOZXdTb3J0ZWQtPmFkZChwTWVyZ2VkSW5mby0+aXRlbUF0KG1lcmdlSWR4KSk7Ci0gICAgICAgICAgICBtZXJnZUlkeCsrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogImNvbnQiIGlzIGxvd2VyLCBhZGQgdGhhdCBvbmUgKi8KLSAgICAgICAgICAgIGFzc2VydChwQ29udGVudHMtPml0ZW1BdChjb250SWR4KSA8IHBNZXJnZWRJbmZvLT5pdGVtQXQobWVyZ2VJZHgpKTsKLSAgICAgICAgICAgIHBOZXdTb3J0ZWQtPmFkZChwQ29udGVudHMtPml0ZW1BdChjb250SWR4KSk7Ci0gICAgICAgICAgICBjb250SWR4Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIE92ZXJ3cml0ZSB0aGUgIm1lcmdlZCIgbGlzdCB3aXRoIHRoZSBuZXcgc3R1ZmYuCi0gICAgICovCi0gICAgKnBNZXJnZWRJbmZvID0gKnBOZXdTb3J0ZWQ7Ci0gICAgZGVsZXRlIHBOZXdTb3J0ZWQ7Ci0KLSNpZiAwICAgICAgIC8vIGZvciBWZWN0b3IsIHJhdGhlciB0aGFuIFNvcnRlZFZlY3RvcgotICAgIGludCBpLCBqOwotICAgIGZvciAoaSA9IHBDb250ZW50cy0+c2l6ZSgpIC0xOyBpID49IDA7IGktLSkgewotICAgICAgICBib29sIGFkZCA9IHRydWU7Ci0KLSAgICAgICAgZm9yIChqID0gcE1lcmdlZEluZm8tPnNpemUoKSAtMTsgaiA+PSAwOyBqLS0pIHsKLSAgICAgICAgICAgIC8qIGNhc2Utc2Vuc2l0aXZlIGNvbXBhcmlzb25zLCB0byBiZWhhdmUgbGlrZSBVTklYIGZzICovCi0gICAgICAgICAgICBpZiAoc3RyY21wKHBDb250ZW50cy0+aXRlbUF0KGkpLm1GaWxlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgcE1lcmdlZEluZm8tPml0ZW1BdChqKS5tRmlsZU5hbWUpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogbWF0Y2gsIGRvbid0IGFkZCB0aGlzIGVudHJ5ICovCi0gICAgICAgICAgICAgICAgYWRkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWRkKQotICAgICAgICAgICAgcE1lcmdlZEluZm8tPmFkZChwQ29udGVudHMtPml0ZW1BdChpKSk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLQotLyoKLSAqIExvYWQgYWxsIGZpbGVzIGludG8gdGhlIGZpbGUgbmFtZSBjYWNoZS4gIFdlIHdhbnQgdG8gZG8gdGhpcyBhY3Jvc3MKLSAqIGFsbCBjb21iaW5hdGlvbnMgb2YgeyBhcHBuYW1lLCBsb2NhbGUsIHZlbmRvciB9LCBwZXJmb3JtaW5nIGEgcmVjdXJzaXZlCi0gKiBkaXJlY3RvcnkgdHJhdmVyc2FsLgotICoKLSAqIFRoaXMgaXMgbm90IHRoZSBtb3N0IGVmZmljaWVudCBkYXRhIHN0cnVjdHVyZS4gIEFsc28sIGdhdGhlcmluZyB0aGUKLSAqIGluZm9ybWF0aW9uIGFzIHdlIG5lZWRlZCBpdCAoZmlsZS1ieS1maWxlIG9yIGRpcmVjdG9yeS1ieS1kaXJlY3RvcnkpCi0gKiB3b3VsZCBiZSBmYXN0ZXIuICBIb3dldmVyLCBvbiB0aGUgYWN0dWFsIGRldmljZSwgOTklIG9mIHRoZSBmaWxlcyB3aWxsCi0gKiBsaXZlIGluIFppcCBhcmNoaXZlcywgc28gdGhpcyBsaXN0IHdpbGwgYmUgdmVyeSBzbWFsbC4gIFRoZSB0cm91YmxlCi0gKiBpcyB0aGF0IHdlIGhhdmUgdG8gY2hlY2sgdGhlICJsb29zZSIgZmlsZXMgZmlyc3QsIHNvIGl0J3MgaW1wb3J0YW50Ci0gKiB0aGF0IHdlIGRvbid0IGJlYXQgdGhlIGZpbGVzeXN0ZW0gc2lsbHkgbG9va2luZyBmb3IgZmlsZXMgdGhhdCBhcmVuJ3QKLSAqIHRoZXJlLgotICoKLSAqIE5vdGUgb24gdGhyZWFkIHNhZmV0eTogdGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IGNhdXNlcyB1cGRhdGVzCi0gKiB0byBtQ2FjaGUsIGFuZCBhbnlib2R5IHdobyB0cmllcyB0byB1c2UgaXQgd2lsbCBjYWxsIGhlcmUgaWYgIW1DYWNoZVZhbGlkLAotICogc28gd2UgbmVlZCB0byBlbXBsb3kgYSBtdXRleCBoZXJlLgotICovCi12b2lkIEFzc2V0TWFuYWdlcjo6bG9hZEZpbGVOYW1lQ2FjaGVMb2NrZWQodm9pZCkKLXsKLSAgICBhc3NlcnQoIW1DYWNoZVZhbGlkKTsKLSAgICBhc3NlcnQobUNhY2hlLnNpemUoKSA9PSAwKTsKLQotI2lmZGVmIERPX1RJTUlOR1MgICAvLyBuZWVkIHRvIGxpbmsgYWdhaW5zdCAtbHJ0IGZvciB0aGlzIG5vdwotICAgIER1cmF0aW9uVGltZXIgdGltZXI7Ci0gICAgdGltZXIuc3RhcnQoKTsKLSNlbmRpZgotCi0gICAgZm5jU2NhbkxvY2tlZCgmbUNhY2hlLCAiIik7Ci0KLSNpZmRlZiBET19USU1JTkdTCi0gICAgdGltZXIuc3RvcCgpOwotICAgIEFMT0dEKCJDYWNoZSBzY2FuIHRvb2sgJS4zZm1zXG4iLAotICAgICAgICB0aW1lci5kdXJhdGlvblVzZWNzKCkgLyAxMDAwLjApOwotI2VuZGlmCi0KLSNpZiAwCi0gICAgaW50IGk7Ci0gICAgcHJpbnRmKCJDQUNIRUQgRklMRSBMSVNUICglZCBlbnRyaWVzKTpcbiIsIG1DYWNoZS5zaXplKCkpOwotICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBtQ2FjaGUuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgcHJpbnRmKCIgJWQ6ICglZCkgJyVzJ1xuIiwgaSwKLSAgICAgICAgICAgIG1DYWNoZS5pdGVtQXQoaSkuZ2V0RmlsZVR5cGUoKSwKLSAgICAgICAgICAgIChjb25zdCBjaGFyKikgbUNhY2hlLml0ZW1BdChpKS5nZXRGaWxlTmFtZSgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIG1DYWNoZVZhbGlkID0gdHJ1ZTsKLX0KLQotLyoKLSAqIFNjYW4gdXAgdG8gOCB2ZXJzaW9ucyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeS4KLSAqLwotdm9pZCBBc3NldE1hbmFnZXI6OmZuY1NjYW5Mb2NrZWQoU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBNZXJnZWRJbmZvLAotICAgIGNvbnN0IGNoYXIqIGRpck5hbWUpCi17Ci0gICAgc2l6ZV90IGkgPSBtQXNzZXRQYXRocy5zaXplKCk7Ci0gICAgd2hpbGUgKGkgPiAwKSB7Ci0gICAgICAgIGktLTsKLSAgICAgICAgY29uc3QgYXNzZXRfcGF0aCYgYXAgPSBtQXNzZXRQYXRocy5pdGVtQXQoaSk7Ci0gICAgICAgIGZuY1NjYW5BbmRNZXJnZURpckxvY2tlZChwTWVyZ2VkSW5mbywgYXAsIE5VTEwsIE5VTEwsIGRpck5hbWUpOwotICAgICAgICBpZiAobUxvY2FsZSAhPSBOVUxMKQotICAgICAgICAgICAgZm5jU2NhbkFuZE1lcmdlRGlyTG9ja2VkKHBNZXJnZWRJbmZvLCBhcCwgbUxvY2FsZSwgTlVMTCwgZGlyTmFtZSk7Ci0gICAgICAgIGlmIChtVmVuZG9yICE9IE5VTEwpCi0gICAgICAgICAgICBmbmNTY2FuQW5kTWVyZ2VEaXJMb2NrZWQocE1lcmdlZEluZm8sIGFwLCBOVUxMLCBtVmVuZG9yLCBkaXJOYW1lKTsKLSAgICAgICAgaWYgKG1Mb2NhbGUgIT0gTlVMTCAmJiBtVmVuZG9yICE9IE5VTEwpCi0gICAgICAgICAgICBmbmNTY2FuQW5kTWVyZ2VEaXJMb2NrZWQocE1lcmdlZEluZm8sIGFwLCBtTG9jYWxlLCBtVmVuZG9yLCBkaXJOYW1lKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiBSZWN1cnNpdmVseSBzY2FuIHRoaXMgZGlyZWN0b3J5IGFuZCBhbGwgc3ViZGlycy4KLSAqCi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gc2NhbkFuZE1lcmdlRGlyLCBidXQgd2UgZG9uJ3QgcmVtb3ZlIHRoZSAuRVhDTFVERQotICogZmlsZXMsIGFuZCB3ZSBwcmVwZW5kIHRoZSBleHRlbmRlZCBwYXJ0aWFsIHBhdGggdG8gdGhlIGZpbGVuYW1lcy4KLSAqLwotYm9vbCBBc3NldE1hbmFnZXI6OmZuY1NjYW5BbmRNZXJnZURpckxvY2tlZCgKLSAgICBTb3J0ZWRWZWN0b3I8QXNzZXREaXI6OkZpbGVJbmZvPiogcE1lcmdlZEluZm8sCi0gICAgY29uc3QgYXNzZXRfcGF0aCYgYXAsIGNvbnN0IGNoYXIqIGxvY2FsZSwgY29uc3QgY2hhciogdmVuZG9yLAotICAgIGNvbnN0IGNoYXIqIGRpck5hbWUpCi17Ci0gICAgU29ydGVkVmVjdG9yPEFzc2V0RGlyOjpGaWxlSW5mbz4qIHBDb250ZW50czsKLSAgICBTdHJpbmc4IHBhcnRpYWxQYXRoOwotICAgIFN0cmluZzggZnVsbFBhdGg7Ci0KLSAgICAvLyBYWFggVGhpcyBpcyBicm9rZW4gLS0gdGhlIGZpbGVuYW1lIGNhY2hlIG5lZWRzIHRvIGhvbGQgdGhlIGJhc2UKLSAgICAvLyBhc3NldCBwYXRoIHNlcGFyYXRlbHkgZnJvbSBpdHMgZmlsZW5hbWUuCi0KLSAgICBwYXJ0aWFsUGF0aCA9IGNyZWF0ZVBhdGhOYW1lTG9ja2VkKGFwLCBsb2NhbGUsIHZlbmRvcik7Ci0gICAgaWYgKGRpck5hbWVbMF0gIT0gJ1wwJykgewotICAgICAgICBwYXJ0aWFsUGF0aC5hcHBlbmRQYXRoKGRpck5hbWUpOwotICAgIH0KLQotICAgIGZ1bGxQYXRoID0gcGFydGlhbFBhdGg7Ci0gICAgcENvbnRlbnRzID0gc2NhbkRpckxvY2tlZChmdWxsUGF0aCk7Ci0gICAgaWYgKHBDb250ZW50cyA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgLy8gZGlyZWN0b3J5IGRpZCBub3QgZXhpc3QKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFNjYW4gYWxsIHN1YmRpcmVjdG9yaWVzIG9mIHRoZSBjdXJyZW50IGRpciwgbWVyZ2luZyB3aGF0IHdlIGZpbmQKLSAgICAgKiBpbnRvICJwTWVyZ2VkSW5mbyIuCi0gICAgICovCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KSBwQ29udGVudHMtPnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChwQ29udGVudHMtPml0ZW1BdChpKS5nZXRGaWxlVHlwZSgpID09IGtGaWxlVHlwZURpcmVjdG9yeSkgewotICAgICAgICAgICAgU3RyaW5nOCBzdWJkaXIoZGlyTmFtZSk7Ci0gICAgICAgICAgICBzdWJkaXIuYXBwZW5kUGF0aChwQ29udGVudHMtPml0ZW1BdChpKS5nZXRGaWxlTmFtZSgpKTsKLQotICAgICAgICAgICAgZm5jU2NhbkFuZE1lcmdlRGlyTG9ja2VkKHBNZXJnZWRJbmZvLCBhcCwgbG9jYWxlLCB2ZW5kb3IsIHN1YmRpci5zdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFRvIGJlIGNvbnNpc3RlbnQsIHdlIHdhbnQgZW50cmllcyBmb3IgdGhlIHJvb3QgZGlyZWN0b3J5LiAgSWYKLSAgICAgKiB3ZSdyZSB0aGUgcm9vdCwgYWRkIG9uZSBub3cuCi0gICAgICovCi0gICAgaWYgKGRpck5hbWVbMF0gPT0gJ1wwJykgewotICAgICAgICBBc3NldERpcjo6RmlsZUluZm8gdG1wSW5mbzsKLQotICAgICAgICB0bXBJbmZvLnNldChTdHJpbmc4KCIiKSwga0ZpbGVUeXBlRGlyZWN0b3J5KTsKLSAgICAgICAgdG1wSW5mby5zZXRTb3VyY2VOYW1lKGNyZWF0ZVBhdGhOYW1lTG9ja2VkKGFwLCBsb2NhbGUsIHZlbmRvcikpOwotICAgICAgICBwQ29udGVudHMtPmFkZCh0bXBJbmZvKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFdlIHdhbnQgdG8gcHJlcGVuZCB0aGUgZXh0ZW5kZWQgcGFydGlhbCBwYXRoIHRvIGV2ZXJ5IGVudHJ5IGluCi0gICAgICogInBDb250ZW50cyIuICBJdCdzIHRoZSBzYW1lIHZhbHVlIGZvciBlYWNoIGVudHJ5LCBzbyB0aGlzIHdpbGwKLSAgICAgKiBub3QgY2hhbmdlIHRoZSBzb3J0aW5nIG9yZGVyIG9mIHRoZSB2ZWN0b3IgY29udGVudHMuCi0gICAgICovCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KSBwQ29udGVudHMtPnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IEFzc2V0RGlyOjpGaWxlSW5mbyYgaW5mbyA9IHBDb250ZW50cy0+aXRlbUF0KGkpOwotICAgICAgICBwQ29udGVudHMtPmVkaXRJdGVtQXQoaSkuc2V0RmlsZU5hbWUocGFydGlhbFBhdGguYXBwZW5kUGF0aENvcHkoaW5mby5nZXRGaWxlTmFtZSgpKSk7Ci0gICAgfQotCi0gICAgbWVyZ2VJbmZvTG9ja2VkKHBNZXJnZWRJbmZvLCBwQ29udGVudHMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vKgotICogVHJhc2ggdGhlIGNhY2hlLgotICovCi12b2lkIEFzc2V0TWFuYWdlcjo6cHVyZ2VGaWxlTmFtZUNhY2hlTG9ja2VkKHZvaWQpCi17Ci0gICAgbUNhY2hlVmFsaWQgPSBmYWxzZTsKLSAgICBtQ2FjaGUuY2xlYXIoKTsKLX0KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogICAgICBBc3NldE1hbmFnZXI6OlNoYXJlZFppcAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotCi1NdXRleCBBc3NldE1hbmFnZXI6OlNoYXJlZFppcDo6Z0xvY2s7Ci1EZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nOCwgd3A8QXNzZXRNYW5hZ2VyOjpTaGFyZWRaaXA+ID4gQXNzZXRNYW5hZ2VyOjpTaGFyZWRaaXA6OmdPcGVuOwotCi1Bc3NldE1hbmFnZXI6OlNoYXJlZFppcDo6U2hhcmVkWmlwKGNvbnN0IFN0cmluZzgmIHBhdGgsIHRpbWVfdCBtb2RXaGVuKQotICAgIDogbVBhdGgocGF0aCksIG1aaXBGaWxlKE5VTEwpLCBtTW9kV2hlbihtb2RXaGVuKSwKLSAgICAgIG1SZXNvdXJjZVRhYmxlQXNzZXQoTlVMTCksIG1SZXNvdXJjZVRhYmxlKE5VTEwpCi17Ci0gICAgLy9BTE9HSSgiQ3JlYXRpbmcgU2hhcmVkWmlwICVwICVzXG4iLCB0aGlzLCAoY29uc3QgY2hhciopbVBhdGgpOwotICAgIEFMT0dWKCIrKysgb3BlbmluZyB6aXAgJyVzJ1xuIiwgbVBhdGguc3RyaW5nKCkpOwotICAgIG1aaXBGaWxlID0gWmlwRmlsZVJPOjpvcGVuKG1QYXRoLnN0cmluZygpKTsKLSAgICBpZiAobVppcEZpbGUgPT0gTlVMTCkgewotICAgICAgICBBTE9HRCgiZmFpbGVkIHRvIG9wZW4gWmlwIGFyY2hpdmUgJyVzJ1xuIiwgbVBhdGguc3RyaW5nKCkpOwotICAgIH0KLX0KLQotc3A8QXNzZXRNYW5hZ2VyOjpTaGFyZWRaaXA+IEFzc2V0TWFuYWdlcjo6U2hhcmVkWmlwOjpnZXQoY29uc3QgU3RyaW5nOCYgcGF0aCkKLXsKLSAgICBBdXRvTXV0ZXggX2woZ0xvY2spOwotICAgIHRpbWVfdCBtb2RXaGVuID0gZ2V0RmlsZU1vZERhdGUocGF0aCk7Ci0gICAgc3A8U2hhcmVkWmlwPiB6aXAgPSBnT3Blbi52YWx1ZUZvcihwYXRoKS5wcm9tb3RlKCk7Ci0gICAgaWYgKHppcCAhPSBOVUxMICYmIHppcC0+bU1vZFdoZW4gPT0gbW9kV2hlbikgewotICAgICAgICByZXR1cm4gemlwOwotICAgIH0KLSAgICB6aXAgPSBuZXcgU2hhcmVkWmlwKHBhdGgsIG1vZFdoZW4pOwotICAgIGdPcGVuLmFkZChwYXRoLCB6aXApOwotICAgIHJldHVybiB6aXA7Ci0KLX0KLQotWmlwRmlsZVJPKiBBc3NldE1hbmFnZXI6OlNoYXJlZFppcDo6Z2V0WmlwKCkKLXsKLSAgICByZXR1cm4gbVppcEZpbGU7Ci19Ci0KLUFzc2V0KiBBc3NldE1hbmFnZXI6OlNoYXJlZFppcDo6Z2V0UmVzb3VyY2VUYWJsZUFzc2V0KCkKLXsKLSAgICBBTE9HVigiR2V0dGluZyBmcm9tIFNoYXJlZFppcCAlcCByZXNvdXJjZSBhc3NldCAlcFxuIiwgdGhpcywgbVJlc291cmNlVGFibGVBc3NldCk7Ci0gICAgcmV0dXJuIG1SZXNvdXJjZVRhYmxlQXNzZXQ7Ci19Ci0KLUFzc2V0KiBBc3NldE1hbmFnZXI6OlNoYXJlZFppcDo6c2V0UmVzb3VyY2VUYWJsZUFzc2V0KEFzc2V0KiBhc3NldCkKLXsKLSAgICB7Ci0gICAgICAgIEF1dG9NdXRleCBfbChnTG9jayk7Ci0gICAgICAgIGlmIChtUmVzb3VyY2VUYWJsZUFzc2V0ID09IE5VTEwpIHsKLSAgICAgICAgICAgIG1SZXNvdXJjZVRhYmxlQXNzZXQgPSBhc3NldDsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRocmVhZCBzYWZlIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGNhbGxlZCwgc28KLSAgICAgICAgICAgIC8vIGRvIGl0IGhlcmUgd2l0aCB0aGUgZ2xvYmFsIGxvY2sgaGVsZC4KLSAgICAgICAgICAgIGFzc2V0LT5nZXRCdWZmZXIodHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gYXNzZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVsZXRlIGFzc2V0OwotICAgIHJldHVybiBtUmVzb3VyY2VUYWJsZUFzc2V0OwotfQotCi1SZXNUYWJsZSogQXNzZXRNYW5hZ2VyOjpTaGFyZWRaaXA6OmdldFJlc291cmNlVGFibGUoKQotewotICAgIEFMT0dWKCJHZXR0aW5nIGZyb20gU2hhcmVkWmlwICVwIHJlc291cmNlIHRhYmxlICVwXG4iLCB0aGlzLCBtUmVzb3VyY2VUYWJsZSk7Ci0gICAgcmV0dXJuIG1SZXNvdXJjZVRhYmxlOwotfQotCi1SZXNUYWJsZSogQXNzZXRNYW5hZ2VyOjpTaGFyZWRaaXA6OnNldFJlc291cmNlVGFibGUoUmVzVGFibGUqIHJlcykKLXsKLSAgICB7Ci0gICAgICAgIEF1dG9NdXRleCBfbChnTG9jayk7Ci0gICAgICAgIGlmIChtUmVzb3VyY2VUYWJsZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBtUmVzb3VyY2VUYWJsZSA9IHJlczsKLSAgICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVsZXRlIHJlczsKLSAgICByZXR1cm4gbVJlc291cmNlVGFibGU7Ci19Ci0KLWJvb2wgQXNzZXRNYW5hZ2VyOjpTaGFyZWRaaXA6OmlzVXBUb0RhdGUoKQotewotICAgIHRpbWVfdCBtb2RXaGVuID0gZ2V0RmlsZU1vZERhdGUobVBhdGguc3RyaW5nKCkpOwotICAgIHJldHVybiBtTW9kV2hlbiA9PSBtb2RXaGVuOwotfQotCi1Bc3NldE1hbmFnZXI6OlNoYXJlZFppcDo6flNoYXJlZFppcCgpCi17Ci0gICAgLy9BTE9HSSgiRGVzdHJveWluZyBTaGFyZWRaaXAgJXAgJXNcbiIsIHRoaXMsIChjb25zdCBjaGFyKiltUGF0aCk7Ci0gICAgaWYgKG1SZXNvdXJjZVRhYmxlICE9IE5VTEwpIHsKLSAgICAgICAgZGVsZXRlIG1SZXNvdXJjZVRhYmxlOwotICAgIH0KLSAgICBpZiAobVJlc291cmNlVGFibGVBc3NldCAhPSBOVUxMKSB7Ci0gICAgICAgIGRlbGV0ZSBtUmVzb3VyY2VUYWJsZUFzc2V0OwotICAgIH0KLSAgICBpZiAobVppcEZpbGUgIT0gTlVMTCkgewotICAgICAgICBkZWxldGUgbVppcEZpbGU7Ci0gICAgICAgIEFMT0dWKCJDbG9zZWQgJyVzJ1xuIiwgbVBhdGguc3RyaW5nKCkpOwotICAgIH0KLX0KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogICAgICBBc3NldE1hbmFnZXI6OlppcFNldAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotLyoKLSAqIENvbnN0cnVjdG9yLgotICovCi1Bc3NldE1hbmFnZXI6OlppcFNldDo6WmlwU2V0KHZvaWQpCi17Ci19Ci0KLS8qCi0gKiBEZXN0cnVjdG9yLiAgQ2xvc2UgYW55IG9wZW4gYXJjaGl2ZXMuCi0gKi8KLUFzc2V0TWFuYWdlcjo6WmlwU2V0Ojp+WmlwU2V0KHZvaWQpCi17Ci0gICAgc2l6ZV90IE4gPSBtWmlwRmlsZS5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOOyBpKyspCi0gICAgICAgIGNsb3NlWmlwKGkpOwotfQotCi0vKgotICogQ2xvc2UgYSBaaXAgZmlsZSBhbmQgcmVzZXQgdGhlIGVudHJ5LgotICovCi12b2lkIEFzc2V0TWFuYWdlcjo6WmlwU2V0OjpjbG9zZVppcChpbnQgaWR4KQotewotICAgIG1aaXBGaWxlLmVkaXRJdGVtQXQoaWR4KSA9IE5VTEw7Ci19Ci0KLQotLyoKLSAqIFJldHJpZXZlIHRoZSBhcHByb3ByaWF0ZSBaaXAgZmlsZSBmcm9tIHRoZSBzZXQuCi0gKi8KLVppcEZpbGVSTyogQXNzZXRNYW5hZ2VyOjpaaXBTZXQ6OmdldFppcChjb25zdCBTdHJpbmc4JiBwYXRoKQotewotICAgIGludCBpZHggPSBnZXRJbmRleChwYXRoKTsKLSAgICBzcDxTaGFyZWRaaXA+IHppcCA9IG1aaXBGaWxlW2lkeF07Ci0gICAgaWYgKHppcCA9PSBOVUxMKSB7Ci0gICAgICAgIHppcCA9IFNoYXJlZFppcDo6Z2V0KHBhdGgpOwotICAgICAgICBtWmlwRmlsZS5lZGl0SXRlbUF0KGlkeCkgPSB6aXA7Ci0gICAgfQotICAgIHJldHVybiB6aXAtPmdldFppcCgpOwotfQotCi1Bc3NldCogQXNzZXRNYW5hZ2VyOjpaaXBTZXQ6OmdldFppcFJlc291cmNlVGFibGVBc3NldChjb25zdCBTdHJpbmc4JiBwYXRoKQotewotICAgIGludCBpZHggPSBnZXRJbmRleChwYXRoKTsKLSAgICBzcDxTaGFyZWRaaXA+IHppcCA9IG1aaXBGaWxlW2lkeF07Ci0gICAgaWYgKHppcCA9PSBOVUxMKSB7Ci0gICAgICAgIHppcCA9IFNoYXJlZFppcDo6Z2V0KHBhdGgpOwotICAgICAgICBtWmlwRmlsZS5lZGl0SXRlbUF0KGlkeCkgPSB6aXA7Ci0gICAgfQotICAgIHJldHVybiB6aXAtPmdldFJlc291cmNlVGFibGVBc3NldCgpOwotfQotCi1Bc3NldCogQXNzZXRNYW5hZ2VyOjpaaXBTZXQ6OnNldFppcFJlc291cmNlVGFibGVBc3NldChjb25zdCBTdHJpbmc4JiBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2V0KiBhc3NldCkKLXsKLSAgICBpbnQgaWR4ID0gZ2V0SW5kZXgocGF0aCk7Ci0gICAgc3A8U2hhcmVkWmlwPiB6aXAgPSBtWmlwRmlsZVtpZHhdOwotICAgIC8vIGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBjYWxsIGJlZm9yZSBwcmV2aW91c2x5IGFjY2Vzc2luZy4KLSAgICByZXR1cm4gemlwLT5zZXRSZXNvdXJjZVRhYmxlQXNzZXQoYXNzZXQpOwotfQotCi1SZXNUYWJsZSogQXNzZXRNYW5hZ2VyOjpaaXBTZXQ6OmdldFppcFJlc291cmNlVGFibGUoY29uc3QgU3RyaW5nOCYgcGF0aCkKLXsKLSAgICBpbnQgaWR4ID0gZ2V0SW5kZXgocGF0aCk7Ci0gICAgc3A8U2hhcmVkWmlwPiB6aXAgPSBtWmlwRmlsZVtpZHhdOwotICAgIGlmICh6aXAgPT0gTlVMTCkgewotICAgICAgICB6aXAgPSBTaGFyZWRaaXA6OmdldChwYXRoKTsKLSAgICAgICAgbVppcEZpbGUuZWRpdEl0ZW1BdChpZHgpID0gemlwOwotICAgIH0KLSAgICByZXR1cm4gemlwLT5nZXRSZXNvdXJjZVRhYmxlKCk7Ci19Ci0KLVJlc1RhYmxlKiBBc3NldE1hbmFnZXI6OlppcFNldDo6c2V0WmlwUmVzb3VyY2VUYWJsZShjb25zdCBTdHJpbmc4JiBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlKiByZXMpCi17Ci0gICAgaW50IGlkeCA9IGdldEluZGV4KHBhdGgpOwotICAgIHNwPFNoYXJlZFppcD4gemlwID0gbVppcEZpbGVbaWR4XTsKLSAgICAvLyBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gY2FsbCBiZWZvcmUgcHJldmlvdXNseSBhY2Nlc3NpbmcuCi0gICAgcmV0dXJuIHppcC0+c2V0UmVzb3VyY2VUYWJsZShyZXMpOwotfQotCi0vKgotICogR2VuZXJhdGUgdGhlIHBhcnRpYWwgcGF0aG5hbWUgZm9yIHRoZSBzcGVjaWZpZWQgYXJjaGl2ZS4gIFRoZSBjYWxsZXIKLSAqIGdldHMgdG8gcHJlcGVuZCB0aGUgYXNzZXQgcm9vdCBkaXJlY3RvcnkuCi0gKgotICogUmV0dXJucyBzb21ldGhpbmcgbGlrZSAiY29tbW9uL2VuLVVTLW5vb2dsZS5qYXIiLgotICovCi0vKnN0YXRpYyovIFN0cmluZzggQXNzZXRNYW5hZ2VyOjpaaXBTZXQ6OmdldFBhdGhOYW1lKGNvbnN0IGNoYXIqIHppcFBhdGgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzgoemlwUGF0aCk7Ci19Ci0KLWJvb2wgQXNzZXRNYW5hZ2VyOjpaaXBTZXQ6OmlzVXBUb0RhdGUoKQotewotICAgIGNvbnN0IHNpemVfdCBOID0gbVppcEZpbGUuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgaWYgKG1aaXBGaWxlW2ldICE9IE5VTEwgJiYgIW1aaXBGaWxlW2ldLT5pc1VwVG9EYXRlKCkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIENvbXB1dGUgdGhlIHppcCBmaWxlJ3MgaW5kZXguCi0gKgotICogImFwcE5hbWUiLCAibG9jYWxlIiwgYW5kICJ2ZW5kb3IiIHNob3VsZCBiZSBzZXQgdG8gTlVMTCB0byBpbmRpY2F0ZSB0aGUKLSAqIGRlZmF1bHQgZGlyZWN0b3J5LgotICovCi1pbnQgQXNzZXRNYW5hZ2VyOjpaaXBTZXQ6OmdldEluZGV4KGNvbnN0IFN0cmluZzgmIHppcCkgY29uc3QKLXsKLSAgICBjb25zdCBzaXplX3QgTiA9IG1aaXBQYXRoLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGlmIChtWmlwUGF0aFtpXSA9PSB6aXApIHsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbVppcFBhdGguYWRkKHppcCk7Ci0gICAgbVppcEZpbGUuYWRkKE5VTEwpOwotCi0gICAgcmV0dXJuIG1aaXBQYXRoLnNpemUoKS0xOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9hbmRyb2lkZncvQmFja3VwRGF0YS5jcHAgYi9saWJzL2FuZHJvaWRmdy9CYWNrdXBEYXRhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUzYjUyMi4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy9CYWNrdXBEYXRhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJiYWNrdXBfZGF0YSIKLQotI2luY2x1ZGUgPGFuZHJvaWRmdy9CYWNrdXBIZWxwZXJzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvQnl0ZU9yZGVyLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Y3V0aWxzL2xvZy5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLXN0YXRpYyBjb25zdCBib29sIERFQlVHID0gZmFsc2U7Ci0KLS8qCi0gKiBGaWxlIEZvcm1hdCAodjEpOgotICoKLSAqIEFsbCBpbnRzIGFyZSBzdG9yZWQgbGl0dGxlLWVuZGlhbi4KLSAqCi0gKiAgLSBBbiBhcHBfaGVhZGVyX3YxIHN0cnVjdC4KLSAqICAtIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlLCB1dGYtOCwgbnVsbCB0ZXJtaW5hdGVkLCBwYWRkZWQgdG8gNC1ieXRlIGJvdW5kYXJ5LgotICogIC0gQSBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUga2V5L3ZhbHVlIHBhaXJlcyAoZW50aXRpZXMpLCBlYWNoIHdpdGgKLSAqICAgICAgLSBBIGVudGl0eV9oZWFkZXJfdjEgc3RydWN0Ci0gKiAgICAgIC0gVGhlIGtleSwgdXRmLTgsIG51bGwgdGVybWluYXRlZCwgcGFkZGVkIHRvIDQtYnl0ZSBib3VuZGFyeS4KLSAqICAgICAgLSBUaGUgdmFsdWUsIHBhZGRlZCB0byA0IGJ5dGUgYm91bmRhcnkKLSAqLwotCi1jb25zdCBzdGF0aWMgaW50IFJPVU5EX1VQWzRdID0geyAwLCAzLCAyLCAxIH07Ci0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci1yb3VuZF91cChzaXplX3QgbikKLXsKLSAgICByZXR1cm4gbiArIFJPVU5EX1VQW24gJSA0XTsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QKLXBhZGRpbmdfZXh0cmEoc2l6ZV90IG4pCi17Ci0gICAgcmV0dXJuIFJPVU5EX1VQW24gJSA0XTsKLX0KLQotQmFja3VwRGF0YVdyaXRlcjo6QmFja3VwRGF0YVdyaXRlcihpbnQgZmQpCi0gICAgOm1fZmQoZmQpLAotICAgICBtX3N0YXR1cyhOT19FUlJPUiksCi0gICAgIG1fcG9zKDApLAotICAgICBtX2VudGl0eUNvdW50KDApCi17Ci19Ci0KLUJhY2t1cERhdGFXcml0ZXI6On5CYWNrdXBEYXRhV3JpdGVyKCkKLXsKLX0KLQotLy8gUGFkIG91dCBhbnl0aGluZyB0aGV5J3ZlIHByZXZpb3VzbHkgd3JpdHRlbiB0byB0aGUgbmV4dCA0IGJ5dGUgYm91bmRhcnkuCi1zdGF0dXNfdAotQmFja3VwRGF0YVdyaXRlcjo6d3JpdGVfcGFkZGluZ19mb3IoaW50IG4pCi17Ci0gICAgc3NpemVfdCBhbXQ7Ci0gICAgc3NpemVfdCBwYWRkaW5nU2l6ZTsKLQotICAgIHBhZGRpbmdTaXplID0gcGFkZGluZ19leHRyYShuKTsKLSAgICBpZiAocGFkZGluZ1NpemUgPiAwKSB7Ci0gICAgICAgIHVpbnQzMl90IHBhZGRpbmcgPSAweGJjYmNiY2JjOwotICAgICAgICBpZiAoREVCVUcpIEFMT0dJKCJ3cml0aW5nICVkIHBhZGRpbmcgYnl0ZXMgZm9yICVkIiwgcGFkZGluZ1NpemUsIG4pOwotICAgICAgICBhbXQgPSB3cml0ZShtX2ZkLCAmcGFkZGluZywgcGFkZGluZ1NpemUpOwotICAgICAgICBpZiAoYW10ICE9IHBhZGRpbmdTaXplKSB7Ci0gICAgICAgICAgICBtX3N0YXR1cyA9IGVycm5vOwotICAgICAgICAgICAgcmV0dXJuIG1fc3RhdHVzOwotICAgICAgICB9Ci0gICAgICAgIG1fcG9zICs9IGFtdDsKLSAgICB9Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdAotQmFja3VwRGF0YVdyaXRlcjo6V3JpdGVFbnRpdHlIZWFkZXIoY29uc3QgU3RyaW5nOCYga2V5LCBzaXplX3QgZGF0YVNpemUpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBtX3N0YXR1czsKLSAgICB9Ci0KLSAgICBzc2l6ZV90IGFtdDsKLQotICAgIGFtdCA9IHdyaXRlX3BhZGRpbmdfZm9yKG1fcG9zKTsKLSAgICBpZiAoYW10ICE9IDApIHsKLSAgICAgICAgcmV0dXJuIGFtdDsKLSAgICB9Ci0KLSAgICBTdHJpbmc4IGs7Ci0gICAgaWYgKG1fa2V5UHJlZml4Lmxlbmd0aCgpID4gMCkgewotICAgICAgICBrID0gbV9rZXlQcmVmaXg7Ci0gICAgICAgIGsgKz0gIjoiOwotICAgICAgICBrICs9IGtleTsKLSAgICB9IGVsc2UgewotICAgICAgICBrID0ga2V5OwotICAgIH0KLSAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgQUxPR0QoIldyaXRpbmcgaGVhZGVyOiBwcmVmaXg9JyVzJyBrZXk9JyVzJyBkYXRhU2l6ZT0lZCIsIG1fa2V5UHJlZml4LnN0cmluZygpLAotICAgICAgICAgICAgICAgIGtleS5zdHJpbmcoKSwgZGF0YVNpemUpOwotICAgIH0KLQotICAgIGVudGl0eV9oZWFkZXJfdjEgaGVhZGVyOwotICAgIHNzaXplX3Qga2V5TGVuOwotCi0gICAga2V5TGVuID0gay5sZW5ndGgoKTsKLQotICAgIGhlYWRlci50eXBlID0gdG9sZWwoQkFDS1VQX0hFQURFUl9FTlRJVFlfVjEpOwotICAgIGhlYWRlci5rZXlMZW4gPSB0b2xlbChrZXlMZW4pOwotICAgIGhlYWRlci5kYXRhU2l6ZSA9IHRvbGVsKGRhdGFTaXplKTsKLQotICAgIGlmIChERUJVRykgQUxPR0koIndyaXRpbmcgZW50aXR5IGhlYWRlciwgJWQgYnl0ZXMiLCBzaXplb2YoZW50aXR5X2hlYWRlcl92MSkpOwotICAgIGFtdCA9IHdyaXRlKG1fZmQsICZoZWFkZXIsIHNpemVvZihlbnRpdHlfaGVhZGVyX3YxKSk7Ci0gICAgaWYgKGFtdCAhPSBzaXplb2YoZW50aXR5X2hlYWRlcl92MSkpIHsKLSAgICAgICAgbV9zdGF0dXMgPSBlcnJubzsKLSAgICAgICAgcmV0dXJuIG1fc3RhdHVzOwotICAgIH0KLSAgICBtX3BvcyArPSBhbXQ7Ci0KLSAgICBpZiAoREVCVUcpIEFMT0dJKCJ3cml0aW5nIGVudGl0eSBoZWFkZXIga2V5LCAlZCBieXRlcyIsIGtleUxlbisxKTsKLSAgICBhbXQgPSB3cml0ZShtX2ZkLCBrLnN0cmluZygpLCBrZXlMZW4rMSk7Ci0gICAgaWYgKGFtdCAhPSBrZXlMZW4rMSkgewotICAgICAgICBtX3N0YXR1cyA9IGVycm5vOwotICAgICAgICByZXR1cm4gbV9zdGF0dXM7Ci0gICAgfQotICAgIG1fcG9zICs9IGFtdDsKLQotICAgIGFtdCA9IHdyaXRlX3BhZGRpbmdfZm9yKGtleUxlbisxKTsKLQotICAgIG1fZW50aXR5Q291bnQrKzsKLQotICAgIHJldHVybiBhbXQ7Ci19Ci0KLXN0YXR1c190Ci1CYWNrdXBEYXRhV3JpdGVyOjpXcml0ZUVudGl0eURhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKERFQlVHKSBBTE9HRCgiV3JpdGluZyBkYXRhOiBzaXplPSVsdSIsICh1bnNpZ25lZCBsb25nKSBzaXplKTsKLQotICAgIGlmIChtX3N0YXR1cyAhPSBOT19FUlJPUikgewotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIEFMT0dEKCJOb3Qgd3JpdGluZyBkYXRhIC0gc3RyZWFtIGluIGVycm9yIHN0YXRlICVkICglcykiLCBtX3N0YXR1cywgc3RyZXJyb3IobV9zdGF0dXMpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9zdGF0dXM7Ci0gICAgfQotCi0gICAgLy8gV2UgZG9uJ3Qgd3JpdGUgcGFkZGluZyBoZXJlLCBiZWNhdXNlIHRoZXkncmUgYWxsb3dlZCB0byBjYWxsIHRoaXMgc2V2ZXJhbAotICAgIC8vIHRpbWVzIHdpdGggc21hbGxlciBidWZmZXJzLiAgV2Ugd3JpdGUgaXQgYXQgdGhlIGVuZCBvZiBXcml0ZUVudGl0eUhlYWRlcgotICAgIC8vIGluc3RlYWQuCi0gICAgc3NpemVfdCBhbXQgPSB3cml0ZShtX2ZkLCBkYXRhLCBzaXplKTsKLSAgICBpZiAoYW10ICE9IChzc2l6ZV90KXNpemUpIHsKLSAgICAgICAgbV9zdGF0dXMgPSBlcnJubzsKLSAgICAgICAgaWYgKERFQlVHKSBBTE9HRCgid3JpdGUgcmV0dXJuZWQgZXJyb3IgJWQgKCVzKSIsIG1fc3RhdHVzLCBzdHJlcnJvcihtX3N0YXR1cykpOwotICAgICAgICByZXR1cm4gbV9zdGF0dXM7Ci0gICAgfQotICAgIG1fcG9zICs9IGFtdDsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXZvaWQKLUJhY2t1cERhdGFXcml0ZXI6OlNldEtleVByZWZpeChjb25zdCBTdHJpbmc4JiBrZXlQcmVmaXgpCi17Ci0gICAgbV9rZXlQcmVmaXggPSBrZXlQcmVmaXg7Ci19Ci0KLQotQmFja3VwRGF0YVJlYWRlcjo6QmFja3VwRGF0YVJlYWRlcihpbnQgZmQpCi0gICAgOm1fZmQoZmQpLAotICAgICBtX2RvbmUoZmFsc2UpLAotICAgICBtX3N0YXR1cyhOT19FUlJPUiksCi0gICAgIG1fcG9zKDApLAotICAgICBtX2VudGl0eUNvdW50KDApCi17Ci0gICAgbWVtc2V0KCZtX2hlYWRlciwgMCwgc2l6ZW9mKG1faGVhZGVyKSk7Ci19Ci0KLUJhY2t1cERhdGFSZWFkZXI6On5CYWNrdXBEYXRhUmVhZGVyKCkKLXsKLX0KLQotc3RhdHVzX3QKLUJhY2t1cERhdGFSZWFkZXI6OlN0YXR1cygpCi17Ci0gICAgcmV0dXJuIG1fc3RhdHVzOwotfQotCi0jZGVmaW5lIENIRUNLX1NJWkUoYWN0dWFsLCBleHBlY3RlZCkgXAotICAgIGRvIHsgXAotICAgICAgICBpZiAoKGFjdHVhbCkgIT0gKGV4cGVjdGVkKSkgeyBcCi0gICAgICAgICAgICBpZiAoKGFjdHVhbCkgPT0gMCkgeyBcCi0gICAgICAgICAgICAgICAgbV9zdGF0dXMgPSBFSU87IFwKLSAgICAgICAgICAgICAgICBtX2RvbmUgPSB0cnVlOyBcCi0gICAgICAgICAgICB9IGVsc2UgeyBcCi0gICAgICAgICAgICAgICAgbV9zdGF0dXMgPSBlcnJubzsgXAotICAgICAgICAgICAgICAgIEFMT0dEKCJDSEVDS19TSVpFKGE9JWxkIGU9JWxkKSBmYWlsZWQgYXQgbGluZSAlZCBtX3N0YXR1cz0nJXMnIiwgXAotICAgICAgICAgICAgICAgICAgICBsb25nKGFjdHVhbCksIGxvbmcoZXhwZWN0ZWQpLCBfX0xJTkVfXywgc3RyZXJyb3IobV9zdGF0dXMpKTsgXAotICAgICAgICAgICAgfSBcCi0gICAgICAgICAgICByZXR1cm4gbV9zdGF0dXM7IFwKLSAgICAgICAgfSBcCi0gICAgfSB3aGlsZSgwKQotI2RlZmluZSBTS0lQX1BBRERJTkcoKSBcCi0gICAgZG8geyBcCi0gICAgICAgIHN0YXR1c190IGVyciA9IHNraXBfcGFkZGluZygpOyBcCi0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsgXAotICAgICAgICAgICAgQUxPR0QoIlNLSVBfUEFERElORyBGQUlMRUQgYXQgbGluZSAlZCIsIF9fTElORV9fKTsgXAotICAgICAgICAgICAgbV9zdGF0dXMgPSBlcnI7IFwKLSAgICAgICAgICAgIHJldHVybiBlcnI7IFwKLSAgICAgICAgfSBcCi0gICAgfSB3aGlsZSgwKQotCi1zdGF0dXNfdAotQmFja3VwRGF0YVJlYWRlcjo6UmVhZE5leHRIZWFkZXIoYm9vbCogZG9uZSwgaW50KiB0eXBlKQotewotICAgICpkb25lID0gbV9kb25lOwotICAgIGlmIChtX3N0YXR1cyAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gbV9zdGF0dXM7Ci0gICAgfQotCi0gICAgaW50IGFtdDsKLQotICAgIGFtdCA9IHNraXBfcGFkZGluZygpOwotICAgIGlmIChhbXQgPT0gRUlPKSB7Ci0gICAgICAgICpkb25lID0gbV9kb25lID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgIH0KLSAgICBlbHNlIGlmIChhbXQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGFtdDsKLSAgICB9Ci0gICAgYW10ID0gcmVhZChtX2ZkLCAmbV9oZWFkZXIsIHNpemVvZihtX2hlYWRlcikpOwotICAgICpkb25lID0gbV9kb25lID0gKGFtdCA9PSAwKTsKLSAgICBpZiAoKmRvbmUpIHsKLSAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgIH0KLSAgICBDSEVDS19TSVpFKGFtdCwgc2l6ZW9mKG1faGVhZGVyKSk7Ci0gICAgbV9wb3MgKz0gc2l6ZW9mKG1faGVhZGVyKTsKLSAgICBpZiAodHlwZSkgewotICAgICAgICAqdHlwZSA9IG1faGVhZGVyLnR5cGU7Ci0gICAgfQotCi0gICAgLy8gdmFsaWRhdGUgYW5kIGZpeCB1cCB0aGUgZmllbGRzLgotICAgIG1faGVhZGVyLnR5cGUgPSBmcm9tbGVsKG1faGVhZGVyLnR5cGUpOwotICAgIHN3aXRjaCAobV9oZWFkZXIudHlwZSkKLSAgICB7Ci0gICAgICAgIGNhc2UgQkFDS1VQX0hFQURFUl9FTlRJVFlfVjE6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1faGVhZGVyLmVudGl0eS5rZXlMZW4gPSBmcm9tbGVsKG1faGVhZGVyLmVudGl0eS5rZXlMZW4pOwotICAgICAgICAgICAgaWYgKG1faGVhZGVyLmVudGl0eS5rZXlMZW4gPD0gMCkgewotICAgICAgICAgICAgICAgIEFMT0dEKCJFbnRpdHkgaGVhZGVyIGF0ICVkIGhhcyBrZXlMZW48PTA6IDB4JTA4eFxuIiwgKGludCltX3BvcywKLSAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpbV9oZWFkZXIuZW50aXR5LmtleUxlbik7Ci0gICAgICAgICAgICAgICAgbV9zdGF0dXMgPSBFSU5WQUw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2hlYWRlci5lbnRpdHkuZGF0YVNpemUgPSBmcm9tbGVsKG1faGVhZGVyLmVudGl0eS5kYXRhU2l6ZSk7Ci0gICAgICAgICAgICBtX2VudGl0eUNvdW50Kys7Ci0KLSAgICAgICAgICAgIC8vIHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlciAoZmlsZW5hbWUpCi0gICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1faGVhZGVyLmVudGl0eS5rZXlMZW47Ci0gICAgICAgICAgICBjaGFyKiBidWYgPSBtX2tleS5sb2NrQnVmZmVyKHNpemUpOwotICAgICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbV9zdGF0dXMgPSBFTk9NRU07Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc3RhdHVzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IGFtdCA9IHJlYWQobV9mZCwgYnVmLCBzaXplKzEpOwotICAgICAgICAgICAgQ0hFQ0tfU0laRShhbXQsIChpbnQpc2l6ZSsxKTsKLSAgICAgICAgICAgIG1fa2V5LnVubG9ja0J1ZmZlcihzaXplKTsKLSAgICAgICAgICAgIG1fcG9zICs9IHNpemUrMTsKLSAgICAgICAgICAgIFNLSVBfUEFERElORygpOwotICAgICAgICAgICAgbV9kYXRhRW5kUG9zID0gbV9wb3MgKyBtX2hlYWRlci5lbnRpdHkuZGF0YVNpemU7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBTE9HRCgiQ2h1bmsgaGVhZGVyIGF0ICVkIGhhcyBpbnZhbGlkIHR5cGU6IDB4JTA4eCIsCi0gICAgICAgICAgICAgICAgICAgIChpbnQpKG1fcG9zIC0gc2l6ZW9mKG1faGVhZGVyKSksIChpbnQpbV9oZWFkZXIudHlwZSk7Ci0gICAgICAgICAgICBtX3N0YXR1cyA9IEVJTlZBTDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG1fc3RhdHVzOwotfQotCi1ib29sCi1CYWNrdXBEYXRhUmVhZGVyOjpIYXNFbnRpdGllcygpCi17Ci0gICAgcmV0dXJuIG1fc3RhdHVzID09IE5PX0VSUk9SICYmIG1faGVhZGVyLnR5cGUgPT0gQkFDS1VQX0hFQURFUl9FTlRJVFlfVjE7Ci19Ci0KLXN0YXR1c190Ci1CYWNrdXBEYXRhUmVhZGVyOjpSZWFkRW50aXR5SGVhZGVyKFN0cmluZzgqIGtleSwgc2l6ZV90KiBkYXRhU2l6ZSkKLXsKLSAgICBpZiAobV9zdGF0dXMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIG1fc3RhdHVzOwotICAgIH0KLSAgICBpZiAobV9oZWFkZXIudHlwZSAhPSBCQUNLVVBfSEVBREVSX0VOVElUWV9WMSkgewotICAgICAgICByZXR1cm4gRUlOVkFMOwotICAgIH0KLSAgICAqa2V5ID0gbV9rZXk7Ci0gICAgKmRhdGFTaXplID0gbV9oZWFkZXIuZW50aXR5LmRhdGFTaXplOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QKLUJhY2t1cERhdGFSZWFkZXI6OlNraXBFbnRpdHlEYXRhKCkKLXsKLSAgICBpZiAobV9zdGF0dXMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIG1fc3RhdHVzOwotICAgIH0KLSAgICBpZiAobV9oZWFkZXIudHlwZSAhPSBCQUNLVVBfSEVBREVSX0VOVElUWV9WMSkgewotICAgICAgICByZXR1cm4gRUlOVkFMOwotICAgIH0KLSAgICBpZiAobV9oZWFkZXIuZW50aXR5LmRhdGFTaXplID4gMCkgewotICAgICAgICBpbnQgcG9zID0gbHNlZWsobV9mZCwgbV9kYXRhRW5kUG9zLCBTRUVLX1NFVCk7Ci0gICAgICAgIGlmIChwb3MgPT0gLTEpIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJubzsKLSAgICAgICAgfQotICAgICAgICBtX3BvcyA9IHBvczsKLSAgICB9Ci0gICAgU0tJUF9QQURESU5HKCk7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zc2l6ZV90Ci1CYWNrdXBEYXRhUmVhZGVyOjpSZWFkRW50aXR5RGF0YSh2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBpZiAobV9zdGF0dXMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpbnQgcmVtYWluaW5nID0gbV9kYXRhRW5kUG9zIC0gbV9wb3M7Ci0gICAgLy9BTE9HRCgiUmVhZEVudGl0eURhdGEgc2l6ZT0lZCBtX3Bvcz0weCV4IG1fZGF0YUVuZFBvcz0weCV4IHJlbWFpbmluZz0lZFxuIiwKLSAgICAvLyAgICAgICAgc2l6ZSwgbV9wb3MsIG1fZGF0YUVuZFBvcywgcmVtYWluaW5nKTsKLSAgICBpZiAocmVtYWluaW5nIDw9IDApIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICgoKGludClzaXplKSA+IHJlbWFpbmluZykgewotICAgICAgICBzaXplID0gcmVtYWluaW5nOwotICAgIH0KLSAgICAvL0FMT0dEKCIgICByZWFkaW5nICVkIGJ5dGVzIiwgc2l6ZSk7Ci0gICAgaW50IGFtdCA9IHJlYWQobV9mZCwgZGF0YSwgc2l6ZSk7Ci0gICAgaWYgKGFtdCA8IDApIHsKLSAgICAgICAgbV9zdGF0dXMgPSBlcnJubzsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpZiAoYW10ID09IDApIHsKLSAgICAgICAgbV9zdGF0dXMgPSBFSU87Ci0gICAgICAgIG1fZG9uZSA9IHRydWU7Ci0gICAgfQotICAgIG1fcG9zICs9IGFtdDsKLSAgICByZXR1cm4gYW10OwotfQotCi1zdGF0dXNfdAotQmFja3VwRGF0YVJlYWRlcjo6c2tpcF9wYWRkaW5nKCkKLXsKLSAgICBzc2l6ZV90IGFtdDsKLSAgICBzc2l6ZV90IHBhZGRpbmdTaXplOwotCi0gICAgcGFkZGluZ1NpemUgPSBwYWRkaW5nX2V4dHJhKG1fcG9zKTsKLSAgICBpZiAocGFkZGluZ1NpemUgPiAwKSB7Ci0gICAgICAgIHVpbnQzMl90IHBhZGRpbmc7Ci0gICAgICAgIGFtdCA9IHJlYWQobV9mZCwgJnBhZGRpbmcsIHBhZGRpbmdTaXplKTsKLSAgICAgICAgQ0hFQ0tfU0laRShhbXQsIHBhZGRpbmdTaXplKTsKLSAgICAgICAgbV9wb3MgKz0gYW10OwotICAgIH0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbGlicy9hbmRyb2lkZncvQmFja3VwSGVscGVycy5jcHAgYi9saWJzL2FuZHJvaWRmdy9CYWNrdXBIZWxwZXJzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhkM2Y0OC4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy9CYWNrdXBIZWxwZXJzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1OTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNkZWZpbmUgTE9HX1RBRyAiZmlsZV9iYWNrdXBfaGVscGVyIgotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L0JhY2t1cEhlbHBlcnMuaD4KLQotI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8dXRpbHMvQnl0ZU9yZGVyLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvdWlvLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPiAgLy8gZm9yIHV0aW1lcwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8dXRpbWUuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHpsaWIuaD4KLQotI2luY2x1ZGUgPGN1dGlscy9sb2cuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi0jZGVmaW5lIE1BR0lDMCAweDcwNjE2ZTUzIC8vIFNuYXAKLSNkZWZpbmUgTUFHSUMxIDB4NjU2YzY5NDYgLy8gRmlsZQotCi0vKgotICogRmlsZSBlbnRpdHkgZGF0YSBmb3JtYXQgKHYxKToKLSAqCi0gKiAgIC0gNC1ieXRlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBtZXRhZGF0YSwgbGl0dGxlIGVuZGlhbiAoMHgwMDAwMDAwMSBmb3IgdjEpCi0gKiAgIC0gMTIgYnl0ZXMgb2YgbWV0YWRhdGEKLSAqICAgLSB0aGUgZmlsZSBkYXRhIGl0c2VsZgotICoKLSAqIGkuZS4gYSAxNi1ieXRlIG1ldGFkYXRhIGhlYWRlciBmb2xsb3dlZCBieSB0aGUgcmF3IGZpbGUgZGF0YS4gIElmIHRoZQotICogcmVzdG9yZSBjb2RlIGRvZXMgbm90IHJlY29nbml6ZSB0aGUgbWV0YWRhdGEgdmVyc2lvbiwgaXQgY2FuIHN0aWxsCi0gKiBpbnRlcnByZXQgdGhlIGZpbGUgZGF0YSBpdHNlbGYgY29ycmVjdGx5LgotICoKLSAqIGZpbGVfbWV0YWRhdGFfdjE6Ci0gKgotICogICAtIDQgYnl0ZSB2ZXJzaW9uIG51bWJlciA9PT0gMHgwMDAwMDAwMSAobGl0dGxlIGVuZGlhbikKLSAqICAgLSA0LWJ5dGUgYWNjZXNzIG1vZGUgKGxpdHRsZS1lbmRpYW4pCi0gKiAgIC0gdW5kZWZpbmVkICg4IGJ5dGVzKQotICovCi0KLXN0cnVjdCBmaWxlX21ldGFkYXRhX3YxIHsKLSAgICBpbnQgdmVyc2lvbjsKLSAgICBpbnQgbW9kZTsKLSAgICBpbnQgdW5kZWZpbmVkXzE7Ci0gICAgaW50IHVuZGVmaW5lZF8yOwotfTsKLQotY29uc3Qgc3RhdGljIGludCBDVVJSRU5UX01FVEFEQVRBX1ZFUlNJT04gPSAxOwotCi0jaWYgMQotI2RlZmluZSBMT0dQKGYsIHguLi4pCi0jZWxzZQotI2lmIFRFU1RfQkFDS1VQX0hFTFBFUlMKLSNkZWZpbmUgTE9HUChmLCB4Li4uKSBwcmludGYoZiAiXG4iLCB4KQotI2Vsc2UKLSNkZWZpbmUgTE9HUCh4Li4uKSBBTE9HRCh4KQotI2VuZGlmCi0jZW5kaWYKLQotY29uc3Qgc3RhdGljIGludCBST1VORF9VUFs0XSA9IHsgMCwgMywgMiwgMSB9OwotCi1zdGF0aWMgaW5saW5lIGludAotcm91bmRfdXAoaW50IG4pCi17Ci0gICAgcmV0dXJuIG4gKyBST1VORF9VUFtuICUgNF07Ci19Ci0KLXN0YXRpYyBpbnQKLXJlYWRfc25hcHNob3RfZmlsZShpbnQgZmQsIEtleWVkVmVjdG9yPFN0cmluZzgsRmlsZVN0YXRlPiogc25hcHNob3QpCi17Ci0gICAgaW50IGJ5dGVzUmVhZCA9IDA7Ci0gICAgaW50IGFtdDsKLSAgICBTbmFwc2hvdEhlYWRlciBoZWFkZXI7Ci0KLSAgICBhbXQgPSByZWFkKGZkLCAmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7Ci0gICAgaWYgKGFtdCAhPSBzaXplb2YoaGVhZGVyKSkgewotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotICAgIGJ5dGVzUmVhZCArPSBhbXQ7Ci0KLSAgICBpZiAoaGVhZGVyLm1hZ2ljMCAhPSBNQUdJQzAgfHwgaGVhZGVyLm1hZ2ljMSAhPSBNQUdJQzEpIHsKLSAgICAgICAgQUxPR1coInJlYWRfc25hcHNob3RfZmlsZSBoZWFkZXIubWFnaWMwPTB4JTA4eCBtYWdpYzE9MHglMDh4IiwgaGVhZGVyLm1hZ2ljMCwgaGVhZGVyLm1hZ2ljMSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGZvciAoaW50IGk9MDsgaTxoZWFkZXIuZmlsZUNvdW50OyBpKyspIHsKLSAgICAgICAgRmlsZVN0YXRlIGZpbGU7Ci0gICAgICAgIGNoYXIgZmlsZW5hbWVCdWZbMTI4XTsKLQotICAgICAgICBhbXQgPSByZWFkKGZkLCAmZmlsZSwgc2l6ZW9mKEZpbGVTdGF0ZSkpOwotICAgICAgICBpZiAoYW10ICE9IHNpemVvZihGaWxlU3RhdGUpKSB7Ci0gICAgICAgICAgICBBTE9HVygicmVhZF9zbmFwc2hvdF9maWxlIEZpbGVTdGF0ZSB0cnVuY2F0ZWQvZXJyb3Igd2l0aCByZWFkIGF0ICVkIGJ5dGVzXG4iLCBieXRlc1JlYWQpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgYnl0ZXNSZWFkICs9IGFtdDsKLQotICAgICAgICAvLyBmaWxlbmFtZSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkLCBidXQgaXQgaXMgcGFkZGVkCi0gICAgICAgIGludCBuYW1lQnVmU2l6ZSA9IHJvdW5kX3VwKGZpbGUubmFtZUxlbik7Ci0gICAgICAgIGNoYXIqIGZpbGVuYW1lID0gbmFtZUJ1ZlNpemUgPD0gKGludClzaXplb2YoZmlsZW5hbWVCdWYpCi0gICAgICAgICAgICAgICAgPyBmaWxlbmFtZUJ1ZgotICAgICAgICAgICAgICAgIDogKGNoYXIqKW1hbGxvYyhuYW1lQnVmU2l6ZSk7Ci0gICAgICAgIGFtdCA9IHJlYWQoZmQsIGZpbGVuYW1lLCBuYW1lQnVmU2l6ZSk7Ci0gICAgICAgIGlmIChhbXQgPT0gbmFtZUJ1ZlNpemUpIHsKLSAgICAgICAgICAgIHNuYXBzaG90LT5hZGQoU3RyaW5nOChmaWxlbmFtZSwgZmlsZS5uYW1lTGVuKSwgZmlsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnl0ZXNSZWFkICs9IGFtdDsKLSAgICAgICAgaWYgKGZpbGVuYW1lICE9IGZpbGVuYW1lQnVmKSB7Ci0gICAgICAgICAgICBmcmVlKGZpbGVuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYW10ICE9IG5hbWVCdWZTaXplKSB7Ci0gICAgICAgICAgICBBTE9HVygicmVhZF9zbmFwc2hvdF9maWxlIGZpbGVuYW1lIHRydW5jYXRlZC9lcnJvciB3aXRoIHJlYWQgYXQgJWQgYnl0ZXNcbiIsIGJ5dGVzUmVhZCk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChoZWFkZXIudG90YWxTaXplICE9IGJ5dGVzUmVhZCkgewotICAgICAgICBBTE9HVygicmVhZF9zbmFwc2hvdF9maWxlIGxlbmd0aCBtaXNtYXRjaDogaGVhZGVyLnRvdGFsU2l6ZT0lZCBieXRlc1JlYWQ9JWRcbiIsCi0gICAgICAgICAgICAgICAgaGVhZGVyLnRvdGFsU2l6ZSwgYnl0ZXNSZWFkKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXdyaXRlX3NuYXBzaG90X2ZpbGUoaW50IGZkLCBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LEZpbGVSZWM+JiBzbmFwc2hvdCkKLXsKLSAgICBpbnQgZmlsZUNvdW50ID0gMDsKLSAgICBpbnQgYnl0ZXNXcml0dGVuID0gc2l6ZW9mKFNuYXBzaG90SGVhZGVyKTsKLSAgICAvLyBwcmVmbGlnaHQgc2l6ZQotICAgIGNvbnN0IGludCBOID0gc25hcHNob3Quc2l6ZSgpOwotICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgY29uc3QgRmlsZVJlYyYgZyA9IHNuYXBzaG90LnZhbHVlQXQoaSk7Ci0gICAgICAgIGlmICghZy5kZWxldGVkKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmc4JiBuYW1lID0gc25hcHNob3Qua2V5QXQoaSk7Ci0gICAgICAgICAgICBieXRlc1dyaXR0ZW4gKz0gc2l6ZW9mKEZpbGVTdGF0ZSkgKyByb3VuZF91cChuYW1lLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGZpbGVDb3VudCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgTE9HUCgid3JpdGVfc25hcHNob3RfZmlsZSBmZD0lZFxuIiwgZmQpOwotCi0gICAgaW50IGFtdDsKLSAgICBTbmFwc2hvdEhlYWRlciBoZWFkZXIgPSB7IE1BR0lDMCwgZmlsZUNvdW50LCBNQUdJQzEsIGJ5dGVzV3JpdHRlbiB9OwotCi0gICAgYW10ID0gd3JpdGUoZmQsICZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKLSAgICBpZiAoYW10ICE9IHNpemVvZihoZWFkZXIpKSB7Ci0gICAgICAgIEFMT0dXKCJ3cml0ZV9zbmFwc2hvdF9maWxlIGVycm9yIHdyaXRpbmcgaGVhZGVyICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgRmlsZVJlYyByID0gc25hcHNob3QudmFsdWVBdChpKTsKLSAgICAgICAgaWYgKCFyLmRlbGV0ZWQpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIG5hbWUgPSBzbmFwc2hvdC5rZXlBdChpKTsKLSAgICAgICAgICAgIGludCBuYW1lTGVuID0gci5zLm5hbWVMZW4gPSBuYW1lLmxlbmd0aCgpOwotCi0gICAgICAgICAgICBhbXQgPSB3cml0ZShmZCwgJnIucywgc2l6ZW9mKEZpbGVTdGF0ZSkpOwotICAgICAgICAgICAgaWYgKGFtdCAhPSBzaXplb2YoRmlsZVN0YXRlKSkgewotICAgICAgICAgICAgICAgIEFMT0dXKCJ3cml0ZV9zbmFwc2hvdF9maWxlIGVycm9yIHdyaXRpbmcgaGVhZGVyICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gZmlsZW5hbWUgaXMgbm90IE5VTEwgdGVybWluYXRlZCwgYnV0IGl0IGlzIHBhZGRlZAotICAgICAgICAgICAgYW10ID0gd3JpdGUoZmQsIG5hbWUuc3RyaW5nKCksIG5hbWVMZW4pOwotICAgICAgICAgICAgaWYgKGFtdCAhPSBuYW1lTGVuKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIndyaXRlX3NuYXBzaG90X2ZpbGUgZXJyb3Igd3JpdGluZyBmaWxlbmFtZSAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgcGFkZGluZ0xlbiA9IFJPVU5EX1VQW25hbWVMZW4gJSA0XTsKLSAgICAgICAgICAgIGlmIChwYWRkaW5nTGVuICE9IDApIHsKLSAgICAgICAgICAgICAgICBpbnQgcGFkZGluZyA9IDB4YWJhYmFiYWI7Ci0gICAgICAgICAgICAgICAgYW10ID0gd3JpdGUoZmQsICZwYWRkaW5nLCBwYWRkaW5nTGVuKTsKLSAgICAgICAgICAgICAgICBpZiAoYW10ICE9IHBhZGRpbmdMZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR1coIndyaXRlX3NuYXBzaG90X2ZpbGUgZXJyb3Igd3JpdGluZyAlZCBieXRlcyBvZiBmaWxlbmFtZSBwYWRkaW5nICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVuLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotd3JpdGVfZGVsZXRlX2ZpbGUoQmFja3VwRGF0YVdyaXRlciogZGF0YVN0cmVhbSwgY29uc3QgU3RyaW5nOCYga2V5KQotewotICAgIExPR1AoIndyaXRlX2RlbGV0ZV9maWxlICVzXG4iLCBrZXkuc3RyaW5nKCkpOwotICAgIHJldHVybiBkYXRhU3RyZWFtLT5Xcml0ZUVudGl0eUhlYWRlcihrZXksIC0xKTsKLX0KLQotc3RhdGljIGludAotd3JpdGVfdXBkYXRlX2ZpbGUoQmFja3VwRGF0YVdyaXRlciogZGF0YVN0cmVhbSwgaW50IGZkLCBpbnQgbW9kZSwgY29uc3QgU3RyaW5nOCYga2V5LAotICAgICAgICBjaGFyIGNvbnN0KiByZWFsRmlsZW5hbWUpCi17Ci0gICAgTE9HUCgid3JpdGVfdXBkYXRlX2ZpbGUgJXMgKCVzKSA6IG1vZGUgMCVvXG4iLCByZWFsRmlsZW5hbWUsIGtleS5zdHJpbmcoKSwgbW9kZSk7Ci0KLSAgICBjb25zdCBpbnQgYnVmc2l6ZSA9IDQqMTAyNDsKLSAgICBpbnQgZXJyOwotICAgIGludCBhbXQ7Ci0gICAgaW50IGZpbGVTaXplOwotICAgIGludCBieXRlc0xlZnQ7Ci0gICAgZmlsZV9tZXRhZGF0YV92MSBtZXRhZGF0YTsKLQotICAgIGNoYXIqIGJ1ZiA9IChjaGFyKiltYWxsb2MoYnVmc2l6ZSk7Ci0gICAgaW50IGNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotCi0KLSAgICBmaWxlU2l6ZSA9IGxzZWVrKGZkLCAwLCBTRUVLX0VORCk7Ci0gICAgbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsKLQotICAgIGlmIChzaXplb2YobWV0YWRhdGEpICE9IDE2KSB7Ci0gICAgICAgIEFMT0dFKCJFUlJPUjogbWV0YWRhdGEgYmxvY2sgaXMgdGhlIHdyb25nIHNpemUhIik7Ci0gICAgfQotCi0gICAgYnl0ZXNMZWZ0ID0gZmlsZVNpemUgKyBzaXplb2YobWV0YWRhdGEpOwotICAgIGVyciA9IGRhdGFTdHJlYW0tPldyaXRlRW50aXR5SGVhZGVyKGtleSwgYnl0ZXNMZWZ0KTsKLSAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgZnJlZShidWYpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIC8vIHN0b3JlIHRoZSBmaWxlIG1ldGFkYXRhIGZpcnN0Ci0gICAgbWV0YWRhdGEudmVyc2lvbiA9IHRvbGVsKENVUlJFTlRfTUVUQURBVEFfVkVSU0lPTik7Ci0gICAgbWV0YWRhdGEubW9kZSA9IHRvbGVsKG1vZGUpOwotICAgIG1ldGFkYXRhLnVuZGVmaW5lZF8xID0gbWV0YWRhdGEudW5kZWZpbmVkXzIgPSAwOwotICAgIGVyciA9IGRhdGFTdHJlYW0tPldyaXRlRW50aXR5RGF0YSgmbWV0YWRhdGEsIHNpemVvZihtZXRhZGF0YSkpOwotICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICBmcmVlKGJ1Zik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIGJ5dGVzTGVmdCAtPSBzaXplb2YobWV0YWRhdGEpOyAvLyBieXRlc0xlZnQgc2hvdWxkID09IGZpbGVTaXplIG5vdwotCi0gICAgLy8gbm93IHN0b3JlIHRoZSBmaWxlIGNvbnRlbnQKLSAgICB3aGlsZSAoKGFtdCA9IHJlYWQoZmQsIGJ1ZiwgYnVmc2l6ZSkpICE9IDAgJiYgYnl0ZXNMZWZ0ID4gMCkgewotICAgICAgICBieXRlc0xlZnQgLT0gYW10OwotICAgICAgICBpZiAoYnl0ZXNMZWZ0IDwgMCkgewotICAgICAgICAgICAgYW10ICs9IGJ5dGVzTGVmdDsgLy8gUGx1cyBhIG5lZ2F0aXZlIGlzIG1pbnVzLiAgRG9uJ3Qgd3JpdGUgbW9yZSB0aGFuIHdlIHByb21pc2VkLgotICAgICAgICB9Ci0gICAgICAgIGVyciA9IGRhdGFTdHJlYW0tPldyaXRlRW50aXR5RGF0YShidWYsIGFtdCk7Ci0gICAgICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICAgICAgZnJlZShidWYpOwotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYnl0ZXNMZWZ0ICE9IDApIHsKLSAgICAgICAgaWYgKGJ5dGVzTGVmdCA+IDApIHsKLSAgICAgICAgICAgIC8vIFBhZCBvdXQgdGhlIHNwYWNlIHdlIHByb21pc2VkIGluIHRoZSBidWZmZXIuICBXZSBjYW4ndCBjb3JydXB0IHRoZSBidWZmZXIsCi0gICAgICAgICAgICAvLyBldmVuIHRob3VnaCB0aGUgZGF0YSB3ZSdyZSBzZW5kaW5nIGlzIHByb2JhYmx5IGJhZC4KLSAgICAgICAgICAgIG1lbXNldChidWYsIDAsIGJ1ZnNpemUpOwotICAgICAgICAgICAgd2hpbGUgKGJ5dGVzTGVmdCA+IDApIHsKLSAgICAgICAgICAgICAgICBhbXQgPSBieXRlc0xlZnQgPCBidWZzaXplID8gYnl0ZXNMZWZ0IDogYnVmc2l6ZTsKLSAgICAgICAgICAgICAgICBieXRlc0xlZnQgLT0gYW10OwotICAgICAgICAgICAgICAgIGVyciA9IGRhdGFTdHJlYW0tPldyaXRlRW50aXR5RGF0YShidWYsIGFtdCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUoYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgQUxPR0UoIndyaXRlX3VwZGF0ZV9maWxlIHNpemUgbWlzbWF0Y2ggZm9yICVzLiBleHBlY3RlZD0lZCBhY3R1YWw9JWQuIgotICAgICAgICAgICAgICAgICIgWW91IGFyZW4ndCBkb2luZyBwcm9wZXIgbG9ja2luZyEiLCByZWFsRmlsZW5hbWUsIGZpbGVTaXplLCBmaWxlU2l6ZS1ieXRlc0xlZnQpOwotICAgIH0KLQotICAgIGZyZWUoYnVmKTsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyBpbnQKLXdyaXRlX3VwZGF0ZV9maWxlKEJhY2t1cERhdGFXcml0ZXIqIGRhdGFTdHJlYW0sIGNvbnN0IFN0cmluZzgmIGtleSwgY2hhciBjb25zdCogcmVhbEZpbGVuYW1lKQotewotICAgIGludCBlcnI7Ci0gICAgc3RydWN0IHN0YXQgc3Q7Ci0KLSAgICBlcnIgPSBzdGF0KHJlYWxGaWxlbmFtZSwgJnN0KTsKLSAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgaW50IGZkID0gb3BlbihyZWFsRmlsZW5hbWUsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgIGVyciA9IHdyaXRlX3VwZGF0ZV9maWxlKGRhdGFTdHJlYW0sIGZkLCBzdC5zdF9tb2RlLCBrZXksIHJlYWxGaWxlbmFtZSk7Ci0gICAgY2xvc2UoZmQpOwotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQKLWNvbXB1dGVfY3JjMzIoaW50IGZkKQotewotICAgIGNvbnN0IGludCBidWZzaXplID0gNCoxMDI0OwotICAgIGludCBhbXQ7Ci0KLSAgICBjaGFyKiBidWYgPSAoY2hhciopbWFsbG9jKGJ1ZnNpemUpOwotICAgIGludCBjcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLQotICAgIGxzZWVrKGZkLCAwLCBTRUVLX1NFVCk7Ci0KLSAgICB3aGlsZSAoKGFtdCA9IHJlYWQoZmQsIGJ1ZiwgYnVmc2l6ZSkpICE9IDApIHsKLSAgICAgICAgY3JjID0gY3JjMzIoY3JjLCAoQnl0ZWYqKWJ1ZiwgYW10KTsKLSAgICB9Ci0KLSAgICBmcmVlKGJ1Zik7Ci0gICAgcmV0dXJuIGNyYzsKLX0KLQotaW50Ci1iYWNrX3VwX2ZpbGVzKGludCBvbGRTbmFwc2hvdEZELCBCYWNrdXBEYXRhV3JpdGVyKiBkYXRhU3RyZWFtLCBpbnQgbmV3U25hcHNob3RGRCwKLSAgICAgICAgY2hhciBjb25zdCogY29uc3QqIGZpbGVzLCBjaGFyIGNvbnN0KiBjb25zdCoga2V5cywgaW50IGZpbGVDb3VudCkKLXsKLSAgICBpbnQgZXJyOwotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsRmlsZVN0YXRlPiBvbGRTbmFwc2hvdDsKLSAgICBLZXllZFZlY3RvcjxTdHJpbmc4LEZpbGVSZWM+IG5ld1NuYXBzaG90OwotCi0gICAgaWYgKG9sZFNuYXBzaG90RkQgIT0gLTEpIHsKLSAgICAgICAgZXJyID0gcmVhZF9zbmFwc2hvdF9maWxlKG9sZFNuYXBzaG90RkQsICZvbGRTbmFwc2hvdCk7Ci0gICAgICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICAgICAgLy8gT24gYW4gZXJyb3IsIHRyZWF0IHRoaXMgYXMgYSBmdWxsIGJhY2t1cC4KLSAgICAgICAgICAgIG9sZFNuYXBzaG90LmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpPTA7IGk8ZmlsZUNvdW50OyBpKyspIHsKLSAgICAgICAgU3RyaW5nOCBrZXkoa2V5c1tpXSk7Ci0gICAgICAgIEZpbGVSZWMgcjsKLSAgICAgICAgY2hhciBjb25zdCogZmlsZSA9IGZpbGVzW2ldOwotICAgICAgICByLmZpbGUgPSBmaWxlOwotICAgICAgICBzdHJ1Y3Qgc3RhdCBzdDsKLQotICAgICAgICBlcnIgPSBzdGF0KGZpbGUsICZzdCk7Ci0gICAgICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICAgICAgci5kZWxldGVkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHIuZGVsZXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgci5zLm1vZFRpbWVfc2VjID0gc3Quc3RfbXRpbWU7Ci0gICAgICAgICAgICByLnMubW9kVGltZV9uc2VjID0gMDsgLy8gd29ya2Fyb3VuZCBzaW0gYnJlYWthZ2UKLSAgICAgICAgICAgIC8vci5zLm1vZFRpbWVfbnNlYyA9IHN0LnN0X210aW1lX25zZWM7Ci0gICAgICAgICAgICByLnMubW9kZSA9IHN0LnN0X21vZGU7Ci0gICAgICAgICAgICByLnMuc2l6ZSA9IHN0LnN0X3NpemU7Ci0gICAgICAgICAgICAvLyB3ZSBjb21wdXRlIHRoZSBjcmMzMiBsYXRlciBkb3duIGJlbG93LCB3aGVuIHdlIGFscmVhZHkgaGF2ZSB0aGUgZmlsZSBvcGVuLgotCi0gICAgICAgICAgICBpZiAobmV3U25hcHNob3QuaW5kZXhPZktleShrZXkpID49IDApIHsKLSAgICAgICAgICAgICAgICBMT0dQKCJiYWNrX3VwX2ZpbGVzIGtleSBhbHJlYWR5IGluIHVzZSAnJXMnIiwga2V5LnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbmV3U25hcHNob3QuYWRkKGtleSwgcik7Ci0gICAgfQotCi0gICAgaW50IG4gPSAwOwotICAgIGludCBOID0gb2xkU25hcHNob3Quc2l6ZSgpOwotICAgIGludCBtID0gMDsKLQotICAgIHdoaWxlIChuPE4gJiYgbTxmaWxlQ291bnQpIHsKLSAgICAgICAgY29uc3QgU3RyaW5nOCYgcCA9IG9sZFNuYXBzaG90LmtleUF0KG4pOwotICAgICAgICBjb25zdCBTdHJpbmc4JiBxID0gbmV3U25hcHNob3Qua2V5QXQobSk7Ci0gICAgICAgIEZpbGVSZWMmIGcgPSBuZXdTbmFwc2hvdC5lZGl0VmFsdWVBdChtKTsKLSAgICAgICAgaW50IGNtcCA9IHAuY29tcGFyZShxKTsKLSAgICAgICAgaWYgKGcuZGVsZXRlZCB8fCBjbXAgPCAwKSB7Ci0gICAgICAgICAgICAvLyBmaWxlIHJlbW92ZWQKLSAgICAgICAgICAgIExPR1AoImZpbGUgcmVtb3ZlZDogJXMiLCBwLnN0cmluZygpKTsKLSAgICAgICAgICAgIGcuZGVsZXRlZCA9IHRydWU7IC8vIFRoZXkgZGlkbid0IG1lbnRpb24gdGhlIGZpbGUsIGJ1dCB3ZSBub3RpY2VkIHRoYXQgaXQncyBnb25lLgotICAgICAgICAgICAgZGF0YVN0cmVhbS0+V3JpdGVFbnRpdHlIZWFkZXIocCwgLTEpOwotICAgICAgICAgICAgbisrOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNtcCA+IDApIHsKLSAgICAgICAgICAgIC8vIGZpbGUgYWRkZWQKLSAgICAgICAgICAgIExPR1AoImZpbGUgYWRkZWQ6ICVzIiwgZy5maWxlLnN0cmluZygpKTsKLSAgICAgICAgICAgIHdyaXRlX3VwZGF0ZV9maWxlKGRhdGFTdHJlYW0sIHEsIGcuZmlsZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBtKys7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBib3RoIGZpbGVzIGV4aXN0LCBjaGVjayB0aGVtCi0gICAgICAgICAgICBjb25zdCBGaWxlU3RhdGUmIGYgPSBvbGRTbmFwc2hvdC52YWx1ZUF0KG4pOwotCi0gICAgICAgICAgICBpbnQgZmQgPSBvcGVuKGcuZmlsZS5zdHJpbmcoKSwgT19SRE9OTFkpOwotICAgICAgICAgICAgaWYgKGZkIDwgMCkgewotICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IG9wZW4gdGhlIGZpbGUuICBEb24ndCByZXBvcnQgaXQgYXMgYSBkZWxldGUgZWl0aGVyLiAgTGV0IHRoZQotICAgICAgICAgICAgICAgIC8vIHNlcnZlciBrZWVwIHRoZSBvbGQgdmVyc2lvbi4gIE1heWJlIHRoZXknbGwgYmUgYWJsZSB0byBkZWFsIHdpdGggaXQKLSAgICAgICAgICAgICAgICAvLyBvbiByZXN0b3JlLgotICAgICAgICAgICAgICAgIExPR1AoIlVuYWJsZSB0byBvcGVuIGZpbGUgJXMgLSBza2lwcGluZyIsIGcuZmlsZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGcucy5jcmMzMiA9IGNvbXB1dGVfY3JjMzIoZmQpOwotCi0gICAgICAgICAgICAgICAgTE9HUCgiJXMiLCBxLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBMT0dQKCIgIG5ldzogbW9kVGltZT0lZCwlZCBtb2RlPSUwNG8gc2l6ZT0lLTNkIGNyYzMyPTB4JTA4eCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBmLm1vZFRpbWVfc2VjLCBmLm1vZFRpbWVfbnNlYywgZi5tb2RlLCBmLnNpemUsIGYuY3JjMzIpOwotICAgICAgICAgICAgICAgIExPR1AoIiAgb2xkOiBtb2RUaW1lPSVkLCVkIG1vZGU9JTA0byBzaXplPSUtM2QgY3JjMzI9MHglMDh4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGcucy5tb2RUaW1lX3NlYywgZy5zLm1vZFRpbWVfbnNlYywgZy5zLm1vZGUsIGcucy5zaXplLCBnLnMuY3JjMzIpOwotICAgICAgICAgICAgICAgIGlmIChmLm1vZFRpbWVfc2VjICE9IGcucy5tb2RUaW1lX3NlYyB8fCBmLm1vZFRpbWVfbnNlYyAhPSBnLnMubW9kVGltZV9uc2VjCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBmLm1vZGUgIT0gZy5zLm1vZGUgfHwgZi5zaXplICE9IGcucy5zaXplIHx8IGYuY3JjMzIgIT0gZy5zLmNyYzMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlX3VwZGF0ZV9maWxlKGRhdGFTdHJlYW0sIGZkLCBnLnMubW9kZSwgcCwgZy5maWxlLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICBtKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyB0aGVzZSB3ZXJlIGRlbGV0ZWQKLSAgICB3aGlsZSAobjxOKSB7Ci0gICAgICAgIGRhdGFTdHJlYW0tPldyaXRlRW50aXR5SGVhZGVyKG9sZFNuYXBzaG90LmtleUF0KG4pLCAtMSk7Ci0gICAgICAgIG4rKzsKLSAgICB9Ci0KLSAgICAvLyB0aGVzZSB3ZXJlIGFkZGVkCi0gICAgd2hpbGUgKG08ZmlsZUNvdW50KSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZzgmIHEgPSBuZXdTbmFwc2hvdC5rZXlBdChtKTsKLSAgICAgICAgRmlsZVJlYyYgZyA9IG5ld1NuYXBzaG90LmVkaXRWYWx1ZUF0KG0pOwotICAgICAgICB3cml0ZV91cGRhdGVfZmlsZShkYXRhU3RyZWFtLCBxLCBnLmZpbGUuc3RyaW5nKCkpOwotICAgICAgICBtKys7Ci0gICAgfQotCi0gICAgZXJyID0gd3JpdGVfc25hcHNob3RfZmlsZShuZXdTbmFwc2hvdEZELCBuZXdTbmFwc2hvdCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLy8gVXRpbGl0eSBmdW5jdGlvbiwgZXF1aXZhbGVudCB0byBzdHBjcHkoKTogcGVyZm9ybSBhIHN0cmNweSwgYnV0IGluc3RlYWQgb2YKLS8vIHJldHVybmluZyB0aGUgaW5pdGlhbCBkZXN0LCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0cmFpbGluZyBOVUwuCi1zdGF0aWMgY2hhciogc3RyY3B5X3B0cihjaGFyKiBkZXN0LCBjb25zdCBjaGFyKiBzdHIpIHsKLSAgICBpZiAoZGVzdCAmJiBzdHIpIHsKLSAgICAgICAgd2hpbGUgKCgqZGVzdCA9ICpzdHIpICE9IDApIHsKLSAgICAgICAgICAgIGRlc3QrKzsKLSAgICAgICAgICAgIHN0cisrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBkZXN0OwotfQotCi1zdGF0aWMgdm9pZCBjYWxjX3Rhcl9jaGVja3N1bShjaGFyKiBidWYpIHsKLSAgICAvLyBbIDE0OCA6ICAgOCBdIGNoZWNrc3VtIC0tIHRvIGJlIGNhbGN1bGF0ZWQgd2l0aCB0aGlzIGZpZWxkIGFzIHNwYWNlIGNoYXJzCi0gICAgbWVtc2V0KGJ1ZiArIDE0OCwgJyAnLCA4KTsKLQotICAgIHVpbnQxNl90IHN1bSA9IDA7Ci0gICAgZm9yICh1aW50OF90KiBwID0gKHVpbnQ4X3QqKSBidWY7IHAgPCAoKHVpbnQ4X3QqKWJ1ZikgKyA1MTI7IHArKykgewotICAgICAgICBzdW0gKz0gKnA7Ci0gICAgfQotCi0gICAgLy8gTm93IHdyaXRlIHRoZSByZWFsIGNoZWNrc3VtIHZhbHVlOgotICAgIC8vIFsgMTQ4IDogICA4IF0gIGNoZWNrc3VtOiA2IG9jdGFsIGRpZ2l0cyBbbGVhZGluZyB6ZXJvZXNdLCBOVUwsIFNQQwotICAgIHNwcmludGYoYnVmICsgMTQ4LCAiJTA2byIsIHN1bSk7IC8vIHRoZSB0cmFpbGluZyBzcGFjZSBpcyBhbHJlYWR5IGluIHBsYWNlCi19Ci0KLS8vIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4KLXN0YXRpYyBpbnQgd3JpdGVfcGF4X2hlYWRlcl9lbnRyeShjaGFyKiBidWYsIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgY2hhciogdmFsdWUpIHsKLSAgICAvLyBzdGFydCB3aXRoIHRoZSBzaXplIG9mICIxIGtleT12YWx1ZVxuIgotICAgIGludCBsZW4gPSBzdHJsZW4oa2V5KSArIHN0cmxlbih2YWx1ZSkgKyA0OwotICAgIGlmIChsZW4gPiA5KSBsZW4rKzsKLSAgICBpZiAobGVuID4gOTkpIGxlbisrOwotICAgIGlmIChsZW4gPiA5OTkpIGxlbisrOwotICAgIC8vIHNpbmNlIFBBVEhfTUFYIGlzIDQwOTYgd2UgZG9uJ3QgZXhwZWN0IHRvIGhhdmUgdG8gZ2VuZXJhdGUgYW55IHNpbmdsZQotICAgIC8vIGhlYWRlciBlbnRyeSBsb25nZXIgdGhhbiA5OTk5IGNoYXJhY3RlcnMKLQotICAgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkICVzPSVzXG4iLCBsZW4sIGtleSwgdmFsdWUpOwotfQotCi0vLyBXaXJlIGZvcm1hdCB0byB0aGUgYmFja3VwIG1hbmFnZXIgc2VydmljZSBpcyBjaHVua2VkOiAgZWFjaCBjaHVuayBpcyBwcmVmaXhlZCBieQotLy8gYSA0LWJ5dGUgY291bnQgb2YgaXRzIHNpemUuICBBIGNodW5rIHNpemUgb2YgemVybyAoZm91ciB6ZXJvIGJ5dGVzKSBpbmRpY2F0ZXMgRU9ELgotdm9pZCBzZW5kX3RhcmZpbGVfY2h1bmsoQmFja3VwRGF0YVdyaXRlciogd3JpdGVyLCBjb25zdCBjaGFyKiBidWZmZXIsIHNpemVfdCBzaXplKSB7Ci0gICAgdWludDMyX3QgY2h1bmtfc2l6ZV9ubyA9IGh0b25sKHNpemUpOwotICAgIHdyaXRlci0+V3JpdGVFbnRpdHlEYXRhKCZjaHVua19zaXplX25vLCA0KTsKLSAgICBpZiAoc2l6ZSAhPSAwKSB3cml0ZXItPldyaXRlRW50aXR5RGF0YShidWZmZXIsIHNpemUpOwotfQotCi1pbnQgd3JpdGVfdGFyZmlsZShjb25zdCBTdHJpbmc4JiBwYWNrYWdlTmFtZSwgY29uc3QgU3RyaW5nOCYgZG9tYWluLAotICAgICAgICBjb25zdCBTdHJpbmc4JiByb290cGF0aCwgY29uc3QgU3RyaW5nOCYgZmlsZXBhdGgsIEJhY2t1cERhdGFXcml0ZXIqIHdyaXRlcikKLXsKLSAgICAvLyBJbiB0aGUgb3V0cHV0IHN0cmVhbSBldmVyeXRoaW5nIGlzIHN0b3JlZCByZWxhdGl2ZSB0byB0aGUgcm9vdAotICAgIGNvbnN0IGNoYXIqIHJlbHN0YXJ0ID0gZmlsZXBhdGguc3RyaW5nKCkgKyByb290cGF0aC5sZW5ndGgoKTsKLSAgICBpZiAoKnJlbHN0YXJ0ID09ICcvJykgcmVsc3RhcnQrKzsgICAgIC8vIHdvbid0IGJlIHRydWUgd2hlbiBwYXRoID09IHJvb3RwYXRoCi0gICAgU3RyaW5nOCByZWxwYXRoKHJlbHN0YXJ0KTsKLQotICAgIC8vIElmIHJlbHBhdGggaXMgZW1wdHksIGl0IG1lYW5zIHRoaXMgaXMgdGhlIHRvcCBvZiBvbmUgb2YgdGhlIHN0YW5kYXJkIG5hbWVkCi0gICAgLy8gZG9tYWluIGRpcmVjdG9yaWVzLCBzbyB3ZSBzaG91bGQganVzdCBza2lwIGl0Ci0gICAgaWYgKHJlbHBhdGgubGVuZ3RoKCkgPT0gMCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBUb28gbG9uZyBhIG5hbWUgZm9yIHRoZSB1c3RhciBmb3JtYXQ/Ci0gICAgLy8gICAgImFwcHMvIiArIHBhY2thZ2VuYW1lICsgJy8nICsgZG9tYWlucGF0aCA8IDE1NSBjaGFycwotICAgIC8vICAgIHJlbHBhdGggPCAxMDAgY2hhcnMKLSAgICBib29sIG5lZWRFeHRlbmRlZCA9IGZhbHNlOwotICAgIGlmICgoNSArIHBhY2thZ2VOYW1lLmxlbmd0aCgpICsgMSArIGRvbWFpbi5sZW5ndGgoKSA+PSAxNTUpIHx8IChyZWxwYXRoLmxlbmd0aCgpID49IDEwMCkpIHsKLSAgICAgICAgbmVlZEV4dGVuZGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBOb24tN2JpdC1jbGVhbiBwYXRoIGFsc28gbWVhbnMgbmVlZGluZyBwYXggZXh0ZW5kZWQgZm9ybWF0Ci0gICAgaWYgKCFuZWVkRXh0ZW5kZWQpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcGF0aC5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoKGZpbGVwYXRoW2ldICYgMHg4MCkgIT0gMCkgewotICAgICAgICAgICAgICAgIG5lZWRFeHRlbmRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnQgZXJyID0gMDsKLSAgICBzdHJ1Y3Qgc3RhdDY0IHM7Ci0gICAgaWYgKGxzdGF0NjQoZmlsZXBhdGguc3RyaW5nKCksICZzKSAhPSAwKSB7Ci0gICAgICAgIGVyciA9IGVycm5vOwotICAgICAgICBBTE9HRSgiRXJyb3IgJWQgKCVzKSBmcm9tIGxzdGF0NjQoJXMpIiwgZXJyLCBzdHJlcnJvcihlcnIpLCBmaWxlcGF0aC5zdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgU3RyaW5nOCBmdWxsbmFtZTsgICAvLyBmb3IgcGF4IGxhdGVyIG9uCi0gICAgU3RyaW5nOCBwcmVmaXg7Ci0KLSAgICBjb25zdCBpbnQgaXNkaXIgPSBTX0lTRElSKHMuc3RfbW9kZSk7Ci0gICAgaWYgKGlzZGlyKSBzLnN0X3NpemUgPSAwOyAgIC8vIGRpcmVjdG9yaWVzIGdldCBubyBhY3R1YWwgZGF0YSBpbiB0aGUgdGFyIHN0cmVhbQotCi0gICAgLy8gISEhIFRPRE86IHVzZSBtbWFwIHdoZW4gcG9zc2libGUgdG8gYXZvaWQgY2h1cm5pbmcgdGhlIGJ1ZmZlciBjYWNoZQotICAgIC8vICEhISBUT0RPOiB0aGlzIHdpbGwgYnJlYWsgd2l0aCBzeW1saW5rczsgbmVlZCB0byB1c2UgcmVhZGxpbmsoMikKLSAgICBpbnQgZmQgPSBvcGVuKGZpbGVwYXRoLnN0cmluZygpLCBPX1JET05MWSk7Ci0gICAgaWYgKGZkIDwgMCkgewotICAgICAgICBlcnIgPSBlcnJubzsKLSAgICAgICAgQUxPR0UoIkVycm9yICVkICglcykgZnJvbSBvcGVuKCVzKSIsIGVyciwgc3RyZXJyb3IoZXJyKSwgZmlsZXBhdGguc3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIC8vIHJlYWQvd3JpdGUgdXAgdG8gdGhpcyBtdWNoIGF0IGEgdGltZS4KLSAgICBjb25zdCBzaXplX3QgQlVGU0laRSA9IDMyICogMTAyNDsKLSAgICBjaGFyKiBidWYgPSAoY2hhciAqKWNhbGxvYygxLEJVRlNJWkUpOwotICAgIGNoYXIqIHBheEhlYWRlciA9IGJ1ZiArIDUxMjsgICAgLy8gdXNlIGEgZGlmZmVyZW50IGNodW5rIG9mIGl0IGFzIHNlcGFyYXRlIHNjcmF0Y2gKLSAgICBjaGFyKiBwYXhEYXRhID0gYnVmICsgMTAyNDsKLQotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICBBTE9HRSgiT3V0IG9mIG1lbSBhbGxvY2F0aW5nIHRyYW5zZmVyIGJ1ZmZlciIpOwotICAgICAgICBlcnIgPSBFTk9NRU07Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0KLSAgICAvLyBNYWdpYyBmaWVsZHMgZm9yIHRoZSB1c3RhciBmaWxlIGZvcm1hdAotICAgIHN0cmNhdChidWYgKyAyNTcsICJ1c3RhciIpOwotICAgIHN0cmNhdChidWYgKyAyNjMsICIwMCIpOwotCi0gICAgLy8gWyAyNjUgOiAzMiBdIHVzZXIgbmFtZSwgaWdub3JlZCBvbiByZXN0b3JlCi0gICAgLy8gWyAyOTcgOiAzMiBdIGdyb3VwIG5hbWUsIGlnbm9yZWQgb24gcmVzdG9yZQotCi0gICAgLy8gWyAxMDAgOiAgIDggXSBmaWxlIG1vZGUKLSAgICBzbnByaW50ZihidWYgKyAxMDAsIDgsICIlMDZvICIsIHMuc3RfbW9kZSAmIH5TX0lGTVQpOwotCi0gICAgLy8gWyAxMDggOiAgIDggXSB1aWQgLS0gaWdub3JlZCBpbiBBbmRyb2lkIGZvcm1hdDsgdWlkcyBhcmUgcmVtYXBwZWQgYXQgcmVzdG9yZSB0aW1lCi0gICAgLy8gWyAxMTYgOiAgIDggXSBnaWQgLS0gaWdub3JlZCBpbiBBbmRyb2lkIGZvcm1hdAotICAgIHNucHJpbnRmKGJ1ZiArIDEwOCwgOCwgIjAlbG8iLCBzLnN0X3VpZCk7Ci0gICAgc25wcmludGYoYnVmICsgMTE2LCA4LCAiMCVsbyIsIHMuc3RfZ2lkKTsKLQotICAgIC8vIFsgMTI0IDogIDEyIF0gZmlsZSBzaXplIGluIGJ5dGVzCi0gICAgaWYgKHMuc3Rfc2l6ZSA+IDA3Nzc3Nzc3Nzc3N0xMKSB7Ci0gICAgICAgIC8vIHZlcnkgbGFyZ2UgZmlsZXMgbmVlZCBhIHBheCBleHRlbmRlZCBzaXplIGhlYWRlcgotICAgICAgICBuZWVkRXh0ZW5kZWQgPSB0cnVlOwotICAgIH0KLSAgICBzbnByaW50ZihidWYgKyAxMjQsIDEyLCAiJTAxMWxsbyIsIChpc2RpcikgPyAwTEwgOiBzLnN0X3NpemUpOwotCi0gICAgLy8gWyAxMzYgOiAgMTIgXSBsYXN0IG1vZCB0aW1lIGFzIGEgVVRDIHRpbWVfdAotICAgIHNucHJpbnRmKGJ1ZiArIDEzNiwgMTIsICIlMGxvIiwgcy5zdF9tdGltZSk7Ci0KLSAgICAvLyBbIDE1NiA6ICAgMSBdIGxpbmsvZmlsZSB0eXBlCi0gICAgdWludDhfdCB0eXBlOwotICAgIGlmIChpc2RpcikgewotICAgICAgICB0eXBlID0gJzUnOyAgICAgLy8gdGFyIG1hZ2ljOiAnNScgPT0gZGlyZWN0b3J5Ci0gICAgfSBlbHNlIGlmIChTX0lTUkVHKHMuc3RfbW9kZSkpIHsKLSAgICAgICAgdHlwZSA9ICcwJzsgICAgIC8vIHRhciBtYWdpYzogJzAnID09IG5vcm1hbCBmaWxlCi0gICAgfSBlbHNlIHsKLSAgICAgICAgQUxPR1coIkVycm9yOiB1bmtub3duIGZpbGUgbW9kZSAwJW8gWyVzXSIsIHMuc3RfbW9kZSwgZmlsZXBhdGguc3RyaW5nKCkpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotICAgIGJ1ZlsxNTZdID0gdHlwZTsKLQotICAgIC8vIFsgMTU3IDogMTAwIF0gbmFtZSBvZiBsaW5rZWQgZmlsZSBbbm90IGltcGxlbWVudGVkXQotCi0gICAgewotICAgICAgICAvLyBQcmVmaXggYW5kIG1haW4gcmVsYXRpdmUgcGF0aC4gIFBhdGggbGVuZ3RocyBoYXZlIGJlZW4gcHJlZmxpZ2h0ZWQuCi0gICAgICAgIGlmIChwYWNrYWdlTmFtZS5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHByZWZpeCA9ICJhcHBzLyI7Ci0gICAgICAgICAgICBwcmVmaXggKz0gcGFja2FnZU5hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHByZWZpeC5hcHBlbmRQYXRoKGRvbWFpbik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBwYXggZXh0ZW5kZWQgbWVhbnMgd2UgZG9uJ3QgcHV0IGluIGEgcHJlZml4IGZpZWxkLCBhbmQgcHV0IGEgZGlmZmVyZW50Ci0gICAgICAgIC8vIHN0cmluZyBpbiB0aGUgYmFzaWMgbmFtZSBmaWVsZC4gIFdlIGNhbiBhbHNvIGNvbnN0cnVjdCB0aGUgZnVsbCBwYXRoIG5hbWUKLSAgICAgICAgLy8gb3V0IG9mIHRoZSBzdWJzdHJpbmdzIHdlJ3ZlIG5vdyBidWlsdC4KLSAgICAgICAgZnVsbG5hbWUgPSBwcmVmaXg7Ci0gICAgICAgIGZ1bGxuYW1lLmFwcGVuZFBhdGgocmVscGF0aCk7Ci0KLSAgICAgICAgLy8gdXN0YXI6Ci0gICAgICAgIC8vICAgIFsgICAwIDogMTAwIF07IGZpbGUgbmFtZS9wYXRoCi0gICAgICAgIC8vICAgIFsgMzQ1IDogMTU1IF0gZmlsZW5hbWUgcGF0aCBwcmVmaXgKLSAgICAgICAgLy8gV2Ugb25seSB1c2UgdGhlIHByZWZpeCBhcmVhIGlmIGZ1bGxuYW1lIHdvbid0IGZpdCBpbiB0aGUgcGF0aAotICAgICAgICBpZiAoZnVsbG5hbWUubGVuZ3RoKCkgPiAxMDApIHsKLSAgICAgICAgICAgIHN0cm5jcHkoYnVmLCByZWxwYXRoLnN0cmluZygpLCAxMDApOwotICAgICAgICAgICAgc3RybmNweShidWYgKyAzNDUsIHByZWZpeC5zdHJpbmcoKSwgMTU1KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0cm5jcHkoYnVmLCBmdWxsbmFtZS5zdHJpbmcoKSwgMTAwKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFsgMzI5IDogOCBdIGFuZCBbIDMzNyA6IDggXSBkZXZtYWpvci9kZXZtaW5vciwgbm90IHVzZWQKLQotICAgIEFMT0dJKCIgICBOYW1lOiAlcyIsIGZ1bGxuYW1lLnN0cmluZygpKTsKLQotICAgIC8vIElmIHdlJ3JlIHVzaW5nIGEgcGF4IGV4dGVuZGVkIGhlYWRlciwgYnVpbGQgJiB3cml0ZSB0aGF0IGhlcmU7IGxlbmd0aHMgYXJlCi0gICAgLy8gYWxyZWFkeSBwcmVmbGlnaHRlZAotICAgIGlmIChuZWVkRXh0ZW5kZWQpIHsKLSAgICAgICAgY2hhciBzaXplU3RyWzMyXTsgICAvLyBiaWcgZW5vdWdoIGZvciBhIDY0LWJpdCB1bnNpZ25lZCB2YWx1ZSBpbiBkZWNpbWFsCi0gICAgICAgIGNoYXIqIHAgPSBwYXhEYXRhOwotCi0gICAgICAgIC8vIGNvbnN0cnVjdCB0aGUgcGF4IGV4dGVuZGVkIGhlYWRlciBkYXRhIGJsb2NrCi0gICAgICAgIG1lbXNldChwYXhEYXRhLCAwLCBCVUZTSVpFIC0gKHBheERhdGEgLSBidWYpKTsKLSAgICAgICAgaW50IGxlbjsKLQotICAgICAgICAvLyBzaXplIGhlYWRlciAtLSBjYWxjIGxlbiBpbiBkaWdpdHMgYnkgYWN0dWFsbHkgcmVuZGVyaW5nIHRoZSBudW1iZXIKLSAgICAgICAgLy8gdG8gYSBzdHJpbmcgLSBicnV0ZSBmb3JjZSBidXQgc2ltcGxlCi0gICAgICAgIHNucHJpbnRmKHNpemVTdHIsIHNpemVvZihzaXplU3RyKSwgIiVsbGQiLCBzLnN0X3NpemUpOwotICAgICAgICBwICs9IHdyaXRlX3BheF9oZWFkZXJfZW50cnkocCwgInNpemUiLCBzaXplU3RyKTsKLQotICAgICAgICAvLyBmdWxsbmFtZSB3YXMgZ2VuZXJhdGVkIGFib3ZlIHdpdGggdGhlIHVzdGFyIHBhdGhzCi0gICAgICAgIHAgKz0gd3JpdGVfcGF4X2hlYWRlcl9lbnRyeShwLCAicGF0aCIsIGZ1bGxuYW1lLnN0cmluZygpKTsKLQotICAgICAgICAvLyBOb3cgd2Uga25vdyBob3cgYmlnIHRoZSBwYXggZGF0YSBpcwotICAgICAgICBpbnQgcGF4TGVuID0gcCAtIHBheERhdGE7Ci0KLSAgICAgICAgLy8gTm93IGJ1aWxkIHRoZSBwYXggKmhlYWRlciogdGVtcGxhdGVkIG9uIHRoZSB1c3RhciBoZWFkZXIKLSAgICAgICAgbWVtY3B5KHBheEhlYWRlciwgYnVmLCA1MTIpOwotCi0gICAgICAgIFN0cmluZzggbGVhZiA9IGZ1bGxuYW1lLmdldFBhdGhMZWFmKCk7Ci0gICAgICAgIG1lbXNldChwYXhIZWFkZXIsIDAsIDEwMCk7ICAgICAgICAgICAgICAgICAgLy8gcmV3cml0ZSB0aGUgbmFtZSBhcmVhCi0gICAgICAgIHNucHJpbnRmKHBheEhlYWRlciwgMTAwLCAiUGF4SGVhZGVyLyVzIiwgbGVhZi5zdHJpbmcoKSk7Ci0gICAgICAgIG1lbXNldChwYXhIZWFkZXIgKyAzNDUsIDAsIDE1NSk7ICAgICAgICAgICAgLy8gcmV3cml0ZSB0aGUgcHJlZml4IGFyZWEKLSAgICAgICAgc3RybmNweShwYXhIZWFkZXIgKyAzNDUsIHByZWZpeC5zdHJpbmcoKSwgMTU1KTsKLQotICAgICAgICBwYXhIZWFkZXJbMTU2XSA9ICd4JzsgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcmsgaXQgYXMgYSBwYXggZXh0ZW5kZWQgaGVhZGVyCi0KLSAgICAgICAgLy8gWyAxMjQgOiAgMTIgXSBzaXplIG9mIHBheCBleHRlbmRlZCBoZWFkZXIgZGF0YQotICAgICAgICBtZW1zZXQocGF4SGVhZGVyICsgMTI0LCAwLCAxMik7Ci0gICAgICAgIHNucHJpbnRmKHBheEhlYWRlciArIDEyNCwgMTIsICIlMDExbyIsIHAgLSBwYXhEYXRhKTsKLQotICAgICAgICAvLyBDaGVja3N1bSBhbmQgd3JpdGUgdGhlIHBheCBibG9jayBoZWFkZXIKLSAgICAgICAgY2FsY190YXJfY2hlY2tzdW0ocGF4SGVhZGVyKTsKLSAgICAgICAgc2VuZF90YXJmaWxlX2NodW5rKHdyaXRlciwgcGF4SGVhZGVyLCA1MTIpOwotCi0gICAgICAgIC8vIE5vdyB3cml0ZSB0aGUgcGF4IGRhdGEgaXRzZWxmCi0gICAgICAgIGludCBwYXhibG9ja3MgPSAocGF4TGVuICsgNTExKSAvIDUxMjsKLSAgICAgICAgc2VuZF90YXJmaWxlX2NodW5rKHdyaXRlciwgcGF4RGF0YSwgNTEyICogcGF4YmxvY2tzKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVja3N1bSBhbmQgd3JpdGUgdGhlIDUxMi1ieXRlIHVzdGFyIGZpbGUgaGVhZGVyIGJsb2NrIHRvIHRoZSBvdXRwdXQKLSAgICBjYWxjX3Rhcl9jaGVja3N1bShidWYpOwotICAgIHNlbmRfdGFyZmlsZV9jaHVuayh3cml0ZXIsIGJ1ZiwgNTEyKTsKLQotICAgIC8vIE5vdyB3cml0ZSB0aGUgZmlsZSBkYXRhIGl0c2VsZiwgZm9yIHJlYWwgZmlsZXMuICBXZSBob25vciB0YXIncyBjb252ZW50aW9uIHRoYXQKLSAgICAvLyBvbmx5IGZ1bGwgNTEyLWJ5dGUgYmxvY2tzIGFyZSBzZW50IHRvIHdyaXRlKCkuCi0gICAgaWYgKCFpc2RpcikgewotICAgICAgICBvZmY2NF90IHRvV3JpdGUgPSBzLnN0X3NpemU7Ci0gICAgICAgIHdoaWxlICh0b1dyaXRlID4gMCkgewotICAgICAgICAgICAgc2l6ZV90IHRvUmVhZCA9ICh0b1dyaXRlIDwgQlVGU0laRSkgPyB0b1dyaXRlIDogQlVGU0laRTsKLSAgICAgICAgICAgIHNzaXplX3QgblJlYWQgPSByZWFkKGZkLCBidWYsIHRvUmVhZCk7Ci0gICAgICAgICAgICBpZiAoblJlYWQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgZXJyID0gZXJybm87Ci0gICAgICAgICAgICAgICAgQUxPR0UoIlVuYWJsZSB0byByZWFkIGZpbGUgWyVzXSwgZXJyPSVkICglcykiLCBmaWxlcGF0aC5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciwgc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5SZWFkID09IDApIHsKLSAgICAgICAgICAgICAgICBBTE9HRSgiRU9GIGJ1dCBleHBlY3QgJWxsZCBtb3JlIGJ5dGVzIGluIFslc10iLCAobG9uZyBsb25nKSB0b1dyaXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGVyciA9IEVJTzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQXQgRU9GIHdlIG1pZ2h0IGhhdmUgYSBzaG9ydCBibG9jazsgTlVMLXBhZCB0aGF0IHRvIGEgNTEyLWJ5dGUgbXVsdGlwbGUuICBUaGlzCi0gICAgICAgICAgICAvLyBkZXBlbmRzIG9uIHRoZSBPUyBndWFyYW50ZWUgdGhhdCBmb3Igb3JkaW5hcnkgZmlsZXMsIHJlYWQoKSB3aWxsIG5ldmVyIHJldHVybgotICAgICAgICAgICAgLy8gbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWVzdGVkLgotICAgICAgICAgICAgc3NpemVfdCBwYXJ0aWFsID0gKG5SZWFkKzUxMikgJSA1MTI7Ci0gICAgICAgICAgICBpZiAocGFydGlhbCA+IDApIHsKLSAgICAgICAgICAgICAgICBzc2l6ZV90IHJlbWFpbmRlciA9IDUxMiAtIHBhcnRpYWw7Ci0gICAgICAgICAgICAgICAgbWVtc2V0KGJ1ZiArIG5SZWFkLCAwLCByZW1haW5kZXIpOwotICAgICAgICAgICAgICAgIG5SZWFkICs9IHJlbWFpbmRlcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlbmRfdGFyZmlsZV9jaHVuayh3cml0ZXIsIGJ1ZiwgblJlYWQpOwotICAgICAgICAgICAgdG9Xcml0ZSAtPSBuUmVhZDsKLSAgICAgICAgfQotICAgIH0KLQotY2xlYW51cDoKLSAgICBmcmVlKGJ1Zik7Ci1kb25lOgotICAgIGNsb3NlKGZkKTsKLSAgICByZXR1cm4gZXJyOwotfQotLy8gZW5kIHRhcmZpbGUKLQotCi0KLSNkZWZpbmUgUkVTVE9SRV9CVUZfU0laRSAoOCoxMDI0KQotCi1SZXN0b3JlSGVscGVyQmFzZTo6UmVzdG9yZUhlbHBlckJhc2UoKQotewotICAgIG1fYnVmID0gbWFsbG9jKFJFU1RPUkVfQlVGX1NJWkUpOwotICAgIG1fbG9nZ2VkVW5rbm93bk1ldGFkYXRhID0gZmFsc2U7Ci19Ci0KLVJlc3RvcmVIZWxwZXJCYXNlOjp+UmVzdG9yZUhlbHBlckJhc2UoKQotewotICAgIGZyZWUobV9idWYpOwotfQotCi1zdGF0dXNfdAotUmVzdG9yZUhlbHBlckJhc2U6OldyaXRlRmlsZShjb25zdCBTdHJpbmc4JiBmaWxlbmFtZSwgQmFja3VwRGF0YVJlYWRlciogaW4pCi17Ci0gICAgc3NpemVfdCBlcnI7Ci0gICAgc2l6ZV90IGRhdGFTaXplOwotICAgIFN0cmluZzgga2V5OwotICAgIGludCBmZDsKLSAgICB2b2lkKiBidWYgPSBtX2J1ZjsKLSAgICBzc2l6ZV90IGFtdDsKLSAgICBpbnQgbW9kZTsKLSAgICBpbnQgY3JjOwotICAgIHN0cnVjdCBzdGF0IHN0OwotICAgIEZpbGVSZWMgcjsKLQotICAgIGVyciA9IGluLT5SZWFkRW50aXR5SGVhZGVyKCZrZXksICZkYXRhU2l6ZSk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgbWV0YWRhdGEgYmxvY2sgb2ZmIHRoZSBoZWFkIG9mIHRoZSBmaWxlIGVudGl0eSBhbmQgdXNlIHRoYXQgdG8KLSAgICAvLyBzZXQgdXAgdGhlIG91dHB1dCBmaWxlCi0gICAgZmlsZV9tZXRhZGF0YV92MSBtZXRhZGF0YTsKLSAgICBhbXQgPSBpbi0+UmVhZEVudGl0eURhdGEoJm1ldGFkYXRhLCBzaXplb2YobWV0YWRhdGEpKTsKLSAgICBpZiAoYW10ICE9IHNpemVvZihtZXRhZGF0YSkpIHsKLSAgICAgICAgQUxPR1coIkNvdWxkIG5vdCByZWFkIG1ldGFkYXRhIGZvciAlcyAtLSAlbGQgLyAlcyIsIGZpbGVuYW1lLnN0cmluZygpLAotICAgICAgICAgICAgICAgIChsb25nKWFtdCwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIEVJTzsKLSAgICB9Ci0gICAgbWV0YWRhdGEudmVyc2lvbiA9IGZyb21sZWwobWV0YWRhdGEudmVyc2lvbik7Ci0gICAgbWV0YWRhdGEubW9kZSA9IGZyb21sZWwobWV0YWRhdGEubW9kZSk7Ci0gICAgaWYgKG1ldGFkYXRhLnZlcnNpb24gPiBDVVJSRU5UX01FVEFEQVRBX1ZFUlNJT04pIHsKLSAgICAgICAgaWYgKCFtX2xvZ2dlZFVua25vd25NZXRhZGF0YSkgewotICAgICAgICAgICAgbV9sb2dnZWRVbmtub3duTWV0YWRhdGEgPSB0cnVlOwotICAgICAgICAgICAgQUxPR1coIlJlc3RvcmluZyBmaWxlIHdpdGggdW5zdXBwb3J0ZWQgbWV0YWRhdGEgdmVyc2lvbiAlZCAoY3VycmVudGx5ICVkKSIsCi0gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnZlcnNpb24sIENVUlJFTlRfTUVUQURBVEFfVkVSU0lPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbW9kZSA9IG1ldGFkYXRhLm1vZGU7Ci0KLSAgICAvLyBXcml0ZSB0aGUgZmlsZSBhbmQgY29tcHV0ZSB0aGUgY3JjCi0gICAgY3JjID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgZmQgPSBvcGVuKGZpbGVuYW1lLnN0cmluZygpLCBPX0NSRUFUfE9fUkRXUnxPX1RSVU5DLCBtb2RlKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgQUxPR1coIkNvdWxkIG5vdCBvcGVuIGZpbGUgJXMgLS0gJXMiLCBmaWxlbmFtZS5zdHJpbmcoKSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLSAgICAKLSAgICB3aGlsZSAoKGFtdCA9IGluLT5SZWFkRW50aXR5RGF0YShidWYsIFJFU1RPUkVfQlVGX1NJWkUpKSA+IDApIHsKLSAgICAgICAgZXJyID0gd3JpdGUoZmQsIGJ1ZiwgYW10KTsKLSAgICAgICAgaWYgKGVyciAhPSBhbXQpIHsKLSAgICAgICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgICAgIEFMT0dXKCJFcnJvciAnJXMnIHdyaXRpbmcgJyVzJyIsIHN0cmVycm9yKGVycm5vKSwgZmlsZW5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuIGVycm5vOwotICAgICAgICB9Ci0gICAgICAgIGNyYyA9IGNyYzMyKGNyYywgKEJ5dGVmKilidWYsIGFtdCk7Ci0gICAgfQotCi0gICAgY2xvc2UoZmQpOwotCi0gICAgLy8gUmVjb3JkIGZvciB0aGUgc25hcHNob3QKLSAgICBlcnIgPSBzdGF0KGZpbGVuYW1lLnN0cmluZygpLCAmc3QpOwotICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICBBTE9HVygiRXJyb3Igc3RhdGluZyBmaWxlIHRoYXQgd2UganVzdCBjcmVhdGVkICVzIiwgZmlsZW5hbWUuc3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgci5maWxlID0gZmlsZW5hbWU7Ci0gICAgci5kZWxldGVkID0gZmFsc2U7Ci0gICAgci5zLm1vZFRpbWVfc2VjID0gc3Quc3RfbXRpbWU7Ci0gICAgci5zLm1vZFRpbWVfbnNlYyA9IDA7IC8vIHdvcmthcm91bmQgc2ltIGJyZWFrYWdlCi0gICAgLy9yLnMubW9kVGltZV9uc2VjID0gc3Quc3RfbXRpbWVfbnNlYzsKLSAgICByLnMubW9kZSA9IHN0LnN0X21vZGU7Ci0gICAgci5zLnNpemUgPSBzdC5zdF9zaXplOwotICAgIHIucy5jcmMzMiA9IGNyYzsKLQotICAgIG1fZmlsZXMuYWRkKGtleSwgcik7Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190Ci1SZXN0b3JlSGVscGVyQmFzZTo6V3JpdGVTbmFwc2hvdChpbnQgZmQpCi17Ci0gICAgcmV0dXJuIHdyaXRlX3NuYXBzaG90X2ZpbGUoZmQsIG1fZmlsZXMpOzsKLX0KLQotI2lmIFRFU1RfQkFDS1VQX0hFTFBFUlMKLQotI2RlZmluZSBTQ1JBVENIX0RJUiAiL2RhdGEvYmFja3VwX2hlbHBlcl90ZXN0LyIKLQotc3RhdGljIGludAotd3JpdGVfdGV4dF9maWxlKGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIGRhdGEpCi17Ci0gICAgaW50IGFtdDsKLSAgICBpbnQgZmQ7Ci0gICAgaW50IGxlbjsKLQotICAgIGZkID0gY3JlYXQocGF0aCwgMDY2Nik7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiY3JlYXQgJXMgZmFpbGVkXG4iLCBwYXRoKTsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgIGxlbiA9IHN0cmxlbihkYXRhKTsKLSAgICBhbXQgPSB3cml0ZShmZCwgZGF0YSwgbGVuKTsKLSAgICBpZiAoYW10ICE9IGxlbikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yICglcykgd3JpdGluZyB0byBmaWxlICVzXG4iLCBzdHJlcnJvcihlcnJubyksIHBhdGgpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgY2xvc2UoZmQpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWNvbXBhcmVfZmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBpbnQgbGVuKQotewotICAgIGludCBmZDsKLSAgICBpbnQgYW10OwotCi0gICAgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb21wYXJlX2ZpbGUgZXJyb3IgKCVzKSBvcGVuaW5nICVzXG4iLCBzdHJlcnJvcihlcnJubyksIHBhdGgpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciogY29udGVudHMgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKGxlbik7Ci0gICAgaWYgKGNvbnRlbnRzID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWxsb2MoJWQpIGZhaWxlZFxuIiwgbGVuKTsKLSAgICAgICAgcmV0dXJuIEVOT01FTTsKLSAgICB9Ci0KLSAgICBib29sIHNpemVzTWF0Y2ggPSB0cnVlOwotICAgIGFtdCA9IGxzZWVrKGZkLCAwLCBTRUVLX0VORCk7Ci0gICAgaWYgKGFtdCAhPSBsZW4pIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb21wYXJlX2ZpbGUgZmlsZSBsZW5ndGggc2hvdWxkIGJlICVkLCB3YXMgJWRcbiIsIGxlbiwgYW10KTsKLSAgICAgICAgc2l6ZXNNYXRjaCA9IGZhbHNlOwotICAgIH0KLSAgICBsc2VlayhmZCwgMCwgU0VFS19TRVQpOwotCi0gICAgaW50IHJlYWRMZW4gPSBhbXQgPCBsZW4gPyBhbXQgOiBsZW47Ci0gICAgYW10ID0gcmVhZChmZCwgY29udGVudHMsIHJlYWRMZW4pOwotICAgIGlmIChhbXQgIT0gcmVhZExlbikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNvbXBhcmVfZmlsZSByZWFkIGV4cGVjdGVkICVkIGJ5dGVzIGJ1dCBnb3QgJWRcbiIsIGxlbiwgYW10KTsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRlbnRzTWF0Y2ggPSB0cnVlOwotICAgIGZvciAoaW50IGk9MDsgaTxyZWFkTGVuOyBpKyspIHsKLSAgICAgICAgaWYgKGRhdGFbaV0gIT0gY29udGVudHNbaV0pIHsKLSAgICAgICAgICAgIGlmIChjb250ZW50c01hdGNoKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb21wYXJlX2ZpbGUgY29udGVudHMgYXJlIGRpZmZlcmVudDogKGluZGV4LCBleHBlY3RlZCwgYWN0dWFsKVxuIik7Ci0gICAgICAgICAgICAgICAgY29udGVudHNNYXRjaCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIFslLTJkXSAlMDJ4ICUwMnhcbiIsIGksIGRhdGFbaV0sIGNvbnRlbnRzW2ldKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZyZWUoY29udGVudHMpOwotICAgIHJldHVybiBjb250ZW50c01hdGNoICYmIHNpemVzTWF0Y2ggPyAwIDogMTsKLX0KLQotaW50Ci1iYWNrdXBfaGVscGVyX3Rlc3RfZW1wdHkoKQotewotICAgIGludCBlcnI7Ci0gICAgaW50IGZkOwotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsRmlsZVJlYz4gc25hcHNob3Q7Ci0gICAgY29uc3QgY2hhciogZmlsZW5hbWUgPSBTQ1JBVENIX0RJUiAiYmFja3VwX2hlbHBlcl90ZXN0X2VtcHR5LnNuYXAiOwotCi0gICAgc3lzdGVtKCJybSAtciAiIFNDUkFUQ0hfRElSKTsKLSAgICBta2RpcihTQ1JBVENIX0RJUiwgMDc3Nyk7Ci0KLSAgICAvLyB3cml0ZQotICAgIGZkID0gY3JlYXQoZmlsZW5hbWUsIDA2NjYpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGNyZWF0aW5nICVzXG4iLCBmaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGVyciA9IHdyaXRlX3NuYXBzaG90X2ZpbGUoZmQsIHNuYXBzaG90KTsKLQotICAgIGNsb3NlKGZkKTsKLQotICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIndyaXRlX3NuYXBzaG90X2ZpbGUgcmVwb3J0ZWQgZXJyb3IgJWQgKCVzKVxuIiwgZXJyLCBzdHJlcnJvcihlcnIpKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjb3JyZWN0X2RhdGFbXSA9IHsKLSAgICAgICAgMHg1MywgMHg2ZSwgMHg2MSwgMHg3MCwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgICAgIDB4NDYsIDB4NjksIDB4NmMsIDB4NjUsICAweDEwLCAweDAwLCAweDAwLCAweDAwCi0gICAgfTsKLQotICAgIGVyciA9IGNvbXBhcmVfZmlsZShmaWxlbmFtZSwgY29ycmVjdF9kYXRhLCBzaXplb2YoY29ycmVjdF9kYXRhKSk7Ci0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgLy8gcmVhZAotICAgIGZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIG9wZW5pbmcgZm9yIHJlYWQgJXNcbiIsIGZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCxGaWxlU3RhdGU+IHJlYWRTbmFwc2hvdDsKLSAgICBlcnIgPSByZWFkX3NuYXBzaG90X2ZpbGUoZmQsICZyZWFkU25hcHNob3QpOwotICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJlYWRfc25hcHNob3RfZmlsZSBmYWlsZWQgJWRcbiIsIGVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgaWYgKHJlYWRTbmFwc2hvdC5zaXplKCkgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJlYWRTbmFwc2hvdCBzaG91bGQgYmUgbGVuZ3RoIDBcbiIpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50Ci1iYWNrdXBfaGVscGVyX3Rlc3RfZm91cigpCi17Ci0gICAgaW50IGVycjsKLSAgICBpbnQgZmQ7Ci0gICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCxGaWxlUmVjPiBzbmFwc2hvdDsKLSAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9IFNDUkFUQ0hfRElSICJiYWNrdXBfaGVscGVyX3Rlc3RfZm91ci5zbmFwIjsKLQotICAgIHN5c3RlbSgicm0gLXIgIiBTQ1JBVENIX0RJUik7Ci0gICAgbWtkaXIoU0NSQVRDSF9ESVIsIDA3NzcpOwotCi0gICAgLy8gd3JpdGUKLSAgICBmZCA9IGNyZWF0KGZpbGVuYW1lLCAwNjY2KTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBvcGVuaW5nICVzXG4iLCBmaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIFN0cmluZzggZmlsZW5hbWVzWzRdOwotICAgIEZpbGVTdGF0ZSBzdGF0ZXNbNF07Ci0gICAgRmlsZVJlYyByOwotICAgIHIuZGVsZXRlZCA9IGZhbHNlOwotCi0gICAgc3RhdGVzWzBdLm1vZFRpbWVfc2VjID0gMHhmZWRjYmE5ODsKLSAgICBzdGF0ZXNbMF0ubW9kVGltZV9uc2VjID0gMHhkZWFkYmVlZjsKLSAgICBzdGF0ZXNbMF0ubW9kZSA9IDA3Nzc7IC8vIGRlY2ltYWwgNTExLCBoZXggMHgwMDAwMDFmZgotICAgIHN0YXRlc1swXS5zaXplID0gMHhhYmFiYmNiYzsKLSAgICBzdGF0ZXNbMF0uY3JjMzIgPSAweDEyMzQ1Njc4OwotICAgIHN0YXRlc1swXS5uYW1lTGVuID0gLTEyOwotICAgIHIucyA9IHN0YXRlc1swXTsKLSAgICBmaWxlbmFtZXNbMF0gPSBTdHJpbmc4KCJieXRlc19vZl9wYWRkaW5nIik7Ci0gICAgc25hcHNob3QuYWRkKGZpbGVuYW1lc1swXSwgcik7Ci0KLSAgICBzdGF0ZXNbMV0ubW9kVGltZV9zZWMgPSAweDkzNDAwMDMxOwotICAgIHN0YXRlc1sxXS5tb2RUaW1lX25zZWMgPSAweGRlYWRiZWVmOwotICAgIHN0YXRlc1sxXS5tb2RlID0gMDY2NjsgLy8gZGVjaW1hbCA0MzgsIGhleCAweDAwMDAwMWI2Ci0gICAgc3RhdGVzWzFdLnNpemUgPSAweDg4NTU3NzY2OwotICAgIHN0YXRlc1sxXS5jcmMzMiA9IDB4MjIzMzQ0MjI7Ci0gICAgc3RhdGVzWzFdLm5hbWVMZW4gPSAtMTsKLSAgICByLnMgPSBzdGF0ZXNbMV07Ci0gICAgZmlsZW5hbWVzWzFdID0gU3RyaW5nOCgiYnl0ZXNfb2ZfcGFkZGluZzMiKTsKLSAgICBzbmFwc2hvdC5hZGQoZmlsZW5hbWVzWzFdLCByKTsKLQotICAgIHN0YXRlc1syXS5tb2RUaW1lX3NlYyA9IDB4MzMyMjExNDQ7Ci0gICAgc3RhdGVzWzJdLm1vZFRpbWVfbnNlYyA9IDB4ZGVhZGJlZWY7Ci0gICAgc3RhdGVzWzJdLm1vZGUgPSAwNzQ0OyAvLyBkZWNpbWFsIDQ4NCwgaGV4IDB4MDAwMDAxZTQKLSAgICBzdGF0ZXNbMl0uc2l6ZSA9IDB4MTEyMjMzNDQ7Ci0gICAgc3RhdGVzWzJdLmNyYzMyID0gMHgwMTEyMjMzNDsKLSAgICBzdGF0ZXNbMl0ubmFtZUxlbiA9IDA7Ci0gICAgci5zID0gc3RhdGVzWzJdOwotICAgIGZpbGVuYW1lc1syXSA9IFN0cmluZzgoImJ5dGVzX29mX3BhZGRpbmdfMiIpOwotICAgIHNuYXBzaG90LmFkZChmaWxlbmFtZXNbMl0sIHIpOwotCi0gICAgc3RhdGVzWzNdLm1vZFRpbWVfc2VjID0gMHgzMzIyMTE0NDsKLSAgICBzdGF0ZXNbM10ubW9kVGltZV9uc2VjID0gMHhkZWFkYmVlZjsKLSAgICBzdGF0ZXNbM10ubW9kZSA9IDA3NTU7IC8vIGRlY2ltYWwgNDkzLCBoZXggMHgwMDAwMDFlZAotICAgIHN0YXRlc1szXS5zaXplID0gMHgxMTIyMzM0NDsKLSAgICBzdGF0ZXNbM10uY3JjMzIgPSAweDAxMTIyMzM0OwotICAgIHN0YXRlc1szXS5uYW1lTGVuID0gMDsKLSAgICByLnMgPSBzdGF0ZXNbM107Ci0gICAgZmlsZW5hbWVzWzNdID0gU3RyaW5nOCgiYnl0ZXNfb2ZfcGFkZGluZ19fMSIpOwotICAgIHNuYXBzaG90LmFkZChmaWxlbmFtZXNbM10sIHIpOwotCi0gICAgZXJyID0gd3JpdGVfc25hcHNob3RfZmlsZShmZCwgc25hcHNob3QpOwotCi0gICAgY2xvc2UoZmQpOwotCi0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAid3JpdGVfc25hcHNob3RfZmlsZSByZXBvcnRlZCBlcnJvciAlZCAoJXMpXG4iLCBlcnIsIHN0cmVycm9yKGVycikpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNvcnJlY3RfZGF0YVtdID0gewotICAgICAgICAvLyBoZWFkZXIKLSAgICAgICAgMHg1MywgMHg2ZSwgMHg2MSwgMHg3MCwgIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgICAgIDB4NDYsIDB4NjksIDB4NmMsIDB4NjUsICAweGJjLCAweDAwLCAweDAwLCAweDAwLAotCi0gICAgICAgIC8vIGJ5dGVzX29mX3BhZGRpbmcKLSAgICAgICAgMHg5OCwgMHhiYSwgMHhkYywgMHhmZSwgIDB4ZWYsIDB4YmUsIDB4YWQsIDB4ZGUsCi0gICAgICAgIDB4ZmYsIDB4MDEsIDB4MDAsIDB4MDAsICAweGJjLCAweGJjLCAweGFiLCAweGFiLAotICAgICAgICAweDc4LCAweDU2LCAweDM0LCAweDEyLCAgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAgICAgMHg2MiwgMHg3OSwgMHg3NCwgMHg2NSwgIDB4NzMsIDB4NWYsIDB4NmYsIDB4NjYsCi0gICAgICAgIDB4NWYsIDB4NzAsIDB4NjEsIDB4NjQsICAweDY0LCAweDY5LCAweDZlLCAweDY3LAotCi0gICAgICAgIC8vIGJ5dGVzX29mX3BhZGRpbmczCi0gICAgICAgIDB4MzEsIDB4MDAsIDB4NDAsIDB4OTMsICAweGVmLCAweGJlLCAweGFkLCAweGRlLAotICAgICAgICAweGI2LCAweDAxLCAweDAwLCAweDAwLCAgMHg2NiwgMHg3NywgMHg1NSwgMHg4OCwKLSAgICAgICAgMHgyMiwgMHg0NCwgMHgzMywgMHgyMiwgIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgICAgIDB4NjIsIDB4NzksIDB4NzQsIDB4NjUsICAweDczLCAweDVmLCAweDZmLCAweDY2LAotICAgICAgICAweDVmLCAweDcwLCAweDYxLCAweDY0LCAgMHg2NCwgMHg2OSwgMHg2ZSwgMHg2NywKLSAgICAgICAgMHgzMywgMHhhYiwgMHhhYiwgMHhhYiwKLQotICAgICAgICAvLyBieXRlcyBvZiBwYWRkaW5nMgotICAgICAgICAweDQ0LCAweDExLCAweDIyLCAweDMzLCAgMHhlZiwgMHhiZSwgMHhhZCwgMHhkZSwKLSAgICAgICAgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgIDB4NDQsIDB4MzMsIDB4MjIsIDB4MTEsCi0gICAgICAgIDB4MzQsIDB4MjMsIDB4MTIsIDB4MDEsICAweDEyLCAweDAwLCAweDAwLCAweDAwLAotICAgICAgICAweDYyLCAweDc5LCAweDc0LCAweDY1LCAgMHg3MywgMHg1ZiwgMHg2ZiwgMHg2NiwKLSAgICAgICAgMHg1ZiwgMHg3MCwgMHg2MSwgMHg2NCwgIDB4NjQsIDB4NjksIDB4NmUsIDB4NjcsCi0gICAgICAgIDB4NWYsIDB4MzIsIDB4YWIsIDB4YWIsCi0KLSAgICAgICAgLy8gYnl0ZXMgb2YgcGFkZGluZzMKLSAgICAgICAgMHg0NCwgMHgxMSwgMHgyMiwgMHgzMywgIDB4ZWYsIDB4YmUsIDB4YWQsIDB4ZGUsCi0gICAgICAgIDB4ZWQsIDB4MDEsIDB4MDAsIDB4MDAsICAweDQ0LCAweDMzLCAweDIyLCAweDExLAotICAgICAgICAweDM0LCAweDIzLCAweDEyLCAweDAxLCAgMHgxMywgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAgICAgMHg2MiwgMHg3OSwgMHg3NCwgMHg2NSwgIDB4NzMsIDB4NWYsIDB4NmYsIDB4NjYsCi0gICAgICAgIDB4NWYsIDB4NzAsIDB4NjEsIDB4NjQsICAweDY0LCAweDY5LCAweDZlLCAweDY3LAotICAgICAgICAweDVmLCAweDVmLCAweDMxLCAweGFiCi0gICAgfTsKLQotICAgIGVyciA9IGNvbXBhcmVfZmlsZShmaWxlbmFtZSwgY29ycmVjdF9kYXRhLCBzaXplb2YoY29ycmVjdF9kYXRhKSk7Ci0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgLy8gcmVhZAotICAgIGZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIG9wZW5pbmcgZm9yIHJlYWQgJXNcbiIsIGZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0KLSAgICBLZXllZFZlY3RvcjxTdHJpbmc4LEZpbGVTdGF0ZT4gcmVhZFNuYXBzaG90OwotICAgIGVyciA9IHJlYWRfc25hcHNob3RfZmlsZShmZCwgJnJlYWRTbmFwc2hvdCk7Ci0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAicmVhZF9zbmFwc2hvdF9maWxlIGZhaWxlZCAlZFxuIiwgZXJyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBpZiAocmVhZFNuYXBzaG90LnNpemUoKSAhPSA0KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAicmVhZFNuYXBzaG90IHNob3VsZCBiZSBsZW5ndGggNCBpcyAlZFxuIiwgcmVhZFNuYXBzaG90LnNpemUoKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGJvb2wgbWF0Y2hlZCA9IHRydWU7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPHJlYWRTbmFwc2hvdC5zaXplKCk7IGkrKykgewotICAgICAgICBjb25zdCBTdHJpbmc4JiBuYW1lID0gcmVhZFNuYXBzaG90LmtleUF0KGkpOwotICAgICAgICBjb25zdCBGaWxlU3RhdGUgc3RhdGUgPSByZWFkU25hcHNob3QudmFsdWVBdChpKTsKLQotICAgICAgICBpZiAobmFtZSAhPSBmaWxlbmFtZXNbaV0gfHwgc3RhdGVzW2ldLm1vZFRpbWVfc2VjICE9IHN0YXRlLm1vZFRpbWVfc2VjCi0gICAgICAgICAgICAgICAgfHwgc3RhdGVzW2ldLm1vZFRpbWVfbnNlYyAhPSBzdGF0ZS5tb2RUaW1lX25zZWMgfHwgc3RhdGVzW2ldLm1vZGUgIT0gc3RhdGUubW9kZQotICAgICAgICAgICAgICAgIHx8IHN0YXRlc1tpXS5zaXplICE9IHN0YXRlLnNpemUgfHwgc3RhdGVzW2ldLmNyYzMyICE9IHN0YXRlc1tpXS5jcmMzMikgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzdGF0ZSAlZCBleHBlY3RlZD17JWQvJWQsIDB4JTA4eCwgJTA0bywgMHglMDh4LCAlM2R9ICclcydcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgIGFjdHVhbD17JWQvJWQsIDB4JTA4eCwgJTA0bywgMHglMDh4LCAlM2R9ICclcydcbiIsIGksCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlc1tpXS5tb2RUaW1lX3NlYywgc3RhdGVzW2ldLm1vZFRpbWVfbnNlYywgc3RhdGVzW2ldLm1vZGUsIHN0YXRlc1tpXS5zaXplLAotICAgICAgICAgICAgICAgICAgICBzdGF0ZXNbaV0uY3JjMzIsIG5hbWUubGVuZ3RoKCksIGZpbGVuYW1lc1tpXS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kVGltZV9zZWMsIHN0YXRlLm1vZFRpbWVfbnNlYywgc3RhdGUubW9kZSwgc3RhdGUuc2l6ZSwgc3RhdGUuY3JjMzIsCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLm5hbWVMZW4sIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgbWF0Y2hlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoZWQgPyAwIDogMTsKLX0KLQotLy8gaGV4ZHVtcCAtdiAtZSAnIiAgICAiIDgvMSAiIDB4JTAyeCwiICJcbiInIGRhdGFfd3JpdGVyLmRhdGEKLWNvbnN0IHVuc2lnbmVkIGNoYXIgREFUQV9HT0xERU5fRklMRVtdID0gewotICAgICAweDQ0LCAweDYxLCAweDc0LCAweDYxLCAweDBiLCAweDAwLCAweDAwLCAweDAwLAotICAgICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweDZmLCAweDVmLCAweDcwLAotICAgICAweDYxLCAweDY0LCAweDY0LCAweDY5LCAweDZlLCAweDY3LCAweDVmLCAweDAwLAotICAgICAweDZlLCAweDZmLCAweDVmLCAweDcwLCAweDYxLCAweDY0LCAweDY0LCAweDY5LAotICAgICAweDZlLCAweDY3LCAweDVmLCAweDAwLCAweDQ0LCAweDYxLCAweDc0LCAweDYxLAotICAgICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAwLCAweDAwLCAweDAwLAotICAgICAweDcwLCAweDYxLCAweDY0LCAweDY0LCAweDY1LCAweDY0LCAweDVmLCAweDc0LAotICAgICAweDZmLCAweDVmLCAweDVmLCAweDMzLCAweDAwLCAweGJjLCAweGJjLCAweGJjLAotICAgICAweDcwLCAweDYxLCAweDY0LCAweDY0LCAweDY1LCAweDY0LCAweDVmLCAweDc0LAotICAgICAweDZmLCAweDVmLCAweDVmLCAweDMzLCAweDAwLCAweGJjLCAweGJjLCAweGJjLAotICAgICAweDQ0LCAweDYxLCAweDc0LCAweDYxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLAotICAgICAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDYxLCAweDY0LCAweDY0LAotICAgICAweDY1LCAweDY0LCAweDVmLCAweDc0LCAweDZmLCAweDVmLCAweDMyLCAweDVmLAotICAgICAweDVmLCAweDAwLCAweGJjLCAweGJjLCAweDcwLCAweDYxLCAweDY0LCAweDY0LAotICAgICAweDY1LCAweDY0LCAweDVmLCAweDc0LCAweDZmLCAweDVmLCAweDMyLCAweDVmLAotICAgICAweDVmLCAweDAwLCAweGJjLCAweGJjLCAweDQ0LCAweDYxLCAweDc0LCAweDYxLAotICAgICAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDAwLAotICAgICAweDcwLCAweDYxLCAweDY0LCAweDY0LCAweDY1LCAweDY0LCAweDVmLCAweDc0LAotICAgICAweDZmLCAweDMxLCAweDAwLCAweGJjLCAweDcwLCAweDYxLCAweDY0LCAweDY0LAotICAgICAweDY1LCAweDY0LCAweDVmLCAweDc0LCAweDZmLCAweDMxLCAweDAwCi0KLX07Ci1jb25zdCBpbnQgREFUQV9HT0xERU5fRklMRV9TSVpFID0gc2l6ZW9mKERBVEFfR09MREVOX0ZJTEUpOwotCi1zdGF0aWMgaW50Ci10ZXN0X3dyaXRlX2hlYWRlcl9hbmRfZW50aXR5KEJhY2t1cERhdGFXcml0ZXImIHdyaXRlciwgY29uc3QgY2hhciogc3RyKQotewotICAgIGludCBlcnI7Ci0gICAgU3RyaW5nOCB0ZXh0KHN0cik7Ci0KLSAgICBlcnIgPSB3cml0ZXIuV3JpdGVFbnRpdHlIZWFkZXIodGV4dCwgdGV4dC5sZW5ndGgoKSsxKTsKLSAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJXcml0ZUVudGl0eUhlYWRlciBmYWlsZWQgd2l0aCAlc1xuIiwgc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgZXJyID0gd3JpdGVyLldyaXRlRW50aXR5RGF0YSh0ZXh0LnN0cmluZygpLCB0ZXh0Lmxlbmd0aCgpKzEpOwotICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIndyaXRlIGZhaWxlZCBmb3IgZGF0YSAnJXMnXG4iLCB0ZXh0LnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLWludAotYmFja3VwX2hlbHBlcl90ZXN0X2RhdGFfd3JpdGVyKCkKLXsKLSAgICBpbnQgZXJyOwotICAgIGludCBmZDsKLSAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9IFNDUkFUQ0hfRElSICJkYXRhX3dyaXRlci5kYXRhIjsKLQotICAgIHN5c3RlbSgicm0gLXIgIiBTQ1JBVENIX0RJUik7Ci0gICAgbWtkaXIoU0NSQVRDSF9ESVIsIDA3NzcpOwotICAgIG1rZGlyKFNDUkFUQ0hfRElSICJkYXRhIiwgMDc3Nyk7Ci0KLSAgICBmZCA9IGNyZWF0KGZpbGVuYW1lLCAwNjY2KTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBjcmVhdGluZzogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICBCYWNrdXBEYXRhV3JpdGVyIHdyaXRlcihmZCk7Ci0KLSAgICBlcnIgPSAwOwotICAgIGVyciB8PSB0ZXN0X3dyaXRlX2hlYWRlcl9hbmRfZW50aXR5KHdyaXRlciwgIm5vX3BhZGRpbmdfIik7Ci0gICAgZXJyIHw9IHRlc3Rfd3JpdGVfaGVhZGVyX2FuZF9lbnRpdHkod3JpdGVyLCAicGFkZGVkX3RvX18zIik7Ci0gICAgZXJyIHw9IHRlc3Rfd3JpdGVfaGVhZGVyX2FuZF9lbnRpdHkod3JpdGVyLCAicGFkZGVkX3RvXzJfXyIpOwotICAgIGVyciB8PSB0ZXN0X3dyaXRlX2hlYWRlcl9hbmRfZW50aXR5KHdyaXRlciwgInBhZGRlZF90bzEiKTsKLQotICAgIGNsb3NlKGZkKTsKLQotICAgIGVyciA9IGNvbXBhcmVfZmlsZShmaWxlbmFtZSwgREFUQV9HT0xERU5fRklMRSwgREFUQV9HT0xERU5fRklMRV9TSVpFKTsKLSAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1pbnQKLXRlc3RfcmVhZF9oZWFkZXJfYW5kX2VudGl0eShCYWNrdXBEYXRhUmVhZGVyJiByZWFkZXIsIGNvbnN0IGNoYXIqIHN0cikKLXsKLSAgICBpbnQgZXJyOwotICAgIGludCBidWZTaXplID0gc3RybGVuKHN0cikrMTsKLSAgICBjaGFyKiBidWYgPSAoY2hhciopbWFsbG9jKGJ1ZlNpemUpOwotICAgIFN0cmluZzggc3RyaW5nOwotICAgIGludCBjb29raWUgPSAweDExMTExMTExOwotICAgIHNpemVfdCBhY3R1YWxTaXplOwotICAgIGJvb2wgZG9uZTsKLSAgICBpbnQgdHlwZTsKLSAgICBzc2l6ZV90IG5SZWFkOwotCi0gICAgLy8gcHJpbnRmKCJcblxuLS0tLS0tLS0tLSB0ZXN0X3JlYWRfaGVhZGVyX2FuZF9lbnRpdHkgLS0gJXNcblxuIiwgc3RyKTsKLQotICAgIGVyciA9IHJlYWRlci5SZWFkTmV4dEhlYWRlcigmZG9uZSwgJnR5cGUpOwotICAgIGlmIChkb25lKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAic2hvdWxkIG5vdCBiZSBkb25lIHlldFxuIik7Ci0gICAgICAgIGdvdG8gZmluaXNoZWQ7Ci0gICAgfQotICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJlYWROZXh0SGVhZGVyIChmb3IgYXBwIGhlYWRlcikgZmFpbGVkIHdpdGggJXNcbiIsIHN0cmVycm9yKGVycikpOwotICAgICAgICBnb3RvIGZpbmlzaGVkOwotICAgIH0KLSAgICBpZiAodHlwZSAhPSBCQUNLVVBfSEVBREVSX0VOVElUWV9WMSkgewotICAgICAgICBlcnIgPSBFSU5WQUw7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidHlwZT0weCUwOHggZXhwZWN0ZWQgMHglMDh4XG4iLCB0eXBlLCBCQUNLVVBfSEVBREVSX0VOVElUWV9WMSk7Ci0gICAgfQotCi0gICAgZXJyID0gcmVhZGVyLlJlYWRFbnRpdHlIZWFkZXIoJnN0cmluZywgJmFjdHVhbFNpemUpOwotICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJlYWRFbnRpdHlIZWFkZXIgZmFpbGVkIHdpdGggJXNcbiIsIHN0cmVycm9yKGVycikpOwotICAgICAgICBnb3RvIGZpbmlzaGVkOwotICAgIH0KLSAgICBpZiAoc3RyaW5nICE9IHN0cikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJlYWRFbnRpdHlIZWFkZXIgZXhwZWN0ZWQga2V5ICclcycgZ290ICclcydcbiIsIHN0ciwgc3RyaW5nLnN0cmluZygpKTsKLSAgICAgICAgZXJyID0gRUlOVkFMOwotICAgICAgICBnb3RvIGZpbmlzaGVkOwotICAgIH0KLSAgICBpZiAoKGludClhY3R1YWxTaXplICE9IGJ1ZlNpemUpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJSZWFkRW50aXR5SGVhZGVyIGV4cGVjdGVkIGRhdGFTaXplIDB4JTA4eCBnb3QgMHglMDh4XG4iLCBidWZTaXplLAotICAgICAgICAgICAgICAgIGFjdHVhbFNpemUpOwotICAgICAgICBlcnIgPSBFSU5WQUw7Ci0gICAgICAgIGdvdG8gZmluaXNoZWQ7Ci0gICAgfQotCi0gICAgblJlYWQgPSByZWFkZXIuUmVhZEVudGl0eURhdGEoYnVmLCBidWZTaXplKTsKLSAgICBpZiAoblJlYWQgPCAwKSB7Ci0gICAgICAgIGVyciA9IHJlYWRlci5TdGF0dXMoKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJSZWFkRW50aXR5RGF0YSBmYWlsZWQgd2l0aCAlc1xuIiwgc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIGdvdG8gZmluaXNoZWQ7Ci0gICAgfQotCi0gICAgaWYgKDAgIT0gbWVtY21wKGJ1Ziwgc3RyLCBidWZTaXplKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJlYWRFbnRpdHlEYXRhIGV4cGVjdGVkICclcycgYnV0IGdvdCBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCAiCi0gICAgICAgICAgICAgICAgIiUwMnggJTAyeCAlMDJ4ICUwMnggICclYyVjJWMlYydcbiIsIHN0ciwgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLAotICAgICAgICAgICAgICAgIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSk7Ci0gICAgICAgIGVyciA9IEVJTlZBTDsKLSAgICAgICAgZ290byBmaW5pc2hlZDsKLSAgICB9Ci0KLSAgICAvLyBUaGUgbmV4dCByZWFkIHdpbGwgY29uZmlybSB3aGV0aGVyIGl0IGdvdCB0aGUgcmlnaHQgYW1vdW50IG9mIGRhdGEuCi0KLWZpbmlzaGVkOgotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ0ZXN0X3JlYWRfaGVhZGVyX2FuZF9lbnRpdHkgZmFpbGVkIHdpdGggJXNcbiIsIHN0cmVycm9yKGVycikpOwotICAgIH0KLSAgICBmcmVlKGJ1Zik7Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotaW50Ci1iYWNrdXBfaGVscGVyX3Rlc3RfZGF0YV9yZWFkZXIoKQotewotICAgIGludCBlcnI7Ci0gICAgaW50IGZkOwotICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gU0NSQVRDSF9ESVIgImRhdGFfcmVhZGVyLmRhdGEiOwotCi0gICAgc3lzdGVtKCJybSAtciAiIFNDUkFUQ0hfRElSKTsKLSAgICBta2RpcihTQ1JBVENIX0RJUiwgMDc3Nyk7Ci0gICAgbWtkaXIoU0NSQVRDSF9ESVIgImRhdGEiLCAwNzc3KTsKLQotICAgIGZkID0gY3JlYXQoZmlsZW5hbWUsIDA2NjYpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGNyZWF0aW5nOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgIGVyciA9IHdyaXRlKGZkLCBEQVRBX0dPTERFTl9GSUxFLCBEQVRBX0dPTERFTl9GSUxFX1NJWkUpOwotICAgIGlmIChlcnIgIT0gREFUQV9HT0xERU5fRklMRV9TSVpFKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgXCIlc1wiIHdyaXRpbmcgZ29sZGVuIGZpbGUgJXNcbiIsIHN0cmVycm9yKGVycm5vKSwgZmlsZW5hbWUpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgY2xvc2UoZmQpOwotCi0gICAgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgXCIlc1wiIG9wZW5pbmcgZ29sZGVuIGZpbGUgJXMgZm9yIHJlYWRcbiIsIHN0cmVycm9yKGVycm5vKSwKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIEJhY2t1cERhdGFSZWFkZXIgcmVhZGVyKGZkKTsKLQotICAgICAgICBlcnIgPSAwOwotCi0gICAgICAgIGlmIChlcnIgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGVyciA9IHRlc3RfcmVhZF9oZWFkZXJfYW5kX2VudGl0eShyZWFkZXIsICJub19wYWRkaW5nXyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgZXJyID0gdGVzdF9yZWFkX2hlYWRlcl9hbmRfZW50aXR5KHJlYWRlciwgInBhZGRlZF90b19fMyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgZXJyID0gdGVzdF9yZWFkX2hlYWRlcl9hbmRfZW50aXR5KHJlYWRlciwgInBhZGRlZF90b18yX18iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcnIgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGVyciA9IHRlc3RfcmVhZF9oZWFkZXJfYW5kX2VudGl0eShyZWFkZXIsICJwYWRkZWRfdG8xIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbG9zZShmZCk7Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50Ci1nZXRfbW9kX3RpbWUoY29uc3QgY2hhciogZmlsZW5hbWUsIHN0cnVjdCB0aW1ldmFsIHRpbWVzWzJdKQotewotICAgIGludCBlcnI7Ci0gICAgc3RydWN0IHN0YXQ2NCBzdDsKLSAgICBlcnIgPSBzdGF0NjQoZmlsZW5hbWUsICZzdCk7Ci0gICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAic3RhdCAnJXMnIGZhaWxlZDogJXNcbiIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotICAgIHRpbWVzWzBdLnR2X3NlYyA9IHN0LnN0X2F0aW1lOwotICAgIHRpbWVzWzFdLnR2X3NlYyA9IHN0LnN0X210aW1lOwotCi0gICAgLy8gSWYgc3RfYXRpbWUgaXMgYSBtYWNybyB0aGVuIHN0cnVjdCBzdGF0NjQgdXNlcyBzdHJ1Y3QgdGltZXNwZWMKLSAgICAvLyB0byBzdG9yZSB0aGUgYWNjZXNzIGFuZCBtb2RpZiB0aW1lIHZhbHVlcyBhbmQgdHlwaWNhbGx5Ci0gICAgLy8gc3RfKnRpbWVfbnNlYyBpcyBub3QgZGVmaW5lZC4gSW4gZ2xpYmMsIHRoaXMgaXMgY29udHJvbGxlZCBieQotICAgIC8vIF9fVVNFX01JU0MuCi0jaWZkZWYgX19VU0VfTUlTQwotI2lmICFkZWZpbmVkKHN0X2F0aW1lKSB8fCBkZWZpbmVkKHN0X2F0aW1lX25zZWMpCi0jZXJyb3IgIkNoZWNrIGlmIHRoaXMgX19VU0VfTUlTQyBjb25kaXRpb25hbCBpcyBzdGlsbCBuZWVkZWQuIgotI2VuZGlmCi0gICAgdGltZXNbMF0udHZfdXNlYyA9IHN0LnN0X2F0aW0udHZfbnNlYyAvIDEwMDA7Ci0gICAgdGltZXNbMV0udHZfdXNlYyA9IHN0LnN0X210aW0udHZfbnNlYyAvIDEwMDA7Ci0jZWxzZQotICAgIHRpbWVzWzBdLnR2X3VzZWMgPSBzdC5zdF9hdGltZV9uc2VjIC8gMTAwMDsKLSAgICB0aW1lc1sxXS50dl91c2VjID0gc3Quc3RfbXRpbWVfbnNlYyAvIDEwMDA7Ci0jZW5kaWYKLQotICAgIHJldHVybiAwOwotfQotCi1pbnQKLWJhY2t1cF9oZWxwZXJfdGVzdF9maWxlcygpCi17Ci0gICAgaW50IGVycjsKLSAgICBpbnQgb2xkU25hcHNob3RGRDsKLSAgICBpbnQgZGF0YVN0cmVhbUZEOwotICAgIGludCBuZXdTbmFwc2hvdEZEOwotCi0gICAgc3lzdGVtKCJybSAtciAiIFNDUkFUQ0hfRElSKTsKLSAgICBta2RpcihTQ1JBVENIX0RJUiwgMDc3Nyk7Ci0gICAgbWtkaXIoU0NSQVRDSF9ESVIgImRhdGEiLCAwNzc3KTsKLQotICAgIHdyaXRlX3RleHRfZmlsZShTQ1JBVENIX0RJUiAiZGF0YS9iIiwgImJcbmJiXG4iKTsKLSAgICB3cml0ZV90ZXh0X2ZpbGUoU0NSQVRDSF9ESVIgImRhdGEvYyIsICJjXG5jY1xuIik7Ci0gICAgd3JpdGVfdGV4dF9maWxlKFNDUkFUQ0hfRElSICJkYXRhL2QiLCAiZFxuZGRcbiIpOwotICAgIHdyaXRlX3RleHRfZmlsZShTQ1JBVENIX0RJUiAiZGF0YS9lIiwgImVcbmVlXG4iKTsKLSAgICB3cml0ZV90ZXh0X2ZpbGUoU0NSQVRDSF9ESVIgImRhdGEvZiIsICJmXG5mZlxuIik7Ci0gICAgd3JpdGVfdGV4dF9maWxlKFNDUkFUQ0hfRElSICJkYXRhL2giLCAiaFxuaGhcbiIpOwotCi0gICAgY2hhciBjb25zdCogZmlsZXNfYmVmb3JlW10gPSB7Ci0gICAgICAgIFNDUkFUQ0hfRElSICJkYXRhL2IiLAotICAgICAgICBTQ1JBVENIX0RJUiAiZGF0YS9jIiwKLSAgICAgICAgU0NSQVRDSF9ESVIgImRhdGEvZCIsCi0gICAgICAgIFNDUkFUQ0hfRElSICJkYXRhL2UiLAotICAgICAgICBTQ1JBVENIX0RJUiAiZGF0YS9mIgotICAgIH07Ci0KLSAgICBjaGFyIGNvbnN0KiBrZXlzX2JlZm9yZVtdID0gewotICAgICAgICAiZGF0YS9iIiwKLSAgICAgICAgImRhdGEvYyIsCi0gICAgICAgICJkYXRhL2QiLAotICAgICAgICAiZGF0YS9lIiwKLSAgICAgICAgImRhdGEvZiIKLSAgICB9OwotCi0gICAgZGF0YVN0cmVhbUZEID0gY3JlYXQoU0NSQVRDSF9ESVIgIjEuZGF0YSIsIDA2NjYpOwotICAgIGlmIChkYXRhU3RyZWFtRkQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBjcmVhdGluZzogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICBuZXdTbmFwc2hvdEZEID0gY3JlYXQoU0NSQVRDSF9ESVIgImJlZm9yZS5zbmFwIiwgMDY2Nik7Ci0gICAgaWYgKG5ld1NuYXBzaG90RkQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBjcmVhdGluZzogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIEJhY2t1cERhdGFXcml0ZXIgZGF0YVN0cmVhbShkYXRhU3RyZWFtRkQpOwotCi0gICAgICAgIGVyciA9IGJhY2tfdXBfZmlsZXMoLTEsICZkYXRhU3RyZWFtLCBuZXdTbmFwc2hvdEZELCBmaWxlc19iZWZvcmUsIGtleXNfYmVmb3JlLCA1KTsKLSAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xvc2UoZGF0YVN0cmVhbUZEKTsKLSAgICBjbG9zZShuZXdTbmFwc2hvdEZEKTsKLQotICAgIHNsZWVwKDMpOwotCi0gICAgc3RydWN0IHRpbWV2YWwgZF90aW1lc1syXTsKLSAgICBzdHJ1Y3QgdGltZXZhbCBlX3RpbWVzWzJdOwotCi0gICAgZXJyID0gZ2V0X21vZF90aW1lKFNDUkFUQ0hfRElSICJkYXRhL2QiLCBkX3RpbWVzKTsKLSAgICBlcnIgfD0gZ2V0X21vZF90aW1lKFNDUkFUQ0hfRElSICJkYXRhL2UiLCBlX3RpbWVzKTsKLSAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICB3cml0ZV90ZXh0X2ZpbGUoU0NSQVRDSF9ESVIgImRhdGEvYSIsICJhXG5hYVxuIik7Ci0gICAgdW5saW5rKFNDUkFUQ0hfRElSICJkYXRhL2MiKTsKLSAgICB3cml0ZV90ZXh0X2ZpbGUoU0NSQVRDSF9ESVIgImRhdGEvYyIsICJjXG5jY1xuIik7Ci0gICAgd3JpdGVfdGV4dF9maWxlKFNDUkFUQ0hfRElSICJkYXRhL2QiLCAiZGRcbmRkXG4iKTsKLSAgICB1dGltZXMoU0NSQVRDSF9ESVIgImRhdGEvZCIsIGRfdGltZXMpOwotICAgIHdyaXRlX3RleHRfZmlsZShTQ1JBVENIX0RJUiAiZGF0YS9lIiwgInpcbnp6XG4iKTsKLSAgICB1dGltZXMoU0NSQVRDSF9ESVIgImRhdGEvZSIsIGVfdGltZXMpOwotICAgIHdyaXRlX3RleHRfZmlsZShTQ1JBVENIX0RJUiAiZGF0YS9nIiwgImdcbmdnXG4iKTsKLSAgICB1bmxpbmsoU0NSQVRDSF9ESVIgImRhdGEvZiIpOwotCi0gICAgY2hhciBjb25zdCogZmlsZXNfYWZ0ZXJbXSA9IHsKLSAgICAgICAgU0NSQVRDSF9ESVIgImRhdGEvYSIsIC8vIGFkZGVkCi0gICAgICAgIFNDUkFUQ0hfRElSICJkYXRhL2IiLCAvLyBzYW1lCi0gICAgICAgIFNDUkFUQ0hfRElSICJkYXRhL2MiLCAvLyBkaWZmZXJlbnQgbW9kIHRpbWUKLSAgICAgICAgU0NSQVRDSF9ESVIgImRhdGEvZCIsIC8vIGRpZmZlcmVudCBzaXplIChzYW1lIG1vZCB0aW1lKQotICAgICAgICBTQ1JBVENIX0RJUiAiZGF0YS9lIiwgLy8gZGlmZmVyZW50IGNvbnRlbnRzIChzYW1lIG1vZCB0aW1lLCBzYW1lIHNpemUpCi0gICAgICAgIFNDUkFUQ0hfRElSICJkYXRhL2ciICAvLyBhZGRlZAotICAgIH07Ci0KLSAgICBjaGFyIGNvbnN0KiBrZXlzX2FmdGVyW10gPSB7Ci0gICAgICAgICJkYXRhL2EiLCAvLyBhZGRlZAotICAgICAgICAiZGF0YS9iIiwgLy8gc2FtZQotICAgICAgICAiZGF0YS9jIiwgLy8gZGlmZmVyZW50IG1vZCB0aW1lCi0gICAgICAgICJkYXRhL2QiLCAvLyBkaWZmZXJlbnQgc2l6ZSAoc2FtZSBtb2QgdGltZSkKLSAgICAgICAgImRhdGEvZSIsIC8vIGRpZmZlcmVudCBjb250ZW50cyAoc2FtZSBtb2QgdGltZSwgc2FtZSBzaXplKQotICAgICAgICAiZGF0YS9nIiAgLy8gYWRkZWQKLSAgICB9OwotCi0gICAgb2xkU25hcHNob3RGRCA9IG9wZW4oU0NSQVRDSF9ESVIgImJlZm9yZS5zbmFwIiwgT19SRE9OTFkpOwotICAgIGlmIChvbGRTbmFwc2hvdEZEID09IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3Igb3BlbmluZzogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICBkYXRhU3RyZWFtRkQgPSBjcmVhdChTQ1JBVENIX0RJUiAiMi5kYXRhIiwgMDY2Nik7Ci0gICAgaWYgKGRhdGFTdHJlYW1GRCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGNyZWF0aW5nOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgIG5ld1NuYXBzaG90RkQgPSBjcmVhdChTQ1JBVENIX0RJUiAiYWZ0ZXIuc25hcCIsIDA2NjYpOwotICAgIGlmIChuZXdTbmFwc2hvdEZEID09IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgY3JlYXRpbmc6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgewotICAgICAgICBCYWNrdXBEYXRhV3JpdGVyIGRhdGFTdHJlYW0oZGF0YVN0cmVhbUZEKTsKLQotICAgICAgICBlcnIgPSBiYWNrX3VwX2ZpbGVzKG9sZFNuYXBzaG90RkQsICZkYXRhU3RyZWFtLCBuZXdTbmFwc2hvdEZELCBmaWxlc19hZnRlciwga2V5c19hZnRlciwgNik7Ci0gICAgICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotfQotCi0gICAgY2xvc2Uob2xkU25hcHNob3RGRCk7Ci0gICAgY2xvc2UoZGF0YVN0cmVhbUZEKTsKLSAgICBjbG9zZShuZXdTbmFwc2hvdEZEKTsKLQotICAgIHJldHVybiAwOwotfQotCi1pbnQKLWJhY2t1cF9oZWxwZXJfdGVzdF9udWxsX2Jhc2UoKQotewotICAgIGludCBlcnI7Ci0gICAgaW50IG9sZFNuYXBzaG90RkQ7Ci0gICAgaW50IGRhdGFTdHJlYW1GRDsKLSAgICBpbnQgbmV3U25hcHNob3RGRDsKLQotICAgIHN5c3RlbSgicm0gLXIgIiBTQ1JBVENIX0RJUik7Ci0gICAgbWtkaXIoU0NSQVRDSF9ESVIsIDA3NzcpOwotICAgIG1rZGlyKFNDUkFUQ0hfRElSICJkYXRhIiwgMDc3Nyk7Ci0KLSAgICB3cml0ZV90ZXh0X2ZpbGUoU0NSQVRDSF9ESVIgImRhdGEvYSIsICJhXG5hYVxuIik7Ci0KLSAgICBjaGFyIGNvbnN0KiBmaWxlc1tdID0gewotICAgICAgICBTQ1JBVENIX0RJUiAiZGF0YS9hIiwKLSAgICB9OwotCi0gICAgY2hhciBjb25zdCoga2V5c1tdID0gewotICAgICAgICAiYSIsCi0gICAgfTsKLQotICAgIGRhdGFTdHJlYW1GRCA9IGNyZWF0KFNDUkFUQ0hfRElSICJudWxsX2Jhc2UuZGF0YSIsIDA2NjYpOwotICAgIGlmIChkYXRhU3RyZWFtRkQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBjcmVhdGluZzogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICBuZXdTbmFwc2hvdEZEID0gY3JlYXQoU0NSQVRDSF9ESVIgIm51bGxfYmFzZS5zbmFwIiwgMDY2Nik7Ci0gICAgaWYgKG5ld1NuYXBzaG90RkQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBjcmVhdGluZzogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBlcnJubzsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIEJhY2t1cERhdGFXcml0ZXIgZGF0YVN0cmVhbShkYXRhU3RyZWFtRkQpOwotCi0gICAgICAgIGVyciA9IGJhY2tfdXBfZmlsZXMoLTEsICZkYXRhU3RyZWFtLCBuZXdTbmFwc2hvdEZELCBmaWxlcywga2V5cywgMSk7Ci0gICAgICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsb3NlKGRhdGFTdHJlYW1GRCk7Ci0gICAgY2xvc2UobmV3U25hcHNob3RGRCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50Ci1iYWNrdXBfaGVscGVyX3Rlc3RfbWlzc2luZ19maWxlKCkKLXsKLSAgICBpbnQgZXJyOwotICAgIGludCBvbGRTbmFwc2hvdEZEOwotICAgIGludCBkYXRhU3RyZWFtRkQ7Ci0gICAgaW50IG5ld1NuYXBzaG90RkQ7Ci0KLSAgICBzeXN0ZW0oInJtIC1yICIgU0NSQVRDSF9ESVIpOwotICAgIG1rZGlyKFNDUkFUQ0hfRElSLCAwNzc3KTsKLSAgICBta2RpcihTQ1JBVENIX0RJUiAiZGF0YSIsIDA3NzcpOwotCi0gICAgd3JpdGVfdGV4dF9maWxlKFNDUkFUQ0hfRElSICJkYXRhL2IiLCAiYlxuYmJcbiIpOwotCi0gICAgY2hhciBjb25zdCogZmlsZXNbXSA9IHsKLSAgICAgICAgU0NSQVRDSF9ESVIgImRhdGEvYSIsCi0gICAgICAgIFNDUkFUQ0hfRElSICJkYXRhL2IiLAotICAgICAgICBTQ1JBVENIX0RJUiAiZGF0YS9jIiwKLSAgICB9OwotCi0gICAgY2hhciBjb25zdCoga2V5c1tdID0gewotICAgICAgICAiYSIsCi0gICAgICAgICJiIiwKLSAgICAgICAgImMiLAotICAgIH07Ci0KLSAgICBkYXRhU3RyZWFtRkQgPSBjcmVhdChTQ1JBVENIX0RJUiAibnVsbF9iYXNlLmRhdGEiLCAwNjY2KTsKLSAgICBpZiAoZGF0YVN0cmVhbUZEID09IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgY3JlYXRpbmc6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgbmV3U25hcHNob3RGRCA9IGNyZWF0KFNDUkFUQ0hfRElSICJudWxsX2Jhc2Uuc25hcCIsIDA2NjYpOwotICAgIGlmIChuZXdTbmFwc2hvdEZEID09IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgY3JlYXRpbmc6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgfQotCi0gICAgewotICAgICAgICBCYWNrdXBEYXRhV3JpdGVyIGRhdGFTdHJlYW0oZGF0YVN0cmVhbUZEKTsKLQotICAgICAgICBlcnIgPSBiYWNrX3VwX2ZpbGVzKC0xLCAmZGF0YVN0cmVhbSwgbmV3U25hcHNob3RGRCwgZmlsZXMsIGtleXMsIDEpOwotICAgICAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbG9zZShkYXRhU3RyZWFtRkQpOwotICAgIGNsb3NlKG5ld1NuYXBzaG90RkQpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLQotI2VuZGlmIC8vIFRFU1RfQkFDS1VQX0hFTFBFUlMKLQotfQpkaWZmIC0tZ2l0IGEvbGlicy9hbmRyb2lkZncvQ3Vyc29yV2luZG93LmNwcCBiL2xpYnMvYW5kcm9pZGZ3L0N1cnNvcldpbmRvdy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNTRlZGIuLjAwMDAwMDAKLS0tIGEvbGlicy9hbmRyb2lkZncvQ3Vyc29yV2luZG93LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCi0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSN1bmRlZiBMT0dfVEFHCi0jZGVmaW5lIExPR19UQUcgIkN1cnNvcldpbmRvdyIKLQotI2luY2x1ZGUgPGFuZHJvaWRmdy9DdXJzb3JXaW5kb3cuaD4KLSNpbmNsdWRlIDxiaW5kZXIvUGFyY2VsLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0KLSNpbmNsdWRlIDxjdXRpbHMvYXNobWVtLmg+Ci0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLUN1cnNvcldpbmRvdzo6Q3Vyc29yV2luZG93KGNvbnN0IFN0cmluZzgmIG5hbWUsIGludCBhc2htZW1GZCwKLSAgICAgICAgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIGJvb2wgcmVhZE9ubHkpIDoKLSAgICAgICAgbU5hbWUobmFtZSksIG1Bc2htZW1GZChhc2htZW1GZCksIG1EYXRhKGRhdGEpLCBtU2l6ZShzaXplKSwgbVJlYWRPbmx5KHJlYWRPbmx5KSB7Ci0gICAgbUhlYWRlciA9IHN0YXRpY19jYXN0PEhlYWRlcio+KG1EYXRhKTsKLX0KLQotQ3Vyc29yV2luZG93Ojp+Q3Vyc29yV2luZG93KCkgewotICAgIDo6bXVubWFwKG1EYXRhLCBtU2l6ZSk7Ci0gICAgOjpjbG9zZShtQXNobWVtRmQpOwotfQotCi1zdGF0dXNfdCBDdXJzb3JXaW5kb3c6OmNyZWF0ZShjb25zdCBTdHJpbmc4JiBuYW1lLCBzaXplX3Qgc2l6ZSwgQ3Vyc29yV2luZG93Kiogb3V0Q3Vyc29yV2luZG93KSB7Ci0gICAgU3RyaW5nOCBhc2htZW1OYW1lKCJDdXJzb3JXaW5kb3c6ICIpOwotICAgIGFzaG1lbU5hbWUuYXBwZW5kKG5hbWUpOwotCi0gICAgc3RhdHVzX3QgcmVzdWx0OwotICAgIGludCBhc2htZW1GZCA9IGFzaG1lbV9jcmVhdGVfcmVnaW9uKGFzaG1lbU5hbWUuc3RyaW5nKCksIHNpemUpOwotICAgIGlmIChhc2htZW1GZCA8IDApIHsKLSAgICAgICAgcmVzdWx0ID0gLWVycm5vOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IGFzaG1lbV9zZXRfcHJvdF9yZWdpb24oYXNobWVtRmQsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwotICAgICAgICBpZiAocmVzdWx0ID49IDApIHsKLSAgICAgICAgICAgIHZvaWQqIGRhdGEgPSA6Om1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgYXNobWVtRmQsIDApOwotICAgICAgICAgICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IC1lcnJubzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gYXNobWVtX3NldF9wcm90X3JlZ2lvbihhc2htZW1GZCwgUFJPVF9SRUFEKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgQ3Vyc29yV2luZG93KiB3aW5kb3cgPSBuZXcgQ3Vyc29yV2luZG93KG5hbWUsIGFzaG1lbUZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHNpemUsIGZhbHNlIC8qcmVhZE9ubHkqLyk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHdpbmRvdy0+Y2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR19XSU5ET1coIkNyZWF0ZWQgbmV3IEN1cnNvcldpbmRvdzogZnJlZU9mZnNldD0lZCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibnVtUm93cz0lZCwgbnVtQ29sdW1ucz0lZCwgbVNpemU9JWQsIG1EYXRhPSVwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LT5tSGVhZGVyLT5mcmVlT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3ctPm1IZWFkZXItPm51bVJvd3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy0+bUhlYWRlci0+bnVtQ29sdW1ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LT5tU2l6ZSwgd2luZG93LT5tRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqb3V0Q3Vyc29yV2luZG93ID0gd2luZG93OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9LOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB3aW5kb3c7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgOjptdW5tYXAoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgOjpjbG9zZShhc2htZW1GZCk7Ci0gICAgfQotICAgICpvdXRDdXJzb3JXaW5kb3cgPSBOVUxMOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXR1c190IEN1cnNvcldpbmRvdzo6Y3JlYXRlRnJvbVBhcmNlbChQYXJjZWwqIHBhcmNlbCwgQ3Vyc29yV2luZG93Kiogb3V0Q3Vyc29yV2luZG93KSB7Ci0gICAgU3RyaW5nOCBuYW1lID0gcGFyY2VsLT5yZWFkU3RyaW5nOCgpOwotCi0gICAgc3RhdHVzX3QgcmVzdWx0OwotICAgIGludCBhc2htZW1GZCA9IHBhcmNlbC0+cmVhZEZpbGVEZXNjcmlwdG9yKCk7Ci0gICAgaWYgKGFzaG1lbUZkID09IGludChCQURfVFlQRSkpIHsKLSAgICAgICAgcmVzdWx0ID0gQkFEX1RZUEU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3NpemVfdCBzaXplID0gYXNobWVtX2dldF9zaXplX3JlZ2lvbihhc2htZW1GZCk7Ci0gICAgICAgIGlmIChzaXplIDwgMCkgewotICAgICAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCBkdXBBc2htZW1GZCA9IDo6ZHVwKGFzaG1lbUZkKTsKLSAgICAgICAgICAgIGlmIChkdXBBc2htZW1GZCA8IDApIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAtZXJybm87Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZvaWQqIGRhdGEgPSA6Om1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBkdXBBc2htZW1GZCwgMCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAtZXJybm87Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQ3Vyc29yV2luZG93KiB3aW5kb3cgPSBuZXcgQ3Vyc29yV2luZG93KG5hbWUsIGR1cEFzaG1lbUZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHNpemUsIHRydWUgLypyZWFkT25seSovKTsKLSAgICAgICAgICAgICAgICAgICAgTE9HX1dJTkRPVygiQ3JlYXRlZCBDdXJzb3JXaW5kb3cgZnJvbSBwYXJjZWw6IGZyZWVPZmZzZXQ9JWQsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibnVtUm93cz0lZCwgbnVtQ29sdW1ucz0lZCwgbVNpemU9JWQsIG1EYXRhPSVwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3ctPm1IZWFkZXItPmZyZWVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LT5tSGVhZGVyLT5udW1Sb3dzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy0+bUhlYWRlci0+bnVtQ29sdW1ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3ctPm1TaXplLCB3aW5kb3ctPm1EYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgKm91dEN1cnNvcldpbmRvdyA9IHdpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9LOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICA6OmNsb3NlKGR1cEFzaG1lbUZkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAqb3V0Q3Vyc29yV2luZG93ID0gTlVMTDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0dXNfdCBDdXJzb3JXaW5kb3c6OndyaXRlVG9QYXJjZWwoUGFyY2VsKiBwYXJjZWwpIHsKLSAgICBzdGF0dXNfdCBzdGF0dXMgPSBwYXJjZWwtPndyaXRlU3RyaW5nOChtTmFtZSk7Ci0gICAgaWYgKCFzdGF0dXMpIHsKLSAgICAgICAgc3RhdHVzID0gcGFyY2VsLT53cml0ZUR1cEZpbGVEZXNjcmlwdG9yKG1Bc2htZW1GZCk7Ci0gICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXR1c190IEN1cnNvcldpbmRvdzo6Y2xlYXIoKSB7Ci0gICAgaWYgKG1SZWFkT25seSkgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgbUhlYWRlci0+ZnJlZU9mZnNldCA9IHNpemVvZihIZWFkZXIpICsgc2l6ZW9mKFJvd1Nsb3RDaHVuayk7Ci0gICAgbUhlYWRlci0+Zmlyc3RDaHVua09mZnNldCA9IHNpemVvZihIZWFkZXIpOwotICAgIG1IZWFkZXItPm51bVJvd3MgPSAwOwotICAgIG1IZWFkZXItPm51bUNvbHVtbnMgPSAwOwotCi0gICAgUm93U2xvdENodW5rKiBmaXJzdENodW5rID0gc3RhdGljX2Nhc3Q8Um93U2xvdENodW5rKj4ob2Zmc2V0VG9QdHIobUhlYWRlci0+Zmlyc3RDaHVua09mZnNldCkpOwotICAgIGZpcnN0Q2h1bmstPm5leHRDaHVua09mZnNldCA9IDA7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBDdXJzb3JXaW5kb3c6OnNldE51bUNvbHVtbnModWludDMyX3QgbnVtQ29sdW1ucykgewotICAgIGlmIChtUmVhZE9ubHkpIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLQotICAgIHVpbnQzMl90IGN1ciA9IG1IZWFkZXItPm51bUNvbHVtbnM7Ci0gICAgaWYgKChjdXIgPiAwIHx8IG1IZWFkZXItPm51bVJvd3MgPiAwKSAmJiBjdXIgIT0gbnVtQ29sdW1ucykgewotICAgICAgICBBTE9HRSgiVHJ5aW5nIHRvIGdvIGZyb20gJWQgY29sdW1ucyB0byAlZCIsIGN1ciwgbnVtQ29sdW1ucyk7Ci0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0gICAgbUhlYWRlci0+bnVtQ29sdW1ucyA9IG51bUNvbHVtbnM7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBDdXJzb3JXaW5kb3c6OmFsbG9jUm93KCkgewotICAgIGlmIChtUmVhZE9ubHkpIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLQotICAgIC8vIEZpbGwgaW4gdGhlIHJvdyBzbG90Ci0gICAgUm93U2xvdCogcm93U2xvdCA9IGFsbG9jUm93U2xvdCgpOwotICAgIGlmIChyb3dTbG90ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICB9Ci0KLSAgICAvLyBBbGxvY2F0ZSB0aGUgc2xvdHMgZm9yIHRoZSBmaWVsZCBkaXJlY3RvcnkKLSAgICBzaXplX3QgZmllbGREaXJTaXplID0gbUhlYWRlci0+bnVtQ29sdW1ucyAqIHNpemVvZihGaWVsZFNsb3QpOwotICAgIHVpbnQzMl90IGZpZWxkRGlyT2Zmc2V0ID0gYWxsb2MoZmllbGREaXJTaXplLCB0cnVlIC8qYWxpZ25lZCovKTsKLSAgICBpZiAoIWZpZWxkRGlyT2Zmc2V0KSB7Ci0gICAgICAgIG1IZWFkZXItPm51bVJvd3MtLTsKLSAgICAgICAgTE9HX1dJTkRPVygiVGhlIHJvdyBmYWlsZWQsIHNvIGJhY2sgb3V0IHRoZSBuZXcgcm93IGFjY291bnRpbmcgIgotICAgICAgICAgICAgICAgICJmcm9tIGFsbG9jUm93U2xvdCAlZCIsIG1IZWFkZXItPm51bVJvd3MpOwotICAgICAgICByZXR1cm4gTk9fTUVNT1JZOwotICAgIH0KLSAgICBGaWVsZFNsb3QqIGZpZWxkRGlyID0gc3RhdGljX2Nhc3Q8RmllbGRTbG90Kj4ob2Zmc2V0VG9QdHIoZmllbGREaXJPZmZzZXQpKTsKLSAgICBtZW1zZXQoZmllbGREaXIsIDAsIGZpZWxkRGlyU2l6ZSk7Ci0KLSAgICBMT0dfV0lORE9XKCJBbGxvY2F0ZWQgcm93ICV1LCByb3dTbG90IGlzIGF0IG9mZnNldCAldSwgZmllbGREaXIgaXMgJWQgYnl0ZXMgYXQgb2Zmc2V0ICV1XG4iLAotICAgICAgICAgICAgbUhlYWRlci0+bnVtUm93cyAtIDEsIG9mZnNldEZyb21QdHIocm93U2xvdCksIGZpZWxkRGlyU2l6ZSwgZmllbGREaXJPZmZzZXQpOwotICAgIHJvd1Nsb3QtPm9mZnNldCA9IGZpZWxkRGlyT2Zmc2V0OwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgQ3Vyc29yV2luZG93OjpmcmVlTGFzdFJvdygpIHsKLSAgICBpZiAobVJlYWRPbmx5KSB7Ci0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICBpZiAobUhlYWRlci0+bnVtUm93cyA+IDApIHsKLSAgICAgICAgbUhlYWRlci0+bnVtUm93cy0tOwotICAgIH0KLSAgICByZXR1cm4gT0s7Ci19Ci0KLXVpbnQzMl90IEN1cnNvcldpbmRvdzo6YWxsb2Moc2l6ZV90IHNpemUsIGJvb2wgYWxpZ25lZCkgewotICAgIHVpbnQzMl90IHBhZGRpbmc7Ci0gICAgaWYgKGFsaWduZWQpIHsKLSAgICAgICAgLy8gNCBieXRlIGFsaWdubWVudAotICAgICAgICBwYWRkaW5nID0gKH5tSGVhZGVyLT5mcmVlT2Zmc2V0ICsgMSkgJiAzOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhZGRpbmcgPSAwOwotICAgIH0KLQotICAgIHVpbnQzMl90IG9mZnNldCA9IG1IZWFkZXItPmZyZWVPZmZzZXQgKyBwYWRkaW5nOwotICAgIHVpbnQzMl90IG5leHRGcmVlT2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZTsKLSAgICBpZiAobmV4dEZyZWVPZmZzZXQgPiBtU2l6ZSkgewotICAgICAgICBBTE9HVygiV2luZG93IGlzIGZ1bGw6IHJlcXVlc3RlZCBhbGxvY2F0aW9uICVkIGJ5dGVzLCAiCi0gICAgICAgICAgICAgICAgImZyZWUgc3BhY2UgJWQgYnl0ZXMsIHdpbmRvdyBzaXplICVkIGJ5dGVzIiwKLSAgICAgICAgICAgICAgICBzaXplLCBmcmVlU3BhY2UoKSwgbVNpemUpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBtSGVhZGVyLT5mcmVlT2Zmc2V0ID0gbmV4dEZyZWVPZmZzZXQ7Ci0gICAgcmV0dXJuIG9mZnNldDsKLX0KLQotQ3Vyc29yV2luZG93OjpSb3dTbG90KiBDdXJzb3JXaW5kb3c6OmdldFJvd1Nsb3QodWludDMyX3Qgcm93KSB7Ci0gICAgdWludDMyX3QgY2h1bmtQb3MgPSByb3c7Ci0gICAgUm93U2xvdENodW5rKiBjaHVuayA9IHN0YXRpY19jYXN0PFJvd1Nsb3RDaHVuayo+KAotICAgICAgICAgICAgb2Zmc2V0VG9QdHIobUhlYWRlci0+Zmlyc3RDaHVua09mZnNldCkpOwotICAgIHdoaWxlIChjaHVua1BvcyA+PSBST1dfU0xPVF9DSFVOS19OVU1fUk9XUykgewotICAgICAgICBjaHVuayA9IHN0YXRpY19jYXN0PFJvd1Nsb3RDaHVuayo+KG9mZnNldFRvUHRyKGNodW5rLT5uZXh0Q2h1bmtPZmZzZXQpKTsKLSAgICAgICAgY2h1bmtQb3MgLT0gUk9XX1NMT1RfQ0hVTktfTlVNX1JPV1M7Ci0gICAgfQotICAgIHJldHVybiAmY2h1bmstPnNsb3RzW2NodW5rUG9zXTsKLX0KLQotQ3Vyc29yV2luZG93OjpSb3dTbG90KiBDdXJzb3JXaW5kb3c6OmFsbG9jUm93U2xvdCgpIHsKLSAgICB1aW50MzJfdCBjaHVua1BvcyA9IG1IZWFkZXItPm51bVJvd3M7Ci0gICAgUm93U2xvdENodW5rKiBjaHVuayA9IHN0YXRpY19jYXN0PFJvd1Nsb3RDaHVuayo+KAotICAgICAgICAgICAgb2Zmc2V0VG9QdHIobUhlYWRlci0+Zmlyc3RDaHVua09mZnNldCkpOwotICAgIHdoaWxlIChjaHVua1BvcyA+IFJPV19TTE9UX0NIVU5LX05VTV9ST1dTKSB7Ci0gICAgICAgIGNodW5rID0gc3RhdGljX2Nhc3Q8Um93U2xvdENodW5rKj4ob2Zmc2V0VG9QdHIoY2h1bmstPm5leHRDaHVua09mZnNldCkpOwotICAgICAgICBjaHVua1BvcyAtPSBST1dfU0xPVF9DSFVOS19OVU1fUk9XUzsKLSAgICB9Ci0gICAgaWYgKGNodW5rUG9zID09IFJPV19TTE9UX0NIVU5LX05VTV9ST1dTKSB7Ci0gICAgICAgIGlmICghY2h1bmstPm5leHRDaHVua09mZnNldCkgewotICAgICAgICAgICAgY2h1bmstPm5leHRDaHVua09mZnNldCA9IGFsbG9jKHNpemVvZihSb3dTbG90Q2h1bmspLCB0cnVlIC8qYWxpZ25lZCovKTsKLSAgICAgICAgICAgIGlmICghY2h1bmstPm5leHRDaHVua09mZnNldCkgewotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNodW5rID0gc3RhdGljX2Nhc3Q8Um93U2xvdENodW5rKj4ob2Zmc2V0VG9QdHIoY2h1bmstPm5leHRDaHVua09mZnNldCkpOwotICAgICAgICBjaHVuay0+bmV4dENodW5rT2Zmc2V0ID0gMDsKLSAgICAgICAgY2h1bmtQb3MgPSAwOwotICAgIH0KLSAgICBtSGVhZGVyLT5udW1Sb3dzICs9IDE7Ci0gICAgcmV0dXJuICZjaHVuay0+c2xvdHNbY2h1bmtQb3NdOwotfQotCi1DdXJzb3JXaW5kb3c6OkZpZWxkU2xvdCogQ3Vyc29yV2luZG93OjpnZXRGaWVsZFNsb3QodWludDMyX3Qgcm93LCB1aW50MzJfdCBjb2x1bW4pIHsKLSAgICBpZiAocm93ID49IG1IZWFkZXItPm51bVJvd3MgfHwgY29sdW1uID49IG1IZWFkZXItPm51bUNvbHVtbnMpIHsKLSAgICAgICAgQUxPR0UoIkZhaWxlZCB0byByZWFkIHJvdyAlZCwgY29sdW1uICVkIGZyb20gYSBDdXJzb3JXaW5kb3cgd2hpY2ggIgotICAgICAgICAgICAgICAgICJoYXMgJWQgcm93cywgJWQgY29sdW1ucy4iLAotICAgICAgICAgICAgICAgIHJvdywgY29sdW1uLCBtSGVhZGVyLT5udW1Sb3dzLCBtSGVhZGVyLT5udW1Db2x1bW5zKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIFJvd1Nsb3QqIHJvd1Nsb3QgPSBnZXRSb3dTbG90KHJvdyk7Ci0gICAgaWYgKCFyb3dTbG90KSB7Ci0gICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gZmluZCByb3dTbG90IGZvciByb3cgJWQuIiwgcm93KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIEZpZWxkU2xvdCogZmllbGREaXIgPSBzdGF0aWNfY2FzdDxGaWVsZFNsb3QqPihvZmZzZXRUb1B0cihyb3dTbG90LT5vZmZzZXQpKTsKLSAgICByZXR1cm4gJmZpZWxkRGlyW2NvbHVtbl07Ci19Ci0KLXN0YXR1c190IEN1cnNvcldpbmRvdzo6cHV0QmxvYih1aW50MzJfdCByb3csIHVpbnQzMl90IGNvbHVtbiwgY29uc3Qgdm9pZCogdmFsdWUsIHNpemVfdCBzaXplKSB7Ci0gICAgcmV0dXJuIHB1dEJsb2JPclN0cmluZyhyb3csIGNvbHVtbiwgdmFsdWUsIHNpemUsIEZJRUxEX1RZUEVfQkxPQik7Ci19Ci0KLXN0YXR1c190IEN1cnNvcldpbmRvdzo6cHV0U3RyaW5nKHVpbnQzMl90IHJvdywgdWludDMyX3QgY29sdW1uLCBjb25zdCBjaGFyKiB2YWx1ZSwKLSAgICAgICAgc2l6ZV90IHNpemVJbmNsdWRpbmdOdWxsKSB7Ci0gICAgcmV0dXJuIHB1dEJsb2JPclN0cmluZyhyb3csIGNvbHVtbiwgdmFsdWUsIHNpemVJbmNsdWRpbmdOdWxsLCBGSUVMRF9UWVBFX1NUUklORyk7Ci19Ci0KLXN0YXR1c190IEN1cnNvcldpbmRvdzo6cHV0QmxvYk9yU3RyaW5nKHVpbnQzMl90IHJvdywgdWludDMyX3QgY29sdW1uLAotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGludDMyX3QgdHlwZSkgewotICAgIGlmIChtUmVhZE9ubHkpIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLQotICAgIEZpZWxkU2xvdCogZmllbGRTbG90ID0gZ2V0RmllbGRTbG90KHJvdywgY29sdW1uKTsKLSAgICBpZiAoIWZpZWxkU2xvdCkgewotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgIH0KLQotICAgIHVpbnQzMl90IG9mZnNldCA9IGFsbG9jKHNpemUpOwotICAgIGlmICghb2Zmc2V0KSB7Ci0gICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgfQotCi0gICAgbWVtY3B5KG9mZnNldFRvUHRyKG9mZnNldCksIHZhbHVlLCBzaXplKTsKLQotICAgIGZpZWxkU2xvdC0+dHlwZSA9IHR5cGU7Ci0gICAgZmllbGRTbG90LT5kYXRhLmJ1ZmZlci5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgZmllbGRTbG90LT5kYXRhLmJ1ZmZlci5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IEN1cnNvcldpbmRvdzo6cHV0TG9uZyh1aW50MzJfdCByb3csIHVpbnQzMl90IGNvbHVtbiwgaW50NjRfdCB2YWx1ZSkgewotICAgIGlmIChtUmVhZE9ubHkpIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLQotICAgIEZpZWxkU2xvdCogZmllbGRTbG90ID0gZ2V0RmllbGRTbG90KHJvdywgY29sdW1uKTsKLSAgICBpZiAoIWZpZWxkU2xvdCkgewotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgIH0KLQotICAgIGZpZWxkU2xvdC0+dHlwZSA9IEZJRUxEX1RZUEVfSU5URUdFUjsKLSAgICBmaWVsZFNsb3QtPmRhdGEubCA9IHZhbHVlOwotICAgIHJldHVybiBPSzsKLX0KLQotc3RhdHVzX3QgQ3Vyc29yV2luZG93OjpwdXREb3VibGUodWludDMyX3Qgcm93LCB1aW50MzJfdCBjb2x1bW4sIGRvdWJsZSB2YWx1ZSkgewotICAgIGlmIChtUmVhZE9ubHkpIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLQotICAgIEZpZWxkU2xvdCogZmllbGRTbG90ID0gZ2V0RmllbGRTbG90KHJvdywgY29sdW1uKTsKLSAgICBpZiAoIWZpZWxkU2xvdCkgewotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgIH0KLQotICAgIGZpZWxkU2xvdC0+dHlwZSA9IEZJRUxEX1RZUEVfRkxPQVQ7Ci0gICAgZmllbGRTbG90LT5kYXRhLmQgPSB2YWx1ZTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLXN0YXR1c190IEN1cnNvcldpbmRvdzo6cHV0TnVsbCh1aW50MzJfdCByb3csIHVpbnQzMl90IGNvbHVtbikgewotICAgIGlmIChtUmVhZE9ubHkpIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLQotICAgIEZpZWxkU2xvdCogZmllbGRTbG90ID0gZ2V0RmllbGRTbG90KHJvdywgY29sdW1uKTsKLSAgICBpZiAoIWZpZWxkU2xvdCkgewotICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgIH0KLQotICAgIGZpZWxkU2xvdC0+dHlwZSA9IEZJRUxEX1RZUEVfTlVMTDsKLSAgICBmaWVsZFNsb3QtPmRhdGEuYnVmZmVyLm9mZnNldCA9IDA7Ci0gICAgZmllbGRTbG90LT5kYXRhLmJ1ZmZlci5zaXplID0gMDsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLX07IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9NT0RVTEVfTElDRU5TRV9BUEFDSEUyIGIvbGlicy9hbmRyb2lkZncvTU9EVUxFX0xJQ0VOU0VfQVBBQ0hFMgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy9NT0RVTEVfTElDRU5TRV9BUEFDSEUyCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL2xpYnMvYW5kcm9pZGZ3L05PVElDRSBiL2xpYnMvYW5kcm9pZGZ3L05PVElDRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzViMWVmYS4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy9OT1RJQ0UKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotCi0gICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLQotICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKLSAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KLQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCi0KLSAgIDEuIERlZmluaXRpb25zLgotCi0gICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAotICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCi0KLSAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5Ci0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKLSAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KLSAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCi0gICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKLSAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCi0gICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKLSAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCi0KLSAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCi0KLSAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAotICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgotICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLQotICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKLSAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKLSAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKLSAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KLQotICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKLSAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKLSAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawotICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KLQotICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAotICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQotICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucwotICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKLSAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgotICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAotICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KLQotICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKLSAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQotICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgotICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCi0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKLSAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKLSAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCi0gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAotICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKLSAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAotICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKLSAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgotCi0gICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCi0gICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KLQotICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCi0gICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKLSAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCi0KLSAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAotICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCi0gICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQotICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKLSAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKLSAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91Ci0gICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQotICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawotICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKLSAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKLSAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQotICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgotCi0gICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0Ci0gICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQotICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLSAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCi0gICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKLQotICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAotCi0gICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKLSAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKLSAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCi0gICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAotCi0gICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKLSAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0Ci0gICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCi0gICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90Ci0gICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCi0gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKLSAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCi0gICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAotICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwotICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKLSAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgotICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCi0gICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCi0gICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCi0gICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKLSAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKLSAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAotICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCi0gICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgotCi0gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCi0gICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKLSAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KLSAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKLSAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCi0gICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCi0KLSAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKLSAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKLSAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQotICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCi0KLSAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgotICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAotICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCi0gICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCi0gICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKLSAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQotICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgotCi0gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKLSAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAotICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKLSAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCi0gICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCi0gICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKLSAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKLSAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKLSAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCi0gICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCi0gICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCi0KLSAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKLSAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCi0gICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAotICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKLSAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5Ci0gICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgotICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAotICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5Ci0gICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCi0gICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KLQotICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0KZGlmZiAtLWdpdCBhL2xpYnMvYW5kcm9pZGZ3L09iYkZpbGUuY3BwIGIvbGlicy9hbmRyb2lkZncvT2JiRmlsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNTlmMDYuLjAwMDAwMDAKLS0tIGEvbGlicy9hbmRyb2lkZncvT2JiRmlsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNkZWZpbmUgTE9HX1RBRyAiT2JiRmlsZSIKLQotI2luY2x1ZGUgPGFuZHJvaWRmdy9PYmJGaWxlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvQ29tcGF0Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0KLS8vI2RlZmluZSBERUJVRyAxCi0KLSNkZWZpbmUga0Zvb3RlclRhZ1NpemUgOCAgLyogbGFzdCB0d28gMzItYml0IGludGVnZXJzICovCi0KLSNkZWZpbmUga0Zvb3Rlck1pblNpemUgMzMgLyogMzItYml0IHNpZ25hdHVyZSB2ZXJzaW9uICg0IGJ5dGVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAzMi1iaXQgcGFja2FnZSB2ZXJzaW9uICg0IGJ5dGVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAzMi1iaXQgZmxhZ3MgKDQgYnl0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqIDY0LWJpdCBzYWx0ICg4IGJ5dGVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAzMi1iaXQgcGFja2FnZSBuYW1lIHNpemUgKDQgYnl0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqID49MS1jaGFyYWN0ZXIgcGFja2FnZSBuYW1lICgxIGJ5dGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqIDMyLWJpdCBmb290ZXIgc2l6ZSAoNCBieXRlcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICogMzItYml0IGZvb3RlciBtYXJrZXIgKDQgYnl0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0jZGVmaW5lIGtNYXhCdWZTaXplICAgIDMyNzY4IC8qIE1heGltdW0gZmlsZSByZWFkIGJ1ZmZlciAqLwotCi0jZGVmaW5lIGtTaWduYXR1cmUgICAgIDB4MDEwNTk5ODNVIC8qIE9iYkZpbGUgc2lnbmF0dXJlICovCi0KLSNkZWZpbmUga1NpZ1ZlcnNpb24gICAgMSAvKiBXZSBvbmx5IGtub3cgYWJvdXQgc2lnbmF0dXJlIHZlcnNpb24gMSAqLwotCi0vKiBvZmZzZXRzIGluIHZlcnNpb24gMSBvZiB0aGUgaGVhZGVyICovCi0jZGVmaW5lIGtQYWNrYWdlVmVyc2lvbk9mZnNldCA0Ci0jZGVmaW5lIGtGbGFnc09mZnNldCAgICAgICAgICA4Ci0jZGVmaW5lIGtTYWx0T2Zmc2V0ICAgICAgICAgICAxMgotI2RlZmluZSBrUGFja2FnZU5hbWVMZW5PZmZzZXQgMjAKLSNkZWZpbmUga1BhY2thZ2VOYW1lT2Zmc2V0ICAgIDI0Ci0KLS8qCi0gKiBURU1QX0ZBSUxVUkVfUkVUUlkgaXMgZGVmaW5lZCBieSBzb21lLCBidXQgbm90IGFsbCwgdmVyc2lvbnMgb2YKLSAqIDx1bmlzdGQuaD4uIChBbGFzLCBpdCBpcyBub3QgYXMgc3RhbmRhcmQgYXMgd2UnZCBob3BlZCEpIFNvLCBpZiBpdCdzCi0gKiBub3QgYWxyZWFkeSBkZWZpbmVkLCB0aGVuIGRlZmluZSBpdCBoZXJlLgotICovCi0jaWZuZGVmIFRFTVBfRkFJTFVSRV9SRVRSWQotLyogVXNlZCB0byByZXRyeSBzeXNjYWxscyB0aGF0IGNhbiByZXR1cm4gRUlOVFIuICovCi0jZGVmaW5lIFRFTVBfRkFJTFVSRV9SRVRSWShleHApICh7ICAgICAgICAgXAotICAgIHR5cGVvZiAoZXhwKSBfcmM7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9yYyA9IChleHApOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKF9yYyA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7IFwKLSAgICBfcmM7IH0pCi0jZW5kaWYKLQotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLU9iYkZpbGU6Ok9iYkZpbGUoKQotICAgICAgICA6IG1QYWNrYWdlTmFtZSgiIikKLSAgICAgICAgLCBtVmVyc2lvbigtMSkKLSAgICAgICAgLCBtRmxhZ3MoMCkKLXsKLSAgICBtZW1zZXQobVNhbHQsIDAsIHNpemVvZihtU2FsdCkpOwotfQotCi1PYmJGaWxlOjp+T2JiRmlsZSgpIHsKLX0KLQotYm9vbCBPYmJGaWxlOjpyZWFkRnJvbShjb25zdCBjaGFyKiBmaWxlbmFtZSkKLXsKLSAgICBpbnQgZmQ7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0KLSAgICBmZCA9IDo6b3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOwotICAgIGlmIChmZCA8IDApIHsKLSAgICAgICAgQUxPR1coImNvdWxkbid0IG9wZW4gZmlsZSAlczogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotICAgIHN1Y2Nlc3MgPSByZWFkRnJvbShmZCk7Ci0gICAgY2xvc2UoZmQpOwotCi0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIEFMT0dXKCJmYWlsZWQgdG8gcmVhZCBmcm9tICVzIChmZD0lZClcbiIsIGZpbGVuYW1lLCBmZCk7Ci0gICAgfQotCi1vdXQ6Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgT2JiRmlsZTo6cmVhZEZyb20oaW50IGZkKQotewotICAgIGlmIChmZCA8IDApIHsKLSAgICAgICAgQUxPR1coImF0dGVtcHQgdG8gcmVhZCBmcm9tIGludmFsaWQgZmRcbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnNlT2JiRmlsZShmZCk7Ci19Ci0KLWJvb2wgT2JiRmlsZTo6cGFyc2VPYmJGaWxlKGludCBmZCkKLXsKLSAgICBvZmY2NF90IGZpbGVMZW5ndGggPSBsc2VlazY0KGZkLCAwLCBTRUVLX0VORCk7Ci0KLSAgICBpZiAoZmlsZUxlbmd0aCA8IGtGb290ZXJNaW5TaXplKSB7Ci0gICAgICAgIGlmIChmaWxlTGVuZ3RoIDwgMCkgewotICAgICAgICAgICAgQUxPR1coImVycm9yIHNlZWtpbmcgaW4gT2JiRmlsZTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HVygiZmlsZSBpcyBvbmx5ICVsbGQgKGxlc3MgdGhhbiAlZCBtaW5pbXVtKVxuIiwgZmlsZUxlbmd0aCwga0Zvb3Rlck1pblNpemUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzc2l6ZV90IGFjdHVhbDsKLSAgICBzaXplX3QgZm9vdGVyU2l6ZTsKLQotICAgIHsKLSAgICAgICAgbHNlZWs2NChmZCwgZmlsZUxlbmd0aCAtIGtGb290ZXJUYWdTaXplLCBTRUVLX1NFVCk7Ci0KLSAgICAgICAgY2hhciBmb290ZXJba0Zvb3RlclRhZ1NpemVdOwotICAgICAgICBhY3R1YWwgPSBURU1QX0ZBSUxVUkVfUkVUUlkocmVhZChmZCwgZm9vdGVyLCBrRm9vdGVyVGFnU2l6ZSkpOwotICAgICAgICBpZiAoYWN0dWFsICE9IGtGb290ZXJUYWdTaXplKSB7Ci0gICAgICAgICAgICBBTE9HVygiY291bGRuJ3QgcmVhZCBmb290ZXIgc2lnbmF0dXJlOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIGludCBmaWxlU2lnID0gZ2V0NExFKCh1bnNpZ25lZCBjaGFyKilmb290ZXIgKyBzaXplb2YoaW50MzJfdCkpOwotICAgICAgICBpZiAoZmlsZVNpZyAhPSBrU2lnbmF0dXJlKSB7Ci0gICAgICAgICAgICBBTE9HVygiZm9vdGVyIGRpZG4ndCBtYXRjaCBtYWdpYyBzdHJpbmcgKGV4cGVjdGVkIDB4JTA4eDsgZ290IDB4JTA4eClcbiIsCi0gICAgICAgICAgICAgICAgICAgIGtTaWduYXR1cmUsIGZpbGVTaWcpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9vdGVyU2l6ZSA9IGdldDRMRSgodW5zaWduZWQgY2hhciopZm9vdGVyKTsKLSAgICAgICAgaWYgKGZvb3RlclNpemUgPiAoc2l6ZV90KWZpbGVMZW5ndGggLSBrRm9vdGVyVGFnU2l6ZQotICAgICAgICAgICAgICAgIHx8IGZvb3RlclNpemUgPiBrTWF4QnVmU2l6ZSkgewotICAgICAgICAgICAgQUxPR1coImNsYWltZWQgZm9vdGVyIHNpemUgaXMgdG9vIGxhcmdlICgweCUwOHp4OyBmaWxlIHNpemUgaXMgMHglMDhsbHgpXG4iLAotICAgICAgICAgICAgICAgICAgICBmb290ZXJTaXplLCBmaWxlTGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmb290ZXJTaXplIDwgKGtGb290ZXJNaW5TaXplIC0ga0Zvb3RlclRhZ1NpemUpKSB7Ci0gICAgICAgICAgICBBTE9HVygiY2xhaW1lZCBmb290ZXIgc2l6ZSBpcyB0b28gc21hbGwgKDB4JXp4OyBtaW5pbXVtIHNpemUgaXMgMHgleClcbiIsCi0gICAgICAgICAgICAgICAgICAgIGZvb3RlclNpemUsIGtGb290ZXJNaW5TaXplIC0ga0Zvb3RlclRhZ1NpemUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgb2ZmNjRfdCBmaWxlT2Zmc2V0ID0gZmlsZUxlbmd0aCAtIGZvb3RlclNpemUgLSBrRm9vdGVyVGFnU2l6ZTsKLSAgICBpZiAobHNlZWs2NChmZCwgZmlsZU9mZnNldCwgU0VFS19TRVQpICE9IGZpbGVPZmZzZXQpIHsKLSAgICAgICAgQUxPR1coInNlZWsgJWxsZCBmYWlsZWQ6ICVzXG4iLCBmaWxlT2Zmc2V0LCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbUZvb3RlclN0YXJ0ID0gZmlsZU9mZnNldDsKLQotICAgIGNoYXIqIHNjYW5CdWYgPSAoY2hhciopbWFsbG9jKGZvb3RlclNpemUpOwotICAgIGlmIChzY2FuQnVmID09IE5VTEwpIHsKLSAgICAgICAgQUxPR1coImNvdWxkbid0IGFsbG9jYXRlIHNjYW5CdWY6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYWN0dWFsID0gVEVNUF9GQUlMVVJFX1JFVFJZKHJlYWQoZmQsIHNjYW5CdWYsIGZvb3RlclNpemUpKTsKLSAgICAvLyByZWFkQW1vdW50IGlzIGd1YXJhbnRlZWQgdG8gYmUgbGVzcyB0aGFuIGtNYXhCdWZTaXplCi0gICAgaWYgKGFjdHVhbCAhPSAoc3NpemVfdClmb290ZXJTaXplKSB7Ci0gICAgICAgIEFMT0dJKCJjb3VsZG4ndCByZWFkIE9iYkZpbGUgZm9vdGVyOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgZnJlZShzY2FuQnVmKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotI2lmZGVmIERFQlVHCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb290ZXJTaXplOyArK2kpIHsKLSAgICAgICAgQUxPR0koImNoYXI6IDB4JTAyeFxuIiwgc2NhbkJ1ZltpXSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICB1aW50MzJfdCBzaWdWZXJzaW9uID0gZ2V0NExFKCh1bnNpZ25lZCBjaGFyKilzY2FuQnVmKTsKLSAgICBpZiAoc2lnVmVyc2lvbiAhPSBrU2lnVmVyc2lvbikgewotICAgICAgICBBTE9HVygiVW5zdXBwb3J0ZWQgT2JiRmlsZSB2ZXJzaW9uICVkXG4iLCBzaWdWZXJzaW9uKTsKLSAgICAgICAgZnJlZShzY2FuQnVmKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1WZXJzaW9uID0gKGludDMyX3QpIGdldDRMRSgodW5zaWduZWQgY2hhciopc2NhbkJ1ZiArIGtQYWNrYWdlVmVyc2lvbk9mZnNldCk7Ci0gICAgbUZsYWdzID0gKGludDMyX3QpIGdldDRMRSgodW5zaWduZWQgY2hhciopc2NhbkJ1ZiArIGtGbGFnc09mZnNldCk7Ci0KLSAgICBtZW1jcHkoJm1TYWx0LCAodW5zaWduZWQgY2hhciopc2NhbkJ1ZiArIGtTYWx0T2Zmc2V0LCBzaXplb2YobVNhbHQpKTsKLQotICAgIHNpemVfdCBwYWNrYWdlTmFtZUxlbiA9IGdldDRMRSgodW5zaWduZWQgY2hhciopc2NhbkJ1ZiArIGtQYWNrYWdlTmFtZUxlbk9mZnNldCk7Ci0gICAgaWYgKHBhY2thZ2VOYW1lTGVuID09IDAKLSAgICAgICAgICAgIHx8IHBhY2thZ2VOYW1lTGVuID4gKGZvb3RlclNpemUgLSBrUGFja2FnZU5hbWVPZmZzZXQpKSB7Ci0gICAgICAgIEFMT0dXKCJiYWQgT2JiRmlsZSBwYWNrYWdlIG5hbWUgbGVuZ3RoICgweCUwNHp4OyAweCUwNHp4IHBvc3NpYmxlKVxuIiwKLSAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZUxlbiwgZm9vdGVyU2l6ZSAtIGtQYWNrYWdlTmFtZU9mZnNldCk7Ci0gICAgICAgIGZyZWUoc2NhbkJ1Zik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjaGFyKiBwYWNrYWdlTmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjYW5CdWYgKyBrUGFja2FnZU5hbWVPZmZzZXQpOwotICAgIG1QYWNrYWdlTmFtZSA9IFN0cmluZzgoY29uc3RfY2FzdDxjaGFyKj4ocGFja2FnZU5hbWUpLCBwYWNrYWdlTmFtZUxlbik7Ci0KLSAgICBmcmVlKHNjYW5CdWYpOwotCi0jaWZkZWYgREVCVUcKLSAgICBBTE9HSSgiT2JiIHNjYW4gc3VjY2VlZGVkOiBwYWNrYWdlTmFtZT0lcywgdmVyc2lvbj0lZFxuIiwgbVBhY2thZ2VOYW1lLnN0cmluZygpLCBtVmVyc2lvbik7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE9iYkZpbGU6OndyaXRlVG8oY29uc3QgY2hhciogZmlsZW5hbWUpCi17Ci0gICAgaW50IGZkOwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotCi0gICAgZmQgPSA6Om9wZW4oZmlsZW5hbWUsIE9fV1JPTkxZKTsKLSAgICBpZiAoZmQgPCAwKSB7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICBzdWNjZXNzID0gd3JpdGVUbyhmZCk7Ci0gICAgY2xvc2UoZmQpOwotCi1vdXQ6Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIEFMT0dXKCJmYWlsZWQgdG8gd3JpdGUgdG8gJXM6ICVzXG4iLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgT2JiRmlsZTo6d3JpdGVUbyhpbnQgZmQpCi17Ci0gICAgaWYgKGZkIDwgMCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbHNlZWs2NChmZCwgMCwgU0VFS19FTkQpOwotCi0gICAgaWYgKG1QYWNrYWdlTmFtZS5zaXplKCkgPT0gMCB8fCBtVmVyc2lvbiA9PSAtMSkgewotICAgICAgICBBTE9HVygidHJpZWQgdG8gd3JpdGUgdW5pbml0aWFsaXplZCBPYmJGaWxlIGRhdGFcbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciBpbnRCdWZbc2l6ZW9mKHVpbnQzMl90KSsxXTsKLSAgICBtZW1zZXQoJmludEJ1ZiwgMCwgc2l6ZW9mKGludEJ1ZikpOwotCi0gICAgcHV0NExFKGludEJ1Ziwga1NpZ1ZlcnNpb24pOwotICAgIGlmICh3cml0ZShmZCwgJmludEJ1Ziwgc2l6ZW9mKHVpbnQzMl90KSkgIT0gKHNzaXplX3Qpc2l6ZW9mKHVpbnQzMl90KSkgewotICAgICAgICBBTE9HVygiY291bGRuJ3Qgd3JpdGUgc2lnbmF0dXJlIHZlcnNpb246ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHV0NExFKGludEJ1ZiwgbVZlcnNpb24pOwotICAgIGlmICh3cml0ZShmZCwgJmludEJ1Ziwgc2l6ZW9mKHVpbnQzMl90KSkgIT0gKHNzaXplX3Qpc2l6ZW9mKHVpbnQzMl90KSkgewotICAgICAgICBBTE9HVygiY291bGRuJ3Qgd3JpdGUgcGFja2FnZSB2ZXJzaW9uXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1dDRMRShpbnRCdWYsIG1GbGFncyk7Ci0gICAgaWYgKHdyaXRlKGZkLCAmaW50QnVmLCBzaXplb2YodWludDMyX3QpKSAhPSAoc3NpemVfdClzaXplb2YodWludDMyX3QpKSB7Ci0gICAgICAgIEFMT0dXKCJjb3VsZG4ndCB3cml0ZSBwYWNrYWdlIHZlcnNpb25cbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHdyaXRlKGZkLCBtU2FsdCwgc2l6ZW9mKG1TYWx0KSkgIT0gKHNzaXplX3Qpc2l6ZW9mKG1TYWx0KSkgewotICAgICAgICBBTE9HVygiY291bGRuJ3Qgd3JpdGUgc2FsdDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzaXplX3QgcGFja2FnZU5hbWVMZW4gPSBtUGFja2FnZU5hbWUuc2l6ZSgpOwotICAgIHB1dDRMRShpbnRCdWYsIHBhY2thZ2VOYW1lTGVuKTsKLSAgICBpZiAod3JpdGUoZmQsICZpbnRCdWYsIHNpemVvZih1aW50MzJfdCkpICE9IChzc2l6ZV90KXNpemVvZih1aW50MzJfdCkpIHsKLSAgICAgICAgQUxPR1coImNvdWxkbid0IHdyaXRlIHBhY2thZ2UgbmFtZSBsZW5ndGg6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHdyaXRlKGZkLCBtUGFja2FnZU5hbWUuc3RyaW5nKCksIHBhY2thZ2VOYW1lTGVuKSAhPSAoc3NpemVfdClwYWNrYWdlTmFtZUxlbikgewotICAgICAgICBBTE9HVygiY291bGRuJ3Qgd3JpdGUgcGFja2FnZSBuYW1lOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1dDRMRShpbnRCdWYsIGtQYWNrYWdlTmFtZU9mZnNldCArIHBhY2thZ2VOYW1lTGVuKTsKLSAgICBpZiAod3JpdGUoZmQsICZpbnRCdWYsIHNpemVvZih1aW50MzJfdCkpICE9IChzc2l6ZV90KXNpemVvZih1aW50MzJfdCkpIHsKLSAgICAgICAgQUxPR1coImNvdWxkbid0IHdyaXRlIGZvb3RlciBzaXplOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1dDRMRShpbnRCdWYsIGtTaWduYXR1cmUpOwotICAgIGlmICh3cml0ZShmZCwgJmludEJ1Ziwgc2l6ZW9mKHVpbnQzMl90KSkgIT0gKHNzaXplX3Qpc2l6ZW9mKHVpbnQzMl90KSkgewotICAgICAgICBBTE9HVygiY291bGRuJ3Qgd3JpdGUgZm9vdGVyIG1hZ2ljIHNpZ25hdHVyZTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBPYmJGaWxlOjpyZW1vdmVGcm9tKGNvbnN0IGNoYXIqIGZpbGVuYW1lKQotewotICAgIGludCBmZDsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgIGZkID0gOjpvcGVuKGZpbGVuYW1lLCBPX1JEV1IpOwotICAgIGlmIChmZCA8IDApIHsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotICAgIHN1Y2Nlc3MgPSByZW1vdmVGcm9tKGZkKTsKLSAgICBjbG9zZShmZCk7Ci0KLW91dDoKLSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgQUxPR1coImZhaWxlZCB0byByZW1vdmUgc2lnbmF0dXJlIGZyb20gJXM6ICVzXG4iLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgT2JiRmlsZTo6cmVtb3ZlRnJvbShpbnQgZmQpCi17Ci0gICAgaWYgKGZkIDwgMCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFyZWFkRnJvbShmZCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZ0cnVuY2F0ZShmZCwgbUZvb3RlclN0YXJ0KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi19CmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmNwcCBiL2xpYnMvYW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2MzNTYzLi4wMDAwMDAwCi0tLSBhL2xpYnMvYW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTc5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJSZXNvdXJjZVR5cGUiCi0vLyNkZWZpbmUgTE9HX05ERUJVRyAwCi0KLSNpbmNsdWRlIDxhbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5oPgotI2luY2x1ZGUgPHV0aWxzL0F0b21pYy5oPgotI2luY2x1ZGUgPHV0aWxzL0J5dGVPcmRlci5oPgotI2luY2x1ZGUgPHV0aWxzL0RlYnVnLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nMTYuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtZW1vcnkuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0jaWZuZGVmIElOVDMyX01BWAotI2RlZmluZSBJTlQzMl9NQVggKChpbnQzMl90KSgyMTQ3NDgzNjQ3KSkKLSNlbmRpZgotCi0jZGVmaW5lIFNUUklOR19QT09MX05PSVNZKHgpIC8veAotI2RlZmluZSBYTUxfTk9JU1koeCkgLy94Ci0jZGVmaW5lIFRBQkxFX05PSVNZKHgpIC8veAotI2RlZmluZSBUQUJMRV9HRVRFTlRSWSh4KSAvL3gKLSNkZWZpbmUgVEFCTEVfU1VQRVJfTk9JU1koeCkgLy94Ci0jZGVmaW5lIExPQURfVEFCTEVfTk9JU1koeCkgLy94Ci0jZGVmaW5lIFRBQkxFX1RIRU1FKHgpIC8veAotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLSNpZmRlZiBIQVZFX1dJTlNPQ0sKLSN1bmRlZiAgbmh0b2wKLSN1bmRlZiAgaHRvbmwKLQotI2lmZGVmIEhBVkVfTElUVExFX0VORElBTgotI2RlZmluZSBudG9obCh4KSAgICAoICgoeCkgPDwgMjQpIHwgKCgoeCkgPj4gMjQpICYgMjU1KSB8ICgoKHgpIDw8IDgpICYgMHhmZjAwMDApIHwgKCgoeCkgPj4gOCkgJiAweGZmMDApICkKLSNkZWZpbmUgaHRvbmwoeCkgICAgbnRvaGwoeCkKLSNkZWZpbmUgbnRvaHMoeCkgICAgKCAoKCh4KSA8PCA4KSAmIDB4ZmYwMCkgfCAoKCh4KSA+PiA4KSAmIDI1NSkgKQotI2RlZmluZSBodG9ucyh4KSAgICBudG9ocyh4KQotI2Vsc2UKLSNkZWZpbmUgbnRvaGwoeCkgICAgKHgpCi0jZGVmaW5lIGh0b25sKHgpICAgICh4KQotI2RlZmluZSBudG9ocyh4KSAgICAoeCkKLSNkZWZpbmUgaHRvbnMoeCkgICAgKHgpCi0jZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIElETUFQX01BR0lDICAgICAgICAgMHg3MDZkNjQ2OQotLy8gc2l6ZSBtZWFzdXJlZCBpbiBzaXplb2YodWludDMyX3QpCi0jZGVmaW5lIElETUFQX0hFQURFUl9TSVpFIChSZXNUYWJsZTo6SURNQVBfSEVBREVSX1NJWkVfQllURVMgLyBzaXplb2YodWludDMyX3QpKQotCi1zdGF0aWMgdm9pZCBwcmludFRvTG9nRnVuYyh2b2lkKiBjb29raWUsIGNvbnN0IGNoYXIqIHR4dCkKLXsKLSAgICBBTE9HVigiJXMiLCB0eHQpOwotfQotCi0vLyBTdGFuZGFyZCBDIGlzc3BhY2UoKSBpcyBvbmx5IHJlcXVpcmVkIHRvIGxvb2sgYXQgdGhlIGxvdyBieXRlIG9mIGl0cyBpbnB1dCwgc28KLS8vIHByb2R1Y2VzIGluY29ycmVjdCByZXN1bHRzIGZvciBVVEYtMTYgY2hhcmFjdGVycy4gIEZvciBzYWZldHkncyBzYWtlLCBhc3N1bWUgdGhhdAotLy8gYW55IGhpZ2gtYnl0ZSBVVEYtMTYgY29kZSBwb2ludCBpcyBub3Qgd2hpdGVzcGFjZS4KLWlubGluZSBpbnQgaXNzcGFjZTE2KGNoYXIxNl90IGMpIHsKLSAgICByZXR1cm4gKGMgPCAweDAwODAgJiYgaXNzcGFjZShjKSk7Ci19Ci0KLS8vIHJhbmdlIGNoZWNrZWQ7IGd1YXJhbnRlZWQgdG8gTlVMLXRlcm1pbmF0ZSB3aXRoaW4gdGhlIHN0YXRlZCBudW1iZXIgb2YgYXZhaWxhYmxlIHNsb3RzCi0vLyBOT1RFOiBpZiB0aGlzIHRydW5jYXRlcyB0aGUgZHN0IHN0cmluZyBkdWUgdG8gcnVubmluZyBvdXQgb2Ygc3BhY2UsIG5vIGF0dGVtcHQgaXMKLS8vIG1hZGUgdG8gYXZvaWQgc3BsaXR0aW5nIHN1cnJvZ2F0ZSBwYWlycy4KLXN0YXRpYyB2b2lkIHN0cmNweTE2X2R0b2godWludDE2X3QqIGRzdCwgY29uc3QgdWludDE2X3QqIHNyYywgc2l6ZV90IGF2YWlsKQotewotICAgIHVpbnQxNl90KiBsYXN0ID0gZHN0ICsgYXZhaWwgLSAxOwotICAgIHdoaWxlICgqc3JjICYmIChkc3QgPCBsYXN0KSkgewotICAgICAgICBjaGFyMTZfdCBzID0gZHRvaHMoKnNyYyk7Ci0gICAgICAgICpkc3QrKyA9IHM7Ci0gICAgICAgIHNyYysrOwotICAgIH0KLSAgICAqZHN0ID0gMDsKLX0KLQotc3RhdGljIHN0YXR1c190IHZhbGlkYXRlX2NodW5rKGNvbnN0IFJlc0NodW5rX2hlYWRlciogY2h1bmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1pblNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogZGF0YUVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lKQotewotICAgIGNvbnN0IHVpbnQxNl90IGhlYWRlclNpemUgPSBkdG9ocyhjaHVuay0+aGVhZGVyU2l6ZSk7Ci0gICAgY29uc3QgdWludDMyX3Qgc2l6ZSA9IGR0b2hsKGNodW5rLT5zaXplKTsKLQotICAgIGlmIChoZWFkZXJTaXplID49IG1pblNpemUpIHsKLSAgICAgICAgaWYgKGhlYWRlclNpemUgPD0gc2l6ZSkgewotICAgICAgICAgICAgaWYgKCgoaGVhZGVyU2l6ZXxzaXplKSYweDMpID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoKHNzaXplX3Qpc2l6ZSA8PSAoZGF0YUVuZC0oKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBTE9HVygiJXMgZGF0YSBzaXplICVwIGV4dGVuZHMgYmV5b25kIHJlc291cmNlIGVuZCAlcC4iLAotICAgICAgICAgICAgICAgICAgICAgbmFtZSwgKHZvaWQqKXNpemUsCi0gICAgICAgICAgICAgICAgICAgICAodm9pZCopKGRhdGFFbmQtKChjb25zdCB1aW50OF90KiljaHVuaykpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1RZUEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBTE9HVygiJXMgc2l6ZSAweCV4IG9yIGhlYWRlclNpemUgMHgleCBpcyBub3Qgb24gYW4gaW50ZWdlciBib3VuZGFyeS4iLAotICAgICAgICAgICAgICAgICBuYW1lLCAoaW50KXNpemUsIChpbnQpaGVhZGVyU2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gQkFEX1RZUEU7Ci0gICAgICAgIH0KLSAgICAgICAgQUxPR1coIiVzIHNpemUgJXAgaXMgc21hbGxlciB0aGFuIGhlYWRlciBzaXplICVwLiIsCi0gICAgICAgICAgICAgbmFtZSwgKHZvaWQqKXNpemUsICh2b2lkKikoaW50KWhlYWRlclNpemUpOwotICAgICAgICByZXR1cm4gQkFEX1RZUEU7Ci0gICAgfQotICAgIEFMT0dXKCIlcyBoZWFkZXIgc2l6ZSAlcCBpcyB0b28gc21hbGwuIiwKLSAgICAgICAgIG5hbWUsICh2b2lkKikoaW50KWhlYWRlclNpemUpOwotICAgIHJldHVybiBCQURfVFlQRTsKLX0KLQotaW5saW5lIHZvaWQgUmVzX3ZhbHVlOjpjb3B5RnJvbV9kdG9oKGNvbnN0IFJlc192YWx1ZSYgc3JjKQotewotICAgIHNpemUgPSBkdG9ocyhzcmMuc2l6ZSk7Ci0gICAgcmVzMCA9IHNyYy5yZXMwOwotICAgIGRhdGFUeXBlID0gc3JjLmRhdGFUeXBlOwotICAgIGRhdGEgPSBkdG9obChzcmMuZGF0YSk7Ci19Ci0KLXZvaWQgUmVzX3BuZ185cGF0Y2g6OmRldmljZVRvRmlsZSgpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1YRGl2czsgaSsrKSB7Ci0gICAgICAgIHhEaXZzW2ldID0gaHRvbmwoeERpdnNbaV0pOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVlEaXZzOyBpKyspIHsKLSAgICAgICAgeURpdnNbaV0gPSBodG9ubCh5RGl2c1tpXSk7Ci0gICAgfQotICAgIHBhZGRpbmdMZWZ0ID0gaHRvbmwocGFkZGluZ0xlZnQpOwotICAgIHBhZGRpbmdSaWdodCA9IGh0b25sKHBhZGRpbmdSaWdodCk7Ci0gICAgcGFkZGluZ1RvcCA9IGh0b25sKHBhZGRpbmdUb3ApOwotICAgIHBhZGRpbmdCb3R0b20gPSBodG9ubChwYWRkaW5nQm90dG9tKTsKLSAgICBmb3IgKGludCBpPTA7IGk8bnVtQ29sb3JzOyBpKyspIHsKLSAgICAgICAgY29sb3JzW2ldID0gaHRvbmwoY29sb3JzW2ldKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzX3BuZ185cGF0Y2g6OmZpbGVUb0RldmljZSgpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1YRGl2czsgaSsrKSB7Ci0gICAgICAgIHhEaXZzW2ldID0gbnRvaGwoeERpdnNbaV0pOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVlEaXZzOyBpKyspIHsKLSAgICAgICAgeURpdnNbaV0gPSBudG9obCh5RGl2c1tpXSk7Ci0gICAgfQotICAgIHBhZGRpbmdMZWZ0ID0gbnRvaGwocGFkZGluZ0xlZnQpOwotICAgIHBhZGRpbmdSaWdodCA9IG50b2hsKHBhZGRpbmdSaWdodCk7Ci0gICAgcGFkZGluZ1RvcCA9IG50b2hsKHBhZGRpbmdUb3ApOwotICAgIHBhZGRpbmdCb3R0b20gPSBudG9obChwYWRkaW5nQm90dG9tKTsKLSAgICBmb3IgKGludCBpPTA7IGk8bnVtQ29sb3JzOyBpKyspIHsKLSAgICAgICAgY29sb3JzW2ldID0gbnRvaGwoY29sb3JzW2ldKTsKLSAgICB9Ci19Ci0KLXNpemVfdCBSZXNfcG5nXzlwYXRjaDo6c2VyaWFsaXplZFNpemUoKQotewotICAgIC8vIFRoZSBzaXplIG9mIHRoaXMgc3RydWN0IGlzIDMyIGJ5dGVzIG9uIHRoZSAzMi1iaXQgdGFyZ2V0IHN5c3RlbQotICAgIC8vIDQgKiBpbnQ4X3QKLSAgICAvLyA0ICogaW50MzJfdAotICAgIC8vIDMgKiBwb2ludGVyCi0gICAgcmV0dXJuIDMyCi0gICAgICAgICAgICArIG51bVhEaXZzICogc2l6ZW9mKGludDMyX3QpCi0gICAgICAgICAgICArIG51bVlEaXZzICogc2l6ZW9mKGludDMyX3QpCi0gICAgICAgICAgICArIG51bUNvbG9ycyAqIHNpemVvZih1aW50MzJfdCk7Ci19Ci0KLXZvaWQqIFJlc19wbmdfOXBhdGNoOjpzZXJpYWxpemUoKQotewotICAgIC8vIFVzZSBjYWxsb2Mgc2luY2Ugd2UncmUgZ29pbmcgdG8gbGVhdmUgYSBmZXcgaG9sZXMgaW4gdGhlIGRhdGEKLSAgICAvLyBhbmQgd2FudCB0aGlzIHRvIHJ1biBjbGVhbmx5IHVuZGVyIHZhbGdyaW5kCi0gICAgdm9pZCogbmV3RGF0YSA9IGNhbGxvYygxLCBzZXJpYWxpemVkU2l6ZSgpKTsKLSAgICBzZXJpYWxpemUobmV3RGF0YSk7Ci0gICAgcmV0dXJuIG5ld0RhdGE7Ci19Ci0KLXZvaWQgUmVzX3BuZ185cGF0Y2g6OnNlcmlhbGl6ZSh2b2lkICogb3V0RGF0YSkKLXsKLSAgICBjaGFyKiBkYXRhID0gKGNoYXIqKSBvdXREYXRhOwotICAgIG1lbW1vdmUoZGF0YSwgJndhc0Rlc2VyaWFsaXplZCwgNCk7ICAgICAvLyBjb3B5ICB3YXNEZXNlcmlhbGl6ZWQsIG51bVhEaXZzLCBudW1ZRGl2cywgbnVtQ29sb3JzCi0gICAgbWVtbW92ZShkYXRhICsgMTIsICZwYWRkaW5nTGVmdCwgMTYpOyAgIC8vIGNvcHkgcGFkZGluZ1hYWFgKLSAgICBkYXRhICs9IDMyOwotCi0gICAgbWVtbW92ZShkYXRhLCB0aGlzLT54RGl2cywgbnVtWERpdnMgKiBzaXplb2YoaW50MzJfdCkpOwotICAgIGRhdGEgKz0gIG51bVhEaXZzICogc2l6ZW9mKGludDMyX3QpOwotICAgIG1lbW1vdmUoZGF0YSwgdGhpcy0+eURpdnMsIG51bVlEaXZzICogc2l6ZW9mKGludDMyX3QpKTsKLSAgICBkYXRhICs9ICBudW1ZRGl2cyAqIHNpemVvZihpbnQzMl90KTsKLSAgICBtZW1tb3ZlKGRhdGEsIHRoaXMtPmNvbG9ycywgbnVtQ29sb3JzICogc2l6ZW9mKHVpbnQzMl90KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlc2VyaWFsaXplSW50ZXJuYWwoY29uc3Qgdm9pZCogaW5EYXRhLCBSZXNfcG5nXzlwYXRjaCogb3V0RGF0YSkgewotICAgIGNoYXIqIHBhdGNoID0gKGNoYXIqKSBpbkRhdGE7Ci0gICAgaWYgKGluRGF0YSAhPSBvdXREYXRhKSB7Ci0gICAgICAgIG1lbW1vdmUoJm91dERhdGEtPndhc0Rlc2VyaWFsaXplZCwgcGF0Y2gsIDQpOyAgICAgLy8gY29weSAgd2FzRGVzZXJpYWxpemVkLCBudW1YRGl2cywgbnVtWURpdnMsIG51bUNvbG9ycwotICAgICAgICBtZW1tb3ZlKCZvdXREYXRhLT5wYWRkaW5nTGVmdCwgcGF0Y2ggKyAxMiwgNCk7ICAgICAvLyBjb3B5ICB3YXNEZXNlcmlhbGl6ZWQsIG51bVhEaXZzLCBudW1ZRGl2cywgbnVtQ29sb3JzCi0gICAgfQotICAgIG91dERhdGEtPndhc0Rlc2VyaWFsaXplZCA9IHRydWU7Ci0gICAgY2hhciogZGF0YSA9IChjaGFyKilvdXREYXRhOwotICAgIGRhdGEgKz0gIHNpemVvZihSZXNfcG5nXzlwYXRjaCk7Ci0gICAgb3V0RGF0YS0+eERpdnMgPSAoaW50MzJfdCopIGRhdGE7Ci0gICAgZGF0YSArPSAgb3V0RGF0YS0+bnVtWERpdnMgKiBzaXplb2YoaW50MzJfdCk7Ci0gICAgb3V0RGF0YS0+eURpdnMgPSAoaW50MzJfdCopIGRhdGE7Ci0gICAgZGF0YSArPSAgb3V0RGF0YS0+bnVtWURpdnMgKiBzaXplb2YoaW50MzJfdCk7Ci0gICAgb3V0RGF0YS0+Y29sb3JzID0gKHVpbnQzMl90KikgZGF0YTsKLX0KLQotc3RhdGljIGJvb2wgYXNzZXJ0SWRtYXBIZWFkZXIoY29uc3QgdWludDMyX3QqIG1hcCwgc2l6ZV90IHNpemVCeXRlcykKLXsKLSAgICBpZiAoc2l6ZUJ5dGVzIDwgUmVzVGFibGU6OklETUFQX0hFQURFUl9TSVpFX0JZVEVTKSB7Ci0gICAgICAgIEFMT0dXKCJpZG1hcCBhc3NlcnRpb24gZmFpbGVkOiBzaXplPSVkIGJ5dGVzXG4iLCAoaW50KXNpemVCeXRlcyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCptYXAgIT0gaHRvZGwoSURNQVBfTUFHSUMpKSB7IC8vIGh0b2RsOiBtYXAgZGF0YSBleHBlY3RlZCB0byBiZSBpbiBjb3JyZWN0IGVuZGlhbmVzcwotICAgICAgICBBTE9HVygiaWRtYXAgYXNzZXJ0aW9uIGZhaWxlZDogaW52YWxpZCBtYWdpYyBmb3VuZCAoaXMgMHglMDh4LCBleHBlY3RlZCAweCUwOHgpXG4iLAotICAgICAgICAgICAgICptYXAsIGh0b2RsKElETUFQX01BR0lDKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBzdGF0dXNfdCBpZG1hcExvb2t1cChjb25zdCB1aW50MzJfdCogbWFwLCBzaXplX3Qgc2l6ZUJ5dGVzLCB1aW50MzJfdCBrZXksIHVpbnQzMl90KiBvdXRWYWx1ZSkKLXsKLSAgICAvLyBzZWUgUkVBRE1FIGZvciBkZXRhaWxzIG9uIHRoZSBmb3JtYXQgb2YgbWFwCi0gICAgaWYgKCFhc3NlcnRJZG1hcEhlYWRlcihtYXAsIHNpemVCeXRlcykpIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIG1hcCA9IG1hcCArIElETUFQX0hFQURFUl9TSVpFOyAvLyBza2lwIGFoZWFkIHRvIGRhdGEgc2VnbWVudAotICAgIC8vIHNpemUgb2YgZGF0YSBibG9jaywgaW4gdWludDMyX3QKLSAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IChzaXplQnl0ZXMgLSBSZXNUYWJsZTo6SURNQVBfSEVBREVSX1NJWkVfQllURVMpIC8gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICBjb25zdCB1aW50MzJfdCB0eXBlID0gUmVzX0dFVFRZUEUoa2V5KSArIDE7IC8vIGFkZCBvbmUsIGlkbWFwIHN0b3JlcyAicHVibGljIiB0eXBlIGlkCi0gICAgY29uc3QgdWludDMyX3QgZW50cnkgPSBSZXNfR0VURU5UUlkoa2V5KTsKLSAgICBjb25zdCB1aW50MzJfdCB0eXBlQ291bnQgPSAqbWFwOwotCi0gICAgaWYgKHR5cGUgPiB0eXBlQ291bnQpIHsKLSAgICAgICAgQUxPR1coIlJlc291cmNlIElEIG1hcDogdHlwZT0lZCBleGNlZWRzIG51bWJlciBvZiB0eXBlcz0lZFxuIiwgdHlwZSwgdHlwZUNvdW50KTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIGlmICh0eXBlQ291bnQgPiBzaXplKSB7Ci0gICAgICAgIEFMT0dXKCJSZXNvdXJjZSBJRCBtYXA6IG51bWJlciBvZiB0eXBlcz0lZCBleGNlZWRzIHNpemUgb2YgbWFwPSVkXG4iLCB0eXBlQ291bnQsIChpbnQpc2l6ZSk7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICBjb25zdCB1aW50MzJfdCB0eXBlT2Zmc2V0ID0gbWFwW3R5cGVdOwotICAgIGlmICh0eXBlT2Zmc2V0ID09IDApIHsKLSAgICAgICAgKm91dFZhbHVlID0gMDsKLSAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgIH0KLSAgICBpZiAodHlwZU9mZnNldCArIDEgPiBzaXplKSB7Ci0gICAgICAgIEFMT0dXKCJSZXNvdXJjZSBJRCBtYXA6IHR5cGUgb2Zmc2V0PSVkIGV4Y2VlZHMgcmVhc29uYWJsZSB2YWx1ZSwgc2l6ZSBvZiBtYXA9JWRcbiIsCi0gICAgICAgICAgICAgdHlwZU9mZnNldCwgKGludClzaXplKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIGNvbnN0IHVpbnQzMl90IGVudHJ5Q291bnQgPSBtYXBbdHlwZU9mZnNldF07Ci0gICAgY29uc3QgdWludDMyX3QgZW50cnlPZmZzZXQgPSBtYXBbdHlwZU9mZnNldCArIDFdOwotICAgIGlmIChlbnRyeUNvdW50ID09IDAgfHwgZW50cnkgPCBlbnRyeU9mZnNldCB8fCBlbnRyeSAtIGVudHJ5T2Zmc2V0ID4gZW50cnlDb3VudCAtIDEpIHsKLSAgICAgICAgKm91dFZhbHVlID0gMDsKLSAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgIH0KLSAgICBjb25zdCB1aW50MzJfdCBpbmRleCA9IHR5cGVPZmZzZXQgKyAyICsgZW50cnkgLSBlbnRyeU9mZnNldDsKLSAgICBpZiAoaW5kZXggPiBzaXplKSB7Ci0gICAgICAgIEFMT0dXKCJSZXNvdXJjZSBJRCBtYXA6IGVudHJ5IGluZGV4PSVkIGV4Y2VlZHMgc2l6ZSBvZiBtYXA9JWRcbiIsIGluZGV4LCAoaW50KXNpemUpOwotICAgICAgICAqb3V0VmFsdWUgPSAwOwotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotICAgICpvdXRWYWx1ZSA9IG1hcFtpbmRleF07Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyBzdGF0dXNfdCBnZXRJZG1hcFBhY2thZ2VJZChjb25zdCB1aW50MzJfdCogbWFwLCBzaXplX3QgbWFwU2l6ZSwgdWludDMyX3QgKm91dElkKQotewotICAgIGlmICghYXNzZXJ0SWRtYXBIZWFkZXIobWFwLCBtYXBTaXplKSkgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgY29uc3QgdWludDMyX3QqIHAgPSBtYXAgKyBJRE1BUF9IRUFERVJfU0laRSArIDE7Ci0gICAgd2hpbGUgKCpwID09IDApIHsKLSAgICAgICAgKytwOwotICAgIH0KLSAgICAqb3V0SWQgPSAobWFwWypwICsgSURNQVBfSEVBREVSX1NJWkUgKyAyXSA+PiAyNCkgJiAweDAwMDAwMGZmOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotUmVzX3BuZ185cGF0Y2gqIFJlc19wbmdfOXBhdGNoOjpkZXNlcmlhbGl6ZShjb25zdCB2b2lkKiBpbkRhdGEpCi17Ci0gICAgaWYgKHNpemVvZih2b2lkKikgIT0gc2l6ZW9mKGludDMyX3QpKSB7Ci0gICAgICAgIEFMT0dFKCJDYW5ub3QgZGVzZXJpYWxpemUgb24gbm9uIDMyLWJpdCBzeXN0ZW1cbiIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZGVzZXJpYWxpemVJbnRlcm5hbChpbkRhdGEsIChSZXNfcG5nXzlwYXRjaCopIGluRGF0YSk7Ci0gICAgcmV0dXJuIChSZXNfcG5nXzlwYXRjaCopIGluRGF0YTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZXNTdHJpbmdQb29sOjpSZXNTdHJpbmdQb29sKCkKLSAgICA6IG1FcnJvcihOT19JTklUKSwgbU93bmVkRGF0YShOVUxMKSwgbUhlYWRlcihOVUxMKSwgbUNhY2hlKE5VTEwpCi17Ci19Ci0KLVJlc1N0cmluZ1Bvb2w6OlJlc1N0cmluZ1Bvb2woY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIGJvb2wgY29weURhdGEpCi0gICAgOiBtRXJyb3IoTk9fSU5JVCksIG1Pd25lZERhdGEoTlVMTCksIG1IZWFkZXIoTlVMTCksIG1DYWNoZShOVUxMKQotewotICAgIHNldFRvKGRhdGEsIHNpemUsIGNvcHlEYXRhKTsKLX0KLQotUmVzU3RyaW5nUG9vbDo6flJlc1N0cmluZ1Bvb2woKQotewotICAgIHVuaW5pdCgpOwotfQotCi1zdGF0dXNfdCBSZXNTdHJpbmdQb29sOjpzZXRUbyhjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgYm9vbCBjb3B5RGF0YSkKLXsKLSAgICBpZiAoIWRhdGEgfHwgIXNpemUpIHsKLSAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgIH0KLQotICAgIHVuaW5pdCgpOwotCi0gICAgY29uc3QgYm9vbCBub3REZXZpY2VFbmRpYW4gPSBodG9kcygweGYwKSAhPSAweGYwOwotCi0gICAgaWYgKGNvcHlEYXRhIHx8IG5vdERldmljZUVuZGlhbikgewotICAgICAgICBtT3duZWREYXRhID0gbWFsbG9jKHNpemUpOwotICAgICAgICBpZiAobU93bmVkRGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1OT19NRU1PUlkpOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweShtT3duZWREYXRhLCBkYXRhLCBzaXplKTsKLSAgICAgICAgZGF0YSA9IG1Pd25lZERhdGE7Ci0gICAgfQotCi0gICAgbUhlYWRlciA9IChjb25zdCBSZXNTdHJpbmdQb29sX2hlYWRlciopZGF0YTsKLQotICAgIGlmIChub3REZXZpY2VFbmRpYW4pIHsKLSAgICAgICAgUmVzU3RyaW5nUG9vbF9oZWFkZXIqIGggPSBjb25zdF9jYXN0PFJlc1N0cmluZ1Bvb2xfaGVhZGVyKj4obUhlYWRlcik7Ci0gICAgICAgIGgtPmhlYWRlci5oZWFkZXJTaXplID0gZHRvaHMobUhlYWRlci0+aGVhZGVyLmhlYWRlclNpemUpOwotICAgICAgICBoLT5oZWFkZXIudHlwZSA9IGR0b2hzKG1IZWFkZXItPmhlYWRlci50eXBlKTsKLSAgICAgICAgaC0+aGVhZGVyLnNpemUgPSBkdG9obChtSGVhZGVyLT5oZWFkZXIuc2l6ZSk7Ci0gICAgICAgIGgtPnN0cmluZ0NvdW50ID0gZHRvaGwobUhlYWRlci0+c3RyaW5nQ291bnQpOwotICAgICAgICBoLT5zdHlsZUNvdW50ID0gZHRvaGwobUhlYWRlci0+c3R5bGVDb3VudCk7Ci0gICAgICAgIGgtPmZsYWdzID0gZHRvaGwobUhlYWRlci0+ZmxhZ3MpOwotICAgICAgICBoLT5zdHJpbmdzU3RhcnQgPSBkdG9obChtSGVhZGVyLT5zdHJpbmdzU3RhcnQpOwotICAgICAgICBoLT5zdHlsZXNTdGFydCA9IGR0b2hsKG1IZWFkZXItPnN0eWxlc1N0YXJ0KTsKLSAgICB9Ci0KLSAgICBpZiAobUhlYWRlci0+aGVhZGVyLmhlYWRlclNpemUgPiBtSGVhZGVyLT5oZWFkZXIuc2l6ZQotICAgICAgICAgICAgfHwgbUhlYWRlci0+aGVhZGVyLnNpemUgPiBzaXplKSB7Ci0gICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBoZWFkZXIgc2l6ZSAlZCBvciB0b3RhbCBzaXplICVkIGlzIGxhcmdlciB0aGFuIGRhdGEgc2l6ZSAlZFxuIiwKLSAgICAgICAgICAgICAgICAoaW50KW1IZWFkZXItPmhlYWRlci5oZWFkZXJTaXplLCAoaW50KW1IZWFkZXItPmhlYWRlci5zaXplLCAoaW50KXNpemUpOwotICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgfQotICAgIG1TaXplID0gbUhlYWRlci0+aGVhZGVyLnNpemU7Ci0gICAgbUVudHJpZXMgPSAoY29uc3QgdWludDMyX3QqKQotICAgICAgICAoKChjb25zdCB1aW50OF90KilkYXRhKSttSGVhZGVyLT5oZWFkZXIuaGVhZGVyU2l6ZSk7Ci0KLSAgICBpZiAobUhlYWRlci0+c3RyaW5nQ291bnQgPiAwKSB7Ci0gICAgICAgIGlmICgobUhlYWRlci0+c3RyaW5nQ291bnQqc2l6ZW9mKHVpbnQzMl90KSA8IG1IZWFkZXItPnN0cmluZ0NvdW50KSAgLy8gdWludDMyIG92ZXJmbG93PwotICAgICAgICAgICAgfHwgKG1IZWFkZXItPmhlYWRlci5oZWFkZXJTaXplKyhtSGVhZGVyLT5zdHJpbmdDb3VudCpzaXplb2YodWludDMyX3QpKSkKLSAgICAgICAgICAgICAgICA+IHNpemUpIHsKLSAgICAgICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBlbnRyeSBvZiAlZCBpdGVtcyBleHRlbmRzIHBhc3QgZGF0YSBzaXplICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAoaW50KShtSGVhZGVyLT5oZWFkZXIuaGVhZGVyU2l6ZSsobUhlYWRlci0+c3RyaW5nQ291bnQqc2l6ZW9mKHVpbnQzMl90KSkpLAotICAgICAgICAgICAgICAgICAgICAoaW50KXNpemUpOwotICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZV90IGNoYXJTaXplOwotICAgICAgICBpZiAobUhlYWRlci0+ZmxhZ3MmUmVzU3RyaW5nUG9vbF9oZWFkZXI6OlVURjhfRkxBRykgewotICAgICAgICAgICAgY2hhclNpemUgPSBzaXplb2YodWludDhfdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjaGFyU2l6ZSA9IHNpemVvZihjaGFyMTZfdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtU3RyaW5ncyA9IChjb25zdCB2b2lkKikKLSAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKWRhdGEpK21IZWFkZXItPnN0cmluZ3NTdGFydCk7Ci0gICAgICAgIGlmIChtSGVhZGVyLT5zdHJpbmdzU3RhcnQgPj0gKG1IZWFkZXItPmhlYWRlci5zaXplLXNpemVvZih1aW50MTZfdCkpKSB7Ci0gICAgICAgICAgICBBTE9HVygiQmFkIHN0cmluZyBibG9jazogc3RyaW5nIHBvb2wgc3RhcnRzIGF0ICVkLCBhZnRlciB0b3RhbCBzaXplICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAoaW50KW1IZWFkZXItPnN0cmluZ3NTdGFydCwgKGludCltSGVhZGVyLT5oZWFkZXIuc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1IZWFkZXItPnN0eWxlQ291bnQgPT0gMCkgewotICAgICAgICAgICAgbVN0cmluZ1Bvb2xTaXplID0KLSAgICAgICAgICAgICAgICAobUhlYWRlci0+aGVhZGVyLnNpemUtbUhlYWRlci0+c3RyaW5nc1N0YXJ0KS9jaGFyU2l6ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGNoZWNrIGludmFyaWFudDogc3R5bGVzIHN0YXJ0cyBiZWZvcmUgZW5kIG9mIGRhdGEKLSAgICAgICAgICAgIGlmIChtSGVhZGVyLT5zdHlsZXNTdGFydCA+PSAobUhlYWRlci0+aGVhZGVyLnNpemUtc2l6ZW9mKHVpbnQxNl90KSkpIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiQmFkIHN0eWxlIGJsb2NrOiBzdHlsZSBibG9jayBzdGFydHMgYXQgJWQgcGFzdCBkYXRhIHNpemUgb2YgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIChpbnQpbUhlYWRlci0+c3R5bGVzU3RhcnQsIChpbnQpbUhlYWRlci0+aGVhZGVyLnNpemUpOwotICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGNoZWNrIGludmFyaWFudDogc3R5bGVzIGZvbGxvdyB0aGUgc3RyaW5ncwotICAgICAgICAgICAgaWYgKG1IZWFkZXItPnN0eWxlc1N0YXJ0IDw9IG1IZWFkZXItPnN0cmluZ3NTdGFydCkgewotICAgICAgICAgICAgICAgIEFMT0dXKCJCYWQgc3R5bGUgYmxvY2s6IHN0eWxlIGJsb2NrIHN0YXJ0cyBhdCAlZCwgYmVmb3JlIHN0cmluZ3MgYXQgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIChpbnQpbUhlYWRlci0+c3R5bGVzU3RhcnQsIChpbnQpbUhlYWRlci0+c3RyaW5nc1N0YXJ0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtU3RyaW5nUG9vbFNpemUgPQotICAgICAgICAgICAgICAgIChtSGVhZGVyLT5zdHlsZXNTdGFydC1tSGVhZGVyLT5zdHJpbmdzU3RhcnQpL2NoYXJTaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2hlY2sgaW52YXJpYW50OiBzdHJpbmdDb3VudCA+IDAgcmVxdWlyZXMgYSBzdHJpbmcgcG9vbCB0byBleGlzdAotICAgICAgICBpZiAobVN0cmluZ1Bvb2xTaXplID09IDApIHsKLSAgICAgICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBzdHJpbmdDb3VudCBpcyAlZCBidXQgcG9vbCBzaXplIGlzIDBcbiIsIChpbnQpbUhlYWRlci0+c3RyaW5nQ291bnQpOwotICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5vdERldmljZUVuZGlhbikgewotICAgICAgICAgICAgc2l6ZV90IGk7Ci0gICAgICAgICAgICB1aW50MzJfdCogZSA9IGNvbnN0X2Nhc3Q8dWludDMyX3QqPihtRW50cmllcyk7Ci0gICAgICAgICAgICBmb3IgKGk9MDsgaTxtSGVhZGVyLT5zdHJpbmdDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZVtpXSA9IGR0b2hsKG1FbnRyaWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghKG1IZWFkZXItPmZsYWdzJlJlc1N0cmluZ1Bvb2xfaGVhZGVyOjpVVEY4X0ZMQUcpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHN0cmluZ3MgPSAoY29uc3QgY2hhcjE2X3QqKW1TdHJpbmdzOwotICAgICAgICAgICAgICAgIGNoYXIxNl90KiBzID0gY29uc3RfY2FzdDxjaGFyMTZfdCo+KHN0cmluZ3MpOwotICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPG1TdHJpbmdQb29sU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNbaV0gPSBkdG9ocyhzdHJpbmdzW2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKG1IZWFkZXItPmZsYWdzJlJlc1N0cmluZ1Bvb2xfaGVhZGVyOjpVVEY4X0ZMQUcgJiYKLSAgICAgICAgICAgICAgICAoKHVpbnQ4X3QqKW1TdHJpbmdzKVttU3RyaW5nUG9vbFNpemUtMV0gIT0gMCkgfHwKLSAgICAgICAgICAgICAgICAoIW1IZWFkZXItPmZsYWdzJlJlc1N0cmluZ1Bvb2xfaGVhZGVyOjpVVEY4X0ZMQUcgJiYKLSAgICAgICAgICAgICAgICAoKGNoYXIxNl90KiltU3RyaW5ncylbbVN0cmluZ1Bvb2xTaXplLTFdICE9IDApKSB7Ci0gICAgICAgICAgICBBTE9HVygiQmFkIHN0cmluZyBibG9jazogbGFzdCBzdHJpbmcgaXMgbm90IDAtdGVybWluYXRlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBtU3RyaW5ncyA9IE5VTEw7Ci0gICAgICAgIG1TdHJpbmdQb29sU2l6ZSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1IZWFkZXItPnN0eWxlQ291bnQgPiAwKSB7Ci0gICAgICAgIG1FbnRyeVN0eWxlcyA9IG1FbnRyaWVzICsgbUhlYWRlci0+c3RyaW5nQ291bnQ7Ci0gICAgICAgIC8vIGludmFyaWFudDogaW50ZWdlciBvdmVyZmxvdyBpbiBjYWxjdWxhdGluZyBtRW50cnlTdHlsZXMKLSAgICAgICAgaWYgKG1FbnRyeVN0eWxlcyA8IG1FbnRyaWVzKSB7Ci0gICAgICAgICAgICBBTE9HVygiQmFkIHN0cmluZyBibG9jazogaW50ZWdlciBvdmVyZmxvdyBmaW5kaW5nIHN0eWxlc1xuIik7Ci0gICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKChjb25zdCB1aW50OF90KiltRW50cnlTdHlsZXMtKGNvbnN0IHVpbnQ4X3QqKW1IZWFkZXIpID4gKGludClzaXplKSB7Ci0gICAgICAgICAgICBBTE9HVygiQmFkIHN0cmluZyBibG9jazogZW50cnkgb2YgJWQgc3R5bGVzIGV4dGVuZHMgcGFzdCBkYXRhIHNpemUgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIChpbnQpKChjb25zdCB1aW50OF90KiltRW50cnlTdHlsZXMtKGNvbnN0IHVpbnQ4X3QqKW1IZWFkZXIpLAotICAgICAgICAgICAgICAgICAgICAoaW50KXNpemUpOwotICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgICAgICB9Ci0gICAgICAgIG1TdHlsZXMgPSAoY29uc3QgdWludDMyX3QqKQotICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopZGF0YSkrbUhlYWRlci0+c3R5bGVzU3RhcnQpOwotICAgICAgICBpZiAobUhlYWRlci0+c3R5bGVzU3RhcnQgPj0gbUhlYWRlci0+aGVhZGVyLnNpemUpIHsKLSAgICAgICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBzdHlsZSBwb29sIHN0YXJ0cyAlZCwgYWZ0ZXIgdG90YWwgc2l6ZSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKGludCltSGVhZGVyLT5zdHlsZXNTdGFydCwgKGludCltSGVhZGVyLT5oZWFkZXIuc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgICAgIH0KLSAgICAgICAgbVN0eWxlUG9vbFNpemUgPQotICAgICAgICAgICAgKG1IZWFkZXItPmhlYWRlci5zaXplLW1IZWFkZXItPnN0eWxlc1N0YXJ0KS9zaXplb2YodWludDMyX3QpOwotCi0gICAgICAgIGlmIChub3REZXZpY2VFbmRpYW4pIHsKLSAgICAgICAgICAgIHNpemVfdCBpOwotICAgICAgICAgICAgdWludDMyX3QqIGUgPSBjb25zdF9jYXN0PHVpbnQzMl90Kj4obUVudHJ5U3R5bGVzKTsKLSAgICAgICAgICAgIGZvciAoaT0wOyBpPG1IZWFkZXItPnN0eWxlQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGVbaV0gPSBkdG9obChtRW50cnlTdHlsZXNbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdWludDMyX3QqIHMgPSBjb25zdF9jYXN0PHVpbnQzMl90Kj4obVN0eWxlcyk7Ci0gICAgICAgICAgICBmb3IgKGk9MDsgaTxtU3R5bGVQb29sU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgc1tpXSA9IGR0b2hsKG1TdHlsZXNbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgUmVzU3RyaW5nUG9vbF9zcGFuIGVuZFNwYW4gPSB7Ci0gICAgICAgICAgICB7IGh0b2RsKFJlc1N0cmluZ1Bvb2xfc3Bhbjo6RU5EKSB9LAotICAgICAgICAgICAgaHRvZGwoUmVzU3RyaW5nUG9vbF9zcGFuOjpFTkQpLCBodG9kbChSZXNTdHJpbmdQb29sX3NwYW46OkVORCkKLSAgICAgICAgfTsKLSAgICAgICAgaWYgKG1lbWNtcCgmbVN0eWxlc1ttU3R5bGVQb29sU2l6ZS0oc2l6ZW9mKGVuZFNwYW4pL3NpemVvZih1aW50MzJfdCkpXSwKLSAgICAgICAgICAgICAgICAgICAmZW5kU3Bhbiwgc2l6ZW9mKGVuZFNwYW4pKSAhPSAwKSB7Ci0gICAgICAgICAgICBBTE9HVygiQmFkIHN0cmluZyBibG9jazogbGFzdCBzdHlsZSBpcyBub3QgMHhGRkZGRkZGRi10ZXJtaW5hdGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1FbnRyeVN0eWxlcyA9IE5VTEw7Ci0gICAgICAgIG1TdHlsZXMgPSBOVUxMOwotICAgICAgICBtU3R5bGVQb29sU2l6ZSA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIChtRXJyb3I9Tk9fRVJST1IpOwotfQotCi1zdGF0dXNfdCBSZXNTdHJpbmdQb29sOjpnZXRFcnJvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1FcnJvcjsKLX0KLQotdm9pZCBSZXNTdHJpbmdQb29sOjp1bmluaXQoKQotewotICAgIG1FcnJvciA9IE5PX0lOSVQ7Ci0gICAgaWYgKG1IZWFkZXIgIT0gTlVMTCAmJiBtQ2FjaGUgIT0gTlVMTCkgewotICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IG1IZWFkZXItPnN0cmluZ0NvdW50OyB4KyspIHsKLSAgICAgICAgICAgIGlmIChtQ2FjaGVbeF0gIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZyZWUobUNhY2hlW3hdKTsKLSAgICAgICAgICAgICAgICBtQ2FjaGVbeF0gPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZyZWUobUNhY2hlKTsKLSAgICAgICAgbUNhY2hlID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKG1Pd25lZERhdGEpIHsKLSAgICAgICAgZnJlZShtT3duZWREYXRhKTsKLSAgICAgICAgbU93bmVkRGF0YSA9IE5VTEw7Ci0gICAgfQotfQotCi0vKioKLSAqIFN0cmluZ3MgaW4gVVRGLTE2IGZvcm1hdCBoYXZlIGxlbmd0aCBpbmRpY2F0ZWQgYnkgYSBsZW5ndGggZW5jb2RlZCBpbiB0aGUKLSAqIHN0b3JlZCBkYXRhLiBJdCBpcyBlaXRoZXIgMSBvciAyIGNoYXJhY3RlcnMgb2YgbGVuZ3RoIGRhdGEuIFRoaXMgYWxsb3dzIGEKLSAqIG1heGltdW0gbGVuZ3RoIG9mIDB4N0ZGRkZGRiAoMjE0NzQ4MzY0NyBieXRlcyksIGJ1dCBpZiB5b3UncmUgc3RvcmluZyB0aGF0Ci0gKiBtdWNoIGRhdGEgaW4gYSBzdHJpbmcsIHlvdSdyZSBhYnVzaW5nIHRoZW0uCi0gKgotICogSWYgdGhlIGhpZ2ggYml0IGlzIHNldCwgdGhlbiB0aGVyZSBhcmUgdHdvIGNoYXJhY3RlcnMgb3IgNCBieXRlcyBvZiBsZW5ndGgKLSAqIGRhdGEgZW5jb2RlZC4gSW4gdGhhdCBjYXNlLCBkcm9wIHRoZSBoaWdoIGJpdCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZAotICogYWRkIGl0IHRvZ2V0aGVyIHdpdGggdGhlIG5leHQgY2hhcmFjdGVyLgotICovCi1zdGF0aWMgaW5saW5lIHNpemVfdAotZGVjb2RlTGVuZ3RoKGNvbnN0IGNoYXIxNl90Kiogc3RyKQotewotICAgIHNpemVfdCBsZW4gPSAqKnN0cjsKLSAgICBpZiAoKGxlbiAmIDB4ODAwMCkgIT0gMCkgewotICAgICAgICAoKnN0cikrKzsKLSAgICAgICAgbGVuID0gKChsZW4gJiAweDdGRkYpIDw8IDE2KSB8ICoqc3RyOwotICAgIH0KLSAgICAoKnN0cikrKzsKLSAgICByZXR1cm4gbGVuOwotfQotCi0vKioKLSAqIFN0cmluZ3MgaW4gVVRGLTggZm9ybWF0IGhhdmUgbGVuZ3RoIGluZGljYXRlZCBieSBhIGxlbmd0aCBlbmNvZGVkIGluIHRoZQotICogc3RvcmVkIGRhdGEuIEl0IGlzIGVpdGhlciAxIG9yIDIgY2hhcmFjdGVycyBvZiBsZW5ndGggZGF0YS4gVGhpcyBhbGxvd3MgYQotICogbWF4aW11bSBsZW5ndGggb2YgMHg3RkZGICgzMjc2NyBieXRlcyksIGJ1dCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHN0b3JpbmcKLSAqIHRleHQgaW4gYW5vdGhlciB3YXkgaWYgeW91J3JlIHVzaW5nIHRoYXQgbXVjaCBkYXRhIGluIGEgc2luZ2xlIHN0cmluZy4KLSAqCi0gKiBJZiB0aGUgaGlnaCBiaXQgaXMgc2V0LCB0aGVuIHRoZXJlIGFyZSB0d28gY2hhcmFjdGVycyBvciAyIGJ5dGVzIG9mIGxlbmd0aAotICogZGF0YSBlbmNvZGVkLiBJbiB0aGF0IGNhc2UsIGRyb3AgdGhlIGhpZ2ggYml0IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kCi0gKiBhZGQgaXQgdG9nZXRoZXIgd2l0aCB0aGUgbmV4dCBjaGFyYWN0ZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci1kZWNvZGVMZW5ndGgoY29uc3QgdWludDhfdCoqIHN0cikKLXsKLSAgICBzaXplX3QgbGVuID0gKipzdHI7Ci0gICAgaWYgKChsZW4gJiAweDgwKSAhPSAwKSB7Ci0gICAgICAgICgqc3RyKSsrOwotICAgICAgICBsZW4gPSAoKGxlbiAmIDB4N0YpIDw8IDgpIHwgKipzdHI7Ci0gICAgfQotICAgICgqc3RyKSsrOwotICAgIHJldHVybiBsZW47Ci19Ci0KLWNvbnN0IHVpbnQxNl90KiBSZXNTdHJpbmdQb29sOjpzdHJpbmdBdChzaXplX3QgaWR4LCBzaXplX3QqIHUxNmxlbikgY29uc3QKLXsKLSAgICBpZiAobUVycm9yID09IE5PX0VSUk9SICYmIGlkeCA8IG1IZWFkZXItPnN0cmluZ0NvdW50KSB7Ci0gICAgICAgIGNvbnN0IGJvb2wgaXNVVEY4ID0gKG1IZWFkZXItPmZsYWdzJlJlc1N0cmluZ1Bvb2xfaGVhZGVyOjpVVEY4X0ZMQUcpICE9IDA7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IG9mZiA9IG1FbnRyaWVzW2lkeF0vKGlzVVRGOD9zaXplb2YoY2hhcik6c2l6ZW9mKGNoYXIxNl90KSk7Ci0gICAgICAgIGlmIChvZmYgPCAobVN0cmluZ1Bvb2xTaXplLTEpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzVVRGOCkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBzdHJpbmdzID0gKGNoYXIxNl90KiltU3RyaW5nczsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogc3RyID0gc3RyaW5ncytvZmY7Ci0KLSAgICAgICAgICAgICAgICAqdTE2bGVuID0gZGVjb2RlTGVuZ3RoKCZzdHIpOwotICAgICAgICAgICAgICAgIGlmICgodWludDMyX3QpKHN0cisqdTE2bGVuLXN0cmluZ3MpIDwgbVN0cmluZ1Bvb2xTaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR1coIkJhZCBzdHJpbmcgYmxvY2s6IHN0cmluZyAjJWQgZXh0ZW5kcyB0byAlZCwgcGFzdCBlbmQgYXQgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClpZHgsIChpbnQpKHN0cisqdTE2bGVuLXN0cmluZ3MpLCAoaW50KW1TdHJpbmdQb29sU2l6ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzdHJpbmdzID0gKHVpbnQ4X3QqKW1TdHJpbmdzOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHU4c3RyID0gc3RyaW5ncytvZmY7Ci0KLSAgICAgICAgICAgICAgICAqdTE2bGVuID0gZGVjb2RlTGVuZ3RoKCZ1OHN0cik7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHU4bGVuID0gZGVjb2RlTGVuZ3RoKCZ1OHN0cik7Ci0KLSAgICAgICAgICAgICAgICAvLyBlbmNMZW4gbXVzdCBiZSBsZXNzIHRoYW4gMHg3RkZGIGR1ZSB0byBlbmNvZGluZy4KLSAgICAgICAgICAgICAgICBpZiAoKHVpbnQzMl90KSh1OHN0cit1OGxlbi1zdHJpbmdzKSA8IG1TdHJpbmdQb29sU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBBdXRvTXV0ZXggbG9jayhtRGVjb2RlTG9jayk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1DYWNoZSA9PSBOVUxMKSB7Ci0jaWZuZGVmIEhBVkVfQU5EUk9JRF9PUwotICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1BPT0xfTk9JU1koQUxPR0koIkNSRUFUSU5HIFNUUklORyBDQUNIRSBPRiAlZCBieXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1IZWFkZXItPnN0cmluZ0NvdW50KnNpemVvZihjaGFyMTZfdCoqKSkpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIGJlIGluIHRoaXMgY2FzZSB3aGVuIGFjdHVhbGx5IHJ1bm5pbmcgQW5kcm9pZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJDUkVBVElORyBTVFJJTkcgQ0FDSEUgT0YgJWQgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSGVhZGVyLT5zdHJpbmdDb3VudCpzaXplb2YoY2hhcjE2X3QqKikpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBtQ2FjaGUgPSAoY2hhcjE2X3QqKiljYWxsb2MobUhlYWRlci0+c3RyaW5nQ291bnQsIHNpemVvZihjaGFyMTZfdCoqKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUNhY2hlID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HVygiTm8gbWVtb3J5IHRyeWluZyB0byBhbGxvY2F0ZSBkZWNvZGUgY2FjaGUgdGFibGUgb2YgJWQgYnl0ZXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShtSGVhZGVyLT5zdHJpbmdDb3VudCpzaXplb2YoY2hhcjE2X3QqKikpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtQ2FjaGVbaWR4XSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbUNhY2hlW2lkeF07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IGFjdHVhbExlbiA9IHV0ZjhfdG9fdXRmMTZfbGVuZ3RoKHU4c3RyLCB1OGxlbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhY3R1YWxMZW4gPCAwIHx8IChzaXplX3QpYWN0dWFsTGVuICE9ICp1MTZsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBzdHJpbmcgIyVsbGQgZGVjb2RlZCBsZW5ndGggaXMgbm90IGNvcnJlY3QgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJWxsZCB2cyAlbGx1XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKWlkeCwgKGxvbmcgbG9uZylhY3R1YWxMZW4sIChsb25nIGxvbmcpKnUxNmxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNoYXIxNl90ICp1MTZzdHIgPSAoY2hhcjE2X3QgKiljYWxsb2MoKnUxNmxlbisxLCBzaXplb2YoY2hhcjE2X3QpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF1MTZzdHIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJObyBtZW1vcnkgd2hlbiB0cnlpbmcgdG8gYWxsb2NhdGUgZGVjb2RlIGNhY2hlIGZvciBzdHJpbmcgIyVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWlkeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIFNUUklOR19QT09MX05PSVNZKEFMT0dJKCJDYWNoaW5nIFVURjggc3RyaW5nOiAlcyIsIHU4c3RyKSk7Ci0gICAgICAgICAgICAgICAgICAgIHV0ZjhfdG9fdXRmMTYodThzdHIsIHU4bGVuLCB1MTZzdHIpOwotICAgICAgICAgICAgICAgICAgICBtQ2FjaGVbaWR4XSA9IHUxNnN0cjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHUxNnN0cjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBTE9HVygiQmFkIHN0cmluZyBibG9jazogc3RyaW5nICMlbGxkIGV4dGVuZHMgdG8gJWxsZCwgcGFzdCBlbmQgYXQgJWxsZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKWlkeCwgKGxvbmcgbG9uZykodThzdHIrdThsZW4tc3RyaW5ncyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyltU3RyaW5nUG9vbFNpemUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFMT0dXKCJCYWQgc3RyaW5nIGJsb2NrOiBzdHJpbmcgIyVkIGVudHJ5IGlzIGF0ICVkLCBwYXN0IGVuZCBhdCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKGludClpZHgsIChpbnQpKG9mZipzaXplb2YodWludDE2X3QpKSwKLSAgICAgICAgICAgICAgICAgICAgKGludCkobVN0cmluZ1Bvb2xTaXplKnNpemVvZih1aW50MTZfdCkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotY29uc3QgY2hhciogUmVzU3RyaW5nUG9vbDo6c3RyaW5nOEF0KHNpemVfdCBpZHgsIHNpemVfdCogb3V0TGVuKSBjb25zdAotewotICAgIGlmIChtRXJyb3IgPT0gTk9fRVJST1IgJiYgaWR4IDwgbUhlYWRlci0+c3RyaW5nQ291bnQpIHsKLSAgICAgICAgaWYgKChtSGVhZGVyLT5mbGFncyZSZXNTdHJpbmdQb29sX2hlYWRlcjo6VVRGOF9GTEFHKSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBjb25zdCB1aW50MzJfdCBvZmYgPSBtRW50cmllc1tpZHhdL3NpemVvZihjaGFyKTsKLSAgICAgICAgaWYgKG9mZiA8IChtU3RyaW5nUG9vbFNpemUtMSkpIHsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHN0cmluZ3MgPSAodWludDhfdCopbVN0cmluZ3M7Ci0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBzdHIgPSBzdHJpbmdzK29mZjsKLSAgICAgICAgICAgICpvdXRMZW4gPSBkZWNvZGVMZW5ndGgoJnN0cik7Ci0gICAgICAgICAgICBzaXplX3QgZW5jTGVuID0gZGVjb2RlTGVuZ3RoKCZzdHIpOwotICAgICAgICAgICAgaWYgKCh1aW50MzJfdCkoc3RyK2VuY0xlbi1zdHJpbmdzKSA8IG1TdHJpbmdQb29sU2l6ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiAoY29uc3QgY2hhciopc3RyOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiQmFkIHN0cmluZyBibG9jazogc3RyaW5nICMlZCBleHRlbmRzIHRvICVkLCBwYXN0IGVuZCBhdCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpaWR4LCAoaW50KShzdHIrZW5jTGVuLXN0cmluZ3MpLCAoaW50KW1TdHJpbmdQb29sU2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HVygiQmFkIHN0cmluZyBibG9jazogc3RyaW5nICMlZCBlbnRyeSBpcyBhdCAlZCwgcGFzdCBlbmQgYXQgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIChpbnQpaWR4LCAoaW50KShvZmYqc2l6ZW9mKHVpbnQxNl90KSksCi0gICAgICAgICAgICAgICAgICAgIChpbnQpKG1TdHJpbmdQb29sU2l6ZSpzaXplb2YodWludDE2X3QpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLWNvbnN0IFN0cmluZzggUmVzU3RyaW5nUG9vbDo6c3RyaW5nOE9iamVjdEF0KHNpemVfdCBpZHgpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IGxlbjsKLSAgICBjb25zdCBjaGFyICpzdHIgPSAoY29uc3QgY2hhciopc3RyaW5nOEF0KGlkeCwgJmxlbik7Ci0gICAgaWYgKHN0ciAhPSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmc4KHN0cik7Ci0gICAgfQotICAgIHJldHVybiBTdHJpbmc4KHN0cmluZ0F0KGlkeCwgJmxlbikpOwotfQotCi1jb25zdCBSZXNTdHJpbmdQb29sX3NwYW4qIFJlc1N0cmluZ1Bvb2w6OnN0eWxlQXQoY29uc3QgUmVzU3RyaW5nUG9vbF9yZWYmIHJlZikgY29uc3QKLXsKLSAgICByZXR1cm4gc3R5bGVBdChyZWYuaW5kZXgpOwotfQotCi1jb25zdCBSZXNTdHJpbmdQb29sX3NwYW4qIFJlc1N0cmluZ1Bvb2w6OnN0eWxlQXQoc2l6ZV90IGlkeCkgY29uc3QKLXsKLSAgICBpZiAobUVycm9yID09IE5PX0VSUk9SICYmIGlkeCA8IG1IZWFkZXItPnN0eWxlQ291bnQpIHsKLSAgICAgICAgY29uc3QgdWludDMyX3Qgb2ZmID0gKG1FbnRyeVN0eWxlc1tpZHhdL3NpemVvZih1aW50MzJfdCkpOwotICAgICAgICBpZiAob2ZmIDwgbVN0eWxlUG9vbFNpemUpIHsKLSAgICAgICAgICAgIHJldHVybiAoY29uc3QgUmVzU3RyaW5nUG9vbF9zcGFuKikobVN0eWxlcytvZmYpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQUxPR1coIkJhZCBzdHJpbmcgYmxvY2s6IHN0eWxlICMlZCBlbnRyeSBpcyBhdCAlZCwgcGFzdCBlbmQgYXQgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIChpbnQpaWR4LCAoaW50KShvZmYqc2l6ZW9mKHVpbnQzMl90KSksCi0gICAgICAgICAgICAgICAgICAgIChpbnQpKG1TdHlsZVBvb2xTaXplKnNpemVvZih1aW50MzJfdCkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3NpemVfdCBSZXNTdHJpbmdQb29sOjppbmRleE9mU3RyaW5nKGNvbnN0IGNoYXIxNl90KiBzdHIsIHNpemVfdCBzdHJMZW4pIGNvbnN0Ci17Ci0gICAgaWYgKG1FcnJvciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gbUVycm9yOwotICAgIH0KLQotICAgIHNpemVfdCBsZW47Ci0KLSAgICBpZiAoKG1IZWFkZXItPmZsYWdzJlJlc1N0cmluZ1Bvb2xfaGVhZGVyOjpVVEY4X0ZMQUcpICE9IDApIHsKLSAgICAgICAgU1RSSU5HX1BPT0xfTk9JU1koQUxPR0koImluZGV4T2ZTdHJpbmcgVVRGLTg6ICVzIiwgU3RyaW5nOChzdHIsIHN0ckxlbikuc3RyaW5nKCkpKTsKLQotICAgICAgICAvLyBUaGUgc3RyaW5nIHBvb2wgY29udGFpbnMgVVRGIDggc3RyaW5nczsgd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQotICAgICAgICAvLyB0ZW1wb3JhcnkgVVRGLTE2IHN0cmluZ3MgdG8gYmUgY3JlYXRlZCBhcyB3ZSBzZWFyY2guCi0gICAgICAgIGlmIChtSGVhZGVyLT5mbGFncyZSZXNTdHJpbmdQb29sX2hlYWRlcjo6U09SVEVEX0ZMQUcpIHsKLSAgICAgICAgICAgIC8vIERvIGEgYmluYXJ5IHNlYXJjaCBmb3IgdGhlIHN0cmluZy4uLiAgdGhpcyBpcyBhIGxpdHRsZSB0cmlja3ksCi0gICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBzdHJpbmdzIGFyZSBzb3J0ZWQgd2l0aCBzdHJ6Y21wMTYoKS4gIFNvIHRvIG1hdGNoCi0gICAgICAgICAgICAvLyB0aGUgb3JkZXJpbmcsIHdlIG5lZWQgdG8gY29udmVydCBzdHJpbmdzIGluIHRoZSBwb29sIHRvIFVURi0xNi4KLSAgICAgICAgICAgIC8vIEJ1dCB3ZSBkb24ndCB3YW50IHRvIGhpdCB0aGUgY2FjaGUsIHNvIGluc3RlYWQgd2Ugd2lsbCBoYXZlIGEKLSAgICAgICAgICAgIC8vIGxvY2FsIHRlbXBvcmFyeSBhbGxvY2F0aW9uIGZvciB0aGUgY29udmVyc2lvbnMuCi0gICAgICAgICAgICBjaGFyMTZfdCogY29udkJ1ZmZlciA9IChjaGFyMTZfdCopbWFsbG9jKHN0ckxlbis0KTsKLSAgICAgICAgICAgIHNzaXplX3QgbCA9IDA7Ci0gICAgICAgICAgICBzc2l6ZV90IGggPSBtSGVhZGVyLT5zdHJpbmdDb3VudC0xOwotCi0gICAgICAgICAgICBzc2l6ZV90IG1pZDsKLSAgICAgICAgICAgIHdoaWxlIChsIDw9IGgpIHsKLSAgICAgICAgICAgICAgICBtaWQgPSBsICsgKGggLSBsKS8yOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHMgPSAoY29uc3QgdWludDhfdCopc3RyaW5nOEF0KG1pZCwgJmxlbik7Ci0gICAgICAgICAgICAgICAgaW50IGM7Ci0gICAgICAgICAgICAgICAgaWYgKHMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBjaGFyMTZfdCogZW5kID0gdXRmOF90b191dGYxNl9uKHMsIGxlbiwgY29udkJ1ZmZlciwgc3RyTGVuKzMpOwotICAgICAgICAgICAgICAgICAgICAqZW5kID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYyA9IHN0cnpjbXAxNihjb252QnVmZmVyLCBlbmQtY29udkJ1ZmZlciwgc3RyLCBzdHJMZW4pOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGMgPSAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU1RSSU5HX1BPT0xfTk9JU1koQUxPR0koIkxvb2tpbmcgYXQgJXMsIGNtcD0lZCwgbC9taWQvaD0lZC8lZC8lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIqKXMsIGMsIChpbnQpbCwgKGludCltaWQsIChpbnQpaCkpOwotICAgICAgICAgICAgICAgIGlmIChjID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1BPT0xfTk9JU1koQUxPR0koIk1BVENIISIpKTsKLSAgICAgICAgICAgICAgICAgICAgZnJlZShjb252QnVmZmVyKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGwgPSBtaWQgKyAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGggPSBtaWQgLSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZyZWUoY29udkJ1ZmZlcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJdCBpcyB1bnVzdWFsIHRvIGdldCB0aGUgSUQgZnJvbSBhbiB1bnNvcnRlZCBzdHJpbmcgYmxvY2suLi4KLSAgICAgICAgICAgIC8vIG1vc3Qgb2Z0ZW4gdGhpcyBoYXBwZW5zIGJlY2F1c2Ugd2Ugd2FudCB0byBnZXQgSURzIGZvciBzdHlsZQotICAgICAgICAgICAgLy8gc3BhbiB0YWdzOyBzaW5jZSB0aG9zZSBhbHdheXMgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZwotICAgICAgICAgICAgLy8gYmxvY2ssIHN0YXJ0IHNlYXJjaGluZyBhdCB0aGUgYmFjay4KLSAgICAgICAgICAgIFN0cmluZzggc3RyOChzdHIsIHN0ckxlbik7Ci0gICAgICAgICAgICBjb25zdCBzaXplX3Qgc3RyOExlbiA9IHN0cjguc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaT1tSGVhZGVyLT5zdHJpbmdDb3VudC0xOyBpPj0wOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzID0gc3RyaW5nOEF0KGksICZsZW4pOwotICAgICAgICAgICAgICAgIFNUUklOR19QT09MX05PSVNZKEFMT0dJKCJMb29raW5nIGF0ICVzLCBpPSVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHMpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHMgJiYgc3RyOExlbiA9PSBsZW4gJiYgbWVtY21wKHMsIHN0cjguc3RyaW5nKCksIHN0cjhMZW4pID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1BPT0xfTk9JU1koQUxPR0koIk1BVENIISIpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiaW5kZXhPZlN0cmluZyBVVEYtMTY6ICVzIiwgU3RyaW5nOChzdHIsIHN0ckxlbikuc3RyaW5nKCkpKTsKLQotICAgICAgICBpZiAobUhlYWRlci0+ZmxhZ3MmUmVzU3RyaW5nUG9vbF9oZWFkZXI6OlNPUlRFRF9GTEFHKSB7Ci0gICAgICAgICAgICAvLyBEbyBhIGJpbmFyeSBzZWFyY2ggZm9yIHRoZSBzdHJpbmcuLi4KLSAgICAgICAgICAgIHNzaXplX3QgbCA9IDA7Ci0gICAgICAgICAgICBzc2l6ZV90IGggPSBtSGVhZGVyLT5zdHJpbmdDb3VudC0xOwotCi0gICAgICAgICAgICBzc2l6ZV90IG1pZDsKLSAgICAgICAgICAgIHdoaWxlIChsIDw9IGgpIHsKLSAgICAgICAgICAgICAgICBtaWQgPSBsICsgKGggLSBsKS8yOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBzID0gc3RyaW5nQXQobWlkLCAmbGVuKTsKLSAgICAgICAgICAgICAgICBpbnQgYyA9IHMgPyBzdHJ6Y21wMTYocywgbGVuLCBzdHIsIHN0ckxlbikgOiAtMTsKLSAgICAgICAgICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiTG9va2luZyBhdCAlcywgY21wPSVkLCBsL21pZC9oPSVkLyVkLyVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHMpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLCAoaW50KWwsIChpbnQpbWlkLCAoaW50KWgpKTsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNUUklOR19QT09MX05PSVNZKEFMT0dJKCJNQVRDSCEiKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtaWQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBsID0gbWlkICsgMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBoID0gbWlkIC0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJdCBpcyB1bnVzdWFsIHRvIGdldCB0aGUgSUQgZnJvbSBhbiB1bnNvcnRlZCBzdHJpbmcgYmxvY2suLi4KLSAgICAgICAgICAgIC8vIG1vc3Qgb2Z0ZW4gdGhpcyBoYXBwZW5zIGJlY2F1c2Ugd2Ugd2FudCB0byBnZXQgSURzIGZvciBzdHlsZQotICAgICAgICAgICAgLy8gc3BhbiB0YWdzOyBzaW5jZSB0aG9zZSBhbHdheXMgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZwotICAgICAgICAgICAgLy8gYmxvY2ssIHN0YXJ0IHNlYXJjaGluZyBhdCB0aGUgYmFjay4KLSAgICAgICAgICAgIGZvciAoaW50IGk9bUhlYWRlci0+c3RyaW5nQ291bnQtMTsgaT49MDsgaS0tKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHMgPSBzdHJpbmdBdChpLCAmbGVuKTsKLSAgICAgICAgICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiTG9va2luZyBhdCAlcywgaT0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChzKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSkpOwotICAgICAgICAgICAgICAgIGlmIChzICYmIHN0ckxlbiA9PSBsZW4gJiYgc3RyemNtcDE2KHMsIGxlbiwgc3RyLCBzdHJMZW4pID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1BPT0xfTk9JU1koQUxPR0koIk1BVENIISIpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5BTUVfTk9UX0ZPVU5EOwotfQotCi1zaXplX3QgUmVzU3RyaW5nUG9vbDo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtRXJyb3IgPT0gTk9fRVJST1IpID8gbUhlYWRlci0+c3RyaW5nQ291bnQgOiAwOwotfQotCi1zaXplX3QgUmVzU3RyaW5nUG9vbDo6c3R5bGVDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtRXJyb3IgPT0gTk9fRVJST1IpID8gbUhlYWRlci0+c3R5bGVDb3VudCA6IDA7Ci19Ci0KLXNpemVfdCBSZXNTdHJpbmdQb29sOjpieXRlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtRXJyb3IgPT0gTk9fRVJST1IpID8gbUhlYWRlci0+aGVhZGVyLnNpemUgOiAwOwotfQotCi1ib29sIFJlc1N0cmluZ1Bvb2w6OmlzU29ydGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1IZWFkZXItPmZsYWdzJlJlc1N0cmluZ1Bvb2xfaGVhZGVyOjpTT1JURURfRkxBRykhPTA7Ci19Ci0KLWJvb2wgUmVzU3RyaW5nUG9vbDo6aXNVVEY4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1IZWFkZXItPmZsYWdzJlJlc1N0cmluZ1Bvb2xfaGVhZGVyOjpVVEY4X0ZMQUcpIT0wOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlc1hNTFBhcnNlcjo6UmVzWE1MUGFyc2VyKGNvbnN0IFJlc1hNTFRyZWUmIHRyZWUpCi0gICAgOiBtVHJlZSh0cmVlKSwgbUV2ZW50Q29kZShCQURfRE9DVU1FTlQpCi17Ci19Ci0KLXZvaWQgUmVzWE1MUGFyc2VyOjpyZXN0YXJ0KCkKLXsKLSAgICBtQ3VyTm9kZSA9IE5VTEw7Ci0gICAgbUV2ZW50Q29kZSA9IG1UcmVlLm1FcnJvciA9PSBOT19FUlJPUiA/IFNUQVJUX0RPQ1VNRU5UIDogQkFEX0RPQ1VNRU5UOwotfQotY29uc3QgUmVzU3RyaW5nUG9vbCYgUmVzWE1MUGFyc2VyOjpnZXRTdHJpbmdzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRyZWUubVN0cmluZ3M7Ci19Ci0KLVJlc1hNTFBhcnNlcjo6ZXZlbnRfY29kZV90IFJlc1hNTFBhcnNlcjo6Z2V0RXZlbnRUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUV2ZW50Q29kZTsKLX0KLQotUmVzWE1MUGFyc2VyOjpldmVudF9jb2RlX3QgUmVzWE1MUGFyc2VyOjpuZXh0KCkKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA9PSBTVEFSVF9ET0NVTUVOVCkgewotICAgICAgICBtQ3VyTm9kZSA9IG1UcmVlLm1Sb290Tm9kZTsKLSAgICAgICAgbUN1ckV4dCA9IG1UcmVlLm1Sb290RXh0OwotICAgICAgICByZXR1cm4gKG1FdmVudENvZGU9bVRyZWUubVJvb3RDb2RlKTsKLSAgICB9IGVsc2UgaWYgKG1FdmVudENvZGUgPj0gRklSU1RfQ0hVTktfQ09ERSkgewotICAgICAgICByZXR1cm4gbmV4dE5vZGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1FdmVudENvZGU7Ci19Ci0KLWludDMyX3QgUmVzWE1MUGFyc2VyOjpnZXRDb21tZW50SUQoKSBjb25zdAotewotICAgIHJldHVybiBtQ3VyTm9kZSAhPSBOVUxMID8gZHRvaGwobUN1ck5vZGUtPmNvbW1lbnQuaW5kZXgpIDogLTE7Ci19Ci0KLWNvbnN0IHVpbnQxNl90KiBSZXNYTUxQYXJzZXI6OmdldENvbW1lbnQoc2l6ZV90KiBvdXRMZW4pIGNvbnN0Ci17Ci0gICAgaW50MzJfdCBpZCA9IGdldENvbW1lbnRJRCgpOwotICAgIHJldHVybiBpZCA+PSAwID8gbVRyZWUubVN0cmluZ3Muc3RyaW5nQXQoaWQsIG91dExlbikgOiBOVUxMOwotfQotCi11aW50MzJfdCBSZXNYTUxQYXJzZXI6OmdldExpbmVOdW1iZXIoKSBjb25zdAotewotICAgIHJldHVybiBtQ3VyTm9kZSAhPSBOVUxMID8gZHRvaGwobUN1ck5vZGUtPmxpbmVOdW1iZXIpIDogLTE7Ci19Ci0KLWludDMyX3QgUmVzWE1MUGFyc2VyOjpnZXRUZXh0SUQoKSBjb25zdAotewotICAgIGlmIChtRXZlbnRDb2RlID09IFRFWFQpIHsKLSAgICAgICAgcmV0dXJuIGR0b2hsKCgoY29uc3QgUmVzWE1MVHJlZV9jZGF0YUV4dCopbUN1ckV4dCktPmRhdGEuaW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWNvbnN0IHVpbnQxNl90KiBSZXNYTUxQYXJzZXI6OmdldFRleHQoc2l6ZV90KiBvdXRMZW4pIGNvbnN0Ci17Ci0gICAgaW50MzJfdCBpZCA9IGdldFRleHRJRCgpOwotICAgIHJldHVybiBpZCA+PSAwID8gbVRyZWUubVN0cmluZ3Muc3RyaW5nQXQoaWQsIG91dExlbikgOiBOVUxMOwotfQotCi1zc2l6ZV90IFJlc1hNTFBhcnNlcjo6Z2V0VGV4dFZhbHVlKFJlc192YWx1ZSogb3V0VmFsdWUpIGNvbnN0Ci17Ci0gICAgaWYgKG1FdmVudENvZGUgPT0gVEVYVCkgewotICAgICAgICBvdXRWYWx1ZS0+Y29weUZyb21fZHRvaCgoKGNvbnN0IFJlc1hNTFRyZWVfY2RhdGFFeHQqKW1DdXJFeHQpLT50eXBlZERhdGEpOwotICAgICAgICByZXR1cm4gc2l6ZW9mKFJlc192YWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiBCQURfVFlQRTsKLX0KLQotaW50MzJfdCBSZXNYTUxQYXJzZXI6OmdldE5hbWVzcGFjZVByZWZpeElEKCkgY29uc3QKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA9PSBTVEFSVF9OQU1FU1BBQ0UgfHwgbUV2ZW50Q29kZSA9PSBFTkRfTkFNRVNQQUNFKSB7Ci0gICAgICAgIHJldHVybiBkdG9obCgoKGNvbnN0IFJlc1hNTFRyZWVfbmFtZXNwYWNlRXh0KiltQ3VyRXh0KS0+cHJlZml4LmluZGV4KTsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1jb25zdCB1aW50MTZfdCogUmVzWE1MUGFyc2VyOjpnZXROYW1lc3BhY2VQcmVmaXgoc2l6ZV90KiBvdXRMZW4pIGNvbnN0Ci17Ci0gICAgaW50MzJfdCBpZCA9IGdldE5hbWVzcGFjZVByZWZpeElEKCk7Ci0gICAgLy9wcmludGYoInByZWZpeD0lZCAgZXZlbnQ9JXBcbiIsIGlkLCBtRXZlbnRDb2RlKTsKLSAgICByZXR1cm4gaWQgPj0gMCA/IG1UcmVlLm1TdHJpbmdzLnN0cmluZ0F0KGlkLCBvdXRMZW4pIDogTlVMTDsKLX0KLQotaW50MzJfdCBSZXNYTUxQYXJzZXI6OmdldE5hbWVzcGFjZVVyaUlEKCkgY29uc3QKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA9PSBTVEFSVF9OQU1FU1BBQ0UgfHwgbUV2ZW50Q29kZSA9PSBFTkRfTkFNRVNQQUNFKSB7Ci0gICAgICAgIHJldHVybiBkdG9obCgoKGNvbnN0IFJlc1hNTFRyZWVfbmFtZXNwYWNlRXh0KiltQ3VyRXh0KS0+dXJpLmluZGV4KTsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1jb25zdCB1aW50MTZfdCogUmVzWE1MUGFyc2VyOjpnZXROYW1lc3BhY2VVcmkoc2l6ZV90KiBvdXRMZW4pIGNvbnN0Ci17Ci0gICAgaW50MzJfdCBpZCA9IGdldE5hbWVzcGFjZVVyaUlEKCk7Ci0gICAgLy9wcmludGYoInVyaT0lZCAgZXZlbnQ9JXBcbiIsIGlkLCBtRXZlbnRDb2RlKTsKLSAgICByZXR1cm4gaWQgPj0gMCA/IG1UcmVlLm1TdHJpbmdzLnN0cmluZ0F0KGlkLCBvdXRMZW4pIDogTlVMTDsKLX0KLQotaW50MzJfdCBSZXNYTUxQYXJzZXI6OmdldEVsZW1lbnROYW1lc3BhY2VJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1FdmVudENvZGUgPT0gU1RBUlRfVEFHKSB7Ci0gICAgICAgIHJldHVybiBkdG9obCgoKGNvbnN0IFJlc1hNTFRyZWVfYXR0ckV4dCopbUN1ckV4dCktPm5zLmluZGV4KTsKLSAgICB9Ci0gICAgaWYgKG1FdmVudENvZGUgPT0gRU5EX1RBRykgewotICAgICAgICByZXR1cm4gZHRvaGwoKChjb25zdCBSZXNYTUxUcmVlX2VuZEVsZW1lbnRFeHQqKW1DdXJFeHQpLT5ucy5pbmRleCk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotY29uc3QgdWludDE2X3QqIFJlc1hNTFBhcnNlcjo6Z2V0RWxlbWVudE5hbWVzcGFjZShzaXplX3QqIG91dExlbikgY29uc3QKLXsKLSAgICBpbnQzMl90IGlkID0gZ2V0RWxlbWVudE5hbWVzcGFjZUlEKCk7Ci0gICAgcmV0dXJuIGlkID49IDAgPyBtVHJlZS5tU3RyaW5ncy5zdHJpbmdBdChpZCwgb3V0TGVuKSA6IE5VTEw7Ci19Ci0KLWludDMyX3QgUmVzWE1MUGFyc2VyOjpnZXRFbGVtZW50TmFtZUlEKCkgY29uc3QKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA9PSBTVEFSVF9UQUcpIHsKLSAgICAgICAgcmV0dXJuIGR0b2hsKCgoY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiltQ3VyRXh0KS0+bmFtZS5pbmRleCk7Ci0gICAgfQotICAgIGlmIChtRXZlbnRDb2RlID09IEVORF9UQUcpIHsKLSAgICAgICAgcmV0dXJuIGR0b2hsKCgoY29uc3QgUmVzWE1MVHJlZV9lbmRFbGVtZW50RXh0KiltQ3VyRXh0KS0+bmFtZS5pbmRleCk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotY29uc3QgdWludDE2X3QqIFJlc1hNTFBhcnNlcjo6Z2V0RWxlbWVudE5hbWUoc2l6ZV90KiBvdXRMZW4pIGNvbnN0Ci17Ci0gICAgaW50MzJfdCBpZCA9IGdldEVsZW1lbnROYW1lSUQoKTsKLSAgICByZXR1cm4gaWQgPj0gMCA/IG1UcmVlLm1TdHJpbmdzLnN0cmluZ0F0KGlkLCBvdXRMZW4pIDogTlVMTDsKLX0KLQotc2l6ZV90IFJlc1hNTFBhcnNlcjo6Z2V0QXR0cmlidXRlQ291bnQoKSBjb25zdAotewotICAgIGlmIChtRXZlbnRDb2RlID09IFNUQVJUX1RBRykgewotICAgICAgICByZXR1cm4gZHRvaHMoKChjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqKW1DdXJFeHQpLT5hdHRyaWJ1dGVDb3VudCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1pbnQzMl90IFJlc1hNTFBhcnNlcjo6Z2V0QXR0cmlidXRlTmFtZXNwYWNlSUQoc2l6ZV90IGlkeCkgY29uc3QKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA9PSBTVEFSVF9UQUcpIHsKLSAgICAgICAgY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiB0YWcgPSAoY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiltQ3VyRXh0OwotICAgICAgICBpZiAoaWR4IDwgZHRvaHModGFnLT5hdHRyaWJ1dGVDb3VudCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlc1hNTFRyZWVfYXR0cmlidXRlKiBhdHRyID0gKGNvbnN0IFJlc1hNTFRyZWVfYXR0cmlidXRlKikKLSAgICAgICAgICAgICAgICAoKChjb25zdCB1aW50OF90Kil0YWcpCi0gICAgICAgICAgICAgICAgICsgZHRvaHModGFnLT5hdHRyaWJ1dGVTdGFydCkKLSAgICAgICAgICAgICAgICAgKyAoZHRvaHModGFnLT5hdHRyaWJ1dGVTaXplKSppZHgpKTsKLSAgICAgICAgICAgIHJldHVybiBkdG9obChhdHRyLT5ucy5pbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIC0yOwotfQotCi1jb25zdCB1aW50MTZfdCogUmVzWE1MUGFyc2VyOjpnZXRBdHRyaWJ1dGVOYW1lc3BhY2Uoc2l6ZV90IGlkeCwgc2l6ZV90KiBvdXRMZW4pIGNvbnN0Ci17Ci0gICAgaW50MzJfdCBpZCA9IGdldEF0dHJpYnV0ZU5hbWVzcGFjZUlEKGlkeCk7Ci0gICAgLy9wcmludGYoImF0dHJpYnV0ZSBuYW1lc3BhY2U9JWQgIGlkeD0lZCAgZXZlbnQ9JXBcbiIsIGlkLCBpZHgsIG1FdmVudENvZGUpOwotICAgIC8vWE1MX05PSVNZKHByaW50ZigiZ2V0QXR0cmlidXRlTmFtZXNwYWNlIDB4JXg9MHgleFxuIiwgaWR4LCBpZCkpOwotICAgIHJldHVybiBpZCA+PSAwID8gbVRyZWUubVN0cmluZ3Muc3RyaW5nQXQoaWQsIG91dExlbikgOiBOVUxMOwotfQotCi1jb25zdCBjaGFyKiBSZXNYTUxQYXJzZXI6OmdldEF0dHJpYnV0ZU5hbWVzcGFjZTgoc2l6ZV90IGlkeCwgc2l6ZV90KiBvdXRMZW4pIGNvbnN0Ci17Ci0gICAgaW50MzJfdCBpZCA9IGdldEF0dHJpYnV0ZU5hbWVzcGFjZUlEKGlkeCk7Ci0gICAgLy9wcmludGYoImF0dHJpYnV0ZSBuYW1lc3BhY2U9JWQgIGlkeD0lZCAgZXZlbnQ9JXBcbiIsIGlkLCBpZHgsIG1FdmVudENvZGUpOwotICAgIC8vWE1MX05PSVNZKHByaW50ZigiZ2V0QXR0cmlidXRlTmFtZXNwYWNlIDB4JXg9MHgleFxuIiwgaWR4LCBpZCkpOwotICAgIHJldHVybiBpZCA+PSAwID8gbVRyZWUubVN0cmluZ3Muc3RyaW5nOEF0KGlkLCBvdXRMZW4pIDogTlVMTDsKLX0KLQotaW50MzJfdCBSZXNYTUxQYXJzZXI6OmdldEF0dHJpYnV0ZU5hbWVJRChzaXplX3QgaWR4KSBjb25zdAotewotICAgIGlmIChtRXZlbnRDb2RlID09IFNUQVJUX1RBRykgewotICAgICAgICBjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqIHRhZyA9IChjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqKW1DdXJFeHQ7Ci0gICAgICAgIGlmIChpZHggPCBkdG9ocyh0YWctPmF0dHJpYnV0ZUNvdW50KSkgewotICAgICAgICAgICAgY29uc3QgUmVzWE1MVHJlZV9hdHRyaWJ1dGUqIGF0dHIgPSAoY29uc3QgUmVzWE1MVHJlZV9hdHRyaWJ1dGUqKQotICAgICAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKXRhZykKLSAgICAgICAgICAgICAgICAgKyBkdG9ocyh0YWctPmF0dHJpYnV0ZVN0YXJ0KQotICAgICAgICAgICAgICAgICArIChkdG9ocyh0YWctPmF0dHJpYnV0ZVNpemUpKmlkeCkpOwotICAgICAgICAgICAgcmV0dXJuIGR0b2hsKGF0dHItPm5hbWUuaW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotY29uc3QgdWludDE2X3QqIFJlc1hNTFBhcnNlcjo6Z2V0QXR0cmlidXRlTmFtZShzaXplX3QgaWR4LCBzaXplX3QqIG91dExlbikgY29uc3QKLXsKLSAgICBpbnQzMl90IGlkID0gZ2V0QXR0cmlidXRlTmFtZUlEKGlkeCk7Ci0gICAgLy9wcmludGYoImF0dHJpYnV0ZSBuYW1lPSVkICBpZHg9JWQgIGV2ZW50PSVwXG4iLCBpZCwgaWR4LCBtRXZlbnRDb2RlKTsKLSAgICAvL1hNTF9OT0lTWShwcmludGYoImdldEF0dHJpYnV0ZU5hbWUgMHgleD0weCV4XG4iLCBpZHgsIGlkKSk7Ci0gICAgcmV0dXJuIGlkID49IDAgPyBtVHJlZS5tU3RyaW5ncy5zdHJpbmdBdChpZCwgb3V0TGVuKSA6IE5VTEw7Ci19Ci0KLWNvbnN0IGNoYXIqIFJlc1hNTFBhcnNlcjo6Z2V0QXR0cmlidXRlTmFtZTgoc2l6ZV90IGlkeCwgc2l6ZV90KiBvdXRMZW4pIGNvbnN0Ci17Ci0gICAgaW50MzJfdCBpZCA9IGdldEF0dHJpYnV0ZU5hbWVJRChpZHgpOwotICAgIC8vcHJpbnRmKCJhdHRyaWJ1dGUgbmFtZT0lZCAgaWR4PSVkICBldmVudD0lcFxuIiwgaWQsIGlkeCwgbUV2ZW50Q29kZSk7Ci0gICAgLy9YTUxfTk9JU1kocHJpbnRmKCJnZXRBdHRyaWJ1dGVOYW1lIDB4JXg9MHgleFxuIiwgaWR4LCBpZCkpOwotICAgIHJldHVybiBpZCA+PSAwID8gbVRyZWUubVN0cmluZ3Muc3RyaW5nOEF0KGlkLCBvdXRMZW4pIDogTlVMTDsKLX0KLQotdWludDMyX3QgUmVzWE1MUGFyc2VyOjpnZXRBdHRyaWJ1dGVOYW1lUmVzSUQoc2l6ZV90IGlkeCkgY29uc3QKLXsKLSAgICBpbnQzMl90IGlkID0gZ2V0QXR0cmlidXRlTmFtZUlEKGlkeCk7Ci0gICAgaWYgKGlkID49IDAgJiYgKHNpemVfdClpZCA8IG1UcmVlLm1OdW1SZXNJZHMpIHsKLSAgICAgICAgcmV0dXJuIGR0b2hsKG1UcmVlLm1SZXNJZHNbaWRdKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludDMyX3QgUmVzWE1MUGFyc2VyOjpnZXRBdHRyaWJ1dGVWYWx1ZVN0cmluZ0lEKHNpemVfdCBpZHgpIGNvbnN0Ci17Ci0gICAgaWYgKG1FdmVudENvZGUgPT0gU1RBUlRfVEFHKSB7Ci0gICAgICAgIGNvbnN0IFJlc1hNTFRyZWVfYXR0ckV4dCogdGFnID0gKGNvbnN0IFJlc1hNTFRyZWVfYXR0ckV4dCopbUN1ckV4dDsKLSAgICAgICAgaWYgKGlkeCA8IGR0b2hzKHRhZy0+YXR0cmlidXRlQ291bnQpKSB7Ci0gICAgICAgICAgICBjb25zdCBSZXNYTUxUcmVlX2F0dHJpYnV0ZSogYXR0ciA9IChjb25zdCBSZXNYTUxUcmVlX2F0dHJpYnV0ZSopCi0gICAgICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopdGFnKQotICAgICAgICAgICAgICAgICArIGR0b2hzKHRhZy0+YXR0cmlidXRlU3RhcnQpCi0gICAgICAgICAgICAgICAgICsgKGR0b2hzKHRhZy0+YXR0cmlidXRlU2l6ZSkqaWR4KSk7Ci0gICAgICAgICAgICByZXR1cm4gZHRvaGwoYXR0ci0+cmF3VmFsdWUuaW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotY29uc3QgdWludDE2X3QqIFJlc1hNTFBhcnNlcjo6Z2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoc2l6ZV90IGlkeCwgc2l6ZV90KiBvdXRMZW4pIGNvbnN0Ci17Ci0gICAgaW50MzJfdCBpZCA9IGdldEF0dHJpYnV0ZVZhbHVlU3RyaW5nSUQoaWR4KTsKLSAgICAvL1hNTF9OT0lTWShwcmludGYoImdldEF0dHJpYnV0ZVZhbHVlIDB4JXg9MHgleFxuIiwgaWR4LCBpZCkpOwotICAgIHJldHVybiBpZCA+PSAwID8gbVRyZWUubVN0cmluZ3Muc3RyaW5nQXQoaWQsIG91dExlbikgOiBOVUxMOwotfQotCi1pbnQzMl90IFJlc1hNTFBhcnNlcjo6Z2V0QXR0cmlidXRlRGF0YVR5cGUoc2l6ZV90IGlkeCkgY29uc3QKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA9PSBTVEFSVF9UQUcpIHsKLSAgICAgICAgY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiB0YWcgPSAoY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiltQ3VyRXh0OwotICAgICAgICBpZiAoaWR4IDwgZHRvaHModGFnLT5hdHRyaWJ1dGVDb3VudCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlc1hNTFRyZWVfYXR0cmlidXRlKiBhdHRyID0gKGNvbnN0IFJlc1hNTFRyZWVfYXR0cmlidXRlKikKLSAgICAgICAgICAgICAgICAoKChjb25zdCB1aW50OF90Kil0YWcpCi0gICAgICAgICAgICAgICAgICsgZHRvaHModGFnLT5hdHRyaWJ1dGVTdGFydCkKLSAgICAgICAgICAgICAgICAgKyAoZHRvaHModGFnLT5hdHRyaWJ1dGVTaXplKSppZHgpKTsKLSAgICAgICAgICAgIHJldHVybiBhdHRyLT50eXBlZFZhbHVlLmRhdGFUeXBlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBSZXNfdmFsdWU6OlRZUEVfTlVMTDsKLX0KLQotaW50MzJfdCBSZXNYTUxQYXJzZXI6OmdldEF0dHJpYnV0ZURhdGEoc2l6ZV90IGlkeCkgY29uc3QKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA9PSBTVEFSVF9UQUcpIHsKLSAgICAgICAgY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiB0YWcgPSAoY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiltQ3VyRXh0OwotICAgICAgICBpZiAoaWR4IDwgZHRvaHModGFnLT5hdHRyaWJ1dGVDb3VudCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlc1hNTFRyZWVfYXR0cmlidXRlKiBhdHRyID0gKGNvbnN0IFJlc1hNTFRyZWVfYXR0cmlidXRlKikKLSAgICAgICAgICAgICAgICAoKChjb25zdCB1aW50OF90Kil0YWcpCi0gICAgICAgICAgICAgICAgICsgZHRvaHModGFnLT5hdHRyaWJ1dGVTdGFydCkKLSAgICAgICAgICAgICAgICAgKyAoZHRvaHModGFnLT5hdHRyaWJ1dGVTaXplKSppZHgpKTsKLSAgICAgICAgICAgIHJldHVybiBkdG9obChhdHRyLT50eXBlZFZhbHVlLmRhdGEpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1zc2l6ZV90IFJlc1hNTFBhcnNlcjo6Z2V0QXR0cmlidXRlVmFsdWUoc2l6ZV90IGlkeCwgUmVzX3ZhbHVlKiBvdXRWYWx1ZSkgY29uc3QKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA9PSBTVEFSVF9UQUcpIHsKLSAgICAgICAgY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiB0YWcgPSAoY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiltQ3VyRXh0OwotICAgICAgICBpZiAoaWR4IDwgZHRvaHModGFnLT5hdHRyaWJ1dGVDb3VudCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlc1hNTFRyZWVfYXR0cmlidXRlKiBhdHRyID0gKGNvbnN0IFJlc1hNTFRyZWVfYXR0cmlidXRlKikKLSAgICAgICAgICAgICAgICAoKChjb25zdCB1aW50OF90Kil0YWcpCi0gICAgICAgICAgICAgICAgICsgZHRvaHModGFnLT5hdHRyaWJ1dGVTdGFydCkKLSAgICAgICAgICAgICAgICAgKyAoZHRvaHModGFnLT5hdHRyaWJ1dGVTaXplKSppZHgpKTsKLSAgICAgICAgICAgIG91dFZhbHVlLT5jb3B5RnJvbV9kdG9oKGF0dHItPnR5cGVkVmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIHNpemVvZihSZXNfdmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBCQURfVFlQRTsKLX0KLQotc3NpemVfdCBSZXNYTUxQYXJzZXI6OmluZGV4T2ZBdHRyaWJ1dGUoY29uc3QgY2hhciogbnMsIGNvbnN0IGNoYXIqIGF0dHIpIGNvbnN0Ci17Ci0gICAgU3RyaW5nMTYgbnNTdHIobnMgIT0gTlVMTCA/IG5zIDogIiIpOwotICAgIFN0cmluZzE2IGF0dHJTdHIoYXR0cik7Ci0gICAgcmV0dXJuIGluZGV4T2ZBdHRyaWJ1dGUobnMgPyBuc1N0ci5zdHJpbmcoKSA6IE5VTEwsIG5zID8gbnNTdHIuc2l6ZSgpIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyU3RyLnN0cmluZygpLCBhdHRyU3RyLnNpemUoKSk7Ci19Ci0KLXNzaXplX3QgUmVzWE1MUGFyc2VyOjppbmRleE9mQXR0cmlidXRlKGNvbnN0IGNoYXIxNl90KiBucywgc2l6ZV90IG5zTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIGF0dHIsIHNpemVfdCBhdHRyTGVuKSBjb25zdAotewotICAgIGlmIChtRXZlbnRDb2RlID09IFNUQVJUX1RBRykgewotICAgICAgICBpZiAoYXR0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBnZXRBdHRyaWJ1dGVDb3VudCgpOwotICAgICAgICBpZiAobVRyZWUubVN0cmluZ3MuaXNVVEY4KCkpIHsKLSAgICAgICAgICAgIFN0cmluZzggbnM4LCBhdHRyODsKLSAgICAgICAgICAgIGlmIChucyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbnM4ID0gU3RyaW5nOChucywgbnNMZW4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXR0cjggPSBTdHJpbmc4KGF0dHIsIGF0dHJMZW4pOwotICAgICAgICAgICAgU1RSSU5HX1BPT0xfTk9JU1koQUxPR0koImluZGV4T2ZBdHRyaWJ1dGUgVVRGOCAlcyAoJWQpIC8gJXMgKCVkKSIsIG5zOC5zdHJpbmcoKSwgbnNMZW4sCi0gICAgICAgICAgICAgICAgICAgIGF0dHI4LnN0cmluZygpLCBhdHRyTGVuKSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGN1ck5zTGVuID0gMCwgY3VyQXR0ckxlbiA9IDA7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogY3VyTnMgPSBnZXRBdHRyaWJ1dGVOYW1lc3BhY2U4KGksICZjdXJOc0xlbik7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogY3VyQXR0ciA9IGdldEF0dHJpYnV0ZU5hbWU4KGksICZjdXJBdHRyTGVuKTsKLSAgICAgICAgICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiICBjdXJOcz0lcyAoJWQpLCBjdXJBdHRyPSVzICglZCkiLCBjdXJOcywgY3VyTnNMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJBdHRyLCBjdXJBdHRyTGVuKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1ckF0dHIgIT0gTlVMTCAmJiBjdXJOc0xlbiA9PSBuc0xlbiAmJiBjdXJBdHRyTGVuID09IGF0dHJMZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1lbWNtcChhdHRyOC5zdHJpbmcoKSwgY3VyQXR0ciwgYXR0ckxlbikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobnMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ck5zID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiICBGT1VORCEiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyTnMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIiAtLT4gbnM9JXMsIGN1ck5zPSVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgU3RyaW5nOChucykuc3RyaW5nKCksIFN0cmluZzgoY3VyTnMpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZW1jbXAobnM4LnN0cmluZygpLCBjdXJOcywgbnNMZW4pID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiICBGT1VORCEiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTVFJJTkdfUE9PTF9OT0lTWShBTE9HSSgiaW5kZXhPZkF0dHJpYnV0ZSBVVEYxNiAlcyAoJWQpIC8gJXMgKCVkKSIsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgobnMsIG5zTGVuKS5zdHJpbmcoKSwgbnNMZW4sCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYXR0ciwgYXR0ckxlbikuc3RyaW5nKCksIGF0dHJMZW4pKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgY3VyTnNMZW4gPSAwLCBjdXJBdHRyTGVuID0gMDsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogY3VyTnMgPSBnZXRBdHRyaWJ1dGVOYW1lc3BhY2UoaSwgJmN1ck5zTGVuKTsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogY3VyQXR0ciA9IGdldEF0dHJpYnV0ZU5hbWUoaSwgJmN1ckF0dHJMZW4pOwotICAgICAgICAgICAgICAgIFNUUklOR19QT09MX05PSVNZKEFMT0dJKCIgIGN1ck5zPSVzICglZCksIGN1ckF0dHI9JXMgKCVkKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGN1ck5zLCBjdXJOc0xlbikuc3RyaW5nKCksIGN1ck5zTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChjdXJBdHRyLCBjdXJBdHRyTGVuKS5zdHJpbmcoKSwgY3VyQXR0ckxlbikpOwotICAgICAgICAgICAgICAgIGlmIChjdXJBdHRyICE9IE5VTEwgJiYgY3VyTnNMZW4gPT0gbnNMZW4gJiYgY3VyQXR0ckxlbiA9PSBhdHRyTGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAobWVtY21wKGF0dHIsIGN1ckF0dHIsIGF0dHJMZW4qc2l6ZW9mKGNoYXIxNl90KSkgPT0gMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5zID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJOcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1BPT0xfTk9JU1koQUxPR0koIiAgRk9VTkQhIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1ck5zICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnRmKCIgLS0+IG5zPSVzLCBjdXJOcz0lc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIFN0cmluZzgobnMpLnN0cmluZygpLCBTdHJpbmc4KGN1ck5zKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVtY21wKG5zLCBjdXJOcywgbnNMZW4qc2l6ZW9mKGNoYXIxNl90KSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklOR19QT09MX05PSVNZKEFMT0dJKCIgIEZPVU5EISIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOQU1FX05PVF9GT1VORDsKLX0KLQotc3NpemVfdCBSZXNYTUxQYXJzZXI6OmluZGV4T2ZJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1FdmVudENvZGUgPT0gU1RBUlRfVEFHKSB7Ci0gICAgICAgIGNvbnN0IHNzaXplX3QgaWR4ID0gZHRvaHMoKChjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqKW1DdXJFeHQpLT5pZEluZGV4KTsKLSAgICAgICAgaWYgKGlkeCA+IDApIHJldHVybiAoaWR4LTEpOwotICAgIH0KLSAgICByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7Ci19Ci0KLXNzaXplX3QgUmVzWE1MUGFyc2VyOjppbmRleE9mQ2xhc3MoKSBjb25zdAotewotICAgIGlmIChtRXZlbnRDb2RlID09IFNUQVJUX1RBRykgewotICAgICAgICBjb25zdCBzc2l6ZV90IGlkeCA9IGR0b2hzKCgoY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KiltQ3VyRXh0KS0+Y2xhc3NJbmRleCk7Ci0gICAgICAgIGlmIChpZHggPiAwKSByZXR1cm4gKGlkeC0xKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5BTUVfTk9UX0ZPVU5EOwotfQotCi1zc2l6ZV90IFJlc1hNTFBhcnNlcjo6aW5kZXhPZlN0eWxlKCkgY29uc3QKLXsKLSAgICBpZiAobUV2ZW50Q29kZSA9PSBTVEFSVF9UQUcpIHsKLSAgICAgICAgY29uc3Qgc3NpemVfdCBpZHggPSBkdG9ocygoKGNvbnN0IFJlc1hNTFRyZWVfYXR0ckV4dCopbUN1ckV4dCktPnN0eWxlSW5kZXgpOwotICAgICAgICBpZiAoaWR4ID4gMCkgcmV0dXJuIChpZHgtMSk7Ci0gICAgfQotICAgIHJldHVybiBOQU1FX05PVF9GT1VORDsKLX0KLQotUmVzWE1MUGFyc2VyOjpldmVudF9jb2RlX3QgUmVzWE1MUGFyc2VyOjpuZXh0Tm9kZSgpCi17Ci0gICAgaWYgKG1FdmVudENvZGUgPCAwKSB7Ci0gICAgICAgIHJldHVybiBtRXZlbnRDb2RlOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgY29uc3QgUmVzWE1MVHJlZV9ub2RlKiBuZXh0ID0gKGNvbnN0IFJlc1hNTFRyZWVfbm9kZSopCi0gICAgICAgICAgICAoKChjb25zdCB1aW50OF90KiltQ3VyTm9kZSkgKyBkdG9obChtQ3VyTm9kZS0+aGVhZGVyLnNpemUpKTsKLSAgICAgICAgLy9BTE9HVygiTmV4dCBub2RlOiBwcmV2PSVwLCBuZXh0PSVwXG4iLCBtQ3VyTm9kZSwgbmV4dCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoKChjb25zdCB1aW50OF90KiluZXh0KSA+PSBtVHJlZS5tRGF0YUVuZCkgewotICAgICAgICAgICAgbUN1ck5vZGUgPSBOVUxMOwotICAgICAgICAgICAgcmV0dXJuIChtRXZlbnRDb2RlPUVORF9ET0NVTUVOVCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVRyZWUudmFsaWRhdGVOb2RlKG5leHQpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBtQ3VyTm9kZSA9IE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gKG1FdmVudENvZGU9QkFEX0RPQ1VNRU5UKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1DdXJOb2RlID0gbmV4dDsKLSAgICAgICAgY29uc3QgdWludDE2X3QgaGVhZGVyU2l6ZSA9IGR0b2hzKG5leHQtPmhlYWRlci5oZWFkZXJTaXplKTsKLSAgICAgICAgY29uc3QgdWludDMyX3QgdG90YWxTaXplID0gZHRvaGwobmV4dC0+aGVhZGVyLnNpemUpOwotICAgICAgICBtQ3VyRXh0ID0gKChjb25zdCB1aW50OF90KiluZXh0KSArIGhlYWRlclNpemU7Ci0gICAgICAgIHNpemVfdCBtaW5FeHRTaXplID0gMDsKLSAgICAgICAgZXZlbnRfY29kZV90IGV2ZW50Q29kZSA9IChldmVudF9jb2RlX3QpZHRvaHMobmV4dC0+aGVhZGVyLnR5cGUpOwotICAgICAgICBzd2l0Y2ggKChtRXZlbnRDb2RlPWV2ZW50Q29kZSkpIHsKLSAgICAgICAgICAgIGNhc2UgUkVTX1hNTF9TVEFSVF9OQU1FU1BBQ0VfVFlQRToKLSAgICAgICAgICAgIGNhc2UgUkVTX1hNTF9FTkRfTkFNRVNQQUNFX1RZUEU6Ci0gICAgICAgICAgICAgICAgbWluRXh0U2l6ZSA9IHNpemVvZihSZXNYTUxUcmVlX25hbWVzcGFjZUV4dCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJFU19YTUxfU1RBUlRfRUxFTUVOVF9UWVBFOgotICAgICAgICAgICAgICAgIG1pbkV4dFNpemUgPSBzaXplb2YoUmVzWE1MVHJlZV9hdHRyRXh0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUkVTX1hNTF9FTkRfRUxFTUVOVF9UWVBFOgotICAgICAgICAgICAgICAgIG1pbkV4dFNpemUgPSBzaXplb2YoUmVzWE1MVHJlZV9lbmRFbGVtZW50RXh0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUkVTX1hNTF9DREFUQV9UWVBFOgotICAgICAgICAgICAgICAgIG1pbkV4dFNpemUgPSBzaXplb2YoUmVzWE1MVHJlZV9jZGF0YUV4dCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFMT0dXKCJVbmtub3duIFhNTCBibG9jazogaGVhZGVyIHR5cGUgJWQgaW4gbm9kZSBhdCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgIChpbnQpZHRvaHMobmV4dC0+aGVhZGVyLnR5cGUpLAotICAgICAgICAgICAgICAgICAgICAgKGludCkoKChjb25zdCB1aW50OF90KiluZXh0KS0oKGNvbnN0IHVpbnQ4X3QqKW1UcmVlLm1IZWFkZXIpKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICgodG90YWxTaXplLWhlYWRlclNpemUpIDwgbWluRXh0U2l6ZSkgewotICAgICAgICAgICAgQUxPR1coIkJhZCBYTUwgYmxvY2s6IGhlYWRlciB0eXBlIDB4JXggaW4gbm9kZSBhdCAweCV4IGhhcyBzaXplICVkLCBuZWVkICVkXG4iLAotICAgICAgICAgICAgICAgICAoaW50KWR0b2hzKG5leHQtPmhlYWRlci50eXBlKSwKLSAgICAgICAgICAgICAgICAgKGludCkoKChjb25zdCB1aW50OF90KiluZXh0KS0oKGNvbnN0IHVpbnQ4X3QqKW1UcmVlLm1IZWFkZXIpKSwKLSAgICAgICAgICAgICAgICAgKGludCkodG90YWxTaXplLWhlYWRlclNpemUpLCAoaW50KW1pbkV4dFNpemUpOwotICAgICAgICAgICAgcmV0dXJuIChtRXZlbnRDb2RlPUJBRF9ET0NVTUVOVCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vcHJpbnRmKCJDdXJOb2RlPSVwLCBDdXJFeHQ9JXAsIGhlYWRlclNpemU9JWQsIG1pbkV4dFNpemU9JWRcbiIsCi0gICAgICAgIC8vICAgICAgIG1DdXJOb2RlLCBtQ3VyRXh0LCBoZWFkZXJTaXplLCBtaW5FeHRTaXplKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBldmVudENvZGU7Ci0gICAgfSB3aGlsZSAodHJ1ZSk7Ci19Ci0KLXZvaWQgUmVzWE1MUGFyc2VyOjpnZXRQb3NpdGlvbihSZXNYTUxQYXJzZXI6OlJlc1hNTFBvc2l0aW9uKiBwb3MpIGNvbnN0Ci17Ci0gICAgcG9zLT5ldmVudENvZGUgPSBtRXZlbnRDb2RlOwotICAgIHBvcy0+Y3VyTm9kZSA9IG1DdXJOb2RlOwotICAgIHBvcy0+Y3VyRXh0ID0gbUN1ckV4dDsKLX0KLQotdm9pZCBSZXNYTUxQYXJzZXI6OnNldFBvc2l0aW9uKGNvbnN0IFJlc1hNTFBhcnNlcjo6UmVzWE1MUG9zaXRpb24mIHBvcykKLXsKLSAgICBtRXZlbnRDb2RlID0gcG9zLmV2ZW50Q29kZTsKLSAgICBtQ3VyTm9kZSA9IHBvcy5jdXJOb2RlOwotICAgIG1DdXJFeHQgPSBwb3MuY3VyRXh0OwotfQotCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyB2b2xhdGlsZSBpbnQzMl90IGdDb3VudCA9IDA7Ci0KLVJlc1hNTFRyZWU6OlJlc1hNTFRyZWUoKQotICAgIDogUmVzWE1MUGFyc2VyKCp0aGlzKQotICAgICwgbUVycm9yKE5PX0lOSVQpLCBtT3duZWREYXRhKE5VTEwpCi17Ci0gICAgLy9BTE9HSSgiQ3JlYXRpbmcgUmVzWE1MVHJlZSAlcCAjJWRcbiIsIHRoaXMsIGFuZHJvaWRfYXRvbWljX2luYygmZ0NvdW50KSsxKTsKLSAgICByZXN0YXJ0KCk7Ci19Ci0KLVJlc1hNTFRyZWU6OlJlc1hNTFRyZWUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIGJvb2wgY29weURhdGEpCi0gICAgOiBSZXNYTUxQYXJzZXIoKnRoaXMpCi0gICAgLCBtRXJyb3IoTk9fSU5JVCksIG1Pd25lZERhdGEoTlVMTCkKLXsKLSAgICAvL0FMT0dJKCJDcmVhdGluZyBSZXNYTUxUcmVlICVwICMlZFxuIiwgdGhpcywgYW5kcm9pZF9hdG9taWNfaW5jKCZnQ291bnQpKzEpOwotICAgIHNldFRvKGRhdGEsIHNpemUsIGNvcHlEYXRhKTsKLX0KLQotUmVzWE1MVHJlZTo6flJlc1hNTFRyZWUoKQotewotICAgIC8vQUxPR0koIkRlc3Ryb3lpbmcgUmVzWE1MVHJlZSBpbiAlcCAjJWRcbiIsIHRoaXMsIGFuZHJvaWRfYXRvbWljX2RlYygmZ0NvdW50KS0xKTsKLSAgICB1bmluaXQoKTsKLX0KLQotc3RhdHVzX3QgUmVzWE1MVHJlZTo6c2V0VG8oY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIGJvb2wgY29weURhdGEpCi17Ci0gICAgdW5pbml0KCk7Ci0gICAgbUV2ZW50Q29kZSA9IFNUQVJUX0RPQ1VNRU5UOwotCi0gICAgaWYgKCFkYXRhIHx8ICFzaXplKSB7Ci0gICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICB9Ci0KLSAgICBpZiAoY29weURhdGEpIHsKLSAgICAgICAgbU93bmVkRGF0YSA9IG1hbGxvYyhzaXplKTsKLSAgICAgICAgaWYgKG1Pd25lZERhdGEgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9Tk9fTUVNT1JZKTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkobU93bmVkRGF0YSwgZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGRhdGEgPSBtT3duZWREYXRhOwotICAgIH0KLQotICAgIG1IZWFkZXIgPSAoY29uc3QgUmVzWE1MVHJlZV9oZWFkZXIqKWRhdGE7Ci0gICAgbVNpemUgPSBkdG9obChtSGVhZGVyLT5oZWFkZXIuc2l6ZSk7Ci0gICAgaWYgKGR0b2hzKG1IZWFkZXItPmhlYWRlci5oZWFkZXJTaXplKSA+IG1TaXplIHx8IG1TaXplID4gc2l6ZSkgewotICAgICAgICBBTE9HVygiQmFkIFhNTCBibG9jazogaGVhZGVyIHNpemUgJWQgb3IgdG90YWwgc2l6ZSAlZCBpcyBsYXJnZXIgdGhhbiBkYXRhIHNpemUgJWRcbiIsCi0gICAgICAgICAgICAgKGludClkdG9ocyhtSGVhZGVyLT5oZWFkZXIuaGVhZGVyU2l6ZSksCi0gICAgICAgICAgICAgKGludClkdG9obChtSGVhZGVyLT5oZWFkZXIuc2l6ZSksIChpbnQpc2l6ZSk7Ci0gICAgICAgIG1FcnJvciA9IEJBRF9UWVBFOwotICAgICAgICByZXN0YXJ0KCk7Ci0gICAgICAgIHJldHVybiBtRXJyb3I7Ci0gICAgfQotICAgIG1EYXRhRW5kID0gKChjb25zdCB1aW50OF90KiltSGVhZGVyKSArIG1TaXplOwotCi0gICAgbVN0cmluZ3MudW5pbml0KCk7Ci0gICAgbVJvb3ROb2RlID0gTlVMTDsKLSAgICBtUmVzSWRzID0gTlVMTDsKLSAgICBtTnVtUmVzSWRzID0gMDsKLQotICAgIC8vIEZpcnN0IGxvb2sgZm9yIGEgY291cGxlIGludGVyZXN0aW5nIGNodW5rczogdGhlIHN0cmluZyBibG9jawotICAgIC8vIGFuZCBmaXJzdCBYTUwgbm9kZS4KLSAgICBjb25zdCBSZXNDaHVua19oZWFkZXIqIGNodW5rID0KLSAgICAgICAgKGNvbnN0IFJlc0NodW5rX2hlYWRlciopKCgoY29uc3QgdWludDhfdCopbUhlYWRlcikgKyBkdG9ocyhtSGVhZGVyLT5oZWFkZXIuaGVhZGVyU2l6ZSkpOwotICAgIGNvbnN0IFJlc0NodW5rX2hlYWRlciogbGFzdENodW5rID0gY2h1bms7Ci0gICAgd2hpbGUgKCgoY29uc3QgdWludDhfdCopY2h1bmspIDwgKG1EYXRhRW5kLXNpemVvZihSZXNDaHVua19oZWFkZXIpKSAmJgotICAgICAgICAgICAoKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSA8IChtRGF0YUVuZC1kdG9obChjaHVuay0+c2l6ZSkpKSB7Ci0gICAgICAgIHN0YXR1c190IGVyciA9IHZhbGlkYXRlX2NodW5rKGNodW5rLCBzaXplb2YoUmVzQ2h1bmtfaGVhZGVyKSwgbURhdGFFbmQsICJYTUwiKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgbUVycm9yID0gZXJyOwotICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IHVpbnQxNl90IHR5cGUgPSBkdG9ocyhjaHVuay0+dHlwZSk7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBzaXplID0gZHRvaGwoY2h1bmstPnNpemUpOwotICAgICAgICBYTUxfTk9JU1kocHJpbnRmKCJTY2FubmluZyBAICVwOiB0eXBlPTB4JXgsIHNpemU9MHgleFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICh2b2lkKikoKCh1aW50MzJfdCljaHVuayktKCh1aW50MzJfdCltSGVhZGVyKSksIHR5cGUsIHNpemUpKTsKLSAgICAgICAgaWYgKHR5cGUgPT0gUkVTX1NUUklOR19QT09MX1RZUEUpIHsKLSAgICAgICAgICAgIG1TdHJpbmdzLnNldFRvKGNodW5rLCBzaXplKTsKLSAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFJFU19YTUxfUkVTT1VSQ0VfTUFQX1RZUEUpIHsKLSAgICAgICAgICAgIG1SZXNJZHMgPSAoY29uc3QgdWludDMyX3QqKQotICAgICAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKWNodW5rKStkdG9ocyhjaHVuay0+aGVhZGVyU2l6ZSkpOwotICAgICAgICAgICAgbU51bVJlc0lkcyA9IChkdG9obChjaHVuay0+c2l6ZSktZHRvaHMoY2h1bmstPmhlYWRlclNpemUpKS9zaXplb2YodWludDMyX3QpOwotICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPj0gUkVTX1hNTF9GSVJTVF9DSFVOS19UWVBFCi0gICAgICAgICAgICAgICAgICAgJiYgdHlwZSA8PSBSRVNfWE1MX0xBU1RfQ0hVTktfVFlQRSkgewotICAgICAgICAgICAgaWYgKHZhbGlkYXRlTm9kZSgoY29uc3QgUmVzWE1MVHJlZV9ub2RlKiljaHVuaykgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBtRXJyb3IgPSBCQURfVFlQRTsKLSAgICAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtQ3VyTm9kZSA9IChjb25zdCBSZXNYTUxUcmVlX25vZGUqKWxhc3RDaHVuazsKLSAgICAgICAgICAgIGlmIChuZXh0Tm9kZSgpID09IEJBRF9ET0NVTUVOVCkgewotICAgICAgICAgICAgICAgIG1FcnJvciA9IEJBRF9UWVBFOwotICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1Sb290Tm9kZSA9IG1DdXJOb2RlOwotICAgICAgICAgICAgbVJvb3RFeHQgPSBtQ3VyRXh0OwotICAgICAgICAgICAgbVJvb3RDb2RlID0gbUV2ZW50Q29kZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgWE1MX05PSVNZKHByaW50ZigiU2tpcHBpbmcgdW5rbm93biBjaHVuayFcbiIpKTsKLSAgICAgICAgfQotICAgICAgICBsYXN0Q2h1bmsgPSBjaHVuazsKLSAgICAgICAgY2h1bmsgPSAoY29uc3QgUmVzQ2h1bmtfaGVhZGVyKikKLSAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSArIHNpemUpOwotICAgIH0KLQotICAgIGlmIChtUm9vdE5vZGUgPT0gTlVMTCkgewotICAgICAgICBBTE9HVygiQmFkIFhNTCBibG9jazogbm8gcm9vdCBlbGVtZW50IG5vZGUgZm91bmRcbiIpOwotICAgICAgICBtRXJyb3IgPSBCQURfVFlQRTsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KLQotICAgIG1FcnJvciA9IG1TdHJpbmdzLmdldEVycm9yKCk7Ci0KLWRvbmU6Ci0gICAgcmVzdGFydCgpOwotICAgIHJldHVybiBtRXJyb3I7Ci19Ci0KLXN0YXR1c190IFJlc1hNTFRyZWU6OmdldEVycm9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUVycm9yOwotfQotCi12b2lkIFJlc1hNTFRyZWU6OnVuaW5pdCgpCi17Ci0gICAgbUVycm9yID0gTk9fSU5JVDsKLSAgICBtU3RyaW5ncy51bmluaXQoKTsKLSAgICBpZiAobU93bmVkRGF0YSkgewotICAgICAgICBmcmVlKG1Pd25lZERhdGEpOwotICAgICAgICBtT3duZWREYXRhID0gTlVMTDsKLSAgICB9Ci0gICAgcmVzdGFydCgpOwotfQotCi1zdGF0dXNfdCBSZXNYTUxUcmVlOjp2YWxpZGF0ZU5vZGUoY29uc3QgUmVzWE1MVHJlZV9ub2RlKiBub2RlKSBjb25zdAotewotICAgIGNvbnN0IHVpbnQxNl90IGV2ZW50Q29kZSA9IGR0b2hzKG5vZGUtPmhlYWRlci50eXBlKTsKLQotICAgIHN0YXR1c190IGVyciA9IHZhbGlkYXRlX2NodW5rKAotICAgICAgICAmbm9kZS0+aGVhZGVyLCBzaXplb2YoUmVzWE1MVHJlZV9ub2RlKSwKLSAgICAgICAgbURhdGFFbmQsICJSZXNYTUxUcmVlX25vZGUiKTsKLQotICAgIGlmIChlcnIgPj0gTk9fRVJST1IpIHsKLSAgICAgICAgLy8gT25seSBwZXJmb3JtIGFkZGl0aW9uYWwgdmFsaWRhdGlvbiBvbiBTVEFSVCBub2RlcwotICAgICAgICBpZiAoZXZlbnRDb2RlICE9IFJFU19YTUxfU1RBUlRfRUxFTUVOVF9UWVBFKSB7Ci0gICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCB1aW50MTZfdCBoZWFkZXJTaXplID0gZHRvaHMobm9kZS0+aGVhZGVyLmhlYWRlclNpemUpOwotICAgICAgICBjb25zdCB1aW50MzJfdCBzaXplID0gZHRvaGwobm9kZS0+aGVhZGVyLnNpemUpOwotICAgICAgICBjb25zdCBSZXNYTUxUcmVlX2F0dHJFeHQqIGF0dHJFeHQgPSAoY29uc3QgUmVzWE1MVHJlZV9hdHRyRXh0KikKLSAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKW5vZGUpICsgaGVhZGVyU2l6ZSk7Ci0gICAgICAgIC8vIGNoZWNrIGZvciBzZW5zaWNhbCB2YWx1ZXMgcHVsbGVkIG91dCBvZiB0aGUgc3RyZWFtIHNvIGZhci4uLgotICAgICAgICBpZiAoKHNpemUgPj0gaGVhZGVyU2l6ZSArIHNpemVvZihSZXNYTUxUcmVlX2F0dHJFeHQpKQotICAgICAgICAgICAgICAgICYmICgodm9pZCopYXR0ckV4dCA+ICh2b2lkKilub2RlKSkgewotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGF0dHJTaXplID0gKChzaXplX3QpZHRvaHMoYXR0ckV4dC0+YXR0cmlidXRlU2l6ZSkpCi0gICAgICAgICAgICAgICAgKiBkdG9ocyhhdHRyRXh0LT5hdHRyaWJ1dGVDb3VudCk7Ci0gICAgICAgICAgICBpZiAoKGR0b2hzKGF0dHJFeHQtPmF0dHJpYnV0ZVN0YXJ0KSthdHRyU2l6ZSkgPD0gKHNpemUtaGVhZGVyU2l6ZSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBTE9HVygiQmFkIFhNTCBibG9jazogbm9kZSBhdHRyaWJ1dGVzIHVzZSAweCV4IGJ5dGVzLCBvbmx5IGhhdmUgMHgleCBieXRlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoZHRvaHMoYXR0ckV4dC0+YXR0cmlidXRlU3RhcnQpK2F0dHJTaXplKSwKLSAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoc2l6ZS1oZWFkZXJTaXplKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBTE9HVygiQmFkIFhNTCBzdGFydCBibG9jazogbm9kZSBoZWFkZXIgc2l6ZSAweCV4LCBzaXplIDB4JXhcbiIsCi0gICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCloZWFkZXJTaXplLCAodW5zaWduZWQgaW50KXNpemUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBCQURfVFlQRTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwotCi0jaWYgMAotICAgIGNvbnN0IGJvb2wgaXNTdGFydCA9IGR0b2hzKG5vZGUtPmhlYWRlci50eXBlKSA9PSBSRVNfWE1MX1NUQVJUX0VMRU1FTlRfVFlQRTsKLQotICAgIGNvbnN0IHVpbnQxNl90IGhlYWRlclNpemUgPSBkdG9ocyhub2RlLT5oZWFkZXIuaGVhZGVyU2l6ZSk7Ci0gICAgY29uc3QgdWludDMyX3Qgc2l6ZSA9IGR0b2hsKG5vZGUtPmhlYWRlci5zaXplKTsKLQotICAgIGlmIChoZWFkZXJTaXplID49IChpc1N0YXJ0ID8gc2l6ZW9mKFJlc1hNTFRyZWVfYXR0ck5vZGUpIDogc2l6ZW9mKFJlc1hNTFRyZWVfbm9kZSkpKSB7Ci0gICAgICAgIGlmIChzaXplID49IGhlYWRlclNpemUpIHsKLSAgICAgICAgICAgIGlmICgoKGNvbnN0IHVpbnQ4X3QqKW5vZGUpIDw9IChtRGF0YUVuZC1zaXplKSkgewotICAgICAgICAgICAgICAgIGlmICghaXNTdGFydCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoKChzaXplX3QpZHRvaHMobm9kZS0+YXR0cmlidXRlU2l6ZSkpKmR0b2hzKG5vZGUtPmF0dHJpYnV0ZUNvdW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIDw9IChzaXplLWhlYWRlclNpemUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQUxPR1coIkJhZCBYTUwgYmxvY2s6IG5vZGUgYXR0cmlidXRlcyB1c2UgMHgleCBieXRlcywgb25seSBoYXZlIDB4JXggYnl0ZXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAoKGludClkdG9ocyhub2RlLT5hdHRyaWJ1dGVTaXplKSkqZHRvaHMobm9kZS0+YXR0cmlidXRlQ291bnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoc2l6ZS1oZWFkZXJTaXplKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9UWVBFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQUxPR1coIkJhZCBYTUwgYmxvY2s6IG5vZGUgYXQgMHgleCBleHRlbmRzIGJleW9uZCBkYXRhIGVuZCAweCV4XG4iLAotICAgICAgICAgICAgICAgICAgICAoaW50KSgoKGNvbnN0IHVpbnQ4X3QqKW5vZGUpLSgoY29uc3QgdWludDhfdCopbUhlYWRlcikpLCAoaW50KW1TaXplKTsKLSAgICAgICAgICAgIHJldHVybiBCQURfVFlQRTsKLSAgICAgICAgfQotICAgICAgICBBTE9HVygiQmFkIFhNTCBibG9jazogbm9kZSBhdCAweCV4IGhlYWRlciBzaXplIDB4JXggc21hbGxlciB0aGFuIHRvdGFsIHNpemUgMHgleFxuIiwKLSAgICAgICAgICAgICAgICAoaW50KSgoKGNvbnN0IHVpbnQ4X3QqKW5vZGUpLSgoY29uc3QgdWludDhfdCopbUhlYWRlcikpLAotICAgICAgICAgICAgICAgIChpbnQpaGVhZGVyU2l6ZSwgKGludClzaXplKTsKLSAgICAgICAgcmV0dXJuIEJBRF9UWVBFOwotICAgIH0KLSAgICBBTE9HVygiQmFkIFhNTCBibG9jazogbm9kZSBhdCAweCV4IGhlYWRlciBzaXplIDB4JXggdG9vIHNtYWxsXG4iLAotICAgICAgICAgICAgKGludCkoKChjb25zdCB1aW50OF90Kilub2RlKS0oKGNvbnN0IHVpbnQ4X3QqKW1IZWFkZXIpKSwKLSAgICAgICAgICAgIChpbnQpaGVhZGVyU2l6ZSk7Ci0gICAgcmV0dXJuIEJBRF9UWVBFOwotI2VuZGlmCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBSZXNUYWJsZV9jb25maWc6OmNvcHlGcm9tRGV2aWNlTm9Td2FwKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgbykgewotICAgIGNvbnN0IHNpemVfdCBzaXplID0gZHRvaGwoby5zaXplKTsKLSAgICBpZiAoc2l6ZSA+PSBzaXplb2YoUmVzVGFibGVfY29uZmlnKSkgewotICAgICAgICAqdGhpcyA9IG87Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbWVtY3B5KHRoaXMsICZvLCBzaXplKTsKLSAgICAgICAgbWVtc2V0KCgodWludDhfdCopdGhpcykrc2l6ZSwgMCwgc2l6ZW9mKFJlc1RhYmxlX2NvbmZpZyktc2l6ZSk7Ci0gICAgfQotfQotCi12b2lkIFJlc1RhYmxlX2NvbmZpZzo6Y29weUZyb21EdG9IKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgbykgewotICAgIGNvcHlGcm9tRGV2aWNlTm9Td2FwKG8pOwotICAgIHNpemUgPSBzaXplb2YoUmVzVGFibGVfY29uZmlnKTsKLSAgICBtY2MgPSBkdG9ocyhtY2MpOwotICAgIG1uYyA9IGR0b2hzKG1uYyk7Ci0gICAgZGVuc2l0eSA9IGR0b2hzKGRlbnNpdHkpOwotICAgIHNjcmVlbldpZHRoID0gZHRvaHMoc2NyZWVuV2lkdGgpOwotICAgIHNjcmVlbkhlaWdodCA9IGR0b2hzKHNjcmVlbkhlaWdodCk7Ci0gICAgc2RrVmVyc2lvbiA9IGR0b2hzKHNka1ZlcnNpb24pOwotICAgIG1pbm9yVmVyc2lvbiA9IGR0b2hzKG1pbm9yVmVyc2lvbik7Ci0gICAgc21hbGxlc3RTY3JlZW5XaWR0aERwID0gZHRvaHMoc21hbGxlc3RTY3JlZW5XaWR0aERwKTsKLSAgICBzY3JlZW5XaWR0aERwID0gZHRvaHMoc2NyZWVuV2lkdGhEcCk7Ci0gICAgc2NyZWVuSGVpZ2h0RHAgPSBkdG9ocyhzY3JlZW5IZWlnaHREcCk7Ci19Ci0KLXZvaWQgUmVzVGFibGVfY29uZmlnOjpzd2FwSHRvRCgpIHsKLSAgICBzaXplID0gaHRvZGwoc2l6ZSk7Ci0gICAgbWNjID0gaHRvZHMobWNjKTsKLSAgICBtbmMgPSBodG9kcyhtbmMpOwotICAgIGRlbnNpdHkgPSBodG9kcyhkZW5zaXR5KTsKLSAgICBzY3JlZW5XaWR0aCA9IGh0b2RzKHNjcmVlbldpZHRoKTsKLSAgICBzY3JlZW5IZWlnaHQgPSBodG9kcyhzY3JlZW5IZWlnaHQpOwotICAgIHNka1ZlcnNpb24gPSBodG9kcyhzZGtWZXJzaW9uKTsKLSAgICBtaW5vclZlcnNpb24gPSBodG9kcyhtaW5vclZlcnNpb24pOwotICAgIHNtYWxsZXN0U2NyZWVuV2lkdGhEcCA9IGh0b2RzKHNtYWxsZXN0U2NyZWVuV2lkdGhEcCk7Ci0gICAgc2NyZWVuV2lkdGhEcCA9IGh0b2RzKHNjcmVlbldpZHRoRHApOwotICAgIHNjcmVlbkhlaWdodERwID0gaHRvZHMoc2NyZWVuSGVpZ2h0RHApOwotfQotCi1pbnQgUmVzVGFibGVfY29uZmlnOjpjb21wYXJlKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgbykgY29uc3QgewotICAgIGludDMyX3QgZGlmZiA9IChpbnQzMl90KShpbXNpIC0gby5pbXNpKTsKLSAgICBpZiAoZGlmZiAhPSAwKSByZXR1cm4gZGlmZjsKLSAgICBkaWZmID0gKGludDMyX3QpKGxvY2FsZSAtIG8ubG9jYWxlKTsKLSAgICBpZiAoZGlmZiAhPSAwKSByZXR1cm4gZGlmZjsKLSAgICBkaWZmID0gKGludDMyX3QpKHNjcmVlblR5cGUgLSBvLnNjcmVlblR5cGUpOwotICAgIGlmIChkaWZmICE9IDApIHJldHVybiBkaWZmOwotICAgIGRpZmYgPSAoaW50MzJfdCkoaW5wdXQgLSBvLmlucHV0KTsKLSAgICBpZiAoZGlmZiAhPSAwKSByZXR1cm4gZGlmZjsKLSAgICBkaWZmID0gKGludDMyX3QpKHNjcmVlblNpemUgLSBvLnNjcmVlblNpemUpOwotICAgIGlmIChkaWZmICE9IDApIHJldHVybiBkaWZmOwotICAgIGRpZmYgPSAoaW50MzJfdCkodmVyc2lvbiAtIG8udmVyc2lvbik7Ci0gICAgaWYgKGRpZmYgIT0gMCkgcmV0dXJuIGRpZmY7Ci0gICAgZGlmZiA9IChpbnQzMl90KShzY3JlZW5MYXlvdXQgLSBvLnNjcmVlbkxheW91dCk7Ci0gICAgaWYgKGRpZmYgIT0gMCkgcmV0dXJuIGRpZmY7Ci0gICAgZGlmZiA9IChpbnQzMl90KSh1aU1vZGUgLSBvLnVpTW9kZSk7Ci0gICAgaWYgKGRpZmYgIT0gMCkgcmV0dXJuIGRpZmY7Ci0gICAgZGlmZiA9IChpbnQzMl90KShzbWFsbGVzdFNjcmVlbldpZHRoRHAgLSBvLnNtYWxsZXN0U2NyZWVuV2lkdGhEcCk7Ci0gICAgaWYgKGRpZmYgIT0gMCkgcmV0dXJuIGRpZmY7Ci0gICAgZGlmZiA9IChpbnQzMl90KShzY3JlZW5TaXplRHAgLSBvLnNjcmVlblNpemVEcCk7Ci0gICAgcmV0dXJuIChpbnQpZGlmZjsKLX0KLQotaW50IFJlc1RhYmxlX2NvbmZpZzo6Y29tcGFyZUxvZ2ljYWwoY29uc3QgUmVzVGFibGVfY29uZmlnJiBvKSBjb25zdCB7Ci0gICAgaWYgKG1jYyAhPSBvLm1jYykgewotICAgICAgICByZXR1cm4gbWNjIDwgby5tY2MgPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmIChtbmMgIT0gby5tbmMpIHsKLSAgICAgICAgcmV0dXJuIG1uYyA8IG8ubW5jID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAobGFuZ3VhZ2VbMF0gIT0gby5sYW5ndWFnZVswXSkgewotICAgICAgICByZXR1cm4gbGFuZ3VhZ2VbMF0gPCBvLmxhbmd1YWdlWzBdID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAobGFuZ3VhZ2VbMV0gIT0gby5sYW5ndWFnZVsxXSkgewotICAgICAgICByZXR1cm4gbGFuZ3VhZ2VbMV0gPCBvLmxhbmd1YWdlWzFdID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAoY291bnRyeVswXSAhPSBvLmNvdW50cnlbMF0pIHsKLSAgICAgICAgcmV0dXJuIGNvdW50cnlbMF0gPCBvLmNvdW50cnlbMF0gPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmIChjb3VudHJ5WzFdICE9IG8uY291bnRyeVsxXSkgewotICAgICAgICByZXR1cm4gY291bnRyeVsxXSA8IG8uY291bnRyeVsxXSA/IC0xIDogMTsKLSAgICB9Ci0gICAgaWYgKChzY3JlZW5MYXlvdXQgJiBNQVNLX0xBWU9VVERJUikgIT0gKG8uc2NyZWVuTGF5b3V0ICYgTUFTS19MQVlPVVRESVIpKSB7Ci0gICAgICAgIHJldHVybiAoc2NyZWVuTGF5b3V0ICYgTUFTS19MQVlPVVRESVIpIDwgKG8uc2NyZWVuTGF5b3V0ICYgTUFTS19MQVlPVVRESVIpID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAoc21hbGxlc3RTY3JlZW5XaWR0aERwICE9IG8uc21hbGxlc3RTY3JlZW5XaWR0aERwKSB7Ci0gICAgICAgIHJldHVybiBzbWFsbGVzdFNjcmVlbldpZHRoRHAgPCBvLnNtYWxsZXN0U2NyZWVuV2lkdGhEcCA/IC0xIDogMTsKLSAgICB9Ci0gICAgaWYgKHNjcmVlbldpZHRoRHAgIT0gby5zY3JlZW5XaWR0aERwKSB7Ci0gICAgICAgIHJldHVybiBzY3JlZW5XaWR0aERwIDwgby5zY3JlZW5XaWR0aERwID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAoc2NyZWVuSGVpZ2h0RHAgIT0gby5zY3JlZW5IZWlnaHREcCkgewotICAgICAgICByZXR1cm4gc2NyZWVuSGVpZ2h0RHAgPCBvLnNjcmVlbkhlaWdodERwID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAoc2NyZWVuV2lkdGggIT0gby5zY3JlZW5XaWR0aCkgewotICAgICAgICByZXR1cm4gc2NyZWVuV2lkdGggPCBvLnNjcmVlbldpZHRoID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAoc2NyZWVuSGVpZ2h0ICE9IG8uc2NyZWVuSGVpZ2h0KSB7Ci0gICAgICAgIHJldHVybiBzY3JlZW5IZWlnaHQgPCBvLnNjcmVlbkhlaWdodCA/IC0xIDogMTsKLSAgICB9Ci0gICAgaWYgKGRlbnNpdHkgIT0gby5kZW5zaXR5KSB7Ci0gICAgICAgIHJldHVybiBkZW5zaXR5IDwgby5kZW5zaXR5ID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAob3JpZW50YXRpb24gIT0gby5vcmllbnRhdGlvbikgewotICAgICAgICByZXR1cm4gb3JpZW50YXRpb24gPCBvLm9yaWVudGF0aW9uID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAodG91Y2hzY3JlZW4gIT0gby50b3VjaHNjcmVlbikgewotICAgICAgICByZXR1cm4gdG91Y2hzY3JlZW4gPCBvLnRvdWNoc2NyZWVuID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAoaW5wdXQgIT0gby5pbnB1dCkgewotICAgICAgICByZXR1cm4gaW5wdXQgPCBvLmlucHV0ID8gLTEgOiAxOwotICAgIH0KLSAgICBpZiAoc2NyZWVuTGF5b3V0ICE9IG8uc2NyZWVuTGF5b3V0KSB7Ci0gICAgICAgIHJldHVybiBzY3JlZW5MYXlvdXQgPCBvLnNjcmVlbkxheW91dCA/IC0xIDogMTsKLSAgICB9Ci0gICAgaWYgKHVpTW9kZSAhPSBvLnVpTW9kZSkgewotICAgICAgICByZXR1cm4gdWlNb2RlIDwgby51aU1vZGUgPyAtMSA6IDE7Ci0gICAgfQotICAgIGlmICh2ZXJzaW9uICE9IG8udmVyc2lvbikgewotICAgICAgICByZXR1cm4gdmVyc2lvbiA8IG8udmVyc2lvbiA/IC0xIDogMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBSZXNUYWJsZV9jb25maWc6OmRpZmYoY29uc3QgUmVzVGFibGVfY29uZmlnJiBvKSBjb25zdCB7Ci0gICAgaW50IGRpZmZzID0gMDsKLSAgICBpZiAobWNjICE9IG8ubWNjKSBkaWZmcyB8PSBDT05GSUdfTUNDOwotICAgIGlmIChtbmMgIT0gby5tbmMpIGRpZmZzIHw9IENPTkZJR19NTkM7Ci0gICAgaWYgKGxvY2FsZSAhPSBvLmxvY2FsZSkgZGlmZnMgfD0gQ09ORklHX0xPQ0FMRTsKLSAgICBpZiAob3JpZW50YXRpb24gIT0gby5vcmllbnRhdGlvbikgZGlmZnMgfD0gQ09ORklHX09SSUVOVEFUSU9OOwotICAgIGlmIChkZW5zaXR5ICE9IG8uZGVuc2l0eSkgZGlmZnMgfD0gQ09ORklHX0RFTlNJVFk7Ci0gICAgaWYgKHRvdWNoc2NyZWVuICE9IG8udG91Y2hzY3JlZW4pIGRpZmZzIHw9IENPTkZJR19UT1VDSFNDUkVFTjsKLSAgICBpZiAoKChpbnB1dEZsYWdzXm8uaW5wdXRGbGFncykmKE1BU0tfS0VZU0hJRERFTnxNQVNLX05BVkhJRERFTikpICE9IDApCi0gICAgICAgICAgICBkaWZmcyB8PSBDT05GSUdfS0VZQk9BUkRfSElEREVOOwotICAgIGlmIChrZXlib2FyZCAhPSBvLmtleWJvYXJkKSBkaWZmcyB8PSBDT05GSUdfS0VZQk9BUkQ7Ci0gICAgaWYgKG5hdmlnYXRpb24gIT0gby5uYXZpZ2F0aW9uKSBkaWZmcyB8PSBDT05GSUdfTkFWSUdBVElPTjsKLSAgICBpZiAoc2NyZWVuU2l6ZSAhPSBvLnNjcmVlblNpemUpIGRpZmZzIHw9IENPTkZJR19TQ1JFRU5fU0laRTsKLSAgICBpZiAodmVyc2lvbiAhPSBvLnZlcnNpb24pIGRpZmZzIHw9IENPTkZJR19WRVJTSU9OOwotICAgIGlmICgoc2NyZWVuTGF5b3V0ICYgTUFTS19MQVlPVVRESVIpICE9IChvLnNjcmVlbkxheW91dCAmIE1BU0tfTEFZT1VURElSKSkgZGlmZnMgfD0gQ09ORklHX0xBWU9VVERJUjsKLSAgICBpZiAoKHNjcmVlbkxheW91dCAmIH5NQVNLX0xBWU9VVERJUikgIT0gKG8uc2NyZWVuTGF5b3V0ICYgfk1BU0tfTEFZT1VURElSKSkgZGlmZnMgfD0gQ09ORklHX1NDUkVFTl9MQVlPVVQ7Ci0gICAgaWYgKHVpTW9kZSAhPSBvLnVpTW9kZSkgZGlmZnMgfD0gQ09ORklHX1VJX01PREU7Ci0gICAgaWYgKHNtYWxsZXN0U2NyZWVuV2lkdGhEcCAhPSBvLnNtYWxsZXN0U2NyZWVuV2lkdGhEcCkgZGlmZnMgfD0gQ09ORklHX1NNQUxMRVNUX1NDUkVFTl9TSVpFOwotICAgIGlmIChzY3JlZW5TaXplRHAgIT0gby5zY3JlZW5TaXplRHApIGRpZmZzIHw9IENPTkZJR19TQ1JFRU5fU0laRTsKLSAgICByZXR1cm4gZGlmZnM7Ci19Ci0KLWJvb2wgUmVzVGFibGVfY29uZmlnOjppc01vcmVTcGVjaWZpY1RoYW4oY29uc3QgUmVzVGFibGVfY29uZmlnJiBvKSBjb25zdCB7Ci0gICAgLy8gVGhlIG9yZGVyIG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgZGVmaW5lcyB0aGUgaW1wb3J0YW5jZSBvZiBvbmUKLSAgICAvLyBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBvdmVyIGFub3RoZXIuICBUaG9zZSB0ZXN0cyBmaXJzdCBhcmUgbW9yZQotICAgIC8vIGltcG9ydGFudCwgdHJ1bXBpbmcgYW55IHZhbHVlcyBpbiB0aG9zZSBmb2xsb3dpbmcgdGhlbS4KLSAgICBpZiAoaW1zaSB8fCBvLmltc2kpIHsKLSAgICAgICAgaWYgKG1jYyAhPSBvLm1jYykgewotICAgICAgICAgICAgaWYgKCFtY2MpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghby5tY2MpIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1uYyAhPSBvLm1uYykgewotICAgICAgICAgICAgaWYgKCFtbmMpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghby5tbmMpIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxvY2FsZSB8fCBvLmxvY2FsZSkgewotICAgICAgICBpZiAobGFuZ3VhZ2VbMF0gIT0gby5sYW5ndWFnZVswXSkgewotICAgICAgICAgICAgaWYgKCFsYW5ndWFnZVswXSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFvLmxhbmd1YWdlWzBdKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb3VudHJ5WzBdICE9IG8uY291bnRyeVswXSkgewotICAgICAgICAgICAgaWYgKCFjb3VudHJ5WzBdKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIW8uY291bnRyeVswXSkgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc2NyZWVuTGF5b3V0IHx8IG8uc2NyZWVuTGF5b3V0KSB7Ci0gICAgICAgIGlmICgoKHNjcmVlbkxheW91dF5vLnNjcmVlbkxheW91dCkgJiBNQVNLX0xBWU9VVERJUikgIT0gMCkgewotICAgICAgICAgICAgaWYgKCEoc2NyZWVuTGF5b3V0ICYgTUFTS19MQVlPVVRESVIpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIShvLnNjcmVlbkxheW91dCAmIE1BU0tfTEFZT1VURElSKSkgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc21hbGxlc3RTY3JlZW5XaWR0aERwIHx8IG8uc21hbGxlc3RTY3JlZW5XaWR0aERwKSB7Ci0gICAgICAgIGlmIChzbWFsbGVzdFNjcmVlbldpZHRoRHAgIT0gby5zbWFsbGVzdFNjcmVlbldpZHRoRHApIHsKLSAgICAgICAgICAgIGlmICghc21hbGxlc3RTY3JlZW5XaWR0aERwKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIW8uc21hbGxlc3RTY3JlZW5XaWR0aERwKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzY3JlZW5TaXplRHAgfHwgby5zY3JlZW5TaXplRHApIHsKLSAgICAgICAgaWYgKHNjcmVlbldpZHRoRHAgIT0gby5zY3JlZW5XaWR0aERwKSB7Ci0gICAgICAgICAgICBpZiAoIXNjcmVlbldpZHRoRHApIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghby5zY3JlZW5XaWR0aERwKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzY3JlZW5IZWlnaHREcCAhPSBvLnNjcmVlbkhlaWdodERwKSB7Ci0gICAgICAgICAgICBpZiAoIXNjcmVlbkhlaWdodERwKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIW8uc2NyZWVuSGVpZ2h0RHApIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHNjcmVlbkxheW91dCB8fCBvLnNjcmVlbkxheW91dCkgewotICAgICAgICBpZiAoKChzY3JlZW5MYXlvdXReby5zY3JlZW5MYXlvdXQpICYgTUFTS19TQ1JFRU5TSVpFKSAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAoIShzY3JlZW5MYXlvdXQgJiBNQVNLX1NDUkVFTlNJWkUpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIShvLnNjcmVlbkxheW91dCAmIE1BU0tfU0NSRUVOU0laRSkpIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoKHNjcmVlbkxheW91dF5vLnNjcmVlbkxheW91dCkgJiBNQVNLX1NDUkVFTkxPTkcpICE9IDApIHsKLSAgICAgICAgICAgIGlmICghKHNjcmVlbkxheW91dCAmIE1BU0tfU0NSRUVOTE9ORykpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghKG8uc2NyZWVuTGF5b3V0ICYgTUFTS19TQ1JFRU5MT05HKSkgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAob3JpZW50YXRpb24gIT0gby5vcmllbnRhdGlvbikgewotICAgICAgICBpZiAoIW9yaWVudGF0aW9uKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghby5vcmllbnRhdGlvbikgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHVpTW9kZSB8fCBvLnVpTW9kZSkgewotICAgICAgICBpZiAoKCh1aU1vZGVeby51aU1vZGUpICYgTUFTS19VSV9NT0RFX1RZUEUpICE9IDApIHsKLSAgICAgICAgICAgIGlmICghKHVpTW9kZSAmIE1BU0tfVUlfTU9ERV9UWVBFKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCEoby51aU1vZGUgJiBNQVNLX1VJX01PREVfVFlQRSkpIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoKHVpTW9kZV5vLnVpTW9kZSkgJiBNQVNLX1VJX01PREVfTklHSFQpICE9IDApIHsKLSAgICAgICAgICAgIGlmICghKHVpTW9kZSAmIE1BU0tfVUlfTU9ERV9OSUdIVCkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghKG8udWlNb2RlICYgTUFTS19VSV9NT0RFX05JR0hUKSkgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBkZW5zaXR5IGlzIG5ldmVyICdtb3JlIHNwZWNpZmljJwotICAgIC8vIGFzIHRoZSBkZWZhdWx0IGp1c3QgZXF1YWxzIDE2MAotCi0gICAgaWYgKHRvdWNoc2NyZWVuICE9IG8udG91Y2hzY3JlZW4pIHsKLSAgICAgICAgaWYgKCF0b3VjaHNjcmVlbikgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIW8udG91Y2hzY3JlZW4pIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChpbnB1dCB8fCBvLmlucHV0KSB7Ci0gICAgICAgIGlmICgoKGlucHV0RmxhZ3Neby5pbnB1dEZsYWdzKSAmIE1BU0tfS0VZU0hJRERFTikgIT0gMCkgewotICAgICAgICAgICAgaWYgKCEoaW5wdXRGbGFncyAmIE1BU0tfS0VZU0hJRERFTikpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghKG8uaW5wdXRGbGFncyAmIE1BU0tfS0VZU0hJRERFTikpIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCgoaW5wdXRGbGFnc15vLmlucHV0RmxhZ3MpICYgTUFTS19OQVZISURERU4pICE9IDApIHsKLSAgICAgICAgICAgIGlmICghKGlucHV0RmxhZ3MgJiBNQVNLX05BVkhJRERFTikpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghKG8uaW5wdXRGbGFncyAmIE1BU0tfTkFWSElEREVOKSkgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa2V5Ym9hcmQgIT0gby5rZXlib2FyZCkgewotICAgICAgICAgICAgaWYgKCFrZXlib2FyZCkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFvLmtleWJvYXJkKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuYXZpZ2F0aW9uICE9IG8ubmF2aWdhdGlvbikgewotICAgICAgICAgICAgaWYgKCFuYXZpZ2F0aW9uKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIW8ubmF2aWdhdGlvbikgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc2NyZWVuU2l6ZSB8fCBvLnNjcmVlblNpemUpIHsKLSAgICAgICAgaWYgKHNjcmVlbldpZHRoICE9IG8uc2NyZWVuV2lkdGgpIHsKLSAgICAgICAgICAgIGlmICghc2NyZWVuV2lkdGgpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghby5zY3JlZW5XaWR0aCkgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2NyZWVuSGVpZ2h0ICE9IG8uc2NyZWVuSGVpZ2h0KSB7Ci0gICAgICAgICAgICBpZiAoIXNjcmVlbkhlaWdodCkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFvLnNjcmVlbkhlaWdodCkgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodmVyc2lvbiB8fCBvLnZlcnNpb24pIHsKLSAgICAgICAgaWYgKHNka1ZlcnNpb24gIT0gby5zZGtWZXJzaW9uKSB7Ci0gICAgICAgICAgICBpZiAoIXNka1ZlcnNpb24pIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghby5zZGtWZXJzaW9uKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtaW5vclZlcnNpb24gIT0gby5taW5vclZlcnNpb24pIHsKLSAgICAgICAgICAgIGlmICghbWlub3JWZXJzaW9uKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIW8ubWlub3JWZXJzaW9uKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzVGFibGVfY29uZmlnOjppc0JldHRlclRoYW4oY29uc3QgUmVzVGFibGVfY29uZmlnJiBvLAotICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcqIHJlcXVlc3RlZCkgY29uc3QgewotICAgIGlmIChyZXF1ZXN0ZWQpIHsKLSAgICAgICAgaWYgKGltc2kgfHwgby5pbXNpKSB7Ci0gICAgICAgICAgICBpZiAoKG1jYyAhPSBvLm1jYykgJiYgcmVxdWVzdGVkLT5tY2MpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1jYyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgobW5jICE9IG8ubW5jKSAmJiByZXF1ZXN0ZWQtPm1uYykgewotICAgICAgICAgICAgICAgIHJldHVybiAobW5jKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhbGUgfHwgby5sb2NhbGUpIHsKLSAgICAgICAgICAgIGlmICgobGFuZ3VhZ2VbMF0gIT0gby5sYW5ndWFnZVswXSkgJiYgcmVxdWVzdGVkLT5sYW5ndWFnZVswXSkgewotICAgICAgICAgICAgICAgIHJldHVybiAobGFuZ3VhZ2VbMF0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKGNvdW50cnlbMF0gIT0gby5jb3VudHJ5WzBdKSAmJiByZXF1ZXN0ZWQtPmNvdW50cnlbMF0pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKGNvdW50cnlbMF0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNjcmVlbkxheW91dCB8fCBvLnNjcmVlbkxheW91dCkgewotICAgICAgICAgICAgaWYgKCgoc2NyZWVuTGF5b3V0Xm8uc2NyZWVuTGF5b3V0KSAmIE1BU0tfTEFZT1VURElSKSAhPSAwCi0gICAgICAgICAgICAgICAgICAgICYmIChyZXF1ZXN0ZWQtPnNjcmVlbkxheW91dCAmIE1BU0tfTEFZT1VURElSKSkgewotICAgICAgICAgICAgICAgIGludCBteUxheW91dERpciA9IHNjcmVlbkxheW91dCAmIE1BU0tfTEFZT1VURElSOwotICAgICAgICAgICAgICAgIGludCBvTGF5b3V0RGlyID0gby5zY3JlZW5MYXlvdXQgJiBNQVNLX0xBWU9VVERJUjsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG15TGF5b3V0RGlyID4gb0xheW91dERpcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc21hbGxlc3RTY3JlZW5XaWR0aERwIHx8IG8uc21hbGxlc3RTY3JlZW5XaWR0aERwKSB7Ci0gICAgICAgICAgICAvLyBUaGUgY29uZmlndXJhdGlvbiBjbG9zZXN0IHRvIHRoZSBhY3R1YWwgc2l6ZSBpcyBiZXN0LgotICAgICAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgbGFyZ2VyIGNvbmZpZ3MgaGF2ZSBhbHJlYWR5IGJlZW4gZmlsdGVyZWQKLSAgICAgICAgICAgIC8vIG91dCBhdCB0aGlzIHBvaW50LiAgVGhhdCBtZWFucyB3ZSBqdXN0IHdhbnQgdGhlIGxhcmdlc3Qgb25lLgotICAgICAgICAgICAgaWYgKHNtYWxsZXN0U2NyZWVuV2lkdGhEcCAhPSBvLnNtYWxsZXN0U2NyZWVuV2lkdGhEcCkgewotICAgICAgICAgICAgICAgIHJldHVybiBzbWFsbGVzdFNjcmVlbldpZHRoRHAgPiBvLnNtYWxsZXN0U2NyZWVuV2lkdGhEcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzY3JlZW5TaXplRHAgfHwgby5zY3JlZW5TaXplRHApIHsKLSAgICAgICAgICAgIC8vICJCZXR0ZXIiIGlzIGJhc2VkIG9uIHRoZSBzdW0gb2YgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBib3RoCi0gICAgICAgICAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IGZyb20gdGhlIHJlcXVlc3RlZCBkaW1lbnNpb25zLiAgV2UgYXJlCi0gICAgICAgICAgICAvLyBhc3N1bWluZyB0aGUgaW52YWxpZCBjb25maWdzICh3aXRoIHNtYWxsZXIgZGltZW5zKSBoYXZlCi0gICAgICAgICAgICAvLyBhbHJlYWR5IGJlZW4gZmlsdGVyZWQuICBOb3RlIHRoYXQgaWYgYSBwYXJ0aWN1bGFyIGRpbWVuc2lvbgotICAgICAgICAgICAgLy8gaXMgdW5zcGVjaWZpZWQsIHdlIHdpbGwgZW5kIHVwIHdpdGggYSBsYXJnZSB2YWx1ZSAodGhlCi0gICAgICAgICAgICAvLyBkaWZmZXJlbmNlIGJldHdlZW4gMCBhbmQgdGhlIHJlcXVlc3RlZCBkaW1lbnNpb24pLCB3aGljaCBpcwotICAgICAgICAgICAgLy8gZ29vZCBzaW5jZSB3ZSB3aWxsIHByZWZlciBhIGNvbmZpZyB0aGF0IGhhcyBzcGVjaWZpZWQgYQotICAgICAgICAgICAgLy8gZGltZW5zaW9uIHZhbHVlLgotICAgICAgICAgICAgaW50IG15RGVsdGEgPSAwLCBvdGhlckRlbHRhID0gMDsKLSAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWQtPnNjcmVlbldpZHRoRHApIHsKLSAgICAgICAgICAgICAgICBteURlbHRhICs9IHJlcXVlc3RlZC0+c2NyZWVuV2lkdGhEcCAtIHNjcmVlbldpZHRoRHA7Ci0gICAgICAgICAgICAgICAgb3RoZXJEZWx0YSArPSByZXF1ZXN0ZWQtPnNjcmVlbldpZHRoRHAgLSBvLnNjcmVlbldpZHRoRHA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVxdWVzdGVkLT5zY3JlZW5IZWlnaHREcCkgewotICAgICAgICAgICAgICAgIG15RGVsdGEgKz0gcmVxdWVzdGVkLT5zY3JlZW5IZWlnaHREcCAtIHNjcmVlbkhlaWdodERwOwotICAgICAgICAgICAgICAgIG90aGVyRGVsdGEgKz0gcmVxdWVzdGVkLT5zY3JlZW5IZWlnaHREcCAtIG8uc2NyZWVuSGVpZ2h0RHA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvL0FMT0dJKCJDb21wYXJpbmcgdGhpcyAlZHglZCB0byBvdGhlciAlZHglZCBpbiAlZHglZDogbXlEZWx0YT0lZCBvdGhlckRlbHRhPSVkIiwKLSAgICAgICAgICAgIC8vICAgIHNjcmVlbldpZHRoRHAsIHNjcmVlbkhlaWdodERwLCBvLnNjcmVlbldpZHRoRHAsIG8uc2NyZWVuSGVpZ2h0RHAsCi0gICAgICAgICAgICAvLyAgICByZXF1ZXN0ZWQtPnNjcmVlbldpZHRoRHAsIHJlcXVlc3RlZC0+c2NyZWVuSGVpZ2h0RHAsIG15RGVsdGEsIG90aGVyRGVsdGEpOwotICAgICAgICAgICAgaWYgKG15RGVsdGEgIT0gb3RoZXJEZWx0YSkgewotICAgICAgICAgICAgICAgIHJldHVybiBteURlbHRhIDwgb3RoZXJEZWx0YTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzY3JlZW5MYXlvdXQgfHwgby5zY3JlZW5MYXlvdXQpIHsKLSAgICAgICAgICAgIGlmICgoKHNjcmVlbkxheW91dF5vLnNjcmVlbkxheW91dCkgJiBNQVNLX1NDUkVFTlNJWkUpICE9IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgKHJlcXVlc3RlZC0+c2NyZWVuTGF5b3V0ICYgTUFTS19TQ1JFRU5TSVpFKSkgewotICAgICAgICAgICAgICAgIC8vIEEgbGl0dGxlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGhlcmU6IHVuZGVmaW5lZCBpcwotICAgICAgICAgICAgICAgIC8vIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byBub3JtYWwuICBCdXQgb25seSBpZiB0aGUKLSAgICAgICAgICAgICAgICAvLyByZXF1ZXN0ZWQgc2l6ZSBpcyBhdCBsZWFzdCBub3JtYWw7IG90aGVyd2lzZSwgc21hbGwKLSAgICAgICAgICAgICAgICAvLyBpcyBiZXR0ZXIgdGhhbiB0aGUgZGVmYXVsdC4KLSAgICAgICAgICAgICAgICBpbnQgbXlTTCA9IChzY3JlZW5MYXlvdXQgJiBNQVNLX1NDUkVFTlNJWkUpOwotICAgICAgICAgICAgICAgIGludCBvU0wgPSAoby5zY3JlZW5MYXlvdXQgJiBNQVNLX1NDUkVFTlNJWkUpOwotICAgICAgICAgICAgICAgIGludCBmaXhlZE15U0wgPSBteVNMOwotICAgICAgICAgICAgICAgIGludCBmaXhlZE9TTCA9IG9TTDsKLSAgICAgICAgICAgICAgICBpZiAoKHJlcXVlc3RlZC0+c2NyZWVuTGF5b3V0ICYgTUFTS19TQ1JFRU5TSVpFKSA+PSBTQ1JFRU5TSVpFX05PUk1BTCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZml4ZWRNeVNMID09IDApIGZpeGVkTXlTTCA9IFNDUkVFTlNJWkVfTk9STUFMOwotICAgICAgICAgICAgICAgICAgICBpZiAoZml4ZWRPU0wgPT0gMCkgZml4ZWRPU0wgPSBTQ1JFRU5TSVpFX05PUk1BTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gRm9yIHNjcmVlbiBzaXplLCB0aGUgYmVzdCBtYXRjaCBpcyB0aGUgb25lIHRoYXQgaXMKLSAgICAgICAgICAgICAgICAvLyBjbG9zZXN0IHRvIHRoZSByZXF1ZXN0ZWQgc2NyZWVuIHNpemUsIGJ1dCBub3Qgb3ZlcgotICAgICAgICAgICAgICAgIC8vICh0aGUgbm90IG92ZXIgcGFydCBpcyBkZWFsdCB3aXRoIGluIG1hdGNoKCkgYmVsb3cpLgotICAgICAgICAgICAgICAgIGlmIChmaXhlZE15U0wgPT0gZml4ZWRPU0wpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHR3byBhcmUgdGhlIHNhbWUsIGJ1dCAndGhpcycgaXMgYWN0dWFsbHkKLSAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkLCB0aGVuIHRoZSBvdGhlciBpcyByZWFsbHkgYSBiZXR0ZXIgbWF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGlmIChteVNMID09IDApIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChmaXhlZE15U0wgIT0gZml4ZWRPU0wpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpeGVkTXlTTCA+IGZpeGVkT1NMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoKHNjcmVlbkxheW91dF5vLnNjcmVlbkxheW91dCkgJiBNQVNLX1NDUkVFTkxPTkcpICE9IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgKHJlcXVlc3RlZC0+c2NyZWVuTGF5b3V0ICYgTUFTS19TQ1JFRU5MT05HKSkgewotICAgICAgICAgICAgICAgIHJldHVybiAoc2NyZWVuTGF5b3V0ICYgTUFTS19TQ1JFRU5MT05HKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICgob3JpZW50YXRpb24gIT0gby5vcmllbnRhdGlvbikgJiYgcmVxdWVzdGVkLT5vcmllbnRhdGlvbikgewotICAgICAgICAgICAgcmV0dXJuIChvcmllbnRhdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodWlNb2RlIHx8IG8udWlNb2RlKSB7Ci0gICAgICAgICAgICBpZiAoKCh1aU1vZGVeby51aU1vZGUpICYgTUFTS19VSV9NT0RFX1RZUEUpICE9IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgKHJlcXVlc3RlZC0+dWlNb2RlICYgTUFTS19VSV9NT0RFX1RZUEUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICh1aU1vZGUgJiBNQVNLX1VJX01PREVfVFlQRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKCh1aU1vZGVeby51aU1vZGUpICYgTUFTS19VSV9NT0RFX05JR0hUKSAhPSAwCi0gICAgICAgICAgICAgICAgICAgICYmIChyZXF1ZXN0ZWQtPnVpTW9kZSAmIE1BU0tfVUlfTU9ERV9OSUdIVCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKHVpTW9kZSAmIE1BU0tfVUlfTU9ERV9OSUdIVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2NyZWVuVHlwZSB8fCBvLnNjcmVlblR5cGUpIHsKLSAgICAgICAgICAgIGlmIChkZW5zaXR5ICE9IG8uZGVuc2l0eSkgewotICAgICAgICAgICAgICAgIC8vIGRlbnNpdHkgaXMgdG91Z2guICBBbnkgZGVuc2l0eSBpcyBwb3RlbnRpYWxseSB1c2VmdWwKLSAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBzeXN0ZW0gd2lsbCBzY2FsZSBpdC4gIFNjYWxpbmcgZG93bgotICAgICAgICAgICAgICAgIC8vIGlzIGdlbmVyYWxseSBiZXR0ZXIgdGhhbiBzY2FsaW5nIHVwLgotICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgZGVuc2l0eSBjb3VudHMgYXMgMTYwZHBpICh0aGUgc3lzdGVtIGRlZmF1bHQpCi0gICAgICAgICAgICAgICAgLy8gVE9ETyAtIHJlbW92ZSAxNjAgY29uc3RhbnRzCi0gICAgICAgICAgICAgICAgaW50IGggPSAoZGVuc2l0eT9kZW5zaXR5OjE2MCk7Ci0gICAgICAgICAgICAgICAgaW50IGwgPSAoby5kZW5zaXR5P28uZGVuc2l0eToxNjApOwotICAgICAgICAgICAgICAgIGJvb2wgYkltQmlnZ2VyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAobCA+IGgpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHQgPSBoOwotICAgICAgICAgICAgICAgICAgICBoID0gbDsKLSAgICAgICAgICAgICAgICAgICAgbCA9IHQ7Ci0gICAgICAgICAgICAgICAgICAgIGJJbUJpZ2dlciA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGludCByZXFWYWx1ZSA9IChyZXF1ZXN0ZWQtPmRlbnNpdHk/cmVxdWVzdGVkLT5kZW5zaXR5OjE2MCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcVZhbHVlID49IGgpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWVzdGVkIHZhbHVlIGhpZ2hlciB0aGFuIGJvdGggbCBhbmQgaCwgZ2l2ZSBoCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiSW1CaWdnZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChsID49IHJlcVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RlZCB2YWx1ZSBsb3dlciB0aGFuIGJvdGggbCBhbmQgaCwgZ2l2ZSBsCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAhYkltQmlnZ2VyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBzYXlpbmcgdGhhdCBzY2FsaW5nIGRvd24gaXMgMnggYmV0dGVyIHRoYW4gdXAKLSAgICAgICAgICAgICAgICBpZiAoKCgyICogbCkgLSByZXFWYWx1ZSkgKiBoID4gcmVxVmFsdWUgKiByZXFWYWx1ZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWJJbUJpZ2dlcjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYkltQmlnZ2VyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCh0b3VjaHNjcmVlbiAhPSBvLnRvdWNoc2NyZWVuKSAmJiByZXF1ZXN0ZWQtPnRvdWNoc2NyZWVuKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICh0b3VjaHNjcmVlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5wdXQgfHwgby5pbnB1dCkgewotICAgICAgICAgICAgY29uc3QgaW50IGtleXNIaWRkZW4gPSBpbnB1dEZsYWdzICYgTUFTS19LRVlTSElEREVOOwotICAgICAgICAgICAgY29uc3QgaW50IG9LZXlzSGlkZGVuID0gby5pbnB1dEZsYWdzICYgTUFTS19LRVlTSElEREVOOwotICAgICAgICAgICAgaWYgKGtleXNIaWRkZW4gIT0gb0tleXNIaWRkZW4pIHsKLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVxS2V5c0hpZGRlbiA9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWQtPmlucHV0RmxhZ3MgJiBNQVNLX0tFWVNISURERU47Ci0gICAgICAgICAgICAgICAgaWYgKHJlcUtleXNIaWRkZW4pIHsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWtleXNIaWRkZW4pIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFvS2V5c0hpZGRlbikgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZvciBjb21wYXRpYmlsaXR5LCB3ZSBjb3VudCBLRVlTSElEREVOX05PIGFzIGJlaW5nCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzYW1lIGFzIEtFWVNISURERU5fU09GVC4gIEhlcmUgd2UgZGlzYW1iaWd1YXRlCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZXNlIGJ5IG1ha2luZyBhbiBleGFjdCBtYXRjaCBtb3JlIHNwZWNpZmljLgotICAgICAgICAgICAgICAgICAgICBpZiAocmVxS2V5c0hpZGRlbiA9PSBrZXlzSGlkZGVuKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlcUtleXNIaWRkZW4gPT0gb0tleXNIaWRkZW4pIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnN0IGludCBuYXZIaWRkZW4gPSBpbnB1dEZsYWdzICYgTUFTS19OQVZISURERU47Ci0gICAgICAgICAgICBjb25zdCBpbnQgb05hdkhpZGRlbiA9IG8uaW5wdXRGbGFncyAmIE1BU0tfTkFWSElEREVOOwotICAgICAgICAgICAgaWYgKG5hdkhpZGRlbiAhPSBvTmF2SGlkZGVuKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50IHJlcU5hdkhpZGRlbiA9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWQtPmlucHV0RmxhZ3MgJiBNQVNLX05BVkhJRERFTjsKLSAgICAgICAgICAgICAgICBpZiAocmVxTmF2SGlkZGVuKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuYXZIaWRkZW4pIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFvTmF2SGlkZGVuKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoa2V5Ym9hcmQgIT0gby5rZXlib2FyZCkgJiYgcmVxdWVzdGVkLT5rZXlib2FyZCkgewotICAgICAgICAgICAgICAgIHJldHVybiAoa2V5Ym9hcmQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKG5hdmlnYXRpb24gIT0gby5uYXZpZ2F0aW9uKSAmJiByZXF1ZXN0ZWQtPm5hdmlnYXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG5hdmlnYXRpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNjcmVlblNpemUgfHwgby5zY3JlZW5TaXplKSB7Ci0gICAgICAgICAgICAvLyAiQmV0dGVyIiBpcyBiYXNlZCBvbiB0aGUgc3VtIG9mIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYm90aAotICAgICAgICAgICAgLy8gd2lkdGggYW5kIGhlaWdodCBmcm9tIHRoZSByZXF1ZXN0ZWQgZGltZW5zaW9ucy4gIFdlIGFyZQotICAgICAgICAgICAgLy8gYXNzdW1pbmcgdGhlIGludmFsaWQgY29uZmlncyAod2l0aCBzbWFsbGVyIHNpemVzKSBoYXZlCi0gICAgICAgICAgICAvLyBhbHJlYWR5IGJlZW4gZmlsdGVyZWQuICBOb3RlIHRoYXQgaWYgYSBwYXJ0aWN1bGFyIGRpbWVuc2lvbgotICAgICAgICAgICAgLy8gaXMgdW5zcGVjaWZpZWQsIHdlIHdpbGwgZW5kIHVwIHdpdGggYSBsYXJnZSB2YWx1ZSAodGhlCi0gICAgICAgICAgICAvLyBkaWZmZXJlbmNlIGJldHdlZW4gMCBhbmQgdGhlIHJlcXVlc3RlZCBkaW1lbnNpb24pLCB3aGljaCBpcwotICAgICAgICAgICAgLy8gZ29vZCBzaW5jZSB3ZSB3aWxsIHByZWZlciBhIGNvbmZpZyB0aGF0IGhhcyBzcGVjaWZpZWQgYQotICAgICAgICAgICAgLy8gc2l6ZSB2YWx1ZS4KLSAgICAgICAgICAgIGludCBteURlbHRhID0gMCwgb3RoZXJEZWx0YSA9IDA7Ci0gICAgICAgICAgICBpZiAocmVxdWVzdGVkLT5zY3JlZW5XaWR0aCkgewotICAgICAgICAgICAgICAgIG15RGVsdGEgKz0gcmVxdWVzdGVkLT5zY3JlZW5XaWR0aCAtIHNjcmVlbldpZHRoOwotICAgICAgICAgICAgICAgIG90aGVyRGVsdGEgKz0gcmVxdWVzdGVkLT5zY3JlZW5XaWR0aCAtIG8uc2NyZWVuV2lkdGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVxdWVzdGVkLT5zY3JlZW5IZWlnaHQpIHsKLSAgICAgICAgICAgICAgICBteURlbHRhICs9IHJlcXVlc3RlZC0+c2NyZWVuSGVpZ2h0IC0gc2NyZWVuSGVpZ2h0OwotICAgICAgICAgICAgICAgIG90aGVyRGVsdGEgKz0gcmVxdWVzdGVkLT5zY3JlZW5IZWlnaHQgLSBvLnNjcmVlbkhlaWdodDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChteURlbHRhICE9IG90aGVyRGVsdGEpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbXlEZWx0YSA8IG90aGVyRGVsdGE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmVyc2lvbiB8fCBvLnZlcnNpb24pIHsKLSAgICAgICAgICAgIGlmICgoc2RrVmVyc2lvbiAhPSBvLnNka1ZlcnNpb24pICYmIHJlcXVlc3RlZC0+c2RrVmVyc2lvbikgewotICAgICAgICAgICAgICAgIHJldHVybiAoc2RrVmVyc2lvbiA+IG8uc2RrVmVyc2lvbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgobWlub3JWZXJzaW9uICE9IG8ubWlub3JWZXJzaW9uKSAmJgotICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWQtPm1pbm9yVmVyc2lvbikgewotICAgICAgICAgICAgICAgIHJldHVybiAobWlub3JWZXJzaW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGlzTW9yZVNwZWNpZmljVGhhbihvKTsKLX0KLQotYm9vbCBSZXNUYWJsZV9jb25maWc6Om1hdGNoKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgc2V0dGluZ3MpIGNvbnN0IHsKLSAgICBpZiAoaW1zaSAhPSAwKSB7Ci0gICAgICAgIGlmIChtY2MgIT0gMCAmJiBtY2MgIT0gc2V0dGluZ3MubWNjKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1uYyAhPSAwICYmIG1uYyAhPSBzZXR0aW5ncy5tbmMpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobG9jYWxlICE9IDApIHsKLSAgICAgICAgaWYgKGxhbmd1YWdlWzBdICE9IDAKLSAgICAgICAgICAgICYmIChsYW5ndWFnZVswXSAhPSBzZXR0aW5ncy5sYW5ndWFnZVswXQotICAgICAgICAgICAgICAgIHx8IGxhbmd1YWdlWzFdICE9IHNldHRpbmdzLmxhbmd1YWdlWzFdKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjb3VudHJ5WzBdICE9IDAKLSAgICAgICAgICAgICYmIChjb3VudHJ5WzBdICE9IHNldHRpbmdzLmNvdW50cnlbMF0KLSAgICAgICAgICAgICAgICB8fCBjb3VudHJ5WzFdICE9IHNldHRpbmdzLmNvdW50cnlbMV0pKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHNjcmVlbkNvbmZpZyAhPSAwKSB7Ci0gICAgICAgIGNvbnN0IGludCBsYXlvdXREaXIgPSBzY3JlZW5MYXlvdXQmTUFTS19MQVlPVVRESVI7Ci0gICAgICAgIGNvbnN0IGludCBzZXRMYXlvdXREaXIgPSBzZXR0aW5ncy5zY3JlZW5MYXlvdXQmTUFTS19MQVlPVVRESVI7Ci0gICAgICAgIGlmIChsYXlvdXREaXIgIT0gMCAmJiBsYXlvdXREaXIgIT0gc2V0TGF5b3V0RGlyKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBpbnQgc2NyZWVuU2l6ZSA9IHNjcmVlbkxheW91dCZNQVNLX1NDUkVFTlNJWkU7Ci0gICAgICAgIGNvbnN0IGludCBzZXRTY3JlZW5TaXplID0gc2V0dGluZ3Muc2NyZWVuTGF5b3V0Jk1BU0tfU0NSRUVOU0laRTsKLSAgICAgICAgLy8gQW55IHNjcmVlbiBzaXplcyBmb3IgbGFyZ2VyIHNjcmVlbnMgdGhhbiB0aGUgc2V0dGluZyBkbyBub3QKLSAgICAgICAgLy8gbWF0Y2guCi0gICAgICAgIGlmIChzY3JlZW5TaXplICE9IDAgJiYgc2NyZWVuU2l6ZSA+IHNldFNjcmVlblNpemUpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGludCBzY3JlZW5Mb25nID0gc2NyZWVuTGF5b3V0Jk1BU0tfU0NSRUVOTE9ORzsKLSAgICAgICAgY29uc3QgaW50IHNldFNjcmVlbkxvbmcgPSBzZXR0aW5ncy5zY3JlZW5MYXlvdXQmTUFTS19TQ1JFRU5MT05HOwotICAgICAgICBpZiAoc2NyZWVuTG9uZyAhPSAwICYmIHNjcmVlbkxvbmcgIT0gc2V0U2NyZWVuTG9uZykgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgaW50IHVpTW9kZVR5cGUgPSB1aU1vZGUmTUFTS19VSV9NT0RFX1RZUEU7Ci0gICAgICAgIGNvbnN0IGludCBzZXRVaU1vZGVUeXBlID0gc2V0dGluZ3MudWlNb2RlJk1BU0tfVUlfTU9ERV9UWVBFOwotICAgICAgICBpZiAodWlNb2RlVHlwZSAhPSAwICYmIHVpTW9kZVR5cGUgIT0gc2V0VWlNb2RlVHlwZSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgaW50IHVpTW9kZU5pZ2h0ID0gdWlNb2RlJk1BU0tfVUlfTU9ERV9OSUdIVDsKLSAgICAgICAgY29uc3QgaW50IHNldFVpTW9kZU5pZ2h0ID0gc2V0dGluZ3MudWlNb2RlJk1BU0tfVUlfTU9ERV9OSUdIVDsKLSAgICAgICAgaWYgKHVpTW9kZU5pZ2h0ICE9IDAgJiYgdWlNb2RlTmlnaHQgIT0gc2V0VWlNb2RlTmlnaHQpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzbWFsbGVzdFNjcmVlbldpZHRoRHAgIT0gMAotICAgICAgICAgICAgICAgICYmIHNtYWxsZXN0U2NyZWVuV2lkdGhEcCA+IHNldHRpbmdzLnNtYWxsZXN0U2NyZWVuV2lkdGhEcCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChzY3JlZW5TaXplRHAgIT0gMCkgewotICAgICAgICBpZiAoc2NyZWVuV2lkdGhEcCAhPSAwICYmIHNjcmVlbldpZHRoRHAgPiBzZXR0aW5ncy5zY3JlZW5XaWR0aERwKSB7Ci0gICAgICAgICAgICAvL0FMT0dJKCJGaWx0ZXJpbmcgb3V0IHdpZHRoICVkIGluIHJlcXVlc3RlZCAlZCIsIHNjcmVlbldpZHRoRHAsIHNldHRpbmdzLnNjcmVlbldpZHRoRHApOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzY3JlZW5IZWlnaHREcCAhPSAwICYmIHNjcmVlbkhlaWdodERwID4gc2V0dGluZ3Muc2NyZWVuSGVpZ2h0RHApIHsKLSAgICAgICAgICAgIC8vQUxPR0koIkZpbHRlcmluZyBvdXQgaGVpZ2h0ICVkIGluIHJlcXVlc3RlZCAlZCIsIHNjcmVlbkhlaWdodERwLCBzZXR0aW5ncy5zY3JlZW5IZWlnaHREcCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHNjcmVlblR5cGUgIT0gMCkgewotICAgICAgICBpZiAob3JpZW50YXRpb24gIT0gMCAmJiBvcmllbnRhdGlvbiAhPSBzZXR0aW5ncy5vcmllbnRhdGlvbikgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIC8vIGRlbnNpdHkgYWx3YXlzIG1hdGNoZXMgLSB3ZSBjYW4gc2NhbGUgaXQuICBTZWUgaXNCZXR0ZXJUaGFuCi0gICAgICAgIGlmICh0b3VjaHNjcmVlbiAhPSAwICYmIHRvdWNoc2NyZWVuICE9IHNldHRpbmdzLnRvdWNoc2NyZWVuKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGlucHV0ICE9IDApIHsKLSAgICAgICAgY29uc3QgaW50IGtleXNIaWRkZW4gPSBpbnB1dEZsYWdzJk1BU0tfS0VZU0hJRERFTjsKLSAgICAgICAgY29uc3QgaW50IHNldEtleXNIaWRkZW4gPSBzZXR0aW5ncy5pbnB1dEZsYWdzJk1BU0tfS0VZU0hJRERFTjsKLSAgICAgICAgaWYgKGtleXNIaWRkZW4gIT0gMCAmJiBrZXlzSGlkZGVuICE9IHNldEtleXNIaWRkZW4pIHsKLSAgICAgICAgICAgIC8vIEZvciBjb21wYXRpYmlsaXR5LCB3ZSBjb3VudCBhIHJlcXVlc3QgZm9yIEtFWVNISURERU5fTk8gYXMgYWxzbwotICAgICAgICAgICAgLy8gbWF0Y2hpbmcgdGhlIG1vcmUgcmVjZW50IEtFWVNISURERU5fU09GVC4gIEJhc2ljYWxseQotICAgICAgICAgICAgLy8gS0VZU0hJRERFTl9OTyBtZWFucyB0aGVyZSBpcyBzb21lIGtpbmQgb2Yga2V5Ym9hcmQgYXZhaWxhYmxlLgotICAgICAgICAgICAgLy9BTE9HSSgiTWF0Y2hpbmcga2V5c0hpZGRlbjogaGF2ZT0lZCwgY29uZmlnPSVkXG4iLCBrZXlzSGlkZGVuLCBzZXRLZXlzSGlkZGVuKTsKLSAgICAgICAgICAgIGlmIChrZXlzSGlkZGVuICE9IEtFWVNISURERU5fTk8gfHwgc2V0S2V5c0hpZGRlbiAhPSBLRVlTSElEREVOX1NPRlQpIHsKLSAgICAgICAgICAgICAgICAvL0FMT0dJKCJObyBtYXRjaCEiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgaW50IG5hdkhpZGRlbiA9IGlucHV0RmxhZ3MmTUFTS19OQVZISURERU47Ci0gICAgICAgIGNvbnN0IGludCBzZXROYXZIaWRkZW4gPSBzZXR0aW5ncy5pbnB1dEZsYWdzJk1BU0tfTkFWSElEREVOOwotICAgICAgICBpZiAobmF2SGlkZGVuICE9IDAgJiYgbmF2SGlkZGVuICE9IHNldE5hdkhpZGRlbikgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChrZXlib2FyZCAhPSAwICYmIGtleWJvYXJkICE9IHNldHRpbmdzLmtleWJvYXJkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5hdmlnYXRpb24gIT0gMCAmJiBuYXZpZ2F0aW9uICE9IHNldHRpbmdzLm5hdmlnYXRpb24pIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc2NyZWVuU2l6ZSAhPSAwKSB7Ci0gICAgICAgIGlmIChzY3JlZW5XaWR0aCAhPSAwICYmIHNjcmVlbldpZHRoID4gc2V0dGluZ3Muc2NyZWVuV2lkdGgpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2NyZWVuSGVpZ2h0ICE9IDAgJiYgc2NyZWVuSGVpZ2h0ID4gc2V0dGluZ3Muc2NyZWVuSGVpZ2h0KSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHZlcnNpb24gIT0gMCkgewotICAgICAgICBpZiAoc2RrVmVyc2lvbiAhPSAwICYmIHNka1ZlcnNpb24gPiBzZXR0aW5ncy5zZGtWZXJzaW9uKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1pbm9yVmVyc2lvbiAhPSAwICYmIG1pbm9yVmVyc2lvbiAhPSBzZXR0aW5ncy5taW5vclZlcnNpb24pIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZXNUYWJsZV9jb25maWc6OmdldExvY2FsZShjaGFyIHN0cls2XSkgY29uc3QgewotICAgIG1lbXNldChzdHIsIDAsIDYpOwotICAgIGlmIChsYW5ndWFnZVswXSkgewotICAgICAgICBzdHJbMF0gPSBsYW5ndWFnZVswXTsKLSAgICAgICAgc3RyWzFdID0gbGFuZ3VhZ2VbMV07Ci0gICAgICAgIGlmIChjb3VudHJ5WzBdKSB7Ci0gICAgICAgICAgICBzdHJbMl0gPSAnXyc7Ci0gICAgICAgICAgICBzdHJbM10gPSBjb3VudHJ5WzBdOwotICAgICAgICAgICAgc3RyWzRdID0gY291bnRyeVsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotU3RyaW5nOCBSZXNUYWJsZV9jb25maWc6OnRvU3RyaW5nKCkgY29uc3QgewotICAgIFN0cmluZzggcmVzOwotCi0gICAgaWYgKG1jYyAhPSAwKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICByZXMuYXBwZW5kRm9ybWF0KCIlZG1jYyIsIGR0b2hzKG1jYykpOwotICAgIH0KLSAgICBpZiAobW5jICE9IDApIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoIiVkbW5jIiwgZHRvaHMobW5jKSk7Ci0gICAgfQotICAgIGlmIChsYW5ndWFnZVswXSAhPSAwKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICByZXMuYXBwZW5kKGxhbmd1YWdlLCAyKTsKLSAgICB9Ci0gICAgaWYgKGNvdW50cnlbMF0gIT0gMCkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgcmVzLmFwcGVuZChjb3VudHJ5LCAyKTsKLSAgICB9Ci0gICAgaWYgKChzY3JlZW5MYXlvdXQmTUFTS19MQVlPVVRESVIpICE9IDApIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHN3aXRjaCAoc2NyZWVuTGF5b3V0JlJlc1RhYmxlX2NvbmZpZzo6TUFTS19MQVlPVVRESVIpIHsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpMQVlPVVRESVJfTFRSOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoImxkbHRyIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6TEFZT1VURElSX1JUTDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJsZHJ0bCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kRm9ybWF0KCJsYXlvdXREaXI9JWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgZHRvaHMoc2NyZWVuTGF5b3V0JlJlc1RhYmxlX2NvbmZpZzo6TUFTS19MQVlPVVRESVIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc21hbGxlc3RTY3JlZW5XaWR0aERwICE9IDApIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoInN3JWRkcCIsIGR0b2hzKHNtYWxsZXN0U2NyZWVuV2lkdGhEcCkpOwotICAgIH0KLSAgICBpZiAoc2NyZWVuV2lkdGhEcCAhPSAwKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICByZXMuYXBwZW5kRm9ybWF0KCJ3JWRkcCIsIGR0b2hzKHNjcmVlbldpZHRoRHApKTsKLSAgICB9Ci0gICAgaWYgKHNjcmVlbkhlaWdodERwICE9IDApIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoImglZGRwIiwgZHRvaHMoc2NyZWVuSGVpZ2h0RHApKTsKLSAgICB9Ci0gICAgaWYgKChzY3JlZW5MYXlvdXQmTUFTS19TQ1JFRU5TSVpFKSAhPSBTQ1JFRU5TSVpFX0FOWSkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgc3dpdGNoIChzY3JlZW5MYXlvdXQmUmVzVGFibGVfY29uZmlnOjpNQVNLX1NDUkVFTlNJWkUpIHsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpTQ1JFRU5TSVpFX1NNQUxMOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoInNtYWxsIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6U0NSRUVOU0laRV9OT1JNQUw6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgibm9ybWFsIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6U0NSRUVOU0laRV9MQVJHRToKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJsYXJnZSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OlNDUkVFTlNJWkVfWExBUkdFOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoInhsYXJnZSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kRm9ybWF0KCJzY3JlZW5MYXlvdXRTaXplPSVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0b2hzKHNjcmVlbkxheW91dCZSZXNUYWJsZV9jb25maWc6Ok1BU0tfU0NSRUVOU0laRSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgoc2NyZWVuTGF5b3V0Jk1BU0tfU0NSRUVOTE9ORykgIT0gMCkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgc3dpdGNoIChzY3JlZW5MYXlvdXQmUmVzVGFibGVfY29uZmlnOjpNQVNLX1NDUkVFTkxPTkcpIHsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpTQ1JFRU5MT05HX05POgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoIm5vdGxvbmciKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpTQ1JFRU5MT05HX1lFUzoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJsb25nIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoInNjcmVlbkxheW91dExvbmc9JWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgZHRvaHMoc2NyZWVuTGF5b3V0JlJlc1RhYmxlX2NvbmZpZzo6TUFTS19TQ1JFRU5MT05HKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG9yaWVudGF0aW9uICE9IE9SSUVOVEFUSU9OX0FOWSkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgc3dpdGNoIChvcmllbnRhdGlvbikgewotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6Ok9SSUVOVEFUSU9OX1BPUlQ6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgicG9ydCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6Ok9SSUVOVEFUSU9OX0xBTkQ6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgibGFuZCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6Ok9SSUVOVEFUSU9OX1NRVUFSRToKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJzcXVhcmUiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZEZvcm1hdCgib3JpZW50YXRpb249JWQiLCBkdG9ocyhvcmllbnRhdGlvbikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgodWlNb2RlJk1BU0tfVUlfTU9ERV9UWVBFKSAhPSBVSV9NT0RFX1RZUEVfQU5ZKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICBzd2l0Y2ggKHVpTW9kZSZSZXNUYWJsZV9jb25maWc6Ok1BU0tfVUlfTU9ERV9UWVBFKSB7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6VUlfTU9ERV9UWVBFX0RFU0s6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgiZGVzayIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OlVJX01PREVfVFlQRV9DQVI6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgiY2FyIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6VUlfTU9ERV9UWVBFX1RFTEVWSVNJT046Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgidGVsZXZpc2lvbiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OlVJX01PREVfVFlQRV9BUFBMSUFOQ0U6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgiYXBwbGlhbmNlIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoInVpTW9kZVR5cGU9JWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgZHRvaHMoc2NyZWVuTGF5b3V0JlJlc1RhYmxlX2NvbmZpZzo6TUFTS19VSV9NT0RFX1RZUEUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoKHVpTW9kZSZNQVNLX1VJX01PREVfTklHSFQpICE9IDApIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHN3aXRjaCAodWlNb2RlJlJlc1RhYmxlX2NvbmZpZzo6TUFTS19VSV9NT0RFX05JR0hUKSB7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6VUlfTU9ERV9OSUdIVF9OTzoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJub3RuaWdodCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OlVJX01PREVfTklHSFRfWUVTOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoIm5pZ2h0Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoInVpTW9kZU5pZ2h0PSVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0b2hzKHVpTW9kZSZNQVNLX1VJX01PREVfTklHSFQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZGVuc2l0eSAhPSBERU5TSVRZX0RFRkFVTFQpIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHN3aXRjaCAoZGVuc2l0eSkgewotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfTE9XOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoImxkcGkiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpERU5TSVRZX01FRElVTToKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJtZHBpIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6REVOU0lUWV9UVjoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJ0dmRwaSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfSElHSDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJoZHBpIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6REVOU0lUWV9YSElHSDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJ4aGRwaSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfWFhISUdIOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoInh4aGRwaSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfTk9ORToKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJub2RwaSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kRm9ybWF0KCIlZGRwaSIsIGR0b2hzKGRlbnNpdHkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAodG91Y2hzY3JlZW4gIT0gVE9VQ0hTQ1JFRU5fQU5ZKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICBzd2l0Y2ggKHRvdWNoc2NyZWVuKSB7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6VE9VQ0hTQ1JFRU5fTk9UT1VDSDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJub3RvdWNoIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6VE9VQ0hTQ1JFRU5fRklOR0VSOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoImZpbmdlciIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OlRPVUNIU0NSRUVOX1NUWUxVUzoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJzdHlsdXMiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZEZvcm1hdCgidG91Y2hzY3JlZW49JWQiLCBkdG9ocyh0b3VjaHNjcmVlbikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChrZXlib2FyZCAhPSBLRVlCT0FSRF9BTlkpIHsKLSAgICAgICAgaWYgKHJlcy5zaXplKCkgPiAwKSByZXMuYXBwZW5kKCItIik7Ci0gICAgICAgIHN3aXRjaCAoa2V5Ym9hcmQpIHsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpLRVlCT0FSRF9OT0tFWVM6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgibm9rZXlzIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6S0VZQk9BUkRfUVdFUlRZOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoInF3ZXJ0eSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OktFWUJPQVJEXzEyS0VZOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoIjEya2V5Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmRGb3JtYXQoImtleWJvYXJkPSVkIiwgZHRvaHMoa2V5Ym9hcmQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoKGlucHV0RmxhZ3MmTUFTS19LRVlTSElEREVOKSAhPSAwKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICBzd2l0Y2ggKGlucHV0RmxhZ3MmTUFTS19LRVlTSElEREVOKSB7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6S0VZU0hJRERFTl9OTzoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJrZXlzZXhwb3NlZCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6OktFWVNISURERU5fWUVTOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoImtleXNoaWRkZW4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzVGFibGVfY29uZmlnOjpLRVlTSElEREVOX1NPRlQ6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgia2V5c3NvZnQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobmF2aWdhdGlvbiAhPSBOQVZJR0FUSU9OX0FOWSkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgc3dpdGNoIChuYXZpZ2F0aW9uKSB7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6TkFWSUdBVElPTl9OT05BVjoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJub25hdiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9jb25maWc6Ok5BVklHQVRJT05fRFBBRDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJkcGFkIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6TkFWSUdBVElPTl9UUkFDS0JBTEw6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgidHJhY2tiYWxsIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6TkFWSUdBVElPTl9XSEVFTDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJ3aGVlbCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kRm9ybWF0KCJuYXZpZ2F0aW9uPSVkIiwgZHRvaHMobmF2aWdhdGlvbikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgoaW5wdXRGbGFncyZNQVNLX05BVkhJRERFTikgIT0gMCkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgc3dpdGNoIChpbnB1dEZsYWdzJk1BU0tfTkFWSElEREVOKSB7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6TkFWSElEREVOX05POgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoIm5hdnNleHBvc2VkIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc1RhYmxlX2NvbmZpZzo6TkFWSElEREVOX1lFUzoKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCJuYXZoaWRkZW4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVuZEZvcm1hdCgiaW5wdXRGbGFnc05hdkhpZGRlbj0lZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkdG9ocyhpbnB1dEZsYWdzJk1BU0tfTkFWSElEREVOKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHNjcmVlblNpemUgIT0gMCkgewotICAgICAgICBpZiAocmVzLnNpemUoKSA+IDApIHJlcy5hcHBlbmQoIi0iKTsKLSAgICAgICAgcmVzLmFwcGVuZEZvcm1hdCgiJWR4JWQiLCBkdG9ocyhzY3JlZW5XaWR0aCksIGR0b2hzKHNjcmVlbkhlaWdodCkpOwotICAgIH0KLSAgICBpZiAodmVyc2lvbiAhPSAwKSB7Ci0gICAgICAgIGlmIChyZXMuc2l6ZSgpID4gMCkgcmVzLmFwcGVuZCgiLSIpOwotICAgICAgICByZXMuYXBwZW5kRm9ybWF0KCJ2JWQiLCBkdG9ocyhzZGtWZXJzaW9uKSk7Ci0gICAgICAgIGlmIChtaW5vclZlcnNpb24gIT0gMCkgewotICAgICAgICAgICAgcmVzLmFwcGVuZEZvcm1hdCgiLiVkIiwgZHRvaHMobWlub3JWZXJzaW9uKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0cnVjdCBSZXNUYWJsZTo6SGVhZGVyCi17Ci0gICAgSGVhZGVyKFJlc1RhYmxlKiBfb3duZXIpIDogb3duZXIoX293bmVyKSwgb3duZWREYXRhKE5VTEwpLCBoZWFkZXIoTlVMTCksCi0gICAgICAgIHJlc291cmNlSURNYXAoTlVMTCksIHJlc291cmNlSURNYXBTaXplKDApIHsgfQotCi0gICAgfkhlYWRlcigpCi0gICAgewotICAgICAgICBmcmVlKHJlc291cmNlSURNYXApOwotICAgIH0KLQotICAgIFJlc1RhYmxlKiBjb25zdCAgICAgICAgICAgICAgICAgb3duZXI7Ci0gICAgdm9pZCogICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lZERhdGE7Ci0gICAgY29uc3QgUmVzVGFibGVfaGVhZGVyKiAgICAgICAgICBoZWFkZXI7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOwotICAgIGNvbnN0IHVpbnQ4X3QqICAgICAgICAgICAgICAgICAgZGF0YUVuZDsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OwotICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2llOwotCi0gICAgUmVzU3RyaW5nUG9vbCAgICAgICAgICAgICAgICAgICB2YWx1ZXM7Ci0gICAgdWludDMyX3QqICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUlETWFwOwotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VJRE1hcFNpemU7Ci19OwotCi1zdHJ1Y3QgUmVzVGFibGU6OlR5cGUKLXsKLSAgICBUeXBlKGNvbnN0IEhlYWRlciogX2hlYWRlciwgY29uc3QgUGFja2FnZSogX3BhY2thZ2UsIHNpemVfdCBjb3VudCkKLSAgICAgICAgOiBoZWFkZXIoX2hlYWRlciksIHBhY2thZ2UoX3BhY2thZ2UpLCBlbnRyeUNvdW50KGNvdW50KSwKLSAgICAgICAgICB0eXBlU3BlYyhOVUxMKSwgdHlwZVNwZWNGbGFncyhOVUxMKSB7IH0KLSAgICBjb25zdCBIZWFkZXIqIGNvbnN0ICAgICAgICAgICAgIGhlYWRlcjsKLSAgICBjb25zdCBQYWNrYWdlKiBjb25zdCAgICAgICAgICAgIHBhY2thZ2U7Ci0gICAgY29uc3Qgc2l6ZV90ICAgICAgICAgICAgICAgICAgICBlbnRyeUNvdW50OwotICAgIGNvbnN0IFJlc1RhYmxlX3R5cGVTcGVjKiAgICAgICAgdHlwZVNwZWM7Ci0gICAgY29uc3QgdWludDMyX3QqICAgICAgICAgICAgICAgICB0eXBlU3BlY0ZsYWdzOwotICAgIFZlY3Rvcjxjb25zdCBSZXNUYWJsZV90eXBlKj4gICAgY29uZmlnczsKLX07Ci0KLXN0cnVjdCBSZXNUYWJsZTo6UGFja2FnZQotewotICAgIFBhY2thZ2UoUmVzVGFibGUqIF9vd25lciwgY29uc3QgSGVhZGVyKiBfaGVhZGVyLCBjb25zdCBSZXNUYWJsZV9wYWNrYWdlKiBfcGFja2FnZSkKLSAgICAgICAgOiBvd25lcihfb3duZXIpLCBoZWFkZXIoX2hlYWRlciksIHBhY2thZ2UoX3BhY2thZ2UpIHsgfQotICAgIH5QYWNrYWdlKCkKLSAgICB7Ci0gICAgICAgIHNpemVfdCBpID0gdHlwZXMuc2l6ZSgpOwotICAgICAgICB3aGlsZSAoaSA+IDApIHsKLSAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIGRlbGV0ZSB0eXBlc1tpXTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBSZXNUYWJsZSogY29uc3QgICAgICAgICAgICAgICAgIG93bmVyOwotICAgIGNvbnN0IEhlYWRlciogY29uc3QgICAgICAgICAgICAgaGVhZGVyOwotICAgIGNvbnN0IFJlc1RhYmxlX3BhY2thZ2UqIGNvbnN0ICAgcGFja2FnZTsKLSAgICBWZWN0b3I8VHlwZSo+ICAgICAgICAgICAgICAgICAgIHR5cGVzOwotCi0gICAgUmVzU3RyaW5nUG9vbCAgICAgICAgICAgICAgICAgICB0eXBlU3RyaW5nczsKLSAgICBSZXNTdHJpbmdQb29sICAgICAgICAgICAgICAgICAgIGtleVN0cmluZ3M7Ci0gICAgCi0gICAgY29uc3QgVHlwZSogZ2V0VHlwZShzaXplX3QgaWR4KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBpZHggPCB0eXBlcy5zaXplKCkgPyB0eXBlc1tpZHhdIDogTlVMTDsKLSAgICB9Ci19OwotCi0vLyBBIGdyb3VwIG9mIG9iamVjdHMgZGVzY3JpYmluZyBhIHBhcnRpY3VsYXIgcmVzb3VyY2UgcGFja2FnZS4KLS8vIFRoZSBmaXJzdCBpbiAncGFja2FnZScgaXMgYWx3YXlzIHRoZSByb290IG9iamVjdCAoZnJvbSB0aGUgcmVzb3VyY2UKLS8vIHRhYmxlIHRoYXQgZGVmaW5lZCB0aGUgcGFja2FnZSk7IHRoZSBvbmVzIGFmdGVyIGFyZSBza2lucyBvbiB0b3Agb2YgaXQuCi1zdHJ1Y3QgUmVzVGFibGU6OlBhY2thZ2VHcm91cAotewotICAgIFBhY2thZ2VHcm91cChSZXNUYWJsZSogX293bmVyLCBjb25zdCBTdHJpbmcxNiYgX25hbWUsIHVpbnQzMl90IF9pZCkKLSAgICAgICAgOiBvd25lcihfb3duZXIpLCBuYW1lKF9uYW1lKSwgaWQoX2lkKSwgdHlwZUNvdW50KDApLCBiYWdzKE5VTEwpIHsgfQotICAgIH5QYWNrYWdlR3JvdXAoKSB7Ci0gICAgICAgIGNsZWFyQmFnQ2FjaGUoKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBwYWNrYWdlcy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIFBhY2thZ2UqIHBrZyA9IHBhY2thZ2VzW2ldOwotICAgICAgICAgICAgaWYgKHBrZy0+b3duZXIgPT0gb3duZXIpIHsKLSAgICAgICAgICAgICAgICBkZWxldGUgcGtnOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckJhZ0NhY2hlKCkgewotICAgICAgICBpZiAoYmFncykgewotICAgICAgICAgICAgVEFCTEVfTk9JU1kocHJpbnRmKCJiYWdzPSVwXG4iLCBiYWdzKSk7Ci0gICAgICAgICAgICBQYWNrYWdlKiBwa2cgPSBwYWNrYWdlc1swXTsKLSAgICAgICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigidHlwZUNvdW50PSV4XG4iLCB0eXBlQ291bnQpKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTx0eXBlQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigidHlwZT0lZFxuIiwgaSkpOwotICAgICAgICAgICAgICAgIGNvbnN0IFR5cGUqIHR5cGUgPSBwa2ctPmdldFR5cGUoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBiYWdfc2V0KiogdHlwZUJhZ3MgPSBiYWdzW2ldOwotICAgICAgICAgICAgICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoInR5cGVCYWdzPSVwXG4iLCB0eXBlQmFncykpOwotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZUJhZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigidHlwZS0+ZW50cnlDb3VudD0leFxuIiwgdHlwZS0+ZW50cnlDb3VudCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSB0eXBlLT5lbnRyeUNvdW50OwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qgaj0wOyBqPE47IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlQmFnc1tqXSAmJiB0eXBlQmFnc1tqXSAhPSAoYmFnX3NldCopMHhGRkZGRkZGRikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSh0eXBlQmFnc1tqXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHR5cGVCYWdzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZyZWUoYmFncyk7Ci0gICAgICAgICAgICBiYWdzID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBSZXNUYWJsZSogY29uc3QgICAgICAgICAgICAgICAgIG93bmVyOwotICAgIFN0cmluZzE2IGNvbnN0ICAgICAgICAgICAgICAgICAgbmFtZTsKLSAgICB1aW50MzJfdCBjb25zdCAgICAgICAgICAgICAgICAgIGlkOwotICAgIFZlY3RvcjxQYWNrYWdlKj4gICAgICAgICAgICAgICAgcGFja2FnZXM7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyBmb3IgZmluZGluZyB0eXBlU3RyaW5ncyBhbmQgb3RoZXIgY29tbW9uIHBhY2thZ2Ugc3R1ZmYuCi0gICAgUGFja2FnZSogICAgICAgICAgICAgICAgICAgICAgICBiYXNlUGFja2FnZTsKLQotICAgIC8vIEZvciBxdWljayBhY2Nlc3MuCi0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlQ291bnQ7Ci0gICAgCi0gICAgLy8gQ29tcHV0ZWQgYXR0cmlidXRlIGJhZ3MsIGZpcnN0IGluZGV4ZWQgYnkgdGhlIHR5cGUgYW5kIHNlY29uZAotICAgIC8vIGJ5IHRoZSBlbnRyeSBpbiB0aGF0IHR5cGUuCi0gICAgYmFnX3NldCoqKiAgICAgICAgICAgICAgICAgICAgICBiYWdzOwotfTsKLQotc3RydWN0IFJlc1RhYmxlOjpiYWdfc2V0Ci17Ci0gICAgc2l6ZV90IG51bUF0dHJzOyAgICAvLyBudW1iZXIgaW4gYXJyYXkKLSAgICBzaXplX3QgYXZhaWxBdHRyczsgIC8vIHRvdGFsIHNwYWNlIGluIGFycmF5Ci0gICAgdWludDMyX3QgdHlwZVNwZWNGbGFnczsKLSAgICAvLyBGb2xsb3dlZCBieSAnbnVtQXR0cicgYmFnX2VudHJ5IHN0cnVjdHVyZXMuCi19OwotCi1SZXNUYWJsZTo6VGhlbWU6OlRoZW1lKGNvbnN0IFJlc1RhYmxlJiB0YWJsZSkKLSAgICA6IG1UYWJsZSh0YWJsZSkKLXsKLSAgICBtZW1zZXQobVBhY2thZ2VzLCAwLCBzaXplb2YobVBhY2thZ2VzKSk7Ci19Ci0KLVJlc1RhYmxlOjpUaGVtZTo6flRoZW1lKCkKLXsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8UmVzX01BWFBBQ0tBR0U7IGkrKykgewotICAgICAgICBwYWNrYWdlX2luZm8qIHBpID0gbVBhY2thZ2VzW2ldOwotICAgICAgICBpZiAocGkgIT0gTlVMTCkgewotICAgICAgICAgICAgZnJlZV9wYWNrYWdlKHBpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZXNUYWJsZTo6VGhlbWU6OmZyZWVfcGFja2FnZShwYWNrYWdlX2luZm8qIHBpKQotewotICAgIGZvciAoc2l6ZV90IGo9MDsgajxwaS0+bnVtVHlwZXM7IGorKykgewotICAgICAgICB0aGVtZV9lbnRyeSogdGUgPSBwaS0+dHlwZXNbal0uZW50cmllczsKLSAgICAgICAgaWYgKHRlICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGZyZWUodGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGZyZWUocGkpOwotfQotCi1SZXNUYWJsZTo6VGhlbWU6OnBhY2thZ2VfaW5mbyogUmVzVGFibGU6OlRoZW1lOjpjb3B5X3BhY2thZ2UocGFja2FnZV9pbmZvKiBwaSkKLXsKLSAgICBwYWNrYWdlX2luZm8qIG5ld3BpID0gKHBhY2thZ2VfaW5mbyopbWFsbG9jKAotICAgICAgICBzaXplb2YocGFja2FnZV9pbmZvKSArIChwaS0+bnVtVHlwZXMqc2l6ZW9mKHR5cGVfaW5mbykpKTsKLSAgICBuZXdwaS0+bnVtVHlwZXMgPSBwaS0+bnVtVHlwZXM7Ci0gICAgZm9yIChzaXplX3Qgaj0wOyBqPG5ld3BpLT5udW1UeXBlczsgaisrKSB7Ci0gICAgICAgIHNpemVfdCBjbnQgPSBwaS0+dHlwZXNbal0ubnVtRW50cmllczsKLSAgICAgICAgbmV3cGktPnR5cGVzW2pdLm51bUVudHJpZXMgPSBjbnQ7Ci0gICAgICAgIHRoZW1lX2VudHJ5KiB0ZSA9IHBpLT50eXBlc1tqXS5lbnRyaWVzOwotICAgICAgICBpZiAodGUgIT0gTlVMTCkgewotICAgICAgICAgICAgdGhlbWVfZW50cnkqIG5ld3RlID0gKHRoZW1lX2VudHJ5KiltYWxsb2MoY250KnNpemVvZih0aGVtZV9lbnRyeSkpOwotICAgICAgICAgICAgbmV3cGktPnR5cGVzW2pdLmVudHJpZXMgPSBuZXd0ZTsKLSAgICAgICAgICAgIG1lbWNweShuZXd0ZSwgdGUsIGNudCpzaXplb2YodGhlbWVfZW50cnkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5ld3BpLT50eXBlc1tqXS5lbnRyaWVzID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmV3cGk7Ci19Ci0KLXN0YXR1c190IFJlc1RhYmxlOjpUaGVtZTo6YXBwbHlTdHlsZSh1aW50MzJfdCByZXNJRCwgYm9vbCBmb3JjZSkKLXsKLSAgICBjb25zdCBiYWdfZW50cnkqIGJhZzsKLSAgICB1aW50MzJfdCBiYWdUeXBlU3BlY0ZsYWdzID0gMDsKLSAgICBtVGFibGUubG9jaygpOwotICAgIGNvbnN0IHNzaXplX3QgTiA9IG1UYWJsZS5nZXRCYWdMb2NrZWQocmVzSUQsICZiYWcsICZiYWdUeXBlU3BlY0ZsYWdzKTsKLSAgICBUQUJMRV9OT0lTWShBTE9HVigiQXBwbHlpbmcgc3R5bGUgMHglMDh4IHRvIHRoZW1lICVwLCBjb3VudD0lZCIsIHJlc0lELCB0aGlzLCBOKSk7Ci0gICAgaWYgKE4gPCAwKSB7Ci0gICAgICAgIG1UYWJsZS51bmxvY2soKTsKLSAgICAgICAgcmV0dXJuIE47Ci0gICAgfQotCi0gICAgdWludDMyX3QgY3VyUGFja2FnZSA9IDB4ZmZmZmZmZmY7Ci0gICAgc3NpemVfdCBjdXJQYWNrYWdlSW5kZXggPSAwOwotICAgIHBhY2thZ2VfaW5mbyogY3VyUEkgPSBOVUxMOwotICAgIHVpbnQzMl90IGN1clR5cGUgPSAweGZmZmZmZmZmOwotICAgIHNpemVfdCBudW1FbnRyaWVzID0gMDsKLSAgICB0aGVtZV9lbnRyeSogY3VyRW50cmllcyA9IE5VTEw7Ci0KLSAgICBjb25zdCBiYWdfZW50cnkqIGVuZCA9IGJhZyArIE47Ci0gICAgd2hpbGUgKGJhZyA8IGVuZCkgewotICAgICAgICBjb25zdCB1aW50MzJfdCBhdHRyUmVzID0gYmFnLT5tYXAubmFtZS5pZGVudDsKLSAgICAgICAgY29uc3QgdWludDMyX3QgcCA9IFJlc19HRVRQQUNLQUdFKGF0dHJSZXMpOwotICAgICAgICBjb25zdCB1aW50MzJfdCB0ID0gUmVzX0dFVFRZUEUoYXR0clJlcyk7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IGUgPSBSZXNfR0VURU5UUlkoYXR0clJlcyk7Ci0KLSAgICAgICAgaWYgKGN1clBhY2thZ2UgIT0gcCkgewotICAgICAgICAgICAgY29uc3Qgc3NpemVfdCBwaWR4ID0gbVRhYmxlLmdldFJlc291cmNlUGFja2FnZUluZGV4KGF0dHJSZXMpOwotICAgICAgICAgICAgaWYgKHBpZHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgQUxPR0UoIlN0eWxlIGNvbnRhaW5zIGtleSB3aXRoIGJhZCBwYWNrYWdlOiAweCUwOHhcbiIsIGF0dHJSZXMpOwotICAgICAgICAgICAgICAgIGJhZysrOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VyUGFja2FnZSA9IHA7Ci0gICAgICAgICAgICBjdXJQYWNrYWdlSW5kZXggPSBwaWR4OwotICAgICAgICAgICAgY3VyUEkgPSBtUGFja2FnZXNbcGlkeF07Ci0gICAgICAgICAgICBpZiAoY3VyUEkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFBhY2thZ2VHcm91cCogY29uc3QgZ3JwID0gbVRhYmxlLm1QYWNrYWdlR3JvdXBzW3BpZHhdOwotICAgICAgICAgICAgICAgIGludCBjbnQgPSBncnAtPnR5cGVDb3VudDsKLSAgICAgICAgICAgICAgICBjdXJQSSA9IChwYWNrYWdlX2luZm8qKW1hbGxvYygKLSAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHBhY2thZ2VfaW5mbykgKyAoY250KnNpemVvZih0eXBlX2luZm8pKSk7Ci0gICAgICAgICAgICAgICAgY3VyUEktPm51bVR5cGVzID0gY250OwotICAgICAgICAgICAgICAgIG1lbXNldChjdXJQSS0+dHlwZXMsIDAsIGNudCpzaXplb2YodHlwZV9pbmZvKSk7Ci0gICAgICAgICAgICAgICAgbVBhY2thZ2VzW3BpZHhdID0gY3VyUEk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJUeXBlID0gMHhmZmZmZmZmZjsKLSAgICAgICAgfQotICAgICAgICBpZiAoY3VyVHlwZSAhPSB0KSB7Ci0gICAgICAgICAgICBpZiAodCA+PSBjdXJQSS0+bnVtVHlwZXMpIHsKLSAgICAgICAgICAgICAgICBBTE9HRSgiU3R5bGUgY29udGFpbnMga2V5IHdpdGggYmFkIHR5cGU6IDB4JTA4eFxuIiwgYXR0clJlcyk7Ci0gICAgICAgICAgICAgICAgYmFnKys7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJUeXBlID0gdDsKLSAgICAgICAgICAgIGN1ckVudHJpZXMgPSBjdXJQSS0+dHlwZXNbdF0uZW50cmllczsKLSAgICAgICAgICAgIGlmIChjdXJFbnRyaWVzID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQYWNrYWdlR3JvdXAqIGNvbnN0IGdycCA9IG1UYWJsZS5tUGFja2FnZUdyb3Vwc1tjdXJQYWNrYWdlSW5kZXhdOwotICAgICAgICAgICAgICAgIGNvbnN0IFR5cGUqIHR5cGUgPSBncnAtPnBhY2thZ2VzWzBdLT5nZXRUeXBlKHQpOwotICAgICAgICAgICAgICAgIGludCBjbnQgPSB0eXBlICE9IE5VTEwgPyB0eXBlLT5lbnRyeUNvdW50IDogMDsKLSAgICAgICAgICAgICAgICBjdXJFbnRyaWVzID0gKHRoZW1lX2VudHJ5KiltYWxsb2MoY250KnNpemVvZih0aGVtZV9lbnRyeSkpOwotICAgICAgICAgICAgICAgIG1lbXNldChjdXJFbnRyaWVzLCBSZXNfdmFsdWU6OlRZUEVfTlVMTCwgY250KnNpemVvZih0aGVtZV9lbnRyeSkpOwotICAgICAgICAgICAgICAgIGN1clBJLT50eXBlc1t0XS5udW1FbnRyaWVzID0gY250OwotICAgICAgICAgICAgICAgIGN1clBJLT50eXBlc1t0XS5lbnRyaWVzID0gY3VyRW50cmllczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG51bUVudHJpZXMgPSBjdXJQSS0+dHlwZXNbdF0ubnVtRW50cmllczsKLSAgICAgICAgfQotICAgICAgICBpZiAoZSA+PSBudW1FbnRyaWVzKSB7Ci0gICAgICAgICAgICBBTE9HRSgiU3R5bGUgY29udGFpbnMga2V5IHdpdGggYmFkIGVudHJ5OiAweCUwOHhcbiIsIGF0dHJSZXMpOwotICAgICAgICAgICAgYmFnKys7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICB0aGVtZV9lbnRyeSogY3VyRW50cnkgPSBjdXJFbnRyaWVzICsgZTsKLSAgICAgICAgVEFCTEVfTk9JU1koQUxPR1YoIkF0dHIgMHglMDh4OiB0eXBlPTB4JXgsIGRhdGE9MHglMDh4OyBjdXJUeXBlPTB4JXgiLAotICAgICAgICAgICAgICAgICAgIGF0dHJSZXMsIGJhZy0+bWFwLnZhbHVlLmRhdGFUeXBlLCBiYWctPm1hcC52YWx1ZS5kYXRhLAotICAgICAgICAgICAgIGN1ckVudHJ5LT52YWx1ZS5kYXRhVHlwZSkpOwotICAgICAgICBpZiAoZm9yY2UgfHwgY3VyRW50cnktPnZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9OVUxMKSB7Ci0gICAgICAgICAgICBjdXJFbnRyeS0+c3RyaW5nQmxvY2sgPSBiYWctPnN0cmluZ0Jsb2NrOwotICAgICAgICAgICAgY3VyRW50cnktPnR5cGVTcGVjRmxhZ3MgfD0gYmFnVHlwZVNwZWNGbGFnczsKLSAgICAgICAgICAgIGN1ckVudHJ5LT52YWx1ZSA9IGJhZy0+bWFwLnZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYmFnKys7Ci0gICAgfQotCi0gICAgbVRhYmxlLnVubG9jaygpOwotCi0gICAgLy9BTE9HSSgiQXBwbHlpbmcgc3R5bGUgMHglMDh4IChmb3JjZT0lZCkgIHRoZW1lICVwLi4uXG4iLCByZXNJRCwgZm9yY2UsIHRoaXMpOwotICAgIC8vZHVtcFRvTG9nKCk7Ci0gICAgCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBSZXNUYWJsZTo6VGhlbWU6OnNldFRvKGNvbnN0IFRoZW1lJiBvdGhlcikKLXsKLSAgICAvL0FMT0dJKCJTZXR0aW5nIHRoZW1lICVwIGZyb20gdGhlbWUgJXAuLi5cbiIsIHRoaXMsICZvdGhlcik7Ci0gICAgLy9kdW1wVG9Mb2coKTsKLSAgICAvL290aGVyLmR1bXBUb0xvZygpOwotICAgIAotICAgIGlmICgmbVRhYmxlID09ICZvdGhlci5tVGFibGUpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPFJlc19NQVhQQUNLQUdFOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChtUGFja2FnZXNbaV0gIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZyZWVfcGFja2FnZShtUGFja2FnZXNbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG90aGVyLm1QYWNrYWdlc1tpXSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbVBhY2thZ2VzW2ldID0gY29weV9wYWNrYWdlKG90aGVyLm1QYWNrYWdlc1tpXSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1QYWNrYWdlc1tpXSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBAdG9kbzogbmVlZCB0byByZWFsbHkgaW1wbGVtZW50IHRoaXMsIG5vdCBqdXN0IGNvcHkKLSAgICAgICAgLy8gdGhlIHN5c3RlbSBwYWNrYWdlICh3aGljaCBpcyBzdGlsbCB3cm9uZyBiZWNhdXNlIGl0IGlzbid0Ci0gICAgICAgIC8vIGZpeGluZyB1cCByZXNvdXJjZSByZWZlcmVuY2VzKS4KLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPFJlc19NQVhQQUNLQUdFOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChtUGFja2FnZXNbaV0gIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZyZWVfcGFja2FnZShtUGFja2FnZXNbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiBvdGhlci5tUGFja2FnZXNbaV0gIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIG1QYWNrYWdlc1tpXSA9IGNvcHlfcGFja2FnZShvdGhlci5tUGFja2FnZXNbaV0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtUGFja2FnZXNbaV0gPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy9BTE9HSSgiRmluYWwgdGhlbWU6Iik7Ci0gICAgLy9kdW1wVG9Mb2coKTsKLSAgICAKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXNzaXplX3QgUmVzVGFibGU6OlRoZW1lOjpnZXRBdHRyaWJ1dGUodWludDMyX3QgcmVzSUQsIFJlc192YWx1ZSogb3V0VmFsdWUsCi0gICAgICAgIHVpbnQzMl90KiBvdXRUeXBlU3BlY0ZsYWdzKSBjb25zdAotewotICAgIGludCBjbnQgPSAyMDsKLQotICAgIGlmIChvdXRUeXBlU3BlY0ZsYWdzICE9IE5VTEwpICpvdXRUeXBlU3BlY0ZsYWdzID0gMDsKLSAgICAKLSAgICBkbyB7Ci0gICAgICAgIGNvbnN0IHNzaXplX3QgcCA9IG1UYWJsZS5nZXRSZXNvdXJjZVBhY2thZ2VJbmRleChyZXNJRCk7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IHQgPSBSZXNfR0VUVFlQRShyZXNJRCk7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IGUgPSBSZXNfR0VURU5UUlkocmVzSUQpOwotCi0gICAgICAgIFRBQkxFX1RIRU1FKEFMT0dJKCJMb29raW5nIHVwIGF0dHIgMHglMDh4IGluIHRoZW1lICVwIiwgcmVzSUQsIHRoaXMpKTsKLQotICAgICAgICBpZiAocCA+PSAwKSB7Ci0gICAgICAgICAgICBjb25zdCBwYWNrYWdlX2luZm8qIGNvbnN0IHBpID0gbVBhY2thZ2VzW3BdOwotICAgICAgICAgICAgVEFCTEVfVEhFTUUoQUxPR0koIkZvdW5kIHBhY2thZ2U6ICVwIiwgcGkpKTsKLSAgICAgICAgICAgIGlmIChwaSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgVEFCTEVfVEhFTUUoQUxPR0koIkRlc2lyZWQgdHlwZSBpbmRleCBpcyAlbGQgaW4gYXZhaWwgJWQiLCB0LCBwaS0+bnVtVHlwZXMpKTsKLSAgICAgICAgICAgICAgICBpZiAodCA8IHBpLT5udW1UeXBlcykgewotICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlX2luZm8mIHRpID0gcGktPnR5cGVzW3RdOwotICAgICAgICAgICAgICAgICAgICBUQUJMRV9USEVNRShBTE9HSSgiRGVzaXJlZCBlbnRyeSBpbmRleCBpcyAlbGQgaW4gYXZhaWwgJWQiLCBlLCB0aS5udW1FbnRyaWVzKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlIDwgdGkubnVtRW50cmllcykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhlbWVfZW50cnkmIHRlID0gdGkuZW50cmllc1tlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdXRUeXBlU3BlY0ZsYWdzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0VHlwZVNwZWNGbGFncyB8PSB0ZS50eXBlU3BlY0ZsYWdzOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfVEhFTUUoQUxPR0koIlRoZW1lIHZhbHVlOiB0eXBlPTB4JXgsIGRhdGE9MHglMDh4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGUudmFsdWUuZGF0YVR5cGUsIHRlLnZhbHVlLmRhdGEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgdHlwZSA9IHRlLnZhbHVlLmRhdGFUeXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX0FUVFJJQlVURSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudC0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNJRCA9IHRlLnZhbHVlLmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HVygiVG9vIG1hbnkgYXR0cmlidXRlIHJlZmVyZW5jZXMsIHN0b3BwZWQgYXQ6IDB4JTA4eFxuIiwgcmVzSUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCQURfSU5ERVg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgIT0gUmVzX3ZhbHVlOjpUWVBFX05VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0VmFsdWUgPSB0ZS52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGUuc3RyaW5nQmxvY2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkFEX0lOREVYOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgfSB3aGlsZSAodHJ1ZSk7Ci0KLSAgICByZXR1cm4gQkFEX0lOREVYOwotfQotCi1zc2l6ZV90IFJlc1RhYmxlOjpUaGVtZTo6cmVzb2x2ZUF0dHJpYnV0ZVJlZmVyZW5jZShSZXNfdmFsdWUqIGluT3V0VmFsdWUsCi0gICAgICAgIHNzaXplX3QgYmxvY2tJbmRleCwgdWludDMyX3QqIG91dExhc3RSZWYsCi0gICAgICAgIHVpbnQzMl90KiBpbm91dFR5cGVTcGVjRmxhZ3MsIFJlc1RhYmxlX2NvbmZpZyogaW5vdXRDb25maWcpIGNvbnN0Ci17Ci0gICAgLy9wcmludGYoIlJlc29sdmluZyB0eXBlPTB4JXhcbiIsIGluT3V0VmFsdWUtPmRhdGFUeXBlKTsKLSAgICBpZiAoaW5PdXRWYWx1ZS0+ZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX0FUVFJJQlVURSkgewotICAgICAgICB1aW50MzJfdCBuZXdUeXBlU3BlY0ZsYWdzOwotICAgICAgICBibG9ja0luZGV4ID0gZ2V0QXR0cmlidXRlKGluT3V0VmFsdWUtPmRhdGEsIGluT3V0VmFsdWUsICZuZXdUeXBlU3BlY0ZsYWdzKTsKLSAgICAgICAgVEFCTEVfVEhFTUUoQUxPR0koIlJlc29sdmluZyBhdHRyIHJlZmVyZW5jZTogYmxvY2tJbmRleD0lZCwgdHlwZT0weCV4LCBkYXRhPSVwXG4iLAotICAgICAgICAgICAgIChpbnQpYmxvY2tJbmRleCwgKGludClpbk91dFZhbHVlLT5kYXRhVHlwZSwgKHZvaWQqKWluT3V0VmFsdWUtPmRhdGEpKTsKLSAgICAgICAgaWYgKGlub3V0VHlwZVNwZWNGbGFncyAhPSBOVUxMKSAqaW5vdXRUeXBlU3BlY0ZsYWdzIHw9IG5ld1R5cGVTcGVjRmxhZ3M7Ci0gICAgICAgIC8vcHJpbnRmKCJSZXRyaWV2ZWQgYXR0cmlidXRlIG5ldyB0eXBlPTB4JXhcbiIsIGluT3V0VmFsdWUtPmRhdGFUeXBlKTsKLSAgICAgICAgaWYgKGJsb2NrSW5kZXggPCAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gYmxvY2tJbmRleDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbVRhYmxlLnJlc29sdmVSZWZlcmVuY2UoaW5PdXRWYWx1ZSwgYmxvY2tJbmRleCwgb3V0TGFzdFJlZiwKLSAgICAgICAgICAgIGlub3V0VHlwZVNwZWNGbGFncywgaW5vdXRDb25maWcpOwotfQotCi12b2lkIFJlc1RhYmxlOjpUaGVtZTo6ZHVtcFRvTG9nKCkgY29uc3QKLXsKLSAgICBBTE9HSSgiVGhlbWUgJXA6XG4iLCB0aGlzKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8UmVzX01BWFBBQ0tBR0U7IGkrKykgewotICAgICAgICBwYWNrYWdlX2luZm8qIHBpID0gbVBhY2thZ2VzW2ldOwotICAgICAgICBpZiAocGkgPT0gTlVMTCkgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBBTE9HSSgiICBQYWNrYWdlICMweCUwMng6XG4iLCAoaW50KShpKzEpKTsKLSAgICAgICAgZm9yIChzaXplX3Qgaj0wOyBqPHBpLT5udW1UeXBlczsgaisrKSB7Ci0gICAgICAgICAgICB0eXBlX2luZm8mIHRpID0gcGktPnR5cGVzW2pdOwotICAgICAgICAgICAgaWYgKHRpLm51bUVudHJpZXMgPT0gMCkgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFMT0dJKCIgICAgVHlwZSAjMHglMDJ4OlxuIiwgKGludCkoaisxKSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBrPTA7IGs8dGkubnVtRW50cmllczsgaysrKSB7Ci0gICAgICAgICAgICAgICAgdGhlbWVfZW50cnkmIHRlID0gdGkuZW50cmllc1trXTsKLSAgICAgICAgICAgICAgICBpZiAodGUudmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX05VTEwpIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIEFMT0dJKCIgICAgICAweCUwOHg6IHQ9MHgleCwgZD0weCUwOHggKGJsb2NrPSVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgIChpbnQpUmVzX01BS0VJRChpLCBqLCBrKSwKLSAgICAgICAgICAgICAgICAgICAgIHRlLnZhbHVlLmRhdGFUeXBlLCAoaW50KXRlLnZhbHVlLmRhdGEsIChpbnQpdGUuc3RyaW5nQmxvY2spOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1SZXNUYWJsZTo6UmVzVGFibGUoKQotICAgIDogbUVycm9yKE5PX0lOSVQpCi17Ci0gICAgbWVtc2V0KCZtUGFyYW1zLCAwLCBzaXplb2YobVBhcmFtcykpOwotICAgIG1lbXNldChtUGFja2FnZU1hcCwgMCwgc2l6ZW9mKG1QYWNrYWdlTWFwKSk7Ci0gICAgLy9BTE9HSSgiQ3JlYXRpbmcgUmVzVGFibGUgJXBcbiIsIHRoaXMpOwotfQotCi1SZXNUYWJsZTo6UmVzVGFibGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIHZvaWQqIGNvb2tpZSwgYm9vbCBjb3B5RGF0YSkKLSAgICA6IG1FcnJvcihOT19JTklUKQotewotICAgIG1lbXNldCgmbVBhcmFtcywgMCwgc2l6ZW9mKG1QYXJhbXMpKTsKLSAgICBtZW1zZXQobVBhY2thZ2VNYXAsIDAsIHNpemVvZihtUGFja2FnZU1hcCkpOwotICAgIGFkZChkYXRhLCBzaXplLCBjb29raWUsIGNvcHlEYXRhKTsKLSAgICBMT0dfRkFUQUxfSUYobUVycm9yICE9IE5PX0VSUk9SLCAiRXJyb3IgcGFyc2luZyByZXNvdXJjZSB0YWJsZSIpOwotICAgIC8vQUxPR0koIkNyZWF0aW5nIFJlc1RhYmxlICVwXG4iLCB0aGlzKTsKLX0KLQotUmVzVGFibGU6On5SZXNUYWJsZSgpCi17Ci0gICAgLy9BTE9HSSgiRGVzdHJveWluZyBSZXNUYWJsZSBpbiAlcFxuIiwgdGhpcyk7Ci0gICAgdW5pbml0KCk7Ci19Ci0KLWlubGluZSBzc2l6ZV90IFJlc1RhYmxlOjpnZXRSZXNvdXJjZVBhY2thZ2VJbmRleCh1aW50MzJfdCByZXNJRCkgY29uc3QKLXsKLSAgICByZXR1cm4gKChzc2l6ZV90KW1QYWNrYWdlTWFwW1Jlc19HRVRQQUNLQUdFKHJlc0lEKSsxXSktMTsKLX0KLQotc3RhdHVzX3QgUmVzVGFibGU6OmFkZChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgdm9pZCogY29va2llLCBib29sIGNvcHlEYXRhLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBpZG1hcCkKLXsKLSAgICByZXR1cm4gYWRkKGRhdGEsIHNpemUsIGNvb2tpZSwgTlVMTCwgY29weURhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQXNzZXQqPihpZG1hcCkpOwotfQotCi1zdGF0dXNfdCBSZXNUYWJsZTo6YWRkKEFzc2V0KiBhc3NldCwgdm9pZCogY29va2llLCBib29sIGNvcHlEYXRhLCBjb25zdCB2b2lkKiBpZG1hcCkKLXsKLSAgICBjb25zdCB2b2lkKiBkYXRhID0gYXNzZXQtPmdldEJ1ZmZlcih0cnVlKTsKLSAgICBpZiAoZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dXKCJVbmFibGUgdG8gZ2V0IGJ1ZmZlciBvZiByZXNvdXJjZSBhc3NldCBmaWxlIik7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICBzaXplX3Qgc2l6ZSA9IChzaXplX3QpYXNzZXQtPmdldExlbmd0aCgpOwotICAgIHJldHVybiBhZGQoZGF0YSwgc2l6ZSwgY29va2llLCBhc3NldCwgY29weURhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQXNzZXQqPihpZG1hcCkpOwotfQotCi1zdGF0dXNfdCBSZXNUYWJsZTo6YWRkKFJlc1RhYmxlKiBzcmMpCi17Ci0gICAgbUVycm9yID0gc3JjLT5tRXJyb3I7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaT0wOyBpPHNyYy0+bUhlYWRlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbUhlYWRlcnMuYWRkKHNyYy0+bUhlYWRlcnNbaV0pOwotICAgIH0KLSAgICAKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8c3JjLT5tUGFja2FnZUdyb3Vwcy5zaXplKCk7IGkrKykgewotICAgICAgICBQYWNrYWdlR3JvdXAqIHNyY1BnID0gc3JjLT5tUGFja2FnZUdyb3Vwc1tpXTsKLSAgICAgICAgUGFja2FnZUdyb3VwKiBwZyA9IG5ldyBQYWNrYWdlR3JvdXAodGhpcywgc3JjUGctPm5hbWUsIHNyY1BnLT5pZCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGo9MDsgajxzcmNQZy0+cGFja2FnZXMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgIHBnLT5wYWNrYWdlcy5hZGQoc3JjUGctPnBhY2thZ2VzW2pdKTsKLSAgICAgICAgfQotICAgICAgICBwZy0+YmFzZVBhY2thZ2UgPSBzcmNQZy0+YmFzZVBhY2thZ2U7Ci0gICAgICAgIHBnLT50eXBlQ291bnQgPSBzcmNQZy0+dHlwZUNvdW50OwotICAgICAgICBtUGFja2FnZUdyb3Vwcy5hZGQocGcpOwotICAgIH0KLSAgICAKLSAgICBtZW1jcHkobVBhY2thZ2VNYXAsIHNyYy0+bVBhY2thZ2VNYXAsIHNpemVvZihtUGFja2FnZU1hcCkpOwotICAgIAotICAgIHJldHVybiBtRXJyb3I7Ci19Ci0KLXN0YXR1c190IFJlc1RhYmxlOjphZGQoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIHZvaWQqIGNvb2tpZSwKLSAgICAgICAgICAgICAgICAgICAgICAgQXNzZXQqIGFzc2V0LCBib29sIGNvcHlEYXRhLCBjb25zdCBBc3NldCogaWRtYXApCi17Ci0gICAgaWYgKCFkYXRhKSByZXR1cm4gTk9fRVJST1I7Ci0gICAgSGVhZGVyKiBoZWFkZXIgPSBuZXcgSGVhZGVyKHRoaXMpOwotICAgIGhlYWRlci0+aW5kZXggPSBtSGVhZGVycy5zaXplKCk7Ci0gICAgaGVhZGVyLT5jb29raWUgPSBjb29raWU7Ci0gICAgaWYgKGlkbWFwICE9IE5VTEwpIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IGlkbWFwX3NpemUgPSBpZG1hcC0+Z2V0TGVuZ3RoKCk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGlkbWFwX2RhdGEgPSBjb25zdF9jYXN0PEFzc2V0Kj4oaWRtYXApLT5nZXRCdWZmZXIodHJ1ZSk7Ci0gICAgICAgIGhlYWRlci0+cmVzb3VyY2VJRE1hcCA9ICh1aW50MzJfdCopbWFsbG9jKGlkbWFwX3NpemUpOwotICAgICAgICBpZiAoaGVhZGVyLT5yZXNvdXJjZUlETWFwID09IE5VTEwpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXI7Ci0gICAgICAgICAgICByZXR1cm4gKG1FcnJvciA9IE5PX01FTU9SWSk7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KCh2b2lkKiloZWFkZXItPnJlc291cmNlSURNYXAsIGlkbWFwX2RhdGEsIGlkbWFwX3NpemUpOwotICAgICAgICBoZWFkZXItPnJlc291cmNlSURNYXBTaXplID0gaWRtYXBfc2l6ZTsKLSAgICB9Ci0gICAgbUhlYWRlcnMuYWRkKGhlYWRlcik7Ci0KLSAgICBjb25zdCBib29sIG5vdERldmljZUVuZGlhbiA9IGh0b2RzKDB4ZjApICE9IDB4ZjA7Ci0KLSAgICBMT0FEX1RBQkxFX05PSVNZKAotICAgICAgICBBTE9HVigiQWRkaW5nIHJlc291cmNlcyB0byBSZXNUYWJsZTogZGF0YT0lcCwgc2l6ZT0weCV4LCBjb29raWU9JXAsIGFzc2V0PSVwLCBjb3B5PSVkICIKLSAgICAgICAgICAgICAiaWRtYXA9JXBcbiIsIGRhdGEsIHNpemUsIGNvb2tpZSwgYXNzZXQsIGNvcHlEYXRhLCBpZG1hcCkpOwotICAgIAotICAgIGlmIChjb3B5RGF0YSB8fCBub3REZXZpY2VFbmRpYW4pIHsKLSAgICAgICAgaGVhZGVyLT5vd25lZERhdGEgPSBtYWxsb2Moc2l6ZSk7Ci0gICAgICAgIGlmIChoZWFkZXItPm93bmVkRGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1OT19NRU1PUlkpOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweShoZWFkZXItPm93bmVkRGF0YSwgZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGRhdGEgPSBoZWFkZXItPm93bmVkRGF0YTsKLSAgICB9Ci0KLSAgICBoZWFkZXItPmhlYWRlciA9IChjb25zdCBSZXNUYWJsZV9oZWFkZXIqKWRhdGE7Ci0gICAgaGVhZGVyLT5zaXplID0gZHRvaGwoaGVhZGVyLT5oZWFkZXItPmhlYWRlci5zaXplKTsKLSAgICAvL0FMT0dJKCJHb3Qgc2l6ZSAweCV4LCBhZ2FpbiBzaXplIDB4JXgsIHJhdyBzaXplIDB4JXhcbiIsIGhlYWRlci0+c2l6ZSwKLSAgICAvLyAgICAgZHRvaGwoaGVhZGVyLT5oZWFkZXItPmhlYWRlci5zaXplKSwgaGVhZGVyLT5oZWFkZXItPmhlYWRlci5zaXplKTsKLSAgICBMT0FEX1RBQkxFX05PSVNZKEFMT0dWKCJMb2FkaW5nIFJlc1RhYmxlIEAlcDpcbiIsIGhlYWRlci0+aGVhZGVyKSk7Ci0gICAgTE9BRF9UQUJMRV9OT0lTWShwcmludEhleERhdGEoMiwgaGVhZGVyLT5oZWFkZXIsIGhlYWRlci0+c2l6ZSA8IDI1NiA/IGhlYWRlci0+c2l6ZSA6IDI1NiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgMTYsIDAsIGZhbHNlLCBwcmludFRvTG9nRnVuYykpOwotICAgIGlmIChkdG9ocyhoZWFkZXItPmhlYWRlci0+aGVhZGVyLmhlYWRlclNpemUpID4gaGVhZGVyLT5zaXplCi0gICAgICAgICAgICB8fCBoZWFkZXItPnNpemUgPiBzaXplKSB7Ci0gICAgICAgIEFMT0dXKCJCYWQgcmVzb3VyY2UgdGFibGU6IGhlYWRlciBzaXplIDB4JXggb3IgdG90YWwgc2l6ZSAweCV4IGlzIGxhcmdlciB0aGFuIGRhdGEgc2l6ZSAweCV4XG4iLAotICAgICAgICAgICAgIChpbnQpZHRvaHMoaGVhZGVyLT5oZWFkZXItPmhlYWRlci5oZWFkZXJTaXplKSwKLSAgICAgICAgICAgICAoaW50KWhlYWRlci0+c2l6ZSwgKGludClzaXplKTsKLSAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgIH0KLSAgICBpZiAoKChkdG9ocyhoZWFkZXItPmhlYWRlci0+aGVhZGVyLmhlYWRlclNpemUpfGhlYWRlci0+c2l6ZSkmMHgzKSAhPSAwKSB7Ci0gICAgICAgIEFMT0dXKCJCYWQgcmVzb3VyY2UgdGFibGU6IGhlYWRlciBzaXplIDB4JXggb3IgdG90YWwgc2l6ZSAweCV4IGlzIG5vdCBvbiBhbiBpbnRlZ2VyIGJvdW5kYXJ5XG4iLAotICAgICAgICAgICAgIChpbnQpZHRvaHMoaGVhZGVyLT5oZWFkZXItPmhlYWRlci5oZWFkZXJTaXplKSwKLSAgICAgICAgICAgICAoaW50KWhlYWRlci0+c2l6ZSk7Ci0gICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICB9Ci0gICAgaGVhZGVyLT5kYXRhRW5kID0gKChjb25zdCB1aW50OF90KiloZWFkZXItPmhlYWRlcikgKyBoZWFkZXItPnNpemU7Ci0KLSAgICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIGNodW5rcy4KLSAgICBzaXplX3QgY3VyUGFja2FnZSA9IDA7Ci0KLSAgICBjb25zdCBSZXNDaHVua19oZWFkZXIqIGNodW5rID0KLSAgICAgICAgKGNvbnN0IFJlc0NodW5rX2hlYWRlciopKCgoY29uc3QgdWludDhfdCopaGVhZGVyLT5oZWFkZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGR0b2hzKGhlYWRlci0+aGVhZGVyLT5oZWFkZXIuaGVhZGVyU2l6ZSkpOwotICAgIHdoaWxlICgoKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSA8PSAoaGVhZGVyLT5kYXRhRW5kLXNpemVvZihSZXNDaHVua19oZWFkZXIpKSAmJgotICAgICAgICAgICAoKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSA8PSAoaGVhZGVyLT5kYXRhRW5kLWR0b2hsKGNodW5rLT5zaXplKSkpIHsKLSAgICAgICAgc3RhdHVzX3QgZXJyID0gdmFsaWRhdGVfY2h1bmsoY2h1bmssIHNpemVvZihSZXNDaHVua19oZWFkZXIpLCBoZWFkZXItPmRhdGFFbmQsICJSZXNUYWJsZSIpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1lcnIpOwotICAgICAgICB9Ci0gICAgICAgIFRBQkxFX05PSVNZKEFMT0dWKCJDaHVuazogdHlwZT0weCV4LCBoZWFkZXJTaXplPTB4JXgsIHNpemU9MHgleCwgcG9zPSVwXG4iLAotICAgICAgICAgICAgICAgICAgICAgZHRvaHMoY2h1bmstPnR5cGUpLCBkdG9ocyhjaHVuay0+aGVhZGVyU2l6ZSksIGR0b2hsKGNodW5rLT5zaXplKSwKLSAgICAgICAgICAgICAgICAgICAgICh2b2lkKikoKChjb25zdCB1aW50OF90KiljaHVuaykgLSAoKGNvbnN0IHVpbnQ4X3QqKWhlYWRlci0+aGVhZGVyKSkpKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IGNzaXplID0gZHRvaGwoY2h1bmstPnNpemUpOwotICAgICAgICBjb25zdCB1aW50MTZfdCBjdHlwZSA9IGR0b2hzKGNodW5rLT50eXBlKTsKLSAgICAgICAgaWYgKGN0eXBlID09IFJFU19TVFJJTkdfUE9PTF9UWVBFKSB7Ci0gICAgICAgICAgICBpZiAoaGVhZGVyLT52YWx1ZXMuZ2V0RXJyb3IoKSAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIC8vIE9ubHkgdXNlIHRoZSBmaXJzdCBzdHJpbmcgY2h1bms7IGlnbm9yZSBhbnkgb3RoZXJzIHRoYXQKLSAgICAgICAgICAgICAgICAvLyBtYXkgYXBwZWFyLgotICAgICAgICAgICAgICAgIHN0YXR1c190IGVyciA9IGhlYWRlci0+dmFsdWVzLnNldFRvKGNodW5rLCBjc2l6ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1lcnIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIk11bHRpcGxlIHN0cmluZyBjaHVua3MgZm91bmQgaW4gcmVzb3VyY2UgdGFibGUuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY3R5cGUgPT0gUkVTX1RBQkxFX1BBQ0tBR0VfVFlQRSkgewotICAgICAgICAgICAgaWYgKGN1clBhY2thZ2UgPj0gZHRvaGwoaGVhZGVyLT5oZWFkZXItPnBhY2thZ2VDb3VudCkpIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiTW9yZSBwYWNrYWdlIGNodW5rcyB3ZXJlIGZvdW5kIHRoYW4gdGhlICVkIGRlY2xhcmVkIGluIHRoZSBoZWFkZXIuIiwKLSAgICAgICAgICAgICAgICAgICAgIGR0b2hsKGhlYWRlci0+aGVhZGVyLT5wYWNrYWdlQ291bnQpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1aW50MzJfdCBpZG1hcF9pZCA9IDA7Ci0gICAgICAgICAgICBpZiAoaWRtYXAgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHVpbnQzMl90IHRtcDsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0SWRtYXBQYWNrYWdlSWQoaGVhZGVyLT5yZXNvdXJjZUlETWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXItPnJlc291cmNlSURNYXBTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wKSA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICBpZG1hcF9pZCA9IHRtcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGFyc2VQYWNrYWdlKChSZXNUYWJsZV9wYWNrYWdlKiljaHVuaywgaGVhZGVyLCBpZG1hcF9pZCkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbUVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VyUGFja2FnZSsrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQUxPR1coIlVua25vd24gY2h1bmsgdHlwZSAlcCBpbiB0YWJsZSBhdCAlcC5cbiIsCi0gICAgICAgICAgICAgICAgICh2b2lkKikoaW50KShjdHlwZSksCi0gICAgICAgICAgICAgICAgICh2b2lkKikoKChjb25zdCB1aW50OF90KiljaHVuaykgLSAoKGNvbnN0IHVpbnQ4X3QqKWhlYWRlci0+aGVhZGVyKSkpOwotICAgICAgICB9Ci0gICAgICAgIGNodW5rID0gKGNvbnN0IFJlc0NodW5rX2hlYWRlciopCi0gICAgICAgICAgICAoKChjb25zdCB1aW50OF90KiljaHVuaykgKyBjc2l6ZSk7Ci0gICAgfQotCi0gICAgaWYgKGN1clBhY2thZ2UgPCBkdG9obChoZWFkZXItPmhlYWRlci0+cGFja2FnZUNvdW50KSkgewotICAgICAgICBBTE9HVygiRmV3ZXIgcGFja2FnZSBjaHVua3MgKCVkKSB3ZXJlIGZvdW5kIHRoYW4gdGhlICVkIGRlY2xhcmVkIGluIHRoZSBoZWFkZXIuIiwKLSAgICAgICAgICAgICAoaW50KWN1clBhY2thZ2UsIGR0b2hsKGhlYWRlci0+aGVhZGVyLT5wYWNrYWdlQ291bnQpKTsKLSAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgIH0KLSAgICBtRXJyb3IgPSBoZWFkZXItPnZhbHVlcy5nZXRFcnJvcigpOwotICAgIGlmIChtRXJyb3IgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgQUxPR1coIk5vIHN0cmluZyB2YWx1ZXMgZm91bmQgaW4gcmVzb3VyY2UgdGFibGUhIik7Ci0gICAgfQotCi0gICAgVEFCTEVfTk9JU1koQUxPR1YoIlJldHVybmluZyBmcm9tIGFkZCB3aXRoIG1FcnJvcj0lZFxuIiwgbUVycm9yKSk7Ci0gICAgcmV0dXJuIG1FcnJvcjsKLX0KLQotc3RhdHVzX3QgUmVzVGFibGU6OmdldEVycm9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUVycm9yOwotfQotCi12b2lkIFJlc1RhYmxlOjp1bmluaXQoKQotewotICAgIG1FcnJvciA9IE5PX0lOSVQ7Ci0gICAgc2l6ZV90IE4gPSBtUGFja2FnZUdyb3Vwcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBQYWNrYWdlR3JvdXAqIGcgPSBtUGFja2FnZUdyb3Vwc1tpXTsKLSAgICAgICAgZGVsZXRlIGc7Ci0gICAgfQotICAgIE4gPSBtSGVhZGVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBIZWFkZXIqIGhlYWRlciA9IG1IZWFkZXJzW2ldOwotICAgICAgICBpZiAoaGVhZGVyLT5vd25lciA9PSB0aGlzKSB7Ci0gICAgICAgICAgICBpZiAoaGVhZGVyLT5vd25lZERhdGEpIHsKLSAgICAgICAgICAgICAgICBmcmVlKGhlYWRlci0+b3duZWREYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtUGFja2FnZUdyb3Vwcy5jbGVhcigpOwotICAgIG1IZWFkZXJzLmNsZWFyKCk7Ci19Ci0KLWJvb2wgUmVzVGFibGU6OmdldFJlc291cmNlTmFtZSh1aW50MzJfdCByZXNJRCwgYm9vbCBhbGxvd1V0ZjgsIHJlc291cmNlX25hbWUqIG91dE5hbWUpIGNvbnN0Ci17Ci0gICAgaWYgKG1FcnJvciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29uc3Qgc3NpemVfdCBwID0gZ2V0UmVzb3VyY2VQYWNrYWdlSW5kZXgocmVzSUQpOwotICAgIGNvbnN0IGludCB0ID0gUmVzX0dFVFRZUEUocmVzSUQpOwotICAgIGNvbnN0IGludCBlID0gUmVzX0dFVEVOVFJZKHJlc0lEKTsKLQotICAgIGlmIChwIDwgMCkgewotICAgICAgICBpZiAoUmVzX0dFVFBBQ0tBR0UocmVzSUQpKzEgPT0gMCkgewotICAgICAgICAgICAgQUxPR1coIk5vIHBhY2thZ2UgaWRlbnRpZmllciB3aGVuIGdldHRpbmcgbmFtZSBmb3IgcmVzb3VyY2UgbnVtYmVyIDB4JTA4eCIsIHJlc0lEKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFMT0dXKCJObyBrbm93biBwYWNrYWdlIHdoZW4gZ2V0dGluZyBuYW1lIGZvciByZXNvdXJjZSBudW1iZXIgMHglMDh4IiwgcmVzSUQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHQgPCAwKSB7Ci0gICAgICAgIEFMT0dXKCJObyB0eXBlIGlkZW50aWZpZXIgd2hlbiBnZXR0aW5nIG5hbWUgZm9yIHJlc291cmNlIG51bWJlciAweCUwOHgiLCByZXNJRCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjb25zdCBQYWNrYWdlR3JvdXAqIGNvbnN0IGdycCA9IG1QYWNrYWdlR3JvdXBzW3BdOwotICAgIGlmIChncnAgPT0gTlVMTCkgewotICAgICAgICBBTE9HVygiQmFkIGlkZW50aWZpZXIgd2hlbiBnZXR0aW5nIG5hbWUgZm9yIHJlc291cmNlIG51bWJlciAweCUwOHgiLCByZXNJRCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGdycC0+cGFja2FnZXMuc2l6ZSgpID4gMCkgewotICAgICAgICBjb25zdCBQYWNrYWdlKiBjb25zdCBwYWNrYWdlID0gZ3JwLT5wYWNrYWdlc1swXTsKLQotICAgICAgICBjb25zdCBSZXNUYWJsZV90eXBlKiB0eXBlOwotICAgICAgICBjb25zdCBSZXNUYWJsZV9lbnRyeSogZW50cnk7Ci0gICAgICAgIHNzaXplX3Qgb2Zmc2V0ID0gZ2V0RW50cnkocGFja2FnZSwgdCwgZSwgTlVMTCwgJnR5cGUsICZlbnRyeSwgTlVMTCk7Ci0gICAgICAgIGlmIChvZmZzZXQgPD0gMCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0TmFtZS0+cGFja2FnZSA9IGdycC0+bmFtZS5zdHJpbmcoKTsKLSAgICAgICAgb3V0TmFtZS0+cGFja2FnZUxlbiA9IGdycC0+bmFtZS5zaXplKCk7Ci0gICAgICAgIGlmIChhbGxvd1V0ZjgpIHsKLSAgICAgICAgICAgIG91dE5hbWUtPnR5cGU4ID0gZ3JwLT5iYXNlUGFja2FnZS0+dHlwZVN0cmluZ3Muc3RyaW5nOEF0KHQsICZvdXROYW1lLT50eXBlTGVuKTsKLSAgICAgICAgICAgIG91dE5hbWUtPm5hbWU4ID0gZ3JwLT5iYXNlUGFja2FnZS0+a2V5U3RyaW5ncy5zdHJpbmc4QXQoCi0gICAgICAgICAgICAgICAgZHRvaGwoZW50cnktPmtleS5pbmRleCksICZvdXROYW1lLT5uYW1lTGVuKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG91dE5hbWUtPnR5cGU4ID0gTlVMTDsKLSAgICAgICAgICAgIG91dE5hbWUtPm5hbWU4ID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAob3V0TmFtZS0+dHlwZTggPT0gTlVMTCkgewotICAgICAgICAgICAgb3V0TmFtZS0+dHlwZSA9IGdycC0+YmFzZVBhY2thZ2UtPnR5cGVTdHJpbmdzLnN0cmluZ0F0KHQsICZvdXROYW1lLT50eXBlTGVuKTsKLSAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBiYWQgaW5kZXggZm9yIHNvbWUgcmVhc29uLCB3ZSBzaG91bGQgYWJvcnQuCi0gICAgICAgICAgICBpZiAob3V0TmFtZS0+dHlwZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChvdXROYW1lLT5uYW1lOCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBvdXROYW1lLT5uYW1lID0gZ3JwLT5iYXNlUGFja2FnZS0+a2V5U3RyaW5ncy5zdHJpbmdBdCgKLSAgICAgICAgICAgICAgICBkdG9obChlbnRyeS0+a2V5LmluZGV4KSwgJm91dE5hbWUtPm5hbWVMZW4pOwotICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIGJhZCBpbmRleCBmb3Igc29tZSByZWFzb24sIHdlIHNob3VsZCBhYm9ydC4KLSAgICAgICAgICAgIGlmIChvdXROYW1lLT5uYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXNzaXplX3QgUmVzVGFibGU6OmdldFJlc291cmNlKHVpbnQzMl90IHJlc0lELCBSZXNfdmFsdWUqIG91dFZhbHVlLCBib29sIG1heUJlQmFnLCB1aW50MTZfdCBkZW5zaXR5LAotICAgICAgICB1aW50MzJfdCogb3V0U3BlY0ZsYWdzLCBSZXNUYWJsZV9jb25maWcqIG91dENvbmZpZykgY29uc3QKLXsKLSAgICBpZiAobUVycm9yICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBtRXJyb3I7Ci0gICAgfQotCi0gICAgY29uc3Qgc3NpemVfdCBwID0gZ2V0UmVzb3VyY2VQYWNrYWdlSW5kZXgocmVzSUQpOwotICAgIGNvbnN0IGludCB0ID0gUmVzX0dFVFRZUEUocmVzSUQpOwotICAgIGNvbnN0IGludCBlID0gUmVzX0dFVEVOVFJZKHJlc0lEKTsKLQotICAgIGlmIChwIDwgMCkgewotICAgICAgICBpZiAoUmVzX0dFVFBBQ0tBR0UocmVzSUQpKzEgPT0gMCkgewotICAgICAgICAgICAgQUxPR1coIk5vIHBhY2thZ2UgaWRlbnRpZmllciB3aGVuIGdldHRpbmcgdmFsdWUgZm9yIHJlc291cmNlIG51bWJlciAweCUwOHgiLCByZXNJRCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HVygiTm8ga25vd24gcGFja2FnZSB3aGVuIGdldHRpbmcgdmFsdWUgZm9yIHJlc291cmNlIG51bWJlciAweCUwOHgiLCByZXNJRCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEJBRF9JTkRFWDsKLSAgICB9Ci0gICAgaWYgKHQgPCAwKSB7Ci0gICAgICAgIEFMT0dXKCJObyB0eXBlIGlkZW50aWZpZXIgd2hlbiBnZXR0aW5nIHZhbHVlIGZvciByZXNvdXJjZSBudW1iZXIgMHglMDh4IiwgcmVzSUQpOwotICAgICAgICByZXR1cm4gQkFEX0lOREVYOwotICAgIH0KLQotICAgIGNvbnN0IFJlc192YWx1ZSogYmVzdFZhbHVlID0gTlVMTDsKLSAgICBjb25zdCBQYWNrYWdlKiBiZXN0UGFja2FnZSA9IE5VTEw7Ci0gICAgUmVzVGFibGVfY29uZmlnIGJlc3RJdGVtOwotICAgIG1lbXNldCgmYmVzdEl0ZW0sIDAsIHNpemVvZihiZXN0SXRlbSkpOyAvLyBtYWtlIHRoZSBjb21waWxlciBzaHV0IHVwCi0KLSAgICBpZiAob3V0U3BlY0ZsYWdzICE9IE5VTEwpICpvdXRTcGVjRmxhZ3MgPSAwOwotCi0gICAgLy8gTG9vayB0aHJvdWdoIGFsbCByZXNvdXJjZSBwYWNrYWdlcywgc3RhcnRpbmcgd2l0aCB0aGUgbW9zdAotICAgIC8vIHJlY2VudGx5IGFkZGVkLgotICAgIGNvbnN0IFBhY2thZ2VHcm91cCogY29uc3QgZ3JwID0gbVBhY2thZ2VHcm91cHNbcF07Ci0gICAgaWYgKGdycCA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dXKCJCYWQgaWRlbnRpZmllciB3aGVuIGdldHRpbmcgdmFsdWUgZm9yIHJlc291cmNlIG51bWJlciAweCUwOHgiLCByZXNJRCk7Ci0gICAgICAgIHJldHVybiBCQURfSU5ERVg7Ci0gICAgfQotCi0gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBkZW5zaXR5Ci0gICAgY29uc3QgUmVzVGFibGVfY29uZmlnKiBkZXNpcmVkQ29uZmlnID0gJm1QYXJhbXM7Ci0gICAgUmVzVGFibGVfY29uZmlnKiBvdmVycmlkZUNvbmZpZyA9IE5VTEw7Ci0gICAgaWYgKGRlbnNpdHkgPiAwKSB7Ci0gICAgICAgIG92ZXJyaWRlQ29uZmlnID0gKFJlc1RhYmxlX2NvbmZpZyopIG1hbGxvYyhzaXplb2YoUmVzVGFibGVfY29uZmlnKSk7Ci0gICAgICAgIGlmIChvdmVycmlkZUNvbmZpZyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBBTE9HRSgiQ291bGRuJ3QgbWFsbG9jIFJlc1RhYmxlX2NvbmZpZyBmb3Igb3ZlcnJpZGVzOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICByZXR1cm4gQkFEX0lOREVYOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweShvdmVycmlkZUNvbmZpZywgJm1QYXJhbXMsIHNpemVvZihSZXNUYWJsZV9jb25maWcpKTsKLSAgICAgICAgb3ZlcnJpZGVDb25maWctPmRlbnNpdHkgPSBkZW5zaXR5OwotICAgICAgICBkZXNpcmVkQ29uZmlnID0gb3ZlcnJpZGVDb25maWc7Ci0gICAgfQotCi0gICAgc3NpemVfdCByYyA9IEJBRF9WQUxVRTsKLSAgICBzaXplX3QgaXAgPSBncnAtPnBhY2thZ2VzLnNpemUoKTsKLSAgICB3aGlsZSAoaXAgPiAwKSB7Ci0gICAgICAgIGlwLS07Ci0gICAgICAgIGludCBUID0gdDsKLSAgICAgICAgaW50IEUgPSBlOwotCi0gICAgICAgIGNvbnN0IFBhY2thZ2UqIGNvbnN0IHBhY2thZ2UgPSBncnAtPnBhY2thZ2VzW2lwXTsKLSAgICAgICAgaWYgKHBhY2thZ2UtPmhlYWRlci0+cmVzb3VyY2VJRE1hcCkgewotICAgICAgICAgICAgdWludDMyX3Qgb3ZlcmxheVJlc0lEID0gMHgwOwotICAgICAgICAgICAgc3RhdHVzX3QgcmV0dmFsID0gaWRtYXBMb29rdXAocGFja2FnZS0+aGVhZGVyLT5yZXNvdXJjZUlETWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS0+aGVhZGVyLT5yZXNvdXJjZUlETWFwU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0lELCAmb3ZlcmxheVJlc0lEKTsKLSAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gTk9fRVJST1IgJiYgb3ZlcmxheVJlc0lEICE9IDB4MCkgewotICAgICAgICAgICAgICAgIC8vIGZvciB0aGlzIGxvb3AgaXRlcmF0aW9uLCB0aGlzIGlzIHRoZSB0eXBlIGFuZCBlbnRyeSB3ZSByZWFsbHkgd2FudAotICAgICAgICAgICAgICAgIEFMT0dWKCJyZXNvdXJjZSBtYXAgMHglMDh4IC0+IDB4JTA4eFxuIiwgcmVzSUQsIG92ZXJsYXlSZXNJRCk7Ci0gICAgICAgICAgICAgICAgVCA9IFJlc19HRVRUWVBFKG92ZXJsYXlSZXNJRCk7Ci0gICAgICAgICAgICAgICAgRSA9IFJlc19HRVRFTlRSWShvdmVybGF5UmVzSUQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyByZXNvdXJjZSBub3QgcHJlc2VudCBpbiBvdmVybGF5IHBhY2thZ2UsIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgcGFja2FnZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgUmVzVGFibGVfdHlwZSogdHlwZTsKLSAgICAgICAgY29uc3QgUmVzVGFibGVfZW50cnkqIGVudHJ5OwotICAgICAgICBjb25zdCBUeXBlKiB0eXBlQ2xhc3M7Ci0gICAgICAgIHNzaXplX3Qgb2Zmc2V0ID0gZ2V0RW50cnkocGFja2FnZSwgVCwgRSwgZGVzaXJlZENvbmZpZywgJnR5cGUsICZlbnRyeSwgJnR5cGVDbGFzcyk7Ci0gICAgICAgIGlmIChvZmZzZXQgPD0gMCkgewotICAgICAgICAgICAgLy8gTm8ge2VudHJ5LCBhcHByb3ByaWF0ZSBjb25maWd9IHBhaXIgZm91bmQgaW4gcGFja2FnZS4gSWYgdGhpcwotICAgICAgICAgICAgLy8gcGFja2FnZSBpcyBhbiBvdmVybGF5IHBhY2thZ2UgKGlwICE9IDApLCB0aGlzIHNpbXBseSBtZWFucyB0aGUKLSAgICAgICAgICAgIC8vIG92ZXJsYXkgcGFja2FnZSBkaWQgbm90IHNwZWNpZnkgYSBkZWZhdWx0LgotICAgICAgICAgICAgLy8gTm9uLW92ZXJsYXkgcGFja2FnZXMgYXJlIHN0aWxsIHJlcXVpcmVkIHRvIHByb3ZpZGUgYSBkZWZhdWx0LgotICAgICAgICAgICAgaWYgKG9mZnNldCA8IDAgJiYgaXAgPT0gMCkgewotICAgICAgICAgICAgICAgIEFMT0dXKCJGYWlsdXJlIGdldHRpbmcgZW50cnkgZm9yIDB4JTA4eCAodD0lZCBlPSVkKSBpbiBwYWNrYWdlICV6ZCAoZXJyb3IgJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzSUQsIFQsIEUsIGlwLCAoaW50KW9mZnNldCk7Ci0gICAgICAgICAgICAgICAgcmMgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoZHRvaHMoZW50cnktPmZsYWdzKSZlbnRyeS0+RkxBR19DT01QTEVYKSAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAoIW1heUJlQmFnKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIlJlcXVlc3RpbmcgcmVzb3VyY2UgJXAgZmFpbGVkIGJlY2F1c2UgaXQgaXMgY29tcGxleFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICh2b2lkKilyZXNJRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFRBQkxFX05PSVNZKGFvdXQgPDwgIlJlc291cmNlIHR5cGUgZGF0YTogIgotICAgICAgICAgICAgICA8PCBIZXhEdW1wKHR5cGUsIGR0b2hsKHR5cGUtPmhlYWRlci5zaXplKSkgPDwgZW5kbCk7Ci0KLSAgICAgICAgaWYgKChzaXplX3Qpb2Zmc2V0ID4gKGR0b2hsKHR5cGUtPmhlYWRlci5zaXplKS1zaXplb2YoUmVzX3ZhbHVlKSkpIHsKLSAgICAgICAgICAgIEFMT0dXKCJSZXNUYWJsZV9pdGVtIGF0ICVkIGlzIGJleW9uZCB0eXBlIGNodW5rIGRhdGEgJWQiLAotICAgICAgICAgICAgICAgICAoaW50KW9mZnNldCwgZHRvaGwodHlwZS0+aGVhZGVyLnNpemUpKTsKLSAgICAgICAgICAgIHJjID0gQkFEX1RZUEU7Ci0gICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFJlc192YWx1ZSogaXRlbSA9Ci0gICAgICAgICAgICAoY29uc3QgUmVzX3ZhbHVlKikoKChjb25zdCB1aW50OF90Kil0eXBlKSArIG9mZnNldCk7Ci0gICAgICAgIFJlc1RhYmxlX2NvbmZpZyB0aGlzQ29uZmlnOwotICAgICAgICB0aGlzQ29uZmlnLmNvcHlGcm9tRHRvSCh0eXBlLT5jb25maWcpOwotCi0gICAgICAgIGlmIChvdXRTcGVjRmxhZ3MgIT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKHR5cGVDbGFzcy0+dHlwZVNwZWNGbGFncyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgKm91dFNwZWNGbGFncyB8PSBkdG9obCh0eXBlQ2xhc3MtPnR5cGVTcGVjRmxhZ3NbRV0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAqb3V0U3BlY0ZsYWdzID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYmVzdFBhY2thZ2UgIT0gTlVMTCAmJgotICAgICAgICAgICAgKGJlc3RJdGVtLmlzTW9yZVNwZWNpZmljVGhhbih0aGlzQ29uZmlnKSB8fCBiZXN0SXRlbS5kaWZmKHRoaXNDb25maWcpID09IDApKSB7Ci0gICAgICAgICAgICAvLyBEaXNjYXJkIHRoaXNDb25maWcgbm90IG9ubHkgaWYgYmVzdEl0ZW0gaXMgbW9yZSBzcGVjaWZpYywgYnV0IGFsc28gaWYgdGhlIHR3byBjb25maWdzCi0gICAgICAgICAgICAvLyBhcmUgaWRlbnRpY2FsIChkaWZmID09IDApLCBvciBvdmVybGF5IHBhY2thZ2VzIHdpbGwgbm90IHRha2UgZWZmZWN0LgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJlc3RJdGVtID0gdGhpc0NvbmZpZzsKLSAgICAgICAgYmVzdFZhbHVlID0gaXRlbTsKLSAgICAgICAgYmVzdFBhY2thZ2UgPSBwYWNrYWdlOwotICAgIH0KLQotICAgIFRBQkxFX05PSVNZKHByaW50ZigiRm91bmQgcmVzdWx0OiBwYWNrYWdlICVwXG4iLCBiZXN0UGFja2FnZSkpOwotCi0gICAgaWYgKGJlc3RWYWx1ZSkgewotICAgICAgICBvdXRWYWx1ZS0+c2l6ZSA9IGR0b2hzKGJlc3RWYWx1ZS0+c2l6ZSk7Ci0gICAgICAgIG91dFZhbHVlLT5yZXMwID0gYmVzdFZhbHVlLT5yZXMwOwotICAgICAgICBvdXRWYWx1ZS0+ZGF0YVR5cGUgPSBiZXN0VmFsdWUtPmRhdGFUeXBlOwotICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IGR0b2hsKGJlc3RWYWx1ZS0+ZGF0YSk7Ci0gICAgICAgIGlmIChvdXRDb25maWcgIT0gTlVMTCkgewotICAgICAgICAgICAgKm91dENvbmZpZyA9IGJlc3RJdGVtOwotICAgICAgICB9Ci0gICAgICAgIFRBQkxFX05PSVNZKHNpemVfdCBsZW47Ci0gICAgICAgICAgICAgIHByaW50ZigiRm91bmQgdmFsdWU6IHBrZz0lZCwgdHlwZT0lZCwgc3RyPSVzLCBpbnQ9JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICBiZXN0UGFja2FnZS0+aGVhZGVyLT5pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSA9PSBiZXN0VmFsdWUtPlRZUEVfU1RSSU5HCi0gICAgICAgICAgICAgICAgICAgICA/IFN0cmluZzgoYmVzdFBhY2thZ2UtPmhlYWRlci0+dmFsdWVzLnN0cmluZ0F0KAotICAgICAgICAgICAgICAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhLCAmbGVuKSkuc3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSkpOwotICAgICAgICByYyA9IGJlc3RQYWNrYWdlLT5oZWFkZXItPmluZGV4OwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLW91dDoKLSAgICBpZiAob3ZlcnJpZGVDb25maWcgIT0gTlVMTCkgewotICAgICAgICBmcmVlKG92ZXJyaWRlQ29uZmlnKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLXNzaXplX3QgUmVzVGFibGU6OnJlc29sdmVSZWZlcmVuY2UoUmVzX3ZhbHVlKiB2YWx1ZSwgc3NpemVfdCBibG9ja0luZGV4LAotICAgICAgICB1aW50MzJfdCogb3V0TGFzdFJlZiwgdWludDMyX3QqIGlub3V0VHlwZVNwZWNGbGFncywKLSAgICAgICAgUmVzVGFibGVfY29uZmlnKiBvdXRDb25maWcpIGNvbnN0Ci17Ci0gICAgaW50IGNvdW50PTA7Ci0gICAgd2hpbGUgKGJsb2NrSW5kZXggPj0gMCAmJiB2YWx1ZS0+ZGF0YVR5cGUgPT0gdmFsdWUtPlRZUEVfUkVGRVJFTkNFCi0gICAgICAgICAgICYmIHZhbHVlLT5kYXRhICE9IDAgJiYgY291bnQgPCAyMCkgewotICAgICAgICBpZiAob3V0TGFzdFJlZikgKm91dExhc3RSZWYgPSB2YWx1ZS0+ZGF0YTsKLSAgICAgICAgdWludDMyX3QgbGFzdFJlZiA9IHZhbHVlLT5kYXRhOwotICAgICAgICB1aW50MzJfdCBuZXdGbGFncyA9IDA7Ci0gICAgICAgIGNvbnN0IHNzaXplX3QgbmV3SW5kZXggPSBnZXRSZXNvdXJjZSh2YWx1ZS0+ZGF0YSwgdmFsdWUsIHRydWUsIDAsICZuZXdGbGFncywKLSAgICAgICAgICAgICAgICBvdXRDb25maWcpOwotICAgICAgICBpZiAobmV3SW5kZXggPT0gQkFEX0lOREVYKSB7Ci0gICAgICAgICAgICByZXR1cm4gQkFEX0lOREVYOwotICAgICAgICB9Ci0gICAgICAgIFRBQkxFX1RIRU1FKEFMT0dJKCJSZXNvbHZpbmcgcmVmZXJlbmNlICVwOiBuZXdJbmRleD0lZCwgdHlwZT0weCV4LCBkYXRhPSVwXG4iLAotICAgICAgICAgICAgICh2b2lkKilsYXN0UmVmLCAoaW50KW5ld0luZGV4LCAoaW50KXZhbHVlLT5kYXRhVHlwZSwgKHZvaWQqKXZhbHVlLT5kYXRhKSk7Ci0gICAgICAgIC8vcHJpbnRmKCJHZXR0aW5nIHJlZmVyZW5jZSAweCUwOHg6IG5ld0luZGV4PSVkXG4iLCB2YWx1ZS0+ZGF0YSwgbmV3SW5kZXgpOwotICAgICAgICBpZiAoaW5vdXRUeXBlU3BlY0ZsYWdzICE9IE5VTEwpICppbm91dFR5cGVTcGVjRmxhZ3MgfD0gbmV3RmxhZ3M7Ci0gICAgICAgIGlmIChuZXdJbmRleCA8IDApIHsKLSAgICAgICAgICAgIC8vIFRoaXMgY2FuIGZhaWwgaWYgdGhlIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQgaXMgYSBzdHlsZS4uLgotICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlLCBqdXN0IHJldHVybiB0aGUgcmVmZXJlbmNlLCBhbmQgZXhwZWN0IHRoZQotICAgICAgICAgICAgLy8gY2FsbGVyIHRvIGRlYWwgd2l0aC4KLSAgICAgICAgICAgIHJldHVybiBibG9ja0luZGV4OwotICAgICAgICB9Ci0gICAgICAgIGJsb2NrSW5kZXggPSBuZXdJbmRleDsKLSAgICAgICAgY291bnQrKzsKLSAgICB9Ci0gICAgcmV0dXJuIGJsb2NrSW5kZXg7Ci19Ci0KLWNvbnN0IGNoYXIxNl90KiBSZXNUYWJsZTo6dmFsdWVUb1N0cmluZygKLSAgICBjb25zdCBSZXNfdmFsdWUqIHZhbHVlLCBzaXplX3Qgc3RyaW5nQmxvY2ssCi0gICAgY2hhcjE2X3QgdG1wQnVmZmVyW1RNUF9CVUZGRVJfU0laRV0sIHNpemVfdCogb3V0TGVuKQotewotICAgIGlmICghdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmICh2YWx1ZS0+ZGF0YVR5cGUgPT0gdmFsdWUtPlRZUEVfU1RSSU5HKSB7Ci0gICAgICAgIHJldHVybiBnZXRUYWJsZVN0cmluZ0Jsb2NrKHN0cmluZ0Jsb2NrKS0+c3RyaW5nQXQodmFsdWUtPmRhdGEsIG91dExlbik7Ci0gICAgfQotICAgIC8vIFhYWCBkbyBpbnQgdG8gc3RyaW5nIGNvbnZlcnNpb25zLgotICAgIHJldHVybiBOVUxMOwotfQotCi1zc2l6ZV90IFJlc1RhYmxlOjpsb2NrQmFnKHVpbnQzMl90IHJlc0lELCBjb25zdCBiYWdfZW50cnkqKiBvdXRCYWcpIGNvbnN0Ci17Ci0gICAgbUxvY2subG9jaygpOwotICAgIHNzaXplX3QgZXJyID0gZ2V0QmFnTG9ja2VkKHJlc0lELCBvdXRCYWcpOwotICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAvL3ByaW50ZigiKioqIGdldCBmYWlsZWQhICB1bmxvY2tpbmdcbiIpOwotICAgICAgICBtTG9jay51bmxvY2soKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotdm9pZCBSZXNUYWJsZTo6dW5sb2NrQmFnKGNvbnN0IGJhZ19lbnRyeSogYmFnKSBjb25zdAotewotICAgIC8vcHJpbnRmKCI8PDwgdW5sb2NrQmFnICVwXG4iLCB0aGlzKTsKLSAgICBtTG9jay51bmxvY2soKTsKLX0KLQotdm9pZCBSZXNUYWJsZTo6bG9jaygpIGNvbnN0Ci17Ci0gICAgbUxvY2subG9jaygpOwotfQotCi12b2lkIFJlc1RhYmxlOjp1bmxvY2soKSBjb25zdAotewotICAgIG1Mb2NrLnVubG9jaygpOwotfQotCi1zc2l6ZV90IFJlc1RhYmxlOjpnZXRCYWdMb2NrZWQodWludDMyX3QgcmVzSUQsIGNvbnN0IGJhZ19lbnRyeSoqIG91dEJhZywKLSAgICAgICAgdWludDMyX3QqIG91dFR5cGVTcGVjRmxhZ3MpIGNvbnN0Ci17Ci0gICAgaWYgKG1FcnJvciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gbUVycm9yOwotICAgIH0KLQotICAgIGNvbnN0IHNzaXplX3QgcCA9IGdldFJlc291cmNlUGFja2FnZUluZGV4KHJlc0lEKTsKLSAgICBjb25zdCBpbnQgdCA9IFJlc19HRVRUWVBFKHJlc0lEKTsKLSAgICBjb25zdCBpbnQgZSA9IFJlc19HRVRFTlRSWShyZXNJRCk7Ci0KLSAgICBpZiAocCA8IDApIHsKLSAgICAgICAgQUxPR1coIkludmFsaWQgcGFja2FnZSBpZGVudGlmaWVyIHdoZW4gZ2V0dGluZyBiYWcgZm9yIHJlc291cmNlIG51bWJlciAweCUwOHgiLCByZXNJRCk7Ci0gICAgICAgIHJldHVybiBCQURfSU5ERVg7Ci0gICAgfQotICAgIGlmICh0IDwgMCkgewotICAgICAgICBBTE9HVygiTm8gdHlwZSBpZGVudGlmaWVyIHdoZW4gZ2V0dGluZyBiYWcgZm9yIHJlc291cmNlIG51bWJlciAweCUwOHgiLCByZXNJRCk7Ci0gICAgICAgIHJldHVybiBCQURfSU5ERVg7Ci0gICAgfQotCi0gICAgLy9wcmludGYoIkdldCBiYWc6IGlkPTB4JTA4eCwgcD0lZCwgdD0lZFxuIiwgcmVzSUQsIHAsIHQpOwotICAgIFBhY2thZ2VHcm91cCogY29uc3QgZ3JwID0gbVBhY2thZ2VHcm91cHNbcF07Ci0gICAgaWYgKGdycCA9PSBOVUxMKSB7Ci0gICAgICAgIEFMT0dXKCJCYWQgaWRlbnRpZmllciB3aGVuIGdldHRpbmcgYmFnIGZvciByZXNvdXJjZSBudW1iZXIgMHglMDh4IiwgcmVzSUQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHQgPj0gKGludClncnAtPnR5cGVDb3VudCkgewotICAgICAgICBBTE9HVygiVHlwZSBpZGVudGlmaWVyIDB4JXggaXMgbGFyZ2VyIHRoYW4gdHlwZSBjb3VudCAweCV4IiwKLSAgICAgICAgICAgICB0KzEsIChpbnQpZ3JwLT50eXBlQ291bnQpOwotICAgICAgICByZXR1cm4gQkFEX0lOREVYOwotICAgIH0KLQotICAgIGNvbnN0IFBhY2thZ2UqIGNvbnN0IGJhc2VQYWNrYWdlID0gZ3JwLT5wYWNrYWdlc1swXTsKLQotICAgIGNvbnN0IFR5cGUqIGNvbnN0IHR5cGVDb25maWdzID0gYmFzZVBhY2thZ2UtPmdldFR5cGUodCk7Ci0KLSAgICBjb25zdCBzaXplX3QgTkVOVFJZID0gdHlwZUNvbmZpZ3MtPmVudHJ5Q291bnQ7Ci0gICAgaWYgKGUgPj0gKGludClORU5UUlkpIHsKLSAgICAgICAgQUxPR1coIkVudHJ5IGlkZW50aWZpZXIgMHgleCBpcyBsYXJnZXIgdGhhbiBlbnRyeSBjb3VudCAweCV4IiwKLSAgICAgICAgICAgICBlLCAoaW50KXR5cGVDb25maWdzLT5lbnRyeUNvdW50KTsKLSAgICAgICAgcmV0dXJuIEJBRF9JTkRFWDsKLSAgICB9Ci0KLSAgICAvLyBGaXJzdCBzZWUgaWYgd2UndmUgYWxyZWFkeSBjb21wdXRlZCB0aGlzIGJhZy4uLgotICAgIGlmIChncnAtPmJhZ3MpIHsKLSAgICAgICAgYmFnX3NldCoqIHR5cGVTZXQgPSBncnAtPmJhZ3NbdF07Ci0gICAgICAgIGlmICh0eXBlU2V0KSB7Ci0gICAgICAgICAgICBiYWdfc2V0KiBzZXQgPSB0eXBlU2V0W2VdOwotICAgICAgICAgICAgaWYgKHNldCkgewotICAgICAgICAgICAgICAgIGlmIChzZXQgIT0gKGJhZ19zZXQqKTB4RkZGRkZGRkYpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG91dFR5cGVTcGVjRmxhZ3MgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgKm91dFR5cGVTcGVjRmxhZ3MgPSBzZXQtPnR5cGVTcGVjRmxhZ3M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgKm91dEJhZyA9IChiYWdfZW50cnkqKShzZXQrMSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vQUxPR0koIkZvdW5kIGV4aXN0aW5nIGJhZyBmb3I6ICVwXG4iLCAodm9pZCopcmVzSUQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LT5udW1BdHRyczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQUxPR1coIkF0dGVtcHQgdG8gcmV0cmlldmUgYmFnIDB4JTA4eCB3aGljaCBpcyBpbnZhbGlkIG9yIGluIGEgY3ljbGUuIiwKLSAgICAgICAgICAgICAgICAgICAgIHJlc0lEKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQkFEX0lOREVYOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQmFnIG5vdCBmb3VuZCwgd2UgbmVlZCB0byBjb21wdXRlIGl0IQotICAgIGlmICghZ3JwLT5iYWdzKSB7Ci0gICAgICAgIGdycC0+YmFncyA9IChiYWdfc2V0KioqKWNhbGxvYyhncnAtPnR5cGVDb3VudCwgc2l6ZW9mKGJhZ19zZXQqKSk7Ci0gICAgICAgIGlmICghZ3JwLT5iYWdzKSByZXR1cm4gTk9fTUVNT1JZOwotICAgIH0KLQotICAgIGJhZ19zZXQqKiB0eXBlU2V0ID0gZ3JwLT5iYWdzW3RdOwotICAgIGlmICghdHlwZVNldCkgewotICAgICAgICB0eXBlU2V0ID0gKGJhZ19zZXQqKiljYWxsb2MoTkVOVFJZLCBzaXplb2YoYmFnX3NldCopKTsKLSAgICAgICAgaWYgKCF0eXBlU2V0KSByZXR1cm4gTk9fTUVNT1JZOwotICAgICAgICBncnAtPmJhZ3NbdF0gPSB0eXBlU2V0OwotICAgIH0KLQotICAgIC8vIE1hcmsgdGhhdCB3ZSBhcmUgY3VycmVudGx5IHdvcmtpbmcgb24gdGhpcyBvbmUuCi0gICAgdHlwZVNldFtlXSA9IChiYWdfc2V0KikweEZGRkZGRkZGOwotCi0gICAgLy8gVGhpcyBpcyB3aGF0IHdlIGFyZSBidWlsZGluZy4KLSAgICBiYWdfc2V0KiBzZXQgPSBOVUxMOwotCi0gICAgVEFCTEVfTk9JU1koQUxPR0koIkJ1aWxkaW5nIGJhZzogJXBcbiIsICh2b2lkKilyZXNJRCkpOwotICAgIAotICAgIFJlc1RhYmxlX2NvbmZpZyBiZXN0Q29uZmlnOwotICAgIG1lbXNldCgmYmVzdENvbmZpZywgMCwgc2l6ZW9mKGJlc3RDb25maWcpKTsKLQotICAgIC8vIE5vdyBjb2xsZWN0IGFsbCBiYWcgYXR0cmlidXRlcyBmcm9tIGFsbCBwYWNrYWdlcy4KLSAgICBzaXplX3QgaXAgPSBncnAtPnBhY2thZ2VzLnNpemUoKTsKLSAgICB3aGlsZSAoaXAgPiAwKSB7Ci0gICAgICAgIGlwLS07Ci0gICAgICAgIGludCBUID0gdDsKLSAgICAgICAgaW50IEUgPSBlOwotCi0gICAgICAgIGNvbnN0IFBhY2thZ2UqIGNvbnN0IHBhY2thZ2UgPSBncnAtPnBhY2thZ2VzW2lwXTsKLSAgICAgICAgaWYgKHBhY2thZ2UtPmhlYWRlci0+cmVzb3VyY2VJRE1hcCkgewotICAgICAgICAgICAgdWludDMyX3Qgb3ZlcmxheVJlc0lEID0gMHgwOwotICAgICAgICAgICAgc3RhdHVzX3QgcmV0dmFsID0gaWRtYXBMb29rdXAocGFja2FnZS0+aGVhZGVyLT5yZXNvdXJjZUlETWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS0+aGVhZGVyLT5yZXNvdXJjZUlETWFwU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0lELCAmb3ZlcmxheVJlc0lEKTsKLSAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gTk9fRVJST1IgJiYgb3ZlcmxheVJlc0lEICE9IDB4MCkgewotICAgICAgICAgICAgICAgIC8vIGZvciB0aGlzIGxvb3AgaXRlcmF0aW9uLCB0aGlzIGlzIHRoZSB0eXBlIGFuZCBlbnRyeSB3ZSByZWFsbHkgd2FudAotICAgICAgICAgICAgICAgIEFMT0dWKCJyZXNvdXJjZSBtYXAgMHglMDh4IC0+IDB4JTA4eFxuIiwgcmVzSUQsIG92ZXJsYXlSZXNJRCk7Ci0gICAgICAgICAgICAgICAgVCA9IFJlc19HRVRUWVBFKG92ZXJsYXlSZXNJRCk7Ci0gICAgICAgICAgICAgICAgRSA9IFJlc19HRVRFTlRSWShvdmVybGF5UmVzSUQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyByZXNvdXJjZSBub3QgcHJlc2VudCBpbiBvdmVybGF5IHBhY2thZ2UsIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgcGFja2FnZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgUmVzVGFibGVfdHlwZSogdHlwZTsKLSAgICAgICAgY29uc3QgUmVzVGFibGVfZW50cnkqIGVudHJ5OwotICAgICAgICBjb25zdCBUeXBlKiB0eXBlQ2xhc3M7Ci0gICAgICAgIEFMT0dWKCJHZXR0aW5nIGVudHJ5IHBrZz0lcCwgdD0lZCwgZT0lZFxuIiwgcGFja2FnZSwgVCwgRSk7Ci0gICAgICAgIHNzaXplX3Qgb2Zmc2V0ID0gZ2V0RW50cnkocGFja2FnZSwgVCwgRSwgJm1QYXJhbXMsICZ0eXBlLCAmZW50cnksICZ0eXBlQ2xhc3MpOwotICAgICAgICBBTE9HVigiUmVzdWx0aW5nIG9mZnNldD0lZFxuIiwgb2Zmc2V0KTsKLSAgICAgICAgaWYgKG9mZnNldCA8PSAwKSB7Ci0gICAgICAgICAgICAvLyBObyB7ZW50cnksIGFwcHJvcHJpYXRlIGNvbmZpZ30gcGFpciBmb3VuZCBpbiBwYWNrYWdlLiBJZiB0aGlzCi0gICAgICAgICAgICAvLyBwYWNrYWdlIGlzIGFuIG92ZXJsYXkgcGFja2FnZSAoaXAgIT0gMCksIHRoaXMgc2ltcGx5IG1lYW5zIHRoZQotICAgICAgICAgICAgLy8gb3ZlcmxheSBwYWNrYWdlIGRpZCBub3Qgc3BlY2lmeSBhIGRlZmF1bHQuCi0gICAgICAgICAgICAvLyBOb24tb3ZlcmxheSBwYWNrYWdlcyBhcmUgc3RpbGwgcmVxdWlyZWQgdG8gcHJvdmlkZSBhIGRlZmF1bHQuCi0gICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCAmJiBpcCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNldCkgZnJlZShzZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoZHRvaHMoZW50cnktPmZsYWdzKSZlbnRyeS0+RkxBR19DT01QTEVYKSA9PSAwKSB7Ci0gICAgICAgICAgICBBTE9HVygiU2tpcHBpbmcgZW50cnkgJXAgaW4gcGFja2FnZSB0YWJsZSAlZCBiZWNhdXNlIGl0IGlzIG5vdCBjb21wbGV4IVxuIiwKLSAgICAgICAgICAgICAgICAgKHZvaWQqKXJlc0lELCAoaW50KWlwKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNldCAhPSBOVUxMICYmICF0eXBlLT5jb25maWcuaXNCZXR0ZXJUaGFuKGJlc3RDb25maWcsIE5VTEwpKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBiZXN0Q29uZmlnID0gdHlwZS0+Y29uZmlnOwotICAgICAgICBpZiAoc2V0KSB7Ci0gICAgICAgICAgICBmcmVlKHNldCk7Ci0gICAgICAgICAgICBzZXQgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgdWludDE2X3QgZW50cnlTaXplID0gZHRvaHMoZW50cnktPnNpemUpOwotICAgICAgICBjb25zdCB1aW50MzJfdCBwYXJlbnQgPSBlbnRyeVNpemUgPj0gc2l6ZW9mKFJlc1RhYmxlX21hcF9lbnRyeSkKLSAgICAgICAgICAgID8gZHRvaGwoKChjb25zdCBSZXNUYWJsZV9tYXBfZW50cnkqKWVudHJ5KS0+cGFyZW50LmlkZW50KSA6IDA7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IGNvdW50ID0gZW50cnlTaXplID49IHNpemVvZihSZXNUYWJsZV9tYXBfZW50cnkpCi0gICAgICAgICAgICA/IGR0b2hsKCgoY29uc3QgUmVzVGFibGVfbWFwX2VudHJ5KillbnRyeSktPmNvdW50KSA6IDA7Ci0gICAgICAgIAotICAgICAgICBzaXplX3QgTiA9IGNvdW50OwotCi0gICAgICAgIFRBQkxFX05PSVNZKEFMT0dJKCJGb3VuZCBtYXA6IHNpemU9JXAgcGFyZW50PSVwIGNvdW50PSVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5U2l6ZSwgcGFyZW50LCBjb3VudCkpOwotCi0gICAgICAgIC8vIElmIHRoaXMgbWFwIGluaGVyaXRzIGZyb20gYW5vdGhlciwgd2UgbmVlZCB0byBzdGFydAotICAgICAgICAvLyB3aXRoIGl0cyBwYXJlbnQncyB2YWx1ZXMuICBPdGhlcndpc2Ugc3RhcnQgb3V0IGVtcHR5LgotICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoIkNyZWF0aW5nIG5ldyBiYWcsIGVudHJ5U2l6ZT0weCUwOHgsIHBhcmVudD0weCUwOHhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeVNpemUsIHBhcmVudCkpOwotICAgICAgICBpZiAocGFyZW50KSB7Ci0gICAgICAgICAgICBjb25zdCBiYWdfZW50cnkqIHBhcmVudEJhZzsKLSAgICAgICAgICAgIHVpbnQzMl90IHBhcmVudFR5cGVTcGVjRmxhZ3MgPSAwOwotICAgICAgICAgICAgY29uc3Qgc3NpemVfdCBOUCA9IGdldEJhZ0xvY2tlZChwYXJlbnQsICZwYXJlbnRCYWcsICZwYXJlbnRUeXBlU3BlY0ZsYWdzKTsKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOVCA9ICgoTlAgPj0gMCkgPyBOUCA6IDApICsgTjsKLSAgICAgICAgICAgIHNldCA9IChiYWdfc2V0KiltYWxsb2Moc2l6ZW9mKGJhZ19zZXQpK3NpemVvZihiYWdfZW50cnkpKk5UKTsKLSAgICAgICAgICAgIGlmIChzZXQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoTlAgPiAwKSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHNldCsxLCBwYXJlbnRCYWcsIE5QKnNpemVvZihiYWdfZW50cnkpKTsKLSAgICAgICAgICAgICAgICBzZXQtPm51bUF0dHJzID0gTlA7Ci0gICAgICAgICAgICAgICAgVEFCTEVfTk9JU1koQUxPR0koIkluaXRpYWxpemVkIG5ldyBiYWcgd2l0aCAlZCBpbmhlcml0ZWQgYXR0cmlidXRlcy5cbiIsIE5QKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFRBQkxFX05PSVNZKEFMT0dJKCJJbml0aWFsaXplZCBuZXcgYmFnIHdpdGggbm8gaW5oZXJpdGVkIGF0dHJpYnV0ZXMuXG4iKSk7Ci0gICAgICAgICAgICAgICAgc2V0LT5udW1BdHRycyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXQtPmF2YWlsQXR0cnMgPSBOVDsKLSAgICAgICAgICAgIHNldC0+dHlwZVNwZWNGbGFncyA9IHBhcmVudFR5cGVTcGVjRmxhZ3M7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzZXQgPSAoYmFnX3NldCopbWFsbG9jKHNpemVvZihiYWdfc2V0KStzaXplb2YoYmFnX2VudHJ5KSpOKTsKLSAgICAgICAgICAgIGlmIChzZXQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXQtPm51bUF0dHJzID0gMDsKLSAgICAgICAgICAgIHNldC0+YXZhaWxBdHRycyA9IE47Ci0gICAgICAgICAgICBzZXQtPnR5cGVTcGVjRmxhZ3MgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5cGVDbGFzcy0+dHlwZVNwZWNGbGFncyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBzZXQtPnR5cGVTcGVjRmxhZ3MgfD0gZHRvaGwodHlwZUNsYXNzLT50eXBlU3BlY0ZsYWdzW0VdKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldC0+dHlwZVNwZWNGbGFncyA9IC0xOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBOb3cgbWVyZ2UgaW4gdGhlIG5ldyBhdHRyaWJ1dGVzLi4uCi0gICAgICAgIHNzaXplX3QgY3VyT2ZmID0gb2Zmc2V0OwotICAgICAgICBjb25zdCBSZXNUYWJsZV9tYXAqIG1hcDsKLSAgICAgICAgYmFnX2VudHJ5KiBlbnRyaWVzID0gKGJhZ19lbnRyeSopKHNldCsxKTsKLSAgICAgICAgc2l6ZV90IGN1ckVudHJ5ID0gMDsKLSAgICAgICAgdWludDMyX3QgcG9zID0gMDsKLSAgICAgICAgVEFCTEVfTk9JU1koQUxPR0koIlN0YXJ0aW5nIHdpdGggc2V0ICVwLCBlbnRyaWVzPSVwLCBhdmFpbD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgIHNldCwgZW50cmllcywgc2V0LT5hdmFpbEF0dHJzKSk7Ci0gICAgICAgIHdoaWxlIChwb3MgPCBjb3VudCkgewotICAgICAgICAgICAgVEFCTEVfTk9JU1kocHJpbnRmKCJOb3cgYXQgJXBcbiIsICh2b2lkKiljdXJPZmYpKTsKLQotICAgICAgICAgICAgaWYgKChzaXplX3QpY3VyT2ZmID4gKGR0b2hsKHR5cGUtPmhlYWRlci5zaXplKS1zaXplb2YoUmVzVGFibGVfbWFwKSkpIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiUmVzVGFibGVfbWFwIGF0ICVkIGlzIGJleW9uZCB0eXBlIGNodW5rIGRhdGEgJWQiLAotICAgICAgICAgICAgICAgICAgICAgKGludCljdXJPZmYsIGR0b2hsKHR5cGUtPmhlYWRlci5zaXplKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9UWVBFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFwID0gKGNvbnN0IFJlc1RhYmxlX21hcCopKCgoY29uc3QgdWludDhfdCopdHlwZSkgKyBjdXJPZmYpOwotICAgICAgICAgICAgTisrOwotCi0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCBuZXdOYW1lID0gaHRvZGwobWFwLT5uYW1lLmlkZW50KTsKLSAgICAgICAgICAgIGJvb2wgaXNJbnNpZGU7Ci0gICAgICAgICAgICB1aW50MzJfdCBvbGROYW1lID0gMDsKLSAgICAgICAgICAgIHdoaWxlICgoaXNJbnNpZGU9KGN1ckVudHJ5IDwgc2V0LT5udW1BdHRycykpCi0gICAgICAgICAgICAgICAgICAgICYmIChvbGROYW1lPWVudHJpZXNbY3VyRW50cnldLm1hcC5uYW1lLmlkZW50KSA8IG5ld05hbWUpIHsKLSAgICAgICAgICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoIiMlZDogS2VlcGluZyBleGlzdGluZyBhdHRyaWJ1dGU6IDB4JTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyRW50cnksIGVudHJpZXNbY3VyRW50cnldLm1hcC5uYW1lLmlkZW50KSk7Ci0gICAgICAgICAgICAgICAgY3VyRW50cnkrKzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCghaXNJbnNpZGUpIHx8IG9sZE5hbWUgIT0gbmV3TmFtZSkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgYXR0cmlidXRlLi4uICBmaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBpdC4KLSAgICAgICAgICAgICAgICBpZiAoc2V0LT5udW1BdHRycyA+PSBzZXQtPmF2YWlsQXR0cnMpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBhbGxvYyBtb3JlIG1lbW9yeS4uLgotICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbmV3QXZhaWwgPSBzZXQtPmF2YWlsQXR0cnMrTjsKLSAgICAgICAgICAgICAgICAgICAgc2V0ID0gKGJhZ19zZXQqKXJlYWxsb2Moc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYmFnX3NldCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzaXplb2YoYmFnX2VudHJ5KSpuZXdBdmFpbCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZXQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZXQtPmF2YWlsQXR0cnMgPSBuZXdBdmFpbDsKLSAgICAgICAgICAgICAgICAgICAgZW50cmllcyA9IChiYWdfZW50cnkqKShzZXQrMSk7Ci0gICAgICAgICAgICAgICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigiUmVhbGxvY2F0ZWQgc2V0ICVwLCBlbnRyaWVzPSVwLCBhdmFpbD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCwgZW50cmllcywgc2V0LT5hdmFpbEF0dHJzKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpc0luc2lkZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBHb2luZyBpbiB0aGUgbWlkZGxlLCBuZWVkIHRvIG1ha2Ugc3BhY2UuCi0gICAgICAgICAgICAgICAgICAgIG1lbW1vdmUoZW50cmllcytjdXJFbnRyeSsxLCBlbnRyaWVzK2N1ckVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihiYWdfZW50cnkpKihzZXQtPm51bUF0dHJzLWN1ckVudHJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldC0+bnVtQXR0cnMrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgVEFCTEVfTk9JU1kocHJpbnRmKCIjJWQ6IEluc2VydGluZyBuZXcgYXR0cmlidXRlOiAweCUwOHhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckVudHJ5LCBuZXdOYW1lKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFRBQkxFX05PSVNZKHByaW50ZigiIyVkOiBSZXBsYWNpbmcgZXhpc3RpbmcgYXR0cmlidXRlOiAweCUwOHhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckVudHJ5LCBvbGROYW1lKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJhZ19lbnRyeSogY3VyID0gZW50cmllcytjdXJFbnRyeTsKLQotICAgICAgICAgICAgY3VyLT5zdHJpbmdCbG9jayA9IHBhY2thZ2UtPmhlYWRlci0+aW5kZXg7Ci0gICAgICAgICAgICBjdXItPm1hcC5uYW1lLmlkZW50ID0gbmV3TmFtZTsKLSAgICAgICAgICAgIGN1ci0+bWFwLnZhbHVlLmNvcHlGcm9tX2R0b2gobWFwLT52YWx1ZSk7Ci0gICAgICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoIlNldHRpbmcgZW50cnkgIyVkICVwOiBibG9jaz0lZCwgbmFtZT0weCUwOHgsIHR5cGU9JWQsIGRhdGE9MHglMDh4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckVudHJ5LCBjdXIsIGN1ci0+c3RyaW5nQmxvY2ssIGN1ci0+bWFwLm5hbWUuaWRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3VyLT5tYXAudmFsdWUuZGF0YVR5cGUsIGN1ci0+bWFwLnZhbHVlLmRhdGEpKTsKLQotICAgICAgICAgICAgLy8gT24gdG8gdGhlIG5leHQhCi0gICAgICAgICAgICBjdXJFbnRyeSsrOwotICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IGR0b2hzKG1hcC0+dmFsdWUuc2l6ZSk7Ci0gICAgICAgICAgICBjdXJPZmYgKz0gc2l6ZSArIHNpemVvZigqbWFwKS1zaXplb2YobWFwLT52YWx1ZSk7Ci0gICAgICAgIH07Ci0gICAgICAgIGlmIChjdXJFbnRyeSA+IHNldC0+bnVtQXR0cnMpIHsKLSAgICAgICAgICAgIHNldC0+bnVtQXR0cnMgPSBjdXJFbnRyeTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFuZCB0aGlzIGlzIGl0Li4uCi0gICAgdHlwZVNldFtlXSA9IHNldDsKLSAgICBpZiAoc2V0KSB7Ci0gICAgICAgIGlmIChvdXRUeXBlU3BlY0ZsYWdzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICpvdXRUeXBlU3BlY0ZsYWdzID0gc2V0LT50eXBlU3BlY0ZsYWdzOwotICAgICAgICB9Ci0gICAgICAgICpvdXRCYWcgPSAoYmFnX2VudHJ5Kikoc2V0KzEpOwotICAgICAgICBUQUJMRV9OT0lTWShBTE9HSSgiUmV0dXJuaW5nICVkIGF0dHJzXG4iLCBzZXQtPm51bUF0dHJzKSk7Ci0gICAgICAgIHJldHVybiBzZXQtPm51bUF0dHJzOwotICAgIH0KLSAgICByZXR1cm4gQkFEX0lOREVYOwotfQotCi12b2lkIFJlc1RhYmxlOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogcGFyYW1zKQotewotICAgIG1Mb2NrLmxvY2soKTsKLSAgICBUQUJMRV9HRVRFTlRSWShBTE9HSSgiU2V0dGluZyBwYXJhbWV0ZXJzOiAlc1xuIiwgcGFyYW1zLT50b1N0cmluZygpLnN0cmluZygpKSk7Ci0gICAgbVBhcmFtcyA9ICpwYXJhbXM7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPG1QYWNrYWdlR3JvdXBzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFRBQkxFX05PSVNZKEFMT0dJKCJDTEVBUklORyBCQUdTIEZPUiBHUk9VUCAlZCEiLCBpKSk7Ci0gICAgICAgIG1QYWNrYWdlR3JvdXBzW2ldLT5jbGVhckJhZ0NhY2hlKCk7Ci0gICAgfQotICAgIG1Mb2NrLnVubG9jaygpOwotfQotCi12b2lkIFJlc1RhYmxlOjpnZXRQYXJhbWV0ZXJzKFJlc1RhYmxlX2NvbmZpZyogcGFyYW1zKSBjb25zdAotewotICAgIG1Mb2NrLmxvY2soKTsKLSAgICAqcGFyYW1zID0gbVBhcmFtczsKLSAgICBtTG9jay51bmxvY2soKTsKLX0KLQotc3RydWN0IGlkX25hbWVfbWFwIHsKLSAgICB1aW50MzJfdCBpZDsKLSAgICBzaXplX3QgbGVuOwotICAgIGNoYXIxNl90IG5hbWVbNl07Ci19OwotCi1jb25zdCBzdGF0aWMgaWRfbmFtZV9tYXAgSURfTkFNRVNbXSA9IHsKLSAgICB7IFJlc1RhYmxlX21hcDo6QVRUUl9UWVBFLCAgNSwgeyAnXicsICd0JywgJ3knLCAncCcsICdlJyB9IH0sCi0gICAgeyBSZXNUYWJsZV9tYXA6OkFUVFJfTDEwTiwgIDUsIHsgJ14nLCAnbCcsICcxJywgJzAnLCAnbicgfSB9LAotICAgIHsgUmVzVGFibGVfbWFwOjpBVFRSX01JTiwgICA0LCB7ICdeJywgJ20nLCAnaScsICduJyB9IH0sCi0gICAgeyBSZXNUYWJsZV9tYXA6OkFUVFJfTUFYLCAgIDQsIHsgJ14nLCAnbScsICdhJywgJ3gnIH0gfSwKLSAgICB7IFJlc1RhYmxlX21hcDo6QVRUUl9PVEhFUiwgNiwgeyAnXicsICdvJywgJ3QnLCAnaCcsICdlJywgJ3InIH0gfSwKLSAgICB7IFJlc1RhYmxlX21hcDo6QVRUUl9aRVJPLCAgNSwgeyAnXicsICd6JywgJ2UnLCAncicsICdvJyB9IH0sCi0gICAgeyBSZXNUYWJsZV9tYXA6OkFUVFJfT05FLCAgIDQsIHsgJ14nLCAnbycsICduJywgJ2UnIH0gfSwKLSAgICB7IFJlc1RhYmxlX21hcDo6QVRUUl9UV08sICAgNCwgeyAnXicsICd0JywgJ3cnLCAnbycgfSB9LAotICAgIHsgUmVzVGFibGVfbWFwOjpBVFRSX0ZFVywgICA0LCB7ICdeJywgJ2YnLCAnZScsICd3JyB9IH0sCi0gICAgeyBSZXNUYWJsZV9tYXA6OkFUVFJfTUFOWSwgIDUsIHsgJ14nLCAnbScsICdhJywgJ24nLCAneScgfSB9LAotfTsKLQotdWludDMyX3QgUmVzVGFibGU6OmlkZW50aWZpZXJGb3JOYW1lKGNvbnN0IGNoYXIxNl90KiBuYW1lLCBzaXplX3QgbmFtZUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogdHlwZSwgc2l6ZV90IHR5cGVMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhY2thZ2VMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIG91dFR5cGVTcGVjRmxhZ3MpIGNvbnN0Ci17Ci0gICAgVEFCTEVfU1VQRVJfTk9JU1kocHJpbnRmKCJJZGVudGlmaWVyIGZvciBuYW1lOiBlcnJvcj0lZFxuIiwgbUVycm9yKSk7Ci0KLSAgICAvLyBDaGVjayBmb3IgaW50ZXJuYWwgcmVzb3VyY2UgaWRlbnRpZmllciBhcyB0aGUgdmVyeSBmaXJzdCB0aGluZywgc28KLSAgICAvLyB0aGF0IHdlIHdpbGwgYWx3YXlzIGZpbmQgdGhlbSBldmVuIHdoZW4gdGhlcmUgYXJlIG5vIHJlc291cmNlcy4KLSAgICBpZiAobmFtZVswXSA9PSAnXicpIHsKLSAgICAgICAgY29uc3QgaW50IE4gPSAoc2l6ZW9mKElEX05BTUVTKS9zaXplb2YoSURfTkFNRVNbMF0pKTsKLSAgICAgICAgc2l6ZV90IGxlbjsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgY29uc3QgaWRfbmFtZV9tYXAqIG0gPSBJRF9OQU1FUyArIGk7Ci0gICAgICAgICAgICBsZW4gPSBtLT5sZW47Ci0gICAgICAgICAgICBpZiAobGVuICE9IG5hbWVMZW4pIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGo9MTsgajxsZW47IGorKykgewotICAgICAgICAgICAgICAgIGlmIChtLT5uYW1lW2pdICE9IG5hbWVbal0pIHsKLSAgICAgICAgICAgICAgICAgICAgZ290byBub3BlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvdXRUeXBlU3BlY0ZsYWdzKSB7Ci0gICAgICAgICAgICAgICAgKm91dFR5cGVTcGVjRmxhZ3MgPSBSZXNUYWJsZV90eXBlU3BlYzo6U1BFQ19QVUJMSUM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbS0+aWQ7Ci1ub3BlOgotICAgICAgICAgICAgOwotICAgICAgICB9Ci0gICAgICAgIGlmIChuYW1lTGVuID4gNykgewotICAgICAgICAgICAgaWYgKG5hbWVbMV0gPT0gJ2knICYmIG5hbWVbMl0gPT0gJ24nCi0gICAgICAgICAgICAgICAgJiYgbmFtZVszXSA9PSAnZCcgJiYgbmFtZVs0XSA9PSAnZScgJiYgbmFtZVs1XSA9PSAneCcKLSAgICAgICAgICAgICAgICAmJiBuYW1lWzZdID09ICdfJykgewotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IGF0b2koU3RyaW5nOChuYW1lICsgNywgbmFtZUxlbiAtIDcpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBpZiAoUmVzX0NIRUNLSUQoaW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dXKCJBcnJheSByZXNvdXJjZSBpbmRleDogJWQgaXMgdG9vIGxhcmdlLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG91dFR5cGVTcGVjRmxhZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgKm91dFR5cGVTcGVjRmxhZ3MgPSBSZXNUYWJsZV90eXBlU3BlYzo6U1BFQ19QVUJMSUM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAgUmVzX01BS0VBUlJBWShpbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKG1FcnJvciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBib29sIGZha2VQdWJsaWMgPSBmYWxzZTsKLQotICAgIC8vIEZpZ3VyZSBvdXQgdGhlIHBhY2thZ2UgYW5kIHR5cGUgd2UgYXJlIGxvb2tpbmcgaW4uLi4KLQotICAgIGNvbnN0IGNoYXIxNl90KiBwYWNrYWdlRW5kID0gTlVMTDsKLSAgICBjb25zdCBjaGFyMTZfdCogdHlwZUVuZCA9IE5VTEw7Ci0gICAgY29uc3QgY2hhcjE2X3QqIGNvbnN0IG5hbWVFbmQgPSBuYW1lK25hbWVMZW47Ci0gICAgY29uc3QgY2hhcjE2X3QqIHAgPSBuYW1lOwotICAgIHdoaWxlIChwIDwgbmFtZUVuZCkgewotICAgICAgICBpZiAoKnAgPT0gJzonKSBwYWNrYWdlRW5kID0gcDsKLSAgICAgICAgZWxzZSBpZiAoKnAgPT0gJy8nKSB0eXBlRW5kID0gcDsKLSAgICAgICAgcCsrOwotICAgIH0KLSAgICBpZiAoKm5hbWUgPT0gJ0AnKSB7Ci0gICAgICAgIG5hbWUrKzsKLSAgICAgICAgaWYgKCpuYW1lID09ICcqJykgewotICAgICAgICAgICAgZmFrZVB1YmxpYyA9IHRydWU7Ci0gICAgICAgICAgICBuYW1lKys7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG5hbWUgPj0gbmFtZUVuZCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAocGFja2FnZUVuZCkgewotICAgICAgICBwYWNrYWdlID0gbmFtZTsKLSAgICAgICAgcGFja2FnZUxlbiA9IHBhY2thZ2VFbmQtbmFtZTsKLSAgICAgICAgbmFtZSA9IHBhY2thZ2VFbmQrMTsKLSAgICB9IGVsc2UgaWYgKCFwYWNrYWdlKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmICh0eXBlRW5kKSB7Ci0gICAgICAgIHR5cGUgPSBuYW1lOwotICAgICAgICB0eXBlTGVuID0gdHlwZUVuZC1uYW1lOwotICAgICAgICBuYW1lID0gdHlwZUVuZCsxOwotICAgIH0gZWxzZSBpZiAoIXR5cGUpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgPj0gbmFtZUVuZCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgbmFtZUxlbiA9IG5hbWVFbmQtbmFtZTsKLQotICAgIFRBQkxFX05PSVNZKHByaW50ZigiTG9va2luZyBmb3IgaWRlbnRpZmllcjogdHlwZT0lcywgbmFtZT0lcywgcGFja2FnZT0lc1xuIiwKLSAgICAgICAgICAgICAgICAgU3RyaW5nOCh0eXBlLCB0eXBlTGVuKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgU3RyaW5nOChuYW1lLCBuYW1lTGVuKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgU3RyaW5nOChwYWNrYWdlLCBwYWNrYWdlTGVuKS5zdHJpbmcoKSkpOwotCi0gICAgY29uc3Qgc2l6ZV90IE5HID0gbVBhY2thZ2VHcm91cHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGlnPTA7IGlnPE5HOyBpZysrKSB7Ci0gICAgICAgIGNvbnN0IFBhY2thZ2VHcm91cCogZ3JvdXAgPSBtUGFja2FnZUdyb3Vwc1tpZ107Ci0KLSAgICAgICAgaWYgKHN0cnpjbXAxNihwYWNrYWdlLCBwYWNrYWdlTGVuLAotICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLT5uYW1lLnN0cmluZygpLCBncm91cC0+bmFtZS5zaXplKCkpKSB7Ci0gICAgICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoIlNraXBwaW5nIHBhY2thZ2UgZ3JvdXA6ICVzXG4iLCBTdHJpbmc4KGdyb3VwLT5uYW1lKS5zdHJpbmcoKSkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBzc2l6ZV90IHRpID0gZ3JvdXAtPmJhc2VQYWNrYWdlLT50eXBlU3RyaW5ncy5pbmRleE9mU3RyaW5nKHR5cGUsIHR5cGVMZW4pOwotICAgICAgICBpZiAodGkgPCAwKSB7Ci0gICAgICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoIlR5cGUgbm90IGZvdW5kIGluIHBhY2thZ2UgJXNcbiIsIFN0cmluZzgoZ3JvdXAtPm5hbWUpLnN0cmluZygpKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IHNzaXplX3QgZWkgPSBncm91cC0+YmFzZVBhY2thZ2UtPmtleVN0cmluZ3MuaW5kZXhPZlN0cmluZyhuYW1lLCBuYW1lTGVuKTsKLSAgICAgICAgaWYgKGVpIDwgMCkgewotICAgICAgICAgICAgVEFCTEVfTk9JU1kocHJpbnRmKCJOYW1lIG5vdCBmb3VuZCBpbiBwYWNrYWdlICVzXG4iLCBTdHJpbmc4KGdyb3VwLT5uYW1lKS5zdHJpbmcoKSkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoIlNlYXJjaCBpbmRpY2VzOiB0eXBlPSVkLCBuYW1lPSVkXG4iLCB0aSwgZWkpKTsKLQotICAgICAgICBjb25zdCBUeXBlKiBjb25zdCB0eXBlQ29uZmlncyA9IGdyb3VwLT5wYWNrYWdlc1swXS0+Z2V0VHlwZSh0aSk7Ci0gICAgICAgIGlmICh0eXBlQ29uZmlncyA9PSBOVUxMIHx8IHR5cGVDb25maWdzLT5jb25maWdzLnNpemUoKSA8PSAwKSB7Ci0gICAgICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoIkV4cGVjdGVkIHR5cGUgc3RydWN0dXJlIG5vdCBmb3VuZCBpbiBwYWNrYWdlICVzIGZvciBpZG5leCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGdyb3VwLT5uYW1lKS5zdHJpbmcoKSwgdGkpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2l6ZV90IE5UQyA9IHR5cGVDb25maWdzLT5jb25maWdzLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgdGNpPTA7IHRjaTxOVEM7IHRjaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBSZXNUYWJsZV90eXBlKiBjb25zdCB0eSA9IHR5cGVDb25maWdzLT5jb25maWdzW3RjaV07Ci0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCB0eXBlT2Zmc2V0ID0gZHRvaGwodHktPmVudHJpZXNTdGFydCk7Ci0KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGNvbnN0IGVuZCA9ICgoY29uc3QgdWludDhfdCopdHkpICsgZHRvaGwodHktPmhlYWRlci5zaXplKTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBjb25zdCBlaW5kZXggPSAoY29uc3QgdWludDMyX3QqKQotICAgICAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKXR5KSArIGR0b2hzKHR5LT5oZWFkZXIuaGVhZGVyU2l6ZSkpOwotCi0gICAgICAgICAgICBjb25zdCBzaXplX3QgTkUgPSBkdG9obCh0eS0+ZW50cnlDb3VudCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TkU7IGkrKykgewotICAgICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldCA9IGR0b2hsKGVpbmRleFtpXSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBSZXNUYWJsZV90eXBlOjpOT19FTlRSWSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHR5cGVPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+IChkdG9obCh0eS0+aGVhZGVyLnNpemUpLXNpemVvZihSZXNUYWJsZV9lbnRyeSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dXKCJSZXNUYWJsZV9lbnRyeSBhdCAlZCBpcyBiZXlvbmQgdHlwZSBjaHVuayBkYXRhICVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIGR0b2hsKHR5LT5oZWFkZXIuc2l6ZSkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChvZmZzZXQmMHgzKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dXKCJSZXNUYWJsZV9lbnRyeSBhdCAlZCAocGtnPSVkIHR5cGU9JWQgZW50PSVkKSBpcyBub3Qgb24gYW4gaW50ZWdlciBib3VuZGFyeSB3aGVuIGxvb2tpbmcgZm9yICVzOiVzLyVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KW9mZnNldCwgKGludClncm91cC0+aWQsIChpbnQpdGkrMSwgKGludClpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocGFja2FnZSwgcGFja2FnZUxlbikuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCh0eXBlLCB0eXBlTGVuKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG5hbWUsIG5hbWVMZW4pLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2VudHJ5KiBjb25zdCBlbnRyeSA9IChjb25zdCBSZXNUYWJsZV9lbnRyeSopCi0gICAgICAgICAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKXR5KSArIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgaWYgKGR0b2hzKGVudHJ5LT5zaXplKSA8IHNpemVvZigqZW50cnkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFMT0dXKCJSZXNUYWJsZV9lbnRyeSBzaXplICVkIGlzIHRvbyBzbWFsbCIsIGR0b2hzKGVudHJ5LT5zaXplKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBCQURfVFlQRTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBUQUJMRV9TVVBFUl9OT0lTWShwcmludGYoIkxvb2tpbmcgYXQgZW50cnkgIyVkOiB3YW50IHN0ciAlZCwgaGF2ZSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgZWksIGR0b2hsKGVudHJ5LT5rZXkuaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGR0b2hsKGVudHJ5LT5rZXkuaW5kZXgpID09IChzaXplX3QpZWkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG91dFR5cGVTcGVjRmxhZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpvdXRUeXBlU3BlY0ZsYWdzID0gdHlwZUNvbmZpZ3MtPnR5cGVTcGVjRmxhZ3NbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFrZVB1YmxpYykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXRUeXBlU3BlY0ZsYWdzIHw9IFJlc1RhYmxlX3R5cGVTcGVjOjpTUEVDX1BVQkxJQzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzX01BS0VJRChncm91cC0+aWQtMSwgdGksIGkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1ib29sIFJlc1RhYmxlOjpleHBhbmRSZXNvdXJjZVJlZihjb25zdCB1aW50MTZfdCogcmVmU3RyLCBzaXplX3QgcmVmTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYqIG91dFBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiogb3V0VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2KiBvdXROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiogZGVmUGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBvdXRFcnJvck1zZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIG91dFB1YmxpY09ubHkpCi17Ci0gICAgY29uc3QgY2hhcjE2X3QqIHBhY2thZ2VFbmQgPSBOVUxMOwotICAgIGNvbnN0IGNoYXIxNl90KiB0eXBlRW5kID0gTlVMTDsKLSAgICBjb25zdCBjaGFyMTZfdCogcCA9IHJlZlN0cjsKLSAgICBjb25zdCBjaGFyMTZfdCogY29uc3QgZW5kID0gcCArIHJlZkxlbjsKLSAgICB3aGlsZSAocCA8IGVuZCkgewotICAgICAgICBpZiAoKnAgPT0gJzonKSBwYWNrYWdlRW5kID0gcDsKLSAgICAgICAgZWxzZSBpZiAoKnAgPT0gJy8nKSB7Ci0gICAgICAgICAgICB0eXBlRW5kID0gcDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHArKzsKLSAgICB9Ci0gICAgcCA9IHJlZlN0cjsKLSAgICBpZiAoKnAgPT0gJ0AnKSBwKys7Ci0KLSAgICBpZiAob3V0UHVibGljT25seSAhPSBOVUxMKSB7Ci0gICAgICAgICpvdXRQdWJsaWNPbmx5ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCpwID09ICcqJykgewotICAgICAgICBwKys7Ci0gICAgICAgIGlmIChvdXRQdWJsaWNPbmx5ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICpvdXRQdWJsaWNPbmx5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocGFja2FnZUVuZCkgewotICAgICAgICAqb3V0UGFja2FnZSA9IFN0cmluZzE2KHAsIHBhY2thZ2VFbmQtcCk7Ci0gICAgICAgIHAgPSBwYWNrYWdlRW5kKzE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFkZWZQYWNrYWdlKSB7Ci0gICAgICAgICAgICBpZiAob3V0RXJyb3JNc2cpIHsKLSAgICAgICAgICAgICAgICAqb3V0RXJyb3JNc2cgPSAiTm8gcmVzb3VyY2UgcGFja2FnZSBzcGVjaWZpZWQiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgICpvdXRQYWNrYWdlID0gKmRlZlBhY2thZ2U7Ci0gICAgfQotICAgIGlmICh0eXBlRW5kKSB7Ci0gICAgICAgICpvdXRUeXBlID0gU3RyaW5nMTYocCwgdHlwZUVuZC1wKTsKLSAgICAgICAgcCA9IHR5cGVFbmQrMTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWRlZlR5cGUpIHsKLSAgICAgICAgICAgIGlmIChvdXRFcnJvck1zZykgewotICAgICAgICAgICAgICAgICpvdXRFcnJvck1zZyA9ICJObyByZXNvdXJjZSB0eXBlIHNwZWNpZmllZCI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgKm91dFR5cGUgPSAqZGVmVHlwZTsKLSAgICB9Ci0gICAgKm91dE5hbWUgPSBTdHJpbmcxNihwLCBlbmQtcCk7Ci0gICAgaWYoKipvdXRQYWNrYWdlID09IDApIHsKLSAgICAgICAgaWYob3V0RXJyb3JNc2cpIHsKLSAgICAgICAgICAgICpvdXRFcnJvck1zZyA9ICJSZXNvdXJjZSBwYWNrYWdlIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmciOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYoKipvdXRUeXBlID09IDApIHsKLSAgICAgICAgaWYob3V0RXJyb3JNc2cpIHsKLSAgICAgICAgICAgICpvdXRFcnJvck1zZyA9ICJSZXNvdXJjZSB0eXBlIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmciOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYoKipvdXROYW1lID09IDApIHsKLSAgICAgICAgaWYob3V0RXJyb3JNc2cpIHsKLSAgICAgICAgICAgICpvdXRFcnJvck1zZyA9ICJSZXNvdXJjZSBpZCBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nIjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdWludDMyX3QgZ2V0X2hleChjaGFyIGMsIGJvb2wqIG91dEVycm9yKQotewotICAgIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgewotICAgICAgICByZXR1cm4gYyAtICcwJzsKLSAgICB9IGVsc2UgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKSB7Ci0gICAgICAgIHJldHVybiBjIC0gJ2EnICsgMHhhOwotICAgIH0gZWxzZSBpZiAoYyA+PSAnQScgJiYgYyA8PSAnRicpIHsKLSAgICAgICAgcmV0dXJuIGMgLSAnQScgKyAweGE7Ci0gICAgfQotICAgICpvdXRFcnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCB1bml0X2VudHJ5Ci17Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLSAgICBzaXplX3QgbGVuOwotICAgIHVpbnQ4X3QgdHlwZTsKLSAgICB1aW50MzJfdCB1bml0OwotICAgIGZsb2F0IHNjYWxlOwotfTsKLQotc3RhdGljIGNvbnN0IHVuaXRfZW50cnkgdW5pdE5hbWVzW10gPSB7Ci0gICAgeyAicHgiLCBzdHJsZW4oInB4IiksIFJlc192YWx1ZTo6VFlQRV9ESU1FTlNJT04sIFJlc192YWx1ZTo6Q09NUExFWF9VTklUX1BYLCAxLjBmIH0sCi0gICAgeyAiZGlwIiwgc3RybGVuKCJkaXAiKSwgUmVzX3ZhbHVlOjpUWVBFX0RJTUVOU0lPTiwgUmVzX3ZhbHVlOjpDT01QTEVYX1VOSVRfRElQLCAxLjBmIH0sCi0gICAgeyAiZHAiLCBzdHJsZW4oImRwIiksIFJlc192YWx1ZTo6VFlQRV9ESU1FTlNJT04sIFJlc192YWx1ZTo6Q09NUExFWF9VTklUX0RJUCwgMS4wZiB9LAotICAgIHsgInNwIiwgc3RybGVuKCJzcCIpLCBSZXNfdmFsdWU6OlRZUEVfRElNRU5TSU9OLCBSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9TUCwgMS4wZiB9LAotICAgIHsgInB0Iiwgc3RybGVuKCJwdCIpLCBSZXNfdmFsdWU6OlRZUEVfRElNRU5TSU9OLCBSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9QVCwgMS4wZiB9LAotICAgIHsgImluIiwgc3RybGVuKCJpbiIpLCBSZXNfdmFsdWU6OlRZUEVfRElNRU5TSU9OLCBSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9JTiwgMS4wZiB9LAotICAgIHsgIm1tIiwgc3RybGVuKCJtbSIpLCBSZXNfdmFsdWU6OlRZUEVfRElNRU5TSU9OLCBSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9NTSwgMS4wZiB9LAotICAgIHsgIiUiLCBzdHJsZW4oIiUiKSwgUmVzX3ZhbHVlOjpUWVBFX0ZSQUNUSU9OLCBSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9GUkFDVElPTiwgMS4wZi8xMDAgfSwKLSAgICB7ICIlcCIsIHN0cmxlbigiJXAiKSwgUmVzX3ZhbHVlOjpUWVBFX0ZSQUNUSU9OLCBSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9GUkFDVElPTl9QQVJFTlQsIDEuMGYvMTAwIH0sCi0gICAgeyBOVUxMLCAwLCAwLCAwLCAwIH0KLX07Ci0KLXN0YXRpYyBib29sIHBhcnNlX3VuaXQoY29uc3QgY2hhciogc3RyLCBSZXNfdmFsdWUqIG91dFZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogb3V0U2NhbGUsIGNvbnN0IGNoYXIqKiBvdXRFbmQpCi17Ci0gICAgY29uc3QgY2hhciogZW5kID0gc3RyOwotICAgIHdoaWxlICgqZW5kICE9IDAgJiYgIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmVuZCkpIHsKLSAgICAgICAgZW5kKys7Ci0gICAgfQotICAgIGNvbnN0IHNpemVfdCBsZW4gPSBlbmQtc3RyOwotCi0gICAgY29uc3QgY2hhciogcmVhbEVuZCA9IGVuZDsKLSAgICB3aGlsZSAoKnJlYWxFbmQgIT0gMCAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpyZWFsRW5kKSkgewotICAgICAgICByZWFsRW5kKys7Ci0gICAgfQotICAgIGlmICgqcmVhbEVuZCAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgdW5pdF9lbnRyeSogY3VyID0gdW5pdE5hbWVzOwotICAgIHdoaWxlIChjdXItPm5hbWUpIHsKLSAgICAgICAgaWYgKGxlbiA9PSBjdXItPmxlbiAmJiBzdHJuY21wKGN1ci0+bmFtZSwgc3RyLCBsZW4pID09IDApIHsKLSAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSA9IGN1ci0+dHlwZTsKLSAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhID0gY3VyLT51bml0IDw8IFJlc192YWx1ZTo6Q09NUExFWF9VTklUX1NISUZUOwotICAgICAgICAgICAgKm91dFNjYWxlID0gY3VyLT5zY2FsZTsKLSAgICAgICAgICAgICpvdXRFbmQgPSBlbmQ7Ci0gICAgICAgICAgICAvL3ByaW50ZigiRm91bmQgdW5pdCAlcyBmb3IgJXNcbiIsIGN1ci0+bmFtZSwgc3RyKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGN1cisrOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotCi1ib29sIFJlc1RhYmxlOjpzdHJpbmdUb0ludChjb25zdCBjaGFyMTZfdCogcywgc2l6ZV90IGxlbiwgUmVzX3ZhbHVlKiBvdXRWYWx1ZSkKLXsKLSAgICB3aGlsZSAobGVuID4gMCAmJiBpc3NwYWNlMTYoKnMpKSB7Ci0gICAgICAgIHMrKzsKLSAgICAgICAgbGVuLS07Ci0gICAgfQotCi0gICAgaWYgKGxlbiA8PSAwKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzaXplX3QgaSA9IDA7Ci0gICAgaW50MzJfdCB2YWwgPSAwOwotICAgIGJvb2wgbmVnID0gZmFsc2U7Ci0KLSAgICBpZiAoKnMgPT0gJy0nKSB7Ci0gICAgICAgIG5lZyA9IHRydWU7Ci0gICAgICAgIGkrKzsKLSAgICB9Ci0KLSAgICBpZiAoc1tpXSA8ICcwJyB8fCBzW2ldID4gJzknKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBEZWNpbWFsIG9yIGhleD8KLSAgICBpZiAoc1tpXSA9PSAnMCcgJiYgc1tpKzFdID09ICd4JykgewotICAgICAgICBpZiAob3V0VmFsdWUpCi0gICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YVR5cGUgPSBvdXRWYWx1ZS0+VFlQRV9JTlRfSEVYOwotICAgICAgICBpICs9IDI7Ci0gICAgICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgIWVycm9yKSB7Ci0gICAgICAgICAgICB2YWwgPSAodmFsKjE2KSArIGdldF9oZXgoc1tpXSwgJmVycm9yKTsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChvdXRWYWx1ZSkKLSAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSA9IG91dFZhbHVlLT5UWVBFX0lOVF9ERUM7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuKSB7Ci0gICAgICAgICAgICBpZiAoc1tpXSA8ICcwJyB8fCBzW2ldID4gJzknKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFsID0gKHZhbCoxMCkgKyBzW2ldLScwJzsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChuZWcpIHZhbCA9IC12YWw7Ci0KLSAgICB3aGlsZSAoaSA8IGxlbiAmJiBpc3NwYWNlMTYoc1tpXSkpIHsKLSAgICAgICAgaSsrOwotICAgIH0KLQotICAgIGlmIChpID09IGxlbikgewotICAgICAgICBpZiAob3V0VmFsdWUpCi0gICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IHZhbDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlc1RhYmxlOjpzdHJpbmdUb0Zsb2F0KGNvbnN0IGNoYXIxNl90KiBzLCBzaXplX3QgbGVuLCBSZXNfdmFsdWUqIG91dFZhbHVlKQotewotICAgIHdoaWxlIChsZW4gPiAwICYmIGlzc3BhY2UxNigqcykpIHsKLSAgICAgICAgcysrOwotICAgICAgICBsZW4tLTsKLSAgICB9Ci0KLSAgICBpZiAobGVuIDw9IDApIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNoYXIgYnVmWzEyOF07Ci0gICAgaW50IGk9MDsKLSAgICB3aGlsZSAobGVuID4gMCAmJiAqcyAhPSAwICYmIGkgPCAxMjYpIHsKLSAgICAgICAgaWYgKCpzID4gMjU1KSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnVmW2krK10gPSAqcysrOwotICAgICAgICBsZW4tLTsKLSAgICB9Ci0KLSAgICBpZiAobGVuID4gMCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChidWZbMF0gPCAnMCcgJiYgYnVmWzBdID4gJzknICYmIGJ1ZlswXSAhPSAnLicpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJ1ZltpXSA9IDA7Ci0gICAgY29uc3QgY2hhciogZW5kOwotICAgIGZsb2F0IGYgPSBzdHJ0b2YoYnVmLCAoY2hhcioqKSZlbmQpOwotCi0gICAgaWYgKCplbmQgIT0gMCAmJiAhaXNzcGFjZSgodW5zaWduZWQgY2hhcikqZW5kKSkgewotICAgICAgICAvLyBNaWdodCBiZSBhIHVuaXQuLi4KLSAgICAgICAgZmxvYXQgc2NhbGU7Ci0gICAgICAgIGlmIChwYXJzZV91bml0KGVuZCwgb3V0VmFsdWUsICZzY2FsZSwgJmVuZCkpIHsKLSAgICAgICAgICAgIGYgKj0gc2NhbGU7Ci0gICAgICAgICAgICBjb25zdCBib29sIG5lZyA9IGYgPCAwOwotICAgICAgICAgICAgaWYgKG5lZykgZiA9IC1mOwotICAgICAgICAgICAgdWludDY0X3QgYml0cyA9ICh1aW50NjRfdCkoZiooMTw8MjMpKy41Zik7Ci0gICAgICAgICAgICB1aW50MzJfdCByYWRpeDsKLSAgICAgICAgICAgIHVpbnQzMl90IHNoaWZ0OwotICAgICAgICAgICAgaWYgKChiaXRzJjB4N2ZmZmZmKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gQWx3YXlzIHVzZSAyM3AwIGlmIHRoZXJlIGlzIG5vIGZyYWN0aW9uLCBqdXN0IHRvIG1ha2UKLSAgICAgICAgICAgICAgICAvLyB0aGluZ3MgZWFzaWVyIHRvIHJlYWQuCi0gICAgICAgICAgICAgICAgcmFkaXggPSBSZXNfdmFsdWU6OkNPTVBMRVhfUkFESVhfMjNwMDsKLSAgICAgICAgICAgICAgICBzaGlmdCA9IDIzOwotICAgICAgICAgICAgfSBlbHNlIGlmICgoYml0cyYweGZmZmZmZmZmZmY4MDAwMDBMTCkgPT0gMCkgewotICAgICAgICAgICAgICAgIC8vIE1hZ25pdHVkZSBpcyB6ZXJvIC0tIGNhbiBmaXQgaW4gMCBiaXRzIG9mIHByZWNpc2lvbi4KLSAgICAgICAgICAgICAgICByYWRpeCA9IFJlc192YWx1ZTo6Q09NUExFWF9SQURJWF8wcDIzOwotICAgICAgICAgICAgICAgIHNoaWZ0ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGJpdHMmMHhmZmZmZmZmZjgwMDAwMDAwTEwpID09IDApIHsKLSAgICAgICAgICAgICAgICAvLyBNYWduaXR1ZGUgY2FuIGZpdCBpbiA4IGJpdHMgb2YgcHJlY2lzaW9uLgotICAgICAgICAgICAgICAgIHJhZGl4ID0gUmVzX3ZhbHVlOjpDT01QTEVYX1JBRElYXzhwMTU7Ci0gICAgICAgICAgICAgICAgc2hpZnQgPSA4OwotICAgICAgICAgICAgfSBlbHNlIGlmICgoYml0cyYweGZmZmZmZjgwMDAwMDAwMDBMTCkgPT0gMCkgewotICAgICAgICAgICAgICAgIC8vIE1hZ25pdHVkZSBjYW4gZml0IGluIDE2IGJpdHMgb2YgcHJlY2lzaW9uLgotICAgICAgICAgICAgICAgIHJhZGl4ID0gUmVzX3ZhbHVlOjpDT01QTEVYX1JBRElYXzE2cDc7Ci0gICAgICAgICAgICAgICAgc2hpZnQgPSAxNjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFnbml0dWRlIG5lZWRzIGVudGlyZSByYW5nZSwgc28gbm8gZnJhY3Rpb25hbCBwYXJ0LgotICAgICAgICAgICAgICAgIHJhZGl4ID0gUmVzX3ZhbHVlOjpDT01QTEVYX1JBRElYXzIzcDA7Ci0gICAgICAgICAgICAgICAgc2hpZnQgPSAyMzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludDMyX3QgbWFudGlzc2EgPSAoaW50MzJfdCkoCi0gICAgICAgICAgICAgICAgKGJpdHM+PnNoaWZ0KSAmIFJlc192YWx1ZTo6Q09NUExFWF9NQU5USVNTQV9NQVNLKTsKLSAgICAgICAgICAgIGlmIChuZWcpIHsKLSAgICAgICAgICAgICAgICBtYW50aXNzYSA9ICgtbWFudGlzc2EpICYgUmVzX3ZhbHVlOjpDT01QTEVYX01BTlRJU1NBX01BU0s7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSB8PSAKLSAgICAgICAgICAgICAgICAocmFkaXg8PFJlc192YWx1ZTo6Q09NUExFWF9SQURJWF9TSElGVCkKLSAgICAgICAgICAgICAgICB8IChtYW50aXNzYTw8UmVzX3ZhbHVlOjpDT01QTEVYX01BTlRJU1NBX1NISUZUKTsKLSAgICAgICAgICAgIC8vcHJpbnRmKCJJbnB1dCB2YWx1ZTogJWYgMHglMDE2THgsIG11bHQ6ICVmLCByYWRpeDogJWQsIHNoaWZ0OiAlZCwgZmluYWw6IDB4JTA4eFxuIiwKLSAgICAgICAgICAgIC8vICAgICAgIGYgKiAobmVnID8gLTEgOiAxKSwgYml0cywgZiooMTw8MjMpLAotICAgICAgICAgICAgLy8gICAgICAgcmFkaXgsIHNoaWZ0LCBvdXRWYWx1ZS0+ZGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgd2hpbGUgKCplbmQgIT0gMCAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSplbmQpKSB7Ci0gICAgICAgIGVuZCsrOwotICAgIH0KLQotICAgIGlmICgqZW5kID09IDApIHsKLSAgICAgICAgaWYgKG91dFZhbHVlKSB7Ci0gICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YVR5cGUgPSBvdXRWYWx1ZS0+VFlQRV9GTE9BVDsKLSAgICAgICAgICAgICooZmxvYXQqKSgmb3V0VmFsdWUtPmRhdGEpID0gZjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlc1RhYmxlOjpzdHJpbmdUb1ZhbHVlKFJlc192YWx1ZSogb3V0VmFsdWUsIFN0cmluZzE2KiBvdXRTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBzLCBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZXNlcnZlU3BhY2VzLCBib29sIGNvZXJjZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGF0dHJJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2KiBkZWZQYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NvciogYWNjZXNzb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFjY2Vzc29yQ29va2llLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhdHRyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmZvcmNlUHJpdmF0ZSkgY29uc3QKLXsKLSAgICBib29sIGxvY2FsaXphdGlvblNldHRpbmcgPSBhY2Nlc3NvciAhPSBOVUxMICYmIGFjY2Vzc29yLT5nZXRMb2NhbGl6YXRpb25TZXR0aW5nKCk7Ci0gICAgY29uc3QgY2hhciogZXJyb3JNc2cgPSBOVUxMOwotCi0gICAgb3V0VmFsdWUtPnNpemUgPSBzaXplb2YoUmVzX3ZhbHVlKTsKLSAgICBvdXRWYWx1ZS0+cmVzMCA9IDA7Ci0KLSAgICAvLyBGaXJzdCBzdHJpcCBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UuICBEbyB0aGlzIGJlZm9yZSBoYW5kbGluZwotICAgIC8vIGVzY2FwZXMsIHNvIHRoZXkgY2FuIGJlIHVzZWQgdG8gZm9yY2Ugd2hpdGVzcGFjZSBpbnRvIHRoZSBzdHJpbmcuCi0gICAgaWYgKCFwcmVzZXJ2ZVNwYWNlcykgewotICAgICAgICB3aGlsZSAobGVuID4gMCAmJiBpc3NwYWNlMTYoKnMpKSB7Ci0gICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICBsZW4tLTsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAobGVuID4gMCAmJiBpc3NwYWNlMTYoc1tsZW4tMV0pKSB7Ci0gICAgICAgICAgICBsZW4tLTsKLSAgICAgICAgfQotICAgICAgICAvLyBJZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCAnXCcsIHRoZW4gd2Uga2VlcCB0aGUgc3BhY2UgYWZ0ZXIgaXQuCi0gICAgICAgIGlmIChsZW4gPiAwICYmIHNbbGVuLTFdID09ICdcXCcgJiYgc1tsZW5dICE9IDApIHsKLSAgICAgICAgICAgIGxlbisrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy9wcmludGYoIlZhbHVlIGZvcjogJXNcbiIsIFN0cmluZzgocywgbGVuKS5zdHJpbmcoKSk7Ci0KLSAgICB1aW50MzJfdCBsMTBuUmVxID0gUmVzVGFibGVfbWFwOjpMMTBOX05PVF9SRVFVSVJFRDsKLSAgICB1aW50MzJfdCBhdHRyTWluID0gMHg4MDAwMDAwMCwgYXR0ck1heCA9IDB4N2ZmZmZmZmY7Ci0gICAgYm9vbCBmcm9tQWNjZXNzb3IgPSBmYWxzZTsKLSAgICBpZiAoYXR0cklEICE9IDAgJiYgIVJlc19JTlRFUk5BTElEKGF0dHJJRCkpIHsKLSAgICAgICAgY29uc3Qgc3NpemVfdCBwID0gZ2V0UmVzb3VyY2VQYWNrYWdlSW5kZXgoYXR0cklEKTsKLSAgICAgICAgY29uc3QgYmFnX2VudHJ5KiBiYWc7Ci0gICAgICAgIHNzaXplX3QgY250ID0gcCA+PSAwID8gbG9ja0JhZyhhdHRySUQsICZiYWcpIDogLTE7Ci0gICAgICAgIC8vcHJpbnRmKCJGb3IgYXR0ciAweCUwOHggZ290IGJhZyBvZiAlZFxuIiwgYXR0cklELCBjbnQpOwotICAgICAgICBpZiAoY250ID49IDApIHsKLSAgICAgICAgICAgIHdoaWxlIChjbnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgLy9wcmludGYoIkVudHJ5IDB4JTA4eCA9IDB4JTA4eFxuIiwgYmFnLT5tYXAubmFtZS5pZGVudCwgYmFnLT5tYXAudmFsdWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChiYWctPm1hcC5uYW1lLmlkZW50KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBSZXNUYWJsZV9tYXA6OkFUVFJfVFlQRToKLSAgICAgICAgICAgICAgICAgICAgYXR0clR5cGUgPSBiYWctPm1hcC52YWx1ZS5kYXRhOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFJlc1RhYmxlX21hcDo6QVRUUl9NSU46Ci0gICAgICAgICAgICAgICAgICAgIGF0dHJNaW4gPSBiYWctPm1hcC52YWx1ZS5kYXRhOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFJlc1RhYmxlX21hcDo6QVRUUl9NQVg6Ci0gICAgICAgICAgICAgICAgICAgIGF0dHJNYXggPSBiYWctPm1hcC52YWx1ZS5kYXRhOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFJlc1RhYmxlX21hcDo6QVRUUl9MMTBOOgotICAgICAgICAgICAgICAgICAgICBsMTBuUmVxID0gYmFnLT5tYXAudmFsdWUuZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJhZysrOwotICAgICAgICAgICAgICAgIGNudC0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdW5sb2NrQmFnKGJhZyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzb3IgJiYgYWNjZXNzb3ItPmdldEF0dHJpYnV0ZVR5cGUoYXR0cklELCAmYXR0clR5cGUpKSB7Ci0gICAgICAgICAgICBmcm9tQWNjZXNzb3IgPSB0cnVlOwotICAgICAgICAgICAgaWYgKGF0dHJUeXBlID09IFJlc1RhYmxlX21hcDo6VFlQRV9FTlVNCi0gICAgICAgICAgICAgICAgICAgIHx8IGF0dHJUeXBlID09IFJlc1RhYmxlX21hcDo6VFlQRV9GTEFHUwotICAgICAgICAgICAgICAgICAgICB8fCBhdHRyVHlwZSA9PSBSZXNUYWJsZV9tYXA6OlRZUEVfSU5URUdFUikgewotICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5nZXRBdHRyaWJ1dGVNaW4oYXR0cklELCAmYXR0ck1pbik7Ci0gICAgICAgICAgICAgICAgYWNjZXNzb3ItPmdldEF0dHJpYnV0ZU1heChhdHRySUQsICZhdHRyTWF4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChsb2NhbGl6YXRpb25TZXR0aW5nKSB7Ci0gICAgICAgICAgICAgICAgbDEwblJlcSA9IGFjY2Vzc29yLT5nZXRBdHRyaWJ1dGVMMTBOKGF0dHJJRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBib29sIGNhblN0cmluZ0NvZXJjZSA9Ci0gICAgICAgIGNvZXJjZVR5cGUgJiYgKGF0dHJUeXBlJlJlc1RhYmxlX21hcDo6VFlQRV9TVFJJTkcpICE9IDA7Ci0KLSAgICBpZiAoKnMgPT0gJ0AnKSB7Ci0gICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSA9IG91dFZhbHVlLT5UWVBFX1JFRkVSRU5DRTsKLQotICAgICAgICAvLyBOb3RlOiB3ZSBkb24ndCBjaGVjayBhdHRyVHlwZSBoZXJlIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBjYW4KLSAgICAgICAgLy8gYmUgdG8gYW55IG90aGVyIHR5cGU7IHdlIGp1c3QgbmVlZCB0byBjb3VudCBvbiB0aGUgY2xpZW50IG1ha2luZwotICAgICAgICAvLyBzdXJlIHRoZSByZWZlcmVuY2VkIHR5cGUgaXMgY29ycmVjdC4KLSAgICAgICAgCi0gICAgICAgIC8vcHJpbnRmKCJMb29raW5nIHVwIHJlZjogJXNcbiIsIFN0cmluZzgocywgbGVuKS5zdHJpbmcoKSk7Ci0KLSAgICAgICAgLy8gSXQncyBhIHJlZmVyZW5jZSEKLSAgICAgICAgaWYgKGxlbiA9PSA1ICYmIHNbMV09PSduJyAmJiBzWzJdPT0ndScgJiYgc1szXT09J2wnICYmIHNbNF09PSdsJykgewotICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGEgPSAwOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBib29sIGNyZWF0ZUlmTm90Rm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiByZXNvdXJjZVJlZk5hbWU7Ci0gICAgICAgICAgICBpbnQgcmVzb3VyY2VOYW1lTGVuOwotICAgICAgICAgICAgaWYgKGxlbiA+IDIgJiYgc1sxXSA9PSAnKycpIHsKLSAgICAgICAgICAgICAgICBjcmVhdGVJZk5vdEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXNvdXJjZVJlZk5hbWUgPSBzICsgMjsKLSAgICAgICAgICAgICAgICByZXNvdXJjZU5hbWVMZW4gPSBsZW4gLSAyOwotICAgICAgICAgICAgfSBlbHNlIGlmIChsZW4gPiAyICYmIHNbMV0gPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgZW5mb3JjZVByaXZhdGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICByZXNvdXJjZVJlZk5hbWUgPSBzICsgMjsKLSAgICAgICAgICAgICAgICByZXNvdXJjZU5hbWVMZW4gPSBsZW4gLSAyOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjcmVhdGVJZk5vdEZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2VSZWZOYW1lID0gcyArIDE7Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lTGVuID0gbGVuIC0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZzE2IHBhY2thZ2UsIHR5cGUsIG5hbWU7Ci0gICAgICAgICAgICBpZiAoIWV4cGFuZFJlc291cmNlUmVmKHJlc291cmNlUmVmTmFtZSxyZXNvdXJjZU5hbWVMZW4sICZwYWNrYWdlLCAmdHlwZSwgJm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZlR5cGUsIGRlZlBhY2thZ2UsICZlcnJvck1zZykpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWNjZXNzb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+cmVwb3J0RXJyb3IoYWNjZXNzb3JDb29raWUsIGVycm9yTXNnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1aW50MzJfdCBzcGVjRmxhZ3MgPSAwOwotICAgICAgICAgICAgdWludDMyX3QgcmlkID0gaWRlbnRpZmllckZvck5hbWUobmFtZS5zdHJpbmcoKSwgbmFtZS5zaXplKCksIHR5cGUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgIHR5cGUuc2l6ZSgpLCBwYWNrYWdlLnN0cmluZygpLCBwYWNrYWdlLnNpemUoKSwgJnNwZWNGbGFncyk7Ci0gICAgICAgICAgICBpZiAocmlkICE9IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoZW5mb3JjZVByaXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChzcGVjRmxhZ3MmUmVzVGFibGVfdHlwZVNwZWM6OlNQRUNfUFVCTElDKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWNjZXNzb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5yZXBvcnRFcnJvcihhY2Nlc3NvckNvb2tpZSwgIlJlc291cmNlIGlzIG5vdCBwdWJsaWMuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3NvcikgewotICAgICAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IHJpZDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJpZCA9IFJlc19NQUtFSUQoCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5nZXRSZW1hcHBlZFBhY2thZ2UoUmVzX0dFVFBBQ0tBR0UocmlkKSksCi0gICAgICAgICAgICAgICAgICAgIFJlc19HRVRUWVBFKHJpZCksIFJlc19HRVRFTlRSWShyaWQpKTsKLSAgICAgICAgICAgICAgICBUQUJMRV9OT0lTWShwcmludGYoIkluY2wgJXM6JXMvJXM6IDB4JTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChwYWNrYWdlKS5zdHJpbmcoKSwgU3RyaW5nOCh0eXBlKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChuYW1lKS5zdHJpbmcoKSwgcmlkKSk7Ci0gICAgICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGEgPSByaWQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChhY2Nlc3NvcikgewotICAgICAgICAgICAgICAgIHVpbnQzMl90IHJpZCA9IGFjY2Vzc29yLT5nZXRDdXN0b21SZXNvdXJjZVdpdGhDcmVhdGlvbihwYWNrYWdlLCB0eXBlLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVJZk5vdEZvdW5kKTsKLSAgICAgICAgICAgICAgICBpZiAocmlkICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgVEFCTEVfTk9JU1kocHJpbnRmKCJQY2tnICVzOiVzLyVzOiAweCUwOHhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHBhY2thZ2UpLnN0cmluZygpLCBTdHJpbmc4KHR5cGUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChuYW1lKS5zdHJpbmcoKSwgcmlkKSk7Ci0gICAgICAgICAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhID0gcmlkOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWNjZXNzb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgYWNjZXNzb3ItPnJlcG9ydEVycm9yKGFjY2Vzc29yQ29va2llLCAiTm8gcmVzb3VyY2UgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBuYW1lIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIGlmIHdlIGdvdCB0byBoZXJlLCBhbmQgbG9jYWxpemF0aW9uIGlzIHJlcXVpcmVkIGFuZCBpdCdzIG5vdCBhIHJlZmVyZW5jZSwKLSAgICAvLyBjb21wbGFpbiBhbmQgYmFpbC4KLSAgICBpZiAobDEwblJlcSA9PSBSZXNUYWJsZV9tYXA6OkwxME5fU1VHR0VTVEVEKSB7Ci0gICAgICAgIGlmIChsb2NhbGl6YXRpb25TZXR0aW5nKSB7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5yZXBvcnRFcnJvcihhY2Nlc3NvckNvb2tpZSwgIlRoaXMgYXR0cmlidXRlIG11c3QgYmUgbG9jYWxpemVkLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmICgqcyA9PSAnIycpIHsKLSAgICAgICAgLy8gSXQncyBhIGNvbG9yISAgQ29udmVydCB0byBhbiBpbnRlZ2VyIG9mIHRoZSBmb3JtIDB4YWFycmdnYmIuCi0gICAgICAgIHVpbnQzMl90IGNvbG9yID0gMDsKLSAgICAgICAgYm9vbCBlcnJvciA9IGZhbHNlOwotICAgICAgICBpZiAobGVuID09IDQpIHsKLSAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSA9IG91dFZhbHVlLT5UWVBFX0lOVF9DT0xPUl9SR0I0OwotICAgICAgICAgICAgY29sb3IgfD0gMHhGRjAwMDAwMDsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1sxXSwgJmVycm9yKSA8PCAyMDsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1sxXSwgJmVycm9yKSA8PCAxNjsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1syXSwgJmVycm9yKSA8PCAxMjsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1syXSwgJmVycm9yKSA8PCA4OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzNdLCAmZXJyb3IpIDw8IDQ7Ci0gICAgICAgICAgICBjb2xvciB8PSBnZXRfaGV4KHNbM10sICZlcnJvcik7Ci0gICAgICAgIH0gZWxzZSBpZiAobGVuID09IDUpIHsKLSAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSA9IG91dFZhbHVlLT5UWVBFX0lOVF9DT0xPUl9BUkdCNDsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1sxXSwgJmVycm9yKSA8PCAyODsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1sxXSwgJmVycm9yKSA8PCAyNDsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1syXSwgJmVycm9yKSA8PCAyMDsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1syXSwgJmVycm9yKSA8PCAxNjsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1szXSwgJmVycm9yKSA8PCAxMjsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1szXSwgJmVycm9yKSA8PCA4OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzRdLCAmZXJyb3IpIDw8IDQ7Ci0gICAgICAgICAgICBjb2xvciB8PSBnZXRfaGV4KHNbNF0sICZlcnJvcik7Ci0gICAgICAgIH0gZWxzZSBpZiAobGVuID09IDcpIHsKLSAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSA9IG91dFZhbHVlLT5UWVBFX0lOVF9DT0xPUl9SR0I4OwotICAgICAgICAgICAgY29sb3IgfD0gMHhGRjAwMDAwMDsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1sxXSwgJmVycm9yKSA8PCAyMDsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1syXSwgJmVycm9yKSA8PCAxNjsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1szXSwgJmVycm9yKSA8PCAxMjsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1s0XSwgJmVycm9yKSA8PCA4OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzVdLCAmZXJyb3IpIDw8IDQ7Ci0gICAgICAgICAgICBjb2xvciB8PSBnZXRfaGV4KHNbNl0sICZlcnJvcik7Ci0gICAgICAgIH0gZWxzZSBpZiAobGVuID09IDkpIHsKLSAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhVHlwZSA9IG91dFZhbHVlLT5UWVBFX0lOVF9DT0xPUl9BUkdCODsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1sxXSwgJmVycm9yKSA8PCAyODsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1syXSwgJmVycm9yKSA8PCAyNDsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1szXSwgJmVycm9yKSA8PCAyMDsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1s0XSwgJmVycm9yKSA8PCAxNjsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1s1XSwgJmVycm9yKSA8PCAxMjsKLSAgICAgICAgICAgIGNvbG9yIHw9IGdldF9oZXgoc1s2XSwgJmVycm9yKSA8PCA4OwotICAgICAgICAgICAgY29sb3IgfD0gZ2V0X2hleChzWzddLCAmZXJyb3IpIDw8IDQ7Ci0gICAgICAgICAgICBjb2xvciB8PSBnZXRfaGV4KHNbOF0sICZlcnJvcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlcnJvciA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFlcnJvcikgewotICAgICAgICAgICAgaWYgKChhdHRyVHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfQ09MT1IpID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNhblN0cmluZ0NvZXJjZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYWNjZXNzb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnJlcG9ydEVycm9yKGFjY2Vzc29yQ29va2llLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29sb3IgdHlwZXMgbm90IGFsbG93ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IGNvbG9yOwotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJDb2xvciBpbnB1dD0lcywgb3V0cHV0PTB4JXhcbiIsIFN0cmluZzgocywgbGVuKS5zdHJpbmcoKSwgY29sb3IpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKChhdHRyVHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfQ09MT1IpICE9IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoYWNjZXNzb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+cmVwb3J0RXJyb3IoYWNjZXNzb3JDb29raWUsICJDb2xvciB2YWx1ZSBub3QgdmFsaWQgLS0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBtdXN0IGJlICNyZ2IsICNhcmdiLCAjcnJnZ2JiLCBvciAjYWFycmdnYmIiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgI2lmIDAKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBDb2xvciBJRCAlcyB2YWx1ZSAlcyBpcyBub3QgdmFsaWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiUmVzb3VyY2UgRmlsZSIsIC8vKGNvbnN0IGNoYXIqKWluLT5nZXRQcmludGFibGVTb3VyY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoKmN1clRhZykuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHMsIGxlbikuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICNlbmRpZgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgqcyA9PSAnPycpIHsKLSAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlID0gb3V0VmFsdWUtPlRZUEVfQVRUUklCVVRFOwotCi0gICAgICAgIC8vIE5vdGU6IHdlIGRvbid0IGNoZWNrIGF0dHJUeXBlIGhlcmUgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIGNhbgotICAgICAgICAvLyBiZSB0byBhbnkgb3RoZXIgdHlwZTsgd2UganVzdCBuZWVkIHRvIGNvdW50IG9uIHRoZSBjbGllbnQgbWFraW5nCi0gICAgICAgIC8vIHN1cmUgdGhlIHJlZmVyZW5jZWQgdHlwZSBpcyBjb3JyZWN0LgotCi0gICAgICAgIC8vcHJpbnRmKCJMb29raW5nIHVwIGF0dHI6ICVzXG4iLCBTdHJpbmc4KHMsIGxlbikuc3RyaW5nKCkpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcxNiBhdHRyMTYoImF0dHIiKTsKLSAgICAgICAgU3RyaW5nMTYgcGFja2FnZSwgdHlwZSwgbmFtZTsKLSAgICAgICAgaWYgKCFleHBhbmRSZXNvdXJjZVJlZihzKzEsIGxlbi0xLCAmcGFja2FnZSwgJnR5cGUsICZuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdHRyMTYsIGRlZlBhY2thZ2UsICZlcnJvck1zZykpIHsKLSAgICAgICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgYWNjZXNzb3ItPnJlcG9ydEVycm9yKGFjY2Vzc29yQ29va2llLCBlcnJvck1zZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvL3ByaW50ZigiUGtnOiAlcywgVHlwZTogJXMsIE5hbWU6ICVzXG4iLAotICAgICAgICAvLyAgICAgICBTdHJpbmc4KHBhY2thZ2UpLnN0cmluZygpLCBTdHJpbmc4KHR5cGUpLnN0cmluZygpLAotICAgICAgICAvLyAgICAgICBTdHJpbmc4KG5hbWUpLnN0cmluZygpKTsKLSAgICAgICAgdWludDMyX3Qgc3BlY0ZsYWdzID0gMDsKLSAgICAgICAgdWludDMyX3QgcmlkID0gCi0gICAgICAgICAgICBpZGVudGlmaWVyRm9yTmFtZShuYW1lLnN0cmluZygpLCBuYW1lLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuc3RyaW5nKCksIHR5cGUuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS5zdHJpbmcoKSwgcGFja2FnZS5zaXplKCksICZzcGVjRmxhZ3MpOwotICAgICAgICBpZiAocmlkICE9IDApIHsKLSAgICAgICAgICAgIGlmIChlbmZvcmNlUHJpdmF0ZSkgewotICAgICAgICAgICAgICAgIGlmICgoc3BlY0ZsYWdzJlJlc1RhYmxlX3R5cGVTcGVjOjpTUEVDX1BVQkxJQykgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYWNjZXNzb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnJlcG9ydEVycm9yKGFjY2Vzc29yQ29va2llLCAiQXR0cmlidXRlIGlzIG5vdCBwdWJsaWMuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghYWNjZXNzb3IpIHsKLSAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IHJpZDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJpZCA9IFJlc19NQUtFSUQoCi0gICAgICAgICAgICAgICAgYWNjZXNzb3ItPmdldFJlbWFwcGVkUGFja2FnZShSZXNfR0VUUEFDS0FHRShyaWQpKSwKLSAgICAgICAgICAgICAgICBSZXNfR0VUVFlQRShyaWQpLCBSZXNfR0VURU5UUlkocmlkKSk7Ci0gICAgICAgICAgICAvL3ByaW50ZigiSW5jbCAlczolcy8lczogMHglMDh4XG4iLAotICAgICAgICAgICAgLy8gICAgICAgU3RyaW5nOChwYWNrYWdlKS5zdHJpbmcoKSwgU3RyaW5nOCh0eXBlKS5zdHJpbmcoKSwKLSAgICAgICAgICAgIC8vICAgICAgIFN0cmluZzgobmFtZSkuc3RyaW5nKCksIHJpZCk7Ci0gICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IHJpZDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFjY2Vzc29yKSB7Ci0gICAgICAgICAgICB1aW50MzJfdCByaWQgPSBhY2Nlc3Nvci0+Z2V0Q3VzdG9tUmVzb3VyY2UocGFja2FnZSwgdHlwZSwgbmFtZSk7Ci0gICAgICAgICAgICBpZiAocmlkICE9IDApIHsKLSAgICAgICAgICAgICAgICAvL3ByaW50ZigiTWluZSAlczolcy8lczogMHglMDh4XG4iLAotICAgICAgICAgICAgICAgIC8vICAgICAgIFN0cmluZzgocGFja2FnZSkuc3RyaW5nKCksIFN0cmluZzgodHlwZSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgLy8gICAgICAgU3RyaW5nOChuYW1lKS5zdHJpbmcoKSwgcmlkKTsKLSAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IHJpZDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBhY2Nlc3Nvci0+cmVwb3J0RXJyb3IoYWNjZXNzb3JDb29raWUsICJObyByZXNvdXJjZSBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIG5hbWUiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHN0cmluZ1RvSW50KHMsIGxlbiwgb3V0VmFsdWUpKSB7Ci0gICAgICAgIGlmICgoYXR0clR5cGUmUmVzVGFibGVfbWFwOjpUWVBFX0lOVEVHRVIpID09IDApIHsKLSAgICAgICAgICAgIC8vIElmIHRoaXMgdHlwZSBkb2VzIG5vdCBhbGxvdyBpbnRlZ2VycywgYnV0IGRvZXMgYWxsb3cgZmxvYXRzLAotICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoIG9uIHRoaXMgZXJyb3IgY2FzZSBiZWNhdXNlIHRoZSBmbG9hdCB0eXBlIHNob3VsZAotICAgICAgICAgICAgLy8gYmUgYWJsZSB0byBhY2NlcHQgYW55IGludGVnZXIgdmFsdWUuCi0gICAgICAgICAgICBpZiAoIWNhblN0cmluZ0NvZXJjZSAmJiAoYXR0clR5cGUmUmVzVGFibGVfbWFwOjpUWVBFX0ZMT0FUKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFjY2Vzc29yICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnJlcG9ydEVycm9yKGFjY2Vzc29yQ29va2llLCAiSW50ZWdlciB0eXBlcyBub3QgYWxsb3dlZCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKChpbnQzMl90KW91dFZhbHVlLT5kYXRhKSA8ICgoaW50MzJfdClhdHRyTWluKQotICAgICAgICAgICAgICAgICAgICB8fCAoKGludDMyX3Qpb3V0VmFsdWUtPmRhdGEpID4gKChpbnQzMl90KWF0dHJNYXgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFjY2Vzc29yICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnJlcG9ydEVycm9yKGFjY2Vzc29yQ29va2llLCAiSW50ZWdlciB2YWx1ZSBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3RyaW5nVG9GbG9hdChzLCBsZW4sIG91dFZhbHVlKSkgewotICAgICAgICBpZiAob3V0VmFsdWUtPmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9ESU1FTlNJT04pIHsKLSAgICAgICAgICAgIGlmICgoYXR0clR5cGUmUmVzVGFibGVfbWFwOjpUWVBFX0RJTUVOU0lPTikgIT0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjYW5TdHJpbmdDb2VyY2UpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWNjZXNzb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+cmVwb3J0RXJyb3IoYWNjZXNzb3JDb29raWUsICJEaW1lbnNpb24gdHlwZXMgbm90IGFsbG93ZWQiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG91dFZhbHVlLT5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfRlJBQ1RJT04pIHsKLSAgICAgICAgICAgIGlmICgoYXR0clR5cGUmUmVzVGFibGVfbWFwOjpUWVBFX0ZSQUNUSU9OKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWNhblN0cmluZ0NvZXJjZSkgewotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5yZXBvcnRFcnJvcihhY2Nlc3NvckNvb2tpZSwgIkZyYWN0aW9uIHR5cGVzIG5vdCBhbGxvd2VkIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgoYXR0clR5cGUmUmVzVGFibGVfbWFwOjpUWVBFX0ZMT0FUKSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoIWNhblN0cmluZ0NvZXJjZSkgewotICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5yZXBvcnRFcnJvcihhY2Nlc3NvckNvb2tpZSwgIkZsb2F0IHR5cGVzIG5vdCBhbGxvd2VkIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxlbiA9PSA0KSB7Ci0gICAgICAgIGlmICgoc1swXSA9PSAndCcgfHwgc1swXSA9PSAnVCcpICYmCi0gICAgICAgICAgICAoc1sxXSA9PSAncicgfHwgc1sxXSA9PSAnUicpICYmCi0gICAgICAgICAgICAoc1syXSA9PSAndScgfHwgc1syXSA9PSAnVScpICYmCi0gICAgICAgICAgICAoc1szXSA9PSAnZScgfHwgc1szXSA9PSAnRScpKSB7Ci0gICAgICAgICAgICBpZiAoKGF0dHJUeXBlJlJlc1RhYmxlX21hcDo6VFlQRV9CT09MRUFOKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYW5TdHJpbmdDb2VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc29yICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5yZXBvcnRFcnJvcihhY2Nlc3NvckNvb2tpZSwgIkJvb2xlYW4gdHlwZXMgbm90IGFsbG93ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YVR5cGUgPSBvdXRWYWx1ZS0+VFlQRV9JTlRfQk9PTEVBTjsKLSAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9ICh1aW50MzJfdCktMTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsZW4gPT0gNSkgewotICAgICAgICBpZiAoKHNbMF0gPT0gJ2YnIHx8IHNbMF0gPT0gJ0YnKSAmJgotICAgICAgICAgICAgKHNbMV0gPT0gJ2EnIHx8IHNbMV0gPT0gJ0EnKSAmJgotICAgICAgICAgICAgKHNbMl0gPT0gJ2wnIHx8IHNbMl0gPT0gJ0wnKSAmJgotICAgICAgICAgICAgKHNbM10gPT0gJ3MnIHx8IHNbM10gPT0gJ1MnKSAmJgotICAgICAgICAgICAgKHNbNF0gPT0gJ2UnIHx8IHNbNF0gPT0gJ0UnKSkgewotICAgICAgICAgICAgaWYgKChhdHRyVHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfQk9PTEVBTikgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmICghY2FuU3RyaW5nQ29lcmNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+cmVwb3J0RXJyb3IoYWNjZXNzb3JDb29raWUsICJCb29sZWFuIHR5cGVzIG5vdCBhbGxvd2VkIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlID0gb3V0VmFsdWUtPlRZUEVfSU5UX0JPT0xFQU47Ci0gICAgICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGEgPSAwOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKChhdHRyVHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfRU5VTSkgIT0gMCkgewotICAgICAgICBjb25zdCBzc2l6ZV90IHAgPSBnZXRSZXNvdXJjZVBhY2thZ2VJbmRleChhdHRySUQpOwotICAgICAgICBjb25zdCBiYWdfZW50cnkqIGJhZzsKLSAgICAgICAgc3NpemVfdCBjbnQgPSBwID49IDAgPyBsb2NrQmFnKGF0dHJJRCwgJmJhZykgOiAtMTsKLSAgICAgICAgLy9wcmludGYoIkdvdCAlZCBmb3IgZW51bVxuIiwgY250KTsKLSAgICAgICAgaWYgKGNudCA+PSAwKSB7Ci0gICAgICAgICAgICByZXNvdXJjZV9uYW1lIHJuYW1lOwotICAgICAgICAgICAgd2hpbGUgKGNudCA+IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoIVJlc19JTlRFUk5BTElEKGJhZy0+bWFwLm5hbWUuaWRlbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJUcnlpbmcgYXR0ciAjJTA4eFxuIiwgYmFnLT5tYXAubmFtZS5pZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnZXRSZXNvdXJjZU5hbWUoYmFnLT5tYXAubmFtZS5pZGVudCwgZmFsc2UsICZybmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICNpZiAwCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIk1hdGNoaW5nICVzIGFnYWluc3QgJXMgKDB4JTA4eClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChzLCBsZW4pLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocm5hbWUubmFtZSwgcm5hbWUubmFtZUxlbikuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFnLT5tYXAubmFtZS5pZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ6Y21wMTYocywgbGVuLCBybmFtZS5uYW1lLCBybmFtZS5uYW1lTGVuKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlID0gYmFnLT5tYXAudmFsdWUuZGF0YVR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGEgPSBiYWctPm1hcC52YWx1ZS5kYXRhOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubG9ja0JhZyhiYWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJhZysrOwotICAgICAgICAgICAgICAgIGNudC0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdW5sb2NrQmFnKGJhZyk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZnJvbUFjY2Vzc29yKSB7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzb3ItPmdldEF0dHJpYnV0ZUVudW0oYXR0cklELCBzLCBsZW4sIG91dFZhbHVlKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKChhdHRyVHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfRkxBR1MpICE9IDApIHsKLSAgICAgICAgY29uc3Qgc3NpemVfdCBwID0gZ2V0UmVzb3VyY2VQYWNrYWdlSW5kZXgoYXR0cklEKTsKLSAgICAgICAgY29uc3QgYmFnX2VudHJ5KiBiYWc7Ci0gICAgICAgIHNzaXplX3QgY250ID0gcCA+PSAwID8gbG9ja0JhZyhhdHRySUQsICZiYWcpIDogLTE7Ci0gICAgICAgIC8vcHJpbnRmKCJHb3QgJWQgZm9yIGZsYWdzXG4iLCBjbnQpOwotICAgICAgICBpZiAoY250ID49IDApIHsKLSAgICAgICAgICAgIGJvb2wgZmFpbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICByZXNvdXJjZV9uYW1lIHJuYW1lOwotICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlID0gUmVzX3ZhbHVlOjpUWVBFX0lOVF9IRVg7Ci0gICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IDA7Ci0gICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogZW5kID0gcyArIGxlbjsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBwb3MgPSBzOwotICAgICAgICAgICAgd2hpbGUgKHBvcyA8IGVuZCAmJiAhZmFpbGVkKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHN0YXJ0ID0gcG9zOwotICAgICAgICAgICAgICAgIHBvcysrOwotICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBlbmQgJiYgKnBvcyAhPSAnfCcpIHsKLSAgICAgICAgICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJMb29raW5nIGZvcjogJXNcbiIsIFN0cmluZzgoc3RhcnQsIHBvcy1zdGFydCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGNvbnN0IGJhZ19lbnRyeSogYmFnaSA9IGJhZzsKLSAgICAgICAgICAgICAgICBzc2l6ZV90IGk7Ci0gICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8Y250OyBpKyssIGJhZ2krKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIVJlc19JTlRFUk5BTElEKGJhZ2ktPm1hcC5uYW1lLmlkZW50KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIlRyeWluZyBhdHRyICMlMDh4XG4iLCBiYWdpLT5tYXAubmFtZS5pZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0UmVzb3VyY2VOYW1lKGJhZ2ktPm1hcC5uYW1lLmlkZW50LCBmYWxzZSwgJnJuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICNpZiAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJNYXRjaGluZyAlcyBhZ2FpbnN0ICVzICgweCUwOHgpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHN0YXJ0LHBvcy1zdGFydCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocm5hbWUubmFtZSwgcm5hbWUubmFtZUxlbikuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZ2ktPm1hcC5uYW1lLmlkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyemNtcDE2KHN0YXJ0LCBwb3Mtc3RhcnQsIHJuYW1lLm5hbWUsIHJuYW1lLm5hbWVMZW4pID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGEgfD0gYmFnaS0+bWFwLnZhbHVlLmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBjbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRGlkbid0IGZpbmQgdGhpcyBmbGFnIGlkZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChwb3MgPCBlbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdW5sb2NrQmFnKGJhZyk7Ci0gICAgICAgICAgICBpZiAoIWZhaWxlZCkgewotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJGaW5hbCBmbGFnIHZhbHVlOiAweCVseFxuIiwgb3V0VmFsdWUtPmRhdGEpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLQotICAgICAgICBpZiAoZnJvbUFjY2Vzc29yKSB7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzb3ItPmdldEF0dHJpYnV0ZUZsYWdzKGF0dHJJRCwgcywgbGVuLCBvdXRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAvL3ByaW50ZigiRmluYWwgZmxhZyB2YWx1ZTogMHglbHhcbiIsIG91dFZhbHVlLT5kYXRhKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgoYXR0clR5cGUmUmVzVGFibGVfbWFwOjpUWVBFX1NUUklORykgPT0gMCkgewotICAgICAgICBpZiAoYWNjZXNzb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgYWNjZXNzb3ItPnJlcG9ydEVycm9yKGFjY2Vzc29yQ29va2llLCAiU3RyaW5nIHR5cGVzIG5vdCBhbGxvd2VkIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEdlbmVyaWMgc3RyaW5nIGhhbmRsaW5nLi4uCi0gICAgb3V0VmFsdWUtPmRhdGFUeXBlID0gb3V0VmFsdWUtPlRZUEVfU1RSSU5HOwotICAgIGlmIChvdXRTdHJpbmcpIHsKLSAgICAgICAgYm9vbCBmYWlsZWQgPSBjb2xsZWN0U3RyaW5nKG91dFN0cmluZywgcywgbGVuLCBwcmVzZXJ2ZVNwYWNlcywgJmVycm9yTXNnKTsKLSAgICAgICAgaWYgKGFjY2Vzc29yICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGFjY2Vzc29yLT5yZXBvcnRFcnJvcihhY2Nlc3NvckNvb2tpZSwgZXJyb3JNc2cpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWlsZWQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVzVGFibGU6OmNvbGxlY3RTdHJpbmcoU3RyaW5nMTYqIG91dFN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHMsIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlc2VydmVTcGFjZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBvdXRFcnJvck1zZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmQpCi17Ci0gICAgU3RyaW5nMTYgdG1wOwotCi0gICAgY2hhciBxdW90ZWQgPSAwOwotICAgIGNvbnN0IGNoYXIxNl90KiBwID0gczsKLSAgICB3aGlsZSAocCA8IChzK2xlbikpIHsKLSAgICAgICAgd2hpbGUgKHAgPCAocytsZW4pKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyMTZfdCBjID0gKnA7Ci0gICAgICAgICAgICBpZiAoYyA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlU3BhY2VzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHF1b3RlZCA9PSAwICYmIGlzc3BhY2UxNihjKQotICAgICAgICAgICAgICAgICAgICAmJiAoYyAhPSAnICcgfHwgaXNzcGFjZTE2KCoocCsxKSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnIicgJiYgKHF1b3RlZCA9PSAwIHx8IHF1b3RlZCA9PSAnIicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXCcnICYmIChxdW90ZWQgPT0gMCB8fCBxdW90ZWQgPT0gJ1wnJykpIHsKLSAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICogSW4gcHJhY3RpY2UsIHdoZW4gcGVvcGxlIHdyaXRlICcgaW5zdGVhZCBvZiBcJwotICAgICAgICAgICAgICAgICAgICAgKiBpbiBhIHN0cmluZywgdGhleSBhcmUgZG9pbmcgaXQgYnkgYWNjaWRlbnQKLSAgICAgICAgICAgICAgICAgICAgICogaW5zdGVhZCBvZiByZWFsbHkgbWVhbmluZyB0byB1c2UgJyBhcyBhIHF1b3RpbmcKLSAgICAgICAgICAgICAgICAgICAgICogY2hhcmFjdGVyLiAgV2FybiB0aGVtIHNvIHRoZXkgZG9uJ3QgbG9zZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChvdXRFcnJvck1zZykgewotICAgICAgICAgICAgICAgICAgICAgICAgKm91dEVycm9yTXNnID0gIkFwb3N0cm9waGUgbm90IHByZWNlZGVkIGJ5IFxcIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcCsrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwIDwgKHMrbGVuKSkgewotICAgICAgICAgICAgaWYgKHAgPiBzKSB7Ci0gICAgICAgICAgICAgICAgdG1wLmFwcGVuZChTdHJpbmcxNihzLCBwLXMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcHJlc2VydmVTcGFjZXMgJiYgKCpwID09ICciJyB8fCAqcCA9PSAnXCcnKSkgewotICAgICAgICAgICAgICAgIGlmIChxdW90ZWQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBxdW90ZWQgPSAqcDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBxdW90ZWQgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFwcmVzZXJ2ZVNwYWNlcyAmJiBpc3NwYWNlMTYoKnApKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3BhY2Ugb3V0c2lkZSBvZiBhIHF1b3RlIC0tIGNvbnN1bWUgYWxsIHNwYWNlcyBhbmQKLSAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhIHNpbmdsZSBwbGFpbiBzcGFjZSBjaGFyLgotICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQoU3RyaW5nMTYoIiAiKSk7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgKHMrbGVuKSAmJiBpc3NwYWNlMTYoKnApKSB7Ci0gICAgICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdcXCcpIHsKLSAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgaWYgKHAgPCAocytsZW4pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoKnApIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXBwZW5kKFN0cmluZzE2KCJcdCIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICduJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQoU3RyaW5nMTYoIlxuIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJyMnOgotICAgICAgICAgICAgICAgICAgICAgICAgdG1wLmFwcGVuZChTdHJpbmcxNigiIyIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdAJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQoU3RyaW5nMTYoIkAiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnPyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXBwZW5kKFN0cmluZzE2KCI/IikpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJyInOgotICAgICAgICAgICAgICAgICAgICAgICAgdG1wLmFwcGVuZChTdHJpbmcxNigiXCIiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnXCcnOgotICAgICAgICAgICAgICAgICAgICAgICAgdG1wLmFwcGVuZChTdHJpbmcxNigiJyIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdcXCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXBwZW5kKFN0cmluZzE2KCJcXCIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcjE2X3QgY2hyID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBpID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgNCAmJiBwWzFdICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqcCA+PSAnMCcgJiYgKnAgPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAqcCAtICcwJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCpwID49ICdhJyAmJiAqcCA8PSAnZicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICpwIC0gJ2EnICsgMTA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgqcCA+PSAnQScgJiYgKnAgPD0gJ0YnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAqcCAtICdBJyArIDEwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdXRFcnJvck1zZykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm91dEVycm9yTXNnID0gIkJhZCBjaGFyYWN0ZXIgaW4gXFx1IHVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNociA9IChjaHI8PDQpIHwgYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQoU3RyaW5nMTYoJmNociwgMSkpOwotICAgICAgICAgICAgICAgICAgICB9IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIHVua25vd24gZXNjYXBlIGNoYXJzLgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlbiAtPSAocC1zKTsKLSAgICAgICAgICAgIHMgPSBwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRtcC5zaXplKCkgIT0gMCkgewotICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgdG1wLmFwcGVuZChTdHJpbmcxNihzLCBsZW4pKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXBwZW5kKSB7Ci0gICAgICAgICAgICBvdXRTdHJpbmctPmFwcGVuZCh0bXApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb3V0U3RyaW5nLT5zZXRUbyh0bXApOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGFwcGVuZCkgewotICAgICAgICAgICAgb3V0U3RyaW5nLT5hcHBlbmQoU3RyaW5nMTYocywgbGVuKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBvdXRTdHJpbmctPnNldFRvKHMsIGxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc2l6ZV90IFJlc1RhYmxlOjpnZXRCYXNlUGFja2FnZUNvdW50KCkgY29uc3QKLXsKLSAgICBpZiAobUVycm9yICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gbVBhY2thZ2VHcm91cHMuc2l6ZSgpOwotfQotCi1jb25zdCBjaGFyMTZfdCogUmVzVGFibGU6OmdldEJhc2VQYWNrYWdlTmFtZShzaXplX3QgaWR4KSBjb25zdAotewotICAgIGlmIChtRXJyb3IgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIExPR19GQVRBTF9JRihpZHggPj0gbVBhY2thZ2VHcm91cHMuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAiUmVxdWVzdGVkIHBhY2thZ2UgaW5kZXggJWQgcGFzdCBwYWNrYWdlIGNvdW50ICVkIiwKLSAgICAgICAgICAgICAgICAgKGludClpZHgsIChpbnQpbVBhY2thZ2VHcm91cHMuc2l6ZSgpKTsKLSAgICByZXR1cm4gbVBhY2thZ2VHcm91cHNbaWR4XS0+bmFtZS5zdHJpbmcoKTsKLX0KLQotdWludDMyX3QgUmVzVGFibGU6OmdldEJhc2VQYWNrYWdlSWQoc2l6ZV90IGlkeCkgY29uc3QKLXsKLSAgICBpZiAobUVycm9yICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBMT0dfRkFUQUxfSUYoaWR4ID49IG1QYWNrYWdlR3JvdXBzLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgIlJlcXVlc3RlZCBwYWNrYWdlIGluZGV4ICVkIHBhc3QgcGFja2FnZSBjb3VudCAlZCIsCi0gICAgICAgICAgICAgICAgIChpbnQpaWR4LCAoaW50KW1QYWNrYWdlR3JvdXBzLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1QYWNrYWdlR3JvdXBzW2lkeF0tPmlkOwotfQotCi1zaXplX3QgUmVzVGFibGU6OmdldFRhYmxlQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiBtSGVhZGVycy5zaXplKCk7Ci19Ci0KLWNvbnN0IFJlc1N0cmluZ1Bvb2wqIFJlc1RhYmxlOjpnZXRUYWJsZVN0cmluZ0Jsb2NrKHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4gJm1IZWFkZXJzW2luZGV4XS0+dmFsdWVzOwotfQotCi12b2lkKiBSZXNUYWJsZTo6Z2V0VGFibGVDb29raWUoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIHJldHVybiBtSGVhZGVyc1tpbmRleF0tPmNvb2tpZTsKLX0KLQotdm9pZCBSZXNUYWJsZTo6Z2V0Q29uZmlndXJhdGlvbnMoVmVjdG9yPFJlc1RhYmxlX2NvbmZpZz4qIGNvbmZpZ3MpIGNvbnN0Ci17Ci0gICAgY29uc3Qgc2l6ZV90IEkgPSBtUGFja2FnZUdyb3Vwcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPEk7IGkrKykgewotICAgICAgICBjb25zdCBQYWNrYWdlR3JvdXAqIHBhY2thZ2VHcm91cCA9IG1QYWNrYWdlR3JvdXBzW2ldOwotICAgICAgICBjb25zdCBzaXplX3QgSiA9IHBhY2thZ2VHcm91cC0+cGFja2FnZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBqPTA7IGo8SjsgaisrKSB7Ci0gICAgICAgICAgICBjb25zdCBQYWNrYWdlKiBwYWNrYWdlID0gcGFja2FnZUdyb3VwLT5wYWNrYWdlc1tqXTsKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBLID0gcGFja2FnZS0+dHlwZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3Qgaz0wOyBrPEs7IGsrKykgewotICAgICAgICAgICAgICAgIGNvbnN0IFR5cGUqIHR5cGUgPSBwYWNrYWdlLT50eXBlc1trXTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBOVUxMKSBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgTCA9IHR5cGUtPmNvbmZpZ3Muc2l6ZSgpOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGw9MDsgbDxMOyBsKyspIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfdHlwZSogY29uZmlnID0gdHlwZS0+Y29uZmlnc1tsXTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnKiBjZmcgPSAmY29uZmlnLT5jb25maWc7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgaW5zZXJ0IHVuaXF1ZQotICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgTSA9IGNvbmZpZ3MtPnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG07Ci0gICAgICAgICAgICAgICAgICAgIGZvciAobT0wOyBtPE07IG0rKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT0gKCpjb25maWdzKVttXS5jb21wYXJlKCpjZmcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgaXQKLSAgICAgICAgICAgICAgICAgICAgaWYgKG0gPT0gTSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlncy0+YWRkKCpjZmcpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlc1RhYmxlOjpnZXRMb2NhbGVzKFZlY3RvcjxTdHJpbmc4PiogbG9jYWxlcykgY29uc3QKLXsKLSAgICBWZWN0b3I8UmVzVGFibGVfY29uZmlnPiBjb25maWdzOwotICAgIEFMT0dWKCJjYWxsaW5nIGdldENvbmZpZ3VyYXRpb25zIik7Ci0gICAgZ2V0Q29uZmlndXJhdGlvbnMoJmNvbmZpZ3MpOwotICAgIEFMT0dWKCJjYWxsZWQgZ2V0Q29uZmlndXJhdGlvbnMgc2l6ZT0lZCIsIChpbnQpY29uZmlncy5zaXplKCkpOwotICAgIGNvbnN0IHNpemVfdCBJID0gY29uZmlncy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPEk7IGkrKykgewotICAgICAgICBjaGFyIGxvY2FsZVs2XTsKLSAgICAgICAgY29uZmlnc1tpXS5nZXRMb2NhbGUobG9jYWxlKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IEogPSBsb2NhbGVzLT5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBqOwotICAgICAgICBmb3IgKGo9MDsgajxKOyBqKyspIHsKLSAgICAgICAgICAgIGlmICgwID09IHN0cmNtcChsb2NhbGUsICgqbG9jYWxlcylbal0uc3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGogPT0gSikgewotICAgICAgICAgICAgbG9jYWxlcy0+YWRkKFN0cmluZzgobG9jYWxlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXNzaXplX3QgUmVzVGFibGU6OmdldEVudHJ5KAotICAgIGNvbnN0IFBhY2thZ2UqIHBhY2thZ2UsIGludCB0eXBlSW5kZXgsIGludCBlbnRyeUluZGV4LAotICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogY29uZmlnLAotICAgIGNvbnN0IFJlc1RhYmxlX3R5cGUqKiBvdXRUeXBlLCBjb25zdCBSZXNUYWJsZV9lbnRyeSoqIG91dEVudHJ5LAotICAgIGNvbnN0IFR5cGUqKiBvdXRUeXBlQ2xhc3MpIGNvbnN0Ci17Ci0gICAgQUxPR1YoIkdldHRpbmcgZW50cnkgZnJvbSBwYWNrYWdlICVwXG4iLCBwYWNrYWdlKTsKLSAgICBjb25zdCBSZXNUYWJsZV9wYWNrYWdlKiBjb25zdCBwa2cgPSBwYWNrYWdlLT5wYWNrYWdlOwotCi0gICAgY29uc3QgVHlwZSogYWxsVHlwZXMgPSBwYWNrYWdlLT5nZXRUeXBlKHR5cGVJbmRleCk7Ci0gICAgQUxPR1YoImFsbFR5cGVzPSVwXG4iLCBhbGxUeXBlcyk7Ci0gICAgaWYgKGFsbFR5cGVzID09IE5VTEwpIHsKLSAgICAgICAgQUxPR1YoIlNraXBwaW5nIGVudHJ5IHR5cGUgaW5kZXggMHglMDJ4IGJlY2F1c2UgdHlwZSBpcyBOVUxMIVxuIiwgdHlwZUluZGV4KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKChzaXplX3QpZW50cnlJbmRleCA+PSBhbGxUeXBlcy0+ZW50cnlDb3VudCkgewotICAgICAgICBBTE9HVygiZ2V0RW50cnkgZmFpbGluZyBiZWNhdXNlIGVudHJ5SW5kZXggJWQgaXMgYmV5b25kIHR5cGUgZW50cnlDb3VudCAlZCIsCi0gICAgICAgICAgICBlbnRyeUluZGV4LCAoaW50KWFsbFR5cGVzLT5lbnRyeUNvdW50KTsKLSAgICAgICAgcmV0dXJuIEJBRF9UWVBFOwotICAgIH0KLSAgICAgICAgCi0gICAgY29uc3QgUmVzVGFibGVfdHlwZSogdHlwZSA9IE5VTEw7Ci0gICAgdWludDMyX3Qgb2Zmc2V0ID0gUmVzVGFibGVfdHlwZTo6Tk9fRU5UUlk7Ci0gICAgUmVzVGFibGVfY29uZmlnIGJlc3RDb25maWc7Ci0gICAgbWVtc2V0KCZiZXN0Q29uZmlnLCAwLCBzaXplb2YoYmVzdENvbmZpZykpOyAvLyBtYWtlIHRoZSBjb21waWxlciBzaHV0IHVwCi0gICAgCi0gICAgY29uc3Qgc2l6ZV90IE5UID0gYWxsVHlwZXMtPmNvbmZpZ3Muc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOVDsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFJlc1RhYmxlX3R5cGUqIGNvbnN0IHRoaXNUeXBlID0gYWxsVHlwZXMtPmNvbmZpZ3NbaV07Ci0gICAgICAgIGlmICh0aGlzVHlwZSA9PSBOVUxMKSBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIFJlc1RhYmxlX2NvbmZpZyB0aGlzQ29uZmlnOwotICAgICAgICB0aGlzQ29uZmlnLmNvcHlGcm9tRHRvSCh0aGlzVHlwZS0+Y29uZmlnKTsKLQotICAgICAgICBUQUJMRV9HRVRFTlRSWShBTE9HSSgiTWF0Y2ggZW50cnkgMHgleCBpbiB0eXBlIDB4JXggKHN6IDB4JXgpOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5SW5kZXgsIHR5cGVJbmRleCsxLCBkdG9obCh0aGlzVHlwZS0+Y29uZmlnLnNpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NvbmZpZy50b1N0cmluZygpLnN0cmluZygpKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBDaGVjayB0byBtYWtlIHN1cmUgdGhpcyBvbmUgaXMgdmFsaWQgZm9yIHRoZSBjdXJyZW50IHBhcmFtZXRlcnMuCi0gICAgICAgIGlmIChjb25maWcgJiYgIXRoaXNDb25maWcubWF0Y2goKmNvbmZpZykpIHsKLSAgICAgICAgICAgIFRBQkxFX0dFVEVOVFJZKEFMT0dJKCJEb2VzIG5vdCBtYXRjaCBjb25maWchXG4iKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgdGhlIGRlc2lyZWQgZW50cnkgaW4gdGhpcyB0eXBlLgotICAgICAgICAKLSAgICAgICAgY29uc3QgdWludDhfdCogY29uc3QgZW5kID0gKChjb25zdCB1aW50OF90Kil0aGlzVHlwZSkKLSAgICAgICAgICAgICsgZHRvaGwodGhpc1R5cGUtPmhlYWRlci5zaXplKTsKLSAgICAgICAgY29uc3QgdWludDMyX3QqIGNvbnN0IGVpbmRleCA9IChjb25zdCB1aW50MzJfdCopCi0gICAgICAgICAgICAoKChjb25zdCB1aW50OF90Kil0aGlzVHlwZSkgKyBkdG9ocyh0aGlzVHlwZS0+aGVhZGVyLmhlYWRlclNpemUpKTsKLSAgICAgICAgCi0gICAgICAgIHVpbnQzMl90IHRoaXNPZmZzZXQgPSBkdG9obChlaW5kZXhbZW50cnlJbmRleF0pOwotICAgICAgICBpZiAodGhpc09mZnNldCA9PSBSZXNUYWJsZV90eXBlOjpOT19FTlRSWSkgewotICAgICAgICAgICAgVEFCTEVfR0VURU5UUlkoQUxPR0koIlNraXBwaW5nIGJlY2F1c2UgaXQgaXMgbm90IGRlZmluZWQhXG4iKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHR5cGUgIT0gTlVMTCkgewotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvbmUgaXMgbGVzcyBzcGVjaWZpYyB0aGFuIHRoZSBsYXN0IGZvdW5kLiAgSWYgc28sCi0gICAgICAgICAgICAvLyB3ZSB3aWxsIHNraXAgaXQuICBXZSBjaGVjayBzdGFydGluZyB3aXRoIHRoaW5ncyB3ZSBtb3N0IGNhcmUKLSAgICAgICAgICAgIC8vIGFib3V0IHRvIHRob3NlIHdlIGxlYXN0IGNhcmUgYWJvdXQuCi0gICAgICAgICAgICBpZiAoIXRoaXNDb25maWcuaXNCZXR0ZXJUaGFuKGJlc3RDb25maWcsIGNvbmZpZykpIHsKLSAgICAgICAgICAgICAgICBUQUJMRV9HRVRFTlRSWShBTE9HSSgiVGhpcyBjb25maWcgaXMgd29yc2UgdGhhbiBsYXN0IVxuIikpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB0eXBlID0gdGhpc1R5cGU7Ci0gICAgICAgIG9mZnNldCA9IHRoaXNPZmZzZXQ7Ci0gICAgICAgIGJlc3RDb25maWcgPSB0aGlzQ29uZmlnOwotICAgICAgICBUQUJMRV9HRVRFTlRSWShBTE9HSSgiQmVzdCBlbnRyeSBzbyBmYXIgLS0gdXNpbmcgaXQhXG4iKSk7Ci0gICAgICAgIGlmICghY29uZmlnKSBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHR5cGUgPT0gTlVMTCkgewotICAgICAgICBUQUJMRV9HRVRFTlRSWShBTE9HSSgiTm8gdmFsdWUgZm91bmQgZm9yIHJlcXVlc3RlZCBlbnRyeSFcbiIpKTsKLSAgICAgICAgcmV0dXJuIEJBRF9JTkRFWDsKLSAgICB9Ci0gICAgCi0gICAgb2Zmc2V0ICs9IGR0b2hsKHR5cGUtPmVudHJpZXNTdGFydCk7Ci0gICAgVEFCTEVfTk9JU1koYW91dCA8PCAiTG9va2luZyBpbiByZXNvdXJjZSB0YWJsZSAiIDw8IHBhY2thZ2UtPmhlYWRlci0+aGVhZGVyCi0gICAgICAgICAgPDwgIiwgdHlwZU9mZj0iCi0gICAgICAgICAgPDwgKHZvaWQqKSgoKGNvbnN0IGNoYXIqKXR5cGUpLSgoY29uc3QgY2hhciopcGFja2FnZS0+aGVhZGVyLT5oZWFkZXIpKQotICAgICAgICAgIDw8ICIsIG9mZnNldD0iIDw8ICh2b2lkKilvZmZzZXQgPDwgZW5kbCk7Ci0KLSAgICBpZiAob2Zmc2V0ID4gKGR0b2hsKHR5cGUtPmhlYWRlci5zaXplKS1zaXplb2YoUmVzVGFibGVfZW50cnkpKSkgewotICAgICAgICBBTE9HVygiUmVzVGFibGVfZW50cnkgYXQgMHgleCBpcyBiZXlvbmQgdHlwZSBjaHVuayBkYXRhIDB4JXgiLAotICAgICAgICAgICAgIG9mZnNldCwgZHRvaGwodHlwZS0+aGVhZGVyLnNpemUpKTsKLSAgICAgICAgcmV0dXJuIEJBRF9UWVBFOwotICAgIH0KLSAgICBpZiAoKG9mZnNldCYweDMpICE9IDApIHsKLSAgICAgICAgQUxPR1coIlJlc1RhYmxlX2VudHJ5IGF0IDB4JXggaXMgbm90IG9uIGFuIGludGVnZXIgYm91bmRhcnkiLAotICAgICAgICAgICAgIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBCQURfVFlQRTsKLSAgICB9Ci0KLSAgICBjb25zdCBSZXNUYWJsZV9lbnRyeSogY29uc3QgZW50cnkgPSAoY29uc3QgUmVzVGFibGVfZW50cnkqKQotICAgICAgICAoKChjb25zdCB1aW50OF90Kil0eXBlKSArIG9mZnNldCk7Ci0gICAgaWYgKGR0b2hzKGVudHJ5LT5zaXplKSA8IHNpemVvZigqZW50cnkpKSB7Ci0gICAgICAgIEFMT0dXKCJSZXNUYWJsZV9lbnRyeSBzaXplIDB4JXggaXMgdG9vIHNtYWxsIiwgZHRvaHMoZW50cnktPnNpemUpKTsKLSAgICAgICAgcmV0dXJuIEJBRF9UWVBFOwotICAgIH0KLQotICAgICpvdXRUeXBlID0gdHlwZTsKLSAgICAqb3V0RW50cnkgPSBlbnRyeTsKLSAgICBpZiAob3V0VHlwZUNsYXNzICE9IE5VTEwpIHsKLSAgICAgICAgKm91dFR5cGVDbGFzcyA9IGFsbFR5cGVzOwotICAgIH0KLSAgICByZXR1cm4gb2Zmc2V0ICsgZHRvaHMoZW50cnktPnNpemUpOwotfQotCi1zdGF0dXNfdCBSZXNUYWJsZTo6cGFyc2VQYWNrYWdlKGNvbnN0IFJlc1RhYmxlX3BhY2thZ2UqIGNvbnN0IHBrZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGVhZGVyKiBjb25zdCBoZWFkZXIsIHVpbnQzMl90IGlkbWFwX2lkKQotewotICAgIGNvbnN0IHVpbnQ4X3QqIGJhc2UgPSAoY29uc3QgdWludDhfdCopcGtnOwotICAgIHN0YXR1c190IGVyciA9IHZhbGlkYXRlX2NodW5rKCZwa2ctPmhlYWRlciwgc2l6ZW9mKCpwa2cpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci0+ZGF0YUVuZCwgIlJlc1RhYmxlX3BhY2thZ2UiKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiAobUVycm9yPWVycik7Ci0gICAgfQotCi0gICAgY29uc3Qgc2l6ZV90IHBrZ1NpemUgPSBkdG9obChwa2ctPmhlYWRlci5zaXplKTsKLQotICAgIGlmIChkdG9obChwa2ctPnR5cGVTdHJpbmdzKSA+PSBwa2dTaXplKSB7Ci0gICAgICAgIEFMT0dXKCJSZXNUYWJsZV9wYWNrYWdlIHR5cGUgc3RyaW5ncyBhdCAlcCBhcmUgcGFzdCBjaHVuayBzaXplICVwLiIsCi0gICAgICAgICAgICAgKHZvaWQqKWR0b2hsKHBrZy0+dHlwZVN0cmluZ3MpLCAodm9pZCopcGtnU2l6ZSk7Ci0gICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICB9Ci0gICAgaWYgKChkdG9obChwa2ctPnR5cGVTdHJpbmdzKSYweDMpICE9IDApIHsKLSAgICAgICAgQUxPR1coIlJlc1RhYmxlX3BhY2thZ2UgdHlwZSBzdHJpbmdzIGF0ICVwIGlzIG5vdCBvbiBhbiBpbnRlZ2VyIGJvdW5kYXJ5LiIsCi0gICAgICAgICAgICAgKHZvaWQqKWR0b2hsKHBrZy0+dHlwZVN0cmluZ3MpKTsKLSAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgIH0KLSAgICBpZiAoZHRvaGwocGtnLT5rZXlTdHJpbmdzKSA+PSBwa2dTaXplKSB7Ci0gICAgICAgIEFMT0dXKCJSZXNUYWJsZV9wYWNrYWdlIGtleSBzdHJpbmdzIGF0ICVwIGFyZSBwYXN0IGNodW5rIHNpemUgJXAuIiwKLSAgICAgICAgICAgICAodm9pZCopZHRvaGwocGtnLT5rZXlTdHJpbmdzKSwgKHZvaWQqKXBrZ1NpemUpOwotICAgICAgICByZXR1cm4gKG1FcnJvcj1CQURfVFlQRSk7Ci0gICAgfQotICAgIGlmICgoZHRvaGwocGtnLT5rZXlTdHJpbmdzKSYweDMpICE9IDApIHsKLSAgICAgICAgQUxPR1coIlJlc1RhYmxlX3BhY2thZ2Uga2V5IHN0cmluZ3MgYXQgJXAgaXMgbm90IG9uIGFuIGludGVnZXIgYm91bmRhcnkuIiwKLSAgICAgICAgICAgICAodm9pZCopZHRvaGwocGtnLT5rZXlTdHJpbmdzKSk7Ci0gICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICB9Ci0gICAgCi0gICAgUGFja2FnZSogcGFja2FnZSA9IE5VTEw7Ci0gICAgUGFja2FnZUdyb3VwKiBncm91cCA9IE5VTEw7Ci0gICAgdWludDMyX3QgaWQgPSBpZG1hcF9pZCAhPSAwID8gaWRtYXBfaWQgOiBkdG9obChwa2ctPmlkKTsKLSAgICAvLyBJZiBhdCB0aGlzIHBvaW50IGlkID09IDAsIHBrZyBpcyBhbiBvdmVybGF5IHBhY2thZ2Ugd2l0aG91dCBhCi0gICAgLy8gY29ycmVzcG9uZGluZyBpZG1hcC4gRHVyaW5nIHJlZ3VsYXIgdXNhZ2UsIG92ZXJsYXkgcGFja2FnZXMgYXJlCi0gICAgLy8gYWx3YXlzIGxvYWRlZCBhbG9uZ3NpZGUgdGhlaXIgaWRtYXBzLCBidXQgZHVyaW5nIGlkbWFwIGNyZWF0aW9uCi0gICAgLy8gdGhlIHBhY2thZ2UgaXMgdGVtcG9yYXJpbHkgbG9hZGVkIGJ5IGl0c2VsZi4KLSAgICBpZiAoaWQgPCAyNTYpIHsKLSAgICAKLSAgICAgICAgcGFja2FnZSA9IG5ldyBQYWNrYWdlKHRoaXMsIGhlYWRlciwgcGtnKTsKLSAgICAgICAgaWYgKHBhY2thZ2UgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9Tk9fTUVNT1JZKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2l6ZV90IGlkeCA9IG1QYWNrYWdlTWFwW2lkXTsKLSAgICAgICAgaWYgKGlkeCA9PSAwKSB7Ci0gICAgICAgICAgICBpZHggPSBtUGFja2FnZUdyb3Vwcy5zaXplKCkrMTsKLQotICAgICAgICAgICAgY2hhcjE2X3QgdG1wTmFtZVtzaXplb2YocGtnLT5uYW1lKS9zaXplb2YoY2hhcjE2X3QpXTsKLSAgICAgICAgICAgIHN0cmNweTE2X2R0b2godG1wTmFtZSwgcGtnLT5uYW1lLCBzaXplb2YocGtnLT5uYW1lKS9zaXplb2YoY2hhcjE2X3QpKTsKLSAgICAgICAgICAgIGdyb3VwID0gbmV3IFBhY2thZ2VHcm91cCh0aGlzLCBTdHJpbmcxNih0bXBOYW1lKSwgaWQpOwotICAgICAgICAgICAgaWYgKGdyb3VwID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBkZWxldGUgcGFja2FnZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1OT19NRU1PUlkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlcnIgPSBwYWNrYWdlLT50eXBlU3RyaW5ncy5zZXRUbyhiYXNlK2R0b2hsKHBrZy0+dHlwZVN0cmluZ3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci0+ZGF0YUVuZC0oYmFzZStkdG9obChwa2ctPnR5cGVTdHJpbmdzKSkpOwotICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBncm91cDsKLSAgICAgICAgICAgICAgICBkZWxldGUgcGFja2FnZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1lcnIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gcGFja2FnZS0+a2V5U3RyaW5ncy5zZXRUbyhiYXNlK2R0b2hsKHBrZy0+a2V5U3RyaW5ncyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXItPmRhdGFFbmQtKGJhc2UrZHRvaGwocGtnLT5rZXlTdHJpbmdzKSkpOwotICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBncm91cDsKLSAgICAgICAgICAgICAgICBkZWxldGUgcGFja2FnZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1lcnIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvL3ByaW50ZigiQWRkaW5nIG5ldyBwYWNrYWdlIGlkICVkIGF0IGluZGV4ICVkXG4iLCBpZCwgaWR4KTsKLSAgICAgICAgICAgIGVyciA9IG1QYWNrYWdlR3JvdXBzLmFkZChncm91cCk7Ci0gICAgICAgICAgICBpZiAoZXJyIDwgTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1lcnIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZ3JvdXAtPmJhc2VQYWNrYWdlID0gcGFja2FnZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbVBhY2thZ2VNYXBbaWRdID0gKHVpbnQ4X3QpaWR4OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ3JvdXAgPSBtUGFja2FnZUdyb3Vwcy5pdGVtQXQoaWR4LTEpOwotICAgICAgICAgICAgaWYgKGdyb3VwID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1VTktOT1dOX0VSUk9SKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlcnIgPSBncm91cC0+cGFja2FnZXMuYWRkKHBhY2thZ2UpOwotICAgICAgICBpZiAoZXJyIDwgTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiAobUVycm9yPWVycik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMKCJQYWNrYWdlIGlkIG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotCi0gICAgCi0gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBjaHVua3MuCi0gICAgc2l6ZV90IGN1clBhY2thZ2UgPSAwOwotICAgIAotICAgIGNvbnN0IFJlc0NodW5rX2hlYWRlciogY2h1bmsgPQotICAgICAgICAoY29uc3QgUmVzQ2h1bmtfaGVhZGVyKikoKChjb25zdCB1aW50OF90Kilwa2cpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGR0b2hzKHBrZy0+aGVhZGVyLmhlYWRlclNpemUpKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmRQb3MgPSAoKGNvbnN0IHVpbnQ4X3QqKXBrZykgKyBkdG9ocyhwa2ctPmhlYWRlci5zaXplKTsKLSAgICB3aGlsZSAoKChjb25zdCB1aW50OF90KiljaHVuaykgPD0gKGVuZFBvcy1zaXplb2YoUmVzQ2h1bmtfaGVhZGVyKSkgJiYKLSAgICAgICAgICAgKChjb25zdCB1aW50OF90KiljaHVuaykgPD0gKGVuZFBvcy1kdG9obChjaHVuay0+c2l6ZSkpKSB7Ci0gICAgICAgIFRBQkxFX05PSVNZKEFMT0dWKCJQYWNrYWdlQ2h1bms6IHR5cGU9MHgleCwgaGVhZGVyU2l6ZT0weCV4LCBzaXplPTB4JXgsIHBvcz0lcFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkdG9ocyhjaHVuay0+dHlwZSksIGR0b2hzKGNodW5rLT5oZWFkZXJTaXplKSwgZHRvaGwoY2h1bmstPnNpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikoKChjb25zdCB1aW50OF90KiljaHVuaykgLSAoKGNvbnN0IHVpbnQ4X3QqKWhlYWRlci0+aGVhZGVyKSkpKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IGNzaXplID0gZHRvaGwoY2h1bmstPnNpemUpOwotICAgICAgICBjb25zdCB1aW50MTZfdCBjdHlwZSA9IGR0b2hzKGNodW5rLT50eXBlKTsKLSAgICAgICAgaWYgKGN0eXBlID09IFJFU19UQUJMRV9UWVBFX1NQRUNfVFlQRSkgewotICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfdHlwZVNwZWMqIHR5cGVTcGVjID0gKGNvbnN0IFJlc1RhYmxlX3R5cGVTcGVjKikoY2h1bmspOwotICAgICAgICAgICAgZXJyID0gdmFsaWRhdGVfY2h1bmsoJnR5cGVTcGVjLT5oZWFkZXIsIHNpemVvZigqdHlwZVNwZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9zLCAiUmVzVGFibGVfdHlwZVNwZWMiKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKG1FcnJvcj1lcnIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBzaXplX3QgdHlwZVNwZWNTaXplID0gZHRvaGwodHlwZVNwZWMtPmhlYWRlci5zaXplKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTE9BRF9UQUJMRV9OT0lTWShwcmludGYoIlR5cGVTcGVjIG9mZiAlcDogdHlwZT0weCV4LCBoZWFkZXJTaXplPTB4JXgsIHNpemU9JXBcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopKGJhc2UtKGNvbnN0IHVpbnQ4X3QqKWNodW5rKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0b2hzKHR5cGVTcGVjLT5oZWFkZXIudHlwZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdG9ocyh0eXBlU3BlYy0+aGVhZGVyLmhlYWRlclNpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXR5cGVTaXplKSk7Ci0gICAgICAgICAgICAvLyBsb29rIGZvciBibG9jayBvdmVycnVuIG9yIGludCBvdmVyZmxvdyB3aGVuIG11bHRpcGx5aW5nIGJ5IDQKLSAgICAgICAgICAgIGlmICgoZHRvaGwodHlwZVNwZWMtPmVudHJ5Q291bnQpID4gKElOVDMyX01BWC9zaXplb2YodWludDMyX3QpKQotICAgICAgICAgICAgICAgICAgICB8fCBkdG9ocyh0eXBlU3BlYy0+aGVhZGVyLmhlYWRlclNpemUpKyhzaXplb2YodWludDMyX3QpKmR0b2hsKHR5cGVTcGVjLT5lbnRyeUNvdW50KSkKLSAgICAgICAgICAgICAgICAgICAgPiB0eXBlU3BlY1NpemUpKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIlJlc1RhYmxlX3R5cGVTcGVjIGVudHJ5IGluZGV4IHRvICVwIGV4dGVuZHMgYmV5b25kIGNodW5rIGVuZCAlcC4iLAotICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKShkdG9ocyh0eXBlU3BlYy0+aGVhZGVyLmhlYWRlclNpemUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICsoc2l6ZW9mKHVpbnQzMl90KSpkdG9obCh0eXBlU3BlYy0+ZW50cnlDb3VudCkpKSwKLSAgICAgICAgICAgICAgICAgICAgICh2b2lkKil0eXBlU3BlY1NpemUpOwotICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHR5cGVTcGVjLT5pZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIlJlc1RhYmxlX3R5cGUgaGFzIGFuIGlkIG9mIDAuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB3aGlsZSAocGFja2FnZS0+dHlwZXMuc2l6ZSgpIDwgdHlwZVNwZWMtPmlkKSB7Ci0gICAgICAgICAgICAgICAgcGFja2FnZS0+dHlwZXMuYWRkKE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVHlwZSogdCA9IHBhY2thZ2UtPnR5cGVzW3R5cGVTcGVjLT5pZC0xXTsKLSAgICAgICAgICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB0ID0gbmV3IFR5cGUoaGVhZGVyLCBwYWNrYWdlLCBkdG9obCh0eXBlU3BlYy0+ZW50cnlDb3VudCkpOwotICAgICAgICAgICAgICAgIHBhY2thZ2UtPnR5cGVzLmVkaXRJdGVtQXQodHlwZVNwZWMtPmlkLTEpID0gdDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZHRvaGwodHlwZVNwZWMtPmVudHJ5Q291bnQpICE9IHQtPmVudHJ5Q291bnQpIHsKLSAgICAgICAgICAgICAgICBBTE9HVygiUmVzVGFibGVfdHlwZVNwZWMgZW50cnkgY291bnQgaW5jb25zaXN0ZW50OiBnaXZlbiAlZCwgcHJldmlvdXNseSAlZCIsCi0gICAgICAgICAgICAgICAgICAgIChpbnQpZHRvaGwodHlwZVNwZWMtPmVudHJ5Q291bnQpLCAoaW50KXQtPmVudHJ5Q291bnQpOwotICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHQtPnR5cGVTcGVjRmxhZ3MgPSAoY29uc3QgdWludDMyX3QqKSgKLSAgICAgICAgICAgICAgICAgICAgKChjb25zdCB1aW50OF90Kil0eXBlU3BlYykgKyBkdG9ocyh0eXBlU3BlYy0+aGVhZGVyLmhlYWRlclNpemUpKTsKLSAgICAgICAgICAgIHQtPnR5cGVTcGVjID0gdHlwZVNwZWM7Ci0gICAgICAgICAgICAKLSAgICAgICAgfSBlbHNlIGlmIChjdHlwZSA9PSBSRVNfVEFCTEVfVFlQRV9UWVBFKSB7Ci0gICAgICAgICAgICBjb25zdCBSZXNUYWJsZV90eXBlKiB0eXBlID0gKGNvbnN0IFJlc1RhYmxlX3R5cGUqKShjaHVuayk7Ci0gICAgICAgICAgICBlcnIgPSB2YWxpZGF0ZV9jaHVuaygmdHlwZS0+aGVhZGVyLCBzaXplb2YoKnR5cGUpLXNpemVvZihSZXNUYWJsZV9jb25maWcpKzQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRQb3MsICJSZXNUYWJsZV90eXBlIik7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9ZXJyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHR5cGVTaXplID0gZHRvaGwodHlwZS0+aGVhZGVyLnNpemUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMT0FEX1RBQkxFX05PSVNZKHByaW50ZigiVHlwZSBvZmYgJXA6IHR5cGU9MHgleCwgaGVhZGVyU2l6ZT0weCV4LCBzaXplPSVwXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKShiYXNlLShjb25zdCB1aW50OF90KiljaHVuayksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdG9ocyh0eXBlLT5oZWFkZXIudHlwZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdG9ocyh0eXBlLT5oZWFkZXIuaGVhZGVyU2l6ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopdHlwZVNpemUpKTsKLSAgICAgICAgICAgIGlmIChkdG9ocyh0eXBlLT5oZWFkZXIuaGVhZGVyU2l6ZSkrKHNpemVvZih1aW50MzJfdCkqZHRvaGwodHlwZS0+ZW50cnlDb3VudCkpCi0gICAgICAgICAgICAgICAgPiB0eXBlU2l6ZSkgewotICAgICAgICAgICAgICAgIEFMT0dXKCJSZXNUYWJsZV90eXBlIGVudHJ5IGluZGV4IHRvICVwIGV4dGVuZHMgYmV5b25kIGNodW5rIGVuZCAlcC4iLAotICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKShkdG9ocyh0eXBlLT5oZWFkZXIuaGVhZGVyU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyhzaXplb2YodWludDMyX3QpKmR0b2hsKHR5cGUtPmVudHJ5Q291bnQpKSksCi0gICAgICAgICAgICAgICAgICAgICAodm9pZCopdHlwZVNpemUpOwotICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkdG9obCh0eXBlLT5lbnRyeUNvdW50KSAhPSAwCi0gICAgICAgICAgICAgICAgJiYgZHRvaGwodHlwZS0+ZW50cmllc1N0YXJ0KSA+ICh0eXBlU2l6ZS1zaXplb2YoUmVzVGFibGVfZW50cnkpKSkgewotICAgICAgICAgICAgICAgIEFMT0dXKCJSZXNUYWJsZV90eXBlIGVudHJpZXNTdGFydCBhdCAlcCBleHRlbmRzIGJleW9uZCBjaHVuayBlbmQgJXAuIiwKLSAgICAgICAgICAgICAgICAgICAgICh2b2lkKilkdG9obCh0eXBlLT5lbnRyaWVzU3RhcnQpLCAodm9pZCopdHlwZVNpemUpOwotICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0eXBlLT5pZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIlJlc1RhYmxlX3R5cGUgaGFzIGFuIGlkIG9mIDAuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB3aGlsZSAocGFja2FnZS0+dHlwZXMuc2l6ZSgpIDwgdHlwZS0+aWQpIHsKLSAgICAgICAgICAgICAgICBwYWNrYWdlLT50eXBlcy5hZGQoTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBUeXBlKiB0ID0gcGFja2FnZS0+dHlwZXNbdHlwZS0+aWQtMV07Ci0gICAgICAgICAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgdCA9IG5ldyBUeXBlKGhlYWRlciwgcGFja2FnZSwgZHRvaGwodHlwZS0+ZW50cnlDb3VudCkpOwotICAgICAgICAgICAgICAgIHBhY2thZ2UtPnR5cGVzLmVkaXRJdGVtQXQodHlwZS0+aWQtMSkgPSB0OwotICAgICAgICAgICAgfSBlbHNlIGlmIChkdG9obCh0eXBlLT5lbnRyeUNvdW50KSAhPSB0LT5lbnRyeUNvdW50KSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coIlJlc1RhYmxlX3R5cGUgZW50cnkgY291bnQgaW5jb25zaXN0ZW50OiBnaXZlbiAlZCwgcHJldmlvdXNseSAlZCIsCi0gICAgICAgICAgICAgICAgICAgIChpbnQpZHRvaGwodHlwZS0+ZW50cnlDb3VudCksIChpbnQpdC0+ZW50cnlDb3VudCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9QkFEX1RZUEUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBUQUJMRV9HRVRFTlRSWSgKLSAgICAgICAgICAgICAgICBSZXNUYWJsZV9jb25maWcgdGhpc0NvbmZpZzsKLSAgICAgICAgICAgICAgICB0aGlzQ29uZmlnLmNvcHlGcm9tRHRvSCh0eXBlLT5jb25maWcpOwotICAgICAgICAgICAgICAgIEFMT0dJKCJBZGRpbmcgY29uZmlnIHRvIHR5cGUgJWQ6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGUtPmlkLCB0aGlzQ29uZmlnLnRvU3RyaW5nKCkuc3RyaW5nKCkpKTsKLSAgICAgICAgICAgIHQtPmNvbmZpZ3MuYWRkKHR5cGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gdmFsaWRhdGVfY2h1bmsoY2h1bmssIHNpemVvZihSZXNDaHVua19oZWFkZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9zLCAiUmVzVGFibGVfcGFja2FnZTp1bmtub3duIik7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChtRXJyb3I9ZXJyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjaHVuayA9IChjb25zdCBSZXNDaHVua19oZWFkZXIqKQotICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopY2h1bmspICsgY3NpemUpOwotICAgIH0KLQotICAgIGlmIChncm91cC0+dHlwZUNvdW50ID09IDApIHsKLSAgICAgICAgZ3JvdXAtPnR5cGVDb3VudCA9IHBhY2thZ2UtPnR5cGVzLnNpemUoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBSZXNUYWJsZTo6Y3JlYXRlSWRtYXAoY29uc3QgUmVzVGFibGUmIG92ZXJsYXksIHVpbnQzMl90IG9yaWdpbmFsQ3JjLCB1aW50MzJfdCBvdmVybGF5Q3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiBvdXREYXRhLCBzaXplX3QqIG91dFNpemUpIGNvbnN0Ci17Ci0gICAgLy8gc2VlIFJFQURNRSBmb3IgZGV0YWlscyBvbiB0aGUgZm9ybWF0IG9mIG1hcAotICAgIGlmIChtUGFja2FnZUdyb3Vwcy5zaXplKCkgPT0gMCkgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgaWYgKG1QYWNrYWdlR3JvdXBzWzBdLT5wYWNrYWdlcy5zaXplKCkgPT0gMCkgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8VmVjdG9yPHVpbnQzMl90PiA+IG1hcDsKLSAgICBjb25zdCBQYWNrYWdlR3JvdXAqIHBnID0gbVBhY2thZ2VHcm91cHNbMF07Ci0gICAgY29uc3QgUGFja2FnZSogcGtnID0gcGctPnBhY2thZ2VzWzBdOwotICAgIHNpemVfdCB0eXBlQ291bnQgPSBwa2ctPnR5cGVzLnNpemUoKTsKLSAgICAvLyBzdGFydGluZyBzaXplIGlzIGhlYWRlciArIGZpcnN0IGl0ZW0gKG51bWJlciBvZiB0eXBlcyBpbiBtYXApCi0gICAgKm91dFNpemUgPSAoSURNQVBfSEVBREVSX1NJWkUgKyAxKSAqIHNpemVvZih1aW50MzJfdCk7Ci0gICAgY29uc3QgU3RyaW5nMTYgb3ZlcmxheVBhY2thZ2Uob3ZlcmxheS5tUGFja2FnZUdyb3Vwc1swXS0+cGFja2FnZXNbMF0tPnBhY2thZ2UtPm5hbWUpOwotICAgIGNvbnN0IHVpbnQzMl90IHBrZ19pZCA9IHBrZy0+cGFja2FnZS0+aWQgPDwgMjQ7Ci0KLSAgICBmb3IgKHNpemVfdCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCB0eXBlQ291bnQ7ICsrdHlwZUluZGV4KSB7Ci0gICAgICAgIHNzaXplX3QgZmlyc3QgPSAtMTsKLSAgICAgICAgc3NpemVfdCBsYXN0ID0gLTE7Ci0gICAgICAgIGNvbnN0IFR5cGUqIHR5cGVDb25maWdzID0gcGtnLT5nZXRUeXBlKHR5cGVJbmRleCk7Ci0gICAgICAgIHNzaXplX3QgbWFwSW5kZXggPSBtYXAuYWRkKCk7Ci0gICAgICAgIGlmIChtYXBJbmRleCA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIH0KLSAgICAgICAgVmVjdG9yPHVpbnQzMl90PiYgdmVjdG9yID0gbWFwLmVkaXRJdGVtQXQobWFwSW5kZXgpOwotICAgICAgICBmb3IgKHNpemVfdCBlbnRyeUluZGV4ID0gMDsgZW50cnlJbmRleCA8IHR5cGVDb25maWdzLT5lbnRyeUNvdW50OyArK2VudHJ5SW5kZXgpIHsKLSAgICAgICAgICAgIHVpbnQzMl90IHJlc0lEID0gcGtnX2lkCi0gICAgICAgICAgICAgICAgfCAoMHgwMGZmMDAwMCAmICgodHlwZUluZGV4KzEpPDwxNikpCi0gICAgICAgICAgICAgICAgfCAoMHgwMDAwZmZmZiAmIChlbnRyeUluZGV4KSk7Ci0gICAgICAgICAgICByZXNvdXJjZV9uYW1lIHJlc05hbWU7Ci0gICAgICAgICAgICBpZiAoIXRoaXMtPmdldFJlc291cmNlTmFtZShyZXNJRCwgdHJ1ZSwgJnJlc05hbWUpKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1coImlkbWFwOiByZXNvdXJjZSAweCUwOHggaGFzIHNwZWMgYnV0IGxhY2tzIHZhbHVlcywgc2tpcHBpbmdcbiIsIHJlc0lEKTsKLSAgICAgICAgICAgICAgICAvLyBhZGQgZHVtbXkgdmFsdWUsIG9yIHRyaW1taW5nIGxlYWRpbmcvdHJhaWxpbmcgemVyb2VzIGxhdGVyIHdpbGwgZmFpbAotICAgICAgICAgICAgICAgIHZlY3Rvci5wdXNoKDApOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBTdHJpbmcxNiBvdmVybGF5VHlwZShyZXNOYW1lLnR5cGUsIHJlc05hbWUudHlwZUxlbik7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcxNiBvdmVybGF5TmFtZShyZXNOYW1lLm5hbWUsIHJlc05hbWUubmFtZUxlbik7Ci0gICAgICAgICAgICB1aW50MzJfdCBvdmVybGF5UmVzSUQgPSBvdmVybGF5LmlkZW50aWZpZXJGb3JOYW1lKG92ZXJsYXlOYW1lLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5TmFtZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlUeXBlLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5VHlwZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlQYWNrYWdlLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5UGFja2FnZS5zaXplKCkpOwotICAgICAgICAgICAgaWYgKG92ZXJsYXlSZXNJRCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgb3ZlcmxheVJlc0lEID0gcGtnX2lkIHwgKDB4MDBmZmZmZmYgJiBvdmVybGF5UmVzSUQpOwotICAgICAgICAgICAgICAgIGxhc3QgPSBSZXNfR0VURU5UUlkocmVzSUQpOwotICAgICAgICAgICAgICAgIGlmIChmaXJzdCA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IFJlc19HRVRFTlRSWShyZXNJRCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmVjdG9yLnB1c2gob3ZlcmxheVJlc0lEKTsKLSNpZiAwCi0gICAgICAgICAgICBpZiAob3ZlcmxheVJlc0lEICE9IDApIHsKLSAgICAgICAgICAgICAgICBBTE9HRCgiJXMvJXMgMHglMDh4IC0+IDB4JTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoU3RyaW5nMTYocmVzTmFtZS50eXBlKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KFN0cmluZzE2KHJlc05hbWUubmFtZSkpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgcmVzSUQsIG92ZXJsYXlSZXNJRCk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmaXJzdCAhPSAtMSkgewotICAgICAgICAgICAgLy8gc2hhdmUgb2ZmIHRyYWlsaW5nIGVudHJpZXMgd2hpY2ggbGFjayBvdmVybGF5IHZhbHVlcwotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGxhc3RfcGFzdF9vbmUgPSBsYXN0ICsgMTsKLSAgICAgICAgICAgIGlmIChsYXN0X3Bhc3Rfb25lIDwgdmVjdG9yLnNpemUoKSkgewotICAgICAgICAgICAgICAgIHZlY3Rvci5yZW1vdmVJdGVtc0F0KGxhc3RfcGFzdF9vbmUsIHZlY3Rvci5zaXplKCkgLSBsYXN0X3Bhc3Rfb25lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIHNoYXZlIG9mZiBsZWFkaW5nIGVudHJpZXMgd2hpY2ggbGFjayBvdmVybGF5IHZhbHVlcwotICAgICAgICAgICAgdmVjdG9yLnJlbW92ZUl0ZW1zQXQoMCwgZmlyc3QpOwotICAgICAgICAgICAgLy8gc3RvcmUgb2Zmc2V0IHRvIGZpcnN0IG92ZXJsYWlkIHJlc291cmNlIElEIG9mIHRoaXMgdHlwZQotICAgICAgICAgICAgdmVjdG9yLmluc2VydEF0KCh1aW50MzJfdClmaXJzdCwgMCwgMSk7Ci0gICAgICAgICAgICAvLyByZXNlcnZlIHNwYWNlIGZvciBudW1iZXIgYW5kIG9mZnNldCBvZiBlbnRyaWVzLCBhbmQgdGhlIGFjdHVhbCBlbnRyaWVzCi0gICAgICAgICAgICAqb3V0U2l6ZSArPSAoMiArIHZlY3Rvci5zaXplKCkpICogc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIG5vIGVudHJpZXMgb2YgY3VycmVudCB0eXBlIGRlZmluZWQgaW4gb3ZlcmxheSBwYWNrYWdlCi0gICAgICAgICAgICB2ZWN0b3IuY2xlYXIoKTsKLSAgICAgICAgICAgIC8vIHJlc2VydmUgc3BhY2UgZm9yIHR5cGUgb2Zmc2V0Ci0gICAgICAgICAgICAqb3V0U2l6ZSArPSAxICogc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgoKm91dERhdGEgPSBtYWxsb2MoKm91dFNpemUpKSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgfQotICAgIHVpbnQzMl90KiBkYXRhID0gKHVpbnQzMl90Kikqb3V0RGF0YTsKLSAgICAqZGF0YSsrID0gaHRvZGwoSURNQVBfTUFHSUMpOwotICAgICpkYXRhKysgPSBodG9kbChvcmlnaW5hbENyYyk7Ci0gICAgKmRhdGErKyA9IGh0b2RsKG92ZXJsYXlDcmMpOwotICAgIGNvbnN0IHNpemVfdCBtYXBTaXplID0gbWFwLnNpemUoKTsKLSAgICAqZGF0YSsrID0gaHRvZGwobWFwU2l6ZSk7Ci0gICAgc2l6ZV90IG9mZnNldCA9IG1hcFNpemU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXBTaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgdmVjdG9yID0gbWFwLml0ZW1BdChpKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSB2ZWN0b3Iuc2l6ZSgpOwotICAgICAgICBpZiAoTiA9PSAwKSB7Ci0gICAgICAgICAgICAqZGF0YSsrID0gaHRvZGwoMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBvZmZzZXQrKzsKLSAgICAgICAgICAgICpkYXRhKysgPSBodG9kbChvZmZzZXQpOwotICAgICAgICAgICAgb2Zmc2V0ICs9IE47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXBTaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgdmVjdG9yID0gbWFwLml0ZW1BdChpKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSB2ZWN0b3Iuc2l6ZSgpOwotICAgICAgICBpZiAoTiA9PSAwKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoTiA9PSAxKSB7IC8vIHZlY3RvciBleHBlY3RlZCB0byBob2xkIChvZmZzZXQpICsgKE4gPiAwIGVudHJpZXMpCi0gICAgICAgICAgICBBTE9HVygiaWRtYXA6IHR5cGUgJWQgc3VwcG9zZWRseSBoYXMgZW50cmllcywgYnV0IG5vIGVudHJpZXMgZm91bmRcbiIsIGkpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgKmRhdGErKyA9IGh0b2RsKE4gLSAxKTsgLy8gZG8gbm90IGNvdW50IHRoZSBvZmZzZXQgKHdoaWNoIGlzIHZlY3RvcidzIGZpcnN0IGVsZW1lbnQpCi0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgTjsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCYgb3ZlcmxheVJlc0lEID0gdmVjdG9yLml0ZW1BdChqKTsKLSAgICAgICAgICAgICpkYXRhKysgPSBodG9kbChvdmVybGF5UmVzSUQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1ib29sIFJlc1RhYmxlOjpnZXRJZG1hcEluZm8oY29uc3Qgdm9pZCogaWRtYXAsIHNpemVfdCBzaXplQnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIHBPcmlnaW5hbENyYywgdWludDMyX3QqIHBPdmVybGF5Q3JjKQotewotICAgIGNvbnN0IHVpbnQzMl90KiBtYXAgPSAoY29uc3QgdWludDMyX3QqKWlkbWFwOwotICAgIGlmICghYXNzZXJ0SWRtYXBIZWFkZXIobWFwLCBzaXplQnl0ZXMpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgKnBPcmlnaW5hbENyYyA9IG1hcFsxXTsKLSAgICAqcE92ZXJsYXlDcmMgPSBtYXBbMl07Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotI2RlZmluZSBDSEFSMTZfVE9fQ1NUUihjMTYsIGxlbikgKFN0cmluZzgoU3RyaW5nMTYoYzE2LGxlbikpLnN0cmluZygpKQotCi0jZGVmaW5lIENIQVIxNl9BUlJBWV9FUShjb25zdGFudCwgdmFyLCBsZW4pIFwKLSAgICAgICAgKChsZW4gPT0gKHNpemVvZihjb25zdGFudCkvc2l6ZW9mKGNvbnN0YW50WzBdKSkpICYmICgwID09IG1lbWNtcCgodmFyKSwgKGNvbnN0YW50KSwgKGxlbikpKSkKLQotc3RhdGljIHZvaWQgcHJpbnRfY29tcGxleCh1aW50MzJfdCBjb21wbGV4LCBib29sIGlzRnJhY3Rpb24pCi17Ci0gICAgY29uc3QgZmxvYXQgTUFOVElTU0FfTVVMVCA9Ci0gICAgICAgIDEuMGYgLyAoMTw8UmVzX3ZhbHVlOjpDT01QTEVYX01BTlRJU1NBX1NISUZUKTsKLSAgICBjb25zdCBmbG9hdCBSQURJWF9NVUxUU1tdID0gewotICAgICAgICAxLjBmKk1BTlRJU1NBX01VTFQsIDEuMGYvKDE8PDcpKk1BTlRJU1NBX01VTFQsCi0gICAgICAgIDEuMGYvKDE8PDE1KSpNQU5USVNTQV9NVUxULCAxLjBmLygxPDwyMykqTUFOVElTU0FfTVVMVAotICAgIH07Ci0KLSAgICBmbG9hdCB2YWx1ZSA9IChjb21wbGV4JihSZXNfdmFsdWU6OkNPTVBMRVhfTUFOVElTU0FfTUFTSwotICAgICAgICAgICAgICAgICAgIDw8UmVzX3ZhbHVlOjpDT01QTEVYX01BTlRJU1NBX1NISUZUKSkKLSAgICAgICAgICAgICogUkFESVhfTVVMVFNbKGNvbXBsZXg+PlJlc192YWx1ZTo6Q09NUExFWF9SQURJWF9TSElGVCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJlc192YWx1ZTo6Q09NUExFWF9SQURJWF9NQVNLXTsKLSAgICBwcmludGYoIiVmIiwgdmFsdWUpOwotICAgIAotICAgIGlmICghaXNGcmFjdGlvbikgewotICAgICAgICBzd2l0Y2ggKChjb21wbGV4Pj5SZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9TSElGVCkmUmVzX3ZhbHVlOjpDT01QTEVYX1VOSVRfTUFTSykgewotICAgICAgICAgICAgY2FzZSBSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9QWDogcHJpbnRmKCJweCIpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzX3ZhbHVlOjpDT01QTEVYX1VOSVRfRElQOiBwcmludGYoImRwIik7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9TUDogcHJpbnRmKCJzcCIpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUmVzX3ZhbHVlOjpDT01QTEVYX1VOSVRfUFQ6IHByaW50ZigicHQiKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc192YWx1ZTo6Q09NUExFWF9VTklUX0lOOiBwcmludGYoImluIik7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBSZXNfdmFsdWU6OkNPTVBMRVhfVU5JVF9NTTogcHJpbnRmKCJtbSIpOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IHByaW50ZigiICh1bmtub3duIHVuaXQpIik7IGJyZWFrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNoICgoY29tcGxleD4+UmVzX3ZhbHVlOjpDT01QTEVYX1VOSVRfU0hJRlQpJlJlc192YWx1ZTo6Q09NUExFWF9VTklUX01BU0spIHsKLSAgICAgICAgICAgIGNhc2UgUmVzX3ZhbHVlOjpDT01QTEVYX1VOSVRfRlJBQ1RJT046IHByaW50ZigiJSUiKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlc192YWx1ZTo6Q09NUExFWF9VTklUX0ZSQUNUSU9OX1BBUkVOVDogcHJpbnRmKCIlJXAiKTsgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBwcmludGYoIiAodW5rbm93biB1bml0KSIpOyBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gTm9ybWFsaXplIGEgc3RyaW5nIGZvciBvdXRwdXQKLVN0cmluZzggUmVzVGFibGU6Om5vcm1hbGl6ZUZvck91dHB1dCggY29uc3QgY2hhciAqaW5wdXQgKQotewotICAgIFN0cmluZzggcmV0OwotICAgIGNoYXIgYnVmZlsyXTsKLSAgICBidWZmWzFdID0gJ1wwJzsKLQotICAgIHdoaWxlICgqaW5wdXQgIT0gJ1wwJykgewotICAgICAgICBzd2l0Y2ggKCppbnB1dCkgewotICAgICAgICAgICAgLy8gQWxsIGludGVyZXN0aW5nIGNoYXJhY3RlcnMgYXJlIGluIHRoZSBBU0NJSSB6b25lLCBzbyB3ZSBhcmUgbWFraW5nIG91ciBvd24gbGl2ZXMKLSAgICAgICAgICAgIC8vIGVhc2llciBieSBzY2FubmluZyB0aGUgc3RyaW5nIG9uZSBieXRlIGF0IGEgdGltZS4KLSAgICAgICAgY2FzZSAnXFwnOgotICAgICAgICAgICAgcmV0ICs9ICJcXFxcIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdcbic6Ci0gICAgICAgICAgICByZXQgKz0gIlxcbiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICByZXQgKz0gIlxcXCIiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBidWZmWzBdID0gKmlucHV0OwotICAgICAgICAgICAgcmV0ICs9IGJ1ZmY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlucHV0Kys7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotdm9pZCBSZXNUYWJsZTo6cHJpbnRfdmFsdWUoY29uc3QgUGFja2FnZSogcGtnLCBjb25zdCBSZXNfdmFsdWUmIHZhbHVlKSBjb25zdAotewotICAgIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfTlVMTCkgewotICAgICAgICBwcmludGYoIihudWxsKVxuIik7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfUkVGRVJFTkNFKSB7Ci0gICAgICAgIHByaW50ZigiKHJlZmVyZW5jZSkgMHglMDh4XG4iLCB2YWx1ZS5kYXRhKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9BVFRSSUJVVEUpIHsKLSAgICAgICAgcHJpbnRmKCIoYXR0cmlidXRlKSAweCUwOHhcbiIsIHZhbHVlLmRhdGEpOwotICAgIH0gZWxzZSBpZiAodmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX1NUUklORykgewotICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICBjb25zdCBjaGFyKiBzdHI4ID0gcGtnLT5oZWFkZXItPnZhbHVlcy5zdHJpbmc4QXQoCi0gICAgICAgICAgICAgICAgdmFsdWUuZGF0YSwgJmxlbik7Ci0gICAgICAgIGlmIChzdHI4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHByaW50ZigiKHN0cmluZzgpIFwiJXNcIlxuIiwgbm9ybWFsaXplRm9yT3V0cHV0KHN0cjgpLnN0cmluZygpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBzdHIxNiA9IHBrZy0+aGVhZGVyLT52YWx1ZXMuc3RyaW5nQXQoCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlLmRhdGEsICZsZW4pOwotICAgICAgICAgICAgaWYgKHN0cjE2ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIihzdHJpbmcxNikgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVGb3JPdXRwdXQoU3RyaW5nOChzdHIxNiwgbGVuKS5zdHJpbmcoKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIihzdHJpbmcpIG51bGxcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IAotICAgIH0gZWxzZSBpZiAodmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX0ZMT0FUKSB7Ci0gICAgICAgIHByaW50ZigiKGZsb2F0KSAlZ1xuIiwgKihjb25zdCBmbG9hdCopJnZhbHVlLmRhdGEpOwotICAgIH0gZWxzZSBpZiAodmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX0RJTUVOU0lPTikgewotICAgICAgICBwcmludGYoIihkaW1lbnNpb24pICIpOwotICAgICAgICBwcmludF9jb21wbGV4KHZhbHVlLmRhdGEsIGZhbHNlKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgIH0gZWxzZSBpZiAodmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX0ZSQUNUSU9OKSB7Ci0gICAgICAgIHByaW50ZigiKGZyYWN0aW9uKSAiKTsKLSAgICAgICAgcHJpbnRfY29tcGxleCh2YWx1ZS5kYXRhLCB0cnVlKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgIH0gZWxzZSBpZiAodmFsdWUuZGF0YVR5cGUgPj0gUmVzX3ZhbHVlOjpUWVBFX0ZJUlNUX0NPTE9SX0lOVAotICAgICAgICAgICAgfHwgdmFsdWUuZGF0YVR5cGUgPD0gUmVzX3ZhbHVlOjpUWVBFX0xBU1RfQ09MT1JfSU5UKSB7Ci0gICAgICAgIHByaW50ZigiKGNvbG9yKSAjJTA4eFxuIiwgdmFsdWUuZGF0YSk7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfSU5UX0JPT0xFQU4pIHsKLSAgICAgICAgcHJpbnRmKCIoYm9vbGVhbikgJXNcbiIsIHZhbHVlLmRhdGEgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLmRhdGFUeXBlID49IFJlc192YWx1ZTo6VFlQRV9GSVJTVF9JTlQKLSAgICAgICAgICAgIHx8IHZhbHVlLmRhdGFUeXBlIDw9IFJlc192YWx1ZTo6VFlQRV9MQVNUX0lOVCkgewotICAgICAgICBwcmludGYoIihpbnQpIDB4JTA4eCBvciAlZFxuIiwgdmFsdWUuZGF0YSwgdmFsdWUuZGF0YSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmKCIodW5rbm93biB0eXBlKSB0PTB4JTAyeCBkPTB4JTA4eCAocz0weCUwNHggcj0weCUwMngpXG4iLAotICAgICAgICAgICAgICAgKGludCl2YWx1ZS5kYXRhVHlwZSwgKGludCl2YWx1ZS5kYXRhLAotICAgICAgICAgICAgICAgKGludCl2YWx1ZS5zaXplLCAoaW50KXZhbHVlLnJlczApOwotICAgIH0KLX0KLQotdm9pZCBSZXNUYWJsZTo6cHJpbnQoYm9vbCBpbmNsVmFsdWVzKSBjb25zdAotewotICAgIGlmIChtRXJyb3IgIT0gMCkgewotICAgICAgICBwcmludGYoIm1FcnJvcj0weCV4ICglcylcbiIsIG1FcnJvciwgc3RyZXJyb3IobUVycm9yKSk7Ci0gICAgfQotI2lmIDAKLSAgICBwcmludGYoIm1QYXJhbXM9JWMlYy0lYyVjLFxuIiwKLSAgICAgICAgICAgIG1QYXJhbXMubGFuZ3VhZ2VbMF0sIG1QYXJhbXMubGFuZ3VhZ2VbMV0sCi0gICAgICAgICAgICBtUGFyYW1zLmNvdW50cnlbMF0sIG1QYXJhbXMuY291bnRyeVsxXSk7Ci0jZW5kaWYKLSAgICBzaXplX3QgcGdDb3VudCA9IG1QYWNrYWdlR3JvdXBzLnNpemUoKTsKLSAgICBwcmludGYoIlBhY2thZ2UgR3JvdXBzICglZClcbiIsIChpbnQpcGdDb3VudCk7Ci0gICAgZm9yIChzaXplX3QgcGdJbmRleD0wOyBwZ0luZGV4PHBnQ291bnQ7IHBnSW5kZXgrKykgewotICAgICAgICBjb25zdCBQYWNrYWdlR3JvdXAqIHBnID0gbVBhY2thZ2VHcm91cHNbcGdJbmRleF07Ci0gICAgICAgIHByaW50ZigiUGFja2FnZSBHcm91cCAlZCBpZD0lZCBwYWNrYWdlQ291bnQ9JWQgbmFtZT0lc1xuIiwKLSAgICAgICAgICAgICAgICAoaW50KXBnSW5kZXgsIHBnLT5pZCwgKGludClwZy0+cGFja2FnZXMuc2l6ZSgpLAotICAgICAgICAgICAgICAgIFN0cmluZzgocGctPm5hbWUpLnN0cmluZygpKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBwa2dDb3VudCA9IHBnLT5wYWNrYWdlcy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IHBrZ0luZGV4PTA7IHBrZ0luZGV4PHBrZ0NvdW50OyBwa2dJbmRleCsrKSB7Ci0gICAgICAgICAgICBjb25zdCBQYWNrYWdlKiBwa2cgPSBwZy0+cGFja2FnZXNbcGtnSW5kZXhdOwotICAgICAgICAgICAgc2l6ZV90IHR5cGVDb3VudCA9IHBrZy0+dHlwZXMuc2l6ZSgpOwotICAgICAgICAgICAgcHJpbnRmKCIgIFBhY2thZ2UgJWQgaWQ9JWQgbmFtZT0lcyB0eXBlQ291bnQ9JWRcbiIsIChpbnQpcGtnSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgIHBrZy0+cGFja2FnZS0+aWQsIFN0cmluZzgoU3RyaW5nMTYocGtnLT5wYWNrYWdlLT5uYW1lKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgIChpbnQpdHlwZUNvdW50KTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IHR5cGVJbmRleD0wOyB0eXBlSW5kZXg8dHlwZUNvdW50OyB0eXBlSW5kZXgrKykgewotICAgICAgICAgICAgICAgIGNvbnN0IFR5cGUqIHR5cGVDb25maWdzID0gcGtnLT5nZXRUeXBlKHR5cGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVDb25maWdzID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgdHlwZSAlZCBOVUxMXG4iLCAoaW50KXR5cGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgTlRDID0gdHlwZUNvbmZpZ3MtPmNvbmZpZ3Muc2l6ZSgpOwotICAgICAgICAgICAgICAgIHByaW50ZigiICAgIHR5cGUgJWQgY29uZmlnQ291bnQ9JWQgZW50cnlDb3VudD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGludCl0eXBlSW5kZXgsIChpbnQpTlRDLCAoaW50KXR5cGVDb25maWdzLT5lbnRyeUNvdW50KTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZUNvbmZpZ3MtPnR5cGVTcGVjRmxhZ3MgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBlbnRyeUluZGV4PTA7IGVudHJ5SW5kZXg8dHlwZUNvbmZpZ3MtPmVudHJ5Q291bnQ7IGVudHJ5SW5kZXgrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVzSUQgPSAoMHhmZjAwMDAwMCAmICgocGtnLT5wYWNrYWdlLT5pZCk8PDI0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKDB4MDBmZjAwMDAgJiAoKHR5cGVJbmRleCsxKTw8MTYpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoMHgwMDAwZmZmZiAmIChlbnRyeUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV9uYW1lIHJlc05hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy0+Z2V0UmVzb3VyY2VOYW1lKHJlc0lELCB0cnVlLCAmcmVzTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IHR5cGU4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZTg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc05hbWUudHlwZTggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOCA9IFN0cmluZzgocmVzTmFtZS50eXBlOCwgcmVzTmFtZS50eXBlTGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOCA9IFN0cmluZzgocmVzTmFtZS50eXBlLCByZXNOYW1lLnR5cGVMZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzTmFtZS5uYW1lOCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU4ID0gU3RyaW5nOChyZXNOYW1lLm5hbWU4LCByZXNOYW1lLm5hbWVMZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU4ID0gU3RyaW5nOChyZXNOYW1lLm5hbWUsIHJlc05hbWUubmFtZUxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgc3BlYyByZXNvdXJjZSAweCUwOHggJXM6JXMvJXM6IGZsYWdzPTB4JTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQVIxNl9UT19DU1RSKHJlc05hbWUucGFja2FnZSwgcmVzTmFtZS5wYWNrYWdlTGVuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTguc3RyaW5nKCksIG5hbWU4LnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdG9obCh0eXBlQ29uZmlncy0+dHlwZVNwZWNGbGFnc1tlbnRyeUluZGV4XSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIElOVkFMSUQgVFlQRSBDT05GSUcgRk9SIFJFU09VUkNFIDB4JTA4eFxuIiwgcmVzSUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGNvbmZpZ0luZGV4PTA7IGNvbmZpZ0luZGV4PE5UQzsgY29uZmlnSW5kZXgrKykgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV90eXBlKiB0eXBlID0gdHlwZUNvbmZpZ3MtPmNvbmZpZ3NbY29uZmlnSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICBpZiAoKCgodWludDY0X3QpdHlwZSkmMHgzKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIE5PTi1JTlRFR0VSIFJlc1RhYmxlX3R5cGUgQUREUkVTUzogJXBcbiIsIHR5cGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBjb25maWdTdHIgPSB0eXBlLT5jb25maWcudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBjb25maWcgJXM6XG4iLCBjb25maWdTdHIuc2l6ZSgpID4gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29uZmlnU3RyLnN0cmluZygpIDogIihkZWZhdWx0KSIpOwotICAgICAgICAgICAgICAgICAgICBzaXplX3QgZW50cnlDb3VudCA9IGR0b2hsKHR5cGUtPmVudHJ5Q291bnQpOwotICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlbnRyaWVzU3RhcnQgPSBkdG9obCh0eXBlLT5lbnRyaWVzU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKGVudHJpZXNTdGFydCYweDMpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgTk9OLUlOVEVHRVIgUmVzVGFibGVfdHlwZSBlbnRyaWVzU3RhcnQgT0ZGU0VUOiAlcFxuIiwgKHZvaWQqKWVudHJpZXNTdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0eXBlU2l6ZSA9IGR0b2hsKHR5cGUtPmhlYWRlci5zaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlU2l6ZSYweDMpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgTk9OLUlOVEVHRVIgUmVzVGFibGVfdHlwZSBoZWFkZXIuc2l6ZTogJXBcbiIsICh2b2lkKil0eXBlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBlbnRyeUluZGV4PTA7IGVudHJ5SW5kZXg8ZW50cnlDb3VudDsgZW50cnlJbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGNvbnN0IGVuZCA9ICgoY29uc3QgdWludDhfdCopdHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGR0b2hsKHR5cGUtPmhlYWRlci5zaXplKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBjb25zdCBlaW5kZXggPSAoY29uc3QgdWludDMyX3QqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGNvbnN0IHVpbnQ4X3QqKXR5cGUpICsgZHRvaHModHlwZS0+aGVhZGVyLmhlYWRlclNpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGhpc09mZnNldCA9IGR0b2hsKGVpbmRleFtlbnRyeUluZGV4XSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpc09mZnNldCA9PSBSZXNUYWJsZV90eXBlOjpOT19FTlRSWSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZXNJRCA9ICgweGZmMDAwMDAwICYgKChwa2ctPnBhY2thZ2UtPmlkKTw8MjQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoMHgwMGZmMDAwMCAmICgodHlwZUluZGV4KzEpPDwxNikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgweDAwMDBmZmZmICYgKGVudHJ5SW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlX25hbWUgcmVzTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLT5nZXRSZXNvdXJjZU5hbWUocmVzSUQsIHRydWUsICZyZXNOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggdHlwZTg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lODsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzTmFtZS50eXBlOCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU4ID0gU3RyaW5nOChyZXNOYW1lLnR5cGU4LCByZXNOYW1lLnR5cGVMZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU4ID0gU3RyaW5nOChyZXNOYW1lLnR5cGUsIHJlc05hbWUudHlwZUxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNOYW1lLm5hbWU4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTggPSBTdHJpbmc4KHJlc05hbWUubmFtZTgsIHJlc05hbWUubmFtZUxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTggPSBTdHJpbmc4KHJlc05hbWUubmFtZSwgcmVzTmFtZS5uYW1lTGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICAgIHJlc291cmNlIDB4JTA4eCAlczolcy8lczogIiwgcmVzSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFSMTZfVE9fQ1NUUihyZXNOYW1lLnBhY2thZ2UsIHJlc05hbWUucGFja2FnZUxlbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOC5zdHJpbmcoKSwgbmFtZTguc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgICAgSU5WQUxJRCBSRVNPVVJDRSAweCUwOHg6ICIsIHJlc0lEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGhpc09mZnNldCYweDMpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIk5PTi1JTlRFR0VSIE9GRlNFVDogJXBcbiIsICh2b2lkKil0aGlzT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGhpc09mZnNldCtzaXplb2YoUmVzVGFibGVfZW50cnkpKSA+IHR5cGVTaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJPRkZTRVQgT1VUIE9GIEJPVU5EUzogJXArJXAgKHNpemUgaXMgJXApXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopZW50cmllc1N0YXJ0LCAodm9pZCopdGhpc09mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXR5cGVTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfZW50cnkqIGVudCA9IChjb25zdCBSZXNUYWJsZV9lbnRyeSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopdHlwZSkgKyBlbnRyaWVzU3RhcnQgKyB0aGlzT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGVudHJpZXNTdGFydCArIHRoaXNPZmZzZXQpJjB4MykgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiTk9OLUlOVEVHRVIgUmVzVGFibGVfZW50cnkgT0ZGU0VUOiAlcFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikoZW50cmllc1N0YXJ0ICsgdGhpc09mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBlc2l6ZSA9IGR0b2hzKGVudC0+c2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGVzaXplJjB4MykgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiTk9OLUlOVEVHRVIgUmVzVGFibGVfZW50cnkgU0laRTogJXBcbiIsICh2b2lkKillc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXNPZmZzZXQrZXNpemUpID4gdHlwZVNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlJlc1RhYmxlX2VudHJ5IE9VVCBPRiBCT1VORFM6ICVwKyVwKyVwIChzaXplIGlzICVwKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKWVudHJpZXNTdGFydCwgKHZvaWQqKXRoaXNPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKillc2l6ZSwgKHZvaWQqKXR5cGVTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc192YWx1ZSogdmFsdWVQdHIgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfbWFwX2VudHJ5KiBiYWdQdHIgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgUmVzX3ZhbHVlIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChkdG9ocyhlbnQtPmZsYWdzKSZSZXNUYWJsZV9lbnRyeTo6RkxBR19DT01QTEVYKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI8YmFnPiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZ1B0ciA9IChjb25zdCBSZXNUYWJsZV9tYXBfZW50cnkqKWVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVQdHIgPSAoY29uc3QgUmVzX3ZhbHVlKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoY29uc3QgdWludDhfdCopZW50KSArIGVzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5jb3B5RnJvbV9kdG9oKCp2YWx1ZVB0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ0PTB4JTAyeCBkPTB4JTA4eCAocz0weCUwNHggcj0weCUwMngpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCl2YWx1ZS5kYXRhVHlwZSwgKGludCl2YWx1ZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXZhbHVlLnNpemUsIChpbnQpdmFsdWUucmVzMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZHRvaHMoZW50LT5mbGFncykmUmVzVGFibGVfZW50cnk6OkZMQUdfUFVCTElDKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgKFBVQkxJQykiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluY2xWYWx1ZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVQdHIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgICAgICAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfdmFsdWUocGtnLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiYWdQdHIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgTiA9IGR0b2hsKGJhZ1B0ci0+Y291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBiYXNlTWFwUHRyID0gKGNvbnN0IHVpbnQ4X3QqKWVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1hcE9mZnNldCA9IGVzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9tYXAqIG1hcFB0ciA9IChSZXNUYWJsZV9tYXAqKShiYXNlTWFwUHRyK21hcE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgICAgIFBhcmVudD0weCUwOHgsIENvdW50PSVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHRvaGwoYmFnUHRyLT5wYXJlbnQuaWRlbnQpLCBOKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE4gJiYgbWFwT2Zmc2V0IDwgKHR5cGVTaXplLXNpemVvZihSZXNUYWJsZV9tYXApKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgICAgICAjJWkgKEtleT0weCUwOHgpOiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIGR0b2hsKG1hcFB0ci0+bmFtZS5pZGVudCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuY29weUZyb21fZHRvaChtYXBQdHItPnZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X3ZhbHVlKHBrZywgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBkdG9ocyhtYXBQdHItPnZhbHVlLnNpemUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwT2Zmc2V0ICs9IHNpemUgKyBzaXplb2YoKm1hcFB0ciktc2l6ZW9mKG1hcFB0ci0+dmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwUHRyID0gKFJlc1RhYmxlX21hcCopKGJhc2VNYXBQdHIrbWFwT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotfSAgIC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9TdHJlYW1pbmdaaXBJbmZsYXRlci5jcHAgYi9saWJzL2FuZHJvaWRmdy9TdHJlYW1pbmdaaXBJbmZsYXRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZmVjMjMuLjAwMDAwMDAKLS0tIGEvbGlicy9hbmRyb2lkZncvU3RyZWFtaW5nWmlwSW5mbGF0ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLyNkZWZpbmUgTE9HX05ERUJVRyAwCi0jZGVmaW5lIExPR19UQUcgInN6aXBpbmYiCi0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0KLSNpbmNsdWRlIDxhbmRyb2lkZncvU3RyZWFtaW5nWmlwSW5mbGF0ZXIuaD4KLSNpbmNsdWRlIDx1dGlscy9GaWxlTWFwLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotLyoKLSAqIFRFTVBfRkFJTFVSRV9SRVRSWSBpcyBkZWZpbmVkIGJ5IHNvbWUsIGJ1dCBub3QgYWxsLCB2ZXJzaW9ucyBvZgotICogPHVuaXN0ZC5oPi4gKEFsYXMsIGl0IGlzIG5vdCBhcyBzdGFuZGFyZCBhcyB3ZSdkIGhvcGVkISkgU28sIGlmIGl0J3MKLSAqIG5vdCBhbHJlYWR5IGRlZmluZWQsIHRoZW4gZGVmaW5lIGl0IGhlcmUuCi0gKi8KLSNpZm5kZWYgVEVNUF9GQUlMVVJFX1JFVFJZCi0vKiBVc2VkIHRvIHJldHJ5IHN5c2NhbGxzIHRoYXQgY2FuIHJldHVybiBFSU5UUi4gKi8KLSNkZWZpbmUgVEVNUF9GQUlMVVJFX1JFVFJZKGV4cCkgKHsgICAgICAgICBcCi0gICAgdHlwZW9mIChleHApIF9yYzsgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX3JjID0gKGV4cCk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoX3JjID09IC0xICYmIGVycm5vID09IEVJTlRSKTsgXAotICAgIF9yYzsgfSkKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHNpemVfdCBtaW5fb2Yoc2l6ZV90IGEsIHNpemVfdCBiKSB7IHJldHVybiAoYSA8IGIpID8gYSA6IGI7IH0KLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLS8qCi0gKiBTdHJlYW1pbmcgYWNjZXNzIHRvIGNvbXByZXNzZWQgYXNzZXQgZGF0YSBpbiBhbiBvcGVuIGZkCi0gKi8KLVN0cmVhbWluZ1ppcEluZmxhdGVyOjpTdHJlYW1pbmdaaXBJbmZsYXRlcihpbnQgZmQsIG9mZjY0X3QgY29tcERhdGFTdGFydCwKLSAgICAgICAgc2l6ZV90IHVuY29tcFNpemUsIHNpemVfdCBjb21wU2l6ZSkgewotICAgIG1GZCA9IGZkOwotICAgIG1EYXRhTWFwID0gTlVMTDsKLSAgICBtSW5GaWxlU3RhcnQgPSBjb21wRGF0YVN0YXJ0OwotICAgIG1PdXRUb3RhbFNpemUgPSB1bmNvbXBTaXplOwotICAgIG1JblRvdGFsU2l6ZSA9IGNvbXBTaXplOwotCi0gICAgbUluQnVmU2l6ZSA9IFN0cmVhbWluZ1ppcEluZmxhdGVyOjpJTlBVVF9DSFVOS19TSVpFOwotICAgIG1JbkJ1ZiA9IG5ldyB1aW50OF90W21JbkJ1ZlNpemVdOwotCi0gICAgbU91dEJ1ZlNpemUgPSBTdHJlYW1pbmdaaXBJbmZsYXRlcjo6T1VUUFVUX0NIVU5LX1NJWkU7Ci0gICAgbU91dEJ1ZiA9IG5ldyB1aW50OF90W21PdXRCdWZTaXplXTsKLQotICAgIGluaXRJbmZsYXRlU3RhdGUoKTsKLX0KLQotLyoKLSAqIFN0cmVhbWluZyBhY2Nlc3MgdG8gY29tcHJlc3NlZCBkYXRhIGhlbGQgaW4gYW4gbW1hcHBlZCByZWdpb24gb2YgbWVtb3J5Ci0gKi8KLVN0cmVhbWluZ1ppcEluZmxhdGVyOjpTdHJlYW1pbmdaaXBJbmZsYXRlcihGaWxlTWFwKiBkYXRhTWFwLCBzaXplX3QgdW5jb21wU2l6ZSkgewotICAgIG1GZCA9IC0xOwotICAgIG1EYXRhTWFwID0gZGF0YU1hcDsKLSAgICBtT3V0VG90YWxTaXplID0gdW5jb21wU2l6ZTsKLSAgICBtSW5Ub3RhbFNpemUgPSBkYXRhTWFwLT5nZXREYXRhTGVuZ3RoKCk7Ci0KLSAgICBtSW5CdWYgPSAodWludDhfdCopIGRhdGFNYXAtPmdldERhdGFQdHIoKTsKLSAgICBtSW5CdWZTaXplID0gbUluVG90YWxTaXplOwotCi0gICAgbU91dEJ1ZlNpemUgPSBTdHJlYW1pbmdaaXBJbmZsYXRlcjo6T1VUUFVUX0NIVU5LX1NJWkU7Ci0gICAgbU91dEJ1ZiA9IG5ldyB1aW50OF90W21PdXRCdWZTaXplXTsKLQotICAgIGluaXRJbmZsYXRlU3RhdGUoKTsKLX0KLQotU3RyZWFtaW5nWmlwSW5mbGF0ZXI6On5TdHJlYW1pbmdaaXBJbmZsYXRlcigpIHsKLSAgICAvLyB0ZWFyIGRvd24gdGhlIGluLWZsaWdodCB6aXAgc3RhdGUganVzdCBpbiBjYXNlCi0gICAgOjppbmZsYXRlRW5kKCZtSW5mbGF0ZVN0YXRlKTsKLQotICAgIGlmIChtRGF0YU1hcCA9PSBOVUxMKSB7Ci0gICAgICAgIGRlbGV0ZSBbXSBtSW5CdWY7Ci0gICAgfQotICAgIGRlbGV0ZSBbXSBtT3V0QnVmOwotfQotCi12b2lkIFN0cmVhbWluZ1ppcEluZmxhdGVyOjppbml0SW5mbGF0ZVN0YXRlKCkgewotICAgIEFMT0dWKCJJbml0aWFsaXppbmcgaW5mbGF0ZSBzdGF0ZSIpOwotCi0gICAgbWVtc2V0KCZtSW5mbGF0ZVN0YXRlLCAwLCBzaXplb2YobUluZmxhdGVTdGF0ZSkpOwotICAgIG1JbmZsYXRlU3RhdGUuemFsbG9jID0gWl9OVUxMOwotICAgIG1JbmZsYXRlU3RhdGUuemZyZWUgPSBaX05VTEw7Ci0gICAgbUluZmxhdGVTdGF0ZS5vcGFxdWUgPSBaX05VTEw7Ci0gICAgbUluZmxhdGVTdGF0ZS5uZXh0X2luID0gKEJ5dGVmKiltSW5CdWY7Ci0gICAgbUluZmxhdGVTdGF0ZS5uZXh0X291dCA9IChCeXRlZiopIG1PdXRCdWY7Ci0gICAgbUluZmxhdGVTdGF0ZS5hdmFpbF9vdXQgPSBtT3V0QnVmU2l6ZTsKLSAgICBtSW5mbGF0ZVN0YXRlLmRhdGFfdHlwZSA9IFpfVU5LTk9XTjsKLQotICAgIG1PdXRMYXN0RGVjb2RlZCA9IG1PdXREZWxpdmVyYWJsZSA9IG1PdXRDdXJQb3NpdGlvbiA9IDA7Ci0gICAgbUluTmV4dENodW5rT2Zmc2V0ID0gMDsKLSAgICBtU3RyZWFtTmVlZHNJbml0ID0gdHJ1ZTsKLQotICAgIGlmIChtRGF0YU1hcCA9PSBOVUxMKSB7Ci0gICAgICAgIDo6bHNlZWsobUZkLCBtSW5GaWxlU3RhcnQsIFNFRUtfU0VUKTsKLSAgICAgICAgbUluZmxhdGVTdGF0ZS5hdmFpbF9pbiA9IDA7IC8vIHNldCB3aGVuIGEgY2h1bmsgaXMgcmVhZCBpbgotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1JbmZsYXRlU3RhdGUuYXZhaWxfaW4gPSBtSW5CdWZTaXplOwotICAgIH0KLX0KLQotLyoKLSAqIEJhc2ljIGFwcHJvYWNoOgotICoKLSAqIDEuIElmIHdlIGhhdmUgdW5kZWxpdmVyZWQgdW5jb21wcmVzc2VkIGRhdGEsIHNlbmQgaXQuICBBdCB0aGlzIHBvaW50Ci0gKiAgICBlaXRoZXIgd2UndmUgc2F0aXNmaWVkIHRoZSByZXF1ZXN0LCBvciB3ZSd2ZSBleGhhdXN0ZWQgdGhlIGF2YWlsYWJsZQotICogICAgb3V0cHV0IGRhdGEgaW4gbU91dEJ1Zi4KLSAqCi0gKiAyLiBXaGlsZSB3ZSBoYXZlbid0IHNlbnQgZW5vdWdoIGRhdGEgdG8gc2F0aXNmeSB0aGUgcmVxdWVzdDoKLSAqICAgIDAuIGlmIHRoZSByZXF1ZXN0IGlzIGZvciBtb3JlIGRhdGEgdGhhbiBleGlzdHMsIGJhaWwuCi0gKiAgICBhLiBpZiB0aGVyZSBpcyBubyBpbnB1dCBkYXRhIHRvIGRlY29kZSwgcmVhZCBzb21lIGludG8gdGhlIGlucHV0IGJ1ZmZlcgotICogICAgICAgYW5kIHJlYWRqdXN0IHRoZSB6X3N0cmVhbSBpbnB1dCBwb2ludGVycwotICogICAgYi4gcG9pbnQgdGhlIG91dHB1dCB0byB0aGUgc3RhcnQgb2YgdGhlIG91dHB1dCBidWZmZXIgYW5kIGRlY29kZSB3aGF0IHdlIGNhbgotICogICAgYy4gZGVsaXZlciB3aGF0ZXZlciBvdXRwdXQgZGF0YSB3ZSBjYW4KLSAqLwotc3NpemVfdCBTdHJlYW1pbmdaaXBJbmZsYXRlcjo6cmVhZCh2b2lkKiBvdXRCdWYsIHNpemVfdCBjb3VudCkgewotICAgIHVpbnQ4X3QqIGRlc3QgPSAodWludDhfdCopIG91dEJ1ZjsKLSAgICBzaXplX3QgYnl0ZXNSZWFkID0gMDsKLSAgICBzaXplX3QgdG9SZWFkID0gbWluX29mKGNvdW50LCBzaXplX3QobU91dFRvdGFsU2l6ZSAtIG1PdXRDdXJQb3NpdGlvbikpOwotICAgIHdoaWxlICh0b1JlYWQgPiAwKSB7Ci0gICAgICAgIC8vIEZpcnN0LCB3cml0ZSBmcm9tIHdoYXRldmVyIHdlIGFscmVhZHkgaGF2ZSBkZWNvZGVkIGFuZCByZWFkeSB0byBnbwotICAgICAgICBzaXplX3QgZGVsaXZlcmFibGUgPSBtaW5fb2YodG9SZWFkLCBtT3V0TGFzdERlY29kZWQgLSBtT3V0RGVsaXZlcmFibGUpOwotICAgICAgICBpZiAoZGVsaXZlcmFibGUgPiAwKSB7Ci0gICAgICAgICAgICBpZiAob3V0QnVmICE9IE5VTEwpIG1lbWNweShkZXN0LCBtT3V0QnVmICsgbU91dERlbGl2ZXJhYmxlLCBkZWxpdmVyYWJsZSk7Ci0gICAgICAgICAgICBtT3V0RGVsaXZlcmFibGUgKz0gZGVsaXZlcmFibGU7Ci0gICAgICAgICAgICBtT3V0Q3VyUG9zaXRpb24gKz0gZGVsaXZlcmFibGU7Ci0gICAgICAgICAgICBkZXN0ICs9IGRlbGl2ZXJhYmxlOwotICAgICAgICAgICAgYnl0ZXNSZWFkICs9IGRlbGl2ZXJhYmxlOwotICAgICAgICAgICAgdG9SZWFkIC09IGRlbGl2ZXJhYmxlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbmVlZCBtb3JlIGRhdGE/ICB0aW1lIHRvIGRlY29kZSBzb21lLgotICAgICAgICBpZiAodG9SZWFkID4gMCkgewotICAgICAgICAgICAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSB0byBkZWNvZGUsIHJlYWQgc29tZSBpbi4gIElmIHdlJ3JlIHdvcmtpbmcKLSAgICAgICAgICAgIC8vIGZyb20gbW1hcHBlZCBkYXRhIHRoaXMgd29uJ3QgaGFwcGVuLCBiZWNhdXNlIHRoZSBjbGlwcGluZyB0byB0b3RhbCBzaXplCi0gICAgICAgICAgICAvLyB3aWxsIHByZXZlbnQgcmVhZGluZyBvZmYgdGhlIGVuZCBvZiB0aGUgbWFwcGVkIGlucHV0IGNodW5rLgotICAgICAgICAgICAgaWYgKChtSW5mbGF0ZVN0YXRlLmF2YWlsX2luID09IDApICYmIChtRGF0YU1hcCA9PSBOVUxMKSkgewotICAgICAgICAgICAgICAgIGludCBlcnIgPSByZWFkTmV4dENodW5rKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR0UoIlVuYWJsZSB0byBhY2Nlc3MgYXNzZXQgZGF0YTogJWQiLCBlcnIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1TdHJlYW1OZWVkc0luaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIDo6aW5mbGF0ZUVuZCgmbUluZmxhdGVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbml0SW5mbGF0ZVN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIHdlIGtub3cgd2UndmUgZHJhaW5lZCB3aGF0ZXZlciBpcyBpbiB0aGUgb3V0IGJ1ZmZlciBub3csIHNvIGp1c3QKLSAgICAgICAgICAgIC8vIHN0YXJ0IGZyb20gc2NyYXRjaCB0aGVyZSwgcmVhZGluZyBhbGwgdGhlIGlucHV0IHdlIGhhdmUgYXQgcHJlc2VudC4KLSAgICAgICAgICAgIG1JbmZsYXRlU3RhdGUubmV4dF9vdXQgPSAoQnl0ZWYqKSBtT3V0QnVmOwotICAgICAgICAgICAgbUluZmxhdGVTdGF0ZS5hdmFpbF9vdXQgPSBtT3V0QnVmU2l6ZTsKLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgIEFMT0dWKCJJbmZsYXRpbmcgdG8gb3V0YnVmOiBhdmFpbF9pbj0ldSBhdmFpbF9vdXQ9JXUgbmV4dF9pbj0lcCBuZXh0X291dD0lcCIsCi0gICAgICAgICAgICAgICAgICAgIG1JbmZsYXRlU3RhdGUuYXZhaWxfaW4sIG1JbmZsYXRlU3RhdGUuYXZhaWxfb3V0LAotICAgICAgICAgICAgICAgICAgICBtSW5mbGF0ZVN0YXRlLm5leHRfaW4sIG1JbmZsYXRlU3RhdGUubmV4dF9vdXQpOwotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGludCByZXN1bHQgPSBaX09LOwotICAgICAgICAgICAgaWYgKG1TdHJlYW1OZWVkc0luaXQpIHsKLSAgICAgICAgICAgICAgICBBTE9HVigiSW5pdGlhbGl6aW5nIHpsaWIgdG8gaW5mbGF0ZSIpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGluZmxhdGVJbml0MigmbUluZmxhdGVTdGF0ZSwgLU1BWF9XQklUUyk7Ci0gICAgICAgICAgICAgICAgbVN0cmVhbU5lZWRzSW5pdCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBaX09LKSByZXN1bHQgPSA6OmluZmxhdGUoJm1JbmZsYXRlU3RhdGUsIFpfU1lOQ19GTFVTSCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkgewotICAgICAgICAgICAgICAgIC8vIFdob29wcywgaW5mbGF0aW9uIGZhaWxlZAotICAgICAgICAgICAgICAgIEFMT0dFKCJFcnJvciBpbmZsYXRpbmcgYXNzZXQ6ICVkIiwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICA6OmluZmxhdGVFbmQoJm1JbmZsYXRlU3RhdGUpOwotICAgICAgICAgICAgICAgIGluaXRJbmZsYXRlU3RhdGUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdlIGtub3cgd2UgaGF2ZSB0byBoYXZlIHJlYWNoZWQgdGhlIHRhcmdldCBzaXplIGhlcmUgYW5kIHdpbGwKLSAgICAgICAgICAgICAgICAgICAgLy8gbm90IHRyeSB0byByZWFkIGFueSBmdXJ0aGVyLCBzbyBqdXN0IHdpbmQgdGhpbmdzIHVwLgotICAgICAgICAgICAgICAgICAgICA6OmluZmxhdGVFbmQoJm1JbmZsYXRlU3RhdGUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE5vdGUgaG93IG11Y2ggZGF0YSB3ZSBnb3QsIGFuZCBvZmYgd2UgZ28KLSAgICAgICAgICAgICAgICBtT3V0RGVsaXZlcmFibGUgPSAwOwotICAgICAgICAgICAgICAgIG1PdXRMYXN0RGVjb2RlZCA9IG1PdXRCdWZTaXplIC0gbUluZmxhdGVTdGF0ZS5hdmFpbF9vdXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGJ5dGVzUmVhZDsKLX0KLQotaW50IFN0cmVhbWluZ1ppcEluZmxhdGVyOjpyZWFkTmV4dENodW5rKCkgewotICAgIGFzc2VydChtRGF0YU1hcCA9PSBOVUxMKTsKLQotICAgIGlmIChtSW5OZXh0Q2h1bmtPZmZzZXQgPCBtSW5Ub3RhbFNpemUpIHsKLSAgICAgICAgc2l6ZV90IHRvUmVhZCA9IG1pbl9vZihtSW5CdWZTaXplLCBtSW5Ub3RhbFNpemUgLSBtSW5OZXh0Q2h1bmtPZmZzZXQpOwotICAgICAgICBpZiAodG9SZWFkID4gMCkgewotICAgICAgICAgICAgc3NpemVfdCBkaWRSZWFkID0gVEVNUF9GQUlMVVJFX1JFVFJZKDo6cmVhZChtRmQsIG1JbkJ1ZiwgdG9SZWFkKSk7Ci0gICAgICAgICAgICAvL0FMT0dWKCJSZWFkaW5nIGlucHV0IGNodW5rLCBzaXplICUwOHggZGlkcmVhZCAlMDh4IiwgdG9SZWFkLCBkaWRSZWFkKTsKLSAgICAgICAgICAgIGlmIChkaWRSZWFkIDwgMCkgewotICAgICAgICAgICAgICAgIEFMT0dFKCJFcnJvciByZWFkaW5nIGFzc2V0IGRhdGE6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGlkUmVhZDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbUluTmV4dENodW5rT2Zmc2V0ICs9IGRpZFJlYWQ7Ci0gICAgICAgICAgICAgICAgbUluZmxhdGVTdGF0ZS5uZXh0X2luID0gKEJ5dGVmKikgbUluQnVmOwotICAgICAgICAgICAgICAgIG1JbmZsYXRlU3RhdGUuYXZhaWxfaW4gPSBkaWRSZWFkOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0vLyBzZWVraW5nIGJhY2t3YXJkcyByZXF1aXJlcyB1bmNvbXByZXNzaW5nIGZvbSB0aGUgYmVnaW5uaW5nLCBzbyBpcyB2ZXJ5Ci0vLyBleHBlbnNpdmUuICBzZWVraW5nIGZvcndhcmRzIG9ubHkgcmVxdWlyZXMgdW5jb21wcmVzc2luZyBmcm9tIHRoZSBjdXJyZW50Ci0vLyBwb3NpdGlvbiB0byB0aGUgZGVzdGluYXRpb24uCi1vZmY2NF90IFN0cmVhbWluZ1ppcEluZmxhdGVyOjpzZWVrQWJzb2x1dGUob2ZmNjRfdCBhYnNvbHV0ZUlucHV0UG9zaXRpb24pIHsKLSAgICBpZiAoYWJzb2x1dGVJbnB1dFBvc2l0aW9uIDwgbU91dEN1clBvc2l0aW9uKSB7Ci0gICAgICAgIC8vIHJld2luZCBhbmQgcmVwcm9jZXNzIHRoZSBkYXRhIGZyb20gdGhlIGJlZ2lubmluZwotICAgICAgICBpZiAoIW1TdHJlYW1OZWVkc0luaXQpIHsKLSAgICAgICAgICAgIDo6aW5mbGF0ZUVuZCgmbUluZmxhdGVTdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW5pdEluZmxhdGVTdGF0ZSgpOwotICAgICAgICByZWFkKE5VTEwsIGFic29sdXRlSW5wdXRQb3NpdGlvbik7Ci0gICAgfSBlbHNlIGlmIChhYnNvbHV0ZUlucHV0UG9zaXRpb24gPiBtT3V0Q3VyUG9zaXRpb24pIHsKLSAgICAgICAgcmVhZChOVUxMLCBhYnNvbHV0ZUlucHV0UG9zaXRpb24gLSBtT3V0Q3VyUG9zaXRpb24pOwotICAgIH0KLSAgICAvLyBlbHNlIGlmIHRoZSB0YXJnZXQgcG9zaXRpb24gKmlzKiBvdXIgY3VycmVudCBwb3NpdGlvbiwgZG8gbm90aGluZwotICAgIHJldHVybiBhYnNvbHV0ZUlucHV0UG9zaXRpb247Ci19CmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9aaXBGaWxlUk8uY3BwIGIvbGlicy9hbmRyb2lkZncvWmlwRmlsZVJPLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFiMThhZC4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy9aaXBGaWxlUk8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLwotLy8gUmVhZC1vbmx5IGFjY2VzcyB0byBaaXAgYXJjaGl2ZXMsIHdpdGggbWluaW1hbCBoZWFwIGFsbG9jYXRpb24uCi0vLwotI2RlZmluZSBMT0dfVEFHICJ6aXBybyIKLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLSNpbmNsdWRlIDxhbmRyb2lkZncvWmlwRmlsZVJPLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0jaW5jbHVkZSA8dXRpbHMvQ29tcGF0Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvbWlzYy5oPgotI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KLSNpbmNsdWRlIDx6aXBhcmNoaXZlL3ppcF9hcmNoaXZlLmg+Ci0KLSNpbmNsdWRlIDx6bGliLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLS8qCi0gKiBXZSBtdXN0IG9wZW4gYmluYXJ5IGZpbGVzIHVzaW5nIG9wZW4ocGF0aCwgLi4uIHwgT19CSU5BUlkpIHVuZGVyIFdpbmRvd3MuCi0gKiBPdGhlcndpc2Ugc3RyYW5nZSByZWFkIGVycm9ycyB3aWxsIGhhcHBlbi4KLSAqLwotI2lmbmRlZiBPX0JJTkFSWQotIyAgZGVmaW5lIE9fQklOQVJZICAwCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLWNsYXNzIF9aaXBFbnRyeVJPIHsKLXB1YmxpYzoKLSAgICBaaXBFbnRyeSBlbnRyeTsKLSAgICBaaXBFbnRyeU5hbWUgbmFtZTsKLSAgICB2b2lkICpjb29raWU7Ci0KLSAgICBfWmlwRW50cnlSTygpIDogY29va2llKE5VTEwpIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgX1ppcEVudHJ5Uk8oY29uc3QgX1ppcEVudHJ5Uk8mIG90aGVyKTsKLSAgICBfWmlwRW50cnlSTyYgb3BlcmF0b3I9KGNvbnN0IF9aaXBFbnRyeVJPJiBvdGhlcik7Ci19OwotCi1aaXBGaWxlUk86On5aaXBGaWxlUk8oKSB7Ci0gICAgQ2xvc2VBcmNoaXZlKG1IYW5kbGUpOwotICAgIGZyZWUobUZpbGVOYW1lKTsKLX0KLQotLyoKLSAqIE9wZW4gdGhlIHNwZWNpZmllZCBmaWxlIHJlYWQtb25seS4gIFdlIG1lbW9yeS1tYXAgdGhlIGVudGlyZSB0aGluZyBhbmQKLSAqIGNsb3NlIHRoZSBmaWxlIGJlZm9yZSByZXR1cm5pbmcuCi0gKi8KLS8qIHN0YXRpYyAqLyBaaXBGaWxlUk8qIFppcEZpbGVSTzo6b3Blbihjb25zdCBjaGFyKiB6aXBGaWxlTmFtZSkKLXsKLSAgICBaaXBBcmNoaXZlSGFuZGxlIGhhbmRsZTsKLSAgICBjb25zdCBpbnQzMl90IGVycm9yID0gT3BlbkFyY2hpdmUoemlwRmlsZU5hbWUsICZoYW5kbGUpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBBTE9HVygiRXJyb3Igb3BlbmluZyBhcmNoaXZlICVzOiAlcyIsIHppcEZpbGVOYW1lLCBFcnJvckNvZGVTdHJpbmcoZXJyb3IpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ldyBaaXBGaWxlUk8oaGFuZGxlLCBzdHJkdXAoemlwRmlsZU5hbWUpKTsKLX0KLQotCi1aaXBFbnRyeVJPIFppcEZpbGVSTzo6ZmluZEVudHJ5QnlOYW1lKGNvbnN0IGNoYXIqIGVudHJ5TmFtZSkgY29uc3QKLXsKLSAgICBfWmlwRW50cnlSTyogZGF0YSA9IG5ldyBfWmlwRW50cnlSTzsKLSAgICBjb25zdCBpbnQzMl90IGVycm9yID0gRmluZEVudHJ5KG1IYW5kbGUsIGVudHJ5TmFtZSwgJihkYXRhLT5lbnRyeSkpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBkZWxldGUgZGF0YTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgZGF0YS0+bmFtZS5uYW1lID0gZW50cnlOYW1lOwotICAgIGRhdGEtPm5hbWUubmFtZV9sZW5ndGggPSBzdHJsZW4oZW50cnlOYW1lKTsKLQotICAgIHJldHVybiAoWmlwRW50cnlSTykgZGF0YTsKLX0KLQotLyoKLSAqIEdldCB0aGUgdXNlZnVsIGZpZWxkcyBmcm9tIHRoZSB6aXAgZW50cnkuCi0gKgotICogUmV0dXJucyAiZmFsc2UiIGlmIHRoZSBvZmZzZXRzIHRvIHRoZSBmaWVsZHMgb3IgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWVsZHMKLSAqIGFwcGVhciB0byBiZSBib2d1cy4KLSAqLwotYm9vbCBaaXBGaWxlUk86OmdldEVudHJ5SW5mbyhaaXBFbnRyeVJPIGVudHJ5LCBpbnQqIHBNZXRob2QsIHNpemVfdCogcFVuY29tcExlbiwKLSAgICBzaXplX3QqIHBDb21wTGVuLCBvZmY2NF90KiBwT2Zmc2V0LCBsb25nKiBwTW9kV2hlbiwgbG9uZyogcENyYzMyKSBjb25zdAotewotICAgIGNvbnN0IF9aaXBFbnRyeVJPKiB6aXBFbnRyeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8X1ppcEVudHJ5Uk8qPihlbnRyeSk7Ci0gICAgY29uc3QgWmlwRW50cnkmIHplID0gemlwRW50cnktPmVudHJ5OwotCi0gICAgaWYgKHBNZXRob2QgIT0gTlVMTCkgewotICAgICAgICAqcE1ldGhvZCA9IHplLm1ldGhvZDsKLSAgICB9Ci0gICAgaWYgKHBVbmNvbXBMZW4gIT0gTlVMTCkgewotICAgICAgICAqcFVuY29tcExlbiA9IHplLnVuY29tcHJlc3NlZF9sZW5ndGg7Ci0gICAgfQotICAgIGlmIChwQ29tcExlbiAhPSBOVUxMKSB7Ci0gICAgICAgICpwQ29tcExlbiA9IHplLmNvbXByZXNzZWRfbGVuZ3RoOwotICAgIH0KLSAgICBpZiAocE9mZnNldCAhPSBOVUxMKSB7Ci0gICAgICAgICpwT2Zmc2V0ID0gemUub2Zmc2V0OwotICAgIH0KLSAgICBpZiAocE1vZFdoZW4gIT0gTlVMTCkgewotICAgICAgICAqcE1vZFdoZW4gPSB6ZS5tb2RfdGltZTsKLSAgICB9Ci0gICAgaWYgKHBDcmMzMiAhPSBOVUxMKSB7Ci0gICAgICAgICpwQ3JjMzIgPSB6ZS5jcmMzMjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBaaXBGaWxlUk86OnN0YXJ0SXRlcmF0aW9uKHZvaWQqKiBjb29raWUpCi17Ci0gICAgX1ppcEVudHJ5Uk8qIHplID0gbmV3IF9aaXBFbnRyeVJPOwotICAgIGludDMyX3QgZXJyb3IgPSBTdGFydEl0ZXJhdGlvbihtSGFuZGxlLCAmKHplLT5jb29raWUpLCBOVUxMIC8qIHByZWZpeCAqLyk7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIEFMT0dXKCJDb3VsZCBub3Qgc3RhcnQgaXRlcmF0aW9uIG92ZXIgJXM6ICVzIiwgbUZpbGVOYW1lLCBFcnJvckNvZGVTdHJpbmcoZXJyb3IpKTsKLSAgICAgICAgZGVsZXRlIHplOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgKmNvb2tpZSA9IHplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1aaXBFbnRyeVJPIFppcEZpbGVSTzo6bmV4dEVudHJ5KHZvaWQqIGNvb2tpZSkKLXsKLSAgICBfWmlwRW50cnlSTyogemUgPSByZWludGVycHJldF9jYXN0PF9aaXBFbnRyeVJPKj4oY29va2llKTsKLSAgICBpbnQzMl90IGVycm9yID0gTmV4dCh6ZS0+Y29va2llLCAmKHplLT5lbnRyeSksICYoemUtPm5hbWUpKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgaWYgKGVycm9yICE9IC0xKSB7Ci0gICAgICAgICAgICBBTE9HVygiRXJyb3IgaXRlcmF0aW9uIG92ZXIgJXM6ICVzIiwgbUZpbGVOYW1lLCBFcnJvckNvZGVTdHJpbmcoZXJyb3IpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gJih6ZS0+ZW50cnkpOwotfQotCi12b2lkIFppcEZpbGVSTzo6ZW5kSXRlcmF0aW9uKHZvaWQqIGNvb2tpZSkKLXsKLSAgICBkZWxldGUgcmVpbnRlcnByZXRfY2FzdDxfWmlwRW50cnlSTyo+KGNvb2tpZSk7Ci19Ci0KLXZvaWQgWmlwRmlsZVJPOjpyZWxlYXNlRW50cnkoWmlwRW50cnlSTyBlbnRyeSkgY29uc3QKLXsKLSAgICBkZWxldGUgcmVpbnRlcnByZXRfY2FzdDxfWmlwRW50cnlSTyo+KGVudHJ5KTsKLX0KLQotLyoKLSAqIENvcHkgdGhlIGVudHJ5J3MgZmlsZW5hbWUgdG8gdGhlIGJ1ZmZlci4KLSAqLwotaW50IFppcEZpbGVSTzo6Z2V0RW50cnlGaWxlTmFtZShaaXBFbnRyeVJPIGVudHJ5LCBjaGFyKiBidWZmZXIsIGludCBidWZMZW4pCi0gICAgY29uc3QKLXsKLSAgICBjb25zdCBfWmlwRW50cnlSTyogemlwRW50cnkgPSByZWludGVycHJldF9jYXN0PF9aaXBFbnRyeVJPKj4oZW50cnkpOwotICAgIGNvbnN0IHVpbnQxNl90IHJlcXVpcmVkU2l6ZSA9IHppcEVudHJ5LT5uYW1lLm5hbWVfbGVuZ3RoICsgMTsKLQotICAgIGlmIChidWZMZW4gPCByZXF1aXJlZFNpemUpIHsKLSAgICAgICAgQUxPR1coIkJ1ZmZlciB0b28gc2hvcnQsIHJlcXVpcmVzICVkIGJ5dGVzIGZvciBlbnRyeSBuYW1lIiwgcmVxdWlyZWRTaXplKTsKLSAgICAgICAgcmV0dXJuIHJlcXVpcmVkU2l6ZTsKLSAgICB9Ci0KLSAgICBtZW1jcHkoYnVmZmVyLCB6aXBFbnRyeS0+bmFtZS5uYW1lLCByZXF1aXJlZFNpemUgLSAxKTsKLSAgICBidWZmZXJbcmVxdWlyZWRTaXplIC0gMV0gPSAnXDAnOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYSBuZXcgRmlsZU1hcCBvYmplY3QgdGhhdCBzcGFucyB0aGUgZGF0YSBpbiAiZW50cnkiLgotICovCi1GaWxlTWFwKiBaaXBGaWxlUk86OmNyZWF0ZUVudHJ5RmlsZU1hcChaaXBFbnRyeVJPIGVudHJ5KSBjb25zdAotewotICAgIGNvbnN0IF9aaXBFbnRyeVJPICp6aXBFbnRyeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8X1ppcEVudHJ5Uk8qPihlbnRyeSk7Ci0gICAgY29uc3QgWmlwRW50cnkmIHplID0gemlwRW50cnktPmVudHJ5OwotICAgIGludCBmZCA9IEdldEZpbGVEZXNjcmlwdG9yKG1IYW5kbGUpOwotICAgIHNpemVfdCBhY3R1YWxMZW4gPSAwOwotCi0gICAgaWYgKHplLm1ldGhvZCA9PSBrQ29tcHJlc3NTdG9yZWQpIHsKLSAgICAgICAgYWN0dWFsTGVuID0gemUudW5jb21wcmVzc2VkX2xlbmd0aDsKLSAgICB9IGVsc2UgewotICAgICAgICBhY3R1YWxMZW4gPSB6ZS5jb21wcmVzc2VkX2xlbmd0aDsKLSAgICB9Ci0KLSAgICBGaWxlTWFwKiBuZXdNYXAgPSBuZXcgRmlsZU1hcCgpOwotICAgIGlmICghbmV3TWFwLT5jcmVhdGUobUZpbGVOYW1lLCBmZCwgemUub2Zmc2V0LCBhY3R1YWxMZW4sIHRydWUpKSB7Ci0gICAgICAgIG5ld01hcC0+cmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3TWFwOwotfQotCi0vKgotICogVW5jb21wcmVzcyBhbiBlbnRyeSwgaW4gaXRzIGVudGlyZXR5LCBpbnRvIHRoZSBwcm92aWRlZCBvdXRwdXQgYnVmZmVyLgotICoKLSAqIFRoaXMgZG9lc24ndCB2ZXJpZnkgdGhlIGRhdGEncyBDUkMsIHdoaWNoIG1pZ2h0IGJlIHVzZWZ1bCBmb3IKLSAqIHVuY29tcHJlc3NlZCBkYXRhLiAgVGhlIGNhbGxlciBzaG91bGQgYmUgYWJsZSB0byBtYW5hZ2UgaXQuCi0gKi8KLWJvb2wgWmlwRmlsZVJPOjp1bmNvbXByZXNzRW50cnkoWmlwRW50cnlSTyBlbnRyeSwgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkgY29uc3QKLXsKLSAgICBfWmlwRW50cnlSTyAqemlwRW50cnkgPSByZWludGVycHJldF9jYXN0PF9aaXBFbnRyeVJPKj4oZW50cnkpOwotICAgIGNvbnN0IGludDMyX3QgZXJyb3IgPSBFeHRyYWN0VG9NZW1vcnkobUhhbmRsZSwgJih6aXBFbnRyeS0+ZW50cnkpLAotICAgICAgICAodWludDhfdCopIGJ1ZmZlciwgc2l6ZSk7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIEFMT0dXKCJFeHRyYWN0VG9NZW1vcnkgZmFpbGVkIHdpdGggJXMiLCBFcnJvckNvZGVTdHJpbmcoZXJyb3IpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vKgotICogVW5jb21wcmVzcyBhbiBlbnRyeSwgaW4gaXRzIGVudGlyZXR5LCB0byBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4KLSAqCi0gKiBUaGlzIGRvZXNuJ3QgdmVyaWZ5IHRoZSBkYXRhJ3MgQ1JDLCBidXQgcHJvYmFibHkgc2hvdWxkLgotICovCi1ib29sIFppcEZpbGVSTzo6dW5jb21wcmVzc0VudHJ5KFppcEVudHJ5Uk8gZW50cnksIGludCBmZCkgY29uc3QKLXsKLSAgICBfWmlwRW50cnlSTyAqemlwRW50cnkgPSByZWludGVycHJldF9jYXN0PF9aaXBFbnRyeVJPKj4oZW50cnkpOwotICAgIGNvbnN0IGludDMyX3QgZXJyb3IgPSBFeHRyYWN0RW50cnlUb0ZpbGUobUhhbmRsZSwgJih6aXBFbnRyeS0+ZW50cnkpLCBmZCk7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIEFMT0dXKCJFeHRyYWN0VG9NZW1vcnkgZmFpbGVkIHdpdGggJXMiLCBFcnJvckNvZGVTdHJpbmcoZXJyb3IpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9hbmRyb2lkZncvWmlwVXRpbHMuY3BwIGIvbGlicy9hbmRyb2lkZncvWmlwVXRpbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWFjMmZlLi4wMDAwMDAwCi0tLSBhL2xpYnMvYW5kcm9pZGZ3L1ppcFV0aWxzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8KLS8vIE1pc2MgemlwL2d6aXAgdXRpbGl0eSBmdW5jdGlvbnMuCi0vLwotCi0jZGVmaW5lIExPR19UQUcgInppcHV0aWwiCi0KLSNpbmNsdWRlIDxhbmRyb2lkZncvWmlwVXRpbHMuaD4KLSNpbmNsdWRlIDxhbmRyb2lkZncvWmlwRmlsZVJPLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0jaW5jbHVkZSA8dXRpbHMvQ29tcGF0Lmg+Ci0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLQotI2luY2x1ZGUgPHpsaWIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXQ0TEUoY29uc3QgdW5zaWduZWQgY2hhciogYnVmKSB7Ci0gICAgcmV0dXJuIGJ1ZlswXSB8IChidWZbMV0gPDwgOCkgfCAoYnVmWzJdIDw8IDE2KSB8IChidWZbM10gPDwgMjQpOwotfQotCi0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGtSZWFkQnVmU2l6ZSA9IDMyNzY4OwotCi0vKgotICogVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGV4cGFuZHMgemlwL2d6aXAgImRlZmxhdGUiIGNvbXByZXNzZWQgZGF0YQotICogaW50byBhIGJ1ZmZlci4KLSAqCi0gKiAoVGhpcyBpcyBhIGNsb25lIG9mIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwgYnV0IGl0IHRha2VzIGEgRklMRSogaW5zdGVhZAotICogb2YgYW4gZmQuICBXZSBjb3VsZCBwYXNzIGZpbGVubyhmZCkgdG8gdGhlIGFib3ZlLCBidXQgd2UgY2FuIHJ1biBpbnRvCi0gKiB0cm91YmxlIHdoZW4gImZwIiBoYXMgYSBkaWZmZXJlbnQgbm90aW9uIG9mIHdoYXQgZmQncyBmaWxlIHBvc2l0aW9uIGlzLikKLSAqCi0gKiAiZnAiIGlzIGFuIG9wZW4gZmlsZSBwb3NpdGlvbmVkIGF0IHRoZSBzdGFydCBvZiB0aGUgImRlZmxhdGUiIGRhdGEKLSAqICJidWYiIG11c3QgaG9sZCBhdCBsZWFzdCAidW5jb21wcmVzc2VkTGVuIiBieXRlcy4KLSAqLwotLypzdGF0aWMqLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGluZmxhdGVUb0J1ZmZlcihUJiByZWFkZXIsIHZvaWQqIGJ1ZiwKLSAgICBsb25nIHVuY29tcHJlc3NlZExlbiwgbG9uZyBjb21wcmVzc2VkTGVuKQotewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0KLSAgICB6X3N0cmVhbSB6c3RyZWFtOwotICAgIGludCB6ZXJyOwotICAgIHVuc2lnbmVkIGxvbmcgY29tcFJlbWFpbmluZzsKLQotICAgIGFzc2VydCh1bmNvbXByZXNzZWRMZW4gPj0gMCk7Ci0gICAgYXNzZXJ0KGNvbXByZXNzZWRMZW4gPj0gMCk7Ci0KLSAgICBjb21wUmVtYWluaW5nID0gY29tcHJlc3NlZExlbjsKLQotICAgIC8qCi0gICAgICogSW5pdGlhbGl6ZSB0aGUgemxpYiBzdHJlYW0uCi0gICAgICovCi0gICAgbWVtc2V0KCZ6c3RyZWFtLCAwLCBzaXplb2YoenN0cmVhbSkpOwotICAgIHpzdHJlYW0uemFsbG9jID0gWl9OVUxMOwotICAgIHpzdHJlYW0uemZyZWUgPSBaX05VTEw7Ci0gICAgenN0cmVhbS5vcGFxdWUgPSBaX05VTEw7Ci0gICAgenN0cmVhbS5uZXh0X2luID0gTlVMTDsKLSAgICB6c3RyZWFtLmF2YWlsX2luID0gMDsKLSAgICB6c3RyZWFtLm5leHRfb3V0ID0gKEJ5dGVmKikgYnVmOwotICAgIHpzdHJlYW0uYXZhaWxfb3V0ID0gdW5jb21wcmVzc2VkTGVuOwotICAgIHpzdHJlYW0uZGF0YV90eXBlID0gWl9VTktOT1dOOwotCi0gICAgLyoKLSAgICAgKiBVc2UgdGhlIHVuZG9jdW1lbnRlZCAibmVnYXRpdmUgd2luZG93IGJpdHMiIGZlYXR1cmUgdG8gdGVsbCB6bGliCi0gICAgICogdGhhdCB0aGVyZSdzIG5vIHpsaWIgaGVhZGVyIHdhaXRpbmcgZm9yIGl0LgotICAgICAqLwotICAgIHplcnIgPSBpbmZsYXRlSW5pdDIoJnpzdHJlYW0sIC1NQVhfV0JJVFMpOwotICAgIGlmICh6ZXJyICE9IFpfT0spIHsKLSAgICAgICAgaWYgKHplcnIgPT0gWl9WRVJTSU9OX0VSUk9SKSB7Ci0gICAgICAgICAgICBBTE9HRSgiSW5zdGFsbGVkIHpsaWIgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBsaW5rZWQgdmVyc2lvbiAoJXMpXG4iLAotICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HRSgiQ2FsbCB0byBpbmZsYXRlSW5pdDIgZmFpbGVkICh6ZXJyPSVkKVxuIiwgemVycik7Ci0gICAgICAgIH0KLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8qCi0gICAgICogTG9vcCB3aGlsZSB3ZSBoYXZlIGRhdGEuCi0gICAgICovCi0gICAgZG8gewotICAgICAgICB1bnNpZ25lZCBsb25nIGdldFNpemU7Ci0KLSAgICAgICAgLyogcmVhZCBhcyBtdWNoIGFzIHdlIGNhbiAqLwotICAgICAgICBpZiAoenN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7Ci0gICAgICAgICAgICBnZXRTaXplID0gKGNvbXBSZW1haW5pbmcgPiBrUmVhZEJ1ZlNpemUpID8KLSAgICAgICAgICAgICAgICAgICAgICAgIGtSZWFkQnVmU2l6ZSA6IGNvbXBSZW1haW5pbmc7Ci0gICAgICAgICAgICBBTE9HVigiKysrIHJlYWRpbmcgJWxkIGJ5dGVzICglbGQgbGVmdClcbiIsCi0gICAgICAgICAgICAgICAgZ2V0U2l6ZSwgY29tcFJlbWFpbmluZyk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIG5leHRCdWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBuZXh0U2l6ZSA9IHJlYWRlci5yZWFkKCZuZXh0QnVmZmVyLCBnZXRTaXplKTsKLQotICAgICAgICAgICAgaWYgKG5leHRTaXplIDwgZ2V0U2l6ZSB8fCBuZXh0QnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBBTE9HRCgiaW5mbGF0ZSByZWFkIGZhaWxlZCAoJWxkIHZzICVsZClcbiIsIG5leHRTaXplLCBnZXRTaXplKTsKLSAgICAgICAgICAgICAgICBnb3RvIHpfYmFpbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29tcFJlbWFpbmluZyAtPSBuZXh0U2l6ZTsKLQotICAgICAgICAgICAgenN0cmVhbS5uZXh0X2luID0gbmV4dEJ1ZmZlcjsKLSAgICAgICAgICAgIHpzdHJlYW0uYXZhaWxfaW4gPSBuZXh0U2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHVuY29tcHJlc3MgdGhlIGRhdGEgKi8KLSAgICAgICAgemVyciA9IGluZmxhdGUoJnpzdHJlYW0sIFpfTk9fRkxVU0gpOwotICAgICAgICBpZiAoemVyciAhPSBaX09LICYmIHplcnIgIT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgICAgICAgICBBTE9HRCgiemxpYiBpbmZsYXRlIGNhbGwgZmFpbGVkICh6ZXJyPSVkKVxuIiwgemVycik7Ci0gICAgICAgICAgICBnb3RvIHpfYmFpbDsKLSAgICAgICAgfQotCi0JCS8qIG91dHB1dCBidWZmZXIgaG9sZHMgYWxsLCBzbyBubyBuZWVkIHRvIHdyaXRlIHRoZSBvdXRwdXQgKi8KLSAgICB9IHdoaWxlICh6ZXJyID09IFpfT0spOwotCi0gICAgYXNzZXJ0KHplcnIgPT0gWl9TVFJFQU1fRU5EKTsgICAgICAgLyogb3RoZXIgZXJyb3JzIHNob3VsZCd2ZSBiZWVuIGNhdWdodCAqLwotCi0gICAgaWYgKChsb25nKSB6c3RyZWFtLnRvdGFsX291dCAhPSB1bmNvbXByZXNzZWRMZW4pIHsKLSAgICAgICAgQUxPR1coIlNpemUgbWlzbWF0Y2ggb24gaW5mbGF0ZWQgZmlsZSAoJWxkIHZzICVsZClcbiIsCi0gICAgICAgICAgICB6c3RyZWFtLnRvdGFsX291dCwgdW5jb21wcmVzc2VkTGVuKTsKLSAgICAgICAgZ290byB6X2JhaWw7Ci0gICAgfQotCi0gICAgLy8gc3VjY2VzcyEKLSAgICByZXN1bHQgPSB0cnVlOwotCi16X2JhaWw6Ci0gICAgaW5mbGF0ZUVuZCgmenN0cmVhbSk7ICAgICAgICAvKiBmcmVlIHVwIGFueSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAqLwotCi1iYWlsOgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWNsYXNzIEZpbGVSZWFkZXIgewotcHVibGljOgotICAgRmlsZVJlYWRlcihGSUxFKiBmcCkgOgotICAgICAgIG1GcChmcCksIG1SZWFkQnVmKG5ldyB1bnNpZ25lZCBjaGFyW2tSZWFkQnVmU2l6ZV0pCi0gICB7Ci0gICB9Ci0KLSAgIH5GaWxlUmVhZGVyKCkgewotICAgICAgIGRlbGV0ZVtdIG1SZWFkQnVmOwotICAgfQotCi0gICBsb25nIHJlYWQodW5zaWduZWQgY2hhcioqIG5leHRCdWZmZXIsIGxvbmcgcmVhZFNpemUpIGNvbnN0IHsKLSAgICAgICAqbmV4dEJ1ZmZlciA9IG1SZWFkQnVmOwotICAgICAgIHJldHVybiBmcmVhZChtUmVhZEJ1ZiwgMSwgcmVhZFNpemUsIG1GcCk7Ci0gICB9Ci0KLSAgIEZJTEUqIG1GcDsKLSAgIHVuc2lnbmVkIGNoYXIqIG1SZWFkQnVmOwotfTsKLQotY2xhc3MgRmRSZWFkZXIgewotcHVibGljOgotICAgRmRSZWFkZXIoaW50IGZkKSA6Ci0gICAgICAgbUZkKGZkKSwgbVJlYWRCdWYobmV3IHVuc2lnbmVkIGNoYXJba1JlYWRCdWZTaXplXSkKLSAgIHsKLSAgIH0KLQotICAgfkZkUmVhZGVyKCkgewotICAgICAgIGRlbGV0ZVtdIG1SZWFkQnVmOwotICAgfQotCi0gICBsb25nIHJlYWQodW5zaWduZWQgY2hhcioqIG5leHRCdWZmZXIsIGxvbmcgcmVhZFNpemUpIGNvbnN0IHsKLSAgICAgICAqbmV4dEJ1ZmZlciA9IG1SZWFkQnVmOwotICAgICAgIHJldHVybiBURU1QX0ZBSUxVUkVfUkVUUlkoOjpyZWFkKG1GZCwgbVJlYWRCdWYsIHJlYWRTaXplKSk7Ci0gICB9Ci0KLSAgIGludCBtRmQ7Ci0gICB1bnNpZ25lZCBjaGFyKiBtUmVhZEJ1ZjsKLX07Ci0KLWNsYXNzIEJ1ZmZlclJlYWRlciB7Ci1wdWJsaWM6Ci0gICAgQnVmZmVyUmVhZGVyKHZvaWQqIGlucHV0LCBzaXplX3QgaW5wdXRTaXplKSA6Ci0gICAgICAgIG1JbnB1dChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihpbnB1dCkpLAotICAgICAgICBtSW5wdXRTaXplKGlucHV0U2l6ZSksCi0gICAgICAgIG1CdWZmZXJSZXR1cm5lZChmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgbG9uZyByZWFkKHVuc2lnbmVkIGNoYXIqKiBuZXh0QnVmZmVyLCBsb25nIHJlYWRTaXplKSB7Ci0gICAgICAgIGlmICghbUJ1ZmZlclJldHVybmVkKSB7Ci0gICAgICAgICAgICBtQnVmZmVyUmV0dXJuZWQgPSB0cnVlOwotICAgICAgICAgICAgKm5leHRCdWZmZXIgPSBtSW5wdXQ7Ci0gICAgICAgICAgICByZXR1cm4gbUlucHV0U2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgICpuZXh0QnVmZmVyID0gTlVMTDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciogbUlucHV0OwotICAgIGNvbnN0IHNpemVfdCBtSW5wdXRTaXplOwotICAgIGJvb2wgbUJ1ZmZlclJldHVybmVkOwotfTsKLQotLypzdGF0aWMqLyBib29sIFppcFV0aWxzOjppbmZsYXRlVG9CdWZmZXIoRklMRSogZnAsIHZvaWQqIGJ1ZiwKLSAgICBsb25nIHVuY29tcHJlc3NlZExlbiwgbG9uZyBjb21wcmVzc2VkTGVuKQotewotICAgIEZpbGVSZWFkZXIgcmVhZGVyKGZwKTsKLSAgICByZXR1cm4gOjppbmZsYXRlVG9CdWZmZXI8RmlsZVJlYWRlcj4ocmVhZGVyLCBidWYsCi0gICAgICAgIHVuY29tcHJlc3NlZExlbiwgY29tcHJlc3NlZExlbik7Ci19Ci0KLS8qc3RhdGljKi8gYm9vbCBaaXBVdGlsczo6aW5mbGF0ZVRvQnVmZmVyKGludCBmZCwgdm9pZCogYnVmLAotICAgIGxvbmcgdW5jb21wcmVzc2VkTGVuLCBsb25nIGNvbXByZXNzZWRMZW4pCi17Ci0gICAgRmRSZWFkZXIgcmVhZGVyKGZkKTsKLSAgICByZXR1cm4gOjppbmZsYXRlVG9CdWZmZXI8RmRSZWFkZXI+KHJlYWRlciwgYnVmLAotICAgICAgICB1bmNvbXByZXNzZWRMZW4sIGNvbXByZXNzZWRMZW4pOwotfQotCi0vKnN0YXRpYyovIGJvb2wgWmlwVXRpbHM6OmluZmxhdGVUb0J1ZmZlcih2b2lkKiBpbiwgdm9pZCogYnVmLAotICAgIGxvbmcgdW5jb21wcmVzc2VkTGVuLCBsb25nIGNvbXByZXNzZWRMZW4pCi17Ci0gICAgQnVmZmVyUmVhZGVyIHJlYWRlcihpbiwgY29tcHJlc3NlZExlbik7Ci0gICAgcmV0dXJuIDo6aW5mbGF0ZVRvQnVmZmVyPEJ1ZmZlclJlYWRlcj4ocmVhZGVyLCBidWYsCi0gICAgICAgIHVuY29tcHJlc3NlZExlbiwgY29tcHJlc3NlZExlbik7Ci19Ci0KLQotCi0vKgotICogTG9vayBhdCB0aGUgY29udGVudHMgb2YgYSBnemlwIGFyY2hpdmUuICBXZSB3YW50IHRvIGtub3cgd2hlcmUgdGhlCi0gKiBkYXRhIHN0YXJ0cywgYW5kIGhvdyBsb25nIGl0IHdpbGwgYmUgYWZ0ZXIgaXQgaXMgdW5jb21wcmVzc2VkLgotICoKLSAqIFdlIGV4cGVjdCB0byBmaW5kIHRoZSBDUkMgYW5kIGxlbmd0aCBhcyB0aGUgbGFzdCA4IGJ5dGVzIG9uIHRoZSBmaWxlLgotICogVGhpcyBpcyBhIHByZXR0eSByZWFzb25hYmxlIHRoaW5nIHRvIGV4cGVjdCBmb3IgbG9jYWxseS1jb21wcmVzc2VkCi0gKiBmaWxlcywgYnV0IHRoZXJlJ3MgYSBzbWFsbCBjaGFuY2UgdGhhdCBzb21lIGV4dHJhIHBhZGRpbmcgZ290IHRocm93bgotICogb24gKHRoZSBtYW4gcGFnZSB0YWxrcyBhYm91dCBjb21wcmVzc2VkIGRhdGEgd3JpdHRlbiB0byB0YXBlKS4gIFdlCi0gKiBkb24ndCBjdXJyZW50bHkgZGVhbCB3aXRoIHRoYXQgaGVyZS4gIElmICJnemlwIC1sIiB3aGluZXMsIHdlJ3JlIGdvaW5nCi0gKiB0byBmYWlsIHRvby4KLSAqCi0gKiBPbiBleGl0LCAiZnAiIGlzIHBvaW50aW5nIGF0IHRoZSBzdGFydCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLgotICovCi0vKnN0YXRpYyovIGJvb2wgWmlwVXRpbHM6OmV4YW1pbmVHemlwKEZJTEUqIGZwLCBpbnQqIHBDb21wcmVzc2lvbk1ldGhvZCwKLSAgICBsb25nKiBwVW5jb21wcmVzc2VkTGVuLCBsb25nKiBwQ29tcHJlc3NlZExlbiwgdW5zaWduZWQgbG9uZyogcENSQzMyKQotewotICAgIGVudW0geyAgLy8gZmxhZ3MKLSAgICAgICAgRlRFWFQgICAgICAgPSAweDAxLAotICAgICAgICBGSENSQyAgICAgICA9IDB4MDIsCi0gICAgICAgIEZFWFRSQSAgICAgID0gMHgwNCwKLSAgICAgICAgRk5BTUUgICAgICAgPSAweDA4LAotICAgICAgICBGQ09NTUVOVCAgICA9IDB4MTAsCi0gICAgfTsKLSAgICBpbnQgaWM7Ci0gICAgaW50IG1ldGhvZCwgZmxhZ3M7Ci0gICAgaW50IGk7Ci0KLSAgICBpYyA9IGdldGMoZnApOwotICAgIGlmIChpYyAhPSAweDFmIHx8IGdldGMoZnApICE9IDB4OGIpCi0gICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgLy8gbm90IGd6aXAKLSAgICBtZXRob2QgPSBnZXRjKGZwKTsKLSAgICBmbGFncyA9IGdldGMoZnApOwotCi0gICAgLyogcXVpY2sgc2FuaXR5IGNoZWNrcyAqLwotICAgIGlmIChtZXRob2QgPT0gRU9GIHx8IGZsYWdzID09IEVPRikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtZXRob2QgIT0gWmlwRmlsZVJPOjprQ29tcHJlc3NEZWZsYXRlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLyogc2tpcCBvdmVyIDQgYnl0ZXMgb2YgbW9kIHRpbWUsIDEgYnl0ZSBYRkwsIDEgYnl0ZSBPUyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgICAgICh2b2lkKSBnZXRjKGZwKTsKLSAgICAvKiBjb25zdW1lICJleHRyYSIgZmllbGQsIGlmIHByZXNlbnQgKi8KLSAgICBpZiAoKGZsYWdzICYgRkVYVFJBKSAhPSAwKSB7Ci0gICAgICAgIGludCBsZW47Ci0KLSAgICAgICAgbGVuID0gZ2V0YyhmcCk7Ci0gICAgICAgIGxlbiB8PSBnZXRjKGZwKSA8PCA4OwotICAgICAgICB3aGlsZSAobGVuLS0gJiYgZ2V0YyhmcCkgIT0gRU9GKQotICAgICAgICAgICAgOwotICAgIH0KLSAgICAvKiBjb25zdW1lIGZpbGVuYW1lLCBpZiBwcmVzZW50ICovCi0gICAgaWYgKChmbGFncyAmIEZOQU1FKSAhPSAwKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGljID0gZ2V0YyhmcCk7Ci0gICAgICAgIH0gd2hpbGUgKGljICE9IDAgJiYgaWMgIT0gRU9GKTsKLSAgICB9Ci0gICAgLyogY29uc3VtZSBjb21tZW50LCBpZiBwcmVzZW50ICovCi0gICAgaWYgKChmbGFncyAmIEZDT01NRU5UKSAhPSAwKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGljID0gZ2V0YyhmcCk7Ci0gICAgICAgIH0gd2hpbGUgKGljICE9IDAgJiYgaWMgIT0gRU9GKTsKLSAgICB9Ci0gICAgLyogY29uc3VtZSAxNi1iaXQgaGVhZGVyIENSQywgaWYgcHJlc2VudCAqLwotICAgIGlmICgoZmxhZ3MgJiBGSENSQykgIT0gMCkgewotICAgICAgICAodm9pZCkgZ2V0YyhmcCk7Ci0gICAgICAgICh2b2lkKSBnZXRjKGZwKTsKLSAgICB9Ci0KLSAgICBpZiAoZmVvZihmcCkgfHwgZmVycm9yKGZwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLyogc2VlayB0byB0aGUgZW5kOyBDUkMgYW5kIGxlbmd0aCBhcmUgaW4gdGhlIGxhc3QgOCBieXRlcyAqLwotICAgIGxvbmcgY3VyUG9zbiA9IGZ0ZWxsKGZwKTsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKLSAgICBmc2VlayhmcCwgLTgsIFNFRUtfRU5EKTsKLSAgICAqcENvbXByZXNzZWRMZW4gPSBmdGVsbChmcCkgLSBjdXJQb3NuOwotCi0gICAgaWYgKGZyZWFkKGJ1ZiwgMSwgOCwgZnApICE9IDgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvKiBzZWVrIGJhY2sgdG8gc3RhcnQgb2YgY29tcHJlc3NlZCBkYXRhICovCi0gICAgZnNlZWsoZnAsIGN1clBvc24sIFNFRUtfU0VUKTsKLQotICAgICpwQ29tcHJlc3Npb25NZXRob2QgPSBtZXRob2Q7Ci0gICAgKnBDUkMzMiA9IGdldDRMRSgmYnVmWzBdKTsKLSAgICAqcFVuY29tcHJlc3NlZExlbiA9IGdldDRMRSgmYnVmWzRdKTsKLQotICAgIHJldHVybiB0cnVlOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9hbmRyb2lkZncvbWlzYy5jcHAgYi9saWJzL2FuZHJvaWRmdy9taXNjLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk2ODZlZi4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy9taXNjLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgIm1pc2MiCi0KLS8vCi0vLyBNaXNjZWxsYW5lb3VzIHV0aWxpdHkgZnVuY3Rpb25zLgotLy8KLSNpbmNsdWRlIDxhbmRyb2lkZncvbWlzYy5oPgotCi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLS8qCi0gKiBHZXQgYSBmaWxlJ3MgdHlwZS4KLSAqLwotRmlsZVR5cGUgZ2V0RmlsZVR5cGUoY29uc3QgY2hhciogZmlsZU5hbWUpCi17Ci0gICAgc3RydWN0IHN0YXQgc2I7Ci0KLSAgICBpZiAoc3RhdChmaWxlTmFtZSwgJnNiKSA8IDApIHsKLSAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFTk9URElSKQotICAgICAgICAgICAgcmV0dXJuIGtGaWxlVHlwZU5vbmV4aXN0ZW50OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2V0RmlsZVR5cGUgZ290IGVycm5vPSVkIG9uICclcydcbiIsCi0gICAgICAgICAgICAgICAgZXJybm8sIGZpbGVOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBrRmlsZVR5cGVVbmtub3duOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFNfSVNSRUcoc2Iuc3RfbW9kZSkpCi0gICAgICAgICAgICByZXR1cm4ga0ZpbGVUeXBlUmVndWxhcjsKLSAgICAgICAgZWxzZSBpZiAoU19JU0RJUihzYi5zdF9tb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBrRmlsZVR5cGVEaXJlY3Rvcnk7Ci0gICAgICAgIGVsc2UgaWYgKFNfSVNDSFIoc2Iuc3RfbW9kZSkpCi0gICAgICAgICAgICByZXR1cm4ga0ZpbGVUeXBlQ2hhckRldjsKLSAgICAgICAgZWxzZSBpZiAoU19JU0JMSyhzYi5zdF9tb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBrRmlsZVR5cGVCbG9ja0RldjsKLSAgICAgICAgZWxzZSBpZiAoU19JU0ZJRk8oc2Iuc3RfbW9kZSkpCi0gICAgICAgICAgICByZXR1cm4ga0ZpbGVUeXBlRmlmbzsKLSNpZmRlZiBIQVZFX1NZTUxJTktTCi0gICAgICAgIGVsc2UgaWYgKFNfSVNMTksoc2Iuc3RfbW9kZSkpCi0gICAgICAgICAgICByZXR1cm4ga0ZpbGVUeXBlU3ltbGluazsKLSAgICAgICAgZWxzZSBpZiAoU19JU1NPQ0soc2Iuc3RfbW9kZSkpCi0gICAgICAgICAgICByZXR1cm4ga0ZpbGVUeXBlU29ja2V0OwotI2VuZGlmCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBrRmlsZVR5cGVVbmtub3duOwotICAgIH0KLX0KLQotLyoKLSAqIEdldCBhIGZpbGUncyBtb2RpZmljYXRpb24gZGF0ZS4KLSAqLwotdGltZV90IGdldEZpbGVNb2REYXRlKGNvbnN0IGNoYXIqIGZpbGVOYW1lKQotewotICAgIHN0cnVjdCBzdGF0IHNiOwotCi0gICAgaWYgKHN0YXQoZmlsZU5hbWUsICZzYikgPCAwKQotICAgICAgICByZXR1cm4gKHRpbWVfdCkgLTE7Ci0KLSAgICByZXR1cm4gc2Iuc3RfbXRpbWU7Ci19Ci0KLX07IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy90ZXN0cy9BbmRyb2lkLm1rIGIvbGlicy9hbmRyb2lkZncvdGVzdHMvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M1NTM3NS4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy90ZXN0cy9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBCdWlsZCB0aGUgdW5pdCB0ZXN0cy4KLUxPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLSMgQnVpbGQgdGhlIHVuaXQgdGVzdHMuCi10ZXN0X3NyY19maWxlcyA6PSBcCi0gICAgT2JiRmlsZV90ZXN0LmNwcCBcCi0gICAgWmlwVXRpbHNfdGVzdC5jcHAKLQotc2hhcmVkX2xpYnJhcmllcyA6PSBcCi0gICAgbGliYW5kcm9pZGZ3IFwKLSAgICBsaWJjdXRpbHMgXAotICAgIGxpYnV0aWxzIFwKLSAgICBsaWJ1aSBcCi0gICAgbGlic3RscG9ydAotCi1zdGF0aWNfbGlicmFyaWVzIDo9IFwKLSAgICBsaWJndGVzdCBcCi0gICAgbGliZ3Rlc3RfbWFpbgotCi0kKGZvcmVhY2ggZmlsZSwkKHRlc3Rfc3JjX2ZpbGVzKSwgXAotICAgICQoZXZhbCBpbmNsdWRlICQoQ0xFQVJfVkFSUykpIFwKLSAgICAkKGV2YWwgTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSAkKHNoYXJlZF9saWJyYXJpZXMpKSBcCi0gICAgJChldmFsIExPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gJChzdGF0aWNfbGlicmFyaWVzKSkgXAotICAgICQoZXZhbCBMT0NBTF9TUkNfRklMRVMgOj0gJChmaWxlKSkgXAotICAgICQoZXZhbCBMT0NBTF9NT0RVTEUgOj0gJChub3RkaXIgJChmaWxlOiUuY3BwPSUpKSkgXAotICAgICQoZXZhbCBpbmNsdWRlICQoQlVJTERfTkFUSVZFX1RFU1QpKSBcCi0pCi0KLSMgQnVpbGQgdGhlIG1hbnVhbCB0ZXN0IHByb2dyYW1zLgotaW5jbHVkZSAkKGNhbGwgYWxsLW1ha2VmaWxlcy11bmRlciwgJChMT0NBTF9QQVRIKSkKZGlmZiAtLWdpdCBhL2xpYnMvYW5kcm9pZGZ3L3Rlc3RzL09iYkZpbGVfdGVzdC5jcHAgYi9saWJzL2FuZHJvaWRmdy90ZXN0cy9PYmJGaWxlX3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzlmNjUwLi4wMDAwMDAwCi0tLSBhL2xpYnMvYW5kcm9pZGZ3L3Rlc3RzL09iYkZpbGVfdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNkZWZpbmUgTE9HX1RBRyAiT2JiRmlsZV90ZXN0IgotI2luY2x1ZGUgPGFuZHJvaWRmdy9PYmJGaWxlLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0jaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLQotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotI2RlZmluZSBURVNUX0ZJTEVOQU1FICIvdGVzdC5vYmIiCi0KLWNsYXNzIE9iYkZpbGVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotcHJvdGVjdGVkOgotICAgIHNwPE9iYkZpbGU+IG1PYmJGaWxlOwotICAgIGNoYXIqIG1FeHRlcm5hbFN0b3JhZ2U7Ci0gICAgY2hhciogbUZpbGVOYW1lOwotCi0gICAgdmlydHVhbCB2b2lkIFNldFVwKCkgewotICAgICAgICBtT2JiRmlsZSA9IG5ldyBPYmJGaWxlKCk7Ci0gICAgICAgIG1FeHRlcm5hbFN0b3JhZ2UgPSBnZXRlbnYoIkVYVEVSTkFMX1NUT1JBR0UiKTsKLQotICAgICAgICBjb25zdCBpbnQgdG90YWxMZW4gPSBzdHJsZW4obUV4dGVybmFsU3RvcmFnZSkgKyBzdHJsZW4oVEVTVF9GSUxFTkFNRSkgKyAxOwotICAgICAgICBtRmlsZU5hbWUgPSBuZXcgY2hhclt0b3RhbExlbl07Ci0gICAgICAgIHNucHJpbnRmKG1GaWxlTmFtZSwgdG90YWxMZW4sICIlcyVzIiwgbUV4dGVybmFsU3RvcmFnZSwgVEVTVF9GSUxFTkFNRSk7Ci0KLSAgICAgICAgaW50IGZkID0gOjpvcGVuKG1GaWxlTmFtZSwgT19DUkVBVCB8IE9fVFJVTkMsIFNfSVJVU1IgfCBTX0lXVVNSKTsKLSAgICAgICAgaWYgKGZkIDwgMCkgewotICAgICAgICAgICAgRkFJTCgpIDw8ICJDb3VsZG4ndCBjcmVhdGUgIiA8PCBtRmlsZU5hbWUgPDwgIiBmb3IgdGVzdHMiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkgewotICAgIH0KLX07Ci0KLVRFU1RfRihPYmJGaWxlVGVzdCwgUmVhZEZhaWx1cmUpIHsKLSAgICBFWFBFQ1RfRkFMU0UobU9iYkZpbGUtPnJlYWRGcm9tKC0xKSkKLSAgICAgICAgICAgIDw8ICJObyBmYWlsdXJlIG9uIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yIjsKLX0KLQotVEVTVF9GKE9iYkZpbGVUZXN0LCBXcml0ZVRoZW5SZWFkKSB7Ci0gICAgY29uc3QgY2hhciogcGFja2FnZU5hbWUgPSAiY29tLmV4YW1wbGUub2JiZmlsZSI7Ci0gICAgY29uc3QgaW50MzJfdCB2ZXJzaW9uTnVtID0gMTsKLQotICAgIG1PYmJGaWxlLT5zZXRQYWNrYWdlTmFtZShTdHJpbmc4KHBhY2thZ2VOYW1lKSk7Ci0gICAgbU9iYkZpbGUtPnNldFZlcnNpb24odmVyc2lvbk51bSk7Ci0jZGVmaW5lIFNBTFRfU0laRSA4Ci0gICAgdW5zaWduZWQgY2hhciBzYWx0W1NBTFRfU0laRV0gPSB7MHgwMSwgMHgxMCwgMHg1NSwgMHhBQSwgMHhGRiwgMHgwMCwgMHg1QSwgMHhBNX07Ci0gICAgRVhQRUNUX1RSVUUobU9iYkZpbGUtPnNldFNhbHQoc2FsdCwgU0FMVF9TSVpFKSkKLSAgICAgICAgICAgIDw8ICJTYWx0IHNob3VsZCBiZSBzdWNjZXNzZnVsbHkgc2V0IjsKLQotICAgIEVYUEVDVF9UUlVFKG1PYmJGaWxlLT53cml0ZVRvKG1GaWxlTmFtZSkpCi0gICAgICAgICAgICA8PCAiY291bGRuJ3Qgd3JpdGUgdG8gZmFrZSAub2JiIGZpbGUiOwotCi0gICAgbU9iYkZpbGUgPSBuZXcgT2JiRmlsZSgpOwotCi0gICAgRVhQRUNUX1RSVUUobU9iYkZpbGUtPnJlYWRGcm9tKG1GaWxlTmFtZSkpCi0gICAgICAgICAgICA8PCAiY291bGRuJ3QgcmVhZCBmcm9tIGZha2UgLm9iYiBmaWxlIjsKLQotICAgIEVYUEVDVF9FUSh2ZXJzaW9uTnVtLCBtT2JiRmlsZS0+Z2V0VmVyc2lvbigpKQotICAgICAgICAgICAgPDwgInZlcnNpb24gZGlkbid0IGNvbWUgb3V0IHRoZSBzYW1lIGFzIGl0IHdlbnQgaW4iOwotICAgIGNvbnN0IGNoYXIqIGN1cnJlbnRQYWNrYWdlTmFtZSA9IG1PYmJGaWxlLT5nZXRQYWNrYWdlTmFtZSgpLnN0cmluZygpOwotICAgIEVYUEVDVF9TVFJFUShwYWNrYWdlTmFtZSwgY3VycmVudFBhY2thZ2VOYW1lKQotICAgICAgICAgICAgPDwgInBhY2thZ2UgbmFtZSBkaWRuJ3QgY29tZSBvdXQgdGhlIHNhbWUgYXMgaXQgd2VudCBpbiI7Ci0KLSAgICBzaXplX3Qgc2FsdExlbjsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBuZXdTYWx0ID0gbU9iYkZpbGUtPmdldFNhbHQoJnNhbHRMZW4pOwotCi0gICAgRVhQRUNUX0VRKHNpemVvZihzYWx0KSwgc2FsdExlbikKLSAgICAgICAgICAgIDw8ICJzYWx0IHNpemVzIHdlcmUgbm90IHRoZSBzYW1lIjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKHNhbHQpOyBpKyspIHsKLSAgICAgICAgRVhQRUNUX0VRKHNhbHRbaV0sIG5ld1NhbHRbaV0pCi0gICAgICAgICAgICAgICAgPDwgInNhbHQgY2hhcmFjdGVyICIgPDwgaSA8PCAiIHNob3VsZCBiZSBlcXVhbCI7Ci0gICAgfQotICAgIEVYUEVDVF9UUlVFKG1lbWNtcChuZXdTYWx0LCBzYWx0LCBzaXplb2Yoc2FsdCkpID09IDApCi0gICAgICAgICAgICA8PCAic2FsdHMgc2hvdWxkIGJlIHRoZSBzYW1lIjsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvbGlicy9hbmRyb2lkZncvdGVzdHMvWmlwVXRpbHNfdGVzdC5jcHAgYi9saWJzL2FuZHJvaWRmdy90ZXN0cy9aaXBVdGlsc190ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYwMzhiNS4uMDAwMDAwMAotLS0gYS9saWJzL2FuZHJvaWRmdy90ZXN0cy9aaXBVdGlsc190ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgIlppcFV0aWxzX3Rlc3QiCi0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZGZ3L1ppcFV0aWxzLmg+Ci0KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1jbGFzcyBaaXBVdGlsc1Rlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIFNldFVwKCkgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpIHsKLSAgICB9Ci19OwotCi1URVNUX0YoWmlwVXRpbHNUZXN0LCBaaXBUaW1lQ29udmVydFN1Y2Nlc3MpIHsKLSAgICBzdHJ1Y3QgdG0gdDsKLQotICAgIC8vIDIwMTEtMDYtMjkgMTQ6NDA6NDAKLSAgICBsb25nIHdoZW4gPSAweDNFREQ3NTE0OwotCi0gICAgWmlwVXRpbHM6OnppcFRpbWVUb1RpbWVzcGVjKHdoZW4sICZ0KTsKLQotICAgIEVYUEVDVF9FUSgyMDExLCB0LnRtX3llYXIgKyAxOTAwKQotICAgICAgICAgICAgPDwgIlllYXIgd2FzIGltcHJvcGVybHkgY29udmVydGVkLiI7Ci0KLSAgICBFWFBFQ1RfRVEoNiwgdC50bV9tb24pCi0gICAgICAgICAgICA8PCAiTW9udGggd2FzIGltcHJvcGVybHkgY29udmVydGVkLiI7Ci0KLSAgICBFWFBFQ1RfRVEoMjksIHQudG1fbWRheSkKLSAgICAgICAgICAgIDw8ICJEYXkgd2FzIGltcHJvcGVybHkgY29udmVydGVkLiI7Ci0KLSAgICBFWFBFQ1RfRVEoMTQsIHQudG1faG91cikKLSAgICAgICAgICAgIDw8ICJIb3VyIHdhcyBpbXByb3Blcmx5IGNvbnZlcnRlZC4iOwotCi0gICAgRVhQRUNUX0VRKDQwLCB0LnRtX21pbikKLSAgICAgICAgICAgIDw8ICJNaW51dGUgd2FzIGltcHJvcGVybHkgY29udmVydGVkLiI7Ci0KLSAgICBFWFBFQ1RfRVEoNDAsIHQudG1fc2VjKQotICAgICAgICAgICAgPDwgIlNlY29uZCB3YXMgaW1wcm9wZXJseSBjb252ZXJ0ZWQuIjsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0FuZHJvaWQubWsgYi9saWJzL2h3dWkvQW5kcm9pZC5tawppbmRleCA0MTFjMTMzLi4xZjM3OTI1IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvQW5kcm9pZC5taworKysgYi9saWJzL2h3dWkvQW5kcm9pZC5tawpAQCAtNDUsNiArNDUsMTEgQEAKIAkJVGV4dHVyZUNhY2hlLmNwcCBcCiAJCVRleHREcm9wU2hhZG93Q2FjaGUuY3BwCiAKKwkjIFJlbmRlclRocmVhZCBzdHVmZgorCUxPQ0FMX1NSQ19GSUxFUyArPSBcCisJCXJlbmRlcnRocmVhZC9SZW5kZXJUYXNrLmNwcCBcCisJCXJlbmRlcnRocmVhZC9SZW5kZXJUaHJlYWQuY3BwCisKIAlpbnRlcm1lZGlhdGVzIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsU1RBVElDX0xJQlJBUklFUyxsaWJSUyxUQVJHRVQsKQogCiAJTE9DQUxfQ19JTkNMVURFUyArPSBcCkBAIC01OCw2ICs2Myw3IEBACiAJCWV4dGVybmFsL3NraWEvaW5jbHVkZS91dGlscwogCiAJTE9DQUxfQ0ZMQUdTICs9IC1EVVNFX09QRU5HTF9SRU5ERVJFUiAtREVHTF9FR0xFWFRfUFJPVE9UWVBFUyAtREdMX0dMRVhUX1BST1RPVFlQRVMKKwlMT0NBTF9DRkxBR1MgKz0gLVduby11bnVzZWQtcGFyYW1ldGVyCiAJTE9DQUxfTU9EVUxFX0NMQVNTIDo9IFNIQVJFRF9MSUJSQVJJRVMKIAlMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmxvZyBsaWJjdXRpbHMgbGlidXRpbHMgbGliRUdMIGxpYkdMRVN2MiBsaWJza2lhIGxpYnVpCiAJTE9DQUxfTU9EVUxFIDo9IGxpYmh3dWkKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9DYWNoZXMuaCBiL2xpYnMvaHd1aS9DYWNoZXMuaAppbmRleCAyODJhZWU5Li5mOGYyMjg0IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvQ2FjaGVzLmgKKysrIGIvbGlicy9od3VpL0NhY2hlcy5oCkBAIC02Miw3ICs2Miw3IEBACiBzdGF0aWMgY29uc3QgdWludDMyX3QgZ01heE51bWJlck9mUXVhZHMgPSAyMDQ4OwogCiAvLyBHZW5lcmF0ZXMgc2ltcGxlIGFuZCB0ZXh0dXJlZCB2ZXJ0aWNlcwotI2RlZmluZSBGVih4LCB5LCB1LCB2KSB7IHsgeCwgeSB9LCB7IHUsIHYgfSB9CisjZGVmaW5lIEZWKHgsIHksIHUsIHYpIHsgeCwgeSwgdSwgdiB9CiAKIC8vIFRoaXMgYXJyYXkgaXMgbmV2ZXIgdXNlZCBkaXJlY3RseSBidXQgdXNlZCBhcyBhIG1lbWNweSBzb3VyY2UgaW4gdGhlCiAvLyBPcGVuR0xSZW5kZXJlciBjb25zdHJ1Y3RvcgpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0Rpc3BsYXlMaXN0LmNwcCBiL2xpYnMvaHd1aS9EaXNwbGF5TGlzdC5jcHAKaW5kZXggYmI2NTI2ZS4uYTNlNGJiNCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0Rpc3BsYXlMaXN0LmNwcAorKysgYi9saWJzL2h3dWkvRGlzcGxheUxpc3QuY3BwCkBAIC01MjYsNyArNTI2LDcgQEAKIAogICAgIHNldFZpZXdQcm9wZXJ0aWVzPFQ+KHJlbmRlcmVyLCBoYW5kbGVyLCBsZXZlbCArIDEpOwogCi0gICAgaWYgKG1DbGlwVG9Cb3VuZHMgJiYgcmVuZGVyZXIucXVpY2tSZWplY3ROb1NjaXNzb3IoMCwgMCwgbVdpZHRoLCBtSGVpZ2h0KSkgeworICAgIGlmIChtQ2xpcFRvQm91bmRzICYmIHJlbmRlcmVyLnF1aWNrUmVqZWN0Q29uc2VydmF0aXZlKDAsIDAsIG1XaWR0aCwgbUhlaWdodCkpIHsKICAgICAgICAgRElTUExBWV9MSVNUX0xPR0QoIiUqc1Jlc3RvcmVUb0NvdW50ICVkIiwgKGxldmVsICsgMSkgKiAyLCAiIiwgcmVzdG9yZVRvKTsKICAgICAgICAgaGFuZGxlcihtUmVzdG9yZVRvQ291bnRPcC0+cmVpbml0KHJlc3RvcmVUbyksIFBST1BFUlRZX1NBVkVDT1VOVCwgbUNsaXBUb0JvdW5kcyk7CiAgICAgICAgIHJlbmRlcmVyLnJlc3RvcmVUb0NvdW50KHJlc3RvcmVUbyk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvRGlzcGxheUxpc3QuaCBiL2xpYnMvaHd1aS9EaXNwbGF5TGlzdC5oCmluZGV4IDFjZDVmMWMuLmY1MjE4MWEgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9EaXNwbGF5TGlzdC5oCisrKyBiL2xpYnMvaHd1aS9EaXNwbGF5TGlzdC5oCkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICB2b2lkIGRlZmVyKERlZmVyU3RhdGVTdHJ1Y3QmIGRlZmVyU3RydWN0LCBjb25zdCBpbnQgbGV2ZWwpOwogICAgIHZvaWQgcmVwbGF5KFJlcGxheVN0YXRlU3RydWN0JiByZXBsYXlTdHJ1Y3QsIGNvbnN0IGludCBsZXZlbCk7CiAKLSAgICB2b2lkIG91dHB1dCh1aW50MzJfdCBsZXZlbCA9IDApOworICAgIEFORFJPSURfQVBJIHZvaWQgb3V0cHV0KHVpbnQzMl90IGxldmVsID0gMSk7CiAKICAgICBBTkRST0lEX0FQSSB2b2lkIHJlc2V0KCk7CiAKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9EaXNwbGF5TGlzdE9wLmggYi9saWJzL2h3dWkvRGlzcGxheUxpc3RPcC5oCmluZGV4IDMyNjgwNWEuLjg4MDc3ZDQgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9EaXNwbGF5TGlzdE9wLmgKKysrIGIvbGlicy9od3VpL0Rpc3BsYXlMaXN0T3AuaApAQCAtMTgyLDkgKzE4MiwxMiBAQAogICAgIH0KIAogICAgIGlubGluZSBmbG9hdCBzdHJva2VXaWR0aE91dHNldCgpIHsKLSAgICAgICAgZmxvYXQgd2lkdGggPSBtUGFpbnQtPmdldFN0cm9rZVdpZHRoKCk7Ci0gICAgICAgIGlmICh3aWR0aCA9PSAwKSByZXR1cm4gMC41ZjsgLy8gYWNjb3VudCBmb3IgaGFpcmxpbmUKLSAgICAgICAgcmV0dXJuIHdpZHRoICogMC41ZjsKKyAgICAgICAgLy8gc2luY2UgYW55dGhpbmcgQUEgc3Ryb2tlIHdpdGggbGVzcyB0aGFuIDEuMCBwaXhlbCB3aWR0aCBpcyBkcmF3biB3aXRoIGFuIGFscGhhLXJlZHVjZWQKKyAgICAgICAgLy8gMS4wIHN0cm9rZSwgdHJlYXQgMS4wIGFzIG1pbmltdW0uCisKKyAgICAgICAgLy8gVE9ETzogaXQgd291bGQgYmUgbmljZSBpZiB0aGlzIGNvdWxkIHRha2Ugc2NhbGUgaW50byBhY2NvdW50LCBidXQgc2NhbGUgaXNuJ3Qgc3RhYmxlCisgICAgICAgIC8vIHNpbmNlIGhpZ2hlciBsZXZlbHMgb2YgdGhlIHZpZXcgaGllcmFyY2h5IGNhbiBjaGFuZ2Ugc2NhbGUgb3V0IGZyb20gdW5kZXJuZWF0aCBpdC4KKyAgICAgICAgcmV0dXJuIGZtYXhmKG1QYWludC0+Z2V0U3Ryb2tlV2lkdGgoKSwgMSkgKiAwLjVmOwogICAgIH0KIAogcHJvdGVjdGVkOgpAQCAtMTAyOCw4ICsxMDMxLDggQEAKICAgICAgICAgICAgIFRleHR1cmVWZXJ0ZXgqIG9wVmVydGljZXMgPSBvcE1lc2gtPnZlcnRpY2VzOwogICAgICAgICAgICAgZm9yICh1aW50MzJfdCBqID0gMDsgaiA8IHZlcnRleENvdW50OyBqKyssIG9wVmVydGljZXMrKykgewogICAgICAgICAgICAgICAgIFRleHR1cmVWZXJ0ZXg6OnNldCh2ZXJ0ZXgrKywKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wVmVydGljZXMtPnBvc2l0aW9uWzBdICsgdHgsIG9wVmVydGljZXMtPnBvc2l0aW9uWzFdICsgdHksCi0gICAgICAgICAgICAgICAgICAgICAgICBvcFZlcnRpY2VzLT50ZXh0dXJlWzBdLCBvcFZlcnRpY2VzLT50ZXh0dXJlWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wVmVydGljZXMtPnggKyB0eCwgb3BWZXJ0aWNlcy0+eSArIHR5LAorICAgICAgICAgICAgICAgICAgICAgICAgb3BWZXJ0aWNlcy0+dSwgb3BWZXJ0aWNlcy0+dik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIERpcnR5IHRoZSBjdXJyZW50IGxheWVyIGlmIHBvc3NpYmxlLiBXaGVuIHRoZSA5LXBhdGNoIGRvZXMgbm90CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvRGlzcGxheUxpc3RSZW5kZXJlci5jcHAgYi9saWJzL2h3dWkvRGlzcGxheUxpc3RSZW5kZXJlci5jcHAKaW5kZXggODg2NjAyOS4uZDAyNDkyMyAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0Rpc3BsYXlMaXN0UmVuZGVyZXIuY3BwCisrKyBiL2xpYnMvaHd1aS9EaXNwbGF5TGlzdFJlbmRlcmVyLmNwcApAQCAtNTA2LDcgKzUwNiw3IEBACiB2b2lkIERpc3BsYXlMaXN0UmVuZGVyZXI6OmFkZERyYXdPcChEcmF3T3AqIG9wKSB7CiAgICAgUmVjdCBsb2NhbEJvdW5kczsKICAgICBpZiAob3AtPmdldExvY2FsQm91bmRzKG1EcmF3TW9kaWZpZXJzLCBsb2NhbEJvdW5kcykpIHsKLSAgICAgICAgYm9vbCByZWplY3RlZCA9IHF1aWNrUmVqZWN0Tm9TY2lzc29yKGxvY2FsQm91bmRzLmxlZnQsIGxvY2FsQm91bmRzLnRvcCwKKyAgICAgICAgYm9vbCByZWplY3RlZCA9IHF1aWNrUmVqZWN0Q29uc2VydmF0aXZlKGxvY2FsQm91bmRzLmxlZnQsIGxvY2FsQm91bmRzLnRvcCwKICAgICAgICAgICAgICAgICBsb2NhbEJvdW5kcy5yaWdodCwgbG9jYWxCb3VuZHMuYm90dG9tKTsKICAgICAgICAgb3AtPnNldFF1aWNrUmVqZWN0ZWQocmVqZWN0ZWQpOwogICAgIH0KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9Gb250UmVuZGVyZXIuY3BwIGIvbGlicy9od3VpL0ZvbnRSZW5kZXJlci5jcHAKaW5kZXggMDBlNzg3MC4uNDg2MTNmZSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0ZvbnRSZW5kZXJlci5jcHAKKysrIGIvbGlicy9od3VpL0ZvbnRSZW5kZXJlci5jcHAKQEAgLTc2LDcgKzc2LDggQEAKICAgICByZW5kZXJlci0+c2V0dXBEcmF3U2hhZGVyKCk7CiAgICAgcmVuZGVyZXItPnNldHVwRHJhd0JsZW5kaW5nKHRydWUsIG1vZGUpOwogICAgIHJlbmRlcmVyLT5zZXR1cERyYXdQcm9ncmFtKCk7Ci0gICAgcmVuZGVyZXItPnNldHVwRHJhd01vZGVsVmlldyh4LCB5LCB4LCB5LCBwdXJlVHJhbnNsYXRlLCB0cnVlKTsKKyAgICByZW5kZXJlci0+c2V0dXBEcmF3TW9kZWxWaWV3KGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZSwgZmFsc2UsCisgICAgICAgICAgICAwLjBmLCAwLjBmLCAwLjBmLCAwLjBmLCBwdXJlVHJhbnNsYXRlKTsKICAgICAvLyBDYWxsaW5nIHNldHVwRHJhd1RleHR1cmUgd2l0aCB0aGUgbmFtZSAwIHdpbGwgZW5hYmxlIHRoZQogICAgIC8vIHV2IGF0dHJpYnV0ZXMgYW5kIGluY3JlYXNlIHRoZSB0ZXh0dXJlIHVuaXQgY291bnQKICAgICAvLyB0ZXh0dXJlIGJpbmRpbmcgd2lsbCBiZSBwZXJmb3JtZWQgYnkgdGhlIGZvbnQgcmVuZGVyZXIgYXMKQEAgLTUxNCw4ICs1MTUsOCBAQAogICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGluZWFyRmlsdGVyaW5nKG1MaW5lYXJGaWx0ZXJpbmcsIGZhbHNlKTsKIAogICAgICAgICAgICAgVGV4dHVyZVZlcnRleCogbWVzaCA9IHRleHR1cmUtPm1lc2goKTsKLSAgICAgICAgICAgIGNhY2hlcy5iaW5kUG9zaXRpb25WZXJ0ZXhQb2ludGVyKGZvcmNlLCAmbWVzaFswXS5wb3NpdGlvblswXSk7Ci0gICAgICAgICAgICBjYWNoZXMuYmluZFRleENvb3Jkc1ZlcnRleFBvaW50ZXIoZm9yY2UsICZtZXNoWzBdLnRleHR1cmVbMF0pOworICAgICAgICAgICAgY2FjaGVzLmJpbmRQb3NpdGlvblZlcnRleFBvaW50ZXIoZm9yY2UsICZtZXNoWzBdLngpOworICAgICAgICAgICAgY2FjaGVzLmJpbmRUZXhDb29yZHNWZXJ0ZXhQb2ludGVyKGZvcmNlLCAmbWVzaFswXS51KTsKICAgICAgICAgICAgIGZvcmNlID0gZmFsc2U7CiAKICAgICAgICAgICAgIGdsRHJhd0VsZW1lbnRzKEdMX1RSSUFOR0xFUywgdGV4dHVyZS0+bWVzaEVsZW1lbnRDb3VudCgpLApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0dyYWRpZW50Q2FjaGUuY3BwIGIvbGlicy9od3VpL0dyYWRpZW50Q2FjaGUuY3BwCmluZGV4IDA5MTY5NDIuLmZmZDFlOGMgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9HcmFkaWVudENhY2hlLmNwcAorKysgYi9saWJzL2h3dWkvR3JhZGllbnRDYWNoZS5jcHAKQEAgLTExNSw3ICsxMTUsNyBAQAogLy8gQ2FsbGJhY2tzCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLXZvaWQgR3JhZGllbnRDYWNoZTo6b3BlcmF0b3IoKShHcmFkaWVudENhY2hlRW50cnkmIHNoYWRlciwgVGV4dHVyZSomIHRleHR1cmUpIHsKK3ZvaWQgR3JhZGllbnRDYWNoZTo6b3BlcmF0b3IoKShHcmFkaWVudENhY2hlRW50cnkmLCBUZXh0dXJlKiYgdGV4dHVyZSkgewogICAgIGlmICh0ZXh0dXJlKSB7CiAgICAgICAgIGNvbnN0IHVpbnQzMl90IHNpemUgPSB0ZXh0dXJlLT53aWR0aCAqIHRleHR1cmUtPmhlaWdodCAqIGJ5dGVzUGVyUGl4ZWwoKTsKICAgICAgICAgbVNpemUgLT0gc2l6ZTsKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgICBtQ2FjaGUucmVtb3ZlT2xkZXN0KCk7CiAgICAgfQogCi0gICAgZ2VuZXJhdGVUZXh0dXJlKGNvbG9ycywgcG9zaXRpb25zLCBjb3VudCwgdGV4dHVyZSk7CisgICAgZ2VuZXJhdGVUZXh0dXJlKGNvbG9ycywgcG9zaXRpb25zLCB0ZXh0dXJlKTsKIAogICAgIG1TaXplICs9IHNpemU7CiAgICAgbUNhY2hlLnB1dChncmFkaWVudCwgdGV4dHVyZSk7CkBAIC0yMzgsOCArMjM4LDcgQEAKICAgICBkc3QgKz0gNCAqIHNpemVvZihmbG9hdCk7CiB9CiAKLXZvaWQgR3JhZGllbnRDYWNoZTo6Z2VuZXJhdGVUZXh0dXJlKHVpbnQzMl90KiBjb2xvcnMsIGZsb2F0KiBwb3NpdGlvbnMsCi0gICAgICAgIGludCBjb3VudCwgVGV4dHVyZSogdGV4dHVyZSkgewordm9pZCBHcmFkaWVudENhY2hlOjpnZW5lcmF0ZVRleHR1cmUodWludDMyX3QqIGNvbG9ycywgZmxvYXQqIHBvc2l0aW9ucywgVGV4dHVyZSogdGV4dHVyZSkgewogICAgIGNvbnN0IHVpbnQzMl90IHdpZHRoID0gdGV4dHVyZS0+d2lkdGg7CiAgICAgY29uc3QgR0xzaXplaSByb3dCeXRlcyA9IHdpZHRoICogYnl0ZXNQZXJQaXhlbCgpOwogICAgIHVpbnQ4X3QgcGl4ZWxzW3Jvd0J5dGVzICogdGV4dHVyZS0+aGVpZ2h0XTsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9HcmFkaWVudENhY2hlLmggYi9saWJzL2h3dWkvR3JhZGllbnRDYWNoZS5oCmluZGV4IDQzOTM0ZDkuLjZhNzgzYjEgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9HcmFkaWVudENhY2hlLmgKKysrIGIvbGlicy9od3VpL0dyYWRpZW50Q2FjaGUuaApAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgVGV4dHVyZSogYWRkTGluZWFyR3JhZGllbnQoR3JhZGllbnRDYWNoZUVudHJ5JiBncmFkaWVudCwKICAgICAgICAgICAgIHVpbnQzMl90KiBjb2xvcnMsIGZsb2F0KiBwb3NpdGlvbnMsIGludCBjb3VudCk7CiAKLSAgICB2b2lkIGdlbmVyYXRlVGV4dHVyZSh1aW50MzJfdCogY29sb3JzLCBmbG9hdCogcG9zaXRpb25zLCBpbnQgY291bnQsIFRleHR1cmUqIHRleHR1cmUpOworICAgIHZvaWQgZ2VuZXJhdGVUZXh0dXJlKHVpbnQzMl90KiBjb2xvcnMsIGZsb2F0KiBwb3NpdGlvbnMsIFRleHR1cmUqIHRleHR1cmUpOwogCiAgICAgc3RydWN0IEdyYWRpZW50SW5mbyB7CiAgICAgICAgIHVpbnQzMl90IHdpZHRoOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL09wZW5HTFJlbmRlcmVyLmNwcCBiL2xpYnMvaHd1aS9PcGVuR0xSZW5kZXJlci5jcHAKaW5kZXggNGQ3NmJlZC4uMjE0ZDBiMSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL09wZW5HTFJlbmRlcmVyLmNwcAorKysgYi9saWJzL2h3dWkvT3BlbkdMUmVuZGVyZXIuY3BwCkBAIC03NzksMTEgKzc3OSwxMCBAQAogCiBpbnQgT3BlbkdMUmVuZGVyZXI6OnNhdmVMYXllcihmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCiAgICAgICAgIGludCBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSBtb2RlLCBpbnQgZmxhZ3MpIHsKLSAgICBjb25zdCBHTHVpbnQgcHJldmlvdXNGYm8gPSBtU25hcHNob3QtPmZibzsKICAgICBjb25zdCBpbnQgY291bnQgPSBzYXZlU25hcHNob3QoZmxhZ3MpOwogCiAgICAgaWYgKCFtU25hcHNob3QtPmlzSWdub3JlZCgpKSB7Ci0gICAgICAgIGNyZWF0ZUxheWVyKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgYWxwaGEsIG1vZGUsIGZsYWdzLCBwcmV2aW91c0Zibyk7CisgICAgICAgIGNyZWF0ZUxheWVyKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgYWxwaGEsIG1vZGUsIGZsYWdzKTsKICAgICB9CiAKICAgICByZXR1cm4gY291bnQ7CkBAIC04MzUsNyArODM0LDYgQEAKIAogaW50IE9wZW5HTFJlbmRlcmVyOjpzYXZlTGF5ZXJEZWZlcnJlZChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCiAgICAgICAgIGludCBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSBtb2RlLCBpbnQgZmxhZ3MpIHsKLSAgICBjb25zdCBHTHVpbnQgcHJldmlvdXNGYm8gPSBtU25hcHNob3QtPmZibzsKICAgICBjb25zdCBpbnQgY291bnQgPSBzYXZlU25hcHNob3QoZmxhZ3MpOwogCiAgICAgaWYgKCFtU25hcHNob3QtPmlzSWdub3JlZCgpICYmIChmbGFncyAmIFNrQ2FudmFzOjprQ2xpcFRvTGF5ZXJfU2F2ZUZsYWcpKSB7CkBAIC05MTEsNyArOTA5LDcgQEAKICAqICAgICBzb21ldGhpbmcgYWN0dWFsbHkgZ2V0cyBkcmF3biBhcmUgdGhlIGxheWVycyByZWdpb25zIGNsZWFyZWQuCiAgKi8KIGJvb2wgT3BlbkdMUmVuZGVyZXI6OmNyZWF0ZUxheWVyKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgaW50IGFscGhhLCBTa1hmZXJtb2RlOjpNb2RlIG1vZGUsIGludCBmbGFncywgR0x1aW50IHByZXZpb3VzRmJvKSB7CisgICAgICAgIGludCBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSBtb2RlLCBpbnQgZmxhZ3MpIHsKICAgICBMQVlFUl9MT0dEKCJSZXF1ZXN0aW5nIGxheWVyICUuMmZ4JS4yZiIsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKTsKICAgICBMQVlFUl9MT0dEKCJMYXllciBjYWNoZSBzaXplID0gJWQiLCBtQ2FjaGVzLmxheWVyQ2FjaGUuZ2V0U2l6ZSgpKTsKIApAQCAtOTQ4LDcgKzk0Niw3IEBACiAKICAgICBzdGFydE1hcmsoIlNhdmVMYXllciIpOwogICAgIGlmIChmYm9MYXllcikgewotICAgICAgICByZXR1cm4gY3JlYXRlRmJvTGF5ZXIobGF5ZXIsIGJvdW5kcywgY2xpcCwgcHJldmlvdXNGYm8pOworICAgICAgICByZXR1cm4gY3JlYXRlRmJvTGF5ZXIobGF5ZXIsIGJvdW5kcywgY2xpcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ29weSB0aGUgZnJhbWVidWZmZXIgaW50byB0aGUgbGF5ZXIKICAgICAgICAgbGF5ZXItPmJpbmRUZXh0dXJlKCk7CkBAIC05NzQsNyArOTcyLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBPcGVuR0xSZW5kZXJlcjo6Y3JlYXRlRmJvTGF5ZXIoTGF5ZXIqIGxheWVyLCBSZWN0JiBib3VuZHMsIFJlY3QmIGNsaXAsIEdMdWludCBwcmV2aW91c0ZibykgeworYm9vbCBPcGVuR0xSZW5kZXJlcjo6Y3JlYXRlRmJvTGF5ZXIoTGF5ZXIqIGxheWVyLCBSZWN0JiBib3VuZHMsIFJlY3QmIGNsaXApIHsKICAgICBsYXllci0+Y2xpcFJlY3Quc2V0KGNsaXApOwogICAgIGxheWVyLT5zZXRGYm8obUNhY2hlcy5mYm9DYWNoZS5nZXQoKSk7CiAKQEAgLTEwMzQsNyArMTAzMiw4IEBACiAgICAgY29uc3QgYm9vbCBmYm9MYXllciA9IGN1cnJlbnQtPmZsYWdzICYgU25hcHNob3Q6OmtGbGFnSXNGYm9MYXllcjsKIAogICAgIGJvb2wgY2xpcFJlcXVpcmVkID0gZmFsc2U7Ci0gICAgcXVpY2tSZWplY3ROb1NjaXNzb3IocmVjdCwgJmNsaXBSZXF1aXJlZCk7IC8vIHNhZmVseSBpZ25vcmUgcmV0dXJuLCBzaG91bGQgbmV2ZXIgYmUgcmVqZWN0ZWQKKyAgICBjYWxjdWxhdGVRdWlja1JlamVjdEZvclNjaXNzb3IocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20sCisgICAgICAgICAgICAmY2xpcFJlcXVpcmVkLCBmYWxzZSk7IC8vIHNhZmVseSBpZ25vcmUgcmV0dXJuLCBzaG91bGQgbmV2ZXIgYmUgcmVqZWN0ZWQKICAgICBtQ2FjaGVzLnNldFNjaXNzb3JFbmFibGVkKG1TY2lzc29yT3B0aW1pemF0aW9uRGlzYWJsZWQgfHwgY2xpcFJlcXVpcmVkKTsKIAogICAgIGlmIChmYm9MYXllcikgewpAQCAtMTEyMiwxMyArMTEyMSwxNSBAQAogICAgICAgICBjb25zdCBmbG9hdCB5ID0gKGludCkgZmxvb3JmKHJlY3QudG9wICsgY3VycmVudFRyYW5zZm9ybSgpLmdldFRyYW5zbGF0ZVkoKSArIDAuNWYpOwogCiAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXIoR0xfTkVBUkVTVCk7Ci0gICAgICAgIHNldHVwRHJhd01vZGVsVmlldyh4LCB5LCB4ICsgcmVjdC5nZXRXaWR0aCgpLCB5ICsgcmVjdC5nZXRIZWlnaHQoKSwgdHJ1ZSk7CisgICAgICAgIHNldHVwRHJhd01vZGVsVmlldyhrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGVBbmRTY2FsZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgeCwgeSwgeCArIHJlY3QuZ2V0V2lkdGgoKSwgeSArIHJlY3QuZ2V0SGVpZ2h0KCksIHRydWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXIoR0xfTElORUFSKTsKLSAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3KHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKTsKKyAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3KGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZUFuZFNjYWxlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSk7CiAgICAgfQogICAgIHNldHVwRHJhd1RleHR1cmVUcmFuc2Zvcm1Vbmlmb3JtcyhsYXllci0+Z2V0VGV4VHJhbnNmb3JtKCkpOwotICAgIHNldHVwRHJhd01lc2goJm1NZXNoVmVydGljZXNbMF0ucG9zaXRpb25bMF0sICZtTWVzaFZlcnRpY2VzWzBdLnRleHR1cmVbMF0pOworICAgIHNldHVwRHJhd01lc2goJm1NZXNoVmVydGljZXNbMF0ueCwgJm1NZXNoVmVydGljZXNbMF0udSk7CiAKICAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfU1RSSVAsIDAsIGdNZXNoQ291bnQpOwogfQpAQCAtMTE2MSw3ICsxMTYyLDcgQEAKICAgICAgICAgYm9vbCBibGVuZCA9IGxheWVyLT5pc0JsZW5kKCkgfHwgYWxwaGEgPCAxLjBmOwogICAgICAgICBkcmF3VGV4dHVyZU1lc2goeCwgeSwgeCArIHJlY3QuZ2V0V2lkdGgoKSwgeSArIHJlY3QuZ2V0SGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgbGF5ZXItPmdldFRleHR1cmUoKSwgYWxwaGEsIGxheWVyLT5nZXRNb2RlKCksIGJsZW5kLAotICAgICAgICAgICAgICAgICZtTWVzaFZlcnRpY2VzWzBdLnBvc2l0aW9uWzBdLCAmbU1lc2hWZXJ0aWNlc1swXS50ZXh0dXJlWzBdLAorICAgICAgICAgICAgICAgICZtTWVzaFZlcnRpY2VzWzBdLngsICZtTWVzaFZlcnRpY2VzWzBdLnUsCiAgICAgICAgICAgICAgICAgR0xfVFJJQU5HTEVfU1RSSVAsIGdNZXNoQ291bnQsIHN3YXAsIHN3YXAgfHwgc2ltcGxlVHJhbnNmb3JtKTsKIAogICAgICAgICByZXNldERyYXdUZXh0dXJlVGV4Q29vcmRzKDAuMGYsIDAuMGYsIDEuMGYsIDEuMGYpOwpAQCAtMTIzNywxMiArMTIzOCwxNCBAQAogICAgICAgICAgICAgY29uc3QgZmxvYXQgeSA9IChpbnQpIGZsb29yZihyZWN0LnRvcCArIGN1cnJlbnRUcmFuc2Zvcm0oKS5nZXRUcmFuc2xhdGVZKCkgKyAwLjVmKTsKIAogICAgICAgICAgICAgbGF5ZXItPnNldEZpbHRlcihHTF9ORUFSRVNUKTsKLSAgICAgICAgICAgIHNldHVwRHJhd01vZGVsVmlld1RyYW5zbGF0ZSh4LCB5LCB4ICsgcmVjdC5nZXRXaWR0aCgpLCB5ICsgcmVjdC5nZXRIZWlnaHQoKSwgdHJ1ZSk7CisgICAgICAgICAgICBzZXR1cERyYXdNb2RlbFZpZXcoa01vZGVsVmlld01vZGVfVHJhbnNsYXRlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgeCwgeSwgeCArIHJlY3QuZ2V0V2lkdGgoKSwgeSArIHJlY3QuZ2V0SGVpZ2h0KCksIHRydWUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbGF5ZXItPnNldEZpbHRlcihHTF9MSU5FQVIpOwotICAgICAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3VHJhbnNsYXRlKHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKTsKKyAgICAgICAgICAgIHNldHVwRHJhd01vZGVsVmlldyhrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSk7CiAgICAgICAgIH0KLSAgICAgICAgc2V0dXBEcmF3TWVzaEluZGljZXMoJm1lc2hbMF0ucG9zaXRpb25bMF0sICZtZXNoWzBdLnRleHR1cmVbMF0pOworICAgICAgICBzZXR1cERyYXdNZXNoSW5kaWNlcygmbWVzaFswXS54LCAmbWVzaFswXS51KTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgICAgIGNvbnN0IGFuZHJvaWQ6OlJlY3QqIHIgPSAmcmVjdHNbaV07CkBAIC0xMjc0LDE1ICsxMjc3LDE1IEBACiAgICAgICAgIH0KIAogI2lmIERFQlVHX0xBWUVSU19BU19SRUdJT05TCi0gICAgICAgIGRyYXdSZWdpb25SZWN0cyhsYXllci0+cmVnaW9uKTsKKyAgICAgICAgZHJhd1JlZ2lvblJlY3RzRGVidWcobGF5ZXItPnJlZ2lvbik7CiAjZW5kaWYKIAogICAgICAgICBsYXllci0+cmVnaW9uLmNsZWFyKCk7CiAgICAgfQogfQogCi12b2lkIE9wZW5HTFJlbmRlcmVyOjpkcmF3UmVnaW9uUmVjdHMoY29uc3QgUmVnaW9uJiByZWdpb24pIHsKICNpZiBERUJVR19MQVlFUlNfQVNfUkVHSU9OUwordm9pZCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1JlZ2lvblJlY3RzRGVidWcoY29uc3QgUmVnaW9uJiByZWdpb24pIHsKICAgICBzaXplX3QgY291bnQ7CiAgICAgY29uc3QgYW5kcm9pZDo6UmVjdCogcmVjdHMgPSByZWdpb24uZ2V0QXJyYXkoJmNvdW50KTsKIApAQCAtMTMwNCw4ICsxMzA3LDggQEAKICAgICAgICAgZHJhd0NvbG9yUmVjdChyLmxlZnQsIHIudG9wLCByLnJpZ2h0LCByLmJvdHRvbSwgY29sb3JzW29mZnNldCArIChpICYgMHgxKV0sCiAgICAgICAgICAgICAgICAgU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZSk7CiAgICAgfQotI2VuZGlmCiB9CisjZW5kaWYKIAogdm9pZCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1JlZ2lvblJlY3RzKGNvbnN0IFNrUmVnaW9uJiByZWdpb24sIGludCBjb2xvciwKICAgICAgICAgU2tYZmVybW9kZTo6TW9kZSBtb2RlLCBib29sIGRpcnR5KSB7CkBAIC0xMzUxLDEyICsxMzU0LDEyIEBACiAgICAgfQogfQogCi12b2lkIE9wZW5HTFJlbmRlcmVyOjpkcmF3SW5kZXhlZFF1YWRzKFZlcnRleCogbWVzaCwgR0xzaXplaSBxdWFkc0NvdW50KSB7Cit2b2lkIE9wZW5HTFJlbmRlcmVyOjppc3N1ZUluZGV4ZWRRdWFkRHJhdyhWZXJ0ZXgqIG1lc2gsIEdMc2l6ZWkgcXVhZHNDb3VudCkgewogICAgIEdMc2l6ZWkgZWxlbWVudHNDb3VudCA9IHF1YWRzQ291bnQgKiA2OwogICAgIHdoaWxlIChlbGVtZW50c0NvdW50ID4gMCkgewogICAgICAgICBHTHNpemVpIGRyYXdDb3VudCA9IG1pbihlbGVtZW50c0NvdW50LCAoR0xzaXplaSkgZ01heE51bWJlck9mUXVhZHMgKiA2KTsKIAotICAgICAgICBzZXR1cERyYXdJbmRleGVkVmVydGljZXMoJm1lc2hbMF0ucG9zaXRpb25bMF0pOworICAgICAgICBzZXR1cERyYXdJbmRleGVkVmVydGljZXMoJm1lc2hbMF0ueCk7CiAgICAgICAgIGdsRHJhd0VsZW1lbnRzKEdMX1RSSUFOR0xFUywgZHJhd0NvdW50LCBHTF9VTlNJR05FRF9TSE9SVCwgTlVMTCk7CiAKICAgICAgICAgZWxlbWVudHNDb3VudCAtPSBkcmF3Q291bnQ7CkBAIC0xNDAzLDkgKzE0MDYsMTAgQEAKICAgICAgICAgc2V0dXBEcmF3QmxlbmRpbmcodHJ1ZSwgU2tYZmVybW9kZTo6a0NsZWFyX01vZGUpOwogICAgICAgICBzZXR1cERyYXdQcm9ncmFtKCk7CiAgICAgICAgIHNldHVwRHJhd1B1cmVDb2xvclVuaWZvcm1zKCk7Ci0gICAgICAgIHNldHVwRHJhd01vZGVsVmlld1RyYW5zbGF0ZSgwLjBmLCAwLjBmLCAwLjBmLCAwLjBmLCB0cnVlKTsKKyAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3KGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgMC4wZiwgMC4wZiwgMC4wZiwgMC4wZiwgdHJ1ZSk7CiAKLSAgICAgICAgZHJhd0luZGV4ZWRRdWFkcygmbWVzaFswXSwgY291bnQpOworICAgICAgICBpc3N1ZUluZGV4ZWRRdWFkRHJhdygmbWVzaFswXSwgY291bnQpOwogCiAgICAgICAgIGlmIChzY2lzc29yQ2hhbmdlZCkgbUNhY2hlcy5lbmFibGVTY2lzc29yKCk7CiAgICAgfSBlbHNlIHsKQEAgLTE2MjYsOCArMTYzMCwxOCBAQAogICAgIHJldHVybiBtU25hcHNob3QtPmdldExvY2FsQ2xpcCgpOwogfQogCi1ib29sIE9wZW5HTFJlbmRlcmVyOjpxdWlja1JlamVjdE5vU2Npc3NvcihmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCi0gICAgICAgIGJvb2wgc25hcE91dCwgYm9vbCogY2xpcFJlcXVpcmVkKSB7CisvKioKKyAqIENhbGN1bGF0ZXMgd2hldGhlciBjb250ZW50IGRyYXduIHdpdGhpbiB0aGUgcGFzc2VkIGJvdW5kcyB3b3VsZCBiZSBvdXRzaWRlIG9mLCBvciBpbnRlcnNlY3Qgd2l0aAorICogdGhlIGNsaXBSZWN0LiBEb2VzIG5vdCBtb2RpZnkgdGhlIHNjaXNzb3IuCisgKgorICogQHBhcmFtIGNsaXBSZXF1aXJlZCBpZiBub3QgbnVsbCwgd2lsbCBiZSBzZXQgdG8gdHJ1ZSBpZiBlbGVtZW50IGludGVyc2VjdHMgY2xpcAorICogICAgICAgICAoYW5kIHdhc24ndCByZWplY3RlZCkKKyAqCisgKiBAcGFyYW0gc25hcE91dCBpZiBzZXQsIHRoZSBnZW9tZXRyeSB3aWxsIGJlIHRyZWF0ZWQgYXMgaGF2aW5nIGFuIEFBIHJhbXAuCisgKiAgICAgICAgIFNlZSBSZWN0OjpzbmFwR2VvbWV0cnlUb1BpeGVsQm91bmRhcmllcygpCisgKi8KK2Jvb2wgT3BlbkdMUmVuZGVyZXI6OmNhbGN1bGF0ZVF1aWNrUmVqZWN0Rm9yU2Npc3NvcihmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsCisgICAgICAgIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGJvb2wqIGNsaXBSZXF1aXJlZCwgYm9vbCBzbmFwT3V0KSBjb25zdCB7CiAgICAgaWYgKG1TbmFwc2hvdC0+aXNJZ25vcmVkKCkgfHwgYm90dG9tIDw9IHRvcCB8fCByaWdodCA8PSBsZWZ0KSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE2NDEsMzEgKzE2NTUsNjUgQEAKIAogICAgIGlmICghY2xpcFJlY3QuaW50ZXJzZWN0cyhyKSkgcmV0dXJuIHRydWU7CiAKKyAgICAvLyBjbGlwIGlzIHJlcXVpcmVkIGlmIGdlb21ldHJ5IGludGVyc2VjdHMgY2xpcCByZWN0CiAgICAgaWYgKGNsaXBSZXF1aXJlZCkgKmNsaXBSZXF1aXJlZCA9ICFjbGlwUmVjdC5jb250YWlucyhyKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgT3BlbkdMUmVuZGVyZXI6OnF1aWNrUmVqZWN0UHJlU3Ryb2tlKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgU2tQYWludCogcGFpbnQpIHsKLSAgICAvLyBBQSBnZW9tZXRyeSB3aWxsIGxpa2VseSBoYXZlIGEgcmFtcCBhcm91bmQgaXQgKG5vdCBhY2NvdW50ZWQgZm9yIGluIGxvY2FsIGJvdW5kcykuIFNuYXAgb3V0Ci0gICAgLy8gdGhlIGZpbmFsIG1hcHBlZCByZWN0IHRvIGVuc3VyZSBjb3JyZWN0IGNsaXBwaW5nIGJlaGF2aW9yIGZvciB0aGUgcmFtcC4KLSAgICBib29sIHNuYXBPdXQgPSBwYWludC0+aXNBbnRpQWxpYXMoKTsKLQotICAgIGlmIChwYWludC0+Z2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHlsZSkgewotICAgICAgICBmbG9hdCBvdXRzZXQgPSBwYWludC0+Z2V0U3Ryb2tlV2lkdGgoKSAqIDAuNWY7Ci0gICAgICAgIHJldHVybiBxdWlja1JlamVjdChsZWZ0IC0gb3V0c2V0LCB0b3AgLSBvdXRzZXQsIHJpZ2h0ICsgb3V0c2V0LCBib3R0b20gKyBvdXRzZXQsIHNuYXBPdXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBxdWlja1JlamVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHNuYXBPdXQpOworLyoqCisgKiBSZXR1cm5zIGZhbHNlIGlmIGRyYXdpbmcgd29uJ3QgYmUgY2xpcHBlZCBvdXQuCisgKgorICogTWFrZXMgdGhlIGRlY2lzaW9uIGNvbnNlcnZhdGl2ZWx5LCBieSByb3VuZGluZyBvdXQgdGhlIG1hcHBlZCByZWN0IGJlZm9yZSBjb21wYXJpbmcgd2l0aCB0aGUKKyAqIGNsaXBSZWN0LiBUbyBiZSB1c2VkIHdoZW4gcGVyZmVjdCwgcGl4ZWwgYWNjdXJhY3kgaXMgbm90IHBvc3NpYmxlIChlc3AuIHdpdGggdGVzc2VsbGF0aW9uKSBidXQKKyAqIHJlamVjdGlvbiBpcyBzdGlsbCBkZXNpcmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24sIHVubGlrZSBxdWlja1JlamVjdFNldHVwU2Npc3Nvciwgc2hvdWxkIGJlIHVzZWQgd2hlcmUgcHJlY2lzZSBnZW9tZXRyeSBpbmZvcm1hdGlvbgorICogaXNuJ3Qga25vd24gKGVzcC4gd2hlbiBnZW9tZXRyeSBhZGp1c3RzIGJhc2VkIG9uIHNjYWxlKS4gR2VuZXJhbGx5LCB0aGlzIHdpbGwgYmUgZmlyc3QgcGFzcworICogcmVqZWN0aW9uIHdoZXJlIHByZWNpc2UgcmVqZWN0aW9uIGlzbid0IGltcG9ydGFudCwgb3IgcHJlY2lzZSBpbmZvcm1hdGlvbiBpc24ndCBhdmFpbGFibGUuCisgKi8KK2Jvb2wgT3BlbkdMUmVuZGVyZXI6OnF1aWNrUmVqZWN0Q29uc2VydmF0aXZlKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKKyAgICAgICAgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSkgY29uc3QgeworICAgIGlmIChtU25hcHNob3QtPmlzSWdub3JlZCgpIHx8IGJvdHRvbSA8PSB0b3AgfHwgcmlnaHQgPD0gbGVmdCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAgICBSZWN0IHIobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBjdXJyZW50VHJhbnNmb3JtKCkubWFwUmVjdChyKTsKKyAgICByLnJvdW5kT3V0KCk7IC8vIHJvdW5kZWQgb3V0IHRvIGJlIGNvbnNlcnZhdGl2ZQorCisgICAgUmVjdCBjbGlwUmVjdCgqbVNuYXBzaG90LT5jbGlwUmVjdCk7CisgICAgY2xpcFJlY3Quc25hcFRvUGl4ZWxCb3VuZGFyaWVzKCk7CisKKyAgICBpZiAoIWNsaXBSZWN0LmludGVyc2VjdHMocikpIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE9wZW5HTFJlbmRlcmVyOjpxdWlja1JlamVjdChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGJvb2wgc25hcE91dCkgeworLyoqCisgKiBSZXR1cm5zIGZhbHNlIGFuZCBzZXRzIHNjaXNzb3IgZW5hYmxlIGJhc2VkIHVwb24gYm91bmRzIGlmIGRyYXdpbmcgd29uJ3QgYmUgY2xpcHBlZCBvdXQuCisgKgorICogQHBhcmFtIHBhaW50IGlmIG5vdCBudWxsLCB0aGUgYm91bmRzIHdpbGwgYmUgZXhwYW5kZWQgdG8gYWNjb3VudCBmb3Igc3Ryb2tlIGRlcGVuZGluZyBvbiBwYWludAorICogICAgICAgICBzdHlsZSwgYW5kIHRlc3NlbGxhdGVkIEFBIHJhbXAKKyAqLworYm9vbCBPcGVuR0xSZW5kZXJlcjo6cXVpY2tSZWplY3RTZXR1cFNjaXNzb3IoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAorICAgICAgICBTa1BhaW50KiBwYWludCkgewogICAgIGJvb2wgY2xpcFJlcXVpcmVkID0gZmFsc2U7Ci0gICAgaWYgKHF1aWNrUmVqZWN0Tm9TY2lzc29yKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgc25hcE91dCwgJmNsaXBSZXF1aXJlZCkpIHsKKyAgICBib29sIHNuYXBPdXQgPSBwYWludCAmJiBwYWludC0+aXNBbnRpQWxpYXMoKTsKKworICAgIGlmIChwYWludCAmJiBwYWludC0+Z2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHlsZSkgeworICAgICAgICBmbG9hdCBvdXRzZXQgPSBwYWludC0+Z2V0U3Ryb2tlV2lkdGgoKSAqIDAuNWY7CisgICAgICAgIGxlZnQgLT0gb3V0c2V0OworICAgICAgICB0b3AgLT0gb3V0c2V0OworICAgICAgICByaWdodCArPSBvdXRzZXQ7CisgICAgICAgIGJvdHRvbSArPSBvdXRzZXQ7CisgICAgfQorCisgICAgaWYgKGNhbGN1bGF0ZVF1aWNrUmVqZWN0Rm9yU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sICZjbGlwUmVxdWlyZWQsIHNuYXBPdXQpKSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmICghaXNEZWZlcnJlZCgpKSB7CisgICAgICAgIC8vIG5vdCBxdWljayByZWplY3RlZCwgc28gZW5hYmxlIHRoZSBzY2lzc29yIGlmIGNsaXBSZXF1aXJlZAogICAgICAgICBtQ2FjaGVzLnNldFNjaXNzb3JFbmFibGVkKG1TY2lzc29yT3B0aW1pemF0aW9uRGlzYWJsZWQgfHwgY2xpcFJlcXVpcmVkKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTc0MCw3ICsxNzg4LDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogdm9pZCBPcGVuR0xSZW5kZXJlcjo6c2V0dXBEcmF3KGJvb2wgY2xlYXIpIHsKLSAgICAvLyBUT0RPOiBJdCB3b3VsZCBiZSBiZXN0IGlmIHdlIGNvdWxkIGRvIHRoaXMgYmVmb3JlIHF1aWNrUmVqZWN0KCkKKyAgICAvLyBUT0RPOiBJdCB3b3VsZCBiZSBiZXN0IGlmIHdlIGNvdWxkIGRvIHRoaXMgYmVmb3JlIHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKCkKICAgICAvLyAgICAgICBjaGFuZ2VzIHRoZSBzY2lzc29yIHRlc3Qgc3RhdGUKICAgICBpZiAoY2xlYXIpIGNsZWFyTGF5ZXJSZWdpb25zKCk7CiAgICAgLy8gTWFrZSBzdXJlIHNldFNjaXNzb3IgJiBzZXRTdGVuY2lsIGhhcHBlbiBhdCB0aGUgYmVnaW5uaW5nIG9mCkBAIC0xNzk4LDcgKzE4NDYsNyBAQAogICAgIG1Db2xvckcgPSBtQ29sb3JBICogKChjb2xvciA+PiAgOCkgJiAweEZGKSAvIDI1NS4wZjsKICAgICBtQ29sb3JCID0gbUNvbG9yQSAqICgoY29sb3IgICAgICApICYgMHhGRikgLyAyNTUuMGY7CiAgICAgbUNvbG9yU2V0ID0gdHJ1ZTsKLSAgICBtU2V0U2hhZGVyQ29sb3IgPSBtRGVzY3JpcHRpb24uc2V0Q29sb3IobUNvbG9yUiwgbUNvbG9yRywgbUNvbG9yQiwgbUNvbG9yQSk7CisgICAgbVNldFNoYWRlckNvbG9yID0gbURlc2NyaXB0aW9uLnNldENvbG9yTW9kdWxhdGUobUNvbG9yQSk7CiB9CiAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldHVwRHJhd0FscGhhOENvbG9yKGludCBjb2xvciwgaW50IGFscGhhKSB7CkBAIC0xODA3LDcgKzE4NTUsNyBAQAogICAgIG1Db2xvckcgPSBtQ29sb3JBICogKChjb2xvciA+PiAgOCkgJiAweEZGKSAvIDI1NS4wZjsKICAgICBtQ29sb3JCID0gbUNvbG9yQSAqICgoY29sb3IgICAgICApICYgMHhGRikgLyAyNTUuMGY7CiAgICAgbUNvbG9yU2V0ID0gdHJ1ZTsKLSAgICBtU2V0U2hhZGVyQ29sb3IgPSBtRGVzY3JpcHRpb24uc2V0QWxwaGE4Q29sb3IobUNvbG9yUiwgbUNvbG9yRywgbUNvbG9yQiwgbUNvbG9yQSk7CisgICAgbVNldFNoYWRlckNvbG9yID0gbURlc2NyaXB0aW9uLnNldEFscGhhOENvbG9yTW9kdWxhdGUobUNvbG9yUiwgbUNvbG9yRywgbUNvbG9yQiwgbUNvbG9yQSk7CiB9CiAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldHVwRHJhd1RleHRHYW1tYShjb25zdCBTa1BhaW50KiBwYWludCkgewpAQCAtMTgyMCw3ICsxODY4LDcgQEAKICAgICBtQ29sb3JHID0gZzsKICAgICBtQ29sb3JCID0gYjsKICAgICBtQ29sb3JTZXQgPSB0cnVlOwotICAgIG1TZXRTaGFkZXJDb2xvciA9IG1EZXNjcmlwdGlvbi5zZXRDb2xvcihyLCBnLCBiLCBhKTsKKyAgICBtU2V0U2hhZGVyQ29sb3IgPSBtRGVzY3JpcHRpb24uc2V0Q29sb3JNb2R1bGF0ZShhKTsKIH0KIAogdm9pZCBPcGVuR0xSZW5kZXJlcjo6c2V0dXBEcmF3U2hhZGVyKCkgewpAQCAtMTg3MCwzOSArMTkxOCwyMCBAQAogICAgIG1UcmFja0RpcnR5UmVnaW9ucyA9IGZhbHNlOwogfQogCi12b2lkIE9wZW5HTFJlbmRlcmVyOjpzZXR1cERyYXdNb2RlbFZpZXdUcmFuc2xhdGUoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAotICAgICAgICBib29sIGlnbm9yZVRyYW5zZm9ybSkgewordm9pZCBPcGVuR0xSZW5kZXJlcjo6c2V0dXBEcmF3TW9kZWxWaWV3KE1vZGVsVmlld01vZGUgbW9kZSwgYm9vbCBvZmZzZXQsCisgICAgICAgIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgYm9vbCBpZ25vcmVUcmFuc2Zvcm0pIHsKICAgICBtTW9kZWxWaWV3LmxvYWRUcmFuc2xhdGUobGVmdCwgdG9wLCAwLjBmKTsKLSAgICBpZiAoIWlnbm9yZVRyYW5zZm9ybSkgewotICAgICAgICBtQ2FjaGVzLmN1cnJlbnRQcm9ncmFtLT5zZXQobU9ydGhvTWF0cml4LCBtTW9kZWxWaWV3LCBjdXJyZW50VHJhbnNmb3JtKCkpOwotICAgICAgICBpZiAobVRyYWNrRGlydHlSZWdpb25zKSBkaXJ0eUxheWVyKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgY3VycmVudFRyYW5zZm9ybSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtQ2FjaGVzLmN1cnJlbnRQcm9ncmFtLT5zZXQobU9ydGhvTWF0cml4LCBtTW9kZWxWaWV3LCBtYXQ0OjppZGVudGl0eSgpKTsKLSAgICAgICAgaWYgKG1UcmFja0RpcnR5UmVnaW9ucykgZGlydHlMYXllcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIH0KLX0KLQotdm9pZCBPcGVuR0xSZW5kZXJlcjo6c2V0dXBEcmF3TW9kZWxWaWV3SWRlbnRpdHkoYm9vbCBvZmZzZXQpIHsKLSAgICBtQ2FjaGVzLmN1cnJlbnRQcm9ncmFtLT5zZXQobU9ydGhvTWF0cml4LCBtYXQ0OjppZGVudGl0eSgpLCBjdXJyZW50VHJhbnNmb3JtKCksIG9mZnNldCk7Ci19Ci0KLXZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldHVwRHJhd01vZGVsVmlldyhmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCi0gICAgICAgIGJvb2wgaWdub3JlVHJhbnNmb3JtLCBib29sIGlnbm9yZU1vZGVsVmlldykgewotICAgIGlmICghaWdub3JlTW9kZWxWaWV3KSB7Ci0gICAgICAgIG1Nb2RlbFZpZXcubG9hZFRyYW5zbGF0ZShsZWZ0LCB0b3AsIDAuMGYpOworICAgIGlmIChtb2RlID09IGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZUFuZFNjYWxlKSB7CiAgICAgICAgIG1Nb2RlbFZpZXcuc2NhbGUocmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3AsIDEuMGYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1Nb2RlbFZpZXcubG9hZElkZW50aXR5KCk7CiAgICAgfQorCiAgICAgYm9vbCBkaXJ0eSA9IHJpZ2h0IC0gbGVmdCA+IDAuMGYgJiYgYm90dG9tIC0gdG9wID4gMC4wZjsKICAgICBpZiAoIWlnbm9yZVRyYW5zZm9ybSkgewotICAgICAgICBtQ2FjaGVzLmN1cnJlbnRQcm9ncmFtLT5zZXQobU9ydGhvTWF0cml4LCBtTW9kZWxWaWV3LCBjdXJyZW50VHJhbnNmb3JtKCkpOwotICAgICAgICBpZiAobVRyYWNrRGlydHlSZWdpb25zICYmIGRpcnR5KSB7Ci0gICAgICAgICAgICBkaXJ0eUxheWVyKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgY3VycmVudFRyYW5zZm9ybSgpKTsKLSAgICAgICAgfQorICAgICAgICBtQ2FjaGVzLmN1cnJlbnRQcm9ncmFtLT5zZXQobU9ydGhvTWF0cml4LCBtTW9kZWxWaWV3LCBjdXJyZW50VHJhbnNmb3JtKCksIG9mZnNldCk7CisgICAgICAgIGlmIChkaXJ0eSAmJiBtVHJhY2tEaXJ0eVJlZ2lvbnMpIGRpcnR5TGF5ZXIobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBjdXJyZW50VHJhbnNmb3JtKCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1DYWNoZXMuY3VycmVudFByb2dyYW0tPnNldChtT3J0aG9NYXRyaXgsIG1Nb2RlbFZpZXcsIG1hdDQ6OmlkZW50aXR5KCkpOwotICAgICAgICBpZiAobVRyYWNrRGlydHlSZWdpb25zICYmIGRpcnR5KSBkaXJ0eUxheWVyKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgIG1DYWNoZXMuY3VycmVudFByb2dyYW0tPnNldChtT3J0aG9NYXRyaXgsIG1Nb2RlbFZpZXcsIG1hdDQ6OmlkZW50aXR5KCksIG9mZnNldCk7CisgICAgICAgIGlmIChkaXJ0eSAmJiBtVHJhY2tEaXJ0eVJlZ2lvbnMpIGRpcnR5TGF5ZXIobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICB9CiB9CiAKQEAgLTE5MjEsMjAgKzE5NTAsMTkgQEAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldHVwRHJhd1NoYWRlclVuaWZvcm1zKGJvb2wgaWdub3JlVHJhbnNmb3JtKSB7CiAgICAgaWYgKG1EcmF3TW9kaWZpZXJzLm1TaGFkZXIpIHsKICAgICAgICAgaWYgKGlnbm9yZVRyYW5zZm9ybSkgewotICAgICAgICAgICAgbU1vZGVsVmlldy5sb2FkSW52ZXJzZShjdXJyZW50VHJhbnNmb3JtKCkpOworICAgICAgICAgICAgLy8gaWYgaWdub3JlVHJhbnNmb3JtPXRydWUgd2FzIHBhc3NlZCB0byBzZXR1cERyYXdNb2RlbFZpZXcsIHVuZG8gY3VycmVudFRyYW5zZm9ybSgpCisgICAgICAgICAgICAvLyBiZWNhdXNlIGl0IHdhcyBidWlsdCBpbnRvIG1vZGVsVmlldyAvIHRoZSBnZW9tZXRyeSwgYW5kIHRoZSBTa2lhU2hhZGVyIG5lZWRzIHRvCisgICAgICAgICAgICAvLyBjb21wZW5zYXRlLgorICAgICAgICAgICAgbWF0NCBtb2RlbFZpZXdXaXRob3V0VHJhbnNmb3JtOworICAgICAgICAgICAgbW9kZWxWaWV3V2l0aG91dFRyYW5zZm9ybS5sb2FkSW52ZXJzZShjdXJyZW50VHJhbnNmb3JtKCkpOworICAgICAgICAgICAgbW9kZWxWaWV3V2l0aG91dFRyYW5zZm9ybS5tdWx0aXBseShtTW9kZWxWaWV3KTsKKyAgICAgICAgICAgIG1Nb2RlbFZpZXcubG9hZChtb2RlbFZpZXdXaXRob3V0VHJhbnNmb3JtKTsKICAgICAgICAgfQogICAgICAgICBtRHJhd01vZGlmaWVycy5tU2hhZGVyLT5zZXR1cFByb2dyYW0obUNhY2hlcy5jdXJyZW50UHJvZ3JhbSwKICAgICAgICAgICAgICAgICBtTW9kZWxWaWV3LCAqbVNuYXBzaG90LCAmbVRleHR1cmVVbml0KTsKICAgICB9CiB9CiAKLXZvaWQgT3BlbkdMUmVuZGVyZXI6OnNldHVwRHJhd1NoYWRlcklkZW50aXR5VW5pZm9ybXMoKSB7Ci0gICAgaWYgKG1EcmF3TW9kaWZpZXJzLm1TaGFkZXIpIHsKLSAgICAgICAgbURyYXdNb2RpZmllcnMubVNoYWRlci0+c2V0dXBQcm9ncmFtKG1DYWNoZXMuY3VycmVudFByb2dyYW0sCi0gICAgICAgICAgICAgICAgbWF0NDo6aWRlbnRpdHkoKSwgKm1TbmFwc2hvdCwgJm1UZXh0dXJlVW5pdCk7Ci0gICAgfQotfQotCiB2b2lkIE9wZW5HTFJlbmRlcmVyOjpzZXR1cERyYXdDb2xvckZpbHRlclVuaWZvcm1zKCkgewogICAgIGlmIChtRHJhd01vZGlmaWVycy5tQ29sb3JGaWx0ZXIpIHsKICAgICAgICAgbURyYXdNb2RpZmllcnMubUNvbG9yRmlsdGVyLT5zZXR1cFByb2dyYW0obUNhY2hlcy5jdXJyZW50UHJvZ3JhbSk7CkBAIC0yMDYwLDEyICsyMDg4LDYgQEAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiB9CiAKLXZvaWQgT3BlbkdMUmVuZGVyZXI6Om91dHB1dERpc3BsYXlMaXN0KERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCkgewotICAgIGlmIChkaXNwbGF5TGlzdCkgewotICAgICAgICBkaXNwbGF5TGlzdC0+b3V0cHV0KDEpOwotICAgIH0KLX0KLQogdm9pZCBPcGVuR0xSZW5kZXJlcjo6ZHJhd0FscGhhQml0bWFwKFRleHR1cmUqIHRleHR1cmUsIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgU2tQYWludCogcGFpbnQpIHsKICAgICBpbnQgYWxwaGE7CiAgICAgU2tYZmVybW9kZTo6TW9kZSBtb2RlOwpAQCAtMjExOCwxNyArMjE0MCwxOSBAQAogCiAgICAgY29uc3QgZmxvYXQgeCA9IChpbnQpIGZsb29yZihib3VuZHMubGVmdCArIDAuNWYpOwogICAgIGNvbnN0IGZsb2F0IHkgPSAoaW50KSBmbG9vcmYoYm91bmRzLnRvcCArIDAuNWYpOwotICAgIGlmIChDQ19VTkxJS0VMWShiaXRtYXAtPmdldENvbmZpZygpID09IFNrQml0bWFwOjprQThfQ29uZmlnKSkgeworICAgIGlmIChDQ19VTkxJS0VMWShiaXRtYXAtPmNvbmZpZygpID09IFNrQml0bWFwOjprQThfQ29uZmlnKSkgewogICAgICAgICBpbnQgY29sb3IgPSBwYWludCAhPSBOVUxMID8gcGFpbnQtPmdldENvbG9yKCkgOiAwOwogICAgICAgICBkcmF3QWxwaGE4VGV4dHVyZU1lc2goeCwgeSwgeCArIGJvdW5kcy5nZXRXaWR0aCgpLCB5ICsgYm91bmRzLmdldEhlaWdodCgpLAogICAgICAgICAgICAgICAgIHRleHR1cmUtPmlkLCBwYWludCAhPSBOVUxMLCBjb2xvciwgYWxwaGEsIG1vZGUsCi0gICAgICAgICAgICAgICAgJnZlcnRpY2VzWzBdLnBvc2l0aW9uWzBdLCAmdmVydGljZXNbMF0udGV4dHVyZVswXSwKLSAgICAgICAgICAgICAgICBHTF9UUklBTkdMRVMsIGJpdG1hcENvdW50ICogNiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgICZ2ZXJ0aWNlc1swXS54LCAmdmVydGljZXNbMF0udSwKKyAgICAgICAgICAgICAgICBHTF9UUklBTkdMRVMsIGJpdG1hcENvdW50ICogNiwgdHJ1ZSwKKyAgICAgICAgICAgICAgICBrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGUsIGZhbHNlKTsKICAgICB9IGVsc2UgewogICAgICAgICBkcmF3VGV4dHVyZU1lc2goeCwgeSwgeCArIGJvdW5kcy5nZXRXaWR0aCgpLCB5ICsgYm91bmRzLmdldEhlaWdodCgpLAogICAgICAgICAgICAgICAgIHRleHR1cmUtPmlkLCBhbHBoYSAvIDI1NS4wZiwgbW9kZSwgdGV4dHVyZS0+YmxlbmQsCi0gICAgICAgICAgICAgICAgJnZlcnRpY2VzWzBdLnBvc2l0aW9uWzBdLCAmdmVydGljZXNbMF0udGV4dHVyZVswXSwKLSAgICAgICAgICAgICAgICBHTF9UUklBTkdMRVMsIGJpdG1hcENvdW50ICogNiwgZmFsc2UsIHRydWUsIDAsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAmdmVydGljZXNbMF0ueCwgJnZlcnRpY2VzWzBdLnUsCisgICAgICAgICAgICAgICAgR0xfVFJJQU5HTEVTLCBiaXRtYXBDb3VudCAqIDYsIGZhbHNlLCB0cnVlLCAwLAorICAgICAgICAgICAgICAgIGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZSwgZmFsc2UpOwogICAgIH0KIAogICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRHJldzsKQEAgLTIxMzgsNyArMjE2Miw3IEBACiAgICAgY29uc3QgZmxvYXQgcmlnaHQgPSBsZWZ0ICsgYml0bWFwLT53aWR0aCgpOwogICAgIGNvbnN0IGZsb2F0IGJvdHRvbSA9IHRvcCArIGJpdG1hcC0+aGVpZ2h0KCk7CiAKLSAgICBpZiAocXVpY2tSZWplY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSkgeworICAgIGlmIChxdWlja1JlamVjdFNldHVwU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pKSB7CiAgICAgICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKICAgICB9CiAKQEAgLTIxNDcsNyArMjE3MSw3IEBACiAgICAgaWYgKCF0ZXh0dXJlKSByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAgICAgY29uc3QgQXV0b1RleHR1cmUgYXV0b0NsZWFudXAodGV4dHVyZSk7CiAKLSAgICBpZiAoQ0NfVU5MSUtFTFkoYml0bWFwLT5nZXRDb25maWcoKSA9PSBTa0JpdG1hcDo6a0E4X0NvbmZpZykpIHsKKyAgICBpZiAoQ0NfVU5MSUtFTFkoYml0bWFwLT5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0E4X0NvbmZpZykpIHsKICAgICAgICAgZHJhd0FscGhhQml0bWFwKHRleHR1cmUsIGxlZnQsIHRvcCwgcGFpbnQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRyYXdUZXh0dXJlUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHRleHR1cmUsIHBhaW50KTsKQEAgLTIxNjEsNyArMjE4NSw3IEBACiAgICAgY29uc3QgbWF0NCB0cmFuc2Zvcm0oKm1hdHJpeCk7CiAgICAgdHJhbnNmb3JtLm1hcFJlY3Qocik7CiAKLSAgICBpZiAocXVpY2tSZWplY3Qoci5sZWZ0LCByLnRvcCwgci5yaWdodCwgci5ib3R0b20pKSB7CisgICAgaWYgKHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKHIubGVmdCwgci50b3AsIHIucmlnaHQsIHIuYm90dG9tKSkgewogICAgICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAgICAgfQogCkBAIC0yMTc0LDcgKzIxOTgsNyBAQAogICAgIC8vIHRvIHRoZSB2ZXJ0ZXggc2hhZGVyLiBUaGUgc2F2ZS9yZXN0b3JlIGlzIGEgYml0IG92ZXJraWxsLgogICAgIHNhdmUoU2tDYW52YXM6OmtNYXRyaXhfU2F2ZUZsYWcpOwogICAgIGNvbmNhdE1hdHJpeChtYXRyaXgpOwotICAgIGlmIChDQ19VTkxJS0VMWShiaXRtYXAtPmdldENvbmZpZygpID09IFNrQml0bWFwOjprQThfQ29uZmlnKSkgeworICAgIGlmIChDQ19VTkxJS0VMWShiaXRtYXAtPmNvbmZpZygpID09IFNrQml0bWFwOjprQThfQ29uZmlnKSkgewogICAgICAgICBkcmF3QWxwaGFCaXRtYXAodGV4dHVyZSwgMC4wZiwgMC4wZiwgcGFpbnQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRyYXdUZXh0dXJlUmVjdCgwLjBmLCAwLjBmLCBiaXRtYXAtPndpZHRoKCksIGJpdG1hcC0+aGVpZ2h0KCksIHRleHR1cmUsIHBhaW50KTsKQEAgLTIxODgsNyArMjIxMiw3IEBACiAgICAgY29uc3QgZmxvYXQgcmlnaHQgPSBsZWZ0ICsgYml0bWFwLT53aWR0aCgpOwogICAgIGNvbnN0IGZsb2F0IGJvdHRvbSA9IHRvcCArIGJpdG1hcC0+aGVpZ2h0KCk7CiAKLSAgICBpZiAocXVpY2tSZWplY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSkgeworICAgIGlmIChxdWlja1JlamVjdFNldHVwU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pKSB7CiAgICAgICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKICAgICB9CiAKQEAgLTIxOTYsNyArMjIyMCw3IEBACiAgICAgVGV4dHVyZSogdGV4dHVyZSA9IG1DYWNoZXMudGV4dHVyZUNhY2hlLmdldFRyYW5zaWVudChiaXRtYXApOwogICAgIGNvbnN0IEF1dG9UZXh0dXJlIGF1dG9DbGVhbnVwKHRleHR1cmUpOwogCi0gICAgaWYgKENDX1VOTElLRUxZKGJpdG1hcC0+Z2V0Q29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBOF9Db25maWcpKSB7CisgICAgaWYgKENDX1VOTElLRUxZKGJpdG1hcC0+Y29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBOF9Db25maWcpKSB7CiAgICAgICAgIGRyYXdBbHBoYUJpdG1hcCh0ZXh0dXJlLCBsZWZ0LCB0b3AsIHBhaW50KTsKICAgICB9IGVsc2UgewogICAgICAgICBkcmF3VGV4dHVyZVJlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCB0ZXh0dXJlLCBwYWludCk7CkBAIC0yMjcxLDcgKzIyOTUsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHF1aWNrUmVqZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkpIHsKKyAgICBpZiAocXVpY2tSZWplY3RTZXR1cFNjaXNzb3IobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSkgewogICAgICAgICBpZiAoY2xlYW51cENvbG9ycykgZGVsZXRlW10gY29sb3JzOwogICAgICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAgICAgfQpAQCAtMjMwNSwxMSArMjMyOSwxMSBAQAogICAgIHNldHVwRHJhd0JsZW5kaW5nKHRydWUsIG1vZGUsIGZhbHNlKTsKICAgICBzZXR1cERyYXdQcm9ncmFtKCk7CiAgICAgc2V0dXBEcmF3RGlydHlSZWdpb25zRGlzYWJsZWQoKTsKLSAgICBzZXR1cERyYXdNb2RlbFZpZXcoMC4wZiwgMC4wZiwgMS4wZiwgMS4wZiwgZmFsc2UpOworICAgIHNldHVwRHJhd01vZGVsVmlldyhrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGVBbmRTY2FsZSwgZmFsc2UsIDAuMGYsIDAuMGYsIDEuMGYsIDEuMGYpOwogICAgIHNldHVwRHJhd1RleHR1cmUodGV4dHVyZS0+aWQpOwogICAgIHNldHVwRHJhd1B1cmVDb2xvclVuaWZvcm1zKCk7CiAgICAgc2V0dXBEcmF3Q29sb3JGaWx0ZXJVbmlmb3JtcygpOwotICAgIHNldHVwRHJhd01lc2goJm1lc2hbMF0ucG9zaXRpb25bMF0sICZtZXNoWzBdLnRleHR1cmVbMF0sICZtZXNoWzBdLmNvbG9yWzBdKTsKKyAgICBzZXR1cERyYXdNZXNoKCZtZXNoWzBdLngsICZtZXNoWzBdLnUsICZtZXNoWzBdLnIpOwogCiAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFUywgMCwgY291bnQpOwogCkBAIC0yMzI3LDcgKzIzNTEsNyBAQAogICAgICAgICAgZmxvYXQgc3JjTGVmdCwgZmxvYXQgc3JjVG9wLCBmbG9hdCBzcmNSaWdodCwgZmxvYXQgc3JjQm90dG9tLAogICAgICAgICAgZmxvYXQgZHN0TGVmdCwgZmxvYXQgZHN0VG9wLCBmbG9hdCBkc3RSaWdodCwgZmxvYXQgZHN0Qm90dG9tLAogICAgICAgICAgU2tQYWludCogcGFpbnQpIHsKLSAgICBpZiAocXVpY2tSZWplY3QoZHN0TGVmdCwgZHN0VG9wLCBkc3RSaWdodCwgZHN0Qm90dG9tKSkgeworICAgIGlmIChxdWlja1JlamVjdFNldHVwU2Npc3Nvcihkc3RMZWZ0LCBkc3RUb3AsIGRzdFJpZ2h0LCBkc3RCb3R0b20pKSB7CiAgICAgICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKICAgICB9CiAKQEAgLTIzOTMsMTYgKzI0MTcsMTYgQEAKICAgICAgICAgZHN0Qm90dG9tID0gc3JjQm90dG9tIC0gc3JjVG9wOwogICAgIH0KIAotICAgIGlmIChDQ19VTkxJS0VMWShiaXRtYXAtPmdldENvbmZpZygpID09IFNrQml0bWFwOjprQThfQ29uZmlnKSkgeworICAgIGlmIChDQ19VTkxJS0VMWShiaXRtYXAtPmNvbmZpZygpID09IFNrQml0bWFwOjprQThfQ29uZmlnKSkgewogICAgICAgICBpbnQgY29sb3IgPSBwYWludCA/IHBhaW50LT5nZXRDb2xvcigpIDogMDsKICAgICAgICAgZHJhd0FscGhhOFRleHR1cmVNZXNoKGRzdExlZnQsIGRzdFRvcCwgZHN0UmlnaHQsIGRzdEJvdHRvbSwKICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5pZCwgcGFpbnQgIT0gTlVMTCwgY29sb3IsIGFscGhhLCBtb2RlLAotICAgICAgICAgICAgICAgICZtTWVzaFZlcnRpY2VzWzBdLnBvc2l0aW9uWzBdLCAmbU1lc2hWZXJ0aWNlc1swXS50ZXh0dXJlWzBdLAorICAgICAgICAgICAgICAgICZtTWVzaFZlcnRpY2VzWzBdLngsICZtTWVzaFZlcnRpY2VzWzBdLnUsCiAgICAgICAgICAgICAgICAgR0xfVFJJQU5HTEVfU1RSSVAsIGdNZXNoQ291bnQsIGlnbm9yZVRyYW5zZm9ybSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZHJhd1RleHR1cmVNZXNoKGRzdExlZnQsIGRzdFRvcCwgZHN0UmlnaHQsIGRzdEJvdHRvbSwKICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5pZCwgYWxwaGEgLyAyNTUuMGYsIG1vZGUsIHRleHR1cmUtPmJsZW5kLAotICAgICAgICAgICAgICAgICZtTWVzaFZlcnRpY2VzWzBdLnBvc2l0aW9uWzBdLCAmbU1lc2hWZXJ0aWNlc1swXS50ZXh0dXJlWzBdLAorICAgICAgICAgICAgICAgICZtTWVzaFZlcnRpY2VzWzBdLngsICZtTWVzaFZlcnRpY2VzWzBdLnUsCiAgICAgICAgICAgICAgICAgR0xfVFJJQU5HTEVfU1RSSVAsIGdNZXNoQ291bnQsIGZhbHNlLCBpZ25vcmVUcmFuc2Zvcm0pOwogICAgIH0KIApAQCAtMjQxNyw3ICsyNDQxLDcgQEAKIAogc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdQYXRjaChTa0JpdG1hcCogYml0bWFwLCBSZXNfcG5nXzlwYXRjaCogcGF0Y2gsCiAgICAgICAgIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tQYWludCogcGFpbnQpIHsKLSAgICBpZiAocXVpY2tSZWplY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSkgeworICAgIGlmIChxdWlja1JlamVjdFNldHVwU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pKSB7CiAgICAgICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKICAgICB9CiAKQEAgLTI0MzAsNyArMjQ1NCw3IEBACiAKIHN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3UGF0Y2goU2tCaXRtYXAqIGJpdG1hcCwgY29uc3QgUGF0Y2gqIG1lc2gsIEFzc2V0QXRsYXM6OkVudHJ5KiBlbnRyeSwKICAgICAgICAgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBTa1BhaW50KiBwYWludCkgewotICAgIGlmIChxdWlja1JlamVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pKSB7CisgICAgaWYgKHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIH0KIApAQCAtMjQ2NiwyMiArMjQ5MCwyMSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm0gPSBmYWxzZTsKICAgICAgICAgaWYgKENDX0xJS0VMWShwdXJlVHJhbnNsYXRlKSkgewogICAgICAgICAgICAgY29uc3QgZmxvYXQgeCA9IChpbnQpIGZsb29yZihsZWZ0ICsgY3VycmVudFRyYW5zZm9ybSgpLmdldFRyYW5zbGF0ZVgoKSArIDAuNWYpOwogICAgICAgICAgICAgY29uc3QgZmxvYXQgeSA9IChpbnQpIGZsb29yZih0b3AgKyBjdXJyZW50VHJhbnNmb3JtKCkuZ2V0VHJhbnNsYXRlWSgpICsgMC41Zik7CiAKICAgICAgICAgICAgIHJpZ2h0ID0geCArIHJpZ2h0IC0gbGVmdDsKICAgICAgICAgICAgIGJvdHRvbSA9IHkgKyBib3R0b20gLSB0b3A7Ci0gICAgICAgICAgICBkcmF3SW5kZXhlZFRleHR1cmVNZXNoKHgsIHksIHJpZ2h0LCBib3R0b20sIHRleHR1cmUtPmlkLCBhbHBoYSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAgICAgbW9kZSwgdGV4dHVyZS0+YmxlbmQsIChHTHZvaWQqKSBtZXNoLT5vZmZzZXQsIChHTHZvaWQqKSBtZXNoLT50ZXh0dXJlT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICBHTF9UUklBTkdMRVMsIG1lc2gtPmluZGV4Q291bnQsIGZhbHNlLCB0cnVlLAotICAgICAgICAgICAgICAgICAgICBtQ2FjaGVzLnBhdGNoQ2FjaGUuZ2V0TWVzaEJ1ZmZlcigpLCB0cnVlLCAhbWVzaC0+aGFzRW1wdHlRdWFkcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkcmF3SW5kZXhlZFRleHR1cmVNZXNoKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgdGV4dHVyZS0+aWQsIGFscGhhIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICAgICBtb2RlLCB0ZXh0dXJlLT5ibGVuZCwgKEdMdm9pZCopIG1lc2gtPm9mZnNldCwgKEdMdm9pZCopIG1lc2gtPnRleHR1cmVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIEdMX1RSSUFOR0xFUywgbWVzaC0+aW5kZXhDb3VudCwgZmFsc2UsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICBtQ2FjaGVzLnBhdGNoQ2FjaGUuZ2V0TWVzaEJ1ZmZlcigpLCB0cnVlLCAhbWVzaC0+aGFzRW1wdHlRdWFkcyk7CisgICAgICAgICAgICBsZWZ0ID0geDsKKyAgICAgICAgICAgIHRvcCA9IHk7CisgICAgICAgICAgICBpZ25vcmVUcmFuc2Zvcm0gPSB0cnVlOwogICAgICAgICB9CisgICAgICAgIGRyYXdJbmRleGVkVGV4dHVyZU1lc2gobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCB0ZXh0dXJlLT5pZCwgYWxwaGEgLyAyNTUuMGYsCisgICAgICAgICAgICAgICAgbW9kZSwgdGV4dHVyZS0+YmxlbmQsIChHTHZvaWQqKSBtZXNoLT5vZmZzZXQsIChHTHZvaWQqKSBtZXNoLT50ZXh0dXJlT2Zmc2V0LAorICAgICAgICAgICAgICAgIEdMX1RSSUFOR0xFUywgbWVzaC0+aW5kZXhDb3VudCwgZmFsc2UsIGlnbm9yZVRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICBtQ2FjaGVzLnBhdGNoQ2FjaGUuZ2V0TWVzaEJ1ZmZlcigpLCBrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGUsICFtZXNoLT5oYXNFbXB0eVF1YWRzKTsKICAgICB9CiAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RyZXc7CkBAIC0yNTA3LDE0ICsyNTMwLDE2IEBACiAgICAgZ2V0QWxwaGFBbmRNb2RlKHBhaW50LCAmYWxwaGEsICZtb2RlKTsKIAogICAgIGRyYXdJbmRleGVkVGV4dHVyZU1lc2goMC4wZiwgMC4wZiwgMS4wZiwgMS4wZiwgdGV4dHVyZS0+aWQsIGFscGhhIC8gMjU1LjBmLAotICAgICAgICAgICAgbW9kZSwgdGV4dHVyZS0+YmxlbmQsICZ2ZXJ0aWNlc1swXS5wb3NpdGlvblswXSwgJnZlcnRpY2VzWzBdLnRleHR1cmVbMF0sCi0gICAgICAgICAgICBHTF9UUklBTkdMRVMsIGluZGV4Q291bnQsIGZhbHNlLCB0cnVlLCAwLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBtb2RlLCB0ZXh0dXJlLT5ibGVuZCwgJnZlcnRpY2VzWzBdLngsICZ2ZXJ0aWNlc1swXS51LAorICAgICAgICAgICAgR0xfVFJJQU5HTEVTLCBpbmRleENvdW50LCBmYWxzZSwgdHJ1ZSwgMCwga01vZGVsVmlld01vZGVfVHJhbnNsYXRlLCBmYWxzZSk7CiAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RyZXc7CiB9CiAKIHN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3VmVydGV4QnVmZmVyKGNvbnN0IFZlcnRleEJ1ZmZlciYgdmVydGV4QnVmZmVyLCBTa1BhaW50KiBwYWludCwKICAgICAgICAgYm9vbCB1c2VPZmZzZXQpIHsKKyAgICAvLyBub3QgbWlzc2luZyBjYWxsIHRvIHF1aWNrUmVqZWN0L2RpcnR5TGF5ZXIsIGFsd2F5cyBkb25lIGF0IGEgaGlnaGVyIGxldmVsCisKICAgICBpZiAoIXZlcnRleEJ1ZmZlci5nZXRWZXJ0ZXhDb3VudCgpKSB7CiAgICAgICAgIC8vIG5vIHZlcnRpY2VzIHRvIGRyYXcKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwpAQCAtMjUzMiwxMCArMjU1NywxMCBAQAogICAgIHNldHVwRHJhd1NoYWRlcigpOwogICAgIHNldHVwRHJhd0JsZW5kaW5nKGlzQUEsIG1vZGUpOwogICAgIHNldHVwRHJhd1Byb2dyYW0oKTsKLSAgICBzZXR1cERyYXdNb2RlbFZpZXdJZGVudGl0eSh1c2VPZmZzZXQpOworICAgIHNldHVwRHJhd01vZGVsVmlldyhrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGUsIHVzZU9mZnNldCwgMCwgMCwgMCwgMCk7CiAgICAgc2V0dXBEcmF3Q29sb3JVbmlmb3JtcygpOwogICAgIHNldHVwRHJhd0NvbG9yRmlsdGVyVW5pZm9ybXMoKTsKLSAgICBzZXR1cERyYXdTaGFkZXJJZGVudGl0eVVuaWZvcm1zKCk7CisgICAgc2V0dXBEcmF3U2hhZGVyVW5pZm9ybXMoKTsKIAogICAgIHZvaWQqIHZlcnRpY2VzID0gdmVydGV4QnVmZmVyLmdldEJ1ZmZlcigpOwogICAgIGJvb2wgZm9yY2UgPSBtQ2FjaGVzLnVuYmluZE1lc2hCdWZmZXIoKTsKQEAgLTI1NzgsNyArMjYwMyw3IEBACiAKICAgICBpZiAoaGFzTGF5ZXIoKSkgewogICAgICAgICBTa1JlY3QgYm91bmRzID0gcGF0aC5nZXRCb3VuZHMoKTsKLSAgICAgICAgUGF0aFRlc3NlbGxhdG9yOjpleHBhbmRCb3VuZHNGb3JTdHJva2UoYm91bmRzLCBwYWludCwgZmFsc2UpOworICAgICAgICBQYXRoVGVzc2VsbGF0b3I6OmV4cGFuZEJvdW5kc0ZvclN0cm9rZShib3VuZHMsIHBhaW50KTsKICAgICAgICAgZGlydHlMYXllcihib3VuZHMuZkxlZnQsIGJvdW5kcy5mVG9wLCBib3VuZHMuZlJpZ2h0LCBib3VuZHMuZkJvdHRvbSwgY3VycmVudFRyYW5zZm9ybSgpKTsKICAgICB9CiAKQEAgLTI2MDUsNyArMjYzMCw4IEBACiAgICAgU2tSZWN0IGJvdW5kczsKICAgICBQYXRoVGVzc2VsbGF0b3I6OnRlc3NlbGxhdGVMaW5lcyhwb2ludHMsIGNvdW50LCBwYWludCwgbVNuYXBzaG90LT50cmFuc2Zvcm0sIGJvdW5kcywgYnVmZmVyKTsKIAotICAgIGlmIChxdWlja1JlamVjdChib3VuZHMuZkxlZnQsIGJvdW5kcy5mVG9wLCBib3VuZHMuZlJpZ2h0LCBib3VuZHMuZkJvdHRvbSkpIHsKKyAgICAvLyBjYW4ndCBwYXNzIHBhaW50LCBzaW5jZSBzdHlsZSB3b3VsZCBiZSBjaGVja2VkIGZvciBvdXRzZXQuIG91dHNldCBkb25lIGJ5IHRlc3NlbGxhdGlvbi4KKyAgICBpZiAocXVpY2tSZWplY3RTZXR1cFNjaXNzb3IoYm91bmRzLmZMZWZ0LCBib3VuZHMuZlRvcCwgYm91bmRzLmZSaWdodCwgYm91bmRzLmZCb3R0b20pKSB7CiAgICAgICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKICAgICB9CiAKQEAgLTI2MjQsNyArMjY1MCw4IEBACiAgICAgU2tSZWN0IGJvdW5kczsKICAgICBQYXRoVGVzc2VsbGF0b3I6OnRlc3NlbGxhdGVQb2ludHMocG9pbnRzLCBjb3VudCwgcGFpbnQsIG1TbmFwc2hvdC0+dHJhbnNmb3JtLCBib3VuZHMsIGJ1ZmZlcik7CiAKLSAgICBpZiAocXVpY2tSZWplY3QoYm91bmRzLmZMZWZ0LCBib3VuZHMuZlRvcCwgYm91bmRzLmZSaWdodCwgYm91bmRzLmZCb3R0b20pKSB7CisgICAgLy8gY2FuJ3QgcGFzcyBwYWludCwgc2luY2Ugc3R5bGUgd291bGQgYmUgY2hlY2tlZCBmb3Igb3V0c2V0LiBvdXRzZXQgZG9uZSBieSB0ZXNzZWxsYXRpb24uCisgICAgaWYgKHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKGJvdW5kcy5mTGVmdCwgYm91bmRzLmZUb3AsIGJvdW5kcy5mUmlnaHQsIGJvdW5kcy5mQm90dG9tKSkgewogICAgICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAgICAgfQogCkBAIC0yNjYxLDcgKzI2ODgsNyBAQAogCiBzdGF0dXNfdCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1JvdW5kUmVjdChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCiAgICAgICAgIGZsb2F0IHJ4LCBmbG9hdCByeSwgU2tQYWludCogcCkgewotICAgIGlmIChtU25hcHNob3QtPmlzSWdub3JlZCgpIHx8IHF1aWNrUmVqZWN0UHJlU3Ryb2tlKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgcCkgfHwKKyAgICBpZiAobVNuYXBzaG90LT5pc0lnbm9yZWQoKSB8fCBxdWlja1JlamVjdFNldHVwU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHApIHx8CiAgICAgICAgICAgICAocC0+Z2V0QWxwaGEoKSA9PSAwICYmIGdldFhmZXJtb2RlKHAtPmdldFhmZXJtb2RlKCkpICE9IFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKSkgewogICAgICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAgICAgfQpAQCAtMjY4Niw3ICsyNzEzLDcgQEAKIH0KIAogc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdDaXJjbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgcmFkaXVzLCBTa1BhaW50KiBwKSB7Ci0gICAgaWYgKG1TbmFwc2hvdC0+aXNJZ25vcmVkKCkgfHwgcXVpY2tSZWplY3RQcmVTdHJva2UoeCAtIHJhZGl1cywgeSAtIHJhZGl1cywKKyAgICBpZiAobVNuYXBzaG90LT5pc0lnbm9yZWQoKSB8fCBxdWlja1JlamVjdFNldHVwU2Npc3Nvcih4IC0gcmFkaXVzLCB5IC0gcmFkaXVzLAogICAgICAgICAgICAgeCArIHJhZGl1cywgeSArIHJhZGl1cywgcCkgfHwKICAgICAgICAgICAgIChwLT5nZXRBbHBoYSgpID09IDAgJiYgZ2V0WGZlcm1vZGUocC0+Z2V0WGZlcm1vZGUoKSkgIT0gU2tYZmVybW9kZTo6a0NsZWFyX01vZGUpKSB7CiAgICAgICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKQEAgLTI3MDgsNyArMjczNSw3IEBACiAKIHN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3T3ZhbChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCiAgICAgICAgIFNrUGFpbnQqIHApIHsKLSAgICBpZiAobVNuYXBzaG90LT5pc0lnbm9yZWQoKSB8fCBxdWlja1JlamVjdFByZVN0cm9rZShsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHApIHx8CisgICAgaWYgKG1TbmFwc2hvdC0+aXNJZ25vcmVkKCkgfHwgcXVpY2tSZWplY3RTZXR1cFNjaXNzb3IobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBwKSB8fAogICAgICAgICAgICAgKHAtPmdldEFscGhhKCkgPT0gMCAmJiBnZXRYZmVybW9kZShwLT5nZXRYZmVybW9kZSgpKSAhPSBTa1hmZXJtb2RlOjprQ2xlYXJfTW9kZSkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIH0KQEAgLTI3MzAsNyArMjc1Nyw3IEBACiAKIHN0YXR1c190IE9wZW5HTFJlbmRlcmVyOjpkcmF3QXJjKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKICAgICAgICAgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgc3dlZXBBbmdsZSwgYm9vbCB1c2VDZW50ZXIsIFNrUGFpbnQqIHApIHsKLSAgICBpZiAobVNuYXBzaG90LT5pc0lnbm9yZWQoKSB8fCBxdWlja1JlamVjdFByZVN0cm9rZShsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHApIHx8CisgICAgaWYgKG1TbmFwc2hvdC0+aXNJZ25vcmVkKCkgfHwgcXVpY2tSZWplY3RTZXR1cFNjaXNzb3IobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBwKSB8fAogICAgICAgICAgICAgKHAtPmdldEFscGhhKCkgPT0gMCAmJiBnZXRYZmVybW9kZShwLT5nZXRYZmVybW9kZSgpKSAhPSBTa1hmZXJtb2RlOjprQ2xlYXJfTW9kZSkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIH0KQEAgLTI3NjcsNyArMjc5NCw3IEBACiAjZGVmaW5lIFNrUGFpbnREZWZhdWx0c19NaXRlckxpbWl0IFNrSW50VG9TY2FsYXIoNCkKIAogc3RhdHVzX3QgT3BlbkdMUmVuZGVyZXI6OmRyYXdSZWN0KGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tQYWludCogcCkgewotICAgIGlmIChtU25hcHNob3QtPmlzSWdub3JlZCgpIHx8IHF1aWNrUmVqZWN0UHJlU3Ryb2tlKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgcCkgfHwKKyAgICBpZiAobVNuYXBzaG90LT5pc0lnbm9yZWQoKSB8fCBxdWlja1JlamVjdFNldHVwU2Npc3NvcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHApIHx8CiAgICAgICAgICAgICAocC0+Z2V0QWxwaGEoKSA9PSAwICYmIGdldFhmZXJtb2RlKHAtPmdldFhmZXJtb2RlKCkpICE9IFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKSkgewogICAgICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RvbmU7CiAgICAgfQpAQCAtMjgzMiw3ICsyODU5LDggQEAKICAgICBzZXR1cERyYXdTaGFkZXIoKTsKICAgICBzZXR1cERyYXdCbGVuZGluZyh0cnVlLCBtb2RlKTsKICAgICBzZXR1cERyYXdQcm9ncmFtKCk7Ci0gICAgc2V0dXBEcmF3TW9kZWxWaWV3KHN4LCBzeSwgc3ggKyBzaGFkb3ctPndpZHRoLCBzeSArIHNoYWRvdy0+aGVpZ2h0KTsKKyAgICBzZXR1cERyYXdNb2RlbFZpZXcoa01vZGVsVmlld01vZGVfVHJhbnNsYXRlQW5kU2NhbGUsIGZhbHNlLAorICAgICAgICAgICAgc3gsIHN5LCBzeCArIHNoYWRvdy0+d2lkdGgsIHN5ICsgc2hhZG93LT5oZWlnaHQpOwogICAgIHNldHVwRHJhd1RleHR1cmUoc2hhZG93LT5pZCk7CiAgICAgc2V0dXBEcmF3UHVyZUNvbG9yVW5pZm9ybXMoKTsKICAgICBzZXR1cERyYXdDb2xvckZpbHRlclVuaWZvcm1zKCk7CkBAIC0yOTMwLDcgKzI5NTgsNyBAQAogICAgICAgICAvLyBUaGUgY2hlY2tzIGZvciBjb3JuZXItY2FzZSBpZ25vcmFibGUgdGV4dCBhbmQgcXVpY2sgcmVqZWN0aW9uIGlzIG9ubHkgZG9uZSBmb3IgaW1tZWRpYXRlCiAgICAgICAgIC8vIGRyYXdpbmcgYXMgb3BzIGZyb20gRGVmZXJyZWREaXNwbGF5TGlzdCBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBmb3IgdGhlc2UKICAgICAgICAgaWYgKHRleHQgPT0gTlVMTCB8fCBjb3VudCA9PSAwIHx8IG1TbmFwc2hvdC0+aXNJZ25vcmVkKCkgfHwgY2FuU2tpcFRleHQocGFpbnQpIHx8Ci0gICAgICAgICAgICAgICAgcXVpY2tSZWplY3QoYm91bmRzKSkgeworICAgICAgICAgICAgICAgIHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKGJvdW5kcykpIHsKICAgICAgICAgICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRG9uZTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwMDQsNyArMzAzMiw3IEBACiAgICAgICAgIGRpcnR5TGF5ZXJVbmNoZWNrZWQobGF5ZXJCb3VuZHMsIGdldFJlZ2lvbigpKTsKICAgICB9CiAKLSAgICBkcmF3VGV4dERlY29yYXRpb25zKHRleHQsIGJ5dGVzQ291bnQsIHRvdGFsQWR2YW5jZSwgb2xkWCwgb2xkWSwgcGFpbnQpOworICAgIGRyYXdUZXh0RGVjb3JhdGlvbnModG90YWxBZHZhbmNlLCBvbGRYLCBvbGRZLCBwYWludCk7CiAKICAgICByZXR1cm4gRHJhd0dsSW5mbzo6a1N0YXR1c0RyZXc7CiB9CkBAIC0zMDc1LDggKzMxMDMsOCBAQAogICAgIH0KIAogICAgIGJvb2wgY2xpcFJlcXVpcmVkID0gZmFsc2U7Ci0gICAgY29uc3QgYm9vbCByZWplY3RlZCA9IHF1aWNrUmVqZWN0Tm9TY2lzc29yKHgsIHksCi0gICAgICAgICAgICB4ICsgbGF5ZXItPmxheWVyLmdldFdpZHRoKCksIHkgKyBsYXllci0+bGF5ZXIuZ2V0SGVpZ2h0KCksIGZhbHNlLCAmY2xpcFJlcXVpcmVkKTsKKyAgICBjb25zdCBib29sIHJlamVjdGVkID0gY2FsY3VsYXRlUXVpY2tSZWplY3RGb3JTY2lzc29yKHgsIHksCisgICAgICAgICAgICB4ICsgbGF5ZXItPmxheWVyLmdldFdpZHRoKCksIHkgKyBsYXllci0+bGF5ZXIuZ2V0SGVpZ2h0KCksICZjbGlwUmVxdWlyZWQsIGZhbHNlKTsKIAogICAgIGlmIChyZWplY3RlZCkgewogICAgICAgICBpZiAodHJhbnNmb3JtICYmICF0cmFuc2Zvcm0tPmlzSWRlbnRpdHkoKSkgewpAQCAtMzExMywxMSArMzE0MSwxMSBAQAogICAgICAgICAgICAgICAgIGludCB0eSA9IChpbnQpIGZsb29yZih5ICsgY3VycmVudFRyYW5zZm9ybSgpLmdldFRyYW5zbGF0ZVkoKSArIDAuNWYpOwogCiAgICAgICAgICAgICAgICAgbGF5ZXItPnNldEZpbHRlcihHTF9ORUFSRVNUKTsKLSAgICAgICAgICAgICAgICBzZXR1cERyYXdNb2RlbFZpZXdUcmFuc2xhdGUodHgsIHR5LAorICAgICAgICAgICAgICAgIHNldHVwRHJhd01vZGVsVmlldyhrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGUsIGZhbHNlLCB0eCwgdHksCiAgICAgICAgICAgICAgICAgICAgICAgICB0eCArIGxheWVyLT5sYXllci5nZXRXaWR0aCgpLCB0eSArIGxheWVyLT5sYXllci5nZXRIZWlnaHQoKSwgdHJ1ZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGxheWVyLT5zZXRGaWx0ZXIoR0xfTElORUFSKTsKLSAgICAgICAgICAgICAgICBzZXR1cERyYXdNb2RlbFZpZXdUcmFuc2xhdGUoeCwgeSwKKyAgICAgICAgICAgICAgICBzZXR1cERyYXdNb2RlbFZpZXcoa01vZGVsVmlld01vZGVfVHJhbnNsYXRlLCBmYWxzZSwgeCwgeSwKICAgICAgICAgICAgICAgICAgICAgICAgIHggKyBsYXllci0+bGF5ZXIuZ2V0V2lkdGgoKSwgeSArIGxheWVyLT5sYXllci5nZXRIZWlnaHQoKSk7CiAgICAgICAgICAgICB9CiAKQEAgLTMxMjcsNyArMzE1NSw3IEBACiAgICAgICAgICAgICB3aGlsZSAoZWxlbWVudHNDb3VudCA+IDApIHsKICAgICAgICAgICAgICAgICBHTHNpemVpIGRyYXdDb3VudCA9IG1pbihlbGVtZW50c0NvdW50LCAoR0xzaXplaSkgZ01heE51bWJlck9mUXVhZHMgKiA2KTsKIAotICAgICAgICAgICAgICAgIHNldHVwRHJhd01lc2hJbmRpY2VzKCZtZXNoWzBdLnBvc2l0aW9uWzBdLCAmbWVzaFswXS50ZXh0dXJlWzBdKTsKKyAgICAgICAgICAgICAgICBzZXR1cERyYXdNZXNoSW5kaWNlcygmbWVzaFswXS54LCAmbWVzaFswXS51KTsKICAgICAgICAgICAgICAgICBEUkFXX0RPVUJMRV9TVEVOQ0lMX0lGKCFsYXllci0+aGFzRHJhd25TaW5jZVVwZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGdsRHJhd0VsZW1lbnRzKEdMX1RSSUFOR0xFUywgZHJhd0NvdW50LCBHTF9VTlNJR05FRF9TSE9SVCwgTlVMTCkpOwogCkBAIC0zMTM4LDcgKzMxNjYsNyBAQAogICAgICAgICAgICAgfQogCiAjaWYgREVCVUdfTEFZRVJTX0FTX1JFR0lPTlMKLSAgICAgICAgICAgIGRyYXdSZWdpb25SZWN0cyhsYXllci0+cmVnaW9uKTsKKyAgICAgICAgICAgIGRyYXdSZWdpb25SZWN0c0RlYnVnKGxheWVyLT5yZWdpb24pOwogI2VuZGlmCiAgICAgICAgIH0KIApAQCAtMzI0OCw3ICszMjc2LDcgQEAKIAogdm9pZCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1BhdGhUZXh0dXJlKGNvbnN0IFBhdGhUZXh0dXJlKiB0ZXh0dXJlLAogICAgICAgICBmbG9hdCB4LCBmbG9hdCB5LCBTa1BhaW50KiBwYWludCkgewotICAgIGlmIChxdWlja1JlamVjdCh4LCB5LCB4ICsgdGV4dHVyZS0+d2lkdGgsIHkgKyB0ZXh0dXJlLT5oZWlnaHQpKSB7CisgICAgaWYgKHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKHgsIHksIHggKyB0ZXh0dXJlLT53aWR0aCwgeSArIHRleHR1cmUtPmhlaWdodCkpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzI2Myw3ICszMjkxLDggQEAKICAgICBzZXR1cERyYXdTaGFkZXIoKTsKICAgICBzZXR1cERyYXdCbGVuZGluZyh0cnVlLCBtb2RlKTsKICAgICBzZXR1cERyYXdQcm9ncmFtKCk7Ci0gICAgc2V0dXBEcmF3TW9kZWxWaWV3KHgsIHksIHggKyB0ZXh0dXJlLT53aWR0aCwgeSArIHRleHR1cmUtPmhlaWdodCk7CisgICAgc2V0dXBEcmF3TW9kZWxWaWV3KGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZUFuZFNjYWxlLCBmYWxzZSwKKyAgICAgICAgICAgIHgsIHksIHggKyB0ZXh0dXJlLT53aWR0aCwgeSArIHRleHR1cmUtPmhlaWdodCk7CiAgICAgc2V0dXBEcmF3VGV4dHVyZSh0ZXh0dXJlLT5pZCk7CiAgICAgc2V0dXBEcmF3UHVyZUNvbG9yVW5pZm9ybXMoKTsKICAgICBzZXR1cERyYXdDb2xvckZpbHRlclVuaWZvcm1zKCk7CkBAIC0zMjc4LDggKzMzMDcsNyBAQAogI2RlZmluZSBrU3RkVW5kZXJsaW5lX09mZnNldCAgICAoMS4wZiAvIDkuMGYpCiAjZGVmaW5lIGtTdGRVbmRlcmxpbmVfVGhpY2tuZXNzICgxLjBmIC8gMTguMGYpCiAKLXZvaWQgT3BlbkdMUmVuZGVyZXI6OmRyYXdUZXh0RGVjb3JhdGlvbnMoY29uc3QgY2hhciogdGV4dCwgaW50IGJ5dGVzQ291bnQsIGZsb2F0IHVuZGVybGluZVdpZHRoLAotICAgICAgICBmbG9hdCB4LCBmbG9hdCB5LCBTa1BhaW50KiBwYWludCkgewordm9pZCBPcGVuR0xSZW5kZXJlcjo6ZHJhd1RleHREZWNvcmF0aW9ucyhmbG9hdCB1bmRlcmxpbmVXaWR0aCwgZmxvYXQgeCwgZmxvYXQgeSwgU2tQYWludCogcGFpbnQpIHsKICAgICAvLyBIYW5kbGUgdW5kZXJsaW5lIGFuZCBzdHJpa2UtdGhyb3VnaAogICAgIHVpbnQzMl90IGZsYWdzID0gcGFpbnQtPmdldEZsYWdzKCk7CiAgICAgaWYgKGZsYWdzICYgKFNrUGFpbnQ6OmtVbmRlcmxpbmVUZXh0X0ZsYWcgfCBTa1BhaW50OjprU3RyaWtlVGhydVRleHRfRmxhZykpIHsKQEAgLTMzNjksNyArMzM5Nyw3IEBACiAgICAgICAgIGJvdHRvbSA9IGZtYXhmKGJvdHRvbSwgYik7CiAgICAgfQogCi0gICAgaWYgKGNsaXAgJiYgcXVpY2tSZWplY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSkgeworICAgIGlmIChjbGlwICYmIHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkpIHsKICAgICAgICAgcmV0dXJuIERyYXdHbEluZm86OmtTdGF0dXNEb25lOwogICAgIH0KIApAQCAtMzM4MSw3ICszNDA5LDggQEAKICAgICBzZXR1cERyYXdCbGVuZGluZyhtb2RlKTsKICAgICBzZXR1cERyYXdQcm9ncmFtKCk7CiAgICAgc2V0dXBEcmF3RGlydHlSZWdpb25zRGlzYWJsZWQoKTsKLSAgICBzZXR1cERyYXdNb2RlbFZpZXcoMC4wZiwgMC4wZiwgMS4wZiwgMS4wZiwgaWdub3JlVHJhbnNmb3JtLCB0cnVlKTsKKyAgICBzZXR1cERyYXdNb2RlbFZpZXcoa01vZGVsVmlld01vZGVfVHJhbnNsYXRlLCBmYWxzZSwKKyAgICAgICAgICAgIDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYsIGlnbm9yZVRyYW5zZm9ybSk7CiAgICAgc2V0dXBEcmF3Q29sb3JVbmlmb3JtcygpOwogICAgIHNldHVwRHJhd1NoYWRlclVuaWZvcm1zKCk7CiAgICAgc2V0dXBEcmF3Q29sb3JGaWx0ZXJVbmlmb3JtcygpOwpAQCAtMzM5MCw3ICszNDE5LDcgQEAKICAgICAgICAgZGlydHlMYXllcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGN1cnJlbnRUcmFuc2Zvcm0oKSk7CiAgICAgfQogCi0gICAgZHJhd0luZGV4ZWRRdWFkcygmbWVzaFswXSwgY291bnQgLyA0KTsKKyAgICBpc3N1ZUluZGV4ZWRRdWFkRHJhdygmbWVzaFswXSwgY291bnQgLyA0KTsKIAogICAgIHJldHVybiBEcmF3R2xJbmZvOjprU3RhdHVzRHJldzsKIH0KQEAgLTM0MDksNyArMzQzOCw4IEBACiAgICAgc2V0dXBEcmF3Q29sb3JGaWx0ZXIoKTsKICAgICBzZXR1cERyYXdCbGVuZGluZyhtb2RlKTsKICAgICBzZXR1cERyYXdQcm9ncmFtKCk7Ci0gICAgc2V0dXBEcmF3TW9kZWxWaWV3KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgaWdub3JlVHJhbnNmb3JtKTsKKyAgICBzZXR1cERyYXdNb2RlbFZpZXcoa01vZGVsVmlld01vZGVfVHJhbnNsYXRlQW5kU2NhbGUsIGZhbHNlLAorICAgICAgICAgICAgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBpZ25vcmVUcmFuc2Zvcm0pOwogICAgIHNldHVwRHJhd0NvbG9yVW5pZm9ybXMoKTsKICAgICBzZXR1cERyYXdTaGFkZXJVbmlmb3JtcyhpZ25vcmVUcmFuc2Zvcm0pOwogICAgIHNldHVwRHJhd0NvbG9yRmlsdGVyVW5pZm9ybXMoKTsKQEAgLTM0MzAsOCArMzQ2MCw4IEBACiAgICAgR0x2b2lkKiB0ZXhDb29yZHMgPSAoR0x2b2lkKikgZ01lc2hUZXh0dXJlT2Zmc2V0OwogCiAgICAgaWYgKHRleHR1cmUtPnV2TWFwcGVyKSB7Ci0gICAgICAgIHZlcnRpY2VzID0gJm1NZXNoVmVydGljZXNbMF0ucG9zaXRpb25bMF07Ci0gICAgICAgIHRleENvb3JkcyA9ICZtTWVzaFZlcnRpY2VzWzBdLnRleHR1cmVbMF07CisgICAgICAgIHZlcnRpY2VzID0gJm1NZXNoVmVydGljZXNbMF0ueDsKKyAgICAgICAgdGV4Q29vcmRzID0gJm1NZXNoVmVydGljZXNbMF0udTsKIAogICAgICAgICBSZWN0IHV2cygwLjBmLCAwLjBmLCAxLjBmLCAxLjBmKTsKICAgICAgICAgdGV4dHVyZS0+dXZNYXBwZXItPm1hcCh1dnMpOwpAQCAtMzQ2Nyw3ICszNDk3LDggQEAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OmRyYXdUZXh0dXJlTWVzaChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCiAgICAgICAgIEdMdWludCB0ZXh0dXJlLCBmbG9hdCBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSBtb2RlLCBib29sIGJsZW5kLAogICAgICAgICBHTHZvaWQqIHZlcnRpY2VzLCBHTHZvaWQqIHRleENvb3JkcywgR0xlbnVtIGRyYXdNb2RlLCBHTHNpemVpIGVsZW1lbnRzQ291bnQsCi0gICAgICAgIGJvb2wgc3dhcFNyY0RzdCwgYm9vbCBpZ25vcmVUcmFuc2Zvcm0sIEdMdWludCB2Ym8sIGJvb2wgaWdub3JlU2NhbGUsIGJvb2wgZGlydHkpIHsKKyAgICAgICAgYm9vbCBzd2FwU3JjRHN0LCBib29sIGlnbm9yZVRyYW5zZm9ybSwgR0x1aW50IHZibywKKyAgICAgICAgTW9kZWxWaWV3TW9kZSBtb2RlbFZpZXdNb2RlLCBib29sIGRpcnR5KSB7CiAKICAgICBzZXR1cERyYXcoKTsKICAgICBzZXR1cERyYXdXaXRoVGV4dHVyZSgpOwpAQCAtMzQ3NiwxMSArMzUwNyw3IEBACiAgICAgc2V0dXBEcmF3QmxlbmRpbmcoYmxlbmQsIG1vZGUsIHN3YXBTcmNEc3QpOwogICAgIHNldHVwRHJhd1Byb2dyYW0oKTsKICAgICBpZiAoIWRpcnR5KSBzZXR1cERyYXdEaXJ0eVJlZ2lvbnNEaXNhYmxlZCgpOwotICAgIGlmICghaWdub3JlU2NhbGUpIHsKLSAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgaWdub3JlVHJhbnNmb3JtKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzZXR1cERyYXdNb2RlbFZpZXdUcmFuc2xhdGUobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBpZ25vcmVUcmFuc2Zvcm0pOwotICAgIH0KKyAgICBzZXR1cERyYXdNb2RlbFZpZXcobW9kZWxWaWV3TW9kZSwgZmFsc2UsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgaWdub3JlVHJhbnNmb3JtKTsKICAgICBzZXR1cERyYXdUZXh0dXJlKHRleHR1cmUpOwogICAgIHNldHVwRHJhd1B1cmVDb2xvclVuaWZvcm1zKCk7CiAgICAgc2V0dXBEcmF3Q29sb3JGaWx0ZXJVbmlmb3JtcygpOwpAQCAtMzQ5Miw3ICszNTE5LDggQEAKIHZvaWQgT3BlbkdMUmVuZGVyZXI6OmRyYXdJbmRleGVkVGV4dHVyZU1lc2goZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAogICAgICAgICBHTHVpbnQgdGV4dHVyZSwgZmxvYXQgYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwgYm9vbCBibGVuZCwKICAgICAgICAgR0x2b2lkKiB2ZXJ0aWNlcywgR0x2b2lkKiB0ZXhDb29yZHMsIEdMZW51bSBkcmF3TW9kZSwgR0xzaXplaSBlbGVtZW50c0NvdW50LAotICAgICAgICBib29sIHN3YXBTcmNEc3QsIGJvb2wgaWdub3JlVHJhbnNmb3JtLCBHTHVpbnQgdmJvLCBib29sIGlnbm9yZVNjYWxlLCBib29sIGRpcnR5KSB7CisgICAgICAgIGJvb2wgc3dhcFNyY0RzdCwgYm9vbCBpZ25vcmVUcmFuc2Zvcm0sIEdMdWludCB2Ym8sCisgICAgICAgIE1vZGVsVmlld01vZGUgbW9kZWxWaWV3TW9kZSwgYm9vbCBkaXJ0eSkgewogCiAgICAgc2V0dXBEcmF3KCk7CiAgICAgc2V0dXBEcmF3V2l0aFRleHR1cmUoKTsKQEAgLTM1MDEsMTEgKzM1MjksNyBAQAogICAgIHNldHVwRHJhd0JsZW5kaW5nKGJsZW5kLCBtb2RlLCBzd2FwU3JjRHN0KTsKICAgICBzZXR1cERyYXdQcm9ncmFtKCk7CiAgICAgaWYgKCFkaXJ0eSkgc2V0dXBEcmF3RGlydHlSZWdpb25zRGlzYWJsZWQoKTsKLSAgICBpZiAoIWlnbm9yZVNjYWxlKSB7Ci0gICAgICAgIHNldHVwRHJhd01vZGVsVmlldyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGlnbm9yZVRyYW5zZm9ybSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3VHJhbnNsYXRlKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgaWdub3JlVHJhbnNmb3JtKTsKLSAgICB9CisgICAgc2V0dXBEcmF3TW9kZWxWaWV3KG1vZGVsVmlld01vZGUsIGZhbHNlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGlnbm9yZVRyYW5zZm9ybSk7CiAgICAgc2V0dXBEcmF3VGV4dHVyZSh0ZXh0dXJlKTsKICAgICBzZXR1cERyYXdQdXJlQ29sb3JVbmlmb3JtcygpOwogICAgIHNldHVwRHJhd0NvbG9yRmlsdGVyVW5pZm9ybXMoKTsKQEAgLTM1MTcsNyArMzU0MSw3IEBACiB2b2lkIE9wZW5HTFJlbmRlcmVyOjpkcmF3QWxwaGE4VGV4dHVyZU1lc2goZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAogICAgICAgICBHTHVpbnQgdGV4dHVyZSwgYm9vbCBoYXNDb2xvciwgaW50IGNvbG9yLCBpbnQgYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwKICAgICAgICAgR0x2b2lkKiB2ZXJ0aWNlcywgR0x2b2lkKiB0ZXhDb29yZHMsIEdMZW51bSBkcmF3TW9kZSwgR0xzaXplaSBlbGVtZW50c0NvdW50LAotICAgICAgICBib29sIGlnbm9yZVRyYW5zZm9ybSwgYm9vbCBpZ25vcmVTY2FsZSwgYm9vbCBkaXJ0eSkgeworICAgICAgICBib29sIGlnbm9yZVRyYW5zZm9ybSwgTW9kZWxWaWV3TW9kZSBtb2RlbFZpZXdNb2RlLCBib29sIGRpcnR5KSB7CiAKICAgICBzZXR1cERyYXcoKTsKICAgICBzZXR1cERyYXdXaXRoVGV4dHVyZSh0cnVlKTsKQEAgLTM1MjksMTUgKzM1NTMsMTEgQEAKICAgICBzZXR1cERyYXdCbGVuZGluZyh0cnVlLCBtb2RlKTsKICAgICBzZXR1cERyYXdQcm9ncmFtKCk7CiAgICAgaWYgKCFkaXJ0eSkgc2V0dXBEcmF3RGlydHlSZWdpb25zRGlzYWJsZWQoKTsKLSAgICBpZiAoIWlnbm9yZVNjYWxlKSB7Ci0gICAgICAgIHNldHVwRHJhd01vZGVsVmlldyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGlnbm9yZVRyYW5zZm9ybSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2V0dXBEcmF3TW9kZWxWaWV3VHJhbnNsYXRlKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgaWdub3JlVHJhbnNmb3JtKTsKLSAgICB9CisgICAgc2V0dXBEcmF3TW9kZWxWaWV3KG1vZGVsVmlld01vZGUsIGZhbHNlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGlnbm9yZVRyYW5zZm9ybSk7CiAgICAgc2V0dXBEcmF3VGV4dHVyZSh0ZXh0dXJlKTsKICAgICBzZXR1cERyYXdQdXJlQ29sb3JVbmlmb3JtcygpOwogICAgIHNldHVwRHJhd0NvbG9yRmlsdGVyVW5pZm9ybXMoKTsKLSAgICBzZXR1cERyYXdTaGFkZXJVbmlmb3JtcygpOworICAgIHNldHVwRHJhd1NoYWRlclVuaWZvcm1zKGlnbm9yZVRyYW5zZm9ybSk7CiAgICAgc2V0dXBEcmF3TWVzaCh2ZXJ0aWNlcywgdGV4Q29vcmRzKTsKIAogICAgIGdsRHJhd0FycmF5cyhkcmF3TW9kZSwgMCwgZWxlbWVudHNDb3VudCk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvT3BlbkdMUmVuZGVyZXIuaCBiL2xpYnMvaHd1aS9PcGVuR0xSZW5kZXJlci5oCmluZGV4IDlhZmI3YWQuLmZmMzdlMTggMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9PcGVuR0xSZW5kZXJlci5oCisrKyBiL2xpYnMvaHd1aS9PcGVuR0xSZW5kZXJlci5oCkBAIC05OCw2ICs5OCwyNCBAQAogICAgIGtDbGlwU2lkZV9Db25zZXJ2YXRpdmVGdWxsID0gMHgxRgogfTsKIAorLyoqCisgKiBEZWZpbmVzIGFkZGl0aW9uYWwgdHJhbnNmb3JtYXRpb24gdGhhdCBzaG91bGQgYmUgYXBwbGllZCBieSB0aGUgbW9kZWwgdmlldyBtYXRyaXgsIGJleW9uZCB0aGF0IG9mCisgKiB0aGUgY3VycmVudFRyYW5zZm9ybSgpCisgKi8KK2VudW0gTW9kZWxWaWV3TW9kZSB7CisgICAgLyoqCisgICAgICogVXNlZCB3aGVuIHRoZSBtb2RlbCB2aWV3IHNob3VsZCBzaW1wbHkgdHJhbnNsYXRlIGdlb21ldHJ5IHBhc3NlZCB0byB0aGUgc2hhZGVyLiBUaGUgcmVzdWx0aW5nCisgICAgICogbWF0cml4IHdpbGwgYmUgYSBzaW1wbGUgdHJhbnNsYXRpb24uCisgICAgICovCisgICAga01vZGVsVmlld01vZGVfVHJhbnNsYXRlID0gMCwKKworICAgIC8qKgorICAgICAqIFVzZWQgd2hlbiB0aGUgbW9kZWwgdmlldyBzaG91bGQgdHJhbnNsYXRlIGFuZCBzY2FsZSBnZW9tZXRyeS4gVGhlIHJlc3VsdGluZyBtYXRyaXggd2lsbCBiZSBhCisgICAgICogdHJhbnNsYXRpb24gKyBzY2FsZS4gVGhpcyBpcyBmcmVxdWVudGx5IHVzZWQgdG9nZXRoZXIgd2l0aCBWQk8gMCwgdGhlICgwLDAsMSwxKSByZWN0LgorICAgICAqLworICAgIGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZUFuZFNjYWxlID0gMSwKK307CisKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIFJlbmRlcmVyCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC0yNTAsMzAgKzI2OCw4IEBACiAKICAgICBBTkRST0lEX0FQSSBjb25zdCBSZWN0JiBnZXRDbGlwQm91bmRzKCk7CiAKLSAgICAvKioKLSAgICAgKiBQZXJmb3JtcyBhIHF1aWNrIHJlamVjdCBidXQgYWRqdXN0IHRoZSBib3VuZHMgdG8gYWNjb3VudCBmb3Igc3Ryb2tlIHdpZHRoIGlmIG5lY2Vzc2FyeSwKLSAgICAgKiBhbmQgaGFuZGxpbmcgc25hcE91dCBmb3IgQUEgZ2VvbWV0cnkuCi0gICAgICovCi0gICAgYm9vbCBxdWlja1JlamVjdFByZVN0cm9rZShmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIFNrUGFpbnQqIHBhaW50KTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgZmFsc2UgYW5kIHNldHMgc2Npc3NvciBiYXNlZCB1cG9uIGJvdW5kcyBpZiBkcmF3aW5nIHdvbid0IGJlIGNsaXBwZWQgb3V0Ci0gICAgICovCi0gICAgYm9vbCBxdWlja1JlamVjdChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGJvb2wgc25hcE91dCA9IGZhbHNlKTsKLSAgICBib29sIHF1aWNrUmVqZWN0KGNvbnN0IFJlY3QmIGJvdW5kcykgewotICAgICAgICByZXR1cm4gcXVpY2tSZWplY3QoYm91bmRzLmxlZnQsIGJvdW5kcy50b3AsIGJvdW5kcy5yaWdodCwgYm91bmRzLmJvdHRvbSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2FtZSBhcyBxdWlja1JlamVjdCwgd2l0aG91dCB0aGUgc2Npc3NvciwgaW5zdGVhZCByZXR1cm5pbmcgY2xpcFJlcXVpcmVkIHRocm91Z2ggcG9pbnRlci4KLSAgICAgKiBjbGlwUmVxdWlyZWQgd2lsbCBiZSBvbmx5IHNldCBpZiBub3QgcmVqZWN0ZWQKLSAgICAgKi8KLSAgICBBTkRST0lEX0FQSSBib29sIHF1aWNrUmVqZWN0Tm9TY2lzc29yKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgICAgIGJvb2wgc25hcE91dCA9IGZhbHNlLCBib29sKiBjbGlwUmVxdWlyZWQgPSBOVUxMKTsKLSAgICBib29sIHF1aWNrUmVqZWN0Tm9TY2lzc29yKGNvbnN0IFJlY3QmIGJvdW5kcywgYm9vbCogY2xpcFJlcXVpcmVkID0gTlVMTCkgewotICAgICAgICByZXR1cm4gcXVpY2tSZWplY3ROb1NjaXNzb3IoYm91bmRzLmxlZnQsIGJvdW5kcy50b3AsIGJvdW5kcy5yaWdodCwgYm91bmRzLmJvdHRvbSwKLSAgICAgICAgICAgICAgICBjbGlwUmVxdWlyZWQpOwotICAgIH0KKyAgICBBTkRST0lEX0FQSSBib29sIHF1aWNrUmVqZWN0Q29uc2VydmF0aXZlKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKKyAgICAgICAgICAgIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20pIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGNsaXBSZWN0KGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tSZWdpb246Ok9wIG9wKTsKICAgICB2aXJ0dWFsIGJvb2wgY2xpcFBhdGgoU2tQYXRoKiBwYXRoLCBTa1JlZ2lvbjo6T3Agb3ApOwpAQCAtMjgxLDcgKzI3Nyw2IEBACiAgICAgdmlydHVhbCBSZWN0KiBnZXRDbGlwUmVjdCgpOwogCiAgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3RGlzcGxheUxpc3QoRGlzcGxheUxpc3QqIGRpc3BsYXlMaXN0LCBSZWN0JiBkaXJ0eSwgaW50MzJfdCByZXBsYXlGbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkIG91dHB1dERpc3BsYXlMaXN0KERpc3BsYXlMaXN0KiBkaXNwbGF5TGlzdCk7CiAgICAgdmlydHVhbCBzdGF0dXNfdCBkcmF3TGF5ZXIoTGF5ZXIqIGxheWVyLCBmbG9hdCB4LCBmbG9hdCB5KTsKICAgICB2aXJ0dWFsIHN0YXR1c190IGRyYXdCaXRtYXAoU2tCaXRtYXAqIGJpdG1hcCwgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBTa1BhaW50KiBwYWludCk7CiAgICAgc3RhdHVzX3QgZHJhd0JpdG1hcHMoU2tCaXRtYXAqIGJpdG1hcCwgQXNzZXRBdGxhczo6RW50cnkqIGVudHJ5LCBpbnQgYml0bWFwQ291bnQsCkBAIC00NzcsNiArNDcyLDE2IEBACiAgICAgICovCiAgICAgdm9pZCBhdHRhY2hTdGVuY2lsQnVmZmVyVG9MYXllcihMYXllciogbGF5ZXIpOwogCisgICAgYm9vbCBjYWxjdWxhdGVRdWlja1JlamVjdEZvclNjaXNzb3IoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAorICAgICAgICAgICAgYm9vbCogY2xpcFJlcXVpcmVkLCBib29sIHNuYXBPdXQpIGNvbnN0OworCisgICAgYm9vbCBxdWlja1JlamVjdFNldHVwU2Npc3NvcihmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCisgICAgICAgICAgICBTa1BhaW50KiBwYWludCA9IE5VTEwpOworICAgIGJvb2wgcXVpY2tSZWplY3RTZXR1cFNjaXNzb3IoY29uc3QgUmVjdCYgYm91bmRzLCBTa1BhaW50KiBwYWludCA9IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHF1aWNrUmVqZWN0U2V0dXBTY2lzc29yKGJvdW5kcy5sZWZ0LCBib3VuZHMudG9wLAorICAgICAgICAgICAgICAgIGJvdW5kcy5yaWdodCwgYm91bmRzLmJvdHRvbSwgcGFpbnQpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENvbXBvc2UgdGhlIGxheWVyIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgc25hcHNob3Qgd2l0aCB0aGUgbGF5ZXIKICAgICAgKiBkZWZpbmVkIGJ5IHRoZSBwcmV2aW91cyBzbmFwc2hvdC4KQEAgLTY1NCwxMiArNjU5LDExIEBACiAgICAgICogQHBhcmFtIGFscGhhIFRoZSB0cmFuc2x1Y2VuY3kgb2YgdGhlIGxheWVyCiAgICAgICogQHBhcmFtIG1vZGUgVGhlIGJsZW5kaW5nIG1vZGUgb2YgdGhlIGxheWVyCiAgICAgICogQHBhcmFtIGZsYWdzIFRoZSBsYXllciBzYXZlIGZsYWdzCi0gICAgICogQHBhcmFtIHByZXZpb3VzRmJvIFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGxheWVyIHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICovCiAgICAgYm9vbCBjcmVhdGVMYXllcihmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sCi0gICAgICAgICAgICBpbnQgYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwgaW50IGZsYWdzLCBHTHVpbnQgcHJldmlvdXNGYm8pOworICAgICAgICAgICAgaW50IGFscGhhLCBTa1hmZXJtb2RlOjpNb2RlIG1vZGUsIGludCBmbGFncyk7CiAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IGxheWVyIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNuYXBzaG90IGFzIGFuIEZCTy4KQEAgLTY2Nyw5ICs2NzEsOCBAQAogICAgICAqIEBwYXJhbSBsYXllciBUaGUgbGF5ZXIgdG8gc3RvcmUgYXMgYW4gRkJPCiAgICAgICogQHBhcmFtIHNuYXBzaG90IFRoZSBzbmFwc2hvdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5ldyBsYXllcgogICAgICAqIEBwYXJhbSBib3VuZHMgVGhlIGJvdW5kcyBvZiB0aGUgbGF5ZXIKLSAgICAgKiBAcGFyYW0gcHJldmlvdXNGYm8gVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIKICAgICAgKi8KLSAgICBib29sIGNyZWF0ZUZib0xheWVyKExheWVyKiBsYXllciwgUmVjdCYgYm91bmRzLCBSZWN0JiBjbGlwLCBHTHVpbnQgcHJldmlvdXNGYm8pOworICAgIGJvb2wgY3JlYXRlRmJvTGF5ZXIoTGF5ZXIqIGxheWVyLCBSZWN0JiBib3VuZHMsIFJlY3QmIGNsaXApOwogCiAgICAgLyoqCiAgICAgICogQ29tcG9zZSB0aGUgc3BlY2lmaWVkIGxheWVyIGFzIGEgcmVnaW9uLgpAQCAtODMxLDMyICs4MzQsMzMgQEAKICAgICAgKiBAcGFyYW0gc3dhcFNyY0RzdCBXaGV0aGVyIG9yIG5vdCB0aGUgc3JjIGFuZCBkc3QgYmxlbmRpbmcgb3BlcmF0aW9ucyBzaG91bGQgYmUgc3dhcHBlZAogICAgICAqIEBwYXJhbSBpZ25vcmVUcmFuc2Zvcm0gVHJ1ZSBpZiB0aGUgY3VycmVudCB0cmFuc2Zvcm0gc2hvdWxkIGJlIGlnbm9yZWQKICAgICAgKiBAcGFyYW0gdmJvIFRoZSBWQk8gdXNlZCB0byBkcmF3IHRoZSBtZXNoCi0gICAgICogQHBhcmFtIGlnbm9yZVNjYWxlIFRydWUgaWYgdGhlIG1vZGVsIHZpZXcgbWF0cml4IHNob3VsZCBub3QgYmUgc2NhbGVkCisgICAgICogQHBhcmFtIG1vZGVsVmlld01vZGUgRGVmaW5lcyB3aGV0aGVyIHRoZSBtb2RlbCB2aWV3IG1hdHJpeCBzaG91bGQgYmUgc2NhbGVkCiAgICAgICogQHBhcmFtIGRpcnR5IFRydWUgaWYgY2FsbGluZyB0aGlzIG1ldGhvZCBzaG91bGQgZGlydHkgdGhlIGN1cnJlbnQgbGF5ZXIKICAgICAgKi8KICAgICB2b2lkIGRyYXdUZXh0dXJlTWVzaChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIEdMdWludCB0ZXh0dXJlLAogICAgICAgICAgICAgZmxvYXQgYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwgYm9vbCBibGVuZCwKICAgICAgICAgICAgIEdMdm9pZCogdmVydGljZXMsIEdMdm9pZCogdGV4Q29vcmRzLCBHTGVudW0gZHJhd01vZGUsIEdMc2l6ZWkgZWxlbWVudHNDb3VudCwKICAgICAgICAgICAgIGJvb2wgc3dhcFNyY0RzdCA9IGZhbHNlLCBib29sIGlnbm9yZVRyYW5zZm9ybSA9IGZhbHNlLCBHTHVpbnQgdmJvID0gMCwKLSAgICAgICAgICAgIGJvb2wgaWdub3JlU2NhbGUgPSBmYWxzZSwgYm9vbCBkaXJ0eSA9IHRydWUpOworICAgICAgICAgICAgTW9kZWxWaWV3TW9kZSBtb2RlbFZpZXdNb2RlID0ga01vZGVsVmlld01vZGVfVHJhbnNsYXRlQW5kU2NhbGUsIGJvb2wgZGlydHkgPSB0cnVlKTsKIAogICAgIHZvaWQgZHJhd0luZGV4ZWRUZXh0dXJlTWVzaChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIEdMdWludCB0ZXh0dXJlLAogICAgICAgICAgICAgZmxvYXQgYWxwaGEsIFNrWGZlcm1vZGU6Ok1vZGUgbW9kZSwgYm9vbCBibGVuZCwKICAgICAgICAgICAgIEdMdm9pZCogdmVydGljZXMsIEdMdm9pZCogdGV4Q29vcmRzLCBHTGVudW0gZHJhd01vZGUsIEdMc2l6ZWkgZWxlbWVudHNDb3VudCwKICAgICAgICAgICAgIGJvb2wgc3dhcFNyY0RzdCA9IGZhbHNlLCBib29sIGlnbm9yZVRyYW5zZm9ybSA9IGZhbHNlLCBHTHVpbnQgdmJvID0gMCwKLSAgICAgICAgICAgIGJvb2wgaWdub3JlU2NhbGUgPSBmYWxzZSwgYm9vbCBkaXJ0eSA9IHRydWUpOworICAgICAgICAgICAgTW9kZWxWaWV3TW9kZSBtb2RlbFZpZXdNb2RlID0ga01vZGVsVmlld01vZGVfVHJhbnNsYXRlQW5kU2NhbGUsIGJvb2wgZGlydHkgPSB0cnVlKTsKIAogICAgIHZvaWQgZHJhd0FscGhhOFRleHR1cmVNZXNoKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKICAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlLCBib29sIGhhc0NvbG9yLCBpbnQgY29sb3IsIGludCBhbHBoYSwgU2tYZmVybW9kZTo6TW9kZSBtb2RlLAogICAgICAgICAgICAgR0x2b2lkKiB2ZXJ0aWNlcywgR0x2b2lkKiB0ZXhDb29yZHMsIEdMZW51bSBkcmF3TW9kZSwgR0xzaXplaSBlbGVtZW50c0NvdW50LAotICAgICAgICAgICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm0sIGJvb2wgaWdub3JlU2NhbGUgPSBmYWxzZSwgYm9vbCBkaXJ0eSA9IHRydWUpOworICAgICAgICAgICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm0sIE1vZGVsVmlld01vZGUgbW9kZWxWaWV3TW9kZSA9IGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZUFuZFNjYWxlLAorICAgICAgICAgICAgYm9vbCBkaXJ0eSA9IHRydWUpOwogCiAgICAgLyoqCiAgICAgICogRHJhd3MgdGhlIHNwZWNpZmllZCBsaXN0IG9mIHZlcnRpY2VzIGFzIHF1YWRzIHVzaW5nIGluZGV4ZWQgR0xfVFJJQU5HTEVTLgogICAgICAqIElmIHRoZSBudW1iZXIgb2YgdmVydGljZXMgdG8gZHJhdyBleGNlZWRzIHRoZSBudW1iZXIgb2YgaW5kaWNlcyB3ZSBoYXZlCiAgICAgICogcHJlLWFsbG9jYXRlZCwgdGhpcyBtZXRob2Qgd2lsbCBnZW5lcmF0ZSBzZXZlcmFsIGdsRHJhd0VsZW1lbnRzKCkgY2FsbHMuCiAgICAgICovCi0gICAgdm9pZCBkcmF3SW5kZXhlZFF1YWRzKFZlcnRleCogbWVzaCwgR0xzaXplaSBxdWFkc0NvdW50KTsKKyAgICB2b2lkIGlzc3VlSW5kZXhlZFF1YWREcmF3KFZlcnRleCogbWVzaCwgR0xzaXplaSBxdWFkc0NvdW50KTsKIAogICAgIC8qKgogICAgICAqIERyYXdzIHRleHQgdW5kZXJsaW5lIGFuZCBzdHJpa2UtdGhyb3VnaCBpZiBuZWVkZWQuCkBAIC04NjgsOCArODcyLDcgQEAKICAgICAgKiBAcGFyYW0geSBUaGUgeSBjb29yZGluYXRlIHdoZXJlIHRoZSB0ZXh0IHdpbGwgYmUgZHJhd24KICAgICAgKiBAcGFyYW0gcGFpbnQgVGhlIHBhaW50IHRvIGRyYXcgdGhlIHRleHQgd2l0aAogICAgICAqLwotICAgIHZvaWQgZHJhd1RleHREZWNvcmF0aW9ucyhjb25zdCBjaGFyKiB0ZXh0LCBpbnQgYnl0ZXNDb3VudCwgZmxvYXQgdG90YWxBZHZhbmNlLAotICAgICAgICAgICAgZmxvYXQgeCwgZmxvYXQgeSwgU2tQYWludCogcGFpbnQpOworICAgIHZvaWQgZHJhd1RleHREZWNvcmF0aW9ucyhmbG9hdCB0b3RhbEFkdmFuY2UsIGZsb2F0IHgsIGZsb2F0IHksIFNrUGFpbnQqIHBhaW50KTsKIAogICAgLyoqCiAgICAgICogRHJhd3Mgc2hhZG93IGxheWVyIG9uIHRleHQgKHdpdGggb3B0aW9uYWwgcG9zaXRpb25zKS4KQEAgLTk3OCwxNCArOTgxLDI2IEBACiAgICAgICAgICAgICBib29sIHN3YXBTcmNEc3QgPSBmYWxzZSk7CiAgICAgdm9pZCBzZXR1cERyYXdQcm9ncmFtKCk7CiAgICAgdm9pZCBzZXR1cERyYXdEaXJ0eVJlZ2lvbnNEaXNhYmxlZCgpOwotICAgIHZvaWQgc2V0dXBEcmF3TW9kZWxWaWV3SWRlbnRpdHkoYm9vbCBvZmZzZXQgPSBmYWxzZSk7Ci0gICAgdm9pZCBzZXR1cERyYXdNb2RlbFZpZXcoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAotICAgICAgICAgICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm0gPSBmYWxzZSwgYm9vbCBpZ25vcmVNb2RlbFZpZXcgPSBmYWxzZSk7Ci0gICAgdm9pZCBzZXR1cERyYXdNb2RlbFZpZXdUcmFuc2xhdGUoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLAotICAgICAgICAgICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm0gPSBmYWxzZSk7CisKKyAgICAvKioKKyAgICAgKiBTZXR1cCB0aGUgY3VycmVudCBwcm9ncmFtIG1hdHJpY2VzIGJhc2VkIHVwb24gdGhlIG5hdHVyZSBvZiB0aGUgZ2VvbWV0cnkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9kZSBJZiBrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGUsIHRoZSBnZW9tZXRyeSBtdXN0IGJlIHRyYW5zbGF0ZWQgYnkgdGhlIGxlZnQgYW5kIHRvcAorICAgICAqIHBhcmFtZXRlcnMuIElmIGtNb2RlbFZpZXdNb2RlX1RyYW5zbGF0ZUFuZFNjYWxlLCB0aGUgZ2VvbWV0cnkgdGhhdCBleGlzdHMgaW4gdGhlICgwLDAsIDEsMSkKKyAgICAgKiBzcGFjZSBtdXN0IGJlIHNjYWxlZCB1cCBhbmQgdHJhbnNsYXRlZCB0byBmaWxsIHRoZSBxdWFkIHByb3ZpZGVkIGluIChsLHQscixiKS4gVGhlc2UKKyAgICAgKiB0cmFuc2Zvcm1hdGlvbnMgYXJlIHN0b3JlZCBpbiB0aGUgbW9kZWxWaWV3IG1hdHJpeCBhbmQgdXBsb2FkZWQgdG8gdGhlIHNoYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBvZmZzZXQgU2V0IHRvIHRydWUgaWYgdGhlIHRoZSBtYXRyaXggc2hvdWxkIGJlIGZ1ZGdlZCAodHJhbnNsYXRlZCkgc2xpZ2h0bHkgdG8gZGlzYW1iaWd1YXRlCisgICAgICogZ2VvbWV0cnkgcGl4ZWwgcG9zaXRpb25pbmcuIFNlZSBWZXJ0ZXg6OmdHZW9tZXRyeUZ1ZGdlRmFjdG9yLgorICAgICAqCisgICAgICogQHBhcmFtIGlnbm9yZVRyYW5zZm9ybSBTZXQgdG8gdHJ1ZSBpZiBsLHQscixiIGNvb3JkaW5hdGVzIGFscmVhZHkgaW4gbGF5ZXIgc3BhY2UsCisgICAgICogY3VycmVudFRyYW5zZm9ybSgpIHdpbGwgYmUgaWdub3JlZC4gKGUuZy4gd2hlbiBkcmF3aW5nIGNsaXAgaW4gbGF5ZXIgY29vcmRpbmF0ZXMgdG8gc3RlbmNpbCwKKyAgICAgKiBvciB3aGVuIHNpbXBsZSB0cmFuc2xhdGlvbiBoYXMgYmVlbiBleHRyYWN0ZWQpCisgICAgICovCisgICAgdm9pZCBzZXR1cERyYXdNb2RlbFZpZXcoTW9kZWxWaWV3TW9kZSBtb2RlLCBib29sIG9mZnNldCwKKyAgICAgICAgICAgIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgYm9vbCBpZ25vcmVUcmFuc2Zvcm0gPSBmYWxzZSk7CiAgICAgdm9pZCBzZXR1cERyYXdDb2xvclVuaWZvcm1zKCk7CiAgICAgdm9pZCBzZXR1cERyYXdQdXJlQ29sb3JVbmlmb3JtcygpOwotICAgIHZvaWQgc2V0dXBEcmF3U2hhZGVySWRlbnRpdHlVbmlmb3JtcygpOwogICAgIHZvaWQgc2V0dXBEcmF3U2hhZGVyVW5pZm9ybXMoYm9vbCBpZ25vcmVUcmFuc2Zvcm0gPSBmYWxzZSk7CiAgICAgdm9pZCBzZXR1cERyYXdDb2xvckZpbHRlclVuaWZvcm1zKCk7CiAgICAgdm9pZCBzZXR1cERyYXdTaW1wbGVNZXNoKCk7CkBAIC0xMDA0LDExICsxMDE5LDEzIEBACiAgICAgdm9pZCB1cGRhdGVMYXllcnMoKTsKICAgICB2b2lkIGZsdXNoTGF5ZXJzKCk7CiAKKyNpZiBERUJVR19MQVlFUlNfQVNfUkVHSU9OUwogICAgIC8qKgogICAgICAqIFJlbmRlcnMgdGhlIHNwZWNpZmllZCByZWdpb24gYXMgYSBzZXJpZXMgb2YgcmVjdGFuZ2xlcy4gVGhpcyBtZXRob2QKICAgICAgKiBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgb25seS4KICAgICAgKi8KLSAgICB2b2lkIGRyYXdSZWdpb25SZWN0cyhjb25zdCBSZWdpb24mIHJlZ2lvbik7CisgICAgdm9pZCBkcmF3UmVnaW9uUmVjdHNEZWJ1Zyhjb25zdCBSZWdpb24mIHJlZ2lvbik7CisjZW5kaWYKIAogICAgIC8qKgogICAgICAqIFJlbmRlcnMgdGhlIHNwZWNpZmllZCByZWdpb24gYXMgYSBzZXJpZXMgb2YgcmVjdGFuZ2xlcy4gVGhlIHJlZ2lvbgpAQCAtMTA1NSw3ICsxMDcyLDIwIEBACiAgICAgLy8gTWF0cml4IHVzZWQgZm9yIG9ydGhvIHByb2plY3Rpb24gaW4gc2hhZGVycwogICAgIG1hdDQgbU9ydGhvTWF0cml4OwogCi0gICAgLy8gTW9kZWwtdmlldyBtYXRyaXggdXNlZCB0byBwb3NpdGlvbi9zaXplIG9iamVjdHMKKyAgICAvKioKKyAgICAgKiBNb2RlbC12aWV3IG1hdHJpeCB1c2VkIHRvIHBvc2l0aW9uL3NpemUgb2JqZWN0cworICAgICAqCisgICAgICogU3RvcmVzIG9wZXJhdGlvbi1sb2NhbCBtb2RpZmljYXRpb25zIHRvIHRoZSBkcmF3IG1hdHJpeCB0aGF0IGFyZW4ndCBpbmNvcnBvcmF0ZWQgaW50byB0aGUKKyAgICAgKiBjdXJyZW50VHJhbnNmb3JtKCkuCisgICAgICoKKyAgICAgKiBJZiBnZW5lcmF0ZWQgd2l0aCBrTW9kZWxWaWV3TW9kZV9UcmFuc2xhdGUsIHRoZSBtTW9kZWxWaWV3IHdpbGwgcmVmbGVjdCBhbiB4L3kgb2Zmc2V0LAorICAgICAqIGUuZy4gdGhlIG9mZnNldCBpbiBkcmF3TGF5ZXIoKS4gSWYgZ2VuZXJhdGVkIHdpdGgga01vZGVsVmlld01vZGVfVHJhbnNsYXRlQW5kU2NhbGUsCisgICAgICogbU1vZGVsVmlldyB3aWxsIHJlZmxlY3QgYSB0cmFuc2xhdGlvbiBhbmQgc2NhbGUsIGUuZy4gdGhlIHRyYW5zbGF0aW9uIGFuZCBzY2FsZSByZXF1aXJlZCB0bworICAgICAqIG1ha2UgVkJPIDAgKGEgcmVjdCBvZiAoMCwwLDEsMSkpIHNjYWxlZCB0byBtYXRjaCB0aGUgeCx5IG9mZnNldCwgYW5kIHdpZHRoL2hlaWdodCBvZiBhCisgICAgICogYml0bWFwLgorICAgICAqCisgICAgICogVXNlZCBhcyBpbnB1dCB0byBTa2lhU2hhZGVyIHRyYW5zZm9ybWF0aW9uLgorICAgICAqLwogICAgIG1hdDQgbU1vZGVsVmlldzsKIAogICAgIC8vIE51bWJlciBvZiBzYXZlZCBzdGF0ZXMKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9QYXRoVGVzc2VsbGF0b3IuY3BwIGIvbGlicy9od3VpL1BhdGhUZXNzZWxsYXRvci5jcHAKaW5kZXggMzk3MDkxMy4uN2U4YTQ1YiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1BhdGhUZXNzZWxsYXRvci5jcHAKKysrIGIvbGlicy9od3VpL1BhdGhUZXNzZWxsYXRvci5jcHAKQEAgLTE0LDcgKzE0LDcgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLSNkZWZpbmUgTE9HX1RBRyAiUGF0aFRlc3NlbGxhdG9yIgorI2RlZmluZSBMT0dfVEFHICJPcGVuR0xSZW5kZXJlciIKICNkZWZpbmUgTE9HX05ERUJVRyAxCiAjZGVmaW5lIEFUUkFDRV9UQUcgQVRSQUNFX1RBR19HUkFQSElDUwogCkBAIC0yNCwxMSArMjQsMTEgQEAKICNkZWZpbmUgREVCVUdfRFVNUF9BTFBIQV9CVUZGRVIoKSBcCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB2ZXJ0ZXhCdWZmZXIuZ2V0U2l6ZSgpOyBpKyspIHsgXAogICAgICAgICBBTE9HRCgicG9pbnQgJWQgYXQgJWYgJWYsIGFscGhhICVmIiwgXAotICAgICAgICBpLCBidWZmZXJbaV0ucG9zaXRpb25bMF0sIGJ1ZmZlcltpXS5wb3NpdGlvblsxXSwgYnVmZmVyW2ldLmFscGhhKTsgXAorICAgICAgICBpLCBidWZmZXJbaV0ueCwgYnVmZmVyW2ldLnksIGJ1ZmZlcltpXS5hbHBoYSk7IFwKICAgICB9CiAjZGVmaW5lIERFQlVHX0RVTVBfQlVGRkVSKCkgXAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdmVydGV4QnVmZmVyLmdldFNpemUoKTsgaSsrKSB7IFwKLSAgICAgICAgQUxPR0QoInBvaW50ICVkIGF0ICVmICVmIiwgaSwgYnVmZmVyW2ldLnBvc2l0aW9uWzBdLCBidWZmZXJbaV0ucG9zaXRpb25bMV0pOyBcCisgICAgICAgIEFMT0dEKCJwb2ludCAlZCBhdCAlZiAlZiIsIGksIGJ1ZmZlcltpXS54LCBidWZmZXJbaV0ueSk7IFwKICAgICB9CiAjZWxzZQogI2RlZmluZSBERUJVR19EVU1QX0FMUEhBX0JVRkZFUigpCkBAIC01Nyw5ICs1NywxMiBAQAogI2RlZmluZSBST1VORF9DQVBfVEhSRVNIIDAuMjVmCiAjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzMmYKIAotdm9pZCBQYXRoVGVzc2VsbGF0b3I6OmV4cGFuZEJvdW5kc0ZvclN0cm9rZShTa1JlY3QmIGJvdW5kcywgY29uc3QgU2tQYWludCogcGFpbnQsCi0gICAgICAgIGJvb2wgZm9yY2VFeHBhbmQpIHsKLSAgICBpZiAoZm9yY2VFeHBhbmQgfHwgcGFpbnQtPmdldFN0eWxlKCkgIT0gU2tQYWludDo6a0ZpbGxfU3R5bGUpIHsKKy8qKgorICogTm90ZTogdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFjY291bnQgZm9yIHRoZSBBQSBjYXNlIHdpdGggc3ViLXBpeGVsIGxpbmUgdGhpY2tuZXNzIChub3QganVzdCAwIDwKKyAqIHdpZHRoIDwgMS4wLCBjYW52YXMgc2NhbGUgZmFjdG9ycyBpbiBhcyB3ZWxsKSBzbyB0aGlzIGNhbid0IGJlIHVzZWQgZm9yIHBvaW50cy9saW5lcworICovCit2b2lkIFBhdGhUZXNzZWxsYXRvcjo6ZXhwYW5kQm91bmRzRm9yU3Ryb2tlKFNrUmVjdCYgYm91bmRzLCBjb25zdCBTa1BhaW50KiBwYWludCkgeworICAgIGlmIChwYWludC0+Z2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHlsZSkgewogICAgICAgICBmbG9hdCBvdXRzZXQgPSBwYWludC0+Z2V0U3Ryb2tlV2lkdGgoKSAqIDAuNWY7CiAgICAgICAgIGlmIChvdXRzZXQgPT0gMCkgb3V0c2V0ID0gMC41ZjsgLy8gYWNjb3VudCBmb3IgaGFpcmxpbmUKICAgICAgICAgYm91bmRzLm91dHNldChvdXRzZXQsIG91dHNldCk7CkBAIC02NywxMSArNzAsMTEgQEAKIH0KIAogaW5saW5lIHN0YXRpYyB2b2lkIGNvcHlWZXJ0ZXgoVmVydGV4KiBkZXN0UHRyLCBjb25zdCBWZXJ0ZXgqIHNyY1B0cikgewotICAgIFZlcnRleDo6c2V0KGRlc3RQdHIsIHNyY1B0ci0+cG9zaXRpb25bMF0sIHNyY1B0ci0+cG9zaXRpb25bMV0pOworICAgIFZlcnRleDo6c2V0KGRlc3RQdHIsIHNyY1B0ci0+eCwgc3JjUHRyLT55KTsKIH0KIAogaW5saW5lIHN0YXRpYyB2b2lkIGNvcHlBbHBoYVZlcnRleChBbHBoYVZlcnRleCogZGVzdFB0ciwgY29uc3QgQWxwaGFWZXJ0ZXgqIHNyY1B0cikgewotICAgIEFscGhhVmVydGV4OjpzZXQoZGVzdFB0ciwgc3JjUHRyLT5wb3NpdGlvblswXSwgc3JjUHRyLT5wb3NpdGlvblsxXSwgc3JjUHRyLT5hbHBoYSk7CisgICAgQWxwaGFWZXJ0ZXg6OnNldChkZXN0UHRyLCBzcmNQdHItPngsIHNyY1B0ci0+eSwgc3JjUHRyLT5hbHBoYSk7CiB9CiAKIC8qKgpAQCAtMTU5LDYgKzE2MiwxNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKworICAgIC8qKgorICAgICAqIE91dHNldCB0aGUgYm91bmRzIG9mIHBvaW50IGRhdGEgKGZvciBsaW5lIGVuZHBvaW50cyBvciBwb2ludHMpIHRvIGFjY291bnQgZm9yIEFBIHN0cm9rZQorICAgICAqIGdlb21ldHJ5LgorICAgICAqLworICAgIHZvaWQgZXhwYW5kQm91bmRzRm9yU3Ryb2tlQUEoU2tSZWN0JiBib3VuZHMpIGNvbnN0IHsKKyAgICAgICAgZmxvYXQgb3V0c2V0ID0gaGFsZlN0cm9rZVdpZHRoOworICAgICAgICBpZiAob3V0c2V0ID09IDApIG91dHNldCA9IDAuNWY7CisgICAgICAgIGJvdW5kcy5vdXRzZXQob3V0c2V0ICogaW52ZXJzZVNjYWxlWCArIFZlcnRleDo6Z0dlb21ldHJ5RnVkZ2VGYWN0b3IsCisgICAgICAgICAgICAgICAgb3V0c2V0ICogaW52ZXJzZVNjYWxlWSArIFZlcnRleDo6Z0dlb21ldHJ5RnVkZ2VGYWN0b3IpOworICAgIH0KIH07CiAKIHZvaWQgZ2V0RmlsbFZlcnRpY2VzRnJvbVBlcmltZXRlcihjb25zdCBWZWN0b3I8VmVydGV4PiYgcGVyaW1ldGVyLCBWZXJ0ZXhCdWZmZXImIHZlcnRleEJ1ZmZlcikgewpAQCAtMTkyLDI1ICsyMDYsMjUgQEAKICAgICBpbnQgY3VycmVudEluZGV4ID0gMDsKICAgICBjb25zdCBWZXJ0ZXgqIGxhc3QgPSAmKHBlcmltZXRlcltwZXJpbWV0ZXIuc2l6ZSgpIC0gMV0pOwogICAgIGNvbnN0IFZlcnRleCogY3VycmVudCA9ICYocGVyaW1ldGVyWzBdKTsKLSAgICB2ZWMyIGxhc3ROb3JtYWwoY3VycmVudC0+cG9zaXRpb25bMV0gLSBsYXN0LT5wb3NpdGlvblsxXSwKLSAgICAgICAgICAgIGxhc3QtPnBvc2l0aW9uWzBdIC0gY3VycmVudC0+cG9zaXRpb25bMF0pOworICAgIHZlYzIgbGFzdE5vcm1hbChjdXJyZW50LT55IC0gbGFzdC0+eSwKKyAgICAgICAgICAgIGxhc3QtPnggLSBjdXJyZW50LT54KTsKICAgICBsYXN0Tm9ybWFsLm5vcm1hbGl6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGVyaW1ldGVyLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGNvbnN0IFZlcnRleCogbmV4dCA9ICYocGVyaW1ldGVyW2kgKyAxID49IHBlcmltZXRlci5zaXplKCkgPyAwIDogaSArIDFdKTsKLSAgICAgICAgdmVjMiBuZXh0Tm9ybWFsKG5leHQtPnBvc2l0aW9uWzFdIC0gY3VycmVudC0+cG9zaXRpb25bMV0sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSBuZXh0LT5wb3NpdGlvblswXSk7CisgICAgICAgIHZlYzIgbmV4dE5vcm1hbChuZXh0LT55IC0gY3VycmVudC0+eSwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54IC0gbmV4dC0+eCk7CiAgICAgICAgIG5leHROb3JtYWwubm9ybWFsaXplKCk7CiAKICAgICAgICAgdmVjMiB0b3RhbE9mZnNldCA9IHRvdGFsT2Zmc2V0RnJvbU5vcm1hbHMobGFzdE5vcm1hbCwgbmV4dE5vcm1hbCk7CiAgICAgICAgIHBhaW50SW5mby5zY2FsZU9mZnNldEZvclN0cm9rZVdpZHRoKHRvdGFsT2Zmc2V0KTsKIAogICAgICAgICBWZXJ0ZXg6OnNldCgmYnVmZmVyW2N1cnJlbnRJbmRleCsrXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSArIHRvdGFsT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gKyB0b3RhbE9mZnNldC55KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54ICsgdG90YWxPZmZzZXQueCwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT55ICsgdG90YWxPZmZzZXQueSk7CiAKICAgICAgICAgVmVydGV4OjpzZXQoJmJ1ZmZlcltjdXJyZW50SW5kZXgrK10sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSB0b3RhbE9mZnNldC54LAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzFdIC0gdG90YWxPZmZzZXQueSk7CisgICAgICAgICAgICAgICAgY3VycmVudC0+eCAtIHRvdGFsT2Zmc2V0LngsCisgICAgICAgICAgICAgICAgY3VycmVudC0+eSAtIHRvdGFsT2Zmc2V0LnkpOwogCiAgICAgICAgIGxhc3QgPSBjdXJyZW50OwogICAgICAgICBjdXJyZW50ID0gbmV4dDsKQEAgLTIyOSw3ICsyNDMsNyBAQAogICAgIHZlYzIgc3Ryb2tlT2Zmc2V0ID0gbm9ybWFsOwogICAgIHBhaW50SW5mby5zY2FsZU9mZnNldEZvclN0cm9rZVdpZHRoKHN0cm9rZU9mZnNldCk7CiAKLSAgICB2ZWMyIHJlZmVyZW5jZVBvaW50KGNlbnRlci5wb3NpdGlvblswXSwgY2VudGVyLnBvc2l0aW9uWzFdKTsKKyAgICB2ZWMyIHJlZmVyZW5jZVBvaW50KGNlbnRlci54LCBjZW50ZXIueSk7CiAgICAgaWYgKHBhaW50SW5mby5jYXAgPT0gU2tQYWludDo6a1NxdWFyZV9DYXApIHsKICAgICAgICAgcmVmZXJlbmNlUG9pbnQgKz0gdmVjMigtc3Ryb2tlT2Zmc2V0LnksIHN0cm9rZU9mZnNldC54KSAqIChiZWdpbiA/IC0xIDogMSk7CiAgICAgfQpAQCAtMjU1LDExICsyNjksMTEgQEAKICAgICBpZiAoZXh0cmEgPiAwKSB7CiAgICAgICAgIC8vIHRlc3NlbGxhdGUgYm90aCByb3VuZCBjYXBzCiAgICAgICAgIGZsb2F0IGJlZ2luVGhldGEgPSBhdGFuMigKLSAgICAgICAgICAgICAgICAgICAgLSAodmVydGljZXNbMF0ucG9zaXRpb25bMF0gLSB2ZXJ0aWNlc1sxXS5wb3NpdGlvblswXSksCi0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzWzBdLnBvc2l0aW9uWzFdIC0gdmVydGljZXNbMV0ucG9zaXRpb25bMV0pOworICAgICAgICAgICAgICAgICAgICAtICh2ZXJ0aWNlc1swXS54IC0gdmVydGljZXNbMV0ueCksCisgICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzWzBdLnkgLSB2ZXJ0aWNlc1sxXS55KTsKICAgICAgICAgZmxvYXQgZW5kVGhldGEgPSBhdGFuMigKLSAgICAgICAgICAgICAgICAgICAgLSAodmVydGljZXNbbGFzdEluZGV4XS5wb3NpdGlvblswXSAtIHZlcnRpY2VzW2xhc3RJbmRleCAtIDFdLnBvc2l0aW9uWzBdKSwKLSAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbbGFzdEluZGV4XS5wb3NpdGlvblsxXSAtIHZlcnRpY2VzW2xhc3RJbmRleCAtIDFdLnBvc2l0aW9uWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgLSAodmVydGljZXNbbGFzdEluZGV4XS54IC0gdmVydGljZXNbbGFzdEluZGV4IC0gMV0ueCksCisgICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzW2xhc3RJbmRleF0ueSAtIHZlcnRpY2VzW2xhc3RJbmRleCAtIDFdLnkpOwogICAgICAgICBjb25zdCBmbG9hdCBkVGhldGEgPSBQSSAvIChleHRyYSArIDEpOwogICAgICAgICBjb25zdCBmbG9hdCByYWRpYWxTY2FsZSA9IDIuMGYgLyAoMSArIGNvcyhkVGhldGEpKTsKIApAQCAtMjc1LDM3ICsyODksMzcgQEAKICAgICAgICAgICAgIHZlYzIgYmVnaW5SYWRpYWxPZmZzZXQoY29zKGJlZ2luVGhldGEpLCBzaW4oYmVnaW5UaGV0YSkpOwogICAgICAgICAgICAgcGFpbnRJbmZvLnNjYWxlT2Zmc2V0Rm9yU3Ryb2tlV2lkdGgoYmVnaW5SYWRpYWxPZmZzZXQpOwogICAgICAgICAgICAgVmVydGV4OjpzZXQoJmJ1ZmZlcltjYXBPZmZzZXRdLAotICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc1swXS5wb3NpdGlvblswXSArIGJlZ2luUmFkaWFsT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzWzBdLnBvc2l0aW9uWzFdICsgYmVnaW5SYWRpYWxPZmZzZXQueSk7CisgICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzWzBdLnggKyBiZWdpblJhZGlhbE9mZnNldC54LAorICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc1swXS55ICsgYmVnaW5SYWRpYWxPZmZzZXQueSk7CiAKICAgICAgICAgICAgIGVuZFRoZXRhICs9IGRUaGV0YTsKICAgICAgICAgICAgIHZlYzIgZW5kUmFkaWFsT2Zmc2V0KGNvcyhlbmRUaGV0YSksIHNpbihlbmRUaGV0YSkpOwogICAgICAgICAgICAgcGFpbnRJbmZvLnNjYWxlT2Zmc2V0Rm9yU3Ryb2tlV2lkdGgoZW5kUmFkaWFsT2Zmc2V0KTsKICAgICAgICAgICAgIFZlcnRleDo6c2V0KCZidWZmZXJbYWxsb2NTaXplIC0gMSAtIGNhcE9mZnNldF0sCi0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzW2xhc3RJbmRleF0ucG9zaXRpb25bMF0gKyBlbmRSYWRpYWxPZmZzZXQueCwKLSAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbbGFzdEluZGV4XS5wb3NpdGlvblsxXSArIGVuZFJhZGlhbE9mZnNldC55KTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbbGFzdEluZGV4XS54ICsgZW5kUmFkaWFsT2Zmc2V0LngsCisgICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzW2xhc3RJbmRleF0ueSArIGVuZFJhZGlhbE9mZnNldC55KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGludCBjdXJyZW50SW5kZXggPSBleHRyYTsKICAgICBjb25zdCBWZXJ0ZXgqIGxhc3QgPSAmKHZlcnRpY2VzWzBdKTsKICAgICBjb25zdCBWZXJ0ZXgqIGN1cnJlbnQgPSAmKHZlcnRpY2VzWzFdKTsKLSAgICB2ZWMyIGxhc3ROb3JtYWwoY3VycmVudC0+cG9zaXRpb25bMV0gLSBsYXN0LT5wb3NpdGlvblsxXSwKLSAgICAgICAgICAgICAgICBsYXN0LT5wb3NpdGlvblswXSAtIGN1cnJlbnQtPnBvc2l0aW9uWzBdKTsKKyAgICB2ZWMyIGxhc3ROb3JtYWwoY3VycmVudC0+eSAtIGxhc3QtPnksCisgICAgICAgICAgICAgICAgbGFzdC0+eCAtIGN1cnJlbnQtPngpOwogICAgIGxhc3ROb3JtYWwubm9ybWFsaXplKCk7CiAKICAgICBzdG9yZUJlZ2luRW5kKHBhaW50SW5mbywgdmVydGljZXNbMF0sIGxhc3ROb3JtYWwsIGJ1ZmZlciwgY3VycmVudEluZGV4LCB0cnVlKTsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgdmVydGljZXMuc2l6ZSgpIC0gMTsgaSsrKSB7CiAgICAgICAgIGNvbnN0IFZlcnRleCogbmV4dCA9ICYodmVydGljZXNbaSArIDFdKTsKLSAgICAgICAgdmVjMiBuZXh0Tm9ybWFsKG5leHQtPnBvc2l0aW9uWzFdIC0gY3VycmVudC0+cG9zaXRpb25bMV0sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSBuZXh0LT5wb3NpdGlvblswXSk7CisgICAgICAgIHZlYzIgbmV4dE5vcm1hbChuZXh0LT55IC0gY3VycmVudC0+eSwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54IC0gbmV4dC0+eCk7CiAgICAgICAgIG5leHROb3JtYWwubm9ybWFsaXplKCk7CiAKICAgICAgICAgdmVjMiBzdHJva2VPZmZzZXQgID0gdG90YWxPZmZzZXRGcm9tTm9ybWFscyhsYXN0Tm9ybWFsLCBuZXh0Tm9ybWFsKTsKICAgICAgICAgcGFpbnRJbmZvLnNjYWxlT2Zmc2V0Rm9yU3Ryb2tlV2lkdGgoc3Ryb2tlT2Zmc2V0KTsKIAotICAgICAgICB2ZWMyIGNlbnRlcihjdXJyZW50LT5wb3NpdGlvblswXSwgY3VycmVudC0+cG9zaXRpb25bMV0pOworICAgICAgICB2ZWMyIGNlbnRlcihjdXJyZW50LT54LCBjdXJyZW50LT55KTsKICAgICAgICAgVmVydGV4OjpzZXQoJmJ1ZmZlcltjdXJyZW50SW5kZXgrK10sIGNlbnRlciArIHN0cm9rZU9mZnNldCk7CiAgICAgICAgIFZlcnRleDo6c2V0KCZidWZmZXJbY3VycmVudEluZGV4KytdLCBjZW50ZXIgLSBzdHJva2VPZmZzZXQpOwogCkBAIC0zMjksNyArMzQzLDcgQEAKICAqIDMgLSB6aWcgemFnIGJhY2sgYW5kIGZvcnRoIGluc2lkZSB0aGUgc2hhcGUgdG8gZmlsbCBpdCAodXNpbmcgcGVyaW1ldGVyLnNpemUoKSB2ZXJ0aWNlcykKICAqLwogdm9pZCBnZXRGaWxsVmVydGljZXNGcm9tUGVyaW1ldGVyQUEoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IFZlY3RvcjxWZXJ0ZXg+JiBwZXJpbWV0ZXIsCi0gICAgICAgIFZlcnRleEJ1ZmZlciYgdmVydGV4QnVmZmVyKSB7CisgICAgICAgIFZlcnRleEJ1ZmZlciYgdmVydGV4QnVmZmVyLCBmbG9hdCBtYXhBbHBoYSA9IDEuMGYpIHsKICAgICBBbHBoYVZlcnRleCogYnVmZmVyID0gdmVydGV4QnVmZmVyLmFsbG9jPEFscGhhVmVydGV4PihwZXJpbWV0ZXIuc2l6ZSgpICogMyArIDIpOwogCiAgICAgLy8gZ2VuZXJhdGUgYWxwaGEgcG9pbnRzIC0gZmlsbCBBbHBoYSB2ZXJ0ZXggZ2FwcyBpbiBiZXR3ZWVuIGVhY2ggcG9pbnQgd2l0aApAQCAtMzM3LDEzICszNTEsMTMgQEAKICAgICBpbnQgY3VycmVudEluZGV4ID0gMDsKICAgICBjb25zdCBWZXJ0ZXgqIGxhc3QgPSAmKHBlcmltZXRlcltwZXJpbWV0ZXIuc2l6ZSgpIC0gMV0pOwogICAgIGNvbnN0IFZlcnRleCogY3VycmVudCA9ICYocGVyaW1ldGVyWzBdKTsKLSAgICB2ZWMyIGxhc3ROb3JtYWwoY3VycmVudC0+cG9zaXRpb25bMV0gLSBsYXN0LT5wb3NpdGlvblsxXSwKLSAgICAgICAgICAgIGxhc3QtPnBvc2l0aW9uWzBdIC0gY3VycmVudC0+cG9zaXRpb25bMF0pOworICAgIHZlYzIgbGFzdE5vcm1hbChjdXJyZW50LT55IC0gbGFzdC0+eSwKKyAgICAgICAgICAgIGxhc3QtPnggLSBjdXJyZW50LT54KTsKICAgICBsYXN0Tm9ybWFsLm5vcm1hbGl6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGVyaW1ldGVyLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGNvbnN0IFZlcnRleCogbmV4dCA9ICYocGVyaW1ldGVyW2kgKyAxID49IHBlcmltZXRlci5zaXplKCkgPyAwIDogaSArIDFdKTsKLSAgICAgICAgdmVjMiBuZXh0Tm9ybWFsKG5leHQtPnBvc2l0aW9uWzFdIC0gY3VycmVudC0+cG9zaXRpb25bMV0sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSBuZXh0LT5wb3NpdGlvblswXSk7CisgICAgICAgIHZlYzIgbmV4dE5vcm1hbChuZXh0LT55IC0gY3VycmVudC0+eSwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54IC0gbmV4dC0+eCk7CiAgICAgICAgIG5leHROb3JtYWwubm9ybWFsaXplKCk7CiAKICAgICAgICAgLy8gQUEgcG9pbnQgb2Zmc2V0IGZyb20gb3JpZ2luYWwgcG9pbnQgaXMgdGhhdCBwb2ludCdzIG5vcm1hbCwgc3VjaCB0aGF0IGVhY2ggc2lkZSBpcyBvZmZzZXQKQEAgLTM1MSwxMyArMzY1LDEzIEBACiAgICAgICAgIHZlYzIgdG90YWxPZmZzZXQgPSBwYWludEluZm8uZGVyaXZlQUFPZmZzZXQodG90YWxPZmZzZXRGcm9tTm9ybWFscyhsYXN0Tm9ybWFsLCBuZXh0Tm9ybWFsKSk7CiAKICAgICAgICAgQWxwaGFWZXJ0ZXg6OnNldCgmYnVmZmVyW2N1cnJlbnRJbmRleCsrXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSArIHRvdGFsT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gKyB0b3RhbE9mZnNldC55LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggKyB0b3RhbE9mZnNldC54LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnkgKyB0b3RhbE9mZnNldC55LAogICAgICAgICAgICAgICAgIDAuMGYpOwogICAgICAgICBBbHBoYVZlcnRleDo6c2V0KCZidWZmZXJbY3VycmVudEluZGV4KytdLAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzBdIC0gdG90YWxPZmZzZXQueCwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblsxXSAtIHRvdGFsT2Zmc2V0LnksCi0gICAgICAgICAgICAgICAgMS4wZik7CisgICAgICAgICAgICAgICAgY3VycmVudC0+eCAtIHRvdGFsT2Zmc2V0LngsCisgICAgICAgICAgICAgICAgY3VycmVudC0+eSAtIHRvdGFsT2Zmc2V0LnksCisgICAgICAgICAgICAgICAgbWF4QWxwaGEpOwogCiAgICAgICAgIGxhc3QgPSBjdXJyZW50OwogICAgICAgICBjdXJyZW50ID0gbmV4dDsKQEAgLTQxNiw3ICs0MzAsNyBAQAogCiAgICAgLy8gZGV0ZXJtaW5lIHJlZmVyZW5jZVBvaW50LCB0aGUgY2VudGVyIHBvaW50IGZvciB0aGUgNCBwcmltYXJ5IGNhcCB2ZXJ0aWNlcwogICAgIGNvbnN0IFZlcnRleCogcG9pbnQgPSBpc0ZpcnN0ID8gdmVydGljZXMuYmVnaW4oKSA6ICh2ZXJ0aWNlcy5lbmQoKSAtIDEpOwotICAgIHZlYzIgcmVmZXJlbmNlUG9pbnQocG9pbnQtPnBvc2l0aW9uWzBdLCBwb2ludC0+cG9zaXRpb25bMV0pOworICAgIHZlYzIgcmVmZXJlbmNlUG9pbnQocG9pbnQtPngsIHBvaW50LT55KTsKICAgICBpZiAocGFpbnRJbmZvLmNhcCA9PSBTa1BhaW50OjprU3F1YXJlX0NhcCkgewogICAgICAgICAvLyBUbyBhY2NvdW50IGZvciBzcXVhcmUgY2FwLCBtb3ZlIHRoZSBwcmltYXJ5IGNhcCB2ZXJ0aWNlcyAodGhhdCBjcmVhdGUgdGhlIEFBIGVkZ2UpIGJ5IHRoZQogICAgICAgICAvLyBzdHJva2Ugb2Zmc2V0IHZlY3RvciAocm90YXRlZCB0byBiZSBwYXJhbGxlbCB0byB0aGUgc3Ryb2tlKQpAQCAtNTc2LDggKzU5MCw4IEBACiAKICAgICBjb25zdCBWZXJ0ZXgqIGxhc3QgPSAmKHZlcnRpY2VzWzBdKTsKICAgICBjb25zdCBWZXJ0ZXgqIGN1cnJlbnQgPSAmKHZlcnRpY2VzWzFdKTsKLSAgICB2ZWMyIGxhc3ROb3JtYWwoY3VycmVudC0+cG9zaXRpb25bMV0gLSBsYXN0LT5wb3NpdGlvblsxXSwKLSAgICAgICAgICAgIGxhc3QtPnBvc2l0aW9uWzBdIC0gY3VycmVudC0+cG9zaXRpb25bMF0pOworICAgIHZlYzIgbGFzdE5vcm1hbChjdXJyZW50LT55IC0gbGFzdC0+eSwKKyAgICAgICAgICAgIGxhc3QtPnggLSBjdXJyZW50LT54KTsKICAgICBsYXN0Tm9ybWFsLm5vcm1hbGl6ZSgpOwogCiAgICAgLy8gVE9ETzogdXNlIG5vcm1hbCBmcm9tIGJlemllciB0cmF2ZXJzYWwgZm9yIGNhcCwgaW5zdGVhZCBvZiBmcm9tIHZlcnRpY2VzCkBAIC01ODUsOCArNTk5LDggQEAKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgdmVydGljZXMuc2l6ZSgpIC0gMTsgaSsrKSB7CiAgICAgICAgIGNvbnN0IFZlcnRleCogbmV4dCA9ICYodmVydGljZXNbaSArIDFdKTsKLSAgICAgICAgdmVjMiBuZXh0Tm9ybWFsKG5leHQtPnBvc2l0aW9uWzFdIC0gY3VycmVudC0+cG9zaXRpb25bMV0sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSBuZXh0LT5wb3NpdGlvblswXSk7CisgICAgICAgIHZlYzIgbmV4dE5vcm1hbChuZXh0LT55IC0gY3VycmVudC0+eSwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54IC0gbmV4dC0+eCk7CiAgICAgICAgIG5leHROb3JtYWwubm9ybWFsaXplKCk7CiAKICAgICAgICAgdmVjMiB0b3RhbE9mZnNldCA9IHRvdGFsT2Zmc2V0RnJvbU5vcm1hbHMobGFzdE5vcm1hbCwgbmV4dE5vcm1hbCk7CkBAIC01OTgsMzAgKzYxMiwzMCBAQAogICAgICAgICBpbm5lck9mZnNldCAtPSBBQU9mZnNldDsKIAogICAgICAgICBBbHBoYVZlcnRleDo6c2V0KCZidWZmZXJbY3VycmVudEFBT3V0ZXJJbmRleCsrXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSArIG91dGVyT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gKyBvdXRlck9mZnNldC55LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggKyBvdXRlck9mZnNldC54LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnkgKyBvdXRlck9mZnNldC55LAogICAgICAgICAgICAgICAgIDAuMGYpOwogICAgICAgICBBbHBoYVZlcnRleDo6c2V0KCZidWZmZXJbY3VycmVudEFBT3V0ZXJJbmRleCsrXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSArIGlubmVyT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gKyBpbm5lck9mZnNldC55LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggKyBpbm5lck9mZnNldC54LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnkgKyBpbm5lck9mZnNldC55LAogICAgICAgICAgICAgICAgIHBhaW50SW5mby5tYXhBbHBoYSk7CiAKICAgICAgICAgQWxwaGFWZXJ0ZXg6OnNldCgmYnVmZmVyW2N1cnJlbnRTdHJva2VJbmRleCsrXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSArIGlubmVyT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gKyBpbm5lck9mZnNldC55LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggKyBpbm5lck9mZnNldC54LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnkgKyBpbm5lck9mZnNldC55LAogICAgICAgICAgICAgICAgIHBhaW50SW5mby5tYXhBbHBoYSk7CiAgICAgICAgIEFscGhhVmVydGV4OjpzZXQoJmJ1ZmZlcltjdXJyZW50U3Ryb2tlSW5kZXgrK10sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSBpbm5lck9mZnNldC54LAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzFdIC0gaW5uZXJPZmZzZXQueSwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54IC0gaW5uZXJPZmZzZXQueCwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT55IC0gaW5uZXJPZmZzZXQueSwKICAgICAgICAgICAgICAgICBwYWludEluZm8ubWF4QWxwaGEpOwogCiAgICAgICAgIEFscGhhVmVydGV4OjpzZXQoJmJ1ZmZlcltjdXJyZW50QUFJbm5lckluZGV4LS1dLAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzBdIC0gaW5uZXJPZmZzZXQueCwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblsxXSAtIGlubmVyT2Zmc2V0LnksCisgICAgICAgICAgICAgICAgY3VycmVudC0+eCAtIGlubmVyT2Zmc2V0LngsCisgICAgICAgICAgICAgICAgY3VycmVudC0+eSAtIGlubmVyT2Zmc2V0LnksCiAgICAgICAgICAgICAgICAgcGFpbnRJbmZvLm1heEFscGhhKTsKICAgICAgICAgQWxwaGFWZXJ0ZXg6OnNldCgmYnVmZmVyW2N1cnJlbnRBQUlubmVySW5kZXgtLV0sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSBvdXRlck9mZnNldC54LAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzFdIC0gb3V0ZXJPZmZzZXQueSwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54IC0gb3V0ZXJPZmZzZXQueCwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT55IC0gb3V0ZXJPZmZzZXQueSwKICAgICAgICAgICAgICAgICAwLjBmKTsKIAogICAgICAgICBjdXJyZW50ID0gbmV4dDsKQEAgLTY0NiwxMyArNjYwLDEzIEBACiAKICAgICBjb25zdCBWZXJ0ZXgqIGxhc3QgPSAmKHBlcmltZXRlcltwZXJpbWV0ZXIuc2l6ZSgpIC0gMV0pOwogICAgIGNvbnN0IFZlcnRleCogY3VycmVudCA9ICYocGVyaW1ldGVyWzBdKTsKLSAgICB2ZWMyIGxhc3ROb3JtYWwoY3VycmVudC0+cG9zaXRpb25bMV0gLSBsYXN0LT5wb3NpdGlvblsxXSwKLSAgICAgICAgICAgIGxhc3QtPnBvc2l0aW9uWzBdIC0gY3VycmVudC0+cG9zaXRpb25bMF0pOworICAgIHZlYzIgbGFzdE5vcm1hbChjdXJyZW50LT55IC0gbGFzdC0+eSwKKyAgICAgICAgICAgIGxhc3QtPnggLSBjdXJyZW50LT54KTsKICAgICBsYXN0Tm9ybWFsLm5vcm1hbGl6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGVyaW1ldGVyLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGNvbnN0IFZlcnRleCogbmV4dCA9ICYocGVyaW1ldGVyW2kgKyAxID49IHBlcmltZXRlci5zaXplKCkgPyAwIDogaSArIDFdKTsKLSAgICAgICAgdmVjMiBuZXh0Tm9ybWFsKG5leHQtPnBvc2l0aW9uWzFdIC0gY3VycmVudC0+cG9zaXRpb25bMV0sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSBuZXh0LT5wb3NpdGlvblswXSk7CisgICAgICAgIHZlYzIgbmV4dE5vcm1hbChuZXh0LT55IC0gY3VycmVudC0+eSwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54IC0gbmV4dC0+eCk7CiAgICAgICAgIG5leHROb3JtYWwubm9ybWFsaXplKCk7CiAKICAgICAgICAgdmVjMiB0b3RhbE9mZnNldCA9IHRvdGFsT2Zmc2V0RnJvbU5vcm1hbHMobGFzdE5vcm1hbCwgbmV4dE5vcm1hbCk7CkBAIC02NjQsMzAgKzY3OCwzMCBAQAogICAgICAgICBpbm5lck9mZnNldCAtPSBBQU9mZnNldDsKIAogICAgICAgICBBbHBoYVZlcnRleDo6c2V0KCZidWZmZXJbY3VycmVudEFBT3V0ZXJJbmRleCsrXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSArIG91dGVyT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gKyBvdXRlck9mZnNldC55LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggKyBvdXRlck9mZnNldC54LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnkgKyBvdXRlck9mZnNldC55LAogICAgICAgICAgICAgICAgIDAuMGYpOwogICAgICAgICBBbHBoYVZlcnRleDo6c2V0KCZidWZmZXJbY3VycmVudEFBT3V0ZXJJbmRleCsrXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSArIGlubmVyT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gKyBpbm5lck9mZnNldC55LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggKyBpbm5lck9mZnNldC54LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnkgKyBpbm5lck9mZnNldC55LAogICAgICAgICAgICAgICAgIHBhaW50SW5mby5tYXhBbHBoYSk7CiAKICAgICAgICAgQWxwaGFWZXJ0ZXg6OnNldCgmYnVmZmVyW2N1cnJlbnRTdHJva2VJbmRleCsrXSwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblswXSArIGlubmVyT2Zmc2V0LngsCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMV0gKyBpbm5lck9mZnNldC55LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnggKyBpbm5lck9mZnNldC54LAorICAgICAgICAgICAgICAgIGN1cnJlbnQtPnkgKyBpbm5lck9mZnNldC55LAogICAgICAgICAgICAgICAgIHBhaW50SW5mby5tYXhBbHBoYSk7CiAgICAgICAgIEFscGhhVmVydGV4OjpzZXQoJmJ1ZmZlcltjdXJyZW50U3Ryb2tlSW5kZXgrK10sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSBpbm5lck9mZnNldC54LAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzFdIC0gaW5uZXJPZmZzZXQueSwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54IC0gaW5uZXJPZmZzZXQueCwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT55IC0gaW5uZXJPZmZzZXQueSwKICAgICAgICAgICAgICAgICBwYWludEluZm8ubWF4QWxwaGEpOwogCiAgICAgICAgIEFscGhhVmVydGV4OjpzZXQoJmJ1ZmZlcltjdXJyZW50QUFJbm5lckluZGV4KytdLAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzBdIC0gaW5uZXJPZmZzZXQueCwKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5wb3NpdGlvblsxXSAtIGlubmVyT2Zmc2V0LnksCisgICAgICAgICAgICAgICAgY3VycmVudC0+eCAtIGlubmVyT2Zmc2V0LngsCisgICAgICAgICAgICAgICAgY3VycmVudC0+eSAtIGlubmVyT2Zmc2V0LnksCiAgICAgICAgICAgICAgICAgcGFpbnRJbmZvLm1heEFscGhhKTsKICAgICAgICAgQWxwaGFWZXJ0ZXg6OnNldCgmYnVmZmVyW2N1cnJlbnRBQUlubmVySW5kZXgrK10sCi0gICAgICAgICAgICAgICAgY3VycmVudC0+cG9zaXRpb25bMF0gLSBvdXRlck9mZnNldC54LAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnBvc2l0aW9uWzFdIC0gb3V0ZXJPZmZzZXQueSwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT54IC0gb3V0ZXJPZmZzZXQueCwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT55IC0gb3V0ZXJPZmZzZXQueSwKICAgICAgICAgICAgICAgICAwLjBmKTsKIAogICAgICAgICBsYXN0ID0gY3VycmVudDsKQEAgLTc0Myw3ICs3NTcsNyBAQAogI2lmIFZFUlRFWF9ERUJVRwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdGVtcFZlcnRpY2VzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIEFMT0dEKCJvcmlnIHBhdGg6IHBvaW50IGF0ICVmICVmIiwKLSAgICAgICAgICAgICAgICB0ZW1wVmVydGljZXNbaV0ucG9zaXRpb25bMF0sIHRlbXBWZXJ0aWNlc1tpXS5wb3NpdGlvblsxXSk7CisgICAgICAgICAgICAgICAgdGVtcFZlcnRpY2VzW2ldLngsIHRlbXBWZXJ0aWNlc1tpXS55KTsKICAgICB9CiAjZW5kaWYKIApAQCAtNzgwLDcgKzc5NCw3IEBACiAgICAgcmVjdC5mQm90dG9tID0gZm1heGYocmVjdC5mQm90dG9tLCB5KTsKIH0KIHN0YXRpYyB2b2lkIGV4cGFuZFJlY3RUb0NvdmVyVmVydGV4KFNrUmVjdCYgcmVjdCwgY29uc3QgVmVydGV4JiB2ZXJ0ZXgpIHsKLSAgICBleHBhbmRSZWN0VG9Db3ZlclZlcnRleChyZWN0LCB2ZXJ0ZXgucG9zaXRpb25bMF0sIHZlcnRleC5wb3NpdGlvblsxXSk7CisgICAgZXhwYW5kUmVjdFRvQ292ZXJWZXJ0ZXgocmVjdCwgdmVydGV4LngsIHZlcnRleC55KTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFRZUEU+CkBAIC04MjksMTEgKzg0MywxNCBAQAogICAgICAgICBnZXRGaWxsVmVydGljZXNGcm9tUGVyaW1ldGVyKG91dGxpbmVWZXJ0aWNlcywgdGVtcEJ1ZmZlcik7CiAgICAgICAgIGluc3RhbmNlVmVydGljZXM8VmVydGV4Pih0ZW1wQnVmZmVyLCB2ZXJ0ZXhCdWZmZXIsIHBvaW50cywgY291bnQsIGJvdW5kcyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZ2V0RmlsbFZlcnRpY2VzRnJvbVBlcmltZXRlckFBKHBhaW50SW5mbywgb3V0bGluZVZlcnRpY2VzLCB0ZW1wQnVmZmVyKTsKKyAgICAgICAgLy8gbm90ZTogcGFzcyBtYXhBbHBoYSBkaXJlY3RseSwgc2luY2Ugd2Ugd2FudCBmaWxsIHRvIGJlIGFscGhhIG1vZHVsYXRlZAorICAgICAgICBnZXRGaWxsVmVydGljZXNGcm9tUGVyaW1ldGVyQUEocGFpbnRJbmZvLCBvdXRsaW5lVmVydGljZXMsIHRlbXBCdWZmZXIsIHBhaW50SW5mby5tYXhBbHBoYSk7CiAgICAgICAgIGluc3RhbmNlVmVydGljZXM8QWxwaGFWZXJ0ZXg+KHRlbXBCdWZmZXIsIHZlcnRleEJ1ZmZlciwgcG9pbnRzLCBjb3VudCwgYm91bmRzKTsKICAgICB9CiAKLSAgICBleHBhbmRCb3VuZHNGb3JTdHJva2UoYm91bmRzLCBwYWludCwgdHJ1ZSk7IC8vIGZvcmNlLWV4cGFuZCBib3VuZHMgdG8gaW5jb3Jwb3JhdGUgc3Ryb2tlCisgICAgLy8gZXhwYW5kIGJvdW5kcyBmcm9tIHZlcnRleCBjb29yZHMgdG8gcGl4ZWwgZGF0YQorICAgIHBhaW50SW5mby5leHBhbmRCb3VuZHNGb3JTdHJva2VBQShib3VuZHMpOworCiB9CiAKIHZvaWQgUGF0aFRlc3NlbGxhdG9yOjp0ZXNzZWxsYXRlTGluZXMoY29uc3QgZmxvYXQqIHBvaW50cywgaW50IGNvdW50LCBTa1BhaW50KiBwYWludCwKQEAgLTg3MywxNCArODkwLDE1IEBACiAgICAgICAgIGV4cGFuZFJlY3RUb0NvdmVyVmVydGV4KGJvdW5kcywgdGVtcFZlcnRpY2VzRGF0YVsxXSk7CiAgICAgfQogCi0gICAgZXhwYW5kQm91bmRzRm9yU3Ryb2tlKGJvdW5kcywgcGFpbnQsIHRydWUpOyAvLyBmb3JjZS1leHBhbmQgYm91bmRzIHRvIGluY29ycG9yYXRlIHN0cm9rZQotCiAgICAgLy8gc2luY2UgbXVsdGlwbGUgb2JqZWN0cyB0ZXNzZWxsYXRlZCBpbnRvIGJ1ZmZlciwgc2VwYXJhdGUgdGhlbSB3aXRoIGRlZ2VuIHRyaXMKICAgICBpZiAocGFpbnRJbmZvLmlzQUEpIHsKICAgICAgICAgdmVydGV4QnVmZmVyLmNyZWF0ZURlZ2VuZXJhdGVTZXBhcmF0b3JzPEFscGhhVmVydGV4PihsaW5lQWxsb2NTaXplKTsKICAgICB9IGVsc2UgewogICAgICAgICB2ZXJ0ZXhCdWZmZXIuY3JlYXRlRGVnZW5lcmF0ZVNlcGFyYXRvcnM8VmVydGV4PihsaW5lQWxsb2NTaXplKTsKICAgICB9CisKKyAgICAvLyBleHBhbmQgYm91bmRzIGZyb20gdmVydGV4IGNvb3JkcyB0byBwaXhlbCBkYXRhCisgICAgcGFpbnRJbmZvLmV4cGFuZEJvdW5kc0ZvclN0cm9rZUFBKGJvdW5kcyk7CiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTkzOSw4ICs5NTcsOCBAQAogICAgIH0KIAogICAgIGludCBzaXplID0gb3V0cHV0VmVydGljZXMuc2l6ZSgpOwotICAgIGlmIChzaXplID49IDIgJiYgb3V0cHV0VmVydGljZXNbMF0ucG9zaXRpb25bMF0gPT0gb3V0cHV0VmVydGljZXNbc2l6ZSAtIDFdLnBvc2l0aW9uWzBdICYmCi0gICAgICAgICAgICBvdXRwdXRWZXJ0aWNlc1swXS5wb3NpdGlvblsxXSA9PSBvdXRwdXRWZXJ0aWNlc1tzaXplIC0gMV0ucG9zaXRpb25bMV0pIHsKKyAgICBpZiAoc2l6ZSA+PSAyICYmIG91dHB1dFZlcnRpY2VzWzBdLnggPT0gb3V0cHV0VmVydGljZXNbc2l6ZSAtIDFdLnggJiYKKyAgICAgICAgICAgIG91dHB1dFZlcnRpY2VzWzBdLnkgPT0gb3V0cHV0VmVydGljZXNbc2l6ZSAtIDFdLnkpIHsKICAgICAgICAgb3V0cHV0VmVydGljZXMucG9wKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9QYXRoVGVzc2VsbGF0b3IuaCBiL2xpYnMvaHd1aS9QYXRoVGVzc2VsbGF0b3IuaAppbmRleCA4NTc5N2ZjLi5lMDA0NGU4IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvUGF0aFRlc3NlbGxhdG9yLmgKKysrIGIvbGlicy9od3VpL1BhdGhUZXNzZWxsYXRvci5oCkBAIC0xMDIsNyArMTAyLDcgQEAKIAogY2xhc3MgUGF0aFRlc3NlbGxhdG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBleHBhbmRCb3VuZHNGb3JTdHJva2UoU2tSZWN0JiBib3VuZHMsIGNvbnN0IFNrUGFpbnQqIHBhaW50LCBib29sIGZvcmNlRXhwYW5kKTsKKyAgICBzdGF0aWMgdm9pZCBleHBhbmRCb3VuZHNGb3JTdHJva2UoU2tSZWN0JiBib3VuZHMsIGNvbnN0IFNrUGFpbnQqIHBhaW50KTsKIAogICAgIHN0YXRpYyB2b2lkIHRlc3NlbGxhdGVQYXRoKGNvbnN0IFNrUGF0aCYgcGF0aCwgY29uc3QgU2tQYWludCogcGFpbnQsCiAgICAgICAgICAgICBjb25zdCBtYXQ0ICp0cmFuc2Zvcm0sIFZlcnRleEJ1ZmZlciYgdmVydGV4QnVmZmVyKTsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9Qcm9ncmFtLmggYi9saWJzL2h3dWkvUHJvZ3JhbS5oCmluZGV4IDRmOTRhZmMuLmJjMGYyMTEgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9Qcm9ncmFtLmgKKysrIGIvbGlicy9od3VpL1Byb2dyYW0uaApAQCAtMjA3LDcgKzIwNyw3IEBACiAgICAgICogdGhlIGZyYWdtZW50IHNoYWRlci4gV2hlbiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIHRoZSBwcm9ncmFtIHNob3VsZAogICAgICAqIGJlIHByb3ZpZGVkIHdpdGggYSBtb2R1bGF0aW9uIGNvbG9yLgogICAgICAqLwotICAgIGJvb2wgc2V0Q29sb3IoY29uc3QgZmxvYXQgciwgY29uc3QgZmxvYXQgZywgY29uc3QgZmxvYXQgYiwgY29uc3QgZmxvYXQgYSkgeworICAgIGJvb2wgc2V0Q29sb3JNb2R1bGF0ZShjb25zdCBmbG9hdCBhKSB7CiAgICAgICAgIG1vZHVsYXRlID0gYSA8IENPTE9SX0NPTVBPTkVOVF9USFJFU0hPTEQ7CiAgICAgICAgIHJldHVybiBtb2R1bGF0ZTsKICAgICB9CkBAIC0yMTcsNyArMjE3LDcgQEAKICAgICAgKiB0aGUgZnJhZ21lbnQgc2hhZGVyLiBXaGVuIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlIHByb2dyYW0gc2hvdWxkCiAgICAgICogYmUgcHJvdmlkZWQgd2l0aCBhIG1vZHVsYXRpb24gY29sb3IuCiAgICAgICovCi0gICAgYm9vbCBzZXRBbHBoYThDb2xvcihjb25zdCBmbG9hdCByLCBjb25zdCBmbG9hdCBnLCBjb25zdCBmbG9hdCBiLCBjb25zdCBmbG9hdCBhKSB7CisgICAgYm9vbCBzZXRBbHBoYThDb2xvck1vZHVsYXRlKGNvbnN0IGZsb2F0IHIsIGNvbnN0IGZsb2F0IGcsIGNvbnN0IGZsb2F0IGIsIGNvbnN0IGZsb2F0IGEpIHsKICAgICAgICAgbW9kdWxhdGUgPSBhIDwgQ09MT1JfQ09NUE9ORU5UX1RIUkVTSE9MRCB8fCByID4gQ09MT1JfQ09NUE9ORU5UX0lOVl9USFJFU0hPTEQgfHwKICAgICAgICAgICAgICAgICBnID4gQ09MT1JfQ09NUE9ORU5UX0lOVl9USFJFU0hPTEQgfHwgYiA+IENPTE9SX0NPTVBPTkVOVF9JTlZfVEhSRVNIT0xEOwogICAgICAgICByZXR1cm4gbW9kdWxhdGU7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvUmVjdC5oIGIvbGlicy9od3VpL1JlY3QuaAppbmRleCBkYWJkOGQ0Li44M2IzNDM2IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvUmVjdC5oCisrKyBiL2xpYnMvaHd1aS9SZWN0LmgKQEAgLTIxMyw2ICsyMTMsMTMgQEAKICAgICAgICAgYm90dG9tID0gZmxvb3JmKGJvdHRvbSArIDAuNWYpOwogICAgIH0KIAorICAgIHZvaWQgcm91bmRPdXQoKSB7CisgICAgICAgIGxlZnQgPSBmbG9vcmYobGVmdCk7CisgICAgICAgIHRvcCA9IGZsb29yZih0b3ApOworICAgICAgICByaWdodCA9IGNlaWxmKHJpZ2h0KTsKKyAgICAgICAgYm90dG9tID0gY2VpbGYoYm90dG9tKTsKKyAgICB9CisKICAgICB2b2lkIGR1bXAoKSBjb25zdCB7CiAgICAgICAgIEFMT0dEKCJSZWN0W2w9JWYgdD0lZiByPSVmIGI9JWZdIiwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICB9CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvU2tpYVNoYWRlci5jcHAgYi9saWJzL2h3dWkvU2tpYVNoYWRlci5jcHAKaW5kZXggNzk3ZWQxMC4uNGYyYTQzMiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1NraWFTaGFkZXIuY3BwCisrKyBiL2xpYnMvaHd1aS9Ta2lhU2hhZGVyLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBACiB9CiAKIHZvaWQgU2tpYUJpdG1hcFNoYWRlcjo6c2V0dXBQcm9ncmFtKFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IG1hdDQmIG1vZGVsVmlldywKLSAgICAgICAgY29uc3QgU25hcHNob3QmIHNuYXBzaG90LCBHTHVpbnQqIHRleHR1cmVVbml0KSB7CisgICAgICAgIGNvbnN0IFNuYXBzaG90JiwgR0x1aW50KiB0ZXh0dXJlVW5pdCkgewogICAgIEdMdWludCB0ZXh0dXJlU2xvdCA9ICgqdGV4dHVyZVVuaXQpKys7CiAgICAgQ2FjaGVzOjpnZXRJbnN0YW5jZSgpLmFjdGl2ZVRleHR1cmUodGV4dHVyZVNsb3QpOwogCkBAIC0yMjgsNyArMjI4LDcgQEAKIH0KIAogdm9pZCBTa2lhTGluZWFyR3JhZGllbnRTaGFkZXI6OnNldHVwUHJvZ3JhbShQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBtYXQ0JiBtb2RlbFZpZXcsCi0gICAgICAgIGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCwgR0x1aW50KiB0ZXh0dXJlVW5pdCkgeworICAgICAgICBjb25zdCBTbmFwc2hvdCYsIEdMdWludCogdGV4dHVyZVVuaXQpIHsKICAgICBpZiAoQ0NfVU5MSUtFTFkoIW1Jc1NpbXBsZSkpIHsKICAgICAgICAgR0x1aW50IHRleHR1cmVTbG90ID0gKCp0ZXh0dXJlVW5pdCkrKzsKICAgICAgICAgQ2FjaGVzOjpnZXRJbnN0YW5jZSgpLmFjdGl2ZVRleHR1cmUodGV4dHVyZVNsb3QpOwpAQCAtMjY0LDcgKzI2NCw3IEBACiBTa2lhQ2lyY3VsYXJHcmFkaWVudFNoYWRlcjo6U2tpYUNpcmN1bGFyR3JhZGllbnRTaGFkZXIoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgcmFkaXVzLAogICAgICAgICB1aW50MzJfdCogY29sb3JzLCBmbG9hdCogcG9zaXRpb25zLCBpbnQgY291bnQsIFNrU2hhZGVyKiBrZXksIFNrU2hhZGVyOjpUaWxlTW9kZSB0aWxlTW9kZSwKICAgICAgICAgU2tNYXRyaXgqIG1hdHJpeCwgYm9vbCBibGVuZCk6Ci0gICAgICAgIFNraWFTd2VlcEdyYWRpZW50U2hhZGVyKGtDaXJjdWxhckdyYWRpZW50LCB4LCB5LCBjb2xvcnMsIHBvc2l0aW9ucywgY291bnQsIGtleSwKKyAgICAgICAgU2tpYVN3ZWVwR3JhZGllbnRTaGFkZXIoa0NpcmN1bGFyR3JhZGllbnQsIGNvbG9ycywgcG9zaXRpb25zLCBjb3VudCwga2V5LAogICAgICAgICAgICAgICAgIHRpbGVNb2RlLCBtYXRyaXgsIGJsZW5kKSB7CiAgICAgU2tNYXRyaXggdW5pdE1hdHJpeDsKICAgICB0b0NpcmN1bGFyVW5pdE1hdHJpeCh4LCB5LCByYWRpdXMsICZ1bml0TWF0cml4KTsKQEAgLTMxNCwxMSArMzE0LDEyIEBACiAgICAgbUlzU2ltcGxlID0gY291bnQgPT0gMjsKIH0KIAotU2tpYVN3ZWVwR3JhZGllbnRTaGFkZXI6OlNraWFTd2VlcEdyYWRpZW50U2hhZGVyKFR5cGUgdHlwZSwgZmxvYXQgeCwgZmxvYXQgeSwgdWludDMyX3QqIGNvbG9ycywKK1NraWFTd2VlcEdyYWRpZW50U2hhZGVyOjpTa2lhU3dlZXBHcmFkaWVudFNoYWRlcihUeXBlIHR5cGUsIHVpbnQzMl90KiBjb2xvcnMsCiAgICAgICAgIGZsb2F0KiBwb3NpdGlvbnMsIGludCBjb3VudCwgU2tTaGFkZXIqIGtleSwgU2tTaGFkZXI6OlRpbGVNb2RlIHRpbGVNb2RlLAogICAgICAgICBTa01hdHJpeCogbWF0cml4LCBib29sIGJsZW5kKToKICAgICAgICAgU2tpYVNoYWRlcih0eXBlLCBrZXksIHRpbGVNb2RlLCB0aWxlTW9kZSwgbWF0cml4LCBibGVuZCksCiAgICAgICAgIG1Db2xvcnMoY29sb3JzKSwgbVBvc2l0aW9ucyhwb3NpdGlvbnMpLCBtQ291bnQoY291bnQpIHsKKyAgICAvLyBwcm90ZWN0ZWQgbWV0aG9kLCB0aGF0IGRvZXNuJ3Qgc2V0dXAgbVVuaXRNYXRyaXggLSBzaG91bGQgYmUgaGFuZGxlZCBieSBzdWJjbGFzcwogCiAgICAgbUlzU2ltcGxlID0gY291bnQgPT0gMiAmJiB0aWxlTW9kZSA9PSBTa1NoYWRlcjo6a0NsYW1wX1RpbGVNb2RlOwogfQpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1NraWFTaGFkZXIuaCBiL2xpYnMvaHd1aS9Ta2lhU2hhZGVyLmgKaW5kZXggYTYzNDMxYy4uOWZjOTlhNCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1NraWFTaGFkZXIuaAorKysgYi9saWJzL2h3dWkvU2tpYVNoYWRlci5oCkBAIC0xOTIsNyArMTkyLDcgQEAKICAgICAgICAgICAgIEdMdWludCogdGV4dHVyZVVuaXQpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgU2tpYVN3ZWVwR3JhZGllbnRTaGFkZXIoVHlwZSB0eXBlLCBmbG9hdCB4LCBmbG9hdCB5LCB1aW50MzJfdCogY29sb3JzLCBmbG9hdCogcG9zaXRpb25zLAorICAgIFNraWFTd2VlcEdyYWRpZW50U2hhZGVyKFR5cGUgdHlwZSwgdWludDMyX3QqIGNvbG9ycywgZmxvYXQqIHBvc2l0aW9ucywKICAgICAgICAgICAgIGludCBjb3VudCwgU2tTaGFkZXIqIGtleSwgU2tTaGFkZXI6OlRpbGVNb2RlIHRpbGVNb2RlLCBTa01hdHJpeCogbWF0cml4LCBib29sIGJsZW5kKTsKICAgICBTa2lhU3dlZXBHcmFkaWVudFNoYWRlcigpIHsKICAgICB9CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvVGV4dERyb3BTaGFkb3dDYWNoZS5jcHAgYi9saWJzL2h3dWkvVGV4dERyb3BTaGFkb3dDYWNoZS5jcHAKaW5kZXggMGIyYzEzMC4uNmYyN2IzNiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1RleHREcm9wU2hhZG93Q2FjaGUuY3BwCisrKyBiL2xpYnMvaHd1aS9UZXh0RHJvcFNoYWRvd0NhY2hlLmNwcApAQCAtMTQ3LDcgKzE0Nyw3IEBACiAvLyBDYWxsYmFja3MKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotdm9pZCBUZXh0RHJvcFNoYWRvd0NhY2hlOjpvcGVyYXRvcigpKFNoYWRvd1RleHQmIHRleHQsIFNoYWRvd1RleHR1cmUqJiB0ZXh0dXJlKSB7Cit2b2lkIFRleHREcm9wU2hhZG93Q2FjaGU6Om9wZXJhdG9yKCkoU2hhZG93VGV4dCYsIFNoYWRvd1RleHR1cmUqJiB0ZXh0dXJlKSB7CiAgICAgaWYgKHRleHR1cmUpIHsKICAgICAgICAgbVNpemUgLT0gdGV4dHVyZS0+Yml0bWFwU2l6ZTsKIApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1RleHR1cmVDYWNoZS5jcHAgYi9saWJzL2h3dWkvVGV4dHVyZUNhY2hlLmNwcAppbmRleCBlZDBhNzlhLi4xZDRhZjdmIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvVGV4dHVyZUNhY2hlLmNwcAorKysgYi9saWJzL2h3dWkvVGV4dHVyZUNhY2hlLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBACiAvLyBDYWxsYmFja3MKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotdm9pZCBUZXh0dXJlQ2FjaGU6Om9wZXJhdG9yKCkoU2tCaXRtYXAqJiBiaXRtYXAsIFRleHR1cmUqJiB0ZXh0dXJlKSB7Cit2b2lkIFRleHR1cmVDYWNoZTo6b3BlcmF0b3IoKShTa0JpdG1hcComLCBUZXh0dXJlKiYgdGV4dHVyZSkgewogICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgYWxyZWFkeSBsb2NrZWQKICAgICBpZiAodGV4dHVyZSkgewogICAgICAgICBtU2l6ZSAtPSB0ZXh0dXJlLT5iaXRtYXBTaXplOwpAQCAtMjM3LDcgKzIzNyw3IEBACiAKICAgICBDYWNoZXM6OmdldEluc3RhbmNlKCkuYmluZFRleHR1cmUodGV4dHVyZS0+aWQpOwogCi0gICAgc3dpdGNoIChiaXRtYXAtPmdldENvbmZpZygpKSB7CisgICAgc3dpdGNoIChiaXRtYXAtPmNvbmZpZygpKSB7CiAgICAgY2FzZSBTa0JpdG1hcDo6a0E4X0NvbmZpZzoKICAgICAgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKICAgICAgICAgdXBsb2FkVG9UZXh0dXJlKHJlc2l6ZSwgR0xfQUxQSEEsIGJpdG1hcC0+cm93Qnl0ZXNBc1BpeGVscygpLApAQCAtMjY1LDcgKzI2NSw3IEBACiAgICAgICAgIHRleHR1cmUtPmJsZW5kID0gIWJpdG1hcC0+aXNPcGFxdWUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQUxPR1coIlVuc3VwcG9ydGVkIGJpdG1hcCBjb25maWc6ICVkIiwgYml0bWFwLT5nZXRDb25maWcoKSk7CisgICAgICAgIEFMT0dXKCJVbnN1cHBvcnRlZCBiaXRtYXAgY29uZmlnOiAlZCIsIGJpdG1hcC0+Y29uZmlnKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9WZXJ0ZXguaCBiL2xpYnMvaHd1aS9WZXJ0ZXguaAppbmRleCA3OTBkNGZjLi4zNTFjZTcxIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvVmVydGV4LmgKKysrIGIvbGlicy9od3VpL1ZlcnRleC5oCkBAIC0zNSwxMSArMzUsMTEgQEAKICAgICAgKi8KICAgICBzdGF0aWMgY29uc3QgZmxvYXQgZ0dlb21ldHJ5RnVkZ2VGYWN0b3IgPSAwLjA2NTZmOwogCi0gICAgZmxvYXQgcG9zaXRpb25bMl07CisgICAgZmxvYXQgeCwgeTsKIAogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXQoVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgdmVydGV4WzBdLnBvc2l0aW9uWzBdID0geDsKLSAgICAgICAgdmVydGV4WzBdLnBvc2l0aW9uWzFdID0geTsKKyAgICAgICAgdmVydGV4WzBdLnggPSB4OworICAgICAgICB2ZXJ0ZXhbMF0ueSA9IHk7CiAgICAgfQogCiAgICAgc3RhdGljIGlubGluZSB2b2lkIHNldChWZXJ0ZXgqIHZlcnRleCwgdmVjMiB2YWwpIHsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICB9CiAKICAgICBzdGF0aWMgaW5saW5lIHZvaWQgY29weVdpdGhPZmZzZXQoVmVydGV4KiB2ZXJ0ZXgsIGNvbnN0IFZlcnRleCYgc3JjLCBmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIHNldCh2ZXJ0ZXgsIHNyYy5wb3NpdGlvblswXSArIHgsIHNyYy5wb3NpdGlvblsxXSArIHkpOworICAgICAgICBzZXQodmVydGV4LCBzcmMueCArIHgsIHNyYy55ICsgeSk7CiAgICAgfQogCiB9OyAvLyBzdHJ1Y3QgVmVydGV4CkBAIC01NiwxOSArNTYsMTkgQEAKICAqIFNpbXBsZSBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgYSB2ZXJ0ZXggd2l0aCBhIHBvc2l0aW9uIGFuZCB0ZXh0dXJlIFVWLgogICovCiBzdHJ1Y3QgVGV4dHVyZVZlcnRleCB7Ci0gICAgZmxvYXQgcG9zaXRpb25bMl07Ci0gICAgZmxvYXQgdGV4dHVyZVsyXTsKKyAgICBmbG9hdCB4LCB5OworICAgIGZsb2F0IHUsIHY7CiAKICAgICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0KFRleHR1cmVWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxvYXQgdikgewotICAgICAgICB2ZXJ0ZXhbMF0ucG9zaXRpb25bMF0gPSB4OwotICAgICAgICB2ZXJ0ZXhbMF0ucG9zaXRpb25bMV0gPSB5OwotICAgICAgICB2ZXJ0ZXhbMF0udGV4dHVyZVswXSA9IHU7Ci0gICAgICAgIHZlcnRleFswXS50ZXh0dXJlWzFdID0gdjsKKyAgICAgICAgdmVydGV4WzBdLnggPSB4OworICAgICAgICB2ZXJ0ZXhbMF0ueSA9IHk7CisgICAgICAgIHZlcnRleFswXS51ID0gdTsKKyAgICAgICAgdmVydGV4WzBdLnYgPSB2OwogICAgIH0KIAogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRVVihUZXh0dXJlVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHUsIGZsb2F0IHYpIHsKLSAgICAgICAgdmVydGV4WzBdLnRleHR1cmVbMF0gPSB1OwotICAgICAgICB2ZXJ0ZXhbMF0udGV4dHVyZVsxXSA9IHY7CisgICAgICAgIHZlcnRleFswXS51ID0gdTsKKyAgICAgICAgdmVydGV4WzBdLnYgPSB2OwogICAgIH0KIH07IC8vIHN0cnVjdCBUZXh0dXJlVmVydGV4CiAKQEAgLTc2LDE3ICs3NiwxNyBAQAogICogU2ltcGxlIHN0cnVjdHVyZSB0byBkZXNjcmliZSBhIHZlcnRleCB3aXRoIGEgcG9zaXRpb24sIHRleHR1cmUgVVYgYW5kIEFSR0IgY29sb3IuCiAgKi8KIHN0cnVjdCBDb2xvclRleHR1cmVWZXJ0ZXggOiBUZXh0dXJlVmVydGV4IHsKLSAgICBmbG9hdCBjb2xvcls0XTsKKyAgICBmbG9hdCByLCBnLCBiLCBhOwogCiAgICAgc3RhdGljIGlubGluZSB2b2lkIHNldChDb2xvclRleHR1cmVWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwKICAgICAgICAgICAgIGZsb2F0IHUsIGZsb2F0IHYsIGludCBjb2xvcikgewogICAgICAgICBUZXh0dXJlVmVydGV4OjpzZXQodmVydGV4LCB4LCB5LCB1LCB2KTsKIAogICAgICAgICBjb25zdCBmbG9hdCBhID0gKChjb2xvciA+PiAyNCkgJiAweGZmKSAvIDI1NS4wZjsKLSAgICAgICAgdmVydGV4WzBdLmNvbG9yWzBdID0gYSAqICgoY29sb3IgPj4gMTYpICYgMHhmZikgLyAyNTUuMGY7Ci0gICAgICAgIHZlcnRleFswXS5jb2xvclsxXSA9IGEgKiAoKGNvbG9yID4+ICA4KSAmIDB4ZmYpIC8gMjU1LjBmOwotICAgICAgICB2ZXJ0ZXhbMF0uY29sb3JbMl0gPSBhICogKChjb2xvciAgICAgICkgJiAweGZmKSAvIDI1NS4wZjsKLSAgICAgICAgdmVydGV4WzBdLmNvbG9yWzNdID0gYTsKKyAgICAgICAgdmVydGV4WzBdLnIgPSBhICogKChjb2xvciA+PiAxNikgJiAweGZmKSAvIDI1NS4wZjsKKyAgICAgICAgdmVydGV4WzBdLmcgPSBhICogKChjb2xvciA+PiAgOCkgJiAweGZmKSAvIDI1NS4wZjsKKyAgICAgICAgdmVydGV4WzBdLmIgPSBhICogKChjb2xvciAgICAgICkgJiAweGZmKSAvIDI1NS4wZjsKKyAgICAgICAgdmVydGV4WzBdLmEgPSBhOwogICAgIH0KIH07IC8vIHN0cnVjdCBDb2xvclRleHR1cmVWZXJ0ZXgKIApAQCAtMTAzLDcgKzEwMyw3IEBACiAKICAgICBzdGF0aWMgaW5saW5lIHZvaWQgY29weVdpdGhPZmZzZXQoQWxwaGFWZXJ0ZXgqIHZlcnRleCwgY29uc3QgQWxwaGFWZXJ0ZXgmIHNyYywKICAgICAgICAgICAgIGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgVmVydGV4OjpzZXQodmVydGV4LCBzcmMucG9zaXRpb25bMF0gKyB4LCBzcmMucG9zaXRpb25bMV0gKyB5KTsKKyAgICAgICAgVmVydGV4OjpzZXQodmVydGV4LCBzcmMueCArIHgsIHNyYy55ICsgeSk7CiAgICAgICAgIHZlcnRleFswXS5hbHBoYSA9IHNyYy5hbHBoYTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9mb250L0NhY2hlVGV4dHVyZS5jcHAgYi9saWJzL2h3dWkvZm9udC9DYWNoZVRleHR1cmUuY3BwCmluZGV4IGQ1ZjM4YjUuLjI0ZmZiODAgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9mb250L0NhY2hlVGV4dHVyZS5jcHAKKysrIGIvbGlicy9od3VpL2ZvbnQvQ2FjaGVUZXh0dXJlLmNwcApAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgICAgICBtTWVzaChOVUxMKSwgbUN1cnJlbnRRdWFkKDApLCBtTWF4UXVhZENvdW50KG1heFF1YWRDb3VudCksCiAgICAgICAgICAgICBtQ2FjaGVzKENhY2hlczo6Z2V0SW5zdGFuY2UoKSkgewogICAgIG1DYWNoZUJsb2NrcyA9IG5ldyBDYWNoZUJsb2NrKFRFWFRVUkVfQk9SREVSX1NJWkUsIFRFWFRVUkVfQk9SREVSX1NJWkUsCi0gICAgICAgICAgICBtV2lkdGggLSBURVhUVVJFX0JPUkRFUl9TSVpFLCBtSGVpZ2h0IC0gVEVYVFVSRV9CT1JERVJfU0laRSwgdHJ1ZSk7CisgICAgICAgICAgICBtV2lkdGggLSBURVhUVVJFX0JPUkRFUl9TSVpFLCBtSGVpZ2h0IC0gVEVYVFVSRV9CT1JERVJfU0laRSk7CiAKICAgICAvLyBPcGVuR0wgRVMgMy4wKyBsZXRzIHVzIHNwZWNpZnkgdGhlIHJvdyBsZW5ndGggZm9yIHVucGFjayBvcGVyYXRpb25zIHN1Y2gKICAgICAvLyBhcyBnbFRleFN1YkltYWdlMkQoKS4gVGhpcyBhbGxvd3MgdXMgdG8gdXBsb2FkIGEgc3ViLXJlY3RhbmdsZSBvZiBhIHRleHR1cmUuCkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAvLyByZXNldCwgdGhlbiBjcmVhdGUgYSBuZXcgcmVtYWluZGVyIHNwYWNlIHRvIHN0YXJ0IGFnYWluCiAgICAgcmVzZXQoKTsKICAgICBtQ2FjaGVCbG9ja3MgPSBuZXcgQ2FjaGVCbG9jayhURVhUVVJFX0JPUkRFUl9TSVpFLCBURVhUVVJFX0JPUkRFUl9TSVpFLAotICAgICAgICAgICAgbVdpZHRoIC0gVEVYVFVSRV9CT1JERVJfU0laRSwgbUhlaWdodCAtIFRFWFRVUkVfQk9SREVSX1NJWkUsIHRydWUpOworICAgICAgICAgICAgbVdpZHRoIC0gVEVYVFVSRV9CT1JERVJfU0laRSwgbUhlaWdodCAtIFRFWFRVUkVfQk9SREVSX1NJWkUpOwogfQogCiB2b2lkIENhY2hlVGV4dHVyZTo6cmVsZWFzZU1lc2goKSB7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvZm9udC9DYWNoZVRleHR1cmUuaCBiL2xpYnMvaHd1aS9mb250L0NhY2hlVGV4dHVyZS5oCmluZGV4IDYxYjM4ZjguLjRjYzRmMjIgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9mb250L0NhY2hlVGV4dHVyZS5oCisrKyBiL2xpYnMvaHd1aS9mb250L0NhY2hlVGV4dHVyZS5oCkBAIC01NCw3ICs1NCw3IEBACiAgICAgQ2FjaGVCbG9jayogbU5leHQ7CiAgICAgQ2FjaGVCbG9jayogbVByZXY7CiAKLSAgICBDYWNoZUJsb2NrKHVpbnQxNl90IHgsIHVpbnQxNl90IHksIHVpbnQxNl90IHdpZHRoLCB1aW50MTZfdCBoZWlnaHQsIGJvb2wgZW1wdHkgPSBmYWxzZSk6CisgICAgQ2FjaGVCbG9jayh1aW50MTZfdCB4LCB1aW50MTZfdCB5LCB1aW50MTZfdCB3aWR0aCwgdWludDE2X3QgaGVpZ2h0KToKICAgICAgICAgICAgIG1YKHgpLCBtWSh5KSwgbVdpZHRoKHdpZHRoKSwgbUhlaWdodChoZWlnaHQpLCBtTmV4dChOVUxMKSwgbVByZXYoTlVMTCkgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL2ZvbnQvRm9udC5jcHAgYi9saWJzL2h3dWkvZm9udC9Gb250LmNwcAppbmRleCAxODk4M2Q4Li4zZTAxMjRjIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvZm9udC9Gb250LmNwcAorKysgYi9saWJzL2h3dWkvZm9udC9Gb250LmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPHV0aWxzL1RyYWNlLmg+CiAKICNpbmNsdWRlIDxTa0dseXBoLmg+CisjaW5jbHVkZSA8U2tHbHlwaENhY2hlLmg+CiAjaW5jbHVkZSA8U2tVdGlscy5oPgogCiAjaW5jbHVkZSAiRm9udFV0aWwuaCIKQEAgLTI3MSw4ICsyNzIsOCBAQAogICAgIGlmIChjYWNoZWRHbHlwaCkgewogICAgICAgICAvLyBJcyB0aGUgZ2x5cGggc3RpbGwgaW4gdGV4dHVyZSBjYWNoZT8KICAgICAgICAgaWYgKCFjYWNoZWRHbHlwaC0+bUlzVmFsaWQpIHsKLSAgICAgICAgICAgIGNvbnN0IFNrR2x5cGgmIHNraWFHbHlwaCA9IEdFVF9NRVRSSUNTKHBhaW50LCB0ZXh0VW5pdCwKLSAgICAgICAgICAgICAgICAgICAgJm1EZXNjcmlwdGlvbi5tTG9va3VwVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIFNrQXV0b0dseXBoQ2FjaGUgYXV0b0NhY2hlKCpwYWludCwgTlVMTCwgJm1EZXNjcmlwdGlvbi5tTG9va3VwVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGNvbnN0IFNrR2x5cGgmIHNraWFHbHlwaCA9IEdFVF9NRVRSSUNTKGF1dG9DYWNoZS5nZXRDYWNoZSgpLCB0ZXh0VW5pdCk7CiAgICAgICAgICAgICB1cGRhdGVHbHlwaENhY2hlKHBhaW50LCBza2lhR2x5cGgsIGNhY2hlZEdseXBoLCBwcmVjYWNoaW5nKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC00MjgsOCArNDI5LDkgQEAKICAgICB1aW50MzJfdCBzdGFydFkgPSAwOwogCiAgICAgLy8gR2V0IHRoZSBiaXRtYXAgZm9yIHRoZSBnbHlwaAorICAgIFNrQXV0b0dseXBoQ2FjaGUgYXV0b0NhY2hlKCpwYWludCwgTlVMTCwgJm1EZXNjcmlwdGlvbi5tTG9va3VwVHJhbnNmb3JtKTsKICAgICBpZiAoIXNraWFHbHlwaC5mSW1hZ2UpIHsKLSAgICAgICAgcGFpbnQtPmZpbmRJbWFnZShza2lhR2x5cGgsICZtRGVzY3JpcHRpb24ubUxvb2t1cFRyYW5zZm9ybSk7CisgICAgICAgIGF1dG9DYWNoZS5nZXRDYWNoZSgpLT5maW5kSW1hZ2Uoc2tpYUdseXBoKTsKICAgICB9CiAgICAgbVN0YXRlLT5jYWNoZUJpdG1hcChza2lhR2x5cGgsIGdseXBoLCAmc3RhcnRYLCAmc3RhcnRZLCBwcmVjYWNoaW5nKTsKIApAQCAtNDYzLDcgKzQ2NSw4IEBACiAgICAgQ2FjaGVkR2x5cGhJbmZvKiBuZXdHbHlwaCA9IG5ldyBDYWNoZWRHbHlwaEluZm8oKTsKICAgICBtQ2FjaGVkR2x5cGhzLmFkZChnbHlwaCwgbmV3R2x5cGgpOwogCi0gICAgY29uc3QgU2tHbHlwaCYgc2tpYUdseXBoID0gR0VUX01FVFJJQ1MocGFpbnQsIGdseXBoLCAmbURlc2NyaXB0aW9uLm1Mb29rdXBUcmFuc2Zvcm0pOworICAgIFNrQXV0b0dseXBoQ2FjaGUgYXV0b0NhY2hlKCpwYWludCwgTlVMTCwgJm1EZXNjcmlwdGlvbi5tTG9va3VwVHJhbnNmb3JtKTsKKyAgICBjb25zdCBTa0dseXBoJiBza2lhR2x5cGggPSBHRVRfTUVUUklDUyhhdXRvQ2FjaGUuZ2V0Q2FjaGUoKSwgZ2x5cGgpOwogICAgIG5ld0dseXBoLT5tSXNWYWxpZCA9IGZhbHNlOwogICAgIG5ld0dseXBoLT5tR2x5cGhJbmRleCA9IHNraWFHbHlwaC5mSUQ7CiAKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9mb250L0ZvbnRVdGlsLmggYi9saWJzL2h3dWkvZm9udC9Gb250VXRpbC5oCmluZGV4IGNkY2IyM2MuLmMyZmQ1ZjUgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9mb250L0ZvbnRVdGlsLmgKKysrIGIvbGlicy9od3VpL2ZvbnQvRm9udFV0aWwuaApAQCAtNDAsNyArNDAsNyBAQAogI2lmIFJFTkRFUl9URVhUX0FTX0dMWVBIUwogICAgIHR5cGVkZWYgdWludDE2X3QgZ2x5cGhfdDsKICAgICAjZGVmaW5lIFRPX0dMWVBIKGcpIGcKLSAgICAjZGVmaW5lIEdFVF9NRVRSSUNTKHBhaW50LCBnbHlwaCwgbWF0cml4KSBwYWludC0+Z2V0R2x5cGhNZXRyaWNzKGdseXBoLCBtYXRyaXgpCisgICAgI2RlZmluZSBHRVRfTUVUUklDUyhjYWNoZSwgZ2x5cGgpIGNhY2hlLT5nZXRHbHlwaElETWV0cmljcyhnbHlwaCkKICAgICAjZGVmaW5lIEdFVF9HTFlQSCh0ZXh0KSBuZXh0R2x5cGgoKGNvbnN0IHVpbnQxNl90KiopICZ0ZXh0KQogICAgICNkZWZpbmUgSVNfRU5EX09GX1NUUklORyhnbHlwaCkgZmFsc2UKIApAQCAtNTMsNyArNTMsNyBAQAogI2Vsc2UKICAgICB0eXBlZGVmIFNrVW5pY2hhciBnbHlwaF90OwogICAgICNkZWZpbmUgVE9fR0xZUEgoZykgKChTa1VuaWNoYXIpIGcpCi0gICAgI2RlZmluZSBHRVRfTUVUUklDUyhwYWludCwgZ2x5cGgsIG1hdHJpeCkgcGFpbnQtPmdldFVuaWNoYXJNZXRyaWNzKGdseXBoLCBtYXRyaXgpCisgICAgI2RlZmluZSBHRVRfTUVUUklDUyhjYWNoZSwgZ2x5cGgpIGNhY2hlLT5nZXRVbmljaGFyTWV0cmljcyhnbHlwaCkKICAgICAjZGVmaW5lIEdFVF9HTFlQSCh0ZXh0KSBTa1VURjE2X05leHRVbmljaGFyKChjb25zdCB1aW50MTZfdCoqKSAmdGV4dCkKICAgICAjZGVmaW5lIElTX0VORF9PRl9TVFJJTkcoZ2x5cGgpIGdseXBoIDwgMAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvcmVuZGVydGhyZWFkL1JlbmRlclRhc2suY3BwIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9SZW5kZXJUYXNrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGE5MWM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9SZW5kZXJUYXNrLmNwcApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBMT0dfVEFHICJSZW5kZXJUYXNrIgorCisjaW5jbHVkZSAiUmVuZGVyVGFzay5oIgorCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSB1aXJlbmRlcmVyIHsKK25hbWVzcGFjZSByZW5kZXJ0aHJlYWQgeworCitSZW5kZXJUYXNrOjpSZW5kZXJUYXNrKCkgOiBtTmV4dCgwKSB7Cit9CisKK1JlbmRlclRhc2s6On5SZW5kZXJUYXNrKCkgeworfQorCit9IC8qIG5hbWVzcGFjZSByZW5kZXJ0aHJlYWQgKi8KK30gLyogbmFtZXNwYWNlIHVpcmVuZGVyZXIgKi8KK30gLyogbmFtZXNwYWNlIGFuZHJvaWQgKi8KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvUmVuZGVyVGFzay5oIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9SZW5kZXJUYXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1YjFlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvUmVuZGVyVGFzay5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIFJFTkRFUlRBU0tfSF8KKyNkZWZpbmUgUkVOREVSVEFTS19IXworCisjaW5jbHVkZSA8Y3V0aWxzL2NvbXBpbGVyLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSB1aXJlbmRlcmVyIHsKK25hbWVzcGFjZSByZW5kZXJ0aHJlYWQgeworCitjbGFzcyBBTkRST0lEX0FQSSBSZW5kZXJUYXNrIHsKK3B1YmxpYzoKKyAgICBBTkRST0lEX0FQSSBSZW5kZXJUYXNrKCk7CisgICAgQU5EUk9JRF9BUEkgdmlydHVhbCB+UmVuZGVyVGFzaygpOworCisgICAgQU5EUk9JRF9BUEkgdmlydHVhbCB2b2lkIHJ1bigpID0gMDsKKworICAgIFJlbmRlclRhc2sqIG1OZXh0OworfTsKKworfSAvKiBuYW1lc3BhY2UgcmVuZGVydGhyZWFkICovCit9IC8qIG5hbWVzcGFjZSB1aXJlbmRlcmVyICovCit9IC8qIG5hbWVzcGFjZSBhbmRyb2lkICovCisjZW5kaWYgLyogUkVOREVSVEFTS19IXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3JlbmRlcnRocmVhZC9SZW5kZXJUaHJlYWQuY3BwIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9SZW5kZXJUaHJlYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZDkzMDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvcmVuZGVydGhyZWFkL1JlbmRlclRocmVhZC5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiUmVuZGVyVGhyZWFkIgorCisjaW5jbHVkZSAiUmVuZGVyVGhyZWFkLmgiCisKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgewordXNpbmcgbmFtZXNwYWNlIHVpcmVuZGVyZXI6OnJlbmRlcnRocmVhZDsKK0FORFJPSURfU0lOR0xFVE9OX1NUQVRJQ19JTlNUQU5DRShSZW5kZXJUaHJlYWQpOworCituYW1lc3BhY2UgdWlyZW5kZXJlciB7CituYW1lc3BhY2UgcmVuZGVydGhyZWFkIHsKKworUmVuZGVyVGhyZWFkOjpSZW5kZXJUaHJlYWQoKSA6IFRocmVhZCh0cnVlKSwgU2luZ2xldG9uPFJlbmRlclRocmVhZD4oKQorICAgICAgICAsIG1RdWV1ZUhlYWQoMCksIG1RdWV1ZVRhaWwoMCkgeworICAgIG1Mb29wZXIgPSBuZXcgTG9vcGVyKGZhbHNlKTsKKyAgICBydW4oIlJlbmRlclRocmVhZCIpOworfQorCitSZW5kZXJUaHJlYWQ6On5SZW5kZXJUaHJlYWQoKSB7Cit9CisKK2Jvb2wgUmVuZGVyVGhyZWFkOjp0aHJlYWRMb29wKCkgeworICAgIGZvciAoOzspIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IG1Mb29wZXItPnBvbGxBbGwoLTEpOworICAgICAgICBpZiAocmVzdWx0ID09IEFMT09QRVJfUE9MTF9FUlJPUikgeworICAgICAgICAgICAgLy8gVE9ETyBTb21ldGhpbmc/CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvLyBQcm9jZXNzIG91ciBxdWV1ZSwgaWYgd2UgaGF2ZSBhbnl0aGluZworICAgICAgICB3aGlsZSAoUmVuZGVyVGFzayogdGFzayA9IG5leHRUYXNrKCkpIHsKKyAgICAgICAgICAgIHRhc2stPnJ1bigpOworICAgICAgICAgICAgZGVsZXRlIHRhc2s7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhyZWFkOjpxdWV1ZShSZW5kZXJUYXNrKiB0YXNrKSB7CisgICAgQXV0b011dGV4IF9sb2NrKG1Mb2NrKTsKKyAgICBpZiAobVF1ZXVlVGFpbCkgeworICAgICAgICBtUXVldWVUYWlsLT5tTmV4dCA9IHRhc2s7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbVF1ZXVlSGVhZCA9IHRhc2s7CisgICAgfQorICAgIG1RdWV1ZVRhaWwgPSB0YXNrOworICAgIGlmIChtUXVldWVIZWFkID09IHRhc2spIHsKKyAgICAgICAgLy8gT25seSB3YWtlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRhc2sKKyAgICAgICAgbUxvb3Blci0+d2FrZSgpOworICAgIH0KK30KKworUmVuZGVyVGFzayogUmVuZGVyVGhyZWFkOjpuZXh0VGFzaygpIHsKKyAgICBBdXRvTXV0ZXggX2xvY2sobUxvY2spOworICAgIFJlbmRlclRhc2sqIHJldCA9IG1RdWV1ZUhlYWQ7CisgICAgaWYgKHJldCkgeworICAgICAgICBpZiAobVF1ZXVlVGFpbCA9PSBtUXVldWVIZWFkKSB7CisgICAgICAgICAgICBtUXVldWVUYWlsID0gbVF1ZXVlSGVhZCA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtUXVldWVIZWFkID0gcmV0LT5tTmV4dDsKKyAgICAgICAgfQorICAgICAgICByZXQtPm1OZXh0ID0gMDsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworfSAvKiBuYW1lc3BhY2UgcmVuZGVydGhyZWFkICovCit9IC8qIG5hbWVzcGFjZSB1aXJlbmRlcmVyICovCit9IC8qIG5hbWVzcGFjZSBhbmRyb2lkICovCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvcmVuZGVydGhyZWFkL1JlbmRlclRocmVhZC5oIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9SZW5kZXJUaHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWRkNTc1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9SZW5kZXJUaHJlYWQuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBSRU5ERVJUSFJFQURfSF8KKyNkZWZpbmUgUkVOREVSVEhSRUFEX0hfCisKKyNpbmNsdWRlICJSZW5kZXJUYXNrLmgiCisjaW5jbHVkZSA8Y3V0aWxzL2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8dXRpbHMvTG9vcGVyLmg+CisjaW5jbHVkZSA8dXRpbHMvTXV0ZXguaD4KKyNpbmNsdWRlIDx1dGlscy9TaW5nbGV0b24uaD4KKyNpbmNsdWRlIDx1dGlscy9UaHJlYWQuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIHVpcmVuZGVyZXIgeworbmFtZXNwYWNlIHJlbmRlcnRocmVhZCB7CisKK2NsYXNzIEFORFJPSURfQVBJIFJlbmRlclRocmVhZCA6IHB1YmxpYyBUaHJlYWQsIHB1YmxpYyBTaW5nbGV0b248UmVuZGVyVGhyZWFkPiB7CitwdWJsaWM6CisgICAgLy8gUmVuZGVyVGhyZWFkIHRha2VzIGNvbXBsZXRlIG93bmVyc2hpcCBvZiB0YXNrcyB0aGF0IGFyZSBxdWV1ZWQKKyAgICAvLyBhbmQgd2lsbCBkZWxldGUgdGhlbSBhZnRlciB0aGV5IGFyZSBydW4KKyAgICBBTkRST0lEX0FQSSB2b2lkIHF1ZXVlKFJlbmRlclRhc2sqIHRhc2spOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHRocmVhZExvb3AoKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU2luZ2xldG9uPFJlbmRlclRocmVhZD47CisKKyAgICBSZW5kZXJUaHJlYWQoKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJUaHJlYWQoKTsKKworICAgIFJlbmRlclRhc2sqIG5leHRUYXNrKCk7CisKKyAgICBzcDxMb29wZXI+IG1Mb29wZXI7CisgICAgTXV0ZXggbUxvY2s7CisKKyAgICBSZW5kZXJUYXNrKiBtUXVldWVIZWFkOworICAgIFJlbmRlclRhc2sqIG1RdWV1ZVRhaWw7Cit9OworCit9IC8qIG5hbWVzcGFjZSByZW5kZXJ0aHJlYWQgKi8KK30gLyogbmFtZXNwYWNlIHVpcmVuZGVyZXIgKi8KK30gLyogbmFtZXNwYWNlIGFuZHJvaWQgKi8KKyNlbmRpZiAvKiBSRU5ERVJUSFJFQURfSF8gKi8KZGlmZiAtLWdpdCBhL2xvY2F0aW9uL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvbG9jYXRpb24vR3BzTmV0SW5pdGlhdGVkSGFuZGxlci5qYXZhIGIvbG9jYXRpb24vamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9sb2NhdGlvbi9HcHNOZXRJbml0aWF0ZWRIYW5kbGVyLmphdmEKaW5kZXggNTdlMjc4Ni4uYjMzYmEwMCAxMDA2NDQKLS0tIGEvbG9jYXRpb24vamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9sb2NhdGlvbi9HcHNOZXRJbml0aWF0ZWRIYW5kbGVyLmphdmEKKysrIGIvbG9jYXRpb24vamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9sb2NhdGlvbi9HcHNOZXRJbml0aWF0ZWRIYW5kbGVyLmphdmEKQEAgLTI1LDcgKzI1LDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQubG9jYXRpb24uTG9jYXRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCmRpZmYgLS1naXQgYS9sb2NhdGlvbi9saWIvamF2YS9jb20vYW5kcm9pZC9sb2NhdGlvbi9wcm92aWRlci9HZW9mZW5jZVByb3ZpZGVyLmphdmEgYi9sb2NhdGlvbi9saWIvamF2YS9jb20vYW5kcm9pZC9sb2NhdGlvbi9wcm92aWRlci9HZW9mZW5jZVByb3ZpZGVyLmphdmEKaW5kZXggMjYxOGYzNC4uZmFmYWE4NCAxMDA2NDQKLS0tIGEvbG9jYXRpb24vbGliL2phdmEvY29tL2FuZHJvaWQvbG9jYXRpb24vcHJvdmlkZXIvR2VvZmVuY2VQcm92aWRlci5qYXZhCisrKyBiL2xvY2F0aW9uL2xpYi9qYXZhL2NvbS9hbmRyb2lkL2xvY2F0aW9uL3Byb3ZpZGVyL0dlb2ZlbmNlUHJvdmlkZXIuamF2YQpAQCAtMjEsOSArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIAogaW1wb3J0IGFuZHJvaWQubG9jYXRpb24uSUdlb2ZlbmNlUHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IGphdmEubGFuZy5Mb25nOwogCiAvKioKICAqIEJhc2UgY2xhc3MgZm9yIGdlb2ZlbmNlIHByb3ZpZGVycyBpbXBsZW1lbnRlZCBhcyB1bmJ1bmRsZWQgc2VydmljZXMuCmRpZmYgLS1naXQgYS9sb2NhdGlvbi9saWIvamF2YS9jb20vYW5kcm9pZC9sb2NhdGlvbi9wcm92aWRlci9Mb2NhdGlvblByb3ZpZGVyQmFzZS5qYXZhIGIvbG9jYXRpb24vbGliL2phdmEvY29tL2FuZHJvaWQvbG9jYXRpb24vcHJvdmlkZXIvTG9jYXRpb25Qcm92aWRlckJhc2UuamF2YQppbmRleCAxNTBjMjg5Li5kNzE3ZjQwIDEwMDY0NAotLS0gYS9sb2NhdGlvbi9saWIvamF2YS9jb20vYW5kcm9pZC9sb2NhdGlvbi9wcm92aWRlci9Mb2NhdGlvblByb3ZpZGVyQmFzZS5qYXZhCisrKyBiL2xvY2F0aW9uL2xpYi9qYXZhL2NvbS9hbmRyb2lkL2xvY2F0aW9uL3Byb3ZpZGVyL0xvY2F0aW9uUHJvdmlkZXJCYXNlLmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLklMb2NhdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5Mb2NhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLkxvY2F0aW9uTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLkxvY2F0aW9uUmVxdWVzdDsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQW1ySW5wdXRTdHJlYW0uamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BbXJJbnB1dFN0cmVhbS5qYXZhCmluZGV4IDhiN2VlZTIuLmFiZWU5ZTkgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BbXJJbnB1dFN0cmVhbS5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BbXJJbnB1dFN0cmVhbS5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYTsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9Bc3luY1BsYXllci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0FzeW5jUGxheWVyLmphdmEKaW5kZXggODA0NTI4ZS4uMTRiMTk5ZSAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0FzeW5jUGxheWVyLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0FzeW5jUGxheWVyLmphdmEKQEAgLTIyLDggKzIyLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvTWFuYWdlci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvTWFuYWdlci5qYXZhCmluZGV4IGQ2NTJjYWUuLjhhZTA2ZTAgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb01hbmFnZXIuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9NYW5hZ2VyLmphdmEKQEAgLTI2LDcgKzI2LDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQubWVkaWEuUmVtb3RlQ29udHJvbGxlci5PbkNsaWVudFVwZGF0ZUxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1JlY29yZC5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvUmVjb3JkLmphdmEKaW5kZXggZjQ5ZWYyZS4uNTNhZmI2YiAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvUmVjb3JkLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvUmVjb3JkLmphdmEKQEAgLTE4Niw2ICsxODYsOSBAQAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvKioKICAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci4KKyAgICAgKiBUaG91Z2ggc29tZSBpbnZhbGlkIHBhcmFtZXRlcnMgd2lsbCByZXN1bHQgaW4gYW4ge0BsaW5rIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbn0gZXhjZXB0aW9uLAorICAgICAqIG90aGVyIGVycm9ycyBkbyBub3QuICBUaHVzIHlvdSBzaG91bGQgY2FsbCB7QGxpbmsgI2dldFN0YXRlKCl9IGltbWVkaWF0ZWx5IGFmdGVyIGNvbnN0cnVjdGlvbgorICAgICAqIHRvIGNvbmZpcm0gdGhhdCB0aGUgb2JqZWN0IGlzIHVzYWJsZS4KICAgICAgKiBAcGFyYW0gYXVkaW9Tb3VyY2UgdGhlIHJlY29yZGluZyBzb3VyY2UuIFNlZSB7QGxpbmsgTWVkaWFSZWNvcmRlci5BdWRpb1NvdXJjZX0gZm9yCiAgICAgICogICAgcmVjb3JkaW5nIHNvdXJjZSBkZWZpbml0aW9ucy4KICAgICAgKiBAcGFyYW0gc2FtcGxlUmF0ZUluSHogdGhlIHNhbXBsZSByYXRlIGV4cHJlc3NlZCBpbiBIZXJ0ei4gNDQxMDBIeiBpcyBjdXJyZW50bHkgdGhlIG9ubHkKQEAgLTIzOSw3ICsyNDIsNyBAQAogCiAKICAgICAvLyBDb252ZW5pZW5jZSBtZXRob2QgZm9yIHRoZSBjb25zdHJ1Y3RvcidzIHBhcmFtZXRlciBjaGVja3MuCi0gICAgLy8gVGhpcyBpcyB3aGVyZSBjb25zdHJ1Y3RvciBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24tcyBhcmUgdGhyb3duCisgICAgLy8gVGhpcyBhbmQgYXVkaW9CdWZmU2l6ZUNoZWNrIGFyZSB3aGVyZSBjb25zdHJ1Y3RvciBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24tcyBhcmUgdGhyb3duCiAgICAgLy8gcG9zdGNvbmRpdGlvbnM6CiAgICAgLy8gICAgbVJlY29yZFNvdXJjZSBpcyB2YWxpZAogICAgIC8vICAgIG1DaGFubmVsQ291bnQgaXMgdmFsaWQKQEAgLTI0Nyw3ICsyNTAsOCBAQAogICAgIC8vICAgIG1BdWRpb0Zvcm1hdCBpcyB2YWxpZAogICAgIC8vICAgIG1TYW1wbGVSYXRlIGlzIHZhbGlkCiAgICAgcHJpdmF0ZSB2b2lkIGF1ZGlvUGFyYW1DaGVjayhpbnQgYXVkaW9Tb3VyY2UsIGludCBzYW1wbGVSYXRlSW5IeiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaGFubmVsQ29uZmlnLCBpbnQgYXVkaW9Gb3JtYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaGFubmVsQ29uZmlnLCBpbnQgYXVkaW9Gb3JtYXQpCisgICAgICAgICAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKIAogICAgICAgICAvLy0tLS0tLS0tLS0tLS0tCiAgICAgICAgIC8vIGF1ZGlvIHNvdXJjZQpAQCAtMzExLDcgKzMxNSw3IEBACiAgICAgLy8gICAgbUF1ZGlvRm9ybWF0IGlzIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV84QklUIE9SIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJVAogICAgIC8vIHBvc3Rjb25kaXRpb246CiAgICAgLy8gICAgbU5hdGl2ZUJ1ZmZlclNpemVJbkJ5dGVzIGlzIHZhbGlkIChtdWx0aXBsZSBvZiBmcmFtZSBzaXplLCBwb3NpdGl2ZSkKLSAgICBwcml2YXRlIHZvaWQgYXVkaW9CdWZmU2l6ZUNoZWNrKGludCBhdWRpb0J1ZmZlclNpemUpIHsKKyAgICBwcml2YXRlIHZvaWQgYXVkaW9CdWZmU2l6ZUNoZWNrKGludCBhdWRpb0J1ZmZlclNpemUpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gewogICAgICAgICAvLyBOQjogdGhpcyBzZWN0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCBQQ00gZGF0YS4KICAgICAgICAgLy8gVG8gdXBkYXRlIHdoZW4gc3VwcG9ydGluZyBjb21wcmVzc2VkIGZvcm1hdHMKICAgICAgICAgaW50IGZyYW1lU2l6ZUluQnl0ZXMgPSBtQ2hhbm5lbENvdW50CkBAIC04MDAsNyArODA0LDcgQEAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBwcml2YXRlIG5hdGl2ZSBmaW5hbCBpbnQgbmF0aXZlX3NldHVwKE9iamVjdCBhdWRpb3JlY29yZF90aGlzLAotICAgICAgICAgICAgaW50IHJlY29yZFNvdXJjZSwgaW50IHNhbXBsZVJhdGUsIGludCBuYkNoYW5uZWxzLCBpbnQgYXVkaW9Gb3JtYXQsCisgICAgICAgICAgICBpbnQgcmVjb3JkU291cmNlLCBpbnQgc2FtcGxlUmF0ZSwgaW50IGNoYW5uZWxNYXNrLCBpbnQgYXVkaW9Gb3JtYXQsCiAgICAgICAgICAgICBpbnQgYnVmZlNpemVJbkJ5dGVzLCBpbnRbXSBzZXNzaW9uSWQpOwogCiAgICAgcHJpdmF0ZSBuYXRpdmUgZmluYWwgdm9pZCBuYXRpdmVfZmluYWxpemUoKTsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1NlcnZpY2UuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1NlcnZpY2UuamF2YQppbmRleCBiODM2ZjUwLi42OGFjMTVhIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9TZXJ2aWNlLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvU2VydmljZS5qYXZhCkBAIC0yMSwyMCArMjEsMTcgQEAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXIuUklOR0VSX01PREVfU0lMRU5UOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlci5SSU5HRVJfTU9ERV9WSUJSQVRFOwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlck5hdGl2ZTsKIGltcG9ydCBhbmRyb2lkLmFwcC5BcHBPcHNNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLktleWd1YXJkTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQuQ2FuY2VsZWRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoQTJkcDsKIGltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhBZGFwdGVyOwogaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLkJsdWV0b290aENsYXNzOwogaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLkJsdWV0b290aERldmljZTsKIGltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhIZWFkc2V0OwogaW1wb3J0IGFuZHJvaWQuYmx1ZXRvb3RoLkJsdWV0b290aFByb2ZpbGU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkFjdGl2aXR5Tm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7CkBAIC00OCwxMCArNDUsOCBAQAogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ29udGVudE9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXIuT25Db21wbGV0aW9uTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVBsYXllci5PbkVycm9yTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwpAQCAtNjYsOSArNjEsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuVmlicmF0b3I7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLlN5c3RlbTsKLWltcG9ydCBhbmRyb2lkLnNwZWVjaC5SZWNvZ25pemVySW50ZW50OwotaW1wb3J0IGFuZHJvaWQudGVsZXBob255LlBob25lU3RhdGVMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5UZWxlcGhvbnlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CkBAIC04OCwxMyArODAsMTEgQEAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwogCiAvKioKICAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdm9sdW1lIG1hbmFnZXIgc2VydmljZS4KZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9UcmFjay5qYXZhCmluZGV4IDc4YTM3YzUuLjg3NTY4MDYgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvVHJhY2suamF2YQpAQCAtMTMxOSw3ICsxMzE5LDcgQEAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBwcml2YXRlIG5hdGl2ZSBmaW5hbCBpbnQgbmF0aXZlX3NldHVwKE9iamVjdCBhdWRpb3RyYWNrX3RoaXMsCi0gICAgICAgICAgICBpbnQgc3RyZWFtVHlwZSwgaW50IHNhbXBsZVJhdGUsIGludCBuYkNoYW5uZWxzLCBpbnQgYXVkaW9Gb3JtYXQsCisgICAgICAgICAgICBpbnQgc3RyZWFtVHlwZSwgaW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVsTWFzaywgaW50IGF1ZGlvRm9ybWF0LAogICAgICAgICAgICAgaW50IGJ1ZmZTaXplSW5CeXRlcywgaW50IG1vZGUsIGludFtdIHNlc3Npb25JZCk7CiAKICAgICBwcml2YXRlIG5hdGl2ZSBmaW5hbCB2b2lkIG5hdGl2ZV9maW5hbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0VuY29kZXJDYXBhYmlsaXRpZXMuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9FbmNvZGVyQ2FwYWJpbGl0aWVzLmphdmEKaW5kZXggNzFjYjFiMy4uMzMyZTM2MCAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0VuY29kZXJDYXBhYmlsaXRpZXMuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvRW5jb2RlckNhcGFiaWxpdGllcy5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKgogICogVGhlIEVuY29kZXJDYXBhYmlsaXRpZXMgY2xhc3MgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9JbWFnZS5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0ltYWdlLmphdmEKaW5kZXggMjNhYmNlNy4uYTM0NmUxNyAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0ltYWdlLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0ltYWdlLmphdmEKQEAgLTIxLDcgKzIxLDggQEAKIAogLyoqCiAgKiA8cD5BIHNpbmdsZSBjb21wbGV0ZSBpbWFnZSBidWZmZXIgdG8gdXNlIHdpdGggYSBtZWRpYSBzb3VyY2Ugc3VjaCBhcyBhCi0gKiB7QGxpbmsgTWVkaWFDb2RlY30uPC9wPgorICoge0BsaW5rIE1lZGlhQ29kZWN9IG9yIGEKKyAqIHtAbGluayBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlIENhbWVyYURldmljZX0uPC9wPgogICoKICAqIDxwPlRoaXMgY2xhc3MgYWxsb3dzIGZvciBlZmZpY2llbnQgZGlyZWN0IGFwcGxpY2F0aW9uIGFjY2VzcyB0byB0aGUgcGl4ZWwKICAqIGRhdGEgb2YgdGhlIEltYWdlIHRocm91Z2ggb25lIG9yIG1vcmUKQEAgLTgyLDYgKzgzLDE1IEBACiAgICAgICogICAgIHBsYW5lICg0OjI6MCBzdWJzYW1wbGluZykuIEVhY2ggcGl4ZWwgc2FtcGxlIGluIGVhY2ggcGxhbmUgaGFzIDggYml0cy4KICAgICAgKiAgICAgRWFjaCBwbGFuZSBoYXMgaXRzIG93biByb3cgc3RyaWRlIGFuZCBwaXhlbCBzdHJpZGUuPC90ZD4KICAgICAgKiA8L3RyPgorICAgICAqIDx0cj4KKyAgICAgKiAgIDx0ZD57QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZvcm1hdCNSQVdfU0VOU09SIFJBV19TRU5TT1J9PC90ZD4KKyAgICAgKiAgIDx0ZD4xPC90ZD4KKyAgICAgKiAgIDx0ZD5BIHNpbmdsZSBwbGFuZSBvZiByYXcgc2Vuc29yIGltYWdlIGRhdGEsIHdpdGggMTYgYml0cyBwZXIgY29sb3IKKyAgICAgKiAgICAgc2FtcGxlLiBUaGUgZGV0YWlscyBvZiB0aGUgbGF5b3V0IG5lZWQgdG8gYmUgcXVlcmllZCBmcm9tIHRoZSBzb3VyY2Ugb2YKKyAgICAgKiAgICAgdGhlIHJhdyBzZW5zb3IgZGF0YSwgc3VjaCBhcworICAgICAqICAgICB7QGxpbmsgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZSBDYW1lcmFEZXZpY2V9LgorICAgICAqICAgPC90ZD4KKyAgICAgKiA8L3RyPgogICAgICAqIDwvdGFibGU+CiAgICAgICoKICAgICAgKiBAc2VlIGFuZHJvaWQuZ3JhcGhpY3MuSW1hZ2VGb3JtYXQKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9JbWFnZVJlYWRlci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0ltYWdlUmVhZGVyLmphdmEKaW5kZXggZDQ1NGM0Mi4uMWJkMzJjNCAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0ltYWdlUmVhZGVyLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0ltYWdlUmVhZGVyLmphdmEKQEAgLTMyLDcgKzMyLDggQEAKICAqIHJlbmRlcmVkIGludG8gYSB7QGxpbmsgYW5kcm9pZC52aWV3LlN1cmZhY2V9PC9wPgogICoKICAqIDxwPlNldmVyYWwgQW5kcm9pZCBtZWRpYSBBUEkgY2xhc3NlcyBhY2NlcHQgU3VyZmFjZSBvYmplY3RzIGFzIHRhcmdldHMgdG8KLSAqIHJlbmRlciB0bywgaW5jbHVkaW5nIHtAbGluayBNZWRpYVBsYXllcn0sIHtAbGluayBNZWRpYUNvZGVjfSwgYW5kCisgKiByZW5kZXIgdG8sIGluY2x1ZGluZyB7QGxpbmsgTWVkaWFQbGF5ZXJ9LCB7QGxpbmsgTWVkaWFDb2RlY30sCisgKiB7QGxpbmsgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmljZX0sIGFuZAogICoge0BsaW5rIGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24gUmVuZGVyU2NyaXB0IEFsbG9jYXRpb25zfS4gVGhlIGltYWdlCiAgKiBzaXplcyBhbmQgZm9ybWF0cyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggZWFjaCBzb3VyY2UgdmFyeSwgYW5kIHNob3VsZCBiZQogICogY2hlY2tlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHNwZWNpZmljIEFQSS48L3A+CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFEcm0uamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYURybS5qYXZhCmluZGV4IDZiMjc4ZDQuLmJlNDA4YTEgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYURybS5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYURybS5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYTsKIAotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFEcm1FeGNlcHRpb247CiBpbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwogaW1wb3J0IGphdmEudXRpbC5VVUlEOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwpAQCAtMjQsNyArMjMsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhRmlsZS5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhRmlsZS5qYXZhCmluZGV4IDc2MWVjY2EuLjUyNjY1NmEgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYUZpbGUuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFGaWxlLmphdmEKQEAgLTE2LDE3ICsxNiwxMiBAQAogCiBwYWNrYWdlIGFuZHJvaWQubWVkaWE7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlczsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLk1lZGlhU3RvcmUuQXVkaW87Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5NZWRpYVN0b3JlLkltYWdlczsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLk1lZGlhU3RvcmUuVmlkZW87CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5EZWNvZGVyQ2FwYWJpbGl0aWVzOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuRGVjb2RlckNhcGFiaWxpdGllcy5WaWRlb0RlY29kZXI7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5EZWNvZGVyQ2FwYWJpbGl0aWVzLkF1ZGlvRGVjb2RlcjsKIGltcG9ydCBhbmRyb2lkLm10cC5NdHBDb25zdGFudHM7CiAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhRm9jdXNDb250cm9sLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFGb2N1c0NvbnRyb2wuamF2YQppbmRleCAzNDAwOGJiLi4yNWFiOTlkIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFGb2N1c0NvbnRyb2wuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFGb2N1c0NvbnRyb2wuamF2YQpAQCAtNTEsNyArNTEsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKIAotaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhRWRpdG9yLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFNZXRhZGF0YUVkaXRvci5qYXZhCmluZGV4IDM3M2JhMTEuLjNiZmRiNWEgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYU1ldGFkYXRhRWRpdG9yLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhTWV0YWRhdGFFZGl0b3IuamF2YQpAQCAtMTgsNyArMTgsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUludEFycmF5OwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhUGxheWVyLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIuamF2YQppbmRleCA3MDYyNThhLi4wZTZlOGIxIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFQbGF5ZXIuamF2YQpAQCAtMzEsMTggKzMxLDE1IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhVGltZVByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFUaW1lUHJvdmlkZXIuT25NZWRpYVRpbWVMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLlN1YnRpdGxlQ29udHJvbGxlcjsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLlN1YnRpdGxlRGF0YTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01ldGFkYXRhLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWV0YWRhdGEuamF2YQppbmRleCBiNTY2NjUzLi5lYjU0M2I0IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWV0YWRhdGEuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWV0YWRhdGEuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQubWVkaWE7CiAKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWluaVRodW1iRmlsZS5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01pbmlUaHVtYkZpbGUuamF2YQppbmRleCA2M2IxNDljLi4yM2MzNjUyIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWluaVRodW1iRmlsZS5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NaW5pVGh1bWJGaWxlLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhOwogCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9SYXRpbmcuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9SYXRpbmcuamF2YQppbmRleCA4MmMwMzkyLi5iOTRkYjE4IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvUmF0aW5nLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1JhdGluZy5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYTsKIAotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xDbGllbnQuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9SZW1vdGVDb250cm9sQ2xpZW50LmphdmEKaW5kZXggMGMwMGFiYS4uYzJjNjFkMyAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xDbGllbnQuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbENsaWVudC5qYXZhCkBAIC0yNCwxMyArMjQsMTEgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYU1ldGFkYXRhUmV0cmlldmVyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbGxlci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1JlbW90ZUNvbnRyb2xsZXIuamF2YQppbmRleCA2ZGJiM2NkLi5jZGViNGZlIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvUmVtb3RlQ29udHJvbGxlci5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9SZW1vdGVDb250cm9sbGVyLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhOwogCi1pbXBvcnQgYW5kcm9pZC5NYW5pZmVzdDsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKIGltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50LkNhbmNlbGVkRXhjZXB0aW9uOwpAQCAtMjksOCArMjgsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1Jlc2FtcGxlSW5wdXRTdHJlYW0uamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9SZXNhbXBsZUlucHV0U3RyZWFtLmphdmEKaW5kZXggYjAyNWUyNS4uODA5MTlmNyAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1Jlc2FtcGxlSW5wdXRTdHJlYW0uamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvUmVzYW1wbGVJbnB1dFN0cmVhbS5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYTsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9SaW5ndG9uZU1hbmFnZXIuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9SaW5ndG9uZU1hbmFnZXIuamF2YQppbmRleCA4ZTQwMDRiLi5lMjExYjk5IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvUmluZ3RvbmVNYW5hZ2VyLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1Jpbmd0b25lTWFuYWdlci5qYXZhCkBAIC0yMyw3ICsyMyw2IEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRVcmlzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRGaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9Tb3VuZFBvb2wuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9Tb3VuZFBvb2wuamF2YQppbmRleCAwNmFmNWRlLi5iMGMwNzdiIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvU291bmRQb29sLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1NvdW5kUG9vbC5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1N1YnRpdGxlRGF0YS5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1N1YnRpdGxlRGF0YS5qYXZhCmluZGV4IGY1NTJlODIuLjNlNmY2ZjkgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9TdWJ0aXRsZURhdGEuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvU3VidGl0bGVEYXRhLmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYTsKIAogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKgogICogQGhpZGUKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9UaHVtYm5haWxVdGlscy5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1RodW1ibmFpbFV0aWxzLmphdmEKaW5kZXggNzU2NjM4Yy4uZGFhNWZhNSAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1RodW1ibmFpbFV0aWxzLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1RodW1ibmFpbFV0aWxzLmphdmEKQEAgLTE3LDkgKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYTsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRVcmlzOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOwotaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKQEAgLTI5LDE1ICsyNiwxMiBAQAogaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFGaWxlLk1lZGlhRmlsZVR5cGU7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5CYXNlQ29sdW1uczsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLk1lZGlhU3RvcmUuSW1hZ2VzOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuTWVkaWFTdG9yZS5JbWFnZXMuVGh1bWJuYWlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwogCiAvKioKICAqIFRodW1ibmFpbCBnZW5lcmF0aW9uIHJvdXRpbmVzIGZvciBtZWRpYSBwcm92aWRlci4KZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9XZWJWdHRSZW5kZXJlci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1dlYlZ0dFJlbmRlcmVyLmphdmEKaW5kZXggNGRlYzA4MS4uNThkMzUyMCAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1dlYlZ0dFJlbmRlcmVyLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL1dlYlZ0dFJlbmRlcmVyLmphdmEKQEAgLTExMzYsMTEgKzExMzYsMTUgQEAKICAgICB9CiAKICAgICBwdWJsaWMgV2ViVnR0UmVuZGVyaW5nV2lkZ2V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCwgMCk7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIDApOwogICAgIH0KIAotICAgIHB1YmxpYyBXZWJWdHRSZW5kZXJpbmdXaWRnZXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOworICAgIHB1YmxpYyBXZWJWdHRSZW5kZXJpbmdXaWRnZXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgV2ViVnR0UmVuZGVyaW5nV2lkZ2V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogCiAgICAgICAgIC8vIENhbm5vdCByZW5kZXIgdGV4dCBvdmVyIHZpZGVvIHdoZW4gbGF5ZXIgdHlwZSBpcyBoYXJkd2FyZS4KICAgICAgICAgc2V0TGF5ZXJUeXBlKFZpZXcuTEFZRVJfVFlQRV9TT0ZUV0FSRSwgbnVsbCk7CkBAIC0xNTIxLDYgKzE1MjUsOCBAQAogCiAgICAgICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgICAgICBzZXRCYWNrZ3JvdW5kQ29sb3IoREVCVUdfUkVHSU9OX0JBQ0tHUk9VTkQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZXRCYWNrZ3JvdW5kQ29sb3IoY2FwdGlvblN0eWxlLndpbmRvd0NvbG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xNTMzLDYgKzE1MzksOCBAQAogICAgICAgICAgICAgICAgIGZpbmFsIEN1ZUxheW91dCBjdWVCb3ggPSBtUmVnaW9uQ3VlQm94ZXMuZ2V0KGkpOwogICAgICAgICAgICAgICAgIGN1ZUJveC5zZXRDYXB0aW9uU3R5bGUoY2FwdGlvblN0eWxlLCBmb250U2l6ZSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldEJhY2tncm91bmRDb2xvcihjYXB0aW9uU3R5bGUud2luZG93Q29sb3IpOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9BdWRpb0VmZmVjdC5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvQXVkaW9FZmZlY3QuamF2YQppbmRleCAxZTFlZjhjLi4zNzA2ODg0IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9BdWRpb0VmZmVjdC5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0F1ZGlvRWZmZWN0LmphdmEKQEAgLTIyLDcgKzIyLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKIGltcG9ydCBqYXZhLm5pby5CeXRlT3JkZXI7CiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0Jhc3NCb29zdC5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvQmFzc0Jvb3N0LmphdmEKaW5kZXggOTE0NTllZC4uYTQ2Y2MyMiAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvQmFzc0Jvb3N0LmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvQmFzc0Jvb3N0LmphdmEKQEAgLTE2LDE2ICsxNiw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4OwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLmF1ZGlvZnguQXVkaW9FZmZlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAotaW1wb3J0IGphdmEubmlvLkJ5dGVPcmRlcjsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLkNoYXJCdWZmZXI7CiBpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKIAogCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9FbnZpcm9ubWVudGFsUmV2ZXJiLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9FbnZpcm9ubWVudGFsUmV2ZXJiLmphdmEKaW5kZXggZjFmNTgyZS4uZWYxYzRjMyAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvRW52aXJvbm1lbnRhbFJldmVyYi5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0Vudmlyb25tZW50YWxSZXZlcmIuamF2YQpAQCAtMTYsMTUgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhLmF1ZGlvZng7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQubWVkaWEuYXVkaW9meC5BdWRpb0VmZmVjdDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CiBpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKIAogLyoqCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9FcXVhbGl6ZXIuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0VxdWFsaXplci5qYXZhCmluZGV4IDdmMzg5NTUuLjdhYmFkYTAgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0VxdWFsaXplci5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L0VxdWFsaXplci5qYXZhCkBAIC0xNiwxNiArMTYsOSBAQAogCiBwYWNrYWdlIGFuZHJvaWQubWVkaWEuYXVkaW9meDsKIAotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4LkF1ZGlvRWZmZWN0OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKLWltcG9ydCBqYXZhLm5pby5CeXRlT3JkZXI7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLm5pby5DaGFyQnVmZmVyOwogaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CiAKIApkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvUHJlc2V0UmV2ZXJiLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9QcmVzZXRSZXZlcmIuamF2YQppbmRleCA3YTg5YWU3Li5lZjkxNjY3IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9QcmVzZXRSZXZlcmIuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9QcmVzZXRSZXZlcmIuamF2YQpAQCAtMTYsMTUgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhLmF1ZGlvZng7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQubWVkaWEuYXVkaW9meC5BdWRpb0VmZmVjdDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CiBpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKIAogCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXJ0dWFsaXplci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvVmlydHVhbGl6ZXIuamF2YQppbmRleCA2OGE3Yjg4Li42YjIwMDA2IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXJ0dWFsaXplci5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1ZpcnR1YWxpemVyLmphdmEKQEAgLTE2LDE2ICsxNiw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4OwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLmF1ZGlvZnguQXVkaW9FZmZlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAotaW1wb3J0IGphdmEubmlvLkJ5dGVPcmRlcjsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLkNoYXJCdWZmZXI7CiBpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKIAogCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXN1YWxpemVyLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYXVkaW9meC9WaXN1YWxpemVyLmphdmEKaW5kZXggZmI3ZjcxOC4uNmJjM2YwOSAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2F1ZGlvZngvVmlzdWFsaXplci5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9hdWRpb2Z4L1Zpc3VhbGl6ZXIuamF2YQpAQCAtMTgsNyArMTgsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL3ZpZGVvZWRpdG9yL01lZGlhQXJ0aXN0TmF0aXZlSGVscGVyLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvdmlkZW9lZGl0b3IvTWVkaWFBcnRpc3ROYXRpdmVIZWxwZXIuamF2YQppbmRleCBmNGZjY2JlLi5kYTY4Njc0IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvdmlkZW9lZGl0b3IvTWVkaWFBcnRpc3ROYXRpdmVIZWxwZXIuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvdmlkZW9lZGl0b3IvTWVkaWFBcnRpc3ROYXRpdmVIZWxwZXIuamF2YQpAQCAtMjgsNyArMjgsNiBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeDsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLnZpZGVvZWRpdG9yLlZpZGVvRWRpdG9yLkV4cG9ydFByb2dyZXNzTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS52aWRlb2VkaXRvci5WaWRlb0VkaXRvci5QcmV2aWV3UHJvZ3Jlc3NMaXN0ZW5lcjsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwRGF0YWJhc2UuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwRGF0YWJhc2UuamF2YQppbmRleCBjZjEyMzhhLi4xODc1MDBkIDEwMDc1NQotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbXRwL010cERhdGFiYXNlLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZS5qYXZhCkBAIC0yNSwxMiArMjUsMTAgQEAKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZTsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhU2Nhbm5lcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7Ci1pbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLk1lZGlhU3RvcmU7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5NZWRpYVN0b3JlLkF1ZGlvOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuTWVkaWFTdG9yZS5GaWxlczsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLk1lZGlhU3RvcmUuSW1hZ2VzOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuTWVkaWFTdG9yZS5NZWRpYUNvbHVtbnM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheTsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwRGV2aWNlLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbXRwL010cERldmljZS5qYXZhCmluZGV4IDMyNzJmZWQuLjkyNjM2NGYgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwRGV2aWNlLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBEZXZpY2UuamF2YQpAQCAtMTgsOCArMTgsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS51c2IuVXNiRGV2aWNlOwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUudXNiLlVzYkRldmljZUNvbm5lY3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiAvKioKICAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBNVFAgb3IgUFRQIGRldmljZSBjb25uZWN0ZWQgb24gdGhlIFVTQiBob3N0IGJ1cy4gQW4gYXBwbGljYXRpb24gY2FuCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbXRwL010cFByb3BlcnR5R3JvdXAuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwUHJvcGVydHlHcm91cC5qYXZhCmluZGV4IDQ4ZGE0MGYuLjc4MTk4OGQgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwUHJvcGVydHlHcm91cC5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwUHJvcGVydHlHcm91cC5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuTWVkaWFTdG9yZTsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLk1lZGlhU3RvcmUuQXVkaW87CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5NZWRpYVN0b3JlLkZpbGVzOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuTWVkaWFTdG9yZS5JbWFnZXM7CmRpZmYgLS1naXQgYS9tZWRpYS9saWIvamF2YS9jb20vYW5kcm9pZC9tZWRpYS9yZW1vdGVkaXNwbGF5L1JlbW90ZURpc3BsYXkuamF2YSBiL21lZGlhL2xpYi9qYXZhL2NvbS9hbmRyb2lkL21lZGlhL3JlbW90ZWRpc3BsYXkvUmVtb3RlRGlzcGxheS5qYXZhCmluZGV4IDVlMTU3MDIuLmMyNDYxZTYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYi9qYXZhL2NvbS9hbmRyb2lkL21lZGlhL3JlbW90ZWRpc3BsYXkvUmVtb3RlRGlzcGxheS5qYXZhCisrKyBiL21lZGlhL2xpYi9qYXZhL2NvbS9hbmRyb2lkL21lZGlhL3JlbW90ZWRpc3BsYXkvUmVtb3RlRGlzcGxheS5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLk9iamVjdHM7CiAKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuUmVtb3RlRGlzcGxheVN0YXRlLlJlbW90ZURpc3BsYXlJbmZvOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiAKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9FZmZlY3RDb250ZXh0LmphdmEgYi9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvRWZmZWN0Q29udGV4dC5qYXZhCmluZGV4IGVmMDMyMjkuLmExMWI5YzQgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9FZmZlY3RDb250ZXh0LmphdmEKKysrIGIvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L0VmZmVjdENvbnRleHQuamF2YQpAQCAtMTksMTAgKzE5LDcgQEAKIAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5DYWNoZWRGcmFtZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckZhY3Rvcnk7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRW52aXJvbm1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L0VmZmVjdEZhY3RvcnkuamF2YSBiL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9FZmZlY3RGYWN0b3J5LmphdmEKaW5kZXggNDMzMDI3OS4uZjZmY2JhNyAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L0VmZmVjdEZhY3RvcnkuamF2YQorKysgYi9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvRWZmZWN0RmFjdG9yeS5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiBwYWNrYWdlIGFuZHJvaWQubWVkaWEuZWZmZWN0OwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQ29uc3RydWN0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiAKIC8qKgogICogPHA+VGhlIEVmZmVjdEZhY3RvcnkgY2xhc3MgZGVmaW5lcyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgRWZmZWN0cywgYW5kIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8KZGlmZiAtLWdpdCBhL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9GaWx0ZXJFZmZlY3QuamF2YSBiL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9GaWx0ZXJFZmZlY3QuamF2YQppbmRleCBkN2MzMTllLi4zNGIzNTQ5IDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvRmlsdGVyRWZmZWN0LmphdmEKKysrIGIvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L0ZpbHRlckVmZmVjdC5qYXZhCkBAIC0xNywxMCArMTcsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQubWVkaWEuZWZmZWN0OwogCi1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkNhY2hlZEZyYW1lTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyRmFjdG9yeTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR0xFbnZpcm9ubWVudDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR0xGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L0ZpbHRlckdyYXBoRWZmZWN0LmphdmEgYi9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvRmlsdGVyR3JhcGhFZmZlY3QuamF2YQppbmRleCBiMThiZWE4Li44MGM2OTViIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvRmlsdGVyR3JhcGhFZmZlY3QuamF2YQorKysgYi9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvRmlsdGVyR3JhcGhFZmZlY3QuamF2YQpAQCAtMTksMTcgKzE5LDEzIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyR3JhcGg7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdyYXBoUnVubmVyOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaW1wbGVTY2hlZHVsZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlN5bmNSdW5uZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5lZmZlY3QuRWZmZWN0OwogaW1wb3J0IGFuZHJvaWQubWVkaWEuZWZmZWN0LkZpbHRlckVmZmVjdDsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLmVmZmVjdC5FZmZlY3RDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuaW8uR3JhcGhJT0V4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmlvLkdyYXBoUmVhZGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuaW8uVGV4dEdyYXBoUmVhZGVyOwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogLyoqCiAgKiBFZmZlY3Qgc3ViY2xhc3MgZm9yIGVmZmVjdHMgYmFzZWQgb24gYSBzaW5nbGUgRmlsdGVyLiBTdWJjbGFzc2VzIG5lZWQgb25seSBpbnZva2UgdGhlCiAgKiBjb25zdHJ1Y3RvciB3aXRoIHRoZSBjb3JyZWN0IGFyZ3VtZW50cyB0byBvYnRhaW4gYW4gRWZmZWN0IGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L1NpbmdsZUZpbHRlckVmZmVjdC5qYXZhIGIvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L1NpbmdsZUZpbHRlckVmZmVjdC5qYXZhCmluZGV4IDZmODU4NjEuLjQ3OTAwZGYgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9TaW5nbGVGaWx0ZXJFZmZlY3QuamF2YQorKysgYi9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvU2luZ2xlRmlsdGVyRWZmZWN0LmphdmEKQEAgLTIxLDExICsyMSw4IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckZhY3Rvcnk7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckZ1bmN0aW9uOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLmVmZmVjdC5FZmZlY3Q7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5lZmZlY3QuRWZmZWN0Q29udGV4dDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIC8qKgogICogRWZmZWN0IHN1YmNsYXNzIGZvciBlZmZlY3RzIGJhc2VkIG9uIGEgc2luZ2xlIEZpbHRlci4gU3ViY2xhc3NlcyBuZWVkIG9ubHkgaW52b2tlIHRoZQogICogY29uc3RydWN0b3Igd2l0aCB0aGUgY29ycmVjdCBhcmd1bWVudHMgdG8gb2J0YWluIGFuIEVmZmVjdCBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9TaXplQ2hhbmdlRWZmZWN0LmphdmEgYi9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvU2l6ZUNoYW5nZUVmZmVjdC5qYXZhCmluZGV4IDRkMjdiYWUuLjFiZjdkNDAgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9TaXplQ2hhbmdlRWZmZWN0LmphdmEKKysrIGIvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L1NpemVDaGFuZ2VFZmZlY3QuamF2YQpAQCAtMTYsMTUgKzE2LDkgQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhLmVmZmVjdDsKIAotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckZhY3Rvcnk7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckZ1bmN0aW9uOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLmVmZmVjdC5FZmZlY3Q7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5lZmZlY3QuRWZmZWN0Q29udGV4dDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIC8qKgogICogRWZmZWN0IHN1YmNsYXNzIGZvciBlZmZlY3RzIGJhc2VkIG9uIGEgc2luZ2xlIEZpbHRlciB3aXRoIG91dHB1dCBzaXplIGRpZmZlcm5ldAogICogZnJvbSBpbnB1dC4gIFN1YmNsYXNzZXMgbmVlZCBvbmx5IGludm9rZSB0aGUgY29uc3RydWN0b3Igd2l0aCB0aGUgY29ycmVjdCBhcmd1bWVudHMKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9lZmZlY3RzL0Nyb3BFZmZlY3QuamF2YSBiL21lZGlhL21jYS9lZmZlY3QvamF2YS9hbmRyb2lkL21lZGlhL2VmZmVjdC9lZmZlY3RzL0Nyb3BFZmZlY3QuamF2YQppbmRleCAzZThkNzhhLi43ZTFjNDk1IDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZWZmZWN0L2phdmEvYW5kcm9pZC9tZWRpYS9lZmZlY3QvZWZmZWN0cy9Dcm9wRWZmZWN0LmphdmEKKysrIGIvbWVkaWEvbWNhL2VmZmVjdC9qYXZhL2FuZHJvaWQvbWVkaWEvZWZmZWN0L2VmZmVjdHMvQ3JvcEVmZmVjdC5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiAKIGltcG9ydCBhbmRyb2lkLm1lZGlhLmVmZmVjdC5FZmZlY3RDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQubWVkaWEuZWZmZWN0LlNpemVDaGFuZ2VFZmZlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5lZmZlY3QuU2luZ2xlRmlsdGVyRWZmZWN0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVycGFja3MuaW1hZ2Vwcm9jLkNyb3BSZWN0RmlsdGVyOwogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvRmlsdGVyRnVuY3Rpb25FbnZpcm9ubWVudC5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9GaWx0ZXJGdW5jdGlvbkVudmlyb25tZW50LmphdmEKaW5kZXggM2YzNmQ5OC4uZmVhZjZlOCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9GaWx0ZXJGdW5jdGlvbkVudmlyb25tZW50LmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9GaWx0ZXJGdW5jdGlvbkVudmlyb25tZW50LmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJGYWN0b3J5OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJGdW5jdGlvbjsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lTWFuYWdlcjsKIAogLyoqCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvQXN5bmNSdW5uZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9Bc3luY1J1bm5lci5qYXZhCmluZGV4IDcwY2JhZDQuLjgxOTc3NGEgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9Bc3luY1J1bm5lci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9Bc3luY1J1bm5lci5qYXZhCkBAIC0xOCwxNyArMTgsOSBAQAogcGFja2FnZSBhbmRyb2lkLmZpbHRlcmZ3LmNvcmU7CiAKIGltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCi1pbXBvcnQgamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5SdW5uYWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5DYW5jZWxsYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0KIC8qKgogICogQGhpZGUKICAqLwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL0ZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL0ZpbHRlci5qYXZhCmluZGV4IDczYjAwOWQuLjA2MmI2YmEgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9GaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvRmlsdGVyLmphdmEKQEAgLTMzLDcgKzMzLDYgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL0ZyYW1lLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvRnJhbWUuamF2YQppbmRleCBlZjhjNTQyLi43ZGQwNzgzIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvRnJhbWUuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvRnJhbWUuamF2YQpAQCAtMjAsNyArMjAsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvTmF0aXZlRnJhbWUuamF2YSBiL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9OYXRpdmVGcmFtZS5qYXZhCmluZGV4IGJmZDA5YmEuLjdkMTU1M2YgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9OYXRpdmVGcmFtZS5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9OYXRpdmVGcmFtZS5qYXZhCkBAIC0yNCw4ICsyNCw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUJ1ZmZlcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9PbmVTaG90U2NoZWR1bGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvT25lU2hvdFNjaGVkdWxlci5qYXZhCmluZGV4IGRiYzhkMTYuLjgzYzQ3NWYgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9PbmVTaG90U2NoZWR1bGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL09uZVNob3RTY2hlZHVsZXIuamF2YQpAQCAtMTgsNyArMTgsNiBAQAogcGFja2FnZSBhbmRyb2lkLmZpbHRlcmZ3LmNvcmU7CiAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TY2hlZHVsZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlJvdW5kUm9iaW5TY2hlZHVsZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL1NlcmlhbGl6ZWRGcmFtZS5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL1NlcmlhbGl6ZWRGcmFtZS5qYXZhCmluZGV4IGY0OTNmZDIuLjM1YmEwNGYgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJmdy9qYXZhL2FuZHJvaWQvZmlsdGVyZncvY29yZS9TZXJpYWxpemVkRnJhbWUuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvU2VyaWFsaXplZEZyYW1lLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUJ1ZmZlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5PYmplY3RGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiAKQEAgLTI4LDEwICsyNyw3IEBACiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3B0aW9uYWxEYXRhRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uU3RyZWFtQ29ycnVwdGVkRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOwogaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcmZ3L2phdmEvYW5kcm9pZC9maWx0ZXJmdy9jb3JlL1NpbXBsZUZyYW1lLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvU2ltcGxlRnJhbWUuamF2YQppbmRleCA1MzRhMzBkLi43ZGRkMWQ0IDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvU2ltcGxlRnJhbWUuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVyZncvamF2YS9hbmRyb2lkL2ZpbHRlcmZ3L2NvcmUvU2ltcGxlRnJhbWUuamF2YQpAQCAtMjAsMTEgKzIwLDkgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUJ1ZmZlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5PYmplY3RGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiAKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9DYWxsYmFja0ZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0NhbGxiYWNrRmlsdGVyLmphdmEKaW5kZXggNDE4NTM0My4uNGE0N2ZhNCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0NhbGxiYWNrRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0NhbGxiYWNrRmlsdGVyLmphdmEKQEAgLTIwLDEzICsyMCw4IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaW5hbFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiAKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9GcmFtZUJyYW5jaC5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0ZyYW1lQnJhbmNoLmphdmEKaW5kZXggNmI4Y2JjNy4uZjkwOWMzZiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0ZyYW1lQnJhbmNoLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0ZyYW1lQnJhbmNoLmphdmEKQEAgLTIyLDcgKzIyLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpbmFsUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7CiAKIC8qKgogICogQGhpZGUKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9GcmFtZUZldGNoLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvRnJhbWVGZXRjaC5qYXZhCmluZGV4IDUxOGI4MzcuLjg3ZDhmMGIgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9GcmFtZUZldGNoLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0ZyYW1lRmV0Y2guamF2YQpAQCAtMjQsOCArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaW5hbFBvcnQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIEBoaWRlCiAgKi8KZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9GcmFtZVN0b3JlLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvRnJhbWVTdG9yZS5qYXZhCmluZGV4IDNhYWRhYWMuLjA1YWM1MGQgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9GcmFtZVN0b3JlLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0ZyYW1lU3RvcmUuamF2YQpAQCAtMjAsNyArMjAsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0dMVGV4dHVyZVNvdXJjZS5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0dMVGV4dHVyZVNvdXJjZS5qYXZhCmluZGV4IDE3NzY4MjAuLmFmNjFkOWEgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9HTFRleHR1cmVTb3VyY2UuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvR0xUZXh0dXJlU291cmNlLmphdmEKQEAgLTIzLDExICsyMyw4IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR0xGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCi1pbXBvcnQgamF2YS51dGlsLlNldDsKLQogLyoqCiAgKiBAaGlkZQogICovCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvR0xUZXh0dXJlVGFyZ2V0LmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvR0xUZXh0dXJlVGFyZ2V0LmphdmEKaW5kZXggYjIyODVjZC4uOTFiYjQxNyAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0dMVGV4dHVyZVRhcmdldC5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9HTFRleHR1cmVUYXJnZXQuamF2YQpAQCAtMjMsMTEgKzIzLDggQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiAKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCiAvKioKICAqIEBoaWRlCiAgKi8KZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9JbnB1dFN0cmVhbVNvdXJjZS5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0lucHV0U3RyZWFtU291cmNlLmphdmEKaW5kZXggNmMyMmVlNy4uMGVmOTA1NSAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0lucHV0U3RyZWFtU291cmNlLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL0lucHV0U3RyZWFtU291cmNlLmphdmEKQEAgLTIzLDcgKzIzLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpbmFsUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5QcmltaXRpdmVGb3JtYXQ7CiAKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9OdWxsRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvTnVsbEZpbHRlci5qYXZhCmluZGV4IGYzZTA4ZTQuLjczNDM0ZDQgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9OdWxsRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL051bGxGaWx0ZXIuamF2YQpAQCAtMTksOCArMTksNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogCiAvKioKICAqIEBoaWRlCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvT2JqZWN0U291cmNlLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvT2JqZWN0U291cmNlLmphdmEKaW5kZXggZDUxMWU0NC4uNzhlMmI1MCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL09iamVjdFNvdXJjZS5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9PYmplY3RTb3VyY2UuamF2YQpAQCAtMTcsMTUgKzE3LDEyIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5maWx0ZXJwYWNrcy5iYXNlOwogCi1pbXBvcnQgamF2YS51dGlsLlNldDsKLQogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmluYWxQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuT2JqZWN0Rm9ybWF0OwogCiAvKioKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9PdXRwdXRTdHJlYW1UYXJnZXQuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvYmFzZS9PdXRwdXRTdHJlYW1UYXJnZXQuamF2YQppbmRleCAzZDNkMGYxLi5mZDY1YTlkIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvT3V0cHV0U3RyZWFtVGFyZ2V0LmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL091dHB1dFN0cmVhbVRhcmdldC5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKIAogaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL1JldGFyZ2V0RmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2Jhc2UvUmV0YXJnZXRGaWx0ZXIuamF2YQppbmRleCAyNTQxNjdhLi4wZTk4ODgyMCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL1JldGFyZ2V0RmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9iYXNlL1JldGFyZ2V0RmlsdGVyLmphdmEKQEAgLTIxLDkgKzIxLDcgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaW5hbFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQWxwaGFCbGVuZEZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQWxwaGFCbGVuZEZpbHRlci5qYXZhCmluZGV4IDQ3MzM2OWMuLmMzY2MyODIgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0FscGhhQmxlbmRGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9BbHBoYUJsZW5kRmlsdGVyLmphdmEKQEAgLTE3LDE4ICsxNyw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5maWx0ZXJwYWNrcy5pbWFnZXByb2M7CiAKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKLQotaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIC8qKgogICogQGhpZGUKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0F1dG9GaXhGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0F1dG9GaXhGaWx0ZXIuamF2YQppbmRleCBjNzFjMWM5NC4uYWM4M2RiMiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQXV0b0ZpeEZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0F1dG9GaXhGaWx0ZXIuamF2YQpAQCAtMjEsMTMgKzIxLDEwIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiBwdWJsaWMgY2xhc3MgQXV0b0ZpeEZpbHRlciBleHRlbmRzIEZpbHRlciB7CiAKICAgICBAR2VuZXJhdGVGaWVsZFBvcnQobmFtZSA9ICJ0aWxlX3NpemUiLCBoYXNEZWZhdWx0ID0gdHJ1ZSkKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0JpdG1hcE92ZXJsYXlGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0JpdG1hcE92ZXJsYXlGaWx0ZXIuamF2YQppbmRleCBlNGJiNmNmLi45MmIxNzdjIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9CaXRtYXBPdmVybGF5RmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQml0bWFwT3ZlcmxheUZpbHRlci5qYXZhCkBAIC0yMSwxNyArMjEsMTEgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVycGFja3MuaW1hZ2Vwcm9jLkltYWdlQ29tYmluZUZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIAotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIC8qKgogICogQGhpZGUKICAqLwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQml0bWFwU291cmNlLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9CaXRtYXBTb3VyY2UuamF2YQppbmRleCA5NzhmYzk0Li44OWU4NzIzIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9CaXRtYXBTb3VyY2UuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9CaXRtYXBTb3VyY2UuamF2YQpAQCAtMTcsMTcgKzE3LDExIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5maWx0ZXJwYWNrcy5pbWFnZXByb2M7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaW5hbFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQmxhY2tXaGl0ZUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQmxhY2tXaGl0ZUZpbHRlci5qYXZhCmluZGV4IDIwYjAyZDIuLjM4MjIxYjQgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0JsYWNrV2hpdGVGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9CbGFja1doaXRlRmlsdGVyLmphdmEKQEAgLTIxLDkgKzIxLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQmxlbmRGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0JsZW5kRmlsdGVyLmphdmEKaW5kZXggMjliYzhhMy4uYWZmNWU5ZSAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQmxlbmRGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9CbGVuZEZpbHRlci5qYXZhCkBAIC0xNiwxOCArMTYsOSBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZmlsdGVycGFja3MuaW1hZ2Vwcm9jOwogCi1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiAvKioKICAqIFRoZSBmaWx0ZXIgbGluZWFybHkgYmxlbmRzICJsZWZ0IiBhbmQgInJpZ2h0IiBmcmFtZXMuIFRoZSBibGVuZGluZyB3ZWlnaHQgaXMKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0JyaWdodG5lc3NGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0JyaWdodG5lc3NGaWx0ZXIuamF2YQppbmRleCAwNDZlNjlkLi5iYzYyZTE5IDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9CcmlnaHRuZXNzRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQnJpZ2h0bmVzc0ZpbHRlci5qYXZhCkBAIC0xNywxMyArMTcsOCBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZmlsdGVycGFja3MuaW1hZ2Vwcm9jOwogCi1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiAKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0NvbG9yVGVtcGVyYXR1cmVGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0NvbG9yVGVtcGVyYXR1cmVGaWx0ZXIuamF2YQppbmRleCA3NDg4OTgwLi4xZDQwOGJlIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Db2xvclRlbXBlcmF0dXJlRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ29sb3JUZW1wZXJhdHVyZUZpbHRlci5qYXZhCkBAIC0yMSwxMyArMjEsOSBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogcHVibGljIGNsYXNzIENvbG9yVGVtcGVyYXR1cmVGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIgewogCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Db250cmFzdEZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ29udHJhc3RGaWx0ZXIuamF2YQppbmRleCA3MGU5ODdmLi43MDQzYzcyIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Db250cmFzdEZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0NvbnRyYXN0RmlsdGVyLmphdmEKQEAgLTE3LDE4ICsxNywxMSBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZmlsdGVycGFja3MuaW1hZ2Vwcm9jOwogCi1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiAKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCiAvKioKICAqIEBoaWRlCiAgKi8KZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0Nyb3BGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0Nyb3BGaWx0ZXIuamF2YQppbmRleCA1MjIyZDljLi4wZWYzMjNjIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Dcm9wRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ3JvcEZpbHRlci5qYXZhCkBAIC0yMiwxOSArMjIsMTMgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5nZW9tZXRyeS5Qb2ludDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3Lmdlb21ldHJ5LlF1YWQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuT2JqZWN0Rm9ybWF0OwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogLyoqCiAgKiBAaGlkZQogICovCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Dcm9wUmVjdEZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ3JvcFJlY3RGaWx0ZXIuamF2YQppbmRleCBkNDIzZDA2Li4wMTBlZTIxIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Dcm9wUmVjdEZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0Nyb3BSZWN0RmlsdGVyLmphdmEKQEAgLTIxLDE0ICsyMSw5IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKgogICogQGhpZGUKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0Nyb3NzUHJvY2Vzc0ZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ3Jvc3NQcm9jZXNzRmlsdGVyLmphdmEKaW5kZXggZTA1MTRmOC4uZDU2NWU2NSAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ3Jvc3NQcm9jZXNzRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvQ3Jvc3NQcm9jZXNzRmlsdGVyLmphdmEKQEAgLTIxLDE1ICsyMSwxMCBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiBwdWJsaWMgY2xhc3MgQ3Jvc3NQcm9jZXNzRmlsdGVyIGV4dGVuZHMgRmlsdGVyIHsKIAogICAgIEBHZW5lcmF0ZUZpZWxkUG9ydChuYW1lID0gInRpbGVfc2l6ZSIsIGhhc0RlZmF1bHQgPSB0cnVlKQpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRG9jdW1lbnRhcnlGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0RvY3VtZW50YXJ5RmlsdGVyLmphdmEKaW5kZXggZjkzYTgyYy4uNzI3NDVjMCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRG9jdW1lbnRhcnlGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Eb2N1bWVudGFyeUZpbHRlci5qYXZhCkBAIC0yMSw5ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0RyYXdPdmVybGF5RmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9EcmF3T3ZlcmxheUZpbHRlci5qYXZhCmluZGV4IDNmMTcxMWUuLmQxMGE2ZWYgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0RyYXdPdmVybGF5RmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRHJhd092ZXJsYXlGaWx0ZXIuamF2YQpAQCAtMjEsMTcgKzIxLDExIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR0xGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5nZW9tZXRyeS5RdWFkOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0Lk9iamVjdEZvcm1hdDsKIAotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLQogLyoqCiAgKiBAaGlkZQogICovCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9EcmF3UmVjdEZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRHJhd1JlY3RGaWx0ZXIuamF2YQppbmRleCA4M2M5MzQ4Li5iMjg4ZTZlIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9EcmF3UmVjdEZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0RyYXdSZWN0RmlsdGVyLmphdmEKQEAgLTIzLDkgKzIzLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3Lmdlb21ldHJ5LlF1YWQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9EdW90b25lRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9EdW90b25lRmlsdGVyLmphdmEKaW5kZXggZDhjODhlZS4uZWY4MmVlOSAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRHVvdG9uZUZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0R1b3RvbmVGaWx0ZXIuamF2YQpAQCAtMjEsOSArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9GaWxsTGlnaHRGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ZpbGxMaWdodEZpbHRlci5qYXZhCmluZGV4IGZjOTE3YTEuLmM3ZmI1NWQgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ZpbGxMaWdodEZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ZpbGxMaWdodEZpbHRlci5qYXZhCkBAIC0yMSwxMCArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpbmFsUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRmlzaGV5ZUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRmlzaGV5ZUZpbHRlci5qYXZhCmluZGV4IDVkNzkyOWYuLjJmZjY1ODggMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0Zpc2hleWVGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9GaXNoZXllRmlsdGVyLmphdmEKQEAgLTIyLDE3ICsyMiwxMSBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiBpbXBvcnQgamF2YS5sYW5nLk1hdGg7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKIAogLyoqCiAgKiBAaGlkZQpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRml4ZWRSb3RhdGlvbkZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRml4ZWRSb3RhdGlvbkZpbHRlci5qYXZhCmluZGV4IDNkMzE5ZWEuLjM0MGYzMDggMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ZpeGVkUm90YXRpb25GaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9GaXhlZFJvdGF0aW9uRmlsdGVyLmphdmEKQEAgLTIyLDcgKzIyLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5nZW9tZXRyeS5Qb2ludDsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ZsaXBGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ZsaXBGaWx0ZXIuamF2YQppbmRleCBmOGI4NTdiLi42OGM3NjBmIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9GbGlwRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvRmxpcEZpbHRlci5qYXZhCkBAIC0yMSwxMCArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0dyYWluRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9HcmFpbkZpbHRlci5qYXZhCmluZGV4IDU3NzI0M2EuLjUyOGVhYTIgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0dyYWluRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvR3JhaW5GaWx0ZXIuamF2YQpAQCAtMjEsMTQgKzIxLDkgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZ2VvbWV0cnkuUXVhZDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3Lmdlb21ldHJ5LlBvaW50OwogCiBpbXBvcnQgamF2YS51dGlsLkRhdGU7CiBpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ltYWdlQ29tYmluZUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VDb21iaW5lRmlsdGVyLmphdmEKaW5kZXggODU4NDg5Yi4uYzlhNjk1NiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VDb21iaW5lRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VDb21iaW5lRmlsdGVyLmphdmEKQEAgLTIxLDE2ICsyMSwxMCBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIC8qKgogICogQGhpZGUKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ltYWdlRW5jb2Rlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VFbmNvZGVyLmphdmEKaW5kZXggYTU0MDVjYi4uZThiZjQ4MiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VFbmNvZGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VFbmNvZGVyLmphdmEKQEAgLTE3LDIxICsxNywxNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZmlsdGVycGFja3MuaW1hZ2Vwcm9jOwogCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAuQ29tcHJlc3NGb3JtYXQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIAogLyoqCiAgKiBAaGlkZQpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VTbGljZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ltYWdlU2xpY2VyLmphdmEKaW5kZXggYjk5NmViOC4uOGJmODBiMiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VTbGljZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9JbWFnZVNsaWNlci5qYXZhCkBAIC0yMCw5ICsyMCw3IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ltYWdlU3RpdGNoZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ltYWdlU3RpdGNoZXIuamF2YQppbmRleCAyMGFiYTkxLi41ZTNkMTViIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9JbWFnZVN0aXRjaGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvSW1hZ2VTdGl0Y2hlci5qYXZhCkBAIC0yMCwxNiArMjAsMTIgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogcHVibGljIGNsYXNzIEltYWdlU3RpdGNoZXIgZXh0ZW5kcyBGaWx0ZXIgewogCiAgICAgQEdlbmVyYXRlRmllbGRQb3J0KG5hbWUgPSAieFNsaWNlcyIpCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9JbnZlcnQuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ludmVydC5qYXZhCmluZGV4IDQwMGZkNWQuLjg4MWUzMGYgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ludmVydC5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0ludmVydC5qYXZhCkBAIC0xNywxMiArMTcsOCBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZmlsdGVycGFja3MuaW1hZ2Vwcm9jOwogCi1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvTG9tb2lzaEZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvTG9tb2lzaEZpbHRlci5qYXZhCmluZGV4IDcyNmZmZmYuLjRlNTNmOTIgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL0xvbW9pc2hGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Mb21vaXNoRmlsdGVyLmphdmEKQEAgLTIxLDkgKzIxLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvTmVnYXRpdmVGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL05lZ2F0aXZlRmlsdGVyLmphdmEKaW5kZXggNDQwZDZhNi4uZjY2ZmMyMyAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvTmVnYXRpdmVGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9OZWdhdGl2ZUZpbHRlci5qYXZhCkBAIC0yMSw5ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1Bvc3Rlcml6ZUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUG9zdGVyaXplRmlsdGVyLmphdmEKaW5kZXggYmMyZTU1My4uODY0ZDdlMiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUG9zdGVyaXplRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUG9zdGVyaXplRmlsdGVyLmphdmEKQEAgLTIxLDkgKzIxLDYgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUmVkRXllRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9SZWRFeWVGaWx0ZXIuamF2YQppbmRleCA4NjE4ODA0Li40OGIyZmRmIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9SZWRFeWVGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9SZWRFeWVGaWx0ZXIuamF2YQpAQCAtMjEsOSArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CkBAIC0zMSw4ICsyOCw2IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnRGOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKgogICogQGhpZGUKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1Jlc2l6ZUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUmVzaXplRmlsdGVyLmphdmEKaW5kZXggNDExZTA2MS4uYzc5YzExYiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUmVzaXplRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvUmVzaXplRmlsdGVyLmphdmEKQEAgLTIzLDEwICsyMyw3IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR0xGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Sb3RhdGVGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1JvdGF0ZUZpbHRlci5qYXZhCmluZGV4IDNkYTc5MzkuLjQzZDhkNmMgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1JvdGF0ZUZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1JvdGF0ZUZpbHRlci5qYXZhCkBAIC0yMiwxNiArMjIsMTEgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5nZW9tZXRyeS5RdWFkOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZ2VvbWV0cnkuUG9pbnQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogLyoqCiAgKiBAaGlkZQpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU2F0dXJhdGVGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1NhdHVyYXRlRmlsdGVyLmphdmEKaW5kZXggYjgzYWYzOS4uNzU3ZmFjMSAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU2F0dXJhdGVGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9TYXR1cmF0ZUZpbHRlci5qYXZhCkBAIC0yMSw5ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1NlcGlhRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9TZXBpYUZpbHRlci5qYXZhCmluZGV4IDdhODNmZGYuLmE5ZjRlMmMgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1NlcGlhRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU2VwaWFGaWx0ZXIuamF2YQpAQCAtMjEsOSArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9TaGFycGVuRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9TaGFycGVuRmlsdGVyLmphdmEKaW5kZXggMjU2Yjc2OS4uYTI5MDk5NiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU2hhcnBlbkZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1NoYXJwZW5GaWx0ZXIuamF2YQpAQCAtMjEsMTUgKzIxLDEwIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIAotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KIHB1YmxpYyBjbGFzcyBTaGFycGVuRmlsdGVyIGV4dGVuZHMgRmlsdGVyIHsKIAogICAgIEBHZW5lcmF0ZUZpZWxkUG9ydChuYW1lID0gInNjYWxlIiwgaGFzRGVmYXVsdCA9IHRydWUpCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9TaW1wbGVJbWFnZUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU2ltcGxlSW1hZ2VGaWx0ZXIuamF2YQppbmRleCBmNGZjMjcxZS4uYWZlOTJkZSAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU2ltcGxlSW1hZ2VGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9TaW1wbGVJbWFnZUZpbHRlci5qYXZhCkBAIC0yMSwxNiArMjEsMTAgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiAvKioKICAqIEBoaWRlCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9TdHJhaWdodGVuRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9TdHJhaWdodGVuRmlsdGVyLmphdmEKaW5kZXggYzlmMDk3ZC4uOWRiMjk2YiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvU3RyYWlnaHRlbkZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1N0cmFpZ2h0ZW5GaWx0ZXIuamF2YQpAQCAtMjIsMTYgKzIyLDExIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZ2VvbWV0cnkuUXVhZDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3Lmdlb21ldHJ5LlBvaW50OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKgogICogQGhpZGUKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1RpbnRGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1RpbnRGaWx0ZXIuamF2YQppbmRleCAwZGE1NGE1Li4yYjE0MGJhIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9UaW50RmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVGludEZpbHRlci5qYXZhCkBAIC0yMSw5ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1RvR3JheUZpbHRlci5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVG9HcmF5RmlsdGVyLmphdmEKaW5kZXggMDBlN2JmNC4uNzYwY2UzYSAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVG9HcmF5RmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVG9HcmF5RmlsdGVyLmphdmEKQEAgLTE3LDIzICsxNywxNCBAQAogCiBwYWNrYWdlIGFuZHJvaWQuZmlsdGVycGFja3MuaW1hZ2Vwcm9jOwogCi1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpZWxkUG9ydDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7Ci0KIC8qKgogICogQGhpZGUKICAqLwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVG9QYWNrZWRHcmF5RmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Ub1BhY2tlZEdyYXlGaWx0ZXIuamF2YQppbmRleCBiYzRhNjVlLi4zYzEyMWQwIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Ub1BhY2tlZEdyYXlGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Ub1BhY2tlZEdyYXlGaWx0ZXIuamF2YQpAQCAtMjcsOCArMjcsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogaW1wb3J0IGphdmEubGFuZy5NYXRoOwogLyoqCiAgKiBAaGlkZQpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVG9SR0JBRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Ub1JHQkFGaWx0ZXIuamF2YQppbmRleCBhYjQ4MTRmLi5mMDA4NGZhIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Ub1JHQkFGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Ub1JHQkFGaWx0ZXIuamF2YQpAQCAtMjEsMTYgKzIxLDExIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIEBoaWRlCiAgKi8KZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1RvUkdCRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9Ub1JHQkZpbHRlci5qYXZhCmluZGV4IDkyNTg1MDIuLmJiYjBmYzMgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1RvUkdCRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVG9SR0JGaWx0ZXIuamF2YQpAQCAtMjEsMTYgKzIxLDExIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlckNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIEBoaWRlCiAgKi8KZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1ZpZ25ldHRlRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL2ltYWdlcHJvYy9WaWduZXR0ZUZpbHRlci5qYXZhCmluZGV4IDcxNWZlYzYuLjI0OWNjNmYgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvaW1hZ2Vwcm9jL1ZpZ25ldHRlRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy9pbWFnZXByb2MvVmlnbmV0dGVGaWx0ZXIuamF2YQpAQCAtMjEsOSArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlUHJvZ3JhbTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3RleHQvU3RyaW5nU291cmNlLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3RleHQvU3RyaW5nU291cmNlLmphdmEKaW5kZXggY2MzM2I4OS4uMmZlNTE5ZiAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy90ZXh0L1N0cmluZ1NvdXJjZS5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdGV4dC9TdHJpbmdTb3VyY2UuamF2YQpAQCAtMjIsOCArMjIsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0Lk9iamVjdEZvcm1hdDsKIAogLyoqCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3VpL1N1cmZhY2VSZW5kZXJGaWx0ZXIuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdWkvU3VyZmFjZVJlbmRlckZpbHRlci5qYXZhCmluZGV4IGE1YzFjY2IuLmJhODg3MzYgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdWkvU3VyZmFjZVJlbmRlckZpbHRlci5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdWkvU3VyZmFjZVJlbmRlckZpbHRlci5qYXZhCkBAIC0yNiwxOSArMjYsMTEgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaW5hbFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRW52aXJvbm1lbnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLktleVZhbHVlTWFwOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5NdXRhYmxlRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZVByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk5hdGl2ZUZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogCi1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VWaWV3OwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogCiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy91aS9TdXJmYWNlVGFyZ2V0RmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3VpL1N1cmZhY2VUYXJnZXRGaWx0ZXIuamF2YQppbmRleCAzMDhkMTY4Li4wNWNiODFiIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3VpL1N1cmZhY2VUYXJnZXRGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3VpL1N1cmZhY2VUYXJnZXRGaWx0ZXIuamF2YQpAQCAtMjUsMTkgKzI1LDExIEBACiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmluYWxQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIAogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlVmlldzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9wcm9jL0JhY2tEcm9wcGVyRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvcHJvYy9CYWNrRHJvcHBlckZpbHRlci5qYXZhCmluZGV4IDc4ZjdmM2UuLmEzMWFjMmMgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9wcm9jL0JhY2tEcm9wcGVyRmlsdGVyLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3Byb2MvQmFja0Ryb3BwZXJGaWx0ZXIuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5Qcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKQEAgLTMyLDcgKzMxLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAotaW1wb3J0IGphdmEubGFuZy5BcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb247CiBpbXBvcnQgamF2YS5sYW5nLk1hdGg7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NpbmsvTWVkaWFFbmNvZGVyRmlsdGVyLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc2luay9NZWRpYUVuY29kZXJGaWx0ZXIuamF2YQppbmRleCA4YmI2NTNiLi5kMDM0MDUxIDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc2luay9NZWRpYUVuY29kZXJGaWx0ZXIuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc2luay9NZWRpYUVuY29kZXJGaWx0ZXIuamF2YQpAQCAtMTcsMzIgKzE3LDIzIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5maWx0ZXJwYWNrcy52aWRlb3Npbms7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmluYWxQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3Lmdlb21ldHJ5LlBvaW50OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZ2VvbWV0cnkuUXVhZDsKLWltcG9ydCBhbmRyb2lkLm9zLkNvbmRpdGlvblZhcmlhYmxlOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFSZWNvcmRlcjsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLkNhbWNvcmRlclByb2ZpbGU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdMRW52aXJvbm1lbnQ7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKIAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zaW5rL01lZGlhUmVjb3JkZXJTdG9wRXhjZXB0aW9uLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc2luay9NZWRpYVJlY29yZGVyU3RvcEV4Y2VwdGlvbi5qYXZhCmluZGV4IGRiZjk3NjguLmNlN2E4YzEgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zaW5rL01lZGlhUmVjb3JkZXJTdG9wRXhjZXB0aW9uLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NpbmsvTWVkaWFSZWNvcmRlclN0b3BFeGNlcHRpb24uamF2YQpAQCAtMTgsNyArMTgsNiBAQAogcGFja2FnZSBhbmRyb2lkLmZpbHRlcnBhY2tzLnZpZGVvc2luazsKIAogaW1wb3J0IGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKiBAaGlkZSAqKi8KIHB1YmxpYyBjbGFzcyBNZWRpYVJlY29yZGVyU3RvcEV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NyYy9DYW1lcmFTb3VyY2UuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zcmMvQ2FtZXJhU291cmNlLmphdmEKaW5kZXggMmM0NzRhYi4uZDI2MDY4NCAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NyYy9DYW1lcmFTb3VyY2UuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc3JjL0NhbWVyYVNvdXJjZS5qYXZhCkBAIC0xNywyOSArMTcsMjIgQEAKIAogcGFja2FnZSBhbmRyb2lkLmZpbHRlcnBhY2tzLnZpZGVvc3JjOwogCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpbmFsUG9ydDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR0xGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYTsKLWltcG9ydCBhbmRyb2lkLm9zLkNvbmRpdGlvblZhcmlhYmxlOwogaW1wb3J0IGFuZHJvaWQub3BlbmdsLk1hdHJpeDsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKIAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKZGlmZiAtLWdpdCBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zcmMvTWVkaWFTb3VyY2UuamF2YSBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zcmMvTWVkaWFTb3VyY2UuamF2YQppbmRleCAwYmU2YzYyLi41M2EzOWE3IDEwMDY0NAotLS0gYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc3JjL01lZGlhU291cmNlLmphdmEKKysrIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NyYy9NZWRpYVNvdXJjZS5qYXZhCkBAIC0yMywyOCArMjMsMjAgQEAKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWU7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmllbGRQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HZW5lcmF0ZUZpbmFsUG9ydDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR0xGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuS2V5VmFsdWVNYXA7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLk11dGFibGVGcmFtZUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTmF0aXZlRnJhbWU7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLlNoYWRlclByb2dyYW07CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5mb3JtYXQuSW1hZ2VGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhUGxheWVyOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLWltcG9ydCBhbmRyb2lkLm9zLkNvbmRpdGlvblZhcmlhYmxlOwogaW1wb3J0IGFuZHJvaWQub3BlbmdsLk1hdHJpeDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCmRpZmYgLS1naXQgYS9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc3JjL1N1cmZhY2VUZXh0dXJlU291cmNlLmphdmEgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc3JjL1N1cmZhY2VUZXh0dXJlU291cmNlLmphdmEKaW5kZXggMzdmYTI0Mi4uNjU5NWJhYSAxMDA2NDQKLS0tIGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NyYy9TdXJmYWNlVGV4dHVyZVNvdXJjZS5qYXZhCisrKyBiL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zcmMvU3VyZmFjZVRleHR1cmVTb3VyY2UuamF2YQpAQCAtMTYsMzEgKzE2LDIwIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5maWx0ZXJwYWNrcy52aWRlb3NyYzsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRGaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GaWx0ZXJDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRnJhbWVGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmluYWxQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5TaGFkZXJQcm9ncmFtOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZm9ybWF0LkltYWdlRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVBsYXllcjsKIGltcG9ydCBhbmRyb2lkLm9zLkNvbmRpdGlvblZhcmlhYmxlOwogaW1wb3J0IGFuZHJvaWQub3BlbmdsLk1hdHJpeDsKIAotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiAvKiogPHA+QSBmaWx0ZXIgdGhhdCBjb252ZXJ0cyB0ZXh0dXJlcyBmcm9tIGEgU3VyZmFjZVRleHR1cmUgb2JqZWN0IGludG8gZnJhbWVzIGZvcgpkaWZmIC0tZ2l0IGEvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NyYy9TdXJmYWNlVGV4dHVyZVRhcmdldC5qYXZhIGIvbWVkaWEvbWNhL2ZpbHRlcnBhY2tzL2phdmEvYW5kcm9pZC9maWx0ZXJwYWNrcy92aWRlb3NyYy9TdXJmYWNlVGV4dHVyZVRhcmdldC5qYXZhCmluZGV4IGI2ZDlmOTQuLjVkMDM2MjcgMTAwNjQ0Ci0tLSBhL21lZGlhL21jYS9maWx0ZXJwYWNrcy9qYXZhL2FuZHJvaWQvZmlsdGVycGFja3MvdmlkZW9zcmMvU3VyZmFjZVRleHR1cmVUYXJnZXQuamF2YQorKysgYi9tZWRpYS9tY2EvZmlsdGVycGFja3MvamF2YS9hbmRyb2lkL2ZpbHRlcnBhY2tzL3ZpZGVvc3JjL1N1cmZhY2VUZXh0dXJlVGFyZ2V0LmphdmEKQEAgLTE5LDI5ICsxOSwxOSBAQAogCiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuRmlsdGVyU3VyZmFjZVZpZXc7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkZyYW1lOwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5GcmFtZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuR2VuZXJhdGVGaWVsZFBvcnQ7CiBpbXBvcnQgYW5kcm9pZC5maWx0ZXJmdy5jb3JlLkdlbmVyYXRlRmluYWxQb3J0OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5HTEZyYW1lOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5LZXlWYWx1ZU1hcDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuTXV0YWJsZUZyYW1lRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVQcm9ncmFtOwotaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuY29yZS5OYXRpdmVGcmFtZTsKLWltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmNvcmUuU2hhZGVyUHJvZ3JhbTsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3LmZvcm1hdC5JbWFnZUZvcm1hdDsKIAogaW1wb3J0IGFuZHJvaWQuZmlsdGVyZncuZ2VvbWV0cnkuUXVhZDsKIGltcG9ydCBhbmRyb2lkLmZpbHRlcmZ3Lmdlb21ldHJ5LlBvaW50OwogCi1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VWaWV3OwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7CiAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5ZTZhYQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiJUYW0geWVkyZlrbMmZbcmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+IlRhbSBiyZlycGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90ZXh0IiBtc2dpZD0iMTg3ODAyMTI4Mjc1ODg5NjU5MyI+IkLDvHTDvG4gZGF0YW7EsW4gcW/Fn3VsbXXFnyBtYXNhw7xzdMO8IGtvbXDDvHRlcsmZIHJlemVydiBvbHVubWFzxLEgc29yxJ91c3UgZ8O2bmTJmXJpbGliLiBCdW5hIGljYXrJmSB2ZXJtyZlrIGlzdMmZeWlyc2luaXogbWk/XG5cbsaPZ8mZciBidSBzb3LEn3VudSBnw7ZuZMmZcm3JmW1pc2luaXpzyZksIGJ1IHByb3Nlc2luIGRhdmFtIGV0bcmZc2luyZkgaWNhesmZIHZlcm3JmXlpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNDIxNzIyODc0Nzc2OTY0NDA2OCI+Ik3JmWx1bWF0bGFyxLFtxLEgeWVkyZlrbMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+IlJlemVydiBldG3JmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+IlFvxZ91bG11xZ8gc3RvbMO8c3TDvCBrb21ww7x0ZXJkyZluIHRhbSBiyZlycGEgdMmZbMmZYiBvbHVudXIuIEJ1bmEgaWNhesmZIHZlcmlsc2luP1xuXG5CyZlycGFuxLEgc2l6IMO2esO8bsO8eiB0yZlsyZliIGV0bcmZbWlzaW5penPJmSwgYnUgyZltyZlsaXl5YXTEsSBkYXZhbSBldGRpcm3JmXlpbi4gQnUgY2loYXpkYWvEsSBpc3TJmW5pbMmZbiBtyZlsdW1hdMSxIGTJmXlpxZ9kaXLJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4iTcmZbHVtYXRsYXLEsW3EsSBiyZlycGEgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+IkLJmXJwYSBldG3JmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiJMw7x0ZsmZbiwgYcWfYcSfxLFkYSBjYXJpIHllZMmZayBwYXJvbHVudXp1IGRheGlsIGVkaW46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fcmVzdG9yZV90ZXh0IiBtc2dpZD0iMTU3MDg2NDkxNjg1NTIwODk5MiI+IkzDvHRmyZluLCBhxZ9hxJ/EsWRhIGNpaGF6IMWfaWZyyZlsyZltyZkgcGFyb2x1bnUgZGF4aWwgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9iYWNrdXBfdGV4dCIgbXNnaWQ9IjU4NjY1OTA3NjI2NzI4NDQ2NjQiPiJMw7x0ZsmZbiwgYcWfYcSfxLFkYSBjaWhheiDFn2lmcsmZbMmZbcmZIHBhcm9sdW51enUgZGF4aWwgZWRpbi4gQnUgeWVkyZlrIGFyeGl2aW5pIMWfaWZyyZlsyZltyZlrIMO8w6fDvG4gZMmZIGlzdGlmYWTJmSBvbHVuYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4iVGFtIHllZMmZayBkYXRhIMWfaWZyyZlsyZltyZlkyZluIGlzdGlmYWTJmSDDvMOnw7xuIMWfaWZyyZkgZGF4aWwgZWRpbi4gxo9nyZlyIGJvxZ8gYnVyYXjEsWxzYSwgY2FyaSB5ZWTJmWsgxZ9pZnLJmSBpc3RpZmFkyZkgb2x1bmFjYXE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF9vcHRpb25hbCIgbXNnaWQ9IjEzNTAxMzczNDU5MDc1NzkzMDYiPiJCw7x0w7xuIHllZMmZayBkYXRhbsSxIMWfaWZyyZlsyZltyZlrIGlzdMmZeWlyc2luaXpzyZksIGHFn2HEn8SxZGEgcGFyb2wgZGF4aWwgZWRpbjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IkLJmXJwYSBtyZlsdW1hdGxhcsSxIMWfaWZyyZlsyZluaWJzyZksIMWfaWZyyZluaSBhxZ9hxJ/EsWRhIGRheGlsIGVkaW46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiJSZXplcnYgZWRpbGlyIC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiJZZWTJmWtsyZltyZkgc29uYSDDp2F0ZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+IkLJmXJwYSBiYcWfbGF5xLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiJCyZlycGEgc29uYSDDp2F0ZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfdGltZW91dCIgbXNnaWQ9IjUyNzY1OTg1ODcwODc2MjY4NzciPiLGj23JmWxpeXlhdCB2YXh0xLEgYml0ZGkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjllNmFhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4iVGFtIHllZMmZa2zJmW3JmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90aXRsZSIgbXNnaWQ9IjU0NjkzNjU4MDk1Njc0ODY2MDIiPiJUYW0gYsmZcnBhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiJCw7x0w7xuIGRhdGFuxLFuIHFvxZ91bG11xZ8gbWFzYcO8c3TDvCBrb21ww7x0ZXLJmSByZXplcnYgb2x1bm1hc8SxIHNvcsSfdXN1IGfDtm5kyZlyaWxpYi4gQnVuYSBpY2F6yZkgdmVybcmZayBpc3TJmXlpcnNpbml6IG1pP1xuXG7Gj2fJmXIgYnUgc29yxJ91bnUgZ8O2bmTJmXJtyZltaXNpbml6c8mZLCBidSBwcm9zZXNpbiBkYXZhbSBldG3JmXNpbsmZIGljYXrJmSB2ZXJtyZl5aW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjQyMTcyMjg3NDc3Njk2NDQwNjgiPiJNyZlsdW1hdGxhcsSxbcSxIHllZMmZa2zJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjYwMDkxMTkxMTU1ODEwOTc3MDgiPiJSZXplcnYgZXRtyZl5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiJRb8WfdWxtdcWfIHN0b2zDvHN0w7wga29tcMO8dGVyZMmZbiB0YW0gYsmZcnBhIHTJmWzJmWIgb2x1bnVyLiBCdW5hIGljYXrJmSB2ZXJpbHNpbj9cblxuQsmZcnBhbsSxIHNpeiDDtnrDvG7DvHogdMmZbMmZYiBldG3JmW1pc2luaXpzyZksIGJ1IMmZbcmZbGl5eWF0xLEgZGF2YW0gZXRkaXJtyZl5aW4uIEJ1IGNpaGF6ZGFrxLEgaXN0yZluaWzJmW4gbcmZbHVtYXTEsSBkyZl5acWfZGlyyZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzA4MTI4Njc1MjI3NzEyNzgyNyI+Ik3JmWx1bWF0bGFyxLFtxLEgYsmZcnBhIGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiJCyZlycGEgZXRtyZl5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjdXJyZW50X3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI4MjY4MTg5NTU1NTc4Mjk4MDY3Ij4iTMO8dGbJmW4sIGHFn2HEn8SxZGEgY2FyaSB5ZWTJmWsgcGFyb2x1bnV6dSBkYXhpbCBlZGluOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX3Jlc3RvcmVfdGV4dCIgbXNnaWQ9IjE1NzA4NjQ5MTY4NTUyMDg5OTIiPiJMw7x0ZsmZbiwgYcWfYcSfxLFkYSBjaWhheiDFn2lmcsmZbMmZbcmZIHBhcm9sdW51IGRheGlsIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4iTMO8dGbJmW4sIGHFn2HEn8SxZGEgY2loYXogxZ9pZnLJmWzJmW3JmSBwYXJvbHVudXp1IGRheGlsIGVkaW4uIEJ1IHllZMmZayBhcnhpdmluaSDFn2lmcsmZbMmZbcmZayDDvMOnw7xuIGTJmSBpc3RpZmFkyZkgb2x1bmFjYXEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+IlRhbSB5ZWTJmWsgZGF0YSDFn2lmcsmZbMmZbcmZZMmZbiBpc3RpZmFkyZkgw7zDp8O8biDFn2lmcsmZIGRheGlsIGVkaW4uIMaPZ8mZciBib8WfIGJ1cmF4xLFsc2EsIGNhcmkgeWVkyZlrIMWfaWZyyZkgaXN0aWZhZMmZIG9sdW5hY2FxOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4iQsO8dMO8biB5ZWTJmWsgZGF0YW7EsSDFn2lmcsmZbMmZbcmZayBpc3TJmXlpcnNpbml6c8mZLCBhxZ9hxJ/EsWRhIHBhcm9sIGRheGlsIGVkaW46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiJCyZlycGEgbcmZbHVtYXRsYXLEsSDFn2lmcsmZbMmZbmlic8mZLCDFn2lmcsmZbmkgYcWfYcSfxLFkYSBkYXhpbCBlZGluOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9zdGFydGVkIiBtc2dpZD0iNTUwMzU0MjgxNDUyNzU2MTIxIj4iUmV6ZXJ2IGVkaWxpciAuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfZW5kZWQiIG1zZ2lkPSIzODE4MDgwNzY5NTQ4NzI2NDI0Ij4iWWVkyZlrbMmZbcmZIHNvbmEgw6dhdGTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfc3RhcnRlZCIgbXNnaWQ9Ijc4ODE2NzkyMTg5NzEyNzczODUiPiJCyZlycGEgYmHFn2xhecSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfZW5kZWQiIG1zZ2lkPSIxNzY0MDQxNjM5MTk5Njk2MTMyIj4iQsmZcnBhIHNvbmEgw6dhdGTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3RpbWVvdXQiIG1zZ2lkPSI1Mjc2NTk4NTg3MDg3NjI2ODc3Ij4ixo9tyZlsaXl5YXQgdmF4dMSxIGJpdGRpIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ODA0MWEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWJlL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gIAotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAKLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiLQn9C+0Z7QvdCw0LUg0YDRjdC30LXRgNCy0L7QstCw0LUg0LrQsNC/0ZbRj9Cy0LDQvdC90LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI1NDY5MzY1ODA5NTY3NDg2NjAyIj4i0J/QvtGe0L3QsNC1INCw0LTQvdCw0Z7Qu9C10L3QvdC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiLQkdGL0LvQviDQv9GA0LDQv9Cw0L3QsNCy0LDQvdCwINC/0L7RntC90LDQtSDRgNGN0LfQtdGA0LLQvtCy0LDQtSDQutCw0L/RltGP0LLQsNC90L3QtSDRntGB0ZbRhSDQtNCw0LTQt9C10L3Ri9GFINC90LAg0L/QsNC00LvRg9GH0LDQvdGL0Lwg0L3QsNGB0YLQvtC70YzQvdGL0Lwg0LrQsNC80L/Rg9GC0LDRgNGLLiDQlNCw0LfQstC+0LvRltGG0Ywg0LPRjdGC0LA/XG5cbtCa0LDQu9GWINCy0Ysg0YHQsNC80ZYg0L3QtSDQt9Cw0L/Ri9GC0LLQsNC70ZYg0YDRjdC30LXRgNCy0L7QstCw0LUg0LrQsNC/adGP0LLQsNC90L3QtSwg0YHQv9GL0L1p0YbQtSDQsNC/0LXRgNCw0YbRi9GOLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFsbG93X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI0MjE3MjI4NzQ3NzY5NjQ0MDY4Ij4i0KDRjdC30LXRgNCy0L7QstCw0LUg0LrQsNC/0ZbRj9Cy0LDQvdC90LUg0LTQsNC00LfQtdC90YvRhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlbnlfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjYwMDkxMTkxMTU1ODEwOTc3MDgiPiLQndC1INGB0YLQstCw0YDQsNGG0Ywg0YDRjdC30LXRgNCy0L7QstGL0Y8g0LrQvtC/0ZbRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+ItCX0LDQv9GL0YLQsNC90LAg0L/QvtGe0L3QsNC1INCw0LTQvdCw0Z7Qu9C10L3QvdC1INGe0YHRltGFINC00LDQtNC30LXQvdGL0YUg0Lcg0L/QsNC00LvRg9GH0LDQvdCw0LPQsCDQvdCw0YHRgtC+0LvRjNC90LDQs9CwINC60LDQvNC/0YPRgtCw0YDQsC4g0JTQsNC30LLQvtC70ZbRhtGMINCz0Y3RgtCwP1xuXG7QmtCw0LvRliDQstGLINGB0LDQvNGWINC90LUg0LfQsNC/0YvRgtCy0LDQu9GWINCw0LTQvdCw0Z7Qu9C10L3QvdC1LCDQvdC1INC00LDQt9Cy0LDQu9GP0LnRhtC1INC/0YDQsNGG0Y/Qs9Cy0LDRhtGMINCw0L/QtdGA0LDRhtGL0Y4uINCT0Y3RgtCwINC/0YDRi9Cy0Y/QtNC30LUg0LTQsCDQt9Cw0LzQtdC90Ysg0Y/QutGW0YUt0L3QtdCx0YPQtNC30Ywg0LTQsNC00LfQtdC90YvRhSwg0Y/QutGW0Y8g0LfQsNGA0LDQtyDQt9C90LDRhdC+0LTQt9GP0YbRhtCwINC90LAg0L/RgNGL0LvQsNC00LfQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbGxvd19yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjMwODEyODY3NTIyNzcxMjc4MjciPiLQkNC00L3QsNCy0ZbRhtGMINC80LDQtSDQtNCw0LTQt9C10L3Ri9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiLQndC1INCw0LTQvdCw0Z7Qu9GP0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiLQo9Cy0Y/QtNC30ZbRhtC1INCy0LDRiCDQsdGP0LPRg9GH0Ysg0L/QsNGA0L7Qu9GMINGA0Y3Qt9C10YDQstC+0LLQsNCz0LAg0LrQsNC/0ZbRj9Cy0LDQvdC90Y8g0L3RltC20Y3QuToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9yZXN0b3JlX3RleHQiIG1zZ2lkPSIxNTcwODY0OTE2ODU1MjA4OTkyIj4i0KPQstGP0LTQt9GW0YbQtSDQvWnQttGN0Lkg0L/QsNGA0L7Qu9GMINC00LvRjyDRgNCw0YHRiNGL0YTRgNCw0LLQsNC90L3RjyDQv9GA0YvQu9Cw0LTRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9iYWNrdXBfdGV4dCIgbXNnaWQ9IjU4NjY1OTA3NjI2NzI4NDQ2NjQiPiLQo9Cy0Y/QtNC30ZbRhtC1INC/0LDRgNC+0LvRjCDQtNC70Y8g0YDQsNGB0YjRi9GE0YDQsNCy0LDQvdC90Y8g0L/RgNGL0LvQsNC00YsuINCB0L0g0YLQsNC60YHQsNC80LAg0LHRg9C00LfQtSDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGG0LAg0LTQu9GPINGA0LDRgdGI0YvRhNGA0LDQstCw0L3QvdGPINGA0Y3Qt9C10YDQstC+0LLQsNC5INC60L7Qv9GW0ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+ItCj0LLRj9C00LfRltGG0LUg0L/QsNGA0L7Qu9GMLCDRj9C60ZYg0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0LXRhtGG0LAg0LTQu9GPINGI0YvRhNGA0LDQstCw0L3QvdGPINGe0YHRltGFINC00LDQtNC30LXQvdGL0YUg0YDRjdC30LXRgNCy0L7QstCw0LPQsCDQutCw0L/RltGP0LLQsNC90L3Rjy4g0JrQsNC70ZYg0LPRjdGC0LDQtSDQv9C+0LvQtSDQv9Cw0LrRltC90YPRhtGMINC/0YPRgdGC0YvQvCwg0LHRg9C00LfQtSDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGG0LAg0LHRj9Cz0YPRh9GLINC/0LDRgNC+0LvRjCDRgNGN0LfQtdGA0LLQvtCy0LDQs9CwINC60LDQv9GW0Y/QstCw0L3QvdGPOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4i0JrQsNC70ZYg0LLRiyDQttCw0LTQsNC10YbQtSDQt9Cw0YjRi9GE0YDQsNCy0LDRhtGMINGD0YHQtSDQtNCw0LTQt9C10L3Ri9GPINGA0Y3Qt9C10YDQstC+0LLQsNCz0LAg0LrQsNC/0ZbRj9Cy0LDQvdC90Y8sINGD0LLRj9C00LfRltGG0LUg0L/QsNGA0L7Qu9GMINC90ZbQttGN0Lk6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiLQmtCw0LvRliDQtNCw0LTQt9C10L3Ri9GPINC00LvRjyDQsNC00L3QsNGe0LvQtdC90L3RjyDQt9Cw0YjRi9GE0YDQsNCy0LDQvdGL0Y8sINGD0LLRj9C00LfRltGG0LUg0L/QsNGA0L7Qu9GMINC90ZbQttGN0Lk6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiLQoNGN0LfQtdGA0LLQvtCy0LDQtSDQutCw0L/RltGP0LLQsNC90L3QtS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiLQoNGN0LfQtdGA0LLQvtCy0LDQtSDQutCw0L/RltGP0LLQsNC90L3QtSDRgdC60L7QvdGH0YvQu9Cw0YHRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfc3RhcnRlZCIgbXNnaWQ9Ijc4ODE2NzkyMTg5NzEyNzczODUiPiLQn9Cw0YfRi9C90LDQtdGG0YbQsCDQsNC00L3QsNGe0LvQtdC90L3QtS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfZW5kZWQiIG1zZ2lkPSIxNzY0MDQxNjM5MTk5Njk2MTMyIj4i0JDQtNC90LDRntC70LXQvdC90LUg0YHQutC+0L3Rh9GL0LvQsNGB0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0b2FzdF90aW1lb3V0IiBtc2dpZD0iNTI3NjU5ODU4NzA4NzYyNjg3NyI+ItCi0LDQudC8LdCw0Z7RgiDQsNC/0LXRgNCw0YbRi9GWIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDk2ZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90aXRsZSIgbXNnaWQ9IjgyNzU2MzcyNDIwOTMwMzM0NSI+IkZ1bGwgYmFja3VwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+IkZ1bGwgcmVzdG9yYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90ZXh0IiBtc2dpZD0iMTg3ODAyMTI4Mjc1ODg5NjU5MyI+IkEgZnVsbCBiYWNrdXAgb2YgYWxsIGRhdGEgdG8gYSBjb25uZWN0ZWQgZGVza3RvcCBjb21wdXRlciBoYXMgYmVlbiByZXF1ZXN0ZWQuIERvIHlvdSB3YW50IHRvIGFsbG93IHRoaXMgdG8gaGFwcGVuP1xuXG5JZiB5b3UgZGlkIG5vdCByZXF1ZXN0IHRoZSBiYWNrdXAgeW91cnNlbGYsIGRvIG5vdCBhbGxvdyB0aGUgb3BlcmF0aW9uIHRvIHByb2NlZWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjQyMTcyMjg3NDc3Njk2NDQwNjgiPiJCYWNrIHVwIG15IGRhdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2MDA5MTE5MTE1NTgxMDk3NzA4Ij4iRG8gbm90IGJhY2sgdXAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiJBIGZ1bGwgcmVzdG9yZSBvZiBhbGwgZGF0YSBmcm9tIGEgY29ubmVjdGVkIGRlc2t0b3AgY29tcHV0ZXIgaGFzIGJlZW4gcmVxdWVzdGVkLiBEbyB5b3Ugd2FudCB0byBhbGxvdyB0aGlzIHRvIGhhcHBlbj9cblxuSWYgeW91IGRpZCBub3QgcmVxdWVzdCB0aGUgcmVzdG9yZSB5b3Vyc2VsZiwgZG8gbm90IGFsbG93IHRoZSBvcGVyYXRpb24gdG8gcHJvY2VlZC4gVGhpcyB3aWxsIHJlcGxhY2UgYW55IGRhdGEgY3VycmVudGx5IG9uIHRoZSBkZXZpY2UhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4iUmVzdG9yZSBteSBkYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiJEbyBub3QgcmVzdG9yZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiJQbGVhc2UgZW50ZXIgeW91ciBjdXJyZW50IGJhY2t1cCBwYXNzd29yZCBiZWxvdzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9yZXN0b3JlX3RleHQiIG1zZ2lkPSIxNTcwODY0OTE2ODU1MjA4OTkyIj4iUGxlYXNlIGVudGVyIHlvdXIgZGV2aWNlIGVuY3J5cHRpb24gcGFzc3dvcmQgYmVsb3cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4iUGxlYXNlIGVudGVyIHlvdXIgZGV2aWNlIGVuY3J5cHRpb24gcGFzc3dvcmQgYmVsb3cuIFRoaXMgd2lsbCBhbHNvIGJlIHVzZWQgdG8gZW5jcnlwdCB0aGUgYmFja3VwIGFyY2hpdmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+IlBsZWFzZSBlbnRlciBhIHBhc3N3b3JkIHRvIHVzZSBmb3IgZW5jcnlwdGluZyB0aGUgZnVsbCBiYWNrdXAgZGF0YS4gSWYgdGhpcyBpcyBsZWZ0IGJsYW5rLCB5b3VyIGN1cnJlbnQgYmFja3VwIHBhc3N3b3JkIHdpbGwgYmUgdXNlZDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX29wdGlvbmFsIiBtc2dpZD0iMTM1MDEzNzM0NTkwNzU3OTMwNiI+IklmIHlvdSB3aXNoIHRvIGVuY3J5cHQgdGhlIGZ1bGwgYmFja3VwIGRhdGEsIGVudGVyIGEgcGFzc3dvcmQgYmVsb3c6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiJJZiB0aGUgcmVzdG9yZSBkYXRhIGlzIGVuY3J5cHRlZCwgcGxlYXNlIGVudGVyIHRoZSBwYXNzd29yZCBiZWxvdzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IkJhY2t1cCBzdGFydGluZy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiJCYWNrdXAgZmluaXNoZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX3N0YXJ0ZWQiIG1zZ2lkPSI3ODgxNjc5MjE4OTcxMjc3Mzg1Ij4iUmVzdG9yYXRpb24gc3RhcnRpbmcuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX2VuZGVkIiBtc2dpZD0iMTc2NDA0MTYzOTE5OTY5NjEzMiI+IlJlc3RvcmF0aW9uIGVuZGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfdGltZW91dCIgbXNnaWQ9IjUyNzY1OTg1ODcwODc2MjY4NzciPiJPcGVyYXRpb24gdGltZWQgb3V0Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtZXQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtZXQvc3RyaW5ncy54bWwKcmVuYW1lIHRvIHBhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzBmYjUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4iU2F1dmVnYXJkZSBjb21wbMOodGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI1NDY5MzY1ODA5NTY3NDg2NjAyIj4iUmVzdGF1cmF0aW9uIGNvbXBsw6h0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RleHQiIG1zZ2lkPSIxODc4MDIxMjgyNzU4ODk2NTkzIj4iVm91cyBhdmV6IGRlbWFuZMOpIHVuZSBzYXV2ZWdhcmRlIGNvbXBsw6h0ZSBkZSBsXCdlbnNlbWJsZSBkZXMgZG9ubsOpZXMgdmVycyB1biBvcmRpbmF0ZXVyIGRlIGJ1cmVhdSBjb25uZWN0w6kuIFZvdWxlei12b3VzIGxcJ2F1dG9yaXNlcj9cblxuU2kgdm91cyBuXCdhdmV6IHBhcyBkZW1hbmTDqSBsYSBzYXV2ZWdhcmRlIHZvdXMtbcOqbWUsIG5cJ2F1dG9yaXNleiBwYXMgbGEgcG91cnN1aXRlIGRlIGxcJ29ww6lyYXRpb24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjQyMTcyMjg3NDc3Njk2NDQwNjgiPiJTYXV2ZWdhcmRlciBtZXMgZG9ubsOpZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2MDA5MTE5MTE1NTgxMDk3NzA4Ij4iTmUgcGFzIHNhdXZlZ2FyZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RleHQiIG1zZ2lkPSI3NDk5ODY2NzI4MDMwNDYxNzc2Ij4iVm91cyBhdmV6IGRlbWFuZMOpIHVuZSByZXN0YXVyYXRpb24gY29tcGzDqHRlIGRlIGxcJ2Vuc2VtYmxlIGRlcyBkb25uw6llcyDDoCBwYXJ0aXIgZFwndW4gb3JkaW5hdGV1ciBkZSBidXJlYXUgY29ubmVjdMOpLiBWb3VsZXotdm91cyBsXCdhdXRvcmlzZXI/XG5cblNpIHZvdXMgblwnYXZleiBwYXMgZGVtYW5kw6kgdm91cy1tw6ptZSBsYSByZXN0YXVyYXRpb24sIG5cJ2F1dG9yaXNleiBwYXMgc2EgcG91cnN1aXRlLiBDZXR0ZSBvcMOpcmF0aW9uIHJlbXBsYWNlcmEgdG91dGVzIGxlcyBkb25uw6llcyBhY3R1ZWxsZW1lbnQgc3VyIGxcJ2FwcGFyZWlsISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzA4MTI4Njc1MjI3NzEyNzgyNyI+IlJlc3RhdXJlciBtZXMgZG9ubsOpZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+Ik5lIHBhcyByZXN0YXVyZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjdXJyZW50X3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI4MjY4MTg5NTU1NTc4Mjk4MDY3Ij4iVmV1aWxsZXogc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSBkZSBzYXV2ZWdhcmRlIGFjdHVlbCBjaS1kZXNzb3VzwqA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fcmVzdG9yZV90ZXh0IiBtc2dpZD0iMTU3MDg2NDkxNjg1NTIwODk5MiI+IlZldWlsbGV6IHNhaXNpciBsZSBtb3QgZGUgcGFzc2UgZGUgY2hpZmZyZW1lbnQgZGUgbFwnYXBwYXJlaWwgY2ktZGVzc291cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9iYWNrdXBfdGV4dCIgbXNnaWQ9IjU4NjY1OTA3NjI2NzI4NDQ2NjQiPiJWZXVpbGxleiBzYWlzaXIgbGUgbW90IGRlIHBhc3NlIGRlIGNoaWZmcmVtZW50IGRlIGxcJ2FwcGFyZWlsIGNpLWRlc3NvdXMuIElsIHBlcm1ldHRyYSDDqWdhbGVtZW50IGRlIGNoaWZmcmVyIGxlcyBhcmNoaXZlcyBkZSBzYXV2ZWdhcmRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjQ5ODE1ODU3MTQ3OTUyMzMwOTkiPiJWZXVpbGxleiBzYWlzaXIgdW4gbW90IGRlIHBhc3NlIMOgIHV0aWxpc2VyIHBvdXIgY2hpZmZyZXIgbGVzIGRvbm7DqWVzIGRlIHNhdXZlZ2FyZGUgY29tcGzDqHRlLiBTaSBjZSBjaGFtcCBuXCdlc3QgcGFzIHJlbnNlaWduw6ksIHZvdHJlIG1vdCBkZSBwYXNzZSBkZSBzYXV2ZWdhcmRlIGFjdHVlbCBzZXJhIHV0aWxpc8OpwqA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF9vcHRpb25hbCIgbXNnaWQ9IjEzNTAxMzczNDU5MDc1NzkzMDYiPiJTaSB2b3VzIHNvdWhhaXRleiBjaGlmZnJlciBsXCdlbnNlbWJsZSBkZXMgZG9ubsOpZXMgZGUgc2F1dmVnYXJkZSwgdmV1aWxsZXogc2Fpc2lyIHVuIG1vdCBkZSBwYXNzZSBjaS1kZXNzb3VzwqA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiJTaSBsZXMgZG9ubsOpZXMgZGUgcmVzdGF1cmF0aW9uIHNvbnQgY2hpZmZyw6llcywgdmV1aWxsZXogc2Fpc2lyIGxlIG1vdCBkZSBwYXNzZSBjaS1kZXNzb3VzwqA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiJEw6ltYXJyYWdlIGRlIGxhIHNhdXZlZ2FyZGXigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfZW5kZWQiIG1zZ2lkPSIzODE4MDgwNzY5NTQ4NzI2NDI0Ij4iU2F1dmVnYXJkZSB0ZXJtaW7DqWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+IkTDqW1hcnJhZ2UgZGUgbGEgcmVzdGF1cmF0aW9u4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiJSZXN0YXVyYXRpb24gdGVybWluw6llLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3RpbWVvdXQiIG1zZ2lkPSI1Mjc2NTk4NTg3MDg3NjI2ODc3Ij4iTFwnb3DDqXJhdGlvbiBhIGV4cGlyw6kuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKaW5kZXggZGQwYzY0NS4uMGIyOTgwNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbApAQCAtMTYsMjIgKzE2LDIyIEBACiAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4i4KSq4KWC4KSw4KWN4KSjIOCkrOCliOCkleCkheCkqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4i4KSq4KWC4KSw4KWN4KSjIOCkuOClgeCksOCkleCljeCkt+CkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90aXRsZSIgbXNnaWQ9IjU0NjkzNjU4MDk1Njc0ODY2MDIiPiLgpKrgpYLgpLDgpY3gpKMg4KSq4KWB4KSo4KSw4KWN4KS44KWN4oCN4KSl4KS+4KSq4KSo4KS+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiLgpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KSV4KS/4oCN4KSPIOCkl+CkjyDgpKHgpYfgpLjgpY3igI3gpJXgpJ/gpYngpKog4KSV4KSC4KSq4KWN4oCN4KSv4KWC4KSf4KSwIOCkuOClhyDgpLjgpK3gpYAg4KSh4KWH4KSf4KS+IOCkleClhyDgpLjgpILgpKrgpYLgpLDgpY3gpKMg4KSs4KWI4KSV4KSF4KSqIOCkleCkviDgpIXgpKjgpYHgpLDgpYvgpKcg4KSV4KS/4oCN4KSv4KS+IOCkl+Ckr+CkviDgpLngpYguIOCkleCljeKAjeCkr+CkviDgpIbgpKog4KSH4KS44KSV4KWAIOCkheCkqOClgeCkruCkpOCkv+KAjSDgpKbgpYfgpKjgpL4g4KSa4KS+4KS54KSk4KWHIOCkueCliOCkgj9cblxu4KSv4KSm4KS/4oCNIOCkhuCkquCkqOClhyDgpLjgpY3igI3gpLXgpK/gpIIg4KSs4KWI4KSV4KSF4KSqIOCkleCkviDgpIXgpKjgpYHgpLDgpYvgpKcg4KSo4KS54KWA4KSCIOCkleCkv+KAjeCkr+CkviDgpLngpYgsIOCkpOCliyDgpKrgpY3gpLDgpJXgpY3gpLDgpL/igI3gpK/gpL4g4KSc4KS+4KSw4KWAIOCksOCkluCkqOClhyDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/4oCNIOCkqCDgpKbgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiLgpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KSV4KS/4oCN4KSPIOCkl+CkjyDgpKHgpYfgpLjgpY3igI3gpJXgpJ/gpYngpKog4KSV4KSC4KSq4KWN4oCN4KSv4KWC4KSf4KSwIOCkuOClhyDgpLjgpK3gpYAg4KSh4KWH4KSf4KS+IOCkleClhyDgpLjgpILgpKrgpYLgpLDgpY3gpKMg4KS44KWB4KSw4KSV4KWN4KS34KS+IOCkleCkviDgpIXgpKjgpYHgpLDgpYvgpKcg4KSV4KS/4oCN4KSv4KS+IOCkl+Ckr+CkviDgpLngpYguIOCkleCljeKAjeCkr+CkviDgpIbgpKog4KSH4KS44KSV4KWAIOCkheCkqOClgeCkruCkpOCkv+KAjSDgpKbgpYfgpKjgpL4g4KSa4KS+4KS54KSk4KWHIOCkueCliOCkgj9cblxu4KSv4KSm4KS/4oCNIOCkhuCkquCkqOClhyDgpLjgpY3igI3gpLXgpK/gpIIg4KSs4KWI4KSV4KSF4KSqIOCkleCkviDgpIXgpKjgpYHgpLDgpYvgpKcg4KSo4KS54KWA4KSCIOCkleCkv+KAjeCkr+CkviDgpLngpYgsIOCkpOCliyDgpKrgpY3gpLDgpJXgpY3gpLDgpL/igI3gpK/gpL4g4KSc4KS+4KSw4KWAIOCksOCkluCkqOClhyDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/4oCNIOCkqCDgpKbgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjQyMTcyMjg3NDc3Njk2NDQwNjgiPiLgpK7gpYfgpLDgpYcg4KSh4KWH4KSf4KS+IOCkleCkviDgpKzgpYjgpJXgpIXgpKog4KSy4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+IuCkrOCliOCkleCkheCkqiDgpKgg4KSy4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RleHQiIG1zZ2lkPSI3NDk5ODY2NzI4MDMwNDYxNzc2Ij4i4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCkleCkv+KAjeCkjyDgpJfgpI8g4KSh4KWH4KS44KWN4oCN4KSV4KSf4KWJ4KSqIOCkleCkguCkquCljeKAjeCkr+ClguCkn+CksCDgpLjgpYcg4KS44KSt4KWAIOCkoeClh+Ckn+CkviDgpJXgpYAg4KSq4KWC4KSw4KWN4KSjIOCkquClgeCkqOCksOCljeCkuOCljeCkpeCkvuCkquCkqOCkviDgpJXgpL4g4KSF4KSo4KWB4KSw4KWL4KSnIOCkleCkv+KAjeCkr+CkviDgpJfgpK/gpL4g4KS54KWILiDgpJXgpY3igI3gpK/gpL4g4KSG4KSqIOCkh+CkuOCkleClgCDgpIXgpKjgpYHgpK7gpKTgpL/igI0g4KSm4KWH4KSo4KS+IOCkmuCkvuCkueCkpOClhyDgpLngpYjgpII/XG5cbuCkr+CkpuCkv+KAjSDgpIbgpKrgpKjgpYcg4KS44KWN4oCN4KS14KSv4KSCIOCkquClgeCkqOCksOCljeCkquCljeCksOCkvuCkquCljeCkpOCkv+KAjSDgpJXgpL4g4KSF4KSo4KWB4KSw4KWL4KSnIOCkqOCkueClgOCkgiDgpJXgpL/igI3gpK/gpL4g4KS54KWILCDgpKTgpYsg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4oCN4KSv4KS+IOCknOCkvuCksOClgCDgpLDgpJbgpKjgpYcg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkv+KAjSDgpKgg4KSm4KWH4KSCLiDgpIfgpLjgpLjgpYcg4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkruClh+CkgiDgpIbgpKrgpJXgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkquCksCDgpK7gpYzgpJzgpYLgpKYg4KSh4KWH4KSf4KS+IOCkrOCkpuCksiDgpJzgpL7gpI/gpJfgpL4hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4i4KSu4KWH4KSw4KS+IOCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpLDgpY3gpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiLgpKrgpYHgpKjgpLDgpY3gpLjgpY3igI3gpKXgpL7gpKrgpL/gpKQg4KSoIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiLgpJXgpYPgpKrgpK/gpL4g4KSo4KWA4KSa4KWHIOCkheCkquCkqOCkviDgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSs4KWI4KSV4KSF4KSqIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKHgpL7gpLLgpYfgpII6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+IuCkleClg+CkquCkr+CkviDgpKjgpYDgpJrgpYcg4KSF4KSq4KSo4KS+IOCkteCksOCljeCkpOCkruCkvuCkqCDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkleCkviDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSh4KS+4KSy4KWH4KSCOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX3Jlc3RvcmVfdGV4dCIgbXNnaWQ9IjE1NzA4NjQ5MTY4NTUyMDg5OTIiPiLgpJXgpYPgpKrgpK/gpL4g4KSo4KWA4KSa4KWHIOCkheCkquCkqOCkviDgpIngpKrgpJXgpLDgpKMg4KSP4KSo4KWN4oCN4KSV4KWN4KSw4KS/4KSq4KWN4KS24KSoIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKHgpL7gpLLgpYfgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4i4KSV4KWD4KSq4KSv4KS+IOCkheCkquCkqOCkviDgpIngpKrgpJXgpLDgpKMg4KSP4KSo4KWN4KSV4KWN4KSw4KS/4KSq4KWN4KS24KSoIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKjgpYDgpJrgpYcg4KSm4KSw4KWN4KScIOCkleCksOClh+Ckgi4g4KSs4KWI4KSV4KSF4KSqIOCkuOCkguCkl+CljeCksOCkueCkoyDgpJXgpYsg4KSP4KSo4KWN4oCN4KSV4KWN4KSw4KS/4KSq4KWN4oCN4KSfIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkreClgCDgpIfgpLjgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCkv+Ckr+CkviDgpJzgpL7gpI/gpJfgpL4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+IuCkleClg+CkquCkr+CkviDgpLjgpILgpKrgpYLgpLDgpY3gpKMg4KSs4KWI4KSV4KSF4KSqIOCkoeClh+Ckn+CkviDgpJXgpYsg4KSP4KSo4KWN4oCN4KSV4KWN4KSw4KS/4oCN4KSq4KWN4oCN4KSfIOCkleCksOCkqOClhyDgpK7gpYfgpIIg4KSJ4KSq4KSv4KWL4KSXIOCkleClhyDgpLLgpL/igI3gpI8g4KSq4KS+4KS44KS14KSw4KWN4KShIOCkoeCkvuCksuClh+Ckgi4g4KSv4KSm4KS/4oCNIOCkr+CkuSDgpJbgpL7gpLLgpYAg4KSb4KWL4KSh4KS8IOCkpuCkv+KAjeCkr+CkviDgpJzgpL7gpKTgpL4g4KS54KWILCDgpKTgpYsg4KSG4KSq4KSV4KWHIOCkteCksOCljeCkpOCkruCkvuCkqCDgpKzgpYjgpJXgpIXgpKog4KSq4KS+4KS44KS14KSw4KWN4KShIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KS/4oCN4KSv4KS+IOCknOCkvuCkj+Ckl+CkvjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX29wdGlvbmFsIiBtc2dpZD0iMTM1MDEzNzM0NTkwNzU3OTMwNiI+IuCkr+CkpuCkv+KAjSDgpIbgpKog4KS44KSC4KSq4KWC4KSw4KWN4KSjIOCkrOCliOCkleCkheCkqiDgpKHgpYfgpJ/gpL4g4KSP4KSo4KWN4oCN4KSV4KWN4KSw4KS/4oCN4KSq4KWN4oCN4KSfIOCkleCksOCkqOCkviDgpJrgpL7gpLngpKTgpYcg4KS54KWI4KSCLCDgpKTgpYsg4KSo4KWA4KSa4KWHIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKHgpL7gpLLgpYfgpII6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4i4KSV4KWD4KSq4KSv4KS+IOCkheCkquCkqOCkviDgpIngpKrgpJXgpLDgpKMg4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkpOCksOClgOCkleCkviDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSo4KWA4KSa4KWHIOCkpuCksOCljeCknCDgpJXgpLDgpYfgpIIuIOCkrOCliOCkleCkheCkqiDgpLjgpILgpJfgpY3gpLDgpLngpKMg4KSV4KWLIOCkj+CkqOCljeKAjeCkleCljeCksOCkv+CkquCljeKAjeCknyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpK3gpYAg4KSH4KS44KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpL/gpK/gpL4g4KSc4KS+4KSP4KSX4KS+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjQ5ODE1ODU3MTQ3OTUyMzMwOTkiPiLgpJXgpYPgpKrgpK/gpL4g4KS44KSC4KSq4KWC4KSw4KWN4KSjIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkj+CkqOCljeKAjeCkleCljeCksOCkv+KAjeCkquCljeKAjeCknyDgpJXgpLDgpKjgpYcg4KSu4KWH4KSCIOCkieCkquCkr+Cli+CklyDgpJXgpYcg4KSy4KS/4oCN4KSPIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKHgpL7gpLLgpYfgpIIuIOCkr+CkpuCkv+KAjSDgpK/gpLkg4KSW4KS+4KSy4KWAIOCkm+Cli+CkoeCkvCDgpKbgpL/igI3gpK/gpL4g4KSc4KS+4KSk4KS+IOCkueCliCwg4KSk4KWLIOCkhuCkquCkleClhyDgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSs4KWI4KSV4KSF4KSqIOCkquCkvuCkuOCkteCksOCljeCkoSDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCkv+KAjeCkr+CkviDgpJzgpL7gpI/gpJfgpL46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF9vcHRpb25hbCIgbXNnaWQ9IjEzNTAxMzczNDU5MDc1NzkzMDYiPiLgpK/gpKbgpL/igI0g4KSG4KSqIOCkuOCkguCkquClguCksOCljeCkoyDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSh4KWH4KSf4KS+IOCkleCliyDgpI/gpKjgpY3igI3gpJXgpY3gpLDgpL/igI3gpKrgpY3igI3gpJ8g4KSV4KSw4KSo4KS+IOCkmuCkvuCkueCkpOClhyDgpLngpYjgpIIsIOCkpOCliyDgpKjgpYDgpJrgpYcg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkoeCkvuCksuClh+CkgjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IuCkr+CkpuCkv+KAjSDgpKrgpYHgpKjgpLDgpY3gpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSh4KWH4KSf4KS+IOCkleCliyDgpI/gpKjgpY3igI3gpJXgpY3gpLDgpL/igI3gpKrgpY3igI3gpJ8g4KSV4KS/4oCN4KSv4KS+IOCkl+Ckr+CkviDgpLngpYgsIOCkpOCliyDgpJXgpYPgpKrgpK/gpL4g4KSo4KWA4KSa4KWHIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKHgpL7gpLLgpYfgpII6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiLgpKzgpYjgpJXgpIXgpKog4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkueCliyDgpLDgpLngpL4g4KS54KWILi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX2VuZGVkIiBtc2dpZD0iMzgxODA4MDc2OTU0ODcyNjQyNCI+IuCkrOCliOCkleCkheCkqiDgpKrgpYLgpLDgpY3gpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpJXgpLDgpKjgpL4g4KS24KWB4KSw4KWBIOCkueCliyDgpLDgpLngpL4g4KS54KWILi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX2VuZGVkIiBtc2dpZD0iMzgxODA4MDc2OTU0ODcyNjQyNCI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpJXgpLDgpKjgpL4g4KSq4KWC4KSw4KWN4KSjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+IuCkquClgeCkqOCksOCljeCkuOCljeKAjeCkpeCkvuCkquCkqOCkviDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KS54KWLIOCksOCkueClgCDgpLngpYguLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX2VuZGVkIiBtc2dpZD0iMTc2NDA0MTYzOTE5OTY5NjEzMiI+IuCkquClgeCkqOCksOCljeCkuOCljeKAjeCkpeCkvuCkquCkqOCkviDgpLjgpK7gpL7gpKrgpY3gpKQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF90aW1lb3V0IiBtc2dpZD0iNTI3NjU5ODU4NzA4NzYyNjg3NyI+IuCkleCkvuCksOCljeCkr+CkteCkvuCkueClgCDgpLjgpK7gpK/gpKzgpL7gpLngpY3gpK8g4KS54KWLIOCkl+CkiCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYjkwODAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4i1LHVtNWi1bjVstW71aHVr9Wh1bYg1brVodWw1bjWgtW91b/VodW+1bjWgNW41oLVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90aXRsZSIgbXNnaWQ9IjU0NjkzNjU4MDk1Njc0ODY2MDIiPiLUsdW01aLVuNWy1bvVodWv1aHVtiDVvtWl1oDVodWv1aHVttWj1bbVuNaC1bQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90ZXh0IiBtc2dpZD0iMTg3ODAyMTI4Mjc1ODg5NjU5MyI+ItS/1aHVutWh1a/WgdW+1aHVriDVodW31a3VodW/1aHVvdWl1bLVodW21bjVviDVsNWh1bTVodWv1aHWgNWj1bnVqyDVvtaA1aEg1aLVuNWs1bjWgCDVv9W+1bXVodWs1bbVpdaA1asg1azWgNWr1b4g1brVodWw1bjWgtW91b/VodW+1bjWgNW01aHVtiDVsNWh1oDWgdW41oLVtCDVpyDVodaA1b7VpdWsOiDVkdWh1bbVr9Wh1bbVuNaC1Z7VtCDVpdaEINWp1bjWgtW11azVodW/1oDVpdWsINWw1aHWgNaB1bTVodW2INWv1aHVv9Wh1oDVuNaC1bTVqDpcblxu1LXVqdWlINWk1bjWgtaEINWr1bbWhNW21aXWgNWkINW61aHVsNW41oLVvdW/1aHVvtW41oDVtNWh1bYg1bDVodaA1oHVuNaC1bQg1bnVpdaEINWh1oDVpdWsLCDVqdW41oLVtdWsINW01asg1b/VvtWl1oQsINW41oDVutWl1b3VptWrINWj1bjWgNWu1bjVstW41oLVqdW11bjWgtW21agg1bfVodaA1bjWgtW21aHVr9W+1as6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjQyMTcyMjg3NDc3Njk2NDQwNjgiPiLVitWh1bDVuNaC1b3Vv9Wh1b7VuNaA1aXVrCDVq9W0INW/1b7VtdWh1azVttWl1oDVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjYwMDkxMTkxMTU1ODEwOTc3MDgiPiLVidW61aHVsNW41oLVvdW/1aHVvtW41oDVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RleHQiIG1zZ2lkPSI3NDk5ODY2NzI4MDMwNDYxNzc2Ij4i1YDVodW11oHVvtWl1awg1acg1aLVuNWs1bjWgCDVv9W+1bXVodWs1bbVpdaA1asg1aHVtNWi1bjVstW71aHVr9Wh1bYg1b7VpdaA1aHVr9Wh1bbVo9W21bjWgtW0INW01avVodaB1b7VodWuINWh1bfVrdWh1b/VodW21oTVodW11avVtiDVsNWh1bTVodWv1aHWgNWj1bnVq9aBOiDVkdWh1bbVr9Wh1bbVuNaC1Z7VtCDVpdaEINWp1bjWgtW11azVodW/1oDVpdWsLCDVuNaAINWk1aEg1b/VpdWy1asg1bjWgtW21aXVttWhOlxuXG7UtdWp1aUg1b7VpdaA1aHVr9Wh1bbVo9W21bjWgtW01agg1avVttaE1bbVpdaA1aQg1bnVpdaEINWw1aHVtdaB1aXVrCwg1anVuNaCatWsINW01asg1b/VvtWl1oQsINW41oAg1aPVuNaA1a7VuNWy1bjWgtWp1bXVuNaC1bbVqCDVt9Wh1oDVuNaC1bbVodWv1b7Vqzog1LTVoSDVr9aD1bjVrdWh1oDVq9W21asg1bbVpdaA1a/VodW11bjWgtW0INWw1aXVvNWh1a3VuNW91asg1bTVpdW7INWj1b/VttW+1bjVsiDWgdWh1bbVr9Wh1oHVodWuINW/1b7VtdWh1aw6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4i1Y7VpdaA1aHVr9Wh1bbVo9W21aXVrCDVq9W0INW/1b7VtdWh1azVttWl1oDVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIxNzI0MzY3MzM0NDUzMTA0Mzc4Ij4i1YnVvtWl1oDVodWv1aHVttWj1bbVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+ItS91bbVpNaA1bjWgtW0INWl1bbWhCDVtNW41oLVv9aE1aHVo9aA1aXVrCDVsdWl1oAg1ajVttWp1aHWgdWr1a8g1brVodWw1bjWgtW91b/VodW11avVtiDVo9Wh1bLVv9W21aHVotWh1bzVqCDVttWl1oDWhNaH1bjWgtW0YCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX3Jlc3RvcmVfdGV4dCIgbXNnaWQ9IjE1NzA4NjQ5MTY4NTUyMDg5OTIiPiLUvdW21aTWgNW41oLVtCDVpdW21oQg1bTVuNaC1b/WhNWh1aPWgNWl1awg1bHVpdaAINW91aHWgNaE1asg1a/VuNWk1aHVvtW41oDVvtWh1a4g1aPVodWy1b/VttWh1aLVodW81agg1bbVpdaA1oTWh9W41oLVtDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9iYWNrdXBfdGV4dCIgbXNnaWQ9IjU4NjY1OTA3NjI2NzI4NDQ2NjQiPiLUvdW21aTWgNW41oLVtCDVpdW21oQg1bTVuNaC1b/WhNWh1aPWgNWl1awg1bHVpdaAINW91aHWgNaE1asg1a/VuNWk1aHVvtW41oDVvtWh1a4g1aPVodWy1b/VttWh1aLVodW81agg1bbVpdaA1oTWh9W41oLVtDog1LHVtdW2INW21aHWhyDVr9aF1aPVv9Wh1aPVuNaA1a7VvtWrINW61aHVsNW41oLVvdW/1aHVtdWr1bYg1aHWgNWt1avVvtWrINWv1bjVpNWh1b7VuNaA1bTVodW2INWw1aHVtNWh1oA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+ItS91bbVpNaA1bjWgtW0INWl1bbWhCDVtNW41oLVv9aE1aHVo9aA1aXVrCDVo9Wh1bLVv9W21aHVotWh1bzVqGDCoNWh1bTVotW41bLVu9Wh1a/VodW2INW61aHVsNW41oLVvdW/1aHVvtW41oDVvtW41bIg1b/VvtW11aHVrNW21aXWgNWoINWv1bjVpNWh1b7VuNaA1aXVrNW41oIg1bDVodW01aHWgDog1LXVqdWlIOKAi+KAi9Wh1bXVtiDVpNWh1b/VodaA1a8g1anVuNWy1bbVpdaELCDVodW61aEg1a/WhdWj1b/VodWj1bjWgNWu1b7VqyDVsdWl1oAg1aHVvNWv1aEg1brVodWw1bjWgtW91b/VodW+1bjWgNW01aHVtiDVo9Wh1bLVv9W21aHVotWh1bzVqGAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX29wdGlvbmFsIiBtc2dpZD0iMTM1MDEzNzM0NTkwNzU3OTMwNiI+ItS11anVpSDigIvigIvWgdWh1bbVr9Wh1bbVuNaC1bQg1aXWhCDVr9W41aTVodW+1bjWgNWl1awg1aHVtNWi1bjVstW71aHVr9Wh1bYg1brVodWw1bjWgtW91b/VodW+1bjWgNW+1aHVriDVv9W+1bXVodWs1bbVpdaA1agsINW01bjWgtW/1oTVodWj1oDVpdaEINWj1aHVstW/1bbVodWi1aHVvCDVvdW/1bjWgNaHYCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI2MTQwODk4NTI1NTgwNzEwODIzIj4i1LXVqdWlIOKAi+KAi9W+1aXWgNWh1a/VodW21aPVttW+1bjVsiDVv9W+1bXVodWs1bbVpdaA1agg1a/VuNWk1aHVvtW41oDVvtWh1a4g1aXVtiwg1a3VttWk1oDVuNaC1bQg1aXVttaEINW01bjWgtW/1oTVodWj1oDVpdWsINWj1aHVstW/1bbVodWi1aHVvNWoINW91b/VuNaA1odgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiLVitWh1bDVuNaC1b3Vv9Wh1b7VuNaA1bjWgtW01agg1b3Vr9W91b7VuNaC1bQg1acuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfZW5kZWQiIG1zZ2lkPSIzODE4MDgwNzY5NTQ4NzI2NDI0Ij4i1YrVodWw1bjWgtW91b/VodW+1bjWgNW41oLVtNW2INWh1b7VodaA1b/VvtWl1oEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX3N0YXJ0ZWQiIG1zZ2lkPSI3ODgxNjc5MjE4OTcxMjc3Mzg1Ij4i1Y7VpdaA1aHVr9Wh1bbVo9W21bjWgtW01agg1bTVpdWv1bbVodaA1a/VpdaBLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiLVjtWl1oDVodWv1aHVttWj1bbVuNaC1bTVtiDVodW+1aHWgNW/1b7VpdaBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfdGltZW91dCIgbXNnaWQ9IjUyNzY1OTg1ODcwODc2MjY4NzciPiLUs9W41oDVrtW41bLVuNaC1anVtdWh1bYg1arVodW01aHVttWh1a/VqCDVvdW61aHVvNW+1aXWgSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2ZjY3ZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiLhg6Hhg6Dhg6Phg5rhg5gg4YOh4YOQ4YOg4YOU4YOW4YOU4YOg4YOV4YOdIOGDmeGDneGDnuGDmOGDoOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90aXRsZSIgbXNnaWQ9IjU0NjkzNjU4MDk1Njc0ODY2MDIiPiLhg6Hhg6Dhg6Phg5rhg5Dhg5Mg4YOQ4YOm4YOT4YOS4YOU4YOc4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiLhg5vhg53hg5fhg67hg53hg5Xhg5zhg5jhg5og4YOY4YOl4YOc4YOQIOGDoeGDkOGDm+GDkOGDkuGDmOGDk+GDnSDhg5nhg53hg5vhg57hg5jhg6Phg6Lhg5Thg6Dhg5fhg5Dhg5wg4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOj4YOa4YOYIOGDp+GDleGDlOGDmuGDkCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5jhg6Eg4YOh4YOg4YOj4YOa4YOn4YOd4YOk4YOY4YOa4YOYIOGDoeGDkOGDoOGDlOGDluGDlOGDoOGDleGDnSDhg5Dhg6Hhg5rhg5Thg5Hhg5guIFxuXG7hg5fhg6Mg4YOh4YOQ4YOg4YOU4YOW4YOU4YOg4YOV4YOdIOGDkOGDoeGDmuGDlOGDkeGDmCDhg5fhg6Xhg5Xhg5Thg5wg4YOQ4YOgIOGDm+GDneGDkuGDmOGDl+GDruGDneGDleGDmOGDkOGDlywg4YOQ4YOgIOGDk+GDkOGDo+GDqOGDleGDkOGDlyDhg5Dhg5sg4YOd4YOe4YOU4YOg4YOQ4YOq4YOY4YOY4YOhIOGDkuGDkOGDkuGDoOGDq+GDlOGDmuGDlOGDkeGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNDIxNzIyODc0Nzc2OTY0NDA2OCI+IuGDqeGDlOGDm+GDmCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg5jhg6Eg4YOh4YOQ4YOg4YOU4YOW4YOU4YOg4YOV4YOdIOGDmeGDneGDnuGDmOGDoOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjYwMDkxMTkxMTU1ODEwOTc3MDgiPiLhg6Hhg5Dhg6Dhg5Thg5bhg5Thg6Dhg5Xhg50g4YOQ4YOh4YOa4YOU4YOR4YOYIOGDkOGDoCDhg5Lhg5Dhg5Dhg5nhg5Thg5fhg50iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiLhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg6Phg5rhg5gg4YOT4YOU4YOh4YOZ4YOi4YOd4YOeIOGDmeGDneGDm+GDnuGDmOGDo+GDouGDlOGDoOGDmOGDk+GDkOGDnCDhg5vhg53hg67hg5Phg5Ag4YOn4YOV4YOU4YOa4YOQIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDmOGDoSDhg6Hhg6Dhg6Phg5rhg5gg4YOQ4YOm4YOT4YOS4YOU4YOc4YOY4YOhIOGDm+GDneGDl+GDruGDneGDleGDnOGDkC4g4YOS4YOh4YOj4YOg4YOXLCDhg5Phg5Dhg6Phg6jhg5Xhg5Dhg5cg4YOU4YOhP1xuXG7hg5fhg6Mg4YOX4YOl4YOV4YOU4YOcIOGDl+GDleGDmOGDl+GDneGDnCDhg5Dhg6Ag4YOb4YOd4YOY4YOX4YOu4YOd4YOV4YOU4YOXIOGDkOGDpuGDk+GDkuGDlOGDnOGDkCwg4YOQ4YOgIOGDk+GDkOGDo+GDqOGDleGDkOGDlyDhg5Dhg5sg4YOd4YOe4YOU4YOg4YOQ4YOq4YOY4YOY4YOhIOGDkuGDkOGDkuGDoOGDq+GDlOGDmuGDlOGDkeGDkC4g4YOY4YOhIOGDqeGDkOGDkOGDnOGDkOGDquGDleGDmuGDlOGDkeGDoSDhg5vhg53hg6zhg6fhg53hg5Hhg5jhg5rhg53hg5Hhg5Dhg5bhg5Qg4YOQ4YOb4YOf4YOQ4YOb4YOQ4YOTIOGDkOGDoOGDoeGDlOGDkeGDo+GDmiDhg5zhg5Thg5Hhg5jhg6Hhg5vhg5jhg5Thg6Ag4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOhISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzA4MTI4Njc1MjI3NzEyNzgyNyI+IuGDqeGDlOGDm+GDmCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg5jhg6Eg4YOQ4YOm4YOT4YOS4YOU4YOc4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiLhg5Dhg6Ag4YOQ4YOm4YOQ4YOT4YOS4YOY4YOc4YOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+IuGDkuGDl+GDruGDneGDleGDlywg4YOl4YOV4YOU4YOb4YOd4YOXIOGDm+GDmOGDo+GDl+GDmOGDl+GDneGDlyDhg5fhg6Xhg5Xhg5Thg5zhg5gg4YOQ4YOb4YOf4YOQ4YOb4YOY4YOc4YOT4YOU4YOa4YOYIOGDoeGDkOGDl+GDkOGDk+GDkOGDoOGDmOGDkuGDnSDhg57hg5Dhg6Dhg53hg5rhg5g6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fcmVzdG9yZV90ZXh0IiBtc2dpZD0iMTU3MDg2NDkxNjg1NTIwODk5MiI+IuGDkuGDl+GDruGDneGDleGDlywg4YOl4YOV4YOU4YOb4YOd4YOXIOGDm+GDmOGDo+GDl+GDmOGDl+GDneGDlyDhg5fhg6Xhg5Xhg5Thg5zhg5gg4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOY4YOhIOGDk+GDkOGDqOGDmOGDpOGDleGDoOGDmOGDoSDhg57hg5Dhg6Dhg53hg5rhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4i4YOS4YOX4YOu4YOd4YOV4YOXLCDhg6Xhg5Xhg5Thg5vhg53hg5cg4YOb4YOY4YOj4YOX4YOY4YOX4YOd4YOXIOGDl+GDpeGDleGDlOGDnOGDmCDhg5vhg53hg6zhg6fhg53hg5Hhg5jhg5rhg53hg5Hhg5jhg6Eg4YOT4YOQ4YOo4YOY4YOk4YOV4YOg4YOY4YOhIOGDnuGDkOGDoOGDneGDmuGDmC4g4YOU4YOhIOGDkOGDoeGDlOGDleGDlCDhg5Lhg5Dhg5vhg53hg6fhg5Thg5zhg5Thg5Hhg6Phg5rhg5gg4YOY4YOl4YOc4YOU4YOR4YOQIOGDoeGDkOGDl+GDkOGDk+GDkOGDoOGDmOGDkuGDnSDhg5Dhg6Dhg6Xhg5jhg5Xhg5jhg6Eg4YOT4YOQ4YOo4YOY4YOk4YOg4YOV4YOY4YOh4YOQ4YOX4YOV4YOY4YOhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjQ5ODE1ODU3MTQ3OTUyMzMwOTkiPiLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOd4YOXIOGDp+GDleGDlOGDmuGDkCDhg6Hhg5Dhg5vhg5Dhg6Dhg6Xhg5Dhg6Thg50g4YOQ4YOh4YOa4YOY4YOhIOGDk+GDkOGDqOGDmOGDpOGDoOGDleGDmOGDoSDhg57hg5Dhg6Dhg53hg5rhg5guIOGDl+GDoyDhg5Dhg5sg4YOV4YOU4YOa4YOhIOGDquGDkOGDoOGDmOGDlOGDmuGDoSDhg5Phg5Dhg6Lhg53hg5Xhg5Thg5Hhg5csIOGDkuGDkOGDm+GDneGDp+GDlOGDnOGDlOGDkeGDo+GDmuGDmCDhg5jhg6Xhg5zhg5Thg5Hhg5Ag4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOUIOGDnuGDkOGDoOGDneGDmuGDmDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX29wdGlvbmFsIiBtc2dpZD0iMTM1MDEzNzM0NTkwNzU3OTMwNiI+IuGDl+GDoyDhg5Lhg6Hhg6Phg6Dhg5cg4YOh4YOg4YOj4YOa4YOYIOGDmuGDneGDmeGDkOGDmuGDo+GDoOGDmCDhg6Hhg5Dhg6Dhg5Thg5bhg5Thg6Dhg5Xhg50g4YOZ4YOd4YOe4YOY4YOY4YOhIOGDk+GDkOGDqOGDmOGDpOGDoOGDleGDkCwg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOU4YOXIOGDnuGDkOGDoOGDneGDmuGDmCDhg6Xhg5Xhg5Thg5vhg53hg5c6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiLhg5fhg6Mg4YOQ4YOm4YOh4YOQ4YOT4YOS4YOU4YOc4YOYIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDlOGDkeGDmCDhg5Phg5Dhg6jhg5jhg6Thg6Dhg6Phg5rhg5jhg5AsIOGDkuGDl+GDruGDneGDleGDlywg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOd4YOXIOGDnuGDkOGDoOGDneGDmuGDmCDhg6Xhg5Xhg5Thg5vhg53hg5c6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiLhg5Dhg6Hhg5rhg5Thg5Hhg5jhg6Eg4YOb4YOd4YOb4YOW4YOQ4YOT4YOU4YOR4YOQIOGDmOGDrOGDp+GDlOGDkeGDkC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiLhg6Hhg5Dhg6Dhg5Thg5bhg5Thg6Dhg5Xhg50g4YOZ4YOd4YOe4YOY4YOg4YOU4YOR4YOQIOGDk+GDkOGDoeGDoOGDo+GDmuGDlOGDkeGDo+GDmuGDmOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfc3RhcnRlZCIgbXNnaWQ9Ijc4ODE2NzkyMTg5NzEyNzczODUiPiLhg5Dhg6bhg5Phg5Lhg5Thg5zhg5Ag4YOY4YOs4YOn4YOU4YOR4YOQLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiLhg5Dhg6bhg5Phg5Lhg5Thg5zhg5Ag4YOT4YOQ4YOh4YOg4YOj4YOa4YOT4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfdGltZW91dCIgbXNnaWQ9IjUyNzY1OTg1ODcwODc2MjY4NzciPiLhg53hg57hg5Thg6Dhg5Dhg6rhg5jhg5jhg6Eg4YOT4YOg4YOd4YOY4YOhIOGDmuGDmOGDm+GDmOGDouGDmCDhg5Dhg5vhg53hg5jhg6zhg6Phg6Dhg5AiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NmZkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4i4Z6A4Z624Z6a4oCL4Z6U4Z6Y4Z+S4Z6a4Z674Z6E4oCL4Z6R4Z674Z6A4oCL4Z6W4Z+B4Z6J4Z6b4Z+B4Z6JIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+IuGen+GfkuGeiuGetuGemuKAi+GeoeGevuGehOGenOGet+GeieKAi+GeluGfgeGeieGem+GfgeGeiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RleHQiIG1zZ2lkPSIxODc4MDIxMjgyNzU4ODk2NTkzIj4i4Z6A4Z624Z6a4oCL4Z6U4Z6Y4Z+S4Z6a4Z674Z6E4Z6R4Z674Z6A4oCL4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4oCL4Z6R4Z624Z+G4Z6E4Z6i4Z6f4Z+L4oCL4Z6W4Z+B4Z6J4Z6b4Z+B4Z6J4oCL4oCL4Z6R4Z+F4oCL4Z6A4Z674Z+G4Z6W4Z+S4Z6Z4Z684Z6R4Z+Q4Z6a4oCL4Z6K4Z+C4Z6b4oCL4Z6U4Z624Z6T4oCL4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4Z6f4Z+S4Z6T4Z6+4Z+UIOGej+GevuKAi+GeouGfkuGek+GegOKAi+GeheGehOGfi+GesuGfkuGemeKAi+GenOGetuKAi+GegOGevuGej+KAi+GeoeGevuGehOKAi+GeiuGfguGemuKAi+GerOGekeGfgT8/XG5cbuGelOGevuKAi+GeouGfkuGek+GegOKAi+GemOGet+Gek+KAi+GelOGetuGek+KAi+Gen+GfkuGek+GevuKAi+GegOGetuGemuKAi+GelOGemOGfkuGemuGeu+GehOGekeGeu+GegOKAi+GeiuGfhOGemeKAi+GegeGfkuGem+GeveGek+KAi+GeouGfkuGek+GegOKAi+GeleGfkuGekeGetuGem+Gfi+KAi+GekeGfgSDhnoDhnrvhn4bigIvhnqLhnpPhnrvhnonhn5Lhnonhnrbhno/igIvhnpThn5Lhnprhno/hnrfhnpThno/hn5Lhno/hnrfhnoDhnrbhnprigIvhnpPhn4Hhn4fhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNDIxNzIyODc0Nzc2OTY0NDA2OCI+IuGelOGemOGfkuGemuGeu+GehOKAi+GekeGeu+GegOKAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GemuGelOGen+Gfi+KAi+GegeGfkuGeieGeu+GfhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjYwMDkxMTkxMTU1ODEwOTc3MDgiPiLhnoDhnrvhn4bigIvhnpThnpjhn5LhnprhnrvhnoTigIvhnpHhnrvhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiLhnoDhnrbhnprigIvhnp/hn5LhnorhnrbhnprigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnpHhnrbhn4bhnoThnqLhnp/hn4vigIvhnpbhn4Hhnonhnpvhn4HhnonigIvhnpbhnrjigIvhnoDhnrvhn4bhnpbhn5LhnpnhnrzhnpHhn5DhnprigIvhnorhn4LhnpvigIvhnpThnrbhnpPigIvhno/hnpfhn5LhnofhnrbhnpThn4vigIvhno/hn5LhnprhnrzhnpzigIvhnpThnrbhnpPigIvhnp/hn5LhnpPhnr7hn5Qg4Z6P4Z6+4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6F4Z6E4Z+L4oCL4Z6i4Z6T4Z674Z6J4Z+S4Z6J4Z624Z6P4oCL4Z6K4Z+C4Z6a4oCL4Z6s4Z6R4Z+BP1xuXG4g4Z6U4Z6+4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6Y4Z634Z6T4oCL4Z6U4Z624Z6T4oCL4Z6f4Z+S4Z6T4Z6+4oCL4Z6A4Z624Z6a4oCL4Z6f4Z+S4Z6K4Z624Z6a4oCL4Z6B4Z+S4Z6b4Z694Z6T4oCL4Z6v4Z6E4oCL4Z6R4Z+BIOGegOGeu+GfhuKAi+GeouGek+Geu+GeieGfkuGeieGetuGej+GflCDhnpzhnrbigIvhnpPhnrnhnoTigIvhnofhn4bhnpPhnr3hnp/igIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhno7hnrbhnpjhnr3hnpnigIvhnorhn4LhnpvigIvhnpjhnrbhnpPigIvhnpvhnr7igIvhnqfhnpThnoDhnprhno7hn40hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4i4Z6f4Z+S4Z6K4Z624Z6a4oCL4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6B4Z+S4Z6J4Z674Z+GIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiLhnoDhnrvhn4bigIvhnp/hn5LhnorhnrbhnprigIvhnqHhnr7hnoThnpzhnrfhnokiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjdXJyZW50X3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI4MjY4MTg5NTU1NTc4Mjk4MDY3Ij4i4Z6f4Z684Z6Y4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6U4Z6Y4Z+S4Z6a4Z674Z6E4oCL4Z6R4Z674Z6A4oCL4Z6U4Z6F4Z+S4Z6F4Z674Z6U4Z+S4Z6U4Z6T4Z+S4Z6T4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6B4Z624Z6E4oCL4Z6A4Z+S4Z6a4Z+E4Z6Y4Z+WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fcmVzdG9yZV90ZXh0IiBtc2dpZD0iMTU3MDg2NDkxNjg1NTIwODk5MiI+IuGen+GevOGemOKAi+GelOGeieGfkuGeheGevOGem+KAi+GeluGetuGegOGfkuGemeKAi+Gen+GemOGfkuGehOGetuGej+Gfi+KAi+GeiuGetuGegOGfi+KAi+Gem+GfgeGegeKAi+GegOGevOGeiuKAi+KAi+Gep+GelOGegOGemuGejuGfjeKAi+GemuGelOGen+Gfi+KAi+KAi+GeouGfkuGek+GegOKAi+GegeGetuGehOKAi+GegOGfkuGemuGfhOGemOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX2JhY2t1cF90ZXh0IiBtc2dpZD0iNTg2NjU5MDc2MjY3Mjg0NDY2NCI+IuGen+GevOGemOKAi+GelOGeieGfkuGeheGevOGem+KAi+GeluGetuGegOGfkuGemeKAi+Gen+GemOGfkuGehOGetuGej+Gfi+KAi+GeiuGetuGegOGfi+KAi+Gem+GfgeGegeKAi+GegOGevOGeiuKAi+Gep+GelOGegOGemuGejuGfjeKAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAi+GegeGetuGehOKAi+GegOGfkuGemuGfhOGemOGflCDhnpzhnrbigIvhnpPhnrnhnoTigIvhno/hn5LhnprhnrzhnpzigIvhnpThnrbhnpPigIvhnpThn5Lhnprhnr4g4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6K4Z624Z6A4Z+L4oCL4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6K4oCL4Z6U4Z+Q4Z6O4Z+S4Z6O4Z6f4Z624Z6a4oCL4Z6U4Z6Y4Z+S4Z6a4Z674Z6E4Z6R4Z674Z6A4oCL4Z6V4Z6E4oCL4Z6K4Z+C4Z6a4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+IuGen+GevOGemOKAi+GelOGeieGfkuGeheGevOGem+KAi+GeluGetuGegOGfkuGemeKAi+Gen+GemOGfkuGehOGetuGej+Gfi+KAi+GeiuGevuGemOGfkuGelOGeuOKAi+GelOGfkuGemuGevuKAi+Gen+GemOGfkuGemuGetuGelOGfi+KAi+GeiuGetuGegOGfi+Gem+GfgeGegeKAi+GegOGevOGeiuKAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GelOGemOGfkuGemuGeu+GehOGekeGeu+GegOKAi+GeluGfgeGeieGem+GfgeGeieGflCDhnpThnr7igIvhnpHhnrvhnoDigIvhnpzhnrbigIvhnpHhnpHhn4Eg4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6U4Z6Y4Z+S4Z6a4Z674Z6E4Z6R4Z674Z6A4oCL4Z6U4Z6F4Z+S4Z6F4Z674Z6U4Z+S4Z6U4Z6T4Z+S4Z6T4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6T4Z654Z6E4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4Z6U4Z+S4Z6a4Z6+4Z+WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF9vcHRpb25hbCIgbXNnaWQ9IjEzNTAxMzczNDU5MDc1NzkzMDYiPiLhnpThnr7igIvhnqLhn5LhnpPhnoDigIvhnoXhnoThn4vigIvhnorhnrbhnoDhn4vigIvhnpvhn4HhnoHigIvhnoDhnrzhnorigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnpThnpjhn5LhnprhnrvhnoThnpHhnrvhnoDigIvhnpbhn4Hhnonhnpvhn4Hhnokg4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6B4Z624Z6E4oCL4Z6A4Z+S4Z6a4Z+E4Z6Y4Z+WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiLhnpThnr7igIvigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnp/hn5LhnorhnrbhnprigIvhno/hn5LhnprhnrzhnpzigIvhnpThnrbhnpPigIvhnorhnrbhnoDhn4vigIvhnpvhn4HhnoHigIvhnoDhnrzhnoog4Z6f4Z684Z6Y4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6B4Z624Z6E4oCL4Z6A4Z+S4Z6a4Z+E4Z6Y4Z+WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiLhnoDhn4bhnpbhnrvhnoTigIvhnoXhnrbhnpThn4vhnpXhn5Lhnorhnr7hnpjigIvhnpThnpjhn5LhnprhnrvhnoThnpHhnrvhnoAuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfZW5kZWQiIG1zZ2lkPSIzODE4MDgwNzY5NTQ4NzI2NDI0Ij4i4Z6A4Z624Z6a4oCL4oCL4Z6U4Z6Y4Z+S4Z6a4Z674Z6E4oCL4Z6R4Z674Z6A4oCL4Z6U4Z624Z6T4oCL4Z6U4Z6J4Z+S4Z6F4Z6U4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+IuGegOGetuGemuKAi+Gen+GfkuGeiuGetuGemuKAi+GegOGfhuGeluGeu+GehOKAi+GeheGetuGelOGfi+GeleGfkuGeiuGevuGemC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfZW5kZWQiIG1zZ2lkPSIxNzY0MDQxNjM5MTk5Njk2MTMyIj4i4Z6A4Z624Z6a4oCL4Z6f4Z+S4Z6P4Z624oCL4Z6a4oCL4Z6U4Z624Z6T4oCL4Z6U4Z6J4Z+S4Z6F4Z6U4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfdGltZW91dCIgbXNnaWQ9IjUyNzY1OTg1ODcwODc2MjY4NzciPiLhnpThn5Lhnprhno/hnrfhnpThno/hn5Lhno/hnrfhnoDhnrbhnprigIvhnqLhnp/hn4vigIvhnpbhn4HhnpsiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMjg1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4i4Lqq4Lqz4Lqu4Lqt4LqH4LqC4LuN4LuJ4Lqh4Lq54LqZ4LuA4LqV4Lqx4Lqh4Lqu4Lq54Lqa4LuB4Lqa4LqaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+IuC6geC6ueC7ieC6guC7jeC7ieC6oeC6ueC6meC7gOC6leC6seC6oeC6ruC6ueC6muC7geC6muC6miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RleHQiIG1zZ2lkPSIxODc4MDIxMjgyNzU4ODk2NTkzIj4i4Lqh4Lq14LqB4Lqy4LqZ4Lqu4LuJ4Lqt4LqH4LqC4LuN4LuD4Lqr4LuJ4Lqq4Lqz4Lqu4Lqt4LqH4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqX4Lqx4LqH4Lud4Lq74LqUIOC7hOC6m+C7g+C6quC7iOC6hOC6reC6oeC6nuC6tOC6p+C7gOC6leC6teC6leC6seC7ieC6h+C7guC6leC6sOC6l+C6teC7iOC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iOC6ouC6ueC7iC4g4LqX4LuI4Lqy4LqZ4LqI4Lqw4Lqt4Lqw4LqZ4Lq44Lqh4Lqx4LqU4LuD4Lqr4LuJ4LqU4Lqz4LuA4LqZ4Lq14LqZ4LqB4Lqy4LqZ4Lqr4Lq84Lq34Lqa4LuN4LuIP1xuXG7guqvgurLguoHgupfgu4jgurLgupnguprgu43gu4jgu4TgupTgu4nguq7gu4nguq3guofguoLgu43gu4Pguqvgu4nguqrgurPguq7guq3guofguoLgu43gu4nguqHgurngupngupTgu4nguqfguo3gupXgurvgupngu4Dguq3guocsIOC6geC6sOC6peC6uOC6meC6suC6ouC7iOC6suC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC6lOC6s+C7gOC6meC6teC6meC6geC6suC6meC6leC7jeC7iOC7hOC6my4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNDIxNzIyODc0Nzc2OTY0NDA2OCI+IuC6quC6s+C6ruC6reC6h+C6guC7jeC7ieC6oeC6ueC6meC6guC6reC6h+C6guC7ieC6reC6jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjYwMDkxMTkxMTU1ODEwOTc3MDgiPiLguprgu43gu4jgu4Pguqvgu4nguqrgurPguq7guq3guofguoLgu43gu4nguqHgurngupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiLguoHgurLgupnguoHgurngu4nguoLgu43gu4nguqHgurngupngupfgurHguofgu53gurvgupTguojgurLguoHguoTguq3guqHgup7gurTguqfgu4DgupXgurXgupfgurXgu4jgu4Dguorgurfgu4jguq3guqHgupXgu43gu4jguqLgurngu4jgupngurHgu4ngupngupbgurfguoHguq7gu4nguq3guofguoLgu43gu4HguqXgu4nguqcuIOC6l+C7iOC6suC6meC6leC7ieC6reC6h+C6geC6suC6meC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC6geC6suC6meC6geC6sOC6l+C6s+C6meC6teC7ieC7gOC6geC6teC6lOC6guC6tuC7ieC6meC6muC7jeC7iD9cblxu4Lqr4Lqy4LqB4LqX4LuI4Lqy4LqZ4Lqa4LuN4LuI4LuE4LqU4LuJ4LuA4Lqu4Lqx4LqU4LqB4Lqy4LqZ4Lqu4LuJ4Lqt4LqH4LqC4LuN4LuJ4LqB4Lqy4LqZ4LqB4Lq54LuJ4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqU4LuJ4Lqn4LqN4LuC4LqV4LqX4LuI4Lqy4LqZ4LuA4Lqt4LqHLCDgupfgu4jgurLgupnguprgu43gu4jguoTguqfgupnguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4nguqHgurXguoHgurLgupngupTgurPgu4DgupngurXgupnguoHgurLgupngu4PgupTgu4Yg4LuA4LqZ4Lq34LuI4Lqt4LqH4LqI4Lqy4LqB4Lqh4Lqx4LqZ4LqI4Lqw4LuE4Lqb4LqC4Lq94LqZ4LqX4Lqx4Lqa4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqX4Lqx4LqH4Lud4Lq74LqU4LqX4Lq14LuI4Lqi4Lq54LuI4LuD4LqZ4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzA4MTI4Njc1MjI3NzEyNzgyNyI+IuC6geC6ueC7ieC6hOC6t+C6meC6guC7jeC7ieC6oeC6ueC6meC6guC6reC6h+C6guC7ieC6reC6jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIxNzI0MzY3MzM0NDUzMTA0Mzc4Ij4i4Lqa4LuN4LuI4LuD4Lqr4LuJ4LqB4Lq54LuJ4LqE4Lq34LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+IuC6geC6sOC6peC6uOC6meC6suC6m+C7ieC6reC6meC6peC6sOC6q+C6seC6lOC6nOC7iOC6suC6meC6geC6suC6meC6quC6s+C6ruC6reC6h+C6guC7jeC7ieC6oeC6ueC6meC6l+C6teC7iOC6l+C7iOC6suC6meC7g+C6iuC7ieC6ouC6ueC7iOC7g+C6quC7iOC6lOC7ieC6suC6meC6peC6uOC7iOC6oToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9yZXN0b3JlX3RleHQiIG1zZ2lkPSIxNTcwODY0OTE2ODU1MjA4OTkyIj4i4LqB4Lqw4Lql4Lq44LqZ4Lqy4Lqb4LuJ4Lqt4LqZ4Lql4Lqw4Lqr4Lqx4LqU4Lqc4LuI4Lqy4LqZ4LqB4Lqy4LqZ4LuA4LqC4Lq74LuJ4Lqy4Lql4Lqw4Lqr4Lqx4LqU4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZ4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4LuD4Lqq4LuI4LqU4LuJ4Lqy4LqZ4Lql4Lq44LuI4LqhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX2JhY2t1cF90ZXh0IiBtc2dpZD0iNTg2NjU5MDc2MjY3Mjg0NDY2NCI+IuC6geC6sOC6peC6uOC6meC6suC6m+C7ieC6reC6meC6peC6sOC6q+C6seC6lOC6nOC7iOC6suC6meC6geC6suC6meC7gOC6guC6u+C7ieC6suC6peC6sOC6q+C6seC6lOC6reC6uOC6m+C6sOC6geC6reC6meC6guC6reC6h+C6l+C7iOC6suC6meC7g+C6quC7iOC6lOC7ieC6suC6meC6peC6uOC7iOC6oS4g4Lql4Lqw4Lqr4Lqx4LqU4LqZ4Lq14LuJ4LqN4Lqx4LqH4LqI4Lqw4LuD4LqK4LuJ4LuA4Lqe4Lq34LuI4Lqt4LuA4LqC4Lq74LuJ4Lqy4Lql4Lqw4Lqr4Lqx4LqU4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqX4Lq14LuI4Lqq4Lqz4Lqu4Lqt4LqH4LuE4Lqn4LuJLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjQ5ODE1ODU3MTQ3OTUyMzMwOTkiPiLguoHgurDguqXgurjgupngurLgupvgu4nguq3gupnguqXgurDguqvgurHgupTgupzgu4jgurLgupkg4LuA4Lqe4Lq34LuI4Lqt4LuD4LqK4LuJ4LuD4LqZ4LqB4Lqy4LqZ4LuA4LqC4Lq74LuJ4Lqy4Lql4Lqw4Lqr4Lqx4LqU4LqB4Lqy4LqZ4Lqq4Lqz4Lqu4Lqt4LqH4LqC4LuN4LuJ4Lqh4Lq54LqZ4LuA4LqV4Lqx4Lqh4Lqu4Lq54Lqa4LuB4Lqa4LqaLiDgupbgu4ngurLgupvgu4jguq3guo3gu4Pguqvgu4ngu4Dgupvgurvgu4jgurLguqvguqfgu4jgurLguofgu4Tguqfgu4ksIOC6peC6sOC6q+C6seC6lOC6nOC7iOC6suC6meC6quC6s+C6ruC6reC6h+C6guC7jeC7ieC6oeC6ueC6meC6l+C6teC7iOC6l+C7iOC6suC6meC7g+C6iuC7ieC6ouC6ueC7iOC6iOC6sOC6luC6t+C6geC6meC6s+C7g+C6iuC7ieC7geC6l+C6mToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX29wdGlvbmFsIiBtc2dpZD0iMTM1MDEzNzM0NTkwNzU3OTMwNiI+IuC6q+C6suC6geC6l+C7iOC6suC6meC6leC7ieC6reC6h+C6geC6suC6meC6l+C6teC7iOC6iOC6sOC7gOC6guC6u+C7ieC6suC6peC6sOC6q+C6seC6lOC7g+C6q+C7ieC6geC6seC6muC6geC6suC6meC6quC6s+C6ruC6reC6h+C6guC7jeC7ieC6oeC6ueC6meC6l+C6seC6h+C7neC6u+C6lCwg4LqB4Lqw4Lql4Lq44LqZ4Lqy4LuD4Lqq4LuI4Lql4Lqw4Lqr4Lqx4LqU4LqX4Lqy4LqH4Lql4Lq44LuI4Lqh4LqZ4Lq14LuJOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI2MTQwODk4NTI1NTgwNzEwODIzIj4i4Lqr4Lqy4LqB4LqC4LuN4LuJ4Lqh4Lq54LqZ4Lqq4Lqz4Lqu4Lqt4LqH4LqW4Lq34LqB4LuA4LqC4Lq74LuJ4Lqy4Lql4Lqw4Lqr4Lqx4LqU4LuE4Lqn4LuJLCDguoHgurDguqXgurjgupngurLgu4Pguqrgu4jguqXgurDguqvgurHgupTgupzgu4jgurLgupngupfgurLguofgupTgu4ngurLgupnguqXgurjgu4jguqHgupngurXgu4k6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiLguoHgurPguqXgurHguofgu4DguqXgurXgu4jguqHguoHgurLgupnguqrgurPguq7guq3guofguoLgu43gu4nguqHgurngupkuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfZW5kZWQiIG1zZ2lkPSIzODE4MDgwNzY5NTQ4NzI2NDI0Ij4i4Lqq4Lqz4Lqu4Lqt4LqH4LqC4LuN4LuJ4Lqh4Lq54LqZ4Lqq4Lqz4LuA4Lql4Lqx4LqU4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+IuC6geC6suC6meC6geC6ueC7ieC6guC7jeC7ieC6oeC6ueC6meC6geC6s+C6peC6seC6h+C6iOC6sOC7gOC6peC6teC7iOC6oS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfZW5kZWQiIG1zZ2lkPSIxNzY0MDQxNjM5MTk5Njk2MTMyIj4i4LqB4Lqy4LqZ4LqB4Lq54LuJ4LqC4LuN4LuJ4Lqh4Lq54LqZ4Lqq4Lq04LuJ4LqZ4Lqq4Lq44LqU4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfdGltZW91dCIgbXNnaWQ9IjUyNzY1OTg1ODcwODc2MjY4NzciPiLgu53gurvgupTgu4DguqfguqXgurLgupvgurDgupXgurTguprgurHgupTguoHgurLgupkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNzM4YzAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4i0JHSr9GA0Y3QvSDQvdOp06nRiNC706nRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90aXRsZSIgbXNnaWQ9IjU0NjkzNjU4MDk1Njc0ODY2MDIiPiLQkdKv0YDRjdC9INGB0Y3RgNCz0Y3RjdGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiLQpdC+0LvQsdC+0LPQtNGB0L7QvSDQsdCw0LnQs9Cw0LAg0LTQtdGB0LrRgtC+0L8g0LrQvtC80L/RjNGO0YLQtdGA0LvSr9KvINCx0q/RhSDQtNCw0YLQsNCzINCx0q/RgNGN0L0g0L3TqdOp0YjQu9Op0YUg0YXSr9GB0Y3Qu9GCINGC0LDQstC40LPQtNCw0LIuINCi0LAg0Y3QvdC40LnQsyDQt9Op0LLRiNOp06nRgNOp0YUg0q/Srz9cblxu0KXRjdGA0Y3QsiDRgtCwINC906nTqdGI0LvTqdC70YIg0YXQuNC50YUg0YXSr9GB0Y3Qu9GCINGF0LjQudCz0Y3RjdCz0q/QuSDQsdC+0Lsg0Y3QvdC40LnQsyDQt9Op0LLRiNOp06nRgNGHINCx0L7Qu9C+0YXQs9Kv0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjQyMTcyMjg3NDc3Njk2NDQwNjgiPiLQnNC40L3QuNC5INC00LDRgtCw0LMg0L3TqdOp0YjQu9Op0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2MDA5MTE5MTE1NTgxMDk3NzA4Ij4i0J3TqdOp0YjQu9Op0YXQs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiLQpdC+0LvQsdC+0LPQtNGB0L7QvSDQsdCw0LnQs9Cw0LAg0LTQtdGB0LrRgtC+0L8g0LrQvtC80L/RjNGO0YLQtdGA0Y3RjdGBINCx0q/RhSDQtNCw0YLQsNCzINCx0q/RgNGN0L0g0YHRjdGA0LPRjdGN0YUg0YXSr9GB0Y3Qu9GCINGC0LDQstC40LPQtNCw0LIuINCi0LAg0Y3QvdC40LnQsyDQt9Op0LLRiNOp06nRgNOp0YUg0q/Srz9cblxu0KXRjdGA0Y3QsiDRgtCwINGB0Y3RgNCz0Y3RjdGFINGF0q/RgdGN0LvRgiDRhdC40LnQs9GN0Y3Qs9Kv0Lkg0LHQvtC7INGN0L3QuNC50LMg0LfTqdCy0YjTqdOp0YDRhyDQsdC+0LvQvtGF0LPSr9C5LiDQrdC90Y0g0L3RjCDRgtOp0YXTqdOp0YDTqdC80LYg0LTRjdGN0YAg0L7QtNC+0L4g0LHQsNC50LPQsNCwINC00YPRgNGL0L0g0LTQsNGC0LDQsyDQvtGA0LvRg9GD0LvQsNGFINCx0L7Qu9C90L4hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4i0JzQuNC90LjQuSDQtNCw0YLQsNCzINGB0Y3RgNCz0Y3RjdGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiLQodGN0YDQs9GN0Y3RhdCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiLQntC00L7QvtCz0LjQudC9INC906nTqdGI0LvTqdGFINC90YPRg9GGINKv0LPQuNC50LMg0LTQvtC+0YAg0L7RgNGD0YPQu9C90LAg0YPRgzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9yZXN0b3JlX3RleHQiIG1zZ2lkPSIxNTcwODY0OTE2ODU1MjA4OTkyIj4i0KLTqdGF06nTqdGA06nQvNC2INGI0LjRhNGA0LvRjdGFINC90YPRg9GGINKv0LPQuNC50LMg0LTQvtC+0YAg0L7RgNGD0YPQu9C90LAg0YPRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9iYWNrdXBfdGV4dCIgbXNnaWQ9IjU4NjY1OTA3NjI2NzI4NDQ2NjQiPiLQotOp0YXTqdOp0YDTqdC80LYg0YjQuNGE0YDQu9GN0YUg0L3Rg9GD0YYg0q/Qs9C40LnQsyDQtNC+0L7RgCDQvtGA0YPRg9C70L3QsCDRg9GDLiDQrdC90Y0g0L3Rg9GD0YYg0q/Qs9C40LnQsyDQvdOp06nRiNC706nRhSDQsNGA0YXQuNCy0LjQudCzINGI0LjRhNGA0LvRjdGF0Y3QtCDQsdCw0YEg0LDRiNC40LPQu9Cw0L3QsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4i0JHSr9GA0Y3QvSDQtNCw0YLQsCDQvdOp06nRiNC706nQu9GC0LjQudCzINGI0LjRhNGA0LvRjdGF0Y3QtCDQsNGI0LjQs9C70LDRhSDQvdGD0YPRhiDSr9Cz0LjQudCzINC+0YDRg9GD0LvQvdCwINGD0YMuINCl0Y3RgNGN0LIg0YLQsCDRhdC+0L7RgdC+0L0g0q/Qu9C00Y3RjdCy0Y3QuyDRgtCw0L3RiyDQvtC00L7QvtCz0LjQudC9INC906nTqdGI0LvTqdC70YLQuNC50L0g0L3Rg9GD0YYg0q/QsyDQsNGI0LjQs9C70LDQs9C00LDRhSDQsdC+0LvQvdC+OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4i0KXRjdGA0Y3QsiDRgtCwINCx0q/RgNGN0L0g0L3TqdOp0YjQu9Op0YUg0LTQsNGC0LDQsyDRiNC40YTRgNC70Y3RhSDQsdC+0Lsg0LTQvtC+0YAg0L3Rg9GD0YYg0q/Qs9C40LnQsyDQvtGA0YPRg9C70L3QsCDRg9GDOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI2MTQwODk4NTI1NTgwNzEwODIzIj4i0KXRjdGA0Y3QsiDRgdGN0YDQs9GN0Y3RhSDQtNCw0YLQsCDRiNC40YTRgNC70Y3Qs9C00YHRjdC9INCx0L7QuyDQtNC+0L7RgCDQvdGD0YPRhiDSr9Cz0LjQudCzINC+0YDRg9GD0LvQvdCwINGD0YM6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiLQndOp06nRiNC706nQtiDRjdGF0LvRjdGFLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX2VuZGVkIiBtc2dpZD0iMzgxODA4MDc2OTU0ODcyNjQyNCI+ItCd06nTqdGI0LvTqdC70YIg0LTRg9GD0YHQsNCyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+ItCh0Y3RgNCz0Y3RjdC70YIg0Y3RhdC70Y3QtiDQsdCw0LnQvdCwLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiLQodGN0YDQs9GN0Y3Qu9GCINC00YPRg9GB0LDQsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3RpbWVvdXQiIG1zZ2lkPSI1Mjc2NTk4NTg3MDg3NjI2ODc3Ij4i0JDQttC40LvQu9Cw0LPQsNCw0L3RiyDRhdGD0LPQsNGG0LDQsCDRhdGN0YLRgNGN0LIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU2MzMyZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiLgpKrgpYLgpLDgpY3gpKMg4KSs4KWN4KSv4KS+4KSV4KSF4KSqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+IuCkquClguCksOCljeCkoyDgpKrgpYHgpKjgpIPgpKrgpY3gpLDgpL7gpKrgpY3gpKTgpL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90ZXh0IiBtc2dpZD0iMTg3ODAyMTI4Mjc1ODg5NjU5MyI+IuCkj+CkieCkn+CkviDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSh4KWH4KS44KWN4KSV4KSf4KSqIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkruCkviDgpLjgpKzgpYgg4KSh4KWH4KSf4KS+4KSV4KWLIOCkj+CkieCkn+CkviDgpKrgpYLgpLDgpY3gpKMg4KSc4KSX4KWH4KSh4KS+4KSV4KWLIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpL/gpI/gpJXgpYsg4KSb4KWkIOCkleClhyDgpKTgpKrgpL7gpIjgpIEg4KSv4KWLIOCkueClgeCkqCDgpKbgpL/gpKgg4KSa4KS+4KS54KSo4KWB4KS54KWB4KSo4KWN4KSbPyBcblxu4KSv4KSm4KS/IOCkpOCkquCkvuCkiOCkgeCksuClhyDgpJzgpJfgpYfgpKHgpL7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkhuCkq+CliOCkgSDgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkqCDgpK3gpKjgpYcg4KSq4KWN4KSw4KSV4KWN4KSw4KS/4KSv4KS+4KSy4KS+4KSIIOCkheCkl+CkvuCkoeCkvyDgpKzgpKLgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkqOCkpuCkv+CkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI0MjE3MjI4NzQ3NzY5NjQ0MDY4Ij4i4KSu4KWH4KSw4KWLIOCkoeClh+Ckn+CkviDgpKzgpY3gpK/gpL7gpJXgpIXgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+IuCknOCkl+Clh+CkoeCkviDgpKjgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiLgpI/gpIngpJ/gpL4g4KSc4KSh4KS/4KSkIOCkoeClh+CkuOCljeCkleCkn+CkqiDgpJXgpK7gpY3gpKrgpY3gpK/gpYHgpJ/gpLDgpKzgpL7gpJ8g4KS44KSs4KWIIOCkoeClh+Ckn+CkvuCkleCliyDgpKrgpYLgpLDgpY3gpKMg4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkheCkqOClgeCksOCli+CkpyDgpJfgpLDgpL/gpK/gpYvgpaQg4KSV4KWHIOCkpOCkquCkvuCkiOCkgiDgpK/gpYsg4KS54KWB4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYHgpLngpYHgpKjgpY3gpJs/XG5cbuCkr+CkpuCkvyDgpKTgpKrgpL7gpIjgpIIg4KSG4KSr4KWI4KSCIOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSoIOCkreCkqOClhyDgpIXgpKrgpLDgpYfgpLjgpKjgpLLgpL7gpIgg4KSF4KSY4KS/IOCkrOCkouCkvuCkieCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSo4KSm4KS/4KSo4KWB4KS54KWL4KS44KWN4KWkIOCkr+CkuOCksuClhyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KSt4KSP4KSV4KWLIOCkleClgeCkqOCliCDgpKrgpKjgpL8g4KSh4KWH4KSf4KS+4KSy4KS+4KSIIOCkrOCkpuCksuCljeCkqOClhyDgpJshIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4i4KSu4KWH4KSw4KWLIOCkoeClh+Ckn+CkviDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiLgpKrgpYHgpKg64KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkqOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiLgpJXgpYPgpKrgpK/gpL4g4KSk4KSyIOCkpOCkquCkvuCkiOCkguCkleCliyDgpLngpL7gpLLgpJXgpYsg4KSs4KWN4KSv4KS+4KSV4KSF4KSqIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX3Jlc3RvcmVfdGV4dCIgbXNnaWQ9IjE1NzA4NjQ5MTY4NTUyMDg5OTIiPiLgpJXgpYPgpKrgpK/gpL4g4KSk4KSyIOCkpOCkquCkvuCkiOCkguCkleCliyDgpIngpKrgpJXgpLDgpKMg4KSP4KSo4KWN4KSV4KWN4KSw4KS/4KSq4KWN4KS44KSoIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX2JhY2t1cF90ZXh0IiBtc2dpZD0iNTg2NjU5MDc2MjY3Mjg0NDY2NCI+IuCkleClg+CkquCkr+CkviDgpKTgpLIg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkieCkquCkleCksOCkoyDgpI/gpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpLjgpKgg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY06IOCkr+CliyDgpKzgpY3gpK/gpL7gpJXgpKog4KS44KSB4KSX4KWN4KSw4KS5IOCkj+CkqOCljeCkleCljeCksOCkv+CkquCljeCknyDgpJfgpLDgpY3gpKgg4KSq4KSo4KS/IOCkquCljeCksOCkr+Cli+CklyDgpLngpYHgpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+IuCkrOCljeCkr+CkvuCkleCkqiDgpKHgpYfgpJ/gpL7gpLLgpL7gpIggZW5jcnlwdCDgpJfgpLDgpY3gpKgg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0sIOCkr+CkpuCkvyDgpK/gpYsg4KSW4KS+4KSy4KS/IOCkm+Cli+CkoeCkv+Ckj+CkleCliyDgpJbgpKPgpY3gpKHgpK7gpL4g4KSk4KSq4KS+4KSI4KSV4KWLIOCkquClgeCksOCkvuCkqOCliCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSq4KWN4KSw4KSv4KWL4KSXIOCkueClgeCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX29wdGlvbmFsIiBtc2dpZD0iMTM1MDEzNzM0NTkwNzU3OTMwNiI+IuCkr+CkpuCkvyDgpKTgpKrgpL7gpIjgpIIg4KSq4KWC4KSw4KWN4KSjIOCkrOCljeCkr+CkvuCkleCkheCkqiDgpKHgpYfgpJ/gpL4g4KSH4KSo4KWN4KSV4KWN4KSw4KS/4KSq4KWN4KSfIOCkl+CksOCljeCkqCDgpJrgpL7gpLngpKjgpYEg4KS54KWB4KSo4KWN4KSbIOCkreCkqOClhyDgpKTgpLIg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IuCkr+CkpuCkvyDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSh4KWH4KSf4KS+IOCkh+CkqOCljeCkleCljeCksOCkv+CkquCljeCknyDgpJsg4KSt4KSo4KWHIOCkleClg+CkquCkr+CkviDgpKTgpLIg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY06Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiLgpJzgpJfgpYfgpKHgpL4g4KSw4KS+4KSW4KWN4KSoIOCkuOClgeCksOClgSDgpLngpYHgpIHgpKbgpYguLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfZW5kZWQiIG1zZ2lkPSIzODE4MDgwNzY5NTQ4NzI2NDI0Ij4i4KSs4KWN4KSv4KS+4KSV4KSF4KSqIOCkuOCkleCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfc3RhcnRlZCIgbXNnaWQ9Ijc4ODE2NzkyMTg5NzEyNzczODUiPiLgpKrgpYHgpKjgpIPgpLjgpY3gpKXgpL7gpKrgpKjgpL4g4KS44KWB4KSw4KWBIOCkueClgeCkgeCkpuCliOCkmy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfZW5kZWQiIG1zZ2lkPSIxNzY0MDQxNjM5MTk5Njk2MTMyIj4i4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkuOCkruCkvuCkquCljeCkpCDgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF90aW1lb3V0IiBtc2dpZD0iNTI3NjU5ODU4NzA4NzYyNjg3NyI+IuCkuOCkguCkmuCksuCkqCDgpJXgpL7gpLDgpY3gpK/gpJXgpYsg4KS44KSu4KSvIOCkuOCkruCkvuCkquCljeCkpCDgpK3gpK/gpYsiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTYzMzJmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4i4KSq4KWC4KSw4KWN4KSjIOCkrOCljeCkr+CkvuCkleCkheCkqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90aXRsZSIgbXNnaWQ9IjU0NjkzNjU4MDk1Njc0ODY2MDIiPiLgpKrgpYLgpLDgpY3gpKMg4KSq4KWB4KSo4KSD4KSq4KWN4KSw4KS+4KSq4KWN4KSk4KS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiLgpI/gpIngpJ/gpL4g4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkoeClh+CkuOCljeCkleCkn+CkqiDgpJXgpK7gpY3gpKrgpY3gpK/gpYHgpJ/gpLDgpK7gpL4g4KS44KSs4KWIIOCkoeClh+Ckn+CkvuCkleCliyDgpI/gpIngpJ/gpL4g4KSq4KWC4KSw4KWN4KSjIOCknOCkl+Clh+CkoeCkvuCkleCliyDgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCDgpJXgpYcg4KSk4KSq4KS+4KSI4KSBIOCkr+CliyDgpLngpYHgpKgg4KSm4KS/4KSoIOCkmuCkvuCkueCkqOClgeCkueClgeCkqOCljeCkmz8gXG5cbuCkr+CkpuCkvyDgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSc4KSX4KWH4KSh4KS+4KSV4KWLIOCksuCkvuCkl+CkvyDgpIbgpKvgpYjgpIEg4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCljeCkqOClgSDgpK3gpI/gpKgg4KSt4KSo4KWHIOCkquCljeCksOCkleCljeCksOCkv+Ckr+CkvuCksuCkvuCkiCDgpIXgpJfgpL7gpKHgpL8g4KSs4KSi4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKjgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNDIxNzIyODc0Nzc2OTY0NDA2OCI+IuCkruClh+CksOCliyDgpKHgpYfgpJ/gpL4g4KSs4KWN4KSv4KS+4KSV4KSF4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjYwMDkxMTkxMTU1ODEwOTc3MDgiPiLgpJzgpJfgpYfgpKHgpL4g4KSo4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RleHQiIG1zZ2lkPSI3NDk5ODY2NzI4MDMwNDYxNzc2Ij4i4KSP4KSJ4KSf4KS+IOCknOCkoeCkv+CkpCDgpKHgpYfgpLjgpY3gpJXgpJ/gpKog4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSw4KSs4KS+4KSfIOCkuOCkrOCliCDgpKHgpYfgpJ/gpL7gpJXgpYsg4KSq4KWC4KSw4KWN4KSjIOCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpIXgpKjgpYHgpLDgpYvgpKcg4KSX4KSw4KS/4KSv4KWL4KWkIOCkleClhyDgpKTgpKrgpL7gpIjgpIIg4KSv4KWLIOCkueClgeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWB4KS54KWB4KSo4KWN4KSbP1xuXG7gpK/gpKbgpL8g4KSk4KSq4KS+4KSI4KSCIOCkhuCkq+CliOCkgiDgpKrgpYHgpKjgpIPgpKzgpLngpL7gpLLgpYAg4KSF4KSo4KWB4KSw4KWL4KSnIOCkl+CksOCljeCkqOClgeCkueClgeCkqOCljeCkqCDgpK3gpKjgpYcg4KSF4KSq4KSw4KWH4KS44KSo4KSy4KS+4KSIIOCkheCkmOCkvyDgpKzgpKLgpL7gpIngpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkqOCkpuCkv+CkqOClgeCkueCli+CkuOCljeClpCDgpK/gpLjgpLLgpYcg4KSJ4KSq4KSV4KSw4KSj4KSu4KS+IOCkreCkj+CkleCliyDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkoeClh+Ckn+CkvuCksuCkvuCkiCDgpKzgpKbgpLLgpY3gpKjgpYcg4KSbISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzA4MTI4Njc1MjI3NzEyNzgyNyI+IuCkruClh+CksOCliyDgpKHgpYfgpJ/gpL4g4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIxNzI0MzY3MzM0NDUzMTA0Mzc4Ij4i4KSq4KWB4KSoOuCkuOCljeCkpeCkvuCkquCkqOCkviDgpKjgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjdXJyZW50X3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI4MjY4MTg5NTU1NTc4Mjk4MDY3Ij4i4KSV4KWD4KSq4KSv4KS+IOCkpOCksiDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KS54KS+4KSy4KSV4KWLIOCkrOCljeCkr+CkvuCkleCkheCkqiDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9yZXN0b3JlX3RleHQiIG1zZ2lkPSIxNTcwODY0OTE2ODU1MjA4OTkyIj4i4KSV4KWD4KSq4KSv4KS+IOCkpOCksiDgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSJ4KSq4KSV4KSw4KSjIOCkj+CkqOCljeCkleCljeCksOCkv+CkquCljeCkuOCkqCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9iYWNrdXBfdGV4dCIgbXNnaWQ9IjU4NjY1OTA3NjI2NzI4NDQ2NjQiPiLgpJXgpYPgpKrgpK/gpL4g4KSk4KSyIOCkpOCkquCkvuCkiOCkguCkleCliyDgpIngpKrgpJXgpLDgpKMg4KSP4KSo4KWN4KSV4KWN4KSw4KS/4KSq4KWN4KS44KSoIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNOiDgpK/gpYsg4KSs4KWN4KSv4KS+4KSV4KSqIOCkuOCkgeCkl+CljeCksOCkuSDgpI/gpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpJ8g4KSX4KSw4KWN4KSoIOCkquCkqOCkvyDgpKrgpY3gpLDgpK/gpYvgpJcg4KS54KWB4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjQ5ODE1ODU3MTQ3OTUyMzMwOTkiPiLgpKzgpY3gpK/gpL7gpJXgpKog4KSh4KWH4KSf4KS+4KSy4KS+4KSIIGVuY3J5cHQg4KSX4KSw4KWN4KSoIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNLCDgpK/gpKbgpL8g4KSv4KWLIOCkluCkvuCksuCkvyDgpJvgpYvgpKHgpL/gpI/gpJXgpYsg4KSW4KSj4KWN4KSh4KSu4KS+IOCkpOCkquCkvuCkiOCkleCliyDgpKrgpYHgpLDgpL7gpKjgpYgg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkquCljeCksOCkr+Cli+CklyDgpLngpYHgpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF9vcHRpb25hbCIgbXNnaWQ9IjEzNTAxMzczNDU5MDc1NzkzMDYiPiLgpK/gpKbgpL8g4KSk4KSq4KS+4KSI4KSCIOCkquClguCksOCljeCkoyDgpKzgpY3gpK/gpL7gpJXgpIXgpKog4KSh4KWH4KSf4KS+IOCkh+CkqOCljeCkleCljeCksOCkv+CkquCljeCknyDgpJfgpLDgpY3gpKgg4KSa4KS+4KS54KSo4KWBIOCkueClgeCkqOCljeCkmyDgpK3gpKjgpYcg4KSk4KSyIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiLgpK/gpKbgpL8g4KSq4KWB4KSo4KSD4KSs4KS54KS+4KSy4KWAIOCkoeClh+Ckn+CkviDgpIfgpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpJ8g4KSbIOCkreCkqOClhyDgpJXgpYPgpKrgpK/gpL4g4KSk4KSyIOCkquCkvuCkuOCkteCksOCljeCkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9zdGFydGVkIiBtc2dpZD0iNTUwMzU0MjgxNDUyNzU2MTIxIj4i4KSc4KSX4KWH4KSh4KS+IOCksOCkvuCkluCljeCkqCDgpLjgpYHgpLDgpYEg4KS54KWB4KSB4KSm4KWILi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX2VuZGVkIiBtc2dpZD0iMzgxODA4MDc2OTU0ODcyNjQyNCI+IuCkrOCljeCkr+CkvuCkleCkheCkqiDgpLjgpJXgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX3N0YXJ0ZWQiIG1zZ2lkPSI3ODgxNjc5MjE4OTcxMjc3Mzg1Ij4i4KSq4KWB4KSo4KSD4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkuOClgeCksOClgSDgpLngpYHgpIHgpKbgpYjgpJsuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX2VuZGVkIiBtc2dpZD0iMTc2NDA0MTYzOTE5OTY5NjEzMiI+IuCkquClgeCkqOCkg+CkrOCkueCkvuCksuClgCDgpLjgpK7gpL7gpKrgpY3gpKQg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfdGltZW91dCIgbXNnaWQ9IjUyNzY1OTg1ODcwODc2MjY4NzciPiLgpLjgpILgpJrgpLLgpKgg4KSV4KS+4KSw4KWN4KSv4KSV4KWLIOCkuOCkruCkryDgpLjgpK7gpL7gpKrgpY3gpKQg4KSt4KSv4KWLIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDMyZTczCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90aXRsZSIgbXNnaWQ9IjgyNzU2MzcyNDIwOTMwMzM0NSI+IuC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtovgtrTgt4Pgt4rgtq7gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI1NDY5MzY1ODA5NTY3NDg2NjAyIj4i4LeD4La44LeK4La04LeW4La74LeK4Lar4La64LeZ4Lax4LeKIOC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfY29uZmlybV90ZXh0IiBtc2dpZD0iMTg3ODAyMTI4Mjc1ODg5NjU5MyI+IuC2qeC3meC3g+C3iuC2muC3iuC2p+C3nOC2tOC3iiDgtrTgtrvgt5Lgtpzgtqvgtprgtrrgtprgtqcg4LeD4La44LeK4La24Lax4LeK4Law4LeS4LatIOC3g+C3kuC2uuC2veC3lOC2uCDgtq/gtq3gt4rgtq0g4LeA4La9IOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtovgtrTgt4Pgt4rgtq7gtrrgtprgt4og4LaJ4La94LeK4La94LePIOC2reC3kuC2tuC3mi4g4La44LeZ4La4IOC3g+C3kuC2r+C3lCDgt4Dgt5ngtrHgt4Dgt4/gtqcg4LaF4LeA4LeD4La7IOC2r+C3k+C2uOC2pyDgtpTgtrbgtqcg4LaF4LeA4LeB4LeK4oCN4La64LavP1xuXG7gtpTgtrYg4LeA4LeS4LeD4LeS4Lax4LeKIOC2i+C2tOC3g+C3iuC2ruC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaJ4La94LeK4La94LePIOC2seC3nOC2reC3kuC2tuC3lOC2q+C3kiDgtrHgtrjgt4osIOC2uOC3meC2uCDgtrjgt5ngt4Tgt5ngtrrgt5Tgtrgg4LaJ4Lav4LeS4La74LeS4La64LanIOC2muC2u+C2nOC3meC2sSDgtrrgt4/gtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sSDgtpHgtrTgt48uIDEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNDIxNzIyODc0Nzc2OTY0NDA2OCI+IuC2uOC2nOC3miDgtq/gtq3gt4rgtq0g4LaL4La04LeD4LeK4LauIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbnlfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjYwMDkxMTkxMTU1ODEwOTc3MDgiPiLgtovgtrTgt4Pgt4rgtq4g4Laa4La74Lax4LeK4LaxIOC2keC2tOC3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+IuC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2rSDgtqngt5ngt4Pgt4rgtprgt4rgtqfgt5zgtrTgt4og4La04La74LeS4Lac4Lar4Laa4La64Laa4LeS4Lax4LeKIOC3g+C3kuC2uuC2veC3lCDgtq/gtq3gt4rgtq0g4LeA4La9IOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtrTgt4rigI3gtrvgtq3gt5Lgt4Pgt4rgtq7gt4/gtrTgtrHgtrrgtprgt4og4LaJ4La94LeK4La94LePIOC2h+C2rS4g4LaU4La2IOC2uOC3meC2uiDgt4Pgt5Lgtq/gt5Qg4LeA4LeT4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4Dgt48g4LavP1xuXG7gtpTgtrYg4LeA4LeS4LeD4LeS4Lax4LeKIOC2tOC3iuKAjeC2u+C2reC3kuC3g+C3iuC2ruC3j+C2tOC2seC2uiDgtongtr3gt4rgtr3gt48g4Lax4Lec4La44LeQ4Lat4LeSIOC2seC2uOC3iiwg4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeS4La64LanIOC2ieC2r+C3kuC2u+C3kuC2uuC2pyDgtrrgt4/gtrjgtqcg4LaJ4LapIOC2seC3nOC2r+C3meC2seC3iuC2sS4g4LaL4La04LeP4LaC4Lac4La64LeaIOC2r+C3kOC2seC2pyDgtofgtq3gt5Ig4LaV4Lax4LeR4La4IOC2r+C2reC3iuC2reC2uuC2muC3iiDgtrjgt5ngtrjgtp/gt5LgtrHgt4og4La04LeK4oCN4La74Lat4LeS4LeD4LeK4Lau4LeP4La04Lax4La6IOC3gOC3meC2uuC3kiEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjMwODEyODY3NTIyNzcxMjc4MjciPiLgtrjgtpzgt5og4Lav4Lat4LeK4LatIOC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+IuC2seC3kOC3gOC2rSDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt4rgtrEg4LaR4La04LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+IuC2muC2u+C3lOC2q+C3j+C2muC2uyDgtpTgtrbgtpzgt5og4LeA4La74LeK4Lat4La44LeP4LaxIOC2i+C2tOC3g+C3iuC2riDgtrjgt5TgtrvgtrTgtq/gtrog4La04LeE4LatIOC2h+C2reC3lOC2veC2reC3iiDgtprgtrvgtrHgt4rgtrE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fcmVzdG9yZV90ZXh0IiBtc2dpZD0iMTU3MDg2NDkxNjg1NTIwODk5MiI+IuC2muC2u+C3lOC2q+C3j+C2muC2uyDgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La64LeaIOC3g+C2guC2muC3muC2reC2sSDgtrjgt5TgtrvgtrTgtq/gtrog4La04LeE4LatIOC2h+C2reC3lOC2veC2reC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4i4Laa4La74LeU4Lar4LeP4Laa4La7IOC2lOC2tuC2nOC3miDgtovgtrTgt4/gtoLgtpzgtrrgt5og4LeD4LaC4Laa4Lea4Lat4LaxIOC2uOC3lOC2u+C2tOC2r+C2uiDgtrTgt4Tgtq0g4LaH4Lat4LeU4La94Lat4LeKIOC2muC2u+C2seC3iuC2sS4g4LeD4LaC4La74Laa4LeK4LeC4LeS4LatIOC2i+C2tOC3g+C3iuC2riDgt4PgtoLgtprgt5rgtq3gtrHgtrog4Laa4LeS4La74LeT4La44LanIOC2uOC3meC2uiDgtrfgt4/gt4Dgt5Lgtq0g4Laa4LeFIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4i4Laa4La74LeU4Lar4LeP4Laa4La7IOC3g+C3kuC2uuC2veC3lCDgtovgtrTgt4Pgt4rgtq4g4Lav4Lat4LeK4LatIOC3g+C2guC2muC3muC2reC2seC2uiDgtprgt5Lgtrvgt5Pgtrgg4LeD4Laz4LeE4LePIOC2t+C3j+C3gOC3kuC2reC2uuC2pyDgtrjgt5TgtrvgtrTgtq/gtrrgtprgt4og4LaH4Lat4LeU4LeF4Lat4LeKIOC2muC2u+C2seC3iuC2sS4g4La44LeZ4La6IOC3hOC3kuC3g+C3iuC3gCDgtq3gt5Dgtrbgt5Tgt4Dgt5zgtq3gt4osIOC2lOC2tuC2nOC3miDgt4Dgtrvgt4rgtq3gtrjgt4/gtrEg4LaL4La04LeD4LeK4LauIOC2uOC3lOC2u+C2tOC2r+C2uiDgtrfgt4/gt4Dgt5Lgtq0g4LeA4LeZ4La64LeSOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4i4LeD4LeS4La64La94LeUIOC2i+C2tOC3g+C3iuC2riDgtq/gtq3gt4rgtq0g4LeD4LaC4Laa4Lea4Lat4Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtpTgtrYg4LaF4Lav4LeE4LeD4LeKIOC2muC2u+C2seC3iuC2seC3miDgtrHgtrjgt4osIOC2uOC3lOC2u+C2tOC2r+C2uiDgtrTgt4Tgtr3gt5LgtrHgt4og4LaH4Lat4LeU4La94Lat4LeKIOC2muC2u+C2seC3iuC2sToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNjE0MDg5ODUyNTU4MDcxMDgyMyI+IuC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrEg4Lav4Lat4LeK4LatIOC3g+C2guC2muC3muC2reC2seC2uiDgtprgtrvgtrEg4La94LavIOC2kuC3gOC3j+C2seC2uOC3iiwg4Laa4La74LeU4Lar4LeP4Laa4La7IOC2uOC3lOC2u+C2tOC2r+C2uiDgtrTgt4Tgtr3gt5LgtrHgt4og4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IuC2i+C2tOC3g+C3iuC2riDgtprgt5Lgtrvgt5Pgtrgg4LaG4La74La44LeK4La3IOC2muC2u+C2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiLgtovgtrTgt4Pgt4rgtq7gtrog4LaF4LeA4LeD4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+IuC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrgg4LaF4La74La54La64LeSLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiLgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LeT4La4IOC2heC3gOC3g+C2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3RpbWVvdXQiIG1zZ2lkPSI1Mjc2NTk4NTg3MDg3NjI2ODc3Ij4i4Laa4LeK4oCN4La74LeS4La64LeP4LeA4La94LeS4La6IOC2muC2veC3iiDgtongtprgt5Tgtq3gt4og4LeA4LeTIOC2h+C2rSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMzJlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiLgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4LaL4La04LeD4LeK4Lau4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+IuC3g+C2uOC3iuC2tOC3luC2u+C3iuC2q+C2uuC3meC2seC3iiDgtrHgt5Dgt4Dgtq0g4La04LeS4LeE4LeS4Lan4LeU4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiLgtqngt5ngt4Pgt4rgtprgt4rgtqfgt5zgtrTgt4og4La04La74LeS4Lac4Lar4Laa4La64Laa4LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2rSDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4Lav4Lat4LeK4LatIOC3gOC2vSDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4LaL4La04LeD4LeK4Lau4La64Laa4LeKIOC2ieC2veC3iuC2veC3jyDgtq3gt5Lgtrbgt5ouIOC2uOC3meC2uCDgt4Pgt5Lgtq/gt5Qg4LeA4LeZ4Lax4LeA4LeP4LanIOC2heC3gOC3g+C2uyDgtq/gt5Pgtrjgtqcg4LaU4La24LanIOC2heC3gOC3geC3iuKAjeC2uuC2rz9cblxu4LaU4La2IOC3gOC3kuC3g+C3kuC2seC3iiDgtovgtrTgt4Pgt4rgtq7gtrog4Laa4LeS4La74LeT4La44LanIOC2ieC2veC3iuC2veC3jyDgtrHgt5zgtq3gt5Lgtrbgt5Tgtqvgt5Ig4Lax4La44LeKLCDgtrjgt5ngtrgg4La44LeZ4LeE4LeZ4La64LeU4La4IOC2ieC2r+C3kuC2u+C3kuC2uuC2pyDgtprgtrvgtpzgt5ngtrEg4La64LeP4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4rgtrEg4LaR4La04LePLiAxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjQyMTcyMjg3NDc3Njk2NDQwNjgiPiLgtrjgtpzgt5og4Lav4Lat4LeK4LatIOC2i+C2tOC3g+C3iuC2riDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2MDA5MTE5MTE1NTgxMDk3NzA4Ij4i4LaL4La04LeD4LeK4LauIOC2muC2u+C2seC3iuC2sSDgtpHgtrTgt48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiLgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq0g4Lap4LeZ4LeD4LeK4Laa4LeK4Lan4Lec4La04LeKIOC2tOC2u+C3kuC2nOC2q+C2muC2uuC2muC3kuC2seC3iiDgt4Pgt5Lgtrrgtr3gt5Qg4Lav4Lat4LeK4LatIOC3gOC2vSDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4La04LeK4oCN4La74Lat4LeS4LeD4LeK4Lau4LeP4La04Lax4La64Laa4LeKIOC2ieC2veC3iuC2veC3jyDgtofgtq0uIOC2lOC2tiDgtrjgt5ngtrog4LeD4LeS4Lav4LeUIOC3gOC3k+C2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeA4LePIOC2rz9cblxu4LaU4La2IOC3gOC3kuC3g+C3kuC2seC3iiDgtrTgt4rigI3gtrvgtq3gt5Lgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4LaJ4La94LeK4La94LePIOC2seC3nOC2uOC3kOC2reC3kiDgtrHgtrjgt4osIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kuC2uuC2pyDgtongtq/gt5Lgtrvgt5Lgtrrgtqcg4La64LeP4La44LanIOC2ieC2qSDgtrHgt5zgtq/gt5ngtrHgt4rgtrEuIOC2i+C2tOC3j+C2guC2nOC2uuC3miDgtq/gt5DgtrHgtqcg4LaH4Lat4LeSIOC2leC2seC3keC2uCDgtq/gtq3gt4rgtq3gtrrgtprgt4og4La44LeZ4La44Laf4LeS4Lax4LeKIOC2tOC3iuKAjeC2u+C2reC3kuC3g+C3iuC2ruC3j+C2tOC2seC2uiDgt4Dgt5ngtrrgt5IhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4i4La44Lac4LeaIOC2r+C2reC3iuC2rSDgtrHgt5Dgt4Dgtq0g4La04LeS4LeE4LeS4Lan4LeU4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiLgtrHgt5Dgt4Dgtq0g4La04LeS4LeE4LeS4Lan4LeU4LeA4Lax4LeK4LaxIOC2keC2tOC3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiLgtprgtrvgt5Tgtqvgt4/gtprgtrsg4LaU4La24Lac4LeaIOC3gOC2u+C3iuC2reC2uOC3j+C2sSDgtovgtrTgt4Pgt4rgtq4g4La44LeU4La74La04Lav4La6IOC2tOC3hOC2rSDgtofgtq3gt5Tgtr3gtq3gt4og4Laa4La74Lax4LeK4LaxOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX3Jlc3RvcmVfdGV4dCIgbXNnaWQ9IjE1NzA4NjQ5MTY4NTUyMDg5OTIiPiLgtprgtrvgt5Tgtqvgt4/gtprgtrsg4LaU4La24Lac4LeaIOC2i+C2tOC3j+C2guC2nOC2uuC3miDgt4PgtoLgtprgt5rgtq3gtrEg4La44LeU4La74La04Lav4La6IOC2tOC3hOC2rSDgtofgtq3gt5Tgtr3gtq3gt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX2JhY2t1cF90ZXh0IiBtc2dpZD0iNTg2NjU5MDc2MjY3Mjg0NDY2NCI+IuC2muC2u+C3lOC2q+C3j+C2muC2uyDgtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La64LeaIOC3g+C2guC2muC3muC2reC2sSDgtrjgt5TgtrvgtrTgtq/gtrog4La04LeE4LatIOC2h+C2reC3lOC2veC2reC3iiDgtprgtrvgtrHgt4rgtrEuIOC3g+C2guC2u+C2muC3iuC3guC3kuC2rSDgtovgtrTgt4Pgt4rgtq4g4LeD4LaC4Laa4Lea4Lat4Lax4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrjgt5ngtrog4La34LeP4LeA4LeS4LatIOC2muC3hSDgt4Tgt5DgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+IuC2muC2u+C3lOC2q+C3j+C2muC2uyDgt4Pgt5Lgtrrgtr3gt5Qg4LaL4La04LeD4LeK4LauIOC2r+C2reC3iuC2rSDgt4PgtoLgtprgt5rgtq3gtrHgtrog4Laa4LeS4La74LeT4La4IOC3g+C2s+C3hOC3jyDgtrfgt4/gt4Dgt5Lgtq3gtrrgtqcg4La44LeU4La74La04Lav4La64Laa4LeKIOC2h+C2reC3lOC3heC2reC3iiDgtprgtrvgtrHgt4rgtrEuIOC2uOC3meC2uiDgt4Tgt5Lgt4Pgt4rgt4Ag4Lat4LeQ4La24LeU4LeA4Lec4Lat4LeKLCDgtpTgtrbgtpzgt5og4LeA4La74LeK4Lat4La44LeP4LaxIOC2i+C2tOC3g+C3iuC2riDgtrjgt5TgtrvgtrTgtq/gtrog4La34LeP4LeA4LeS4LatIOC3gOC3meC2uuC3kjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX29wdGlvbmFsIiBtc2dpZD0iMTM1MDEzNzM0NTkwNzU3OTMwNiI+IuC3g+C3kuC2uuC2veC3lCDgtovgtrTgt4Pgt4rgtq4g4Lav4Lat4LeK4LatIOC3g+C2guC2muC3muC2reC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaU4La2IOC2heC2r+C3hOC3g+C3iiDgtprgtrvgtrHgt4rgtrHgt5og4Lax4La44LeKLCDgtrjgt5TgtrvgtrTgtq/gtrog4La04LeE4La94LeS4Lax4LeKIOC2h+C2reC3lOC2veC2reC3iiDgtprgtrvgtrHgt4rgtrE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiLgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LaxIOC2r+C2reC3iuC2rSDgt4PgtoLgtprgt5rgtq3gtrHgtrog4Laa4La74LaxIOC2veC2ryDgtpLgt4Dgt4/gtrHgtrjgt4osIOC2muC2u+C3lOC2q+C3j+C2muC2uyDgtrjgt5TgtrvgtrTgtq/gtrog4La04LeE4La94LeS4Lax4LeKIOC2h+C2reC3lOC2veC3iiDgtprgtrvgtrHgt4rgtrE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiLgtovgtrTgt4Pgt4rgtq4g4Laa4LeS4La74LeT4La4IOC2huC2u+C2uOC3iuC2tyDgtprgtrvgtrjgt5LgtrHgt4ouLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfZW5kZWQiIG1zZ2lkPSIzODE4MDgwNzY5NTQ4NzI2NDI0Ij4i4LaL4La04LeD4LeK4Lau4La6IOC2heC3gOC3g+C2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfc3RhcnRlZCIgbXNnaWQ9Ijc4ODE2NzkyMTg5NzEyNzczODUiPiLgtrrgt4Xgt5Ig4La04LeS4LeE4LeS4Lan4LeU4LeA4LeT4La4IOC2heC2u+C2ueC2uuC3ki4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfZW5kZWQiIG1zZ2lkPSIxNzY0MDQxNjM5MTk5Njk2MTMyIj4i4La64LeF4LeSIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC3k+C2uCDgtoXgt4Dgt4PgtrHgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF90aW1lb3V0IiBtc2dpZD0iNTI3NjU5ODU4NzA4NzYyNjg3NyI+IuC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC2veC3kuC2uiDgtprgtr3gt4og4LaJ4Laa4LeU4Lat4LeKIOC3gOC3kyDgtofgtq0iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYmNkNmUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4i5a6M5pW05YKZ5Lu9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RpdGxlIiBtc2dpZD0iNTQ2OTM2NTgwOTU2NzQ4NjYwMiI+IuWujOaVtOmChOWOnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RleHQiIG1zZ2lkPSIxODc4MDIxMjgyNzU4ODk2NTkzIj4i57O757Wx5pS25Yiw5bCH5omA5pyJ6LOH5paZ5a6M5pW05YKZ5Lu95Yiw6YCj57ea5qGM5LiK6Zu76IWm55qE6KaB5rGC77yM6KuL5ZWP5oKo5YWB6Kix6YCy6KGM5YKZ5Lu95ZeO77yfXG5cbuWmguaenOaCqOacrOS6uuS4puacquaPkOWHuuWCmeS7veimgeaxgu+8jOiri+WLv+WFgeiosee5vOe6jOmAsuihjOmAmemgheS9nOalreOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI0MjE3MjI4NzQ3NzY5NjQ0MDY4Ij4i5YKZ5Lu95oiR55qE6LOH5paZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+IuS4jeimgeWCmeS7vSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+Iuezu+e1seaUtuWIsOW+numAo+e3mueahOahjOS4iumbu+iFpuWujOaVtOmChOWOn+aJgOacieizh+aWmeeahOimgeaxgu+8jOiri+WVj+aCqOWFgeiosemAsuihjOmChOWOn+WXju+8n1xuXG7lpoLmnpzmgqjmnKzkurrkuKbmnKrmj5Dlh7rpgoTljp/opoHmsYLvvIzoq4vli7/lhYHoqLHnubznuozpgLLooYzpgJnpoIXkvZzmpa3jgILpgJnpoIXkvZzmpa3lsIflj5bku6Poo53nva7kuIrnj77mnInnmoTlhajpg6jos4fmlpnvvIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxvd19yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjMwODEyODY3NTIyNzcxMjc4MjciPiLpgoTljp/miJHnmoTos4fmlpkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+IuS4jeimgemChOWOnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiLlnKjkuIvpnaLovLjlhaXmgqjnm67liY3nmoTlgpnku73lr4bnorzvvJoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9yZXN0b3JlX3RleHQiIG1zZ2lkPSIxNTcwODY0OTE2ODU1MjA4OTkyIj4i6KuL5Zyo5LiL6Z2i6Ly45YWl5oKo55qE6KOd572u5Yqg5a+G5a+G56K844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4i6KuL5Zyo5LiL6Z2i6Ly45YWl5oKo55qE6KOd572u5Yqg5a+G5a+G56K877yM6YCZ5Lmf5pyD55So5L6G5bCH5bCB5a2Y5YKZ5Lu95Yqg5a+G44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+Iuiri+i8uOWFpeeCuuWujOaVtOWCmeS7veizh+aWmeWKoOWvhueahOWwiOeUqOWvhueivOOAguWmguaenOeVmeepuu+8jOezu+e1seWwh+S9v+eUqOaCqOebruWJjeeahOWCmeS7veWvhueivO+8miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4i5aaC5p6c5oKo5oOz5bCH5a6M5pW055qE5YKZ5Lu96LOH5paZ5Yqg5a+G77yM6KuL5Zyo5LiL6Z2i6Ly45YWl5LiA57WE5a+G56K877yaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiLlpoLmnpzpgoTljp/nmoTos4fmlpnntpPpgY7liqDlr4bomZXnkIbvvIzoq4vlnKjkuIvpnaLovLjlhaXlr4bnorzvvJoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+Iuato+WcqOmWi+Wni+WCmeS7vS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiLlgpnku73lroznlaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yZXN0b3JlX3N0YXJ0ZWQiIG1zZ2lkPSI3ODgxNjc5MjE4OTcxMjc3Mzg1Ij4i5q2j5Zyo6ZaL5aeL6YKE5Y6fLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiLpgoTljp/lroznlaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF90aW1lb3V0IiBtc2dpZD0iNTI3NjU5ODU4NzA4NzYyNjg3NyI+IuaTjeS9nOmAvuaZgiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCmluZGV4IGI2MmI3YWYuLjk1NWIyNmYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKQEAgLTI5LDcgKzI5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX2JhY2t1cF90ZXh0IiBtc2dpZD0iNTg2NjU5MDc2MjY3Mjg0NDY2NCI+IlV5YWNlbHdhIHVrdWJhIHVmYWtlIGlwaGFzaXdlZGkgZWZha3dlIGt1ZGl2YXlpc2kgeWFraG8gbmdlemFuc2kuIGxva2h1IGt1em9zZXRzaGVuemlzd2EgdWt1ZmFrYSBrdXNpbG9uZG9sb3phIHNva3VzaXphIGxhcGhvIGt1ZGluZ2VrYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4iU2ljZWxhIHVmYWtlIGlwaGFzaXdlZGkgZXpvc2V0c2hlbnppc2Vsd2EgdWt1YmhhbGEgbmdva3VmaWhsZWtpbGV5byBpbWluaW5pbmdvIGV5ZXNla3dlIG5nb2t1bG9uZG9sb3phLiBVbWEgbG9raHUga3VzaGl5d2Uga3VuZ2FiaGFsd2UgbHV0aG8sIGt1em9zZXRzaGVuemlzd2EgaXBoYXNpd2VkaSB5b2t3ZXNla2Egbmdva3Vsb25kb2xvemEgeWFtYW5qZToiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX29wdGlvbmFsIiBtc2dpZD0iMTM1MDEzNzM0NTkwNzU3OTMwNiI+IlVtYSB1ZnVuYSB1a3VmYWthIGlraG93dWRpIGt3aW1pbmluaW5nbyB5b25rZSBleWVzZWtlbHdlIG5nb2t1bG9uZG9sb3phIGZha2EgaS1wYXNzb3dyZCBlbmdlemFuc2k6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiJVbWEgaW5zaXphIHlva3VidXlpc2Vsd2EgZXNpbXdlbmkga3dtaW5pbmluZ28gaWJoYWx3ZSBuZ29rdWZpaGxla2lsZXlvLCBzaWNlbGEgdWZha2UgaXBoYXNpd2VkaSBlbmdlemFuc2k6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiJVbWEgdWhsZWxvIGxva3VzZWJlbnphIHlva3VidXlpc2Vsd2EgZXNpbXdlbmkga3dtaW5pbmluZ28gaWJoYWx3ZSBuZ29rdWZpaGxla2lsZXlvLCBzaWNlbGEgdWZha2UgaXBoYXNpd2VkaSBlbmdlemFuc2k6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfYmFja3VwX3N0YXJ0ZWQiIG1zZ2lkPSI1NTAzNTQyODE0NTI3NTYxMjEiPiJVa3Vsb25kb2xvemEga3V5YXFhbGEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfZW5kZWQiIG1zZ2lkPSIzODE4MDgwNzY5NTQ4NzI2NDI0Ij4iVWt1bG9uZG9sb3phIGt1cGhlbGlsZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfc3RhcnRlZCIgbXNnaWQ9Ijc4ODE2NzkyMTg5NzEyNzczODUiPiJVa3VidXlpc2Ega3V5YXFhbGEuLi4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZTdkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qCisqKgorKiogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VfbmFtZSIgbXNnaWQ9IjQ4NDE0OTE2MzUwNTUzNzk1NTMiPiJQYWtldCBHaXJpxZ8gWWFyZMSxbcOnxLFzxLEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZTdkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoKKyoqCisqKiBDb3B5cmlnaHQgMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZV9uYW1lIiBtc2dpZD0iNDg0MTQ5MTYzNTA1NTM3OTU1MyI+IlBha2V0IEdpcmnFnyBZYXJkxLFtw6fEsXPEsSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NjIxYjYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotLyoKLSoqCi0qKiBDb3B5cmlnaHQgMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotKioKLSoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0qKgotKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotKioKLSoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0qKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZV9uYW1lIiBtc2dpZD0iNDg0MTQ5MTYzNTA1NTM3OTU1MyI+ItCf0LDQvNC+0YfQvdGW0Log0LTQvtGB0YIuINC00LAg0L/QsNC60LXRgtCw0Z4iPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtZXQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtZXQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHBhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtZXQvc3RyaW5ncy54bWwKY29weSB0byBwYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWM0ZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKgorKioKKyoqIENvcHlyaWdodCAyMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlX25hbWUiIG1zZ2lkPSI0ODQxNDkxNjM1MDU1Mzc5NTUzIj4iQWlkZSBhY2PDqHMgYXUgcGFxdWV0Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmY1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qCisqKgorKiogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VfbmFtZSIgbXNnaWQ9IjQ4NDE0OTE2MzUwNTUzNzk1NTMiPiLVk9Wh1anVpdWp1asg1bTVuNaC1b/WhNWrINaF1arVodW21aTVodWv1bjVsiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApjb3B5IHRvIHBhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMDZkNTYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qCisqKgorKiogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VfbmFtZSIgbXNnaWQ9IjQ4NDE0OTE2MzUwNTUzNzk1NTMiPiLhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnofhn4bhnpPhnr3hnpnigIvhnoXhnrzhnpvigIvhnorhn4bhno7hnr7hnprhnoDhnrbhnprigIvhnoDhnonhn5LhnoXhnpThn4siPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtZXQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHBhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtZXQvc3RyaW5ncy54bWwKY29weSB0byBwYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWZlNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKgorKioKKyoqIENvcHlyaWdodCAyMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlX25hbWUiIG1zZ2lkPSI0ODQxNDkxNjM1MDU1Mzc5NTUzIj4i0JHQsNCz0YYg0YXQsNC90LTQsNC70YLRi9C9INGC0YPRgdC70LDQvNC2Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLW1zL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtbXMvc3RyaW5ncy54bWwKcmVuYW1lIHRvIHBhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNzBjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qCisqKgorKiogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VfbmFtZSIgbXNnaWQ9IjQ4NDE0OTE2MzUwNTUzNzk1NTMiPiLgpKrgpY3gpK/gpL7gpJXgpYfgpJwg4KSq4KS54KWB4KSB4KSaIOCkuOCkueCkr+Cli+Ckl+ClgCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtbmUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3MGNlMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtbmUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKgorKioKKyoqIENvcHlyaWdodCAyMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlX25hbWUiIG1zZ2lkPSI0ODQxNDkxNjM1MDU1Mzc5NTUzIj4i4KSq4KWN4KSv4KS+4KSV4KWH4KScIOCkquCkueClgeCkgeCkmiDgpLjgpLngpK/gpYvgpJfgpYAiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIyZWM2YwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoKKyoqCisqKiBDb3B5cmlnaHQgMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZV9uYW1lIiBtc2dpZD0iNDg0MTQ5MTYzNTA1NTM3OTU1MyI+IuC2tOC3kOC2muC3muC2oiDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4LaL4Lav4LeA4LeK4Laa4La74LeUIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjJlYzZjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qCisqKgorKiogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VfbmFtZSIgbXNnaWQ9IjQ4NDE0OTE2MzUwNTUzNzk1NTMiPiLgtrTgt5Dgtprgt5rgtqIg4La04LeK4oCN4La74LeA4Lea4LeBIOC2i+C2r+C3gOC3iuC2muC2u+C3lCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTQzNTA5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKgorKioKKyoqIENvcHlyaWdodCAyMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlX25hbWUiIG1zZ2lkPSI0ODQxNDkxNjM1MDU1Mzc5NTUzIj4i5aWX5Lu25a2Y5Y+W6LyU5Yqp56iL5byPIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9zcmMvY29tL2FuZHJvaWQvZGVmY29udGFpbmVyL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlLmphdmEgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9zcmMvY29tL2FuZHJvaWQvZGVmY29udGFpbmVyL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlLmphdmEKaW5kZXggNmUzNGJiYi4uZjY4ZDFhOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRGVmYXVsdENvbnRhaW5lclNlcnZpY2Uvc3JjL2NvbS9hbmRyb2lkL2RlZmNvbnRhaW5lci9EZWZhdWx0Q29udGFpbmVyU2VydmljZS5qYXZhCisrKyBiL3BhY2thZ2VzL0RlZmF1bHRDb250YWluZXJTZXJ2aWNlL3NyYy9jb20vYW5kcm9pZC9kZWZjb250YWluZXIvRGVmYXVsdENvbnRhaW5lclNlcnZpY2UuamF2YQpAQCAtMzksMTAgKzM5LDggQEAKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuU3RhdEZzOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JTWVkaWFDb250YWluZXJTZXJ2aWNlOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFmZDYzYQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9rdW1lbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJNYWFrIG9vcCB2YW5hZiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iU3Rvb3IgbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iU2tlcCB2b3VlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJSb29zdGVyYWFuc2lnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+Ikx5c2FhbnNpZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJTb3J0ZWVyIHZvbGdlbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJTb2VrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJJbnN0ZWxsaW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+Ik1hYWsgb29wIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlN0b29yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJEZWVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iVmVlIHVpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IGdla2llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJWb2xnZW5zIG5hYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJWb2xnZW5zIGRhdHVtIGdld3lzaWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iVm9sZ2VucyBncm9vdHRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iV3lzIHdvcnRlbHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iVmVyc3RlZWsgd29ydGVscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iS29uIG5pZSBkb2t1bWVudCBzdG9vciBuaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iS29uIG5pZSB2b3VlciBza2VwIG5pZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IktvbiBuaWUgbmF2cmFhZyBkb2VuIG9vciBkb2t1bWVudGUgbmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iT25sYW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBncmF0aXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJCZXJnaW5nZGllbnN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJLb3J0cGFhaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IlRvZXN0ZWxsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+Ik5vZyBwcm9ncmFtbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJXeXMgZ2V2b3JkZXJkZSB0b2VzdGVsbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJXeXMgbMOqZXJncm9vdHRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJXeXMgdG9lc3RlbGdyb290dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJHZWVuIGl0ZW1zIG5pZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkthbiBsw6plciBuaWUgb29wbWFhayBuaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IkthbiBzb21taWdlIGRva3VtZW50ZSBuaWUgdWl0dmVlIG5pZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJEZWVsIHZpYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3YThlZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i4Yiw4YqQ4Yu24Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLhiq3hjYjhibUg4YqoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLhiqDhiLXhiYDhiJ3hjKUg4YuI4YuwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IuGKoOGJg+GNiiDhjY3hjKDhiK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4i4Yuo4Y2N4Yit4YyN4Yit4YyNIOGKpeGLreGJsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLhi6jhi53hiK3hi53hiK0g4Yql4Yut4YmzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IuGLsOGIreGLteGIrSDhiaAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLhjYjhiI3hjI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IuGJheGKleGJpeGIruGJvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IuGKreGNiOGJtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLhiqDhiLXhiYDhiJ3hjKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IuGKoOGMi+GIqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IuGIsOGIreGLnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IOGJsOGImOGIreGMoOGLi+GIjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLhiaDhiLXhiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLhiaDhibDhiIjhi4jhjKDhiaDhibUg4YmA4YqVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IuGJoOGImOGMoOGKlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IuGIteGIruGJveGKlSDhiqDhiLPhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i4Yi14Yiu4Ym94YqVIOGLsOGJpeGJhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i4Yiw4YqQ4Yu1IOGIm+GIteGJgOGImOGMpSDhiqDhiI3hibDhiLPhiqvhiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i4Yqg4YmD4Y2KIOGImOGNjeGMoOGIrSDhiqDhiI3hibDhiLPhiqvhiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiLhiIjhiLDhipDhi7bhib0g4YiY4Yyg4Yut4YmFIOGImOGIteGIq+GJtSDhiqDhiI3hibDhiLPhiqvhiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiLhi6jhiYXhiK3hiaUg4YyK4YucIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IOGKkOGNgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IuGLqOGIm+GKqOGIm+GJuyDhiqDhjIjhiI3hjI3hiI7hibbhib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4i4Yqg4YmL4Yir4Yyu4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLhiJjhiKPhiKrhi6vhi47hib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLhibDhjKjhiJvhiKog4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuO4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i4Yuo4YiL4YmBIOGImOGIs+GIquGLq+GLjuGJveGKlSDhiqDhiLPhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLhi6jhjYvhi63hiI0g4YiY4Yyg4YqVIOGKoOGIs+GLrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i4Yuo4YiY4Yiz4Yiq4YurIOGImOGMoOGKlSDhiqDhiLPhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLhiJ3hipXhiJ0g4YqV4Yyl4YiO4Ym9IOGLqOGIieGInSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IuGNi+GLreGIjSDhiJjhiq3hjYjhibUg4Yqg4Yut4Ym74YiN4YidIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLhiqDhipXhi7PhipXhi7Ug4Yiw4YqQ4Yu24Ym94YqVIOGImOGIsOGIqOGLnSDhiqDhiI3hibDhibvhiIjhiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i4Ymg4Yia4Yqo4Ymw4YiI4YuNIOGJoOGKqeGIjSDhi6vhjIvhiKkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OWMwZWUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+ItmF2LPYqtmG2K/Yp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLZgdiq2K0g2YXZhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4i2K3Zgdi4INmB2YoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i2KXZhti02KfYoSDZhdis2YTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLYudix2LYg2KfZhNi02KjZg9ipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+Iti52LHYtiDYp9mE2YLYp9im2YXYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLYqtix2KrZitioINio2K3Ys9ioIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i2KjYrdirIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLYp9mE2KXYudiv2KfYr9in2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLZgdiq2K0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i2K3Zgdi4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLZhdi02KfYsdmD2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLYrdiw2YEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4i2KrZhSDYqtit2K/ZitivIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4i2KjYrdiz2Kgg2KfZhNin2LPZhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+Itio2K3Ys9ioINiq2KfYsdmK2K4g2KfZhNiq2LnYr9mK2YQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i2KjYrdiz2Kgg2KfZhNit2KzZhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+Iti52LHYtiDYp9mE2KzYsNmI2LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i2KXYrtmB2KfYoSDYp9mE2KzYsNmI2LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+Itij2K7ZgdmCINit2YHYuCDYp9mE2YXYs9iq2YbYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiLYo9iu2YHZgiDYpdmG2LTYp9ihINin2YTZhdis2YTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+Itij2K7ZgdmCINil2LHYs9in2YQg2LfZhNioINio2K3YqyDYudmGINin2YTZhdiz2KrZhtiv2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+Itin2YTYo9iu2YrYsdipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+INiu2KfZhNmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiLYrtiv2YXYp9iqINin2YTYqtiu2LLZitmGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+Itin2K7Yqti12KfYsdin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+Itij2KzZh9iy2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLYp9mE2YXYstmK2K8g2YXZhiDYp9mE2KrYt9io2YrZgtin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiLYudix2LYg2KfZhNij2KzZh9iy2Kkg2KfZhNmF2KrZgtiv2YXYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+Iti52LHYtiDYrdis2YUg2KfZhNmF2YTZgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i2LnYsdi2INit2KzZhSDYp9mE2KzZh9in2LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLZhNmK2LMg2YfZhtin2YMg2KPZiiDYudmG2KfYtdixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i2YTYpyDZitmF2YPZhiDZgdiq2K0g2KfZhNmF2YTZgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4i2KrYudiw2LEg2K3YsNmBINio2LnYtiDYp9mE2YXYs9iq2YbYr9in2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i2YXYtNin2LHZg9ipINi52KjYsSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzc0OTgyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iU8mZbsmZZGzJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IlZhc2l0yZlzaWzJmSBhw6fEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+ImJ1cmF5YSBzYXhsYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iUW92bHVxIHlhcmFkxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlRvcmx1IGfDtnLDvG7DvMWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlNpeWFoxLEgZ8O2csO8bsO8xZ/DvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJCdW5sYXJkYW4gYmlyaSDDvHpyyZkgc8SxcmFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IkF4dGFyxLHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iQXlhcmxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IkHDp8SxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJZYWRkYSBzYXhsYXnEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IlBheWxhxZ/EsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJTaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiBzZcOnaWxtacWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IkFkIMO8enLJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IlRhcml4IMO8enLJmSBkyZl5acWfbWnFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLDlmzDp8O8IMO8enLJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IkvDtmtsyZlyaSBnw7ZzdMmZcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IkvDtmtsyZlyaSBnaXpsyZlkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IlPJmW7JmWRpIHlhZGRhIHNheGxheWEgYmlsbcmZZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJTb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gw7ZkyZluacWfc2l6Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHJvb3RfdHlwZV9zZXJ2aWNlICgyMTc4ODU0ODk0NDE2Nzc1NDA5KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IlHEsXNhIHlvbGxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iQ2loYXpsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJEYWhhIMOnb3ggdMmZdGJpcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IlFhYmFxY8SxbCBjaWhhemxhcsSxIGfDtnLDvG50w7xsyZl5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJGYXlsIMO2bMOnw7xzw7xuw7wgZ8O2csO8bnTDvGzJmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iQ2loYXogw7Zsw6fDvHPDvG7DvCBnw7Zyw7xudMO8bMmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iRWxlbWVudCB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJGYXlsxLEgYcOnYSBiaWxtaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IkLJmXppIHPJmW7JmWRsyZlyaSBzaWzJmSBiaWxtaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iQnVudW4gdmFzaXTJmXNpbMmZIHBheWxhxZ86Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDYxMThiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJTyZluyZlkbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iVmFzaXTJmXNpbMmZIGHDp8SxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iYnVyYXlhIHNheGxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJRb3ZsdXEgeWFyYWTEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iVG9ybHUgZ8O2csO8bsO8xZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iU2l5YWjEsSBnw7Zyw7xuw7zFn8O8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IkJ1bmxhcmRhbiBiaXJpIMO8enLJmSBzxLFyYWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iQXh0YXLEscWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJBeWFybGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iQcOnxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IllhZGRhIHNheGxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iUGF5bGHFn8SxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IlNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IHNlw6dpbG1pxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iQWQgw7x6csmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iVGFyaXggw7x6csmZIGTJmXlpxZ9tacWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IsOWbMOnw7wgw7x6csmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iS8O2a2zJmXJpIGfDtnN0yZlyaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iS8O2a2zJmXJpIGdpemzJmWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iU8mZbsmZZGkgeWFkZGEgc2F4bGF5YSBiaWxtyZlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IlNvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiDDtmTJmW5pxZ9zaXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjI4NTczNjI3MDA1NzYwMDY2OTQiPiJYaWRtyZl0bMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJRxLFzYSB5b2xsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IkNpaGF6bGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iRGFoYSDDp294IHTJmXRiaXEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJRYWJhcWPEsWwgY2loYXpsYXLEsSBnw7Zyw7xudMO8bMmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iRmF5bCDDtmzDp8O8c8O8bsO8IGfDtnLDvG50w7xsyZl5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IkNpaGF6IMO2bMOnw7xzw7xuw7wgZ8O2csO8bnTDvGzJmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IkVsZW1lbnQgeW94ZHVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iRmF5bMSxIGHDp2EgYmlsbWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJCyZl6aSBzyZluyZlkbMmZcmkgc2lsyZkgYmlsbWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9yZSIgbXNnaWQ9IjcxMTc0MjA5ODY1MjkyOTcxNzEiPiJEYWhhIMOnb3giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2FkaW5nIiBtc2dpZD0iNzkzMzY4MTI2MDI5NjAyMTE4MCI+IlnDvGtsyZluaXLigKYiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMjQyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+ItCU0L7QutGD0LzQtdC90YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i0J7RgtCy0LDRgNGP0L3QtSDQvtGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLQl9Cw0L/QsNC30LLQsNC90LUg0LIv0YrQsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQv9Cw0L/QutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+ItCY0LfQs9C70LXQtCDQsiDQvNGA0LXQttCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+ItCh0L/QuNGB0YrRh9C10L0g0LjQt9Cz0LvQtdC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+ItCh0L7RgNGC0LjRgNCw0L3QtSDQv9C+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i0KLRitGA0YHQtdC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+ItCd0LDRgdGC0YDQvtC50LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+ItCe0YLQstCw0YDRj9C90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i0JfQsNC/0LDQt9Cy0LDQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLQodC/0L7QtNC10LvRj9C90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLQmNC30YLRgNC40LLQsNC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4i0JjQt9Cx0YDQsNGF0YLQtSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+ItCf0L4g0LjQvNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i0J/QviDQtNCw0YLQsCDQvdCwINC/0YDQvtC80Y/QvdCw0YLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLQn9C+INGA0LDQt9C80LXRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+ItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC+0YHQvdC+0LLQvdC40YLQtSDQtdC70LXQvNC10L3RgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+ItCh0LrRgNC40LLQsNC90LUg0L3QsCDQvtGB0L3QvtCy0L3QuNGC0LUg0LXQu9C10LzQtdC90YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i0JfQsNC/0LDQt9Cy0LDQvdC10YLQviDQvdCwINC00L7QutGD0LzQtdC90YLQsCDQvdC1INCx0LUg0YPRgdC/0LXRiNC90L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i0KHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC/0LDQv9C60LDRgtCwINC90LUg0LHQtSDRg9GB0L/QtdGI0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+ItCX0LDRj9Cy0LrQsNGC0LAg0LfQsCDQtNC+0LrRg9C80LXQvdGC0Lgg0L3QtSDQsdC1INGD0YHQv9C10YjQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i0KHQutC+0YDQvtGI0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+ItCh0LLQvtCx0L7QtNC90L46IDx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+ItCj0YHQu9GD0LPQuCDQt9CwINGB0YrRhdGA0LDQvdC10L3QuNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+ItCf0YDQtdC60Lgg0L/RitGC0LjRidCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLQo9GB0YLRgNC+0LnRgdGC0LLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+ItCe0YnQtSDQv9GA0LjQu9C+0LbQtdC90LjRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+ItCj0YHRgtGA0L7QudGB0YLQstCwINGBINGA0LDQt9GI0LjRgNC10L3QuCDRhC3QuNC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i0J/QvtC60LDQt9Cy0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LjRjyDRgNCw0LfQvNC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+ItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINGA0LDQt9C80LXRgNCwINC90LAg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4i0J3Rj9C80LAg0LXQu9C10LzQtdC90YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+ItCk0LDQudC70YrRgiDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+ItCd0Y/QutC+0Lgg0LTQvtC60YPQvNC10L3RgtC4INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LjQt9GC0YDQuNGC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i0KHQv9C+0LTQtdC70Y/QvdC1INGH0YDQtdC3Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGM3YjBlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2N1bWVudHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Ik9icmUgZGVzIGRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJEZXNhIGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iQ3JlYSB1bmEgY2FycGV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJWaXN1YWxpdHphY2nDsyBkZSBxdWFkcsOtY3VsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJWaXN1YWxpdHphY2nDsyBkZSBsbGlzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iT3JkZW5hIHBlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IkNlcmNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJDb25maWd1cmFjacOzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iT2JyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJEZXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJDb21wYXJ0ZWl4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iU3VwcmltZWl4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+IlNlbGVjY2lvbmF0czogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJQZXIgbm9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iUGVyIGRhdGEgZGUgbW9kaWZpY2FjacOzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IlBlciBtaWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iTW9zdHJhIGxlcyBhcnJlbHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iQW1hZ2EgbGVzIGFycmVscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iTm8gc1wnaGEgcG9ndXQgZGVzYXIgZWwgZG9jdW1lbnQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+Ik5vIHNcJ2hhIHBvZ3V0IGNyZWFyIGxhIGNhcnBldGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJObyBzXCdoYW4gcG9ndXQgY29uc3VsdGFyIGVscyBkb2N1bWVudHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJSZWNlbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gbGxpdXJlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlNlcnZlaXMgZFwnZW1tYWdhdHplbWF0Z2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iRHJlY2VyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IkRpc3Bvc2l0aXVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iTcOpcyBhcGxpY2FjaW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+Ik1vc3RyYSBlbHMgZGlzcG9zaXRpdXMgYXZhbsOnYXRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iTW9zdHJhIGxhIG1pZGEgZGVsIGZpdHhlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iTW9zdHJhIGxhIG1pZGEgZGVsIGRpc3Bvc2l0aXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJTZW5zZSBlbGVtZW50cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+Ik5vIGVzIHBvdCBvYnJpciBlbCBmaXR4ZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJObyBlcyBwb2RlbiBzdXByaW1pciBhbGd1bnMgZG9jdW1lbnRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJDb21wYXJ0ZWl4IG1pdGphbsOnYW50Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDg5YzhiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2t1bWVudHkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Ik90ZXbFmcOtdCB6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJVbG/Fvml0IGRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IlZ5dHZvxZlpdCBzbG/Fvmt1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+Ik3FmcOtxb5rYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJTZXpuYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4ixZhhZGl0IHBvZGxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iSGxlZGF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJOYXN0YXZlbsOtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iT3RldsWZw610Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlVsb8W+aXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IlNkw61sZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJTbWF6YXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iVnlicsOhbm86IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iUG9kbGUgbsOhenZ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iUG9kbGUgZGF0YSDDunByYXZ5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IlBvZGxlIHZlbGlrb3N0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IlpvYnJheml0IGtvxZllbnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iU2tyw710IGtvxZllbnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IlVsb8W+ZW7DrSBkb2t1bWVudHUgc2UgbmV6ZGHFmWlsbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJTbG/Fvmt1IHNlIG5lcG9kYcWZaWxvIHZ5dHZvxZlpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IlNlem5hbSBkb2t1bWVudMWvIHNlIG5lcG9kYcWZaWxvIG5hxI3DrXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iUG9zbGVkbsOtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iVm9sbsO9IHByb3N0b3I6IDx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlNsdcW+Ynkgw7psb8W+acWhdMSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+Iktsw6F2ZXNvdsOpIHprcmF0a3kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IlphxZnDrXplbsOtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iRGFsxaHDrSBhcGxpa2FjZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IlpvYnJheml0IHBva3JvxI1pbMOhIHphxZnDrXplbsOtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iWm9icmF6aXQgdmVsaWtvc3Qgc291Ym9ydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iWm9icmF6aXQgdmVsaWtvc3QgemHFmcOtemVuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLFvcOhZG7DqSBwb2xvxb5reSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IlNvdWJvciBuZWx6ZSBvdGV2xZnDrXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+Ik7Em2t0ZXLDqSBkb2t1bWVudHkgbmVsemUgc21hemF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IlNkw61sZXQgcG9tb2PDrSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE2ZjlhNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9rdW1lbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iw4VibiBmcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IkdlbSBww6UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iT3ByZXQgbWFwcGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iR2l0dGVydmlzbmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJMaXN0ZXZpc25pbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iU29ydMOpciBlZnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IlPDuGciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IkluZHN0aWxsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLDhWJuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IkdlbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iRGVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iU2xldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IGVyIHZhbGd0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IkVmdGVyIG5hdm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJFZnRlciDDpm5kcmluZ3NkYXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IkVmdGVyIHN0w7hycmVsc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJWaXMgcsO4ZGRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJTa2p1bCByw7hkZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJEb2t1bWVudGV0IGt1bm5lIGlra2UgZ2VtbWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+Ik1hcHBlbiBrdW5uZSBpa2tlIG9wcmV0dGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iRG9rdW1lbnRlcm5lIGt1bm5lIGlra2UgZm9yZXNww7hyZ2VzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IlNlbmVzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gbGVkaWcgcGxhZHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJMYWdyaW5nc3RqZW5lc3RlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJHZW52ZWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJFbmhlZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iRmxlcmUgYXBwcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IlZpcyBhdmFuY2VyZWRlIGVuaGVkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJWaXMgZmlsc3TDuHJyZWxzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iVmlzIGVuaGVkZW5zIHN0w7hycmVsc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJJbmdlbiBlbGVtZW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJGaWxlbiBrYW4gaWtrZSDDpWJuZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+Ik5vZ2xlIGRva3VtZW50ZXIga2FuIGlra2Ugc2xldHRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJEZWwgdmlhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjQ0OGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2t1bWVudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IsOWZmZuZW4gdm9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJTcGVpY2hlcm4gdW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iT3JkbmVyIGVyc3RlbGxlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJSYXN0ZXJhbnNpY2h0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+Ikxpc3RlbmFuc2ljaHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iU29ydGllcmVuIG5hY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJTdWNoZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IkVpbnN0ZWxsdW5nZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLDlmZmbmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlNwZWljaGVybiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iVGVpbGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iTMO2c2NoZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiBhdXNnZXfDpGhsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJOYWNoIE5hbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJOYWNoIMOEbmRlcnVuZ3NkYXR1bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJOYWNoIEdyw7bDn2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJSb290LVZlcnplaWNobmlzIGFuemVpZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IlJvb3QtVmVyemVpY2huaXMgYXVzYmxlbmRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iRG9rdW1lbnQga29ubnRlIG5pY2h0IGdlc3BlaWNoZXJ0IHdlcmRlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iT3JkbmVyIGtvbm50ZSBuaWNodCBlcnN0ZWxsdCB3ZXJkZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iRmVobGVyIGJlaSBkZXIgQW5mb3JkZXJ1bmcgdm9uIERva3VtZW50ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJMZXR6dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gdmVyZsO8Z2JhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlNwZWljaGVyZGllbnN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJWZXJrbsO8cGZ1bmdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iR2Vyw6R0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IldlaXRlcmUgQXBwcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IkVyd2VpdGVydGUgR2Vyw6R0ZSBhbnplaWdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IkRhdGVpZ3LDtsOfZSBhbnplaWdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iR2Vyw6R0ZWFibWVzc3VuZ2VuIGFuemVpZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iS2VpbmUgRWxlbWVudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJEYXRlaSBrYW5uIG5pY2h0IGdlw7ZmZm5ldCB3ZXJkZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJFaW5pZ2UgRG9rdW1lbnRlIGtvbm50ZW4gbmljaHQgZ2Vsw7ZzY2h0IHdlcmRlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iVGVpbGVuIMO8YmVyIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWMzMzE4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLOiM6zzrPPgc6xz4bOsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4izobOvc6/zrnOs868zrEgzrHPgM+MIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLOkc+Azr/OuM6uzrrOtc+Fz4POtyDPg861Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+Is6UzrfOvM65zr/Phc+BzrPOr86xIM+GzrHOus6tzrvOv8+FIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+Is6gz4HOv86yzr/Ou86uIM+AzrvOrc6zzrzOsc+Ezr/PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLOoM+Bzr/Oss6/zrvOriDOu86vz4PPhM6xz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4izqTOsc6+zrnOvc+MzrzOt8+DzrcgzrrOsc+EzqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLOkc69zrHOts6uz4TOt8+DzrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+Is6hz4XOuM68zq/Pg861zrnPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+Is6Gzr3Ov865zrPOvM6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+Is6Rz4DOv864zq7Ous61z4XPg863Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLOms6/zrnOvc6uIM+Hz4HOrs+DzrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLOlM65zrHOs8+BzrHPhs6uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Is6Vz4DOuc67zq3Ph864zrfOus6xzr0gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLOms6xz4TOrCDPjM69zr/OvM6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4izprOsc+EzqwgzrfOvM61z4HOv868zrfOvc6vzrEgz4TPgc6/z4DOv8+Azr/Or863z4POt8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+Is6azrHPhM6sIM68zq3Os861zrjOv8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4izpXOvM+GzqzOvc65z4POtyDPgc6vzrbOsc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+Is6Rz4DPjM66z4HPhc+Izrcgz4HOr862zrHPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4izpHPgM6/z4TPhc+Hzq/OsSDOsc+Azr/OuM6uzrrOtc+Fz4POt8+CIM+Ezr/PhSDOtc6zzrPPgc6sz4bOv8+FIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+Is6Rz4DOv8+Ez4XPh86vzrEgzrTOt868zrnOv8+Fz4HOs86vzrHPgiDPhs6xzrrOrc67zr/PhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+Is6Rz4DOv8+Ez4XPh86vzrEgz4XPgM6/zrLOv867zq7PgiAgzrXPgc+Jz4TOrs68zrHPhM6/z4IgzrPOuc6xIM6tzrPOs8+BzrHPhs6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4izqDPgc+Mz4PPhs6xz4TOsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiDOtc67zrXPjc64zrXPgc6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4izqXPgM63z4HOtc+Dzq/Otc+CIM6xz4DOv864zq7Ous61z4XPg863z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4izqPPhc69z4TOv868zrXPjc+DzrXOuc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLOo8+Fz4POus61z4XOrc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4izqDOtc+BzrnPg8+Dz4zPhM61z4HOtc+CIM61z4bOsc+BzrzOv86zzq3PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+Is6VzrzPhs6szr3Ouc+Dzrcgz4DPgc6/zrfOs868zq3Ovc+Jzr0gz4PPhc+DzrrOtc+Fz47OvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+Is6VzrzPhs6szr3Ouc+DzrcgzrzOtc6zzq3OuM6/z4XPgiDOsc+Bz4fOtc6vzr/PhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4izpXOvM+GzqzOvc65z4POtyDOvM61zrPOrc64zr/Phc+CIM+Dz4XPg866zrXPhc6uz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLOlM61zr0gz4XPgM6sz4HPh86/z4XOvSDPg8+Ezr/Ouc+HzrXOr86xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4izpTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM+MIM+Ezr8gzqzOvc6/zrnOs868zrEgz4TOv8+FIM6xz4HPh861zq/Ov8+FIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrTOuc6xzrPPgc6xz4bOriDOv8+BzrnPg868zq3Ovc+Jzr0gzrXOs86zz4HOrM+Gz4nOvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLOms6/zrnOvc6uIM+Hz4HOrs+DzrcgzrzOrc+Dz4kiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1ZTdmMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRvY3VtZW50cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iT3BlbiBmcm9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJTYXZlIHRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IkNyZWF0ZSBmb2xkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iR3JpZCB2aWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+Ikxpc3QgdmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJTb3J0IGJ5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iU2VhcmNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJTZXR0aW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+Ik9wZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iU2F2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iU2hhcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJEZWxldGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiBzZWxlY3RlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJCeSBuYW1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iQnkgZGF0ZSBtb2RpZmllZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJCeSBzaXplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iU2hvdyByb290cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJIaWRlIHJvb3RzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJGYWlsZWQgdG8gc2F2ZSBkb2N1bWVudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJGYWlsZWQgdG8gY3JlYXRlIGZvbGRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IkZhaWxlZCB0byBxdWVyeSBkb2N1bWVudHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJSZWNlbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gZnJlZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlN0b3JhZ2Ugc2VydmljZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iU2hvcnRjdXRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJEZXZpY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iTW9yZSBhcHBzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iRGlzcGxheSBhZHZhbmNlZCBkZXZpY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iRGlzcGxheSBmaWxlIHNpemUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IkRpc3BsYXkgZGV2aWNlIHNpemUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJObyBpdGVtcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkNhbm5vdCBvcGVuIGZpbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IlVuYWJsZSB0byBkZWxldGUgc29tZSBkb2N1bWVudHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iU2hhcmUgdmlhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NWU3ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2N1bWVudHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Ik9wZW4gZnJvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iU2F2ZSB0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJDcmVhdGUgZm9sZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IkdyaWQgdmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJMaXN0IHZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iU29ydCBieSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IlNlYXJjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iU2V0dGluZ3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJPcGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlNhdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IlNoYXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iRGVsZXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gc2VsZWN0ZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iQnkgbmFtZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IkJ5IGRhdGUgbW9kaWZpZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iQnkgc2l6ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IlNob3cgcm9vdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iSGlkZSByb290cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iRmFpbGVkIHRvIHNhdmUgZG9jdW1lbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iRmFpbGVkIHRvIGNyZWF0ZSBmb2xkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJGYWlsZWQgdG8gcXVlcnkgZG9jdW1lbnRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iUmVjZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGZyZWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJTdG9yYWdlIHNlcnZpY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IlNob3J0Y3V0cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iRGV2aWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+Ik1vcmUgYXBwcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IkRpc3BsYXkgYWR2YW5jZWQgZGV2aWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IkRpc3BsYXkgZmlsZSBzaXplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJEaXNwbGF5IGRldmljZSBzaXplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iTm8gaXRlbXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJDYW5ub3Qgb3BlbiBmaWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJVbmFibGUgdG8gZGVsZXRlIHNvbWUgZG9jdW1lbnRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IlNoYXJlIHZpYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNmZjMzCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9jdW1lbnRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iQWJyaXIgZGVzZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+Ikd1YXJkYXIgZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iQ3JlYXIgY2FycGV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJWaXN0YSBkZSBjdWFkcsOtY3VsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJWaXN0YSBkZSBsaXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJPcmRlbmFyIHBvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IkJ1c2NhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iQ29uZmlndXJhY2nDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJBYnJpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJHdWFyZGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJDb21wYXJ0aXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJFbGltaW5hciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IHNlbGVjY2lvbmFkbyhzKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJQb3Igbm9tYnJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iUG9yIGZlY2hhIGRlIG1vZGlmaWNhY2nDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iUG9yIHRhbWHDsW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJNb3N0cmFyIHJhw61jZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iT2N1bHRhciByYcOtY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJFcnJvciBhbCBndWFyZGFyIGVsIGRvY3VtZW50byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJFcnJvciBhbCBjcmVhciBsYSBjYXJwZXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iRXJyb3IgYWwgY29uc3VsdGFyIGRvY3VtZW50b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJSZWNpZW50ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gZGUgZXNwYWNpbyBsaWJyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IkFsbWFjZW5hbWllbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IkFjY2Vzb3MgZGlyZWN0b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IkRpc3Bvc2l0aXZvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+Ik3DoXMgYXBsaWNhY2lvbmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iTW9zdHJhciBkaXNwb3NpdGl2b3MgYXZhbnphZG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iTW9zdHJhciB0YW1hw7FvIGRlbCBhcmNoaXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJNb3N0cmFyIHRhbWHDsW8gZGVsIGRpc3Bvc2l0aXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iU2luIGVsZW1lbnRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+Ik5vIHNlIHB1ZWRlIGFicmlyIGVsIGFyY2hpdm8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJObyBlcyBwb3NpYmxlIGVsaW1pbmFyIGFsZ3Vub3MgZG9jdW1lbnRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iQ29tcGFydGlyIG1lZGlhbnRlIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjgyNTQyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2N1bWVudG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJBYnJpciBkZXNkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iR3VhcmRhciBlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJDcmVhciBjYXJwZXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlZpc3RhIGRlIGN1YWRyw61jdWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlZpc3RhIGRlIGxpc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+Ik9yZGVuYXIgcG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iQnVzY2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJBanVzdGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iQWJyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iR3VhcmRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iQ29tcGFydGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iRWxpbWluYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iU2VsZWNjaW9uYWRvOiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlBvciBub21icmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJQb3IgZmVjaGEgZGUgbW9kaWZpY2FjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJQb3IgdGFtYcOxbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+Ik1vc3RyYXIgcmHDrWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJPY3VsdGFyIHJhw61jZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IkVycm9yIGFsIGd1YXJkYXIgZG9jdW1lbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IkVycm9yIGFsIGNyZWFyIGxhIGNhcnBldGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJFcnJvciBhbCBjb25zdWx0YXIgbGlzdGEgZGUgZG9jdW1lbnRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IlJlY2llbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGRlIGVzcGFjaW8gbGlicmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJTZXJ2aWNpb3MgYWxtYWNlbmFtaWVudG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iQWNjZXNvcyBkaXJlY3RvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iRGlzcG9zaXRpdm9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iTcOhcyBhcGxpY2FjaW9uZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJNb3N0cmFyIGRpc3Bvc2l0aXZvcyBhdmFuemFkb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJNb3N0cmFyIHRhbWHDsW8gZGVsIGFyY2hpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+Ik1vc3RyYXIgdGFtYcOxbyBkZWwgZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJTaW4gZWxlbWVudG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iRXJyb3IgYWwgYWJyaXIgZWwgYXJjaGl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iTm8gZXMgcG9zaWJsZSBlbGltaW5hciBhbGd1bm9zIGRvY3VtZW50b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iQ29tcGFydGlyIGEgdHJhdsOpcyBkZSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDEyOTU2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9rdW1lbmRpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iQXZhOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iU2FsdmVzdGE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IkxvbyBrYXVzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJSdXVkdXN0aWtrdXZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IkxvZW5kaWt1dmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iU29ydGltaXNhbHVzOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+Ik90c2luZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iU2VhZGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iQXZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlNhbHZlc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJKYWdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iS3VzdHV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IG9uIHZhbGl0dWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iTmltZSBqw6RyZ2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJNdXV0bWlza3V1cMOkZXZhIGrDpHJnaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJTdXVydXNlIGrDpHJnaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+Ikt1dmEganV1cmVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IlBlaWRhIGp1dXJlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iRG9rdW1lbmRpIHNhbHZlc3RhbWluZSBlYmHDtW5uZXN0dXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iS2F1c3RhIGxvb21pbmUgZWJhw7VubmVzdHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iRG9rdW1lbnRpZGUgcMOkcmluZyBlYmHDtW5uZXN0dXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJIaWxqdXRpc2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IG9uIHZhYmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJNw6RsdXJ1dW1pIHRlZW51c2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+Ik90c2V0ZWVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJTZWFkbWVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iUm9oa2VtIHJha2VuZHVzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+Ikt1dmEgdGlwcHNlYWRtZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJLdXZhIGZhaWxpIHN1dXJ1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iS3V2YSBzZWFkbWUgc3V1cnVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iw5xrc3VzaSBlaSBvbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJGYWlsaSBlaSBzYWEgYXZhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+Ik3DtW5kYSBkb2t1bWVudGkgZWkgw7VubmVzdHUga3VzdHV0YWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IkphZ2FnZSB0ZWVudXNlZ2EiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MjJiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+Itin2LPZhtin2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Itio2KfYsiDaqdix2K/ZhiDYp9iyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLYsNiu24zYsdmHINiv2LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i2KfbjNis2KfYryDZvtmI2LTZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLZhtmF2KfbjCDYrNiv2YjZhNuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+ItmG2YXYp9uMINmB2YfYsdiz2KrigIzZiNin2LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i2YXYsdiq2KjigIzYs9in2LLbjCDYqNixINin2LPYp9izIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i2KzYs9iq2KzZiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i2KrZhti424zZhdin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLYqNin2LIg2qnYsdiv2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i2LDYrtuM2LHZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i2KfYtNiq2LHYp9qp4oCM2q/YsNin2LHbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+Itit2LDZgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+INin2YbYqtiu2KfYqCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+Itio2LEg2KfYs9in2LMg2YbYp9mFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i2KjYsSDYp9iz2KfYsyDYqtin2LHbjNiuINin2LXZhNin2K0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i2KjYsSDYp9iz2KfYsyDYp9mG2K/Yp9iy2YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLZhtmF2KfbjNi0INix24zYtNmH4oCM2YfYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiLZvtmG2YfYp9mGINqp2LHYr9mGINix24zYtNmH4oCM2YfYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i2LDYrtuM2LHZhyDYs9mG2K8g2KfZhtis2KfZhSDZhti02K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i2KfbjNis2KfYryDZvtmI2LTZhyDYp9mG2KzYp9mFINmG2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+Itis2LPYqtis2YjbjCDYp9iz2YbYp9ivINmG2KfZhdmI2YHZgiDYqNmI2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiLYp9iu24zYsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiDYotiy2KfYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+Itiu2K/Zhdin2Kog2LDYrtuM2LHZh+KAjNiz2KfYstuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+ItmF24zYp9mG2KjYsdmH2KciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+Itiv2LPYqtqv2KfZh+KAjNmH2KciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLYqNix2YbYp9mF2YfigIzZh9in24wg2KjbjNi02KrYsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+ItmG2YXYp9uM2LQg2K/Ys9iq2q/Yp9mH4oCM2YfYp9uMINm+24zYtNix2YHYqtmHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i2YbZhdin24zYtCDYp9mG2K/Yp9iy2Ycg2YHYp9uM2YQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+ItmG2YXYp9uM2LQg2KfZhtiv2KfYstmHINi12YHYrdmHINmG2YXYp9uM2LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLZhdmI2LHYr9uMINmF2YjYrNmI2K8g2YbbjNiz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLZgdin24zZhCDYqNin2LIg2YbZhduM4oCM2LTZiNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLYqNix2K7bjCDYp9iyINin2LPZhtin2K8g2K3YsNmBINmG2YXbjOKAjNi02YjZhtivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+Itin2LTYqtix2KfaqeKAjNqv2LDYp9ix24wg2KfYsiDYt9ix24zZgiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0MGVjZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iQXNpYWtpcmphdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iQXZvaW5uYSBhbGthZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IlRhbGxlbm5hIGtvaHRlZXNlZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iTHVvIGthbnNpbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJSdXVkdWtrb27DpGt5bcOkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+Ikx1ZXR0ZWxvbsOka3ltw6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iTGFqaXR0ZWx1cGVydXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+Ikhha3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IkFzZXR1a3NldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IkF2YWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iVGFsbGVubmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IkphYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IlBvaXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IHZhbGl0dHVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+Ik5pbWVuIG11a2FhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+Ik11b2trYXVzcMOkaXbDpG4gbXVrYWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+Iktvb24gbXVrYWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iTsOkeXTDpCBqdXVyZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iUGlpbG90YSBqdXVyZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IkFzaWFraXJqYW4gdGFsbGVubnVzIGVww6Rvbm5pc3R1aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJLYW5zaW9uIGx1b21pbmVuIGVww6Rvbm5pc3R1aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IkRva3VtZW50dGlreXNlbHkgZXDDpG9ubmlzdHVpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iVmlpbWVpc2ltbcOkdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiB2YXBhYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iVGFsbGVubnVzcGFsdmVsdXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iUGlrYWt1dmFra2VldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iTGFpdHRlZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJMaXPDpMOkIHNvdmVsbHVrc2lhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iTsOkeXTDpCBrZWhpdHR5bmVldCBsYWl0dGVldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+Ik7DpHl0w6QgdGllZG9zdG9uIGtva28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+Ik7DpHl0w6QgbGFpdHRlZW4ga29rbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IkVpIGtvaHRlaXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iVGllZG9zdG9hIGVpIHZvaSBhdmF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iSm9pdGFraW4gYXNpYWtpcmpvamEgZWkgdm9pIHBvaXN0YWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iSmFhIHNvdmVsbHVrc2Vzc2EiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzNzM3OQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRvY3VtZW50cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iT3V2ZXJ0IMOgIHBhcnRpciBkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iRW5yZWdpc3RyZXIgZGFucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJDcsOpZXIgdW4gZG9zc2llciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJHcmlsbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iTGlzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iVHJpZXIgcGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iUmVjaGVyY2hlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iUGFyYW3DqHRyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJPdXZyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iRW5yZWdpc3RyZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IlBhcnRhZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iU3VwcHJpbWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz7CoHPDqWxlY3Rpb25uw6kocykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iUGFyIG5vbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IlBhciBkYXRlIGRlIG1vZGlmaWNhdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJQYXIgdGFpbGxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iQWZmaWNoZXIgbGVzIHJhY2luZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iTWFzcXVlciBsZXMgcmFjaW5lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iw4ljaGVjIGRlIGxcJ2VucmVnaXN0cmVtZW50IGR1IGRvY3VtZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IsOJY2hlYyBkZSBsYSBjcsOpYXRpb24gZHUgZG9zc2llciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IsOJY2hlYyBkZSBsYSBkZW1hbmRlIGRlIGRvY3VtZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iUsOpY2VudHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz7CoGRpc3BvbmlibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJTZXJ2aWNlcyBkZSBzdG9ja2FnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJSYWNjb3VyY2lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJBcHBhcmVpbHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJQbHVzIGRcJ2FwcGxpY2F0aW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IkFmZmljaGVyIGxlcyBhcHBhcmVpbHMgYXZhbmPDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJBZmZpY2hlciBsYSB0YWlsbGUgZHUgZmljaGllciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iVGFpbGxlIGRlIGxcJ8OpY3JhbiBkZSBsXCdhcHBhcmVpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IkF1Y3VuIMOpbMOpbWVudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkltcG9zc2libGUgZFwnb3V2cmlyIGxlIGZpY2hpZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IkltcG9zc2libGUgZGUgc3VwcHJpbWVyIGNlcnRhaW5zIGRvY3VtZW50cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJQYXJ0YWdlciBwYXIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOWFlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRvY3VtZW50cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iT3V2cmlyIMOgIHBhcnRpciBkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iRW5yZWdpc3RyZXIgc291cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJDcsOpZXIgdW4gZG9zc2llciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJHcmlsbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iTGlzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iVHJpZXIgcGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iUmVjaGVyY2hlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iUGFyYW3DqHRyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJPdXZyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iRW5yZWdpc3RyZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IlBhcnRhZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iU3VwcHJpbWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz7CoMOpbMOpbWVudChzKSBzw6lsZWN0aW9ubsOpKHMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlBhciBub20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJQYXIgZGF0ZSBkZSBtb2RpZmljYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iUGFyIHRhaWxsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IkFmZmljaGVyIGxlcyByw6lwZXJ0b2lyZXMgcmFjaW5lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJNYXNxdWVyIGxlcyByw6lwZXJ0b2lyZXMgcmFjaW5lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iw4ljaGVjIGRlIGxcJ2VucmVnaXN0cmVtZW50IGR1IGRvY3VtZW50LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiLDiWNoZWMgZGUgbGEgY3LDqWF0aW9uIGR1IGRvc3NpZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iw4ljaGVjIGRlIGxhIGRlbWFuZGUgZGUgZG9jdW1lbnRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IlLDqWNlbnRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iRXNwYWNlIGRpc3BvbmlibGXCoDogPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iU2VydmljZXMgZGUgc3RvY2thZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iUmFjY291cmNpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iQXBwYXJlaWxzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iQXV0cmVzIGFwcGxpY2F0aW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IkFmZmljaGVyIGxlcyBhcHBhcmVpbHMgYXZhbmPDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJBZmZpY2hlciBsYSB0YWlsbGUgZGVzIGZpY2hpZXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJBZmZpY2hlciBsYSBjYXBhY2l0w6kgZGUgc3RvY2thZ2UgZGVzIGFwcGFyZWlscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IkF1Y3VuIMOpbMOpbWVudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkltcG9zc2libGUgZFwnb3V2cmlyIGxlIGZpY2hpZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBjZXJ0YWlucyBkb2N1bWVudHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IlBhcnRhZ2VyIHZpYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3ZmNiYQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i4KSm4KS44KWN4KSk4KS+4KS14KWH4KSc4KS8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLgpK/gpLngpL7gpIIg4KS44KWHIOCkluCli+CksuClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4i4KSv4KS54KS+4KSCIOCkuOCkueClh+CknOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLgpKvgpLzgpYvgpLLgpY3gpKHgpLAg4KSs4KSo4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IuCkl+CljeCksOCkv+CkoSDgpKbgpYPgpLbgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i4KS44KWC4KSa4KWAIOCkpuClg+CktuCljeCkryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLgpIfgpLjgpLjgpYcg4KSV4KWN4KSw4KSu4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IuCkluCli+CknOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i4KS44KWH4KSf4KS/4KSC4KSXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i4KSW4KWL4KSy4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IuCkuOCkueClh+CknOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i4KS44KS+4KSd4KS+IOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IuCkueCkn+CkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IOCkmuCkr+CkqOCkv+CkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLgpKjgpL7gpK4g4KSV4KWHIOCkheCkqOClgeCkuOCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IuCkrOCkpuCksuCkvuCktSDgpJXgpYcg4KSm4KS/4KSo4KS+4KSC4KSVIOCkleClhyDgpIXgpKjgpYHgpLjgpL7gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i4KSG4KSV4KS+4KSwIOCkleClhyDgpIXgpKjgpYHgpLjgpL7gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLgpLDgpYLgpJ8g4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IuCksOClguCknyDgpJvgpL/gpKrgpL7gpI/gpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IuCkpuCkuOCljeCkpOCkvuCkteClh+CknOCkvCDgpLjgpLngpYfgpJzgpKjgpYcg4KSu4KWH4KSCIOCkteCkv+Ckq+CksiDgpLDgpLngpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i4KSr4KS84KWL4KSy4KWN4KSh4KSwIOCkrOCkqOCkvuCkqOClhyDgpK7gpYfgpIIg4KS14KS/4KSr4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i4KSm4KS44KWN4KSk4KS+4KS14KWH4KSc4KWL4KSCIOCkleClhyDgpLLgpL/gpI8g4KSV4KWN4KS14KWH4KSw4KWAIOCkleCksOCkqOClhyDgpK7gpYfgpIIg4KS14KS/4KSr4KSyIOCksOCkueCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IuCkueCkvuCksiDgpLngpYAg4KSV4KWHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IOCksOCkv+CkleCljeCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IuCkuOCkguCkl+CljeCksOCkueCkoyDgpLjgpYfgpLXgpL7gpI/gpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4i4KS24KWJ4KSw4KWN4KSf4KSV4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLgpIngpKrgpJXgpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLgpIXgpKfgpL/gpJUg4KSQ4KSq4KWN4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i4KSJ4KSo4KWN4KSo4KSkIOCkieCkquCkleCksOCko+Cli+CkgiDgpJXgpYsg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i4KSr4KS84KS+4KSH4KSyIOCkleCkviDgpIbgpJXgpL7gpLAg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLgpIngpKrgpJXgpLDgpKMg4KSV4KS+IOCkhuCkleCkvuCksCDgpKbgpL/gpJbgpL7gpI/gpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLgpJXgpYvgpIgg4KSG4KSH4KSf4KSuIOCkqOCkueClgOCkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IuCkq+CkvOCkvuCkh+CksiDgpKjgpLngpYDgpIIg4KSW4KWL4KSy4KWAIOCknOCkviDgpLjgpJXgpKTgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IuCkleClgeCkmyDgpKbgpLjgpY3gpKTgpL7gpLXgpYfgpJzgpLzgpYvgpIIg4KSV4KWLIOCkueCkn+CkvuCkqOClhyDgpK7gpYfgpIIg4KSF4KSV4KWN4KS34KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IuCkh+CkuOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KS44KS+4KSd4KS+IOCkleCksOClh+CkgiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjMmYwNAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9rdW1lbnRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJPdHZvcmkgaXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IlNwcmVtaSB1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+Ikl6cmFkaSBtYXB1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlByaWtheiByZcWhZXRrZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJQcmlrYXogcG9waXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IlBvcmVkYW5vIHBvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iUHJldHJhxb5pdmFuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IlBvc3RhdmtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iT3R2YXJhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlNwcmVtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iRGlqZWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iSXpicmnFoWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iT2RhYnJhbm86IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iUG8ga29yaXNuaWt1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iUG8gZGF0dW11IGl6bWplbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iUG8gdmVsacSNaW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iUHJpa2HFvmkga29yaWplbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iU2FrcmlqIGtvcmlqZW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJOaWplIHVzcGplbG8gc3ByZW1hbmplIGRva3VtZW50YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJJenJhZGEgbWFwZSBuaWplIHVzcGplbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJUcmHFvmVuamUgZG9rdW1lbmF0YSBuaWplIHVzcGplbG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJOZWRhdm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGJlc3BsYXRubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlVzbHVnZSBwb2hyYW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IlByZcSNYWNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJVcmXEkWFqaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IlZpxaFlIGFwbGlrYWNpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJQcmlrYcW+aSBuYXByZWRuZSB1cmXEkWFqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IlByaWthxb5pIHZlbGnEjWludSBkYXRvdGVrZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iUHJpa2HFvmkgdmVsacSNaW51IHVyZcSRYWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iTmVtYSBzdGF2a2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJEYXRvdGVrdSBuaWplIG1vZ3XEh2Ugb3R2b3JpdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+Ik5pamUgbW9ndcSHZSBpemJyaXNhdGkgbmVrZSBkb2t1bWVudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iRGlqZWxpIHB1dGVtIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjc4NTRiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2t1bWVudHVtb2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Ik1lZ255aXTDoXMgaW5uZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+Ik1lbnTDqXMgaWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+Ik1hcHBhIGzDqXRyZWhvesOhc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iUsOhY3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iTGlzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iUmVuZGV6w6lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iS2VyZXPDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IkJlw6FsbMOtdMOhc29rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iTWVnbnlpdMOhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJNZW50w6lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJNZWdvc3p0w6FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iVMO2cmzDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiBraXbDoWxhc3p0dmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iTsOpdiBzemVyaW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iTcOzZG9zw610w6FzIGTDoXR1bWEgc3plcmludCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJNw6lyZXQgc3plcmludCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+Ikd5w7Zrw6lyc3ppbnQgbWVnamVsZW7DrXTDqXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+Ikd5w7Zrw6lyc3ppbnQgZWxyZWp0w6lzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iTmVtIHNpa2Vyw7xsdCBtZW50ZW5pIGEgZG9rdW1lbnR1bW90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+Ik5lbSBzaWtlcsO8bHQgbMOpdHJlaG96bmkgYSBtYXBww6F0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iQSBkb2t1bWVudHVtb2sgbGVrw6lyw6lzZSBuZW0gc2lrZXLDvGx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iTGVndXTDs2JiaWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IHN6YWJhZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlTDoXJoZWx5c3pvbGfDoWx0YXTDoXNvayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJQYXJhbmNzaWtvbm9rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJFc3prw7Z6w7ZrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iVG92w6FiYmkgYWxrYWxtYXrDoXNvayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IlNwZWNpw6FsaXMgZXN6a8O2esO2ayBtZWdqZWxlbsOtdMOpc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJGw6FqbG3DqXJldCBtZWdqZWxlbsOtdMOpc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IkVzemvDtnptw6lyZXQgbWVnamVsZW7DrXTDqXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iTmluY3NlbmVrIGVsZW1layI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkEgZsOhamx0IG5lbSBsZWhldCBtZWdueWl0bmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+Ik7DqWjDoW55IGRva3VtZW50dW1vdCBuZW0gbGVoZXQgdMO2csO2bG5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+Ik1lZ29zenTDoXMgaXR0OiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjgzZjNlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i1ZPVodW91b/VodWp1bLVqdWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+ItSy1aHWgdWl1awg1aHVtdW91b/VpdWy1avWgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4i1YrVodWw1aXVrCDVodW11b3Vv9Wl1bIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i1Y3Vv9Wl1bLVrtWl1awg1anVstWp1aHVutWh1bbVodWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+ItWR1aHVttaB1aHVtdWr1bYg1b/VpdW91oQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i1ZHVuNaC1oHVodWv1asg1b/VpdW91oQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i1LTVodW91aHVvtW41oDVpdWsINWo1b3VvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+ItWI1oDVuNW21aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i1L/VodaA1aPVodW+1bjWgNW41oLVtNW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+ItSy1aHWgdWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i1YrVodWw1aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i1YDVodW01oXVo9W/1aHVo9W41oDVrtWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLVi9W21bvVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4g1ajVttW/1oDVvtWh1a4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4i1LjVvdW/INWh1bbVvtWh1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLUuNW91b8g1oPVuNaD1bjVrdW01aHVtiDVodW01b3VodWp1b7VqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLUuNW91b8g1bnVodaD1asiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLVkdW41oLVtdaBINW/1aHVrCDVodaA1bTVodW/1bbVpdaA1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i1LnVodaE1oHVttWl1awg1aHWgNW01aHVv9W21aXWgNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLVidWw1aHVu9W41bLVvtWl1oEg1brVodWw1aXVrCDWg9Wh1b3Vv9Wh1anVuNaC1bLVqdWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+ItWJ1bDVodW71bjVstW+1aXWgSDVvdW/1aXVstWu1aXVrCDVqdWy1anVodW61aHVttWh1a/VqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+ItWT1aHVvdW/1aHVqdWy1anVpdaA1avVtiDVsNWh1oDWgdW41oLVtCDVr9Wh1b/VodaA1aXVrNWr1b0g1b3VrdWh1awg1b/VpdWy1asg1bjWgtW21aXWgdWh1b4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiLVjtWl1oDVu9Wr1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4g1aHVptWh1b8g1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiLVitWh1bDVuNaC1b3Vv9WrINWu1aHVvNWh1bXVuNaC1anVtdW41oLVttW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLUtNW11bjWgtaA1aHVttaB1bjWgtW01bbVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLVjdWh1oDWhNWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLVgNWh1b7VpdWs1bXVodWsINWu1oDVodWj1oDVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i1ZHVuNaC1oHVodWk1oDVpdWsINWo1bbVpNWs1aHVtdW21b7VodWuINW91aHWgNaE1aXWgNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i1ZHVuNaC1oHVodWk1oDVpdWsINaG1aHVtdWs1asg1bnVodaD1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+ItWR1bjWgtaB1aHVpNaA1aXVrCDVvdWh1oDWhNWrINW51aHWg9WoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4i1Y/VodaA1oDVpdaAINW51a/VodW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i1YDVttWh1oDVodW+1bjWgCDVudWnINWi1aHWgdWl1awg1obVodW11azVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4i1LHVttWw1bbVodaAINWnINW71bbVu9Wl1awg1bjWgNW41bcg1oPVodW91b/VodWp1bLVqdWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i1Y/VodaA1aHVrtWl1awiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOWI5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRva3VtZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IkJ1a2EgZGFyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iU2ltcGFuIGtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IkJ1YXQgZm9sZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlRhbXBpbGFuIGtpc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iVGFtcGlsYW4gZGFmdGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IlNvcnRpciBtZW51cnV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iVGVsdXN1cmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IlNldGVsYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJCdWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlNpbXBhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iQmFnaWthbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IkhhcHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gZGlwaWxpaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJNZW51cnV0IG5hbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJNZW51cnV0IHRhbmdnYWwgZGl1YmFoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+Ik1lbnVydXQgdWt1cmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iVGFtcGlsa2FuIGFrYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iU2VtYnVueWlrYW4gYWthciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iR2FnYWwgbWVueWltcGFuIGRva3VtZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iR2FnYWwgbWVtYnVhdCBmb2xkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJHYWdhbCBtZW5naXJpbSBrdWVyaSB1bnR1ayBkb2t1bWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iVGVya2luaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBiZWJhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IkxheWFuYW4gcGVueWltcGFuYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iUGludGFzYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IlBlcmFuZ2thdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IkFwbGlrYXNpIGxhaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJUYW1waWxrYW4gcGVyYW5na2F0IGxhbmp1dGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iVGFtcGlsa2FuIHVrdXJhbiBmaWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJUYW1waWxrYW4gdWt1cmFuIHBlcmFuZ2thdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IlRpZGFrIGFkYSBpdGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iVGlkYWsgZGFwYXQgbWVtYnVrYSBmaWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJUaWRhayBkYXBhdCBtZW5naGFwdXMgYmViZXJhcGEgZG9rdW1lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJCYWdpa2FuIG1lbGFsdWkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MzIzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRvY3VtZW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iQXByaSBkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iU2FsdmEgaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iQ3JlYSBjYXJ0ZWxsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJWaXN1YWxpenphemlvbmUgZ3JpZ2xpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJWaXN1YWxpenphemlvbmUgZWxlbmNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+Ik9yZGluYSBwZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJDZXJjYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iSW1wb3N0YXppb25pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iQXByaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJTYWx2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iQ29uZGl2aWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iRWxpbWluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IHNlbGV6aW9uYXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlBlciBub21lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iUGVyIGRhdGEgZGkgbW9kaWZpY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iUGVyIGRpbWVuc2lvbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJNb3N0cmEgbm9kaSBwcmluY2lwYWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+Ik5hc2NvbmRpIG5vZGkgcHJpbmNpcGFsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iSW1wb3NzaWJpbGUgc2FsdmFyZSBpbCBkb2N1bWVudG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iSW1wb3NzaWJpbGUgY3JlYXJlIGxhIGNhcnRlbGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iSW1wb3NzaWJpbGUgY2hpZWRlcmUgZG9jdW1lbnRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iUmVjZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBsaWJlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJTZXJ2aXppIGRpIGFyY2hpdmlhemlvbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iU2NvcmNpYXRvaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IkRpc3Bvc2l0aXZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iQWx0cmUgYXBwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iVmlzdWFsaXp6YSBkaXNwb3NpdGl2aSBhdmFuemF0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IlZpc3VhbGl6emEgZGltZW5zaW9uaSBmaWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJWaXN1YWxpenphIGRpbWVuc2lvbmkgZGlzcG9zaXRpdmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJOZXNzdW4gYXJ0aWNvbG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJJbXBvc3NpYmlsZSBhcHJpcmUgaWwgZmlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iSW1wb3NzaWJpbGUgZWxpbWluYXJlIGFsY3VuaSBkb2N1bWVudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iQ29uZGl2aWRpIHZpYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyYzA2MAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i157Xodee15vXmdedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLXpNeq15cg154tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLXqdee15XXqCDXkS0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i16bXldeoINeq15nXp9eZ15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4i16rXpteV15LXqiDXqNep16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i16rXpteV15LXqiDXqNep15nXnteUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+Itee15nXmdefINec16TXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IteX16TXqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i15TXkteT16jXldeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i16TXqteXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+Itep157XldeoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLXqdeq16MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLXnteX16ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiDXoNeR15fXqNeVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+Itec16TXmSDXqdedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i15zXpNeZINeq15DXqNeZ15og16nXmdeg15XXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLXnNek15kg15LXldeT15wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLXlNem15Ig16nXldeo16nXmdedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IteU16HXqteoINep15XXqNep15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i16nXnteZ16jXqiDXlNee16HXnteaINeg15vXqdec15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i15nXpteZ16jXqiDXlNeq15nXp9eZ15Qg16DXm9ep15zXlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+Itep15DXmdec16rXqiDXlNee16HXnteb15nXnSDXoNeb16nXnNeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i157XlNeW157XnyDXlNeQ15fXqNeV158iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4g16nXnCDXqdeY15cg16TXoNeV15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiLXqdeZ16jXldeq15kg15DXl9eh15XXnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLXp9eZ16bXldeo15kg15PXqNeaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLXnteb16nXmdeo15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+Itei15XXkyDXkNek15zXmden16bXmdeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiLXlNem15Ig157Xm9ep15nXqNeZ150g157Xqten15PXnteZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLXlNem15Ig15DXqiDXkteV15PXnCDXlNen15XXkdelIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLXlNem15Ig15DXqiDXkteV15PXnCDXlNee15vXqdeZ16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLXkNeZ158g16TXqNeZ15jXmdedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i15zXkCDXoNeZ16rXnyDXnNek16rXldeXINeQ16og15TXp9eV15HXpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4i15zXkCDXoNeZ16rXnyDXnNee15fXldenINeX15zXpyDXnteU157Xodee15vXmdedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+Itep16rXoyDXkdeQ157Xptei15XXqiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk2NDk2ZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i44OJ44Kt44Ol44Oh44Oz44OIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLmrKHjgYvjgonplovjgY86Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLmrKHjgavkv53lrZg6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IuODleOCqeODq+ODgOOCkuS9nOaIkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLjgrDjg6rjg4Pjg4nooajnpLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i44Oq44K544OI6KGo56S6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IuS4puOBueabv+OBiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IuaknOe0oiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i6Kit5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i6ZaL44GPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IuS/neWtmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i5YWx5pyJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i5YmK6ZmkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz7ku7bpgbjmip7muIjjgb8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4i5ZCN5YmN6aCGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i5pu05paw5pel6aCGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IuOCteOCpOOCuumghiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IuODq+ODvOODiOOCkuihqOekuuOBmeOCiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiLjg6vjg7zjg4jjgpLpnZ7ooajnpLrjgavjgZnjgosiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IuODieOCreODpeODoeODs+ODiOOCkuS/neWtmOOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiLjg5Xjgqnjg6vjg4DjgpLkvZzmiJDjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiLjg4njgq3jg6Xjg6Hjg7Pjg4jjga7jgq/jgqjjg6rjgavlpLHmlZfjgZfjgb7jgZfjgZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiLmnIDov5EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiLnqbrjgY3lrrnph486IDx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IuOCueODiOODrOODvOOCuOOCteODvOODk+OCuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLjgrfjg6fjg7zjg4jjgqvjg4Pjg4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+Iuerr+acqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IuOBneOBruS7luOBruOCouODl+ODqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+Iuerr+acq+OBruips+e0sOioreWumuOCkuihqOekuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IuODleOCoeOCpOODq+OBruOCteOCpOOCuuOCkuihqOekuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i56uv5pyr44Gu44K144Kk44K644KS6KGo56S6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4i44Ki44Kk44OG44Og44GM44GC44KK44G+44Gb44KTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i44OV44Kh44Kk44Or44KS6ZaL44GR44G+44Gb44KTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLkuIDpg6jjga7jg4njgq3jg6Xjg6Hjg7Pjg4jjgpLliYrpmaTjgafjgY3jgb7jgZvjgpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i5YWx5pyJ44OE44O844OrIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZTEyNzQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLhg5Phg53hg5nhg6Phg5vhg5Thg5zhg6Lhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IuGDkuGDkOGDruGDoeGDnOGDkCDhg5Dhg6Xhg5Thg5Phg5Dhg5w6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLhg6jhg5Thg5zhg5Dhg67hg5Xhg5Ag4YOQ4YOlOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLhg6Hhg5Dhg6Xhg5Dhg6bhg5Dhg5rhg5Phg5jhg6Eg4YOo4YOU4YOl4YOb4YOc4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IuGDkeGDkOGDk+GDmOGDoSDhg67hg5Thg5Phg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i4YOh4YOY4YOY4YOhIOGDruGDlOGDk+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLhg6Hhg53hg6Dhg6Lhg5jhg6Dhg5Thg5Hhg5A6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i4YOr4YOY4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLhg5Lhg5Dhg67hg6Hhg5zhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i4YOo4YOU4YOc4YOQ4YOu4YOV4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLhg5Lhg5Dhg5bhg5jhg5Dhg6Dhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLhg6zhg5Dhg6jhg5rhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiDhg5vhg53hg5zhg5jhg6jhg5zhg6Phg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4i4YOh4YOQ4YOu4YOU4YOa4YOY4YOXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i4YOq4YOV4YOa4YOY4YOa4YOU4YOR4YOY4YOhIOGDl+GDkOGDoOGDmOGDpuGDmOGDlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLhg5bhg53hg5vhg5jhg5ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLhg6Thg5Thg6Hhg5Xhg5Thg5Hhg5jhg6Eg4YOp4YOV4YOU4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IuGDpOGDlOGDoeGDleGDlOGDkeGDmOGDoSDhg5Phg5Dhg5vhg5Dhg5rhg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IuGDk+GDneGDmeGDo+GDm+GDlOGDnOGDouGDmOGDoSDhg6jhg5Thg5zhg5Dhg67hg5Xhg5Ag4YOV4YOU4YOgIOGDm+GDneGDruGDlOGDoOGDruGDk+GDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiLhg6Hhg5Dhg6Xhg5Dhg6bhg5Dhg5rhg5Phg5jhg6Eg4YOo4YOU4YOl4YOb4YOc4YOQIOGDleGDlOGDoCDhg5vhg53hg67hg5Thg6Dhg67hg5Phg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiLhg5Phg53hg5nhg6Phg5vhg5Thg5zhg6Lhg5Thg5Hhg5bhg5Qg4YOb4YOd4YOX4YOu4YOd4YOV4YOc4YOQIOGDleGDlOGDoCDhg5Lhg5Dhg5jhg5Lhg5bhg5Dhg5Xhg5zhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiLhg5Hhg53hg5rhg50iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4g4YOX4YOQ4YOV4YOY4YOh4YOj4YOk4YOQ4YOa4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4i4YOb4YOU4YOu4YOh4YOY4YOU4YOg4YOU4YOR4YOY4YOhIOGDoeGDlOGDoOGDleGDmOGDoeGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLhg5vhg5Dhg5rhg6Hhg5Dhg67hg5vhg53hg5Hhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IuGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IuGDm+GDlOGDouGDmCDhg5Dhg57hg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiLhg5nhg53hg5vhg57hg5rhg5Thg6Xhg6Hhg6Phg6Dhg5gg4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOU4YOR4YOY4YOhIOGDqeGDleGDlOGDnOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IuGDpOGDkOGDmOGDmuGDmOGDoSDhg5bhg53hg5vhg5jhg6Eg4YOp4YOV4YOU4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLhg5vhg53hg6zhg6fhg53hg5Hhg5jhg5rhg53hg5Hhg5jhg6Eg4YOW4YOd4YOb4YOY4YOhIOGDqeGDleGDlOGDnOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IuGDlOGDoOGDl+GDlOGDo+GDmuGDlOGDkeGDmCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i4YOk4YOQ4YOY4YOa4YOY4YOhIOGDkuGDkOGDruGDoeGDnOGDkCDhg5Xhg5Thg6Ag4YOu4YOU4YOg4YOu4YOT4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLhg5bhg53hg5Lhg5jhg5Thg6Dhg5fhg5gg4YOT4YOd4YOZ4YOj4YOb4YOU4YOc4YOi4YOY4YOhIOGDrOGDkOGDqOGDmuGDkCDhg5Xhg5Thg6Ag4YOu4YOU4YOg4YOu4YOT4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IuGDkuGDkOGDluGDmOGDkOGDoOGDlOGDkeGDkDoiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmMzY5OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IuGer+GegOGen+GetuGemiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i4Z6U4Z6+4Z6A4oCL4Z6W4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLhnprhnoDhn5Lhnp/hnrbigIvhnpHhnrvhnoDigIvhnpHhn4UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i4Z6U4Z6E4Z+S4Z6A4Z6+4Z6P4oCL4Z6Q4Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IuGekeGet+GeiuGfkuGei+Gel+GetuGeluKAi+GegOGfkuGemuGeoeGetiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLhnpHhnrfhnorhn5LhnovhnpfhnrbhnpbigIvhnpThnonhn5LhnofhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i4Z6P4Z6Y4Z+S4Z6a4Z+A4Z6U4oCL4Z6P4Z624Z6YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i4Z6f4Z+S4Z6c4Z+C4Z6E4Z6a4Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLhnoDhnrbhnprigIvhnoDhn4bhno7hno/hn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLhnpThnr7hnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i4Z6a4Z6A4Z+S4Z6f4Z624Z6R4Z674Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLhnoXhn4LhnoDhnprhn4bhnpvhn4LhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLhnpvhnrvhnpQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4i4Z6U4Z624Z6T4oCL4Z6H4Z+S4Z6a4Z6+4Z6fIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4i4Z6P4Z624Z6Y4oCL4Z6I4Z+S4Z6Y4Z+E4Z+HIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i4Z6P4Z624Z6Y4oCL4Z6A4Z624Z6b4Z6U4Z6a4Z634Z6F4Z+S4Z6G4Z+B4Z6R4oCL4Z6U4Z624Z6T4oCL4Z6A4Z+C4Z6U4Z+S4Z6a4Z+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IuGej+GetuGemOKAi+KAi+GekeGfhuGeoOGfhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IuGelOGehOGfkuGeoOGetuGeiSByb290cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiLhnpvhnrbhnoDhn4sgcm9vdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IuGelOGetuGek+KAi+GelOGemuGetuGeh+GfkOGemeKAi+GegOGfkuGek+Geu+GehOKAi+GegOGetuGemuKAi+GemuGegOGfkuGen+GetuKAi+GekeGeu+GegOKAi+Ger+GegOGen+GetuGemiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiLhnpThnrbhnpPigIvhnpThnprhnrbhnofhn5DhnpnigIvhnoDhn5LhnpPhnrvhnoTigIvhnoDhnrbhnprigIvhnpThnoThn5LhnoDhnr7hno/igIvhnpDhno8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiLhnpThnrbhnpPigIvhnpThnprhnrbhnofhn5DhnpnigIvhnoDhn5LhnpPhnrvhnoTigIvhnoDhnrbhnprigIvigIvhnoXhn5Lhnprhn4Thn4figIvhnq/hnoDhnp/hnrbhnpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiLhnpDhn5Lhnpjhnrjhn5ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiLhnpHhn4bhnpPhn4HhnpogPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4i4Z6f4Z+B4Z6c4Z624Z6A4Z6Y4Z+S4Z6Y4oCL4Z6V4Z+S4Z6K4Z6b4Z+L4oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6V4Z+S4Z6R4Z674Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IuGeleGfkuGem+GevOGenOGegOGetuGej+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4i4Z6n4Z6U4Z6A4Z6a4Z6O4Z+NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4i4Z6A4Z6Y4Z+S4Z6Y4oCL4Z6c4Z634Z6S4Z644oCL4oCL4Z6F4Z+S4Z6a4Z6+4Z6T4oCL4Z6R4Z+A4Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i4Z6U4Z6E4Z+S4Z6g4Z624Z6J4oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6A4Z6Y4Z+S4Z6a4Z634Z6P4oCL4Z6B4Z+S4Z6W4Z6f4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i4Z6U4Z6E4Z+S4Z6g4Z624Z6J4oCL4Z6R4Z+G4Z6g4Z+G4oCL4Z6v4Z6A4Z6f4Z624Z6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLhnpThnoThn5LhnqDhnrbhnonigIvhnpHhn4bhnqDhn4bigIvhnqfhnpThnoDhnprhno7hn40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLhnoLhn5LhnpjhnrbhnpPhnpLhnrbhno/hnrsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLhnpjhnrfhnpPigIvhnqLhnrbhnoXigIvhnpThnr7hnoDigIvhnq/hnoDhnp/hnrbhnpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IuGemOGet+Gek+KAi+GeouGetuGeheKAi+Gem+Geu+GelOKAi+Ger+GegOGen+GetuGemuKAi+GemOGeveGemeKAi+GeheGfhuGek+GeveGekyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLhnoXhn4LhnoDhnprhn4bhnpvhn4LhnoDigIvhno/hnrbhnpgiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZDBkNDQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IuusuOyEnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i7Je06riwOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4i7KCA7J6lIOychOy5mDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i7Y+0642UIOunjOuTpOq4sCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLrsJTrkZHtjJDsi50g67O06riwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IuuqqeuhnSDrs7TquLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i7KCV66CsIOq4sOykgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IuqygOyDiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i7ISk7KCVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i7Je06riwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IuyggOyepSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i6rO17JygIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i7IKt7KCcIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz7qsJwg7ISg7YOd65CoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IuydtOumhOyInCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IuyImOygleuQnCDrgqDsp5zsiJwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i7YGs6riw7IicIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i66Oo7Yq4IO2RnOyLnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiLro6jtirgg7Iio6riw6riwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLrrLjshJwg7KCA7J6lIOyLpO2MqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiLtj7TrjZTrpbwg66eM65Ok7KeAIOuqu+2VqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IuusuOyEnOulvCDqsoDsg4ntlZjsp4Ag66q77ZaI7Iq164uI64ukLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+Iuy1nOq3vCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiDrgqjsnYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiLsoIDsnqXsmqnrn4kg7ISc67mE7IqkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IuuwlOuhnOqwgOq4sCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4i6riw6riwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4i7JWxIOuNlOuztOq4sCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IuqzoOq4iSDquLDquLAg7ZGc7IucIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i7YyM7J28IO2BrOq4sCDtkZzsi5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+Iuq4sOq4sCDtgazquLAg7ZGc7IucIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4i7ZWt66qpIOyXhuydjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+Iu2MjOydvOydhCDsl7Qg7IiYIOyXhuydjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4i7J2867aAIOusuOyEnOulvCDsgq3soJztlaAg7IiYIOyXhuydjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLqs7XsnKAg67Cp67KVIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNmYzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLgu4Dguq3igIvguoHgurDigIvguqrgurLgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IuC7gOC6m+C6teC6lOKAi+C6iOC6suC6gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4i4Lqa4Lqx4LqZ4LqX4Lq24LqB4LuE4Lqb4LqX4Lq14LuIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IuC6quC7ieC6suC6h+C7guC6n+C6meC7gOC6lOC6tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLguqHgurjguqHguqHguq3guofgu4Hguprguprguorgu4jguq3guociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i4Lqh4Lq44Lqh4Lqh4Lqt4LqH4LuB4Lqa4Lqa4Lql4Lqy4LqN4LqK4Lq34LuIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IuC6ruC6veC6h+C6peC6s+C6lOC6seC6muC6leC6suC6oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IuC6iuC6reC6geC6q+C6siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i4LqB4Lqy4LqZ4LqV4Lqx4LuJ4LqH4LqE4LuI4LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i4LuA4Lqb4Lq14LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IuC6muC6seC6meC6l+C6tuC6gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i4LuB4Lqa4LuI4LqH4Lqb4Lqx4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i4Lql4Lq24LqaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+IuC7gOC6peC6t+C6reC6geC7geC6peC7ieC6pyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IOC6peC6suC6jeC6geC6suC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLgupXgurLguqHguorgurfgu4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLgupXgurLguqHguqfgurHgupngupfgurXgupfgurXgu4jgu4HguoHgu4ngu4TguoIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i4LqV4Lqy4Lqh4LqC4Lqw4Luc4Lqy4LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i4Lqq4Lqw4LuB4LqU4LqHIHJvb3RzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IuC7gOC6iuC6t+C7iOC6reC6hyByb290cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i4LqB4Lqy4LqZ4Lqa4Lqx4LqZ4LqX4Lq24LqB4LuA4Lqt4LqB4Lqw4Lqq4Lqy4LqZ4Lql4Lq74LuJ4Lqh4LuA4Lqr4Lql4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IuC6geC6suC6meKAi+C6quC7ieC6suC6h+KAi+C7guC6n+C6meKAi+C7gOC6lOC6teC6peC6u+C7ieC6oeC7gOC6q+C6vOC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IuC6geC6suC6meC6iuC6reC6geC6q+C6suC7gOC6reC6geC6sOC6quC6suC6meC6peC6u+C7ieC6oeC7gOC6q+C6vOC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IuC6q+C6suC6geC7jeC7g+C6iuC7iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+IuC6n+C6o+C6tSA8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiLguprgu43guqXgurTguoHgurLgupnguprgu4jguq3gupnguojgurHgupTgu4DguoHgurHguprguoLgu43gu4nguqHgurngupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4i4LqX4Lqy4LqH4Lql4Lqx4LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLguq3gurjgupvgurDguoHguq3gupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLgu4Hguq3gurHguprguq/guq3gurfgu4jgupngu4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiLguqrgurDgu4HgupTguofguq3gurjgupvgurDguoHguq3gupnguoLgurHgu4ngupnguqrgurnguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLguqrgurDgu4HgupTguofguoLgurDgu5zgurLgupTgu4Tgup/guqXgu4wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IuC6quC6sOC7geC6lOC6h+C6guC6sOC7nOC6suC6lOC6reC6uOC6m+C6sOC6geC6reC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IuC6muC7jeC7iOC6oeC6teC6peC6suC6jeC6geC6suC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IuC6muC7jeC7iOC6quC6suC6oeC6lOC6suC7gOC6m+C6teC6lOC7hOC6n+C6peC7jOC7hOC6lOC7iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4i4Lqa4LuN4LuI4Lqq4Lqy4Lqh4Lqy4LqU4Lql4Lq24Lqa4Lqa4Lqy4LqH4LuA4Lqt4LqB4Lqw4Lqq4Lqy4LqZ4LuE4LqU4LuJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IuC7geC6muC7iOC6h+C6m+C6seC6meC6nOC7iOC6suC6mSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg2MWI5OQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9rdW1lbnRhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iQXRpZGFyeXRpIGnFoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iScWhc2F1Z290aSDEryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJLdXJ0aSBhcGxhbmvEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJUaW5rbGVsaW8gcm9kaW55cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJTxIVyYcWhbyByb2RpbnlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IlLFq8WhaXVvdGkgcGFnYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJJZcWha290aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iTnVzdGF0eW1haSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IkF0aWRhcnl0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJJxaFzYXVnb3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJCZW5kcmludGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJJxaF0cmludGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iUGFzaXJpbmt0YTogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJQYWdhbCBwYXZhZGluaW3EhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IlBhZ2FsIGtlaXRpbW8gZGF0xIUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iUGFnYWwgZHlkxK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJSb2R5dGkgxaFha25pcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJTbMSXcHRpIMWhYWtuaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+Ik5lcGF2eWtvIGnFoXNhdWdvdGkgZG9rdW1lbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+Ik5lcGF2eWtvIHN1a3VydGkgYXBsYW5rbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+Ik5lcGF2eWtvIHBhdGVpa3RpIGRva3VtZW50xbMgdcW+a2xhdXPFsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+Ik5hdWphdXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iTGFpc3ZvcyB2aWV0b3M6IDx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlNhdWd5a2xvcyBwYXNsYXVnb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iU3BhcnRpZWppIGtsYXZpxaFhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4ixK5yZW5naW5pYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJEYXVnaWF1IHByb2dyYW3FsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IlJvZHl0aSBpxaFwbMSXc3Rpbml1cyDEr3Jlbmdpbml1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IlJvZHl0aSBmYWlsbyBkeWTEryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iUm9keXRpIMSvcmVuZ2luaW8gZHlkxK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJOxJdyYSBlbGVtZW50xbMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJOZXBhdnlrc3RhIGF0aWRhcnl0aSBmYWlsbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iTmVwYXZ5a28gacWhdHJpbnRpIGthaSBrdXJpxbMgZG9rdW1lbnTFsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJCZW5kcmludGkgbmF1ZG9qYW50Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTFhNTlmZTBkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2t1bWVudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IkF0dsSTcsWhYW5hIG5vOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iU2FnbGFixIHFoWFuYToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iSXp2ZWlkb3QgbWFwaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJSZcW+xKNpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJTYXJha3N0cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJLxIFydG90IHDEk2MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJNZWtsxJN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJJZXN0YXTEq2p1bWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJBdHbEk3J0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlNhZ2xhYsSBdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iS29wxKtnb3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJEesSTc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iQXRsYXPEq3RzOiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlDEk2Mgbm9zYXVrdW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iUMSTYyBwxIFydmVpZG/FoWFuYXMgZGF0dW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IlDEk2MgbGllbHVtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IlLEgWTEq3Qgc2FrbmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IlNsxJNwdCBzYWtuZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+Ik5laXpkZXbEgXMgc2FnbGFixIF0IGRva3VtZW50dS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iTmVpemRldsSBcyBpenZlaWRvdCBtYXBpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+Ik5laXpkZXbEgXMgYXRyYXN0IHZhaWPEgWp1bcSBIG5vcsSBZMSrdG9zIGRva3VtZW50dXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iUMSTZMSTamllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iQnLEq3ZhIHZpZXRhOiA8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJHbGFixIHFoWFuYXMgcGFrYWxwb2p1bWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iU2HEq3NuZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IkllcsSrY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iVmFpcsSBayBsaWV0b3TFhnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJBdHTEk2xvdCBwYXBpbGR1IGllcsSrY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iQXR0xJNsb3QgZmFpbGEgbGllbHVtdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iQXR0xJNsb3QgaWVyxKtjZXMgaXptxJNydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+Ik5hdiB2aWVudW11Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iTmV2YXIgYXR2xJNydCBmYWlsdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+Ik5ldmFyIGR6xJNzdCBkYcW+dXMgZG9rdW1lbnR1cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iS29wxKtnb3QsIGl6bWFudG9qb3QiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjOWZjZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+ItCU0L7QutGD0LzQtdC90YLSr9Kv0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+ItCd0Y3RjdGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLQpdCw0LTQs9Cw0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+ItCk0L7Qu9C00LXRgCDSr9Kv0YHQs9GN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4i0K3Qs9C90q/Sr9C70LYg0YXQsNGA0LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLQltCw0LPRgdCw0LDQtiDRhdCw0YDQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+ItCt0YDRjdC80LHRjdC70Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+ItCl0LDQudGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLQotC+0YXQuNGA0LPQvtC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i0J3RjdGN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i0KXQsNC00LPQsNC70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i0KXRg9Cy0LDQsNC70YbQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i0KPRgdGC0LPQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4g0YHQvtC90LPQvtCz0LTRgdC+0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4i0J3RjdGA0Y3RjdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i06jTqdGA0YfQu9Op0LPQtNGB06nQvSDQvtCz0L3QvtC+0LPQvtC+0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i0KXRjdC80LbRjdGN0LPRjdGN0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLQr9C30LPRg9GD0YDRi9CzINGF0LDRgNGD0YPQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i0K/Qt9Cz0YPRg9GA0YvQsyDQvdGD0YPRhtC70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i0JTQvtC60YPQvNC10L3RgtGL0LMg0YXQsNC00LPQsNC70LYg0YfQsNC00YHQsNC90LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+ItCk0L7Qu9C00LXRgCDSr9Kv0YHQs9GN0LYg0YfQsNC00YHQsNC90LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i0JTQvtC60YPQvNC10L3RgtGL0L0g0YXSr9GB0Y3Qu9GCINCz0LDRgNCz0LDQtiDRh9Cw0LTRgdCw0L3Qs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiLQodCw0Y/RhdC90YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4g0YfTqdC706nTqdGC0Y3QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+ItCh0LDQvdCz0LjQudC9INKv0LnQu9GH0LjQu9Cz0Y3RjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLQotC+0LLRh9C70L7QuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4i0KLTqdGF06nTqdGA06nQvNC20q/Sr9C0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4i06jTqdGAINCw0L/Qvy3Rg9GD0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiLQlNGN0LLRiNC40LvRgtGN0YIg0YLTqdGF06nTqdGA06nQvNC20q/Sr9C00LjQudCzINGF0LDRgNGD0YPQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLQpNCw0LnQu9GL0L0g0YXRjdC80LbRjdGN0LMg0YXQsNGA0YPRg9C70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i0KLTqdGF06nTqdGA06nQvNC20LjQudC9INGF0Y3QvNC20Y3RjdCzINGF0LDRgNGD0YPQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLQpdC+0L7RgdC+0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLQpNCw0LnQu9GL0LMg0L3RjdGN0YUg0LHQvtC70L7QvNC20LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLQl9Cw0YDQuNC8INC00L7QutGD0LzQtdC90YLRg9GD0LTRi9CzINGD0YHRgtCz0LDRhSDQsdC+0LvQvtC80LbQs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i0JTQsNGA0LDQsNGF0LDQsNGAINC00LDQvNC20YPRg9C70LDQvSDRhdGD0LLQsNCw0LvRhtCw0YUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwOWM1NwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRva3VtZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IkJ1a2EgZGFyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iU2ltcGFuIGtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IkJ1YXQgZm9sZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlBhcGFyYW4gZ3JpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJQYXBhcmFuIHNlbmFyYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iSXNpaCBtZW5naWt1dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IkNhcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IlRldGFwYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJCdWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlNpbXBhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iS29uZ3NpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iUGFkYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiBkaXBpbGloIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+Ik1lbmdpa3V0IG5hbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJEaXViYWggc3VhaSBtZW5naWt1dCB0YXJpa2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iTWVuZ2lrdXQgc2FpeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IlR1bmp1a2thbiBha2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IlNlbWJ1bnlpa2FuIGFrYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IkdhZ2FsIG1lbnlpbXBhbiBkb2t1bWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IkdhZ2FsIG1lbWJ1YXQgZm9sZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iR2FnYWwgbWVuYW55YWthbiBkb2t1bWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iVGVyYmFoYXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGtvc29uZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IlBlcmtoaWRtYXRhbiBzdG9yYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iUGludGFzYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IlBlcmFudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJMZWJpaCBiYW55YWsgYXBsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iUGFwYXJrYW4gcGVyYW50aSB0ZXJwZXJpbmNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iUGFwYXJrYW4gc2FpeiBmYWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJQYXBhcmthbiBzYWl6IHBlcmFudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJUaWFkYSBpdGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iVGlkYWsgZGFwYXQgbWVtYnVrYSBmYWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJUaWRhayBkYXBhdCBtZW1hZGFtIGJlYmVyYXBhIGRva3VtZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iS29uZ3NpIG1lbGFsdWkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MzFiZDgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRva3VtZW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IsOFcG5lIGZyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iTGFncmUgaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJPcHByZXR0IGVuIG1hcHBlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlJ1dGVuZXR0dmlzbmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJMaXN0ZXZpc25pbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iU29ydMOpciBldHRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IlPDuGsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IklubnN0aWxsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLDhXBuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJMYWdyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iRGVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iU2xldHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiB2YWxndCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJFdHRlciBuYXZuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iwqtFdHRlciBkYXRvwrsgZW5kcmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IkV0dGVyIHN0w7hycmVsc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJWaXMgcsO4dHRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJTa2p1bCByw7h0dGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJLdW5uZSBpa2tlIGxhZ3JlIGRva3VtZW50ZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iS3VubmUgaWtrZSBvcHByZXR0ZSBtYXBwZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJLdW5uZSBpa2tlIHVuZGVyc8O4a2UgZG9rdW1lbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IlNpc3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGdyYXRpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IkxhZ3JpbmdzdGplbmVzdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IlNuYXJ2ZWllciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iRW5oZXRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IkZsZXJlIGFwcGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iVmlzIGF2YW5zZXJ0ZSBlbmhldGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iVmlzIGZpbHN0w7hycmVsc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IlZpcyBlbmhldHNzdMO4cnJlbHNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iSW5nZW4gZWxlbWVudGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iS2FuIGlra2Ugw6VwbmUgZmlsZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IkVua2VsdGUgZG9rdW1lbnRlciBrdW5uZSBpa2tlIHNsZXR0ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iRGVsIHZpYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjYwNmRmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i4KSV4KS+4KSX4KSc4KS+4KSk4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLgpK/gpLjgpKzgpL7gpJ8g4KSW4KWL4KSy4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLgpK/gpLjgpK7gpL4g4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLgpKvgpYvgpLLgpY3gpKHgpLAg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLgpJfgpY3gpLDgpL/gpKEg4KSm4KWD4KS24KWN4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IuCkuOClguCkmuClgCDgpKbgpYPgpLbgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i4KSv4KS44KSm4KWN4KS14KS+4KSw4KS+IOCkleCljeCksOCkruCkteCkpuCljeCkmCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IuCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IuCkluCli+CksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i4KSu4KWH4KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4g4KSa4KSv4KSoIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLgpKjgpL7gpK4g4KSF4KSo4KWB4KS44KS+4KSwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i4KSq4KSw4KS/4KSu4KS+4KSw4KWN4KSc4KS/4KSkIOCkruCkv+CkpOCkvyDgpIXgpKjgpYHgpLjgpL7gpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i4KSG4KSV4KS+4KSwIOCkheCkqOClgeCkuOCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IuCkruClguCksuCkueCksOClgiDgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i4KSu4KWC4KSy4KS54KSw4KWCIOCksuClgeCkleCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i4KSV4KS+4KSX4KSc4KS+4KSkIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpJfgpLDgpY3gpKgg4KS14KS/4KSr4KSyIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IuCkueCkvuCksuCliOCkleCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiDgpJbgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igcm9vdF90eXBlX3NlcnZpY2UgKDIxNzg4NTQ4OTQ0MTY3NzU0MDkpIC0tPgorICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4i4KS44KSw4KWN4KSf4KSV4KSf4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLgpIngpKrgpJXgpLDgpKPgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLgpKXgpKog4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4i4KSJ4KSo4KWN4KSo4KSkIOCkieCkquCkleCksOCko+CkueCksOClgiDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4i4KSr4KS+4KSH4KSyIOCkhuCkleCkvuCksCDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLgpIngpKrgpJXgpLDgpKMg4KSG4KSV4KS+4KSwIOCkquCljeCksOCkpuCksOCljeCktuCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLgpJXgpYHgpKjgpYgg4KS14KS44KWN4KSk4KWBIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IuCkq+CkvuCkh+CksiDgpJbgpYvgpLLgpY3gpKgg4KS44KSV4KWN4KSm4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLgpJXgpYfgpLngpYAg4KSV4KS+4KSX4KSc4KS+4KSk4KS54KSw4KWCIOCkruClh+Ckn+CljeCkqCDgpIXgpLjgpK7gpLDgpY3gpKUg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IuCkruCkvuCkp+CljeCkr+CkruCkrOCkvuCknyDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODg2MmU4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2N1bWVudGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJPcGVuZW4gdmFudWl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJPcHNsYWFuIGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+Ik1hcCBtYWtlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJSYXN0ZXJ3ZWVyZ2F2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJMaWpzdHdlZXJnYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IlNvcnRlcmVuIG9wIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iWm9la2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJJbnN0ZWxsaW5nZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJPcGVuZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iT3BzbGFhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iRGVsZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJWZXJ3aWpkZXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IGdlc2VsZWN0ZWVyZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJPcCBuYWFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iT3AgYWFucGFzc2luZ3NkYXR1bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJPcCBncm9vdHRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iUm9vdHMgd2VlcmdldmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IlJvb3RzIHZlcmJlcmdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iS2FuIGRvY3VtZW50IG5pZXQgb3BzbGFhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJLYW4gbWFwIG5pZXQgbWFrZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJLYW4gZ2VlbiBxdWVyeVwncyB2b29yIGRvY3VtZW50ZW4gdmVyemVuZGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iUmVjZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IHZyaWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJPcHNsYWdzZXJ2aWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJTbmVsdG9ldHNlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iQXBwYXJhdGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iTWVlciBhcHBzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iR2VhdmFuY2VlcmRlIGFwcGFyYXRlbiB3ZWVyZ2V2ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJCZXN0YW5kc2dyb290dGUgd2VlcmdldmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJBcHBhcmFhdGdyb290dGUgd2VlcmdldmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iR2VlbiBpdGVtcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkthbiBiZXN0YW5kIG5pZXQgb3BlbmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJLYW4gYmVwYWFsZGUgZG9jdW1lbnRlbiBuaWV0IHZlcndpamRlcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IkRlbGVuIHZpYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlNTU4MgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9rdW1lbnR5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJPdHfDs3J6IHoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IlphcGlzeiB3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IlV0d8OzcnogZm9sZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IldpZG9rIHNpYXRraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJXaWRvayBsaXN0eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJTb3J0dWogd2VkxYJ1ZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IlN6dWthaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iVXN0YXdpZW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+Ik90d8OzcnoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iWmFwaXN6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJVZG9zdMSZcG5paiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IlVzdcWEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ild5YnJhbm86IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iV2VkxYJ1ZyBuYXp3eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IldlZMWCdWcgZGF0eSBlZHljamkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iV2VkxYJ1ZyByb3ptaWFydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IlBva2HFvCBlbGVtZW50eSBnxYLDs3duZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJVa3J5aiBlbGVtZW50eSBnxYLDs3duZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iTmllIHVkYcWCbyBzacSZIHphcGlzYcSHIGRva3VtZW50dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJOaWUgdWRhxYJvIHNpxJkgdXR3b3J6ecSHIGZvbGRlcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJOaWUgdWRhxYJvIHNpxJkgcG9icmHEhyBsaXN0eSBkb2t1bWVudMOzdyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+Ik9zdGF0bmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IHdvbG5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iVXPFgnVnaSBwYW1pxJljaSBtYXNvd2VqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IlNrcsOzdHkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IlVyesSFZHplbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iV2nEmWNlaiBhcGxpa2FjamkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJXecWbd2lldGwgdXJ6xIVkemVuaWEgemFhd2Fuc293YW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9maWxlX3NpemUiIG1zZ2lkPSIyODI2ODc5MzE1NzQzOTYxNDU5Ij4iV3nFm3dpZXRsIHJvem1pYXIgcGxpa3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+Ild5xZt3aWV0bCByb3ptaWFyIHVyesSFZHplbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iQnJhayBlbGVtZW50w7N3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iTmllIG1vxbxuYSBvdHdvcnp5xIcgcGxpa3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+Ik5pZSBtb8W8bmEgdXN1bsSFxIcgbmlla3TDs3J5Y2ggZG9rdW1lbnTDs3ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iVWRvc3TEmXBuaWogcHJ6ZXoiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxYmE4YgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRvY3VtZW50b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IkFicmlyIGRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJHdWFyZGFyIGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IkNyaWFyIHBhc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlZpc3RhIGRlIGdyZWxoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJWaXN0YSBkZSBsaXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJPcmRlbmFyIHBvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IlBlc3F1aXNhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iRGVmaW5pw6fDtWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iQWJyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iR3VhcmRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iUGFydGlsaGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iRWxpbWluYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiBzZWxlY2lvbmFkbyhzKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJQb3Igbm9tZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IlBvciBkYXRhIGRlIG1vZGlmaWNhw6fDo28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iUG9yIHRhbWFuaG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJNb3N0cmFyIHJhw616ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iT2N1bHRhciByYcOtemVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJGYWxoYSBhbyBndWFyZGFyIG8gZG9jdW1lbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IkZhbGhhIGFvIGNyaWFyIGEgcGFzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJGYWxoYSBhbyBjb25zdWx0YXIgb3MgZG9jdW1lbnRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IlJlY2VudGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGVzcGHDp28gbGl2cmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJTZXJ2LiBkZSBhcm1hemVuYW1lbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+IkF0YWxob3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IkRpc3Bvc2l0aXZvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+Ik1haXMgYXBsaWNhw6fDtWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iQXByZXNlbnRhciBkaXNwb3NpdGl2b3MgYXZhbsOnYWRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IkFwcmVzZW50YXIgdGFtYW5obyBkbyBmaWNoZWlybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iQXByZXNlbnRhciB0YW1hbmhvIGRvIGRpc3Bvc2l0aXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iU2VtIGl0ZW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iTsOjbyDDqSBwb3Nzw612ZWwgYWJyaXIgbyBmaWNoZWlybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iTsOjbyDDqSBwb3Nzw612ZWwgZWxpbWluYXIgYWxndW5zIGRvY3VtZW50b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iUGFydGlsaGFyIGF0cmF2w6lzIGRlIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGZjYWY4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2N1bWVudG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJBYnJpciBkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iU2FsdmFyIGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IkNyaWFyIHBhc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlZpc3VhbGl6YcOnw6NvIGVtIGdyYWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlZpc3VhbGl6YcOnw6NvIGVtIGxpc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IkNsYXNzaWZpY2FyIHBvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IlBlc3F1aXNhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iQ29uZmlndXJhw6fDtWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iQWJyaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iU2FsdmFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJDb21wYXJ0aWxoYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJFeGNsdWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gc2VsZWNpb25hZG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlBvciBub21lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iUG9yIGRhdGEgZGUgbW9kaWZpY2HDp8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJQb3IgdGFtYW5obyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+Ik1vc3RyYXIgcmHDrXplcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJPY3VsdGFyIHJhw616ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IkZhbGhhIGFvIHNhbHZhciBvIGRvY3VtZW50byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJGYWxoYSBhbyBjcmlhciBhIHBhc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iRmFsaGEgYW8gY29uc3VsdGFyIGRvY3VtZW50b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJSZWNlbnRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBsaXZyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJTZXJ2acOnb3MgZGUgYXJtYXplbmFtZW50byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJBdGFsaG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJEaXNwb3NpdGl2b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJNYWlzIGFwbGljYXRpdm9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iTW9zdHJhciBkaXNwb3NpdGl2b3MgYXZhbsOnYWRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+Ik1vc3RyYXIgdGFtYW5obyBkbyBhcnF1aXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJNb3N0cmFyIHRhbWFuaG8gZG8gZGlzcG9zaXRpdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJOZW5odW0gaXRlbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+Ik7Do28gw6kgcG9zc8OtdmVsIGFicmlyIG8gYXJxdWl2byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iTsOjbyBmb2kgcG9zc8OtdmVsIGV4Y2x1aXIgYWxndW5zIGRvY3VtZW50b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iQ29tcGFydGlsaGFyIHZpYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkNDRjOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9jdW1lbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJEZXNjaGlkZcibaSBkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IlNhbHZhyJtpIMOubiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJDcmVhyJtpIHVuIGRvc2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IkFmaciZYXJlIHRpcCBncmlsxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iQWZpyJlhcmUgdGlwIGxpc3TEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJTb3J0YcibaSBkdXDEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IkPEg3V0YcibaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iU2V0xINyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IkRlc2NoaWRlyJtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlNhbHZhyJtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJEaXN0cmlidWnIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLImHRlcmdlyJtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gc2VsZWN0YXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IkR1cMSDIG51bWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJEdXDEgyBkYXRhIG1vZGlmaWPEg3JpaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJEdXDEgyBkaW1lbnNpdW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iQWZpyJlhyJtpIGRpcmVjdG9hcmVsZSByxINkxINjaW7EgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJBc2N1bmRlyJtpIGRpcmVjdG9hcmVsZSByxINkxINjaW7EgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iU2FsdmFyZWEgZG9jdW1lbnR1bHVpIG51IGEgcmV1yJlpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJFcm9hcmUgbGEgY3JlYXJlYSBkb3NhcnVsdWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJJbnRlcm9nYXJlYSByZWZlcml0b2FyZSBsYSBkb2N1bWVudGUgbnUgYSByZXXImWl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iUmVjZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBzcGHIm2l1IGxpYmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iU2VydmljaWkgZGUgc3RvY2FyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJDb21lbnppIHJhcGlkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iRGlzcG96aXRpdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJBbHRlIGFwbGljYcibaWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJBZmnImWHIm2kgZGlzcG96aXRpdmUgYXZhbnNhdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJBZmnImWHIm2kgZGltZW5zaXVuaWxlIGZpyJlpZXJlbG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJBZmnImWHIm2kgY2FwYWNpdGF0ZWEgZGUgc3RvY2FyZSBhIGRpc3Bveml0aXZlbG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iTnUgZXhpc3TEgyBlbGVtZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkZpyJlpZXJ1bCBudSBwb2F0ZSBmaSBkZXNjaGlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJVbmVsZSBkb2N1bWVudGUgbnUgYXUgcHV0dXQgZmkgyJl0ZXJzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJEaXN0cmlidWnIm2kgcHJpbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVmZDcwZTAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+ItCU0L7QutGD0LzQtdC90YLRiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i0J7RgtC60YDRi9GC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+ItCh0L7RhdGA0LDQvdC40YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLQndC+0LLQsNGPINC/0LDQv9C60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4i0KLQsNCx0LvQuNGG0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i0KHQv9C40YHQvtC6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+ItCh0L7RgNGC0LjRgNC+0LLQsNGC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLQn9C+0LjRgdC6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLQndCw0YHRgtGA0L7QudC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLQntGC0LrRgNGL0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLQodC+0YXRgNCw0L3QuNGC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+ItCf0L7QtNC10LvQuNGC0YzRgdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i0KPQtNCw0LvQuNGC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4i0JLRi9Cx0YDQsNC90L46IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4i0J/QviDQvdCw0LfQstCw0L3QuNGOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4i0J/QviDQtNCw0YLQtSDQuNC30LzQtdC90LXQvdC40Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i0J/QviDRgNCw0LfQvNC10YDRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+ItCf0L7QutCw0LfQsNGC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i0KHQutGA0YvRgtGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLQndC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDQtNC+0LrRg9C80LXQvdGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0L/QsNC/0LrRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC/0YDQsNCy0LjRgtGMINC30LDQv9GA0L7RgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+ItCd0LXQtNCw0LLQvdC40LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiLQodCy0L7QsdC+0LTQvdC+IDx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+ItCh0LvRg9C20LHRiyDRhdGA0LDQvdC10L3QuNGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+ItCv0YDQu9GL0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4i0KPRgdGC0YDQvtC50YHRgtCy0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLQlNGA0YPQs9C40LUg0L/RgNC40LvQvtC20LXQvdC40Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiLQn9C+0LrQsNC30LDRgtGMINC00YDRg9Cz0LjQtSDRg9GB0YLRgNC+0LnRgdGC0LLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+ItCf0L7QutCw0LfQsNGC0Ywg0YDQsNC30LzQtdGAINGE0LDQudC70LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+ItCf0L7QutCw0LfQsNGC0Ywg0YDQsNC30LzQtdGAINGD0YHRgtGA0L7QudGB0YLQstCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4i0J3QuNGH0LXQs9C+INC90LXRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0YTQsNC50LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0L3QtdC60L7RgtC+0YDRi9C1INC00L7QutGD0LzQtdC90YLRiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLQn9C+0LTQtdC70LjRgtGM0YHRjyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjYzYjgyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i4La94Lea4Lab4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLgt4Dgt5Lgt4Dgt5jgtq0g4LeA4Lax4LeK4Lax4LeaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLgt4Pgt5Tgtrvgtprgt5LgtrHgt4rgtrHgt5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i4LeG4Led4La94LeK4Lap4La74La64Laa4LeKIOC3g+C3j+C2r+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLgtqLgt4/gtr0g4La04LeZ4Lax4LeU4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IuC2veC3kOC2uuC3kuC3g+C3iuC2reC3lCDgtrTgt5ngtrHgt5TgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i4LaF4Lax4LeU4La04LeS4LeF4LeS4LeA4LeZ4La94LanIOC3g+C2muC3g+C3jyDgtofgtq3gt4rgtq3gt5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLgt4Pgt5ngt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IuC3g+C3kOC2muC3g+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IuC3gOC3kuC3gOC3mOC2rSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i4LeD4LeU4La74Laa4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLgtrbgt5ngtq/gt4/gtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiDgtprgt4og4Lat4Led4La74LeP4Lac4Lax4LeK4Lax4LePIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLgtrHgtrjgt5LgtrHgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLgt4Dgt5ngtrHgt4Pgt4og4Laa4La74LaxIOC2veC2ryDgtq/gt5LgtrHgtrrgt5ngtrHgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i4La04LeK4oCN4La74La44LeP4Lar4La6IOC2uOC2nOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IuC2uOC3lOC2veC3iiDgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i4La44LeU4La94LeKIOC3g+C2n+C3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i4La94Lea4Lab4Lax4La6IOC3g+C3lOC2u+C3kOC2muC3k+C2uOC2pyDgtoXgtrTgt5zgt4Tgt5zgt4Pgtq3gt4og4LeA4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4i4La44LeR4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IOC2ieC2reC3kuC2u+C3kuC2uuC3kiI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciByb290X3R5cGVfc2VydmljZSAoMjE3ODg1NDg5NDQxNjc3NTQwOSkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLgtprgt5ngtqfgt5LgtrjgtoIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IuC2i+C2tOC3j+C2guC2nCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IuC2reC3gOC2reC3iiDgtrrgt5ngtq/gt5Tgtrjgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiLgtovgt4Pgt4Pgt4og4LaL4La04LeP4LaC4LacIOC2r+C2u+C3iuC3geC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLgtpzgt5zgtrHgt5Qg4La04LeK4oCN4La74La44LeP4Lar4La6IOC2r+C2u+C3iuC3geC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IuC2i+C2tOC3j+C2guC2nCDgtrTgt4rigI3gtrvgtrjgt4/gtqvgtrog4Lav4La74LeK4LeB4Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IuC2heC2uuC3kuC2reC2uCDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLgtpzgt5zgtrHgt5Tgt4Ag4LeA4LeS4LeA4LeY4LatIOC2muC3hSDgtrHgt5zgt4Tgt5DgtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IuC3g+C2uOC3hOC2uyDgtr3gt5rgtpvgtrEg4La44LeQ4Laa4LeT4La44LanIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i4LeE4La74LeE4LePIOC2tuC3meC2r+C3j+C2nOC2seC3iuC2sSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5NmIxYQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9rdW1lbnR5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJPdHZvcmnFpSB6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJVbG/FvmnFpSBkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJWeXR2b3JpxaUgcHJpZcSNaW5vayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJab2JyYXplbmllIG1yaWXFvmt5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlpvYnJhemVuaWUgem96bmFtdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJab3JhZGnFpSBwb2TEvmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJIxL5hZGHFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iTmFzdGF2ZW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+Ik90dm9yacWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlVsb8W+acWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJaZGllxL5hxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJPZHN0csOhbmnFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiJWeWJyYXTDqTogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJQb2TEvmEgbsOhenZ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iUG9kxL5hIGTDoXR1bXUgem1lbnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iUG9kxL5hIHZlxL5rb3N0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IlpvYnJhemnFpSBrb3JlbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iU2tyecWlIGtvcmVuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iRG9rdW1lbnQgc2EgbmVwb2RhcmlsbyB1bG/FvmnFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJQcmllxI1pbm9rIHNhIG5lcG9kYXJpbG8gdnl0dm9yacWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4iWm96bmFtIGRva3VtZW50b3Ygc2EgbmVwb2RhcmlsbyBuYcSNw610YcWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iTmVkw6F2bmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiJWb8S+bsOpOiA8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJTbHXFvmJ5IMO6bG/Fvmlza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iU2tyYXRreSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iWmFyaWFkZW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IsSOYWzFoWllIGFwbGlrw6FjaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJab2JyYXppxaUgcm96xaHDrXJlbsOpIHphcmlhZGVuaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJab2JyYXppxaUgdmXEvmtvc8WlIHPDumJvcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IlpvYnJhemnFpSB2ZcS+a29zxaUgemFyaWFkZW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IsW9aWFkbmUgcG9sb8W+a3kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJTw7pib3Igc2EgbmVwb2RhcmlsbyBvdHZvcmnFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iTmlla3RvcsOpIGRva3VtZW50eSBzYSBuZXBvZGFyaWxvIG9kc3Ryw6FuacWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IlpkaWXEvmHFpSBwb21vY291Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTg0YTBhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJEb2t1bWVudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Ik9kcGlyYW5qZSBpeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iU2hyYW5qZXZhbmplIHYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4iVXN0dmFyamFuamUgbWFwZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJNcmXFvm5pIHBvZ2xlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJQb2dsZWQgc2V6bmFtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJSYXp2cnN0aSBnbGVkZSBuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+Iklza2FuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+Ik5hc3Rhdml0dmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJPZHByaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJTaHJhbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IlNrdXBuYSByYWJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iSXpicmnFoWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4ixaB0LiBpemJyYW5paDogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJQbyBpbWVudSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IlBvIGRhdHVtdSBzcHJlbWVtYmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iUG8gdmVsaWtvc3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iUG9rYcW+aSBrb3JlbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iU2tyaWoga29yZW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJEb2t1bWVudGEgbmkgYmlsbyBtb2dvxI1lIHNocmFuaXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+Ik1hcGUgbmkgYmlsbyBtb2dvxI1lIHVzdHZhcml0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IlBvaXp2ZWRiYSB6YSBkb2t1bWVudGUgbmkgdXNwZWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iTmVkYXZubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+IlByb3N0bzogPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iU3Rvcml0dmUgc2hyYW1iZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJCbGnFvm5qaWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJOYXByYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iVmXEjSBhcGxpa2FjaWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJQcmlrYXogbmFwcmVkbmloIG5hcHJhdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IlByaWtheiB2ZWxpa29zdGkgZGF0b3Rla2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IlByaWtheiB2ZWxpa29zdGkgbmFwcmF2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+Ik5pIGVsZW1lbnRvdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkRhdG90ZWtlIG5pIG1vZ2/EjWUgb2RwcmV0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iTmVrYXRlcmloIGRva3VtZW50b3YgbmkgbW9nb8SNZSBpemJyaXNhdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iRGVsaSB6IGRydWdpbWkgcHJlayI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwYjE5NwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i0JTQvtC60YPQvNC10L3RgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLQntGC0LLQvtGA0Lgg0YHQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4i0KHQsNGH0YPQstCw0Zgg0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i0J3QsNC/0YDQsNCy0Lgg0LTQuNGA0LXQutGC0L7RgNC40ZjRg9C8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+ItCf0YDQuNC60LDQtyDQvNGA0LXQttC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+ItCf0YDQuNC60LDQtyDQu9C40YHRgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+ItCh0L7RgNGC0LjRgNCw0Zgg0L/RgNC10LzQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+ItCf0YDQtdGC0YDQsNC20LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+ItCf0L7QtNC10YjQsNCy0LDRmtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i0J7RgtCy0L7RgNC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+ItCh0LDRh9GD0LLQsNGYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLQlNC10LvQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+ItCY0LfQsdGA0LjRiNC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+ItCY0LfQsNCx0YDQsNC90L4g0ZjQtSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+ItCf0YDQtdC80LAg0LjQvNC10L3RgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+ItCf0YDQtdC80LAg0LTQsNGC0YPQvNGDINC40LfQvNC10L3QtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiLQn9GA0LXQvNCwINCy0LXQu9C40YfQuNC90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiLQn9GA0LjQutCw0LbQuCDQvtGB0L3QvtCy0L3QtSDQtdC70LXQvNC10L3RgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+ItCh0LDQutGA0LjRmCDQvtGB0L3QvtCy0L3QtSDQtdC70LXQvNC10L3RgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLQp9GD0LLQsNGa0LUg0LTQvtC60YPQvNC10L3RgtCwINC90LjRmNC1INGD0YHQv9C10LvQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiLQlNC40YDQtdC60YLQvtGA0LjRmNGD0Lwg0L3QuNGY0LUg0L3QsNC/0YDQsNCy0ZnQtdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVlcnlfZXJyb3IiIG1zZ2lkPSIxMjIyNDQ4MjYxNjYzNTAzNTAxIj4i0KHQu9Cw0ZrQtSDRg9C/0LjRgtCwINC30LAg0LTQvtC60YPQvNC10L3RgtC1INC90LjRmNC1INGD0YHQv9C10LvQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+ItCd0LXQtNCw0LLQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4i0KHQu9C+0LHQvtC00L3QviDRmNC1IDx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+ItCj0YHQu9GD0LPQtSDRgdC60LvQsNC00LjRiNGC0LXRmtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+ItCf0YDQtdGH0LjRhtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLQo9GA0LXRktCw0ZjQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+ItCI0L7RiCDQsNC/0LvQuNC60LDRhtC40ZjQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+ItCf0YDQuNC60LDQttC4INC90LDQv9GA0LXQtNC90LUg0YPRgNC10ZLQsNGY0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLQn9GA0LjQutCw0LbQuCDQstC10LvQuNGH0LjQvdGDINC00LDRgtC+0YLQtdC60LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+ItCf0YDQuNC60LDQttC4INCy0LXQu9C40YfQuNC90YMg0YPRgNC10ZLQsNGY0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLQndC10LzQsCDRgdGC0LDQstC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLQndC40ZjQtSDQvNC+0LPRg9Gb0LUg0L7RgtCy0L7RgNC40YLQuCDQtNCw0YLQvtGC0LXQutGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLQndC40ZjQtSDQvNC+0LPRg9Gb0LUg0LjQt9Cx0YDQuNGB0LDRgtC4INC90LXQutC1INC00L7QutGD0LzQtdC90YLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLQlNC10LvQuNGC0LUg0L/RgNC10LrQviI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FhNWM1MAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9rdW1lbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IsOWcHBuYSBmcsOlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iU3BhcmEgdGlsbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJTa2FwYSBtYXBwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlJ1dG7DpHRzdnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iTGlzdHZ5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IlNvcnRlcmEgZWZ0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJTw7ZrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJJbnN0w6RsbG5pbmdhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IsOWcHBuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJTcGFyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iRGVsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IlRhIGJvcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iSGFyIHZhbHQgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJFZnRlciBuYW1uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iRWZ0ZXIgw6RuZHJpbmdzZGF0dW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iRWZ0ZXIgc3RvcmxlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IlZpc2EgcsO2dHRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJEw7ZsaiByw7Z0dGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJEZXQgZ2ljayBpbnRlIGF0dCBzcGFyYSBkb2t1bWVudGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IkRldCBnaWNrIGludGUgYXR0IHNrYXBhIG1hcHBlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IkRldCBnaWNrIGludGUgYXR0IHPDtmthIGVmdGVyIGRva3VtZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iU2VuYXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBsZWRpZ3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiJMYWdyaW5nc3Rqw6Ruc3RlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJHZW52w6RnYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IkVuaGV0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJGbGVyIGFwcGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iVmlzYSBhdmFuY2VyYWRlIGVuaGV0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiJWaXNhIGZpbHN0b3JsZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IkJpbGRza8Okcm1zc3RvcmxlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IkluZ2Egb2JqZWt0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4iRGV0IGfDpXIgaW50ZSBhdHQgw7ZwcG5hIGZpbGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJEZXQgZ2ljayBpbnRlIGF0dCB0YSBib3J0IHZpc3NhIGRva3VtZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IkRlbGEgdmlhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTlmZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiJIYXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJGdW5ndWEga3V0b2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJIaWZhZGhpIGt3ZW55ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJVbmRhIGZvbGRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+Ik13b25la2FubyBncmlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJNd29uZWthbm8gb3JvZGhhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IlBhbmdhIGt3YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IlV0YWZ1dGFqaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iTWlwYW5naWxpbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IkZ1bmd1YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJIaWZhZGhpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJTaGlyaWtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iRnV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IHppbWVjaGFndWxpd2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X25hbWUiIG1zZ2lkPSI5MTgzNTYwNDY3OTE3MjU2Nzc5Ij4iS3dhIGppbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJLd2EgdGFyZWhlIHZpbGlwb3Jla2ViaXNod2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iS3dhIHVrdWJ3YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+Ik9ueWVzaGEgdXN1bGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iRmljaGEgdXN1bGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2Vycm9yIiBtc2dpZD0iNjE2NzAwOTc3ODAwMzIyMzY2NCI+IkltZXNoaW5kd2Ega3VoaWZhZGhpIGhhdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iSWxpc2hpbmR3YSBrdXVuZGEgZm9sZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJJbGlzaGluZHdhIGt1aG9qaSBoYXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9yZWNlbnQiIG1zZ2lkPSI0NDcwMDUzNzA0MzIwNTE4MTMzIj4iSGl2aSBrYXJpYnVuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBiaWxhIG1hbGlwbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+Ikh1ZHVtYSB6YSBoaWZhZGhpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3Nob3J0Y3V0IiBtc2dpZD0iMzMxODc2MDYwOTQ3MTYxODA5MyI+Ik5qaWEgemEgbWthdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IlZpZmFhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iUHJvZ3JhbXUgemFpZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJPbnllc2hhIHZpZmFhIG1haGlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+Ik9ueWVzaGEgdWt1YndhIHdhIGZhaWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJPbnllc2hhIHVrdWJ3YSB3YSBraWZhYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+Ikhha3VuYSB2aXBlbmdlZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkhhaXdlemkga3VmdW5ndWEgZmFpbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+IkltZXNoaW5kd2Ega3VmdXRhIGJhYWRoaSB5YSBoYXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IlNoaXJpa2kga3VwaXRpYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFjODgxMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i4LmA4Lit4LiB4Liq4Liy4LijIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiLguYDguJvguLTguJTguIjguLLguIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IuC4muC4seC4meC4l+C4tuC4geC5hOC4m+C4ouC4seC4hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiLguKrguKPguYnguLLguIfguYLguJ/guKXguYDguJTguK3guKPguYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4i4Lih4Li44Lih4Lih4Lit4LiH4LiV4Liy4Lij4Liy4LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IuC4oeC4uOC4oeC4oeC4reC4h+C4o+C4suC4ouC4geC4suC4oyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiLguIjguLHguJTguYDguKPguLXguKLguIfguJXguLLguKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLguITguYnguJnguKvguLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IuC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IuC5gOC4m+C4tOC4lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLguJrguLHguJnguJfguLbguIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IuC5geC4iuC4o+C5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+IuC4peC4miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiLguYDguKXguLfguK3guIHguYTguKfguYkgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLguJXguLLguKHguIrguLfguYjguK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLguJXguLLguKHguKfguLHguJnguJfguLXguYjguJfguLXguYjguJvguKPguLHguJrguYDguJvguKXguLXguYjguKLguJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i4LiV4Liy4Lih4LiC4LiZ4Liy4LiUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i4LmB4Liq4LiU4LiH4Lij4Liy4LiBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IuC4i+C5iOC4reC4meC4o+C4suC4gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i4LiB4Liy4Lij4Lia4Lix4LiZ4LiX4Li24LiB4LmA4Lit4LiB4Liq4Liy4Lij4Lil4LmJ4Lih4LmA4Lir4Lil4LinIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IuC4geC4suC4o+C4quC4o+C5ieC4suC4h+C5guC4n+C4peC5gOC4lOC4reC4o+C5jOC4peC5ieC4oeC5gOC4q+C4peC4pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IuC4geC4suC4o+C4hOC5ieC4meC4q+C4suC5gOC4reC4geC4quC4suC4o+C4peC5ieC4oeC5gOC4q+C4peC4pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IuC4peC5iOC4suC4quC4uOC4lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+IuC4p+C5iOC4suC4hyA8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiLguJrguKPguLTguIHguLLguKPguJfguLXguYjguYDguIHguYfguJrguILguYnguK3guKHguLnguKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4i4LiX4Liy4LiH4Lil4Lix4LiUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLguK3guLjguJvguIHguKPguJPguYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiLguYHguK3guJvguYDguJ7guLTguYjguKHguYDguJXguLTguKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiLguYHguKrguJTguIfguK3guLjguJvguIHguKPguJPguYzguILguLHguYnguJnguKrguLnguIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLguYHguKrguJTguIfguILguJnguLLguJTguILguK3guIfguYTguJ/guKXguYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IuC5geC4quC4lOC4h+C4guC4meC4suC4lOC4guC4reC4h+C4reC4uOC4m+C4geC4o+C4k+C5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+IuC5hOC4oeC5iOC4oeC4teC4o+C4suC4ouC4geC4suC4oyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IuC5hOC4oeC5iOC4quC4suC4oeC4suC4o+C4luC5gOC4m+C4tOC4lOC5hOC4n+C4peC5jOC5hOC4lOC5iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4i4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Lia4LmA4Lit4LiB4Liq4Liy4Lij4Lia4Liy4LiH4Lij4Liy4Lii4LiB4Liy4LijIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IuC5geC4iuC4o+C5jOC4nOC5iOC4suC4mSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBmZDhjOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iTWdhIERva3VtZW50byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iQnVrc2FuIG11bGEgc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+Ikktc2F2ZSBzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJHdW1hd2EgbmcgZm9sZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlZpZXcgbmcgZ3JpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJWaWV3IG5nIGxpc3RhaGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IlBhZy11cmktdXJpaW4gYXlvbiBzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+Ik1hZ2hhbmFwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJNZ2EgU2V0dGluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+IkJ1a3NhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJJLXNhdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IkliYWhhZ2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiJUYW5nZ2FsaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiBhbmcgcGluaWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IkF5b24gc2EgcGFuZ2FsYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJBeW9uIHNhIHBldHNhIG5nIHBhZ2JhZ28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iQXlvbiBzYSBsYWtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iSXBha2l0YSBhbmcgbWdhIHJvb3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iSXRhZ28gYW5nIG1nYSByb290Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJIaW5kaSBuYS1zYXZlIGFuZyBkb2t1bWVudG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iSGluZGkgbmFnYXdhIGFuZyBmb2xkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJIaW5kaSBuYS1xdWVyeSBhbmcgbWdhIGRva3VtZW50byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IkthbWFrYWlsYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gYW5nIGxpYnJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iTWdhIHNlcmJpc3lvIG5nIHN0b3JhZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iTWdhIFNob3J0Y3V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJNZ2EgRGV2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iSGlnaXQgcGFuZyBhcHBzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iSXBha2l0YSBhbmcgbWdhIGFkdmFuY2VkIG5hIGRldmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IklwYWtpdGEgYW5nIGxha2kgbmcgZmlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iSXBha2l0YSBhbmcgbGFraSBuZyBkZXZpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiJXYWxhbmcgbWdhIGl0ZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJIaW5kaSBtYWJ1a3NhbiBhbmcgZmlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iSGluZGkgbWF0YW5nZ2FsIGFuZyBpbGFuZyBkb2t1bWVudG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iSWJhaGFnaSBzYSBwYW1hbWFnaXRhbiBuZyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk5YTVjZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iRG9rw7xtYW5sYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IsWedXJhZGFuIGHDpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IsWedXJheWEga2F5ZGV0OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjU5NDcyODk2MDU4NDQzOTgzODkiPiJLbGFzw7ZyIG9sdcWfdHVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlRhYmxvIGfDtnLDvG7DvG3DvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiJMaXN0ZSBnw7Zyw7xuw7xtw7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iU8SxcmFsYW1hIMO2bMOnw7x0w7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiJBcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+IkF5YXJsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiJBw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iS2F5ZGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJQYXlsYcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iU2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkZDwveGxpZmY6Zz4gdGFuZSBzZcOnaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiJBZGEgZ8O2cmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJEZcSfacWfaWtsaWsgdGFyaWhpbmUgZ8O2cmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4iQm95dXRhIGfDtnJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4iS8O2a2xlcmkgZ8O2c3RlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9jbG9zZSIgbXNnaWQ9Ijc2MDI3MzQzNjg1NTIxMjMzMTgiPiJLw7ZrbGVyaSBzYWtsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iRG9rw7xtYW4ga2F5ZGVkaWxlbWVkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9lcnJvciIgbXNnaWQ9IjM3MzU2NDkxNDEzMzU0NDQyMTUiPiJLbGFzw7ZyIG9sdcWfdHVydWxhbWFkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJEb2vDvG1hbmxhciBzb3JndWxhbmFtYWTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IkVuIHNvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiBib8WfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iRGVwb2xhbWEgaGl6bWV0bGVyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiJLxLFzYXlvbGxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9kZXZpY2UiIG1zZ2lkPSI3MTIxMzQyNDc0NjUzNDgzNTM4Ij4iQ2loYXpsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfYXBwcyIgbXNnaWQ9Ijg4MzgwNjUzNjc5ODU5NDUxODkiPiJEacSfZXIgdXlndWxhbWFsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2FkdmFuY2VkX2RldmljZXMiIG1zZ2lkPSI5MDMyNTcyMzk2MDkzMDEyNzYiPiJHZWxpxZ9tacWfIGNpaGF6bGFyxLEgZ8O2c3RlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IkRvc3lhIGJveXV0dW51IGfDtnN0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2RldmljZV9zaXplIiBtc2dpZD0iMzU0MjEwNjg4MzI3ODk5NzIyMiI+IkNpaGF6IGJveXV0dW51IGfDtnN0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eSIgbXNnaWQ9Ijc4NTg4ODI4MDM3MDgxMTc1OTYiPiLDlsSfZSB5b2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJEb3N5YSBhw6fEsWxhbcSxeW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJCYXrEsSBkb2vDvG1hbmxhciBzaWxpbmVtaXlvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLFnnVudSBrdWxsYW5hcmFrIHBheWxhxZ86Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODdiNmEyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLQlNC+0LrRg9C80LXQvdGC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+ItCS0ZbQtNC60YDQuNGC0Lgg0LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+ItCX0LHQtdGA0LXQs9GC0Lgg0LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i0KHRgtCy0L7RgNC40YLQuCDQv9Cw0L/QutGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+ItCg0LXQttC40Lwg0YLQsNCx0LvQuNGG0ZYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i0KDQtdC20LjQvCDRgdC/0LjRgdC60YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i0J/QsNGA0LDQvNC10YLRgNC4INGB0L7RgNGC0YPQstCw0L3QvdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i0J/QvtGI0YPQuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i0J3QsNC70LDRiNGC0YPQstCw0L3QvdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i0JLRltC00LrRgNC40YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLQl9Cx0LXRgNC10LPRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLQn9C+0LTRltC70LjRgtC40YHRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIiBtc2dpZD0iODEzODc5OTYyMzg1MDYxNDE3NyI+ItCS0LjQtNCw0LvQuNGC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4i0JLQuNCx0YDQsNC90L4gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLQl9CwINC90LDQt9Cy0L7RjiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+ItCX0LAg0LTQsNGC0L7RjiDQt9C80ZbQvdC10L3QvdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+ItCX0LAg0YDQvtC30LzRltGA0L7QvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+ItCf0L7QutCw0LfQsNGC0Lgg0LrQvtGA0LXQvdC10LLRliDQutCw0YLQsNC70L7Qs9C4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+ItCh0YXQvtCy0LDRgtC4INC60L7RgNC10L3QtdCy0ZYg0LrQsNGC0LDQu9C+0LPQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i0J3QtSDQstC00LDQu9C+0YHRjyDQt9Cx0LXRgNC10LPRgtC4INC00L7QutGD0LzQtdC90YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4i0J/QvtC80LjQu9C60LAg0YHRgtCy0L7RgNC10L3QvdGPINC/0LDQv9C60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiLQn9C+0LzQuNC70LrQsCDQvdCw0LTRgdC40LvQsNC90L3RjyDQt9Cw0L/QuNGC0YMg0L3QsCDQtNC+0LrRg9C80LXQvdGC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiLQntGB0YLQsNC90L3RliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiDQstGW0LvRjNC90L7Qs9C+INC80ZbRgdGG0Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2VydmljZSIgbXNnaWQ9IjIxNzg4NTQ4OTQ0MTY3NzU0MDkiPiLQntC90LvQsNC50L0t0YHRhdC+0LLQuNGJ0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4i0K/RgNC70LjQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiLQn9GA0LjRgdGC0YDQvtGXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4i0IbQvdGI0ZYg0L/RgNC+0LPRgNCw0LzQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+ItCf0L7QutCw0LfQsNGC0Lgg0L/QvtC60YDQsNGJ0LXQvdGWINC/0YDQuNGB0YLRgNC+0ZciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVmX2ZpbGVfc2l6ZSIgbXNnaWQ9IjI4MjY4NzkzMTU3NDM5NjE0NTkiPiLQn9C+0LrQsNC30LDRgtC4INGA0L7Qt9C80ZbRgCDRhNCw0LnQu9GDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiLQn9C+0LrQsNC30LDRgtC4INGA0L7Qt9C80ZbRgCDQv9GA0LjRgdGC0YDQvtGOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4i0J3QtdC80LDRlCDQtdC70LXQvNC10L3RgtGW0LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiLQndC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0Lgg0YTQsNC50LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+ItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLQuNC00LDQu9C40YLQuCDQtNC10Y/QutGWINC00L7QutGD0LzQtdC90YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiLQndCw0LTRltGB0LvQsNGC0Lgg0YfQtdGA0LXQtyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlMjlmYQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iVMOgaSBsaeG7h3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Ik3hu58gdOG7qyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iTMawdSB2w6BvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IlThuqFvIHRoxrAgbeG7pWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2dyaWQiIG1zZ2lkPSI2ODc4MDIxMzM0NDk3ODM1MjU5Ij4iQ2jhur8gxJHhu5kgeGVtIGzGsOG7m2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iQ2jhur8gxJHhu5kgeGVtIGRhbmggc8OhY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4iU+G6r3AgeOG6v3AgdGhlbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IlTDrG0ga2nhur9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiJDw6BpIMSR4bq3dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+Ik3hu58iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4iTMawdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4iQ2hpYSBz4bq7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iWMOzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiLEkMOjIGNo4buNbiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlRoZW8gdMOqbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfZGF0ZSIgbXNnaWQ9IjU4NjA4MDAzMjk1NjE1MTQ0OCI+IlRoZW8gbmfDoHkgc+G7rWEgxJHhu5VpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+IlRoZW8ga8OtY2ggdGjGsOG7m2MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJIaeG7g24gdGjhu4sgZ+G7kWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4i4bqobiBn4buRYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4iS2jDtG5nIGzGsHUgdMOgaSBsaeG7h3UgxJHGsOG7o2MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iS2jDtG5nIHRo4buDIHThuqFvIHRoxrAgbeG7pWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJLaMO0bmcgdHJ1eSB24bqlbiDEkcaw4bujYyB0w6BpIGxp4buHdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IkfhuqduIMSRw6J5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+IGPDsm4gdHLhu5FuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IkThu4tjaCB24bulIGzGsHUgdHLhu68iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iTOG7kWkgdOG6r3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IlRoaeG6v3QgYuG7iyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IkPDoWMg4bupbmcgZOG7pW5nIGtow6FjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZHZhbmNlZF9kZXZpY2VzIiBtc2dpZD0iOTAzMjU3MjM5NjA5MzAxMjc2Ij4iSGnhu4NuIHRo4buLIGPDoWMgdGhp4bq/dCBi4buLIG7Dom5nIGNhbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+Ikhp4buDbiB0aOG7iyBrw61jaCB0aMaw4bubYyB04buHcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4iSGnhu4NuIHRo4buLIGvDrWNoIHRoxrDhu5tjIHRoaeG6v3QgYuG7iyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5IiBtc2dpZD0iNzg1ODg4MjgwMzcwODExNzU5NiI+Iktow7RuZyBjw7MgbeG7pWMgbsOgbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+Iktow7RuZyB0aOG7gyBt4bufIHThu4dwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiJLaMO0bmcgdGjhu4MgeMOzYSBt4buZdCBz4buRIHTDoGkgbGnhu4d1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVfdmlhIiBtc2dpZD0iODk2NjU5NDI0NjI2MTM0NDI1OSI+IkNoaWEgc+G6uyBxdWEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQyY2RhNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IuaWh+ahoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i5omT5byA5paH5Lu2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLkv53lrZjmlofku7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSI1OTQ3Mjg5NjA1ODQ0Mzk4Mzg5Ij4i5paw5bu65paH5Lu25aS5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+Iue9keagvOinhuWbviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbGlzdCIgbXNnaWQ9IjcyNzkyODU5Mzk4OTI0MTcyNzkiPiLliJfooajop4blm74iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NvcnQiIG1zZ2lkPSI3Njc3NzQwNDA3MTU4NDE0NDUyIj4i5o6S5bqP5L6d5o2uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4i5pCc57SiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLorr7nva4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X29wZW4iIG1zZ2lkPSI0MzI5MjI5NTcyNzQ5MjA5MDMiPiLmiZPlvIAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NhdmUiIG1zZ2lkPSIyMzk0NzQzMzM3Njg0NDI2MzM4Ij4i5L+d5a2YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiLliIbkuqsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSIgbXNnaWQ9IjgxMzg3OTk2MjM4NTA2MTQxNzciPiLliKDpmaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2RlX3NlbGVjdGVkX2NvdW50IiBtc2dpZD0iNDU5MTExODk0NzI1NTk0NjI1Ij4i5bey6YCJ5oupPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRkPC94bGlmZjpnPumhuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLmjInlkI3np7AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLmjInkv67mlLnml6XmnJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i5oyJ5aSn5bCPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i5pi+56S65qC555uu5b2VIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IumakOiXj+agueebruW9lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i5peg5rOV5L+d5a2Y5paH5qGjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IuaXoOazleWIm+W7uuaWh+S7tuWkuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IuaXoOazleafpeivouaWh+ahoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IuacgOi/kSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+IuWPr+eUqOepuumXtO+8mjx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IuWtmOWCqOacjeWKoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLmjbflvoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IuiuvuWkhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IuabtOWkmuW6lOeUqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IuaYvuekuumrmOe6p+iuvuWkhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IuaYvuekuuaWh+S7tuWkp+WwjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i5pi+56S66K6+5aSH5aSn5bCPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4i5peg5Lu75L2V5paH5Lu2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i5peg5rOV5omT5byA5paH5Lu2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLml6Dms5XliKDpmaTpg6jliIbmlofmoaMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i5YiG5Lqr5pa55byPIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZWQ1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLmlofku7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IumWi+WVn+iHqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4i5YSy5a2Y6IezIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IuW7uueri+izh+aWmeWkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLmoLzni4DmqqLoppYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i5riF5Zau5qqi6KaWIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IuaOkuW6j+aWueW8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IuaQnOWwiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i6Kit5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i6ZaL5ZWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IuWEsuWtmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i5YiG5LqrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i5Yiq6ZmkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+IuW3sumBuOWPliA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IOWAiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLmjInlkI3nqLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLmjInkv67mlLnml6XmnJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i5oyJ5aSn5bCPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i6aGv56S65qC555uu6YyEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IumaseiXj+agueebrumMhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i54Sh5rOV5YSy5a2Y5paH5Lu2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IueEoeazleW7uueri+izh+aWmeWkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IueEoeazleafpeipouaWh+S7tiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+Iui/keacn+eUqOmBjiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+IuWPr+eUqOepuumWk++8mjx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IuWEsuWtmOepuumWk+acjeWLmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLmjbflvpEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+Iuijnee9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IuabtOWkmuaHieeUqOeoi+W8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+Iumhr+ekuumAsumajuijnee9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+Iumhr+ekuuaqlOahiOWkp+WwjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i6aGv56S66KOd572u5aSn5bCPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4i5rKS5pyJ6aCF55uuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i54Sh5rOV6ZaL5ZWf5qqU5qGIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLnhKHms5XliKrpmaTpg6jliIbmlofku7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i5YiG5Lqr5pa55byP77yaIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OTU4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjI3ODM4NDE3NjQ2MTcyMzgzNTQiPiLmlofku7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+IumWi+WVn+W3peWFtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4i5YSy5a2Y6IezIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IuW7uueri+izh+aWmeWkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiLmoLzni4DmqqLoppYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i5riF5Zau5qqi6KaWIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IuaOkuW6j+S+neaTmiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IuaQnOWwiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i6Kit5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4i6ZaL5ZWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IuWEsuWtmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i5YWx55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4i5Yiq6ZmkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9kZV9zZWxlY3RlZF9jb3VudCIgbXNnaWQ9IjQ1OTExMTg5NDcyNTU5NDYyNSI+IuW3sumBuOWPliA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IOWAi+mgheebriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfbmFtZSIgbXNnaWQ9IjkxODM1NjA0Njc5MTcyNTY3NzkiPiLkvp3lkI3nqLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiLkvp3kv67mlLnml6XmnJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X3NpemUiIG1zZ2lkPSIzMzUwNjgxMzE5NzM1NDc0NzQxIj4i5L6d5aSn5bCPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX29wZW4iIG1zZ2lkPSI0NTQ1NDY2NTMyNDMwMjI2OTQ5Ij4i6aGv56S65qC555uu6YyEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IumaseiXj+agueebrumMhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfZXJyb3IiIG1zZ2lkPSI2MTY3MDA5Nzc4MDAzMjIzNjY0Ij4i54Sh5rOV5YSy5a2Y5paH5Lu2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3JlYXRlX2Vycm9yIiBtc2dpZD0iMzczNTY0OTE0MTMzNTQ0NDIxNSI+IueEoeazleW7uueri+izh+aWmeWkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IueEoeazleafpeipouaWh+S7tiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+IuacgOi/keS9v+eUqOmBjueahOmgheebriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfYXZhaWxhYmxlX2J5dGVzIiBtc2dpZD0iODU2ODQ1Mjg1ODYxNzAzMzI4MSI+IuWPr+eUqOepuumWk++8mjx4bGlmZjpnIGlkPSJTSVpFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zZXJ2aWNlIiBtc2dpZD0iMjE3ODg1NDg5NDQxNjc3NTQwOSI+IuWEsuWtmOepuumWk+acjeWLmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9zaG9ydGN1dCIgbXNnaWQ9IjMzMTg3NjA2MDk0NzE2MTgwOTMiPiLmjbflvpEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+Iuijnee9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+IuabtOWkmuaHieeUqOeoi+W8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+Iumhr+ekuumAsumajuijnee9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+Iumhr+ekuuaqlOahiOWkp+WwjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZGV2aWNlX3NpemUiIG1zZ2lkPSIzNTQyMTA2ODgzMjc4OTk3MjIyIj4i6aGv56S66KOd572u5aSn5bCPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4i5rKS5pyJ6aCF55uuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfbm9fYXBwbGljYXRpb24iIG1zZ2lkPSIxMzM5ODg1OTc0MDY3ODkxNjY3Ij4i54Sh5rOV6ZaL5ZWf5qqU5qGIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfZmFpbGVkX2RlbGV0ZSIgbXNnaWQ9IjIxODA2NzgwMTk0MDcyNDQwNjkiPiLnhKHms5XliKrpmaTpg6jliIbmlofku7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4i5YiG5Lqr5pa55byP77yaIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWRkMmNkZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iQW1hZG9raHVtZW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4iVnVsYSBrdXN1a2Ega3UtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiJMb25kb2xvemEga3UtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jcmVhdGVfZGlyIiBtc2dpZD0iNTk0NzI4OTYwNTg0NDM5ODM4OSI+IkRhbGEgaWZvbGRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9ncmlkIiBtc2dpZD0iNjg3ODAyMTMzNDQ5NzgzNTI1OSI+IlVrdWJ1a2Ega3dlZ3JpZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4iVWt1YnVrYSB1aGx1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+IkhsdW5nYSBuZ2UtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZWFyY2giIG1zZ2lkPSIzODE2NzEyMDg0NTAyODU2OTc0Ij4iU2VzaGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NldHRpbmdzIiBtc2dpZD0iNjAwODAzMzE0ODk0ODQyODgyMyI+Ikl6aWx1bmdpc2VsZWxvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iVnVsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiJMb25kb2xvemEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NoYXJlIiBtc2dpZD0iMzA3NTE0OTk4Mzk3OTYyODE0NiI+IllhYmVsYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iU3VzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vZGVfc2VsZWN0ZWRfY291bnQiIG1zZ2lkPSI0NTkxMTE4OTQ3MjU1OTQ2MjUiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJGQ8L3hsaWZmOmc+IG9rdWtoZXRoaXdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+Ik5nZWdhbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzb3J0X2RhdGUiIG1zZ2lkPSI1ODYwODAwMzI5NTYxNTE0NDgiPiJOZ2VkZXRoaSB5b2t1Z3VxdWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9zaXplIiBtc2dpZD0iMzM1MDY4MTMxOTczNTQ3NDc0MSI+Ik5nb3NheWl6aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRyYXdlcl9vcGVuIiBtc2dpZD0iNDU0NTQ2NjUzMjQzMDIyNjk0OSI+IkJvbmlzYSBpemltcGFuZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfY2xvc2UiIG1zZ2lkPSI3NjAyNzM0MzY4NTUyMTIzMzE4Ij4iRmlobGEgaXppbXBhbmRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiJZZWhsdWxla2lsZSB1a3Vsb25kb2xvemEgaWRva2h1bWVudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iWWVobHVsZWtpbGUgdWt1ZGFsYSBpZm9sZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWVyeV9lcnJvciIgbXNnaWQ9IjEyMjI0NDgyNjE2NjM1MDM1MDEiPiJJaGx1bGVraWxlIHVrdWJ1emEgYW1hZG9raHVtZW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfcmVjZW50IiBtc2dpZD0iNDQ3MDA1MzcwNDMyMDUxODEzMyI+Ik9rd2FrYW11dmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2F2YWlsYWJsZV9ieXRlcyIgbXNnaWQ9Ijg1Njg0NTI4NTg2MTcwMzMyODEiPiI8eGxpZmY6ZyBpZD0iU0laRSI+JTEkczwveGxpZmY6Zz4gb2todWx1bGVraWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iQW1hc2V2aXNpIHdlc2l0b3JlamkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iSXppbnFhbXVsZWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2RldmljZSIgbXNnaWQ9IjcxMjEzNDI0NzQ2NTM0ODM1MzgiPiJBbWFkaXZheWlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfdHlwZV9hcHBzIiBtc2dpZD0iODgzODA2NTM2Nzk4NTk0NTE4OSI+Ikl6aW5obGVsbyB6b2t1c2ViZW56YSBlemluaW5naSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfYWR2YW5jZWRfZGV2aWNlcyIgbXNnaWQ9IjkwMzI1NzIzOTYwOTMwMTI3NiI+IkJvbmlzYSBhbWFkaXZheWlzaSBhcGhha2VtZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZWZfZmlsZV9zaXplIiBtc2dpZD0iMjgyNjg3OTMxNTc0Mzk2MTQ1OSI+IkJvbmlzYSB1c2F5aXppIHdlZmF5ZWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kZXZpY2Vfc2l6ZSIgbXNnaWQ9IjM1NDIxMDY4ODMyNzg5OTcyMjIiPiJCb25pc2EgdXNheWl6aSB3ZWRpdmF5aXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iQXppa2hvIGl6aW50byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X25vX2FwcGxpY2F0aW9uIiBtc2dpZD0iMTMzOTg4NTk3NDA2Nzg5MTY2NyI+IkF5aWt3YXppIHVrdXZ1bGEgaWZheWVsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2ZhaWxlZF9kZWxldGUiIG1zZ2lkPSIyMTgwNjc4MDE5NDA3MjQ0MDY5Ij4iQXlpa3dhemkgdWt1c3VzYSBhbWFueWUgYW1hZG9raHVtZW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX3ZpYSIgbXNnaWQ9Ijg5NjY1OTQyNDYyNjEzNDQyNTkiPiJZYWJlbGFuYSBuZ2UtIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvSWNvblV0aWxzLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvSWNvblV0aWxzLmphdmEKaW5kZXggMWY3Mzg2Yy4uNzFmZDEwMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0ljb25VdGlscy5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9JY29uVXRpbHMuamF2YQpAQCAtMjIsNyArMjIsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgY29tLmdvb2dsZS5hbmRyb2lkLmNvbGxlY3QuTWFwczsKIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1JlY2VudHNDcmVhdGVGcmFnbWVudC5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1JlY2VudHNDcmVhdGVGcmFnbWVudC5qYXZhCmluZGV4IDA1NzY2ZjUuLjgyYzMwNDggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9SZWNlbnRzQ3JlYXRlRnJhZ21lbnQuamF2YQorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvUmVjZW50c0NyZWF0ZUZyYWdtZW50LmphdmEKQEAgLTU0LDggKzU0LDYgQEAKIAogaW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKIAotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5EYXRhSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1NhdmVGcmFnbWVudC5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1NhdmVGcmFnbWVudC5qYXZhCmluZGV4IDlkNzBjNTEuLmNlOThkYjIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9TYXZlRnJhZ21lbnQuamF2YQorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvU2F2ZUZyYWdtZW50LmphdmEKQEAgLTIzLDcgKzIzLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuRWRpdGFibGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRXYXRjaGVyOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGU4ODFkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJFa3N0ZXJuZSBiZXJnaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iSW50ZXJuZSBiZXJnaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9rdW1lbnRlIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzBmYjA2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiLhi43hjKvhi4og4Yib4Yqo4Yib4Ym7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4i4YuN4Yi14Yyj4YuKIOGIm+GKqOGIm+GJuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IuGIsOGKkOGLtuGJvSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIwYTA1NgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i2YjYrdiv2Kkg2KrYrtiy2YrZhiDYrtin2LHYrNmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLZiNit2K/YqSDYqtiu2LLZitmGINiv2KfYrtmE2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+ItmF2LPYqtmG2K/Yp9iqIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YTc5Y2E4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iWGFyaWNpIFlhZGRhxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJEYXhpbGkgeWFkZGHFnyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhNzljYTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IlhhcmljaSBZYWRkYcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iRGF4aWxpIHlhZGRhxZ8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZGNlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+ItCS0YrQvdGI0L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLQktGK0YLRgNC10YjQvdC+INGF0YDQsNC90LjQu9C40YnQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+ItCU0L7QutGD0LzQtdC90YLQuCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVlOWQ0NgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iRW1tYWdhdHplbWF0Z2UgZXh0ZXJuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iRW1tYWdhdHplbWF0Z2UgaW50ZXJuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9jdW1lbnRzIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhhOTI4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJFeHRlcm7DrSDDumxvxb5pxaF0xJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJJbnRlcm7DrSDDumxvxb5pxaF0xJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2t1bWVudHkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZWNiNjkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IkVrc3Rlcm4gbGFncmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybiBsYWdyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9rdW1lbnRlciI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE4NjM0YQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iRXh0ZXJuZXIgU3BlaWNoZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJJbnRlcm5lciBTcGVpY2hlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50ZSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhYTc5MgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4izpXOvs+Jz4TOtc+BzrnOus+Mz4IgzrHPgM6/zrjOt866zrXPhc+EzrnOus+Mz4Igz4fPjs+Bzr/PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+Is6Vz4PPic+EzrXPgc65zrrPjM+CIM6xz4DOv864zrfOus61z4XPhM65zrrPjM+CIM+Hz47Pgc6/z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiLOiM6zzrPPgc6xz4bOsSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODhlYjllCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iRXh0ZXJuYWwgU3RvcmFnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybmFsIHN0b3JhZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2N1bWVudHMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4ZWI5ZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IkV4dGVybmFsIFN0b3JhZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJJbnRlcm5hbCBzdG9yYWdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9jdW1lbnRzIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZTM4YjUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJBbG1hY2VuYW1pZW50byBleHRlcm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iQWxtYWNlbmFtaWVudG8gaW50ZXJubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRvY3VtZW50b3MiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZTM4YjUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IkFsbWFjZW5hbWllbnRvIGV4dGVybm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJBbG1hY2VuYW1pZW50byBpbnRlcm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9jdW1lbnRvcyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODI0ZTlkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iVsOkbGluZSB0YWxsZXR1c3J1dW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJTaXNlbWluZSBzYWx2ZXN0dXNydXVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9rdW1lbmRpZCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3MWZjNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i2YHYttin24wg2LDYrtuM2LHZhyDYrtin2LHYrNuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4i2K3Yp9mB2LjZh9mUINiv2KfYrtmE24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiLYp9iz2YbYp9ivIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDFmYmFhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJVbGtvaW5lbiB0YWxsZW5udXN0aWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iU2lzw6RpbmVuIHRhbGxlbm51c3RpbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2t1bWVudGl0Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZmRkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJTdG9ja2FnZSBleHRlcm5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iTcOpbW9pcmUgZGUgc3RvY2thZ2UgaW50ZXJuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRvY3VtZW50cyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmZGQ0OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iU3RvY2thZ2UgZXh0ZXJuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+Ik3DqW1vaXJlIGRlIHN0b2NrYWdlIGludGVybmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2N1bWVudHMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMjdiZDQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IuCkrOCkvuCkueCksOClgCDgpLjgpILgpJfgpY3gpLDgpLngpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLgpK7gpYvgpKzgpL7gpIfgpLIg4KS44KSC4KSX4KWN4KSw4KS54KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4i4KSm4KS44KWN4KSk4KS+4KS14KWH4KSc4KS8Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzRmOGU4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJWYW5qc2thIHBvaHJhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJVbnV0YXJuamEgcG9ocmFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50aSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3MmI0MQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iS8O8bHPFkSB0w6FyaGVseSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkJlbHPFkSB0w6FyaGVseSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50dW1vayI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzYwMTI0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i1LHWgNW/1aHWhNWr1bYg1brVodWw1bjWgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+ItWG1aXWgNaE1avVtiDVutWh1bDVuNaBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4i1ZPVodW91b/VodWp1bLVqdWl1oAiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYWNkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IlBlbnlpbXBhbmFuIEVrc3Rlcm5hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IlBlbnlpbXBhbmFuIGludGVybmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9rdW1lbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3YjVmZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iQXJjaGl2aW8gZXN0ZXJubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+Ik1lbW9yaWEgaW50ZXJuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRvY3VtZW50aSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1NTA2YQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i15DXl9eh15XXnyDXl9eZ16bXldeg15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLXkNeX16HXldefINek16DXmdee15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiLXnteh157Xm9eZ150iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OGZjYTIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IuWklumDqOOCueODiOODrOODvOOCuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuWGhemDqOOCueODiOODrOODvOOCuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IuODieOCreODpeODoeODs+ODiCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzA0ODYwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i4YOS4YOQ4YOg4YOUIOGDm+GDlOGDruGDoeGDmOGDlOGDoOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuGDqOGDmOGDk+GDkCDhg5vhg5Thg67hg6Hhg5jhg5Thg6Dhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiLhg5Phg53hg5nhg6Phg5vhg5Thg5zhg6Lhg5Thg5Hhg5giPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNmNzZkNAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IuGep+GelOGegOGemuGejuGfjeKAi+KAi+GeleGfkuGekeGeu+GegOKAi+GegeGetuGehOGegOGfkuGemuGfhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuGep+GelOGegOGemuGejuGfjeKAi+GeleGfkuGekeGeu+GegOKAi+GegeGetuGehOKAi+GegOGfkuGek+Geu+GehCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IuGer+GegOGen+GetuGemiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5ZDM3ZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i7Jm467aAIOyggOyepeyGjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuuCtOu2gCDsoIDsnqXshowiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiLrrLjshJwiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjZDlmNQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IuC6muC7iOC6reC6meC6iOC6seC6lOC7gOC6geC6seC6muC6guC7jeC7ieC6oeC6ueC6meC6nuC6suC6jeC6meC6reC6gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuC6muC7iOC6reC6meC6iOC6seC6lOC7gOC6geC6seC6muC6guC7jeC7ieC6oeC6ueC6meC6nuC6suC6jeC7g+C6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IuC7gOC6reKAi+C6geC6sOKAi+C6quC6suC6mSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQwZWE4OQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iScWhb3JpbsSXIGF0bWludGluxJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJWaWRpbsSXIGF0bWludGluxJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2t1bWVudGFpIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzA4ZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiLEgHLEk2rEgSBrcsSBdHV2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+Iklla8WhxJNqxIEgYXRtacWGYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50aSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDdiN2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i0JPQsNC00LDQsNC0INGB0LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+ItCU0L7RgtC+0L7QtCDRgdCw0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiLQlNC+0LrRg9C80LXQvdGC0q/Sr9C0Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNGQ3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJTdG9yYW4gTHVhcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iU3RvcmFuIGRhbGFtYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2t1bWVuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWVjYjY5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJFa3N0ZXJuIGxhZ3JpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJJbnRlcm4gbGFncmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50ZXIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5NDU0ZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IuCkrOCkvuCkueCljeCkryDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLgpIbgpKjgpY3gpKTgpLDgpL/gpJUg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU2MTY2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJFeHRlcm5lIG9wc2xhZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybmUgb3BzbGFnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9jdW1lbnRlbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1ZTdkNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iUGFtacSZxIcgemV3bsSZdHJ6bmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJQYW1pxJnEhyB3ZXduxJl0cnpuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50eSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2M4OWI4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iQXJtYXplbmFtZW50byBleHRlcm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iQXJtYXplbmFtZW50byBpbnRlcm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9jdW1lbnRvcyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjODliOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iQXJtYXplbmFtZW50byBleHRlcm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iQXJtYXplbmFtZW50byBpbnRlcm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9jdW1lbnRvcyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkMGI5OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iU3RvY2FyZSBleHRlcm7EgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IlN0b2NhcmUgaW50ZXJuxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2N1bWVudGUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YzEwOTUxCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiLQktC90LXRiNC90LjQuSDQvdCw0LrQvtC/0LjRgtC10LvRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+ItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC/0LDQvNGP0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+ItCU0L7QutGD0LzQtdC90YLRiyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTNmM2U4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i4La24LeP4LeE4LeS4La7IOC2huC2oOC2uuC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtobgtqDgtrrgtrHgtroiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNDI0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IkV4dGVybsO9IHVrbGFkYWPDrSBwcmllc3RvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybsO9IHVrbGFkYWPDrSBwcmllc3RvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50eSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmYTY5OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iWnVuYW5qYSBzaHJhbWJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iTm90cmFuamEgc2hyYW1iYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkRva3VtZW50aSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyMzhhNAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i0KHQv9C+0ZnQvdCwINC80LXQvNC+0YDQuNGY0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLQmNC90YLQtdGA0L3QsCDQvNC10LzQvtGA0LjRmNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4i0JTQvtC60YPQvNC10L3RgtC4Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWFjMTFlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJFeHRlcm4gbGFncmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybiBsYWdyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iRG9rdW1lbnQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGU0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IkhpZmFkaGkgeWEgTmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4iSGlmYWRoaSB5YSBuZGFuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IkhhdGkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NjYzNWUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IuC4l+C4teC5iOC4iOC4seC4lOC5gOC4geC5h+C4muC4guC5ieC4reC4oeC4ueC4peC4oOC4suC4ouC4meC4reC4gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuC4l+C4teC5iOC4iOC4seC4lOC5gOC4geC5h+C4muC4guC5ieC4reC4oeC4ueC4peC4oOC4suC4ouC5g+C4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IuC5gOC4reC4geC4quC4suC4oyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI5Y2RjMgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iRXh0ZXJuYWwgU3RvcmFnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybmFsIHN0b3JhZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJNZ2EgRG9rdW1lbnRvIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmJkNTJhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJIYXJpY2kgRGVwb2xhbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiJEYWhpbGkgZGVwb2xhbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJEb2vDvG1hbmxhciI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyMDZlMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i0JfQvtCy0L3RltGI0L3RjyDQv9Cw0LzigJnRj9GC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLQktC90YPRgtGA0ZbRiNC90Y8g0L/QsNC84oCZ0Y/RgtGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4i0JTQvtC60YPQvNC10L3RgtC4Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTcxYzkzCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiJC4buZIG5o4bubIG5nb8OgaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkLhu5kgbmjhu5sgdHJvbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiJUw6BpIGxp4buHdSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGY3N2RkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4i5aSW6YOo5a2Y5YKo6K6+5aSHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9pbnRlcm5hbF9zdG9yYWdlIiBtc2dpZD0iODI3ODQ0MjQzMDY4NTg0MTI3Ij4i5YaF6YOo5a2Y5YKo56m66Ze0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4i5paH5qGjIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZDhhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxMjMzNzUyNzU3NDg1MzAyMzQiPiLlpJbpg6jlhLLlrZjnqbrplpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2ludGVybmFsX3N0b3JhZ2UiIG1zZ2lkPSI4Mjc4NDQyNDMwNjg1ODQxMjciPiLlhafpg6jlhLLlrZjnqbrplpMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2RvY3VtZW50cyIgbXNnaWQ9IjQwNTEyNTIzMDQwNzU0NjkyNTAiPiLmlofku7YiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkOGFmYgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzEyMzM3NTI3NTc0ODUzMDIzNCI+IuWklumDqOWEsuWtmOepuumWkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IuWFp+mDqOWEsuWtmOepuumWkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfZG9jdW1lbnRzIiBtc2dpZD0iNDA1MTI1MjMwNDA3NTQ2OTI1MCI+IuaWh+S7tiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwYTg0NQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iSXNpdG9yZWppIHNhbmdhcGhhbmRsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IklzaXRvcmVqaSBzYW5nYXBoYWthdGhpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9kb2N1bWVudHMiIG1zZ2lkPSI0MDUxMjUyMzA0MDc1NDY5MjUwIj4iQW1hZG9raHVtZW50aSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjFhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IlNhYW1nZXNtZWx0ZSBsaWdnaW5nIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmJjZjdhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiLYp9mE2YXZiNmC2Lkg2KfZhNmF2K/ZhdisIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFlNTEyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJVYmljYWNpw7MgY29tYmluYWRhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZTVmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IktvbWJpbmllcnRlIFN0YW5kb3J0YmVzdGltbXVuZyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNDNiMjEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+Is6Vzr3Ov8+Azr/Ouc63zrzOrc69zrcgz4TOv8+Azr/OuM61z4POr86xIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5NTMxNAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IlViaWNhY2nDs24gY29tYmluYWRhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5NTMxNAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iVWJpY2FjacOzbiBjb21iaW5hZGEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZjRlZjcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJMaWlkZXR1ZCBhc3Vrb2h0Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDMwOGIzCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJZaGRpc3RldHR5IHNpamFpbnRpIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJhMmNjOQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iTG9rYWNpamEgaXoga29tYmluaXJhbmloIGl6dm9yYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDllNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4i4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6R4Z644Z6P4Z624Z+G4Z6EIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0MGNiMgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iQXB2aWVub3RhIGF0cmHFoWFuxIFzIHZpZXRhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDU1Y2E4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4i0J3RjdCz0LTQvNGN0Lsg0LHQsNC50YDRiNC40LsiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNDVjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJMb2thc2kgVGVybGFrdXIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMDAzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IlNhbWVuZ2VzdGVsZGUgbG9jYXRpZSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MzcwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IlXFm3JlZG5pb25hIGxva2FsaXphY2phIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzA3ZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iTG9jYWxpemHDp8OjbyBGdW5kaWRhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY4Mjc3YQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iTG9jYWxpemHDp8OjbyBjb21iaW5hZGEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZDllNmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+ItCT0LXQvtC00LDQvdC90YvQtSDQuNC3INC90LXRgdC60L7Qu9GM0LrQuNGFINC40YHRgtC+0YfQvdC40LrQvtCyIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjhjNTBiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJLb21iaW5pcmFuYSBsb2thY2lqYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGMyMzVlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJFbmVvIEhha2lrYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRhMjUwNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iTmFrYS1mdXNlIG5hIExva2FzeW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iRnVzZWQgTG9jYXRpb24iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZTgzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+Ilbhu4sgdHLDrSDEkcaw4bujYyBo4bujcCBuaOG6pXQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZDdiYzEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiLkuIDkvZPljJbkvY3nva7kv6Hmga8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjUzNzk0Nzc5MDQ0MjMyMDM2OTkiPiJGdXNlZCBMb2NhdGlvbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkNDM1OQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iSW5kYXdvIGVobGFuZ2FuaXNpd2UiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vc3JjL2NvbS9hbmRyb2lkL2xvY2F0aW9uL2Z1c2VkL0Z1c2VkTG9jYXRpb25TZXJ2aWNlLmphdmEgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3NyYy9jb20vYW5kcm9pZC9sb2NhdGlvbi9mdXNlZC9GdXNlZExvY2F0aW9uU2VydmljZS5qYXZhCmluZGV4IDUwOWMwMTAuLjEyOTY2Y2YgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vc3JjL2NvbS9hbmRyb2lkL2xvY2F0aW9uL2Z1c2VkL0Z1c2VkTG9jYXRpb25TZXJ2aWNlLmphdmEKKysrIGIvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9zcmMvY29tL2FuZHJvaWQvbG9jYXRpb24vZnVzZWQvRnVzZWRMb2NhdGlvblNlcnZpY2UuamF2YQpAQCAtMTYsOSArMTYsNiBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLmxvY2F0aW9uLmZ1c2VkOwogCi1pbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotCiBpbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmY2JiNAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW52b2VydG9lc3RlbGxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkLXNsZXV0ZWxib3JkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iRW5nZWxzIChWSykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJFbmdlbHMgKFZTKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iRW5nZWxzIChWUyksIGludGVybmFzaW9uYWxlIHN0eWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkVuZ2VscyAoVlMpLCBDb2xlbWFrLXN0eWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJFbmdlbHMgKFZTKSwgRHZvcmFrLXN0eWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IkR1aXRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyYW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IkZyYW5zIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnVzc2llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXNzaWVzLCBNYWMtc3R5bCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlNwYWFucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4iU3dpdHNlcnNlIEZyYW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJTd2l0c2Vyc2UgRHVpdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnaWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCdWxnYWFycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpYWFucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRGVlbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vb3JzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJTd2VlZHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iktyb2F0aWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IlRzamVnZ2llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJFc3RuaWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJIb25nYWFycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iWXNsYW5kcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsaWFhbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdlZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3dhYWtzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG93ZWVucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmtzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJPZWtyYcOvZW5zIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NzU3NzIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IuGLqOGMjeGJpOGJtSDhiJjhiKPhiKrhi6vhi47hib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IuGLqEFuZHJvaWQg4Yuo4YmB4YiN4Y2NIOGIsOGIjOGLsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IuGKpeGKleGMjeGIiuGLneGKmyAo4Yup4YqsKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IuGKpeGKleGMjeGIiuGLmOGKmyAo4YupLuGKpOGItS4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiLhiqXhipXhjI3hiIrhi5jhipsgKOGLqS4g4Yqk4Yi1LinhjaMg4Yqg4YiI4YidIOGKoOGJgOGNjSDhiYXhjKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IuGKpeGKleGMjeGIiuGLmOGKmyAo4YupLiDhiqThiLUuKeGNoyDhi6jhiq7hiI3hiJvhiK3hiq0g4YmF4YylIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4i4Yql4YqV4YyN4YiK4YuY4YqbICjhi6kuIOGKpOGItS4p4Y2jIOGLqOGLteGJruGIq+GKrSDhiYXhjKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IuGMgOGIreGImOGKlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiLhjYjhiKjhipXhiLPhi63hipsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4i4Y2I4Yio4YqV4Yiz4Yut4YqbICjhiqvhipPhi7MpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4i4Yip4Yi14Yur4YqbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IuGIqeGIteGLq+GKm+GNoyBNYWMg4YmF4YylIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i4Yi14Y2T4YqS4Yi9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLhi6jhiLXhi4rhi50g4Y2I4Yio4YqV4Yiz4Yut4YqbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLhi6jhiLXhi4rhi50g4YyA4Yit4YiY4YqVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i4Ymk4YiN4YyC4Yuo4YidIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLhiaHhiI3hjIvhiKrhi6siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLhjKPhiIrhi6vhipXhipsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IuGLtOGKkuGIvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4i4YqW4Yit4YuM4YyC4YurIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLhiLXhi4rhi7XhipXhipsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLhjYrhipLhiL0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i4Yqt4Yiu4Yi94YurIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IuGJvOGKrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLhiqThiLXhibbhipLhi6siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IuGIgOGKleGMi+GIqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i4Yqg4Yut4Yi14YiL4YqV4Yu1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLhiaXhiKvhi5rhiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLhjZbhiK3hibnhjIvhiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IuGIteGIjuGJq+GKrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4i4Yi14YiO4Ymr4YqS4YurIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i4Ymx4Yit4Yqt4YqbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiLhi6nhiq3hiKzhipUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzZDk3OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4i2KPYrNmH2LLYqSDYpdiv2K7Yp9mEINio2YrYp9mG2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4i4oCP2YTZiNit2Kkg2YXZgdin2KrZititIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLYp9mE2KXZhtis2YTZitiy2YrYqSAo2KfZhNmF2YXZhNmD2Kkg2KfZhNmF2KrYrdiv2KkpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4i2KfZhNil2YbYrNmE2YrYstmK2KkgKNin2YTZiNmE2KfZitin2Kog2KfZhNmF2KrYrdiv2KkpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiLYp9mE2KXZhtis2YTZitiy2YrYqSAo2KfZhNmI2YTYp9mK2KfYqiDYp9mE2YXYqtit2K/YqSnYjCDYp9mE2YbZhdi3INin2YTYr9mI2YTZiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i4oCP2KfZhNil2YbYrNmE2YrYstmK2KkgKNin2YTZiNmE2KfZitin2Kog2KfZhNmF2KrYrdiv2Kkp2Iwg2YbZhdi3IENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLigI/Yp9mE2KXZhtis2YTZitiy2YrYqSAo2KfZhNmI2YTYp9mK2KfYqiDYp9mE2YXYqtit2K/YqSnYjCDZhtmF2LcgRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLYp9mE2KPZhNmF2KfZhtmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i2KfZhNmB2LHZhtiz2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLYp9mE2YHYsdmG2LPZitipICjZg9mG2K/YpykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLYp9mE2LHZiNiz2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLigI/Yp9mE2LHZiNiz2YrYqdiMINmG2YXYtyBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiLYp9mE2KXYs9io2KfZhtmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+Itin2YTZgdix2YbYs9mK2Kkg2KfZhNiz2YjZitiz2LHZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLYp9mE2KPZhNmF2KfZhtmK2Kkg2KfZhNiz2YjZitiz2LHZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i2KfZhNio2YTYrNmK2YPZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLYp9mE2KjZhNi62KfYsdmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLYp9mE2KXZiti32KfZhNmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+Itin2YTYr9in2YbZhdin2LHZg9mK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Itin2YTZhtix2YjZitis2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4i2KfZhNiz2YjZitiv2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+Itin2YTZgdmG2YTZhtiv2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLYp9mE2YPYsdmI2KfYqtmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i2KfZhNiq2LTZitmD2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLYp9mE2KXYs9iq2YjZhtmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+Itin2YTZhdis2LHZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiLYp9mE2KPZitiz2YTZhtiv2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4i2KfZhNio2LHYp9iy2YrZhNmK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLYp9mE2KjYsdiq2LrYp9mE2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4i2KfZhNiz2YTZiNmB2KfZg9mK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+Itin2YTYs9mE2YjZgdmK2YbZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i2KfZhNiq2LHZg9mK2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+Itin2YTYo9mI2YPYsdin2YbZitipIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNDEzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+ItCS0YXQvtC00L3QuCDRg9GB0YLRgNC+0LnRgdGC0LLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4i0JrQu9Cw0LLQuNCw0YLRg9GA0LAg0L3QsCBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4i0LDQvdCz0LvQuNC50YHQutC4ICjQktC10LvQuNC60L7QsdGA0LjRgtCw0L3QuNGPKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ItCw0L3Qs9C70LjQudGB0LrQuCAo0KHQkNCpKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4i0LDQvdCz0LsuICjQodCQ0KkpIOKAkyDRgdGC0LjQuyDigJ5N0LXQttC00YPQvdCw0YDQvtC00L3QsOKAnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i0LDQvdCz0LvQuNC50YHQutC4ICjQodCQ0KkpIOKAkyDRgdGC0LjQuyDigJ7QmtC+0YPQu9C80LDQuuKAnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+ItCw0L3Qs9C70LjQudGB0LrQuCAo0KHQkNCpKSDigJMg0YHRgtC40Lsg4oCe0JTQstC+0YDQsNC64oCcIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLQvdC10LzRgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i0YTRgNC10L3RgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4i0YTRgNC10L3RgdC60LggKNCa0LDQvdCw0LTQsCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLRgNGD0YHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+ItGA0YPRgdC60Lgg4oCTINGB0YLQuNC7IOKAnk1hY+KAnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+ItC40YHQv9Cw0L3RgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+ItGI0LLQtdC50YbQsNGA0YHQutC4INGE0YDQtdC90YHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLRiNCy0LXQudGG0LDRgNGB0LrQuCDQvdC10LzRgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiLQsdC10LvQs9C40LnRgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+ItCx0YrQu9Cz0LDRgNGB0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+ItC40YLQsNC70LjQsNC90YHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiLQtNCw0YLRgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+ItC90L7RgNCy0LXQttC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+ItGI0LLQtdC00YHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i0YTQuNC90LvQsNC90LTRgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i0YXRitGA0LLQsNGC0YHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+ItGH0LXRiNC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i0LXRgdGC0L7QvdGB0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i0YPQvdCz0LDRgNGB0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i0LjRgdC70LDQvdC00YHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLQv9C+0YDRgtGD0LPQsNC70YHQutC4ICjQkdGA0LDQt9C40LvQuNGPKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+ItC/0L7RgNGC0YPQs9Cw0LvRgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+ItGB0LvQvtCy0LDRiNC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+ItGB0LvQvtCy0LXQvdGB0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+ItGC0YPRgNGB0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i0YPQutGA0LDQuNC90YHQutC4Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMjFiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IkRpc3Bvc2l0aXVzIGTigJllbnRyYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJUZWNsYXQgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkFuZ2zDqHMgKFJVKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkFuZ2zDqHMgKEVVQSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkFuZ2zDqHMgKEVVQSksIGVzdGlsIGludGVybmFjaW9uYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkFuZ2zDqHMgKEVVQSksIGVzdGlsIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJBbmdsw6hzIChFVUEpLCBlc3RpbCBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IkFsZW1hbnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbmPDqHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbmPDqHMgKENhbmFkw6ApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1cywgZXN0aWwgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iRXNwYW55b2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IkZyYW5jw6hzIHN1w61zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJBbGVtYW55IHN1w61zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkLDumxnYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJJdGFsacOgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEYW7DqHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnVlYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iU3VlYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IkZpbsOocyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJDcm9hdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJUeGVjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uacOgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJIb25nYXLDqHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklzbGFuZMOocyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWd1w6hzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJFc2xvdmFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJFc2xvdsOoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVyYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVWNyYcOvbsOocyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2I0MjBlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJWc3R1cG7DrSB6YcWZw616ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iS2zDoXZlc25pY2UgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+ImFuZ2xpY2vDqSAoU3BvamVuw6kga3LDoWxvdnN0dsOtKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ImFuZ2xpY2vDqSAoVVNBKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iYW5nbGlja8OpIChVU0EpLCBtZXppbsOhcm9kbsOtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJhbmdsaWNrw6kgKFVTQSksIHN0eWwgQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+ImFuZ2xpY2vDqSAoVVNBKSwgc3R5bCBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+Im7Em21lY2vDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJmcmFuY291enNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iZnJhbmNvdXpza8OpIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4icnVza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+InJ1c2vDqSwgc3R5bCBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiLFoXBhbsSbbHNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IsWhdsO9Y2Fyc2vDqSAoZnJhbmNvdXrFoXRpbmEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLFoXbDvWNhcnNrw6kgKG7Em23EjWluYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJiZWxnaWNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+ImJ1bGhhcnNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJpdGFsc2vDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iZMOhbnNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Im5vcnNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IsWhdsOpZHNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJmaW5za8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+ImNob3J2YXRza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IsSNZXNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iZXN0b25za8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJtYcSPYXJza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJpc2xhbmRza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJicmF6aWxza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4icG9ydHVnYWxza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJzbG92ZW5za8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJzbG92aW5za8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4idHVyZWNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+InVrcmFqaW5za8OpIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMDdkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IklucHV0ZW5oZWRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZC10YXN0YXR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkVuZ2Vsc2sgKFVLKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkVuZ2Vsc2sgKFVTQSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkVuZ2Vsc2sgKFVTQSksIGludGVybmF0aW9uYWwgc3RpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iRW5nZWxzayAoVVNBKSwgQ29sZW1hay1zdGlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iRW5nZWxzayAoVVNBKSwgRHZvcmFrLXN0aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IlR5c2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IkZyYW5zayAoQ2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IlJ1c3Npc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUnVzc2lzaywgTWFjLXN0aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJTcGFuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IlNjaHdlaXppc2sgZnJhbnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJTY2h3ZWl6ZXJ0eXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2Fyc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJJdGFsaWVuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IkRhbnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3JzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iU3ZlbnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmluc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iS3JvYXRpc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iVGpla2tpc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0aXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJVbmdhcnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2xhbmRzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsaWFuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdpc2lzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvdmFraXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5zayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR5cmtpc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVrcmFpbnNrIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YzNiNTAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IkVpbmdhYmVnZXLDpHRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkLVRhc3RhdHVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iRW5nbGlzY2ggKEdyb8OfYnJpdGFubmllbikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJFbmdsaXNjaCAoVVNBKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iRW5nbGlzY2ggKFVTQSksIGludGVybmF0aW9uYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkVuZ2xpc2NoIChVU0EpLCBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iRW5nbGlzY2ggKFVTQSksIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iRGV1dHNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJGcmFuesO2c2lzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbnrDtnNpc2NoIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnVzc2lzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUnVzc2lzY2gsIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlNwYW5pc2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJTY2h3ZWl6ZXIgRnJhbnrDtnNpc2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJTY2h3ZWl6ZXJkZXV0c2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkJ1bGdhcmlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJJdGFsaWVuaXNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRMOkbmlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcndlZ2lzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlNjaHdlZGlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5uaXNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJLcm9hdGlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iVHNjaGVjaGlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0bmlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IlVuZ2FyaXNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iSXNsw6RuZGlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IkJyYXNpbGlhbmlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdpZXNpc2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJTbG93YWtpc2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG93ZW5pc2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVMO8cmtpc2NoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5pc2NoIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZDU3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+Is6jz4XPg866zrXPhc6tz4IgzrXOuc+Dz4zOtM6/z4UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+Is6gzrvOt866z4TPgc6/zrvPjM6zzrnOvyBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4izpHOs86zzrvOuc66zqwgKM6XzpIpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4izpHOs86zzrvOuc66zqwgKM6XzqDOkSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+Is6RzrPOs867zrnOus6sICjOl86gzpEpLCDPhM+Nz4DOv8+FIEludGVybmF0aW9uYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+Is6RzrPOs867zrnOus6sICjOl86gzpEpLCDPhM+Nz4DOv8+FIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLOkc6zzrPOu865zrrOrCAozpfOoM6RKSwgz4TPjc+Azr/PhSBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+Is6TzrXPgc68zrHOvc65zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiLOk86xzrvOu865zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLOk86xzrvOu865zrrOrCAozprOsc69zrHOtM6sKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+Is6hz4nPg865zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLOoc+Jz4POuc66zqwsIM+Ez43PgM6/z4UgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4izpnPg8+AzrHOvc65zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4izpPOsc67zrvOuc66zqwgzpXOu86yzrXPhM6vzrHPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4izpPOtc+BzrzOsc69zrnOus6sIM6VzrvOss61z4TOr86xz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiLOks61zrvOs865zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4izpLOv8+FzrvOs86xz4HOuc66zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLOmc+EzrHOu865zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4izpTOsc69zrnOus6sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiLOnc6/z4HOss63zrPOuc66zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+Is6jzr/Phc63zrTOuc66zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLOps65zr3Ou86xzr3OtM65zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLOms+Bzr/Osc+EzrnOus6sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+Is6kz4POtc+HzrnOus6sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+Is6Vz4POuM6/zr3Ouc66zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+Is6fz4XOs86zz4HOuc66zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+Is6Zz4POu86xzr3OtM65zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4izpLPgc6xzrbOuc67zrnOrM69zrnOus6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4izqDOv8+Bz4TOv86zzrHOu865zrrOrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4izqPOu86/zrLOsc66zrnOus6sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLOo867zr/Oss61zr3Ouc66zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiLOpM6/z4XPgc66zrnOus6sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiLOn8+FzrrPgc6xzr3Ouc66zqwiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDc5NGE2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW5wdXQgRGV2aWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCBrZXlib2FyZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkVuZ2xpc2ggKFVLKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkVuZ2xpc2ggKFVTKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iRW5nbGlzaCAoVVMpLCBJbnRlcm5hdGlvbmFsIHN0eWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJFbmdsaXNoIChVUyksIENvbGVtYWsgc3R5bGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJFbmdsaXNoIChVUyksIER2b3JhayBzdHlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyZW5jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmVuY2ggKENhbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXNzaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c3NpYW4sIE1hYyBzdHlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlNwYW5pc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IlN3aXNzIEZyZW5jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iU3dpc3MgR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FyaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXRhbGlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRGFuaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3J3ZWdpYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN3ZWRpc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5uaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkNyb2F0aWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IkN6ZWNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJIdW5nYXJpYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IkljZWxhbmRpYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhemlsaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVndWVzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvdmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5pYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUdXJraXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5pYW4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDc5NGE2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW5wdXQgRGV2aWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCBrZXlib2FyZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkVuZ2xpc2ggKFVLKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkVuZ2xpc2ggKFVTKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iRW5nbGlzaCAoVVMpLCBJbnRlcm5hdGlvbmFsIHN0eWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJFbmdsaXNoIChVUyksIENvbGVtYWsgc3R5bGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJFbmdsaXNoIChVUyksIER2b3JhayBzdHlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyZW5jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmVuY2ggKENhbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXNzaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c3NpYW4sIE1hYyBzdHlsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlNwYW5pc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IlN3aXNzIEZyZW5jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iU3dpc3MgR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FyaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXRhbGlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRGFuaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3J3ZWdpYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN3ZWRpc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5uaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkNyb2F0aWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IkN6ZWNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJIdW5nYXJpYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IkljZWxhbmRpYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhemlsaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVndWVzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvdmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5pYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUdXJraXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5pYW4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDYxYjgwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iRGlzcG9zaXRpdm9zIGRlIGVudHJhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IlRlY2xhZG8gZGUgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkluZ2zDqXMgKFJlaW5vIFVuaWRvKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkluZ2zDqXMgKEVFLsKgVVUuKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iSW5nbMOpcyAoRUUuwqBVVS4pLCBpbnRlcm5hY2lvbmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJJbmdsw6lzIChFRS7CoFVVLiksIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJJbmdsw6lzIChFRS7CoFVVLiksIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iQWxlbcOhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJGcmFuY8OpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmFuY8OpcyAoQ2FuYWTDoSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c28sIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IkVzcGHDsW9sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJGcmFuY8OpcyBkZSBTdWl6YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iQWxlbcOhbiBkZSBTdWl6YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IkJlbGdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCw7psZ2FybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpYW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEYW7DqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnVlZ28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN1ZWNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlubGFuZMOpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJDcm9hdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iQ2hlY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0b25pbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4iSMO6bmdhcm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklzbGFuZMOpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsZcOxbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IlBvcnR1Z3XDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IkVzbG92YWNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJFc2xvdmVubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVY3Jhbmlhbm8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJlYTRkNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iRGlzcG9zaXRpdm9zIGRlIGVudHJhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IlRlY2xhZG8gZGUgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkluZ2zDqXMgKFJlaW5vIFVuaWRvKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkluZ2zDqXMgKEVFLlVVLikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkluZ2zDqXMgKEVFLlVVLiksIGVzdGlsbyBpbnRlcm5hY2lvbmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJJbmdsw6lzIChFRS5VVS4pLCBlc3RpbG8gQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkluZ2zDqXMgKEVFLlVVLiksIGVzdGlsbyBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IkFsZW3DoW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbmPDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbmPDqXMgKENhbmFkw6EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnVzbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXNvLCBlc3RpbG8gTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iRXNwYcOxb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IkZyYW5jw6lzIGRlIFN1aXphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJBbGVtw6FuIHN1aXpvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkLDumxnYXJvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXRhbGlhbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IkRhbsOpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iTm9ydWVnbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iU3VlY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5sYW5kw6lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkNyb2F0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJDaGVjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJFc3RvbmlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJIw7puZ2FybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iSXNsYW5kw6lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJCcmFzaWxlw7FvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVndcOpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iRXNsb3ZhY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IkVzbG92ZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVyY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVjcmFuaWFubyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNGZhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJTaXNlbmRzZWFkbWVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkaSBrbGF2aWF0dXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iSW5nbGlzZSAow5xoZW5ka3VuaW5ncmlpaykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJJbmdsaXNlIChVU0EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJJbmdsaXNlIChVU0EpLCByYWh2dXN2YWhlbGluZSBzdGlpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iSW5nbGlzZSAoVVNBKSwgQ29sZW1ha2kgc3RpaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJJbmdsaXNlIChVU0EpLCBEdm9yYWtpIHN0aWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJTYWtzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJQcmFudHN1c2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iUHJhbnRzdXNlIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iVmVuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJWZW5lLCBNYWNpIHN0aWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iSGlzcGFhbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLFoHZlaXRzaSBwcmFudHN1c2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IsWgdmVpdHNpc2Frc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkJ1bGdhYXJpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWFsaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IlRhYW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3JyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iUm9vdHNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iU29vbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iSG9ydmFhdGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IlTFoWVoaGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRWVzdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IlVuZ2FyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iSXNsYW5kaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lpbGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVnYWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJTbG92YWtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZWVuaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUw7xyZ2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVrcmFpbmEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjN2YzYQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW5wdXQgRGV2aWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4i4oCP2LXZgdit2YfigIzaqdmE24zYryBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4i2KfZhtqv2YTbjNiz24wgKNio2LHbjNiq2KfZhtuM2KcpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4i2KfZhtqv2YTbjNiz24wgKNin2YXYsduM2qnYpykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+Itin2Ybar9mE24zYs9uMICjYp9uM2KfZhNin2Kog2YXYqtit2K/ZhynYjCDYs9io2qkg2KjbjNmG4oCM2KfZhNmF2YTZhNuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiLigI/Yp9mG2q/ZhNuM2LPbjCAo2KfbjNin2YTYp9iqINmF2KrYrdiv2Ycp2Iwg2LPYqNqpIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLigI/Yp9mG2q/ZhNuM2LPbjCAo2KfbjNin2YTYp9iqINmF2KrYrdiv2Ycp2Iwg2LPYqNqpIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4i2KLZhNmF2KfZhtuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+ItmB2LHYp9mG2LPZiNuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+ItmB2LHYp9mG2LPZiNuMICjaqdin2YbYp9iv2Kcp4oCPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4i2LHZiNiz24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4i4oCP2LHZiNiz24zYjCDYs9io2qkgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i2KfYs9m+2KfZhtuM2KfbjNuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLZgdix2KfZhtiz2YjbjCDYs9mI2KbbjNizIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLYotmE2YXYp9mG24wg2LPZiNim24zYs9uMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i2KjZhNqY24zaqduMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLYqNmE2LrYp9ix24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLYp9uM2KrYp9mE24zYp9uM24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+Itiv2KfZhtmF2KfYsdqp24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+ItmG2LHZiNqY24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+Itiz2YjYptiv24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLZgdmG2YTYp9mG2K/bjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLaqdix2YjYp9iz24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i2obaqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLYp9iz2KrZiNmG24zYp9uM24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+ItmF2KzYp9ix2LPYqtin2YbbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i2KfbjNiz2YTZhtiv24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+Itio2LHYstuM2YTbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+Itm+2LHYqti62KfZhNuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLYp9iz2YTZiNmI2KfaqduMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLYp9iz2YTZiNmI2YbbjNin24zbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+Itiq2LHaqduMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiLYp9mI2qnYsdin24zZhtuMIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOGViMzAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IlN5w7Z0dMO2bGFpdHRlZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IkFuZHJvaWQtbsOkcHDDpGltaXN0w7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJlbmdsYW50aSAoSXNvLUJyaXRhbm5pYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJlbmdsYW50aSAoWWhkeXN2YWxsYXQpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJlbmdsYW50aSAoWWhkeXN2YWxsYXQpLCBrYW5zYWludsOkbGluZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+ImVuZ2xhbnRpIChZaGR5c3ZhbGxhdCksIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJlbmdsYW50aSAoWWhkeXN2YWxsYXQpLCBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+InNha3NhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+InJhbnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJyYW5za2EgKEthbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJ2ZW7DpGrDpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJ2ZW7DpGrDpCwgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iZXNwYW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4ic3ZlaXRzaW5yYW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+InN2ZWl0c2luc2Frc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJiZWxnaWFsYWluZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+ImJ1bGdhcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iaXRhbGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJ0YW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Im5vcmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJydW90c2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJzdW9taSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJrcm9hYXR0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJ0xaFla2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+InZpcm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+InVua2FyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iaXNsYW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iYnJhc2lsaWFsYWluZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJwb3J0dWdhbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+InNsb3Zha2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJzbG92ZWVuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+InR1cmtraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4idWtyYWluYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NDc2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJQw6lyaXBow6lyaXF1ZXMgZFwnZW50csOpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQ2xhdmllciBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iQW5nbGFpcyAoYnJpdGFubmlxdWUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iQW5nbGFpcyAow4l0YXRzLVVuaXMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJBbmdsYWlzICjDiXRhdHMtVW5pcyksIGludGVybmF0aW9uYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkFuZ2xhaXMgKMOJdGF0cy1VbmlzKSwgdHlwZSBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iQW5nbGFpcyAow4l0YXRzLVVuaXMpLCB0eXBlIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iQWxsZW1hbmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbsOnYWlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IkZyYW7Dp2FpcyAoQ2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IlJ1c3NlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c3NlLCB0eXBlIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IkVzcGFnbm9sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJGcmFuw6dhaXMgKFN1aXNzZSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IkFsbGVtYW5kIChTdWlzc2UpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkJ1bGdhcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJJdGFsaWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEYW5vaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnbDqWdpZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN1w6lkb2lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlubm9pcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJDcm9hdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iVGNow6hxdWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0b25pZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+Ikhvbmdyb2lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2xhbmRhaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IkJyw6lzaWxpZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdhaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3ZhcXVlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92w6huZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVrcmFpbmllbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQ0ZmZhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJJbnB1dCBEZXZpY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJDbGF2aWVyIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJBbmdsYWlzIChSb3lhdW1lLVVuaSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJBbmdsYWlzICjDiXRhdHMtVW5pcykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkFuZ2xhaXMgKMOJdGF0cy1VbmlzKSwgaW50ZXJuYXRpb25hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iQW5nbGFpcyAow4l0YXRzLVVuaXMpLCB0eXBlIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJBbmdsYWlzICjDiXRhdHMtVW5pcyksIHR5cGUgRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJBbGxlbWFuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJGcmFuw6dhaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbsOnYWlzIChDYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnVzc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUnVzc2UsIHR5cGUgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iRXNwYWdub2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IkZyYW7Dp2FpcyAoU3Vpc3NlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iQWxsZW1hbmQgKFN1aXNzZSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IkRhbm9pcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iTm9ydsOpZ2llbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iU3XDqWRvaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5ub2lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkNyb2F0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJUY2jDqHF1ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJFc3RvbmllbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4iSG9uZ3JvaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklzbGFuZGFpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnLDqXNpbGllbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IlBvcnR1Z2FpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvdmFxdWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IlNsb3bDqG5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVyYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVWtyYWluaWVuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMTg2NGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IuCkh+CkqOCkquClgeCknyDgpIngpKrgpJXgpLDgpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IkFuZHJvaWQg4KSV4KWA4KSs4KWL4KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4i4KSF4KSC4KSX4KWN4KSw4KWH4KSc4KS84KWAICjgpK/gpYLgpJXgpYcpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4i4KSF4KSC4KSX4KWN4KSw4KWH4KSc4KS84KWAICjgpK/gpYLgpI/gpLgpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiLgpIXgpILgpJfgpY3gpLDgpYfgpJzgpLzgpYAgKOCkr+ClguCkj+CkuCksIOCkheCkguCkpOCksOCljeCksOCkvuCkt+CljeCkn+CljeCksOClgOCkryDgpLbgpYjgpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IuCkheCkguCkl+CljeCksOClh+CknOCkvOClgCAo4KSv4KWC4KSP4KS4KSwg4KSV4KWL4KSy4KSu4KWI4KSVIOCktuCliOCksuClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IuCkheCkguCkl+CljeCksOClh+CknOCkvOClgCAo4KSv4KWC4KSP4KS4KSwg4KSh4KWN4KS14KWL4KSw4KSVIOCktuCliOCksuClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4i4KSc4KSw4KWN4KSu4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IuCkq+CkvOCljeCksOCkvuCkguCkuOClgOCkuOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLgpKvgpLzgpY3gpLDgpL7gpILgpLjgpYDgpLjgpYAgKOCkleCkqOCkvuCkoeCkvikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLgpLDgpYLgpLjgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4i4KSw4KWC4KS44KWALCDgpK7gpYjgpJUg4KS24KWI4KSy4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i4KS44KWN4KSq4KWI4KSo4KS/4KS2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLgpLjgpY3gpLXgpL/gpLgg4KSr4KS84KWN4KSw4KS+4KSC4KS44KWA4KS44KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLgpLjgpY3gpLXgpL/gpLgg4KSc4KSw4KWN4KSu4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i4KSs4KWH4KSy4KWN4KSc4KS/4KSv4KS+4KSIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLgpKzgpYHgpLLgpY3igI3gpJfgpL7gpLDgpL/gpK/gpL7gpIgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLgpIfgpKTgpL7gpLLgpLXgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IuCkoeCliOCkqOCkv+CktiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4i4KSo4KS+4KSw4KWN4KS14KWH4KSc4KS/4KSv4KS+4KSIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLgpLjgpY3gpLXgpYDgpKHgpL/gpLYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLgpKvgpLzgpL/gpKjgpL/gpLYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i4KSV4KWN4KSw4KWL4KSP4KS24KS/4KSv4KS+4KSIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IuCkmuClh+CklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLgpI/gpLjgpY3gpJ/gpYvgpKjgpL/gpK/gpL7gpIgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IuCkueCkguCkl+Clh+CksOCkv+Ckr+CkvuCkiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i4KSG4KSH4KS44KSy4KWI4KSC4KSh4KS/4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLgpKzgpY3gpLDgpL7gpJzgpLzgpYDgpLLgpL/gpK/gpL7gpIgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLgpKrgpYHgpLDgpY3gpKTgpJfgpL7gpLLgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IuCkuOCljeCksuCli+CkteCkvuCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4i4KS44KWN4KSy4KWL4KS14KWH4KSo4KS/4KSv4KS+4KSIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i4KSk4KWB4KSw4KWN4KSV4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiLgpK/gpYLgpJXgpY3gpLDgpYfgpKjgpL/gpK/gpL7gpIgiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxN2JmMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iVXJlxJFhamkgemEgdW5vcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCB0aXBrb3ZuaWNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iZW5nbGVza2EgKFVLKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ImVuZ2xlc2thIChTQUQpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJlbmdsZXNrYSAoU0FEKSwgbWXEkXVuYXJvZG5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJlbmdsZXNrYSAoU0FEKSwgQ29sZW1ha292IHJhc3BvcmVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iZW5nbGVza2EgKFNBRCksIER2b3Jha292IHJhc3BvcmVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJuamVtYcSNa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iZnJhbmN1c2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+ImZyYW5jdXNrYSAoS2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+InJ1c2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+InJ1c2thLCByYXNwb3JlZCBNYWNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4ixaFwYW5qb2xza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IsWhdmljYXJza28tZnJhbmN1c2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLFoXZpY2Fyc2tvLW5qZW1hxI1rYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+ImJlbGdpanNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iYnVnYXJza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJ0YWxpamFuc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJkYW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Im5vcnZlxaFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4ixaF2ZWRza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJmaW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iaHJ2YXRza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4ixI1lxaFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJlc3RvbnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4ibWHEkWFyc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJpc2xhbmRza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+ImJyYXppbHNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+InBvcnR1Z2Fsc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJzbG92YcSNa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+InNsb3ZlbnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+InR1cnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4idWtyYWppbnNrYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2RiZmIyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJCZXZpdGVsaSBlc3prw7Z6w7ZrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkLWJpbGxlbnR5xbF6ZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJhbmdvbCAoRWd5ZXPDvGx0IEtpcsOhbHlzw6FnKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ImFuZ29sIChVU0EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJhbmdvbCAoVVNBKSwgbmVtemV0a8O2emkgc3TDrWx1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iYW5nb2wgKFVTQSksIENvbGVtYWstc3TDrWx1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+ImFuZ29sIChVU0EpLCBEdm9yYWstc3TDrWx1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4ibsOpbWV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+ImZyYW5jaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iZnJhbmNpYSAoS2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+Im9yb3N6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+Im9yb3N6LCBNYWMtc3TDrWx1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+InNwYW55b2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+InN2w6FqY2kgZnJhbmNpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4ic3bDoWpjaSBuw6ltZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJiZWxnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iYm9sZ8OhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Im9sYXN6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJkw6FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJub3J2w6lnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJzdsOpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+ImZpbm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iaG9ydsOhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJjc2VoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IsOpc3p0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJtYWd5YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+Iml6bGFuZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+ImJyYXppbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+InBvcnR1Z8OhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4ic3psb3bDoWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+InN6bG92w6luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4idMO2csO2ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4idWtyw6FuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1YmJmYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+ItWE1bjWgtW/1oTVodWj1oDVtNWh1bYg4oCL4oCL1b3VodaA1oTVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkINW91b/VpdWy1bbVodW31aHWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+ItSx1bbVo9Ws1aXWgNWl1bYgKNWE1LIpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4i1LHVttWj1azVpdaA1aXVtiAo1LHVhNWGKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4i1LHVttWj1azVpdaA1aXVtiAo1LHVhNWGKSwg1bTVq9W71aHVptWj1aHVtdWr1bYg1b/VpdW91aHVryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i1LHVttWj1azVpdaA1aXVtiAo1LHVhNWGKSwgQ29sZW1hayDVv9Wl1b3VodWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4i1LHVttWj1azVpdaA1aXVtiAo1LHVhNWGKSwgRHZvcmFrINW/1aXVvdWh1a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+ItSz1aXWgNW01aHVttWl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+ItWW1oDVodW21b3VpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLVltaA1aHVttW91aXWgNWl1bYgKNS/1aHVttWh1aTVoSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLVjNW41oLVvdWl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+ItWM1bjWgtW91aXWgNWl1bYsIE1hYyDVv9Wl1b3VodWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i1LvVvdW61aHVttWl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLVh9W+1aXVtdaB1aHWgNWh1a/VodW2INaG1oDVodW21b3VpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4i1YfVvtWl1bXWgdWh1oDVodWv1aHVtiDVo9Wl1oDVtNWh1bbVpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+ItSy1aXVrNWj1avVodWv1aHVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4i1LLVuNaC1azVstWh1oDVpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+ItS71b/VodWs1aXWgNWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+ItS01aHVttWr1aXWgNWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+ItWG1bjWgNW+1aXVo9Wl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLVh9W+1aXVpNWl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i1ZbVq9W21bbVpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLUvdW41oDVvtWh1anVpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLVidWl1a3VpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLUt9W91b/VuNW21aXWgNWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+ItWA1bjWgtW21aPVodaA1aXWgNWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+ItS71b3VrNWh1bbVpNWl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLUstaA1aHVptWr1azVpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+ItWK1bjWgNW/1bjWgtWj1aHVrNWl1oDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLVjdWs1bjVvtWh1a/VpdaA1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4i1Y3VrNW41b7VpdW21aXWgNWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiLUudW41oLWgNaE1aXWgNWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+ItWI1oLVr9aA1aHVq9W21aXWgNWl1bYiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlMmRkMGEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IlBlcmFuZ2thdCBNYXN1a2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJLZXlib2FyZCBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iSW5nZ3JpcyAoQnJpdGFuaWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iSW5nZ3JpcyAoQW1lcmlrYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkluZ2dyaXMgKEFTKSwgZ2F5YSBJbnRlcm5hc2lvbmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJJbmdncmlzIChBUyksIGdheWEgQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkluZ2dyaXMgKEFTKSwgZ2F5YSBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+Ikplcm1hbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJQcmFuY2lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IlByYW5jaXMgKEthbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXNpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXNpYSwgZ2F5YSBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJTcGFueW9sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJQcmFuY2lzIFN3aXNzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJKZXJtYW4gU3dpc3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkJ1bGdhcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXRhbGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEZW5tYXJrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3J3ZWdpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iU3dlZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlubGFuZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iktyb2FzaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iQ2hlc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+Ikh1bmdhcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2xhbmRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVnaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3dha2lhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5hIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNDMxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IkRpc3Bvc2l0aXZpIGRpIGltbWlzc2lvbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IlRhc3RpZXJhIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJJbmdsZXNlIChVSykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJJbmdsZXNlIChVU0EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJJbmdsZXNlIChVU0EpLCBzdGlsZSBpbnRlcm5hemlvbmFsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iSW5nbGVzZSAoVVNBKSwgc3RpbGUgQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkluZ2xlc2UgKFVTQSksIHN0aWxlIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iVGVkZXNjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJGcmFuY2VzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmFuY2VzZSAoQ2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IlJ1c3NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c3NvLCBzdGlsZSBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJTcGFnbm9sbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4iRnJhbmNlc2Ugc3Zpenplcm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IlRlZGVzY28gc3Zpenplcm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpYW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEYW5lc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnZlZ2VzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iU3ZlZGVzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IkZpbmxhbmRlc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iQ3JvYXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IkNlY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0b25lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJVbmdoZXJlc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklzbGFuZGVzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsaWFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IlBvcnRvZ2hlc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3ZhY2NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVyY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVjcmFpbm8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4OTM5MQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4i15TXqten16DXmSDXp9ec15giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IuKAj9ee16fXnNeT16ogQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IteQ16DXktec15nXqiAo15HXqNeZ15jXoNeZ15QpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4i15DXoNeS15zXmdeqICjXkNeo15RcIteRKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4i15DXoNeS15zXmdeqICjXkNeo15RcIteRKSwg16HXkteg15XXnyDXkdeZ16BcItecIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiLigI/XkNeg15LXnNeZ16ogKNeQ16jXlFwi15EpLCDXodeS16DXldefIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLigI/XkNeg15LXnNeZ16ogKNeQ16jXlFwi15EpLCDXodeS16DXldefIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4i15LXqNee16DXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+Item16jXpNeq15nXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLXpteo16TXqteZ16ogKNen16DXk9eUKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+Iteo15XXodeZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4i4oCP16jXldeh15nXqiwg16HXkteg15XXnyBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiLXodek16jXk9eZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+Item16jXpNeq15nXqiDXqdeV15XXmdem16jXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLXkteo157XoNeZ16og16nXldeV15nXpteo15nXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IteR15zXkteZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IteR15XXnNeS16jXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i15DXmdeY15zXp9eZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IteT16DXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiLXoNeV16jXldeV15LXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLXqdeV15XXk9eZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLXpNeZ16DXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iten16jXldeQ15jXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+ItemXCfXm9eZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i15DXodeY15XXoNeZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IteU15XXoNeS16jXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiLXkNeZ16HXnNeg15PXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLXkdeo15bXmdec15DXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4i16TXldeo15jXldeS15bXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLXodec15XXkden15nXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4i16HXnNeV15HXoNeZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiLXmNeV16jXp9eZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IteQ15XXp9eo15DXmdeg15nXqiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTBiNzI3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJJbnB1dCBEZXZpY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lk44Kt44O844Oc44O844OJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4i6Iux6Kqe77yI44Kk44Ku44Oq44K577yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4i6Iux6Kqe77yI44Ki44Oh44Oq44Kr77yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiLoi7Hoqp7vvIjjgqLjg6Hjg6rjgqvvvInjgIHjgqTjg7Pjgr/jg7zjg4rjgrfjg6fjg4rjg6vphY3liJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IuiLseiqnu+8iOOCouODoeODquOCq++8ieOAgUNvbGVtYWvphY3liJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLoi7Hoqp7vvIjjgqLjg6Hjg6rjgqvvvInjgIFEdm9yYWvphY3liJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IuODieOCpOODhOiqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiLjg5Xjg6njg7Pjgrnoqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4i44OV44Op44Oz44K56Kqe77yI44Kr44OK44OA77yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4i44Ot44K344Ki6KqeIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IuODreOCt+OCouiqnu+8iE1hY+mFjeWIl++8iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IuOCueODmuOCpOODs+iqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4i44OV44Op44Oz44K56Kqe77yI44K544Kk44K577yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLjg4njgqTjg4Toqp7vvIjjgrnjgqTjgrnvvIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiLjg5njg6vjgq7jg7zoqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IuODluODq+OCrOODquOCouiqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+IuOCpOOCv+ODquOCouiqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4i44OH44Oz44Oe44O844Kv6KqeIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiLjg47jg6vjgqbjgqfjg7zoqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IuOCueOCpuOCp+ODvOODh+ODs+iqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IuODleOCo+ODs+ODqeODs+ODieiqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLjgq/jg63jgqLjg4HjgqLoqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i44OB44Kn44Kz6KqeIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IuOCqOOCueODiOODi+OCouiqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i44OP44Oz44Ks44Oq44O86KqeIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiLjgqLjgqTjgrnjg6njg7Pjg4noqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IuODluODqeOCuOODq+mFjeWIlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IuODneODq+ODiOOCrOODq+iqniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4i44K544Ot44OQ44Kt44Ki6KqeIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLjgrnjg63jg5njg4vjgqLoqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiLjg4jjg6vjgrPoqp4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IuOCpuOCr+ODqeOCpOODiuiqniI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNTA3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiLhg6jhg5Thg6fhg5Xhg5Dhg5zhg5jhg6Eg4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkLeGDmOGDoSDhg5nhg5rhg5Dhg5Xhg5jhg5Dhg6Lhg6Phg6Dhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLhg5jhg5zhg5Lhg5rhg5jhg6Hhg6Phg6Dhg5ggKOGDkuGDkOGDoOGDly4g4YOh4YOQ4YObLikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiLhg5jhg5zhg5Lhg5rhg5jhg6Hhg6Phg6Dhg5ggKOGDkOGDqOGDqCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IuGDmOGDnOGDkuGDmuGDmOGDoeGDo+GDoOGDmCAo4YOQ4YOo4YOoKSwg4YOh4YOQ4YOU4YOg4YOX4YOQ4YOo4YOd4YOg4YOY4YOh4YOdIOGDoeGDouGDmOGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i4YOY4YOc4YOS4YOa4YOY4YOh4YOj4YOg4YOYICjhg5Dhg6jhg6gpLCBDb2xlbWFrIOGDoeGDouGDmOGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IuGDmOGDnOGDkuGDmuGDmOGDoeGDo+GDoOGDmCAo4YOQ4YOo4YOoKSwgRHZvcmFrIOGDoeGDouGDmOGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4i4YOS4YOU4YOg4YOb4YOQ4YOc4YOj4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IuGDpOGDoOGDkOGDnOGDkuGDo+GDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLhg6Thg6Dhg5Dhg5zhg5Lhg6Phg5rhg5ggKOGDmeGDkOGDnOGDkOGDk+GDkCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLhg6Dhg6Phg6Hhg6Phg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4i4YOg4YOj4YOh4YOj4YOa4YOYLCBNYWMg4YOh4YOi4YOY4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i4YOU4YOh4YOe4YOQ4YOc4YOj4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLhg6jhg5Xhg5Thg5jhg6rhg5Dhg6Dhg5jhg6Phg5rhg5gg4YOk4YOg4YOQ4YOc4YOS4YOj4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLhg6jhg5Xhg5Thg5jhg6rhg5Dhg6Dhg5jhg6Phg5rhg5gg4YOS4YOU4YOg4YOb4YOQ4YOc4YOj4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i4YOR4YOU4YOa4YOS4YOY4YOj4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLhg5Hhg6Phg5rhg5Lhg5Dhg6Dhg6Phg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLhg5jhg6Lhg5Dhg5rhg5jhg6Phg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IuGDk+GDkOGDnOGDmOGDo+GDoOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4i4YOc4YOd4YOg4YOV4YOU4YOS4YOY4YOj4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLhg6jhg5Xhg5Thg5Phg6Phg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLhg6Thg5jhg5zhg6Phg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i4YOu4YOd4YOg4YOV4YOQ4YOi4YOY4YOj4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IuGDqeGDlOGDruGDo+GDoOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLhg5Thg6Hhg6Lhg53hg5zhg6Phg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IuGDo+GDnOGDkuGDoOGDo+GDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i4YOY4YOh4YOa4YOQ4YOc4YOT4YOY4YOj4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLhg5Hhg6Dhg5Dhg5bhg5jhg5rhg5jhg6Phg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLhg57hg53hg6Dhg6Lhg6Phg5Lhg5Dhg5rhg5jhg6Phg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IuGDoeGDmuGDneGDleGDkOGDmeGDo+GDoOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4i4YOh4YOa4YOd4YOV4YOU4YOc4YOj4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i4YOX4YOj4YOg4YOl4YOj4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiLhg6Phg5nhg6Dhg5Dhg5jhg5zhg6Phg5rhg5giPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YThjOTliCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4i4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6bIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiLhnoDhn5LhnorhnrbhnprhnoXhnrvhnoXigIsgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IuGeouGehOGfi+GeguGfkuGem+GfgeGenyAo4oCL4Z6F4Z6A4Z+S4Z6a4Z6X4Z6W4oCL4Z6i4Z6E4Z+L4Z6C4Z+S4Z6b4Z+B4Z6fKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IuGeouGehOGfi+GeguGfkuGem+GfgeGenyAo4oCL4Z6f4Z6g4Z6a4Z6K4Z+S4Z6L4oCL4Z6i4Z624Z6Y4Z+B4Z6a4Z634Z6AKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4i4Z6i4Z6E4Z+L4Z6C4Z+S4Z6b4Z+B4Z6fICjhnp/hnqDhnprhnorhn5LhnovigIvhnqLhnrbhnpjhn4HhnprhnrfhnoDigIsp4oCLLCDigIvigIvhnprhnoXhnpPhnrbhnpThn5DhnpHhn5LhnpjigIvigIvhnqLhnpPhn5Lhno/hnprhnofhnrbhno/hnrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IuGeouGehOGfi+GeguGfkuGem+GfgeGenyAo4Z6f4Z6g4Z6a4Z6K4Z+S4Z6L4oCL4Z6i4Z624Z6Y4Z+B4Z6a4Z634Z6A4oCLKeKAiywg4oCL4oCL4Z6a4Z6F4Z6T4Z624Z6U4Z+Q4Z6R4Z+S4Z6YIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLhnqLhnoThn4vhnoLhn5Lhnpvhn4Hhnp8gKOGen+GeoOGemuGeiuGfkuGei+KAi+GeouGetuGemOGfgeGemuGet+GegOKAiynigIssIOKAi+KAi+GemuGeheGek+GetuGelOGfkOGekeGfkuGemCBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IuGeouGetuGem+GfkuGem+GeuuGemOGfieGehOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiLhnpThnrbhnprhnrbhn4bhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4i4Z6U4Z624Z6a4Z624Z+G4Z6EICjhnoDhnrbhno7hnrbhnorhnrbigIspIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4i4Z6a4Z674Z6f4Z+S4Z6f4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IuGemuGeu+Gen+GfkuGen+GeuCDigIvhnprhnoXhnpPhnrbhnpThn5DhnpHhn5LhnpggTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i4Z6i4Z+B4Z6f4Z+S4Z6U4Z+J4Z624Z6JIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLigIvigIvhnpThnrbhnprhnrbhn4bhnoTigIsg4Z6f4Z+S4Z6c4Z644Z6fIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLhnqLhnrbhnpvhn5Lhnpvhnrrhnpjhn4nhnoThn4sg4Z6f4Z+S4Z6c4Z644Z6fIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i4Z6U4Z+C4Z6b4Z6g4Z+S4Z6f4Z+K4Z634Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLhnpThn4rhnrvhnpvhnqDhn5LhnoDhnrbhnprhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiLhnqLhn4rhnrjhno/hnrbhnpvhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IuGeiuGetuGejuGeuuGemOGfieGetuGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4i4Z6T4Z+Q4Z6a4Z6c4Z+C4Z6fIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLhnp/hn4rhnrvhnpnhnqLhn4LhnooiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiLhnqDhn5Lhnpzhnrbhn4bhnoThnqHhnoThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i4Z6A4Z+S4Z6a4Z684Z6i4Z624Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IuGehuGfgeGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiLhnqLhn4Hhnp/hn5Lhno/hnrzhnpPhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IuGeoOGeu+GehOGeguGfkuGemuGeuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i4Z6i4Z+K4Z644Z6f4Z+S4Z6b4Z6E4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLhnpThn5Lhnprhn4Hhnp/hn4rhnrjhnpsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLhnpbhn5DhnprhnpHhnrvhnpnhnqDhn5LhnoLhnrbhnpvhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IuGen+GfkuGem+GevOGenOGfieGetuGeguGeuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4i4Z6f4Z+S4Z6b4Z684Z6c4Z+J4Z624Z6T4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i4Z6R4Z694Z6a4Z6C4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiLhnqLhn4rhnrvhnpnhnoDhn5Lhnprhn4LhnpMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3MTU4NgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4i7J6F66ClIOq4sOq4sCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCDtgqTrs7Trk5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLsmIHslrQo7JiB6rWtKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IuyYgeyWtCjrr7jqta0pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiLsmIHslrQo66+46rWtKSwg6riA66Gc67KMIOyKpO2DgOydvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i7JiB7Ja0KOuvuOq1rSksIOy9nOunpSDsiqTtg4DsnbwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLsmIHslrQo66+46rWtKSwg65Oc67O06529IOyKpO2DgOydvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4i64+F7J287Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+Iu2UhOuekeyKpOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLtlITrnpHsiqTslrQo7LqQ64KY64ukKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IuufrOyLnOyVhOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLrn6zsi5zslYTslrQsIE1hYyDsiqTtg4DsnbwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiLsiqTtjpjsnbjslrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+Iu2UhOuekeyKpOyWtCjsiqTsnITsiqQpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLrj4XsnbzslrQo7Iqk7JyE7IqkKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IuuyqOq4sOyXkOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4i67aI6rCA66as7JWE7Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i7J207YOI66as7JWE7Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiLrjbTrp4jtgazslrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+IuuFuOultOybqOydtOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4i7Iqk7Juo64207Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i7ZWA656A65Oc7Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iu2BrOuhnOyVhO2LsOyVhOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLssrTsvZTslrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i7JeQ7Iqk7Yag64uI7JWE7Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiLtl53qsIDrpqzslrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IuyVhOydtOyKrOuegOuTnOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4i67iM65287KeI7Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4i7Y+s66W07Yis6rCI7Ja0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLsiqzroZzrsJTtgqTslYTslrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IuyKrOuhnOuyoOuLiOyVhOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+Iu2EsO2CpOyWtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i7Jqw7YGs65287J2064KY7Ja0Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM5N2UxMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IuC6reC6uOC6m+C6sOC6geC6reC6meC6m+C7ieC6reC6meC6guC7jeC7ieC6oeC6ueC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4i4LuB4Lqb4LuJ4LqZ4Lqe4Lq04LqhIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLguq3gurHguofguoHgurTgupQgKOC6quC6sOC6q+C6sOC6peC6seC6lOC6iuC6sOC6reC6suC6meC6suC6iOC6seC6gSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiLguq3gurHguofguoHgurTgupQgKOC6quC6sOC6q+C6sOC6peC6seC6lOC6rykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IuC6reC6seC6h+C6geC6tOC6lCAo4Lqq4Lqw4Lqr4Lqw4Lql4Lqx4LqU4LqvKSwg4LuB4Lqa4Lqa4Lqq4Lqy4LqB4Lq74LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiLguq3gurHguofguoHgurTgupQgKOC6quC6sOC6q+C6sOC6peC6seC6lOC6ryksIOC7geC6muC6miBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4i4Lqt4Lqx4LqH4LqB4Lq04LqUICjguqrgurDguqvgurDguqXgurHgupTguq8pLCDgu4HguprgupogRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLgu4DguqLguo3guqXgurDguqHgurHgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i4Lqd4Lqj4Lqx4LuI4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IuC6neC6o+C6seC7iOC6hyAo4LqE4Lqy4LqZ4Lqy4LqU4LqyKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IuC6o+C6seC6lOC7gOC6iuC6jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLguqPgurHgupTguorgur3guo0sIOC7geC6muC6miBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiLguqrgurDgu4HgupvgupngupngurTgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IuC6quC6sOC6p+C6tOC6qiDgup3guqPgurHgu4jguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IuC6quC6sOC6p+C6tOC6qiDgu4DguqLguo3guqXgurDguqHgurHgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiLgu4DguprguqfguqLgu4ngur3gupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IuC6ruC6seC6h+C6geC6suC6o+C6veC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+IuC6reC6tOC6leC6suC6peC6veC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4i4LuA4LqU4Lqx4LqZ4LqZ4Lq04LqKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiLgupngu43gu4DguqfguoHgur3gupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IuC6quC6sOC6p+C6teC6lOC6tOC6iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IuC6n+C6tOC6meC6meC6tOC6iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLgu4LguoTguqPgu4Dguq3gupfgur3gupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i4LuA4LqK4LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IuC7gOC6reC6quC7guC6leC6meC6veC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i4Lqu4Lqx4LqH4LqB4Lqy4Lqj4Lq94LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiLgu4Tguq3guqrgu4HguqXgupngupTgurTguoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IuC6muC6o+C6suC6iuC6tOC6peC6veC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IuC6m+C7jeC6leC6ueC6geC6teC6qiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4i4Lqq4Lqw4LuC4Lql4LuB4Lqn4Lqx4LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLguqrgurDgu4LguqXgu4Dguqfgupngur3gupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiLgu4DgupXgurXguoHgurTguqoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IuC6ouC6ueC7gOC6hOC6o+C6meC6veC6mSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGVkMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJJbnB1dCBEZXZpY2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiLigJ5BbmRyb2lk4oCcIGtsYXZpYXTFq3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iQW5nbMWzIGsuIChKSykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJBbmdsxbMgay4gKEpBVikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkFuZ2zFsyBrLiAoSkFWKSwgdGFycHRhdXRpbmlzIHN0aWxpdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkFuZ2zFsyBrLiAoSkFWKSwg4oCeQ29sZW1ha+KAnCBzdGlsaXVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iQW5nbMWzIGsuIChKQVYpLCDigJ5Edm9yYWvigJwgc3RpbGl1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iVm9raWXEjWnFsyBrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJQcmFuY8WresWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IlByYW5jxat6xbMgay4gKEthbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXPFsyBrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXPFsyBrLiwg4oCeTWFj4oCcIHN0aWxpdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJJc3BhbsWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLFoHZlaWNhcmlqb3MgcHJhbmPFq3rFsyBrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4ixaB2ZWljYXJpam9zIHZva2llxI1pxbMgay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnxbMgay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkJ1bGdhcsWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXRhbMWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEYW7FsyBrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iTm9ydmVnxbMgay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IsWgdmVkxbMgay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJTdW9tacWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iktyb2F0xbMgay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4ixIxla8WzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdMWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJWZW5ncsWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2xhbmTFsyBrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhemlsxbMgay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdhbMWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJTbG92YWvFsyBrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4iU2xvdsSXbsWzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVya8WzIGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5pZcSNacWzIGsuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTg2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IklldmFkaWVyxKtjZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IkFuZHJvaWQgdGFzdGF0xatyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkFuZ8S8dSAoTGllbGJyaXTEgW5pamEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iQW5nxLx1IChBU1YpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJBbmfEvHUgKEFTViksIHN0YXJwdGF1dGlza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkFuZ8S8dSAoQVNWKSwgQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkFuZ8S8dSAoQVNWKSwgRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJWxIFjdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJGcmFuxI11Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IkZyYW7EjXUgKEthbsSBZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iS3JpZXZ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IktyaWV2dSwgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iU3DEgcWGdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4iRnJhbsSNdSAoxaB2ZWljZSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IlbEgWN1ICjFoHZlaWNlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IkJlxLzEo3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IkJ1bGfEgXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXTEgcS8dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRMSBxYZ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3J2xJPEo3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+Ilp2aWVkcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJTb211Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkhvcnbEgXR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IsSMZWh1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IklnYXXFhnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IlVuZ8SBcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IsSqc2xhbmRpZcWhdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhesSrxLx1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVnxIHEvHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3bEgWt1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92xJPFhnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUdXJrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVWtyYWnFhnUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzZjY2NiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4i0J7RgNGD0YPQu9Cw0YUg0KLTqdGF06nTqdGA06nQvNC2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiLQkNC90LTRgNC+0LnQtCDQs9Cw0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLQkNC90LPQu9C4ICjQmNCRKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ItCQ0L3Qs9C70LggKNCQ0J3QoykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+ItCQ0L3Qs9C70LggKNCQ0J3QoyksINCe0LvQvtC9INGD0LvRgdGL0L0g0YHRgtC40LvRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i0JDQvdCz0LvQuCAo0JDQndCjKSwg0JrQvtC70LXQvNCw0Log0YHRgtC40LvRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+ItCQ0L3Qs9C70LggKNCQ0J3QoyksINCU0LLQvtGA0LDQuiDRgdGC0LjQu9GMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLQk9C10YDQvNCw0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i0KTRgNCw0L3RhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLQpNGA0LDQvdGGICjQmtCw0L3QsNC0KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+ItCe0YDQvtGBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+ItCe0YDQvtGBLCBNYdC6INGB0YLQuNC70YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiLQmNGB0L/QsNC90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+ItCo0LLQtdC50YbQsNGA0LjQudC9INCk0YDQsNC90YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+ItCo0LLQtdC50YbQsNGA0LjQudC9INCT0LXRgNC80LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+ItCR0LXQu9GM0LPQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4i0JHQvtC70LPQsNGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i0JjRgtCw0LvQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4i0JTQsNC90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+ItCd0L7RgNCy0LXQs9C4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLQqNCy0LXQtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+ItCk0LjQvdC70Y/QvdC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+ItCl0L7RgNCy0LDRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLQp9C10YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i0K3RgdGC0L7QvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i0KPQvdCz0LDRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i0JjRgdC70LDQvdC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLQkdGA0LDQt9C40LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLQn9C+0YDRgtGD0LPQsNC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLQodC70L7QstCw0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+ItCh0LvQvtCy0LXQvdC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i0KLRg9GA0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+ItCj0LrRgNCw0LnQvSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NmYwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJQZXJhbnRpIElucHV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJQYXBhbiBrZWt1bmNpIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJCYWhhc2EgSW5nZ2VyaXMgKFVLKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkJhaGFzYSBJbmdnZXJpcyAoQVMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJCYWhhc2EgSW5nZ2VyaXMgKEFTKSwgZ2F5YSBBL2JhbmdzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iQmFoYXNhIEluZ2dlcmlzIChBUyksIGdheWEgQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkJhaGFzYSBJbmdnZXJpcyAoQVMpLCBnYXlhIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iQmFoYXNhIEplcm1hbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJCYWhhc2EgUGVyYW5jaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iQmFoYXNhIFBlcmFuY2lzIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iQmFoYXNhIFJ1c2lhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IkJhaGFzYSBSdXNpYSwgZ2F5YSBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJCYWhhc2EgU2VwYW55b2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IlBlcmFuY2lzIFN3aXR6ZXJsYW5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJKZXJtYW4gU3dpdHplcmxhbmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCYWhhc2EgQmVsZ2l1bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQmFoYXNhIEJ1bGdhcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iQmFoYXNhIEl0YWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJCYWhhc2EgRGVubWFyayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iQmFoYXNhIE5vcndheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iQmFoYXNhIFN3ZWRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IkJhaGFzYSBGaW5sYW5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkJhaGFzYSBDcm9hdGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IkJhaGFzYSBDemVjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJCYWhhc2EgRXN0b25pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4iQmFoYXNhIEh1bmdhcnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IkJhaGFzYSBJY2VsYW5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJCYWhhc2EgQnJhemlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iQmFoYXNhIFBvcnR1Z2lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJCYWhhc2EgU2xvdmFraWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IkJhaGFzYSBTbG92ZW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IkJhaGFzYSBUdXJraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iQmFoYXNhIFVrcmFpbmUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY0NjA2MQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW5uZGF0YWVuaGV0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IkFuZHJvaWQtdGFzdGF0dXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJFbmdlbHNrIChTdG9yYnJpdGFubmlhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IkVuZ2Vsc2sgKFVTQSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkVuZ2Vsc2sgKFVTQSksIGludGVybmFzam9uYWwgc3RpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iRW5nZWxzayAoVVNBKSwgQ29sZW1hay1zdGlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iRW5nZWxzayAoVVNBKSwgRHZvcmFrLXN0aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IlR5c2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IkZyYW5zayAoQ2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IlJ1c3Npc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUnVzc2lzaywgTWFjLXN0aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJTcGFuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IlN2ZWl0c2lzayBmcmFuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IlN2ZWl0c2lzayBzdGFuZGFyZHR5c2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnaXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCdWxnYXJzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpZW5zayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRGFuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJTdmVuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5zayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJLcm9hdGlzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJUc2pla2tpc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0aXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJVbmdhcnNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2xhbmRzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsaWFuc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdpc2lzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvdmFraXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5zayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR5cmtpc2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVrcmFpbnNrIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZDg0YzkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+Ikludm9lcmFwcGFyYXRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZC10b2V0c2VuYm9yZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkVuZ2VscyAoVmVyZW5pZ2QgS29uaW5rcmlqaykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJFbmdlbHMgKFZlcmVuaWdkZSBTdGF0ZW4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJFbmdlbHMgKFZTKSwgaW50ZXJuYXRpb25hYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkVuZ2VscyAoVlMpLCBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iRW5nZWxzIChWUyksIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iRHVpdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbnMgKENhbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXNzaXNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXNzaXNjaCwgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iU3BhYW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJad2l0c2VycyBGcmFucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iWndpdHNlcnMgRHVpdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnaXNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FhcnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJJdGFsaWFhbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IkRlZW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb29ycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4iWndlZWRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJLcm9hdGlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iVHNqZWNoaXNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJFc3RsYW5kcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4iSG9uZ2FhcnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklKc2xhbmRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJCcmF6aWxpYWFucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IlBvcnR1Z2VlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvd2Fha3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IlNsb3ZlZW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVya3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+Ik9la3Jhw69lbnMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyMjIxNQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iVXJ6xIVkemVuaWEgd2VqxZtjaW93ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iS2xhd2lhdHVyYSBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iQW5naWVsc2tpIChXaWVsa2EgQnJ5dGFuaWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iQW5naWVsc2tpIChVU0EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJBbmdpZWxza2kgKFVTQSksIG1pxJlkenluYXJvZG93eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iQW5naWVsc2tpIChVU0EpLCBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iQW5naWVsc2tpIChVU0EpLCBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+Ik5pZW1pZWNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJGcmFuY3Vza2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbmN1c2tpIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUm9zeWpza2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUm9zeWpza2ksIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+Ikhpc3pwYcWEc2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJGcmFuY3Vza2kgKFN6d2FqY2FyaWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJOaWVtaWVja2kgKFN6d2FqY2FyaWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lqc2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCdcWCZ2Fyc2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iV8WCb3NraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRHXFhHNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iTm9yd2Vza2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN6d2VkemtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmnFhHNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJDaG9yd2Fja2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iQ3plc2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG/FhHNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4iV8SZZ2llcnNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iSXNsYW5kemtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJCcmF6eWxpanNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IlBvcnR1Z2Fsc2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJTxYJvd2Fja2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IlPFgm93ZcWEc2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVHVyZWNraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVWtyYWnFhHNraSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNjM5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJEaXNwb3NpdGl2b3MgZGUgZW50cmFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iVGVjbGFkbyBkbyBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iSW5nbMOqcyAoUlUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iSW5nbMOqcyAoRVVBKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iSW5nbMOqcyAoRVVBKSwgZXN0LiBJbnRlcm5hY2lvbmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJJbmdsw6pzIChFVUEpLCBlc3RpbG8gQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkluZ2zDqnMgKEVVQSksIGVzdGlsbyBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IkFsZW3Do28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbmPDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbmPDqnMgKENhbmFkw6EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnVzc28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUnVzc28sIGVzdGlsbyBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJFc3BhbmhvbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4iRnJhbmPDqnMgKFN1w63Dp2EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJBbGVtw6NvIChTdcOtw6dhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IkJlbGdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCw7psZ2FybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpYW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEaW5hbWFycXXDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnVlZ3XDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN1ZWNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlubGFuZMOqcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJDcm9hdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iQ2hlY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0w7NuaW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IkjDum5nYXJvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2xhbmTDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IkJyYXNpbGVpcm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWd1w6pzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJFc2xvdmFjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4iRXNsb3Zlbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUdXJjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVWNyYW5pYW5vIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YTBjZDAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IkRpc3Bvc2l0aXZvcyBkZSBlbnRyYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJUZWNsYWRvIGRvIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJJbmdsw6pzIChSZWlubyBVbmlkbykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJJbmdsw6pzIChFVUEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJJbmdsw6pzIChFVUEpLCBlc3RpbG8gaW50ZXJuYWNpb25hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iSW5nbMOqcyAoRVVBKSwgZXN0aWxvIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJJbmdsw6pzIChFVUEpLCBlc3RpbG8gRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJBbGVtw6NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyYW5jw6pzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IkZyYW5jw6pzIChDYW5hZMOhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IlJ1c3NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c3NvLCBlc3RpbG8gTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iRXNwYW5ob2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IkZyYW5jw6pzIHN1w63Dp28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IkFsZW3Do28gc3XDrcOnbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IkJlbGdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCw7psZ2FybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpYW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJEaW5hbWFycXXDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Ik5vcnVlZ3XDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN1ZWNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlubGFuZMOqcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJDcm9hdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iVGNoZWNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uaWFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4iSMO6bmdhcm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklzbGFuZMOqcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhc2lsZWlybyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IlBvcnR1Z3XDqnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IkVzbG92YWNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJFc2xvdmVubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVY3Jhbmlhbm8iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1ZDhmNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iRGlzcG96aXRpdmUgZGUgaW50cm9kdWNlcmUgZGUgZGF0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iVGFzdGF0dXLEgyBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iRW5nbGV6xIMgKFJlZ2F0dWwgVW5pdCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJFbmdsZXrEgyAoU1VBKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iRW5nbGV6xIMgKFNVQSksIHN0aWwgaW50ZXJuYcibaW9uYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkVuZ2xlesSDIChTVUEpLCBzdGlsIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJFbmdsZXrEgyAoU1VBKSwgc3RpbCBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+Ikdlcm1hbsSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyYW5jZXrEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmFuY2V6xIMgKENhbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXPEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXPEgywgc3RpbCBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJTcGFuaW9sxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IkZyYW5jZXrEgyAoRWx2ZcibaWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJHZXJtYW7EgyAoRWx2ZcibaWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lhbsSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCdWxnYXLEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpYW7EgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRGFuZXrEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iTm9ydmVnaWFuxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN1ZWRlesSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmlubGFuZGV6xIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iQ3JvYXTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJDZWjEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJFc3RvbmlhbsSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJNYWdoaWFyxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IklzbGFuZGV6xIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IkJyYXppbGlhbsSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVnaGV6xIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3ZhY8SDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW7EgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmPEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVWNyYWluZWFuxIMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRjYmZkNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4i0KPRgdGC0YDQvtC50YHRgtCy0LAg0LLQstC+0LTQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4i0JrQu9Cw0LLQuNCw0YLRg9GA0LAgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+ItCw0L3Qs9C70LjQudGB0LrQuNC5ICjQktC10LvQuNC60L7QsdGA0LjRgtCw0L3QuNGPKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ItCw0L3Qs9C70LjQudGB0LrQuNC5ICjQodCo0JApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiLQsNC90LPQu9C40LnRgdC60LjQuSAo0KHQqNCQLCDQvNC10LbQtNGD0L3QsNGA0L7QtNC90LDRjykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+ItCw0L3Qs9C70LjQudGB0LrQuNC5ICjQodCo0JAsIENvbGVtYWspIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4i0LDQvdCz0LvQuNC50YHQutC40LkgKNCh0KjQkCwgRHZvcmFrKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4i0L3QtdC80LXRhtC60LjQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiLRhNGA0LDQvdGG0YPQt9GB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+ItGE0YDQsNC90YbRg9C30YHQutC40LkgKNCa0LDQvdCw0LTQsCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLRgNGD0YHRgdC60LjQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLRgNGD0YHRgdC60LjQuSAoTWFjKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+ItC40YHQv9Cw0L3RgdC60LjQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4i0YTRgNCw0L3RhtGD0LfRgdC60LjQuSAo0KjQstC10LnRhtCw0YDQuNGPKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4i0L3QtdC80LXRhtC60LjQuSAo0KjQstC10LnRhtCw0YDQuNGPKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+ItC90LjQtNC10YDQu9Cw0L3QtNGB0LrQuNC5ICjQkdC10LvRjNCz0LjRjykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+ItCx0L7Qu9Cz0LDRgNGB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i0LjRgtCw0LvRjNGP0L3RgdC60LjQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4i0LTQsNGC0YHQutC40LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+ItC90L7RgNCy0LXQttGB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLRiNCy0LXQtNGB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i0YTQuNC90YHQutC40LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i0YXQvtGA0LLQsNGC0YHQutC40LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i0YfQtdGI0YHQutC40LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i0Y3RgdGC0L7QvdGB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiLQstC10L3Qs9C10YDRgdC60LjQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i0LjRgdC70LDQvdC00YHQutC40LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+ItC/0L7RgNGC0YPQs9Cw0LvRjNGB0LrQuNC5ICjQkdGA0LDQt9C40LvQuNGPKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+ItC/0L7RgNGC0YPQs9Cw0LvRjNGB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLRgdC70L7QstCw0YbQutC40LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+ItGB0LvQvtCy0LXQvdGB0LrQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4i0YLRg9GA0LXRhtC60LjQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i0YPQutGA0LDQuNC90YHQutC40LkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFhYjA0MgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iVnN0dXBuw6kgemFyaWFkZW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iS2zDoXZlc25pY2EgQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+ImFuZ2xpY2vDqSAoU3BvamVuw6kga3LDocS+b3ZzdHZvKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ImFuZ2xpY2vDqSAoVVNBKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iYW5nbGlja8OpIChVU0EpLCBtZWR6aW7DoXJvZG7DqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4iYW5nbGlja8OpIChVU0EpLCDFoXTDvWwgQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+ImFuZ2xpY2vDqSAoVVNBKSwgxaF0w71sIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4ibmVtZWNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iZnJhbmPDunpza2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iZnJhbmPDunpza2UgKEthbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJydXNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4icnVza8OpLCDFoXTDvWwgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4ixaFwYW5pZWxza2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IsWhdmFqxI1pYXJza2UgKGZyYW5jw7p6xaF0aW5hKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4ixaF2YWrEjWlhcnNrZSAobmVtxI1pbmEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iYmVsZ2lja8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJidWxoYXJza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4idGFsaWFuc2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJkw6Fuc2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJuw7Nyc2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLFoXbDqWRza2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJmw61uc2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+ImNob3J2w6F0c2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IsSNZXNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iZXN0w7Nuc2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJtYcSPYXJza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJpc2xhbmRza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJicmF6w61sc2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4icG9ydHVnYWxza8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJzbG92ZW5za8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJzbG92aW5za8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4idHVyZWNrw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+InVrcmFqaW5za8OpIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZmYzYzQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IlZob2RuZSBuYXByYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJUaXBrb3ZuaWNhIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJhbmdsZcWha2EgKFpkcnXFvmVubyBrcmFsamVzdHZvKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ImFuZ2xlxaFrYSAoWkRBKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iYW5nbGXFoWthIChaREEpLCBtZWRuYXJvZG5pIHNsb2ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+ImFuZ2xlxaFrYSAoWkRBKSwgc2xvZyBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iYW5nbGXFoWthIChaREEpLCBzbG9nIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4ibmVtxaFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJmcmFuY29za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iZnJhbmNvc2thIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4icnVza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4icnVza2EsIHNsb2cgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4ixaFwYW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IsWhdmljYXJza2EgZnJhbmNvc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLFoXZpY2Fyc2thIG5lbcWha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJiZWxnaWpza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+ImJvbGdhcnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Iml0YWxpamFuc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJkYW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+Im5vcnZlxaFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4ixaF2ZWRza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJmaW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iaHJ2YcWha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4ixI1lxaFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJlc3RvbnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4ibWFkxb5hcnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iaXNsYW5kc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJicmF6aWxza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJwb3J0dWdhbHNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4ic2xvdmHFoWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJzbG92ZW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJ0dXLFoWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJ1a3Jhamluc2thIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyM2FjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+ItCj0LvQsNC30L3QuCDRg9GA0LXRktCw0ZjQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCDRgtCw0YHRgtCw0YLRg9GA0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLQtdC90LPQu9C10YHQutCwICjQo9CaKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+ItC10L3Qs9C70LXRgdC60LAgKNCh0JDQlCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+ItC10L3Qs9C70LXRgdC60LAgKNCh0JDQlCksINC80LXRktGD0L3QsNGA0L7QtNC90Lgg0YHRgtC40LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+ItC10L3Qs9C70LXRgdC60LAgKNCh0JDQlCksIENvbGVtYWsg0YHRgtC40LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLQtdC90LPQu9C10YHQutCwICjQodCQ0JQpLCBEdm9yYWsg0YHRgtC40LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+ItC90LXQvNCw0YfQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+ItGE0YDQsNC90YbRg9GB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiLRhNGA0LDQvdGG0YPRgdC60LAgKNCa0LDQvdCw0LTQsCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiLRgNGD0YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+ItGA0YPRgdC60LAsIE1hYyDRgdGC0LjQuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+ItGI0L/QsNC90YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLRiNCy0LDRmNGG0LDRgNGB0LrQviDRhNGA0LDQvdGG0YPRgdC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+ItGI0LLQsNGY0YbQsNGA0YHQutC+INC90LXQvNCw0YfQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4i0LHQtdC70LPQuNGY0YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLQsdGD0LPQsNGA0YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i0LjRgtCw0LvQuNGY0LDQvdGB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4i0LTQsNC90YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiLQvdC+0YDQstC10YjQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLRiNCy0LXQtNGB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+ItGE0LjQvdGB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLRhdGA0LLQsNGC0YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+ItGH0LXRiNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i0LXRgdGC0L7QvdGB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i0LzQsNGS0LDRgNGB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i0LjRgdC70LDQvdC00YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiLQsdGA0LDQt9C40LvRgdC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLQv9C+0YDRgtGD0LPQsNC70YHQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLRgdC70L7QstCw0YfQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLRgdC70L7QstC10L3QsNGH0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+ItGC0YPRgNGB0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i0YPQutGA0LDRmNC40L3RgdC60LAiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhNWFlOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW5kYXRhZW5oZXRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZHMgdGFuZ2VudGJvcmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJFbmdlbHNrdCAoU3RvcmJyaXRhbm5pZW4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iRW5nZWxza3QgKFVTQSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkVuZ2Vsc2t0IChVU0EpLCBpbnRlcm5hdGlvbmVsbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkVuZ2Vsc2t0IChVU0EpLCBjb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iRW5nZWxza3QgKFVTQSksIGR2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iVHlza3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iRnJhbnNrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmFuc2t0IChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4iUnlza3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4iUnlza3QsIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlNwYW5za3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IkZyYW5za3QgKFNjaHdlaXopIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJUeXNrdCAoU2Nod2VpeikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWxnaXNrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FyaXNrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+Ikl0YWxpZW5za3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IkRhbnNrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iTm9yc2t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJTdmVuc2t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmluc2t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iktyb2F0aXNrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJUamVja2lza3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iRXN0bmlza3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IlVuZ2Vyc2t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2zDpG5kc2t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJQb3J0dWdpc2lza3QgKEJyYXNpbGllbikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0dWdpc2lza3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IlNsb3Zha2lza3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IlNsb3ZlbnNrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IlR1cmtpc2t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5za3QiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVhYjk2YTEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IlZpZmFhIEluZ2l6aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iS2lib2RpIHlhIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiJLaWluZ2VyZXphIChVaW5nZXJlemEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iS2lpbmdlcmV6YSAoTWFyZWthbmkpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfaW50bCIgbXNnaWQ9IjM3MDUxNjg1OTQwMzQyMzM1ODMiPiJLaWluZ2VyZXphIChNYXJla2FuaSksIE11dW5kbyB3YSBLaW1hdGFpZmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IktpaW5nZXJlemEgKE1hcmVrYW5pKSwgTXV1bmRvIHdhIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiJLaWluZ2VyZXphIChNYXJla2FuaSksIE11dW5kbyB3YSBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IktpamVydW1hbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4iS2lmYXJhbnNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IktpZmFyYW5zYSAoS2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IktpcnVzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJLaXJ1c2ksIE11dW5kbyB3YSBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYWJlbCIgbXNnaWQ9IjcwOTE1NTUxNDgxMzE5MDgyNDAiPiJLaWhpc3BhbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJLaWZhcmFuc2EgY2hhIFVzd2lzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iS2lqZXJ1bWFuaSBjaGEgVXN3aXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iS2liZWxnaWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJLaWJ1bGdhcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iS2lpdGFsaWFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iS2lkZW5tYXJraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4iS2lub3J3ZWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+Iktpc3dpZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJLaWZpbmxhbmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+Iktpa3JvZXNoaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4iS2ljaGVraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lc3RvbmlhbiIgbXNnaWQ9Ijg3NzU4MzA5ODUxODU2NjUyNzQiPiJLaWVzdG9uaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+IktpaHVuZ2FyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4iS2lhaXNsYW5kaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iS2licmF6aWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iS2lyZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJLaXNsb3Zha2lhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJLaXNsb3ZlbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iS2l0dXJ1a2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IktpdWtyYW5pYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2M3ZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiLguK3guLjguJvguIHguKPguJPguYzguK3guLTguJnguJ7guLjguJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+IuC5geC4m+C5ieC4meC4nuC4tOC4oeC4nuC5jOC5geC4reC4meC4lOC4o+C4reC4ouC4lOC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IuC4reC4seC4h+C4geC4pOC4qSAo4Liq4Lir4Lij4Liy4LiK4Lit4Liy4LiT4Liy4LiI4Lix4LiB4LijKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2xhYmVsIiBtc2dpZD0iODk5NDg5MDI0OTY0OTEwNjI5MSI+IuC4reC4seC4h+C4geC4pOC4qSAo4Lit4LmA4Lih4Lij4Li04LiB4Lix4LiZKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4i4Lit4Lix4LiH4LiB4Lik4LipICjguK3guYDguKHguKPguLTguIHguLHguJkpLCDguKPguLnguJvguYHguJrguJrguJnguLLguJnguLLguIrguLLguJXguLQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IuC4reC4seC4h+C4geC4pOC4qSAo4Lit4LmA4Lih4Lij4Li04LiB4Lix4LiZKSwg4Lij4Li54Lib4LmB4Lia4LiaIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLguK3guLHguIfguIHguKTguKkgKOC4reC5gOC4oeC4o+C4tOC4geC4seC4mSksIOC4o+C4ueC4m+C5geC4muC4miBEdm9yYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ2VybWFuX2xhYmVsIiBtc2dpZD0iODQ1MTU2NTg2NTQ2NzkwOTk5OSI+IuC5gOC4ouC4reC4o+C4oeC4seC4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiLguJ3guKPguLHguYjguIfguYDguKjguKoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4i4Lid4Lij4Lix4LmI4LiH4LmA4Lio4LiqICjguYHguITguJnguLLguJTguLIpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4i4Lij4Lix4Liq4LmA4LiL4Li14LiiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IuC4o+C4seC4quC5gOC4i+C4teC4oiwg4Lij4Li54Lib4LmB4Lia4LiaIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IuC4quC5gOC4m+C4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4i4Lid4Lij4Lix4LmI4LiH4LmA4Lio4LiqICjguKrguKfguLTguKopIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiLguYDguKLguK3guKPguKHguLHguJnguKrguKfguLTguKoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiLguYDguJrguKXguYDguKLguLXguKLguKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+IuC4muC4seC4peC5geC4geC5gOC4o+C4teC4oiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+IuC4reC4tOC4leC4suC4peC4tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4i4LmA4LiU4LiZ4Lih4Liy4Lij4LmM4LiBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiLguJnguK3guKPguYzguYDguKfguKLguYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IuC4quC4p+C4teC5gOC4lOC4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IuC4n+C4tOC4meC5geC4peC4meC4lOC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiLguYLguITguKPguYDguK3guYDguIrguLXguKIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i4LmA4LiK4LmH4LiBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IuC5gOC4reC4quC5guC4leC5gOC4meC4teC4oiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i4Liu4Lix4LiH4LiB4Liy4Lij4Li1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiLguYTguK3guIvguYzguYHguKXguJnguJTguLTguIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IuC4muC4o+C4suC4i+C4tOC4pSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9wb3J0dWd1ZXNlIiBtc2dpZD0iMjg4ODE5ODU4NzMyOTY2MDMwNSI+IuC5guC4m+C4o+C4leC4uOC5gOC4geC4qiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4i4Liq4LmC4Lil4Lin4Lix4LiBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLguKrguYLguKXguKfguLXguYDguJnguLXguKIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiLguJXguLjguKPguIHguLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IuC4ouC4ueC5gOC4hOC4o+C4mSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGYzNGQyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiJNZ2EgSW5wdXQgRGV2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkIGtleWJvYXJkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iSW5nbGVzIChVSykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJJbmdsZXMgKFVTKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iSW5nbGVzIChVUyksIGlzdGlsb25nIEludGVybmF0aW9uYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkluZ2xlcyAoVVMpLCBpc3RpbG9uZyBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iSW5nbGVzIChVUyksIGlzdGlsb25nIER2b3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9nZXJtYW5fbGFiZWwiIG1zZ2lkPSI4NDUxNTY1ODY1NDY3OTA5OTk5Ij4iR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyZW5jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfY2FfbGFiZWwiIG1zZ2lkPSIzNjUzNTI2MDEwNjA2MDQ4MzIiPiJGcmVuY2ggKENhbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJSdXNzaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IlJ1c3NpYW4sIGlzdGlsb25nIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlNwYW5pc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IlN3aXNzIEZyZW5jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4iU3dpc3MgR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iQmVsZ2lhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iQnVsZ2FyaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iSXRhbGlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9kYW5pc2giIG1zZ2lkPSI4MDM2NDMyMDY2NjI3MTI3ODUxIj4iRGFuaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3J3ZWdpYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dlZGlzaCIgbXNnaWQ9IjczMjk1OTEwOTA4ODQ3OTM1MSI+IlN3ZWRpc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZmlubmlzaCIgbXNnaWQ9IjU1ODU2NTk0Mzg5MjQzMTU0NjYiPiJGaW5uaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IkNyb2F0aWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2N6ZWNoIiBtc2dpZD0iMTM0OTI1NjkwMTQ1Mjk3NTM0MyI+IkN6ZWNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJIdW5nYXJpYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IkljZWxhbmRpYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iQnJhemlsaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iUG9ydHVndWVzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4iU2xvdmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiJTbG92ZW5pYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUdXJraXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3VrcmFpbmlhbiIgbXNnaWQ9IjgxNzY2Mzc3NDQzODk0ODA0MTciPiJVa3JhaW5pYW4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdjMTI2MgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iSW5wdXQgRGV2aWNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCBrbGF2eWVzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IsSwbmdpbGl6Y2UgKMSwbmdpbHRlcmUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4ixLBuZ2lsaXpjZSAoQUJEKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4ixLBuZ2lsaXpjZSAoQUJEKSBVbHVzbGFyYXJhc8SxIHN0aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IsSwbmdpbGl6Y2UgKEFCRCkgQ29sZW1hayBzdGlsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IsSwbmdpbGl6Y2UgKEFCRCkgRHZvcmFrIHN0aWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJBbG1hbmNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IkZyYW5zxLF6Y2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iRnJhbnPEsXpjYSAoS2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IlJ1c8OnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJSdXPDp2EsIE1hYyBzdGlsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IsSwc3BhbnlvbGNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLEsHN2acOncmUgRnJhbnPEsXpjYXPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4ixLBzdmnDp3JlIEFsbWFuY2FzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJCZWzDp2lrYSBkaWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJCdWxnYXJjYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+IsSwdGFseWFuY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+IkRhbmNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJOb3J2ZcOnw6dlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLEsHN2ZcOnw6dlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iRmluY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4iSMSxcnZhdMOnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLDh2Vrw6dlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+IkVzdG9uY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaHVuZ2FyaWFuIiBtc2dpZD0iNDE1NDk2MzY2MTQwNjAzNTEwOSI+Ik1hY2FyY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IsSwemxhbmRhY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+IkJyZXppbHlhIGRpbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJQb3J0ZWtpemNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJTbG92YWvDp2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IlNsb3ZlbmNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3R1cmtpc2giIG1zZ2lkPSI3NzM2MTYzMjUwOTA3OTY0ODk4Ij4iVMO8cmvDp2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+IlVrcmF5bmFjYSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTZmZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjgwMTYxNDUyODMxODk1NDYwMTciPiLQn9GA0LjRgdGC0YDQvtGXINCy0LLQvtC00YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRzX2xhYmVsIiBtc2dpZD0iNjY4ODc3MzI2ODMwMjA4NzU0NSI+ItCa0LvQsNCy0ZbQsNGC0YPRgNCwIEFuZHJvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLQsNC90LPQu9GW0LnRgdGM0LrQsCAo0JLQtdC70LjQutC+0LHRgNC40YLQsNC90ZbRjykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiLQsNC90LPQu9GW0LnRgdGM0LrQsCAo0KHQqNCQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4i0LDQvdCz0LvRltC50YHRjNC60LAgKNCh0KjQkCksINC80ZbQttC90LDRgNC+0LTQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiLQsNC90LPQu9GW0LnRgdGM0LrQsCAo0KHQqNCQKSwg0YDQvtC30LrQu9Cw0LTQutCwIENvbGVtYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLQsNC90LPQu9GW0LnRgdGM0LrQsCAo0KHQqNCQKSwg0YDQvtC30LrQu9Cw0LTQutCwINCU0LLQvtGA0LDQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLQvdGW0LzQtdGG0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+ItGE0YDQsNC90YbRg9C30YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+ItGE0YDQsNC90YbRg9C30YzQutCwICjQmtCw0L3QsNC00LApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4i0YDQvtGB0ZbQudGB0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+ItGA0L7RgdGW0LnRgdGM0LrQsCwg0YDQvtC30LrQu9Cw0LTQutCwIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+ItGW0YHQv9Cw0L3RgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19mcmVuY2hfbGFiZWwiIG1zZ2lkPSI0NjU5MTkxMDI1Mzk2MzcxNjg0Ij4i0YTRgNCw0L3RhtGD0LfRjNC60LAgKNCo0LLQtdC50YbQsNGA0ZbRjykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+ItC90ZbQvNC10YbRjNC60LAgKNCo0LLQtdC50YbQsNGA0ZbRjykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiLQsdC10LvRjNCz0ZbQudGB0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiLQsdC+0LvQs9Cw0YDRgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+ItGW0YLQsNC70ZbQudGB0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiLQtNCw0L3RgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4i0L3QvtGA0LLQtdC30YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLRiNCy0LXQtNGB0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i0YTRltC90YHRjNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3JvYXRpYW4iIG1zZ2lkPSI0MTcyMjI5NDcxMDc5MjgxMTM4Ij4i0YXQvtGA0LLQsNGC0YHRjNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfY3plY2giIG1zZ2lkPSIxMzQ5MjU2OTAxNDUyOTc1MzQzIj4i0YfQtdGB0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+ItC10YHRgtC+0L3RgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9odW5nYXJpYW4iIG1zZ2lkPSI0MTU0OTYzNjYxNDA2MDM1MTA5Ij4i0YPQs9C+0YDRgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pY2VsYW5kaWMiIG1zZ2lkPSI1ODM2NjQ1NjUwOTEyNDg5NjQyIj4i0ZbRgdC70LDQvdC00YHRjNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnJhemlsaWFuIiBtc2dpZD0iNTExNzg5NjQ0MzE0Nzc4MTkzOSI+ItCx0YDQsNC30LjQu9GM0YHRjNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiLQv9C+0YDRgtGD0LPQsNC70YzRgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92YWsiIG1zZ2lkPSIyNDY5Mzc5OTM0NjcyODM3Mjk2Ij4i0YHQu9C+0LLQsNGG0YzQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZlbmlhbiIgbXNnaWQ9IjE3MzU5MzMwMjg5MjQ5ODIzNjgiPiLRgdC70L7QstC10L3RgdGM0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+ItGC0YPRgNC10YbRjNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+ItGD0LrRgNCw0ZfQvdGB0YzQutCwIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNjVlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IlRoaeG6v3QgYuG7iyDEkeG6p3UgdsOgbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQsOgbiBwaMOtbSBBbmRyb2lkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdWtfbGFiZWwiIG1zZ2lkPSI2NjY0MjU4NDYzMzE5OTk5NjMyIj4iVGnhur9uZyBBbmggKEFuaCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJUaeG6v25nIEFuaCAoTeG7uSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IlRp4bq/bmcgQW5oIChN4bu5KSwga2nhu4N1IFF14buRYyB04bq/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJUaeG6v25nIEFuaCAoTeG7uSksIGtp4buDdSBDb2xlbWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iVGnhur9uZyBBbmggKE3hu7kpLCBraeG7g3UgRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJUaeG6v25nIMSQ4bupYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJUaeG6v25nIFBow6FwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IlRp4bq/bmcgUGjDoXAgKENhbmFkYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9sYWJlbCIgbXNnaWQ9Ijg3MjQ4Nzk3NzU4MTUwNDI5NjgiPiJUaeG6v25nIE5nYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiJUaeG6v25nIE5nYSwga2nhu4N1IE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zcGFuaXNoX2xhYmVsIiBtc2dpZD0iNzA5MTU1NTE0ODEzMTkwODI0MCI+IlRp4bq/bmcgVMOieSBCYW4gTmhhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiJUaeG6v25nIFBow6FwIOG7nyBUaOG7pXkgU8SpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2dlcm1hbl9sYWJlbCIgbXNnaWQ9IjIzMDU1MjA5NDE5OTMzMTQyNTgiPiJUaeG6v25nIMSQ4bupYyBUaOG7pXkgU8SpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JlbGdpYW4iIG1zZ2lkPSIyMDExOTg0NTcyODM4NjUxNTU4Ij4iVGnhur9uZyBC4buJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2J1bGdhcmlhbiIgbXNnaWQ9Ijg5NTEyMjQzMDk5NzIwMjgzOTgiPiJUaeG6v25nIEJ1bmdhcnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaXRhbGlhbiIgbXNnaWQ9IjY0OTcwNzk2NjA0NDk3ODEyMTMiPiJUaeG6v25nIMOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJUaeG6v25nIMSQYW4gTeG6oWNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJUaeG6v25nIE5hIFV5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJUaeG6v25nIFRo4buleSDEkGnhu4NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4iVGnhur9uZyBQaOG6p24gTGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IlRp4bq/bmcgQ3JvYXRpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJUaeG6v25nIFPDqWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iVGnhur9uZyBFc3RvbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJUaeG6v25nIEh1bmdhcnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IlRp4bq/bmcgQWkteMahLWxlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iVGnhur9uZyBCcmF6aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcG9ydHVndWVzZSIgbXNnaWQ9IjI4ODgxOTg1ODczMjk2NjAzMDUiPiJUaeG6v25nIELhu5MgxJDDoG8gTmhhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiJUaeG6v25nIFNsb3ZhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4iVGnhur9uZyBTbG92ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJUaeG6v25nIFRo4buVIE5oxKkgS+G7syI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iVGnhur9uZyBVa3JhaW5hIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViMWM4NAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+Iui+k+WFpeiuvuWkhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCDplK7nm5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLoi7Hor63vvIjoi7Hlm73vvIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiLoi7Hor63vvIjnvo7lm73vvIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IuiLseivre+8iOe+juWbve+8ie+8jOWbvemZhemjjuagvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i6Iux6K+t77yI576O5Zu977yJ77yMQ29sZW1hayDpo47moLwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLoi7Hor63vvIjnvo7lm73vvInvvIxEdm9yYWsg6aOO5qC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLlvrfor60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i5rOV6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+Iuazleivre+8iOWKoOaLv+Wkp++8iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IuS/hOivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLkv4Tor63vvIxNYWMg6aOO5qC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i6KW/54+t54mZ6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLnkZ7lo6vms5Xor60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IueRnuWjq+W+t+ivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IuavlOWIqeaXtuivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4i5L+d5Yqg5Yip5Lqa6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i5oSP5aSn5Yip6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiLkuLnpuqbor60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+IuaMquWogeivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4i55Ge5YW46K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i6Iqs5YWw6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IuWFi+e9l+WcsOS6muivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLmjbflhYvor60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i54ix5rKZ5bC85Lqa6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiLljIjniZnliKnor60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IuWGsOWym+ivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4i5be06KW/6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4i6JGh6JCE54mZ6K+tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLmlq/mtJvkvJDlhYvor60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IuaWr+a0m+aWh+WwvOS6muivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IuWcn+iAs+WFtuivrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i5LmM5YWL5YWw6K+tIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5YzU0NgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+Iui8uOWFpeijnee9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCDpjbXnm6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLoi7HmlocgKOiLseWciykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiLoi7HmlocgKOe+juWciykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IuiLseaWhyAo576O5ZyLKe+8jOWci+mam+aoo+W8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i6Iux5paHICjnvo7lnIsp77yMQ29sZW1hayDmqKPlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLoi7HmlocgKOe+juWciynvvIxEdm9yYWsg5qij5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLlvrfmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i5rOV5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IuazleaWhyAo5Yqg5ou/5aSnKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IuS/hOaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLkv4TmlofvvIxNYWMg5qij5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i6KW/54+t54mZ5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLms5XmlocgKOeRnuWjqykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IuW+t+aWh++8iOeRnuWjq++8iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IuavlOWIqeaZguaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4i5L+d5Yqg5Yip5Lqe5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i5oSP5aSn5Yip5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiLkuLnpuqXmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+IuaMquWogeaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4i55Ge5YW45paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i6Iqs6Jit5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IuWFi+e+heWcsOS6nuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLmjbflhYvmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i5oSb5rKZ5bC85Lqe5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiLljIjniZnliKnmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IuWGsOWztuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4i5be06KW/5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4i6JGh6JCE54mZ5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLmlq/mtJvkvJDlhYvmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IuaWr+a0m+aWh+WwvOS6nuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IuWcn+iAs+WFtuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i54OP5YWL6Jit5paHIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5ZjEzMgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+Iui8uOWFpeijnee9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dHNfbGFiZWwiIG1zZ2lkPSI2Njg4NzczMjY4MzAyMDg3NTQ1Ij4iQW5kcm9pZCDpjbXnm6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91a19sYWJlbCIgbXNnaWQ9IjY2NjQyNTg0NjMzMTk5OTk2MzIiPiLoi7HmlocgKOiLseWciykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiLoi7HmlocgKOe+juWciykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IuiLseaWhyAo576O5ZyLKe+8jOWci+mam+aoo+W8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2NvbGVtYWtfbGFiZWwiIG1zZ2lkPSI0MTk0OTY5NjEwMzQzNDU1MzgwIj4i6Iux5paHICjnvo7lnIsp77yMQ29sZW1hayDmqKPlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19kdm9yYWtfbGFiZWwiIG1zZ2lkPSI3OTM1Mjg5MjMxNzExNDUyMDIiPiLoi7HmlocgKOe+juWciynvvIxEdm9yYWsg5qij5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiLlvrfmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2xhYmVsIiBtc2dpZD0iODEzNDUwMTE5NTg5MzgzNzIzIj4i5rOV5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9jYV9sYWJlbCIgbXNnaWQ9IjM2NTM1MjYwMTA2MDYwNDgzMiI+IuazleaWhyAo5Yqg5ou/5aSnKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IuS/hOaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX21hY19sYWJlbCIgbXNnaWQ9IjM3OTU4NjY4NjkwMzgyNjQ3OTYiPiLkv4TmlofvvIxNYWMg5qij5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4i6KW/54+t54mZ5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3aXNzX2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjQ2NTkxOTEwMjUzOTYzNzE2ODQiPiLms5XmlocgKOeRnuWjqykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IuW+t+aWhyAo55Ge5aOrKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9iZWxnaWFuIiBtc2dpZD0iMjAxMTk4NDU3MjgzODY1MTU1OCI+IuavlOWIqeaZguW8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4i5L+d5Yqg5Yip5Lqe5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4i576p5aSn5Yip5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiLkuLnpuqXmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbm9yd2VnaWFuIiBtc2dpZD0iOTA5MDA5NzkxNzAxMTA0MDkzNyI+IuaMquWogeaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2VkaXNoIiBtc2dpZD0iNzMyOTU5MTA5MDg4NDc5MzUxIj4i55Ge5YW45paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Zpbm5pc2giIG1zZ2lkPSI1NTg1NjU5NDM4OTI0MzE1NDY2Ij4i6Iqs6Jit5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IuWFi+e+heWfg+ilv+S6nuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLmjbflhYvmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4i5oSb5rKZ5bC85Lqe5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiLljIjniZnliKnmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+IuWGsOWztuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4i5be06KW/5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4i6JGh6JCE54mZ5paHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3Nsb3ZhayIgbXNnaWQ9IjI0NjkzNzk5MzQ2NzI4MzcyOTYiPiLmlq/mtJvkvJDlhYvmlociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IuaWr+a0m+e2reWwvOS6nuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF90dXJraXNoIiBtc2dpZD0iNzczNjE2MzI1MDkwNzk2NDg5OCI+IuWcn+iAs+WFtuaWhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4i54OP5YWL6Jit5paHIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZjEwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9JbnB1dERldmljZXMvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iODAxNjE0NTI4MzE4OTU0NjAxNyI+IkFtYWRpdmF5aXNpIHdva3VmYWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJJa2hpYmhvZGkgeWUtQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+IkktRW5nbGlzaCAoVUspIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfbGFiZWwiIG1zZ2lkPSI4OTk0ODkwMjQ5NjQ5MTA2MjkxIj4iSS1FbmdsaXNoIChVUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19pbnRsIiBtc2dpZD0iMzcwNTE2ODU5NDAzNDIzMzU4MyI+IkktRW5nbGlzaCAoVVMpLCBpc2l0YXllbGEgc2Frd2FtYW55ZSBhbWF6d2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19jb2xlbWFrX2xhYmVsIiBtc2dpZD0iNDE5NDk2OTYxMDM0MzQ1NTM4MCI+IkktRW5nbGlzaCAoVVMpLCBpc2l0YXllbGEgc2UtQ29sZW1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2R2b3Jha19sYWJlbCIgbXNnaWQ9Ijc5MzUyODkyMzE3MTE0NTIwMiI+IkktRW5nbGlzaCAoVVMpLCBpc2l0YXllbGEgc2UtRHZvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJJc2ktR2VybWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ZyZW5jaF9sYWJlbCIgbXNnaWQ9IjgxMzQ1MDExOTU4OTM4MzcyMyI+IklzaS1GcmVuY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iSXNpLUZyZW5jaCAoQ2FuYWRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ydXNzaWFuX2xhYmVsIiBtc2dpZD0iODcyNDg3OTc3NTgxNTA0Mjk2OCI+IklzaS1SdXNzaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbWFjX2xhYmVsIiBtc2dpZD0iMzc5NTg2Njg2OTAzODI2NDc5NiI+IklzaS1SdXNzaWFuLCBpc2l0YXllbGEgc2UtTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4iSXNpLVNwYW5pc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IklzaS1Td2lzcyBGcmVuY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZ2VybWFuX2xhYmVsIiBtc2dpZD0iMjMwNTUyMDk0MTk5MzMxNDI1OCI+IklzaS1Td2lzcyBHZXJtYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJJc2ktQmVsZ2lhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9idWxnYXJpYW4iIG1zZ2lkPSI4OTUxMjI0MzA5OTcyMDI4Mzk4Ij4iSXNpLUJ1bGdhcmlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9pdGFsaWFuIiBtc2dpZD0iNjQ5NzA3OTY2MDQ0OTc4MTIxMyI+IklzaS1JdGFsaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2RhbmlzaCIgbXNnaWQ9IjgwMzY0MzIwNjY2MjcxMjc4NTEiPiJJc2ktRGFuaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X25vcndlZ2lhbiIgbXNnaWQ9IjkwOTAwOTc5MTcwMTEwNDA5MzciPiJJc2ktTm9yd2VnaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiJJc2ktU3dlZGlzaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+IklzaS1GaW5uaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2Nyb2F0aWFuIiBtc2dpZD0iNDE3MjIyOTQ3MTA3OTI4MTEzOCI+IklzaS1Dcm9hdGlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiJJc2ktQ3plY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZXN0b25pYW4iIG1zZ2lkPSI4Nzc1ODMwOTg1MTg1NjY1Mjc0Ij4iSXNpLUVzdG9uaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJJc2ktSHVuZ2FyaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2ljZWxhbmRpYyIgbXNnaWQ9IjU4MzY2NDU2NTA5MTI0ODk2NDIiPiJJc2ktSWNlbGFuZGljIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2JyYXppbGlhbiIgbXNnaWQ9IjUxMTc4OTY0NDMxNDc3ODE5MzkiPiJJc2ktQnJhemlsaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4iSXNpLVBvcnR1Z3Vlc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+IklzaS1TbG92YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmVuaWFuIiBtc2dpZD0iMTczNTkzMzAyODkyNDk4MjM2OCI+IklzaS1TbG92ZW5pYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJJc2ktVHVya2lzaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF91a3JhaW5pYW4iIG1zZ2lkPSI4MTc2NjM3NzQ0Mzg5NDgwNDE3Ij4iSXNpLVVrcmFpbmlhbiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKaW5kZXggN2UxZjBiZi4uMjY2N2VkMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJWb2VyIFBJTi1rb2RlIGluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iVm9lciBQVUsgZW4gbnV3ZSBQSU4ta29kZSBpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLLWtvZGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik51d2UgUElOLWtvZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJWb2VyIFNJTSBQVUstIGVuIG51d2UgUElOLWtvZGUgaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTSBQVUsta29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTnV3ZSBTSU0gUElOLWtvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJSYWFrIG9tIHdhZ3dvb3JkIGluIHRlIHZvZXIiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJWb2VyIHdhZ3dvb3JkIGluIG9tIHRlIG9udHNsdWl0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iVm9lciBQSU4gaW4gb20gdGUgb250c2x1aXQiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iTGFhdHdhZy1rbm9wcGllIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJTcGVlbC1rbm9wcGllIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJTdG9wLWtub3BwaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iTGFhaWsgYmFpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IkxhYWlrIG5pa3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJIYXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iT250c2x1aXQgb20gdm9vcnQgdGUgZ2FhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IkJlZ2luIGdla2Fuc2VsbGVlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJMYWF0IGxvcyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBvbSB1aXQgdGUgdmVlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBzYWwgbmllIHVpdGdldmVlIHdvcmQgbmllLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iVm9lciBkaWUgZ2V3ZW5zdGUgUElOLWtvZGUgaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iQmV2ZXN0aWcgZ2V3ZW5zdGUgUElOLWtvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Ik9udHNsdWl0IHRhbnMgU0lNLWthYXJ04oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iVmVya2VlcmRlIFBJTi1rb2RlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlRpayBcJ24gUElOIGluIHdhdCA0IHRvdCA4IHN5ZmVycyBsYW5rIGlzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSy1rb2RlIG1vZXQgOCBvZiBtZWVyIHN5ZmVycyB3ZWVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlZvZXIgd2VlciBkaWUga29ycmVrdGUgUFVLLWtvZGUgaW4uIEhlcmhhYWxkZSBwb2dpbmdzIHNhbCBkaWUgU0lNIHBlcm1hbmVudCBkZWFrdGl2ZWVyLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iSnkgaGV0IGpvdSBvbnRzbHVpdHBhdHJvb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2VlciB2ZXJrZWVyZGVsaWsgZ2V0ZWtlbi4gTmEgbm9nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG9uc3Vrc2Vzdm9sbGUgcG9naW5ncywgc2FsIGp5IGdldnJhIHdvcmQgb20gam91IGZvb24gdGUgb250c2x1aXQgZGV1ciBtaWRkZWwgdmFuIFwnbiBlLXBvc3Jla2VuaW5nLlxuXG4gUHJvYmVlciB3ZWVyIG9vciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWtvbmRlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJWZXJ3eWRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iVmVya2VlcmRlIFNJTSBQSU4ta29kZSwgankgc2FsIG5vdSBqb3UgZGllbnN2ZXJza2FmZmVyIG1vZXQga29udGFrIG9tIGpvdSB0b2VzdGVsIHRlIG9udHNsdWl0LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iVmVya2VlcmRlIFNJTSBQSU4ta29kZSwgankgaGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBvb3JibHl3ZW5kZSBwb2dpbmcgdm9vcmRhdCBqeSBqb3UgZGllbnN2ZXJza2FmZmVyIHNhbCBtb2V0IGtvbnRhayBvbSBqb3UgdG9lc3RlbCB0ZSBvbnRzbHVpdC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJWZXJrZWVyZGUgU0lNIFBJTi1rb2RlLCBqeSBoZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IG9vcmJseXdlbmRlIHBvZ2luZ3MuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0gaXMgb25icnVpa2JhYXIuIEtvbnRhayBqb3UgZGllbnN2ZXJza2FmZmVyLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iVmVya2VlcmRlIFNJTSBQVUsta29kZSwgankgaGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBvb3JibHl3ZW5kZSBwb2dpbmcgdm9vcmRhdCBTSU0gcGVybWFuZW50IG9uYnJ1aWtiYWFyIHdvcmQuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iVmVya2VlcmRlIFNJTSBQVUsta29kZSwgankgaGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBvb3JibHl3ZW5kZSBwb2dpbmdzIHZvb3JkYXQgU0lNIHBlcm1hbmVudCBvbmJydWlrYmFhciB3b3JkLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iU0lNIFBJTi1iZXdlcmtpbmcgaGV0IG1pc2x1ayEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTSBQVUstYmV3ZXJraW5nIGhldCBtaXNsdWshIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IktvZGUgaXMgYWFudmFhciEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJWb3JpZ2Vzbml0LWtub3BwaWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJWb2xnZW5kZXNuaXQta25vcHBpZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJMYWF0d2FnLWtub3BwaWUiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAppbmRleCAyZjZkYWIwLi5mZDRjZjc4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IuGNkuGKlSDhiq7hi7Ug4Ymw4Yut4YmlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIOGKpeGKkyDhiqDhi7LhiLUg4Y2S4YqVIOGJsOGLreGJpSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4i4YuoUFVLIOGKruGLtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i4Yqg4Yuy4Yi1IFBpbiDhiq7hi7UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLhi6jhiLLhiJ0gUFVLIOGKpeGKkyDhiqDhi7LhiLHhipUg4Y2S4YqVIOGKruGLtSDhi63hibDhi63hiaEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IuGLqOGIsuGInSBQVUsg4Yqu4Yu1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLhiqDhi7LhiLUg4Yiy4YidIOGNkuGKlSDhiq7hi7UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLhi6jhi63hiIjhjY0g4YmD4YiNIOGIiOGImOGJsOGLqOGJpSDhipXhiqsiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLhiIjhiJjhiq3hjYjhibUg4Yuo4Yut4YiI4Y2NIOGJg+GIjSDhibDhi63hiaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLhiIjhiJjhiq3hjYjhibUg4Y2S4YqVIOGJsOGLreGJpSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLhiIjhiqDhjY3hibMg4Yqg4YmB4YidIOGKoOGLneGIq+GIrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i4Yuo4Yqg4Yyr4YuN4Ym1IOGKoOGLneGIq+GIrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i4Yqg4YmB4YidIOGKoOGLneGIq+GIrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLhiqDhiKrhjY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLhi7DhiaPhiKoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLhiI3hiaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLhiIjhiJjhiYDhjKDhiI0g4Yut4Yqt4Y2I4YmxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i4Yib4Yi14YyA4YiY4YitIOGJsOGIsOGIreGLn+GIjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLhiIjhiJjhiLDhiKjhi50gPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz7hipUg4Yyj4YiNIOGLq+GLteGIreGMieGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDhiqDhi63hiLDhiK3hi53hiJ3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IuGLqOGJsOGNiOGIiOGMiOGLjeGKlSDhi6jhjZLhipUg4Yqu4Yu1IOGLq+GIteGMiOGJoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLhi6jhibDhjYjhiIjhjIjhi43hipUg4Yuo4Y2S4YqVIOGKruGLtSDhi6vhiKjhjIvhjI3hjKEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IuGIsuGInSDhiqvhiK3hi7HhipUg4Ymg4YiY4Yqt4Y2I4Ym1IOGIi+GLreKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IuGJteGKreGKreGIjSDhi6vhiI3hiIbhipAg4Y2S4YqVIOGKruGLteGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IuGKqDQg4Yql4Yi14YqoIDgg4YmB4Yyl4Yiu4Ym9IOGLqOGLq+GLmCDhjZLhipUg4Yut4Ymw4Yut4Ymh4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4i4YuoUFVLIOGKruGLtSA4IOGLiOGLreGInSDhiqjhi5rhi6sg4Ymg4YiL4YutIOGJgeGMpeGIruGJvSDhiIrhipbhiKjhi40g4Yut4YyI4Ymj4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4Ym14Yqt4Yqt4YiI4Yqb4YuN4YqVIOGLqFBVSyDhiq7hi7Ug4Yql4YqV4Yuw4YyI4YqTIOGLq+GIteGMiOGJoeGNoiDhibDhi7DhjIvhjIvhiJog4YiZ4Yqo4Yir4YuO4Ym9IOGIsuGInSDhiqvhiK3hi7HhipUg4Yql4Yi14Yqo4YiY4Yyo4Yio4Yi74YuNIOGLq+GIsOGKk+GKreGIieGJs+GIjeGNoiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4Yuo4YiY4Yqt4Y2I4Ym7IOGIteGIreGLk+GJsCDhjKXhiIjhibHhipUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4YyK4YucIOGJoOGJteGKreGKreGIjSDhiqDhiI3hiLPhiInhibXhiJ3hjaIg4YqoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Ymw4Yyo4Yib4YiqIOGLq+GIjeGJsOGIs+GKqSDhiJnhiqjhiKvhi47hib0g4Ymg4YqL4YiLIOGLqOGKouGInOGLreGIjSDhiJjhiIjhi6sg4Ymw4Yyg4YmF4YiY4YuNIOGIteGIjeGKreGLjuGKlSDhiqXhipXhi7LhiqjhjY3hibEg4Yut4Yyg4Yuo4YmD4YiJ4Y2iXG5cbuGKpeGJo+GKreGLjiDhiqg8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDhiLDhiqjhipXhi7bhib0g4Ymg4YqL4YiLIOGKpeGKleGLsOGMiOGKkyDhi63hiJ7hiq3hiKnhjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLhiqDhiLXhi4jhjI3hi7UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IuGIjeGKrSDhi6vhiI3hiIbhipAg4Yuo4Yiy4YidIOGKruGLteGNoiDhiqDhiIHhipUg4YiY4Yiz4Yiq4Yur4YuO4YqVIOGIiOGIm+GIteGKqOGNiOGJtSDhi7XhiJ3hjLgg4Ymw4Yur4Yur4YulIOGInuGLsOGIneGLjuGKlSDhiJvhjI3hipjhibUg4Yqg4YiI4Yml4YuO4Y2iIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiLhiI3hiq0g4Yur4YiN4YiG4YqQIOGLqOGIsuGInSDhjZLhipUg4Yqu4Yu14Y2jIOGImOGIs+GIquGLq+GLjuGKlSDhiIjhiJvhiLXhiqjhjYjhibUg4Yu14Yid4Yy4IOGJsOGLq+GLq+GLpSDhiJ7hi7DhiJ3hi47hipUg4Yib4YyN4YqY4Ym1IOGMjeGLtOGJs+GLjiDhiIrhiIbhipUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGImeGKqOGIqyDhi63hiYDhiK3hi47hibPhiI3hjaIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiLhiI3hiq0g4Yur4YiN4YiG4YqQIOGLqOGIsuGInSDhjZLhipUg4Yqu4Yu14Y2jIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhiJnhiqjhiKvhi47hib0g4Yut4YmA4Yip4YuO4Ymz4YiN4Y2iIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiLhiLLhiJkg4Yyl4YmF4YidIOGIi+GLrSDhiJjhi4vhiI0g4Yql4Yut4Ym94YiN4Yid4Y2iIOGLqOGKpeGIreGIteGLjuGKlSDhi7XhiJ3hjLgg4Ymw4Yur4Yur4YulIOGInuGLsOGInSDhi6vhjI3hipnhjaIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IuGIjeGKrSDhi6vhiI3hiIbhipAg4Yuo4Yiy4YidIFBVSyDhiq7hi7XhjaMg4Yiy4YidIOGKq+GIreGLteGLjiDhiaDhiYvhiJrhipDhibUg4Yyl4YmF4YidIOGIi+GLrSDhiJjhi4vhiI0g4Yuo4Yib4Yut4Ym94YiNIOGIiuGIhuGKlSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YiZ4Yqo4YirIOGLreGJgOGIreGLjuGJs+GIjeGNoiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IuGIjeGKrSDhi6vhiI3hiIbhipAg4Yuo4Yiy4YidIFBVSyDhiq7hi7XhjaMg4Yiy4YidIOGKq+GIreGLteGLjiDhiaDhiYvhiJrhipDhibUg4Yyl4YmF4YidIOGIi+GLrSDhiJjhi4vhiI0g4Yuo4Yib4Yut4Ym94YiNIOGIiuGIhuGKlSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YiZ4Yqo4Yir4YuO4Ym9IOGLreGJgOGIqeGLjuGJs+GIjeGNoiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4i4Yuo4Yiy4YidIOGNkuGKlSDhiq3hi4jhipMg4Yqg4YiN4Ymw4Yiz4Yqr4YidISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4i4Yuo4Yiy4YidIFBVSyDhiq3hi4jhipMg4Yqg4YiN4Ymw4Yiz4Yqr4YidISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLhiq7hi7Eg4Ymw4YmA4Ymj4Yut4YqQ4Ym1IOGKoOGMjeGKneGJt+GIjSEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLhi6jhiYDhi7PhiJog4Ym14Yir4YqtIOGKoOGLneGIq+GIrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IuGLqOGJgOGMo+GLrSDhibXhiKvhiq0g4Yqg4Yud4Yir4YitIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IuGIiOGKoOGNjeGJsyDhiqDhiYHhiJ0g4Yqg4Yud4Yir4YitIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKaW5kZXggYmNmZTdkYi4uODNkNGI5MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCkBAIC0yMCwxNCArMjAsMTQgQEAKIAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i2KfZg9iq2Kgg2LHZhdiyINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLYp9mD2KrYqCDYsdmF2LIgUFVLINmI2LHZhdiyINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KfZhNis2K/ZitivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiLYsdmF2LIgUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLYsdmF2LIg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2KzYr9mK2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLigI/Yp9mD2KrYqCDYsdmF2LIg2LHZhdiyIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IuKAj9ij2K/YrtmEINix2YXYsiBQVUsg2YTYqNi32KfZgtipIFNJTSDZiNix2YXYsiBcItix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YpcIiDYp9mE2KzYr9mK2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IuKAj9ix2YXYsiBQVUsg2YTYqNi32KfZgtipIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4i4oCP2LHZhdiyIFwi2LHZgtmFINiq2LnYsdmK2YEg2LTYrti12YpcIiDYrNiv2YrYryDZhNio2LfYp9mC2KkgU0lNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i2KfZhNmF2LMg2YTZg9iq2KfYqNipINmD2YTZhdipINin2YTZhdix2YjYsSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+Itin2YPYqtioINmD2YTZhdipINin2YTZhdix2YjYsSDZhNil2YTYutin2KEg2KfZhNiq2KPZhdmK2YYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLYp9mD2KrYqCDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINmE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+Itix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2LrZitixINi12K3ZititLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuKAj9in2YPYqtioINix2YXYsiBQSU4g2YTYpdmE2LrYp9ihINin2YTYqtij2YXZitmGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4oCP2LHZhdiyIFBJTiDYutmK2LEg2LXYrdmK2K0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+ItmE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhtiMINin2LbYuti3INi52YTZiSBcItin2YTZgtin2KbZhdipXCIg2KvZhSDYudmE2YkgMC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i2KrZhSDYqtis2KfZiNiyINin2YTYrdivINin2YTYo9mC2LXZiSDZhNi52K/YryDZhdit2KfZiNmE2KfYqiDYqtij2YXZitmGINin2YTYrNmH2KfYsiDYqNin2YTZiNis2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+Itiq2YUg2KfZhNi02K3ZhiI8L3N0cmluZz4KQEAgLTM1LDE3ICszNSwxNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i2KrZiNi12YrZhCDYrNmH2KfYsiDYp9mE2LTYrdmGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4i2KfYtti62Lcg2LnZhNmJIFwi2KfZhNmC2KfYptmF2KlcIiDZhNil2YTYutin2KEg2KfZhNmC2YHZhC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+Itin2YTYtNio2YPYqSDZhdik2YXZkdmG2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4i2YTZitiz2Kog2YfZhtin2YMg2KjYt9in2YLYqSBTSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4i2YTZitiz2Kog2YfZhtin2YMg2KjYt9in2YLYqSBTSU0g2YHZiiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDgxMTEwMzk1NTA4NjM3NjQzIj4i2YTZitiz2Kog2YfZhtin2YMg2KjYt9in2YLYqSBTSU0g2YHZiiDYp9mE2YfYp9iq2YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+Itij2K/YrtmEINio2LfYp9mC2KkgU0lNLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iNTk2ODk4NTQ4OTQ2Mzg3MDM1OCI+Itio2LfYp9mC2KkgU0lNINmF2YHZgtmI2K/YqSDYo9mIINi62YrYsSDZgtin2KjZhNipINmE2YTZgtix2KfYodipLiDYo9iv2K7ZhCDYqNi32KfZgtipIFNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4i2KjYt9in2YLYqSBTSU0g2LrZitixINmC2KfYqNmE2Kkg2YTZhNin2LPYqtiu2K/Yp9mFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+Itiq2YUg2KrYudi32YrZhCDYqNi32KfZgtipIFNJTSDYqNi02YPZhCDYr9in2KbZhS5cbiDYp9iq2LXZhCDYqNmF2YLYr9mFINiu2K/ZhdipINin2YTZhNin2LPZhNmD2Yog2YTZhNit2LXZiNmEINi52YTZiSDYqNi32KfZgtipIFNJTSDYo9iu2LHZiS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI2ODc1NzczNDEzMzA2MzgwOTAyIj4i2KjYt9in2YLYqSBTSU0g2YXYpNmF2ZHZhtipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4i2KjYt9in2YLYqSBTSU0g2YXYpNmF2ZHZhtipINio2YPZiNivIFBVSy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+Itis2KfYsdmNINil2YTYutin2KEg2KrYo9mF2YrZhiDYqNi32KfZgtipIFNJTeKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4g2KfZhNij2K/Yp9ipICUyJGQg2YXZhiAlMyRkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0OTQ5ODA1NjEzMDQyMTE5MzEiPiLigI/ZhNmK2LPYqiDZh9mG2KfZgyDYqNi32KfZgtipIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiLigI/ZhNmK2LPYqiDZh9mG2KfZgyDYqNi32KfZgtipIFNJTSDZgdmKINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2YouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiLigI/ZhNmK2LPYqiDZh9mG2KfZgyDYqNi32KfZgtipIFNJTSDZgdmKINin2YTZh9in2KrZgS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MjEwODkxNTA5OTk1OTQyMjUwIj4i4oCP2KPYr9iu2YQg2KjYt9in2YLYqSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4i4oCP2KjYt9in2YLYqSBTSU0g2YXZgdmC2YjYr9ipINij2Ygg2LrZitixINmC2KfYqNmE2Kkg2YTZhNmC2LHYp9ih2KkuINij2K/YrtmEINio2LfYp9mC2KkgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiLigI/YqNi32KfZgtipIFNJTSDYutmK2LEg2YLYp9io2YTYqSDZhNmE2KfYs9iq2K7Yr9in2YUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1ODkyOTQwOTA5Njk5NzIzNTQ0Ij4i4oCP2KrZhSDYqti52LfZitmEINio2LfYp9mC2KkgU0lNINio2LTZg9mEINiv2KfYptmFLlxuINin2KrYtdmEINio2YXZgtiv2YUg2K7Yr9mF2Kkg2KfZhNmE2KfYs9mE2YPZiiDZhNmE2K3YtdmI2YQg2LnZhNmJINio2LfYp9mC2KkgU0lNINij2K7YsdmJLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiLigI/YqNi32KfZgtipIFNJTSDZhdik2YXZkdmG2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiLigI/YqNi32KfZgtipIFNJTSDZhdik2YXZkdmG2Kkg2KjZg9mI2K8gUFVLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3OTc1MjIxODA1MDMzNjE0NDI2Ij4i4oCP2KzYp9ix2Y0g2KXZhNi62KfYoSDYqtij2YXZitmGINio2LfYp9mC2KkgU0lN4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiLigI8lMSRzLiDYp9mE2KPYr9in2KkgJTIkZCDZhdmGICUzJGQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+Itil2LbYp9mB2Kkg2KPYr9in2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLZgdin2LHYutipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLYqtmFINiq2YjYs9mK2Lkg2YXZhti32YLYqSDYpdmE2LrYp9ihINin2YTZgtmB2YQuIjwvc3RyaW5nPgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i2KXZhNi62KfYoSDYp9mE2YLZgdmEINio2KfYs9iq2K7Yr9in2YUg2KfZhNiq2YXYsdmK2LEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLYpdmE2LrYp9ihINin2YTZgtmB2YQg2KjYp9iz2KrYrtiv2KfZhSDYp9mE2YbZgti0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i2KrYo9mF2YrZhiDYp9mE2KzZh9in2LIg2KjYp9mE2YjYrNmHLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiLYpdmE2LrYp9ihINin2YTZgtmB2YQg2KjYp9iz2KrYrtiv2KfZhSDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiLigI/YpdmE2LrYp9ihINin2YTZgtmB2YQg2KjYp9iz2KrYrtiv2KfZhSDYsdmF2LIgUElOLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+Itil2YTYutin2KEg2KfZhNmC2YHZhCDYqNin2LPYqtiu2K/Yp9mFINmD2YTZhdipINin2YTZhdix2YjYsS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiLZhdmG2LfZgtipINin2YTZhtmC2LQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+ItmF2YbYt9mC2Kkg2KfZhNiq2YXYsdmK2LEuIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+Itiy2LEg2KfZhNil2YrZgtin2YEg2KfZhNmF2KTZgtiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLYstixINin2YTYqti02LrZitmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLYstixINin2YTYpdmK2YLYp9mBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Itix2KfYpti52KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLZhdi52KfYsdi22KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLZgtmE2KgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLYpdmE2LrYp9ihINin2YTZgtmB2YQg2YTZhNmF2KrYp9io2LnYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+Itiq2YUg2KXZhNi62KfYoSDYp9mE2KrYtNi62YrZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLYo9iz2YLYtyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDZhNmE2K3YsNmBLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiLZhNmGINmK2KrZhSDYrdiw2YEgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4i2Kgg2Kog2KsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTk4LDI3ICsxMDUsMjYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiLYsdmC2YUg2KrYudix2YrZgSDYtNiu2LXZiiDYrtin2LfYpiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4i2K3Yp9mI2YQg2YXYsdipINij2K7YsdmJINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i2KfYsdiz2YUg2YbZgti02YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiLYo9iv2K7ZhCDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINmE2KjYt9in2YLYqSBTSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+Itij2K/YrtmEINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiLigI/Yo9iv2K7ZhCDYsdmF2LIgUElOINmE2KjYt9in2YLYqSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IuKAj9ij2K/YrtmEINix2YXYsiBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i2KPYr9iu2YQg2YPZhNmF2Kkg2KfZhNmF2LHZiNixIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4i2KjYt9in2YLYqSBTSU0g2YXYudi32YTYqSDYp9mE2KLZhi4g2KPYr9iu2YQg2LHZhdiyIFBVSyDZhNmE2YXYqtin2KjYudipLiDYp9iq2LXZhCDYqNmF2LTYutmEINi02KjZg9ipINin2YTYrNmI2KfZhCDZhNmE2KfYt9mE2KfYuSDYudmE2Ykg2KfZhNiq2YHYp9i12YrZhC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i2KXYr9iu2KfZhCDYsdmF2LIg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2YXYsdin2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i2KrYo9mD2YrYryDYsdmF2LIg2LHZgtmFINin2YTYqti52LHZitmBINin2YTYtNiu2LXZiiDYp9mE2YXYsdin2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Itis2KfYsdmNINil2YTYutin2KEg2KrYo9mF2YrZhiDYqNi32KfZgtipIFNJTeKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Itix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2LrZitixINi12K3ZititLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+Itin2YPYqtioINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KfZhNmF2YPZiNmGINmF2YYgNCDYpdmE2YkgOCDYo9ix2YLYp9mFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+ItmK2KzYqCDYo9mGINmK2KrYttmF2YYg2LHZhdiyIFBVS+KAjyA4INij2LHZgtin2YUg2KPZiCDYo9mD2KvYsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLYo9i52K8g2KXYr9iu2KfZhCDYsdmF2LIgUFVLINin2YTYtdit2YrYrS4g2YjYs9iq2KTYr9mKINin2YTZhdit2KfZiNmE2KfYqiDYp9mE2YXYqtmD2LHYsdipINil2YTZiSDYqti52LfZitmEINio2LfYp9mC2KkgU0lNINmG2YfYp9im2YrZi9inLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLZhNinINmK2KrYt9in2KjZgiDYsdmF2LLYpyDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4i4oCP2KjYt9in2YLYqSBTSU0g2YXYudi32YTYqSDYp9mE2KLZhi4g2KPYr9iu2YQg2LHZhdiyIFBVSyDZhNmE2YXYqtin2KjYudipLiDYp9iq2LXZhCDYqNmF2LTYutmEINi02KjZg9ipINin2YTYrNmI2KfZhCDZhNmE2KfYt9mE2KfYuSDYudmE2Ykg2KfZhNiq2YHYp9i12YrZhC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i4oCP2KXYr9iu2KfZhCDYsdmF2LIg2LHZhdiyIFBJTiDYp9mE2YXYsdin2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4oCP2KrYo9mD2YrYryDYsdmF2LIg2LHZhdiyIFBJTiDYp9mE2YXYsdin2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IuKAj9is2KfYsdmNINil2YTYutin2KEg2KrYo9mF2YrZhiDYqNi32KfZgtipIFNJTeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IuKAj9in2YPYqtioINix2YXYsiBQSU4g2KfZhNmF2YPZiNmGINmF2YYgNCDYpdmE2YkgOCDYo9ix2YLYp9mFLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IuKAj9mK2KzYqCDYo9mGINmK2KrYttmF2YYg2LHZhdiyIFBVS+KAjyA4INij2LHZgtin2YUg2KPZiCDYo9mD2KvYsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLigI/Yo9i52K8g2KXYr9iu2KfZhCDYsdmF2LIgUFVLINin2YTYtdit2YrYrS4g2YjYs9iq2KTYr9mKINin2YTZhdit2KfZiNmE2KfYqiDYp9mE2YXYqtmD2LHYsdipINil2YTZiSDYqti52LfZitmEINio2LfYp9mC2KkgU0lNINmG2YfYp9im2YrZi9inLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLigI/ZhNinINmK2KrYt9in2KjZgiDYsdmF2LLYpyDYsdmF2LIgUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i2YXYrdin2YjZhNin2Kog2KfZhNmG2YLYtCDZg9ir2YrYsdipINis2K/Zi9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+ItmE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhtiMINiz2KzZkdmEINin2YTYr9iu2YjZhCDYqNit2LPYp9io2YMg2YHZiiBHb29nbGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IuKAj9mE2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhtiMINiz2KzZkdmEINin2YTYr9iu2YjZhCDYqNit2LPYp9io2YMg2YHZiiBHb29nbGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLYp9iz2YUg2KfZhNmF2LPYqtiu2K/ZhSAo2KfZhNio2LHZitivINil2YTZg9iq2LHZiNmG2YopIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLZg9mE2YXYqSDYp9mE2YXYsdmI2LEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+Itiq2LPYrNmK2YQg2KfZhNiv2K7ZiNmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLYp9iz2YUg2YXYs9iq2K7Yr9mFINi62YrYsSDYtdit2YrYrSDYo9mIINmD2YTZhdipINmF2LHZiNixINi62YrYsSDYtdin2YTYrdipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLZh9mEINmG2LPZitiqINin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFINij2Ygg2YPZhNmF2Kkg2KfZhNmF2LHZiNix2J9cbtin2YbYqtmC2YQg2KXZhNmJICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+Ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4oCP2YfZhCDZhtiz2YrYqiDYp9iz2YUg2KfZhNmF2LPYqtiu2K/ZhSDYo9mIINmD2YTZhdipINin2YTZhdix2YjYsdifXG7Yp9mG2KrZgtmEINil2YTZiSAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i2KzYp9ix2Y0g2YHYrdi1INin2YTYrdiz2KfYqOKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i2YTZgtivINmD2KrYqNiqINix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12Yog2KjYtNmD2YQg2LrZitixINi12K3ZititIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INmF2LHYqS4gXG5cbtij2LnYryDYp9mE2YXYrdin2YjZhNipINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLigI/ZhNmC2K8g2YPYqtio2Kog2LHZhdiyIFBJTiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiBcblxu2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i2YTZgtivINmD2KrYqNiqINmD2YTZhdipINin2YTZhdix2YjYsSDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiBcblxu2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i2YTZgtivINix2LPZhdiqINmG2YLYtCDYpdmE2LrYp9ihINin2YTYqtij2YXZitmGINio2LfYsdmK2YLYqSDYutmK2LEg2LXYrdmK2K3YqSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdix2KkuIFxuXG7Yo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+ItmE2YLYryDYrdin2YjZhNiqINil2YTYutin2KEg2KrYo9mF2YrZhiDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKINio2LTZg9mEINi62YrYsSDYtdit2YrYrSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdix2KkuINio2LnYryDYpdis2LHYp9ihIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2K3Yp9mI2YTYp9iqINi62YrYsSDYp9mE2YbYp9is2K3YqSDYp9mE2KPYrtix2YnYjCDYs9iq2KrZhSDYpdi52KfYr9ipINiq2LnZitmK2YYg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDYudmE2Ykg2KfZhNil2LnYr9in2K/Yp9iqINin2YTYp9mB2KrYsdin2LbZitipINmE2YTZhdi12YbYuSDZiNiz2YrYqtmFINmB2YLYryDYrNmF2YrYuSDYqNmK2KfZhtin2Kog2KfZhNmF2LPYqtiu2K/ZhS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+ItmE2YLYryDYsdiz2YXYqiDZhtmC2LQg2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiDYqNi52K8g2KXYrNix2KfYoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2Kkg2KfZhNij2K7YsdmJ2Iwg2LPYqtmP2LfYp9mE2Kgg2KjYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KfZhNmH2KfYqtmBINio2KfYs9iq2K7Yr9in2YUg2K3Ys9in2Kgg2KjYsdmK2K8g2KXZhNmD2KrYsdmI2YbZiiDZhNil2YTYutin2KEg2KrYo9mF2YrZhiDYp9mE2YfYp9iq2YEuXG5cbiDYo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+Itil2LLYp9mE2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IuKAj9ix2YXYsiBcItix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YpcIiDZhNio2LfYp9mC2KkgU0lNINi62YrYsSDYtdit2YrYrdiMINmI2YrZhNiy2YXZgyDYp9mE2KfYqti12KfZhCDYp9mE2KLZhiDYqNmF2LTYutmR2YQg2LTYqNmD2Kkg2KfZhNis2YjZkdin2YQg2YTYpdmE2LrYp9ihINmC2YHZhCDYp9mE2KzZh9in2LIuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiLigI/YsdmF2LIgXCLYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKXCIg2YTYqNi32KfZgtipIFNJTSDYutmK2LEg2LXYrdmK2K3YjCDZiNmK2KrYqNmC2Ykg2YTYr9mK2YMg2YXYrdin2YjZhNipINmI2KfYrdiv2KkgKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPikg2YrYqti52YrZhiDYudmE2YrZgyDYqNi52K/Zh9inINin2YTYp9iq2LXYp9mEINio2YXYtNi62ZHZhCDYtNio2YPYqSDYp9mE2KzZiNmR2KfZhCDZhNil2YTYutin2KEg2YLZgdmEINin2YTYrNmH2KfYsi4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiLigI/YsdmF2LIgXCLYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKXCIg2YTYqNi32KfZgtipIFNJTSDYutmK2LEg2LXYrdmK2K3YjCDZitiq2KjZgtmJINmE2K/ZitmDIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IuKAj9io2LfYp9mC2KkgU0lNINi62YrYsSDYtdin2YTYrdipINmE2YTYp9iz2KrYrtiv2KfZhS4g2YrZj9ix2KzZiSDYp9mE2KfYqti12KfZhCDYqNmF2LTYutmR2YQg2LTYqNmD2Kkg2KfZhNis2YjZkdin2YQuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLigI/YsdmF2LIgUFVLINmE2KjYt9in2YLYqSBTSU0g2LrZitixINi12KfZhNit2Iwg2YjZitiq2KjZgtmJINmE2K/ZitmDINmF2K3Yp9mI2YTYqSDZiNin2K3Yr9ipICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4p2Iwg2KrYtdio2K0g2KjYudiv2YfYpyDYqNi32KfZgtipIFNJTSDYutmK2LEg2LXYp9mE2K3YqSDZhNmE2KfYs9iq2K7Yr9in2YUg2KjYtNmD2YQg2K/Yp9im2YUuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4i4oCP2LHZhdiyIFBVSyDZhNio2LfYp9mC2KkgU0lNINi62YrYsSDYtdin2YTYrdiMINmI2YrYqtio2YLZiSDZhNiv2YrZgyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYrdin2YjZhNin2KrYjCDYqti12KjYrSDYqNi52K/Zh9inINio2LfYp9mC2KkgU0lNINi62YrYsSDYtdin2YTYrdipINmE2YTYp9iz2KrYrtiv2KfZhSDYqNi02YPZhCDYr9in2KbZhS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IuKAj9ij2K7ZgdmC2Kog2LnZhdmE2YrYqSBcItix2YLZhSDYp9mE2KrYudix2YrZgSDYp9mE2LTYrti12YpcIiDZhNio2LfYp9mC2KkgU0lNISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4i4oCP2KPYrtmB2YLYqiDYudmF2YTZitipIFBVSyDZhNio2LfYp9mC2KkgU0lNISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLYqtmFINmC2KjZiNmEINin2YTYsdmF2LIhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i2LLYsSDYp9mE2YXZgti32Lkg2KfZhNi12YjYqtmKINin2YTYs9in2KjZgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Itiy2LEg2KfZhNmF2YLYt9i5INin2YTYtdmI2KrZiiDYp9mE2KrYp9mE2YoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i2LLYsSDYp9mE2KXZitmC2KfZgSDYp9mE2YXYpNmC2KoiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOGY2YWMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDEzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJQxLBOIGtvZHUgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyB2yZkgeWVuaSBQxLBOIGtvZCBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsga29kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJZZW5pIFBJTiBrb2R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4ixZ5pZnLJmSBkYXhpbCBldG3JmWsgw7zDp8O8biB0b3h1bnVuIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIHBhcm9sIHlhesSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBQSU4gZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IllhbmzEscWfIFBJTiBrb2R1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gTWVueXUsIHNvbnJhIDAgYmFzxLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiJTaWbJmXQga2lsaWRpIGPJmWhkbMmZcmluaXogYml0ZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IkRvbG11xZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IkRvbHVyLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4iRWxla3RyaWvJmSBxb8WfdW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjEzMzIyODgyNjg2MDAzMjk4NDEiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gTWVueXUgZMO8eW3JmXNpbsmZIGJheMSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+IsWeyZliyZlryZkga2lsaWRsyZluZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4iU8SwTSBrYXJ0IHlveGR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiJQbGFuxZ9ldGTJmSBTxLBNIGthcnQgeW94ZHVyLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IlRlbGVmb25kYSBTxLBNIGthcnQgeW94ZHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+IlNJTSBrYXJ0xLEgZGF4aWwgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJTxLBNIGthcnQgeW94ZHVyIHbJmSB5YSBveHVuYSBiaWxpbm1pci4gU8SwTSBrYXJ0IGRheGlsIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iODM0MDgxMzk4OTU4NjYyMjM1NiI+IllhcmFyc8SxeiBTSU0ga2FydC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiJTaXppbiBTxLBNIGthcnTEsW7EsXogZGFpbWkgb2xhcmFxIGRlYWt0aXZsyZnFn2liLlxuIEJhxZ9xYSBTxLBNIGthcnQgw7zDp8O8biBzaW1zaXogeGlkbcmZdCBwcm92YXlkZXJpbml6yZkgbcO8cmFjacmZdCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiJTSU0ga2FydCBraWxpZGzJmW5pYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IlPEsE0ga2FydCBQVUsgaWzJmSBraWxpZGzJmW5pYi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+IlPEsE0ga2FydMSxbiBraWxpZGkgYcOnxLFsxLFyLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiBXaWRnZXQgJTIkZCBvZiAlMyRkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiJXaWRnZXQgyZlsYXbJmSBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4iQm/FnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4iS2lsaWRpIGHDp21hIHNhaMmZc2kgZ2VuacWfbMmZbmRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IktpbGlkaSBhw6dtYSBzYWjJmXNpIMOnw7ZrZMO8LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHZpZGNldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4ixLBzdGlmYWTJmcOnaSBzZWxla3RvcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJTdGF0dXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiJLYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4iTWVkaWEga29udHJvbGxhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJZZW5pZMmZbiBzxLFyYWxhbWEgdmlkY2V0aSBiYcWfbGFkxLFsZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IlZpZGNldGluIHTJmWtyYXIgc2lmYXJpxZ9pIHNvbmEgw6dhdGTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IlZpZGNldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBzaWxpbmRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IktpbGlkaSBhw6dtYSBzYWjJmXNpbmkgZ2VuacWfbMmZbmRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiJTw7xyw7zFn2TDvHJtyZkga2lsaWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4iS2lsZCBhw6dtYSBtb2RlbGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiJTaWbJmXQgS2lsaWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+IlBpbiBraWxpZCBhw6dtYXPEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLFnmlmcsmZIGtpbGlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiJNb2RlbCBzYWjJmXNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiJTw7xyw7zFn2TDvHJtyZkgc2FoyZlzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+IsaPdnbJmWxraSBpemzJmW3JmSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzA3MzkyODMwMDQ0NDkwOTMyMCI+Ik7DtnZiyZl0aSBpemzJmW3JmSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJQYXV6YSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+Ik94dXRtYSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IkRheWFuZMSxcm1hIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiJMyZnEn3YgZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4iU2lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiJIYXrEsXJkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4iUmVqaW0gZMmZeWnFn2lrbGl5aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRGF4aWwgb2x1biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iS2lsaWRpIGHDpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU8mZc3NpeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiJTyZlzIGHDp8SxcWTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkF4dGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDDvMOnw7xuIHl1eGFyxLEgc8O8csO8xZ9kw7xyw7xuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDDvMOnw7xuIGHFn2HEn8SxIHPDvHLDvMWfZMO8csO8bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gw7zDp8O8biBzb2xhIHPDvHLDvMWfZMO8ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IMO8w6fDvG4gc2HEn2Egc8O8csO8xZ9kw7xyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4iQ2FyaSBpc3RpZmFkyZnDp2kgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iVMmZY2lsaSB6yZluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IsWeYWJsb251IHVudXRtdcWfYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IllhbmzEscWfIE1vZGVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4iWWFubMSxxZ8gxZ5pZnLJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJQSU4gc8mZaHZkaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBzYW5pecmZIHNvbnJhIHllbmlkyZluIGPJmWhkIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLFnmFibG9udW51enUgw6fJmWtpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNJTSBQSU4ga29kdSBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJQxLBOIGtvZHUgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiJQYXJvbCBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNIGluZGkgZGVha3RpdmRpci4gRGF2YW0gZXRtyZlrIMO8w6fDvG4gUFVLIGtvZHUgZGF4aWwgZWRpbi4gxo9sYXbJmSBtyZlsdW1hdCDDvMOnw7xuIG9wZXJhdG9yYSBtw7xyYWNpyZl0IGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IsSwc3TJmWRpeWluaXogUMSwTiBrb2R1IGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4ixLBzdMmZZGl5aW5peiBQSU4ga29kdSB0yZlzZGlxbMmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJTxLBNIGthcnTEsW4ga2lsaWRpIGHDp8SxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IllhbmzEscWfIFDEsE4ga29kLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IjQtZMmZbiA4LcmZIHHJmWTJmXIgcsmZccmZbWkgb2xhbiBQSU4geWF6xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyBrb2QgOCByyZlxyZltIHbJmSB5YSBkYWhhIMOnb3ggb2xtYWzEsWTEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iRMO8emfDvG4gUFVLIGtvZHUgeWVuaWTJmW4gZGF4aWwgZWRpbi4gVMmZa3JhcmxhbmFuIGPJmWhkbMmZciBTSU1cJ2kgYmlyZMmZZsmZbGlrIHPEsXJhZGFuIMOnxLF4YXJhY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ga29kbGFyxLEgdXnEn3VuIGRleWlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iSMmZZGRpbmTJmW4gw6dveCBjyZloZCBlZGlsZGkhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBHb29nbGUgaGVzYWLEsW7EsXogaWzJmSBkYXhpbCBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4ixLBzdGlmYWTJmcOnaSBhZMSxIChlLXBvw6d0KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4ixZ5pZnLJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4iRGF4aWwgb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+IllhbmzEscWfIGlzdGlmYWTJmcOnaSBhZMSxIHbJmSB5YSBwYXJvbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4ixLBzdGlmYWTJmcOnaSBhZMSxbsSxesSxIHbJmSB5YSBwYXJvbHVudXp1IHVudXRtdXN1bnV6P1xuICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiBsaW5raW7JmSBkYXhpbCBvbHVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+Ikhlc2FiIHlveGxhbsSxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iUElOIGtvZHVudXp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldGRpbml6LlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IsWeaWZyyZluaXppIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldGRpbml6LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIHlveGxhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iTW9kZWxpbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gw6fJmWttaXNpbml6LlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4iU2l6IHBsYW7Fn2V0IGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgdcSfdXJzdXogY8mZaGQgZXRzyZluaXosIHBsYW7Fn2V0IGZhYnJpayBheWFybGFyxLFuYSBzxLFmxLFybGFuYWNhcSB2yZkgYsO8dMO8biBtyZlsdW1hdGxhcsSxbsSxeiBpdMmZY8mZay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4iU2l6IHRlbGVmb24ga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHXEn3Vyc3V6IGPJmWhkIGV0bWlzaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZMmZZsmZIGTJmSB1xJ91cnN1eiBjyZloZCBldHPJmW5peiwgdGVsZWZvbiBmYWJyaWsgYXlhcmxhcsSxbmEgc8SxZsSxcmxhbmFjYXEgdsmZIGLDvHTDvG4gbcmZbHVtYXRsYXLEsW7EsXogaXTJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiJTaXogcGxhbsWfZXQga2lsaWRpbmkgYcOnbWFxIMO8w6fDvG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIFBsYW7Fn2V0IGZhYnJpayBheWFybGFyxLFuYSBzxLFmxLFybGFuYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiJTaXogdGVsZWZvbnVuIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB5YW5sxLHFnyBjyZloZCBldG1pc2luaXouIFRlbGVmb24gYXJ0xLFxIGRlZm9sdCB6YXZvZCBoYWzEsW5hIHPEsWbEsXJsYW5hY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJTaXoga2lsaWRpIGHDp21hcSDDvMOnw7xuIMWfYWJsb251IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBzyZlodiDDp8mZa2Rpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkYWhhIHXEn3Vyc3V6IGPJmWhkZMmZbiBzb25yYSBwbGFuxZ9ldGluaXppbiBraWxpZGluaSBlLXBvw6d0IGhlc2FixLFuxLF6bGEgYcOnbWFxIHTJmWzJmWIgb2x1bmFjYXEuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSBiaXIgZGFoYSB5b3hsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJTaXogYXJ0xLFxIG1vZGVsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gZGF4aWwgZXRtaXNpbml6Ljx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgeWFubMSxxZ8gZGF4aWwgZXRzyZluaXosIHRlbGVmb251biBraWxpZGluaW4gYcOnxLFsbWFzxLEgw7zDp8O8biBlbGVrdHJvbiBwb8OndCDDvG52YW7EsW7EsXogdMmZbMmZYiBvbHVuYWNhcS5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIGPJmWhkIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIgLSAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IlnEscSfxLHFn2TEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLGj3Z2yZlsa2kgaXpsyZltyZkgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iTsO2dmLJmXRpIGl6bMmZbcmZIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJQYXV6YSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiJPeHV0bWEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4iRGF5YW5kxLFybWEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+IlhpZG3JmXQgeW94ZHVyLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM4ZjZhYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iUMSwTiBrb2R1IGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUsgdsmZIHllbmkgUMSwTiBrb2QgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIGtvZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iWWVuaSBQSU4ga29kdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IsWeaWZyyZkgZGF4aWwgZXRtyZlrIMO8w6fDvG4gdG94dW51biI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IktpbGlkaSBhw6dtYXEgw7zDp8O8biBwYXJvbCB5YXrEsW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gUElOIGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiJZYW5sxLHFnyBQSU4ga29kdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIE1lbnl1LCBzb25yYSAwIGJhc8Sxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4iU2lmyZl0IGtpbGlkaSBjyZloZGzJmXJpbml6IGJpdGRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiJEb2xtdcWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbiIgbXNnaWQ9IjgxMTc1NzIwMDA2Mzk5OTgzODgiPiJEb2x1ciwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IkVsZWt0cmlryZkgcW/Fn3VuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4iS2lsaWRpIGHDp21hcSDDvMOnw7xuIE1lbnl1IGTDvHltyZlzaW7JmSBiYXjEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiLFnsmZYsmZa8mZIGtpbGlkbMmZbmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlPEsE0ga2FydCB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4iUGxhbsWfZXRkyZkgU8SwTSBrYXJ0IHlveGR1ci4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiJUZWxlZm9uZGEgU8SwTSBrYXJ0IHlveGR1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiJTSU0ga2FydMSxIGRheGlsIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iU8SwTSBrYXJ0IHlveGR1ciB2yZkgeWEgb3h1bmEgYmlsaW5taXIuIFPEsE0ga2FydCBkYXhpbCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiJZYXJhcnPEsXogU0lNIGthcnQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1ODkyOTQwOTA5Njk5NzIzNTQ0Ij4iU2l6aW4gU8SwTSBrYXJ0xLFuxLF6IGRhaW1pIG9sYXJhcSBkZWFrdGl2bMmZxZ9pYi5cbiBCYcWfcWEgU8SwTSBrYXJ0IMO8w6fDvG4gc2ltc2l6IHhpZG3JmXQgcHJvdmF5ZGVyaW5pesmZIG3DvHJhY2nJmXQgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI2ODc1NzczNDEzMzA2MzgwOTAyIj4iU0lNIGthcnQga2lsaWRsyZluaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJTxLBNIGthcnQgUFVLIGlsyZkga2lsaWRsyZluaWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJTxLBNIGthcnTEsW4ga2lsaWRpIGHDp8SxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4gV2lkZ2V0ICUyJGQgb2YgJTMkZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4iV2lkZ2V0IMmZbGF2yZkgZWRpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IkJvxZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+IktpbGlkaSBhw6dtYSBzYWjJmXNpIGdlbmnFn2zJmW5kaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiJLaWxpZGkgYcOnbWEgc2FoyZlzaSDDp8O2a2TDvC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB2aWRjZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IsSwc3RpZmFkyZnDp2kgc2VsZWt0b3J1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zdGF0dXMiIG1zZ2lkPSI4MDA4MjY0NjAzOTM1OTMwNjExIj4iU3RhdHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4iS2FtZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+Ik1lZGlhIGtvbnRyb2xsYXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4iWWVuaWTJmW4gc8SxcmFsYW1hIHZpZGNldGkgYmHFn2xhZMSxbGTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiJWaWRjZXRpbiB0yZlrcmFyIHNpZmFyacWfaSBzb25hIMOnYXRkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiJWaWRjZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gc2lsaW5kaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiJLaWxpZGkgYcOnbWEgc2FoyZlzaW5pIGdlbmnFn2zJmW5kaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4iU8O8csO8xZ9kw7xybcmZIGtpbGlkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IktpbGQgYcOnbWEgbW9kZWxpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4iU2lmyZl0IEtpbGlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQaW4ga2lsaWQgYcOnbWFzxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4ixZ5pZnLJmSBraWxpZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4iTW9kZWwgc2FoyZlzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4iU8O8csO8xZ9kw7xybcmZIHNhaMmZc2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjEzMzcyODY1MzgzMTg1NDM1NTUiPiLGj3Z2yZlsa2kgaXpsyZltyZkgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiJOw7Z2YsmZdGkgaXpsyZltyZkgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iUGF1emEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJPeHV0bWEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJEYXlhbmTEsXJtYSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4iTMmZxJ92IGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+IlNpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4iSGF6xLFyZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IlJlamltIGTJmXlpxZ9pa2xpeWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkRheGlsIG9sdW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IktpbGlkaSBhw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iS2FtZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IlPJmXNzaXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU8mZcyBhw6fEsXFkxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJBeHRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gw7zDp8O8biB5dXhhcsSxIHPDvHLDvMWfZMO8csO8bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gw7zDp8O8biBhxZ9hxJ/EsSBzw7xyw7zFn2TDvHLDvG4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IMO8w6fDvG4gc29sYSBzw7xyw7zFn2TDvHIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDDvMOnw7xuIHNhxJ9hIHPDvHLDvMWfZMO8ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IkNhcmkgaXN0aWZhZMmZw6dpIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IlTJmWNpbGkgesmZbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLFnmFibG9udSB1bnV0bXXFn2FtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiJZYW5sxLHFnyBNb2RlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IllhbmzEscWfIMWeaWZyyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUElOIHPJmWh2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSBzb25yYSB5ZW5pZMmZbiBjyZloZCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4ixZ5hYmxvbnVudXp1IMOnyZlraW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJTSU0gUElOIGtvZHUgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iUMSwTiBrb2R1IGRheGlsIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4iUGFyb2wgZGF4aWwgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IlNJTSBpbmRpIGRlYWt0aXZkaXIuIERhdmFtIGV0bcmZayDDvMOnw7xuIFBVSyBrb2R1IGRheGlsIGVkaW4uIMaPbGF2yZkgbcmZbHVtYXQgw7zDp8O8biBvcGVyYXRvcmEgbcO8cmFjacmZdCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLEsHN0yZlkaXlpbml6IFDEsE4ga29kdSBkYXhpbCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IsSwc3TJmWRpeWluaXogUElOIGtvZHUgdMmZc2RpcWzJmXlpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU8SwTSBrYXJ0xLFuIGtpbGlkaSBhw6fEsWzEsXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJZYW5sxLHFnyBQxLBOIGtvZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiI0LWTJmW4gOC3JmSBxyZlkyZlyIHLJmXHJmW1pIG9sYW4gUElOIHlhesSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsga29kIDggcsmZccmZbSB2yZkgeWEgZGFoYSDDp294IG9sbWFsxLFkxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkTDvHpnw7xuIFBVSyBrb2R1IHllbmlkyZluIGRheGlsIGVkaW4uIFTJmWtyYXJsYW5hbiBjyZloZGzJmXIgU0lNXCdpIGJpcmTJmWbJmWxpayBzxLFyYWRhbiDDp8SxeGFyYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIGtvZGxhcsSxIHV5xJ91biBkZXlpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IkjJmWRkaW5kyZluIMOnb3ggY8mZaGQgZWRpbGRpISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJLaWxpZGkgYcOnbWFxIMO8w6fDvG4gR29vZ2xlIGhlc2FixLFuxLF6IGlsyZkgZGF4aWwgb2x1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+IsSwc3RpZmFkyZnDp2kgYWTEsSAoZS1wb8OndCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IsWeaWZyyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IkRheGlsIG9sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiJZYW5sxLHFnyBpc3RpZmFkyZnDp2kgYWTEsSB2yZkgeWEgcGFyb2wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IsSwc3RpZmFkyZnDp2kgYWTEsW7EsXrEsSB2yZkgeWEgcGFyb2x1bnV6dSB1bnV0bXVzdW51ej9cbiAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIgbGlua2luyZkgZGF4aWwgb2x1bi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiJIZXNhYiB5b3hsYW7EsWzEsXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlBJTiBrb2R1bnV6dSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gZGF4aWwgZXRkaW5pei5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIHlveGxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLFnmlmcsmZbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgeWFubMSxxZ8gZGF4aWwgZXRkaW5pei4gXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSB5ZW5pZMmZbiB5b3hsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ik1vZGVsaW5pemkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIMOnyZlrbWlzaW5pei5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIHlveGxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IlNpeiBwbGFuxZ9ldCBraWxpZGluaSBhw6dtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgdcSfdXJzdXogY8mZaGQgZXRtaXNpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkyZlmyZkgZMmZIHXEn3Vyc3V6IGPJmWhkIGV0c8mZbml6LCBwbGFuxZ9ldCBmYWJyaWsgYXlhcmxhcsSxbmEgc8SxZsSxcmxhbmFjYXEgdsmZIGLDvHTDvG4gbcmZbHVtYXRsYXLEsW7EsXogaXTJmWPJmWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IlNpeiB0ZWxlZm9uIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB1xJ91cnN1eiBjyZloZCBldG1pc2luaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBkyZkgdcSfdXJzdXogY8mZaGQgZXRzyZluaXosIHRlbGVmb24gZmFicmlrIGF5YXJsYXLEsW5hIHPEsWbEsXJsYW5hY2FxIHbJmSBiw7x0w7xuIG3JmWx1bWF0bGFyxLFuxLF6IGl0yZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4iU2l6IHBsYW7Fn2V0IGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBkyZlmyZkgdcSfdXJzdXogY8mZaGQgZXRtaXNpbml6LiBQbGFuxZ9ldCBmYWJyaWsgYXlhcmxhcsSxbmEgc8SxZsSxcmxhbmFjYXEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4iU2l6IHRlbGVmb251biBraWxpZGluaSBhw6dtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4geWFubMSxxZ8gY8mZaGQgZXRtaXNpbml6LiBUZWxlZm9uIGFydMSxcSBkZWZvbHQgemF2b2QgaGFsxLFuYSBzxLFmxLFybGFuYWNhcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iU2l6IGtpbGlkaSBhw6dtYXEgw7zDp8O8biDFn2FibG9udSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgc8mZaHYgw6fJmWtkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZGFoYSB1xJ91cnN1eiBjyZloZGTJmW4gc29ucmEgcGxhbsWfZXRpbml6aW4ga2lsaWRpbmkgZS1wb8OndCBoZXNhYsSxbsSxemxhIGHDp21hcSB0yZlsyZliIG9sdW5hY2FxLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgYmlyIGRhaGEgeW94bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iU2l6IGFydMSxcSBtb2RlbGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIGRheGlsIGV0bWlzaW5pei48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkyZlmyZkgZMmZIHlhbmzEscWfIGRheGlsIGV0c8mZbml6LCB0ZWxlZm9udW4ga2lsaWRpbmluIGHDp8SxbG1hc8SxIMO8w6fDvG4gZWxla3Ryb24gcG/Dp3Qgw7xudmFuxLFuxLF6IHTJmWzJmWIgb2x1bmFjYXEuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSB5ZW5pZMmZbiBjyZloZCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIC0gIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJZxLHEn8SxxZ9kxLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4ixo92dsmZbGtpIGl6bMmZbcmZIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Ik7DtnZiyZl0aSBpemzJmW3JmSBkw7x5bcmZc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iUGF1emEgZMO8eW3JmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIyOTI0NjI4ODYzNzQxMTUwOTU2Ij4iT3h1dG1hIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzA4NDE3OTMyNDgxMDU3NTc4NyI+IkRheWFuZMSxcm1hIGTDvHltyZlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg3MDA2NTA0MDMwNTQwNDIxNTMiPiJYaWRtyZl0IHlveGR1ci4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYmUvYWN0aXZpdHlzdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYmUvYWN0aXZpdHlzdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlZmU0MC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWJlL2FjdGl2aXR5c3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCi0qKgotKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKioKLSoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoqCi0qKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9uYW1lIiBtc2dpZD0iMzM1Mjg4ODE4NjY3NDk4MTU5MyI+IktleWd1YXJkVGVzdEFjdGl2aXR5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2VjdXJlX2FwcF9uYW1lIiBtc2dpZD0iNzk1NTQ5ODc0MjgxNjg2ODA0OSI+IlVuaWZpZWRDYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub25lX21lbnVfaXRlbSIgbXNnaWQ9IjYxNTY3NDcyODU2ODc1NTE0MjQiPiLQkNGF0L7QstGLINC90Y/QvNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGluX21lbnVfaXRlbSIgbXNnaWQ9IjExNzk3NTY0MzMyNjg5NjIzMTEiPiJQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfbWVudV9pdGVtIiBtc2dpZD0iMTk1OTk4MDQ5OTY2MjE1MzE2MCI+ItCf0LDRgNC+0LvRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhdHRlcm5fbWVudV9pdGVtIiBtc2dpZD0iMjk4Nzc5ODE1MjE3NTE0MDI0OSI+ItCo0LDQsdC70L7QvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9waW5fbWVudV9pdGVtIiBtc2dpZD0iMzk2MjI4NjYzOTY0NTA4NDg4MCI+IlBJTi3QutC+0LQgU0lNLdC60LDRgNGC0YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcHVrX21lbnVfaXRlbSIgbXNnaWQ9IjYxOTAwNDQxMzMwMDgzOTI5NzQiPiJQVUst0LrQvtC0IFNJTS3QutCw0YDRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRkX3dpZGdldF9pdGVtIiBtc2dpZD0iMjc5NzAyMTUyMzY2ODU3NDE1Ij4i0JLRi9Cx0LDRgCDQsmnQtNC20Y3RgtCwLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib25fc2NyZWVuX3R1cm5lZF9vZmYiIG1zZ2lkPSI4NzYxMzk2MzI5NzcwNTA4MzY3Ij4ib25TY3JlZW5UdXJuZWRPZmYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbl9zY3JlZW5fdHVybmVkX29uIiBtc2dpZD0iOTIyMjkyNjgxODAzMDcyODk5OSI+Im9uU2NyZWVuVHVybmVkT24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkb19rZXlndWFyZCIgbXNnaWQ9IjkyMTA5MzY5Nzc4MjMxMTg3OTYiPiJkb0tleWd1YXJkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idmVyaWZ5X3VubG9jayIgbXNnaWQ9Ijg1MDg3MjIyNzMzMjkzMDY5NjgiPiJ2ZXJpZnlVbmxvY2siPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWJlL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTAyMGEwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0vKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAotKioKLSoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0qKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0qKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qKgotKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLQo9Cy0Y/QtNC30ZbRhtC1IFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLQo9Cy0Y/QtNC30ZbRhtC1IFBVSy3QutC+0LQg0ZYg0L3QvtCy0YsgUElOLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLQndC+0LLRiyBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i0JTQsNC60YDQsNC90ZbRhtC10YHRjywg0LrQsNCxINGD0LLQtdGB0YbRliDQv9Cw0YDQvtC70YwiPC9mb250Pjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLQo9Cy0Y/QtNC30ZbRhtC1INC/0LDRgNC+0LvRjCDQtNC70Y8g0YDQsNC30LHQu9Cw0LrQsNCy0LDQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLQmtCw0LEg0YDQsNC30LHQu9Cw0LrQsNCy0LDRhtGMLCDRg9Cy0Y/QtNC30ZbRhtC1IFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLQndGP0L/RgNCw0LLRltC70YzQvdGLIFBJTi3QutC+0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+ItCa0LDQsSDRgNCw0LfQsdC70LDQutCw0LLQsNGG0YwsINC90LDRhtGW0YHQvdGW0YbQtSBcItCc0LXQvdGOXCIsINC30LDRgtGL0LwgMC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i0J/QtdGA0LDQstGL0YjQsNC90LAg0LzQsNC60YHRltC80LDQu9GM0L3QsNGPINC60L7Qu9GM0LrQsNGB0YbRjCDRgdC/0YDQvtCxINGA0LDQt9Cx0LvQsNC60L7RntC60ZYg0L/RgNCw0Lcg0KTRjdC50YHQutCw0L3RgtGA0L7Qu9GMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiLQl9Cw0YDQsNC00LbQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+ItCX0LDRgNCw0LTQutCwLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i0J/QsNC00LrQu9GO0YfRi9GG0LUg0LfQsNGA0LDQtNC90YPRjiDQv9GA0YvQu9Cw0LTRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+ItCd0LDRhtGW0YHQvdGW0YbQtSDQutC90L7Qv9C60YMgXCLQnNC10L3RjlwiLCDQutCw0LEg0YDQsNC30LHQu9Cw0LrRltGA0LDQstCw0YbRjC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+ItCh0LXRgtC60LAg0LfQsNCx0LvQsNC6adGA0LDQstCw0L3QsNGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+ItCd0Y/QvNCwIFNJTS3QutCw0YDRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+ItCjINC/0LvQsNC90YjRjdGG0LUg0L3Rj9C80LAgU0lNLdC60LDRgNGC0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiLQoyDRgtGN0LvQtdGE0L7QvdC1INC90Y/QvNCwIFNJTS3QutCw0YDRgtGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiLQo9GB0YLQsNGe0YbQtSBTSU0t0LrQsNGA0YLRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJTSU0t0LrQsNGA0YLQsCDQsNC00YHRg9GC0L3RltGH0LDQtSDRhtGWINC90LUg0YfRi9GC0LDQtdGG0YbQsC4g0KPRgdGC0LDRntGG0LUgU0lNLdC60LDRgNGC0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iODM0MDgxMzk4OTU4NjYyMjM1NiI+IlNJTS3QutCw0YDRgtGDINC90LXQvNCw0LPRh9GL0LzQsCDQstGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+ItCS0LDRiNCwIFNJTS3QutCw0YDRgtCwINCx0YvQu9CwINCw0LTQutC70Y7Rh9Cw0L3QsCDQvdCw0LfQsNGe0YHRkdC00YsuXG4g0JfQstGP0LbRi9GG0LXRgdGPINC3INCw0L/QtdGA0LDRgtCw0YDQsNC8INCx0LXRgdC/0YDQsNCy0LDQtNC90L7QuSDRgdGD0LLRj9C30ZYsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMINGW0L3RiNGD0Y4gU0lNLdC60LDRgNGC0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IlNJTS3QutCw0YDRgtCwINC30LDQsdC70LDQumnRgNCw0LLQsNC90LDRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IlNJTS3QutCw0YDRgtCwINC30LDQsdC70LDQumnRgNCw0LLQsNC90LAgUFVLLdC60L7QtNCw0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiLQoNCw0LfQsdC70LDQumnRgNCw0LLQsNC90L3QtSBTSU0t0LrQsNGA0YLRiy4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4g0JJJ0LTQttGN0YIgJTIkZCDQtyAlMyRkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiLQlNCw0LTQsNGG0Ywg0LLRltC00LbRjdGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLQn9GD0YHRgtGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLQktC+0LHQu9Cw0YHRhtGMINGA0LDQt9Cx0LvQsNC60ZbRgNC+0Z7QutGWINGA0LDQt9Cz0LDRgNC90YPRgtCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+ItCS0L7QsdC70LDRgdGG0Ywg0YDQsNC30LHQu9Cw0LrRltGA0L7RntC60ZYg0LfQs9Cw0YDQvdGD0YLQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiLQktGW0LTQttGN0YIgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+ItCh0LXQu9C10LrRgtCw0YAg0LrQsNGA0YvRgdGC0LDQu9GM0L1p0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+ItCh0YLQsNC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4i0JrQsNC80LXRgNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+ItCd0LDQu9Cw0LTRiyDQvNGD0LvRjNGC0YvQvNC10LTRi9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiLQl9C80Y/QvdC10L3QvdC1INC/0LDRgNCw0LTQutGDINCy0ZbQtNC20Y3RgtCw0Z4g0L/QsNGH0LDQu9C+0YHRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLQl9C80Y/QvdC10L3QvdC1INC/0LDRgNCw0LTQutGDINCy0ZbQtNC20Y3RgtCw0Z4g0YHQutC+0L3Rh9GL0LvQsNGB0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiLQktGW0LTQttGN0YIgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g0LLRi9C00LDQu9C10L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLQoNCw0LfQs9Cw0YDQvdGD0YbRjCDQstC+0LHQu9Cw0YHRhtGMINGA0LDQt9Cx0LvQsNC60ZbRgNC+0Z7QutGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+ItCg0LDQt9Cx0LvQsNC6adGA0L7RntC60LAg0YHQu9Cw0LnQtNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i0KPQt9C+0YAg0YDQsNC30LHQu9Cw0Lpp0YDQvtGe0LrRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+ItCk0Y3QudGB0LrQsNC90YLRgNC+0LvRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQSU4t0LrQvtC0INGA0LDQt9Cx0LvQsNC6adGA0L7RntC60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i0J/QsNGA0L7Qu9GMINGA0LDQt9Cx0LvQsNC6adGA0L7RntC60ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i0JLQvtCx0LvQsNGB0YbRjCDRg9C30L7RgNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiLQktC+0LHQu9Cw0YHRhtGMINGB0LvQsNC50LTQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+ItCa0L3QvtC/0LrQsCDQv9Cw0L/Rj9GA0Y3QtNC90Y/QuSDQutCw0LzQv9Cw0Ldp0YbRi9GWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiLQmtC90L7Qv9C60LAg0L3QsNGB0YLRg9C/0L3QsNC5INC60LDQvNC/0LDQt2nRhtGL0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLQmtC90L7Qv9C60LAg0L/QsNGe0LfRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i0JrQvdC+0L/QutCwINC/0YDQsNC50LPRgNCw0LLQsNC90L3RjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i0JrQvdC+0L/QutCwINGB0L/Ri9C90LXQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iMTIzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQWx0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiLQkNC00LzQtdC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i0JLRi9C00LDQu9GW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4i0JPQsNGC0L7QstCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4i0JfQvNC10L3QsCDRgNGN0LbRi9C80YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLQoNCw0LfQsdC70LDQutCw0LLQsNGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i0JrQsNC80LXRgNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+ItCm0ZbRhdGWINGA0Y3QttGL0LwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i0JPRg9C6INGD0LrQu9GO0YfQsNC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+ItCf0L7RiNGD0LoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i0J/RgNCw0LLRj9C00LfRltGG0LUg0L/QsNC70YzRhtCw0Lwg0YPQstC10YDRhSwg0LrQsNCxINCw0YLRgNGL0LzQsNGG0YwgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+ItCf0YDQsNCy0Y/QtNC30ZbRhtC1INC/0LDQu9GM0YbQsNC8INGD0L3RltC3LCDQutCw0LEg0LDRgtGA0YvQvNCw0YbRjCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i0J/RgNCw0LLRj9C00LfRltGG0LUg0L/QsNC70YzRhtCw0Lwg0YPQu9C10LLQsCwg0LrQsNCxINCw0YLRgNGL0LzQsNGG0YwgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLQn9GA0LDQstGP0LTQt9GW0YbQtSDQv9Cw0LvRjNGG0LDQvCDRg9C/0YDQsNCy0LAsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+ItCR0Y/Qs9GD0YfRiyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LogPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i0K3QutGB0YLRgNCw0L3QvdGLINCy0YvQutC70ZbQuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+ItCX0LDQsdGL0LvRliDQutC70Y7RhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4i0J3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDQutC70Y7RhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+ItCd0Y/Qv9GA0LDQsmnQu9GM0L3RiyDQv9Cw0YDQvtC70YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4i0J3Rj9C/0YDQsNCy0ZbQu9GM0L3RiyBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiLQn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDINC/0YDQsNC3IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+ItCd0LDQvNCw0LvRjtC50YbQtSDQutC70Y7RhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+ItCj0LLRj9C00LfRltGG0LUgUElOLdC60L7QtCBTSU0t0LrQsNGA0YLRiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4i0KPQstGP0LTQt9GW0YbQtSBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+ItCj0LLRj9C00LfRltGG0LUg0L/QsNGA0L7Qu9GMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNLdC60LDRgNGC0LAg0LfQsNGA0LDQtyDQsNC00LrQu9GO0YfQsNC90LAuINCj0LLRj9C00LfRltGG0LUgUFVLLdC60L7QtCwg0LrQsNCxINC/0YDQsNGG0Y/Qs9C90YPRhtGMLiDQl9Cy0Y/QttGL0YbQtdGB0Y8g0YHQsCDRgdCy0LBp0Lwg0LDQv9C10YDQsNGC0LDRgNCw0LwsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMINC00LDQtNCw0YLQutC+0LLRg9GOIGnQvdGE0LDRgNC80LDRhtGL0Y4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+ItCj0LLRj9C00LfRltGG0LUg0LbQsNC00LDQvdGLIFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i0J/QsNGG0LLQtdGA0LTQt9GW0YbQtSDQttCw0LTQsNC9IFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+ItCg0LDQt9Cx0LvQsNC6adGA0L7RntC60LAgU0lNLdC60LDRgNGC0YsuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiLQndGP0L/RgNCw0LLRltC70YzQvdGLIFBJTi3QutC+0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i0KPQstGP0LTQt9GW0YbQtSBQSU4t0LrQvtC0LCDRj9C60ZYg0LfQvNGP0YjRh9Cw0LUg0LDQtCA0INC00LAgOCDQu9GW0YfQsdCw0Z4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLLdC60L7QtCDQv9Cw0LLRltC90LXQvSDRg9GC0YDRi9C80Ltp0LLQsNGG0YwgOCDQu2nRh9Cx0LDRniDRliDQsdC+0LvRjNGILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+ItCf0LDRntGC0L7RgNC90LAg0YPQstGP0LTQt9GW0YbQtSDQv9GA0LDQstGW0LvRjNC90YsgUFVLLdC60L7QtC4g0J3QtdCw0LTQvdCw0YDQsNC30L7QstGL0Y8g0YHQv9GA0L7QsdGLINC90LDQt9Cw0Z7QttC00Ysg0LDQtNC60LvRjtGH0LDRhtGMIFNJTS3QutCw0YDRgtGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4t0LrQvtC00Ysg0L3QtSDRgdGD0L/QsNC00LDRjtGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLQl9Cw0L3QsNC00YLQsCDRiNC80LDRgiDRgdC/0YDQvtCxINC/0LDRntGC0LDRgNGL0YbRjCDRiNCw0LHQu9C+0L0hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+ItCa0LDQsSDRgNCw0LfQsdC70LDQumnRgNCw0LLQsNGG0YwsINGD0LLQsNC50LTQt9GW0YbQtSDRniDRgdCy0L7QuSDRg9C70ZbQutC+0LLRiyDQt9Cw0L/RltGBIEdvb2dsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+ItCG0LzRjyDQutCw0YDRi9GB0YLQsNC70YzQvdGW0LrQsCAo0Y3Qu9C10LrRgtGA0L7QvdC90LDRjyDQv9C+0YjRgtCwKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i0J/QsNGA0L7Qu9GMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLQo9Cy0LDQudGB0YZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLQndGP0L/RgNCw0LLRltC70YzQvdCw0LUg0ZbQvNGPINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCwINGG0ZYg0L/QsNGA0L7Qu9GMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLQl9Cw0LHRi9C70ZbRgdGPINC90LAg0ZbQvNGPINC60LDRgNGL0YHRgtCw0LvRjNC90ZbQutCwINCw0LHQviDQv9Cw0YDQvtC70Yw/XG7QndCw0LLQtdC00LDQudGG0LUgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+ItCf0YDQsNCy0LXRgNC60LAg0Z7Qu2nQutC+0LLQsNCz0LAg0LfQsNC/adGB0YMuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRntCy0Y/Qu9GWIFBJTi3QutC+0LQg0L/RjdGe0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgNCw0LfQvtGeOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gXG5cbtCf0LDRntGC0LDRgNGL0YbQtSDRgdC/0YDQvtCx0YMg0L/RgNCw0LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRntCy0Y/Qu9GWINC/0LDRgNC+0LvRjCDQv9GN0Z7QvdGD0Y4g0LrQvtC70YzQutCw0YHRhtGMINGA0LDQt9C+0Z46IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBcblxu0J/QsNGe0YLQsNGA0YvRhtC1INGB0L/RgNC+0LHRgyDQv9GA0LDQtyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGe0LLRj9C70ZYg0LPRgNCw0YTRltGH0L3RiyDQutC70Y7RhyDRgNCw0LfQsdC70LDQumnRgNC+0Z7Qumkg0L/RjdGe0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgNCw0LfQvtGeOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gXG5cbtCf0LDRntGC0LDRgNGL0YbQtSDRgdC/0YDQvtCx0YMg0L/RgNCw0LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGB0L/RgNCw0LHQsNCy0LDQu9GWINGA0LDQt9Cx0LvQsNC6adGA0LDQstCw0YbRjCDQv9C70LDQvdGI0Y3RgiDQvdC10LrQsNC70YzQumkg0YDQsNC30L7RniAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4pLiDQn9Cw0YHQu9GPINGP0YjRh9GNINC90LXQutCw0LvRjNC6adGFINGB0L/RgNC+0LEgKDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+KSDRkdC9INCx0YPQtNC30LUg0YHQutGW0L3Rg9GC0Ysg0LTQsCDQt9Cw0LLQvtC00YHQutGW0YUg0L3QsNC70LDQtCBpINC60LDRgNGL0YHRgtCw0LvRjNC9adGG0Lpp0Y8g0LTQsNC00LfQtdC90YvRjyDQsdGD0LTRg9GG0Ywg0LfQs9GD0LHQu9C10L3Ri9GPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0YHQv9GA0LDQsdCw0LLQsNC70ZYg0YDQsNC30LHQu9Cw0Lpp0YDQsNCy0LDRhtGMINC/0LvQsNC90YjRjdGCINC90LXQutCw0LvRjNC6aSDRgNCw0LfQvtGeICg8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPikuINCf0LDRgdC70Y8g0Y/RiNGH0Y0g0L3QtdC60LDQu9GM0Lpp0YUg0YHQv9GA0L7QsSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4pINGR0L0g0LHRg9C00LfQtSDRgdC60ZbQvdGD0YLRiyDQtNCwINC30LDQstCw0LTRgdC60ZbRhSDQvdCw0LvQsNC0IGkg0LrQsNGA0YvRgdGC0LDQu9GM0L1p0YbQumnRjyDQtNCw0LTQt9C10L3Ri9GPINCx0YPQtNGD0YbRjCDQt9Cz0YPQsdC70LXQvdGL0Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiLQktGLINC90Y/Qv9GA0LDQstGW0LvRjNC90LAg0YHQv9GA0LDQsdCw0LLQsNC70ZYg0YDQsNC30LHQu9Cw0Lpp0YDQsNCy0LDRhtGMINC/0LvQsNC90YjRjdGCINC90LXQutCw0LvRjNC6aSDRgNCw0LfQvtGeICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4pLiDQptGP0L/QtdGAINGR0L0g0LHRg9C00LfQtSDRgdC60ZbQvdGD0YLRiyDQtNCwINC30LDQstCw0LTRgdC60ZbRhSDQvdCw0LvQsNC0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRgdC/0YDQsNCx0LDQstCw0LvRliDRgNCw0LfQsdC70LDQumnRgNCw0LLQsNGG0Ywg0YLRjdC70LXRhNC+0L0g0L3QtdC60LDQu9GM0LppINGA0LDQt9C+0Z4gKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPikuINCm0Y/Qv9C10YAg0ZHQvSDQsdGD0LTQt9C1INGB0LrRltC90YPRgtGLINC00LAg0LfQsNCy0LDQtNGB0LrRltGFINC90LDQu9Cw0LQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+ItCS0Ysg0L3Rj9C/0YDQsNCy0ZbQu9GM0L3QsCDRntCy0Y/Qu9GWINCz0YDQsNGE0ZbRh9C90Ysg0LrQu9GO0Ycg0YDQsNC30LHQu9Cw0Lpp0YDQvtGe0LppINC/0Y3RntC90YPRjiDQutC+0LvRjNC60LDRgdGG0Ywg0YDQsNC30L7RnjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uINCf0LDRgdC70Y8g0Y/RiNGH0Y0g0L3QtdC60LDQu9GM0Lpp0YUg0L3Rj9Ge0LTQsNC70YvRhSDRgdC/0YDQvtCxICg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPikg0LLQsNC8INCx0YPQtNC30LUg0L/RgNCw0L/QsNC90LDQstCw0L3QsCDRgNCw0LfQsdC70LDQumnRgNCw0LLQsNGG0Ywg0YLRjdC70LXRhNC+0L0sINGD0LLQsNC50YjQvtGe0YjRiyDRniBHb29nbGUuXG5cbiDQn9Cw0Z7RgtCw0YDRi9GG0LUg0YHQv9GA0L7QsdGDINC/0YDQsNC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INGBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i0JLRiyDQvdGP0L/RgNCw0LLRltC70YzQvdCwINGe0LLRj9C70ZYg0LPRgNCw0YTRltGH0L3RiyDQutC70Y7RhyDRgNCw0LfQsdC70LDQumnRgNC+0Z7Qumkg0L/RjdGe0L3Rg9GOINC60L7Qu9GM0LrQsNGB0YbRjCDRgNCw0LfQvtGeOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4g0J/QsNGB0LvRjyDRj9GI0YfRjSDQvdC10LrQsNC70YzQumnRhSDQvdGP0Z7QtNCw0LvRi9GFINGB0L/RgNC+0LEgKDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+KSDQstCw0Lwg0LHRg9C00LfQtSDQv9GA0LDQv9Cw0L3QsNCy0LDQvdCwINGA0LDQt9Cx0LvQsNC6adGA0LDQstCw0YbRjCDRgtGN0LvQtdGE0L7QvSwg0YPQstCw0LnRiNC+0Z7RiNGLINGeIEdvb2dsZS5cblxuINCf0LDRntGC0LDRgNGL0YbQtSDRgdC/0YDQvtCx0YMg0L/RgNCw0LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i0JLRi9C00LDQu2nRhtGMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i0JrQvdC+0L/QutCwINC/0LDQv9GP0YDRjdC00L3Rj9C5INC60LDQvNC/0LDQt2nRhtGL0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLQmtC90L7Qv9C60LAg0L3QsNGB0YLRg9C/0L3QsNC5INC60LDQvNC/0LDQt2nRhtGL0ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i0JrQvdC+0L/QutCwINC/0LDRntC30YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiLQmtC90L7Qv9C60LAg0L/RgNCw0LnQs9GA0LDQstCw0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4i0JrQvdC+0L/QutCwINGB0L/Ri9C90LXQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4i0J3QtSDQsNCx0YHQu9GD0LPQvtGe0LLQsNC10YbRhtCwLiI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKaW5kZXggODY5YWI3Yi4uNjQxYWRiZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLQktGK0LLQtdC00LXRgtC1INCf0JjQnSDQutC+0LTQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+ItCS0YrQstC10LTQtdGC0LUgUFVLINC4INC90L7QstC40Y8g0J/QmNCdINC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLINC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i0J3QvtCyINCf0JjQnSDQutC+0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLQktGK0LLQtdC00LXRgtC1IFBVSyDQt9CwIFNJTSDQutCw0YDRgtCw0YLQsCDQuCDQvdC+0LLQuNGPINCf0JjQnSDQutC+0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlBVSyDQutC+0LQg0LfQsCBTSU0g0LrQsNGA0YLQsNGC0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+ItCd0L7QsiDQn9CY0J0g0LrQvtC0INC30LAgU0lNINC60LDRgNGC0LDRgtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i0JTQvtC60L7RgdC90LXRgtC1INC4INCy0YrQstC10LTQtdGC0LUg0L/QsNGA0L7Qu9CwIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i0JLRitCy0LXQtNC10YLQtSDQv9Cw0YDQvtC70LAsINC30LAg0LTQsCDQvtGC0LrQu9GO0YfQuNGC0LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLQktGK0LLQtdC00LXRgtC1INCf0JjQnSwg0LfQsCDQtNCwINC+0YLQutC70Y7Rh9C40YLQtSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLQkdGD0YLQvtC9INC30LAg0L/QsNGD0LfQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i0JHRg9GC0L7QvSDQt9CwINC/0YPRgdC60LDQvdC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLQkdGD0YLQvtC9INC30LAg0YHQv9C40YDQsNC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4i0KXQsNGA0LXRgdCy0LAg0LzQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+ItCd0LUg0LzQuCDRhdCw0YDQtdGB0LLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+ItCh0YrRgNGG0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLQntGC0LrQu9GO0YfQtdGC0LUsINC30LAg0LTQsCDQv9GA0L7QtNGK0LvQttC40YLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+ItCh0YLQsNGA0YLQuNGA0LDQvdC10YLQviDQtSDQsNC90YPQu9C40YDQsNC90L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4i0J/Rg9GB0L3QtdGC0LUgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4sINC30LAg0LTQsCDQuNC30YLRgNC40LXRgtC1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDQvdGP0LzQsCDQtNCwINGB0LUg0LjQt9GC0YDQuNC1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+ItCQ0JHQkiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i0JLRitCy0LXQtNC10YLQtSDQttC10LvQsNC90LjRjyDQn9CY0J0g0LrQvtC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+ItCf0L7RgtCy0YrRgNC00LXRgtC1INC20LXQu9Cw0L3QuNGPINCf0JjQnSDQutC+0LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDQutCw0YDRgtCw0YLQsCDRgdC1INC+0YLQutC70Y7Rh9Cy0LDigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiLQndC10L/RgNCw0LLQuNC70LXQvSDQn9CY0J0g0LrQvtC0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+ItCS0YrQstC10LTQtdGC0LUg0J/QmNCdINC60L7QtCDRgSDRh9C10YLQuNGA0Lgg0LTQviDQvtGB0LXQvCDRhtC40YTRgNC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDQutC+0LTRitGCINGC0YDRj9Cx0LLQsCDQtNCwINC1INGBIDgg0LjQu9C4INC/0L7QstC10YfQtSDRhtC40YTRgNC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+ItCS0YrQstC10LTQtdGC0LUg0L7RgtC90L7QstC+INC/0YDQsNCy0LjQu9C90LjRjyBQVUsg0LrQvtC0LiDQnNC90L7Qs9C+0LrRgNCw0YLQvdC40YLQtSDQvtC/0LjRgtC4INGJ0LUg0LTQtdCw0LrRgtC40LLQuNGA0LDRgiDQt9CwINC/0L7RgdGC0L7Rj9C90L3QviBTSU0g0LrQsNGA0YLQsNGC0LAuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLQndCw0YfQtdGA0YLQsNGF0YLQtSDQvdC10L/RgNCw0LLQuNC70L3QviDRhNC40LPRg9GA0LDRgtCwINGB0Lgg0LfQsCDQvtGC0LrQu9GO0YfQstCw0L3QtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQv9GK0YLQuC4g0KHQu9C10LQg0L7RidC1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC90LXRg9GB0L/QtdGI0L3QuCDQvtC/0LjRgtCwINGJ0LUg0LHRitC00LXRgtC1INC/0L7QvNC+0LvQtdC90Lgg0LTQsCDQvtGC0LrQu9GO0YfQuNGC0LUg0YLQtdC70LXRhNC+0L3QsCDQv9C+0YHRgNC10LTRgdGC0LLQvtC8INC40LzQtdC50Lsg0LDQtNGA0LXRgS5cblxuINCe0L/QuNGC0LDQudGC0LUg0L7RgtC90L7QstC+INGB0LvQtdC0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAkyAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+ItCf0YDQtdC80LDRhdCy0LDQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLQndC10L/RgNCw0LLQuNC70LXQvSDQn9CY0J0g0LrQvtC0INC30LAgU0lNINC60LDRgNGC0LDRgtCwIOKAkyDRgdC10LPQsCDRgtGA0Y/QsdCy0LAg0LTQsCDRgdC1INGB0LLRitGA0LbQtdGC0LUg0YEg0L7Qv9C10YDQsNGC0L7RgNCwINGB0LgsINC30LAg0LTQsCDQvtGC0LrQu9GO0YfQuNGC0LUg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4i0J3QtdC/0YDQsNCy0LjQu9C10L0g0J/QmNCdINC60L7QtCDQt9CwIFNJTSDQutCw0YDRgtCw0YLQsCDigJMg0L7RgdGC0LDQstCwINCy0LggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC+0L/QuNGCLCDQv9GA0LXQtNC4INC00LAg0YLRgNGP0LHQstCwINC00LAg0YHQtSDRgdCy0YrRgNC20LXRgtC1INGBINC+0L/QtdGA0LDRgtC+0YDQsCDRgdC4LCDQt9CwINC00LAg0L7RgtC60LvRjtGH0LjRgtC1INGD0YHRgtGA0L7QudGB0YLQstC+0YLQvi4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiLQndC10L/RgNCw0LLQuNC70LXQvSDQn9CY0J0g0LrQvtC0INC30LAgU0lNINC60LDRgNGC0LDRgtCwIOKAkyDQvtGB0YLQsNCy0LDRgiDQstC4IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQvtC/0LjRgtCwLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNINC60LDRgNGC0LDRgtCwINC1INC90LXQuNC30L/QvtC70LfQstCw0LXQvNCwLiDQodCy0YrRgNC20LXRgtC1INGB0LUg0YEg0L7Qv9C10YDQsNGC0L7RgNCwINGB0LguIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLQndC10L/RgNCw0LLQuNC70LXQvSBQVUsg0LrQvtC0INC30LAgU0lNINC60LDRgNGC0LDRgtCwIOKAkyDQvtGB0YLQsNCy0LAg0LLQuCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L7Qv9C40YIsINC/0YDQtdC00LggU0lNINC60LDRgNGC0LDRgtCwINC00LAg0YHRgtCw0L3QtSDQvdC10LjQt9C/0L7Qu9C30LLQsNC10LzQsCDQt9Cw0LLQuNC90LDQs9C4LiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+ItCd0LXQv9GA0LDQstC40LvQtdC9IFBVSyDQutC+0LQg0LfQsCBTSU0g0LrQsNGA0YLQsNGC0LAg4oCTINC+0YHRgtCw0LLQsNGCINCy0LggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC+0L/QuNGC0LAsINC/0YDQtdC00LggU0lNINC60LDRgNGC0LDRgtCwINC00LAg0YHRgtCw0L3QtSDQvdC10LjQt9C/0L7Qu9C30LLQsNC10LzQsCDQt9Cw0LLQuNC90LDQs9C4LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4i0J7Qv9C10YDQsNGG0LjRj9GC0LAg0YEg0J/QmNCdINC60L7QtNCwINC30LAgU0lNINC60LDRgNGC0LDRgtCwINC90LUg0LHQtSDRg9GB0L/QtdGI0L3QsCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+ItCe0L/QtdGA0LDRhtC40Y/RgtCwINGBIFBVSyDQutC+0LTQsCDQt9CwIFNJTSDQutCw0YDRgtCw0YLQsCDQvdC1INCx0LUg0YPRgdC/0LXRiNC90LAhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+ItCa0L7QtNGK0YIg0LUg0L/RgNC40LXRgiEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLQkdGD0YLQvtC9INC30LAg0L/RgNC10LTQuNGI0L3QuNGPINC30LDQv9C40YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLQkdGD0YLQvtC9INC30LAg0YHQu9C10LTQstCw0YnQuNGPINC30LDQv9C40YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i0JHRg9GC0L7QvSDQt9CwINC/0LDRg9C30LAiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbAppbmRleCA0Zjk3YzZiLi44YjgxMDg2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkludHJvZHVlaXggZWwgY29kaSBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJJbnRyb2R1ZWl4IGVsIGNvZGkgUFVLIGkgZWwgY29kaSBQSU4gbm91Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJDb2RpIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iQ29kaSBQSU4gbm91Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iRXNjcml1IGVsIFBVSyBkZSBsYSBTSU0gaSBlbCBjb2RpIFBJTiBub3UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJDb2RpIFBVSyBkZSBsYSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+IkNvZGkgUElOIGRlIGxhIFNJTSBub3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJUb2NhIHBlciBpbnRyb2R1aXIgY29udHJhc2VueWEiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJJbnRyb2R1ZWl4IGxhIGNvbnRyYXNlbnlhIHBlciBkZXNibG9xdWVqYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJJbnRyb2R1ZWl4IGxhIGNvbnRyYXNlbnlhIHBlciBkZXNibG9xdWVqYXIiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iQm90w7MgZGUgcGF1c2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IkJvdMOzIGRlIHJlcHJvZHVjY2nDsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iQm90w7MgZGUgcGFyYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Ik1cJ2FncmFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+Ik5vIG1cJ2FncmFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IkNvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkRlc2Jsb3F1ZWphIHBlciBjb250aW51YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJTXCdoYSBjYW5jZWzCt2xhdCBsXCdpbmljaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJEZWl4YSBhbmFyIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHBlciBzdXByaW1pci1sby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iTm8gc2Ugc3VwcmltaXLDoCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkludHJvZHVlaXggZWwgY29kaSBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iQ29uZmlybWEgZWwgY29kaSBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNcJ2VzdMOgIGRlc2Jsb3F1ZWphbnQgbGEgdGFyZ2V0YSBTSU0uLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJDb2RpIFBJTiBpbmNvcnJlY3RlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IkVzY3JpdSB1biBQSU4gcXVlIHRpbmd1aSBkZSA0IGEgOCBuw7ptZXJvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJFbCBjb2RpIFBVSyBoYSBkZSB0ZW5pciA4IG7Dum1lcm9zIG8gbcOpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJUb3JuYSBhIGludHJvZHVpciBlbCBjb2RpIFBVSyBjb3JyZWN0ZS4gRWxzIGludGVudHMgcmVwZXRpdHMgZmFyYW4gcXVlIGVzIGRlc2FjdGl2aSBsYSBTSU0gZGUgbWFuZXJhIHBlcm1hbmVudC4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkhhcyBkaWJ1aXhhdCBlbCBwYXRyw7MgZGUgZGVzYmxvcXVlaWcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVnYWRlcyBkZSBtYW5lcmEgaW5jb3JyZWN0YS4gRGVzcHLDqXMgZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gaW50ZW50cyBpbmNvcnJlY3RlcyBtw6lzLCBzZVwndCBkZW1hbmFyw6AgcXVlIGRlc2Jsb3F1ZWdpcyBlbCB0ZWzDqGZvbiBhbWIgdW4gY29tcHRlIGRlIGNvcnJldSBlbGVjdHLDsm5pYy5cblxuIFRvcm5hLWhvIGEgcHJvdmFyIGRcJ2FxdcOtIGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2Vnb25zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IkVsaW1pbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkVsIGNvZGkgUElOIGRlIGxhIFNJTSBubyDDqXMgY29ycmVjdGUuIEhhcyBkZSBjb250YWN0YXIgYW1iIGxcJ29wZXJhZG9yIGRlIHRlbGVmb25pYSBtw7JiaWwgcGVyIGRlc2Jsb3F1ZWphciBlbCBkaXNwb3NpdGl1LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iRWwgY29kaSBQSU4gZGUgbGEgU0lNIG5vIMOpcyBjb3JyZWN0ZS4gRXQgcXVlZGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudDsgc2kgbm8gbFwnZW5jZXJ0ZXMsIGNvbnRhY3RhIGFtYiBsXCdvcGVyYWRvciBkZSB0ZWxlZm9uaWEgbcOyYmlsIHBlciBkZXNibG9xdWVqYXIgZWwgZGlzcG9zaXRpdS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJFbCBjb2RpIFBJTiBkZSBsYSBTSU0gbm8gw6lzIGNvcnJlY3RlLiBFdCBxdWVkZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudHMuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJMYSBTSU0gbm8gZXMgcG90IHV0aWxpdHphci4gQ29udGFjdGEgYW1iIGxcJ29wZXJhZG9yIGRlIHRlbGVmb25pYSBtw7JiaWwuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJFbCBjb2RpIFBVSyBkZSBsYSBTSU0gbm8gw6lzIGNvcnJlY3RlLiBFdCBxdWVkYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50OyBzaSBubyBsXCdlbmNlcnRlcywgbGEgU0lNIG5vIGVzIHBvZHLDoCB0b3JuYXIgYSBmZXIgc2VydmlyLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IkVsIGNvZGkgUFVLIGRlIGxhIFNJTSBubyDDqXMgY29ycmVjdGUuIEV0IHF1ZWRlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50czsgc2kgbm8gbFwnZW5jZXJ0ZXMsIGxhIFNJTSBubyBlcyBwb2Ryw6AgdG9ybmFyIGEgZmVyIHNlcnZpci4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IkhpIGhhIGhhZ3V0IHVuIHByb2JsZW1hIGVuIGxcJ29wZXJhY2nDsyBkZWwgUElOIGRlIGxhIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IkhpIGhhIGhhZ3V0IHVuIHByb2JsZW1hIGVuIGxcJ29wZXJhY2nDsyBkZWwgUFVLIGRlIGxhIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iU1wnaGEgYWNjZXB0YXQgZWwgY29kaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJCb3TDsyBkZSBwaXN0YSBhbnRlcmlvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IkJvdMOzIGRlIHBpc3RhIHNlZ8O8ZW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IkJvdMOzIGRlIHBhdXNhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKaW5kZXggZWMyODMzYy4uZTRlZDAyYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJaYWRlanRlIGvDs2QgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iWmFkZWp0ZSBrw7NkIFBVSyBhIG5vdsO9IGvDs2QgUElOLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iS8OzZCBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik5vdsO9IGvDs2QgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iWmFkZWp0ZSBrw7NkIFBVSyBTSU0ga2FydHkgYSBub3bDvSBrw7NkIFBJTi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IkvDs2QgUFVLIFNJTSBrYXJ0eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTm92w70ga8OzZCBQSU4gU0lNIGthcnR5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iRG90eWtlbSB6YWTDoXRlIGhlc2xvIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iWmFkZWp0ZSBoZXNsbyBwcm8gb2RlbWtudXTDrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IlphZGVqdGUga8OzZCBQSU4gcHJvIG9kZW1rbnV0w60iPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iVGxhxI3DrXRrbyBQb3phc3Rhdml0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJUbGHEjcOtdGtvIFDFmWVocsOhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iVGxhxI3DrXRrbyBaYXN0YXZpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJMw61iw60gc2UgbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJOZWzDrWLDrSBzZSBtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IlNyZMOtxI1rbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IlBva3JhxI11anRlIG9kZW1rbnV0w61tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iU3B1xaF0xJtuw60genJ1xaFlbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iVXZvbG7Em27DrW0gZG90eWt1IHdpZGdldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB2eW1hxb5ldGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+IldpZGdldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBuZWJ1ZGUgdnltYXrDoW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBbHQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJaYWRlanRlIHBvxb5hZG92YW7DvSBrw7NkIFBJTi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iUG90dnLEj3RlIHBvxb5hZG92YW7DvSBrw7NkIFBJTi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Ik9kYmxva292w6Fuw60gU0lNIGthcnR5Li4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iTmVzcHLDoXZuw70ga8OzZCBQSU4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iWmFkZWp0ZSBrw7NkIFBJTiBvIGTDqWxjZSA04oCTOCDEjcOtc2xpYy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJNaW5pbcOhbG7DrSBkw6lsa2Ega8OzZHUgUFVLIGplIDggxI3DrXNsaWMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iWm5vdnUgemFkZWp0ZSBzcHLDoXZuw70ga8OzZCBQVUsuIE9wYWtvdmFuw71taSBwb2t1c3kgU0lNIGthcnR1IHRydmFsZSBkZWFrdGl2dWpldGUuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJKacW+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+a3LDoXQganN0ZSBuZXNwcsOhdm7EmyBuYWtyZXNsaWxpIHN2w6kgaGVzbG8gb2RlbWtudXTDrS4gUG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZGFsxaHDrWNoIG5lw7pzcMSbxaFuw71jaCBwb2t1c2VjaCBidWRldGUgcG/FvsOhZMOhbmkgbyBvZGVtxI1lbsOtIHRlbGVmb251IHBvbW9jw60gZS1tYWlsb3bDqWhvIMO6xI10dS5cblxuIFprdXN0ZSB0byB6bm92dSB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAkyAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+Ik9kZWJyYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlphZGFsaSBqc3RlIG5lc3Byw6F2bsO9IGvDs2QgUElOIFNJTSBrYXJ0eS4gTnluw60gbXVzw610ZSB6YSDDusSNZWxlbSBvZGVta251dMOtIHphxZnDrXplbsOtIGtvbnRha3RvdmF0IHN2w6lobyBvcGVyw6F0b3JhLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iWmFkYWxpIGpzdGUgbmVzcHLDoXZuw70ga8OzZCBQSU4gU0lNIGthcnR5LiBNw6F0ZSBqZcWhdMSbIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwb2t1cywgcG90w6kgYnVkZXRlIG11c2V0IG8gb2RlbWtudXTDrSB6YcWZw616ZW7DrSBwb8W+w6FkYXQgc3bDqWhvIG9wZXLDoXRvcmEuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iWmFkYWxpIGpzdGUgbmVzcHLDoXZuw70ga8OzZCBQSU4gU0lNIGthcnR5LiBQb8SNZXQgemLDvXZhasOtY8OtY2ggcG9rdXPFrzogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNIGthcnR1IG5lbHplIHBvdcW+w610LiBLb250YWt0dWp0ZSBvcGVyw6F0b3JhLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iTmVzcHLDoXZuw70ga8OzZCBQVUsgU0lNIGthcnR5LiBNw6F0ZSBqZcWhdMSbIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwb2t1cywgcG90w6kgYnVkZSBTSU0ga2FydGEgbmF0cnZhbG8gemFibG9rb3bDoW5hLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IlphZGFsaSBqc3RlIG5lc3Byw6F2bsO9IGvDs2QgUFVLIFNJTSBrYXJ0eS4gUG/EjWV0IHpiw712YWrDrWPDrWNoIHBva3Vzxa8sIHBvIGt0ZXLDvWNoIGJ1ZGUgU0lNIGthcnRhIG5hdHJ2YWxvIHphYmxva292w6FuYTogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iT3BlcmFjZSBwb21vY8OtIGvDs2R1IFBJTiBTSU0ga2FydHkgc2UgbmV6ZGHFmWlsYSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+Ik9wZXJhY2UgcG9tb2PDrSBrw7NkdSBQVUsgU0lNIGthcnR5IHNlIG5lemRhxZlpbGEhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkvDs2QgYnlsIHDFmWlqYXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iVGxhxI3DrXRrbyBQxZllZGNob3rDrSBzdG9wYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IlRsYcSNw610a28gRGFsxaHDrSBzdG9wYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJUbGHEjcOtdGtvIFBvemFzdGF2aXQiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAppbmRleCBjZmM3NDY0Li5mOGYwYTZmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkluZHRhc3QgcGlua29kZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IkluZHRhc3QgUFVLLSBvZyBwaW5rb2RlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsta29kZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTnkgcGlua29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IkluZHRhc3QgUFVLLWtvZGVuIHRpbCBTSU0ta29ydGV0IG9nIGRlbiBueWUgcGlua29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iUFVLLWtvZGUgdGlsIFNJTS1rb3J0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJOeSBwaW5rb2RlIHRpbCBTSU0ta29ydGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iVHJ5ayBmb3IgYXQgYW5naXZlIGFkZ2FuZ3Nrb2RlIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iSW5kdGFzdCBhZGdhbmdza29kZW4gZm9yIGF0IGzDpXNlIG9wIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iSW5kdGFzdCBwaW5rb2RlIGZvciBhdCBsw6VzZSBvcCI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJQYXVzZS1rbmFwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJBZnNwaWwta25hcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iU3RvcC1rbmFwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IlN5bmVzIG9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iU3luZXMgaWtrZSBvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IkhqZXJ0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkzDpXMgb3AgZm9yIGF0IGfDpSB2aWRlcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJTdGFydGVuIGJsZXYgYW5udWxsZXJldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJTbGlwIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IGZvciBhdCBzbGV0dGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHNsZXR0ZXMgaWtrZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkluZHRhc3QgZGVuIMO4bnNrZWRlIHBpbmtvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iQmVrcsOmZnQgZGVuIMO4bnNrZWRlIHBpbmtvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTS1rb3J0ZXQgbMOlc2VzIG9w4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iRm9ya2VydCBwaW5rb2RlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IkluZHRhc3QgZW4gcGlua29kZSBww6UgbWVsbGVtIDQgb2cgOCB0YWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLLWtvZGVuIHNrYWwgdsOmcmUgcMOlIDggdGFsIGVsbGVyIG1lcmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iSW5kdGFzdCBkZW4ga29ycmVrdGUgUFVLLWtvZGUuIEdlbnRhZ25lIGZvcnPDuGcgdmlsIHBlcm1hbmVudCBkZWFrdGl2ZXJlIFNJTS1rb3J0ZXQuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJEdSBoYXIgdGVnbmV0IGRpdCBvcGzDpXNuaW5nc23DuG5zdGVyIGZvcmtlcnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ2FuZ2UuIEVmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHlkZXJsaWdlcmUgbWlzbHlra2VkZSBmb3Jzw7hnIHRpbCB2aWwgZHUgYmxpdmUgYmVkdCBvbSBhdCBsw6VzZSBkaW4gdGVsZWZvbiBvcCB2ZWQgaGrDpmxwIGFmIGVuIGUtbWFpbGtvbnRvLlxuXG4gUHLDuHYgaWdlbiBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJGamVybiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iRm9ya2VydCBwaW5rb2RlIHRpbCBTSU0ta29ydC4gRHUgc2thbCBudSBrb250YWt0ZSBkaXQgbW9iaWxzZWxza2FiIGZvciBhdCBsw6VzZSBkaW4gZW5oZWQgb3AuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJGb3JrZXJ0IHBpbmtvZGUgdGlsIFNJTS1rb3J0LiBEdSBoYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGZvcnPDuGcgdGlsYmFnZSwgZsO4ciBkdSBza2FsIGtvbnRha3RlIGRpdCBtb2JpbHNlbHNrYWIgZm9yIGF0IGzDpXNlIGRpbiBlbmhlZCBvcC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJGb3JrZXJ0IHBpbmtvZGUgdGlsIFNJTS1rb3J0LiBEdSBoYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGZvcnPDuGcgdGlsYmFnZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTS1rb3J0ZXQgZXIgdWJydWdlbGlndC4gS29udGFrdCBkaXQgbW9iaWxzZWxza2FiLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iRm9ya2VydCBQVUsta29kZSB0aWwgU0lNLWtvcnQuIER1IGhhciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZm9yc8O4ZyB0aWxiYWdlLCBmw7hyIFNJTS1rb3J0ZXQgYmxpdmVyIHBlcm1hbmVudCB1YnJ1Z2VsaWd0LiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IkZvcmtlcnQgUFVLLWtvZGUgdGlsIFNJTS1rb3J0LiBEdSBoYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGZvcnPDuGcgdGlsYmFnZSwgZsO4ciBkaXQgU0lNLWtvcnQgYmxpdmVyIHBlcm1hbmVudCB1YnJ1Z2VsaWd0LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iUGlua29kZW4gdGlsIFNJTS1rb3J0ZXQgYmxldiBhZnZpc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJQVUsta29kZW4gdGlsIFNJTS1rb3J0ZXQgYmxldiBhZnZpc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IktvZGVuIGJsZXYgYWNjZXB0ZXJldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJLbmFwIHRpbCBmb3JyaWdlIG51bW1lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IktuYXAgdGlsIG7DpnN0ZSBudW1tZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iUGF1c2Uta25hcCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCmluZGV4IDg1ZDFhNGY5Li40ZWNlNmQ5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTi1Db2RlIGVpbmdlYmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIHVuZCBuZXVlbiBQSU4tQ29kZSBlaW5nZWJlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLLUNvZGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik5ldWVyIFBJTi1Db2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iR2ViZW4gU2llIGRlbiBQVUstQ29kZSBkZXIgU0lNLUthcnRlIHVuZCBkZW4gbmV1ZW4gUElOLUNvZGUgZWluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iUFVLLUNvZGUgZGVyIFNJTS1LYXJ0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTmV1ZXIgUElOLUNvZGUgZGVyIFNJTS1LYXJ0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+Ilp1ciBQYXNzd29ydGVpbmdhYmUgYmVyw7xocmVuIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iUGFzc3dvcnQgenVtIEVudHNwZXJyZW4gZWluZ2ViZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJQSU4genVtIEVudHNwZXJyZW4gZWluZ2ViZW4iPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iU2NoYWx0ZmzDpGNoZSBmw7xyIFBhdXNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJTY2hhbHRmbMOkY2hlIGbDvHIgV2llZGVyZ2FiZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iU2NoYWx0ZmzDpGNoZSBmw7xyIFN0b3BwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Ik1hZyBpY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJNYWcgaWNoIG5pY2h0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iSGVyeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+Ilp1bSBGb3J0ZmFocmVuIGVudHNwZXJyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJTdGFydCBhYmdlYnJvY2hlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJMZWdlbiBTaWUgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4genVtIEzDtnNjaGVuIGFiLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB3aXJkIG5pY2h0IGdlbMO2c2NodC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+Ikdld8O8bnNjaHRlbiBQSU4tQ29kZSBlaW5nZWJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJHZXfDvG5zY2h0ZW4gUElOLUNvZGUgYmVzdMOkdGlnZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTS1LYXJ0ZSB3aXJkIGVudHNwZXJydOKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IkZhbHNjaGVyIFBJTi1Db2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iR2ViZW4gU2llIGVpbmUgNC0gYmlzIDgtc3RlbGxpZ2UgUElOIGVpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJEZXIgUFVLLUNvZGUgbXVzcyBtaW5kZXN0ZW5zIDggWmlmZmVybiBiZXRyYWdlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJHZWJlbiBTaWUgZGVuIHJpY2h0aWdlbiBQVUstQ29kZSBlaW4uIEJlaSB3aWVkZXJob2x0ZW4gVmVyc3VjaGVuIHdpcmQgZGllIFNJTS1LYXJ0ZSBkYXVlcmhhZnQgZGVha3RpdmllcnQuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJTaWUgaGFiZW4gSWhyIEVudHNwZXJydW5nc211c3RlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1tYWwgZmFsc2NoIGdlemVpY2huZXQuIE5hY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gd2VpdGVyZW4gZXJmb2xnbG9zZW4gVmVyc3VjaGVuIHdlcmRlbiBTaWUgYXVmZ2Vmb3JkZXJ0LCBJaHIgVGVsZWZvbiBtaXRoaWxmZSBlaW5lcyBFLU1haWwtS29udG9zIHp1IGVudHNwZXJyZW4uXG5cbiBWZXJzdWNoZW4gU2llIGVzIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IFNla3VuZGVuIGVybmV1dC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJFbnRmZXJuZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkZhbHNjaGVyIFBJTi1Db2RlIGRlciBTSU0tS2FydGUuIEJpdHRlIHdlbmRlbiBTaWUgc2ljaCBhbiBJaHJlbiBNb2JpbGZ1bmthbmJpZXRlciwgZGFtaXQgZXIgSWhyIEdlcsOkdCBlbnRzcGVycnQuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJGYWxzY2hlciBQSU4tQ29kZSBkZXIgU0lNLUthcnRlLiBTaWUgaGFiZW4gbm9jaCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gVmVyc3VjaCwgYmV2b3IgU2llIGRhcyBHZXLDpHQgdm9uIElocmVtIE1vYmlsZnVua2FuYmlldGVyIGVudHNwZXJyZW4gbGFzc2VuIG3DvHNzZW4uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iRmFsc2NoZXIgUElOLUNvZGUgZGVyIFNJTS1LYXJ0ZS4gU2llIGhhYmVuIG5vY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IFZlcnN1Y2hlLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iRGllIFNJTS1LYXJ0ZSBrYW5uIG5pY2h0IHZlcndlbmRldCB3ZXJkZW4uIEJpdHRlIHdlbmRlbiBTaWUgc2ljaCBhbiBJaHJlbiBNb2JpbGZ1bmthbmJpZXRlci4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkZhbHNjaGVyIFBVSy1Db2RlIGRlciBTSU0tS2FydGUuIFNpZSBoYWJlbiBub2NoIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBWZXJzdWNoLCBiZXZvciBJaHJlIFNJTS1LYXJ0ZSBlbmRnw7xsdGlnIGdlc3BlcnJ0IHdpcmQuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iRmFsc2NoZXIgUFVLLUNvZGUgZGVyIFNJTS1LYXJ0ZS4gU2llIGhhYmVuIG5vY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IFZlcnN1Y2hlLCBiZXZvciBJaHJlIFNJTS1LYXJ0ZSBlbmRnw7xsdGlnIGdlc3BlcnJ0IHdpcmQuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJGZWhsZXIgYmVpbSBFbnRzcGVycmVuIG1pdCBkZXIgUElOIGRlciBTSU0tS2FydGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IkZlaGxlciBiZWltIEVudHNwZXJyZW4gbWl0aGlsZmUgZGVzIFBVSy1Db2RlcyBkZXIgU0lNLUthcnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkNvZGUgYWt6ZXB0aWVydCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IlNjaGFsdGZsw6RjaGUgZsO8ciB2b3JoZXJpZ2VuIFRpdGVsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iU2NoYWx0ZmzDpGNoZSBmw7xyIG7DpGNoc3RlbiBUaXRlbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJTY2hhbHRmbMOkY2hlIGbDvHIgUGF1c2UiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbAppbmRleCBlODZmMjRkLi5iZTA3ZGNkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+Is6gzrvOt866z4TPgc6/zrvOv86zzq7Pg8+EzrUgz4TOv869IM66z4nOtM65zrrPjCDOsc+BzrnOuM68z4wgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4izqDOu863zrrPhM+Bzr/Ou86/zrPOrs+Dz4TOtSDPhM6/zr0gzrrPic60zrnOus+MIFBVSyDOus6xzrkgz4TOv869IM69zq3OvyDOus+JzrTOuc66z4wgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiLOms+JzrTOuc66z4zPgiBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Is6dzq3Ov8+CIM66z4nOtM65zrrPjM+CIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+Is6gzrvOt866z4TPgc6/zrvOv86zzq7Pg8+EzrUgz4TOv869IM66z4nOtM65zrrPjCBQVUsgz4TOt8+CIM66zqzPgc+EzrHPgiBTSU0gzrrOsc65IM+Ezr/OvSDOvc6tzr8gzrrPic60zrnOus+MIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4izprPic60zrnOus+Mz4IgUFVLIM66zqzPgc+EzrHPgiBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Is6dzq3Ov8+CIM66z47OtM65zrrOsc+CIM6xz4HOuc64zrzOv8+NIFBJTiDPhM63z4IgzrrOrM+Bz4TOsc+CIFNJTSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+Is6RzrPOs86vzr7PhM61IM6zzrnOsSDOtc65z4POsc6zLiDOus+JzrQuIM+Az4HPjM+DzrIuIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4izqDOu863zrrPhM+Bzr/Ou86/zrPOrs+Dz4TOtSDPhM6/zr0gzrrPic60zrnOus+MIM+Az4HPjM+DzrLOsc+DzrfPgiDOs865zrEgzr7Otc66zrvOtc6vzrTPic68zrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLOoM67zrfOus+Ez4HOv867zr/Os86uz4PPhM61IM+Ezr/OvSDOsc+BzrnOuM68z4wgUElOIM6zzrnOsSDOvs61zrrOu861zq/OtM+JzrzOsSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLOms6/z4XOvM+Azq8gz4DOsc+Nz4POt8+CIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLOms6/z4XOvM+Azq8gzrHOvc6xz4DOsc+BzrHOs8+JzrPOrs+CIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLOms6/z4XOvM+Azq8gzrTOuc6xzrrOv8+Azq7PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLOlc+AzrnOtM6/zrrOuc68zrHPg86vzrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLOkc+Azr/OtM6/zrrOuc68zrHPg86vzrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLOms6xz4HOtM65zqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLOns61zrrOu861zrnOtM+Oz4PPhM61IM6zzrnOsSDOvc6xIM+Dz4XOvc61z4fOr8+DzrXPhM61Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4izpcgzrXOus66zq/Ovc63z4POtyDOsc66z4XPgc+OzrjOt866zrUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4izpHPgM6/zrjOrc+Dz4TOtSA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDOs865zrEgzrTOuc6xzrPPgc6xz4bOri4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gzrTOtc69IM64zrEgzrTOuc6xzrPPgc6xz4bOtc6vLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+Is6RzpLOkyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4izpXOuc+DzrHOs86szrPOtc+EzrUgz4TOv869IM6xz4DOsc65z4TOv8+NzrzOtc69zr8gzrrPic60zrnOus+MIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLOlc+AzrnOss61zrLOsc65z47Pg8+EzrUgz4TOv869IM6xz4DOsc65z4TOv8+NzrzOtc69zr8gzrrPic60zrnOus+MIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4izp7Otc66zrvOtc6vzrTPic68zrEgzrrOrM+Bz4TOsc+CIFNJTS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Is6Vz4PPhs6xzrvOvM6tzr3Ov8+CIM66z4nOtM65zrrPjM+CIFBJTi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLOoM67zrfOus+Ez4HOv867zr/Os86uz4PPhM61IM6tzr3Osc69IM6xz4HOuc64zrzPjCBQSU4gz4DOv8+FIM69zrEgzrHPgM6/z4TOtc67zrXOr8+EzrHOuSDOsc+Az4wgNCDOrc+Jz4IgOCDOsc+BzrnOuM68zr/Pjc+CLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+Is6fIM66z4nOtM65zrrPjM+CIFBVSyDOuM6xIM+Az4HOrc+AzrXOuSDOvc6xIM+AzrXPgc65zq3Ph861zrkgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSA4IM6xz4HOuc64zrzOv8+Nz4IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4izpXOuc+DzrHOs86szrPOtc+EzrUgzr7Osc69zqwgz4TOv869IM66z4nOtM65zrrPjCBQVUsuIM6fzrkgzrXPgM6xzr3Osc67zrHOvM6yzrHOvc+MzrzOtc69zrXPgiDPgM+Bzr/Pg8+AzqzOuM61zrnOtc+CIM64zrEgzrHPgM61zr3Otc+BzrPOv8+Azr/Ouc6uz4POv8+Fzr0gzr/Pgc65z4PPhM65zrrOrCDPhM63zr0gzrrOrM+Bz4TOsSBTSU0uIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLOo8+HzrXOtM65zqzPg86xz4TOtSDPhM6/IM68zr/PhM6vzrLOvyDOvs61zrrOu861zrnOtM+OzrzOsc+Ezr/PgiDOtc+Dz4bOsc67zrzOrc69zrEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gz4bOv8+Bzq3Pgi4gzpzOtc+EzqwgzrHPgM+MIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IM6xzr3Otc+AzrnPhM+Fz4fOtc6vz4Igz4DPgc6/z4PPgM6szrjOtc65zrXPgiDOsc66z4zOvM63LCDOuM6xIM+DzrHPgiDOts63z4TOt864zrXOryDOvc6xIM6+zrXOus67zrXOuc60z47Pg861z4TOtSDPhM6/IM+EzrfOu86tz4bPic69z4wgz4POsc+CIM68zrUgz4TOtyDPh8+Bzq7Pg863IM61zr3PjM+CIM67zr/Os86xz4HOuc6xz4POvM6/z40gzrfOu861zrrPhM+Bzr/Ovc65zrrOv8+NIM+EzrHPh8+FzrTPgc6/zrzOtc6vzr/PhS5cblxuIM6Uzr/Ous65zrzOrM+Dz4TOtSDOvs6xzr3OrCDPg861IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLOms6xz4TOrM+BzrPOt8+DzrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Is6Vz4PPhs6xzrvOvM6tzr3Ov8+CIM66z4nOtM65zrrPjM+CIFBJTiDOus6sz4HPhM6xz4IgU0lNLiDOmM6xIM+Az4HOrc+AzrXOuSDOvc6xIM61z4DOuc66zr/Ouc69z4nOvc6uz4POtc+EzrUgzrzOtSDPhM6/zr0gz4DOrM+Bzr/Ph86/IM66zrnOvc63z4TOrs+CIM+EzrfOu861z4bPic69zq/Osc+CIM+DzrHPgiDOs865zrEgzr3OsSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUgz4TOtyDPg8+Fz4POus61z4XOriDPg86xz4IuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiLOlc+Dz4bOsc67zrzOrc69zr/PgiDOus+JzrTOuc66z4zPgiBQSU4gzrrOrM+Bz4TOsc+CIFNJTS4gzpHPgM6/zrzOrc69zrXOuSDOrM67zrvOtyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gz4DPgc6/z4PPgM6szrjOtc65zrEuIM6jz4TOtyDPg8+Fzr3Orc+HzrXOuc6xLCDOuM6xIM+Az4HOrc+AzrXOuSDOvc6xIM61z4DOuc66zr/Ouc69z4nOvc6uz4POtc+EzrUgzrzOtSDPhM6/zr0gz4DOrM+Bzr/Ph86/IM66zrnOvc63z4TOrs+CIM+EzrfOu861z4bPic69zq/Osc+CIM+DzrHPgiDOs865zrEgzr3OsSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUgz4TOtyDPg8+Fz4POus61z4XOriDPg86xz4IuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4izpXPg8+GzrHOu868zq3Ovc6/z4IgzrrPic60zrnOus+Mz4IgUElOIM66zqzPgc+EzrHPgiBTSU0uIM6Rz4DOv868zq3Ovc6/z4XOvSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gz4DPgc6/z4PPgM6szrjOtc65zrXPgi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+Is6XIM66zqzPgc+EzrEgU0lNIM60zrXOvSDOvM+Azr/Pgc61zq8gzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc63zrjOtc6vLiDOlc+AzrnOus6/zrnOvc+Jzr3Ors+Dz4TOtSDOvM61IM+Ezr/OvSDPgM6sz4HOv8+Hzr8gzrrOuc69zrfPhM6uz4Igz4TOt867zrXPhs+Jzr3Or86xz4Igz4POsc+CLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4izpXPg8+GzrHOu868zq3Ovc6/z4IgzrrPic60zrnOus+Mz4IgUFVLIM66zqzPgc+EzrHPgiBTSU0uIM6Rz4DOv868zq3Ovc61zrkgzqzOu867zrcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IM+Az4HOv8+Dz4DOrM64zrXOuc6xIM+Az4HOv8+Ezr/PjSDOtM61zr0gzrXOr869zrHOuSDPgM67zq3Ov869IM60z4XOvc6xz4TOriDOtyDPh8+Bzq7Pg863IM+EzrfPgiDOus6sz4HPhM6xz4IgU0lNLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+Is6Vz4PPhs6xzrvOvM6tzr3Ov8+CIM66z4nOtM65zrrPjM+CIFBVSyDOus6sz4HPhM6xz4IgU0lNLiDOkc+Azr/OvM6tzr3Ov8+Fzr0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IM+Az4HOv8+Dz4DOrM64zrXOuc61z4Igz4DPgc6/z4TOv8+NIM60zrXOvSDOtc6vzr3Osc65IM+AzrvOrc6/zr0gzrTPhc69zrHPhM6uIM63IM+Hz4HOrs+Dzrcgz4TOt8+CIM66zqzPgc+EzrHPgiBTSU0uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiLOkc+Azr/PhM+Fz4fOr86xIM67zrXOuc+Ezr/Phc+BzrPOr86xz4IgzrrPic60zrnOus6/z40gUElOIM66zqzPgc+EzrHPgiBTSU0hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiLOkc+Azr/PhM+Fz4fOr86xIM67zrXOuc+Ezr/Phc+BzrPOr86xz4IgzrrPic60zrnOus6/z40gUFVLIM66zqzPgc+EzrHPgiBTSU0hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+Is6Rz4DOv860zrXOus+Ez4zPgiDOus+JzrTOuc66z4zPgiEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLOms6/z4XOvM+Azq8gz4DPgc6/zrfOs86/z43OvM61zr3Ov8+FIM66zr/OvM68zrHPhM65zr/PjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Is6azr/Phc68z4DOryDOtc+Az4zOvM61zr3Ov8+FIM66zr/OvM68zrHPhM65zr/PjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiLOms6/z4XOvM+Azq8gz4DOsc+Nz4POt8+CIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbAppbmRleCA5NjdjM2ZhLi5mMGQ4MWI4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iVHlwZSBQSU4gY29kZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlR5cGUgUFVLIGFuZCBuZXcgUElOIGNvZGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyBjb2RlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJOZXcgUElOIENvZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJUeXBlIFNJTSBQVUsgYW5kIG5ldyBQSU4gY29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iU0lNIFBVSyBjb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJOZXcgU0lNIFBJTiBjb2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iVG91Y2ggdG8gdHlwZSBwYXNzd29yZCI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IlR5cGUgcGFzc3dvcmQgdG8gdW5sb2NrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iVHlwZSBQSU4gdG8gdW5sb2NrIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IlBhdXNlIGJ1dHRvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iUGxheSBidXR0b24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IlN0b3AgYnV0dG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IlRodW1icyB1cCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IlRodW1icyBkb3duIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iSGVhcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJVbmxvY2sgdG8gY29udGludWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJMYXVuY2ggY2FuY2VsbGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IkRyb3AgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gdG8gZGVsZXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB3aWxsIG5vdCBiZSBkZWxldGVkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iRW50ZXIgZGVzaXJlZCBQSU4gY29kZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJDb25maXJtIGRlc2lyZWQgUElOIGNvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlVubG9ja2luZyBTSU0gY2FyZOKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IkluY29ycmVjdCBQSU4gY29kZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJUeXBlIGEgUElOIHRoYXQgaXMgNCB0byA4IG51bWJlcnMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIGNvZGUgc2hvdWxkIGJlIDggbnVtYmVycyBvciBtb3JlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlJlLWVudGVyIHRoZSBjb3JyZWN0IFBVSyBjb2RlLiBSZXBlYXRlZCBhdHRlbXB0cyB3aWxsIHBlcm1hbmVudGx5IGRpc2FibGUgdGhlIFNJTS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IllvdSBoYXZlIGluY29ycmVjdGx5IGRyYXduIHlvdXIgdW5sb2NrIHBhdHRlcm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB5b3Ugd2lsbCBiZSBhc2tlZCB0byB1bmxvY2sgeW91ciBwaG9uZSB1c2luZyBhbiBlbWFpbCBhY2NvdW50LlxuXG4gVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iUmVtb3ZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJJbmNvcnJlY3QgU0lNIFBJTiBjb2RlOyB5b3UgbXVzdCBub3cgY29udGFjdCB5b3VyIG9wZXJhdG9yIHRvIHVubG9jayB5b3VyIGRldmljZS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IkluY29ycmVjdCBTSU0gUElOIGNvZGU7IHlvdSBoYXZlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiByZW1haW5pbmcgYXR0ZW1wdC9zIGJlZm9yZSB5b3UgbXVzdCBjb250YWN0IHlvdXIgY2FycmllciB0byB1bmxvY2sgeW91ciBkZXZpY2UuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iSW5jb3JyZWN0IFNJTSBQSU4gY29kZTsgeW91IGhhdmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlbWFpbmluZyBhdHRlbXB0L3MuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0gaXMgdW51c2FibGUuIENvbnRhY3QgeW91ciBvcGVyYXRvci4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkluY29ycmVjdCBTSU0gUFVLIGNvZGU7IHlvdSBoYXZlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiByZW1haW5pbmcgYXR0ZW1wdC9zIGJlZm9yZSBTSU0gYmVjb21lcyBwZXJtYW5lbnRseSB1bnVzYWJsZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJJbmNvcnJlY3QgU0lNIFBVSyBjb2RlOyB5b3UgaGF2ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcmVtYWluaW5nIGF0dGVtcHQvcyBiZWZvcmUgU0lNIGJlY29tZXMgcGVybWFuZW50bHkgdW51c2FibGUuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJTSU0gUElOIG9wZXJhdGlvbiBmYWlsZWQhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJTSU0gUFVLIG9wZXJhdGlvbiBmYWlsZWQhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkNvZGUgYWNjZXB0ZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJQcmV2aW91cyB0cmFjayBidXR0b24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJOZXh0IHRyYWNrIGJ1dHRvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJQYXVzZSBidXR0b24iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZDgxYjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJUeXBlIFBJTiBjb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iVHlwZSBTSU0gUFVLIGFuZCBuZXcgUElOIGNvZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTSBQVUsgY29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTmV3IFNJTSBQSU4gY29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IlRvdWNoIHRvIHR5cGUgcGFzc3dvcmQiPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJUeXBlIHBhc3N3b3JkIHRvIHVubG9jayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IlR5cGUgUElOIHRvIHVubG9jayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IkluY29ycmVjdCBQSU4gY29kZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iVG8gdW5sb2NrLCBwcmVzcyBNZW51LCB0aGVuIDAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+Ik1heGltdW0gRmFjZSBVbmxvY2sgYXR0ZW1wdHMgZXhjZWVkZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IkNoYXJnZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IkNoYXJnaW5nLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4iQ29ubmVjdCB5b3VyIGNoYXJnZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjEzMzIyODgyNjg2MDAzMjk4NDEiPiJQcmVzcyBNZW51IHRvIHVubG9jay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+Ik5ldHdvcmsgbG9ja2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+Ik5vIFNJTSBjYXJkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+Ik5vIFNJTSBjYXJkIGluIHRhYmxldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+Ik5vIFNJTSBjYXJkIGluIHBob25lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiJJbnNlcnQgYSBTSU0gY2FyZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJUaGUgU0lNIGNhcmQgaXMgbWlzc2luZyBvciBub3QgcmVhZGFibGUuIEluc2VydCBhIFNJTSBjYXJkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiJVbnVzYWJsZSBTSU0gY2FyZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiJZb3VyIFNJTSBjYXJkIGhhcyBiZWVuIHBlcm1hbmVudGx5IGRpc2FibGVkLlxuIENvbnRhY3QgeW91ciB3aXJlbGVzcyBzZXJ2aWNlIHByb3ZpZGVyIGZvciBhbm90aGVyIFNJTSBjYXJkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiJTSU0gY2FyZCBpcyBsb2NrZWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJTSU0gY2FyZCBpcyBQVUstbG9ja2VkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3OTc1MjIxODA1MDMzNjE0NDI2Ij4iVW5sb2NraW5nIFNJTSBjYXJk4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiBXaWRnZXQgJTIkZCBvZiAlMyRkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiJBZGQgd2lkZ2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiJFbXB0eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4iVW5sb2NrIGFyZWEgZXhwYW5kZWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4iVW5sb2NrIGFyZWEgY29sbGFwc2VkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHdpZGdldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4iVXNlciBzZWxlY3RvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IlN0YXR1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+IkNhbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJNZWRpYSBjb250cm9scyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4iV2lkZ2V0IHJlb3JkZXJpbmcgc3RhcnRlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiJXaWRnZXQgcmVvcmRlcmluZyBlbmRlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IldpZGdldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBkZWxldGVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IkV4cGFuZCB1bmxvY2sgYXJlYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiJTbGlkZSB1bmxvY2suIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiJQYXR0ZXJuIHVubG9jay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IkZhY2UgdW5sb2NrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQaW4gdW5sb2NrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IlBhc3N3b3JkIHVubG9jay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiJQYXR0ZXJuIGFyZWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IlNsaWRlIGFyZWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjEzMzcyODY1MzgzMTg1NDM1NTUiPiJQcmV2aW91cyB0cmFjayBidXR0b24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzA3MzkyODMwMDQ0NDkwOTMyMCI+Ik5leHQgdHJhY2sgYnV0dG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iUGF1c2UgYnV0dG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJQbGF5IGJ1dHRvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iU3RvcCBidXR0b24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iVGh1bWJzIHVwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iVGh1bWJzIGRvd24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJIZWFydCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IlVubG9jayB0byBjb250aW51ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IkxhdW5jaCBjYW5jZWxsZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iRHJvcCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB0byBkZWxldGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHdpbGwgbm90IGJlIGRlbGV0ZWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IkNhbmNlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiJEZWxldGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IkRvbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiJNb2RlIGNoYW5nZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IlVubG9jayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJDYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU2lsZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IlNvdW5kIG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTZWFyY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iU2xpZGUgdXAgZm9yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJTbGlkZSBkb3duIGZvciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iU2xpZGUgbGVmdCBmb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiJTbGlkZSByaWdodCBmb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4iQ3VycmVudCB1c2VyIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IkVtZXJnZW5jeSBjYWxsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iRm9yZ290IFBhdHRlcm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+Ildyb25nIFBhdHRlcm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiJXcm9uZyBQYXNzd29yZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJXcm9uZyBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+IlRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+IkRyYXcgeW91ciBwYXR0ZXJuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iRW50ZXIgU0lNIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iRW50ZXIgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IkVudGVyIFBhc3N3b3JkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNIGlzIG5vdyBkaXNhYmxlZC4gRW50ZXIgUFVLIGNvZGUgdG8gY29udGludWUuIENvbnRhY3QgY2FycmllciBmb3IgZGV0YWlscy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iRW50ZXIgZGVzaXJlZCBQSU4gY29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJDb25maXJtIGRlc2lyZWQgUElOIGNvZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlVubG9ja2luZyBTSU0gY2FyZOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlR5cGUgYSBQSU4gdGhhdCBpcyA0IHRvIDggbnVtYmVycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsgY29kZSBzaG91bGQgYmUgOCBudW1iZXJzIG9yIG1vcmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iUmUtZW50ZXIgdGhlIGNvcnJlY3QgUFVLIGNvZGUuIFJlcGVhdGVkIGF0dGVtcHRzIHdpbGwgcGVybWFuZW50bHkgZGlzYWJsZSB0aGUgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4gY29kZXMgZG8gbm90IG1hdGNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iVG9vIG1hbnkgcGF0dGVybiBhdHRlbXB0cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJUbyB1bmxvY2ssIHNpZ24gaW4gd2l0aCB5b3VyIEdvb2dsZSBhY2NvdW50LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4iVXNlcm5hbWUgKGVtYWlsKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4iUGFzc3dvcmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IlNpZ24gaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+IkludmFsaWQgdXNlcm5hbWUgb3IgcGFzc3dvcmQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IkZvcmdvdCB5b3VyIHVzZXJuYW1lIG9yIHBhc3N3b3JkP1xuVmlzaXQgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IkNoZWNraW5nIGFjY291bnTigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IllvdSBoYXZlIGluY29ycmVjdGx5IHR5cGVkIHlvdXIgUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBcblxuVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IllvdSBoYXZlIGluY29ycmVjdGx5IHR5cGVkIHlvdXIgcGFzc3dvcmQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIFxuXG5UcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgZHJhd24geW91ciB1bmxvY2sgcGF0dGVybiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gXG5cblRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoZSB0YWJsZXQgd2lsbCBiZSByZXNldCB0byBmYWN0b3J5IGRlZmF1bHQgYW5kIGFsbCB1c2VyIGRhdGEgd2lsbCBiZSBsb3N0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoZSBwaG9uZSB3aWxsIGJlIHJlc2V0IHRvIGZhY3RvcnkgZGVmYXVsdCBhbmQgYWxsIHVzZXIgZGF0YSB3aWxsIGJlIGxvc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBUaGUgdGFibGV0IHdpbGwgbm93IGJlIHJlc2V0IHRvIGZhY3RvcnkgZGVmYXVsdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGltZXMuIFRoZSBwaG9uZSB3aWxsIG5vdyBiZSByZXNldCB0byBmYWN0b3J5IGRlZmF1bHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IllvdSBoYXZlIGluY29ycmVjdGx5IGRyYXduIHlvdXIgdW5sb2NrIHBhdHRlcm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB5b3Ugd2lsbCBiZSBhc2tlZCB0byB1bmxvY2sgeW91ciB0YWJsZXQgdXNpbmcgYW4gZW1haWwgYWNjb3VudC5cblxuIFRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgZHJhd24geW91ciB1bmxvY2sgcGF0dGVybiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHlvdSB3aWxsIGJlIGFza2VkIHRvIHVubG9jayB5b3VyIHBob25lIHVzaW5nIGFuIGVtYWlsIGFjY291bnQuXG5cbiBUcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJSZW1vdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkluY29ycmVjdCBTSU0gUElOIGNvZGU7IHlvdSBtdXN0IG5vdyBjb250YWN0IHlvdXIgb3BlcmF0b3IgdG8gdW5sb2NrIHlvdXIgZGV2aWNlLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iSW5jb3JyZWN0IFNJTSBQSU4gY29kZTsgeW91IGhhdmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlbWFpbmluZyBhdHRlbXB0L3MgYmVmb3JlIHlvdSBtdXN0IGNvbnRhY3QgeW91ciBjYXJyaWVyIHRvIHVubG9jayB5b3VyIGRldmljZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJJbmNvcnJlY3QgU0lNIFBJTiBjb2RlOyB5b3UgaGF2ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcmVtYWluaW5nIGF0dGVtcHQvcy4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSBpcyB1bnVzYWJsZS4gQ29udGFjdCB5b3VyIG9wZXJhdG9yLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iSW5jb3JyZWN0IFNJTSBQVUsgY29kZTsgeW91IGhhdmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlbWFpbmluZyBhdHRlbXB0L3MgYmVmb3JlIFNJTSBiZWNvbWVzIHBlcm1hbmVudGx5IHVudXNhYmxlLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IkluY29ycmVjdCBTSU0gUFVLIGNvZGU7IHlvdSBoYXZlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiByZW1haW5pbmcgYXR0ZW1wdC9zIGJlZm9yZSBTSU0gYmVjb21lcyBwZXJtYW5lbnRseSB1bnVzYWJsZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlNJTSBQSU4gb3BlcmF0aW9uIGZhaWxlZCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTSBQVUsgb3BlcmF0aW9uIGZhaWxlZCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iQ29kZSBhY2NlcHRlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IlByZXZpb3VzIHRyYWNrIGJ1dHRvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Ik5leHQgdHJhY2sgYnV0dG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IlBhdXNlIGJ1dHRvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjkyNDYyODg2Mzc0MTE1MDk1NiI+IlBsYXkgYnV0dG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4iU3RvcCBidXR0b24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4iTm8gc2VydmljZS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKaW5kZXggNzg3NTgxYS4uMzhiZWNhMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkluZ3Jlc2EgZWwgY8OzZGlnbyBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJFc2NyaWJlIGVsIGPDs2RpZ28gUFVLIHkgdW4gbnVldm8gY8OzZGlnbyBQSU4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJDw7NkaWdvIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTnVldm8gY8OzZGlnbyBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJFc2NyaWJlIGVsIGPDs2RpZ28gUFVLIGRlIGxhIHRhcmpldGEgU0lNIHkgdW4gbnVldm8gY8OzZGlnbyBQSU4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJDw7NkaWdvIFBVSyBkZSBsYSB0YXJqZXRhIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTnVldm8gY8OzZGlnbyBQSU4gZGUgbGEgdGFyamV0YSBTSU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJUb2NhIHBhcmEgaW5ncmVzYXIgbGEgY29udHJhc2XDsWEiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJJbmdyZXNhciBjb250cmFzZcOxYSBwYXJhIGRlc2Jsb3F1ZWFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iSW5ncmVzYSBlbCBQSU4gcGFyYSBkZXNibG9xdWVhciI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJCb3TDs24gZGUgcGF1c2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IkJvdMOzbiBkZSByZXByb2R1Y2Npw7NuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJCb3TDs24gZGUgZGV0ZW5jacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJWb3RvcyBhIGZhdm9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iVm90b3MgZW4gY29udHJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iQ29yYXrDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJEZXNibG9xdWVhIHBhcmEgY29udGludWFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IlNlIGNhbmNlbMOzIGVsIGluaWNpby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iU3VlbHRhIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHBhcmEgZWxpbWluYXJsby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iTm8gc2UgZWxpbWluYXLDoSA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkluZ3Jlc2EgZWwgY8OzZGlnbyBQSU4gZGVzZWFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJDb25maXJtYXIgY8OzZGlnbyBQSU4gZGVzZWFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iRGVzYmxvcXVlYW5kbyB0YXJqZXRhIFNJTeKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IkPDs2RpZ28gUElOIGluY29ycmVjdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJFc2NyaWJlIHVuIFBJTiBxdWUgdGVuZ2EgZGUgY3VhdHJvIGEgb2NobyBuw7ptZXJvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJFbCBjw7NkaWdvIFBVSyBkZWJlIHRlbmVyIG9jaG8gbsO6bWVyb3MgY29tbyBtw61uaW1vLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlZ1ZWx2ZSBhIGluZ3Jlc2FyIGVsIGPDs2RpZ28gUFVLIGNvcnJlY3RvLiBTaSBpbmdyZXNhcyB1biBjw7NkaWdvIGluY29ycmVjdG8gdmFyaWFzIHZlY2VzLCBzZSBpbmhhYmlsaXRhcsOhIGxhIHRhcmpldGEgU0lNLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iRGlidWphc3RlIGluY29ycmVjdGFtZW50ZSB0dSBwYXRyw7NuIGRlIGRlc2Jsb3F1ZW8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVjZXMuIEx1ZWdvIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGludGVudG9zIGluY29ycmVjdG9zIG3DoXMsIHNlIHRlIHNvbGljaXRhcsOhIHF1ZSBkZXNibG9xdWVlcyB0dSBkaXNwb3NpdGl2byBtZWRpYW50ZSBlbCB1c28gZGUgdW5hIGN1ZW50YSBkZSBjb3JyZW8uXG5cbiBWdWVsdmUgYSBpbnRlbnRhcmxvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IkVsaW1pbmFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJFbCBjw7NkaWdvIFBJTiBkZSBsYSB0YXJqZXRhIFNJTSBlcyBpbmNvcnJlY3RvLiBEZWJlcyBjb211bmljYXJ0ZSBjb24gZWwgcHJvdmVlZG9yIHBhcmEgZGVzYmxvcXVlYXIgZWwgZGlzcG9zaXRpdm8uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJFbCBjw7NkaWdvIFBJTiBkZSBsYSB0YXJqZXRhIFNJTSBlcyBpbmNvcnJlY3RvLiBUZSBxdWVkYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50byBhbnRlcyBkZSBxdWUgZGViYXMgY29tdW5pY2FydGUgY29uIGVsIHByb3ZlZWRvciBwYXJhIGRlc2Jsb3F1ZWFyIGVsIGRpc3Bvc2l0aXZvLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IkVsIGPDs2RpZ28gUElOIGRlIGxhIHRhcmpldGEgU0lNIGVzIGluY29ycmVjdG8uIFRlIHF1ZWRhbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJMYSB0YXJqZXRhIFNJTSBubyBzZSBwdWVkZSB1dGlsaXphci4gQ29tdW7DrWNhdGUgY29uIGVsIHByb3ZlZWRvci4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkVsIGPDs2RpZ28gUFVLIGRlIGxhIHRhcmpldGEgU0lNIGVzIGluY29ycmVjdG8uIFRlIHF1ZWRhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBpbnRlbnRvIGFudGVzIGRlIHF1ZSBsYSB0YXJqZXRhIFNJTSBxdWVkZSBpbnV0aWxpemFibGUgcGVybWFuZW50ZW1lbnRlLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IkVsIGPDs2RpZ28gUFVLIGRlIGxhIHRhcmpldGEgU0lNIGVzIGluY29ycmVjdG8uIFRlIHF1ZWRhbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MgYW50ZXMgZGUgcXVlIGxhIHRhcmpldGEgU0lNIHF1ZWRlIGludXRpbGl6YWJsZSBwZXJtYW5lbnRlbWVudGUuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJFcnJvciBhbCBkZXNibG9xdWVhciBsYSB0YXJqZXRhIFNJTSBjb24gZWwgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJFcnJvciBhbCBkZXNibG9xdWVhciBsYSB0YXJqZXRhIFNJTSBjb24gZWwgUFVLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkPDs2RpZ28gYWNlcHRhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJCb3TDs24gZGUgcGlzdGEgYW50ZXJpb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJCb3TDs24gZGUgcGlzdGEgc2lndWllbnRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IkJvdMOzbiBkZSBwYXVzYSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCmluZGV4IGQwYzc5ZWIuLmE5M2IxMGQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbApAQCAtMjEsMTYgKzIxLDE2IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJJbnRyb2R1Y2UgZWwgY8OzZGlnbyBQSU4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iSW50cm9kdWNlIGVsIGPDs2RpZ28gUFVLIHkgdW4gbnVldm8gY8OzZGlnbyBQSU4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJDw7NkaWdvIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTnVldm8gY8OzZGlnbyBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJFc2NyaWJlIGVsIFBVSyBkZSBsYSB0YXJqZXRhIFNJTSB5IHVuIG51ZXZvIGPDs2RpZ28gUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJDw7NkaWdvIFBVSyBkZSBsYSB0YXJqZXRhIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTnVldm8gY8OzZGlnbyBQSU4gZGUgdGFyamV0YSBTSU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJUb2NhIHBhcmEgaW50cm9kdWNpciBjb250cmFzZcOxYSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IkludHJvZHVjZSBsYSBjb250cmFzZcOxYSBwYXJhIGRlc2Jsb3F1ZWFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IkludHJvZHVjZSBlbCBjw7NkaWdvIFBJTiBwYXJhIGRlc2Jsb3F1ZWFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IkPDs2RpZ28gUElOIGluY29ycmVjdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iUGFyYSBkZXNibG9xdWVhciBlbCB0ZWzDqWZvbm8sIHB1bHNhIGxhIHRlY2xhIGRlIG1lbsO6IHksIGEgY29udGludWFjacOzbiwgcHVsc2EgMC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4iU2UgaGEgc3VwZXJhZG8gZWwgbsO6bWVybyBtw6F4aW1vIGRlIGludGVudG9zIGRlIGRlc2Jsb3F1ZW8gZmFjaWFsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NoYXJnZWQiIG1zZ2lkPSIzMjcyMjIzOTA2MDczNDkyNDU0Ij4iQ2FyZ2FkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NoYXJnZWQiIG1zZ2lkPSIzMjcyMjIzOTA2MDczNDkyNDU0Ij4iQ2FyZ2FkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MTE3NTcyMDAwNjM5OTk4Mzg4Ij4iQ2FyZ2FuZG8gKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4iQ29uZWN0YSBlbCBjYXJnYWRvci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+IlZlIGFsIG1lbsO6IHBhcmEgZGVzYmxvcXVlYXIgbGEgcGFudGFsbGEuIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IkJvdMOzbiBkZSBwYXVzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iQm90w7NuIGRlIHJlcHJvZHVjY2nDs24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IkJvdMOzbiBwYXJhIGRldGVuZXIgbGEgcmVwcm9kdWNjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJNZSBndXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+Ik5vIG1lIGd1c3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iQ29yYXrDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJEZXNibG9xdWVhciBwYXJhIGNvbnRpbnVhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IkluaWNpbyBjYW5jZWxhZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iU3VlbHRhIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHBhcmEgZWxpbWluYXJsby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gbm8gc2UgZWxpbWluYXLDoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkludHJvZHVjZSBlbCBjw7NkaWdvIFBJTiBkZXNlYWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IkNvbmZpcm1hIGVsIGPDs2RpZ28gUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJEZXNibG9xdWVhbmRvIHRhcmpldGEgU0lN4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iQ8OzZGlnbyBQSU4gaW5jb3JyZWN0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IkludHJvZHVjZSB1biBjw7NkaWdvIFBJTiBjb24gdW5hIGxvbmdpdHVkIGNvbXByZW5kaWRhIGVudHJlIGN1YXRybyB5IG9jaG8gZMOtZ2l0b3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iRWwgY8OzZGlnbyBQVUsgZGViZSB0ZW5lciBvY2hvIG7Dum1lcm9zIGNvbW8gbcOtbmltby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJWdWVsdmUgYSBpbnRyb2R1Y2lyIGVsIGPDs2RpZ28gUFVLIGNvcnJlY3RvLiBTaSBpbnRyb2R1Y2VzIHVuIGPDs2RpZ28gaW5jb3JyZWN0byB2YXJpYXMgdmVjZXMsIHNlIGluaGFiaWxpdGFyw6EgbGEgdGFyamV0YSBTSU0uIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJIYXMgZmFsbGFkbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWNlcyBhbCBkaWJ1amFyIGVsIHBhdHLDs24gZGUgZGVzYmxvcXVlby4gU2kgZmFsbGFzIG90cmFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHZlY2VzLCBkZWJlcsOhcyB1c2FyIHVuYSBjdWVudGEgZGUgY29ycmVvIGVsZWN0csOzbmljbyBwYXJhIGRlc2Jsb3F1ZWFyIGVsIHRlbMOpZm9uby5cblxuIEludMOpbnRhbG8gZGUgbnVldm8gZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iRWxpbWluYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkPDs2RpZ28gUElOIGRlIGxhIHRhcmpldGEgU0lNIGluY29ycmVjdG8uIERlYmVzIHBvbmVydGUgZW4gY29udGFjdG8gY29uIHR1IG9wZXJhZG9yIHBhcmEgZGVzYmxvcXVlYXIgZWwgZGlzcG9zaXRpdm8uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJDw7NkaWdvIFBJTiBkZSBsYSB0YXJqZXRhIFNJTSBpbmNvcnJlY3RvLiBRdWVkYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50byBwYXJhIHRlbmVyIHF1ZSBwb25lcnRlIGVuIGNvbnRhY3RvIGNvbiB0dSBvcGVyYWRvciBwYXJhIGRlc2Jsb3F1ZWFyIGVsIGRpc3Bvc2l0aXZvLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IkPDs2RpZ28gUElOIGRlIGxhIHRhcmpldGEgU0lNIGluY29ycmVjdG8uIFF1ZWRhbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJMYSB0YXJqZXRhIFNJTSBubyBzZSBwdWVkZSB1dGlsaXphci4gUG9udGUgZW4gY29udGFjdG8gY29uIHR1IG9wZXJhZG9yLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iQ8OzZGlnbyBQVUsgZGUgbGEgdGFyamV0YSBTSU0gaW5jb3JyZWN0by4gVGUgcXVlZGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudG8gcGFyYSBxdWUgbGEgdGFyamV0YSBTSU0gbm8gc2UgcHVlZGEgdXRpbGl6YXIgZGUgZm9ybWEgcGVybWFuZW50ZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJDw7NkaWdvIFBVSyBkZSBsYSB0YXJqZXRhIFNJTSBpbmNvcnJlY3RvLiBRdWVkYW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGludGVudG9zIHBhcmEgcXVlIGxhIHRhcmpldGEgU0lNIG5vIHNlIHB1ZWRhIHV0aWxpemFyIGRlIGZvcm1hIHBlcm1hbmVudGUuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJFcnJvciBhbCBpbnRlbnRhciBkZXNibG9xdWVhciBsYSB0YXJqZXRhIFNJTSBjb24gZWwgY8OzZGlnbyBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IkVycm9yIGFsIGludGVudGFyIGRlc2Jsb3F1ZWFyIGxhIHRhcmpldGEgU0lNIGNvbiBlbCBjw7NkaWdvIFBVSyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiJDw7NkaWdvIGFjZXB0YWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iQm90w7NuIGRlIGNhbmNpw7NuIGFudGVyaW9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iQm90w7NuIGRlIHNpZ3VpZW50ZSBjYW5jacOzbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJCb3TDs24gZGUgcGF1c2EiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYmQ4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJTaXNlc3RhZ2UgUElOLWtvb2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJTaXNlc3RhZ2UgU0lNLWkgUFVLLSBqYSB1dXMgUElOLWtvb2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTS1pIFBVSy1rb29kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJVdXMgU0lNLWkgUElOLWtvb2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJQdXVkdXRhZ2UgcGFyb29saSBzaXNlc3RhbWlzZWtzIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iQXZhbWlzZWtzIHNpc2VzdGFnZSBwYXJvb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJBdmFtaXNla3Mgc2lzZXN0YWdlIFBJTi1rb29kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iVmFsZSBQSU4ta29vZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iQXZhbWlzZWtzIHZhanV0YWdlIG1lbsO8w7xrbGFodmksIHNlZWrDpHJlbCBrbGFodmkgMC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4iTWFrc2ltYWFsbmUgdGVlbnVzZWdhIEZhY2UgVW5sb2NrIGF2YW1pc2Uga2F0c2V0ZSBhcnYgb24gw7xsZXRhdHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiJMYWV0dWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IkxhYWRpbWluZSwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IsOcaGVuZGFnZSBsYWFkaWphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4iQXZhbWlzZWtzIHZhanV0YWdlIG1lbsO8w7xrbGFodmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiJWw7VyayBvbiBzdWxldHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlNJTS1rYWFydGkgcG9sZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiJUYWh2ZWxhcnZ1dGlzIHBvbGUgU0lNLWthYXJ0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IlRlbGVmb25pcyBwb2xlIFNJTS1rYWFydGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+IlNpc2VzdGFnZSBTSU0ta2FhcnQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iU0lNLWthYXJ0IHB1dWR1YiB2w7VpIG9uIGxvZXRhbWF0dS4gU2lzZXN0YWdlIFNJTS1rYWFydC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4iS2FzdXRhbWlza8O1bGJtYXR1IFNJTS1rYWFydC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiJTSU0ta2FhcnQgb24gasOkw6RkYXZhbHQga2VlbGF0dWQuXG4gVXVlIFNJTS1rYWFyZGkgc2FhbWlzZWtzIHbDtXRrZSDDvGhlbmR1c3Qgb21hIG1vYmlpbHNpZGVvcGVyYWF0b3JpZ2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IlNJTS1rYWFydCBvbiBsdWt1cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IlNJTS1rYWFydCBvbiBQVUstbHVrdXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJTSU0ta2FhcmRpIGF2YW1pbmUgLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiBWaWRpbiAlMiRkLyUzJGQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IlZpZGluYSBsaXNhbWluZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IlTDvGhpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiJBdmFtaXNhbGEgb24gbGFpZW5kYXR1ZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiJBdmFtaXNhbGEgb24gYWhlbmRhdHVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+IlZpZGluIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiJLYXN1dGFqYSB2YWxpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJPbGVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4iS2FhbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJNZWVkaWEganVodG51cHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJWaWRpbmEgw7xtYmVya29ycmFsZGFtaW5lIGFsZ2FzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IlZpZGluYSDDvG1iZXJrb3JyYWxkYW1pbmUgbMO1cHBlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IlZpZGluIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG9uIGt1c3R1dGF0dWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4iQXZhbWlzYWxhIGxhaWVuZGFtaW5lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IkxvaGlzdGFtaXNlZ2EgYXZhbWluZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+Ik11c3RyaWdhIGF2YW1pbmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiJOw6RvZ2EgYXZhbWluZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUElOLWtvb2RpZ2EgYXZhbWluZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiJQYXJvb2xpZ2EgYXZhbWluZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiJNdXN0cmkgYWxhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiJMb2hpc3RhbWlzYWxhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIxMzM3Mjg2NTM4MzE4NTQzNTU1Ij4iTnVwcCBFZWxtaW5lIGx1Z3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzA3MzkyODMwMDQ0NDkwOTMyMCI+Ik51cHAgSsOkcmdtaW5lIGx1Z3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJOdXBwIFBlYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJOdXBwIEVzaXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJOdXBwIFBlYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Ik1lZWxkaWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJFaSBtZWVsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJTw7xkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkrDpHRrYW1pc2VrcyB0w7xoaXN0YWdlIGx1a3VzdHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iS8OkaXZpdGFtaW5lIG9uIHTDvGhpc3RhdHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+Ikt1c3R1dGFtaXNla3MgbGFza2UgdmlkaW4gPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gbGFodGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+IlZpZGluYXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gZWkga3VzdHV0YXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiJUw7xoaXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiJLdXN0dXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiJWYWxtaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiJSZcW+aWltaSBtdXV0bWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlTDtXN0dWtsYWh2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iU2lzZXN0dXNrbGFodiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iTHVrdSBhdmFtaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iSMOkw6RsZXR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkhlbGkgb24gc2VlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iT3RzaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkxvaGlzdGFnZSDDvGxlczogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IkxvaGlzdGFnZSBhbGxhOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iTG9oaXN0YWdlIHZhc2FrdWxlOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IkxvaGlzdGFnZSBwYXJlbWFsZTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4iUHJhZWd1bmUga2FzdXRhamEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iSMOkZGFhYmlrw7VuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IlVudXN0YXNpbiBtdXN0cmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IlZhbGUgbXVzdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4iVmFsZSBwYXJvb2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iVmFsZSBQSU4ta29vZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4iUHJvb3ZpZ2UgdXVlc3RpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiJKb29uaXN0YWdlIG9tYSBtdXN0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJTaXNlc3RhZ2UgU0lNLWkgUElOLWtvb2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IlNpc2VzdGFnZSBQSU4ta29vZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiJTaXNlc3RhZ2UgcGFyb29sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNIG9uIG7DvMO8ZCBrZWVsYXR1ZC4gSsOkdGthbWlzZWtzIHNpc2VzdGFnZSBQVUsta29vZC4gw5xrc2lrYXNqdSBrw7xzaWdlIG9wZXJhYXRvcmlsdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iU2lzZXN0YWdlIHNvb3ZpdHVkIFBJTi1rb29kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+Iktpbm5pdGFnZSBzb292aXR1ZCBQSU4ta29vZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU0lNLWthYXJkaSBhdmFtaW5lIC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlNpc2VzdGFnZSA04oCTOC1udW1icmlsaW5lIFBJTi1rb29kLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSy1rb29kaSBwaWtrdXMgcGVhYiBvbGVtYSB2w6RoZW1hbHQgOCBudW1icml0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlNpc2VzdGFnZSB1dWVzdGkgw7VpZ2UgUFVLLWtvb2QuIEtvcmR1dmthdHNldGUga29ycmFsIGtlZWxhdGFrc2UgU0lNIGrDpMOkZGF2YWx0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ta29vZGlkIGVpIG9sZSB2YXN0YXZ1c2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iTGlpZ2EgcGFsanUgbXVzdHJpa2F0c2VpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJBdmFtaXNla3MgbG9naWdlIHNpc3NlIG9tYSBHb29nbGVcJ2kga29udG9nYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+Ikthc3V0YWphbmltaSAoZS1wb3N0KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4iUGFyb29sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiJMb2dpIHNpc3NlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiJWYWxlIGthc3V0YWphbmltaSB2w7VpIHBhcm9vbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4iS2FzIHVudXN0YXNpdGUga2FzdXRhamFuaW1lIHbDtWkgcGFyb29saT9cbkvDvGxhc3RhZ2UgYWFkcmVzc2kgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IktvbnRvIGtvbnRyb2xsaW1pbmUgLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJPbGV0ZSBQSU4ta29vZGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSBzaXNlc3RhbnVkLlxuXG5Qcm9vdmlnZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QgdXVlc3RpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJPbGV0ZSBwYXJvb2xpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgc2lzZXN0YW51ZC4gXG5cblByb292aWdlIHV1ZXN0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ikpvb25pc3Rhc2l0ZSBvbWEgYXZhbWlzbXVzdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkuXG5cblByb292aWdlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdCB1dWVzdGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4iT2xldGUgw7xyaXRhbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHRhaHZlbGFydnV0aXQgdmFsZXN0aSBhdmFkYS4gUMOkcmFzdCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCBsw6RodGVzdGF0YWtzZSB0YWh2ZWxhcnZ1dGkgdGVoYXNlIHZhaWtlc2VhZGV0ZWxlIGphIGvDtWlrIGthc3V0YWphYW5kbWVkIGzDpGhldmFkIGthb3RzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4iT2xldGUgw7xyaXRhbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHRlbGVmb25pIHZhbGVzdGkgYXZhZGEuIFDDpHJhc3QgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQgbMOkaHRlc3RhdGFrc2UgdGVsZWZvbiB0ZWhhc2UgdmFpa2VzZWFkZXRlbGUgamEga8O1aWsga2FzdXRhamFhbmRtZWQgbMOkaGV2YWQga2FvdHNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4iT2xldGUgcMO8w7xkbnVkIHRhaHZlbGFydnV0aXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgYXZhZGEuIFRhaHZlbGFydnV0aSBsw6RodGVzdGF0YWtzZSBuw7zDvGQgdGVoYXNlIHZhaWtlc2VhZGV0ZWxlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+Ik9sZXRlIHDDvMO8ZG51ZCB0ZWxlZm9uaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSBhdmFkYS4gVGVsZWZvbiBsw6RodGVzdGF0YWtzZSBuw7zDvGQgdGVoYXNlIHZhaWtlc2VhZGV0ZWxlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJKb29uaXN0YXNpdGUgb21hIGF2YW1pc211c3RyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpLiBQw6RyYXN0IHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IHBhbHV0YWtzZSB0ZWlsIHRhaHZlbGFydnV0aSBhdmFkYSBtZWlsaWtvbnRvZ2EuXG5cbiBQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iSm9vbmlzdGFzaXRlIG9tYSBhdmFtaXNtdXN0cmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aS4gUMOkcmFzdCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCBwYWx1dGFrc2UgdGVpbCB0ZWxlZm9uIGF2YWRhIG1laWxpa29udG9nYS5cblxuIFByb292aWdlIHV1ZXN0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iRWVtYWxkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iVmFsZSBTSU0taSBQSU4ta29vZCwgc2VhZG1lIGF2YW1pc2VrcyBwZWF0ZSBuw7zDvGQgw7xoZW5kdXN0IHbDtXRtYSBvbWEgb3BlcmFhdG9yaWdhLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iVmFsZSBTSU0taSBQSU4ta29vZCwgdGVpbCBvbiBqw6TDpG51ZCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYXRzZSwgZW5uZSBrdWkgcGVhdGUgc2VhZG1lIGF2YW1pc2VrcyBvcGVyYWF0b3JpZ2Egw7xoZW5kdXN0IHbDtXRtYS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJWYWxlIFNJTS1pIFBJTi1rb29kLCB0ZWlsIG9uIGrDpMOkbnVkIHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthdHNldC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSBlaSBvbGUga2FzdXRhdGF2LiBWw7V0a2Ugw7xoZW5kdXN0IG9wZXJhYXRvcmlnYS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IlZhbGUgU0lNLWkgUFVLLWtvb2QsIHRlaWwgb24gasOkw6RudWQgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2F0c2UsIGVubmUga3VpIFNJTSBww7xzaXZhbHQgbHVrdXN0YXRha3NlLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IlZhbGUgU0lNLWkgUFVLLWtvb2QsIHRlaWwgb24gasOkw6RudWQgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2F0c2V0LCBlbm5lIGt1aSBTSU0gcMO8c2l2YWx0IGx1a3VzdGF0YWtzZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlNJTS1pIFBJTi1rb29kaSB0b2ltaW5nIGViYcO1bm5lc3R1cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTS1pIFBVSy1rb29kaSB0b2ltaW5nIGViYcO1bm5lc3R1cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iS29vZCBvbiDDtWlnZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJOdXBwIEVlbG1pbmUgbHVndSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Ik51cHAgSsOkcmdtaW5lIGx1Z3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iTnVwcCBQZWF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjkyNDYyODg2Mzc0MTE1MDk1NiI+Ik51cHAgRXNpdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjMwODQxNzkzMjQ4MTA1NzU3ODciPiJOdXBwIFBlYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+IlRlZW51cyBwdXVkdWIuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWV0L2FjdGl2aXR5c3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWV0L2FjdGl2aXR5c3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNzFhZmMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ldC9hY3Rpdml0eXN0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0vKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAotKioKLSoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0qKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0qKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qKgotKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbmFtZSIgbXNnaWQ9IjMzNTI4ODgxODY2NzQ5ODE1OTMiPiJLZXlndWFyZFRlc3RBY3Rpdml0eSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNlY3VyZV9hcHBfbmFtZSIgbXNnaWQ9Ijc5NTU0OTg3NDI4MTY4NjgwNDkiPiJVbmlmaWVkQ2FtZXJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9uZV9tZW51X2l0ZW0iIG1zZ2lkPSI2MTU2NzQ3Mjg1Njg3NTUxNDI0Ij4iVHVydmFtYXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGluX21lbnVfaXRlbSIgbXNnaWQ9IjExNzk3NTY0MzMyNjg5NjIzMTEiPiJQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX21lbnVfaXRlbSIgbXNnaWQ9IjE5NTk5ODA0OTk2NjIxNTMxNjAiPiJQYXJvb2wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXR0ZXJuX21lbnVfaXRlbSIgbXNnaWQ9IjI5ODc3OTgxNTIxNzUxNDAyNDkiPiJNdXN0ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcGluX21lbnVfaXRlbSIgbXNnaWQ9IjM5NjIyODY2Mzk2NDUwODQ4ODAiPiJTSU0taSBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9wdWtfbWVudV9pdGVtIiBtc2dpZD0iNjE5MDA0NDEzMzAwODM5Mjk3NCI+IlNJTS1pIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkZF93aWRnZXRfaXRlbSIgbXNnaWQ9IjI3OTcwMjE1MjM2Njg1NzQxNSI+IlZpZGluYSB2YWxpbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbl9zY3JlZW5fdHVybmVkX29mZiIgbXNnaWQ9Ijg3NjEzOTYzMjk3NzA1MDgzNjciPiJvblNjcmVlblR1cm5lZE9mZiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im9uX3NjcmVlbl90dXJuZWRfb24iIG1zZ2lkPSI5MjIyOTI2ODE4MDMwNzI4OTk5Ij4ib25TY3JlZW5UdXJuZWRPbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRvX2tleWd1YXJkIiBtc2dpZD0iOTIxMDkzNjk3NzgyMzExODc5NiI+ImRvS2V5Z3VhcmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2ZXJpZnlfdW5sb2NrIiBtc2dpZD0iODUwODcyMjI3MzMyOTMwNjk2OCI+InZlcmlmeVVubG9jayI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZXQvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMTdhOWMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCi0qKgotKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKioKLSoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoqCi0qKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlNpc2VzdGFnZSBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlNpc2VzdGFnZSBQVUsta29vZCBqYSB1dXMgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSy1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJVdXMgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJQdXVkdXRhZ2UgcGFyb29saSBzaXNlc3RhbWlzZWtzIjwvZm9udD48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iQXZhbWlzZWtzIHNpc2VzdGFnZSBwYXJvb2wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJBdmFtaXNla3Mgc2lzZXN0YWdlIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iVmFsZSBQSU4ta29vZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iQXZhbWlzZWtzIHZhanV0YWdlIG1lbsO8w7xrbGFodmksIHNlZWrDpHJlbCBrbGFodmkgMC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4iTWFrc2ltYWFsbmUgdGVlbnVzZWdhIEZhY2UgVW5sb2NrIGF2YW1pc2Uga2F0c2V0ZSBhcnYgb24gw7xsZXRhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiJMYWV0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IkxhYWRpbWluZSwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IsOcaGVuZGFnZSBsYWFkaWphLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4iQXZhbWlzZWtzIHZhanV0YWdlIG1lbsO8w7xrbGFodmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiJWw7VyayBvbiBzdWxldHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlNJTS1rYWFydGkgcG9sZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiJUYWh2ZWxhcnZ1dGlzIHBvbGUgU0lNLWthYXJ0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IlRlbGVmb25pcyBwb2xlIFNJTS1rYWFydGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+IlNpc2VzdGFnZSBTSU0ta2FhcnQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iU0lNLWthYXJ0IHB1dWR1YiB2w7VpIG9uIGxvZXRhbWF0dS4gU2lzZXN0YWdlIFNJTS1rYWFydC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4iS2FzdXRhbWlza8O1bGJtYXR1IFNJTS1rYWFydC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiJTSU0ta2FhcnQgb24gasOkw6RkYXZhbHQga2VlbGF0dWQuXG4gVXVlIFNJTS1rYWFyZGkgc2FhbWlzZWtzIHbDtXRrZSDDvGhlbmR1c3Qgb21hIG1vYmlpbHNpZGVvcGVyYWF0b3JpZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IlNJTS1rYWFydCBvbiBsdWt1cy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IlNJTS1rYWFydCBvbiBQVUstbHVrdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJTSU0ta2FhcmRpIGF2YW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiBWaWRpbiAlMiRkLyUzJGQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IlZpZGluYSBsaXNhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IlTDvGhpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiJBdmFtaXNhbGEgb24gbGFpZW5kYXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiJBdmFtaXNhbGEgb24gYWhlbmRhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+IlZpZGluIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiJLYXN1dGFqYSB2YWxpamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiJPbGVrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4iS2FhbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJNZWVkaWEganVodG51cHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJWaWRpbmEgw7xtYmVya29ycmFsZGFtaW5lIGFsZ2FzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IlZpZGluYSDDvG1iZXJrb3JyYWxkYW1pbmUgbMO1cHBlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IlZpZGluIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG9uIGt1c3R1dGF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4iQXZhbWlzYWxhIGxhaWVuZGFtaW5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IkxvaGlzdGFtaXNlZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+Ik11c3RyaWdhIGF2YW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiJOw6RvZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUElOLWtvb2RpZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiJQYXJvb2xpZ2EgYXZhbWluZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiJNdXN0cmkgYWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiJMb2hpc3RhbWlzYWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIxMzM3Mjg2NTM4MzE4NTQzNTU1Ij4iTnVwcCBFZWxtaW5lIGx1Z3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzA3MzkyODMwMDQ0NDkwOTMyMCI+Ik51cHAgSsOkcmdtaW5lIGx1Z3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJOdXBwIFBlYXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJOdXBwIEVzaXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJOdXBwIFBlYXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IlTDvGhpc3RhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+Ikt1c3R1dGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IlZhbG1pcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IlJlxb5paW1pIG11dXRtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iVMO1c3R1a2xhaHYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJTaXNlc3R1c2tsYWh2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJMdWt1IGF2YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4iS2FhbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJIw6TDpGxldHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iSGVsaSBvbiBzZWVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJPdHNpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iTG9oaXN0YWdlIMO8bGVzOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iTG9oaXN0YWdlIGFsbGE6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJMb2hpc3RhZ2UgdmFzYWt1bGU6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iTG9oaXN0YWdlIHBhcmVtYWxlOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiJQcmFlZ3VuZSBrYXN1dGFqYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJIw6RkYWFiaWvDtW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iVW51c3Rhc2luIG11c3RyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4iVmFsZSBtdXN0ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiJWYWxlIHBhcm9vbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJWYWxlIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiJQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+Ikpvb25pc3RhZ2Ugb21hIG11c3RlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNpc2VzdGFnZSBTSU0taSBQSU4ta29vZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iU2lzZXN0YWdlIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IlNpc2VzdGFnZSBwYXJvb2wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJTSU0gb24gbsO8w7xkIGtlZWxhdHVkLiBKw6R0a2FtaXNla3Mgc2lzZXN0YWdlIFBVSy1rb29kLiDDnGtzaWthc2p1IGvDvHNpZ2Ugb3BlcmFhdG9yaWx0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJTaXNlc3RhZ2Ugc29vdml0dWQgUElOLWtvb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iS2lubml0YWdlIHNvb3ZpdHVkIFBJTi1rb29kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJTSU0ta2FhcmRpIGF2YW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iVmFsZSBQSU4ta29vZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJTaXNlc3RhZ2UgNOKAkzgtbnVtYnJpbGluZSBQSU4ta29vZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsta29vZGkgcGlra3VzIHBlYWIgb2xlbWEgdsOkaGVtYWx0IDggbnVtYnJpdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJTaXNlc3RhZ2UgdXVlc3RpIMO1aWdlIFBVSy1rb29kLiBLb3JkdXZrYXRzZXRlIGtvcnJhbCBrZWVsYXRha3NlIFNJTSBqw6TDpGRhdmFsdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOLWtvb2RpZCBlaSBvbGUgdmFzdGF2dXNlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IkxpaWdhIHBhbGp1IG11c3RyaWthdHNlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iQXZhbWlzZWtzIGxvZ2lnZSBzaXNzZSBvbWEgR29vZ2xlXCdpIGtvbnRvZ2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiJLYXN1dGFqYW5pbWkgKGUtcG9zdCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IlBhcm9vbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4iTG9naSBzaXNzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4iVmFsZSBrYXN1dGFqYW5pbWkgdsO1aSBwYXJvb2wuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IkthcyB1bnVzdGFzaXRlIGthc3V0YWphbmltZSB2w7VpIHBhcm9vbGk/XG5Lw7xsYXN0YWdlIGFhZHJlc3NpICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+Ii4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiJLb250byBrb250cm9sbGltaW5lIC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iT2xldGUgUElOLWtvb2RpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgc2lzZXN0YW51ZC5cblxuUHJvb3ZpZ2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IHV1ZXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iT2xldGUgcGFyb29saSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpIHNpc2VzdGFudWQuIFxuXG5Qcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJKb29uaXN0YXNpdGUgb21hIGF2YW1pc211c3RyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpLlxuXG5Qcm9vdmlnZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QgdXVlc3RpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+Ik9sZXRlIMO8cml0YW51ZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB0YWh2ZWxhcnZ1dGl0IHZhbGVzdGkgYXZhZGEuIFDDpHJhc3QgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQgbMOkaHRlc3RhdGFrc2UgdGFodmVsYXJ2dXRpIHRlaGFzZSB2YWlrZXNlYWRldGVsZSBqYSBrw7VpayBrYXN1dGFqYWFuZG1lZCBsw6RoZXZhZCBrYW90c2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+Ik9sZXRlIMO8cml0YW51ZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB0ZWxlZm9uaSB2YWxlc3RpIGF2YWRhLiBQw6RyYXN0IHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IGzDpGh0ZXN0YXRha3NlIHRlbGVmb24gdGVoYXNlIHZhaWtlc2VhZGV0ZWxlIGphIGvDtWlrIGthc3V0YWphYW5kbWVkIGzDpGhldmFkIGthb3RzaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+Ik9sZXRlIHDDvMO8ZG51ZCB0YWh2ZWxhcnZ1dGl0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpIGF2YWRhLiBUYWh2ZWxhcnZ1dGkgbMOkaHRlc3RhdGFrc2UgbsO8w7xkIHRlaGFzZSB2YWlrZXNlYWRldGVsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiJPbGV0ZSBww7zDvGRudWQgdGVsZWZvbmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgYXZhZGEuIFRlbGVmb24gbMOkaHRlc3RhdGFrc2UgbsO8w7xkIHRlaGFzZSB2YWlrZXNlYWRldGVsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iSm9vbmlzdGFzaXRlIG9tYSBhdmFtaXNtdXN0cmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aS4gUMOkcmFzdCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCBwYWx1dGFrc2UgdGVpbCB0YWh2ZWxhcnZ1dGkgYXZhZGEgbWVpbGlrb250b2dhLlxuXG4gUHJvb3ZpZ2UgdXVlc3RpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Ikpvb25pc3Rhc2l0ZSBvbWEgYXZhbWlzbXVzdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkuIFDDpHJhc3QgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQgcGFsdXRha3NlIHRlaWwgdGVsZWZvbiBhdmFkYSBtZWlsaWtvbnRvZ2EuXG5cbiBQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IkVlbWFsZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJOdXBwIEVlbG1pbmUgbHVndSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Ik51cHAgSsOkcmdtaW5lIGx1Z3UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iTnVwcCBQZWF0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjkyNDYyODg2Mzc0MTE1MDk1NiI+Ik51cHAgRXNpdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjMwODQxNzkzMjQ4MTA1NzU3ODciPiJOdXBwIFBlYXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+IlRlZW51cyBwdXVkdWIuIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAppbmRleCA4M2M1YTM0Li5iNGE0YzYxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTIxLDE1ICsyMSwxNSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i2b7bjNmGINqp2K8g2LHYpyDZiNin2LHYryDaqdmG24zYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyDZiCDZvtuM2YYg2qnYryDYrNiv24zYryDYsdinINiq2KfbjNm+INqp2YbbjNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiLaqdivIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i2b7bjNmGINqp2K8g2KzYr9uM2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLigI9QVUsg2LPbjNmFINqp2KfYsdiqINmIINqp2K8g2b7bjNmGINis2K/bjNivINix2Kcg2KrYp9uM2b4g2qnZhtuM2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IuKAj9qp2K8gUFVLINiz24zZhSDaqdin2LHYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4i2qnYryDZvtuM2YYg2KzYr9uM2K8g2LPbjNmFINqp2KfYsdiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i2KjYsdin24wg2KrYp9uM2b4g2q/YsNix2YjYp9qY2Ycg2YTZhdizINqp2YbbjNivIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i2KjYsdin24wg2KjYp9iy2qnYsdiv2YYg2YLZgdmE2Iwg2q/YsNix2YjYp9qY2Ycg2LHYpyDZiNin2LHYryDaqdmG24zYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+Itio2LHYp9uMINio2KfYstqp2LHYr9mGINmC2YHZhNiMINm+24zZhiDYsdinINiq2KfbjNm+INqp2YbbjNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i2b7bjNmGINqp2K8g2KfYtNiq2KjYp9mHINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i2KjYsdin24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YTYjCDZhdmG2Ygg2LHYpyDZgdi02KfYsSDYr9mH24zYryDZiCDYs9m+2LMgMCDYsdinINmB2LTYp9ixINiv2YfbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLYr9mB2LnYp9iqINiq2YTYp9i0INio2LHYp9uMIEZhY2UgVW5sb2NrINin2LIg2K3Yr9in2qnYq9ixINmF2KzYp9iyINio24zYtNiq2LEg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLigI/Yr9mB2LnYp9iqINiq2YTYp9i0INio2LHYp9uMIEZhY2UgVW5sb2NrINin2LIg2K3Yr9in2qnYq9ixINmF2KzYp9iyINio24zYtNiq2LEg2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NoYXJnZWQiIG1zZ2lkPSIzMjcyMjIzOTA2MDczNDkyNDU0Ij4i2LTYp9ix2pgg2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MTE3NTcyMDAwNjM5OTk4Mzg4Ij4i2LTYp9ix2pjYjCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i2LTYp9ix2pjYsSDYrtmI2K8g2LHYpyDZiNi12YQg2qnZhtuM2K8uIjwvc3RyaW5nPgpAQCAtNDEsMTEgKzQxLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MjEwODkxNTA5OTk1OTQyMjUwIj4i2LPbjNmFINqp2KfYsdiqINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4i2LPbjNmFINqp2KfYsdiqINmF2YjYrNmI2K8g2YbbjNiz2Kog24zYpyDZgtin2KjZhCDYrtmI2KfZhtiv2YYg2YbbjNiz2KouINuM2qkg2LPbjNmFINqp2KfYsdiqINmI2KfYsdivINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiLYs9uM2YUg2qnYp9ix2Kog2LrbjNix2YLYp9io2YQg2KfYs9iq2YHYp9iv2Ycg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+Itiz24zZhSDaqdin2LHYqiDYtNmF2Kcg2KjZhyDYt9mI2LEg2K/Yp9im2YUg2LrbjNixINmB2LnYp9mEINi02K/ZhyDYp9iz2KouIFxu2KjYsdin24wg2K/Yp9i02KrZhiDYs9uM2YUg2qnYp9ix2Kog2K/bjNqv2LEg2KjYpyDYp9ix2KfYptmH4oCO2K/Zh9mG2K/ZhyDYs9ix2YjbjNizINio24zigI7Ys9uM2YUg2K7ZiNivINiq2YXYp9izINio2q/bjNix24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiLigI/Ys9uM2YUg2qnYp9ix2Kog2LTZhdinINio2Ycg2LfZiNixINiv2KfYptmFINi624zYsSDZgdi52KfZhCDYtNiv2Ycg2KfYs9iqLiBcbtio2LHYp9uMINiv2KfYtNiq2YYg2LPbjNmFINqp2KfYsdiqINiv24zar9ixINio2Kcg2KfYsdin2KbZh+KAjtiv2YfZhtiv2Ycg2LPYsdmI24zYsyDYqNuM4oCO2LPbjNmFINiu2YjYryDYqtmF2KfYsyDYqNqv24zYsduM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+Itiz24zZhSDaqdin2LHYqiDZgtmB2YQg2LTYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+Itiz24zZhSDaqdin2LHYqiDYqNinIFBVSyDZgtmB2YQg2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IuKAj9iz24zZhSDaqdin2LHYqiDYqNinIFBVSyDZgtmB2YQg2LTYr9mHINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+Itiv2LHYrdin2YQg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2LPbjNmFINqp2KfYsdiqLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiDYp9io2LLYp9ix2qkgJTIkZCDYp9iyICUzJGQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiLigI8lMSRzLiDYp9io2LLYp9ix2qkgJTIkZCDYp9iyICUzJGQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+Itin2KjYstin2LHaqSDYp9i22KfZgdmHINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i2K7Yp9mE24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+ItmF2YbYt9mC2Ycg2KjYp9iy2q/YtNin24zbjCDar9iz2KrYsdiv2Ycg2LTYry4iPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i2K/aqdmF2Ycg2KrZiNmC2YEg2YXZiNmC2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+Itiv2qnZhdmHINm+2K7YtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i2K/aqdmF2Ycg2KrZiNmC2YEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4i2LHYo9uMINmF2YjYp9mB2YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLYsdij24wg2YXYrtin2YTZgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+ItmC2YTYqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+Itio2LHYp9uMINin2K/Yp9mF2Ycg2YLZgdmEINix2Kcg2KjYp9iyINqp2YbbjNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i2LHYp9mH4oCM2KfZhtiv2KfYstuMINmE2LrZiCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+Itis2YfYqiDYrdiw2YHYjCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDYsdinINio2qnYtNuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+INm+2KfaqSDZhtiu2YjYp9mH2K8g2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSwxOCArMTEyLDE3IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i2b7bjNmGINqp2K8g2K/ZhNiu2YjYp9mHINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i2KrYo9uM24zYryDZvtuM2YYg2qnYryDYr9mE2K7ZiNin2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Itio2KfYstqv2LTYp9uM24wg2YLZgdmEINiz24zZhSDaqdin2LHYqi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Itm+24zZhiDaqdivINin2LTYqtio2KfZhyDYp9iz2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i24zaqSDZvtuM2YYg27Qg2KrYpyDbuCDYsdmC2YXbjCDYsdinINiq2KfbjNm+INqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+Itm+24zZhiDaqdivINio2KfbjNivINu4INi52K/YryDbjNinINio24zYtNiq2LEg2KjYp9i02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i2b7bjNmGINqp2K8g2LXYrduM2K0g2LHYpyDYr9mI2KjYp9ix2Ycg2YjYp9ix2K8g2qnZhtuM2K8uINiq2YTYp9i04oCM2YfYp9uMINmF2qnYsdixINio2YfigIzYt9mI2LEg2K/Yp9im2YUg2LPbjNmFINqp2KfYsdiqINix2Kcg2LrbjNix2YHYudin2YQg2K7ZiNin2YfYryDaqdix2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+Itm+24zZhiDaqdiv2YfYpyDZhdmG2LfYqNmCINmG24zYs9iq2YbYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+Itiq2YTYp9i04oCO2YfYp9uMINiy24zYp9iv24wg2KjYsdin24wg2qnYtNuM2K/ZhiDYp9mE2q/ZiCDYtdmI2LHYqiDar9ix2YHYqtmHINin2LPYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLYqNix2KfbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhNiMINio2Kcg2K3Ys9in2KggR29vZ2xlINiu2YjYryDZiNin2LHYryDYs9uM2LPYqtmFINi02YjbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuKAj9iq2YTYp9i04oCO2YfYp9uMINiy24zYp9iv24wg2KjYsdin24wg2qnYtNuM2K/ZhiDYp9mE2q/ZiCDYtdmI2LHYqiDar9ix2YHYqtmHINin2LPYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLigI/YqNix2KfbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhNiMINio2Kcg2K3Ys9in2KggR29vZ2xlINiu2YjYryDZiNin2LHYryDYs9uM2LPYqtmFINi02YjbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i2YbYp9mFINqp2KfYsdio2LHbjCAo2KfbjNmF24zZhCkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+Itqv2LDYsdmI2KfamNmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLZiNix2YjYryDYqNmHINiz24zYs9iq2YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+ItmG2KfZhSDaqdin2LHYqNix24wg24zYpyDar9iw2LHZiNin2pjZhyDZhtin2YXYudiq2KjYsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i2YbYp9mFINqp2KfYsdio2LHbjCDbjNinINqv2LDYsdmI2KfamNmHINiu2YjYryDYsdinINmB2LHYp9mF2YjYtCDaqdix2K/bjNiv2J9cbtin2LIgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iINio2KfYstiv24zYryDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4oCP2YbYp9mFINqp2KfYsdio2LHbjCDbjNinINqv2LDYsdmI2KfamNmHINiu2YjYryDYsdinINmB2LHYp9mF2YjYtCDaqdix2K/bjNiv2J9cbtin2LIgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iINio2KfYstiv24zYryDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiLYr9ix2K3Yp9mEINio2LHYsdiz24wg2K3Ys9in2KguLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+Itm+24zZhiDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINiq2KfbjNm+INqp2LHYr9uM2K8uIFxuXG7ZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLar9iw2LHZiNin2pjZhyDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINiq2KfbjNm+INqp2LHYr9uM2K8uIFxuXG7ZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KQEAgLTEyNSwxMCArMTMxLDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i2LTZhdinINio2Ycg2KfYtNiq2KjYp9mHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYp9mC2K/Yp9mFINio2Ycg2KjYp9iyINqp2LHYr9mGINmC2YHZhCDYqtmE2YHZhiDaqdix2K/Zh+KAjNin24zYry4g2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INiq2YTYp9i0INmG2KfZhdmI2YHZgiDYr9uM2q/YsdiMINiq2YTZgdmGINio2Ycg2b7bjNi04oCM2YHYsdi2INqp2KfYsdiu2KfZhtmHINio2KfYstmG2LTYp9mG24wg2YXbjOKAjNi02YjYryDZiCDYqtmF2KfZhSDYr9in2K/Zh+KAjNmH2KfbjCDaqdin2LHYqNixINin2LIg2K/Ys9iqINiu2YjYp9mH2K8g2LHZgdiqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4i2LTZhdinINio2Ycg2KfYtNiq2KjYp9mHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfZgtiv2KfZhSDYqNmHINio2KfYsiDaqdix2K/ZhiDZgtmB2YQg2LHYp9uM2KfZhtmHINmE2YjYrduMINqp2LHYr9mH4oCM2KfbjNivLiDYsdin24zYp9mG2Ycg2YTZiNit24wg2KfaqdmG2YjZhiDYqNmHINm+24zYtOKAjNmB2LHYtiDaqdin2LHYrtin2YbZhyDYqNin2LLZhti02KfZhtuMINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4i2LTZhdinINio2Ycg2KfYtNiq2KjYp9mHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfZgtiv2KfZhSDYqNmHINio2KfYsiDaqdix2K/ZhiDZgtmB2YQg2KrZhNmB2YYg2qnYsdiv2YfigIzYp9uM2K8uINin24zZhiDYqtmE2YHZhiDYp9qp2YbZiNmGINio2Ycg2b7bjNi04oCM2YHYsdi2INqp2KfYsdiu2KfZhtmHINio2KfYstmG2LTYp9mG24wg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i2LTZhdinINin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCO2KfbjNivLiDYqNi52K8g2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDbjNqpINit2LPYp9ioINin24zZhduM2YQg2YLZgdmEINix2KfbjNin2YbZhyDZhNmI2K3bjCDYrtmI2K8g2LHYpyDYqNin2LIg2qnZhtuM2K8uXG5cbiDZhNi32YHYp9mLINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLYtNmF2Kcg2KfZhNqv2YjbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhCDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINqp2LTbjNiv2YfigIzYp9uM2K8uINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDbjNqpINit2LPYp9ioINin24zZhduM2YQg2YLZgdmEINiq2YTZgdmGINiu2YjYryDYsdinINio2KfYsiDaqdmG24zYry5cblxuINmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4oCP2LTZhdinINin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCO2KfbjNivLiDYqNi52K8g2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDbjNqpINit2LPYp9ioINin24zZhduM2YQg2YLZgdmEINix2KfbjNin2YbZhyDZhNmI2K3bjCDYrtmI2K8g2LHYpyDYqNin2LIg2qnZhtuM2K8uXG5cbiDZhNi32YHYp9mLINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLigI/YtNmF2Kcg2KfZhNqv2YjbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhCDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINqp2LTbjNiv2YfigIzYp9uM2K8uINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YLYjCDYp9iyINi02YXYpyDYrtmI2KfYs9iq2Ycg2YXbjOKAjti02YjYryDaqdmHINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDbjNqpINit2LPYp9ioINin24zZhduM2YQg2YLZgdmEINiq2YTZgdmGINiu2YjYryDYsdinINio2KfYsiDaqdmG24zYry5cblxuINmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLYrdiw2YEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Itqp2K8g2b7bjNmGINiz24zZhSDaqdin2LHYqiDYp9i02KrYqNin2Ycg2KfYs9iq2Iwg2KfaqdmG2YjZhiDYqNix2KfbjCDar9i02YjYr9mGINmC2YHZhCDYr9iz2Krar9in2YfYqtin2YYg2KjYp9uM2K8g2KjYpyDYtNix2qnYqiDZhdiu2KfYqNix2KfYqtuMINiq2YXYp9izINio2q/bjNix24zYry4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+Itqp2K8g2b7bjNmGINiz24zZhSDaqdin2LHYqiDYp9i02KrYqNin2Ycg2KfYs9iq2IwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INio2KfYsSDYr9uM2q/YsSDZhduM4oCM2KrZiNin2YbbjNivINiq2YTYp9i0INqp2YbbjNivINmIINm+2LMg2KfYsiDYotmGINio2LHYp9uMINqv2LTZiNiv2YYg2YLZgdmEINiv2LPYqtqv2KfZh9iq2KfZhiDYqNin24zYryDYqNinINi02LHaqdiqINmF2K7Yp9io2LHYp9iq24wg2KrZhdin2LMg2Kjar9uM2LHbjNivLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+Itqp2K8g2b7bjNmGINiz24zZhSDaqdin2LHYqiDYp9i02KrYqNin2Ycg2KfYs9iq2IwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INio2KfYsSDYr9uM2q/YsSDZhduM4oCM2KrZiNin2YbbjNivINiq2YTYp9i0INqp2YbbjNivLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4i2LPbjNmFINqp2KfYsdiqINi624zYsSDZgtin2KjZhCDYp9iz2KrZgdin2K/ZhyDYp9iz2KouINio2Kcg2LTYsdqp2Kog2YXYrtin2KjYsdin2KrbjOKAjNiq2KfZhiDYqtmF2KfYsyDYqNqv24zYsduM2K8uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLigI/aqdivIFBVSyDYs9uM2YUg2qnYp9ix2Kog2KfYtNiq2KjYp9mHINin2LPYqtiMIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2K/bjNqv2LEg2YXbjOKAjNiq2YjYp9mG24zYryDYqtmE2KfYtCDaqdmG24zYryDZiCDZvtizINin2LIg2KLZhiDYs9uM2YUg2qnYp9ix2Kog2KjZhyDYtdmI2LHYqiDYr9in2KbZhSDYutuM2LEg2YLYp9io2YQg2KfYs9iq2YHYp9iv2Ycg2YXbjOKAjNi02YjYry4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiLigI/aqdivIFBVSyDYs9uM2YUg2qnYp9ix2Kog2KfYtNiq2KjYp9mHINin2LPYqtiMIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2K/bjNqv2LEg2YXbjOKAjNiq2YjYp9mG24zYryDYqtmE2KfYtCDaqdmG24zYryDZiCDZvtizINin2LIg2KLZhiDYs9uM2YUg2qnYp9ix2Kog2KjZhyDYt9mI2LEg2K/Yp9im2YUg2LrbjNixINmC2KfYqNmEINin2LPYqtmB2KfYr9mHINmF24zigIzYtNmI2K8uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiLYudmF2YTbjNin2Kog2b7bjNmGINiz24zZhSDaqdin2LHYqiDZhtin2YXZiNmB2YIg2KjZiNivISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4i4oCP2LnZhdmE24zYp9iqIFBVSyDYs9uM2YUg2qnYp9ix2Kog2YbYp9mF2YjZgdmCINio2YjYryEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i2qnYryDZvtiw24zYsdmB2KrZhyDYtNivISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+Itiv2qnZhdmHINiq2LHYp9qpINmC2KjZhNuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i2K/aqdmF2Ycg2KrYsdin2qkg2KjYudiv24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i2K/aqdmF2Ycg2KrZiNmC2YEg2YXZiNmC2KoiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbAppbmRleCBkYmNhNTBkLi5lMDc5ZmZhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkFubmEgUElOLWtvb2RpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iQW5uYSBQVUsta29vZGkgamEgdXVzaSBQSU4ta29vZGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSy1rb29kaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iVXVzaSBQSU4ta29vZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJBbm5hIFNJTS1rb3J0aW4gUFVLLWtvb2RpIGphIHV1c2kgUElOLWtvb2RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJTSU0ta29ydGluIFBVSy1rb29kaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iVXVzaSBTSU0ta29ydGluIFBJTi1rb29kaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+Iktvc2tldGEgamEgYW5uYSBzYWxhc2FuYSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IlBvaXN0YSBsdWtpdHVzIGFudGFtYWxsYSBzYWxhc2FuYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IlBvaXN0YSBsdWtpdHVzIGFudGFtYWxsYSBQSU4ta29vZGkiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iVGF1a28tcGFpbmlrZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iVG9pc3RhLXBhaW5pa2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+Iktlc2tleXTDpC1wYWluaWtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IlR5a2vDpMOkbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IkVuIHR5a2vDpMOkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iU3lkw6RuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iSmF0a2EgcG9pc3RhbWFsbGEgbHVraXR1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IkvDpHlubmlzdHlzIHBlcnV1dGV0dHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iUG9pc3RhIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHB1ZG90dGFtYWxsYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iS29oZGV0dGEgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gZWkgcG9pc3RldGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJBbm5hIGhhbHVhbWFzaSBQSU4ta29vZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iVmFodmlzdGEgaGFsdWFtYXNpIFBJTi1rb29kaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU0lNLWtvcnRpbiBsdWtpdHVzdGEgcG9pc3RldGFhbuKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IlZpcmhlZWxsaW5lbiBQSU4ta29vZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iQW5uYSA04oCTOC1udW1lcm9pbmVuIFBJTi1rb29kaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsta29vZGlzc2EgdHVsZWUgb2xsYSB2w6RoaW50w6TDpG4gOCBudW1lcm9hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkFubmEgdXVkZWxsZWVuIG9pa2VhIFBVSy1rb29kaS4gSm9zIHRlZXQgbGlpYW4gbW9udGEgeXJpdHlzdMOkLCBTSU0ta29ydHRpIHBvaXN0ZXRhYW4ga8OkeXTDtnN0w6QgcHlzeXbDpHN0aS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlBpaXJzaXQgbHVraXR1a3NlbnBvaXN0b2t1dmlvbiB2w6TDpHJpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZXJ0YWEuIEpvcyBwaWlycsOkdCBrdXZpb24gdsOkw6RyaW4gdmllbMOkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGtlcnRhYSwgc2ludWEgcHl5ZGV0w6TDpG4gcG9pc3RhbWFhbiBwdWhlbGltZXNpIGx1a2l0dXMgc8OkaGvDtnBvc3RpdGlsaW4gYXZ1bGxhLlxuXG4gWXJpdMOkIHV1ZGVsbGVlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bm5pbiBrdWx1dHR1YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJQb2lzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlZpcmhlZWxsaW5lbiBTSU0ta29ydGluIFBJTi1rb29kaS4gU2ludW4gb24gbnl0IG90ZXR0YXZhIHlodGV5cyBvcGVyYWF0dG9yaWluIGxhaXR0ZWVuIGx1a2l0dWtzZW4gYXZhYW1pc2Vrc2kuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJWaXJoZWVsbGluZW4gU0lNLWtvcnRpbiBQSU4ta29vZGkuIFNpbnVsbGEgb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHlyaXR5cyBqw6RsamVsbMOkLCBlbm5lbiBrdWluIHNpbnVuIG9uIG90ZXR0YXZhIHlodGV5cyBvcGVyYWF0dG9yaWluIGxhaXR0ZWVuIGx1a2l0dWtzZW4gYXZhYW1pc2Vrc2kuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iVmlyaGVlbGxpbmVuIFNJTS1rb3J0aW4gUElOLWtvb2RpLiBTaW51bGxhIG9uIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB5cml0eXN0w6QgasOkbGplbGzDpC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTS1rb3J0dGkgb24ga8OkeXR0w7ZrZWx2b3Rvbi4gT3RhIHlodGV5cyBvcGVyYWF0dG9yaWluLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iVmlyaGVlbGxpbmVuIFNJTS1rb3J0aW4gUFVLLWtvb2RpLiBTaW51bGxhIG9uIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB5cml0eXMgasOkbGplbGzDpCwgZW5uZW4ga3VpbiBTSU0ta29ydGlzdGEgdHVsZWUgcHlzeXbDpHN0aSBrw6R5dHTDtmtlbHZvdG9uLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IlZpcmhlZWxsaW5lbiBTSU0ta29ydGluIFBVSy1rb29kaS4gU2ludWxsYSBvbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4geXJpdHlzdMOkIGrDpGxqZWxsw6QsIGVubmVuIGt1aW4gU0lNLWtvcnRpc3RhIHR1bGVlIHB5c3l2w6RzdGkga8OkeXR0w7ZrZWx2b3Rvbi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlNJTS1rb3J0aW4gUElOLXRvaW1pbnRvIGVww6Rvbm5pc3R1aSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTS1rb3J0aW4gUFVLLXRvaW1pbnRvIGVww6Rvbm5pc3R1aSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iS29vZGkgaHl2w6Rrc3l0dHkhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iRWRlbGxpbmVuIGthcHBhbGUgLXBhaW5pa2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJTZXVyYWF2YSBrYXBwYWxlIC1wYWluaWtlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IlRhdWtvLXBhaW5pa2UiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZjI3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJTYWlzaXNzZXogbGUgTklQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IkVudHJleiBsZSBjb2RlwqBQVUsgZXQgbGUgbm91dmVhdSBOSVAgZGUgbGEgY2FydGUgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJDb2RlIFBVSyBkZSBsYSBjYXJ0ZSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik5vdXZlYXUgTklQIGRlIGxhIGNhcnRlIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IkFwcHV5ZXIgcG91ciBzYWlzaXIgbW90IHBhc3NlIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iU2Fpc2lzc2V6IGxlIG1vdCBkZSBwYXNzZSBwb3VyIGTDqXZlcnJvdWlsbGVyIGxlIGNsYXZpZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iU2Fpc2lzc2V6IGxlIE5JUCBwb3VyIGTDqXZlcnJvdWlsbGVyIGxlIGNsYXZpZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iTklQIGVycm9uw6kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+IlBvdXIgZMOpdmVycm91aWxsZXIgbGUgdMOpbMOpcGhvbmUsIGFwcHV5ZXogc3VyIFwiTWVudVwiLCBwdWlzIHN1ciAwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiJOb21icmUgbWF4aW1hbCBhdXRvcmlzw6kgZGUgdGVudGF0aXZlcyBGYWNlwqBVbmxvY2sgYXR0ZWludC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IkNoYXJnw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IkVuIGNoYXJnZSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+wqA8eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IkJyYW5jaGV6IHZvdHJlIGNoYXJnZXVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4iQXBwdXlleiBzdXIgXCJNZW51XCIgcG91ciBkw6l2ZXJyb3VpbGxlciBsXCdhcHBhcmVpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+IlLDqXNlYXUgdmVycm91aWxsw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4iQXVjdW5lIGNhcnRlIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiJBdWN1bmUgY2FydGUgU0lNIG5cJ2VzdCBpbnPDqXLDqWUgZGFucyBsYSB0YWJsZXR0ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IkF1Y3VuZSBjYXJ0ZSBTSU0gblwnZXN0IGluc8OpcsOpZSBkYW5zIGxlIHTDqWzDqXBob25lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiJJbnPDqXJleiB1bmUgY2FydGXCoFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJDYXJ0ZcKgU0lNIGFic2VudGUgb3UgaWxsaXNpYmxlLiBWZXVpbGxleiBpbnPDqXJlciB1bmUgY2FydGXCoFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4iQ2FydGUgU0lNIGludXRpbGlzYWJsZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiJWb3RyZSBjYXJ0ZcKgU0lNIGEgw6l0w6kgZMOpZmluaXRpdmVtZW50IGTDqXNhY3RpdsOpZS5cbiBWZXVpbGxleiBjb250YWN0ZXIgdm90cmUgb3DDqXJhdGV1ciBkZSB0w6lsw6lwaG9uaWUgbW9iaWxlIHBvdXIgZW4gb2J0ZW5pciB1bmUgYXV0cmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IkxhIGNhcnRlIFNJTSBlc3QgdmVycm91aWxsw6llLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4iTGEgY2FydGUgU0lNIGVzdCB2ZXJyb3VpbGzDqWUgcGFyIGNsw6kgUFVLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3OTc1MjIxODA1MDMzNjE0NDI2Ij4iRMOpdmVycm91aWxsYWdlIGRlIGxhIGNhcnRlIFNJTSBlbiBjb3Vyc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4gV2lkZ2V0ICUyJGQgc3VyICUzJGQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IkFqb3V0ZXIgdW4gd2lkZ2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiJWaWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiJEw6l2ZWxvcHBlbWVudCBkZSBsYSB6b25lIGRlIGTDqXZlcnJvdWlsbGFnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IlLDqWR1Y3Rpb24gZGUgbGEgem9uZSBkZSBkw6l2ZXJyb3VpbGxhZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiJXaWRnZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4iU8OpbGVjdGV1ciBkXCd1dGlsaXNhdGV1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IsOJdGF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4iQ2Ftw6lyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJDb21tYW5kZXMgbXVsdGltw6lkaWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJEw6lidXQgZGUgbGEgcsOpb3JnYW5pc2F0aW9uIGRlcyB3aWRnZXRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4iRmluIGRlIGxhIHLDqW9yZ2FuaXNhdGlvbiBkZXMgd2lkZ2V0cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4iTGUgd2lkZ2V0IDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IGEgw6l0w6kgc3VwcHJpbcOpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IkTDqXZlbG9wcGVyIGxhIHpvbmUgZGUgZMOpdmVycm91aWxsYWdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4iRMOpdmVycm91aWxsYWdlIGVuIGZhaXNhbnQgZ2xpc3NlciB2b3RyZSBkb2lndCBzdXIgbFwnw6ljcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiJEw6l2ZXJyb3VpbGxhZ2UgcGFyIHNjaMOpbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IkTDqXZlcnJvdWlsbGFnZSBwYXIgcmVjb25uYWlzc2FuY2UgZmFjaWFsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJEw6l2ZXJyb3VpbGxhZ2UgcGFyIE5JUCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IkTDqXZlcnJvdWlsbGFnZSBwYXIgbW90IGRlIHBhc3NlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4iWm9uZSBkdSBzY2jDqW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IlpvbmUgb8O5IGZhaXJlIGdsaXNzZXIgdm90cmUgZG9pZ3Qgc3VyIGxcJ8OpY3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIxMzM3Mjg2NTM4MzE4NTQzNTU1Ij4iQm91dG9uIHBvdXIgcmV2ZW5pciBhdSB0aXRyZSBwcsOpY8OpZGVudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MDczOTI4MzAwNDQ0OTA5MzIwIj4iQm91dG9uIHBvdXIgYXR0ZWluZHJlIGxlIHRpdHJlIHN1aXZhbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJCb3V0b24gZGUgcGF1c2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IkJvdXRvbiBkZSBsZWN0dXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJCb3V0b24gZFwnYXJyw6p0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IkpcJ2FpbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJKZSBuXCdhaW1lIHBhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IkPFk3VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iRMOpdmVycm91aWxsZXIgcG91ciBjb250aW51ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJMYW5jZW1lbnQgYW5udWzDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJEw6lwb3NleiA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBwb3VyIHN1cHByaW1lci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gbmUgc2VyYSBwYXMgc3VwcHJpbcOpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiJBbm51bGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+IlN1cHByaW1lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4iVGVybWluw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiJDaGFuZ2VtZW50IGRlIG1vZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJNYWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRyw6llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJEw6l2ZXJyb3VpbGxlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJBcHBhcmVpbCBwaG90byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJNb2RlIHNpbGVuY2lldXgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iU29uIGFjdGl2w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlJlY2hlcmNoZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJGYWlyZSBnbGlzc2VyIGxlIGRvaWd0IHZlcnMgbGUgaGF1dMKgOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJGYWlyZSBnbGlzc2VyIGxlIGRvaWd0IHZlcnMgbGUgYmFzwqA6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkZhaXRlcyBnbGlzc2VyIHZvdHJlIGRvaWd0IHZlcnMgbGEgZ2F1Y2hlwqBwb3VyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iRmFpdGVzIGdsaXNzZXIgdm90cmUgZG9pZ3QgdmVycyBsYSBkcm9pdGUgcG91ciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiJVdGlsaXNhdGV1ciBhY3R1ZWzCoDogPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJBcHBlbCBkXCd1cmdlbmNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iSlwnYWkgb3VibGnDqSBsZSBzY2jDqW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiJTY2jDqW1hIGluY29ycmVjdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiJNb3QgZGUgcGFzc2UgaW5jb3JyZWN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJOSVAgaW5jb3JyZWN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4iUsOpZXNzYXlleiBkYW5zIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBzZWNvbmRlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+IkRlc3NpbmV6IHZvdHJlIHNjaMOpbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iU2Fpc2lzc2V6IGxlIE5JUCBkZSBsYSBjYXJ0ZSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IlNhaXNpc3NleiBsZSBOSVAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IlNhaXNpc3NleiB2b3RyZSBtb3QgZGUgcGFzc2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iTGEgY2FydGUgU0lNIGVzdCBtYWludGVuYW50IGTDqXNhY3RpdsOpZS4gU2Fpc2lzc2V6IGxlIGNvZGUgUFVLIHBvdXIgY29udGludWVyLiBDb250YWN0ZXogdm90cmUgb3DDqXJhdGV1ciBwb3VyIGVuIHNhdm9pciBwbHVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJTYWlzaXIgbGUgTklQIHNvdWhhaXTDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJDb25maXJtZXIgbGUgTklQIHNvdWhhaXTDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iRMOpYmxvY2FnZSBkZSBsYSBjYXJ0ZSBTSU0gZW4gY291cnPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJTYWlzaXNzZXogdW4gTklQIGNvbXByZW5hbnQgZW50cmUgcXVhdHJlIGV0IGh1aXTCoGNoaWZmcmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iTGUgY29kZSBQVUsgZG9pdCBjb250ZW5pciBhdSBtb2lucyA4wqBjaGlmZnJlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJWZXVpbGxleiBzYWlzaXIgZGUgbm91dmVhdSBsZSBjb2RlIFBVSyBjb3JyZWN0LiBEZXMgdGVudGF0aXZlcyByw6lww6l0w6llcyBkw6lzYWN0aXZlbnQgZMOpZmluaXRpdmVtZW50IGxhIGNhcnRlIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iTGVzIGNvZGVzIFBJTiBuZSBjb3JyZXNwb25kZW50IHBhcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJUcm9wIGRlIHRlbnRhdGl2ZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IlBvdXIgZMOpdmVycm91aWxsZXIgbFwnYXBwYXJlaWwsIGNvbm5lY3Rlei12b3VzIGF2ZWMgdm90cmUgY29tcHRlIEdvb2dsZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+Ik5vbSBkXCd1dGlsaXNhdGV1ciAoY291cnJpZWwpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiJNb3QgZGUgcGFzc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IkNvbm5leGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4iTm9tIGRcJ3V0aWxpc2F0ZXVyIG91IG1vdCBkZSBwYXNzZSBub24gdmFsaWRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiJWb3VzIGF2ZXogb3VibGnDqSB2b3RyZSBub20gZFwndXRpbGlzYXRldXIgb3Ugdm90cmUgbW90IGRlIHBhc3NlP1xuUmVuZGV6LXZvdXMgc3VyIGxhIHBhZ2UgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IlbDqXJpZmljYXRpb24gZHUgY29tcHRlIGVuIGNvdXJz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJWb3VzIGF2ZXogc2Fpc2kgdW4gTklQIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFxuXG5WZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJWb3VzIGF2ZXogc2Fpc2kgdW4gbW90IGRlIHBhc3NlIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFxuXG5WZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJWb3VzIGF2ZXogZGVzc2luw6kgdW4gc2Now6ltYSBkZSBkw6l2ZXJyb3VpbGxhZ2UgaW5jb3JyZWN0IMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy5cblxuVmV1aWxsZXogcsOpZXNzYXllciBkYW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBzZWNvbmRlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGxhIHRhYmxldHRlIGRlIGZhw6dvbiBpbmNvcnJlY3RlIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy4gU2kgdm91cyDDqWNob3VleiBlbmNvcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoGZvaXMsIHNhIGNvbmZpZ3VyYXRpb24gZFwndXNpbmUgc2VyYSByw6l0YWJsaWUsIGV0IHRvdXRlcyBsZXMgZG9ubsOpZXMgdXRpbGlzYXRldXIgc2Vyb250IHBlcmR1ZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgbGUgdMOpbMOpcGhvbmUgZGUgZmHDp29uIGluY29ycmVjdGUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBTaSB2b3VzIMOpY2hvdWV6IGVuY29yZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPsKgZm9pcywgc2EgY29uZmlndXJhdGlvbiBkXCd1c2luZSBzZXJhIHLDqXRhYmxpZSwgZXQgdG91dGVzIGxlcyBkb25uw6llcyB1dGlsaXNhdGV1ciBzZXJvbnQgcGVyZHVlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgbGEgdGFibGV0dGUgZGUgZmHDp29uIGluY29ycmVjdGUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy4gU2EgY29uZmlndXJhdGlvbiBkXCd1c2luZSB2YSDDqnRyZSByw6l0YWJsaWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4iVm91cyBhdmV6IHRlbnTDqSBkZSBkw6l2ZXJyb3VpbGxlciBsZSB0w6lsw6lwaG9uZSBkZSBmYcOnb24gaW5jb3JyZWN0ZSDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBTYSBjb25maWd1cmF0aW9uIGRcJ3VzaW5lIHZhIMOqdHJlIHLDqXRhYmxpZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iVm91cyBhdmV6IGRlc3NpbsOpIHVuIHNjaMOpbWEgZGUgZMOpdmVycm91aWxsYWdlIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFNpIHZvdXMgw6ljaG91ZXogZW5jb3JlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBmb2lzLCB2b3VzIGRldnJleiBkw6l2ZXJyb3VpbGxlciB2b3RyZSB0YWJsZXR0ZSDDoCBsXCdhaWRlIGRcJ3VuIGNvbXB0ZSBkZSBtZXNzYWdlcmllIMOpbGVjdHJvbmlxdWUuXG5cbiBWZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iVm91cyBhdmV6IGRlc3NpbsOpIHVuIHNjaMOpbWEgZGUgZMOpdmVycm91aWxsYWdlIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFNpIHZvdXMgw6ljaG91ZXogZW5jb3JlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBmb2lzLCB2b3VzIGRldnJleiBkw6l2ZXJyb3VpbGxlciB2b3RyZSB0w6lsw6lwaG9uZSDDoCBsXCdhaWRlIGRcJ3VuIGNvbXB0ZSBkZSBtZXNzYWdlcmllIMOpbGVjdHJvbmlxdWUuXG5cbiBWZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IlN1cHByaW1lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iTklQIGRlIGNhcnRlIFNJTSBpbmNvcnJlY3QuIFZvdXMgZGV2ZXogbWFpbnRlbmFudCBjb21tdW5pcXVlciBhdmVjIHZvdHJlIGZvdXJuaXNzZXVyIGRlIHNlcnZpY2VzIHBvdXIgZMOpdmVycm91aWxsZXIgdm90cmUgYXBwYXJlaWwuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJOSVAgZGUgY2FydGUgU0lNIGluY29ycmVjdC4gSWwgdm91cyByZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZlLiBBcHLDqHMgY2VsYSwgdm91cyBkZXZyZXogY29tbXVuaXF1ZXIgYXZlYyB2b3RyZSBmb3Vybmlzc2V1ciBkZSBzZXJ2aWNlcyBwb3VyIGTDqXZlcnJvdWlsbGVyIHZvdHJlIGFwcGFyZWlsLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+Ik5JUCBkZSBjYXJ0ZSBTSU0gaW5jb3JyZWN0LiBJbCB2b3VzIHJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmUocykuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJMYSBjYXJ0ZSBTSU0gZXN0IGludXRpbGlzYWJsZS4gQ29tbXVuaXF1ZXogYXZlYyB2b3RyZSBmb3Vybmlzc2V1ciBkZSBzZXJ2aWNlcy4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkNvZGUgUFVLIGRlIGxhIGNhcnRlIFNJTSBpbmNvcnJlY3QuIElsIHZvdXMgcmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2ZSBhdmFudCBxdWUgdm90cmUgY2FydGUgU0lNIGRldmllbm5lIGTDqWZpbml0aXZlbWVudCBpbnV0aWxpc2FibGUuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iQ29kZSBQVUsgZGUgbGEgY2FydGUgU0lNIGluY29ycmVjdC4gSWwgdm91cyByZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZlKHMpIGF2YW50IHF1ZSB2b3RyZSBjYXJ0ZSBTSU0gZGV2aWVubmUgZMOpZmluaXRpdmVtZW50IGludXRpbGlzYWJsZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IkxlIGTDqXZlcnJvdWlsbGFnZSBwYXIgTklQIGRlIGxhIGNhcnRlIFNJTSBhIMOpY2hvdcOpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iTGUgZMOpdmVycm91aWxsYWdlIGRlIGxhIGNhcnRlIFNJTSBwYXIgY29kZSBQVUsgYSDDqWNob3XDqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iQ29kZSBhY2NlcHTDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IkJvdXRvbiBwb3VyIHJldmVuaXIgYXUgdGl0cmUgcHLDqWPDqWRlbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJCb3V0b24gcG91ciBhdHRlaW5kcmUgbGUgdGl0cmUgc3VpdmFudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJCb3V0b24gZGUgcGF1c2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiJCb3V0b24gZGUgbGVjdHVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzA4NDE3OTMyNDgxMDU3NTc4NyI+IkJvdXRvbiBkXCdhcnLDqnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4iQXVjdW4gc2VydmljZSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKaW5kZXggMjUwYTEzNi4uYjkxMGRkNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJTYWlzaXNzZXogbGUgY29kZcKgUElOLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlNhaXNpc3NleiBsYSBjbMOpwqBQVUsgZXQgbGUgbm91dmVhdSBjb2RlwqBQSU4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJDb2RlIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTm91dmVhdSBjb2RlwqBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJTYWlzaXNzZXogbGEgY2zDqSBQVUsgZXQgbGUgbm91dmVhdSBjb2RlIFBJTiBkZSBsYSBjYXJ0ZSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJDbMOpIFBVSyBkZSBsYSBjYXJ0ZSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik5vdXZlYXUgY29kZSBQSU4gZGUgbGEgY2FydGUgU0lNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iQXBwdXlleiBwb3VyIHNhaXNpciBtb3QgcGFzc2UiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJTYWlzaXNzZXogbGUgbW90IGRlIHBhc3NlIHBvdXIgZMOpdmVycm91aWxsZXIgbGUgY2xhdmllci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJTYWlzaXNzZXogbGUgY29kZcKgUElOIHBvdXIgZMOpdmVycm91aWxsZXIgbGUgY2xhdmllci4iPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iQm91dG9uIGRlIHBhdXNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJCb3V0b24gZGUgbGVjdHVyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iQm91dG9uIGRcJ2FycsOqdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJKXCdhaW1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iSmUgblwnYWltZSBwYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJDxZN1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkTDqXZlcnJvdWlsbGV6IGxcJ2FwcGFyZWlsIHBvdXIgY29udGludWVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IkxhbmNlbWVudCBhbm51bMOpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJSZWzDomNoZXogbGUgd2lkZ2V0IFwiPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz5cIiBwb3VyIGxlIHN1cHByaW1lci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iTGUgd2lkZ2V0IFwiPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz5cIiBuZSB2YSBwYXMgw6p0cmUgc3VwcHJpbcOpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iU2Fpc2lyIGxlIGNvZGUgUElOIHNvdWhhaXTDqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJDb25maXJtZXIgbGUgY29kZSBQSU4gc291aGFpdMOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJEw6libG9jYWdlIGRlIGxhIGNhcnRlIFNJTSBlbiBjb3Vyc+KApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IkxlIGNvZGUgUElOIGVzdCBlcnJvbsOpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlZldWlsbGV6IHNhaXNpciB1biBjb2RlIFBJTiBjb21wcmVuYW50IGVudHJlIHF1YXRyZSBldCBodWl0wqBjaGlmZnJlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJMZSBjb2RlIFBVSyBkb2l0IGNvbnRlbmlyIGF1IG1vaW5zIDjCoGNoaWZmcmVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlZldWlsbGV6IHNhaXNpciBkZSBub3V2ZWF1IGxlIGNvZGUgUFVLIGNvcnJlY3QuIERlcyB0ZW50YXRpdmVzIHLDqXDDqXTDqWVzIGTDqXNhY3RpdmVudCBkw6lmaW5pdGl2ZW1lbnQgbGEgY2FydGUgU0lNLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iVm91cyBhdmV6IGRlc3NpbsOpIHVuIHNjaMOpbWEgZGUgZMOpdmVycm91aWxsYWdlIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFNpIHZvdXMgw6ljaG91ZXogZW5jb3JlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBmb2lzLCB2b3VzIGRldnJleiBkw6l2ZXJyb3VpbGxlciB2b3RyZSB0w6lsw6lwaG9uZSDDoCBsXCdhaWRlIGRcJ3VuIGNvbXB0ZSBkZSBtZXNzYWdlcmllIMOpbGVjdHJvbmlxdWUuXG5cbiBWZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IlN1cHByaW1lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iQ29kZSBQSU4gZGUgbGEgY2FydGUgU0lNIGluY29ycmVjdC4gVm91cyBkZXZleiBkw6lzb3JtYWlzIGNvbnRhY3RlciB2b3RyZSBvcMOpcmF0ZXVyIHBvdXIgZMOpdmVycm91aWxsZXIgdm90cmUgYXBwYXJlaWwuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJDb2RlIFBJTiBkZSBsYSBjYXJ0ZSBTSU0gaW5jb3JyZWN0LiBJbCB2b3VzIHJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgdGVudGF0aXZlLiBBcHLDqHMgY2VsYSwgdm91cyBkZXZyZXogY29udGFjdGVyIHZvdHJlIG9ww6lyYXRldXIgcG91ciBkw6l2ZXJyb3VpbGxlciB2b3RyZSBhcHBhcmVpbC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJDb2RlIFBJTiBkZSBsYSBjYXJ0ZSBTSU0gaW5jb3JyZWN0LiBJbCB2b3VzIHJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgdGVudGF0aXZlcy4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IkxhIGNhcnRlIFNJTSBlc3QgaW51dGlsaXNhYmxlLiBWZXVpbGxleiBjb250YWN0ZXIgdm90cmUgb3DDqXJhdGV1ci4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkNsw6kgUFVLIGRlIGxhIGNhcnRlIFNJTSBpbmNvcnJlY3RlLiBJbCB2b3VzIHJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgdGVudGF0aXZlIGF2YW50IHF1ZSB2b3RyZSBjYXJ0ZSBTSU0gbmUgZGV2aWVubmUgZMOpZmluaXRpdmVtZW50IGludXRpbGlzYWJsZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJDbMOpIFBVSyBkZSBsYSBjYXJ0ZSBTSU0gaW5jb3JyZWN0ZS4gSWwgdm91cyByZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoHRlbnRhdGl2ZXMgYXZhbnQgcXVlIHZvdHJlIGNhcnRlIFNJTSBuZSBkZXZpZW5uZSBkw6lmaW5pdGl2ZW1lbnQgaW51dGlsaXNhYmxlLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iw4ljaGVjIGR1IGTDqXZlcnJvdWlsbGFnZSDDoCBsXCdhaWRlIGR1IGNvZGUgUElOIGRlIGxhIGNhcnRlIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IsOJY2hlYyBkdSBkw6l2ZXJyb3VpbGxhZ2Ugw6AgbFwnYWlkZSBkZSBsYSBjbMOpIFBVSyBkZSBsYSBjYXJ0ZSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkNvZGUgYWNjZXB0w6kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iQm91dG9uIHBvdXIgcmV2ZW5pciBhdSB0aXRyZSBwcsOpY8OpZGVudCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IkJvdXRvbiBwb3VyIGF0dGVpbmRyZSBsZSB0aXRyZSBzdWl2YW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IkJvdXRvbiBkZSBwYXVzZSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCmluZGV4IDcxNGQ5ZmIuLjhjOTRlYjMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i4KSq4KS/4KSoIOCkleCli+CkoSDgpLLgpL/gpJbgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJQVUsg4KSU4KSwIOCkqOCkr+CkviDgpKrgpL/gpKgg4KSV4KWL4KShIOCksuCkv+CkluClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIOCkleCli+CkoSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i4KSo4KSv4KS+IOCkquCkv+CkqCDgpJXgpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLgpLjgpL/gpK4gUFVLIOCklOCksCDgpKjgpK/gpL4gUElOIOCkleCli+CkoSDgpLLgpL/gpJbgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IuCkuOCkv+CkriBQVUsg4KSV4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLgpKjgpK/gpL4g4KS44KS/4KSuIFBJTiDgpJXgpYvgpKEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSy4KS/4KSW4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KWN4KSq4KSw4KWN4KS2IOCkleCksOClh+CkgiI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IuCkheCkqOCksuClieCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSy4KS/4KSW4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkquCkv+CkqCDgpLLgpL/gpJbgpYfgpIIiPC9zdHJpbmc+CkBAIC02MCwxNyArNjAsMjQgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4i4KS14KS/4KSc4KWH4KSfIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOCkleCliyDgpLngpJ/gpL4g4KSm4KS/4KSv4KS+IOCkl+Ckr+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLgpIXgpKjgpLLgpYngpJUg4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkteCkv+CkuOCljeCkpOClg+CkpCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i4KS44KWN4KSy4KS+4KSH4KShIOCkheCkqOCksuClieCklS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IuCkquCljeCksOCkpOCkv+CkruCkvuCkqCDgpIXgpKjgpLLgpYngpJUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLgpIbgpJXgpL7gpLAg4KSF4KSo4KSy4KWJ4KSVLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i4KSr4KWH4KS4IOCkheCkqOCksuClieCklS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4i4KSq4KS/4KSoIOCkheCkqOCksuClieCklS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSF4KSo4KSy4KWJ4KSVLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+IuCkquCljeCksOCkpOCkv+CkruCkvuCkqCDgpJXgpY3gpLfgpYfgpKTgpY3gpLAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i4KSG4KSV4KS+4KSwIOCkleCljeCkt+Clh+CkpOCljeCksC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4i4KS44KWN4KSy4KS+4KSH4KShIOCkleCljeCkt+Clh+CkpOCljeCksC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+IuCkquCkv+Ckm+CksuCkviDgpJ/gpY3gpLDgpYjgpJUg4KSs4KSf4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiLgpIXgpJfgpLLgpL4g4KSf4KWN4KSw4KWI4KSVIOCkrOCkn+CkqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IuCkquClieCknOCkvCDgpJXgpLDgpYfgpIIg4KSs4KSf4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLgpJrgpLLgpL7gpI/gpIIg4KSs4KSf4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLgpLDgpYvgpJXgpYfgpIIg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IuCkquCkuOCkguCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IuCkqOCkvuCkquCkuOCkguCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IuCkpuCkv+CksiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IuCknOCkvuCksOClgCDgpLDgpJbgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i4KSy4KWJ4KSo4KWN4oCN4KSaIOCksOCkpuCljeCkpiDgpJXgpLAg4KSm4KS/4KSv4KS+IOCkl+Ckr+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLgpLngpJ/gpL7gpKjgpYcg4KSV4KWHIOCksuCkv+CkjyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDgpJbgpYDgpILgpJrgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOCkleCliyDgpKjgpLngpYDgpIIg4KS54KSf4KS+4KSv4KS+IOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTkyLDEyICs5OSwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgpJXgpYcg4KSy4KS/4KSPIOCkpuCkvuCkj+CkgiDgpLjgpY3igI3gpLLgpL7gpIfgpKEg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4i4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLgpIbgpKrgpL7gpKTgpJXgpL7gpLLgpYDgpKgg4KSV4KWJ4KSyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4KSq4KWN4KSw4KSk4KS/4KSu4KS+4KSoIOCkreClguCksiDgpJfgpI8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IuCkl+CksuCkpCDgpKrgpY3gpLDgpKTgpL/gpK7gpL7gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLgpIbgpJXgpL7gpLAg4KSt4KWC4KSyIOCkl+CkjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4i4KSX4KSy4KSkIOCkhuCkleCkvuCksCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IuCkl+CksuCkpCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4i4KSX4KSy4KSkIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkoSDgpK7gpYfgpIIg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i4KSF4KSq4KSo4KS+IOCkquCljeCksOCkpOCkv+CkruCkvuCkqCDgpIbgpLDgpYfgpJbgpL/gpKQg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLgpIXgpKrgpKjgpL4g4KSG4KSV4KS+4KSwIOCkhuCksOClh+CkluCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiLgpLjgpL/gpK4gUElOIOCkoeCkvuCksuClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iUElOIOCkoeCkvuCksuClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSh4KS+4KSy4KWH4KSCIjwvc3RyaW5nPgpAQCAtMTA1LDMwICsxMTIsNDIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLgpIfgpJrgpY3gpJvgpL/gpKQg4KSq4KS/4KSoIOCkleCli+CkoSDgpKHgpL7gpLLgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4KSH4KSa4KWN4KSb4KS/4KSkIOCkquCkv+CkqCDgpJXgpYvgpKEg4KSV4KWAIOCkquClgeCkt+CljeCkn+CkvyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSF4KSo4KSy4KWJ4KSVIOCkleCksCDgpLDgpLngpL4g4KS54KWI4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i4KSX4KSy4KSkIFBJTiDgpJXgpYvgpKEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4KSQ4KS44KS+IFBJTiDgpLLgpL/gpJbgpYfgpIIsIOCknOCliyA0IOCkuOClhyA4IOCkheCkguCkleCli+CkgiDgpJXgpL4g4KS54KWLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDgpJXgpYvgpKEgOCDgpK/gpL4g4KSF4KSn4KS/4KSVIOCkuOCkguCkluCljeCkr+CkviDgpLXgpL7gpLLgpL4g4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+Ckjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLgpLjgpLngpYAgUFVLIOCkleCli+CkoSDgpKrgpYHgpKg6IOCkoeCkvuCksuClh+Ckgi4g4KSs4KS+4KSwLeCkrOCkvuCksCDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KSo4KWHIOCkuOClhyDgpLjgpL/gpK4g4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkqiDgpLjgpYcg4KSF4KSV4KWN4KS34KSuIOCkueCliyDgpJzgpL7gpI/gpJfgpYAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IuCkquCkv+CkqCDgpJXgpYvgpKEg4KSV4KS+IOCkruCkv+CksuCkvuCkqCDgpKjgpLngpYDgpIIg4KS54KWL4KSk4KS+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4KSs4KS54KWB4KSkIOCkheCkp+Ckv+CklSDgpKrgpY3gpLDgpKTgpL/gpK7gpL7gpKgg4KSq4KWN4KSw4KSv4KS+4KS4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IuCkheCkqOCksuClieCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+Ckjywg4KSF4KSq4KSo4KWHIEdvb2dsZSDgpJbgpL7gpKTgpYcg4KS44KWHIOCkuOCkvuCkh+CkqCDgpIfgpKgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuCkrOCkueClgeCkpCDgpIXgpKfgpL/gpJUg4KSG4KSV4KS+4KSwIOCkquCljeCksOCkr+CkvuCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8sIOCkheCkquCkqOClhyBHb29nbGUg4KSW4KS+4KSk4KWHIOCkuOClhyDgpKrgpY3gpLDgpLXgpYfgpLYg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkqOCkvuCkriAo4KSI4KSu4KWH4KSyKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLgpLjgpL7gpIfgpKgg4KSH4KSoIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4i4KSq4KWN4KSw4KS14KWH4KS2IOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i4KSF4KSu4KS+4KSo4KWN4KSvIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKjgpL7gpK4g4KSv4KS+IOCkquCkvuCkuOCkteCksOCljeCkoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4KSF4KSq4KSo4KS+IOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKjgpL7gpK4g4KSv4KS+IOCkquCkvuCkuOCkteCksOCljeCkoSDgpK3gpYLgpLIg4KSX4KSPP1xuICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDgpKrgpLAg4KSc4KS+4KSP4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IuCkluCkvuCkpOClhyDgpJXgpYAg4KSc4KS+4KSC4KSaIOCkleClgCDgpJzgpL4g4KSw4KS54KWAIOCkueCliOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4KSG4KSqIOCkheCkquCkqOCkviBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCksuCkv+CkliDgpJrgpYHgpJXgpYcg4KS54KWI4KSCLiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkoSDgpK7gpYfgpIIg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLgpIbgpKog4KSF4KSq4KSo4KS+IOCkquCkvuCkuOCkteCksOCljeCkoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSy4KS/4KSWIOCkmuClgeCkleClhyDgpLngpYjgpIIuIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KShIOCkruClh+CkgiDgpKrgpYHgpKg6IOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCkhuCkquCkqOClhyDgpIXgpKrgpKjgpL4g4KSF4KSo4KSy4KWJ4KSVIOCkquCljeCksOCkpOCkv+CkruCkvuCkqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSG4KSw4KWH4KSW4KS/4KSkIOCkleCkv+Ckr+CkviDgpLngpYguIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KShIOCkruClh+CkgiDgpKrgpYHgpKg6IOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCkhuCkquCkqOClhyDgpIXgpKrgpKjgpL4g4KSF4KSo4KSy4KWJ4KSVIOCkhuCkleCkvuCksCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSG4KSw4KWH4KSW4KS/4KSkIOCkleCkv+Ckr+CkviDgpLngpYguIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KShIOCkruClh+CkgiDgpKrgpYHgpKg6IOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i4KSG4KSqIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkrOCkvuCksCDgpJfgpLLgpKQg4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSwIOCkmuClgeCkleClhyDgpLngpYjgpIIuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkn+Clh+CkrOCksuClh+CknyDgpKvgpLzgpYjgpJXgpY3gpJ/gpLDgpYAg4KSh4KS/4KSr4KS84KWJ4KSy4KWN4KSfIOCkquCksCDgpLDgpYDgpLjgpYfgpJ8g4KS54KWLIOCknOCkvuCkj+Ckl+CkviDgpJTgpLAg4KS44KSt4KWAIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KSW4KWLIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i4KSG4KSqIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkrOCkvuCksCDgpJfgpLLgpKQg4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSwIOCkmuClgeCkleClhyDgpLngpYjgpIIuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkq+CkvOCli+CkqCDgpKvgpLzgpYjgpJXgpY3gpJ/gpLDgpYAg4KSh4KS/4KSr4KS84KWJ4KSy4KWN4KSfIOCkquCksCDgpLDgpYDgpLjgpYfgpJ8g4KS54KWLIOCknOCkvuCkj+Ckl+CkviDgpJTgpLAg4KS44KSt4KWAIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KSW4KWLIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IuCkhuCkqiDgpJ/gpYfgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkheCkqOCksuClieCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLAg4KSa4KWB4KSV4KWHIOCkueCliOCkgi4g4KSf4KWH4KSs4KSy4KWH4KSfIOCkheCkrCDgpKvgpLzgpYjgpJXgpY3igI3gpJ/gpLDgpYAg4KSh4KS/4KSr4KS84KWJ4KSy4KWN4oCN4KSfIOCkquCksCDgpLDgpYDgpLjgpYfgpJ8g4KS54KWLIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiLgpIbgpKog4KSr4KS84KWL4KSoIOCkleCliyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkrOCkvuCksCDgpJfgpLLgpKQg4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSwIOCkmuClgeCkleClhyDgpLngpYjgpIIuIOCkq+CkvOCli+CkqCDgpIXgpKwg4KSr4KS84KWI4KSV4KWN4KSf4KSw4KWAIOCkoeCkv+Ckq+CkvOClieCksuCljeCknyDgpKrgpLAg4KSw4KWA4KS44KWH4KSfIOCkueCliyDgpJzgpL7gpI/gpJfgpL4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuCkhuCkquCkqOClhyDgpIXgpKrgpKjgpYcg4KSF4KSo4KSy4KWJ4KSVIOCkquCljeCksOCkpOCkv+CkruCkvuCkqCDgpJXgpYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkhuCksOClh+CkluCkv+CkpCDgpJXgpL/gpK/gpL4g4KS54KWILiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpJTgpLAg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCli+CkgiDgpJXgpYcg4KSs4KS+4KSmLCDgpIbgpKrgpLjgpYcg4KSF4KSq4KSo4KWHIOCkn+Clh+CkrOCksuClh+CknyDgpJXgpYsg4KSV4KS/4KS44KWAIOCkiOCkruClh+CksiDgpJbgpL7gpKTgpYcg4KSV4KWHIOCkieCkquCkr+Cli+CklyDgpLjgpYcg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCkueCkviDgpJzgpL7gpI/gpJfgpL4uXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpILgpKEg4KSu4KWH4KSCIOCkquClgeCkqDog4KSq4KWN4KSw4KSv4KS+4KS4IOCkleCksOClh+Ckgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuCkhuCkquCkqOClhyDgpIXgpKrgpKjgpYcg4KSF4KSo4KSy4KWJ4KSVIOCkquCljeCksOCkpOCkv+CkruCkvuCkqCDgpJXgpYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkhuCksOClh+CkluCkv+CkpCDgpJXgpL/gpK/gpL4g4KS54KWILiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpJTgpLAg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCli+CkgiDgpJXgpYcg4KSs4KS+4KSmLCDgpIbgpKrgpLjgpYcg4KSF4KSq4KSo4KWHIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSV4KS/4KS44KWAIOCkiOCkruClh+CksiDgpJbgpL7gpKTgpYcg4KSV4KS+IOCkieCkquCkr+Cli+CklyDgpJXgpLDgpJXgpYcg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkleCkueCkviDgpJzgpL7gpI/gpJfgpL4uXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpILgpKEg4KSu4KWH4KSCIOCkquClgeCkqDog4KSq4KWN4KSw4KSv4KS+4KS4IOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4KSG4KSq4KSo4KWHIOCkheCkquCkqOClhyDgpIXgpKjgpLLgpYngpJUg4KSG4KSV4KS+4KSwIOCkleCliyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSG4KSw4KWH4KSW4KS/4KSkIOCkleCkv+Ckr+CkviDgpLngpYguIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkhuCkquCkuOClhyDgpIXgpKrgpKjgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpJXgpL/gpLjgpYAg4KSI4KSu4KWH4KSyIOCkluCkvuCkpOClhyDgpJXgpYcg4KSJ4KSq4KSv4KWL4KSXIOCkuOClhyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KS54KS+IOCknOCkvuCkj+Ckl+Ckvi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkoSDgpK7gpYfgpIIg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4KSG4KSq4KSo4KWHIOCkheCkquCkqOClhyDgpIXgpKjgpLLgpYngpJUg4KSG4KSV4KS+4KSwIOCkleCliyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSG4KSw4KWH4KSW4KS/4KSkIOCkleCkv+Ckr+CkviDgpLngpYguIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkhuCkquCkuOClhyDgpIXgpKrgpKjgpYcg4KSr4KS84KWL4KSoIOCkleCliyDgpJXgpL/gpLjgpYAg4KSI4KSu4KWH4KSyIOCkluCkvuCkpOClhyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkleClhyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KS54KS+IOCknOCkvuCkj+Ckl+Ckvi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkoSDgpK7gpYfgpIIg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IuCkqOCkv+CkleCkvuCksuClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i4KSX4KSy4KSkIOCkuOCkv+CkriBQSU4g4KSV4KWL4KShIOCkheCkquCkqOClhyDgpIngpKrgpJXgpLDgpKMg4KSV4KWLIOCkheCkqOCksuClieCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpIXgpKwg4KSG4KSq4KSV4KWLIOCkheCkquCkqOClhyDgpLXgpL7gpLngpJUg4KS44KWHIOCkuOCkguCkquCksOCljeCklSDgpJXgpLDgpKjgpL4g4KS54KWL4KSX4KS+LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4i4KSX4KSy4KSkIOCkuOCkv+CkriBQSU4g4KSV4KWL4KShLCDgpIXgpKrgpKjgpYcg4KSJ4KSq4KSV4KSw4KSjIOCkleCliyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSF4KSq4KSo4KWHIOCkteCkvuCkueCklSDgpLjgpYcg4KS44KSC4KSq4KSw4KWN4KSVIOCkleCksOCkqOClhyDgpLjgpYcg4KSq4KS54KSy4KWHIOCkhuCkquCkleClhyDgpKrgpL7gpLggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCljeCksOCkr+CkvuCkuCDgpLbgpYfgpLcg4KS54KWILiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IuCkl+CksuCkpCDgpLjgpL/gpK4gUElOIOCkleCli+CkoSwg4KSG4KSq4KSV4KWHIOCkquCkvuCkuCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSq4KWN4KSw4KSv4KS+4KS4IOCktuClh+CktyDgpLngpYjgpIIuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiLgpLjgpL/gpK4g4KSF4KSo4KWB4KSq4KSv4KWL4KSX4KWAIOCkueCliC4g4KSF4KSq4KSo4KWHIOCkteCkvuCkueCklSDgpLjgpYcg4KS44KSC4KSq4KSw4KWN4KSVIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IuCkl+CksuCkpCDgpLjgpL/gpK4gUFVLIOCkleCli+CkoSwg4KS44KS/4KSuIOCkleClhyDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSqIOCkuOClhyDgpIXgpKjgpYHgpKrgpK/gpYvgpJfgpYAg4KS54KWLIOCknOCkvuCkqOClhyDgpLjgpYcg4KSq4KS54KSy4KWHIOCkhuCkquCkleClhyDgpKrgpL7gpLggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCljeCksOCkr+CkvuCkuCDgpLbgpYfgpLcg4KS54KWILiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IuCkl+CksuCkpCDgpLjgpL/gpK4gUFVLIOCkleCli+CkoSwg4KS44KS/4KSuIOCkleClhyDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSqIOCkuOClhyDgpIXgpKjgpYHgpKrgpK/gpYvgpJfgpYAg4KS54KWLIOCknOCkvuCkqOClhyDgpLjgpYcg4KSq4KS54KSy4KWHIOCkhuCkquCkleClhyDgpKrgpL7gpLggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCljeCksOCkr+CkvuCkuCDgpLbgpYfgpLcg4KS54KWI4KSCLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4i4KS44KS/4KSuIFBJTiDgpJXgpYAg4KSV4KS+4KSw4KWN4KSv4KS14KS+4KS54KWAIOCkteCkv+Ckq+CksiDgpLDgpLngpYAhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiLgpLjgpL/gpK4gUFVLIOCkleClgCDgpJXgpL7gpLDgpY3gpK/gpLXgpL7gpLngpYAg4KS14KS/4KSr4KSyIOCksOCkueClgCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i4KSV4KWL4KShIOCkuOCljeCkteClgOCkleCkvuCksCDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+ISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IuCkquCkv+Ckm+CksuCkviDgpJ/gpY3gpLDgpYjgpJUg4KSs4KSf4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i4KSF4KSX4KSy4KS+IOCkn+CljeCksOCliOCklSDgpKzgpJ/gpKgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i4KSq4KWJ4KSc4KS8IOCkleCksOClh+CkgiDgpKzgpJ/gpKgiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAppbmRleCA3MGU2MzA1Li4zODQzNTQ5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlVuZXNpdGUgUElOIGvDtGQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJVbmVzaXRlIFBVSyBpIG5vdmkgUElOIGvDtGQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyBrw7RkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJOb3ZpIFBJTiBrw7RkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iVW5lc2l0ZSBQVUsgaSBub3ZpIFBJTiBrw7RkIFNJTSBrYXJ0aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJQVUsga8O0ZCBTSU0ga2FydGljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTm92aSBQSU4ga8O0ZCBTSU0ga2FydGljZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IkRvZGlybml0ZSB6YSB0aXBrYW5qZSB6YXBvcmtlIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iVW5lc2l0ZSB6YXBvcmt1IHphIG90a2xqdcSNYXZhbmplIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iVW5lc2l0ZSBQSU4gemEgb3RrbGp1xI1hdmFuamUiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iR3VtYiBQYXV6YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iR3VtYiBSZXByb2R1a2NpamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+Ikd1bWIgWmF1c3RhdmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iUGFsYWMgZ29yZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IlBhbGFjIGRvbGplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iU3JjZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+Ik90a2xqdcSNYWp0ZSB6YSBuYXN0YXZhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IlBva3JldGFuamUgamUgb3RrYXphbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iSXNwdXN0aXRlIHdpZGdldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBkYSBiaXN0ZSBnYSBpemJyaXNhbGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+IldpZGdldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBuZcSHZSBzZSBpemJyaXNhdGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJVcGnFoWl0ZSDFvmVsamVuaSBQSU4ga8O0ZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJQb3R2cmRpdGUgxb5lbGplbmkgUElOIGvDtGQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Ik90a2xqdcSNYXZhbmplIFNJTSBrYXJ0aWNl4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iTmV0b8SNYW4gUElOIGvDtGQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iVW5lc2l0ZSBQSU4ga29qaSBpbWEgb2QgNCBkbyA4IGJyb2pldmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIGvDtGQgdHJlYmEgaW1hdGkgOCBicm9qZXZhIGlsaSB2acWhZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJQb25vdm8gdW5lc2l0ZSBpc3ByYXZhbiBQVUsga8O0ZC4gUG9ub3ZsamVuaSBwb2t1xaFhamkgdHJham5vIMSHZSBvbmVtb2d1xIdpdGkgU0lNLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iTmV0b8SNbm8gc3RlIGlzY3J0YWxpIG9icmF6YWMgemEgb3RrbGp1xI1hdmFuamUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gcHV0YS4gTmFrb24gam/FoSBvdm9saWtvIG5ldXNwamXFoW5paCBwb2t1xaFhamE6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1vcmF0IMSHZXRlIG90a2xqdcSNYXRpIHRlbGVmb24gcG9tb8SHdSByYcSNdW5hIGUtcG/FoXRlLlxuXG4gUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJVa2xvbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Ik5ldG/EjWFuIFBJTiBrw7RkIFNJTSBrYXJ0aWNlOyBzYWRhIG1vcmF0ZSBrb250YWt0aXJhdGkgc3ZvZyBtb2JpbG5vZyBvcGVyYXRlcmEgZGEgYmkgb3RrbGp1xI1hbyB2YcWhIHVyZcSRYWouIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJOZXRvxI1hbiBQSU4ga8O0ZCBTSU0ga2FydGljZTsgaW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9rdcWhYWogcHJpamUgbmVnbyDFoXRvIGJ1ZGV0ZSBtb3JhbGkga29udGFrdGlyYXRpIHN2b2cgbW9iaWxub2cgb3BlcmF0ZXJhIGRhIGJpIG90a2xqdcSNYW8gdmHFoSB1cmXEkWFqLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+Ik5ldG/EjWFuIFBJTiBrw7RkIFNJTSBrYXJ0aWNlOyBpbWF0ZSBqb8WhIG92b2xpa28gcHJlb3N0YWxpaCBwb2t1xaFhamE6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSBrYXJ0aWNhIG5pamUgdXBvdHJlYmxqaXZhLiBLb250YWt0aXJhanRlIHN2b2cgbW9iaWxub2cgb3BlcmF0ZXJhLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iTmV0b8SNYW4gUFVLIGvDtGQgU0lNIGthcnRpY2U7IGltYXRlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBva3XFoWFqIHByaWplIG5lZ28gxaF0byBTSU0ga2FydGljYSBwb3N0YW5lIHRyYWpubyBuZXVwb3RyZWJsaml2YS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJOZXRvxI1hbiBQVUsga8O0ZCBTSU0ga2FydGljZTsgaW1hdGUgam/FoSBuZWtvbGlrbyBwcmVvc3RhbGloIHBva3XFoWFqYSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+KSBwcmlqZSBuZWdvIMWhdG8gU0lNIGthcnRpY2EgcG9zdGFuZSB0cmFqbm8gbmV1cG90cmVibGppdmEuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJPcGVyYWNpamEgUElOLWEgU0lNIGthcnRpY2UgbmlqZSB1c3BqZWxhISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iT3BlcmFjaWphIFBVSy1hIFNJTSBrYXJ0aWNlIG5pamUgdXNwamVsYSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iS8O0ZCBqZSBwcmlodmHEh2VuISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+Ikd1bWIgUHJldGhvZG5pIHphcGlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iR3VtYiBTbGplZGXEh2kgemFwaXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iR3VtYiBQYXV6YSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCmluZGV4IDYxMTYwMmUuLjBmMzIwMTkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iw41yamEgYmUgYSBQSU4ga8OzZG90Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iw41yamEgYmUgYSBQVUsga8OzZG90LCBtYWpkIGF6IMO6aiBQSU4ga8OzZG90Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsga8OzZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iw5pqIFBJTiBrw7NkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iw41yamEgYmUgYSBTSU0ga8OhcnR5YSBQVUsga8OzZGrDoXQsIG1hamQgYXogw7pqIFBJTiBrw7Nkb3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTSBrw6FydHlhIFBVSyBrw7NkamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+IsOaaiBQSU4ga8OzZCBhIFNJTSBrw6FydHnDoWhveiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IsOJcmludHNlbiBqZWxzesOzIG1lZ2Fkw6Fzw6Fob3oiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJBIGZlbG9sZMOhc2hveiDDrXJqYSBiZSBhIGplbHN6w7N0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iRmVsb2xkw6FzaG96IMOtcmphIGJlIGEgUElOIGvDs2RvdCI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJTesO8bmV0IGdvbWIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IkxlasOhdHN6w6FzIGdvbWIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+Ikxlw6FsbMOtdMOhcyBnb21iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IlRldHN6aWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJOZW0gdGV0c3ppayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IlN6w612Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iQSBmb2x5dGF0w6FzaG96IG9sZGphIGZlbCBhIGJpbGxlbnR5xbF6w6FyYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJJbmTDrXTDoXMgdMO2csO2bHZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IkVuZ2VkamUgZWwgYSh6KSA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB0w7ZybMOpc8OpaGV6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiJBKHopIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG5lbSBsZXN6IHTDtnLDtmx2ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkvDrXbDoW50IFBJTiBrw7NkIG1lZ2Fkw6FzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJLw612w6FudCBQSU4ga8OzZCBtZWdlcsWRc8OtdMOpc2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTSBrw6FydHlhIGZlbG9sZMOhc2EuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJIZWx5dGVsZW4gUElOIGvDs2QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iNOKAkzggc3rDoW1qZWd5xbEgUElOIGvDs2RvdCDDrXJqb24gYmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iQSBQVUsga8OzZCBsZWdhbMOhYmIgIDggc3rDoW1qZWd5YsWRbCBrZWxsLCBob2d5IMOhbGxqb24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iQWRqYSBtZWcgw7pqcmEgYSBoZWx5ZXMgUFVLIGvDs2RvdC4gQXogaXNtw6l0ZWx0IHByw7Niw6Fsa296w6Fzc2FsIHbDqWdsZWdlc2VuIGxldGlsdGphIGEgU0lNIGvDoXJ0ecOhdC4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGFsa2Fsb21tYWwgaGVseXRlbGVuw7xsIHJhanpvbHRhIGxlIGEgZmVsb2xkw6FzaSBtaW50w6F0LiBUb3bDoWJiaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzaWtlcnRlbGVuIGvDrXPDqXJsZXQgdXTDoW4gZWd5IGUtbWFpbCBmacOzayBoYXN6bsOhbGF0w6F2YWwga2VsbCBmZWxvbGRhbmlhIGEgdGVsZWZvbmrDoXQuXG5cbiBLw6lyasO8aywgcHLDs2LDoWxqYSDDumpyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBtw6Fzb2RwZXJjIG3Dumx2YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJFbHTDoXZvbMOtdMOhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iSGVseXRlbGVuIFBJTiBrw7NkIGEgU0lNIGvDoXJ0ecOhaG96OyB2ZWd5ZSBmZWwgYSBrYXBjc29sYXRvdCBzem9sZ8OhbHRhdMOzasOhdmFsIGF6IGVzemvDtnogZmVsb2xkw6Fzw6Fob3ouIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJIZWx5dGVsZW4gUElOIGvDs2QgYSBTSU0ga8OhcnR5w6Fob3o7IG3DqWcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHByw7Niw6Fsa296w6FzYSB2YW4sIG1pZWzFkXR0IGZlbCBrZWxsZW5lIHZlbm5pZSBhIGthcGNzb2xhdG90IHN6b2xnw6FsdGF0w7Nqw6F2YWwgYXogZXN6a8O2eiBmZWxvbGTDoXPDoWhvei4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJIZWx5dGVsZW4gUElOIGvDs2QgYSBTSU0ga8OhcnR5w6Fob3o7IG3DqWcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHByw7Niw6Fsa296w6FzYSB2YW4uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJBIFNJTSBrw6FydHlhIGhhc3puw6FsaGF0YXRsYW4uIFZlZ3llIGZlbCBhIGthcGNzb2xhdG90IHN6b2xnw6FsdGF0w7Nqw6F2YWwuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJIZWx5dGVsZW4gUFVLIGvDs2QgYSBTSU0ga8OhcnR5w6Fob3o7IG3DqWcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHByw7Niw6Fsa296w6FzYSB2YW4sIG1pZWzFkXR0IGEgU0lNIGvDoXJ0eWEgdsOpZ2xlZyBoYXN6bsOhbGhhdGF0bGFuIGxlc3ouIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iSGVseXRlbGVuIFBVSyBrw7NkIGEgU0lNIGvDoXJ0ecOhaG96OyBtw6lnIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwcsOzYsOhbGtvesOhc2EgdmFuLCBtaWVsxZF0dCBhIFNJTSBrw6FydHlhIHbDqWdsZWcgaGFzem7DoWxoYXRhdGxhbiBsZXN6LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iQSBTSU0ga8OhcnR5YSBQSU4tbcWxdmVsZXRlIHNpa2VydGVsZW4hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJBIFNJTSBrw6FydHlhIFBVSy1txbF2ZWxldGUgc2lrZXJ0ZWxlbiEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iS8OzZCBlbGZvZ2FkdmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iRWzFkXrFkSBzesOhbSBnb21iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iS8O2dmV0a2V6xZEgc3rDoW0gZ29tYiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJTesO8bmV0IGdvbWIiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODc5MjAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLVhNW41oLVv9aE1aHVo9aA1aXWhCBQSU4g1a/VuNWk1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLVhNW41oLVv9aE1aHVo9aA1aXWhCBTSU0gUFVLLdWoINaHINW21bjWgCBQSU4g1a/VuNWk1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTSBQVUsg1a/VuNWk1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+ItWG1bjWgCBTSU0gUElOINWv1bjVpNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i1YDVutWl1oRgINWj1aHVstW/1bbVodWi1aHVvNWoINW01bjWgtW/1oTVodWj1oDVpdWs1bjWgiDVsNWh1bTVodaAIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i1YTVuNaC1b/WhNWh1aPWgNWl1oQg1aPVodWy1b/VttWh1aLVodW81agg1aHVutWh1a/VuNWy1brVtNWh1bYg1bDVodW01aHWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+ItWE1bjWgtW/1oTVodWj1oDVpdaEIFBJTi3VqCDVodW61aHVr9W41bLVutW01aHVtiDVsNWh1bTVodaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i1Y3VrdWh1awgUElOINWu1aHVrtWv1aHVo9Wr1oA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+ItSx1brVodWv1bjVstW61bTVodW2INWw1aHVtNWh1oAg1b3VpdWy1bTVpdaEINWR1aHVttWvLCDVodW61aEgMDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i1LHVvNWh1b7VpdWs1aHVo9W41oLVtdW2INS01aXVtNaE1bjVviDVodW61aHVr9W41bLVutW01aHVtiDWg9W41oDVsdWl1oDVqCDVo9Wl1oDVodWm1aHVttaB1b7VodWuINWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+ItS81avWgdaE1aHVvtW41oDVvtWh1a4g1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+ItS81avWgdaE1aHVvtW41oDVuNaC1bQsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sb3dfYmF0dGVyeSIgbXNnaWQ9IjgxNDM4MDgwMTg3MTkxNzM4NTkiPiLVhNWr1aHWgdaA1aXWhCDVsdWl1oAg1azVq9aB1oTVodW+1bjWgNWr1bnVqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+ItSx1brVodWv1bjVstW61aXVrNW41oIg1bDVodW01aHWgCDVvdWl1bLVtNWl1oQg1ZHVodW21a/VqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+ItWR1aHVttaB1agg1a/VuNWy1brVvtWh1a4g1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4iU0lNINaE1aHWgNW/INW51a/VoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiLUs9aA1aHVvdWh1azVq9Wv1bjWgtW0IFNJTSDWhNWh1oDVvyDVudWv1aE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiLVgNWl1bzVodWt1bjVvdWrINW01aXVuyBTSU0g1oTVodaA1b8g1bnVr9WhOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiLUttWl1b/VpdWy1aXWhCBTSU0g1oTVodaA1b/VqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJTSU0g1oTVodaA1b/VqCDVotWh1oHVodWv1aHVtdW41oLVtCDVpyDVr9Wh1bQg1bnVqyDVr9Wh1oDVuNWyINWv1aHWgNWk1aHWgdW+1aXVrDog1YTVv9aB1oDVpdaEIFNJTSDWhNWh1oDVvzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4i1LHVttW61avVv9Wh1bYgU0lNINaE1aHWgNW/OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+ItWB1aXWgCBTSU0g1oTVodaA1b/VqCDVqNW21aTVtNWr1bfVvyDVr9Wh1b3VpdaB1b7VpdWsINWnOlxu1L/VodW61b7VpdaEINWx1aXWgCDVotW71bvVodW11avVtiDVrtWh1bzVodW11bjWgtWp1bXVodW2INW01aHVv9Wh1a/VodaA1aHWgNWrINWw1aXVvyDVttW41oAgU0lNINaE1aHWgNW/INWx1aXVvNaEINWi1aXWgNWl1azVuNaCINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IlNJTSDWhNWh1oDVv9WoINWv1bjVstW61b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4iU0lNINaE1aHWgNW/1aggUFVLLdW41b4g1a/VuNWy1brVvtWh1a4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJTSU0g1oTVodaA1b/VqCDVodW61aHVr9W41bLVutW+1bjWgtW0INWnLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiDVjtWr1bvVpdWpICUyJGQgb2YgJTMkZDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i1LHVvtWl1azVodaB1bbVpdWsINW+1avVu9Wl1ak6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLUtNWh1b/VodaA1a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+ItSx1brVodWv1bjVstW61bTVodW2INW/1aHWgNWh1a7WhNW2INWo1bbVpNWs1aHVtdW21b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+ItSx1brVodWv1bjVstW61bTVodW2INW/1aHWgNWh1a7WhNWoINWl1b8g1acg1a7VodWs1b7VodWuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+INW+1avVu9Wl1ak6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+ItWV1aPVv9W+1bjVstWrINWo1bbVv9aA1avVuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+ItS/1aHWgNWj1aHVvtWr1bPVodWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4i1ZbVuNW/1bjVrdaB1avVryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiLVhNWl1aTVq9WhINWv1aHWgNWj1aHVvtW41oDVuNaC1bTVttWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+ItWO1avVu9Wl1anVttWl1oDVqyDVvtWl1oDVodWk1aHVvdWh1b7VuNaA1bjWgtW01agg1bTVpdWv1bbVodaA1a/VpdWsINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+ItWO1avVu9Wl1anVqyDVvtWl1oDVodWk1aHVvdWh1b7VuNaA1bjWgtW01bYg1aHVvtWh1oDVv9W+1aXWgToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+ItWO1avVu9Wl1akgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4t1agg1bvVttW71b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+ItS41bbVpNWs1aHVtdW21aXVrCDVodW61aHVr9W41bLVutW01aHVtiDVv9Wh1oDVodWu1bjWgtWp1bXVuNaC1bbVqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiLUt9W71asg1aHVutWh1a/VuNWy1brVuNaC1bQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLVjdWt1aXVtNWh1bXVuNW+INWh1brVodWv1bjVstW61bjWgtW0OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i1LTVpdW01oTVuNW+INWh1brVodWv1bjVstW61bjWgtW0OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQaW4t1bYg1aHVutWh1a/VuNWy1brVvtWh1a4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i1LPVodWy1b/VttWh1aLVodW81asg1aHVutWh1a/VuNWy1brVuNaC1bQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i1Y3VrdWl1bTVodW11asg1b/VodaA1aHVrtaEOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiLVjdWh1bDVpdaB1bTVodW2INW/1aHWgNWh1a7WhDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+ItWG1aHVrdW41oDVpCDVsNWl1b/VodWj1a7VqyDVr9W41bPVodWv1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzA3MzkyODMwMDQ0NDkwOTMyMCI+ItWA1aHVu9W41oDVpCDVsNWl1b/VodWj1a7VqyDVr9W41bPVodWv1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLUtNWh1aTVodaA1asg1a/VuNWz1aHVryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i1YbVvtWh1aPVodaA1a/VtNWh1bYg1a/VuNWz1aHVryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i1L/VodW21aPVqyDVr9W41bPVodWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+ItS81aHVvtW2INWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4i1LzVodW+1agg1bnVpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+ItWN1avWgNW/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4i1YfVodaA1bjWgtW21aHVr9Wl1azVuNaCINWw1aHVtNWh1oAg1aHVutWh1a/VuNWy1brVpdaEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i1LPVuNaA1a7VodaA1a/VuNaC1bTVqCDVudWl1bLVodaA1a/VvtWl1oEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g1b7Vq9W71aXVqdWoINW71bbVu9Wl1azVuNaCINWw1aHVtNWh1oAg1aLVodaBINWp1bjVstWl1oQg1aHVtdW2INWh1bXVvdW/1aXVsjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g1b7Vq9W71aXVqdWoINW51asg1bvVttW71b7VqzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4i1YnVpdWy1aHWgNWv1aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiLVi9W21bvVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLUv9Wh1b/VodaA1b7VodWuINWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4i1YzVpdWq1avVtNWrINaD1bjWg9W41a3VuNaC1bQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+ItWE1bjWgtW/1oQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+ItSx1brVodWv1bjVstW61aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLVltW41b/VuNWt1oHVq9WvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+ItS81bjWgtW8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+ItWB1aHVtdW21agg1bTVq9Wh1oHVttWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+ItWI1oDVuNW21aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLVjdWh1bDVpdaB1oDVpdaEINW+1aXWgNaHIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3VqyDVsNWh1bTVodaAOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+ItWN1aHVsNWl1oHWgNWl1oQg1oHVodWuIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3VqyDVsNWh1bTVodaAOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+ItWN1aHVsNWl1oHWgNWl1oQg1bHVodWtYCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t1asg1bDVodW01aHWgDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4i1Y3VodWw1aXWgdaA1aXWhCDVodW7YCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t1asg1bDVodW01aHWgDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+ItWG1aXWgNWv1aHVtdWr1b0g1oXVo9W/1b7VuNWy1aggPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i1LHWgNW/1aHVr9Wh1oDVoyDVq9aA1aHVvtWr1bPVodWv1asg1bDVpdW81aHVrdW41b3VodWm1aHVttWjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i1YTVuNW81aHWgdWl1awg1aXVtCDVvdWt1aXVtNWh1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+ItWN1a3VodWsINW91a3VpdW01aEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiLVjdWt1aHVrCDVo9Wh1bLVv9W21aHVotWh1bwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4i1Y3VrdWh1awgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiLVk9W41oDVsdWl1oQg1a/WgNWv1avVtiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g1b7VodW11oDVr9W11aHVttWr1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLVgNWh1b7VodaE1aXWhCDVsdWl1oAg1b3VrdWl1bTVodW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4i1YTVuNaC1b/WhNWh1aPWgNWl1oQgU0lNLdWrIFBJTi3VqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4i1YTVuNaC1b/WhNWh1aPWgNWl1oQgUElOLdWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+ItWE1bjWgtW/1oTVodWj1oDVpdaEINWj1aHVstW/1bbVodWi1aHVvNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNLdWoINWh1bXVvSDVutWh1bDVq9W2INWh1bbVu9Wh1b/VvtWh1a4g1ac6INWE1bjWgtW/1oTVodWj1oDVpdaEIFBVSyDVr9W41aTVqCDVt9Wh1oDVuNaC1bbVodWv1aXVrNW41oIg1bDVodW01aHWgDog1YTVodW21oDVodW01aHVvdW21aXWgNWrINWw1aHVtNWh1oAg1a/VodW61b7VpdaEINaF1brVpdaA1aHVv9W41oDVqyDVsNWl1b86Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+ItWE1bjWgtW/1oTVodWj1oDVpdaEINaB1aHVttWv1aHVrNWrIFBJTiDVrtWh1a7Vr9Wh1aPVq9aA1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i1YDVodW91b/VodW/1aXWhCDWgdWh1bbVr9Wh1azVqyBQSU4g1a7VodWu1a/VodWj1avWgNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiLUsdW61aHVr9W41bLVutW41oLVtCDVpyBTSU0g1oTVodaA1b/VqCAuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLVhNW41oLVv9aE1aHVo9aA1aXWhMKgUElOLCDVuNaA1aggNC3Vq9aBIDgg1anVq9W+INWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDVr9W41aTVqCDVutWl1b/WhCDVpyDVrNWr1bbVqyA4INWv1aHVtCDVodW+1aXVrNWrINWp1avVvjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLVjtWl1oDVodW01bjWgtW/1oTVodWj1oDVpdaEINWz1avVt9W/IFBVSyDVrtWh1a7Vr9Wh1aPVq9aA1ag6INS/1oDVr9W21b7VuNWyINaD1bjWgNWx1aXWgNWoINWo1bbVpNW01avVt9W/INWv1a/VodW91aXWgdW21aXVtiBTSU0g1oTVodaA1b/VqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOINWu1aHVrtWv1aHVo9aA1aXWgNWoINW51aXVtiDVsNWh1bTVqNW21a/VttW41oLVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+ItWJ1aHWg9Wr1oEg1bfVodW/INW91a3VpdW01aHVtdWrINaD1bjWgNWx1aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLUsdW61aHVr9W41bLVutWl1azVuNaCINWw1aHVtNWh1oBgINW01bjWgtW/1oQg1aPVuNaA1a7VpdaEINWx1aXWgCBHb29nbGUg1bDVodW31b7VuNW+OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i1ZXVo9W/1aHVttW41oLVtiAo1afVrNaD1bjVvdW/KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i1LPVodWy1b/VttWh1aLVodW81agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+ItWE1bjWgtW/1oQg1aPVuNaA1a7VpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLVjdWt1aHVrCDWhdWj1b/VodW21bjWgtW2INWv1aHVtCDVo9Wh1bLVv9W21aHVotWh1bw6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+ItWE1bjVvNWh1oHVpdWe1awg1aXWhCDVsdWl1oAg1oXVo9W/1aHVttW41oLVttWoINWv1aHVtCDVo9Wh1bLVv9W21aHVotWh1bzVqDpcbtSx1bXWgdWl1azVpdaEICI8Yj4iZ29vZ2xlLmNvbSAvYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiI6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i1YDVodW31avVvtWoINW91b/VuNaC1aPVvtW41oLVtCDVpy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i1LTVuNaC1oTCoDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INWh1bbVo9Wh1bQg1b3VrdWh1awg1aXWhCDVtNW41oLVv9aE1aHVo9aA1aXVrCDVsdWl1oAgUElOLdWoOiBcblxu1ZPVuNaA1bHVpdaEINWv1oDVr9Wr1bYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g1b7VodW11oDVr9W11aHVttWr1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItS01bjWgtaEINW91a3VodWsINWl1oQg1bTVuNaC1b/WhNWh1aPWgNWl1awg1bHVpdaAINWj1aHVstW/1bbVodWi1aHVvNWoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INWh1bbVo9Wh1bQ6IFxuXG7Vk9W41oDVsdWl1oQg1a/WgNWv1avVtiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDVvtWh1bXWgNWv1bXVodW21avWgToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i1LTVuNaC1oTCoDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INWh1bbVo9Wh1bQg1b3VrdWh1awg1aXWhCDVsNWh1b7VodaE1aXVrCDVsdWl1oAg1aHVutWh1a/VuNWy1brVtNWh1bYg1b3VrdWl1bTVodW2OiBcblxu1ZPVuNaA1bHVpdaEINWv1oDVr9Wr1bYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g1b7VodW11oDVr9W11aHVttWr1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i1LTVuNaC1oTCoDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INWh1bbVo9Wh1bQg1b3VrdWh1awg1oPVuNaA1bEg1aXWhCDVodaA1aXVrCDVo9aA1aHVvdWh1azVq9Wv1bYg1aHVutWh1a/VuNWy1brVpdWs1bjWgiDVsNWh1bTVodaAOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDVodW21aPVodW01avWgSDVodW+1aXVrCDVodW21bDVodW71bjVsiDWg9W41oDVsdWl1oDVq9aBINWw1aXVv9W4INWj1oDVodW91aHVrNWr1a/VqCDVr9W+1aXWgNWh1a/VodaA1aPVodW+1bjWgNW+1asg1aPVuNaA1a7VodaA1aHVttWh1bXVq9W2INWs1bzVpdWs1bXVodW11bbVqywg1ocg1oXVo9W/1b7VuNWy1asg1aLVuNWs1bjWgCDVv9W+1bXVodWs1bbVpdaA1agg1a/Vr9W41oDVpdW2OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiLUtNW41oLWhMKgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g1aHVttWj1aHVtCDVvdWt1aHVrCDWg9W41oDVsSDVpdaEINWh1oDVpdWsINWw1aXVvNWh1a3VuNW91bYg1aHVutWh1a/VuNWy1brVpdWs1bjWgiDVsNWh1bTVodaAOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDVodW21aPVodW01avWgSDVodW+1aXVrCDVodW21bDVodW71bjVsiDWg9W41oDVsdWl1oDVq9aBINWw1aXVv9W4INWw1aXVvNWh1a3VuNW91agg1a/VvtWl1oDVodWv1aHWgNWj1aHVvtW41oDVvtWrINWj1bjWgNWu1aHWgNWh1bbVodW11avVtiDVrNW81aXVrNW11aHVtdW21assINaHINaF1aPVv9W+1bjVstWrINWi1bjVrNW41oAg1b/VvtW11aHVrNW21aXWgNWoINWv1a/VuNaA1aXVtjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+ItS01bjWgtaEIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDVodW21aPVodW0INW91a3VodWsINaD1bjWgNWxINWl1oQg1aHWgNWl1awg1aPWgNWh1b3VodWs1avVr9W2INWh1brVodWv1bjVstW61aXVrNW41oIg1bDVodW01aHWgDog1LPWgNWh1b3VodWs1avVr9W2INWh1bXVqtW0INWv1b7VpdaA1aHVr9Wh1oDVo9Wh1b7VuNaA1b7VqyDVo9W41oDVrtWh1oDVodW21aHVtdWr1bYg1azVvNWl1azVtdWh1bXVttWrOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+ItS01bjWgtaEwqA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g1aHVttWj1aHVtCDVvdWt1aHVrCDWg9W41oDVsSDVpdaEINWh1oDVpdWswqDVsNWl1bzVodWt1bjVvdW2INWh1brVodWv1bjVstW61aXVrNW41oIg1bDVodW01aHWgDog1YDVpdW81aHVrdW41b3VtiDVodW11arVtCDVr9W+1aXWgNWh1a/VodaA1aPVodW+1bjWgNW+1asg1aPVuNaA1a7VodaA1aHVttWh1bXVq9W2INWs1bzVpdWs1bXVodW11bbVqzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i1LTVuNaC1oQg1b3VrdWh1awg1aXWhCDVsNWh1b7VodaE1aXVrCDVsdWl1oAg1aHVutWh1a/VuNWy1brVtNWh1bYg1b3VrdWl1bTVodW2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INWh1bbVo9Wh1bQ6INS11b7VvSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDVodW21bDVodW71bjVsiDWg9W41oDVsdWr1oEg1bDVpdW/1bgg1bHVpdWm1aHVttWr1oEg1a/VutWh1bDVodW21bvVvtWrINWh1brVodWv1bjVstW61aXVrCDVsdWl1oAg1aPWgNWh1b3VodWs1avVr9WoYCDWhdWj1b/VodWj1bjWgNWu1aXVrNW41b4g1afVrNaD1bjVvdW/1asg1bDVodW31avVvjpcblxuINWT1bjWgNWx1aXWhCDVr9aA1a/Vq9W2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INW+1aHVtdaA1a/VtdWh1bbVq9aBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i1LTVuNaC1oTCoDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INWh1bbVo9Wh1bQg1b3VrdWh1awg1aXWhCDVsNWh1b7VodaE1aXVrCDVsdWl1oAg1aHVutWh1a/VuNWy1brVtNWh1bYg1bbVtNW41oLVt9WoOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDVodW21aPVodW01avWgSDVodW+1aXVrCDVodW21bDVodW71bjVsiDWg9W41oDVsdWl1oDVq9aBINWw1aXVv9W4INWx1aXVpiDVr9Wh1bzVodW71aHWgNWv1b7VqyDVodW61aHVr9W41bLVutWl1awg1bHVpdaAINWw1aXVvNWh1a3VuNW91ahgINaF1aPVv9Wh1aPVuNaA1a7VpdWs1bjVviDVp9Ws1oPVuNW91b/VqyDVsNWh1bfVq9W+OlxuXG4g1ZPVuNaA1bHVpdaEINWv1oDVr9Wr1bYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g1b7VodW11oDVr9W11aHVttWr1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i1YDVpdW81aHWgdW21aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i1Y3VrdWh1awgU0lNIFBJTiDVr9W41aTVqyDVutWh1b/Vs9Wh1bzVuNW+INW61aXVv9aEINWnINWk1avVtNWl1oQg1bHVpdaAINaF1brVpdaA1aHVv9W41oDVq9W21Z0g1b3VodaA1oTVtiDVodaA1aPVpdWs1aHVotWh1oHVpdWs1bjWgiDVsNWh1bTVodaAOiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iU0lNIFBJTiDVr9W41aTVqCDVvdWt1aHVrCDVpzog1YTVttWh1oEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INaD1bjWgNWxLCDVuNaA1avWgSDVsNWl1b/VuCDVutWl1b/WhCDVpyDVpNWr1bTVpdaEINWx1aXWgCDWhdW61aXWgNWh1b/VuNaA1avVttWdINW91aHWgNaE1bYg1aHWgNWj1aXVrNWh1aLVodaB1aXVrNW41oIg1bDVodW01aHWgDoiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJTSU0gUElOINWv1bjVpNWoINW91a3VodWsINWnOiDVhNW21aHWgSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g1oPVuNaA1bE6IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0t1agg1bDVttWh1oDVodW+1bjWgCDVudWnINaF1aPVv9Wh1aPVuNaA1a7VpdWsOiDUtNWr1bTVpdaEINWx1aXWgCDWhdW61aXWgNWh1b/VuNaA1avVtjoiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IlNJTSBQVUsg1a/VuNWk1agg1b3VrdWh1awg1ac6INWE1bbVodaBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDWg9W41oDVsdWdINW01avVttW51ocgU0lNLdWrINWo1bbVpNW01avVt9W/INWh1oDVo9Wl1azVodaD1aHVr9W41oLVtNWoOiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IlNJTSBQVUsg1a/VuNWk1agg1b3VrdWh1awg1ac6INWE1bbVodaBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDWg9W41oDVsdWdINW01avVttW51ocgU0lNLdWrINWo1bbVpNW01avVt9W/INWh1oDVo9Wl1azVodaD1aHVr9W41oLVtNWoOiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iU0lNIFBJTiDVo9W41oDVrtW41bLVuNaC1anVtdW41oLVttWoINWx1aHVrdW41bLVvtWl1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJTSU0gUFVLINWj1bjWgNWu1bjVstW41oLVqdW11bjWgtW21agg1bHVodWt1bjVstW+1aXWgToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i1L/VuNWk1bYg1ajVttWk1bjWgtW21b7VpdaBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+ItWG1aHVrdW41oDVpCDVsNWl1b/VodWj1a7VqyDVr9W41bPVodWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i1YDVodW71bjWgNWkINWw1aXVv9Wh1aPVrtWrINWv1bjVs9Wh1a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i1LTVodWk1aHWgNWrINWv1bjVs9Wh1a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiLVhtW+1aHVo9Wh1oDVr9W01aHVtiDVr9W41bPVodWvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4i1LTVodWk1aHWgNWrINWv1bjVs9Wh1a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4i1L7VodW81aHVtdW41oLVqdW11bjWgtW2INW51a/VoToiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCmluZGV4IDlmNzMxYWIuLjllMTk0NzIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iS2V0aWsga29kZSBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJLZXRpayBrb2RlIFBVSyBkYW4gUElOIGJhcnUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IktvZGUgUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJLb2RlIFBpbiBiYXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iS2V0aWsga29kZSBQSU4gYmFydSBkYW4gUFVLIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iS29kZSBQVUsgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJLb2RlIFBJTiBTSU0gYmFydSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IlNlbnR1aCB1bnR1ayBtZW5nZXRpa2thbiBzYW5kaSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IktldGlrIHNhbmRpIHVudHVrIG1lbWJ1a2Ega3VuY2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJLZXRpayBQSU4gdW50dWsgbWVtYnVrYSBrdW5jaSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJUb21ib2wgamVkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iVG9tYm9sIHB1dGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJUb21ib2wgaGVudGlrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iQmFndXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJKZWxlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IkhhdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJCdWthIGt1bmNpIHVudHVrIG1lbGFuanV0a2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iUGVsdW5jdXJhbiBkaWJhdGFsa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IkphdHVoa2FuIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHVudHVrIG1lbmdoYXB1cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gdGlkYWsgYWthbiBkaWhhcHVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iTWFzdWtrYW4ga29kZSBQSU4geWFuZyBkaWluZ2lua2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IktvbmZpcm1hc2kga29kZSBQSU4geWFuZyBkaWluZ2lua2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJNZW1idWthIGt1bmNpIGthcnR1IFNJTeKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IktvZGUgUElOIHNhbGFoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IktldGlrIFBJTiB5YW5nIHRlcmRpcmkgZGFyaSA0IHNhbXBhaSA4IGFuZ2thLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IktvZGUgUFVLIGhhcnVzIHRlcmRpcmkgZGFyaSA4IGFuZ2thIGF0YXUgbGViaWguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iTWFzdWtrYW4ga2VtYmFsaSBrb2RlIFBVSyB5YW5nIGJlbmFyLiBKaWthIGJlcnVsYW5nIGthbGkgZ2FnYWwsIFNJTSBha2FuIGRpbm9uYWt0aWZrYW4gc2VjYXJhIHBlcm1hbmVuLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iQW5kYSB0ZWxhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpIHNhbGFoIG1lbmdnYW1iYXIgcG9sYSBwZW1idWthIGt1bmNpLiBTZXRlbGFoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgdXBheWEgZ2FnYWwsIEFuZGEgYWthbiBkaW1pbnRhIG1lbWJ1a2Ega3VuY2kgcG9uc2VsIG1lbmdndW5ha2FuIGFrdW4gZW1haWwuXG5cbkNvYmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBkZXRpay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJIYXB1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iS29kZSBQSU4gU0lNIHNhbGFoLiBIdWJ1bmdpIG9wZXJhdG9yIHVudHVrIG1lbWJ1a2Ega3VuY2kgcGVyYW5na2F0LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iS29kZSBQSU4gU0lNIHNhbGFoLCBzaXNhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwZXJjb2JhYW4gc2ViZWx1bSBBbmRhIGhhcnVzIG1lbmdodWJ1bmdpIG9wZXJhdG9yIHVudHVrIG1lbWJ1a2Ega3VuY2kgcGVyYW5na2F0LiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IktvZGUgUElOIFNJTSBzYWxhaCwgc2lzYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcGVyY29iYWFuLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNIHRpZGFrIGRhcGF0IGRpZ3VuYWthbi4gSHVidW5naSBvcGVyYXRvciBBbmRhLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iS29kZSBQVUsgU0lNIHNhbGFoLCBzaXNhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwZXJjb2JhYW4gc2ViZWx1bSBTSU0gdGlkYWsgZGFwYXQgZGlndW5ha2FuIHNlbGFtYW55YS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJLb2RlIFBVSyBTSU0gc2FsYWgsIHNpc2EgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBlcmNvYmFhbiBzZWJlbHVtIFNJTSB0aWRhayBkYXBhdCBkaWd1bmFrYW4gc2VsYW1hbnlhLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iT3BlcmFzaSBQSU4gU0lNIGdhZ2FsISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iT3BlcmFzaSBQVUsgU0lNIGdhZ2FsISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiJLb2RlIERpdGVyaW1hISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IlRvbWJvbCBsYWd1IHNlYmVsdW1ueWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJUb21ib2wgbGFndSBiZXJpa3V0bnlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IlRvbWJvbCBqZWRhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKaW5kZXggNGVkYTM0OC4uNzIxMmU1ZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJJbnNlcmlzY2kgaWwgY29kaWNlIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+Ikluc2VyaXNjaSBpbCBQVUsgZSBpbCBudW92byBjb2RpY2UgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJDb2RpY2UgUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJOdW92byBjb2RpY2UgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iRGlnaXRhIGlsIFBVSyBkZWxsYSBTSU0gZSBpbCBudW92byBjb2RpY2UgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJDb2RpY2UgUFVLIGRlbGxhIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTnVvdm8gUElOIGRlbGxhIFNJTSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IlRvY2NhIHBlciBpbnNlcmlyZSBsYSBwYXNzd29yZCI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+Ikluc2VyaXNjaSBwYXNzd29yZCBwZXIgc2Jsb2NjYXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iSW5zZXJpc2NpIFBJTiBwZXIgc2Jsb2NjYXJlIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IlB1bHNhbnRlIFBhdXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJQdWxzYW50ZSBSaXByb2R1Y2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IlB1bHNhbnRlIGRpIGFycmVzdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iTWkgcGlhY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJQb2xsaWNlIGdpw7kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJDdW9yZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IlNibG9jY2EgcGVyIGNvbnRpbnVhcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJBdnZpbyBhbm51bGxhdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iUmlsYXNjaWEgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gcGVyIGVsaW1pbmFybG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG5vbiBzYXLDoCBlbGltaW5hdG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJJbnNlcmlzY2kgaWwgY29kaWNlIFBJTiBkZXNpZGVyYXRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IkNvbmZlcm1hIGlsIGNvZGljZSBQSU4gZGVzaWRlcmF0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU2Jsb2NjbyBzY2hlZGEgU0lNLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iQ29kaWNlIFBJTiBlcnJhdG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iSWwgUElOIGRldmUgZXNzZXJlIGRpIDQtOCBudW1lcmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iSWwgY29kaWNlIFBVSyBkb3ZyZWJiZSBhdmVyZSBhbG1lbm8gb3R0byBudW1lcmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iSW5zZXJpc2NpIGRpIG51b3ZvIGlsIGNvZGljZSBQVUsgY29ycmV0dG8uIFJpcGV0dXRpIHRlbnRhdGl2aSBjb21wb3J0YW5vIGxhIGRpc2F0dGl2YXppb25lIGRlZmluaXRpdmEgZGVsbGEgc2NoZWRhIFNJTS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBlcnJhdGkgZGkgaW5zZXJpbWVudG8gZGVsbGEgc2VxdWVuemEgZGkgc2Jsb2Njby4gRG9wbyBhbHRyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmkgZmFsbGl0aSwgdGkgdmVycsOgIGNoaWVzdG8gZGkgc2Jsb2NjYXJlIGlsIHRlbGVmb25vIGNvbiB1biBhY2NvdW50IGVtYWlsLlxuXG4gUmlwcm92YSB0cmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2Vjb25kaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJSaW11b3ZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJDb2RpY2UgUElOIGRlbGxhIFNJTSBlcnJhdG8uIERldmkgY29udGF0dGFyZSBsXCdvcGVyYXRvcmUgcGVyIHNibG9jY2FyZSBpbCBkaXNwb3NpdGl2by4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IkNvZGljZSBQSU4gZGVsbGEgU0lNIGVycmF0by4gSGFpIGFuY29yYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZvIGEgZGlzcG9zaXppb25lLCBkb3BvZGljaMOpIGRvdnJhaSBjb250YXR0YXJlIGxcJ29wZXJhdG9yZSBwZXIgc2Jsb2NjYXJlIGlsIGRpc3Bvc2l0aXZvLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IkNvZGljZSBQSU4gZGVsbGEgU0lNIGVycmF0by4gSGFpIGFuY29yYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZpIGEgZGlzcG9zaXppb25lLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNIGludXRpbGl6emFiaWxlLiBDb250YXR0YSBpbCB0dW8gb3BlcmF0b3JlLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iQ29kaWNlIFBVSyBkZWxsYSBTSU0gZXJyYXRvLiBIYWkgYW5jb3JhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0ZW50YXRpdm8gYSBkaXNwb3NpemlvbmUgcHJpbWEgY2hlIGxhIFNJTSBkaXZlbnRpIGRlZmluaXRpdmFtZW50ZSBpbnV0aWxpenphYmlsZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJDb2RpY2UgUFVLIGRlbGxhIFNJTSBlcnJhdG8uIEhhaSBhbmNvcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBhIGRpc3Bvc2l6aW9uZSBwcmltYSBjaGUgbGEgU0lNIGRpdmVudGkgZGVmaW5pdGl2YW1lbnRlIGludXRpbGl6emFiaWxlLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iT3BlcmF6aW9uZSBjb24gUElOIGRlbGxhIFNJTSBub24gcml1c2NpdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJPcGVyYXppb25lIGNvbiBQVUsgZGVsbGEgU0lNIG5vbiByaXVzY2l0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iQ29kaWNlIGFjY2V0dGF0by4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJQdWxzYW50ZSB0cmFjY2lhIHByZWNlZGVudGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJQdWxzYW50ZSB0cmFjY2lhIHN1Y2Nlc3NpdmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iUHVsc2FudGUgUGF1c2EiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAppbmRleCA4ZDM2MzA5Li4xMmI0NWU0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKQEAgLTIwLDQ5ICsyMCw0OSBAQAogCiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLXlNen15zXkyDXp9eV15MgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4i15TXp9ec15Mg15DXqiDXp9eV15Mg15QtUFVLINeV16fXldeTICDXlC1QSU4g15TXl9eT16kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+Iten15XXkyBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Iten15XXkyBQSU4g15fXk9epIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i4oCP15TXp9ec15Mg16fXldeTIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IuKAj9eU16fXnNeTINen15XXkyBQVUsg16nXnCDXm9eo15jXmdehIFNJTSDXlden15XXkyBQSU4g15fXk9epIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiLigI/Xp9eV15MgUFVLINep15wg15vXqNeY15nXoSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+IuKAj9ee16HXpNeoIFBJTiDXl9eT16kg16nXnCDXm9eo15jXmdehIFNJTSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IteS16Ig15vXk9eZINec15TXp9ec15nXkyDXkNeqINeU16HXmdeh157XlCI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IteU16fXnNeTINeh15nXodee15Qg15zXkdeZ15jXldecINeU16DXoteZ15zXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IteU16fXnNeTINen15XXkyBQSU4g15zXkdeZ15jXldecINeU16DXoteZ15zXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+Iten15XXkyBQSU4g16nXkteV15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLigI/XlNen15zXkyDXp9eV15MgUElOINec15HXmdeY15XXnCDXlNeg16LXmdec15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLigI/Xp9eV15MgUElOINep15LXldeZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+Iteb15PXmSDXnNeR15jXnCDXkNeqINeU16DXoteZ15zXlCwg15zXl9elINei15wgXCfXqtek16jXmdeYXCcg15XXnNeQ15fXqCDXnteb158g16LXnCAwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLXl9eo15LXqiDXntee16HXpNeoINeU16DXmdeh15nXldeg15XXqiDXlNee16jXkdeZINep15wg15bXmdeU15XXmSDXpNeo16bXldejIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+IteX16jXkteqINee157Xodek16gg15TXoNeZ16HXmdeV16DXldeqINeU157XqNeR15kg16nXnCDXlteZ15TXldeZINek16DXmdedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiLXmNei15XXnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MTE3NTcyMDAwNjM5OTk4Mzg4Ij4i15jXldei158sIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sb3dfYmF0dGVyeSIgbXNnaWQ9IjgxNDM4MDgwMTg3MTkxNzM4NTkiPiLXl9eR16gg15DXqiDXlNee15jXotefLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4i15zXl9elINei15wgXCfXqtek16jXmdeYXCcg15vXk9eZINec15HXmNecINeQ16og15TXoNei15nXnNeULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI5MTY5NzE3Nzc5MDU4MDM3MTY4Ij4i16jXqdeqINeg16LXldec15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4i15DXmdefINeb16jXmNeZ16EgU0lNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+IteQ15nXnyDXm9eo15jXmdehIFNJTSDXkdeY15DXkdec15guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiLXkNeZ158g15vXqNeY15nXoSBTSU0g15HXmNec16TXldefLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiLXlNeb16DXoSDXm9eo15jXmdehIFNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiLXm9eo15jXmdehINeULVNJTSDXl9eh16gg15DXlSDXqdec15Ag16DXmdeq158g15zXp9eo15XXkCDXkNeV16rXlS4g15TXm9eg16Eg15vXqNeY15nXoSBTSU0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iODM0MDgxMzk4OTU4NjYyMjM1NiI+Itec15Ag16DXmdeq158g15zXlNep16rXntepINeR15vXqNeY15nXoSBTSU0g15bXlC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiLXm9eo15jXmdehINeULVNJTSDXqdec15og15TXldep15HXqiDXnNem157Xmdeq15XXqi5cbtek16DXlCDXnNeh16TXpyDXlNep15nXqNeV16og15TXkNec15fXldeY15kg16nXnNeaINec16fXkdec16og15vXqNeY15nXoSBTSU0g15DXl9eoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiLXm9eo15jXmdehINeULVNJTSDXoNei15XXnC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+Iteb16jXmNeZ16EgU0lNINeg16LXldecINeR15DXntem16LXldeqIFBVSy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+Itee15HXmNecINeg16LXmdec15Qg16nXnCDXm9eo15jXmdehIFNJTeKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4gV2lkZ2V0ICUyJGQg157XqteV15ogJTMkZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i15TXldeh16MgV2lkZ2V0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0OTQ5ODA1NjEzMDQyMTE5MzEiPiLigI/XkNeZ158g15vXqNeY15nXoSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4i4oCP15DXmdefINeb16jXmNeZ16EgU0lNINeR15jXkNeR15zXmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IuKAj9eQ15nXnyDXm9eo15jXmdehIFNJTSDXkdeY15zXpNeV158uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+IuKAj9eU15vXoNehINeb16jXmNeZ16EgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iNTk2ODk4NTQ4OTQ2Mzg3MDM1OCI+IuKAj9eb16jXmNeZ16Eg15QtU0lNINeX16HXqCDXkNeVINep15zXkCDXoNeZ16rXnyDXnNen16jXldeQINeQ15XXqteVLiDXlNeb16DXoSDXm9eo15jXmdehIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4i4oCP15zXkCDXoNeZ16rXnyDXnNeU16nXqtee16kg15HXm9eo15jXmdehIFNJTSDXlteULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+IuKAj9eb16jXmNeZ16Eg15QtU0lNINep15zXmiDXlNeV16nXkdeqINec16bXnteZ16rXldeqLlxu16TXoNeUINec16HXpNenINeU16nXmdeo15XXqiDXlNeQ15zXl9eV15jXmSDXqdec15og15zXp9eR15zXqiDXm9eo15jXmdehIFNJTSDXkNeX16guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IuKAj9eb16jXmNeZ16Eg15QtU0lNINeg16LXldecLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4i4oCP15vXqNeY15nXoSBTSU0g16DXoteV15wg15HXkNee16bXoteV16ogUFVLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3OTc1MjIxODA1MDMzNjE0NDI2Ij4i4oCP157XkdeY15wg16DXoteZ15zXlCDXqdecINeb16jXmNeZ16EgU0lN4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiLigI8lMSRzLiBXaWRnZXQgJTIkZCDXnteq15XXmiAlMyRkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiLigI/XlNeV16HXoyBXaWRnZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLXqNeZ16ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+IteQ15bXldeoINeR15nXmNeV15wg15TXoNei15nXnNeUINeU15XXqNeX15EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4i15DXlteV16gg15HXmdeY15XXnCDXlNeg16LXmdec15Qg15vXldeV16UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iV2lkZ2V0IOKAjzx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+IuKAj1dpZGdldCDigI88eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4i15HXldeX16gg157Xqdeq157XqdeZ150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiLXodeY15jXldehIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4i157Xptec157XlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiLXpNen15PXmSDXnteT15nXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i16HXmdeT15XXqCDXnteX15PXqSDXqdecIFdpZGdldHMg15TXqteX15nXnC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLXodeZ15PXldeoINee15fXk9epINep15wgV2lkZ2V0cyDXlNeh16rXmdeZ150uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiJXaWRnZXQg4oCPPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g16DXnteX16cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiLigI/XodeZ15PXldeoINee15fXk9epINep15wgV2lkZ2V0cyDXlNeq15fXmdecLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IuKAj9eh15nXk9eV16gg157Xl9eT16kg16nXnCBXaWRnZXRzINeU16HXqteZ15nXnS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IuKAj1dpZGdldCDigI88eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDXoNee15fXpy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLXlNeo15fXkSDXkNeqINeQ15bXldeoINeR15nXmNeV15wg15TXoNei15nXnNeULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfdW5sb2NrIiBtc2dpZD0iMjk1OTkyODQ3ODc2NDY5NzI1NCI+IteR15nXmNeV15wg16DXoteZ15zXlCDXkdeQ157Xptei15XXqiDXlNeh15jXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IteR15nXmNeV15wg16DXoteZ15zXlCDXkdeQ157Xptei15XXqiDXpteZ15XXqCDXp9eVLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i15HXmdeY15XXnCDXoNei15nXnNeUINeR15DXntem16LXldeqINeW15nXlNeV15kg16TXqNem15XXoy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4i15HXmdeY15XXnCDXoNei15nXnNeUINeR15DXntem16LXldeqINee16HXpNeoIFBJTi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IteR15nXmNeV15wg16DXoteZ15zXlCDXkdeQ157Xptei15XXqiDXlteZ15TXldeZINek16DXmdedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiLigI/XkdeZ15jXldecINeg16LXmdec15Qg15HXkNee16bXoteV16og157Xodek16ggUElOLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IteR15nXmNeV15wg16DXoteZ15zXlCDXkdeQ157Xptei15XXqiDXodeZ16HXnteULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+IteQ15bXldeoINem15nXldeoINen15UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+IteQ15bXldeoINeU16HXmNeULiI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLXnNeX16bXnyBcJ9eU16nXlNeUXCciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+Itec15fXptefIFwn15TXpNei15xcJyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i15zXl9em158gXCfXlNek16HXp1wnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IteQ15TXkdeq15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLXnNeQINeQ15TXkdeq15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLXnNeRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4i15HXmNecINeg16LXmdec15Qg15vXk9eZINec15TXntep15nXmiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IteU15TXpNei15zXlCDXkdeV15jXnNeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+Itep15fXqNeoINeQ16ogPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g15zXnteX15nXp9eULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDXnNeQINeZ15nXnteX16cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4i15DXkdeSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC05NSwzMCArMTAyLDI5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLXqdeb15fXqiDXkNeqINeU16fXlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4i16fXlSDXkdeZ15jXldecINeg16LXmdec15Qg16nXkteV15kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiLXodeZ16HXnteUINep15LXldeZ15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4i157Xodek16ggUElOINep15LXldeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+IuKAj9ee16HXpNeoIFBJTiDXqdeS15XXmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4i16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g16nXoNeZ15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+Itep16jXmNeYINeQ16og16fXlSDXkdeZ15jXldecINeU16DXoteZ15zXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IteU15bXnyDXnteh16TXqCBQSU4g15wtU0lNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiLXlNeW158g157Xodek16ggUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4i4oCP15TXltefINee16HXpNeoIFBJTiDXnC1TSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IuKAj9eU15bXnyDXnteh16TXqCBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i15TXltefINeQ16og15TXodeZ16HXnteUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4i15vXqNeY15nXoSDXlC1TSU0g157Xldep15HXqiDXm9ei16ouINeU15bXnyDXp9eV15MgUFVLINeb15PXmSDXnNeU157XqdeZ15ouINek16DXlCDXkNecINeU16HXpNenINec16TXqNeY15nXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i15TXltefINeQ16og16fXldeTINeULVBJTiDXlNeo16bXldeZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IteQ16nXqCDXkNeqINen15XXkyDXlC1QSU4g15TXqNem15XXmSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4i157XkdeY15wg16DXoteZ15zXlCDXqdecINeb16jXmNeZ16EgU0lN4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i16fXldeTIFBJTiDXqdeS15XXmS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLXlNen15zXkyDXnteh16TXqCBQSU4g16nXkNeV16jXm9eVIDQg16LXkyA4INeh16TXqNeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4i16fXldeTIFBVSyDXpteo15nXmiDXnNeU15nXldeqINeR158gOCDXodek16jXldeqINeQ15Ug15nXldeq16guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i15TXltefINee15fXk9epINeQ16og16fXldeTIFBVSyDXlNeg15vXldefLiDXoNeZ16HXmdeV16DXldeqINeX15XXlteo15nXnSDXmdep15HXmdeq15Ug15zXptee15nXqteV16og15DXqiDXm9eo15jXmdehINeULVNJTS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i16fXldeT15kg15QtUElOINeQ15nXoNedINeq15XXkNee15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IuKAj9eb16jXmNeZ16Eg15QtU0lNINee15XXqdeR16og15vXoteqLiDXlNeW158g16fXldeTIFBVSyDXm9eT15kg15zXlNee16nXmdeaLiDXpNeg15Qg15DXnCDXlNeh16TXpyDXnNek16jXmNeZ150uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IuKAj9eU15bXnyDXkNeqINen15XXkyDXlC1QSU4g15TXqNem15XXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLigI/XkNep16gg15DXqiDXp9eV15Mg15QtUElOINeU16jXpteV15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IuKAj9ee15HXmNecINeg16LXmdec15Qg16nXnCDXm9eo15jXmdehIFNJTeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IuKAj9eU16fXnNeTINee16HXpNeoIFBJTiDXqdeQ15XXqNeb15UgNCDXoteTIDgg16HXpNeo15XXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiLigI/Xp9eV15MgUFVLINem16jXmdeaINec15TXmdeV16og15HXnyA4INeh16TXqNeV16og15DXlSDXmdeV16rXqC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLigI/XlNeW158g157Xl9eT16kg15DXqiDXp9eV15MgUFVLINeU16DXm9eV158uINeg15nXodeZ15XXoNeV16og15fXldeW16jXmdedINeZ16nXkdeZ16rXlSDXnNem157Xmdeq15XXqiDXkNeqINeb16jXmNeZ16Eg15QtU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLigI/Xp9eV15PXmSDXlC1QSU4g15DXmdeg150g16rXldeQ157XmdedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i16DXmdeh15nXldeg15XXqiDXqNeR15nXnSDXnteT15kg15zXqdeo15jXldeYINen15Ug15HXmdeY15XXnCDXoNei15nXnNeULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLXm9eT15kg15zXkdeY15wg15DXqiDXlNeg16LXmdec15QsINeU15nXm9eg16Eg15HXkNee16bXoteV16og15fXqdeR15XXnyBHb29nbGUg16nXnNeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLigI/Xm9eT15kg15zXkdeY15wg15DXqiDXlNeg16LXmdec15QsINeU15nXm9eg16Eg15HXkNee16bXoteV16og15fXqdeR15XXnyBHb29nbGUg16nXnNeaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i16nXnSDXntep16rXntepICjXk9eV15BcItecKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i16HXmdeh157XlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4i15TXmdeb16DXoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i16nXnSDXntep16rXntepINeQ15Ug16HXmdeh157XlCDXnNeQINeX15XXp9eZ15nXnS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i16nXm9eX16og15DXqiDXqdedINeU157Xqdeq157XqSDXkNeVINeU16HXmdeh157XlD9cbteR16fXqCDXkdeb16rXldeR16ogIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLigI/Xqdeb15fXqiDXkNeqINep150g15TXntep16rXntepINeQ15Ug15TXodeZ16HXnteUP1xu15HXp9eoINeR15vXqteV15HXqiAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i15HXldeT16cg15fXqdeR15XXn+KApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i15TXp9ec15PXqiDXnteh16TXqCBQSU4g16nXkteV15kgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnS4gXG5cbteg16HXlCDXqdeV15Eg15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16nXoNeZ15XXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuKAj9eU16fXnNeT16og157Xodek16ggUElOINep15LXldeZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150uIFxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IteU16fXnNeT16og16HXmdeh157XlCDXqdeS15XXmdeUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150uXG5cbteg16HXlCDXqdeV15Eg15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16nXoNeZ15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i16nXqNeY15jXqiDXkNeqINen15Ug15HXmdeY15XXnCDXlNeg16LXmdec15Qg15HXkNeV16TXnyDXqdeS15XXmSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedLiBcblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IteR15nXptei16ogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXqdeS15XXmdeZ150g15zXkdeZ15jXldecINeg16LXmdec16og15TXmNec16TXldefLiDXnNeQ15fXqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINeb15XXqdec15nXnSDXoNeV16HXpNeZ150sINeU15jXkNeR15zXmCDXmdei15HXldeoINeQ15nXpNeV16Eg15zXkdeo15nXqNeqINeU157Xl9eT15wg16nXnCDXlNeZ16bXqNefINeV15vXnCDXoNeq15XXoNeZINeU157Xqdeq157XqSDXmdeQ15HXk9eVLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i16nXqNeY15jXqiDXkNeqINen15Ug15HXmdeY15XXnCDXlNeg16LXmdec15Qg15HXkNeV16TXnyDXqdeS15XXmSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedLiDXnNeQ15fXqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINeb15XXqdec15nXnSDXoNeV16HXpNeZ150sINeq16rXkden16kg15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU15jXnNek15XXnyDXkdeQ157Xptei15XXqiDXl9ep15HXldefINeT15XXkFwi15zigI8uXG5cbteg16HXlCDXqdeV15Eg15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g16nXoNeZ15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLXlNeh16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IuKAj9ee16HXpNeoIFBJTiDXqdeS15XXmSDXqdecINeb16jXmNeZ16Eg15QtU0lNLiDXotec15nXmiDXnNeZ16bXldeoINeb16LXqiDXp9ep16gg16LXnSDXlNeh16TXpyDXotecINee16DXqiDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXnteb16nXmdeoLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4i4oCP157Xodek16ggUElOINep15LXldeZINep15wg15vXqNeY15nXoSDXlC1TSU0uINeg15XXqteoINec15og16DXmdeh15nXldefIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDXoNeV16HXoyDXnNek16DXmSDXqdeZ15TXmdeUINei15zXmdeaINec15nXpteV16gg16fXqdeoINei150g15TXodek16cg16LXnCDXnteg16og15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU157Xm9ep15nXqC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiLigI/Xnteh16TXqCBQSU4g16nXkteV15kg16nXnCDXm9eo15jXmdehINeULVNJTS4g16DXldeq16jXlSDXnNeaIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINeg15XXodek15nXnS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IuKAj9ec15Ag16DXmdeq158g15zXlNep16rXntepINeR15vXqNeY15nXoSDXlC1TSU0uINem15XXqCDXp9ep16gg16LXnSDXlNeh16TXpy4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IuKAj9en15XXkyBQVUsg16nXkteV15kg16nXnCDXm9eo15jXmdehINeULVNJTS4g16DXldeq16gg15zXmiDXoNeZ16HXmdeV158gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INeg15XXodejINec16TXoNeZINep15vXqNeY15nXoSDXlC1TSU0g15nXoNei15wg15zXptee15nXqteV16ouIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4i4oCP16fXldeTIFBVSyDXqdeS15XXmSDXqdecINeb16jXmNeZ16Eg15QtU0lNLiDXoNeV16rXqNeVINec15ogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og16DXldeh16TXmdedINec16TXoNeZINep15vXqNeY15nXoSDXlC1TSU0g15nXoNei15wg15zXptee15nXqteV16ouIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiLigI/XpNei15XXnNeqINee16HXpNeoINeULVBJTiDXqdecINeb16jXmNeZ16Eg15QtU0lNINeg15vXqdec15QhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiLigI/XpNei15XXnNeqINen15XXkyDXlC1QVUsg16nXnCDXm9eo15jXmdehINeULVNJTSDXoNeb16nXnNeUISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLXlNen15XXkyDXlNeq16fXkdecISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+Itec15fXptefIFwn15TXqNem15XXoteUINeU16fXldeT157XqlwnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i15zXl9em158gXCfXlNeo16bXldei15Qg15TXkdeQ15RcJyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiLXnNeX16bXnyBcJ9eU16nXlNeUXCciPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbAppbmRleCA5MmUzMDhiLi41MTA2MjcxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTuOCs+ODvOODieOCkuWFpeWKmyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVS+OBqOaWsOOBl+OBhFBJTuOCs+ODvOODieOCkuWFpeWKmyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVL44Kz44O844OJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLmlrDjgZfjgYRQSU7jgrPjg7zjg4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJQVUvjgajmlrDjgZfjgYRQSU7jgrPjg7zjg4njgpLlhaXlipsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTSBQVUvjgrPjg7zjg4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+IuaWsOOBl+OBhFNJTSBQSU7jgrPjg7zjg4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLjgr/jg4Pjg5fjgZfjgabjg5Hjgrnjg6/jg7zjg4njgpLlhaXlipsiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLjg63jg4Pjgq/jgpLop6PpmaTjgZnjgovjgavjga/jg5Hjgrnjg6/jg7zjg4njgpLlhaXlipsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLjg63jg4Pjgq/jgpLop6PpmaTjgZnjgovjgavjga9QSU7jgpLlhaXlipsiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i5LiA5pmC5YGc5q2i44Oc44K/44OzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLlho3nlJ/jg5zjgr/jg7MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IuWBnOatouODnOOCv+ODsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLjgrDjg4Pjg4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLjgqTjg57jgqTjg4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLjg4/jg7zjg4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLntprooYzjgZnjgovjgavjga/jg63jg4Pjgq/jgpLop6PpmaTjgZfjgabjgY/jgaDjgZXjgYQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiLotbfli5XjgpLjgq3jg6Pjg7Pjgrvjg6vjgZfjgb7jgZfjgZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4i5YmK6Zmk44GZ44KL44Gr44GvPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz7jgpLjg4njg63jg4Pjg5fjgZfjgabjgY/jgaDjgZXjgYTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz7jga/liYrpmaTjgZXjgozjgb7jgZvjgpPjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IuW4jOacm+OBrlBJTuOCs+ODvOODieOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLluIzmnJvjga5QSU7jgrPjg7zjg4njgpLnorroqo3jgZfjgabjgY/jgaDjgZXjgYQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNJTeOCq+ODvOODieOBruODreODg+OCr+ino+mZpOS4reKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IlBJTuOCs+ODvOODieOBjOato+OBl+OBj+OBguOCiuOBvuOBm+OCk+OAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlBJTuOBrzTvvZ445qGB44Gu5pWw5a2X44Gn5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVL44Kz44O844OJ44GvOOahgeS7peS4iuOBrueVquWPt+OBp+OBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+Iuato+OBl+OBhFBVS+OCs+ODvOODieOCkuWGjeWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAguiqpOWFpeWKm+OCkue5sOOCiui/lOOBmeOBqOOAgVNJTeOBjOawuOS5heOBq+eEoeWKueOBq+OBquOCi+OBiuOBneOCjOOBjOOBguOCiuOBvuOBmeOAgiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i44Ot44OD44Kv6Kej6Zmk44OR44K/44O844Oz44Gu5YWl5Yqb44KSPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7lm57plpPpgZXjgYjjgb7jgZfjgZ/jgILjgYLjgag8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPuWbnumWk+mBleOBiOOCi+OBqOOAgeaQuuW4r+err+acq+OBruODreODg+OCr+ino+mZpOOBq+ODoeODvOODq+OCouOCq+OCpuODs+ODiOOBjOW/heimgeOBq+OBquOCiuOBvuOBmeOAglxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPuenkuW+jOOBq+OCguOBhuS4gOW6puOBiuippuOBl+OBj+OBoOOBleOBhOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIC0gIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLliYrpmaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlNJTSBQSU7jgrPjg7zjg4njgYznhKHlirnjgafjgZnjgILjgYrkvb/jgYTjga7nq6/mnKvjgpLjg63jg4Pjgq/op6PpmaTjgZnjgovjgavjga/mkLrluK/pgJrkv6HkvJrnpL7jgavjgYrllY/jgYTlkIjjgo/jgZvjgYTjgZ/jgaDjgY/lv4XopoHjgYzjgYLjgorjgb7jgZnjgIIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IlNJTSBQSU7jgrPjg7zjg4njgYznhKHlirnjgafjgZnjgILlhaXlipvjgafjgY3jgovjga7jga/jgYLjgag8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7lm57jgafjgZnjgILjgZPjga7lm57mlbDjgpLotoXjgYjjgovjgajjgIHjgYrkvb/jgYTjga7nq6/mnKvjgpLjg63jg4Pjgq/op6PpmaTjgZnjgovjga7jgavmkLrluK/pgJrkv6HkvJrnpL7jgavjgYrllY/jgYTlkIjjgo/jgZvjgYTjgZ/jgaDjgY/lv4XopoHjgYzjgYLjgorjgb7jgZnjgIIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJTSU0gUElO44Kz44O844OJ44GM54Sh5Yq544Gn44GZ44CC5YWl5Yqb44Gn44GN44KL44Gu44Gv44GC44GoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+5Zue44Gn44GZ44CCIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU3jga/kvb/nlKjjgafjgY3jgb7jgZvjgpPjgILmkLrluK/pgJrkv6HkvJrnpL7jgavjgYrllY/jgYTlkIjjgo/jgZvjgY/jgaDjgZXjgYTjgIIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IlNJTSBQVUvjgrPjg7zjg4njgYznhKHlirnjgafjgZnjgILlhaXlipvjgafjgY3jgovjga7jga/jgYLjgag8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7lm57jgafjgZnjgILjgZPjga7lm57mlbDjgpLotoXjgYjjgovjgahTSU3jga/lrozlhajjgavkvb/nlKjjgafjgY3jgarjgY/jgarjgorjgb7jgZnjgIIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJTSU0gUFVL44Kz44O844OJ44GM54Sh5Yq544Gn44GZ44CC5YWl5Yqb44Gn44GN44KL44Gu44Gv44GC44GoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+5Zue44Gn44GZ44CC44GT44Gu5Zue5pWw44KS6LaF44GI44KL44GoU0lN44Gv5a6M5YWo44Gr5L2/55So44Gn44GN44Gq44GP44Gq44KK44G+44GZ44CCIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJTSU0gUElO5pON5L2c44Gr5aSx5pWX44GX44G+44GX44Gf44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJTSU0gUFVL5pON5L2c44Gr5aSx5pWX44GX44G+44GX44Gf44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IuOCs+ODvOODieOBjOaJv+iqjeOBleOCjOOBvuOBl+OBn+OAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IuWJjeOBruODiOODqeODg+OCr+ODnOOCv+ODsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IuasoeOBruODiOODqeODg+OCr+ODnOOCv+ODsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiLkuIDmmYLlgZzmraLjg5zjgr/jg7MiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkN2FmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLhg5Dhg5nhg6Dhg5jhg6Thg5Thg5cgUElOIOGDmeGDneGDk+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IuGDk+GDkOGDkeGDlOGDreGDk+GDlOGDlyBTSU0t4YOY4YOhIFBVSyDhg5nhg53hg5Phg5gg4YOT4YOQIOGDkOGDruGDkOGDmuGDmCBQSU4g4YOZ4YOd4YOT4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJTSU0gUFVLIOGDmeGDneGDk+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iU0lNLeGDmOGDoSDhg5Dhg67hg5Dhg5rhg5ggUElOLeGDmOGDoSDhg5nhg53hg5Phg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+IuGDqOGDlOGDlOGDruGDlOGDlyAiPGZvbnQgc2l6ZT0iMTciPiIt4YOhIOGDnuGDkOGDoOGDneGDmuGDmOGDoSI8L2ZvbnQ+IiDhg5Phg5Dhg6Hhg5Dhg5Hhg5Thg63hg5Phg5Dhg5MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLhg5Lhg5Dhg5zhg6Hhg5Dhg5Hhg5rhg53hg5nhg5Dhg5Mg4YOQ4YOZ4YOg4YOY4YOk4YOU4YOXIOGDnuGDkOGDoOGDneGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuGDkuGDkOGDnOGDoeGDkOGDkeGDmuGDneGDmeGDkOGDkyDhg5Dhg5nhg6Dhg5jhg6Thg5Thg5cgUElOIOGDmeGDneGDk+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IuGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCBQSU4g4YOZ4YOd4YOT4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiLhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5jhg6Hhg5Dhg5fhg5Xhg5jhg6Eg4YOT4YOQ4YOQ4YOt4YOY4YOg4YOU4YOXIOGDm+GDlOGDnOGDmOGDo+GDoSDhg5Phg5Ag4YOo4YOU4YOb4YOT4YOU4YOSIDAt4YOhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLhg6Hhg5Dhg67hg5jhg6Eg4YOQ4YOb4YOd4YOq4YOc4YOd4YOR4YOY4YOXIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDmOGDoSDhg5vhg6rhg5Phg5Thg5rhg53hg5Hhg5Dhg5sg4YOT4YOQ4YOo4YOV4YOU4YOR4YOj4YOaIOGDoOGDkOGDneGDk+GDlOGDnOGDneGDkeGDkOGDoSDhg5Lhg5Dhg5Phg5Dhg5Dhg63hg5Dhg6Dhg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IuGDk+GDkOGDm+GDo+GDruGDouGDo+GDmuGDmOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MTE3NTcyMDAwNjM5OTk4Mzg4Ij4i4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOU4YOd4YOR4YOhIOGDk+GDkOGDm+GDo+GDruGDouGDleGDkCAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sb3dfYmF0dGVyeSIgbXNnaWQ9IjgxNDM4MDgwMTg3MTkxNzM4NTkiPiLhg6jhg5Thg5Dhg5Thg6Dhg5fhg5Thg5cg4YOT4YOQ4YOb4YOi4YOU4YOc4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4i4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOY4YOh4YOX4YOV4YOY4YOhIOGDk+GDkOGDkOGDreGDmOGDoOGDlOGDlyDhg5vhg5Thg5zhg5jhg6Phg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiLhg6Xhg6Hhg5Thg5rhg5gg4YOp4YOQ4YOZ4YOU4YOi4YOY4YOa4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlNJTSDhg5Hhg5Dhg6Dhg5Dhg5fhg5gg4YOQ4YOgIOGDkOGDoOGDmOGDoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiLhg6Lhg5Dhg5Hhg5rhg5Thg6Lhg6jhg5gg4YOQ4YOgIOGDk+GDlOGDleGDoSBTSU0g4YOR4YOQ4YOg4YOQ4YOX4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDgxMTEwMzk1NTA4NjM3NjQzIj4i4YOQ4YOgIOGDkOGDoOGDmOGDoSBTSU0g4YOR4YOQ4YOg4YOQ4YOX4YOYIOGDouGDlOGDmuGDlOGDpOGDneGDnOGDqOGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MjEwODkxNTA5OTk1OTQyMjUwIj4i4YOp4YOQ4YOT4YOU4YOXIFNJTSDhg5Hhg5Dhg6Dhg5Dhg5fhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iU0lNIOGDkeGDkOGDoOGDkOGDl+GDmCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhIOGDkOGDnCDhg5Dhg6Ag4YOY4YOZ4YOY4YOX4YOu4YOU4YOR4YOQLiDhg6nhg5Dhg5Phg5Thg5cgU0lNIOGDkeGDkOGDoOGDkOGDl+GDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4i4YOQ4YOg4YOQ4YOb4YOd4YOu4YOb4YOQ4YOg4YOU4YOR4YOQ4YOT4YOYIFNJTSDhg5Hhg5Dhg6Dhg5Dhg5fhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1ODkyOTQwOTA5Njk5NzIzNTQ0Ij4i4YOX4YOl4YOV4YOU4YOc4YOYIFNJTSDhg5Hhg5Dhg6Dhg5Dhg5fhg5gg4YOS4YOQ4YOb4YOj4YOT4YOb4YOU4YOR4YOY4YOXIOGDkuGDkOGDm+GDneGDoOGDl+GDo+GDmuGDmCDhg5jhg6fhg50uXG4g4YOT4YOQ4YOj4YOZ4YOQ4YOV4YOo4YOY4YOg4YOT4YOY4YOXIOGDl+GDpeGDleGDlOGDnOGDmCDhg6Phg5nhg5Dhg5Hhg5Thg5rhg50g4YOh4YOU4YOg4YOV4YOY4YOh4YOY4YOhIOGDnuGDoOGDneGDleGDkOGDmOGDk+GDlOGDoOGDoSDhg6Hhg67hg5Xhg5AgU0lNIOGDkeGDkOGDoOGDkOGDl+GDmOGDoeGDl+GDleGDmOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI2ODc1NzczNDEzMzA2MzgwOTAyIj4iU0lNIOGDkeGDkOGDoOGDkOGDl+GDmCDhg5Phg5Dhg5Hhg5rhg53hg5nhg5jhg5rhg5jhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJTSU0g4YOR4YOQ4YOg4YOQ4YOX4YOYIOGDk+GDkOGDkeGDmuGDneGDmeGDmOGDmuGDmOGDkCBQVUsg4YOZ4YOd4YOT4YOY4YOXLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3OTc1MjIxODA1MDMzNjE0NDI2Ij4i4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOU4YOd4YOR4YOhIFNJTSDhg5Hhg5Dhg6Dhg5Dhg5fhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQ4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRzLiDhg5Xhg5jhg6/hg5Thg6Lhg5ggJTIkZCBvZiAlMyRkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiLhg5Xhg5jhg6/hg5Thg6Lhg5jhg6Eg4YOT4YOQ4YOb4YOQ4YOi4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZW1wdHlfc2xvdCIgbXNnaWQ9IjEyODE1MDU3MDMzMDc5MzA3NTciPiLhg6rhg5Dhg6Dhg5jhg5Thg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2V4cGFuZGVkIiBtc2dpZD0iMjI3ODEwNjAyMjMxMTE3MDI5OSI+IuGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDmOGDoSDhg6Hhg5jhg5Xhg6Dhg6rhg5Qg4YOS4YOQ4YOo4YOa4YOY4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IuGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDmOGDoSDhg6Hhg5jhg5Xhg6Dhg6rhg5Qg4YOp4YOQ4YOZ4YOU4YOq4YOY4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOGDleGDmOGDr+GDlOGDouGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4i4YOb4YOd4YOb4YOu4YOb4YOQ4YOg4YOU4YOR4YOa4YOY4YOhIOGDkOGDm+GDneGDm+GDoOGDqeGDlOGDleGDlOGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IuGDoeGDouGDkOGDouGDo+GDoeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+IuGDmeGDkOGDm+GDlOGDoOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiLhg5vhg5Thg5Phg5jhg5jhg6Eg4YOb4YOQ4YOg4YOX4YOV4YOY4YOhIOGDlOGDmuGDlOGDm+GDlOGDnOGDouGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i4YOT4YOQ4YOY4YOs4YOn4YOdIOGDleGDmOGDr+GDlOGDouGDmOGDoSDhg67hg5Thg5rhg5Dhg67hg5rhg5Ag4YOS4YOQ4YOc4YOa4YOQ4YOS4YOU4YOR4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IuGDleGDmOGDr+GDlOGDouGDlOGDkeGDmOGDoSDhg5Lhg5Dhg5Phg5Dhg67hg5Dhg6Dhg5jhg6Hhg67hg5Thg5Hhg5Ag4YOT4YOQ4YOh4YOg4YOj4YOa4YOU4YOR4YOj4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4i4YOV4YOY4YOv4YOU4YOi4YOYIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOGDrOGDkOGDmOGDqOGDkOGDmuGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5jhg6Eg4YOh4YOY4YOV4YOg4YOq4YOY4YOhIOGDkuGDkOGDqOGDmuGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiLhg5Lhg5Dhg6Hhg6Dhg5jhg5Dhg5rhg5Thg5Hhg5jhg5cg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5Ag4YOc4YOY4YOb4YOj4YOo4YOY4YOXLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIOGDoeGDkOGDruGDmOGDlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiLhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AgUGluLeGDmOGDly4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLhg57hg5Dhg6Dhg53hg5rhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i4YOc4YOY4YOb4YOj4YOo4YOU4YOR4YOY4YOhIOGDoeGDmOGDleGDoOGDquGDlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4i4YOS4YOQ4YOT4YOQ4YOh4YOg4YOY4YOQ4YOa4YOU4YOR4YOY4YOhIOGDoeGDmOGDleGDoOGDquGDlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+IuGDrOGDmOGDnOGDkCDhg6nhg5Dhg5zhg5Dhg6zhg5Thg6Dhg5jhg6Eg4YOm4YOY4YOa4YOQ4YOZ4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiLhg6jhg5Thg5vhg5Phg5Thg5Lhg5gg4YOp4YOQ4YOc4YOQ4YOs4YOU4YOg4YOY4YOhIOGDpuGDmOGDmuGDkOGDmeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IuGDnuGDkOGDo+GDluGDmOGDoSDhg6bhg5jhg5rhg5Dhg5nhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IuGDk+GDkOGDmeGDleGDoOGDmOGDoSDhg6bhg5jhg5rhg5Dhg5nhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IlN0b3Ag4YOm4YOY4YOa4YOQ4YOZ4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IuGDluGDlOGDleGDmOGDlyDhg5Dhg6zhg5Thg6Phg5rhg5gg4YOq4YOU4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4i4YOl4YOV4YOU4YOV4YOY4YOXIOGDk+GDkOGDruGDoOGDmOGDmuGDmCDhg6rhg5Thg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLhg5Lhg6Phg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Thg5cg4YOS4YOQ4YOh4YOQ4YOS4YOg4YOr4YOU4YOa4YOU4YOR4YOa4YOQ4YOTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i4YOS4YOQ4YOb4YOd4YOr4YOQ4YOu4YOU4YOR4YOQIOGDkuGDkOGDo+GDpeGDm+GDk+GDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLhg6nhg5Dhg5Dhg5Lhg5Phg5Thg5cgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4YOs4YOQ4YOh4YOQ4YOo4YOa4YOU4YOa4YOQ4YOTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDhg5Dhg6Ag4YOs4YOQ4YOY4YOo4YOa4YOU4YOR4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiLhg5Lhg5Dhg6Phg6Xhg5vhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i4YOs4YOQ4YOo4YOa4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLhg5Phg5Dhg6Hhg6Dhg6Phg5rhg5Phg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLhg6Dhg5Thg5/hg5jhg5vhg5jhg6Eg4YOo4YOU4YOq4YOV4YOa4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4i4YOo4YOU4YOn4YOV4YOQ4YOc4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4YOZ4YOQ4YOb4YOU4YOg4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuGDo+GDruGDm+GDnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLhg67hg5vhg5jhg6Eg4YOp4YOQ4YOg4YOX4YOV4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLhg6vhg5jhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i4YOS4YOQ4YOQ4YOh4YOg4YOY4YOQ4YOa4YOU4YOXIOGDluGDlOGDm+GDneGDlyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t4YOX4YOV4YOY4YOhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+IuGDkuGDkOGDkOGDoeGDoOGDmOGDkOGDmuGDlOGDlyDhg6Xhg5Xhg5Thg5vhg53hg5cgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LeGDl+GDleGDmOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLhg5Lhg5Dhg5Dhg6Hhg6Dhg5jhg5Dhg5rhg5Thg5cg4YOb4YOQ4YOg4YOq4YOu4YOc4YOY4YOVIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3hg5fhg5Xhg5jhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IuGDkuGDkOGDkOGDoeGDoOGDmOGDkOGDmuGDlOGDlyDhg5vhg5Dhg6Dhg6/hg5Xhg5zhg5jhg5UgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LeGDl+GDleGDmOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IuGDkOGDm+GDn+GDkOGDm+GDmOGDnOGDk+GDlOGDmuGDmCDhg5vhg53hg5vhg67hg5vhg5Dhg6Dhg5Thg5Hhg5Thg5rhg5ggPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i4YOS4YOQ4YOT4YOQ4YOj4YOT4YOU4YOR4YOU4YOa4YOYIOGDk+GDkOGDruGDm+GDkOGDoOGDlOGDkeGDmOGDoSDhg5bhg5Dhg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLhg5Phg5Dhg5Lhg5Dhg5Xhg5jhg6zhg6fhg5Phg5Dhg5cg4YOc4YOY4YOb4YOj4YOo4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiLhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5gg4YOc4YOY4YOb4YOj4YOo4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4i4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOYIOGDnuGDkOGDoOGDneGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiLhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5ggUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiLhg5nhg5jhg5Phg5Thg5Ug4YOh4YOq4YOQ4YOT4YOU4YOXIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhg6zhg5Dhg5vhg6jhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLhg5Phg5Dhg67hg5Dhg6Lhg5Thg5cg4YOX4YOl4YOV4YOU4YOc4YOYIOGDnOGDmOGDm+GDo+GDqOGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJTSU0gUElOLeGDmOGDoSDhg6jhg5Thg6fhg5Xhg5Dhg5zhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IuGDqOGDlOGDmOGDp+GDleGDkOGDnOGDlOGDlyBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i4YOe4YOQ4YOg4YOd4YOa4YOY4YOhIOGDqOGDlOGDp+GDleGDkOGDnOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IlNJTSDhg5Dhg5vhg5/hg5Dhg5vhg5Dhg5Mg4YOT4YOU4YOQ4YOl4YOi4YOY4YOV4YOY4YOg4YOU4YOR4YOj4YOa4YOY4YOQLiDhg5Lhg5Dhg6Hhg5Dhg5Lhg6Dhg6vhg5Thg5rhg5Thg5Hhg5rhg5Dhg5Mg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOU4YOXIFBVSyDhg5nhg53hg5Phg5guIOGDk+GDlOGDouGDkOGDmuGDlOGDkeGDmOGDoeGDl+GDleGDmOGDoSDhg5vhg5jhg5vhg5Dhg6Dhg5fhg5Thg5cg4YOb4YOd4YOR4YOY4YOa4YOj4YOgIOGDneGDnuGDlOGDoOGDkOGDouGDneGDoOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i4YOh4YOQ4YOh4YOj4YOg4YOV4YOU4YOa4YOYIFBJTiDhg5nhg53hg5Phg5jhg6Eg4YOo4YOU4YOn4YOV4YOQ4YOc4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IuGDoeGDkOGDoeGDo+GDoOGDleGDlOGDmuGDmCBQSU4g4YOZ4YOd4YOT4YOY4YOhIOGDk+GDkOGDk+GDkOGDoeGDouGDo+GDoOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU0lNIOGDkeGDkOGDoOGDkOGDl+GDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5DigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLhg5Dhg5nhg6Dhg5jhg6Thg5Thg5cgUElOLCDhg6Dhg53hg5vhg5Thg5rhg5jhg6og4YOo4YOU4YOT4YOS4YOU4YOR4YOQIDQt4YOT4YOQ4YOcIDgg4YOq4YOY4YOk4YOg4YOQ4YOb4YOT4YOULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDhg5nhg53hg5Phg5gg4YOj4YOc4YOT4YOQIOGDmOGDp+GDneGDoSDhg6Dhg5Xhg5Ag4YOQ4YOcIOGDm+GDlOGDouGDmCDhg6rhg5jhg6Thg6Dhg5jhg6Hhg5Lhg5Dhg5wg4YOo4YOU4YOb4YOT4YOS4YOQ4YOg4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IuGDruGDlOGDmuGDkOGDruGDmuGDkCDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg5Thg5cg4YOh4YOs4YOd4YOg4YOYIFBVSyDhg5nhg53hg5Phg5guIOGDoOGDkOGDm+GDk+GDlOGDnOGDmOGDm+GDlCDhg6zhg5Dhg6Dhg6Phg5vhg5Dhg6Lhg5Thg5Hhg5Thg5rhg5gg4YOb4YOq4YOT4YOU4YOa4YOd4YOR4YOQIOGDkuGDkOGDm+GDneGDmOGDrOGDleGDlOGDleGDoSBTSU0g4YOR4YOQ4YOg4YOQ4YOX4YOY4YOhIOGDk+GDkOGDkeGDmuGDneGDmeGDleGDkOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIOGDmeGDneGDk+GDlOGDkeGDmCDhg5Dhg6Ag4YOU4YOb4YOX4YOu4YOV4YOU4YOV4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4YOc4YOQ4YOu4YOQ4YOi4YOYIOGDnOGDmOGDm+GDo+GDqOGDmOGDoSDhg6vhg5Dhg5rhg5jhg5Dhg5wg4YOR4YOU4YOV4YOg4YOYIOGDm+GDquGDk+GDlOGDmuGDneGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5jhg6Hhg5fhg5Xhg5jhg6Eg4YOS4YOQ4YOY4YOQ4YOg4YOU4YOXIOGDkOGDleGDouGDneGDoOGDmOGDluGDkOGDquGDmOGDkCDhg5fhg6Xhg5Xhg5Thg5zhg5ggR29vZ2xlICDhg5Dhg5zhg5Lhg5Dhg6Dhg5jhg6jhg5jhg5cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLhg5vhg53hg5vhg67hg5vhg5Dhg6Dhg5Thg5Hhg5rhg5jhg6Eg4YOh4YOQ4YOu4YOU4YOa4YOYICjhg5Thg5rhg6Thg53hg6Hhg6Lhg5ApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLhg57hg5Dhg6Dhg53hg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IuGDqOGDlOGDoeGDleGDmuGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOYIOGDoeGDkOGDruGDlOGDmuGDmCwg4YOQ4YOcIOGDnuGDkOGDoOGDneGDmuGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4YOT4YOQ4YOS4YOQ4YOV4YOY4YOs4YOn4YOT4YOQ4YOXIOGDm+GDneGDm+GDruGDm+GDkOGDoOGDlOGDkeGDmuGDmOGDoSDhg6Hhg5Dhg67hg5Thg5rhg5gg4YOT4YOQIOGDnuGDkOGDoOGDneGDmuGDmD9cbuGDlOGDrOGDleGDmOGDlOGDlyAiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOU4YOd4YOR4YOhIOGDkOGDnOGDkuGDkOGDoOGDmOGDqOGDmOGDoSDhg6jhg5Thg5vhg53hg6zhg5vhg5Thg5Hhg5DigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuGDl+GDpeGDleGDlOGDnCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi3hg6/hg5Thg6Ag4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDlOGDlyBQSU4g4YOZ4YOd4YOT4YOYLiBcblxu4YOh4YOq4YOQ4YOT4YOU4YOXIOGDruGDlOGDmuGDkOGDruGDmuGDkCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhg6zhg5Dhg5vhg6jhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuGDl+GDpeGDleGDlOGDnCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi3hg6/hg5Thg6Ag4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDk+GDkOGDkeGDlOGDreGDk+GDlOGDlyDhg5fhg6Xhg5Xhg5Thg5zhg5gg4YOe4YOQ4YOg4YOd4YOa4YOYLiBcblxu4YOu4YOU4YOa4YOQ4YOu4YOa4YOQIOGDoeGDquGDkOGDk+GDlOGDlyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhg6zhg5Dhg5vhg6jhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuGDl+GDpeGDleGDlOGDnCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi3hg6/hg5Thg6Ag4YOT4YOQ4YOu4YOQ4YOi4YOU4YOXIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDmOGDoSDhg5zhg5jhg5vhg6Phg6jhg5guIFxuXG7hg6Hhg6rhg5Dhg5Phg5Thg5cg4YOu4YOU4YOa4YOQ4YOu4YOa4YOQIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGDrOGDkOGDm+GDqOGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiLhg5fhg6Xhg5Xhg5Thg5wg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDoeGDquGDkOGDk+GDlOGDlyDhg6Lhg5Dhg5Hhg5rhg5Thg6Lhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LeGDr+GDlOGDoC4g4YOZ4YOY4YOT4YOU4YOVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGDrOGDkOGDoOGDo+GDm+GDkOGDouGDlOGDkeGDlOGDmuGDmCDhg6rhg5Phg5jhg6Eg4YOo4YOU4YOb4YOT4YOU4YOSIOGDouGDkOGDkeGDmuGDlOGDouGDluGDlCDhg5Phg5Dhg6fhg5Thg5zhg5Phg5Thg5Hhg5Ag4YOh4YOQ4YOs4YOn4YOY4YOh4YOYLCDhg6Xhg5Dhg6Dhg67hg5zhg6Phg5rhg5gg4YOe4YOQ4YOg4YOQ4YOb4YOU4YOi4YOg4YOU4YOR4YOYIOGDk+GDkCDhg5vhg53hg5vhg67hg5vhg5Dhg6Dhg5Thg5Hhg5rhg5jhg6Eg4YOn4YOV4YOU4YOa4YOQIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDmCDhg5Phg5Dhg5jhg5nhg5Dhg6Dhg5Lhg5Thg5Hhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IuGDl+GDpeGDleGDlOGDnCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOh4YOq4YOQ4YOT4YOU4YOXIOGDouGDlOGDmuGDlOGDpOGDneGDnOGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4t4YOv4YOU4YOgLiDhg5nhg5jhg5Phg5Thg5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOg4YOj4YOb4YOQ4YOi4YOU4YOR4YOU4YOa4YOYIOGDquGDk+GDmOGDoSDhg6jhg5Thg5vhg5Phg5Thg5Ig4YOi4YOU4YOa4YOU4YOk4YOd4YOc4YOW4YOUIOGDk+GDkOGDp+GDlOGDnOGDk+GDlOGDkeGDkCDhg6Hhg5Dhg6zhg6fhg5jhg6Hhg5gsIOGDpeGDkOGDoOGDruGDnOGDo+GDmuGDmCDhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg5Thg5Hhg5gg4YOT4YOQIOGDm+GDneGDm+GDruGDm+GDkOGDoOGDlOGDkeGDmuGDmOGDoSDhg6fhg5Xhg5Thg5rhg5Ag4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOYIOGDk+GDkOGDmOGDmeGDkOGDoOGDkuGDlOGDkeGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IuGDl+GDpeGDleGDlOGDnCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOh4YOq4YOQ4YOT4YOU4YOXIOGDouGDkOGDkeGDmuGDlOGDouGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LeGDr+GDlOGDoC4g4YOi4YOQ4YOR4YOa4YOU4YOi4YOW4YOUIOGDk+GDkOGDp+GDlOGDnOGDk+GDlOGDkeGDkCDhg6Hhg5Dhg6zhg6fhg5jhg6Hhg5gsIOGDpeGDkOGDoOGDruGDnOGDo+GDmuGDmCDhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg5Thg5Hhg5gg4YOT4YOQIOGDm+GDneGDm+GDruGDm+GDkOGDoOGDlOGDkeGDmuGDmOGDoSDhg6fhg5Xhg5Thg5rhg5Ag4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOYIOGDk+GDkOGDmOGDmeGDkOGDoOGDkuGDlOGDkeGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiLhg5fhg6Xhg5Xhg5Thg5wgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LeGDr+GDlOGDoCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOh4YOq4YOQ4YOT4YOU4YOXIOGDouGDlOGDmuGDlOGDpOGDneGDnOGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AuIOGDkOGDm+GDmOGDouGDneGDmyDhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5bhg5Qg4YOT4YOQ4YOT4YOS4YOU4YOR4YOQIOGDoeGDkOGDrOGDp+GDmOGDoeGDmCwg4YOl4YOQ4YOg4YOu4YOc4YOj4YOa4YOYIOGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDlOGDkeGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4YOX4YOl4YOV4YOU4YOcIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDkOGDkyDhg5Phg5Dhg67hg5Dhg6Lhg5Thg5cg4YOX4YOl4YOV4YOU4YOc4YOYIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDmOGDoSDhg5zhg5jhg5vhg6Phg6jhg5ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4YOv4YOU4YOgLiDhg5nhg5jhg5Phg5Thg5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOg4YOj4YOb4YOQ4YOi4YOU4YOR4YOU4YOa4YOYIOGDquGDk+GDmOGDoSDhg6jhg5Thg5vhg5Phg5Thg5Ig4YOb4YOd4YOS4YOX4YOu4YOd4YOV4YOXIOGDouGDkOGDkeGDmuGDlOGDouGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5Dhg6Eg4YOU4YOa4YOk4YOd4YOh4YOi4YOY4YOhIOGDkOGDnOGDkuGDkOGDoOGDmOGDqOGDmOGDoSDhg5Lhg5Dhg5vhg53hg6fhg5Thg5zhg5Thg5Hhg5jhg5cuXG5cbiDhg67hg5Thg5rhg5Dhg67hg5rhg5Ag4YOh4YOq4YOQ4YOT4YOU4YOXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOGDrOGDkOGDm+GDqOGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuGDl+GDpeGDleGDlOGDnCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOT4YOQ4YOu4YOQ4YOi4YOU4YOXIOGDl+GDpeGDleGDlOGDnOGDmCDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5jhg6Eg4YOc4YOY4YOb4YOj4YOo4YOYIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LeGDr+GDlOGDoC4g4YOZ4YOY4YOT4YOU4YOVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGDrOGDkOGDoOGDo+GDm+GDkOGDouGDlOGDkeGDlOGDmuGDmCDhg6rhg5Phg5jhg6Eg4YOo4YOU4YOb4YOT4YOU4YOSLCDhg5Phg5Dhg5Lhg63hg5jhg6Dhg5Phg5Thg5Hhg5Dhg5cg4YOX4YOl4YOV4YOU4YOc4YOYIOGDouGDlOGDmuGDlOGDpOGDneGDnOGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5Ag4YOU4YOa4YOk4YOd4YOh4YOi4YOY4YOhIOGDkOGDnOGDkuGDkOGDoOGDmOGDqOGDmOGDoSDhg5Lhg5Dhg5vhg53hg6fhg5Thg5zhg5Thg5Hhg5jhg5cuXG5cbiDhg67hg5Thg5rhg5Dhg67hg5rhg5Ag4YOh4YOq4YOQ4YOT4YOU4YOXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOGDrOGDkOGDm+GDqOGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLhg5Dhg5vhg53hg6jhg5rhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlNJTS3hg5jhg6Eg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOYIFBJTiDhg5nhg53hg5Phg5guIOGDl+GDpeGDleGDlOGDnCDhg5Dhg67hg5rhg5Ag4YOb4YOd4YOS4YOY4YOs4YOU4YOV4YOXIOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDmOGDoSDhg5Lhg5Dhg5zhg6Hhg5Dhg5Hhg5rhg53hg5nhg5Dhg5Mg4YOb4YOY4YOb4YOQ4YOg4YOX4YOd4YOXIOGDneGDnuGDlOGDoOGDkOGDouGDneGDoOGDoS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IlNJTS3hg5jhg6Eg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOYIFBJTiDhg5nhg53hg5Phg5guIOGDl+GDpeGDleGDlOGDnCDhg5Phg5Dhg5Lhg6Dhg6nhg5Dhg5cgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGDm+GDquGDk+GDlOGDmuGDneGDkeGDkCwg4YOh4YOQ4YOc4YOQ4YObIOGDm+GDneGDkuGDmOGDrOGDlOGDleGDlyDhg5fhg6Xhg5Xhg5Thg5zhg5gg4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOY4YOhIOGDkuGDkOGDnOGDoeGDkOGDkeGDmuGDneGDmeGDkOGDkyDhg53hg57hg5Thg6Dhg5Dhg6Lhg53hg6Dhg5fhg5Dhg5wg4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOQLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IlNJTS3hg5jhg6Eg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOYIFBJTiDhg5nhg53hg5Phg5guIOGDl+GDpeGDleGDlOGDnCDhg5Phg5Dhg5Lhg6Dhg6nhg5Dhg5cgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGDm+GDquGDk+GDlOGDmuGDneGDkeGDkC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSDhg5Lhg5Dhg5vhg53hg6Phg6Hhg5Dhg5Phg5Thg5Lhg5Dhg6Dhg5jhg5AuIOGDk+GDkOGDo+GDmeGDkOGDleGDqOGDmOGDoOGDk+GDmOGDlyDhg53hg57hg5Thg6Dhg5Dhg6Lhg53hg6Dhg6EuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5ggU0lNIFBVSyDhg5nhg53hg5Phg5guIOGDl+GDpeGDleGDlOGDnCDhg5Phg5Dhg5Lhg6Dhg6nhg5Dhg5cgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGDm+GDquGDk+GDlOGDmuGDneGDkeGDkCwg4YOh4YOQ4YOc4YOQ4YObIFNJTSDhg6Hhg5Dhg5vhg6Phg5Phg5Dhg5vhg53hg5Mg4YOS4YOQ4YOb4YOd4YOj4YOh4YOQ4YOT4YOU4YOS4YOQ4YOg4YOYIOGDkuGDkOGDruGDk+GDlOGDkeGDneGDk+GDlOGDoS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiLhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5ggU0lNIFBVSyDhg5nhg53hg5Phg5guIOGDl+GDpeGDleGDlOGDnCDhg5Phg5Dhg5Lhg6Dhg6nhg5Dhg5cgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGDm+GDquGDk+GDlOGDmuGDneGDkeGDkCwg4YOh4YOQ4YOc4YOQ4YObIFNJTSDhg6Hhg5Dhg5vhg6Phg5Phg5Dhg5vhg53hg5Mg4YOS4YOQ4YOb4YOd4YOj4YOh4YOQ4YOT4YOU4YOS4YOQ4YOg4YOYIOGDkuGDkOGDruGDk+GDlOGDkeGDneGDk+GDlOGDoS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlNJTSBQSU4g4YOd4YOe4YOU4YOg4YOQ4YOq4YOY4YOQIOGDqeGDkOGDmOGDqOGDkOGDmuGDkCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTSBQVUsg4YOd4YOe4YOU4YOg4YOQ4YOq4YOY4YOQIOGDqeGDkOGDmOGDqOGDkOGDmuGDkCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i4YOZ4YOd4YOT4YOYIOGDm+GDmOGDpuGDlOGDkeGDo+GDmuGDmOGDkCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLhg6zhg5jhg5zhg5Ag4YOp4YOQ4YOc4YOQ4YOs4YOU4YOg4YOW4YOUIOGDkuGDkOGDk+GDkOGDoeGDleGDmuGDmOGDoSDhg6bhg5jhg5rhg5Dhg5nhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLhg6jhg5Thg5vhg5Phg5Thg5Lhg5gg4YOp4YOQ4YOc4YOQ4YOs4YOU4YOg4YOY4YOhIOGDpuGDmOGDmuGDkOGDmeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiLhg57hg5Dhg6Phg5bhg5jhg6Eg4YOm4YOY4YOa4YOQ4YOZ4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIyOTI0NjI4ODYzNzQxMTUwOTU2Ij4i4YOT4YOQ4YOZ4YOV4YOg4YOY4YOhIOGDpuGDmOGDmuGDkOGDmeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzA4NDE3OTMyNDgxMDU3NTc4NyI+IuGDqOGDlOGDqeGDlOGDoOGDlOGDkeGDmOGDoSDhg6bhg5jhg5rhg5Dhg5nhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4i4YOQ4YOgIOGDkOGDoOGDmOGDoSDhg6Hhg5Thg6Dhg5Xhg5jhg6Hhg5guIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOWM3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLhnpThnonhn5LhnoXhnrzhnpvigIvhnoDhnrzhnoogUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6KIFBVSyAg4Z6T4Z634Z6E4oCL4oCLIFBJTiDhnpDhn5LhnpjhnrjigIvhnprhnpThnp/hn4vigIvhnp/hn4rhnrjhnpgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IuGem+GfgeGegeKAi+GegOGevOGeiiBQVUsg4Z6f4Z+K4Z644Z6YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLhnpvhn4HhnoHigIvhnoDhnrzhnoogUElOIOGen+GfiuGeuOGemOKAi+GekOGfkuGemOGeuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IuGelOGfieGfhyDhnorhnr7hnpjhn5LhnpThnrjigIvhnpThnonhn5LhnoXhnrzhnpvigIvhnpbhnrbhnoDhn5LhnpnigIvhnp/hnpjhn5LhnoThnrbhno/hn4siPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLhnpThnonhn5LhnoXhnrzhnpvigIvhnpbhnrbhnoDhn5LhnpnigIvhnp/hnpjhn5LhnoThnrbhno/hn4vigIsg4oCL4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6A4Z684Z6KIFBJTiDhnorhnr7hnpjhn5LhnpThnrjigIvhnorhn4Thn4figIvhnp/hn4QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLhnoDhnrzhnoogUElOIOGemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiLhnorhnr7hnpjhn5LhnpThnrjigIvhnorhn4Thn4figIvhnp/hn4TigIvigIsg4Z6F4Z674Z6F4oCL4Z6Y4Z+J4Z664Z6T4Z674Z6Z4oCLIOGelOGek+GfkuGekeGetuGelOGfi+GemOGegCAwIOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLhnpThnrbhnpPigIvhnpvhnr7hnp/igIvhnoDhnrbhnprigIvhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnorhn4Thn4figIvhnp/hn4TigIvhno/hnrbhnpjigIvhnpHhnpjhn5LhnprhnoThn4vigIvhnpjhnrvhnoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IuGelOGetuGek+KAi+GelOGeieGfkuGeheGevOGem+KAi+KAi+GeluGfgeGeiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI4MTE3NTcyMDAwNjM5OTk4Mzg4Ij4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6Q4Z+S4Z6YIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sb3dfYmF0dGVyeSIgbXNnaWQ9IjgxNDM4MDgwMTg3MTkxNzM4NTkiPiLhnpfhn5LhnofhnrbhnpThn4vigIvhnqfhnpThnoDhnprhno7hn43igIvhnpThnonhn5LhnoXhnrzhnpvigIvhnpDhn5LhnpjigIvhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+IuGeheGeu+GeheKAi+GemOGfieGeuuGek+Geu+GemSDhnorhnr7hnpjhn5LhnpThnrjigIvhnorhn4Thn4figIvhnp/hn4Thn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+IuGelOGejuGfkuGeiuGetuGeieKAi+Geh+GetuGelOGfi+KAi+Gen+GfhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0OTQ5ODA1NjEzMDQyMTE5MzEiPiLhnoLhn5LhnpjhnrbhnpPigIvhnp/hn4rhnrjigIvhnpjigIvhnoDhnrbhno8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6f4Z+K4Z644oCL4Z6Y4oCL4Z6A4Z624Z6P4oCL4Z6T4Z+F4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6A4Z674Z+G4Z6W4Z+S4Z6Z4Z684Z6R4Z+Q4Z6a4oCL4Z6U4Z6T4Z+S4Z6R4Z+H4oCL4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiLhnoLhn5LhnpjhnrbhnpPigIvhnp/hn4rhnrjhnpjhnoDhnrbhno/igIvhnoDhn5LhnpPhnrvhnoTigIvhnpHhnrzhnprhnp/hn5Dhnpbhn5LhnpHhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MjEwODkxNTA5OTk1OTQyMjUwIj4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4oCL4oCL4Z6f4Z+K4Z644oCL4Z6Y4oCL4Z6A4Z624Z6P4oCL4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4i4Z6U4Z624Z6P4Z+L4oCL4Z6f4Z+K4Z644Z6Y4Z6A4Z624Z6PIOGerOKAi+GemOGet+Gek+KAi+GeouGetuGeheKAi+GeouGetuGek+GflCDhnpThnonhn5LhnoXhnrzhnpvigIvhnp/hn4rhnrjhnpjigIvhnoDhnrbhno/hn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4i4Z6f4Z+K4Z644Z6Y4oCL4Z6A4Z624Z6P4oCL4Z6Y4Z634Z6T4oCL4Z6i4Z624Z6F4oCL4Z6U4Z+S4Z6a4Z6+4oCL4Z6U4Z624Z6T4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1ODkyOTQwOTA5Njk5NzIzNTQ0Ij4i4Z6U4Z624Z6T4oCL4Z6U4Z634Z6R4oCL4Z6f4Z+K4Z644Z6Y4oCL4Z6A4Z624Z6P4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6H4Z624oCL4Z6i4Z6F4Z634Z6T4Z+S4Z6P4Z+S4Z6a4Z+D4Z6Z4Z+N4Z+UXG4g4Z6R4Z624Z6A4Z+L4Z6R4Z6E4oCL4oCL4Z6A4Z+S4Z6a4Z674Z6Y4Z6g4Z+K4Z674Z6T4oCL4Z6V4Z+S4Z6K4Z6b4Z+L4oCL4Z6f4Z+B4Z6c4Z624Z6A4Z6Y4Z+S4Z6Y4oCL4Z6l4Z6P4oCL4Z6B4Z+S4Z6f4Z+C4oCL4Z6f4Z6Y4Z+S4Z6a4Z624Z6U4Z+L4oCL4Z6f4Z+K4Z644Z6Y4oCL4Z6A4Z624Z6P4oCL4Z6V4Z+S4Z6f4Z+B4Z6E4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IuGen+GfiuGeuOGemOKAi+GegOGetuGej+KAi+KAi+Geh+GetuGelOGfi+KAi+Gen+GfhOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9wdWtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSIzNzQ3MjMyNDY3NDcxODAxNjMzIj4i4Z6f4Z+K4Z644Z6Y4oCL4Z6A4Z624Z6P4oCL4Z6H4Z624Z6U4Z+L4oCL4Z6A4Z684Z6K4oCL4oCLIFBVSyDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+IuGegOGfhuGeluGeu+GehOKAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+Gen+GfiuGeuOGemOKAi+GegOGetuGejy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4g4Z6S4Z624Z6P4Z674oCL4Z6A4Z+S4Z6a4Z624Z6g4Z+S4Z6c4Z634Z6AICUyJGQg4Z6T4Z+DICUzJGQg4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IuGelOGek+GfkuGekOGfguGemOKAi+GekuGetuGej+Geu+KAi+GegOGfkuGemuGetuGeoOGfkuGenOGet+GegOKAi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i4Z6R4Z6R4Z+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLhnpThnrbhnpPigIvhnpbhnoThn5LhnprhnrjhnoDigIvhnpXhn5LhnpHhn4PigIvhnorhn4Thn4figIvhnp/hn4Thn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiLhnpThnrbhnpPigIvhnpThnoThn5Lhnprhnr3hnpjigIvhnpXhn5LhnpHhn4PigIvhnorhn4Thn4figIvhnp/hn4Thn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDhnpLhnrbhno/hnrvigIvhnoDhn5LhnprhnrbhnqDhn5LhnpzhnrfhnoDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4i4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6H4Z+S4Z6a4Z6+4Z6f4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z+S4Z6a4Z6+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zdGF0dXMiIG1zZ2lkPSI4MDA4MjY0NjAzOTM1OTMwNjExIj4i4Z6f4Z+S4Z6Q4Z624Z6T4Z6X4Z624Z6WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4i4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6Q4Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+IuGeluGet+Gek+Get+Gej+GfkuGemeKAi+GemOGfgeGejOGfgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i4Z6U4Z624Z6T4oCL4Z6F4Z624Z6U4Z+L4Z6V4Z+S4Z6K4Z6+4Z6Y4oCL4Z6P4Z6Y4Z+S4Z6a4Z+A4Z6U4oCL4Z6S4Z624Z6P4Z674oCL4Z6A4Z+S4Z6a4Z624Z6g4Z+S4Z6c4Z634Z6A4oCL4Z6h4Z6+4Z6E4Z6c4Z634Z6J4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4i4Z6U4Z624Z6T4oCL4Z6U4Z6J4Z+S4Z6F4Z6U4Z+L4oCL4Z6A4Z624Z6a4oCL4Z6U4Z6E4Z+S4Z6g4Z624Z6J4oCL4Z6S4Z624Z6P4Z674oCL4Z6A4Z+S4Z6a4Z624Z6g4Z+S4Z6c4Z634Z6A4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiLhnpThnrbhnpPigIvhnpvhnrvhnpTigIvhnpLhnrbhno/hnrvigIvhnoDhn5LhnprhnrbhnqDhn5LhnpzhnrfhnoAgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4i4Z6W4Z6E4Z+S4Z6a4Z644Z6A4oCL4Z6P4Z+G4Z6U4Z6T4Z+L4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i4Z6a4Z674Z6J4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLhnpvhn4bhnpPhnrbhn4bigIvhnorhn4Thn4figIvhnp/hn4TigIvhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IuGeiuGfhOGfh+KAi+Gen+GfhOKAi+Gej+GetuGemOKAi+KAi+GekeGemOGfkuGemuGehOGfi+KAi+GemOGeu+GegeGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiLhnoDhnrzhnoogUElOIOGeiuGfhOGfh+KAi+Gen+GfhOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IuGeluGetuGegOGfkuGemeKAi+Gen+GemOGfkuGehOGetuGej+Gfi+KAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+IuGeleGfkuGekeGfg+KAi+Gem+GfhuGek+GetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiLhnpXhn5LhnpHhn4PigIvhnprhnrvhnonhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+IuGelOGfiuGevOGej+Geu+GehOKAi+GelOGekeKAi+GemOGeu+GekyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MDczOTI4MzAwNDQ0OTA5MzIwIj4i4Z6U4Z+K4Z684Z6P4Z674Z6E4oCL4Z6U4Z6R4oCL4Z6U4Z6T4Z+S4Z6R4Z624Z6U4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i4Z6U4Z+K4Z684Z6P4Z674Z6E4oCL4Z6V4Z+S4Z6i4Z624Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLhnpThn4rhnrzhno/hnrvhnoTigIvhnoXhnrbhnoDhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IuGelOGfiuGevOGej+Geu+GehOKAi+GelOGeieGfkuGeiOGelOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLhnpjhn4Hhnorhn4PigIvhnqHhnr7hnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLhnpjhn4Hhnorhn4PigIvhnoXhnrvhn4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLhnpThn4Hhn4fhnorhnrzhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLhnorhn4Thn4figIvhnp/hn4Qg4oCL4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6U4Z6T4Z+S4Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i4Z6U4Z624Z6T4oCL4Z6U4Z+E4Z+H4Z6U4Z6E4Z+L4oCL4Z6A4Z624Z6a4oCL4Z6F4Z624Z6U4Z+L4Z6V4Z+S4Z6K4Z6+4Z6YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IuGekeGemOGfkuGem+GetuGegOGfiyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDhnorhnr7hnpjhn5LhnpThnrjigIvhnpvhnrvhnpThn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4Z6T4Z654Z6E4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4Z6b4Z674Z6U4oCL4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IuGelOGfhOGfh+KAi+GelOGehOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiLhnpvhnrvhnpQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IuGemuGeveGeheGemuGetuGem+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IuGelOGfkuGeiuGevOGemuKAi+GemuGelOGfgOGelCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4iRW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuGeiuGfhOGfh+KAi+KAi+Gen+GfhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpDhno8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i4Z6f4Z+S4Z6E4Z624Z6P4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IuGelOGevuGegOKAi+Gen+GfhuGeoeGfgeGehCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i4Z6f4Z+S4Z6c4Z+C4Z6E4Z6a4Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuGemuGeu+GeieKAi+GeoeGevuGehOKAi+Gem+GevuKAi+GeiuGevuGemOGfkuGelOGeuCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i4Z6a4Z674Z6J4oCL4Z6F4Z674Z+H4Z6A4Z+S4Z6a4Z+E4Z6Y4oCL4Z6f4Z6Y4Z+S4Z6a4Z624Z6U4Z+LIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLhnprhnrvhnonigIvhnpHhn4XigIvhnobhn5Lhnpzhn4HhnoTigIvhnorhnr7hnpjhn5LhnpThnrggPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLhnprhnrvhnonigIvigIvhnpHhn4XigIvhnp/hn5Lhnorhnrbhn4bigIvhnorhnr7hnpjhn5LhnpThnrggPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z+S4Z6a4Z6+4oCL4Z6U4Z6F4Z+S4Z6F4Z674Z6U4Z+S4Z6U4Z6T4Z+S4Z6TIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IuGegOGetuGemuKAi+GeoOGfheKAi+GeluGfgeGem+KAi+GeouGetuGen+Gek+GfkuGekyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IuGel+GfkuGem+GfgeGeheKAi+KAi+Gem+GfhuGek+GetuGfhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4i4Z6b4Z+G4Z6T4Z624Z+G4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6cIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4i4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6cIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+IuGegOGevOGeiiBQSU4g4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6cIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiLhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpjhn5LhnorhnoTigIvhnpHhn4Dhno/igIvhnoDhn5LhnpPhnrvhnoTigIvhnprhnpnhn4jigIvhnpbhn4HhnpsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGenOGet+Gek+GetuGekeGeuOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i4Z6C4Z684Z6a4oCL4Z6b4Z+G4Z6T4Z624Z+G4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6A4Z684Z6KIFBJTiDhnp/hn4rhnrjhnpjigIvhnoDhnrbhno8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IuGelOGeieGfkuGeheGevOGem+KAi+KAi+GegOGevOGeiiBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4i4Z6l4Z6h4Z684Z6c4oCL4Z6f4Z+K4Z644Z6Y4Z6A4Z624Z6P4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4Z6U4Z634Z6R4Z+UIOGelOGeieGfkuGeheGevOGem+KAi+GegOGevOGeiiBQVUsg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6U4Z6T4Z+S4Z6P4Z+UIOGeheGfhuGeluGfhOGfh+KAi+GeluGfkOGej+GfjOGemOGetuGek+KAi+Gem+GemOGfkuGeouGet+Gej+KAi+GekeGetuGegOGfi+GekeGehOKAi+GegOGfkuGemuGeu+GemOGeoOGfiuGeu+Gek+KAi+GelOGeieGfkuGeh+GevOGek+KAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLhnpThnonhn5LhnoXhnrzhnpvigIvhnoDhnrzhnoogUElOIOGeiuGfguGem+KAi+GeheGehOGfi+KAi+GelOGetuGekyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLhnpThnonhn5LhnofhnrbhnoDhn4vigIvhnoDhnrzhnoogUElOIOGeiuGfguGem+KAi+GeheGehOGfi+KAi+GelOGetuGekyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4i4Z6A4Z+G4Z6W4Z674Z6E4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4oCL4Z6f4Z+K4Z644Z6Y4oCL4Z6A4Z624Z6PLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6A4Z684Z6KIFBJTiDhnorhn4LhnpvigIvhnpjhnrbhnpPigIvhnpbhnrgg4Z+kIOGeiuGem+GfiyDhn6gg4Z6b4Z+B4Z6B4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4i4Z6A4Z684Z6KIFBVSyDhnoLhnr3hnprigIvhno/hn4LigIvhnpjhnrbhnpPigIvigIsg4Z+oIOGem+GfgeGegSDhnqzigIvigIvhnoXhn5Lhnprhnr7hnpPigIvhnofhnrbhnoTigIvhnpPhn4Hhn4fhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLhnpThnonhn5LhnoXhnrzhnpvigIvhnoDhnrzhnoogUFVLIOGemOGfkuGeiuGehOKAi+GekeGfgOGej+GflCDhnoDhnrbhnprigIvhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnorhnorhn4LhnpvigIvhnoXhn5Lhnprhnr7hnpPigIvhnorhnrnhnoTigIvhnpPhnrnhnoTigIvhnpThnrfhnpHigIvhnp/hn4rhnrjhnpjigIvhnoDhnrbhno/igIvhnofhnrbigIvhnqLhnoXhnrfhnpPhn5Lhno/hn5Lhnprhn4Phnpnhn43hn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i4Z6A4Z684Z6KIFBJTiDhnpjhnrfhnpPigIvhnorhnrzhnoXigIvhnoLhn5LhnpPhnrYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpvhn4bhnpPhnrbhn4bigIvhnoXhn5Lhnprhnr7hnpPigIvhnpbhn4HhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+EIOGeheGevOGem+KAi+GegOGfkuGek+Geu+GehOKAi+GeguGejuGek+GeuCBHb29nbGUg4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLhnojhn5Lhnpjhn4Thn4figIvhnqLhn5LhnpPhnoDigIvhnpThn5Lhnprhnr4gKOGeouGfiuGeuOKAi+GemOGfieGfguKAi+Gem+KAiykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IuGeluGetuGegOGfkuGemeGen+GemOGfkuGehOGetuGej+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4i4Z6F4Z684Z6bIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLhnojhn5Lhnpjhn4Thn4figIvhnqLhn5LhnpPhnoDhnpThn5Lhnprhnr4g4Z6s4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuGel+GfkuGem+GfgeGeheKAi+GeiOGfkuGemOGfhOGfh+KAi+GeouGfkuGek+GegOGelOGfkuGemuGeviDhnqzigIvhnpbhnrbhnoDhn5LhnpnigIvhnp/hnpjhn5LhnoThnrbhno/hn4vigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoA/XG7hnpjhnr7hnpsgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iIOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IuGegOGfhuGeluGeu+GehOKAi+GeluGet+Gek+Get+Gej+GfkuGemeKAi+GemOGevuGem+KAi+GeguGejuGek+GeuC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z624Z6T4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6A4Z684Z6KIFBJTiDhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpzigIvhnoXhn4bhnpPhnr3hnpMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UXG5cbiDhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpjhn5LhnorhnoTigIvhnpHhn4Dhno/igIvhnoDhn5LhnpPhnrvhnoTigIvhnprhnpnhn4jigIvhnpbhn4HhnpsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Z6c4Z634Z6T4Z624Z6R4Z644Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuGeouGfkuGek+GegOKAi+GelOGetuGek+KAi+GelOGeieGfkuGeheGevOGem+KAi+GeluGetuGegOGfkuGemeKAi+Gen+GemOGfkuGehOGetuGej+Gfi+KAi+GemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhnorhnoThn5Rcblxu4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6Y4Z+S4Z6K4Z6E4oCL4Z6R4Z+A4Z6P4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6a4Z6Z4Z+I4oCL4Z6W4Z+B4Z6bIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGenOGet+Gek+GetuGekeGeuOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLhnqLhn5LhnpPhnoDigIvhnpThnrbhnpPigIvigIvhnoLhnrzhnprigIvhnpvhn4bhnpPhnrbhn4bigIvhnorhn4Thn4figIvhnp/hn4TigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpzigIvhnoXhn4bhnpPhnr3hnpMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UXG5cbuGeluGfkuGemeGetuGemeGetuGemOKAi+GemOGfkuGeiuGehOKAi+GekeGfgOGej+KAi+GegOGfkuGek+Geu+GehOKAi+GemuGemeGfiOKAi+GeluGfgeGemyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhnpzhnrfhnpPhnrbhnpHhnrjhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiLhnqLhn5LhnpPhnoDigIvhnpThnrbhnpPigIvhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnorhn4Thn4figIvhnp/hn4TigIvigIvhnoDhnrvhn4bhnpbhn5LhnpnhnrzhnpHhn5DhnprigIvhnpThnpPhn5LhnpHhn4figIvigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpzigIvhnoXhn4bhnpPhnr3hnpMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UIOGelOGek+GfkuGekeGetuGelOGfi+KAi+GeluGeuOKAi+GegOGetuGemuKAi+GeluGfkuGemeGetuGemeGetuGemOKAi+GemOGet+Gek+KAi+Geh+GfhOGeguGeh+GfkOGemeKAi+KAi+GeheGfkuGemuGevuGek+KAi+Geh+GetuGehCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhnorhnoQg4Z6A4Z674Z+G4Z6W4Z+S4Z6Z4Z684Z6R4Z+Q4Z6a4oCL4Z6U4Z6T4Z+S4Z6R4Z+H4oCL4oCL4Z6T4Z654Z6E4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4Z6A4Z+G4Z6O4Z6P4Z+L4oCL4Z6R4Z+F4oCL4Z6b4Z+G4Z6T4Z624Z+G4Z6K4Z6+4Z6Y4oCL4Z6K4Z684Z6F4oCL4Z6F4Z+B4Z6J4oCL4Z6W4Z644oCL4Z6a4Z+E4Z6E4Z6F4Z6A4Z+S4Z6aIOGeoOGevuGemeKAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GeouGfkuGek+GegOGelOGfkuGemuGevuKAi+Gek+GeueGehOKAi+GelOGetuGej+Gfi+GelOGehOGfi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiLhnqLhn5LhnpPhnoDigIvhnpThnrbhnpPigIvhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnorhn4Thn4figIvhnp/hn4TigIvhnpHhnrzhnprhnp/hn5Dhnpbhn5LhnpHigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpzigIvhnoXhn4bhnpPhnr3hnpMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UIOGelOGek+GfkuGekeGetuGelOGfi+KAi+GeluGeuOKAi+GegOGetuGemuKAi+GeluGfkuGemeGetuGemeGetuGemOKAi+GemOGet+Gek+KAi+Geh+GfhOGeguGeh+GfkOGemeKAi+KAi+GeheGfkuGemuGevuGek+KAi+Geh+GetuGehCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhnorhnoQg4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4oCL4Z6T4Z654Z6E4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4Z6A4Z+G4Z6O4Z6P4Z+L4oCL4Z6R4Z+F4oCL4Z6b4Z+G4Z6T4Z624Z+G4Z6K4Z6+4Z6Y4oCL4Z6K4Z684Z6F4oCL4Z6F4Z+B4Z6J4oCL4Z6W4Z644oCL4Z6a4Z+E4Z6E4Z6F4Z6A4Z+S4Z6aIOGeoOGevuGemeKAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GeouGfkuGek+GegOGelOGfkuGemuGevuKAi+Gek+GeueGehOKAi+GelOGetuGej+Gfi+GelOGehOGfi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z624Z6T4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4Z6A4Z674Z+G4Z6W4Z+S4Z6Z4Z684Z6R4Z+Q4Z6a4oCL4Z6U4Z6T4Z+S4Z6R4Z+H4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6F4Z+G4Z6T4Z694Z6T4oCLIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhnorhnoThn5Qg4Z6A4Z674Z+G4Z6W4Z+S4Z6Z4Z684Z6R4Z+Q4Z6a4oCL4Z6U4Z6T4Z+S4Z6R4Z+H4oCL4Z6T4Z654Z6E4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4Z6A4Z+G4Z6O4Z6P4Z+L4oCL4Z6R4Z+F4oCL4Z6b4Z+G4Z6T4Z624Z+G4Z6K4Z6+4Z6Y4oCL4Z6K4Z684Z6F4oCL4Z6F4Z+B4Z6J4oCL4Z6W4Z644oCL4Z6a4Z+E4Z6E4Z6F4Z6A4Z+S4Z6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z624Z6T4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6F4Z+G4Z6T4Z694Z6TIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhnorhnoThn5Qg4Z6l4Z6h4Z684Z6c4oCL4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4oCL4Z6T4Z654Z6E4oCL4Z6A4Z+G4Z6O4Z6P4Z+L4oCL4Z6R4Z+F4oCL4Z6b4Z+G4Z6T4Z624Z+G4oCL4Z6K4Z6+4Z6Y4oCL4Z6K4Z684Z6F4oCL4Z6F4Z+B4Z6J4oCL4Z6W4Z644oCL4Z6a4Z+E4Z6E4Z6F4Z6A4Z+S4Z6a4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuGeouGfkuGek+GegOKAi+GelOGetuGek+KAi+GeguGevOGemuKAi+Gem+GfhuGek+GetuGfhuKAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+GemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhnorhnoThn5Qg4Z6U4Z6T4Z+S4Z6R4Z624Z6U4Z+L4oCL4Z6W4Z644oCL4Z6A4Z624Z6a4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6YIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGeiuGehOKAi+GemOGet+Gek+KAi+Geh+GfhOGeguGeh+GfkOGemSDhnqLhn5LhnpPhnoDigIvhnpPhnrnhnoTigIvhno/hn5LhnprhnrzhnpzigIvhnpThnrbhnpPigIvhnp/hn5LhnpPhnr7igIvhnrLhn5LhnpnigIvhnorhn4Thn4figIvhnp/hn4TigIvhnoDhnrvhn4bhnpbhn5LhnpnhnrzhnpHhn5DhnprigIvhnpThnpPhn5LhnpHhn4figIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoAg4Z6K4Z+E4Z6Z4oCL4Z6U4Z+S4Z6a4Z6+4oCL4Z6C4Z6O4Z6T4Z644oCL4Z6i4Z+K4Z644Z6Y4Z+C4Z6b4Z+UXG5cbiDhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpjhn5LhnorhnoTigIvhnpHhn4Dhno/igIvhnoDhn5LhnpPhnrvhnoTigIvhnprhnpnhn4jigIvhnpbhn4HhnpsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Z6c4Z634Z6T4Z624Z6R4Z644Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLhnqLhn5LhnpPhnoDigIvhnpThnrbhnpPigIvhnoLhnrzhnprigIvhnpvhn4bhnpPhnrbhn4bigIvhnorhn4Thn4figIvigIvhnp/hn4TigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpzigIvhnoXhn4bhnpPhnr3hnpMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UIOGelOGek+GfkuGekeGetuGelOGfi+KAi+GeluGeuOKAi+GegOGetuGemuKAi+GeluGfkuGemeGetuGemeGetuGemOKAi+GemOGet+Gek+KAi+Geh+GfhOGeguGeh+GfkOGemeKAi+KAi+GeheGfkuGemuGevuGek+Geh+GetuGehCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhnorhnoQg4Z6i4Z+S4Z6T4Z6A4oCL4Z6T4Z654Z6E4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4oCL4Z6f4Z+S4Z6T4Z6+4oCL4Z6y4Z+S4Z6Z4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6K4Z+E4Z6Z4oCL4Z6U4Z+S4Z6a4Z6+4oCL4Z6C4Z6O4Z6T4Z644oCL4Z6i4Z+K4Z644Z6Y4Z+C4Z6b4Z+UXG5cbiDhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpjhn5LhnorhnoTigIvhnpHhn4Dhno/igIvhnoDhn5LhnpPhnrvhnoTigIvhnprhnpnhn4jigIvhnpbhn4HhnpsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Z6c4Z634Z6T4Z624Z6R4Z644Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i4Z6b4Z674Z6U4oCL4Z6F4Z+B4Z6JIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLhnpvhn4HhnoHigIvhnoDhnrzhnoogUElOIOGen+GfiuGeuOGemOKAi+GemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenCDhnqLhn5LhnpPhnoDigIvhno/hn5LhnprhnrzhnpzigIvhnpHhnrbhnoDhn4vhnpHhnoTigIvhnoDhn5LhnprhnrvhnpjhnqDhn4rhnrvhnpPigIvhnpThnonhn5LhnofhnrzhnpPigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDigIvhnqXhnqHhnrzhnpzigIvhnpPhn4Hhn4cg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4Z+UIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiLhnpvhn4HhnoHigIvhnoDhnrzhnoogUElOIOGen+GfiuGeuOGemOKAi+GemOGet+Gek+KAi+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOKAiywg4Z6i4Z+S4Z6T4Z6A4oCL4Z6Y4Z624Z6TIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhnoDhnrbhnprigIvhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnorhn4LhnpvigIvhnpPhn4Xhnp/hnpvhn4vigIvhnpjhnrvhnpPigIvhnpbhn4HhnpvigIvhnqLhn5LhnpPhnoDigIvhno/hn5LhnprhnrzhnpzigIvigIvhnpHhnrbhnoDhn4vhnpHhnoTigIvhnoDhn5LhnprhnrvhnpjigIvhnqDhn4rhnrvhnpPigIvigIvigIvhnpThnonhn5LhnofhnrzhnpPigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDigIvigIsg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4oCL4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z+UIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4i4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6K4oCLIFBJTiDhnp/hn4rhnrjhnpjigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpzigIssIOGeouGfkuGek+GegOKAi+GemOGetuGekyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Z6A4Z624Z6a4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6K4Z+C4Z6b4oCL4Z6T4Z+F4oCL4oCL4Z6f4Z6b4Z+L4oCL4Z+UIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiLhnp/hn4rhnrjhnpjigIvhnpjhnrfhnpPigIvhnqLhnrbhnoXigIvhnpThn5Lhnprhnr7igIvhnpThnrbhnpPhn5Qg4Z6R4Z624Z6A4Z+L4Z6R4Z6E4oCL4Z6A4Z+S4Z6a4Z674Z6Y4Z6g4Z+K4Z674Z6T4oCL4Z6U4Z6J4Z+S4Z6H4Z684Z6T4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4Z+UIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLhnpvhn4HhnoHigIvhnoDhnrzhnoogUFVLIOGen+GfiuGeuOGemOKAi+GemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenCwg4Z6i4Z+S4Z6T4Z6A4oCL4Z6Y4Z624Z6TIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhnoDhnrbhnprigIvhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnorhn4LhnpvigIvhnpPhn4XigIvhnp/hnpvhn4sg4Z6Y4Z674Z6T4oCL4Z6W4Z+B4Z6b4oCL4Z6f4Z+K4Z644Z6Y4oCL4oCL4Z6A4Z+S4Z6b4Z624Z6Z4oCL4Z6H4Z624oCL4Z6Y4Z634Z6T4oCL4Z6i4Z624Z6F4oCL4Z6U4Z+S4Z6a4Z6+4oCL4Z6U4Z624Z6T4oCL4Z6H4Z624oCL4Z6i4Z6F4Z634Z6T4Z+S4Z6P4Z+S4Z6a4Z+D4Z6Z4Z+N4oCL4Z+UIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4i4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6KIFBVSyDhnp/hn4rhnrjhnpjigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpwsIOGeouGfkuGek+GegOKAi+GemOGetuGekyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Z6A4Z624Z6a4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6K4Z+C4Z6b4oCL4Z6T4Z+F4oCL4Z6f4Z6b4Z+LIOGemOGeu+Gek+KAi+GeluGfgeGem+KAi+Gen+GfiuGeuOGemOKAi+KAi+GegOGfkuGem+GetuGemeKAi+Geh+GetuKAi+GemOGet+Gek+KAi+GeouGetuGeheKAi+GelOGfkuGemuGevuKAi+GelOGetuGek+KAi+Geh+GetuKAi+GeouGeheGet+Gek+GfkuGej+GfkuGemuGfg+GemeGfjeKAi+GflCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4i4Z6U4Z624Z6T4oCL4Z6U4Z6a4Z624Z6H4Z+Q4Z6Z4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6A4Z624Z6a4oCL4Z6U4Z+S4Z6a4Z6P4Z634Z6U4Z6P4Z+S4Z6P4Z634oCL4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6KIFBJTiDhnp/hn4rhnrjhnpghIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiLhnpThnrbhnpPigIvhnpThnprhnrbhnofhn5DhnpnigIvhnoDhn5LhnpPhnrvhnoTigIvhnoDhnrbhnprigIvhnpThn5Lhnprhno/hnrfhnpThno/hn5Lhno/hnrfigIvigIvhnpvhn4HhnoHigIvhnoDhnrzhnoogUFVLIOGen+GfiuGeuOGemCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i4Z6U4Z624Z6T4oCL4Z6R4Z6R4Z694Z6b4oCL4Z6Z4Z6A4oCL4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6K4oCLISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IuGelOGfiuGevOGej+Geu+GehOKAi+GelOGekeKAi+GemOGeu+GekyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IuGelOGfiuGevOGej+Geu+GehOKAi+GelOGekeKAi+GelOGek+GfkuGekeGetuGelOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiLhnpThn4rhnrzhno/hnrvhnoTigIvhnpXhn5LhnqLhnrbhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiLhnpThn4rhnrzhno/hnrvhnoTigIvhnoXhnrbhnoDhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjMwODQxNzkzMjQ4MTA1NzU3ODciPiLhnpThn4rhnrzhno/hnrvhnoTigIvhnpThnonhn5LhnojhnpThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6f4Z+B4Z6c4Z624oCL4Z+UIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAppbmRleCBkZmFjMTA2Li4yYTcyMDBjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTiDsvZTrk5wg7J6F66ClIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIOuwjyDsg4ggUElOIOy9lOuTnCDsnoXroKUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyDsvZTrk5wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IuyDiCBQSU4g7L2U65OcIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iU0lNIFBVSyDrsI8g7IOIIFBJTiDsvZTrk5wg7J6F66ClIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJTSU0gUFVLIOy9lOuTnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4i7IOIIFNJTSBQSU4g7L2U65OcIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i67mE67CA67KI7Zi466W8IOyeheugpe2VmOugpOuptCDthLDsuZgiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLsnqDquIgg7ZW07KCc7ZWY66Ck66m0IOu5hOuwgOuyiO2YuCDsnoXroKUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLsnqDquIjsnYQg7ZW07KCc7ZWY66Ck66m0IFBJTiDsnoXroKUiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i7J287Iuc7KSR7KeAIOuyhO2KvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i7J6s7IOdIOuyhO2KvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i7KSR7KeAIOuyhO2KvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLsoovslYTsmpQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLsi6vslrTsmpQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLtlZjtirgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiLqs4Tsho3tlZjroKTrqbQg7J6g6riI7ZW07KCc7ZWp64uI64ukLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IuyLpO2WiSDst6jshozrkKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4i7IKt7KCc7ZWY66Ck66m0IDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+7J2EKOulvCkg65Oc66Gt7ZWp64uI64ukLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPuydgCjripQpIOyCreygnOuQmOyngCDslYrsirXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLsm5DtlZjripQgUElOIOy9lOuTnCDsnoXroKUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i7JuQ7ZWY64qUIFBJTiDsvZTrk5wg7ZmV7J24Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJTSU0g7Lm065OcIOyeoOq4iO2VtOygnCDspJEuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJQSU4g7L2U65Oc6rCAIOyemOuqu+uQmOyXiOyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiI0fjjsnpDrpqwg7Iir7J6Q66GcIOuQnCBQSU7snYQg7J6F66Cl7ZWY7IS47JqULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDsvZTrk5zripQgOOyekOumrCDsnbTsg4HsnZgg7Iir7J6Q7Jes7JW8IO2VqeuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLsmKzrsJTrpbggUFVLIOy9lOuTnOulvCDri6Tsi5wg7J6F66Cl7ZWY7IS47JqULiDsnoXroKXsnYQg67CY67O17ZW07IScIOyLnOuPhO2VmOuptCBTSU3snYQg7JiB6rWs7KCB7Jy866GcIOyCrOyaqe2VoCDsiJgg7JeG6rKMIOuQqeuLiOuLpC4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuyeoOq4iO2VtOygnCDtjKjthLTsnYQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7tmowg7J6Y66q7IOq3uOuguOyKteuLiOuLpC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7tmowg642UIOyLpO2MqO2VmOuptCDsnbTrqZTsnbwg6rOE7KCV7J2EIOyCrOyaqe2VmOyXrCDtnLTrjIDsoITtmZTrpbwg7J6g6riI7ZW07KCc7ZW07JW8IO2VqeuLiOuLpC5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+7LSIIO2bhOyXkCDri6Tsi5wg7Iuc64+E7ZW0IOyjvOyEuOyalC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLsgq3soJwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlNJTSBQSU4g7L2U65Oc6rCAIOyemOuqu+uQmOyXiOyKteuLiOuLpC4g7J2064+Z7Ya17Iug7IKs7JeQIOusuOydmO2VmOyXrCDquLDquLDrpbwg7J6g6riIIO2VtOygnO2VtOyVvCDtlanri4jri6QuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJTSU0gUElOIOy9lOuTnOqwgCDsnpjrqrvrkJjsl4jsirXri4jri6QuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPu2ajCDsnbTsg4Eg7Iuk7Yyo7ZWgIOqyveyasCDsnbTrj5nthrXsi6Dsgqzsl5Ag66y47J2Y7ZWY7JesIOq4sOq4sOulvCDsnqDquIgg7ZW07KCc7ZW07JW8IO2VqeuLiOuLpC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJTSU0gUElOIOy9lOuTnOqwgCDsnpjrqrvrkJjsl4jsirXri4jri6QuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuuyiOydmCDquLDtmozqsIAg64Ko7JWY7Iq164uI64ukLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lN7J2EIOyCrOyaqe2VoCDsiJgg7JeG7Iq164uI64ukLiDsnbTrj5nthrXsi6Dsgqzsl5Ag66y47J2Y7ZWY7IS47JqULiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iU0lNIFBVSyDsvZTrk5zqsIAg7J6Y66q765CY7JeI7Iq164uI64ukLiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7tmowg7J207IOBIOyLpO2MqO2VoCDqsr3smrAgU0lN7J2EIOyZhOyghO2eiCDsgqzsmqntlaAg7IiYIOyXhuyKteuLiOuLpC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJTSU0gUFVLIOy9lOuTnOqwgCDsnpjrqrvrkJjsl4jsirXri4jri6QuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPu2ajCDsnbTsg4Eg7Iuk7Yyo7ZWgIOqyveyasCBTSU3snYQg7JmE7KCE7Z6IIOyCrOyaqe2VoCDsiJgg7JeG7Iq164uI64ukLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iU0lNIFBJTiDsnpHsl4XsnbQg7Iuk7Yyo7ZaI7Iq164uI64ukLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iU0lNIFBVSyDsnpHsl4XsnbQg7Iuk7Yyo7ZaI7Iq164uI64ukLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLsvZTrk5wg7Iq57J24IOyZhOujjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IuydtOyghCDtirjrnpkg67KE7Yq8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i64uk7J2MIO2KuOuemSDrsoTtirwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i7J287Iuc7KSR7KeAIOuyhO2KvCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjMTAxODEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLgup7gurTguqHguqXgurDguqvgurHgupQgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4i4Lqb4Lqw4LuA4Lqe4LqUIFBVSyDguoLguq3guocgU0lNIOC7geC6peC6sOC6peC6sOC6q+C6seC6lCBQSU4g4LuD4Lud4LuIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiLguqXgurDguqvgurHgupQgUFVLIOC6guC6reC6hyBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+IuC6peC6sOC6q+C6seC6lCBQSU4g4LuD4Lud4LuI4LqC4Lqt4LqHIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IuC7geC6leC6sOC7gOC6nuC6t+C7iOC6reC6nuC6tOC6oeC6peC6sOC6q+C6seC6lOC6nOC7iOC6suC6mSI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IuC6nuC6tOC6oeC6peC6sOC6q+C6seC6lOC7gOC6nuC6t+C7iOC6reC6m+C6u+C6lOC6peC6seC6reC6gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuC6nuC6tOC6oeC6peC6sOC6q+C6seC6lCBQSU4g4LuA4Lqe4Lq34LuI4Lqt4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4Lql4Lqw4Lqr4Lqx4LqUIFBJTiDguprgu43gu4jgupbgurfguoHgupXgu4nguq3guocuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+IuC7gOC6nuC6t+C7iOC6reC6m+C6u+C6lOC6peC6seC6reC6gSwg4LuD4Lqr4LuJ4LqB4Lq74LqU4LuA4Lqh4LqZ4Lq5IOC7geC6peC7ieC6p+C6geC6u+C6lCAwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLguoTguqfgurLguqHgup7gurDguo3gurLguo3gurLguqHgupvgurvgupTguqXgurHguq3guoHgupTgu4nguqfguo3gu5zgu4ngurLgupngurHgu4ngupkg4LuA4LqB4Lq14LqZ4LqI4Lqz4LqZ4Lqn4LqZ4LqX4Lq14LuI4LqB4Lqz4LqZ4Lq74LqU4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiLguqrgurLguoHgu4DgupXgurHguqHgu4HguqXgu4nguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IuC6geC6s+C6peC6seC6h+C6quC6suC6gSwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IuC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iOC6reC6uOC6m+C6sOC6geC6reC6meC6quC6suC6geC6guC6reC6h+C6l+C7iOC6suC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+IuC6geC6u+C6lOC7gOC6oeC6meC6ueC7gOC6nuC6t+C7iOC6reC6m+C6u+C6lOC6peC6seC6reC6gS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+IuC7gOC6hOC6t+C6reC6guC7iOC6suC6jeC6luC6t+C6geC6peC6seC6reC6gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0OTQ5ODA1NjEzMDQyMTE5MzEiPiLguprgu43gu4jguqHgurXguorgurTguqHguoHgurLgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4i4Lqa4LuN4LuI4Lqh4Lq14LqK4Lq04Lqh4LqB4Lqy4LqU4LuD4LqZ4LuB4LqX4Lqx4Lqa4LuA4Lql4Lqx4LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDgxMTEwMzk1NTA4NjM3NjQzIj4i4Lqa4LuN4LuI4Lqh4Lq14LqK4Lq04Lqh4LqB4Lqy4LqU4Lqi4Lq54LuI4LuD4LqZ4LuC4LqX4Lql4Lqw4Lqq4Lqx4LqaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiLgu4Pguqrgu4ggU0lNIGNhcmQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4i4Lqa4LuN4LuI4Lqe4Lq74Lqa4LuA4Lqr4Lqx4LqZ4LqK4Lq04Lqh4LqB4Lqy4LqUIOC6q+C6vOC6t+C6muC7jeC7iOC6quC6suC6oeC6suC6lOC6reC7iOC6suC6meC6iuC6tOC6oeC6geC6suC6lOC7hOC6lOC7iS4g4LqB4Lqw4Lql4Lq44LqZ4Lqy4LuD4Lqq4LuI4LqK4Lq04Lqh4LqB4Lqy4LqU4LuD4Lud4LuILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiJTSU0gY2FyZCDguprgu43gu4jguqrgurLguqHgurLgupTgu4Pguorgu4ngu4TgupTgu4kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1ODkyOTQwOTA5Njk5NzIzNTQ0Ij4iU0lNIGNhcmQg4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4LqW4Lq34LqB4Lqb4Lq04LqU4LqB4Lqy4LqZ4LqZ4Lqz4LuD4LqK4LuJ4Lqi4LuI4Lqy4LqH4LqW4Lqy4Lqn4Lqt4LqZ4LuB4Lql4LuJ4LqnLlxuIOC6leC6tOC6lOC6leC7jeC7iOC6nOC6ueC7iOC7g+C6q+C7ieC6muC7jeC6peC6tOC6geC6suC6meC6peC6sOC6muC6u+C6muC6guC6reC6h+C6l+C7iOC6suC6meC7gOC6nuC6t+C7iOC6reC6guC7jSBTSU0gY2FyZCDgu4Pgu53gu4guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IuC6iuC6tOC6oeC6geC6suC6lOC6luC6t+C6geC6peC6seC6reC6gS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IuC6iuC6tOC6oeC6geC6suC6lOC6luC6t+C6geC6peC6seC6reC6geC6lOC7ieC6p+C6jeC6peC6sOC6q+C6seC6lCBQVUsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiLguoHgurPguqXgurHguofgupvgurvgupTguqXgurHguq3guoHguorgurTguqHguoHgurLgupQuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuIOC6p+C6tOC6lOC7gOC6iOC6seC6lCAlMiRkIOC6iOC6suC6geC6l+C6seC6h+C7neC6u+C6lCAlMyRkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiLgu4Dgup7gurXgu4jguqHguqfgurTgupTgu4DguojgurHgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IuC6q+C6p+C7iOC6suC6h+C7gOC6m+C6u+C7iOC6siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4i4LqC4Lqw4Lqr4LqN4Lqy4LqN4Lqe4Lq34LuJ4LqZ4LqX4Lq14LuI4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IuC6q+C6jeC7jeC7ieC6nuC6t+C7ieC6meC6l+C6teC7iOC6m+C6u+C6lOC6peC6seC6reC6geC7geC6peC7ieC6py4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDguqfgurTgupTgu4DguojgurHgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+IuC7guC6leC7gOC6peC6t+C6reC6geC6guC6reC6h+C6nOC6ueC7iOC7g+C6iuC7iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IuC6quC6sOC6luC6suC6meC6sCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+IuC6geC7ieC6reC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiLguoHgurLgupnguoTguqfguprguoTgurjguqHguqrgurfgu4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+IuC6geC6suC6meC6iOC6seC6lOC6ruC6veC6h+C6p+C6tOC7gOC6iOC6seC6lOC7g+C7neC7iOC7gOC6peC6teC7iOC6oeC6leC6u+C7ieC6meC7geC6peC7ieC6py4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLguoHgurLgupnguojgurHgupTguq7gur3guofguqfgurTgupTgu4DguojgurHgupTguoTgurfgupngu4Pgu53gu4jguqrgurPgu4DguqXgurHgupTgu4HguqXgu4nguqcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiLguqXgurbguprguqfgurTgupTgu4DguojgurHgupQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IuC6guC6sOC6q+C6jeC6suC6jeC6guC6reC6muC7gOC6guC6lOC6m+C6u+C6lOC6peC6seC6reC6gS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiLguoHgurLgupngupvgurvgupTguqXgurHguq3guoHgupTgu4nguqfguo3guoHgurLgupngu4DguqXgurfgu4jguq3gupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLgupvgurvgupTguqXgurHguq3guoHgupTgu4nguqfguo3guq7gurnguprgu4HguprgupouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiLgupvgurvgupTguqXgurHguq3guoHgupTgu4nguqfguo3gu5zgu4ngurIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+IuC6m+C6u+C6lOC6peC6seC6reC6geC6lOC7ieC6p+C6jSBQSU4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i4LqB4Lqy4LqZ4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4LqU4LuJ4Lqn4LqN4Lql4Lqw4Lqr4Lqx4LqU4Lqc4LuI4Lqy4LqZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+IuC6nuC6t+C7ieC6meC6l+C6teC7iOC6ruC6ueC6muC7geC6muC6mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4i4LuA4Lql4Lq34LuI4Lqt4LqZ4Lqe4Lq34LuJ4LqZ4LqX4Lq14LuILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIxMzM3Mjg2NTM4MzE4NTQzNTU1Ij4i4Lqb4Lq44LuI4Lqh4LuA4Lqe4LqH4LqB4LuI4Lqt4LqZ4Luc4LuJ4LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiLgupvgurjgu4jguqHgu4Dgup7guofgupXgu43gu4jgu4TgupsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLgupvgurjgu4jguqHguqLgurjgupTguorgurvgu4jguqfguoTgurLguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IuC6m+C6uOC7iOC6oeC6q+C6vOC6tOC7ieC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i4Lqb4Lq44LuI4Lqh4Lqi4Lq44LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IuC7gOC6peC6t+C7iOC6reC6meC6meC6tOC7ieC6p+C7guC6m+C7ieC6guC6tuC7ieC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IuC7gOC6peC6t+C7iOC6reC6meC6meC6tOC7ieC6p+C7guC6m+C7ieC6peC6u+C6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IuC6q+C6u+C6p+C7g+C6iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IuC6m+C6u+C6lOC6peC6seC6reC6geC7gOC6nuC6t+C7iOC6reC6lOC6s+C7gOC6meC6teC6meC6geC6suC6meC6leC7jeC7iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IuC6geC6suC6meC7gOC6m+C6teC6lOC7g+C6iuC7ieC6luC6t+C6geC6jeC6u+C6geC7gOC6peC6teC6gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLguqfgurLguocgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4LuA4Lqe4Lq34LuI4Lqt4Lql4Lq24LqaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDguojgurDguprgu43gu4jgupbgurfguoHguqXgurbguprguq3guq3guoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4i4LqN4Lq74LqB4LuA4Lql4Lq14LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+IuC6peC6tuC6miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4i4LuB4Lql4LuJ4Lqn4LuGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4i4Lqb4LuI4Lq94LqZ4Lqu4Lq54Lqa4LuB4Lqa4LqaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJFbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IuC6geC7ieC6reC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLgupvgurTgupTguqrgur3guociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i4LuA4Lqb4Lq14LqU4Lqq4Lq94LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLguorguq3guoHguqvgurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i4LuA4Lql4Lq34LuI4Lqt4LqZ4LqC4Lq24LuJ4LqZ4LuA4Lqe4Lq34LuI4LqtIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiLgu4DguqXgurfgu4jguq3gupnguqXgurvguofgu4Dgup7gurfgu4jguq0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuC7gOC6peC6t+C7iOC6reC6meC7hOC6m+C6l+C6suC6h+C6iuC7ieC6suC6jeC7gOC6nuC6t+C7iOC6rSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IuC7gOC6peC6t+C7iOC6reC6meC7hOC6m+C6l+C6suC6h+C6guC6p+C6suC7gOC6nuC6t+C7iOC6rSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiLgupzgurngu4jgu4Pguorgu4ngupvgurHgupTguojgurjguprgurHgupkgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+IC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IuC6geC6suC6meC7guC6l+C6quC6uOC6geC7gOC6quC6teC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IuC6peC6t+C6oeC6ruC6ueC6muC7geC6muC6muC6m+C6u+C6lOC6peC6seC6reC6gT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IuC6ruC6ueC6muC7geC6muC6muC6nOC6tOC6lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IuC6peC6sOC6q+C6seC6lOC6nOC7iOC6suC6meC6muC7jeC7iOC6luC6t+C6geC6leC7ieC6reC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiLguqXgurDguqvgurHgupQgUElOIOC6nOC6tOC6lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4i4Lql4Lqt4LqH4LuD4Lud4LuI4LuD4LqZ4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDguqfgurTgupngurLgupfgurUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiLgu4HgupXgu4nguqHguq7gurnguprgu4HguprguprgupvgurvgupTguqXgurHguq3guoHguoLguq3guofgupfgu4jgurLgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiLgu4Pguqrgu4jguqXgurDguqvgurHgupQgUElOIOC6guC6reC6h+C6iuC6tOC6oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4i4LuD4Lqq4LuI4Lql4Lqw4Lqr4Lqx4LqUIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiLgu4Pguqrgu4jguqXgurDguqvgurHgupTgupzgu4jgurLgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiLguorgurTguqHgupbgurfguoHgupvgurTgupTguoHgurLgupngupngurPgu4Pguorgu4ngu4HguqXgu4nguqcuIOC6m+C7ieC6reC6meC6peC6sOC6q+C6seC6lCBQVUsg4LuA4Lqe4Lq34LuI4Lqt4LqU4Lqz4LuA4LqZ4Lq14LqZ4LqB4Lqy4LqZ4LqV4LuN4LuILiDgupXgurTgupTgupXgu43gu4jgupzgurngu4jgu4Pguqvgu4nguprgu43guqXgurTguoHgurLgupnguqrgurPguqXgurHguprguqXgurLguo3guqXgurDguq3gur3gupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IuC7g+C6quC7iOC6peC6sOC6q+C6seC6lCBQSU4g4LqX4Lq14LuI4LqV4LuJ4Lqt4LqH4LqB4Lqy4LqZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLguqLgurfgupnguqLgurHgupnguqXgurDguqvgurHgupQgUElOIOC6l+C6teC7iOC6leC7ieC6reC6h+C6geC6suC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4i4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqBIFNJTSBjYXJkLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4Lqe4Lq04Lqh4Lql4Lqw4Lqr4Lqx4LqUIFBJTiDguoTguqfgurLguqHguo3gurLguqcgNCDgu4DgupbgurTguocgOCDgu4LgupXgu4DguqXguoEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4i4Lql4Lqw4Lqr4Lqx4LqUIFBVSyDguoTguqfgupnguqHgurXguqLgu4jgurLguofgu5zgu4nguq3guo0gOCDgu4LgupXgu4DguqXguoEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4Lqb4LuJ4Lqt4LqZ4Lql4Lqw4Lqr4Lqx4LqUIFBVSyDgupfgurXgu4jgupbgurfguoHgupXgu4nguq3guofguoTgurfgupngu4Pgu53gu4guIOC6geC6suC6meC6nuC6sOC6jeC6suC6jeC6suC6oeC7g+C6quC7iOC6q+C6vOC6suC6jeC7gOC6l+C6t+C7iOC6reC6iOC6sOC7gOC6ruC6seC6lOC7g+C6q+C7ieC6iuC6tOC6oeC6geC6suC6lOC7g+C6iuC7ieC6muC7jeC7iOC7hOC6lOC7ieC6luC6suC6p+C6reC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i4Lql4Lqw4Lqr4Lqx4LqUIFBJTiDguprgu43gu4jguoHgurvguofguoHgurHgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLgu4HgupXgu4nguqHguq7gurnguprgu4HguprguprgupvgurvgupTguqXgurHguq3guoHguqvgurzgurLguo3gu4DguoHgurXgupngu4TgupsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i4LuA4Lqe4Lq34LuI4Lqt4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqBLCDgu4DguoLgurvgu4ngurLguqrgurngu4jguqXgurDguprgurvguprgupTgu4nguqfguo3guprgurHgupnguorgurUgR29vZ2xlIOC6guC6reC6h+C6l+C7iOC6suC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+IuC6iuC6t+C7iOC6nOC6ueC7iOC7g+C6iuC7iSAo4Lqt4Lq14LuA4Lqh4LqnKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i4Lql4Lqw4Lqr4Lqx4LqU4Lqc4LuI4Lqy4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiLgu4DguoLgurvgu4ngurLguqrgurngu4jguqXgurDguprgurvgupoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+IuC6iuC6t+C7iOC6nOC6ueC7iOC7g+C6iuC7iSDguqvgurzgurfguqXgurDguqvgurHgupTgupzgu4jgurLgupnguprgu43gu4jgupbgurfguoHgupXgu4nguq3guocuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuC6peC6t+C6oeC6iuC6t+C7iOC6nOC6ueC7iOC7g+C6iuC7iSDguqvgurzgurfguqXgurDguqvgurHgupTgupzgu4jgurLgupnguoLguq3guofgupfgu4jgurLgupnguprgu43gu4g/XG7gu4TgupvgupfgurXgu4ggIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IuC6geC6s+C6peC6seC6h+C6geC6p+C6lOC6quC6reC6muC6muC6seC6meC6iuC6tS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4LqX4LuI4Lqy4LqZ4Lqe4Lq04Lqh4Lql4Lqw4Lqr4Lqx4LqUIFBJTuKAiyDguoLguq3guofgupfgu4jgurLgupngupzgurTgupQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4Lqt4LuB4Lql4LuJ4LqnLiBcblxu4LqB4Lqw4Lql4Lq44LqZ4Lqy4Lql4Lqt4LqH4LuD4Lud4LuI4LuD4LqZ4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC6p+C6tOC6meC6suC6l+C6tS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i4LqX4LuI4Lqy4LqZ4Lqe4Lq04Lqh4Lql4Lqw4Lqr4Lqx4LqU4Lqc4Lq04LqUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC7geC6peC7ieC6py4gXG5cbuC6peC6reC6h+C7g+C7neC7iOC7g+C6meC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDguqfgurTgupngurLgupfgurUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuC6l+C7iOC6suC6meC7geC6leC7ieC6oeC6ruC6ueC6muC7geC6muC6muC6m+C6u+C6lOC6peC6seC6reC6geC6guC6reC6h+C6l+C7iOC6suC6meC6nOC6tOC6lCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3gu4HguqXgu4nguqcuIFxuXG7guoHgurDguqXgurjgupngurLguqXguq3guofgu4Pgu53gu4jgu4Pgupnguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Lqn4Lq04LqZ4Lqy4LqX4Lq1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IuC6l+C7iOC6suC6meC7hOC6lOC7ieC6nuC6sOC6jeC6suC6jeC6suC6oeC6m+C6u+C6lOC6peC6seC6reC6geC7geC6l+C6seC6muC7gOC6peC6seC6lOC6muC7jeC7iOC6quC6s+C7gOC6peC6seC6lCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3gu4HguqXgu4nguqcuIOC6q+C6vOC6seC6h+C6iOC6suC6geC6hOC6p+C6suC6oeC6nuC6sOC6jeC6suC6jeC6suC6oeC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq0g4LuB4LqX4Lqx4Lqa4LuA4Lql4Lqx4LqU4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4LqI4Lqw4LqW4Lq34LqB4LqV4Lqx4LuJ4LqHIOC7g+C6q+C7ieC6geC6seC6muC7hOC6m+C7g+C6iuC7ieC6hOC7iOC6suC7gOC6peC6teC7iOC6oeC6leC6u+C7ieC6meC6iOC6suC6geC7guC6ruC6h+C6h+C6suC6meC6hOC6t+C6meC7g+C7neC7iCDgu4HguqXgurDguoLgu43gu4nguqHgurngupngupzgurngu4jgu4Pguorgu4ngupfgurHguofgu53gurvgupTguojgurDguqrgurngupnguqvgurLguo3gu4TgupsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IuC6l+C7iOC6suC6meC7hOC6lOC7ieC6nuC6sOC6jeC6suC6jeC6suC6oeC6m+C6u+C6lOC6peC6seC6reC6geC7guC6l+C6peC6sOC6quC6seC6muC6muC7jeC7iOC6quC6s+C7gOC6peC6seC6lCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3gu4HguqXgu4nguqcuIOC6q+C6vOC6seC6h+C6iOC6suC6geC6hOC6p+C6suC6oeC6nuC6sOC6jeC6suC6jeC6suC6oeC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq0g4LuC4LqX4Lql4Lqw4Lqq4Lqx4Lqa4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4LqI4Lqw4LqW4Lq34LqB4LqV4Lqx4LuJ4LqHIOC7g+C6q+C7ieC6geC6seC6muC7hOC6m+C7g+C6iuC7ieC6hOC7iOC6suC7gOC6peC6teC7iOC6oeC6leC6u+C7ieC6meC6iOC6suC6geC7guC6ruC6h+C6h+C6suC6meC6hOC6t+C6meC7g+C7neC7iCDgu4HguqXgurDguoLgu43gu4nguqHgurngupngupzgurngu4jgu4Pguorgu4ngupfgurHguofgu53gurvgupTguojgurDguqrgurngupnguqvgurLguo3gu4TgupsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiLgupfgu4jgurLgupngu4TgupTgu4ngup7gurDguo3gurLguo3gurLguqHgupvgurvgupTguqXgurHguq3guoHgu4HgupfgurHguprgu4DguqXgurHgupTguprgu43gu4jguqrgurPgu4DguqXgurHgupQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC7geC6peC7ieC6py4g4LqV4Lqt4LqZ4LqZ4Lq14LuJ4LuB4LqX4Lqx4Lqa4LuA4Lql4Lqx4LqU4LqI4Lqw4LqW4Lq34LqB4LqV4Lqx4LuJ4LqH4LuD4Lqr4LuJ4LqB4Lqx4Lqa4LuE4Lqb4LuD4LqK4LuJ4LqE4LuI4Lqy4LuA4Lql4Lq14LuI4Lqh4LqV4Lq74LuJ4LqZ4LqI4Lqy4LqB4LuC4Lqu4LqH4LqH4Lqy4LqZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IuC6l+C7iOC6suC6meC7hOC6lOC7ieC6nuC6sOC6jeC6suC6jeC6suC6oeC6m+C6u+C6lOC6peC6seC6reC6geC7guC6l+C6peC6sOC6quC6seC6muC6muC7jeC7iOC6luC6t+C6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4Lqt4LuB4Lql4LuJ4LqnLiDgupXguq3gupngupngurXgu4ngu4LgupfguqXgurDguqrgurHguprguojgurDgupbgurfguoHguqPgurXgu4DguorgurHgupTgu4DgupvgurHgupnguoTgu4jgurLguojgurLguoHgu4Lguq7guofguofgurLgupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuC6l+C7iOC6suC6meC7geC6leC7ieC6oeC6ruC6ueC6muC7geC6muC6muC6m+C6u+C6lOC6peC6seC6reC6geC6nOC6tOC6lCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3gu4HguqXgu4nguqcuIOC6q+C6vOC6seC6h+C6iOC6suC6geC7geC6leC7ieC6oeC6nOC6tOC6lOC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq0sIOC6l+C7iOC6suC6meC6iOC6sOC6luC6t+C6geC6luC6suC6oeC7g+C6q+C7ieC6m+C6u+C6lOC6peC6seC6reC6geC7geC6l+C6seC6muC7gOC6peC6seC6lOC6guC6reC6h+C6l+C7iOC6suC6mSDgupTgu4nguqfguo3guoHgurLgupngu4DguoLgurvgu4ngurLguqrgurngu4jguqXgurDguprgurvguprgu4LgupTguo3gu4Pguorgu4nguq3gurXgu4DguqHguqfguoLguq3guofgupfgu4jgurLgupkuXG5cbiDguoHgurDguqXgurjgupngurLguqXguq3guofgu4Pgu53gu4jguq3gurXguoHguoTgurHgu4nguofgu4Pgupnguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Lqn4Lq04LqZ4Lqy4LqX4Lq1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4LqX4LuI4Lqy4LqZ4LuB4LqV4LuJ4Lqh4Lqu4Lq54Lqa4LuB4Lqa4Lqa4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4Lqc4Lq04LqUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC7geC6peC7ieC6py4g4Lqr4Lq84Lqx4LqH4LqI4Lqy4LqB4LqE4Lqn4Lqy4Lqh4Lqe4Lqw4LqN4Lqy4LqN4Lqy4Lqh4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6rSDgupfgu4jgurLgupnguojgurDgupbgurfguoHgupbgurLguqHgu4Pguqvgu4ngupvgurvgupTguqXgurHguq3guoHgu4LgupfguqXgurDguqrgurHguprguoLguq3guofgupfgu4jgurLgupngupTgu4nguqfguo3guprgurHgupnguorgurXguq3gurXgu4DguqHguqcuXG5cbiDguqXguq3guofgu4Pgu53gu4jguq3gurXguoHguoTgurHgu4nguofgu4PgupkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Lqn4Lq04LqZ4Lqy4LqX4Lq1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IuC6peC6tuC6muC6reC6reC6gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i4Lql4Lqw4Lqr4Lqx4LqUIFBJTiDguoLguq3guocgU0lNIOC6muC7jeC7iOC6luC6t+C6geC6leC7ieC6reC6h+C6l+C7iOC6suC6meC6leC7ieC6reC6h+C6leC6tOC6lOC6leC7jeC7iOC6q+C6suC6nOC6ueC7iOC7g+C6q+C7ieC6muC7jeC6peC6tOC6geC6suC6mSDgu4Dgup7gurfgu4jguq3gupvgurvgupTguqXgurHguq3guoHguq3gurjgupvgurDguoHguq3gupnguoLguq3guofgupfgu4jgurLgupkuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiLguqXgurDguqvgurHgupQgUElOIOC6guC6reC6hyBTSU0g4Lqa4LuN4LuI4LqW4Lq34LqB4LqV4LuJ4Lqt4LqHLCDgupfgu4jgurLgupnguqrgurLguqHgurLgupTguqXguq3guofgu4TgupTgu4nguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC6geC7iOC6reC6meC6l+C6teC7iOC6l+C7iOC6suC6meC6iOC6sOC6leC7ieC6reC6h+C6leC6tOC6lOC6leC7jeC7iOC6q+C6suC6nOC6ueC7iOC7g+C6q+C7ieC6muC7jeC6peC6tOC6geC6suC6meC6guC6reC6h+C6l+C7iOC6suC6mSDgu4Dgup7gurfgu4jguq3gupvgurvgupTguqXgurHguq3guoHguq3gurjgupvgurDguoHguq3gupnguoLguq3guofgupfgu4jgurLgupkuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4i4Lql4Lqw4Lqr4Lqx4LqUIFBJTiDguoLguq3guocgU0lNIOC6muC7jeC7iOC6luC6t+C6geC6leC7ieC6reC6hywg4LqX4LuI4Lqy4LqZ4Lqq4Lqy4Lqh4Lqy4LqU4Lql4Lqt4LqH4LuE4LqU4LuJ4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq0uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0g4LuD4LqK4LuJ4Lqa4LuN4LuI4LuE4LqU4LuJ4LuB4Lql4LuJ4LqnLiDguoHgurDguqXgurjgupngurLgupXgurTgupTgupXgu43gu4jguqvgurLgupzgurngu4jgu4Pguqvgu4nguprgu43guqXgurTguoHgurLgupnguoLguq3guofgupfgu4jgurLgupkuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLguqXgurDguqvgurHgupQgUFVLIOC6guC6reC6hyBTSU0g4Lqa4LuN4LuI4LqW4Lq34LqB4LqV4LuJ4Lqt4LqHLCDgupfgu4jgurLgupnguqrgurLguqHgurLgupTguqXguq3guofgu4TgupTgu4nguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC6geC7iOC6reC6meC6l+C6teC7iCBTSU0g4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4LqI4Lqw4LuD4LqK4LuJ4Lqa4LuN4LuI4LuE4LqU4LuJ4Lqi4LuI4Lqy4LqH4LqW4Lqy4Lqn4Lqt4LqZLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IuC6peC6sOC6q+C6seC6lCBQVUsg4LqC4Lqt4LqHIFNJTSDguprgu43gu4jgupbgurfguoHgupXgu4nguq3guocsIOC6l+C7iOC6suC6meC6quC6suC6oeC6suC6lOC6peC6reC6h+C7hOC6lOC7ieC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4Lqt4LqB4LuI4Lqt4LqZ4LqX4Lq14LuIIFNJTSDguoLguq3guofgupfgu4jgurLgupnguojgurDgu4Pguorgu4nguprgu43gu4jgu4TgupTgu4nguqLgu4jgurLguofgupbgurLguqfguq3gupkuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJQSU4g4LqC4Lqt4LqHIFNJTSDgu4Dguq7gurHgupTguqfgur3guoHguqXgurvgu4nguqHgu4DguqvgurzguqchIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJQVUsg4LqC4Lqt4LqHIFNJTSDgu4Dguq7gurHgupTguqfgur3guoHguqXgurvgu4nguqHgu4DguqvgurzguqchIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IuC6peC6sOKAi+C6q+C6seC6lOKAi+C6luC6t+C6geC6leC6reC6muC6ruC6seC6muC7geC6peC7ieC6pyEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLgupvgurjgu4jguqHgu4Dgup7guofguoHgu4jguq3gupngu5zgu4ngurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLgupvgurjgu4jguqHgu4Dgup7guofgupXgu43gu4jgu4TgupsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i4Lqb4Lq44LuI4Lqh4Lqi4Lq44LqU4LqK4Lq74LuI4Lqn4LqE4Lqy4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIyOTI0NjI4ODYzNzQxMTUwOTU2Ij4i4Lqb4Lq44LuI4Lqh4Lqr4Lq84Lq04LuJ4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4i4Lqb4Lq44LuI4Lqh4Lqi4Lq44LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+IuC6muC7jeC7iOC6oeC6teC6muC7jeC6peC6tOC6geC6suC6mSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKaW5kZXggMjlmNjJhNy4uZmYzMDM0YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLErnZlc2tpdGUgUElOIGtvZMSFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4ixK52ZXNraXRlIFBVSyBpciBuYXVqxIUgUElOIGtvZHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsga29kYXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik5hdWphcyBQSU4ga29kYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLErnZlc2tpdGUgU0lNIGtvcnRlbMSXcyBQVUsga29kxIUgaXIgbmF1asSFIFBJTiBrb2TEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iU0lNIGtvcnRlbMSXcyBQVUsga29kYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik5hdWphcyBTSU0ga29ydGVsxJdzIFBJTiBrb2RhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IlBhbGllc2tpdGUsIGthZCDEr3Zlcy4gc2xhcHRhxb4uIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iSmVpIG5vcml0ZSBhdHJha2ludGksIMSvdmVza2l0ZSBzbGFwdGHFvm9kxK8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJKZWkgbm9yaXRlIGF0cmFraW50aSwgxK92ZXNraXRlIFBJTiBrb2TEhSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJQcmlzdGFiZHltbyBteWd0dWthcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iUGFsZWlkaW1vIG15Z3R1a2FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJTdXN0YWJkeW1vIG15Z3R1a2FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IlBhdGlua2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJOZXBhdGlua2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLFoGlyZGlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iSmVpIG5vcml0ZSB0xJlzdGksIGF0cmFraW5raXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iUGFsZWlkaW1hcyBhdMWhYXVrdGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IlBhbGVpc2tpdGUg4oCePHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz7igJwsIGthZCBqxK8gacWhdHJpbnR1bcSXdGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+IuKAnjx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+4oCcIG5lYnVzIGnFoXRyaW50YXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLErnZlc2tpdGUgcGFnZWlkYXVqYW3EhSBQSU4ga29kxIUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iUGF0dmlydGlua2l0ZSBwYWdlaWRhdWphbcSFIFBJTiBrb2TEhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iQXRyYWtpbmFtYSBTSU0ga29ydGVsxJfigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJOZXRpbmthbWFzIFBJTiBrb2Rhcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLErnZlc2tpdGUgUElOIGtvZMSFLCBzdWRhcnl0xIUgacWhIDTigJM4IHNrYWnEjWnFsy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsga29kYXMgdHVyxJd0xbMgYsWrdGkgbWHFvmlhdXNpYWkgOCBza2FpdG1lbsWzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlBha2FydG90aW5haSDEr3Zlc2tpdGUgdGlua2FtxIUgUFVLIGtvZMSFLiBQYWthcnRvdGluYWkgYmFuZGFudCBTSU0gYnVzIG5lbGVpZMW+aWFtYSB2aXNhbSBsYWlrdWkuIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJOZXRpbmthbWFpIG51cGllxaHEl3RlIGF0cmFraW5pbW8gcGllxaFpbsSvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGsuIFBvIGRhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBuZXPEl2ttLiBiYW5kLiBixatzaXRlIHBhcHJhxaF5dGkgYXRyYWtpbnRpIHRlbGVmb27EhSBuYXVkb2RhbWkg4oCeR29vZ2xl4oCcIHByaXNpanVuZ2ltbyBkdW9tZW5pcy5cblxuIEJhbmR5a2l0ZSBkYXIga2FydMSFIHBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJQYcWhYWxpbnRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJOZXRpbmthbWFzIFNJTSBrb3J0ZWzEl3MgUElOIGtvZGFzLiBSZWlrxJdzIHN1c2lzaWVrdGkgc3Ugb3BlcmF0b3JpdW1pLCBrYWQgYXRyYWtpbnTFsyDEr3JlbmdpbsSvLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iTmV0aW5rYW1hcyBTSU0ga29ydGVsxJdzIFBJTiBrb2Rhcy4gSnVtcyBsaWtvIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBiYW5kLiBQYXNrdWkgcmVpa8SXcyBzdXNpc2lla3RpIHN1IG9wZXJhdG9yaXVtaSwga2FkIGppcyBhdHJha2ludMWzIMSvcmVuZ2luxK8uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iTmV0aW5rYW1hcyBTSU0ga29ydGVsxJdzIFBJTiBrb2RhcywgbGlrbyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYmFuZC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+Ik5lYmVnYWxpbWEgbmF1ZG90aSBTSU0ga29ydGVsxJdzLiBTdXNpc2lla2l0ZSBzdSBvcGVyYXRvcml1bWkuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJOZXRpbmthbWFzIFNJTSBrb3J0ZWzEl3MgUFVLIGtvZGFzLiBMaWtvIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBiYW5kLiBQYXNrdWkgdmlzacWha2FpIG5lYmVnYWzEl3NpdGUgbmF1ZG90aSBTSU0ga29ydGVsxJdzLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+Ik5ldGlua2FtYXMgU0lNIGtvcnRlbMSXcyBQVUsga29kYXMuIExpa28gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGJhbmQuIFBhc2t1aSB2aXNpxaFrYWkgbmViZWdhbMSXc2l0ZSBuYXVkb3RpIFNJTSBrb3J0ZWzEl3MuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJOZXBhdnlrbyBhdGxpa3RpIFNJTSBrb3J0ZWzEl3MgUElOIGtvZG8gb3BlcmFjaWpvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+Ik5lcGF2eWtvIGF0bGlrdGkgU0lNIGtvcnRlbMSXcyBQVUsga29kbyBvcGVyYWNpam9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiJLb2RhcyBwcmlpbXRhcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJBbmtzdGVzbmlvIHRha2VsaW8gbXlndHVrYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJLaXRvIHRha2VsaW8gbXlndHVrYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iUHJpc3RhYmR5bW8gbXlndHVrYXMiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbAppbmRleCBhYTEzOTM0Li41MzlmOTFkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IklldmFkaWV0IFBJTsKga29kdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJJZXZhZGlldCBQVUvCoGtvZHUgdW4gamF1bnUgUElOwqBrb2R1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLwqBrb2RzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJKYXVucyBQSU7CoGtvZHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJJZXZhZGlldCBTSU3CoGthcnRlcyBQVUvCoGtvZHUgdW4gamF1bnUgUElOwqBrb2R1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iU0lNwqBrYXJ0ZXMgUFVLwqBrb2RzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJKYXVucyBTSU3CoGthcnRlcyBQSU7CoGtvZHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJQaWVza2FyaWV0aWVzLCBsYWkgaWV2YWTEq3R1IHBhcm9saSI8L2ZvbnQ+Ii4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IklldmFkaWV0IHBhcm9saSwgbGFpIGF0YmxvxLfEk3R1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IkxhaSBhdGJsb8S3xJN0dSwgaWV2YWRpZXQgUElOLiI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJQxIFydHJhdWvFoWFuYXMgcG9nYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iQXRza2HFhm/FoWFuYXMgcG9nYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iQXB0dXLEk8WhYW5hcyBwb2dhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IlBhdMSrayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+Ik5lcGF0xKtrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iU2lyZHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJBdGJsb8S3xJNqaWV0LCBsYWkgdHVycGluxIF0dS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJQYWxhacWhYW5hIGF0Y2VsdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iVmVsY2lldCBsb2dyxKtrdSA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiwgbGFpIHRvIGl6ZHrEk3N0dS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iTG9ncsSra3MgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gbmV0aWtzIGl6ZHrEk3N0cy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IklldmFkaWV0IHbEk2xhbW/CoFBJTsKga29kdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iQXBzdGlwcmluaWV0IHbEk2xhbW/CoFBJTi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Ik5vdGllayBTSU3CoGthcnRlcyBhdGJsb8S3xJPFoWFuYS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IlBJTsKga29kcyBuYXYgcGFyZWl6cy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJJZXZhZGlldCBQSU4sIGthcyBzYXN0xIF2IG5vIDTCoGzEq2R6IDjCoGNpcGFyaWVtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVS8Kga29kYW0gaXIgasSBYsWrdCB2aXNtYXogOMKgY2lwYXJ1cyBnYXJhbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJBdGvEgXJ0b3RpIGlldmFkaWV0IHBhcmVpem8gUFVLwqBrb2R1LiBKYSB2YWlyxIFrYXMgcmVpemVzIGlldmFkxKtzaWV0IHRvIG5lcGFyZWl6aSwgU0lNwqBrYXJ0ZSB0aWtzIG5lYXRncmllemVuaXNraSBhdHNwxJNqb3RhLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iSsWrcyBuZXBhcmVpemkgbm9yxIFkxKtqxIF0IGF0YmxvxLfEk8WhYW5hcyBrb21iaW7EgWNpanUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlaXplcy4gUMSTYyB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBuZXZlaWtzbcSrZ2llbSBtxJPEo2luxIFqdW1pZW0gdMSBbHJ1bmlzIGLFq3MgasSBYXRibG/Et8STLCBpem1hbnRvam90IGUtcGFzdGEga29udHUuXG5cbk3Ek8SjaW5pZXQgdsSTbHJlaXogcMSTYyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPsKgc2VrdW5kxJNtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIMKg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iTm/FhmVtdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iTmVwYXJlaXpzIFNJTcKga2FydGVzIFBJTsKga29kcy7CoExhaSBhdGJsb8S3xJN0dSBpZXLEq2NpLCBzYXppbmlldGllcyBhciBtb2JpbG8gc2FrYXJ1IG9wZXJhdG9ydS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+Ik5lcGFyZWl6cyBTSU3CoGthcnRlcyBQSU7CoGtvZHMuIFZhcmF0IG3Ek8SjaW7EgXQgdsSTbCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoHJlaXppLiBLxLzFq2RhcyBnYWTEq2p1bcSBIGLFq3MgasSBc2F6aW7EgXMgYXIgbW9iaWxvIHNha2FydSBvcGVyYXRvcnUsIGxhaSB0YXMgYXRibG/Et8STdHUgasWrc3UgaWVyxKtjaS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJOZXBhcmVpenMgU0lNwqBrYXJ0ZXMgUElOwqBrb2RzLiBWYXJhdCBtxJPEo2luxIF0IHbEk2wgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+wqByZWl6aSgtZXMpLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNwqBrYXJ0ZSBuYXYgaXptYW50b2phbWEuIFNhemluaWV0aWVzIGFyIG1vYmlsbyBzYWthcnUgb3BlcmF0b3J1LiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iTmVwYXJlaXpzIFNJTcKga2FydGVzIFBVS8Kga29kcy4gVmFyYXQgbcSTxKNpbsSBdCB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgcmVpemkuIEvEvMWrZGFzIGdhZMSranVtxIEgU0lNwqBrYXJ0ZSBrxLzFq3MgbmVpem1hbnRvamFtYS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJOZXBhcmVpenMgU0lNwqBrYXJ0ZXMgUFVLwqBrb2RzLiBWYXJhdCBtxJPEo2luxIF0IHbEk2wgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+wqByZWl6aSgtZXMpLiBLxLzFq2RhcyBnYWTEq2p1bcSBIFNJTcKga2FydGUga8S8xatzIG5laXptYW50b2phbWEuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJTSU3CoGthcnRlcyBQSU7CoGtvZGEgaWV2YWTEq8WhYW5hIG5laXpkZXbEgXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJTSU3CoGthcnRlcyBQVUvCoGtvZGEgaWV2YWTEq8WhYW5hIG5laXpkZXbEgXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IktvZHMgaXIgcGllxYZlbXRzISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IkllcHJpZWvFocSTasSBIGllcmFrc3RhIHBvZ2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJOxIFrYW3EgSBpZXJha3N0YSBwb2dhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IlDEgXJ0cmF1a8WhYW5hcyBwb2dhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWI4MzNlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxNTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iUElOINC60L7QtNGL0LMg0LHQuNGH0L3RjSDSr9KvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4i0KHQmNCcINCf0q7Qmi3QsyDQsdC40YfRjdGN0LQg0YjQuNC90Y0g0J/QmNCdINC60L7QtCDQvtGA0YPRg9C70L3QsCDRg9GDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiLQodCY0Jwg0J/SrtCaINC60L7QtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4i0KjQuNC90Y0g0KHQmNCcINCf0JjQnSDQutC+0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLQndGD0YPRhiDSr9CzINCx0LjRh9C40YUg0LHQvtC7INGF0q/RgNC90Y0g0q/SryI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+ItCi0LDQudC70LDRhSDQvdGD0YPRhiDSr9Cz0LjQudCzINCx0LjRh9C90Y0g0q/SryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+ItCi0LDQudC70LDRhSBQSU4t0LMg0L7RgNGD0YPQu9C90LAg0YPRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+ItCR0YPRgNGD0YMgUElOINC60L7QtC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i0KLQsNC50LvQsNGFINCx0L7QuyDQptGN0YHQuNC50LMg0LTQsNGA0LDQsNC0IDAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+ItCd0q/Sr9GA0Y3RjdGAINGC0q/Qs9C20Y3RjSDRgtCw0LnQu9Cw0YUg0L7RgNC+0LvQtNC70L7Qs9GL0L0g0YLQvtC+INC00Y3RjdC0INGF0Y3QvNC20Y3RjdC90Y3RjdGBINGF0Y3RgtGN0YDRgdGN0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+ItCm0Y3QvdGN0LPQu9GN0LPQtNGN0LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+ItCm0Y3QvdGN0LPQu9GN0LYg0LHQsNC50L3QsCwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+ItCm0Y3QvdGN0LPQu9GN0LPRh9GN0Y0g0YXQvtC70LHQvtC90L4g0YPRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+ItCi0LDQudC70YUg0LHQvtC7INGG0Y3RgdC40LnQsyDQtNCw0YDQvdCwINGD0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiLQodKv0LvQttGN0Y0g0YLSr9Cz0LbQuNCz0LTRgdGN0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4iU0lNINC60LDRgNGCINCx0LDQudGF0LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+ItCi0LDQsdC70LXRgiBTSU0g0LrQsNGA0YLQs9Kv0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiLQo9GC0YHQsNC90LQgU0lNINC60LDRgNGCINCx0LDQudGF0LPSr9C5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiJTSU0g0LrQsNGA0YLRi9CzINC+0YDRg9GD0LvQvdCwINGD0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iU0lNINC60LDRgNGCINCx0LDQudGF0LPSr9C5INGN0YHQstGN0Lsg0YPQvdGI0LjRhSDQsdC+0LvQvtC80LbQs9Kv0LkuIFNJTSDQutCw0YDRgiDQvtGA0YPRg9C70L3QsCDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiLQkNGI0LjQs9C70LDQtiDQsdC+0LvQvtGF0LPSr9C5IFNJTSDQutCw0YDRgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiLQotCw0L3RiyBTSU0g0LrQsNGA0YIg0LHSr9GA0LzTqdGB06nQvSDQuNC00Y3QstGF0LPSr9C5INCx0L7Qu9C+0LIuXG4g06jTqdGAIFNJTSDQutCw0YDRgiDQsNCy0LDRhSDQsdC+0Lsg06nTqdGA0LjQudC9INGD0YLQsNGB0LPSr9C5INKv0LnQu9GH0LjQu9Cz0Y3RjdC90LjQuSDQvdC40LnQu9Kv0q/Qu9GN0LPRh9GC0Y3QuSDRhdC+0LvQsdC+0LPQtNC+0L3QviDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiJTSU0g0LrQsNGA0YIg0YLSr9Cz0LbQuNCz0LTRgdGN0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJTSU0g0LrQsNGA0YLQvdGLIFBVSy3RgtKv0LPQttC40LPQtNGB0Y3QvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+IlNJTSDQutCw0YDRgtC90Ysg0YLSr9Cz0LbRjdGN0LMg0LPQsNGA0LPQsNC2INCx0LDQudC90LDigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuICUzJGQuIC3QvSAlMiRkINCy0LjQtNC20LXRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiLQktC40LTQttC10YIg0L3RjdC80Y3RhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+ItCl0L7QvtGB0L7QvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4i0KLQsNC50LvQsNGFINGF0Y3RgdGN0LMg0L3RjdGN0LPQtNGB0Y3QvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiLQotCw0LnQu9Cw0YUg0YXRjdGB0Y3QsyDRhdCw0LDQs9C00YHQsNC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+INCy0LjQtNC20LXRgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4i0KXRjdGA0Y3Qs9C70Y3Qs9GHINGB0L7QvdCz0L7RhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+ItCh0YLQsNGC0YPRgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+ItCa0LDQvNC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i0JzQtdC00LjQsCDQutC+0L3RgtGA0L7QuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfc3RhcnQiIG1zZ2lkPSI4NzM2ODUzNjE1NTg4ODI4MTk3Ij4i0JLQuNC00LbQtdGCINC00LDRhdC40L0g0Y3RgNGN0LzQsdGN0LvQtiDRjdGF0LvRjdCyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+ItCS0LjQtNC20LXRgtC40LnQsyDQtNCw0YXQuNC9INGN0YDRjdC80LHRjdC70LYg0LTRg9GD0YHQsNCyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g0LLQuNC00LbQtdGCINGD0YHRgtGB0LDQvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2V4cGFuZF9sb2NrX2FyZWEiIG1zZ2lkPSI1MTk4NTk3MjA5MzQxNzgwMjQiPiLQotKv0LPQttGN0Y3Qs9Kv0Lkg0YXRjdGB0LPQuNC50LMg06nRgNCz06nRgdCz06nRhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiLQotCw0LnQu9Cw0YUg0LPRg9C70YHRg9GD0LvQsNC70YIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLQotCw0LnQu9Cw0YUg0YXRjdGNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i0J3Sr9Kv0YDRjdGN0YAg0YLQsNC50LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+ItCi0LDQudC70LDRhSDQv9C40L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i0KLQsNC50LvQsNGFINC90YPRg9GGINKv0LMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i0KXRjdGN0L3QuNC5INGF0Y3RgdGN0LMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+ItCT0YPQu9GB0YPRg9C70LDRhSDRhdGN0YHRjdCzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIxMzM3Mjg2NTM4MzE4NTQzNTU1Ij4i06jQvNC906nRhSDQsdC40YfQu9GN0LMg0YLQvtCy0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzA3MzkyODMwMDQ0NDkwOTMyMCI+ItCU0LDRgNCw0LDQs9C40LnQvSDQsdC40YfQu9GN0LMg0YLQvtCy0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLQotKv0YAg0LfQvtCz0YHQvtC+0YUg0YLQvtCy0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+ItCi0L7Qs9C70YPRg9C70LDRhSDRgtC+0LLRhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i0JfQvtCz0YHQvtC+0YUg0YLQvtCy0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4i0KHQsNC50L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLQntC90YbQs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLQl9Kv0YDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+ItKu0YDQs9GN0LvQttC70q/Sr9C70Y3RhdC40LnQvSDRgtGD0LvQtCDRgtKv0LPQttGN0Y3QsyDRgtCw0LnQu9C90LAg0YPRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+ItCt0YXQu9Kv0q/Qu9GN0YXQuNC50LMg0YbRg9GG0LDQu9GB0LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLQo9GB0YLQs9Cw0YXRi9C9INGC0YPQu9C0IDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+LdCzINGC0LDQstC40L3QsCDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDRg9GB0YLQsNGF0LPSr9C5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+ItCQ0JHQkiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiLQptGD0YbQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i0KPRgdGC0LPQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLQlNGD0YPRgdCz0LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+ItCT0L7RgNC40Lwg06nTqdGA0YfQu9Op0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiLQqNC40YTRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+ItCe0YDRg9GD0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLQotCw0LnQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i0JrQsNC80LXRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLQp9C40LzRjdGN0LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+ItCU0YPRg9C90YPRg9C0INC40LTRjdCy0YXRgtGN0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+ItCl0LDQudGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3QsyDQs9GD0LvRgdGD0YPQu9Cw0YUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+INGF0LjQudGFINCx0L7QuyDQtNC+0L7RiCDQs9GD0LvRgdGD0YPQu9Cw0YUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+INGF0LjQudGFINC30q/Sr9C90LvSr9KvINCz0YPQu9GB0YPRg9C70LDRhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+INGF0LjQudGFINCx0L7QuyDQsdCw0YDRg9GD0L3Qu9GD0YMg0LPRg9C70YHRg9GD0LvQsNGFLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4i0J7QtNC+0L7Qs9C40LnQvSDRhdGN0YDRjdCz0LvRjdCz0YcgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i0K/QsNGA0LDQu9GC0LDQuSDQtNGD0YPQtNC70LDQs9CwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i0KXRjdGN0LMg0LzQsNGA0YLRgdCw0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+ItCR0YPRgNGD0YMg0YXRjdGNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4i0J3Rg9GD0YYg0q/QsyDQsdGD0YDRg9GDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+IlBJTiDQsdGD0YDRg9GDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YvQvSDQtNCw0YDQsNCwINC00LDRhdC40L0g0L7RgNC+0LvQtNC+0L3QviDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i0KXRjdGN0LMg0LfRg9GA0LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlNJTSBQSU4g0L7RgNGD0YPQu9C90LAg0YPRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iUElOINC+0YDRg9GD0LvQvdCwINGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i0J3Rg9GD0YYg0q/Qs9GN0Y0g0L7RgNGD0YPQu9C90LAg0YPRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IlNJTSDQuNC00Y3QstGF0LPSr9C5INCx0LDQudC90LAuINKu0YDQs9GN0LvQttC70q/Sr9C70Y3RhSDQsdC+0LsgUFVLINC60L7QtNGL0LMg0L7RgNGD0YPQu9C90LAg0YPRgy4g0JTRjdC70LPRjdGA0Y3QvdCz0q/QuSDQvNGN0LTRjdGN0LvQu9C40LnQsyDQvtC/0LXRgNCw0YLQvtGA0L7QvtGBINCw0YHRg9GD0L3QsCDRg9GD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i0KXSr9GB0YHRjdC9IFBJTiDQutC+0LTQvtC+INC+0YDRg9GD0LvQvdCwINGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i0KXSr9GB0YHRjdC9IFBJTiDQutC+0LTQvtC+INC00LDRhdC40L0g0L7RgNGD0YPQu9C90LAg0YPRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU0lNINC60LDRgNGC0L3RiyDRgtKv0LPQttGN0Y3QsyDQs9Cw0YDQs9Cw0LYg0LHQsNC50L3QsOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IjQtOCDRgtC+0L7QvdC+0L7RgSDQsdKv0YLRjdGFIFBJTi3QsyDQsdC40YfQvdGNINKv0q8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLINC60L7QtCA4LdGBINGG06nTqdC90LPSr9C5INGC0L7QvtC90L7QvtGBINCx0q/RgtC90Y0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i0JfTqdCyIFBVSyDQutC+0LTRi9CzINC00LDRhdC40L0g0L7RgNGD0YPQu9C90LAg0YPRgy4g0JTQsNCy0YLQsNC9INC+0YDQvtC70LTQstC+0LsgU0lNINC90Ywg0LHSr9GA0LzTqdGB06nQvSDQuNC00Y3QstGF0LPSr9C5INCx0L7Qu9Cz0L7QvdC+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4g0LrQvtC00YPRg9C0INGC0LDQsNGA0LDRhdCz0q/QuSDQsdCw0LnQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i0KXRjdGNINC+0YDRg9GD0LvQsNGFINC+0YDQvtC70LTQu9C+0LPQviDRhdGN0YIg0L7Qu9C+0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4i0KLSr9Cz0LbRjdGN0LMg0YLQsNC50LvQsNGFINCx0L7QuyBHb29nbGUg0LDQutCw0YPQvdGC0LDQsNGA0LDQsCDQvdGN0LLRgtGN0YDQvdGNINKv0q8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLQpdGN0YDRjdCz0LvRjdCz0YfQuNC50L0g0L3RjdGAICjQuNC80Y3QudC7KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4i0J3Rg9GD0YYg0q/QsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4i0J3RjdCy0YLRgNGN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+ItCl0Y3RgNGN0LPQu9GN0LPRh9C40LnQvSDQvdGN0YAg0Y3RgdCy0Y3QuyDQvdGD0YPRhiDSr9CzINCx0YPRgNGD0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+ItCl0Y3RgNGN0LPQu9GN0LPRh9C40LnQvSDQvdGN0YAg0L3Rg9GD0YYg0q/Qs9GN0Y0g0LzQsNGA0YLRgdCw0L0g0YPRgz9cbiI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+Ii3QtCDQt9C+0YfQuNC70L3QviDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+ItCQ0LrQsNGD0L3RgiDRiNCw0LvQs9Cw0LYg0LHQsNC50L3QsOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i0KLQsCBQSU4g0LrQvtC00L7QviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINCx0LjRh9C40LIuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTRi9C9INC00LDRgNCw0LAg0LTQsNGF0LjQvSDQvtGA0L7Qu9C00L7QvdC+INGD0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItCi0LAgUElOINC60L7QtNC+0L4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQsdC40YfQuNCyLiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YvQvSDQtNCw0YDQsNCwINC00LDRhdC40L0g0L7RgNC+0LvQtNC+0L3QviDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLQotCwINGC0LDQudC70LDRhSDRhdGN0Y3QsyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINC30YPRgNC70LDQsC4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNGL0L0g0LTQsNGA0LDQsCDQtNCw0YXQuNC9INC+0YDQvtC70LTQvtC90L4g0YPRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiLQotCwINGC0LDQsdC70LXRgtGL0LMg0YLQsNC50LvQsNGFINCz0Y3QtiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINC+0YDQvtC70LTQu9C+0L4uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGD0LTQsNCwINC00LDRhdC40L0g0LHRg9GA0YPRgyDQvtGA0L7Qu9C00LLQvtC7INGC0LDQsdC70LXRgiDSr9C50LvQtNCy0Y3RgNC40LnQvSDSr9C90LTRgdGN0L0g0YPRgtCz0LDQsNGA0LDQsCDRgtC+0YXQuNGA0YPRg9C70LDQs9C00LDRhSDQsdCwINGF0Y3RgNGN0LPQu9GN0LPRh9C40LnQvSDQtNCw0YLQsCDQsdKv0YXRjdC70LTRjdGNINGD0YHRgtCw0L3QsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i0KLQsCDRg9GC0YHRi9CzINGC0LDQudC70LDRhSDQs9GN0LYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQvtGA0L7Qu9C00LvQvtC+LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQtNCw0YXQuNC9INCx0YPRgNGD0YMg0L7RgNC+0LvQtNCy0L7QuyDRg9GC0LDRgSDSr9C50LvQtNCy0Y3RgNC40LnQvSDSr9C90LTRgdGN0L0g0YPRgtCz0LDQsNGA0LDQsCDRgtC+0YXQuNGA0YPRg9C70LDQs9C00LDRhSDQsdCwINGF0Y3RgNGN0LPQu9GN0LPRh9C40LnQvSDQtNCw0YLQsCDQsdKv0YXRjdC70LTRjdGNINGD0YHRgtCw0L3QsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+ItCi0LAg0YLQsNCx0LvQtdGC0YvQsyDRgtCw0LnQu9Cw0YUg0LPRjdC2IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINC+0YDQvtC70LTQu9C+0L4uINCi0LDQsdC70LXRgiDQvtC00L7QviDSr9C50LvQtNCy0Y3RgNC40LnQvSDSr9C90LTRgdGN0L0g0YPRgtCz0LDQsNGA0LDQsCDRgtC+0YXQuNGA0YPRg9C70LDQs9C00LDRhSDQsdC+0LvQvdC+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+ItCi0LAg0YPRgtGB0YvQsyDRgtCw0LnQu9Cw0YUg0LPRjdC2IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINC+0YDQvtC70LTQu9C+0L4uINCj0YLQsNGBINC+0LTQvtC+INKv0LnQu9C00LLRjdGA0LjQudC9INKv0L3QtNGB0Y3QvSDRg9GC0LPQsNCw0YDQsNCwINGC0L7RhdC40YDRg9GD0LvQsNCz0LTQsNGFINCx0L7Qu9C90L4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+ItCi0LAg0YLQsNC50LvQsNGFINGF0Y3RjdCzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGD0LTQsNCwINCx0YPRgNGD0YMg0LfRg9GA0LvQsNCwLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQtNCw0YXQuNC9INCx0YPRgNGD0YMg0L7RgNGD0YPQu9Cx0LDQuywg0YLQsCDRgtCw0LHQu9C10YLQsNCwINGC0LDQudC70LDRhdGL0L0g0YLRg9C70LQg0LjQvNGN0LnQuyDQsNC60LDRg9C90YIg0YjQsNCw0YDQtNC70LDQs9Cw0YLQsNC5INCx0L7Qu9C90L4uXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTRi9C9INC00LDRgNCw0LAg0LTQsNGF0LjQvSDQvtGA0L7Qu9C00L7QvdC+INGD0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLQotCwINGC0LDQudC70LDRhSDRhdGN0Y3QsyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINC30YPRgNC70LDQsC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LTQsNGF0LjQvSDQsdGD0YDRg9GDINC+0YDRg9GD0LvQsdCw0LssINGC0LAg0YPRgtGB0LDQsCDRgtCw0LnQu9Cw0YXRi9C9INGC0YPQu9C0INC40LzRjdC50Lsg0LDQutCw0YPQvdGC0LDQsCDQsNGI0LjQs9C70LDRhSDRiNCw0LDRgNC00LvQsNCz0LDRgtCw0Lkg0LHQvtC70L3Qvi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNGL0L0g0LTQsNGA0LDQsCDQtNCw0YXQuNC9INC+0YDQvtC70LTQvtC90L4g0YPRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLQo9GB0YLQs9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+ItCh0JjQnCDQn9CY0J0g0LrQvtC0INCx0YPRgNGD0YMsINGC0LAg0YLTqdGF06nTqdGA06nQvNC20LjQudC9INGC0q/Qs9C20Y3RjdCzINGC0LDQudC70LDRhdGL0L0g0YLRg9C70LQg0L7Qv9C10YDQsNGC0L7RgCDQutC+0LzQv9Cw0L3QuNGC0LDQuSDRhdC+0LvQsdC+0L4g0LHQsNGA0LjRhSDRiNCw0LDRgNC00LvQsNCz0LDRgtCw0LkuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiLQodCY0Jwg0J/QmNCdINC60L7QtCDQsdGD0YDRg9GDINCx0LDQudC90LAsINGC0LDQvdC0INC80L7QsdCw0LnQuyDQvtC/0LXRgNCw0YLQvtGAINC60L7QvNC/0LDQvdC40YLQsNC5INGF0L7Qu9Cx0L7Qs9C00L7RhdCz0q/QudCz0Y3RjdGAINGC06nRhdOp06nRgNOp0LzQttC40LnQvSDRgtKv0LPQttGN0Y3QsyDRgtCw0LnQu9Cw0YXQsNC0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQvtGA0L7Qu9C00LvQvtCz0L4g0YXQuNC50YUg0LHQvtC70L7QvNC2INKv0LvQtNGB0Y3QvSDQsdCw0LnQvdCwLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+ItCh0JjQnCDQn9CY0J0g0LrQvtC0INCx0YPRgNGD0YMg0LHQsNC50L3QsCwg0YLQsNC90LQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC+0YDQvtC70LTQu9C+0LPQviDRhdC40LnRhSDQsdC+0LvQvtC80LYg0q/Qu9C00LvRjdGNLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4i0KHQmNCcINCw0YjQuNCz0LvQsNGFINCx0L7Qu9C+0LzQttCz0q/QuS4g06jTqdGA0LjQudC9INC+0L/QtdGA0LDRgtC+0YAg0LrQvtC80L/QsNC90LjRgtCw0Lkg0YXQvtC70LHQvtC+INCx0LDRgNC40L3QsCDRg9GDLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4i0KHQmNCcINCf0q7QmiDQutC+0LQg0LHRg9GA0YPRgywg0YLQsNC90Ysg0KHQmNCcINCx0q/RgNC806nRgdOp0L0g0LDRiNC40LPQu9Cw0LvRgtCz0q/QuSDQsdC+0LvQvtGF0L7QvtGBINOp0LzQvdOpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQvtGA0L7Qu9C00LvQvtCz0L4g0YXQuNC50YUg0LHQvtC70L7QvNC2INKv0LvQtNC70Y3RjS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiLQodCY0Jwg0J/SrtCaINC60L7QtCDQsdGD0YDRg9GDLCDRgtCw0L3RiyDQodCY0Jwg0LHSr9GA0LzTqdGB06nQvSDQsNGI0LjQs9C70LDQu9GC0LPSr9C5INCx0L7Qu9C+0YXQvtC+0YEg06nQvNC906kgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC+0YDQvtC70LTQu9C+0LPQviDRhdC40LnRhSDQsdC+0LvQvtC80LYg0q/Qu9C00LvRjdGNLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4i0KHQmNCcINCf0JjQnSDQsNC20LjQu9C70YPRg9C70LDRhSDQsNC80LbQuNC70YLQs9Kv0Lkg0LHQvtC70LvQvtC+ISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4i0KHQmNCcINCf0q7QmiDQsNC20LjQu9C70YPRg9C70LDRhSDQsNC80LbQuNC70YLQs9Kv0Lkg0LHQvtC70LvQvtC+ISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLQmtC+0LQg0LfTqdCy0YjTqdOp0YDTqdCz0LTQu9Op06khIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i06jQvNC906nRhSDQtNGD0YMg0YLQvtCy0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLQlNCw0YDQsNCw0LPQuNC50L0g0LTRg9GDINGC0L7QstGHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+ItCi0q/RgCDQt9C+0LPRgdC+0YUg0YLQvtCy0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiLQotC+0LPQu9GD0YPQu9Cw0YUg0YLQvtCy0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjMwODQxNzkzMjQ4MTA1NzU3ODciPiLQl9C+0LPRgdC+0L7RhSDRgtC+0LLRhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg3MDA2NTA0MDMwNTQwNDIxNTMiPiLSrtC50LvRh9C40LvQs9GN0Y0g0LHQsNC50YXQs9Kv0LkuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODQ1YmMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJUYWlwIGtvZCBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJUYWlwIFBVSyBTSU0gZGFuIGtvZCBQSU4gYmFoYXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJLb2QgUFVLIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iS29kIFBJTiBTSU0gYmFoYXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iU2VudHVoIHVudHVrIG1lbmFpcCBrYXRhIGxhbHVhbiI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IlRhaXAga2F0YSBsYWx1YW4gdW50dWsgbWVtYnVrYSBrdW5jaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IlRhaXAgUElOIHVudHVrIG1lbWJ1a2Ega3VuY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiJLb2QgUElOIHNhbGFoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiJVbnR1ayBtZW1idWthIGt1bmNpLCB0ZWthbiBNZW51LCBrZW11ZGlhbiAwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiJUZWxhaCBtZWxlcGFzaSBoYWQgY3ViYWFuIEJ1a2EgS3VuY2kgV2FqYWgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IlN1ZGFoIGRpY2FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbiIgbXNnaWQ9IjgxMTc1NzIwMDA2Mzk5OTgzODgiPiJNZW5nZWNhcywgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IlNhbWJ1bmdrYW4gcGVuZ2VjYXMgYW5kYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+IlRla2FuIE1lbnUgdW50dWsgbWVtYnVrYSBrdW5jaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+IlJhbmdrYWlhbiBkaWt1bmNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlRpYWRhIGthZCBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4iVGlhZGEga2FkIFNJTSBkYWxhbSB0YWJsZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiJUaWFkYSBrYWQgU0lNIGRhbGFtIHRlbGVmb24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+Ik1hc3Vra2FuIGthZCBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iS2FkIFNJTSB0aWFkYSBhdGF1IHRpZGFrIGJvbGVoIGRpYmFjYS4gU2lsYSBtYXN1a2thbiBrYWQgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiJLYWQgU0lNIHRpZGFrIGJvbGVoIGRpZ3VuYWthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiJLYWQgU0lNIGFuZGEgdGVsYWggZGlsdW1wdWhrYW4gc2VjYXJhIGtla2FsLlxuIEh1YnVuZ2kgcGVtYmVrYWwgcGVya2hpZG1hdGFuIHdheWFybGVzIGFuZGEgdW50dWsgbWVuZGFwYXRrYW4ga2FkIFNJTSBsYWluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiJLYWQgU0lNIGRpa3VuY2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJLYWQgU0lNIGRpa3VuY2kgZGVuZ2FuIFBVSy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+Ik1lbWJ1a2Ega3VuY2kga2FkIFNJTS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4gV2lkZ2V0ICUyJGQgZGFyaSAlMyRkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiJUYW1iYWggd2lkZ2V0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4iS29zb25nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiJCYWhhZ2lhbiBidWthIGt1bmNpIGRpa2VtYmFuZ2thbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiJCYWhhZ2lhbiBidWthIGt1bmNpIGRpcnVudHVoa2FuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+IldpZGdldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4iUGVtaWxpaCBwZW5nZ3VuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IlN0YXR1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+IkthbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJLYXdhbGFuIG1lZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJQZW55dXN1bmFuIHNlbXVsYSB3aWRnZXQgZGltdWxha2FuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IlBlbnl1c3VuYW4gc2VtdWxhIHdpZGdldCB0YW1hdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IldpZGdldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBkaXBhZGFta2FuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IktlbWJhbmdrYW4gYmFoYWdpYW4gYnVrYSBrdW5jaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiJCdWthIGt1bmNpIGx1bmN1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IkJ1a2Ega3VuY2kgY29yYWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiJXYWphaCBCdWthIEt1bmNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+IkJ1a2Ega3VuY2kgcGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IkJ1a2Ega3VuY2kga2F0YSBsYWx1YW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4iS2F3YXNhbiBjb3Jhay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4iS2F3YXNhbiBsdW5jdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjEzMzcyODY1MzgzMTg1NDM1NTUiPiJCdXRhbmcgbGFndSBzZWJlbHVtbnlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiJCdXRhbmcgbGFndSBzZXRlcnVzbnlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iQnV0YW5nIGplZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IkJ1dGFuZyBtYWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJCdXRhbmcgYmVyaGVudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iTWVueXVrYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJUaWRhayBkaXRlcmltYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IkphbnR1bmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJCdWthIGt1bmNpIHVudHVrIG1lbmVydXNrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJQZWxhbmNhcmFuIGRpYmF0YWxrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iSmF0dWhrYW4gPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gdW50dWsgbWVtYWRhbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gdGlkYWsgYWthbiBkaXBhZGFta2FuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiJCYXRhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiJQYWRhbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4iU2VsZXNhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IlBlcnViYWhhbiBtb2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+Ik1hc3VrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiJCdWthIGt1bmNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IkthbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiJTZW55YXAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4iQnVueWkgZGloaWR1cGthbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iQ2FyaWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ikx1bmN1cmthbiBrZSBhdGFzIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiJMdW5jdXJrYW4ga2UgYmF3YWggdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ikx1bmN1cmthbiBrZSBraXJpIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iTHVuY3Vya2FuIGtlIGthbmFuIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IlBlbmdndW5hIHNlbWFzYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiJQYW5nZ2lsYW4ga2VjZW1hc2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iTHVwYSBDb3JhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BhdHRlcm4iIG1zZ2lkPSIxODUwODA2MDcwODAxMzU4ODMwIj4iQ29yYWsgU2FsYWgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiJLYXRhIExhbHVhbiBTYWxhaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJQSU4gc2FsYWgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+IkN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+Ikx1a2lza2FuIGNvcmFrIGFuZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJNYXN1a2thbiBQSU4gU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJNYXN1a2thbiBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4iTWFzdWtrYW4gS2F0YSBMYWx1YW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcHVrX2hpbnQiIG1zZ2lkPSI0NTMyMjcxNDM4NjE3MzU1MzciPiJLaW5pIFNJTSBkaWx1bXB1aGthbi4gTWFzdWtrYW4ga29kIFBVSyB1bnR1ayBtZW5lcnVza2FuLiBIdWJ1bmdpIHBlbWJhd2EgdW50dWsgYnV0aXJhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iTWFzdWtrYW4ga29kIFBJTiB5YW5nIGRpaW5naW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IlNhaGthbiBrb2QgUElOIHlhbmcgZGlpbmdpbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Ik1lbWJ1a2Ega3VuY2kga2FkIFNJTS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlRhaXBrYW4gUElOIHlhbmcgbWVuZ2FuZHVuZ2kgNCBoaW5nZ2EgOCBub21ib3IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iS29kIFBVSyBtZXN0aWxhaCA4IG5vbWJvciBhdGF1IGxlYmloLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+Ik1hc3Vra2FuIHNlbXVsYSBrb2QgUElOIHlhbmcgYmV0dWwuIFBlcmN1YmFhbiBiZXJ1bGFuZyBha2FuIG1lbHVtcHVoa2FuIFNJTSBzZWNhcmEga2VrYWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IktvZCBQSU4gdGlkYWsgc2VwYWRhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IlRlcmxhbHUgYmFueWFrIHBlcmN1YmFhbiBtZWx1a2lzIGNvcmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IlVudHVrIG1lbWJ1a2Ega3VuY2ksIGxvZyBtYXN1ayBkZW5nYW4gYWthdW4gR29vZ2xlIGFuZGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiJOYW1hIFBlbmdndW5hIChFLW1lbCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IkthdGEgbGFsdWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiJMb2cgbWFzdWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+Ik5hbWEgcGVuZ2d1bmEgYXRhdSBrYXRhIGxhbHVhbiB0aWRhayBzYWguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+Ikx1cGEgbmFtYSBwZW5nZ3VuYSBhdGF1IGthdGEgbGFsdWFuIGFuZGE/XG5MYXdhdGkiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4iTWVueWVtYWsgYWthdW7igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkFuZGEgdGVsYWggbWVuYWlwIFBJTiBhbmRhIHNlY2FyYSBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBcblxuQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkFuZGEgdGVsYWggbWVuYWlwIGthdGEgbGFsdWFuIGFuZGEgc2VjYXJhIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFxuXG5DdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iQW5kYSB0ZWxhaCB0ZXJzaWxhcCBtZWx1a2lzIGNvcmFrIGJ1a2Ega3VuY2kgYW5kYSBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBcblxuQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4iQW5kYSB0ZWxhaCBtZW5jdWJhIHVudHVrIG1lbWJ1a2Ega3VuY2kgdGFibGV0IGRlbmdhbiBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgcGVyY3ViYWFuIHlhbmcgdGlkYWsgYmVyamF5YSwgdGFibGV0IGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2VwYWRhIHRldGFwYW4gbGFsYWkga2lsYW5nIGRhbiBzZW11YSBkYXRhIHBlbmdndW5hIGFrYW4gaGlsYW5nLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiJBbmRhIHRlbGFoIG1lbmN1YmEgdW50dWsgbWVtYnVrYSBrdW5jaSB0ZWxlZm9uIGRlbmdhbiBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgcGVyY3ViYWFuIHlhbmcgdGlkYWsgYmVyamF5YSwgdGVsZWZvbiBha2FuIGRpdGV0YXBrYW4gc2VtdWxhIGtlcGFkYSB0ZXRhcGFuIGxhbGFpIGtpbGFuZyBkYW4gc2VtdWEgZGF0YSBwZW5nZ3VuYSBha2FuIGhpbGFuZy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IkFuZGEgdGVsYWggbWVuY3ViYSB1bnR1ayBtZW1idWthIGt1bmNpIHRhYmxldCBzZWNhcmEgc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthbGkuIFRhYmxldCBraW5pIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2UgdGV0YXBhbiBsYWxhaSBraWxhbmcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4iQW5kYSB0ZWxhaCBtZW5jdWJhIHVudHVrIG1lbWJ1a2Ega3VuY2kgdGVsZWZvbiBzZWNhcmEgc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthbGkuIFRlbGVmb24ga2luaSBha2FuIGRpdGV0YXBrYW4gc2VtdWxhIGtlIHRldGFwYW4gbGFsYWkga2lsYW5nLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJBbmRhIHRlbGFoIHRlcnNpbGFwIG1lbHVraXMgY29yYWsgYnVrYSBrdW5jaSBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgcGVyY3ViYWFuIHlhbmcgdGlkYWsgYmVyamF5YSwgYW5kYSBha2FuIGRpbWludGEgbWVtYnVrYSBrdW5jaSB0YWJsZXQgYW5kYSBtZW5nZ3VuYWthbiBsb2cgbWFzdWsgR29vZ2xlIGFuZGEuXG5cbiBDdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkFuZGEgdGVsYWggdGVyc2lsYXAgbHVraXMgY29yYWsgYnVrYSBrdW5jaSBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgcGVyY3ViYWFuIHlhbmcgdGlkYWsgYmVyamF5YSwgYW5kYSBha2FuIGRpbWludGEgbWVtYnVrYSBrdW5jaSB0ZWxlZm9uIGFuZGEgbWVuZ2d1bmFrYW4gbG9nIG1hc3VrIEdvb2dsZSBhbmRhLlxuXG4gQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iQWxpaCBrZWx1YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IktvZCBQSU4gU0lNIHRpZGFrIGJldHVsLCBqYWRpIGFuZGEgaGFydXMgbWVuZ2h1YnVuZ2kgcGVtYmF3YSBhbmRhIHVudHVrIG1lbWJ1a2Ega3VuY2kgcGVyYW50aS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IktvZCBQSU4gU0lNIHRpZGFrIGJldHVsLiBBbmRhIG1lbXB1bnlhaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcGVyY3ViYWFuIGxhZ2kgc2ViZWx1bSBhbmRhIGhhcnVzIG1lbmdodWJ1bmdpIHBlbWJhd2EgYW5kYSB1bnR1ayBtZW1idWthIGt1bmNpIHBlcmFudGkuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iS29kIFBJTiBTSU0gdGlkYWsgYmV0dWwsIGFuZGEgbWVtcHVueWFpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwZXJjdWJhYW4gbGFnaS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSB0aWRhayBib2xlaCBkaWd1bmFrYW4uIEh1YnVuZ2kgcGVtYmF3YSBhbmRhLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iS29kIFBVSyBTSU0gdGlkYWsgYmV0dWwsIGFuZGEgbWVtcHVueWFpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwZXJjdWJhYW4gbGFnaSBzZWJlbHVtIFNJTSB0aWRhayBib2xlaCBkaWd1bmFrYW4gc2VjYXJhIGtla2FsLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IktvZCBQVUsgU0lNIHRpZGFrIGJldHVsLCBhbmRhIG1lbXB1bnlhaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcGVyY3ViYWFuIGxhZ2kgc2ViZWx1bSBTSU0gdGlkYWsgYm9sZWggZGlndW5ha2FuIHNlY2FyYSBrZWthbC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+Ik9wZXJhc2kgUElOIFNJTSBnYWdhbCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+Ik9wZXJhc2kgUFVLIFNJTSBnYWdhbCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iS29kIERpdGVyaW1hISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IkJ1dGFuZyBsYWd1IHNlYmVsdW1ueWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJCdXRhbmcgbGFndSBzZXRlcnVzbnlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IkJ1dGFuZyBqZWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIyOTI0NjI4ODYzNzQxMTUwOTU2Ij4iQnV0YW5nIG1haW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjMwODQxNzkzMjQ4MTA1NzU3ODciPiJCdXRhbmcgYmVyaGVudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4iVGlhZGEgcGVya2hpZG1hdGFuLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1tcy9hY3Rpdml0eXN0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1tcy9hY3Rpdml0eXN0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGUyMTg0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbXMvYWN0aXZpdHlzdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKLSoqCi0qKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotKioKLSoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0qKgotKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotKioKLSoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0qKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLSAtLT4KLQotPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX25hbWUiIG1zZ2lkPSIzMzUyODg4MTg2Njc0OTgxNTkzIj4iS2V5Z3VhcmRUZXN0QWN0aXZpdHkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZWN1cmVfYXBwX25hbWUiIG1zZ2lkPSI3OTU1NDk4NzQyODE2ODY4MDQ5Ij4iVW5pZmllZENhbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vbmVfbWVudV9pdGVtIiBtc2dpZD0iNjE1Njc0NzI4NTY4NzU1MTQyNCI+IlRpYWRhIGtlc2VsYW1hdGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGluX21lbnVfaXRlbSIgbXNnaWQ9IjExNzk3NTY0MzMyNjg5NjIzMTEiPiJQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9tZW51X2l0ZW0iIG1zZ2lkPSIxOTU5OTgwNDk5NjYyMTUzMTYwIj4iS2F0YSBsYWx1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXR0ZXJuX21lbnVfaXRlbSIgbXNnaWQ9IjI5ODc3OTgxNTIxNzUxNDAyNDkiPiJDb3JhayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNpbV9waW5fbWVudV9pdGVtIiBtc2dpZD0iMzk2MjI4NjYzOTY0NTA4NDg4MCI+IlBJTiBTSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaW1fcHVrX21lbnVfaXRlbSIgbXNnaWQ9IjYxOTAwNDQxMzMwMDgzOTI5NzQiPiJQVUsgU0lNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRkX3dpZGdldF9pdGVtIiBtc2dpZD0iMjc5NzAyMTUyMzY2ODU3NDE1Ij4iUGlsaWggd2lkZ2V0Li4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib25fc2NyZWVuX3R1cm5lZF9vZmYiIG1zZ2lkPSI4NzYxMzk2MzI5NzcwNTA4MzY3Ij4ib25TY3JlZW5UdXJuZWRPZmYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJvbl9zY3JlZW5fdHVybmVkX29uIiBtc2dpZD0iOTIyMjkyNjgxODAzMDcyODk5OSI+Im9uU2NyZWVuVHVybmVkT24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkb19rZXlndWFyZCIgbXNnaWQ9IjkyMTA5MzY5Nzc4MjMxMTg3OTYiPiJkb0tleWd1YXJkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idmVyaWZ5X3VubG9jayIgbXNnaWQ9Ijg1MDg3MjIyNzMzMjkzMDY5NjgiPiJ2ZXJpZnlVbmxvY2siPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1zL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWVlZWI1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbXMvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0vKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAotKioKLSoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0qKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0qKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qKgotKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJUYWlwIGtvZCBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJUYWlwIFBVSyBkYW4ga29kIFBJTiBiYWhhcnUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IktvZCBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IktvZCBQSU4gQmFoYXJ1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iU2VudHVoIHVudHVrIG1lbmFpcCBrYXRhIGxhbHVhbiI8L2ZvbnQ+PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IlRhaXAga2F0YSBsYWx1YW4gdW50dWsgbWVtYnVrYSBrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IlRhaXAgUElOIHVudHVrIG1lbWJ1a2Ega3VuY2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiJLb2QgUElOIHNhbGFoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiJVbnR1ayBtZW1idWthIGt1bmNpLCB0ZWthbiBNZW51LCBrZW11ZGlhbiAwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiJUZWxhaCBtZWxlcGFzaSBoYWQgY3ViYWFuIEJ1a2EgS3VuY2kgV2FqYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IlN1ZGFoIGRpY2FzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbiIgbXNnaWQ9IjgxMTc1NzIwMDA2Mzk5OTgzODgiPiJNZW5nZWNhcywgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IlNhbWJ1bmdrYW4gcGVuZ2VjYXMgYW5kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+IlRla2FuIE1lbnUgdW50dWsgbWVtYnVrYSBrdW5jaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+IlJhbmdrYWlhbiBkaWt1bmNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlRpYWRhIGthZCBTSU0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4iVGlhZGEga2FkIFNJTSBkYWxhbSB0YWJsZXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiJUaWFkYSBrYWQgU0lNIGRhbGFtIHRlbGVmb24uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+Ik1hc3Vra2FuIGthZCBTSU0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zX2xvbmciIG1zZ2lkPSI1OTY4OTg1NDg5NDYzODcwMzU4Ij4iS2FkIFNJTSB0aWFkYSBhdGF1IHRpZGFrIGJvbGVoIGRpYmFjYS4gU2lsYSBtYXN1a2thbiBrYWQgU0lNLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiJLYWQgU0lNIHRpZGFrIGJvbGVoIGRpZ3VuYWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiJLYWQgU0lNIGFuZGEgdGVsYWggZGlsdW1wdWhrYW4gc2VjYXJhIGtla2FsLlxuIEh1YnVuZ2kgcGVtYmVrYWwgcGVya2hpZG1hdGFuIHdheWFybGVzIGFuZGEgdW50dWsgbWVuZGFwYXRrYW4ga2FkIFNJTSBsYWluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiJLYWQgU0lNIGRpa3VuY2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJLYWQgU0lNIGRpa3VuY2kgZGVuZ2FuIFBVSy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+Ik1lbWJ1a2Ega3VuY2kga2FkIFNJTS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4gV2lkZ2V0ICUyJGQgZGFyaSAlMyRkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiJUYW1iYWggd2lkZ2V0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4iS29zb25nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiJCYWhhZ2lhbiBidWthIGt1bmNpIGRpa2VtYmFuZ2thbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiJCYWhhZ2lhbiBidWthIGt1bmNpIGRpcnVudHVoa2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+IldpZGdldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4iUGVtaWxpaCBwZW5nZ3VuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IlN0YXR1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+IkthbWVyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJLYXdhbGFuIG1lZGlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiJQZW55dXN1bmFuIHNlbXVsYSB3aWRnZXQgZGltdWxha2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X3Jlb3JkZXJfZW5kIiBtc2dpZD0iNzE3MDE5MDk1MDg3MDQ2ODMyMCI+IlBlbnl1c3VuYW4gc2VtdWxhIHdpZGdldCB0YW1hdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+IldpZGdldCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBkaXBhZGFta2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IktlbWJhbmdrYW4gYmFoYWdpYW4gYnVrYSBrdW5jaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiJCdWthIGt1bmNpIGx1bmN1ci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fdW5sb2NrIiBtc2dpZD0iMTQ5MDg0MDcwNjA3NTI0NjYxMiI+IkJ1a2Ega3VuY2kgY29yYWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiJXYWphaCBCdWthIEt1bmNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+IkJ1a2Ega3VuY2kgcGluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGFzc3dvcmRfdW5sb2NrIiBtc2dpZD0iNzY3NTc3NzYyMzkxMjE1NTA4OSI+IkJ1a2Ega3VuY2kga2F0YSBsYWx1YW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4iS2F3YXNhbiBjb3Jhay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4iS2F3YXNhbiBsdW5jdXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjEzMzcyODY1MzgzMTg1NDM1NTUiPiJCdXRhbmcgbGFndSBzZWJlbHVtbnlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiJCdXRhbmcgbGFndSBzZXRlcnVzbnlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iQnV0YW5nIGplZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IkJ1dGFuZyBtYWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJCdXRhbmcgYmVyaGVudGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4iQmF0YWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4iUGFkYW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IlNlbGVzYWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiJQZXJ1YmFoYW4gbW9kIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiJNYXN1ayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4iQnVrYSBrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiJLYW1lcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4iU2VueWFwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IkJ1bnlpIGRpaGlkdXBrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkNhcmlhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJMdW5jdXJrYW4ga2UgYXRhcyB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iTHVuY3Vya2FuIGtlIGJhd2FoIHVudHVrIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJMdW5jdXJrYW4ga2Uga2lyaSB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+Ikx1bmN1cmthbiBrZSBrYW5hbiB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiJQZW5nZ3VuYSBzZW1hc2EgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4iUGFuZ2dpbGFuIGtlY2VtYXNhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+Ikx1cGEgQ29yYWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IkNvcmFrIFNhbGFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4iS2F0YSBMYWx1YW4gU2FsYWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUElOIHNhbGFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiJDdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiJMdWtpc2thbiBjb3JhayBhbmRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iTWFzdWtrYW4gUElOIFNJTSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iTWFzdWtrYW4gUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+Ik1hc3Vra2FuIEthdGEgTGFsdWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iS2luaSBTSU0gZGlsdW1wdWhrYW4uIE1hc3Vra2FuIGtvZCBQVUsgdW50dWsgbWVuZXJ1c2thbi4gSHVidW5naSBwZW1iYXdhIHVudHVrIGJ1dGlyYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+Ik1hc3Vra2FuIGtvZCBQSU4geWFuZyBkaWluZ2luaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJTYWhrYW4ga29kIFBJTiB5YW5nIGRpaW5naW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJNZW1idWthIGt1bmNpIGthZCBTSU0uLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJLb2QgUElOIHNhbGFoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlRhaXBrYW4gUElOIHlhbmcgbWVuZ2FuZHVuZ2kgNCBoaW5nZ2EgOCBub21ib3IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iS29kIFBVSyBtZXN0aWxhaCA4IG5vbWJvciBhdGF1IGxlYmloLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+Ik1hc3Vra2FuIHNlbXVsYSBrb2QgUElOIHlhbmcgYmV0dWwuIFBlcmN1YmFhbiBiZXJ1bGFuZyBha2FuIG1lbHVtcHVoa2FuIFNJTSBzZWNhcmEga2VrYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IktvZCBQSU4gdGlkYWsgc2VwYWRhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IlRlcmxhbHUgYmFueWFrIHBlcmN1YmFhbiBtZWx1a2lzIGNvcmFrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IlVudHVrIG1lbWJ1a2Ega3VuY2ksIGxvZyBtYXN1ayBkZW5nYW4gYWthdW4gR29vZ2xlIGFuZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiJOYW1hIFBlbmdndW5hIChFLW1lbCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IkthdGEgbGFsdWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjUzNTU5MDQ1ODI2NzQwNTQ3MDIiPiJMb2cgbWFzdWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+Ik5hbWEgcGVuZ2d1bmEgYXRhdSBrYXRhIGxhbHVhbiB0aWRhayBzYWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+Ikx1cGEgbmFtYSBwZW5nZ3VuYSBhdGF1IGthdGEgbGFsdWFuIGFuZGE/XG5MYXdhdGkiPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4iTWVueWVtYWsgYWthdW7igKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkFuZGEgdGVsYWggbWVuYWlwIFBJTiBhbmRhIHNlY2FyYSBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBcblxuQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkFuZGEgdGVsYWggbWVuYWlwIGthdGEgbGFsdWFuIGFuZGEgc2VjYXJhIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFxuXG5DdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iQW5kYSB0ZWxhaCB0ZXJzaWxhcCBtZWx1a2lzIGNvcmFrIGJ1a2Ega3VuY2kgYW5kYSBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBcblxuQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4iQW5kYSB0ZWxhaCBtZW5jdWJhIHVudHVrIG1lbWJ1a2Ega3VuY2kgdGFibGV0IGRlbmdhbiBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgcGVyY3ViYWFuIHlhbmcgdGlkYWsgYmVyamF5YSwgdGFibGV0IGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2VwYWRhIHRldGFwYW4gbGFsYWkga2lsYW5nIGRhbiBzZW11YSBkYXRhIHBlbmdndW5hIGFrYW4gaGlsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiJBbmRhIHRlbGFoIG1lbmN1YmEgdW50dWsgbWVtYnVrYSBrdW5jaSB0ZWxlZm9uIGRlbmdhbiBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgcGVyY3ViYWFuIHlhbmcgdGlkYWsgYmVyamF5YSwgdGVsZWZvbiBha2FuIGRpdGV0YXBrYW4gc2VtdWxhIGtlcGFkYSB0ZXRhcGFuIGxhbGFpIGtpbGFuZyBkYW4gc2VtdWEgZGF0YSBwZW5nZ3VuYSBha2FuIGhpbGFuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IkFuZGEgdGVsYWggbWVuY3ViYSB1bnR1ayBtZW1idWthIGt1bmNpIHRhYmxldCBzZWNhcmEgc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthbGkuIFRhYmxldCBraW5pIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEga2UgdGV0YXBhbiBsYWxhaSBraWxhbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4iQW5kYSB0ZWxhaCBtZW5jdWJhIHVudHVrIG1lbWJ1a2Ega3VuY2kgdGVsZWZvbiBzZWNhcmEgc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthbGkuIFRlbGVmb24ga2luaSBha2FuIGRpdGV0YXBrYW4gc2VtdWxhIGtlIHRldGFwYW4gbGFsYWkga2lsYW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJBbmRhIHRlbGFoIHRlcnNpbGFwIG1lbHVraXMgY29yYWsgYnVrYSBrdW5jaSBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgcGVyY3ViYWFuIHlhbmcgdGlkYWsgYmVyamF5YSwgYW5kYSBha2FuIGRpbWludGEgbWVtYnVrYSBrdW5jaSB0YWJsZXQgYW5kYSBtZW5nZ3VuYWthbiBsb2cgbWFzdWsgR29vZ2xlIGFuZGEuXG5cbiBDdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkFuZGEgdGVsYWggdGVyc2lsYXAgbHVraXMgY29yYWsgYnVrYSBrdW5jaSBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgcGVyY3ViYWFuIHlhbmcgdGlkYWsgYmVyamF5YSwgYW5kYSBha2FuIGRpbWludGEgbWVtYnVrYSBrdW5jaSB0ZWxlZm9uIGFuZGEgbWVuZ2d1bmFrYW4gbG9nIG1hc3VrIEdvb2dsZSBhbmRhLlxuXG4gQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iQWxpaCBrZWx1YXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJCdXRhbmcgbGFndSBzZWJlbHVtbnlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iQnV0YW5nIGxhZ3Ugc2V0ZXJ1c255YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJCdXRhbmcgamVkYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjkyNDYyODg2Mzc0MTE1MDk1NiI+IkJ1dGFuZyBtYWluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4iQnV0YW5nIGJlcmhlbnRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+IlRpYWRhIHBlcmtoaWRtYXRhbi4iPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCmluZGV4IDZhNWJmYTkuLjcxMTM4YTUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iU2tyaXYgaW5uIFBJTi1rb2RlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iU2tyaXYgaW5uIFBVSy1rb2RlIG9nIG55IHBlcnNvbmxpZyBrb2RlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsta29kZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTnkgUElOLWtvZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJTa3JpdiBpbm4gUFVLLWtvZGVuIGZvciBTSU0ta29ydGV0IG9nIGVuIG55IFBJTi1rb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJQVUsta29kZW4gZm9yIFNJTS1rb3J0ZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik55IFBJTi1rb2RlIGZvciBTSU0ta29ydGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iVHJ5a2sgZm9yIMOlIHNrcml2ZSBpbm4gcGFzc29yZCI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IlNrcml2IGlubiBwYXNzb3JkIGZvciDDpSBsw6VzZSBvcHAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJTa3JpdiBpbm4gUElOLWtvZGUgZm9yIMOlIGzDpXNlIG9wcCI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJQYXVzZS1rbmFwcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iQXZzcGlsbGluZ3NrbmFwcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iU3RvcHAta25hcHAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iTGlrdCBhdiBtZWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJTYW5nZXIgZHUgaWtrZSBsaWtlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IkhqZXJ0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkzDpXMgb3BwIGZvciDDpSBmb3J0c2V0dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJTdGFydGVuIGJsZSBrYW5zZWxsZXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IlNsaXBwIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IGZvciDDpSBzbGV0dGUgZGVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBibGlyIGlra2Ugc2xldHRldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSwxMyArMTEyLDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iVGFzdCBpbm4gw7huc2tldCBQSU4ta29kZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJCZWtyZWZ0IMO4bnNrZXQgUElOLWtvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IkzDpXNlciBvcHAgU0lNLWtvcnRldCAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJGZWlsIFBJTi1rb2RlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlNrcml2IGlubiBlbiBQSU4ta29kZSBww6UgZmlyZSB0aWwgw6V0dGUgc2lmcmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLLWtvZGVuIHNrYWwgdsOmcmUgcMOlIMOldHRlIGVsbGVyIGZsZXJlIHNpZmZlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJTa3JpdiBpbm4gZGVuIGtvcnJla3RlIFBVSy1rb2RlbiBww6Ugbnl0dC4gR2plbnRhdHRlIGZvcnPDuGsga29tbWVyIHRpbCDDpSBkZWFrdGl2ZXJlIFNJTS1rb3J0ZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTi1rb2RlbmUgc3RlbW1lciBpa2tlIG92ZXJlbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJGb3IgbWFuZ2UgZm9yc8O4ayBww6UgdGVnbmluZyBhdiBtw7huc3RlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJMb2dnIGRlZyBww6UgbWVkIEdvb2dsZS1rb250b2VuIGRpbiBmb3Igw6UgbMOlc2Ugb3BwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiJMb2dnIHDDpSBtZWQgR29vZ2xlLWtvbnRvZW4gZGluIGZvciDDpSBsw6VzZSBvcHAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiJCcnVrZXJuYXZuIChlLXBvc3RhZHJlc3NlKSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Bhc3N3b3JkX2hpbnQiIG1zZ2lkPSI5MDU3Mjg5MTAzODI3Mjk4NTQ5Ij4iUGFzc29yZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4iTG9nZyBww6UiPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkR1IGhhciB0ZWduZXQgb3BwbMOlc25pbmdzbcO4bnN0ZXJldCBmZWlsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGdhbmdlci4gRXR0ZXIgeXR0ZXJsaWdlcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZ2FsZSBmb3Jzw7hrLCBibGlyIGR1IGJlZHQgb20gw6UgbMOlc2Ugb3BwIHRlbGVmb25lbiB2aWEgZW4gZS1wb3N0a29udG8uXG5cbiBQcsO4diBww6Ugbnl0dCBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJGamVybiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iRmVpbCBQSU4ta29kZSBmb3IgU0lNLWtvcnRldC4gRHUgbcOlIG7DpSBrb250YWt0ZSBvcGVyYXTDuHJlbiBkaW4gZm9yIMOlIGzDpXNlIG9wcCBlbmhldGVuLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iRmVpbCBQSU4ta29kZSBmb3IgU0lNLWtvcnRldC4gRHUgaGFyIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBmb3Jzw7hrIGlnamVuIGbDuHIgZHUgbcOlIGtvbnRha3RlIG9wZXJhdMO4cmVuIGRpbiBmb3Igw6UgbMOlc2Ugb3BwIGVuaGV0ZW4uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iRmVpbCBQSU4ta29kZSBmb3IgU0lNLWtvcnRldC4gRHUgaGFyIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBmb3Jzw7hrIGlnamVuLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNLWtvcnRldCBlciB1YnJ1a2VsaWcuIEtvbnRha3Qgb3BlcmF0w7hyZW4gZGluLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iRmVpbCBQVUsta29kZSBmb3IgU0lNLWtvcnRldC4gRHUgaGFyIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBmb3Jzw7hrIGlnamVuIGbDuHIgU0lNLWtvcnRldCBibGlyIHBlcm1hbmVudCB1YnJ1a2VsaWcuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iRmVpbCBQVUsta29kZSBmb3IgU0lNLWtvcnRldC4gRHUgaGFyIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBmb3Jzw7hrIGlnamVuIGbDuHIgU0lNLWtvcnRldCBibGlyIHBlcm1hbmVudCB1YnJ1a2VsaWcuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJQSU4ta29kZW4gZm9yIFNJTS1rb3J0ZXQgYmxlIGF2dmlzdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlBVSy1rb2RlbiBmb3IgU0lNLWtvcnRldCBibGUgYXZ2aXN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiJLb2RlbiBlciBnb2RramVudC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJGb3JyaWdlIHNwb3Ita25hcHAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJOZXN0ZSBzcG9yLWtuYXBwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IlBhdXNlLWtuYXBwIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmExMTgyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iUElOIOCkleCli+CkoSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIOCksCDgpKjgpK/gpL7gpIEgUElOIOCkleCli+CkoSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsg4KSV4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLgpKjgpK/gpL7gpIEgUElOIOCkleCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IuCkquCkvuCkuOCkteCksOCljeCkoSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljSI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KSq4KS+4KS44KS14KSw4KWN4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIFBJTiDgpJXgpYvgpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMjQyMjIyNTU5MTAwNjEzNDkzNiI+IuCkl+CksuCkpCBQSU4g4KSV4KWL4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KSu4KWH4KSo4KWBIOCkpeCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSk4KWN4KSv4KS44KSq4KSb4KS/IOClpiDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWNldW5sb2NrX211bHRpcGxlX2ZhaWx1cmVzIiBtc2dpZD0iNzU0MTM3NTgzMDIyNzkyNDI5Ij4i4KSF4KSk4KWN4KSv4KS+4KSn4KS/4KSVIOCkruCli+CkueCkoeCkviDgpJbgpYvgpLLgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KS+4KS44KS54KSw4KWCIOCkrOCkouClgCDgpK3gpI/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+IuCkmuCkvuCksOCljeCknCDgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luIiBtc2dpZD0iODExNzU3MjAwMDYzOTk5ODM4OCI+IuCkmuCkvuCksOCljeCknCDgpJfgpLDgpY3gpKbgpYgsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sb3dfYmF0dGVyeSIgbXNnaWQ9IjgxNDM4MDgwMTg3MTkxNzM4NTkiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSa4KS+4KSw4KWN4KSc4KSwIOCknOCli+CkoeCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpK7gpYfgpKjgpYEg4KSl4KS/4KSa4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjkxNjk3MTc3NzkwNTgwMzcxNjgiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSy4KSVIOCkl+CksOCkv+Ckj+CkleCliyDgpJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDk0OTgwNTYxMzA0MjExOTMxIj4iU0lNIOCkleCkvuCksOCljeCkoSDgpJvgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4i4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSu4KS+IFNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiLgpKvgpYvgpKjgpK7gpL4g4KSV4KWB4KSo4KWIIFNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSt4KS/4KSk4KWN4KSwIOCksOCkvuCkluCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iNTk2ODk4NTQ4OTQ2Mzg3MDM1OCI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KS54KSw4KS+4KSH4KSw4KS54KWH4KSV4KWLIOCkmyDgpLXgpL4g4KSq4KSi4KWN4KSoIOCkr+Cli+Ckl+CljeCkryDgpJvgpYjgpKjgpaQgU0lNIOCkleCkvuCksOCljeCkoSDgpLngpL7gpLLgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4i4KSq4KWN4KSw4KSv4KWL4KSXIOCkheCkr+Cli+Ckl+CljeCkryBTSU0g4KSV4KS+4KSw4KWN4KSh4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1ODkyOTQwOTA5Njk5NzIzNTQ0Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIFNJTSDgpJXgpL7gpLDgpY3gpKEg4KS44KWN4KSl4KS+4KSv4KWAIOCksOClguCkquCkruCkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KS/4KSP4KSV4KWLIOCkm+ClpFxuIOCkheCksOCljeCkleCliyBTSU0g4KSV4KS+4KSw4KWN4KSh4KSV4KWLIOCksuCkvuCkl+CkvyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSk4KS+4KSw4KSw4KS54KS/4KSkIOCkuOClh+CkteCkviDgpKrgpY3gpLDgpKbgpL7gpK/gpJXgpLjgpIHgpJcg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCksuCklSDgpJfgpLDgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMzc0NzIzMjQ2NzQ3MTgwMTYzMyI+IlNJTSDgpJXgpL7gpLDgpY3gpKEgUFVLLeCksuCklSDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSF4KSo4KSy4KSVIOCkueClgeCkgeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2NoYW5nZWQiIG1zZ2lkPSI1Njc4NjI0NjI0NjgxNDAwMTkxIj4iJTEkcy4g4KS14KS/4KSc4KWH4KSfICUyJGQgb2YgJTMkZOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiLgpLXgpL/gpJzgpYfgpJ8g4KSl4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i4KSW4KS+4KSy4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLgpIXgpKjgpLLgpJUg4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkteCkv+CkuOCljeCkpOCkvuCksCDgpK3gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiLgpIXgpKjgpLLgpJUg4KSV4KWN4KS34KWH4KSk4KWN4KSwIOCkreCkpOCljeCkleCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOCkteCkv+CknOClh+Ckn+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSb4KSo4KWM4KSf4KSV4KSw4KWN4KSk4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zdGF0dXMiIG1zZ2lkPSI4MDA4MjY0NjAzOTM1OTMwNjExIj4i4KS44KWN4KSl4KS/4KSk4KS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4i4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+IuCkruCkv+CkoeCkv+Ckr+CkviDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKPgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+IuCkteCkv+CknOClh+CknyDgpKrgpYHgpKjgpIPgpJXgpY3gpLDgpK4g4KSX4KSw4KWN4KSo4KWHIOCkuOClgeCksOClgSDgpK3gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLgpLXgpL/gpJzgpYfgpJ8g4KSq4KWB4KSo4KSD4KSV4KWN4KSw4KSuIOCkuOCkruCkvuCkquCljeCkpCDgpK3gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiLgpLXgpL/gpJzgpYfgpJ8gPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4KSu4KWH4KSf4KS+4KSH4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4i4KSF4KSo4KSy4KSVIOCkleCljeCkt+Clh+CkpOCljeCksCDgpKzgpKLgpL7gpIngpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiLgpLjgpY3gpLLgpL7gpIfgpKEg4KSF4KSo4KSy4KSV4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLgpKLgpL7gpIHgpJrgpL4g4KSF4KSo4KSy4KSV4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9mYWNlX3VubG9jayIgbXNnaWQ9IjQ4MTcyODI1NDMzNTE3MTg1MzUiPiLgpKvgpYfgpLgg4KSF4KSo4KSy4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+IlBpbiDgpIXgpKjgpLLgpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSF4KSo4KSy4KSV4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i4KSi4KS+4KSB4KSa4KS+IOCkleCljeCkt+Clh+CkpOCljeCksOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiLgpLjgpY3gpLLgpL7gpIfgpKEg4KSV4KWN4KS34KWH4KSk4KWN4KSw4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjEzMzcyODY1MzgzMTg1NDM1NTUiPiLgpIXgpJjgpL/gpLLgpY3gpLLgpYsg4KSq4KSlIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI3MDczOTI4MzAwNDQ0OTA5MzIwIj4i4KSF4KSw4KWN4KSV4KWLIOCkquCkpSDgpKzgpJ/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLgpLDgpYvgpJXgpY3gpKjgpYcg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLgpKzgpJzgpL7gpIngpKjgpYcg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLgpKzgpJ/gpKgg4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij/gpafgpajgpakiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IuCksOCkpuCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kZWxldGUiIG1zZ2lkPSIzMzM3OTE0ODMzMjA2NjM1NzQ0Ij4i4KSu4KWH4KSf4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiLgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiLgpK7gpYvgpKEg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZW50ZXIiIG1zZ2lkPSIyOTg1ODY0MDE1MDc2MDU5NDY3Ij4i4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9jYW1lcmEiIG1zZ2lkPSI5NjkwNzE5OTc1NTI0ODY4MTQiPiLgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2lsZW50IiBtc2dpZD0iODkzNTUxMjg3NzQ2NTIyMTgyIj4i4KSu4KWM4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NvdW5kb24iIG1zZ2lkPSIzMDA1MjQ2NjY3NTUwMDE3MiI+IuCkhuCkteCkvuCknCDgpJrgpL7gpLLgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuCkluCli+CknOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkruCkvuCkpeCkvyDgpKfgpL/gpLjgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fZG93biIgbXNnaWQ9IjUwODc3Mzk3Mjg2MzkwMTQ1OTUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4KSV4KWLIOCksuCkvuCkl+CkvyDgpKTgpLIg4KS44KWN4KSy4KS+4KSH4KShIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuCkuOCljeCksuCkvuCkh+CkoSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7gpJXgpYsg4KSy4KS+4KSX4KS/IOCkrOCkvuCkr+CkvuCkgeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9yaWdodCIgbXNnaWQ9IjgwMzQ0MzMyNDI1Nzk2MDA5ODAiPiLgpLjgpY3gpLLgpL7gpIfgpKEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+CkvyDgpKbgpL7gpK/gpL7gpIHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IuCkheCkueCkv+CksuClh+CkleCliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4gPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLgpIbgpKrgpKTgpJXgpL7gpLLgpYDgpKgg4KSV4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4i4KSi4KS+4KSB4KSa4KS+IOCkrOCkv+CksOCljeCkuOCkqOClgSDgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IuCkl+CksuCkpCDgpKLgpL7gpIHgpJrgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXNzd29yZCIgbXNnaWQ9IjIzMzMyODE3NjIxMjgxMTMxNTciPiLgpJfgpLLgpKQg4KSq4KS+4KS44KS14KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGluIiBtc2dpZD0iMTEzMTMwNjUxMDgzMzU2MzgwMSI+IuCkl+CksuCkpCBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfY291bnRkb3duIiBtc2dpZD0iNjM1ODExMDIyMTYwMzI5NzU0OCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuCkuOClh+CkleClh+CkqOCljeCkoeCkruCkviDgpKvgpYfgpLDgpL8g4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i4KSG4KSr4KWN4KSo4KWLIOCkouCkvuCkgeCkmuCkviDgpJXgpYvgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJTSU0gUElOIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IlBJTiDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IuCkquCkvuCkuOCkteCksOCljeCkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNIOCkleCkvuCksOCljeCkoSDgpIXgpLngpL/gpLLgpYcg4KSF4KS44KSV4KWN4KS34KSuIOCkm+ClpCDgpLjgpYHgpJrgpL7gpLDgpYEg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyBQVUsg4KSV4KWL4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQgIOCkteCkv+CkteCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KS14KS+4KS54KSV4KSy4KS+4KSIIOCkuOCkruCljeCkquCksOCljeCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i4KSH4KSa4KWN4KSb4KS/4KSkIFBJTiDgpJXgpYvgpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLgpK7gpKjgpKrgpLDgpY3gpKbgpYsgUElOIOCkleCli+CkoSDgpKjgpL/gpLbgpY3gpJrgpL/gpKQg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiLgpJfgpLLgpKQgUElOIOCkleCli+CkoeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IuClqiDgpKbgpYfgpJbgpL8g4KWuIOCkteCkvuCknyDgpKjgpK7gpY3gpKzgpLAg4KSt4KSP4KSV4KWLIOCkj+CkieCkn+CkviBQSU4g4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDgpJXgpYvgpKEg4KWuIOCkteCkn+CkviDgpKjgpK7gpY3gpKzgpLAg4KS14KS+IOCkuOCliyDgpK3gpKjgpY3gpKbgpL4g4KSs4KSi4KWAIOCkueClgeCkqOClgeCkquCksOCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlBVSyDgpJXgpYvgpKEg4KSq4KWB4KSoOuCkquCljeCksOCkpuCkvuCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSn4KWH4KSw4KWIIOCkquClgeCkqDrgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpLLgpYcgU0lN4KSy4KS+4KSIIOCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKrgpK7gpL4g4KSo4KS/4KS34KWN4KSV4KWN4KSw4KS/4KSvIOCkl+CksOCkv+CkpuCkv+CkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIOCkleCli+CkoeCkueCksOClgiDgpK7gpYfgpLIg4KSW4KS+4KSP4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4KSo4KS/4KSV4KWIIOCkp+Clh+CksOCliCDgpKLgpL7gpIHgpJrgpL4g4KSV4KWL4KS44KS/4KS44KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/LCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsgR29vZ2xlIOCkluCkvuCkpOCkvuCkleCliyDgpLjgpL7gpKUg4KS44KS+4KSH4KSoIOCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iNTcxODUzNDI3MjA3MDkyMDM2NCI+IuCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKjgpL7gpK4gKOCkh+CkruClh+CksikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IuCkquCkvuCkuOCkteCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4i4KS44KS+4KSH4KSoIOCkh+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+IuCkheCkruCkvuCkqOCljeCkryDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL7gpKjgpL7gpK4g4KS14KS+IOCkquCkvuCkuOCkteCksOCljeCkoeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiLgpJXgpYcg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKjgpL7gpK4g4KS14KS+IOCkquCkvuCkuOCkteCksOCljeCkoSDgpKzgpL/gpLDgpY3gpLjgpKjgpYHgpK3gpK/gpYs/XG4iPGI+Imdvb2dsZS5jb20vYWNjb3VudHMvcmVjb3ZlcnkiPC9iPiIg4KSu4KS+IOCknOCkvuCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IuCkluCkvuCkpOCkviDgpJzgpL7gpIHgpJog4KS54KWB4KSB4KSm4KWI4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsgUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQgXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleClh+CkqOCljeCkoeCkruCkviDgpKvgpYfgpLDgpL8g4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSVIOCkquCkvuCkuOCkteCksOCljeCkoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSX4KSy4KSkIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJbgpL/gpJrgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleClh+CkqOCljeCkoeCkruCkviDgpKvgpYfgpLDgpL8g4KSV4KWL4KS44KS/4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ/gpLLgpL7gpIgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJXgpYvgpLjgpL/gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSq4KSb4KS/IOCkpeCkqiDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KS54KSw4KWCLCDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSkIOCkleCkvuCksOCljeCkr+CktuCkvuCksuCkvuCkruCkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KS/4KSo4KWHIOCkmyDgpLAg4KS44KSs4KWIIOCkquCljeCksOCkr+Cli+CklyDgpKHgpYfgpJ/gpL4g4KS54KSw4KS+4KSJ4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQwNTEwMTU5NDMwMzgxOTk5MTAiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSX4KSy4KSk4KS44KSB4KSXIOCkq+Cli+CkqOCksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJXgpYvgpLjgpL/gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkr+Cli+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKrgpJvgpL8g4KSl4KSqIOCkheCkuOCkq+CksiDgpJXgpYvgpLjgpL/gpLjgpLngpLDgpYIsIOCkq+Cli+CkqOCksuCkvuCkiCDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpL/gpKjgpYcg4KSbIOCksCDgpLjgpKzgpYgg4KSq4KWN4KSw4KSv4KWL4KSXIOCkoeClh+Ckn+CkviDgpLngpLDgpL7gpIngpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSf4KWN4KSv4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCDgpIXgpKwg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpL7gpLDgpY3gpK/gpLbgpL7gpLLgpL7gpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkl+CksOCkv+CkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4MTc2Mjc0NzQ0MTk0NzE1MTgiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpKvgpYvgpKggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KWHIOCkquCljeCksOCkr+CkpOCljeCkqCDgpJfgpLDgpY3gpKjgpYHgpK3gpK/gpYvgpaQg4KSF4KSsIOCkq+Cli+CkqCDgpKvgpY3gpK/gpL7gpJXgpY3gpJ/gpY3gpLDgpL8g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpLngpYHgpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkhuCkq+CljeCkqOCliyDgpIXgpKjgpLLgpJUg4KSi4KS+4KSB4KSa4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJXgpYvgpLDgpY3gpKjgpYHgpK3gpK/gpYvgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS14KS/4KSr4KSyIOCkquCljeCksOCkr+CkpOCljeCkqOCkueCksOClgiDgpKrgpJvgpL8sIOCkpOCkquCkvuCkiOCkguCksuCkvuCkiCDgpIbgpKvgpY3gpKjgpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkh+CkruClh+CksiDgpJbgpL7gpKTgpL4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CksCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkuOCli+Ckp+Ckv+CkqOClhyDgpJvgpaRcblxuIOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleClh+CkqOCljeCkoeCkueCksOClguCkruCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkhuCkq+CljeCkqOCliyDgpIXgpKjgpLLgpJUg4KSi4KS+4KSB4KSa4KS+IOCkl+CksuCkpCDgpLDgpYLgpKrgpK7gpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkpOCkvuCkqOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkp+Clh+CksOCliCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KS54KSw4KWC4KSq4KSb4KS/LCDgpKTgpKrgpL7gpIjgpIHgpLLgpL7gpIgg4KSP4KSJ4KSf4KS+IOCkh+CkruClh+CksiDgpJbgpL7gpKTgpL7gpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOClh+CksCDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSr4KWL4KSoIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KS44KWL4KSn4KS/4KSo4KWHIOCkm+ClpFxuXG4g4KSr4KWH4KSw4KS/IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleClh+CkqOCljeCkoeCkruCkviDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i4KS54KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i4KSF4KSY4KS/4KSy4KWN4KSy4KWLIOCkn+CljeCksOCkr+CkvuCklSDgpKzgpJ/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLgpIXgpLDgpY3gpJXgpYsg4KSf4KWN4KSw4KSv4KS+4KSVIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiLgpLDgpYvgpJXgpY3gpKjgpYcg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIyOTI0NjI4ODYzNzQxMTUwOTU2Ij4i4KSs4KSf4KSoIOCkrOCknOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzA4NDE3OTMyNDgxMDU3NTc4NyI+IuCkrOCkn+CkqCDgpLDgpYvgpJXgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4i4KSV4KWB4KSo4KWIIOCkuOClh+CkteCkviDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbmUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYTExODIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCisqKgorKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBJTiDgpJXgpYvgpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyDgpLAg4KSo4KSv4KS+4KSBIFBJTiDgpJXgpYvgpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIOCkleCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i4KSo4KSv4KS+4KSBIFBJTiDgpJXgpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY0iPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkquCkvuCkuOCkteCksOCljeCkoSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCBQSU4g4KSV4KWL4KShIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLgpJfgpLLgpKQgUElOIOCkleCli+CkoeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xhYmVsX3RleHQiIG1zZ2lkPSI4NjE3OTY0NjEwMjgyOTg0MjQiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkruClh+CkqOClgSDgpKXgpL/gpJrgpY3gpKjgpYHgpLngpYvgpLjgpY0g4KSwIOCkpOCljeCkr+CkuOCkquCkm+CkvyDgpaYg4KSl4KS/4KSa4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+IuCkheCkpOCljeCkr+CkvuCkp+Ckv+CklSDgpK7gpYvgpLngpKHgpL4g4KSW4KWL4KSy4KWN4KSo4KWHIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClgiDgpKzgpKLgpYAg4KSt4KSP4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiLgpJrgpL7gpLDgpY3gpJwg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbiIgbXNnaWQ9IjgxMTc1NzIwMDA2Mzk5OTgzODgiPiLgpJrgpL7gpLDgpY3gpJwg4KSX4KSw4KWN4KSm4KWILCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkmuCkvuCksOCljeCknOCksCDgpJzgpYvgpKHgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2Rpc2FibGVkIiBtc2dpZD0iMTMzMjI4ODI2ODYwMDMyOTg0MSI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KSu4KWH4KSo4KWBIOCkpeCkv+CkmuCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI5MTY5NzE3Nzc5MDU4MDM3MTY4Ij4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCksuCklSDgpJfgpLDgpL/gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+IuCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkruCkviBTSU0g4KSV4KS+4KSw4KWN4KShIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDgxMTEwMzk1NTA4NjM3NjQzIj4i4KSr4KWL4KSo4KSu4KS+IOCkleClgeCkqOCliCBTSU0g4KSV4KS+4KSw4KWN4KShIOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUyMTA4OTE1MDk5OTU5NDIyNTAiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkreCkv+CkpOCljeCksCDgpLDgpL7gpJbgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkueCksOCkvuCkh+CksOCkueClh+CkleCliyDgpJsg4KS14KS+IOCkquCkouCljeCkqCDgpK/gpYvgpJfgpY3gpK8g4KSb4KWI4KSo4KWkIFNJTSDgpJXgpL7gpLDgpY3gpKEg4KS54KS+4KSy4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGVybWFuZW50X2Rpc2FibGVkX3NpbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iODM0MDgxMzk4OTU4NjYyMjM1NiI+IuCkquCljeCksOCkr+Cli+CklyDgpIXgpK/gpYvgpJfgpY3gpK8gU0lNIOCkleCkvuCksOCljeCkoeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+IuCkpOCkquCkvuCkiOCkgeCkleCliyBTSU0g4KSV4KS+4KSw4KWN4KShIOCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKrgpK7gpL4g4KSF4KS44KSV4KWN4KS34KSuIOCkquCkvuCksOCkv+Ckj+CkleCliyDgpJvgpaRcbiDgpIXgpLDgpY3gpJXgpYsgU0lNIOCkleCkvuCksOCljeCkoeCkleCliyDgpLLgpL7gpJfgpL8g4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkpOCkvuCksOCksOCkueCkv+CkpCDgpLjgpYfgpLXgpL4g4KSq4KWN4KSw4KSm4KS+4KSv4KSV4KS44KSB4KSXIOCkuOCkruCljeCkquCksOCljeCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI2ODc1NzczNDEzMzA2MzgwOTAyIj4iU0lNIOCkleCkvuCksOCljeCkoSDgpLLgpJUg4KSX4KSw4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJTSU0g4KSV4KS+4KSw4KWN4KShIFBVSy3gpLLgpJUg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJTSU0g4KSV4KS+4KSw4KWN4KShIOCkheCkqOCksuCklSDgpLngpYHgpIHgpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuIOCkteCkv+CknOClh+CknyAlMiRkIG9mICUzJGTgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2FkZF93aWRnZXQiIG1zZ2lkPSI4MjczMjc3MDU4NzI0OTI0NjU0Ij4i4KS14KS/4KSc4KWH4KSfIOCkpeCkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9lbXB0eV9zbG90IiBtc2dpZD0iMTI4MTUwNTcwMzMwNzkzMDc1NyI+IuCkluCkvuCksuClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfZXhwYW5kZWQiIG1zZ2lkPSIyMjc4MTA2MDIyMzExMTcwMjk5Ij4i4KSF4KSo4KSy4KSVIOCkleCljeCkt+Clh+CkpOCljeCksCDgpLXgpL/gpLjgpY3gpKTgpL7gpLAg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9jb2xsYXBzZWQiIG1zZ2lkPSI2MzY2OTkyMDY2OTM2MDc2Mzk2Ij4i4KSF4KSo4KSy4KSVIOCkleCljeCkt+Clh+CkpOCljeCksCDgpK3gpKTgpY3gpJXgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDgpLXgpL/gpJzgpYfgpJ/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VzZXJfc2VsZWN0b3IiIG1zZ2lkPSIxMjI2Nzk4MzcwOTEzNjk4ODk2Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkm+CkqOCljOCkn+CkleCksOCljeCkpOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IuCkuOCljeCkpeCkv+CkpOCkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+IuCkleCljeCkr+CkvuCkruClh+CksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiLgpK7gpL/gpKHgpL/gpK/gpL4g4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSj4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiLgpLXgpL/gpJzgpYfgpJ8g4KSq4KWB4KSo4KSD4KSV4KWN4KSw4KSuIOCkl+CksOCljeCkqOClhyDgpLjgpYHgpLDgpYEg4KSt4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4i4KS14KS/4KSc4KWH4KSfIOCkquClgeCkqOCkg+CkleCljeCksOCkriDgpLjgpK7gpL7gpKrgpY3gpKQg4KSt4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2RlbGV0ZWQiIG1zZ2lkPSI0NDI2MjA0MjYzOTI5MjI0NDM0Ij4i4KS14KS/4KSc4KWH4KSfIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOCkruClh+Ckn+CkvuCkh+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IuCkheCkqOCksuCklSDgpJXgpY3gpLfgpYfgpKTgpY3gpLAg4KSs4KSi4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i4KS44KWN4KSy4KS+4KSH4KShIOCkheCkqOCksuCkleClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4i4KSi4KS+4KSB4KSa4KS+IOCkheCkqOCksuCkleClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4i4KSr4KWH4KS4IOCkheCkqOCksuCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQaW4g4KSF4KSo4KSy4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i4KSq4KS+4KS44KS14KSw4KWN4KShIOCkheCkqOCksuCkleClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl9hcmVhIiBtc2dpZD0iNzY3OTg5MTMyNDUwOTU5NzkwNCI+IuCkouCkvuCkgeCkmuCkviDgpJXgpY3gpLfgpYfgpKTgpY3gpLDgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4i4KS44KWN4KSy4KS+4KSH4KShIOCkleCljeCkt+Clh+CkpOCljeCksOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIxMzM3Mjg2NTM4MzE4NTQzNTU1Ij4i4KSF4KSY4KS/4KSy4KWN4KSy4KWLIOCkquCkpSDgpKzgpJ/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzA3MzkyODMwMDQ0NDkwOTMyMCI+IuCkheCksOCljeCkleCliyDgpKrgpKUg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i4KSw4KWL4KSV4KWN4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i4KSs4KSc4KS+4KSJ4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i4KSs4KSf4KSoIOCksOCli+CkleCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/4KWn4KWo4KWpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+IuCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RvbmUiIG1zZ2lkPSIxOTkyNTcxMTE4NDY2Njc5Nzc1Ij4i4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfbW9kZV9jaGFuZ2UiIG1zZ2lkPSI0NTQ3Mzg3NzQxOTA2NTM3NTE5Ij4i4KSu4KWL4KShIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IuCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfdW5sb2NrIiBtc2dpZD0iMjIyODUyNDkwMDQzOTgwMTQ1MyI+IuCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfY2FtZXJhIiBtc2dpZD0iOTY5MDcxOTk3NTUyNDg2ODE0Ij4i4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NpbGVudCIgbXNnaWQ9Ijg5MzU1MTI4Nzc0NjUyMjE4MiI+IuCkruCljOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zb3VuZG9uIiBtc2dpZD0iMzAwNTI0NjY2NzU1MDAxNzIiPiLgpIbgpLXgpL7gpJwg4KSa4KS+4KSy4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLgpJbgpYvgpJzgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+CkvyDgpK7gpL7gpKXgpL8g4KSn4KS/4KS44KS+4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOCkleCliyDgpLLgpL7gpJfgpL8g4KSk4KSyIOCkuOCljeCksuCkvuCkh+CkoSDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLgpLjgpY3gpLLgpL7gpIfgpKEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+CkvyDgpKzgpL7gpK/gpL7gpIHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4i4KS44KWN4KSy4KS+4KSH4KShIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuCkleCliyDgpLLgpL7gpJfgpL8g4KSm4KS+4KSv4KS+4KSB4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9zd2l0Y2hlZCIgbXNnaWQ9IjM3NjgwMDY3ODMxNjY5ODQ0MTAiPiLgpIXgpLngpL/gpLLgpYfgpJXgpYsg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VtZXJnZW5jeV9jYWxsX2xhYmVsIiBtc2dpZD0iNjg0OTQ2MTkyNTIzODMwNTMxIj4i4KSG4KSq4KSk4KSV4KS+4KSy4KWA4KSoIOCkleCksiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iODg1MjAyMTQ2Nzg2ODIyMDYwOCI+IuCkouCkvuCkgeCkmuCkviDgpKzgpL/gpLDgpY3gpLjgpKjgpYEg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiLgpJfgpLLgpKQg4KSi4KS+4KSB4KSa4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4i4KSX4KSy4KSkIOCkquCkvuCkuOCkteCksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiLgpJfgpLLgpKQgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7gpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+IuCkhuCkq+CljeCkqOCliyDgpKLgpL7gpIHgpJrgpL4g4KSV4KWL4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iU0lNIFBJTiDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzNzcyNDIyMzM0OTUxMTE1NTciPiJQSU4g4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSq4KWN4KSw4KS14KS/4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IlNJTSDgpJXgpL7gpLDgpY3gpKEg4KSF4KS54KS/4KSy4KWHIOCkheCkuOCkleCljeCkt+CkriDgpJvgpaQg4KS44KWB4KSa4KS+4KSw4KWBIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8gUFVLIOCkleCli+CkoSDgpKrgpY3gpLDgpLXgpL/gpLfgpY3gpJ/gpL8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkICDgpLXgpL/gpLXgpLDgpKPgpJXgpYsg4KSy4KS+4KSX4KS/IOCkteCkvuCkueCkleCksuCkvuCkiCDgpLjgpK7gpY3gpKrgpLDgpY3gpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IuCkh+CkmuCljeCkm+Ckv+CkpCBQSU4g4KSV4KWL4KShIOCkquCljeCksOCkteCkv+Ckt+CljeCkn+CkvyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4KSu4KSo4KSq4KSw4KWN4KSm4KWLIFBJTiDgpJXgpYvgpKEg4KSo4KS/4KS24KWN4KSa4KS/4KSkIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU0lNIOCkleCkvuCksOCljeCkoSDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSm4KWI4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i4KSX4KSy4KSkIFBJTiDgpJXgpYvgpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLgpaog4KSm4KWH4KSW4KS/IOClriDgpLXgpL7gpJ8g4KSo4KSu4KWN4KSs4KSwIOCkreCkj+CkleCliyDgpI/gpIngpJ/gpL4gUElOIOCkn+CkvuCkh+CkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsg4KSV4KWL4KShIOClriDgpLXgpJ/gpL4g4KSo4KSu4KWN4KSs4KSwIOCkteCkviDgpLjgpYsg4KSt4KSo4KWN4KSm4KS+IOCkrOCkouClgCDgpLngpYHgpKjgpYHgpKrgpLDgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJQVUsg4KSV4KWL4KShIOCkquClgeCkqDrgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIOCkp+Clh+CksOCliCDgpKrgpYHgpKg64KSq4KWN4KSw4KSv4KS+4KS44KS54KSw4KWC4KSy4KWHIFNJTeCksuCkvuCkiCDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkqOCkv+Ckt+CljeCkleCljeCksOCkv+CkryDgpJfgpLDgpL/gpKbgpL/gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiDgpJXgpYvgpKHgpLngpLDgpYIg4KSu4KWH4KSyIOCkluCkvuCkj+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuCkqOCkv+CkleCliCDgpKfgpYfgpLDgpYgg4KSi4KS+4KSB4KSa4KS+IOCkleCli+CkuOCkv+CkuOCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjExMDA1NTEyNjEyNjU1MDY0NDgiPiLgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+Ckvywg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIEdvb2dsZSDgpJbgpL7gpKTgpL7gpJXgpYsg4KS44KS+4KSlIOCkuOCkvuCkh+CkqCDgpIfgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSo4KS+4KSuICjgpIfgpK7gpYfgpLIpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjkwNTcyODkxMDM4MjcyOTg1NDkiPiLgpKrgpL7gpLjgpLXgpLDgpY3gpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IuCkuOCkvuCkh+CkqCDgpIfgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLgpIXgpK7gpL7gpKjgpY3gpK8g4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+4KSo4KS+4KSuIOCkteCkviDgpKrgpL7gpLjgpLXgpLDgpY3gpKHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i4KSV4KWHIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSo4KS+4KSuIOCkteCkviDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSs4KS/4KSw4KWN4KS44KSo4KWB4KSt4KSv4KWLP1xuIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iIOCkruCkviDgpJzgpL7gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjEwNTI2ODUxOTc3MTAyNTIzOTUiPiLgpJbgpL7gpKTgpL4g4KSc4KS+4KSB4KSaIOCkueClgeCkgeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCklSDgpKrgpL7gpLjgpLXgpLDgpY3gpKEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkl+CksuCkpCDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleClh+CkqOCljeCkoeCkruCkviDgpKvgpYfgpLDgpL8g4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL4g4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSW4KS/4KSa4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1NzU1NTcyMDA2MjcxMjg5NDkiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSf4KSy4KS+4KSIIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSV4KWL4KS44KS/4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkquCkm+CkvyDgpKXgpKog4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClgiwg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpCDgpJXgpL7gpLDgpY3gpK/gpLbgpL7gpLLgpL7gpK7gpL4g4KSq4KWB4KSo4KSD4KS44KWH4KSfIOCkl+CksOCkv+CkqOClhyDgpJsg4KSwIOCkuOCkrOCliCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSh4KWH4KSf4KS+IOCkueCksOCkvuCkieCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkl+CksuCkpOCkuOCkgeCklyDgpKvgpYvgpKjgpLLgpL7gpIgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSV4KWL4KS44KS/4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpK/gpYvgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSq4KSb4KS/IOCkpeCkqiDgpIXgpLjgpKvgpLIg4KSV4KWL4KS44KS/4KS44KS54KSw4KWCLCDgpKvgpYvgpKjgpLLgpL7gpIgg4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSkIOCkleCkvuCksOCljeCkr+CktuCkvuCksuCkvuCkruCkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KSX4KSw4KS/4KSo4KWHIOCkmyDgpLAg4KS44KSs4KWIIOCkquCljeCksOCkr+Cli+CklyDgpKHgpYfgpJ/gpL4g4KS54KSw4KS+4KSJ4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyMDcyOTk2MjY5MTQ4NDgzNjM3Ij4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkn+CljeCkr+CkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQg4KSF4KSsIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CksuCkvuCkiCDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKQg4KSV4KS+4KSw4KWN4KSv4KS24KS+4KSy4KS+4KSu4KS+IOCkquClgeCkqOCkg+CkuOClh+CknyDgpJfgpLDgpL/gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSr4KWL4KSoIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOClhyDgpKrgpY3gpLDgpK/gpKTgpY3gpKgg4KSX4KSw4KWN4KSo4KWB4KSt4KSv4KWL4KWkIOCkheCkrCDgpKvgpYvgpKgg4KSr4KWN4KSv4KS+4KSV4KWN4KSf4KWN4KSw4KS/IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCkruCkviDgpKrgpYHgpKjgpIPgpLjgpYfgpJ8g4KS54KWB4KSo4KWHIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpIbgpKvgpY3gpKjgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSV4KWL4KSw4KWN4KSo4KWB4KSt4KSv4KWL4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkteCkv+Ckq+CksiDgpKrgpY3gpLDgpK/gpKTgpY3gpKjgpLngpLDgpYIg4KSq4KSb4KS/LCDgpKTgpKrgpL7gpIjgpILgpLLgpL7gpIgg4KSG4KSr4KWN4KSo4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpIfgpK7gpYfgpLIg4KSW4KS+4KSk4KS+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpLjgpYvgpKfgpL/gpKjgpYcg4KSb4KWkXG5cbiDgpKvgpYfgpLDgpL8g4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpLngpLDgpYLgpK7gpL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpIbgpKvgpY3gpKjgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviDgpJfgpLLgpKQg4KSw4KWC4KSq4KSu4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpKTgpL7gpKjgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKfgpYfgpLDgpYgg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClguCkquCkm+Ckvywg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkj+CkieCkn+CkviDgpIfgpK7gpYfgpLIg4KSW4KS+4KSk4KS+4KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkq+Cli+CkqCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkuOCli+Ckp+Ckv+CkqOClhyDgpJvgpaRcblxuIOCkq+Clh+CksOCkvyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IuCkueCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IuCkheCkmOCkv+CksuCljeCksuCliyDgpJ/gpY3gpLDgpK/gpL7gpJUg4KSs4KSf4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i4KSF4KSw4KWN4KSV4KWLIOCkn+CljeCksOCkr+CkvuCklSDgpKzgpJ/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i4KSw4KWL4KSV4KWN4KSo4KWHIOCkrOCkn+CkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjkyNDYyODg2Mzc0MTE1MDk1NiI+IuCkrOCkn+CkqCDgpKzgpJzgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjMwODQxNzkzMjQ4MTA1NzU3ODciPiLgpKzgpJ/gpKgg4KSw4KWL4KSV4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+IuCkleClgeCkqOCliCDgpLjgpYfgpLXgpL4g4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbAppbmRleCBiOTRjYjcwLi4zNDE0OWM5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlBpbmNvZGUgdHlwZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJHZWVmIGRlIFBVSy1jb2RlIGVuIGRlIG5pZXV3ZSBwaW5jb2RlIG9wIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUstY29kZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTmlldXdlIHBpbmNvZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJUeXAgZGUgcHVrY29kZSB2b29yIGRlIHNpbWthYXJ0IGVuIGRlIG5pZXV3ZSBwaW5jb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJQdWtjb2RlIHZvb3Igc2lta2FhcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik5pZXV3ZSBwaW5jb2RlIHZvb3Igc2lta2FhcnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJSYWFrIGFhbiBvbSB3YWNodHdvb3JkIGluIHRlIHZvZXJlbiI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IlR5cCBoZXQgd2FjaHR3b29yZCBvbSB0ZSBvbnRncmVuZGVsZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJUeXAgcGluY29kZSBvbSB0ZSBvbnRncmVuZGVsZW4iPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iS25vcCB2b29yIG9uZGVyYnJla2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJLbm9wIHZvb3IgYWZzcGVsZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+Iktub3Agdm9vciBzdG9wcGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IkxldWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJOaWV0IGxldWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJIYXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iT250Z3JlbmRlbCBvbSBkb29yIHRlIGdhYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJTdGFydCBnZWFubnVsZWVyZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJaZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gbmVlciBvbSB0ZSB2ZXJ3aWpkZXJlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gd29yZHQgbmlldCB2ZXJ3aWpkZXJkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQWx0Ijwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iR2V3ZW5zdGUgcGluY29kZSBvcGdldmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+Ikdld2Vuc3RlIHBpbmNvZGUgYmV2ZXN0aWdlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU2lta2FhcnQgb250Z3JlbmRlbGVuLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iT25qdWlzdGUgcGluY29kZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJWb2VyIGVlbiBwaW5jb2RlIHZhbiA0IHRvdCA4IGNpamZlcnMgaW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iRGUgUFVLLWNvZGUgaXMgbWluaW1hYWwgYWNodCBudW1tZXJzIGxhbmcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iR2VlZiBkZSBqdWlzdGUgUFVLLWNvZGUgb3BuaWV1dyBvcC4gQmlqIGhlcmhhYWxkZSBwb2dpbmdlbiB3b3JkdCBkZSBzaW1rYWFydCBwZXJtYW5lbnQgdWl0Z2VzY2hha2VsZC4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlUgaGVlZnQgdXcgb250Z3JlbmRlbGluZ3NwYXRyb29uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtlZXIgb25qdWlzdCBnZXRla2VuZC4gTmEgbm9nIGVlbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbWlzbHVrdGUgcG9naW5nZW4gd29yZHQgdSBnZXZyYWFnZCB1dyB0ZWxlZm9vbiB0ZSBvbnRncmVuZGVsZW4gdmlhIGVlbiBlLW1haWxhY2NvdW50LlxuXG4gUHJvYmVlciBoZXQgb3ZlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWNvbmRlbiBvcG5pZXV3LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IlZlcndpamRlcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJPbmp1aXN0ZSBwaW5jb2RlIHZvb3Igc2lta2FhcnQuIFUgbW9ldCBudSBjb250YWN0IG9wbmVtZW4gbWV0IHV3IHByb3ZpZGVyIG9tIHV3IGFwcGFyYWF0IHRlIG9udGdyZW5kZWxlbi4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+Ik9uanVpc3RlIHBpbmNvZGUgdm9vciBzaW1rYWFydC4gVSBoZWVmdCBub2cgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBvZ2luZyBvdmVyIHZvb3JkYXQgdSBjb250YWN0IG1ldCB1dyBwcm92aWRlciBtb2V0IG9wbmVtZW4gb20gdXcgYXBwYXJhYXQgdGUgb250Z3JlbmRlbGVuLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+Ik9uanVpc3RlIHBpbmNvZGUgdm9vciBzaW1rYWFydC4gVSBoZWVmdCBub2cgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBvZ2luZ2VuIG92ZXIuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTaW1rYWFydCBpcyBvbmJydWlrYmFhci4gTmVlbSBjb250YWN0IG9wIG1ldCB1dyBwcm92aWRlci4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+Ik9uanVpc3RlIHB1a2NvZGUgdm9vciBzaW1rYWFydC4gVSBoZWVmdCBub2cgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBvZ2luZyBvdmVyIHZvb3JkYXQgZGUgc2lta2FhcnQgZGVmaW5pdGllZiBvbmJydWlrYmFhciB3b3JkdC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJPbmp1aXN0ZSBwdWtjb2RlIHZvb3Igc2lta2FhcnQuIFUgaGVlZnQgbm9nIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwb2dpbmdlbiBvdmVyIHZvb3JkYXQgZGUgc2lta2FhcnQgZGVmaW5pdGllZiBvbmJydWlrYmFhciB3b3JkdC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IkJld2Vya2luZyBtZXQgcGluY29kZSB2b29yIHNpbWthYXJ0IG1pc2x1a3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJCZXdlcmtpbmcgbWV0IHB1a2NvZGUgdm9vciBzaW1rYWFydCBpcyBtaXNsdWt0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiJDb2RlIGdlYWNjZXB0ZWVyZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJLbm9wIHZvb3Igdm9yaWcgbnVtbWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iS25vcCB2b29yIHZvbGdlbmQgbnVtbWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+Iktub3Agdm9vciBvbmRlcmJyZWtlbiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCmluZGV4IDE1YTRhN2MuLmNmY2JjNDYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iV3Bpc3oga29kIFBJTi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJXcGlzeiBrb2QgUFVLIGkgbm93eSBrb2QgUElOLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iS29kIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTm93eSBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJXcGlzeiBQVUsgaSBub3d5IGtvZCBQSU4ga2FydHkgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJLb2QgUFVLIGthcnR5IFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTm93eSBrb2QgUElOIGthcnR5IFNJTSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IkRvdGtuaWosIGFieSB3cGlzYcSHIGhhc8WCby4iPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJXcGlzeiBoYXPFgm8sIGFieSBvZGJsb2tvd2HEhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJXcGlzeiBrb2QgUElOLCBhYnkgb2RibG9rb3dhxIcuIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IlByenljaXNrIHdzdHJ6eW1hbmlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJQcnp5Y2lzayBvZHR3YXJ6YW5pYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iUHJ6eWNpc2sgemF0cnp5bWFuaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iUG9kb2JhIG1pIHNpxJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJOaWUgcG9kb2JhIG1pIHNpxJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJTZXJjZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+Ik9kYmxva3VqLCBieSBrb250eW51b3dhxIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJVcnVjaG9taWVuaWUgYW51bG93YW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IlVwdcWbxIcgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4sIGJ5IHVzdW7EhcSHLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBuaWUgem9zdGFuaWUgdXN1bmnEmXR5LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iUG9kYWogd3licmFueSBrb2QgUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IlBvdHdpZXJkxbogd3licmFueSBrb2QgUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJPZGJsb2tvd3VqxJkga2FydMSZIFNJTeKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Ik5pZXByYXdpZMWCb3d5IFBJTi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJXcGlzeiBQSU4gbyBkxYJ1Z2/Fm2NpIG9kIDQgZG8gOCBjeWZyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IktvZCBQVUsgbXVzaSBtaWXEhyBjbyBuYWptbmllaiA4IGN5ZnIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iUG9ub3duaWUgcG9kYWogcG9wcmF3bnkga29kIFBVSy4gTmlldWRhbmUgcHLDs2J5IHNwb3dvZHVqxIUgdHJ3YcWCZSB3ecWCxIVjemVuaWUga2FydHkgU0lNLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iUG8gcmF6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IG5pZXByYXdpZMWCb3dvIG5hcnlzb3dhxYJlxZsgd3rDs3Igb2RibG9rb3dhbmlhLiBQbyBrb2xlam55Y2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbmlldWRhbnljaCBwcsOzYmFjaCBrb25pZWN6bmUgYsSZZHppZSBvZGJsb2tvd2FuaWUgdGVsZWZvbnUgcHJ6eSB1xbx5Y2l1IGRhbnljaCBsb2dvd2FuaWEgbmEga29udG8gR29vZ2xlLlxuXG4gU3Byw7NidWogcG9ub3duaWUgemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJVc3XFhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iTmllcHJhd2lkxYJvd3kga29kIFBJTiBrYXJ0eSBTSU0uIE11c2lzeiB0ZXJheiBza29udGFrdG93YcSHIHNpxJkgeiBvcGVyYXRvcmVtLCBieSBvZGJsb2tvd2HFgiBUd29qZSB1cnrEhWR6ZW5pZS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+Ik5pZXByYXdpZMWCb3d5IGtvZCBQSU4ga2FydHkgU0lNLiBNYXN6IGplc3pjemUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHByw7NixJksIHphbmltIGLEmWR6aWVzeiBtdXNpYcWCIHNrb250YWt0b3dhxIcgc2nEmSB6IG9wZXJhdG9yZW0sIGJ5IG9kYmxva293YcWCIFR3b2plIHVyesSFZHplbmllLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+Ik5pZXByYXdpZMWCb3d5IGtvZCBQSU4ga2FydHkgU0lNLiBNYXN6IGplc3pjemUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHByw7NiKHkpLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iS2FydGEgU0lNIHpvc3RhxYJhIHRyd2FsZSB6YWJsb2tvd2FuYS4gU2tvbnRha3R1aiBzacSZIHogb3BlcmF0b3JlbS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+Ik5pZXByYXdpZMWCb3d5IGtvZCBQVUsga2FydHkgU0lNLiBNYXN6IGplc3pjemUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHByw7NixJksIHphbmltIGthcnRhIFNJTSB6b3N0YW5pZSB0cndhbGUgemFibG9rb3dhbmEuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iTmllcHJhd2lkxYJvd3kga29kIFBVSyBrYXJ0eSBTSU0uIE1hc3ogamVzemN6ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHLDs2IoeSksIHphbmltIGthcnRhIFNJTSB6b3N0YW5pZSB0cndhbGUgemFibG9rb3dhbmEuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJPcGVyYWNqYSB6IGtvZGVtIFBJTiBrYXJ0eSBTSU0gbmllIHVkYcWCYSBzacSZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iT3BlcmFjamEgeiBrb2RlbSBQVUsga2FydHkgU0lNIG5pZSB1ZGHFgmEgc2nEmS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iS29kIHpvc3RhxYIgemFha2NlcHRvd2FueS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJQcnp5Y2lzayBwb3ByemVkbmllZ28gdXR3b3J1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iUHJ6eWNpc2sgbmFzdMSZcG5lZ28gdXR3b3J1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IlByenljaXNrIHdzdHJ6eW1hbmlhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAppbmRleCAyMjIwNTFjLi5hYmQ0ZmNkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iRXNjcmV2YSBvIGPDs2RpZ28gUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iRXNjcmV2YSBvIFBVSyBlIG8gbm92byBjw7NkaWdvIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iQ8OzZGlnbyBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik5vdm8gY8OzZGlnbyBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJJbnRyb2R1emlyIFBVSyBkbyBjYXJ0w6NvIFNJTSBlIG8gbm92byBjw7NkaWdvIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iQ8OzZGlnbyBQVUsgZG8gY2FydMOjbyBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik5vdm8gY8OzZGlnbyBQSU4gZG8gY2FydMOjbyBTSU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJUb3F1ZSBwYXJhIGVzY3JldmVyIGEgcGFsYXZyYS1wYXNzZSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IkVzY3JldmEgYSBwYWxhdnJhLXBhc3NlIHBhcmEgZGVzYmxvcXVlYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJFc2NyZXZhIG8gUElOIHBhcmEgZGVzYmxvcXVlYXIiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iQm90w6NvIFBhdXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJCb3TDo28gUmVwcm9kdXppciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iQm90w6NvIFBhcmFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Ikdvc3RvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iTsOjbyBnb3N0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IkNvcmHDp8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkRlc2Jsb3F1ZWFyIHBhcmEgY29udGludWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iTGFuw6dhbWVudG8gY2FuY2VsYWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+Ikxhcmd1ZSA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBwYXJhIGVsaW1pbmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBuw6NvIHNlcsOhIGVsaW1pbmFkby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkludHJvZHV6YSBvIGPDs2RpZ28gUElOIHByZXRlbmRpZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iQ29uZmlybWUgbyBjw7NkaWdvIFBJTiBwcmV0ZW5kaWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJBIGRlc2Jsb3F1ZWFyIGNhcnTDo28gU0lNLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iQ8OzZGlnbyBQSU4gaW5jb3JyZXRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IkludHJvZHV6YSB1bSBQSU4gZW50cmUgNCBlIDggbsO6bWVyb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iTyBjw7NkaWdvIFBVSyBkZXZlIHRlciA4IG91IG1haXMgbsO6bWVyb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iVm9sdGUgYSBpbnRyb2R1emlyIG8gY8OzZGlnbyBQVUsgY29ycmV0by4gRGVtYXNpYWRhcyB0ZW50YXRpdmFzIGNvbnNlY3V0aXZhcyBpcsOjbyBkZXNhdGl2YXIgcGVybWFuZW50ZW1lbnRlIG8gU0lNLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iRGVzZW5ob3UgYSBzZXF1w6puY2lhIGRlIGRlc2Jsb3F1ZWlvIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBEZXBvaXMgZGUgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzIHNlbSBzdWNlc3NvLCBzZXItbGhlLcOhIHBlZGlkbyBwYXJhIGRlc2Jsb3F1ZWFyIG8gdGVsZW3Ds3ZlbCBhdHJhdsOpcyBkZSB1bWEgY29udGEgZGUgZW1haWwuXG5cbiBUZW50ZSBub3ZhbWVudGUgZGVudHJvIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIC0gIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJSZW1vdmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJDw7NkaWdvIFBJTiBkbyBjYXJ0w6NvIFNJTSBpbmNvcnJldG8uIFRlbSBkZSBjb250YWN0YXIgbyBzZXUgb3BlcmFkb3IgcGFyYSBkZXNibG9xdWVhciBvIGRpc3Bvc2l0aXZvLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iQ8OzZGlnbyBQSU4gZG8gY2FydMOjbyBTSU0gaW5jb3JyZXRvLiBUZW0gbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhIGFudGVzIGRlIG5lY2Vzc2l0YXIgZGUgY29udGFjdGFyIG8gc2V1IG9wZXJhZG9yIHBhcmEgZGVzYmxvcXVlYXIgbyBkaXNwb3NpdGl2by4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJDw7NkaWdvIFBJTiBkbyBjYXJ0w6NvIFNJTSBpbmNvcnJldG8uIFRlbSBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iQ2FydMOjbyBTSU0gaW51dGlsaXrDoXZlbC4gQ29udGFjdGUgbyBzZXUgb3BlcmFkb3IuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJDw7NkaWdvIFBVSyBkbyBjYXJ0w6NvIFNJTSBpbmNvcnJldG8uIFRlbSBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmEgYW50ZXMgZGUgbyBjYXJ0w6NvIFNJTSBmaWNhciBwZXJtYW5lbnRlbWVudGUgaW51dGlsaXrDoXZlbC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJDw7NkaWdvIFBVSyBkbyBjYXJ0w6NvIFNJTSBpbmNvcnJldG8uIFRlbSBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzIGFudGVzIGRlIG8gY2FydMOjbyBTSU0gZmljYXIgcGVybWFuZW50ZW1lbnRlIGludXRpbGl6w6F2ZWwuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJGYWxoYSBhbyBpbnRyb2R1emlyIG8gUElOIGRvIGNhcnTDo28gU0lNISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iRmFsaGEgYW8gaW50cm9kdXppciBvIFBVSyBkbyBjYXJ0w6NvIFNJTSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iQ8OzZGlnbyBhY2VpdGUhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iQm90w6NvIEZhaXhhIGFudGVyaW9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iQm90w6NvIEZhaXhhIHNlZ3VpbnRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IkJvdMOjbyBQYXVzYSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCmluZGV4IGE1NjMzNzIuLjI0ZDc4ZTUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iSW5zaXJhIG8gY8OzZGlnbyBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJJbnNpcmEgbyBQVUsgZSBvIG5vdm8gY8OzZGlnbyBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IkPDs2RpZ28gUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiJOb3ZvIGPDs2RpZ28gUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iRGlnaXRlIG8gUFVLIGRvIFNJTSBlIG8gbm92byBjw7NkaWdvIFBJTi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IkPDs2RpZ28gUFVLIGRvIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTm92byBjw7NkaWdvIFBJTiBkbyBTSU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJUb3F1ZSBwYXJhIGluc2VyaXIgYSBzZW5oYSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IkRpZ2l0ZSBhIHNlbmhhIHBhcmEgZGVzYmxvcXVlYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJJbnNpcmEgbyBQSU4gcGFyYSBkZXNibG9xdWVhciI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJCb3TDo28gXCJQYXVzYXJcIiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iQm90w6NvIFwiUmVwcm9kdXppclwiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJCb3TDo28gXCJQYXJhclwiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Ikdvc3RlaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+Ik7Do28gZ29zdGVpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iQ29yYcOnw6NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iRGVzYmxvcXVlaWUgcGFyYSBjb250aW51YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJJbmljaWFsaXphw6fDo28gY2FuY2VsYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IlNvbHRlIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHBhcmEgZXhjbHVpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gbsOjbyBzZXLDoSBleGNsdcOtZG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJEaWdpdGUgbyBjw7NkaWdvIFBJTiBkZXNlamFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJDb25maXJtZSBvIGPDs2RpZ28gUElOIGRlc2VqYWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJEZXNibG9xdWVhbmRvIG8gY2FydMOjbyBTSU3igKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJDw7NkaWdvIFBJTiBpbmNvcnJldG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iRGlnaXRlIHVtIFBJTiBjb20gcXVhdHJvIGEgb2l0byBuw7ptZXJvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJPIGPDs2RpZ28gUFVLIGRldmUgdGVyIDggbsO6bWVyb3Mgb3UgbWFpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJJbnRyb2R1emEgbm92YW1lbnRlIG8gY8OzZGlnbyBQVUsgY29ycmV0by4gTXVpdGFzIHRlbnRhdGl2YXMgbWFsc3VjZWRpZGFzIGRlc2F0aXZhcsOjbyBwZXJtYW5lbnRlbWVudGUgbyBTSU0uIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJWb2PDqiBkZXNlbmhvdSBzdWEgc2VxdcOqbmNpYSBkZSBkZXNibG9xdWVpbyBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gU2UgZml6ZXIgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzIGluY29ycmV0YXMsIHNlcsOhIHNvbGljaXRhZG8gcXVlIHZvY8OqIHVzZSBvIGxvZ2luIGRvIEdvb2dsZSBwYXJhIGRlc2Jsb3F1ZWFyLlxuXG4gVGVudGUgbm92YW1lbnRlIGVtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IlJlbW92ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkPDs2RpZ28gUElOIGRvIFNJTSBpbmNvcnJldG8uIEVudHJlIGVtIGNvbnRhdG8gY29tIGEgb3BlcmFkb3JhIHBhcmEgZGVzYmxvcXVlYXIgbyBkaXNwb3NpdGl2by4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IkPDs2RpZ28gUElOIGRvIFNJTSBpbmNvcnJldG8uIFRlbnRhdGl2YXMgcmVzdGFudGVzOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIENhc28gbyBjw7NkaWdvIGNvcnJldG8gbsOjbyBzZWphIGRpZ2l0YWRvLCBzZXLDoSBuZWNlc3PDoXJpbyBlbnRyYXIgZW0gY29udGF0byBjb20gYSBvcGVyYWRvcmEgcGFyYSBkZXNibG9xdWVhciBvIGRpc3Bvc2l0aXZvLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IkPDs2RpZ28gUElOIGRvIFNJTSBpbmNvcnJldG8uIFRlbnRhdGl2YXMgcmVzdGFudGVzOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJPIFNJTSBlc3TDoSBpbnV0aWxpesOhdmVsLiBFbnRyZSBlbSBjb250YXRvIGNvbSBhIG9wZXJhZG9yYS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IkPDs2RpZ28gUFVLIGRvIFNJTSBpbmNvcnJldG8uIFRlbnRhdGl2YXMgcmVzdGFudGVzOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gQ2FzbyBvIGPDs2RpZ28gY29ycmV0byBuw6NvIHNlamEgZGlnaXRhZG8sIG8gU0lNIHNlIHRvcm5hcsOhIHBlcm1hbmVudGVtZW50ZSBpbnV0aWxpesOhdmVsLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IkPDs2RpZ28gUFVLIGRvIFNJTSBpbmNvcnJldG8uIFRlbnRhdGl2YXMgcmVzdGFudGVzOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIENhc28gbyBjw7NkaWdvIGNvcnJldG8gbsOjbyBzZWphIGRpZ2l0YWRvLCBvIFNJTSBzZSB0b3JuYXLDoSBwZXJtYW5lbnRlbWVudGUgaW51dGlsaXrDoXZlbC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IkZhbGhhIG5hIG9wZXJhw6fDo28gZGUgUElOIGRvIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IkZhbGhhIG5hIG9wZXJhw6fDo28gZGUgUFVLIGRvIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iQ8OzZGlnbyBhY2VpdG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iQm90w6NvIFwiRmFpeGEgYW50ZXJpb3JcIiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IkJvdMOjbyBcIlByw7N4aW1hIGZhaXhhXCIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iQm90w6NvIFwiUGF1c2FyXCIiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXJtL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ybS9zdHJpbmdzLnhtbAppbmRleCA4ZGRhMDU1Li5lZTI2YTNkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXJtL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcm0vc3RyaW5ncy54bWwKQEAgLTIyLDExICsyMiwxMSBAQAogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSAoMzAzNzY4NTc5NjA1ODQ5NTAxNykgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSAoNDgwMDcyNTI2NjkyNTg0NTMzMykgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUgKDMwMzU4NTY1NTAyODk3MjQzMzgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCAoMTM0MTExMjE0NjcxMDA4NzA0OCkgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCAoMTgwMTk0MTA1MTA5NDk3NDYwOSkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0ICg4MDI3NjgwMzIxNjE0MTk2MjU4KSAtLT4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0ICgzMjAxMTUxODQwNTcwNDkyNTM4KSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQgKDc4NTg1NDc0NjQ5ODI5ODEzODQpIC0tPgogICAgIDxza2lwIC8+CkBAIC0xMjEsNiArMTIxLDIwIEBACiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uICg3NjU2MzU4NDgyOTgwOTEyMjE2KSAtLT4KICAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiAoNDUzNTkzODEyOTY2MzkwMzE5NCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiAoODEwMTQzMzY3NzE5MjE3Nzg2MSkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiAoMjMzNjk0MzIzMjQ3NDY4OTg4NykgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciAoNTQyNTgzNzI3MjQxODE3NjE3NikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciAoNzg5Njk5MjE3MTg3ODMwOTM1OCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQgKDQwOTY1NTA1NTI2MzQzOTE0NTEpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCAoNTA4ODMzNTA2NzgwOTA5MzkzKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xODYsOCArMjAwLDYgQEAKICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UgKDg5NTAzOTgwMTY5NzY4NjU3NjIpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUgKDExMzkzMjQ4ODc0MTM4NDY5MTIpIC0tPgotICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2dfaW52YWxpZF9zaW1fcGluX2hpbnQgKDg3OTUxNTkzNTgxMTA2MjAwMDEpIC0tPgogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2dfaW52YWxpZF9zaW1fcHVrX2hpbnQgKDc1NTMzODgzMjU2NTQzNjk1NzUpIC0tPgpAQCAtMjM0LDYgKzI0NiwyMCBAQAogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCAoNzg5OTIwMjk3ODIwNDQzODcwOCkgLS0+CiAgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQgKDMwNTMxMDM5NDU1NzY0OTI0KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlOm9uZSAoODEzNDMxMzk5Nzc5OTYzODI1NCkgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGU6b3RoZXIgKDIyMTU3MjMzNjE1NzUzNTk0ODYpIC0tPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQgKDcwNzc1MzY4MDgyOTEzMTYyMDgpIC0tPgorICAgIDxza2lwIC8+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGU6b25lICgzMjU2ODkzNjA3NTYxMDYwNjQ5KSAtLT4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZTpvdGhlciAoNTQ3NzMwNTIyNjAyNjM0MjAzNikgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Iga2dfcGFzc3dvcmRfcGluX2ZhaWxlZCAoNjI2ODI4ODA5MzU1ODAzMTU2NCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZ19wYXNzd29yZF9wdWtfZmFpbGVkICgyODM4ODI0MzY5NTAyNDU1OTg0KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGtnX3Bpbl9hY2NlcHRlZCAoMTQ0ODI0MTY3MzU3MDAyMDA5NykgLS0+CisgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiAoODIyOTEwODQzMDI0NTY2OTg1NCkgLS0+CiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiAoNDI5OTI1ODMwMDI4Mzc3ODMwNSkgLS0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbAppbmRleCAwMWQ3OWY4Li4xYzdlODhmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IkludHJvZHVjZcWjaSBjb2R1bCBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJJbnRyb2R1Y2XFo2kgY29kdWwgUFVLIMWfaSBub3VsIGNvZCBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IkNvZHVsIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTm91bCBjb2QgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iSW50cm9kdWNlyJtpIGNvZHVsIFBVSyBwZW50cnUgY2FyZHVsIFNJTSDImWkgY29kdWwgUElOIG5vdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iQ29kdWwgUFVLIHBlbnRydSBjYXJkdWwgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJDb2R1bCBQSU4gbm91IHBlbnRydSBjYXJkdWwgU0lNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iQXRpbmdlxaNpIMWfaSBpbnRyb2R1Y2XFo2kgcGFyb2xhIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iSW50cm9kdWNlxaNpIHBhcm9sYSBwZW50cnUgYSBkZWJsb2NhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iSW50cm9kdWNlxaNpIGNvZHVsIFBJTiBwZW50cnUgYSBkZWJsb2NhIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IkJ1dG9udWwgw45udHJlcnVwZcibaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iQnV0b251bCBSZWRhyJtpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJCdXRvbnVsIE9wcmnIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iVm90IHBveml0aXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJWb3QgbmVnYXRpdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IkluaW3EgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkRlYmxvY2HIm2kgcGVudHJ1IGEgY29udGludWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJMYW5zYXJlIGFudWxhdMSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IkVsaWJlcmHIm2kgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gcGVudHJ1IGEgyJl0ZXJnZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iV2lkZ2V0dWwgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gbnUgdmEgZmkgyJl0ZXJzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iSW50cm9kdWNlxaNpIGNvZHVsIFBJTiBkb3JpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJDb25maXJtYcWjaSBjb2R1bCBQSU4gZG9yaXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IlNlIGRlYmxvY2hlYXrEgyBjYXJkdWwgU0lNLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iQ29kIFBJTiBpbmNvcmVjdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJJbnRyb2R1Y2XFo2kgdW4gY29kIFBJTiBmb3JtYXQgZGluIDQgcMOibsSDIGxhIDggY2lmcmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iQ29kdWwgUFVLIHRyZWJ1aWUgc8SDIGFpYsSDIG1pbmltdW0gOCBjaWZyZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJSZWludHJvZHVjZcWjaSBjb2R1bCBQVUsgY29yZWN0LiDDjm5jZXJjxINyaWxlIHJlcGV0YXRlIHZvciBkZXphY3RpdmEgZGVmaW5pdGl2IGNhcmR1bCBTSU0uIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJBxaNpIGRlc2VuYXQgaW5jb3JlY3QgbW9kZWx1bCBwZW50cnUgZGVibG9jYXJlIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IG9yaS4gRHVwxIMgw65uY8SDIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IMOubmNlcmPEg3JpIG5lcmV1xZ9pdGUsIHZpIHNlIHZhIHNvbGljaXRhIHPEgyBkZWJsb2NhxaNpIHRlbGVmb251bCBjdSBhanV0b3J1bCB1bnVpIGNvbnQgZGUgZS1tYWlsLlxuXG4gw45uY2VyY2HFo2kgZGluIG5vdSBwZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiAoZGUpIHNlY3VuZGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iRWxpbWluYcWjaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iQ29kdWwgUElOIHBlbnRydSBjYXJkdWwgU0lNIGVzdGUgaW5jb3JlY3QuIENvbnRhY3RhyJtpIG9wZXJhdG9ydWwgcGVudHJ1IGEgdsSDIGRlYmxvY2EgZGlzcG96aXRpdnVsLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iQ29kdWwgUElOIHBlbnRydSBjYXJkdWwgU0lNIGVzdGUgaW5jb3JlY3QuIFYtYSBtYWkgcsSDbWFzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDDrm5jZXJjYXJlLCBkdXDEgyBjYXJlIHZhIHRyZWJ1aSBzxIMgY29udGFjdGHIm2kgb3BlcmF0b3J1bCBwZW50cnUgYSB2xIMgZGVibG9jYSBkaXNwb3ppdGl2dWwuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iQ29kdWwgUElOIHBlbnRydSBjYXJkdWwgU0lNIGVzdGUgaW5jb3JlY3QuIFYtYXUgbWFpIHLEg21hcyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gw65uY2VyY8SDcmkuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJDYXJkdWwgU0lNIG51IHBvYXRlIGZpIHV0aWxpemF0LiBDb250YWN0YcibaSBvcGVyYXRvcnVsLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iQ29kdWwgUFVLIHBlbnRydSBjYXJkdWwgU0lNIGVzdGUgaW5jb3JlY3QuIFYtYSBtYWkgcsSDbWFzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDDrm5jZXJjYXJlIHDDom7EgyBjw6JuZCBjYXJkdWwgU0lNIHZhIGRldmVuaSBpbnV0aWxpemFiaWwgZGVmaW5pdGl2LiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IkNvZHVsIFBVSyBwZW50cnUgY2FyZHVsIFNJTSBlc3RlIGluY29yZWN0LiBWLWF1IG1haSByxINtYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IMOubmNlcmPEg3JpIHDDom7EgyBjw6JuZCBjYXJkdWwgU0lNIHZhIGRldmVuaSBpbnV0aWxpemFiaWwgZGVmaW5pdGl2LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iRGVibG9jYXJlYSBjdSBhanV0b3J1bCBjb2R1bHVpIFBJTiBwZW50cnUgY2FyZHVsIFNJTSBudSBhIHJldciZaXQhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJEZWJsb2NhcmVhIGN1IGFqdXRvcnVsIGNvZHVsdWkgUFVLIHBlbnRydSBjYXJkdWwgU0lNIG51IGEgcmV1yJlpdCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iQ29kIGFjY2VwdGF0ISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IkJ1dG9udWwgTWVsb2RpYSBhbnRlcmlvYXLEgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IkJ1dG9udWwgTWVsb2RpYSB1cm3Eg3RvYXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IkJ1dG9udWwgw45udHJlcnVwZcibaSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCmluZGV4IDEzNjk4MmEuLjQ4Yzc0NDIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i0JLQstC10LTQuNGC0LUgUElOLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+ItCS0LLQtdC00LjRgtC1IFBVSy3QutC+0LQg0Lgg0L3QvtCy0YvQuSBQSU4t0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUst0LrQvtC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLQndC+0LLRi9C5IFBJTi3QutC+0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLQktCy0LXQtNC40YLQtSBQVUst0LrQvtC0INC4INC90L7QstGL0LkgUElOLdC60L7QtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iUFVLLdC60L7QtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4i0J3QvtCy0YvQuSBQSU4t0LrQvtC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i0J3QsNC20LzQuNGC0LUg0LTQu9GPINCy0LLQvtC00LAg0L/QsNGA0L7Qu9GPIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i0JLQstC10LTQuNGC0LUg0L/QsNGA0L7Qu9GMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i0JLQstC10LTQuNGC0LUgUElOLdC60L7QtCI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLQmtC90L7Qv9C60LAg0L/QsNGD0LfRiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i0JrQvdC+0L/QutCwINCy0L7RgdC/0YDQvtC40LfQstC10LTQtdC90LjRjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i0JrQvdC+0L/QutCwINCy0YvQutC70Y7Rh9C10L3QuNGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+ItCd0YDQsNCy0LjRgtGB0Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiLQndC1INC90YDQsNCy0LjRgtGB0Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLQoNC10LnRgtC40L3QsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+ItCg0LDQt9Cx0LvQvtC60LjRgNGD0LnRgtC1INGN0LrRgNCw0L0sINGH0YLQvtCx0Ysg0L/RgNC+0LTQvtC70LbQuNGC0YwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i0JfQsNC/0YPRgdC6INC+0YLQvNC10L3QtdC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLQntGC0L/Rg9GB0YLQuNGC0LUg0LLQuNC00LbQtdGCIFwiPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz5cIiwg0YfRgtC+0LHRiyDRg9C00LDQu9C40YLRjCDQtdCz0L4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+ItCS0LjQtNC20LXRgiBcIjx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+XCIg0L3QtSDQsdGD0LTQtdGCINGD0LTQsNC70LXQvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiLQkNCR0JIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+ItCS0LLQtdC00LjRgtC1INC20LXQu9Cw0LXQvNGL0LkgUElOLdC60L7QtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLQktCy0LXQtNC40YLQtSBQSU4t0LrQvtC0INC10YnRkSDRgNCw0LciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+ItCg0LDQt9Cx0LvQvtC60LjRgNC+0LLQutCwIFNJTS3QutCw0YDRgtGL4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i0J3QtdCy0LXRgNC90YvQuSBQSU4t0LrQvtC0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+ItCS0LLQtdC00LjRgtC1IFBJTi3QutC+0LQgKNC+0YIgNCDQtNC+IDgg0YbQuNGE0YApLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSy3QutC+0LQg0LTQvtC70LbQtdC9INGB0L7QtNC10YDQttCw0YLRjCDQvdC1INC80LXQvdC10LUgOMKg0YHQuNC80LLQvtC70L7Qsi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLQktCy0LXQtNC40YLQtSDQv9GA0LDQstC40LvRjNC90YvQuSBQVUst0LrQvtC0LiDQn9C+0YHQu9C1INC90LXRgdC60L7Qu9GM0LrQuNGFINC90LXRg9C00LDRh9C90YvRhSDQv9C+0L/Ri9GC0L7QuiBTSU0t0LrQsNGA0YLQsCDQsdGD0LTQtdGCINC30LDQsdC70L7QutC40YDQvtCy0LDQvdCwLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i0JLRiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDRgNCw0Lcg0L3QtdCy0LXRgNC90L4g0YPQutCw0LfQsNC70Lgg0LPRgNCw0YTQuNGH0LXRgdC60LjQuSDQutC70Y7Rhy4g0J/QvtGB0LvQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQvdC10LLQtdGA0L3Ri9GFINC/0L7Qv9GL0YLQvtC6INC00LvRjyDRgNCw0LfQsdC70L7QutC40YDQvtCy0LrQuCDRgtC10LvQtdGE0L7QvdCwINC/0L7RgtGA0LXQsdGD0LXRgtGB0Y8g0LLQvtC50YLQuCDQsiDQsNC60LrQsNGD0L3RgiBHb29nbGUuXG5cbtCf0L7QstGC0L7RgCDRh9C10YDQtdC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INGB0LXQui4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLQo9C00LDQu9C40YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i0J3QtdCy0LXRgNC90YvQuSBQSU4t0LrQvtC0LiDQntCx0YDQsNGC0LjRgtC10YHRjCDQuiDQvtC/0LXRgNCw0YLQvtGA0YMg0YHQstGP0LfQuCwg0YfRgtC+0LHRiyDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMIFNJTS3QutCw0YDRgtGDLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4i0J3QtdCy0LXRgNC90YvQuSBQSU4t0LrQvtC0LiDQntGB0YLQsNC70L7RgdGMINC/0L7Qv9GL0YLQvtC6OiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uINCf0L7RgdC70LUg0Y3RgtC+0LPQviBTSU0t0LrQsNGA0YLQsCDQsdGD0LTQtdGCINC30LDQsdC70L7QutC40YDQvtCy0LDQvdCwINC4INCy0LDQvCDQv9GA0LjQtNC10YLRgdGPINC+0LHRgNCw0YLQuNGC0YzRgdGPINC6INC+0L/QtdGA0LDRgtC+0YDRgyDRgdCy0Y/Qt9C4LiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+ItCd0LXQstC10YDQvdGL0LkgUElOLdC60L7QtC4g0J7RgdGC0LDQu9C+0YHRjCDQv9C+0L/Ri9GC0L7QujogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNLdC60LDRgNGC0LAg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC90LAg0L3QsNCy0YHQtdCz0LTQsC4g0J7QsdGA0LDRgtC40YLQtdGB0Ywg0Log0L7Qv9C10YDQsNGC0L7RgNGDINGB0LLRj9C30LguIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLQndC10LLQtdGA0L3Ri9C5IFBVSy3QutC+0LQuINCe0YHRgtCw0LvQvtGB0Ywg0L/QvtC/0YvRgtC+0Lo6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4g0J/QvtGB0LvQtSDRjdGC0L7Qs9C+IFNJTS3QutCw0YDRgtCwINCx0YPQtNC10YIg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC90LAg0L3QsNCy0YHQtdCz0LTQsC4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiLQndC10LLQtdGA0L3Ri9C5IFBVSy3QutC+0LQuINCe0YHRgtCw0LvQvtGB0Ywg0L/QvtC/0YvRgtC+0Lo6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4g0J/QvtGB0LvQtSDRjdGC0L7Qs9C+IFNJTS3QutCw0YDRgtCwINCx0YPQtNC10YIg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC90LAg0L3QsNCy0YHQtdCz0LTQsC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCBTSU0t0LrQsNGA0YLRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4i0J3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMIFNJTS3QutCw0YDRgtGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+ItCa0L7QtCDQv9GA0LjQvdGP0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLQmtC90L7Qv9C60LAg0L/QtdGA0LXRhdC+0LTQsCDQuiDQv9GA0LXQtNGL0LTRg9GJ0LXQvNGDINGC0YDQtdC60YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLQmtC90L7Qv9C60LAg0L/QtdGA0LXRhdC+0LTQsCDQuiDRgdC70LXQtNGD0Y7RidC10LzRgyDRgtGA0LXQutGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+ItCa0L3QvtC/0LrQsCDQv9Cw0YPQt9GLIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTA0YzdlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxNDAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iUElOIOC2muC3muC2reC2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIOC3g+C3hCDgtrHgt4AgUElOIOC2muC3muC2reC2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsg4Laa4Lea4Lat4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLgtrHgt4AgUElOIOC2muC3muC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IuC2uOC3lOC2u+C2tOC2r+C2uiDgtqfgtrrgt5LgtrTgt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEiPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC2uOC3lOC2u+C2tOC2r+C2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyBQSU4g4LaR4LaaIOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLgt4Dgt5Dgtrvgtq/gt5IgUElOIOC2muC3muC2reC2uuC2muC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pywg4La44LeZ4Lax4LeU4LeAIOC2lOC2tuC3jyDgtrTgt4Pgt5Tgt4AgMCDgtq8g4LaU4La24Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLgtrjgt5Tgt4Tgt5Tgtqsg4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2heC2n+C3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgt5og4LaL4La04La74LeS4La4IOC2tOC3iuKAjeC2u+C2uuC2seC3iuC2reC2uuC2seC3iiDgtpzgtqvgtrEg4LaJ4Laa4LeK4La44LeA4LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NoYXJnZWQiIG1zZ2lkPSIzMjcyMjIzOTA2MDczNDkyNDU0Ij4i4LaF4La74Led4La04LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbiIgbXNnaWQ9IjgxMTc1NzIwMDA2Mzk5OTgzODgiPiLgtobgtrvgt53gtrTgtqvgtrog4LeA4LeZ4La44LeS4Lax4LeKLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i4LaU4La24Lac4LeaIOC2huC2u+C3neC2tOC2muC2uuC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtrjgt5ngtrHgt5Tgt4Ag4LaU4La24Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI5MTY5NzE3Nzc5MDU4MDM3MTY4Ij4i4Lai4LeP4La9IOC2heC2nOC3lOC3heC3lCDgtq/gtrjgt48g4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlNJTSDgtrTgtq0g4Lax4Lec4La44LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miBTSU0g4La04LatIOC2seC3nOC2uOC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgtq3gt5Tgtr0gU0lNIOC2tOC2reC2muC3iiDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+IlNJTSDgtrTgtq0g4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJTSU0g4La04LatIOC2seC3nOC2uOC3kOC2rSDgt4Tgt50g4Laa4LeS4La64LeA4LeS4La6IOC2seC3nOC3hOC3kOC2mi4gU0lNIOC2tOC2reC2muC3iiDgtofgtq3gt5Tgtr3gt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiLgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeFIOC2seC3nOC3hOC3kOC2muC3kiBTSU0g4La04LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+IuC2lOC2tuC2nOC3miBTSU0g4La04LatIOC3g+C3iuC2ruC3kuC2u+C3gCDgtoXgtrbgtr0g4Laa4La7IOC2h+C2rS5cbiDgt4Dgt5ngtrHgtq3gt4ogU0lNIOC2tOC2reC2muC3iiDgt4PgtrPgt4Tgt48g4LaU4La24Lac4LeaIOC2seC3nOC2u+C3kOC3hOC3kOC2seC3iiDgt4Pgt5rgt4Dgt48g4LeD4LeQ4La04La64LeU4La44LeK4Laa4La74LeUIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgtrvgtpzgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IlNJTSDgtrTgtq0g4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJTSU0g4La04LatIFBVSyDgtoXgtpzgt5Tgt4Xgt5Qg4La94LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+IlNJTSDgtrTgtq0g4LaF4Lac4LeU4LeF4LeUIOC3hOC2u+C3kuC2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8IS0tIFN0cmluZy5mb3JtYXQgZmFpbGVkIGZvciB0cmFuc2xhdGlvbiAtLT4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkICg1Njc4NjI0NjI0NjgxNDAwMTkxKSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IuC3gOC3kuC2ouC2p+C2uiDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i4LeE4LeS4LeD4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaF4La74LeS4LaxIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2uiDgt4Dgt5Lgtq/gt4Tgt48g4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IuC2heC2nOC3lOC3heC3lCDgtoXgtrvgt5LgtrEg4La04LeK4oCN4La74Lav4Lea4LeB4La6IOC3hOC3kOC2muC3kuC2veC3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4LeA4LeS4Lai4Lan4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lat4Led4La74Lax4LeK4Lax4LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zdGF0dXMiIG1zZ2lkPSI4MDA4MjY0NjAzOTM1OTMwNjExIj4i4Lat4Lat4LeK4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4i4Laa4LeQ4La44La74LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+IuC2uOC3j+C2sOC3iuKAjeC2uiDgtrTgt4/gtr3gtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+IuC3gOC3kuC2ouC2p+C2uiDgtrHgt5Dgt4Dgtq0g4LaF4Lax4LeU4La04LeS4LeF4LeS4LeA4LeZ4LeF4LanIOC3g+C3kOC2muC3g+C3kuC2uCDgtofgtrvgtrngt5Tgtqvgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4i4LeA4LeS4Lai4Lan4LeKIOC2seC3kOC3gOC2rSDgtoXgtrHgt5TgtrTgt5Lgt4Xgt5Lgt4Dgt5ngtr3gtqcg4LeD4LeQ4Laa4LeD4LeT4La4IOC2heC3gOC3g+C3j+C2seC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOC3gOC3kuC2ouC2p+C2uiDgtrjgt5Dgtprgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IuC2heC2nOC3lOC3heC3lCDgtrHgt5zgtq/gt5Dgtrjgt5Yg4La04LeK4oCN4La74Lav4Lea4LeB4La6IOC2tOC3lOC3heC3lOC2veC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i4LeD4La74LeK4La04LarIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLgtrvgtqfgt48g4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IuC2uOC3lOC3hOC3lOC2qyDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaF4Laf4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUElOIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i4La44LeU4La74La04LavIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i4La74Lan4LePIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4i4LeD4La74LeK4La04LarIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+IuC2tOC3meC2uyDgtpzgt5Pgtq0g4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiLgtongtq/gt5Lgtrvgt5Ig4Lac4LeT4LatIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IuC3gOC3kuC2u+C3j+C2uCDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IuC2sOC3j+C3gOC2miDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IuC2seC3kOC3gOC2reC3k+C2uOC3miDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4i4LaF4LeA4La94LaC4Lac4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiLgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IuC2huC2muC3j+C2u+C2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiLgtofgtq3gt5Tgtr3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLgtoXgtp/gt5Tgtr0g4LaF4La74LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IuC2muC3kOC2uOC2u+C3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLgtrHgt5Lgt4TgtqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i4LeB4La24LeK4LavIOC3g+C2muC3iuKAjeC2u+C3k+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIOC2i+C2qeC2pyDgt4Pgtrvgt4rgtrTgtqvgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgt4PgtrPgt4Tgt48g4La04LeE4La94LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgt4Dgtrjgtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgtq/gtprgt5Tgtqvgtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IuC2r+C3kOC2seC2pyDgt4Pgt5Lgtqfgt5LgtrEg4La04La74LeS4LeB4LeT4La94Laa4La64LePIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IuC3hOC2r+C3kuC3g+C3kiDgtofgtrjgtq3gt5TgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLgtrvgtqfgt4/gt4Ag4LaF4La44Lat4Laa4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiLgt4Dgt5Dgtrvgtq/gt5Ig4La74Lan4LeP4LeA4Laa4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4i4LeA4LeQ4La74Lav4LeSIOC2uOC3lOC2u+C2tOC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJQSU4g4LaR4LaaIOC3gOC3kOC2u+C2r+C3kuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4i4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgtqcg4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i4LaU4La24Lac4LeaIOC2u+C2p+C3j+C3gCDgtoXgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJTSU0gUElOIOC2h+C2reC3lOC2veC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IlBJTiDgtpHgtpog4LaH4Lat4LeU4LeF4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiLgtrjgt5TgtrvgtrTgtq/gtrog4LaH4Lat4LeU4LeF4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IuC2r+C3kOC2seC3iiBTSU0g4LaR4LaaIOC2heC2tuC2vSDgtprgtrsg4LaH4LatLiDgtongtq/gt5Lgtrvgt5Lgtrrgtqcg4La64LeP4La44LanIFBVSyDgtprgt5rgtq3gtrog4La64Lec4Lav4Lax4LeK4LaxLiDgt4Dgt5Lgt4Pgt4rgtq3gtrsg4LeD4Laz4LeE4LePIOC3gOC3j+C3hOC2muC2uuC3jyDgtoXgtrjgtq3gtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IuC2heC2tOC3muC2muC3iuC3guC3kuC2rSBQSU4g4Laa4Lea4Lat4La6IOC2h+C2reC3lOC3heC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4LaF4La04Lea4Laa4LeK4LeC4LeS4LatIFBJTiDgtprgt5rgtq3gtrog4LeD4LeK4Lau4LeS4La7IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU0lNIOC2tOC2rSDgtoXgtpzgt5Tgt4Xgt5Qg4LaF4La74LeS4La44LeS4Lax4LeKLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i4LeA4LeQ4La74Lav4LeSIFBJTiDgtprgt5rgtq3gtrrgtprgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4LaF4LaC4LaaIDQg4LeD4LeS4LanIDgg4LaF4Lat4La7IOC3gOC2sSBQSU4g4LaR4Laa4Laa4LeKIOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIOC2muC3muC2reC2uiDgt4PgtoLgtpvgt4rigI3gtrrgt48gOCDgtprgt4og4LeE4LedIOC3gOC3kOC2qeC3kiDgt4Dgt5Lgtrog4La64LeU4Lat4LeU4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IuC2seC3kuC3gOC3kOC2u+C2r+C3kiBQVUsg4Laa4Lea4Lat4La6IOC2seC3kOC3gOC2rSDgtofgtq3gt5Tgtr3gtq3gt4og4Laa4La74Lax4LeK4LaxLiDgtrHgt5Dgt4Dgtq0g4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgt5Lgtrvgt5Pgtrjgt5ngtrHgt4ogU0lNIOC2keC2miDgt4Pgt4rgtq7gt5Lgtrvgt4Dgtrgg4LaF4La24La9IOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIOC2muC3muC2rSDgtpzgt5Dgtr3gtrTgt5Mg4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4La74Lan4LePIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgt5Lgtrvgt5Pgtrjgt4og4LeA4LeQ4Lap4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IuC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrjgtqcsIOC2lOC2tuC2nOC3miBHb29nbGUg4Lac4LeS4Lar4LeU4La4IOC3g+C2uOC2nCDgtrTgt5TgtrvgtrHgtrog4LeA4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i4La04La74LeS4LeB4LeT4La94LaaIOC2seC3j+C2uOC2uiAo4LaKLeC2reC3kOC2tOC3keC2vSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IuC2uOC3lOC2u+C2tOC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4i4La04LeU4La74Lax4La6IOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i4LeA4La94LaC4Lac4LeUIOC2seC3nOC3gOC2sSDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La64Laa4LeKIOC3hOC3nSDgtrjgt5TgtrvgtrTgtq/gtrrgtprgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuC2lOC2tuC2nOC3miDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La6IOC3hOC3nSDgtrjgt5TgtrvgtrTgtq/gtrog4LaF4La44Lat4Laa4LavP1xuICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDgt4Dgt5ngtq0g4La64Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IuC2nOC3kuC2q+C3lOC2uCDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4La74La44LeS4Lax4LeK4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLgtpTgtrYgUElOIOC2heC2guC2muC2uiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgt4/gtrvgtrrgtprgt4og4LeA4LeQ4La74Lav4LeS4La64LanIOC2p+C2uuC3kuC2tOC3iiDgtprgt5zgtqcg4LaH4LatLlxuXG4g4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtofgtq3gt5Tgt4Xgtq0g4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgtpTgtrbgtpzgt5og4La44LeU4La74La04Lav4La6IOC2lOC2tiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeKIOC2muC2uyDgtofgtq0uIFxuXG7gtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LanIOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4LaU4La2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC3j+C2u+C2uuC2muC3iiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LeaIOC2u+C2p+C3j+C3gCDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4LaH4LazIOC2h+C2rS4gXG5cbuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaH4Lat4LeU4LeF4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IuC2lOC2tiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4LaF4LeA4LeD4LeK4Lau4LePIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La7IOC2h+C2rS4g4LaF4LeA4LeD4LeK4Lau4LePIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtoXgt4Pgt4/gtrvgt4rgtq7gtprgt4Ag4LaL4Lat4LeK4LeD4LeEIOC2muC3kuC2u+C3k+C2uOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt48g4La44LeU4La94LeKIOC2reC2reC3iuC3gOC2uuC2pyDgtrHgt5Dgt4Dgtq0g4La04Lat4LeKIOC3gOC2sSDgtoXgtq3gtrsg4LeD4LeS4La64La94LeUIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeSIOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i4LaU4La2IOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC3gOC3j+C2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgtprgtq/gt5Mg4LeA4LeQ4La74Lav4LeTIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2seC2uuC2seC3iiDgtpzgt5ngtrEg4Lat4LeS4La24LeaLiDgtq3gt4Dgtq3gt4og4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2sSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Laa4La74LeK4La44LeP4Lax4LeK4LatIOC3geC3j+C2veC3j+C3gOC3miDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq/gtqcg4La64LeF4LeSIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC2sSDgtoXgtq3gtrsg4LeD4LeS4La64La94LeU4La4IOC2tOC2u+C3kuC3geC3k+C2veC2miDgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeSIOC3gOC3kyDgtrrgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtpTgtrYg4LeA4LeQ4La74Lav4LeSIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2sSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC2nOC3meC2sSDgtofgtq0uIOC2r+C3kOC2seC3iiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4Laa4La74LeK4La44LeP4Lax4LeK4LatIOC3geC3j+C2veC3jyDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq8g4LeA4LeZ4LatIOC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrgg4Laa4LeZ4La74LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IuC2lOC2tiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgt4Dgt4/gtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC2muC2r+C3kyDgt4Dgt5Dgtrvgtq/gt5Mg4La04LeK4oCN4La74La64Lax4LeK4Lat4La64Lax4LeKIOC2nOC3meC2sSDgtq3gt5Lgtrbgt5ouIOC2r+C3kOC2seC3iiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Laa4La74LeK4La44LeP4Lax4LeK4Lat4LeB4LeP4La94LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2r+C2pyDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt5Qg4La94La24La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgtpTgtrYg4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3kuC2uOC3miDgtrvgtqfgt4/gt4AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4Lat4LeP4LeA4Laa4LeKIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtofgtrMg4LaH4LatLiDgtq3gt4Dgtq3gt4og4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3j+C3hCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2nOC3kuC2q+C3lOC2uCDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La74La44LeS4Lax4LeKIOC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtpTgtrbgtqcg4La04LeA4LeD4Lax4LeUIOC2h+C2rS5cblxuIOC2seC3kOC3gOC2rSDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgtpTgtrYg4LeA4LeQ4La74Lav4LeS4La64LanIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgtpTgtrbgtpzgt5og4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3miDgtrvgtqfgt4/gt4Ag4LaH4LazIOC2h+C2rS4g4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3hCDgtprgt5Lgtrvgt5Pgtrjgt4ogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Lax4LeKIOC2tOC3g+C3lOC3gCwg4LaU4La24Lac4LeaIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4og4La94LeS4La04LeS4Lax4La6IOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LaU4La24Lac4LeZ4Lax4LeKIOC2heC3g+C2uuC3ki5cblxuIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgtrHgt4og4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IuC2ieC3gOC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLgtrTgt5ngtrsg4Lac4LeT4LatIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IuC2ieC2r+C3kuC2u+C3kiDgtpzgt5Pgtq0g4La64Lat4LeU4La7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IuC3gOC3kuC2u+C3j+C2uCDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiLgtrDgt4/gt4DgtrEg4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4i4Lax4LeQ4LeA4Lat4LeU4La44LeKIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg3MDA2NTA0MDMwNTQwNDIxNTMiPiLgt4Pgt5rgt4Dgt4/gt4Ag4Lax4LeQ4LatLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwNGM3ZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxNDAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iUElOIOC2muC3muC2reC2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iUFVLIOC3g+C3hCDgtrHgt4AgUElOIOC2muC3muC2reC2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsg4Laa4Lea4Lat4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLgtrHgt4AgUElOIOC2muC3muC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IuC2uOC3lOC2u+C2tOC2r+C2uiDgtqfgtrrgt5LgtrTgt4og4Laa4LeS4La74LeT4La44LanIOC3g+C3iuC2tOC2u+C3iuC3gSDgtprgtrvgtrHgt4rgtrEiPC9mb250Pjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC2uOC3lOC2u+C2tOC2r+C2uiDgtqfgtrrgt5LgtrTgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyBQSU4g4LaR4LaaIOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiLgt4Dgt5Dgtrvgtq/gt5IgUElOIOC2muC3muC2reC2uuC2muC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pywg4La44LeZ4Lax4LeU4LeAIOC2lOC2tuC3jyDgtrTgt4Pgt5Tgt4AgMCDgtq8g4LaU4La24Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiLgtrjgt5Tgt4Tgt5Tgtqsg4La34LeP4LeA4LeS4Lat4La64LeZ4Lax4LeKIOC2heC2n+C3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgt5og4LaL4La04La74LeS4La4IOC2tOC3iuKAjeC2u+C2uuC2seC3iuC2reC2uuC2seC3iiDgtpzgtqvgtrEg4LaJ4Laa4LeK4La44LeA4LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NoYXJnZWQiIG1zZ2lkPSIzMjcyMjIzOTA2MDczNDkyNDU0Ij4i4LaF4La74Led4La04LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbiIgbXNnaWQ9IjgxMTc1NzIwMDA2Mzk5OTgzODgiPiLgtobgtrvgt53gtrTgtqvgtrog4LeA4LeZ4La44LeS4Lax4LeKLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i4LaU4La24Lac4LeaIOC2huC2u+C3neC2tOC2muC2uuC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4i4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtrjgt5ngtrHgt5Tgt4Ag4LaU4La24Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI5MTY5NzE3Nzc5MDU4MDM3MTY4Ij4i4Lai4LeP4La9IOC2heC2nOC3lOC3heC3lCDgtq/gtrjgt48g4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+IlNJTSDgtrTgtq0g4Lax4Lec4La44LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTQ0NTg0OTAwNTkwOTI2MDAzOSI+IuC2p+C3kOC2tuC3iuC2veC2p+C2uuC3miBTSU0g4La04LatIOC2seC3nOC2uOC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ4MTExMDM5NTUwODYzNzY0MyI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgtq3gt5Tgtr0gU0lNIOC2tOC2reC2muC3iiDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+IlNJTSDgtrTgtq0g4LaH4Lat4LeU4La94LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiJTSU0g4La04LatIOC2seC3nOC2uOC3kOC2rSDgt4Tgt50g4Laa4LeS4La64LeA4LeS4La6IOC2seC3nOC3hOC3kOC2mi4gU0lNIOC2tOC2reC2muC3iiDgtofgtq3gt5Tgtr3gt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiLgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeFIOC2seC3nOC3hOC3kOC2muC3kiBTSU0g4La04LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+IuC2lOC2tuC2nOC3miBTSU0g4La04LatIOC3g+C3iuC2ruC3kuC2u+C3gCDgtoXgtrbgtr0g4Laa4La7IOC2h+C2rS5cbiDgt4Dgt5ngtrHgtq3gt4ogU0lNIOC2tOC2reC2muC3iiDgt4PgtrPgt4Tgt48g4LaU4La24Lac4LeaIOC2seC3nOC2u+C3kOC3hOC3kOC2seC3iiDgt4Pgt5rgt4Dgt48g4LeD4LeQ4La04La64LeU4La44LeK4Laa4La74LeUIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgtrvgtpzgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNjg3NTc3MzQxMzMwNjM4MDkwMiI+IlNJTSDgtrTgtq0g4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJTSU0g4La04LatIFBVSyDgtoXgtpzgt5Tgt4Xgt5Qg4La94LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+IlNJTSDgtrTgtq0g4LaF4Lac4LeU4LeF4LeUIOC3hOC2u+C3kuC2uOC3kuC2seC3ii4uLiI8L3N0cmluZz4KKyAgICA8IS0tIFN0cmluZy5mb3JtYXQgZmFpbGVkIGZvciB0cmFuc2xhdGlvbiAtLT4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkICg1Njc4NjI0NjI0NjgxNDAwMTkxKSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IuC3gOC3kuC2ouC2p+C2uiDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i4LeE4LeS4LeD4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLgtoXgtpzgt5Tgt4Xgt5Qg4LaF4La74LeS4LaxIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2uiDgt4Dgt5Lgtq/gt4Tgt48g4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdW5sb2NrX2FyZWFfY29sbGFwc2VkIiBtc2dpZD0iNjM2Njk5MjA2NjkzNjA3NjM5NiI+IuC2heC2nOC3lOC3heC3lCDgtoXgtrvgt5LgtrEg4La04LeK4oCN4La74Lav4Lea4LeB4La6IOC3hOC3kOC2muC3kuC2veC3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXQiIG1zZ2lkPSI2NTI3MTMxMDM5NzQxODA4MjQwIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4LeA4LeS4Lai4Lan4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiLgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lat4Led4La74Lax4LeK4Lax4LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zdGF0dXMiIG1zZ2lkPSI4MDA4MjY0NjAzOTM1OTMwNjExIj4i4Lat4Lat4LeK4LeA4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9jYW1lcmEiIG1zZ2lkPSI4OTA0MjMxMTk0MTgxMTE0NjAzIj4i4Laa4LeQ4La44La74LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z2F1cmRfYWNjZXNzaWJpbGl0eV9tZWRpYV9jb250cm9scyIgbXNnaWQ9IjI2MjIwOTY1NDI5MjE2MTgwNiI+IuC2uOC3j+C2sOC3iuKAjeC2uiDgtrTgt4/gtr3gtpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+IuC3gOC3kuC2ouC2p+C2uiDgtrHgt5Dgt4Dgtq0g4LaF4Lax4LeU4La04LeS4LeF4LeS4LeA4LeZ4LeF4LanIOC3g+C3kOC2muC3g+C3kuC2uCDgtofgtrvgtrngt5Tgtqvgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9lbmQiIG1zZ2lkPSI3MTcwMTkwOTUwODcwNDY4MzIwIj4i4LeA4LeS4Lai4Lan4LeKIOC2seC3kOC3gOC2rSDgtoXgtrHgt5TgtrTgt5Lgt4Xgt5Lgt4Dgt5ngtr3gtqcg4LeD4LeQ4Laa4LeD4LeT4La4IOC2heC3gOC3g+C3j+C2seC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IOC3gOC3kuC2ouC2p+C2uiDgtrjgt5Dgtprgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IuC2heC2nOC3lOC3heC3lCDgtrHgt5zgtq/gt5Dgtrjgt5Yg4La04LeK4oCN4La74Lav4Lea4LeB4La6IOC2tOC3lOC3heC3lOC2veC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i4LeD4La74LeK4La04LarIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLgtrvgtqfgt48g4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IuC2uOC3lOC3hOC3lOC2qyDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaF4Laf4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bpbl91bmxvY2siIG1zZ2lkPSIyNDY5Njg3MTExNzg0MDM1MDQ2Ij4iUElOIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i4La44LeU4La74La04LavIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i4La74Lan4LePIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX2FyZWEiIG1zZ2lkPSI2NzM2MDY0NDk0MDE5OTc5NTQ0Ij4i4LeD4La74LeK4La04LarIOC2tOC3iuKAjeC2u+C2r+C3muC3geC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTMzNzI4NjUzODMxODU0MzU1NSI+IuC2tOC3meC2uyDgtpzgt5Pgtq0g4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiLgtongtq/gt5Lgtrvgt5Ig4Lac4LeT4LatIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IuC3gOC3kuC2u+C3j+C2uCDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IuC2sOC3j+C3gOC2miDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IuC2seC3kOC3gOC2reC3k+C2uOC3miDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2FsdCIgbXNnaWQ9IjQ4NTY4Njg4MjAwNDAwNTE5MzkiPiJBbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9jYW5jZWwiIG1zZ2lkPSIxMjAzOTg0MDE3MjQ1NzgzMjQ0Ij4i4LaF4LeA4La94LaC4Lac4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiLgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IuC2huC2muC3j+C2u+C2uiDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfc2hpZnQiIG1zZ2lkPSIyMjcwNzQ4ODE0MzE1MTQ3NjkwIj4iU2hpZnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9lbnRlciIgbXNnaWQ9IjI5ODU4NjQwMTUwNzYwNTk0NjciPiLgtofgtq3gt5Tgtr3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3VubG9jayIgbXNnaWQ9IjIyMjg1MjQ5MDA0Mzk4MDE0NTMiPiLgtoXgtp/gt5Tgtr0g4LaF4La74LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IuC2muC3kOC2uOC2u+C3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLgtrHgt5Lgt4TgtqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i4LeB4La24LeK4LavIOC3g+C2muC3iuKAjeC2u+C3k+C2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIOC2i+C2qeC2pyDgt4Pgtrvgt4rgtrTgtqvgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9kb3duIiBtc2dpZD0iNTA4NzczOTcyODYzOTAxNDU5NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDgt4PgtrPgt4Tgt48g4La04LeE4La94LanIOC3g+C2u+C3iuC2tOC2q+C2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgt4Dgtrjgtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fcmlnaHQiIG1zZ2lkPSI4MDM0NDMzMjQyNTc5NjAwOTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgtq/gtprgt5Tgtqvgtqcg4LeD4La74LeK4La04Lar4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IuC2r+C3kOC2seC2pyDgt4Pgt5Lgtqfgt5LgtrEg4La04La74LeS4LeB4LeT4La94Laa4La64LePIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbWVyZ2VuY3lfY2FsbF9sYWJlbCIgbXNnaWQ9IjY4NDk0NjE5MjUyMzgzMDUzMSI+IuC3hOC2r+C3kuC3g+C3kiDgtofgtrjgtq3gt5TgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLgtrvgtqfgt4/gt4Ag4LaF4La44Lat4Laa4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGF0dGVybiIgbXNnaWQ9IjE4NTA4MDYwNzA4MDEzNTg4MzAiPiLgt4Dgt5Dgtrvgtq/gt5Ig4La74Lan4LeP4LeA4Laa4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4i4LeA4LeQ4La74Lav4LeSIOC2uOC3lOC2u+C2tOC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJQSU4g4LaR4LaaIOC3gOC3kOC2u+C2r+C3kuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4i4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgtqcg4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i4LaU4La24Lac4LeaIOC2u+C2p+C3j+C3gCDgtoXgtrPgt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fcGluX2luc3RydWN0aW9ucyIgbXNnaWQ9IjIzMTk1MDg1NTA5MzQ1NTczMzEiPiJTSU0gUElOIOC2h+C2reC3lOC2veC3lCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IlBJTiDgtpHgtpog4LaH4Lat4LeU4LeF4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU3NTM2NDY1NTYxODY5MzY4MTkiPiLgtrjgt5TgtrvgtrTgtq/gtrog4LaH4Lat4LeU4LeF4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IuC2r+C3kOC2seC3iiBTSU0g4LaR4LaaIOC2heC2tuC2vSDgtprgtrsg4LaH4LatLiDgtongtq/gt5Lgtrvgt5Lgtrrgtqcg4La64LeP4La44LanIFBVSyDgtprgt5rgtq3gtrog4La64Lec4Lav4Lax4LeK4LaxLiDgt4Dgt5Lgt4Pgt4rgtq3gtrsg4LeD4Laz4LeE4LePIOC3gOC3j+C3hOC2muC2uuC3jyDgtoXgtrjgtq3gtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IuC2heC2tOC3muC2muC3iuC3guC3kuC2rSBQSU4g4Laa4Lea4Lat4La6IOC2h+C2reC3lOC3heC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i4LaF4La04Lea4Laa4LeK4LeC4LeS4LatIFBJTiDgtprgt5rgtq3gtrog4LeD4LeK4Lau4LeS4La7IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4iU0lNIOC2tOC2rSDgtoXgtpzgt5Tgt4Xgt5Qg4LaF4La74LeS4La44LeS4Lax4LeKLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i4LeA4LeQ4La74Lav4LeSIFBJTiDgtprgt5rgtq3gtrrgtprgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i4LaF4LaC4LaaIDQg4LeD4LeS4LanIDgg4LaF4Lat4La7IOC3gOC2sSBQSU4g4LaR4Laa4Laa4LeKIOC2p+C2uuC3kuC2tOC3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIOC2muC3muC2reC2uiDgt4PgtoLgtpvgt4rigI3gtrrgt48gOCDgtprgt4og4LeE4LedIOC3gOC3kOC2qeC3kiDgt4Dgt5Lgtrog4La64LeU4Lat4LeU4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IuC2seC3kuC3gOC3kOC2u+C2r+C3kiBQVUsg4Laa4Lea4Lat4La6IOC2seC3kOC3gOC2rSDgtofgtq3gt5Tgtr3gtq3gt4og4Laa4La74Lax4LeK4LaxLiDgtrHgt5Dgt4Dgtq0g4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgt5Lgtrvgt5Pgtrjgt5ngtrHgt4ogU0lNIOC2keC2miDgt4Pgt4rgtq7gt5Lgtrvgt4Dgtrgg4LaF4La24La9IOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIOC2muC3muC2rSDgtpzgt5Dgtr3gtrTgt5Mg4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4La74Lan4LePIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgt5Lgtrvgt5Pgtrjgt4og4LeA4LeQ4Lap4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IuC2heC2nOC3lOC3heC3lCDgtofgtrvgt5PgtrjgtqcsIOC2lOC2tuC2nOC3miBHb29nbGUg4Lac4LeS4Lar4LeU4La4IOC3g+C2uOC2nCDgtrTgt5TgtrvgtrHgtrog4LeA4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI1NzE4NTM0MjcyMDcwOTIwMzY0Ij4i4La04La74LeS4LeB4LeT4La94LaaIOC2seC3j+C2uOC2uiAo4LaKLeC2reC3kOC2tOC3keC2vSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IuC2uOC3lOC2u+C2tOC2r+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4i4La04LeU4La74Lax4La6IOC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2ludmFsaWRfaW5wdXQiIG1zZ2lkPSI1NzU0NjY0MTE5MzE5ODcyMTk3Ij4i4LeA4La94LaC4Lac4LeUIOC2seC3nOC3gOC2sSDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La64Laa4LeKIOC3hOC3nSDgtrjgt5TgtrvgtrTgtq/gtrrgtprgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fYWNjb3VudF9yZWNvdmVyeV9oaW50IiBtc2dpZD0iNTY5MDcwOTEzMjg0MTc1Mjk3NCI+IuC2lOC2tuC2nOC3miDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lax4LeP4La44La6IOC3hOC3nSDgtrjgt5TgtrvgtrTgtq/gtrog4LaF4La44Lat4Laa4LavP1xuICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+IiDgt4Dgt5ngtq0g4La64Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IuC2nOC3kuC2q+C3lOC2uCDgtrTgtrvgt5Pgtprgt4rgt4Lgt48g4Laa4La74La44LeS4Lax4LeK4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLgtpTgtrYgUElOIOC2heC2guC2muC2uiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgt4/gtrvgtrrgtprgt4og4LeA4LeQ4La74Lav4LeS4La64LanIOC2p+C2uuC3kuC2tOC3iiDgtprgt5zgtqcg4LaH4LatLlxuXG4g4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtofgtq3gt5Tgt4Xgtq0g4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgtpTgtrbgtpzgt5og4La44LeU4La74La04Lav4La6IOC2lOC2tiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeKIOC2muC2uyDgtofgtq0uIFxuXG7gtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LanIOC2tOC3g+C3lOC3gCDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4LaU4La2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC3j+C2u+C2uuC2muC3iiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LeaIOC2u+C2p+C3j+C3gCDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4LaH4LazIOC2h+C2rS4gXG5cbuC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaH4Lat4LeU4LeF4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTU3NTU1NzIwMDYyNzEyODk0OSI+IuC2lOC2tiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4LaF4LeA4LeD4LeK4Lau4LePIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La7IOC2h+C2rS4g4LaF4LeA4LeD4LeK4Lau4LePIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtoXgt4Pgt4/gtrvgt4rgtq7gtprgt4Ag4LaL4Lat4LeK4LeD4LeEIOC2muC3kuC2u+C3k+C2uOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2muC2u+C3iuC2uOC3j+C2seC3iuC2rSDgt4Hgt4/gtr3gt48g4La44LeU4La94LeKIOC2reC2reC3iuC3gOC2uuC2pyDgtrHgt5Dgt4Dgtq0g4La04Lat4LeKIOC3gOC2sSDgtoXgtq3gtrsg4LeD4LeS4La64La94LeUIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeSIOC3gOC3meC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i4LaU4La2IOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LaH4La74LeT4La44LanIOC3gOC3j+C2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgtprgtq/gt5Mg4LeA4LeQ4La74Lav4LeTIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2seC2uuC2seC3iiDgtpzgt5ngtrEg4Lat4LeS4La24LeaLiDgtq3gt4Dgtq3gt4og4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2sSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Laa4La74LeK4La44LeP4Lax4LeK4LatIOC3geC3j+C2veC3j+C3gOC3miDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq/gtqcg4La64LeF4LeSIOC2tOC3kuC3hOC3kuC2p+C3lOC3gOC2sSDgtoXgtq3gtrsg4LeD4LeS4La64La94LeU4La4IOC2tOC2u+C3kuC3geC3k+C2veC2miDgtq/gtq3gt4rgtq0g4Lax4LeQ4Lat4LeSIOC3gOC3kyDgtrrgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjIwNzI5OTYyNjkxNDg0ODM2MzciPiLgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtpTgtrYg4LeA4LeQ4La74Lav4LeSIOC2tOC3iuKAjeC2u+C2uuC2reC3iuC2sSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC2nOC3meC2sSDgtofgtq0uIOC2r+C3kOC2seC3iiDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4Laa4La74LeK4La44LeP4Lax4LeK4LatIOC3geC3j+C2veC3jyDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq8g4LeA4LeZ4LatIOC2uuC3heC3kiDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4Dgt5Pgtrgg4Laa4LeZ4La74LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IuC2lOC2tiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgt4Dgt4/gtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC2muC2r+C3kyDgt4Dgt5Dgtrvgtq/gt5Mg4La04LeK4oCN4La74La64Lax4LeK4Lat4La64Lax4LeKIOC2nOC3meC2sSDgtq3gt5Lgtrbgt5ouIOC2r+C3kOC2seC3iiDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Laa4La74LeK4La44LeP4Lax4LeK4Lat4LeB4LeP4La94LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2r+C2pyDgtrTgt5Lgt4Tgt5Lgtqfgt5Tgt4DgtrHgt5Qg4La94La24La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgtpTgtrYg4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3kuC2uOC3miDgtrvgtqfgt4/gt4AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4Lat4LeP4LeA4Laa4LeKIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtofgtrMg4LaH4LatLiDgtq3gt4Dgtq3gt4og4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3j+C3hCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2nOC3kuC2q+C3lOC2uCDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La74La44LeS4Lax4LeKIOC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtpTgtrbgtqcg4La04LeA4LeD4Lax4LeUIOC2h+C2rS5cblxuIOC2seC3kOC3gOC2rSDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgtpTgtrYg4LeA4LeQ4La74Lav4LeS4La64LanIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgtpTgtrbgtpzgt5og4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3miDgtrvgtqfgt4/gt4Ag4LaH4LazIOC2h+C2rS4g4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3hCDgtprgt5Lgtrvgt5Pgtrjgt4ogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Lax4LeKIOC2tOC3g+C3lOC3gCwg4LaU4La24Lac4LeaIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4og4La94LeS4La04LeS4Lax4La6IOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LaU4La24Lac4LeZ4Lax4LeKIOC2heC3g+C2uuC3ki5cblxuIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgtrHgt4og4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IuC2ieC3gOC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLgtrTgt5ngtrsg4Lac4LeT4LatIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IuC2ieC2r+C3kuC2u+C3kiDgtpzgt5Pgtq0g4La64Lat4LeU4La7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IuC3gOC3kuC2u+C3j+C2uCDgtrbgt5zgtq3gt4rgtq3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiLgtrDgt4/gt4DgtrEg4La24Lec4Lat4LeK4Lat4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4i4Lax4LeQ4LeA4Lat4LeU4La44LeKIOC2tuC3nOC2reC3iuC2reC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg3MDA2NTA0MDMwNTQwNDIxNTMiPiLgt4Pgt5rgt4Dgt4/gt4Ag4Lax4LeQ4LatLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKaW5kZXggNGIyZTFlMy4uY2RmOGNhOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJaYWRhanRlIGvDs2QgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iWmFkYWp0ZSBrw7NkIFBVSyBhIG5vdsO9IGvDs2QgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJLw7NkIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTm92w70ga8OzZCBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJaYWRhanRlIGvDs2QgUFVLIGthcnR5IFNJTSBhIG5vdsO9IGvDs2QgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJLw7NkIFBVSyBrYXJ0eSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik5vdsO9IGvDs2QgUElOIGthcnR5IFNJTSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IkRvdGtudXTDrW0gemFkYWp0ZSBoZXNsbyI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IlphZGFqdGUgaGVzbG8gbmEgb2RvbWtudXRpZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IlphZGFqdGUga8OzZCBQSU4gbmEgb2RvbWtudXRpZSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJUbGHEjWlkbG8gUG96YXN0YXZpxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IlRsYcSNaWRsbyBQcmVocmHFpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iVGxhxI1pZGxvIFphc3RhdmnFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJQw6HEjWkgc2EgbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJOZXDDocSNaSBzYSBtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IlNyZGNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iT2RvbWtuaXRlIHphcmlhZGVuaWUgYSBwb2tyYcSNdWp0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IlNwdXN0ZW5pZSBib2xvIHpydcWhZW7DqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJVdm/Evm5lbsOtbSBkb3R5a3UgbWluaWFwbGlrw6FjaXUgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gb2RzdHLDoW5pdGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ik1pbmlhcGxpa8OhY2lhIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG5lYnVkZSBvZHN0csOhbmVuw6EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJaYWRhanRlIHBvxb5hZG92YW7DvSBrw7NkIFBJTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJQb3R2csSPdGUgcG/FvmFkb3ZhbsO9IGvDs2QgUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJQcmViaWVoYSBvZG9teWthbmllIGthcnR5IFNJTS4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+Ik5lc3Byw6F2bnkga8OzZCBQSU4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iWmFkYWp0ZSBrw7NkIFBJTiBzIGTEusW+a291IDQgYcW+IDggxI3DrXNsaWMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iS8OzZCBQVUsgbXVzw60gb2JzYWhvdmHFpSA4IGFsZWJvIHZpYWMgxI3DrXNsaWMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iWm5vdmEgemFkYWp0ZSBzcHLDoXZueSBrw7NkIFBVSy4gT3Bha292YW7DqSBwb2t1c3kgemFrw6HFvnUga2FydHUgU0lNIG5hdHJ2YWxvLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ta3LDoXQgc3RlIG5lc3Byw6F2bmUgbmFrcmVzbGlsaSBzdm9qIGJlenBlxI1ub3N0bsO9IHZ6b3IuIFBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IMSPYWzFocOtY2ggbmXDunNwZcWhbsO9Y2ggcG9rdXNvY2ggc2Egem9icmF6w60gdsO9enZhIG5hIG9kb21rbnV0aWUgdGVsZWbDs251IHBvbW9jb3UgZS1tYWlsb3bDqWhvIMO6xI10dS5cblxuIFNrw7pzdGUgdG8gem5vdmEgbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+Ik9kc3Ryw6FuacWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJOZXNwcsOhdm55IGvDs2QgUElOIGthcnR5IFNJTS4gVGVyYXogbXVzw610ZSBrb250YWt0b3ZhxaUgc3ZvamhvIG9wZXLDoXRvcmEsIGFieSB2w6FtIG9kb21rb2wgemFyaWFkZW5pZS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+Ik5lc3Byw6F2bnkga8OzZCBQSU4ga2FydHkgU0lNLiBab3N0w6F2YSB2w6FtIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwb2t1cywgaW5hayBidWRldGUgbXVzaWXFpSBrb250YWt0b3ZhxaUgc3ZvamhvIG9wZXLDoXRvcmEsIGFieSB2w6FtIG9kb21rb2wgemFyaWFkZW5pZS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJOZXNwcsOhdm55IGvDs2QgUElOIGthcnR5IFNJTS4gUG/EjWV0IHpvc3TDoXZhasO6Y2ljaCBwb2t1c292OiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJLYXJ0YSBTSU0gamUgbmVwb3XFvml0ZcS+bsOhLiBLb250YWt0dWp0ZSBzdm9qaG8gb3BlcsOhdG9yYS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+Ik5lc3Byw6F2bnkga8OzZCBQVUsga2FydHkgU0lNLiBab3N0w6F2YSB2w6FtIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwb2t1cywgaW5hayBzYSB2YcWhYSBrYXJ0YSBTSU0gbmF0cnZhbG8gemFibG9rdWplLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+Ik5lc3Byw6F2bnkga8OzZCBQVUsga2FydHkgU0lNLiBQb8SNZXQgem9zdMOhdmFqw7pjaWNoIHBva3Vzb3YgcHJlZCB0cnZhbMO9bSB6YWJsb2tvdmFuw61tIGthcnR5IFNJTTogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iT3BlcsOhY2lhIGvDs2R1IFBJTiBrYXJ0eSBTSU0gemx5aGFsYSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+Ik9wZXLDoWNpYSBrw7NkdSBQVUsga2FydHkgU0lNIHpseWhhbGEhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IkvDs2QgYm9sIHByaWphdMO9ISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IlRsYcSNaWRsbyBQcmVkY2jDoWR6YWrDumNhIHN0b3BhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iVGxhxI1pZGxvIMSOYWzFoWlhIHN0b3BhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IlRsYcSNaWRsbyBQb3phc3RhdmnFpSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCmluZGV4IGI2Y2ZjMWMuLmIwZWM4NGUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iVm5lc2l0ZSBrb2RvIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlZuZXNpdGUga29kbyBQVUsgaW4gbm92byBrb2RvIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iS29kYSBQVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik5vdmEga29kYSBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJWbmVzaXRlIGtvZG8gUFVLIGluIG5vdm8ga29kbyBQSU4ga2FydGljZSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IktvZGEgUFVLIGthcnRpY2UgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJOb3ZhIGtvZGEgUElOIGthcnRpY2UgU0lNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iRG90YWtuaXRlIHNlIHphIHZub3MgZ2VzbGEiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJWbmVzaXRlIGdlc2xvIHphIG9ka2xlcGFuamUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJWbmVzaXRlIFBJTiB6YSBvZGtsZXBhbmplIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+Ikd1bWIgemEgemHEjWFzbm8gdXN0YXZpdGV2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJHdW1iIHphIHByZWR2YWphbmplIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJHdW1iIHphIHVzdGF2aXRldiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJWxaFlxI0gbWkgamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfZG93bl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxMDE0MzM2NzcxOTIxNzc4NjEiPiJOaSBtaSB2xaFlxI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJTcmNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iWmEgbmFkYWxqZXZhbmplIG9ka2xlbml0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IlphZ29uIGplIHByZWtsaWNhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJJenB1c3RpdGUgcHJpcG9tb8SNZWsgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4sIGRhIGdhIGl6YnJpxaFldGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+IlByaXBvbW/EjWVrIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG5lIGJvIGl6YnJpc2FuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iVm5lc2l0ZSDFvmVsZW5vIGtvZG8gUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IlBvdHJkaXRlIMW+ZWxlbm8ga29kbyBQSU4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Ik9ka2xlcGFuamUga2FydGljZSBTSU0gLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iTmFwYcSNbmEga29kYSBQSU4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iVm5lc2l0ZSBQSU4sIGtpIHZzZWJ1amUgb2QgxaF0aXJpIGRvIG9zZW0gxaF0ZXZpbGsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iS29kYSBQVUsgbW9yYSB2c2Vib3ZhdGkgOCBhbGkgdmXEjSDFoXRldmsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iVm5vdmnEjSB2bmVzaXRlIHByYXZpbG5vIGtvZG8gUFVLLiBWZcSNa3JhdG5pIHBvc2t1c2kgYm9kbyB0cmFqbm8gb25lbW9nb8SNaWxpIGthcnRpY28gU0lNLiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iVnpvcmVjIHphIG9ka2xlcGFuamUgc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LWtyYXQgbmFwYcSNbm8gdm5lc2xpLiBQbyBuYWRhbGpuamloIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG5ldXNwZcWhbmloIHBvc2t1c2loIGJvc3RlIHBvenZhbmksIGRhIG9ka2xlbmV0ZSB0ZWxlZm9uIHogR29vZ2xvdmltaSBwb2RhdGtpIHphIHByaWphdm8uXG5cblBvc2t1c2l0ZSB6bm92YSDEjWV6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCTICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iT2RzdHJhbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Ik5hcGHEjW5hIGtvZGEgUElOIGthcnRpY2UgU0lNLiBaZGFqIHNlIGJvc3RlIG1vcmFsaSB6YSBvZGtsZW5pdGV2IG5hcHJhdmUgb2Jybml0aSBuYSBvcGVyYXRlcmphLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iTmFwYcSNbmEga29kYSBQSU4ga2FydGljZSBTSU0uIE5hIHZvbGpvIGltYXRlIMWhZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcG9za3VzLiBQb3RlbSBzZSBib3N0ZSBtb3JhbGkgemEgb2RrbGVuaXRldiBuYXByYXZlIG9icm5pdGkgbmEgb3BlcmF0ZXJqYS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJOYXBhxI1uYSBrb2RhIFBJTiBrYXJ0aWNlIFNJTS4gUG9za3VzaXRlIGxhaGtvIMWhZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ta3JhdC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IkthcnRpY2EgU0lNIG5pIHZlxI0gdXBvcmFibmEuIE9icm5pdGUgc2UgbmEgb3BlcmF0ZXJqYS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+Ik5hcGHEjW5hIGtvZGEgUFVLIGthcnRpY2UgU0lNLiBOYSB2b2xqbyBpbWF0ZSDFoWUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBvc2t1cy4gUG90ZW0gYm8ga2FydGljYSBTSU0gcG9zdGFsYSB0cmFqbm8gbmV1cG9yYWJuYS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjU0NzczMDUyMjYwMjYzNDIwMzYiPiJOYXBhxI1uYSBrb2RhIFBVSyBrYXJ0aWNlIFNJTS4gUG9za3VzaXRlIGxhaGtvIMWhZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ta3JhdC4gUG90ZW0gYm8ga2FydGljYSBTSU0gcG9zdGFsYSB0cmFqbm8gbmV1cG9yYWJuYS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlBvc3RvcGVrIHphIG9ka2xlcGFuamUgcyBrb2RvIFBJTiBrYXJ0aWNlIFNJTSBuaSB1c3BlbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlBvc3RvcGVrIHphIG9ka2xlcGFuamUgcyBrb2RvIFBVSyBrYXJ0aWNlIFNJTSBuaSB1c3BlbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iS29kYSBqZSBzcHJlamV0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJHdW1iIHphIHByZWrFoW5qbyBza2xhZGJvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iR3VtYiB6YSBuYXNsZWRuam8gc2tsYWRibyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJHdW1iIHphIHphxI1hc25vIHVzdGF2aXRldiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCmluZGV4IDY2NGI4NWUuLjJiZGQ4ZjUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4i0KPQvdC10YHQuNGC0LUgUElOINC6w7TQtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+ItCj0L3QtdGB0LjRgtC1IFBVSyDQuCDQvdC+0LLQuCBQSU4g0LrDtNC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsg0LrDtNC0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLQndC+0LLQuCBQSU4g0LrDtNC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4i0KPQvdC10YHQuNGC0LUgU0lNIFBVSyDQusO00LQg0Lgg0L3QvtCy0LggUElOINC6w7TQtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iU0lNIFBVSyDQusO00LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+ItCd0L7QstC4IFNJTSBQSU4g0LrDtNC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i0JTQvtC00LjRgNC90LjRgtC1INC00LAg0LHQuNGB0YLQtSDRg9C90LXQu9C4INC70L7Qt9C40L3QutGDIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i0J7RgtC60YPRhtCw0ZjRgtC1INC70L7Qt9C40L3QutGDINC00LAg0LHQuNGB0YLQtSDQvtGC0LrRmdGD0YfQsNC70LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLQo9C90LXRgdC40YLQtSBQSU4g0LfQsCDQvtGC0LrRmdGD0YfQsNCy0LDRmtC1Ijwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+ItCU0YPQs9C80LUg0LfQsCDQv9Cw0YPQt9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLQlNGD0LPQvNC1INC30LAg0YDQtdC/0YDQvtC00YPQutGG0LjRmNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLQlNGD0LPQvNC1INC30LAg0LfQsNGD0YHRgtCw0LLRmdCw0ZrQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiLQodCy0LjRktCwINC80Lgg0YHQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+ItCd0LUg0YHQstC40ZLQsCDQvNC4INGB0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiLQodGA0YbQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+ItCe0YLQutGZ0YPRh9Cw0ZjRgtC1INC00LAg0LHQuNGB0YLQtSDQvdCw0YHRgtCw0LLQuNC70LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiLQn9C+0LrRgNC10YLQsNGa0LUg0ZjQtSDQvtGC0LrQsNC30LDQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+ItCe0YLQv9GD0YHRgtC40YLQtSDQstC40Z/QtdGCIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+INC00LAg0LHQuNGB0YLQtSDQs9CwINC40LfQsdGA0LjRgdCw0LvQuC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4i0JLQuNGf0LXRgiA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDQvdC10ZvQtSDQsdC40YLQuCDQuNC30LHRgNC40YHQsNC9LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i0KPQvdC10YHQuNGC0LUg0LbQtdGZ0LXQvdC4IFBJTiDQusO00LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i0J/QvtGC0LLRgNC00LjRgtC1INC20LXRmdC10L3QuCBQSU4g0LrDtNC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiLQntGC0LrRmdGD0YfQsNCy0LDRmtC1IFNJTSDQutCw0YDRgtC40YbQteKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IlBJTiDQusO00LQg0ZjQtSDQvdC10YLQsNGH0LDQvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLQo9C90LXRgdC40YLQtSBQSU4g0LrQvtGY0Lgg0LjQvNCwINC+0LQgNCDQtNC+IDgg0LHRgNC+0ZjQtdCy0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLINC6w7TQtCDRgtGA0LXQsdCwINC00LAg0LjQvNCwIDgg0LjQu9C4INCy0LjRiNC1INCx0YDQvtGY0LXQstCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+ItCf0L7QvdC+0LLQviDRg9C90LXRgdC40YLQtSDQuNGB0L/RgNCw0LLQvdC4IFBVSyDQusO00LQuINCf0L7QvdC+0LLRmdC10L3QuCDQv9C+0LrRg9GI0LDRmNC4INGb0LUg0YLRgNCw0ZjQvdC+INC+0L3QtdC80L7Qs9GD0ZvQuNGC0LggU0lNLiI8L3N0cmluZz4KQEAgLTEyOSwxMCArMTM1LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+ItCd0LDRhtGA0YLQsNC70Lgg0YHRgtC1INGI0LDQsdC70L7QvSDQt9CwINC+0YLQutGZ0YPRh9Cw0LLQsNGa0LUg0L3QtdC40YHQv9GA0LDQstC90L4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/Rg9GC0LAuINCf0L7RgdC70LUg0ZjQvtGIIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC90LXRg9GB0L/QtdGI0L3QsCjQuNGFKSDQv9C+0LrRg9GI0LDRmNCwLCDQvtC0INCy0LDRgSDRm9C1INCx0LjRgtC4INC30LDRgtGA0LDQttC10L3QviDQtNCwINC+0YLQutGZ0YPRh9Cw0YLQtSDRgtC10LvQtdGE0L7QvSDQv9C+0LzQvtGb0YMg0L3QsNC70L7Qs9CwINC1LdC/0L7RiNGC0LUuXG5cbtCf0L7QutGD0YjQsNGY0YLQtSDQv9C+0L3QvtCy0L4g0LfQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQtSjQuCkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCTICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i0KPQutC70L7QvdC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLQndC10YLQsNGH0LDQvSBTSU0gUElOINC6w7TQtC4g0KHQsNC00LAg0LzQvtGA0LDRgtC1INC00LAg0LrQvtC90YLQsNC60YLQuNGA0LDRgtC1INC80L7QsdC40LvQvdC+0LMg0L7Qv9C10YDQsNGC0LXRgNCwINC00LAg0LHQuNGB0YLQtSDQvtGC0LrRmdGD0YfQsNC70Lgg0YPRgNC10ZLQsNGYLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4i0J3QtdGC0LDRh9Cw0L0gU0lNIFBJTiDQusO00LQuINCY0LzQsNGC0LUg0ZjQvtGIIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQv9C+0LrRg9GI0LDRmCwg0LAg0L7QvdC00LAg0LzQvtGA0LDRgtC1INC00LAg0LrQvtC90YLQsNC60YLQuNGA0LDRgtC1INC80L7QsdC40LvQvdC+0LMg0L7Qv9C10YDQsNGC0LXRgNCwINC00LAg0LHQuNGB0YLQtSDQvtGC0LrRmdGD0YfQsNC70Lgg0YPRgNC10ZLQsNGYLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+ItCd0LXRgtCw0YfQsNC9IFNJTSBQSU4g0LrDtNC0LiDQmNC80LDRgtC1INGY0L7RiCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L/QvtC60YPRiNCw0ZjQsC4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSDQutCw0YDRgtC40YbQsCDRmNC1INC90LXRg9C/0L7RgtGA0LXQsdGZ0LjQstCwLiDQmtC+0L3RgtCw0LrRgtC40YDQsNGY0YLQtSDQvNC+0LHQuNC70L3QvtCzINC+0L/QtdGA0LDRgtC10YDQsC4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+ItCd0LXRgtCw0YfQsNC9IFNJTSBQVUsg0LrDtNC0LiDQmNC80LDRgtC1INGY0L7RiCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L/QvtC60YPRiNCw0Zgg0L/RgNC1INC90LXQs9C+INGI0YLQviBTSU0g0LrQsNGA0YLQuNGG0LAg0L/QvtGB0YLQsNC90LUg0YLRgNCw0ZjQvdC+INC90LXRg9C/0L7RgtGA0LXQsdGZ0LjQstCwLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+ItCd0LXRgtCw0YfQsNC9IFNJTSBQVUsg0LrDtNC0LiDQmNC80LDRgtC1INGY0L7RiCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L/QvtC60YPRiNCw0ZjQsCDQv9GA0LUg0L3QtdCz0L4g0YjRgtC+IFNJTSDQutCw0YDRgtC40YbQsCDQv9C+0YHRgtCw0L3QtSDRgtGA0LDRmNC90L4g0L3QtdGD0L/QvtGC0YDQtdCx0ZnQuNCy0LAuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiLQoNCw0LTRmtCwINGB0LAgU0lNIFBJTiDQutC+0LTQvtC8INC90LjRmNC1INGD0YHQv9C10LvQsCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+ItCg0LDQtNGa0LAg0YHQsCBTSU0gUFVLINC60L7QtNC+0Lwg0L3QuNGY0LUg0YPRgdC/0LXQu9CwISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLQmsO00LQg0ZjQtSDQv9GA0LjRhdCy0LDRm9C10L0hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4i0JTRg9Cz0LzQtSDQt9CwINC/0YDQtdGC0YXQvtC00L3RgyDQv9C10YHQvNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4i0JTRg9Cz0LzQtSDQt9CwINGB0LvQtdC00LXRm9GDINC/0LXRgdC80YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i0JTRg9Cz0LzQtSDQt9CwINC/0LDRg9C30YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjI5MjQ2Mjg4NjM3NDExNTA5NTYiPiLQlNGD0LPQvNC1INC30LAg0YDQtdC/0YDQvtC00YPQutGG0LjRmNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSIzMDg0MTc5MzI0ODEwNTc1Nzg3Ij4i0JTRg9Cz0LzQtSDQt9CwINC30LDRg9GB0YLQsNCy0ZnQsNGa0LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jYXJyaWVyX2RlZmF1bHQiIG1zZ2lkPSI4NzAwNjUwNDAzMDU0MDQyMTUzIj4i0JLQsNC9INC80YDQtdC20LUg0YHRgtC1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg3MDA2NTA0MDMwNTQwNDIxNTMiPiLQntGE0LvQsNGY0L0g0YHRgtC1LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKaW5kZXggZmIwZjkxMi4uZTQ0NmY2MSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJBbmdlIFBJTi1rb2QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJBbmdlIFBVSy1rb2RlbiBvY2ggZW4gbnkgUElOLWtvZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLLWtvZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTnkgUElOLWtvZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IkFuZ2UgUFVLLWtvZGVuIG9jaCBlbiBueSBwaW5rb2QgZsO2ciBTSU0ta29ydGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJQVUsta29kIGbDtnIgU0lNLWtvcnRldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTnkgcGlua29kIGbDtnIgU0lNLWtvcnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJUcnljayBvbSBkdSB2aWxsIGFuZ2UgbMO2c2Vub3JkIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iQW5nZSBsw7ZzZW5vcmQgZsO2ciBhdHQgbMOlc2EgdXBwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iQW5nZSBQSU4ta29kIGbDtnIgYXR0IGzDpXNhIHVwcCI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJQYXVza25hcHBlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iVXBwc3BlbG5pbmdza25hcHBlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iU3RvcHBrbmFwcGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IkdpbGxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IlR1bW1lbiBuZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJIasOkcnRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iTMOlcyB1cHAgb20gZHUgdmlsbCBmb3J0c8OkdHRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iTGFuc2VyaW5nZW4gaGFyIGF2YnJ1dGl0cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJUYSBib3J0IGdlbm9tIGF0dCBzbMOkcHBhIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IGjDpHIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IGtvbW1lciBpbnRlIGF0dCB0YXMgYm9ydC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkFuZ2Ugw7Zuc2thZCBQSU4ta29kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IkJla3LDpGZ0YSDDtm5za2FkIFBJTi1rb2QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IkzDpXNlciB1cHAgU0lNLWtvcnQg4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iRmVsIFBJTi1rb2QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iQW5nZSBlbiBQSU4ta29kIG1lZCA0IHRpbGwgOCBzaWZmcm9yLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSy1rb2RlbiBza2EgdmFyYSBtaW5zdCDDpXR0YSBzaWZmcm9yLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkFuZ2UgcsOkdHQgUFVLLWtvZCBpZ2VuLiBPbSBmw7Zyc8O2a2VuIHVwcHJlcGFzIGluYWt0aXZlcmFzIFNJTS1rb3J0ZXQgcGVybWFuZW50LiI8L3N0cmluZz4KQEAgLTEyOSw2ICsxMzUsMTkgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iRHUgaGFyIHJpdGF0IGRpdHQgZ3JhZmlza2EgbMO2c2Vub3JkIGZlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBnw6VuZ2VyLiBFZnRlciB5dHRlcmxpZ2FyZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBmw7Zyc8O2ayBvbWJlZHMgZHUgbMOlc2EgdXBwIG1vYmlsZW4gbWVkIGhqw6RscCBhdiBldHQgZS1wb3N0a29udG8uXG5cbiBGw7Zyc8O2ayBpZ2VuIG9tIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNla3VuZGVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAkyAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IlRhIGJvcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkR1IGFuZ2F2IGZlbCBwaW5rb2QgZsO2ciBTSU0ta29ydGV0IG9jaCBtw6VzdGUgbnUga29udGFrdGEgb3BlcmF0w7ZyZW4gZsO2ciBhdHQgbMOlc2EgdXBwIGVuaGV0ZW4uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjgxMzQzMTM5OTc3OTk2MzgyNTQiPiJEdSBhbmdhdiBmZWwgcGlua29kIGbDtnIgU0lNLWtvcnRldC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGbDtnJzw7ZrIMOldGVyc3TDpXIgaW5uYW4gZHUgbcOlc3RlIGtvbnRha3RhIG9wZXJhdMO2cmVuIGbDtnIgYXR0IGzDpXNhIHVwcCBlbmhldGVuLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IkR1IGFuZ2F2IGZlbCBwaW5rb2QgZsO2ciBTSU0ta29ydGV0LiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZsO2cnPDtmsgw6V0ZXJzdMOlci4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTS1rb3J0ZXQgw6RyIG9icnVrYmFydC4gS29udGFrdGEgb3BlcmF0w7ZyZW4uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJEdSBhbmdhdiBmZWwgUFVLLWtvZCBmw7ZyIFNJTS1rb3J0ZXQuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBmw7Zyc8O2ayDDpXRlcnN0w6VyIGlubmFuIFNJTS1rb3J0ZXQgYmxpciBvYnJ1a2JhcnQuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iRHUgYW5nYXYgZmVsIFBVSy1rb2QgZsO2ciBTSU0ta29ydGV0LiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZsO2cnPDtmsgw6V0ZXJzdMOlciBpbm5hbiBTSU0ta29ydGV0IGJsaXIgb2JydWtiYXJ0LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iRGV0IGdpY2sgaW50ZSBhdHQgbMOlc2EgdXBwIG1lZCBwaW5rb2RlbiBmw7ZyIFNJTS1rb3J0ZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJEZXQgZ2ljayBpbnRlIGF0dCBsw6VzYSB1cHAgbWVkIFBVSy1rb2RlbiBmw7ZyIFNJTS1rb3J0ZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IktvZGVuIGdvZGvDpG5kZXMhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iS25hcHAgZsO2ciBmw7ZyZWfDpWVuZGUgc3DDpXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJLbmFwcCBmw7ZyIG7DpHN0YSBzcMOlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJQYXVza25hcHBlbiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCmluZGV4IDI3ZjFmMzAuLmM3YWJkOTggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbApAQCAtMjEsOSArMjEsOSBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iSW5naXphIG1zaW1ibyB3YSBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJJbmdpemEgUFVLIG5hIG1zaW1ibyBtcHlhIHdhIFBJTiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iTXNpbWJvIHdhIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTXNpbWJvIG1weWEgd2EgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iQ2hhcGEgUFVLIHlhwqBTSU0gbmEgbXNpbWJvIG1weWEgd2EgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJNc2ltYm8gd2EgUFVLIHlhIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTXNpbWJvIG1weWEgd2EgUElOIHlhIFNJTSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+Ikd1c2Ega3VpbmdpemEgbmVub3NpcmkgIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iQ2hhcmF6YSBuZW5vc2lyaSBpbGkga3VmdW5ndWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJJbmdpemEgUElOIGlsaSBrdWZ1bmd1YSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJLaXR1ZmUgY2hhIGt1c2l0aXNoYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iS2l0dWZlIGNoYSBrdWNoZXphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJLaXR1ZmUgY2hhIGt1c2l0aXNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJCb21iYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IlNpIGJvbWJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iTW95byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+IkZ1bmd1YSBpbGkgdWVuZGVsZWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2hpZGVfYm91bmNlciIgbXNnaWQ9Ijc4OTY5OTIxNzE4NzgzMDkzNTgiPiJVemluZHV6aSB1bWVnaGFpcml3YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJEb25kb3NoYSA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiBpbGkgdWZ1dGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IGhhaXRhZnV0d2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiJJbmdpemEgbXNpbWJvIHdhIFBJTiB1bmFvcGVuZGVsZXdhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IlRoaWJpdGlzaGEgbXNpbWJvIHdhIFBJTiB1bmFvcGVuZGVsZXdhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJJbmFmdW5ndWEgU0lNIGthZGkuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJNc2ltYm8gd2EgUElOIHVzaW8gc2FoaWhpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IkNoYXJhemEgUElOIGlsaXlvIG5hIHRhcmFraW11IGthdGkgeWEgNCBuYSA4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+Ik1zaW1ibyB3YSBQVUsgdW5hZmFhIGt1d2EgbmEgbmFtYmFyaSA4IGF1IHphaWRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkluZ2l6YSB1cHlhIG1zaW1ibyBzYWhpaGkgd2EgUFVLLiBNYWphcmliaW8geWFuYXlvcnVkaXdhIHlhdGFsZW1hemEgU0lNIGthYmlzYS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlVtZWtvc2VhIGt1Y2hvcmEgbWNob3JvIHdha28gd2Ega3VmdW5ndWEgbWFyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gQmFhZGEgeWEgbWFqYXJpYmlvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHlhc2l5b2ZhdWx1LCB1dGFvbWJ3YSBrdWZ1bmd1YSBzaW11IHlha28ga3dhIGt1dHVtaWEgYWthdW50aSB5YSBiYXJ1YSBwZXBlLlxuXG4gSmFyaWJ1IHRlbmEgYmFhZGEgeWEgc2VrdW5kZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJPbmRvYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iTXNpbWJvIHdhIFBJTiB5YSBTSU0gdXNpb3NhaGloacKgc2FzYSBsYXppbWEgdXdhc2lsaWFuZSBuYSBtdG9hIGh1ZHVtYSB3YWtvwqBpbGkgdWZ1bmd1ZSBraWZhYSBjaGFrby4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+Ik1zaW1ibyB3YSBQSU4geWHCoFNJTSB1c2lvIHNhaGloaSwgdW1lc2FsaWEgbmHCoG1hamFyaWJpb8KgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthYmxhIHVsYXppbWlrZSBrdXdhc2lsaWFuYcKgbmEgbXRvYSBodWR1bWEgd2FrbyBpbGkgdWZ1bmd1ZSBraWZhYSBjaGFrby4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJNc2ltYm8gd2EgUElOIHlhwqBTSU0gdXNpbyBzYWhpaGkswqB1bWVzYWxpYSBuYSBtYWphcmliaW/CoDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSBoYWl3ZXppIGt1dHVtaWthLiBXYXNpbGlhbmEgbmEgbXRvYSBodWR1bWEgd2Frby4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+Ik1zaW1ibyB3YSBQVUsgeWEgU0lNIHVzaW8gc2FoaWhpLCB1bWVzYWxpYSBuYSBtYWphcmliaW8gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthYmxhIHlhIFNJTSBrdWFjaGEga3V0dW1pa2Ega2FiaXNhLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+Ik1zaW1ibyB3YSBQVUsgeWHCoFNJTSB1c2lvIHNhaGloaSzCoHVtZXNhbGlhIG5hIG1hamFyaWJpb8KgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthYmxhIHlhIFNJTSBrdWFjaGEga3V0dW1pa2Ega2FiaXNhLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iVXRlbmRha2F6aSB3YSBQSU4geWEgU0lNwqB1bWVzaGluZHdhISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iVXRlbmRha2F6aSB3YSBQVUsgeWEgU0lNIHVtZXNoaW5kd2EhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+Ik1zaW1ibyBVbWVrdWJhbGl3YSEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJLaXR1ZmUgY2hhIHdpbWJvIHdhIGF3YWxpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iS2l0dWZlIGNoYSB3aW1ibyB1bmFvZnVhdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iS2l0dWZlIGNoYSBrdXNpdGlzaGEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAppbmRleCBkNjMwOGI2Li5hNDRmOWZlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IuC4nuC4tOC4oeC4nuC5jOC4o+C4q+C4seC4qiBQSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLguJ7guLTguKHguJ7guYwgUFVLIOC5geC4peC4sOC4o+C4q+C4seC4qiBQSU4g4LmD4Lir4Lih4LmIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiLguKPguKvguLHguKogUFVLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjgwMjc2ODAzMjE2MTQxOTYyNTgiPiLguKPguKvguLHguKogUElOIOC5g+C4q+C4oeC5iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IuC4nuC4tOC4oeC4nuC5jCBQVUsg4LmB4Lil4Liw4Lij4Lir4Lix4LiqIFBJTiDguYPguKvguKHguYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IuC4o+C4q+C4seC4qiBQVUsg4LiC4Lit4LiH4LiL4Li04LihIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiLguKPguKvguLHguKogUElOIOC4guC4reC4h+C4i+C4tOC4oeC5g+C4q+C4oeC5iCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+IuC5geC4leC4sOC5gOC4nuC4t+C5iOC4reC4nuC4tOC4oeC4nuC5jOC4o+C4q+C4seC4quC4nOC5iOC4suC4mSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IuC4nuC4tOC4oeC4nuC5jOC4o+C4q+C4seC4quC4nOC5iOC4suC4meC5gOC4nuC4t+C5iOC4reC4m+C4peC4lOC4peC5h+C4reC4gSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IuC4nuC4tOC4oeC4nuC5jCBQSU4g4LmA4Lie4Li34LmI4Lit4Lib4Lil4LiU4Lil4LmH4Lit4LiBIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IuC4m+C4uOC5iOC4oeC4q+C4ouC4uOC4lOC4iuC4seC5iOC4p+C4hOC4o+C4suC4pyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4i4Lib4Li44LmI4Lih4LmA4Lil4LmI4LiZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLguJvguLjguYjguKHguKvguKLguLjguJQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4i4Liq4Li44LiU4Lii4Lit4LiUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4i4LmE4Lih4LmI4LiK4Lit4LiaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4i4Lir4Lix4Lin4LmD4LiIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4i4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmA4Lie4Li34LmI4Lit4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiV4LmI4LitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i4Lii4LiB4LmA4Lil4Li04LiB4LiB4Liy4Lij4LmA4Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZ4LmB4Lil4LmJ4LinIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IuC4peC4suC4gSA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiDguYDguJ7guLfguYjguK3guKXguJoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfZW5kIiBtc2dpZD0iNTA4ODMzNTA2NzgwOTA5MzkzIj4iPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4g4LiI4Liw4LmE4Lih4LmI4LiW4Li54LiB4Lil4LiaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLguJvguYnguK3guJnguKPguKvguLHguKogUElOIOC4l+C4teC5iOC4leC5ieC4reC4h+C4geC4suC4oyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLguKLguLfguJnguKLguLHguJnguKPguKvguLHguKogUElOIOC4l+C4teC5iOC4leC5ieC4reC4h+C4geC4suC4oyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4i4LiB4Liz4Lil4Lix4LiH4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LiL4Li04Lih4LiB4Liy4Lij4LmM4LiU4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i4Lij4Lir4Lix4LiqIFBJTiDguYTguKHguYjguJbguLnguIHguJXguYnguK3guIciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiLguJ7guLTguKHguJ7guYwgUElOIOC4i+C4tuC5iOC4h+C5gOC4m+C5h+C4meC5gOC4peC4giA0IOC4luC4tuC4hyA4IOC4q+C4peC4seC4gSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IuC4o+C4q+C4seC4qiBQVUsg4LiV4LmJ4Lit4LiH4LmA4Lib4LmH4LiZ4LiV4Lix4Lin4LmA4Lil4LiC4Lit4Lii4LmI4Liy4LiH4LiZ4LmJ4Lit4LiiIDgg4Lir4Lil4Lix4LiBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4LmD4Liq4LmI4Lij4Lir4Lix4LiqIFBVSyDguJfguLXguYjguJbguLnguIHguJXguYnguK3guIfguK3guLXguIHguITguKPguLHguYnguIcg4LiB4Liy4Lij4Lie4Lii4Liy4Lii4Liy4Lih4LiL4LmJ4Liz4Lir4Lil4Liy4Lii4LiE4Lij4Lix4LmJ4LiH4LiI4Liw4LiX4Liz4LmD4Lir4LmJ4LiL4Li04Lih4LiB4Liy4Lij4LmM4LiU4LiW4Li54LiB4Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZ4Lit4Lii4LmI4Liy4LiH4LiW4Liy4Lin4LijIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLguITguLjguJPguKfguLLguJTguKPguLnguJvguYHguJrguJrguIHguLLguKPguJvguKXguJTguKXguYfguK3guIHguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiH4LmB4Lil4LmJ4LinIOC4q+C4suC4geC4l+C4s+C5hOC4oeC5iOC4quC4s+C5gOC4o+C5h+C4iOC4reC4teC4gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDguITguKPguLHguYnguIcg4Lij4Liw4Lia4Lia4LiI4Liw4LiC4Lit4LmD4Lir4LmJ4LiE4Li44LiT4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmC4LiX4Lij4Lio4Lix4Lie4LiX4LmM4LmC4LiU4Lii4LmD4LiK4LmJ4Lix4Lia4Lix4LiN4LiK4Li14Lit4Li14LmA4Lih4LilXG5cbiDguYLguJvguKPguJTguKXguK3guIfguK3guLXguIHguITguKPguLHguYnguIfguYPguJnguK3guLXguIEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Lin4Li04LiZ4Liy4LiX4Li1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i4LiZ4Liz4Lit4Lit4LiBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLguKPguKvguLHguKogUElOIOC4guC4reC4h+C4i+C4tOC4oeC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyDguJXguK3guJnguJnguLXguYnguITguLjguJPguJXguYnguK3guIfguJXguLTguJTguJXguYjguK3guJzguLnguYnguYPguKvguYnguJrguKPguLTguIHguLLguKPguYDguJ7guLfguYjguK3guJvguKXguJTguKXguYfguK3guIHguK3guLjguJvguIHguKPguJPguYzguILguK3guIfguITguLjguJMiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IuC4o+C4q+C4seC4qiBQSU4g4LiC4Lit4LiH4LiL4Li04Lih4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIOC4hOC4uOC4k+C4nuC4ouC4suC4ouC4suC4oeC5hOC4lOC5ieC4reC4teC4gSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiH4LiB4LmI4Lit4LiZ4LiX4Li14LmI4LiI4Liw4LiV4LmJ4Lit4LiH4LiV4Li04LiU4LiV4LmI4Lit4Lic4Li54LmJ4LmD4Lir4LmJ4Lia4Lij4Li04LiB4Liy4Lij4LmA4Lie4Li34LmI4Lit4Lib4Lil4LiU4Lil4LmH4Lit4LiB4Lit4Li44Lib4LiB4Lij4LiT4LmM4LiC4Lit4LiH4LiE4Li44LiTIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4i4Lij4Lir4Lix4LiqIFBJTiDguILguK3guIfguIvguLTguKHguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcg4LiE4Li44LiT4Lie4Lii4Liy4Lii4Liy4Lih4LmE4LiU4LmJ4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDguITguKPguLHguYnguIciPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IuC4i+C4tOC4oeC5hOC4oeC5iOC4quC4suC4oeC4suC4o+C4luC5g+C4iuC5ieC4h+C4suC4meC5hOC4lOC5iSDguJXguLTguJTguJXguYjguK3guJzguLnguYnguYPguKvguYnguJrguKPguLTguIHguLLguKPguILguK3guIfguITguLjguJMiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IuC4o+C4q+C4seC4qiBQVUsg4LiC4Lit4LiH4LiL4Li04Lih4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIOC4hOC4uOC4k+C4nuC4ouC4suC4ouC4suC4oeC5hOC4lOC5ieC4reC4teC4gSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiH4LiB4LmI4Lit4LiZ4LiX4Li14LmI4LiL4Li04Lih4LiI4Liw4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmD4LiK4LmJ4LiH4Liy4LiZ4LmE4LiU4LmJ4Lit4Lii4LmI4Liy4LiH4LiW4Liy4Lin4LijIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4i4Lij4Lir4Lix4LiqIFBVSyDguILguK3guIfguIvguLTguKHguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcg4LiE4Li44LiT4Lie4Lii4Liy4Lii4Liy4Lih4LmE4LiU4LmJ4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDguITguKPguLHguYnguIfguIHguYjguK3guJnguJfguLXguYjguIvguLTguKHguIjguLDguYTguKHguYjguKrguLLguKHguLLguKPguJbguYPguIrguYnguIfguLLguJnguYTguJTguYnguK3guKLguYjguLLguIfguJbguLLguKfguKMiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IuC4geC4suC4o+C4m+C4peC4lOC4peC5h+C4reC4geC4lOC5ieC4p+C4oiBQSU4g4LiC4Lit4LiH4LiL4Li04Lih4Lil4LmJ4Lih4LmA4Lir4Lil4LinISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4i4LiB4Liy4Lij4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LiU4LmJ4Lin4LiiIFBVSyDguILguK3guIfguIvguLTguKHguKXguYnguKHguYDguKvguKXguKchIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IuC4o+C4q+C4seC4quC5hOC4lOC5ieC4o+C4seC4muC4geC4suC4o+C4ouC4reC4oeC4o+C4seC4miEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLguJvguLjguYjguKHguYHguJfguKPguYfguIHguIHguYjguK3guJnguKvguJnguYnguLIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiLguJvguLjguYjguKHguYHguJfguKPguYfguIHguJbguLHguJTguYTguJsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4i4Lib4Li44LmI4Lih4Lir4Lii4Li44LiU4LiK4Lix4LmI4Lin4LiE4Lij4Liy4LinIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKaW5kZXggYTQxZDI2OC4uNjUxNjc2NiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJJLXR5cGUgYW5nIFBJTiBjb2RlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iSS10eXBlIGFuZyBQVUsgYXQgYmFnb25nIFBJTiBjb2RlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsgY29kZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iQmFnb25nIFBJTiBjb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4iSS10eXBlIGFuZyBTSU0gUFVLIGF0IGJhZ29uZyBQSU4gY29kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iUFVLIGNvZGUgbmcgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJCYWdvbmcgUElOIGNvZGUgbmcgU0lNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iUGluZHV0aW4gdXBhbmcgaS10eXBlIHBhc3N3b3JkIjwvZm9udD48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4iSS10eXBlIGFuZyBwYXNzd29yZCB1cGFuZyBpLXVubG9jayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IkktdHlwZSBhbmcgUElOIHVwYW5nIGktdW5sb2NrIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IkJ1dHRvbiBuYSBJLXBhdXNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJCdXR0b24gbmEgSS1wbGF5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJCdXR0b24gbmEgSWhpbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IlRodW1icyB1cCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IlRodW1icyBkb3duIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4iSGVhcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJJLXVubG9jayB1cGFuZyBtYWdwYXR1bG95Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iTmFrYW5zZWxhIGFuZyBwYWdsdW5zYWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2RlbGV0ZV93aWRnZXRfc3RhcnQiIG1zZ2lkPSI0MDk2NTUwNTUyNjM0MzkxNDUxIj4iSS1kcm9wIGFuZyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiB1cGFuZyB0YW5nZ2FsaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+IkhpbmRpIHRhdGFuZ2dhbGluIGFuZyA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IklsYWdheSBhbmcgbmluYW5haXMgbmEgUElOIGNvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iS3VtcGlybWFoaW4gYW5nIG5pbmFuYWlzIG5hIFBJTiBjb2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJJbmEtdW5sb2NrIGFuZyBTSU0gY2FyZOKApiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBtc2dpZD0iMTEzOTMyNDg4NzQxMzg0NjkxMiI+IkhpbmRpIHRhbWFuZyBQSU4gY29kZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJNYWctdHlwZSBuZyBQSU4gbmEgNCBoYW5nZ2FuZyA4IG51bWVyby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJEYXBhdCBheSA4IG51bWVybyBvIGhpZ2l0IHBhIGFuZyBQVUsgY29kZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJNdWxpbmcgaWxhZ2F5IGFuZyB0YW1hbmcgUFVLIGNvZGUuIFBlcm1hbmVudGVuZyBoaW5kaSBwYWdhZ2FuYWhpbiBhbmcgU0lNIG5nIG1nYSBwYXVsaXQtdWxpdCBuYSBwYWd0YXRhbmdrYS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Ik5hZ3VoaXQgbW8gbmFuZyBoaW5kaSB0YW1hIGFuZyBpeW9uZyBwYXR0ZXJuIHNhIHBhZy11bmxvY2sgbmFuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiAobmEpIGJlc2VzLiBQYWdrYXRhcG9zIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHBhbmcgaGluZGkgbWF0YWd1bXBheSBuYSBwYWd0YXRhbmdrYSwgaGloaWxpbmdpbiBzYSBpeW9uZyBpLXVubG9jayBhbmcgdGVsZXBvbm8gbW8gZ2FtaXQgYW5nIGlzYW5nIGVtYWlsIGFjY291bnQuXG5cbiBTdWJ1a2FuZyBtdWxpIHNhIGxvb2IgbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gKG5hKSBzZWd1bmRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IkFsaXNpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iTWFsaW5nIFBJTiBjb2RlIG5nIFNJTSwgZGFwYXQga2EgbmFuZyBtYWtpcGFnLXVnbmF5IHNhIGl5b25nIGNhcnJpZXIgdXBhbmcgaS11bmxvY2sgYW5nIGl5b25nIGRldmljZS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+Ik1hbGluZyBQSU4gY29kZSBuZyBTSU0sIG1heXJvb24ga2FuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gKG5hKSBuYXRpdGlyYW5nIHBhZ3N1Ym9rIGJhZ28ga2EgZGFwYXQgbWFraXBhZy11Z25heSBzYSBpeW9uZyBjYXJyaWVyIHVwYW5nIGktdW5sb2NrIGFuZyBpeW9uZyBkZXZpY2UuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4iTWFsaW5nIFBJTiBjb2RlIG5nIFNJTSwgbWF5cm9vbiBrYW5nIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiAobmEpIG5hdGl0aXJhbmcgcGFnc3Vib2suIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJIaW5kaSBtYWdhZ2FtaXQgYW5nIFNJTS4gTWFraXBhZy11Z25heSBzYSBpeW9uZyBjYXJyaWVyLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iTWFsaW5nIFBVSyBjb2RlIG5nIFNJTSwgbWF5cm9vbiBrYW5nIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiAobmEpIG5hdGl0aXJhbmcgcGFnc3Vib2sgYmFnbyBtYWdpbmcgcGVybWFuZW50ZW5nIGhpbmRpIG1hZ2FnYW1pdCBhbmcgU0lNLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+Ik1hbGluZyBQVUsgY29kZSBuZyBTSU0sIG1heXJvb24ga2FuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gKG5hKSBuYXRpdGlyYW5nIHBhZ3N1Ym9rIGJhZ28gbWFnaW5nIHBlcm1hbmVudGVuZyBoaW5kaSBtYWdhZ2FtaXQgYW5nIFNJTS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+Ik5hYmlnbyBhbmcgb3BlcmFzeW9uIG5nIFNJTSBQSU4hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJOYWJpZ28gYW5nIG9wZXJhc3lvbiBuZyBTSU0gUFVLISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiJUaW5hbmdnYXAgYW5nIENvZGUhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iQnV0dG9uIG5hIE5ha2FyYWFuZyB0cmFjayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IkJ1dHRvbiBuYSBTdXN1bm9kIG5hIHRyYWNrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IkJ1dHRvbiBuYSBJLXBhdXNlIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKaW5kZXggMGFmNzc0MC4uYWVkOGE0NyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJQSU4ga29kdW51IHlhesSxbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlBVSyB2ZSB5ZW5pIFBJTiBrb2R1bnUgeWF6xLFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjEzNDExMTIxNDY3MTAwODcwNDgiPiJQVUsga29kdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iWWVuaSBQSU4ga29kdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IlNJTSBQVUsga29kdW51IHZlIHllbmkgYmlyIFBJTiBrb2R1IHlhesSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTSBQVUsga29kdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iWWVuaSBTSU0gUElOIGtvZHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLFnmlmcmUgeWF6bWFrIGnDp2luIGRva3VudW4iPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJLaWxpZGkgYcOnbWFrIGnDp2luIMWfaWZyZXlpIHlhesSxbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+IktpbGlkaSBhw6dtYWsgacOnaW4gUElOIGtvZHVudSB5YXrEsW4iPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iRHVyYWtsYXQgZMO8xJ9tZXNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJPeW5hdCBkw7zEn21lc2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNzY1NjM1ODQ4Mjk4MDkxMjIxNiI+IkR1cmR1ciBkw7zEn21lc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4iQmXEn2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4iQmXEn2VubWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJLYWxwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4iRGV2YW0gZXRtZWsgacOnaW4ga2lsaWRpbmkgYcOnxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iQmHFn2xhdG1hIGlwdGFsIGVkaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJTaWxtZWsgacOnaW4gPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4gd2lkZ2V0XCfEsW7EsSBixLFyYWvEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHNpbGlubWV5ZWNlay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IsSwc3RlbmVuIFBJTiBrb2R1bnUgZ2lyaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4ixLBzdGVuZW4gUElOIGtvZHVudSBvbmF5bGF5xLFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJTSU0ga2FydCBraWxpZGkgYcOnxLFsxLF5b3LigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJZYW5sxLHFnyBQSU4ga29kdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiI0LTggcmFrYW1kYW4gb2x1xZ9hbiBiaXIgUElOIGdpcmluLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyBrb2R1IDggdmV5YSBkYWhhIMOnb2sgYmFzYW1ha2zEsSBiaXIgc2F5xLEgb2xtYWzEsWTEsXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iRG/En3J1IFBVSyBrb2R1bnUgdGVrcmFyIGdpcmluLiDDh29rIHNhecSxZGEgZGVuZW1lIHlhcMSxbMSxcnNhIFNJTSBrYXJ0IGthbMSxY8SxIG9sYXJhayBkZXZyZSBkxLHFn8SxIGLEsXJha8SxbMSxci4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IktpbGl0IGHDp21hIGRlc2VuaW5pemkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2V6IHlhbmzEscWfIMOnaXpkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gYmHFn2FyxLFzxLF6IGRlbmVtZWRlbiBzb25yYSB0ZWxlZm9udW51enUgYmlyIGUtcG9zdGEgaGVzYWLEsSBrdWxsYW5hcmFrIGHDp21hbsSxeiBpc3RlbmlyLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2FuaXllIGnDp2luZGUgdGVrcmFyIGRlbmV5aW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iS2FsZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iWWFubMSxxZ8gU0lNIFBJTiBrb2R1LiBDaWhhesSxbsSxesSxbiBraWxpZGluaSBhw6dtYWsgacOnaW4gYXJ0xLFrIG9wZXJhdMO2csO8bsO8emxlIGJhxJ9sYW50xLEga3VybWFuxLF6IGdlcmVraXlvci4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IllhbmzEscWfIFNJTSBQSU4ga29kdS4gQ2loYXrEsW7EsW4ga2lsaWRpbmkgYcOnbWFrIGnDp2luIG9wZXJhdMO2csO8bsO8emxlIGJhxJ9sYW50xLEga3VybWFrIHpvcnVuZGEga2FsbWFkYW4gw7ZuY2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGRlbmVtZSBoYWtrxLFuxLF6IGthbGTEsS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJZYW5sxLHFnyBTSU0gUElOIGtvZHUuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBkZW5lbWUgaGFra8SxbsSxeiBrYWxkxLEuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0ga3VsbGFuxLFsYW1hei4gT3BlcmF0w7Zyw7xuw7x6bGUgYmHEn2xhbnTEsSBrdXJ1bi4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+IllhbmzEscWfIFNJTSBQVUsga29kdS4gU0lNIGthbMSxY8SxIG9sYXJhayBrdWxsYW7EsWxtYXogaGFsZSBnZWxtZWRlbiDDtm5jZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZGVuZW1lIGhha2vEsW7EsXoga2FsZMSxLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IllhbmzEscWfIFNJTSBQVUsga29kdS4gU0lNIGthbMSxY8SxIG9sYXJhayBrdWxsYW7EsWxtYXogaGFsZSBnZWxtZWRlbiDDtm5jZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZGVuZW1lIGhha2vEsW7EsXoga2FsZMSxLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iU0lNIFBJTiBpxZ9sZW1pIGJhxZ9hcsSxc8SxeiBvbGR1ISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iU0lNIFBVSyBpxZ9sZW1pIGJhxZ9hcsSxc8SxeiBvbGR1ISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiJLb2QgS2FidWwgRWRpbGRpISI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IsOWbmNla2kgcGFyw6dhIGTDvMSfbWVzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IlNvbnJha2kgcGFyw6dhIGTDvMSfbWVzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJEdXJha2xhdCBkw7zEn21lc2kiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbAppbmRleCAyODc5ZTg3Li41ZTM1NWU0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+ItCS0LLQtdC00ZbRgtGMIFBJTi3QutC+0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiLQktCy0LXQtNGW0YLRjCBQVUst0LrQvtC0INGWINC90L7QstC40LkgUElOLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLLdC60L7QtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i0J3QvtCy0LjQuSBQSU4t0LrQvtC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4i0JLQstC10LTRltGC0YwgUFVLLdC60L7QtCDRliDQvdC+0LLQuNC5IFBJTi3QutC+0LQgU0lNLdC60LDRgNGC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlBVSy3QutC+0LQgU0lNLdC60LDRgNGC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+ItCd0L7QstC40LkgUElOLdC60L7QtCBTSU0t0LrQsNGA0YLQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+ItCi0L7RgNC60L3RltGC0YzRgdGPLCDRidC+0LEg0LLQstC10YHRgtC4INC/0LDRgNC+0LvRjCI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+ItCS0LLQtdC00ZbRgtGMINC/0LDRgNC+0LvRjCwg0YnQvtCxINGA0L7Qt9Cx0LvQvtC60YPQstCw0YLQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+ItCS0LLQtdC00ZbRgtGMIFBJTi3QutC+0LQsINGJ0L7QsSDRgNC+0LfQsdC70L7QutGD0LLQsNGC0LgiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4i0JrQvdC+0L/QutCwIFwi0J/RgNC40LfRg9C/0LjQvdC40YLQuFwiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiLQmtC90L7Qv9C60LAgXCLQktGW0LTRgtCy0L7RgNC40YLQuFwiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiLQmtC90L7Qv9C60LAgXCLQl9GD0L/QuNC90LjRgtC4XCIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4i0J/QvtC00L7QsdCw0ZTRgtGM0YHRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+ItCd0LUg0L/QvtC00L7QsdCw0ZTRgtGM0YHRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+ItCg0LXQudGC0LjQvdCzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4i0KDQvtC30LHQu9C+0LrRg9C50YLQtSwg0YnQvtCxINC/0YDQvtC00L7QstC20LjRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i0JfQsNC/0YPRgdC6INGB0LrQsNGB0L7QstCw0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLQktGW0LTQv9GD0YHRgtGW0YLRjCA8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPiwg0YnQvtCxINCy0LjQtNCw0LvQuNGC0LguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+INC90LUg0LHRg9C00LUg0LLQuNC00LDQu9C10L3Qvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+ItCS0LLQtdC00ZbRgtGMINC/0L7RgtGA0ZbQsdC90LjQuSBQSU4t0LrQvtC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+ItCf0ZbQtNGC0LLQtdGA0LTRjNGC0LUg0L/QvtGC0YDRltCx0L3QuNC5IFBJTi3QutC+0LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+ItCg0L7Qt9Cx0LvQvtC60YPQstCw0L3QvdGPIFNJTS3QutCw0YDRgtC44oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4i0J3QtdC/0YDQsNCy0LjQu9GM0L3QuNC5IFBJTi3QutC+0LQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i0JLQstC10LTRltGC0YwgUElOLdC60L7QtCDRltC3IDTigJM4INGG0LjRhNGALiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSy3QutC+0LQg0LzQsNGUINGB0LrQu9Cw0LTQsNGC0LjRgdGPINC30ZYg0YnQvtC90LDQudC80LXQvdGI0LUgOCDRhtC40YTRgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLQn9C+0LLRgtC+0YDQvdC+INCy0LLQtdC00ZbRgtGMINC/0YDQsNCy0LjQu9GM0L3QuNC5IFBVSy3QutC+0LQuINCn0LjRgdC70LXQvdC90ZYg0YHQv9GA0L7QsdC4INC90LDQt9Cw0LLQttC00Lgg0LLQuNC80LrQvdGD0YLRjCBTSU0t0LrQsNGA0YLRgy4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+ItCa0LvRjtGHINGA0L7Qt9Cx0LvQvtC60YPQstCw0L3QvdGPINC90LXQv9GA0LDQstC40LvRjNC90L4g0L3QsNC80LDQu9GM0L7QstCw0L3QviDRgdGC0ZbQu9GM0LrQuCDRgNCw0LfRltCyOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4g0KMg0LLQsNGBINGUINGJ0LUg0YHRgtGW0LvRjNC60Lgg0YHQv9GA0L7QsTogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4uINCjINGA0LDQt9GWINC90LXQstC00LDRh9GWINC34oCZ0Y/QstC40YLRjNGB0Y8g0LfQsNC/0LjRgiDRgNC+0LfQsdC70L7QutGD0LLQsNGC0Lgg0YLQtdC70LXRhNC+0L0g0LfQsCDQtNC+0L/QvtC80L7Qs9C+0Y4g0L7QsdC70ZbQutC+0LLQvtCz0L4g0LfQsNC/0LjRgdGDINC10LvQtdC60YLRgNC+0L3QvdC+0Zcg0L/QvtGI0YLQuC5cblxuINCf0L7QstGC0L7RgNGW0YLRjCDRgdC/0YDQvtCx0YMg0YfQtdGA0LXQtyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDRgdC10LouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCTICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i0JLQuNC70YPRh9C40YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i0J3QtdC/0YDQsNCy0LjQu9GM0L3QuNC5IFBJTi3QutC+0LQgU0lNLdC60LDRgNGC0LguINCX0LLigJnRj9C20ZbRgtGM0YHRjyDQt9GWINGB0LLQvtGX0Lwg0L7Qv9C10YDQsNGC0L7RgNC+0LwsINGJ0L7QsSDRgNC+0LfQsdC70L7QutGD0LLQsNGC0Lgg0L/RgNC40YHRgtGA0ZbQuS4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+ItCd0LXQv9GA0LDQstC40LvRjNC90LjQuSBQSU4t0LrQvtC0IFNJTS3QutCw0YDRgtC4LiDQoyDQstCw0YEg0LfQsNC70LjRiNC40LvQsNGB0YwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INGB0L/RgNC+0LHQsC4g0J/RltGB0LvRjyDRhtGM0L7Qs9C+INC/0L7RgtGA0ZbQsdC90L4g0LHRg9C00LUg0LfQsuKAmdGP0LfQsNGC0LjRgdGPINC3INC+0L/QtdGA0LDRgtC+0YDQvtC8LCDRidC+0LEg0YDQvtC30LHQu9C+0LrRg9Cy0LDRgtC4INC/0YDQuNGB0YLRgNGW0LkuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIyMjE1NzIzMzYxNTc1MzU5NDg2Ij4i0J3QtdC/0YDQsNCy0LjQu9GM0L3QuNC5IFBJTi3QutC+0LQgU0lNLdC60LDRgNGC0LguINCjINCy0LDRgSDQt9Cw0LvQuNGI0LjQu9C+0YHRjyDRgdGC0ZbQu9GM0LrQuCDRgdC/0YDQvtCxOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0t0LrQsNGA0YLRgyDQt9Cw0LHQu9C+0LrQvtCy0LDQvdC+LiDQl9Cy4oCZ0Y/QttGW0YLRjNGB0Y8g0Lcg0L7Qv9C10YDQsNGC0L7RgNC+0LwuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiLQndC10L/RgNCw0LLQuNC70YzQvdC40LkgUFVLLdC60L7QtCBTSU0t0LrQsNGA0YLQuC4g0KMg0LLQsNGBINC30LDQu9C40YjQuNC70LDRgdGMIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRgdC/0YDQvtCx0LAuINCf0ZbRgdC70Y8g0YbRjNC+0LPQviBTSU0t0LrQsNGA0YLRgyDQsdGD0LTQtSDQvdCw0LfQsNCy0LbQtNC4INC30LDQsdC70L7QutC+0LLQsNC90L4uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4i0J3QtdC/0YDQsNCy0LjQu9GM0L3QuNC5IFBVSy3QutC+0LQgU0lNLdC60LDRgNGC0LguINCjINCy0LDRgSDQt9Cw0LvQuNGI0LjQu9C+0YHRjyDRgdGC0ZbQu9GM0LrQuCDRgdC/0YDQvtCxOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uINCf0ZbRgdC70Y8g0YbRjNC+0LPQviBTSU0t0LrQsNGA0YLRgyDQsdGD0LTQtSDQvdCw0LfQsNCy0LbQtNC4INC30LDQsdC70L7QutC+0LLQsNC90L4uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiLQn9C+0LzQuNC70LrQsCDQstCy0LXQtNC10L3QvdGPIFBJTi3QutC+0LTRgyBTSU0t0LrQsNGA0YLQuC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+ItCf0L7QvNC40LvQutCwINCy0LLQtdC00LXQvdC90Y8gUFVLLdC60L7QtNGDIFNJTS3QutCw0YDRgtC4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLQmtC+0LQg0L/RgNC40LnQvdGP0YLQvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiLQmtC90L7Qv9C60LAgXCLQn9C+0L/QtdGA0LXQtNC90Y8g0LrQvtC80L/QvtC30LjRhtGW0Y9cIiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+ItCa0L3QvtC/0LrQsCBcItCd0LDRgdGC0YPQv9C90LAg0LrQvtC80L/QvtC30LjRhtGW0Y9cIiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiLQmtC90L7Qv9C60LAgXCLQn9GA0LjQt9GD0L/QuNC90LjRgtC4XCIiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAppbmRleCA3MGQzYzczLi4xOWViNGM1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+Ik5o4bqtcCBtw6MgUElOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4iTmjhuq1wIFBVSyB2w6AgbcOjIFBJTiBt4bubaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iTcOjIFBVSyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4iTcOjIFBJTiBt4bubaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+Ik5o4bqtcCBtw6MgUElOIG3hu5tpIHbDoCBtw6MgUFVLIGPhu6dhIFNJTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxODAxOTQxMDUxMDk0OTc0NjA5Ij4iTcOjIFBVSyBj4bunYSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+Ik3DoyBQSU4gbeG7m2kgY+G7p2EgU0lNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4iQ2jhuqFtIMSR4buDIG5o4bqtcCBt4bqtdCBraOG6qXUiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiJOaOG6rXAgbeG6rXQga2jhuql1IMSR4buDIG3hu58ga2jDs2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJOaOG6rXAgbcOjIFBJTiDEkeG7gyBt4bufIGtow7NhIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+Ik7DunQgdOG6oW0gZOG7q25nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGxheV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgxNDY0MTc3ODk1MTExNTQwNDQiPiJOw7p0IHBow6F0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJOw7p0IGThu6tuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic191cF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ1MzU5MzgxMjk2NjM5MDMxOTQiPiJCw6BpIGjDoXQgxJHGsOG7o2MgxJHDoW5oIGThuqV1IHRow61jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IkLDoGkgaMOhdCDEkcaw4bujYyDEkcOhbmggZOG6pXUga2jDtG5nIHRow61jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IlRyw6FpIHRpbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+Ik3hu58ga2jDs2EgxJHhu4MgdGnhur9wIHThu6VjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iUXXDoSB0csOsbmgga2jhu59pIGNo4bqheSBi4buLIGjhu6d5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IlRo4bqjIDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IMSR4buDIHjDs2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHPhur0ga2jDtG5nIGLhu4sgeMOzYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+Ik5o4bqtcCBtw6MgUElOIG1vbmcgbXXhu5FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IljDoWMgbmjhuq1uIG3DoyBQSU4gbW9uZyBtdeG7kW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+IsSQYW5nIG3hu58ga2jDs2EgdGjhursgU0lN4oCmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iTcOjIFBJTiBraMO0bmcgY2jDrW5oIHjDoWMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iTmjhuq1wIG3DoyBQSU4gY8OzIHThu6sgNCDEkeG6v24gOCBz4buRLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+Ik3DoyBQVUsgcGjhuqNpIGPDsyB04burIDggc+G7kSB0cuG7nyBsw6puLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkjDo3kgbmjhuq1wIGzhuqFpIG3DoyBQVUsgY2jDrW5oIHjDoWMuIE5oaeG7gXUgbOG6p24gbOG6t3AgbOG6oWkgc+G6vSB2w7QgaGnhu4d1IGjDs2EgdsSpbmggdmnhu4VuIHRo4bq7IFNJTS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkLhuqFuIMSRw6MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gbOG6p24gduG6vSBraMO0bmcgY2jDrW5oIHjDoWMgaMOsbmggbeG7nyBraMOzYSBj4bunYSBtw6xuaC4gU2F1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGzhuqduIHRo4butIGtow7RuZyB0aMOgbmggY8O0bmcgbuG7r2EsIGLhuqFuIHPhur0gxJHGsOG7o2MgecOqdSBj4bqndSBt4bufIGtow7NhIMSRaeG7h24gdGhv4bqhaSBi4bqxbmcgdMOgaSBraG/huqNuIGVtYWlsLlxuXG4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBnacOieS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiJYw7NhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJNw6MgUElOIGPhu6dhIFNJTSBraMO0bmcgY2jDrW5oIHjDoWMsIGLDonkgZ2nhu50gYuG6oW4gcGjhuqNpIGxpw6puIGjhu4cgduG7m2kgbmjDoCBjdW5nIGPhuqVwIGThu4tjaCB24bulIMSR4buDIG3hu58ga2jDs2EgdGhp4bq/dCBi4buLIGPhu6dhIGLhuqFuLiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iTcOjIFBJTiBj4bunYSBTSU0ga2jDtG5nIGNow61uaCB4w6FjLCBi4bqhbiBjw7JuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBs4bqnbiB0aOG7rSB0csaw4bubYyBraGkgYuG6oW4gcGjhuqNpIGxpw6puIGjhu4cgduG7m2kgbmjDoCBjdW5nIGPhuqVwIGThu4tjaCB24bulIMSR4buDIG3hu58ga2jDs2EgdGhp4bq/dCBi4buLIGPhu6dhIGLhuqFuLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+Ik3DoyBQSU4gY+G7p2EgU0lNIGtow7RuZyBjaMOtbmggeMOhYywgYuG6oW4gY8OybiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbOG6p24gdGjhu60uIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0ga2jDtG5nIHRo4buDIHPhu60gZOG7pW5nIMSRxrDhu6NjLiBMacOqbiBo4buHIHbhu5tpIG5ow6AgY3VuZyBj4bqlcCBk4buLY2ggduG7pSBj4bunYSBi4bqhbi4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iMzI1Njg5MzYwNzU2MTA2MDY0OSI+Ik3DoyBQVUsgY+G7p2EgU0lNIGtow7RuZyBjaMOtbmggeMOhYywgYuG6oW4gY8OybiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbOG6p24gdGjhu60gdHLGsOG7m2Mga2hpIFNJTSB2xKluaCB2aeG7hW4ga2jDtG5nIHRo4buDIHPhu60gZOG7pW5nIMSRxrDhu6NjLiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+Ik3DoyBQVUsgY+G7p2EgU0lNIGtow7RuZyBjaMOtbmggeMOhYywgYuG6oW4gY8OybiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbOG6p24gdGjhu60gdHLGsOG7m2Mga2hpIFNJTSB2xKluaCB2aeG7hW4ga2jDtG5nIHRo4buDIHPhu60gZOG7pW5nIMSRxrDhu6NjLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3Bpbl9mYWlsZWQiIG1zZ2lkPSI2MjY4Mjg4MDkzNTU4MDMxNTY0Ij4iVGhhbyB0w6FjIG3DoyBQSU4gY+G7p2EgU0lNIGtow7RuZyB0aMOgbmggY8O0bmchIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcHVrX2ZhaWxlZCIgbXNnaWQ9IjI4Mzg4MjQzNjk1MDI0NTU5ODQiPiJUaGFvIHTDoWMgbcOjIFBVSyBj4bunYSBTSU0ga2jDtG5nIHRow6BuaCBjw7RuZyEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iTcOjIMSRxrDhu6NjIGNo4bqlcCBuaOG6rW4hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iTsO6dCBi4bqjbiBuaOG6oWMgdHLGsOG7m2MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJOw7p0IGLhuqNuIG5o4bqhYyB0aeG6v3AgdGhlbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJOw7p0IHThuqFtIGThu6tuZyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKaW5kZXggY2RiMTk0NGUuLjE4NTc4ZTQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLovpPlhaUgUElOIOeggSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+Iuivt+i+k+WFpSBQVUsg56CB5ZKM5paw55qEIFBJTiDnoIEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IlBVSyDnoIEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IuaWsOeahCBQSU4g56CBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSIzMDM1ODU2NTUwMjg5NzI0MzM4Ij4i6K+36L6T5YWlIFNJTSDljaEgUFVLIOeggeWSjOaWsOeahCBQSU4g56CBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJTSU0g5Y2hIFBVSyDnoIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iMzIwMTE1MTg0MDU3MDQ5MjUzOCI+IuaWsCBTSU0g5Y2hIFBJTiDnoIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiLop6bmkbjlj6/ovpPlhaXlr4bnoIEiPC9mb250Pjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjEwNTQ3MjE2NjgyNzkwNDk3ODAiPiLovpPlhaXlr4bnoIHku6Xop6PplIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiLovpPlhaUgUElOIOi/m+ihjOino+mUgSI8L3N0cmluZz4KQEAgLTcxLDYgKzcxLDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiLmmoLlgZzmjInpkq4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+IuaSreaUvuaMiemSriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4i5YGc5q2i5oyJ6ZKuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IuaIkeWWnOasoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IuS4jeWWnOasoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IueIseW/gyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+Iuino+mUgeWNs+WPr+e7p+e7rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IuWQr+WKqOW3suWPlua2iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLmlL7kuIs8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPuWNs+WPr+WwhuWFtuWIoOmZpOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPuWwhuS4jeS8muiiq+WIoOmZpOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiI/MTIzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWxwaGFfa2V5IiBtc2dpZD0iODAwMTA5NjE3NTE2NzQ4NTY0OSI+IkFCQyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FsdF9rZXkiIG1zZ2lkPSIxMjg0ODIwOTQyNjIwMjg4Njc4Ij4iQUxUIjwvc3RyaW5nPgpAQCAtMTA1LDcgKzExMiw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4i6K+36L6T5YWl5omA6ZyAIFBJTiDnoIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4i6K+356Gu6K6k5omA6ZyAIFBJTiDnoIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Iuato+WcqOino+mUgSBTSU0g5Y2hLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iUElOIOeggeacieivr+OAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+Iuivt+i+k+WFpSA0IOiHsyA4IOS9jeaVsOeahCBQSU7jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9wdWtfaGludCIgbXNnaWQ9Ijc1NTMzODgzMjU2NTQzNjk1NzUiPiJQVUsg56CB5bqU6Iez5bCR5YyF5ZCrIDgg5L2N5pWw5a2X44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i6K+36YeN5paw6L6T5YWl5q2j56Gu55qEIFBVSyDnoIHjgILlpoLmnpzlsJ3or5XplJnor6/mrKHmlbDov4flpJrvvIxTSU0g5Y2h5bCG5rC45LmF5YGc55So44CCIjwvc3RyaW5nPgpAQCAtMTI5LDYgKzEzNSwxOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLmgqjlt7Lnu48gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g5qyh6ZSZ6K+v5Zyw57uY5Yi25LqG6Kej6ZSB5Zu+5qGI44CC5aaC5p6c5YaN5bCd6K+VIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOasoeWQjuS7jeS4jeaIkOWKn++8jOezu+e7n+WwseS8muimgeaxguaCqOS9v+eUqOiHquW3seeahOeUteWtkOmCruS7tuW4kOaIt+ino+mUgeaJi+acuuOAglxuXG7or7flnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g56eS5ZCO6YeN6K+V44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCUICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4i5Yig6ZmkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJTSU0g5Y2hIFBJTiDnoIHkuI3mraPnoa7vvIzmgqjnjrDlnKjlv4XpobvogZTns7vov5DokKXllYbkuLrmgqjop6PplIHorr7lpIfjgIIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IlNJTSDljaEgUElOIOeggeS4jeato+ehru+8jOaCqOi/mOaciTx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuasoeWwneivleacuuS8muOAguWmguaenOS7jeeEtuWksei0pe+8jOWImeW/hemhu+iBlOezu+i/kOiQpeWVhuW4ruaCqOino+mUgeiuvuWkh+OAgiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMjIxNTcyMzM2MTU3NTM1OTQ4NiI+IlNJTSDljaEgUElOIOeggeS4jeato+ehru+8jOaCqOi/mOaciTx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuasoeWwneivleacuuS8muOAgiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNIOWNoeaXoOazleS9v+eUqO+8jOivt+S4juaCqOeahOi/kOiQpeWVhuiBlOezu+OAgiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iU0lNIOWNoSBQVUsg56CB5LiN5q2j56Gu77yM5oKo6L+Y5pyJPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+5qyh5bCd6K+V5py65Lya44CC5aaC5p6c5LuN54S25aSx6LSl77yMU0lNIOWNoeWwhuawuOi/nOaXoOazleS9v+eUqOOAgiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IlNJTSDljaEgUFVLIOeggeS4jeato+ehru+8jOaCqOi/mOaciTx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuasoeWwneivleacuuS8muOAguWmguaenOS7jeeEtuWksei0pe+8jFNJTSDljaHlsIbmsLjov5zml6Dms5Xkvb/nlKjjgIIiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlNJTSDljaEgUElOIOeggeaTjeS9nOWksei0pe+8gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iU0lNIOWNoSBQVUsg56CB5pON5L2c5aSx6LSl77yBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGluX2FjY2VwdGVkIiBtc2dpZD0iMTQ0ODI0MTY3MzU3MDAyMDA5NyI+IuS7o+eggeato+ehru+8gSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wcmV2X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODIyOTEwODQzMDI0NTY2OTg1NCI+IuKAnOS4iuS4gOabsuKAneaMiemSriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+IuKAnOS4i+S4gOabsuKAneaMiemSriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiLigJzmmoLlgZzigJ3mjInpkq4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMGFkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiLovLjlhaUgUElOIOeivCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+Iuiri+i8uOWFpSBTSU0gUFVLIOeivOWSjOaWsCBQSU4g56K8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX3Byb21wdCIgbXNnaWQ9IjE4MDE5NDEwNTEwOTQ5NzQ2MDkiPiJTSU0gUFVLIOeivCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4i5pawIFNJTSBQSU4g56K8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50cnlfdG91Y2hfaGludCIgbXNnaWQ9Ijc4NTg1NDc0NjQ5ODI5ODEzODQiPjxmb250IHNpemU9IjE3Ij4i6LyV6Ke45Y2z5Y+v6Ly45YWl5a+G56K8IjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSIxMDU0NzIxNjY4Mjc5MDQ5NzgwIj4i6Ly45YWl5a+G56K85Y2z5Y+v6Kej6Y6WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4i6Ly45YWlIFBJTiDnorzljbPlj6/op6PpjpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiJQSU4g56K85LiN5q2j56K644CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbGFiZWxfdGV4dCIgbXNnaWQ9Ijg2MTc5NjQ2MTAyODI5ODQyNCI+IuWmguimgeino+mOlu+8jOiri+aMiemBuOWWrumNte+8jOeEtuW+jOaMiSAw44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjZXVubG9ja19tdWx0aXBsZV9mYWlsdXJlcyIgbXNnaWQ9Ijc1NDEzNzU4MzAyMjc5MjQyOSI+IuW3sui2hemBjuiHieWuueino+mOluWYl+ippuasoeaVuOS4iumZkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NoYXJnZWQiIG1zZ2lkPSIzMjcyMjIzOTA2MDczNDkyNDU0Ij4i5YWF6Zu75a6M5oiQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbiIgbXNnaWQ9IjgxMTc1NzIwMDA2Mzk5OTgzODgiPiLlhYXpm7vkuK0gKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i6KuL6YCj5o6l5YWF6Zu75Zmo44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjEzMzIyODgyNjg2MDAzMjk4NDEiPiLmjInpgbjllq7pjbXop6PpjpbjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iOTE2OTcxNzc3OTA1ODAzNzE2OCI+Iue2sue1oeW3sumOluWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI0OTQ5ODA1NjEzMDQyMTE5MzEiPiLmib7kuI3liLAgU0lNIOWNoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE0NDU4NDkwMDU5MDkyNjAwMzkiPiLlubPmnb/pm7vohabkuK3mspLmnIkgU0lNIOWNoeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDgxMTEwMzk1NTA4NjM3NjQzIj4i5omL5qmf5Lit5rKS5pyJIFNJTSDljaHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MjEwODkxNTA5OTk1OTQyMjUwIj4i6KuL5o+S5YWlIFNJTSDljaHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjU5Njg5ODU0ODk0NjM4NzAzNTgiPiLmib7kuI3liLAgU0lNIOWNoeaIlueEoeazleiugOWPliBTSU0g5Y2h77yM6KuL5o+S5YWlIFNJTSDljaHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX21lc3NhZ2Vfc2hvcnQiIG1zZ2lkPSI4MzQwODEzOTg5NTg2NjIyMzU2Ij4iU0lNIOWNoeeEoeazleS9v+eUqOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTg5Mjk0MDkwOTY5OTcyMzU0NCI+IuaCqOeahCBTSU0g5Y2h5bey6KKr5rC45LmF5YGc55So44CCXG7oq4voiIfmgqjnmoTnhKHnt5rmnI3li5nkvpvmh4nllYboga/ntaHvvIzku6Xlj5blvpflj6bkuIDlvLUgU0lNIOWNoeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjY4NzU3NzM0MTMzMDYzODA5MDIiPiJTSU0g5Y2h6JmV5pa86Y6W5a6a54uA5oWL44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJTSU0g5Y2h6JmV5pa8IFBVSyDpjpblrprni4DmhYvjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzk3NTIyMTgwNTAzMzYxNDQyNiI+Iuato+WcqOino+mWi+S4iumOlueahCBTSU0g5Y2hLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfY2hhbmdlZCIgbXNnaWQ9IjU2Nzg2MjQ2MjQ2ODE0MDAxOTEiPiIlMSRz44CC56ysICUyJGQg5YCL5bCP5bel5YW377yM5YWxICUzJGQg5YCL44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9hZGRfd2lkZ2V0IiBtc2dpZD0iODI3MzI3NzA1ODcyNDkyNDY1NCI+IuaWsOWinuWwj+W3peWFt+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4i56m655m9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiLop6PpjpbljYDln5/lt7LlsZXplovjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiLop6PpjpbljYDln5/lt7LmlLblkIjjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldCIgbXNnaWQ9IjY1MjcxMzEwMzk3NDE4MDgyNDAiPiI8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPuWwj+W3peWFt+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdXNlcl9zZWxlY3RvciIgbXNnaWQ9IjEyMjY3OTgzNzA5MTM2OTg4OTYiPiLnlKjmiLbpgbjlj5blt6XlhbciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3N0YXR1cyIgbXNnaWQ9IjgwMDgyNjQ2MDM5MzU5MzA2MTEiPiLni4DmhYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2NhbWVyYSIgbXNnaWQ9Ijg5MDQyMzExOTQxODExMTQ2MDMiPiLnm7jmqZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlnYXVyZF9hY2Nlc3NpYmlsaXR5X21lZGlhX2NvbnRyb2xzIiBtc2dpZD0iMjYyMjA5NjU0MjkyMTYxODA2Ij4i5aqS6auU5o6n5Yi2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfcmVvcmRlcl9zdGFydCIgbXNnaWQ9Ijg3MzY4NTM2MTU1ODg4MjgxOTciPiLlt7Lplovlp4vngrrlsI/lt6Xlhbfph43mlrDmjpLliJfmrKHluo/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiLlt7LlrozmiJDngrrlsI/lt6Xlhbfph43mlrDmjpLliJfmrKHluo/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9kZWxldGVkIiBtc2dpZD0iNDQyNjIwNDI2MzkyOTIyNDQzNCI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+5bCP5bel5YW35bey5Yiq6Zmk44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9leHBhbmRfbG9ja19hcmVhIiBtc2dpZD0iNTE5ODU5NzIwOTM0MTc4MDI0Ij4i5bGV6ZaL6Kej6Y6W5Y2A5Z+f44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV91bmxvY2siIG1zZ2lkPSIyOTU5OTI4NDc4NzY0Njk3MjU0Ij4i5ruR5YuV6Kej6Y6W44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX3VubG9jayIgbXNnaWQ9IjE0OTA4NDA3MDYwNzUyNDY2MTIiPiLlnJbmoYjop6PpjpbjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X2ZhY2VfdW5sb2NrIiBtc2dpZD0iNDgxNzI4MjU0MzM1MTcxODUzNSI+IuiHieWuueino+mOluOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJQSU4g6Kej6Y6W44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4i5a+G56K86Kej6Y6W44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4i5ZyW5qGI5Y2A5Z+f44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+Iua7keWLleWNgOWfn+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSIxMzM3Mjg2NTM4MzE4NTQzNTU1Ij4iW+S4iuS4gOmmluabsuebrl0g5oyJ6YiVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjcwNzM5MjgzMDA0NDQ5MDkzMjAiPiJb5LiL5LiA6aaW5puy55uuXSDmjInpiJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg0NTU5Nzk1NDUyOTUyMjQzMDIiPiJb5pqr5YGcXSDmjInpiJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iODE0NjQxNzc4OTUxMTE1NDA0NCI+Ilvmkq3mlL5dIOaMiemIlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iW+WBnOatol0g5oyJ6YiVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+IuWWnOatoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IuS4jeWWnOatoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X2hlYXJ0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjMzNjk0MzIzMjQ3NDY4OTg4NyI+IuW/g+W9oiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2hvd19ib3VuY2VyIiBtc2dpZD0iNTQyNTgzNzI3MjQxODE3NjE3NiI+Iuiri+ino+mOluS7pee5vOe6jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfaGlkZV9ib3VuY2VyIiBtc2dpZD0iNzg5Njk5MjE3MTg3ODMwOTM1OCI+IuW3suWPlua2iOWVn+WLlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiLmi5bmlL7jgIw8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPuOAjeWNs+WPr+WIqumZpOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9lbmQiIG1zZ2lkPSI1MDg4MzM1MDY3ODA5MDkzOTMiPiLjgIw8eGxpZmY6ZyBpZD0iV0lER0VUX0lOREVYIj4lMSRzPC94bGlmZjpnPuOAjeWwh+S4jeacg+iiq+WIqumZpOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX3N5bWJvbF9rZXkiIG1zZ2lkPSI5OTIyODA3NTYyNTY1MzYwNDIiPiLvvJ8xMjMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9hbHQiIG1zZ2lkPSI0ODU2ODY4ODIwMDQwMDUxOTM5Ij4iQWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfY2FuY2VsIiBtc2dpZD0iMTIwMzk4NDAxNzI0NTc4MzI0NCI+IuWPlua2iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiLliKrpmaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9kb25lIiBtc2dpZD0iMTk5MjU3MTExODQ2NjY3OTc3NSI+IuWujOaIkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX21vZGVfY2hhbmdlIiBtc2dpZD0iNDU0NzM4Nzc0MTkwNjUzNzUxOSI+IuaooeW8j+abtOaUuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX3NoaWZ0IiBtc2dpZD0iMjI3MDc0ODgxNDMxNTE0NzY5MCI+IlNoaWZ0IOmNtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIOmNtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2siIG1zZ2lkPSIyMjI4NTI0OTAwNDM5ODAxNDUzIj4i6Kej6Y6WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X2NhbWVyYSIgbXNnaWQ9Ijk2OTA3MTk5NzU1MjQ4NjgxNCI+IuebuOapnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zaWxlbnQiIG1zZ2lkPSI4OTM1NTEyODc3NDY1MjIxODIiPiLpnZzpn7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc291bmRvbiIgbXNnaWQ9IjMwMDUyNDY2Njc1NTAwMTcyIj4i6Z+z5pWI5bey6ZaL5ZWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLmkJzlsIsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i5ZCR5LiK5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2Rvd24iIG1zZ2lkPSI1MDg3NzM5NzI4NjM5MDE0NTk1Ij4i5ZCR5LiL5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i5ZCR5bem5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3JpZ2h0IiBtc2dpZD0iODAzNDQzMzI0MjU3OTYwMDk4MCI+IuWQkeWPs+a7keWLleWNs+WPrzx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfc3dpdGNoZWQiIG1zZ2lkPSIzNzY4MDA2NzgzMTY2OTg0NDEwIj4i55uu5YmN55qE55So5oi25pivPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW1lcmdlbmN5X2NhbGxfbGFiZWwiIG1zZ2lkPSI2ODQ5NDYxOTI1MjM4MzA1MzEiPiLnt4rmgKXpm7voqbEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mb3Jnb3RfcGF0dGVybl9idXR0b25fdGV4dCIgbXNnaWQ9Ijg4NTIwMjE0Njc4NjgyMjA2MDgiPiLlv5joqJjlnJbmoYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IuWcluahiOmMr+iqpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3Bhc3N3b3JkIiBtc2dpZD0iMjMzMzI4MTc2MjEyODExMzE1NyI+IuWvhueivOmMr+iqpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3dyb25nX3BpbiIgbXNnaWQ9IjExMzEzMDY1MTA4MzM1NjM4MDEiPiJQSU4g6Yyv6KqkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYzNTgxMTAyMjE2MDMyOTc1NDgiPiLoq4vlnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzk4OTc4NjExNjgzMDc1ODY4Ij4i55Wr5Ye65ZyW5qGIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4i6Ly45YWlIFNJTSDljaEgUElOIOeivCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4i6Ly45YWlIFBJTiDnorwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4i6Ly45YWl5a+G56K8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNIOWNoeePvuW3suWBnOeUqO+8jOiri+i8uOWFpSBQVUsg56K85Lul57m857qM44CC6Kmz5oOF6KuL6IiH5rWB5YuV57ay57Wh5L6b5oeJ5ZWG6IGv57Wh44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+Iui8uOWFpeaJgOmcgOeahCBQSU4g56K8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZW50ZXJfY29uZmlybV9waW5faGludCIgbXNnaWQ9IjMyNTY3NjE4NDc2MjUyOTk3NiI+IueiuuiqjeaJgOmcgOeahCBQSU4g56K8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiLmraPlnKjop6PplovkuIrpjpbnmoQgU0lNIOWNoS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+Iuiri+i8uOWFpeS4gOWAiyA0IOiHsyA4IOS9jeaVuOeahCBQSU4g56K844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI3NTUzMzg4MzI1NjU0MzY5NTc1Ij4iUFVLIOeivOaHieeUsSA4IOWAi+aIluS7peS4iuaVuOWtl+e1hOaIkOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+Iuiri+mHjeaWsOi8uOWFpeato+eiuueahCBQVUsg56K844CC5aaC5p6c5ZiX6Kmm6Ly45YWl55qE5qyh5pW46YGO5aSa77yMU0lNIOWNoeWwh+awuOS5heWBnOeUqOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4g56K85LiN56ymIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i5ZyW5qGI5ZiX6Kmm5qyh5pW46YGO5aSaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMTEwMDU1MTI2MTI2NTUwNjQ0OCI+IuWmguimgeino+mOlu+8jOiri+S7pSBHb29nbGUg5biz5oi255m75YWl44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiLnlKjmiLblkI3nqLEgKOmbu+WtkOmDteS7tikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+IuWvhueivCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3N1Ym1pdF9idXR0b24iIG1zZ2lkPSI1MzU1OTA0NTgyNjc0MDU0NzAyIj4i55m75YWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjU3NTQ2NjQxMTkzMTk4NzIxOTciPiLnhKHmlYjnmoTnlKjmiLblkI3nqLHmiJblr4bnorzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSI1NjkwNzA5MTMyODQxNzUyOTc0Ij4i5b+Y6KiY55So5oi25ZCN56ix5oiW5a+G56K877yfXG7oq4vngI/opr0gIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4i44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fY2hlY2tpbmdfcGFzc3dvcmQiIG1zZ2lkPSIxMDUyNjg1MTk3NzEwMjUyMzk1Ij4i5q2j5Zyo5qqi5p+l5biz5oi24oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLmgqjlt7LovLjlhaXpjK/oqqTnmoQgUElOIOeivCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHjgIJcblxu6KuL5ZyoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLmgqjlt7LovLjlhaXpjK/oqqTnmoTlr4bnorwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g5qyh44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i5oKo5bey55Wr6Yyv6Kej6Y6W5ZyW5qGIIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoeOAglxuXG7oq4vlnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g56eS5b6M5YaN6Kmm5LiA5qyh44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4i5oKo5ZiX6Kmm5LqGIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoeS7jeacquiDveaIkOWKn+ino+mWi+mAmemDqOS4iumOlueahOW5s+adv+mbu+iFpuOAguWmguaenOWGjeWYl+ippiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHku43mnKrmiJDlip/vvIzlubPmnb/pm7vohablsIflm57lvqnljp/lu6DoqK3lrprvvIzmiYDmnInnlKjmiLbos4fmlpnlnYfmnIPlpLHljrvjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MDUxMDE1OTQzMDM4MTk5OTEwIj4i5oKo5ZiX6Kmm5LqGIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoeS7jeacquiDveaIkOWKn+ino+mWi+mAmemDqOS4iumOlueahOaJi+apn+OAguWmguaenOWGjeWYl+ippiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHku43mnKrmiJDlip/vvIzmiYvmqZ/lsIflm57lvqnljp/lu6DoqK3lrprvvIzmiYDmnInnlKjmiLbos4fmlpnlnYfmnIPlpLHljrvjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IuaCqOWYl+ippuS6hiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh5LuN5pyq6IO95oiQ5Yqf6Kej6ZaL6YCZ6YOo5LiK6Y6W55qE5bmz5p2/6Zu76IWm44CC5bmz5p2/6Zu76IWm54++5Zyo5bCH5Zue5b6p5Y6f5bug6Kit5a6a44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0ODE3NjI3NDc0NDE5NDcxNTE4Ij4i5oKo5ZiX6Kmm5LqGIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDmrKHku43mnKrog73miJDlip/op6PplovpgJnpg6jkuIrpjpbnmoTmiYvmqZ/jgILmiYvmqZ/nj77lnKjlsIflm57lvqnljp/lu6DoqK3lrprjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i5oKo5bey55Wr6Yyv6Kej6Y6W5ZyW5qGIIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoe+8jOWmguaenOWGjeWYl+ippiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHku43mnKrmiJDlip/vvIzns7vntbHmnIPopoHmsYLmgqjpgI/pgY7pm7vpg7XluLPmiLbop6PplovkuIrpjpbnmoTlubPmnb/pm7vohabjgIJcblxu6KuL5ZyoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i5oKo5bey55Wr6Yyv6Kej6Y6W5ZyW5qGIIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoe+8jOWmguaenOWGjeWYl+ippiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHku43mnKrmiJDlip/vvIzns7vntbHmnIPopoHmsYLmgqjpgI/pgY7pm7vpg7XluLPmiLbop6PplovkuIrpjpbnmoTmiYvmqZ/jgIJcblxu6KuL5ZyoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+Iuenu+mZpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iU0lNIFBJTiDnorzkuI3mraPnorrvvIzmgqjnj77lnKjlv4XpoIjoga/ntaHmtYHli5XntrLntaHkvpvmh4nllYbngrrmgqjnmoToo53nva7op6PpjpbjgIIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IlNJTSBQSU4g56K85LiN5q2j56K677yM5oKo5Ymp5LiLIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDmrKHmqZ/mnIPovLjlhaXjgILlpoLmnpzku43nhLbovLjlhaXpjK/oqqTvvIzmgqjlv4XpoIjoga/ntaHmtYHli5XntrLntaHkvpvmh4nllYbngrrmgqjnmoToo53nva7op6PpjpbjgIIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJTSU0gUElOIOeivOS4jeato+eiuu+8jOaCqOWJqeS4iyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh5qmf5pyD6Ly45YWl44CCIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGVfZGVhZCIgbXNnaWQ9IjcwNzc1MzY4MDgyOTEzMTYyMDgiPiJTSU0g54Sh5rOV5L2/55So77yM6KuL6IGv57Wh5oKo55qE5rWB5YuV57ay57Wh5L6b5oeJ5ZWG44CCIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJTSU0gUFVLIOeivOS4jeato+eiuu+8jOaCqOWJqeS4iyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh5qmf5pyD6Ly45YWl44CC5aaC5p6c5LuN54S26Lyq5YWl6Yyv6Kqk77yMU0lNIOWwh+awuOS5heeEoeazleS9v+eUqOOAgiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNTQ3NzMwNTIyNjAyNjM0MjAzNiI+IlNJTSBQVUsg56K85LiN5q2j56K677yM5oKo5Ymp5LiLIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDmrKHmqZ/mnIPovLjlhaXjgILlpoLmnpzku43nhLbovLjlhaXpjK/oqqTvvIxTSU0g5bCH5rC45LmF54Sh5rOV5L2/55So44CCIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJTSU0gUElOIOeivOaTjeS9nOWkseaVl++8gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iU0lNIFBVSyDnorzmk43kvZzlpLHmlZfvvIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4i5a+G56K85q2j56K677yBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MjI5MTA4NDMwMjQ1NjY5ODU0Ij4iW+S4iuS4gOmmluabsuebrl0g5oyJ6YiVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X25leHRfZGVzY3JpcHRpb24iIG1zZ2lkPSI0Mjk5MjU4MzAwMjgzNzc4MzA1Ij4iW+S4i+S4gOmmluabsuebrl0g5oyJ6YiVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTA5MzA3MzMzODIzODMxMDIyNCI+IlvmmqvlgZxdIOaMiemIlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wbGF5X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjkyNDYyODg2Mzc0MTE1MDk1NiI+Ilvmkq3mlL5dIOaMiemIlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzA4NDE3OTMyNDgxMDU3NTc4NyI+IlvlgZzmraJdIOaMiemIlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9Ijg3MDA2NTA0MDMwNTQwNDIxNTMiPiLmspLmnInmnI3li5njgIIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKaW5kZXggNzJhMWMwZi4uZDgxY2MxNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+Iui8uOWFpSBQSU4g56K8Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcHVrX2NvZGUiIG1zZ2lkPSI0ODAwNzI1MjY2OTI1ODQ1MzMzIj4i6Ly45YWlIFBVSyDnorzlkozmlrAgUElOIOeivCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIOeivCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSI4MDI3NjgwMzIxNjE0MTk2MjU4Ij4i5pawIFBJTiDnorwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiLovLjlhaUgU0lNIOWNoSBQVUsg56K85ZKM5pawIFBJTiDnorwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTSDljaEgUFVLIOeivCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4i5paw5aKeIFNJTSDljaEgUElOIOeivCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudHJ5X3RvdWNoX2hpbnQiIG1zZ2lkPSI3ODU4NTQ3NDY0OTgyOTgxMzg0Ij48Zm9udCBzaXplPSIxNyI+Iui8leinuOWNs+WPr+i8uOWFpeWvhueivCI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+Iui8uOWFpeWvhueivOWNs+WPr+ino+mOliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iNjM5MTc1NTE0NjExMjUwMzQ0MyI+Iui8uOWFpSBQSU4g5Y2z5Y+v6Kej6Y6WIjwvc3RyaW5nPgpAQCAtNzEsNiArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODQ1NTk3OTU0NTI5NTIyNDMwMiI+IlvmmqvlgZxdIOaMiemIlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iW+aSreaUvl0g5oyJ6YiVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijc2NTYzNTg0ODI5ODA5MTIyMTYiPiJb5YGc5q2iXSDmjInpiJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF90aHVtYnNfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSI0NTM1OTM4MTI5NjYzOTAzMTk0Ij4i5Zac5q2hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX2Rvd25fZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTAxNDMzNjc3MTkyMTc3ODYxIj4i5LiN5Zac5q2hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfaGVhcnRfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMzM2OTQzMjMyNDc0Njg5ODg3Ij4i5oSb5b+DIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaG93X2JvdW5jZXIiIG1zZ2lkPSI1NDI1ODM3MjcyNDE4MTc2MTc2Ij4i5YWI6Kej6Y6W5omN6IO957m857qM5pON5L2cIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4i5bey5Y+W5raI5ZWf5YuVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X3N0YXJ0IiBtc2dpZD0iNDA5NjU1MDU1MjYzNDM5MTQ1MSI+IuaLluaUvuOAjDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+44CN5Y2z5Y+v5bCH5YW25Yiq6Zmk44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+IuOAjDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+44CN5bCH5LiN5pyD6YGt5Yiw5Yiq6Zmk44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CkBAIC0xMDUsNyArMTEyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9waW5faGludCIgbXNnaWQ9Ijc4NzE2MDQ1Mjc0Mjk2MDIwMjQiPiLovLjlhaXmiYDpnIDnmoQgUElOIOeivCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiLnorroqo3miYDpnIDnmoQgUElOIOeivCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4OTUwMzk4MDE2OTc2ODY1NzYyIj4i5q2j5Zyo6Kej6ZmkIFNJTSDljaHpjpblrpouLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJQSU4g56K85LiN5q2j56K644CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4i6KuL6Ly45YWlIDQg5YiwIDgg56K855qEIFBJTuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyDnorzoh7PlsJHlv4XpoIjngrogOCDnorzjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLph43mlrDovLjlhaXmraPnorrnmoQgUFVLIOeivOOAguWmguaenOmMr+iqpOasoeaVuOmBjuWkmu+8jFNJTSDljaHlsIfmnIPmsLjkuYXlgZznlKjjgIIiPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuaCqOeahOino+mOluWcluW9ouW3sueVq+mMryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHvvIzlpoLmnpzlho3lmJfoqaYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5LuN5pyq5oiQ5Yqf77yM57O757Wx5bCx5pyD6KaB5rGC5oKo6YCP6YGO6Zu75a2Q6YO15Lu25biz5oi26Kej6Zmk5omL5qmf55qE6Y6W5a6a54uA5oWL44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ190ZXh0X21lc3NhZ2Vfc2VwYXJhdG9yIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDE2MDcwMDQzMzI4NzIzMzc3MSI+IiDigJQgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcmVvcmRlcmluZ19kZWxldGVfZHJvcF90YXJnZXRfdGV4dCIgbXNnaWQ9Ijc4OTkyMDI5NzgyMDQ0Mzg3MDgiPiLnp7vpmaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlNJTSDljaHnmoQgUElOIOeivOi8uOWFpemMr+iqpO+8jOaCqOePvuWcqOW/hemgiOiri+ihjOWLlemAmuioiualreiAheeCuuijnee9ruino+mOluOAgiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI4MTM0MzEzOTk3Nzk5NjM4MjU0Ij4iU0lNIOWNoeeahCBQSU4g56K86Ly45YWl6Yyv6Kqk77yM5oKo6YKE5Y+v5Lul5YaN6KmmIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDmrKHjgILlpoLmnpzku43nhLblpLHmlZfvvIzlsLHlv4XpoIjoq4vooYzli5XpgJroqIrmpa3ogIXngrroo53nva7op6PpjpbjgIIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJTSU0g5Y2h55qEIFBJTiDnorzovLjlhaXpjK/oqqTvvIzmgqjpgoTlj6/ku6Xlho3oqaYgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoeOAgiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iU0lNIOWNoeeEoeazleS9v+eUqO+8jOiri+iIh+aCqOeahOihjOWLlemAmuioiualreiAheiBr+e1oeOAgiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSIzMjU2ODkzNjA3NTYxMDYwNjQ5Ij4iU0lNIOWNoeeahCBQVUsg56K86Ly45YWl6Yyv6Kqk77yM5oKo6YKE5Y+v5Lul5YaN6KmmIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDmrKHjgILlpoLmnpzku43nhLblpLHmlZfvvIxTSU0g5Y2h5bCH5rC45LmF54Sh5rOV5L2/55So44CCIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iU0lNIOWNoeeahCBQVUsg56K86Ly45YWl6Yyv6Kqk77yM5oKo6YKE5Y+v5Lul5YaN6KmmIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDmrKHjgILlpoLmnpzku43nhLblpLHmlZfvvIxTSU0g5Y2h5bCH5rC45LmF54Sh5rOV5L2/55So44CCIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJTSU0g5Y2hIFBJTiDnorzmk43kvZzlpLHmlZfvvIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlNJTSDljaEgUFVLIOeivOaTjeS9nOWkseaVl++8gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiLlr4bnorzmraPnorrvvIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJb5LiK5LiA6aaW5puy55uuXSDmjInpiJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTkyNTgzMDAyODM3NzgzMDUiPiJb5LiL5LiA6aaW5puy55uuXSDmjInpiJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI1MDkzMDczMzM4MjM4MzEwMjI0Ij4iW+aaq+WBnF0g5oyJ6YiVIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKaW5kZXggMTg1ZWEwMy4uYjIwNTYzNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCkBAIC0yMSw5ICsyMSw5IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fY29kZSIgbXNnaWQ9IjMwMzc2ODU3OTYwNTg0OTUwMTciPiJGYWthIGlraG9kaSB5ZS1QSU4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjQ4MDA3MjUyNjY5MjU4NDUzMzMiPiJGYWthIGktUFVLIG5lcGhpbmlraG9kaSBlbnRzaGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTM0MTExMjE0NjcxMDA4NzA0OCI+IklraG9kaSBsZS1QVUsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+IklwaGluaWtob2RpIGVudHNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iMzAzNTg1NjU1MDI4OTcyNDMzOCI+IlRoYXlpcGhhIGktUFVLIHllLVNJTSBuZWtob2RpIHllcGhpbmlraG9kaSBlbnRzaGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IklraG9kaSB5ZS1QVUsgeWUtU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Byb21wdCIgbXNnaWQ9IjMyMDExNTE4NDA1NzA0OTI1MzgiPiJJa2hvZGkgZW50c2hhIHllcGhpbmlraG9kaSB5ZS1TSU0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJUaGludGEgdWt1YmhhbGEgaXBoYXNpd2VkaSI8L2ZvbnQ+PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IkJoYWxhIGlwaGFzaXdlZGkgdWt1emUga3V2dWxla2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcGFzc3dvcmRfY29kZSIgbXNnaWQ9IjYzOTE3NTUxNDYxMTI1MDM0NDMiPiJGYWthIGktUElOIHVrdXZ1bGEiPC9zdHJpbmc+CkBAIC03MSw2ICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfcGF1c2VfZGVzY3JpcHRpb24iIG1zZ2lkPSI4NDU1OTc5NTQ1Mjk1MjI0MzAyIj4iSW5raW5vYmhvIHlva3VtaXN3YSBpc2lraGFzaGFuYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSI4MTQ2NDE3Nzg5NTExMTU0MDQ0Ij4iSW5raW5vYmhvIHlva3VkbGFsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3N0b3BfZGVzY3JpcHRpb24iIG1zZ2lkPSI3NjU2MzU4NDgyOTgwOTEyMjE2Ij4iSW5raW5vYmhvIHlva3VtaXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV90cmFuc3BvcnRfdGh1bWJzX3VwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDUzNTkzODEyOTY2MzkwMzE5NCI+Ik9rdXNoYXBodSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfdHJhbnNwb3J0X3RodW1ic19kb3duX2Rlc2NyaXB0aW9uIiBtc2dpZD0iODEwMTQzMzY3NzE5MjE3Nzg2MSI+IkFrdWx1bmdpbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3RyYW5zcG9ydF9oZWFydF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzMzY5NDMyMzI0NzQ2ODk4ODciPiJJbmhsaXppeW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Nob3dfYm91bmNlciIgbXNnaWQ9IjU0MjU4MzcyNzI0MTgxNzYxNzYiPiJWdWxhIHVrdXplIHVxaHViZWtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9oaWRlX2JvdW5jZXIiIG1zZ2lkPSI3ODk2OTkyMTcxODc4MzA5MzU4Ij4iVWt1cWFsaXNhIGt1a2hhbnNlbGl3ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZGVsZXRlX3dpZGdldF9zdGFydCIgbXNnaWQ9IjQwOTY1NTA1NTI2MzQzOTE0NTEiPiJMYWhsYSBpLTx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IHVrdXplIHV5aXN1c2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9kZWxldGVfd2lkZ2V0X2VuZCIgbXNnaWQ9IjUwODgzMzUwNjc4MDkwOTM5MyI+Ijx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IG5nZWtlIGlzdXN3ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9zeW1ib2xfa2V5IiBtc2dpZD0iOTkyMjgwNzU2MjU2NTM2MDQyIj4iPzEyMyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3N3b3JkX2tleWJvYXJkX2xhYmVsX2FscGhhX2tleSIgbXNnaWQ9IjgwMDEwOTYxNzUxNjc0ODU2NDkiPiJBQkMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHRfa2V5IiBtc2dpZD0iMTI4NDgyMDk0MjYyMDI4ODY3OCI+IkFMVCI8L3N0cmluZz4KQEAgLTEwNSw3ICsxMTIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IkZha2EgaXBoaW5pa2hvZGkgb3lpdGhhbmRheW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iUWluaXNla2EgaXBoaW5pa2hvZGkgb3lpdGhhbmRheW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Ikl2dWxhIGlraGFkaSBsZS1TSU0uLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjExMzkzMjQ4ODc0MTM4NDY5MTIiPiJJcGhpbmlraG9kaSBlbmdhbHVuZ2lsZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3NpbV9waW5faGludCIgbXNnaWQ9Ijg3OTUxNTkzNTgxMTA2MjAwMDEiPiJUaGF5aXBoYSBpcGhpbmlraG9kaSBlbmV6aW5vbWJvbG8gZXppbmd1LTQga3V5YSBrd2V6aW5ndS04LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IklraG9kaSB5ZS1QVUsga3VmYW5lbGUgaWJlIHlpemlub21ib2xvIGV6aW5ndS04IG5vbWEgZXppbmluZ2kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iRmFrYSBrYWJ1c2hhIGlraG9kaSB5ZS1QVUsgZWx1bmdpbGUuIEltaXphbW8gZXBoaW5kaXdlIGl6b2todWJhemEgdW5hcGhha2FkZSBpLVNJTS4iPC9zdHJpbmc+CkBAIC0xMjksNiArMTM1LDE5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlVrdWxheWlzaGEgdW5nZW5pc2EgaXBoYXRoaW5pIHlha2hvIHlva3V2dWxhIG5nZW5kbGVsYSBlbmdhbHVuZ2lsZSBpemlraGF0aGkgZXppLTx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IEVtdmEga3dlbWlueWUgaW1pemFtbyBlbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LCB1em9jZWx3YSB1a3V2dWxhIGlmb25pIHlha2hvIHVzZWJlbnppc2EgdWt1bmdlbmEgbmdlbXZ1bWUga3UtR29vZ2xlXG5cbiBaYW1lIGZ1dGhpIGVtdW12YSBrd2VuZ3UtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IGFtYXNla2hvbmRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3RleHRfbWVzc2FnZV9zZXBhcmF0b3IiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MTYwNzAwNDMzMjg3MjMzNzcxIj4iIOKAlCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IlN1c2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IklraG9kaSB5ZXBoaW5pa2hvZGkgeWUtU0lNIGVuZ2FsdW5naWxlIG1hbmplIGt1bWVsZSB1eGh1bWFuZSBuZW5rYW1waW5pIHllbmV0aGl3ZWtoaSB5YWtobyB1a3V2dWxhIGlkaXZheWlzaSB5YWtoby4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iODEzNDMxMzk5Nzc5OTYzODI1NCI+IklraG9kaSB5ZXBoaW5pa2hvZGkgeWUtU0lNIGVuZ2FsdW5naWxlLCB1bmVtaXphbW8gZW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZXNlbGUgbmdhcGhhbWJpIGtva3ViYSB1eGh1bWFuZSBuZW5rYW1waW5pIHllbmV0aGl3ZWtoaS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjIyMTU3MjMzNjE1NzUzNTk0ODYiPiJJa2hvZGkgeWVwaGluaWtob2RpIHllLVNJTSBlbmdhbHVuZ2lsZSwgdW5lbWl6YW1vIGVzZWxlIGVuZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3B1a19jb2RlX2RlYWQiIG1zZ2lkPSI3MDc3NTM2ODA4MjkxMzE2MjA4Ij4iSS1TSU0gYXlpc2ViZW56aXNla2kuIFhodW1hbmEgbmVta2FtcGluaSB5ZW5ldGhpd2VraGkgeWFraG8uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjMyNTY4OTM2MDc1NjEwNjA2NDkiPiJJa2hvZGkgeWUtUFVLIHllLVNJTcKgZW5nYWx1bmdpbGUsIHVuZW1pemFtbyBlbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBlc2VsZSBuZ2FwaGFtYmkga29rdWJhIGktU0lNIGliZSBlbmdhc2ViZW56aXNla2nCoHVuYXBoYWthZGUuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI1NDc3MzA1MjI2MDI2MzQyMDM2Ij4iSWtob2RpIHllLVBVSyB5ZS1TSU0gZW5nYWx1bmdpbGUsIHVuZW1pemFtbyBlbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBlc2VsZSBuZ2FwaGFtYmkga29rdWJhIGktU0lNIGliYSBlbmdhc2ViZW56aXNla2kgdW5hcGhha2FkZS4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9waW5fZmFpbGVkIiBtc2dpZD0iNjI2ODI4ODA5MzU1ODAzMTU2NCI+IlVtc2ViZW56aSB3ZXBoaW5pa2hvZGkgeWUtU0lNIHdlaGx1bGVraWxlISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3B1a19mYWlsZWQiIG1zZ2lkPSIyODM4ODI0MzY5NTAyNDU1OTg0Ij4iVW1zZWJlbnppIHdlLVBVS8KgeWUtU0lNwqB3ZWhsdWxla2lsZSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5fYWNjZXB0ZWQiIG1zZ2lkPSIxNDQ4MjQxNjczNTcwMDIwMDk3Ij4iSWtob2RpIHlhbXVrZWx3ZSEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjgyMjkxMDg0MzAyNDU2Njk4NTQiPiJJbmtpbm9tYm8geWV0aHJla2hpIHlhbmdhcGhhbWJpbGluaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDI5OTI1ODMwMDI4Mzc3ODMwNSI+Iklua2lub2JobyB5ZXRocmVraGkgZWxhbmRlbGF5byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUwOTMwNzMzMzgyMzgzMTAyMjQiPiJJbmtpbm9iaG8geW9rdW1pc3dhIGlzaWtoYXNoYW5hIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkQ2lyY2xlRnJhbWVkRHJhd2FibGUuamF2YSBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZENpcmNsZUZyYW1lZERyYXdhYmxlLmphdmEKaW5kZXggNjNiNjFhZC4uMGUwOGNmNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkQ2lyY2xlRnJhbWVkRHJhd2FibGUuamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRDaXJjbGVGcmFtZWREcmF3YWJsZS5qYXZhCkBAIC0yOSw4ICsyOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0RjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwogCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogY2xhc3MgS2V5Z3VhcmRDaXJjbGVGcmFtZWREcmF3YWJsZSBleHRlbmRzIERyYXdhYmxlIHsKIAogICAgIHByaXZhdGUgZmluYWwgQml0bWFwIG1CaXRtYXA7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRNZXNzYWdlQXJlYS5qYXZhIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkTWVzc2FnZUFyZWEuamF2YQppbmRleCA3NTE1NzJjLi4yZTRkYmRmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRNZXNzYWdlQXJlYS5qYXZhCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZE1lc3NhZ2VBcmVhLmphdmEKQEAgLTIzLDE2ICsyMywxMCBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQub3MuQmF0dGVyeU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRQSU5WaWV3LmphdmEgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRQSU5WaWV3LmphdmEKaW5kZXggM2QxYzNmMy4uY2EyZDYxNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkUElOVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFBJTlZpZXcuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5rZXlndWFyZDsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQudGV4dC5FZGl0YWJsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuSW5wdXRUeXBlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0V2F0Y2hlcjsKIGltcG9ydCBhbmRyb2lkLnRleHQubWV0aG9kLkRpZ2l0c0tleUxpc3RlbmVyOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkUGFzc3dvcmRWaWV3LmphdmEgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRQYXNzd29yZFZpZXcuamF2YQppbmRleCA0ZTM1NjhiLi5lNzMzYWZjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRQYXNzd29yZFZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRQYXNzd29yZFZpZXcuamF2YQpAQCAtMTYsMTMgKzE2LDEwIEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQua2V5Z3VhcmQ7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5hZG1pbi5EZXZpY2VQb2xpY3lNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLnRleHQuRWRpdGFibGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LklucHV0VHlwZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFdhdGNoZXI7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0Lm1ldGhvZC5EaWdpdHNLZXlMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnRleHQubWV0aG9kLlRleHRLZXlMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwpAQCAtMzEsOSArMjgsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZFN1YnR5cGU7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXcuT25FZGl0b3JBY3Rpb25MaXN0ZW5lcjsKIAotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldC5QYXNzd29yZEVudHJ5S2V5Ym9hcmRIZWxwZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwud2lkZ2V0LlBhc3N3b3JkRW50cnlLZXlib2FyZFZpZXc7Ci0KIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIC8qKgogICogRGlzcGxheXMgYW4gYWxwaGFudW1lcmljIChsYXRpbi0xKSBrZXkgZW50cnkgZm9yIHRoZSB1c2VyIHRvIGVudGVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRTZWxlY3RvclZpZXcuamF2YSBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFNlbGVjdG9yVmlldy5qYXZhCmluZGV4IDYzYmUxMDIuLjcxOGIwNmUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFNlbGVjdG9yVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFNlbGVjdG9yVmlldy5qYXZhCkBAIC0xNiwxOSArMTYsMTQgQEAKIHBhY2thZ2UgY29tLmFuZHJvaWQua2V5Z3VhcmQ7CiAKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvcjsKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKIGltcG9ydCBhbmRyb2lkLmFwcC5TZWFyY2hNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLmFkbWluLkRldmljZVBvbGljeU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuUG93ZXJNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwotaW1wb3J0IGFuZHJvaWQudGVsZXBob255LlRlbGVwaG9ueU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkU2ltUGluVmlldy5qYXZhIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkU2ltUGluVmlldy5qYXZhCmluZGV4IDlhY2NiYjQuLmFlN2FjOTcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFNpbVBpblZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRTaW1QaW5WaWV3LmphdmEKQEAgLTIwLDE2ICsyMCwxMiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5QaG9uZUNvbnN0YW50czsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2c7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2cuQnVpbGRlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5EaWFsb2c7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUHJvZ3Jlc3NEaWFsb2c7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LkVkaXRhYmxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5JbnB1dFR5cGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRXYXRjaGVyOwogaW1wb3J0IGFuZHJvaWQudGV4dC5tZXRob2QuRGlnaXRzS2V5TGlzdGVuZXI7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRTaW1QdWtWaWV3LmphdmEgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRTaW1QdWtWaWV3LmphdmEKaW5kZXggNmU5ZTgzZS4uODJiNTQ2NyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkU2ltUHVrVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFNpbVB1a1ZpZXcuamF2YQpAQCAtMTcsMTQgKzE3LDEyIEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLmtleWd1YXJkOwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3JTZXQuQnVpbGRlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKIGltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxvZzsKIGltcG9ydCBhbmRyb2lkLmFwcC5EaWFsb2c7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUHJvZ3Jlc3NEaWFsb2c7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnRleHQuRWRpdGFibGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LklucHV0VHlwZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFdhdGNoZXI7CiBpbXBvcnQgYW5kcm9pZC50ZXh0Lm1ldGhvZC5EaWdpdHNLZXlMaXN0ZW5lcjsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFRyYW5zcG9ydENvbnRyb2xWaWV3LmphdmEgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRUcmFuc3BvcnRDb250cm9sVmlldy5qYXZhCmluZGV4IDM0OTA3OGYuLmE3Y2Q5MDkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFRyYW5zcG9ydENvbnRyb2xWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkVHJhbnNwb3J0Q29udHJvbFZpZXcuamF2YQpAQCAtMzIsNyArMzIsNiBAQAogaW1wb3J0IGFuZHJvaWQubWVkaWEuUmVtb3RlQ29udHJvbGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZUZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uQ2hhbmdlQm91bmRzOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkVmlld01hbmFnZXIuamF2YSBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFZpZXdNYW5hZ2VyLmphdmEKaW5kZXggNmFhMGE0Yi4uZjI4NTNjOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkVmlld01hbmFnZXIuamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRWaWV3TWFuYWdlci5qYXZhCkBAIC0xNiwxMyArMTYsMTEgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5rZXlndWFyZDsKIAotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5CaXRtYXBEcmF3YWJsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuSUtleWd1YXJkU2hvd0NhbGxiYWNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldC5Mb2NrUGF0dGVyblV0aWxzOwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwd2lkZ2V0LkFwcFdpZGdldE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRWaWV3TWVkaWF0b3IuamF2YSBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFZpZXdNZWRpYXRvci5qYXZhCmluZGV4IDQwODZmODQuLmUyMjE5ZDQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFZpZXdNZWRpYXRvci5qYXZhCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFZpZXdNZWRpYXRvci5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQua2V5Z3VhcmQ7CiAKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuSUtleWd1YXJkRXhpdENhbGxiYWNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeS5JS2V5Z3VhcmRTaG93Q2FsbGJhY2s7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuU3lzdGVtLlNDUkVFTl9PRkZfVElNRU9VVDsKQEAgLTQ5LDcgKzQ4LDYgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuRXZlbnRMb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyUG9saWN5OwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkVmlld1N0YXRlTWFuYWdlci5qYXZhIGIvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL0tleWd1YXJkVmlld1N0YXRlTWFuYWdlci5qYXZhCmluZGV4IDE2OTg5OWYuLmE3YjcyZTIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9LZXlndWFyZFZpZXdTdGF0ZU1hbmFnZXIuamF2YQorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvS2V5Z3VhcmRWaWV3U3RhdGVNYW5hZ2VyLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvckxpc3RlbmVyQWRhcHRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIAogcHVibGljIGNsYXNzIEtleWd1YXJkVmlld1N0YXRlTWFuYWdlciBpbXBsZW1lbnRzCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvTXVsdGlQYW5lQ2hhbGxlbmdlTGF5b3V0LmphdmEgYi9wYWNrYWdlcy9LZXlndWFyZC9zcmMvY29tL2FuZHJvaWQva2V5Z3VhcmQvTXVsdGlQYW5lQ2hhbGxlbmdlTGF5b3V0LmphdmEKaW5kZXggNGNmYzlkYy4uMzQwYTRkNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvc3JjL2NvbS9hbmRyb2lkL2tleWd1YXJkL011bHRpUGFuZUNoYWxsZW5nZUxheW91dC5qYXZhCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3NyYy9jb20vYW5kcm9pZC9rZXlndWFyZC9NdWx0aVBhbmVDaGFsbGVuZ2VMYXlvdXQuamF2YQpAQCAtMjgsNyArMjgsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuTWVhc3VyZVNwZWM7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OwogCiBwdWJsaWMgY2xhc3MgTXVsdGlQYW5lQ2hhbGxlbmdlTGF5b3V0IGV4dGVuZHMgVmlld0dyb3VwIGltcGxlbWVudHMgQ2hhbGxlbmdlTGF5b3V0IHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwYTVhMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IkRydWt3YWdseXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iRHJ1a2tlcmluc3RlbGxpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iRHJ1ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IlN0b29yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iQmVzdGVtbWluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJBZnNrcmlmdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlBhcGllcmdyb290dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJLbGV1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yacOrbnRhc2llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iQmxhZHN5ZSAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iYnYuIDHigJQ1LDgsMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iRHJ1a3Zvb3Jza291Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJJbnN0YWxsZWVyIFBERi1iZWt5a2VyIHZpciB2b29yc2tvdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iRHJ1a2tlcnByb2dyYW0gaGV0IG9tZ2V2YWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iQmxhZHN5ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVyZWVyIHVpdGRydWt0YWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iU3Rvb3IgYXMgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IkFsbGUgZHJ1a2tlcnPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkRydWtkaWFsb29nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IkRldXJzb2VrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IkFsbGUgZHJ1a2tlcnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJWb2VnIGRpZW5zIGJ5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iU29la2thc3NpZSB2ZXJ0b29uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlNvZWtrYXNzaWUgd2VnZ2VzdGVlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IlZvZWcgZHJ1a2tlciBieSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IktpZXMgZHJ1a2tlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IlZlcmdlZXQgZHJ1a2tlciI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBkcnVra2VyIGdla3J5IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBkcnVra2VycyBnZWtyeSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IktpZXMgZHJ1a2RpZW5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTb2VrIHRhbnMgdmlyIGRydWtrZXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iR2VlbiBkcnVra2VycyBnZWtyeSBuaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJEcnVrIHRhbnMgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkthbnNlbGxlZXIgdGFucyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJEcnVra2VyZm91dCBieSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iRHJ1a2tlciBoZXQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBnZWJsb2trZWVyIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4tdWl0ZHJ1a3RhYWsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+LXVpdGRydWt0YWtlIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkthbnNlbGxlZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IkhlcmJlZ2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkdlZW4gdmVyYmluZGluZyBtZXQgZHJ1a2tlciBuaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJvbmJla2VuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgbmllIGJlc2tpa2JhYXIgbmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IktvbiBuaWUgdWl0ZHJ1a3RhYWsgZ2VuZXJlZXIgbmllIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IlN3YXJ0IGVuIHdpdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJLbGV1ciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3J0cmV0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+IkxhbmRza2FwIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJBbGxlcyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJSZWlrd3lkdGUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjk0ZDZkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4i4Yuo4YiF4Ym14YiY4Ym1IOGKoOGIteGJsOGIi+GIi+GNiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLhi6jhiqDhibPhiJog4YmF4YqV4Yml4Yiu4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4i4Yqg4Ym14YidIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i4Yqg4Yi14YmA4Yid4YylIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4i4YiY4Yu14Yio4Yi7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IuGJheGMguGLjuGJvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4i4Yuo4YuI4Yio4YmA4Ym1IOGImOGMoOGKlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IuGJgOGIiOGInSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IuGKoOGJgOGIm+GImOGMoCDhjIjhjYUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLhjIjhjL7hib0gKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+IuGIiOGIneGIs+GIjOGNpiAx4oCTNSw4LDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IuGLqOGIheGJteGImOGJtSDhiYXhi7XhiJgg4Yql4Yut4YmzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLhiIjhiYXhi7XhiJgt4Yql4Yut4YmzIOGLqOGNkiDhi7Ig4Yqk4Y2NIOGImOGImOGIjeGKqOGJuyDhi63hjKvhipEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IuGLqOGKoOGJs+GImiDhiJjhibDhjI3hiaDhiKrhi6sg4Ymw4Ymg4YiL4Yi94Ym34YiNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IuGMiOGNhuGJvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IuGLqOGIheGJteGImOGJtSDhiLXhiKvhipUg4Ymg4Yib4YiY4YqV4Yyo4Ym1IOGIi+GLrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IuGKpeGKleGLsCDhjZIg4YuyIOGKpOGNjSDhiqDhiLXhiYDhiJ3hjKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i4YiB4YiJ4YidIOGKoOGJs+GImuGLjuGJveKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4i4Yuo4YiF4Ym14YiY4Ym1IOGImOGMiOGKk+GKmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLhjY3hiIjhjIsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i4YiB4YiJ4YidIOGKoOGJs+GImuGLjuGJvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IuGKoOGMiOGIjeGMjeGIjuGJtSDhiqDhiq3hiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLhi6jhjY3hiIjhjIsg4Yiz4Yyl4YqVIOGLreGJs+GLq+GIjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLhi6jhjY3hiIjhjIsg4Yiz4Yyl4YqVIOGJsOGLsOGJpeGJi+GIjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IuGKoOGJs+GImiDhiqDhiq3hiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLhiqDhibPhiJog4Yid4Yio4YylIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4i4Yqg4Ymz4YiaIOGKpeGIreGIsyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDhiqDhibPhiJog4Ymw4YyI4Yqd4Ym34YiNIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDhiqDhibPhiJrhi47hib0g4Ymw4YyI4Yqd4Ymw4YuL4YiNIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4Yuo4YiF4Ym14YiY4Ym1IOGKoOGMiOGIjeGMjeGIjuGJtSDhi63hiJ3hiKjhjKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuGKoOGJs+GImuGLjuGJveGKlSDhiaDhiJjhjYjhiIjhjI0g4YiL4YutIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4i4Yid4YqV4YidIOGKoOGJs+GImuGLjuGJvSDhiqDhiI3hibDhjIjhipnhiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+4YqVIOGJoOGIm+GJsOGInSDhiIvhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+4YqVIOGJoOGImOGJsOGLjSDhiIvhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuGLqOGKoOGJs+GImiDhiLXhiIXhibDhibUgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuGKoOGJs+GImiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+4YqVIOGKoOGMjeGLt+GIjSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IOGLqOGIheGJteGImOGJtSDhiLXhiKsiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IOGLqOGIheGJteGImOGJtSDhiLXhiKvhi47hib0iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i4Yiw4Yit4YudIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLhiqXhipXhi7DhjIjhipMg4YyA4Yid4YitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IuGKqOGKoOGJs+GImiDhjIvhiK0g4Yid4YqV4YidIOGMjeGKleGKmeGKkOGJtSDhi6jhiIjhiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLhiqDhi63hibPhi4jhiYXhiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIOGKoOGLreGMiOGKneGInSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLhi6jhiIXhibXhiJjhibUg4Yi14Yir4YqVIOGIm+GImOGKleGMqOGJtSDhiqDhiI3hibDhibvhiIjhiJ0iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i4Yyl4YmB4YitIOGKpeGKkyDhipDhjK0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i4YmA4YiI4YidIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IuGLqOGJgeGInSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLhi6jhi4jhiK3hi7UiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IuGIgeGIieGInSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLhiJ3hjKXhjKXhipAg4YyI4Yy94YmzIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4M2Y5MwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW50IFNwb29sZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4i2KXYudiv2KfYr9in2Kog2KfZhNi32KfYqNi52KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLYt9io2KfYudipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i2K3Zgdi4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4i2KfZhNmI2KzZh9ipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+Iti52K/YryDYp9mE2YbYs9iuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLYrdis2YUg2KfZhNmI2LHZgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+Itij2YTZiNin2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLYp9mE2KfYqtis2KfZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+Itin2YTYtdmB2K3Yp9iqICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLYudmE2Ykg2LPYqNmK2YQg2KfZhNmF2KvYp9mE2IwgMeKAlDXYjDjYjDEx4oCUMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+ItmF2LnYp9mK2YbYqSDZgtio2YQg2KfZhNi32KjYp9i52KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuKAj9iq2KvYqNmK2Kog2KjYsdmG2KfZhdisINi52LHYtiBQREYg2YTZhNmF2LnYp9mK2YbYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i2KrYudi32ZHZhCDYqti32KjZitmCINin2YTYt9io2KfYudipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+Itin2YTYtdmB2K3Yp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i2KzYp9ix2Y0g2KXZhti02KfYoSDZhdmH2YXYqSDYp9mE2LfYqNin2LnYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IuKAj9it2YHYuCDYqNiq2YbYs9mK2YIgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+Itis2YXZiti5INin2YTYt9in2KjYudin2KrigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+ItmF2LHYqNi5INit2YjYp9ixINin2YTYt9io2KfYudipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+Itio2K3YqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiLYrNmF2YrYuSDYp9mE2LfYp9io2LnYp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i2KXYttin2YHYqSDYrtiv2YXYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+Itiq2YUg2KXYuNmH2KfYsSDZhdix2KjYuSDYp9mE2KjYrdirIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+Itiq2YUg2KXYrtmB2KfYoSDZhdix2KjYuSDYp9mE2KjYrdirIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i2KXYttin2YHYqSDYt9in2KjYudipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4i2K3Yr9ivINin2YTYt9in2KjYudipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4i2KrYrNin2YfZhCDYp9mE2LfYp9io2LnYqSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4i2KrZhSDYp9mE2LnYq9mI2LEg2LnZhNmJIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g2LfYp9io2LnYqSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Itiq2YUg2KfZhNi52KvZiNixINi52YTZiSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+INmF2YYg2KfZhNi32KfYqNi52KfYqiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+Itin2K7YqtixINiu2K/ZhdipINi32KjYp9i52KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Itin2YTYqNit2Ksg2LnZhiDYt9in2KjYudin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLZhNmFINmK2KrZhSDYp9mE2LnYq9mI2LEg2LnZhNmJINi32KfYqNi52KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+Itis2KfYsdmNINi32KjYp9i52KkgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Itis2KfYsdmNINil2YTYutin2KEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i2K7Yt9inINmB2Yog2KfZhNi32KfYqNi52KkgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+Itix2YHYttiqINin2YTYt9in2KjYudipIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiDZhdmH2YXYqSDYt9io2KfYudipIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiDZhdmGINmF2YfYp9mFINin2YTYt9io2KfYudipIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+Itil2YTYutin2KEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+Itil2LnYp9iv2Kkg2KrYtNi62YrZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLZhNinINmK2YjYrNivINin2KrYtdin2YQg2KjYp9mE2LfYp9io2LnYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+Iti62YrYsSDZhdi52LHZiNmBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyDYutmK2LEg2YXYqtin2K3YqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLYqti52LDYsSDYpdmG2LTYp9ihINi52YXZhNmK2Kkg2KfZhNi32KjYp9i52KkiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i2KPYqNmK2LYg2YjYo9iz2YjYryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLZhdmE2YjZhtipIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+Iti52YXZiNiv2YoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4i2KPZgdmC2YoiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+Itin2YTZg9mEIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+Itin2YTZhti32KfZgiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iZS9hcnJheXMueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYmUvYXJyYXlzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQwMjc4Yy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iZS9hcnJheXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxyZXNvdXJjZXM+Ci0KLSAgICA8c3RyaW5nLWFycmF5IG5hbWU9InBkZl9wcmludGVyX21lZGlhX3NpemVzIiB0cmFuc2xhdGFibGU9ImZhbHNlIj4KLSAgICAgICAgPGl0ZW0+TkFfTEVUVEVSPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9HT1ZUX0xFVFRFUjwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfTEVHQUw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0pVTklPUl9MRUdBTDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfTEVER0VSPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9UQUJMT0lEPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9JTkRFWF8zWDU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0lOREVYXzRYNjwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfSU5ERVhfNVg4PC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9NT05BUkNIPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9RVUFSVE88L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0ZPT0xTQ0FQPC9pdGVtPgotICAgIDwvc3RyaW5nLWFycmF5PgotCi08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWJlL2Rvbm90dHJhbnNsYXRlLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWJlL2Rvbm90dHJhbnNsYXRlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUzN2FhNS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iZS9kb25vdHRyYW5zbGF0ZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08cmVzb3VyY2VzPgotCi0gICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfZGVmYXVsdCI+TkFfTEVUVEVSPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfc3RhbmRhcmQiPkBzdHJpbmcvbWVkaWFzaXplX3N0YW5kYXJkX25vcnRoX2FtZXJpY2E8L3N0cmluZz4KLQotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMDlhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiLQodC/0YPQu9C10YAg0LfQsCDQv9C10YfQsNGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+ItCd0LDRgdGC0YDQvtC50LrQuCDQvdCwINC/0YDQuNC90YLQtdGA0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLQn9C10YfQsNGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i0JfQsNC/0LDQt9Cy0LDQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4i0JzQtdGB0YLQvtC90LDQt9C90LDRh9C10L3QuNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+ItCa0L7Qv9C40Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+ItCg0LDQt9C80LXRgCDQvdCwINGF0LDRgNGC0LjRj9GC0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLQptCy0Y/RgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+ItCe0YDQuNC10L3RgtCw0YbQuNGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i0KHRgtGA0LDQvdC40YbQuCAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i0L3QsNC/0YAuIDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLQktC40LfRg9Cw0LvQuNC30LDRhtC40Y8g0LfQsCDQv9C10YfQsNGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLQmNC90YHRgtCw0LvQuNGA0LDQvdC1INC90LAg0LLQuNC30YPQsNC70LjQt9Cw0YLQvtGAINC90LAgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLQn9C+0LvRg9GH0Lgg0YHQtSDRgdGA0LjQsiDQsiDQv9GA0LjQu9C+0LbQtdC90LjQtdGC0L4g0LfQsCDQvtGC0L/QtdGH0LDRgtCy0LDQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+ItCh0YLRgNCw0L3QuNGG0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLQl9Cw0LTQsNC90LjQtdGC0L4g0LfQsCDQv9C10YfQsNGCINGB0LUg0LPQtdC90LXRgNC40YDQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+ItCX0LDQv9Cw0LfQstCw0L3QtSDQutCw0YLQviBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i0JLRgdC40YfQutC4INC/0YDQuNC90YLQtdGA0LjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+ItCU0LjQsNC70L7Qs9C+0LIg0L/RgNC+0LfQvtGA0LXRhiDQt9CwINC+0YLQv9C10YfQsNGC0LLQsNC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4i0KLRitGA0YHQtdC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i0JLRgdC40YfQutC4INC/0YDQuNC90YLQtdGA0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0YPRgdC70YPQs9CwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4i0J/QvtC70LXRgtC+INC30LAg0YLRitGA0YHQtdC90LUg0LUg0L/QvtC60LDQt9Cw0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLQn9C+0LvQtdGC0L4g0LfQsCDRgtGK0YDRgdC10L3QtSDQtSDRgdC60YDQuNGC0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0L/RgNC40L3RgtC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLQmNC30LHQuNGA0LDQvdC1INC90LAg0L/RgNC40L3RgtC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLQl9Cw0LHRgNCw0LLRj9C90LUg0L3QsCDQv9GA0LjQvdGC0LXRgNCwIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiLQndCw0LzQtdGA0LXQvSDQtSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+INC/0YDQuNC90YLQtdGAIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4i0J3QsNC80LXRgNC10L3QuCDRgdCwIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g0L/RgNC40L3RgtC10YDQsCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+ItCY0LfQsdC40YDQsNC90LUg0L3QsCDRg9GB0LvRg9Cz0LAg0LfQsCDQvtGC0L/QtdGH0LDRgtCy0LDQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLQotGK0YDRgdGP0YIg0YHQtSDQv9GA0LjQvdGC0LXRgNC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4i0J3Rj9C80LAg0L3QsNC80LXRgNC10L3QuCDQv9GA0LjQvdGC0LXRgNC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4i4oCePHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPuKAnCDRgdC1INC+0YLQv9C10YfQsNGC0LLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IuKAnjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwg0YHQtSDQsNC90YPQu9C40YDQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i0JPRgNC10YjQutCwINCyINC/0YDQuNC90YLQtdGA0LAg0L/RgNC4IOKAnjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLQn9GA0LjQvdGC0LXRgNGK0YIg0LHQu9C+0LrQuNGA0LAg0L/RgNC4IOKAnjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4i0JfQsNC00LDQvdC40LUg0LfQsCDQvtGC0L/QtdGH0LDRgtCy0LDQvdC1OiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4i0JfQsNC00LDQvdC40Y8g0LfQsCDQvtGC0L/QtdGH0LDRgtCy0LDQvdC1OiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+ItCe0YLQutCw0LciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+ItCg0LXRgdGC0LDRgNGC0LjRgNCw0L3QtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLQndGP0LzQsCDQstGA0YrQt9C60LAg0YEg0L/RgNC40L3RgtC10YDQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+ItC90Y/QvNCwINC00LDQvdC90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTINC90LUg0LUg0L3QsNC70LjRhtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+ItCX0LDQtNCw0L3QuNC10YLQviDQt9CwINC+0YLQv9C10YfQsNGC0LLQsNC90LUg0L3QtSDQvNC+0LbQsCDQtNCwINGB0LUg0LPQtdC90LXRgNC40YDQsCI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLQp9C10YDQvdC+LdCx0Y/Qu9C+IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+ItCm0LLQtdGC0L3QviI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLQktC10YDRgtC40LrQsNC70L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLQpdC+0YDQuNC30L7QvdGC0LDQu9C90L4iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+ItCS0YHQuNGH0LrQuCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLQn9C+0YDQtdC00LjRhtCwIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWNhL2FycmF5cy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1jYS9hcnJheXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDAyNzhjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWNhL2FycmF5cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHJlc291cmNlcz4KLQotICAgIDxzdHJpbmctYXJyYXkgbmFtZT0icGRmX3ByaW50ZXJfbWVkaWFfc2l6ZXMiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPgotICAgICAgICA8aXRlbT5OQV9MRVRURVI8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0dPVlRfTEVUVEVSPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9MRUdBTDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfSlVOSU9SX0xFR0FMPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9MRURHRVI8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX1RBQkxPSUQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0lOREVYXzNYNTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfSU5ERVhfNFg2PC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9JTkRFWF81WDg8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX01PTkFSQ0g8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX1FVQVJUTzwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfRk9PTFNDQVA8L2l0ZW0+Ci0gICAgPC9zdHJpbmctYXJyYXk+Ci0KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDI5ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iR2VzdC4gY3VlcyBpbXByLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJDb25maWd1cmFjacOzIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJJbXByaW1laXgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJEZXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iRGVzdGluYWNpw7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iQ8OycGllcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iTWlkYSBkZWwgcGFwZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJDb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGFjacOzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iUMOgZ2luZXMgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+InAuIGV4LiAxLTUsIDgsIDExLTEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJWaXN1YWxpdHphY2nDsyBwcsOodmlhIGltcHJlc3Npw7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbMK3bGEgdW4gbGVjdG9yIGRlIFBERiBwZXIgYSB2aXN1YWxpdHouIHByw6h2aWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IkxcJ2FwbGljYWNpw7MgZFwnaW1wcmVzc2nDsyBoYSBmYWxsYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iUMOgZ2luZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHZW5lcmFudCB0YXNjYSBpbXByZXNzacOzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iRGVzYSBjb20gYSBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iVG90ZXMgbGVzIGltcHJlc3NvcmVz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJEacOgbGVnIGRcJ2ltcHJlc3Npw7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iQ2VyY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iVG90ZXMgbGVzIGltcHJlc3NvcmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iQWZlZ2VpeCB1biBzZXJ2ZWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJFcyBtb3N0cmEgZWwgcXVhZHJlIGRlIGNlcmNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlNcJ2hhIGFtYWdhdCBlbCBxdWFkcmUgZGUgY2VyY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJBZmVnZWl4IHVuYSBpbXByZXNzb3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iU2VsZWNjaW9uYSB1bmEgaW1wcmVzc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Ik9ibGlkYSBsYSBpbXByZXNzb3JhIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiJTXCdoYSB0cm9iYXQgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBpbXByZXNzb3JhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iU1wnaGFuIHRyb2JhdCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGltcHJlc3NvcmVzIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iU2VsZWNjacOzIGRlbCBzZXJ2ZWkgZFwnaW1wcmVzc2nDsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iQ2VyY2EgZFwnaW1wcmVzc29yZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJObyBzXCdoYSB0cm9iYXQgY2FwIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJTXCdlc3TDoCBpbXByaW1pbnQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IlNcJ2VzdMOgIGNhbmNlbMK3bGFudCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJFcnJvciBkXCdpbXByZXNzb3JhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJJbXByZXNzb3JhIGJsb3F1ZWphZGEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJUYXNjYSBkXCdpbXByZXNzacOzIHBlciBhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJUYXNxdWVzIGRcJ2ltcHJlc3Npw7MgcGVyIGEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJDYW5jZWzCt2xhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJSZWluaWNpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJObyBoaSBoYSBjb25uZXhpw7MgYW1iIGxhIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJkZXNjb25lZ3V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+OiBubyBkaXNwb25pYmxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+Ik5vIHNcJ2hhIHBvZ3V0IGdlbmVyYXIgbGEgdGFzY2EgZFwnaW1wcmVzc2nDsyI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJCbGFuYyBpIG5lZ3JlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IkNvbG9yIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IlZlcnRpY2FsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Ikhvcml0em9udGFsIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJUb3RzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IkludGVydmFsIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RkYzcwMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW50IFNwb29sZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iTmFzdGF2ZW7DrSB0aXNrw6FybnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJUaXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iVWxvxb5pdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkPDrWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iS29waWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlZlbGlrb3N0IHBhcMOtcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJCYXJ2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGFjZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlNUUsOBTktZICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJuYXDFmS4gMeKAkzUsIDgsIDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+Ik7DoWhsZWQgdGlza3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ik5haW5zdGFsb3ZhdCBwcm9obMOtxb5lxI0gUERGICh1bW/Fvm7DrSBuw6FobGVkKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iQXBsaWthY2UgdGlza3Ugc2VsaGFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJTdHLDoW5reSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVyb3bDoW7DrSDDumxvaHkgdGlza3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJVbG/Fvml0IHZlIGZvcm3DoXR1IFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJWxaFlY2hueSB0aXNrw6FybnnigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkRpYWxvZyB0aXNrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJIbGVkYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iVsWhZWNobnkgdGlza8Ohcm55Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iUMWZaWRhdCBzbHXFvmJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iVnlobGVkw6F2YWPDrSBwb2xlIHNlIHpvYnJhenVqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJWeWhsZWTDoXZhY8OtIHBvbGUgamUgc2tyeXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iUMWZaWRhdCB0aXNrw6FybnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJWeWJyYXQgdGlza8Ohcm51Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iT2RzdHJhbml0IHRpc2vDoXJudSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iUG/EjWV0IG5hbGV6ZW7DvWNoIHRpc2vDoXJlbjogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+IlBvxI1ldCBuYWxlemVuw71jaCB0aXNrw6FyZW46IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJadm9sdGUgc2x1xb5idSB0aXNrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iVnlobGVkw6F2w6Fuw60gdGlza8OhcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTmVieWx5IG5hbGV6ZW55IMW+w6FkbsOpIHRpc2vDoXJueSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IlRpc2sgw7psb2h5IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJSdcWhZW7DrSDDumxvaHkgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iQ2h5YmEgdGlza8Ohcm55IHUgw7psb2h5IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJUaXNrw6FybmEgYmxva3VqZSDDumxvaHUgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJQb8SNZXQgdGlza292w71jaCDDumxvaDogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IlBvxI1ldCB0aXNrb3bDvWNoIMO6bG9oOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IlpydcWhaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlc3RhcnRvdmF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Ik5lbHplIHNlIHDFmWlwb2ppdCBrIHRpc2vDoXJuxJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJuZXpuw6Ftw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIG5lbsOtIGsgZGlzcG96aWNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IlRpc2tvdm91IMO6bG9odSBuZWx6ZSB2eXR2b8WZaXQiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4ixIxlcm5vYsOtbGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iQmFyZXZuxJsiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iTmEgdsO9xaFrdSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJOYSDFocOtxZlrdSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVsWhZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJSb3pzYWgiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDE5MGI0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iUHJpbnQgU3Bvb2xlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJQcmludGVyaW5kc3RpbGxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IlVkc2tyaXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJHZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJEZXN0aW5hdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJLb3BpZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlBhcGlyc3TDuHJyZWxzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IkZhcnZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iUmV0bmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlNpZGVyICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJmLmVrcy4gMS01LDgsMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlZpcyB1ZHNrcmlmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iSW5zdGFsbGVyIGV0IFBERi12aXNuaW5nc3Byb2cuIGZvciBhdCBzZSBla3NlbXBlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iVWRza3Jpdm5pbmdzYXBwIGdpayBuZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iU2lkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJVZHNrcmlmdGVuIGdlbmVyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJHZW0gc29tIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJBbGxlIHByaW50ZXJlLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJVZHNrcmlmdHNkaWFsb2ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iU8O4ZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJBbGxlIHByaW50ZXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iVGlsZsO4aiB0amVuZXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IlPDuGdlZmVsdGV0IHZpc2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlPDuGdlZmVsdGV0IGVyIHNranVsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IlRpbGbDuGogcHJpbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IlbDpmxnIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJHbGVtIHByaW50ZXIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IkRlciBibGV2IGZ1bmRldCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXIiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiJEZXIgYmxldiBmdW5kZXQgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBwcmludGVyZSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlbDpmxnIHVkc2tyaWZ0c3RqZW5lc3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTw7hnZXIgZWZ0ZXIgcHJpbnRlcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJEZXIgYmxldiBpa2tlIGZ1bmRldCBub2dlbiBwcmludGVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gdWRza3JpdmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBhbm51bGxlcmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJVZHNrcmlmdGVuIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gbWlzbHlra2VkZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGVyZW4gaGFyIGJsb2tlcmV0IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPi11ZHNrcmlmdHNqb2IiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+LXVkc2tyaWZ0c2pvYnMiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQW5udWxsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IkdlbnN0YXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkluZ2VuIGZvcmJpbmRlbHNlIHRpbCBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4idWtlbmR0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBpa2tlIHRpbGfDpm5nZWxpZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJEZXIga3VubmUgaWtrZSBnZW5lcmVyZXMgZXQgdWRza3JpZnRzam9iIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IlNvcnQvaHZpZCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJGYXJ2ZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3J0csOmdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJMYW5kc2thYiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iQWxsZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJJbnRlcnZhbCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiODNhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJEcnVjay1TcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IkRydWNrZXJlaW5zdGVsbHVuZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iRHJ1Y2tlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IlNwZWljaGVybiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IlppZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iRXhlbXBsYXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJQYXBpZXJncsO2w59lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iRmFyYmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiJBdXNyaWNodHVuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlNlaXRlbiAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iei7CoEIuIDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJWb3JzY2hhdSBkcnVja2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJQREYtVmlld2VyIGbDvHIgVm9yc2NoYXUgaW5zdGFsbGllcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJEcnVjay1BcHAgYWJnZXN0w7xyenQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iU2VpdGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iRHJ1Y2thdWZ0cmFnIHdpcmQgZ2VuZXJpZXJ0Li4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iQWxzIFBERiBzcGVpY2hlcm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iQWxsZSBEcnVja2Vy4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJEcnVja2RpYWxvZ2ZlbGQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iU3VjaGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IkFsbGUgRHJ1Y2tlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IkRpZW5zdCBoaW56dWbDvGdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IlN1Y2hmZWxkIGFuZ2V6ZWlndCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJTdWNoZmVsZCBhdXNnZWJsZW5kZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJEcnVja2VyIGhpbnp1ZsO8Z2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iRHJ1Y2tlciBhdXN3w6RobGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iRHJ1Y2tlciB3aWVkZXIgdmVyZ2Vzc2VuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IERydWNrZXIgZ2VmdW5kZW4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IERydWNrZXIgZ2VmdW5kZW4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJEcnVja2RpZW5zdCBhdXN3w6RobGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTdWNoZSBuYWNoIERydWNrZXJuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iS2VpbmUgRHJ1Y2tlciBnZWZ1bmRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gd2lyZCBnZWRydWNrdC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gd2lyZCBhYmdlYnJvY2hlbi4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iRHJ1Y2tlcmZlaGxlciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iRHJ1Y2tlciBoYXQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBibG9ja2llcnQuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IkRydWNrYXVmdHJhZyBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz5cIiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IkRydWNrYXVmdHLDpGdlIFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPlwiIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkFiYnJlY2hlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iTmV1IHN0YXJ0ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iS2VpbmUgVmVyYmluZHVuZyB6dW0gRHJ1Y2tlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+InVuYmVrYW5udCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgbmljaHQgdmVyZsO8Z2JhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJEcnVja2F1ZnRyYWcga29ubnRlIG5pY2h0IGdlbmVyaWVydCB3ZXJkZW4uIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IlNjaHdhcnotd2Vpw58iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iRmFyYmUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iSG9jaGZvcm1hdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJRdWVyZm9ybWF0IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJBbGxlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IkJlcmVpY2giPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTVlNzMwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4izpvOv86zzrnPg868zrnOus+MIM6/z4XPgc6sz4IgzrXOus+Ez43PgM+Jz4POt8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+Is6hz4XOuM68zq/Pg861zrnPgiDOtc66z4TPhc+Az4nPhM6uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4izpXOus+Ez43PgM+Jz4POtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+Is6Rz4DOv864zq7Ous61z4XPg863Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4izqDPgc6/zr/Pgc65z4POvM+Mz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4izpHOvc+Ezq/Os8+BzrHPhs6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLOnM6tzrPOtc64zr/PgiDPh86xz4HPhM65zr/PjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+Is6nz4HPjs68zrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLOoM+Bzr/Pg86xzr3Osc+Ezr/Ou865z4POvM+Mz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLOo861zrvOr860zrXPgiAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iz4Auz4cuIDEtNSw4LDExLTEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLOoM+Bzr/Otc+AzrnPg866z4zPgM63z4POtyDOtc66z4TPjc+Az4nPg863z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Is6VzrPOus6xz4TOsc+Dz4TOrs+Dz4TOtSDPhM6/IFBERiB2aWV3ZXIgzrPOuc6xIM+Az4HOv861z4DOuc+DzrrPjM+AzrfPg863Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLOlM65zrHOus6/z4DOriDOu861zrnPhM6/z4XPgc6zzq/Osc+CIM61z4bOsc+BzrzOv86zzq7PgiDOtc66z4TPjc+Az4nPg863z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4izqPOtc67zq/OtM61z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLOlM63zrzOuc6/z4XPgc6zzq/OsSDOtc+BzrPOsc+Dzq/Osc+CIM61zrrPhM+Nz4DPic+DzrfPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+Is6Rz4DOv864zq7Ous61z4XPg863IM+Jz4IgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+Is6MzrvOv865IM6/zrkgzrXOus+Ez4XPgM+Jz4TOrc+C4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiLOoM67zrHOr8+DzrnOvyDOtM65zrHOu8+MzrPOv8+FIM61zrrPhM+Nz4DPic+DzrfPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLOkc69zrHOts6uz4TOt8+DzrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4izozOu86/zrkgzr/OuSDOtc66z4TPhc+Az4nPhM6tz4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiLOoM+Bzr/Pg864zq7Ous63IM+Fz4DOt8+BzrXPg86vzrHPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+Is6VzrzPhs6szr3Ouc+Dzrcgz4DOu86xzrnPg86vzr/PhSDOsc69zrHOts6uz4TOt8+DzrfPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLOkc+Az4zOus+Bz4XPiM63IM+AzrvOsc65z4POr86/z4UgzrHOvc6xzrbOrs+EzrfPg863z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLOoM+Bzr/Pg864zq7Ous63IM61zrrPhM+Fz4DPic+Ezq4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLOlc+AzrnOu86/zrPOriDOtc66z4TPhc+Az4nPhM6uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4izpTOuc6xzrPPgc6xz4bOriDOtc66z4TPhc+Az4nPhM6uIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiLOks+Bzq3OuM63zrrOtSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IM61zrrPhM+Fz4DPic+Ezq7PgiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Is6Sz4HOrc64zrfOus6xzr0gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDOtc66z4TPhc+Az4nPhM6tz4IiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLOlc+AzrnOu86tzr7PhM61IM+Fz4DOt8+BzrXPg86vzrEgzrXOus+Ez43PgM+Jz4POt8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLOkc69zrHOts6uz4TOt8+DzrcgzrPOuc6xIM61zrrPhM+Fz4DPic+Ezq3PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Is6UzrXOvSDOss+Bzq3OuM63zrrOsc69IM61zrrPhM+Fz4DPic+Ezq3PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+Is6VzrrPhM+Nz4DPic+DzrcgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Is6RzrrPjc+Bz4nPg863IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Is6jz4bOrM67zrzOsSDOtc66z4TPhc+Az4nPhM6uIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLOnyDOtc66z4TPhc+Az4nPhM6uz4IgzrHPgM6tzrrOu861zrnPg861IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4izrXPgc6zzrHPg86vzrEgzrXOus+Ez43PgM+Jz4POt8+CIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiLOtc+BzrPOsc+Dzq/Otc+CIM61zrrPhM+Nz4DPic+DzrfPgiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+Is6RzrrPjc+Bz4nPg863Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLOlc+AzrHOvc61zrrOus6vzr3Ot8+DzrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4izpTOtc69IM+Fz4DOrM+Bz4fOtc65IM+Dz43Ovc60zrXPg863IM68zrUgzrXOus+Ez4XPgM+Jz4TOriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+Is6szrPOvc+Jz4PPhM6/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyDOvM63IM60zrnOsc64zq3Pg865zrzOvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLOlM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM60zrfOvM65zr/Phc+BzrPOr86xIM61z4HOs86xz4POr86xz4IgzrXOus+Ez43PgM+Jz4POt8+CIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+Is6Rz4PPgM+Bz4zOvM6xz4XPgc6/IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+Is6nz4HPjs68zrEiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4izqDOv8+Bz4TPgc6xzq/PhM6/IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Is6fz4HOuc62z4zOvc+EzrnOsSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4izozOu86xIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+Is6Vz43Pgc6/z4IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MzcyZjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iUHJpbnQgU3Bvb2xlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJQcmludGVyIHNldHRpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iUHJpbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJTYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iRGVzdGluYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iQ29waWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJQYXBlciBTaXplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iQ29sb3VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJQYWdlcyAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iZS5nLiAx4oCTNSw4LDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlByaW50IHByZXZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbGwgUERGIHZpZXdlciBmb3IgcHJldmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iUHJpbnRpbmcgYXBwIGNyYXNoZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iUGFnZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHZW5lcmF0aW5nIHByaW50IGpvYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlNhdmUgYXMgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IkFsbCBwcmludGVyc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iUHJpbnQgZGlhbG9ndWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iU2VhcmNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IkFsbCBwcmludGVycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IkFkZCBzZXJ2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iU2VhcmNoIGJveCBzaG93biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJTZWFyY2ggYm94IGhpZGRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkFkZCBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iU2VsZWN0IHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJGb3JnZXQgcHJpbnRlciI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBwcmludGVyIGZvdW5kIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBwcmludGVycyBmb3VuZCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkNob29zZSBwcmludCBzZXJ2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTZWFyY2hpbmcgZm9yIHByaW50ZXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTm8gcHJpbnRlcnMgZm91bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJQcmludGluZyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQ2FuY2VsbGluZyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJQcmludGVyIGVycm9yIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGVyIGJsb2NrZWQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IHByaW50IGpvYiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4gcHJpbnQgam9icyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJDYW5jZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlc3RhcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iTm8gY29ubmVjdGlvbiB0byBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4idW5rbm93biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgdW5hdmFpbGFibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iQ291bGRuXCd0IGdlbmVyYXRlIHByaW50IGpvYiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJCbGFjayAmYW1wOyBXaGl0ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJDb2xvdXIiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUG9ydHJhaXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iTGFuZHNjYXBlIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJBbGwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iUmFuZ2UiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MzcyZjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iUHJpbnQgU3Bvb2xlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJQcmludGVyIHNldHRpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iUHJpbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJTYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iRGVzdGluYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iQ29waWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJQYXBlciBTaXplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iQ29sb3VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJQYWdlcyAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iZS5nLiAx4oCTNSw4LDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlByaW50IHByZXZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbGwgUERGIHZpZXdlciBmb3IgcHJldmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iUHJpbnRpbmcgYXBwIGNyYXNoZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iUGFnZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHZW5lcmF0aW5nIHByaW50IGpvYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlNhdmUgYXMgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IkFsbCBwcmludGVyc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iUHJpbnQgZGlhbG9ndWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iU2VhcmNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IkFsbCBwcmludGVycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IkFkZCBzZXJ2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iU2VhcmNoIGJveCBzaG93biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJTZWFyY2ggYm94IGhpZGRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkFkZCBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iU2VsZWN0IHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJGb3JnZXQgcHJpbnRlciI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBwcmludGVyIGZvdW5kIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBwcmludGVycyBmb3VuZCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkNob29zZSBwcmludCBzZXJ2aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTZWFyY2hpbmcgZm9yIHByaW50ZXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTm8gcHJpbnRlcnMgZm91bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJQcmludGluZyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQ2FuY2VsbGluZyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJQcmludGVyIGVycm9yIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGVyIGJsb2NrZWQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IHByaW50IGpvYiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4gcHJpbnQgam9icyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJDYW5jZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlc3RhcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iTm8gY29ubmVjdGlvbiB0byBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4idW5rbm93biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgdW5hdmFpbGFibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iQ291bGRuXCd0IGdlbmVyYXRlIHByaW50IGpvYiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJCbGFjayAmYW1wOyBXaGl0ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJDb2xvdXIiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUG9ydHJhaXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iTGFuZHNjYXBlIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJBbGwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iUmFuZ2UiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXMtclVTL2FycmF5cy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy1yVVMvYXJyYXlzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQwMjc4Yy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy1yVVMvYXJyYXlzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08cmVzb3VyY2VzPgotCi0gICAgPHN0cmluZy1hcnJheSBuYW1lPSJwZGZfcHJpbnRlcl9tZWRpYV9zaXplcyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+Ci0gICAgICAgIDxpdGVtPk5BX0xFVFRFUjwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfR09WVF9MRVRURVI8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0xFR0FMPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9KVU5JT1JfTEVHQUw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0xFREdFUjwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfVEFCTE9JRDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfSU5ERVhfM1g1PC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9JTkRFWF80WDY8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk5BX0lOREVYXzVYODwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfTU9OQVJDSDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TkFfUVVBUlRPPC9pdGVtPgotICAgICAgICA8aXRlbT5OQV9GT09MU0NBUDwvaXRlbT4KLSAgICA8L3N0cmluZy1hcnJheT4KLQotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdkMTJhZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJDb2xhIGRlIGltcHJlc2nDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iQ29uZmlnLiBkZSBpbXByZXNvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJJbXByaW1pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+Ikd1YXJkYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJEZXN0aW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IkNvcGlhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iVGFtYcOxbyBkZWwgcGFwZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJDb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGFjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlDDoWdpbmFzICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJFai46IDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlZpc3RhIHByZXZpYSBkZSBpbXByZXNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJJbnN0YWxhciB2aXN1YWxpemFkb3IgZGUgUERGIHBhcmEgdmlzdGEgcHJldmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJMYSBhcGxpY2FjacOzbiBkZSBpbXByZXNpw7NuIGZhbGzDsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJQw6FnaW5hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVyYW5kbyB0cmFiYWpvIGRlIGltcHJlc2nDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJHdWFyZGFyIGNvbW8gUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlRvZGFzIGxhcyBpbXByZXNvcmFz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJDdWFkcm8gZGUgZGnDoWxvZ28gZGUgaW1wcmVzacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJCdXNjYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iVG9kYXMgbGFzIGltcHJlc29yYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJBZ3JlZ2FyIHNlcnZpY2lvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iQ3VhZHJvIGRlIGLDunNxdWVkYSB2aXNpYmxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IkN1YWRybyBkZSBiw7pzcXVlZGEgb2N1bHRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iQWdyZWdhciBpbXByZXNvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJTZWxlY2Npb25hciBpbXByZXNvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJObyByZWNvcmRhciBpbXByZXNvcmEiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IlNlIGVuY29udHLDsyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGltcHJlc29yYS4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiJTZSBlbmNvbnRyYXJvbiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGltcHJlc29yYXMuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iRWxlZ2lyIHNlcnZpY2lvIGRlIGltcHJlc2nDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IkJ1c2NhbmRvIGltcHJlc29yYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJObyBzZSBlbmNvbnRyYXJvbiBpbXByZXNvcmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iSW1wcmltaWVuZG8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkNhbmNlbGFuZG8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iRXJyb3IgZGUgaW1wcmVzb3JhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJMYSBpbXByZXNvcmEgYmxvcXVlw7MgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iVHJhYmFqbyBkZSBpbXByZXNpw7NuIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJUcmFiYWpvcyBkZSBpbXByZXNpw7NuIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQ2FuY2VsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlaW5pY2lhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJObyBoYXkgY29uZXhpw7NuIGNvbiBsYSBpbXByZXNvcmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4iZGVzY29ub2NpZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz46IG5vIGRpc3BvbmlibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iRXJyb3IgYWwgZ2VuZXJhciBlbCB0cmFiYWpvIGRlIGltcHJlc2nDs24iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iQmxhbmNvIHkgbmVncm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iQ29sb3IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iVmVydGljYWwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iSG9yaXpvbnRhbCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVG9kYXMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iSW50ZXJ2YWxvIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyNWNhZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IkNvbGEgZGUgaW1wcmVzacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJBanVzdGVzIGRlIGltcHJlc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IkltcHJpbWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iR3VhcmRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkRlc3Rpbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iQ29waWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJUYW1hw7FvIGRlbCBwYXBlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IkNvbG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YWNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iUMOhZ2luYXMgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+InAuIGVqLjogMS01LCA4LCAxMS0xMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iVmlzdGEgcHJldmlhIGRlIGltcHJlc2nDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbGFyIHZpc29yIFBERiBwYXJhIG9idGVuZXIgdmlzdGEgcHJldmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJFcnJvciBkZSBhcGxpY2FjacOzbiBkZSBpbXByZXNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlDDoWdpbmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iR2VuZXJhbmRvIHRyYWJham8gZGUgaW1wcmVzacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+Ikd1YXJkYXIgY29tbyBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iVG9kYXMgbGFzIGltcHJlc29yYXPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkN1YWRybyBkZSBkacOhbG9nbyBkZSBpbXByZXNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IkJ1c2NhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJUb2RhcyBsYXMgaW1wcmVzb3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IkHDsWFkaXIgc2VydmljaW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJDdWFkcm8gZGUgYsO6c3F1ZWRhIHZpc2libGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iQ3VhZHJvIGRlIGLDunNxdWVkYSBvY3VsdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJBw7FhZGlyIGltcHJlc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IlNlbGVjY2lvbmFyIGltcHJlc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IkJvcnJhciBpbXByZXNvcmEiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IlNlIGhhIGVuY29udHJhZG8gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBpbXByZXNvcmEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiJTZSBoYW4gZW5jb250cmFkbyA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGltcHJlc29yYXMiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJTZWxlY2Npb25hciBzZXJ2aWNpbyBkZSBpbXByZXNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJCdXNjYW5kbyBpbXByZXNvcmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTm8gc2UgZW5jb250cmFyb24gaW1wcmVzb3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IkltcHJpbWllbmRvIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJDYW5jZWxhbmRvIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkVycm9yIGRlIGltcHJlc29yYSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iTGEgaW1wcmVzb3JhIGhhIGJsb3F1ZWFkbyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IlRyYWJham8gZGUgaW1wcmVzacOzbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iVHJhYmFqb3MgZGUgaW1wcmVzacOzbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkNhbmNlbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJWb2x2ZXIgYSBlbXBlemFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Ik5vIGhheSBjb25leGnDs24gY29uIGxhIGltcHJlc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+ImRlc2Nvbm9jaWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBubyBkaXNwb25pYmxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IkVycm9yIGFsIGdlbmVyYXIgZWwgdHJhYmFqbyBkZSBpbXByZXNpw7NuIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IkJsYW5jbyB5IG5lZ3JvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IkNvbG9yIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IlZlcnRpY2FsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Ikhvcml6b250YWwiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IlRvZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iSW50ZXJ2YWxvIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjNiMzUyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW5kaXNwdXVsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iUHJpbnRlcmkgc2VhZGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iUHJpbmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iU2FsdmVzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJTaWh0a29odCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJLb29waWFpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iUGFiZXJpZm9ybWFhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IlbDpHJ2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iU3V1bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJMZWh0aSAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4ibnQgMeKAkzUsIDgsIDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlByaW5kaSBlZWx2YWFkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iUERGLXZhYXR1cmkgaW5zdGFsbGltaW5lIGVlbHZhYXRlIGt1dmFtaXNla3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IlByaW50aW1pc3Jha2VuZHVzIGpvb2tzaXMga29ra3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iTGVoZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJQcmluZGl0w7bDtiBsb29taW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iU2FsdmVzdGEgUERGLWluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJLw7VpayBwcmludGVyaWQg4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJQcmludGltaXNkaWFsb29nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+Ik90c2luZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJLw7VpayBwcmludGVyaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJMaXNhIHRlZW51cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+Ik90c2luZ3VrYXN0IG9uIGt1dmF0dWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iT3RzaW5ndWthc3Qgb24gcGVpZGV0dWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJMaXNhIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJQcmludGVyaSB2YWxpbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IlByaW50ZXJpIHVudXN0YW1pbmUiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IkxlaXRpIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlciI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+IkxlaXRpIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlcml0IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iUHJpbmRpdGVlbnVzZSB2YWxpbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUHJpbnRlcml0ZSBvdHNpbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IlByaW50ZXJlaWQgZWkgbGVpdHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iUHJpbmRpdMO2w7YgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBwcmludGltaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iUHJpbmRpdMO2w7YgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiB0w7xoaXN0YW1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlByaW50ZXJpIHZpZ2E6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGVyIGJsb2tlZXJpcyB0w7bDtiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IlByaW5kaXTDtsO2IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJQcmluZGl0w7bDtmQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJUw7xoaXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iVGFhc2vDpGl2aXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IlByaW50ZXJpw7xoZW5kdXMgcHV1ZHViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4idGVhZG1hdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIHBvbGUgc2FhZGF2YWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iUHJpbmRpdMO2w7ZkIGVpIHNhYW51ZCBsdXVhIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+Ik11c3R2YWxnZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJWw6RydiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJWZXJ0aWthYWxwYWlndXR1cyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJIb3Jpc29udGFhbHBhaWd1dHVzIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJLw7VpayI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJWYWhlbWlrIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliYWUzMjMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiLZh9mF2KfZh9mG2q/igIzaqdmG2YbYr9mHINqG2KfZviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLYqtmG2LjbjNmF2KfYqiDahtin2b7ar9ixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4i2obYp9m+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i2LDYrtuM2LHZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+ItmF2YLYtdivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+Itqp2b7bjOKAjNmH2KciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+Itin2YbYr9in2LLZhyDaqdin2LrYsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+Itix2Ybar9uMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i2KzZh9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i2LXZgdit2KfYqiAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i4oCP4oCP4oCO2YXYq9mE2KfZi8Kg27HigJTbtdiM4oCP27nYjNu34oCU27HbsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4i2b7bjNi04oCM2YbZhdin24zYtCDahtin2b4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuKAj9mG2LXYqCDZhtmF2KfbjNi02q/YsSBQREYg2KjYsdin24wg2b7bjNi04oCM2YbZhdin24zYtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i2KjYsdmG2KfZhdmHINqG2KfZviDYrtix2KfYqCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+Iti12YHYrdin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLYr9ixINit2KfZhCDYp9uM2KzYp9ivINqp2KfYsSDahtin2b4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiLigI/YsNiu24zYsdmHINio2YfigIzYudmG2YjYp9mGIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLZh9mF2Ycg2obYp9m+2q/YsdmH2KcuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+ItqG2KfZviDar9mB2Krar9mIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+Itis2LPYqtis2YgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i2YfZhdmHINqG2KfZvtqv2LHZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i2KfZgdiy2YjYr9mGINiz2LHZiNuM2LMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLaqdin2K/YsSDYrNiz2KrYrNmIINmG2YXYp9uM2KfZhiDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+Itqp2KfYr9ixINis2LPYqtis2Ygg2b7ZhtmH2KfZhiDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i2KfZgdiy2YjYr9mGINqG2KfZvtqv2LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLYp9mG2KrYrtin2Kgg2obYp9m+2q/YsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+ItmB2LHYp9mF2YjYtCDaqdix2K/ZhiDahtin2b7ar9ixIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+INqG2KfZvtqv2LEg24zYp9mB2Kog2LTYryI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g2obYp9m+2q/YsSDbjNin2YHYqiDYtNivIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i2KfZhtiq2K7Yp9ioINiz2LHZiNuM2LMg2obYp9m+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLYr9ixINit2KfZhCDYrNiz2KrYrNmIINio2LHYp9uMINqG2KfZvtqv2LHZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4i2YfbjNqGINqG2KfZvtqv2LHbjCDbjNin2YHYqiDZhti02K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLYr9ixINit2KfZhCDahtin2b4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Itiv2LEg2K3Yp9mEINmE2LrZiCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLYrti32KfbjCDahtin2b7ar9ixIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLahtin2b7ar9ix2Iwg2qnYp9ixIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g2LHYpyDZhdiz2K/ZiNivINqp2LHYryI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiLaqdin2LEg2obYp9m+IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiLaqdin2LHZh9in24wg2obYp9m+IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i2YTYutmIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLYsdin2YfigIzYp9mG2K/Yp9iy24wg2YXYrNiv2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i2KfYqti12KfZhCDYqNinINqG2KfZvtqv2LEg2KjYsdmC2LHYp9ixINmG24zYs9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i2YbYp9mF2LnZhNmI2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gLSDYr9ixINiv2LPYqtix2LMg2YbbjNiz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4i2qnYp9ixINqG2KfZviDYp9uM2KzYp9ivINmG2LTYryI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLYs9uM2KfZhyDZiCDYs9mB24zYryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLYsdmG2q/bjCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLYudmF2YjYr9uMIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Itin2YHZgtuMIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLZh9mF2YciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i2YXYrdiv2YjYr9mHIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1OGUwNAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlRhdXN0YXR1bG9zdHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IlR1bG9zdGltZW4gYXNldHVrc2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iVHVsb3N0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IlRhbGxlbm5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iS29oZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iS29waW90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJQYXBlcmlrb2tvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iVsOkcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiJTdXVudGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJTaXZ1dCAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iZXNpbS4gMeKAkzUsOCwxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJUdWxvc3R1a3NlbiBlc2lrYXRzZWx1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJBc2VubmEgUERGLWthdHNlbHVvaGplbG1hIGVzaWthdHNlbHVhIHZhcnRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iVHVsb3N0dXNzb3ZlbGx1cyBrYWF0dWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iU2l2dXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJMdW9kYWFuIHR1bG9zdHVzdHnDtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlRhbGxlbm5hIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJLYWlra2kgdHVsb3N0aW1ldOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iVHVsb3N0dXNpa2t1bmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iSGFrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJLYWlra2kgdHVsb3N0aW1ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+Ikxpc8Okw6QgcGFsdmVsdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+Ikhha3VrZW50dMOkIG7DpGt5dmlzc8OkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+Ikhha3VrZW50dMOkIHBpaWxvdGV0dHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJMaXPDpMOkIHR1bG9zdGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iVmFsaXRzZSB0dWxvc3RpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IlVub2hkYSB0dWxvc3RpbiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iTMO2eXR5aSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHR1bG9zdGluIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iTMO2eXR5aSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHR1bG9zdGludGEiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJWYWxpdHNlIHR1bG9zdHVzcGFsdmVsdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iRXRzaXTDpMOkbiB0dWxvc3RpbWlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iVHVsb3N0aW1pYSBlaSBsw7Z5ZHkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJUdWxvc3RldGFhbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iUGVydXV0ZXRhYW4gdHnDtiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJUdWxvc3RpbnZpcmhlIHR5w7ZsbGUgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlR1bG9zdGluIGVzdGkgdHnDtm4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJUdWxvc3R1c3R5w7YgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IlR1bG9zdHVzdHnDtnQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJQZXJ1dXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJLw6R5bm5pc3TDpCB1dWRlbGxlZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iRWkgeWh0ZXl0dMOkIHR1bG9zdGltZWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4idHVudGVtYXRvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgZWkga8OkeXRldHTDpHZpc3PDpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJUdWxvc3R1c3R5w7Z0w6QgZWkgdm9pdHUgbHVvZGEiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iTXVzdGF2YWxrb2luZW4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iVsOkcmkiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUHlzdHkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iVmFha2EiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IkthaWtraSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJWw6RsaSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEzMzUyYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJGaWxlIGRcJ2F0dC4gaW1wci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iUGFyYW3DqHRyZXMgZGUgbFwnaW1wcmltYW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IkltcHJpbWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iRW5yZWdpc3RyZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJEZXN0aW5hdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJDb3BpZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IkZvcm1hdCBkdSBwYXBpZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJDb3VsZXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJQYWdlcyAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4icC4gZXguIDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IkFwZXLDp3UgYXZhbnQgaW1wcmVzc2lvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iSW5zdGFsbGVyIHVuIGxlY3RldXIgUERGIHBvdXIgdm9pciBsXCdhcGVyw6d1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJMXCdhcHBsaWNhdGlvbiDDoCBsXCdvcmlnaW5lIGRlIGxcJ2ltcHJlc3Npb24gYSBwbGFudMOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlBhZ2VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iR8OpbsOpcmF0aW9uIHTDomNoZSBpbXByZXNzaW9u4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iRW5yZWdpc3RyZXIgZW4gZm9ybWF0IFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJUb3V0ZXMgbGVzIGltcHJpbWFudGVz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJCb8OudGUgZGUgZGlhbG9ndWUgZFwnaW1wcmVzc2lvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJSZWNoZXJjaGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlRvdXRlcyBsZXMgaW1wcmltYW50ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJBam91dGVyIGxlIHNlcnZpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJDaGFtcCBkZSByZWNoZXJjaGUgYWZmaWNow6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iQ2hhbXAgZGUgcmVjaGVyY2hlIG1hc3F1w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJBam91dGVyIHVuZSBpbXByaW1hbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iU8OpbGVjdGlvbm5lciB1bmUgaW1wcmltYW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IlN1cHByaW1lciBsXCdpbXByaW1hbnRlIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+wqBpbXByaW1hbnRlIHRyb3V2w6llIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPsKgaW1wcmltYW50ZXMgdHJvdXbDqWVzIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iU8OpbGVjdGlvbm5lciBsZSBzZXJ2aWNlIGRcJ2ltcHJlc3Npb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlJlY2hlcmNoZSBkXCdpbXByaW1hbnRlcyBlbiBjb3Vycy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IkF1Y3VuZSBpbXByaW1hbnRlIHRyb3V2w6llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iSW1wcmVzc2lvbiBkZSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IGVuIGNvdXJz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQW5udWxhdGlvbiBkZSDCq8KgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPsKgwrvigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkVycmV1ciBpbXByZXNzaW9uIDogwqvCoDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7CoMK7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iSW1wcmVzc2lvbiBkZSDCq8KgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPsKgwrsgYmxvcXXDqWUiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iVMOiY2hlIGRcJ2ltcHJlc3Npb24gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IlTDomNoZXMgZFwnaW1wcmVzc2lvbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkFubnVsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlY29tbWVuY2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkF1Y3VuZSBjb25uZXhpb24gw6AgbFwnaW1wcmltYW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+ImluY29ubnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCUIGluZGlzcG9uaWJsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJJbXBvc3NpYmxlIGRlIGfDqW7DqXJlciBsYSB0w6JjaGUgZFwnaW1wcmVzc2lvbiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJOb2lyIGV0IGJsYW5jIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IkNvdWxldXIiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUG9ydHJhaXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iUGF5c2FnZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVG91cyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJQbGFnZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYjU1N2UKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJTcG91bGVyIGltcHJlc3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IlBhcmFtw6h0cmVzIGRlIGxcJ2ltcHJpbWFudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJJbXByaW1lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IkVucmVnaXN0cmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iRGVzdGluYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iQ29waWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJGb3JtYXQgZHUgcGFwaWVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iQ291bGV1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGF0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iUGFnZXMgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+ImV4LsKgOiAxLTUsIDgsIDExLTEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJBcGVyw6d1IGF2YW50IGltcHJlc3Npb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbGxlciB1biBsZWN0ZXVyIFBERiBwb3VyIGFmZmljaGVyIGxcJ2FwZXLDp3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IkxcJ2FwcGxpY2F0aW9uIMOgIGxcJ29yaWdpbmUgZGUgbFwnaW1wcmVzc2lvbiBhIHBsYW50w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iUGFnZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHw6luw6lyYXRpb24gdMOiY2hlIGltcHJlc3Npb27igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJFbnJlZ2lzdHJlciBhdSBmb3JtYXQgLlBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJUb3V0ZXMgbGVzIGltcHJpbWFudGVz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJCb8OudGUgZGUgZGlhbG9ndWUgZFwnaW1wcmVzc2lvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJSZWNoZXJjaGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlRvdXRlcyBsZXMgaW1wcmltYW50ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJBam91dGVyIHVuIHNlcnZpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJDaGFtcCBkZSByZWNoZXJjaGUgYWZmaWNow6kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IkNoYW1wIGRlIHJlY2hlcmNoZSBtYXNxdcOpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkFqb3V0ZXIgdW5lIGltcHJpbWFudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJTw6lsZWN0aW9ubmVyIHVuZSBpbXByaW1hbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iU3VwcHJpbWVyIGxcJ2ltcHJpbWFudGUiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz7CoGltcHJpbWFudGUgdHJvdXbDqWUuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPsKgaW1wcmltYW50ZXMgdHJvdXbDqWVzLiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlPDqWxlY3Rpb25uZXIgbGUgc2VydmljZSBkXCdpbXByZXNzaW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJSZWNoZXJjaGUgZFwnaW1wcmltYW50ZXMgZW4gY291cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJBdWN1bmUgaW1wcmltYW50ZSB0cm91dsOpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IkltcHJlc3Npb24gZGUgXCI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+XCIgZW4gY291cnPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJBbm51bGF0aW9uIGRlIFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPlwiIGVuIGNvdXJz4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJFcnJldXIgaW1wcmVzc2lvbiBwb3VyIFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPlwiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iSW1wcmVzc2lvbiBkZSBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiBibG9xdcOpZSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IHTDomNoZSBkXCdpbXByZXNzaW9uIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiB0w6JjaGVzIGRcJ2ltcHJlc3Npb24iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQW5udWxlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iUmVkw6ltYXJyZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iQXVjdW5lIGNvbm5leGlvbiDDoCBsXCdpbXByaW1hbnRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+ImluY29ubnVlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBpbmRpc3BvbmlibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iSW1wb3NzaWJsZSBkZSBnw6luw6lyZXIgbGEgdMOiY2hlIGRcJ2ltcHJlc3Npb24uIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+Ik5vaXIgZXQgYmxhbmMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iQ291bGV1ciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3J0cmFpdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJQYXlzYWdlIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJUb3V0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IlBsYWdlIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0MDZiNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IuCkquCljeCksOCkv+CkguCknyDgpLjgpY3gpKrgpYLgpLLgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4i4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkuOClh+Ckn+Ckv+CkguCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IuCkquCljeCksOCkv+CkguCknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLgpLjgpLngpYfgpJzgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLgpJfgpILgpKTgpLXgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i4KSq4KWN4KSw4KSk4KS/4KSv4KS+4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLgpJXgpL7gpJfgpJzgpLwg4KSV4KS+IOCkhuCkleCkvuCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IuCksOCkguCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IuCkheCkreCkv+CkteCkv+CkqOCljeKAjeCkr+CkvuCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IuCkquClg+Ckt+CljeKAjeCkoCAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i4KSJ4KSm4KS+LiAx4oCUNSw4LDEx4oCUMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IuCkquCljeCksOCkv+CkguCknyDgpKrgpYLgpLDgpY3gpLXgpL7gpLXgpLLgpYvgpJXgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuCkquClguCksOCljeCkteCkvuCkteCksuCli+CkleCkqCDgpJXgpYcg4KSy4KS/4KSPIFBERiDgpLXgpY3gpK/gpYLgpIXgpLAg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i4KSq4KWN4KSw4KS/4KSC4KSf4KS/4KSC4KSXIOCkj+CkquCljeCksuCkv+CkleClh+CktuCkqCDgpJXgpY3gpLDgpYjgpLYg4KS54KWLIOCkl+Ckr+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiLgpKrgpYPgpLfgpY3gpKAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLgpKrgpY3gpLDgpL/gpILgpJ8g4KSV4KS+4KSw4KWN4KSvIOCknOCkqOCksOClh+CknyDgpLngpYsg4KSw4KS54KS+IOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlBERiDgpJXgpYcg4KSw4KWC4KSqIOCkruClh+CkgiDgpLjgpLngpYfgpJzgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i4KS44KSt4KWAIOCkquCljeCksOCkv+CkguCkn+CksC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4i4KSq4KWN4KSw4KS/4KSC4KSfIOCkuOCkguCkteCkvuCkpiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLgpJbgpYvgpJzgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i4KS44KSt4KWAIOCkquCljeCksOCkv+CkguCkn+CksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IuCkuOClh+CkteCkviDgpJzgpYvgpKHgpLzgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLgpJbgpYvgpJwg4KSs4KWJ4KSV4KWN4KS4IOCkquCljeCksOCkpuCksOCljeCktuCkv+CkpCDgpLngpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4i4KSW4KWL4KScIOCkrOClieCkleCljeCkuCDgpJvgpL/gpKrgpL4g4KS54KWB4KSGIOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IuCkquCljeCksOCkv+CkguCkn+CksCDgpJzgpYvgpKHgpLzgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLgpKrgpY3gpLDgpL/gpILgpJ/gpLAg4KSa4KWB4KSo4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4i4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkleCliyDgpK3gpYLgpLIg4KSc4KS+4KSP4KSCIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IOCkquCljeCksOCkv+CkguCkn+CksCDgpK7gpL/gpLLgpL4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IOCkquCljeCksOCkv+CkguCkn+CksCDgpK7gpL/gpLLgpYciPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLgpKrgpY3gpLDgpL/gpILgpJ8g4KS44KWH4KS14KS+IOCkmuClgeCkqOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkluCli+CknCDgpLDgpLngpL4g4KS54KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4i4KSV4KWL4KSIIOCkquCljeCksOCkv+CkguCkn+CksCDgpKjgpLngpYDgpIIg4KSu4KS/4KSy4KWHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpKrgpY3gpLDgpL/gpILgpJ8g4KS54KWLIOCksOCkueCkviDgpLngpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCksOCkpuCljeCkpiDgpLngpYsg4KSw4KS54KS+IOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkpOCljeCksOClgeCkn+CkvyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkheCkteCksOCli+Ckp+Ckv+CkpCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g4KSq4KWN4KSw4KS/4KSC4KSfIOCkleCkvuCksOCljeCkryI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g4KSq4KWN4KSw4KS/4KSC4KSfIOCkleCkvuCksOCljeCkryI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLgpLDgpKbgpY3gpKYg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLgpKrgpYHgpKg6IOCkhuCksOCkguCkrSDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkleClhyDgpLLgpL/gpI8g4KSV4KWL4KSIIOCkleCkqOClh+CkleCljeCktuCkqCDgpKjgpLngpYDgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLgpIXgpJzgpY3gpJ7gpL7gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIOCkheCkqOClgeCkquCksuCkrOCljeCkpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLgpKrgpY3gpLDgpL/gpILgpJ8g4KSV4KS+4KSw4KWN4KSvIOCknOCkqOCksOClh+CknyDgpKjgpLngpYDgpIIg4KSV4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpL4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i4KS24KWN4KSv4KS+4KSuIOCklOCksCDgpLbgpY3gpLXgpYfgpKQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i4KSw4KSC4KSXIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IuCkquCli+CksOCljeCkn+CljeCksOClh+CknyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLgpLLgpYjgpILgpKHgpLjgpY3gpJXgpYfgpKoiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IuCkuOCkreClgCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLgpLjgpYDgpK7gpL4iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTgyY2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iUHJpbnQgU3Bvb2xlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJQb3N0YXZrZSBwaXNhxI1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iSXNwaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJTcHJlbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJPZHJlZGnFoXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IktvcGlqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iVmVsacSNaW5hIHBhcGlyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IlUgYm9qaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWplbnRhY2lqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlN0cmFuaWNlICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJucHIuIDEg4oCTIDUsOCwxMSDigJMgMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlByZWdsZWQgaXNwaXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJJbnN0YWxpcmFqIFBERiBwcmVnbGVkbmlrIHphIHByZWdsZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IlNydcWhaWxhIHNlIGFwbGlrYWNpamEgemEgaXNwaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iU3RyYW5pY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHZW5lcmlyYW5qZSB6YWRhdGthIGlzcGlzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlNwcmVtaSBrYW8gUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlN2aSBwaXNhxI1p4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJEaWphbG/FoWtpIG9rdmlyIHphIGlzcGlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IlByZXRyYcW+aXZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlN2aSBwaXNhxI1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iRG9kYWogdXNsdWd1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iT2t2aXIgemEgcHJldHJhxb5pdmFuamUgcHJpa2F6YW4gamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iT2t2aXIgemEgcHJldHJhxb5pdmFuamUgc2tyaXZlbiBqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkRvZGFqIHBpc2HEjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+Ik9kYWJlcml0ZSBwaXNhxI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJaYWJvcmF2aXRlIHBpc2HEjSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iUHJvbmHEkWVuIGplIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gcGlzYcSNIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iUHJvbmHEkWVuIGplIHNsamVkZcSHaSBicm9qIHBpc2HEjWE6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJPZGFiZXJpdGUgdXNsdWd1IGlzcGlzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iVHJhxb5lbmplIHBpc2HEjWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJOaWplIHByb25hxJFlbiBuaWplZGFuIHBpc2HEjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IklzcGlzaXZhbmplIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJPdGtheml2YW5qZSB6YWRhdGthIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlBvZ3JlxaFrYSBwaXNhxI1hIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQaXNhxI0gamUgYmxva2lyYW8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJaYWRhdGFrIGlzcGlzYSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iQnJvaiB6YWRhdGFrYSBpc3Bpc2E6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iT2R1c3RhbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlBvbm92byBwb2tyZW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Ik5lbWEgdmV6ZSBzIHBpc2HEjWVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4ibmVwb3puYXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyB6YWRhdGFrIG5pamUgZG9zdHVwYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iWmFkYXRhayBpc3Bpc2EgbmlqZSBnZW5lcmlyYW4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iQ3Juby1iaWplbG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iVSBib2ppIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IlBvcnRyZXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iUGVqemHFviI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iU3ZlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IlJhc3BvbiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMDc0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJOeW9tdGF0w6FzaXNvci1rZXplbMWRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+Ik55b210YXTDs2Jlw6FsbMOtdMOhc29rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iTnlvbXRhdMOhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+Ik1lbnTDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJDw6lsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IlDDqWxkw6FueXN6w6FtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJQYXDDrXJtw6lyZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJTesOtbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IlTDoWpvbMOhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+Ik9sZGFsc3rDoW0gKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+InBsLiAx4oCTNSwgOCwgMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iRWzFkW7DqXpldCBueW9tdGF0w6FzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iQXogZWzFkW7DqXpldGhleiB0ZWxlcMOtdHNlIGEgUERGLW1lZ3Rla2ludMWRdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IkEgbnlvbXRhdMOhc2kgYWxrYWxtYXrDoXMgw7Zzc3plb21sb3R0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJPbGRhbGFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iTnlvbXRhdMOhc2kgZmVsYWRhdCBsw6l0cmVob3rDoXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iTWVudMOpcyBQREYta8OpbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iQXogw7Zzc3plcyBueW9tdGF0w7PigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+Ik55b210YXTDoXNpIHDDoXJiZXN6w6lkYWJsYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iS2VyZXPDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iQXogw7Zzc3plcyBueW9tdGF0w7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJTem9sZ8OhbHRhdMOhcyBob3p6w6FhZMOhc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJLZXJlc8WRbWV6xZEgbWVnamVsZW7DrXR2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJLZXJlc8WRbWV6xZEgZWxyZWp0dmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJOeW9tdGF0w7MgaG96esOhYWTDoXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iTnlvbXRhdMOzIGtpdsOhbGFzenTDoXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iTnlvbXRhdMOzIGVsZmVsZWp0w6lzZSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBueW9tdGF0w7Mgw6lzemxlbHZlIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBueW9tdGF0w7Mgw6lzemxlbHZlIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iTnlvbXRhdMOhc2kgc3pvbGfDoWx0YXTDoXMga2l2w6FsYXN6dMOhc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Ik55b210YXTDs2sga2VyZXPDqXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTmVtIHRhbMOhbGhhdMOzIG55b210YXTDsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IkEoeikgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBueW9tdGF0w6FzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkEoeikgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiB0w7ZybMOpc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Ik55b210YXTDoXNpIGhpYmE6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJBKHopIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gbGV0aWx0dmEuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g4oCTIG55b210YXTDoXNpIGZlbGFkYXQiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IOKAkyBueW9tdGF0w6FzaSBmZWxhZGF0b2siPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iTcOpZ3NlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLDmmpyYWluZMOtdMOhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJOaW5jcyBrYXBjc29sYXQgYSBueW9tdGF0w7N2YWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJpc21lcmV0bGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBuZW0gw6lyaGV0xZEgZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iTmVtIHNpa2Vyw7xsdCBsw6l0cmVob3puaSBhIG55b210YXTDoXNpIGZlbGFkYXRvdC4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iRmVrZXRlLWZlaMOpciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJTesOtbiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLDgWxsw7MiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iRmVrdsWRIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLDlnNzemVzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IlRhcnRvbcOhbnkiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MjNiODIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4i1Y/VutW01aHVtiDVr9Wh1oDVo9Wh1b7VodaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+ItWP1brVq9W51asg1a/VodaA1aPVodW+1bjWgNW41oLVtNW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+ItWP1brVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i1YrVodWw1aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+ItWG1brVodW/1aHVr9Wh1a/VpdW/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+ItWK1aHVv9Wz1aXVttW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4i1LnVstWp1asg1bnVodaD1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLUs9W41oLVtdW21agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLUtNWr1oDWhNWh1b7VuNaA1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i1LfVu9Wl1oAgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+ItaF1oAu1Z0gMS01LCA4LCAxMS0xMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4i1Y/VutWl1azVuNaCINW21aHVrdWh1aTVq9W/1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLVhtWh1a3VodWk1avVv9W01aHVtiDVsNWh1bTVodaAINW/1aXVstWh1aTWgNWl1oQgUERGINWk1avVv9Wh1oDVr9Wr1bkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+ItWP1brVpdWs1bjWgiDVrtaA1aHVo9Wr1oDVqCDVvtWp1aHWgNWrINWnINWl1bbVqdWh1oDVr9W+1aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiLUt9W71aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+ItWB1ofVodW+1bjWgNW+1bjWgtW0INWnINW/1brVpdWs1bjWgiDVodW31a3VodW/1aHVttaE1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiLVitWh1bDVpdWsINW41oDVutWl1b0gUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+ItSy1bjVrNW41oAg1b/VutWr1bnVttWl1oDVqC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4i1Y/VutWl1azVuNaCINWl1oDVr9Wt1bjVvdW41oLVqdW11aHVtiDVutWh1b/VuNaC1bDVodW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+ItWI1oDVuNW21aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiLUstW41azVuNaAINW/1brVq9W51bbVpdaA1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiLUsdW+1aXVrNWh1oHVttWl1awg1a7VodW81aHVtdW41oLVqdW11bjWgtW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4i1YjWgNW41bbVtNWh1bYg1b7VodW21aTVodWv1agg1oHVuNaC1oHVodWk1oDVvtWh1a4g1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4i1YjWgNW41bbVtNWh1bYg1b7VodW21aTVodWv1agg1anVodaE1oHVvtWl1awg1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLUsdW+1aXVrNWh1oHVttWl1awg1b/VutWr1bkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLUuNW21b/WgNWl1awg1b/VutWr1bkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLVhNW41bzVodW21aHVrCDVv9W61avVudWoIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+INW/1brVq9W5INWnINWj1b/VttW+1aXVrCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g1b/VutWr1bkg1acg1aPVv9W21b7VpdWsIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i1LjVttW/1oDVpdaEINW/1brVpdWs1bjWgiDVrtWh1bzVodW11bjWgtWp1bXVuNaC1bbVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i1Y/VutWr1bnVttWl1oDVqyDVuNaA1bjVttW41oLVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+ItWP1brVq9W51bbVpdaAINW51aXVtiDVo9W/1bbVvtWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLVj9W61b7VuNaC1bQg1afVnSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPi3VqCDVudWl1bLVodaA1a/VvtW41oLVtCDVpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i1Y/VutWr1bnVqyDVvdWt1aHVrCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i1Y/VutWr1bnVtiDVodaA1aPVpdWs1aHWg9Wh1a/VpdWsINWnIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4t1agiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiDVv9W61bTVodW2INWh1bfVrdWh1b/VodW21oQiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+INW/1brVtNWh1bYg1aHVt9Wt1aHVv9Wh1bbWhNW21aXWgCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLVidWl1bLVodaA1a/VpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLVjtWl1oDVodWj1bjWgNWu1aHWgNWv1aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLVj9W61avVudWrINWw1aXVvyDVr9Wh1bog1bnVr9WhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i1aHVttWw1aHVtdW/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+INW/1brVq9W51bYg1aHVttWw1aHVvdWh1bbVpdWs1asg1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4i1YnVr9Wh1oDVuNWy1aHWgdWh1bbWhCDVtNW31aHVr9Wl1awg1b/VutW01aHVtiDVodW31a3VodW/1aHVttaE1agiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i1Y3WhyDVuNaCINW91brVq9W/1aHVryI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLUs9W41oLVtdW21agiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4i1LTVq9W01aHVttWv1aHWgCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLUvNWh1bbVpNW31aHWhtW/IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLUstW41azVuNaA1agiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i1YTVq9W71aHVr9Wh1bXWhCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiODBkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQcmludCBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IlNldGVsYW4gcHJpbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IkNldGFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iU2ltcGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iVHVqdWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IlNhbGluYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlVrdXJhbiBLZXJ0YXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJXYXJuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGFzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+Iig8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIGhhbGFtYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+Im1pc2FsbnlhIDHigJQ1LDgsMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iUHJhdGluamF1IGNldGFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJQYXNhbmcgcGVuYW1waWwgUERGIHVudHVrIHByYXRpbmphdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iQXBsaWthc2kgcGVuY2V0YWthbiBtb2dvayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJIYWxhbWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iTWVtYnVhdCB0dWdhcyBwZW5jZXRha2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iU2ltcGFuIHNlYmFnYWkgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlNlbXVhIHByaW50ZXLigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkNldGFrIGRpYWxvZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJDYXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlNlbXVhIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJUYW1iYWhrYW4gbGF5YW5hbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IktvdGFrIHRlbHVzdXIgZGl0YW1waWxrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iS290YWsgdGVsdXN1ciBkaXNlbWJ1bnlpa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iVGFtYmFoa2FuIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJQaWxpaCBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iTHVwYWthbiBwcmludGVyIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXIgZGl0ZW11a2FuIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBwcmludGVyIGRpdGVtdWthbiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlBpbGloIGxheWFuYW4gY2V0YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Ik1lbmNhcmkgcHJpbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IlRpZGFrIGRpdGVtdWthbiBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iTWVuY2V0YWsgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ik1lbWJhdGFsa2FuIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkFkYSBrZXNhbGFoYW4gcHJpbnRlciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iUHJpbnRlciBtZW1ibG9raXIgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJUdWdhcyBjZXRhayA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iVHVnYXMgY2V0YWsgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJCYXRhbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iTXVsYWkgVWxhbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iVGlkYWsgYWRhIHNhbWJ1bmdhbiBrZSBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4idGFrIGRpa2V0YWh1aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgdGlkYWsgdGVyc2VkaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iVGlkYWsgZGFwYXQgbWVtYnVhdCB0dWdhcyBjZXRhayI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJIaXRhbSAmYW1wOyBQdXRpaCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJXYXJuYSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3RyZXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iTGFuc2thcCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iU2VtdWEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iUmVudGFuZyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YzNiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQcmludCBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IkltcG9zdGF6aW9uaSBzdGFtcGFudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJTdGFtcGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJTYWx2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkRlc3RpbmF6aW9uZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJDb3BpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iRm9ybWF0byBjYXJ0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IkEgY29sb3JpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YW1lbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iUGFnaW5lICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJFcy46IDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IkFudGVwcmltYSBkaSBzdGFtcGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbGxhIHZpc3VhbGl6emF0b3JlIFBERiBwZXIgYW50ZXByaW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJBcnJlc3RvIGFub21hbG8gZGVsbFwnYXBwIGRpIHN0YW1wYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJQYWdpbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHZW5lcmF6aW9uZSBwcm9jZXNzbyBkaSBzdGFtcGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJTYWx2YSBpbiBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iVHV0dGUgbGUgc3RhbXBhbnRp4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJGaW5lc3RyYSBkaSBkaWFsb2dvIFN0YW1wYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJDZXJjYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJUdXR0ZSBsZSBzdGFtcGFudGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJBZ2dpdW5naSBzZXJ2aXppbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IkNhc2VsbGEgZGkgcmljZXJjYSB2aXN1YWxpenphdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iQ2FzZWxsYSBkaSByaWNlcmNhIG5hc2Nvc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iQWdnaXVuZ2kgc3RhbXBhbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iU2VsZXppb25hIHN0YW1wYW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IkVsaW1pbmEgc3RhbXBhbnRlIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHN0YW1wYW50ZSB0cm92YXRhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBzdGFtcGFudGkgdHJvdmF0ZSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlNjZWdsaSBzZXJ2aXppbyBkaSBzdGFtcGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlJpY2VyY2EgZGkgc3RhbXBhbnRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTmVzc3VuYSBzdGFtcGFudGUgdHJvdmF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IlN0YW1wYSBkaSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQW5udWxsYW1lbnRvIGRpIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkVycm9yZSBkZWxsYSBzdGFtcGFudGU6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJMYSBzdGFtcGFudGUgaGEgYmxvY2NhdG8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJQcm9jZXNzbyBkaSBzdGFtcGEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IlByb2Nlc3NpIGRpIHN0YW1wYSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkFubnVsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJpYXZ2aWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iTmVzc3VuIGNvbGxlZ2FtZW50byBhbGxhIHN0YW1wYW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+InNjb25vc2NpdXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IC0gbm9uIGRpc3BvbmliaWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IkltcG9zc2liaWxlIGdlbmVyYXJlIHByb2Nlc3NvIGRpIHN0YW1wYSI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJCaWFuY28gZSBuZXJvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IkEgY29sb3JpIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IlZlcnRpY2FsZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJPcml6em9udGFsZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVHV0dGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iSW50ZXJ2YWxsbyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMGU3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQcmludCBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IteU15LXk9eo15XXqiDXnteT16TXodeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4i15TXk9ek16EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLXqdee15XXqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IteZ16LXkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiLXoteV16rXp9eZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IteS15XXk9ecINeg15nXmdeoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4i16bXkdeiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i15vXmdeV15XXnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+Itei157XldeT15nXnSAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i15zXntep15wgMeKAkzXigI8sOCzigI8xMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLXqtem15XXkteUINee16fXk9eZ157XlCDXqdecINeU15PXpNeh15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuKAj9eU16rXp9efINee16bXmdeSIFBERiDXnNeZ16bXmdeo16og16rXpteV15LXlCDXnten15PXmdee15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IteQ16TXnNeZ16fXpteZ15nXqiDXlNeU15PXpNeh15Qg16fXqNeh15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4i16LXnteV15PXmdedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i15nXldem16gg16LXkdeV15PXqiDXlNeT16TXodeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4i4oCP16nXnteV16gg15stUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+Iteb15wg15TXnteT16TXodeV16rigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+Iteq15nXkdeqINeT15Ug16nXmdeXINep15wg157Xk9ek16HXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLXl9ek16kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i15vXnCDXlNee15PXpNeh15XXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IteU15XXodejINep15nXqNeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLXqteZ15HXqiDXlNeX15nXpNeV16kg157Xldem15LXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLXqteZ15HXqiDXlNeX15nXpNeV16kg157Xldeh16rXqNeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i15TXldeh16Mg157Xk9ek16HXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IteR15fXqCDXnteT16TXodeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4i16nXm9eXINeQ16og15TXnteT16TXodeqIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiLXoNee16bXkNeUINee15PXpNeh16ogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Iteg157XpteQ15UgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDXnteT16TXodeV16oiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLXkdeX16gg16nXmdeo15XXqiDXlNeT16TXodeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLXnteX16TXqSDXnteT16TXodeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLXnNeQINeg157XpteQ15Ug157Xk9ek16HXldeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4i157Xk9ek15nXoSDXkNeqIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiLXnteR15jXnCDXkNeqIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Itep15LXmdeQ16og157Xk9ek16HXqiDXkS08eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i15TXnteT16TXodeqINeX16HXnteUINeQ16ogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiLXoteR15XXk9eqINeU15PXpNeh15QgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g16LXkdeV15PXldeqINeU15PXpNeh15QiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i15HXmNecIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLXlNek16LXnCDXnteX15PXqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLXkNeZ158g15fXmdeR15XXqCDXnNee15PXpNeh16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLXnNeQINeZ15PXldeiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyDXnNeQINeW157Xmdeg15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4i15zXkCDXoNeZ16rXnyDXlNeZ15Qg15zXmdem15XXqCDXkNeqINei15HXldeT16og15TXlNeT16TXodeUIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+Itep15fXldeoINeV15zXkdefIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+Item15HXoiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLXnNeQ15XXqNeaIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Itec16jXldeX15EiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IteU15vXnCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLXmNeV15XXlyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZTg0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiLljbDliLfjgrnjg5fjg7zjg6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4i44OX44Oq44Oz44K/44Gu6Kit5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4i5Y2w5Yi3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i5L+d5a2YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4i5Y2w5Yi35YWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IumDqOaVsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4i55So57SZ44K144Kk44K6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4i6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i5pa55ZCRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i44Oa44O844K477yIPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+77yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLkvos6IDEtNSw4LDExLTEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLljbDliLfjg5fjg6zjg5Pjg6Xjg7wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuODl+ODrOODk+ODpeODvOeUqFBERuODk+ODpeODvOOCouOCkuOCpOODs+OCueODiOODvOODqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i5Y2w5Yi344Ki44OX44Oq44Gn44Gu6Zqc5a6z55m655SfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IuODmuODvOOCuOaVsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IuWNsOWIt+OCuOODp+ODluOCkueUn+aIkOOBl+OBpuOBhOOBvuOBmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlBERuW9ouW8j+OBp+S/neWtmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLjgZnjgbnjgabjga7jg5fjg6rjg7Pjgr/igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IuWNsOWIt+ODgOOCpOOCouODreOCsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLmpJzntKIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i44GZ44G544Gm44Gu44OX44Oq44Oz44K/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i44K144O844OT44K544KS6L+95YqgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4i5qSc57Si44Oc44OD44Kv44K544Gv6KGo56S644GV44KM44Gm44GE44G+44GZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IuaknOe0ouODnOODg+OCr+OCueOBr+ihqOekuuOBleOCjOOBpuOBhOOBvuOBm+OCkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IuODl+ODquODs+OCv+OCkui/veWKoCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IuODl+ODquODs+OCv+OCkumBuOaKniI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IuODl+ODquODs+OCv+OCkuWIh+aWrSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPuWPsOOBruODl+ODquODs+OCv+OBjOimi+OBpOOBi+OCiuOBvuOBl+OBnyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz7lj7Djga7jg5fjg6rjg7Pjgr/jgYzopovjgaTjgYvjgorjgb7jgZfjgZ8iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLljbDliLfjgrXjg7zjg5Pjgrnjga7pgbjmip4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuODl+ODquODs+OCv+OBruaknOe0ouS4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IuODl+ODquODs+OCv+OBjOimi+OBpOOBi+OCiuOBvuOBm+OCkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7jgpLljbDliLfjgZfjgabjgYTjgb7jgZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+44KS44Kt44Oj44Oz44K744Or44GX44Gm44GE44G+44GZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLjg5fjg6rjg7Pjgr/jgqjjg6njg7w6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+44KS44OW44Ot44OD44Kv44GX44G+44GX44GfIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz7jga7ljbDliLfjgrjjg6fjg5YiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+44Gu5Y2w5Yi344K444On44OWIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IuOCreODo+ODs+OCu+ODqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i5YaN6LW35YuVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IuODl+ODquODs+OCv+OBq+aOpee2muOBleOCjOOBpuOBhOOBvuOBm+OCkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+IuS4jeaYjiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPuKAk+S9v+eUqOS4jeWPryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLljbDliLfjgrjjg6fjg5bjgpLnlJ/miJDjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ8iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i44Oi44OO44Kv44OtIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IuiJsiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLnuKblkJHjgY0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4i5qiq5ZCR44GNIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLjgZnjgbnjgaYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i56+E5ZuyIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzZiN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IuGDkeGDlOGDreGDk+GDleGDmOGDoSBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IuGDnuGDoOGDmOGDnOGDouGDlOGDoOGDmOGDoSDhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLhg5Hhg5Thg63hg5Phg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLhg6jhg5Thg5zhg5Dhg67hg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLhg5Phg5Dhg5zhg5jhg6jhg5zhg6Phg5rhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i4YOQ4YOh4YOa4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLhg6Thg6Phg6Dhg6rhg5rhg5jhg6Eg4YOW4YOd4YOb4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4i4YOk4YOU4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i4YOd4YOg4YOY4YOU4YOc4YOi4YOQ4YOq4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i4YOS4YOV4YOU4YOg4YOT4YOU4YOR4YOYICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLhg5vhg5Dhg5IuIDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLhg5zhg5Dhg67hg5Xhg5Ag4YOQ4YOb4YOd4YOR4YOU4YOt4YOT4YOV4YOQ4YOb4YOT4YOUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLhg5Lhg5Dhg5Phg5Dhg67hg5Thg5Phg5Xhg5jhg6Hhg5fhg5Xhg5jhg6Eg4YOT4YOQ4YOQ4YOn4YOU4YOc4YOU4YOXIFBERiDhg5vhg5zhg5Dhg67hg5Xhg5Thg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IuGDkeGDlOGDreGDk+GDleGDmOGDoSDhg5Dhg57hg5gg4YOQ4YOV4YOQ4YOg4YOY4YOj4YOa4YOQ4YOTIOGDkuGDkOGDmOGDl+GDmOGDqOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiLhg5Lhg5Xhg5Thg6Dhg5Phg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLhg5vhg5jhg5vhg5Phg5jhg5zhg5Dhg6Dhg5Thg53hg5Hhg5jhg6Eg4YOR4YOU4YOt4YOT4YOV4YOY4YOhIOGDk+GDkOGDleGDkOGDmuGDlOGDkeGDmOGDoSDhg6jhg5Thg6Xhg5vhg5zhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJQREYt4YOQ4YOTIOGDqOGDlOGDnOGDkOGDruGDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLhg6fhg5Xhg5Thg5rhg5Ag4YOe4YOg4YOY4YOc4YOi4YOU4YOg4YOY4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiLhg5Hhg5Thg63hg5Phg5Xhg5jhg6Eg4YOh4YOQ4YOg4YOZ4YOb4YOU4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IuGDq+GDmOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiLhg6fhg5Xhg5Thg5rhg5Ag4YOe4YOg4YOY4YOc4YOi4YOU4YOg4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i4YOh4YOU4YOg4YOV4YOY4YOh4YOY4YOhIOGDk+GDkOGDm+GDkOGDouGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IuGDoeGDkOGDq+GDmOGDlOGDkeGDnSDhg5Xhg5Thg5rhg5gg4YOc4YOQ4YOp4YOV4YOU4YOc4YOU4YOR4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IuGDoeGDkOGDq+GDmOGDlOGDkeGDnSDhg5Xhg5Thg5rhg5gg4YOT4YOQ4YOb4YOQ4YOa4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i4YOe4YOg4YOY4YOc4YOi4YOU4YOg4YOY4YOhIOGDk+GDkOGDm+GDkOGDouGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IuGDnuGDoOGDmOGDnOGDouGDlOGDoOGDmOGDoSDhg5Dhg6Dhg6nhg5Thg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLhg57hg6Dhg5jhg5zhg6Lhg5Thg6Dhg5jhg6Eg4YOT4YOQ4YOV4YOY4YOs4YOn4YOU4YOR4YOQIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiLhg5zhg5Dhg57hg53hg5Xhg5zhg5jhg5AgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDhg57hg6Dhg5jhg5zhg6Lhg5Thg6Dhg5giPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiLhg5zhg5Dhg57hg53hg5Xhg5zhg5jhg5AgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDhg57hg6Dhg5jhg5zhg6Lhg5Thg6Dhg5giPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLhg5Dhg5jhg6Dhg6nhg5jhg5Thg5cg4YOR4YOU4YOt4YOT4YOV4YOY4YOhIOGDoeGDlOGDoOGDleGDmOGDoeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOU4YOd4YOR4YOhIOGDnuGDoOGDmOGDnOGDouGDlOGDoOGDlOGDkeGDmOGDoSDhg6vhg5jhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLhg57hg6Dhg5jhg5zhg6Lhg5Thg6Dhg5Thg5Hhg5gg4YOV4YOU4YOgIOGDm+GDneGDmOGDq+GDlOGDkeGDnOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IuGDmOGDkeGDlOGDreGDk+GDlOGDkeGDkCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4i4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOU4YOd4YOR4YOhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4t4YOY4YOhIOGDkuGDkOGDo+GDpeGDm+GDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i4YOR4YOU4YOt4YOT4YOV4YOY4YOhIOGDqOGDlOGDquGDk+GDneGDm+GDkCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i4YOe4YOg4YOY4YOc4YOi4YOU4YOg4YOb4YOQIOGDk+GDkOGDkeGDmuGDneGDmeGDkCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IuGDkeGDlOGDreGDk+GDleGDmOGDoSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IOGDk+GDkOGDleGDkOGDmuGDlOGDkeGDkCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IuGDkeGDlOGDreGDk+GDleGDmOGDoSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IOGDk+GDkOGDleGDkOGDmuGDlOGDkeGDkCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLhg5Lhg5Dhg6Phg6Xhg5vhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuGDkuGDkOGDk+GDkOGDouGDleGDmOGDoOGDl+GDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLhg57hg6Dhg5jhg5zhg6Lhg5Thg6Dhg5fhg5Dhg5wg4YOZ4YOQ4YOV4YOo4YOY4YOg4YOYIOGDkOGDoCDhg5Dhg6Dhg5jhg6EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLhg6Phg6rhg5zhg53hg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIOGDm+GDmOGDo+GDrOGDleGDk+GDneGDm+GDlOGDmuGDmOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLhg5Hhg5Thg63hg5Phg5Xhg5jhg6Eg4YOT4YOQ4YOV4YOQ4YOa4YOU4YOR4YOY4YOhIOGDkuGDlOGDnOGDlOGDoOGDkOGDquGDmOGDkCDhg5Xhg5Thg6Ag4YOu4YOU4YOg4YOu4YOT4YOU4YOR4YOQIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IuGDqOGDkOGDlS3hg5fhg5Thg5fhg6Dhg5giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i4YOk4YOU4YOg4YOYIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IuGDnuGDneGDoOGDouGDoOGDlOGDouGDmCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLhg57hg5Thg5jhg5bhg5Dhg5/hg5jhg6Eg4YOg4YOU4YOf4YOY4YOb4YOYIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLhg6fhg5Xhg5Thg5rhg5AiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i4YOT4YOY4YOQ4YOe4YOQ4YOW4YOd4YOc4YOYIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODlmOWJmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IuGelOGfhOGfh+GeluGeu+GemOGfkuGeluKAi+Gen+GfkuGeluGevOGem+GfkOGemiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLhnoDhnrbhnprigIvhnoDhn4bhno7hno/hn4vigIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLhnprhnoDhn5Lhnp/hnrbhnpHhnrvhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLhnpHhnrfhnp/hnorhn4UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i4Z6F4Z+S4Z6U4Z624Z6U4Z+L4oCL4Z6F4Z6Y4Z+S4Z6b4Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLhnpHhn4bhnqDhn4bigIvhnoDhn5Lhnprhnorhnrbhnp8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLhnpbhno7hn4wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLhnpHhnrfhnp8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLhnpHhn4bhnpbhn5DhnpogKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+IuGepy4gMeKAlDUsOCwxMeKAlDEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLhnpjhnr7hnpvigIvhnpjhnrvhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuGeiuGfhuGeoeGevuGehOKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GemOGevuGemyBQREYg4Z6f4Z6Y4Z+S4Z6a4Z624Z6U4Z+L4oCL4Z6A4Z624Z6a4oCL4Z6Y4Z6+4Z6b4oCL4Z6H4Z624oCL4Z6Y4Z674Z6TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpbigIvhnoLhnrbhn4bhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4i4Z6R4Z+G4Z6W4Z+Q4Z6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i4oCL4Z6U4Z6E4Z+S4Z6A4Z6+4Z6P4oCL4Z6A4Z624Z6a4oCL4Z6E4Z624Z6a4oCL4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4i4Z6a4Z6A4Z+S4Z6f4Z624oCL4Z6R4Z674Z6A4oCL4Z6H4Z62IFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpbigIvhnpHhnrbhn4bhnoThnqLhnp/hn4sgLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiLhnpThn5LhnprhnqLhnpThn4vigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4i4Z6f4Z+S4Z6c4Z+C4Z6E4Z6a4Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IuGemOGfieGetuGen+GfiuGeuOGek+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeluKAi+GekeGetuGfhuGehOGeouGen+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IuGelOGek+GfkuGekOGfguGemOKAi+Gen+GfgeGenOGetuGegOGemOGfkuGemCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IuGelOGetuGek+KAi+GelOGehOGfkuGeoOGetuGeieKAi+GelOGfkuGemuKAi+GeouGelOGfi+KAi+Gen+GfkuGenOGfguGehOGemuGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLhnpThnrbhnpPigIvhnpvhnrbhnoDhn4vigIvhnpThn5LhnprhnqLhnpThn4vigIvhnp/hn5Lhnpzhn4LhnoThnprhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLhnpThnpPhn5LhnpDhn4LhnpjigIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLhnofhn5Lhnprhnr7hnp/igIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLhnpfhn5Lhnpvhn4HhnoXigIvigIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IuGemuGegOKAi+Geg+GevuGeieKAi+GemOGfieGetuGen+GfiuGeuOGek+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeliA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4i4Z6a4Z6A4oCL4Z6D4Z6+4Z6J4oCL4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6WIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLhnofhn5Lhnprhnr7hnp/igIvhnp/hn4HhnpzhnrbigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuGen+GfkuGenOGfguGehOGemuGegOKAi+GemOGfieGetuGen+GfiuGeuOGek+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IuGemuGegOKAi+GemOGet+Gek+KAi+Geg+GevuGeieKAi+GemOGfieGetuGen+GfiuGeuOGek+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IuGegOGfhuGeluGeu+GehOKAi+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeliA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4i4Z6A4Z624Z6a4oCL4Z6U4Z+E4Z+H4Z6U4Z6E4Z+LIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuGegOGfhuGeoOGeu+Gen+KAi+GemOGfieGetuGen+GfiuGeuOGek+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeliA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6W4oCL4Z6U4Z624Z6T4oCL4Z6R4Z6U4Z+L4Z6f4Z+S4Z6A4Z624Z6P4Z+LIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4i4Z6A4Z624Z6a4Z6E4Z624Z6a4oCL4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6WIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiLhnoDhnrbhnprhnoThnrbhnprigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLhnpThn4Thn4fhnpThnoThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuGeheGetuGelOGfi+GeleGfkuGeiuGevuGemOKAi+GeoeGevuGehOGenOGet+GeiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLhnoLhn5LhnpjhnrbhnpPigIvigIvigIvhnoDhnrbhnprigIvhnpfhn5LhnofhnrbhnpThn4vigIvhnpHhn4XigIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLhnpjhnrfhnpPigIvhnp/hn5LhnoLhnrbhnpvhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIOGemOGet+Gek+KAi+GeouGetuGeheKAi+GelOGfkuGemuGevuKAi+GelOGetuGekyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLhnpjhnrfhnpPigIvhnqLhnrbhnoXigIvhnpThnoThn5LhnoDhnr7hno/igIvhnoDhnrbhnprigIvhnoThnrbhnprigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i4Z6fICZhbXA7IOGegeGfkuGemOGfhSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLhnpbhno7hn4wiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4i4Z6U4Z6J4Z+S4Z6I4Z6aIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+IuGeleGfkuGeiuGfgeGegCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4i4Z6R4Z624Z+G4Z6E4oCL4Z6i4Z6f4Z+LIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IuGeh+GeveGemiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMmZlZjcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiLsnbjsh4Qg7Iqk7ZKA65+sIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+Iu2UhOumsO2EsCDshKTsoJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLsnbjsh4QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLsoIDsnqUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLrjIDsg4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i66ek7IiYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLsmqnsp4Ag7YGs6riwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4i7IOJ7IOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i67Cp7ZalIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i7Y6Y7J207KeAIOyImCg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLsmIg6IDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IuyduOyHhCDrr7jrpqzrs7TquLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuuvuOumrOuztOq4sOyaqSBQREYg67ew7Ja0IOyEpOy5mCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i7J247IeEIOyVseyXkCDsmKTrpZgg67Cc7IOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+Iu2OmOydtOyngCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IuyduOyHhCDsnpHsl4Ug7IOd7ISxIOykkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlBERuuhnCDsoIDsnqUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i66qo65OgIO2UhOumsO2EsOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4i7J247IeEIOuMgO2ZlOyDgeyekCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLqsoDsg4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i66qo65OgIO2UhOumsO2EsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IuyEnOu5hOyKpCDstpTqsIAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLqsoDsg4nssL0g7ZGc7Iuc65CoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IuqygOyDieywvSDsiKjqsqjsp5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLtlITrprDthLAg7LaU6rCAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4i7ZSE66aw7YSwIOyEoO2DnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Iu2UhOumsO2EsCDsgq3soJwiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Iu2UhOumsO2EsCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+64yAIOqygOyDieuQqCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+Iu2UhOumsO2EsCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+64yAIOqygOyDieuQqCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuyduOyHhCDshJzruYTsiqQg7ISg7YOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLtlITrprDthLAg6rKA7IOJIOykkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Iu2UhOumsO2EsCDsl4bsnYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOyduOyHhCDspJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOy3qOyGjCDspJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Iu2UhOumsO2EsCDsmKTrpZg6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLssKjri6jrkJwg7ZSE66aw7YSwOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g7J247IeEIOyekeyXhSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g7J247IeEIOyekeyXhSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLst6jshowiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuuLpOyLnCDsi5zsnpEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i7ZSE66aw7YSw7JmAIOyXsOqysOuQmOyngCDslYrsnYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLslYwg7IiYIOyXhuydjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMg7IKs7Jqp7ZWgIOyImCDsl4bsnYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4i7J247IeEIOyekeyXheydhCDsg53shLHtlaAg7IiYIOyXhuyKteuLiOuLpC4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i7Z2R67CxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+Iuy7rOufrCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLshLjroZwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4i6rCA66GcIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLrqqjrkZAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i67KU7JyEIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTU0NjA2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IuC6leC6u+C6p+C6iOC6seC6lOC6hOC6tOC6p+C6geC6suC6meC6nuC6tOC6oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLguoHgurLgupngupXgurHgu4nguofguoTgu4jgurLgu4DguoTgurfgu4jguq3guofgup7gurTguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLgup7gurTguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLguprgurHgupngupfgurbguoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLgupvgurLguo3gupfgurLguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i4Lqq4Lqz4LuA4LqZ4Lq74LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLguoLgurDgu5zgurLgupTguoLguq3guofgu5zgu4ngurLgu4Dguojgu4nguo0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLguqrgurUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLguqXguqfguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiIoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSDgu5zgu4ngurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+IuC6leC6u+C6p+C6ouC7iOC6suC6hzogMeKAlDUsOCwxMeKAlDEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLgu4DguprgurTgu4jguofguoHgu4jguq3gupngup7gurTguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuC6leC6tOC6lOC6leC6seC7ieC6h+C7guC6m+C6vOC7geC6geC6vOC6oeC7gOC6muC6tOC7iOC6hyBQREYg4LuA4Lqe4Lq34LuI4Lqt4LuA4Lqa4Lq04LuI4LqH4LqV4Lq74Lqn4Lqi4LuI4Lqy4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLgu4Hguq3gurHguprguq/gup7gurTguqHguqXgurvgu4nguqHgu4DguqvguqXguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4i4Luc4LuJ4LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i4LqB4Lqz4Lql4Lqx4LqH4Lqq4LuJ4Lqy4LqH4Lqn4Lq94LqB4Lqe4Lq04LqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4i4Lqa4Lqx4LqZ4LqX4Lq24LqB4LuA4Lqb4Lqx4oCL4oCL4LqZIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLgupfgurjguoHgu4DguoTgurfgu4jguq3guofgup7gurTguqEuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IuC7nOC7ieC6suC6leC7iOC6suC6h+C6geC6suC6meC6nuC6tOC6oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLguorguq3guoHguqvgurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i4LqX4Lq44LqB4LuA4LqE4Lq34LuI4Lqt4LqH4Lqe4Lq04LqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i4LuA4Lqe4Lq14LuI4Lqh4Lqa4LuN4Lql4Lq04LqB4Lqy4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4i4LqB4LuI4Lqt4LqH4LqK4Lqt4LqB4Lqr4Lqy4LqW4Lq34LqB4Lqq4Lqw4LuB4LqU4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IuC6geC7iOC6reC6h+C6iuC6reC6geC6q+C6suC6luC6t+C6geC7gOC6iuC6t+C7iOC6reC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IuC7gOC6nuC6teC7iOC6oeC7gOC6hOC6t+C7iOC6reC6h+C6nuC6tOC6oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IuC7gOC6peC6t+C6reC6geC7gOC6hOC6t+C7iOC6reC6h+C6nuC6tOC6oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IuC6peC6t+C6oeC7gOC6hOC6t+C7iOC6reC6h+C6nuC6tOC6oSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4i4Lqe4Lq74LqaIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g4LuA4LqE4Lq34LuI4Lqt4LqH4Lqe4Lq04LqhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4i4Lqe4Lq74LqaIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g4LuA4LqE4Lq34LuI4Lqt4LqH4Lqe4Lq04LqhIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4LuA4Lql4Lq34Lqt4LqB4Lqa4LuN4Lql4Lq04LqB4Lqy4LqZ4LqB4Lqy4LqZ4Lqe4Lq04LqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLguoHgurPguqXgurHguofguorguq3guoHguqvgurLgu4DguoTgurfgu4jguq3guofgup7gurTguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLguprgu43gu4jgup7gurvguprgu4DguoTgurfgu4jguq3guofgup7gurTguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLguoHgurPguqXgurHguofgup7gurTguqEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IuC6geC6s+C6peC6seC6h+C6jeC6u+C6geC7gOC6peC6teC6gSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLgu4DguoTgurfgu4jguq3guofgup7gurTguqHgu4DguoHgurXgupTguoLgu43gu4ngupzgurTgupTgup7gurLgupQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuC7gOC6hOC6t+C7iOC6reC6h+C6nuC6tOC6oeC6luC6t+C6geC6muC6peC6reC6gSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IuC6h+C6suC6meC6nuC6tOC6oSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4i4LqH4Lqy4LqZ4Lqe4Lq04LqhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i4LqN4Lq74LqB4LuA4Lql4Lq14LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLgupvgurTgupTgu4DgupvgurXgupTgu4Pgu53gu4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i4Lqa4LuN4LuI4Lqh4Lq14LqB4Lqy4LqZ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuI4Lqr4Lqy4LuA4LqE4Lq34LuI4Lqt4LqH4Lqe4Lq04LqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i4Lqa4LuN4LuI4Lqu4Lq54LuJ4LqI4Lqx4LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IC0g4Lqa4LuN4LuI4Lqh4Lq14Lqi4Lq54LuIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IuC6muC7jeC7iOKAi+C6quC6suKAi+C6oeC6suC6lOKAi+C6quC7ieC6suC6h+C6p+C6veC6geC6nuC6tOC6oeC7hOC6lOC7iSI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLguoLgurLguqfgupTgurMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i4Lqq4Lq1IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IuC6peC6p+C6h+C6leC6seC7ieC6hyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLguqXguqfguofgupnguq3gupkiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IuC6l+C6seC6h+C7neC6u+C6lCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLgu4TguqXguo3gurAiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzRlMzg2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iUHJpbnQgU3Bvb2xlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJTcGF1c2RpbnR1dm8gbnVzdGF0eW1haSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IlNwYXVzZGludGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJJxaFzYXVnb3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iUGFza2lydGllcyB2aWV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJLb3Bpam9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJQb3BpZXJpYXVzIGR5ZGlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iU3BhbHZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YWNpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJQdXNsYXBpYWkgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+InB2ei4sIDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJTcGF1ZGluaW8gcGVyxb5pxatyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4ixK5kaWVndGkgUERGIHBlcsW+acWrcm9zIHByaWVtb27EmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iU3BhdXNkaW5pbW8gcHJvZ3JhbWEgdcW+c3RyaWdvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlB1c2xhcGlhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVydW9qYW1hIHNwYXVzZC4gdcW+ZHVvdGlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iScWhc2F1Z290aSBrYWlwIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJWaXNpIHNwYXVzZGludHV2YWnigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IlNwYXVzZGluaW1vIGRpYWxvZ28gbGFuZ2FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IkllxaFrb3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlZpc2kgc3BhdXNkaW50dXZhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IlByaWTEl3RpIHBhc2xhdWfEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IlBhaWXFoWtvcyBsYXVrZWxpcyByb2RvbWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlBhaWXFoWtvcyBsYXVrZWxpcyBwYXNsxJdwdGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iUHJpZMSXdGkgc3BhdXNkaW50dXbEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IlBhc2lyaW5rdGkgc3BhdXNkaW50dXbEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IlBhbWlyxaF0aSBzcGF1c2RpbnR1dsSFIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiJSYXN0YSBzcGF1c2RpbnR1dsWzOiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iUmFzdGEgc3BhdXNkaW50dXbFszogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlBhc2lyaW5raXRlIHNwYXVzZGluaW1vIHBhc2xhdWfEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iSWXFoWtvbWEgc3BhdXNkaW50dXbFsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Ik5lcmFzdGEgc3BhdXNkaW50dXbFsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IlNwYXVzZGluYW1hOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQXTFoWF1a2lhbWE6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlNwYXVzZGludHV2byBrbGFpZGE6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJTcGF1c2RpbnR1dmFzIHXFvmJsb2thdm86IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iU3BhdXNkaW5pbW8gdcW+ZHVvdGlzOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iU3BhdXNkaW5pbW8gdcW+ZHVvdHlzOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkF0xaFhdWt0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iUGFsZWlzdGkgacWhIG5hdWpvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Ik7El3JhIHJ5xaFpbyBzdSBzcGF1c2RpbnR1dnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJuZcW+aW5vbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+IuKAnjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwg4oCTIG5lcGFzaWVraWFtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJOZXBhdnlrbyBzdWt1cnRpIHNwYXVzZGluaW1vIHXFvmR1b3RpZXMiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iTmVzcGFsdm90YXMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iU3BhbHZhIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IlN0YcSNaWFzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Ikd1bHPEjWlhcyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVmlzaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJEaWFwYXpvbmFzIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZmZmRmZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW50IFNwb29sZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iUHJpbnRlcmEgaWVzdGF0xKtqdW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iRHJ1a8SBdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IlNhZ2xhYsSBdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkdhbGFtxJNyxLdpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJFa3NlbXBsxIFyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iUGFwxKtyYSBpem3Ek3JzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iS3LEgXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iVmlyemllbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJMYXBhc8KgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+InBpZW0uLCAx4oCTNSw4LDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IkRydWthcyBwcmlla8Whc2thdMSranVtcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iSW5zdGFsxJN0IFBERsKgc2thdMSrdMSBanUgcHJpZWvFoXNrYXTEq8WhYW5haSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iRHJ1a2FzIGxpZXRvdG5lIGF2YXLEk2phIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IkxhcGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4ixKJlbmVyxJMgZHJ1a2FzIGRhcmJ14oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iU2FnbGFixIF0IGvEgcKgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlZpc2kgcHJpbnRlcmnigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkRydWvEgcWhYW5hcyBkaWFsb2dsb2R6acWGxaEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iTWVrbMSTdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJWaXNpIHByaW50ZXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iUGlldmllbm90IHBha2FscG9qdW11Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iTWVrbMSTxaFhbmFzIGxvZHppxYbFoSBpciByZWR6YW1zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJNZWtsxJPFoWFuYXMgbG9kemnFhsWhIGlyIHBhc2zEk3B0cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJQaWV2aWVub3QgcHJpbnRlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJBdGxhc8SrdCBwcmludGVyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Ik5lYXRjZXLEk3RpZXMgcHJpbnRlcmkiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IkF0cmFzdHMgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPsKgcHJpbnRlcmlzIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iQXRyYXN0aSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+wqBwcmludGVyaSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+Ikl6dsSTbGlldGllcyBkcnVrxIHFoWFuYXMgcGFrYWxwb2p1bXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlByaW50ZXJ1IG1la2zEk8WhYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iTmV0aWthIGF0cmFzdHMgbmV2aWVucyBwcmludGVyaXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iTm90aWVrIGRhcmJhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gZHJ1a8SBxaFhbmHigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJQxIFydHJhdWMgZHJ1a2FzIGRhcmJ1IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlByaW50ZXJhIGvEvMWrZGEgYXIgZGFyYnUgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlByaW50ZXJpcyBibG/Et8STamEgZGFyYnUgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJEcnVrYXMgZGFyYnMgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IkRydWthcyBkYXJiaSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkF0Y2VsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iUmVzdGFydMSTdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJOYXYgc2F2aWVub2p1bWEgYXIgcHJpbnRlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJuZXppbsSBbXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7CoOKAlCBuYXYgcGllZWphbXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iTmV2YXLEk2phIMSjZW5lcsSTdCBkcnVrYXMgZGFyYnUiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iTWVsbmJhbHRzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IktyxIFzYSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3J0cmV0cyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJBaW5hdmEiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IlZpc2kiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iRGlhcGF6b25zIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDI5Mzg3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+ItCl0Y3QstC70Y3Qs9GH0LjQudC9INCx0YPRhNC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4i0J/RgNC40L3RgtC10YDQuNC50L0g0YLQvtGF0LjRgNCz0L7QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+ItCl0Y3QstC70Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+ItCl0LDQtNCz0LDQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLQpdKv0LvRjdGN0L0g0LDQstCw0LPRhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiLQpdGD0YPQu9Cx0LDRgNGD0YPQtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4i0KbQsNCw0YHQvdGLINGF0Y3QvNC20Y3RjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+ItOo0L3Qs9OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i0KfQuNCz0LvRjdC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikg0YXRg9GD0LTQsNGBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLQti7QvdGMLiAx4oCTNSwgOCwgMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4i0KXRjdCy0LvRjdGF0Y3RjdGAINGD0YDRjNC00YfQuNC70LDQvSDRhdCw0YDQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLQo9GA0YzQtNGH0LjQu9Cw0L0g0YXQsNGA0LDRhdGL0L0g0YLRg9C70LQgUERGINGF0LDRgNCw0LPRh9C40LnQsyDRgdGD0YPQu9Cz0LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i0KXRjdCy0LvRjdCz0Ycg0LDQv9C/INCz0LDRhtGB0LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiLQpdGD0YPQtNCw0YEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLQpdGN0LLQu9GN0YUg0LDQttC40Lsg0q/Sr9GB0LPRjdC2INCx0LDQudC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJQREYg0LHQvtC70LPQvtC2INGF0LDQtNCz0LDQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i0JHSr9GFINC/0YDQuNC90YLQtdGA0q/Sr9C04oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiLQpdGN0LLQu9GN0YUg0LTQuNCw0LvQvtCz0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4i0KXQsNC50YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i0JHSr9GFINC/0YDQuNC90YLQtdGA0q/Sr9C0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i0q7QudC70YfQuNC70LPRjdGNINC90Y3QvNGN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLQpdCw0LnQu9GC0YvQvSDQvdKv0LTQuNC50LMg0LPQsNGA0LPQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+ItCl0LDQudC70YLRi9C9INC90q/QtNC40LnQsyDQtNCw0LvQtNC70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+ItCf0YDQuNC90YLQtdGAINC90Y3QvNGN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLQn9GA0LjQvdGC0LXRgCDRgdC+0L3Qs9C+0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLQn9GA0LjQvdGC0LXRgNC40LnQsyDQvNCw0YDRgtCw0YUiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g0L/RgNC40L3RgtC10YAg0L7Qu9C00YHQvtC9IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiDQv9GA0LjQvdGC0LXRgCDQvtC70LTRgdC+0L0iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLQpdGN0LLQu9GN0YUg0q/QudC70YfQuNC70LPRjdGN0LMg0YHQvtC90LPQvtGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLQn9GA0LjQvdGC0LXRgCDRhdCw0LnQtiDQsdCw0LnQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4i0J/RgNC40L3RgtC10YAg0L7Qu9C00YHQvtC90LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4i0KXRjdCy0LvRjdC2INCx0LDQudC90LAgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+ItCm0YPRhtC70LDQtiDQsdCw0LnQvdCwIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+ItCf0YDQuNC90YLQtdGA0LjQudC9INCw0LvQtNCw0LAgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+ItCf0YDQuNC90YLQtdGAINGF0L7RgNC40LPQu9C+0LPQtNGB0L7QvSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g0YXRjdCy0LvRjdGFINCw0LbQuNC7IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiDRhdGN0LLQu9GN0YUg0LDQttC70YPRg9C0IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+ItCm0YPRhtC70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i0JTQsNGF0LjQvSDRjdGF0LvSr9Kv0LvRjdGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+ItCf0YDQuNC90YLQtdGAINGF0L7Qu9Cx0L7Qs9C00L7QvtCz0q/QuSDQsdCw0LnQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i0YLQvtC00L7RgNGF0L7QudCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMg0LDRiNC40LPQu9Cw0YUg0LHQvtC70L7QvNC20LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+ItCl0Y3QstC70Y3RhSDQsNC20LvRi9CzINKv0q/RgdCz0Y3QtiDRh9Cw0LTRgdCw0L3Qs9Kv0LkiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i0KXQsNGAICZhbXA7INCm0LDQs9Cw0LDQvSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLTqNC90LPTqSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLQkdC+0YHQvtC+IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+ItCl0Y3QstGC0Y3RjSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4i0JHSr9Cz0LQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i0KXSr9GA0Y3RjSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NhNWQyYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQZW5zcHVsIENldGFrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iVGV0YXBhbiBwZW5jZXRhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IkNldGFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iU2ltcGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iRGVzdGluYXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IlNhbGluYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlNhaXogS2VydGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iV2FybmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiJPcmllbnRhc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJIYWxhbWFuICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJjdGguIDHigJQ1LDgsMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iUHJhdG9udG9uIGNldGFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJQYXNhbmcgcGVtYXBhciBQREYgdW50dWsgcHJhdG9udG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJBcGwgcGVyY2V0YWthbiByYW5hcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJIYWxhbWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iTWVuamFuYSBrZXJqYSBjZXRhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlNpbXBhbiBzZWJhZ2FpIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJTZW11YSBwZW5jZXRhay4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iRGlhbG9nIGNldGFrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iQ2FyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJTZW11YSBwZW5jZXRhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IlRhbWJhaGthbiBwZXJraGlkbWF0YW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJLb3RhayBjYXJpYW4gZGl0dW5qdWtrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iS290YWsgY2FyaWFuIHRlcnNlbWJ1bnlpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iVGFtYmFoIHBlbmNldGFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iUGlsaWggcGVuY2V0YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJMdXBha2FuIHBlbmNldGFrIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHBlbmNldGFrIGRpdGVtdWkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHBlbmNldGFrIGRpdGVtdWkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJQaWxpaCBwZXJraGlkbWF0YW4gY2V0YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Ik1lbmNhcmkgcGVuY2V0YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJUaWFkYSBwZW5jZXRhayBkaXRlbXVpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iTWVuY2V0YWsgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ik1lbWJhdGFsa2FuIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlJhbGF0IHBlbmNldGFrIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQZW5jZXRhayBkaXNla2F0IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iS2VyamEgY2V0YWthbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iS2VyamEgY2V0YWthbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkJhdGFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJNdWxha2FuIHNlbXVsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJUaWFkYSBzYW1idW5nYW4ga2UgcGVuY2V0YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJ0aWRhayBkaWtldGFodWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIHRpZGFrIHRlcnNlZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IlRpZGFrIGRhcGF0IG1lbmphbmEga2VyamEgY2V0YWthbiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJIaXRhbSAmYW1wOyBQdXRpaCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJXYXJuYSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3RyZXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iTGFuZHNrYXAiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IlNlbXVhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+Ikp1bGF0IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhNjBjNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlV0c2tyaWZ0c2vDuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJTa3JpdmVyaW5uc3RpbGxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IlNrcml2IHV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iTGFncmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJEZXN0aW5hc2pvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJLb3BpZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlBhcGlyc3TDuHJyZWxzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IkZhcmdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iUmV0bmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlNpZGVyICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJmLmVrcy4gMeKAkzUsIDgsMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iVXRza3JpZnRzZm9yaMOlbmRzdmlzbmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iSW5zdGFsbGVyIFBERi1sZXNlciBmb3IgZm9yaMOlbmRzdmlzbmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iVXRza3JpZnRzYXBwZW4ga3Jhc2pldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJTaWRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVyZXJlciB1dHNrcmlmdHNqb2JiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iTGFncmUgc29tIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJBbGxlIHNrcml2ZXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJTa3JpdiB1dCBkaWFsb2ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iU8O4ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJBbGxlIHNrcml2ZXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iTGVnZyB0aWwgdGplbmVzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJTw7hrZWZlbHRldCB2aXNlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJTw7hrZWZlbHRldCBlciBza2p1bHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJMZWdnIHRpbCBza3JpdmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iVmVsZyBza3JpdmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iR2xlbSBza3JpdmVyZW4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gc2tyaXZlciBibGUgZnVubmV0IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBza3JpdmVyZSBibGUgZnVubmV0IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iVmVsZyB1dHNrcmlmdHN0amVuZXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iU8O4a2VyIGV0dGVyIHNrcml2ZXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iRmFudCBpbmdlbiBza3JpdmVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjI5NTkwMzk1Nzc2MjQ0NzM2MiI+IlNrcml2ZXIgdXQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkF2YnJ5dGVyIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlNrcml2ZXJmZWlsIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJTa3JpdmVyZW4gYmxva2tlcnRlIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iVXRza3JpZnRzam9iYiBmb3IgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IlV0c2tyaWZ0c2pvYmJlciBmb3IgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJBdmJyeXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlN0YXJ0IHDDpSBueXR0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkluZ2VuIGZvcmJpbmRlbHNlIG1lZCBza3JpdmVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJ1a2plbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIHV0aWxnamVuZ2VsaWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iS3VubmUgaWtrZSBnZW5lcmVyZSB1dHNrcmlmdHNqb2JiZW4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iU3ZhcnQgb2cgaHZpdHQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iRmFyZ2UiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iU3TDpWVuZGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iTGlnZ2VuZGUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IkFsbGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iT21yw6VkZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMTI1MDgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJBZmRydWtzcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IlByaW50ZXJpbnN0ZWxsaW5nZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJBZmRydWtrZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJPcHNsYWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iQmVzdGVtbWluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJBYW50YWwgZXhlbXBsYXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iUGFwaWVyZm9ybWFhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IktsZXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iU3RhbmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJQYWdpbmFcJ3MgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+ImJpanYuIDHigJQ1LDgsMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iQWZkcnVrdm9vcmJlZWxkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJQZGYtdmlld2VyIGluc3RhbGxlcmVuIHZvb3Igdm9vcmJlZWxkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJBZmRydWstYXBwIGdlY3Jhc2h0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlBhZ2luYVwncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkFmZHJ1a3RhYWsgZ2VuZXJlcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iT3BzbGFhbiBhbHMgcGRmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IkFsbGUgcHJpbnRlcnPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkFmZHJ1a2RpYWxvb2d2ZW5zdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IlpvZWtlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJBbGxlIHByaW50ZXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iU2VydmljZSB0b2V2b2VnZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJab2VrdmFrIHdlZXJnZWdldmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlpvZWt2YWsgdmVyYm9yZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iUHJpbnRlciB0b2V2b2VnZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJQcmludGVyIHNlbGVjdGVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJQcmludGVyIHZlcmdldGVuIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXIgZ2V2b25kZW4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXJzIGdldm9uZGVuIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQWZkcnVrc2VydmljZSBraWV6ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlByaW50ZXJzIHpvZWtlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IkdlZW4gcHJpbnRlcnMgZ2V2b25kZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IGFmZHJ1a2tlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gYW5udWxlcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJQcmludGVyZm91dCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBnZWJsb2trZWVyZCBkb29yIHByaW50ZXIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiBhZmRydWt0YWFrIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiBhZmRydWt0YWtlbiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJBbm51bGVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+Ik9wbmlldXcgc3RhcnRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJHZWVuIHZlcmJpbmRpbmcgbWV0IHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJvbmJla2VuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgbmlldCBiZXNjaGlrYmFhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJLYW4gZGUgYWZkcnVrdGFhayBuaWV0IGdlbmVyZXJlbiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJad2FydC13aXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iS2xldXIiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUG9ydHJldCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJMYW5kc2NoYXAiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IkFsbGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iQmVyZWlrIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhY2M3NgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IkJ1Zm9yIHd5ZHJ1a3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iVXN0YXdpZW5pYSBkcnVrYXJraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IkRydWt1aiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IlphcGlzeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+Ik1pZWpzY2UgZG9jZWxvd2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iS29waWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlJvem1pYXIgcGFwaWVydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IktvbG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3JpZW50YWNqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlN0cm9ueSAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4ibnAuIDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlBvZGdsxIVkIHd5ZHJ1a3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IlphaW5zdGFsdWogcHJ6ZWdsxIVkYXJrxJkgUERGLCBieSB6b2JhY3p5xIcgcG9kZ2zEhWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IkFwbGlrYWNqYSBkcnVrdWrEhWNhIHVsZWfFgmEgYXdhcmlpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlN0cm9ueSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVyb3dhbmllIHphZGFuaWEgd3lkcnVrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlphcGlzeiBqYWtvIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJXc3p5c3RraWUgZHJ1a2Fya2nigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+Ik9rbm8gZHJ1a293YW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJTenVrYWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iV3N6eXN0a2llIGRydWthcmtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iRG9kYWogdXPFgnVnxJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJQb2xlIHd5c3p1a2l3YW5pYSBqZXN0IHdpZG9jem5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlBvbGUgd3lzenVraXdhbmlhIGplc3QgdWtyeXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iRG9kYWogZHJ1a2Fya8SZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iV3liaWVyeiBkcnVrYXJrxJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJOaWUgemFwYW1pxJl0dWogZHJ1a2Fya2kiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IlpuYWxlemlvbm8gPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBkcnVrYXJrxJkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiJabmFsZXppb25lIGRydWthcmtpOiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iV3liaWVyeiB1c8WCdWfEmSBkcnVrb3dhbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTenVrYW5pZSBkcnVrYXJlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Ik5pZSB6bmFsZXppb25vIGRydWthcmVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iRHJ1a293YW5pZTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkFudWxvd2FuaWU6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkLFgsSFZCBkcnVrYXJraTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IkRydWthcmthIHphYmxva293YcWCYSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4gemFkYW5pZSBkcnVrb3dhbmlhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iWmFkYW5pYSBkcnVrb3dhbmlhOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkFudWx1aiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iT2Qgbm93YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJCcmFrIHBvxYLEhWN6ZW5pYSB6IGRydWthcmvEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+ImJyYWsgaW5mb3JtYWNqaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgbmllZG9zdMSZcG5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+Ik5pZSB1ZGHFgm8gc2nEmSB3eWdlbmVyb3dhxIcgemFkYW5pYSBkcnVrb3dhbmlhIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IkN6YXJuby1iaWHFgmUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iS29sb3IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUGlvbm93YSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJQb3ppb21hIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJXc3p5c3RraWUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iWmFrcmVzIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmZjMzk1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW50IFNwb29sZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iRGVmaW5pw6fDtWVzIGRhIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJJbXByaW1pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+Ikd1YXJkYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJEZXN0aW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IkPDs3BpYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlRhbWFuaG8gZG8gcGFwZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJDb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiJPcmllbnRhw6fDo28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJQw6FnaW5hcyAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4icC4gZXguIDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlByw6ktdmlzdWFsaXphw6fDo28gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iSW5zdGFsYXIgbyBsZWl0b3IgZGUgUERGIHBhcmEgcHLDqS12aXN1YWxpemHDp8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iQSBhcGxpY2HDp8OjbyBkZSBpbXByZXNzw6NvIGJsb3F1ZW91Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlDDoWdpbmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iQSBnZXJhciB0YXJlZmEgZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+Ikd1YXJkYXIgY29tbyBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iVG9kYXMgYXMgaW1wcmVzc29yYXMuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkNhaXhhIGRlIGRpw6Fsb2dvIGRlIGltcHJlc3PDo28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iUGVzcXVpc2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlRvZGFzIGFzIGltcHJlc3NvcmFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iQWRpY2lvbmFyIHNlcnZpw6dvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iQ2FpeGEgZGUgcGVzcXVpc2EgYXByZXNlbnRhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iQ2FpeGEgZGUgcGVzcXVpc2Egb2N1bHRhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJBZGljaW9uYXIgaW1wcmVzc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IlNlbGVjaW9uYXIgaW1wcmVzc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IkVzcXVlY2VyIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gaW1wcmVzc29yYSBlbmNvbnRyYWRhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBpbXByZXNzb3JhcyBlbmNvbnRyYWRhcyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkVzY29saGVyIG8gc2VydmnDp28gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iQSBwcm9jdXJhciBpbXByZXNzb3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Ik5lbmh1bWEgaW1wcmVzc29yYSBlbmNvbnRyYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iQSBpbXByaW1pciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQSBjYW5jZWxhciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJFcnJvIGRhIGltcHJlc3NvcmEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IkEgaW1wcmVzc29yYSBibG9xdWVvdSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IlRhcmVmYSBkZSBpbXByZXNzw6NvOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4iVGFyZWZhcyBkZSBpbXByZXNzw6NvOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkNhbmNlbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJSZWluaWNpYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iU2VtIGxpZ2HDp8OjbyDDoCBpbXByZXNzb3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4iZGVzY29uaGVjaWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBpbmRpc3BvbsOtdmVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+Ik7Do28gZm9pIHBvc3PDrXZlbCBnZXJhciBhIHRhcmVmYSBkZSBpbXByZXNzw6NvIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IlByZXRvIGUgYnJhbmNvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IkNvciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJWZXJ0aWNhbCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJIb3Jpem9udGFsIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJUb2RhcyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJJbnRlcnZhbG8iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmMxNTdkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iU3AuIGRlIGltcHJlc3PDo28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iQ29uZmlndXIuIGRhIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJJbXByaW1pciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IlNhbHZhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkRlc3Rpbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4iQ8OzcGlhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iVGFtYW5obyBkbyBwYXBlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IkNvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGHDp8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlDDoWdpbmFzICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJFeC46IDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJWaXN1YWxpemHDp8OjbyBkZSBpbXByZXNzw6NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJJbnN0YWxhciBvIHZpc3VhbGl6YWRvciBkZSBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+Ik8gYXBsaWNhdGl2byBkZSBpbXByZXNzw6NvIGZhbGhvdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJQw6FnaW5hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlcmFuZG8gdHJhYmFsaG8gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlNhbHZhciBjb21vIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJUb2RhcyBhcyBpbXByZXNzb3Jhc+KApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iRGnDoWxvZ28gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJQZXNxdWlzYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iVG9kYXMgYXMgaW1wcmVzc29yYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJBZGljaW9uYXIgc2VydmnDp28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJDYWl4YSBkZSBwZXNxdWlzYSBleGliaWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IkNhaXhhIGRlIHBlc3F1aXNhIG9jdWx0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkFkaWNpb25hciBpbXByZXNzb3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iU2VsZWNpb25hciBpbXByZXNzb3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iRXNxdWVjZXIgaW1wcmVzc29yYSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBpbXByZXNzb3JhIGVuY29udHJhZGEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGltcHJlc3NvcmFzIGVuY29udHJhZGFzIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iU2VsZWNpb25lIG8gc2VydmnDp28gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUHJvY3VyYW5kbyBpbXByZXNzb3JhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Ik5lbmh1bWEgaW1wcmVzc29yYSBlbmNvbnRyYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iSW1wcmltaW5kbyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQ2FuY2VsYW5kbyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJFcnJvIGFvIGltcHJpbWlyIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJBIGltcHJlc3NvcmEgYmxvcXVlb3UgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJUcmFiYWxobyBkZSBpbXByZXNzw6NvIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJUcmFiYWxob3MgZGUgaW1wcmVzc8OjbyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkNhbmNlbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJSZWluaWNpYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iU2VtIGNvbmV4w6NvIGNvbSBhIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJkZXNjb25oZWNpZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIG7Do28gZGlzcG9uw612ZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iTsOjbyBmb2kgcG9zc8OtdmVsIGdlcmFyIG8gdHJhYmFsaG8gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJQcmV0byBlIGJyYW5jbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJDb3IiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iUmV0cmF0byI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJQYWlzYWdlbSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVG9kYXMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iSW50ZXJ2YWxvIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzljM2JkYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IkRlcnVsYXRvciBwcmludC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iU2V0xINyaWxlIGltcHJpbWFudGVpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iUHJpbnRhyJtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iU2FsdmHIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJEZXN0aW5hyJtpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJDb3BpaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iRm9ybWF0dWwgaMOicnRpZWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJDb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGFyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlBhZ2luaSAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iZGUgZXguIDEtNSwgOCwgMTEtMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlByZXZpenVhbGl6YcibaSBwcmludGFyZWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbGHIm2kgUERGIHZpZXdlciBwZW50cnUgcHJldml6dWFsaXphcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IkFwbGljYcibaWEgZGUgcHJpbnRhcmUgcy1hIGJsb2NhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJQYWdpbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJTZSBnZW5lcmVhesSDIHNhcmNpbsSDIHByaW50YXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iU2FsdmHIm2kgY2EgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlRvYXRlIGltcHJpbWFudGVsZS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iQ2FzZXRhIGRlIGRpYWxvZyBkZSBwcmludGFyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJDxIN1dGHIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iVG9hdGUgaW1wcmltYW50ZWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iQWTEg3VnYcibaSB1biBzZXJ2aWNpdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IkNhc2V0YSBkZSBjxIN1dGFyZSBlc3RlIGFmaciZYXTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJDYXNldGEgZGUgY8SDdXRhcmUgZXN0ZSBhc2N1bnPEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkFkxIN1Z2HIm2kgbyBpbXByaW1hbnTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IlNlbGVjdGHIm2kgaW1wcmltYW50YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Ik9taXRlyJtpIGltcHJpbWFudGEiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gaW1wcmltYW50xIMgZ8SDc2l0xIMiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IChkZSkgaW1wcmltYW50ZSBnxINzaXRlIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQWxlZ2XIm2kgc2VydmljaXVsIGRlIHByaW50YXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTZSBjYXV0xIMgaW1wcmltYW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Ik51IGF1IGZvc3QgZ8SDc2l0ZSBpbXByaW1hbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iU2UgcHJpbnRlYXrEgyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iU2UgYW51bGVhesSDIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkVyb2FyZSBkZSBwcmludGFyZTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlByaW50YXJlIGJsb2NhdMSDOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IlNhcmNpbsSDIGRlIHByaW50YXJlIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJTYXJjaW5pIGRlIHByaW50YXJlIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQW51bGHIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlcG9ybmnIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iTnUgZXhpc3TEgyBjb25leGl1bmUgbGEgbyBpbXByaW1hbnTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+Im5lY3Vub3NjdXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gLSBpbmRpc3BvbmliaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iTnUgcy1hIHB1dHV0IGdlbmVyYSBzYXJjaW5hIGRlIHByaW50YXJlIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IkFsYi1uZWdydSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJDb2xvciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3J0cmV0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+IlBlaXNhaiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVG9hdGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iSW50ZXJ2YWwiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjdmM2M4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4i0KHQv9GD0LvQtdGAINC/0LXRh9Cw0YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLQndCw0YHRgtGA0L7QudC60Lgg0L/RgNC40L3RgtC10YDQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+ItCf0LXRh9Cw0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+ItCh0L7RhdGA0LDQvdC40YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+ItCf0YDQuNC90YLQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+ItCa0L7Qv9C40LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+ItCk0L7RgNC80LDRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+ItCf0LXRh9Cw0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+ItCe0YDQuNC10L3RgtCw0YbQuNGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4i0KHQotCg0JDQndCY0KbQqyAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i0L3QsNC/0YAuLCAx4oCTNSwgOCwgMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4i0J/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3Ri9C5INC/0YDQvtGB0LzQvtGC0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+ItCj0YHRgtCw0L3QvtCy0LjRgtGMINGB0YDQtdC00YHRgtCy0L4g0L/RgNC+0YHQvNC+0YLRgNCwIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i0KHQsdC+0Lkg0L/RgNC40LvQvtC20LXQvdC40Y8g0L/QtdGH0LDRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+ItCa0L7Qu9C40YfQtdGB0YLQstC+INGB0YLRgNCw0L3QuNGGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i0KHQvtC30LTQsNC90LjQtSDQt9Cw0LTQsNC90LjRjyDQv9C10YfQsNGC0LjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiLQodC+0YXRgNCw0L3QuNGC0Ywg0LrQsNC6IFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLQktGB0LUg0L/RgNC40L3RgtC10YDRiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4i0JTQuNCw0LvQvtCz0L7QstC+0LUg0L7QutC90L4g0L/QtdGH0LDRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+ItCf0L7QuNGB0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i0JLRgdC1INC/0YDQuNC90YLQtdGA0YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiLQlNC+0LHQsNCy0LjRgtGMINGB0LvRg9C20LHRgyDQv9C10YfQsNGC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLQntC60L3QviDQv9C+0LjRgdC60LAg0L/QvtC60LDQt9Cw0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLQntC60L3QviDQv9C+0LjRgdC60LAg0YHQutGA0YvRgtC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i0JTQvtCx0LDQstC40YLRjCDQv9GA0LjQvdGC0LXRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+ItCS0YvQsdGA0LDRgtGMINC/0YDQuNC90YLQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4i0KPQtNCw0LvQuNGC0Ywg0L/RgNC40L3RgtC10YAiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+ItCd0LDQudC00LXQvSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+INC/0YDQuNC90YLQtdGAIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4i0J3QsNC50LTQtdC90L4g0L/RgNC40L3RgtC10YDQvtCyOiA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i0JLRi9Cx0LXRgNC40YLQtSDRgdC70YPQttCx0YMg0L/QtdGH0LDRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLQn9C+0LjRgdC6INC/0YDQuNC90YLQtdGA0L7QsuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+ItCd0LjRh9C10LPQviDQvdC1INC90LDQudC00LXQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4i0J/QtdGH0LDRgtGMINC30LDQtNCw0L3QuNGPIFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPlwi4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4i0J7RgtC80LXQvdCwINC30LDQtNCw0L3QuNGPIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+ItCe0YjQuNCx0LrQsCDQt9Cw0LTQsNC90LjRjyBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+ItCX0LDQtNCw0L3QuNC1IFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPlwiINC30LDQsdC70L7QutC40YDQvtCy0LDQvdC+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+ItCX0LDQtNCw0L3QuNC1INC/0LXRh9Cw0YLQuDogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+ItCX0LDQtNCw0L3QuNGPINC/0LXRh9Cw0YLQuDogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLQntGC0LzQtdC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+ItCf0L7QstGC0L7RgNC40YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLQndC10YIg0YHQstGP0LfQuCDRgSDQv9GA0LjQvdGC0LXRgNC+0LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLQvdC10LjQt9Cy0LXRgdGC0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPsKg4oCTINC90LXQtNC+0YHRgtGD0L/QtdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC/0YDQsNCy0LjRgtGMINC00L7QutGD0LzQtdC90YIg0L3QsCDQv9C10YfQsNGC0YwuIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+ItCn0LXRgNC90L4t0LHQtdC70LDRjyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLQptCy0LXRgtC90LDRjyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLQmtC90LjQs9CwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+ItCQ0LvRjNCx0L7QvCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4i0JLRgdC1IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+ItCU0LjQsNC/0LDQt9C+0L0iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWEwMjJkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iWmFyYcSPb3ZhxI0gdGxhxI1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+Ik5hc3RhdmVuaWEgdGxhxI1pYXJuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IlRsYcSNacWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iVWxvxb5pxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJDaWXEviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJLw7NwaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlZlxL5rb3PFpSBwYXBpZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iRmFyYmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiJPcmllbnTDoWNpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlNUUsOBTktZICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJuYXByLiAx4oCTNSwgOCwgMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iVWvDocW+a2EgcHJlZCB0bGHEjW91Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJJbsWhdGFsb3ZhxaUgem9icmF6b3ZhxI0gUERGIG5hIHpvYnJhemVuaWUgdWvDocW+a3kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IkFwbGlrw6FjaWEgcHJlIHRsYcSNIHpseWhhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iU3RyYW55Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iR2VuZXJ1amUgc2EgdGxhxI1vdsOhIMO6bG9oYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlVsb8W+acWlIGFrbyBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iVsWhZXRreSB0bGHEjWlhcm5lLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJEaWFsw7Nnb3bDqSBva25vIHRsYcSNZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJWWUjEvUFEw4FWQU5JRSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJWxaFldGt5IHRsYcSNaWFybmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJQcmlkYcWlIHNsdcW+YnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJWeWjEvmFkw6F2YWNpZSBwb2xlIHNhIHpvYnJhenVqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJWeWjEvmFkw6F2YWNpZSBwb2xlIGplIHNrcnl0w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJQcmlkYcWlIHRsYcSNaWFyZcWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4iVnlicmHFpSB0bGHEjWlhcmXFiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Ik9kc3Ryw6FuacWlIHRsYcSNaWFyZcWIIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiJOYcWhbGEgc2EgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiB0bGHEjWlhcmXFiCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+IlBvxI1ldCBuw6FqZGVuw71jaCB0bGHEjWlhcm7DrTogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlbDvWJlciB0bGHEjW92ZWogc2x1xb5ieSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iVnloxL5hZMOhdmFuaWUgdGxhxI1pYXJuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJOZW5hxaFsaSBzYSDFvmlhZG5lIHRsYcSNaWFybmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJQcmViaWVoYSB0bGHEjSDDumxvaHkgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IlByZWJpZWhhIHpydcWhZW5pZSDDumxvaHkgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iQ2h5YmEgdGxhxI1pYXJuZSDigJMgw7psb2hhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJUbGHEjWlhcmXFiCB6YWJsb2suIMO6bG9odSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IlBvxI1ldCB0bGHEjW92w71jaCDDumxvaDogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IlBvxI1ldCB0bGHEjW92w71jaCDDumxvaDogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJacnXFoWnFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iU3B1c3RpxaUgem5vdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4ixb1pYWRuZSBwcmlwb2plbmllIGsgdGxhxI1pYXJuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+Im5lem7DoW1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBuaWUgamUgayBkaXNwb3rDrWNpaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiJUbGHEjW92w7ogw7psb2h1IG5pZSBqZSBtb8W+bsOpIHZ5dHZvcmnFpSI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLEjGllcm5vYmllbGUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iRmFyYmEiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iTmEgdsO9xaFrdSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJOYSDFocOtcmt1IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJWxaFldGt5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IlJvenNhaCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNGZlOTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJUaXNrLiB2IG96YWRqdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiJOYXN0YXZpdHZlIHRpc2thbG5pa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJOYXRpc25pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iU2hyYW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iQ2lsaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiLFoHQuIGtvcGlqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJWZWxpa29zdCBwYXBpcmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iQmFydm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iUG9zdGF2aXRldiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IsWgdC4gc3RyYW5pICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJucHIuIDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJQcmVkb2dsZWQgdGlza2FuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IlphIHByZWRvZ2xlZCBuYW1lc3RpdGUgcHJlZ2xlZG92YWxuaWsgemEgUERGLWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJBcGxpa2FjaWphIHphIHRpc2thbmplIHNlIGplIHpydcWhaWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IsWgdC4gc3RyYW5pOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IlVzdHZhcmphbmplIHphaHRldmUgemEgdGlzayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlNocmFuaSBrb3QgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlZzaSB0aXNrYWxuaWtpIOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iUG9nb3Zvcm5vIG9rbm8gemEgdGlza2FuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iSXNrYW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJWc2kgdGlza2FsbmlraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IkRvZGFqIHN0b3JpdGV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iSXNrYWxubyBwb2xqZSBqZSBwcmlrYXphbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iSXNrYWxubyBwb2xqZSBqZSBza3JpdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJEb2RhamFuamUgdGlza2FsbmlrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+Ikl6YmlyYSB0aXNrYWxuaWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iT2RzdHJhbml0ZXYgdGlza2FsbmlrYSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4iTmFqZGVuIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gdGlza2FsbmlrIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4ixaB0ZXZpbG8gbmFqZGVuaWggdGlza2Fsbmlrb3Y6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJJemJlcml0ZSB0aXNrYWxubyBzdG9yaXRldiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iSXNrYW5qZSB0aXNrYWxuaWtvdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IlRpc2thbG5pa292IG5pIG1vZ2/EjWUgbmFqdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiJUaXNrYW5qZTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IlByZWtsaWM6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Ik5hcGFrYSB0aXNrYWxuaWthOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iVGlza2FsbmlrIGplIGJsb2tpcmFsIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iVGlza2Fsbm8gb3ByYXZpbG86IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJUaXNrYWxuYSBvcHJhdmlsYTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJQcmVrbGnEjWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlphxI1uaSB6bm92YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJOaSBwb3ZlemF2ZSBzIHRpc2thbG5pa29tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4ibmV6bmFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMgbmkgbmEgdm9sam8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iVGlza2FsbmVnYSBvcHJhdmlsYSBuaSBiaWxvIG1vZ2/EjWUgdXN0dmFyaXRpIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IsSMcm5vLWJlbG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iQmFydm5vIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+Ik5hdnBpxI1ubyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJMZcW+ZcSNZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iVnNlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+Ik9ic2VnIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhYjFhNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+ItCo0YLQsNC80L8uINC40Lcg0LzQtdC80L7RgC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4i0J/QvtC00LXRiNCw0LLQsNGa0LAg0YjRgtCw0LzQv9Cw0YfQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+ItCo0YLQsNC80L/QsNGYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4i0KHQsNGH0YPQstCw0ZgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLQntC00YDQtdC00LjRiNGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i0JrQvtC/0LjRmNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLQktC10LvQuNGH0LjQvdCwINC/0LDQv9C40YDQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+ItCR0L7RmNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i0J/QvtC70L7QttCw0ZgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLQodGC0YDQsNC90LjRhtC1ICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLQvdC/0YAuIDHigJM1LCA4LCAxMeKAkzEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLQn9GA0LXQs9C70LXQtCDQv9GA0LUg0YjRgtCw0LzQv9Cw0ZrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4i0JjQvdGB0YLQsNC70LjRgNCw0ZggUERGINC/0YDQuNC60LDQt9C40LLQsNGHINC30LAg0L/RgNC10LPQu9C10LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+ItCQ0L/Qu9C40LrQsNGG0LjRmNCwINC30LAg0YjRgtCw0LzQv9Cw0ZrQtSDRmNC1INC+0YLQutCw0LfQsNC70LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4i0KHRgtGA0LDQvdC40YbQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+ItCT0LXQvdC10YDQuNGB0LDRmtC1INC30LDQtNCw0YLQutCwINC30LAg0YjRgtCw0LzQv9Cw0ZrQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+ItCh0LDRh9GD0LLQsNGYINC60LDQviBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i0KHQstC4INGI0YLQsNC80L/QsNGH0LjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+ItCU0LjRmNCw0LvQvtCzINC30LAg0YjRgtCw0LzQv9Cw0ZrQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLQn9GA0LXRgtGA0LDQttC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+ItCh0LLQuCDRiNGC0LDQvNC/0LDRh9C4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i0JTQvtC00LDRmCDRg9GB0LvRg9Cz0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLQntC60LLQuNGAINC30LAg0L/RgNC10YLRgNCw0LPRgyDRmNC1INC/0YDQuNC60LDQt9Cw0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4i0J7QutCy0LjRgCDQt9CwINC/0YDQtdGC0YDQsNCz0YMg0ZjQtSDRgdCw0LrRgNC40LLQtdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i0JTQvtC00LDRmCDRiNGC0LDQvNC/0LDRhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+ItCY0LfQsNCx0LXRgNC4INGI0YLQsNC80L/QsNGHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4i0JfQsNCx0L7RgNCw0LLQuCDRiNGC0LDQvNC/0LDRhyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4i0J/RgNC+0L3QsNGS0LXQvSDRmNC1IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g0YjRgtCw0LzQv9Cw0YciPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiLQn9GA0L7QvdCw0ZLQtdC90L4g0ZjQtSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+INGI0YLQsNC80L/QsNGH0LAiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLQmNC30LDQsdC10YDQuNGC0LUg0YPRgdC70YPQs9GDINGI0YLQsNC80L/QsNGa0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+ItCf0YDQtdGC0YDQsNCz0LAg0YjRgtCw0LzQv9Cw0YfQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+ItCd0LjRmNC1INC/0YDQvtC90LDRktC10L0g0L3QuNGY0LXQtNCw0L0g0YjRgtCw0LzQv9Cw0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLQqNGC0LDQvNC/0LAg0YHQtSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4i0J7RgtC60LDQt9GD0ZjQtSDRgdC1IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+ItCT0YDQtdGI0LrQsCDRiNGC0LDQvNC/0LDRh9CwIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLQqNGC0LDQvNC/0LDRhyDRmNC1INCx0LvQvtC60LjRgNCw0L4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiLQl9Cw0LTQsNGC0LDQuiDRiNGC0LDQvNC/0LDRmtCwIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiLQl9Cw0LTQsNGG0Lgg0YjRgtCw0LzQv9Cw0ZrQsCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+ItCe0YLQutCw0LbQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i0J/QvtC90L7QstC+INC/0L7QutGA0LXQvdC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+ItCd0LXQvNCwINCy0LXQt9C1INGB0LAg0YjRgtCw0LzQv9Cw0YfQtdC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i0L3QtdC/0L7Qt9C90LDRgtC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyDQvdC10LTQvtGB0YLRg9C/0LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLQndC40ZjQtSDQvNC+0LPRg9Gb0LUg0LPQtdC90LXRgNC40YHQsNGC0Lgg0LfQsNC00LDRgtCw0Log0LfQsCDRiNGC0LDQvNC/0LDRmtC1Ijwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+ItCm0YDQvdC+LdCx0LXQu9C+IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+ItCR0L7RmNCwIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+ItCj0YHQv9GA0LDQstC90L4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4i0JLQvtC00L7RgNCw0LLQvdC+IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLQodCy0LUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i0J7Qv9GB0LXQsyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyODZmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJVdHNrcmlmdHNrw7YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iU2tyaXZhcmluc3TDpGxsbmluZ2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iU2tyaXYgdXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiJTcGFyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkRlc3RpbmF0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IktvcGlvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iUGFwcGVyc3N0b3JsZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJGw6RyZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+Ik9yaWVudGVyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iU2lkb3IgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+InQuZXguIDHigJM1LDgsMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iRsO2cmhhbmRzZ3JhbnNrbmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iSW5zdGFsbGVyYSBQREYtbMOkc2FyZSBmw7ZyIGbDtnJoYW5kc2dyYW5za25pbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IlV0c2tyaWZ0c2FwcGVuIGtyYXNjaGFkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJTaWRvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVyZXJhciB1dHNrcmlmdHNqb2JiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4iU3BhcmEgc29tIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJBbGxhIHNrcml2YXJlIC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iRGlhbG9ncnV0YW4gU2tyaXYgdXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iU8O2ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJBbGxhIHNrcml2YXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iTMOkZ2cgdGlsbCB0asOkbnN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iU8O2a3J1dGFuIHZpc2FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IlPDtmtydXRhbiDDpHIgZG9sZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkzDpGdnIHRpbGwgc2tyaXZhcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJWw6RsaiBlbiBza3JpdmFyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+IlRhIGJvcnQgZW4gc2tyaXZhcmUiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gc2tyaXZhcmUgaGl0dGFkZXMiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHNrcml2YXJlIGhpdHRhZGVzIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iVsOkbGogdXRza3JpZnRzdGrDpG5zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iU8O2a2VyIGVmdGVyIHNrcml2YXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iRGV0IGdpY2sgaW50ZSBhdHQgaGl0dGEgbsOlZ3JhIHNrcml2YXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iU2tyaXZlciB1dCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQXZicnl0ZXIgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iU2tyaXZhcmZlbCBmw7ZyIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJTa3JpdmFyZW4gaGFyIGJsb2NrZXJhdCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+IlV0c2tyaWZ0c2pvYmIg4oCTIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJVdHNrcmlmdHNqb2JiIOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkF2YnJ5dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iU3RhcnRhIG9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkluZ2VuIGFuc2x1dG5pbmcgdGlsbCBza3JpdmFyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJva8OkbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIGludGUgdGlsbGfDpG5nbGlnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IkRldCBnaWNrIGludGUgYXR0IHNrYXBhIHV0c2tyaWZ0c2pvYmJldCI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJTdmFydHZpdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJGw6RyZyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJTdMOlZW5kZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJMaWdnYW5kZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4iQWxsYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiJJbnRlcnZhbGwiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWM4Njg3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4iUHJvZ3JhbXUgeWEga3VhbmRhYSBQcmludGEga3dhIGFqaWxpIHlhIEt1Y2hhcGlzaGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iTWlwYW5naWxpbyB5YSBwcmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJDaGFwaXNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IkhpZmFkaGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJJdGFrYXBvZmlrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJOYWthbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlVrdWJ3YSB3YSBLYXJhdGFzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IlJhbmdpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iTWthbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+Ikt1cmFzYSAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4iay5tLiAx4oCTNSwgOCwgMTHigJMxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iQ2h1bmd1bGlhIGt3YW56YSBrYWJsYSB5YSBrdWNoYXBpc2hhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJTYWtpbmlzaGEga2l0YXphbWFqaSBjaGEgUERGIGt3YSBvbnllc2hvIGxhIGt1Y2h1bmd1bGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiJQcm9ncmFtdSB5YSBrdWNoYXBpc2hhIGltZWFjaGEga3VmYW55YSBrYXppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+Ikt1cmFzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkluYXphbnppc2hhIGthemkgeWEga3VjaGFwaXNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IkhpZmFkaGkga2FtYSBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iUHJpbnRhIHpvdGUuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkNoYXBpc2hhIG1henVuZ3Vtem8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4iVGFmdXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IlByaW50YSB6b3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4iT25nZXphIGh1ZHVtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+Iktpc2FuZHVrdSBjaGEga3V0YWZ1dGlhIGtpbWVvbnllc2h3YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJLaXNhbmR1a3UgY2hhIGt1dGFmdXRpYSBraW1lZmljaHdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iT25nZXphIHByaW50YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IkNoYWd1YSBwcmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJTYWhhdSBwcmludGEiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IlByaW50YSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGltZXBhdGlrYW5hIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iUHJpbnRhIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gemltZXBhdGlrYW5hIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQ2hhZ3VhIGh1ZHVtYSB5YSBwcmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IkluYXRhZnV0YSBwcmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJIYWt1bmEgcHJpbnRhIHppbGl6b3BhdGlrYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iSW5hY2hhcGlzaGEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkluYWdoYWlyaSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJIaXRpbGFmdSB5YSBrdWNoYXBpc2hhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGEgaW1lZnVuZ3dhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iS2F6aSB5YSBrdWNoYXBpc2hhIHlhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJLYXppIHphIGt1Y2hhcGlzaGEgemEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJHaGFpcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IkFuemlzaGEgdXB5YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJIYWt1bmEgbXV1bmdhbmlzaG8ga3dhIHByaW50YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+ImhhaWp1bGlrYW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IC0gaGFpcGF0aWthbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iSGFpa3V3ZXphIGt1dW5kYSBrYXppIHlhIGt1Y2hhcGlzaGEiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iTnlldXNpIG5hIE55ZXVwZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJSYW5naSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJXaW1hIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+Ik1sYWxvIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJab3RlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+Ik1hc2FmYSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMDFkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQcmludCBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IuC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC5gOC4hOC4o+C4t+C5iOC4reC4h+C4nuC4tOC4oeC4nuC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IuC4nuC4tOC4oeC4nuC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IuC4muC4seC4meC4l+C4tuC4gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IuC4m+C4peC4suC4ouC4l+C4suC4hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiLguKrguLPguYDguJnguLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IuC4guC4meC4suC4lOC4guC4reC4h+C4geC4o+C4sOC4lOC4suC4qSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IuC4quC4tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IuC4geC4suC4o+C4p+C4suC4h+C5geC4meC4pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IuC4q+C4meC5ieC4siAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i4LmA4LiK4LmI4LiZIDHigJQ1LDgsMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4i4LiV4Lix4Lin4Lit4Lii4LmI4Liy4LiH4LiB4LmI4Lit4LiZ4Lie4Li04Lih4Lie4LmMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLguJXguLTguJTguJXguLHguYnguIfguYLguJvguKPguYHguIHguKPguKHguJTguLkgUERGIOC5gOC4nuC4t+C5iOC4reC4lOC4ueC4q+C4meC5ieC4suC4leC4seC4p+C4reC4ouC5iOC4suC4hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i4LmB4Lit4Lib4LiB4Liy4Lij4Lie4Li04Lih4Lie4LmM4LiC4Lix4LiU4LiC4LmJ4Lit4LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IuC4q+C4meC5ieC4siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IuC4geC4s+C4peC4seC4h+C4quC4o+C5ieC4suC4h+C4h+C4suC4meC4nuC4tOC4oeC4nuC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IuC4muC4seC4meC4l+C4tuC4geC5gOC4m+C5h+C4mSBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lie4Li04Lih4Lie4LmM4LiX4Lix4LmJ4LiH4Lir4Lih4LiU4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiLguIrguYjguK3guIfguYLguJXguYnguJXguK3guJrguIHguLLguKPguJ7guLTguKHguJ7guYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4i4LiE4LmJ4LiZ4Lir4LiyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IuC5gOC4hOC4o+C4t+C5iOC4reC4h+C4nuC4tOC4oeC4nuC5jOC4l+C4seC5ieC4h+C4q+C4oeC4lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+IuC5gOC4nuC4tOC5iOC4oeC4muC4o+C4tOC4geC4suC4oyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IuC5geC4quC4lOC4h+C4iuC5iOC4reC4h+C4hOC5ieC4meC4q+C4suC4reC4ouC4ueC5iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLguIvguYjguK3guJnguIrguYjguK3guIfguITguYnguJnguKvguLLguK3guKLguLnguYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLguYDguJ7guLTguYjguKHguYDguITguKPguLfguYjguK3guIfguJ7guLTguKHguJ7guYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLguYDguKXguLfguK3guIHguYDguITguKPguLfguYjguK3guIfguJ7guLTguKHguJ7guYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLguYTguKHguYjguJXguYnguK3guIfguIjguLPguYDguITguKPguLfguYjguK3guIfguJ7guLTguKHguJ7guYwiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IuC4nuC4muC5gOC4hOC4o+C4t+C5iOC4reC4h+C4nuC4tOC4oeC4nuC5jCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IOC5gOC4hOC4o+C4t+C5iOC4reC4hyI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iNjUzMzgxNzAzNjYwNzEyODI0MSI+IuC4nuC4muC5gOC4hOC4o+C4t+C5iOC4reC4h+C4nuC4tOC4oeC4nuC5jCA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IOC5gOC4hOC4o+C4t+C5iOC4reC4hyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuC5gOC4peC4t+C4reC4geC4muC4o+C4tOC4geC4suC4o+C4nuC4tOC4oeC4nuC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i4LiB4Liz4Lil4Lix4LiH4LiE4LmJ4LiZ4Lir4Liy4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lie4Li04Lih4Lie4LmMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4i4LmE4Lih4LmI4Lie4Lia4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lie4Li04Lih4Lie4LmMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4i4LiB4Liz4Lil4Lix4LiH4Lie4Li04Lih4Lie4LmMIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiLguIHguLPguKXguLHguIfguKLguIHguYDguKXguLTguIEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i4LiC4LmJ4Lit4Lic4Li04LiU4Lie4Lil4Liy4LiU4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lie4Li04Lih4Lie4LmMIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLguYDguITguKPguLfguYjguK3guIfguJ7guLTguKHguJ7guYzguYTguJTguYnguJrguKXguYfguK3guIEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiLguIfguLLguJnguJ7guLTguKHguJ7guYwgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IuC4h+C4suC4meC4nuC4tOC4oeC4nuC5jCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IuC4ouC4geC5gOC4peC4tOC4gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4LmD4Lir4Lih4LmIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IuC5hOC4oeC5iOC4oeC4teC4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC4leC5iOC4reC5hOC4m+C4ouC4seC4h+C5gOC4hOC4o+C4t+C5iOC4reC4h+C4nuC4tOC4oeC4nuC5jCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+IuC5hOC4oeC5iOC4l+C4o+C4suC4miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDguYTguKHguYjguJ7guKPguYnguK3guKHguYPguIrguYnguIfguLLguJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4i4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4Liq4Lij4LmJ4Liy4LiH4LiH4Liy4LiZ4Lie4Li04Lih4Lie4LmMIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImNvbG9yX21vZGVfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzYwMjk0ODc0NTQxNTE3NDkzNyI+IuC4guC4suC4p+C4lOC4syI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiLguKrguLUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4i4LmB4LiZ4Lin4LiV4Lix4LmJ4LiHIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+IuC5geC4meC4p+C4meC4reC4mSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBhZ2Vfb3B0aW9uc19sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NDIxMzc3NDQyMDExNjk5OTk0Ij4i4LiX4Lix4LmJ4LiH4Lir4Lih4LiUIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IuC4iuC5iOC4p+C4hyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MmM5MzcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQcmludCBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+Ik1nYSBzZXR0aW5nIG5nIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiJJLXByaW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iSS1zYXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4iUGF0dXR1bmd1aGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+Ik1nYSBLb3B5YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemUiIG1zZ2lkPSI4NjgxODk1NjA3ODc2ODA5MzIzIj4iTGFraSBuZyBQYXBlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+Ikt1bGF5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iT3J5ZW50YXN5b24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiJNZ2EgUGFoaW5hICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJoYWwuIDHigJQ1LDgsMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iUHJldmlldyBzYSBwYWctcHJpbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ik1hZy1pbnN0YWxsIG5nIFBERiB2aWV3ZXIgcGFyYSBzYSBwYWctcHJldmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4iTmFnLWNyYXNoIGFuZyBhcHAgc2EgcGFnLXByaW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+Ik1nYSBQYWhpbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJHdW1hZ2F3YSBuZyBwYWctcHJpbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJJLXNhdmUgYmlsYW5nIFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJMYWhhdCBuZyBwcmludGVy4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJEaWFsb2cgbmcgcGFnLXByaW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IkhhbmFwaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iTGFoYXQgbmcgcHJpbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+Ik1hZ2RhZ2RhZyBuZyBzZXJiaXN5byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IklwaW5hcGFraXRhIGFuZyBib3ggcGFyYSBzYSBwYWdoYWhhbmFwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+Ik5ha2F0YWdvIGFuZyBib3ggcGFyYSBzYSBwYWdoYWhhbmFwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iTWFnZGFnZGFnIG5nIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJQaWxpaW4gYW5nIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJLYWxpbXV0YW4gYW5nIHByaW50ZXIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+Ijx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlciBhbmcgbmFraXRhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiAobmEpIHByaW50ZXIgYW5nIG5ha2l0YSI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlB1bWlsaSBuZyBzZXJiaXN5byBuZyBwYWctcHJpbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Ik5hZ2hhaGFuYXAgbmcgbWdhIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiJXYWxhbmcgbWdhIHByaW50ZXIgbmEgbmFraXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iUGluaS1wcmludCBhbmcgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IktpbmFrYW5zZWxhIGFuZyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJFcnJvciBzYSBwcmludGVyIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJOYWthLWJsb2NrIGFuZyBQcmludGVyIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iUGFnLXByaW50IG5nIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiJNZ2EgcGFnLXByaW50IG5nIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iS2Fuc2VsYWhpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iSS1yZXN0YXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkhpbmRpIG5ha2Frb25la3RhIHNhIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJoaW5kaSBhbGFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBoaW5kaSBhdmFpbGFibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iSGluZGkgbWFidW8gYW5nIHBhZy1wcmludCI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiJCbGFjayAmYW1wOyBXaGl0ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI3NjIyNDEyNDcyMjg5ODM3NTQiPiJLdWxheSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJQb3J0cmFpdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJMYW5kc2NhcGUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IkxhaGF0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IlNha29wIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlMzAyZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW50IFNwb29sZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iWWF6xLFjxLEgYXlhcmxhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iWWF6ZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IktheWRldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkhlZGVmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IktvcHlhIHNhecSxc8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiJLYcSfxLF0IEJveXV0dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IlJlbmtsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IlNheWZhIHnDtm7DvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IlNheWZhICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLDtnIuIDEtNSw4LDExLTEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJZYXpkxLFybWF5xLEgw7ZuaXpsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iw5ZuaXpsZW1layBpw6dpbiBQREYgZ8O2csO8bnTDvGxleWljaSB5w7xrbGV5aW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IllhemTEsXJtYSB1eWd1bGFtYXPEsSBraWxpdGxlbmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IlNheWZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4iWWF6ZMSxcm1hIGnFn2kgb2x1xZ90dXJ1bHV5b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJQREYgb2xhcmFrIGtheWRldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJUw7xtIHlhesSxY8SxbGFy4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJZYXpkxLFybWEgaWxldGnFn2ltIGt1dHVzdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJBcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iVMO8bSB5YXrEsWPEsWxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+Ikhpem1ldCBla2xlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4iQXJhbWEga3V0dXN1IGfDtnN0ZXJpbGl5b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X2hpZGRlbl91dHRlcmFuY2UiIG1zZ2lkPSI1NzI3NzU1MTY5MzQzMTEzMzUxIj4iQXJhbWEga3V0dXN1IGdpemxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iWWF6xLFjxLEgZWtsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IllhesSxY8SxIHNlw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJZYXrEsWPEsXnEsSB1bnV0Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHlhesSxY8SxIGJ1bHVuZHUiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IHlhesSxY8SxIGJ1bHVuZHUiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJZYXpkxLFybWEgaGl6bWV0aW5pIHNlw6dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iWWF6xLFjxLFsYXIgYXJhbsSxeW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRlcnMiIG1zZ2lkPSI0ODY5NDAzMzIzOTAwMDU0ODY2Ij4iWWF6xLFjxLEgYnVsdW5hbWFkxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IHlhemTEsXLEsWzEsXlvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gaXB0YWwgZWRpbGl5b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IllhesSxY8SxIGhhdGFzxLE6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJZYXrEsWPEsSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IGnFn2luaSBlbmdlbGxlZGkiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiB5YXpkxLFybWEgacWfaSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4geWF6ZMSxcm1hIGnFn2xlcmkiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4ixLBwdGFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJZZW5pZGVuIGJhxZ9sYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iWWF6xLFjxLEgYmHEn2xhbnTEsXPEsSB5b2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJiaWxpbm1peW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBrdWxsYW7EsWxhbcSxeW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IllhemTEsXJtYSBpxZ9pIG9sdcWfdHVydWxhbWFkxLEiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iU2l5YWggQmV5YXoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4iUmVua2xpIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IkRpa2V5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+IllhdGF5IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiJUw7xtw7wiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iQXJhbMSxayI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNTI2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiJQcmludCBTcG9vbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+ItCd0LDQu9Cw0YjRgtGD0LLQsNC90L3RjyDQv9GA0LjQvdGC0LXRgNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4i0JTRgNGD0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLQl9Cx0LXRgNC10LPRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfZGVzdGluYXRpb24iIG1zZ2lkPSI5MTMyNTEwOTk3MzgxNTk5Mjc1Ij4i0JzRltGB0YbQtSDQv9GA0LjQt9C90LDRhy3QvdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+ItCa0L7Qv9GW0ZciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+ItCg0L7Qt9C80ZbRgCDQv9Cw0L/QtdGA0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLQmtC+0LvRltGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4i0J7RgNGW0ZTQvdGC0LDRhtGW0Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLQodGC0L7RgNGW0L3QutC4ICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiLQvdCw0L/RgC4sMeKAkzUsIDgsIDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+ItCS0LXRgNGB0ZbRjyDQtNC70Y8g0LTRgNGD0LrRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4i0KPRgdGC0LDQvdC+0LLQuNGC0Lgg0LfQsNGB0ZbQsSDQv9C10YDQtdCz0LvRj9C00YMgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLQn9GA0L7Qs9GA0LDQvNCwINC00YDRg9C60YMg0LDQstCw0YDRltC50L3QviDQt9Cw0LLQtdGA0YjQuNC70LAg0YDQvtCx0L7RgtGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+ItCh0YLQvtGA0ZbQvdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiLQodGC0LLQvtGA0Y7RlNGC0YzRgdGPINC30LDQstC00LDQvdC90Y8g0LTRgNGD0LrRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+ItCX0LHQtdGA0LXQs9GC0Lgg0Y/QuiBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i0KPRgdGWINC/0YDQuNC90YLQtdGA0LjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+ItCU0ZbQsNC70L7Qs9C+0LLQtSDQstGW0LrQvdC+INC00YDRg9C60YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4i0J/QvtGI0YPQuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiLQo9GB0ZYg0L/RgNC40L3RgtC10YDQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+ItCU0L7QtNCw0YLQuCDRgdC70YPQttCx0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiLQktGW0LrQvdC+INC/0L7RiNGD0LrRgyDQv9C+0LrQsNC30LDQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+ItCS0ZbQutC90L4g0L/QvtGI0YPQutGDINGB0YXQvtCy0LDQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4i0JTQvtC00LDRgtC4INC/0YDQuNC90YLQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VsZWN0X3ByaW50ZXIiIG1zZ2lkPSI3Mzg4NzYwOTM5ODczMzY4Njk4Ij4i0JLQuNCx0YDQsNGC0Lgg0L/RgNC40L3RgtC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLQhtCz0L3QvtGA0YPQstCw0YLQuCDQv9GA0LjQvdGC0LXRgCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4i0JfQvdCw0LnQtNC10L3QviDQv9GA0LjQvdGC0LXRgNGW0LI6IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiLQl9C90LDQudC00LXQvdC+INC/0YDQuNC90YLQtdGA0ZbQsjogPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+ItCS0LjQsdGA0LDRgtC4INGB0LvRg9C20LHRgyDQtNGA0YPQutGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLQn9C+0YjRg9C6INC/0YDQuNC90YLQtdGA0ZbQsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+ItCf0YDQuNC90YLQtdGA0Lgg0L3QtSDQt9C90LDQudC00LXQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4i0JfQsNCy0LTQsNC90L3RjyBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiDQtNGA0YPQutGD0ZTRgtGM0YHRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+ItCX0LDQstC00LDQvdC90Y8gXCI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+XCIg0YHQutCw0YHQvtCy0YPRlNGC0YzRgdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLQn9C+0LzQuNC70LrQsCDQt9Cw0LLQtNCw0L3QvdGPIFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPlwiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i0JfQsNCy0LTQsNC90L3RjyBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiDQt9Cw0LHQu9C+0LrQvtCy0LDQvdC+Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg2NjYyNDYzODA1NDg0NzA1NyI+ItCX0LDQstC00LDQvdC90Y8g0LTRgNGD0LrRgyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4i0JfQsNCy0LTQsNC90L3RjyDQtNGA0YPQutGDIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4iPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i0KHQutCw0YHRg9Cy0LDRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLQn9C10YDQtdC30LDQv9GD0YHRgtC40YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLQndC10LzQsNGUINC34oCZ0ZTQtNC90LDQvdC90Y8g0Lcg0L/RgNC40L3RgtC10YDQvtC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i0L3QtdCy0ZbQtNC+0LzQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4i0JfQsNCy0LTQsNC90L3RjyBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiDQvdC1INC00L7RgdGC0YPQv9C90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4i0J3QtSDQstC00LDQu9C+0YHRjyDRgdGC0LLQvtGA0LjRgtC4INC30LDQstC00LDQvdC90Y8g0LTRgNGD0LrRgyI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLQp9C+0YDQvdC+LdCx0ZbQu9C40LkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i0JrQvtC70ZbRgCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLQmtC90LjQttC60L7QstCwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+ItCQ0LvRjNCx0L7QvNC90LAiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+ItCj0YHRliI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLQlNGW0LDQv9Cw0LfQvtC9IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIxMTcyYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IlByaW50IFNwb29sZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iQ8OgaSDEkeG6t3QgbcOheSBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IkluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9idXR0b24iIG1zZ2lkPSIxOTIxMzEwNDU0MDcxNzU4OTk5Ij4iTMawdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IsSQw61jaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJC4bqjbiBzYW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IkvDrWNoIHRoxrDhu5tjIHRyYW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29sb3IiIG1zZ2lkPSIxMTA4NjkwMzA1MjE4MTg4OTY5Ij4iTcOgdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IkjGsOG7m25nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFnZXMiIG1zZ2lkPSI2MzAwODc0NjY3NTQ2NjE3MzMzIj4iVHJhbmcgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+IlbDrSBk4bulOiAx4oCUNSwgOCwgMTHigJQxMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4iWGVtIHRyxrDhu5tjIGLhuqNuIGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiJDw6BpIMSR4bq3dCB0csOsbmggeGVtIFBERiDEkeG7gyB4ZW0gdHLGsOG7m2MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IuG7qG5nIGThu6VuZyBpbiBn4bq3cCBs4buXaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VfY291bnRfdW5rbm93biIgbXNnaWQ9IjYwNTg4NTI2NjU5NTQ1MTExMjQiPiJUcmFuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IsSQYW5nIHThuqFvIGzhu4duaCBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IkzGsHUgZMaw4bubaSBk4bqhbmcgUERGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzIiBtc2dpZD0iNTAxODgyOTcyNjg2MTg3NjIwMiI+IlThuqV0IGPhuqMgbcOheSBpbuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2RpYWxvZyIgbXNnaWQ9IjMyNjI4Njg3NDYxMzMxOTc5Ij4iSOG7mXAgdGhv4bqhaSBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJUw6xtIGtp4bq/bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVyc19sYWJlbCIgbXNnaWQ9IjMxNzg4NDg4NzAxNjE1MjYzOTkiPiJU4bqldCBj4bqjIG3DoXkgaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJUaMOqbSBk4buLY2ggduG7pSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+Ikhp4buDbiB0aOG7iyBo4buZcCB0w6xtIGtp4bq/bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLhuqhuIGjhu5lwIHTDrG0ga2nhur9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYWRkX3ByaW50ZXIiIG1zZ2lkPSIxMDg4NjU2NDY4MzYwNjUzNDU1Ij4iVGjDqm0gbcOheSBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IkNo4buNbiBtw6F5IGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iQuG7jyBxdWEgbcOheSBpbiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4ixJDDoyB0w6xtIHRo4bqleSA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IG3DoXkgaW4iPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiLEkMOjIHTDrG0gdGjhuqV5IDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4gbcOheSBpbiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkNo4buNbiBk4buLY2ggduG7pSBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4ixJBhbmcgdMOsbSBraeG6v20gbcOheSBpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Iktow7RuZyB0w6xtIHRo4bqleSBtw6F5IGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iSW4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ikjhu6d5IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Ikzhu5dpIG3DoXkgaW4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+Ik3DoXkgaW4gxJHDoyBjaOG6t24gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NjY2MjQ2MzgwNTQ4NDcwNTciPiJM4buHbmggaW4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+Ikzhu4duaCBpbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+Ikjhu6d5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJC4bqvdCDEkeG6p3UgbOG6oWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iS2jDtG5nIGPDsyBr4bq/dCBu4buRaSBuw6BvIHbhu5tpIG3DoXkgaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJraMO0bmcgeMOhYyDEkeG7i25oIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBraMO0bmcga2jhuqMgZOG7pW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+Iktow7RuZyB0aOG7gyB04bqhbyBs4buHbmggaW4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4ixJBlbiB0cuG6r25nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+Ik3DoHUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmllbnRhdGlvbl9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI0MDYxOTMxMDIwOTI2NDg5MjI4Ij4iROG7jWMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4iTmdhbmciPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IlThuqV0IGPhuqMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4iRMOjeSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy16aC1yQ04vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJDTi9hcnJheXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmM3NWRiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJDTi9hcnJheXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxyZXNvdXJjZXM+Ci0KLSAgICA8c3RyaW5nLWFycmF5IG5hbWU9InBkZl9wcmludGVyX21lZGlhX3NpemVzIiB0cmFuc2xhdGFibGU9ImZhbHNlIj4KLSAgICAgICAgPGl0ZW0+Uk9DXzhLPC9pdGVtPgotICAgICAgICA8aXRlbT5ST0NfMTZLPC9pdGVtPgotICAgICAgICA8aXRlbT5QUkNfMTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+UFJDXzI8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPlBSQ18zPC9pdGVtPgotICAgICAgICA8aXRlbT5QUkNfNDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+UFJDXzU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPlBSQ182PC9pdGVtPgotICAgICAgICA8aXRlbT5QUkNfNzwvaXRlbT4KLSAgICAgICAgPGl0ZW0+UFJDXzg8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPlBSQ185PC9pdGVtPgotICAgICAgICA8aXRlbT5QUkNfMTA8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPlBSQ18xNks8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk9NX1BBX0tBSTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+T01fREFJX1BBX0tBSTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+T01fSlVVUk9fS1VfS0FJPC9pdGVtPgotICAgIDwvc3RyaW5nLWFycmF5PgotCi08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDNlYTYwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IuaJk+WNsOWkhOeQhuacjeWKoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLmiZPljbDmnLrorr7nva4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLmiZPljbAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLkv53lrZgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLnm67nmoTlnLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i5Lu95pWwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLnurjlvKDlsLrlr7giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLpopzoibIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLmlrnlkJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLpobXmlbAgKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+IuS+i+Wmgu+8mjEtNeOAgTjjgIExMS0xMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3ByZXZpZXciIG1zZ2lkPSI4MDEwMjE3Nzk2MDU3NzYzMzQzIj4i5omT5Y2w6aKE6KeIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbF9mb3JfcHJpbnRfcHJldmlldyIgbXNnaWQ9IjYzNjYzMDM5OTczODU1MDkzMzIiPiLlronoo4UgUERGIOafpeeci+WZqOS7peS+v+mihOiniCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50aW5nX2FwcF9jcmFzaGVkIiBtc2dpZD0iODU0NDc3NjE2Njg2NTY2Mzk4Ij4i5omT5Y2w5bqU55So5bSp5rqD5LqGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZV9jb3VudF91bmtub3duIiBtc2dpZD0iNjA1ODg1MjY2NTk1NDUxMTEyNCI+IumhteaVsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+Iuato+WcqOeUn+aIkOaJk+WNsOS9nOS4miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IuS/neWtmOS4uiBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4i5omA5pyJ5omT5Y2w5py64oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiLmiZPljbDlr7nor53moYYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2giIG1zZ2lkPSI1NDIxNzI0MjY1MzIyMjI4NDk3Ij4i5pCc57SiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IuaJgOacieaJk+WNsOacuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9wcmludF9zZXJ2aWNlX2xhYmVsIiBtc2dpZD0iNTM1NjcwMjU0NjE4ODk4MTk0MCI+Iua3u+WKoOacjeWKoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IuaQnOe0ouahhuW3suaYvuekuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiLmkJzntKLmoYblt7LpmpDol48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiLmt7vliqDmiZPljbDmnLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiLpgInmi6nmiZPljbDmnLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiLlj5bmtojkv53lrZjmiZPljbDmnLoiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNDQ4NDk1MzI2MDY4NTk2NDI1MiI+IuaJvuWIsDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz7lj7DmiZPljbDmnLoiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjY1MzM4MTcwMzY2MDcxMjgyNDEiPiLmib7liLA8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+5Y+w5omT5Y2w5py6IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i6YCJ5oup5omT5Y2w5pyN5YqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLmraPlnKjmkJzntKLmiZPljbDmnLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLmib7kuI3liLDmiZPljbDmnLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLmraPlnKjmiZPljbDigJw8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+4oCdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4i5q2j5Zyo5Y+W5raI5omT5Y2w4oCcPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPuKAnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i5omT5Y2w5py65Zyo5omT5Y2w4oCcPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPuKAneaXtuWHuumUmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuaJk+WNsOacuuaLkue7neaJk+WNsOKAnDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igJ0iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4i4oCcPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPuKAneaJk+WNsOS9nOS4miI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iODc0NjYxMTI2NDczNDIyMjg2NSI+IuKAnDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz7igJ3miZPljbDkvZzkuJoiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i5Y+W5raIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLph43mlrDlvIDlp4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i5pyq5LiO5omT5Y2w5py65bu656uL6L+e5o6lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI1NTA3OTQwMTk2NTAzMjQ2MTM5Ij4i5pyq55+lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl91bmF2YWlsYWJsZSIgbXNnaWQ9IjI0MzQxNzA2MTcwMDMzMTU2OTAiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IC0g5peg5rOV5L2/55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IuaXoOazleeUn+aIkOaJk+WNsOS9nOS4miI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLpu5Hnmb0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i5b2p6ImyIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+Iue6teWQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLmqKrlkJEiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IuWFqOmDqCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLojIPlm7QiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQyMmE5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IuWIl+WNsOWkmuW3pee3qeihneiZleeQhuWZqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkdmFuY2VkX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjU3NjQyMjUwOTEyODk0MTU2MzIiPiLmiZPljbDmqZ/oqK3lrpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLliJfljbAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2J1dHRvbiIgbXNnaWQ9IjE5MjEzMTA0NTQwNzE3NTg5OTkiPiLlhLLlrZgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiLnm67nmoTlnLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb3BpZXMiIG1zZ2lkPSIzNjM0NTMxMDQyODIyOTY4MzA4Ij4i5Lu95pW4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfcGFwZXJfc2l6ZSIgbXNnaWQ9Ijg2ODE4OTU2MDc4NzY4MDkzMjMiPiLntJnlvLXlpKflsI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiLpoY/oibIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiLmlrnlkJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9IjYzMDA4NzQ2Njc1NDY2MTczMzMiPiLpoIHmlbggKDx4bGlmZjpnIGlkPSJQQUdFX0NPVU5UIj4lMSRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+IuS+i+Wmgu+8mjEtNSw4LDExLTEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLpoJDopr3liJfljbAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuWuieijnemgkOimveaJgOmcgOeahCBQREYg5qqi6KaW5ZmoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLliJfljbDmh4nnlKjnqIvlvI/nlbbmqZ/kuoYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4i6aCB5pW4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i5q2j5Zyo55Si55Sf5YiX5Y2w5bel5L2cIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4i5YSy5a2Y54K6IFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLmiYDmnInmiZPljbDmqZ/igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IuWIl+WNsOWwjeipseaWueWhiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLmkJzlsIsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i5omA5pyJ5omT5Y2w5qmfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i5paw5aKe5pyN5YuZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4i5pCc5bCL5qGG5bey6aGv56S6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IuaQnOWwi+ahhuW3sumaseiXjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IuaWsOWinuaJk+WNsOapnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IumBuOWPluaJk+WNsOapnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Iuenu+mZpOaJk+WNsOapnyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4i5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g6YOo5omT5Y2w5qmfIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4i5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g6YOo5omT5Y2w5qmfIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i6YG45pOH5YiX5Y2w5pyN5YuZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLmraPlnKjmkJzlsIvmiZPljbDmqZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLmib7kuI3liLDmiZPljbDmqZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLmraPlnKjliJfljbAgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Iuato+WcqOWPlua2iCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLmiZPljbDmqZ/pjK/oqqTvvJo8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i5omT5Y2w5qmf5bey5bCB6Y6WIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4i5LiA6aCFIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g5YiX5Y2w5bel5L2cIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI4NzQ2NjExMjY0NzM0MjIyODY1Ij4i5aSa6aCFIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkZDwveGxpZmY6Zz4g5YiX5Y2w5bel5L2cIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IuWPlua2iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i6YeN5paw6ZaL5aeLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IuWwmuacquiIh+aJk+WNsOapn+mAo+e3miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYXNvbl91bmtub3duIiBtc2dpZD0iNTUwNzk0MDE5NjUwMzI0NjEzOSI+IuS4jeaYjiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJMg54Sh5rOV5L2/55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZXJyb3JfZGVmYXVsdF9tZXNzYWdlIiBtc2dpZD0iODU2ODUwNjkxODk4Mzk4MDU2NyI+IueEoeazleeUoueUn+WIl+WNsOW3peS9nCI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2MDI5NDg3NDU0MTUxNzQ5MzciPiLpu5Hnmb0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzYyMjQxMjQ3MjI4OTgzNzU0Ij4i5b2p6ImyIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ib3JpZW50YXRpb25fbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDA2MTkzMTAyMDkyNjQ4OTIyOCI+IuebtOWQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiLmqavlkJEiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IuWFqOmDqCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY4MTI4Njk2MjUyMjI1MDM2MDMiPiLnr4TlnI0iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZTg4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NDY5ODM2MDc1MzE5ODMxODIxIj4i5YiX5Y2w5aSa5bel57ep6KGd6JmV55CG5ZmoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWR2YW5jZWRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNTc2NDIyNTA5MTI4OTQxNTYzMiI+IuWNsOihqOapn+ioreWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2J1dHRvbiIgbXNnaWQ9IjY0NTE2NDU2NjI3MTI0NjI2OCI+IuWIl+WNsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IuWEsuWtmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IuebrueahOWcsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiLku73mlbgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+Iue0meW8teWkp+WwjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IuiJsuW9qSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX29yaWVudGF0aW9uIiBtc2dpZD0iMjg1MzE0MjU4MTk5MDQ5NjQ3NyI+IuaWueWQkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IumggeaVuCAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhZ2VzX3JhbmdlX2V4YW1wbGUiIG1zZ2lkPSI4NTU4Njk0NDUzNTU2OTQ1MTcyIj4i5L6L5aaC77yaMeKAlDUsOCwxMeKAlDEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiLliJfljbDpoJDopr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+IuWuieijnemgkOimveaJgOmcgOeahCBQREYg5qqi6KaW5ZmoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfYXBwX2NyYXNoZWQiIG1zZ2lkPSI4NTQ0Nzc2MTY2ODY1NjYzOTgiPiLliJfljbDmh4nnlKjnqIvlvI/nlbbmqZ/kuoYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4i6aCB5pW4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2VuZXJhdGluZ19wcmludF9qb2IiIG1zZ2lkPSIzMTE5NjA4NzQyNjUxNjk4OTE2Ij4i5q2j5Zyo55Si55Sf5YiX5Y2w5bel5L2cIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9hc19wZGYiIG1zZ2lkPSI1NzE4NDU0MTE5ODQ3NTk2ODUzIj4i5YSy5a2Y54K6IFBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiLmiYDmnInljbDooajmqZ/igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IuWNsOihqOapn+WwjeipseaWueWhiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiLmkJzlsIsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4i5omA5pyJ5Y2w6KGo5qmfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3ByaW50X3NlcnZpY2VfbGFiZWwiIG1zZ2lkPSI1MzU2NzAyNTQ2MTg4OTgxOTQwIj4i5paw5aKe5pyN5YuZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9zaG93bl91dHRlcmFuY2UiIG1zZ2lkPSI3OTY3NDA0OTUzOTAxMzc2MDkwIj4i5pCc5bCL5qGG5bey6aGv56S6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IuaQnOWwi+ahhuW3sumaseiXjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IuaWsOWinuWNsOihqOapnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+IumBuOWPluWNsOihqOapnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2ZvcmdldF9wcmludGVyIiBtc2dpZD0iNTAzNTI4NzQ5NzI5MTkxMDc2NiI+Iuenu+mZpOWNsOihqOapnyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0icHJpbnRfc2VhcmNoX3Jlc3VsdF9jb3VudF91dHRlcmFuY2UiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI0NDg0OTUzMjYwNjg1OTY0MjUyIj4i5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g5Y+w5Y2w6KGo5qmfIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4i5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVCI+JTEkczwveGxpZmY6Zz4g5Y+w5Y2w6KGo5qmfIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i6YG45pOH5YiX5Y2w5pyN5YuZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLmraPlnKjmkJzlsIvljbDooajmqZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludGVycyIgbXNnaWQ9IjQ4Njk0MDMzMjM5MDAwNTQ4NjYiPiLmib7kuI3liLDljbDooajmqZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyOTU5MDM5NTc3NjI0NDczNjIiPiLmraPlnKjliJfljbAgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Iuato+WcqOWPlua2iCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLljbDooajmqZ/nmbznlJ/pjK/oqqTvvJo8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i5Y2w6KGo5qmf5bCB6Y6W5LqGIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiDlgIvliJfljbDlt6XkvZwiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IOWAi+WIl+WNsOW3peS9nCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLlj5bmtogiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IumHjeaWsOmWi+WniyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLlsJrmnKroiIfljbDooajmqZ/lu7rnq4vpgKPnt5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiLkuI3mmI4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIOeEoeazleS9v+eUqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg1Njg1MDY5MTg5ODM5ODA1NjciPiLnhKHms5XnlKLnlJ/liJfljbDlt6XkvZwiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4i6buR55m9IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IuW9qeiJsiI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiLnuLHlkJEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTk5NjYwMDkwMjQ2MTY2ODEyIj4i5qmr5ZCRIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFnZV9vcHRpb25zX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc0MjEzNzc0NDIwMTE2OTk5OTQiPiLlhajpg6giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2ODEyODY5NjI1MjIyNTAzNjAzIj4i56+E5ZyNIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlMzFlMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDQ2OTgzNjA3NTMxOTgzMTgyMSI+IklzcHVsaSBzZXBocmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZHZhbmNlZF9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI1NzY0MjI1MDkxMjg5NDE1NjMyIj4iSXppbHVuZ2lzZWxlbG8gemVwaHJpbnRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfYnV0dG9uIiBtc2dpZD0iNjQ1MTY0NTY2MjcxMjQ2MjY4Ij4iUGhyaW50YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYnV0dG9uIiBtc2dpZD0iMTkyMTMxMDQ1NDA3MTc1ODk5OSI+IkxvbmRvbG96YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2Rlc3RpbmF0aW9uIiBtc2dpZD0iOTEzMjUxMDk5NzM4MTU5OTI3NSI+IkluZGF3byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllcyIgbXNnaWQ9IjM2MzQ1MzEwNDI4MjI5NjgzMDgiPiJBbWFraG9waGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iODY4MTg5NTYwNzg3NjgwOTMyMyI+IlVzYXlpemkgd2VwaGVwaGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9jb2xvciIgbXNnaWQ9IjExMDg2OTAzMDUyMTgxODg5NjkiPiJVbWJhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9vcmllbnRhdGlvbiIgbXNnaWQ9IjI4NTMxNDI1ODE5OTA0OTY0NzciPiJVbXVtbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhZ2VzIiBtc2dpZD0iNjMwMDg3NDY2NzU0NjYxNzMzMyI+IkFtYWtoYXNpICg8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFnZXNfcmFuZ2VfZXhhbXBsZSIgbXNnaWQ9Ijg1NTg2OTQ0NTM1NTY5NDUxNzIiPiJpc2IuIDHigJQ1LCA4LCAxMeKAlDEzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfcHJldmlldyIgbXNnaWQ9IjgwMTAyMTc3OTYwNTc3NjMzNDMiPiJVa3VidWthIGt1cWFsYSBrb2t1cGhyaW50YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxfZm9yX3ByaW50X3ByZXZpZXciIG1zZ2lkPSI2MzY2MzAzOTk3Mzg1NTA5MzMyIj4iRmFrYSBpc2lidWtlbGkgc2UtUERGIHVrdXplIHVobG9sZSBrdXFhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IlVrdXBocmludGEgdWhsZWxvIGxva3VzZWJlbnphIGt1a2h1YmF6ZWtpbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2NvdW50X3Vua25vd24iIG1zZ2lkPSI2MDU4ODUyNjY1OTU0NTExMTI0Ij4iQW1ha2hhc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnZW5lcmF0aW5nX3ByaW50X2pvYiIgbXNnaWQ9IjMxMTk2MDg3NDI2NTE2OTg5MTYiPiJJa2hpcWl6YSB1bXNlYmVuemkgd29rdXBocmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX2FzX3BkZiIgbXNnaWQ9IjU3MTg0NTQxMTk4NDc1OTY4NTMiPiJMb25kb2xvemEgbmplbmdlLVBERiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbF9wcmludGVycyIgbXNnaWQ9IjUwMTg4Mjk3MjY4NjE4NzYyMDIiPiJXb25rZSBhbWFwaHJpbnRh4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZGlhbG9nIiBtc2dpZD0iMzI2Mjg2ODc0NjEzMzE5NzkiPiJJbmd4b3hvIHlva3VwaHJpbnRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNoIiBtc2dpZD0iNTQyMTcyNDI2NTMyMjIyODQ5NyI+IlNlc2hhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsX3ByaW50ZXJzX2xhYmVsIiBtc2dpZD0iMzE3ODg0ODg3MDE2MTUyNjM5OSI+IldvbmtlIGFtYXBocmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJFbmdlemEgaXNldmlzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfc2hvd25fdXR0ZXJhbmNlIiBtc2dpZD0iNzk2NzQwNDk1MzkwMTM3NjA5MCI+IkliaG9raXNpIGxva3VobG9sYSBsaWJvbmlzaXdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoX2JveF9oaWRkZW5fdXR0ZXJhbmNlIiBtc2dpZD0iNTcyNzc1NTE2OTM0MzExMzM1MSI+IkliaG9raXNpIGxva3VzZXNoYSBsaWZpaGxpd2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9hZGRfcHJpbnRlciIgbXNnaWQ9IjEwODg2NTY0NjgzNjA2NTM0NTUiPiJFbmdlemEgaXBocmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWxlY3RfcHJpbnRlciIgbXNnaWQ9IjczODg3NjA5Mzk4NzMzNjg2OTgiPiJLaGV0aGEgaXBocmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9mb3JnZXRfcHJpbnRlciIgbXNnaWQ9IjUwMzUyODc0OTcyOTE5MTA3NjYiPiJLaG9obHdhIGlwaHJpbnRhIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJwcmludF9zZWFyY2hfcmVzdWx0X2NvdW50X3V0dGVyYW5jZSI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjQ0ODQ5NTMyNjA2ODU5NjQyNTIiPiI8eGxpZmY6ZyBpZD0iQ09VTlQiPiUxJHM8L3hsaWZmOmc+IGlwaHJpbnRhIGl0aG9saXdlIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSI2NTMzODE3MDM2NjA3MTI4MjQxIj4iPHhsaWZmOmcgaWQ9IkNPVU5UIj4lMSRzPC94bGlmZjpnPiBhbWFwaHJpbnRhIGF0aG9saXdlIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iS2hldGhhIGlzZXZpc2kgeWVwaHJpbnRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJJc2VzaGEgYW1hcGhyaW50YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+IkF3ZWtobyBhbWFwaHJpbnRhIGF0aG9saXdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4iSXBocmludGEgaS08eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iSWtoYW5zZWxhIGktPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iSXBodXRoYSBsZXBocmludGEgeWUtPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IklwaHJpbnRhIGVuZ3UtPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBpdmluamVsd2UiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODY2NjI0NjM4MDU0ODQ3MDU3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRkPC94bGlmZjpnPiB1bXNlYmVuemkgd29rdXBocmludGEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9Ijg3NDY2MTEyNjQ3MzQyMjI4NjUiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJGQ8L3hsaWZmOmc+IGltaXNlYmVuemkgeW9rdXBocmludGEiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iS2hhbnNlbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlFhbGEga2FidXNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJBa3VraG8gdWt1eGh1bWFuYSBrdXBocmludGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJha3dheml3YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSIyNDM0MTcwNjE3MDAzMzE1NjkwIj4iSS08eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOKAkyBheWl0aG9sYWthbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9kZWZhdWx0X21lc3NhZ2UiIG1zZ2lkPSI4NTY4NTA2OTE4OTgzOTgwNTY3Ij4iQXlpa3dhemFuZ2EgdWt1a2hpcWl6YSB1bXNlYmVuemkgd29rdXBocmludGEiPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iT2t1bW55YW1hIG5va3VtaGxvcGhlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IlVtYmFsYSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJVa3VtYSBuZ29idWRlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzE5OTY2MDA5MDI0NjE2NjgxMiI+IlVrd2FraGVrYSBrd2V6d2UiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJwYWdlX29wdGlvbnNfbGFiZWxzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzQyMTM3NzQ0MjAxMTY5OTk5NCI+IktvbmtlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjgxMjg2OTYyNTIyMjUwMzYwMyI+IkliYW5nYSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGQwZDQzCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NTY3NTY2MDk4NTI4NTg4ODYzIj4iUGFyYW1ldHJsyZlyIERlcG9zdSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZDBkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDU2NzU2NjA5ODUyODU4ODg2MyI+IlBhcmFtZXRybMmZciBEZXBvc3UiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE2NGFjNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKLSAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NTY3NTY2MDk4NTI4NTg4ODYzIj4i0JfQsNGF0L7RntCy0LDQvdC90LUg0L3QsNC70LDQtCI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5ZmRkNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDU2NzU2NjA5ODUyODU4ODg2MyI+IlNldHRpbmdzIFN0b3JhZ2UiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkwZWIwOQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDU2NzU2NjA5ODUyODU4ODg2MyI+IlN0b2NrYWdlIGRlcyBwYXJhbcOodHJlcyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmMWFmYgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDU2NzU2NjA5ODUyODU4ODg2MyI+ItS/1aHWgNWj1aHVvtW41oDVuNaC1bTVttWl1oDVqyDVutWh1bDVuNaC1b3VvyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxYTJlOQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDU2NzU2NjA5ODUyODU4ODg2MyI+IuGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDlOGDkeGDmOGDoSDhg6Hhg5Dhg6rhg5Dhg5Xhg5giPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZTYyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ1Njc1NjYwOTg1Mjg1ODg4NjMiPiLhnoDhn4bhno7hno/hn4vigIvhnoDhnrbhnprigIvhnpXhn5LhnpHhnrvhnoAiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNTc5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ1Njc1NjYwOTg1Mjg1ODg4NjMiPiLguprgu4jguq3gupngu4DguoHgurHguprguoLgu43gu4nguqHgurngupnguoHgurLgupngupXgurHgu4nguofguoTgu4jgurIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NTIxNDUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ1Njc1NjYwOTg1Mjg1ODg4NjMiPiLQotC+0YXQuNGA0LPQvtC+0L3RiyDQodCw0L0iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY2ZWY2MgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDU2NzU2NjA5ODUyODU4ODg2MyI+IuCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpK3gpKPgpY3gpKHgpL7gpLDgpKMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjZlZjYyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ1Njc1NjYwOTg1Mjg1ODg4NjMiPiLgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSt4KSj4KWN4KSh4KS+4KSw4KSjIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGVmNzk4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI0NTY3NTY2MDk4NTI4NTg4ODYzIj4i4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2nOC2tuC2qeC3j+C3gCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZWY3OTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNDU2NzU2NjA5ODUyODU4ODg2MyI+IuC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtpzgtrbgtqngt4/gt4AiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3N2M5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ1Njc1NjYwOTg1Mjg1ODg4NjMiPiLoqK3lrprlhLLlrZjnqbrplpMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL3Byb3ZpZGVycy9zZXR0aW5ncy9EYXRhYmFzZUhlbHBlci5qYXZhIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL0RhdGFiYXNlSGVscGVyLmphdmEKaW5kZXggMDljMjFmMy4uYjcxNzk2ZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL0RhdGFiYXNlSGVscGVyLmphdmEKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL0RhdGFiYXNlSGVscGVyLmphdmEKQEAgLTM5LDEzICszOSwxMCBAQAogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5HbG9iYWw7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5TZWN1cmU7Ci1pbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuVGVsZXBob255TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5jb250ZW50LlBhY2thZ2VIZWxwZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LlBob25lOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5QaG9uZUNvbnN0YW50czsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuUklMQ29uc3RhbnRzOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5jZG1hLkNkbWFTdWJzY3JpcHRpb25Tb3VyY2VNYW5hZ2VyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuWG1sVXRpbHM7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMDhlMzgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4iU2hlbGwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4iQmFxIHJhcG9ydCBhbMSxbmTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+IljJmXRhbsSxIMWfaWthecmZdGluaSBwYXlsYcWfbWFxIMO8w6fDvG4gdG94dW51biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+IkJhcSByYXBvcnRsYXLEsSBzaXN0ZW1pbiBtw7x4dMmZbGlmIGp1cm5hbCBmYXlsbGFyxLFuZGFuIGRhdGEgacOnyZlyaXIga2ksIGJ1bmEgxZ/JmXhzaSB2yZkga29uZmlkZW5zaWFsIG3JmWx1bWF0bGFyIGRhIGFpZGRpci4gWWFsbsSxeiBpbmFuZMSxxJ/EsW7EsXogYWRhbWxhcmxhIGJhcSByYXBvcnRsYXLEsW7EsSBwYXlsYcWfxLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiJCdSBtZXNhasSxIG7DtnZiyZl0aSBkyZlmyZkgZ8O2c3TJmXIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMDhlMzgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiJTaGVsbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSIgbXNnaWQ9IjIyOTM3MTE1NDY4OTI4NjM4OTgiPiJCYXEgcmFwb3J0IGFsxLFuZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIG1zZ2lkPSIzNTU5OTA0NzQ2ODU5NDAwNzMyIj4iWMmZdGFuxLEgxZ9pa2F5yZl0aW5pIHBheWxhxZ9tYXEgw7zDp8O8biB0b3h1bnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4iQmFxIHJhcG9ydGxhcsSxIHNpc3RlbWluIG3DvHh0yZlsaWYganVybmFsIGZheWxsYXLEsW5kYW4gZGF0YSBpw6fJmXJpciBraSwgYnVuYSDFn8mZeHNpIHbJmSBrb25maWRlbnNpYWwgbcmZbHVtYXRsYXIgZGEgYWlkZGlyLiBZYWxuxLF6IGluYW5kxLHEn8SxbsSxeiBhZGFtbGFybGEgYmFxIHJhcG9ydGxhcsSxbsSxIHBheWxhxZ/EsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IkJ1IG1lc2FqxLEgbsO2dmLJmXRpIGTJmWbJmSBnw7ZzdMmZciI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MTM5NzUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICAKLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiLQkNCx0LDQu9C+0L3QutCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+ItCh0L/RgNCw0LLQsNC30LTQsNGH0LAg0L/RgNCwINC30LHQvtC5INC30LDRhdCw0LLQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiLQndCw0YbRltGB0L3RltGG0LUsINC60LDQsSDQv9Cw0LTQt9GP0LvRltGG0YbQsCDRgdCy0LDRkdC5INGB0L/RgNCw0LLQsNC30LTQsNGH0LDQuSDQv9GA0LAg0LfQsdC+0LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiLQodC/0YDQsNCy0LDQt9C00LDRh9CwINC/0YDQsCDQv9Cw0LzRi9C70LrRgyDRntGC0YDRi9C80LvRltCy0LDQtSDQtNCw0LTQt9C10L3Ri9GPINC3INCzadGB0YLQvtGA0YtpINGB0ZbRgdGC0Y3QvNC90YvRhSDRhNCw0LnQu9Cw0Z4sINGDINGC0YvQvCDQu9GW0LrRgyDQv9C10YDRgdCw0L3QsNC70YzQvdGD0Y4g0ZYg0L/RgNGL0LLQsNGC0L3Rg9GOINGW0L3RhNCw0YDQvNCw0YbRi9GOLiDQlNC30Y/Qu2nRhtC10YHRjyDRgdC/0YDQsNCy0LDQt9C00LDRh9Cw0LxpINC/0YDQsCDQt9Cx0L5pINGC0L7Qu9GM0LppINC3INC/0YDQsNCy0LXRgNCw0L3Ri9C8aSDQutCw0YDRi9GB0YLQsNC70YzQvWnQutCw0LxpIGkg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9C8aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybV9yZXBlYXQiIG1zZ2lkPSI0OTI2ODQyNDYwNjg4NjQ1MDU4Ij4i0KMg0L3QsNGB0YLRg9C/0L3RiyDRgNCw0Lcg0L/QsNC60LDQt9Cy0LDRhtGMINCz0Y3RgtCwINC/0LDQstC10LTQsNC80LvQtdC90L3QtSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKaW5kZXggZWZmZGNiOS4uM2YxYzkyMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCkBAIC0xNyw4ICsxNyw4IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4iUHJvc3TFmWVkw60iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4iQnlsYSB2eXR2b8WZZW5hIHpwcsOhdmEgbyBjaHlixJsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiJacHLDoXZ1IG8gY2h5YsSbIG3Fr8W+ZXRlIHNkw61sZXQga2xlcG51dMOtbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiJacHLDoXZ5IG8gY2h5YsOhY2ggb2JzYWh1asOtIGRhdGEgeiByxa96bsO9Y2ggc291Ym9yxa8gcHJvdG9rb2zFryBzeXN0w6ltdSB2xI1ldG7EmyBvc29ibsOtY2ggYSBzb3Vrcm9tw71jaCBpbmZvcm1hY8OtLiBacHLDoXZ5IG8gY2h5YsOhY2ggc2TDrWxlanRlIHBvdXplIHMgYXBsaWthY2VtaSBhIHXFvml2YXRlbGksIGt0ZXLDvW0gZMWvdsSbxZl1amV0ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4iQnlsbyB2eXR2b8WZZW5vIGNoeWJvdsOpIGhsw6HFoWVuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiJDaHlib3bDqSBobMOhxaFlbsOtIG3Fr8W+ZXRlIHNkw61sZXQga2xlcG51dMOtbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiJDaHlib3bDoSBobMOhxaFlbsOtIG9ic2FodWrDrSBkYXRhIHrCoHLFr3puw71jaCBzb3Vib3LFryBwcm90b2tvbMWvIHN5c3TDqW11IHbEjWV0bsSbIG9zb2Juw61jaCBhwqBzb3Vrcm9tw71jaCBpbmZvcm1hY8OtLiBDaHlib3bDoSBobMOhxaFlbsOtIHNkw61sZWp0ZSBwb3V6ZSBzwqBhcGxpa2FjZW1pIGHCoHXFvml2YXRlbGksIGt0ZXLDvW0gZMWvdsSbxZl1amV0ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybV9yZXBlYXQiIG1zZ2lkPSI0OTI2ODQyNDYwNjg4NjQ1MDU4Ij4iWm9icmF6aXQgdHV0byB6cHLDoXZ1IHDFmcOtxaF0xJsiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCmluZGV4IDAxZWE0MmIuLmE4YTM2MDUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApAQCAtMTksNiArMTksNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+IlNoZWxsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IkZlamxyYXBwb3J0ZW4gZXIgcmVnaXN0cmVyZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiJUcnlrIGZvciBhdCBkZWxlIGRpbiBmZWpscmFwcG9ydCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+IkZlamxyYXBwb3J0ZXIgaW5kZWhvbGRlciBkYXRhIGZyYSBzeXN0ZW1ldHMgZm9yc2tlbGxpZ2UgbG9nZmlsZXIsIGhlcnVuZGVyIHBlcnNvbmxpZ2Ugb2cgcHJpdmF0ZSBvcGx5c25pbmdlci4gRGVsIGt1biBmZWpscmFwcG9ydGVyIG1lZCBhcHBzIG9nIHBlcnNvbmVyLCBkdSBoYXIgdGlsbGlkIHRpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiJGZWpscmFwcG9ydGVyIGluZGVob2xkZXIgZGF0YSBmcmEgc3lzdGVtZXRzIGZvcnNrZWxsaWdlIGxvZ2ZpbGVyLCBmLmVrcy4gcGVyc29ubGlnZSBvZyBwcml2YXRlIG9wbHlzbmluZ2VyLiBEZWwga3VuIGZlamxyYXBwb3J0ZXIgbWVkIGFwcHMgb2cgcGVyc29uZXIsIGR1IGhhciB0aWxsaWQgdGlsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiJWaXMgZGVubmUgbWVkZGVsZWxzZSBuw6ZzdGUgZ2FuZyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODcwOGUwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+IlNoZWxsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IkJ1ZyByZXBvcnQgY2FwdHVyZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiJUb3VjaCB0byBzaGFyZSB5b3VyIGJ1ZyByZXBvcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiJCdWcgcmVwb3J0cyBjb250YWluIGRhdGEgZnJvbSB0aGUgc3lzdGVtXCdzIHZhcmlvdXMgbG9nIGZpbGVzLCBpbmNsdWRpbmcgcGVyc29uYWwgYW5kIHByaXZhdGUgaW5mb3JtYXRpb24uIE9ubHkgc2hhcmUgYnVnIHJlcG9ydHMgd2l0aCBhcHBzIGFuZCBwZW9wbGUgdGhhdCB5b3UgdHJ1c3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IlNob3cgdGhpcyBtZXNzYWdlIG5leHQgdGltZSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWV0L3N0cmluZ3MueG1sCnJlbmFtZSB0byBwYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjcyZjIzCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+IlNoZWxsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IlJhcHBvcnQgZGUgYm9ndWUgZW5yZWdpc3Ryw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiJBcHB1eWVyIGljaSBwb3VyIHBhcnRhZ2VyIHZvdHJlIHJhcHBvcnQgZGUgYm9ndWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiJMZXMgcmFwcG9ydHMgZGUgYm9ndWUgY29udGllbm5lbnQgZGVzIGRvbm7DqWVzIGRlcyBmaWNoaWVycyBqb3VybmF1eCBkdSBzeXN0w6htZSwgeSBjb21wcmlzIGRlcyBpbmZvcm1hdGlvbnMgcGVyc29ubmVsbGVzIGV0IHByaXbDqWVzLiBOZSBwYXJ0YWdleiBsZXMgcmFwcG9ydHMgZGUgYm9ndWUgcXVcJ2F2ZWMgbGVzIGFwcGxpY2F0aW9ucyBldCBsZXMgcGVyc29ubmVzIHF1ZSB2b3VzIGVzdGltZXogZmlhYmxlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybV9yZXBlYXQiIG1zZ2lkPSI0OTI2ODQyNDYwNjg4NjQ1MDU4Ij4iQWZmaWNoZXIgY2UgbWVzc2FnZSBsYSBwcm9jaGFpbmUgZm9pcyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKaW5kZXggNGVhMDY2NC4uZjg4OTMxMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCkBAIC0xOSw2ICsxOSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4i4KS24KWH4KSyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IuCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KSV4KWI4KSq4KWN4KSa4KSwIOCkleCksCDgpLLgpYAg4KSX4KSIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIG1zZ2lkPSIzNTU5OTA0NzQ2ODU5NDAwNzMyIj4i4KSF4KSq4KSo4KWAIOCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KS44KS+4KSd4KS+IOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkuOCljeCkquCksOCljeCktiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiLgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSfIOCkruClh+CkgiDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSU4KSwIOCkqOCkv+CknOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KS44KS54KS/4KSkLCDgpLjgpL/gpLjgpY3gpJ/gpK4g4KSV4KWAIOCkteCkv+CkreCkv+CkqOCljeCkqCDgpLLgpYngpJcg4KSr4KS84KS+4KSH4KSy4KWL4KSCIOCkleCkviDgpKHgpYfgpJ/gpL4g4KS54KWL4KSk4KS+IOCkueCliC4g4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCknyDgpJXgpYfgpLXgpLIg4KS14KS/4KS24KWN4KS14KS44KSo4KWA4KSvIOCkj+CkquCljeCksuCkv+CkleClh+CktuCkqCDgpJTgpLAg4KS14KWN4KSv4KSV4KWN4KSk4KS/4KSv4KWL4KSCIOCkuOClhyDgpLngpYAg4KS44KS+4KSd4KS+IOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiLgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSfIOCkruClh+CkgiDgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQg4KSU4KSwIOCkqOCkv+CknOClgCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAg4KS44KS54KS/4KSkLCDgpLjgpL/gpLjgpY3gpJ/gpK4g4KSV4KWAIOCkteCkv+CkreCkv+CkqOCljeCkqCDgpLLgpYngpJcg4KSr4KS84KS+4KSH4KSy4KWL4KSCIOCkleCkviDgpKHgpYfgpJ/gpL4g4KS54KWL4KSk4KS+IOCkueCliC4g4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCknyDgpJXgpYfgpLXgpLIg4KS14KS/4KS24KWN4KS14KS44KSo4KWA4KSvIOCkkOCkquCljeCkuCAg4KSU4KSwIOCkteCljeCkr+CkleCljeCkpOCkv+Ckr+Cli+CkgiDgpLjgpYcg4KS54KWAIOCkuOCkvuCkneCkviDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IuCkr+CkuSDgpLjgpILgpKbgpYfgpLYg4KSF4KSX4KSy4KWAIOCkrOCkvuCksCDgpKbgpL/gpJbgpL7gpI/gpIIiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE3ZmE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiLUvdWl1oHVqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSIgbXNnaWQ9IjIyOTM3MTE1NDY4OTI4NjM4OTgiPiLVjtaA1avVutWh1a/VqyDVptWl1a/VuNaC1bXWgSDVvdW/1aHWgdW+1aXWgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+ItWA1brVpdaEYCDVsdWl1oAg1b7WgNWr1brVodWv1asg1bTVodW91avVtiDVptWl1a/VuNaC1bXWgdWoINW/1aHWgNWh1a7VpdWs1bjWgiDVsNWh1bTVodaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4i1Y7WgNWr1brVodWv1asg1abVpdWv1bjWgtW11oHVttWl1oDVqCDVutWh1oDVuNaC1bbVodWv1bjWgtW0INWl1bYg1b/VvtW11aHVrNW21aXWgCDVsNWh1bTVodWv1aHWgNWj1asg1b/VodaA1aLVpdaAINW01bjWgtW/1oTVqyDWhtWh1bXVrNWl1oDVq9aBLCDVodW11aQg1anVvtW41oLVtCDVttWh1ocg1aHVttWw1aHVv9Wh1a/VodW2IOKAi+KAi9aHINWj1aHVstW/1bbVqyDVv9Wl1bLVpdWv1bjWgtWp1bXVuNaC1bbVttWl1oA6INWO1oDVq9W61aHVr9WrINWm1aXVr9W41oLVtdaB1bbVpdaA1ajCoNWv1avVvdWl1oQg1bTVq9Wh1bXVtiDVodW11bYg1bDVodW+1aXVrNW+1aHVrtW21aXWgNWrINaHINW01aHWgNWk1a/VodW21oEg1bDVpdW/LCDVuNaA1bjVttaBINW+1b3Vv9Wh1bDVuNaC1bQg1aXWhDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybV9yZXBlYXQiIG1zZ2lkPSI0OTI2ODQyNDYwNjg4NjQ1MDU4Ij4i1LHVtdW9INWw1aHVstW41oDVpNWh1aPWgNW41oLVqdW11bjWgtW21agg1oHVuNaC1bXWgSDVv9Wh1awg1bDVodW71bjWgNWkINWh1bbVo9Wh1bQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCmluZGV4IGU3NzE1ZTkuLmRlZDg2MGMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApAQCAtMTksNiArMTksNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+Itee16LXmNek16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4i15PXldeXINeU15HXkNeS15nXnSDXpteV15zXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+IteS16Ig15vXk9eZINec16nXqtejINeQ16og15PXldeXINeU15HXkNeS15nXnSDXqdec15oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiLXk9eV15fXldeqINei15wg15HXkNeS15nXnSDXm9eV15zXnNeZ150g16DXqteV16DXmdedINee16fXldeR16bXmSDXlNeZ15XXntefINeU16nXldeg15nXnSDXkdee16LXqNeb16osINeb15XXnNecINee15nXk9eiINeQ15nXqdeZINeV16TXqNeY15kuINep16rXoyDXk9eV15fXldeqINeR15DXkteZ150g16jXpyDXotedINeZ15nXqdeV157XmdedINeV15DXoNep15nXnSDXqdeQ16rXlCDXodeV157XmiDXotec15nXlNedLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+IteT15XXl9eV16og16LXnCDXkdeQ15LXmdedINeb15XXnNec15nXnSDXoNeq15XXoNeZ150g157Xp9eV15HXpteZINeU15nXldee158g15TXqdeV16DXmdedINeR157Xoteo15vXqiwg15vXldec15wg157XmdeT16Ig15DXmdep15kg15XXpNeo15jXmS4g16nXqtejINeT15XXl9eV16og15HXkNeS15nXnSDXqNenINei150g15DXpNec15nXp9em15nXldeqINeV15DXoNep15nXnSDXqdeQ16rXlCDXodeV157XmiDXotec15nXlNedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtX3JlcGVhdCIgbXNnaWQ9IjQ5MjY4NDI0NjA2ODg2NDUwNTgiPiLXlNem15Ig15DXqiDXlNeU15XXk9ei15Qg15TXlteVINeR16TXotedINeU15HXkNeUIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOWM3MmEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4i4YOS4YOQ4YOg4YOU4YOZ4YOQ4YOc4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IuGDkOGDnOGDkuGDkOGDoOGDmOGDqOGDmCDhg67hg5Dhg6Dhg5Xhg5Thg5bhg5Thg5Hhg5jhg6Eg4YOo4YOU4YOh4YOQ4YOu4YOU4YORIOGDqOGDlOGDpeGDm+GDnOGDmOGDmuGDmOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+IuGDqOGDlOGDlOGDruGDlOGDlyDhg5fhg6Xhg5Xhg5Thg5zhg5gg4YOu4YOQ4YOg4YOV4YOU4YOW4YOU4YOR4YOY4YOhIOGDkOGDnOGDkuGDkOGDoOGDmOGDqOGDmOGDoSDhg5Lhg5Dhg6Hhg5Dhg5bhg5jhg5Dhg6Dhg5Thg5Hhg5rhg5Dhg5MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiLhg67hg5Dhg6Dhg5Xhg5Thg5bhg5jhg6Eg4YOQ4YOc4YOS4YOQ4YOg4YOY4YOo4YOU4YOR4YOYIOGDm+GDneGDmOGDquGDkOGDleGDoSDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg6Eg4YOh4YOu4YOV4YOQ4YOT4YOQ4YOh4YOu4YOV4YOQIOGDoeGDmOGDoeGDouGDlOGDm+GDo+GDoOGDmCDhg5/hg6Phg6Dhg5zhg5Dhg5rhg5jhg6Eg4YOk4YOQ4YOY4YOa4YOU4YOR4YOY4YOT4YOQ4YOcLCDhg5vhg5Dhg5cg4YOo4YOd4YOg4YOY4YOhIOGDnuGDmOGDoOGDkOGDkyDhg5Phg5Ag4YOZ4YOd4YOc4YOk4YOY4YOT4YOU4YOc4YOq4YOY4YOQ4YOa4YOj4YOgIOGDmOGDnOGDpOGDneGDoOGDm+GDkOGDquGDmOGDkOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybV9yZXBlYXQiIG1zZ2lkPSI0OTI2ODQyNDYwNjg4NjQ1MDU4Ij4i4YOo4YOU4YOb4YOT4YOS4YOd4YOb4YOo4YOYIOGDkOGDqeGDleGDlOGDnOGDlCDhg5Thg6Eg4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjM0NWMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4i4Z6f4Z+C4Z6bIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IuGelOGetuGek+KAi+GeheGetuGelOGfi+KAi+GemeGegOKAi+GemuGelOGetuGemeGegOGetuGemuGejuGfjeKAi+GegOGfhuGeoOGeu+GenyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+IuGelOGfieGfh+KAiyDhnorhnr7hnpjhn5LhnpThnrjigIvhnoXhn4LhnoDigIvhnprhn4bhnpvhn4LhnoDigIvhnprhnpThnrbhnpnhnoDhnrbhnprhno7hn43igIvhnoDhn4bhnqDhnrvhnp/igIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiLhnprhnpThnrbhnpnhnoDhnrbhnprhno7hn43igIvhnoDhn4bhnqDhnrvhnp/igIvhnprhnr3hnpjhnpjhnrbhnpPigIvhnq/hnoDhnp/hnrbhnprigIvhnoDhn4bhno7hno/hn4vigIvhnqDhn4Hhno/hnrvigIvhnpXhn5Lhnp/hn4HhnoThn5figIvhnprhnpThnp/hn4vigIvhnpThn5Lhnprhnpbhn5DhnpPhn5LhnpIg4Z6a4Z694Z6Y4Z6Y4Z624Z6T4oCL4Z6W4Z+Q4Z6P4Z+M4Z6Y4Z624Z6T4oCL4Z6V4Z+S4Z6R4Z624Z6b4Z+L4Z6B4Z+S4Z6b4Z694Z6TIOGek+Get+GehOKAi+Ger+GegOGeh+Gek+GflCDhnoXhn4LhnoDhnprhn4bhnpvhn4LhnoDigIvhnprhnpThnrbhnpnhnoDhnrbhnprhno7hn43igIvhnoDhn4bhnqDhnrvhnp/igIvhnofhnrbigIvhnpjhnr3hnpnigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrgg4Z6T4Z634Z6E4oCL4Z6Y4Z6T4Z674Z6f4Z+S4Z6f4oCL4Z6K4Z+C4Z6b4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6R4Z674Z6A4oCL4Z6F4Z634Z6P4Z+S4Z6P4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IuGelOGehOGfkuGeoOGetuGeieKAi+Gen+GetuGemuKAi+Gek+GfgeGfh+KAi+GeluGfgeGem+KAi+GegOGfkuGemuGfhOGemSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjM3ZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+IlNoZWxsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+IuC6peC6suC6jeC6h+C6suC6meC6iOC6uOC6lOC6muC6u+C6geC6nuC7iOC6reC6h+C6luC6t+C6geC7gOC6geC6seC6muC6geC6s+C7geC6peC7ieC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+IuC7geC6leC6sOC7gOC6nuC6t+C7iOC6reC6quC6u+C7iOC6h+C6geC6suC6meC6peC6suC6jeC6h+C6suC6meC6m+C6seC6meC6q+C6suC6guC6reC6h+C6l+C7iOC6suC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+IuC6geC6suC6meC6peC6suC6jeC6h+C6suC6meC6guC7jeC7ieC6nOC6tOC6lOC6nuC6suC6lOC6m+C6sOC6geC6reC6muC6oeC6tSDguoLgu43gu4nguqHgurngupnguojgurLguoHgu4Tgup/guqXgu4zguprgurHgupngupfgurbguoHguoLguq3guofguqXgurDguprgurvguprguqvgurzgurLguo3gu4Tgup/guqXgu4wsIOC6ruC6p+C6oeC6l+C6seC6h+C6guC7jeC7ieC6oeC6ueC6meC6quC7iOC6p+C6meC7guC6leC6meC6sy4g4LqX4LuI4Lqy4LqZ4LqV4LuJ4Lqt4LqH4LuB4Lqa4LuI4LqH4Lqb4Lqx4LqZ4Lql4Lqy4LqN4LqH4Lqy4LqZ4LqC4LuN4LuJ4Lqc4Lq04LqU4Lqe4Lqy4LqU4LuD4Lqr4LuJ4LuB4Lqt4Lqx4Lqa4LqvIOC7geC6peC6sOC6hOC6u+C6meC6l+C6teC7iOC6l+C7iOC6suC6meC7gOC6iuC6t+C7iOC6reC6luC6t+C7hOC6lOC7ieC7gOC6l+C6u+C7iOC6suC6meC6seC7ieC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybV9yZXBlYXQiIG1zZ2lkPSI0OTI2ODQyNDYwNjg4NjQ1MDU4Ij4i4Lqq4Lqw4LuB4LqU4LqH4LqC4LuN4LuJ4LqE4Lqn4Lqy4Lqh4LqZ4Lq14LuJ4Lqt4Lq14LqB4LuD4LqZ4LuA4LqX4Lq34LuI4Lqt4LqV4LuN4LuI4LuE4LqbIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NDI5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4i0KjQtdC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+ItCQ0LvQtNCw0LDQvdGLINC80Y3QtNGN0Y3Qu9GN0Lsg0YXSr9C70Y3RjdC9INCw0LLQsNCyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIG1zZ2lkPSIzNTU5OTA0NzQ2ODU5NDAwNzMyIj4i0KLQsCDQsNC70LTQsNCw0L3RiyDQvNGN0LTRjdCz0LTQu9C40LnQsyDRhdGD0LLQsNCw0LvRhtCw0YUg0LHQvtC7INGF0q/RgNC90Y0g0q/SryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+ItCQ0LvQtNCw0LDQvdGLINGA0LXQv9C+0YDRgiDQvdGMINGF0YPQstC40LnQvSDQsdC+0LvQvtC9INC90YPRg9GGINC80Y3QtNGN0Y3Qu9GN0Lsg0LfRjdGA0LPQuNC50LMg0LDQs9GD0YPQu9GB0LDQvSDRgdC40YHRgtC10LzQuNC50L0g0YLTqdGA06nQuyDQsdKv0YDQuNC50L0g0LvQvtCzINGE0LDQudC70YvQvSDQtNCw0YLQsNCzINCw0LPRg9GD0LvQvdCwLiDQkNC70LTQsNCw0L3RiyDRgNC10L/QvtGA0YLRi9CzINC306nQstGF06nQvSDQuNGC0LPRjdC70YLRjdC5INCw0L/QvyDQsdC+0LvQvtC9INGF0q/QvNKv0q/RgdGCINGF0YPQstCw0LDQu9GG0LDQvdCwINGD0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+ItCt0L3RjSDQvNC10YHRgdC10LbQuNC50LMg0LTQsNGA0LDQsNCz0LjQudC9INGD0LTQsNCwINGF0LDRgNGD0YPQu9Cw0YUiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YwOTQzMwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiLgpLjgpYfgpLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4i4KSs4KSXIOCkquCljeCksOCkpOCkv+CkteClh+CkpuCkqCDgpLjgpK7gpL7gpKTgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCknyDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+IuCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ/gpLngpLDgpYLgpK7gpL4g4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KS+IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpLLgpJcg4KSr4KS+4KSH4KSy4KS54KSw4KWC4KSs4KS+4KSfIOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCDgpKTgpKXgpL4g4KSo4KWA4KSc4KS/IOCkuOClguCkmuCkqOCkvuCkuOCkueCkv+CkpOCkleCliyDgpKHgpYfgpJ/gpL4g4KSw4KS54KSo4KWN4KSb4KWkICDgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSf4KS54KSw4KWCIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLAg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkteCkv+CktuCljeCkteCkvuCkuCDgpJfgpLDgpYfgpJXgpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KS54KSw4KWC4KS44KSB4KSXIOCkruCkvuCkpOCljeCksCDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IuCkr+CliyDgpLjgpKjgpY3gpKbgpYfgpLYg4KSF4KSw4KWN4KSV4KWLIOCkquCkn+CklSDgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMDk0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiLgpLjgpYfgpLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4i4KSs4KSXIOCkquCljeCksOCkpOCkv+CkteClh+CkpuCkqCDgpLjgpK7gpL7gpKTgpL/gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiLgpKTgpKrgpL7gpIjgpILgpJXgpYsg4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCknyDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSoIOCkm+ClgeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9jb25maXJtIiBtc2dpZD0iNTEzMDY5ODQ2Nzc5NTY2OTc4MCI+IuCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ/gpLngpLDgpYLgpK7gpL4g4KSq4KWN4KSw4KSj4KS+4KSy4KWA4KSV4KS+IOCkteCkv+CkreCkv+CkqOCljeCkqCDgpLLgpJcg4KSr4KS+4KSH4KSy4KS54KSw4KWC4KSs4KS+4KSfIOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCDgpKTgpKXgpL4g4KSo4KWA4KSc4KS/IOCkuOClguCkmuCkqOCkvuCkuOCkueCkv+CkpOCkleCliyDgpKHgpYfgpJ/gpL4g4KSw4KS54KSo4KWN4KSb4KWkICDgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSf4KS54KSw4KWCIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpLAg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkteCkv+CktuCljeCkteCkvuCkuCDgpJfgpLDgpYfgpJXgpL4g4KS14KWN4KSv4KSV4KWN4KSk4KS/4KS54KSw4KWC4KS44KSB4KSXIOCkruCkvuCkpOCljeCksCDgpLjgpL7gpJ3gpYfgpKbgpL7gpLDgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IuCkr+CliyDgpLjgpKjgpY3gpKbgpYfgpLYg4KSF4KSw4KWN4KSV4KWLIOCkquCkn+CklSDgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc4MDc4OQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiLgt4Lgt5ngtr3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4i4Lav4Led4LeCIOC3gOC3j+C2u+C3iuC2reC3j+C3gCDgtr3gtrbgt4/gtpzgtrHgt4rgtrHgt48g4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIG1zZ2lkPSIzNTU5OTA0NzQ2ODU5NDAwNzMyIj4i4LaU4La24Lac4LeaIOC2r+C3neC3giDgt4Dgt4/gtrvgt4rgtq3gt4/gt4Ag4La24LeZ4Lav4LePIOC2nOC3kOC2seC3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4i4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC3g+C3hCDgtrTgt57gtq/gt4rgtpzgtr3gt5Lgtpog4Lat4Lec4La74Lat4LeU4La74LeUIOC2h+C2reC3lOC3heC2reC3iuC3gCDgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgt5og4LeA4LeS4LeA4LeS4LawIOC2veC3nOC2nOC3iiDgtpzgt5zgtrHgt5Qg4LeA4La9IOC2r+C2reC3iuC2rSDgtq/gt53gt4Ig4LeA4LeP4La74LeK4Lat4LeP4LeA4LeaIOC2heC2qeC2guC2nOC3lCDgt4Dgt5ouIOC2lOC2tuC2pyDgt4Dgt5Lgt4Hgt4rgt4Dgt4/gt4Pgt4DgtrHgt4rgtq0g4La64LeZ4Lav4LeU4La44LeKIOC3g+C3hCDgtrTgt5Tgtq/gt4rgtpzgtr3gtrrgt5LgtrHgt4og4LeD4La44LafIOC2tOC2uOC2q+C2muC3iiDgtq/gt53gt4Ig4LeA4LeP4La74LeK4Lat4LePIOC2tuC3meC2r+C3jyDgtpzgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IuC2iuC3heC2nyDgt4Dgt5ngtr3gt4/gt4Dgt5og4La44LeZ4La4IOC2tOC2q+C3kuC3gOC3kuC2qeC2uiDgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ODA3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNpL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiLgt4Lgt5ngtr3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4i4Lav4Led4LeCIOC3gOC3j+C2u+C3iuC2reC3j+C3gCDgtr3gtrbgt4/gtpzgtrHgt4rgtrHgt48g4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIG1zZ2lkPSIzNTU5OTA0NzQ2ODU5NDAwNzMyIj4i4LaU4La24Lac4LeaIOC2r+C3neC3giDgt4Dgt4/gtrvgt4rgtq3gt4/gt4Ag4La24LeZ4Lav4LePIOC2nOC3kOC2seC3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4i4La04LeU4Lav4LeK4Lac4La94LeS4LaaIOC3g+C3hCDgtrTgt57gtq/gt4rgtpzgtr3gt5Lgtpog4Lat4Lec4La74Lat4LeU4La74LeUIOC2h+C2reC3lOC3heC2reC3iuC3gCDgtrTgtq/gt4rgtrDgtq3gt5Lgtrrgt5og4LeA4LeS4LeA4LeS4LawIOC2veC3nOC2nOC3iiDgtpzgt5zgtrHgt5Qg4LeA4La9IOC2r+C2reC3iuC2rSDgtq/gt53gt4Ig4LeA4LeP4La74LeK4Lat4LeP4LeA4LeaIOC2heC2qeC2guC2nOC3lCDgt4Dgt5ouIOC2lOC2tuC2pyDgt4Dgt5Lgt4Hgt4rgt4Dgt4/gt4Pgt4DgtrHgt4rgtq0g4La64LeZ4Lav4LeU4La44LeKIOC3g+C3hCDgtrTgt5Tgtq/gt4rgtpzgtr3gtrrgt5LgtrHgt4og4LeD4La44LafIOC2tOC2uOC2q+C2muC3iiDgtq/gt53gt4Ig4LeA4LeP4La74LeK4Lat4LePIOC2tuC3meC2r+C3jyDgtpzgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IuC2iuC3heC2nyDgt4Dgt5ngtr3gt4/gt4Dgt5og4La44LeZ4La4IOC2tOC2q+C3kuC3gOC3kuC2qeC2uiDgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmMTkzNQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiLlkb3ku6Tku4vpnaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4i5bey5pO35Y+W6Yyv6Kqk5aCx5ZGKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIG1zZ2lkPSIzNTU5OTA0NzQ2ODU5NDAwNzMyIj4i6LyV6Ke45Y2z5Y+v5YiG5Lqr5oKo55qE6Yyv6Kqk5aCx5ZGKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm0iIG1zZ2lkPSI1MTMwNjk4NDY3Nzk1NjY5NzgwIj4i6Yyv6Kqk5aCx5ZGK5Lit5pyJ5L6G6Ieq57O757Wx5ZCE5YCL6KiY6YyE5qqU5qGI55qE6LOH5paZ77yM5YyF5ous5YCL5Lq65ZKM56eB5Lq66LOH5paZ44CC6KuL5Y+q6IiH5oKo5L+h5Lu755qE5oeJ55So56iL5byP5ZKM55So5oi25YiG5Lqr6Yyv6Kqk5aCx5ZGK44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IuS4i+asoeWGjemhr+ekuumAmeWJh+ioiuaBryI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX2FjdGl2YXRlZC5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfYWN0aXZhdGVkLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29yZS9yZXMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX2FjdGl2YXRlZC5wbmcKcmVuYW1lIHRvIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19hY3RpdmF0ZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19ub3JtYWwucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX25vcm1hbC5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvcmUvcmVzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19ub3JtYWwucG5nCnJlbmFtZSB0byBwYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfbm9ybWFsLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtaGRwaS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbG9ja3NjcmVlbl9nbG93ZG90LnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29yZS9yZXMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbG9ja3NjcmVlbl9nbG93ZG90LnBuZwpyZW5hbWUgdG8gcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbG9ja3NjcmVlbl9nbG93ZG90LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUtbWRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfYWN0aXZhdGVkLnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19hY3RpdmF0ZWQucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb3JlL3Jlcy9yZXMvZHJhd2FibGUtbWRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfYWN0aXZhdGVkLnBuZwpyZW5hbWUgdG8gcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX2FjdGl2YXRlZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX25vcm1hbC5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtbWRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfbm9ybWFsLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29yZS9yZXMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX25vcm1hbC5wbmcKcmVuYW1lIHRvIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19ub3JtYWwucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xvY2tzY3JlZW5fZ2xvd2RvdC5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtbWRwaS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb3JlL3Jlcy9yZXMvZHJhd2FibGUtbWRwaS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QucG5nCnJlbmFtZSB0byBwYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtbWRwaS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfYWN0aXZhdGVkLnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfYWN0aXZhdGVkLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29yZS9yZXMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19hY3RpdmF0ZWQucG5nCnJlbmFtZSB0byBwYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX2FjdGl2YXRlZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19ub3JtYWwucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpY19ub3JtYWwucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb3JlL3Jlcy9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX25vcm1hbC5wbmcKcmVuYW1lIHRvIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfbm9ybWFsLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbG9ja3NjcmVlbl9nbG93ZG90LnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb3JlL3Jlcy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbG9ja3NjcmVlbl9nbG93ZG90LnBuZwpyZW5hbWUgdG8gcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xvY2tzY3JlZW5fZ2xvd2RvdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfYWN0aXZhdGVkLnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX2FjdGl2YXRlZC5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvcmUvcmVzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX2FjdGl2YXRlZC5wbmcKcmVuYW1lIHRvIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX2FjdGl2YXRlZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWNfbm9ybWFsLnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX25vcm1hbC5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNvcmUvcmVzL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX25vcm1hbC5wbmcKcmVuYW1lIHRvIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljX25vcm1hbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb3JlL3Jlcy9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2xvY2tzY3JlZW5fZ2xvd2RvdC5wbmcKcmVuYW1lIHRvIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfbG9ja3NjcmVlbl9nbG93ZG90LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWMueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpYy54bWwKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9ub3RpZmljYXRpb25fcm93X2xlZ2FjeV9iZy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvbm90aWZpY2F0aW9uX3Jvd19sZWdhY3lfYmcueG1sCmluZGV4IDBlMWJkZDMuLmNlMzM3MmUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9ub3RpZmljYXRpb25fcm93X2xlZ2FjeV9iZy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL25vdGlmaWNhdGlvbl9yb3dfbGVnYWN5X2JnLnhtbApAQCAtMTcsNiArMTcsNiBAQAogPHNlbGVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICAgICAgYW5kcm9pZDpleGl0RmFkZUR1cmF0aW9uPSJAYW5kcm9pZDppbnRlZ2VyL2NvbmZpZ19tZWRpdW1BbmltVGltZSI+CiAKLSAgICA8aXRlbSBhbmRyb2lkOnN0YXRlX3ByZXNzZWQ9InRydWUiICBhbmRyb2lkOmRyYXdhYmxlPSJAKmFuZHJvaWQ6ZHJhd2FibGUvbm90aWZpY2F0aW9uX2l0ZW1fYmFja2dyb3VuZF9jb2xvcl9wcmVzc2VkIiAvPgorICAgIDxpdGVtIGFuZHJvaWQ6c3RhdGVfcHJlc3NlZD0idHJ1ZSIgIGFuZHJvaWQ6ZHJhd2FibGU9IkBkcmF3YWJsZS9ub3RpZmljYXRpb25faXRlbV9iYWNrZ3JvdW5kX2NvbG9yX3ByZXNzZWQiIC8+CiAgICAgPGl0ZW0gYW5kcm9pZDpzdGF0ZV9wcmVzc2VkPSJmYWxzZSIgYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL25vdGlmaWNhdGlvbl9pdGVtX2JhY2tncm91bmRfbGVnYWN5X2NvbG9yIiAvPgogPC9zZWxlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9zdGF0dXNfYmFyX2l0ZW1fYmFja2dyb3VuZC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvc3RhdHVzX2Jhcl9pdGVtX2JhY2tncm91bmQueG1sCmluZGV4IGI4MmZlZDkuLjNhNTBhYTkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9zdGF0dXNfYmFyX2l0ZW1fYmFja2dyb3VuZC54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3N0YXR1c19iYXJfaXRlbV9iYWNrZ3JvdW5kLnhtbApAQCAtMTksNyArMTksNyBAQAogICAgIGFuZHJvaWQ6b3BhY2l0eT0idHJhbnNsdWNlbnQiCiAgICAgPgogICAgIDxpdGVtCi0gICAgICAgIGFuZHJvaWQ6ZHJhd2FibGU9IkAqYW5kcm9pZDpkcmF3YWJsZS9ub3RpZmljYXRpb25faXRlbV9iYWNrZ3JvdW5kX2NvbG9yIgorICAgICAgICBhbmRyb2lkOmRyYXdhYmxlPSJAZHJhd2FibGUvbm90aWZpY2F0aW9uX2l0ZW1fYmFja2dyb3VuZF9jb2xvciIKICAgICAgICAgLz4KIDwvbGF5ZXItbGlzdD4KIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3N0YXR1c19iYXJfdGlja2VyX2JhY2tncm91bmQueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3N0YXR1c19iYXJfdGlja2VyX2JhY2tncm91bmQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2I2NGMwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9zdGF0dXNfYmFyX3RpY2tlcl9iYWNrZ3JvdW5kLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gIAotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAKLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08Yml0bWFwCi0gICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6dGlsZU1vZGU9InJlcGVhdCIKLSAgICBhbmRyb2lkOnNyYz0iQCphbmRyb2lkOmRyYXdhYmxlL25vdGlmeV9wYW5lbF9ub3RpZmljYXRpb25faWNvbl9iZyIKLSAgICAvPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3N5c3RlbV9iYXJfdGlja2VyX2JhY2tncm91bmQueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3N5c3RlbV9iYXJfdGlja2VyX2JhY2tncm91bmQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2I2NGMwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9zeXN0ZW1fYmFyX3RpY2tlcl9iYWNrZ3JvdW5kLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gIAotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAKLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08Yml0bWFwCi0gICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6dGlsZU1vZGU9InJlcGVhdCIKLSAgICBhbmRyb2lkOnNyYz0iQCphbmRyb2lkOmRyYXdhYmxlL25vdGlmeV9wYW5lbF9ub3RpZmljYXRpb25faWNvbl9iZyIKLSAgICAvPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3RpY2tlcl9iYWNrZ3JvdW5kLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS90aWNrZXJfYmFja2dyb3VuZC54bWwKaW5kZXggMDdiNDRjYS4uNzMyMGZhMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3RpY2tlcl9iYWNrZ3JvdW5kLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdGlja2VyX2JhY2tncm91bmQueG1sCkBAIC0yMCw3ICsyMCw3IEBACiAgICAgPgogICAgIDwhLS0gdGhlIGxhcmdlIGljb24gZXh0ZW5kcyAxMmRwIGJleW9uZCB0aGUgZWRnZSBvZiB0aGUgc3RhdHVzIGJhciAtLT4KICAgICA8aXRlbQotICAgICAgICBhbmRyb2lkOmRyYXdhYmxlPSJAKmFuZHJvaWQ6ZHJhd2FibGUvbm90aWZpY2F0aW9uX2l0ZW1fYmFja2dyb3VuZF9jb2xvciIKKyAgICAgICAgYW5kcm9pZDpkcmF3YWJsZT0iQGRyYXdhYmxlL25vdGlmaWNhdGlvbl9pdGVtX2JhY2tncm91bmRfY29sb3IiCiAgICAgICAgIGFuZHJvaWQ6dG9wPSIxMmRwIgogICAgICAgICAvPgogPC9sYXllci1saXN0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC1sYW5kL3N0YXR1c19iYXJfc2VhcmNoX3BhbmVsLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQtbGFuZC9zdGF0dXNfYmFyX3NlYXJjaF9wYW5lbC54bWwKaW5kZXggYTEwOTE5MS4uZGRmZmQ2ZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC1sYW5kL3N0YXR1c19iYXJfc2VhcmNoX3BhbmVsLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0LWxhbmQvc3RhdHVzX2Jhcl9zZWFyY2hfcGFuZWwueG1sCkBAIC01MSwxMyArNTEsMTMgQEAKICAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmRpcmVjdGlvbkRlc2NyaXB0aW9ucz0iQGFycmF5L25hdmJhcl9zZWFyY2hfZGlyZWN0aW9uX2Rlc2NyaXB0aW9ucyIKICAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOm91dGVyUmluZ0RyYXdhYmxlPSJAZHJhd2FibGUvbmF2YmFyX3NlYXJjaF9vdXRlcnJpbmciCiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpvdXRlclJhZGl1cz0iQGRpbWVuL25hdmJhcl9zZWFyY2hfb3V0ZXJyaW5nX3JhZGl1cyIKLSAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmlubmVyUmFkaXVzPSJAKmFuZHJvaWQ6ZGltZW4vZ2xvd3BhZHZpZXdfaW5uZXJfcmFkaXVzIgorICAgICAgICAgICAgICAgIHBydmFuZHJvaWQ6aW5uZXJSYWRpdXM9IkBkaW1lbi9nbG93cGFkdmlld19pbm5lcl9yYWRpdXMiCiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpzbmFwTWFyZ2luPSJAZGltZW4vbmF2YmFyX3NlYXJjaF9zbmFwX21hcmdpbiIKICAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmZlZWRiYWNrQ291bnQ9IjAiCiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDp2aWJyYXRpb25EdXJhdGlvbj0iQGludGVnZXIvY29uZmlnX3ZpYnJhdGlvbl9kdXJhdGlvbiIKICAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmFsd2F5c1RyYWNrRmluZ2VyPSJ0cnVlIgotICAgICAgICAgICAgICAgIHBydmFuZHJvaWQ6Z2xvd1JhZGl1cz0iQCphbmRyb2lkOmRpbWVuL2dsb3dwYWR2aWV3X2dsb3dfcmFkaXVzIgotICAgICAgICAgICAgICAgIHBydmFuZHJvaWQ6cG9pbnREcmF3YWJsZT0iQCphbmRyb2lkOmRyYXdhYmxlL2ljX2xvY2tzY3JlZW5fZ2xvd2RvdCIKKyAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmdsb3dSYWRpdXM9IkBkaW1lbi9nbG93cGFkdmlld19nbG93X3JhZGl1cyIKKyAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOnBvaW50RHJhd2FibGU9IkBkcmF3YWJsZS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QiCiAgICAgICAgICAgICAgICAgLz4KIAogICAgICAgICA8L1JlbGF0aXZlTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC1zdzYwMGRwL3N0YXR1c19iYXJfc2VhcmNoX3BhbmVsLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQtc3c2MDBkcC9zdGF0dXNfYmFyX3NlYXJjaF9wYW5lbC54bWwKaW5kZXggMWZhNjdiZC4uMDhmNjFiYiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC1zdzYwMGRwL3N0YXR1c19iYXJfc2VhcmNoX3BhbmVsLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0LXN3NjAwZHAvc3RhdHVzX2Jhcl9zZWFyY2hfcGFuZWwueG1sCkBAIC0zNywxMiArMzcsMTIgQEAKICAgICAgICAgcHJ2YW5kcm9pZDpkaXJlY3Rpb25EZXNjcmlwdGlvbnM9IkBhcnJheS9uYXZiYXJfc2VhcmNoX2RpcmVjdGlvbl9kZXNjcmlwdGlvbnMiCiAgICAgICAgIHBydmFuZHJvaWQ6b3V0ZXJSaW5nRHJhd2FibGU9IkBkcmF3YWJsZS9uYXZiYXJfc2VhcmNoX291dGVycmluZyIKICAgICAgICAgcHJ2YW5kcm9pZDpvdXRlclJhZGl1cz0iQGRpbWVuL25hdmJhcl9zZWFyY2hfb3V0ZXJyaW5nX3JhZGl1cyIKLSAgICAgICAgcHJ2YW5kcm9pZDppbm5lclJhZGl1cz0iQCphbmRyb2lkOmRpbWVuL2dsb3dwYWR2aWV3X2lubmVyX3JhZGl1cyIKKyAgICAgICAgcHJ2YW5kcm9pZDppbm5lclJhZGl1cz0iQGRpbWVuL2dsb3dwYWR2aWV3X2lubmVyX3JhZGl1cyIKICAgICAgICAgcHJ2YW5kcm9pZDpzbmFwTWFyZ2luPSJAZGltZW4vbmF2YmFyX3NlYXJjaF9zbmFwX21hcmdpbiIKICAgICAgICAgcHJ2YW5kcm9pZDpmZWVkYmFja0NvdW50PSIwIgogICAgICAgICBwcnZhbmRyb2lkOnZpYnJhdGlvbkR1cmF0aW9uPSJAaW50ZWdlci9jb25maWdfdmlicmF0aW9uX2R1cmF0aW9uIgogICAgICAgICBwcnZhbmRyb2lkOmFsd2F5c1RyYWNrRmluZ2VyPSJ0cnVlIgotICAgICAgICBwcnZhbmRyb2lkOmdsb3dSYWRpdXM9IkAqYW5kcm9pZDpkaW1lbi9nbG93cGFkdmlld19nbG93X3JhZGl1cyIKLSAgICAgICAgcHJ2YW5kcm9pZDpwb2ludERyYXdhYmxlPSJAKmFuZHJvaWQ6ZHJhd2FibGUvaWNfbG9ja3NjcmVlbl9nbG93ZG90Ii8+CisgICAgICAgIHBydmFuZHJvaWQ6Z2xvd1JhZGl1cz0iQGRpbWVuL2dsb3dwYWR2aWV3X2dsb3dfcmFkaXVzIgorICAgICAgICBwcnZhbmRyb2lkOnBvaW50RHJhd2FibGU9IkBkcmF3YWJsZS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QiLz4KIAogPC9jb20uYW5kcm9pZC5zeXN0ZW11aS5TZWFyY2hQYW5lbFZpZXc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfc2VhcmNoX3BhbmVsLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvc3RhdHVzX2Jhcl9zZWFyY2hfcGFuZWwueG1sCmluZGV4IGI4NzFiZWYuLmMwMWRiN2MgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvc3RhdHVzX2Jhcl9zZWFyY2hfcGFuZWwueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvc3RhdHVzX2Jhcl9zZWFyY2hfcGFuZWwueG1sCkBAIC01MSwxMyArNTEsMTMgQEAKICAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmRpcmVjdGlvbkRlc2NyaXB0aW9ucz0iQGFycmF5L25hdmJhcl9zZWFyY2hfZGlyZWN0aW9uX2Rlc2NyaXB0aW9ucyIKICAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOm91dGVyUmluZ0RyYXdhYmxlPSJAZHJhd2FibGUvbmF2YmFyX3NlYXJjaF9vdXRlcnJpbmciCiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpvdXRlclJhZGl1cz0iQGRpbWVuL25hdmJhcl9zZWFyY2hfb3V0ZXJyaW5nX3JhZGl1cyIKLSAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmlubmVyUmFkaXVzPSJAKmFuZHJvaWQ6ZGltZW4vZ2xvd3BhZHZpZXdfaW5uZXJfcmFkaXVzIgorICAgICAgICAgICAgICAgIHBydmFuZHJvaWQ6aW5uZXJSYWRpdXM9IkBkaW1lbi9nbG93cGFkdmlld19pbm5lcl9yYWRpdXMiCiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDpzbmFwTWFyZ2luPSJAZGltZW4vbmF2YmFyX3NlYXJjaF9zbmFwX21hcmdpbiIKICAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmZlZWRiYWNrQ291bnQ9IjAiCiAgICAgICAgICAgICAgICAgcHJ2YW5kcm9pZDp2aWJyYXRpb25EdXJhdGlvbj0iQGludGVnZXIvY29uZmlnX3ZpYnJhdGlvbl9kdXJhdGlvbiIKICAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmFsd2F5c1RyYWNrRmluZ2VyPSJ0cnVlIgotICAgICAgICAgICAgICAgIHBydmFuZHJvaWQ6Z2xvd1JhZGl1cz0iQCphbmRyb2lkOmRpbWVuL2dsb3dwYWR2aWV3X2dsb3dfcmFkaXVzIgotICAgICAgICAgICAgICAgIHBydmFuZHJvaWQ6cG9pbnREcmF3YWJsZT0iQCphbmRyb2lkOmRyYXdhYmxlL2ljX2xvY2tzY3JlZW5fZ2xvd2RvdCIKKyAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOmdsb3dSYWRpdXM9IkBkaW1lbi9nbG93cGFkdmlld19nbG93X3JhZGl1cyIKKyAgICAgICAgICAgICAgICBwcnZhbmRyb2lkOnBvaW50RHJhd2FibGU9IkBkcmF3YWJsZS9pY19sb2Nrc2NyZWVuX2dsb3dkb3QiCiAgICAgICAgICAgICAgICAvPgogCiAgICAgICAgIDwvUmVsYXRpdmVMYXlvdXQ+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAppbmRleCA5ZGRmNDJhLi4zZDMzZDY5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iTGFhdCBhbHR5ZCB0b2UgdmFuIGhpZXJkaWUgcmVrZW5hYXIgYWYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJab2VtIG9tIHNrZXJtIHRlIHZ1bCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJTdHJlayBvbSBza2VybSB0ZSB2dWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJWZXJzb2VuYmFhcmhlaWRzem9lbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJBcyBcJ24gcHJvZ3JhbSB2aXIgXCduIGtsZWluZXIgc2tlcm0gb250d2VycCBpcywgc2FsIFwnbiB6b2Vta29udHJvbGUgbmFieSBkaWUgaG9ybG9zaWUgdmVyc2t5biI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTdG9vciB0YW5zIHNrZXJta2lla2llLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iU3Rvb3IgdGFucyBza2VybWtpZWtpZS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iU2tlcm1raWVraWUgd29yZCB0YW5zIGdlc3Rvb3IuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlR1aXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJLaWVzbHlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iT25sYW5nc2UgcHJvZ3JhbW1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iRGV1cnNvZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iS2FtZXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJLbm9wcGllIHZpciB3aXNzZWwgdmFuIGludm9lcm1ldG9kZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iVmVyc29lbmJhYXJoZWlkLXpvZW0gc2Uga25vcHBpZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IlpvZW0ga2xlaW5lciBuYSBncm90ZXIgc2tlcm0uIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0dGVyeSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IlZsaWVndHVpZ21vZHVzIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IkxpZ2dpbmcgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJXZWtrZXIgZ2VzdGVsIHZpciA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJHLTNHLWRhdGEgZ2VkZWFrdGl2ZWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEcgZGF0YSBnZWRlYWt0aXZlZXIiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkgZ2Vrb3BwZWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IlNvZWsgdmlyIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJMaWdnaW5nIGRldXIgR1BTIGdlc3RlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IkxpZ2dpbmd2ZXJzb2VrZSBha3RpZWYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJWZXJ3eWRlciBhbGxlIGtlbm5pc2dld2luZ3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IlByb2dyYW1pbmxpZ3RpbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IkRpZSBza2VybSBzYWwgb3V0b21hdGllcyBkcmFhaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IlNrZXJtIGlzIGluIGxhbmRza2Fwc29yacOrbnRhc2llIGdlc2x1aXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IlNrZXJtIGlzIGluIHBvcnRyZXRvcmnDq250YXNpZSBnZXNsdWl0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJOYWdlcmVna2FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IlNsdWltZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iVmxpZWd0dWlnbW9kdXMiPC9zdHJpbmc+CkBAIC0xODIsMTAgKzE4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+Ik91dG9yb3RlZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iUm90YXNpZSBnZXNsdWl0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Ikludm9lcm1ldG9kZSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCAoNTAxMTMyNzA0ODc0ODc2MjI1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwgKDc0NjQ1NDQwODY1MDczMzE0NTkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJMaWdnaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IkxpZ2dpbmcgYWYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4iTWVkaWF0b2VzdGVsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJOZXQgbm9vZG9wcm9lcGUiPC9zdHJpbmc+CkBAIC0xOTYsMTIgKzE5NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5pZSBnZWtvcHBlbCBuaWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iR2VlbiBuZXR3ZXJrIG5pZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIGFmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpLXNrZXJtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iRHJhYWRsb3NlIGFhbnNpZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJTYWFpIG5hIHNrZXJtIHVpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkhlbGRlcmhlaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iT1VUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJLZW5uaXNnZXdpbmdzIHZlcnNreW4gaGllciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IlZlcmtyeSBlbmlnZSB0eWQgdG9lZ2FuZyB0b3QgaHVsbGUgZGV1ciBhZiB0ZSBzbGVlcC5cblNsZWVwIHdlZXIgYWYgdmlyIHN0ZWxzZWxrb250cm9sZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iU2xlZXAgcmFuZCB2YW4gc2tlcm0gb20gYmFsayB0ZSB3eXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IlNsZWVwIHZhbiByYW5kIHZhbiBza2VybSBhZiBvbSBzdGVsc2VsYmFsayB0ZSB3eXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iS2xldXItb21rZXJpbmdtb2R1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IlZlcmJldGVyZGUga29udHJhc21vZHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJLbGV1cnJlZ3N0ZWxsaW5nbW9kdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Ik5ldHdlcmsgd29yZFxuZGFsayBnZW1vbml0b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlNvZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iR2x5IG9wIHZpciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iR2x5IGxpbmtzIHZpciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAppbmRleCAxZDgxZWE3Li44Y2I1YzRjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i4YiB4YiN4YyK4YucIOGKqOGLmuGIhSDhiq7hiJ3hjZLhi43hibDhiK0g4Y2N4YmA4Yu1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i4Yib4YurIOGKpeGKleGLsuGInuGIiyDhiqDhjInhiIsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i4Yib4YurIOGIiOGImOGImeGIiOGJtSDhiLPhiaUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLhi6jhibDhirPhiovhip3hipDhibUg4Yqg4YyJ4YiLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IuGJteGMjeGJoOGIqyDhiIjhibXhipXhiL0g4Yib4YurIOGIsuGKkOGLsOGNjeGNoyDhi6jhiqDhjInhiIsg4YiY4YmG4YiY4Yyj4Yyg4Yiq4YurIOGJoOGIsOGLk+GJtSDhiaDhiqnhiI0g4Yml4YmFIOGLreGIi+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLhiYXhjL3hiaDhibPhi4og4YyI4Yy9IOGKpeGLreGJsyDhiaDhiJvhiLXhiYDhiJjhjKUg4YiL4YutLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i4YmF4Yy94Ymg4Ymz4YuKIOGMiOGMvSDhiqXhi63hibMg4Ymg4Yib4Yi14YmA4YiY4YylIOGIi+GLrS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i4YmF4Yy94Ymg4Ymz4YuKIOGMiOGMvSDhiqXhi63hibMg4Yql4Yuo4Ymw4YmA4YiY4YygIOGKkOGLjTo6Ijwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IuGImOGKkOGIuyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+IuGIneGKk+GIjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IuGLqOGJheGIreGJpSDhjIrhi5wgIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IuGNiOGIjeGMjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLhiqvhiJzhiKsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IuGLqOGMjeGJpOGJtSDhiLXhiI3hibUg4Yqg4Yud4Yir4YitIOGJgOGLreGIrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLhi6jhibDhirPhiovhip3hiqDhjInhiIsg4Yqg4Yud4Yir4Yit4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLhiqDhipDhiLXhibDhipvhi43hipUg4Yib4YurIOGLiOGLsCDhibXhiI3hiYUg4Yqg4YyJ4YiL4Y2iIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i4Ymj4Ym14YiqIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLhi6jhiqDhi43hiK7hjZXhiIvhipUg4YiB4YqQ4YmzIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4i4Yml4YiJ4Ymx4YudIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+4Y2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLhiqDhiqvhiaPhiaIgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz7hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IuGIm+GKleGJguGLqyDhiIg8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+IOGJsOGLi+GJheGIr+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJHLTNHIOGLjeGIguGJpSDhiabhi53hipfhiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyDhi43hiILhiaUg4Ymm4Yud4YqX4YiNIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIOGJsOGLq+GLreGLn+GIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i4YiIR1BTIOGJoOGImOGNiOGIiOGMjSDhiIvhi60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i4YmgIEdQUyDhi6jhibDhi5jhjIvhjIAg4Yil4Y2N4YirIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i4Yuo4Yqg4Yqr4Ymj4YmiIOGMpeGLq+GJhOGLjuGJvSDhipDhiYXhibDhi4vhiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLhiIHhiInhipXhiJ0g4Yib4Yiz4YuI4YmC4Yur4YuO4Ym9IOGKoOGMveGLsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLhi6jhiJjhibDhjI3hiaDhiKrhi6sg4YiY4Yio4YyDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLhiJvhi6sg4YyI4Yy9IOGJoOGIq+GItSDhiLDhiK0g4Yut4Yue4Yir4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLhiJvhi6sg4YyI4Yy9IOGJoOGLiOGIreGLtSDhjIjhjYUg4Yqg4YmA4Yib4YiY4YylIOGJsOGJhuGIjeGNj+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLhiJvhi6sg4YyI4Yy9IOGJoOGJgeGInSDhjIjhjYUg4Yqg4YmA4Yib4YiY4YylIOGJsOGJhuGIjeGNj+GIjeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiLhi6jhiJvhi4jhiKvhiKjhjIMg4Yid4YyN4Ymm4Ym9IOGImOGLq+GLoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLhi6jhiYDhipUg4YiF4YiN4YidIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4i4Yqk4Ymw4Yit4YqU4Ym1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLhi6jhiqDhi43hiK7hjZXhiIvhipUg4YiB4YqQ4YmzIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLhiqDhiI3hibDhjIjhipPhipjhiJ0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i4Yid4YqV4YidIOGKoOGLjeGJs+GIqCDhiJjhiKjhiaUg4Yuo4YiI4YidIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg4Yyg4Y2N4Ym34YiNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IuGLqFdpLUZpIOGIm+GIs+GLqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IuGMiOGImOGLtSDhiqDhiI3hiaMg4Yib4Yiz4YurIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IuGIm+GLqyDhjIjhjL0g4YuN4Yiw4Yu1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i4Yml4Yip4YiF4YqQ4Ym1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IuGIq+GItS3hiLDhiK0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4i4Yib4Yiz4YuI4YmC4Yur4YuO4Ym9IOGKpeGLmuGIhSDhiIvhi60g4Yut4Ymz4Yur4YiJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4i4YuI4YuwIOGJs+GJvSDhiaDhiJvhipXhiLjhiKvhibDhibUg4Ymg4Yib4YqV4Yqb4YuN4YidIOGMiuGLnCDhi63hi7XhiKjhiLHhiaPhibjhi43hjaJcblN3aXBlIOGLqOGIteGIreGLk+GJtSDhiJjhiYbhjKPhjKDhiKrhi6vhi47hib3hipUg4YiI4Yib4Yid4Yyj4Ym1IOGKpeGKleGLsOGMiOGKkyDhi4jhi7Ag4Ymz4Ym9IOGLq+GKleGIuOGIq+GJteGJseGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IuGKoOGInuGIjOGLjeGKlSDhiIjhiJvhiLPhi6jhibUg4Yuo4Yib4YurIOGMiOGMueGKlSDhjKDhiK3hi50g4YiL4YutIOGLq+GKleGIuOGIq+GJteGJsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4i4Yqg4Yie4YiM4YuN4YqVIOGIiOGIm+GIs+GLqOGJtSDhiqjhiJvhi6sg4YyI4Yy5IOGMoOGIreGLnSDhjIDhiJ3hiKjhi40g4Yur4YqV4Yi44Yir4Ym14YmxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IuGLqOGJsOGJg+GIq+GKkiDhiYDhiIjhiJ0g4YiB4YqQ4YmzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4i4Yuo4Ymw4Yi74Yi74YiIIOGKleGNheGNheGIrSDhiIHhipDhibMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IuGLqOGJgOGIiOGInSDhiqXhiK3hiJvhibUg4YiB4YqQ4YmzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiLhiqDhi43hibPhiKgg4YiY4Yio4YmlXG7hiq3hibXhibXhiI0g4YiK4Yuw4Yio4YyN4Ymg4Ym1IOGLreGJveGIi+GIjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i4Y2N4YiI4YyLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuGIiDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDhi4jhi7Ag4YiL4YutIOGKoOGKleGIuOGIq+GJteGJteGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuGIiDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDhi4jhi7Ag4YyN4YirIOGKoOGKleGIuOGIq+GJteGJteGNoiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKaW5kZXggYzMxZDZkOS4uODIxZTIxZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCkBAIC0yNywxNSArMjcsMTUgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4i2KXYstin2YTYqSDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNit2K/Zitir2KkiPC9zdHJpbmc+CiAgIDxwbHVyYWxzIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9yZWNlbnRfYXBwcyI+CiAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiLYqti32KjZitmCINit2K/ZitirINmI2KfYrdivIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQg2YXZhiDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNit2K/Zitir2KkiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiLigI8lZCDZhdmGINin2YTYqti32KjZitmC2KfYqiDYp9mE2K3Yr9mK2KvYqSI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiLZhNmK2LMg2YfZhtin2YMg2KPZiiDYqtmG2KjZitmH2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiLZhNmK2LMg2YfZhtin2YMg2KPZiiDYp9i02LnYp9ix2KfYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4i2YXYs9iq2YXYsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbGF0ZXN0X2V2ZW50c190aXRsZSIgbXNnaWQ9IjY1OTQ3Njc0Mzg1Nzc1OTMxNzIiPiLYp9mE2KrZhtio2YrZh9in2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4i2KfZhNil2LTYudin2LHYp9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4i2KrZiNi12YrZhCDYp9mE2LTYp9it2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiLYp9mG2K7Zgdi22Kog2LfYp9mC2Kkg2KfZhNio2LfYp9ix2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiLYp9mE2YXYqtio2YLZijogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQlJTwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4i2LTYrdmGIFVTQiDYutmK2LEg2YXYudiq2YXYry5cbtin2LPYqtiu2K/ZhSDYp9mE2LTYp9it2YYg2KfZhNmF2YjZgdixINmB2YLYty4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4i4oCP2LTYrdmGIFVTQiDYutmK2LEg2YXYudiq2YXYry5cbtin2LPYqtiu2K/ZhSDYp9mE2LTYp9it2YYg2KfZhNmF2YjZgdixINmB2YLYty4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4i2KfYs9iq2K7Yr9in2YUg2KfZhNio2LfYp9ix2YrYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+Itin2YTYpdi52K/Yp9iv2KfYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CkBAIC00MywyNiArNDMsMjQgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiLYp9mE2KrYr9mI2YrYsSDYp9mE2KrZhNmC2KfYptmKINmE2YTYtNin2LTYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+ItmD2KrZhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4i2KrZhNmC2KfYptmKIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i2KfZhNiq2YbYqNmK2YfYp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i2KfZhNil2LTYudin2LHYp9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+Itiq2YUg2KXZhti02KfYoSDYp9mE2KfYqti12KfZhCDYqNin2YTYpdmG2KrYsdmG2Kog2LnZhiDYt9ix2YrZgiDYp9mE2KjZhNmI2KrZiNirLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+Itil2LnYr9in2K8g2KPYs9mE2YjYqCDYp9mE2KXYr9iu2KfZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+ItmE2YjYrdipINmF2YHYp9iq2YrYrSDZgdi52YTZitipIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+ItmH2YQg2KrYsdmK2K8g2KfZhNiz2YXYp9itINmE2YTYqti32KjZitmCIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g2KjYp9mE2K/YrtmI2YQg2KXZhNmJINis2YfYp9iyIFVTQtifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiLZh9mEINiq2LHZitivINin2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INio2KfZhNiv2K7ZiNmEINil2YTZiSDZhdmE2K3ZgiBVU0LYnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4i2YfZhCDYqtix2YrYryDZgdiq2K0gPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDYudmG2K8g2KrZiNi12YrZhCDYrNmH2KfYsiBVU0Ig2YfYsNin2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+ItmH2YQg2KrYsdmK2K8g2YHYqtitIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g2LnZhtivINiq2YjYtdmK2YQg2YXZhNit2YIgVVNCINmH2LDYp9ifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i2YTYpyDZiti52YXZhCDYo9mKINiq2LfYqNmK2YIg2YXYq9io2Kog2YXYuSDZhdmE2K3ZgiBVRUIg2YfYsNinLiDZhdiy2YrYryDZhdmGINin2YTZhdi52YTZiNmF2KfYqiDYudmGINmH2LDYpyDYp9mE2YXZhNit2YIg2LnZhNmJIDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4i2YXZhNit2YIgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+IuKAj9mH2YQg2KrYsdmK2K8g2KfZhNiz2YXYp9itINmE2YTYqti32KjZitmCIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g2KjYp9mE2K/YrtmI2YQg2KXZhNmJINis2YfYp9iyIFVTQtifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiLigI/Zh9mEINiq2LHZitivINin2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INio2KfZhNiv2K7ZiNmEINil2YTZiSDZhdmE2K3ZgiBVU0LYnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4i4oCP2YfZhCDYqtix2YrYryDZgdiq2K0gPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDYudmG2K8g2KrZiNi12YrZhCDYrNmH2KfYsiBVU0Ig2YfYsNin2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IuKAj9mH2YQg2KrYsdmK2K8g2YHYqtitIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g2LnZhtivINiq2YjYtdmK2YQg2YXZhNit2YIgVVNCINmH2LDYp9ifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i4oCP2YTYpyDZiti52YXZhCDYo9mKINiq2LfYqNmK2YIg2YXYq9io2Kog2YXYuSDZhdmE2K3ZgiBVRUIg2YfYsNinLiDZhdiy2YrYryDZhdmGINin2YTZhdi52YTZiNmF2KfYqiDYudmGINmH2LDYpyDYp9mE2YXZhNit2YIg2LnZhNmJIDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4i4oCP2YXZhNit2YIgVVNCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiLYudix2LYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiLYp9mE2KfYs9iq2K7Yr9in2YUg2KjYtNmD2YQg2KfZgdiq2LHYp9i22Yog2YTYrNmH2KfYsiBVU0Ig2YfYsNinIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4i2KfZhNin2LPYqtiu2K/Yp9mFINio2LTZg9mEINin2YHYqtix2KfYttmKINmE2YXZhNit2YIgVVNCINmH2LDYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4i2YfZhCDYqtix2YrYryDYp9mE2LPZhdin2K0g2KjYqti12K3ZititINij2K7Yt9in2KEgVVNC2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4i2KfZhNmF2YTZgSDYp9mE2YXYsdis2LnZiiDYp9mE2LHYptmK2LPZiiDZhNmAIFJTQSDZgdmKINmH2LDYpyDYp9mE2YPZhdio2YrZiNiq2LEg2YfZiDpcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiLigI/Yp9mE2KfYs9iq2K7Yr9in2YUg2KjYtNmD2YQg2KfZgdiq2LHYp9i22Yog2YTYrNmH2KfYsiBVU0Ig2YfYsNinIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4i4oCP2KfZhNin2LPYqtiu2K/Yp9mFINio2LTZg9mEINin2YHYqtix2KfYttmKINmE2YXZhNit2YIgVVNCINmH2LDYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4i4oCP2YfZhCDYqtix2YrYryDYp9mE2LPZhdin2K0g2KjYqti12K3ZititINij2K7Yt9in2KEgVVNC2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4i4oCP2KfZhNmF2YTZgSDYp9mE2YXYsdis2LnZiiDYp9mE2LHYptmK2LPZiiDZhNmAIFJTQSDZgdmKINmH2LDYpyDYp9mE2YPZhdio2YrZiNiq2LEg2YfZiDpcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+Itin2YTYs9mF2KfYrSDYr9in2KbZhdmL2Kcg2YXZhiDZh9iw2Kcg2KfZhNmD2YXYqNmK2YjYqtixIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i2KrZg9io2YrYsS/Yqti12LrZitixINmE2YXZhNihINin2YTYtNin2LTYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLYqtmI2LPZiti5INio2YXZhNihINin2YTYtNin2LTYqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+Itiq2YPYqNmK2LEv2KrYtdi62YrYsSDYp9mE2KrZiNin2YHZgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiLYudmG2K8g2KrYtdmF2YrZhSDYqti32KjZitmCINmE2LTYp9i02Kkg2KPYtdi62LHYjCDYs9mK2LjZh9ixINi52YbYtdixINiq2K3Zg9mFINmB2Yog2KfZhNiq2YPYqNmK2LEv2KfZhNiq2LXYutmK2LEg2KjYrNmI2KfYsSDYp9mE2LPYp9i52KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+Itis2KfYsdmNINit2YHYuCDZhNmC2LfYqSDYp9mE2LTYp9i02KkuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLYrNin2LHZjSDYrdmB2Lgg2YTZgti32Kkg2KfZhNi02KfYtNipLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLZitiq2YUg2K3Zgdi4INmE2YLYt9ipLiI8L3N0cmluZz4KQEAgLTcwLDE0ICs2OCwxNiBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+Itin2YTZhdizINmE2LnYsdi2INmE2YLYt9ipINin2YTYtNin2LTYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90aXRsZSIgbXNnaWQ9IjcwNTc4MTExNjc0NjkyMjc3MSI+Itiq2LnYsNixINin2YTYqtmC2KfYtyDZhNmC2LfYqSDYp9mE2LTYp9i02KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiLYqti52LDYsSDYrdmB2Lgg2YTZgti32Kkg2KfZhNi02KfYtNipLiDZgtivINmK2YPZiNmGINin2YTYqtiu2LLZitmGINmC2YrYryDYp9mE2KfYs9iq2K7Yr9in2YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4i2K7Zitin2LHYp9iqINmG2YLZhCDYp9mE2YXZhNmB2KfYqiDYudio2LEgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlX210cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI0MzMzNTA0NDEzNTYzMDIzNjI2Ij4i2KrYrdmF2YrZhCDZg9mF2LTYutmEINmI2LPYp9im2LcgKE1UUCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLYqtit2YXZitmEINmD2YPYp9mF2YrYsdinIChQVFApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLYqtir2KjZitiqINiq2LfYqNmK2YIgQW5kcm9pZCBGaWxlIFRyYW5zZmVyINmE2YAgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4i4oCP2K7Zitin2LHYp9iqINmG2YLZhCDYp9mE2YXZhNmB2KfYqiDYudio2LEgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX210cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI0MzMzNTA0NDEzNTYzMDIzNjI2Ij4i4oCP2KrYrdmF2YrZhCDZg9mF2LTYutmEINmI2LPYp9im2LcgKE1UUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLigI/Yqtit2YXZitmEINmD2YPYp9mF2YrYsdinIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLigI/Yqtir2KjZitiqINiq2LfYqNmK2YIgQW5kcm9pZCBGaWxlIFRyYW5zZmVyINmE2YAgTWFjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4i2LHYrNmI2LkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i2KfZhNix2KbZitiz2YrYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Itin2YTZgtin2KbZhdipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYrdiv2YrYq9ipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4i2KjYrdirIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+Itin2YTZg9in2YXZitix2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+Itiy2LEg2KrYqNiv2YrZhCDYt9ix2YrZgtipINin2YTYpdiv2K7Yp9mELiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLYstixINiq2YPYqNmK2LEv2KrYtdi62YrYsSDZhNmE2KrZiNin2YHZgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Itin2LPYqtiu2K/Yp9mFINin2YTYqtmD2KjZitixL9in2YTYqti12LrZitixINmE2KrYrdmI2YrZhCDYtNin2LTYqSDYtdi62YrYsdipINil2YTZiSDYtNin2LTYqSDYo9mD2KjYsSI8L3N0cmluZz4KQEAgLTk4LDE3ICs5OCwxNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+Itil2LTYp9ix2Kkg2KfZhNio2YrYp9mG2KfYqiDYqtiq2YPZiNmGINmF2YYg2LTYsdmK2LfZitmGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+Itil2LTYp9ix2Kkg2KfZhNio2YrYp9mG2KfYqiDYqtiq2YPZiNmGINmF2YYg2KvZhNin2KvYqSDYo9i02LHYt9ipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiLYpdi02KfYsdipINin2YTYqNmK2KfZhtin2Kog2YPYp9mF2YTYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+Itiq2YUg2KXZitmC2KfZgSBXaS1GaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4i2KrZhSDZgti32Lkg2KfYqti12KfZhCBXaS1GaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiLYpdi02KfYsdipIFdpLUZpINiq2KrZg9mI2YYg2YXZhiDYtNix2YrYtyDZiNin2K3Yry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4i2KXYtNin2LHYqSBXaS1GaSDYqtiq2YPZiNmGINmF2YYg2LTYsdmK2LfZitmGLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+Itil2LTYp9ix2KkgV2ktRmkg2KrYqtmD2YjZhiDZhdmGINir2YTYp9ir2Kkg2KPYtNix2LfYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2ODUzNTYxMzAzNTg2NDgwMzc2Ij4i2KXYtNin2LHYqSBXaS1GaSDZg9in2YXZhNipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4i2YTZitizINmH2YbYp9mDIFdpTUFYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiLYtNix2YrYtyBXaU1BWCDZiNin2K3Yry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+Iti02LHZiti32KcgV2lNQVguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90aHJlZV9iYXJzIiBtc2dpZD0iNjExNjU1MTYzNjc1MjEwMzkyNyI+Itij2LTYsdi32KkgV2lNQVgg2KfZhNir2YTYp9ir2KkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3NjgwODk5ODY3OTU1Nzk1NTgiPiLYpdi02KfYsdipIFdpTUFYINmD2KfZhdmE2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiLigI/YqtmFINil2YrZgtin2YEgV2ktRmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IuKAj9iq2YUg2YLYt9i5INin2KrYtdin2YQgV2ktRmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4i4oCP2KXYtNin2LHYqSBXaS1GaSDYqtiq2YPZiNmGINmF2YYg2LTYsdmK2Lcg2YjYp9it2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IuKAj9il2LTYp9ix2KkgV2ktRmkg2KrYqtmD2YjZhiDZhdmGINi02LHZiti32YrZhi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiLigI/Ypdi02KfYsdipIFdpLUZpINiq2KrZg9mI2YYg2YXZhiDYq9mE2KfYq9ipINij2LTYsdi32KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IuKAj9il2LTYp9ix2KkgV2ktRmkg2YPYp9mF2YTYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+IuKAj9mE2YrYsyDZh9mG2KfZgyBXaU1BWC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X29uZV9iYXIiIG1zZ2lkPSI0MTcwOTk0Mjk5MDExODYzNjQ4Ij4i4oCP2LTYsdmK2LcgV2lNQVgg2YjYp9it2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiLigI/YtNix2YrYt9inIFdpTUFYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiLigI/Yo9i02LHYt9ipIFdpTUFYINin2YTYq9mE2KfYq9ipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4i4oCP2KXYtNin2LHYqSBXaU1BWCDZg9in2YXZhNipLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+ItmE2YrYs9iqINmH2YbYp9mDINil2LTYp9ix2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+Iti62YrYsSDZhdiq2LXZhC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3plcm9fYmFycyIgbXNnaWQ9IjM4MDYwNjAyMjQ0NjcwMjc4ODciPiLZhNmK2LPYqiDZh9mG2KfZgyDYo9i02LHYt9ipLiI8L3N0cmluZz4KQEAgLTEyMywyMiArMTIzLDIyIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjHigI4gWOKAjiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+Iti02KjZg9ipINin2YTYrNmK2YQg2KfZhNir2KfZhNirIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiLYtNio2YPYqSAzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiLigI/YtNio2YPYqSAzLjVHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4i2LTYqNmD2Kkg2KfZhNis2YrZhCDYp9mE2LHYp9io2LkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiLYqtis2YjYp9mEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiJXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+ItmE2YrYs9iqINmH2YbYp9mDINio2LfYp9mC2KkgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IuKAj9mE2YrYs9iqINmH2YbYp9mDINio2LfYp9mC2KkgU0lNLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX3RldGhlciIgbXNnaWQ9IjQxMDI3ODQ0OTgxNDAyNzE5NjkiPiLYsdio2Lcg2KfZhNio2YTZiNiq2YjYqy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiLZiNi22Lkg2KfZhNi32KfYptix2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsIiBtc2dpZD0iNzQ1MTQ3NDE4NzExMzM3MTk2NSI+ItmF2LPYqtmI2Ykg2KfZhNio2LfYp9ix2YrYqSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g2YHZiiDYp9mE2YXYp9im2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiLYpdi52K/Yp9iv2KfYqiDYp9mE2YbYuNin2YUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiLYp9mE2KXYtNi52KfYsdin2KouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+ItmF2K3ZiCDYp9mE2KXYtNi52KfYsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+Itiq2YUg2KrZhdmD2YrZhiBHUFMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+Itin2YTYrdi12YjZhCDYudmE2YkgR1BTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4i4oCP2KrZhSDYqtmF2YPZitmGIEdQUy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4i4oCP2KfZhNit2LXZiNmEINi52YTZiSBHUFMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiLYqtmFINiq2YXZg9mK2YYg2KfZhNmF2KjYsdmC2Kkg2KfZhNmD2KfYqtio2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+Itix2YbZitmGINmF2Lkg2KfZhNin2YfYqtiy2KfYsi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i2LHZhtmK2YYg2LXYp9mF2KouIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i2KfZhNio2LfYp9ix2YrYqSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+ItmI2LbYuSDYp9mE2LfYp9im2LHYqSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiLYp9mE2KjZhNmI2KrZiNirIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4i2K3Yp9mE2Kkg2KfZhNmF2YjZgti5OiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+Itiq2YUg2LbYqNi3INin2YTZhdmG2KjZhyDYudmE2YkgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiLYqtmFINiq2LnYt9mK2YQg2KjZitin2YbYp9iqINi02KjZg9in2Kog2KfZhNis2YrZhCDYp9mE2KvYp9mG2Yog2YjYp9mE2KzZitmEINin2YTYq9in2YTYqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+Itiq2YUg2KrYudi32YrZhCDYqNmK2KfZhtin2Kog2LTYqNmD2Kkg2KfZhNis2YrZhCDYp9mE2LHYp9io2LkiPC9zdHJpbmc+CkBAIC0xNjEsMTUgKzE2MiwxNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4i2YTZgtivINmI2LXZhNiqINil2YTZiSDYrdivINin2LPYqtiu2K/Yp9mFINin2YTYqNmK2KfZhtin2Kog2KfZhNmF2K3Yr9ivLiBcbiBcbiDYpdiw2Kcg2KPYudiv2Kog2KrZhdmD2YrZhiDYp9mE2KjZitin2YbYp9iqINiMINmB2YLYryDZitiq2YUg2KrYrdi12YrZhCDYsdiz2YjZhSDZhdmG2YMg2YXZhiDZgtio2YQg2YXYtNi62YQg2LTYqNmD2Kkg2KfZhNis2YjYp9mELiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiLYpdi52KfYr9ipINiq2YXZg9mK2YYg2KfZhNio2YrYp9mG2KfYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjE5NDAyMzE1MjEyNzQxNDc3NzEiPiLZhNinINmK2YjYrNivINin2KrYtdin2YQg2KXZhtiq2LHZhtiqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg2YXYqti12YQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+Itis2KfYsdmNINin2YTYqNit2Ksg2LnZhiBHUFMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i2KrZhSDYqti52YrZitmGINin2YTZhdmI2YLYuSDYqNmI2KfYs9i32KkgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4i4oCPV2ktRmkg2YXYqti12YQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IuKAj9is2KfYsdmNINin2YTYqNit2Ksg2LnZhiBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i4oCP2KrZhSDYqti52YrZitmGINin2YTZhdmI2YLYuSDYqNmI2KfYs9i32KkgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i2LfZhNio2KfYqiDYp9mE2YXZiNmC2Lkg2YbYtNi32KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLZhdit2Ygg2KzZhdmK2Lkg2KfZhNil2LTYudin2LHYp9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLZhdi52YTZiNmF2KfYqiDYp9mE2KrYt9io2YrZgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i2LPZitiq2YUg2KrYr9mI2YrYsSDYp9mE2LTYp9i02Kkg2KrZhNmC2KfYptmK2YvYpy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+Itiq2YUg2KrYo9mF2YrZhiDYp9mE2LTYp9i02Kkg2YHZiiDYp9mE2KfYqtis2KfZhyDYp9mE2KPZgdmC2YouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+Itiq2YUg2KrYo9mF2YrZhiDYp9mE2LTYp9i02Kkg2YHZiiDYp9mE2KfYqtis2KfZhyDYp9mE2LnZhdmI2K/Zii4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4i2K3Yp9mE2Kkg2KfZhNit2YTZiNmK2KfYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLYrdmE2YUg2KfZhNmK2YLYuNipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+ItmI2LbYuSDYp9mE2LfYp9im2LHYqSI8L3N0cmluZz4KQEAgLTE5MywxMyArMTk1LDE1IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IldpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+ItmE2YrYs9iqINmF2KrYtdmE2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i2YTYpyDYqtiq2YjZgdixINi02KjZg9ipIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4i2KXZitmC2KfZgSBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiLYudix2LYgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiLYudix2LYg2LTYp9i02Kkg2YTYp9iz2YTZg9mKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4i4oCP2KXZitmC2KfZgSBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLYqNirINin2YTYtNin2LTYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+Itin2YTYs9i32YjYuSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLYqtmE2YLYp9im2YoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4i2KrYuNmH2LEg2KfZhNil2LTYudin2LHYp9iqINmH2YbYpyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+ItmK2YXZg9mG2YMg2KfZhNiv2K7ZiNmEINil2YTZitmH2Kcg2YHZiiDYo9mKINmI2YLYqiDYqNin2YTYqtmF2LHZitixINin2YTYs9ix2YrYuSDYpdmE2Ykg2KPYs9mB2YQuXG7ZitmF2YPZhtmDINin2YTYqtmF2LHZitixINin2YTYs9ix2YrYuSDYpdmE2Ykg2KPYs9mB2YQg2YXYsdipINij2K7YsdmJINmE2YTZiNi12YjZhCDYpdmE2Ykg2LnZhtin2LXYsSDYqtit2YPZhSDYp9mE2YbYuNin2YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4i2YXYsdixINiz2LHZiti52YvYpyDZhNit2KfZgdipINin2YTYtNin2LTYqSDZhNil2LjZh9in2LEg2KfZhNi02LHZiti3Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiLZhdix2LEg2LPYsdmK2LnZi9inINmF2YYg2K3Yp9mB2Kkg2KfZhNi02KfYtNipINmE2KXYuNmH2KfYsSDYtNix2YrYtyDYp9mE2YbYuNin2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i2YjYtti5INin2YbYudmD2KfYsyDYp9mE2YTZiNmGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4i2YjYtti5INin2YTYqtio2KfZitmGINin2YTZhdit2LPZhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4i2YjYtti5INiq2LXYrdmK2K0g2KfZhNij2YTZiNin2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+ItmC2K8g2KrZg9mI2YYg2KfZhNi02KjZg9ipXG7Yrtin2LbYudipINmE2YTYsdmC2KfYqNipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLYqNit2KsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i2KrZhdix2YrYsSDZhNij2LnZhNmJINmE2YAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Itiq2YXYsdmK2LEg2YTZhNmK2LPYp9ixINmE2YAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hei1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hei1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYjY5NzgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6LWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IkhhesSxcmRhIGVrcmFuIGxhbmTFn2FmdCBvcmllbnRhc2l5YXPEsW5kYSBraWxpZGzJmW5pYi4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXotckFaLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6LXJBWi1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYjY5NzgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6LXJBWi1sYW5kL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3JvdGF0aW9uX2xvY2tlZCIgbXNnaWQ9Ijc2MDk2NzMwMTE0MzE1NTYwOTIiPiJIYXrEsXJkYSBla3JhbiBsYW5kxZ9hZnQgb3JpZW50YXNpeWFzxLFuZGEga2lsaWRsyZluaWIuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NjVlZWUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIwNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+IlNpc3RlbWluIMSwc3RpZmFkyZkgxLBudGVyZmV5c2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4iVMmZbWl6bMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4iU2l5YWjEsWRhbiBzaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4iVMmZdGJpcSBpbmZvc3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IlllbmkgdMmZdGJpcSB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IlNvbiB0yZl0YmlxbMmZcmkga8mZbmFybGHFn2TEsXIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9yZWNlbnRfYXBwcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiIxIHNvbiB0yZl0YmlxIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQgc29uIHTJmXRiaXEiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4iQmlsZGlyacWfIHlveGR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiJEYXZhbSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+IkJpbGRpcmnFn2zJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiJBZGFwdGVyaSBxb8WfdW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiJCYXRhcmV5YSBhemFsxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkJSU8L3hsaWZmOmc+IHFhbMSxYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJVU0IgaWzJmSBlbGVrdHJpayBkb2xkdXJtYSBkyZlzdMmZa2zJmW5taXIuXG5ZYWxuxLF6IGFkYXB0ZXIgaXN0aWZhZMmZIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+IkJhdGFyZXlhIGlzdGlmYWTJmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4iQXlhcmxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+IlTJmXl5YXLJmSByZWppbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4iRWtyYW7EsW4gYXZ0by1kw7Zuw7zFn8O8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4iU1VTRFVSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiJBVlRPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4iQmlsZGlyacWfbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiJCbHVldG9vdGggdGV6ZXJpbnEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2lucHV0X21ldGhvZF9zZXR0aW5nc19jb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjM1MDQyOTI0NzE1MTIzMTc4MjciPiJEYXhpbGV0bcmZIG1ldG9kbGFyxLFuxLEgYXlhcmxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+IkZpemlraSBrbGF2aWF0dXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gdMmZdGJpcWluyZkgVVNCIGNpaGF6xLFuYSBkYXhpbCBvbG1hxJ9hIGljYXrJmSB2ZXJpbHNpbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gdMmZdGJpcWluyZkgVVNCIGFrc2VzdWFyxLFuYSBxb8WfdWxtYcSfYSBpY2F6yZkgdmVyaXJzaW5pej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IlVTQiBjaWhheiBxb8WfdWx1IG9sYW4gemFtYW4gPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiBhw6fEsWxzxLFuIG3EsT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IlVTQiBha3Nlc3VhciBxb8WfdWx1IG9sYW4gemFtYW4gPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiBhw6fEsWxzxLFuIG3EsT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiJIZcOnIGJpciBxdXJhxZ9kxLFyxLFsbcSxxZ8gdMmZdGJpcSBidSBVU0IgYWtzZXN1YXIgaWzJmSBpxZ9syZltaXIuIEJ1IGFrc2VzdWFyIGhhcXHEsW5kYSBkYWhhIMmZdHJhZmzEsSBtyZlsdW1hdMSxIDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+IGFkcmVzaW5kyZluIMO2eXLJmW5pbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iVVNCIGFrc2VzdWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiJHw7ZzdMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IkJ1IFVTQiBjaWhheiDDvMOnw7xuIGRlZm9sdCBvbGFyYXEgaXN0aWZhZMmZIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4iQnUgVVNCIGFrc2VzdWFyIMO8w6fDvG4gZGVmb2x0IGlzdGlmYWTJmSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ190aXRsZSIgbXNnaWQ9IjQ1MTM5MTgzOTMzODcxNDE5NDkiPiJVU0Igc2F6bGFtYXlhIGljYXrJmSB2ZXJpbHNpbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4iS29tcMO8dGVyaW4gUlNBIGJhcm1hcSBpemk6IFxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iQnUga29tcMO8dGVyZMmZbiBoyZltacWfyZkgaWNhesmZIHZlcmlsc2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iRWtyYW7EsSBkb2xkdXJtYXEgw7zDp8O8biB5YXjEsW5sYcWfZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJFa3JhbsSxIGRvbGR1cm1hcSDDvMOnw7xuIHV6YXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iU2tyaW7Fn290IHlhZGRhIHNheGxhbsSxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlNrcmluxZ9vdCB5YWRkYSBzYXhsYW7EsXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlNrcmluxZ9vdCB5YWRkYSBzYXhsYW7EsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90aXRsZSIgbXNnaWQ9IjY0NjE4NjU5NjA5NjE0MTQ5NjEiPiJTa3JpbsWfb3Qgw6fJmWtpbGRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiJTa3JpbsWfb3R1bnV6YSBiYXhtYXEgw7zDp8O8biB0b3h1bnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiJTa3JpbsWfb3QgZ8O2dMO8csO8bMmZIGJpbGlubcmZZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiJTa3JpbsWfb3R1IHlhZGRhIHNheGxhbWFxIGFsxLFubWFkxLEsIHnJmXFpbiB5YWRkYcWfIGlzdGlmYWTJmSBvbHVudXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iVVNCIGZheWwgdHJhbnNmZXJpIHNlw6dpbWzJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX210cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI0MzMzNTA0NDEzNTYzMDIzNjI2Ij4iTWVkaWEgcGxleWVyIChNVFApIGtpbWkgbW9udGFqIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiJLYW1lcmEga2ltaSBiaXJsyZnFn2RpciAoUFRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4iTWFjIMO8w6fDvG4gQW5kcm9pZCBGaWxlIFRyYW5zZmVyIHTJmXRiaXFpbmkgcXVyYcWfZMSxcsSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+IkdlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iQW5hIHPJmWhpZsmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVueXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJTb24gdMmZdGJpcWzJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IkRheGlsZXRtyZkgbWV0b2R1IGTDvHltyZlzaW7JmSBrZcOnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IlV5xJ91bmx1cSB6b29tIGTDvHltyZlzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IkRhaGEgYsO2ecO8ayBla3JhbmRhIHV6YXFsYcWfZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4iQmx1ZXRvb3RoIHFvxZ91bHViLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9Ijc0MTY2NDg2Njk5NzY4NzAxNzUiPiJCbHVldG9vdGggyZlsYXHJmXNpIGvJmXNpbGRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+IkJhdGFyZXlhIHlveGR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiJCYXRhcmV5YSBiaXIgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdHdvX2JhcnMiIG1zZ2lkPSI4NTAwNjUwNDM4NzM1MDA5OTczIj4iQmF0YXJleWEgaWtpIHjJmXRkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4iQmF0YXJleWEgw7zDpyB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+IkJhdGFyZXlhIGRvbHVkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3Bob25lIiBtc2dpZD0iNDg5NDcwODkzNzA1MjYxMTI4MSI+IlRlbGVmb24geW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+IsWeyZliyZlryZkgYmlyIHjJmXRkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiLFnsmZYsmZa8mZIGlraSB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiLFnsmZYsmZa8mZIMO8w6cgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjQ3MTgzNDg2ODU4MDc1Nzg5OCI+IlRhbSDFn8mZYsmZa8mZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiJNyZlsdW1hdCB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4iRGF0YSBiaXIgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdHdvX2JhcnMiIG1zZ2lkPSI2MTY2MDE4NDkyMzYwNDMyMDkxIj4iRGF0YSBpa2kgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdGhyZWVfYmFycyIgbXNnaWQ9IjkxNjc2NzA0NTIzOTUwMzg1MjAiPiJEYXRhIMO8w6cgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4iRGF0YSBzaXFuYWzEsSB0YW1kxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vZmYiIG1zZ2lkPSIzMTc3MzgwMjk2Njk3OTMzNjI3Ij4iV2lmaSBzw7Zuw7xsw7xkw7xyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2lmaSIgbXNnaWQ9IjE0MjU0NzY1NTE4Mjc5MjQ0NzQiPiJXaWZpIGJhxJ9sYW50xLEga8mZc2lsZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4iV2lmaSBiaXIgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4iV2lmaSBpa2kgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiJXaWZpIMO8w6cgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2ODUzNTYxMzAzNTg2NDgwMzc2Ij4iV2lmaSBzaXFuYWzEsSB0YW1kxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iV2lNQVggeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWCBiaXIgeMmZdHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJXaU1BWCBpa2kgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4iV2lNQVggw7zDpyB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4iV2lNQVggc2lxbmFsxLEgdGFtZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiJTaXFuYWwgeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjYzOTUzMjYyNzYyMTM0MDI4ODMiPiJRb8WfdWx1IGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+IlPEsWbEsXIgeMmZdHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+IkJpciB4yZl0dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+IsSwa2kgeMmZdHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+IsOcw6cgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+IlNpcW5hbCB0YW1kxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiJBa3Rpdi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+IkRlYWt0aXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IlFvxZ91bHVkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMy41RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4iUm91bWlucSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2VkZ2UiIG1zZ2lkPSI0NDc3NDU3MDUxNjMxOTc5Mjc4Ij4iRWRnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3dpZmkiIG1zZ2lkPSIyMzI0NDk2NzU2NTkwNjQ1MjIxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiJTSU0geW94ZHVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IkJsdWV0b290aCB0ZXplcmluZy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiJVw6d1xZ8gcmVqaW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsIiBtc2dpZD0iNzQ1MTQ3NDE4NzExMzM3MTk2NSI+IkJhdGFyZXlhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBmYWl6ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4iU2lzdGVtIHBhcmFtZXRybMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IkJpbGRpcmnFn2zJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IkJpbGRpcmnFn2kgdMmZbWl6bMmZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTIGFrdGl2ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiJHUFMgyZlsZMmZIGVkaWxpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IlRlbGVUeXBld3JpdGVyIGFrdGl2bMmZxZ9kaXJpbGliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiJayZluZyB2aWJyYXNpeWFzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iWsmZbmd2dXJhbiBzyZlzc2l6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gw6fEsXhhcsSxbGTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbl9kaXNtaXNzZWQiIG1zZ2lkPSI4NTQyMTEzODcxODYzMDY5MjciPiJCaWxkaXJpxZ8gdXphcWxhxZ9kxLFyxLFsZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4iQmlsZGlyacWfIGvDtmxnyZlzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4iVGV6IGF5YXJsYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+IkF4xLFyxLFuY8SxIHTJmXRiaXFsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiLEsHN0aWZhZMmZw6dpIDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiJNb2JpbCA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkJhdGFyZXlhIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iVMmZeXlhcsmZIFJlamltaSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+IMO8w6fDvG4gcXVydWx1Yi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRyBkYXRhIHFleXJpLWFrdGl2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEcgZGF0YSBkZWFrdGl2IGVkaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX21vYmlsZV90aXRsZSIgbXNnaWQ9IjEwNDYwNDcyNDg4NDQ4MjEyMDIiPiJNb2JpbCBkYXRhIHFleXJpLWFrdGl2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIyMDg2ODE1MzA0ODU4OTY0OTU0Ij4iRGF0YSBxZXlyaS1ha3RpdmRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+IkfDtnN0yZlyaWxtacWfIGRhdGEgaXN0aWZhZMmZIGxpbWl0aW7JmSDDp2F0ZMSxbsSxei5cblxuxo9nyZlyIGRhdGFuxLEgeWVuaWTJmW4gYWt0aXZsyZnFn2RpcnPJmW5peiwgb3BlcmF0b3IgdMmZcsmZZmluZMmZbiDJmWxhdsmZIHRhcmlmbMmZciB0yZl0YmlxIG9sdW5hIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4iRGF0YW7EsSB5ZW5pZMmZbiBha3RpdiBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjE5NDAyMzE1MjEyNzQxNDc3NzEiPiLEsG50ZXJuZXQgYmHEn2xhbnTEsXPEsSB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBxb8WfdWx1YiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iR1BTIEF4dGFyxLHFn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IlllciBHUFMgdMmZcsmZZmluZMmZbiBtw7zJmXl5yZluIGVkaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+Ik3JmWthbiBzb3LEn3VsYXLEsSBhcnhpdmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJCw7x0w7xuIGJpbGRpcmnFn2zJmXJpIHNpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iVMmZdGJpcSBpbmZvc3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IkVrcmFuIGF2dG9tYXRpayBkw7ZuZMmZcmlsyZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iRWtyYW4gbGFuZMWfYWZ0IG9yaWVudGFzaXlhc8SxbmRhIGtpbGlkbMmZbmliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJFa3JhbiBwb3J0cmV0IG9yaWVudGFzaXlhc8SxbmRhIGtpbGlkbMmZbmliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJYyZl5YWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iVcOndcWfIHJlamltaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiJEb2x1ciwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiJEb2x1YiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBDaWhheikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmX2xhYmVsIiBtc2dpZD0iODE1OTY1MjE0NjE0OTIxOTkzNyI+IkJsdWV0b290aCBiYcSfbMSxZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iUGFybGFxbMSxcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iQXZ0b2bEsXJsYW5tYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJGxLFybGF0bWEga2lsaWRsaWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJEYXhpbGV0bcmZIG1ldG9kdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IlllciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJZZXIgRGVha3RpdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiJNZWRpYSBjaWhhesSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJZYWxuxLF6IGbDtnZxyZlsYWTJmSB6yZluZ2zJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiJOaXphbWxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4iVmF4dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4iTcmZbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iQmHEn2xhbnTEsSB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4ixZ7JmWLJmWvJmSB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBzw7Zuw7xsw7xkw7xyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpIEVrcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iU2ltc2l6IEVrcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iUGFybGFxbMSxcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVlRPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjU4NDg0MDIxMjc0NTUwMjE3MTQiPiLFnsmZYsmZa8mZIG1vbml0b3IgZWRpbMmZIGJpbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfYnV0dG9uIiBtc2dpZD0iMTc1OTM4NzE4MTc2NjYwMzM2MSI+IkhhesSxcmTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIxMjczNzk2OTY3MDkyMDI3MjkxIj4ixZ7JmWLJmWvJmSBNb25pdG9yaW5xaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X2luZm9fbWVzc2FnZSIgbXNnaWQ9IjU0MzAzMjA1Mzk1NTUzNTg0NTIiPiJCdSBjaWhheiA8eGxpZmY6ZyBpZD0iTUFOQUdJTkdfRE9NQUlOIj4lczwveGxpZmY6Zz4gdMmZcsmZZmluZMmZbiBpZGFyyZkgZWRpbGlyIC4gXG4gXG4gU2l6aW4gYWRtaW5pc3RyYXRvciDFn8mZYsmZa8mZIGbJmWFsaXl5yZl0aW5pemluLCBoyZltw6dpbmluIGUtcG/Dp3QsIHTJmXRiaXFsyZlyIHbJmSB0yZlobMO8a8mZc2l6IHZlYiBzYXl0bGFyxLFuxLF6xLFuIG1vbml0b3JpbnFpbmkgZXRtyZl5yZkgcWFkaXJkaXIuIFxuIFxuIMaPdHJhZmzEsSBtyZlsdW1hdCDDvMOnw7xuIGFkbWluaXN0cmF0b3IgaWzJmSDJmWxhccmZIHNheGxhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMDMzMDkxNjU2MTI5OTYzNjY5Ij4iw5zDp8O8bmPDvCB0yZlyyZlmIFxuIMWfyZliyZlryZkgZsmZYWxpeXnJmXRpbml6aW4sIGjJmW3Dp2luaW4gZS1wb8OndCwgdMmZdGJpcWzJmXIgdsmZIHTJmWhsw7xryZlzaXogdmViIHNheXRsYXLEsW7EsXrEsW4gbW9uaXRvcmlucWluaSBldG3JmXnJmSBxYWRpcmRpci4gLiBcbiBcbkNpaGFuesSxbsSxemEgecO8a2zJmW5tacWfIGV0aWJhcmzEsSBldGltYWQgYnVudSBtw7xta8O8biBlZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5NDY5NTY5NzczNzcxNjY3MDkiPiJFdGliYXJsxLEgZXRpbWFkbGFyxLEgeW94bGF5xLFuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjQ4YWEwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hei9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIwOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+IlNpc3RlbWluIMSwc3RpZmFkyZkgxLBudGVyZmV5c2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4iVMmZbWl6bMmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4iU2l5YWjEsWRhbiBzaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4iVMmZdGJpcSBpbmZvc3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IlllbmkgdMmZdGJpcSB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IlNvbiB0yZl0YmlxbMmZcmkga8mZbmFybGHFn2TEsXIiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9yZWNlbnRfYXBwcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiIxIHNvbiB0yZl0YmlxIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQgc29uIHTJmXRiaXEiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4iQmlsZGlyacWfIHlveGR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiJEYXZhbSBlZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+IkJpbGRpcmnFn2zJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiJBZGFwdGVyaSBxb8WfdW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiJCYXRhcmV5YSBhemFsxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkJSU8L3hsaWZmOmc+IHFhbMSxYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJVU0IgaWzJmSBlbGVrdHJpayBkb2xkdXJtYSBkyZlzdMmZa2zJmW5taXIuXG5ZYWxuxLF6IGFkYXB0ZXIgaXN0aWZhZMmZIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+IkJhdGFyZXlhIGlzdGlmYWTJmXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4iQXlhcmxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+IlTJmXl5YXLJmSByZWppbWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4iRWtyYW7EsW4gYXZ0by1kw7Zuw7zFn8O8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4iU1VTRFVSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiJBVlRPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4iQmlsZGlyacWfbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiJCbHVldG9vdGggdGV6ZXJpbnEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2lucHV0X21ldGhvZF9zZXR0aW5nc19jb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjM1MDQyOTI0NzE1MTIzMTc4MjciPiJEYXhpbGV0bcmZIG1ldG9kbGFyxLFuxLEgYXlhcmxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+IkZpemlraSBrbGF2aWF0dXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gdMmZdGJpcWluyZkgVVNCIGNpaGF6xLFuYSBkYXhpbCBvbG1hxJ9hIGljYXrJmSB2ZXJpbHNpbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gdMmZdGJpcWluyZkgVVNCIGFrc2VzdWFyxLFuYSBxb8WfdWxtYcSfYSBpY2F6yZkgdmVyaXJzaW5pej8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IlVTQiBjaWhheiBxb8WfdWx1IG9sYW4gemFtYW4gPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiBhw6fEsWxzxLFuIG3EsT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IlVTQiBha3Nlc3VhciBxb8WfdWx1IG9sYW4gemFtYW4gPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiBhw6fEsWxzxLFuIG3EsT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiJIZcOnIGJpciBxdXJhxZ9kxLFyxLFsbcSxxZ8gdMmZdGJpcSBidSBVU0IgYWtzZXN1YXIgaWzJmSBpxZ9syZltaXIuIEJ1IGFrc2VzdWFyIGhhcXHEsW5kYSBkYWhhIMmZdHJhZmzEsSBtyZlsdW1hdMSxIDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+IGFkcmVzaW5kyZluIMO2eXLJmW5pbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iVVNCIGFrc2VzdWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiJHw7ZzdMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IkJ1IFVTQiBjaWhheiDDvMOnw7xuIGRlZm9sdCBvbGFyYXEgaXN0aWZhZMmZIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4iQnUgVVNCIGFrc2VzdWFyIMO8w6fDvG4gZGVmb2x0IGlzdGlmYWTJmSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ190aXRsZSIgbXNnaWQ9IjQ1MTM5MTgzOTMzODcxNDE5NDkiPiJVU0Igc2F6bGFtYXlhIGljYXrJmSB2ZXJpbHNpbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4iS29tcMO8dGVyaW4gUlNBIGJhcm1hcSBpemk6IFxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iQnUga29tcMO8dGVyZMmZbiBoyZltacWfyZkgaWNhesmZIHZlcmlsc2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iRWtyYW7EsSBkb2xkdXJtYXEgw7zDp8O8biB5YXjEsW5sYcWfZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJFa3JhbsSxIGRvbGR1cm1hcSDDvMOnw7xuIHV6YXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iU2tyaW7Fn290IHlhZGRhIHNheGxhbsSxbMSxci4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlNrcmluxZ9vdCB5YWRkYSBzYXhsYW7EsXIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlNrcmluxZ9vdCB5YWRkYSBzYXhsYW7EsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90aXRsZSIgbXNnaWQ9IjY0NjE4NjU5NjA5NjE0MTQ5NjEiPiJTa3JpbsWfb3Qgw6fJmWtpbGRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiJTa3JpbsWfb3R1bnV6YSBiYXhtYXEgw7zDp8O8biB0b3h1bnVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiJTa3JpbsWfb3QgZ8O2dMO8csO8bMmZIGJpbGlubcmZZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiJTa3JpbsWfb3R1IHlhZGRhIHNheGxhbWFxIGFsxLFubWFkxLEsIHnJmXFpbiB5YWRkYcWfIGlzdGlmYWTJmSBvbHVudXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iVVNCIGZheWwgdHJhbnNmZXJpIHNlw6dpbWzJmXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX210cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI0MzMzNTA0NDEzNTYzMDIzNjI2Ij4iTWVkaWEgcGxleWVyIChNVFApIGtpbWkgbW9udGFqIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiJLYW1lcmEga2ltaSBiaXJsyZnFn2RpciAoUFRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4iTWFjIMO8w6fDvG4gQW5kcm9pZCBGaWxlIFRyYW5zZmVyIHTJmXRiaXFpbmkgcXVyYcWfZMSxcsSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+IkdlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iQW5hIHPJmWhpZsmZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVueXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJTb24gdMmZdGJpcWzJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IkRheGlsZXRtyZkgbWV0b2R1IGTDvHltyZlzaW7JmSBrZcOnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IlV5xJ91bmx1cSB6b29tIGTDvHltyZlzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IkRhaGEgYsO2ecO8ayBla3JhbmRhIHV6YXFsYcWfZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4iQmx1ZXRvb3RoIHFvxZ91bHViLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9Ijc0MTY2NDg2Njk5NzY4NzAxNzUiPiJCbHVldG9vdGggyZlsYXHJmXNpIGvJmXNpbGRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+IkJhdGFyZXlhIHlveGR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiJCYXRhcmV5YSBiaXIgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdHdvX2JhcnMiIG1zZ2lkPSI4NTAwNjUwNDM4NzM1MDA5OTczIj4iQmF0YXJleWEgaWtpIHjJmXRkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4iQmF0YXJleWEgw7zDpyB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+IkJhdGFyZXlhIGRvbHVkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3Bob25lIiBtc2dpZD0iNDg5NDcwODkzNzA1MjYxMTI4MSI+IlRlbGVmb24geW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+IsWeyZliyZlryZkgYmlyIHjJmXRkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiLFnsmZYsmZa8mZIGlraSB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiLFnsmZYsmZa8mZIMO8w6cgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjQ3MTgzNDg2ODU4MDc1Nzg5OCI+IlRhbSDFn8mZYsmZa8mZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiJNyZlsdW1hdCB5b3hkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4iRGF0YSBiaXIgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdHdvX2JhcnMiIG1zZ2lkPSI2MTY2MDE4NDkyMzYwNDMyMDkxIj4iRGF0YSBpa2kgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdGhyZWVfYmFycyIgbXNnaWQ9IjkxNjc2NzA0NTIzOTUwMzg1MjAiPiJEYXRhIMO8w6cgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4iRGF0YSBzaXFuYWzEsSB0YW1kxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vZmYiIG1zZ2lkPSIzMTc3MzgwMjk2Njk3OTMzNjI3Ij4iV2lmaSBzw7Zuw7xsw7xkw7xyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2lmaSIgbXNnaWQ9IjE0MjU0NzY1NTE4Mjc5MjQ0NzQiPiJXaWZpIGJhxJ9sYW50xLEga8mZc2lsZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4iV2lmaSBiaXIgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4iV2lmaSBpa2kgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiJXaWZpIMO8w6cgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2ODUzNTYxMzAzNTg2NDgwMzc2Ij4iV2lmaSBzaXFuYWzEsSB0YW1kxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iV2lNQVggeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWCBiaXIgeMmZdHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJXaU1BWCBpa2kgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4iV2lNQVggw7zDpyB4yZl0ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4iV2lNQVggc2lxbmFsxLEgdGFtZMSxci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiJTaXFuYWwgeW94ZHVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjYzOTUzMjYyNzYyMTM0MDI4ODMiPiJRb8WfdWx1IGRleWlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+IlPEsWbEsXIgeMmZdHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+IkJpciB4yZl0dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+IsSwa2kgeMmZdHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+IsOcw6cgeMmZdGRpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+IlNpcW5hbCB0YW1kxLFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiJBa3Rpdi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+IkRlYWt0aXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IlFvxZ91bHVkdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMy41RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4iUm91bWlucSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2VkZ2UiIG1zZ2lkPSI0NDc3NDU3MDUxNjMxOTc5Mjc4Ij4iRWRnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3dpZmkiIG1zZ2lkPSIyMzI0NDk2NzU2NTkwNjQ1MjIxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiJTSU0geW94ZHVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IkJsdWV0b290aCB0ZXplcmluZy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiJVw6d1xZ8gcmVqaW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsIiBtc2dpZD0iNzQ1MTQ3NDE4NzExMzM3MTk2NSI+IkJhdGFyZXlhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBmYWl6ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4iU2lzdGVtIHBhcmFtZXRybMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IkJpbGRpcmnFn2zJmXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IkJpbGRpcmnFn2kgdMmZbWl6bMmZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTIGFrdGl2ZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiJHUFMgyZlsZMmZIGVkaWxpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IlRlbGVUeXBld3JpdGVyIGFrdGl2bMmZxZ9kaXJpbGliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiJayZluZyB2aWJyYXNpeWFzxLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iWsmZbmd2dXJhbiBzyZlzc2l6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gw6fEsXhhcsSxbGTEsS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbl9kaXNtaXNzZWQiIG1zZ2lkPSI4NTQyMTEzODcxODYzMDY5MjciPiJCaWxkaXJpxZ8gdXphcWxhxZ9kxLFyxLFsZMSxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4iQmlsZGlyacWfIGvDtmxnyZlzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4iVGV6IGF5YXJsYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+IkF4xLFyxLFuY8SxIHTJmXRiaXFsyZlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiLEsHN0aWZhZMmZw6dpIDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiJNb2JpbCA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkJhdGFyZXlhIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iVMmZeXlhcsmZIFJlamltaSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+IMO8w6fDvG4gcXVydWx1Yi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRyBkYXRhIHFleXJpLWFrdGl2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEcgZGF0YSBkZWFrdGl2IGVkaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX21vYmlsZV90aXRsZSIgbXNnaWQ9IjEwNDYwNDcyNDg4NDQ4MjEyMDIiPiJNb2JpbCBkYXRhIHFleXJpLWFrdGl2ZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIyMDg2ODE1MzA0ODU4OTY0OTU0Ij4iRGF0YSBxZXlyaS1ha3RpdmRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+IkfDtnN0yZlyaWxtacWfIGRhdGEgaXN0aWZhZMmZIGxpbWl0aW7JmSDDp2F0ZMSxbsSxei5cblxuxo9nyZlyIGRhdGFuxLEgeWVuaWTJmW4gYWt0aXZsyZnFn2RpcnPJmW5peiwgb3BlcmF0b3IgdMmZcsmZZmluZMmZbiDJmWxhdsmZIHRhcmlmbMmZciB0yZl0YmlxIG9sdW5hIGJpbMmZci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4iRGF0YW7EsSB5ZW5pZMmZbiBha3RpdiBldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjE5NDAyMzE1MjEyNzQxNDc3NzEiPiLEsG50ZXJuZXQgYmHEn2xhbnTEsXPEsSB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBxb8WfdWx1YiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iR1BTIEF4dGFyxLHFn8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IlllciBHUFMgdMmZcsmZZmluZMmZbiBtw7zJmXl5yZluIGVkaWxkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+Ik3JmWthbiBzb3LEn3VsYXLEsSBhcnhpdmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJCw7x0w7xuIGJpbGRpcmnFn2zJmXJpIHNpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iVMmZdGJpcSBpbmZvc3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IkVrcmFuIGF2dG9tYXRpayBkw7ZuZMmZcmlsyZljyZlrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iRWtyYW4gbGFuZMWfYWZ0IG9yaWVudGFzaXlhc8SxbmRhIGtpbGlkbMmZbmliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJFa3JhbiBwb3J0cmV0IG9yaWVudGFzaXlhc8SxbmRhIGtpbGlkbMmZbmliLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJYyZl5YWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iVcOndcWfIHJlamltaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiJEb2x1ciwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiJEb2x1YiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBDaWhheikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmX2xhYmVsIiBtc2dpZD0iODE1OTY1MjE0NjE0OTIxOTkzNyI+IkJsdWV0b290aCBiYcSfbMSxZMSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iUGFybGFxbMSxcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iQXZ0b2bEsXJsYW5tYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJGxLFybGF0bWEga2lsaWRsaWRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJEYXhpbGV0bcmZIG1ldG9kdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IlllciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJZZXIgRGVha3RpdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiJNZWRpYSBjaWhhesSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJZYWxuxLF6IGbDtnZxyZlsYWTJmSB6yZluZ2zJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiJOaXphbWxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4iVmF4dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4iTcmZbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iQmHEn2xhbnTEsSB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4ixZ7JmWLJmWvJmSB5b3hkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBzw7Zuw7xsw7xkw7xyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpIEVrcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iU2ltc2l6IEVrcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iUGFybGFxbMSxcSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVlRPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IkJpbGRpcmnFn2zJmXIgYnVyYWRhIGfDtnLDvG7DvHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJBxZ9hxJ/EsSBzw7xyw7zFn2TDvHJtyZlrbMmZIGlzdMmZbmlsyZluIHZheHQgb25sYXLEsSDJmWxkyZkgZWRpbi5cblNpc3RlbWkgbsmZemFyyZl0aSDDvMOnw7xuIHllbsmZIGTJmSBhxZ9hxJ/EsSBzw7xyw7zFn2TDvHLDvG4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjU4NDg0MDIxMjc0NTUwMjE3MTQiPiLFnsmZYsmZa8mZIG1vbml0b3IgZWRpbMmZIGJpbMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfYnV0dG9uIiBtc2dpZD0iMTc1OTM4NzE4MTc2NjYwMzM2MSI+IkhhesSxcmTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIxMjczNzk2OTY3MDkyMDI3MjkxIj4ixZ7JmWLJmWvJmSBNb25pdG9yaW5xaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X2luZm9fbWVzc2FnZSIgbXNnaWQ9IjU0MzAzMjA1Mzk1NTUzNTg0NTIiPiJCdSBjaWhheiA8eGxpZmY6ZyBpZD0iTUFOQUdJTkdfRE9NQUlOIj4lczwveGxpZmY6Zz4gdMmZcsmZZmluZMmZbiBpZGFyyZkgZWRpbGlyIC4gXG4gXG4gU2l6aW4gYWRtaW5pc3RyYXRvciDFn8mZYsmZa8mZIGbJmWFsaXl5yZl0aW5pemluLCBoyZltw6dpbmluIGUtcG/Dp3QsIHTJmXRiaXFsyZlyIHbJmSB0yZlobMO8a8mZc2l6IHZlYiBzYXl0bGFyxLFuxLF6xLFuIG1vbml0b3JpbnFpbmkgZXRtyZl5yZkgcWFkaXJkaXIuIFxuIFxuIMaPdHJhZmzEsSBtyZlsdW1hdCDDvMOnw7xuIGFkbWluaXN0cmF0b3IgaWzJmSDJmWxhccmZIHNheGxhecSxbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMDMzMDkxNjU2MTI5OTYzNjY5Ij4iw5zDp8O8bmPDvCB0yZlyyZlmIFxuIMWfyZliyZlryZkgZsmZYWxpeXnJmXRpbml6aW4sIGjJmW3Dp2luaW4gZS1wb8OndCwgdMmZdGJpcWzJmXIgdsmZIHTJmWhsw7xryZlzaXogdmViIHNheXRsYXLEsW7EsXrEsW4gbW9uaXRvcmlucWluaSBldG3JmXnJmSBxYWRpcmRpci4gLiBcbiBcbkNpaGFuesSxbsSxemEgecO8a2zJmW5tacWfIGV0aWJhcmzEsSBldGltYWQgYnVudSBtw7xta8O8biBlZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5NDY5NTY5NzczNzcxNjY3MDkiPiJFdGliYXJsxLEgZXRpbWFkbGFyxLEgeW94bGF5xLFuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWJlL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYwOGI3OS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWJlL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotLyoqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCi0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAotICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxNjQ5MzczNDQ4NTAwMDQ0NjYiPiLQhtC90YLRjdGA0YTQtdC50YEg0LrQsNGA0YvRgdGC0LDQu9GM0L3RltC60LAg0YHRltGB0YLRjdC80YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4i0JDRh9GL0YHRhtGW0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+ItCS0YvQtNCw0LvRltGG0Ywg0YHQsCDRgdC/0ZbRgdGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+ItCX0LLQtdGB0YLQutGWINCw0LEg0L/RgNGL0LrQu9Cw0LTQsNC90L3RliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4i0JDQv9C+0YjQvdGW0YUg0L/RgNGL0LrQu9Cw0LTQsNC90L3Rj9GeINC90Y/QvNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiLQl9Cw0LrRgNGL0YbRjCDQvdGP0LTQsNGe0L3RltGPINC/0YDRi9C60LvQsNC00LDQvdC9aSI8L3N0cmluZz4KLSAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEg0L3Rj9C00LDRntC90Y/QtSDQv9GA0YvQutC70LDQtNCw0L3QvdC1IjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4i0J3Rj9C00LDRntC90ZbRjyDQv9GA0YvQutC70LDQtNCw0L3QvWk6ICVkIjwvaXRlbT4KLSAgPC9wbHVyYWxzPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+ItCR0LXQtyDQsNC/0LDQstGP0YjRh9GN0L3QvdGP0Z4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+ItCf0LDRgdGC0LDRj9C90L3Ri9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+ItCQ0L/QsNCy0Y/RiNGH0Y3QvdC90ZYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiLQn9Cw0LTQu9GD0YfRi9GG0LUg0LfQsNGA0LDQtNC90YPRjiDQv9GA0YvQu9Cw0LTRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiLQl9Cw0YDQsNC0INCx0LDRgtCw0YDRjdGWINGB0YLQsNC90L7QstGW0YbRhtCwINC90ZbQt9C60ZbQvC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiLQodC/0YDQvtCxINC30LDRgdGC0LDQu9C+0YHRjzogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQlJTwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4iVVNCLdC30LDRgNCw0LTQutCwINC90LUg0L/QsNC00YLRgNGL0LzQu9GW0LLQsNC10YbRhtCwLlxu0JrQsNGA0YvRgdGC0LDQudGG0LXRgdGPINGC0L7Qu9GM0LrRliDQt9Cw0YDQsNC00LrQsNC5INC00LvRjyDQv9GA0YvQu9Cw0LTRiy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4i0JLRi9C60LDRgNGL0YHRgtCw0L3QvdC1INCx0LDRgtCw0YDRjdGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4i0J3QsNC70LDQtNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiJXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0ODc5ODc5Njk4NTAwOTU1MzAwIj4i0KDRjdC20YvQvCDQv9Cw0LvRkdGC0YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4i0JDRntGC0LDQvNCw0YLRi9GH0L3RiyDQv9Cw0LLQsNGA0L7RgiDRjdC60YDQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiLQkdCv0JfQk9Cj0KfQndCQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiLQkNCO0KLQkCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+ItCf0LDQstC10LTQsNC80LvQtdC90L3RliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiLQn9GA0YvQstGP0LfQsNC90YvRjyDQv9GA0LDQtyBCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2lucHV0X21ldGhvZF9zZXR0aW5nc19jb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjM1MDQyOTI0NzE1MTIzMTc4MjciPiLQndCw0LvQsNC00LAg0LzQtdGC0LDQtNCw0Z4g0YPQstC+0LTRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+ItCk0ZbQt9GW0YfQvdCw0Y8g0LrQu9Cw0LLRltGP0YLRg9GA0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4i0JTQsNC30LLQvtC70ZbRhtGMINC/0YDQsNGL0LrQu9Cw0LTQsNC90L3RjiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INCw0YLRgNGL0LzQu2nQstCw0YbRjCDQtNC+0YHRgtGD0L8g0LTQsCDQv9GA0YvQu9Cw0LTRiyBVU0I/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiLQlNCw0LfQstC+0LvRltGG0Ywg0L/RgNGL0LrQu9Cw0LTQsNC90L3RjiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INC00L7RgdGC0YPQvyDQtNCwINC/0YDRi9C70LDQtNGLIFVTQj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+ItCQ0LTQutGA0YvRhtGMIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4sINC60LDQu9GWINCz0Y3RgtCw0Y8gVVNCLdC/0YDRi9C70LDQtNCwINC/0LDQtNC70YPRh9Cw0L3QsNGPPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4i0JDQtNC60YDRi9GG0YwgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiwg0LrQsNC70ZYg0LPRjdGC0LDRjyBVU0It0L/RgNGL0LvQsNC00LAg0L/QsNC00LvRg9GH0LDQvdCw0Y8/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i0J3Rj9C80LAg0Z7RgdGC0LDQu9GP0LIuINC/0YDRi9C60LsuINC00LvRjyDQv9GA0LDRhtGLINC3INCz0Y3RgtCw0Lkg0L/RgNGL0LsuIFVTQi4g0JHQvtC70YzRiCDQv9Cw0LTRgNCw0LEuINC/0YDQsCDQs9GN0YLRg9GOINC/0YDRi9C7LjogPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+IlVTQi3Qv9GA0YvQu9Cw0LTQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4i0J/RgNCw0LPQu9GP0LQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiLQktGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINC90LDQu9Cw0LTRiyDQv9CwINC30LzQsNGe0YfQsNC90L3RliDQtNC70Y8g0LTQsNC00LfQtdC90LDQuSBVU0It0L/RgNGL0LvQsNC00YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiLQktGL0LrQsNGA0YvRgdGC0L7RntCy0LDRhtGMINC90LDQu9Cw0LTRiyDQv9CwINC30LzQsNGe0YfQsNC90L3RliDQtNC70Y8g0LTQsNC00LfQtdC90LDQuSBVU0It0L/RgNGL0LvQsNC00YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+ItCU0LDQt9Cy0L7Qu9GW0YbRjCDQsNC00LvQsNC00LrRgyBVU0I/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+ItCQ0LTQsWnRgtCw0Log0LrQu9GO0YfQsCBSU0Eg0L3QsCDQs9GN0YLRi9C8INC60LDQvNC/XCfRjtGC0LDRgNGLOlxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i0JfQsNGe0YHRkdC00Ysg0LTQsNC30LLQsNC70Y/RhtGMINC3INCz0Y3RgtCw0LPQsCDQutCw0LzQv1wn0Y7RgtCw0YDQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+ItCf0LDQstGP0LsuINC90LAg0Z7QstC10YHRjCDRjdC60YDQsNC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+ItCg0LDRgdGG0Y/Qs9C9LiDQvdCwINGe0LLQtdGB0Ywg0Y3QutGA0LDQvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+ItCc0LDRiNGC0LDQsdCw0LLQsNC90L3QtSDQtNC70Y8g0YHRg9C80Y/RiNGH0LDQu9GM0L3QsNGB0YZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+ItCa0LDQu9GWINC/0YDRi9C60LvQsNC00LDQvdC90LUg0YDQsNGB0L/RgNCw0YbQsNCy0LDQvdCw0LUg0LTQu9GPINC90LXQstGP0LvRltC60ZbRhSDRjdC60YDQsNC90LDRniwg0LrQsNC70Y8g0LPQsNC00LfRltC90L3RltC60LAg0LdcJ9GP0LLRltGG0YbQsCDQutGW0YDQsNCy0LDQvdC90LUg0LzQsNGI0YLQsNCx0LDQstCw0L3QvdC10LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+ItCX0LDRhdCw0LLQsNC90L3QtSDRgdC60YDRi9C90YjQvtGC0LAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLQl9Cw0YXQsNCy0LDQvdC90LUg0YHQutGA0YvQvdGI0L7RgtCwLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLQodC60YDRi9C90YjQvtGCINC30LDRhdCw0LLQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90aXRsZSIgbXNnaWQ9IjY0NjE4NjU5NjA5NjE0MTQ5NjEiPiLQodC60YDRi9C90YjQvtGCINC30YDQvtCx0LvQtdC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RleHQiIG1zZ2lkPSIxMTUyODM5NjQ3Njc3NTU4ODE1Ij4i0J3QsNGG0ZbRgdC90ZbRhtC1LCDQutCw0LEg0L/RgNCw0LPQu9C10LTQt9C10YbRjCDRgdC60YDRi9C90YjQvtGCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiLQndC1INCw0YLRgNGL0LzQsNC70LDRgdGPINC30YDQsNCxadGG0Ywg0YHQutGA0YvQvdGI0L7Rgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+ItCd0LXQvNCw0LPRh9GL0LzQsCDQt9Cw0YXQsNCy0LDRhtGMINGB0LrRgNGL0L3RiNC+0YIuINCc0LDQs9GH0YvQvNCwLCDQvdCw0LfQsNC/0LDRiNCy0LDQu9GM0L1p0Log0LLRi9C60LDRgNGL0YHRgtC+0Z7QstCw0LXRhtGG0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4i0J/QsNGA0LDQvC4g0L/QtdGA0LDQtNCw0YfRiyDRhNCw0LnQu9Cw0Z4g0L/QsCBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLQn9Cw0LTQu9GD0YfRi9GG0Ywg0Y/QuiDQvNC10LTRi9GP0L/RgNCw0LnQs9GA0LDQstCw0LvRjNC90ZbQuiAo0KHQodCfKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+ItCf0LDQtNC70YPRh9GL0YbRjCDRj9C6INC60LDQvNC10YDRgyAoUFRQKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4i0KPRgdGC0LDQu9GP0LLQsNGG0Ywg0L/RgNGL0LrQu9Cw0LQuIEFuZHJvaWQgRmlsZSBUcmFuc2ZlciDQtNC70Y8gTWFjIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4i0J3QsNC30LDQtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLQndCwINCT0LDQu9C+0Z7QvdGD0Y4g0YHRgtCw0YDQvtC90LrRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+ItCc0LXQvdGOIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i0J3Rj9C00LDRntC90ZbRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLQmtC90L7Qv9C60LAg0L/QtdGA0LDQutC70Y7Rh9GN0L3QvdGPINC80LXRgtCw0LTRgyDRntCy0L7QtNGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLQmtC90L7Qv9C60LAg0YHRg9C80Y/RiNGH0LDQu9GM0L3QsNGB0YbRliDQvNCw0YjRgtCw0LHQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+ItCc0LDRiNGC0LDQsdCw0LLQsNC90L3QtSDQvNCw0LvRi9GFINGN0LvQtdC80LXQvdGC0LDRniDQtNC70Y8g0LHQvtC70YzRiNCw0LPQsCDRjdC60YDQsNC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfY29ubmVjdGVkIiBtc2dpZD0iMjcwNzAyNzYzMzI0Mjk4MzM3MCI+IkJsdWV0b290aC3RgdGD0LLRj9C30YwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+IkJsdWV0b290aCDQsNC00LrQu9GO0YfQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19iYXR0ZXJ5IiBtc2dpZD0iMzU4MzQzMDIyMzUyODIwOTQ2Ij4i0JHQtdC3INCw0LrRg9C80YPQu9GP0YLQsNGA0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X29uZV9iYXIiIG1zZ2lkPSI3Nzc0ODg3NzIxODkxMDU3NTIzIj4i0JDQtNC90LAg0L/Qu9Cw0L3QutCwINCw0LrRg9C80YPQu9GP0YLQsNGA0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+IjIg0L/Qu9Cw0L3QutGWINCw0LrRg9C80YPQu9GP0YLQsNGA0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4i0KLRgNGLINC/0LvQsNC90LrRliDQsNC60YPQvNGD0LvRj9GC0LDRgNCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+ItCQ0LrRg9C80YPQu9GP0YLQsNGAINC/0L7RntC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19waG9uZSIgbXNnaWQ9IjQ4OTQ3MDg5MzcwNTI2MTEyODEiPiLQndGP0LzQsCDRgtGN0LvQtdGE0L7QvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+ItCQ0LTQvdCwINC/0LvQsNC90LrQsCDQvdCwINGC0Y3Qu9C10YTQvtC90LUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiIyINC/0LvQsNC90LrRliDRgtGN0LvQtdGE0L7QvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiIzINC/0LvQsNC90LrRliDRgtGN0LvQtdGE0L7QvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4i0J/QvtGe0L3RiyDRgdGW0LPQvdCw0Lsg0YLRjdC70LXRhNC+0L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2RhdGEiIG1zZ2lkPSI0NzkxOTY2Mjk1MDk2ODY3NTU1Ij4i0J3Rj9C80LAg0LTQsNC00LfQtdC90YvRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiLQkNC00L3QsCDQv9C70LDQvdC60LAg0LTQsNC00LfQtdC90YvRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdHdvX2JhcnMiIG1zZ2lkPSI2MTY2MDE4NDkyMzYwNDMyMDkxIj4iMiDQv9C70LDQvdC60ZYg0LTQsNC00LfQtdC90YvRhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdGhyZWVfYmFycyIgbXNnaWQ9IjkxNjc2NzA0NTIzOTUwMzg1MjAiPiIzINC/0LvQsNC90LrRliDQtNCw0LTQt9C10L3Ri9GFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiLQn9C+0Z7QvdGLINGB0ZbQs9C90LDQuyDQv9C10YDQsNC00LDRh9GLINC00LDQtNC30LXQvdGL0YUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiJXaS1GaSDQstGL0LrQu9GO0YfQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IldpLUZpINCw0LTQutC70Y7Rh9Cw0L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiLQkNC00Ldp0L0g0YHQu9GD0L/QvtC6IFdpLUZpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiLQlNCy0LAg0YHQu9GD0L/QumkgV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4i0KLRgNGLINGB0LvRg9C/0LppIFdpLUZpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiLQn9C+0Z7QvdGLINGB0ZbQs9C90LDQuyBXaS1GaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+ItCd0Y/QvNCwINGBadCz0L3QsNC70YMgV2lNQVguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+ItCQ0LTQt2nQvSDRgdC70YPQv9C+0Log0YFp0LPQvdCw0LvRgyBXaU1BWC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+ItCU0LLQsCDRgdC70YPQv9C6aSDRgWnQs9C90LDQu9GDIFdpTUFYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiLQotGA0Ysg0YHQu9GD0L/Qumkg0YFp0LPQvdCw0LvRgyBXaU1BWC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+ItCc0L7RhtC90Ysg0YFp0LPQvdCw0LsgV2lNQVguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaWduYWwiIG1zZ2lkPSI3MDY0NjQ1MzIwNzgyNTg1MTY3Ij4i0J3Rj9C80LAg0YHRltCz0L3QsNC70YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+ItCd0Y/QvNCwINC/0LDQtNC60LvRjtGH0Y3QvdC90Y8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV96ZXJvX2JhcnMiIG1zZ2lkPSIzODA2MDYwMjI0NDY3MDI3ODg3Ij4i0J3Rj9C80LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+ItCQ0LTQt2nQvSDRgdC70YPQv9C+0LouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90d29fYmFycyIgbXNnaWQ9IjY0MzczNjM2NDgzODUyMDY2NzkiPiLQlNCy0LAg0YHQu9GD0L/QumkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+ItCi0YDRiyDRgdC70YPQv9C6aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+ItCh0ZbQs9C90LDQuyDQv9C+0Z7QvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiLQo9C60LvRjtGH0LDQvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4i0JDQtNC60LvRjtGH0LDQvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19jb25uZWN0ZWQiIG1zZ2lkPSI4MzY2MjU2NjkzNzE5NDk5NjY1Ij4i0J/QsNC00LrQu9GO0YfQsNC90LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMy41RyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4i0KDQvtGe0LzRltC90LMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IkVkZ2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IldpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaW0iIG1zZ2lkPSI4Mjc0MDE3MTE4NDcyNDU1MTU1Ij4i0J3Rj9C80LAgU0lNLdC60LDRgNGC0YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+ItCh0YPQstGP0LfRjCDQv9CwIEJsdWV0b290aC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiLQoNGN0LbRi9C8INC/0LDQu9GR0YLRgy4iPC9zdHJpbmc+Ci0gICAgPCEtLSBTdHJpbmcuZm9ybWF0IGZhaWxlZCBmb3IgdHJhbnNsYXRpb24gLS0+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsICg3NDUxNDc0MTg3MTEzMzcxOTY1KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiLQodGW0YHRgtGN0LzQvdGL0Y8g0L3QsNC70LDQtNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4i0JDQv9Cw0LLRj9GI0YfRjdC90L3Rli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlbW92ZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIzNjAzMDk5NTE0OTAyMTgyMzUwIj4i0JLRi9C00LDQu9GW0YbRjCDQsNC/0LDQstGP0YjRh9GN0L3QvdC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTINGD0LrQu9GO0YfQsNC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+ItCQ0YLRgNGL0LzQsNC90L3QtSBHUFMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiJUZWxlVHlwZXdyaXRlciDRg9C60LvRjtGH0LDQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiLQktGL0LrQu9GW0Log0Lcg0LLRltCx0YDQsNGG0YvRj9C5LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLQnNCw0Z7QutC70ZbQstGLINCy0YvQutC70ZbQui4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INCy0YvQtNCw0LvQtdC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4i0JDQv9Cw0LLRj9GI0YfRjdC90L3QtSDQv9GA0LDQv9GD0YjRh9Cw0L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfbm90aWZpY2F0aW9uX3NoYWRlIiBtc2dpZD0iNDY5MDI3NDg0NDQ0NzUwNDIwOCI+ItCm0LXQvdGMINCw0L/QsNCy0Y/RiNGH0Y3QvdC90Y8uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiLQpdGD0YLQutGW0Y8g0L3QsNC70LDQtNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiLQkNC/0L7RiNC90ZbRjyDQv9GA0YvQutC70LDQtNCw0L3QvdGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiLQmtCw0YDRi9GB0YLQsNC70YzQvdGW0Lo6IDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiLQnNCw0LFp0LvRjNC90Ysg0YFp0LPQvdCw0Ls6IDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMyRzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i0JDQutGD0LzRg9C70Y/RgtCw0YA6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i0KDRjdC20YvQvCDQv9Cw0LvRkdGC0YM6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLQndCw0LvQsNC00LbQsNC90Ysg0LHRg9C00Ldp0LvRjNC9adC6OiA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+ItCU0LDQtNC30LXQvdGL0Y8gMkctM0cg0LDQtNC60LvRjtGH0LDQvdGL0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiLQlNCw0LTQt9C10L3Ri9GPIDRHINCw0LTQutC70Y7Rh9Cw0L3Ri9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+ItCc0LDQsdGW0LvRjNC90LDRjyDQv9C10YDQsNC00LDRh9CwINC00LDQtNC30LXQvdGL0YUg0LDQtNC60LvRjtGH0LDQvdCw0Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiLQlNCw0LTQt9C10L3Ri9GPINCw0LTQutC70Y7Rh9Cw0L3Ri9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4i0JLRiyDQv9C10YDQsNCy0YvRgWnQu2kg0Z7RgdGC0LDQu9GP0LLQsNC90Ysg0Ltp0Lxp0YIg0L3QsCDQstGL0LrQsNGA0YvRgdGC0LDQvdC90LUuIFxuXG7QmtCw0LvRliDQstGLINC/0LDRntGC0L7RgNC90LAg0Z7QutC70Y7Rh9GL0YbQtSDQv9C10YDQsNC00LDRh9GDINC00LDQtNC30LXQvdGL0YUsINC80L7QttCwINGB0L/QsNCz0LDQvdGP0YbRhtCwINC/0LvQsNGC0LAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfZW5hYmxlIiBtc2dpZD0iNzcyOTc3MjAzOTIwODY2NDYwNiI+ItCf0LDRntGC0L7RgNC90LAg0Z7QutC70Y7Rh9GL0YbRjCDQtNCw0LTQt9C10L3Ri9GPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+ItCd0Y/QvNCwINC/0LDQtNC60LvRjtGH0Y3QvdC90Y8g0LTQsCBJ0L3RgtGN0YDQvdGN0YLRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpINC/0LDQtNC60LvRjtGH0LDQvdGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiLQn9C+0YjRg9C6IEdQUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiLQnNC10YHRhtCwINC30LDQtNCw0L3QsCDQv9GA0LDQtyBHUFMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLQktGL0LTQsNC7adGG0Ywg0YPRgdC1INCw0L/QsNCy0Y/RiNGH0Y3QvdC9aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i0IbQvdGE0LDRgNC80LDRhtGL0Y8g0L/RgNCwINC/0YDRi9C60LvQsNC00LDQvdC90LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+ItCt0LrRgNCw0L0g0L/QsNCy0LDRgNC+0YfQstCw0LXRhtGG0LAg0LDRntGC0LDQvNCw0YLRi9GH0L3QsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+ItCt0LrRgNCw0L0g0LfQsNCx0LvQsNC6adGA0LDQstCw0L3RiyDRniDQsNC70YzQsdC+0LzQvdCw0Lkg0LDRgNGL0LXQvdGC0LDRhtGL0ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+ItCt0LrRgNCw0L0g0LfQsNCx0LvQsNC6adGA0LDQstCw0L3RiyDRniDQv9Cw0YDRgtGA0Y3RgtC90LDQuSDQsNGA0YvQtdC90YLQsNGG0YvRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4i0JzRgNC+aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLQoNGN0LbRi9C8INC/0LDQu9GR0YLRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiLQl9Cw0YDQsNC00LrQsCwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiLQl9Cw0YDQsNC00LbQsNC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4iQmx1ZXRvb3RoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4iQmx1ZXRvb3RoICjQv9GA0YvQu9Cw0LTRizogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4iQmx1ZXRvb3RoINCy0YvQutC70Y7Rh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4i0K/RgNC60LDRgdGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+ItCQ0Z7RgtCw0L/QsNCy0LDRgNC+0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i0J/QsNCy0LDRgNC+0YIg0LfQsNCx0LDRgNC+0L3QtdC90YsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i0JzQtdGC0LDQtCDRg9Cy0L7QtNGDIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiLQnNGD0LvRjNGC0YvQvNC10LTRi9C50L3QsNGPINC/0YDRi9C70LDQtNCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLQotC+0LvRjNC60ZYg0Y3QutGB0YLRgNCw0L3Ri9GPINCy0YvQutC70ZbQutGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfc2V0dGluZ3NfbGFiZWwiIG1zZ2lkPSI1MzI2NTU2NTkyNTc4MDY1NDAxIj4i0J3QsNC70LDQtNGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdGltZV9sYWJlbCIgbXNnaWQ9IjQ2MzU5NjkxODIyMzk3MzY0MDgiPiLQp9Cw0YEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc191c2VyX2xhYmVsIiBtc2dpZD0iNTIzODk5NTYzMjEzMDg5Nzg0MCI+ItCvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9sYWJlbCIgbXNnaWQ9IjkxMzUzNDQ3MDQ4OTk1NDYwNDEiPiJXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLQndGP0LzQsCDQv9Cw0LTQutC70Y7Rh9GN0L3QvdGPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+ItCd0Y/QvNCwINGB0LXRgtC6aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpINCw0LTQutC70Y7Rh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiLQlNGL0YHQv9C70LXQuSBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+ItCR0LXRgdC/0YDQsNCy0LDQtNC90Ysg0LTRi9GB0L/Qu9C10LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiLQr9GA0LrQsNGB0YbRjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLQkNCO0KLQkCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiLQkNC/0LDQstGP0YjRh9GN0L3QvdGWINC3XCfRj9Ge0LvRj9GO0YbRhtCwINGC0YPRgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+ItCQ0YLRgNGL0LzQu9GW0LLQsNC50YbQtSDQtNC+0YHRgtGD0L8g0LTQsCDRltGFINGDINC70Y7QsdGLINGH0LDRgSwg0L/RgNCw0LLQvtC00LfRj9GH0Ysg0L/QsNC70YzRhtCw0Lwg0YPQvdGW0LcuXG7Qn9GA0LDQstGP0LTQt9GW0YbQtSDQv9Cw0LvRjNGG0LDQvCDRg9C90ZbQtyDRj9GI0YfRjSDRgNCw0LcsINC60LDQsSDQsNGC0YDRi9C80LDRhtGMINC00L7RgdGC0YPQvyDQtNCwINGB0YDQvtC00LrQsNGeINC60ZbRgNCw0LLQsNC90L3RjyDRgdGW0YHRgtGN0LzQsNC5LiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSAoOTA1MDg2OTU0ODk1MTA0NDM3MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nICg3MTE3NjkyNzk1MTYzNjIwNjI2KSAtLT4KLSAgICA8c2tpcCAvPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbAppbmRleCA2MTk0ZmQ4Li4wMTU5NzA0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i0JLQuNC90LDQs9C4INC00LAg0YHQtSDRgNCw0LfRgNC10YjQsNCy0LAg0L7RgiDRgtC+0LfQuCDQutC+0LzQv9GO0YLRitGAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i0JzQsNGJ0LDQsSDigJMg0LfQsNC/0YrQu9Cy0LAg0LXQutGA0LDQvdCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+ItCg0LDQt9C/0YrQstCw0L3QtSDigJMg0LfQsNC/0YrQu9Cy0LAg0LXQutGA0LDQvdCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4i0J/RgNC+0LzRj9C90LAg0L3QsCDQvNCw0YnQsNCx0LAg0LfQsCDRgdGK0LLQvNC10YHRgtC40LzQvtGB0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i0JrQvtCz0LDRgtC+INC00LDQtNC10L3QviDQv9GA0LjQu9C+0LbQtdC90LjQtSDQtSDRgdGK0LfQtNCw0LTQtdC90L4g0LfQsCDQv9C+LdC80LDQu9GK0Log0LXQutGA0LDQvSwg0LTQviDRh9Cw0YHQvtCy0L3QuNC60LAg0YnQtSDRgdC1INC/0L7QutCw0LbQtSDRg9C/0YDQsNCy0LvQtdC90LjQtSDQt9CwINC/0YDQvtC80Y/QvdCwINC90LAg0LzQsNGJ0LDQsdCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLQldC60YDQsNC90L3QsNGC0LAg0YHQvdC40LzQutCwINGB0LUg0LfQsNC/0LDQt9Cy0LAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLQldC60YDQsNC90L3QsNGC0LAg0YHQvdC40LzQutCwINGB0LUg0LfQsNC/0LDQt9Cy0LAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+ItCV0LrRgNCw0L3QvdCw0YLQsCDRgdC90LjQvNC60LAg0YHQtSDQt9Cw0L/QsNC30LLQsC4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i0J3QsNGH0LDQu9C+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i0JzQtdC90Y4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLQodC60L7RgNC+0YjQvdC4INC/0YDQuNC70L7QttC10L3QuNGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4i0KLRitGA0YHQtdC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4i0JrQsNC80LXRgNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLQkdGD0YLQvtC9INC30LAg0L/RgNC10LLQutC70Y7Rh9Cy0LDQvdC1INC90LAg0LzQtdGC0L7QtNCwINC90LAg0LLRitCy0LXQttC00LDQvdC1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLQkdGD0YLQvtC9INC30LAg0L/RgNC+0LzRj9C90LAg0L3QsCDQvNCw0YnQsNCx0LAg0YEg0YbQtdC7INGB0YrQstC80LXRgdGC0LjQvNC+0YHRgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+ItCf0YDQvtC80Y/QvdCwINC90LAg0LzQsNGJ0LDQsdCwINC90LAg0LXQutGA0LDQvdCwINC+0YIg0L/Qvi3QvNCw0LvRitC6INC00L4g0L/Qvi3Qs9C+0LvRj9C8LiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+ItCR0LDRgtC10YDQuNGPOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+ItCh0LDQvNC+0LvQtdGC0LXQvSDRgNC10LbQuNC8OiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGg6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4i0JzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtdGC0L4g0LUgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLQkdGD0LTQuNC70L3QuNC60YrRgiDQtSDQvdCw0LLQuNGCINC30LAgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRyDQtNCw0L3QvdC40YLQtSDRgdCwINC00LXQsNC60YLQuNCy0LjRgNCw0L3QuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHINC00LDQvdC90LjRgtC1INGB0LAg0LTQtdCw0LrRgtC40LLQuNGA0LDQvdC4Ijwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpOiDQmNC80LAg0LLRgNGK0LfQutCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiLQotGK0YDRgdC4INGB0LUgR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+ItCc0LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LXRgtC+INC1INC30LDQtNCw0LTQtdC90L4g0L7RgiBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLQkNC60YLQuNCy0L3QuCDQt9Cw0Y/QstC60Lgg0LfQsCDQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i0JjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0LjQt9Cy0LXRgdGC0LjRjy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i0JjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQv9GA0LjQu9C+0LbQtdC90LjQtdGC0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+ItCV0LrRgNCw0L3RitGCINGJ0LUg0YHQtSDQt9Cw0LLRitGA0YLQsCDQsNCy0YLQvtC80LDRgtC40YfQvdC+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i0JXQutGA0LDQvdGK0YIg0LUg0LfQsNC60LvRjtGH0LXQvSDQsiDRhdC+0YDQuNC30L7QvdGC0LDQu9C90LAg0L7RgNC40LXQvdGC0LDRhtC40Y8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+ItCV0LrRgNCw0L3RitGCINC1INC30LDQutC70Y7Rh9C10L0g0LLRitCyINCy0LXRgNGC0LjQutCw0LvQvdCwINC+0YDQuNC10L3RgtCw0YbQuNGPLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiLQktC40YLRgNC40L3QsCDRgSDQtNC10YHQtdGA0YLQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLQnNC10YfRgtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+ItCh0LDQvNC+0LvQtdGC0LXQvSDRgNC10LbQuNC8Ijwvc3RyaW5nPgpAQCAtMTgyLDEwICsxODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLQkNCy0YLQvtC80LDRgtC40YfQvdCwINC+0YDQuNC10L3RgtCw0YbQuNGPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+ItCe0YDQuNC10L3RgtCw0YbQuNGP0YLQsCDQtSDQt9Cw0LrQu9GO0YfQtdC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i0JzQtdGC0L7QtCDQvdCwINCy0YrQstC10LbQtNCw0L3QtSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCAoNTAxMTMyNzA0ODc0ODc2MjI1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwgKDc0NjQ1NDQwODY1MDczMzE0NTkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiLQnNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+ItCc0LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LXRgtC+INC1INC40LfQutC70Y7Rh9C10L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiLQnNGD0LvRgtC40LzQtdC00LjQudC90L4g0YPRgdGC0YDQvtC50YHRgtCy0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+ItCY0L3QtNC40LrQsNGC0L7RgCDQt9CwINGB0LjQu9Cw0YLQsCDQvdCwINC/0L7Qu9GD0YfQtdC90LjRjyDRgdC40LPQvdCw0LsgKFJTU0kpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLQodCw0LzQviDRgdC/0LXRiNC90Lgg0L7QsdCw0LbQtNCw0L3QuNGPIjwvc3RyaW5nPgpAQCAtMTk2LDEyICsxOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLQndGP0LzQsCDQstGA0YrQt9C60LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i0J3Rj9C80LAg0LzRgNC10LbQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpINC1INC40LfQutC70Y7Rh9C10L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4i0JTQuNGB0L/Qu9C10Lkg0L/RgNC10LcgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiLQkdC10LfQttC40YfQtdC9INC00LjRgdC/0LvQtdC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+ItCV0LrRgNCw0L0g0LfQsCDQv9GA0LXQtNCw0LLQsNC90LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiLQr9GA0LrQvtGB0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4i0JDQktCiLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiLQmNC30LLQtdGB0YLQuNGP0YLQsCDRgdC1INC/0L7QutCw0LfQstCw0YIg0YLRg9C6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4i0J7RgdGK0YnQtdGB0YLQstGP0LLQsNC50YLQtSDQtNC+0YHRgtGK0L8g0LTQviDRgtGP0YUg0L/QviDQstGB0Y/QutC+INCy0YDQtdC80LUsINC60LDRgtC+INC/0YDQtdC60LDRgNCw0YLQtSDQv9GA0YrRgdGCINC90LDQtNC+0LvRgy5cbtCd0LDQv9GA0LDQstC10YLQtSDQs9C+INC+0YLQvdC+0LLQviDQt9CwINGB0LjRgdGC0LXQvNC90LjRgtC1INC60L7QvdGC0YDQvtC70LguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4i0J/RgNC10LrQsNGA0LDQudGC0LUg0L/RgNGK0YHRgiDQv9C+INGA0YrQsdCwINC90LAg0LXQutGA0LDQvdCwLCDQt9CwINC00LAg0YHQtSDQv9C+0LrQsNC20LUg0LvQtdC90YLQsNGC0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+ItCf0YDQtdC60LDRgNCw0LnRgtC1INC/0YDRitGB0YIg0L7RgiDRgNGK0LHQsCDQvdCwINC10LrRgNCw0L3QsCwg0LfQsCDQtNCwINGB0LUg0L/QvtC60LDQttC1INGB0LjRgdGC0LXQvNC90LDRgtCwINC70LXQvdGC0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i0KDQtdC20LjQvCDQvdCwINC40L3QstC10YDRgtC40YDQsNC90LUg0L3QsCDRhtCy0LXRgtC+0LLQtdGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLQoNC10LbQuNC8INC90LAg0L/QvtC00L7QsdGA0LXQvSDQutC+0L3RgtGA0LDRgdGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLQoNC10LbQuNC8INC90LAg0LrQvtGA0LjQs9C40YDQsNC90LUg0L3QsCDRhtCy0LXRgtC+0LLQtdGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+ItCc0YDQtdC20LDRgtCwINC80L7QttC1XG7QtNCwINGB0LUg0L3QsNCx0LvRjtC00LDQstCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLQotGK0YDRgdC10L3QtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLQn9C70YrQt9C90LXRgtC1INC90LDQs9C+0YDQtSDQt9CwIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLQn9C70YrQt9C90LXRgtC1INC90LDQu9GP0LLQviDQt9CwIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCmluZGV4IGVkZGVkYTMuLjY4ODQ1NDYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApAQCAtNjEsOSArNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJEw7NuYSBzZW1wcmUgcGVybcOtcyBkZXMgZFwnYXF1ZXN0IGVxdWlwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iWm9vbSBwZXIgb21wbGlyIHBhbnRhbGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IkVzdGlyYSBwZXIgb21wbGlyIHBhbnQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iWm9vbSBkZSBjb21wYXRpYmlsaXRhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJRdWFuIHVuYSBhcGxpY2FjacOzIHNcJ2hhZ2kgZGlzc2VueWF0IHBlciBhIHVuYSBwYW50YWxsYSBtw6lzIHBldGl0YSwgYXBhcmVpeGVyw6AgdW4gY29udHJvbCBkZSB6b29tIGFsIGNvc3RhdCBkZWwgcmVsbG90Z2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IkRlc2FudCBjYXB0dXJhIGRlIHBhbnRhbGxhLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IlNcJ2VzdMOgIGRlc2FudCBjYXB0dXJhIGRlIHBhbnRhbGxhLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iU1wnZXN0w6AgZGVzYW50IGxhIGNhcHR1cmEgZGUgcGFudGFsbGEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IkxhIGNhcHR1cmEgZGUgcGFudGFsbGEgc1wnaGEgZGVzYXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90aXRsZSIgbXNnaWQ9IjY0NjE4NjU5NjA5NjE0MTQ5NjEiPiJTXCdoYSBmZXQgdW5hIGNhcHR1cmEgZGUgcGFudGFsbGEuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlDDoGdpbmEgZFwnaW5pY2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW7DuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IkFwbGljYWNpb25zIHJlY2VudHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJDZXJjYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJDw6BtZXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJCb3TDsyBkZSBjYW52aSBkZWwgbcOodG9kZSBkXCdlbnRyYWRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJCb3TDsyBkZSB6b29tIGRlIGNvbXBhdGliaWxpdGF0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iQW1wbGlhIG1lbnlzIGNvbSBtw6lzIGdyYW4gc2lndWkgbGEgcGFudGFsbGEuIjwvc3RyaW5nPgpAQCAtMTU1LDYgKzE1NSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0ZXJpYSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+Ik1vZGUgZFwnYXZpw7MgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iVWJpY2FjacOzOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtYSBlc3RhYmxlcnRhIGEgbGVzIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iRGFkZXMgMkctM0cgZGVzYWN0aXZhZGVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iRGFkZXMgNEcgZGVzYWN0aXZhZGVzIjwvc3RyaW5nPgpAQCAtMTY2LDEyICsxNjcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpOiBjb25uZWN0YWRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJTXCdlc3TDoCBjZXJjYW50IHVuIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJTXCdoYSBlc3RhYmxlcnQgbGEgdWJpY2FjacOzIHBlciBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJTb2zCt2xpY2l0dWRzIGRcJ3ViaWNhY2nDsyBhY3RpdmVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iRXNib3JyYSB0b3RlcyBsZXMgbm90aWZpY2FjaW9ucy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iSW5mb3JtYWNpw7MgZGUgbFwnYXBsaWNhY2nDsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iTGEgcGFudGFsbGEgZ2lyYXLDoCBhdXRvbcOgdGljYW1lbnQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJMYSBwYW50YWxsYSBlc3TDoCBibG9xdWVqYWRhIGVuIG9yaWVudGFjacOzIGhvcml0em9udGFsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJMYSBwYW50YWxsYSBlc3TDoCBibG9xdWVqYWRhIGVuIG9yaWVudGFjacOzIHZlcnRpY2FsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJDYXBzYSBkZSBwb3N0cmVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkVzdGFsdmkgZGUgcGFudGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iTW9kZSBkXCdhdmnDsyI8L3N0cmluZz4KQEAgLTE5NiwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iRGVzY29ubmVjdGF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+Ik5vIGhpIGhhIGNhcCB4YXJ4YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIGRlc2Nvbm5lY3RhZGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iUGFudGFsbGEgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJQYW50YWxsYSBzZW5zZSBmaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iUGFudGFsbGEgZFwnZW1pc3Npw7MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJCcmlsbGFudG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE9Nw4BUSUNBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IkxlcyBub3RpZmljYWNpb25zIGFwYXJlaXhlbiBhcXXDrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IkFjY2VkZWl4LWhpIGVuIHF1YWxzZXZvbCBtb21lbnQ6IG5vbcOpcyBoYXMgZGUgZmVyIGxsaXNjYXIgZWwgZGl0IGNhcCBhdmFsbC5cblRvcm5hIGEgZmVyIGxsaXNjYXIgZWwgZGl0IGNhcCBhdmFsbCBwZXIgZmVyIHF1ZSBlcyBtb3N0cmluIGVscyBjb250cm9scyBkZWwgc2lzdGVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJGZXMgbGxpc2NhciBlbCBkaXQgcGVyIGxhIHZvcmEgZGUgbGEgcGFudGFsbGEgcGVycXXDqCBlcyBtb3N0cmkgbGEgYmFycmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IkZlcyBsbGlzY2FyIGVsIGRpdCBkZXMgZGUgbGEgdm9yYSBkZSBsYSBwYW50YWxsYSBwZXJxdcOoIGVzIG1vc3RyaSBsYSBiYXJyYSBkZWwgc2lzdGVtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJNb2RlIGRcJ2ludmVyc2nDsyBkZSBjb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+Ik1vZGUgZGUgY29udHJhc3QgbWlsbG9yYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZGUgZGUgY29ycmVjY2nDsyBkZSBjb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iw4lzIHBvc3NpYmxlIHF1ZSBsYSB4YXJ4YVxuZXN0aWd1aSBjb250cm9sYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJDZXJjYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJGZXMgbGxpc2NhciBlbCBkaXQgY2FwIGFtdW50IHBlciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRmVzIGxsaXNjYXIgZWwgZGl0IGNhcCBhIGxcJ2VzcXVlcnJhIHBlciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAppbmRleCA4N2JhNjdhLi5iNTJmZTYwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iVsW+ZHkgcG92b2xpdCB6IHRvaG90byBwb8SNw610YcSNZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IlDFmWlibMOtxb5pdCBuYSBjZWxvdSBvYnJhem92a3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iTmEgY2Vsb3Ugb2JyYXpvdmt1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iw5pwcmF2YSB2ZWxpa29zdGkgeiBkxa92b2R1IGtvbXBhdGliaWxpdHkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iUG9rdWQgamUgYXBsaWthY2UgbmF2csW+ZW5hIHBybyBtZW7FocOtIG9icmF6b3ZrdSwgem9icmF6w60gc2UgdmVkbGUgaG9kaW4gb3Zsw6FkYWPDrSBwcnZlayBwxZlpYmzDrcW+ZW7DrS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iVWtsw6Fkw6Fuw60gc27DrW1rdSBvYnJhem92a3kuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJVa2zDoWTDoW7DrSBzbsOtbWt1IG9icmF6b3ZreS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iUHJvYsOtaMOhIHVrbMOhZMOhbsOtIHNuw61ta3Ugb2JyYXpvdmt5LiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJEb23FryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJOb3bDqSBhcGxpa2FjZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IkhsZWRhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJGb3RvYXBhcsOhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iVGxhxI3DrXRrbyBwxZllcG51dMOtIG1ldG9keSB6YWTDoXbDoW7DrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJUbGHEjcOtdGtvIMO6cHJhdnkgdmVsaWtvc3RpIHogZMWvdm9kdSBrb21wYXRpYmlsaXR5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJadsSbdMWhaXQgbWVuxaHDrSBvYnLDoXplayBuYSB2xJt0xaHDrSBvYnJhem92a3UuIjwvc3RyaW5nPgpAQCAtMTU1LDYgKzE1NSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0ZXJpZTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJSZcW+aW0gViBsZXRhZGxlOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGg6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iUG9sb2hhOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQnVkw61rIGplIG5hc3RhdmVuIG5hIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iRGF0b3bDqSBwxZllbm9zeSAyRyBhIDNHIGpzb3UgemFrw6F6w6FueSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IkRhdG92w6kgcMWZZW5vc3kgNEcganNvdSB6YWvDoXrDoW55Ijwvc3RyaW5nPgpAQCAtMTY2LDEyICsxNjcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpOiBwxZlpcG9qZW5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJWeWhsZWTDoXbDoW7DrSBzYXRlbGl0xa8gR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IlBvbG9oYSBuYXN0YXZlbmEgcG9tb2PDrSBzeXN0w6ltdSBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJBa3Rpdm7DrSDFvsOhZG9zdGkgbyBwb2xvaHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJWeW1hemF0IHbFoWVjaG5hIG96bsOhbWVuw60uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkluZm9ybWFjZSBvIGFwbGlrYWNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJPYnJhem92a2Egc2UgYXV0b21hdGlja3kgb3RvxI3DrS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+Ik9icmF6b3ZrYSBqZSB1emFtxI1lbmEgdiBvcmllbnRhY2kgbmEgxaHDrcWZa3UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+Ik9icmF6b3ZrYSBqZSB1emFtxI1lbmEgdiBvcmllbnRhY2kgbmEgdsO9xaFrdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iUHVsdCBzZSBzbGFka29zdG1pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IlNwb8WZacSNIG9icmF6b3ZreSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJSZcW+aW0gViBsZXRhZGxlIjwvc3RyaW5nPgpAQCAtMTg0LDEwICsxODYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJBdXRvbWF0aWNrw6kgb3TDocSNZW7DrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJPdMOhxI1lbsOtIGplIHV6YW3EjWVubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJNZXRvZGEgemFkw6F2w6Fuw60gZGF0Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IlBvbG9oYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJQb2xvaGEgdnlwbnV0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiJNZWRpw6FsbsOtIHphxZnDrXplbsOtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJQb3V6ZSB0w61zxYhvdsOhIHZvbMOhbsOtIjwvc3RyaW5nPgpAQCAtMTk4LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJOZXDFmWlwb2plbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4ixb3DoWRuw6Egc8OtxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSB2eXBudXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IkRpc3BsZWogcMWZZXMgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJCZXpkcsOhdG92w70gZGlzcGxlaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJWemTDoWxlbsOhIG9icmF6b3ZrYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkphcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPTUFUSUNLWSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJaZGUgc2Ugem9icmF6dWrDrSBvem7DoW1lbsOtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iTcWvxb5ldGUgamUga2R5a29saSB6b2JyYXppdCB0w61tLCDFvmUgcMWZZWplZGV0ZSBwcnN0ZW0gZG9sxa8uXG5QxZllamVkZXRlLWxpIHByc3RlbSBkb2zFryBqZcWhdMSbIGplZG5vdSwgem9icmF6w60gc2Ugb3Zsw6FkYWPDrSBwcnZreSBzeXN0w6ltdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJQYW5lbCB6b2JyYXrDrXRlIHDFmWVqZXTDrW0gcMWZZXMgb2tyYWogb2JyYXpvdmt5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJTeXN0w6ltb3bDvSBwYW5lbCB6b2JyYXrDrXRlIHDFmWVqZXTDrW0gcMWZZXMgb2tyYWogb2JyYXpvdmt5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IlJlxb5pbSBwxZlldnLDoWNlbsOtIGJhcmV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iUmXFvmltIHp2w73FoWVuw6lobyBrb250cmFzdHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IlJlxb5pbSBrb3Jla2NlIGJhcmV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJTw63FpSBtxa/FvmUgYsO9dFxubW9uaXRvcm92w6FuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iVnlobGVkw6F2w6Fuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iUMWZZWplxI90ZSBwcnN0ZW0gbmFob3J1OiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJQxZllamXEj3RlIHByc3RlbSBkb2xldmE6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKaW5kZXggYWY0YmIzMy4uNDFmNjE3ZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCkBAIC00NCw3ICs0NCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiJMWURMw5hTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiJBVVRPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4iVW5kZXJyZXRuaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4iQmx1ZXRvb3RoLXRldGhlcmluZyBhbnZlbmR0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+Ik5ldGRlbGluZyB2aWEgQmx1ZXRvb3RoIGFudmVuZHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2lucHV0X21ldGhvZF9zZXR0aW5nc19jb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjM1MDQyOTI0NzE1MTIzMTc4MjciPiJLb25maWd1cmVyIGlucHV0bWV0b2RlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+IkZ5c2lzayB0YXN0YXR1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiJUaWxsYWQsIGF0IGFwcGVuIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4ga2FuIGbDpSBhZGdhbmcgdGlsIFVTQi1lbmhlZGVuPyI8L3N0cmluZz4KQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iVGlsbGFkIGFsdGlkIGZyYSBkZW5uZSBjb21wdXRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilpvb20gdGlsIGZ1bGQgc2vDpnJtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IlN0csOmayB0aWwgZnVsZCBza8Omcm0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJLb21wYXRpYmlsaXRldHN6b29tIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+Ik7DpXIgZW4gYXBwIGVyIHVkdmlrbGV0IHRpbCBlbiBtaW5kcmUgc2vDpnJtLCB2aXNlcyBkZXIgZW4gem9vbWZ1bmt0aW9uIHZlZCB1cmV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJHZW1tZXIgc2vDpnJtYmlsbGVkZS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IkdlbW1lciBza8Omcm1iaWxsZWRlLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJTa8Omcm1iaWxsZWRldCBnZW1tZXMuIjwvc3RyaW5nPgpAQCAtNzUsOSArNzMsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+Iklzw6Z0IHNvbSBldCBrYW1lcmEgKFBUUCkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+Ikluc3RhbGxlciBhcHBlbiBBbmRyb2lkIEZpbG92ZXJmw7hyc2VsIHRpbCBNYWMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhY2siIG1zZ2lkPSI1NjcwMTE1Mzg5OTQ0MjkxMjAiPiJUaWxiYWdlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlN0YXJ0c2lkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJTdGFydHNrw6ZybSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJTZW5lc3RlIGFwcHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJTw7hnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkthbWVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iU2tpZnQgaW5kdGFzdG5pbmdzbWV0b2RlLWtuYXBwZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IktuYXAgZm9yIGtvbXBhdGliaWxpdGV0c3pvb20uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJab29tIG1pbmRyZSB0aWwgc3TDuHJyZSBza8Omcm0uIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0dGVyaSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IkZseXRpbHN0YW5kIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IlBsYWNlcmluZyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtZW4gZXIgaW5kc3RpbGxldCB0aWwgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRy1kYXRhIGVyIGRlYWt0aXZlcmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEctZGF0YSBlciBkZWFrdGl2ZXJldCI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBlciBmb3JidW5kZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IlPDuGdlciBlZnRlciBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iUGxhY2VyaW5nZW4gZXIgYW5naXZldCB2ZWQgaGrDpmxwIGFmIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IkFrdGl2ZSBwbGFjZXJpbmdzYW5tb2RuaW5nZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJSeWQgYWxsZSBtZWRkZWxlbHNlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iT3BseXNuaW5nZXIgb20gYXBwZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IlNrw6ZybWVuIHJvdGVyZXIgYXV0b21hdGlzay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IlNrw6ZybWVuIGVyIG51IGzDpXN0IGkgbGlnZ2VuZGUgcmV0bmluZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iU2vDpnJtZW4gZXIgbnUgbMOlc3QgaSBzdMOlZW5kZSByZXRuaW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJEZXNzZXJ0Y2FzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYWdkcsO4bSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJGbHl0aWxzdGFuZCI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk2LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iSWtrZSBmb3JidW5kZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iSW50ZXQgbmV0dsOmcmsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBzbMOlZXQgZnJhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpIERpc3BsYXkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJUcsOlZGzDuHMgc2vDpnJtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IkNhc3Qtc2vDpnJtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iTHlzc3R5cmtlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iVW5kZXJyZXRuaW5nZXIgdmlzZXMgaGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iRsOlIGFkZ2FuZyB0aWwgZGVtIG7DpXIgc29tIGhlbHN0IHZlZCBhdCBzdHJ5Z2UgbmVkLlxuU3RyeWcgbmVkIGlnZW4gZm9yIGF0IGtvbW1lIHRpbCBzeXN0ZW1pbmRzdGlsbGluZ2VybmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iU3RyeWcga2FudGVuIGFmIHNrw6ZybWVuIGZvciBhdCBzZSBiasOmbGtlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iU3RyeWcgZnJhIHNrw6ZybWVucyBrYW50IGZvciBhdCBzZSBzeXN0ZW1iasOmbGtlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJGYXJ2ZWludmVydGVyaW5nc3RpbHN0YW5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iVGlsc3RhbmQgZm9yIGZvcmJlZHJldCBrb250cmFzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iRmFydmVrb3JyaWdlcmluZ3N0aWxzdGFuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iTmV0dsOmcmtldCBrYW5cbnbDpnJlIG92ZXJ2w6VnZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlPDuGduaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkdsaWQgb3AgZm9yIGF0IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJHbGlkIHRpbCB2ZW5zdHJlIGZvciBhdCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbAppbmRleCBlYzUyZWRlLi45NjY2OGU1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iVm9uIGRpZXNlbSBDb21wdXRlciBpbW1lciB6dWxhc3NlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilpvb20gYXVmIEJpbGRzY2hpcm1ncsO2w59lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IkF1ZiBCaWxkc2NoaXJtZ3LDtsOfZSBhbnBhc3NlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IktvbXBhdGliaWxpdMOkdHN6b29tIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+Ildlbm4gZWluZSBBcHAgZsO8ciBlaW5lbiBrbGVpbmVyZW4gQmlsZHNjaGlybSBhdXNnZWxlZ3QgaXN0LCB3aXJkIGVpbiBab29tLVN0ZXVlcmVsZW1lbnQgbmViZW4gZGVyIFVociBhbmdlemVpZ3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IlNjcmVlbnNob3Qgd2lyZCBnZXNwZWljaGVydC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlNjcmVlbnNob3Qgd2lyZCBnZXNwZWljaGVydC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iU2NyZWVuc2hvdCB3aXJkIGdlc3BlaWNoZXJ0Li4uIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlN0YXJ0YmlsZHNjaGlybSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbsO8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iS8O8cnpsaWNoIGdlw7ZmZm5ldGUgQXBwcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IlN1Y2hlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJLYW1lcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IlNjaGFsdGZsw6RjaGUgenVtIMOEbmRlcm4gZGVyIEVpbmdhYmVtZXRob2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IlNjaGFsdGZsw6RjaGUgZsO8ciBLb21wYXRpYmlsaXTDpHRzem9vbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iWm9vbSBhdWYgZWluZW4gZ3LDtsOfZXJlbiBCaWxkc2NoaXJtIjwvc3RyaW5nPgpAQCAtMTU1LDYgKzE1NSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQWtrdTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IkZsdWdtb2R1czogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGg6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJTdGFuZG9ydCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iV2Vja2VyIGdlc3RlbGx0IGbDvHIgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJHLS8zRy1EYXRlbiBkZWFrdGl2aWVydCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHLURhdGVuIGRlYWt0aXZpZXJ0Ijwvc3RyaW5nPgpAQCAtMTY2LDEyICsxNjcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldMQU4gdmVyYnVuZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJHUFMgd2lyZCBnZXN1Y2h0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IlN0YW5kb3J0IGR1cmNoIEdQUyBmZXN0Z2VsZWd0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iU3RhbmRvcnRhbmZyYWdlbiBha3RpdiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IkFsbGUgQmVuYWNocmljaHRpZ3VuZ2VuIGzDtnNjaGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkFwcC1EZXRhaWxzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJCaWxkc2NoaXJtIHdpcmQgYXV0b21hdGlzY2ggZ2VkcmVodC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkJpbGRzY2hpcm0gYmxlaWJ0IGltIFF1ZXJmb3JtYXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkJpbGRzY2hpcm0gYmxlaWJ0IGltIEhvY2hmb3JtYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IkRlc3NlcnRiZWjDpGx0ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGF5ZHJlYW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iRmx1Z21vZHVzIjwvc3RyaW5nPgpAQCAtMTg0LDEwICsxODYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJBdXRvbS4gZHJlaGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IkRyZWh1bmcgZ2VzcGVycnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iRWluZ2FiZW1ldGhvZGUiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwgKDUwMTEzMjcwNDg3NDg3NjIyNTcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsICg3NDY0NTQ0MDg2NTA3MzMxNDU5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iU3RhbmRvcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iU3RhbmRvcnQgYXVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+Ik1lZGllbmdlcsOkdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4iTnVyIE5vdHJ1ZmUiPC9zdHJpbmc+CkBAIC0xOTgsMTIgKzE5OCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5pY2h0IHZlcmJ1bmRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJLZWluIE5ldHoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXTEFOIGF1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXTEFOLURpc3BsYXkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJLYWJlbGxvc2Ugw5xiZXJ0cmFndW5nIChXaURpKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJCaWxkc2NoaXJtIMO8YmVydHJhZ2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iSGVsbGlna2VpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IkJlbmFjaHJpY2h0aWd1bmdlbiBlcnNjaGVpbmVuIGhpZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJHcmVpZmVuIFNpZSBqZWRlcnplaXQgYXVmIHNpZSB6dSwgaW5kZW0gU2llIG5hY2ggdW50ZW4gd2lzY2hlbi5cbldpc2NoZW4gU2llIGbDvHIgU3lzdGVtZWluc3RlbGx1bmdlbiBlcm5ldXQgbmFjaCB1bnRlbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJadW0gRWluYmxlbmRlbiBkZXIgTGVpc3RlIHZvbSBSYW5kIHdpc2NoZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+Ilp1bSBFaW5ibGVuZGVuIGRlciBTeXN0ZW1sZWlzdGUgdm9tIERpc3BsYXktUmFuZCB3ZWcgd2lzY2hlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJGYXJiaW52ZXJzaW9uc21vZHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iS29udHJhc3R2ZXJiZXNzZXJ1bmdzbW9kdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IkZhcmJrb3JyZWt0dXJtb2R1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iTmV0endlcmsgd2lyZFxuZXZlbnR1ZWxsIMO8YmVyd2FjaHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTdWNoZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJadW0gPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IG5hY2ggb2JlbiBzY2hpZWJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ilp1bSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gbmFjaCBsaW5rcyBzY2hpZWJlbiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKaW5kZXggYWI0MzA4MS4uOWUyNmE0MCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+Is6dzrEgzrXPgM65z4TPgc6tz4DOtc+EzrHOuSDPgM6szr3PhM6xIM6xz4DPjCDOsc+Fz4TPjM69IM+Ezr/OvSDPhc+Azr/Ou86/zrPOuc+Dz4TOriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Is6Wzr/Phc68IM+DzrUgz4DOu86uz4HOtyDOv864z4zOvc63Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+Is6gz4HOv86yb867zq4gz4POtSDPgM67zq7Pgc63IM6/zrguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4izpbOv8+FzrwgzrPOuc6xIM+Dz4XOvM6yzrHPhM+Mz4TOt8+EzrEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4izozPhM6xzr0gzrzOuc6xIM61z4bOsc+BzrzOv86zzq4gzq3Ph861zrkgz4PPh861zrTOuc6xz4PPhM61zq8gzrPOuc6xIM+Az4HOv86yzr/Ou86uIM+DzrUgzrzOuc66z4HPjM+EzrXPgc63IM6/zrjPjM69zrcsIM60zq/PgM67zrEgzrHPgM+MIM+Ezr8gz4HOv867z4zOuSDOuM6xIM61zrzPhs6xzr3Ouc+Dz4TOtc6vIM6tzr3OsSDPg8+Ezr/Ouc+HzrXOr86/IM61zrvOrc6zz4fOv8+FIM62zr/Phc68LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLOkc+Azr/OuM6uzrouIM+Dz4TOuc6zzrzOuc+Mz4TPhc+Azr/PhSDOv864z4zOvc63z4IuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLOkc+Azr/OuM6uzrrOtc+Fz4POtyDPg8+EzrnOs868zrnPjM+Ez4XPgM6/z4Ugzr/OuM+Mzr3Ot8+CLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLOk86vzr3Otc+EzrHOuSDOsc+Azr/OuM6uzrrOtc+Fz4POtyDPhM6/z4Ugz4PPhM65zrPOvM65z4zPhM+Fz4DOv8+FIM6/zrjPjM69zrfPgi4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4izpHPgc+HzrnOus6uIM+DzrXOu86vzrTOsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Is6czrXOvc6/z40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLOoM+Bz4zPg8+GzrHPhM61z4IgzrXPhs6xz4HOvM6/zrPOrc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4izpHOvc6xzrbOrs+EzrfPg863Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+Is6mz4nPhM6/zrPPgc6xz4bOuc66zq4gzrzOt8+HzrHOvc6uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLOms6/z4XOvM+Azq8gzrXOvc6xzrvOu86xzrPOrs+CIM68zrXOuM+MzrTOv8+FIM61zrnPg8+MzrTOv8+FIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+Is6azr/Phc68z4DOryDOtc+Dz4TOr86xz4POt8+CIM+Dz4XOvM6yzrHPhM+Mz4TOt8+EzrHPgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Is6Wzr/Phc68IM6xz4DPjCDOvM65zrrPgc+Mz4TOtc+Bzrcgz4POtSDOvM61zrPOsc67z43PhM61z4HOtyDOv864z4zOvc63LiI8L3N0cmluZz4KQEAgLTE1NSw2ICsxNTUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+Is6cz4DOsc+EzrHPgc6vzrEgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLOm861zrnPhM6/z4XPgc6zzq/OsSDPgM+Ezq7Pg863z4IgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4izqTOv8+Azr/OuM61z4POr86xIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4izqTOvyDOvs+Fz4DOvc63z4TOrs+Bzrkgzq3Ph861zrkgzr/Pgc65z4PPhM61zq8gz4PPhM65z4IgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiLOpM6xIM60zrXOtM6/zrzOrc69zrEgMkctM0cgzrHPgM61zr3Otc+BzrPOv8+Azr/Ouc6uzrjOt866zrHOvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+Is6kzrEgzrTOtc60zr/OvM6tzr3OsSA0RyDOsc+AzrXOvc61z4HOs86/z4DOv865zq7OuM63zrrOsc69Ijwvc3RyaW5nPgpAQCAtMTY2LDEyICsxNjcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIM+Dz4XOvc60zrXOtM61zrzOrc69zr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+Is6Rzr3Osc62zq7PhM63z4POtyDOs865zrEgR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+Is6hz43OuM68zrnPg863IM+Ezr/PgM6/zrjOtc+Dzq/Osc+CIM68zrUgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4izqTOsSDOsc65z4TOrs68zrHPhM6xIM+Ezr/PgM6/zrjOtc+Dzq/Osc+CIM6tz4fOv8+Fzr0gzrXOvc61z4HOs86/z4DOv865zrfOuM61zq8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLOlc66zrrOsc64zqzPgc65z4POtyDPjM67z4nOvSDPhM+Jzr0gzrXOuc60zr/PgM6/zrnOrs+DzrXPic69LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLOoM67zrfPgc6/z4bOv8+Bzq/Otc+CIM61z4bOsc+BzrzOv86zzq7PgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4izpjOsSDOs86vzr3Otc+EzrHOuSDOsc+Fz4TPjM68zrHPhM63IM+AzrXPgc65z4PPhM+Bzr/Phs6uIM+EzrfPgiDOv864z4zOvc63z4IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLOlyDOv864z4zOvc63IM6tz4fOtc65IM66zrvOtc65zrTPic64zrXOryDPg861IM6/z4HOuc62z4zOvc+EzrnOvyDPgM+Bzr/Pg86xzr3Osc+Ezr/Ou865z4POvM+MLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLOlyDOv864z4zOvc63IM6tz4fOtc65IM66zrvOtc65zrTPic64zrXOryDPg861IM66zrHPhM6xzrrPjM+Bz4XPhs6/IM+Az4HOv8+DzrHOvc6xz4TOv867zrnPg868z4wuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+Is6Vz4DOuc60z4zPgc+AzrnOvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYXlkcmVhbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLOm861zrnPhM6/z4XPgc6zzq/OsSDPgM+Ezq7Pg863z4IiPC9zdHJpbmc+CkBAIC0xOTYsMTIgKzE5OCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Is6czrcgz4PPhc69zrTOtc60zrXOvM6tzr3OvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLOms6xzr3Orc69zrEgzrTOr866z4TPhc6/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkgzrHOvc61zr3Otc+BzrPPjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiLOn864z4zOvc63IFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4izpHPg8+Nz4HOvM6xz4TOtyDOv864z4zOvc63Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+Is6czrXPhM6szrTOv8+Dzrcgzr/OuM+Mzr3Ot8+CIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4izqbPic+EzrXOuc69z4zPhM63z4TOsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLOkc6lzqTOn86czpHOpM6XIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+Is6fzrkgzrXOuc60zr/PgM6/zrnOrs+DzrXOuc+CIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuSDOtc60z44iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiLOnM61z4TOsc6yzrXOr8+EzrUgz4POtSDOsc+Fz4TOrc+CIM6xzr3OrCDPgM6sz4POsSDPg8+EzrnOs868zq4gz4PPjc+Bzr/Ovc+EzrHPgiDPgM+Bzr/PgiDPhM6xIM66zqzPhM+JLlxuzqPPjc+BzrXPhM61IM6+zrHOvc6sIM+Az4HOv8+CIM+EzrEgzrrOrM+Ez4kgzrPOuc6xIM+EzrEgz4PPhM6/zrnPh861zq/OsSDOtc67zq3Os8+Hzr/PhSDPg8+Fz4PPhM6uzrzOsc+Ezr/Pgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLOo8+Nz4HOtc+EzrUgzrHPgM+MIM+EzrfOvSDOrM66z4HOtyDPhM63z4Igzr/OuM+Mzr3Ot8+CIM6zzrnOsSDOvc6xIM61zrzPhs6xzr3Or8+DzrXPhM61IM+EzrcgzrPPgc6xzrzOvM6uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiLOo8+Nz4HOtc+EzrUgzrHPgM+MIM+EzrfOvSDOrM66z4HOtyDPhM63z4Igzr/OuM+Mzr3Ot8+CIM6zzrnOsSDOvc6xIM61zrzPhs6xzr3Or8+DzrXPhM61IM+EzrcgzrPPgc6xzrzOvM6uIM+Dz4XPg8+Ezq7OvM6xz4TOv8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+Is6bzrXOuc+Ezr/Phc+BzrPOr86xIM6xzr3Osc+Dz4TPgc6/z4bOrs+CIM+Hz4HPjs68zrHPhM6/z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLOm861zrnPhM6/z4XPgc6zzq/OsSDOss61zrvPhM6vz4nPg863z4IgzrHOvc+Ezq/OuM61z4POt8+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLOm861zrnPhM6/z4XPgc6zzq/OsSDOtM65z4zPgc64z4nPg863z4Igz4fPgc+OzrzOsc+Ezr/PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4izqTOvyDOtM6vzrrPhM+Fzr8gzrzPgM6/z4HOtc6vXG7Ovc6xIM+AzrHPgc6xzrrOv867zr/Phc64zrXOr8+EzrHOuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4izpHOvc6xzrbOrs+EzrfPg863Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Is6az43Ou865z4POtyDPgM+Bzr/PgiDPhM6xIM61z4DOrM69z4kgzrPOuc6xIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLOms+NzrvOuc+Dzrcgz4DPgc6/z4Igz4TOsSDOsc+BzrnPg8+EzrXPgc6sIM6zzrnOsSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCmluZGV4IDYwMjc1NTNmLi5iYjY0NDdmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJBbHdheXMgYWxsb3cgZnJvbSB0aGlzIGNvbXB1dGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iWm9vbSB0byBmaWxsIHNjcmVlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJTdHJldGNoIHRvIGZpbGwgc2NyZWVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iQ29tcGF0aWJpbGl0eSB6b29tIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IldoZW4gYW4gYXBwIHdhcyBkZXNpZ25lZCBmb3IgYSBzbWFsbGVyIHNjcmVlbiwgYSB6b29tIGNvbnRyb2wgd2lsbCBhcHBlYXIgYnkgdGhlIGNsb2NrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTYXZpbmcgc2NyZWVuc2hvdOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlNhdmluZyBzY3JlZW5zaG904oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJTY3JlZW5zaG90IGlzIGJlaW5nIHNhdmVkLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJIb21lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVudSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IlJlY2VudCBhcHBzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iU2VhcmNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkNhbWVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iU3dpdGNoIGlucHV0IG1ldGhvZCBidXR0b24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IkNvbXBhdGliaWxpdHkgem9vbSBidXR0b24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJab29tIHNtYWxsZXIgdG8gbGFyZ2VyIHNjcmVlbi4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXR0ZXJ5IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iQWVyb3BsYW5lIE1vZGUgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iTG9jYXRpb24gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybSBzZXQgZm9yIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cgZGF0YSBkaXNhYmxlZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIGRhdGEgZGlzYWJsZWQiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkgY29ubmVjdGVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJTZWFyY2hpbmcgZm9yIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJMb2NhdGlvbiBzZXQgYnkgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iTG9jYXRpb24gcmVxdWVzdHMgYWN0aXZlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iQ2xlYXIgYWxsIG5vdGlmaWNhdGlvbnMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkFwcCBpbmZvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJTY3JlZW4gd2lsbCByb3RhdGUgYXV0b21hdGljYWxseS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IlNjcmVlbiBpcyBsb2NrZWQgaW4gbGFuZHNjYXBlIG9yaWVudGF0aW9uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJTY3JlZW4gaXMgbG9ja2VkIGluIHBvcnRyYWl0IG9yaWVudGF0aW9uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJEZXNzZXJ0IENhc2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGF5ZHJlYW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iQWVyb3BsYW5lIG1vZGUiPC9zdHJpbmc+CkBAIC0xOTQsMTIgKzE5NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5vdCBDb25uZWN0ZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iTm8gTmV0d29yayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIE9mZiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaS1GaSBEaXNwbGF5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iV2lyZWxlc3MgRGlzcGxheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJDYXN0IFNjcmVlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkJyaWdodG5lc3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJOb3RpZmljYXRpb25zIGFwcGVhciBoZXJlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iQWNjZXNzIHRoZW0gYW55IHRpbWUgYnkgc3dpcGluZyBkb3duLlxuU3dpcGUgZG93biBhZ2FpbiBmb3Igc3lzdGVtIGNvbnRyb2xzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IlN3aXBlIGVkZ2Ugb2Ygc2NyZWVuIHRvIHJldmVhbCBiYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IlN3aXBlIGZyb20gZWRnZSBvZiBzY3JlZW4gdG8gcmV2ZWFsIHN5c3RlbSBiYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iQ29sb3VyIGludmVyc2lvbiBtb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iRW5oYW5jZWQgY29udHJhc3QgbW9kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iQ29sb3VyIGNvcnJlY3Rpb24gbW9kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iTmV0d29yayBtYXlcbmJlIG1vbml0b3JlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iU2VhcmNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlNsaWRlIHVwIGZvciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iU2xpZGUgbGVmdCBmb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1ySU4tbGFuZC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tcklOLWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE3NzNiOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tcklOLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IlNjcmVlbiBpcyBub3cgbG9ja2VkIGluIGxhbmRzY2FwZSBvcmllbnRhdGlvbi4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2NDQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjA5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4iU3lzdGVtIFVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+IkNsZWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4iUmVtb3ZlIGZyb20gbGlzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiJBcHAgaW5mbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4iTm8gcmVjZW50IGFwcHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IkRpc21pc3MgcmVjZW50IGFwcHMiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9yZWNlbnRfYXBwcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiIxIHJlY2VudCBhcHAiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCByZWNlbnQgYXBwcyI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiJObyBub3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiJPbmdvaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+Ik5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiJDb25uZWN0IGNoYXJnZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiJUaGUgYmF0dGVyeSBpcyBnZXR0aW5nIGxvdy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiByZW1haW5pbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4iVVNCIGNoYXJnaW5nIG5vdCBzdXBwb3J0ZWQuXG5Vc2Ugb25seSB0aGUgc3VwcGxpZWQgY2hhcmdlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4iQmF0dGVyeSB1c2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiJTZXR0aW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+IkFlcm9wbGFuZSBtb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+IkF1dG8tcm90YXRlIHNjcmVlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+Ik1VVEUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+IkFVVE8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX25vdGlmaWNhdGlvbnMiIG1zZ2lkPSIzOTcxNDYxNzYyODA5MDUxMzciPiJOb3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IkJsdWV0b290aCB0ZXRoZXJlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IlNldCB1cCBpbnB1dCBtZXRob2RzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4iUGh5c2ljYWwga2V5Ym9hcmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4iQWxsb3cgdGhlIGFwcCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IHRvIGFjY2VzcyB0aGUgVVNCIGRldmljZT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IkFsbG93IHRoZSBhcHAgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiB0byBhY2Nlc3MgdGhlIFVTQiBhY2Nlc3Nvcnk/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjUxNjEyMDUyNTg2MzUyNTMyMDYiPiJPcGVuIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4gd2hlbiB0aGlzIFVTQiBkZXZpY2UgaXMgY29ubmVjdGVkPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4iT3BlbiA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IHdoZW4gdGhpcyBVU0IgYWNjZXNzb3J5IGlzIGNvbm5lY3RlZD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiJObyBpbnN0YWxsZWQgYXBwcyB3b3JrIHdpdGggdGhpcyBVU0IgYWNjZXNzb3J5LiBMZWFybiBtb3JlIGFib3V0IHRoaXMgYWNjZXNzb3J5IGF0IDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiJVU0IgYWNjZXNzb3J5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4iVXNlIGJ5IGRlZmF1bHQgZm9yIHRoaXMgVVNCIGRldmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IlVzZSBieSBkZWZhdWx0IGZvciB0aGlzIFVTQiBhY2Nlc3NvcnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IkFsbG93IFVTQiBkZWJ1Z2dpbmc/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+IlRoZSBjb21wdXRlclwncyBSU0Ega2V5IGZpbmdlcnByaW50IGlzOlxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iQWx3YXlzIGFsbG93IGZyb20gdGhpcyBjb21wdXRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilpvb20gdG8gZmlsbCBzY3JlZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iU3RyZXRjaCB0byBmaWxsIHNjcmVlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTYXZpbmcgc2NyZWVuc2hvdOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlNhdmluZyBzY3JlZW5zaG904oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJTY3JlZW5zaG90IGlzIGJlaW5nIHNhdmVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGl0bGUiIG1zZ2lkPSI2NDYxODY1OTYwOTYxNDE0OTYxIj4iU2NyZWVuc2hvdCBjYXB0dXJlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RleHQiIG1zZ2lkPSIxMTUyODM5NjQ3Njc3NTU4ODE1Ij4iVG91Y2ggdG8gdmlldyB5b3VyIHNjcmVlbnNob3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiJDb3VsZG5cJ3QgY2FwdHVyZSBzY3JlZW5zaG90LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4iQ291bGRuXCd0IHNhdmUgc2NyZWVuc2hvdC4gU3RvcmFnZSBtYXkgYmUgaW4gdXNlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IlVTQiBmaWxlIHRyYW5zZmVyIG9wdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiJNb3VudCBhcyBhIG1lZGlhIHBsYXllciAoTVRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+Ik1vdW50IGFzIGEgY2FtZXJhIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiJJbnN0YWxsIEFuZHJvaWQgRmlsZSBUcmFuc2ZlciBhcHBsaWNhdGlvbiBmb3IgTWFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4iQmFjayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJIb21lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVudSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IlJlY2VudCBhcHBzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iU2VhcmNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkNhbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iU3dpdGNoIGlucHV0IG1ldGhvZCBidXR0b24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IkNvbXBhdGliaWxpdHkgem9vbSBidXR0b24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJab29tIHNtYWxsZXIgdG8gbGFyZ2VyIHNjcmVlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4iQmx1ZXRvb3RoIGNvbm5lY3RlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4iQmx1ZXRvb3RoIGRpc2Nvbm5lY3RlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiJObyBiYXR0ZXJ5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+IkJhdHRlcnkgb25lIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdHdvX2JhcnMiIG1zZ2lkPSI4NTAwNjUwNDM4NzM1MDA5OTczIj4iQmF0dGVyeSB0d28gYmFycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdGhyZWVfYmFycyIgbXNnaWQ9IjIzMDI5ODMzMzA4NjUwNDA0NDYiPiJCYXR0ZXJ5IHRocmVlIGJhcnMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4iQmF0dGVyeSBmdWxsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4iTm8gcGhvbmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9vbmVfYmFyIiBtc2dpZD0iNjg3Njk5Mjc4MTMyNjY0MTE1Ij4iUGhvbmUgb25lIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+IlBob25lIHR3byBiYXJzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiJQaG9uZSB0aHJlZSBiYXJzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4iUGhvbmUgc2lnbmFsIGZ1bGwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+Ik5vIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4iRGF0YSBvbmUgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiJEYXRhIHR3byBiYXJzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IkRhdGEgdGhyZWUgYmFycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4iRGF0YSBzaWduYWwgZnVsbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IldpLUZpIG9mZi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2ktRmkgZGlzY29ubmVjdGVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vbmVfYmFyIiBtc2dpZD0iNzczNTg5MzE3ODAxMDcyNDM3NyI+IldpLUZpIG9uZSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IldpLUZpIHR3byBiYXJzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+IldpLUZpIHRocmVlIGJhcnMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IldpLUZpIHNpZ25hbCBmdWxsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iTm8gV2lNQVguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYIG9uZSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJXaU1BWCB0d28gYmFycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4iV2lNQVggdGhyZWUgYmFycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IldpTUFYIHNpZ25hbCBmdWxsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+Ik5vIHNpZ25hbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4iTm90IGNvbm5lY3RlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3plcm9fYmFycyIgbXNnaWQ9IjM4MDYwNjAyMjQ0NjcwMjc4ODciPiJaZXJvIGJhcnMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+Ik9uZSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90d29fYmFycyIgbXNnaWQ9IjY0MzczNjM2NDgzODUyMDY2NzkiPiJUd28gYmFycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4iVGhyZWUgYmFycy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+IlNpZ25hbCBmdWxsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiJPbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+Ik9mZi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IkNvbm5lY3RlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiJSb2FtaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+Ik5vIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4iQmx1ZXRvb3RoIHRldGhlcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+IkFlcm9wbGFuZSBtb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsIiBtc2dpZD0iNzQ1MTQ3NDE4NzExMzM3MTk2NSI+IkJhdHRlcnkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBlciBjZW50LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4iU3lzdGVtIHNldHRpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiJOb3RpZmljYXRpb25zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiJDbGVhciBub3RpZmljYXRpb24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMgZW5hYmxlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4iR1BTIGFjcXVpcmluZy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IlRlbGVUeXBld3JpdGVyIGVuYWJsZWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+IlJpbmdlciB2aWJyYXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJSaW5nZXIgc2lsZW50LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gZGlzbWlzc2VkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+Ik5vdGlmaWNhdGlvbiBkaXNtaXNzZWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiJOb3RpZmljYXRpb24gc2hhZGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+IlF1aWNrIHNldHRpbmdzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiJSZWNlbnQgYXBwcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiJVc2VyIDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiJNb2JpbGUgPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXR0ZXJ5IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iQWVyb3BsYW5lIE1vZGUgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iTG9jYXRpb24gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybSBzZXQgZm9yIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cgZGF0YSBkaXNhYmxlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIGRhdGEgZGlzYWJsZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4iTW9iaWxlIGRhdGEgZGlzYWJsZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiJEYXRhIGRpc2FibGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4iWW91XCd2ZSByZWFjaGVkIHRoZSBzcGVjaWZpZWQgZGF0YSB1c2FnZSBsaW1pdC5cblxuSWYgeW91IHJlLWVuYWJsZSBkYXRhLCB5b3UgbWF5IGJlIGNoYXJnZWQgYnkgdGhlIG9wZXJhdG9yLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiJSZWVuYWJsZSBkYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+Ik5vIEludGVybmV0IGNvbm5lY3Rpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBjb25uZWN0ZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IlNlYXJjaGluZyBmb3IgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkxvY2F0aW9uIHNldCBieSBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJMb2NhdGlvbiByZXF1ZXN0cyBhY3RpdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJDbGVhciBhbGwgbm90aWZpY2F0aW9ucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iQXBwIGluZm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IlNjcmVlbiB3aWxsIHJvdGF0ZSBhdXRvbWF0aWNhbGx5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iU2NyZWVuIGlzIGxvY2tlZCBpbiBsYW5kc2NhcGUgb3JpZW50YXRpb24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IlNjcmVlbiBpcyBsb2NrZWQgaW4gcG9ydHJhaXQgb3JpZW50YXRpb24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IkRlc3NlcnQgQ2FzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYXlkcmVhbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJBZXJvcGxhbmUgbW9kZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiJDaGFyZ2luZywgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiJDaGFyZ2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsIiBtc2dpZD0iNjMwNDE5MDI4NTE3MDcyMTQwMSI+IkJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9tdWx0aXBsZV9kZXZpY2VzX2xhYmVsIiBtc2dpZD0iMzkxMjI0NTU2NTYxMzY4NDczNSI+IkJsdWV0b290aCAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IERldmljZXMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiJCbHVldG9vdGggT2ZmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJCcmlnaHRuZXNzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJBdXRvIFJvdGF0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJSb3RhdGlvbiBMb2NrZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iSW5wdXQgTWV0aG9kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iTG9jYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iTG9jYXRpb24gT2ZmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+Ik1lZGlhIGRldmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4iRW1lcmdlbmN5IENhbGxzIE9ubHkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiJTZXR0aW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4iVGltZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4iTWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5vdCBDb25uZWN0ZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iTm8gTmV0d29yayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIE9mZiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJDYXN0IFNjcmVlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkJyaWdodG5lc3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUTyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJDb2xvdXIgaW52ZXJzaW9uIG1vZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJFbmhhbmNlZCBjb250cmFzdCBtb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJDb2xvdXIgY29ycmVjdGlvbiBtb2RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJOZXR3b3JrIG1heVxuYmUgbW9uaXRvcmVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTZWFyY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iU2xpZGUgdXAgZm9yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJTbGlkZSBsZWZ0IGZvciA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCmluZGV4IDYyZjZjMjAuLjYxMjI5ODUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlBlcm1pdGlyIHNpZW1wcmUgZGVzZGUgZXN0YSBjb21wdXRhZG9yYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilpvb20gcGFyYSBvY3VwYXIgbGEgcGFudGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iRXN0aXJhciBwLyBvY3VwYXIgbGEgcGFudGFsbGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJab29tIGRlIGNvbXBhdGliaWxpZGFkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IkN1YW5kbyB1bmEgYXBsaWNhY2nDs24gZnVlIGRpc2XDsWFkYSBwYXJhIHVuYSBwYW50YWxsYSBtw6FzIHBlcXVlw7FhLCBhcGFyZWNlIHVuIGNvbnRyb2wgZGUgem9vbSBqdW50byBhbCByZWxvai4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iR3VhcmRhbmRvIGNhcHR1cmEgZGUgcGFudGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJHdWFyZGFuZG8gbGEgY2FwdHVyYSBkZSBwYW50YWxsYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iTGEgY2FwdHVyYSBkZSBwYW50YWxsYSBzZSBlc3TDoSBndWFyZGFuZG8uIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlDDoWdpbmEgcHJpbmNpcGFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVuw7oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJBcGxpY2FjaW9uZXMgcmVjaWVudGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iQnVzY2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkPDoW1hcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IkJvdMOzbiBDYW1iaWFyIG3DqXRvZG8gZGUgZW50cmFkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJCb3TDs24gZGUgem9vbSBkZSBjb21wYXRpYmlsaWRhZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iWm9vbSBkZSBwYW50YWxsYSBtw6FzIHBlcXVlw7FhIGEgbcOhcyBncmFuZGUiPC9zdHJpbmc+CkBAIC0xNTUsNiArMTU1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXRlcsOtYSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iTW9kbyBhdmnDs24gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IlViaWNhY2nDs24gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtYTogPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IkRhdG9zIGRlIDJHLTNHIGluaGFiaWxpdGFkb3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJEYXRvcyBkZSA0RyBpbmhhYmlsaXRhZG9zIjwvc3RyaW5nPgpAQCAtMTY2LDEyICsxNjcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIGNvbmVjdGFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iQnVzY2FuZG8gR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkxhIHViaWNhY2nDs24gc2UgZXN0YWJsZWNpw7MgcG9yIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IlNvbGljaXR1ZGVzIGRlIHViaWNhY2nDs24gYWN0aXZhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IkVsaW1pbmFyIHRvZGFzIGxhcyBub3RpZmljYWNpb25lcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvcm1hY2nDs24gZGUgbGEgYXBsaWNhY2nDs24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IkxhIHBhbnRhbGxhIGdpcmFyw6EgYXV0b23DoXRpY2FtZW50ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkxhIHBhbnRhbGxhIGVzdMOhIGJsb3F1ZWFkYSBlbiBtb2RvIGhvcml6b250YWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkxhIHBhbnRhbGxhIGVzdMOhIGJsb3F1ZWFkYSBlbiBtb2RvIHZlcnRpY2FsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJDYWphIHBhcmEgcG9zdHJlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJBY3RpdmFyIHByb3RlY3RvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJNb2RvIGF2acOzbiI8L3N0cmluZz4KQEAgLTE4NCwxMCArMTg2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iR2lyYXIgYXV0b23DoXRpY2FtZW50ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJSb3RhY2nDs24gYmxvcXVlYWRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Ik3DqXRvZG8gZGUgaW50cm9kdWNjacOzbiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCAoNTAxMTMyNzA0ODc0ODc2MjI1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwgKDc0NjQ1NDQwODY1MDczMzE0NTkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJVYmljYWNpw7NuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IlViaWNhY2nDs24gZGVzYWN0aXZhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4iRGlzcG9zaXRpdm8gbXVsdGltZWRpYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4iU29sbyBlbWVyZ2VuY2lhIjwvc3RyaW5nPgpAQCAtMTk4LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJTaW4gY29uZXhpw7NuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IlNpbiByZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBkZXNhY3RpdmFkYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJQYW50YWxsYSBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IlBhbnRhbGxhIGluYWzDoW1icmljYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJQYW50YWxsYSBkZSBDYXN0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iQnJpbGxvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE9Nw4FUSUNPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IkxhcyBub3RpZmljYWNpb25lcyBhcGFyZWNlbiBhcXXDrS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgYWJham8gcGFyYSBhY2NlZGVyIGFsIGNvbnRlbmlkby5cblZ1ZWx2ZSBhIGRlc2xpemFyIGVsIGRlZG8gaGFjaWEgYWJham8gcGFyYSBhY2NlZGVyIGEgbG9zIGNvbnRyb2xlcyBkZWwgc2lzdGVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJEZXNsaXphIGVsIGRlZG8gZGVzZGUgZWwgYm9yZGUgZGUgbGEgcGFudGFsbGEgcGFyYSBtb3N0cmFyIGxhIGJhcnJhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iRGVzbGl6YSBlbCBkZWRvIGRlc2RlIGVsIGJvcmRlIGRlIGxhIHBhbnRhbGxhIHBhcmEgbW9zdHJhciBsYSBiYXJyYSBkZWwgc2lzdGVtYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iTW9kbyBkZSBpbnZlcnNpw7NuIGRlIGNvbG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iTW9kbyBkZSBjb250cmFzdGUgbWVqb3JhZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZG8gZGUgY29ycmVjY2nDs24gZGUgY29sb3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IkVzIHBvc2libGUgcXVlIGxhIHJlZFxuZXN0w6kgc3VwZXJ2aXNhZGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJCdXNjYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iRGVzbGl6YSBlbCBkZWRvIGhhY2lhIGFycmliYSBwYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgbGEgaXpxdWllcmRhIHBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKaW5kZXggNjRjM2NhYi4uZjIzMzg4NyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlBlcm1pdGlyIHNpZW1wcmUgZGVzZGUgZXN0ZSBvcmRlbmFkb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJab29tIHBhcmEgYWp1c3RhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJFeHBhbmRpciBwYXJhIGFqdXN0YXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJab29tIGRlIGNvbXBhdGliaWxpZGFkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IlNpIGxhIGFwbGljYWNpw7NuIHNlIGhhIGRpc2XDsWFkbyBwYXJhIHVuYSBwYW50YWxsYSBtw6FzIHBlcXVlw7FhLCBhcGFyZWNlcsOhIHVuIGNvbnRyb2wgZGUgem9vbSBqdW50byBhbCByZWxvai4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iR3VhcmRhbmRvIGNhcHR1cmEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJHdWFyZGFuZG8gY2FwdHVyYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iTGEgY2FwdHVyYSBkZSBwYW50YWxsYSBzZSBlc3TDoSBndWFyZGFuZG8uIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IkluaWNpbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbsO6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iQXBsaWNhY2lvbmVzIHJlY2llbnRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IkJ1c2NhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJDw6FtYXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJCb3TDs24gQ2FtYmlhciBtw6l0b2RvIGRlIGVudHJhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iQm90w7NuIGRlIHpvb20gZGUgY29tcGF0aWJpbGlkYWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Ilpvb20gZGUgcGFudGFsbGEgbcOhcyBwZXF1ZcOxYSBhIG3DoXMgZ3JhbmRlIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0ZXLDrWEgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+Ik1vZG8gYXZpw7NuIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJVYmljYWNpw7NuIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iTGEgYWxhcm1hIHNvbmFyw6EgYSBsYShzKSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IkRhdG9zIDJHLTNHIGluaGFiaWxpdGFkb3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJEYXRvcyA0RyBpbmhhYmlsaXRhZG9zIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IkNvbiBjb25leGnDs24gV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkJ1c2NhbmRvIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJVYmljYWNpw7NuIGRlZmluaWRhIHBvciBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJTb2xpY2l0dWRlcyBkZSB1YmljYWNpw7NuIGFjdGl2YXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJCb3JyYXIgdG9kYXMgbGFzIG5vdGlmaWNhY2lvbmVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkluZm9ybWFjacOzbiBkZSBsYSBhcGxpY2FjacOzbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iTGEgcGFudGFsbGEgZ2lyYXLDoSBhdXRvbcOhdGljYW1lbnRlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iTGEgcGFudGFsbGEgZXN0w6EgYmxvcXVlYWRhIGVuIG1vZG8gaG9yaXpvbnRhbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iTGEgcGFudGFsbGEgZXN0w6EgYmxvcXVlYWRhIGVuIG1vZG8gdmVydGljYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IkNhamEgcGFyYSBwb3N0cmVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IlNhbHZhcGFudGFsbGFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+Ik1vZG8gYXZpw7NuIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJObyBjb25lY3RhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iTm8gaGF5IHJlZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBkZXNhY3RpdmFkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJQYW50YWxsYSBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IlBhbnRhbGxhIGluYWzDoW1icmljYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJQYW50YWxsYSBkZSBDYXN0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iQnJpbGxvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iTGFzIG5vdGlmaWNhY2lvbmVzIGFwYXJlY2VuIGFxdcOtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iRGVzbGl6YSBlbCBkZWRvIGhhY2lhIGFiYWpvIHBhcmEgYWNjZWRlciBhbCBjb250ZW5pZG8uXG5WdWVsdmUgYSBkZXNsaXphciBlbCBkZWRvIGhhY2lhIGFiYWpvIHBhcmEgYWNjZWRlciBhIGxvcyBjb250cm9sZXMgZGVsIHNpc3RlbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iRGVzbGl6YSBlbCBib3JkZSBkZSBsYSBwYW50YWxsYSBwYXJhIG1vc3RyYXIgbGEgYmFycmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IkRlc2xpemEgZWwgYm9yZGUgZGUgbGEgcGFudGFsbGEgcGFyYSBtb3N0cmFyIGxhIGJhcnJhIGRlbCBzaXN0ZW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+Ik1vZG8gZGUgaW52ZXJzacOzbiBkZSBjb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+Ik1vZG8gZGUgY29udHJhc3RlIG1lam9yYWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJNb2RvIGRlIGNvcnJlY2Npw7NuIGRlIGNvbG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJMYSByZWQgc2VcbnB1ZWRlIHN1cGVydmlzYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkJ1c2NhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJEZXNsaXphIGVsIGRlZG8gaGFjaWEgYXJyaWJhIHBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkRlc2xpemEgZWwgZGVkbyBoYWNpYSBsYSBpenF1aWVyZGEgcGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV0LXJFRS1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldC1yRUUtbGFuZC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2IwY2UxCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldC1yRUUtbGFuZC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yb3RhdGlvbl9sb2NrZWQiIG1zZ2lkPSI3NjA5NjczMDExNDMxNTU2MDkyIj4iRWtyYWFuIG9uIG7DvMO8ZCBsdWt1c3RhdHVkIGhvcmlzb250YWFsYXNlbmRpc3NlLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2ZmZmFlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxNjQ5MzczNDQ4NTAwMDQ0NjYiPiJTw7xzdGVlbWkgVUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4iS3VzdHV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+IkxvZW5kaXN0IGVlbWFsZGFtaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+IlJha2VuZHVzZSB0ZWF2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4iVXVzaSByYWtlbmR1c2kgcG9sZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4iTG9vYnUgaGlsanV0aXN0ZXN0IHJha2VuZHVzdGVzdCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEgaGlsanV0aW5lIHJha2VuZHVzIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQgaGlsanV0aXN0IHJha2VuZHVzdCI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiJUZWF0aXNpIHBvbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+IkrDpHRrdXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4iVGVhZGlzdHVzZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiLDnGhlbmRhZ2UgbGFhZGlqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+IkFrdSBoYWtrYWIgdMO8aGplbmVtYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiBvbiBhbGxlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJVU0IgbGFhZGltaXN0IGVpIHRvZXRhdGEuXG5LYXN1dGFnZSBhaW51bHQgdG9vdGphIGxhYWRpamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+IkFrdWthc3V0dXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiJTZWFkZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+Ikxlbm51cmXFvmlpbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiJQw7bDtnJhIGVrcmFhbmkgYXV0b21hYXRzZWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4iU1VNTVVUQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4iQVVUTyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+IlRlYXRpc2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IkJsdWV0b290aCBvbiBqYWdhdHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4iU2VhZGlzdGEgc2lzZXN0dXNtZWV0b2RlaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiJGw7zDvHNpbGluZSBrbGF2aWF0dXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+IkthcyBsdWJhdGUgcmFrZW5kdXNlbCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IFVTQi1zZWFkbWVsZSBqdXVyZGUgcMOkw6RzZWRhPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4iS2FzIGx1YmF0ZSByYWtlbmR1c2VsIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gVVNCLXNlYWRtZWxlIGp1dXJkZSBww6TDpHNlZGE/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjUxNjEyMDUyNTg2MzUyNTMyMDYiPiJLYXMgYXZhZGEgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiwga3VpIHNlZSBVU0Itc2VhZGUgb24gw7xoZW5kYXR1ZD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IkthcyBhdmFkYSA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+LCBrdWkgVVNCLWxpc2FzZWFkZSBvbiDDvGhlbmRhdHVkPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+Ikluc3QuIHJhay4gZWkgdMO2w7Z0YSBzZWxsZSBVU0Itc2VhZG1lZ2EuIExpc2F0ZWF2ZXQgbGlzYXNlYWRtZSBrb2h0YSB2dCBzaWl0OiA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iVVNCLWxpc2FzZWFkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4iS3V2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+Ikthc3V0YSB2YWlraW1pc2kgc2VsbGUgVVNCLXNlYWRtZSBqYW9rcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IlZhaWtpbWlzaSBrYXN1dGEgc2VkYSBVU0ItbGlzYXNlYWRldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4iS2FzIGx1YmFuIFVTQiBzaWx1bWlzZT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4iQXJ2dXRpIFJTQS12w7V0bWUgc8O1cm1lasOkbGc6XG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJMdWJhIGFsYXRpIHNlbGxlc3QgYXJ2dXRpc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJTdXVtaSBla3JhYW5pIHTDpGl0bWlzZWtzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IlZlbml0YSBla3JhYW5pIHTDpGl0bWlzZWtzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+Ikt1dmF0w7VtbWlzZSBzYWx2ZXN0YW1pbmUgLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iS3V2YXTDtW1taXNlIHNhbHZlc3RhbWluZSAuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+Ikt1dmF0w7VtbWlzdCBzYWx2ZXN0YXRha3NlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGl0bGUiIG1zZ2lkPSI2NDYxODY1OTYwOTYxNDE0OTYxIj4iRWtyYWFuaXBpbHQgb24gasOkw6RkdnVzdGF0dWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+IlB1dWR1dGFnZSBrdXZhdMO1bW1pc2UgdmFhdGFtaXNla3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiJLdXZhdMO1bW1pc3QgZWkgc2FhbnVkIGrDpMOkZHZ1c3RhZGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiJLdXZhdMO1bW1pc3QgZWkgc2FhIHNhbHZlc3RhZGEuIE3DpGx1c2VhZGUgdsO1aWIgb2xsYSBrYXN1dHVzZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iVVNCLWZhaWxpZWRhc3R1c2UgdmFsaWt1ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+IlBhaWdhbGRhIG1lZWRpdW1pbcOkbmdpamFuYSAoTVRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+IlBhaWdhbGRhIGthYW1lcmFuYSAoUFRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4iQW5kcm9pZCBGaWxlIFRyYW5zZmVyaSBpbnN0YWxsaW1pbmUgTWFjaWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4iVGFnYXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IktvZHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW7DvMO8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iSGlsanV0aXNlZCByYWtlbmR1c2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iT3RzaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkthYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IlNpc2VzdHVzbWVldG9kaSB2YWhldGFtaXNlIG51cHAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IlNvYml2dXNzdXVtaSBudXBwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iU3V1bWkgc3V1cmVtYWxlIGVrcmFhbmlsZSB2w6RoZW0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfY29ubmVjdGVkIiBtc2dpZD0iMjcwNzAyNzYzMzI0Mjk4MzM3MCI+IkJsdWV0b290aCBvbiDDvGhlbmRhdHVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9Ijc0MTY2NDg2Njk5NzY4NzAxNzUiPiJCbHVldG9vdGhpIMO8aGVuZHVzIGthdGtlc3RhdHVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+IkFrdSBwdXVkdWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X29uZV9iYXIiIG1zZ2lkPSI3Nzc0ODg3NzIxODkxMDU3NTIzIj4iQWt1OiDDvGtzIHB1bGsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+IkFrdToga2FrcyBwdWxrYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdGhyZWVfYmFycyIgbXNnaWQ9IjIzMDI5ODMzMzA4NjUwNDA0NDYiPiJBa3U6IGtvbG0gcHVsa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4iQWt1IHTDpGlzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4iVGVsZWZvbmlzaWduYWFsIHB1dWR1YiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+IlRlbGVmb25pc2lnbmFhbDogw7xrcyBwdWxrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdHdvX2JhcnMiIG1zZ2lkPSI4Mzg0OTA1MzgyODA0ODE1MjAxIj4iVGVsZWZvbmlzaWduYWFsOiBrYWtzIHB1bGthLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiJUZWxlZm9uaXNpZ25hYWw6IGtvbG0gcHVsa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY0NzE4MzQ4Njg1ODA3NTc4OTgiPiJUZWxlZm9uaXNpZ25hYWwgb24gdHVnZXYuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+IkFuZG1lZCBwdXVkdXZhZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiJBbmRtZXNpZ25hYWw6IMO8a3MgcHVsay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdHdvX2JhcnMiIG1zZ2lkPSI2MTY2MDE4NDkyMzYwNDMyMDkxIj4iQW5kbWVzaWRlOiBrYWtzIHB1bGthLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IkFuZG1lc2lkZToga29sbSBwdWxrYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4iQW5kbWVzaWduYWFsIG9uIHR1Z2V2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vZmYiIG1zZ2lkPSIzMTc3MzgwMjk2Njk3OTMzNjI3Ij4iV2lmaSBvbiB2w6RsamFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2lmaSIgbXNnaWQ9IjE0MjU0NzY1NTE4Mjc5MjQ0NzQiPiJXaWZpLcO8aGVuZHVzIG9uIGthdGtlc3RhdHVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vbmVfYmFyIiBtc2dpZD0iNzczNTg5MzE3ODAxMDcyNDM3NyI+IldpRmk6IMO8a3MgcHVsay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4iV2lGaToga2FrcyBwdWxrYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiJXaUZpOiBrb2xtIHB1bGthLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiJXaUZpLXNpZ25hYWwgb24gdHVnZXYuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiJXaU1BWC1pIHBvbGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYLWkgb24gw7xrcyByaWJhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdHdvX2JhcnMiIG1zZ2lkPSI5MTc2MjM2ODU4MzM2NTAyMjg4Ij4iV2lNQVgtaSBvbiBrYWtzIHJpYmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90aHJlZV9iYXJzIiBtc2dpZD0iNjExNjU1MTYzNjc1MjEwMzkyNyI+IldpTUFYLWkgb24ga29sbSByaWJhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4iV2lNQVgtaSBzaWduYWFsIG9uIHR1Z2V2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+IlNpZ25hYWwgcHV1ZHViLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjYzOTUzMjYyNzYyMTM0MDI4ODMiPiLDnGhlbmR1cyBwdXVkdWIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV96ZXJvX2JhcnMiIG1zZ2lkPSIzODA2MDYwMjI0NDY3MDI3ODg3Ij4iTnVsbCBwdWxrYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4iw5xrcyBwdWxrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHdvX2JhcnMiIG1zZ2lkPSI2NDM3MzYzNjQ4Mzg1MjA2Njc5Ij4iS2FrcyBwdWxrYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4iS29sbSBwdWxrYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+IlNpZ25hYWwgb24gdHVnZXYuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+IlNlZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29mZiIgbXNnaWQ9IjY0NzU1MDgxNTc3ODY4NTMxNTciPiJWw6RsamFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19jb25uZWN0ZWQiIG1zZ2lkPSI4MzY2MjU2NjkzNzE5NDk5NjY1Ij4iw5xoZW5kYXR1ZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLDVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiJSw6RuZGx1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2VkZ2UiIG1zZ2lkPSI0NDc3NDU3MDUxNjMxOTc5Mjc4Ij4iU2VydiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3dpZmkiIG1zZ2lkPSIyMzI0NDk2NzU2NTkwNjQ1MjIxIj4iV2lGaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IlNJTS1rYWFydGkgcG9sZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4iQmx1ZXRvb3RoaSBqYWdhbWluZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiJMZW5udXJlxb5paW0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsIiBtc2dpZD0iNzQ1MTQ3NDE4NzExMzM3MTk2NSI+IkFrdTogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHByb3RzZW50aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+IlPDvHN0ZWVtaXNlYWRlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4iVGVhdGlzZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlbW92ZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIzNjAzMDk5NTE0OTAyMTgyMzUwIj4iVGVhdGlzZSBrdXN0dXRhbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTIG9uIGx1YmF0dWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IkdQUy1zaWduYWFsaSBvdHNpbWluZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IlRlbGVUeXBld3JpdGVyIGx1YmF0dWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+IlZpYnJlZXJpdiBrw7VsaXN0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iVmFpa25lIGvDtWxpc3RpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiJMb29idXNpdGUgcmFrZW5kdXNlc3QgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+Ik3DpHJndWFuZGVzdCBvbiBsb29idXR1ZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfbm90aWZpY2F0aW9uX3NoYWRlIiBtc2dpZD0iNDY5MDI3NDg0NDQ0NzUwNDIwOCI+Ik3DpHJndWFuZGUgdmFyaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4iS2lpcnNlYWRlZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4iSGlsanV0aXNlZCByYWtlbmR1c2VkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+Ikthc3V0YWphIDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiJNb2JpaWxpIDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMyRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQWt1OiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+Ikxlbm51a2lyZcW+aWltOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGg6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iQXN1a29odDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJNw6TDpHJhdHVkIMOkcmF0dXM6IDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyR+KAkzNHIGFuZG1lc2lkZSBrZWVsYXR1ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIGFuZG1lc2lkZSBrZWVsYXR1ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX21vYmlsZV90aXRsZSIgbXNnaWQ9IjEwNDYwNDcyNDg4NDQ4MjEyMDIiPiJNb2JpaWxuZSBhbmRtZXNpZGUga2VlbGF0dWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiJBbmRtZWthc3V0dXMga2VlbGF0dWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4iT2xldGUgasO1dWRudWQgbcOkw6RyYXR1ZCBhbmRtZWthc3V0dXNlIHBpaXJpbmkuXG5cbkt1aSBsw7xsaXRhdGUgYW5kbWVzaWRlIHV1ZXN0aSBzaXNzZSwgc2lpcyB2w7VpYiBvcGVyYWF0b3IgdGVpbHQgdGFzdSB2w7V0dGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfZW5hYmxlIiBtc2dpZD0iNzcyOTc3MjAzOTIwODY2NDYwNiI+Ikx1YmEgYW5kbWVzaWRlIHV1ZXN0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjE5NDAyMzE1MjEyNzQxNDc3NzEiPiJJbnRlcm5ldGktw7xoZW5kdXMgcHV1ZHViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2lGaSBvbiDDvGhlbmRhdHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJHUFMtaSBvdHNpbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJHUFMtaSBtw6TDpHJhdHVkIGFzdWtvaHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJBc3Vrb2hhIHRhb3RsdXNlZCBvbiBha3RpaXZzZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJLdXN0dXRhIGvDtWlrIHRlYXRpc2VkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJSYWtlbmR1c2UgdGVhdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IkVrcmFhbmkgcMO2w7ZyYW1pbmUgdG9pbXViIGF1dG9tYWF0c2VsdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkVrcmFhbiBvbiBsdWt1c3RhdHVkIGhvcmlzb250YWFsc3V1bmFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJFa3JhYW4gb24gbHVrdXN0YXR1ZCB2ZXJ0aWthYWxzdXVuYXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+Ik1haXVzdHVzZWtvcnYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iVW5pc3R1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJMZW5udXJlxb5paW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnaW5nX2xhYmVsIiBtc2dpZD0iNDkwMDc0Nzc0NDY1MzA5MjA5Ij4iTGFhZGltaW5lLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IkxhZXR1ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBzZWFkZXQpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiJCbHVldG9vdGggb24gdsOkbGphcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iSGVsZWR1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iQXV0b21hYXRuZSBww7bDtnJhbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJQw7bDtnJhbWluZSBsdWt1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJTaXNlc3R1c21lZXRvZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IkFzdWtvaHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iQXN1a29odCBvbiB2w6RsamFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+Ik1lZWRpYXNlYWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJBaW51bHQgaMOkZGFhYmlrw7VuZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiJTZWFkZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+IkFlZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4iTWluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2lGaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLDnGhlbmR1cyBwdXVkdWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iVsO1cmt1IHBvbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaUZpLcO8aGVuZHVzIG9uIHbDpGxqYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iQ2FzdC1la3JhYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJIZWxlZHVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE9NQUFUTkUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iVsOkcnZpZGUgw7xtYmVycMO2w7ZyYW1pc2UgcmXFvmlpbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IlTDpGl1c3RhdHVkIGtvbnRyYXN0aSByZcW+aWltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJWw6RydmlwYXJhbmR1c3Jlxb5paW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IlbDtXJrdSB2w7VpZGFrc2VcbmrDpGxnaWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJPdHNpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iTG9oaXN0YWdlIMO8bGVzOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iTG9oaXN0YWdlIHZhc2FrdWxlOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ5YzgzOC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV0L3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotLyoqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCi0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAotICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxNjQ5MzczNDQ4NTAwMDQ0NjYiPiJTw7xzdGVlbWkgVUkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4iS3VzdHV0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+IkxvZW5kaXN0IGVlbWFsZGFtaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+IlJha2VuZHVzZSB0ZWF2ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4iVXVzaSByYWtlbmR1c2kgcG9sZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4iTG9vYnUgaGlsanV0aXN0ZXN0IHJha2VuZHVzdGVzdCI8L3N0cmluZz4KLSAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KLSAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEgaGlsanV0aW5lIHJha2VuZHVzIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQgaGlsanV0aXN0IHJha2VuZHVzdCI8L2l0ZW0+Ci0gIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiJUZWF0aXNpIHBvbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+IkrDpHRrdXYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4iVGVhZGlzdHVzZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiLDnGhlbmRhZ2UgbGFhZGlqYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+IkFrdSBoYWtrYWIgdMO8aGplbmVtYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiBvbiBhbGxlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJVU0IgbGFhZGltaXN0IGVpIHRvZXRhdGEuXG5LYXN1dGFnZSBhaW51bHQgdG9vdGphIGxhYWRpamEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+IkFrdWthc3V0dXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiJTZWFkZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+Ikxlbm51cmXFvmlpbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiJQw7bDtnJhIGVrcmFhbmkgYXV0b21hYXRzZWx0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4iU1VNTVVUQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4iQVVUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+IlRlYXRpc2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IkJsdWV0b290aCBvbiBqYWdhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4iU2VhZGlzdGEgc2lzZXN0dXNtZWV0b2RlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiJGw7zDvHNpbGluZSBrbGF2aWF0dXVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+IkthcyBsdWJhdGUgcmFrZW5kdXNlbCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IFVTQi1zZWFkbWVsZSBqdXVyZGUgcMOkw6RzZWRhPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4iS2FzIGx1YmF0ZSByYWtlbmR1c2VsIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gVVNCLXNlYWRtZWxlIGp1dXJkZSBww6TDpHNlZGE/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjUxNjEyMDUyNTg2MzUyNTMyMDYiPiJLYXMgYXZhZGEgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiwga3VpIHNlZSBVU0Itc2VhZGUgb24gw7xoZW5kYXR1ZD8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IkthcyBhdmFkYSA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+LCBrdWkgVVNCLWxpc2FzZWFkZSBvbiDDvGhlbmRhdHVkPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+Ikluc3QuIHJhay4gZWkgdMO2w7Z0YSBzZWxsZSBVU0Itc2VhZG1lZ2EuIExpc2F0ZWF2ZXQgbGlzYXNlYWRtZSBrb2h0YSB2dCBzaWl0OiA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iVVNCLWxpc2FzZWFkZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4iS3V2YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+Ikthc3V0YSB2YWlraW1pc2kgc2VsbGUgVVNCLXNlYWRtZSBqYW9rcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IlZhaWtpbWlzaSBrYXN1dGEgc2VkYSBVU0ItbGlzYXNlYWRldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4iS2FzIGx1YmFuIFVTQiBzaWx1bWlzZT8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4iQXJ2dXRpIFJTQS12w7V0bWUgc8O1cm1lasOkbGc6XG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJMdWJhIGFsYXRpIHNlbGxlc3QgYXJ2dXRpc3QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJTdXVtaSBla3JhYW5pIHTDpGl0bWlzZWtzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IlZlbml0YSBla3JhYW5pIHTDpGl0bWlzZWtzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iU29iaXZ1c3N1dW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iS3VpIHJha2VuZHVzIG9uIG3DtWVsZHVkIHbDpGlrc2VtYWxlIGVrcmFhbmlsZSwga3V2YXRha3NlIGtlbGxhIGvDtXJ2YWwgc3V1bWkganVodG51cHAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+Ikt1dmF0w7VtbWlzZSBzYWx2ZXN0YW1pbmUgLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iS3V2YXTDtW1taXNlIHNhbHZlc3RhbWluZSAuLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+Ikt1dmF0w7VtbWlzdCBzYWx2ZXN0YXRha3NlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGl0bGUiIG1zZ2lkPSI2NDYxODY1OTYwOTYxNDE0OTYxIj4iRWtyYWFuaXBpbHQgb24gasOkw6RkdnVzdGF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+IlB1dWR1dGFnZSBrdXZhdMO1bW1pc2UgdmFhdGFtaXNla3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiJLdXZhdMO1bW1pc3QgZWkgc2FhbnVkIGrDpMOkZHZ1c3RhZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiJLdXZhdMO1bW1pc3QgZWkgc2FhIHNhbHZlc3RhZGEuIE3DpGx1c2VhZGUgdsO1aWIgb2xsYSBrYXN1dHVzZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iVVNCLWZhaWxpZWRhc3R1c2UgdmFsaWt1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+IlBhaWdhbGRhIG1lZWRpdW1pbcOkbmdpamFuYSAoTVRQKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+IlBhaWdhbGRhIGthYW1lcmFuYSAoUFRQKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4iQW5kcm9pZCBGaWxlIFRyYW5zZmVyaSBpbnN0YWxsaW1pbmUgTWFjaWxlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4iVGFnYXNpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IktvZHUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW7DvMO8Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iSGlsanV0aXNlZCByYWtlbmR1c2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJTaXNlc3R1c21lZXRvZGkgdmFoZXRhbWlzZSBudXBwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJTb2JpdnVzc3V1bWkgbnVwcC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IlN1dW1pIHN1dXJlbWFsZSBla3JhYW5pbGUgdsOkaGVtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiJCbHVldG9vdGggb24gw7xoZW5kYXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4iQmx1ZXRvb3RoaSDDvGhlbmR1cyBrYXRrZXN0YXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiJBa3UgcHV1ZHViLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+IkFrdTogw7xrcyBwdWxrLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiJBa3U6IGtha3MgcHVsa2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4iQWt1OiBrb2xtIHB1bGthLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+IkFrdSB0w6Rpcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3Bob25lIiBtc2dpZD0iNDg5NDcwODkzNzA1MjYxMTI4MSI+IlRlbGVmb25pc2lnbmFhbCBwdXVkdWIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiJUZWxlZm9uaXNpZ25hYWw6IMO8a3MgcHVsay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+IlRlbGVmb25pc2lnbmFhbDoga2FrcyBwdWxrYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3RocmVlX2JhcnMiIG1zZ2lkPSI4NTIxOTA0ODQzOTE5OTcxODg1Ij4iVGVsZWZvbmlzaWduYWFsOiBrb2xtIHB1bGthLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4iVGVsZWZvbmlzaWduYWFsIG9uIHR1Z2V2LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiJBbmRtZWQgcHV1ZHV2YWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4iQW5kbWVzaWduYWFsOiDDvGtzIHB1bGsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+IkFuZG1lc2lkZToga2FrcyBwdWxrYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdGhyZWVfYmFycyIgbXNnaWQ9IjkxNjc2NzA0NTIzOTUwMzg1MjAiPiJBbmRtZXNpZGU6IGtvbG0gcHVsa2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3NpZ25hbF9mdWxsIiBtc2dpZD0iMjcwODM4NDYwODEyNDUxOTM2OSI+IkFuZG1lc2lnbmFhbCBvbiB0dWdldi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IldpZmkgb24gdsOkbGphcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2lmaS3DvGhlbmR1cyBvbiBrYXRrZXN0YXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiJXaUZpOiDDvGtzIHB1bGsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IldpRmk6IGtha3MgcHVsa2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4iV2lGaToga29sbSBwdWxrYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2ODUzNTYxMzAzNTg2NDgwMzc2Ij4iV2lGaS1zaWduYWFsIG9uIHR1Z2V2LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iV2lNQVgtaSBwb2xlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWC1pIG9uIMO8a3MgcmliYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IldpTUFYLWkgb24ga2FrcyByaWJhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWC1pIG9uIGtvbG0gcmliYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IldpTUFYLWkgc2lnbmFhbCBvbiB0dWdldi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiJTaWduYWFsIHB1dWR1Yi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4iw5xoZW5kdXMgcHV1ZHViLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+Ik51bGwgcHVsa2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+IsOca3MgcHVsay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+Iktha3MgcHVsa2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+IktvbG0gcHVsa2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiJTaWduYWFsIG9uIHR1Z2V2LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiJTZWVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4iVsOkbGphcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IsOcaGVuZGF0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMyw1RyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4iUsOkbmRsdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IlNlcnYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IldpRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiJTSU0ta2FhcnRpIHBvbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IkJsdWV0b290aGkgamFnYW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4iTGVubnVyZcW+aWltLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiJBa3U6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwcm90c2VudGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiJTw7xzdGVlbWlzZWFkZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IlRlYXRpc2VkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IlRlYXRpc2Uga3VzdHV0YW1pbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+IkdQUyBvbiBsdWJhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiJHUFMtc2lnbmFhbGkgb3RzaW1pbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiJUZWxlVHlwZXdyaXRlciBsdWJhdHVkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiJWaWJyZWVyaXYga8O1bGlzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlZhaWtuZSBrw7VsaXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iTG9vYnVzaXRlIHJha2VuZHVzZXN0IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbl9kaXNtaXNzZWQiIG1zZ2lkPSI4NTQyMTEzODcxODYzMDY5MjciPiJNw6RyZ3VhbmRlc3Qgb24gbG9vYnV0dWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiJNw6RyZ3VhbmRlIHZhcmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+IktpaXJzZWFkZWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+IkhpbGp1dGlzZWQgcmFrZW5kdXNlZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiJLYXN1dGFqYSA8eGxpZmY6ZyBpZD0iVVNFUiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaSIgbXNnaWQ9IjYwOTk3ODEwMzE2Njk3Mjg3MDkiPiI8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4iTW9iaWlsaSA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkFrdTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJMZW5udWtpcmXFvmlpbTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+Ik3DpMOkcmF0dWQgw6RyYXR1czogPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJH4oCTM0cgYW5kbWVzaWRlIGtlZWxhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEcgYW5kbWVzaWRlIGtlZWxhdHVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+Ik1vYmlpbG5lIGFuZG1lc2lkZSBrZWVsYXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+IkFuZG1la2FzdXR1cyBrZWVsYXR1ZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiJPbGV0ZSBqw7V1ZG51ZCBtw6TDpHJhdHVkIGFuZG1la2FzdXR1c2UgcGlpcmluaS5cblxuS3VpIGzDvGxpdGF0ZSBhbmRtZXNpZGUgdXVlc3RpIHNpc3NlLCBzaWlzIHbDtWliIG9wZXJhYXRvciB0ZWlsdCB0YXN1IHbDtXR0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4iTHViYSBhbmRtZXNpZGUgdXVlc3RpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IkludGVybmV0aS3DvGhlbmR1cyBwdXVkdWIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaUZpIG9uIMO8aGVuZGF0dWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkdQUy1pIG90c2ltaW5lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkdQUy1pIG3DpMOkcmF0dWQgYXN1a29odCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+Ikt1c3R1dGEga8O1aWsgdGVhdGlzZWQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IlJha2VuZHVzZSB0ZWF2ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iRWtyYWFuaSBww7bDtnJhbWluZSB0b2ltdWIgYXV0b21hYXRzZWx0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iRWtyYWFuIG9uIGx1a3VzdGF0dWQgaG9yaXNvbnRhYWxzdXVuYXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkVrcmFhbiBvbiBsdWt1c3RhdHVkIHZlcnRpa2FhbHN1dW5hcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iVW5pc3R1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJMZW5udXJlxb5paW0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnaW5nX2xhYmVsIiBtc2dpZD0iNDkwMDc0Nzc0NDY1MzA5MjA5Ij4iTGFhZGltaW5lLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IkxhZXR1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBzZWFkZXQpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiJCbHVldG9vdGggb24gdsOkbGphcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iSGVsZWR1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iQXV0b21hYXRuZSBww7bDtnJhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJQw7bDtnJhbWluZSBsdWt1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJTaXNlc3R1c21lZXRvZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IkFzdWtvaHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iQXN1a29odCBvbiB2w6RsamFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+Ik1lZWRpYXNlYWRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJBaW51bHQgaMOkZGFhYmlrw7VuZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiJTZWFkZWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+IkFlZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4iTWluYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2lGaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLDnGhlbmR1cyBwdXVkdWIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iVsO1cmt1IHBvbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaUZpLcO8aGVuZHVzIG9uIHbDpGxqYXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2lGaS1la3JhYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJKdWh0bWV0YSBla3JhYW5pw7xoZW5kdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJIZWxlZHVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE9NQUFUTkUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iTcOkcmd1YW5kZWQgaWxtdXZhZCBzaWlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iSnV1cmRlcMOkw6RzIGlnYWwgYWphbCBzw7VybWVnYSBhbGxhIHDDvGhraWRlcy5cblPDvHN0ZWVtaSBqdWh0bnVwcHVkZSBqYW9rcyBww7xoa2lnZSB1dWVzdGkgYWxsYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJSaWJhIGt1dmFtaXNla3MgcMO8aGtpZ2UgZWtyYWFuaSBzZXJ2YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iU8O8c3RlZW1pcmliYSBrdXZhbWlzZWtzIHDDvGhraWdlIGVrcmFhbmkgc2VydmFzdCI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKaW5kZXggYjA5NTUxOS4uZjBlNjEzMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+Itix2K8g2qnYsdiv2YYg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINin2K7bjNixIjwvc3RyaW5nPgogICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgogICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4iMSDYqNix2YbYp9mF2Ycg2KfYrtuM2LEiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCDYqNix2YbYp9mF2YfigIwg2KfYrtuM2LEiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiLigI8lZCDYqNix2YbYp9mF2YfigIwg2KfYrtuM2LEiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4i2KfYudmE2KfZhtuMINmF2YjYrNmI2K8g2YbbjNiz2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+Itiv2LEg2K3Yp9mEINin2YbYrNin2YUiPC9zdHJpbmc+CkBAIC0zNSw3ICszNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiLYtNin2LHamNixINix2Kcg2YXYqti12YQg2qnZhtuM2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiLYqNin2KrYsduMINiv2LEg2K3Yp9mEINqp2YUg2LTYr9mGINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiDYqNin2YLbjNmF2KfZhtiv2Ycg2KfYs9iqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+Iti02KfYsdqYIFVTQiDZvti02KrbjNio2KfZhtuMINmG2YXbjOKAjNi02YjYry5cbtmB2YLYtyDYp9iyINi02KfYsdqY2LEg2KfYsdin2KbZhyDYtNiv2Ycg2KfYs9iq2YHYp9iv2Ycg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IuKAj9i02KfYsdqYIFVTQiDZvti02KrbjNio2KfZhtuMINmG2YXbjOKAjNi02YjYry5cbtmB2YLYtyDYp9iyINi02KfYsdqY2LEg2KfYsdin2KbZhyDYtNiv2Ycg2KfYs9iq2YHYp9iv2Ycg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+Itin2LPYqtmB2KfYr9mHINin2LIg2KjYp9iq2LHbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+Itiq2YbYuNuM2YXYp9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiJXaS1GaSI8L3N0cmluZz4KQEAgLTQ3LDIyICs0NywyMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+Itin2KrYtdin2YQg2KfbjNmG2KrYsdmG2KrbjCDYqNinINio2YTZiNiq2YjYqyDYqtmE2YHZhiDZh9mF2LHYp9mHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4i2KrZhti424zZhSDYsdmI2LTigIzZh9in24wg2YjYsdmI2K/bjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+Iti12YHYrdmH4oCM2qnZhNuM2K8g2YHbjNiy24zaqduMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+Itio2Ycg2KjYsdmG2KfZhdmHIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g2KfYrNin2LLZhyDZhduM4oCM2K/Zh9uM2K8g2KjZhyDYr9iz2Krar9in2YcgVVNCINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNiv2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+Itio2Ycg2KjYsdmG2KfZhdmHIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g2KfYrNin2LLZhyDZhduM4oCM2K/Zh9ivINiq2Kcg2KjZhyDZiNiz24zZhNmHINis2KfZhtio24wgVVNCINiv2LPYqtix2LPbjCDYr9in2LTYqtmHINio2KfYtNiv2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+ItmI2YLYqtuMINin24zZhiDYr9iz2Krar9in2YcgVVNCINmI2LXZhCDYp9iz2KrYjCA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+INio2KfYsiDYtNmI2K/YnyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4i2YjZgtiq24wg2KfbjNmGINmI2LPbjNmE2Ycg2KzYp9mG2KjbjCBVU0Ig2YjYtdmEINin2LPYqtiMIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g2KjYp9iyINi02YjYr9ifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i2YfbjNqGINio2LHZhtin2YXZh9mUINqp2KfYsdio2LHYr9uMINmG2LXYqCDYtNiv2YfigIzYp9uMINio2Kcg2KfbjNmGINmI2LPbjNmE2Ycg2KzYp9mG2KjbjCBVU0Ig2qnYp9ixINmG2YXbjOKAjNqp2YbYry4g2K/YsSA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiDYr9ix2KjYp9ix2YfZlCDYp9uM2YYg2YjYs9uM2YTZhyDYrNin2YbYqNuMINin2LfZhNin2LnYp9iqINio24zYtNiq2LHbjCDaqdiz2Kgg2qnZhtuM2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+ItmE2YjYp9iy2YUg2KzYp9mG2KjbjCBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4i4oCP2KjZhyDYqNix2YbYp9mF2YcgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDYp9is2KfYstmHINmF24zigIzYr9mH24zYryDYqNmHINiv2LPYqtqv2KfZhyBVU0Ig2K/Ys9iq2LHYs9uMINiv2KfYtNiq2Ycg2KjYp9i02K/YnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4i4oCP2KjZhyDYqNix2YbYp9mF2YcgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDYp9is2KfYstmHINmF24zigIzYr9mH2K8g2KrYpyDYqNmHINmI2LPbjNmE2Ycg2KzYp9mG2KjbjCBVU0Ig2K/Ys9iq2LHYs9uMINiv2KfYtNiq2Ycg2KjYp9i02K/YnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4i4oCP2YjZgtiq24wg2KfbjNmGINiv2LPYqtqv2KfZhyBVU0Ig2YjYtdmEINin2LPYqtiMIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g2KjYp9iyINi02YjYr9ifIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLigI/ZiNmC2KrbjCDYp9uM2YYg2YjYs9uM2YTZhyDYrNin2YbYqNuMIFVTQiDZiNi12YQg2KfYs9iq2IwgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDYqNin2LIg2LTZiNiv2J8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiLigI/Zh9uM2oYg2KjYsdmG2KfZhdmH2ZQg2qnYp9ix2KjYsdiv24wg2YbYtdioINi02K/Zh+KAjNin24wg2KjYpyDYp9uM2YYg2YjYs9uM2YTZhyDYrNin2YbYqNuMIFVTQiDaqdin2LEg2YbZhduM4oCM2qnZhtivLiDYr9ixIDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+INiv2LHYqNin2LHZh9mUINin24zZhiDZiNiz24zZhNmHINis2KfZhtio24wg2KfYt9mE2KfYudin2Kog2KjbjNi02KrYsduMINqp2LPYqCDaqdmG24zYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4i4oCP2YTZiNin2LLZhSDYrNin2YbYqNuMIFVTQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4i2YXYtNin2YfYr9mHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4i2KfYs9iq2YHYp9iv2Ycg2KjZhyDYtdmI2LHYqiDZvtuM2LTigIzZgdix2LYg2KjYsdin24wg2KfbjNmGINiv2LPYqtqv2KfZhyBVU0IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiLYp9iz2KrZgdin2K/ZhyDYqNmHINi12YjYsdiqINm+24zYtOKAjNmB2LHYtiDYqNix2KfbjCDYp9uM2YYg2K/Ys9iq2q/Yp9mHIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4i2KfYrNin2LLZhyDYqNmHINin2LTaqdin2YTigIzYstiv2KfbjNuMIFVTQtifIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+Itin2KvYsSDYp9mG2q/YtNiqINqp2YTbjNivIFJTQSDYsdin24zYp9mG2Yc6IFxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IuKAj9in2LPYqtmB2KfYr9mHINio2Ycg2LXZiNix2Kog2b7bjNi04oCM2YHYsdi2INio2LHYp9uMINin24zZhiDYr9iz2Krar9in2YcgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4i4oCP2KfYs9iq2YHYp9iv2Ycg2KjZhyDYtdmI2LHYqiDZvtuM2LTigIzZgdix2LYg2KjYsdin24wg2KfbjNmGINiv2LPYqtqv2KfZhyBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IuKAj9in2KzYp9iy2Ycg2KjZhyDYp9i02qnYp9mE4oCM2LLYr9in24zbjCBVU0LYnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiLigI/Yp9ir2LEg2KfZhtqv2LTYqiDaqdmE24zYryBSU0Eg2LHYp9uM2KfZhtmHOiBcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+ItmH2YXbjNi02Ycg2KfYsiDYp9uM2YYg2LHYp9uM2KfZhtmHINin2YbYrNin2YUg2LTZiNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i2KjYstix2q/ZhtmF2KfbjNuMINio2LHYp9uMINm+2LEg2qnYsdiv2YYg2LXZgdit2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i2q/Ys9iq2LHYr9mHINqp2LHYr9mGINio2LHYp9uMINm+2LEg2qnYsdiv2YYg2LXZgdit2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLYqNiy2LHar9mG2YXYp9uM24wg2LPYp9iy2q/Yp9ix24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i2Kfar9ixINuM2qkg2KjYsdmG2KfZhdmHINio2LHYp9uMINi12YHYrdmHINqp2YjahtqpINiq2LHbjCDYt9ix2KfYrduMINi02K/ZhyDYqNin2LTYr9iMINuM2qkg2qnZhtiq2LHZhCDYqNiy2LHar9mG2YXYp9uM24wg2KrZiNiz2Lcg2LPYp9i52Kog2YbYtNin2YYg2K/Yp9iv2Ycg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i2K/YsSDYrdin2YQg2LDYrtuM2LHZhyDYqti12YjbjNixINi12YHYrdmHLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i2K/YsSDYrdin2YQg2LDYrtuM2LHZhyDYqti12YjbjNixINi12YHYrdmHLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLYqti12YjbjNixINi12YHYrdmHINiw2K7bjNix2Ycg2LTYry4iPC9zdHJpbmc+CkBAIC03MCwxNCArNjgsMTYgQEAKICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiLYqNix2KfbjCDZhdi02KfZh9iv2Ycg2KrYtdmI24zYsSDYtdmB2K3ZhyDYrtmI2K/YjCDZhNmF2LMg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiLYqti12YjbjNixINi12YHYrdmHINqv2LHZgdiq2Ycg2YbYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4i2KrYtdmI24zYsSDYtdmB2K3ZhyDYsNiu24zYsdmHINmG2LTYry4g2YXZhdqp2YYg2KfYs9iqINiv2LPYqtqv2KfZhyDYsNiu24zYsdmH4oCMINiv2LEg2K3Yp9mEINin2LPYqtmB2KfYr9mHINio2KfYtNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+Itqv2LLbjNmG2YfigIzZh9in24wg2KfZhtiq2YLYp9mEINmB2KfbjNmEIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+ItmG2LXYqCDYqNmH4oCM2LnZhtmI2KfZhiDYr9iz2Krar9in2Ycg2b7Yrti0INix2LPYp9mG2YcgKE1UUCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLYqti12Kgg2KjZh+KAjNi52YbZiNin2YYg2K/ZiNix2KjbjNmGIChQVFApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLYqNix2YbYp9mF2YcgQW5kcm9pZCBGaWxlIFRyYW5zZmVyINix2Kcg2KjYsdin24wgTWFjINmG2LXYqCDaqdmG24zYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IuKAj9qv2LLbjNmG2YfigIzZh9in24wg2KfZhtiq2YLYp9mEINmB2KfbjNmEIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+IuKAj9mG2LXYqCDYqNmH4oCM2LnZhtmI2KfZhiDYr9iz2Krar9in2Ycg2b7Yrti0INix2LPYp9mG2YcgKE1UUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLigI/Yqti12Kgg2KjZh+KAjNi52YbZiNin2YYg2K/ZiNix2KjbjNmGIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLigI/YqNix2YbYp9mF2YcgQW5kcm9pZCBGaWxlIFRyYW5zZmVyINix2Kcg2KjYsdin24wgTWFjINmG2LXYqCDaqdmG24zYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+Itio2LHar9i02KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i2LXZgdit2YfZlCDYp9i12YTbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+ItmF2YbZiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+Itio2LHZhtin2YXZh+KAjNmH2KfbjCDYp9iu24zYsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+Itis2LPYqtis2YgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4i2K/ZiNix2KjbjNmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLaqdmE24zYryDYqti624zbjNixINix2YjYtCDZiNix2YjYryDZhdiq2YYuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+Itiv2qnZhdmHINio2LLYsdqv2YbZhdin24zbjCDYs9in2LLar9in2LEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLYqNiy2LHar9mG2YXYp9uM24wg2KfYsiDYtdmB2K3Zh+KAjNmH2KfbjCDaqdmI2obaqSDYqtinINio2LLYsdqvLiI8L3N0cmluZz4KQEAgLTk4LDE3ICs5OCwxNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+Itiv2Ygg2YbZiNin2LEg2KjYsdin24wg2K/Yp9iv2YcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4i2LPZhyDZhtmI2KfYsSDYqNix2KfbjCDYr9in2K/Zhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4i2YLYr9ix2Kog2LPbjNqv2YbYp9mEINiv2KfYr9mHINqp2KfZhdmEINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+Ildp4oCRRmkg2K7Yp9mF2YjYtC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2ktRmkg2YLYt9i54oCM2LTYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiLbjNqpINmG2YjYp9ixINio2LHYp9uMIFdp4oCRRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+Itiv2Ygg2YbZiNin2LEg2KjYsdin24wgV2nigJFGaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiLYs9mHINmG2YjYp9ixINio2LHYp9uMIFdp4oCRRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+ItmC2K/YsdiqINiz24zar9mG2KfZhCBXaeKAkUZpINqp2KfZhdmEINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+IldpTUFYINmI2KzZiNivINmG2K/Yp9ix2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYINiv2KfYsdin24wg24zaqSDZhtmI2KfYsSDYp9iz2KouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJXaU1BWCDYr9in2LHYp9uMINiv2Ygg2YbZiNin2LEg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWCDYr9in2LHYp9uMINiz2Ycg2YbZiNin2LEg2KfYs9iqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4i2YLYr9ix2Kog2LPbjNqv2YbYp9mEIFdpTUFYINqp2KfZhdmEINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IuKAj1dp4oCRRmkg2K7Yp9mF2YjYtC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4i4oCPV2ktRmkg2YLYt9i54oCM2LTYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiLigI/bjNqpINmG2YjYp9ixINio2LHYp9uMIFdp4oCRRmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IuKAj9iv2Ygg2YbZiNin2LEg2KjYsdin24wgV2nigJFGaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiLigI/Ys9mHINmG2YjYp9ixINio2LHYp9uMIFdp4oCRRmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IuKAj9mC2K/YsdiqINiz24zar9mG2KfZhCBXaeKAkUZpINqp2KfZhdmEINin2LPYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+IuKAj1dpTUFYINmI2KzZiNivINmG2K/Yp9ix2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IuKAj1dpTUFYINiv2KfYsdin24wg24zaqSDZhtmI2KfYsSDYp9iz2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiLigI9XaU1BWCDYr9in2LHYp9uMINiv2Ygg2YbZiNin2LEg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiLigI9XaU1BWCDYr9in2LHYp9uMINiz2Ycg2YbZiNin2LEg2KfYs9iqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4i4oCP2YLYr9ix2Kog2LPbjNqv2YbYp9mEIFdpTUFYINqp2KfZhdmEINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiLZgdin2YLYryDYs9uM2q/Zhtin2YQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+ItmF2KrYtdmEINmG24zYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+Itio2K/ZiNmGINmF24zZhNmHLiI8L3N0cmluZz4KQEAgLTEzNyw5ICsxMzcsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiLYqtmG2LjbjNmF2KfYqiDYs9uM2LPYqtmFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4i2KfYudmE2KfZhuKAjNmH2KcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+Itm+2KfaqSDaqdix2K/ZhiDYp9i52YTYp9mGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMg2YHYudin2YQg2LTYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4i2K/Ys9iq24zYp9io24wg2KjZhyBHUFMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiJUZWxlVHlwZXdyaXRlciDZgdi52KfZhCDYtNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4i4oCPR1BTINmB2LnYp9mEINi02K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IuKAj9iv2LPYqtuM2KfYqNuMINio2YcgR1BTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4i4oCPVGVsZVR5cGV3cml0ZXIg2YHYudin2YQg2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl92aWJyYXRlIiBtc2dpZD0iNjY2NTg1MzYzMzY0MTU1MDU1Ij4i2LLZhtqvINmE2LHYsti024wuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+Itiy2YbaryDYqNuM4oCM2LXYr9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g2YbYp9iv24zYr9mHINqv2LHZgdiq2Ycg2LTYry4iPC9zdHJpbmc+CkBAIC0xNTMsMjMgKzE1MywyNSBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+Itio2KfYqtix24wgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLYrdin2YTYqiDZh9mI2KfZvtuM2YXYpyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiLYqNmE2YjYqtmI2KsgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLZhdqp2KfZhiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+ItmH2LTYr9in2LEg2KjYsdin24wgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPiDYqtmG2LjbjNmFINi02K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4i2K/Yp9iv2YcgMkctM0cg2LrbjNix2YHYudin2YQg2LTYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+Itiv2KfYr9mHIDRHINi624zYsSDZgdi52KfZhCDYtNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4i4oCP2K/Yp9iv2YcgMkctM0cg2LrbjNix2YHYudin2YQg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IuKAj9iv2KfYr9mHIDRHINi624zYsSDZgdi52KfZhCDYtNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+Itiv2KfYr9mH4oCM2YfYp9uMINiq2YTZgdmGINmH2YXYsdin2Ycg2LrbjNix2YHYudin2YQg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIyMDg2ODE1MzA0ODU4OTY0OTU0Ij4i2K/Yp9iv2Ycg2LrbjNix2YHYudin2YQg2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+Itio2Ycg2K3Yr9in2qnYq9ixINmF2K3Yr9mI2K/ZhyDZhdi02K7YtSDYtNiv2Ycg2KjYsdin24wg2KfYs9iq2YHYp9iv2Ycg2KfYsiDYr9in2K/ZhyDYsdiz24zYr9mH4oCM2KfbjNivLlxuXG7Yr9ixINi12YjYsdiqINmB2LnYp9mEINqp2LHYr9mGINmF2KzYr9ivINiv2KfYr9mH2Iwg2YXZhdqp2YYg2KfYs9iqINin2LIg2LfYsdmBINin2b7Ysdin2KrZiNixINio2LHYp9uMINi02YXYpyDZh9iy24zZhtmHINmF2K3Yp9iz2KjZhyDYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfZW5hYmxlIiBtc2dpZD0iNzcyOTc3MjAzOTIwODY2NDYwNiI+ItmB2LnYp9mEINqp2LHYr9mGINmF2KzYr9ivINiv2KfYr9mHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+Itin2KrYtdin2YQg2KfbjNmG2KrYsdmG2KrbjCDZiNis2YjYryDZhtiv2KfYsdivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg2YXYqti12YQg2LTYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i2KzYs9iq2KzZiCDYqNix2KfbjCBHUFMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i2YXaqdin2YYg2KrZhti424zZhSDYtNiv2Ycg2KrZiNiz2LcgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4i4oCPV2ktRmkg2YXYqti12YQg2LTYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i4oCP2KzYs9iq2KzZiCDYqNix2KfbjCBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i4oCP2YXaqdin2YYg2KrZhti424zZhSDYtNiv2Ycg2KrZiNiz2LcgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i2K/Ysdiu2YjYp9iz2KrigIzZh9in24wg2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2YHYudin2YQg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i2b7Yp9qpINqp2LHYr9mGINiq2YXYp9mFINin2LnZhNin2YbigIzZh9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+Itin2LfZhNin2LnYp9iqINio2LHZhtin2YXZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i2LXZgdit2Ycg2KjZhyDYtdmI2LHYqiDYrtmI2K/aqdin2LEg2YXbjOKAjNqG2LHYrtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i2LXZgdit2Ycg2KfaqdmG2YjZhiDYr9ixINis2YfYqiDYp9mB2YLbjCDZgtmB2YQg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLYtdmB2K3ZhyDYp9qp2YbZiNmGINiv2LEg2KzZh9iqINi52YXZiNiv24wg2YLZgdmEINin2LPYqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4i2YjbjNiq2LHbjNmGINiv2LPYsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLYsdmI24zYp9m+2LHYr9in2LLbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+Itin2KrYsdmG2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+Itit2KfZhNiqINmH2YjYp9m+24zZhdinIjwvc3RyaW5nPgpAQCAtMTgyLDEwICsxODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLahtix2K7YtCDYrtmI2K/aqdin2LEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i2obYsdiu2LQg2YLZgdmEINi02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i2LHZiNi0INmI2LHZiNiv24wiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwgKDUwMTEzMjcwNDg3NDg3NjIyNTcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsICg3NDY0NTQ0MDg2NTA3MzMxNDU5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4i2YXaqdin2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i2YXaqdin2YYg2K7Yp9mF2YjYtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiLYr9iz2Krar9in2Ycg2LHYs9in2YbZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4i2YHZgti3INiq2YXYp9iz4oCM2YfYp9uMINin2LbYt9ix2KfYsduMIjwvc3RyaW5nPgpAQCAtMTk1LDEzICsxOTUsMTUgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i2YXYqti12YQg2YbbjNiz2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i2LTYqNqp2YfigIzYp9uMINmF2YjYrNmI2K8g2YbbjNiz2KoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSDYrtin2YXZiNi0INin2LPYqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaS1GaSBEaXNwbGF5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4i2YbZhdin24zYtCDYqNiv2YjZhiDYs9uM2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiLigI9XaS1GaSDYrtin2YXZiNi0INin2LPYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLZgdix2LPYqtin2K/ZhiDYtdmB2K3ZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+Itix2YjYtNmG2KfbjNuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+Itiu2YjYr9qp2KfYsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiLYp9i52YTYp9mG4oCM2YfYpyDYr9ixINin24zZhtis2Kcg2YbZhdin24zYtCDYr9in2K/ZhyDZhduM4oCM2LTZiNmG2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiLYqNinINqp2LTbjNiv2YYg2KfZhtqv2LTYqiDYqNmHINi32LHZgSDZvtin24zbjNmGINio2Ycg2KLZhtmH2Kcg2K/Ys9iq2LHYs9uMINm+24zYr9inINqp2YbbjNivLlxu2KjYsdin24wg2qnZhtiq2LHZhOKAjNmH2KfbjCDYs9uM2LPYqtmFINiv2YjYqNin2LHZhyDYp9mG2q/YtNiqINiu2YjYryDYsdinINio2Ycg2LPZhdiqINm+2KfbjNuM2YYg2Kjaqdi024zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLYqNix2KfbjCDZhtmF2KfbjNi0INmG2YjYp9ix2Iwg2KfZhtqv2LTYqiDYrtmI2K8g2LHYp8Kg2KfYsiDZhNio2YfigIwg2LXZgdit2Ycg2KjZhyDYr9in2K7ZhCDYqNqp2LTbjNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiLYqNix2KfbjCDZhtmF2KfbjNi0INmG2YjYp9ixINiz24zYs9iq2YXYjCDYp9mG2q/YtNiqINiu2YjYryDYsdinINin2LIg2YTYqNmH4oCMINi12YHYrdmHINio2Ycg2K/Yp9iu2YQg2Kjaqdi024zYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLYrdin2YTYqiDZiNin2LHZiNmG2q/bjCDYsdmG2q8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLYrdin2YTYqiDaqdmG2KrYsdin2LPYqiDYqNmH2KjZiNiv24zYp9mB2KrZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4i2K3Yp9mE2Kog2KrYtdit24zYrSDYsdmG2q8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+ItmF2YXaqdmGINin2LPYqiDYtNio2qnZh1xu2KrYrdiqINmG2LjYp9ix2Kog2KjYp9i02K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Itis2LPYqtis2YgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i2YTYutiy2KfZhtiv2YYg2KjZhyDYqNin2YTYpyDYqNix2KfbjCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i2YTYutiy2KfZhtiv2YYg2KjZhyDahtm+INio2LHYp9uMIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCmluZGV4IDA2ZTE5MjYuLjhkNGIxNGQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJTYWxsaSBhaW5hIHTDpGxsw6QgdGlldG9rb25lZWxsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilpvb21hYSBrb2tvIG7DpHl0dMO2w7ZuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IlZlbnl0w6Qga29rbyBuw6R5dHTDtsO2biI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IllodGVlbnNvcGl2dXVzem9vbWF1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJKb3Mgc292ZWxsdXMgb24gc3V1bm5pdGVsdHUgcGllbmVtbcOkbGxlIG7DpHl0w7ZsbGUsIGtlbGxvbiB2aWVyZWVuIHR1bGVlIG7DpGt5dmlpbiB6b29tYXVzc8Okw6RkaW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IlRhbGxlbm5ldGFhbiBrdXZha2FhcHBhdXN0YS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlRhbGxlbm5ldGFhbiBrdXZha2FhcHBhdXN0YS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iS3V2YWthYXBwYXVzdGEgdGFsbGVubmV0YWFuLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJBbG9pdHVzcGFpbmlrZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+IlZhbGlra28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJWaWltZWFpa2Fpc2V0IHNvdmVsbHVrc2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iSGFrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJLYW1lcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IlN5w7Z0dMO2dGF2YW4gdmFpaHRvcGFpbmlrZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iWWh0ZWVuc29waXZ1dXN6b29tYXVzLXBhaW5pa2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJab29tYWEgcGllbmVtbcOkbHTDpCBzdXVyZW1tYWxsZSBydXVkdWxsZS4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJBa2t1OiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IkxlbnRva29uZXRpbGEgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IlNpamFpbnRpIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iSMOkbHl0eXMgYXNldGV0dHUsIGFpa2E6IDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0ctdGllZG9uc2lpcnRvIHBvaXMga8OkeXTDtnN0w6QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0Ry10aWVkb25zaWlydG8gcG9pcyBrw6R5dMO2c3TDpCI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaWZpIHloZGlzdGV0dHkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkhhZXRhYW4gR1BTLXlodGV5dHTDpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJTaWphaW50aSBtw6TDpHJpdGV0dHkgR1BTOm4gYXZ1bGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iU2lqYWludGlweXlubsO2dCBha3RpaXZpc2V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iVHloamVubsOkIGthaWtraSBpbG1vaXR1a3NldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iU292ZWxsdWtzZW4gdGllZG90Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJSdXV0dSBrw6TDpG50eXkgYXV0b21hYXR0aXNlc3RpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iUnV1dHUgb24gbHVraXR0dSB2YWFrYXN1dW50YWFuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJSdXV0dSBvbiBsdWtpdHR1IHB5c3R5c3V1bnRhYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IkrDpGxraXJ1b2thdml0cmlpbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iVW5lbG1hdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJMZW50b2tvbmV0aWxhIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJFaSB5aHRleXR0w6QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iRWkgdmVya2tvYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpZmkteWh0ZXlzIHBvaXMga8OkeXTDtnN0w6QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2lmaS1uw6R5dHTDtiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IkxhbmdhdG9uIG7DpHl0dMO2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IkzDpGhldHlzbsOkeXR0w7YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJLaXJra2F1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IklsbW9pdHVrc2V0IG7DpGt5dsOkdCB0w6Rzc8OkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iTsOkZXQgaWxtb2l0dWtzZXQgbGl1XCd1dHRhbWFsbGEgc29ybWVhIGFsYXMgcnV1ZHVsbGEuXG5Wb2l0IHBhbGF1dHRhYSBqw6RyamVzdGVsbcOkbiBvaGphaW1ldCBuw6RreXZpaW4gbGl1XCd1dHRhbWFsbGEgc29ybWVhIGFsYXMgdXVkZWxsZWVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IlR1byBwYWxra2kgbsOka3l2aWluIGxpdVwndXR0YW1hbGxhIHJ1dWR1biByZXVuYXN0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iVHVvIGrDpHJqZXN0ZWxtw6RwYWxra2kgbsOka3l2aWluIGxpdVwndXR0YW1hbGxhIHJ1dWR1biByZXVuYXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJLw6TDpG50ZWluZW4gdsOkcml0aWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iS29udHJhc3RpbnBhcmFubnVzdGlsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iVsOkcmlua29yamF1c3RpbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IlZlcmtrb2Egc2FhdGV0YWFuXG52YWx2b2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Ikhha3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iTGl1XCd1dGEgeWzDtnMgamEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkxpdVwndXRhIHZhc2VtbWFsbGUgamEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mci1yQ0EtbGFuZC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnItckNBLWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc3NWZjNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnItckNBLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IkxcJ8OpY3JhbiBlc3QgZMOpc29ybWFpcyB2ZXJyb3VpbGzDqSBhdSBmb3JtYXQgcGF5c2FnZS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjZjMyMgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4iSVUgc3lzdMOobWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4iRWZmYWNlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+IlN1cHByaW1lciBkZSBsYSBsaXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiJJbmZvcm1hdGlvbnMgc3VyIGxcJ2FwcGxpY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiJBdWN1bmUgYXBwbGljYXRpb24gcsOpY2VudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+Ik1hc3F1ZXIgbGVzIGFwcGxpY2F0aW9ucyByw6ljZW50ZXMiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9yZWNlbnRfYXBwcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiIxwqBhcHBsaWNhdGlvbiByw6ljZW50ZSI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTA0MDc4NDM1OTc5NDg5MDc0NCI+IiVkwqBhcHBsaWNhdGlvbnMgcsOpY2VudGVzIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+IkF1Y3VuZSBub3RpZmljYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+IkVuIGNvdXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+Ik5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiJCcmFuY2hlciBsZSBjaGFyZ2V1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+IkxlIG5pdmVhdSBkZSBsYSBiYXR0ZXJpZSBlc3QgZmFpYmxlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkJSU8L3hsaWZmOmc+IHJlc3RhbnQocykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4iQ2hhcmdlbWVudCBVU0Igbm9uIGNvbXBhdGlibGUuXG5Wb3VzIGRldmV6IHV0aWxpc2VyIGxlIGNoYXJnZXVyIGZvdXJuaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4iVXRpbGlzYXRpb24gZGUgbGEgYmF0dGVyaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiJQYXJhbcOodHJlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+Ik1vZGUgQXZpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4iUm90YXRpb24gYXV0byBkZSBsXCfDqWNyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiJNVUVUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiJBVVRPTUFUSVFVRSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+Ik5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4iQ29ubmV4aW9uIEJsdWV0b290aCBwYXJ0YWfDqWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2lucHV0X21ldGhvZF9zZXR0aW5nc19jb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjM1MDQyOTI0NzE1MTIzMTc4MjciPiJDb25maWd1cmVyIGxlcyBtb2RlcyBkZSBzYWlzaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiJDbGF2aWVyIHBoeXNpcXVlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+IkF1dG9yaXNlciBsXCdhcHBsaWNhdGlvbiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IMOgIGFjY8OpZGVyIGF1IHDDqXJpcGjDqXJpcXVlIFVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IkF1dG9yaXNlciBsXCdhcHBsaWNhdGlvbiA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IMOgIGFjY8OpZGVyIMOgIGxcJ2FjY2Vzc29pcmUgVVNCPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4iT3V2cmlyIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4gbG9ycyBkZSBsYSBjb25uZXhpb24gZGUgY2UgcMOpcmlwaMOpcmlxdWUgVVNCPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4iT3V2cmlyIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4gbG9ycyBkZSBsYSBjb25uZXhpb24gZGUgY2V0IGFjY2Vzc29pcmUgVVNCPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IkF1Y3VuZSBhcHBsaWNhdGlvbiBpbnN0YWxsw6llIGNvbXBhdGlibGUgYXZlYyBhY2Nlc3NvaXJlIFVTQi4gRW4gc2F2b2lyIHBsdXMgc3VyIDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiJBY2Nlc3NvaXJlIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4iQWZmaWNoZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiJVdGlsaXNlciBwYXIgZMOpZmF1dCBwb3VyIGNlIHDDqXJpcGjDqXJpcXVlIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IlV0aWxpc2VyIHBhciBkw6lmYXV0IHBvdXIgY2V0IGFjY2Vzc29pcmUgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ190aXRsZSIgbXNnaWQ9IjQ1MTM5MTgzOTMzODcxNDE5NDkiPiJBdXRvcmlzZXIgbGUgZMOpYm9nYWdlIFVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4iRW1wcmVpbnRlIG51bcOpcmlxdWUgZGUgbGEgY2zDqSBSU0EgZGUgbFwnb3JkaW5hdGV1csKgOiBcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlRvdWpvdXJzIGF1dG9yaXNlciBzdXIgY2V0IG9yZGluYXRldXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJab29tZXIgcG91ciByZW1wbGlyIGxcJ8OpY3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLDiXRpcmVyIHBvdXIgcmVtcGxpciBsXCfDqWNyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iRW5yZWdpc3RyZW1lbnQgY2FwdHVyZSDDqWNyYW7igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJFbnJlZ2lzdHJlbWVudCBjYXB0dXJlIMOpY3JhbuKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iRW5yZWdpc3RyZW1lbnQgZGUgbGEgY2FwdHVyZSBkXCfDqWNyYW4gZW4gY291cnPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IkNhcHR1cmUgZFwnw6ljcmFuIHLDqXVzc2llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+IkFwcHV5ZXogcG91ciBhZmZpY2hlciB2b3RyZSBjYXB0dXJlIGRcJ8OpY3Jhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90aXRsZSIgbXNnaWQ9IjcwNTc4MTExNjc0NjkyMjc3MSI+IkltcG9zc2libGUgZGUgcsOpYWxpc2VyIHVuZSBjYXB0dXJlIGRcJ8OpY3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4iSW1wb3NzaWJsZSBlbnJlZ2lzdHJlciBjYXB0dXJlIGRcJ8OpY3Jhbi4gUMOpcmlwaMOpcmlxdWUgZGUgc3RvY2thZ2UgcGV1dC3DqnRyZSBlbiBjb3VycyBkXCd1dGlsaXNhdGlvbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiJPcHRpb25zIHRyYW5zZmVydCBmaWNoaWVycyBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiJJbnN0YWxsZXIgY29tbWUgdW4gbGVjdGV1ciBtdWx0aW3DqWRpYSAoTVRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+Ikluc3RhbGxlciBjb21tZSB1biBhcHBhcmVpbCBwaG90byAoUFRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4iSW5zdGFsbGVyIGFwcGxpY2F0aW9uIEFuZHJvaWTCoEZpbGXCoFRyYW5zZmVyIChNYWMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4iUHLDqWPDqWRlbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iRG9taWNpbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW51Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iQXBwbGljYXRpb25zIHLDqWNlbnRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IlJlY2hlcmNoZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iQXBwYXJlaWwgcGhvdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IkJvdXRvbiBcIkNoYW5nZXIgbGUgbW9kZSBkZSBzYWlzaWVcIiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJCb3V0b24gXCJab29tIGRlIGNvbXBhdGliaWxpdMOpXCIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Ilpvb20gZGUgY29tcGF0aWJpbGl0w6kgYXZlYyBsYSB0YWlsbGUgZGUgbFwnw6ljcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfY29ubmVjdGVkIiBtc2dpZD0iMjcwNzAyNzYzMzI0Mjk4MzM3MCI+IkJsdWV0b290aCBjb25uZWN0w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4iQmx1ZXRvb3RoIGTDqWNvbm5lY3TDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+IkJhdHRlcmllIHZpZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiJOaXZlYXUgZGUgYmF0dGVyaWXCoDogZmFpYmxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+Ik5pdmVhdSBkZSBiYXR0ZXJpZcKgOiBtb3llbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90aHJlZV9iYXJzIiBtc2dpZD0iMjMwMjk4MzMzMDg2NTA0MDQ0NiI+Ik5pdmVhdSBkZSBiYXR0ZXJpZcKgOiBib24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfZnVsbCIgbXNnaWQ9Ijg5MDkxMjI0MDE3MjAxNTg1ODIiPiJCYXR0ZXJpZSBwbGVpbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3Bob25lIiBtc2dpZD0iNDg5NDcwODkzNzA1MjYxMTI4MSI+IkF1Y3VuIHNpZ25hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+IlNpZ25hbMKgOiBmYWlibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+IlNpZ25hbMKgOiBtb3llbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiJTaWduYWzCoDogYm9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY0NzE4MzQ4Njg1ODA3NTc4OTgiPiJTaWduYWwgZXhjZWxsZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+IkF1Y3VuIHNpZ25hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9vbmVfYmFyIiBtc2dpZD0iMTQxNTYyNTgzMzIzODI3MzYyOCI+IlNpZ25hbCBmYWlibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdHdvX2JhcnMiIG1zZ2lkPSI2MTY2MDE4NDkyMzYwNDMyMDkxIj4iU2lnbmFsIG1veWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4iU2lnbmFsIGJvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiJTaWduYWwgZXhjZWxsZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiJXaS1GaSBkw6lzYWN0aXbDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2lmaSIgbXNnaWQ9IjE0MjU0NzY1NTE4Mjc5MjQ0NzQiPiJXaS1GaSBkw6ljb25uZWN0w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiJTaWduYWwgV2ktRmkgZmFpYmxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IlNpZ25hbCBXaS1GaSBtb3llbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+IlNpZ25hbCBXaS1GaSBib24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2ODUzNTYxMzAzNTg2NDgwMzc2Ij4iU2lnbmFsIFdpLUZpIGV4Y2VsbGVudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iQXVjdW4gc2lnbmFsIFdpTUFYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IlNpZ25hbCBXaU1BWMKgOiBmYWlibGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IlNpZ25hbCBXaU1BWMKgOiBtb3llbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJTaWduYWwgV2lNQVjCoDogYm9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3NjgwODk5ODY3OTU1Nzk1NTgiPiJTaWduYWwgV2lNQVggOiBleGNlbGxlbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiJBdWN1biBzaWduYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4iTm9uIGNvbm5lY3TDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+IkF1Y3VuIHNpZ25hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfb25lX2JhciIgbXNnaWQ9IjE2ODU3MzAxMTMxOTIwODE4OTUiPiJTaWduYWwgZmFpYmxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90d29fYmFycyIgbXNnaWQ9IjY0MzczNjM2NDgzODUyMDY2NzkiPiJNb3llbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdGhyZWVfYmFycyIgbXNnaWQ9IjI2NDgyNDE0MTUxMTkzOTY2NDgiPiJCb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+IlNpZ25hbCBleGNlbGxlbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb24iIG1zZ2lkPSIyMzg1MjU0NjkzNjI0MzQ1MjY1Ij4iQWN0aXbDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4iRMOpc2FjdGl2w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IkNvbm5lY3TDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2dwcnMiIG1zZ2lkPSIxNjA2NDc3MjI0NDg2NzQ3NzUxIj4iR1BSUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzF4IiBtc2dpZD0iOTk0MTMzNDY4MTIwMjQ0MDE4Ij4iMXgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IjNHKyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzRysiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl80ZyIgbXNnaWQ9Ijc3NDEwMDA3NTA2MzAwODk2MTIiPiI0RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2x0ZSIgbXNnaWQ9IjU0MTM0Njg4MDg2Mzc1NDA2NTgiPiJMVEUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9jZG1hIiBtc2dpZD0iNjEzMjY0ODE5Mzk3ODgyMzAyMyI+IkNETUEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9yb2FtaW5nIiBtc2dpZD0iNTk3NzM2MjMzMzQ2NjU1NjA5NCI+Ikl0aW7DqXJhbmNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFREdFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IkF1Y3VuZSBjYXJ0ZSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4iUGFydGFnZSBkZSBjb25uZXhpb24gQmx1ZXRvb3RoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4iTW9kZSBBdmlvbiI8L3N0cmluZz4KKyAgICA8IS0tIFN0cmluZy5mb3JtYXQgZmFpbGVkIGZvciB0cmFuc2xhdGlvbiAtLT4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwgKDc0NTE0NzQxODcxMTMzNzE5NjUpIC0tPgorICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+IlBhcmFtw6h0cmVzIHN5c3TDqG1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiJOb3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IlN1cHByaW1lciBsYSBub3RpZmljYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+IkdQUyBhY3RpdsOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IkFjcXVpc2l0aW9uIGRlIGRvbm7DqWVzIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4iVMOpbMOpc2NyaXB0ZXVyIGFjdGl2w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl92aWJyYXRlIiBtc2dpZD0iNjY2NTg1MzYzMzY0MTU1MDU1Ij4iU29ubmVyaWUgZW4gbW9kZSB2aWJyZXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlNvbm5lcmllIGVuIG1vZGUgc2lsZW5jaWV1eCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiJBcHBsaWNhdGlvbiBcIjx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPlwiIGlnbm9yw6llLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+Ik5vdGlmaWNhdGlvbiBtYXNxdcOpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4iVm9sZXQgZGVzIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4iUGFyYW3DqHRyZXMgcmFwaWRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiJBcHBsaWNhdGlvbnMgcsOpY2VudGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+IlV0aWxpc2F0ZXVyIDogPHhsaWZmOmcgaWQ9IlVTRVIiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaSIgbXNnaWQ9IjYwOTk3ODEwMzE2Njk3Mjg3MDkiPiI8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4iU2lnbmFsIG1vYmlsZcKgOiA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPiwgPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0dGVyaWXCoDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+Ik1vZGUgQXZpb27CoDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGjCoDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IkxvY2FsaXNhdGlvbiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQWxhcm1lIHLDqWdsw6llIHN1ciA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iRG9ubsOpZXMgMkctM0cgIGTDqXNhY3RpdsOpZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJEb25uw6llcyA0RyBkw6lzYWN0aXbDqWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+IkRvbm7DqWVzIG1vYmlsZXMgZMOpc2FjdGl2w6llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+IkRvbm7DqWVzIGTDqXNhY3RpdsOpZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiJWb3VzIGF2ZXogYXR0ZWludCBsZSBwbGFmb25kIGRlIGNvbnNvbW1hdGlvbiBkZSBkb25uw6llcyBzcMOpY2lmacOpLlxuXG5TaSB2b3VzIHV0aWxpc2V6IGRlcyBkb25uw6llcyBzdXBwbMOpbWVudGFpcmVzLCBjZWxsZXMtY2kgcG91cnJvbnQgw6p0cmUgZmFjdHVyw6llcyBwYXIgbFwnb3DDqXJhdGV1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4iUsOpYWN0aXZlciBjb25uZXhpb24gZG9ubsOpZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSIxOTQwMjMxNTIxMjc0MTQ3NzcxIj4iQXVjdW5lIGNvbm5leGlvbiBJbnRlcm5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IkNvbm5lY3TDqSBhdSBXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iUmVjaGVyY2hlIGRlIEdQUy4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJQb3NpdGlvbiBkw6lmaW5pZSBwYXIgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iRGVtYW5kZXMgZGUgbG9jYWxpc2F0aW9uIGFjdGl2ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJTdXBwcmltZXIgdG91dGVzIGxlcyBub3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkluZm9ybWF0aW9ucyBzdXIgbFwnYXBwbGljYXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IkxcJ8OpY3JhbiBwaXZvdGUgYXV0b21hdGlxdWVtZW50LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iTFwnw6ljcmFuIGVzdCB2ZXJyb3VpbGzDqSBlbiBtb2RlIHBheXNhZ2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkxcJ8OpY3JhbiBlc3QgdmVycm91aWxsw6kgZW4gbW9kZSBwb3J0cmFpdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iVml0cmluZSBkZXMgZGVzc2VydHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iw4ljcmFuIGRlIHZlaWxsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJNb2RlIEF2aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+IkVuIGNoYXJnZSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnZWRfbGFiZWwiIG1zZ2lkPSI4ODY1NDEzMDc5NDE0MjQ2MDgxIj4iQ2hhcmfDqWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4iQmx1ZXRvb3RoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4iQmx1ZXRvb3RoICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoGFwcGFyZWlscykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmX2xhYmVsIiBtc2dpZD0iODE1OTY1MjE0NjE0OTIxOTkzNyI+IkJMVUVUT09USCBEw4lTQUNUSVbDiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iTHVtaW5vc2l0w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IlJvdGF0aW9uIGF1dG9tYXRpcXVlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IlJvdGF0aW9uIHZlcnJvdWlsbMOpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJNb2RlIGRlIHNhaXNpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IlBvc2l0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IkxvY2FsaXNhdGlvbiBkw6lzYWN0aXbDqWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4iQXBwYXJlaWwgbXVsdGltw6lkaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IkFwcGVscyBkXCd1cmdlbmNlIHVuaXF1ZW1lbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiJQYXJhbcOodHJlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4iSGV1cmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdXNlcl9sYWJlbCIgbXNnaWQ9IjUyMzg5OTU2MzIxMzA4OTc4NDAiPiJNb2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5vbiBjb25uZWN0w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iQXVjdW4gcsOpc2VhdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIGTDqXNhY3RpdsOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IsOJY3JhbiBkaXN0YW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iTHVtaW5vc2l0w6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUT01BVElRVUUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iTW9kZSBkXCdpbnZlcnNpb24gZGVzIGNvdWxldXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iTW9kZSBkXCdhY2NlbnR1YXRpb24gZHUgY29udHJhc3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJNb2RlIGRlIGNvcnJlY3Rpb24gZGVzIGNvdWxldXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJMZSByw6lzZWF1IHBldXRcbsOqdHJlIHN1cnZlaWxsw6kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJSZWNoZXJjaGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iRmFpcmUgZ2xpc3NlciBsZSBkb2lndCB2ZXJzIGxlIGhhdXTCoDogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRmFpdGVzIGdsaXNzZXIgdm90cmUgZG9pZ3QgdmVycyBsYSBnYXVjaGXCoHBvdXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKaW5kZXggN2RiMDdlMi4uOGExNDBlOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlRvdWpvdXJzIGF1dG9yaXNlciBzdXIgY2V0IG9yZGluYXRldXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJab29tZXIgcG91ciByZW1wbGlyIGxcJ8OpY3JhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLDiXRpcmVyIHBvdXIgcmVtcGxpciBsXCfDqWNyYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJab29tIGRlIGNvbXBhdGliaWxpdMOpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IlNpIHVuZSBhcHBsaWNhdGlvbiBhIMOpdMOpIGNvbsOndWUgcG91ciB1biDDqWNyYW4gcGx1cyBwZXRpdCwgdW5lIGNvbW1hbmRlIGRlIHpvb20gc1wnYWZmaWNoZSDDoCBjw7R0w6kgZGUgbFwnaG9ybG9nZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iRW5yZWdpc3RyZW1lbnQgY2FwdHVyZSDDqWNyYW7igKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJFbnJlZ2lzdHJlbWVudCBkZSBsYSBjYXB0dXJlIGRcJ8OpY3JhbuKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iRW5yZWdpc3RyZW1lbnQgZGUgbGEgY2FwdHVyZSBkXCfDqWNyYW4gZW4gY291cnPigKYiPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iQWNjdWVpbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJBcHBsaWNhdGlvbnMgcsOpY2VudGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iUmVjaGVyY2hlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJBcHBhcmVpbCBwaG90byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iQm91dG9uIFwiQ2hhbmdlciBsZSBtb2RlIGRlIHNhaXNpZVwiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IkJvdXRvbiBcIlpvb20gZGUgY29tcGF0aWJpbGl0w6lcIiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iWm9vbSBkZSBjb21wYXRpYmlsaXTDqSBhdmVjIGxhIHRhaWxsZSBkZSBsXCfDqWNyYW4iPC9zdHJpbmc+CkBAIC0xNTUsNiArMTU1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXR0ZXJpZcKgOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iTW9kZSBBdmlvbsKgOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aMKgOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iTG9jYWxpc2F0aW9uIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybWUgcsOpZ2zDqWUgc3VyIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiJEb25uw6llcyAyRy0zRyBkw6lzYWN0aXbDqWVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iRG9ubsOpZXMgNEcgZMOpc2FjdGl2w6llcyI8L3N0cmluZz4KQEAgLTE2NiwxMiArMTY3LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJDb25uZWN0w6kgYXUgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IlJlY2hlcmNoZSBkZSBHUFMuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iUG9zaXRpb24gZMOpZmluaWUgcGFyIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IkRlbWFuZGVzIGRlIGxvY2FsaXNhdGlvbiBhY3RpdmVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iU3VwcHJpbWVyIHRvdXRlcyBsZXMgbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvcm1hdGlvbnMgc3VyIGxcJ2FwcGxpY2F0aW9uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJMXCfDqWNyYW4gcGl2b3RlIGF1dG9tYXRpcXVlbWVudC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkxcJ8OpY3JhbiBlc3QgdmVycm91aWxsw6kgZW4gbW9kZSBwYXlzYWdlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJMXCfDqWNyYW4gZXN0IHZlcnJvdWlsbMOpIGVuIG1vZGUgcG9ydHJhaXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IlZpdHJpbmUgZGVzIGRlc3NlcnRzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IsOJY3JhbiBkZSB2ZWlsbGUgaW50ZXJhY3RpZiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJNb2RlIGF2aW9uIjwvc3RyaW5nPgpAQCAtMTg0LDEwICsxODYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJSb3RhdGlvbiBhdXRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IlJvdGF0aW9uIGJsb3F1w6llIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Ik1vZGUgZGUgc2Fpc2llIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IkxvY2FsaXNhdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJMb2NhbGlzYXRpb24gZMOpc2FjdGl2w6llIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+IkFwcGFyZWlsIG11bHRpbcOpZGlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJBcHBlbHMgZFwndXJnZW5jZSB1bmlxdWVtZW50Ijwvc3RyaW5nPgpAQCAtMTk4LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJOb24gY29ubmVjdMOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IkF1Y3VuIHLDqXNlYXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBkw6lzYWN0aXbDqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaS1GacKgRGlzcGxheSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IkFmZmljaGFnZSBzYW5zIGZpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLDiWNyYW4gc3VyIGxlcXVlbCBsXCdhZmZpY2hhZ2UgZXN0IGRpZmZ1c8OpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iTHVtaW5vc2l0w6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUT01BVElRVUUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iTGVzIG5vdGlmaWNhdGlvbnMgc+KAmWFmZmljaGVudCBpY2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJBY2PDqWRlei15IMOgIHRvdXQgbW9tZW50IGVuIGZhaXNhbnQgZ2xpc3NlciBsZSBkb2lndCB2ZXJzIGxlIGJhcy5cblLDqXDDqXRleiBsXCdvcMOpcmF0aW9uIHBvdXIgYWNjw6lkZXIgYXV4IGNvbW1hbmRlcyBkdSBzeXN0w6htZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJGYWl0ZXMgZ2xpc3NlciB2b3RyZSBkb2lndCBzdXIgbGUgY8O0dMOpIGRlIGxcJ8OpY3JhbiBwb3VyIGFmZmljaGVyIGxhIGJhcnJlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iRmFpdGVzIGdsaXNzZXIgdm90cmUgZG9pZ3Qgw6AgcGFydGlyIGRcJ3VuIGPDtHTDqSBkZSBsXCfDqWNyYW4gcG91ciBhZmZpY2hlciBsYSBiYXJyZSBzeXN0w6htZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iTW9kZSBkXCdpbnZlcnNpb24gZGVzIGNvdWxldXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iTW9kZSBkXCdhY2NlbnR1YXRpb24gZHUgY29udHJhc3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJNb2RlIGRlIGNvcnJlY3Rpb24gZGVzIGNvdWxldXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJMZSByw6lzZWF1IHBldXRcbsOqdHJlIHN1cnZlaWxsw6kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJSZWNoZXJjaGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IkZhaXRlcyBnbGlzc2VyIHZlcnMgbGUgaGF1dCBwb3VyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJGYWl0ZXMgZ2xpc3NlciB2ZXJzIGxhIGdhdWNoZSBwb3VyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCmluZGV4IDg2MmUyZWYuLmY0N2I5OGMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4i4KS44KS/4KS44KWN4oCN4KSf4KSuIFVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+IuCkuOCkvuCkq+CkvCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiLgpLjgpYLgpJrgpYAg4KS44KWHIOCkqOCkv+CkleCkvuCksuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiLgpI/gpKrgpY3igI3gpLLgpL/gpJXgpYfgpLbgpKgg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiLgpJXgpYvgpIgg4KS54KS+4KSyIOCkueClgCDgpJXgpYcg4KSP4KSq4KWN4KSy4KS/4KSV4KWH4KS24KSoIOCkqOCkueClgOCkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4i4KS54KS+4KSyIOCkueClgCDgpJXgpYcg4KSP4KSq4KWN4KSy4KS/4KSV4KWH4KS24KSoIOCkluCkvuCksOCkv+CknCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4i4KSQ4KSq4KWN4KS4IOCknOCkvuCkqOCkleCkvuCksOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4i4KSV4KWL4KSIIOCkueCkvuCksiDgpLngpYAg4KSV4KWHIOCkkOCkquCljeCkuCAg4KSo4KS54KWA4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiLgpLngpL7gpLIg4KS54KWAIOCkleClhyDgpJDgpKrgpY3gpLggIOCkluCkvuCksOCkv+CknCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgIDxwbHVyYWxzIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9yZWNlbnRfYXBwcyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiIxIOCkueCkvuCksiDgpLngpYAg4KSV4KS+IOCkj+CkquCljeCksuCkv+CkleClh+CktuCkqCI8L2l0ZW0+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTA0MDc4NDM1OTc5NDg5MDc0NCI+IiVkIOCkueCkvuCksiDgpLngpYAg4KSV4KWHIOCkj+CkquCljeCksuCkv+CkleClh+CktuCkqCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiIxIOCkueCkvuCksiDgpLngpYAg4KSV4KS+IOCkkOCkquCljeCkuCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTA0MDc4NDM1OTc5NDg5MDc0NCI+IiVkIOCkueCkvuCksiDgpLngpYAg4KSV4KWHIOCkkOCkquCljeCkuCI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiLgpJXgpYvgpIgg4KS44KWC4KSa4KSo4KS+IOCkqOCkueClgOCkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4i4KSR4KSo4KSX4KWL4KSH4KSC4KSXIjwvc3RyaW5nPgpAQCAtNDAsMTggKzQwLDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiLgpLjgpYfgpJ/gpL/gpILgpJciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiLgpLngpLXgpL7gpIgg4KSc4KS54KS+4KScIOCkruCli+CkoSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KS44KWN4oCN4KS14KSkOiDgpJjgpYHgpK7gpL7gpI/gpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4i4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCkheCkquCkqOClh+CkhuCkqiDgpJjgpYHgpK7gpL7gpI/gpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiLgpK7gpY3gpK/gpYLgpJ8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiLgpLjgpY3gpLXgpKQ6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i4KS44KWC4KSa4KSo4KS+4KSP4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IkJsdWV0b290aCDgpJ/gpYDgpKbgpLAg4KSV4KS/4KSv4KS+IOCkl+Ckr+CkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IuCkh+CkqOCkquClgeCknyDgpKrgpKbgpY3gpKfgpKTgpL8g4KS44KWH4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfdXNlX3BoeXNpY2FsX2tleWJvYXJkIiBtc2dpZD0iNzU1MTkwMzA4NDQxNjA1NzgxMCI+IuCkreCljOCkpOCkv+CklSDgpJXgpYDgpKzgpYvgpLDgpY3gpKEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4i4KSP4KSq4KWN4KSy4KS/4KSV4KWH4KS24KSoIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g4KSV4KWLIFVTQiDgpIngpKrgpJXgpLDgpKMg4KSk4KSVIOCkquCkueClgeCkguCkmuCkqOClhyDgpKbgpYfgpII/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiLgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKggPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgpJXgpYsgVVNCIOCkuOCkueCkvuCkr+CklSDgpIngpKrgpJXgpLDgpKMg4KSk4KSVIOCkquCkueClgeCkguCkmuCkqOClhyDgpKbgpYfgpII/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+IuCkkOCkquCljeCkuCAgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgpJXgpYsgVVNCIOCkieCkquCkleCksOCkoyDgpKTgpJUg4KSq4KS54KWB4KSC4KSa4KSo4KWHIOCkpuClh+Ckgj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IuCkkOCkquCljeCkuCAgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgpJXgpYsgVVNCIOCkuOCkueCkvuCkr+CklSDgpIngpKrgpJXgpLDgpKMg4KSk4KSVIOCkquCkueClgeCkguCkmuCkqOClhyDgpKbgpYfgpII/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjUxNjEyMDUyNTg2MzUyNTMyMDYiPiLgpJzgpKwg4KSv4KS5IFVTQiDgpIngpKrgpJXgpLDgpKMg4KSV4KSo4KWH4KSV4KWN4KSfIOCkleCkv+Ckr+CkviDgpJzgpL7gpI8sIOCkpOCkrCA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOCkleCliyDgpJbgpYvgpLLgpYfgpII/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLgpJzgpKwg4KSv4KS5IFVTQiDgpI/gpLjgpYfgpLjgpLDgpYAg4KSV4KSo4KWH4KSV4KWN4KSfIOCkleClgCDgpJzgpL7gpI8sIOCkpOCkrCA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOCkleCliyDgpJbgpYvgpLLgpYfgpII/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i4KSH4KS4IFVTQiDgpLjgpLngpL7gpK/gpJUg4KSJ4KSq4KSV4KSw4KSjIOCkleClhyDgpLjgpL7gpKUg4KSV4KWL4KSIIOCkreClgCDgpIfgpILgpLjgpY3gpJ/gpYngpLIg4KSP4KSq4KWN4KSy4KS/4KSV4KWH4KS24KSoIOCkleCkvuCkriDgpKjgpLngpYDgpIIg4KSV4KSw4KSk4KS+LiDgpIfgpLgg4KS44KS54KS+4KSv4KSVIOCkieCkquCkleCksOCkoyDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpK/gpLngpL7gpIIg4KSF4KSn4KS/4KSVIOCknOCkvuCkqOClh+CkgjogPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiLgpIfgpLggVVNCIOCkuOCkueCkvuCkr+CklSDgpIngpKrgpJXgpLDgpKMg4KSV4KWHIOCkuOCkvuCkpSDgpJXgpYvgpIgg4KSt4KWAIOCkh+CkguCkuOCljeCkn+ClieCksiDgpJDgpKrgpY3gpLggIOCkleCkvuCkriDgpKjgpLngpYDgpIIg4KSV4KSw4KSk4KS+LiDgpIfgpLgg4KS44KS54KS+4KSv4KSVIOCkieCkquCkleCksOCkoyDgpJXgpYcg4KSs4KS+4KSw4KWHIOCkruClh+CkgiDgpK/gpLngpL7gpIIg4KSF4KSn4KS/4KSVIOCknOCkvuCkqOClh+CkgjogPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+IlVTQiDgpLjgpLngpL7gpK/gpJUg4KS44KS+4KSn4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiLgpKbgpYfgpJbgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiLgpIfgpLggVVNCIOCkieCkquCkleCksOCkoyDgpJXgpYcg4KSy4KS/4KSPIOCkoeCkv+Ckq+CkvOClieCksuCljeKAjeCknyDgpLDgpYLgpKog4KS44KWHIOCkieCkquCkr+Cli+CklyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IuCkh+CkuCDgpJXgpILgpKrgpY3gpK/gpYLgpJ/gpLAg4KS44KWHIOCkueCkruClh+CktuCkviDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCkreCksOCkqOClhyDgpLngpYfgpKTgpYEg4KSc4KS84KWC4KSuIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KSV4KWLIOCkreCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkluClgOCkguCkmuClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IuCkuOCkguCkl+CkpOCkpOCkviDgpJzgpLzgpYLgpK4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i4KSc4KSsIOCkleCkv+CkuOClgCDgpJvgpYvgpJ/gpYAg4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCkleClhyDgpLLgpL/gpI8g4KSP4KSq4KWN4oCN4KSy4KS/4KSV4KWH4KS24KSoIOCkleCliyDgpKHgpL/gpJzgpLzgpL7gpIfgpKgg4KSV4KS/4KSv4KS+IOCknOCkvuCkpOCkviDgpLngpYgsIOCkpOCliyDgpJzgpLzgpYLgpK4g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KSjIOCkleCljeCksuClieCklSDgpJXgpYcg4KSq4KS+4KS4IOCkpuCkv+CkluCkvuCkiCDgpKbgpYfgpJfgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IuCkuOCljeCkleCljeCksOClgOCkqOCktuClieCknyDgpLjgpLngpYfgpJzgpL4g4KSc4KS+IOCksOCkueCkviDgpLngpYguLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLgpLjgpY3gpJXgpY3gpLDgpYDgpKjgpLbgpYngpJ8g4KS44KS54KWH4KSc4KS+IOCknOCkviDgpLDgpLngpL4g4KS54KWILi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLgpLjgpY3gpJXgpY3gpLDgpYDgpKjgpLbgpYngpJ8g4KS44KS54KWH4KSc4KS+IOCknOCkviDgpLDgpLngpL4g4KS54KWILiI8L3N0cmluZz4KQEAgLTczLDExICs3MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iVVNCIOCkq+CkvOCkvuCkh+CksiDgpLjgpY3gpKXgpL7gpKjgpL7gpILgpKTgpLDgpKMg4KS14KS/4KSV4KSy4KWN4KSqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlX210cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI0MzMzNTA0NDEzNTYzMDIzNjI2Ij4i4KSu4KWA4KSh4KS/4KSv4KS+IOCkquCljeCksuClh+Ckr+CksCDgpJXgpYcg4KSw4KWC4KSqIOCkruClh+CkgiDgpK7gpL7gpIngpILgpJ8g4KSV4KSw4KWH4KSCIChNVFApIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlX3B0cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI3NTE3MTI3NTQwMzAxNjI1NzUxIj4i4KSV4KWI4KSu4KSw4KWHIOCkleClhyDgpLDgpYLgpKog4KSu4KWH4KSCIOCkruCkvuCkieCkguCknyDgpJXgpLDgpYfgpIIgKFBUUCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+Ik1hYyDgpJXgpYcg4KSy4KS/4KSPIEFuZHJvaWQgRmlsZSBUcmFuc2ZlciDgpI/gpKrgpY3gpLLgpL8uIOCkh+CkguCkuOCljeCkn+ClieCksiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+Ik1hYyDgpJXgpYcg4KSy4KS/4KSPIEFuZHJvaWQgRmlsZSBUcmFuc2ZlciDgpJDgpKrgpY3gpLgg4KSH4KSC4KS44KWN4KSf4KWJ4KSyIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+IuCkteCkvuCkquCkuCDgpJzgpL7gpI/gpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i4KS54KWL4KSuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i4KSu4KWH4KSo4KWCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i4KS54KS+4KSyIOCkueClgCDgpJXgpYcg4KSP4KSq4KWN4oCN4KSy4KS/4KSV4KWH4KS24KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i4KS54KS+4KSyIOCkueClgCDgpJXgpYcg4KSQ4KSq4KWN4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4i4KSW4KWL4KSc4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IuCkleCliOCkruCksOCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i4KSH4KSo4KSq4KWB4KSfIOCkquCkpuCljeCkp+CkpOCkv+KAjSDgpKzgpJ/gpKgg4KS44KWN4KS14KS/4KSaIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4i4KS44KSC4KSX4KSk4KSk4KS+IOCknOCkvOClguCkriDgpKzgpJ/gpKguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLgpJvgpYvgpJ/gpYAg4KS44KWHIOCkrOCkoeCkvOClgCDgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KSq4KSwIOCknOCkvOClguCkriDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgpAQCAtMTQ2LDEzICsxNDYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+IuCkuOClguCkmuCkqOCkviDgpJbgpL7gpLDgpL/gpJwg4KSV4KWAIOCkl+CkiC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfbm90aWZpY2F0aW9uX3NoYWRlIiBtc2dpZD0iNDY5MDI3NDg0NDQ0NzUwNDIwOCI+IuCkuOClguCkmuCkqOCkviDgpLbgpYfgpKEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+IuCkpOCljeCkteCksOCkv+CkpCDgpLjgpYfgpJ/gpL/gpILgpJcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+IuCkueCkvuCksiDgpLngpYAg4KSV4KWHIOCkj+CkquCljeKAjeCksuCkv+CkleClh+CktuCkqC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4i4KS54KS+4KSyIOCkueClgCDgpJXgpYcg4KSQ4KSq4KWN4KS4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiLgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4gPHhsaWZmOmcgaWQ9IlVTRVIiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+IuCkruCli+CkrOCkvuCkh+CksiA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IuCkrOCliOCkn+CksOClgCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IuCkueCkteCkvuCkiCDgpJzgpLngpL7gpJzgpLwg4KSu4KWL4KShIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IuCkuOCljeCkpeCkvuCkqCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+Ijx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4g4KSV4KWHIOCksuCkv+CkjyDgpIXgpLLgpL7gpLDgpY3gpK4g4KS44KWH4KSfIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cg4KSh4KWH4KSf4KS+IOCkheCkleCljeCkt+CkriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIOCkoeClh+Ckn+CkviDgpIXgpJXgpY3gpLfgpK4iPC9zdHJpbmc+CkBAIC0xNjQsMTMgKzE2NSwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkdQUyDgpJXgpYsg4KSW4KWL4KSc4KS+IOCknOCkviDgpLDgpLngpL4g4KS54KWIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkdQUyDgpKbgpY3gpLXgpL7gpLDgpL4g4KS44KWH4KSfIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4g4KS44KWN4oCN4KSl4KS+4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i4KS44KWN4KSl4KS+4KSoIOCkheCkqOClgeCksOCli+CkpyDgpLjgpJXgpY3gpLDgpL/gpK8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLgpLjgpK3gpYAg4KS44KWC4KSa4KSo4KS+4KSP4KSCIOCkuOCkvuCkq+CkvCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IuCkj+CkquCljeKAjeCksuCkv+CkleClh+CktuCkqCDgpJzgpL7gpKjgpJXgpL7gpLDgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i4KSQ4KSq4KWN4KS4IOCknOCkvuCkqOCkleCkvuCksOClgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCkuOCljeKAjeCkteCkmuCkvuCksuCkv+CkpCDgpLDgpYLgpKog4KS44KWHIOCkmOClguCkruClh+Ckl+ClgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IuCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpLLgpYjgpILgpKHgpLjgpY3gpJXgpYfgpKog4KSF4KSt4KS/4KS14KS/4KSo4KWN4KSv4KS+4KS4IOCkruClh+CkgiDgpLLgpYngpJUg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKgg4KSq4KWL4KSw4KWN4KSf4KWN4KSw4KWH4KSfIOCkheCkreCkv+CkteCkv+CkqOCljeKAjeCkr+CkvuCkuCDgpK7gpYfgpIIg4KSy4KWJ4KSVIOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGF5ZHJlYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4i4KSu4KS/4KSg4KS+4KSIIOCkleCkviDgpKHgpL/gpKzgpY3gpKzgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4i4KSm4KS/4KS14KS+4KS44KWN4KS14KSq4KWN4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4i4KSI4KSl4KSw4KSo4KWH4KSfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLgpLngpLXgpL7gpIgg4KSc4KS54KS+4KSc4KS8IOCkruCli+CkoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiLgpJrgpL7gpLDgpY3gpJwg4KS54KWLIOCksOCkueClgCDgpLngpYgsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CkBAIC0xNzgsNyArMTgwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpIngpKrgpJXgpLDgpKMpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiJCbHVldG9vdGgg4KSs4KSC4KSmIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLgpJrgpK7gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IuCkuOCljeCkleCljeCksOClgOCkqCDgpJXgpYAg4KSw4KWL4KS24KSo4KWAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLgpLjgpY3gpLXgpKQ6IOCksOCli+Ckn+Clh+CknyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLgpLDgpYvgpJ/gpYfgpLbgpKgg4KSy4KWJ4KSVIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i4KSH4KSo4KSq4KWB4KSfIOCkteCkv+Ckp+CkvyI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk2LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i4KSV4KSo4KWH4KSV4KWN4KSfIOCkqOCkueClgOCkgiDgpLngpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i4KSV4KWL4KSIIOCkqOClh+Ckn+CkteCksOCljeCklSDgpKjgpLngpYDgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSDgpKzgpILgpKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2ktRmkg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4i4KS14KS+4KSv4KSw4KSy4KWH4KS4IOCkoeCkv+CkuOCljeCkquCljeCksuClhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IuCkmuCkruCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSV4KS+4KS44KWN4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IuCkuOCljeCkleCljeCksOClgOCkqCDgpJXgpYAg4KSw4KWL4KS24KSo4KWAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IuCkuOCljeCkteCkpDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4i4KS44KWC4KSa4KSo4KS+4KSP4KSCIOCkr+CkueCkvuCkgiDgpKbgpL/gpJbgpL7gpIgg4KSm4KWH4KSk4KWAIOCkueCliOCkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IuCkqOClgOCkmuClhyDgpLjgpY3gpLXgpL7gpIfgpKog4KSV4KSw4KSV4KWHIOCkieCkqCDgpKTgpJUg4KSV4KSt4KWAIOCkreClgCDgpKrgpLngpYHgpILgpJrgpYfgpIIuXG7gpLjgpL/gpLjgpY3gpJ/gpK4g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KSj4KWL4KSCIOCkleClhyDgpLLgpL/gpI8g4KSq4KWB4KSoOiDgpKjgpYDgpJrgpYcg4KS44KWN4KS14KS+4KSH4KSqIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLgpKzgpL7gpLAg4KSm4KS/4KSW4KS+4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkleClhyDgpJXgpL/gpKjgpL7gpLDgpYcg4KSV4KWLIOCkuOCljeCkteCkvuCkh+CkqiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IuCkuOCkv+CkuOCljeCkn+CkriDgpKzgpL7gpLAg4KSm4KS/4KSW4KS+4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkleClhyDgpJXgpL/gpKjgpL7gpLDgpYcg4KS44KWHIOCkuOCljeCkteCkvuCkh+CkqiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i4KSw4KSC4KSXIOCkteCljeCkr+ClgeCkpOCljeCkleCljeCksOCkriDgpK7gpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLgpIngpKjgpY3gpKjgpKQg4KSV4KSC4KSf4KWN4KSw4KS+4KS44KWN4KSfIOCkruCli+CkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4i4KSw4KSC4KSXIOCkuOClgeCkp+CkvuCksCDgpK7gpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpJXgpYtcbuCkruClieCkqOClgOCkn+CksCDgpJXgpL/gpK/gpL4g4KSc4KS+IOCkuOCkleCkpOCkviDgpLngpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuCkluCli+CknOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4KSV4KWHIOCksuCkv+CkjyDgpIrgpKrgpLAg4KS44KWN4oCN4KSy4KS+4KSH4KShIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4KSV4KWHIOCksuCkv+CkjyDgpKzgpL7gpI/gpIIg4KS44KWN4oCN4KSy4KS+4KSH4KShIOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCmluZGV4IDYzMWQ1NDkuLjJkZWU5NzMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJVdmlqZWsgZG9wdXN0aSBzIG92b2cgcmHEjXVuYWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iWnVtaXJhaiBpIGlzcHVuaSB6YXNsb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iUmFzdGVnbmkgaSBpc3B1bmkgemFzbG9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iS29tcGF0aWJpbG5vIHp1bWlyYW5qZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJLYWRhIGplIGFwbGlrYWNpamEgZGl6YWpuaXJhbmEgemEgbWFuamkgemFzbG9uLCBrb250cm9sZSB6dW1pcmFuamEgcHJpa2F6dWp1IHNlIHBvcmVkIHNhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IlNwcmVtYW5qZSBzbmlta2UgemFzbG9uYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlNwcmVtYW5qZSBzbmlta2UgemFzbG9uYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iU3ByZW1hbmplIHNuaW1rZSB6YXNsb25hLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJQb8SNZXRuYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ikl6Ym9ybmlrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iTmVkYXZuZSBhcGxpa2FjaWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iUHJldHJhxb5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkZvdG9hcGFyYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+Ikd1bWIgemEgcHJvbWplbnUgbmHEjWluYSB1bm9zYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iR3VtYiB6YSBrb21wYXRpYmlsbm9zdCB6dW1pcmFuamEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJadW1pcmFuamUgbWFuamVnIHphc2xvbmEgbmEgdmXEh2kuIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0ZXJpamEg4oCTIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iTmHEjWluIHJhZGEgdSB6cmFrb3Bsb3Z1IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCDigJMgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJMb2thY2lqYSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IlZyaWplbWUgYWxhcm1hOiA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+Ik9uZW1vZ3XEh2VuaSBzdSAyRy0zRyBwb2RhY2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJPbmVtb2d1xIdlbmkgc3UgNEcgcG9kYWNpIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIHBvdmV6YW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IlRyYcW+ZW5qZSBHUFMtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJMb2thY2lqdSB1dHZyZGlvIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IlphaHRqZXZpIHphIGxva2FjaWp1IGFrdGl2bmkgc3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJCcmlzYW5qZSBzdmloIG9iYXZpamVzdGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkluZm9ybWFjaWplIG8gYXBsaWthY2lqaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iWmFzbG9uIMSHZSBzZSBhdXRvbWF0c2tpIHpha3JlbnV0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+Ilphc2xvbiBqZSB6YWtsanXEjWFuIHUgcGVqemHFvm5vaiBvcmlqZW50YWNpamkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+Ilphc2xvbiBqZSB6YWtsanXEjWFuIHUgcG9ydHJldG5vaiBvcmlqZW50YWNpamkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+Ikl6bG9nIHphIHNsYXN0aWNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IlNhbmphcmVuamUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iTmHEjWluIHJhZGEgdSB6cmFrb3Bsb3Z1Ijwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJOaWplIHBvdmV6YW5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+Ik5lbWEgbXJlxb5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkgaXNrbGp1xI1lbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaS1GaSB6YXNsb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJCZcW+acSNbmkgcHJpa2F6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IkVtaXRpcmFuamUgemFzbG9uYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IlN2amV0bGluYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPTUFUU0tJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+Ik9iYXZpamVzdGkgc2UgcHJpa2F6dWp1IG92ZGplIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iUHJpc3R1cGl0ZSBpbSB1IGJpbG8ga29qZW0gdHJlbnV0a3UgdGFrbyBkYSBwcnN0b20gdHJ6bmV0ZSBwcmVtYSBkb2xqZS4gXG5Qb25vdm8gcHJzdG9tIHRyem5pdGUgcHJlbWEgZG9samUgemEga29udHJvbGUgc3VzdGF2YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJQcmlqZcSRaXRlIHByc3RvbSBwbyBydWJ1IHphc2xvbmEgZGEgYmkgc2UgcHJpa2F6YWxhIHRyYWthIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJQcmlqZcSRaXRlIHByc3RvbSBvZCBydWJhIHphc2xvbmEgZGEgYmkgc2UgcHJpa2F6YWxhIHRyYWthIHN1c3RhdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iTmHEjWluIGludmVyemlqZSBib2plIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iTmHEjWluIHBvamHEjWFub2cga29udHJhc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJOYcSNaW4ga29yZWtjaWplIGJvamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Ik1yZcW+YSBzZVxubW/FvmRhIHByYXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJQcmV0cmHFvml2YW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJLbGl6bml0ZSBwcmVtYSBnb3JlIHphIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJLbGl6bml0ZSBsaWpldm8gemEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKaW5kZXggYzFjOTEzNi4uZGZkYTU1ZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+Ik1pbmRpZyBlbmdlZMOpbHllenplIGVycsWRbCBhIHN6w6Ftw610w7Nnw6lwcsWRbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ik5hZ3nDrXTDoXMgYSBraXTDtmx0w6lzaGV6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+Ik55w7pqdMOhcyBraXTDtmx0w6lzaGV6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iS29tcGF0aWJpbGl0w6FzIC0tIG5hZ3nDrXTDoXMva2ljc2luecOtdMOpcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJIYSBlZ3kgYWxrYWxtYXrDoXN0IGtpc2ViYiBrw6lwZXJuecWRcmUgdGVydmV6dGVrLCBha2tvciBhIG5hZ3nDrXTDoXMva2ljc2luecOtdMOpcyB2ZXrDqXJsxZFqZSBheiDDs3JhIG1lbGxldHQgamVsZW5payBtZWcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IkvDqXBlcm55xZFrw6lwIG1lbnTDqXNlLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iS8OpcGVybnnFkWvDqXAgbWVudMOpc2UuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IkvDqXBlcm55xZFrw6lwIG1lbnTDqXNlLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJGxZFvbGRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbsO8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iTGVnw7pqYWJiIGFsa2FsbWF6w6FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iS2VyZXPDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iS2FtZXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJCZXZpdGVsaSBtw7NkIHbDoWx0w6FzYSBnb21iLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJLb21wYXRpYmlsaXTDoXNpIHpvb20gZ29tYi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IktpY3NpbnnDrXRzZW4gYSBuYWd5b2JiIGvDqXBlcm55xZFow7Z6LiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkFra3VtdWzDoXRvciA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IlJlcMO8bMWRcyDDvHplbW3Ds2QgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iSGVseWFkYXRvazogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLDiWJyZXN6dMOpcyBpZMWRcG9udGphOiA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJHLTNHIGFkYXRmb3JnYWxvbSBsZXRpbHR2YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIGFkYXRmb3JnYWxvbSBsZXRpbHR2YSI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBjc2F0bGFrb3p0YXR2YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iR1BTIGtlcmVzw6lzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJBIEdQUyBiZcOhbGzDrXRvdHRhIGEgaGVseWV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iQWt0w612IGhlbHlsZWvDqXLDqXNlayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+Ik1pbmRlbiDDqXJ0ZXPDrXTDqXMgdMO2cmzDqXNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkFsa2FsbWF6w6FzaW5mb3Jtw6FjacOzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJBIGvDqXBlcm55xZEgYXV0b21hdGlrdXNhbiBmb3JvZ25pIGZvZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkEga8OpcGVybnnFkSB6w6Fyb2x2YSB2YW4gZmVrdsWRIHTDoWpvbMOhc2Jhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iQSBrw6lwZXJuecWRIHrDoXJvbHZhIHZhbiDDoWxsw7MgdMOham9sw6FzYmFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJEZXNzZXJ0IENhc2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iw4FsbW9kb3rDoXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iUmVww7xsxZFnw6lwIMO8emVtbcOzZCI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk2LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iTmluY3Mga2FwY3NvbGF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+Ik5pbmNzIGjDoWzDs3phdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIGtpa2FwY3NvbHZhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpIGtpamVsesWRIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iVmV6ZXTDqWsgbsOpbGvDvGxpIGtpamVsesWRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IkvDqXBlcm55xZEgdGFydGFsbcOhbmFrIMOhdGvDvGxkw6lzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkbDqW55ZXLFkSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJhdXRvbWF0aWt1cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJBeiDDqXJ0ZXPDrXTDqXNlayBpdHQgamVsZW5uZWsgbWVnLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IkLDoXJtaWtvciBlbMOpcmhldGkgxZFrZXQsIGhhIGxlZmVsw6kgaMO6enphIGF6IHVqasOhdC5cbkjDunp6YSBsZSBheiB1amrDoXQgbcOpZyBlZ3lzemVyIGEgcmVuZHN6ZXJiZcOhbGzDrXTDoXNvayBlbMOpcsOpc8OpaGV6LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IkNzw7pzenRhc3NhIHVqasOhdCBhIGvDqXBlcm55xZEgc3rDqWzDqW4gYSBzw6F2IG1lZ2plbGVuw610w6lzw6loZXoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IkNzw7pzenRhc3NhIHVqasOhdCBhIGvDqXBlcm55xZEgc3rDqWzDqXTFkWwgYSByZW5kc3plcnPDoXYgbWVnamVsZW7DrXTDqXPDqWhleiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJTesOtbmludmVydMOhbMOhcyBtw7NkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iS29udHJhc3p0amF2w610w6FzIG3Ds2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IlN6w61uamF2w610w6FzIG3Ds2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IkxlaGV0LCBob2d5IGFcbmjDoWzDs3phdCBmZWzDvGd5ZWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJLZXJlc8OpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJBKHopIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiBtxbF2ZWxldGhleiBjc8O6c3p0YXNzYSBmZWxmZWzDqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJBKHopIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiBtxbF2ZWxldGhleiBjc8O6c3p0YXNzYSBiYWxyYS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHktbGFuZC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHktbGFuZC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzA1MzVjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oeS1sYW5kL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3JvdGF0aW9uX2xvY2tlZCIgbXNnaWQ9Ijc2MDk2NzMwMTE0MzE1NTYwOTIiPiLUt9Wv1oDVodW21bYg1aHVtdWq1bQg1a/VuNWy1brVvtWh1a4g1acg1bDVuNaA1avVptW41bbVodWv1aHVtiDVpNWr1oDWhNWh1b7VuNaA1bTVodW2INW01aXVuzoiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHktckFNLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh5LXJBTS1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMDUzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh5LXJBTS1sYW5kL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3JvdGF0aW9uX2xvY2tlZCIgbXNnaWQ9Ijc2MDk2NzMwMTE0MzE1NTYwOTIiPiLUt9Wv1oDVodW21bYg1aHVtdWq1bQg1a/VuNWy1brVvtWh1a4g1acg1bDVuNaA1avVptW41bbVodWv1aHVtiDVpNWr1oDWhNWh1b7VuNaA1bTVodW2INW01aXVuzoiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhOGJiYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjA5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4i1YDVodW01aHVr9Wh1oDVo9Wh1bXVq9W2IFVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+ItWE1aHWhNaA1aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+ItWA1aXVvNWh1oHVttWl1awg1oHVodW21a/Vq9aBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+ItWP1aXVstWl1a/VuNaC1anVtdW41oLVttW21aXWgCDVrtaA1aHVo9aA1asg1bTVodW91avVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4i1LnVodaA1bQg1bDVodW+1aXVrNW+1aHVrtW21aXWgCDVudWv1aHVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4i1LHVttW/1aXVvdWl1awg1b7VpdaA1bvVq9W2INWu1oDVodWj1oDVpdaA1agiPC9zdHJpbmc+CisgIDxwbHVyYWxzIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9yZWNlbnRfYXBwcyI+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiIxINW21bjWgCDVrtaA1aHVo9Wr1oAiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCDVttW41oAg1a7WgNWh1aPVq9aAIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+ItS+1aHVttW41oLWgdW41oLVtNW21aXWgCDVudWv1aHVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4i1LjVttWp1aHWgdWr1a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4i1L7VodW21bjWgtaB1bjWgtW01bbVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4i1YTVq9Wh1oHWgNWl1oQg1azVq9aB1oTVodW+1bjWgNWr1bnVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+ItWE1aHWgNW/1a/VuNaB1agg1azVq9aB1oTVodWp1aHWg9W+1bjWgtW0INWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+ItW01bbVuNaC1bQg1acgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQlJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4iVVNCINWs1avWgdaE1aHVvtW41oDVuNaC1bTVqCDVudWrINWh1bvVodWv1oHVvtW41oLVtDpcbtWV1aPVv9W+1aXWhCDVtNWr1aHVtdW2INWj1bjWgNWu1bjVsiDVrNWr1oHWhNWh1b7VuNaA1avVudWr1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+ItWE1aHWgNW/1a/VuNaB1asg1oXVo9W/1aHVo9W41oDVrtW41oLVtNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4i1L/VodaA1aPVodW+1bjWgNW41oLVtNW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+ItS71bbWhNW21aHVqdWr1bzVodW11avVtiDVvNWl1arVq9W0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+ItS71bbWhNW21aHVutW/1b/VvtW41bIg1afVr9aA1aHVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+ItWA1aHVtNaA1aXWgdW21aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4i1LvVttaE1bbVodW31a3VodW/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i1L7VodW21bjWgtaB1bjWgtW01bbVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IkJsdWV0b290aC3VqCDVr9Wh1brVvtWh1a4g1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2lucHV0X21ldGhvZF9zZXR0aW5nc19jb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjM1MDQyOTI0NzE1MTIzMTc4MjciPiLUv9Wh1oDVo9Wh1b7VuNaA1aXVrCDVtNW41oLVv9aE1aHVo9aA1bTVodW2INWl1bLVodW21aHVr9W21aXWgNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4i1ZbVq9Wm1avVr9Wh1a/VodW2INW91b/VpdWy1bbVodW31aHWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiLUudW41oLVtdWs1aHVv9aA1aXVntWsIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g1bDVodW+1aXVrNW+1aHVrtWrINW01bjWgtW/1oTVqCBVU0Ig1b3VodaA1oQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiLUudW41oLVtdWs1aHVv9aA1aXVntWsLCDVuNaAIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g1bDVodW+1aXVrNW+1aHVrtWoINW01bjWgtW/1oQg1aPVuNaA1a7VqyBVU0Ig1azWgNWh1b3VodaA1oQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjUxNjEyMDUyNTg2MzUyNTMyMDYiPiLUstWh1oHVpdWe1awgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPi3VqCwg1aXWgNWiINWh1bXVvSBVU0Ig1a/WgNWr1bnVqCDVr9Wh1brVodWv1oHVvtWh1a4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLUstWh1oHVpdWe1awgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPi3VqCwg1aXWgNWiINWh1bXVvSBVU0Ig1azWgNWh1b3VodaA1oTVqCDVr9Wh1brVodWv1oHVvtWh1a4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i1LHVtdW9IFVTQiDVrNaA1aHVvdWh1oDWhNWrINWw1aXVvyDVuNW5INW01asg1bDVodW+1aXVrNW+1aHVriDVudWrINWh1bfVrdWh1b/VuNaC1bQ6INS71bTVodaB1aXWhCDVodW+1aXVrNWr1bYg1aHVtdW9wqDVrNaA1aHVvdWh1oDWhNWrINW01aHVvdWr1bYgPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4t1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiJVU0Ig1azWgNWh1b3VodaA1oQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF92aWV3IiBtc2dpZD0iNjMwNDU2NTU1MzIxODE5Mjk5MCI+ItS01avVv9Wl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiLVldWj1b/VodWj1bjWgNWu1aXVrCDVrNW81aXVrNW11aHVtdW2INWh1bXVvSBVU0Ig1b3VodaA1oTVqyDVsNWh1bTVodaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4i1ZXVo9W/1aHVo9W41oDVrtWl1awg1azVvNWl1azVtdWh1bXVtiDVodW11b0gVVNCINWs1oDVodW91aHWgNaE1asg1bDVodW01aHWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4i1LnVuNaC1bXVrNWh1b/WgNWl1Z7VrCBVU0It1asg1a/VodaA1aPVodWi1aXWgNW41oLVtNWoOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiLVgNWh1bTVodWv1aHWgNWj1bnVqyBSU0Et1asg1aLVodW21aHVrNWrINW01aHVv9W21aHVsNWl1b/WhNW2INWnYFxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i1YTVq9W31b8g1anVuNaC1bXVrNWh1b/WgNWl1awg1aHVtdW9INWw1aHVtNWh1a/VodaA1aPVudWr1oEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLUvdW41bfVuNaA1aHWgdW21aXVrGAg1afVr9aA1aHVttWoINWs1oHVttWl1azVuNaCINWw1aHVtNWh1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i1YHVo9Wl1axgINWn1a/WgNWh1bbVqCDVrNaB1bbVpdWs1bjWgiDVsNWh1bTVodaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+ItWK1aHVsNW41oLVtCDVpyDVp9Wv1oDVodW21asg1bDVodW21bjWgtW11anVqOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+ItWK1aHVsNW41oLVtCDVpyDVp9Wv1oDVodW21asg1bDVodW21bjWgtW11anVqC4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i1LfVr9aA1aHVttWrINWw1aHVttW41oLVtdWp1agg1brVodWw1b7VuNaC1bQg1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90aXRsZSIgbXNnaWQ9IjY0NjE4NjU5NjA5NjE0MTQ5NjEiPiLUt9Wv1oDVodW21asg1bDVodW21bjWgtW11anVqCDVrNW41oLVvdWh1bbVr9Wh1oDVvtWl1awg1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+ItWA1brVpdaEINWx1aXWgCDVp9Wv1oDVodW21asg1bDVodW21bjWgtW11anVqCDVv9Wl1b3VttWl1azVuNaCINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiLVidWw1aHVu9W41bLVvtWl1oEg1azVuNaC1b3VodW21a/VodaA1aXVrCDVp9Wv1oDVodW21asg1bDVodW21bjWgtW11anVqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+ItWJ1bDVodW71bjVstW+1aXWgSDVutWh1bDVpdWsINWn1a/WgNWh1bbVqyDVsNWh1bbVuNaC1bXVqdWoOiDVgNW21aHWgNWh1b7VuNaAINWnYCDVutWh1bDVuNaB1bYg1oXVo9W/1aHVo9W41oDVrtW01aHVtiDVtNWl1bsg1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iVVNCINaG1aHVtdWs1aXWgNWrINaD1bjVrdWh1bbWgdW01aHVtiDVqNW21b/WgNWh1bbWhNW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+ItWE1avVodaB1bbVpdWsINW41oDVutWl1b0g1bTVpdWk1avVoSDVttW+1aHVo9Wh1oDVr9Wr1bkgKE1UUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLVhNWr1aHWgdW21aXVrCDVuNaA1brVpdW9INaG1bjVv9W41a3WgdWr1a8gKFBUUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+ItWP1aXVstWh1aTWgNWl1awgQW5kcm9pZCDWhtWh1bXVrNWl1oDVqyDWg9W41a3VodW21oHVtNWh1bYg1bDVodW+1aXVrNW+1aHVrtWoIE1hYy3VqyDVsNWh1bTVodaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4i1YDVpdW/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+ItWP1bjWgtW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i1ZHVodW21a8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLVjtWl1oDVu9Wr1bYg1a7WgNWh1aPWgNWl1oDVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+ItWI1oDVuNW21aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLVltW41b/VuNWt1oHVq9WvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLVhNWr1aHWgdW21aXVrCDVtNW41oLVv9aE1aHVo9aA1bTVodW2INWl1bLVodW21aHVr9WrINWv1bjVs9Wh1a/VqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4i1YDVodW01aHVv9Wl1bLVpdWs1avVuNaC1anVtdWh1bYg1a3VuNW31bjWgNWh1oHVtNWh1bYg1a/VuNWz1aHVr9WoOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i1LTVq9W/1aHWg9W41a3VpdWsINaD1bjWhNaA1avWgSDVodW+1aXVrNWrINW01aXVriDVp9Wv1oDVodW2OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiJCbHVldG9vdGgt1agg1bTVq9Wh1oHVvtWh1a4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+IkJsdWV0b290aC3VtiDVodW21bvVodW/1b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+ItWE1aHWgNW/1a/VuNaBINW51a/VoToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiLVhNWh1oDVv9Wv1bjWgdWrINW01aXVryDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+ItWE1aHWgNW/1a/VuNaB1asg1aXWgNWv1bjWgiDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4i1YTVodaA1b/Vr9W41oHVqyDVpdaA1aXWhCDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4i1YTVodaA1b/Vr9W41oHVqCDVrNWr1oTVtiDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3Bob25lIiBtc2dpZD0iNDg5NDcwODkzNzA1MjYxMTI4MSI+ItWA1aXVvNWh1a3VuNW9INW51a/VoToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiLVgNWl1bzVodWt1bjVvdWrINW01aXVryDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiLVgNWl1bzVodWt1bjVvdWrINWl1oDVr9W41oIg1aPVq9WuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiLVgNWl1bzVodWt1bjVvdWrINWl1oDVpdaEINWj1avVrjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjQ3MTgzNDg2ODU4MDc1Nzg5OCI+ItWA1aXVvNWh1a3VuNW91asg1aHVptWk1aHVttW31aHVttWoINWs1avWhNW2INWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiLVj9W+1bXVodWs1bbVpdaAINW51a/VodW2OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9vbmVfYmFyIiBtc2dpZD0iMTQxNTYyNTgzMzIzODI3MzYyOCI+ItWP1b7VtdWh1azVttWl1oDVqyDVtNWl1a8g1aPVq9WuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiLVj9W+1bXVodWs1bbVpdaA1asg1aXWgNWv1bjWgiDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4i1Y/VvtW11aHVrNW21aXWgNWrINWl1oDVpdaEINWj1avVrjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4i1Y/VvtW11aHVrNW21aXWgNWrINWh1abVpNWh1bbVt9Wh1bbVqCDVrNaA1avVviDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IldpZmkt1agg1aHVttW71aHVv9W+1aHVriDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2lGaS3VqCDVodW21bvVodW/1b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vbmVfYmFyIiBtc2dpZD0iNzczNTg5MzE3ODAxMDcyNDM3NyI+IldpZmkt1asg1bTVpdWvINWj1avVrjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4iV2lmaS3VqyDVpdaA1a/VuNaCINWj1avVrjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiJXaUZpLdWrINWl1oDVpdaEINWj1avVrjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2ODUzNTYxMzAzNTg2NDgwMzc2Ij4iV2lmaS3VqyDVodWm1aTVodW21bfVodW21agg1azVq9aE1bYg1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiJXaU1BWCDVudWv1aE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYLdWrINW01aXVryDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJXaU1BWC3VqyDVpdaA1a/VuNaCINWj1avVrjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4iV2lNQVgt1asg1aXWgNWl1oQg1aPVq9WuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4iV2lNQVgt1asg1aHVptWk1aHVttW31aHVttWoINWs1avWhNW2INWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+ItSx1abVpNWh1bbVt9Wh1bYg1bnVr9WhOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjYzOTUzMjYyNzYyMTM0MDI4ODMiPiLVhNWr1aHWgdW+1aHVriDVudWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+ItS21oDVuCDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+ItWE1aXVryDVo9Wr1a46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90d29fYmFycyIgbXNnaWQ9IjY0MzczNjM2NDgzODUyMDY2NzkiPiLUtdaA1a/VuNaCINWj1avVrjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4i1LXWgNWl1oQg1aPVq9WuOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI5MTIyOTIyODg2NTE5Njc2ODM5Ij4i1LHVptWk1aHVttW31aHVttWoINWs1oDVq9W+INWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiLVhNWr1aHWgdW+1aHVriDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+ItSx1bbVu9Wh1b/VvtWh1a4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nvbm5lY3RlZCIgbXNnaWQ9IjgzNjYyNTY2OTM3MTk0OTk2NjUiPiLVhNWr1aHWgdW+1aHVriDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiLVjNW41bjWgtW01avVttWjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IlNJTSDVudWv1aE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IkJsdWV0b290aC3VqCDVr9Wh1brVvtW41oLVtCDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiLUu9W21oTVttWh1anVq9W81aHVtdWr1bYg1bzVpdWq1avVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiLVhNWh1oDVv9Wv1bjWgdWoIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDVv9W41a/VuNW9INWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4i1YDVodW01aHVr9Wh1oDVo9WrINWv1aHWgNWj1aHVvtW41oDVuNaC1bTVttWl1oA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiLUvtWh1bbVuNaC1oHVuNaC1bTVttWl1oA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+ItWE1aHWhNaA1aXVrCDVrtWh1bbVuNaC1oHVuNaC1bTVqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+IkdQUy3VqCDVtNWr1aHWgdW+1aHVriDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4iR1BTLdWrINW91b/VodaB1bjWgtW0OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4i1YDVpdW81aHVtNW41oLVv9aE1aHVo9aA1avVudWoINW01avVodaB1b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiLUttWh1bbVo9WrINWp1oDVqdW81bjWgToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i1LbVodW21aPVodWv1agg1azVvNWl1oHVvtWh1a4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi3VqCDVodW21b/VpdW91b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+ItS+1aHVttW41oLWgdW41oLVtNWoINWh1bbVv9Wl1b3VvtWl1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiLUvtWh1bbVuNaC1oHVuNaC1bTVttWl1oDVqyDVvtWh1bDVodW21aHVrzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4i1LHWgNWh1aMg1a/VodaA1aPVodW+1bjWgNW41oLVtNW21aXWgDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4i1Y7VpdaA1bvVq9W2INWw1aHVvtWl1azVvtWh1a7VttWl1oDVqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3VzZXIiIG1zZ2lkPSIxMTA0ODQ2Njk5ODY5NDc2ODU1Ij4i1ZXVo9W/1b7VuNWyIDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiLVh9Wh1oDVqtWh1a/VodW2IDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMyRzPC94bGlmZjpnPjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i1YTVodaA1b/Vr9W41oHVqCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiDVpzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+ItS71bbWhNW21aHVqdWr1bzVodW11avVtiDVvNWl1arVq9W01aggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoLdWoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+INWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4i1Y/VpdWy1aHVpNaA1bjWgtWp1bXVuNaC1bbVqNWdIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4i1LbVodaA1anVuNaC1oHVq9W51agg1aTWgNW+1aHVriDVpyA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LdWr1bY6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cg1b/VvtW11aHVrNW21aXWgNWoINWh1bbVu9Wh1b/VvtWh1a4g1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHINW/1b7VtdWh1azVttWl1oDVqCDVodW21bvVodW/1b7VodWuINWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4i1YfVodaA1arVodWv1aHVtiDVv9W+1bXVodWs1bbVpdaA1agg1aHVttW71aHVv9W+1aHVriDVpdW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIyMDg2ODE1MzA0ODU4OTY0OTU0Ij4i1Y/VvtW11aHVrNW21aXWgNWoINWh1bbVu9Wh1b/VvtWh1a4g1aXVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+ItS01bjWgtaEINWw1aHVvdWl1awg1aXWhCDVttW31b7VodWuINW/1b7VtdWh1azVttWl1oDVqyDWhdWj1b/VodWj1bjWgNWu1bTVodW2INW91aHVsNW01aHVttWr1bY6XG5cbiDUtdWp1aUg1aTVuNaC1oQg1a/WgNWv1avVtiDVodWv1b/Vq9W+1aHWgdW21aXWhCDVv9W+1bXVodWs1bbVpdaA1agsINWh1bXVtiDVr9Wh1oDVuNWyINWnINWj1aHVttWx1b7VpdWsINaF1brVpdaA1aHVv9W41oDVqyDVr9W41bLVtNWr1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfZW5hYmxlIiBtc2dpZD0iNzcyOTc3MjAzOTIwODY2NDYwNiI+ItWO1aXWgNWh1bTVq9Wh1oHVttWl1awg1b/VvtW11aHVrNW21aXWgNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+ItS71bbVv9Wl1oDVttWl1b8g1a/VodW6INW51a/VoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpLdWoINW01avVodaB1b7VodWuINWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiLViNaA1bjVttW41oLVtCDVpyBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i1Y/VpdWy1aHVpNaA1bjWgtWp1bXVuNaC1bbVqCDVr9Wh1oDVo9Wh1b7VuNaA1b7VpdWsINWnIEdQUy3VqyDVr9W41bLVtNWr1oEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLVj9Wl1bLVodWk1oDVuNaC1anVtdWh1bYg1bDVodaA1oHVuNaC1bTVttWl1oDVtiDVodWv1b/Vq9W+INWl1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLVhNWh1oTWgNWl1awg1aLVuNWs1bjWgCDVrtWh1bbVuNaC1oHVuNaC1bTVttWl1oDVqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i1Y/VpdWy1aXVr9W41oLVqdW11bjWgtW21bbVpdaAINWu1oDVodWj1oDVqyDVtNWh1b3Vq9W2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLUt9Wv1oDVodW21agg1avVttaE1bbVuNaC1oDVuNaC1bXVtiDVr9W61b/Vv9W+1as6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLUt9Wv1oDVodW21agg1a/VuNWy1brVvtWh1a4g1acg1bDVuNaA1avVptW41bbVodWv1aHVtiDVpNWr1oDWhNWh1b7VuNaA1bTVodW2INW01aXVuzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4i1LfVr9aA1aHVttWoINWv1bjVstW61b7VodWuINWnINW41oLVstWy1aHVsdWr1aMg1aTVq9aA1oTVodW+1bjWgNW01aHVtNWiOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJEZXNzZXJ0IENhc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4i1ZHVpdaA1aXVr9Wh1bXVq9W2INW81aXVqtWr1bQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i1LvVttaE1bbVodWp1avVvNWh1bXVq9W2INW81aXVqtWr1bQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnaW5nX2xhYmVsIiBtc2dpZD0iNDkwMDc0Nzc0NDY1MzA5MjA5Ij4i1LzVq9aB1oTVodW+1bjWgNW41oLVtGAgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiLUvNWr1oHWhNWh1b7VuNaA1b7VodWuINWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsIiBtc2dpZD0iNjMwNDE5MDI4NTE3MDcyMTQwMSI+IkJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9tdWx0aXBsZV9kZXZpY2VzX2xhYmVsIiBtc2dpZD0iMzkxMjI0NTU2NTYxMzY4NDczNSI+IkJsdWV0b290aCAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INW91aHWgNaEKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4iQmx1ZXRvb3RoLdW2INWh1bbVu9Wh1b/VvtWh1a4g1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+ItWK1aHVtdWu1aHVvNW41oLVqdW11bjWgtW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLUu9W21oTVttWh1brVv9W/1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+ItWK1b/Vv9W41oLVtNWoINWv1bjVstW61b7VodWuINWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+ItWE1bjWgtW/1oTVodWj1oDVtNWh1bYg1aXVstWh1bbVodWv1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiLVj9Wl1bLVodWk1oDVuNaC1anVtdW41oLVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiLUsdW21bvVodW/1aXVrCDVv9Wl1bLVodWk1oDVuNaC1anVtdW41oLVttWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+ItWE1aXVpNWr1aEg1b3VodaA1oQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+ItWE1avVodW11bYg1aHWgNW/1aHVr9Wh1oDVoyDVq9aA1aHVvtWr1bPVodWv1bbVpdaA1asg1abVodW21aPVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfc2V0dGluZ3NfbGFiZWwiIG1zZ2lkPSI1MzI2NTU2NTkyNTc4MDY1NDAxIj4i1L/VodaA1aPVodW+1bjWgNW41oLVtNW21aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4i1LrVodW01aHVttWh1a/VqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4i1LXVvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i1YTVq9Wh1oHVvtWh1a4g1bnVpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLVkdWh1bbWgSDVudWv1aEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaS3VqCDVodW21bvVodW/1b7VodWuINWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+ItWA1aXVvNWh1a/VoSDVp9Wv1oDVodW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i1YrVodW11a7VodW81bjWgtWp1bXVuNaC1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4i1LvVttaE1bbVodW31a3VodW/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+ItSz1bjWgtW21aHVt9aA1bvVtNWh1bYg1bzVpdWq1avVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+ItS41bbVpNWs1aHVtdW21b7VodWuINaB1aHVtdW/1bjWgtW21bjWgtWp1bXVodW2INW81aXVqtWr1bQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+ItSz1bjWgtW11bbVpdaA1asg1a/VodaA1aPVodW+1bjWgNW01aHVtiDVvNWl1arVq9W0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiLVkdWh1bbWgdWoINWv1aHWgNW41bIg1adcbtW+1aXWgNWh1bDVvdWv1b7VpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLViNaA1bjVttWl1awiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i1Y3VodWw1aXWgdaA1aXWhCDVvtWl1oDWhyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t1asg1bDVodW01aHWgDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLVjdWh1bDVpdaB1oDVpdaEINWx1aHVrWAgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LdWrINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbAppbmRleCA2YTcwMmI5Li45MTJkODU4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iU2VsYWx1IGl6aW5rYW4gZGFyaSBrb21wdXRlciBpbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJQZXJiZXNhciB1dGsgbWVuZ2lzaSBsYXlhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJSZW50YW5na24gdXRrIG1uZ2lzaSBsYXlhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IlBlcmJlc2FyL3BlcmtlY2lsIHVudHVrIGtvbXBhdGliaWxpdGFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IlNhYXQgYXBsIGRpcmFuY2FuZyB1bnR1ayBsYXlhciB5YW5nIGxlYmloIGtlY2lsLCBrb250cm9sIHpvb20gYWthbiB0YW1waWwgZGkgZGVrYXQgamFtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJNZW55aW1wYW4gdGFuZ2thcGFuIGxheWFyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iTWVueWltcGFuIHRhbmdrYXBhbiBsYXlhci4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iVGFuZ2thcGFuIGxheWFyIHNlZGFuZyBkaXNpbXBhbi4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iVXRhbWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW51Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iQXBsIHRlcmJhcnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJUZWx1c3VyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJLYW1lcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IlRvbWJvbCBiZXJhbGloIG1ldG9kZSBtYXN1a2FuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJUb21ib2wgcGVyYmVzYXIvcGVya2VjaWwga29tcGF0aWJpbGl0YXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJQZXJiZXNhciBkYXJpIGxheWFyIGtlY2lsIGtlIGJlc2FyLiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkJhdGVyYWkgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJNb2RlIFBlc2F3YXQgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iTG9rYXNpIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQWxhcm0gZGlzZXRlbCBrZSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IkRhdGEgMkctM0cgZGlub25ha3RpZmthbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IkRhdGEgNEcgZGlub25ha3RpZmthbiI8L3N0cmluZz4KQEAgLTE2NCwxNyArMTY1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSB0ZXJzYW1idW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJNZW5lbHVzdXJpIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJMb2thc2kgeWFuZyBkaXNldGVsIG9sZWggR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iUGVybWludGFhbiBsb2thc2kgYWt0aWYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJNZW5naGFwdXMgc2VtdWEgcGVtYmVyaXRhaHVhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iSW5mbyBhcGxpa2FzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iTGF5YXIgYWthbiBkaXB1dGFyIHNlY2FyYSBvdG9tYXRpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkxheWFyIGRpa3VuY2kgZGFsYW0gb3JpZW50YXNpIGxhbnNrYXAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkxheWFyIGRpa3VuY2kgZGFsYW0gb3JpZW50YXNpIHBvdHJldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iRXRhbGFzZSBIaWRhbmdhbiBQZW51dHVwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkxhbXVuYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iTW9kZSBwZXNhd2F0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+Ik1lbmdpc2kgYmF0ZXJhaSwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiJEaXRhZ2loIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IlRlcmlzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBQZXJhbmdrYXQpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiJCbHVldG9vdGggTWF0aSI8L3N0cmluZz4KQEAgLTE4MiwxMCArMTg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iUm90YXNpIE90b21hdGlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IlJvdGFzaSBEaWt1bmNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Ik1ldG9kZSBNYXN1a2FuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+Ikxva2FzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJMb2thc2kgTWF0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiJQZXJhbmdrYXQgbWVkaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IlBhbmdnaWxhbiBEYXJ1cmF0IFNhamEiPC9zdHJpbmc+CkBAIC0xOTYsMTIgKzE5NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IlRpZGFrIFRlcnNhbWJ1bmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iVGlkYWsgQWRhIEphcmluZ2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkgTWF0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJUYW1waWxhbiBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IkxheWFyIE5pcmthYmVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IkxheWFyIFRyYW5zbWlzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IktlY2VyYWhhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJPVE9NQVRJUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJQZW1iZXJpdGFodWFuIG11bmN1bCBkaSBzaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iQWtzZXMga2FwYW4gc2FqYSBkZW5nYW4gbWVuZ2dlc2VrIGtlIGJhd2FoLlxuR2VzZWsga2UgYmF3YWggc2VrYWxpIGxhZ2kgdW50dWsga29udHJvbCBzaXN0ZW0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iR2VzZWsgdGVwaSBsYXlhciB1bnR1ayBtZW1idWthIGJpbGFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJHZXNlayBkYXJpIGJhZ2lhbiB0ZXBpIGxheWFyIHVudHVrIG1lbWJ1a2EgYmlsYWggc2lzdGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+Ik1vZGUgaW52ZXJzaSB3YXJuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+Ik1vZGUga29udHJhcyB5YW5nIGRpc2VtcHVybmFrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZGUga29yZWtzaSB3YXJuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iSmFyaW5nYW4gYmlzYVxuZGlhd2FzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iVGVsdXN1cmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iR2VzZXIga2UgYXRhcyB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iR2VzZXIga2Uga2lyaSB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAppbmRleCBhMzUwZDM4Li4zNGRhNmE3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iQ29uc2VudGkgc2VtcHJlIGRhIHF1ZXN0byBjb21wdXRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilpvb20gcGVyIHJpZW1waXJlIHNjaGVybW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iRXN0ZW5kaSBwZXIgcmllbXAuIHNjaGVybW8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJab29tIGNvbXBhdGliaWxpdMOgIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IlNlIHVuXCdhcHBsaWNhemlvbmUgw6ggc3RhdGEgcHJvZ2V0dGF0YSBwZXIgdW5vIHNjaGVybW8gcGnDuSBwaWNjb2xvLCBhY2NhbnRvIGFsbFwnb3JvbG9naW8gdmllbmUgdmlzdWFsaXp6YXRvIHVuIGNvbnRyb2xsbyBkZWxsbyB6b29tLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTYWx2YXRhZ2dpbyBzY3JlZW5zaG90Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iU2FsdmF0YWdnaW8gc2NyZWVuc2hvdC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iU2NyZWVuc2hvdCBpbiBjb3JzbyBkaSBzYWx2YXRhZ2dpby4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iSG9tZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJBcHBsaWNhemlvbmkgcmVjZW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IkNlcmNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkZvdG9jYW1lcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IlB1bHNhbnRlIHBlciBjYW1iaWFyZSBtZXRvZG8gZGkgaW1taXNzaW9uZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iUHVsc2FudGUgem9vbSBjb21wYXRpYmlsaXTDoC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Ilpvb20gaW5mZXJpb3JlIHBlciBzY2hlcm1vIHBpw7kgZ3JhbmRlLiI8L3N0cmluZz4KQEAgLTExNiw4ICsxMTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90d29fYmFycyIgbXNnaWQ9IjY0MzczNjM2NDgzODUyMDY2NzkiPiJEdWUgYmFycmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+IlRyZSBiYXJyZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+Ik1hc3NpbW8gc2VnbmFsZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb24iIG1zZ2lkPSIyMzg1MjU0NjkzNjI0MzQ1MjY1Ij4iQXR0aXZvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4iTm9uIGF0dGl2by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb24iIG1zZ2lkPSIyMzg1MjU0NjkzNjI0MzQ1MjY1Ij4iT04iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+Ik9GRiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19jb25uZWN0ZWQiIG1zZ2lkPSI4MzY2MjU2NjkzNzE5NDk5NjY1Ij4iQ29ubmVzc28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CkBAIC0xNTUsNiArMTU1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXR0ZXJpYTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJNb2RhbGl0w6AgYWVyZW86IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJQb3NpemlvbmU6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQWxsYXJtZSBpbXBvc3RhdG8gcGVyOiA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IkRhdGkgMkctM0cgZGlzYXR0aXZhdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJEYXRpIDRHIGRpc2F0dGl2YXRpIjwvc3RyaW5nPgpAQCAtMTY2LDEyICsxNjcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIGNvbm5lc3NvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJSaWNlcmNhIGRlbCBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iUG9zaXppb25lIHN0YWJpbGl0YSBkYWwgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iUmljaGllc3RlIGRpIGFjY2Vzc28gYWxsYSBwb3NpemlvbmUgYXR0aXZlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iQ2FuY2VsbGEgdHV0dGUgbGUgbm90aWZpY2hlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvcm1hemlvbmkgYXBwbGljYXppb25lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJMbyBzY2hlcm1vIHJ1b3RlcsOgIGF1dG9tYXRpY2FtZW50ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkxvIHNjaGVybW8gw6ggYmxvY2NhdG8gaW4gb3JpZW50YW1lbnRvIG9yaXp6b250YWxlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJMbyBzY2hlcm1vIMOoIGJsb2NjYXRvIGluIG9yaWVudGFtZW50byB2ZXJ0aWNhbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IlZldHJpbmEgZGkgZG9sY2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGF5ZHJlYW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iTW9kYWxpdMOgIGFlcmVvIjwvc3RyaW5nPgpAQCAtMTg0LDcgKzE4Niw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IlJvdGF6aW9uZSBhdXRvbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iUm90YXppb25lIGJsb2NjYXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Ik1ldG9kbyBkaSBpbW1pc3Npb25lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iUG9zaXppb25lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iR2VvbG9jYWxpenphemlvbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iUG9zaXppb25lIG5vbiBhdHRpdmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4iRGlzcG9zaXRpdm8gbXVsdGltZWRpYWxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgpAQCAtMTk2LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJOb24gY29ubmVzc28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iTmVzc3VuYSByZXRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkgZGlzYXR0aXZhdG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iRGlzcGxheSBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IlZpc3VhbGl6emF6aW9uZSB3aXJlbGVzcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJUcmFzbWV0dGkgc2NoZXJtbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+Ikx1bWlub3NpdMOgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iTGUgbm90aWZpY2hlIHZlbmdvbm8gdmlzdWFsaXp6YXRlIHF1aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IlB1b2kgYWNjZWRlcnZpIGluIHF1YWxzaWFzaSBtb21lbnRvIHNjb3JyZW5kbyB2ZXJzbyBpbCBiYXNzby5cbkZhaSBzY29ycmVyZSBkaSBudW92byB2ZXJzbyBpbCBiYXNzbyBwZXIgdmlzdWFsaXp6YXJlIGkgY29udHJvbGxpIGRlbCBzaXN0ZW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IkZhaSBzY29ycmVyZSBpbCBib3JkbyBkZWxsbyBzY2hlcm1vIHBlciB2aXN1YWxpenphcmUgbGEgYmFycmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IkZhaSBzY29ycmVyZSBpbCBkaXRvIGRhbCBib3JkbyBkZWxsbyBzY2hlcm1vIHBlciB2aXN1YWxpenphcmUgbGEgYmFycmEgZGkgc2lzdGVtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJNb2RhbGl0w6AgaW52ZXJzaW9uZSBjb2xvcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJNb2RhbGl0w6AgZGkgY29udHJhc3RvIGF2YW56YXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJNb2RhbGl0w6AgZGkgY29ycmV6aW9uZSBkZWwgY29sb3JlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJMYSByZXRlIHBvdHJlYmJlXG5lc3NlcmUgbW9uaXRvcmF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iUmljZXJjYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJTdSBwZXIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IkEgc2luaXN0cmEgcGVyIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCmluZGV4IGIyNzRkY2MuLmIzMjNmYjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4i157Xntep16cg157Xqdeq157XqSDXqdecINeU157Xoteo15vXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiLXoNen15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiLXlNeh16gg157XlNeo16nXmdee15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4i16TXqNeY15kg15nXmdep15XXnSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4i15DXmdefINeZ15nXqdeV157XmdedINeQ15fXqNeV16DXmdedIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiLXodeS15XXqCDXmdeZ16nXldee15nXnSDXkNeX16jXldeg15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiLXpNeo15jXmSDXkNek15zXmden16bXmdeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiLXkNeZ158g15DXpNec15nXp9em15nXldeqINeQ15fXqNeV16DXldeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiLXodeS15XXqCDXkNek15zXmden16bXmdeV16og15DXl9eo15XXoNeV16oiPC9zdHJpbmc+CiAgIDxwbHVyYWxzIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9yZWNlbnRfYXBwcyI+Ci0gICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiLXmdeZ16nXldedINeQ15fXqNeV158g15DXl9eTIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQg15TXmdeZ16nXldee15nXnSDXlNeQ15fXqNeV16DXmdedIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IteQ16TXnNeZ16fXpteZ15Qg15DXl9eo15XXoNeUINeQ15fXqiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTA0MDc4NDM1OTc5NDg5MDc0NCI+IuKAjyVkINeU15DXpNec15nXp9em15nXldeqINeU15DXl9eo15XXoNeV16oiPC9pdGVtPgogICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4i15DXmdefINeU16rXqNeQ15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4i157Xqtee16nXmiI8L3N0cmluZz4KQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iMjc4MzEwNDgwNzU1MTIxMTYzOSI+IteX15HXqCDXnteY16LXnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+IteU16HXldec15zXlCDXoNeX15zXqdeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+Iteg15XXqteo15UgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQlJTwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4i15jXoteZ16DXlCDXkdeQ157Xptei15XXqiBVU0Ig15DXmdeg15Qg16DXqtee15vXqi5cbteU16nXqtee16kg15DXmiDXldeo16cg15HXnteY16LXnyDXqdeh15XXpNenLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiLigI/XmNei15nXoNeUINeR15DXntem16LXldeqIFVTQiDXkNeZ16DXlCDXoNeq157Xm9eqLlxu15TXqdeq157XqSDXkNeaINeV16jXpyDXkdee15jXotefINep16HXldek16cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+Item16jXmdeb16og16HXldec15zXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+IteU15LXk9eo15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CkBAIC00NCwyNSArNDQsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+IteU16nXqtenIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiLXkNeV15jXldee15jXmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+IteU16rXqNeQ15XXqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiJCbHVldG9vdGgg16fXqdeV16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4i4oCPQmx1ZXRvb3RoINen16nXldeoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4i15TXkteT16gg16nXmdeY15XXqiDXp9ec15giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiLXnten15zXk9eqINek15nXlteZ16oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4i15zXkNek16nXqCDXnNeZ15nXqdeV150gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDXkteZ16nXlCDXnNeU16rXp9efINeULVVTQj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+Itec15DXpNep16gg15zXmdeZ16nXldedIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g15LXmdep15Qg15zXkNeR15nXlteoINeULVVTQj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IteU15DXnSDXnNek16rXldeXINeQ16ogPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDXm9eQ16nXqCDXnteb16nXmdeoIFVTQiDXlteUINee15fXldeR16g/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLXlNeQ150g15zXpNeq15XXlyDXkNeqIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g15vXkNep16gg15DXkdeZ15bXqCBVU0Ig15bXlCDXnteX15XXkdeoPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IteQ15nXnyDXmdeZ16nXldee15nXnSDXnteV16rXp9eg15nXnSDXlNek15XXotec15nXnSDXotedINeQ15HXmdeW16gg15QtVVNCLiDXnNee15nXk9eiINeg15XXodejINei15wg15DXkdeZ15bXqCDXlteUINeR16fXqCDXkdeb16rXldeR16ogPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+IteQ15HXmdeW16ggVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+IuKAj9ec15DXpNep16gg15zXkNek15zXmden16bXmdeUIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g15LXmdep15Qg15zXlNeq16fXnyDXlC1VU0I/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiLigI/XnNeQ16TXqdeoINec15DXpNec15nXp9em15nXlCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+INeS15nXqdeUINec15DXkdeZ15bXqCDXlC1VU0I/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjUxNjEyMDUyNTg2MzUyNTMyMDYiPiLigI/XlNeQ150g15zXpNeq15XXlyDXkNeqIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g15vXkNep16gg157Xm9ep15nXqCBVU0Ig15bXlCDXnteX15XXkdeoPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4i4oCP15TXkNedINec16TXqteV15cg15DXqiA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+INeb15DXqdeoINeQ15HXmdeW16ggVVNCINeW15Qg157Xl9eV15HXqD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiLigI/XkNeZ158g15DXpNec15nXp9em15nXldeqINee15XXqten16DXldeqINeU16TXldei15zXldeqINei150g15DXkdeZ15bXqCDXlC1VU0IuINec157XmdeT16Ig16DXldeh16Mg16LXnCDXkNeR15nXlteoINeW15Qg15HXp9eoINeR15vXqteV15HXqiA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4i4oCP15DXkdeZ15bXqCBVU0IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsYWJlbF92aWV3IiBtc2dpZD0iNjMwNDU2NTU1MzIxODE5Mjk5MCI+IteU16bXkiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IteU16nXqtee16kg15vXkdeo15nXqNeqINee15fXk9ecINei15HXldeoINee15vXqdeZ16ggVVNCINeW15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiLXlNep16rXntepINeb15HXqNeZ16jXqiDXnteX15PXnCDXoteR15XXqCDXkNeR15nXlteoIFVTQiDXlteUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ190aXRsZSIgbXNnaWQ9IjQ1MTM5MTgzOTMzODcxNDE5NDkiPiLXlNeQ150g15zXkNek16nXqCDXoNeZ16fXldeZINeR15DXkteZ150g15EtVVNCPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiLXmNeR15nXoteqINeU15DXpteR16Ig16nXnCDXntek16rXlyDXlC1SU0Eg16nXnCDXlNee15fXqdeRINeU15nXkDpcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiLigI/XlNep16rXntepINeb15HXqNeZ16jXqiDXnteX15PXnCDXoteR15XXqCDXnteb16nXmdeoIFVTQiDXlteUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4i4oCP15TXqdeq157XqSDXm9eR16jXmdeo16og157Xl9eT15wg16LXkdeV16gg15DXkdeZ15bXqCBVU0Ig15bXlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4i4oCP15TXkNedINec15DXpNep16gg16DXmden15XXmSDXkdeQ15LXmdedINeRLVVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4i4oCP15jXkdeZ16LXqiDXlNeQ16bXkdeiINep15wg157XpNeq15cg15QtUlNBINep15wg15TXnteX16nXkSDXlNeZ15A6XG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLXkNek16nXqCDXqtee15nXkyDXntee15fXqdeRINeW15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLXlNeS15PXnCDXqtem15XXkteUINeb15PXmSDXnNee15zXkCDXkNeqINeU157XodeaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+Itee16rXlyDXm9eT15kg15zXntec15Ag15DXqiDXlNee16HXmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+Itep15nXoNeV15kg157XqNeX16cg157Xqtem15XXkteUINec16bXldeo15og16rXkNeZ157XldeqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+Iteb15DXqdeoINeZ15nXqdeV150g157XmdeV16LXkyDXnNee16HXmiDXp9eY158g15nXldeq16gsINek16fXkyDXqdecINee16jXl9enINee16rXpteV15LXlCDXmdeV16TXmdeiINec15nXkyDXlNep16LXldefLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLXqdeV157XqCDXpteZ15zXldedINee16HXmi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+Itep15XXnteoINem15nXnNeV150g157XodeaLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLXnteq15HXptei16og16nXnteZ16jXlCDXqdecINem15nXnNeV150g15TXnteh15ouIjwvc3RyaW5nPgpAQCAtNzAsMTkgKzY4LDIxIEBACiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RleHQiIG1zZ2lkPSIxMTUyODM5NjQ3Njc3NTU4ODE1Ij4i15LXoiDXm9eT15kg15zXlNem15nXkiDXkNeqINem15nXnNeV150g15TXnteh15og16nXnNeaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiLXnNeQINeg15nXqtefINec15HXpteiINem15nXnNeV150g157XodeaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4i15zXkCDXoNeZ16rXnyDXnNep157XldeoINeQ16og16bXmdec15XXnSDXlNee16HXmi4g15nXmdeq15vXnyDXqdeg16LXqdeUINep15nXnteV16kg15HXkNee16bXoteZINeQ15fXodeV158uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4i15DXpNep16jXldeZ15XXqiDXlNei15HXqNeqINen15HXpteZ150g15EtVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlX210cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI0MzMzNTA0NDEzNTYzMDIzNjI2Ij4i15jXotefINeb16DXktefINee15PXmdeUIChNVFApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlX3B0cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI3NTE3MTI3NTQwMzAxNjI1NzUxIj4i15jXotefINeb157Xptec157XlCAoUFRQKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4i15TXqten158g15DXqiDXmdeZ16nXldedINeU16LXkdeo16og15TXp9eR16bXmdedINep15wgQW5kcm9pZCDXoteR15XXqCBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiLigI/XkNek16nXqNeV15nXldeqINeU16LXkdeo16og16fXkdem15nXnSDXkS1VU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLigI/XmNei158g15vXoNeS158g157Xk9eZ15QgKE1UUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLigI/XmNei158g15vXntem15zXnteUIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLigI/XlNeq16fXnyDXkNeqINeQ16TXnNeZ16fXpteZ15nXqiDXlNei15HXqNeqINeU16fXkdem15nXnSDXqdecIEFuZHJvaWQg16LXkdeV16ggTWFjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4i15TXp9eV15PXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLXkdeZ16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLXqtek16jXmdeYIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i15nXmdep15XXnteZ150g15DXl9eo15XXoNeZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLXkNek15zXmden16bXmdeV16og15DXl9eo15XXoNeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiLXl9ek16kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4i157Xptec157XlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i15zXl9em158g15TXl9ec16TXqiDXqdeZ15jXqiDXp9ec15guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+Itec15fXptefINee16jXl9enINee16rXpteV15LXlCDXqdecINeq15DXmdee15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Itep16DXlCDXnteo15fXpyDXnteq16bXldeS15Qg16nXnCDXnteh15og16fXmNefINec15LXk9eV15wg15nXldeq16guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfY29ubmVjdGVkIiBtc2dpZD0iMjcwNzAyNzYzMzI0Mjk4MzM3MCI+IkJsdWV0b290aCDXnteX15XXkdeoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9Ijc0MTY2NDg2Njk5NzY4NzAxNzUiPiJCbHVldG9vdGgg157XoNeV16rXpy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4i4oCPQmx1ZXRvb3RoINee15fXldeR16guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+IuKAj0JsdWV0b290aCDXnteg15XXqtenLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+IteQ15nXnyDXodeV15zXnNeULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+Itek16Eg15DXl9eTINep15wg16HXldec15zXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdHdvX2JhcnMiIG1zZ2lkPSI4NTAwNjUwNDM4NzM1MDA5OTczIj4i16nXoNeZINek16HXmdedINep15wg16HXldec15zXlC4iPC9zdHJpbmc+CkBAIC05OCwxNyArOTgsMTcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiLXqdeg15kg16TXodeZ150g16nXnCDXoNeq15XXoNeZ150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4i16nXnNeV16nXlCDXpNeh15nXnSDXqdecINeg16rXldeg15nXnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4i15DXldeqINeU16DXqteV16DXmdedINee15zXkC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IldpLUZpINeb15HXldeZLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2lmaSIgbXNnaWQ9IjE0MjU0NzY1NTE4Mjc5MjQ0NzQiPiJXaS1GaSDXnteg15XXqtenLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vbmVfYmFyIiBtc2dpZD0iNzczNTg5MzE3ODAxMDcyNDM3NyI+Itek16Eg15DXl9eTINep15wgV2ktRmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+Itep16DXmSDXpNeh15nXnSDXqdecIFdpLUZpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+Itep15zXldep15Qg16TXodeZ150g16nXnCBXaS1GaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2ODUzNTYxMzAzNTg2NDgwMzc2Ij4i15DXldeqINeULVdpLUZpINee15zXkC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+Itec15zXkCBXaU1BWC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X29uZV9iYXIiIG1zZ2lkPSI0MTcwOTk0Mjk5MDExODYzNjQ4Ij4i16TXoSDXkNeX15Mg16nXnCBXaU1BWC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+Itep16DXmSDXpNeh15nXnSDXqdecIFdpTUFYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiLXqdec15XXqdeUINek16HXmdedINep15wgV2lNQVguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3NjgwODk5ODY3OTU1Nzk1NTgiPiLXkNeV16og15QtV2lNQVgg157XnNeQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vZmYiIG1zZ2lkPSIzMTc3MzgwMjk2Njk3OTMzNjI3Ij4i4oCPV2ktRmkg15vXkdeV15kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IuKAj1dpLUZpINee16DXldeq16cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4i4oCP16TXoSDXkNeX15Mg16nXnCBXaS1GaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4i4oCP16nXoNeZINek16HXmdedINep15wgV2ktRmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4i4oCP16nXnNeV16nXlCDXpNeh15nXnSDXqdecIFdpLUZpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiLigI/XkNeV16og15QtV2ktRmkg157XnNeQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4i4oCP15zXnNeQIFdpTUFYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiLigI/XpNehINeQ15fXkyDXqdecIFdpTUFYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdHdvX2JhcnMiIG1zZ2lkPSI5MTc2MjM2ODU4MzM2NTAyMjg4Ij4i4oCP16nXoNeZINek16HXmdedINep15wgV2lNQVguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90aHJlZV9iYXJzIiBtc2dpZD0iNjExNjU1MTYzNjc1MjEwMzkyNyI+IuKAj9ep15zXldep15Qg16TXodeZ150g16nXnCBXaU1BWC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IuKAj9eQ15XXqiDXlC1XaU1BWCDXntec15AuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaWduYWwiIG1zZ2lkPSI3MDY0NjQ1MzIwNzgyNTg1MTY3Ij4i15DXmdefINeQ15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4i15zXkCDXnteX15XXkdeoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+IteQ16TXoSDXpNeh15nXnS4iPC9zdHJpbmc+CkBAIC0xMzAsNTQgKzEzMCw1NiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiLXoNeT15nXk9eUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiLXp9em15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IldpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaW0iIG1zZ2lkPSI4Mjc0MDE3MTE4NDcyNDU1MTU1Ij4i15DXmdefINeb16jXmNeZ16EgU0lNLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX3RldGhlciIgbXNnaWQ9IjQxMDI3ODQ0OTgxNDAyNzE5NjkiPiLXqdeZ16rXldejINeQ15nXoNeY16jXoNeYINeR15nXnyDXoNeZ15nXk9eZ150g16nXnCBCbHVldG9vdGgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiLigI/XkNeZ158g15vXqNeY15nXoSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IuKAj9ep15nXqteV16Mg15DXmdeg15jXqNeg15gg15HXmdefINeg15nXmdeT15nXnSDXqdecIEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjgzNDc0ODk5OTc5MDc2MzA5MiI+Itee16bXkSDXmNeZ16HXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g15DXl9eV15bXmdedINep15wg16HXldec15zXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+IteU15LXk9eo15XXqiDXntei16jXm9eqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiLXlNeq16jXkNeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlbW92ZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIzNjAzMDk5NTE0OTAyMTgyMzUwIj4i16DXp9eUINeU16rXqNeQ15QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+IkdQUyDXnteV16TXotecLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiLXlNep15LXqiBHUFMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiJUZWxlVHlwZXdyaXRlciDXnteV16TXotecIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiLigI9HUFMg157Xldek16LXnC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4i4oCP15TXqdeS16ogR1BTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4i4oCPVGVsZVR5cGV3cml0ZXIg157Xldek16LXnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiLXptec16bXldecINeV16jXmNeYLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLXptec16bXldecINep16fXmC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INeg15PXl9eULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+IteU15XXk9ei15Qg16DXk9eX16rXlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfbm90aWZpY2F0aW9uX3NoYWRlIiBtc2dpZD0iNDY5MDI3NDg0NDQ0NzUwNDIwOCI+Iteq16jXmdehINeU16rXqNeQ15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4i15TXkteT16jXldeqINee15TXmdeo15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4i15nXmdep15XXnteZ150g15DXl9eo15XXoNeZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4i15DXpNec15nXp9em15nXldeqINeQ15fXqNeV16DXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+Itee16nXqtee16kgPHhsaWZmOmcgaWQ9IlVTRVIiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz7igI8uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+Iteg15nXmdeTIDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LuKAjyA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz4u4oCPIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMyRzPC94bGlmZjpnPi7igI8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i16HXldec15zXlCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+Itee16bXkSDXmNeZ16HXlCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGgg4oCPPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4i4oCPQmx1ZXRvb3RoIOKAjzx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4i15TXnteZ16fXldedIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4i15TXlNeq16jXkNeUINeg16fXkdei15Qg15wtPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiLXoNeq15XXoNeZIDJHLTNHINee15XXqdeR16rXmdedIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4i16DXqteV16DXmSA0RyDXnteV16nXkdeq15nXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IuKAj9eg16rXldeg15kgMkctM0cg157Xldep15HXqteZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiLigI/XoNeq15XXoNeZIDRHINee15XXqdeR16rXmdedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+Iteg16rXldeg15nXnSDXnNeg15nXmdeTINee15XXqdeR16rXmdedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIyMDg2ODE1MzA0ODU4OTY0OTU0Ij4i15TXoNeq15XXoNeZ150g157Xldep15HXqteZ150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiLXlNeS16LXqiDXnNeS15HXldecINeU157XldeS15PXqCDXqdecINep15nXnteV16kg15HXoNeq15XXoNeZ150uXG5cbteQ150g16rXpNei15nXnCDXnteX15PXqSDXoNeq15XXoNeZ150sINeZ15nXqteb158g16nXqteX15XXmdeRINei15wg15nXk9eZINeU16HXpNenINep15zXmi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4i15TXpNei15wg157Xl9eT16kg15DXqiDXlNeg16rXldeg15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjE5NDAyMzE1MjEyNzQxNDc3NzEiPiLXkNeZ158g15fXmdeR15XXqCDXnNeQ15nXoNeY16jXoNeYIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg157Xl9eV15HXqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i157Xl9ek16kgR1BTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+Itee15nXp9eV150g157XldeS15PXqCDXotecINeZ15PXmSBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiLigI9XaS1GaSDXnteX15XXkdeoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiLigI/XnteX16TXqSBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i4oCP157Xmden15XXnSDXnteV15LXk9eoINei15wg15nXk9eZIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IteR16fXqdeV16og157Xmden15XXnSDXpNei15nXnNeV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLXoNen15Qg15DXqiDXm9ecINeU15TXqteo15DXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLXpNeo15jXmSDXmdeZ16nXldedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+Itek16jXmNeZINeQ16TXnNeZ16fXpteZ15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IteU157XodeaINeZ16HXqteV15HXkSDXkdeQ15XXpNefINeQ15XXmNeV157XmNeZLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i15TXnteh15og16DXoteV15wg15vXoteqINec16jXldeX15EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IteU157XodeaINeg16LXldecINeb16LXqiDXnNeQ15XXqNeaLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiLXnteW16DXldefINen15nXoNeV15fXmdedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IteX15zXldedINeR15TXp9eZ16UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i157XpteRINeY15nXodeUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+IteY15XXotefICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+KSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiLXntec15DXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGgg4oCPKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDXnteb16nXmdeo15nXnSkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmX2xhYmVsIiBtc2dpZD0iODE1OTY1MjE0NjE0OTIxOTkzNyI+IkJsdWV0b290aCDXnteV16TXodenIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4i4oCPQmx1ZXRvb3RoIOKAjyg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g157Xm9ep15nXqNeZ150pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiLigI9CbHVldG9vdGgg157Xldek16HXpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4i15HXlNeZ16jXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLXodeZ15HXldeRINeQ15XXmNeV157XmNeZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+Iteh15nXkdeV15Eg16DXoteV15wiPC9zdHJpbmc+CkBAIC0xOTMsMTMgKzE5NSwxNSBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9sYWJlbCIgbXNnaWQ9IjkxMzUzNDQ3MDQ4OTk1NDYwNDEiPiJXaS1GaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLXnNeQINee15fXldeR16giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i15DXmdefINeo16nXqiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpINeb15HXldeZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+Iteq16bXldeS16ogV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiLXqtem15XXkteqIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4i4oCPV2ktRmkg15vXkdeV15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4i15TXoteR16gg157XodeaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i15HXlNeZ16jXldeqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IteQ15XXmNeV157XmNeZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IteU15XXk9ei15XXqiDXnteV16TXmdei15XXqiDXm9eQ158iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiLXktepINeQ15zXmdeU150g15HXm9ecINei16og16LXnCDXmdeT15kg15TXl9ec16fXlCDXnNee15jXlC5cbteU15fXnNenINec157XmNeUINep15XXkSDXnNee16LXkdeoINec157XqNeb15Yg15TXkden16jXlCDXqdecINeU157Xoteo15vXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLXlNeX15zXpyDXnten16bXlCDXlNee16HXmiDXm9eT15kg15zXlNem15nXkiDXkNeqINeU16HXqNeS15wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IteU15fXnNenINee16fXpteUINeU157XodeaINeb15PXmSDXnNeU16bXmdeSINeQ16og16HXqNeS15wg15TXntei16jXm9eqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+Itee16bXkSDXlNeZ16TXldeaINem15HXoteZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLXntem15Eg16DXmdeS15XXk9eZ15XXqiDXnteV15LXkdeo16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Itee16bXkSDXqteZ16fXldefINem15HXoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i15nXmdeq15vXnyDXqdeU16jXqdeqXG7Xnteg15XXmNeo16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IteX15nXpNeV16kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i15TXodeYINec157Xotec15Qg15vXk9eZINec15TXpteZ15IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IteU16HXmCDXqdee15DXnNeUINeb15PXmSDXnNeU16bXmdeSIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCmluZGV4IDczOTJhZTkuLmU4ZTYyYTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLjgZPjga7jg5Hjgr3jgrPjg7PjgYvjgonjga5VU0Ljg4fjg5Djg4PjgrDjgpLluLjjgavoqLHlj6/jgZnjgosiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLnlLvpnaLjgrXjgqTjgrrjgavlkIjjgo/jgZvjgabmi6HlpKciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i55S76Z2i44K144Kk44K644Gr5ZCI44KP44Gb44Gm5ouh5aSnIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4i5LqS5o+b44K644O844OgIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IuOCiOOCiuWwj+Wei+OBrueUu+mdouWQkeOBkeOBruOCouODl+ODquOBruWgtOWQiOOBr+OAgeOCuuODvOODoOOCs+ODs+ODiOODreODvOODq+OBjOaZguioiOOBruOBneOBsOOBq+ihqOekuuOBleOCjOOBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLjgrnjgq/jg6rjg7zjg7Pjgrfjg6fjg4Pjg4jjgpLkv53lrZjkuK0uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLjgrnjgq/jg6rjg7zjg7Pjgrfjg6fjg4Pjg4jjgpLkv53lrZjjgZfjgabjgYTjgb7jgZkuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IuOCueOCr+ODquODvOODs+OCt+ODp+ODg+ODiOOCkuS/neWtmOOBl+OBpuOBhOOBvuOBmeOAgiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLjg5vjg7zjg6AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLjg6Hjg4vjg6Xjg7wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLmnIDov5Hkvb/jgaPjgZ/jgqLjg5fjg6oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiLmpJzntKIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4i44Kr44Oh44OpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLlhaXlipvmlrnms5Xjga7liIfjgormm7/jgYjjg5zjgr/jg7PjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4i5LqS5o+b44K644O844Og44Oc44K/44Oz44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLlsI/jgZXjgYTnlLvpnaLjgYvjgonlpKfjgY3jgYTnlLvpnaLjgavmi6HlpKfjgIIiPC9zdHJpbmc+CkBAIC0xNTUsNiArMTU1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiLpm7vmsaA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i5qmf5YaF44Oi44O844OJPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IuePvuWcqOWcsDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IuOCouODqeODvOODoOOBrzx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz7jgavoqK3lrprjgZXjgozjgabjgYTjgb7jgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyR++9njNH44OH44O844K/44GM54Sh5Yq544Gr44Gq44KK44G+44GX44GfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEfjg4fjg7zjgr/jgYznhKHlirnjgavjgarjgorjgb7jgZfjgZ8iPC9zdHJpbmc+CkBAIC0xNjYsMTIgKzE2NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmnmjqXntprmuIjjgb8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkdQU+OBp+aknOe0ouS4rSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJHUFPjgavjgojjgornj77lnKjlnLDjgYzoqK3lrprjgZXjgozjgb7jgZfjgZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLnj77lnKjlnLDjg6rjgq/jgqjjgrnjg4jjgYzjgqLjgq/jg4bjgqPjg5YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLpgJrnn6XjgpLjgZnjgbnjgabmtojljrvjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i44Ki44OX44Oq5oOF5aCxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLnlLvpnaLjga/oh6rli5XnmoTjgavlm57ou6LjgZfjgb7jgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IueUu+mdouOBr+aoquWQkeOBjeOBq+ODreODg+OCr+OBleOCjOOBpuOBhOOBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLnlLvpnaLjga/nuKblkJHjgY3jgavjg63jg4Pjgq/jgZXjgozjgabjgYTjgb7jgZnjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4i44OH44K244O844OI44Kx44O844K5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IuOCueOCr+ODquODvOODs+OCu+ODvOODkOODvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IuOCpOODvOOCteODjeODg+ODiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i5qmf5YaF44Oi44O844OJIjwvc3RyaW5nPgpAQCAtMTk2LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLmjqXntprjgZXjgozjgabjgYTjgb7jgZvjgpMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i44ON44OD44OI44Ov44O844Kv44Gq44GXIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkgT0ZGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZp44OH44Kj44K544OX44Os44KkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4i44Ov44Kk44Ok44Os44K544OH44Kj44K544OX44Os44KkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IueUu+mdouOBruOCreODo+OCueODiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IueUu+mdouOBruaYjuOCi+OBlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLoh6rli5UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4i44GT44GT44Gr6YCa55+l44GM6KGo56S644GV44KM44G+44GZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4i5LiL44Gr44K544Ov44Kk44OX44GZ44KL44Go44CB44GE44Gk44Gn44KC6YCa55+l44KS6KGo56S644Gn44GN44G+44GZ44CCXG7jgrfjgrnjg4bjg6DjgpLnrqHnkIbjgZnjgovjgavjga/jgoLjgYbkuIDluqbkuIvjgavjgrnjg6/jgqTjg5fjgZfjgabjgY/jgaDjgZXjgYTjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLjg5Djg7zjgpLooajnpLrjgZnjgovjgavjga/jgIHnlLvpnaLjga7nq6/jgYvjgonjgrnjg6/jgqTjg5fjgZfjgb7jgZkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IuOCt+OCueODhuODoOODkOODvOOCkuihqOekuuOBmeOCi+OBq+OBr+OAgeeUu+mdouOBruerr+OBi+OCieOCueODr+OCpOODl+OBl+OBvuOBmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLoibLlj43ou6Ljg6Ljg7zjg4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLmi6HlvLXjgrPjg7Pjg4jjg6njgrnjg4jjg6Ljg7zjg4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IuiJsuijnOato+ODouODvOODiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i44ON44OD44OI44Ov44O844Kv44GM55uj6KaW44GV44KM44KLXG7loLTlkIjjgYzjgYLjgorjgb7jgZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuaknOe0ouOBl+OBvuOBmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLkuIrjgavjgrnjg6njgqTjg4njgZfjgaY8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgpLooYzjgYTjgb7jgZnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLlt6bjgavjgrnjg6njgqTjg4njgZfjgaY8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7jgpLooYzjgYTjgb7jgZnjgIIiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta2EtbGFuZC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta2EtbGFuZC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjIwOTM4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rYS1sYW5kL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3JvdGF0aW9uX2xvY2tlZCIgbXNnaWQ9Ijc2MDk2NzMwMTE0MzE1NTYwOTIiPiLhg5Thg5nhg6Dhg5Dhg5zhg5gg4YOQ4YOb4YOf4YOQ4YOb4YOQ4YOTIOGDk+GDkOGDkeGDmuGDneGDmeGDmOGDmuGDmOGDkCDhg5fhg5Dhg6Dhg5Dhg5bhg6Phg5og4YOd4YOg4YOY4YOU4YOc4YOi4YOQ4YOq4YOY4YOQ4YOo4YOYIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWthLXJHRS1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rYS1yR0UtbGFuZC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjIwOTM4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rYS1yR0UtbGFuZC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yb3RhdGlvbl9sb2NrZWQiIG1zZ2lkPSI3NjA5NjczMDExNDMxNTU2MDkyIj4i4YOU4YOZ4YOg4YOQ4YOc4YOYIOGDkOGDm+GDn+GDkOGDm+GDkOGDkyDhg5Phg5Dhg5Hhg5rhg53hg5nhg5jhg5rhg5jhg5Ag4YOX4YOQ4YOg4YOQ4YOW4YOj4YOaIOGDneGDoOGDmOGDlOGDnOGDouGDkOGDquGDmOGDkOGDqOGDmCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzA5N2U0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxNjQ5MzczNDQ4NTAwMDQ0NjYiPiLhg6Hhg5jhg6Hhg6Lhg5Thg5vhg5jhg6EgVUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4i4YOS4YOQ4YOh4YOj4YOk4YOX4YOQ4YOV4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4i4YOh4YOY4YOY4YOT4YOQ4YOcIOGDkOGDm+GDneGDqOGDmuGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiLhg5Dhg57hg5jhg6Eg4YOo4YOU4YOh4YOQ4YOu4YOU4YORIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiLhg5Hhg53hg5rhg53hg6Eg4YOS4YOQ4YOb4YOd4YOn4YOU4YOc4YOU4YOR4YOj4YOa4YOYIOGDkOGDnuGDlOGDkeGDmOGDoSDhg6Hhg5jhg5Ag4YOq4YOQ4YOg4YOY4YOU4YOa4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiLhg5Hhg53hg5rhg50g4YOQ4YOe4YOU4YOR4YOY4YOhIOGDkuGDkOGDo+GDpeGDm+GDlOGDkeGDkCI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEg4YOR4YOd4YOa4YOdIOGDkOGDnuGDmCI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTA0MDc4NDM1OTc5NDg5MDc0NCI+IiVkIOGDkeGDneGDmuGDnSDhg5Dhg57hg5giPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4i4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOYIOGDkOGDoCDhg5Dhg6Dhg5jhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiLhg5vhg5jhg5vhg5Phg5jhg5zhg5Dhg6Dhg5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4i4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4i4YOo4YOU4YOQ4YOU4YOg4YOX4YOU4YOXIOGDk+GDkOGDm+GDouGDlOGDnOGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiLhg5Hhg5Dhg6Lhg5Dhg6Dhg5Thg5Ag4YOv4YOT4YOU4YOR4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+IuGDk+GDkOGDoOGDqeGDlOGDnOGDmOGDmuGDmOGDkCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJVU0It4YOY4YOXIOGDk+GDkOGDouGDlOGDnOGDleGDkCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhIOGDm+GDruGDkOGDoOGDk+GDkOGDreGDlOGDoOGDmOGDmuGDmC5cbuGDkuGDkOGDm+GDneGDmOGDp+GDlOGDnOGDlOGDlyDhg5vhg67hg53hg5rhg53hg5Mg4YOU4YOa4YOU4YOl4YOi4YOg4YOdLeGDk+GDkOGDm+GDouGDlOGDnOGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4i4YOU4YOa4YOU4YOb4YOU4YOc4YOi4YOY4YOhIOGDkuGDkOGDm+GDneGDp+GDlOGDnOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+IuGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+IuGDl+GDleGDmOGDl+GDm+GDpOGDoOGDmOGDnOGDkOGDleGDmOGDoSDhg6Dhg5Thg5/hg5jhg5vhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4i4YOQ4YOV4YOi4YOd4YOg4YOd4YOi4YOQ4YOq4YOY4YOY4YOhIOGDlOGDmeGDoOGDkOGDnOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+IuGDk+GDkOGDk+GDo+GDm+GDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4i4YOQ4YOV4YOi4YOdLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+IuGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiJCbHVldG9vdGgg4YOb4YOY4YOU4YOg4YOX4YOU4YOR4YOj4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IuGDqOGDlOGDp+GDleGDkOGDnOGDmOGDoSDhg5vhg5Thg5fhg53hg5Phg5Thg5Hhg5jhg6Eg4YOT4YOQ4YOn4YOU4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4i4YOk4YOY4YOW4YOY4YOZ4YOj4YOg4YOYIOGDmeGDmuGDkOGDleGDmOGDkOGDouGDo+GDoOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiLhg5Lhg6Hhg6Phg6Dhg5csIOGDm+GDmOGDoeGDquGDlOGDlyDhg5Dhg57hg5rhg5jhg5nhg5Dhg6rhg5jhg5Dhg6Eg4oCePHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPuKAnCBVU0Ig4YOb4YOU4YOu4YOh4YOY4YOU4YOg4YOU4YOR4YOQ4YOh4YOX4YOQ4YOcIOGDrOGDleGDk+GDneGDm+GDmOGDoSDhg6Phg6Thg5rhg5Thg5Hhg5A/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiLhg5Lhg6Hhg6Phg6Dhg5csIOGDm+GDmOGDoeGDquGDlOGDlyDhg5Dhg57hg5rhg5jhg5nhg5Dhg6rhg5jhg5Dhg6Eg4oCePHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPuKAnCBVU0Ig4YOQ4YOl4YOh4YOU4YOh4YOj4YOQ4YOg4YOX4YOQ4YOcIOGDrOGDleGDk+GDneGDm+GDmOGDoSDhg6Phg6Thg5rhg5Thg5Hhg5A/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjUxNjEyMDUyNTg2MzUyNTMyMDYiPiLhg5Lhg6Hhg6Phg6Dhg5cgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiAsIOGDoOGDneGDk+GDlOGDoeGDkOGDqiDhg5Thg6EgVVNCIOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDkCDhg6jhg5Thg5Thg6Dhg5fhg5Thg5Hhg6Phg5rhg5jhg5A/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLhg5Lhg6Hhg6Phg6Dhg5cgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiAsIOGDoOGDneGDk+GDlOGDoeGDkOGDqiDhg5Thg6EgVVNCIOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDkCDhg6jhg5Thg5Thg6Dhg5fhg5Thg5Hhg6Phg5rhg5jhg5A/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i4YOQ4YOg4YOq4YOU4YOg4YOX4YOYIOGDk+GDkOGDp+GDlOGDnOGDlOGDkeGDo+GDmuGDmCDhg5Dhg57hg5gg4YOQ4YOgIOGDm+GDo+GDqOGDkOGDneGDkeGDoSDhg5Dhg5sgVVNCIOGDkOGDpeGDoeGDlOGDoeGDo+GDkOGDoOGDl+GDkOGDnC4g4YOo4YOU4YOY4YOi4YOn4YOV4YOU4YOXIOGDm+GDlOGDouGDmCDhg5Dhg5sg4YOQ4YOl4YOh4YOU4YOh4YOj4YOQ4YOg4YOY4YOhIOGDqOGDlOGDoeGDkOGDruGDlOGDkSA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iVVNCIOGDkOGDpeGDoeGDlOGDoeGDo+GDkOGDoOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4i4YOc4YOQ4YOu4YOV4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4i4YOQ4YObIFVTQiDhg5vhg53hg6zhg6fhg53hg5Hhg5jhg5rhg53hg5Hhg5jhg6Eg4YOc4YOQ4YOS4YOj4YOa4YOY4YOh4YOu4YOb4YOU4YOV4YOQ4YOTIOGDkuGDkOGDm+GDneGDp+GDlOGDnOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IuGDkOGDleGDouGDneGDm+GDkOGDouGDo+GDoOGDkOGDkyDhg5Lhg5Dhg5vhg53hg5jhg6fhg5Thg5zhg5Qg4YOQ4YObIFVTQiDhg5Dhg6Xhg6Hhg5Thg6Hhg6Phg5Dhg6Dhg5jhg6Hhg5fhg5Xhg5jhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ190aXRsZSIgbXNnaWQ9IjQ1MTM5MTgzOTMzODcxNDE5NDkiPiLhg5Lhg5Dhg5Dhg6Xhg6Lhg5jhg6Phg6Dhg5Phg5Thg6EgVVNCIOGDkuGDkOGDm+GDkOGDoOGDl+GDleGDkD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4i4YOZ4YOd4YOb4YOe4YOY4YOj4YOi4YOU4YOg4YOY4YOhIFJTQSDhg5Lhg5Dhg6Hhg5Dhg6bhg5Thg5Hhg5jhg6Eg4YOX4YOY4YOX4YOY4YOhIOGDkOGDnOGDkOGDkeGDlOGDreGDk+GDmOGDkDpcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IuGDp+GDneGDleGDlOGDmuGDl+GDleGDmOGDoSDhg5Phg5Dhg6Dhg5fhg5Qg4YOc4YOU4YOR4YOQIOGDkOGDmyDhg5nhg53hg5vhg57hg5jhg6Phg6Lhg5Thg6Dhg5jhg5Phg5Dhg5wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i4YOb4YOQ4YOh4YOo4YOi4YOQ4YOR4YOYIOGDqOGDlOGDquGDleGDkOGDmuGDlOGDlyDhg5Thg5nhg6Dhg5Dhg5zhg5jhg6Eg4YOo4YOU4YOh4YOQ4YOV4YOh4YOU4YOR4YOQ4YOTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLhg5Lhg5Dhg6zhg5jhg5Thg5cg4YOU4YOZ4YOg4YOQ4YOc4YOY4YOhIOGDqOGDlOGDoeGDkOGDleGDoeGDlOGDkeGDkOGDky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i4YOh4YOZ4YOg4YOY4YOc4YOo4YOd4YOi4YOY4YOhIOGDqOGDlOGDnOGDkOGDruGDleGDkOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IuGDlOGDmeGDoOGDkOGDnOGDmOGDoSDhg6Hhg6Phg6Dhg5Dhg5fhg5jhg6Eg4YOo4YOU4YOc4YOQ4YOu4YOV4YOQ4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLhg5Thg5nhg6Dhg5Dhg5zhg5jhg6Eg4YOh4YOj4YOg4YOQ4YOX4YOYIOGDqOGDlOGDnOGDkOGDruGDo+GDmuGDmOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IuGDoeGDmeGDoOGDmOGDnOGDqOGDneGDouGDmCDhg5Lhg5Dhg5Phg5Dhg6bhg5Thg5Hhg6Phg5rhg5jhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+IuGDqOGDlOGDlOGDruGDlOGDlyDhg5Thg5nhg6Dhg5Dhg5zhg5jhg6Eg4YOh4YOj4YOg4YOQ4YOX4YOY4YOhIOGDoeGDkOGDnOGDkOGDruGDkOGDleGDkOGDky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90aXRsZSIgbXNnaWQ9IjcwNTc4MTExNjc0NjkyMjc3MSI+IuGDleGDlOGDoCDhg5vhg53hg67hg5Thg6Dhg67hg5Phg5Ag4YOU4YOZ4YOg4YOQ4YOc4YOY4YOhIOGDkOGDnOGDkOGDkeGDlOGDreGDk+GDmOGDoSDhg5Lhg5Dhg5Phg5Dhg6bhg5Thg5Hhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiLhg5Thg5nhg6Dhg5Dhg5zhg5jhg6Eg4YOh4YOj4YOg4YOQ4YOX4YOYIOGDleGDlOGDoCDhg6jhg5Thg5jhg5zhg5Dhg67hg5AuIOGDqOGDlOGDoeGDkOGDq+GDmuGDneGDkCwg4YOb4YOU4YOu4YOh4YOY4YOU4YOg4YOU4YOR4YOQIOGDo+GDmeGDleGDlCDhg5Phg5Dhg5nhg5Dhg5Xhg5Thg5Hhg6Phg5rhg5jhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iVVNCIOGDpOGDkOGDmOGDmuGDmOGDoSDhg6Lhg6Dhg5Dhg5zhg6Hhg6Thg5Thg6Dhg5jhg6Eg4YOe4YOQ4YOg4YOQ4YOb4YOU4YOi4YOg4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX210cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI0MzMzNTA0NDEzNTYzMDIzNjI2Ij4i4YOb4YOU4YOT4YOY4YOQLeGDoeGDkOGDmeGDoOGDkOGDleGDkOGDkyAoTVRQKSDhg6nhg5Dhg6Dhg5fhg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLhg5vhg5jhg6Phg5Thg6Dhg5fhg5Thg5cg4YOg4YOd4YOS4YOd4YOg4YOqIOGDmeGDkOGDm+GDlOGDoOGDkCAoUFRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4iQW5kcm9pZCBGaWxlIFRyYW5zZmVyIOGDkOGDnuGDmOGDoSDhg5Phg5Dhg6fhg5Thg5zhg5Thg5Hhg5AgTWFjLeGDl+GDleGDmOGDoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+IuGDo+GDmeGDkOGDnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLhg6Hhg5Dhg6zhg6fhg5jhg6Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLhg5vhg5Thg5zhg5jhg6MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLhg5Hhg53hg5rhg53hg6Eg4YOS4YOQ4YOb4YOd4YOn4YOU4YOc4YOU4YOR4YOj4YOa4YOYIOGDkOGDnuGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IuGDq+GDmOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLhg5nhg5Dhg5vhg5Thg6Dhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IuGDqOGDlOGDp+GDleGDkOGDnOGDmOGDoSDhg5vhg5Thg5fhg53hg5Phg5jhg6Eg4YOS4YOQ4YOT4YOQ4YOg4YOX4YOV4YOY4YOhIOGDpuGDmOGDmuGDkOGDmeGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4i4YOX4YOQ4YOV4YOh4YOU4YOR4YOQ4YOT4YOYIOGDm+GDkOGDoeGDqOGDouGDkOGDkeGDmOGDoOGDlOGDkeGDmOGDoSDhg6bhg5jhg5rhg5Dhg5nhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLhg6jhg5Thg6rhg5Xhg5Dhg5rhg5Thg5cg4YOe4YOQ4YOi4YOQ4YOg4YOQIOGDlOGDmeGDoOGDkOGDnOGDmCDhg6Phg6Thg6Dhg50g4YOT4YOY4YOT4YOY4YOXLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiJCbHVldG9vdGgg4YOT4YOQ4YOZ4YOQ4YOV4YOo4YOY4YOg4YOU4YOR4YOj4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9Ijc0MTY2NDg2Njk5NzY4NzAxNzUiPiJCbHVldG9vdGgg4YOZ4YOQ4YOV4YOo4YOY4YOg4YOYIOGDkuGDkOGDrOGDp+GDleGDlOGDouGDmOGDmuGDmOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiLhg5Hhg5Dhg6Lhg5Dhg6Dhg5Thg5Ag4YOT4YOQ4YOb4YOv4YOT4YOQ4YOg4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+IuGDkeGDkOGDouGDkOGDoOGDlOGDmOGDkCDhg5Thg6Dhg5cg4YOW4YOd4YOa4YOW4YOU4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiLhg5Thg5rhg5Thg5vhg5Thg5zhg6Lhg5gg4YOd4YOgIOGDluGDneGDmuGDluGDlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdGhyZWVfYmFycyIgbXNnaWQ9IjIzMDI5ODMzMzA4NjUwNDA0NDYiPiLhg5Thg5rhg5Thg5vhg5Thg5zhg6Lhg5gg4YOh4YOQ4YObIOGDluGDneGDmuGDluGDlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfZnVsbCIgbXNnaWQ9Ijg5MDkxMjI0MDE3MjAxNTg1ODIiPiLhg5Thg5rhg5Thg5vhg5Thg5zhg6Lhg5gg4YOh4YOQ4YOV4YOh4YOU4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4i4YOi4YOU4YOa4YOU4YOk4YOd4YOc4YOYIOGDkOGDoCDhg5Dhg6Dhg5jhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9vbmVfYmFyIiBtc2dpZD0iNjg3Njk5Mjc4MTMyNjY0MTE1Ij4i4YOi4YOU4YOa4YOU4YOk4YOd4YOc4YOY4YOhIOGDoeGDmOGDkuGDnOGDkOGDmuGDmCDhg5Thg6Dhg5cg4YOW4YOd4YOa4YOW4YOU4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdHdvX2JhcnMiIG1zZ2lkPSI4Mzg0OTA1MzgyODA0ODE1MjAxIj4i4YOi4YOU4YOa4YOU4YOk4YOd4YOc4YOY4YOhIOGDoeGDmOGDkuGDnOGDkOGDmuGDmCDhg53hg6Ag4YOW4YOd4YOa4YOW4YOU4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiLhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5jhg6Eg4YOh4YOY4YOS4YOc4YOQ4YOa4YOYIOGDoeGDkOGDmyDhg5bhg53hg5rhg5bhg5Thg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY0NzE4MzQ4Njg1ODA3NTc4OTgiPiLhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5jhg6Eg4YOh4YOY4YOS4YOc4YOQ4YOa4YOYIOGDoeGDoOGDo+GDmuGDmOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2RhdGEiIG1zZ2lkPSI0NzkxOTY2Mjk1MDk2ODY3NTU1Ij4i4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOU4YOR4YOYIOGDkOGDoCDhg5Dhg6Dhg5jhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4i4YOX4YOQ4YOg4YOY4YOm4YOYIOGDluGDneGDmuGDluGDlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdHdvX2JhcnMiIG1zZ2lkPSI2MTY2MDE4NDkyMzYwNDMyMDkxIj4i4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOU4YOR4YOY4YOhIOGDkuGDkOGDk+GDkOGDquGDlOGDm+GDkDog4YOd4YOg4YOYIOGDluGDneGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IuGDm+GDneGDnOGDkOGDquGDlOGDm+GDlOGDkeGDmOGDoSDhg5Lhg5Dhg5Phg5Dhg6rhg5Thg5vhg5A6IOGDoeGDkOGDm+GDmCDhg5bhg53hg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4i4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOX4YOQIOGDkuGDkOGDk+GDkOGDquGDlOGDm+GDmOGDoSDhg6Hhg5Dhg5jhg5vhg5Thg5Phg50g4YOh4YOY4YOS4YOc4YOQ4YOa4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vZmYiIG1zZ2lkPSIzMTc3MzgwMjk2Njk3OTMzNjI3Ij4iV2lmaSDhg5Lhg5Dhg5vhg53hg6Dhg5fhg6Phg5rhg5jhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IldpZmkg4YOQ4YOgIOGDkOGDoOGDmOGDoSDhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg6Phg5rhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4iV2lmaSDhg6Hhg5jhg5Lhg5zhg5Dhg5rhg5gg4YOU4YOg4YOXIOGDluGDneGDmuGDluGDlOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4iV2lmaSDhg6Hhg5jhg5Lhg5zhg5Dhg5rhg5gg4YOd4YOgIOGDluGDneGDmuGDluGDlOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiJXaWZpIOGDoeGDkOGDm+GDmCDhg5bhg53hg5rhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IldpZmkg4YOh4YOY4YOS4YOc4YOQ4YOa4YOYIOGDoeGDoOGDo+GDmuGDmOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+IldpTUFYIOGDkOGDoCDhg5Dhg6Dhg5jhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYIOGDlOGDoOGDl+GDmCDhg6Hhg5Xhg5Thg6Lhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJXaU1BWC3hg5jhg6Eg4YOd4YOg4YOYIOGDluGDneGDmuGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4iV2lNQVgt4YOY4YOhIOGDoeGDkOGDm+GDmCDhg5bhg53hg5rhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3NjgwODk5ODY3OTU1Nzk1NTgiPiJXaU1BWCDhg6Hhg5jhg5Lhg5zhg5Dhg5rhg5gg4YOh4YOg4YOj4YOa4YOY4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+IuGDoeGDmOGDkuGDnOGDkOGDmuGDmCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjYzOTUzMjYyNzYyMTM0MDI4ODMiPiLhg5Dhg6Ag4YOQ4YOg4YOY4YOhIOGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDo+GDmuGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3plcm9fYmFycyIgbXNnaWQ9IjM4MDYwNjAyMjQ0NjcwMjc4ODciPiLhg6Hhg5jhg5Lhg5zhg5Dhg5rhg5gg4YOc4YOj4YOaIOGDluGDneGDmuGDluGDlOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4i4YOU4YOg4YOX4YOYIOGDluGDneGDmuGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+IuGDneGDoOGDmCDhg6Hhg5Xhg5Thg6Lhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+IuGDoeGDkOGDm+GDmCDhg5bhg53hg5rhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiLhg6Hhg6Dhg6Phg5rhg5gg4YOh4YOY4YOS4YOc4YOQ4YOa4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiLhg6nhg5Dhg6Dhg5fhg6Phg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+IuGDkuGDkOGDm+GDneGDoOGDl+GDo+GDmuGDmOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IuGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDo+GDmuGDmOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjXhg5Lhg5EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl80ZyIgbXNnaWQ9Ijc3NDEwMDA3NTA2MzAwODk2MTIiPiI0RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2x0ZSIgbXNnaWQ9IjU0MTM0Njg4MDg2Mzc1NDA2NTgiPiJMVEUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9jZG1hIiBtc2dpZD0iNjEzMjY0ODE5Mzk3ODgyMzAyMyI+IkNETUEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9yb2FtaW5nIiBtc2dpZD0iNTk3NzM2MjMzMzQ2NjU1NjA5NCI+IuGDoOGDneGDo+GDm+GDmOGDnOGDkuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2VkZ2UiIG1zZ2lkPSI0NDc3NDU3MDUxNjMxOTc5Mjc4Ij4iRWRnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3dpZmkiIG1zZ2lkPSIyMzI0NDk2NzU2NTkwNjQ1MjIxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiJTSU0g4YOQ4YOgIOGDkOGDoOGDmOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4iQmx1ZXRvb3RoLeGDmOGDoSDhg6nhg5Dhg6Dhg5fhg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiLhg5fhg5Xhg5jhg5fhg5vhg6Thg6Dhg5jhg5zhg5Dhg5Xhg5jhg6Eg4YOg4YOU4YOf4YOY4YOb4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsIiBtc2dpZD0iNzQ1MTQ3NDE4NzExMzM3MTk2NSI+IuGDkeGDkOGDouGDkOGDoOGDlOGDkDogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGDnuGDoOGDneGDquGDlOGDnOGDouGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+IuGDoeGDmOGDoeGDouGDlOGDm+GDmOGDoSDhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg5Thg5Hhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiLhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlbW92ZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIzNjAzMDk5NTE0OTAyMTgyMzUwIj4i4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOY4YOhIOGDkuGDkOGDoeGDo+GDpOGDl+GDkOGDleGDlOGDkeGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+IkdQUyDhg5Lhg5Dhg5Dhg6Xhg6Lhg5jhg6Phg6Dhg5Phg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IkdQUy3hg5jhg6Eg4YOT4YOQ4YOT4YOS4YOU4YOc4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4i4YOi4YOU4YOa4YOU4YOi4YOQ4YOY4YOe4YOYIOGDqeGDkOGDoOGDl+GDo+GDmuGDmOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl92aWJyYXRlIiBtc2dpZD0iNjY2NTg1MzYzMzY0MTU1MDU1Ij4i4YOV4YOY4YOR4YOg4YOQ4YOq4YOY4YOY4YOhIOGDoOGDlOGDn+GDmOGDm+GDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i4YOj4YOu4YOb4YOdIOGDoOGDlOGDn+GDmOGDm+GDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOGDkOGDm+GDneGDqOGDmuGDmOGDmuGDmOGDkCDhg6Hhg5jhg5jhg5Phg5Dhg5wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4i4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOQIOGDrOGDkOGDmOGDqOGDkOGDmuGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfbm90aWZpY2F0aW9uX3NoYWRlIiBtc2dpZD0iNDY5MDI3NDg0NDQ0NzUwNDIwOCI+IuGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmOGDoSDhg6Thg5Dhg6Dhg5Phg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4i4YOh4YOs4YOg4YOQ4YOk4YOYIOGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiLhg5Hhg53hg5rhg50g4YOQ4YOe4YOU4YOR4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiLhg5vhg53hg5vhg67hg5vhg5Dhg6Dhg5Thg5Hhg5Thg5rhg5g6IDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiLhg5vhg53hg5Hhg5jhg5rhg6Phg6Dhg5jhg6EgPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiLhg5Thg5rhg5Thg5vhg5Thg5zhg6Lhg5g6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i4YOX4YOV4YOY4YOX4YOb4YOk4YOg4YOY4YOc4YOQ4YOV4YOY4YOhIOGDoOGDlOGDn+GDmOGDm+GDmCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLhg5vhg5Phg5Thg5Hhg5Dhg6Dhg5Thg53hg5Hhg5AgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLhg5vhg5Dhg6bhg5Xhg5jhg6vhg5Dhg6Dhg5Ag4YOT4YOQ4YOn4YOU4YOc4YOU4YOR4YOj4YOa4YOY4YOQOiA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cg4YOY4YOc4YOi4YOU4YOg4YOc4YOU4YOi4YOYIOGDkuGDkOGDmOGDl+GDmOGDqOGDkC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg5gg4YOS4YOQ4YOX4YOY4YOo4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+IuGDm+GDneGDkeGDmOGDmuGDo+GDoOGDmCDhg5jhg5zhg6Lhg5Thg6Dhg5zhg5Thg6Lhg5gg4YOS4YOQ4YOY4YOX4YOY4YOo4YOQLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+IuGDmOGDnOGDouGDlOGDoOGDnOGDlOGDouGDmCDhg5Lhg5Dhg5jhg5fhg5jhg6jhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4i4YOX4YOl4YOV4YOU4YOcIOGDm+GDmOGDkOGDpuGDrOGDmOGDlOGDlyDhg5jhg5zhg6Lhg5Thg6Dhg5zhg5Thg6Lhg5jhg6Eg4YOS4YOQ4YOb4YOd4YOn4YOU4YOc4YOU4YOR4YOY4YOhIOGDkuGDkOGDnOGDoeGDkOGDluGDpuGDleGDoOGDo+GDmiDhg5rhg5jhg5vhg5jhg6Lhg6EuXG5cbuGDl+GDoyDhg5Lhg5Dhg5Dhg6Xhg6Lhg5jhg6Phg6Dhg5Thg5Hhg5cg4YOY4YOc4YOi4YOU4YOg4YOc4YOU4YOi4YOhLCDhg6jhg5Thg6Hhg5Dhg6vhg5rhg53hg5Ag4YOb4YOd4YOR4YOY4YOa4YOj4YOg4YOYIOGDneGDnuGDlOGDoOGDkOGDouGDneGDoOGDmOGDoeGDl+GDleGDmOGDoSDhg5Phg5Dhg5vhg5Dhg6Lhg5Thg5Hhg5jhg5fhg5gg4YOX4YOQ4YOc4YOu4YOY4YOhIOGDkuGDkOGDk+GDkOGDruGDk+GDkCDhg5vhg53hg5Lhg5jhg6zhg5jhg53hg5cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfZW5hYmxlIiBtc2dpZD0iNzcyOTc3MjAzOTIwODY2NDYwNiI+IuGDm+GDneGDnOGDkOGDquGDlOGDm+GDlOGDkeGDmOGDoSDhg67hg5Thg5rhg5Dhg67hg5rhg5Ag4YOp4YOQ4YOg4YOX4YOV4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IuGDmOGDnOGDouGDlOGDoOGDnOGDlOGDoiDhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5gg4YOQ4YOgIOGDkOGDoOGDmOGDoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIOGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDo+GDmuGDmOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iR1BTLeGDmOGDoSDhg6vhg5Thg5Hhg5zhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iR1BTLeGDmOGDlyDhg5Phg5Dhg5Phg5Lhg5Thg5zhg5jhg5rhg5gg4YOb4YOT4YOU4YOR4YOQ4YOg4YOU4YOd4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i4YOb4YOT4YOU4YOR4YOQ4YOg4YOU4YOd4YOR4YOY4YOhIOGDm+GDneGDl+GDruGDneGDleGDnOGDlOGDkeGDmCDhg5Dhg6Xhg6Lhg5jhg6Phg6Dhg5jhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLhg6fhg5Xhg5Thg5rhg5Ag4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOY4YOhIOGDrOGDkOGDqOGDmuGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLhg5Dhg57hg5jhg6Eg4YOo4YOU4YOh4YOQ4YOu4YOU4YORIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLhg5Thg5nhg6Dhg5Dhg5zhg5gg4YOo4YOU4YOi4YOg4YOY4YOQ4YOa4YOT4YOU4YOR4YOQIOGDkOGDleGDouGDneGDm+GDkOGDouGDo+GDoOGDkOGDky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IuGDlOGDmeGDoOGDkOGDnOGDmCDhg5Phg5Dhg5Hhg5rhg53hg5nhg5jhg5rhg5jhg5Ag4YOX4YOQ4YOg4YOQ4YOW4YOj4YOaIOGDneGDoOGDmOGDlOGDnOGDouGDkOGDquGDmOGDkOGDqOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLhg5Thg5nhg6Dhg5Dhg5zhg5gg4YOT4YOQ4YOR4YOa4YOd4YOZ4YOY4YOa4YOY4YOQIOGDnuGDneGDoOGDouGDoOGDlOGDouGDmOGDoSDhg53hg6Dhg5jhg5Thg5zhg6Lhg5Dhg6rhg5jhg5Dhg6jhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IuGDoeGDkOGDk+GDlOGDoeGDlOGDoOGDouGDnSDhg6fhg6Phg5fhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGF5ZHJlYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiLhg5Thg5fhg5Thg6Dhg5zhg5Thg6Lhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IuGDl+GDleGDmOGDl+GDm+GDpOGDoOGDmOGDnOGDkOGDleGDmOGDoSDhg6Dhg5Thg5/hg5jhg5vhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnaW5nX2xhYmVsIiBtc2dpZD0iNDkwMDc0Nzc0NDY1MzA5MjA5Ij4i4YOT4YOQ4YOb4YOj4YOu4YOi4YOV4YOQLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IuGDk+GDkOGDm+GDo+GDruGDouGDo+GDmuGDmOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhg5vhg53hg6zhg6fhg53hg5Hhg5jhg5rhg53hg5Hhg5ApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiJCbHVldG9vdGgg4YOS4YOQ4YOb4YOd4YOg4YOX4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLhg6Hhg5jhg5nhg5Dhg6jhg5nhg5Dhg6jhg5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IuGDkOGDleGDouGDnSDhg5vhg53hg5Hhg6Dhg6Phg5zhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i4YOg4YOd4YOi4YOQ4YOq4YOY4YOY4YOhIOGDqeGDkOGDmeGDlOGDouGDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiLhg6jhg5Thg6fhg5Xhg5Dhg5zhg5jhg6Eg4YOb4YOU4YOX4YOd4YOT4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4i4YOb4YOT4YOU4YOR4YOQ4YOg4YOU4YOd4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IuGDm+GDk+GDlOGDkeGDkOGDoOGDlOGDneGDkeGDkCDhg5Lhg5Dhg5vhg53hg6Dhg5fhg6Phg5rhg5jhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i4YOb4YOU4YOT4YOY4YOQIOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4i4YOb4YOu4YOd4YOa4YOd4YOTIOGDkuGDkOGDk+GDkOGDo+GDk+GDlOGDkeGDlOGDmuGDmCDhg5Phg5Dhg67hg5vhg5Dhg6Dhg5Thg5Hhg5jhg6Eg4YOW4YOQ4YOg4YOU4YOR4YOY4YOh4YOX4YOV4YOY4YOhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfc2V0dGluZ3NfbGFiZWwiIG1zZ2lkPSI1MzI2NTU2NTkyNTc4MDY1NDAxIj4i4YOe4YOQ4YOg4YOQ4YOb4YOU4YOi4YOg4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdGltZV9sYWJlbCIgbXNnaWQ9IjQ2MzU5NjkxODIyMzk3MzY0MDgiPiLhg5Phg6Dhg50iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc191c2VyX2xhYmVsIiBtc2dpZD0iNTIzODk5NTYzMjEzMDg5Nzg0MCI+IuGDm+GDlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i4YOQ4YOgIOGDkOGDoOGDmOGDoSDhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg6Phg5rhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IuGDpeGDoeGDlOGDmuGDmCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg4YOS4YOQ4YOb4YOd4YOg4YOX4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IkNhc3QgU2NyZWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i4YOS4YOQ4YOc4YOQ4YOX4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IuGDkOGDleGDouGDneGDm+GDkOGDouGDo+GDoOGDkOGDkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLhg6Thg5Thg6Dhg5fhg5Ag4YOY4YOc4YOV4YOU4YOg4YOh4YOY4YOY4YOhIOGDoOGDlOGDn+GDmOGDm+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IuGDkuGDkOGDo+GDm+GDr+GDneGDkeGDlOGDoeGDlOGDkeGDo+GDmuGDmCDhg5nhg53hg5zhg6Lhg6Dhg5Dhg6Hhg6Lhg5jhg6Eg4YOg4YOU4YOf4YOY4YOb4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLhg6Thg5Thg6Dhg5fhg5Ag4YOZ4YOd4YOg4YOU4YOl4YOq4YOY4YOY4YOhIOGDoOGDlOGDn+GDmOGDm+GDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i4YOo4YOU4YOh4YOQ4YOr4YOa4YOd4YOQIOGDpeGDoeGDlOGDmuGDluGDlFxu4YOb4YOd4YOc4YOY4YOi4YOd4YOg4YOY4YOc4YOS4YOYIOGDruGDneGDoOGDquGDmOGDlOGDmuGDk+GDlOGDkeGDneGDk+GDlOGDoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i4YOr4YOY4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuGDkuGDkOGDkOGDoeGDoOGDmOGDkOGDmuGDlOGDlyDhg5bhg5Thg5vhg53hg5cgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LeGDl+GDleGDmOGDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiLhg5Lhg5Dhg5Dhg6Hhg6Dhg5jhg5Dhg5rhg5Thg5cg4YOb4YOQ4YOg4YOq4YOu4YOc4YOY4YOVIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi3hg5fhg5Xhg5jhg6EuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWttLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWttLWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE0OGNjMwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta20tbGFuZC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yb3RhdGlvbl9sb2NrZWQiIG1zZ2lkPSI3NjA5NjczMDExNDMxNTU2MDkyIj4i4Z6l4Z6h4Z684Z6c4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4oCL4oCL4Z6H4Z624Z6U4Z+L4oCL4Z6f4Z+E4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6R4Z634Z6f4oCL4Z6V4Z+S4Z6K4Z+B4Z6A4Z+UIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWttLXJLSC1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbS1yS0gtbGFuZC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTQ4Y2MzCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbS1yS0gtbGFuZC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yb3RhdGlvbl9sb2NrZWQiIG1zZ2lkPSI3NjA5NjczMDExNDMxNTU2MDkyIj4i4Z6l4Z6h4Z684Z6c4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4oCL4oCL4Z6H4Z624Z6U4Z+L4oCL4Z6f4Z+E4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6R4Z634Z6f4oCL4Z6V4Z+S4Z6K4Z+B4Z6A4Z+UIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MjNjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIwOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+IuGeheGfhuGejuGeu+GeheKAi+GelOGfkuGemuGekeGetuGegOGfi+KAi+GelOGfkuGemuGeluGfkOGek+GfkuGekiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiLhnp/hnpjhn5LhnqLhnrbhno8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiLhnpnhnoDigIvhnoXhn4HhnonigIvhnpbhnrjigIvhnpThnonhn5LhnofhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4i4Z6W4Z+Q4Z6P4Z+M4Z6Y4Z624Z6T4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiLhnoLhn5LhnpjhnrbhnpPigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpDhn5Lhnpjhnrjhn5ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IuGelOGeiuGet+Gen+GfgeGekuKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GekOGfkuGemOGeuOGflyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IuGegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GekOGfkuGemOGeuCDhn6EiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiLhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpDhn5Lhnpjhnrjhn5cgJWQiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6A4Z624Z6a4oCL4Z6H4Z684Z6T4oCL4Z6K4Z+G4Z6O4Z654Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiLhnpThnpPhn5Lhno8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4i4Z6A4Z624Z6a4oCL4Z6H4Z684Z6T4oCL4Z6K4Z+G4Z6O4Z654Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4i4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6Q4Z+S4Z6YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfc3VidGl0bGUiIG1zZ2lkPSIxNzUyMDQwMDYyMDg3ODI5MTk2Ij4i4Z6H4Z634Z6P4oCL4Z6i4Z6f4Z+L4oCL4Z6Q4Z+S4Z6Y4oCL4Z6g4Z6+4Z6Z4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4i4Z6T4Z+F4oCL4Z6f4Z6b4Z+LIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkJSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IuGemOGet+Gek+KAi+GeguGetuGfhuGekeGfkuGemuKAi+GegOGetuGemuKAi+GelOGeieGfkuGeheGevOGem+KAi+Gej+GetuGemOKAi+GemeGevOGeouGfgeGen+GelOGfiuGeuOGflFxu4Z6U4Z+S4Z6a4Z6+4oCL4Z6P4Z+C4oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6Q4Z+S4Z6Y4oCL4Z6K4Z+C4Z6b4oCL4Z6U4Z624Z6T4oCL4Z6V4Z+S4Z6K4Z6b4Z+L4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+IuGegOGetuGemuKAi+GelOGfkuGemuGevuKAi+GekOGfkuGemCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+IuGegOGetuGemuKAi+GegOGfhuGejuGej+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4i4Z6c4Z+J4Z624Z6Z4Z6g4Z+S4Z6c4Z624Z6ZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiLhnpbhn4HhnpvigIvhnofhnrfhn4figIvhnpnhnpPhn5Lhno/hnqDhn4Thn4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4i4Z6U4Z6E4Z+S4Z6c4Z634Z6b4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4oCL4Z6f4Z+S4Z6c4Z+Q4Z6Z4oCL4Z6U4Z+S4Z6a4Z6c4Z6P4Z+S4Z6P4Z63Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4i4Z6f4Z+S4Z6E4Z624Z6P4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiLhnp/hn5Lhnpzhn5DhnpnhnpThn5Lhnprhnpzhno/hn5Lhno/hnrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX25vdGlmaWNhdGlvbnMiIG1zZ2lkPSIzOTcxNDYxNzYyODA5MDUxMzciPiLhnoDhnrbhnprigIvhnofhnrzhnpPigIvhnorhn4bhno7hnrnhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4i4Z6U4Z624Z6T4oCL4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6U4Z+K4Z+S4Z6b4Z684Z6S4Z684Z6fIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4i4Z6a4Z+A4Z6U4Z6F4Z+G4oCL4Z6c4Z634Z6S4Z644Z6f4Z624Z6f4Z+S4Z6P4Z+S4Z6a4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6bIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4i4Z6A4Z+S4Z6K4Z624Z6a4oCL4Z6F4Z674Z6F4oCL4Z6W4Z634Z6P4Z6U4Z+S4Z6a4Z624Z6A4Z6KIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+IuGesuGfkuGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IOGeheGevOGem+KAi+GeiuGfhuGejuGevuGemuGegOGetuGemuKAi+Gep+GelOGegOGemuGejuGfjeKAi+GemeGevOGeouGfgeGen+GelOGfiuGeuD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IuGesuGfkuGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuCA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IOGeheGevOGem+KAi+GeiuGfhuGejuGevuGemuGegOGetuGemuKAi+Gep+GelOGegOGemuGejuGfjeKAi+GemeGevOGeouGfgeGen+GelOGfiuGeuD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IuGelOGevuGegCA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOGeluGfgeGem+KAi+GelOGetuGek+KAi+Gel+GfkuGeh+GetuGelOGfi+KAi+Gep+GelOGegOGemuGejuGfjeKAi+GemeGevOGeouGfgeGen+GelOGfiuGeuOKAi+Gek+GfgeGfhz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IuGelOGevuGegCA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOGeluGfgeGem+KAi+GelOGetuGek+KAi+Gel+GfkuGeh+GetuGelOGfi+KAi+Gep+GelOGegOGemuGejuGfjeKAi+GemeGevOGeouGfgeGen+GelOGfiuGeuD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiLhnoLhn5LhnpjhnrbhnpPigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpThnrbhnpPigIvhnorhn4bhnqHhnr7hnoTigIvhnorhn4bhno7hnr7hnprhnoDhnrbhnprigIvhnofhnrbigIvhnpjhnr3hnpnigIvhnqfhnpThnoDhnprhno7hn43igIvhnpnhnrzhnqLhn4Hhnp/hnpThn4rhnrjhn5Qg4Z6f4Z+S4Z6c4Z+C4Z6E4Z6Z4Z6b4Z+L4oCL4Z6U4Z6T4Z+S4Z6Q4Z+C4Z6Y4oCL4Z6i4Z+G4Z6W4Z644oCL4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4oCL4Z6T4Z+B4Z+H4oCL4Z6T4Z+FIDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiLhnqfhnpThnoDhnprhno7hn43igIvhnpnhnrzhnqLhn4Hhnp/hnpThn4rhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF92aWV3IiBtc2dpZD0iNjMwNDU2NTU1MzIxODE5Mjk5MCI+IuGemOGevuGemyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IuGelOGfkuGemuGevuKAi+Gej+GetuGemOKAi+Gem+GfhuGek+GetuGfhuGeiuGevuGemOKAi+Gen+GemOGfkuGemuGetuGelOGfi+KAi+Gep+GelOGegOGemuGejuGfjeKAi+GemeGevOGeouGfgeGen+GelOGfiuGeuOKAi+Gek+GfgeGfhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IuGelOGfkuGemuGevuKAi+Gej+GetuGemOKAi+Gem+GfhuGek+GetuGfhuGeiuGevuGemOKAi+Gen+GemOGfkuGemuGetuGelOGfi+KAi+GegeGfkuGen+GfguKAi+GemeGevOGeouGfgeGen+GelOGfiuGeuOKAi+Gek+GfgeGfhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4i4Z6i4Z6T4Z674Z6J4Z+S4Z6J4Z624Z6P4oCL4Z6A4Z624Z6a4oCL4Z6A4Z+C4oCL4Z6A4Z+G4Z6g4Z674Z6f4oCL4Z6Z4Z684Z6i4Z+B4Z6f4Z6U4Z+K4Z64PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiLhnp/hn5LhnpPhnrbhnpjigIvhnpjhn5LhnprhnrbhnpjigIvhnorhn4PigIsgUlNBIOGemuGelOGen+Gfi+KAi+GegOGeu+GfhuGeluGfkuGemeGevOGekeGfkOGemuKAi+GeguGeuuGfliBcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IuGeouGek+Geu+GeieGfkuGeieGetuGej+KAi+Geh+GetuKAi+Gek+Get+GeheGfkuGeheKAi+Gen+GemOGfkuGemuGetuGelOGfi+KAi+GegOGeu+GfhuGeluGfkuGemeGevOGekeGfkOGemuKAi+Gek+GfgeGfhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IuGeluGehOGfkuGemuGeuOGegOKAi+KAi+GeiuGevuGemOGfkuGelOGeuOKAi+GesuGfkuGemeKAi+GeluGfgeGeieKAi+GeouGfgeGegOGfkuGemuGehOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLhnpHhnrbhnonigIvhnorhnr7hnpjhn5LhnpThnrjigIvhnrLhn5LhnpnigIvhnpbhn4HhnonigIvhnqLhn4HhnoDhn5LhnprhnoThn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i4Z6A4Z+G4Z6W4Z674Z6E4oCL4Z6a4Z6A4Z+S4Z6f4Z624Z6R4Z674Z6A4oCL4Z6a4Z684Z6U4Z6Q4Z6P4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i4Z6A4Z+G4Z6W4Z674Z6E4oCL4Z6a4Z6A4Z+S4Z6f4Z624Z6R4Z674Z6A4oCL4Z6a4Z684Z6U4Z6Q4Z6P4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+LLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLhnprhnrzhnpThnpDhno/igIvhnqLhn4HhnoDhn5LhnprhnoThn4vigIvhnoDhn4bhnpbhnrvhnoTigIvhno/hn5LhnprhnrzhnpzigIvhnpThnrbhnpPigIvhnprhnoDhn5Lhnp/hnrbhnpHhnrvhnoDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IuGelOGetuGek+KAi+GeheGetuGelOGfi+KAi+GemeGegOKAi+GemuGevOGelOGekOGej+KAi+GeouGfgeGegOGfkuGemuGehOGfi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiLhnpThn4nhn4cg4oCL4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6Y4Z6+4Z6b4oCL4Z6a4Z684Z6U4Z6Q4Z6P4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiLhnpjhnrfhnpPigIvhnqLhnrbhnoXigIvhnoXhnrbhnpThn4vigIvhnpnhnoDigIvhnprhnrzhnpTigIvhnpDhno/igIvhnqLhn4HhnoDhn5LhnprhnoThn4vigIvhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+IuGemOGet+Gek+KAi+GeouGetuGeheKAi+GemuGegOGfkuGen+GetuGekeGeu+GegOKAi+GemuGevOGelOGekOGej+KAi+GeouGfgeGegOGfkuGemuGehOGfi+KAi+GflCDhnqfhnpThnoDhnprhno7hn43igIvhnpXhn5LhnpHhnrvhnoDigIvhnqLhnrbhnoXigIvhnoDhn4bhnpbhnrvhnoTigIvhnpThn5Lhnprhnr7igIvigIvhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiLhnofhnpjhn5Lhnprhnr7hnp/igIvhnpXhn5LhnpHhn4HhnprigIvhnq/hnoDhnp/hnrbhnprigIvhno/hnrbhnpjigIvhnpnhnrzhnqLhn4Hhnp/hnpThn4rhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLhnpfhn5LhnofhnrbhnpThn4vigIvhnofhnrbigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnoXhnrbhnoDhn4vigIvhnpjhn4Hhnozhn4AgKE1UUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLhnpfhn5LhnofhnrbhnpThn4vigIvhnofhnrbigIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpDhno8gKFBUUCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+IuGeiuGfhuGeoeGevuGehOKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GeleGfkuGekeGfgeGemuKAi+Ger+GegOGen+GetuGemiBBbmRyb2lkIOGen+GemOGfkuGemuGetuGelOGfiyBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhY2siIG1zZ2lkPSI1NjcwMTE1Mzg5OTQ0MjkxMjAiPiLhnpDhnpnhnoDhn5Lhnprhn4ThnpkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i4Z6C4Z+B4Z6g4oCL4Z6R4Z+G4Z6W4Z+Q4Z6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i4Z6Y4Z+J4Z664Z6T4Z674Z6ZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6Q4Z+S4Z6Y4Z644Z+XIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4i4Z6f4Z+S4Z6c4Z+C4Z6E4Z6a4Z6AIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IuGemOGfieGetuGen+GfiuGeuOGek+KAi+GekOGejyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i4Z6U4Z+S4Z6K4Z684Z6a4oCL4Z6U4Z+K4Z684Z6P4Z674Z6E4oCL4Z6c4Z634Z6S4Z644Z6f4Z624Z6f4Z+S4Z6P4Z+S4Z6a4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IuGelOGfiuGevOGej+Geu+GehOKAi+GeluGehOGfkuGemuGeuOGegOKAi+Gej+GfkuGemuGevOGenOKAi+GeguGfkuGek+GetuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i4Z6W4Z6E4Z+S4Z6a4Z644Z6AL+GelOGehOGfkuGemuGeveGemOKAi+KAi+GeouGfgeGegOGfkuGemuGehOGfi+KAi+GeluGeuOKAi+KAi+GekeGfheGekuGfhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiLhnpThnrbhnpPigIvhno/hnpfhn5LhnofhnrbhnpThn4vigIvhnpThn4rhn5LhnpvhnrzhnpLhnrzhnp/hn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4i4Z6U4Z624Z6T4oCL4Z6V4Z+S4Z6K4Z624Z6F4Z+L4oCL4oCL4Z6U4Z+K4Z+S4Z6b4Z684Z6S4Z684Z6f4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19iYXR0ZXJ5IiBtc2dpZD0iMzU4MzQzMDIyMzUyODIwOTQ2Ij4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6Q4Z+S4Z6Y4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X29uZV9iYXIiIG1zZ2lkPSI3Nzc0ODg3NzIxODkxMDU3NTIzIj4i4Z6Q4Z+S4Z6Y4oCL4Z6Y4Z694Z6Z4oCL4Z6A4Z624Z+G4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+IuGekOGfkuGemOKAi+GeluGeuOGemuKAi+GegOGetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90aHJlZV9iYXJzIiBtc2dpZD0iMjMwMjk4MzMzMDg2NTA0MDQ0NiI+IuGekOGfkuGemOKAi+GekeGetuGfhuGehOKAi+GelOGeuOKAi+KAi+GegOGetuGfhuKAi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+IuGekOGfkuGemOKAi+GeluGfgeGeieKAi+GeoOGevuGemeGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9vbmVfYmFyIiBtc2dpZD0iNjg3Njk5Mjc4MTMyNjY0MTE1Ij4i4Z6f4Z+B4Z6c4Z624oCL4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4oCL4Z6Y4Z694Z6Z4oCL4Z6A4Z624Z+G4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiLhnp/hn4HhnpzhnrbigIvhnpHhnrzhnprhnp/hn5Dhnpbhn5LhnpHigIvhnpbhnrjhnprigIvhnoDhnrbhn4bhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3RocmVlX2JhcnMiIG1zZ2lkPSI4NTIxOTA0ODQzOTE5OTcxODg1Ij4i4Z6f4Z+B4Z6c4Z624oCL4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4oCL4Z6U4Z644oCL4Z6A4Z624Z+G4oCL4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY0NzE4MzQ4Njg1ODA3NTc4OTgiPiLhnp/hn4HhnpzhnrbigIvhnpHhnrzhnprhnp/hn5Dhnpbhn5LhnpHigIvhnpbhn4Hhnonhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2RhdGEiIG1zZ2lkPSI0NzkxOTY2Mjk1MDk2ODY3NTU1Ij4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4oCL4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4i4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4oCL4Z6Y4Z694Z6Z4oCL4oCL4Z6A4Z624Z+G4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+IuGekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GeluGeuOGemuKAi+KAi+GegOGetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IuGekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GelOGeuOKAi+GegOGetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiLhnp/hnonhn5LhnonhnrbigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnpbhn4Hhnonhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IuGelOGet+GekeKAi+GenOGfieGetuGemeGeoOGfkuGenOGetuGemeGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2lmaSIgbXNnaWQ9IjE0MjU0NzY1NTE4Mjc5MjQ0NzQiPiLhnpThnrbhnpPigIvhnpXhn5LhnorhnrbhnoXhn4vigIvhnpzhn4nhnrbhnpnhnqDhn5Lhnpzhnrbhnpnhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiLhnp/hnonhn5LhnonhnrbigIvhnpzhn4nhnrbhnpnhnqDhn5LhnpzhnrbhnpnigIvhnpjhnr3hnpnigIvhnoDhnrbhn4bhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4i4Z6f4Z+B4Z6c4Z624oCL4Z6c4Z+J4Z624Z6Z4Z6g4Z+S4Z6c4Z624Z6Z4oCL4Z6W4Z644Z6a4oCL4Z6A4Z624Z+G4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4i4Z6c4Z+J4Z624Z6Z4Z6g4Z+S4Z6c4Z624Z6Z4oCL4Z6U4Z644oCL4Z6A4Z624Z+G4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IuGen+GeieGfkuGeieGetuKAi+GenOGfieGetuGemeGeoOGfkuGenOGetuGemeKAi+GeluGfgeGeieGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4i4Z6C4Z+S4Z6Y4Z624Z6TIFdpTUFYIOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWCDhnpjhnr3hnpnigIvhnoDhnrbhn4bhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IldpTUFYIOGeluGeuOGemuKAi+GegOGetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWCDhnpThnrjigIvhnoDhnrbhn4bhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IuGen+GeieGfkuGeieGetiBXaU1BWCDhnpbhn4Hhnonhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiLhnoLhn5LhnpjhnrbhnpPigIvhnp/hnonhn5Lhnonhnrbhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4i4Z6Y4Z634Z6T4oCL4Z6U4Z624Z6T4oCL4Z6P4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV96ZXJvX2JhcnMiIG1zZ2lkPSIzODA2MDYwMjI0NDY3MDI3ODg3Ij4i4Z6f4Z684Z6T4Z+S4Z6Z4oCL4Z6A4Z624Z+G4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+IuGemOGeveGemeKAi+GegOGetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHdvX2JhcnMiIG1zZ2lkPSI2NDM3MzYzNjQ4Mzg1MjA2Njc5Ij4i4Z6W4Z644Z6a4oCL4Z6A4Z624Z+G4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+IuGelOGeuOKAi+GegOGetuGfhuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI5MTIyOTIyODg2NTE5Njc2ODM5Ij4i4Z6f4Z6J4Z+S4Z6J4Z624oCL4Z6W4Z+B4Z6J4oCL4oCL4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+IuGelOGevuGegOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4i4Z6U4Z634Z6RIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nvbm5lY3RlZCIgbXNnaWQ9IjgzNjYyNTY2OTM3MTk0OTk2NjUiPiLhnpThnrbhnpPigIvhno/hnpfhn5LhnofhnrbhnpThn4vhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiLhnprhn4nhnrzigIvhnpjhnrjhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IkVkZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IuGenOGfieGetuGemeGeoOGfkuGenOGetuGemSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IuGeguGfkuGemOGetuGek+KAi+Gen+GfiuGeuOGemOKAi+GegOGetuGej+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX3RldGhlciIgbXNnaWQ9IjQxMDI3ODQ0OTgxNDAyNzE5NjkiPiLhnoDhnrbhnprigIvhnpfhn5LhnofhnrbhnpThn4vigIvhnpThn4rhn5LhnpvhnrzhnpLhnrzhnp/hn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiLhnprhnpThn4DhnpTigIvigIvhnpbhn4Hhnpvhnofhnrfhn4figIvhnpnhnpPhn5Lhno/hnqDhn4Thn4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4i4Z6Q4Z+S4Z6YIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhnpfhnrbhnoLhnprhnpnhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+IuGegOGetuGemuKAi+GegOGfhuGejuGej+Gfi+KAi+GelOGfkuGemuGeluGfkOGek+GfkuGekuKAi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4i4Z6A4Z624Z6a4oCL4Z6H4Z684Z6T4oCL4Z6K4Z+G4Z6O4Z654Z6E4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IuGen+GemOGfkuGeouGetuGej+KAi+GegOGetuGemuKAi+Geh+GevOGek+KAi+GeiuGfhuGejuGeueGehOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4i4Z6U4Z624Z6T4oCL4Z6U4Z6+4Z6AIEdQUyDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4i4Z6R4Z6R4Z694Z6b4oCL4oCLIEdQUyDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IuGelOGetuGek+KAi+GelOGevuGegOKAi+GemOGfieGetuGen+GfiuGeuOGek+KAi+GeouGehOGfkuGeguGeu+Gem+GeuOGem+GfgeGegSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiLhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnprhn4ThnpHhn43igIvhnonhn5Dhnprhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6a4Z+E4Z6R4Z+N4oCL4Z6f4Z+S4Z6E4Z624Z6P4Z+L4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDhnpThnorhnrfhnp/hn4HhnpLhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbl9kaXNtaXNzZWQiIG1zZ2lkPSI4NTQyMTEzODcxODYzMDY5MjciPiLhnpThnrbhnpPigIvhnpThnorhnrfhnp/hn4HhnpLigIvhnoDhnrbhnprigIvhnofhnrzhnpPhnorhn4bhno7hnrnhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfbm90aWZpY2F0aW9uX3NoYWRlIiBtc2dpZD0iNDY5MDI3NDg0NDQ0NzUwNDIwOCI+IuGeluGejuGfjOKAi+GegOGetuGemuKAi+Geh+GevOGek+KAi+GeiuGfhuGejuGeueGehCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiLhnoDhnrbhnprigIvhnoDhn4bhno7hno/hn4vigIvhnprhnqDhn5Dhnp/hn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4i4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6Q4Z+S4Z6Y4Z644oCL4Z+X4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+IuGeouGfkuGek+GegOKAi+GelOGfkuGemuGeviA8eGxpZmY6ZyBpZD0iVVNFUiI+JXM8L3hsaWZmOmc+IOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaSIgbXNnaWQ9IjYwOTk3ODEwMzE2Njk3Mjg3MDkiPiI8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4i4Z6F4Z6b4Z+Q4Z6PIDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMyRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i4Z6Q4Z+S4Z6YIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+IOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i4Z6a4Z6U4Z+A4Z6U4Z6W4Z+B4Z6b4oCL4Z6H4Z634Z+H4oCL4Z6Z4Z6T4Z+S4Z6P4oCL4Z6g4Z+E4Z+HIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+IOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IuGelOGfiuGfkuGem+GevOGekuGevOGenyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IuGekeGeuOGej+GetuGfhuGehCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiDhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IuGegOGfhuGejuGej+Gfi+KAi+Gen+GfhuGeoeGfgeGehOKAi+GemuGfhOGekeGfjeKAi+Gen+GemOGfkuGemuGetuGelOGfiyA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+IOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IuGelOGetuGek+KAi+GelOGet+GekeKAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemSAyRy0zRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IuGelOGetuGek+KAi+GelOGet+GekeKAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemSA0RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX21vYmlsZV90aXRsZSIgbXNnaWQ9IjEwNDYwNDcyNDg4NDQ4MjEyMDIiPiLhnpThnrbhnpPigIvhnpThnrfhnpHigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnoXhnpvhn5Dhno8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiLhnpThnrbhnpPigIvhnpThnrfhnpHigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiLhnqLhn5LhnpPhnoDigIvhnpThnrbhnpPigIvhnorhnpvhn4vigIvhnorhn4LhnpPigIvhnoDhn4bhno7hno/hn4vigIvhnpThn5Lhnprhnr7igIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnpThnrbhnpPigIvhnpThnonhn5LhnofhnrbhnoDhn4vhn5Rcblxu4Z6U4Z6+4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z6+4Z6A4oCL4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4oCL4Z6h4Z6+4Z6E4Z6c4Z634Z6JIOGeouGfkuGek+GegOKAi+GeouGetuGeheKAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+GelOGfkuGeiuGevOGemuKAi+GeiuGfhOGemeKAi+GelOGfkuGemuGej+Get+GelOGej+GfkuGej+Get+KAi+GegOGemuGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiLhnpThnr7hnoDigIvigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnqHhnr7hnoThnpzhnrfhnokiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSIxOTQwMjMxNTIxMjc0MTQ3NzcxIj4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4Z6A4Z624Z6a4oCL4Z6P4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6i4Z+K4Z644Z6T4Z6S4Z664Z6O4Z634Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4i4Z6U4Z624Z6T4oCL4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6c4Z+J4Z624Z6Z4Z6g4Z+S4Z6c4Z624Z6ZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiLhnp/hn5Lhnpzhn4LhnoThnprhnoAgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IuGekeGeuOGej+GetuGfhuGehOKAi+KAi+KAi+KAi+KAi+GegOGfhuGejuGej+Gfi+KAi+GeiuGfhOGemSBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLhnp/hn4bhno7hnr7igIvhnpHhnrjhno/hnrbhn4bhnoTigIvhnp/hnoDhnpjhn5LhnpgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLhnp/hnpjhn5LhnqLhnrbhno/igIvhnoDhnrbhnprigIvhnofhnrzhnpPigIvhnorhn4bhno7hnrnhnoTigIvhnpHhnrbhn4bhnoThnqLhnp/hn4vhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i4Z6W4Z+Q4Z6P4Z+M4Z6Y4Z624Z6T4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLhnpPhnrnhnoTigIvhnpThnoThn5LhnpzhnrfhnpvigIvhnqLhn4HhnoDhn5LhnprhnoThn4vigIvhnp/hn5Lhnpzhn5DhnpnigIvhnpThn5Lhnprhnpzhno/hn5Lhno/hnrfhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IuGeouGfgeGegOGfkuGemuGehOGfi+KAi+Geh+GetuGelOGfi+KAi+Gen+GfhOKAi+GegOGfkuGek+Geu+GehOKAi+GekeGet+Gen+KAi+GeleGfkuGeiuGfgeGegOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLhnpThnrbigIvhnpPigIvhnoXhnrbhnoDhn4vigIvhnp/hn4TigIvhnqLhn4HhnoDhn5LhnprhnoThn4vigIvigIvhnoDhn5LhnpPhnrvhnoTigIvhnpHhnrfhnp/igIvhnpThnonhn5Lhnojhnprhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4i4Z6A4Z6a4Z6O4Z64IERlc3NlcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4i4Z6f4Z+S4Z6a4Z6Y4Z6+4oCL4Z6f4Z+S4Z6a4Z6Y4Z+DIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4i4Z6i4Z+K4Z644Z6f4Z664Z6a4Z6O4Z634Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLhnprhnpThn4DhnpThnpbhn4HhnpvigIvigIvhnofhnrfhn4figIvhnpnhnpPhn5Lhno/hnqDhn4Thn4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnaW5nX2xhYmVsIiBtc2dpZD0iNDkwMDc0Nzc0NDY1MzA5MjA5Ij4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6Q4Z+S4Z6YIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiA8eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IuGelOGetuGek+KAi+GelOGeieGfkuGeheGevOGem+KAi+GeluGfgeGeiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiLhnpThn4rhn5LhnpvhnrzhnpLhnrzhnp8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiLhnpThn4rhn5LhnpvhnrzhnpLhnrzhnp8gKOGep+GelOGegOGemuGejuGfjSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiLhnpThnrfhnpHigIvhnpThn4rhn5LhnpvhnrzhnpLhnrzhnp8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IuGeluGek+GfkuGem+GeuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4i4Z6U4Z6E4Z+S4Z6c4Z634Z6b4oCL4oCL4Z6f4Z+S4Z6c4Z+Q4Z6Z4oCL4Z6U4Z+S4Z6a4Z6c4Z6P4Z+S4Z6P4Z63Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IuGelOGetuGek+KAi+GeheGetuGegOGfi+KAi+Gen+GfhOKAi+GegOGetuGemuKAi+GelOGehOGfkuGenOGet+GemyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiLhnpzhnrfhnpLhnrjhnp/hnrbhnp/hn5Lhno/hn5LhnprigIvhnpThnonhn5LhnoXhnrzhnpsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiLhnpHhnrjigIvhno/hnrbhn4bhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i4Z6R4Z644Z6P4Z624Z+G4Z6E4oCL4Z6U4Z634Z6RIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+IuGep+GelOGegOGemuGejuGfjeKAi+GemOGfgeGejOGfgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4i4Z6f4Z6Y4Z+S4Z6a4Z624Z6U4Z+L4oCL4Z6P4Z+C4oCL4Z6A4Z624Z6a4oCL4Z6g4Z+F4oCL4Z6W4Z+B4Z6b4oCL4Z6i4Z624Z6f4Z6T4Z+S4Z6TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfc2V0dGluZ3NfbGFiZWwiIG1zZ2lkPSI1MzI2NTU2NTkyNTc4MDY1NDAxIj4i4Z6A4Z624Z6a4oCL4Z6A4Z+G4Z6O4Z6P4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdGltZV9sYWJlbCIgbXNnaWQ9IjQ2MzU5NjkxODIyMzk3MzY0MDgiPiLhnpbhn4Hhnpvhnpzhn4HhnpvhnrYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc191c2VyX2xhYmVsIiBtc2dpZD0iNTIzODk5NTYzMjEzMDg5Nzg0MCI+IuGegeGfkuGeieGeu+GfhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4i4Z6c4Z+J4Z624Z6Z4Z6g4Z+S4Z6c4Z624Z6ZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IuGemOGet+Gek+KAi+GelOGetuGek+KAi+Gej+Gel+GfkuGeh+GetuGelOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLhnoLhn5LhnpjhnrbhnpPigIvhnpThno7hn5LhnorhnrbhnokiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiLhnpThnrfhnpHigIvhnpzhn4nhnrbhnpnhnqDhn5LhnpzhnrbhnpkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4i4Z6F4Z624Z6P4Z+L4oCL4Z6Q4Z+S4Z6T4Z624Z6A4Z+L4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i4Z6W4Z6T4Z+S4Z6b4Z66Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IuGen+GfkuGenOGfkOGemeGelOGfkuGemuGenOGej+GfkuGej+GetyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLhnprhnpThn4DhnpTigIvigIvhnpThnonhn5LhnoXhn5Lhnprhnrbhnp/igIvhnpbhno7hn4wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLhnprhnpThn4DhnpTigIvhnoDhnpjhn5Lhnprhnrfhno/igIvhnpbhno7hn4zigIvhnpThn5LhnprigIvhnp/hnr7igIvhnprigIvhnqHhnr7hnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IuGemuGelOGfgOGelOKAi+GegOGfguKAi+GeluGejuGfjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i4Z6U4Z6O4Z+S4Z6K4Z624Z6J4oCL4Z6i4Z624Z6F4oCLXG7hno/hn5LhnprhnrzhnpzigIvhnpThnrbhnpPigIvhno/hn5Lhnprhnr3hno/hnpbhnrfhnpPhnrfhno/hn5LhnpkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IuGen+GfkuGenOGfguGehOGemuGegCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLhnprhnrvhnonigIvhnqHhnr7hnoTigIvhnpvhnr7igIvhnorhnr7hnpjhn5LhnpThnrggPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuGemuGeu+GeieKAi+GekeGfheKAi+GehuGfkuGenOGfgeGehOKAi+GeiuGevuGemOGfkuGelOGeuCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4g4Z+UIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAppbmRleCAxNDM3NjAxLi42NzJjMjViIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i7J20IOy7tO2TqO2EsOyXkOyEnCDtla3sg4Eg7ZeI7JqpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i7KCE7LK07ZmU66m0IOuqqOuTnOuhnCDtmZXrjIAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i7KCE7LK07ZmU66m0IOuqqOuTnOuhnCDtmZXrjIAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLtmLjtmZjshLEg7ZmV64yAL+y2leyGjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiLslbHsnbQg7J6R7J2AIO2ZlOuptOyXkCDrp57rj4TroZ0g7ISk6rOE65CcIOqyveyasCDsi5zqs4Qg7JiG7JeQIO2ZleuMgC/stpXshowg7Luo7Yq466Gk7J20IO2RnOyLnOuQqeuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i7Lqh7LOQ7ZmU66m0IOyggOyepSDspJEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLsuqHss5DtmZTrqbQg7KCA7J6lIOykkS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i7Lqh7LOQ7ZmU66m07J2EIOyggOyepe2VmOuKlCDspJHsnoXri4jri6QuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+Iu2ZiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+IuuplOuJtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+Iuy1nOq3vOyXkCDsgqzsmqntlZwg7JWxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4i6rKA7IOJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+Iuy5tOuplOudvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i7J6F66ClIOuwqeuylSDrsoTtirzsnYQg7KCE7ZmY7ZWp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLtmLjtmZjshLEg7ZmV64yAL+y2leyGjCDrsoTtirzsnoXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLsnpHsnYAg7ZmU66m07J2EIO2BsCDtmZTrqbTsnLzroZwg7ZmV64yA7ZWp64uI64ukLiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IuuwsO2EsOumrCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i67mE7ZaJ6riwIOuqqOuTnOqwgCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiDsg4Htg5zsnoXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4i67iU66Oo7Yis7IqkIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLsnITsuZggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IuyVjOuejOydtCA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+KOycvCnroZwg7ISk7KCV65CY7JeI7Iq164uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJHLTNHIOuNsOydtO2EsCDsgqzsmqnspJHsp4DrkKgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyDrjbDsnbTthLAg7IKs7Jqp7KSR7KeA65CoIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIOyXsOqysOuQqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iR1BTIOqygOyDiSDspJEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iR1BT7JeQ7IScIOychOy5mCDshKTsoJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLsnITsuZgg7JqU7LKtIOyeiOydjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IuuqqOuToCDslYzrprwg7KeA7Jqw6riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IuyVsSDsoJXrs7QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+Iu2ZlOuptOydtCDsnpDrj5nsnLzroZwg7ZqM7KCE65Cp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i7ZmU66m07J20IOqwgOuhnCDrsKntlqXsnLzroZwg7J6g6rKoIOyeiOyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4i7ZmU66m07J20IOyEuOuhnCDrsKntlqXsnLzroZwg7J6g6rKoIOyeiOyKteuLiOuLpC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4i65SU7KCA7Yq4IOy8gOydtOyKpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLtmZTrqbQg67O07Zi46riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4i7J20642U64S3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLruYTtlonquLAg66qo65OcIjwvc3RyaW5nPgpAQCAtMTgyLDEwICsxODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLsnpDrj5kg7ZqM7KCEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+Iu2ajOyghCDsnqDquIgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i7J6F66ClIOuwqeuylSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCAoNTAxMTMyNzA0ODc0ODc2MjI1NykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwgKDc0NjQ1NDQwODY1MDczMzE0NTkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiLsnITsuZgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i7JyE7LmYIOyCrOyaqSDspJHsp4AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i66+465SU7Ja0IOq4sOq4sCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4i6ri06riJIO2Gte2ZlOunjCDtl4jsmqkiPC9zdHJpbmc+CkBAIC0xOTYsMTIgKzE5NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IuyXsOqysOuQmOyWtCDsnojsp4Ag7JWK7J2MIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IuuEpO2KuOybjO2BrOqwgCDsl7DqsrDrkJjsp4Ag7JWK7J2MIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg6rq87KeQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpIOuUlOyKpO2UjOugiOydtCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IuustOyEoCDrlJTsiqTtlIzroIjsnbQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4i7ZmU66m0IOyghOyGoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+Iuuwneq4sCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLsnpDrj5kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4i7JWM66a87J20IOyXrOq4sOyXkCDtkZzsi5zrkKgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiLslYTrnpjroZwg7Iqk7JmA7J207ZSE7ZWY7JesIOyWuOygnOuToCDslaHshLjsiqTtlZjshLjsmpQuXG7tlZwg67KIIOuNlCDslYTrnpjroZwg7Iqk7JmA7J207ZSE7ZWY66m0IOyLnOyKpO2FnCDqtIDrpqzroZwg7J2064+Z7ZWp64uI64ukLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+Iu2ZlOuptCDqsIDsnqXsnpDrpqzsl5DshJwg7Iqk7JmA7J207ZSE7ZWY7JesIO2RnOyLnOykhCDtkZzsi5wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+Iu2ZlOuptCDqsIDsnqXsnpDrpqzsl5DshJwg7Iqk7JmA7J207ZSE7ZWY7JesIOyLnOyKpO2FnCDtkZzsi5zspIQg7ZGc7IucIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IuyDieyDgSDrsJjsoIQg66qo65OcIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4i7Zal7IOB65CcIOuMgOu5hCDrqqjrk5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IuyDieyDgSDrs7TsoJUg66qo65OcIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiLrhKTtirjsm4ztgazqsIBcbuuqqOuLiO2EsOungeuQoCDsiJgg7J6I7J2MIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLqsoDsg4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+7ZWY66Ck66m0IOychOuhnCDsiqzrnbzsnbTrk5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz7tlZjroKTrqbQg7Jm87Kq97Jy866GcIOyKrOudvOydtOuTnCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sYW5kL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxhbmQvYXJyYXlzLnhtbAppbmRleCA3NGE2YzgxLi5jMzJjZTEyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxhbmQvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxhbmQvYXJyYXlzLnhtbApAQCAtMjIsMjEgKzIyLDIxIEBACiAgICAgPGFycmF5IG5hbWU9Im5hdmJhcl9zZWFyY2hfdGFyZ2V0cyI+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QCphbmRyb2lkOmRyYXdhYmxlL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpYzwvaXRlbT4KKyAgICAgICAgPGl0ZW0+QGRyYXdhYmxlL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpYzwvaXRlbT4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+CiAgICAgPC9hcnJheT4KIAogICAgIDxhcnJheSBuYW1lPSJuYXZiYXJfc2VhcmNoX3RhcmdldF9kZXNjcmlwdGlvbnMiPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkAqYW5kcm9pZDpzdHJpbmcvZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaDwvaXRlbT4KKyAgICAgICAgPGl0ZW0+QHN0cmluZy9kZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoPC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KICAgICA8L2FycmF5PgogCiAgICAgPGFycmF5IG5hbWU9Im5hdmJhcl9zZWFyY2hfZGlyZWN0aW9uX2Rlc2NyaXB0aW9ucyI+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QCphbmRyb2lkOnN0cmluZy9kZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdDwvaXRlbT4KKyAgICAgICAgPGl0ZW0+QHN0cmluZy9kZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdDwvaXRlbT4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+CiAgICAgPC9hcnJheT4KIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sby1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sby1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MzhhMTUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxvLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IuC7nOC7ieC6suC6iOC7jeC6leC6reC6meC6meC6teC7ieC6luC6t+C6geC6peC6seC6reC6geC7hOC6p+C7ieC7g+C6meC7geC6muC6muC6peC6p+C6h+C6meC6reC6mS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbG8tckxBLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxvLXJMQS1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MzhhMTUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxvLXJMQS1sYW5kL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3JvdGF0aW9uX2xvY2tlZCIgbXNnaWQ9Ijc2MDk2NzMwMTE0MzE1NTYwOTIiPiLgu5zgu4ngurLguojgu43gupXguq3gupngupngurXgu4ngupbgurfguoHguqXgurHguq3guoHgu4Tguqfgu4ngu4Pgupngu4HguprguprguqXguqfguofgupnguq3gupkuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZTc3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIwOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+IuC6quC7iOC6p+C6meC6leC6tOC6lOC6leC7jeC7iOC6nOC6ueC7iOC7g+C6iuC7ieC6guC6reC6h+C6peC6sOC6muC6u+C6miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiLguqXgurbgupoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiLgu4Dguq3gurvgurLguq3guq3guoHguojgurLguoHguqXgurLguo3guoHgurLgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4i4LqC4LuN4LuJ4Lqh4Lq54LqZ4LuB4Lqt4Lqx4Lqa4LqvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiLguprgu43gu4jguqHgurXgu4Hguq3gurHguprguq/gupfgurXgu4jguqvgurLguoHgu43gu4Pguorgu4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IuC6m+C6tOC6lOC7geC6reC6seC6muC6r+C6q+C6vOC7ieC6suC6quC6uOC6lOC6l+C6teC7iOC7g+C6iuC7iSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEg4LuB4Lqt4Lqx4Lqa4Lqv4Lqr4Lq84LuJ4Lqy4Lqq4Lq44LqUIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQg4LuB4Lqt4Lqx4Lqa4Lqv4Lqr4Lq84LuJ4Lqy4Lqq4Lq44LqUIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+IuC6muC7jeC7iOC6oeC6teC6geC6suC6meC7geC6iOC7ieC6h+C7gOC6leC6t+C6reC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4i4LqU4Lqz4LuA4LqZ4Lq14LqZ4Lqi4Lq54LuIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+IuC6geC6suC6meC7geC6iOC7ieC6h+C7gOC6leC6t+C6reC6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iMjc4MzEwNDgwNzU1MTIxMTYzOSI+IuC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iOC6quC6suC6jeC6quC6suC6gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+IuC7geC6muC6seC6lOC7gOC6leC6teC6o+C6teC7gOC6q+C6vOC6t+C6reC7nOC7ieC6reC6jeC7geC6peC7ieC6py4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiLguo3gurHguofgu4Dguqvgurzgurfguq3guq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQlJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4i4Lqa4LuN4LuI4Lqu4Lqt4LqH4Lqu4Lqx4Lqa4LqB4Lqy4LqZ4Lqq4Lqy4LqB4LuE4Lqf4LqU4LuJ4Lqn4LqNIFVTQi5cbuC6leC7ieC6reC6h+C7g+C6iuC7ieC6quC6sOC7gOC6nuC6suC6sOC7gOC6hOC6t+C7iOC6reC6h+C6quC6suC6geC6l+C6teC7iOC7geC6luC6oeC6oeC6suC6meC6s+C7gOC6l+C6u+C7iOC6suC6meC6seC7ieC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4i4LqB4Lqy4LqZ4LqZ4Lqz4LuD4LqK4LuJ4LuB4Lqa4Lqx4LqU4LuA4LqV4Lq14Lqj4Lq1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4i4LqB4Lqy4LqZ4LqV4Lqx4LuJ4LqH4LqE4LuI4LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0ODc5ODc5Njk4NTAwOTU1MzAwIj4i4LuC4Lud4LqU4LuA4LqX4Lq04LqH4LqN4Lq74LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+IuC7neC6uOC6meC7nOC7ieC6suC6iOC7jeC6reC6seC6lOC6leC6sOC7guC6meC6oeC6seC6lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+IuC6m+C6tOC6lOC6quC6veC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4i4Lqt4Lqx4LqU4LqV4Lqw4LuC4LqZ4Lqh4Lqx4LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i4LqB4Lqy4LqZ4LuB4LqI4LuJ4LqH4LuA4LqV4Lq34Lqt4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IuC6m+C7iOC6reC6jeC6quC6seC6meC6jeC6suC6meC6nOC7iOC6suC6mSBCbHVldG9vdGgg4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4i4LqV4Lqx4LuJ4LqH4LqE4LuI4Lqy4Lqn4Lq04LqX4Lq14LqB4Lqy4LqZ4Lqb4LuJ4Lqt4LqZ4LqC4LuN4LuJ4Lqh4Lq54LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4i4LuB4Lqb4LuJ4LqZ4Lqe4Lq04Lqh4LuB4LqX4LuJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+IuC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC7geC6reC6seC6muC6ryA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IOC7gOC6guC6u+C7ieC6suC7gOC6luC6tOC6h+C6reC6uOC6m+C6sOC6geC6reC6mSBVU0I/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq8gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgu4DguoLgurvgu4ngurLgu4DgupbgurTguofguq3gurjgupvgurDguoHguq3gupngup7gu4jguqfguocgVVNCPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4i4LuA4Lqb4Lq14LqUIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g4LuA4Lqh4Lq34LuI4Lqt4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuI4LqB4Lqx4Lqa4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZIFVTQiDgupngurXgu4nguqvgurzgurfguprgu43gu4g/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLgu4DgupvgurXgupQgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDgu4DguqHgurfgu4jguq3guqHgurXguoHgurLgupngu4Dguorgurfgu4jguq3guqHgupXgu43gu4jguoHgurHguprguq3gurjgupvgurDguoHguq3gupngu4DguqrgurXguqEgVVNCIOC6meC6teC7ieC6q+C6vOC6t+C6muC7jeC7iD8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiLguprgu43gu4jguqHgurXgu4Hguq3gurHguprguq/gu4PgupTgupfgurXgu4jgupXgurTgupTgupXgurHgu4nguofgu4Tgupvgu4HguqXgu4nguqcg4Lqq4Lqy4Lqh4Lqy4LqU4LuA4Lqu4Lqx4LqU4Lqn4Lq94LqB4Lqu4LuI4Lqn4Lqh4LqB4Lqx4Lqa4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZ4LuA4Lqq4Lq14LqhIFVTQiDgupngurXgu4ngu4TgupTgu4kuIOC6quC6tuC6geC6quC6suC7gOC6nuC6teC7iOC6oeC7gOC6leC6teC6oeC6geC7iOC6veC6p+C6geC6seC6muC6reC6uOC6m+C6sOC6geC6reC6meC7gOC6quC6teC6oeC6meC6teC7ieC6l+C6teC7iCA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4i4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZ4LuA4Lqq4Lq14LqhIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4i4LuA4Lqa4Lq04LuI4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4i4LuD4LqK4LuJ4LuA4Lqb4Lqx4LqZ4LqE4LuI4Lqy4LuA4Lql4Lq14LuI4Lqh4LqV4Lq74LuJ4LqZ4Lqq4Lqz4Lql4Lqx4Lqa4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZIFVTQiDgupngurXgu4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiLgu4Pguorgu4nguoTgu4jgurLgu4DguqXgurXgu4jguqHgupXgurvgu4ngupnguqrgurPguqXgurHguprguq3gurjgupvgurDguoHguq3gupngu4DguqrgurXguqEgVVNCIOC6meC6teC7iS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IuC6reC6sOC6meC6uOC6jeC6suC6lOC6geC6suC6meC6lOC6teC6muC6seC7iuC6geC6nOC7iOC6suC6mSBVU0I/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+IuC6peC6suC6jeC6meC6tOC7ieC6oeC6tyBSU0Eg4LqC4Lqt4LqH4LqE4Lqt4Lqh4Lqe4Lq04Lqn4LuA4LqV4Lq14LuB4Lqh4LuI4LqZOlxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i4Lqt4Lqw4LqZ4Lq44LqN4Lqy4LqU4LqI4Lqy4LqB4LqE4Lqt4Lqh4Lqe4Lq04Lqn4LuA4LqV4Lq14LqZ4Lq14LuJ4LqV4Lqw4Lqr4Lq84Lqt4LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i4LqK4Lq54Lqh4LuD4Lqr4LuJ4LuA4LqV4Lqx4Lqh4Luc4LuJ4Lqy4LqI4LuNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IuC6m+C6seC6muC7g+C6q+C7ieC7gOC6leC6seC6oeC7nOC7ieC6suC6iOC7jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLguoHgurPguqXgurHguofguprgurHgupngupfgurbguoHguq7gurnguprgu5zgu4ngurLguojgu40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLguoHgurPguqXgurHguofguprgurHgupngupfgurbguoHgup7gurLguprgu5zgu4ngurLguojgu40uLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IuC6geC6s+C6peC6seC6h+C6muC6seC6meC6l+C6tuC6geC6nuC6suC6muC7nOC7ieC6suC6iOC7jS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IuC6luC7iOC6suC6jeC6ruC6ueC6muC7nOC7ieC6suC6iOC7jeC7geC6peC7ieC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiLgu4HgupXgurDgu4Dgup7gurfgu4jguq3gu4DguprgurTgu4jguofgup7gurLguprgu5zgu4ngurLguojgu43guoLguq3guofgupfgu4jgurLgupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiLguprgu43gu4jguqrgurLguqHgurLgupTgupbgu4jgurLguo3guq7gurnguprgu5zgu4ngurLguojgu43gu4TgupTgu4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+IuC6muC7jeC7iOC6quC6suC6oeC6suC6lOC6muC6seC6meC6l+C6tuC6geC6nuC6suC6muC7nOC7ieC6suC6iOC7jeC7hOC6lOC7iS4g4Lqa4LuI4Lqt4LqZ4LqI4Lqx4LqU4LuA4LqB4Lqx4Lqa4Lqt4Lqy4LqU4LqB4Lqz4Lql4Lqx4LqH4LqW4Lq34LqB4LqZ4Lqz4LuD4LqK4LuJ4Lqi4Lq54LuILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IlVTQiDgu4LgupXgu4DguqXgurfguq3guoHguoHgurLgupnguo3gu4ngurLguo3gu4Tgup/guqXgu4wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLgu4Dguorgurfgu4jguq3guqHgupXgu43gu4jgu4DgupvgurHgupkgbWVkaWEgcGxheWVyIChNVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX3B0cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI3NTE3MTI3NTQwMzAxNjI1NzUxIj4i4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuI4LuA4Lqb4Lqx4LqZ4LqB4LuJ4Lqt4LqH4LqW4LuI4Lqy4LqN4Lqu4Lq54LqaIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLgupXgurTgupTgupXgurHgu4nguofgu4Hguq3gurHguprguq8gQW5kcm9pZCBGaWxlIFRyYW5zZmVyIOC6quC6s+C6peC6seC6miBNYWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhY2siIG1zZ2lkPSI1NjcwMTE1Mzg5OTQ0MjkxMjAiPiLguoHgurHguprguoTgurfgupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i4Luc4LuJ4Lqy4LqX4Lqz4Lqt4Lq04LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i4LuA4Lqh4LqZ4Lq5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i4LuB4Lqt4Lqx4Lqa4Lqv4Lqr4Lq84LuJ4Lqy4Lqq4Lq44LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4i4LqK4Lqt4LqB4Lqr4LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IuC6geC7ieC6reC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i4Lqb4Lq44LuI4Lqh4Lqq4Lqw4Lql4Lqx4Lqa4Lqu4Lq54Lqa4LuB4Lqa4Lqa4LqB4Lqy4LqZ4Lqb4LuJ4Lqt4LqZ4LqC4LuN4LuJ4Lqh4Lq54LqZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLgupvgurjgu4jguqHguorgurnguqHgupfgurXgu4jgu4Pguorgu4nguq7gu4jguqfguqHguoHgurHgupngu4TgupTgu4kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLguorgurnguqHguojgu43gupngu4nguq3guo3gu4Tgupvgu4DgupvgurHgupnguojgu43guoLgurDguqvgupngurLgupTgu4Pguqvguo3gu4guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfY29ubmVjdGVkIiBtc2dpZD0iMjcwNzAyNzYzMzI0Mjk4MzM3MCI+IuC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iCBCbHVldG9vdGgg4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9Ijc0MTY2NDg2Njk5NzY4NzAxNzUiPiJCbHVldG9vdGgg4LqW4Lq34LqB4LqV4Lqx4LqU4LqB4Lqy4LqZ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuI4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+IuC7geC6muC6seC6lOC7gOC6leC6teC6o+C6teC7neC6u+C6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiLgu4HguprgurHgupTgu4DgupXgurXguqPgurXgupngurbgu4jguofguoLgurXgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+IuC7geC6muC6seC6lOC7gOC6leC6teC6o+C6teC6quC6reC6h+C6guC6teC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdGhyZWVfYmFycyIgbXNnaWQ9IjIzMDI5ODMzMzA4NjUwNDA0NDYiPiLgu4HguprgurHgupTgu4DgupXgurXguqPgurXguqrgurLguqHguoLgurXgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4i4LuB4Lqa4Lqx4LqU4LuA4LqV4Lq14Lqj4Lq14LuA4LqV4Lqx4LqhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4i4Lqa4LuN4LuI4Lqh4Lq14LuC4LqX4Lql4Lqw4Lqq4Lqx4LqaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+IuC6quC6seC6meC6jeC6suC6meC6meC6tuC7iOC6h+C6guC6teC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+IuC6quC6seC6meC6jeC6suC6meC6quC6reC6h+C6guC6teC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3RocmVlX2JhcnMiIG1zZ2lkPSI4NTIxOTA0ODQzOTE5OTcxODg1Ij4i4Lqq4Lqx4LqZ4LqN4Lqy4LqZ4Lqq4Lqy4Lqh4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4i4Lqq4Lqx4LqZ4LqN4Lqy4LqZ4LuA4LqV4Lqx4LqhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiLguprgu43gu4jguqHgurXguoLgu43gu4nguqHgurngupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4i4LqC4LuN4LuJ4Lqh4Lq54LqZ4LqZ4Lq24LuI4LqH4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiLguoLgu43gu4nguqHgurngupnguqrguq3guofguoLgurXgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4i4LqC4LuN4LuJ4Lqh4Lq54LqZ4Lqq4Lqy4Lqh4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiLguqrgurHgupnigIvguo3gurLgupnguoLgu43gu4nguqHgurngupnigIvgu4DgupXgurHguqEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiJXaUZpIOC6m+C6tOC6lOC6ouC6ueC7iC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4i4LqV4Lqx4LqU4LqB4Lqy4LqZ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuIIFdpLUZpIOC7geC6peC7ieC6py4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiLguqrgurHgupnguo3gurLgupkgV2ktRmkg4LqZ4Lq24LuI4LqH4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiLguqrgurHgupnguo3gurLgupkgV2ktRmkg4Lqq4Lqt4LqH4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+IldpZmkg4Lqq4Lqy4Lqh4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiLguqrgurHgupnguo3gurLgupkgV2ktRmkg4LuA4LqV4Lqx4LqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiLguprgu43gu4jguqHgurUgV2lNQVguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYIOC6meC6tuC7iOC6h+C6guC6teC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IldpTUFYIOC6quC6reC6h+C6guC6teC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4iV2lNQVgg4Lqq4Lqy4Lqh4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4i4Lqq4Lqx4LqZ4oCL4LqN4Lqy4LqZIFdpTUFYIOC7gOC6leC6seC6oS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiLguprgu43gu4jguqHgurXguqrgurHgupnguo3gurLgupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+IuC6muC7jeC7iOC7hOC6lOC7ieC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3plcm9fYmFycyIgbXNnaWQ9IjM4MDYwNjAyMjQ0NjcwMjc4ODciPiLguprgu43gu4jguqHgurXguojgurHguoHguoLgurXgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+IuC6meC6tuC7iOC6h+C6guC6teC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+IuC6quC6reC6h+C6guC6teC6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4i4Lqq4Lqy4Lqh4LqC4Lq14LqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI5MTIyOTIyODg2NTE5Njc2ODM5Ij4i4Lqq4Lqx4LqZ4LqN4Lqy4LqZ4LuA4LqV4Lqx4LqhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiLgu4DgupvgurXgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29mZiIgbXNnaWQ9IjY0NzU1MDgxNTc3ODY4NTMxNTciPiLgupvgurTgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nvbm5lY3RlZCIgbXNnaWQ9IjgzNjYyNTY2OTM3MTk0OTk2NjUiPiLgu4Dguorgurfgu4jguq3guqHigIvgupXgu43gu4jgu4HguqXgu4nguqcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMy41RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4i4LuC4Lqj4Lqh4Lqh4Lq04LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IuC6muC7jeC7iOC6oeC6teC6iuC6tOC6oS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4i4LqB4Lqy4LqZ4Lqb4LuI4Lqt4LqN4Lqq4Lqx4LqZ4LqN4Lqy4LqZIEJsdWV0b290aC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiLgu4Lgu53gupTgu4Pgupnguo3gurvgupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsIiBtc2dpZD0iNzQ1MTQ3NDE4NzExMzM3MTk2NSI+IuC7geC6muC6seC6lOC7gOC6leC6teC6o+C6tSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LuA4Lqb4Lq14LuA4LqK4Lqx4LqZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4i4LqB4Lqy4LqZ4LqV4Lqx4LuJ4LqH4LqE4LuI4Lqy4Lql4Lqw4Lqa4Lq74LqaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4i4LqB4Lqy4LqZ4LuB4LqI4LuJ4LqH4LuA4LqV4Lq34Lqt4LqZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiLguqXgurbguprguqXgu4ngurLguofguoHgurLgupngu4Hguojgu4nguofgu4DgupXgurfguq3gupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMg4LuA4Lqb4Lq14LqU4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiLguoHgurPguqXgurHguofguorguq3guoHguqvgurIgR1BTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4iVGVsZVR5cGV3cml0ZXIg4LqW4Lq34LqB4LuA4Lqb4Lq14LqU4Lqi4Lq54LuILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiLguqrgurHgu4jgupngu4DgupXgurfguq3gupngup7gu4nguq3guqHguqrgur3guofgu4Dguq3gurXgu4ngupngu4DguoLgurvgu4ngurIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IuC6m+C6tOC6lOC6quC6veC6hy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4i4Lqb4Lq04LqUIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgu4HguqXgu4nguqcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4i4Lqb4Lq04LqU4LqB4Lqy4LqZ4LuB4LqI4LuJ4LqH4LuA4LqV4Lq34Lqt4LqZ4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4i4Luc4LuJ4Lqy4LqI4LuN4LuB4LqI4LuJ4LqH4LuA4LqV4Lq34Lqt4LqZLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiLguoHgurLgupngupXgurHgu4nguofguoTgu4jgurLgupTgu4jguqfgupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+IuC7geC6reC6seC6muC6r+C6l+C6teC7iOC6q+C6suC6geC7jeC7g+C6iuC7iS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3VzZXIiIG1zZ2lkPSIxMTA0ODQ2Njk5ODY5NDc2ODU1Ij4i4Lqc4Lq54LuI4LuD4LqK4LuJIDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiLguqHgurfgupbgurcgPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiLgu4HguprgurHgupTgu4DgupXgurXguqPgurUgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLgu4Lgu53gupTgu4Pgupnguo3gurvgupkgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4i4Lqq4Lqw4oCL4LqW4Lqy4LqZ4oCL4LqX4Lq14LuIIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4i4LqV4Lqx4LuJ4LqH4LuC4Lqh4LqH4Lqb4Lq44LqBIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4g4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IuC6reC6tOC6meC7gOC6leC6teC7gOC6meC6seC6lCAyR+KAiywgM0cg4LqW4Lq34LqB4Lqb4Lq04LqU4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4i4LqB4Lqy4LqZ4LqZ4Lqz4LuD4LqK4LuJ4LqC4LuN4LuJ4Lqh4Lq54LqZIDRHIOC6luC6t+C6geC6m+C6tOC6lOC7geC6peC7ieC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX21vYmlsZV90aXRsZSIgbXNnaWQ9IjEwNDYwNDcyNDg4NDQ4MjEyMDIiPiLguq3gurTgupngu4DgupXgurXgu4DgupngurHgupTgu4PgupnguqHgurfgupbgurfgupbgurfguoHgupvgurTgupTguoHgurLgupngupngurPgu4Pguorgu4ngu4HguqXgu4nguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiLguq3gurTgupngu4DgupXgurXgu4DgupngurHgupTgupbgurfguoHgupvgurTgupTguoHgurLgupngupngurPgu4Pguorgu4ngu4HguqXgu4nguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiLgupfgu4jgurLgupngu4TgupTgu4ngu4Pguorgu4nguoLgu43gu4nguqHgurngupnguojgurvgupnguq7guq3gupTguojgurPgupnguqfgupngupfgurXgu4jguojgurPguoHgurHgupTgu4Tguqfgu4ngu4HguqXgu4nguqcuXG5cbuC6q+C6suC6geC6l+C7iOC6suC6meC7gOC6m+C6teC6lOC6meC6s+C7g+C6iuC7ieC6guC7jeC7ieC6oeC6ueC6meC6hOC6t+C6meC6reC6teC6geC6hOC6seC7ieC6hywg4LqX4LuI4Lqy4LqZ4Lqt4Lqy4LqU4LqW4Lq34LqB4Lqu4Lq94LqB4LuA4LqB4Lqx4Lqa4LuA4LqH4Lq04LqZ4LuC4LqU4LqN4Lqc4Lq54LuI4LuD4Lqr4LuJ4Lqa4LuN4Lql4Lq04LqB4Lqy4LqZ4LuE4LqU4LuJLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiLgu4DgupvgurXgupTgupngurPgu4Pguorgu4nguoLgu43gu4nguqHgurngupnguoTgurfgupngu4Pgu53gu4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSIxOTQwMjMxNTIxMjc0MTQ3NzcxIj4i4Lqa4LuN4LuI4Lqh4Lq14LqB4Lqy4LqZ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuI4Lqt4Lq04LqZ4LuA4LqV4Lq14LuA4LqZ4Lqx4LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4i4LuA4LqK4Lq34LuI4Lqt4Lqh4oCL4LqV4LuN4LuIIFdpLeKAiy1GaSDgu4HguqXgu4nguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IuC6geC6s+C6peC6seC6h+C6iuC6reC6geC6q+C6siBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i4Lqq4Lqw4LqW4Lqy4LqZ4LqX4Lq14LuI4LqB4Lqz4LqZ4Lq74LqU4LuC4LqU4LqNIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IuC6geC6suC6meC6ruC7ieC6reC6h+C6guC7jeC6quC6sOC6luC6suC6meC6l+C6teC7iOC6l+C6teC7iOC7gOC6ruC6seC6lOC6p+C6veC6geC6ouC6ueC7iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IuC6peC6tuC6muC6geC6suC6meC7geC6iOC7ieC6h+C7gOC6leC6t+C6reC6meC6l+C6seC6h+C7neC6u+C6lC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i4LqC4LuN4LuJ4Lqh4Lq54LqZ4LuB4Lqt4Lqx4Lqa4LqvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLgu5zgu4ngurLguojgu43guojgurDgu53gurjgupngu4LgupTguo3guq3gurHgupTgupXgurDgu4LgupnguqHgurHgupQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLgu5zgu4ngurLguojgu43gupbgurfguoHguqXgurHguq3guoHgu4PgupnguqXguqfguofgupnguq3gupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IuC7nOC7ieC6suC6iOC7jeC6luC6t+C6geC6peC6seC6reC6geC6ouC6ueC7iOC7g+C6meC7guC7neC6lOC7geC6meC6p+C6leC6seC7ieC6hy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4i4LqB4LuI4Lqt4LqH4LqC4Lqt4LqH4Lqr4Lqn4Lqy4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkRheWRyZWFtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IuC7guC7neC6lOC6ouC6ueC7iOC7g+C6meC6jeC6u+C6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiLguoHgurPguqXgurHguofguqrgurLguoEsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnZWRfbGFiZWwiIG1zZ2lkPSI4ODY1NDEzMDc5NDE0MjQ2MDgxIj4i4Lqq4Lqy4LqB4LuA4LqV4Lqx4Lqh4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsIiBtc2dpZD0iNjMwNDE5MDI4NTE3MDcyMTQwMSI+IkJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9tdWx0aXBsZV9kZXZpY2VzX2xhYmVsIiBtc2dpZD0iMzkxMjI0NTU2NTYxMzY4NDczNSI+IkJsdWV0b290aCAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC6reC6uOC6m+C6sOC6geC6reC6mSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmX2xhYmVsIiBtc2dpZD0iODE1OTY1MjE0NjE0OTIxOTkzNyI+IkJsdWV0b290aCDgupvgurTgupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IuC6hOC6p+C6suC6oeC6quC6sOC6q+C6p+C7iOC6suC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4i4Lud4Lq44LqZ4Luc4LuJ4Lqy4LqI4LuN4Lqt4Lqx4LqU4LqV4Lqw4LuC4LqZ4Lqh4Lqx4LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IuC6peC6seC6reC6geC6geC6suC6meC6m+C7iOC6veC6meC6peC6p+C6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiLguqfgurTgupfgurXguoHgurLgupngupvgu4nguq3gupnguoLgu43gu4nguqHgurngupkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiLguqrgurDgupbgurLgupngupfgurXgu4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i4LqC4LuN4LuJ4Lqh4Lq54LqZ4Lqq4Lqw4LqW4Lqy4LqZ4LqX4Lq14LuI4Lqb4Lq04LqU4Lqi4Lq54LuIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+IuC6reC6uOC6m+C6sOC6geC6reC6meC6quC6t+C7iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4i4LuC4LqX4Lqq4Lq44LqB4LuA4Lqq4Lq14LqZ4LuA4LqX4Lq74LuI4Lqy4LqZ4Lqx4LuJ4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfc2V0dGluZ3NfbGFiZWwiIG1zZ2lkPSI1MzI2NTU2NTkyNTc4MDY1NDAxIj4i4LqB4Lqy4LqZ4LqV4Lqx4LuJ4LqH4LqE4LuI4LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdGltZV9sYWJlbCIgbXNnaWQ9IjQ2MzU5NjkxODIyMzk3MzY0MDgiPiLgu4DguqfguqXgurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc191c2VyX2xhYmVsIiBtc2dpZD0iNTIzODk5NTYzMjEzMDg5Nzg0MCI+IuC6guC7ieC6reC6jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2nigIstRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i4Lqa4LuN4LuI4LuE4LqU4LuJ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IuC6muC7jeC7iOC6oeC6teC7gOC6hOC6t+C6reC6guC7iOC6suC6jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+Ildp4oCLLUZpIOC6m+C6tOC6lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLgupTgurbguofgu5zgu4ngurLguojgu40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiLguoTguqfgurLguqHgu4Hguojgu4nguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4i4Lqt4Lqx4LqU4LqV4Lqw4LuC4LqZ4Lqh4Lqx4LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IuC7guC7neC6lOC6quC6sOC6peC6seC6muC6quC6tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IuC7guC7neC6lOC6hOC6p+C6suC6oeC6leC7iOC6suC6h+C7geC6quC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4i4LuC4Lud4LqU4LqB4Lqy4LqZ4LuB4LqB4LuJ4LuE4LqC4Lqq4Lq1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiLgu4DguoTgurfguq3guoTgu4jgurLguo3guq3gurLgupRcbuC6luC6t+C6geC6leC6tOC6lOC6leC6suC6oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i4LqK4Lqt4LqB4Lqr4LqyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuC7gOC6peC6t+C7iOC6reC6meC6guC6tuC7ieC6meC7gOC6nuC6t+C7iOC6rSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i4LuA4Lql4Lq34LuI4Lqt4LqZ4LuE4Lqb4LqX4Lqy4LqH4LqK4LuJ4Lqy4LqN4LuA4Lqe4Lq34LuI4LqtIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCmluZGV4IGJmODY2MmEuLjlmYWQ5ZTUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJWaXNhZGEgbGVpc3RpIGnFoSDFoWlvIGtvbXBpdXRlcmlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iS2Vpc3RpIG1hc3QuLCBrYWQgYXRpdC4gZWtyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJJxaF0ZW1wdGksIGthZCBhdGl0LiBla3IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iU3VkZXJpbmFtdW1vIG1hc3RlbGlvIGtlaXRpbWFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IkthaSBwcm9ncmFtYSBidXMgcHJpdGFpa3l0YSBtYcW+ZXNuaWFtIGVrcmFudWksIG1hc3RlbGlvIGtlaXRpbW8gdmFsZGlrbGlzIGJ1cyBwYXJvZHl0YXMgxaFhbGlhIGxhaWtyb2TFvmlvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJJxaFzYXVnb21hIGVrcmFubyBrb3BpamEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJJxaFzYXVnb21hIGVrcmFubyBrb3BpamEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IknFoXNhdWdvbWEgZWtyYW5vIGtvcGlqYS4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iUGFncmluZGluaXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW5pdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+Ik5hdWphdXNpb3MgcHJvZ3JhbW9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iSWXFoWtvdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iRm90b2FwYXJhdGFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJQZXJqdW5ndGkgxK92ZXN0aWVzIG1ldG9kbyBteWd0dWvEhS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iU3VkZXJpbmFtdW1vIHByaWFydGluaW1vIG15Z3R1a2FzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iUGFkaWRpbnRpIGVrcmFuxIUuIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQWt1bXVsaWF0b3JpdXMgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJMxJdrdHV2byByZcW+aW1hcyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiLigJ5CbHVldG9vdGjigJwgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJWaWV0b3bElyDigJMgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJTaWduYWxhcyBudXN0YXR5dGFzIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkfigJMzRyBkdW9tZW55cyBuZWxlaWTFvmlhbWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyBkdW9tZW55cyBuZWxlaWTFvmlhbWkiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iUHJpc2lqLiBwcmllIOKAnldpLUZp4oCcIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJJZcWha29tYSBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iR1BTIG51c3RhdHl0YSB2aWV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IlZpZXRvdsSXcyB1xb5rbGF1c29zIGFrdHl2aW9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iScWhdmFseXRpIHZpc3VzIHByYW5lxaFpbXVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJQcm9ncmFtb3MgaW5mb3JtYWNpamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IkVrcmFuYXMgYnVzIHN1a2FtYXMgYXV0b21hdGnFoWthaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IlXFvnJha2ludGFzIGVrcmFuYXMgeXJhIGhvcml6b250YWxpb3Mgb3JpZW50YWNpam9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJVxb5yYWtpbnRhcyBla3JhbmFzIHlyYSB2ZXJ0aWthbGlvcyBvcmllbnRhY2lqb3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IkRlc2VydMWzIGTEl2tsYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iU3Zham9uxJciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGVybmV0YXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IkzEl2t0dXZvIHJlxb5pbWFzIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJOZXByaXNpanVuZ3RhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IlRpbmtsbyBuxJdyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IuKAnldpLUZp4oCcIGnFoWp1bmd0YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiLigJ5XaS1GaeKAnCBwYXRlaWt0aXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJCZWxhaWRpcyByb2R5bWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IlBlcmR1b3RpIGVrcmFuxIUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJTa2Fpc3RpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPTUFUSU5JUyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJQcmFuZcWhaW1haSByb2RvbWkgxI1pYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IlBlcmJyYXVrxJkgxb5lbXluIGJldCBrdXJpdW8gbWV0dSBwYXNpZWtzaXRlIHByYW5lxaFpbXVzLlxuSmVpIG5vcml0ZSBuYXVkb3RpIHNpc3RlbW9zIHZhbGRpa2xpdXMsIHBlcmJyYXVraXRlIMW+ZW15biBkYXIga2FydMSFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IkplaSBub3JpdGUsIGthZCBixat0xbMgcm9kb21hIGp1b3N0YSwgcGVyYnJhdWtpdGUgZWtyYW5vIGtyYcWhdGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IkplaSBub3JpdGUsIGthZCBixat0xbMgcm9kb21hIHNpc3RlbW9zIGp1b3N0YSwgcGVyYnJhdWtpdGUgacWhIGVrcmFubyBrcmHFoXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IlNwYWx2xbMgaW52ZXJzaWpvcyByZcW+aW1hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IlBhdG9idWxpbnRvIGtvbnRyYXN0byByZcW+aW1hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iU3BhbHbFsyB0YWlzeW1vIHJlxb5pbWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJUaW5rbGFzIGdhbGlcbmLFq3RpIHN0ZWJpbWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJQYWllxaFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJTbHlza2l0ZSBhdWvFoXR5biBsaW5rIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJTbHlza2l0ZSDEryBrYWlyxJkgbGluayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbAppbmRleCBiOTZhNzg2Li44ODRjNjU1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iVmllbm3Ek3IgYXTEvGF1dCBubyDFocSrIGRhdG9yYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IlTEgWx1bW0uLCBsYWkgYWl6cC4gZWtyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJTdGllcGlldCwgbGFpIGFpenAuIGVrci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJTYWRlcsSrYmFzIHTEgWx1bW1hacWGYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJKYSBsaWV0b3RuZSBpciBwYXJlZHrEk3RhIG1hesSBa2FtIGVrcsSBbmFtLCBibGFrdXMgcHVsa3N0ZW5pbSB0aWtzIHBhcsSBZMSrdGEgdMSBbHVtbWFpxYZhcyB2YWTEq2tsYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iU2FnbGFixIEgZWtyxIFudXrFhsSTbXVtdeKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+Ik5vdGllayBla3LEgW51esWGxJNtdW1hIHNhZ2xhYsSBxaFhbmEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+Ik5vdGllayBla3LEgW51esWGxJNtdW1hIHNhZ2xhYsSBxaFhbmEuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlPEgWt1bXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJJenbEk2xuZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+Ik5lc2VuIGl6bWFudG90xIFzIGxpZXRvdG5lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+Ik1la2zEk3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iS2FtZXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJJZXZhZGVzIG1ldG9kZXMgbWFpxYZhcyBwb2dhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJTYWRlcsSrYmFzIHTEgWx1bW1hacWGYXMgcG9nYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IlZlaWt0IHTEgWx1bW1hacWGdSBubyBtYXrEgWthIGVrcsSBbmEgdXogbGllbMSBa3UuIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQWt1bXVsYXRvcmEgc3RhdHVzczogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IkxpZG9qdW1hIHJlxb7Eq21hIHN0YXR1c3M6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIHN0YXR1c3M6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJBdHJhxaFhbsSBcyB2aWV0YTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJTaWduxIFscyBpciBpZXN0YXTEq3RzIHV6OiA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJH4oCTM0cgZGF0aSBhdHNwxJNqb3RpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEfCoGRhdGkgYXRzcMSTam90aSI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJJenYuIHNhdi4gYXIgV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+Ik5vdGllayBHUFMgbWVrbMSTxaFhbmEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iR1BTwqBpZXN0YXTEq3TEgSBhdHJhxaFhbsSBcyB2aWV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IkFrdMSrdmkgYXRyYcWhYW7EgXMgdmlldHUgcGllcHJhc8SranVtaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+Ik5vdMSrcsSrdCB2aXN1cyBwYXppxYZvanVtdXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iSW5mb3JtxIFjaWphIHBhciBsaWV0b3RuaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iRWtyxIFucyB0aWtzIHBhZ3JpZXp0cyBhdXRvbcSBdGlza2kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJFa3LEgW5zIHRhZ2FkIGlyIGJsb8S3xJN0cyBhaW5hdmFzIG9yaWVudMSBY2lqxIEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkVrcsSBbnMgdGFnYWQgaXIgYmxvxLfEk3RzIHBvcnRyZXRhIG9yaWVudMSBY2lqxIEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IlNhbGRvIMSTZGllbnUgc3RlbmRzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkVrcsSBbnNhdWR6xJN0xIFqcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IlTEq2tscyBFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iTGlkb2p1bWEgcmXFvsSrbXMiPC9zdHJpbmc+CkBAIC0xOTQsMTIgKzE5NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5hdiBpenZlaWRvdHMgc2F2aWVub2p1bXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iTmF2IHTEq2tsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIGlyIGl6c2zEk2d0cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaS1GaSBkaXNwbGVqcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IkJlenZhZHUgYXR0xJNsb8WhYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IkFwcmFpZGVzIGVrcsSBbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJTcGlsZ3R1bXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUT03EgFRJU0tJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IsWgZWl0IHRpZWsgcsSBZMSrdGkgcGF6acWGb2p1bWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJQaWVrxLzFq3N0aWV0IHRpZW0gamVia3VyxIEgbGFpa8SBLCB2ZWxrb3QgdXogbGVqdS5cblbEk2xyZWl6IHZlbGNpZXQsIGxhaSB0aWt0dSBwYXLEgWTEq3RhcyBzaXN0xJNtYXMgdmFkxKtrbGFzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IlZlbGNpZXQgbm8gZWtyxIFuYSBtYWxhcywgbGFpIHBpZWvEvMWrdHUgam9zbGFpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iVmVsY2lldCBubyBla3LEgW5hIG1hbGFzLCBsYWkgcGlla8S8xat0dSBzaXN0xJNtYXMgam9zbGFpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJLcsSBc3UgaW52ZXJzaWphcyByZcW+xKttcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IlV6bGFib3RhIGtvbnRyYXN0YSByZcW+xKttcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iS3LEgXN1IGtvcmVrY2lqYXMgcmXFvsSrbXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IlTEq2tscyB2YXJcbnRpa3QgdXpyYXVkesSrdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+Ik1la2zEk3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iVmVsY2lldCB1eiBhdWfFoXUsIGxhaSB2ZWlrdHUgxaHEgWR1IGRhcmLEq2J1OiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iVmVsY2lldCBwYSBrcmVpc2ksIGxhaSB2ZWlrdHUgxaHEgWR1IGRhcmLEq2J1OiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1uLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1uLWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0NjE2ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbW4tbGFuZC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yb3RhdGlvbl9sb2NrZWQiIG1zZ2lkPSI3NjA5NjczMDExNDMxNTU2MDkyIj4i0JTRjdC70LPRjdGGINGF0Y3QstGC0Y3RjSDRh9C40LPQu9GN0LvQtCDRgtKv0LPQttC40LPQtNGB0Y3QvS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbW4tck1OLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1uLXJNTi1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNDYxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1uLXJNTi1sYW5kL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3JvdGF0aW9uX2xvY2tlZCIgbXNnaWQ9Ijc2MDk2NzMwMTE0MzE1NTYwOTIiPiLQlNGN0LvQs9GN0YYg0YXRjdCy0YLRjdGNINGH0LjQs9C70Y3Qu9C0INGC0q/Qs9C20LjQs9C00YHRjdC9LiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmJmMjk3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxNjQ5MzczNDQ4NTAwMDQ0NjYiPiLQodC40YHRgtC10LwgVUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4i0KbRjdCy0Y3RgNC70Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+ItCW0LDQs9GB0LDQsNC70YLQsNCw0YEg0YPRgdGC0LPQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+ItCQ0L/QvyDQvNGN0LTRjdGN0LvRjdC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiLQodKv0q/Qu9C40LnQvSDQsNC/0L8g0YXQvtC+0YHQvtC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiLQodKv0q/Qu9C40LnQvSDQsNC/0L8t0YPRg9C00YvQsyDRhdCw0LDRhSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEg0YHSr9Kv0LvQuNC50L0g0LDQv9C/IjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQg0YHSr9Kv0LvQuNC50L0g0LDQv9C/IjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+ItCc0Y3QtNGN0LPQtNGN0Lsg0LHQsNC50YXQs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+ItCT0LDRgNGB0LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbGF0ZXN0X2V2ZW50c190aXRsZSIgbXNnaWQ9IjY1OTQ3Njc0Mzg1Nzc1OTMxNzIiPiLQnNGN0LTRjdCz0LTRjdC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4i0KbRjdC90Y3Qs9C70Y3Qs9GH0LjQudCzINGF0L7Qu9Cx0L7QvdC+INGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiLQkdCw0YLQtdGA0LXQuSDQtNGD0YPRgdCw0LYg0LHQsNC50L3QsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiDSr9C70LTRgdGN0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4iVVNCINGG0Y3QvdGN0LPQu9GN0LvRgiDQtNGN0LzQttC40LPQtNGN0YXQs9Kv0Lkg0LHQsNC50L3QsC5cbtCX06nQstGF06nQvSDQvdC40LnQu9Kv0q/Qu9GN0LPQtNGB0Y3QvSDRhtGN0L3RjdCz0LvRjdCz0YfQuNC50LMg0LDRiNC40LPQu9Cw0L3QsCDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3doeSIgbXNnaWQ9IjcyNzkxNjk2MDk1MTgzODYzNzIiPiLQkdCw0YLQtdGA0LXQuSDQsNGI0LjQs9C70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+ItCi0L7RhdC40YDQs9C+0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiLQndC40YHQu9GN0LPQuNC50L0g0LPQvtGA0LjQvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiLQlNGN0LvQs9GN0YbQuNC50LMg0LDQstGC0L7QvNCw0YLQsNCw0YAg0Y3RgNCz0q/Sr9C70Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+ItCl0JDQkNClIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiLQkNCS0KLQntCc0JDQoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+ItCc0Y3QtNGN0LPQtNGN0LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4i0JHQu9GO0YLSr9Kv0YLRi9CzINC80L7QtNC10Lwg0LHQvtC70LPQvtC2INCx0LDQudC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2lucHV0X21ldGhvZF9zZXR0aW5nc19jb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjM1MDQyOTI0NzE1MTIzMTc4MjciPiLQntGA0YPRg9C70LDRhSDQsNGA0LPRi9CzINGC0L7RhdC40YDRg9GD0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4i0JHQvtC00LjRgiDQs9Cw0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDQsNC/0L8t0LMgVVNCINGC06nRhdOp06nRgNOp0LzQttC40LQg0YXQsNC90LTQsNGF0YvQsyDQt9Op0LLRiNOp06nRgNOp0YUg0q/Srz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g0LDQv9C/LdCzIFVTQiDRgtOp0YXTqdOp0YDTqdC80LbQuNC0INGF0LDQvdC00LDRhdGL0LMg0LfTqdCy0YjTqdOp0YDTqdGFINKv0q8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjUxNjEyMDUyNTg2MzUyNTMyMDYiPiLQrdC90Y0gVVNCINGC06nRhdOp06nRgNOp0LzQtiDRhdC+0LvQsdC+0LPQtNC+0YUg0q/QtdC0IDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4t0LMg0L3RjdGN0YUg0q/Srz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+ItCt0L3RjSBVU0Ig0YLTqdGF06nTqdGA06nQvNC2INGF0L7Qu9Cx0L7Qs9C00L7RhSDSr9C10LQgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPi3QsyDQvdGN0Y3RhSDSr9KvPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+ItCt0L3RjSBVU0Ig0YXRjdGA0Y3Qs9GB0Y3QuyDQtNGN0Y3RgCDRgdGD0YPQu9Cz0LDRgdCw0L0g0LDQv9C/INCw0LbQuNC70LvQsNCw0LPSr9C5INCx0LDQudC90LAuINCt0L3RjSDRhdGN0YDRjdCz0YHQu9C40LnQvSDRgtCw0LvQsNCw0YAgPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4t0YEg0LTRjdC70LPRjdGA0Y3QvdCz0q/QuSDSr9C30L3RjSDSr9KvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iVVNCINGC06nRhdOp06nRgNOp0LzQtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4i0q7Qt9GN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiLQrdC90Y0gVVNCINGC06nRhdOp06nRgNOp0LzQttC40LnQsyDSr9C90LTRgdGN0L0g0LHQvtC70LPQvtC9INCw0YjQuNCz0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4i0K3QvdGNIFVTQiDRgtOp0YXTqdOp0YDTqdC80LbQuNC50LMg0q/QvdC00YHRjdC9INCx0L7Qu9Cz0L7QvSDQsNGI0LjQs9C70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4iVVNCINC00LXQsdCw0LMg0YXQuNC50YXQuNC50LMg0LfTqdCy0YjTqdOp0YDTqdGFINKv0q8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+ItCa0L7QvNC/0YzRjtGC0LXRgNC40LnQvSBSU0Eg0YLSr9C70YXSr9Kv0YDQuNC50L0g0YXRg9GA0YPRg9C90Ysg0YXRjdGNIDpcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+ItCt0L3RjSDQutC+0LzQv9GM0Y7RgtC10YDRjdGN0YEg0L7RgNC+0YXRi9CzINCx0LDQudC90LPQsCDQt9Op0LLRiNOp06nRgNOp0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLQlNGN0LvQs9GN0YYg0LTSr9Kv0YDQs9GN0YUg0LHQvtC7INOp0YHQs9Op0L3TqSDSr9KvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+ItCU0Y3Qu9Cz0Y3RhiDQtNKv0q/RgNCz0Y3RhSDQsdC+0Lsg0YLQsNGC0L3QsCDRg9GDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+ItCU0Y3Qu9Cz0Y3RhtC40LnQvSDQsNCz0YjQuNC90LMg0YXQsNC00LPQsNC70LYg0LHQsNC50L3QsOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+ItCU0Y3Qu9Cz0Y3RhtC40LnQvSDQsNCz0YjQuNC90LMg0YXQsNC00LPQsNC70LYg0LHQsNC50L3QsOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i0JTRjdC70LPRjdGG0LjQudC9INCw0LPRiNC40L0g0YXQsNC00LPQsNC70LDQs9C00LDQsi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+ItCU0Y3Qu9Cz0Y3RhtC40LnQvSDQsNCz0YjQuNC90LMg0LDQstGB0LDQvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RleHQiIG1zZ2lkPSIxMTUyODM5NjQ3Njc3NTU4ODE1Ij4i0JTRjdC70LPRjdGG0LjQudC9INCw0LPRiNC90YvQsyDRhdCw0YDQsNGFINCx0L7QuyDRhdKv0YDQvdGNINKv0q8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiLQlNGN0LvQs9GN0YbQuNC50L0g0LDQs9GI0LjQvdCzINCw0LLRhyDRh9Cw0LTRgdCw0L3Qs9Kv0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiLQlNGN0LvQs9GN0YbQuNC50L0g0LDQs9GI0LjQvdCzINGF0LDQtNCz0LDQu9C2INGH0LDQtNGB0LDQvdCz0q/QuS4g0KHQsNC9INCw0YjQuNCz0LvQsNCz0LTQsNC2INCx0LDQudCz0LDQsCDQsdC+0LvQvtC70YLQvtC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IlVTQiDRhNCw0LnQuyDRiNC40LvQttKv0q/Qu9GN0YUg0YHQvtC90LPQvtC70YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLQnNC10LTQuNCwINGC0L7Qs9C70YPRg9C70LDQs9GHKE1UUCkg0LHQvtC70LPQvtC9INC30LDQu9Cz0LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+ItCa0LDQvNC10YAg0LHQvtC70LPQvtC9KFBUUCkg0LfQsNC70LPQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLQnNCw0YEt0LQg0LfQvtGA0LjRg9C70YHQsNC9ICDQkNC90LTRgNC+0LnQtCDQpNCw0LnQuyDQqNC40LvQttKv0q/Qu9GN0YUg0LDQv9C/LdCzINGB0YPRg9C70LPQsNC90LAg0YPRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+ItCR0YPRhtCw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i0JPRjdGA0LjQudC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i0KbRjdGBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i0KHSr9Kv0LvQuNC50L0g0LDQv9C/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4i0KXQsNC50YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4i0JrQsNC80LXRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i0J7RgNGD0YPQu9Cw0YUg0LDRgNCz0YvQsyDRgdGN0LvQs9GN0YUg0YLQvtCy0YcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+ItCi0L7RhdC40YDQvtC80LbRgtC+0Lkg06nRgdCz06nRhSDRgtC+0LLRhy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+ItCW0LjQttCz0Y3RjdGBINGC0L7QvCDQtNGN0LvQs9GN0YbRgNKv0q8g06nRgdCz06nRhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4i0JHQu9GO0YLSr9Kv0YIg0YXQvtC70LHQvtCz0LTRgdC+0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+ItCR0LvRjtGC0q/Sr9GCINGC0LDRgdGA0LDQsi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiLQkdCw0YLQtdGA0LXQuSDQsdCw0LnRhdCz0q/QuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiLQkdCw0YLQtdGA0LXQuSDQvdGN0LMg0LHQsNCz0LDQvdCw0YLQsNC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiLQkdCw0YLQtdGA0LXQuSDRhdC+0ZHRgCDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4i0JHQsNGC0LXRgNC10Lkg0LPRg9GA0LLQsNC9INCx0LDQs9Cw0L3QsNGC0LDQuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfZnVsbCIgbXNnaWQ9Ijg5MDkxMjI0MDE3MjAxNTg1ODIiPiLQkdCw0YLQtdGA0LXQuSDQtNKv0q/RgNGN0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19waG9uZSIgbXNnaWQ9IjQ4OTQ3MDg5MzcwNTI2MTEyODEiPiLQo9GC0LDRgSDQsdCw0LnRhdCz0q/QuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiLQo9GC0LDRgSDQvdGN0LMg0LHQsNCz0LDQvdCw0YLQsNC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdHdvX2JhcnMiIG1zZ2lkPSI4Mzg0OTA1MzgyODA0ODE1MjAxIj4i0KPRgtCw0YEg0YXQvtGR0YAg0LHQsNCz0LDQvdCw0YLQsNC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiLQo9GC0LDRgSDQs9GD0YDQstCw0L0g0LHQsNCz0LDQvdCw0YLQsNC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4i0KPRgtCw0YHQvdGLINC00L7RhdC40L4g0LTSr9Kv0YDRjdC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiLQlNCw0YLQsCDQsdCw0LnRhdCz0q/QuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiLQlNCw0YLQsCDQvdGN0LMg0LHQsNCz0LDQvdCw0YLQsNC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiLQlNCw0YLQsCDRhdC+0ZHRgCDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4i0JTQsNGC0LAg0LPRg9GA0LLQsNC9INCx0LDQs9Cw0L3QsNGC0LDQuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4i0JTQsNGC0LAg0LTQvtGF0LjQviDQtNKv0q/RgNGN0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiJXaWZpINGD0L3RgtCw0YDRgdCw0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IldpZmkg0YHQsNC70LDQsi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiJXaWZpINC90Y3QsyDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IldpZmkg0YXQvtGR0YAg0LHQsNCz0LDQvdCw0YLQsNC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+IldpZmkg0LPRg9GA0LLQsNC9INCx0LDQs9Cw0L3QsNGC0LDQuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2ODUzNTYxMzAzNTg2NDgwMzc2Ij4iV2lmaSDQtNC+0YXQuNC+INC00q/Sr9GA0Y3QvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpbWF4IiBtc2dpZD0iNDMyOTE4MDEyOTcyNzYzMDM2OCI+IldpTUFYINCx0LDQudGF0LPSr9C5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWCDQvdGN0LMg0LHQsNCz0LDQvdCwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdHdvX2JhcnMiIG1zZ2lkPSI5MTc2MjM2ODU4MzM2NTAyMjg4Ij4iV2lNQVgg0YXQvtGR0YAg0LHQsNCz0LDQvdCw0YLQsNC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWCDQs9GD0YDQstCw0L0g0LHQsNCz0LDQvdCw0YLQsNC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4iV2lNQVgg0LTQvtGF0LjQviDQtNKv0q/RgNGN0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaWduYWwiIG1zZ2lkPSI3MDY0NjQ1MzIwNzgyNTg1MTY3Ij4i0JTQvtGF0LjQviDQsdCw0LnRhdCz0q/QuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4i0KXQvtC70LHQvtCz0LTQvtC+0LPSr9C5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+ItCi0Y3QsyDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+ItCd0Y3QsyDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90d29fYmFycyIgbXNnaWQ9IjY0MzczNjM2NDgzODUyMDY2NzkiPiLQpdC+0ZHRgCDQsdCw0LPQsNC90LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+ItCT0YPRgNCy0LDQvSDQsdCw0LPQsNC90LDRgtCw0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiLQlNC+0YXQuNC+INC00q/Sr9GA0Y3QvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb24iIG1zZ2lkPSIyMzg1MjU0NjkzNjI0MzQ1MjY1Ij4i0JjQtNGN0LLRhdC40LbRgdGN0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29mZiIgbXNnaWQ9IjY0NzU1MDgxNTc3ODY4NTMxNTciPiLQo9C90YLRgNCw0LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19jb25uZWN0ZWQiIG1zZ2lkPSI4MzY2MjU2NjkzNzE5NDk5NjY1Ij4i0KXQvtC70LHQvtCz0LTRgdC+0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMy41RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4i0KDSr9Kv0LzQuNC90LMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IkVkZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaW0iIG1zZ2lkPSI4Mjc0MDE3MTE4NDcyNDU1MTU1Ij4iU0lNINCx0LDQudGF0LPSr9C5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX3RldGhlciIgbXNnaWQ9IjQxMDI3ODQ0OTgxNDAyNzE5NjkiPiLQkdC70Y7RgtKv0q/RgiDQvNC+0LTQtdC8INCx0L7Qu9C2INCx0LDQudC90LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4i0J3QuNGB0LvRjdCz0LjQudC9INCz0L7RgNC40LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4i0JHQsNGC0LXRgNC10LkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INGF0YPQstGM0YLQsNC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4i0KHQuNGB0YLQtdC80LjQudC9INGC0L7RhdC40YDQs9C+0L4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiLQnNGN0LTRjdCz0LTRjdC7LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiLQnNGN0LTRjdCz0LTQu9C40LnQsyDRhtGN0LLRjdGA0LvRjdGFLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTINC40LTRjdCy0YXRgtGN0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IkdQUyDRhdCw0LnQtiDQsdCw0LnQvdCwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4iVGVsZVR5cGV3cml0ZXIg0LjQtNGN0LLRhdGC0Y3QuSDQsdC+0LvQvtCyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiLQpdC+0L3RhdC90Ysg0YfQuNGH0LjRgNCz0Y3RjS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i0KXQvtC90YXRi9CzINGF0LDQsNGFLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g0LHQsNC50YXQs9Kv0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4i0JzRjdC00Y3Qs9C00Y3QuyDRhdCw0LDQs9C00YHQsNC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4i0JzRjdC00Y3Qs9C00LvQuNC50L0g0YXRg9GA0LDQsNC90LPRg9C5INGB0LDQvNCx0LDRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiLQqNGD0YPRgNGF0LDQuSDRgtC+0YXQuNGA0LPQvtC+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiLQodKv0q/Qu9C40LnQvSDQsNC/0L8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3VzZXIiIG1zZ2lkPSIxMTA0ODQ2Njk5ODY5NDc2ODU1Ij4i0KXRjdGA0Y3Qs9C70Y3Qs9GHIDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiLQnNC+0LHQsNC50LsgPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiLQkdCw0YLQtdGA0LXQuSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+ItCd0LjRgdC70Y3Qs9C40LnQvSDQs9C+0YDQuNC8IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+ItCR0LvRjtGC0q/Sr9GCIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4i0JHQsNC50YDRiNC40LsgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLQodGN0YDSr9Kv0LvQs9C40LnQsyA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LdC0INGC0L7RhdC40YDRg9GD0LvRgdCw0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cg0LTQsNGC0LAg0LjQtNGN0LLRhdCz0q/QuSDQsdC+0LvQvtCyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEcg0LTQsNGC0LAg0LjQtNGN0LLRhdCz0q/QuSDQsdCw0LnQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+ItCc0L7QsdCw0LnQuyDQtNCw0YLQsCDQuNC00Y3QstGF0LPSr9C5INCx0L7Qu9C+0LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiLQlNCw0YLQsCDQuNC00Y3QstGF0LPSr9C5INCx0L7Qu9C+0LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiLQotCwINC30LDQsNGB0LDQvSDQtNCw0YLQsCDQsNGI0LjQs9C70LDQu9GC0YvQvSDRhdGP0LfQs9Cw0LDRgNGCINGF0q/RgNGN0LIuXG5cbtCl0Y3RgNGN0LIg0YLQsCDQtNCw0YLQsNCzINC00LDRhdC40L0g0LjQtNGN0LLRhdC20q/Sr9C70LHRjdC7INC+0L/QtdGA0LDRgtC+0YDRgiDRgtOp0LvQsdOp0YAg0YLTqdC706nRhSDRhdGN0YDRjdCz0YLRjdC5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiLQlNCw0YLQsCDQtNCw0YXQuNC9INC40LTRjdCy0YXQttKv0q/Qu9GN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSIxOTQwMjMxNTIxMjc0MTQ3NzcxIj4i0JjQvdGC0LXRgNC90LXRgiDRhdC+0LvQsdC+0LvRgiDQsdCw0LnRhdCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpINGF0L7Qu9Cx0L7Qs9C00YHQvtC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJHUFMg0YXQsNC50LYg0LHQsNC50L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJHUFMg0LHQsNC50YDRiNC40LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLQkdCw0LnRgNGI0LvRi9C9INGF0q/RgdGN0LvRgtKv0q/QtCDQuNC00Y3QstGF0YLRjdC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i0JHSr9GFINC80Y3QtNGN0LPQtNC70LjQudCzINGG0Y3QstGN0YDQu9GN0YUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+ItCQ0L/QvyDQvNGN0LTRjdGN0LvRjdC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLQlNGN0LvQs9GN0YYg0LDQstGC0L7QvNCw0YLQsNCw0YAg0Y3RgNCz0Y3QvdGNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i0JTRjdC70LPRjdGGINGF0Y3QstGC0Y3RjSDRh9C40LPQu9GN0LvQtCDRgtKv0LPQttC40LPQtNGB0Y3QvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4i0JTRjdC70LPRjdGGINCx0L7RgdC+0L4g0YfQuNCz0LvRjdC70Y3RjdGAINGC0q/Qs9C20LjQs9C00YHRjdC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiLQkNC80YLRgtCw0L3RiyDRhdCw0LnRgNGG0LDQsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYXlkcmVhbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+ItCt0YLQtdGA0L3QtdGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLQndC40YHQu9GN0LPQuNC50L0g0LPQvtGA0LjQvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiLQptGN0L3RjdCz0LvRjdC2INCx0LDQudC90LAsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnZWRfbGFiZWwiIG1zZ2lkPSI4ODY1NDEzMDc5NDE0MjQ2MDgxIj4i0KbRjdC90Y3Qs9C70Y3Qs9C00YHRjdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsIiBtc2dpZD0iNjMwNDE5MDI4NTE3MDcyMTQwMSI+ItCR0LvRjtGC0q/Sr9GCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4i0JHQu9GO0YLSr9Kv0YIgKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRgtOp0YXTqdOp0YDTqdC80LYpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiLQkdC70Y7RgtKv0q/RgiDRg9C90YLRgNCw0LDQu9GC0YLQsNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLQotC+0LTRgNC+0LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+ItCQ0LLRgtC+0LzQsNGCINGN0YDQs9GN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i0K3RgNCz0q/Sr9C70Y3Qu9GCINGC0q/Qs9C20LjQs9C00YHRjdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+ItCe0YDRg9GD0LvQsNGFINCw0YDQs9CwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4i0JHQsNC50YDRiNC40LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i0JHQsNC50YDRiNC40Lsg0LjQtNGN0LLRhdCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiLQnNC10LTQuNCwINGC06nRhdOp06nRgNOp0LzQtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4i0JfTqdCy0YXTqdC9INGP0LDRgNCw0LvRgtCw0Lkg0LTRg9GD0LTQu9Cw0LPQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+ItCi0L7RhdC40YDQs9C+0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+ItCm0LDQsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4i0JHQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i0KXQvtC70LHQvtCz0LTQvtC+0LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+ItCh0q/Qu9C20Y3RjdCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpINGD0L3RgtCw0YDRgdCw0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4i0JTQsNC80LbRg9GD0LvQsNGFINC00Y3Qu9Cz0Y3RhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+ItCi0L7QtNGA0L7QuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLQkNCS0KLQntCc0JDQoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiLTqNC90LPTqSDRg9GA0LLRg9GD0LvQsNGFINCz0L7RgNC40LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLQodCw0LnQttGA0YPRg9C70YHQsNC9INGP0LvQs9Cw0YDQsNC70YLQsNC5INCz0L7RgNC40LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+ItOo0L3Qs9OpINC30LDQu9GA0YPRg9C70LDRhSDQs9C+0YDQuNC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiLQodKv0LvQttGN0Y0g0YXRj9C90LDQs9C00LDQtlxu0LHQsNC50LYg0LHQvtC70LfQvtGI0LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLQpdCw0LnRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiI8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4t0LMg0LPRg9C70YHRg9GD0LvQsNGFLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiDRhdC40LnRhSDQt9Kv0q/QvdC70q/SryDQs9GD0LvRgdGD0YPQu9Cw0YUuIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1zLXJNWS1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tcy1yTVktbGFuZC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzViMGZhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tcy1yTVktbGFuZC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yb3RhdGlvbl9sb2NrZWQiIG1zZ2lkPSI3NjA5NjczMDExNDMxNTU2MDkyIj4iU2tyaW4ga2luaSBkaWt1bmNpIGRhbGFtIG9yaWVudGFzaSBsYW5kc2thcC4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3NGQ4YwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjA5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4iU2lzdGVtIFVJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+IlBkbSBiZXJzaWgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiJBbGloIGtlbHVhciBkYXJpIHNlbmFyYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4iTWFrbHVtYXQgYXBsaWthc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IlRpYWRhIGFwbGlrYXNpIHRlcmJhaGFydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4iQnVhbmcgYXBsaWthc2kgdGVyYmFoYXJ1Ijwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4iMSBhcGxpa2FzaSB0ZXJiYWhhcnUiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCBhcGxpa2FzaSB0ZXJiYWhhcnUiPC9pdGVtPgorICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4iVGlhZGEgcGVtYmVyaXRhaHVhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4iU2VkYW5nIGJlcmxhbmdzdW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+IlBlbWJlcml0YWh1YW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiJTYW1idW5na2FuIHBlbmdlY2FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfc3VidGl0bGUiIG1zZ2lkPSIxNzUyMDQwMDYyMDg3ODI5MTk2Ij4iQmF0ZXJpIHNlbWFraW4gbGVtYWguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4iQmVyYmFraSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJQZW5nZWNhc2FuIFVTQiB0aWRhayBkaXNva29uZy5cbkd1bmFrYW4gaGFueWEgcGVuZ2VjYXMgeWFuZyBkaWJla2Fsa2FuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3doeSIgbXNnaWQ9IjcyNzkxNjk2MDk1MTgzODYzNzIiPiJQZW5nZ3VuYWFuIGJhdGVyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+IlRldGFwYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiJNb2QgcGVzYXdhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiJBdXRvcHV0YXIgc2tyaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiJSRURBTSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4iQVVUTyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+IlBlbWJlcml0YWh1YW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4iQmx1ZXRvb3RoIGRpdGFtYmF0a2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4iU2VkaWFrYW4ga2FlZGFoIGlucHV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4iUGFwYW4ga2VrdW5jaSBmaXppa2FsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+IkJlbmFya2FuIGFwbGlrYXNpIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gbWVuZ2Frc2VzIHBlcmFudGkgVVNCPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4iQmVuYXJrYW4gYXBsaWthc2kgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiBtZW5nYWtzZXMgYWtzZXNvcmkgVVNCPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4iQnVrYSA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IGFwYWJpbGEgcGVyYW50aSBVU0IgaW5pIGRpc2FtYnVuZ2thbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IkJ1a2EgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiBhcGFiaWxhIGFrc2Vzb3JpIFVTQiBpbmkgZGlzYW1idW5na2FuPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IlRpYWRhIGFwbCB5ZyBkaXBzZyBiZnVuZ3NpIGRnbiBha3Nlc29yaSBVU0IgaW5pLiBLZXRhaHVpIGxnIHR0ZyBha3Nlc29yaSBpbmkgZGkgPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+IkFrc2Vzb3JpIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4iTGloYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiJHdW5ha2FuIHNlY2FyYSBsYWxhaSB1bnR1ayBwZXJhbnRpIFVTQiBpbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiJHdW5ha2FuIHNlY2FyYSBsYWxhaSB1bnR1ayBha3Nlc29yaSBVU0IgaW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ190aXRsZSIgbXNnaWQ9IjQ1MTM5MTgzOTMzODcxNDE5NDkiPiJCZW5hcmthbiBwZW55YWhwZXBpamF0YW4gVVNCPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiJDYXAgamFyaSBrZWt1bmNpIFJTQSBrb21wdXRlciBpYWxhaDpcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlNlbnRpYXNhIGJlbmFya2FuIGtvbXB1dGVyIGluaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilp1bSB1bnR1ayBtZW1lbnVoaSBza3JpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJSZWdhbmcgdXRrIG1lbWVudWhpIHNrcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+Ik1lbnlpbXBhbiB0YW5na2FwYW4gc2tyaW4uLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJNZW55aW1wYW4gdGFuZ2thcGFuIHNrcmluLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJUYW5na2FwYW4gc2tyaW4gc2VkYW5nIGRpc2ltcGFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGl0bGUiIG1zZ2lkPSI2NDYxODY1OTYwOTYxNDE0OTYxIj4iVGFuZ2thcGFuIHNrcmluIGRpdGFuZ2thcC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RleHQiIG1zZ2lkPSIxMTUyODM5NjQ3Njc3NTU4ODE1Ij4iU2VudHVoIHVudHVrIG1lbGloYXQgdGFuZ2thcGFuIHNrcmluIGFuZGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGl0bGUiIG1zZ2lkPSI3MDU3ODExMTY3NDY5MjI3NzEiPiJUaWRhayBkYXBhdCBtZW5hbmdrYXAgdGFuZ2thcGFuIHNrcmluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4iVGlkYWsgYm9sZWggbWVueWltcGFuIHRhbmdrYXBhbiBza3Jpbi4gU3RvcmFuIG11bmdraW4gc2VkYW5nIGRpZ3VuYWthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiJQaWxpaGFuIHBlbWluZGFoYW4gZmFpbCBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiJMZWthcGthbiBzZWJhZ2FpIHBlbWFpbiBtZWRpYSAoTVRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+Ikxla2Fwa2FuIHNlYmFnYWkga2FtZXJhIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiJQYXNhbmcgYXBsaWthc2kgUGluZGFoYW4gRmFpbCBBbmRyb2lkIHVudHVrIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+IktlbWJhbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iUnVtYWgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW51Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iQXBsaWthc2kgdGVyYmFoYXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iQ2FyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJLYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IkJ1dGFuZyB0dWthciBrYWVkYWggaW5wdXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IkJ1dGFuZyB6dW0ga2VzZXJhc2lhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IlNrcmluIHp1bSBsZWJpaCBrZWNpbCBrZXBhZGEgbGViaWggYmVzYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfY29ubmVjdGVkIiBtc2dpZD0iMjcwNzAyNzYzMzI0Mjk4MzM3MCI+IkJsdWV0b290aCBkaXNhbWJ1bmdrYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfZGlzY29ubmVjdGVkIiBtc2dpZD0iNzQxNjY0ODY2OTk3Njg3MDE3NSI+IkJsdWV0b290aCBkaXB1dHVza2FuIHNhbWJ1bmdhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiJUaWFkYSBiYXRlcmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X29uZV9iYXIiIG1zZ2lkPSI3Nzc0ODg3NzIxODkxMDU3NTIzIj4iQmF0ZXJpIHNhdHUgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiJCYXRlcmkgZHVhIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdGhyZWVfYmFycyIgbXNnaWQ9IjIzMDI5ODMzMzA4NjUwNDA0NDYiPiJCYXRlcmkgdGlnYSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4iQmF0ZXJpIHBlbnVoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4iVGlhZGEgdGVsZWZvbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiJUZWxlZm9uIHNhdHUgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdHdvX2JhcnMiIG1zZ2lkPSI4Mzg0OTA1MzgyODA0ODE1MjAxIj4iVGVsZWZvbiBkdWEgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiJUZWxlZm9uIHRpZ2EgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4iSXN5YXJhdCB0ZWxlZm9uIHBlbnVoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiJUaWFkYSBkYXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9vbmVfYmFyIiBtc2dpZD0iMTQxNTYyNTgzMzIzODI3MzYyOCI+IkRhdGEgc2F0dSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+IkRhdGEgZHVhIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdGhyZWVfYmFycyIgbXNnaWQ9IjkxNjc2NzA0NTIzOTUwMzg1MjAiPiJEYXRhIHRpZ2EgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiJJc3lhcmF0IGRhdGEgcGVudWguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiJXaWZpIGRpbWF0aWthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2lmaSBkaXB1dHVza2FuIHNhbWJ1bmdhbm55YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiJXaUZpIHNhdHUgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiJXaUZpIGR1YSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4iV2lGaSB0aWdhIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2ODUzNTYxMzAzNTg2NDgwMzc2Ij4iSXN5YXJhdCBXaUZpIHBlbnVoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iVGlhZGEgV2lNQVgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X29uZV9iYXIiIG1zZ2lkPSI0MTcwOTk0Mjk5MDExODYzNjQ4Ij4iV2lNQVggc2F0dSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJXaU1BWCBkdWEgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWCB0aWdhIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IklzeWFyYXQgV2lNQVggcGVudWguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaWduYWwiIG1zZ2lkPSI3MDY0NjQ1MzIwNzgyNTg1MTY3Ij4iVGlhZGEgaXN5YXJhdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4iVGlkYWsgZGlzYW1idW5na2FuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+IlRpYWRhIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4iU2F0dSBiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90d29fYmFycyIgbXNnaWQ9IjY0MzczNjM2NDgzODUyMDY2NzkiPiJEdWEgYmFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdGhyZWVfYmFycyIgbXNnaWQ9IjI2NDgyNDE0MTUxMTkzOTY2NDgiPiJUaWdhIGJhci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NpZ25hbF9mdWxsIiBtc2dpZD0iOTEyMjkyMjg4NjUxOTY3NjgzOSI+IklzeWFyYXQgcGVudWguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+IkRpaGlkdXBrYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29mZiIgbXNnaWQ9IjY0NzU1MDgxNTc3ODY4NTMxNTciPiJEaW1hdGlrYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nvbm5lY3RlZCIgbXNnaWQ9IjgzNjYyNTY2OTM3MTk0OTk2NjUiPiJEaXNhbWJ1bmdrYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMy41RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4iUGVyYXlhdWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IlRpYWRhIFNJTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4iUGVuYW1iYXRhbiBCbHVldG9vdGguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4iTW9kIHBlc2F3YXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4iQmF0ZXJpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwZXJhdHVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4iVGV0YXBhbiBzaXN0ZW0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiJQZW1iZXJpdGFodWFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiJQYWRhbWthbiBwZW1iZXJpdGFodWFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTIGRpZGF5YWthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4iR1BTIHNlZGFuZyBtZW5kYXBhdGthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+Ik1lc2luIFRlbGV0YWlwIGRpZGF5YWthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl92aWJyYXRlIiBtc2dpZD0iNjY2NTg1MzYzMzY0MTU1MDU1Ij4iUGVuZGVyaW5nIGJlcmdldGFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJQZW5kZXJpbmcgc2VueWFwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gZGl0b2xhay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbl9kaXNtaXNzZWQiIG1zZ2lkPSI4NTQyMTEzODcxODYzMDY5MjciPiJQZW1iZXJpdGFodWFuIGRpa2V0ZXBpa2FuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4iQmlkYWkgcGVtYmVyaXRhaHVhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4iVGV0YXBhbiBwYW50YXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+IkFwbCB0ZXJiYXJ1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfdXNlciIgbXNnaWQ9IjExMDQ4NDY2OTk4Njk0NzY4NTUiPiJQZW5nZ3VuYSA8eGxpZmY6ZyBpZD0iVVNFUiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaSIgbXNnaWQ9IjYwOTk3ODEwMzE2Njk3Mjg3MDkiPiI8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4iTXVkYWggQWxpaCA8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkJhdGVyaSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+Ik1vZCBQZXNhd2F0IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+Ikxva2FzaSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IlBlbmdnZXJhIGRpdGV0YXBrYW4gcGFkYSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IkRhdGEgMkctM0cgZGlsdW1wdWhrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJEYXRhIDRHIGRpbHVtcHVoa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+IkRhdGEgbXVkYWggYWxpaCBkaWx1bXB1aGthbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+IkRhdGEgZGlsdW1wdWhrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiJBbmRhIHRlbGFoIG1lbmNhcGFpIGhhZCBwZW5nZ3VuYWFuIGRhdGEgeWFuZyBkaW55YXRha2FuLlxuXG5KaWthIGFuZGEgbWVuZGF5YWthbiBzZW11bGEgZGF0YSwgYW5kYSBtdW5na2luIGRpa2VuYWthbiBjYWogb2xlaCBvcGVyYXRvci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4iRGF5YWthbiBzZW11bGEgZGF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjE5NDAyMzE1MjEyNzQxNDc3NzEiPiJUaWFkYSBzbWJnIEludGVybmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkgZGlzYW1idW5na2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJNZW5jYXJpIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJMb2thc2kgZGl0ZXRhcGthbiBvbGVoIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IlBlcm1pbnRhYW4gbG9rYXNpIGFrdGlmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iUGFkYW1rYW4gc2VtdWEgcGVtYmVyaXRhaHVhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iTWFrbHVtYXQgYXBsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJTa3JpbiBha2FuIGJlcnB1dGFyIHNlY2FyYSBhdXRvbWF0aWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJTa3JpbiBkaWt1bmNpIGRhbGFtIG9yaWVudGFzaSBsYW5kc2thcC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iU2tyaW4gZGlrdW5jaSBkYWxhbSBvcmllbnRhc2kgcG90cmV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJCZWthcyBQZW5jdWNpIE11bHV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkxhbXVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+Ik1vZCBrYXBhbCB0ZXJiYW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+Ik1lbmdlY2FzLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IlN1ZGFoIGRpY2FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsIiBtc2dpZD0iNjMwNDE5MDI4NTE3MDcyMTQwMSI+IkJsdWV0b290aCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9tdWx0aXBsZV9kZXZpY2VzX2xhYmVsIiBtc2dpZD0iMzkxMjI0NTU2NTYxMzY4NDczNSI+IkJsdWV0b290aCAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IFBlcmFudGkpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiJCbHVldG9vdGggRGltYXRpa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiJLZWNlcmFoYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IkF1dG8gUHV0YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iUHV0YXJhbiBEaWt1bmNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+IkthZWRhaCBJbnB1dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+Ikxva2FzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJMb2thc2kgRGltYXRpa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+IlBlcmFudGkgbWVkaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IlBhbmdnaWxhbiBLZWNlbWFzYW4gU2FoYWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfc2V0dGluZ3NfbGFiZWwiIG1zZ2lkPSI1MzI2NTU2NTkyNTc4MDY1NDAxIj4iVGV0YXBhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4iTWFzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4iU2F5YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iVGlkYWsgRGlzYW1idW5na2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IlRpYWRhIFJhbmdrYWlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIERpbWF0aWthbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJTa3JpbiBDYXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iS2VjZXJhaGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iTW9kIHBlbnlvbmdzYW5nYW4gd2FybmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJNb2Qga29udHJhcyBkaXBlcnRpbmdrYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZCBwZW1iZXR1bGFuIHdhcm5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJSYW5na2FpYW4gbXVuZ2tpblxuYm9sZWggZGlwYW50YXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkNhcmlhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJMdW5jdXJrYW4ga2UgYXRhcyB1bnR1ayA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iTHVuY3Vya2FuIGtlIGtpcmkgdW50dWsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXMvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMTJjY2IuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKLSAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotIC0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4iU2lzdGVtIFVJIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9jbGVhcl9hbGxfYnV0dG9uIiBtc2dpZD0iNzc3NDcyMTM0NDcxNjczMTYwMyI+IlBkbSBiZXJzaWgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiJBbGloIGtlbHVhciBkYXJpIHNlbmFyYWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4iTWFrbHVtYXQgYXBsaWthc2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IlRpYWRhIGFwbGlrYXNpIHRlcmJhaGFydSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4iQnVhbmcgYXBsaWthc2kgdGVyYmFoYXJ1Ijwvc3RyaW5nPgotICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgotICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4iMSBhcGxpa2FzaSB0ZXJiYWhhcnUiPC9pdGVtPgotICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCBhcGxpa2FzaSB0ZXJiYWhhcnUiPC9pdGVtPgotICA8L3BsdXJhbHM+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI0NzU1MjYxMTY3MTkzODMzMjEzIj4iVGlhZGEgcGVtYmVyaXRhaHVhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4iU2VkYW5nIGJlcmxhbmdzdW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+IlBlbWJlcml0YWh1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd190aXRsZSIgbXNnaWQ9IjI3ODMxMDQ4MDc1NTEyMTE2MzkiPiJTYW1idW5na2FuIHBlbmdlY2FzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfc3VidGl0bGUiIG1zZ2lkPSIxNzUyMDQwMDYyMDg3ODI5MTk2Ij4iQmF0ZXJpIHNlbWFraW4gbGVtYWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4iQmVyYmFraSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJQZW5nZWNhc2FuIFVTQiB0aWRhayBkaXNva29uZy5cbkd1bmFrYW4gaGFueWEgcGVuZ2VjYXMgeWFuZyBkaWJla2Fsa2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3doeSIgbXNnaWQ9IjcyNzkxNjk2MDk1MTgzODYzNzIiPiJQZW5nZ3VuYWFuIGJhdGVyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+IlRldGFwYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiJNb2QgcGVzYXdhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiJBdXRvcHV0YXIgc2tyaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiJSRURBTSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4iQVVUTyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+IlBlbWJlcml0YWh1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4iQmx1ZXRvb3RoIGRpdGFtYmF0a2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4iU2VkaWFrYW4ga2FlZGFoIGlucHV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4iUGFwYW4ga2VrdW5jaSBmaXppa2FsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+IkJlbmFya2FuIGFwbGlrYXNpIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gbWVuZ2Frc2VzIHBlcmFudGkgVVNCPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4iQmVuYXJrYW4gYXBsaWthc2kgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiBtZW5nYWtzZXMgYWtzZXNvcmkgVVNCPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4iQnVrYSA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IGFwYWJpbGEgcGVyYW50aSBVU0IgaW5pIGRpc2FtYnVuZ2thbj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IkJ1a2EgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiBhcGFiaWxhIGFrc2Vzb3JpIFVTQiBpbmkgZGlzYW1idW5na2FuPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IlRpYWRhIGFwbCB5ZyBkaXBzZyBiZnVuZ3NpIGRnbiBha3Nlc29yaSBVU0IgaW5pLiBLZXRhaHVpIGxnIHR0ZyBha3Nlc29yaSBpbmkgZGkgPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+IkFrc2Vzb3JpIFVTQiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4iTGloYXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiJHdW5ha2FuIHNlY2FyYSBsYWxhaSB1bnR1ayBwZXJhbnRpIFVTQiBpbmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiJHdW5ha2FuIHNlY2FyYSBsYWxhaSB1bnR1ayBha3Nlc29yaSBVU0IgaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ190aXRsZSIgbXNnaWQ9IjQ1MTM5MTgzOTMzODcxNDE5NDkiPiJCZW5hcmthbiBwZW55YWhwZXBpamF0YW4gVVNCPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiJDYXAgamFyaSBrZWt1bmNpIFJTQSBrb21wdXRlciBpYWxhaDpcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlNlbnRpYXNhIGJlbmFya2FuIGtvbXB1dGVyIGluaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilp1bSB1bnR1ayBtZW1lbnVoaSBza3JpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJSZWdhbmcgdXRrIG1lbWVudWhpIHNrcmluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iWnVtIGtlc2VyYXNpYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iQXBhYmlsYSBhcGwgZGlyZWthIHVudHVrIHNrcmluIHlhbmcgbGViaWgga2VjaWwsIGthd2FsYW4genVtIGFrYW4gbXVuY3VsIGRpIHRlcGkgamFtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJNZW55aW1wYW4gdGFuZ2thcGFuIHNrcmluLi4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iTWVueWltcGFuIHRhbmdrYXBhbiBza3Jpbi4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iVGFuZ2thcGFuIHNrcmluIHNlZGFuZyBkaXNpbXBhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IlRhbmdrYXBhbiBza3JpbiBkaXRhbmdrYXAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+IlNlbnR1aCB1bnR1ayBtZWxpaGF0IHRhbmdrYXBhbiBza3JpbiBhbmRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RpdGxlIiBtc2dpZD0iNzA1NzgxMTE2NzQ2OTIyNzcxIj4iVGlkYWsgZGFwYXQgbWVuYW5na2FwIHRhbmdrYXBhbiBza3Jpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90ZXh0IiBtc2dpZD0iODEzNDAxMTI2OTU3MjQxNTQwMiI+IlRpZGFrIGJvbGVoIG1lbnlpbXBhbiB0YW5na2FwYW4gc2tyaW4uIFN0b3JhbiBtdW5na2luIHNlZGFuZyBkaWd1bmFrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI2NTUxMDUwMzc3Mzg4ODgyNzg3Ij4iUGlsaWhhbiBwZW1pbmRhaGFuIGZhaWwgVVNCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlX210cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI0MzMzNTA0NDEzNTYzMDIzNjI2Ij4iTGVrYXBrYW4gc2ViYWdhaSBwZW1haW4gbWVkaWEgKE1UUCkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiJMZWthcGthbiBzZWJhZ2FpIGthbWVyYSAoUFRQKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4iUGFzYW5nIGFwbGlrYXNpIFBpbmRhaGFuIEZhaWwgQW5kcm9pZCB1bnR1ayBNYWMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhY2siIG1zZ2lkPSI1NjcwMTE1Mzg5OTQ0MjkxMjAiPiJLZW1iYWxpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlJ1bWFoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVudSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IkFwbGlrYXNpIHRlcmJhaGFydSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iQnV0YW5nIHR1a2FyIGthZWRhaCBpbnB1dC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iQnV0YW5nIHp1bSBrZXNlcmFzaWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iU2tyaW4genVtIGxlYmloIGtlY2lsIGtlcGFkYSBsZWJpaCBiZXNhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4iQmx1ZXRvb3RoIGRpc2FtYnVuZ2thbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4iQmx1ZXRvb3RoIGRpcHV0dXNrYW4gc2FtYnVuZ2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+IlRpYWRhIGJhdGVyaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiJCYXRlcmkgc2F0dSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+IkJhdGVyaSBkdWEgYmFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90aHJlZV9iYXJzIiBtc2dpZD0iMjMwMjk4MzMzMDg2NTA0MDQ0NiI+IkJhdGVyaSB0aWdhIGJhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfZnVsbCIgbXNnaWQ9Ijg5MDkxMjI0MDE3MjAxNTg1ODIiPiJCYXRlcmkgcGVudWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19waG9uZSIgbXNnaWQ9IjQ4OTQ3MDg5MzcwNTI2MTEyODEiPiJUaWFkYSB0ZWxlZm9uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+IlRlbGVmb24gc2F0dSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiJUZWxlZm9uIGR1YSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90aHJlZV9iYXJzIiBtc2dpZD0iODUyMTkwNDg0MzkxOTk3MTg4NSI+IlRlbGVmb24gdGlnYSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY0NzE4MzQ4Njg1ODA3NTc4OTgiPiJJc3lhcmF0IHRlbGVmb24gcGVudWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+IlRpYWRhIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4iRGF0YSBzYXR1IGJhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdHdvX2JhcnMiIG1zZ2lkPSI2MTY2MDE4NDkyMzYwNDMyMDkxIj4iRGF0YSBkdWEgYmFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IkRhdGEgdGlnYSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3NpZ25hbF9mdWxsIiBtc2dpZD0iMjcwODM4NDYwODEyNDUxOTM2OSI+IklzeWFyYXQgZGF0YSBwZW51aC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IldpZmkgZGltYXRpa2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2lmaSIgbXNnaWQ9IjE0MjU0NzY1NTE4Mjc5MjQ0NzQiPiJXaWZpIGRpcHV0dXNrYW4gc2FtYnVuZ2FubnlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vbmVfYmFyIiBtc2dpZD0iNzczNTg5MzE3ODAxMDcyNDM3NyI+IldpRmkgc2F0dSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IldpRmkgZHVhIGJhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiJXaUZpIHRpZ2EgYmFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiJJc3lhcmF0IFdpRmkgcGVudWguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiJUaWFkYSBXaU1BWCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWCBzYXR1IGJhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IldpTUFYIGR1YSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90aHJlZV9iYXJzIiBtc2dpZD0iNjExNjU1MTYzNjc1MjEwMzkyNyI+IldpTUFYIHRpZ2EgYmFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4iSXN5YXJhdCBXaU1BWCBwZW51aC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiJUaWFkYSBpc3lhcmF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjYzOTUzMjYyNzYyMTM0MDI4ODMiPiJUaWRhayBkaXNhbWJ1bmdrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV96ZXJvX2JhcnMiIG1zZ2lkPSIzODA2MDYwMjI0NDY3MDI3ODg3Ij4iVGlhZGEgYmFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfb25lX2JhciIgbXNnaWQ9IjE2ODU3MzAxMTMxOTIwODE4OTUiPiJTYXR1IGJhci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+IkR1YSBiYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+IlRpZ2EgYmFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI5MTIyOTIyODg2NTE5Njc2ODM5Ij4iSXN5YXJhdCBwZW51aC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb24iIG1zZ2lkPSIyMzg1MjU0NjkzNjI0MzQ1MjY1Ij4iRGloaWR1cGthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+IkRpbWF0aWthbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IkRpc2FtYnVuZ2thbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiJQZXJheWF1YW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IkVkZ2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IldpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaW0iIG1zZ2lkPSI4Mjc0MDE3MTE4NDcyNDU1MTU1Ij4iVGlhZGEgU0lNLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX3RldGhlciIgbXNnaWQ9IjQxMDI3ODQ0OTgxNDAyNzE5NjkiPiJQZW5hbWJhdGFuIEJsdWV0b290aC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiJNb2QgcGVzYXdhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiJCYXRlcmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHBlcmF0dXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiJUZXRhcGFuIHNpc3RlbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IlBlbWJlcml0YWh1YW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IlBhZGFta2FuIHBlbWJlcml0YWh1YW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMgZGlkYXlha2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiJHUFMgc2VkYW5nIG1lbmRhcGF0a2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4iTWVzaW4gVGVsZXRhaXAgZGlkYXlha2FuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiJQZW5kZXJpbmcgYmVyZ2V0YXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlBlbmRlcmluZyBzZW55YXAuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBkaXRvbGFrLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+IlBlbWJlcml0YWh1YW4gZGlrZXRlcGlrYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiJCaWRhaSBwZW1iZXJpdGFodWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiJUZXRhcGFuIHBhbnRhcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4iQXBsIHRlcmJhcnUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+IlBlbmdndW5hIDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiJNdWRhaCBBbGloIDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMyRzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0ZXJpIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iTW9kIFBlc2F3YXQgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iUGVuZ2dlcmEgZGl0ZXRhcGthbiBwYWRhIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iRGF0YSAyRy0zRyBkaWx1bXB1aGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IkRhdGEgNEcgZGlsdW1wdWhrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4iRGF0YSBtdWRhaCBhbGloIGRpbHVtcHVoa2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIyMDg2ODE1MzA0ODU4OTY0OTU0Ij4iRGF0YSBkaWx1bXB1aGthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+IkFuZGEgdGVsYWggbWVuY2FwYWkgaGFkIHBlbmdndW5hYW4gZGF0YSB5YW5nIGRpbnlhdGFrYW4uXG5cbkppa2EgYW5kYSBtZW5kYXlha2FuIHNlbXVsYSBkYXRhLCBhbmRhIG11bmdraW4gZGlrZW5ha2FuIGNhaiBvbGVoIG9wZXJhdG9yLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiJEYXlha2FuIHNlbXVsYSBkYXRhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IlRpYWRhIHNtYmcgSW50ZXJuZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBkaXNhbWJ1bmdrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+Ik1lbmNhcmkgR1BTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+Ikxva2FzaSBkaXRldGFwa2FuIG9sZWggR1BTIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iUGFkYW1rYW4gc2VtdWEgcGVtYmVyaXRhaHVhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iTWFrbHVtYXQgYXBsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJTa3JpbiBha2FuIGJlcnB1dGFyIHNlY2FyYSBhdXRvbWF0aWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJTa3JpbiBkaWt1bmNpIGRhbGFtIG9yaWVudGFzaSBsYW5kc2thcC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iU2tyaW4gZGlrdW5jaSBkYWxhbSBvcmllbnRhc2kgcG90cmV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJMYW11biI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJNb2Qga2FwYWwgdGVyYmFuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiJNZW5nZWNhcywgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiJTdWRhaCBkaWNhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBQZXJhbnRpKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4iQmx1ZXRvb3RoIERpbWF0aWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4iS2VjZXJhaGFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiJBdXRvIFB1dGFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IlB1dGFyYW4gRGlrdW5jaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJLYWVkYWggSW5wdXQiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwgKDUwMTEzMjcwNDg3NDg3NjIyNTcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsICg3NDY0NTQ0MDg2NTA3MzMxNDU5KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbWVkaWFfZGV2aWNlX2xhYmVsIiBtc2dpZD0iMTMwMjkwNjgzNjM3MjYwMzc2MiI+IlBlcmFudGkgbWVkaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2xhYmVsIiBtc2dpZD0iNzcyNTY3MTMzNTU1MDY5NTU4OSI+IlJTU0kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yc3NpX2VtZXJnZW5jeV9vbmx5IiBtc2dpZD0iMjcxMzc3NDA0MTY3Mjg4Njc1MCI+IlBhbmdnaWxhbiBLZWNlbWFzYW4gU2FoYWphIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfc2V0dGluZ3NfbGFiZWwiIG1zZ2lkPSI1MzI2NTU2NTkyNTc4MDY1NDAxIj4iVGV0YXBhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4iTWFzYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4iU2F5YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iVGlkYWsgRGlzYW1idW5na2FuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IlRpYWRhIFJhbmdrYWlhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIERpbWF0aWthbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJQYXBhcmFuIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iUGFwYXJhbiBXYXlhcmxlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IktlY2VyYWhhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IlBlbWJlcml0YWh1YW4gZGlwYXBhcmthbiBkaSBzaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iQWtzZXMgcGFuZWwgcGFkYSBiaWxhLWJpbGEgbWFzYSBkZW5nYW4gbWVsZXJldCBrZSBiYXdhaC5cbkxlcmV0IGtlIGJhd2FoIHNla2FsaSBsYWdpIHVudHVrIG1lbmRhcGF0a2FuIGthd2FsYW4gc2lzdGVtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IkxlcmV0IGtlIGJhaGFnaWFuIHRlcGkgc2tyaW4gdW50dWsgbWVuYW1wYWtrYW4gYmFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJMZXJldCBkYXJpIHRlcGkgc2tyaW4gdW50dWsgbWVuYW1wYWtrYW4gYmFyIHNpc3RlbSI8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKaW5kZXggNzc4YmU4My4uNDg5NzFlYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlRpbGxhdCBhbGx0aWQgZnJhIGRlbm5lIGRhdGFtYXNraW5lbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilpvb20gZm9yIMOlIGZ5bGxlIHNramVybWVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IlN0cmVrayBmb3Igw6UgZnlsbGUgc2tqZXJtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iS29tcGF0aWJpbGl0ZXRzLXpvb21pbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iTsOlciBlbiBhcHAgZXIgdXRmb3JtZXQgZm9yIGVuIG1pbmRyZSBza2plcm0sIHZpc2VzIGRldCBlbiB6b29ta29udHJvbGwgdmVkIGtsb2trZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IkxhZ3JlciBza2plcm1kdW1wZW4g4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iTGFncmVyIHNramVybWR1bXBlbiDigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlNramVybWR1bXBlbiBsYWdyZXMuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlN0YXJ0c2lkZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJOeWxpZ2UgYXBwZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJTw7hrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkthbWVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iQnl0dCBrbmFwcCBmb3IgaW5uZGF0YW1ldG9kZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iWm9vbWtuYXBwIGZvciBrb21wYXRpYmlsaXRldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Ilpvb20gZnJhIG1pbmRyZSB0aWwgc3TDuHJyZSBza2plcm0uIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0dGVyaSDigJMgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJGbHltb2R1cyDigJMgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IlBvc2lzam9uIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQWxhcm1lbiBibGUgc3RpbHQgZm9yIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0ctZGF0YSBlciBkZWFrdGl2ZXJ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEctZGF0YSBlciBkZWFrdGl2ZXJ0Ijwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIHRpbGtvYmxldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iU8O4a2VyIGV0dGVyIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJQb3Npc2pvbiBhbmdpdHQgYXYgR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iQWt0aXZlIHN0ZWRzZm9yZXNww7hyc2xlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IkZqZXJuIGFsbGUgdmFyc2xpbmdlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iSW5mbyBvbSBhcHAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IlNramVybWVuIHJvdGVyZXIgYXV0b21hdGlzay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IlNramVybWVuIGVyIGzDpXN0IGkgbGlnZ2VuZGUgcmV0bmluZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iU2tqZXJtZW4gZXIgbMOlc3QgaSBzdMOlZW5kZSByZXRuaW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJEZXNzZXJ0bW9udGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkRhZ2Ryw7htIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IkZseW1vZHVzIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJJa2tlIHRpbGtvYmxldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJJbmdlbiBuZXR0dmVyayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIGVyIGF2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpLXNramVybSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IlRyw6VkbMO4cyBza2plcm0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iU2VuZCBza2plcm1lbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+Ikx5c3N0eXJrZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IlZhcnNsZW5lIHZpc2VzIGhlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IkJydWsgZGVtIG7DpXIgc29tIGhlbHN0IHZlZCDDpSBzdmVpcGUgbmVkb3Zlci5cblN2ZWlwIG5lZG92ZXIgaWdqZW4gZm9yIMOlIGfDpSB0aWwgc3lzdGVta29udHJvbGxlbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iU3ZlaXAgcMOlIGthbnRlbiBhdiBza2plcm1lbiBmb3Igw6UgZsOlIGZyZW0gZmVsdGV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJTdmVpcCBmcmEga2FudGVuIHDDpSBza2plcm1lbiBmb3Igw6UgZsOlIGZyZW0gc3lzdGVtZmVsdGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+Ik1vZHVzIGZvciBmYXJnZWludmVydGVyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iRm9yYmVkcmV0IGtvbnRyYXN0bW9kdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZHVzIGZvciBmYXJnZWtvcnJpZ2VyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJOZXR0dmVya2V0IGthblxudsOmcmUgb3ZlcnbDpWtldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iU8O4ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJEcmEgb3BwIGZvciDDpSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRHJhIHRpbCB2ZW5zdHJlIGZvciDDpSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5lLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5lLWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1Mjg2ZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmUtbGFuZC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yb3RhdGlvbl9sb2NrZWQiIG1zZ2lkPSI3NjA5NjczMDExNDMxNTU2MDkyIj4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkheCkueCkv+CksuClhyDgpLLgpY3gpK/gpL7gpKjgpY3gpKHgpLjgpY3gpJXgpYfgpKog4KSF4KS14KS44KWN4KSl4KS+4KSu4KS+IOCkrOCkqOCljeCkpiDgpJvgpaQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmUtck5QLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5lLXJOUC1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTI4NmUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5lLXJOUC1sYW5kL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3JvdGF0aW9uX2xvY2tlZCIgbXNnaWQ9Ijc2MDk2NzMwMTE0MzE1NTYwOTIiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSF4KS54KS/4KSy4KWHIOCksuCljeCkr+CkvuCkqOCljeCkoeCkuOCljeCkleClh+CkqiDgpIXgpLXgpLjgpY3gpKXgpL7gpK7gpL4g4KSs4KSo4KWN4KSmIOCkm+ClpCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWUyNzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxNjQ5MzczNDQ4NTAwMDQ0NjYiPiLgpKrgpY3gpLDgpKPgpL7gpLLgpYAgVUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4i4KS54KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4i4KS44KWC4KSa4KWA4KSs4KS+4KSfIOCkueCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiLgpJXgpYHgpKjgpYgg4KSo4KSv4KS+4KSBIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpJvgpYjgpKjgpKjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IuCkqOCkr+CkvuCkgSDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIg4KSW4KS+4KSw4KWH4KScIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IuClpyDgpK3gpLDgpJbgpLDgpYgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQg4KSt4KSw4KSW4KSw4KWI4KSV4KS+IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiLgpJXgpYHgpKjgpYgg4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4i4KSa4KSy4KS/4KSw4KS54KWH4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+IuCkuOClguCkmuCkqOCkvuCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iMjc4MzEwNDgwNzU1MTIxMTYzOSI+IuCkmuCkvuCksOCljeCknOCksCDgpJzgpKHgpL7gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfc3VidGl0bGUiIG1zZ2lkPSIxNzUyMDQwMDYyMDg3ODI5MTk2Ij4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkqOCljeCkr+ClguCkqCDgpLngpYHgpIHgpKbgpYgg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQlJTwveGxpZmY6Zz4g4KSs4KS+4KSB4KSV4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IlVTQiDgpJrgpL7gpLDgpY3gpJwg4KSX4KSw4KWN4KSoIOCkuOCkruCksOCljeCkpeCkv+CkpCDgpJvgpYjgpKjgpaRcbiDgpIbgpKrgpYLgpLDgpY3gpKTgpL8g4KSX4KSw4KS/4KSP4KSV4KWLIOCkmuCkvuCksOCljeCknOCksCDgpK7gpL7gpKTgpY3gpLAg4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3doeSIgbXNnaWQ9IjcyNzkxNjk2MDk1MTgzODYzNzIiPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KSq4KWN4KSw4KSv4KWL4KSXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIzMDIzODg5OTE2Njk5MjcwMjI0Ij4i4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc193aWZpX2J1dHRvbiIgbXNnaWQ9IjE3MzM5MjgxNTE2OTgzMTE5MjMiPiLgpLXgpL7gpIct4KSr4KS+4KSHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiLgpLngpLXgpL7gpIfgpJzgpLngpL7gpJwg4KSu4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+IuCkuOCljeCkteCkpDrgpJjgpYHgpK7gpY3gpKjgpYcg4KS44KWN4KSV4KWN4KSw4KS/4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4i4KSu4KWN4KSv4KWB4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4i4KS44KWN4KS14KSk4KSDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IuCkrOCljeCksuClgeCkn+ClgeCkpSDgpJ/gpYfgpKXgpLAg4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4i4KSH4KSo4KSq4KWB4KSfIOCkteCkv+Ckp+Ckv+CkueCksOClgiDgpLjgpYfgpJ/gpIXgpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4i4KSr4KS/4KSc4KS/4KSV4KSyIOCkleCkv+CkrOCli+CksOCljeCkoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IFVTQiDgpIngpKrgpJXgpLDgpKPgpLLgpL7gpIgg4KSq4KS54KWB4KSB4KSaIOCkpuCkv+CkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYcg4KS54KWLPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI1MTcxNzc1NDExMTc4ODY1NzUwIj4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiBVU0Ig4KSq4KS+4KSf4KSq4KWB4KSw4KWN4KSc4KS+4KSy4KS+4KSIIOCkquCkueClgeCkgeCkmiDgpKbgpL/gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWHIOCkueCliz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IuCkr+CliyBVU0Ig4KSJ4KSq4KSV4KSw4KSjIOCknOCli+CkoeCkv+Ckj+CkleCliyDgpKzgpYfgpLLgpL4gPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDgpJbgpYvgpLLgpY3gpKjgpYcg4KS54KWLPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4i4KSv4KWLIFVTQiDgpLjgpLngpL7gpK/gpJUg4KSc4KSh4KS+4KSoIOCkueClgeCkgeCkpuCkviA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOCkluCli+CksuCljeCkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4i4KSv4KS4IFVTQiDgpIngpKrgpJXgpLDgpKPgpLjgpIHgpJcg4KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkheCkqOClgeCkquCljeCksOCkr+Cli+CklyDgpJXgpL7gpK4g4KSX4KSw4KWN4KSm4KWI4KSo4KWkIOCkr+CkuCDgpIngpKrgpJXgpLDgpKPgpJXgpYsg4KSs4KS+4KSw4KWH4KSu4KS+IDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+IOCkruCkviDgpKfgpYfgpLDgpYgg4KSc4KS+4KSo4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiJVU0Ig4KS44KS54KSv4KWL4KSX4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiLgpKbgpYPgpLbgpY3gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiLgpK/gpYsgVVNCIOCkieCkquCkleCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSs4KS+4KSfIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2FjY2Vzc29yeSIgbXNnaWQ9IjEyMTA5NTQ1NzY5Nzk2MjE1OTYiPiLgpK/gpLggVVNCIOCkuOCkueCkvuCkr+CklSDgpLjgpL7gpK7gpL7gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkquClguCksOCljeCkteCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpOCkpuCljeCkteCkvuCksOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ190aXRsZSIgbXNnaWQ9IjQ1MTM5MTgzOTMzODcxNDE5NDkiPiJVU0Ig4KSh4KS/4KSs4KSXIOCkl+CksOCljeCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19tZXNzYWdlIiBtc2dpZD0iMjIyMDE0Mzg1NTkxMjM3NjQ5NiI+IuCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkleCliyBSU0Eg4KSV4KWB4KSe4KWN4KSc4KWAIOCklOCkguCksuCkvuCkm+CkvuCkqjpcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IuCkr+CliyDgpJXgpK7gpY3gpKrgpY3gpK/gpYHgpJ/gpLDgpKzgpL7gpJ8g4KS44KSn4KWI4KSBIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSt4KSw4KWN4KSoIOCknOClgeCkriDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkreCksOCljeCkqCDgpKTgpKjgpY3gpJXgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KS44KSfIOCkrOCkmuCkpCDgpJfgpLDgpY3gpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLjgpJ8g4KSs4KSa4KSkIOCkl+CksOCljeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KS44KSfIOCkrOCkmuCkpCDgpLngpYHgpIHgpKbgpYgg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90aXRsZSIgbXNnaWQ9IjY0NjE4NjU5NjA5NjE0MTQ5NjEiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLjgpJ8g4KSV4KWN4KSv4KS+4KSq4KWN4KSa4KSwIOCkl+CksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KWN4KSV4KWN4KSw4KS/4KSo4KS44KSfIOCkueClh+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90aXRsZSIgbXNnaWQ9IjcwNTc4MTExNjc0NjkyMjc3MSI+IuCkuOCljeCkleCljeCksOCkv+CkqOCkuOCknyDgpJXgpY3gpK/gpL7gpKrgpY3gpJrgpLAg4KSX4KSw4KWN4KSoIOCkuOCkleCkv+Ckj+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KS44KSf4KSy4KS+4KSIIOCkrOCkmuCkpCDgpJfgpLDgpY3gpKgg4KS44KSV4KWH4KSo4KWkIOCkreCko+CljeCkoeCkvuCksOCkoyDgpIngpKrgpK/gpYvgpJfgpK7gpL4g4KS54KWB4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IlVTQiDgpKvgpL7gpIfgpLIg4KS44KS+4KSw4KWN4KSo4KWHIOCkteCkv+CkleCksuCljeCkquCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+IuCkruCkv+CkoeCkv+Ckr+CkviDgpKrgpY3gpLLgpYfgpK/gpLAoTVRQKeCkleCliyDgpLDgpYLgpKrgpK7gpL4g4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+IuCkleCljeCkr+CkvuCkruClh+CksOCkvuCkleCliyDgpLDgpYLgpKrgpK7gpL4g4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSAoUFRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4i4KSu4KWN4KSv4KS+4KSV4KSV4KWLIOCksuCkvuCkl+CkvyDgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKEg4KSr4KS+4KSH4KSyIOCkn+CljeCksOCkvuCkqOCljeCkuOCkq+CksCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+IuCkquCkm+CkvuCkoeCkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLgpJfgpYPgpLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLgpK7gpYfgpKjgpYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLgpK3gpLDgpY3gpJbgpLDgpJXgpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLgpIfgpKjgpKrgpYHgpJ8g4KS14KS/4KSn4KS/IOCkrOCkn+CkqCDgpLjgpY3gpLXgpL/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IuCkruCkv+CksuCkvuCkieCkqOClhyDgpJzgpYHgpK4g4KSs4KSf4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLLgpL7gpIgg4KS44KS+4KSo4KWL4KSs4KS+4KSfIOCkoOClguCksuCliyDgpKrgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCknOCkoeCkvuCkqCDgpK3gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSl4KS44KSB4KSXIOCkteCkv+CkmuCljeCkm+Clh+CkpiDgpJfgpLDgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiLgpJXgpYHgpKjgpYgg4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+IuCkrOCljeCkr+CkvuCkn+CljeCksOCkvyDgpI/gpIngpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+IuCkrOCljeCkr+CkvuCkn+CljeCksOCkv+CkleCkviDgpKbgpYHgpIjgpLXgpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/4KSV4KS+IOCkpOCkv+CkqOCkteCkn+CkviDgpKrgpJ/gpY3gpJ/gpL/gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfZnVsbCIgbXNnaWQ9Ijg5MDkxMjI0MDE3MjAxNTg1ODIiPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KSq4KWC4KSw4KWN4KSjIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4i4KSr4KWL4KSoIOCkm+CliOCkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+IuCkq+Cli+CkqCDgpI/gpIngpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiLgpKvgpYvgpKgg4KSm4KWB4KSIIOCkquCkn+CljeCkn+Ckv+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiLgpKvgpYvgpKgg4KSk4KS/4KSoIOCkquCkn+CljeCkn+Ckv+CkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4i4KSr4KWL4KSoIOCkuOCkmeCljeCkleClh+CkpCDgpK3gpLDgpL/gpI/gpJXgpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2RhdGEiIG1zZ2lkPSI0NzkxOTY2Mjk1MDk2ODY3NTU1Ij4i4KSh4KWH4KSf4KS+IOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9vbmVfYmFyIiBtc2dpZD0iMTQxNTYyNTgzMzIzODI3MzYyOCI+IuCkoeClh+Ckn+CkvuCkleCliyDgpI/gpIngpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+IuCkoeClh+Ckn+CkviDgpKbgpYHgpIgg4KSs4KS+4KSn4KS+4KS54KSw4KWC4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4i4KSh4KWH4KSf4KS+IOCkpOCkv+CkqCDgpKzgpL7gpKfgpL7gpLngpLDgpYLgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4i4KSh4KWH4KSf4KS+IOCkuOCkguCkleClh+CkpCDgpKrgpYLgpLDgpY3gpKPgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IuCkteCkvuCkh+Ckq+CkvuCkhyDgpKzgpKjgpY3gpKbgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4i4KS14KS+4KSH4KSr4KS+4KSHIOCkteCkv+CkmuCljeCkm+Clh+CkpiDgpK3gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KSP4KSVIOCkquCkn+CljeCkn+Ckv+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KSm4KWB4KSIIOCkquCkn+CljeCkn+Ckv+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+IuCkteCkvuCkh+Ckq+CkvuCkhyDgpKTgpL/gpKgg4KSs4KS+4KSw4KS54KSw4KWC4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IuCkteCkvuCkh+Ckq+CkvuCkhyDgpLjgpJngpY3gpJXgpYfgpKQg4KSt4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiLgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpLgg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYIOCkj+CkieCkn+CkviDgpKrgpJ/gpY3gpJ/gpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IuCkteCkvuCkh+CkruCljeCkr+CkvuCkleCljeCkuCDgpKbgpYHgpIjgpLXgpJ/gpL4g4KSs4KS+4KSw4KS54KSw4KWC4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90aHJlZV9iYXJzIiBtc2dpZD0iNjExNjU1MTYzNjc1MjEwMzkyNyI+IuCkteCkvuCkh+CkruCljeCkr+CkvuCkleCljeCkuCDgpKTgpL/gpKjgpLXgpJ/gpL4g4KSs4KS+4KSw4KS54KSw4KWC4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3NjgwODk5ODY3OTU1Nzk1NTgiPiLgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpJXgpY3gpLgg4KS44KSZ4KWN4KSV4KWH4KSkIOCkreCksOCkv+Ckj+CkleCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+IuCkuOCkmeCljeCkleClh+CkpCDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4i4KSc4KSh4KS+4KSoIOCkqOCkl+CksOCkv+Ckj+CkleCli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+IuCktuClguCkqOCljeCkryDgpKrgpJ/gpY3gpJ/gpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4i4KSP4KSJ4KSf4KS+IOCkrOCkvuCksOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHdvX2JhcnMiIG1zZ2lkPSI2NDM3MzYzNjQ4Mzg1MjA2Njc5Ij4i4KSm4KWB4KSIIOCkquCkn+CljeCkn+Ckv+CkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdGhyZWVfYmFycyIgbXNnaWQ9IjI2NDgyNDE0MTUxMTkzOTY2NDgiPiLgpKTgpL/gpKjgpLXgpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiLgpLjgpJngpY3gpJXgpYfgpKQg4KSq4KWC4KSw4KWN4KSjIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiLgpJrgpL7gpLLgpYHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+IuCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IuCknOCkoeCkvuCkqCDgpJfgpLDgpL/gpI/gpJXgpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiLgpLDgpYvgpK7gpL/gpJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IkVkZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IuCkteCkvuCkhy3gpKvgpL7gpIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiJTSU0g4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IuCkrOCljeCksuClgeCkn+ClgeCkpSDgpJ/gpL/gpKXgpLAg4KSX4KSw4KWN4KSm4KWI4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4i4KS54KS14KS+4KSH4KSc4KS54KS+4KScIOCkruCli+CkoeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCljeCksOCkpOCkv+CktuCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4i4KS44KWC4KSa4KSo4KS+4KS54KSw4KWC4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IuCkuOClguCkmuCkqOCkviDgpJbgpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMg4KS44KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckj+CkleCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiJHUFMg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkueClgeCkgeCkpuCliOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4i4KSf4KWH4KSy4KS/IOCkn+CkvuCkh+CkquCksOCkvuCkh+Ckn+CksCDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+IuCkrOCknOCljeCkqOClhyDgpJXgpK7gpY3gpKrgpKgg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IuCkmOCkqOCljeCkn+ClgCDgpK7gpYzgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCkluCkvuCksOClh+CknCDgpJfgpLDgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4i4KS44KWC4KSa4KSo4KS+IOCkluCkvuCksOClh+CknOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4i4KS44KWC4KSa4KSo4KS+IOCkleCkleCljeCkt+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiLgpKbgpY3gpLDgpYHgpKQg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+IuCkteCksOCljeCkpOCkruCkvuCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3VzZXIiIG1zZ2lkPSIxMTA0ODQ2Njk5ODY5NDc2ODU1Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz7gpaQgPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4i4KSu4KWL4KS14KS+4KSH4KSyIDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+4KWkIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPuClpCA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLgpLngpLXgpL7gpJzgpLngpL7gpJwg4KSu4KWL4KShIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiI8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpJngpY3gpJXgpYfgpKQg4KSY4KSo4KWN4KSf4KWAIOCkuOClh+CknyDgpJfgpLDgpL/gpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRyDgpKHgpYfgpJ/gpL4g4KSF4KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIOCkoeClh+Ckn+CkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+IuCkruCli+CkrOCkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KSF4KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+IuCkoeClh+Ckn+CkviDgpIXgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4i4KSk4KSq4KS+4KSI4KSBIOCkqOCkv+CksOCljeCkpuCkv+Ckt+CljeCknyDgpKHgpYfgpJ/gpL4g4KSJ4KSq4KSv4KWL4KSXIOCkuOClgOCkruCkvuCkruCkviDgpKrgpYHgpJfgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpFxuXG7gpK/gpKbgpL8g4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkoeClh+Ckn+CkvuCksuCkvuCkiCDgpKrgpYHgpKjgpIPgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSo4KWBIOCkreCkr+CliyDgpK3gpKjgpYcg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkheCksOCljeCkleCliyDgpLjgpILgpJrgpL7gpLLgpJXgpKzgpL7gpJ8g4KS24KWB4KSy4KWN4KSVIOCksuCkl+CkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4i4KSh4KWH4KSf4KS+IOCkquClgeCkqOCkgyDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IuCkh+CkqOCljeCkn+CksOCkqOClh+CknyDgpJzgpKHgpL7gpKgg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpJzgpKHgpL/gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkdQU+CkleCliyDgpLLgpL7gpJfgpL8g4KSW4KWL4KSc4KWAIOCkl+CksOCljeCkpuCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJHUFMg4KSm4KWN4KS14KS+4KSw4KS+IOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpJ8g4KSX4KSw4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i4KS44KWN4KSl4KS+4KSoIOCkheCkqOClgeCksOCli+Ckp+CkueCksOClgiDgpLjgpJXgpY3gpLDgpL/gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLgpLjgpKzgpYgg4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIOCkueCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KS44KWN4KS14KSk4KSDIOCkmOClgeCkruCljeCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IuCkuOCljeCkleCljeCksOCkv+CkqOCksuCkvuCkiCDgpLLgpY3gpK/gpL7gpKjgpY3gpKHgpLjgpY3gpJXgpYfgpKog4KSF4KS14KS44KWN4KSl4KS+4KSu4KS+IOCkrOCkqOCljeCkpiDgpJfgpLDgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpKrgpYvgpLDgpY3gpJ/gpYfgpJ8g4KSF4KSt4KS/4KSu4KWC4KSW4KSu4KS+IOCksuCklSDgpJfgpLDgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IuCkpuCkv+CkteCkvuCkuOCkquCkqOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLgpLngpLXgpL7gpIfgpJzgpLngpL7gpJwg4KSu4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+IuCkmuCkvuCksOCljeCknCDgpLngpYHgpIHgpKbgpYgsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnZWRfbGFiZWwiIG1zZ2lkPSI4ODY1NDEzMDc5NDE0MjQ2MDgxIj4i4KSa4KS+4KSw4KWN4KScIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKUgKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYIpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKUg4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLgpJrgpK7gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IuCkuOCljeCkteCkpOCkgyDgpJjgpYHgpK7gpL7gpIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i4KSY4KWB4KSu4KWN4KSo4KWHIOCksuCklSDgpJfgpLDgpYfgpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i4KSG4KSX4KSkIOCkteCkv+Ckp+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IuCkuOCljeCkpeCkvuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiLgpLjgpY3gpKXgpL7gpKgg4KSs4KSo4KWN4KSmIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiLgpK7gpL/gpKHgpL/gpK/gpL4g4KSJ4KSq4KSV4KSw4KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLgpIbgpJXgpLjgpY3gpK7gpL/gpJUg4KSV4KSyIOCkruCkvuCkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+IuCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4i4KS44KSu4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdXNlcl9sYWJlbCIgbXNnaWQ9IjUyMzg5OTU2MzIxMzA4OTc4NDAiPiLgpK7gpLLgpL7gpIgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IuCkteCkvuCkhy3gpKvgpL7gpIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiLgpKTgpL7gpLDgpLDgpLngpL/gpKQg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i4KSJ4KSc4KWN4KSv4KS+4KSy4KSq4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IuCkuOCljeCkteCkpOCkgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI1ODQ4NDAyMTI3NDU1MDIxNzE0Ij4i4KS44KSe4KWN4KSc4KS+4KSyIOCkheCkqOClgeCkl+CkruCkv+CkpCDgpLngpYHgpKgg4KS44KSV4KWN4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG9uZV9idXR0b24iIG1zZ2lkPSIxNzU5Mzg3MTgxNzY2NjAzMzYxIj4i4KSt4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMTI3Mzc5Njk2NzA5MjAyNzI5MSI+IuCkuOCknuCljeCknOCkvuCksiDgpKjgpL/gpJfgpLDgpL7gpKjgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF9pbmZvX21lc3NhZ2UiIG1zZ2lkPSI1NDMwMzIwNTM5NTU1MzU4NDUyIj4i4KSv4KWLIOCkieCkquCkleCksOCkoyA8eGxpZmY6ZyBpZD0iTUFOQUdJTkdfRE9NQUlOIj4lczwveGxpZmY6Zz7gpKbgpY3gpLXgpL7gpLDgpL4g4KSq4KWN4KSw4KSs4KSo4KWN4KSn4KS/4KSkIOCkm+ClpCBcbiBcbiDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSq4KWN4KSw4KS24KS+4KS44KSVIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSwIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLXgpYfgpKwg4KS44KS+4KSH4KSfIOCksuCkl+CkvuCkr+CkpCDgpLjgpJ7gpY3gpJzgpL7gpLIg4KSX4KSk4KS/4KS14KS/4KSn4KS/IOCkheCkqOClgeCkl+CkruCkqCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KS34KSuIOCkm+ClpCBcbiBcbiDgpKXgpKog4KSc4KS+4KSo4KSV4KS+4KSw4KWA4KSV4KWLIOCksuCkvuCkl+CkvyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSq4KWN4KSw4KS24KS+4KS44KSV4KS44KSB4KSXIOCkuOCkruCljeCkquCksOCljeCklSDgpLDgpL7gpJbgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMDMzMDkxNjU2MTI5OTYzNjY5Ij4i4KSP4KSVIOCkpOClh+CkuOCljeCksOCliyDgpKrgpJXgpY3gpLcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkuOCknuCljeCknOCkvuCkslxuIOCkl+CkpOCkv+CkteCkv+Ckp+Ckvywg4KSH4KSu4KWH4KSyLCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSwIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpLXgpYfgpKzgpLjgpL7gpIfgpJ8g4KSF4KSo4KWB4KSX4KSu4KSoIOCkl+CksOCljeCkqCDgpLjgpJXgpY3gpLfgpK4g4KSb4KWkIFxuIFxuIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpIngpKrgpJXgpLDgpKPgpK7gpL4g4KS44KWN4KSl4KS+4KSq4KS/4KSkIOCkj+CklSDgpLXgpL/gpLbgpY3gpLXgpLjgpKjgpYDgpK8g4KSq4KWN4KSw4KS+4KSu4KS+4KSj4KS/4KSVIOCkoeClh+Ckn+CkvuCksuClhyDgpLjgpK7gpY3gpK3gpLUg4KSk4KWB4KSy4KWN4KSv4KS+4KSH4KSw4KS54KWH4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5NDY5NTY5NzczNzcxNjY3MDkiPiLgpLXgpL/gpLbgpY3gpLXgpLjgpKjgpYDgpK8g4KSq4KWN4KSw4KS+4KSu4KS+4KSj4KS/4KSVIOCkoeClh+Ckn+CkviDgpJzgpL7gpIHgpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2VlZTAxCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIwNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+IuCkquCljeCksOCko+CkvuCksuClgCBVSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiLgpLngpJ/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiLgpLjgpYLgpJrgpYDgpKzgpL7gpJ8g4KS54KSf4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkleCliyDgpJzgpL7gpKjgpJXgpL7gpLDgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IuCkleClgeCkqOCliCDgpKjgpK/gpL7gpIEg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkm+CliOCkqOCkqOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4i4KSo4KSv4KS+4KSBIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpJbgpL7gpLDgpYfgpJwg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4i4KWnIOCkreCksOCkluCksOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJciPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiIlZCDgpK3gpLDgpJbgpLDgpYjgpJXgpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+IuCkleClgeCkqOCliCDgpLjgpYLgpJrgpKjgpL7gpLngpLDgpYIg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiLgpJrgpLLgpL/gpLDgpLngpYfgpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4i4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4i4KSa4KS+4KSw4KWN4KSc4KSwIOCknOCkoeCkvuCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KSo4KWN4KSv4KWC4KSoIOCkueClgeCkgeCkpuCliCDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjEwNzcyNDQ5NDkzMTgyNjE3NjEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiDgpKzgpL7gpIHgpJXgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4iVVNCIOCkmuCkvuCksOCljeCknCDgpJfgpLDgpY3gpKgg4KS44KSu4KSw4KWN4KSl4KS/4KSkIOCkm+CliOCkqOClpFxuIOCkhuCkquClguCksOCljeCkpOCkvyDgpJfgpLDgpL/gpI/gpJXgpYsg4KSa4KS+4KSw4KWN4KSc4KSwIOCkruCkvuCkpOCljeCksCDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+IuCkrOCljeCkr+CkvuCkn+CljeCksOCkvyDgpKrgpY3gpLDgpK/gpYvgpJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiLgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IuCkteCkvuCkhy3gpKvgpL7gpIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+IuCkueCkteCkvuCkh+CknOCkueCkvuCknCDgpK7gpYvgpKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4i4KS44KWN4KS14KSkOuCkmOClgeCkruCljeCkqOClhyDgpLjgpY3gpJXgpY3gpLDgpL/gpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiLgpK7gpY3gpK/gpYHgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiLgpLjgpY3gpLXgpKTgpIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX25vdGlmaWNhdGlvbnMiIG1zZ2lkPSIzOTcxNDYxNzYyODA5MDUxMzciPiLgpLjgpYLgpJrgpKjgpL7gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCkn+Clh+CkpeCksCDgpK3gpK/gpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2lucHV0X21ldGhvZF9zZXR0aW5nc19jb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjM1MDQyOTI0NzE1MTIzMTc4MjciPiLgpIfgpKjgpKrgpYHgpJ8g4KS14KS/4KSn4KS/4KS54KSw4KWCIOCkuOClh+Ckn+CkheCkqiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiLgpKvgpL/gpJzgpL/gpJXgpLIg4KSV4KS/4KSs4KWL4KSw4KWN4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RldmljZV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjgzNDY5ODAwMTI3MTU2MjA1NyI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gVVNCIOCkieCkquCkleCksOCko+CksuCkvuCkiCDgpKrgpLngpYHgpIHgpJog4KSm4KS/4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IFVTQiDgpKrgpL7gpJ/gpKrgpYHgpLDgpY3gpJzgpL7gpLLgpL7gpIgg4KSq4KS54KWB4KSB4KSaIOCkpuCkv+CkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpYcg4KS54KWLPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4i4KSv4KWLIFVTQiDgpIngpKrgpJXgpLDgpKMg4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkrOClh+CksuCkviA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOCkluCli+CksuCljeCkqOClhyDgpLngpYs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLgpK/gpYsgVVNCIOCkuOCkueCkvuCkr+CklSDgpJzgpKHgpL7gpKgg4KS54KWB4KSB4KSm4KS+IDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g4KSW4KWL4KSy4KWN4KSo4KWHIOCkueCliz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiLgpK/gpLggVVNCIOCkieCkquCkleCksOCko+CkuOCkgeCklyDgpLjgpY3gpKXgpL7gpKrgpL/gpKQg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkleCkvuCkriDgpJfgpLDgpY3gpKbgpYjgpKjgpaQg4KSv4KS4IOCkieCkquCkleCksOCko+CkleCliyDgpKzgpL7gpLDgpYfgpK7gpL4gPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4g4KSu4KS+IOCkp+Clh+CksOCliCDgpJzgpL7gpKjgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+IlVTQiDgpLjgpLngpK/gpYvgpJfgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF92aWV3IiBtc2dpZD0iNjMwNDU2NTU1MzIxODE5Mjk5MCI+IuCkpuClg+CktuCljeCkryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IuCkr+CliyBVU0Ig4KSJ4KSq4KSV4KSw4KSj4KSV4KWLIOCksuCkvuCkl+CkvyDgpKrgpYLgpLDgpY3gpLXgpKjgpL/gpLDgpY3gpKfgpL7gpLDgpL/gpKTgpKzgpL7gpJ8g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IuCkr+CkuCBVU0Ig4KS44KS54KS+4KSv4KSVIOCkuOCkvuCkruCkvuCkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWC4KSw4KWN4KS14KSo4KS/4KSw4KWN4KSn4KS+4KSw4KS/4KSk4KSm4KWN4KS14KS+4KSw4KS+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IlVTQiDgpKHgpL/gpKzgpJcg4KSX4KSw4KWN4KSo4KSV4KWLIOCksuCkvuCkl+CkvyDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWHIOCkueCliz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4i4KSV4KSu4KWN4KSq4KWN4KSv4KWB4KSf4KSw4KSV4KWLIFJTQSDgpJXgpYHgpJ7gpY3gpJzgpYAg4KSU4KSC4KSy4KS+4KSb4KS+4KSqOlxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i4KSv4KWLIOCkleCkruCljeCkquCljeCkr+ClgeCkn+CksOCkrOCkvuCknyDgpLjgpKfgpYjgpIEg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpK3gpLDgpY3gpKgg4KSc4KWB4KSuIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KSt4KSw4KWN4KSoIOCkpOCkqOCljeCkleCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IuCkheCkqOClgeCkleClguCksuCkpOCkviDgpJzgpYHgpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i4KSc4KSsIOCkleClgeCkqOCliCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KS+4KSo4KWLIOCkuOCljeCkleCljeCksOCkv+CkqOCkleCliyDgpLLgpL7gpJfgpL8g4KSs4KSo4KS+4KSH4KSP4KSV4KWLIOCkueClgeCkqOCljeCkmywg4KSk4KSsIOCknOClgeCkriDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSY4KSh4KWA4KSV4KWLIOCkqOCknOCkv+CklSDgpKbgpYfgpJbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KS44KSfIOCkrOCkmuCkpCDgpJfgpLDgpY3gpKbgpYjigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLjgpJ8g4KSs4KSa4KSkIOCkl+CksOCljeCkpuCliOKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KS44KSfIOCkrOCkmuCkpCDgpLngpYHgpIHgpKbgpYgg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90aXRsZSIgbXNnaWQ9IjY0NjE4NjU5NjA5NjE0MTQ5NjEiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLjgpJ8g4KSV4KWN4KSv4KS+4KSq4KWN4KSa4KSwIOCkl+CksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiLgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KWN4KSV4KWN4KSw4KS/4KSo4KS44KSfIOCkueClh+CksOCljeCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90aXRsZSIgbXNnaWQ9IjcwNTc4MTExNjc0NjkyMjc3MSI+IuCkuOCljeCkleCljeCksOCkv+CkqOCkuOCknyDgpJXgpY3gpK/gpL7gpKrgpY3gpJrgpLAg4KSX4KSw4KWN4KSoIOCkuOCkleCkv+Ckj+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4i4KS44KWN4KSV4KWN4KSw4KS/4KSo4KS44KSf4KSy4KS+4KSIIOCkrOCkmuCkpCDgpJfgpLDgpY3gpKgg4KS44KSV4KWH4KSo4KWkIOCkreCko+CljeCkoeCkvuCksOCkoyDgpIngpKrgpK/gpYvgpJfgpK7gpL4g4KS54KWB4KSoIOCkuOCkleCljeCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IlVTQiDgpKvgpL7gpIfgpLIg4KS44KS+4KSw4KWN4KSo4KWHIOCkteCkv+CkleCksuCljeCkquCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+IuCkruCkv+CkoeCkv+Ckr+CkviDgpKrgpY3gpLLgpYfgpK/gpLAoTVRQKeCkleCliyDgpLDgpYLgpKrgpK7gpL4g4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+IuCkleCljeCkr+CkvuCkruClh+CksOCkvuCkleCliyDgpLDgpYLgpKrgpK7gpL4g4KSu4KS+4KSJ4KSo4KWN4KSfIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSAoUFRQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4i4KSu4KWN4KSv4KS+4KSV4KSV4KWLIOCksuCkvuCkl+CkvyDgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKEg4KSr4KS+4KSH4KSyIOCkn+CljeCksOCkvuCkqOCljeCkuOCkq+CksCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KS44KWN4KSl4KS+4KSq4KSo4KS+IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+IuCkquCkm+CkvuCkoeCkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLgpJfgpYPgpLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLgpK7gpYfgpKjgpYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLgpK3gpLDgpY3gpJbgpLDgpJXgpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLgpIfgpKjgpKrgpYHgpJ8g4KS14KS/4KSn4KS/IOCkrOCkn+CkqCDgpLjgpY3gpLXgpL/gpJog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IuCkruCkv+CksuCkvuCkieCkqOClhyDgpJzgpYHgpK4g4KSs4KSf4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLLgpL7gpIgg4KS44KS+4KSo4KWL4KSs4KS+4KSfIOCkoOClguCksuCliyDgpKrgpL7gpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIOCknOCkoeCkvuCkqCDgpK3gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4i4KSs4KWN4KSy4KWB4KSf4KWB4KSl4KS44KSB4KSXIOCkteCkv+CkmuCljeCkm+Clh+CkpiDgpJfgpLDgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2JhdHRlcnkiIG1zZ2lkPSIzNTgzNDMwMjIzNTI4MjA5NDYiPiLgpJXgpYHgpKjgpYgg4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9vbmVfYmFyIiBtc2dpZD0iNzc3NDg4NzcyMTg5MTA1NzUyMyI+IuCkrOCljeCkr+CkvuCkn+CljeCksOCkvyDgpI/gpIngpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+IuCkrOCljeCkr+CkvuCkn+CljeCksOCkv+CkleCkviDgpKbgpYHgpIjgpLXgpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/4KSV4KS+IOCkpOCkv+CkqOCkteCkn+CkviDgpKrgpJ/gpY3gpJ/gpL/gpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfZnVsbCIgbXNnaWQ9Ijg5MDkxMjI0MDE3MjAxNTg1ODIiPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8g4KSq4KWC4KSw4KWN4KSjIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4i4KSr4KWL4KSoIOCkm+CliOCkqOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+IuCkq+Cli+CkqCDgpI/gpIngpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiLgpKvgpYvgpKgg4KSm4KWB4KSIIOCkquCkn+CljeCkn+Ckv+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiLgpKvgpYvgpKgg4KSk4KS/4KSoIOCkquCkn+CljeCkn+Ckv+CkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4i4KSr4KWL4KSoIOCkuOCkmeCljeCkleClh+CkpCDgpK3gpLDgpL/gpI/gpJXgpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2RhdGEiIG1zZ2lkPSI0NzkxOTY2Mjk1MDk2ODY3NTU1Ij4i4KSh4KWH4KSf4KS+IOCkm+CliOCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9vbmVfYmFyIiBtc2dpZD0iMTQxNTYyNTgzMzIzODI3MzYyOCI+IuCkoeClh+Ckn+CkvuCkleCliyDgpI/gpIngpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+IuCkoeClh+Ckn+CkviDgpKbgpYHgpIgg4KSs4KS+4KSn4KS+4KS54KSw4KWC4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4i4KSh4KWH4KSf4KS+IOCkpOCkv+CkqCDgpKzgpL7gpKfgpL7gpLngpLDgpYLgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4i4KSh4KWH4KSf4KS+IOCkuOCkguCkleClh+CkpCDgpKrgpYLgpLDgpY3gpKPgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IuCkteCkvuCkh+Ckq+CkvuCkhyDgpKzgpKjgpY3gpKbgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4i4KS14KS+4KSH4KSr4KS+4KSHIOCkteCkv+CkmuCljeCkm+Clh+CkpiDgpK3gpK/gpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KSP4KSVIOCkquCkn+CljeCkn+Ckv+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiLgpLXgpL7gpIfgpKvgpL7gpIcg4KSm4KWB4KSIIOCkquCkn+CljeCkn+Ckv+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90aHJlZV9iYXJzIiBtc2dpZD0iMzQ5NTc1NTA0NDI3NjU4ODM4NCI+IuCkteCkvuCkh+Ckq+CkvuCkhyDgpKTgpL/gpKgg4KSs4KS+4KSw4KS54KSw4KWC4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IuCkteCkvuCkh+Ckq+CkvuCkhyDgpLjgpJngpY3gpJXgpYfgpKQg4KSt4KSw4KS/4KSP4KSV4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiLgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpLgg4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYIOCkj+CkieCkn+CkviDgpKrgpJ/gpY3gpJ/gpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IuCkteCkvuCkh+CkruCljeCkr+CkvuCkleCljeCkuCDgpKbgpYHgpIjgpLXgpJ/gpL4g4KSs4KS+4KSw4KS54KSw4KWC4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90aHJlZV9iYXJzIiBtc2dpZD0iNjExNjU1MTYzNjc1MjEwMzkyNyI+IuCkteCkvuCkh+CkruCljeCkr+CkvuCkleCljeCkuCDgpKTgpL/gpKjgpLXgpJ/gpL4g4KSs4KS+4KSw4KS54KSw4KWC4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3NjgwODk5ODY3OTU1Nzk1NTgiPiLgpLXgpL7gpIfgpK7gpY3gpK/gpL7gpJXgpY3gpLgg4KS44KSZ4KWN4KSV4KWH4KSkIOCkreCksOCkv+Ckj+CkleCkvuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+IuCkuOCkmeCljeCkleClh+CkpCDgpJvgpYjgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4i4KSc4KSh4KS+4KSoIOCkqOCkl+CksOCkv+Ckj+CkleCli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+IuCktuClguCkqOCljeCkryDgpKrgpJ/gpY3gpJ/gpL/gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4i4KSP4KSJ4KSf4KS+IOCkrOCkvuCksOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHdvX2JhcnMiIG1zZ2lkPSI2NDM3MzYzNjQ4Mzg1MjA2Njc5Ij4i4KSm4KWB4KSIIOCkquCkn+CljeCkn+Ckv+CkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdGhyZWVfYmFycyIgbXNnaWQ9IjI2NDgyNDE0MTUxMTkzOTY2NDgiPiLgpKTgpL/gpKjgpLXgpJ/gpL4g4KSq4KSf4KWN4KSf4KS/4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiLgpLjgpJngpY3gpJXgpYfgpKQg4KSq4KWC4KSw4KWN4KSjIOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiLgpJrgpL7gpLLgpYHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+IuCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IuCknOCkoeCkvuCkqCDgpJfgpLDgpL/gpI/gpJXgpYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiLgpLDgpYvgpK7gpL/gpJkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IkVkZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IuCkteCkvuCkhy3gpKvgpL7gpIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiJTSU0g4KSb4KWI4KSo4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IuCkrOCljeCksuClgeCkn+ClgeCkpSDgpJ/gpL/gpKXgpLAg4KSX4KSw4KWN4KSm4KWI4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4i4KS54KS14KS+4KSH4KSc4KS54KS+4KScIOCkruCli+CkoeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiLgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCljeCksOCkpOCkv+CktuCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uc19idXR0b24iIG1zZ2lkPSI0NDk4MDAwMzY5Nzc5NDIxODkyIj4i4KS44KWC4KSa4KSo4KS+4KS54KSw4KWC4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IuCkuOClguCkmuCkqOCkviDgpJbgpL7gpLLgpYAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMg4KS44KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckj+CkleCliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiJHUFMg4KSq4KWN4KSw4KS+4KSq4KWN4KSkIOCkueClgeCkgeCkpuCliOCkm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4i4KSf4KWH4KSy4KS/IOCkn+CkvuCkh+CkquCksOCkvuCkh+Ckn+CksCDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+IuCkrOCknOCljeCkqOClhyDgpJXgpK7gpY3gpKrgpKgg4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IuCkmOCkqOCljeCkn+ClgCDgpK7gpYzgpKjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCkluCkvuCksOClh+CknCDgpJfgpLDgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4i4KS44KWC4KSa4KSo4KS+IOCkluCkvuCksOClh+CknOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4i4KS44KWC4KSa4KSo4KS+IOCkleCkleCljeCkt+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiLgpKbgpY3gpLDgpYHgpKQg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iOTAxNDAzMjkxNjQxMDU5MDAyNyI+IuCkteCksOCljeCkpOCkruCkvuCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3VzZXIiIG1zZ2lkPSIxMTA0ODQ2Njk5ODY5NDc2ODU1Ij4i4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dpZmkiIG1zZ2lkPSI2MDk5NzgxMDMxNjY5NzI4NzA5Ij4iPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz7gpaQgPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4i4KSu4KWL4KS14KS+4KSH4KSyIDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+4KWkIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPuClpCA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTMkczwveGxpZmY6Zz7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLgpLngpLXgpL7gpJzgpLngpL7gpJwg4KSu4KWL4KShIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4i4KSs4KWN4KSy4KWB4KSf4KWB4KSlIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiI8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+4KSV4KWLIOCksuCkvuCkl+CkvyDgpLjgpJngpY3gpJXgpYfgpKQg4KSY4KSo4KWN4KSf4KWAIOCkuOClh+CknyDgpJfgpLDgpL/gpI/gpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRyDgpKHgpYfgpJ/gpL4g4KSF4KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHIOCkoeClh+Ckn+CkviDgpIXgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+IuCkruCli+CkrOCkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KSF4KSV4KWN4KS34KSuIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+IuCkoeClh+Ckn+CkviDgpIXgpJXgpY3gpLfgpK4g4KSX4KSw4KS/4KSv4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2ciIG1zZ2lkPSIzODUzMTE3MjY5MDUxODA2MjgwIj4i4KSk4KSq4KS+4KSI4KSBIOCkqOCkv+CksOCljeCkpuCkv+Ckt+CljeCknyDgpKHgpYfgpJ/gpL4g4KSJ4KSq4KSv4KWL4KSXIOCkuOClgOCkruCkvuCkruCkviDgpKrgpYHgpJfgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpFxuXG7gpK/gpKbgpL8g4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkoeClh+Ckn+CkvuCksuCkvuCkiCDgpKrgpYHgpKjgpIPgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSo4KWBIOCkreCkr+CliyDgpK3gpKjgpYcg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkheCksOCljeCkleCliyDgpLjgpILgpJrgpL7gpLLgpJXgpKzgpL7gpJ8g4KS24KWB4KSy4KWN4KSVIOCksuCkl+CkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4i4KSh4KWH4KSf4KS+IOCkquClgeCkqOCkgyDgpLjgpJXgpY3gpLfgpK4g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IuCkh+CkqOCljeCkn+CksOCkqOClh+CknyDgpJzgpKHgpL7gpKgg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpJzgpKHgpL/gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkdQU+CkleCliyDgpLLgpL7gpJfgpL8g4KSW4KWL4KSc4KWAIOCkl+CksOCljeCkpuCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJHUFMg4KSm4KWN4KS14KS+4KSw4KS+IOCkuOCljeCkpeCkvuCkqCDgpLjgpYfgpJ8g4KSX4KSw4KS/4KSP4KSV4KWLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i4KS44KWN4KSl4KS+4KSoIOCkheCkqOClgeCksOCli+Ckp+CkueCksOClgiDgpLjgpJXgpY3gpLDgpL/gpK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLgpLjgpKzgpYgg4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIOCkueCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKgg4KS44KWN4KS14KSk4KSDIOCkmOClgeCkruCljeCkqOClhyDgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IuCkuOCljeCkleCljeCksOCkv+CkqOCksuCkvuCkiCDgpLLgpY3gpK/gpL7gpKjgpY3gpKHgpLjgpY3gpJXgpYfgpKog4KSF4KS14KS44KWN4KSl4KS+4KSu4KS+IOCkrOCkqOCljeCkpiDgpJfgpLDgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpKrgpYvgpLDgpY3gpJ/gpYfgpJ8g4KSF4KSt4KS/4KSu4KWC4KSW4KSu4KS+IOCksuCklSDgpJfgpLDgpL/gpI/gpJXgpYsg4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IuCkpuCkv+CkteCkvuCkuOCkquCkqOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLgpIngpKHgpL7gpKgg4KSu4KWL4KShIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+IuCkmuCkvuCksOCljeCknCDgpLngpYHgpIHgpKbgpYgsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnZWRfbGFiZWwiIG1zZ2lkPSI4ODY1NDEzMDc5NDE0MjQ2MDgxIj4i4KSa4KS+4KSw4KWN4KScIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKUgKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpIngpKrgpJXgpLDgpKPgpLngpLDgpYIpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiLgpKzgpY3gpLLgpYHgpJ/gpYHgpKUg4KSs4KSo4KWN4KSmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLgpJrgpK7gpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IuCkuOCljeCkteCkpOCkgyDgpJjgpYHgpK7gpL7gpIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i4KSY4KWB4KSu4KWN4KSo4KWHIOCksuCklSDgpJfgpLDgpYfgpJXgpYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i4KSG4KSX4KSkIOCkteCkv+Ckp+CkvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IuCkuOCljeCkpeCkvuCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiLgpLjgpY3gpKXgpL7gpKgg4KSs4KSo4KWN4KSmIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiLgpK7gpL/gpKHgpL/gpK/gpL4g4KSJ4KSq4KSV4KSw4KSjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLgpIbgpJXgpLjgpY3gpK7gpL/gpJUg4KSV4KSyIOCkruCkvuCkpOCljeCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+IuCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4i4KS44KSu4KSvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdXNlcl9sYWJlbCIgbXNnaWQ9IjUyMzg5OTU2MzIxMzA4OTc4NDAiPiLgpK7gpLLgpL7gpIgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IuCkteCkvuCkhy3gpKvgpL7gpIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpKzgpKjgpY3gpKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4i4KS14KS+4KSHLeCkq+CkvuCkhyDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiLgpKTgpL7gpLDgpLDgpLngpL/gpKQg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i4KSJ4KSc4KWN4KSv4KS+4KSy4KSq4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IuCkuOCljeCkteCkpOCkgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiLgpK/gpLngpL7gpIEg4KSc4KS+4KSo4KSV4KS+4KSw4KWA4KS54KSw4KWCIOCkpuClh+CkluCkviDgpKrgpLDgpY3gpJvgpKjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiLgpKTgpLIg4KS54KWB4KSk4KWN4KSk4KWN4KSv4KS+4KSP4KSwIOCkpOCkv+CkqOClgOCkueCksOClguCksuCkvuCkiCDgpLjgpKfgpYjgpIIg4KSq4KS54KWB4KSB4KSaIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljVxu4KSq4KWN4KSw4KSj4KS+4KSy4KWAIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCko+CkleCliyDgpLLgpL7gpJfgpL8g4KSq4KWB4KSo4KSDIOCkpOCksiDgpLngpYHgpKTgpY3gpKTgpY3gpK/gpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCmluZGV4IGFiNzc4MzkuLjNiNDk4YmIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJBbHRpamQgdG9lc3RhYW4gdmFuYWYgZGV6ZSBjb21wdXRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilpvb20gb20gc2NoZXJtIHRlIHZ1bGxlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJSZWsgdWl0IHYuIHNjaGVybXZ1bGxpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJDb21wYXRpYmlsaXRlaXRzem9vbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJXYW5uZWVyIGVlbiBhcHAgaXMgb250d29ycGVuIHZvb3IgZWVuIGtsZWluZXIgc2NoZXJtLCB3b3JkdCBuYWFzdCBkZSBrbG9rIGVlbiB6b29ta25vcCB3ZWVyZ2VnZXZlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iU2NyZWVuc2hvdCBvcHNsYWFuLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iU2NyZWVuc2hvdCBvcHNsYWFuLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJTY3JlZW5zaG90IHdvcmR0IG9wZ2VzbGFnZW4uIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlN0YXJ0cGFnaW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVudSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IlJlY2VudGUgYXBwcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IlpvZWtlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJDYW1lcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+Iktub3Agdm9vciB3aWp6aWdlbiBpbnZvZXJtZXRob2RlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJLbm9wIHZvb3IgY29tcGF0aWJpbGl0ZWl0c3pvb20uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJLbGVpbmVyIHNjaGVybSB1aXR6b29tZW4gbmFhciBncm90ZXIgc2NoZXJtLiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkFjY3U6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iVmxpZWdtb2R1czogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IkxvY2F0aWUgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybSBpcyBpbmdlc3RlbGQgb3AgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0vM0ctZ2VnZXZlbnMgdWl0Z2VzY2hha2VsZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHLWdlZ2V2ZW5zIHVpdGdlc2NoYWtlbGQiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iVmVyYm9uZGVuIHZpYSB3aWZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJab2VrZW4gbmFhciBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iTG9jYXRpZSBiZXBhYWxkIG1ldCBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJMb2NhdGlldmVyem9la2VuIGFjdGllZiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IkFsbGUgbWVsZGluZ2VuIHdpc3Nlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iQXBwLWluZm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IlNjaGVybSB3b3JkdCBhdXRvbWF0aXNjaCBnZXJvdGVlcmQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJIZXQgc2NoZXJtIGlzIG51IHZlcmdyZW5kZWxkIGluIGxpZ2dlbmRlIHN0YW5kLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJIZXQgc2NoZXJtIGlzIG51IHZlcmdyZW5kZWxkIGluIHN0YWFuZGUgc3RhbmQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IkRlc3NlcnRzaG93Y2FzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYWdkcm9vbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJWbGllZ21vZHVzIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJOaWV0IHZlcmJvbmRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJHZWVuIG5ldHdlcmsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaWZpIHVpdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaWZpLXdlZXJnYXZlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iRHJhYWRsb3plIGRpc3BsYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iU2NoZXJtIHN0dXJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkhlbGRlcmhlaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUT01BVElTQ0giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iTWVsZGluZ2VuIHdvcmRlbiBoaWVyIHdlZXJnZWdldmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iVSBrdW50IGRlIG1lbGRpbmdlbiBvcCBlbGsgZ2V3ZW5zdCBtb21lbnQgb3BlbmVuIGRvb3IgbWV0IHV3IHZpbmdlciBvbWxhYWcgdGUgdmVnZW4uXG5WZWVnIG5vZ21hYWxzIG1ldCB1dyB2aW5nZXIgb21sYWFnIG9tIGRlIHN5c3RlZW1iZXN0dXJpbmdzZWxlbWVudGVuIHdlZXIgdGUgZ2V2ZW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iVmVlZyB2YW5hZiBkZSByYW5kIG9tIGJhbGsgd2VlciB0ZSBnZXZlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iVmVlZyB2YW5hZiBkZSByYW5kIHZhbiBoZXQgc2NoZXJtIG9tIGRlIHN5c3RlZW1iYWxrIHdlZXIgdGUgZ2V2ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iTW9kdXMgdm9vciBrbGV1cmludmVyc2llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iTW9kdXMgdm9vciB2ZXJiZXRlcmQgY29udHJhc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+Ik1vZHVzIHZvb3Iga2xldXJjb3JyZWN0aWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Ik5ldHdlcmsga2FuXG53b3JkZW4gZ2Vjb250cm9sZWVyZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iWm9la2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlZlZWcgb21ob29nIHZvb3IgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlZlZWcgbmFhciBsaW5rcyB2b29yIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCmluZGV4IGM5NGNmYzguLmRkZWZhYjggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJaYXdzemUgemV6d2FsYWogeiB0ZWdvIGtvbXB1dGVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IlBvd2nEmWtzeiwgYWJ5IHd5cGXFgm5pxIcgZWtyYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iUm96Y2nEhWduaWosIGFieSB3eXBlxYJuacSHIGVrcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iUG93acSZa3N6ZW5pZSB3IHRyeWJpZSB6Z29kbm/Fm2NpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IkplxZtsaSBhcGxpa2FjamEgem9zdGHFgmEgcHJ6eXN0b3Nvd2FuYSBkbyBtbmllanN6ZWdvIGVrcmFudSwgb2JvayB6ZWdhcmEgem9zdGFuaWUgd3nFm3dpZXRsb255IGVsZW1lbnQgc3RlcnVqxIVjeSBwb3dpxJlrc3plbmllbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iWmFwaXN5d2FuaWUgenJ6dXR1IGVrcmFudS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlphcGlzeXdhbmllIHpyenV0dSBla3JhbnUuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlphcGlzeXdhbmllIHpyenV0dSBla3JhbnUuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IkVrcmFuIGfFgsOzd255Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVudSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+Ik9zdGF0bmllIGFwbGlrYWNqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IlN6dWthaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJBcGFyYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IlByenljaXNrIHByemXFgsSFY3phbmlhIG1ldG9keSB3cHJvd2FkemFuaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IlByenljaXNrIHBvd2nEmWtzemVuaWEgbmEgcG90cnplYnkgemdvZG5vxZtjaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IlBvd2nEmWtzemEgbW5pZWpzenkgZWtyYW4gZG8gd2nEmWtzemVnby4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXRlcmlhOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IlRyeWIgc2Ftb2xvdG93eTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+Ikxva2FsaXphY2phIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQWxhcm0gdXN0YXdpb255IG5hIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iV3nFgsSFY3pvbm8gdHJhbnNtaXNqxJkgZGFueWNoIDJHLzNHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iV3nFgsSFY3pvbm8gdHJhbnNtaXNqxJkgZGFueWNoIDRHIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpOiBwb8WCxIVjem9ubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iV3lzenVraXdhbmllIHN5Z25hxYJ1IEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJMb2thbGl6YWNqYSB6IEdQU2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJQcm/Fm2J5IG8gbG9rYWxpemFjasSZIHPEhSBha3R5d25lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iVXN1xYQgd3N6eXN0a2llIHBvd2lhZG9taWVuaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+Ik8gYXBsaWthY2ppIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJFa3JhbiB6b3N0YW5pZSBvYnLDs2NvbnkgYXV0b21hdHljem5pZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkVrcmFuIGplc3QgemFibG9rb3dhbnkgdyBvcmllbnRhY2ppIHBvemlvbWVqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJFa3JhbiBqZXN0IHphYmxva293YW55IHcgb3JpZW50YWNqaSBwaW9ub3dlai4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iUMOzxYJrYSB6ZSBzxYJvZGtvxZtjaWFtaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJXeWdhc3phY3ogZWtyYW51Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IlRyeWIgc2Ftb2xvdG93eSI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk2LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iQnJhayBwb8WCxIVjemVuaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iQnJhayBzaWVjaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+Ild5xYLEhWN6IFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+Ild5xZt3aWV0bGFjeiBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+Ild5xZt3aWV0bGFjeiBiZXpwcnpld29kb3d5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IkVrcmFuIENhc3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJKYXNub8WbxIciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iQVVUT01BVFlDWk5BIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IlR1dGFqIHBva2F6dWrEhSBzacSZIHBvd2lhZG9taWVuaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJNb8W8ZXN6IGplIG90d29yennEhyB3IGRvd29sbmVqIGNod2lsaSwgcHJ6ZXN1d2FqxIVjIHcgZMOzxYIuXG5Qcnplc3XFhCBqZXN6Y3plIHJheiB3IGTDs8WCLCBieSBvdHdvcnp5xIcgdXN0YXdpZW5pYSBzeXN0ZW1vd2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iUHJ6ZXN1xYQgcGFsY2VtIG9kIGtyYXfEmWR6aSBla3JhbnUsIGJ5IG9ka3J5xIcgcGFzZWsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IlByemVzdcWEIHBhbGNlbSBvZCBrcmF3xJlkemkgZWtyYW51LCBieSBvZGtyecSHIHBhc2VrIHN5c3RlbXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iVHJ5YiBvZHdyw7NjZW5pYSBrb2xvcsOzdyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IlRyeWIgendpxJlrc3pvbmVnbyBrb250cmFzdHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IlRyeWIga29yZWtjamkga29sb3LDs3ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IlNpZcSHIG1vxbxlIGJ5xIdcbm1vbml0b3Jvd2FuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iU3p1a2FqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IlByemVzdcWEIHcgZ8OzcsSZOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iUHJ6ZXN1xYQgdyBsZXdvOiA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCmluZGV4IGMxMDYzMjkuLjBiZjc5M2EgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlBlcm1pdGlyIHNlbXByZSBhIHBhcnRpciBkZXN0ZSBjb21wdXRhZG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iWm9vbSBwYXJhIHByZWVuY2hlciBvIGVjcsOjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IkVzdGljYXIgcC4gY2FiZXIgZW0gZWMuIGludC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJab29tIGRlIGNvbXBhdGliaWxpZGFkZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJTZW1wcmUgcXVlIHVtYSBhcGxpY2HDp8OjbyB0aXZlciBzaWRvIGNvbmNlYmlkYSBwYXJhIGVjcsOjcyBtYWlzIHBlcXVlbm9zLCBhcGFyZWNlcsOhIHVtIGNvbnRyb2xvIGRlIHpvb20ganVudG8gYW8gcmVsw7NnaW8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IkEgZ3VhcmRhciBjYXB0dXJhIGRlIGVjcsOjLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iQSBndWFyZGFyIGNhcHR1cmEgZGUgZWNyw6MuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IkEgZ3VhcmRhciBjYXB0dXJhIGRlIGVjcsOjLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJQw6FnaW5hIGluaWNpYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW51Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iQXBsaWNhw6fDtWVzIHJlY2VudGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iUGVzcXVpc2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkPDom1hcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IkFsdGVybmFyIGJvdMOjbyBkZSBtw6l0b2RvIGRlIGludHJvZHXDp8Ojby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iQm90w6NvIHpvb20gZGUgY29tcGF0aWJpbGlkYWRlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iWm9vbSBtZW5vciBwYXJhIGVjcsOjIG1haW9yLiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IkJhdGVyaWEgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJNb2RvIGRlIEF2acOjbyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJMb2NhbGl6YcOnw6NvIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQWxhcm1lIGRlZmluaWRvIHBhcmEgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiJPcyBkYWRvcyAyRy0zRyBlc3TDo28gZGVzYXRpdmFkb3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJPcyBkYWRvcyA0RyBlc3TDo28gZGVzYXRpdmFkb3MiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkgbGlnYWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJBIHByb2N1cmFyIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJMb2NhbGl6YcOnw6NvIGRlZmluaWRhIHBvciBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJQZWRpZG9zIGRlIGxvY2FsaXphw6fDo28gYXRpdm9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iTGltcGFyIHRvZGFzIGFzIG5vdGlmaWNhw6fDtWVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvcm1hw6fDtWVzIGRhIGFwbGljYcOnw6NvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJPIGVjcsOjIHNlcsOhIHJvZGFkbyBhdXRvbWF0aWNhbWVudGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJPIGVjcsOjIGVzdMOhIGJsb3F1ZWFkbyBuYSBvcmllbnRhw6fDo28gaG9yaXpvbnRhbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iTyBlY3LDoyBlc3TDoSBibG9xdWVhZG8gbmEgb3JpZW50YcOnw6NvIHZlcnRpY2FsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJWaXRyaW5hIGRlIHNvYnJlbWVzYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGF5ZHJlYW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iTW9kbyBkZSBhdmnDo28iPC9zdHJpbmc+CkBAIC0xOTQsMTIgKzE5NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik7Do28gTGlnYWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IlNlbSBSZWRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkgRGVzbGlnYWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IlZpc3VhbGl6YcOnw6NvIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iRGlzcGxheSBTZW0gRmlvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJUcmFuc21pdGlyIGVjcsOjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iQnJpbGhvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE9Nw4FUSUNPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IkFzIG5vdGlmaWNhw6fDtWVzIHPDo28gYXByZXNlbnRhZGFzIGFxdWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJQb2RlIGFjZWRlciBlbSBxdWFscXVlciBhbHR1cmEsIGRlc2xpemFuZG8gcmFwaWRhbWVudGUgcGFyYSBiYWl4byBjb20gbyBkZWRvLlxuRGVzbGl6ZSBub3ZhbWVudGUgcGFyYSBiYWl4byBwYXJhIGFjZWRlciBhb3MgY29udHJvbG9zIGRvIHNpc3RlbWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iRGVzbGl6ZSBkYSBleHRyZW1pZGFkZSBkbyBlY3LDoyBwYXJhIHJldmVsYXIgYSBiYXJyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iRGVzbGl6ZSBkYSBleHRyZW1pZGFkZSBkbyBlY3LDoyBwYXJhIHJldmVsYXIgYSBiYXJyYSBkbyBzaXN0ZW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+Ik1vZG8gZGUgaW52ZXJzw6NvIGRlIGNvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+Ik1vZG8gZGUgY29udHJhc3RlIG1lbGhvcmFkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iTW9kbyBkZSBjb3JyZcOnw6NvIGRlIGNvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iQSByZWRlIHBvZGUgc2VyXG5tb25pdG9yaXphZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlBlc3F1aXNhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJEZXNsaXplIHBhcmEgY2ltYSBwYXJhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iRGVzbGl6ZSBwYXJhIGEgZXNxdWVyZGEgcGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKaW5kZXggOTFlN2YwMi4uZTRhODQxYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlNlbXByZSBwZXJtaXRpciBhIHBhcnRpciBkZXN0ZSBjb21wdXRhZG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iWm9vbSBwLyBwcmVlbmNoZXIgYSB0ZWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IkFtcGxpYXIgcC8gcHJlZW5jaGVyIHRlbGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJab29tIGVtIG1vZG8gZGUgY29tcGF0aWJpbGlkYWRlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IlF1YW5kbyB1bSBhcGxpY2F0aXZvIMOpIGRlc2Vudm9sdmlkbyBwYXJhIHVtYSB0ZWxhIG1lbm9yLCB1bSBjb250cm9sZSBkZSB6b29tIMOpIGV4aWJpZG8gcGVydG8gZG8gcmVsw7NnaW8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IlNhbHZhbmRvIGNhcHR1cmEgZGUgdGVsYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlNhbHZhbmRvIGNhcHR1cmEgZGUgdGVsYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iQSBjYXB0dXJhIGRlIHRlbGEgZXN0w6Egc2VuZG8gc2FsdmEuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlDDoWdpbmEgaW5pY2lhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJBcGxpY2F0aXZvcyByZWNlbnRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IlBlc3F1aXNhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJDw6JtZXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJBbHRlcmFyIGJvdMOjbyBkbyBtw6l0b2RvIGRlIGVudHJhZGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IkJvdMOjbyBkZSB6b29tIGRhIGNvbXBhdGliaWxpZGFkZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IkF1bWVudGFyIGEgdGVsYSBjb20gem9vbS4iPC9zdHJpbmc+CkBAIC0xNTUsNiArMTU1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXRlcmlhIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iTW9kbyBhdmnDo28gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iTG9jYWxpemHDp8OjbyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtZSBkZWZpbmlkbyBwYXJhIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iRGFkb3MgMkcgZSAzRyBkZXNhdGl2YWRvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IkRhZG9zIDRHIGRlc2F0aXZhZG9zIjwvc3RyaW5nPgpAQCAtMTY2LDEyICsxNjcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIGNvbmVjdGFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iQnVzY2FuZG8gR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkxvY2FsIGRlZmluaWRvIHBvciBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJTb2xpY2l0YcOnw7VlcyBkZSBsb2NhbGl6YcOnw6NvIGF0aXZhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IkxpbXBhciB0b2RhcyBhcyBub3RpZmljYcOnw7Vlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iSW5mb3JtYcOnw7VlcyBkbyBhcGxpY2F0aXZvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJBIHRlbGEgZ2lyYXLDoSBhdXRvbWF0aWNhbWVudGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJBIHRlbGEgZXN0w6EgYmxvcXVlYWRhIG5hIG9yaWVudGHDp8OjbyBwYWlzYWdlbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iQSB0ZWxhIGVzdMOhIGJsb3F1ZWFkYSBuYSBvcmllbnRhw6fDo28gcmV0cmF0by4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iTW9zdHJ1w6FyaW8gZGUgc29icmVtZXNhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYXlkcmVhbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJNb2RvIGF2acOjbyI8L3N0cmluZz4KQEAgLTE4NCwxMCArMTg2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iR2lyYXIgYXV0b21hdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iUm90YcOnw6NvIGJsb3F1ZWFkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiJNw6l0b2RvIGRlIGVudHJhZGEiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwgKDUwMTEzMjcwNDg3NDg3NjIyNTcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsICg3NDY0NTQ0MDg2NTA3MzMxNDU5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iTG9jYWxpemHDp8OjbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJMb2NhbGl6YcOnw6NvIGRlc2F0aXZhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4iRGlzcG9zaXRpdm8gZGUgbcOtZGlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJTb21lbnRlIGNoYW1hZGFzIGRlIGVtZXJnw6puY2lhIjwvc3RyaW5nPgpAQCAtMTk4LDEyICsxOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJOw6NvIGNvbmVjdGFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJTZW0gcmVkZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIGRlc2xpZ2FkbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaS1GaSBEaXNwbGF5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iRGlzcGxheSBzZW0gZmlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IlRyYW5zbWl0aXIgdGVsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkJyaWxobyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IkFzIG5vdGlmaWNhw6fDtWVzIGFwYXJlY2VtIGFxdWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJBY2Vzc2UgYSBxdWFscXVlciBtb21lbnRvIGRlc2xpemFuZG8gcGFyYSBiYWl4by5cbkRlc2xpemUgcGFyYSBiYWl4byBub3ZhbWVudGUgcGFyYSBhY2Vzc2FyIG9zIGNvbnRyb2xlcyBkbyBzaXN0ZW1hLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IkRlc2xpemUgYSBib3JkYSBkYSB0ZWxhIHBhcmEgdmVyIGEgYmFycmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IkRlc2xpemUgYSBwYXJ0aXIgZGEgYm9yZGEgZGEgdGVsYSB2ZXIgYSBiYXJyYSBkbyBzaXN0ZW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+Ik1vZG8gZGUgaW52ZXJzw6NvIGRlIGNvcmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iTW9kbyBkZSBjb250cmFzdGUgYXByaW1vcmFkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iTW9kbyBkZSBjb3JyZcOnw6NvIGRlIGNvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iQSByZWRlIHBvZGUgZXN0YXJcbnNvYiBtb25pdG9yYcOnw6NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJQZXNxdWlzYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4iUGFyYSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4sIGRlc2xpemUgcGFyYSBjaW1hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlBhcmEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LCBkZXNsaXplIHBhcmEgYSBlc3F1ZXJkYS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcm0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJtL3N0cmluZ3MueG1sCmluZGV4IGQ3NzcyZWQuLmVmMTQ3MTcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcm0vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ybS9zdHJpbmdzLnhtbApAQCAtOTIsMTAgKzkyLDYgQEAKICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGNvbXBhdF9tb2RlX29mZiAoNDQzNDQ2NzU3MjQ2MTMyNzg5OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBjb21wYXRfbW9kZV9oZWxwX2hlYWRlciAoNzk2OTQ5Mzk4OTM5NzUyOTkxMCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBjb21wYXRfbW9kZV9oZWxwX2JvZHkgKDQ5NDY3MjY3NzYzNTkyNzAwNDApIC0tPgotICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyICg3NDAzNjUyODk0MDU2NjkzNTE1KSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlICg4MjQyMjgyMTQ0NTM1NTU1Njk3KSAtLT4KQEAgLTEyNiw2ICsxMjIsMTAgQEAKICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcmVjZW50ICg4NTcxMzUwNTk4OTg3OTUyODgzKSAtLT4KICAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0ICgxMTAzODY3NTk2MzMwMjcxODQ4KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiAoODA2NDY3MTU4MjgyMDM1ODE1MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uICg1MDMyOTI2MTM0NzQwNDU2NDI0KSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiAoODQ2MTExNTMxODc0MjM1MDY5OSkgLS0+CkBAIC0yNzYsNiArMjc2LDggQEAKICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoICg1NzQ5MDU0OTcxMzQxODgyMzQwKSAtLT4KICAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24gKDQ1NzcyODIzMjk4NjY4MTMxMDApIC0tPgorICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSAoMzk1OTkwODk3Mjg5NzI5NTY2MCkgLS0+CiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSAoNTI1NzgzMzg4MTY5ODY0NDY4NykgLS0+CkBAIC0yOTgsNiArMzAwLDggQEAKICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCAoNDYxOTI3NDI0NDE0NjQ0NjQ2NCkgLS0+CiAgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSAoMjQyNzI5MDE0NjEzODE2OTAxNCkgLS0+CisgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCAoNTIzNTkzODU1OTI0NzE2NDkyNSkgLS0+CiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUgKDExNjM1NDc3MjkwMTUzOTAyNTApIC0tPgpAQCAtMzA4LDcgKzMxMiw3IEBACiAgICAgPHNraXAgLz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQgKDU4MDkzNjc1MjE2NDQwMTIxMTUpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgamVsbHlfYmVhbl9kcmVhbV9uYW1lICg1OTkyMDI2NTQzNjM2ODE2NzkyKSAtLT4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkZXNzZXJ0X2Nhc2UgKDEyOTUxNjE3NzYyMjM5NTkyMjEpIC0tPgogICAgIDxza2lwIC8+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc3RhcnRfZHJlYW1zICg3MjE5NTc1ODU4MzQ4NzE5NzkwKSAtLT4KICAgICA8c2tpcCAvPgpAQCAtMzU4LDIwICszNjIsMjQgQEAKICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsICg3NTU4Nzc4MTAwODQzODg1ODY0KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCAoNjg5MzU5Mjk2NDQ2MzYyNDMzMykgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCAoMjM1NTI5ODc0MDc2NTczNjkxOCkgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCAoMzcyMTA3Njk5Mjc0MzkxMjkwKSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlICg4NTk5Njc0MDU3NjczNjA1MzY4KSAtLT4KICAgICA8c2tpcCAvPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCAoNTA2NDk4Mjc0Mzc4NDA3MTIxOCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzdGF0dXNfYmFyX2hlbHBfdGl0bGUgKDExOTkyMzc3NDQwODY0NjkyMTcpIC0tPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCAoMTY2NjM1ODc4NDI4MzAyMDc2MikgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzdGF0dXNfYmFyX2hlbHBfdGV4dCAoNzg3NDYwNzE1NTA1MjA3NjMyMykgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwgKDMzMTk1MDc1NTE2ODkxMDg2OTIpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UgKDkwNTA4Njk1NDg5NTEwNDQzNzEpIC0tPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsICg4NTM0NDM2ODk3NDU1ODQ3NzApIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyAoNzExNzY5Mjc5NTE2MzYyMDYyNikgLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc3NsX2NhX2NlcnRfd2FybmluZyAoOTAwNTk1NDEwNjkwMjA1MzY0MSkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoICgzMDkxNTg3MjQ5Nzc2MDMzMTM5KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCAoNzE2OTAzMjQ3ODI1OTQ4NTE4MCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCAoNzIwNzQ3ODcxOTgwNTU2MjE2NSkgLS0+CiAgICAgPHNraXAgLz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKaW5kZXggNDJlMmQ0OC4uNGE0ZmNmMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlBlcm1pdGXFo2kgw65udG90ZGVhdW5hIGRlIHBlIGFjZXN0IGNvbXB1dGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iWm9vbSBwdC4gYSB1bXBsZSBlY3JhbnVsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IsOObnQuIHB0LiBhIHVtcGxlIGVjcmFudWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJab29tIGRlIGNvbXBhdGliaWxpdGF0ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJBdHVuY2kgY8OibmQgbyBhcGxpY2HFo2llIGEgZm9zdCBjb25jZXB1dMSDIHBlbnRydSB1biBlY3JhbiBtYWkgbWljLCBvIGNvbWFuZMSDIHBlbnRydSBtxINyaXJlL21pY8Wfb3JhcmUgdmEgYXDEg3JlYSBhbMSDdHVyaSBkZSBjZWFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJTZSBzYWx2LiBjYXB0dXJhIGRlIGVjcmFuLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iU2Ugc2FsdmVhesSDIGNhcHR1cmEgZGUgZWNyYW4uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IkNhcHR1cmEgZGUgZWNyYW4gZXN0ZSBzYWx2YXTEgy4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iRWNyYW51bCBkZSBwb3JuaXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVuaXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJBcGxpY2HFo2lpIHJlY2VudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJDxIN1dGHIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iQ2FtZXLEgyBmb3RvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJCdXRvbiBwZW50cnUgY29tdXRhcmVhIG1ldG9kZWkgZGUgaW50cm9kdWNlcmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IkJ1dG9uIHpvb20gcGVudHJ1IGNvbXBhdGliaWxpdGF0ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IkZhY2XFo2kgem9vbSBkZSBsYSBvIGltYWdpbmUgbWFpIG1pY8SDIGxhIHVuYSBtYWkgbWFyZS4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXRlcmllIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iTW9kIEF2aW9uIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IkxvY2HIm2llOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtxIMgc2V0YXTEgyBwZW50cnUgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiJEYXRlbGUgMkctM0cgYXUgZm9zdCBkZXphY3RpdmF0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IkRhdGVsZSA0RyBhdSBmb3N0IGRlemFjdGl2YXRlIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIGNvbmVjdGF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJTZSBjYXV0xIMgR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkxvY2HFo2llIHNldGF0xIMgcHJpbiBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJTb2xpY2l0xINyacKgbG9jYcibaWUgYWN0aXZlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iyJh0ZXJnZcWjaSB0b2F0ZSBub3RpZmljxINyaWxlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbmZvcm1hxaNpaSBkZXNwcmUgYXBsaWNhxaNpZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iRWNyYW51bCBzZSB2YSByb3RpIMOubiBtb2QgYXV0b21hdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IkVjcmFudWwgZXN0ZSBibG9jYXQgw65uIG9yaWVudGFyZWEgZGUgdGlwIHBlaXNhai4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iRWNyYW51bCBlc3RlIGJsb2NhdCDDrm4gb3JpZW50YXJlYSBkZSB0aXAgcG9ydHJldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iVml0cmluYSBjdSBkdWxjaXVyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYXlkcmVhbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJNb2QgQXZpb24iPC9zdHJpbmc+CkBAIC0xODIsMTAgKzE4NCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IlJvdGlyZSBhdXRvbWF0xIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iUm90aXJlIGJsb2NhdMSDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Ik1ldG9kxIMgZGUgaW50cm9kdWNlcmUiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwgKDUwMTEzMjcwNDg3NDg3NjIyNTcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsICg3NDY0NTQ0MDg2NTA3MzMxNDU5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4iTG9jYcibaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iTG9jYWxpemFyZWEgZXN0ZSBkZXphY3RpdmF0xIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4iRGlzcG96aXRpdiBtZWRpYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4iTnVtYWkgYXBlbHVyaSBkZSB1cmdlbsWjxIMiPC9zdHJpbmc+CkBAIC0xOTYsMTIgKzE5NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Ik5lY29uZWN0YXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iTmljaW8gcmXFo2VhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkgZGVjb25lY3RhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJBZmnFn2FqIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iRWNyYW4gd2lyZWxlc3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iRWNyYW4gZGUgYWZpyJlhcmUgYSB0cmFuc21pc2l1bmlpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iTHVtaW5veml0YXRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE9NQVQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iTm90aWZpY8SDcmlsZSBzZSBhZmnFn2VhesSDIGFpY2kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJBY2Nlc2HFo2ktbGUgb3JpY8OibmQgZ2xpc8OibmQgw65uIGpvcy5cbkdsaXNhxaNpIMOubiBqb3MgZGluIG5vdSBwZW50cnUgY29tZW56aWxlIHNpc3RlbXVsdWkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iR2xpc2HIm2kgZGluc3ByZSBtYXJnaW5lYSBlY3JhbnVsdWkgcGVudHJ1IGEgYWZpyJlhIGJhcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IkdsaXNhyJtpIGRpbnNwcmUgbWFyZ2luZWEgZWNyYW51bHVpIHBlbnRydSBhIGFmaciZYSBiYXJhIGRlIHNpc3RlbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJNb2QgZGUgaW52ZXJzYXJlIGEgY3Vsb3JpbG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iTW9kIGNvbnRyYXN0IMOubWJ1bsSDdMSDyJtpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iTW9kIGRlIGNvcmVjdGFyZSBhIGN1bG9yaWxvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iUmXIm2VhdWEgcG9hdGVcbmZpIG1vbml0b3JpemF0xIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IkPEg3V0YcWjaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJHbGlzYcWjaSDDrm4gc3VzIHBlbnRydSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iR2xpc2HFo2kgc3ByZSBzdMOibmdhIHBlbnRydSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbAppbmRleCAyMzNmZWU4YTguLjAwY2Q1NzEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLQktGB0LXQs9C00LAg0YDQsNC30YDQtdGI0LDRgtGMINC+0YLQu9Cw0LTQutGDINGBINGN0YLQvtCz0L4g0LrQvtC80L/RjNGO0YLQtdGA0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLQn9C+0LTQvtCz0L3QsNGC0Ywg0L/QviDRgNCw0LfQvNC10YDQsNC8INGN0LrRgNCw0L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLQoNCw0YHRgtGP0L3Rg9GC0Ywg0L3QsCDQstC10YHRjCDRjdC60YDQsNC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4i0JzQsNGB0YjRgtCw0LEg0Lgg0YHQvtCy0LzQtdGB0YLQuNC80L7RgdGC0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i0JXRgdC70Lgg0L/RgNC40LvQvtC20LXQvdC40LUg0YDQsNGB0YHRh9C40YLQsNC90L4g0L3QsCDRjdC60YDQsNC9INC80LXQvdGM0YjQuNGFINGA0LDQt9C80LXRgNC+0LIsINGA0Y/QtNC+0Lwg0YEg0YfQsNGB0LDQvNC4INC/0L7Rj9Cy0Y/RgtGB0Y8g0YHRgNC10LTRgdGC0LLQsCDQvNCw0YHRiNGC0LDQsdC40YDQvtCy0LDQvdC40Y8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+ItCh0L7RhdGA0LDQvdC10L3QuNC1Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i0KHQvtGF0YDQsNC90LXQvdC40LUuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+ItCh0L7RhdGA0LDQvdC10L3QuNC1Li4uIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+ItCU0L7QvNC+0LkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLQnNC10L3RjiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+ItCd0LXQtNCw0LLQvdC40LUg0L/RgNC40LvQvtC20LXQvdC40Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiLQn9C+0LjRgdC6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+ItCa0LDQvNC10YDQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i0JrQvdC+0L/QutCwINC/0LXRgNC10LrQu9GO0YfQtdC90LjRjyDRgdC/0L7RgdC+0LHQsCDQstCy0L7QtNCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLQmtC90L7Qv9C60LAg0LzQsNGB0YjRgtCw0LHQuNGA0L7QstCw0L3QuNGPICjRgNC10LbQuNC8INGB0L7QstC80LXRgdGC0LjQvNC+0YHRgtC4KSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i0KPQvNC10L3RjNGI0LXQvdC40LUg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDQtNC70Y8g0YPQstC10LvQuNGH0LXQvdC40Y8g0YHQstC+0LHQvtC00L3QvtCz0L4g0LzQtdGB0YLQsCDQvdCwINGN0LrRgNCw0L3QtS4iPC9zdHJpbmc+CkBAIC0xNTUsNiArMTU1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiLQkdCw0YLQsNGA0LXRjzogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+ItCg0LXQttC40Lwg0L/QvtC70LXRgtCwIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLQlNC+0YHRgtGD0L8g0Log0LPQtdC+0LTQsNC90L3Ri9C8IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLQkdGD0LTQuNC70YzQvdC40Log0YPRgdGC0LDQvdC+0LLQu9C10L0g0L3QsCA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4i0J/QtdGA0LXQtNCw0YfQsCDQtNCw0L3QvdGL0YUg0L/QviDQutCw0L3QsNC70LDQvCAyRyDQuCAzRyDQvtGC0LrQu9GO0YfQtdC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiLQn9C10YDQtdC00LDRh9CwINC00LDQvdC90YvRhSDQv9C+INC60LDQvdCw0LvRgyA0RyDQvtGC0LrQu9GO0YfQtdC90LAiPC9zdHJpbmc+CkBAIC0xNjYsMTIgKzE2NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg0L/QvtC00LrQu9GO0YfQtdC90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+ItCf0L7QuNGB0LogR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+ItCa0L7QvtGA0LTQuNC90LDRgtGLINC/0L4gR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i0JXRgdGC0Ywg0LDQutGC0LjQstC90YvQtSDQt9Cw0L/RgNC+0YHRiyDQvdCwINC+0L/RgNC10LTQtdC70LXQvdC40LUg0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjRjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+ItCj0LTQsNC70LjRgtGMINCy0YHQtSDRg9Cy0LXQtNC+0LzQu9C10L3QuNGPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+ItCeINC/0YDQuNC70L7QttC10L3QuNC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLQrdC60YDQsNC9INCx0YPQtNC10YIg0L/QvtCy0L7RgNCw0YfQuNCy0LDRgtGM0YHRjyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+ItCS0YvQsdGA0LDQvdCwINGC0L7Qu9GM0LrQviDQsNC70YzQsdC+0LzQvdCw0Y8g0L7RgNC40LXQvdGC0LDRhtC40Y8g0Y3QutGA0LDQvdCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLQktGL0LHRgNCw0L3QsCDRgtC+0LvRjNC60L4g0LrQvdC40LbQvdCw0Y8g0L7RgNC40LXQvdGC0LDRhtC40Y8g0Y3QutGA0LDQvdCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiLQmtC+0YDQvtCx0LrQsCDRgdC+INGB0LvQsNC00L7RgdGC0Y/QvNC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+ItCX0LDRgdGC0LDQstC60LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i0KDQtdC20LjQvCDQv9C+0LvQtdGC0LAiPC9zdHJpbmc+CkBAIC0xODYsMTAgKzE4OCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+ItCQ0LLRgtC+0L/QvtCy0L7RgNC+0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i0JDQstGC0L7Qv9C+0LLQvtGA0L7RgiDQstGL0LrQuy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i0KHQv9C+0YHQvtCxINCy0LLQvtC00LAiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwgKDUwMTEzMjcwNDg3NDg3NjIyNTcpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsICg3NDY0NTQ0MDg2NTA3MzMxNDU5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4i0J/QtdGA0LXQtNCw0YfQsCDQs9C10L7QtNCw0L3QvdGL0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i0JzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtSDQstGL0LrQuy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i0KDQtdC20LjQvCDQvNC10LTQuNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLQrdC60YHRgtGALiDQstGL0LfQvtCyIjwvc3RyaW5nPgpAQCAtMjAwLDEyICsyMDAsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLQndC10YIg0YHQvtC10LTQuNC90LXQvdC40Y8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i0J3QtdGCINGB0LXRgtC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg0LLRi9C60LsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+ItCf0YDQvtC10LrRgtC+0YAgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJXaS1GaS3QvNC+0L3QuNGC0L7RgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJXaS1GaS3QvNC+0L3QuNGC0L7RgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+ItCv0YDQutC+0YHRgtGMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+ItCQ0JLQotCe0J3QkNCh0KLQoNCe0JnQmtCQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+ItCt0YLQviDQv9Cw0L3QtdC70Ywg0YPQstC10LTQvtC80LvQtdC90LjQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+ItCV0LUg0LzQvtC20L3QviDQvtGC0LrRgNGL0YLRjCwg0L/RgNC+0LvQuNGB0YLQvdGD0LIg0Y3QutGA0LDQvSDQstC90LjQty5cbtCn0YLQvtCx0Ysg0L7RgtC60YDRi9GC0Ywg0L3QsNGB0YLRgNC+0LnQutC4LCDQv9GA0L7QstC10LTQuNGC0LUg0L/QsNC70YzRhtC10Lwg0LLQvdC40Lcg0LXRidGRINGA0LDQty4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLQp9GC0L7QsdGLINC+0YLQutGA0YvRgtGMINC/0LDQvdC10LvRjCwg0L/RgNC+0LLQtdC00LjRgtC1INC/0LDQu9GM0YbQtdC8INC+0YIg0LrRgNCw0Y8g0Log0YbQtdC90YLRgNGDINGN0LrRgNCw0L3QsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4i0KfRgtC+0LHRiyDQvtGC0LrRgNGL0YLRjCDQv9Cw0L3QtdC70Ywg0L3QsNCy0LjQs9Cw0YbQuNC4LCDQv9GA0L7QstC10LTQuNGC0LUg0L/QsNC70YzRhtC10Lwg0L7RgiDQutGA0LDRjyDQuiDRhtC10L3RgtGA0YMg0Y3QutGA0LDQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+ItCY0L3QstC10YDRgdC40Y8g0YbQstC10YLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+ItCa0L7QvdGC0YDQsNGB0YLQvdC+0YHRgtGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLQmtC+0YDRgNC10LrRhtC40Y8g0YbQstC10YLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4i0JTQtdC50YHRgtCy0LjRjyDQsiDRgdC10YLQuFxu0LzQvtCz0YPRgiDQvtGC0YHQu9C10LbQuNCy0LDRgtGM0YHRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i0J/QvtC40YHQuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiLQn9GA0L7QstC10LTQuNGC0LUg0LLQstC10YDRhSwg0YfRgtC+0LHRiyA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i0J/RgNC+0LLQtdC00LjRgtC1INCy0LvQtdCy0L4sINGH0YLQvtCx0YsgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zaS1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zaS1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YWJhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNpLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IuC2reC3kuC2u+C2uiDgtq/gt5DgtrHgt4og4Lat4LeS4La74LeD4LeKIOC2r+C3kuC3geC3j+C2seC2reC3kuC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2ktckxLLWxhbmQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNpLXJMSy1sYW5kL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YWJhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNpLXJMSy1sYW5kL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3JvdGF0aW9uX2xvY2tlZCIgbXNnaWQ9Ijc2MDk2NzMwMTE0MzE1NTYwOTIiPiLgtq3gt5Lgtrvgtrog4Lav4LeQ4Lax4LeKIOC2reC3kuC2u+C3g+C3iiDgtq/gt5Lgt4Hgt4/gtrHgtq3gt5Lgtrog4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YWNjZDEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIwNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+IuC2tOC2r+C3iuC2sOC2reC3kiBVSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiLgt4Tgt5Lgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4i4La94LeQ4La64LeS4LeD4LeK4Lat4LeU4LeA4LeZ4Lax4LeKIOC2ieC3gOC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4i4La64LeZ4Lav4LeU4La44LeKIOC2reC3nOC2u+C2reC3lOC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMiIG1zZ2lkPSI2NTc2MzkyOTUxMDUzOTk0NjQwIj4i4La44LeR4LatIOC2i+C2tOC3j+C2guC2nCDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IuC2uOC3keC2rSDgtrrgt5ngtq/gt5Tgtrjgt4og4LaJ4LeA4Lat4La94Lax4LeK4LaxIjwvc3RyaW5nPgorICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiPgorICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiIG1zZ2lkPSI1ODU0MTc2MDgzODY1ODQ1NTQxIj4i4La44LeR4LatIOC2uuC3meC2r+C3lOC2uOC3iiAxIOC2muC3iiI8L2l0ZW0+CisgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIiBtc2dpZD0iMTA0MDc4NDM1OTc5NDg5MDc0NCI+IuC2uOC3keC2rSDgtrrgt5ngtq/gt5Tgtrjgt4ogJWQg4Laa4LeKIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX29uZ29pbmdfZXZlbnRzX3RpdGxlIiBtc2dpZD0iMTY4MjUwNDUxMzMxNjg3OTIwMiI+IuC2r+C3kOC2seC2pyDgtrTgt4Dgtq3gt5LgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2xhdGVzdF9ldmVudHNfdGl0bGUiIG1zZ2lkPSI2NTk0NzY3NDM4NTc3NTkzMTcyIj4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSIyNzgzMTA0ODA3NTUxMjExNjM5Ij4i4LaF4La74Led4La04Laa4La64LanIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19zdWJ0aXRsZSIgbXNnaWQ9IjE3NTIwNDAwNjIwODc4MjkxOTYiPiLgtrbgt5Dgtqfgtrvgt5Lgtrog4LaF4Lap4LeUIOC3gOC3meC2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIxMDc3MjQ0OTQ5MzE4MjYxNzYxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQlJTwveGxpZmY6Zz4g4Laa4LeKIOC2ieC2reC3kuC2u+C3kuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJVU0Ig4LaG4La74Led4La04Lar4La6IOC3g+C3hOC2uiDgtrHgt5zgtq/gtprgt4rgt4Dgtrrgt5IuXG7gt4PgtrTgtrrgtrEg4La94LavIOC2huC2u+C3neC2tOC2muC2uiDgtrTgtrjgtqvgtprgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI3Mjc5MTY5NjA5NTE4Mzg2MzcyIj4i4La24LeQ4Lan4La74LeSIOC2t+C3j+C3gOC3kuC2reC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+IuC3g+C3kOC2muC3g+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+IuC2heC3hOC3g+C3iuC2uuC3j+C2seC3jyDgtobgtprgt4/gtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fcm90YXRpb24iIG1zZ2lkPSIzNzkwNDgyNTQxMzU3Nzk4NDIxIj4i4LeD4LeK4LeA4La64LaC4Laa4LeK4oCN4La74LeT4La64LeALeC2t+C3iuKAjeC2u+C2uOC2q+C2uiDgt4DgtrEg4Lat4LeS4La74La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19tdXRlX2xhYmVsIiBtc2dpZD0iNTU0NjgyNTQ5OTE3NDI5Mzk2Ij4i4Lax4LeS4LeB4LeK4LeB4La24LeK4LavIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTExNDUzNjE0OTYyMzI0Njc0Ij4i4LeD4LeK4LeA4La64LaC4Laa4LeK4oCN4La74LeT4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19ub3RpZmljYXRpb25zIiBtc2dpZD0iMzk3MTQ2MTc2MjgwOTA1MTM3Ij4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3RldGhlcmVkIiBtc2dpZD0iNzA5NDEwMTYxMjE2MTEzMzI2NyI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgtqfgt5ngtq/gtrvgt4og4Laa4La74LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9pbnB1dF9tZXRob2Rfc2V0dGluZ3NfY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSIzNTA0MjkyNDcxNTEyMzE3ODI3Ij4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uCDgt4Pgtprgt4PgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiLgtrfgt57gtq3gt5Lgtpog4La64Lat4LeU4La74LeUIOC2tOC3lOC3gOC2u+C3lOC3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfcGVybWlzc2lvbl9wcm9tcHQiIG1zZ2lkPSI4MzQ2OTgwMDEyNzE1NjIwNTciPiJVU0Ig4LaL4La04LeP4LaC4Lac4La6IOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgtprgt5Lgtrvgt5PgtrjgtqcgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3gOC3j+C2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IlVTQiDgtrjgt5ngt4Dgtr3gtrgg4La04LeK4oCN4La74LeA4Lea4LeBIOC2muC3kuC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeA4LeP4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4i4La44LeZ4La4IFVTQiDgtovgtrTgt4/gtoLgtpzgtrog4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kuC2pyA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOC3gOC3kuC3gOC3mOC2rSDgtprgtrvgtrHgt4rgtrHgtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLgtrjgt5ngtrggVVNCIOC2uOC3meC3gOC2veC2uOC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeTIOC2h+C2reC3kiDgt4Dgt5LgtqcgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5Lgt4Dgt5jgtq0g4Laa4La74Lax4LeK4Lax4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IuC2uOC3meC2uCBVU0Ig4La44LeZ4LeA4La94La4IOC3g+C2uOC2nCDgtprgt4rigI3gtrvgt5Lgtrrgt48g4Laa4La74LaxIOC3g+C3iuC2ruC3j+C2tOC3kuC2rSDgtrrgt5ngtq/gt5Tgtrjgt4og4Lax4Lec4La44LeQ4LatLiA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiDgt4Dgtr3gt5LgtrHgt4og4La44LeZ4La4IOC2uOC3meC3gOC2veC2uCDgtpzgt5DgtrEg4Lat4LeAIOC2r+C3kOC2seC2nOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iVVNCIOC2uOC3meC3gOC2veC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4i4La04LeZ4Lax4LeU4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9kZXZpY2UiIG1zZ2lkPSIxNDUwMjg3NDM3MDE3MzE1OTA2Ij4i4La44LeZ4La4IFVTQiDgtovgtrTgt4/gtoLgtpzgtrog4LeD4Laz4LeE4LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2r+C3meC2seC3iiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4i4La44LeaIFVTQiDgtrjgt5ngt4Dgtr3gtrgg4LeD4Laz4LeE4LePIOC3g+C3lOC2tOC3lOC2u+C3lOC2r+C3iuC2r+C3meC2seC3iiDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfdGl0bGUiIG1zZ2lkPSI0NTEzOTE4MzkzMzg3MTQxOTQ5Ij4iVVNCIOC2seC3kuC2r+C3nOC3g+C3iuC2muC2u+C2q+C2uuC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeA4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiLgtrjgt5ngtrgg4La04La74LeS4Lac4Lar4Laa4La64LeaIFJTQSDgtrrgtq3gt5Tgtrvgt5Qg4LaH4Laf4LeS4La94LeSIOC3g+C2p+C3hOC2sSDgt4DgtrHgt4rgtrHgt5o6XG48eGxpZmY6ZyBpZD0iRklOR0VSUFJJTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLgt4Pgt5Dgtrgg4LeA4LeS4Lan4La4IOC2uOC3meC2uCDgtrTgtrvgt5Lgtpzgtqvgtprgtrrgt5ngtrHgt4og4LaJ4LapIOC2veC2tuC3jyDgtq/gt5ngtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiLgtq3gt5Lgtrvgtrog4La04LeS4La74LeA4LeT4La44LanIOC3gOC3kuC3geC3j+C2veC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i4Lat4LeS4La74La6IOC2tOC3kuC2u+C3gOC3k+C2uOC2pyDgtoXgtq/gt5LgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i4Lat4LeS4La7IOC2u+C3lOC3gCDgt4Pgt5Tgtrvgtprgt5Lgtrjgt5LgtrHgt4rigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLgtq3gt5Lgtrsg4La74LeU4LeAIOC3g+C3lOC2u+C3kOC2muC3meC2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5PigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IuC2reC3kuC2uyDgtrvgt5Tgt4Ag4LeD4LeU4La74LeQ4Laa4LeZ4La44LeS4Lax4LeKIOC2tOC3gOC2reC3ky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IuC2reC3kuC2uyDgtrvgt5Tgt4Ag4Lac4LeK4oCN4La74LeE4Lar4La6IOC2muC2u+C2sSDgtr3gtq/gt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+IuC2lOC2tuC2nOC3miDgtq3gt5Lgtrsg4La74LeU4LeAIOC2tuC3kOC2veC3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RpdGxlIiBtc2dpZD0iNzA1NzgxMTE2NzQ2OTIyNzcxIj4i4Lat4LeS4La7IOC2u+C3lOC3gCDgtpzgt4rigI3gtrvgt4Tgtqvgtrog4Laa4LeS4La74LeT4La44LanIOC2seC3nOC3hOC3kOC2muC3kiDgt4Dgt5LgtrouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiLgtq3gt5Lgtrsg4La74LeU4LeAIOC3g+C3lOC2u+C3kOC2muC3k+C2uOC2pyDgtrHgt5zgt4Tgt5Dgtprgt5Ig4LeA4LeS4La6LiDgtobgtqDgtrrgtrHgtrog4La34LeP4LeA4LeS4Lat4LeP4LeA4LeaIOC2reC3kuC2tuC3meC2seC3gOC3jyDgt4Dgt5Lgtrog4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+IlVTQiDgtpzgt5zgtrHgt5Qg4LeE4LeU4LeA4La44LeP4La74LeUIOC3gOC3kuC2muC2veC3iuC2tCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9tdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNDMzMzUwNDQxMzU2MzAyMzYyNiI+IuC2uOC2sOC3iuKAjeC2uiDgtrDgt4/gt4Dgtprgtrrgtprgt4ogKE1UUCkg4La94LeZ4LeDIOC3g+C3gOC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiLgtprgt5Dgtrjgtrvgt4/gt4Dgtprgt4ogKFBUUCkg4La94LeZ4LeDIOC3g+C3gOC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsZXJfY2RfYnV0dG9uX3RpdGxlIiBtc2dpZD0iMjMxMjY2NzU3ODU2MjIwMTU4MyI+Ik1hYyDgt4PgtrPgt4Tgt48gQW5kcm9pZCDgtpzgt5zgtrHgt5Qg4LeE4LeU4LeA4La44LeP4La74LeUIOC2uuC3meC2r+C3lOC2uCDgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4i4LaG4La04LeD4LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IuC2uOC3lOC2veC3iiDgtrTgt5Lgtqfgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLgtrjgt5ngtrHgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLgtrjgt5Hgtq0g4La64LeZ4Lav4LeU4La44LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLgtobgtq/gt4/gtrEg4Laa4LeK4oCN4La74La44La6IOC2uOC3j+C2u+C3lCDgtprgt5Lgtrvgt5Pgtrjgt5og4La24Lec4Lat4LeK4Lat4La4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLgtpzgt5Dgt4XgtrTgt5ngtrEg4LeA4LeS4LeB4LeP4La94LaxIOC2tuC3nOC2reC3iuC2reC2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IuC3gOC3kuC3geC3j+C2vSDgtq3gt5Lgtrvgtrog4LeA4LeZ4LatIOC2muC3lOC2qeC3j+C3gCDgt4Dgt5Lgt4Hgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9Ijc0MTY2NDg2Njk5NzY4NzAxNzUiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LeA4LeS4LeD4Lax4LeK4Law4LeSIOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19iYXR0ZXJ5IiBtc2dpZD0iMzU4MzQzMDIyMzUyODIwOTQ2Ij4i4La24LeQ4Lan4La74LeS4La6IOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiLgtrbgt5Dgtqfgtrvgt5Lgtrog4Lat4LeT4La74LeUIOC2keC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdHdvX2JhcnMiIG1zZ2lkPSI4NTAwNjUwNDM4NzM1MDA5OTczIj4i4La24LeQ4Lan4La74LeS4La6IOC2reC3k+C2u+C3lCDgtq/gt5ngtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3RocmVlX2JhcnMiIG1zZ2lkPSIyMzAyOTgzMzMwODY1MDQwNDQ2Ij4i4La24LeQ4Lan4La74LeS4La6IOC2reC3k+C2u+C3lCDgtq3gt5TgtrHgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2Z1bGwiIG1zZ2lkPSI4OTA5MTIyNDAxNzIwMTU4NTgyIj4i4La24LeQ4Lan4La74LeS4La6IOC2tOC3kuC2u+C3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19waG9uZSIgbXNnaWQ9IjQ4OTQ3MDg5MzcwNTI2MTEyODEiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrrgtprgt4og4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfb25lX2JhciIgbXNnaWQ9IjY4NzY5OTI3ODEzMjY2NDExNSI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgtq3gt5Pgtrvgt5Qg4LaR4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdHdvX2JhcnMiIG1zZ2lkPSI4Mzg0OTA1MzgyODA0ODE1MjAxIj4i4Lav4LeU4La74Laa4Lau4Lax4La6IOC2reC3k+C2u+C3lCDgtq/gt5ngtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90aHJlZV9iYXJzIiBtc2dpZD0iODUyMTkwNDg0MzkxOTk3MTg4NSI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgtq3gt5Pgtrvgt5Qg4Lat4LeU4Lax4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI2NDcxODM0ODY4NTgwNzU3ODk4Ij4i4Lav4LeU4La74Laa4Lau4Lax4La64LeaIOC3g+C2guC2peC3j+C3gCDgtrTgt5Lgtrvgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fZGF0YSIgbXNnaWQ9IjQ3OTE5NjYyOTUwOTY4Njc1NTUiPiLgtq/gtq3gt4rgtq0g4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9vbmVfYmFyIiBtc2dpZD0iMTQxNTYyNTgzMzIzODI3MzYyOCI+IuC2r+C2reC3iuC2rSDgtq3gt5Pgtrvgt5Qg4LaR4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90d29fYmFycyIgbXNnaWQ9IjYxNjYwMTg0OTIzNjA0MzIwOTEiPiLgtq/gtq3gt4rgtq0g4Lat4LeT4La74LeUIDIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3RocmVlX2JhcnMiIG1zZ2lkPSI5MTY3NjcwNDUyMzk1MDM4NTIwIj4i4Lav4Lat4LeK4LatIOC2reC3k+C2u+C3lCAzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiLgtq/gtq3gt4rgtq0g4LeD4LaC4Lal4LeP4LeAIOC2tOC3kuC2u+C3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjMxNzczODAyOTY2OTc5MzM2MjciPiJXaWZpIOC2heC2muC3iuKAjeC2u+C3kuC2uuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3dpZmkiIG1zZ2lkPSIxNDI1NDc2NTUxODI3OTI0NDc0Ij4iV2lmaSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La7IOC2seC3nOC2uOC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9Ijc3MzU4OTMxNzgwMTA3MjQzNzciPiJXaWZpIOC2reC3k+C2u+C3lCDgtpHgtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iNDk5NDI3NDI1MDQ5NzI2MjQzNCI+IldpZmkg4Lat4LeT4La74LeUIOC2r+C3meC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiJXaUZpIOC2reC3k+C2u+C3lCDgtq3gt5TgtrHgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjg1MzU2MTMwMzU4NjQ4MDM3NiI+IldpZmkg4LeD4LaC4Lal4LeP4LeAIOC2tOC3kuC2u+C3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiJXaU1BWCDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYIOC2reC3k+C2u+C3lCDgtpHgtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90d29fYmFycyIgbXNnaWQ9IjkxNzYyMzY4NTgzMzY1MDIyODgiPiJXaU1BWCDgtq3gt5Pgtrvgt5Qg4Lav4LeZ4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWCDgtq3gt5Pgtrvgt5Qg4Lat4LeU4Lax4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzY4MDg5OTg2Nzk1NTc5NTU4Ij4iV2lNQVgg4LeD4LaC4Lal4LeP4LeAIOC2tOC3kuC2u+C3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaWduYWwiIG1zZ2lkPSI3MDY0NjQ1MzIwNzgyNTg1MTY3Ij4i4LeD4LaC4Lal4LePIOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI2Mzk1MzI2Mjc2MjEzNDAyODgzIj4i4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kyDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV96ZXJvX2JhcnMiIG1zZ2lkPSIzODA2MDYwMjI0NDY3MDI3ODg3Ij4i4Lat4LeT4La74LeUIOC3geC3lOC2seC3iuKAjeC2uuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4i4Lat4LeT4La74LeUIOC2keC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R3b19iYXJzIiBtc2dpZD0iNjQzNzM2MzY0ODM4NTIwNjY3OSI+IuC2reC3k+C2u+C3lCDgtq/gt5ngtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+IuC2reC3k+C2u+C3lCDgtq3gt5TgtrHgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiLgt4PgtoLgtqXgt4/gt4Ag4La04LeS4La74LeTIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb24iIG1zZ2lkPSIyMzg1MjU0NjkzNjI0MzQ1MjY1Ij4i4LeD4Laa4LeK4oCN4La74LeT4La64La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4i4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IuC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2reC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiLgtrvgt53gtrjgt5LgtoIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IkVkZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaW0iIG1zZ2lkPSI4Mjc0MDE3MTE4NDcyNDU1MTU1Ij4iU0lNIOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC2p+C3meC2r+C2u+C3kuC2seC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiLgtoXgt4Tgt4Pgt4rgtrrgt4/gtrHgt48g4LaG4Laa4LeP4La74La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiLgtrbgt5Dgtqfgtrvgt5Ig4La04LeK4oCN4La74Lat4LeS4LeB4Lat4La6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk5NTgzOTExMjMxODkzMzgwIj4i4La04Lav4LeK4Law4Lat4LeSIOC3g+C3kOC2muC3g+C3k+C2uOC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlbW92ZV9ub3RpZmljYXRpb24iIG1zZ2lkPSIzNjAzMDk5NTE0OTAyMTgyMzUwIj4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La4IOC3hOC3kuC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiJHUFMg4LeD4La24La9IOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfYWNxdWlyaW5nIiBtc2dpZD0iODk1OTMzMzM1MTA1ODk2NzE1OCI+IkdQUyDgtr3gtrbgt48g4Lac4Lax4LeS4La44LeS4Lax4LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHR5X2VuYWJsZWQiIG1zZ2lkPSI0NjEzMjAwMzY1Mzc5NDI2NTYxIj4iVGVsZVR5cGV3cml0ZXIg4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiLgt4Tgtqwg4Lax4Laf4Lax4La6IOC2muC2uOC3iuC2tOC2seC2uiDgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IuC3hOC2rCDgtrHgtp/gtrHgtrog4Lax4LeS4LeB4LeK4LeB4La24LeK4Lav4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4LaF4LeD4LeKIOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La4IOC2seC3kuC3guC3iuC2tOC3iuKAjeC2u+C2t+C3jyDgtprgtrvgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4LaG4LeA4La74Lar4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19xdWlja19zZXR0aW5ncyIgbXNnaWQ9IjYxODYzNzg0MTE1ODI0MzcwNDYiPiLgtprgt4rgt4Lgtqvgt5Lgtpog4LeD4LeQ4Laa4LeD4LeT4La44LeKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiLgtrjgt5Hgtq0g4Laa4LeP4La94LeT4LaxIOC2uuC3meC2r+C3lOC2uOC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3VzZXIiIG1zZ2lkPSIxMTA0ODQ2Njk5ODY5NDc2ODU1Ij4i4La04La74LeS4LeB4LeT4La94Laa4La64LePIDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNjA5OTc4MTAzMTY2OTcyODcwOSI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iTkVUV09SSyI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiLgtqLgtoLgtpzgtrggPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiLgtrbgt5Dgtqfgtrvgt5LgtrogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLgtoXgt4Tgt4Pgt4rgtrrgt4/gtrHgt48g4LaG4Laa4LeP4La74La6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+Ijx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4g4LeD4Laz4LeE4LePIOC3g+C3k+C2seC3lOC3gCDgt4Pgtprgt4Pgt4og4Laa4La7IOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiIyRy0zRyDgtq/gtq3gt4rgtq0g4LaF4La24La9IOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyDgtq/gtq3gt4rgtq0g4LaF4La24La9IOC2muC2u+C2sSDgtr3gtq/gt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSIxMDQ2MDQ3MjQ4ODQ0ODIxMjAyIj4i4Lai4LaC4Lac4La4IOC2r+C2reC3iuC2rSDgtoXgtrbgtr0g4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+IuC2r+C2reC3iuC2rSDgtoXgtrbgtr0g4Laa4La7IOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+IuC2lOC2tiDgtrHgt5Lgtrrgtrjgt5Lgtq0g4Lav4Lat4LeK4LatIOC2t+C3j+C3gOC3kuC2rSDgt4Pgt5Pgtrjgt4/gt4Dgtqcg4LeF4Laf4LePIOC3gOC3kyDgtofgtq0uXG5cbuC2lOC2tiDgtq/gtq3gt4rgtq0g4Lax4LeQ4LeA4LatIOC3g+C2tuC2vSDgtprgt4Xgt4Tgt5zgtq3gt4og4LeA4LeP4LeE4Laa4La64LePIOC2lOC2tuC2nOC3meC2seC3iiDgtofgtq3gt5Dgtrjgt4og4LeA4LeS4LanIOC2heC2uiDgtprgtrvgtpzgtq0g4LeE4LeQ4LaaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9Ijc3Mjk3NzIwMzkyMDg2NjQ2MDYiPiLgtrHgt5Dgt4Dgtq0g4Lav4Lat4LeK4LatIOC3g+C2tuC2vSDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl9kaXNjb25uZWN0ZWQiIG1zZ2lkPSIxOTQwMjMxNTIxMjc0MTQ3NzcxIj4i4LaF4Lax4LeK4Lat4La74LeK4Lai4LeP4La9IOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uuC2muC3iiDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkdQUyDgt4PgtrPgt4Tgt48g4LeD4Lec4La64La44LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IkdQUyDgtrjgtp/gt5LgtrHgt4og4LeD4LeK4Lau4LeP4Lax4La6IOC3g+C2muC3g+C3jyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLgtrTgt5Lgt4Tgt5Lgtqfgt5Pgtrjgt4og4LaJ4La94LeK4La94LeT4La44LeKIOC3g+C2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+IuC3g+C3kuC2uuC2veC3lCDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4LeE4LeS4LeD4LeKIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i4La64LeZ4Lav4LeU4La44LeKIOC2reC3nOC2u+C2reC3lOC2u+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i4Lat4LeS4La74La6IOC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3k+C2uuC3gCDgtprgtrvgtprgt5Dgt4Dgt5ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLgtq3gt5Lgtrvgtrog4Lat4LeS4La74LeD4LeKIOC2r+C3kuC3geC3j+C2seC2reC3kuC2uuC3meC3hOC3kiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4i4Lat4LeS4La74La6IOC3g+C3kuC2u+C3g+C3iiDgtq/gt5Lgt4Hgt4/gtrHgtq3gt5Lgtrog4Lat4LeU4LeFIOC2heC2nOC3lOC3heC3lCDgt4Dgt5Dgtqfgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLgtq/gt4Dgtr3gt4og4LeE4LeT4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4i4LaK4Lat4La7IOC2seC3meC2p+C3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i4LaF4LeE4LeD4LeK4La64LeP4Lax4LePIOC2huC2muC3j+C2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdpbmdfbGFiZWwiIG1zZ2lkPSI0OTAwNzQ3NzQ0NjUzMDkyMDkiPiLgtobgtrvgt53gtrTgtqvgtrog4LeA4LeZ4La44LeS4Lax4LeKLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz48eGxpZmY6ZyBpZD0iUEVSQ0VOVCI+JSU8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2VkX2xhYmVsIiBtc2dpZD0iODg2NTQxMzA3OTQxNDI0NjA4MSI+IuC2heC2u+C3neC2tOC3kuC2reC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4ogKOC2i+C2tOC3j+C2guC2nCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4LaF4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjY5NjgzNzIyOTcwMTg3NTU4MTUiPiLgtq/gt5PgtrTgt4rgtq3gt5LgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+IuC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3k+C2uiDgtprgtrvgtprgt5Dgt4Dgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i4La34LeK4oCN4La74La44Lar4La6IOC2heC2nOC3lOC3heC3lCDgtq/gtrjgt48g4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+IuC2huC2r+C3j+C2sSDgtprgt4rigI3gtrvgtrjgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiLgt4Pgt4rgtq7gt4/gtrHgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4i4LeD4LeK4Lau4LeP4Lax4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiLgtrjgt4/gtrDgt4rigI3gtrog4LaL4La04LeP4LaC4Lac4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLgt4Tgtq/gt5Lgt4Pgt5Ig4LaH4La44Lat4LeU4La44LeKIOC2tOC2uOC2q+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+IuC3g+C3kOC2muC3g+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4i4LeA4Lea4La94LeP4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdXNlcl9sYWJlbCIgbXNnaWQ9IjUyMzg5OTU2MzIxMzA4OTc4NDAiPiLgtrjgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2xhYmVsIiBtc2dpZD0iOTEzNTM0NDcwNDg5OTU0NjA0MSI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IuC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Mg4Lax4Lec4La44LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IuC2ouC3j+C2veC2uuC2muC3iiDgtrHgt5Dgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2ktRmkg4LeD4LaC4Lav4La74LeK4LeB4Laa4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4i4Lax4Lec4La74LeQ4LeE4LeQ4Lax4LeKIOC3g+C2guC2r+C2u+C3iuC3geC2muC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IuC2r+C3k+C2tOC3iuC2reC3kuC2uOC2reC3iiDgtrbgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4i4LeD4LeK4LeA4La64LaC4Laa4LeK4oCN4La74LeT4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjU4NDg0MDIxMjc0NTUwMjE3MTQiPiLgtofgtq3gt5Dgtrjgt4og4LeA4LeS4LanIOC2ouC3j+C2veC2uiDgtrHgt5Lgtrvgt5Pgtprgt4rgt4Lgtqvgtrog4LeA4LeS4La6IOC3hOC3kOC2miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvbmVfYnV0dG9uIiBtc2dpZD0iMTc1OTM4NzE4MTc2NjYwMzM2MSI+IuC3hOC2u+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X2RpYWxvZ190aXRsZSIgbXNnaWQ9IjEyNzM3OTY5NjcwOTIwMjcyOTEiPiLgtqLgt4/gtr0g4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X2luZm9fbWVzc2FnZSIgbXNnaWQ9IjU0MzAzMjA1Mzk1NTUzNTg0NTIiPiLgtrjgt5ngtrgg4LaL4La04LeP4LaC4Lac4La6IOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgtrvgtrHgt5Tgtrrgt5o6IDx4bGlmZjpnIGlkPSJNQU5BR0lOR19ET01BSU4iPiVzPC94bGlmZjpnPi5cblxu4LaU4La24Lac4LeaIOC2tOC2u+C3kuC2tOC3j+C2veC2muC2uuC3jyDgtoot4Lat4LeQ4La04LeQ4La94LeKLCDgtrrgt5ngtq/gt5Tgtrjgt4osIOC3g+C3hCDgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4LeA4LeZ4La24LeKIOC2heC2qeC3gOC3kiDgtofgtq3gt5Tgt4Xgt5Tgt4Ag4LaU4La24Lac4LeaIOC2ouC3j+C2vSDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4og4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Tgt5Dgtprgt5Lgtrrgt4/gt4Ag4LaH4LatLlxuXG7gt4Dgt5Dgtqngt5Ig4LeA4LeS4LeD4LeK4Lat4La7IOC3g+C2s+C3hOC3jywg4LaU4La24LeaIOC2tOC2u+C3kuC2tOC3j+C2veC2muC2uuC3jyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lac4Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmdfbWVzc2FnZSIgbXNnaWQ9IjIwMzMwOTE2NTYxMjk5NjM2NjkiPiLgtq3gt5TgtrHgt4rgt4DgtrEg4La04LeP4La74LeK4LeB4LeA4La64Laa4LanIOC2lOC2tuC2nOC3miDgtqLgt4/gtr3gtrog4Lax4LeS4La74LeT4Laa4LeK4LeC4Lar4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Tgt5Dgtprgt5Lgtrrgt4/gt4Ag4LaH4LatXG7gtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgtprgtrjgt4osIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4osIOC2uuC3meC2r+C3lOC2uOC3iiDgt4Pgt4Qg4LaG4La74Laa4LeK4oCN4LeC4LeS4LatIOC3gOC3meC2tuC3iiDgtoXgtqngt4Dgt5Ig4LaH4Lat4LeU4LeF4LeU4LeALlxuXG7gtpTgtrbgtpzgt5og4LaL4La04LeP4LaC4Lac4La6IOC2uOC2rSDgt4Pgt4rgtq7gt4/gtrTgt5Lgtq0g4LeA4LeS4LeB4LeK4LeA4LeP4LeD4Lav4La64LeTIOC2heC2muC3iuC2reC2tOC2reC3iuKAjeC2uyDgtrjgt5ngtrog4LeD4LeS4Lav4LeU4LeA4LeT4La44LeaIOC3hOC3kOC2muC3kuC2uuC3j+C3gCDgtofgtq3gt5Lgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iNzk0Njk1Njk3NzM3NzE2NjcwOSI+IuC3gOC3kuC3geC3iuC3gOC3j+C3g+C2r+C3j+C2uuC3kyDgtoXgtprgt4rgtq3gtrTgtq3gt4rigI3gtrsg4La04La74LeS4Laa4LeK4LeC4LePIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4Y2QxNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjcxNjQ5MzczNDQ4NTAwMDQ0NjYiPiLgtrTgtq/gt4rgtrDgtq3gt5IgVUkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2NsZWFyX2FsbF9idXR0b24iIG1zZ2lkPSI3Nzc0NzIxMzQ0NzE2NzMxNjAzIj4i4LeE4LeS4LeD4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+IuC2veC3kOC2uuC3kuC3g+C3iuC2reC3lOC3gOC3meC2seC3iiDgtongt4Dgtq3gt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfaW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iNzc5MzYyNDg2NDUyODgxODU2OSI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IuC2uOC3keC2rSDgtovgtrTgt4/gtoLgtpwg4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiLgtrjgt5Hgtq0g4La64LeZ4Lav4LeU4La44LeKIOC2ieC3gOC2reC2veC2seC3iuC2sSI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IuC2uOC3keC2rSDgtrrgt5ngtq/gt5Tgtrjgt4ogMSDgtprgt4oiPC9pdGVtPgorICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciIgbXNnaWQ9IjEwNDA3ODQzNTk3OTQ4OTA3NDQiPiLgtrjgt5Hgtq0g4La64LeZ4Lav4LeU4La44LeKICVkIOC2muC3iiI8L2l0ZW0+CisgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiLgtq/gt5DgtrHgtqcg4La04LeA4Lat4LeS4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iMjc4MzEwNDgwNzU1MTIxMTYzOSI+IuC2heC2u+C3neC2tOC2muC2uuC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfc3VidGl0bGUiIG1zZ2lkPSIxNzUyMDQwMDYyMDg3ODI5MTk2Ij4i4La24LeQ4Lan4La74LeS4La6IOC2heC2qeC3lCDgt4Dgt5ngtrjgt5LgtrHgt4og4La04LeA4Lat4LeTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkJSU8L3hsaWZmOmc+IOC2muC3iiDgtongtq3gt5Lgtrvgt5Lgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXIiIG1zZ2lkPSI0NTQ5MTA1OTk2NzQwNTIyNTIzIj4iVVNCIOC2huC2u+C3neC2tOC2q+C2uiDgt4Pgt4Tgtrog4Lax4Lec4Lav4Laa4LeK4LeA4La64LeSLlxu4LeD4La04La64LaxIOC2veC2ryDgtobgtrvgt53gtrTgtprgtrog4La04La44Lar4Laa4LeKIOC2t+C3j+C3gOC3kuC2reC3jyDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+IuC2tuC3kOC2p+C2u+C3kiDgtrfgt4/gt4Dgt5Lgtq3gtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiLgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQ4Nzk4Nzk2OTg1MDA5NTUzMDAiPiLgtoXgt4Tgt4Pgt4rgtrrgt4/gtrHgt48g4LaG4Laa4LeP4La74La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+IuC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3k+C2uuC3gC3gtrfgt4rigI3gtrvgtrjgtqvgtrog4LeA4LaxIOC2reC3kuC2u+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+IuC2seC3kuC3geC3iuC3geC2tuC3iuC2ryDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+IuC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3k+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4og4Lan4LeZ4Lav4La74LeKIOC2muC2u+C3jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IuC2huC2r+C3j+C2sSDgtprgt4rigI3gtrvgtrgg4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl91c2VfcGh5c2ljYWxfa2V5Ym9hcmQiIG1zZ2lkPSI3NTUxOTAzMDg0NDE2MDU3ODEwIj4i4La34Lee4Lat4LeS4LaaIOC2uuC2reC3lOC2u+C3lCDgtrTgt5Tgt4Dgtrvgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4iVVNCIOC2i+C2tOC3j+C2guC2nOC2uiDgtrTgt4rigI3gtrvgt4Dgt5rgt4Eg4Laa4LeS4La74LeT4La44LanIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4g4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrHgt4Dgt4/gtq8/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiJVU0Ig4La44LeZ4LeA4La94La4IOC2tOC3iuKAjeC2u+C3gOC3muC3gSDgtprgt5Lgtrvgt5PgtrjgtqcgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3gOC3j+C2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IuC2uOC3meC2uCBVU0Ig4LaL4La04LeP4LaC4Lac4La6IOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5LgtqcgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiDgt4Dgt5Lgt4Dgt5jgtq0g4Laa4La74Lax4LeK4Lax4LavPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4i4La44LeZ4La4IFVTQiDgtrjgt5ngt4Dgtr3gtrjgtqcg4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3kyDgtofgtq3gt5Ig4LeA4LeS4LanIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g4LeA4LeS4LeA4LeY4LatIOC2muC2u+C2seC3iuC2seC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiLgtrjgt5ngtrggVVNCIOC2uOC3meC3gOC2veC2uCDgt4Pgtrjgtpwg4Laa4LeK4oCN4La74LeS4La64LePIOC2muC2u+C2sSDgt4Pgt4rgtq7gt4/gtrTgt5Lgtq0g4La64LeZ4Lav4LeU4La44LeKIOC2seC3nOC2uOC3kOC2rS4gPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4g4LeA4La94LeS4Lax4LeKIOC2uOC3meC2uCDgtrjgt5ngt4Dgtr3gtrgg4Lac4LeQ4LaxIOC2reC3gCDgtq/gt5DgtrHgtpzgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+IlVTQiDgtrjgt5ngt4Dgtr3gtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF92aWV3IiBtc2dpZD0iNjMwNDU2NTU1MzIxODE5Mjk5MCI+IuC2tOC3meC2seC3lOC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IuC2uOC3meC2uCBVU0Ig4LaL4La04LeP4LaC4Lac4La6IOC3g+C2s+C3hOC3jyDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq/gt5ngtrHgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IuC2uOC3miBVU0Ig4La44LeZ4LeA4La94La4IOC3g+C2s+C3hOC3jyDgt4Pgt5TgtrTgt5Tgtrvgt5Tgtq/gt4rgtq/gt5ngtrHgt4og4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IlVTQiDgtrHgt5Lgtq/gt5zgt4Pgt4rgtprgtrvgtqvgtrrgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3gOC2rz8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4i4La44LeZ4La4IOC2tOC2u+C3kuC2nOC2q+C2muC2uuC3miBSU0Eg4La64Lat4LeU4La74LeUIOC2h+C2n+C3kuC2veC3kiDgt4Pgtqfgt4TgtrEg4LeA4Lax4LeK4Lax4LeaOlxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i4LeD4LeQ4La4IOC3gOC3kuC2p+C2uCDgtrjgt5ngtrgg4La04La74LeS4Lac4Lar4Laa4La64LeZ4Lax4LeKIOC2ieC2qSDgtr3gtrbgt48g4Lav4LeZ4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i4Lat4LeS4La74La6IOC2tOC3kuC2u+C3gOC3k+C2uOC2pyDgt4Dgt5Lgt4Hgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IuC2reC3kuC2u+C2uiDgtrTgt5Lgtrvgt4Dgt5Pgtrjgtqcg4LaF4Lav4LeS4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4i4Lac4LeQ4LeF4La04LeZ4LaxIOC3gOC3kuC3geC3j+C2veC2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiLgtprgt5Tgtqngt48g4Lat4LeS4La74La64Laa4LeKIOC3g+C2s+C3hOC3jyDgtrrgt5ngtq/gt5Tgtrjgtprgt4og4Lax4LeS4La74LeK4La44LeP4Lar4La6IOC2muC3hSDgt4Dgt5LgtqcsIOC3gOC3kuC3geC3j+C2veC2seC2uiDgtrTgt4/gtr3gtprgtrog4LaU4La74La94Led4LeD4LeU4LeAIOC3heC2n+C3kuC2seC3iiDgtrTgt5ngtrHgt4rgt4Dgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IuC2reC3kuC2uyDgtrvgt5Tgt4Ag4LeD4LeU4La74Laa4LeS4La44LeS4Lax4LeK4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i4Lat4LeS4La7IOC2u+C3lOC3gCDgt4Pgt5Tgtrvgt5Dgtprgt5ngtrjgt5LgtrHgt4og4La04LeA4Lat4LeT4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLgtq3gt5Lgtrsg4La74LeU4LeAIOC3g+C3lOC2u+C3kOC2muC3meC2uOC3kuC2seC3iiDgtrTgt4Dgtq3gt5MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90aXRsZSIgbXNnaWQ9IjY0NjE4NjU5NjA5NjE0MTQ5NjEiPiLgtq3gt5Lgtrsg4La74LeU4LeAIOC2nOC3iuKAjeC2u+C3hOC2q+C2uiDgtprgtrvgtrEg4La94Lav4LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGV4dCIgbXNnaWQ9IjExNTI4Mzk2NDc2Nzc1NTg4MTUiPiLgtpTgtrbgtpzgt5og4Lat4LeS4La7IOC2u+C3lOC3gCDgtrbgt5Dgtr3gt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X2ZhaWxlZF90aXRsZSIgbXNnaWQ9IjcwNTc4MTExNjc0NjkyMjc3MSI+IuC2reC3kuC2uyDgtrvgt5Tgt4Ag4Lac4LeK4oCN4La74LeE4Lar4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgtrHgt5zgt4Tgt5Dgtprgt5Ig4LeA4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSI4MTM0MDExMjY5NTcyNDE1NDAyIj4i4Lat4LeS4La7IOC2u+C3lOC3gCDgt4Pgt5Tgtrvgt5Dgtprgt5Pgtrjgtqcg4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2ui4g4LaG4Lag4La64Lax4La6IOC2t+C3j+C3gOC3kuC2reC3j+C3gOC3miDgtq3gt5Lgtrbgt5ngtrHgt4Dgt48g4LeA4LeS4La6IOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiJVU0Ig4Lac4Lec4Lax4LeUIOC3hOC3lOC3gOC2uOC3j+C2u+C3lCDgt4Dgt5Lgtprgtr3gt4rgtrQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLgtrjgtrDgt4rigI3gtrog4Law4LeP4LeA4Laa4La64Laa4LeKIChNVFApIOC2veC3meC3gyDgt4Pgt4Dgt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX3B0cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI3NTE3MTI3NTQwMzAxNjI1NzUxIj4i4Laa4LeQ4La44La74LeP4LeA4Laa4LeKIChQVFApIOC2veC3meC3gyDgt4Pgt4Dgt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiJNYWMg4LeD4Laz4LeE4LePIEFuZHJvaWQg4Lac4Lec4Lax4LeUIOC3hOC3lOC3gOC2uOC3j+C2u+C3lCDgtrrgt5ngtq/gt5Tgtrgg4LeD4LeK4Lau4LeP4La04Lax4La6IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+IuC2huC2tOC3g+C3lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLgtrjgt5Tgtr3gt4og4La04LeS4Lan4LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i4La44LeZ4Lax4LeU4LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i4La44LeR4LatIOC2uuC3meC2r+C3lOC2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i4LaG4Lav4LeP4LaxIOC2muC3iuKAjeC2u+C2uOC2uiDgtrjgt4/gtrvgt5Qg4Laa4LeS4La74LeT4La44LeaIOC2tuC3nOC2reC3iuC2reC2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4i4Lac4LeQ4LeF4La04LeZ4LaxIOC3gOC3kuC3geC3j+C2veC2sSDgtrbgt5zgtq3gt4rgtq3gtrguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiLgt4Dgt5Lgt4Hgt4/gtr0g4Lat4LeS4La74La6IOC3gOC3meC2rSDgtprgt5Tgtqngt4/gt4Ag4LeA4LeS4LeB4LeP4La94Lax4La6IOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9jb25uZWN0ZWQiIG1zZ2lkPSIyNzA3MDI3NjMzMjQyOTgzMzcwIj4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2reC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fYmF0dGVyeSIgbXNnaWQ9IjM1ODM0MzAyMjM1MjgyMDk0NiI+IuC2tuC3kOC2p+C2u+C3kuC2uiDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X29uZV9iYXIiIG1zZ2lkPSI3Nzc0ODg3NzIxODkxMDU3NTIzIj4i4La24LeQ4Lan4La74LeS4La6IOC2reC3k+C2u+C3lCDgtpHgtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+IuC2tuC3kOC2p+C2u+C3kuC2uiDgtq3gt5Pgtrvgt5Qg4Lav4LeZ4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90aHJlZV9iYXJzIiBtc2dpZD0iMjMwMjk4MzMzMDg2NTA0MDQ0NiI+IuC2tuC3kOC2p+C2u+C3kuC2uiDgtq3gt5Pgtrvgt5Qg4Lat4LeU4Lax4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+IuC2tuC3kOC2p+C2u+C3kuC2uiDgtrTgt5Lgtrvgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4i4Lav4LeU4La74Laa4Lau4Lax4La64Laa4LeKIOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lat4LeT4La74LeUIOC2keC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3R3b19iYXJzIiBtc2dpZD0iODM4NDkwNTM4MjgwNDgxNTIwMSI+IuC2r+C3lOC2u+C2muC2ruC2seC2uiDgtq3gt5Pgtrvgt5Qg4Lav4LeZ4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcGhvbmVfdGhyZWVfYmFycyIgbXNnaWQ9Ijg1MjE5MDQ4NDM5MTk5NzE4ODUiPiLgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lat4LeT4La74LeUIOC2reC3lOC2seC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjQ3MTgzNDg2ODU4MDc1Nzg5OCI+IuC2r+C3lOC2u+C2muC2ruC2seC2uuC3miDgt4PgtoLgtqXgt4/gt4Ag4La04LeS4La74LeTIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2RhdGEiIG1zZ2lkPSI0NzkxOTY2Mjk1MDk2ODY3NTU1Ij4i4Lav4Lat4LeK4LatIOC2seC3kOC2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfb25lX2JhciIgbXNnaWQ9IjE0MTU2MjU4MzMyMzgyNzM2MjgiPiLgtq/gtq3gt4rgtq0g4Lat4LeT4La74LeUIOC2keC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfdHdvX2JhcnMiIG1zZ2lkPSI2MTY2MDE4NDkyMzYwNDMyMDkxIj4i4Lav4Lat4LeK4LatIOC2reC3k+C2u+C3lCAyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IuC2r+C2reC3iuC2rSDgtq3gt5Pgtrvgt5QgMy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfc2lnbmFsX2Z1bGwiIG1zZ2lkPSIyNzA4Mzg0NjA4MTI0NTE5MzY5Ij4i4Lav4Lat4LeK4LatIOC3g+C2guC2peC3j+C3gCDgtrTgt5Lgtrvgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9vZmYiIG1zZ2lkPSIzMTc3MzgwMjk2Njk3OTMzNjI3Ij4iV2lmaSDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IldpZmkg4LeD4La44LeK4La24Lax4LeK4LawIOC2muC2uyDgtrHgt5zgtrjgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4iV2lmaSDgtq3gt5Pgtrvgt5Qg4LaR4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV90d29fYmFycyIgbXNnaWQ9IjQ5OTQyNzQyNTA0OTcyNjI0MzQiPiJXaWZpIOC2reC3k+C2u+C3lCDgtq/gt5ngtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSIzNDk1NzU1MDQ0Mjc2NTg4Mzg0Ij4iV2lGaSDgtq3gt5Pgtrvgt5Qg4Lat4LeU4Lax4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiJXaWZpIOC3g+C2guC2peC3j+C3gCDgtrTgt5Lgtrvgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4iV2lNQVgg4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWCDgtq3gt5Pgtrvgt5Qg4LaR4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdHdvX2JhcnMiIG1zZ2lkPSI5MTc2MjM2ODU4MzM2NTAyMjg4Ij4iV2lNQVgg4Lat4LeT4La74LeUIOC2r+C3meC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3RocmVlX2JhcnMiIG1zZ2lkPSI2MTE2NTUxNjM2NzUyMTAzOTI3Ij4iV2lNQVgg4Lat4LeT4La74LeUIOC2reC3lOC2seC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IldpTUFYIOC3g+C2guC2peC3j+C3gCDgtrTgt5Lgtrvgt5Mg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+IuC3g+C2guC2peC3jyDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+IuC3g+C2uOC3iuC2tuC2seC3iuC2sCDgt4Dgt5Mg4Lax4LeQ4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfemVyb19iYXJzIiBtc2dpZD0iMzgwNjA2MDIyNDQ2NzAyNzg4NyI+IuC2reC3k+C2u+C3lCDgt4Hgt5TgtrHgt4rigI3gtrrgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9vbmVfYmFyIiBtc2dpZD0iMTY4NTczMDExMzE5MjA4MTg5NSI+IuC2reC3k+C2u+C3lCDgtpHgtpouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90d29fYmFycyIgbXNnaWQ9IjY0MzczNjM2NDgzODUyMDY2NzkiPiLgtq3gt5Pgtrvgt5Qg4Lav4LeZ4Laa4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdGhyZWVfYmFycyIgbXNnaWQ9IjI2NDgyNDE0MTUxMTkzOTY2NDgiPiLgtq3gt5Pgtrvgt5Qg4Lat4LeU4Lax4La64LeSLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI5MTIyOTIyODg2NTE5Njc2ODM5Ij4i4LeD4LaC4Lal4LeP4LeAIOC2tOC3kuC2u+C3kyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29uIiBtc2dpZD0iMjM4NTI1NDY5MzYyNDM0NTI2NSI+IuC3g+C2muC3iuKAjeC2u+C3k+C2uuC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb2ZmIiBtc2dpZD0iNjQ3NTUwODE1Nzc4Njg1MzE1NyI+IuC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nvbm5lY3RlZCIgbXNnaWQ9IjgzNjYyNTY2OTM3MTk0OTk2NjUiPiLgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgt5Lgtq3gtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZ3BycyIgbXNnaWQ9IjE2MDY0NzcyMjQ0ODY3NDc3NTEiPiJHUFJTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMXgiIG1zZ2lkPSI5OTQxMzM0NjgxMjAyNDQwMTgiPiIxIFgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9oc3BhIiBtc2dpZD0iMjAzMjMyODg1NTQ2MjY0NTE5OCI+IkhTUEEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zZyIgbXNnaWQ9Ijg2Mjg1NjIzMDUwMDM1NjgyNjAiPiIzRyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzMuNWciIG1zZ2lkPSI4NjY0ODQ1NjA5OTgxNjkyMDAxIj4iMy41RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzRnIiBtc2dpZD0iNzc0MTAwMDc1MDYzMDA4OTYxMiI+IjRHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fbHRlIiBtc2dpZD0iNTQxMzQ2ODgwODYzNzU0MDY1OCI+IkxURSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2NkbWEiIG1zZ2lkPSI2MTMyNjQ4MTkzOTc4ODIzMDIzIj4iQ0RNQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3JvYW1pbmciIG1zZ2lkPSI1OTc3MzYyMzMzNDY2NTU2MDk0Ij4i4La74Led4La44LeS4LaCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fZWRnZSIgbXNnaWQ9IjQ0Nzc0NTcwNTE2MzE5NzkyNzgiPiJFZGdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fd2lmaSIgbXNnaWQ9IjIzMjQ0OTY3NTY1OTA2NDUyMjEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2ltIiBtc2dpZD0iODI3NDAxNzExODQ3MjQ1NTE1NSI+IlNJTSDgtrHgt5Dgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfdGV0aGVyIiBtc2dpZD0iNDEwMjc4NDQ5ODE0MDI3MTk2OSI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgtqfgt5ngtq/gtrvgt5LgtrHgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4i4LaF4LeE4LeD4LeK4La64LeP4Lax4LePIOC2huC2muC3j+C2u+C2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfbGV2ZWwiIG1zZ2lkPSI3NDUxNDc0MTg3MTEzMzcxOTY1Ij4i4La24LeQ4Lan4La74LeSIOC2tOC3iuKAjeC2u+C2reC3kuC3geC2reC2uiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+IuC2tOC2r+C3iuC2sOC2reC3kiDgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uCDgt4Tgt5Lgt4Pgt4og4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTIOC3g+C2tuC2vSDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2FjcXVpcmluZyIgbXNnaWQ9Ijg5NTkzMzMzNTEwNTg5NjcxNTgiPiJHUFMg4La94La24LePIOC2nOC2seC3kuC2uOC3kuC2seC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IlRlbGVUeXBld3JpdGVyIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2muC2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl92aWJyYXRlIiBtc2dpZD0iNjY2NTg1MzYzMzY0MTU1MDU1Ij4i4LeE4LasIOC2seC2n+C2seC2uiDgtprgtrjgt4rgtrTgtrHgtrog4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLgt4Tgtqwg4Lax4Laf4Lax4La6IOC2seC3kuC3geC3iuC3geC2tuC3iuC2r+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOC2heC3g+C3iiDgtprgtrsg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uCDgtrHgt5Lgt4Lgt4rgtrTgt4rigI3gtrvgtrfgt48g4Laa4La74LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2huC3gOC2u+C2q+C2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4i4Laa4LeK4LeC4Lar4LeS4LaaIOC3g+C3kOC2muC3g+C3k+C2uOC3ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcmVjZW50X2FwcHMiIG1zZ2lkPSI5MDE0MDMyOTE2NDEwNTkwMDI3Ij4i4La44LeR4LatIOC2muC3j+C2veC3k+C2sSDgtrrgt5ngtq/gt5Tgtrjgt4ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc191c2VyIiBtc2dpZD0iMTEwNDg0NjY5OTg2OTQ3Njg1NSI+IuC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC3jyA8eGxpZmY6ZyBpZD0iVVNFUiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaSIgbXNnaWQ9IjYwOTk3ODEwMzE2Njk3Mjg3MDkiPiI8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb2JpbGUiIG1zZ2lkPSI0ODc2ODA2NTY0MDg2MjQxMzQxIj4i4Lai4LaC4Lac4La4IDx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiA8eGxpZmY6ZyBpZD0iVFlQRSI+JTIkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMyRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i4La24LeQ4Lan4La74LeS4La6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i4LaF4LeE4LeD4LeK4La64LeP4Lax4LePIOC2huC2muC3j+C2u+C2uiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiLgtrbgt4rgtr3gt5bgtqfgt5bgtq3gt4ogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiI8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+IOC3g+C2s+C3hOC3jyDgt4Pgt5PgtrHgt5Tgt4Ag4LeD4Laa4LeD4LeKIOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cg4Lav4Lat4LeK4LatIOC2heC2tuC2vSDgtprgtrsg4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEcg4Lav4Lat4LeK4LatIOC2heC2tuC2vSDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+IuC2ouC2guC2nOC2uCDgtq/gtq3gt4rgtq0g4LaF4La24La9IOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiLgtq/gtq3gt4rgtq0g4LaF4La24La9IOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiLgtpTgtrYg4Lax4LeS4La64La44LeS4LatIOC2r+C2reC3iuC2rSDgtrfgt4/gt4Dgt5Lgtq0g4LeD4LeT4La44LeP4LeA4LanIOC3heC2n+C3jyDgt4Dgt5Mg4LaH4LatLlxuXG7gtpTgtrYg4Lav4Lat4LeK4LatIOC2seC3kOC3gOC2rSDgt4Pgtrbgtr0g4Laa4LeF4LeE4Lec4Lat4LeKIOC3gOC3j+C3hOC2muC2uuC3jyDgtpTgtrbgtpzgt5ngtrHgt4og4LaH4Lat4LeQ4La44LeKIOC3gOC3kuC2pyDgtoXgtrog4Laa4La74Lac4LatIOC3hOC3kOC2mi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4i4Lax4LeQ4LeA4LatIOC2r+C2reC3iuC2rSDgt4Pgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IuC2heC2seC3iuC2reC2u+C3iuC2ouC3j+C2vSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt4/gt4Dgtrrgtprgt4og4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJHUFMg4LeD4Laz4LeE4LePIOC3g+C3nOC2uuC2uOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJHUFMg4La44Laf4LeS4Lax4LeKIOC3g+C3iuC2ruC3j+C2seC2uiDgt4Pgtprgt4Pgt48g4LaH4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i4La04LeS4LeE4LeS4Lan4LeT4La44LeKIOC2ieC2veC3iuC2veC3k+C2uOC3iiDgt4Pgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLgt4Pgt5Lgtrrgtr3gt5Qg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC3hOC3kuC3g+C3iiDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IuC2reC3kuC2u+C2uiDgt4Pgt4rgt4DgtrrgtoLgtprgt4rigI3gtrvgt5Pgtrrgt4Ag4Laa4La74Laa4LeQ4LeA4LeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i4Lat4LeS4La74La6IOC2reC3kuC2u+C3g+C3iiDgtq/gt5Lgt4Hgt4/gtrHgtq3gt5Lgtrrgt5ngt4Tgt5Ig4LaF4Lac4LeU4LeF4LeUIOC2r+C2uOC3jyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IuC2reC3kuC2u+C2uiDgt4Pgt5Lgtrvgt4Pgt4og4Lav4LeS4LeB4LeP4Lax4Lat4LeS4La6IOC2reC3lOC3hSDgtoXgtpzgt5Tgt4Xgt5Qg4LeA4LeQ4Lan4LeTIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4i4Lav4LeA4La94LeKIOC3hOC3k+C2seC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IuC2iuC2reC2uyDgtrHgt5ngtqfgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IuC2heC3hOC3g+C3iuC2uuC3j+C2seC3jyDgtobgtprgt4/gtrvgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnaW5nX2xhYmVsIiBtc2dpZD0iNDkwMDc0Nzc0NDY1MzA5MjA5Ij4i4LaG4La74Led4La04Lar4La6IOC3gOC3meC2uOC3kuC2seC3iiwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiLgtoXgtrvgt53gtrTgt5Lgtq3gtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKICjgtovgtrTgt4/gtoLgtpwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4i4La24LeK4La94LeW4Lan4LeW4Lat4LeKIOC2heC2muC3iuKAjeC2u+C3kuC2uuC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4i4Lav4LeT4La04LeK4Lat4LeS4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLgt4Pgt4rgt4DgtrrgtoLgtprgt4rigI3gtrvgt5Pgtrog4Laa4La74Laa4LeQ4LeA4LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IuC2t+C3iuKAjeC2u+C2uOC2q+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44LePIOC2h+C2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ltZV9sYWJlbCIgbXNnaWQ9IjcwNzM0NjMwNjQzNjk0Njg0MjkiPiLgtobgtq/gt4/gtrEg4Laa4LeK4oCN4La74La44La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fbGFiZWwiIG1zZ2lkPSI1MDExMzI3MDQ4NzQ4NzYyMjU3Ij4i4LeD4LeK4Lau4LeP4Lax4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IuC3g+C3iuC2ruC3j+C2seC2uiDgtoXgtprgt4rigI3gtrvgt5Lgtrrgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i4La44LeP4Law4LeK4oCN4La6IOC2i+C2tOC3j+C2guC2nOC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfbGFiZWwiIG1zZ2lkPSI3NzI1NjcxMzM1NTUwNjk1NTg5Ij4iUlNTSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jzc2lfZW1lcmdlbmN5X29ubHkiIG1zZ2lkPSIyNzEzNzc0MDQxNjcyODg2NzUwIj4i4LeE4Lav4LeS4LeD4LeSIOC2h+C2uOC2reC3lOC2uOC3iiDgtrTgtrjgtqvgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiLgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+IuC3gOC3muC2veC3j+C3gCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4i4La44La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9sYWJlbCIgbXNnaWQ9IjkxMzUzNDQ3MDQ4OTk1NDYwNDEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4LeA4LeTIOC2seC3nOC2uOC3kOC2rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLgtqLgt4/gtr3gtrrgtprgt4og4Lax4LeQ4LatIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg4LaF4Laa4LeK4oCN4La74LeS4La64La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IldpLUZpIOC3g+C2guC2r+C2u+C3iuC3geC2muC2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IuC2seC3nOC2u+C3kOC3hOC3kOC2seC3iiDgt4PgtoLgtq/gtrvgt4rgt4HgtprgtroiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiLgtq/gt5PgtrTgt4rgtq3gt5Lgtrjgtq3gt4og4La24LeAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IuC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3k+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4La44LeZ4Lat4LaxIOC2tOC3meC2seC3iuC2seC3lOC2uOC3iiDgtprgtrvgtrrgt5IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiLgtrTgt4Tgtr3gtqcg4LeD4La74LeK4La04Lar4La6IOC2muC3kuC2u+C3k+C2uOC3meC2seC3iiDgtpXgtrHgt5Hgtrgg4LeA4LeZ4La94LeP4LeA4LaaIOC2kuC3gOC3jyDgt4Dgt5ngtq0g4La04LeS4LeA4LeS4LeD4LeZ4Lax4LeK4LaxLlxu4La04Lav4LeK4Law4Lat4LeSIOC2tOC3j+C2veC2miDgt4PgtrPgt4Tgt48g4Lax4LeQ4LeA4LatIOC2tOC3hOC3heC2pyDgt4Pgtrvgt4rgtrTgtqvgtrog4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKaW5kZXggYzU0NTQwYy4uNmIyYTVmZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlbFvmR5IHBvdm9sacWlIHogdG9odG8gcG/EjcOtdGHEjWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJQcmlibMOtxb5pxaUgbmEgY2Vsw7ogb2JyYXpvdmt1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+Ik5hIGNlbMO6IG9icmF6b3ZrdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IsOacHJhdmEgdmXEvmtvc3RpIHogZMO0dm9kdSBrb21wYXRpYmlsaXR5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IkFrIGplIGFwbGlrw6FjaWEgbmF2cmhudXTDoSBwcmUgbWVuxaFpdSBvYnJhem92a3UsIHpvYnJhesOtIHNhIHZlZMS+YSBob2TDrW4gb3Zsw6FkYWPDrSBwcnZvayBwcmlibMOtxb5lbmlhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJQcmViaWVoYSB1a2xhZGFuaWUgc27DrW1reSBvYnJhem92a3kuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiJQcmViaWVoYSB1a2xhZGFuaWUgc27DrW1reSBvYnJhem92a3kuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlNuw61ta2Egb2JyYXpvdmt5IHNhIHVrbGFkw6EuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlBsb2NoYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJOb3bDqSBhcGxpa8OhY2llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iSMS+YWRhxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iRm90b2FwYXLDoXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IlRsYcSNaWRsbyBwcmVwbnV0aWEgbWV0w7NkeSB2c3R1cHUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IlRsYcSNaWRsbyDDunByYXZ5IHZlxL5rb3N0aSB6IGTDtHZvZHUga29tcGF0aWJpbGl0eS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Ilp2w6TEjcWhacWlIG1lbsWhw60gb2Jyw6F6b2sgbmEgdsOkxI3FoWl1IG9icmF6b3ZrdS4iPC9zdHJpbmc+CkBAIC0xNTUsNiArMTU1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXTDqXJpYTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJSZcW+aW0gViBsaWV0YWRsZTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IlBvbG9oYTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJCdWTDrWsgbmFzdGF2ZW7DvSBuYSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IkTDoXRvdsOpIHByZW5vc3kgMkcgYSAzRyBzw7ogemFrw6F6YW7DqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IkTDoXRvdsOpIHByZW5vc3kgNEcgc8O6IHpha8OhemFuw6kiPC9zdHJpbmc+CkBAIC0xNjYsMTIgKzE2NywxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmk6IHByaXBvamVuw6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IlZ5aMS+YWTDoXZhbmllIHNhdGVsaXRvdiBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iUG9sb2hhIG5hc3RhdmVuw6EgcG9tb2NvdSBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLFvWlhZG9zdGkgbyBwb2xvaHUgc8O6IGFrdMOtdm5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iVnltYXphxaUgdsWhZXRreSB1cG96b3JuZW5pYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iSW5mb3Jtw6FjaWUgbyBhcGxpa8OhY2lpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJPYnJhem92a2Egc2EgYXV0b21hdGlja3kgb3RvxI3DrS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+Ik9icmF6b3ZrYSBqZSB1emFta251dMOhIHYgb3JpZW50w6FjaWkgbmEgxaHDrXJrdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iT2JyYXpvdmthIGplIHV6YW1rbnV0w6EgdiBvcmllbnTDoWNpaSBuYSB2w73FoWt1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJQdWx0IHMgZGV6ZXJ0YW1pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IsWgZXRyacSNIG9icmF6b3ZreSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJSZcW+aW0gViBsaWV0YWRsZSI8L3N0cmluZz4KQEAgLTE5NiwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iTmVwcmlwb2plbsOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IsW9aWFkbmEgc2llxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJTaWXFpSBXaS1GaSBqZSB2eXBudXTDoSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJPYnJhem92a2EgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJCZXpkcsO0dG92w70gZGlzcGxlaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJWemRpYWxlbsOhIG9icmF6b3ZrYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IkphcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJBVVRPTUFUSUNLWSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiJUdSBzYSB6b2JyYXp1asO6IHVwb3pvcm5lbmlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iTcO0xb5ldGUgaWNoIGtlZHlrb8S+dmVrIHpvYnJhemnFpSB0YWssIMW+ZSBwb3N1bmlldGUgcHJzdG9tIG5hZG9sLlxuQWsgcG9zdW5pZXRlIHByc3RvbSBuYWRvbCBlxaF0ZSByYXosIHpvYnJhemlhIHNhIG92bMOhZGFjaWUgcHJ2a3kgc3lzdMOpbXUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iUGFuZWwgem9icmF6w610ZSBwb3N1bnV0w61tIGNleiBva3JhaiBvYnJhem92a3kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IlN5c3TDqW1vdsO9IHBhbmVsIHpvYnJhesOtdGUgcG9zdW51dMOtbSBjZXogb2tyYWogb2JyYXpvdmt5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IlJlxb5pbSBwcmV2csOhdGVuaWEgZmFyaWViIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4iUmXFvmltIHp2w73FoWVuw6lobyBrb250cmFzdHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IlJlxb5pbSBrb3Jla2NpZSBmYXJpZWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IlNpZcWlIG3DtMW+ZSBiecWlXG5tb25pdG9yb3ZhbsOhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJWeWjEvmFkw6F2YW5pZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJQcmVqZGl0ZSBwcnN0b20gbmFob3I6IDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJQcmVqZGl0ZSBwcnN0b20gZG/EvmF2YTogPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKaW5kZXggM2ZjNDg4Mi4uYTA0MjA0NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlZlZG5vIGRvdm9saSBpeiB0ZWdhIHJhxI11bmFsbmlrYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IlBvdmXEjWF2YSDEjWV6IGNlbCB6YXNsb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iUmF6dGVnbml0ZXYgxI1leiB6YXNsb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJSYXrFoWlyaXRldiB6ZHJ1xb5saml2b3N0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiLEjGUgamUgcHJvZ3JhbSBpemRlbGFuIHphIG1hbmrFoWUgemFzbG9uZSwgc2Ugb2IgdXJpIHBva2HFvmUga29udHJvbG5payB6YSBwb3ZlxI1hdm8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IlNocmFuamV2LiBwb3NuZXRrYSB6YXNsb25hIC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IlNocmFuamV2YW5qZSBwb3NuZXRrYSB6YXNsb25hIC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iU2hyYW5qZXZhbmplIHBvc25ldGthIHphc2xvbmEuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlphxI1ldG5pIHphc2xvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJOZWRhdm5pIHByb2dyYW1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iSXNrYW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJGb3RvYXBhcmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJHdW1iIHphIHByZWtsb3AgbmHEjWluYSB2bm9zYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iR3VtYiBwb3ZlxI1hdmUgemEgemRydcW+bGppdm9zdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IlBvdmXEjWF2YSBtYW5qxaFlZ2EgbmEgdmXEjWppIHphc2xvbi4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXRlcmlqYTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJMZXRhbHNraSBuYcSNaW46IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJMb2thY2lqYTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJBbGFybSBqZSBuYXN0YXZsamVuIG5hIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iUG9kYXRraSAyRy0zRyBzbyBvbmVtb2dvxI1lbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJQb2RhdGtpIDRHIHNvIG9uZW1vZ2/EjWVuaSI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSBwb3ZlemFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJJc2thbmplIEdQUy1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+Ikxva2FjaWphIG5hc3RhdmxqZW5hIHogR1BTLW9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iQWt0aXZuZSB6YWh0ZXZlIHphIGxva2FjaWpvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iSXpicmnFoWkgdnNhIG9idmVzdGlsYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4iUG9kYXRraSBvIGFwbGlrYWNpamkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+Ilphc2xvbiBzZSBibyBzYW1vZGVqbm8gemFzdWthbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+Ilphc2xvbiBqZSB6YWtsZW5qZW4gdiBsZcW+ZcSNaSB1c21lcmplbm9zdGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+Ilphc2xvbiBqZSB6YWtsZW5qZW4gdiBwb2tvbsSNbmkgdXNtZXJqZW5vc3RpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJWaXRyaW5hIHphIHNsYWRpY2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iU2FuamFyamVuamUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iTmHEjWluIHphIGxldGFsbyI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk2LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iUG92ZXphdmEgbmkgdnpwb3N0YXZsamVuYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJOaSBvbXJlxb5qYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIGl6a2xvcGxqZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iWmFzbG9uIFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iUHJpa2F6IGJyZXrFvmnEjW5paCBuYXByYXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iWmFzbG9uIHphIHByZWR2YWphbmplIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iU3ZldGxvc3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iU0FNT0RFSk5PIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+Ik9idmVzdGlsYSBzbyBwcmlrYXphbmEgdHVrYWoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJEbyBuamloIGxhaGtvIGthZGFyIGtvbGkgZG9zdG9wYXRlIHRha28sIGRhIHBvdmxlxI1ldGUgbmF2emRvbC5cblphIHByaWtheiBzaXN0ZW1za2loIGtvbnRyb2xuaWtvdiB6bm92YSBwb3ZsZWNpdGUgbmF2emRvbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJWcnN0aWNvIHByaWthxb5ldGUgdGFrbywgZGEgcG92bGXEjWV0ZSB6IHJvYmEgemFzbG9uYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iU2lzdGVtc2tvIHZyc3RpY28gcHJpa2HFvmV0ZSB0YWtvLCBkYSBwb3ZsZcSNZXRlIHogcm9iYSB6YXNsb25hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+Ik5hxI1pbiBpbnZlcnppamUgYmFydiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+Ik5hxI1pbiBpemJvbGrFoWFuZWdhIGtvbnRyYXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iTmHEjWluIHBvcHJhdmxqYW5qYSBiYXJ2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJPbXJlxb5qZSBqZVxubGFoa28gc3ByZW1samFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iSXNrYW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJQb3ZsZWNpdGUgbmF2emdvciB6YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iUG92bGVjaXRlIHYgbGV2byB6YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKaW5kZXggN2JhMmRhNS4uNzUzMWFjOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+ItCj0LLQtdC6INC00L7Qt9Cy0L7Qu9C4INGB0LAg0L7QstC+0LMg0YDQsNGH0YPQvdCw0YDQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+ItCX0YPQvNC40YDQsNGYINC90LAg0YbQtdC70L7QvCDQtdC60YDQsNC90YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i0KDQsNC30LLRg9GG0Lgg0L3QsCDRhtC10L4g0LXQutGA0LDQvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+ItCa0L7QvNC/0LDRgtC40LHQuNC70L3QviDQt9GD0LzQuNGA0LDRmtC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+ItCa0LDQtNCwINGY0LUg0LDQv9C70LjQutCw0YbQuNGY0LAg0L3QsNC80LXRmtC10L3QsCDQvNCw0ZrQtdC8INC10LrRgNCw0L3Rgywg0LrQvtC90YLRgNC+0LvQsCDQt9GD0LzQuNGA0LDRmtCwINC/0YDQuNC60LDQt9GD0ZjQtSDRgdC1INC/0L7RgNC10LQg0YHQsNGC0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+ItCn0YPQstCw0ZrQtSDRgdC90LjQvNC60LAg0LXQutGA0LDQvdCwLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i0KfRg9Cy0LDRmtC1INGB0L3QuNC80LrQsCDQtdC60YDQsNC90LAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+ItCh0L3QuNC80LDQuiDQtdC60YDQsNC90LAg0YHQtSDRh9GD0LLQsC4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i0J/QvtGH0LXRgtC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLQnNC10L3QuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+ItCd0LXQtNCw0LLQvdC1INCw0L/Qu9C40LrQsNGG0LjRmNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4i0J/RgNC10YLRgNCw0LbQuNGC0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4i0JrQsNC80LXRgNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiLQlNGD0LPQvNC1INCf0YDQvtC80LXQvdC4INC80LXRgtC+0LQg0YPQvdC+0YHQsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4i0JTRg9Cz0LzQtSDQl9GD0Lwg0LrQvtC80L/QsNGC0LjQsdC40LvQvdC+0YHRgtC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i0JfRg9C80LjRgNCw0ZrQtSDRgdCwINC80LDRmtC10LMg0L3QsCDQstC10ZvQuCDQtdC60YDQsNC9LiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+ItCR0LDRgtC10YDQuNGY0LA6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i0KDQtdC20LjQvCDRgNCw0LTQsCDRgyDQsNCy0LjQvtC90YM6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLQm9C+0LrQsNGG0LjRmNCwINGY0LUgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLQkNC70LDRgNC8INGY0LUg0L/QvtC00LXRiNC10L0g0LfQsCA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IjJH4oCTM0cg0L/QvtC00LDRhtC4INGB0YMg0L7QvdC10LzQvtCz0YPRm9C10L3QuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IjRHINC/0L7QtNCw0YbQuCDRgdGDINC+0L3QtdC80L7Qs9GD0ZvQtdC90LgiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4iV2ktRmkg0ZjQtSDQv9C+0LLQtdC30LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i0KLRgNCw0LbQuCDRgdC1IEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiLQm9C+0LrQsNGG0LjRmNGDINGY0LUg0L/QvtC00LXRgdC40L4gR1BTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i0JjQvNCwINCw0LrRgtC40LLQvdC40YUg0LfQsNGF0YLQtdCy0LAg0LfQsCDQu9C+0LrQsNGG0LjRmNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i0J7QsdGA0LjRiNC4INGB0LLQsCDQvtCx0LDQstC10YjRgtC10ZrQsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i0JjQvdGE0L7RgNC80LDRhtC40ZjQtSDQviDQsNC/0LvQuNC60LDRhtC40ZjQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i0JXQutGA0LDQvSDRm9C1INGB0LUg0LDRg9GC0L7QvNCw0YLRgdC60Lgg0YDQvtGC0LjRgNCw0YLQuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+ItCV0LrRgNCw0L0g0ZjQtSDQt9Cw0LrRmdGD0YfQsNC9INGDINGF0L7RgNC40LfQvtC90YLQsNC70L3QvtC8INC/0L7Qu9C+0LbQsNGY0YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+ItCV0LrRgNCw0L0g0ZjQtSDQt9Cw0LrRmdGD0YfQsNC9INGDINCy0LXRgNGC0LjQutCw0LvQvdC+0Lwg0L/QvtC70L7QttCw0ZjRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4i0JLQuNGC0YDQuNC90LAg0YHQsCDQv9C+0YHQu9Cw0YHRgtC40YbQsNC80LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4i0KHQsNGa0LDRgNC10ZrQtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+ItCV0YLQtdGA0L3QtdGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLQoNC10LbQuNC8INGA0LDQtNCwINGDINCw0LLQuNC+0L3RgyI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk2LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i0JLQtdC30LAg0L3QuNGY0LUg0YPRgdC/0L7RgdGC0LDQstGZ0LXQvdCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+ItCd0LXQvNCwINC80YDQtdC20LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSDRmNC1INC40YHQutGZ0YPRh9C10L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2ktRmkg0LXQutGA0LDQvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+ItCR0LXQttC40YfQvdC4INC10LrRgNCw0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4i0J/RgNC10LHQsNGG0Lgg0LXQutGA0LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+ItCe0YHQstC10YLRmdC10L3QvtGB0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4i0JDQo9Ci0J7QnNCQ0KLQodCa0JAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4i0J7QsdCw0LLQtdGI0YLQtdGa0LAg0YHQtSDQv9C+0ZjQsNCy0ZnRg9GY0YMg0L7QstC00LUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiLQn9GA0LjRgdGC0YPQv9C40YLQtSDQuNC8INGDINCx0LjQu9C+INC60L7QvCDRgtGA0LXQvdGD0YLQutGDINC70LjRgdGC0LDRmtC10Lwg0L3QsNC00L7Qu9C1Llxu0J/QvtC90L7QstC+INC70LjRgdGC0LDRmNGC0LUg0L3QsNC00L7Qu9C1INC00LAg0LHQuCDRgdC1INC/0YDQuNC60LDQt9Cw0LvQtSDRgdC40YHRgtC10LzRgdC60LUg0LrQvtC90YLRgNC+0LvQtS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLQn9GA0LXQstGD0YbQuNGC0LUg0L/QviDQuNCy0LjRhtC4INC10LrRgNCw0L3QsCDQtNCwINCx0Lgg0YHQtSDQv9GA0LjQutCw0LfQsNC70LAg0YLRgNCw0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4i0J/RgNC10LLRg9GG0LjRgtC1INC+0LQg0LjQstC40YbQtSDQtdC60YDQsNC90LAg0LTQsCDQsdC4INGB0LUg0L/RgNC40LrQsNC30LDQu9CwINGB0LjRgdGC0LXQvNGB0LrQsCDRgtGA0LDQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+ItCg0LXQttC40Lwg0LjQvdCy0LXRgNC30LjRmNC1INCx0L7RmNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4i0KDQtdC20LjQvCDRg9C90LDQv9GA0LXRktC10L3QvtCzINC60L7QvdGC0YDQsNGB0YLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4i0KDQtdC20LjQvCDQutC+0YDQtdC60YbQuNGY0LUg0LHQvtGY0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+ItCc0YDQtdC20LAg0YHQtSDQvNC+0LbQtNCwXG7QvdCw0LTQs9C70LXQtNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLQn9GA0LXRgtGA0LDQs9CwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+ItCf0YDQtdCy0YPRhtC40YLQtSDQvdCw0LPQvtGA0LUg0LfQsCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i0J/RgNC10LLRg9GG0LjRgtC1INGD0LvQtdCy0L4g0LfQsCA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAppbmRleCAwMjJlMmYyLi5mNGJkNGE3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iVGlsbMOldCBhbGx0aWQgcMOlIGRlbiBow6RyIGRhdG9ybiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+Ilpvb21hIGbDtnIgYXR0IGZ5bGxhIHNrw6RybSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJEcmEgZsO2ciBhdHQgZnlsbGEgc2vDpHJtZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJab29tIGkga29tcGF0aWJpbGl0ZXRzbMOkZ2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iTsOkciBlbiBhcHAgw6RyIGFucGFzc2FkIGbDtnIgZW4gbWluZHJlIHNrw6RybSB2aXNhcyBldHQgem9vbXJlZ2xhZ2UgdmlkIGtsb2NrYW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IlNrw6RybWR1bXBlbiBzcGFyYXMgLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iU2vDpHJtZHVtcGVuIHNwYXJhcyAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlNrw6RybWR1bXBlbiBzcGFyYXMuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlN0YXJ0c2lkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+Ik1lbnkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJTZW5hc3RlIGFwcGFybmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJTw7ZrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkthbWVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iS25hcHAgZsO2ciBieXRlIGF2IGlubWF0bmluZ3NtZXRvZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iS25hcHAgZsO2ciBrb21wYXRpYmlsaXRldHN6b29tLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iWm9vbWEgbWluZHJlIHNrw6RybSB0aWxsIHN0w7ZycmUuIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iQmF0dGVyaSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IkZseWdwbGFuc2zDpGdlIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IlBsYXRzIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQWxhcm1ldCByaW5nZXIgPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiJEYXRhIHZpYSAyRy0zRyBoYXIgaW5ha3RpdmVyYXRzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iRGF0YSB2aWEgNEcgaGFyIGluYWt0aXZlcmF0cyI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaS1hbnNsdXRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iU8O2a25pbmcgZWZ0ZXIgR1BTIHDDpWfDpXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iUGxhdHNlbiBoYXIgaWRlbnRpZmllcmF0cyBhdiBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJEZXQgZmlubnMgYWt0aXZhIHBsYXRzYmVnw6RyYW5kZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJUYSBib3J0IGFsbGEgbWVkZGVsYW5kZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IkluZm8gb20gYXBwZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IlNrw6RybWVuIHJvdGVyYXMgYXV0b21hdGlza3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiJCaWxkc2vDpHJtZW5zIHJpa3RuaW5nIMOkciBudSBsw6VzdCBpIGxpZ2dhbmRlIGZvcm1hdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iQmlsZHNrw6RybWVucyByaWt0bmluZyDDpHIgbnUgbMOlc3QgaSBzdMOlZW5kZSBmb3JtYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IkRlc3NlcnRkaXNrZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGFnZHLDtm0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iRmx5Z3BsYW5zbMOkZ2UiPC9zdHJpbmc+CkBAIC0xOTQsMTIgKzE5NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IkVqIGFuc2x1dGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IkluZ2V0IG7DpHR2ZXJrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkgYXYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iV2ktRmktc2vDpHJtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iVHLDpWRsw7ZzIHNrw6RybSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLDlnZlcmbDtnIgc2vDpHJtZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJManVzc3R5cmthIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iTWVkZGVsYW5kZW4gdmlzYXMgaMOkciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IkR1IGtvbW1lciDDpXQgZGVtIG7DpHIgc29tIGhlbHN0IGdlbm9tIGF0dCBkcmEgbmVkw6V0LlxuRHJhIG5lZMOldCBpZ2VuIG9tIGR1IHZpbGwgdmlzYSBzeXN0ZW1rb250cm9sbGVyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+IkRyYSBmcsOlbiBrYW50ZW4gYXYgc2vDpHJtZW4gb20gZHUgdmlsbCB2aXNhIGbDpGx0ZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IkRyYSBmcsOlbiBrYW50ZW4gYXYgc2vDpHJtZW4gb20gZHUgdmlsbCB2aXNhIHN5c3RlbWbDpGx0ZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iRsOkcmdpbnZlcnRlcmluZ3Nsw6RnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IktvbnRyYXN0ZsO2cmLDpHR0cmluZ3Nsw6RnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iRsOkcmdrb3JyaWdlcmluZ3Nsw6RnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iTsOkdHZlcmtldCBrYW5cbnZhcmEgw7Z2ZXJ2YWthdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iU8O2ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJEcmEgdXBww6V0IGbDtnIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJEcmEgw6V0IHbDpG5zdGVyIGbDtnIgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCmluZGV4IDI3ZjU1NmMuLjAyMDU4N2EgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbApAQCAtNTksOCArNTksNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJSdWh1c3Uga3V0b2thIGt3ZW55ZSBrb21weXV0YSBoaWkga2lsYSB3YWthdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJLdXphIGlsaSBrdWphemEgc2tyaW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IlRhbnVhIGlsaSBrdWphemEgc2tyaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iS3VrdXphIGt3YSBVdGFuZ2FtYW5pZnUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iV2FrYXRpIHByb2dyYW11IGlsaWJ1bml3YSBrd2Egc2tyaW5pIG5kb2dvLCBraWRoaWJpdGkgY2hhIGt1a3V6YSBraXRhb25la2FuYSBrd2Egc2FhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiJJbmFoaWZhZGhpIHBpY2hhIHlhIHNrcmluaS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IkluYWhpZmFkaGkgcGljaGEgeWEgc2tyaW5pLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJQaWNoYSB5YSBza3JpbmkgaW5haGlmYWRoaXdhIjwvc3RyaW5nPgpAQCAtNzYsNiArNzQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+Ik55dW1iYW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVueXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJQcm9ncmFtdSB6YSBoaXZpIGthcmlidW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4iVGFmdXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IkthbWVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iU3dpY2hpIGtpdHVmZSBjaGEgbWJpbnUgaW5naXppLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiJLaWNodXBvIGNoYSBrdWt1emEga3dhIHV0YW5nYW1hbmlmdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iS3V6YSBraWRvZ28ga3dhIHNrcmluaSBrdWJ3YS4iPC9zdHJpbmc+CkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3dpZmkiIG1zZ2lkPSIyMzI0NDk2NzU2NTkwNjQ1MjIxIj4iV2ktRmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiJIYWt1bmEgU0lNLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX3RldGhlciIgbXNnaWQ9IjQxMDI3ODQ0OTgxNDAyNzE5NjkiPiJTaGlyaWtpIGludGFuZXRpIGt3YSBCbHVldG9vdGguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9haXJwbGFuZV9tb2RlIiBtc2dpZD0iODM0NzQ4OTk5NzkwNzYzMDkyIj4iTW9kaSB5YSBuZGVnZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiJIYWxpIHlhIG5kZWdlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9sZXZlbCIgbXNnaWQ9Ijc0NTE0NzQxODcxMTMzNzE5NjUiPiJBc2lsaW1pYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4geWEgYmV0cmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+Ik1pcGFuZ2lsaW8geWEgbWZ1bW8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiJBcmlmYS4iPC9zdHJpbmc+CkBAIC0xNTEsNiArMTUxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCZXRyaSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IkhhbGkgeWEgTmRlZ2UgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iTWFoYWxpIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iS2VuZ2VsZSBpbWV3ZWt3YSA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IkRhdGEgeWEgMkctM0cgaW1lbGVtYXp3YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IkRhdGEgeWEgNEcgaW1lbGVtYXp3YSI8L3N0cmluZz4KQEAgLTE2MiwxNSArMTYzLDE2IEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJNdGFuZGFvLWhld2EgdW1ldW5nYW5pc2h3YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4iSW5hdGFmdXRhIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJNYWhhbGkgcGFtZXdla3dhIG5hIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+Ik1hb21iaSB5YSBlbmVvIHlhbmF0dW1pa2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJGdXRhIGFyaWZhIHpvdGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IlRhYXJpZmEgeWEgcHJvZ3JhbXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IlNrcmluaSBpdGF6dW5ndWthIGtpb3RvbWF0aWtpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iU2tyaW5pIGltZWZ1bmd3YSBzYXNhIGthdGlrYSB1ZWxla2V6byB3YSBtYW5kaGFyaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iU2tyaW5pIGltZWZ1bmd3YSBrYXRpa2EgdWVsZWtlbyB3YSBwaWNoYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iU2FuZHVrdSBsYSBWaXRpbmRhbWxvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkhhbGkgVHVsaXZ1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4iRXRoZXJuZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+Ik1vZGkgeWEgbmRlZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+IkhhbGkgeWEgbmRlZ2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnaW5nX2xhYmVsIiBtc2dpZD0iNDkwMDc0Nzc0NDY1MzA5MjA5Ij4iSW5hY2hhamksIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPjx4bGlmZjpnIGlkPSJQRVJDRU5UIj4lJTwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnZWRfbGFiZWwiIG1zZ2lkPSI4ODY1NDEzMDc5NDE0MjQ2MDgxIj4iSW1lY2hhaml3YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+CkBAIC0xODAsMTAgKzE4Miw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjMzNjA1NDkzMDM2MjU4MDU4NCI+Ilp1bmd1c2hhIE90b21hdGlraSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiJNenVuZ3VrbyBVbWVmdW5nd2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iTWJpbnUgeWEgdWluZ2l6YWppIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+Ikt1dGFtYnVhIEVuZW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9vZmZfbGFiZWwiIG1zZ2lkPSI3NDY0NTQ0MDg2NTA3MzMxNDU5Ij4iS2l0YW1idWEgZW5lbyBraW1lemltd2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4iS2lmYWEgY2hhIG1pZGlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJTaW11IHphIERoYXJ1cmEgUGVrZWUiPC9zdHJpbmc+CkBAIC0xOTQsMTIgKzE5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IkhhaWphdW5nYW5pc2h3YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJIYWt1bmEgTXRhbmRhbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IldpLUZpIEltZXppbXdhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+Ik9ueWVzaG8gbGEgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiJVb255ZXNoYWppIFBhc2l3YXlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IlV0dW1hamkgd2EgU2tyaW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iVW5nXCdhdnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iS0lPVE9NQVRJS0kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iQXJpZmEgeml0YW9uZWthbmEgaGFwYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IlppZmlraWUgd2FrYXRpIHdvd290ZSBrd2Ega3V0ZWxlemVzaGEgY2hpbmkuXG5UZWxlemVzaGEgY2hpbmkgdGVuYSBrdXBhdGEgdmlkaGliaXRpIHZ5YSBtZnVtby4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJQYXBhc2Ega3dhIGthc2kga3V0b2thIHVraW5nbyB3YSBza3JpbmkgaWxpIGt1b255ZXNoYSB1cGF1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJQYXBhc2Ega3dhIGthc2kga3V0b2thIHVraW5nbyB3YSBza3JpbmkgaWxpIGt1b255ZXNoYSB1cGF1IHdhIG1mdW1vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IkhhbGkgeWEgdWdldXphamkga2lueXVtZSB3YSByYW5naSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IkhhbGkgeWEgdXRvZmF1dGlzaGFqaSB1bGlvYm9yZXNod2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCIgbXNnaWQ9Ijg1MzQ0MzY4OTc0NTU4NDc3MCI+IkhhbGkgeWEga3VzYWhpaGlzaGEgcmFuZ2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Ikh1ZW5kYSBtdGFuZGFvXG51bmFmdWF0aWxpd2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+IlRhZnV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJTb2dlemEganV1IGt3YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IlNvZ2V6YSBrdXNob3RvIGt3YSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4gLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zdzYwMGRwL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3NjAwZHAvYXJyYXlzLnhtbAppbmRleCBmM2ExNzcxLi4yMWM0YmQzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3NjAwZHAvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3NjAwZHAvYXJyYXlzLnhtbApAQCAtMjEsMjEgKzIxLDIxIEBACiAKICAgICA8YXJyYXkgbmFtZT0ibmF2YmFyX3NlYXJjaF90YXJnZXRzIj4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkAqYW5kcm9pZDpkcmF3YWJsZS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWM8L2l0ZW0+CisgICAgICAgIDxpdGVtPkBkcmF3YWJsZS9pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWM8L2l0ZW0+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KICAgICA8L2FycmF5PgogCiAgICAgPGFycmF5IG5hbWU9Im5hdmJhcl9zZWFyY2hfdGFyZ2V0X2Rlc2NyaXB0aW9ucyI+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgotICAgICAgICA8aXRlbT5AKmFuZHJvaWQ6c3RyaW5nL2Rlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2g8L2l0ZW0+CisgICAgICAgIDxpdGVtPkBzdHJpbmcvZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaDwvaXRlbT4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgogICAgIDwvYXJyYXk+CiAKICAgICA8YXJyYXkgbmFtZT0ibmF2YmFyX3NlYXJjaF9kaXJlY3Rpb25fZGVzY3JpcHRpb25zIj4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkAqYW5kcm9pZDpzdHJpbmcvZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQ8L2l0ZW0+CisgICAgICAgIDxpdGVtPkBzdHJpbmcvZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQ8L2l0ZW0+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KICAgICA8L2FycmF5PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKaW5kZXggZGM2NDNjNC4uNzU0NmIxMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IuC4reC4meC4uOC4jeC4suC4leC4iOC4suC4geC4hOC4reC4oeC4nuC4tOC4p+C5gOC4leC4reC4o+C5jOC5gOC4hOC4o+C4t+C5iOC4reC4h+C4meC4teC5ieC5gOC4quC4oeC4rSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IuC4guC4ouC4suC4ouC4iOC4meC5gOC4leC5h+C4oeC4q+C4meC5ieC4suC4iOC4rSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLguKLguLfguJTguIjguJnguYDguJXguYfguKHguKvguJnguYnguLLguIjguK0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLguITguKfguLLguKHguYDguILguYnguLLguIHguLHguJnguYTguJTguYnguILguK3guIfguIHguLLguKPguKLguYjguK0v4LiC4Lii4Liy4LiiIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IuC4quC4s+C4q+C4o+C4seC4muC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC4l+C4teC5iOC4reC4reC4geC5geC4muC4muC4oeC4suC4quC4s+C4q+C4o+C4seC4muC4q+C4meC5ieC4suC4iOC4reC4guC4meC4suC4lOC5gOC4peC5h+C4gSDguJXguLHguKfguITguKfguJrguITguLjguKHguIHguLLguKPguKLguYjguK0v4LiC4Lii4Liy4Lii4LiI4Liw4Lib4Lij4Liy4LiB4LiP4LiC4Li24LmJ4LiZ4LiC4LmJ4Liy4LiH4LiZ4Liy4Lis4Li04LiB4LiyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IuC4geC4s+C4peC4seC4h+C4muC4seC4meC4l+C4tuC4geC4oOC4suC4nuC4q+C4meC5ieC4suC4iOC4rS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+IuC4geC4s+C4peC4seC4h+C4muC4seC4meC4l+C4tuC4geC4oOC4suC4nuC4q+C4meC5ieC4suC4iOC4rS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i4LiB4Liz4Lil4Lix4LiH4Lia4Lix4LiZ4LiX4Li24LiB4Lig4Liy4Lie4Lir4LiZ4LmJ4Liy4LiI4LitIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IuC4q+C4meC5ieC4suC5geC4o+C4gSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+IuC5gOC4oeC4meC4uSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IuC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC4peC5iOC4suC4quC4uOC4lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IuC4hOC5ieC4meC4q+C4siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLguIHguKXguYnguK3guIfguJbguYjguLLguKLguKPguLnguJsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IuC4m+C4uOC5iOC4oeC4quC4peC4seC4muC4p+C4tOC4mOC4teC4geC4suC4o+C4m+C5ieC4reC4meC4guC5ieC4reC4oeC4ueC4pSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLguJvguLjguYjguKHguIvguLnguKHguJfguLXguYjguYPguIrguYnguIfguLLguJnguKPguYjguKfguKHguIHguLHguJnguYTguJTguYkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IuC4i+C4ueC4oeC4q+C4meC5ieC4suC4iOC4reC5g+C4q+C5ieC4oeC4teC4guC4meC4suC4lOC5g+C4q+C4jeC5iOC4guC4tuC5ieC4mSI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IuC5geC4muC4leC5gOC4leC4reC4o+C4teC5iCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4i4LmC4Lir4Lih4LiU4LmD4LiK4LmJ4LiH4Liy4LiZ4Lia4LiZ4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lia4Li04LiZIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4i4Lia4Lil4Li54LiX4Li54LiYIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLguKrguJbguLLguJnguJfguLXguYggPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IuC4leC4seC5ieC4h+C5gOC4p+C4peC4suC4m+C4peC4uOC4geC5hOC4p+C5ieC4l+C4teC5iCA8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4i4Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZ4LiC4LmJ4Lit4Lih4Li54LilIDJHLTNHIOC5geC4peC5ieC4pyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IuC4m+C4tOC4lOC5g+C4iuC5ieC4h+C4suC4meC4guC5ieC4reC4oeC4ueC4pSA0RyDguYHguKXguYnguKciPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4i4LmA4LiK4Li34LmI4Lit4Lih4LiV4LmI4LitIFdpRmkg4LmB4Lil4LmJ4LinIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiLguIHguLPguKXguLHguIfguITguYnguJnguKvguLIgR1BTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9mb3VuZF90ZXh0IiBtc2dpZD0iNDYxOTI3NDI0NDE0NjQ0NjQ2NCI+IuC4leC4s+C5geC4q+C4meC5iOC4h+C4l+C4teC5iOC4geC4s+C4q+C4meC4lOC5guC4lOC4oiBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLguITguLPguILguK3guJXguLPguYHguKvguJnguYjguIfguJfguLXguYjguKHguLXguIHguLLguKPguYPguIrguYnguIfguLLguJkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiLguKXguYnguLLguIfguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJnguJfguLHguYnguIfguKvguKHguJQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSIxMTYzNTQ3NzI5MDE1MzkwMjUwIj4i4LiC4LmJ4Lit4Lih4Li54Lil4LmB4Lit4LibIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLguKvguJnguYnguLLguIjguK3guIjguLDguKvguKHguLjguJnguYLguJTguKLguK3guLHguJXguYLguJnguKHguLHguJXguLQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IuC4guC4k+C4sOC4meC4teC5ieC4q+C4meC5ieC4suC4iOC4reC4luC4ueC4geC4peC5h+C4reC4geC5g+C4q+C5ieC4p+C4suC4h+C5g+C4meC5geC4meC4p+C4meC4reC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiLguILguJPguLDguJnguLXguYnguKvguJnguYnguLLguIjguK3guJbguLnguIHguKXguYfguK3guIHguYPguKvguYnguKfguLLguIfguYPguJnguYHguJnguKfguJXguLHguYnguIciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iQmVhbkZsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4i4LiK4Lix4LmJ4LiZ4LmB4Liq4LiU4LiH4LiC4Lit4LiH4Lir4Lin4Liy4LiZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkRheWRyZWFtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZXRoZXJuZXRfbGFiZWwiIG1zZ2lkPSI3OTY3NTYzNjc2MzI0MDg3NDY0Ij4i4Lit4Li14LmA4LiX4Lit4Lij4LmM4LmA4LiZ4LmH4LiVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLguYLguKvguKHguJTguYPguIrguYnguIfguLLguJnguJrguJnguYDguITguKPguLfguYjguK3guIfguJrguLTguJkiPC9zdHJpbmc+CkBAIC0xOTQsMTIgKzE5NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IuC5hOC4oeC5iOC5hOC4lOC5ieC5gOC4iuC4t+C5iOC4reC4oeC4leC5iOC4rSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLguYTguKHguYjguKHguLXguYDguITguKPguLfguK3guILguYjguLLguKIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiLguJvguLTguJQgV2lGaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiLguIHguLLguKPguYHguKrguJTguIfguJzguKUgV2lGaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IuC4iOC4reC5geC4quC4lOC4h+C4nOC4peC5hOC4o+C5ieC4quC4suC4oiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLguKrguYjguIfguKvguJnguYnguLLguIjguK0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiLguITguKfguLLguKHguKrguKfguYjguLLguIciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4i4Lit4Lix4LiV4LmC4LiZ4Lih4Lix4LiV4Li0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IuC4geC4suC4o+C5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4meC4iOC4sOC5geC4quC4lOC4h+C4guC4tuC5ieC4meC4l+C4teC5iOC4meC4teC5iCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IuC5gOC4guC5ieC4suC4luC4tuC4h+C5hOC4lOC5ieC4l+C4uOC4geC5gOC4oeC4t+C5iOC4reC4lOC5ieC4p+C4ouC4geC4suC4o+C4geC4p+C4suC4lOC4meC4tOC5ieC4p+C4peC4h1xu4LiB4Lin4Liy4LiU4LiZ4Li04LmJ4Lin4Lil4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiH4Liq4Liz4Lir4Lij4Lix4Lia4LiB4Liy4Lij4LiE4Lin4Lia4LiE4Li44Lih4Lij4Liw4Lia4LiaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4i4LiB4Lin4Liy4LiU4LiC4Lit4Lia4LiC4Lit4LiH4Lir4LiZ4LmJ4Liy4LiI4Lit4LmA4Lie4Li34LmI4Lit4LmB4Liq4LiU4LiH4LmB4LiW4LiaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiLguIHguKfguLLguJTguIjguLLguIHguILguK3guJrguILguK3guIfguKvguJnguYnguLLguIjguK3guYDguJ7guLfguYjguK3guYHguKrguJTguIfguYHguJbguJrguKPguLDguJrguJoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i4LmC4Lir4Lih4LiU4LiB4Liy4Lij4LiB4Lil4Lix4Lia4Liq4Li1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4i4LmC4Lir4Lih4LiU4LiE4Lit4LiZ4LiX4Lij4Liy4Liq4LiV4LmM4LiX4Li14LmI4Lib4Lij4Lix4Lia4Lib4Lij4Li44LiH4LmB4Lil4LmJ4LinIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLguYLguKvguKHguJTguIHguLLguKPguYHguIHguYnguYTguILguKrguLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+IuC5gOC4hOC4o+C4t+C4reC4guC5iOC4suC4ouC4reC4suC4iFxu4LiW4Li54LiB4LiV4Lij4Lin4LiI4Liq4Lit4LiaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLguITguYnguJnguKvguLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i4LmA4Lil4Li34LmI4Lit4LiZ4LiC4Li24LmJ4LiZ4LmA4Lie4Li34LmI4LitIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuC5gOC4peC4t+C5iOC4reC4meC5hOC4m+C4l+C4suC4h+C4i+C5ieC4suC4ouC5gOC4nuC4t+C5iOC4rSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCmluZGV4IDAwNTNiZTQuLmY2NmJkMWQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiJQYWxhZ2luZyBwYXlhZ2FuIG11bGEgc2EgY29tcHV0ZXIgbmEgaXRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4iSS16b29tIHVwYW5nIHB1bmFuIHNjcmVlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJJLXN0cmV0Y2ggdXBhbmcgbWFwdW5vIHNjcmVlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+Ilpvb20gc2EgcGFnaWdpbmcgVHVnbWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iS2FwYWcgbmFrYWRpc2VueW8gYW5nIGlzYW5nIGFwcCBwYXJhIHNhIG1hcyBtYWxpaXQgbmEgc2NyZWVuLCBpc2FuZyBrb250cm9sIG5nIHpvb20gYW5nIGxhbGFiYXMgc2EgbWF5IG9yYXNhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4iU2luZS1zYXZlIGFuZyBzY3JlZW5zaG904oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iU2luZS1zYXZlIGFuZyBzY3JlZW5zaG904oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiJTaW5lLXNhdmUgYW5nIHNjcmVlbnNob3QuIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IkhvbWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW51Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4iS2FtYWthaWxhbmcgYXBwcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IkhhbmFwaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhbWVyYV9idXR0b24iIG1zZ2lkPSI4MDY0NjcxNTgyODIwMzU4MTUyIj4iQ2FtZXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJJbGlwYXQgYW5nIGJ1dHRvbiBuYSBwYW1hbWFyYWFuIG5nIHBhZy1pbnB1dC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iQnV0dG9uIG5nIHpvb20gbmcgcGFnaWdpbmcgdHVnbWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fZXhhbXBsZSIgbXNnaWQ9IjQyMjA2ODcyOTQ1NjQ5NDU3ODAiPiJNYWctem9vbSBuYW5nIG1hcyBtYWxpaXQgc2EgbWFzIG1hbGFraW5nIHNjcmVlbi4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiI8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiBuZyBiYXRlcnlhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmUiIG1zZ2lkPSI0MTk2ODc2NzIyMDkwMjI0NzUzIj4iPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4gbmcgQWlycGxhbmUgTW9kZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiI8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPiBuZyBCbHVldG9vdGguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiJMb2thc3lvbiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtIHNldCBwYXJhIHNhIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iRGkgcGluYXBhZ2FuYSBhbmcgMkctM0cgbmEgZGF0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iNDc4OTE0MzM2MzQ5MjY4MjYyOSI+IkhpbmRpIHBpbmFwYWdhbmEgYW5nIDRHIG5hIGRhdGEiPC9zdHJpbmc+CkBAIC0xNjQsMTIgKzE2NSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfd2lmaV9ub3NzaWQiIG1zZ2lkPSI2NTU3NDg2NDUyNzc0NTk3ODIwIj4ibmFrYWtvbmVrdGEgYW5nIFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJOYWdoYWhhbmFwIG5nIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJMb2thc3lvbmcgaXRpbmF0YWtkYSBuZyBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJBa3RpYm8gYW5nIG1nYSBrYWhpbGluZ2FuIG5nIGxva2FzeW9uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iSS1jbGVhciBhbmcgbGFoYXQgbmcgbm90aWZpY2F0aW9uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiJJbXBvcm1hc3lvbiBuZyBhcHAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IkF3dG9tYXRpa29uZyBpaWtvdCBhbmcgc2NyZWVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iTmFrYS1sb2NrIGFuZyBzY3JlZW4gc2EgcGFoaWdhbmcgb3J5ZW50YXN5b24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+Ik5ha2EtbG9jayBhbmcgc2NyZWVuIHNhIHBhdGF5b25nIG9yeWVudGFzeW9uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJEZXNzZXJ0IENhc2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4iRGF5ZHJlYW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iQWlycGxhbmUgbW9kZSI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk2LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iSGluZGkgTmFrYWtvbmVrdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iV2FsYW5nIE5ldHdvcmsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJOYWthLW9mZiBhbmcgV2ktRmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iRGlzcGxheSBuZyBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IldpcmVsZXNzIERpc3BsYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iSS1jYXN0IGFuZyBTY3JlZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJCcmlnaHRuZXNzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iRGl0byBsdW1hbGFiYXMgYW5nIG1nYSBub3RpZmljYXRpb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJJLWFjY2VzcyBhbmcgbWdhIGl0byBhbnVtYW5nIG9yYXMgc2EgcGFtYW1hZ2l0YW4gbmcgcGFnLXN3aXBlIHBhYmFiYS5cbk11bGluZyBtYWctc3dpcGUgcGFiYWJhIHBhcmEgc2EgbWdhIGtvbnRyb2wgbmcgc3lzdGVtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+Ik1hZy1zd2lwZSBzYSBnaWxpZCBuZyBzY3JlZW4gdXBhbmcgaXBha2l0YSBhbmcgYmFyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiJNYWctc3dpcGUgbXVsYSBzYSBnaWxpZCBuZyBzY3JlZW4gdXBhbmcgaXBha2l0YSBhbmcgc3lzdGVtIGJhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJNb2RlIG5nIHBhZy1pbnZlcnQgbmcga3VsYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiJNb2RlIG5hIGRpbmFnZGFnYW4gYW5nIGNvbnRyYXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJNb2RlIG5nIHBhZ3RhdGFtYSBuZyBrdWxheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X3dhcm5pbmciIG1zZ2lkPSI5MDA1OTU0MTA2OTAyMDUzNjQxIj4iTWFhYXJpbmdcbnNpbnVzdWJheWJheWFuIGFuZyBuZXR3b3JrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJNYWdoYW5hcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJNYWctc2xpZGUgcGF0YWFzIHBhcmEgc2EgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+Ik1hZy1zbGlkZSBwYWthbGl3YSBwYXJhIHNhIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCmluZGV4IGYzOWY4YmMuLmMzMGM4ZmQxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4iQnUgYmlsZ2lzYXlhcmRhbiBoZXIgemFtYW4gaXppbiB2ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJZYWvEsW5sYcWfdMSxciAoZWtyYW7EsSBrYXBsYXPEsW4pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IkdlbmnFn2xldCAoZWtyYW4ga2FwYW5zxLFuKSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IlV5dW1sdWx1ayB5YWvEsW5sYcWfdMSxcm1hc8SxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+IlV5Z3VsYW1hIGvDvMOnw7xrIGJpciBla3JhbiBpw6dpbiB0YXNhcmxhbm3EscWfc2Egc2FhdGluIHlhbsSxbmRhIGJpciB5YWvEsW5sYcWfdMSxcm1hIGRlbmV0aW1pIGfDtnLDvG7DvHIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+IkVrcmFuIGfDtnLDvG50w7xzw7wga2F5ZGVkaWxpeW9yLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iRWtyYW4gZ8O2csO8bnTDvHPDvCBrYXlkZWRpbGl5b3IuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IkVrcmFuIGfDtnLDvG50w7xzw7wga2F5ZGVkaWxpeW9yLiI8L3N0cmluZz4KQEAgLTc4LDYgKzc2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJBbmEgc2F5ZmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJNZW7DvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IlNvbiB1eWd1bGFtYWxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IkFyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJLYW1lcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IkdpcmnFnyB5w7ZudGVtaW5pIGRlxJ9pxZ90aXJtZSBkw7zEn21lc2kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IlV5dW1sdWx1ayB6dW0gZMO8xJ9tZXNpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iRGFoYSBiw7x5w7xrIGVrcmFuYSBkYWhhIGvDvMOnw7xrIHlha8SxbmxhxZ90xLFyLiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IlBpbCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IlXDp2FrIE1vZHUgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4iQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iS29udW06IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4iQWxhcm0gc2FhdGk6IDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cgdmVyaWxlcmkgZGV2cmUgZMSxxZ/EsSBixLFyYWvEsWxkxLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiI0RyB2ZXJpbGVyaSBkZXZyZSBkxLHFn8SxIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IkthYmxvc3V6IGJhxJ9sYW5kxLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IkdQUyBhcmFuxLF5b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iS29udW0gR1BTIGlsZSBiZWxpcmxlbmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4iS29udW0gYmlsZ2lzaSBpc3Rla2xlcmkgZXRraW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJUw7xtIGJpbGRpcmltbGVyaSB0ZW1pemxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IlV5Z3VsYW1hIGJpbGdpbGVyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iRWtyYW4gb3RvbWF0aWsgb2xhcmFrIGTDtm5lY2VrdGlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iRWtyYW4geWF0YXkgecO2bmRlIGtpbGl0bGVuZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IkVrcmFuIGRpa2V5IHnDtm5kZSBraWxpdGxlbmRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJUYXRsxLEgS3V0dXN1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IkhhZmlmIHV5a3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGhlcm5ldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4iVcOnYWsgbW9kdSI8L3N0cmluZz4KQEAgLTE4MiwxMCArMTg0LDggQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4iT3RvbWF0aWsgRMO2bmTDvHIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4iRMO2bm1lIEtpbGl0bGVuZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iR2lyacWfIFnDtm50ZW1pIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IktvbnVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbG9jYXRpb25fb2ZmX2xhYmVsIiBtc2dpZD0iNzQ2NDU0NDA4NjUwNzMzMTQ1OSI+IktvbnVtIEJpbGdpc2kgS2FwYWzEsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiJNZWR5YSBjaWhhesSxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJZYWxuxLF6Y2EgQWNpbCDDh2HEn3LEsWxhciDEsMOnaW4iPC9zdHJpbmc+CkBAIC0xOTYsMTIgKzE5NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+IkJhxJ9sxLEgRGXEn2lsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+IkHEnyB5b2siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJLYWJsb3N1eiBLYXBhbMSxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+IkthYmxvc3V6IEVrcmFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iS2FibG9zdXogRWtyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iWWF5xLFubGFtYSBFa3JhbsSxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iUGFybGFrbMSxayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJPVE9NQVTEsEsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGl0bGUiIG1zZ2lkPSIxMTk5MjM3NzQ0MDg2NDY5MjE3Ij4iQmlsZGlyaW1sZXIgYnVyYWRhIGfDtnLDvG7DvHIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJBxZ9hxJ/EsXlhIGjEsXpsxLFjYSBrYXlkxLFyYXJhayBidW5sYXJhIGlzdGVkacSfaW5peiB6YW1hbiBlcmnFn2ViaWxpcnNpbml6LlxuU2lzdGVtIGRlbmV0aW1sZXJpIGnDp2luIHRla3JhciBoxLF6bMSxY2EgYcWfYcSfxLEga2F5ZMSxcsSxbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiLDh3VidcSfdSBnw7Zyw7xudMO8bGVtZWsgacOnaW4gZWtyYW7EsW4ga2VuYXLEsW5kYW4gaMSxemzEsWNhIGtheWTEsXLEsW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IlNpc3RlbSDDp3VidcSfdW51IGfDtnLDvG50w7xsZW1layBpw6dpbiBla3JhbsSxbiBrZW5hcsSxbmRhbiBoxLF6bMSxY2Ega2F5ZMSxcsSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJSZW5rIHRlcnMgw6dldmlybWUgbW9kdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IkdlbGnFn3RpcmlsbWnFnyBrb250cmFzdCBtb2R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJSZW5rIGTDvHplbHRtZSBtb2R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJBxJ8gaXpsZW5peW9yXG5vbGFiaWxpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4iQXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+Ijx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPiBpw6dpbiB5dWthcsSxIGtheWTEsXLEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4iPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+IGnDp2luIHNvbGEga2F5ZMSxcsSxbi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCmluZGV4IDE4ZjY3YTIuLmYyMmVkZDMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbApAQCAtNjEsOCArNjEsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19hbHdheXMiIG1zZ2lkPSIzMDMzMzU0OTY3MDU4NjMwNzAiPiLQl9Cw0LLQttC00Lgg0LTQvtC30LLQvtC70Y/RgtC4INC3INGG0YzQvtCz0L4g0LrQvtC80L/igJnRjtGC0LXRgNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i0JzQsNGB0YjRgtCw0LHRg9CyLiDQvdCwINCy0LXRgdGMINC10LrRgNCw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4i0KDQvtC30YLRj9Cz0L3Rg9GC0Lgg0L3QsCDQstC10YHRjCDQtdC60YDQsNC9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4i0JzQsNGB0YjRgtCw0LHRg9Cy0LDQvdC90Y8g0LTQu9GPINGB0YPQvNGW0YHQvdC+0YHRgtGWIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9ib2R5IiBtc2dpZD0iNDk0NjcyNjc3NjM1OTI3MDA0MCI+ItCv0LrRidC+INC/0YDQvtCz0YDQsNC80YMg0L/RgNC40LfQvdCw0YfQtdC90L4g0LTQu9GPINC80LXQvdGI0LjRhSDQtdC60YDQsNC90ZbQsiwg0LXQu9C10LzQtdC90YIg0LrQtdGA0YPQstCw0L3QvdGPINC80LDRgdGI0YLQsNCx0L7QvCDQsdGD0LTQtSDQstGW0LTQvtCx0YDQsNC20LDRgtC40YHRjyDQsdGW0LvRjyDQs9C+0LTQuNC90L3QuNC60LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+ItCX0LHQtdGA0LXQttC10L3QvdGPINC30L3RltC80LrQsCDQtdC60YDQsNC90LAuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLQl9Cx0LXRgNC10LbQtdC90L3RjyDQt9C90ZbQvNC60LAg0LXQutGA0LDQvdCwLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLQl9Cx0LXRgNGW0LPQsNGU0YLRjNGB0Y8g0LfQvdGW0LzQvtC6INC10LrRgNCw0L3QsC4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i0JPQvtC70L7QstC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLQnNC10L3RjiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+ItCe0YHRgtCw0L3QvdGWINC/0YDQvtCz0YDQsNC80LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiLQn9C+0YjRg9C6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+ItCa0LDQvNC10YDQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i0JrQvdC+0L/QutCwINC/0LXRgNC10LzQuNC60LDQvdC90Y8g0LzQtdGC0L7QtNGDINCy0LLQtdC00LXQvdC90Y8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+ItCa0L3QvtC/0LrQsCDQvNCw0YHRiNGC0LDQsdGD0LLQsNC90L3RjyDRgdGD0LzRltGB0L3QvtGB0YLRli4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+ItCX0LHRltC70YzRiNC10L3QvdGPINC10LrRgNCw0L3QsC4iPC9zdHJpbmc+CkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiLQkNC60YPQvNGD0LvRj9GC0L7RgDogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLQoNC10LbQuNC8INC/0L7Qu9GM0L7RgtGDOiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JsdWV0b290aCIgbXNnaWQ9IjU3NDkwNTQ5NzEzNDE4ODIzNDAiPiJCbHVldG9vdGg6IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4i0JzRltGB0YbQtdC30L3QsNGF0L7QtNC20LXQvdC90Y8gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLQodC40LPQvdCw0Lsg0YPRgdGC0LDQvdC+0LLQu9C10L3QviDQvdCwIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4i0JTQsNC90ZYgMkfigJMzRyDQstC40LzQutC90LXQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4i0JTQsNC90ZYgNEcg0LLQuNC80LrQvdC10L3QviI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXaS1GaSDQv9GW0LTigJnRlNC00L3QsNC90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+ItCS0LjQutC+0L3Rg9GU0YLRjNGB0Y8g0L/QvtGI0YPQuiBHUFMt0YHQuNCz0L3QsNC70YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4i0JzRltGB0YbQtdC30L3QsNGF0L7QtNC20LXQvdC90Y8g0LLRgdGC0LDQvdC+0LLQu9C10L3QviDQt9CwINC00L7Qv9C+0LzQvtCz0L7RjiBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiLQl9Cw0L/QuNGC0Lgg0L/RgNC+INC80ZbRgdGG0LXQt9C90LDRhdC+0LTQttC10L3QvdGPINCw0LrRgtC40LLQvdGWIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i0J7Rh9C40YHRgtC40YLQuCDQstGB0ZYg0YHQv9C+0LLRltGJ0LXQvdC90Y8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+ItCG0L3RhNC+0YDQvNCw0YbRltGPINC/0YDQviDQv9GA0L7Qs9GA0LDQvNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiLQldC60YDQsNC9INC+0LHQtdGA0YLQsNGC0LjQvNC10YLRjNGB0Y8g0LDQstGC0L7QvNCw0YLQuNGH0L3Qvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+ItCV0LrRgNCw0L0g0LfQsNCx0LvQvtC60L7QstCw0L3QviDQsiDQsNC70YzQsdC+0LzQvdGW0Lkg0L7RgNGW0ZTQvdGC0LDRhtGW0ZcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+ItCV0LrRgNCw0L0g0LfQsNCx0LvQvtC60L7QstCw0L3QviDQsiDQutC90LjQttC60L7QstGW0Lkg0L7RgNGW0ZTQvdGC0LDRhtGW0ZcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+ItCS0ZbRgtGA0LjQvdCwINC00LXRgdC10YDRgtGW0LIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGFydF9kcmVhbXMiIG1zZ2lkPSI3MjE5NTc1ODU4MzQ4NzE5NzkwIj4i0JfQsNGB0YLQsNCy0LrQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiLQoNC10LbQuNC8INC/0L7Qu9GM0L7RgtGDIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLQndC1INC/0ZbQtOKAmdGU0LTQvdCw0L3Qvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i0J3QtdC80LDRlCDQvNC10YDQtdC20ZYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSDQstC40LzQutC90LXQvdC+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+ItCS0ZbQtNC+0LHRgNCw0LbQtdC90L3RjyBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+ItCR0LXQt9C00YDQvtGC0L7QstC1INCy0ZbQtNC+0LHRgNCw0LbQtdC90L3RjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLQotGA0LDQvdGB0LvRjtCy0LDRgtC4INC10LrRgNCw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiLQr9GB0LrRgNCw0LLRltGB0YLRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLQkNCS0KLQniI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiLQodC/0L7QstGW0YnQtdC90L3RjyDQt+KAmdGP0LLQu9GP0Y7RgtGM0YHRjyDRgtGD0YIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiLQntGC0YDQuNC80YPQudGC0LUg0LTQviDQvdC40YUg0LTQvtGB0YLRg9C/INCx0YPQtNGMLdC60L7Qu9C4LCDQv9GA0L7QstGW0LLRiNC4INC/0LDQu9GM0YbQtdC8INGD0L3QuNC3Llxu0JfQvdC+0LLRgyDQv9GA0L7QstC10LTRltGC0Ywg0YPQvdC40LcsINGJ0L7QsSDQstGW0LTQutGA0LjRgtC4INC10LvQtdC80LXQvdGC0Lgg0LrQtdGA0YPQstCw0L3QvdGPINGB0LjRgdGC0LXQvNC4LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+ItCT0L7RgNGC0LDQudGC0LUg0LLRltC0INC60YDQsNGOINC10LrRgNCw0L3QsCwg0YnQvtCxINC34oCZ0Y/QstC40LvQsNGB0Ywg0L/QsNC90LXQu9GMIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiLQn9GA0L7QstC10LTRltGC0Ywg0L/QsNC70YzRhtC10Lwg0LLRltC0INC60YDQsNGOINC10LrRgNCw0L3QsCwg0YnQvtCxINC34oCZ0Y/QstC40LvQsNGB0Ywg0L3QsNCy0ZbQs9Cw0YbRltC50L3QsCDQv9Cw0L3QtdC70YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i0KDQtdC20LjQvCDRltC90LLQtdGA0YHRltGXINC60L7Qu9GM0L7RgNGW0LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb250cmFzdF9sYWJlbCIgbXNnaWQ9IjMzMTk1MDc1NTE2ODkxMDg2OTIiPiLQoNC10LbQuNC8INC/0L7RgdC40LvQtdC90L7Qs9C+INC60L7QvdGC0YDQsNGB0YLRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4i0KDQtdC20LjQvCDQutC+0YDQuNCz0YPQstCw0L3QvdGPINC60L7Qu9GM0L7RgNGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiLQnNC10YDQtdC20LAg0LzQvtC20LVcbtCy0ZbQtNGB0YLQtdC20YPQstCw0YLQuNGB0Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIiBtc2dpZD0iMzA5MTU4NzI0OTc3NjAzMzEzOSI+ItCf0L7RiNGD0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i0J/RgNC+0LLQtdC00ZbRgtGMINC/0LDQu9GM0YbQtdC8INGD0LPQvtGA0YMsINGJ0L7QsSA8eGxpZmY6ZyBpZD0iVEFSR0VUX0RFU0NSSVBUSU9OIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i0J/RgNC+0LLQtdC00ZbRgtGMINC/0LDQu9GM0YbQtdC8INC70ZbQstC+0YDRg9GHLCDRidC+0LEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKaW5kZXggYWNjN2UwZS4uYWIxNzBlMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+Ikx1w7RuIGNobyBwaMOpcCB04burIG3DoXkgdMOtbmggbsOgeSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IlQucGjDs25nIMSR4buDIGzhuqVwIMSR4bqneSBtLmjDrG5oIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+Ikdpw6NuIHJhIMSR4buDIGzhuqVwIMSR4bqneSBtLmjDrG5oIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfaGVscF9oZWFkZXIiIG1zZ2lkPSI3OTY5NDkzOTg5Mzk3NTI5OTEwIj4iVGh1IHBow7NuZyB0xrDGoW5nIHRow61jaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiJLaGkg4bupbmcgZOG7pW5nIMSRxrDhu6NjIHRoaeG6v3Qga+G6vyBjaG8gbeG7mXQgbcOgbiBow6xuaCBuaOG7jyBoxqFuLCDEkWnhu4F1IGtoaeG7g24gdGh1IHBow7NuZyBz4bq9IHh14bqldCBoaeG7h24gYsOqbiBj4bqhbmggxJHhu5NuZyBo4buTLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLEkGFuZyBsxrB1IOG6o25oIGNo4bulcCBtw6BuIGjDrG5oLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4ixJBhbmcgbMawdSDhuqNuaCBjaOG7pXAgbcOgbiBow6xuaC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i4bqibmggY2jhu6VwIG3DoG4gaMOsbmggxJFhbmcgxJHGsOG7o2MgbMawdS4iPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4iVHJhbmcgY2jhu6ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJUcsOsbmggxJHGoW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiLhu6huZyBk4bulbmcgZ+G6p24gxJHDonkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJUw6xtIGtp4bq/bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJNw6F5IOG6o25oIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJOw7p0IGNodXnhu4NuIHBoxrDGoW5nIHRo4bupYyBuaOG6rXAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+Ik7DunQgdGh1IHBow7NuZyBraOG6oyBuxINuZyB0xrDGoW5nIHRow61jaC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IlRodSBwaMOzbmcgbcOgbiBow6xuaCBs4bubbiBoxqFuIGhv4bq3YyBuaOG7jyBoxqFuLiI8L3N0cmluZz4KQEAgLTE1Myw2ICsxNTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+IlBpbiA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IkNo4bq/IMSR4buZIHRyw6puIG3DoXkgYmF5IDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkJsdWV0b290aCA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+Ilbhu4sgdHLDrSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkLDoW8gdGjhu6ljIMSRxrDhu6NjIMSR4bq3dCBjaG8gPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyNTc4MzM4ODE2OTg2NDQ2ODciPiLEkMOjIHThuq90IGThu68gbGnhu4d1IDJHLTNHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4ixJDDoyB04bqvdCBk4buvIGxp4buHdSA0RyI8L3N0cmluZz4KQEAgLTE2NCwxMiArMTY1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiLEkMOjIGvhur90IG7hu5FpIFdpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiLEkGFuZyB0w6xtIGtp4bq/bSBHUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iVuG7iyB0csOtIMSR4bq3dCBi4bufaSBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJZw6p1IGPhuqd1IHbhu4EgdGjDtG5nIHRpbiB24buLIHRyw60gxJFhbmcgaG/huqF0IMSR4buZbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJYw7NhIHThuqV0IGPhuqMgdGjDtG5nIGLDoW8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IlRow7RuZyB0aW4gduG7gSDhu6luZyBk4bulbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+Ik3DoG4gaMOsbmggc+G6vSB4b2F5IHThu7EgxJHhu5luZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+Ik3DoG4gaMOsbmggaGnhu4duIGLhu4sga2jDs2EgdGhlbyBoxrDhu5tuZyBuZ2FuZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4iTcOgbiBow6xuaCBoaeG7h24gYuG7iyBraMOzYSB0aGVvIGjGsOG7m25nIGThu41jLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiJCZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJU4bunIHRyxrBuZyBiw6B5IGLDoW5oIG5n4buNdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJDaOG6vyDEkeG7mSBuZ+G7pyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IkV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJDaOG6vyDEkeG7mSB0csOqbiBtw6F5IGJheSI8L3N0cmluZz4KQEAgLTE5NCwxMiArMTk2LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iQ2jGsGEgxJHGsOG7o2Mga+G6v3QgbuG7kWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iS2jDtG5nIGPDsyBt4bqhbmcgbsOgbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IlThuq90IFdpLUZpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X2xhYmVsIiBtc2dpZD0iNjg5MzU5Mjk2NDQ2MzYyNDMzMyI+Ikhp4buDbiB0aOG7iyBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+Ikhp4buDbiB0aOG7iyBraMO0bmcgZMOieSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiJUcnV54buBbiBtw6BuIGjDrG5oIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4ixJDhu5kgc8OhbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4iVOG7sCDEkOG7mE5HIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IlRow7RuZyBiw6FvIHh14bqldCBoaeG7h24gdOG6oWkgxJHDonkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiJUcnV5IGPhuq1wIHbDoG8gY2jDum5nIGLhuqV0IGvhu7MgbMO6YyBuw6BvIGLhurFuZyBjw6FjaCB2deG7kXQgeHXhu5FuZy5cblZ14buRdCBs4bqhaSB4deG7kW5nIMSR4buDIGhp4buDbiB0aOG7iyBjw6FjIMSRaeG7gXUga2hp4buDbiBo4buHIHRo4buRbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4iVnXhu5F0IGPhuqFuaCBtw6BuIGjDrG5oIMSR4buDIGhp4buDbiB0aOG7iyB0aGFuaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4iVnXhu5F0IHThu6sgY+G6oW5oIG3DoG4gaMOsbmggxJHhu4MgaGnhu4NuIHRo4buLIHRoYW5oIGjhu4cgdGjhu5FuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2ludmVyc2lvbl9sYWJlbCIgbXNnaWQ9IjE2NjYzNTg3ODQyODMwMjA3NjIiPiJDaOG6vyDEkeG7mSDEkeG6o28gbmfGsOG7o2MgbcOgdSBz4bqvYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IkNo4bq/IMSR4buZIHTGsMahbmcgcGjhuqNuIHTEg25nIGPGsOG7nW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJDaOG6vyDEkeG7mSBoaeG7h3UgY2jhu4luaCBtw6B1IHPhuq9jIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiJN4bqhbmcgY8OzIHRo4buDXG7Ekcaw4bujYyBnacOhbSBzw6F0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJUw6xtIGtp4bq/bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJUcsaw4bujdCBsw6puIMSR4buDIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJUcsaw4bujdCBzYW5nIHRyw6FpIMSR4buDIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKaW5kZXggMGE2MmVlMy4uNmVhOGI0MiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKQEAgLTYxLDggKzYxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i5LiA5b6L5YWB6K645L2/55So6L+Z5Y+w6K6h566X5py66L+b6KGM6LCD6K+VIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i57yp5pS+5Lul5aGr5ruh5bGP5bmVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IuaLieS8uOS7peWhq+a7oeWxj+W5lSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfaGVhZGVyIiBtc2dpZD0iNzk2OTQ5Mzk4OTM5NzUyOTkxMCI+IuWFvOWuueaAp+e8qeaUviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX2hlbHBfYm9keSIgbXNnaWQ9IjQ5NDY3MjY3NzYzNTkyNzAwNDAiPiLlpoLmnpzlupTnlKjmmK/pkojlr7novoPlsI/lsY/luZXorr7orqHnmoTvvIzliJnml7bpkp/ml4HkvJrmmL7npLrnvKnmlL7mjqfku7bjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aWNrZXIiIG1zZ2lkPSI3NDAzNjUyODk0MDU2NjkzNTE1Ij4i5q2j5Zyo5L+d5a2Y5bGP5bmV5oiq5Zu+Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4i5q2j5Zyo5L+d5a2Y5bGP5bmV5oiq5Zu+Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGV4dCIgbXNnaWQ9IjI0MTk3MTg0NDM0MTE3Mzg4MTgiPiLmraPlnKjkv53lrZjlsY/luZXmiKrlm77jgIIiPC9zdHJpbmc+CkBAIC03OCw2ICs3Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2hvbWUiIG1zZ2lkPSI4MjE3MjE2MDc0ODk1Mzc3NjQxIj4i5Li75bGP5bmVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4i6I+c5Y2VIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnQiIG1zZ2lkPSI4NTcxMzUwNTk4OTg3OTUyODgzIj4i5pyA6L+R6L+Q6KGM55qE5bqU55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZWFyY2hfbGlnaHQiIG1zZ2lkPSIxMTAzODY3NTk2MzMwMjcxODQ4Ij4i5pCc57SiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYW1lcmFfYnV0dG9uIiBtc2dpZD0iODA2NDY3MTU4MjgyMDM1ODE1MiI+IuebuOacuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4i6L6T5YWl5rOV5YiH5o2i5oyJ6ZKu44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+IuWFvOWuueaAp+e8qeaUvuaMiemSruOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4i5bCG5bCP5bGP5bmV55qE5Zu+54mH5pS+5aSn5Zyo6L6D5aSn5bGP5bmV5LiK5pi+56S644CCIjwvc3RyaW5nPgpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4i5bey5Yig6ZmkPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25fZGlzbWlzc2VkIiBtc2dpZD0iODU0MjExMzg3MTg2MzA2OTI3Ij4i5bey5YWz6Zet6YCa55+l44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiLpgJrnn6XmoI/jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfcXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSI2MTg2Mzc4NDExNTgyNDM3MDQ2Ij4i5b+r6YCf6K6+572u44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+IuW/q+aNt+iuvue9ruOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiLmnIDov5Hkvb/nlKjnmoTlupTnlKjjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3VzZXIiIG1zZ2lkPSIxMTA0ODQ2Njk5ODY5NDc2ODU1Ij4i55So5oi377yaPHhsaWZmOmcgaWQ9IlVTRVIiPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaSIgbXNnaWQ9IjYwOTk3ODEwMzE2Njk3Mjg3MDkiPiI8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPu+8jDx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KQEAgLTE1NSwyMyArMTU1LDI1IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4i55S15rGg55S16YeP77yaPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDE5Njg3NjcyMjA5MDIyNDc1MyI+IumjnuihjOaooeW8j++8mjx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGgiIG1zZ2lkPSI1NzQ5MDU0OTcxMzQxODgyMzQwIj4i6JOd54mZ77yaPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uIiBtc2dpZD0iNDU3NzI4MjMyOTg2NjgxMzEwMCI+IuS9jee9ruS/oeaBr+acjeWKoTx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiLpl7npkp/lt7Lorr7nva7kuLrvvJo8eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjU3ODMzODgxNjk4NjQ0Njg3Ij4iMkctM0cg5pWw5o2u572R57uc5bey5YGc55SoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSI0Nzg5MTQzMzYzNDkyNjgyNjI5Ij4iNEcg5pWw5o2u572R57uc5bey5YGc55SoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+Iuenu+WKqOaVsOaNruW3suWBnOeUqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+IuaVsOaNruW3suWBnOeUqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX21vYmlsZV90aXRsZSIgbXNnaWQ9IjEwNDYwNDcyNDg4NDQ4MjEyMDIiPiLnp7vliqjmlbDmja7nvZHnu5zlt7LlgZznlKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjIwODY4MTUzMDQ4NTg5NjQ5NTQiPiLmlbDmja7nvZHnu5zlt7LlgZznlKgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZyIgbXNnaWQ9IjM4NTMxMTcyNjkwNTE4MDYyODAiPiLmgqjlt7Lovr7liLDmjIflrprnmoTmlbDmja7mtYHph4/kuIrpmZDjgIJcblxu5aaC5p6c5oKo6YeN5paw5ZCv55So5pWw5o2u77yM6L+Q6JCl5ZWG5Y+v6IO95Lya5pS25Y+W55u45bqU55qE6LS555So44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfZW5hYmxlIiBtc2dpZD0iNzcyOTc3MjAzOTIwODY2NDYwNiI+IumHjeaWsOWQr+eUqOaVsOaNrui/nuaOpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjE5NDAyMzE1MjEyNzQxNDc3NzEiPiLmnKrov57mjqXkupLogZTnvZEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NpZ25hbF9tZXRlcl93aWZpX25vc3NpZCIgbXNnaWQ9IjY1NTc0ODY0NTI3NzQ1OTc4MjAiPiJXTEFOIOW3sui/nuaOpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i5q2j5Zyo5pCc57SiIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiLlt7LpgJrov4cgR1BTIOehruWumuS9jee9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbG9jYXRpb25fYWN0aXZlIiBtc2dpZD0iMjQyNzI5MDE0NjEzODE2OTAxNCI+IuW6lOeUqOWPkeWHuuS6huacieaViOS9jee9ruS/oeaBr+ivt+axgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+Iua4hemZpOaJgOaciemAmuefpeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9IjExNjM1NDc3MjkwMTUzOTAyNTAiPiLlupTnlKjkv6Hmga8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IuWxj+W5leS8muiHquWKqOaXi+i9rOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4i5bGP5bmV6ZSB5a6a5Li65qiq5ZCR5qih5byP44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IuWxj+W5lemUgeWumuS4uue6teWQkeaooeW8j+OAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImplbGx5X2JlYW5fZHJlYW1fbmFtZSIgbXNnaWQ9IjU5OTIwMjY1NDM2MzY4MTY3OTIiPiLmnpzlhrvosYblpKfkubHoiJ4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4i55Sc5ZOB55uSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IuS6kuWKqOWxj+S/nSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IuS7peWkque9kSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i6aOe6KGM5qih5byPIjwvc3RyaW5nPgpAQCAtMTc5LDE1ICsxODEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JhdHRlcnlfY2hhcmdlZF9sYWJlbCIgbXNnaWQ9Ijg4NjU0MTMwNzk0MTQyNDYwODEiPiLlhYXnlLXlrozmiJAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbGFiZWwiIG1zZ2lkPSI2MzA0MTkwMjg1MTcwNzIxNDAxIj4i6JOd54mZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX211bHRpcGxlX2RldmljZXNfbGFiZWwiIG1zZ2lkPSIzOTEyMjQ1NTY1NjEzNjg0NzM1Ij4i6JOd54mZ77yIPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOWPsOiuvuWkh++8iSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9vZmZfbGFiZWwiIG1zZ2lkPSI4MTU5NjUyMTQ2MTQ5MjE5OTM3Ij4i6JOd54mZ5bey5YWz6ZetIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29mZl9sYWJlbCIgbXNnaWQ9IjgxNTk2NTIxNDYxNDkyMTk5MzciPiLok53niZnvvJrlhbPpl60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IuS6ruW6piI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iMzM2MDU0OTMwMzYyNTgwNTg0Ij4i6Ieq5Yqo5peL6L2sIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iODA1ODY0NjQ0NzI0MjU2NTQ4NiI+IuWxj+W5leaWueWQkeW3sumUgeWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX2xvY2tlZF9sYWJlbCIgbXNnaWQ9IjgwNTg2NDY0NDcyNDI1NjU0ODYiPiLlsY/luZXmlrnlkJHvvJrplIHlrpoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4i6L6T5YWl5rOVIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsICg1MDExMzI3MDQ4NzQ4NzYyMjU3KSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCAoNzQ2NDU0NDA4NjUwNzMzMTQ1OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IuS9jee9ruS/oeaBryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiLkvY3nva7kv6Hmga/mnI3liqHlt7LlhbPpl60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i5aqS5L2T6K6+5aSHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLlj6rog73mi6jmiZPntKfmgKXlkbzmlZHnlLXor50iPC9zdHJpbmc+CkBAIC0xOTgsMTIgKzE5OCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNzE3MTkwNDg0NTM0NTU3MzQzMSI+Iuacqui/nuaOpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLml6DnvZHnu5wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXTEFOIOW3suWFs+mXrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXTEFOIOaYvuekuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMjM1NTI5ODc0MDc2NTczNjkxOCI+IuaXoOe6v+aYvuekuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JlbW90ZV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIzNzIxMDc2OTkyNzQzOTEyOTAiPiLmipXlsITlsY/luZUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiLkuq7luqYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MDY0OTgyNzQzNzg0MDcxMjE4Ij4i6Ieq5YqoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+IumAmuefpeS8muaYvuekuuWcqOi/memHjCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90ZXh0IiBtc2dpZD0iNzg3NDYwNzE1NTA1MjA3NjMyMyI+IuWQkeS4i+a7keWKqOWPr+maj+aXtuafpeeci+mAmuefpeOAglxu5YaN5qyh5ZCR5LiL5ruR5Yqo5Y+v5L2/55So57O757uf5o6n5Yi25Yqf6IO944CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2UiIG1zZ2lkPSI5MDUwODY5NTQ4OTUxMDQ0MzcxIj4i5LuO6L6557yY5ZCR6YeM5ruR5Y+v5pi+56S657O757uf5qCPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaGlkZXliYXJfY29uZmlybWF0aW9uX21lc3NhZ2VfbG9uZyIgbXNnaWQ9IjcxMTc2OTI3OTUxNjM2MjA2MjYiPiLku47lsY/luZXovrnnvJjlkJHph4zmu5HliqjljbPlj6/mmL7npLrns7vnu5/moI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i6aKc6Imy5Y+N6L2s5qih5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4i5aKe5by65a+55q+U5bqm5qih5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLpopzoibLmoKHmraPmqKHlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Iue9kee7nOWPr+iDveS8mlxu5Y+X5Yiw55uR5o6nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLmkJzntKIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i5ZCR5LiK5ruR5Yqo5LulPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i5ZCR5bem5ruR5Yqo5LulPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJISy1sYW5kL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1ySEstbGFuZC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDU1ZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1ySEstbGFuZC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9yb3RhdGlvbl9sb2NrZWQiIG1zZ2lkPSI3NjA5NjczMDExNDMxNTU2MDkyIj4i5bGP5bmV54++5bey6Y6W5a6a54K65qmr5ZCR5qih5byPIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NjIwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDIxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNzE2NDkzNzM0NDg1MDAwNDQ2NiI+Iuezu+e1seeUqOaItuS7i+mdoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiLmuIXpmaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9yZW1vdmVfaXRlbV90aXRsZSIgbXNnaWQ9IjYwMjYzOTU4NjgxMjk4NTI5NjgiPiLlvp7muIXllq7kuK3np7vpmaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3JlY2VudF9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI3NzkzNjI0ODY0NTI4ODE4NTY5Ij4i5oeJ55So56iL5byP6LOH6KiKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19yZWNlbnRfYXBwcyIgbXNnaWQ9IjY1NzYzOTI5NTEwNTM5OTQ2NDAiPiLmspLmnInmnIDov5HnmoTmh4nnlKjnqIvlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IumXnOmWieacgOi/keS9v+eUqOeahOaHieeUqOeoi+W8jyI8L3N0cmluZz4KKyAgPHBsdXJhbHMgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X3JlY2VudF9hcHBzIj4KKyAgICA8aXRlbSBxdWFudGl0eT0ib25lIiBtc2dpZD0iNTg1NDE3NjA4Mzg2NTg0NTU0MSI+IjEg5YCL5pyA6L+R5L2/55So55qE5oeJ55So56iL5byPIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQg5YCL5pyA6L+R5L2/55So55qE5oeJ55So56iL5byPIjwvaXRlbT4KKyAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+IueEoemAmuefpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4i5oyB57qM6YCy6KGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+IumAmuefpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iMjc4MzEwNDgwNzU1MTIxMTYzOSI+IumAo+aOpeWFhembu+WZqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3N1YnRpdGxlIiBtc2dpZD0iMTc1MjA0MDA2MjA4NzgyOTE5NiI+Iumbu+axoOWNs+Wwh+eUqOeboeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0IiBtc2dpZD0iMTA3NzI0NDk0OTMxODI2MTc2MSI+IuWJqemkmCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZCUlPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiLkuI3mlK/mj7QgVVNCIOWFhembu+OAglxu5YOF6IO95L2/55So6Zqo6ZmE55qE5YWF6Zu75Zmo44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfd2h5IiBtc2dpZD0iNzI3OTE2OTYwOTUxODM4NjM3MiI+Iumbu+axoOS9v+eUqOaDheazgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+IuioreWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfd2lmaV9idXR0b24iIG1zZ2lkPSIxNzMzOTI4MTUxNjk4MzExOTIzIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2FpcnBsYW5lIiBtc2dpZD0iNDg3OTg3OTY5ODUwMDk1NTMwMCI+Iumjm+ihjOaooeW8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfYXV0b19yb3RhdGlvbiIgbXNnaWQ9IjM3OTA0ODI1NDEzNTc3OTg0MjEiPiLoh6rli5Xml4vovYnonqLluZUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX211dGVfbGFiZWwiIG1zZ2lkPSI1NTQ2ODI1NDk5MTc0MjkzOTYiPiLpl5zplokiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUxMTQ1MzYxNDk2MjMyNDY3NCI+IuiHquWLlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfbm90aWZpY2F0aW9ucyIgbXNnaWQ9IjM5NzE0NjE3NjI4MDkwNTEzNyI+IumAmuefpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF90ZXRoZXJlZCIgbXNnaWQ9IjcwOTQxMDE2MTIxNjExMzMyNjciPiLlt7LntpPnlLHol43niZnpgLLooYzntrLntaHlhbHkuqsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2lucHV0X21ldGhvZF9zZXR0aW5nc19jb25maWd1cmVfaW5wdXRfbWV0aG9kcyIgbXNnaWQ9IjM1MDQyOTI0NzE1MTIzMTc4MjciPiLoqK3lrprovLjlhaXmlrnlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiLlr6bpq5TpjbXnm6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4i5YWB6Kix44CMPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPuOAjeaHieeUqOeoi+W8j+WtmOWPliBVU0Ig6KOd572u5ZeO77yfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiLlhYHoqLHjgIw8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+44CN5oeJ55So56iL5byP5a2Y5Y+WIFVTQiDphY3ku7bll47vvJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IumAo+aOpemAmeWAiyBVU0Ig6KOd572u5pmC5ZWf55SoIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4g5ZeO77yfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9jb25maXJtX3Byb21wdCIgbXNnaWQ9IjM4MDg5ODQ5MzE4MzAyMjk4ODgiPiLpgKPmjqXpgJnlgIsgVVNCIOmFjeS7tuaZguWVn+eUqCA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IOWXju+8nyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IuW3suWuieijneeahOaHieeUqOeoi+W8j+Wdh+eEoeazleWtmOWPlumAmeWAiyBVU0Ig6YWN5Lu277yM5aaC6KaB6YCy5LiA5q2l556t6Kej6YCZ5YCL6YWN5Lu277yM6KuL54CP6Ka9IDx4bGlmZjpnIGlkPSJVUkwiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfdXNiX2FjY2Vzc29yeSIgbXNnaWQ9IjQ5NjYyNjUyNjM0NjUxODEzNzIiPiJVU0Ig6YWN5Lu2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiLop4DnnIsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbHdheXNfdXNlX2RldmljZSIgbXNnaWQ9IjE0NTAyODc0MzcwMTczMTU5MDYiPiLpoJDoqK3nlKjmlrzpgJnlgIsgVVNCIOijnee9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfYWNjZXNzb3J5IiBtc2dpZD0iMTIxMDk1NDU3Njk3OTYyMTU5NiI+IumgkOioreeUqOaWvOmAmeWAiyBVU0Ig6YWN5Lu2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ190aXRsZSIgbXNnaWQ9IjQ1MTM5MTgzOTMzODcxNDE5NDkiPiLlhYHoqLEgVVNCIOmZpOmMr+WXju+8nyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfbWVzc2FnZSIgbXNnaWQ9IjIyMjAxNDM4NTU5MTIzNzY0OTYiPiLpgJnpg6jpm7vohabnmoQgUlNBIOWvhumRsOaMh+e0i+WmguS4i++8mlxuPHhsaWZmOmcgaWQ9IkZJTkdFUlBSSU5UIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfYWx3YXlzIiBtc2dpZD0iMzAzMzM1NDk2NzA1ODYzMDcwIj4i5LiA5b6L5YWB6Kix6YCP6YGO6YCZ6YOo6Zu76IWm6YCy6KGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb24iIG1zZ2lkPSI2NjIzODM5MjQ0ODQwNjM4MjEzIj4i5pS+5aSn54K65YWo6J6i5bmVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tcGF0X21vZGVfb2ZmIiBtc2dpZD0iNDQzNDQ2NzU3MjQ2MTMyNzg5OCI+IuaUvuWkp+eCuuWFqOieouW5lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLmraPlnKjlhLLlrZjlsY/luZXmk7flj5bnlavpnaIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190aXRsZSIgbXNnaWQ9IjgyNDIyODIxNDQ1MzU1NTU2OTciPiLmraPlnKjlhLLlrZjlsY/luZXmk7flj5bnlavpnaIuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+Iuato+WcqOWEsuWtmOWxj+W5leaTt+WPlueVq+mdouOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2ZWRfdGl0bGUiIG1zZ2lkPSI2NDYxODY1OTYwOTYxNDE0OTYxIj4i5bey5pO35Y+W5bGP5bmV55Wr6Z2i44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZlZF90ZXh0IiBtc2dpZD0iMTE1MjgzOTY0NzY3NzU1ODgxNSI+Iui8leinuOWNs+WPr+afpeeci+Wxj+W5leaTt+WPlueVq+mdouOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RpdGxlIiBtc2dpZD0iNzA1NzgxMTE2NzQ2OTIyNzcxIj4i54Sh5rOV5pO35Y+W5bGP5bmV55Wr6Z2i44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9mYWlsZWRfdGV4dCIgbXNnaWQ9IjgxMzQwMTEyNjk1NzI0MTU0MDIiPiLnhKHms5XlhLLlrZjlsY/luZXmk7flj5bnlavpnaLvvIzlhLLlrZjoo53nva7lj6/og73mraPlnKjkvb/nlKjjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiJVU0Ig5qqU5qGI5YKz6Ly46YG46aCFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX210cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI0MzMzNTA0NDEzNTYzMDIzNjI2Ij4i5o6b5o6l54K65aqS6auU5pKt5pS+5ZmoIChNVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX3B0cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI3NTE3MTI3NTQwMzAxNjI1NzUxIj4i5o6b5o6l54K655u45qmfIChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLlronoo50gTWFjIOWwiOeUqOeahOOAjEFuZHJvaWQg5qqU5qGI5YKz6Ly444CN5oeJ55So56iL5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYWNrIiBtc2dpZD0iNTY3MDExNTM4OTk0NDI5MTIwIj4i6L+U5ZueIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IummlumggSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+IumBuOWWriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IuacgOi/keS9v+eUqOeahOaHieeUqOeoi+W8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IuaQnOWwiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLnm7jmqZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IuWIh+aPm+i8uOWFpeazleaMiemIleOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLnm7jlrrnmgKfnuK7mlL7mjInpiJXjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IuWwh+i8g+Wwj+ieouW5leeahOeVq+mdouaUvuWkp+WcqOi8g+Wkp+ieouW5leS4iumhr+ekuuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjI3MDcwMjc2MzMyNDI5ODMzNzAiPiLol43niZnpgKPnt5rlt7Llu7rnq4vjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4i6JeN54mZ6YCj57ea5bey5Lit5pa344CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19iYXR0ZXJ5IiBtc2dpZD0iMzU4MzQzMDIyMzUyODIwOTQ2Ij4i5pyq5a6J6KOd6Zu75rGg44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X29uZV9iYXIiIG1zZ2lkPSI3Nzc0ODg3NzIxODkxMDU3NTIzIj4i6Zu75rGg6Zu76YeP54K65LiA5qC844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X3R3b19iYXJzIiBtc2dpZD0iODUwMDY1MDQzODczNTAwOTk3MyI+Iumbu+axoOmbu+mHj+eCuuWFqeagvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90aHJlZV9iYXJzIiBtc2dpZD0iMjMwMjk4MzMzMDg2NTA0MDQ0NiI+Iumbu+axoOmbu+mHj+eCuuS4ieagvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV9mdWxsIiBtc2dpZD0iODkwOTEyMjQwMTcyMDE1ODU4MiI+Iumbu+axoOW3sua7v+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4i5rKS5pyJ6Zu76Kmx6KiK6Jmf44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9vbmVfYmFyIiBtc2dpZD0iNjg3Njk5Mjc4MTMyNjY0MTE1Ij4i6Zu76Kmx6KiK6Jmf5by35bqm54K65LiA5qC844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiLpm7voqbHoqIromZ/lvLfluqbngrrlhanmoLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3RocmVlX2JhcnMiIG1zZ2lkPSI4NTIxOTA0ODQzOTE5OTcxODg1Ij4i6Zu76Kmx6KiK6Jmf5by35bqm54K65LiJ5qC844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY0NzE4MzQ4Njg1ODA3NTc4OTgiPiLpm7voqbHoqIromZ/mu7/moLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX2RhdGEiIG1zZ2lkPSI0NzkxOTY2Mjk1MDk2ODY3NTU1Ij4i5rKS5pyJ5pW45pOa57ay57Wh44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4i5pW45pOa57ay57Wh6KiK6Jmf5by35bqm54K65LiA5qC844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+IuaVuOaTmue2sue1oeioiuiZn+W8t+W6pueCuuWFqeagvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IuaVuOaTmue2sue1oeioiuiZn+W8t+W6pueCuuS4ieagvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiLmlbjmk5rntrLntaHoqIromZ/mu7/moLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb2ZmIiBtc2dpZD0iMzE3NzM4MDI5NjY5NzkzMzYyNyI+IldpRmkg5bey6Zec6ZaJ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aWZpIiBtc2dpZD0iMTQyNTQ3NjU1MTgyNzkyNDQ3NCI+IldpRmkg6YCj57ea5bey5Lit5pa344CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29uZV9iYXIiIG1zZ2lkPSI3NzM1ODkzMTc4MDEwNzI0Mzc3Ij4iV2lGaSDoqIromZ/lvLfluqbngrrkuIDmoLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdHdvX2JhcnMiIG1zZ2lkPSI0OTk0Mjc0MjUwNDk3MjYyNDM0Ij4iV2lGaSDoqIromZ/lvLfluqbngrrlhanmoLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfdGhyZWVfYmFycyIgbXNnaWQ9IjM0OTU3NTUwNDQyNzY1ODgzODQiPiJXaUZpIOioiuiZn+W8t+W6pueCuuS4ieagvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2lmaV9zaWduYWxfZnVsbCIgbXNnaWQ9IjY4NTM1NjEzMDM1ODY0ODAzNzYiPiJXaUZpIOioiuiZn+W3sua7v+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2ltYXgiIG1zZ2lkPSI0MzI5MTgwMTI5NzI3NjMwMzY4Ij4i5rKS5pyJIFdpTUFYIOioiuiZn+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfb25lX2JhciIgbXNnaWQ9IjQxNzA5OTQyOTkwMTE4NjM2NDgiPiJXaU1BWCDoqIromZ/lvLfluqbkuIDmoLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IldpTUFYIOioiuiZn+W8t+W6puWFqeagvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd2ltYXhfdGhyZWVfYmFycyIgbXNnaWQ9IjYxMTY1NTE2MzY3NTIxMDM5MjciPiJXaU1BWCDoqIromZ/lvLfluqbkuInmoLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3NpZ25hbF9mdWxsIiBtc2dpZD0iMjc2ODA4OTk4Njc5NTU3OTU1OCI+IldpTUFYIOioiuiZn+a7v+agvOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fc2lnbmFsIiBtc2dpZD0iNzA2NDY0NTMyMDc4MjU4NTE2NyI+IuaykuacieioiuiZn+OAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjYzOTUzMjYyNzYyMTM0MDI4ODMiPiLmnKrpgKPnt5rjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3plcm9fYmFycyIgbXNnaWQ9IjM4MDYwNjAyMjQ0NjcwMjc4ODciPiLoqIromZ/lvLfluqbngrrpm7bmoLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X29uZV9iYXIiIG1zZ2lkPSIxNjg1NzMwMTEzMTkyMDgxODk1Ij4i6KiK6Jmf5by35bqm54K65LiA5qC844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90d29fYmFycyIgbXNnaWQ9IjY0MzczNjM2NDgzODUyMDY2NzkiPiLoqIromZ/lvLfluqbngrrlhanmoLzjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3RocmVlX2JhcnMiIG1zZ2lkPSIyNjQ4MjQxNDE1MTE5Mzk2NjQ4Ij4i6KiK6Jmf5by35bqm54K65LiJ5qC844CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zaWduYWxfZnVsbCIgbXNnaWQ9IjkxMjI5MjI4ODY1MTk2NzY4MzkiPiLoqIromZ/lt7Lmu7/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfb24iIG1zZ2lkPSIyMzg1MjU0NjkzNjI0MzQ1MjY1Ij4i6ZaL5ZWf44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX29mZiIgbXNnaWQ9IjY0NzU1MDgxNTc3ODY4NTMxNTciPiLpl5zplonjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGVkIiBtc2dpZD0iODM2NjI1NjY5MzcxOTQ5OTY2NSI+IuW3sumAo+e3muOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2dwcnMiIG1zZ2lkPSIxNjA2NDc3MjI0NDg2NzQ3NzUxIj4iR1BSUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzF4IiBtc2dpZD0iOTk0MTMzNDY4MTIwMjQ0MDE4Ij4iMSBYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25faHNwYSIgbXNnaWQ9IjIwMzIzMjg4NTU0NjI2NDUxOTgiPiJIU1BBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fM2ciIG1zZ2lkPSI4NjI4NTYyMzA1MDAzNTY4MjYwIj4iM0ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8zLjVnIiBtc2dpZD0iODY2NDg0NTYwOTk4MTY5MjAwMSI+IjMuNUciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl80ZyIgbXNnaWQ9Ijc3NDEwMDA3NTA2MzAwODk2MTIiPiI0RyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2x0ZSIgbXNnaWQ9IjU0MTM0Njg4MDg2Mzc1NDA2NTgiPiJMVEUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9jZG1hIiBtc2dpZD0iNjEzMjY0ODE5Mzk3ODgyMzAyMyI+IkNETUEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9yb2FtaW5nIiBtc2dpZD0iNTk3NzM2MjMzMzQ2NjU1NjA5NCI+Iua8q+mBiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2VkZ2UiIG1zZ2lkPSI0NDc3NDU3MDUxNjMxOTc5Mjc4Ij4iRWRnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX3dpZmkiIG1zZ2lkPSIyMzI0NDk2NzU2NTkwNjQ1MjIxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbSIgbXNnaWQ9IjgyNzQwMTcxMTg0NzI0NTUxNTUiPiLnhKEgU0lNIOWNoeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmx1ZXRvb3RoX3RldGhlciIgbXNnaWQ9IjQxMDI3ODQ0OTgxNDAyNzE5NjkiPiLol43niZnmlbjmk5rpgKPnt5rjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiLpo5voiKrmqKHlvI/jgIIiPC9zdHJpbmc+CisgICAgPCEtLSBTdHJpbmcuZm9ybWF0IGZhaWxlZCBmb3IgdHJhbnNsYXRpb24gLS0+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsICg3NDUxNDc0MTg3MTEzMzcxOTY1KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiLns7vntbHoqK3lrpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vdGlmaWNhdGlvbnNfYnV0dG9uIiBtc2dpZD0iNDQ5ODAwMDM2OTc3OTQyMTg5MiI+IumAmuefpeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVtb3ZlX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjM2MDMwOTk1MTQ5MDIxODIzNTAiPiLmuIXpmaTpgJrnn6XjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19lbmFibGVkIiBtc2dpZD0iMzUxMTQ2OTQ5OTI0MDEyMzAxOSI+IkdQUyDlt7LllZ/nlKjjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4i5q2j5Zyo5Y+W5b6XIEdQUyDoqIromZ/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3R0eV9lbmFibGVkIiBtc2dpZD0iNDYxMzIwMDM2NTM3OTQyNjU2MSI+IlRlbGVUeXBld3JpdGVyIChUVFkpIOW3suWVn+eUqOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3ZpYnJhdGUiIG1zZ2lkPSI2NjY1ODUzNjMzNjQxNTUwNTUiPiLpiLTogbLpnIfli5XjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i6Yi06IGy6Z2c6Z+z44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+IuOAjDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuOAjeW3sumXnOmWieOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+IumAmuefpeW3sumXnOmWieOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19ub3RpZmljYXRpb25fc2hhZGUiIG1zZ2lkPSI0NjkwMjc0ODQ0NDQ3NTA0MjA4Ij4i6YCa55+l5qyE44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+IuW/q+mAn+ioreWumuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19yZWNlbnRfYXBwcyIgbXNnaWQ9IjkwMTQwMzI5MTY0MTA1OTAwMjciPiLmnIDov5Hkvb/nlKjnmoTmh4nnlKjnqIvlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3VzZXIiIG1zZ2lkPSIxMTA0ODQ2Njk5ODY5NDc2ODU1Ij4i55So5oi277yaPHhsaWZmOmcgaWQ9IlVTRVIiPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaSIgbXNnaWQ9IjYwOTk3ODEwMzE2Njk3Mjg3MDkiPiI8eGxpZmY6ZyBpZD0iU0lHTkFMIj4lMSRzPC94bGlmZjpnPuOAgTx4bGlmZjpnIGlkPSJORVRXT1JLIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbW9iaWxlIiBtc2dpZD0iNDg3NjgwNjU2NDA4NjI0MTM0MSI+Iua1geWLleaVuOaTmumAo+e3mu+8mjx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+44CBPHhsaWZmOmcgaWQ9IlRZUEUiPiUyJHM8L3hsaWZmOmc+44CBPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+Iumbu+axoOmbu+mHj++8mjx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLpo5voiKrmqKHlvI/vvJo8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IuiXjeeJme+8mjx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLlrprkvY3mnI3li5k8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4i6ayn6ZCY5bey6Kit5a6a54K677yaPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IuW3suWBnOeUqCAyRy0zRyDmlbjmk5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiLlt7LlgZznlKggNEcg5pW45pOaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfbW9iaWxlX3RpdGxlIiBtc2dpZD0iMTA0NjA0NzI0ODg0NDgyMTIwMiI+IuW3suWBnOeUqOa1geWLleaVuOaTmiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMjA4NjgxNTMwNDg1ODk2NDk1NCI+IuaVuOaTmuWBnOeUqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iMzg1MzExNzI2OTA1MTgwNjI4MCI+IuaCqOW3suWIsOmBlOaMh+WumueahOaVuOaTmueUqOmHj+S4iumZkOOAglxuXG7lpoLmnpzmgqjph43mlrDllZ/nlKjmlbjmk5rlgrPovLjvvIzmtYHli5XntrLntaHkvpvmh4nllYblj6/og73mnIPlkJHmgqjmlLbosrvjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19lbmFibGUiIG1zZ2lkPSI3NzI5NzcyMDM5MjA4NjY0NjA2Ij4i6YeN5paw5ZWf55So5pW45pOaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+IuaykuacieS6kuiBr+e2sumAo+e3miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIOW3sumAo+e3miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i5q2j5Zyo5pCc5bCLIEdQUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJHUFMg5bey5a6a5L2NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i5L2N572u6KaB5rGC5ZWf5YuV5LitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i5riF6Zmk5omA5pyJ6YCa55+l44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IuaHieeUqOeoi+W8j+izh+ioiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i5bGP5bmV5pyD6Ieq5YuV5peL6L2J44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLlsY/luZXlt7LpjpblrprngrrmqavlkJHmqKHlvI/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4i5bGP5bmV5bey6Y6W5a6a54K65Z6C55u05qih5byP44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IkRlc3NlcnQgQ2FzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJEYXlkcmVhbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV0aGVybmV0X2xhYmVsIiBtc2dpZD0iNzk2NzU2MzY3NjMyNDA4NzQ2NCI+IuS7peWkque2siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2FpcnBsYW5lX21vZGVfbGFiZWwiIG1zZ2lkPSI1NTEwNTIwNjMzNDQ4ODMxMzUwIj4i6aOb6KGM5qih5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmF0dGVyeV9jaGFyZ2luZ19sYWJlbCIgbXNnaWQ9IjQ5MDA3NDc3NDQ2NTMwOTIwOSI+IuWFhembu+S4rSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+PHhsaWZmOmcgaWQ9IlBFUkNFTlQiPiUlPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19iYXR0ZXJ5X2NoYXJnZWRfbGFiZWwiIG1zZ2lkPSI4ODY1NDEzMDc5NDE0MjQ2MDgxIj4i5YWF6Zu75a6M5oiQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsIiBtc2dpZD0iNjMwNDE5MDI4NTE3MDcyMTQwMSI+IuiXjeeJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9tdWx0aXBsZV9kZXZpY2VzX2xhYmVsIiBtc2dpZD0iMzkxMjI0NTU2NTYxMzY4NDczNSI+IuiXjeeJmSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOmDqOijnee9rikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmX2xhYmVsIiBtc2dpZD0iODE1OTY1MjE0NjE0OTIxOTkzNyI+IuiXjeeJmemXnOmWiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI2OTY4MzcyMjk3MDE4NzU1ODE1Ij4i5Lqu5bqmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwiIG1zZ2lkPSIzMzYwNTQ5MzAzNjI1ODA1ODQiPiLoh6rli5Xml4vovYkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI4MDU4NjQ2NDQ3MjQyNTY1NDg2Ij4i5bey6Y6W5a6a5bGP5bmV5peL6L2J5Yqf6IO9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW1lX2xhYmVsIiBtc2dpZD0iNzA3MzQ2MzA2NDM2OTQ2ODQyOSI+Iui8uOWFpeazlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2xhYmVsIiBtc2dpZD0iNTAxMTMyNzA0ODc0ODc2MjI1NyI+IuS9jee9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiLkvY3nva7pl5zplokiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i5aqS6auU6KOd572uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLlj6rlj6/mkqXmiZPnt4rmgKXpm7voqbEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiLoqK3lrpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+IuaZgumWkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbGFiZWwiIG1zZ2lkPSI1MjM4OTk1NjMyMTMwODk3ODQwIj4i5oiRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9sYWJlbCIgbXNnaWQ9IjkxMzUzNDQ3MDQ4OTk1NDYwNDEiPiJXaS1GaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiLmnKrpgKPnt5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4i5rKS5pyJ57ay57WhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9vZmZfbGFiZWwiIG1zZ2lkPSI3NTU4Nzc4MTAwODQzODg1ODY0Ij4iV2ktRmkg6Zec6ZaJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVtb3RlX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjM3MjEwNzY5OTI3NDM5MTI5MCI+IuaUvumAgeieouW5lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODU5OTY3NDA1NzY3MzYwNTM2OCI+IuS6ruW6piI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiLoh6rli5UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4i6Imy5b2p5Y+N6L2J5qih5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29udHJhc3RfbGFiZWwiIG1zZ2lkPSIzMzE5NTA3NTUxNjg5MTA4NjkyIj4i5aKe5by35bCN5q+U5qih5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiLoibLlvanmoKHmupbmqKHlvI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Iue2sue1oeWPr+iDveacg1xu5Y+X5Yiw55uj5o6nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiLmkJzlsIsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXAiIG1zZ2lkPSI3MTY5MDMyNDc4MjU5NDg1MTgwIj4i5ZCR5LiK5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX2xlZnQiIG1zZ2lkPSI3MjA3NDc4NzE5ODA1NTYyMTY1Ij4i5ZCR5bem5ruR5YuV5Y2z5Y+vPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCmluZGV4IDJjZmRiNTkuLmIxMGVjODIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IuS4gOW+i+WFgeiosemAj+mBjumAmeWPsOmbu+iFpumAsuihjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IuaUvuWkp+eCuuWFqOieouW5lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiLmlL7lpKfngrrlhajonqLluZUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiLnm7jlrrnmgKfnuK7mlL4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4i5Z+36KGM5bCI54K66LyD5bCP6J6i5bmV6Kit6KiI55qE5oeJ55So56iL5byP5pmC77yM57O757Wx5pyD5Zyo5pmC6ZCY5peB6aGv56S657iu5pS+5o6n5Yi26aCF44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+Iuato+WcqOWEsuWtmOieouW5leaTt+WPlueVq+mdouKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpdGxlIiBtc2dpZD0iODI0MjI4MjE0NDUzNTU1NTY5NyI+Iuato+WcqOWEsuWtmOieouW5leaTt+WPlueVq+mdouKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4i5q2j5Zyo5YSy5a2Y6J6i5bmV5pO35Y+W55Wr6Z2i44CCIjwvc3RyaW5nPgpAQCAtNzgsNiArNzYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IuS4u+ieouW5lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWVudSIgbXNnaWQ9IjMxNjgzOTMwMzMyNDY5NTk0OSI+IumBuOWWriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iODU3MTM1MDU5ODk4Nzk1Mjg4MyI+IuacgOi/keS9v+eUqOeahOaHieeUqOeoi+W8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2VhcmNoX2xpZ2h0IiBtc2dpZD0iMTEwMzg2NzU5NjMzMDI3MTg0OCI+IuaQnOWwiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiLnm7jmqZ8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2ltZV9zd2l0Y2hfYnV0dG9uIiBtc2dpZD0iNTAzMjkyNjEzNDc0MDQ1NjQyNCI+IuWIh+aPm+i8uOWFpeazleaMiemIleOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2J1dHRvbiIgbXNnaWQ9Ijg0NjExMTUzMTg3NDIzNTA2OTkiPiLnm7jlrrnmgKfnuK7mlL7mjInpiJXjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+IuWwh+i8g+Wwj+ieouW5leeahOeVq+mdouaUvuWkp+WcqOi8g+Wkp+ieouW5leS4iumhr+ekuuOAgiI8L3N0cmluZz4KQEAgLTE1NSw2ICsxNTUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19iYXR0ZXJ5IiBtc2dpZD0iMTQ4MDkzMTU4MzM4MTQwODk3MiI+Iumbu+axoOmbu+mHj++8mjx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiLpo5voiKrmqKHlvI/vvJo8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IuiXjeeJme+8mjx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbiIgbXNnaWQ9IjQ1NzcyODIzMjk4NjY4MTMxMDAiPiLlrprkvY3mnI3li5k8eGxpZmY6ZyBpZD0iU1RBVEUiPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWxhcm0iIG1zZ2lkPSIzOTU5OTA4OTcyODk3Mjk1NjYwIj4i6ayn6ZCY5bey6Kit5a6a54K677yaPHhsaWZmOmcgaWQ9IlRJTUUiPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+IuW3suWBnOeUqCAyRy0zRyDmlbjmk5oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiLlt7LlgZznlKggNEcg5pW45pOaIjwvc3RyaW5nPgpAQCAtMTY2LDEyICsxNjcsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIOW3sumAo+e3miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fc2VhcmNoaW5nX3RleHQiIG1zZ2lkPSI4NTc0MjQ3MDA1NjQyNzM2MDYwIj4i5q2j5Zyo5pCc5bCLIEdQUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdwc19ub3RpZmljYXRpb25fZm91bmRfdGV4dCIgbXNnaWQ9IjQ2MTkyNzQyNDQxNDY0NDY0NjQiPiJHUFMg5bey5a6a5L2NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9sb2NhdGlvbl9hY3RpdmUiIG1zZ2lkPSIyNDI3MjkwMTQ2MTM4MTY5MDE0Ij4i5pyJ5L2N572u6LOH6KiK6KaB5rGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4i5riF6Zmk5omA5pyJ6YCa55+l44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IuaHieeUqOeoi+W8j+izh+ioiiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4i6J6i5bmV5pyD6Ieq5YuV5peL6L2J44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZSIgbXNnaWQ9IjY3MzExOTczMzc2NjUzNjYyNzMiPiLonqLluZXlt7LpjpblrprngrrmqavlkJHmqKHlvI/jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fcG9ydHJhaXQiIG1zZ2lkPSI1ODA5MzY3NTIxNjQ0MDEyMTE1Ij4i6J6i5bmV5bey6Y6W5a6a54K65Z6C55u05qih5byP44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iamVsbHlfYmVhbl9kcmVhbV9uYW1lIiBtc2dpZD0iNTk5MjAyNjU0MzYzNjgxNjc5MiI+IkJlYW5GbGluZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IkRlc3NlcnQgQ2FzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiLkvJHnnKDmqKHlvI8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiLkuZnlpKrntrLot68iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19haXJwbGFuZV9tb2RlX2xhYmVsIiBtc2dpZD0iNTUxMDUyMDYzMzQ0ODgzMTM1MCI+Iumjm+iIquaooeW8jyI8L3N0cmluZz4KQEAgLTE5NiwxMiArMTk4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4i5pyq6YCj57eaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9ub19uZXR3b3JrIiBtc2dpZD0iMjIyMTk5MzA3NzIyMDg1NjM3NiI+Iuaykuaciee2sui3ryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfb2ZmX2xhYmVsIiBtc2dpZD0iNzU1ODc3ODEwMDg0Mzg4NTg2NCI+IumXnOmWiSBXaS1GaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfZGlzcGxheV9sYWJlbCIgbXNnaWQ9IjY4OTM1OTI5NjQ0NjM2MjQzMzMiPiJXaS1GaSDpoa/npLroo53nva4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbm9fY29ubmVjdGlvbl9sYWJlbCIgbXNnaWQ9IjIzNTUyOTg3NDA3NjU3MzY5MTgiPiLnhKHnt5ronqLluZXliIbkuqsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4i5oqV5pS+6J6i5bmVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4i5Lqu5bqmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IuiHquWLlSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaGVscF90aXRsZSIgbXNnaWQ9IjExOTkyMzc3NDQwODY0NjkyMTciPiLns7vntbHmnIPlnKjpgJnoo6Hpoa/npLrpgJrnn6UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2hlbHBfdGV4dCIgbXNnaWQ9Ijc4NzQ2MDcxNTUwNTIwNzYzMjMiPiLlkJHkuIvmu5Hli5XljbPlj6/pmqjmmYLlrZjlj5bpgJrnn6XjgIJcbuWGjeasoeWQkeS4i+a7keWLleWNs+WPr+S9v+eUqOezu+e1seaOp+WItumgheOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iOTA1MDg2OTU0ODk1MTA0NDM3MSI+Iua7keWLleieouW5lemCiue3o+WNs+WPr+mhr+ekuuWwjuimveWIlyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImhpZGV5YmFyX2NvbmZpcm1hdGlvbl9tZXNzYWdlX2xvbmciIG1zZ2lkPSI3MTE3NjkyNzk1MTYzNjIwNjI2Ij4i5b6e6J6i5bmV6YKK57ej5ZCR5YWn5ruR5YuV5Y2z5Y+v6aGv56S65bCO6Ka95YiXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaW52ZXJzaW9uX2xhYmVsIiBtc2dpZD0iMTY2NjM1ODc4NDI4MzAyMDc2MiI+IuW9qeiJsuWPjei9ieaooeW8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+IuWinuW8t+WwjeavlOaooeW8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4i6Imy5b2p5qCh5q2j5qih5byPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjkwMDU5NTQxMDY5MDIwNTM2NDEiPiLntrLot6/lj6/og71cbuWPl+WIsOebo+aOpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF9zZWFyY2giIG1zZ2lkPSIzMDkxNTg3MjQ5Nzc2MDMzMTM5Ij4i5pCc5bCLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwIiBtc2dpZD0iNzE2OTAzMjQ3ODI1OTQ4NTE4MCI+IuWQkeS4iua7keWLleWNs+WPrzx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl9sZWZ0IiBtc2dpZD0iNzIwNzQ3ODcxOTgwNTU2MjE2NSI+IuWQkeW3pua7keWLleWNs+WPrzx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKaW5kZXggMDA3ZDMzOC4uZjIyYmU2NyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCkBAIC0yNCwxMCArMjQsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X3JlbW92ZV9pdGVtX3RpdGxlIiBtc2dpZD0iNjAyNjM5NTg2ODEyOTg1Mjk2OCI+IlN1c2Egb2hsd2luaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiJVbHdhemkgbHdlbnNpemEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNjU3NjM5Mjk1MTA1Mzk5NDY0MCI+IkF6aWtobyBpemluaGxlbG8gem9rdXNlYmVuemEgemFrYW11dmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfZGlzbWlzc19yZWNlbnRzIiBtc2dpZD0iNDU3NjA3NjA3NTIyNjU0MDEwNSI+IlN1c2EgaXppbnNpemEgemFrYW11bXZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9hY2Nlc3NpYmlsaXR5X2Rpc21pc3NfcmVjZW50cyIgbXNnaWQ9IjQ1NzYwNzYwNzUyMjY1NDAxMDUiPiJTdXNhIGl6aW5obGVsbyB6b2t1c2ViZW56YSB6YWthbXVtdmEiPC9zdHJpbmc+CiAgIDxwbHVyYWxzIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9yZWNlbnRfYXBwcyI+CiAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSIgbXNnaWQ9IjU4NTQxNzYwODM4NjU4NDU1NDEiPiJJbnNpemEgZXlpLTEgeWFrYW11bXZhIjwvaXRlbT4KLSAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQgaXppbnNpemEgemFrYW11bXZhIjwvaXRlbT4KKyAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiIG1zZ2lkPSIxMDQwNzg0MzU5Nzk0ODkwNzQ0Ij4iJWQgaXppbmhsZWxvIHpva3VzZWJlbnphIHpha2FtdW12YSI8L2l0ZW0+CiAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiJBemlraG8gaXphemlzbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfb25nb2luZ19ldmVudHNfdGl0bGUiIG1zZ2lkPSIxNjgyNTA0NTEzMzE2ODc5MjAyIj4iT2t1cWh1YmVrYXlvIjwvc3RyaW5nPgpAQCAtNDcsMTEgKzQ3LDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4iVWt1c2ViZW56aXNhIGktQmx1ZXRvb3RoIG5qZW5nZW1vZGVtdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+Ikl6aWx1bmdpc2VsZWxvIHplemluZGxlbGEgem9rdWZha3dheW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiJVa3dha2hla2Ega3dla2hpYmhvZGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4iVnVtZWxhIGluc2l6YSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IHVrdXRoaSB1ZmlueWVsZWxlIGV6aW50d2VuaSBlemlwaHVtYSBuZS1VU0I/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiJWdW1lbGEgaW5zaXphIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gdWt1dGhpIHVmaW55ZWxlbGUgZXppbnR3ZW5pIGV6aXBodW1hIG5lLVVTQj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4iVnVtZWxhIHVobGVsbyBsb2t1c2ViZW56YSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IHVrdXRoaSB1ZmlueWVsZWxlIGV6aW50d2VuaSBlemlwaHVtYSBuZS1VU0I/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV9wZXJtaXNzaW9uX3Byb21wdCIgbXNnaWQ9IjUxNzE3NzU0MTExNzg4NjU3NTAiPiJWdW1lbGEgdWhsZWxvIGxva3VzZWJlbnphIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gdWt1dGhpIHVmaW55ZWxlbGUgZXppbnR3ZW5pIGV6aXBodW1hIG5lLVVTQj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iNTE2MTIwNTI1ODYzNTI1MzIwNiI+IlZ1bGEgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiB1bWEgbGVkaXZheWlzaSB5ZS1VU0IgaXhodW55aXdlPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSIzODA4OTg0OTMxODMwMjI5ODg4Ij4iVnVsYSA8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+IHVtYSBsZS1hY2Nlc3NvcnkgeWUtVVNCIGl4aHVueWl3ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InVzYl9hY2Nlc3NvcnlfdXJpX3Byb21wdCIgbXNnaWQ9IjUxMzQ1MDYyMTQxMzczMzM0MyI+IkF6aWtobyBpemluc2l6YSBlemlzZWJlbnplIG5nZXppbnRvIHplLVVTQi4gRnVuZGEgb2t3ZW5nZXppd2UgbmdhbGUgaW50byBrd2kgPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3VyaV9wcm9tcHQiIG1zZ2lkPSI1MTM0NTA2MjE0MTM3MzMzNDMiPiJBemlraG8gaXppbmhsZWxvIHpva3VzZWJlbnphIGV6aXNlYmVuemUgbmdlemludG8gemUtVVNCLiBGdW5kYSBva3dlbmdleml3ZSBuZ2FsZSBpbnRvIGt3aSA8eGxpZmY6ZyBpZD0iVVJMIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3VzYl9hY2Nlc3NvcnkiIG1zZ2lkPSI0OTY2MjY1MjYzNDY1MTgxMzcyIj4iYW1hLWFjY2Vzc29yeSBlLVVTQiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3ZpZXciIG1zZ2lkPSI2MzA0NTY1NTUzMjE4MTkyOTkwIj4iQnVrYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IlNlYmVuemlzYSBuZ29rdXplbnpha2FsZWxheW8geWFsZSBkaXZheWlzaSB5ZS1VU0IiPC9zdHJpbmc+CkBAIC02MSw4ICs2MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IkhsYWxhIHV2dW1lbGEgbmphbG8ga3VzdWthIGt1bGUga2hvbXB5dXRoYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29uIiBtc2dpZD0iNjYyMzgzOTI0NDg0MDYzODIxMyI+IlNvbmRlemEgdWt1Z2N3YWxpc2EgaXNpa3JpbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vZmYiIG1zZ2lkPSI0NDM0NDY3NTcyNDYxMzI3ODk4Ij4iTndlYmEgdWt1Z2N3YWxpc2EgaXNpa3JpbmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2hlYWRlciIgbXNnaWQ9Ijc5Njk0OTM5ODkzOTc1Mjk5MTAiPiJVa3VoYW1iZWxhbmEgS29rdXNvbmRlemEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9oZWxwX2JvZHkiIG1zZ2lkPSI0OTQ2NzI2Nzc2MzU5MjcwMDQwIj4iVW1hIHVobGVsbyBsb2t1c2ViZW56YSBsd2VuemVsd2UgaXNpa3JpbmkgZXppbmNhbmUsIGlzaWxhd3VsaSBzb2t1c29uZGV6YSBzaXpvdmVsYSBuZ2FrdXlpd2FzaGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGlja2VyIiBtc2dpZD0iNzQwMzY1Mjg5NDA1NjY5MzUxNSI+Iklsb25kb2xveiB1bWZhbmVraXNvIHdlc2tyaW5pLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4iSWxvbmRvbG96IHVtZmFuZWtpc28gd2Vza3JpbmkuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmluZ190ZXh0IiBtc2dpZD0iMjQxOTcxODQ0MzQxMTczODgxOCI+IlVtZmFuZWtpc28gd2Vza3JpbmkgdXlhbG9uZG9sb3p3YS4iPC9zdHJpbmc+CkBAIC03MywxMSArNzEsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InVzYl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNjU1MTA1MDM3NzM4ODg4Mjc4NyI+Ik9rdWtoZXRod2Ega29rdWRsdWxpc3dhIGt3ZWZheWVsYSB5ZS1VU0IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiJMZW5naXNhIG5qZW5nZXNpZGxhbGkgc2VtZWRpeWEgKE1UUCkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VfcHRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9Ijc1MTcxMjc1NDAzMDE2MjU3NTEiPiJMZW5naXNhIGlraGFtZXJhIChQVFApIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiJGYWthIGluc2l6YSB5b2t1ZGx1bGlzd2EgS3dlZmF5ZWxhIHllLUFuZHJvaWQga3dpLU1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imluc3RhbGxlcl9jZF9idXR0b25fdGl0bGUiIG1zZ2lkPSIyMzEyNjY3NTc4NTYyMjAxNTgzIj4iRmFrYSB1aGxlbG8gbG9rdXNlYmVuemEgeW9rdWRsdWxpc3dhIEt3ZWZheWVsYSB5ZS1BbmRyb2lkIGt3aS1NYWMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhY2siIG1zZ2lkPSI1NjcwMTE1Mzg5OTQ0MjkxMjAiPiJFbXV2YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiJFa2hheWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiJJbWVueXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudCIgbXNnaWQ9Ijg1NzEzNTA1OTg5ODc5NTI4ODMiPiJJemluaGxlbG8gem9rdXNlYmVuemEgemFrYW11dmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJTZXNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJJa2hhbWVsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaW1lX3N3aXRjaF9idXR0b24iIG1zZ2lkPSI1MDMyOTI2MTM0NzQwNDU2NDI0Ij4iVnVsYSBpbmRsZWxhIHlva3VuZ2VuYSB5ZW5raW5vYmhvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jb21wYXRpYmlsaXR5X3pvb21fYnV0dG9uIiBtc2dpZD0iODQ2MTExNTMxODc0MjM1MDY5OSI+Iklua2lub2JobyBldnVtZWxla2lsZSB5b2t1c29uZGV6YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY29tcGF0aWJpbGl0eV96b29tX2V4YW1wbGUiIG1zZ2lkPSI0MjIwNjg3Mjk0NTY0OTQ1NzgwIj4iU29uZGV6YSBrYW5jYW5lIGVzaWtyaW5pbmkgZXNpa2h1ZGx3YW5hIjwvc3RyaW5nPgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2JhdHRlcnkiIG1zZ2lkPSIxNDgwOTMxNTgzMzgxNDA4OTcyIj4iSWJoZXRocmkgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZSIgbXNnaWQ9IjQxOTY4NzY3MjIwOTAyMjQ3NTMiPiJJbW9kaSB5ZW5kaXphIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoIiBtc2dpZD0iNTc0OTA1NDk3MTM0MTg4MjM0MCI+IkktQmx1ZXRvb3RoIDx4bGlmZjpnIGlkPSJTVEFURSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfbG9jYXRpb24iIG1zZ2lkPSI0NTc3MjgyMzI5ODY2ODEzMTAwIj4iSW5kYXdvIGktPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19hbGFybSIgbXNnaWQ9IjM5NTk5MDg5NzI4OTcyOTU2NjAiPiJJLWFsYW11IGlzZXRoaXdlIG5nby08eGxpZmY6ZyBpZD0iVElNRSI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI1NzgzMzg4MTY5ODY0NDY4NyI+ImlkYXRoYSB5ZS0yRy0zRyBpdmltYmVsd2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjQ3ODkxNDMzNjM0OTI2ODI2MjkiPiJJZGF0aGEgeWUtNEcgaXZpbWJlbHdlIjwvc3RyaW5nPgpAQCAtMTY0LDEyICsxNjUsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IkktV2ktRmkgaXhodW55aXdlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3BzX25vdGlmaWNhdGlvbl9zZWFyY2hpbmdfdGV4dCIgbXNnaWQ9Ijg1NzQyNDcwMDU2NDI3MzYwNjAiPiJJc2VzaGEgaS1HUFMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iSW5kYXdvIGlobGVsd2UgaS1HUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJJemljZWxvIHplbmRhd28geml5YXNlYmVuemEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NsZWFyX2FsbCIgbXNnaWQ9IjUyMzU5Mzg1NTkyNDcxNjQ5MjUiPiJTdXNhIHpvbmtlIGl6YXppc28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtX3RpdGxlIiBtc2dpZD0iMTE2MzU0NzcyOTAxNTM5MDI1MCI+IlVsd2F6aSBsb2hsZWxvIGxva3VzZWJlbnphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29mZiIgbXNnaWQ9IjQwNjI3ODAyMjg5MzE1OTAwNjkiPiJJc2lrcmluaSBzaXpvcGhlbmR1a2Egbmdva3V6ZW56YWthbGVsYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb25fbGFuZHNjYXBlIiBtc2dpZD0iNjczMTE5NzMzNzY2NTM2NjI3MyI+IklzaWtyaW5pIHNpa2hpeWVsd2UgbmdvbXVtbyB3ZS1sYW5kc2NhcGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0IiBtc2dpZD0iNTgwOTM2NzUyMTY0NDAxMjExNSI+IklzaWtyaW5pIHNpa2hpeWVsd2UgbmdvbXVtbyB3ZS1wb3J0cmFpdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJqZWxseV9iZWFuX2RyZWFtX25hbWUiIG1zZ2lkPSI1OTkyMDI2NTQzNjM2ODE2NzkyIj4iSS1CZWFuRmxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3NlcnRfY2FzZSIgbXNnaWQ9IjEyOTUxNjE3NzYyMjM5NTkyMjEiPiJJc2lraHdhbWEgc29zd2lkaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X2RyZWFtcyIgbXNnaWQ9IjcyMTk1NzU4NTgzNDg3MTk3OTAiPiJVa3VwaHVwaGEgZW1pbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJJLUV0aGVybmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfbW9kZV9sYWJlbCIgbXNnaWQ9IjU1MTA1MjA2MzM0NDg4MzEzNTAiPiJJc2ltbyBzZW5kaXphIjwvc3RyaW5nPgpAQCAtMTk0LDEyICsxOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm90X2Nvbm5lY3RlZCIgbXNnaWQ9IjcxNzE5MDQ4NDUzNDU1NzM0MzEiPiJBa3V4aHVueWl3ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiJBeWlraG8gaW5ldGhpd2VraGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJJLVdpLUZpIGljaW1pbGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2Rpc3BsYXlfbGFiZWwiIG1zZ2lkPSI2ODkzNTkyOTY0NDYzNjI0MzMzIj4iVWt1Ym9uaXN3YSBrd2UtV2ktIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kaXNwbGF5X25vX2Nvbm5lY3Rpb25fbGFiZWwiIG1zZ2lkPSIyMzU1Mjk4NzQwNzY1NzM2OTE4Ij4iVWt1Ym9uaXNhIG9rdW5nZW5hemludGFtYm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZW1vdGVfZGlzcGxheV9ub19jb25uZWN0aW9uX2xhYmVsIiBtc2dpZD0iMzcyMTA3Njk5Mjc0MzkxMjkwIj4iSXNpa3Jpbmkgc2FiYWxpbmdpc2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2RpYWxvZ190aXRsZSIgbXNnaWQ9Ijg1OTk2NzQwNTc2NzM2MDUzNjgiPiJVa3VncWFtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX2F1dG9fYnJpZ2h0bmVzc19sYWJlbCIgbXNnaWQ9IjUwNjQ5ODI3NDM3ODQwNzEyMTgiPiJPS1VaRU5aQUtBTEVMQVlPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RpdGxlIiBtc2dpZD0iMTE5OTIzNzc0NDA4NjQ2OTIxNyI+Ikl6YXppc28geml2ZWxhIGxhcGhhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9oZWxwX3RleHQiIG1zZ2lkPSI3ODc0NjA3MTU1MDUyMDc2MzIzIj4iS3VmaW55ZWxlbGUgbm9tYSBrdW5pbmkgbmdva3Vzd2F5aXBoZWxhIHBoYW5zaS5cblN3YXlpcGhlbGEgcGhhbnNpIGZ1dGhpIG5nZXppbGF3dWxpIHplc2lzdGltdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjkwNTA4Njk1NDg5NTEwNDQzNzEiPiJTd2F5aXBoYSB1bnFlbnFlbWEgd2VzaWtyaW5pIHVrdXplIHV2ZXplIGliaGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoaWRleWJhcl9jb25maXJtYXRpb25fbWVzc2FnZV9sb25nIiBtc2dpZD0iNzExNzY5Mjc5NTE2MzYyMDYyNiI+IlN3YXlpcGhhIGt1c3VrZWxhIGt1bnFlbnFlbWEgdWt1emUgdXZlemUgaWJoYSB5ZXNpc3RpbXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSIxNjY2MzU4Nzg0MjgzMDIwNzYyIj4iSW1vZGkgeW9rdWd1cXVsd2Ega29tYmFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIiBtc2dpZD0iMzMxOTUwNzU1MTY4OTEwODY5MiI+Ikltb2RpIGV0aHV0aHVraXNpd2UgeW9rdWdxYW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiIG1zZ2lkPSI4NTM0NDM2ODk3NDU1ODQ3NzAiPiJJbW9kaSB5b2t1bHVuZ2lzYSB1bWJhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Ikt1bmdlbnpla2EgaW5ldGhpd2VraGlcbmlxYXNoaXdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJTZXNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJTaGVsZWxpc2VsYSBuZ2VuaGxhIGt1LTx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJTaGVsZWxpc2VsYSBuZ2Frd2Vzb2t1bnhlbGUga3UtPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9hcnJheXMueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9hcnJheXMueG1sCmluZGV4IGJmYjYwMGQuLjFjZTQ5ODMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2FycmF5cy54bWwKQEAgLTIxLDIxICsyMSwyMSBAQAogICAgIAogICAgIDxhcnJheSBuYW1lPSJuYXZiYXJfc2VhcmNoX3RhcmdldHMiPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QCphbmRyb2lkOmRyYXdhYmxlL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpYzwvaXRlbT4KKyAgICAgICAgPGl0ZW0+QGRyYXdhYmxlL2ljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpYzwvaXRlbT4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+CiAgICAgICAgIDxpdGVtPkBudWxsPC9pdGVtPgogICAgIDwvYXJyYXk+CiAKICAgICA8YXJyYXkgbmFtZT0ibmF2YmFyX3NlYXJjaF90YXJnZXRfZGVzY3JpcHRpb25zIj4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkAqYW5kcm9pZDpzdHJpbmcvZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaDwvaXRlbT4KKyAgICAgICAgPGl0ZW0+QHN0cmluZy9kZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoPC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+CiAgICAgPC9hcnJheT4KIAogICAgIDxhcnJheSBuYW1lPSJuYXZiYXJfc2VhcmNoX2RpcmVjdGlvbl9kZXNjcmlwdGlvbnMiPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+QCphbmRyb2lkOnN0cmluZy9kZXNjcmlwdGlvbl9kaXJlY3Rpb25fdXA8L2l0ZW0+CisgICAgICAgIDxpdGVtPkBzdHJpbmcvZGVzY3JpcHRpb25fZGlyZWN0aW9uX3VwPC9pdGVtPgogICAgICAgICA8aXRlbT5AbnVsbDwvaXRlbT4KICAgICAgICAgPGl0ZW0+QG51bGw8L2l0ZW0+CiAgICAgPC9hcnJheT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvY29sb3JzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvY29sb3JzLnhtbAppbmRleCAwYmJkZWFkLi4zYTM1ZGU1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2NvbG9ycy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9jb2xvcnMueG1sCkBAIC0zNiw0ICszNiw2IEBACiAgICAgPGNvbG9yIG5hbWU9ImJhdHRlcnltZXRlcl9jaGFyZ2VfY29sb3IiPiNGRkZGRkZGRjwvY29sb3I+CiAgICAgPGNvbG9yIG5hbWU9ImJhdHRlcnltZXRlcl9ib2x0X2NvbG9yIj4jQjIwMDAwMDA8L2NvbG9yPjwhLS0gNzAlIGJsYWNrIC0tPgogICAgIDxjb2xvciBuYW1lPSJzdGF0dXNfYmFyX2Nsb2NrX2NvbG9yIj4jRkZGRkZGRkY8L2NvbG9yPgorICAgIDxkcmF3YWJsZSBuYW1lPSJub3RpZmljYXRpb25faXRlbV9iYWNrZ3JvdW5kX2NvbG9yIj4jZmYxMTExMTE8L2RyYXdhYmxlPgorICAgIDxkcmF3YWJsZSBuYW1lPSJub3RpZmljYXRpb25faXRlbV9iYWNrZ3JvdW5kX2NvbG9yX3ByZXNzZWQiPiNmZjQ1NDU0NTwvZHJhd2FibGU+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvZGltZW5zLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvZGltZW5zLnhtbAppbmRleCBjYzc4Y2I0Li5lNmIyYjhiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2RpbWVucy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9kaW1lbnMueG1sCkBAIC0yMjAsNCArMjIwLDEwIEBACiAKICAgICA8IS0tIHVzZWQgYnkgRGVzc2VydENhc2UgLS0+CiAgICAgPGRpbWVuIG5hbWU9ImRlc3NlcnRfY2FzZV9jZWxsX3NpemUiPjE5MmRwPC9kaW1lbj4KKworICAgIDwhLS0gRGVmYXVsdCBnbG93IHJhZGl1cyBmb3IgR2xvd1BhZFZpZXcgLS0+CisgICAgPGRpbWVuIG5hbWU9Imdsb3dwYWR2aWV3X2dsb3dfcmFkaXVzIj43NWRpcDwvZGltZW4+CisKKyAgICA8IS0tIERlZmF1bHQgZGlzdGFuY2UgZnJvbSBlYWNoIHNuYXAgdGFyZ2V0IHRoYXQgR2xvd1BhZFZpZXcgY29uc2lkZXJzIGEgImhpdCIgLS0+CisgICAgPGRpbWVuIG5hbWU9Imdsb3dwYWR2aWV3X2lubmVyX3JhZGl1cyI+MTVkaXA8L2RpbWVuPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAppbmRleCBlMzZjYThlLi41YWZkNTViIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTQ5Niw2ICs0OTYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JyaWdodG5lc3NfZGlhbG9nX3RpdGxlIj5CcmlnaHRuZXNzPC9zdHJpbmc+CiAgICAgPCEtLSBRdWlja1NldHRpbmdzOiBCcmlnaHRuZXNzIGRpYWxvZyBhdXRvIGJyaWdodG5lc3MgYnV0dG9uIFtDSEFSIExJTUlUPU5PTkVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIj5BVVRPPC9zdHJpbmc+CisgICAgPCEtLSBRdWlja1NldHRpbmdzOiBMYWJlbCBmb3IgdGhlIHRvZ2dsZSB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgZGlzcGxheSBpbnZlcnNpb24gaXMgZW5hYmxlZC4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiPkNvbG9yIGludmVyc2lvbiBtb2RlPC9zdHJpbmc+CisgICAgPCEtLSBRdWlja1NldHRpbmdzOiBMYWJlbCBmb3IgdGhlIHRvZ2dsZSB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgZGlzcGxheSBjb250cmFzdCBlbmhhbmNlbWVudCBpcyBlbmFibGVkLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsIj5FbmhhbmNlZCBjb250cmFzdCBtb2RlPC9zdHJpbmc+CisgICAgPCEtLSBRdWlja1NldHRpbmdzOiBMYWJlbCBmb3IgdGhlIHRvZ2dsZSB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgZGlzcGxheSBjb2xvciBjb3JyZWN0aW9uIGlzIGVuYWJsZWQuIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY29sb3Jfc3BhY2VfbGFiZWwiPkNvbG9yIGNvcnJlY3Rpb24gbW9kZTwvc3RyaW5nPgogCiAKICAgICA8IS0tIEdseXBoIHRvIGJlIG92ZXJsYWlkIGF0b3AgdGhlIGJhdHRlcnkgd2hlbiB0aGUgbGV2ZWwgaXMgZXh0cmVtZWx5IGxvdy4gRG8gbm90IHRyYW5zbGF0ZS4gLS0+CkBAIC01MDcsNCArNTEzLDEwIEBACiAgICAgICAgICBsaW5lYnJlYWsgdG8gcG9zaXRpb24gaXQgY29ycmVjdGx5LiAgW0NIQVIgTElNSVQ9NDVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyI+TmV0d29yayBtYXlcbmJlIG1vbml0b3JlZDwvc3RyaW5nPgogCisgICAgPCEtLSBEZXNjcmlwdGlvbiBvZiB0aGUgdW5sb2NrIHRhcmdldCBpbiB0aGUgU2xpZGUgdW5sb2NrIHNjcmVlbi4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl90YXJnZXRfc2VhcmNoIj5TZWFyY2g8L3N0cmluZz4KKyAgICA8IS0tIERlc2NyaXB0aW9uIG9mIHRoZSB1cCBkaXJlY3Rpb24gaW4gd2hpY2ggb25lIGNhbiB0byBzbGlkZSB0aGUgaGFuZGxlIGluIHRoZSBTbGlkZSB1bmxvY2sgc2NyZWVuLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCI+U2xpZGUgdXAgZm9yIDx4bGlmZjpnIGlkPSJ0YXJnZXRfZGVzY3JpcHRpb24iIGV4YW1wbGU9IlVubG9jayI+JXM8L3hsaWZmOmc+Ljwvc3RyaW5nPgorICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgdGhlIGxlZnQgZGlyZWN0aW9uIGluIHdoaWNoIG9uZSBjYW4gdG8gc2xpZGUgdGhlIGhhbmRsZSBpbiB0aGUgU2xpZGUgdW5sb2NrIHNjcmVlbi4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCI+IlNsaWRlIGxlZnQgZm9yIDx4bGlmZjpnIGlkPSJ0YXJnZXRfZGVzY3JpcHRpb24iIGV4YW1wbGU9IlVubG9jayI+JXM8L3hsaWZmOmc+Ljwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvQmF0dGVyeU1ldGVyVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL0JhdHRlcnlNZXRlclZpZXcuamF2YQppbmRleCAxM2FhZmIyLi4xYzY0ZmI0IDEwMDc1NQotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvQmF0dGVyeU1ldGVyVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9CYXR0ZXJ5TWV0ZXJWaWV3LmphdmEKQEAgLTI3LDcgKzI3LDYgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhdGg7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZlhmZXJtb2RlOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3RGOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuVHlwZWZhY2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5CYXR0ZXJ5TWFuYWdlcjsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9EZXNzZXJ0Q2FzZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL0Rlc3NlcnRDYXNlLmphdmEKaW5kZXggZDc5N2UzOC4uYTk2ZjAyNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL0Rlc3NlcnRDYXNlLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL0Rlc3NlcnRDYXNlLmphdmEKQEAgLTE2LDEzICsxNiwxMCBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpOwogCi1pbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkRlY2VsZXJhdGVJbnRlcnBvbGF0b3I7CiAKIHB1YmxpYyBjbGFzcyBEZXNzZXJ0Q2FzZSBleHRlbmRzIEFjdGl2aXR5IHsKICAgICBEZXNzZXJ0Q2FzZVZpZXcgbVZpZXc7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvSW1hZ2VXYWxscGFwZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9JbWFnZVdhbGxwYXBlci5qYXZhCmluZGV4IDRiMGMyY2IuLmM3ZjQ4MjggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9JbWFnZVdhbGxwYXBlci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9JbWFnZVdhbGxwYXBlci5qYXZhCkBAIC00NzEsNyArNDcxLDcgQEAKIAogICAgICAgICAgICAgY2hlY2tHbEVycm9yKCk7CiAKLSAgICAgICAgICAgIGlmICh3IDwgMCB8fCBoIDwgMCkgeworICAgICAgICAgICAgaWYgKHcgPiAwIHx8IGggPiAwKSB7CiAgICAgICAgICAgICAgICAgZ2xDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOwogICAgICAgICAgICAgICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvU2VhcmNoUGFuZWxWaWV3LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvU2VhcmNoUGFuZWxWaWV3LmphdmEKaW5kZXggYzdmMGUxNy4uYjA5NmVhZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL1NlYXJjaFBhbmVsVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9TZWFyY2hQYW5lbFZpZXcuamF2YQpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgICAgIHB1YmxpYyB2b2lkIG9uVHJpZ2dlcihWaWV3IHYsIGZpbmFsIGludCB0YXJnZXQpIHsKICAgICAgICAgICAgIGZpbmFsIGludCByZXNJZCA9IG1HbG93UGFkVmlldy5nZXRSZXNvdXJjZUlkRm9yVGFyZ2V0KHRhcmdldCk7CiAgICAgICAgICAgICBzd2l0Y2ggKHJlc0lkKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRyYXdhYmxlLmljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpYzoKKyAgICAgICAgICAgICAgICBjYXNlIFIuZHJhd2FibGUuaWNfYWN0aW9uX2Fzc2lzdF9nZW5lcmljOgogICAgICAgICAgICAgICAgICAgICBtV2FpdGluZ0ZvckxhdW5jaCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QXNzaXN0QWN0aXZpdHkoKTsKICAgICAgICAgICAgICAgICAgICAgdmlicmF0ZSgpOwpAQCAtMTc1LDcgKzE3NSw3IEBACiAgICAgICAgICAgICBDb21wb25lbnROYW1lIGNvbXBvbmVudCA9IGludGVudC5nZXRDb21wb25lbnQoKTsKICAgICAgICAgICAgIGlmIChjb21wb25lbnQgPT0gbnVsbCB8fCAhbUdsb3dQYWRWaWV3LnJlcGxhY2VUYXJnZXREcmF3YWJsZXNJZlByZXNlbnQoY29tcG9uZW50LAogICAgICAgICAgICAgICAgICAgICBBU1NJU1RfSUNPTl9NRVRBREFUQV9OQU1FLAotICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRyYXdhYmxlLmljX2FjdGlvbl9hc3Npc3RfZ2VuZXJpYykpIHsKKyAgICAgICAgICAgICAgICAgICAgUi5kcmF3YWJsZS5pY19hY3Rpb25fYXNzaXN0X2dlbmVyaWMpKSB7CiAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJDb3VsZG4ndCBncmFiIGljb24gZm9yIGNvbXBvbmVudCAiICsgY29tcG9uZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudC9UYXNrRGVzY3JpcHRpb24uamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnQvVGFza0Rlc2NyaXB0aW9uLmphdmEKaW5kZXggMmJjMjgyMS4uMmUwZWUzNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudC9UYXNrRGVzY3JpcHRpb24uamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50L1Rhc2tEZXNjcmlwdGlvbi5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbzsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwogCiBwdWJsaWMgZmluYWwgY2xhc3MgVGFza0Rlc2NyaXB0aW9uIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvQW5pbWF0ZWRJbWFnZVZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvQW5pbWF0ZWRJbWFnZVZpZXcuamF2YQppbmRleCA3ZDNlODcwLi45ODM5ZmU5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0FuaW1hdGVkSW1hZ2VWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9BbmltYXRlZEltYWdlVmlldy5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUFuaW0oKSB7Ci0gICAgICAgIERyYXdhYmxlIGRyYXdhYmxlID0gbUF0dGFjaGVkID8gZ2V0RHJhd2FibGUoKSA6IG51bGw7CisgICAgICAgIERyYXdhYmxlIGRyYXdhYmxlID0gZ2V0RHJhd2FibGUoKTsKICAgICAgICAgaWYgKG1BdHRhY2hlZCAmJiBtQW5pbSAhPSBudWxsKSB7CiAgICAgICAgICAgICBtQW5pbS5zdG9wKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uRGF0YS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25EYXRhLmphdmEKaW5kZXggNTI2NDk5OC4uNDRiMzg0MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25EYXRhLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25EYXRhLmphdmEKQEAgLTIxLDggKzIxLDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7CiAKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwotCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9LZXlndWFyZFRvdWNoRGVsZWdhdGUuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvS2V5Z3VhcmRUb3VjaERlbGVnYXRlLmphdmEKaW5kZXggYzE2NDZiYS4uMmE0M2NmNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9LZXlndWFyZFRvdWNoRGVsZWdhdGUuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL0tleWd1YXJkVG91Y2hEZWxlZ2F0ZS5qYXZhCkBAIC0yNiw4ICsyNiw2IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwucG9saWN5LklLZXlndWFyZEV4aXRDYWxsYmFjazsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuSUtleWd1YXJkU2hvd0NhbGxiYWNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeS5JS2V5Z3VhcmRTZXJ2aWNlOwogCiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUXVpY2tTZXR0aW5ncy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1NldHRpbmdzLmphdmEKaW5kZXggZTdiOGZhMS4uZTZmZDdkMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1NldHRpbmdzLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1NldHRpbmdzLmphdmEKQEAgLTI1LDYgKzI1LDcgQEAKIGltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhBZGFwdGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2U7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZS5PbkNsaWNrTGlzdGVuZXI7CkBAIC04NCw2ICs4NSw3IEBACiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfR09ORV9USUxFUyA9IGZhbHNlOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiUXVpY2tTZXR0aW5ncyI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIFNIT1dfSU1FX1RJTEUgPSBmYWxzZTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gU0hPV19BQ0NFU1NJQklMSVRZX1RJTEVTID0gdHJ1ZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBMT05HX1BSRVNTX1RPR0dMRVMgPSB0cnVlOwogCkBAIC0zNzQsNiArMzc2LDM1IEBACiAgICAgICAgICAgICAgICAgbmV3IFF1aWNrU2V0dGluZ3NNb2RlbC5CYXNpY1JlZnJlc2hDYWxsYmFjayhzZXR0aW5nc1RpbGUpKTsKICAgICAgICAgcGFyZW50LmFkZFZpZXcoc2V0dGluZ3NUaWxlKTsKICAgICAgICAgbUR5bmFtaWNTcGFubmVkVGlsZXMuYWRkKHNldHRpbmdzVGlsZSk7CisKKyAgICAgICAgaWYgKFNIT1dfQUNDRVNTSUJJTElUWV9USUxFUykgeworICAgICAgICAgICAgLy8gQ29sb3IgaW52ZXJzaW9uIHRpbGUKKyAgICAgICAgICAgIGZpbmFsIFN5c3RlbVNldHRpbmdUaWxlIGludmVyc2lvblRpbGUgPSBuZXcgU3lzdGVtU2V0dGluZ1RpbGUobUNvbnRleHQpOworICAgICAgICAgICAgaW52ZXJzaW9uVGlsZS5zZXRVcmkoU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9JTlZFUlNJT05fRU5BQkxFRCwKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtU2V0dGluZ1RpbGUuVFlQRV9TRUNVUkUpOworICAgICAgICAgICAgaW52ZXJzaW9uVGlsZS5zZXRGcmFnbWVudCgiU2V0dGluZ3MkQWNjZXNzaWJpbGl0eUludmVyc2lvblNldHRpbmdzQWN0aXZpdHkiKTsKKyAgICAgICAgICAgIG1Nb2RlbC5hZGRJbnZlcnNpb25UaWxlKGludmVyc2lvblRpbGUsIGludmVyc2lvblRpbGUuZ2V0UmVmcmVzaENhbGxiYWNrKCkpOworICAgICAgICAgICAgcGFyZW50LmFkZFZpZXcoaW52ZXJzaW9uVGlsZSk7CisgICAgICAgICAgICBtRHluYW1pY1NwYW5uZWRUaWxlcy5hZGQoaW52ZXJzaW9uVGlsZSk7CisKKyAgICAgICAgICAgIC8vIENvbnRyYXN0IGVuaGFuY2VtZW50IHRpbGUKKyAgICAgICAgICAgIGZpbmFsIFN5c3RlbVNldHRpbmdUaWxlIGNvbnRyYXN0VGlsZSA9IG5ldyBTeXN0ZW1TZXR0aW5nVGlsZShtQ29udGV4dCk7CisgICAgICAgICAgICBjb250cmFzdFRpbGUuc2V0VXJpKFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09OVFJBU1RfRU5BQkxFRCwKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtU2V0dGluZ1RpbGUuVFlQRV9TRUNVUkUpOworICAgICAgICAgICAgY29udHJhc3RUaWxlLnNldEZyYWdtZW50KCJTZXR0aW5ncyRBY2Nlc3NpYmlsaXR5Q29udHJhc3RTZXR0aW5nc0FjdGl2aXR5Iik7CisgICAgICAgICAgICBtTW9kZWwuYWRkQ29udHJhc3RUaWxlKGNvbnRyYXN0VGlsZSwgY29udHJhc3RUaWxlLmdldFJlZnJlc2hDYWxsYmFjaygpKTsKKyAgICAgICAgICAgIHBhcmVudC5hZGRWaWV3KGNvbnRyYXN0VGlsZSk7CisgICAgICAgICAgICBtRHluYW1pY1NwYW5uZWRUaWxlcy5hZGQoY29udHJhc3RUaWxlKTsKKworICAgICAgICAgICAgLy8gQ29sb3Igc3BhY2UgYWRqdXN0bWVudCB0aWxlCisgICAgICAgICAgICBmaW5hbCBTeXN0ZW1TZXR0aW5nVGlsZSBjb2xvclNwYWNlVGlsZSA9IG5ldyBTeXN0ZW1TZXR0aW5nVGlsZShtQ29udGV4dCk7CisgICAgICAgICAgICBjb2xvclNwYWNlVGlsZS5zZXRVcmkoU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9EQUxUT05JWkVSX0VOQUJMRUQsCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbVNldHRpbmdUaWxlLlRZUEVfU0VDVVJFKTsKKyAgICAgICAgICAgIGNvbG9yU3BhY2VUaWxlLnNldEZyYWdtZW50KCJTZXR0aW5ncyRBY2Nlc3NpYmlsaXR5RGFsdG9uaXplclNldHRpbmdzQWN0aXZpdHkiKTsKKyAgICAgICAgICAgIG1Nb2RlbC5hZGRDb2xvclNwYWNlVGlsZShjb2xvclNwYWNlVGlsZSwgY29sb3JTcGFjZVRpbGUuZ2V0UmVmcmVzaENhbGxiYWNrKCkpOworICAgICAgICAgICAgcGFyZW50LmFkZFZpZXcoY29sb3JTcGFjZVRpbGUpOworICAgICAgICAgICAgbUR5bmFtaWNTcGFubmVkVGlsZXMuYWRkKGNvbG9yU3BhY2VUaWxlKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBhZGRTeXN0ZW1UaWxlcyhWaWV3R3JvdXAgcGFyZW50LCBMYXlvdXRJbmZsYXRlciBpbmZsYXRlcikgewpAQCAtOTE4LDQgKzk0OSwxMDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKworICAgIC8qKgorICAgICAqIFF1aWNrIFNldHRpbmcgdGlsZSB0aGF0IHJlcHJlc2VudHMgYSBzZWN1cmUgc2V0dGluZy4gVGhpcyB0eXBlIG9mIHRpbGUKKyAgICAgKiBjYW4gdG9nZ2xlIGEgVVJJIHdpdGhpbiBTZXR0aW5ncy5TZWN1cmUgb24gY2xpY2sgYW5kIGxhdW5jaCBhIFNldHRpbmdzCisgICAgICogZnJhZ21lbnQgb24gbG9uZy1jbGljay4KKyAgICAgKi8KKyAgICBwdWJsaWMgY2xhc3MgU3lzdGVtU2V0dGluZ1RpbGUgZXh0ZW5kcyBRdWlja1NldHRpbmdzQmFzaWNUaWxlIHsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRZUEVfR0xPQkFMID0gMDsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRZUEVfU0VDVVJFID0gMTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRZUEVfU1lTVEVNID0gMjsKKworICAgICAgICBwcml2YXRlIGZpbmFsIFF1aWNrU2V0dGluZ3NNb2RlbC5CYXNpY1JlZnJlc2hDYWxsYmFjayBtUmVmcmVzaENhbGxiYWNrOworCisgICAgICAgIHByaXZhdGUgU3RyaW5nIG1GcmFnbWVudDsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbU5hbWU7CisgICAgICAgIHByaXZhdGUgaW50IG1UeXBlOworCisgICAgICAgIHB1YmxpYyBTeXN0ZW1TZXR0aW5nVGlsZShDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQpOworCisgICAgICAgICAgICBtUmVmcmVzaENhbGxiYWNrID0gbmV3IFF1aWNrU2V0dGluZ3NNb2RlbC5CYXNpY1JlZnJlc2hDYWxsYmFjayh0aGlzKTsKKyAgICAgICAgICAgIG1SZWZyZXNoQ2FsbGJhY2suc2V0U2hvd1doZW5FbmFibGVkKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHBlcmZvcm1Mb25nQ2xpY2soKSB7CisgICAgICAgICAgICBpZiAobUZyYWdtZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjb2xsYXBzZVBhbmVscygpOworCisgICAgICAgICAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBpbnRlbnQuc2V0Q29tcG9uZW50KG5ldyBDb21wb25lbnROYW1lKAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLnNldHRpbmdzIiwgImNvbS5hbmRyb2lkLnNldHRpbmdzLiIgKyBtRnJhZ21lbnQpKTsKKyAgICAgICAgICAgICAgICBzdGFydFNldHRpbmdzQWN0aXZpdHkoaW50ZW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtQ2xpY2soKSB7CisgICAgICAgICAgICBpZiAobU5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNvbGxhcHNlUGFuZWxzKCk7CisKKyAgICAgICAgICAgICAgICBmaW5hbCBDb250ZW50UmVzb2x2ZXIgY3IgPSBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1UeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRV9HTE9CQUw6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gZW5hYmxlID0gU2V0dGluZ3MuR2xvYmFsLmdldEludChjciwgbU5hbWUsIDApID09IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwucHV0SW50KGNyLCBtTmFtZSwgZW5hYmxlID8gMSA6IDApOworICAgICAgICAgICAgICAgICAgICB9IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVfU0VDVVJFOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGVuYWJsZSA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjciwgbU5hbWUsIDAsIFVzZXJIYW5kbGUuVVNFUl9DVVJSRU5UKSA9PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLnB1dEludEZvclVzZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyLCBtTmFtZSwgZW5hYmxlID8gMSA6IDAsIFVzZXJIYW5kbGUuVVNFUl9DVVJSRU5UKTsKKyAgICAgICAgICAgICAgICAgICAgfSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFX1NZU1RFTTogeworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBlbmFibGUgPSBTZXR0aW5ncy5TeXN0ZW0uZ2V0SW50Rm9yVXNlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3IsIG1OYW1lLCAwLCBVc2VySGFuZGxlLlVTRVJfQ1VSUkVOVCkgPT0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlN5c3RlbS5wdXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjciwgbU5hbWUsIGVuYWJsZSA/IDEgOiAwLCBVc2VySGFuZGxlLlVTRVJfQ1VSUkVOVCk7CisgICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyB0aGUgZnJhZ21lbnQgd2l0aGluIHRoZSBjb20uYW5kcm9pZC5zZXR0aW5ncyBwYWNrYWdlIHRvCisgICAgICAgICAqIGxhdW5jaCB3aGVuIHRoaXMgdGlsZSBpcyBsb25nLWNsaWNrZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBmcmFnbWVudCBhIGZyYWdtZW50IG5hbWUgd2l0aGluIHRoZSBjb20uYW5kcm9pZC5zZXR0aW5ncworICAgICAgICAgKiAgICAgICAgICAgIHBhY2thZ2UKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHNldEZyYWdtZW50KFN0cmluZyBmcmFnbWVudCkgeworICAgICAgICAgICAgbUZyYWdtZW50ID0gZnJhZ21lbnQ7CisgICAgICAgICAgICBzZXRMb25nQ2xpY2thYmxlKGZyYWdtZW50ICE9IG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZmllcyB0aGUgc2V0dGluZyBuYW1lIGFuZCB0eXBlIHRvIHRvZ2dsZSB3aGVuIHRoaXMgdGlsZSBpcworICAgICAgICAgKiBjbGlja2VkLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gbmFtZSBhIHNldHRpbmcgbmFtZQorICAgICAgICAgKiBAcGFyYW0gdHlwZSB0aGUgdHlwZSBvZiBzZXR0aW5nLCBvbmUgb2Y6CisgICAgICAgICAqICAgICAgICAgICAgPHVsPgorICAgICAgICAgKiAgICAgICAgICAgIDxsaT57QGxpbmsgI1RZUEVfR0xPQkFMfQorICAgICAgICAgKiAgICAgICAgICAgIDxsaT57QGxpbmsgI1RZUEVfU0VDVVJFfQorICAgICAgICAgKiAgICAgICAgICAgIDxsaT57QGxpbmsgI1RZUEVfU1lTVEVNfQorICAgICAgICAgKiAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBzZXRVcmkoU3RyaW5nIG5hbWUsIGludCB0eXBlKSB7CisgICAgICAgICAgICBtTmFtZSA9IG5hbWU7CisgICAgICAgICAgICBtVHlwZSA9IHR5cGU7CisgICAgICAgICAgICBzZXRDbGlja2FibGUobU5hbWUgIT0gbnVsbCk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQHJldHVybiB0aGUgcmVmcmVzaCBjYWxsYmFjayBmb3IgdGhpcyB0aWxlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgUXVpY2tTZXR0aW5nc01vZGVsLkJhc2ljUmVmcmVzaENhbGxiYWNrIGdldFJlZnJlc2hDYWxsYmFjaygpIHsKKyAgICAgICAgICAgIHJldHVybiBtUmVmcmVzaENhbGxiYWNrOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1NldHRpbmdzTW9kZWwuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUXVpY2tTZXR0aW5nc01vZGVsLmphdmEKaW5kZXggNDIyMDFjNS4uMTJlMDhkMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1NldHRpbmdzTW9kZWwuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1F1aWNrU2V0dGluZ3NNb2RlbC5qYXZhCkBAIC05MSw2ICs5MSwxOSBAQAogICAgIHN0YXRpYyBjbGFzcyBCcmlnaHRuZXNzU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CiAgICAgICAgIGJvb2xlYW4gYXV0b0JyaWdodG5lc3M7CiAgICAgfQorICAgIHN0YXRpYyBjbGFzcyBJbnZlcnNpb25TdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgYm9vbGVhbiB0b2dnbGVkOworICAgICAgICBpbnQgdHlwZTsKKyAgICB9CisgICAgc3RhdGljIGNsYXNzIENvbnRyYXN0U3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIGJvb2xlYW4gdG9nZ2xlZDsKKyAgICAgICAgZmxvYXQgY29udHJhc3Q7CisgICAgICAgIGZsb2F0IGJyaWdodG5lc3M7CisgICAgfQorICAgIHN0YXRpYyBjbGFzcyBDb2xvclNwYWNlU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIGJvb2xlYW4gdG9nZ2xlZDsKKyAgICAgICAgaW50IHR5cGU7CisgICAgfQogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQmx1ZXRvb3RoU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CiAgICAgICAgIGJvb2xlYW4gY29ubmVjdGVkID0gZmFsc2U7CiAgICAgICAgIFN0cmluZyBzdGF0ZUNvbnRlbnREZXNjcmlwdGlvbjsKQEAgLTE5OSw2ICsyMTIsODcgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIC8qKiBDb250ZW50T2JzZXJ2ZXIgdG8gd2F0Y2ggZGlzcGxheSBpbnZlcnNpb24gKi8KKyAgICBwcml2YXRlIGNsYXNzIERpc3BsYXlJbnZlcnNpb25PYnNlcnZlciBleHRlbmRzIENvbnRlbnRPYnNlcnZlciB7CisgICAgICAgIHB1YmxpYyBEaXNwbGF5SW52ZXJzaW9uT2JzZXJ2ZXIoSGFuZGxlciBoYW5kbGVyKSB7CisgICAgICAgICAgICBzdXBlcihoYW5kbGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZShib29sZWFuIHNlbGZDaGFuZ2UpIHsKKyAgICAgICAgICAgIG9uSW52ZXJzaW9uQ2hhbmdlZCgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc3RhcnRPYnNlcnZpbmcoKSB7CisgICAgICAgICAgICBmaW5hbCBDb250ZW50UmVzb2x2ZXIgY3IgPSBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKKyAgICAgICAgICAgIGNyLnVucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIodGhpcyk7CisgICAgICAgICAgICBjci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcihTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9FTkFCTEVEKSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRoaXMsIG1Vc2VyVHJhY2tlci5nZXRDdXJyZW50VXNlcklkKCkpOworICAgICAgICAgICAgY3IucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcigKKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9JTlZFUlNJT05fUVVJQ0tfU0VUVElOR19FTkFCTEVEKSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRoaXMsIG1Vc2VyVHJhY2tlci5nZXRDdXJyZW50VXNlcklkKCkpOworICAgICAgICAgICAgY3IucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcigKKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9JTlZFUlNJT04pLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgdGhpcywgbVVzZXJUcmFja2VyLmdldEN1cnJlbnRVc2VySWQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQ29udGVudE9ic2VydmVyIHRvIHdhdGNoIGRpc3BsYXkgY29udHJhc3QgKi8KKyAgICBwcml2YXRlIGNsYXNzIERpc3BsYXlDb250cmFzdE9ic2VydmVyIGV4dGVuZHMgQ29udGVudE9ic2VydmVyIHsKKyAgICAgICAgcHVibGljIERpc3BsYXlDb250cmFzdE9ic2VydmVyKEhhbmRsZXIgaGFuZGxlcikgeworICAgICAgICAgICAgc3VwZXIoaGFuZGxlcik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25DaGFuZ2UoYm9vbGVhbiBzZWxmQ2hhbmdlKSB7CisgICAgICAgICAgICBvbkNvbnRyYXN0Q2hhbmdlZCgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc3RhcnRPYnNlcnZpbmcoKSB7CisgICAgICAgICAgICBmaW5hbCBDb250ZW50UmVzb2x2ZXIgY3IgPSBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKKyAgICAgICAgICAgIGNyLnVucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIodGhpcyk7CisgICAgICAgICAgICBjci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcihTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTlRSQVNUX0VOQUJMRUQpLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgdGhpcywgbVVzZXJUcmFja2VyLmdldEN1cnJlbnRVc2VySWQoKSk7CisgICAgICAgICAgICBjci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcihTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTlRSQVNUX1FVSUNLX1NFVFRJTkdfRU5BQkxFRCksCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB0aGlzLCBtVXNlclRyYWNrZXIuZ2V0Q3VycmVudFVzZXJJZCgpKTsKKyAgICAgICAgICAgIGNyLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKFNldHRpbmdzLlNlY3VyZS5nZXRVcmlGb3IoCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09OVFJBU1QpLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgdGhpcywgbVVzZXJUcmFja2VyLmdldEN1cnJlbnRVc2VySWQoKSk7CisgICAgICAgICAgICBjci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcihTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0JSSUdIVE5FU1MpLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgdGhpcywgbVVzZXJUcmFja2VyLmdldEN1cnJlbnRVc2VySWQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogQ29udGVudE9ic2VydmVyIHRvIHdhdGNoIGRpc3BsYXkgY29sb3Igc3BhY2UgYWRqdXN0bWVudCAqLworICAgIHByaXZhdGUgY2xhc3MgRGlzcGxheUNvbG9yU3BhY2VPYnNlcnZlciBleHRlbmRzIENvbnRlbnRPYnNlcnZlciB7CisgICAgICAgIHB1YmxpYyBEaXNwbGF5Q29sb3JTcGFjZU9ic2VydmVyKEhhbmRsZXIgaGFuZGxlcikgeworICAgICAgICAgICAgc3VwZXIoaGFuZGxlcik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25DaGFuZ2UoYm9vbGVhbiBzZWxmQ2hhbmdlKSB7CisgICAgICAgICAgICBvbkNvbG9yU3BhY2VDaGFuZ2VkKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzdGFydE9ic2VydmluZygpIHsKKyAgICAgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciBjciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOworICAgICAgICAgICAgY3IudW5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcih0aGlzKTsKKyAgICAgICAgICAgIGNyLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKFNldHRpbmdzLlNlY3VyZS5nZXRVcmlGb3IoCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUl9FTkFCTEVEKSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRoaXMsIG1Vc2VyVHJhY2tlci5nZXRDdXJyZW50VXNlcklkKCkpOworICAgICAgICAgICAgY3IucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcigKKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9EQUxUT05JWkVSX1FVSUNLX1NFVFRJTkdfRU5BQkxFRCksCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB0aGlzLCBtVXNlclRyYWNrZXIuZ2V0Q3VycmVudFVzZXJJZCgpKTsKKyAgICAgICAgICAgIGNyLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKFNldHRpbmdzLlNlY3VyZS5nZXRVcmlGb3IoCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUiksCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB0aGlzLCBtVXNlclRyYWNrZXIuZ2V0Q3VycmVudFVzZXJJZCgpKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKiBDYWxsYmFjayBmb3IgY2hhbmdlcyB0byByZW1vdGUgZGlzcGxheSByb3V0ZXMuICovCiAgICAgcHJpdmF0ZSBjbGFzcyBSZW1vdGVEaXNwbGF5Um91dGVDYWxsYmFjayBleHRlbmRzIE1lZGlhUm91dGVyLlNpbXBsZUNhbGxiYWNrIHsKICAgICAgICAgQE92ZXJyaWRlCkBAIC0yMjksNiArMzIzLDkgQEAKICAgICBwcml2YXRlIGZpbmFsIE5leHRBbGFybU9ic2VydmVyIG1OZXh0QWxhcm1PYnNlcnZlcjsKICAgICBwcml2YXRlIGZpbmFsIEJ1Z3JlcG9ydE9ic2VydmVyIG1CdWdyZXBvcnRPYnNlcnZlcjsKICAgICBwcml2YXRlIGZpbmFsIEJyaWdodG5lc3NPYnNlcnZlciBtQnJpZ2h0bmVzc09ic2VydmVyOworICAgIHByaXZhdGUgZmluYWwgRGlzcGxheUludmVyc2lvbk9ic2VydmVyIG1JbnZlcnNpb25PYnNlcnZlcjsKKyAgICBwcml2YXRlIGZpbmFsIERpc3BsYXlDb250cmFzdE9ic2VydmVyIG1Db250cmFzdE9ic2VydmVyOworICAgIHByaXZhdGUgZmluYWwgRGlzcGxheUNvbG9yU3BhY2VPYnNlcnZlciBtQ29sb3JTcGFjZU9ic2VydmVyOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBNZWRpYVJvdXRlciBtTWVkaWFSb3V0ZXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBSZW1vdGVEaXNwbGF5Um91dGVDYWxsYmFjayBtUmVtb3RlRGlzcGxheVJvdXRlQ2FsbGJhY2s7CkBAIC0yODcsNiArMzg0LDE4IEBACiAgICAgcHJpdmF0ZSBSZWZyZXNoQ2FsbGJhY2sgbUJyaWdodG5lc3NDYWxsYmFjazsKICAgICBwcml2YXRlIEJyaWdodG5lc3NTdGF0ZSBtQnJpZ2h0bmVzc1N0YXRlID0gbmV3IEJyaWdodG5lc3NTdGF0ZSgpOwogCisgICAgcHJpdmF0ZSBRdWlja1NldHRpbmdzVGlsZVZpZXcgbUludmVyc2lvblRpbGU7CisgICAgcHJpdmF0ZSBSZWZyZXNoQ2FsbGJhY2sgbUludmVyc2lvbkNhbGxiYWNrOworICAgIHByaXZhdGUgSW52ZXJzaW9uU3RhdGUgbUludmVyc2lvblN0YXRlID0gbmV3IEludmVyc2lvblN0YXRlKCk7CisKKyAgICBwcml2YXRlIFF1aWNrU2V0dGluZ3NUaWxlVmlldyBtQ29udHJhc3RUaWxlOworICAgIHByaXZhdGUgUmVmcmVzaENhbGxiYWNrIG1Db250cmFzdENhbGxiYWNrOworICAgIHByaXZhdGUgQ29udHJhc3RTdGF0ZSBtQ29udHJhc3RTdGF0ZSA9IG5ldyBDb250cmFzdFN0YXRlKCk7CisKKyAgICBwcml2YXRlIFF1aWNrU2V0dGluZ3NUaWxlVmlldyBtQ29sb3JTcGFjZVRpbGU7CisgICAgcHJpdmF0ZSBSZWZyZXNoQ2FsbGJhY2sgbUNvbG9yU3BhY2VDYWxsYmFjazsKKyAgICBwcml2YXRlIENvbG9yU3BhY2VTdGF0ZSBtQ29sb3JTcGFjZVN0YXRlID0gbmV3IENvbG9yU3BhY2VTdGF0ZSgpOworCiAgICAgcHJpdmF0ZSBRdWlja1NldHRpbmdzVGlsZVZpZXcgbUJ1Z3JlcG9ydFRpbGU7CiAgICAgcHJpdmF0ZSBSZWZyZXNoQ2FsbGJhY2sgbUJ1Z3JlcG9ydENhbGxiYWNrOwogICAgIHByaXZhdGUgU3RhdGUgbUJ1Z3JlcG9ydFN0YXRlID0gbmV3IFN0YXRlKCk7CkBAIC0zMDgsOCArNDE3LDE0IEBACiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVXNlclN3aXRjaGVkKGludCBuZXdVc2VySWQpIHsKICAgICAgICAgICAgICAgICBtQnJpZ2h0bmVzc09ic2VydmVyLnN0YXJ0T2JzZXJ2aW5nKCk7CisgICAgICAgICAgICAgICAgbUludmVyc2lvbk9ic2VydmVyLnN0YXJ0T2JzZXJ2aW5nKCk7CisgICAgICAgICAgICAgICAgbUNvbnRyYXN0T2JzZXJ2ZXIuc3RhcnRPYnNlcnZpbmcoKTsKKyAgICAgICAgICAgICAgICBtQ29sb3JTcGFjZU9ic2VydmVyLnN0YXJ0T2JzZXJ2aW5nKCk7CiAgICAgICAgICAgICAgICAgcmVmcmVzaFJvdGF0aW9uTG9ja1RpbGUoKTsKICAgICAgICAgICAgICAgICBvbkJyaWdodG5lc3NMZXZlbENoYW5nZWQoKTsKKyAgICAgICAgICAgICAgICBvbkludmVyc2lvbkNoYW5nZWQoKTsKKyAgICAgICAgICAgICAgICBvbkNvbnRyYXN0Q2hhbmdlZCgpOworICAgICAgICAgICAgICAgIG9uQ29sb3JTcGFjZUNoYW5nZWQoKTsKICAgICAgICAgICAgICAgICBvbk5leHRBbGFybUNoYW5nZWQoKTsKICAgICAgICAgICAgICAgICBvbkJ1Z3JlcG9ydENoYW5nZWQoKTsKICAgICAgICAgICAgICAgICByZWJpbmRNZWRpYVJvdXRlckFzQ3VycmVudFVzZXIoKTsKQEAgLTMyMiw2ICs0MzcsMTIgQEAKICAgICAgICAgbUJ1Z3JlcG9ydE9ic2VydmVyLnN0YXJ0T2JzZXJ2aW5nKCk7CiAgICAgICAgIG1CcmlnaHRuZXNzT2JzZXJ2ZXIgPSBuZXcgQnJpZ2h0bmVzc09ic2VydmVyKG1IYW5kbGVyKTsKICAgICAgICAgbUJyaWdodG5lc3NPYnNlcnZlci5zdGFydE9ic2VydmluZygpOworICAgICAgICBtSW52ZXJzaW9uT2JzZXJ2ZXIgPSBuZXcgRGlzcGxheUludmVyc2lvbk9ic2VydmVyKG1IYW5kbGVyKTsKKyAgICAgICAgbUludmVyc2lvbk9ic2VydmVyLnN0YXJ0T2JzZXJ2aW5nKCk7CisgICAgICAgIG1Db250cmFzdE9ic2VydmVyID0gbmV3IERpc3BsYXlDb250cmFzdE9ic2VydmVyKG1IYW5kbGVyKTsKKyAgICAgICAgbUNvbnRyYXN0T2JzZXJ2ZXIuc3RhcnRPYnNlcnZpbmcoKTsKKyAgICAgICAgbUNvbG9yU3BhY2VPYnNlcnZlciA9IG5ldyBEaXNwbGF5Q29sb3JTcGFjZU9ic2VydmVyKG1IYW5kbGVyKTsKKyAgICAgICAgbUNvbG9yU3BhY2VPYnNlcnZlci5zdGFydE9ic2VydmluZygpOwogCiAgICAgICAgIG1NZWRpYVJvdXRlciA9IChNZWRpYVJvdXRlciljb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5NRURJQV9ST1VURVJfU0VSVklDRSk7CiAgICAgICAgIHJlYmluZE1lZGlhUm91dGVyQXNDdXJyZW50VXNlcigpOwpAQCAtODQ3LDYgKzk2OCw5MCBAQAogICAgICAgICBvbkJyaWdodG5lc3NMZXZlbENoYW5nZWQoKTsKICAgICB9CiAKKyAgICAvLyBDb2xvciBpbnZlcnNpb24KKyAgICB2b2lkIGFkZEludmVyc2lvblRpbGUoUXVpY2tTZXR0aW5nc1RpbGVWaWV3IHZpZXcsIFJlZnJlc2hDYWxsYmFjayBjYikgeworICAgICAgICBtSW52ZXJzaW9uVGlsZSA9IHZpZXc7CisgICAgICAgIG1JbnZlcnNpb25DYWxsYmFjayA9IGNiOworICAgICAgICBvbkludmVyc2lvbkNoYW5nZWQoKTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgb25JbnZlcnNpb25DaGFuZ2VkKCkgeworICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciBjciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOworICAgICAgICBmaW5hbCBpbnQgY3VycmVudFVzZXJJZCA9IG1Vc2VyVHJhY2tlci5nZXRDdXJyZW50VXNlcklkKCk7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gcXVpY2tTZXR0aW5nRW5hYmxlZCA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9RVUlDS19TRVRUSU5HX0VOQUJMRUQsIDAsCisgICAgICAgICAgICAgICAgY3VycmVudFVzZXJJZCkgPT0gMTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBlbmFibGVkID0gU2V0dGluZ3MuU2VjdXJlLmdldEludEZvclVzZXIoCisgICAgICAgICAgICAgICAgY3IsIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfSU5WRVJTSU9OX0VOQUJMRUQsIDAsIGN1cnJlbnRVc2VySWQpID09IDE7CisgICAgICAgIGZpbmFsIGludCB0eXBlID0gU2V0dGluZ3MuU2VjdXJlLmdldEludEZvclVzZXIoCisgICAgICAgICAgICAgICAgY3IsIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfSU5WRVJTSU9OLCAwLCBjdXJyZW50VXNlcklkKTsKKyAgICAgICAgbUludmVyc2lvblN0YXRlLmVuYWJsZWQgPSBxdWlja1NldHRpbmdFbmFibGVkOworICAgICAgICBtSW52ZXJzaW9uU3RhdGUudG9nZ2xlZCA9IGVuYWJsZWQ7CisgICAgICAgIG1JbnZlcnNpb25TdGF0ZS50eXBlID0gdHlwZTsKKyAgICAgICAgLy8gVE9ETzogQWRkIHJlYWwgaWNvbiBhc3NldHMuCisgICAgICAgIG1JbnZlcnNpb25TdGF0ZS5pY29uSWQgPSBlbmFibGVkID8gUi5kcmF3YWJsZS5pY19xc19ibHVldG9vdGhfb24KKyAgICAgICAgICAgICAgICA6IFIuZHJhd2FibGUuaWNfcXNfYmx1ZXRvb3RoX29mZjsKKyAgICAgICAgbUludmVyc2lvblN0YXRlLmxhYmVsID0gcmVzLmdldFN0cmluZyhSLnN0cmluZy5xdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwpOworICAgICAgICBtSW52ZXJzaW9uQ2FsbGJhY2sucmVmcmVzaFZpZXcobUludmVyc2lvblRpbGUsIG1JbnZlcnNpb25TdGF0ZSk7CisgICAgfQorCisgICAgLy8gQ29udHJhc3QgZW5oYW5jZW1lbnQKKyAgICB2b2lkIGFkZENvbnRyYXN0VGlsZShRdWlja1NldHRpbmdzVGlsZVZpZXcgdmlldywgUmVmcmVzaENhbGxiYWNrIGNiKSB7CisgICAgICAgIG1Db250cmFzdFRpbGUgPSB2aWV3OworICAgICAgICBtQ29udHJhc3RDYWxsYmFjayA9IGNiOworICAgICAgICBvbkNvbnRyYXN0Q2hhbmdlZCgpOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBvbkNvbnRyYXN0Q2hhbmdlZCgpIHsKKyAgICAgICAgZmluYWwgUmVzb3VyY2VzIHJlcyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpOworICAgICAgICBmaW5hbCBDb250ZW50UmVzb2x2ZXIgY3IgPSBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKKyAgICAgICAgZmluYWwgaW50IGN1cnJlbnRVc2VySWQgPSBtVXNlclRyYWNrZXIuZ2V0Q3VycmVudFVzZXJJZCgpOworICAgICAgICBmaW5hbCBib29sZWFuIHF1aWNrU2V0dGluZ0VuYWJsZWQgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0SW50Rm9yVXNlcigKKyAgICAgICAgICAgICAgICBjciwgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9DT05UUkFTVF9RVUlDS19TRVRUSU5HX0VOQUJMRUQsIDAsCisgICAgICAgICAgICAgICAgY3VycmVudFVzZXJJZCkgPT0gMTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBlbmFibGVkID0gU2V0dGluZ3MuU2VjdXJlLmdldEludEZvclVzZXIoCisgICAgICAgICAgICAgICAgY3IsIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09OVFJBU1RfRU5BQkxFRCwgMCwgY3VycmVudFVzZXJJZCkgPT0gMTsKKyAgICAgICAgZmluYWwgZmxvYXQgY29udHJhc3QgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0RmxvYXRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTlRSQVNULCAxLCBjdXJyZW50VXNlcklkKTsKKyAgICAgICAgZmluYWwgZmxvYXQgYnJpZ2h0bmVzcyA9IFNldHRpbmdzLlNlY3VyZS5nZXRGbG9hdEZvclVzZXIoCisgICAgICAgICAgICAgICAgY3IsIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQlJJR0hUTkVTUywgMCwgY3VycmVudFVzZXJJZCk7CisgICAgICAgIG1Db250cmFzdFN0YXRlLmVuYWJsZWQgPSBxdWlja1NldHRpbmdFbmFibGVkOworICAgICAgICBtQ29udHJhc3RTdGF0ZS50b2dnbGVkID0gZW5hYmxlZDsKKyAgICAgICAgbUNvbnRyYXN0U3RhdGUuY29udHJhc3QgPSBjb250cmFzdDsKKyAgICAgICAgbUNvbnRyYXN0U3RhdGUuYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisgICAgICAgIC8vIFRPRE86IEFkZCByZWFsIGljb24gYXNzZXRzLgorICAgICAgICBtQ29udHJhc3RTdGF0ZS5pY29uSWQgPSBlbmFibGVkID8gUi5kcmF3YWJsZS5pY19xc19ibHVldG9vdGhfb24KKyAgICAgICAgICAgICAgICA6IFIuZHJhd2FibGUuaWNfcXNfYmx1ZXRvb3RoX29mZjsKKyAgICAgICAgbUNvbnRyYXN0U3RhdGUubGFiZWwgPSByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLnF1aWNrX3NldHRpbmdzX2NvbnRyYXN0X2xhYmVsKTsKKyAgICAgICAgbUNvbnRyYXN0Q2FsbGJhY2sucmVmcmVzaFZpZXcobUNvbnRyYXN0VGlsZSwgbUNvbnRyYXN0U3RhdGUpOworICAgIH0KKworICAgIC8vIENvbG9yIHNwYWNlIGFkanVzdG1lbnQKKyAgICB2b2lkIGFkZENvbG9yU3BhY2VUaWxlKFF1aWNrU2V0dGluZ3NUaWxlVmlldyB2aWV3LCBSZWZyZXNoQ2FsbGJhY2sgY2IpIHsKKyAgICAgICAgbUNvbG9yU3BhY2VUaWxlID0gdmlldzsKKyAgICAgICAgbUNvbG9yU3BhY2VDYWxsYmFjayA9IGNiOworICAgICAgICBvbkNvbG9yU3BhY2VDaGFuZ2VkKCk7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIG9uQ29sb3JTcGFjZUNoYW5nZWQoKSB7CisgICAgICAgIGZpbmFsIFJlc291cmNlcyByZXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgZmluYWwgQ29udGVudFJlc29sdmVyIGNyID0gbUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCk7CisgICAgICAgIGZpbmFsIGludCBjdXJyZW50VXNlcklkID0gbVVzZXJUcmFja2VyLmdldEN1cnJlbnRVc2VySWQoKTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBxdWlja1NldHRpbmdFbmFibGVkID0gU2V0dGluZ3MuU2VjdXJlLmdldEludEZvclVzZXIoCisgICAgICAgICAgICAgICAgY3IsIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUl9RVUlDS19TRVRUSU5HX0VOQUJMRUQsIDAsCisgICAgICAgICAgICAgICAgY3VycmVudFVzZXJJZCkgPT0gMTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBlbmFibGVkID0gU2V0dGluZ3MuU2VjdXJlLmdldEludEZvclVzZXIoY3IsCisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9EQUxUT05JWkVSX0VOQUJMRUQsIDAsIGN1cnJlbnRVc2VySWQpID09IDE7CisgICAgICAgIGZpbmFsIGludCB0eXBlID0gU2V0dGluZ3MuU2VjdXJlLmdldEludEZvclVzZXIoCisgICAgICAgICAgICAgICAgY3IsIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUiwgMCwgY3VycmVudFVzZXJJZCk7CisgICAgICAgIG1Db2xvclNwYWNlU3RhdGUuZW5hYmxlZCA9IHF1aWNrU2V0dGluZ0VuYWJsZWQ7CisgICAgICAgIG1Db2xvclNwYWNlU3RhdGUudG9nZ2xlZCA9IGVuYWJsZWQ7CisgICAgICAgIG1Db2xvclNwYWNlU3RhdGUudHlwZSA9IHR5cGU7CisgICAgICAgIC8vIFRPRE86IEFkZCByZWFsIGljb24gYXNzZXRzLgorICAgICAgICBtQ29sb3JTcGFjZVN0YXRlLmljb25JZCA9IGVuYWJsZWQgPyBSLmRyYXdhYmxlLmljX3FzX2JsdWV0b290aF9vbgorICAgICAgICAgICAgICAgIDogUi5kcmF3YWJsZS5pY19xc19ibHVldG9vdGhfb2ZmOworICAgICAgICBtQ29sb3JTcGFjZVN0YXRlLmxhYmVsID0gcmVzLmdldFN0cmluZyhSLnN0cmluZy5xdWlja19zZXR0aW5nc19jb2xvcl9zcGFjZV9sYWJlbCk7CisgICAgICAgIG1Db2xvclNwYWNlQ2FsbGJhY2sucmVmcmVzaFZpZXcobUNvbG9yU3BhY2VUaWxlLCBtQ29sb3JTcGFjZVN0YXRlKTsKKyAgICB9CisKICAgICAvLyBTU0wgQ0EgQ2VydCB3YXJuaW5nLgogICAgIHB1YmxpYyB2b2lkIGFkZFNzbENhQ2VydFdhcm5pbmdUaWxlKFF1aWNrU2V0dGluZ3NUaWxlVmlldyB2aWV3LCBSZWZyZXNoQ2FsbGJhY2sgY2IpIHsKICAgICAgICAgbVNzbENhQ2VydFdhcm5pbmdUaWxlID0gdmlldzsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L0RhdGVWaWV3LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9EYXRlVmlldy5qYXZhCmluZGV4IGI3ZjNjZmUuLjcyNDk3YzUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L0RhdGVWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvRGF0ZVZpZXcuamF2YQpAQCAtMjEsOSArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdQYXJlbnQ7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvSGVhZHNVcE5vdGlmaWNhdGlvblZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L0hlYWRzVXBOb3RpZmljYXRpb25WaWV3LmphdmEKaW5kZXggZjFmZGE3OC4uMDc1YTk1MSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvSGVhZHNVcE5vdGlmaWNhdGlvblZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9IZWFkc1VwTm90aWZpY2F0aW9uVmlldy5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeTsKIAotaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwpAQCAtMjcsNyArMjYsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLkV4cGFuZEhlbHBlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvTG9jYXRpb25Db250cm9sbGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Mb2NhdGlvbkNvbnRyb2xsZXIuamF2YQppbmRleCAzMTJiYmEzLi5mNWVlOTViIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Mb2NhdGlvbkNvbnRyb2xsZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Mb2NhdGlvbkNvbnRyb2xsZXIuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLkxvY2F0aW9uTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvTm90aWZpY2F0aW9uUm93TGF5b3V0LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Ob3RpZmljYXRpb25Sb3dMYXlvdXQuamF2YQppbmRleCAyNTk0MjJkLi5hNTU5NmYzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Ob3RpZmljYXRpb25Sb3dMYXlvdXQuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Ob3RpZmljYXRpb25Sb3dMYXlvdXQuamF2YQpAQCAtMzMsNyArMzMsNiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuU3dpcGVIZWxwZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLkV4cGFuZGFibGVOb3RpZmljYXRpb25Sb3c7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLk5vdGlmaWNhdGlvbkRhdGE7CiAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCmluZGV4IDIzODBmYTIuLmJmODNhNDEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKQEAgLTE2LDEwICsxNiwxMCBAQAogCiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4i2YrYrdin2YjZhCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g2KXZhti02KfYoSDYp9iq2LXYp9mEINi02KjZg9ipINi42KfZh9ix2YrYqSDYrtin2LXYqSAoVlBOKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4i4oCP2YrYrdin2YjZhCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g2KXZhti02KfYoSDYp9iq2LXYp9mEINi02KjZg9ipINi42KfZh9ix2YrYqSDYrtin2LXYqSAoVlBOKS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+Itiq2LnYryDYp9mE2YXYqtin2KjYudipINio2YXYq9in2KjYqSDYpdiw2YYg2YTZhNiq2LfYqNmK2YIg2KjYp9i52KrYsdin2LYg2KzZhdmK2Lkg2K3YsdmD2KfYqiDZhdix2YjYsSDYp9mE2KjZitin2YbYp9iqINi52KjYsSDYp9mE2LTYqNmD2KkuICI8Yj4iXCLZhNinXCIg2KrZiNin2YHZgiDYpdmE2Kcg2KXYsNinINmD2YbYqiDYqtir2YIg2YHZiiDYp9mE2KrYt9io2YrZgi4iPC9iPiIg2YjYpdmE2Kcg2YHZgtivINiq2KrYudix2LYg2KjZitin2YbYp9iq2YMg2YTYrti32YjYsdipINin2YTYp9iu2KrYsdin2YIg2KjZiNin2LPYt9ipINio2LHYp9mF2Kwg2LbYp9ix2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+Itij2KvZgiDZgdmKINmH2LDYpyDYp9mE2KrYt9io2YrZgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4g2YXYqti12YTYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IuKAj1ZQTiDZhdiq2LXZhNipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+Itiq2YfZitim2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i2YLYt9i5INin2YTYp9iq2LXYp9mEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiLYp9mE2KzZhNiz2KkiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGViMDZmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiJWUE4gYmHEn2xhbnTEsXPEsSB5YXJhdG1hcSDDvMOnw7xuIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBjyZloZGzJmXJpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4iQnVudSBoyZl5YXRhIGtlw6dpcm3JmWtsyZksIHNpeiB0yZl0YmlxyZkgYsO8dMO8biDFn8mZYsmZa8mZIGjJmXLJmWvJmXRpbsmZIHFhcsSxxZ9tYcSfYSBpY2F6yZkgdmVyaXJzaW5pei4gIjxiPiIgVMmZdGJpccmZIGfDvHbJmW5taXJzaXpzyZkgccmZYnVsIGV0bcmZeWluLiAiPC9iPiIgxo9rcyBoYWxkYSwgZGF0YW7EsXrEsW4gdMmZaGzDvGvJmWxpIHByb3FyYW1sYXIgdMmZcsmZZmluZMmZbiDJmWzJmSBrZcOnaXJpbG3JmSByaXNraW5pIGFsxLFyc8SxbsSxei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4iQnUgdMmZdGJpccmZIGfDvHbJmW5pcsmZbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4gcW/Fn3VsdWR1ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiJLb25maXF1cmFzaXlhIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4ixo9sYXHJmW5pIGvJmXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+IlNlc3NpeWE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHVyYXRpb24iIG1zZ2lkPSIzNTg0NzgyNDU5OTI4NzE5NDM1Ij4iTcO8ZGTJmXQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV90cmFuc21pdHRlZCIgbXNnaWQ9Ijc5ODgxNjc2NzI5ODIxOTkwNjEiPiJHw7ZuZMmZcmlsyZluOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfcmVjZWl2ZWQiIG1zZ2lkPSI0MDYyNzc2OTI5Mzc2MDY3ODIwIj4iUcmZYnVsIGVkaWzJmW46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV92YWx1ZV9mb3JtYXQiIG1zZ2lkPSIyMTkyNDY2NTU3ODI2ODk3NTgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPiBiYXl0IC8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRzPC94bGlmZjpnPiBwYWtldCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWF6L3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZWIwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtYXovc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4iVlBOIGJhxJ9sYW50xLFzxLEgeWFyYXRtYXEgw7zDp8O8biA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gY8mZaGRsyZlyaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+IkJ1bnUgaMmZeWF0YSBrZcOnaXJtyZlrbMmZLCBzaXogdMmZdGJpccmZIGLDvHTDvG4gxZ/JmWLJmWvJmSBoyZlyyZlryZl0aW7JmSBxYXLEscWfbWHEn2EgaWNhesmZIHZlcmlyc2luaXouICI8Yj4iIFTJmXRiaXHJmSBnw7x2yZlubWlyc2l6c8mZIHHJmWJ1bCBldG3JmXlpbi4gIjwvYj4iIMaPa3MgaGFsZGEsIGRhdGFuxLF6xLFuIHTJmWhsw7xryZlsaSBwcm9xcmFtbGFyIHTJmXLJmWZpbmTJmW4gyZlsyZkga2XDp2lyaWxtyZkgcmlza2luaSBhbMSxcnPEsW7EsXouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IkJ1IHTJmXRiaXHJmSBnw7x2yZluaXLJmW0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGVnYWN5X3RpdGxlIiBtc2dpZD0iMTkyOTM2MjUwMDY2NTgwOTY0Ij4iVlBOIHFvxZ91bHVkdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25maWd1cmUiIG1zZ2lkPSI0OTA1NTE4Mzc1NTc0NzkxMzc1Ij4iS29uZmlxdXJhc2l5YSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdCIgbXNnaWQ9Ijk3MTQxMjMzODMwNDIwMDA1NiI+IsaPbGFxyZluaSBryZlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiJTZXNzaXlhOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+Ik3DvGRkyZl0OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdHJhbnNtaXR0ZWQiIG1zZ2lkPSI3OTg4MTY3NjcyOTgyMTk5MDYxIj4iR8O2bmTJmXJpbMmZbjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3JlY2VpdmVkIiBtc2dpZD0iNDA2Mjc3NjkyOTM3NjA2NzgyMCI+IlHJmWJ1bCBlZGlsyZluOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdmFsdWVfZm9ybWF0IiBtc2dpZD0iMjE5MjQ2NjU1NzgyNjg5NzU4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkczwveGxpZmY6Zz4gYmF5dCAvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkczwveGxpZmY6Zz4gcGFrZXQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1iZS9zdHJpbmdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY0M2FlZi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtYmUvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g0YHQv9GA0LDQsdGD0LUg0YHRgtCy0LDRgNGL0YbRjCDQt9C70YPRh9GN0L3QvdC1IFZQTi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+ItCf0YDQsNGG0Y/Qs9Cy0LDRjtGH0YssINCy0Ysg0LTQsNC30LLQsNC70Y/QtdGG0LUg0L/RgNCw0LPRgNCw0LzQtSDQv9C10YDQsNGF0LDQv9GW0YbRjCDRntCy0LXRgdGMINGB0LXRgtC60LDQstGLINGC0YDQsNGE0ZbQui4gIjxiPiIg0J3QlSDQstGL0LrQsNGA0YvRgdGC0L7QstGL0LLQsNC50YbQtSwg0L/QsNC60YPQu9GMINCy0Ysg0L3QtSDQtNCw0LLRj9GA0LDQtdGG0LUg0L/RgNCw0LPRgNCw0LzQtS4gIjwvYj4iINCjINCw0LTQstCw0YDQvtGC0L3Ri9C8INCy0YvQv9Cw0LTQutGDINCy0Ysg0YDRi9C30YvQutGD0LXRhtC1INC/0LDRiNC60L7QtNC30ZbRhtGMINCy0LDRiNGLINC00LDQtNC30LXQvdGL0Y8g0YjQutC+0LTQvdCw0YHQvdGL0LzRliDQv9GA0LDQs9GA0LDQvNCw0LzRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i0K8g0LTQsNCy0Y/RgNCw0Y4g0LPRjdGC0LDQvNGDINC00LDQtNCw0YLQutGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiDQv9Cw0LTQutC70Y7Rh9Cw0L3RiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiLQndCw0LvQsNC00LfRltGG0YwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i0JDQtNC60LvRjtGH0YvRhtGG0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+ItCh0LXRgdGB0ZbRjyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+ItCf0YDQsNGG0Y/Qs9C70LDRgdGG0Yw6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV90cmFuc21pdHRlZCIgbXNnaWQ9Ijc5ODgxNjc2NzI5ODIxOTkwNjEiPiLQkNC00L/RgNCw0Z7Qu9C10L3QsDoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkYXRhX3JlY2VpdmVkIiBtc2dpZD0iNDA2Mjc3NjkyOTM3NjA2NzgyMCI+ItCQ0YLRgNGL0LzQsNC90LA6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGF0YV92YWx1ZV9mb3JtYXQiIG1zZ2lkPSIyMTkyNDY2NTU3ODI2ODk3NTgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPiDQsdCw0LnRgiAvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkczwveGxpZmY6Zz4g0L/QsNC60LXRgtGLIjwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmM0NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gYXR0ZW1wdHMgdG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FybmluZyIgbXNnaWQ9IjU0NzA3NDM1NzY2NjAxNjAwNzkiPiJCeSBwcm9jZWVkaW5nLCB5b3UgYXJlIGdpdmluZyB0aGUgYXBwbGljYXRpb24gcGVybWlzc2lvbiB0byBpbnRlcmNlcHQgYWxsIG5ldHdvcmsgdHJhZmZpYy4gIjxiPiJEbyBOT1QgYWNjZXB0IHVubGVzcyB5b3UgdHJ1c3QgdGhlIGFwcGxpY2F0aW9uLiI8L2I+IiBPdGhlcndpc2UsIHlvdSBydW4gdGhlIHJpc2sgb2YgaGF2aW5nIHlvdXIgZGF0YSBjb21wcm9taXNlZCBieSBtYWxpY2lvdXMgc29mdHdhcmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IkkgdHJ1c3QgdGhpcyBhcHBsaWNhdGlvbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4gaXMgY29ubmVjdGVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IkNvbmZpZ3VyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc2Nvbm5lY3QiIG1zZ2lkPSI5NzE0MTIzMzgzMDQyMDAwNTYiPiJEaXNjb25uZWN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiJTZXNzaW9uOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+IkR1cmF0aW9uOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdHJhbnNtaXR0ZWQiIG1zZ2lkPSI3OTg4MTY3NjcyOTgyMTk5MDYxIj4iU2VudDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3JlY2VpdmVkIiBtc2dpZD0iNDA2Mjc3NjkyOTM3NjA2NzgyMCI+IlJlY2VpdmVkOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdmFsdWVfZm9ybWF0IiBtc2dpZD0iMjE5MjQ2NjU1NzgyNjg5NzU4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkczwveGxpZmY6Zz4gYnl0ZXMgLyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+IHBhY2tldHMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1ldC9zdHJpbmdzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCmluZGV4IGVjMTYzYWYuLjdjMGFhZmUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTE2LDEwICsxNiwxMCBAQAogCiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INiq2YTYp9i0INmF24zigIzaqdmG2K8g24zaqSDYp9iq2LXYp9mEIFZQTiDYp9uM2KzYp9ivINqp2YbYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4i4oCPPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INiq2YTYp9i0INmF24zigIzaqdmG2K8g24zaqSDYp9iq2LXYp9mEIFZQTiDYp9uM2KzYp9ivINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+Itio2Kcg2KfYr9in2YXZhyDYr9in2K/ZhtiMINio2Ycg2KjYsdmG2KfZhdmH2ZQg2qnYp9ix2KjYsdiv24wg2KfYrNin2LLZhyDZhduM4oCM2K/Zh9uM2K8g2KrZhdin2YUg2KrYsdin2YHbjNqpINi02KjaqdmHINix2Kcg2LHZh9qv24zYsduMINqp2YbYry4gIjxiPiLYqtinINio2Ycg2KjYsdmG2KfZhdmHINin2LnYqtmF2KfYryDZhtqp2LHYr9uM2K8g2KLZhiDYsdinINmC2KjZiNmEINmG2qnZhtuM2K8uIjwvYj4iINiv2LEg2LrbjNixINin24zZhiDYtdmI2LHYqtiMINin24zZhiDYsduM2LPaqSDYsdinINmC2KjZiNmEINmF24zigIzaqdmG24zYryDaqdmHINiv2KfYr9mH4oCM2YfYp9uMINi02YXYpyDYqtmI2LPYtyDbjNqpINmG2LHZheKAjNin2YHYstin2LEg2YXYrtix2Kgg2KjZhyDYrti32LEg2KjbjNmB2KrYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i2YXZhiDYqNmHINin24zZhiDYqNix2YbYp9mF2Ycg2KfYudiq2YXYp9ivINiv2KfYsdmFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiDZhdiq2LXZhCDYp9iz2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiLigI9WUE4g2YXYqti12YQg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+Itm+24zaqdix2KjZhtiv24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i2YLYt9i5INin2KrYtdin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+Itis2YTYs9mHOiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjhmODMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiB0ZW50ZSBkZSBjcsOpZXIgdW5lIGNvbm5leGlvbiBWUE4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FybmluZyIgbXNnaWQ9IjU0NzA3NDM1NzY2NjAxNjAwNzkiPiJFbiBjb250aW51YW50LCB2b3VzIGF1dG9yaXNleiBsXCdhcHBsaWNhdGlvbiDDoCBpbnRlcmNlcHRlciBsXCdlbnNlbWJsZSBkdSB0cmFmaWMgcsOpc2VhdS4gIjxiPiJOXCdhY2NlcHRleiBQQVMsIHNhdWYgc2kgdm91cyBhdmV6IGNvbmZpYW5jZSBlbiBsXCdhcHBsaWNhdGlvbi4iPC9iPiJTaW5vbiwgdm9zIGRvbm7DqWVzIHJpc3F1ZW50IGRcJ8OqdHJlIHBpcmF0w6llcyBwYXIgdW4gbG9naWNpZWwgbWFsdmVpbGxhbnQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IkpcJ2FpIGNvbmZpYW5jZSBlbiBjZXR0ZSBhcHBsaWNhdGlvbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4gY29ubmVjdMOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IkNvbmZpZ3VyZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4iRMOpY29ubmVjdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiJTZXNzaW9uwqA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHVyYXRpb24iIG1zZ2lkPSIzNTg0NzgyNDU5OTI4NzE5NDM1Ij4iRHVyw6llIDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3RyYW5zbWl0dGVkIiBtc2dpZD0iNzk4ODE2NzY3Mjk4MjE5OTA2MSI+IkRhdGUgZFwnZW52b2nCoDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3JlY2VpdmVkIiBtc2dpZD0iNDA2Mjc3NjkyOTM3NjA2NzgyMCI+IlJlw6d1IGxlwqA6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV92YWx1ZV9mb3JtYXQiIG1zZ2lkPSIyMTkyNDY2NTU3ODI2ODk3NTgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPsKgb2N0ZXRzIC8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRzPC94bGlmZjpnPsKgcGFxdWV0cyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCmluZGV4IGUyY2I1MWEuLmI1NzBhNmQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKQEAgLTE3LDggKzE3LDggQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4KSP4KSVIFZQTiDgpJXgpKjgpYfgpJXgpY3igI3gpLbgpKgg4KSs4KSo4KS+4KSo4KWHIOCkleCkviDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+IuCknOCkvuCksOClgCDgpLDgpJbgpJXgpLAsIOCkhuCkqiDgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSV4KWLIOCkuOCkreClgCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJUg4KSf4KWN4KSw4KWI4KSr4KS84KS/4KSVIOCkheCkteCksOCli+Ckp+Ckv+CkpCDgpJXgpLDgpKjgpYcg4KSV4KWAIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpYfgpKTgpYcg4KS54KWI4KSCLiAiPGI+IuCknOCkrCDgpKTgpJUg4KSG4KSq4KSV4KWLIOCkj+CkquCljeCksuCkv+CkleClh+CktuCkqCDgpKrgpLAg4KS14KS/4KS24KWN4KS14KS+4KS4IOCkqCDgpLngpYsg4KS44KWN4oCN4KS14KWA4KSV4KS+4KSwIOCkqCDgpJXgpLDgpYfgpIIuIjwvYj4iIOCkheCkqOCljeKAjeCkr+CkpeCkviwg4KSG4KSq4KSV4KWLIOCkheCkquCkqOClhyDgpKHgpYfgpJ/gpL4g4KSV4KWHIOCkuOCkvuCkpSDgpJXgpL/gpLjgpYAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkuOClieCkq+CkvOCljeCkn+CkteClh+Ckr+CksCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSb4KWH4KSh4KS84KSb4KS+4KSh4KS8IOCkleCkv+CkjyDgpJzgpL7gpKjgpYcg4KSV4KS+IOCknOCli+CkluCkv+CkriDgpLngpYsg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i4KSu4KWB4KSd4KWHIOCkh+CkuCDgpI/gpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSq4KSwIOCkteCkv+CktuCljeCkteCkvuCkuCDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FybmluZyIgbXNnaWQ9IjU0NzA3NDM1NzY2NjAxNjAwNzkiPiLgpJzgpL7gpLDgpYAg4KSw4KSW4KSV4KSwLCDgpIbgpKog4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KS44KSt4KWAIOCkqOClh+Ckn+CkteCksOCljeCklSDgpJ/gpY3gpLDgpYjgpKvgpLzgpL/gpJUg4KSF4KS14KSw4KWL4KSn4KS/4KSkIOCkleCksOCkqOClhyDgpJXgpYAg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuClh+CkpOClhyDgpLngpYjgpIIuICI8Yj4i4KSc4KSsIOCkpOCklSDgpIbgpKrgpJXgpYsg4KSQ4KSq4KWN4KS4ICDgpKrgpLAg4KS14KS/4KS24KWN4KS14KS+4KS4IOCkqCDgpLngpYsg4KS44KWN4oCN4KS14KWA4KSV4KS+4KSwIOCkqCDgpJXgpLDgpYfgpIIuIjwvYj4iIOCkheCkqOCljeKAjeCkr+CkpeCkviwg4KSG4KSq4KSV4KWLIOCkheCkquCkqOClhyDgpKHgpYfgpJ/gpL4g4KSV4KWHIOCkuOCkvuCkpSDgpJXgpL/gpLjgpYAg4KSm4KWB4KSw4KWN4KSt4KS+4KS14KSo4KS+4KSq4KWC4KSw4KWN4KSjIOCkuOClieCkq+CkvOCljeCkn+CkteClh+Ckr+CksCDgpKbgpY3gpLXgpL7gpLDgpL4g4KSb4KWH4KSh4KS84KSb4KS+4KSh4KS8IOCkleCkv+CkjyDgpJzgpL7gpKjgpYcg4KSV4KS+IOCknOCli+CkluCkv+CkriDgpLngpYsg4KS44KSV4KSk4KS+IOCkueCliC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i4KSu4KWB4KSd4KWHIOCkh+CkuCDgpJDgpKrgpY3gpLggIOCkquCksCDgpLXgpL/gpLbgpY3gpLXgpL7gpLgg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiDgpJXgpKjgpYfgpJXgpY3igI3gpJ8g4KS54KWIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IuCkleClieCkqOCljeCkq+CkvOCkv+Ckl+CksCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i4KSh4KS/4KS44KWN4oCN4KSV4KSo4KWH4KSV4KWN4oCN4KSfIOCkleCksOClh+CkgiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZGI1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi3VqCDWg9W41oDVsdW41oLVtCDVpyDVvdW/1aXVstWu1aXVrCBWUE4g1a/VodW6OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4i1YfVodaA1bjWgtW21aHVr9Wl1azVuNW+YCDVpNW41oLWhCDVsNWh1b7VpdWs1b7VodWu1avVtiDVqdW41oLVtdWs1aHVv9aA1bjWgtW0INWl1oQg1a/VodW21aPVttWl1oHVttWl1awg1aHVtNWi1bjVstW7INaB1aHVttaB1aHVtdWr1bYg1bfVodaA1arVqDogIjxiPiLVhNWrINWo1bbVpNW41oLVttWl1oQsINWl1anVpSDVudWl1oQg1b7VvdW/1aHVsNW41oLVtCDVsNWh1b7VpdWs1b7VodWu1avVtjoiPC9iPiIg1LHVtdWs1aHVutWl1b0g1bzVq9W91a8g1a/VoSDVsdWl1oAg1b/VvtW11aHVrNW21aXWgNWoINW+1b/VodW21aPVpdWs1bjWgiDVvtW21aHVvdWh1oDVodaAINWw1aHVvtWl1azVvtWh1a7VttWl1oDVqyDVr9W41bLVtNWr1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+ItS11b0g1b7VvdW/1aHVsNW41oLVtCDVpdW0INWh1bXVvSDVrtaA1aHVo9aA1avVtjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4t1agg1a/VodW61aHVr9aB1b7VodWuINWnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+ItS/1aHWgNWj1aHVvtW41oDVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdCIgbXNnaWQ9Ijk3MTQxMjMzODMwNDIwMDA1NiI+ItSx1bbVu9Wh1b/VpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiLUsdW31a3VodW/1aHVt9aA1bvVodW2YCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+ItWP1ofVuNWy1bjWgtWp1bXVuNaC1bbVqNWdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV90cmFuc21pdHRlZCIgbXNnaWQ9Ijc5ODgxNjc2NzI5ODIxOTkwNjEiPiLViNaC1bLVodaA1a/VvtWl1awg1afVnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfcmVjZWl2ZWQiIG1zZ2lkPSI0MDYyNzc2OTI5Mzc2MDY3ODIwIj4i1Y3Vv9Wh1oHVvtWl1awg1afVnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdmFsdWVfZm9ybWF0IiBtc2dpZD0iMjE5MjQ2NjU1NzgyNjg5NzU4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkczwveGxpZmY6Zz4g1aLVodW11akgLyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+INaD1aHVqdWl1akiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAppbmRleCBiYjg0NWVlLi4zMzVmNWU0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCkBAIC0xNiwxMCArMTYsMTAgQEAKIAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDXnteg16HXlCDXnNeZ16bXldeoINeX15nXkdeV16ggVlBOLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4i15DXnSDXqtee16nXmdeaLCDXkNeq15Qg157Xoteg15nXpyDXnNeZ15nXqdeV150g15TXqNep15DXlCDXnNei15vXkSDXkNeqINeb15wg15TXqteg15XXoteUINeR16jXqdeqLiAiPGI+IiDXkNecINeq16fXkdecINeQ15zXkCDXkNedINeb158g15DXqteUINeh15XXnteaINei15wg15TXmdeZ16nXldedLiAiPC9iPiIg15DXl9eo16osINeQ16rXlCDXl9eV16nXoyDXkNeqINeU16DXqteV16DXmdedINep15zXmiDXnNeh15vXoNeUINep15wg16TXkteZ16LXlCDXotecLdeZ15PXmSDXqteV15vXoNeUINeW15PXldeg15nXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i15DXoNeZINeh15XXnteaINei15wg15nXmdep15XXnSDXlteULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiDXnteX15XXkdeoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+IuKAjzx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDXnteg16HXlCDXnNeZ16bXldeoINeX15nXkdeV16ggVlBOLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4i15DXnSDXqtee16nXmdeaLCDXkNeq15Qg157Xoteg15nXpyDXnNeQ16TXnNeZ16fXpteZ15Qg15TXqNep15DXlCDXnNei15vXkSDXkNeqINeb15wg15TXqteg15XXoteUINeR16jXqdeqLiAiPGI+IiDXkNecINeq16fXkdecINeQ15zXkCDXkNedINeb158g15DXqteUINeh15XXnteaINei15wg15TXkNek15zXmden16bXmdeULiAiPC9iPiIg15DXl9eo16osINeQ16rXlCDXl9eV16nXoyDXkNeqINeU16DXqteV16DXmdedINep15zXmiDXnNeh15vXoNeUINep15wg16TXkteZ16LXlCDXotecLdeZ15PXmSDXqteV15vXoNeUINeW15PXldeg15nXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i15DXoNeZINeh15XXnteaINei15wg15DXpNec15nXp9em15nXlCDXlteVLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IuKAj1ZQTiDXnteX15XXkdeoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IteU15LXk9eoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdCIgbXNnaWQ9Ijk3MTQxMjMzODMwNDIwMDA1NiI+Iteg16rXpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlc3Npb24iIG1zZ2lkPSI2NDcwNjI4NTQ5NDczNjQxMDMwIj4i15TXpNei15zXlCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MGQzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDhg6rhg5Phg5jhg5rhg53hg5Hhg6EgVlBOIOGDmeGDkOGDleGDqOGDmOGDoOGDmOGDoSDhg6jhg5Thg6Xhg5vhg5zhg5Dhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FybmluZyIgbXNnaWQ9IjU0NzA3NDM1NzY2NjAxNjAwNzkiPiLhg5Lhg5Dhg5Lhg6Dhg6vhg5Thg5rhg5Thg5Hhg5jhg6Eg4YOo4YOU4YOb4YOX4YOu4YOV4YOU4YOV4YOQ4YOo4YOYLCDhg5Dhg57hg5rhg5jhg5nhg5Dhg6rhg5jhg5Dhg6Eg4YOU4YOl4YOc4YOU4YOR4YOQIOGDpeGDoeGDlOGDmuGDqOGDmCDhg5Lhg5Dhg5Phg5Dhg6rhg5Thg5vhg6Phg5rhg5gg4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOU4YOR4YOY4YOhIOGDm+GDneGDnuGDneGDleGDlOGDkeGDmOGDoSDhg6Hhg5Dhg6jhg6Phg5Dhg5rhg5Thg5Hhg5AuICI8Yj4i4YOQ4YOgIOGDkuGDkOGDnOGDkOGDkuGDoOGDq+GDneGDlywg4YOX4YOjIOGDkOGDoCDhg5Thg5zhg5Phg53hg5Hhg5jhg5cg4YOQ4YOe4YOa4YOY4YOZ4YOQ4YOq4YOY4YOQ4YOhLiI8L2I+IiDhg6zhg5jhg5zhg5Dhg5Dhg6bhg5vhg5Phg5Thg5Ig4YOo4YOU4YOb4YOX4YOV4YOU4YOV4YOQ4YOo4YOYIOGDqOGDlOGDoeGDkOGDq+GDmuGDneGDkCDhg5vhg5Dhg5Xhg5zhg5Qg4YOe4YOg4YOd4YOS4YOg4YOQ4YOb4YOQ4YOhIOGDl+GDpeGDleGDlOGDnCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg5fhg5Dhg5wg4YOs4YOV4YOT4YOd4YOb4YOY4YOhIOGDoeGDkOGDqOGDo+GDkOGDmuGDlOGDkeGDkCDhg5vhg5jhg5Thg6rhg5Thg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IuGDleGDlOGDnOGDk+GDneGDkeGDmCDhg5Dhg5sg4YOQ4YOe4YOa4YOY4YOZ4YOQ4YOq4YOY4YOQ4YOhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiDhg5Phg5Dhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5Thg5Hhg6Phg5rhg5jhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25maWd1cmUiIG1zZ2lkPSI0OTA1NTE4Mzc1NTc0NzkxMzc1Ij4i4YOZ4YOd4YOc4YOk4YOY4YOS4YOj4YOg4YOQ4YOq4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdCIgbXNnaWQ9Ijk3MTQxMjMzODMwNDIwMDA1NiI+IuGDmeGDkOGDleGDqOGDmOGDoOGDmOGDoSDhg5Lhg5Dhg6zhg6fhg5Xhg5Thg6Lhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+IuGDoeGDlOGDoeGDmOGDkDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkdXJhdGlvbiIgbXNnaWQ9IjM1ODQ3ODI0NTk5Mjg3MTk0MzUiPiLhg67hg5Dhg5zhg5Lhg6Dhg6vhg5rhg5jhg5Xhg53hg5Hhg5A6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV90cmFuc21pdHRlZCIgbXNnaWQ9Ijc5ODgxNjc2NzI5ODIxOTkwNjEiPiLhg5Lhg5Dhg5Lhg5bhg5Dhg5Xhg5zhg5jhg5rhg5g6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV9yZWNlaXZlZCIgbXNnaWQ9IjQwNjI3NzY5MjkzNzYwNjc4MjAiPiLhg5vhg5jhg6bhg5Thg5Hhg6Phg5rhg5g6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV92YWx1ZV9mb3JtYXQiIG1zZ2lkPSIyMTkyNDY2NTU3ODI2ODk3NTgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPiDhg5Hhg5Dhg5jhg6Lhg5ggLyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+IOGDnuGDkOGDmeGDlOGDouGDmCI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3OWUyNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOGeluGfkuGemeGetuGemeGetuGemOKAi+GelOGehOGfkuGegOGevuGej+KAi+GegOGetuGemuKAi+Gej+Gel+GfkuGeh+GetuGelOGfiyBWUE4g4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FybmluZyIgbXNnaWQ9IjU0NzA3NDM1NzY2NjAxNjAwNzkiPiLhnorhn4ThnpnigIvhnpThnpPhn5Lhno8g4Z6i4Z+S4Z6T4Z6A4oCL4Z6A4Z+G4Z6W4Z674Z6E4oCL4Z6V4Z+S4Z6K4Z6b4Z+L4oCL4Z6f4Z634Z6R4Z+S4Z6S4Z634oCL4Z6y4Z+S4Z6Z4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6R4Z6U4Z+L4Z6f4Z+S4Z6A4Z624Z6P4Z+L4oCL4Z6F4Z6a4Z624Z6F4Z6a4Z6O4Z+N4oCL4Z6U4Z6O4Z+S4Z6K4Z624Z6J4Z+UICI8Yj4i4Z6A4Z674Z+G4oCL4Z6R4Z6R4Z694Z6b4oCLIOGem+Geu+Gfh+KAi+Gej+GfkuGemuGetuKAi+Gej+GfguKAi+GeouGfkuGek+GegOKAi+GekeGeu+GegOKAi+GeheGet+Gej+GfkuGej+KAi+GegOGemOGfkuGemOGenOGet+GekuGeuOGflCI8L2I+IiDhnpThnr7igIvhnpjhnrfhnpPigIvhnorhnrzhnoXhn5LhnpPhn4Hhn4figIvhnpHhn4Eg4Z6i4Z+S4Z6T4Z6A4oCL4Z6K4Z+G4Z6O4Z6+4Z6a4Z6A4Z624Z6a4oCL4Z6U4Z+S4Z6a4Z6I4Z6Y4oCL4Z6T4Z654Z6E4oCL4Z6C4Z+S4Z6a4Z+E4Z+H4Z6Q4Z+S4Z6T4Z624Z6A4Z+LIOGeiuGfhOGemeKAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAi+GelOGetuGek+KAi+Gen+GemOGfkuGemuGelOGen+GemOGfkuGemuGeveGem+KAi+GeiuGfhOGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GeluGfkuGemeGetuGelOGetuGekeGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjI4ODkyMjY0MDg3NjU4MTAxNzMiPiLhnoHhn5Lhnonhnrvhn4bigIvhnpHhnrvhnoDhnoXhnrfhno/hn5Lhno/igIvigIvigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpPhn4Hhn4figIvhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiLhnpThnrbigIvhnpPigIvhnpfhn5LhnofhnrbhnpThn4sgVlBOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IuGegOGfhuGejuGej+Gfi+KAi+GemuGeheGek+GetuGen+GemOGfkuGeluGfkOGek+GfkuGekiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc2Nvbm5lY3QiIG1zZ2lkPSI5NzE0MTIzMzgzMDQyMDAwNTYiPiLhnpXhn5LhnorhnrbhnoXhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+IuGen+GemOGfkOGemeGfliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+IuGekOGet+GemuGenOGfgeGem+GetuGfliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdHJhbnNtaXR0ZWQiIG1zZ2lkPSI3OTg4MTY3NjcyOTgyMTk5MDYxIj4i4Z6U4Z624Z6T4oCL4Z6V4Z+S4Z6J4Z6+4Z+WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV9yZWNlaXZlZCIgbXNnaWQ9IjQwNjI3NzY5MjkzNzYwNjc4MjAiPiLhnpThnrbhnpPigIvhnpHhnpHhnr3hnpvhn5YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3ZhbHVlX2Zvcm1hdCIgbXNnaWQ9IjIxOTI0NjY1NTc4MjY4OTc1ODAiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJHM8L3hsaWZmOmc+IOGelOGfgyAvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkczwveGxpZmY6Zz4g4Z6A4Z6J4Z+S4Z6F4Z6U4Z+L4oCL4Z6W4Z+Q4Z6P4Z+M4Z6Y4Z624Z6TIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjUyMTZiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4Lqe4Lqw4LqN4Lqy4LqN4Lqy4Lqh4Lqq4LuJ4Lqy4LqH4LqB4Lqy4LqZ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuIIFZQTi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+IuC6luC7ieC6suC6lOC6s+C7gOC6meC6teC6meC6leC7jeC7iCwg4LuB4Lqh4LuI4LqZ4LqX4LuI4Lqy4LqZ4LqB4Lqz4Lql4Lqx4LqH4LqI4Lqw4LuD4Lqr4LuJ4Lqq4Lq04LqU4LuB4LqB4LuI4LuB4Lqt4Lqx4Lqa4Lqe4Lql4Lq04LuA4LqE4LqK4Lqx4LqZIOC7g+C6meC6geC6suC6meC6lOC6seC6geC6guC7jeC7ieC6oeC6ueC6meC6iOC6sOC6peC6suC6iOC6reC6meC7g+C6meC7gOC6hOC6t+C6reC6guC7iOC6suC6jeC6l+C6seC6h+C7neC6u+C6lC4gIjxiPiLguqLgu4jgurLguo3guq3guqHguq7gurHgupog4LqZ4Lqt4LqB4LqI4Lqy4LqB4Lqn4LuI4Lqy4LqX4LuI4Lqy4LqZ4LqI4Lqw4LuA4LqK4Lq34LuI4Lqt4LuD4LqI4LuB4Lqt4Lqx4Lqa4Lqe4Lql4Lq04LuA4LqE4LqK4Lqx4LqZ4LqU4Lqx4LuI4LqH4LqB4LuI4Lqy4LqnLiI8L2I+IiDgupbgu4ngurLguprgu43gu4jgupTgurHgu4jguofgupngurHgu4ngupksIOC6l+C7iOC6suC6meC6iOC6sOC6leC6u+C6geC6ouC6ueC7iOC7g+C6meC6hOC6p+C6suC6oeC6quC7iOC6veC6hyDgupfgurXgu4jguoLgu43gu4nguqHgurngupnguoLguq3guofgupfgu4jgurLgupnguojgurDgupbgurfguoHguoTgurjguoHguoTgurLguqHgu4LgupTguo3guorguq3guprgu4HguqfgupfgurXgu4jgu4DgupvgurHgupnguq3gurHgupngupXgurDguqXgurLguo0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IuC6guC7ieC6reC6jeC7gOC6iuC6t+C7iOC6reC7geC6reC6seC6muC6nuC6peC6tOC7gOC6hOC6iuC6seC6meC6meC6teC7iS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiLgu4Dguorgurfgu4jguq3guqHgupXgu43gu4ggVlBOIOC7geC6peC7ieC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiLgupvgurHguprguoTgu4jgurIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i4LqV4Lqx4LqU4LqB4Lqy4LqZ4LuA4LqK4Lq34LuI4Lqt4Lqh4LqV4LuN4LuIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiLgu4DguorguqrguorgurHgupk6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHVyYXRpb24iIG1zZ2lkPSIzNTg0NzgyNDU5OTI4NzE5NDM1Ij4i4LuE4Lql4LqN4Lqw4LuA4Lqn4Lql4LqyOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdHJhbnNtaXR0ZWQiIG1zZ2lkPSI3OTg4MTY3NjcyOTgyMTk5MDYxIj4i4Lqq4Lq74LuI4LqHOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfcmVjZWl2ZWQiIG1zZ2lkPSI0MDYyNzc2OTI5Mzc2MDY3ODIwIj4i4Lqu4Lqx4LqaOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdmFsdWVfZm9ybWF0IiBtc2dpZD0iMjE5MjQ2NjU1NzgyNjg5NzU4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkczwveGxpZmY6Zz4g4LuE4LqaIC8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRzPC94bGlmZjpnPiDgu4Hgup7gurHguoHgu4DguoHgurHgupQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4N2JiNzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBWUE4g0YXQvtC70LHQvtC70YLRi9CzINKv0q/RgdCz0Y3RhSDQs9GN0LYg0LHQsNC50L3QsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+ItKu0YDQs9GN0LvQttC70q/Sr9C70YHRjdC90Y3RjdGAwqDRgtCwINCw0L/Qv9C70LjQutC10YjQvdC0INCx0q/RhSDRgdKv0LvQttGN0Y3QvdC40Lkg0YPRgNGB0LPQsNC70YvQsyDRgtCw0YHQu9Cw0YUg0LfTqdCy0YjTqdOp0YDQu9C40LnQsyDTqdCz06nRhSDQsdC+0LvQvdC+LiAiPGI+ItCQ0L/Qv9C40LrQtdGI0L0g0LHQsNGC0LDQu9Cz0LDQsNCz0q/QuSDQs9GN0LYg0q/Qt9GB0Y3QvSDRgtC+0YXQuNC+0LvQtNC+0LvQtCDQuyDQt9Op0LLRiNOp06nRgNGHINCx0L7Qu9C+0YDRhdCz0q/QuS4iPC9iPiIg0JHRg9GB0LDQtCDRgtC+0YXQuNC+0LvQtNC+0LvQtCDRgtCwINOp06nRgNC40LnQvSDQtNCw0YLQsNCzINGF0L7RgNGC0L7QuSDRgdC+0YTRgtCy0LXRgNC40LnQvSDQsNGO0YPQu9C0INOp0YDRgtOp0YUg0Y3RgNGB0LTRjdC70LjQudCzINKv0q/RgdCz0Y3QtiDQsdCw0LnQvdCwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjI4ODkyMjY0MDg3NjU4MTAxNzMiPiLQkdC4INGN0L3RjSDQsNC/0L/Qu9C40LrQtdGI0L3QtCDQuNGC0LPRjdC2INCx0LDQudC90LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGVnYWN5X3RpdGxlIiBtc2dpZD0iMTkyOTM2MjUwMDY2NTgwOTY0Ij4iVlBOINGF0L7Qu9Cx0L7Qs9C00L7QsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiLQotC+0YXQuNGA0YPRg9C70LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc2Nvbm5lY3QiIG1zZ2lkPSI5NzE0MTIzMzgzMDQyMDAwNTYiPiLQodCw0LvQs9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+ItCh0LXRiNC9OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+ItKu0YDQs9GN0LvQttC70Y3RhSDRhdGD0LPQsNGG0LDQsDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3RyYW5zbWl0dGVkIiBtc2dpZD0iNzk4ODE2NzY3Mjk4MjE5OTA2MSI+ItCY0LvQs9GN0Y3RgdGN0L06Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV9yZWNlaXZlZCIgbXNnaWQ9IjQwNjI3NzY5MjkzNzYwNjc4MjAiPiLQpdKv0LvRjdGN0L0g0LDQstGB0LDQvToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3ZhbHVlX2Zvcm1hdCIgbXNnaWQ9IjIxOTI0NjY1NTc4MjY4OTc1ODAiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJHM8L3hsaWZmOmc+INCx0LDQudGCLyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+INC/0LDQutC10YIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1tcy9zdHJpbmdzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCmluZGV4IGY3MTY0MjIuLjZiZmZjOTggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKQEAgLTE3LDggKzE3LDggQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gZm9yc8O4a2VyIMOlIGV0YWJsZXJlIGVuIFZQTi10aWxrb2JsaW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4iVmVkIMOlIGZvcnRzZXR0ZSBnaXIgZHUgYXBwbGlrYXNqb25lbiB0aWxsYXRlbHNlIHRpbCDDpSBmYW5nZSBvcHAgYWxsIG5ldHR2ZXJrc3RyYWZpa2suICI8Yj4iSUtLRSBnb2R0YSBtZWQgbWluZHJlIGR1IHN0b2xlciBww6UgYXBwbGlrYXNqb25lbi4iPC9iPiIgRWxsZXJzIHJpc2lrZXJlciBkdSBhdCBkYXRhZW5lIGRpbmUga29tcHJvbWl0dGVyZXMgYXYgZW4gb25kc2lubmV0IHByb2dyYW12YXJlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjI4ODkyMjY0MDg3NjU4MTAxNzMiPiJKZWcgc3RvbGVyIHDDpSBkZW5uZSBhcHBsaWthc2pvbmVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4iVmVkIMOlIGZvcnRzZXR0ZSBnaXIgZHUgYXBwZW4gdGlsbGF0ZWxzZSB0aWwgw6UgZmFuZ2Ugb3BwIGFsbCBuZXR0dmVya3N0cmFmaWtrLiAiPGI+IklLS0UgZ29kdGEgbWVkIG1pbmRyZSBkdSBzdG9sZXIgcMOlIGFwcGVuLiI8L2I+IiBFbGxlcnMgcmlzaWtlcmVyIGR1IGF0IGRhdGFlbmUgZGluZSBrb21wcm9taXR0ZXJlcyBhdiBlbiBvbmRzaW5uZXQgcHJvZ3JhbXZhcmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IkplZyBzdG9sZXIgcMOlIGRlbm5lIGFwcGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiBlciB0aWxrb2JsZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25maWd1cmUiIG1zZ2lkPSI0OTA1NTE4Mzc1NTc0NzkxMzc1Ij4iS29uZmlndXJlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRpc2Nvbm5lY3QiIG1zZ2lkPSI5NzE0MTIzMzgzMDQyMDAwNTYiPiJLb2JsZSBmcmEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzIxMWNiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4KSP4KSJ4KSf4KS+IFZQTiDgpJzgpKHgpL7gpKgg4KS44KS/4KSw4KWN4KSc4KSo4KS+IOCkl+CksOCljeCkqOClhyDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+IuCkheCkl+CkvuCkoeClgCDgpKzgpKLgpYfgpLAsIOCkpOCkquCkvuCkiOCkgeCksuClhyDgpK/gpLgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkuOCkrOCliCDgpKjgpYfgpJ/gpLXgpLDgpY3gpJXgpJXgpYsg4KSf4KWN4KSw4KS+4KSr4KS/4KSVIOCkheCkteCksOCli+CkpyDgpJfgpLDgpY3gpKgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOClgSDgpLngpYHgpIHgpKbgpYjgpJvgpaQgIjxiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpL7gpIgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KWLIOCkteCkv+CktuCljeCkteCkvuCkuCDgpKjgpLLgpL7gpJfgpYfgpLjgpK7gpY3gpK4g4KSv4KS44KSy4KS+4KSIIOCkuOCljeCkteClgOCkleCkvuCksCDgpKjgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9iPiIg4KSF4KSo4KWN4KSv4KSl4KS+LCDgpKTgpKrgpL7gpIjgpIEg4KSG4KSr4KWN4KSo4KWLIOCkoeClh+Ckn+CkviDgpJbgpLDgpL7gpKwg4KS44KSr4KWN4KSf4KS14KWH4KSw4KSm4KWN4KS14KS+4KSw4KS+IOCknOCli+CkluCkv+CkruCkruCkviDgpKrgpLDgpY3gpKjgpYEg4KS54KWB4KSo4KWH4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IuCkriDgpK/gpLgg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkteCkv+CktuCljeCkteCkvuCkuCDgpJfgpLDgpY3gpJvgpYHgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4g4KSc4KWL4KSh4KS/4KSP4KSV4KWLIOCkmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiLgpJXgpKjgpY3gpKvgpL/gpJfgpLAg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdCIgbXNnaWQ9Ijk3MTQxMjMzODMwNDIwMDA1NiI+IuCkteCkv+CkmuCljeCkm+Clh+CkpuCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+IuCkuOCkpOCljeCksDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkdXJhdGlvbiIgbXNnaWQ9IjM1ODQ3ODI0NTk5Mjg3MTk0MzUiPiLgpIXgpLXgpKfgpL86Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV90cmFuc21pdHRlZCIgbXNnaWQ9Ijc5ODgxNjc2NzI5ODIxOTkwNjEiPiLgpKrgpKDgpL7gpIfgpK/gpYs6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV9yZWNlaXZlZCIgbXNnaWQ9IjQwNjI3NzY5MjkzNzYwNjc4MjAiPiLgpKrgpY3gpLDgpL7gpKrgpY3gpKQg4KSt4KSv4KWLOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdmFsdWVfZm9ybWF0IiBtc2dpZD0iMjE5MjQ2NjU1NzgyNjg5NzU4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkczwveGxpZmY6Zz4g4KSs4KS+4KSH4KSf4KS54KSw4KWCIC8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRzPC94bGlmZjpnPiDgpKrgpY3gpK/gpL7gpJXgpYfgpJ/gpLngpLDgpYIiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1uZS9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzIxMWNiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLW5lL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgpI/gpIngpJ/gpL4gVlBOIOCknOCkoeCkvuCkqCDgpLjgpL/gpLDgpY3gpJzgpKjgpL4g4KSX4KSw4KWN4KSo4KWHIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4i4KSF4KSX4KS+4KSh4KWAIOCkrOCkouClh+CksCwg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkr+CkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS44KSs4KWIIOCkqOClh+Ckn+CkteCksOCljeCkleCkleCliyDgpJ/gpY3gpLDgpL7gpKvgpL/gpJUg4KSF4KS14KSw4KWL4KSnIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWBIOCkueClgeCkgeCkpuCliOCkm+ClpCAiPGI+IuCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpYsg4KS14KS/4KS24KWN4KS14KS+4KS4IOCkqOCksuCkvuCkl+Clh+CkuOCkruCljeCkriDgpK/gpLjgpLLgpL7gpIgg4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkqOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L2I+IiDgpIXgpKjgpY3gpK/gpKXgpL4sIOCkpOCkquCkvuCkiOCkgSDgpIbgpKvgpY3gpKjgpYsg4KSh4KWH4KSf4KS+IOCkluCksOCkvuCkrCDgpLjgpKvgpY3gpJ/gpLXgpYfgpLDgpKbgpY3gpLXgpL7gpLDgpL4g4KSc4KWL4KSW4KS/4KSu4KSu4KS+IOCkquCksOCljeCkqOClgSDgpLngpYHgpKjgpYfgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i4KSuIOCkr+CkuCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KS14KS/4KS24KWN4KS14KS+4KS4IOCkl+CksOCljeCkm+ClgeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV90aXRsZSIgbXNnaWQ9IjE5MjkzNjI1MDA2NjU4MDk2NCI+IlZQTiDgpJzgpYvgpKHgpL/gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IuCkleCkqOCljeCkq+Ckv+Ckl+CksCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i4KS14KS/4KSa4KWN4KSb4KWH4KSm4KSoIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlc3Npb24iIG1zZ2lkPSI2NDcwNjI4NTQ5NDczNjQxMDMwIj4i4KS44KSk4KWN4KSwOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+IuCkheCkteCkp+CkvzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3RyYW5zbWl0dGVkIiBtc2dpZD0iNzk4ODE2NzY3Mjk4MjE5OTA2MSI+IuCkquCkoOCkvuCkh+Ckr+ClizoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3JlY2VpdmVkIiBtc2dpZD0iNDA2Mjc3NjkyOTM3NjA2NzgyMCI+IuCkquCljeCksOCkvuCkquCljeCkpCDgpK3gpK/gpYs6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV92YWx1ZV9mb3JtYXQiIG1zZ2lkPSIyMTkyNDY2NTU3ODI2ODk3NTgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPiDgpKzgpL7gpIfgpJ/gpLngpLDgpYIgLyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+IOCkquCljeCkr+CkvuCkleClh+Ckn+CkueCksOClgiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlMGVkNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSI4MzU5MTc1OTk5MDA2ODMzNDYyIj4iVlBOIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC2reC3j+C3gOC2uuC2muC3iiDgt4Pgt5Dgtq/gt5PgtrjgtqcgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FybmluZyIgbXNnaWQ9IjU0NzA3NDM1NzY2NjAxNjAwNzkiPiLgtongtq/gt5Lgtrvgt5Lgtrrgtqcg4La64LeP4La44LeZ4Lax4LeKLCDgt4Pgt5Lgtrrgtr3gt5Qg4Lai4LeP4La9IOC2reC2r+C2tuC2r+C2uiDgtrjgtpzgtq/gt5Mg4LaF4La94LeK4La94LePIOC2nOC3kOC2seC3k+C2uOC2pyDgtpTgtrYg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ngtrrgt5IuICI8Yj4i4LaU4La2IOC2uuC3meC2r+C3lOC2uCDgt4Dgt5Lgt4Hgt4rgt4Dgt4/gt4Mg4Lax4Lec4Laa4La74La64LeSIOC2seC2uOC3iiDgtrTgt5Lgt4Xgt5LgtpzgtrHgt4rgtrEg4LaR4La04LePIjwvYj4iIOC2seC3kOC2reC3hOC3nOC2reC3iiwg4LaF4Lax4LeS4LeC4LeK4LanIOC2uOC3mOC2r+C3lOC2muC3j+C2guC2nOC2uuC2muC3iiDgtrjgtp/gt5LgtrHgt4og4LaU4La24Lac4LeaIOC2r+C2reC3iuC2rSDgtrHgt5Lgtrvgt4/gt4Dgtrvgtqvgtrog4LeA4LeT4La44LeaIOC2heC3gOC2r+C3j+C2seC2uOC2muC3iiDgtpTgtrbgtqcg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjI4ODkyMjY0MDg3NjU4MTAxNzMiPiLgtrjgt5ngtrgg4La64LeZ4Lav4LeU4La4IOC2uOC2pyDgt4Dgt5Lgt4Hgt4rgt4Dgt4/gt4Pgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGVnYWN5X3RpdGxlIiBtc2dpZD0iMTkyOTM2MjUwMDY2NTgwOTY0Ij4iVlBOIOC3g+C2uOC3iuC2tuC2seC3iuC2sOC3kuC2reC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiLgt4Dgt5LgtrHgt4rigI3gtrrgt4/gt4Mg4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdCIgbXNnaWQ9Ijk3MTQxMjMzODMwNDIwMDA1NiI+IuC3gOC3kuC3g+C2seC3iuC2sOC3kiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXNzaW9uIiBtc2dpZD0iNjQ3MDYyODU0OTQ3MzY0MTAzMCI+IuC3g+C3kOC3g+C3kuC2ujoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkdXJhdGlvbiIgbXNnaWQ9IjM1ODQ3ODI0NTk5Mjg3MTk0MzUiPiLgtprgt4/gtr0g4LeD4LeT4La44LeP4LeAOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdHJhbnNtaXR0ZWQiIG1zZ2lkPSI3OTg4MTY3NjcyOTgyMTk5MDYxIj4i4La64LeA4LaxIOC2veC2rzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3JlY2VpdmVkIiBtc2dpZD0iNDA2Mjc3NjkyOTM3NjA2NzgyMCI+IuC2veC3kOC2tuC3kuC2q+C3kjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3ZhbHVlX2Zvcm1hdCIgbXNnaWQ9IjIxOTI0NjY1NTc4MjY4OTc1ODAiPiLgtrbgtrrgt5LgtqcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPiAvIOC2tOC3kOC2muC3kOC2p+C3iuC2p+C3lCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtc2kvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlMGVkNgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1zaS9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InByb21wdCIgbXNnaWQ9IjgzNTkxNzU5OTkwMDY4MzM0NjIiPiJWUE4g4LeD4La44LeK4La24Lax4LeK4Law4Lat4LeP4LeA4La64Laa4LeKIOC3g+C3kOC2r+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3YXJuaW5nIiBtc2dpZD0iNTQ3MDc0MzU3NjY2MDE2MDA3OSI+IuC2ieC2r+C3kuC2u+C3kuC2uuC2pyDgtrrgt4/gtrjgt5ngtrHgt4osIOC3g+C3kuC2uuC2veC3lCDgtqLgt4/gtr0g4Lat4Lav4La24Lav4La6IOC2uOC2nOC2r+C3kyDgtoXgtr3gt4rgtr3gt48g4Lac4LeQ4Lax4LeT4La44LanIOC2lOC2tiDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2uuC3ki4gIjxiPiLgtpTgtrYg4La64LeZ4Lav4LeU4La4IOC3gOC3kuC3geC3iuC3gOC3j+C3gyDgtrHgt5zgtprgtrvgtrrgt5Ig4Lax4La44LeKIOC2tOC3kuC3heC3kuC2nOC2seC3iuC2sSDgtpHgtrTgt48iPC9iPiIg4Lax4LeQ4Lat4LeE4Lec4Lat4LeKLCDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La44LeY4Lav4LeU4Laa4LeP4LaC4Lac4La64Laa4LeKIOC2uOC2n+C3kuC2seC3iiDgtpTgtrbgtpzgt5og4Lav4Lat4LeK4LatIOC2seC3kuC2u+C3j+C3gOC2u+C2q+C2uiDgt4Dgt5Pgtrjgt5og4LaF4LeA4Lav4LeP4Lax4La44Laa4LeKIOC2lOC2tuC2pyDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXB0IiBtc2dpZD0iMjg4OTIyNjQwODc2NTgxMDE3MyI+IuC2uOC3meC2uCDgtrrgt5ngtq/gt5Tgtrgg4La44LanIOC3gOC3kuC3geC3iuC3gOC3j+C3g+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsZWdhY3lfdGl0bGUiIG1zZ2lkPSIxOTI5MzYyNTAwNjY1ODA5NjQiPiJWUE4g4LeD4La44LeK4La24Lax4LeK4Law4LeS4Lat4La64LeSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlIiBtc2dpZD0iNDkwNTUxODM3NTU3NDc5MTM3NSI+IuC3gOC3kuC2seC3iuKAjeC2uuC3j+C3gyDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i4LeA4LeS4LeD4Lax4LeK4Law4LeSIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlc3Npb24iIG1zZ2lkPSI2NDcwNjI4NTQ5NDczNjQxMDMwIj4i4LeD4LeQ4LeD4LeS4La6OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+IuC2muC3j+C2vSDgt4Pgt5Pgtrjgt4/gt4A6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV90cmFuc21pdHRlZCIgbXNnaWQ9Ijc5ODgxNjc2NzI5ODIxOTkwNjEiPiLgtrrgt4DgtrEg4La94LavOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfcmVjZWl2ZWQiIG1zZ2lkPSI0MDYyNzc2OTI5Mzc2MDY3ODIwIj4i4La94LeQ4La24LeS4Lar4LeSOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdmFsdWVfZm9ybWF0IiBtc2dpZD0iMjE5MjQ2NjU1NzgyNjg5NzU4MCI+IuC2tuC2uuC3kuC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJHM8L3hsaWZmOmc+IC8g4La04LeQ4Laa4LeQ4Lan4LeK4Lan4LeUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMjVkNDEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0icHJvbXB0IiBtc2dpZD0iODM1OTE3NTk5OTAwNjgzMzQ2MiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDlmJfoqablu7rnq4sgVlBOIOmAo+e3muOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Indhcm5pbmciIG1zZ2lkPSI1NDcwNzQzNTc2NjYwMTYwMDc5Ij4i5aaC5p6c57m857qM6YCy6KGM77yM5Y2z6KGo56S65oKo5YWB6Kix6Kmy5oeJ55So56iL5byP5pSU5oiq5omA5pyJ57ay57Wh5rWB6YeP44CCIjxiPiLpmaTpnZ7mgqjkv6Hku7voqbLmh4nnlKjnqIvlvI/vvIzlkKbliYfkuI3mh4nmjqXlj5fjgIIiPC9iPiLkuI3nhLblsLHmnIPorpPmgqjnmoTos4fmlpnpmbfmlrzpga3mg6HmhI/nqIvlvI/lhaXkvrXnmoTpoqjpmqrjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2NlcHQiIG1zZ2lkPSIyODg5MjI2NDA4NzY1ODEwMTczIj4i5oiR5L+h5Lu76YCZ5YCL5oeJ55So56iL5byP44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGVnYWN5X3RpdGxlIiBtc2dpZD0iMTkyOTM2MjUwMDY2NTgwOTY0Ij4iVlBOIOW3sumAo+e3miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpZ3VyZSIgbXNnaWQ9IjQ5MDU1MTgzNzU1NzQ3OTEzNzUiPiLoqK3lrpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0IiBtc2dpZD0iOTcxNDEyMzM4MzA0MjAwMDU2Ij4i5Lit5pa36YCj57eaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vzc2lvbiIgbXNnaWQ9IjY0NzA2Mjg1NDk0NzM2NDEwMzAiPiLmmYLmrrXvvJoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkdXJhdGlvbiIgbXNnaWQ9IjM1ODQ3ODI0NTk5Mjg3MTk0MzUiPiLmjIHnuozmmYLplpPvuLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3RyYW5zbWl0dGVkIiBtc2dpZD0iNzk4ODE2NzY3Mjk4MjE5OTA2MSI+IuW3suWCs+mAge+8miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfcmVjZWl2ZWQiIG1zZ2lkPSI0MDYyNzc2OTI5Mzc2MDY3ODIwIj4i5bey5o6l5pS277yaIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV92YWx1ZV9mb3JtYXQiIG1zZ2lkPSIyMTkyNDY2NTU3ODI2ODk3NTgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRzPC94bGlmZjpnPiDkvY3lhYPntYQgLyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJHM8L3hsaWZmOmc+IOWwgeWMhSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9zcmMvY29tL2FuZHJvaWQvdnBuZGlhbG9ncy9Db25maXJtRGlhbG9nLmphdmEgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3NyYy9jb20vYW5kcm9pZC92cG5kaWFsb2dzL0NvbmZpcm1EaWFsb2cuamF2YQppbmRleCA2ZmFmNGUwLi5kZGFmYzY2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9WcG5EaWFsb2dzL3NyYy9jb20vYW5kcm9pZC92cG5kaWFsb2dzL0NvbmZpcm1EaWFsb2cuamF2YQorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3NyYy9jb20vYW5kcm9pZC92cG5kaWFsb2dzL0NvbmZpcm1EaWFsb2cuamF2YQpAQCAtMTgsNyArMTgsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubmV0LklDb25uZWN0aXZpdHlNYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9zcmMvY29tL2FuZHJvaWQvdnBuZGlhbG9ncy9NYW5hZ2VEaWFsb2cuamF2YSBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3Mvc3JjL2NvbS9hbmRyb2lkL3ZwbmRpYWxvZ3MvTWFuYWdlRGlhbG9nLmphdmEKaW5kZXggM2Q1NjU0YS4uZWIyMDk5NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvVnBuRGlhbG9ncy9zcmMvY29tL2FuZHJvaWQvdnBuZGlhbG9ncy9NYW5hZ2VEaWFsb2cuamF2YQorKysgYi9wYWNrYWdlcy9WcG5EaWFsb2dzL3NyYy9jb20vYW5kcm9pZC92cG5kaWFsb2dzL01hbmFnZURpYWxvZy5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuSUNvbm5lY3Rpdml0eU1hbmFnZXI7CkBAIC0yOCw5ICsyNyw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5Db21wb3VuZEJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuQWxlcnRBY3Rpdml0eTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvc3JjL2NvbS9hbmRyb2lkL2dhbGxlcnkzZC9leGlmL0V4aWZNb2RpZmllci5qYXZhIGIvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvZ2FsbGVyeTNkL2V4aWYvRXhpZk1vZGlmaWVyLmphdmEKaW5kZXggZjAwMzYyYi4uMDUzMWNiYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvZ2FsbGVyeTNkL2V4aWYvRXhpZk1vZGlmaWVyLmphdmEKKysrIGIvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvZ2FsbGVyeTNkL2V4aWYvRXhpZk1vZGlmaWVyLmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKLWltcG9ydCBqYXZhLmlvLkNsb3NlYWJsZTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvc3JjL2NvbS9hbmRyb2lkL2dhbGxlcnkzZC9nbHJlbmRlcmVyL0dMQ2FudmFzLmphdmEgYi9wYWNrYWdlcy9XYWxscGFwZXJDcm9wcGVyL3NyYy9jb20vYW5kcm9pZC9nYWxsZXJ5M2QvZ2xyZW5kZXJlci9HTENhbnZhcy5qYXZhCmluZGV4IDMwNWU5MDUuLjViMDc0NzcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvc3JjL2NvbS9hbmRyb2lkL2dhbGxlcnkzZC9nbHJlbmRlcmVyL0dMQ2FudmFzLmphdmEKKysrIGIvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvZ2FsbGVyeTNkL2dscmVuZGVyZXIvR0xDYW52YXMuamF2YQpAQCAtMjAsOCArMjAsNiBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3RGOwogCi1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0wxMTsKLQogLy8KIC8vIEdMQ2FudmFzIGdpdmVzIGEgY29udmVuaWVudCBpbnRlcmZhY2UgdG8gZHJhdyB1c2luZyBPcGVuR0wuCiAvLwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvcGhvdG9zL0JpdG1hcFJlZ2lvblRpbGVTb3VyY2UuamF2YSBiL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvc3JjL2NvbS9hbmRyb2lkL3Bob3Rvcy9CaXRtYXBSZWdpb25UaWxlU291cmNlLmphdmEKaW5kZXggODUxMWRlMi4uY2RjNWNkYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvcGhvdG9zL0JpdG1hcFJlZ2lvblRpbGVTb3VyY2UuamF2YQorKysgYi9wYWNrYWdlcy9XYWxscGFwZXJDcm9wcGVyL3NyYy9jb20vYW5kcm9pZC9waG90b3MvQml0bWFwUmVnaW9uVGlsZVNvdXJjZS5qYXZhCkBAIC0yNCw5ICsyNCw3IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwUmVnaW9uRGVjb2RlcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9XYWxscGFwZXJDcm9wcGVyL3NyYy9jb20vYW5kcm9pZC93YWxscGFwZXJjcm9wcGVyL0Nyb3BWaWV3LmphdmEgYi9wYWNrYWdlcy9XYWxscGFwZXJDcm9wcGVyL3NyYy9jb20vYW5kcm9pZC93YWxscGFwZXJjcm9wcGVyL0Nyb3BWaWV3LmphdmEKaW5kZXggMTRmN2MxZC4uYzNlZjMwMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvd2FsbHBhcGVyY3JvcHBlci9Dcm9wVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvc3JjL2NvbS9hbmRyb2lkL3dhbGxwYXBlcmNyb3BwZXIvQ3JvcFZpZXcuamF2YQpAQCAtMTY1LDcgKzE2NSw4IEBACiAgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgaW1hZ2VXaWR0aCA9IGltYWdlRGltc1swXTsKICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCBpbWFnZUhlaWdodCA9IGltYWdlRGltc1sxXTsKICAgICAgICAgICAgICAgICBtTWluU2NhbGUgPSBNYXRoLm1heCh3IC8gaW1hZ2VXaWR0aCwgaCAvIGltYWdlSGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBtUmVuZGVyZXIuc2NhbGUgPSBNYXRoLm1heChtTWluU2NhbGUsIG1SZW5kZXJlci5zY2FsZSk7CisgICAgICAgICAgICAgICAgbVJlbmRlcmVyLnNjYWxlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KG1NaW5TY2FsZSwgcmVzZXRTY2FsZSA/IEZsb2F0Lk1JTl9WQUxVRSA6IG1SZW5kZXJlci5zY2FsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9XYWxscGFwZXJDcm9wcGVyL3NyYy9jb20vYW5kcm9pZC93YWxscGFwZXJjcm9wcGVyL1dhbGxwYXBlckNyb3BBY3Rpdml0eS5qYXZhIGIvcGFja2FnZXMvV2FsbHBhcGVyQ3JvcHBlci9zcmMvY29tL2FuZHJvaWQvd2FsbHBhcGVyY3JvcHBlci9XYWxscGFwZXJDcm9wQWN0aXZpdHkuamF2YQppbmRleCA1N2MwNTgxLi42NjNjMzU3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9XYWxscGFwZXJDcm9wcGVyL3NyYy9jb20vYW5kcm9pZC93YWxscGFwZXJjcm9wcGVyL1dhbGxwYXBlckNyb3BBY3Rpdml0eS5qYXZhCisrKyBiL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvc3JjL2NvbS9hbmRyb2lkL3dhbGxwYXBlcmNyb3BwZXIvV2FsbHBhcGVyQ3JvcEFjdGl2aXR5LmphdmEKQEAgLTU1MCw2ICs1NTAsOCBAQAogICAgICAgICAgICAgICAgIFJlY3Qgcm91bmRlZFRydWVDcm9wID0gbmV3IFJlY3QoKTsKICAgICAgICAgICAgICAgICBNYXRyaXggcm90YXRlTWF0cml4ID0gbmV3IE1hdHJpeCgpOwogICAgICAgICAgICAgICAgIE1hdHJpeCBpbnZlcnNlUm90YXRlTWF0cml4ID0gbmV3IE1hdHJpeCgpOworCisgICAgICAgICAgICAgICAgUG9pbnQgYm91bmRzID0gZ2V0SW1hZ2VCb3VuZHMoKTsKICAgICAgICAgICAgICAgICBpZiAobVJvdGF0aW9uID4gMCkgewogICAgICAgICAgICAgICAgICAgICByb3RhdGVNYXRyaXguc2V0Um90YXRlKG1Sb3RhdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGludmVyc2VSb3RhdGVNYXRyaXguc2V0Um90YXRlKC1tUm90YXRpb24pOwpAQCAtNTU3LDcgKzU1OSw2IEBACiAgICAgICAgICAgICAgICAgICAgIG1Dcm9wQm91bmRzLnJvdW5kT3V0KHJvdW5kZWRUcnVlQ3JvcCk7CiAgICAgICAgICAgICAgICAgICAgIG1Dcm9wQm91bmRzID0gbmV3IFJlY3RGKHJvdW5kZWRUcnVlQ3JvcCk7CiAKLSAgICAgICAgICAgICAgICAgICAgUG9pbnQgYm91bmRzID0gZ2V0SW1hZ2VCb3VuZHMoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJvdW5kcyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhMT0dUQUcsICJjYW5ub3QgZ2V0IGJvdW5kcyBmb3IgaW1hZ2UiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUgPSB0cnVlOwpAQCAtNjI5LDEyICs2MzAsMzggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmNsb3NlU2lsZW50bHkoaXMpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChmdWxsU2l6ZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIG91dCB0aGUgdHJ1ZSBzYW1wbGUgc2l6ZSB0aGF0IHdhcyB1c2VkIGJ5IHRoZSBkZWNvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZURvd25TYW1wbGVTaXplID0gYm91bmRzLnggLyBmdWxsU2l6ZS5nZXRXaWR0aCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbUNyb3BCb3VuZHMubGVmdCAvPSBzY2FsZURvd25TYW1wbGVTaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgbUNyb3BCb3VuZHMudG9wIC89IHNjYWxlRG93blNhbXBsZVNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICBtQ3JvcEJvdW5kcy5ib3R0b20gLz0gc2NhbGVEb3duU2FtcGxlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1Dcm9wQm91bmRzLnJpZ2h0IC89IHNjYWxlRG93blNhbXBsZVNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICBtQ3JvcEJvdW5kcy5yb3VuZE91dChyb3VuZGVkVHJ1ZUNyb3ApOwogCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdmFsdWVzIHRvIGFjY291bnQgZm9yIGlzc3VlcyByZWxhdGVkIHRvIHJvdW5kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm91bmRlZFRydWVDcm9wLndpZHRoKCkgPiBmdWxsU2l6ZS5nZXRXaWR0aCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kZWRUcnVlQ3JvcC5yaWdodCA9IHJvdW5kZWRUcnVlQ3JvcC5sZWZ0ICsgZnVsbFNpemUuZ2V0V2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3VuZGVkVHJ1ZUNyb3AucmlnaHQgPiBmdWxsU2l6ZS5nZXRXaWR0aCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBsZWZ0IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkanVzdG1lbnQgPSByb3VuZGVkVHJ1ZUNyb3AubGVmdCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLCByb3VuZGVkVHJ1ZUNyb3AucmlnaHQgLSByb3VuZGVkVHJ1ZUNyb3Aud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRlZFRydWVDcm9wLmxlZnQgLT0gYWRqdXN0bWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGVkVHJ1ZUNyb3AucmlnaHQgLT0gYWRqdXN0bWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3VuZGVkVHJ1ZUNyb3AuaGVpZ2h0KCkgPiBmdWxsU2l6ZS5nZXRIZWlnaHQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgaGVpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRlZFRydWVDcm9wLmJvdHRvbSA9IHJvdW5kZWRUcnVlQ3JvcC50b3AgKyBmdWxsU2l6ZS5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3VuZGVkVHJ1ZUNyb3AuYm90dG9tID4gZnVsbFNpemUuZ2V0SGVpZ2h0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIHRvcCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZGp1c3RtZW50ID0gcm91bmRlZFRydWVDcm9wLnRvcCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLCByb3VuZGVkVHJ1ZUNyb3AuYm90dG9tIC0gcm91bmRlZFRydWVDcm9wLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGVkVHJ1ZUNyb3AudG9wIC09IGFkanVzdG1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRlZFRydWVDcm9wLmJvdHRvbSAtPSBhZGp1c3RtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgICAgICBjcm9wID0gQml0bWFwLmNyZWF0ZUJpdG1hcChmdWxsU2l6ZSwgcm91bmRlZFRydWVDcm9wLmxlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kZWRUcnVlQ3JvcC50b3AsIHJvdW5kZWRUcnVlQ3JvcC53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGVkVHJ1ZUNyb3AuaGVpZ2h0KCkpOwpAQCAtNzU5LDE0ICs3ODYsMTUgQEAKICAgICAgICAgICAgIGZpbmFsIFdhbGxwYXBlck1hbmFnZXIgd2FsbHBhcGVyTWFuYWdlcikgewogICAgICAgICBmaW5hbCBQb2ludCBkZWZhdWx0V2FsbHBhcGVyU2l6ZSA9IGdldERlZmF1bHRXYWxscGFwZXJTaXplKHJlcywgd2luZG93TWFuYWdlcik7CiAKLSAgICAgICAgbmV3IFRocmVhZCgic3VnZ2VzdFdhbGxwYXBlckRpbWVuc2lvbiIpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgbmV3IEFzeW5jVGFzazxWb2lkLCBWb2lkLCBWb2lkPigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBWb2lkIGRvSW5CYWNrZ3JvdW5kKFZvaWQgLi4uIGFyZ3MpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHNhdmVkIGEgd2FsbHBhcGVyIHdpZHRoL2hlaWdodCwgdXNlIHRoYXQgaW5zdGVhZAogICAgICAgICAgICAgICAgIGludCBzYXZlZFdpZHRoID0gc2hhcmVkUHJlZnMuZ2V0SW50KFdBTExQQVBFUl9XSURUSF9LRVksIGRlZmF1bHRXYWxscGFwZXJTaXplLngpOwogICAgICAgICAgICAgICAgIGludCBzYXZlZEhlaWdodCA9IHNoYXJlZFByZWZzLmdldEludChXQUxMUEFQRVJfSEVJR0hUX0tFWSwgZGVmYXVsdFdhbGxwYXBlclNpemUueSk7CiAgICAgICAgICAgICAgICAgd2FsbHBhcGVyTWFuYWdlci5zdWdnZXN0RGVzaXJlZERpbWVuc2lvbnMoc2F2ZWRXaWR0aCwgc2F2ZWRIZWlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQotICAgICAgICB9LnN0YXJ0KCk7CisgICAgICAgIH0uZXhlY3V0ZU9uRXhlY3V0b3IoQXN5bmNUYXNrLlRIUkVBRF9QT09MX0VYRUNVVE9SLCAoVm9pZCkgbnVsbCk7CiAgICAgfQogCiAgICAgcHJvdGVjdGVkIHN0YXRpYyBSZWN0RiBnZXRNYXhDcm9wUmVjdCgKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL3NlcnZpY2VzL1Byb3h5L3NyYy9jb20vYW5kcm9pZC9wcm94eWhhbmRsZXIvUHJveHlTZXJ2ZXIuamF2YSBiL3BhY2thZ2VzL3NlcnZpY2VzL1Byb3h5L3NyYy9jb20vYW5kcm9pZC9wcm94eWhhbmRsZXIvUHJveHlTZXJ2ZXIuamF2YQppbmRleCAxMGJjZGFkLi5lZGIxNjMwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9zZXJ2aWNlcy9Qcm94eS9zcmMvY29tL2FuZHJvaWQvcHJveHloYW5kbGVyL1Byb3h5U2VydmVyLmphdmEKKysrIGIvcGFja2FnZXMvc2VydmljZXMvUHJveHkvc3JjL2NvbS9hbmRyb2lkL3Byb3h5aGFuZGxlci9Qcm94eVNlcnZlci5qYXZhCkBAIC0xNSw3ICsxNSw2IEBACiAgKi8KIHBhY2thZ2UgY29tLmFuZHJvaWQucHJveHloYW5kbGVyOwogCi1pbXBvcnQgYW5kcm9pZC5uZXQuUHJveHlQcm9wZXJ0aWVzOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKQEAgLTI1LDcgKzI0LDYgQEAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uZXQuSW5ldFNvY2tldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uZXQuUHJveHk7CiBpbXBvcnQgamF2YS5uZXQuUHJveHlTZWxlY3RvcjsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL3NlcnZpY2VzL1Byb3h5L3NyYy9jb20vYW5kcm9pZC9wcm94eWhhbmRsZXIvUHJveHlTZXJ2aWNlLmphdmEgYi9wYWNrYWdlcy9zZXJ2aWNlcy9Qcm94eS9zcmMvY29tL2FuZHJvaWQvcHJveHloYW5kbGVyL1Byb3h5U2VydmljZS5qYXZhCmluZGV4IDEwOTQzNWMuLmNiZWExODggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL3NlcnZpY2VzL1Byb3h5L3NyYy9jb20vYW5kcm9pZC9wcm94eWhhbmRsZXIvUHJveHlTZXJ2aWNlLmphdmEKKysrIGIvcGFja2FnZXMvc2VydmljZXMvUHJveHkvc3JjL2NvbS9hbmRyb2lkL3Byb3h5aGFuZGxlci9Qcm94eVNlcnZpY2UuamF2YQpAQCAtMTcsMTIgKzE3LDggQEAKIAogaW1wb3J0IGFuZHJvaWQuYXBwLlNlcnZpY2U7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLm5ldC5Qcm94eTsKLWltcG9ydCBhbmRyb2lkLm5ldC5Qcm94eVByb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5uZXQuSVByb3h5Q2FsbGJhY2s7CiBpbXBvcnQgY29tLmFuZHJvaWQubmV0LklQcm94eVBvcnRMaXN0ZW5lcjsKZGlmZiAtLWdpdCBhL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvSWNvblV0aWxpdGllcy5qYXZhIGIvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9JY29uVXRpbGl0aWVzLmphdmEKaW5kZXggYTQ3YzkwNC4uODJmMjZhZCAxMDA2NDQKLS0tIGEvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9JY29uVXRpbGl0aWVzLmphdmEKKysrIGIvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9JY29uVXRpbGl0aWVzLmphdmEKQEAgLTI0LDIyICsyNCwxMyBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQmx1ck1hc2tGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvck1hdHJpeDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yTWF0cml4Q29sb3JGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50RmxhZ3NEcmF3RmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGl4ZWxGb3JtYXQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3RGOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuVGFibGVNYXNrRmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuVHlwZWZhY2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LkxheW91dC5BbGlnbm1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlN0YXRpY0xheW91dDsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFBhaW50OwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwotaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0VGhlbWVXcmFwcGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogCmRpZmYgLS1naXQgYS9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL0ltbWVyc2l2ZU1vZGVDb25maXJtYXRpb24uamF2YSBiL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvSW1tZXJzaXZlTW9kZUNvbmZpcm1hdGlvbi5qYXZhCmluZGV4IDNlNTdhNzcuLmI3MzRjNDEgMTAwNjQ0Ci0tLSBhL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvSW1tZXJzaXZlTW9kZUNvbmZpcm1hdGlvbi5qYXZhCisrKyBiL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvSW1tZXJzaXZlTW9kZUNvbmZpcm1hdGlvbi5qYXZhCkBAIC0xNzgsNiArMTc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHwgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19IQVJEV0FSRV9BQ0NFTEVSQVRFRAogICAgICAgICAgICAgICAgICwKICAgICAgICAgICAgICAgICBQaXhlbEZvcm1hdC5UUkFOU0xVQ0VOVCk7CisgICAgICAgIGxwLnByaXZhdGVGbGFncyB8PSBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5QUklWQVRFX0ZMQUdfU0hPV19GT1JfQUxMX1VTRVJTOwogICAgICAgICBscC5zZXRUaXRsZSgiSW1tZXJzaXZlTW9kZUNvbmZpcm1hdGlvbiIpOwogICAgICAgICBscC53aW5kb3dBbmltYXRpb25zID0gY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZS5BbmltYXRpb25fUmVjZW50QXBwbGljYXRpb25zOwogICAgICAgICBscC5ncmF2aXR5ID0gR3Jhdml0eS5GSUxMOwpkaWZmIC0tZ2l0IGEvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9QaG9uZUxheW91dEluZmxhdGVyLmphdmEgYi9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Bob25lTGF5b3V0SW5mbGF0ZXIuamF2YQppbmRleCA2YmY0YmViLi41ZDhkMGQxIDEwMDY0NAotLS0gYS9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Bob25lTGF5b3V0SW5mbGF0ZXIuamF2YQorKysgYi9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Bob25lTGF5b3V0SW5mbGF0ZXIuamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeS5pbXBsOwogCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CmRpZmYgLS1naXQgYS9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Bob25lV2luZG93LmphdmEgYi9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Bob25lV2luZG93LmphdmEKaW5kZXggNDRmYzFmOC4uZDBhYmU5YyAxMDA2NDQKLS0tIGEvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9QaG9uZVdpbmRvdy5qYXZhCisrKyBiL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvUGhvbmVXaW5kb3cuamF2YQpAQCAtMjIsNiArMjIsMTEgQEAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LlZpZXdHcm91cC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuKjsKIAoraW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5T3B0aW9uczsKK2ltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uU2NlbmU7CitpbXBvcnQgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb247CitpbXBvcnQgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb25JbmZsYXRlcjsKK2ltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdDb25maWd1cmF0aW9uOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKQEAgLTUyLDcgKzU3LDYgQEAKIGltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5EZWJ1ZzsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwpAQCAtNjIsNyArNjYsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRXZlbnRMb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkFjdGlvbk1vZGU7CkBAIC0xNDYsNiArMTQ5LDEwIEBACiAgICAgcHJpdmF0ZSBBY3Rpb25NZW51UHJlc2VudGVyQ2FsbGJhY2sgbUFjdGlvbk1lbnVQcmVzZW50ZXJDYWxsYmFjazsKICAgICBwcml2YXRlIFBhbmVsTWVudVByZXNlbnRlckNhbGxiYWNrIG1QYW5lbE1lbnVQcmVzZW50ZXJDYWxsYmFjazsKIAorICAgIHByaXZhdGUgVHJhbnNpdGlvbk1hbmFnZXIgbVRyYW5zaXRpb25NYW5hZ2VyOworICAgIHByaXZhdGUgU2NlbmUgbUNvbnRlbnRTY2VuZTsKKyAgICBwcml2YXRlIEJ1bmRsZSBtVHJhbnNpdGlvbk9wdGlvbnM7CisKICAgICAvLyBUaGUgaWNvbiByZXNvdXJjZSBoYXMgYmVlbiBleHBsaWNpdGx5IHNldCBlbHNld2hlcmUKICAgICAvLyBhbmQgc2hvdWxkIG5vdCBiZSBvdmVyd3JpdHRlbiB3aXRoIGEgZGVmYXVsdC4KICAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfUkVTT1VSQ0VfU0VUX0lDT04gPSAxIDw8IDA7CkBAIC0yODEsMTMgKzI4OCw0MyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBUcmFuc2l0aW9uTWFuYWdlciBnZXRUcmFuc2l0aW9uTWFuYWdlcigpIHsKKyAgICAgICAgcmV0dXJuIG1UcmFuc2l0aW9uTWFuYWdlcjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2l0aW9uTWFuYWdlcihUcmFuc2l0aW9uTWFuYWdlciB0bSkgeworICAgICAgICBtVHJhbnNpdGlvbk1hbmFnZXIgPSB0bTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU2NlbmUgZ2V0Q29udGVudFNjZW5lKCkgeworICAgICAgICByZXR1cm4gbUNvbnRlbnRTY2VuZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2l0aW9uT3B0aW9ucyhCdW5kbGUgb3B0aW9ucykgeworICAgICAgICBtVHJhbnNpdGlvbk9wdGlvbnMgPSBvcHRpb25zOworICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldENvbnRlbnRWaWV3KGludCBsYXlvdXRSZXNJRCkgeworICAgICAgICAvLyBOb3RlOiBGRUFUVVJFX0NPTlRFTlRfVFJBTlNJVElPTlMgbWF5IGJlIHNldCBpbiB0aGUgcHJvY2VzcyBvZiBpbnN0YWxsaW5nIHRoZSB3aW5kb3cKKyAgICAgICAgLy8gZGVjb3IsIHdoZW4gdGhlbWUgYXR0cmlidXRlcyBhbmQgdGhlIGxpa2UgYXJlIGNyeXN0YWxpemVkLiBEbyBub3QgY2hlY2sgdGhlIGZlYXR1cmUKKyAgICAgICAgLy8gYmVmb3JlIHRoaXMgaGFwcGVucy4KICAgICAgICAgaWYgKG1Db250ZW50UGFyZW50ID09IG51bGwpIHsKICAgICAgICAgICAgIGluc3RhbGxEZWNvcigpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UgaWYgKCFoYXNGZWF0dXJlKEZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OUykpIHsKICAgICAgICAgICAgIG1Db250ZW50UGFyZW50LnJlbW92ZUFsbFZpZXdzKCk7CiAgICAgICAgIH0KLSAgICAgICAgbUxheW91dEluZmxhdGVyLmluZmxhdGUobGF5b3V0UmVzSUQsIG1Db250ZW50UGFyZW50KTsKKworICAgICAgICBpZiAoaGFzRmVhdHVyZShGRUFUVVJFX0NPTlRFTlRfVFJBTlNJVElPTlMpKSB7CisgICAgICAgICAgICBmaW5hbCBTY2VuZSBuZXdTY2VuZSA9IFNjZW5lLmdldFNjZW5lRm9yTGF5b3V0KG1Db250ZW50UGFyZW50LCBsYXlvdXRSZXNJRCwKKyAgICAgICAgICAgICAgICAgICAgZ2V0Q29udGV4dCgpKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb25UbyhuZXdTY2VuZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtTGF5b3V0SW5mbGF0ZXIuaW5mbGF0ZShsYXlvdXRSZXNJRCwgbUNvbnRlbnRQYXJlbnQpOworICAgICAgICB9CiAgICAgICAgIGZpbmFsIENhbGxiYWNrIGNiID0gZ2V0Q2FsbGJhY2soKTsKICAgICAgICAgaWYgKGNiICE9IG51bGwgJiYgIWlzRGVzdHJveWVkKCkpIHsKICAgICAgICAgICAgIGNiLm9uQ29udGVudENoYW5nZWQoKTsKQEAgLTMwMSwxMiArMzM4LDIyIEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRDb250ZW50VmlldyhWaWV3IHZpZXcsIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMgcGFyYW1zKSB7CisgICAgICAgIC8vIE5vdGU6IEZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OUyBtYXkgYmUgc2V0IGluIHRoZSBwcm9jZXNzIG9mIGluc3RhbGxpbmcgdGhlIHdpbmRvdworICAgICAgICAvLyBkZWNvciwgd2hlbiB0aGVtZSBhdHRyaWJ1dGVzIGFuZCB0aGUgbGlrZSBhcmUgY3J5c3RhbGl6ZWQuIERvIG5vdCBjaGVjayB0aGUgZmVhdHVyZQorICAgICAgICAvLyBiZWZvcmUgdGhpcyBoYXBwZW5zLgogICAgICAgICBpZiAobUNvbnRlbnRQYXJlbnQgPT0gbnVsbCkgewogICAgICAgICAgICAgaW5zdGFsbERlY29yKCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZSBpZiAoIWhhc0ZlYXR1cmUoRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TKSkgewogICAgICAgICAgICAgbUNvbnRlbnRQYXJlbnQucmVtb3ZlQWxsVmlld3MoKTsKICAgICAgICAgfQotICAgICAgICBtQ29udGVudFBhcmVudC5hZGRWaWV3KHZpZXcsIHBhcmFtcyk7CisKKyAgICAgICAgaWYgKGhhc0ZlYXR1cmUoRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TKSkgeworICAgICAgICAgICAgdmlldy5zZXRMYXlvdXRQYXJhbXMocGFyYW1zKTsKKyAgICAgICAgICAgIGZpbmFsIFNjZW5lIG5ld1NjZW5lID0gbmV3IFNjZW5lKG1Db250ZW50UGFyZW50LCB2aWV3KTsKKyAgICAgICAgICAgIHRyYW5zaXRpb25UbyhuZXdTY2VuZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQ29udGVudFBhcmVudC5hZGRWaWV3KHZpZXcsIHBhcmFtcyk7CisgICAgICAgIH0KICAgICAgICAgZmluYWwgQ2FsbGJhY2sgY2IgPSBnZXRDYWxsYmFjaygpOwogICAgICAgICBpZiAoY2IgIT0gbnVsbCAmJiAhaXNEZXN0cm95ZWQoKSkgewogICAgICAgICAgICAgY2Iub25Db250ZW50Q2hhbmdlZCgpOwpAQCAtMzE4LDYgKzM2NSwxMSBAQAogICAgICAgICBpZiAobUNvbnRlbnRQYXJlbnQgPT0gbnVsbCkgewogICAgICAgICAgICAgaW5zdGFsbERlY29yKCk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGhhc0ZlYXR1cmUoRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TKSkgeworICAgICAgICAgICAgLy8gVE9ETyBBdWdtZW50IHRoZSBzY2VuZXMvdHJhbnNpdGlvbnMgQVBJIHRvIHN1cHBvcnQgdGhpcy4KKyAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgImFkZENvbnRlbnRWaWV3IGRvZXMgbm90IHN1cHBvcnQgY29udGVudCB0cmFuc2l0aW9ucyIpOworICAgICAgICB9CiAgICAgICAgIG1Db250ZW50UGFyZW50LmFkZFZpZXcodmlldywgcGFyYW1zKTsKICAgICAgICAgZmluYWwgQ2FsbGJhY2sgY2IgPSBnZXRDYWxsYmFjaygpOwogICAgICAgICBpZiAoY2IgIT0gbnVsbCAmJiAhaXNEZXN0cm95ZWQoKSkgewpAQCAtMzI1LDYgKzM3NywzMyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSB2b2lkIHRyYW5zaXRpb25UbyhTY2VuZSBzY2VuZSkgeworICAgICAgICBUcmFuc2l0aW9uIHNlbGVjdGVkID0gbnVsbDsKKyAgICAgICAgaWYgKG1UcmFuc2l0aW9uT3B0aW9ucyAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eU9wdGlvbnMgb3B0cyA9IG5ldyBBY3Rpdml0eU9wdGlvbnMobVRyYW5zaXRpb25PcHRpb25zKTsKKyAgICAgICAgICAgIG1UcmFuc2l0aW9uT3B0aW9ucyA9IG51bGw7CisKKyAgICAgICAgICAgIFN0cmluZyBzZWxlY3RlZE5hbWUgPSBudWxsOworICAgICAgICAgICAgZm9yIChTdHJpbmcgc2NlbmVOYW1lIDogb3B0cy5nZXREZXN0U2NlbmVOYW1lcygpKSB7CisgICAgICAgICAgICAgICAgZmluYWwgVHJhbnNpdGlvbiB0ID0gbVRyYW5zaXRpb25NYW5hZ2VyLmdldE5hbWVkVHJhbnNpdGlvbihzY2VuZU5hbWUsIHNjZW5lKTsKKyAgICAgICAgICAgICAgICBpZiAodCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gaGFuZGxlIGFyZ3Mvc3RhdGU7IGluamVjdCBpbnRvIHQvY2xvbmUgd2l0aCBwYXJhbXMKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSB0OworICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE5hbWUgPSBzY2VuZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9wdHMuZGlzcGF0Y2hTY2VuZVRyYW5zaXRpb25TdGFydGVkKHNlbGVjdGVkTmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2VsZWN0ZWQgIT0gbnVsbCkgeworICAgICAgICAgICAgVHJhbnNpdGlvbk1hbmFnZXIuZ28oc2NlbmUsIHNlbGVjdGVkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1UcmFuc2l0aW9uTWFuYWdlci50cmFuc2l0aW9uVG8oc2NlbmUpOworICAgICAgICB9CisgICAgICAgIG1Db250ZW50U2NlbmUgPSBzY2VuZTsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgVmlldyBnZXRDdXJyZW50Rm9jdXMoKSB7CiAgICAgICAgIHJldHVybiBtRGVjb3IgIT0gbnVsbCA/IG1EZWNvci5maW5kRm9jdXMoKSA6IG51bGw7CkBAIC0zNjYsNiArNDQ1LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKKyAgICBARGVwcmVjYXRlZAogICAgIHB1YmxpYyB2b2lkIHNldFRpdGxlQ29sb3IoaW50IHRleHRDb2xvcikgewogICAgICAgICBpZiAobVRpdGxlVmlldyAhPSBudWxsKSB7CiAgICAgICAgICAgICBtVGl0bGVWaWV3LnNldFRleHRDb2xvcih0ZXh0Q29sb3IpOwpAQCAtMjg5MCw2ICsyOTcwLDkgQEAKICAgICAgICAgICAgIGEuZ2V0VmFsdWUoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuV2luZG93X3dpbmRvd0ZpeGVkSGVpZ2h0TWlub3IsCiAgICAgICAgICAgICAgICAgICAgIG1GaXhlZEhlaWdodE1pbm9yKTsKICAgICAgICAgfQorICAgICAgICBpZiAoYS5nZXRCb29sZWFuKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLldpbmRvd193aW5kb3dDb250ZW50VHJhbnNpdGlvbnMsIGZhbHNlKSkgeworICAgICAgICAgICAgcmVxdWVzdEZlYXR1cmUoRkVBVFVSRV9DT05URU5UX1RSQU5TSVRJT05TKTsKKyAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dCA9IGdldENvbnRleHQoKTsKICAgICAgICAgZmluYWwgaW50IHRhcmdldFNkayA9IGNvbnRleHQuZ2V0QXBwbGljYXRpb25JbmZvKCkudGFyZ2V0U2RrVmVyc2lvbjsKQEAgLTMxNzksNiArMzI2MiwyMCBAQAogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9ubHkgaW5mbGF0ZSBvciBjcmVhdGUgYSBuZXcgVHJhbnNpdGlvbk1hbmFnZXIgaWYgdGhlIGNhbGxlciBoYXNuJ3QKKyAgICAgICAgICAgIC8vIGFscmVhZHkgc2V0IGEgY3VzdG9tIG9uZS4KKyAgICAgICAgICAgIGlmIChoYXNGZWF0dXJlKEZFQVRVUkVfQ09OVEVOVF9UUkFOU0lUSU9OUykgJiYgbVRyYW5zaXRpb25NYW5hZ2VyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgdHJhbnNpdGlvblJlcyA9IGdldFdpbmRvd1N0eWxlKCkuZ2V0UmVzb3VyY2VJZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLldpbmRvd193aW5kb3dDb250ZW50VHJhbnNpdGlvbk1hbmFnZXIsIDApOworICAgICAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uUmVzICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgVHJhbnNpdGlvbkluZmxhdGVyIGluZmxhdGVyID0gVHJhbnNpdGlvbkluZmxhdGVyLmZyb20oZ2V0Q29udGV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zaXRpb25NYW5hZ2VyID0gaW5mbGF0ZXIuaW5mbGF0ZVRyYW5zaXRpb25NYW5hZ2VyKHRyYW5zaXRpb25SZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRlbnRQYXJlbnQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1UcmFuc2l0aW9uTWFuYWdlciA9IG5ldyBUcmFuc2l0aW9uTWFuYWdlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9QaG9uZVdpbmRvd01hbmFnZXIuamF2YSBiL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvUGhvbmVXaW5kb3dNYW5hZ2VyLmphdmEKaW5kZXggZjMzYWI0MC4uOGU4MzI1NSAxMDA2NDQKLS0tIGEvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9QaG9uZVdpbmRvd01hbmFnZXIuamF2YQorKysgYi9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Bob25lV2luZG93TWFuYWdlci5qYXZhCkBAIC0yMjIsNiArMjIyLDkgQEAKICAgICAvLyBWaWJyYXRvciBwYXR0ZXJuIGZvciBhIHNob3J0IHZpYnJhdGlvbi4KICAgICBsb25nW10gbUtleWJvYXJkVGFwVmliZVBhdHRlcm47CiAKKyAgICAvLyBWaWJyYXRvciBwYXR0ZXJuIGZvciBhIHNob3J0IHZpYnJhdGlvbiB3aGVuIHRhcHBpbmcgb24gYW4gaG91ci9taW51dGUgdGljayBvZiBhIENsb2NrLgorICAgIGxvbmdbXSBtQ2xvY2tUaWNrVmliZVBhdHRlcm47CisKICAgICAvLyBWaWJyYXRvciBwYXR0ZXJuIGZvciBoYXB0aWMgZmVlZGJhY2sgZHVyaW5nIGJvb3Qgd2hlbiBzYWZlIG1vZGUgaXMgZGlzYWJsZWQuCiAgICAgbG9uZ1tdIG1TYWZlTW9kZURpc2FibGVkVmliZVBhdHRlcm47CiAKQEAgLTMwNCwxNyArMzA3LDYgQEAKICAgICBXaW5kb3dTdGF0ZSBtRm9jdXNlZFdpbmRvdzsKICAgICBJQXBwbGljYXRpb25Ub2tlbiBtRm9jdXNlZEFwcDsKIAotICAgIHByaXZhdGUgZmluYWwgY2xhc3MgUG9pbnRlckxvY2F0aW9uUG9pbnRlckV2ZW50TGlzdGVuZXIgaW1wbGVtZW50cyBQb2ludGVyRXZlbnRMaXN0ZW5lciB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblBvaW50ZXJFdmVudChNb3Rpb25FdmVudCBtb3Rpb25FdmVudCkgewotICAgICAgICAgICAgaWYgKG1Qb2ludGVyTG9jYXRpb25WaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtUG9pbnRlckxvY2F0aW9uVmlldy5hZGRQb2ludGVyRXZlbnQobW90aW9uRXZlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUG9pbnRlciBsb2NhdGlvbiB2aWV3IHN0YXRlLCBvbmx5IG1vZGlmaWVkIG9uIHRoZSBtSGFuZGxlciBMb29wZXIuCi0gICAgUG9pbnRlckxvY2F0aW9uUG9pbnRlckV2ZW50TGlzdGVuZXIgbVBvaW50ZXJMb2NhdGlvblBvaW50ZXJFdmVudExpc3RlbmVyOwogICAgIFBvaW50ZXJMb2NhdGlvblZpZXcgbVBvaW50ZXJMb2NhdGlvblZpZXc7CiAKICAgICAvLyBUaGUgY3VycmVudCBzaXplIG9mIHRoZSBzY3JlZW47IHJlYWxseTsgZXh0ZW5kcyBpbnRvIHRoZSBvdmVyc2NhbiBhcmVhIG9mCkBAIC05NjQsNiArOTU2LDggQEAKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmFycmF5LmNvbmZpZ192aXJ0dWFsS2V5VmliZVBhdHRlcm4pOwogICAgICAgICBtS2V5Ym9hcmRUYXBWaWJlUGF0dGVybiA9IGdldExvbmdJbnRBcnJheShtQ29udGV4dC5nZXRSZXNvdXJjZXMoKSwKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmFycmF5LmNvbmZpZ19rZXlib2FyZFRhcFZpYmVQYXR0ZXJuKTsKKyAgICAgICAgbUNsb2NrVGlja1ZpYmVQYXR0ZXJuID0gZ2V0TG9uZ0ludEFycmF5KG1Db250ZXh0LmdldFJlc291cmNlcygpLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXJyYXkuY29uZmlnX2Nsb2NrVGlja1ZpYmVQYXR0ZXJuKTsKICAgICAgICAgbVNhZmVNb2RlRGlzYWJsZWRWaWJlUGF0dGVybiA9IGdldExvbmdJbnRBcnJheShtQ29udGV4dC5nZXRSZXNvdXJjZXMoKSwKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmFycmF5LmNvbmZpZ19zYWZlTW9kZURpc2FibGVkVmliZVBhdHRlcm4pOwogICAgICAgICBtU2FmZU1vZGVFbmFibGVkVmliZVBhdHRlcm4gPSBnZXRMb25nSW50QXJyYXkobUNvbnRleHQuZ2V0UmVzb3VyY2VzKCksCkBAIC0xMTgzLDcgKzExNzcsNiBAQAogICAgICAgICBpZiAobVBvaW50ZXJMb2NhdGlvblZpZXcgPT0gbnVsbCkgewogICAgICAgICAgICAgbVBvaW50ZXJMb2NhdGlvblZpZXcgPSBuZXcgUG9pbnRlckxvY2F0aW9uVmlldyhtQ29udGV4dCk7CiAgICAgICAgICAgICBtUG9pbnRlckxvY2F0aW9uVmlldy5zZXRQcmludENvb3JkcyhmYWxzZSk7Ci0KICAgICAgICAgICAgIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zIGxwID0gbmV3IFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zKAogICAgICAgICAgICAgICAgICAgICBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsCiAgICAgICAgICAgICAgICAgICAgIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCk7CkBAIC0xMjAzLDIyICsxMTk2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5XSU5ET1dfU0VSVklDRSk7CiAgICAgICAgICAgICBscC5pbnB1dEZlYXR1cmVzIHw9IFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLklOUFVUX0ZFQVRVUkVfTk9fSU5QVVRfQ0hBTk5FTDsKICAgICAgICAgICAgIHdtLmFkZFZpZXcobVBvaW50ZXJMb2NhdGlvblZpZXcsIGxwKTsKLQotICAgICAgICAgICAgbVBvaW50ZXJMb2NhdGlvblBvaW50ZXJFdmVudExpc3RlbmVyID0gbmV3IFBvaW50ZXJMb2NhdGlvblBvaW50ZXJFdmVudExpc3RlbmVyKCk7Ci0gICAgICAgICAgICBtV2luZG93TWFuYWdlckZ1bmNzLnJlZ2lzdGVyUG9pbnRlckV2ZW50TGlzdGVuZXIobVBvaW50ZXJMb2NhdGlvblBvaW50ZXJFdmVudExpc3RlbmVyKTsKKyAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyRnVuY3MucmVnaXN0ZXJQb2ludGVyRXZlbnRMaXN0ZW5lcihtUG9pbnRlckxvY2F0aW9uVmlldyk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGlzYWJsZVBvaW50ZXJMb2NhdGlvbigpIHsKLSAgICAgICAgaWYgKG1Qb2ludGVyTG9jYXRpb25Qb2ludGVyRXZlbnRMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtV2luZG93TWFuYWdlckZ1bmNzLnVucmVnaXN0ZXJQb2ludGVyRXZlbnRMaXN0ZW5lcigKLSAgICAgICAgICAgICAgICAgICAgbVBvaW50ZXJMb2NhdGlvblBvaW50ZXJFdmVudExpc3RlbmVyKTsKLSAgICAgICAgICAgIG1Qb2ludGVyTG9jYXRpb25Qb2ludGVyRXZlbnRMaXN0ZW5lciA9IG51bGw7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAobVBvaW50ZXJMb2NhdGlvblZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgV2luZG93TWFuYWdlciB3bSA9IChXaW5kb3dNYW5hZ2VyKQotICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lORE9XX1NFUlZJQ0UpOworICAgICAgICAgICAgbVdpbmRvd01hbmFnZXJGdW5jcy51bnJlZ2lzdGVyUG9pbnRlckV2ZW50TGlzdGVuZXIobVBvaW50ZXJMb2NhdGlvblZpZXcpOworICAgICAgICAgICAgV2luZG93TWFuYWdlciB3bSA9IChXaW5kb3dNYW5hZ2VyKSBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lORE9XX1NFUlZJQ0UpOwogICAgICAgICAgICAgd20ucmVtb3ZlVmlldyhtUG9pbnRlckxvY2F0aW9uVmlldyk7CiAgICAgICAgICAgICBtUG9pbnRlckxvY2F0aW9uVmlldyA9IG51bGw7CiAgICAgICAgIH0KQEAgLTMyNzUsOCArMzI2MCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtUmVzdHJpY3RlZFNjcmVlbldpZHRoOwogICAgICAgICAgICAgICAgICAgICBwZi5ib3R0b20gPSBkZi5ib3R0b20gPSBvZi5ib3R0b20gPSBjZi5ib3R0b20gPSBtUmVzdHJpY3RlZFNjcmVlblRvcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbVJlc3RyaWN0ZWRTY3JlZW5IZWlnaHQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRycy50eXBlID09IFRZUEVfVE9BU1QgfHwgYXR0cnMudHlwZSA9PSBUWVBFX1NZU1RFTV9BTEVSVCkgewotICAgICAgICAgICAgICAgICAgICAvLyBUb2FzdHMgYXJlIHN0YWJsZSB0byBpbnRlcmltIGRlY29yIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRycy50eXBlID09IFRZUEVfVE9BU1QgfHwgYXR0cnMudHlwZSA9PSBUWVBFX1NZU1RFTV9BTEVSVAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXR0cnMudHlwZSA9PSBUWVBFX1ZPTFVNRV9PVkVSTEFZKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIGRpYWxvZ3MgYXJlIHN0YWJsZSB0byBpbnRlcmltIGRlY29yIGNoYW5nZXMuCiAgICAgICAgICAgICAgICAgICAgIHBmLmxlZnQgPSBkZi5sZWZ0ID0gb2YubGVmdCA9IGNmLmxlZnQgPSBtU3RhYmxlTGVmdDsKICAgICAgICAgICAgICAgICAgICAgcGYudG9wID0gZGYudG9wID0gb2YudG9wID0gY2YudG9wID0gbVN0YWJsZVRvcDsKICAgICAgICAgICAgICAgICAgICAgcGYucmlnaHQgPSBkZi5yaWdodCA9IG9mLnJpZ2h0ID0gY2YucmlnaHQgPSBtU3RhYmxlUmlnaHQ7CkBAIC0zMzgwLDEzICszMzY2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zIGF0dHJzKSB7CiAgICAgICAgIGlmIChERUJVR19MQVlPVVQpIFNsb2cuaShUQUcsICJXaW4gIiArIHdpbiArICI6IGlzVmlzaWJsZU9yQmVoaW5kS2V5Z3VhcmRMdz0iCiAgICAgICAgICAgICAgICAgKyB3aW4uaXNWaXNpYmxlT3JCZWhpbmRLZXlndWFyZEx3KCkpOwotICAgICAgICBpZiAobVRvcEZ1bGxzY3JlZW5PcGFxdWVXaW5kb3dTdGF0ZSA9PSBudWxsICYmICh3aW4uZ2V0QXR0cnMoKS5wcml2YXRlRmxhZ3MKLSAgICAgICAgICAgICAgICAmV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuUFJJVkFURV9GTEFHX0ZPUkNFX1NIT1dfTkFWX0JBUikgIT0gMAotICAgICAgICAgICAgICAgIHx8ICh3aW4uaXNWaXNpYmxlTHcoKSAmJiBhdHRycy50eXBlID09IFRZUEVfSU5QVVRfTUVUSE9EKSkgewotICAgICAgICAgICAgaWYgKG1Gb3JjaW5nU2hvd05hdkJhckxheWVyIDwgMCkgewotICAgICAgICAgICAgICAgIG1Gb3JjaW5nU2hvd05hdkJhciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbUZvcmNpbmdTaG93TmF2QmFyTGF5ZXIgPSB3aW4uZ2V0U3VyZmFjZUxheWVyKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChtVG9wRnVsbHNjcmVlbk9wYXF1ZVdpbmRvd1N0YXRlID09IG51bGwKKyAgICAgICAgICAgICAgICAmJiB3aW4uaXNWaXNpYmxlTHcoKSAmJiBhdHRycy50eXBlID09IFRZUEVfSU5QVVRfTUVUSE9EKSB7CisgICAgICAgICAgICBtRm9yY2luZ1Nob3dOYXZCYXIgPSB0cnVlOworICAgICAgICAgICAgbUZvcmNpbmdTaG93TmF2QmFyTGF5ZXIgPSB3aW4uZ2V0U3VyZmFjZUxheWVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1Ub3BGdWxsc2NyZWVuT3BhcXVlV2luZG93U3RhdGUgPT0gbnVsbCAmJgogICAgICAgICAgICAgICAgIHdpbi5pc1Zpc2libGVPckJlaGluZEtleWd1YXJkTHcoKSAmJiAhd2luLmlzR29uZUZvckxheW91dEx3KCkpIHsKQEAgLTUwMTksNiArNTAwMiw5IEBACiAgICAgICAgICAgICBjYXNlIEhhcHRpY0ZlZWRiYWNrQ29uc3RhbnRzLktFWUJPQVJEX1RBUDoKICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gbUtleWJvYXJkVGFwVmliZVBhdHRlcm47CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEhhcHRpY0ZlZWRiYWNrQ29uc3RhbnRzLkNMT0NLX1RJQ0s6CisgICAgICAgICAgICAgICAgcGF0dGVybiA9IG1DbG9ja1RpY2tWaWJlUGF0dGVybjsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSGFwdGljRmVlZGJhY2tDb25zdGFudHMuU0FGRV9NT0RFX0RJU0FCTEVEOgogICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBtU2FmZU1vZGVEaXNhYmxlZFZpYmVQYXR0ZXJuOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTIyMCw2ICs1MjA2LDExIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRJbnB1dE1ldGhvZFdpbmRvd1Zpc2libGVIZWlnaHRMdygpIHsKKyAgICAgICAgcmV0dXJuIG1Eb2NrQm90dG9tIC0gbUN1ckJvdHRvbTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50VXNlckx3KGludCBuZXdVc2VySWQpIHsKICAgICAgICAgbUN1cnJlbnRVc2VySWQgPSBuZXdVc2VySWQ7CiAgICAgICAgIGlmIChtS2V5Z3VhcmREZWxlZ2F0ZSAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1JlY2VudEFwcGxpY2F0aW9uc0JhY2tncm91bmQuamF2YSBiL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvUmVjZW50QXBwbGljYXRpb25zQmFja2dyb3VuZC5qYXZhCmluZGV4IDhkODc3MjguLjM0OTBiZDQgMTAwNjQ0Ci0tLSBhL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvUmVjZW50QXBwbGljYXRpb25zQmFja2dyb3VuZC5qYXZhCisrKyBiL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvUmVjZW50QXBwbGljYXRpb25zQmFja2dyb3VuZC5qYXZhCkBAIC0yMSw3ICsyMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKZGlmZiAtLWdpdCBhL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvU2hvcnRjdXRNYW5hZ2VyLmphdmEgYi9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL1Nob3J0Y3V0TWFuYWdlci5qYXZhCmluZGV4IDc1YTFiMDEuLmJiODk4ZjcgMTAwNjQ0Ci0tLSBhL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwvU2hvcnRjdXRNYW5hZ2VyLmphdmEKKysrIGIvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9TaG9ydGN1dE1hbmFnZXIuamF2YQpAQCAtMjUsNyArMjUsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5LZXlDaGFyYWN0ZXJNYXA7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwogCiBpbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwogCmRpZmYgLS1naXQgYS9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL2tleWd1YXJkL0tleWd1YXJkU2VydmljZURlbGVnYXRlLmphdmEgYi9wb2xpY3kvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9pbXBsL2tleWd1YXJkL0tleWd1YXJkU2VydmljZURlbGVnYXRlLmphdmEKaW5kZXggMTM1NzQ2Mi4uYTZjYWU2NiAxMDA2NDQKLS0tIGEvcG9saWN5L3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvaW1wbC9rZXlndWFyZC9LZXlndWFyZFNlcnZpY2VEZWxlZ2F0ZS5qYXZhCisrKyBiL3BvbGljeS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L2ltcGwva2V5Z3VhcmQvS2V5Z3VhcmRTZXJ2aWNlRGVsZWdhdGUuamF2YQpAQCAtMTIsNyArMTIsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvc2F4L2phdmEvYW5kcm9pZC9zYXgvRWxlbWVudC5qYXZhIGIvc2F4L2phdmEvYW5kcm9pZC9zYXgvRWxlbWVudC5qYXZhCmluZGV4IDhjODMzNGMuLmMzZTI3NWYgMTAwNjQ0Ci0tLSBhL3NheC9qYXZhL2FuZHJvaWQvc2F4L0VsZW1lbnQuamF2YQorKysgYi9zYXgvamF2YS9hbmRyb2lkL3NheC9FbGVtZW50LmphdmEKQEAgLTIxLDggKzIxLDYgQEAKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCiAvKioKICAqIEFuIFhNTCBlbGVtZW50LiBQcm92aWRlcyBhY2Nlc3MgdG8gY2hpbGQgZWxlbWVudHMgYW5kIGhvb2tzIHRvIGxpc3RlbgogICogZm9yIGV2ZW50cyByZWxhdGVkIHRvIHRoaXMgZWxlbWVudC4KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2lucHV0L0FuZHJvaWQubWsgYi9zZXJ2aWNlcy9pbnB1dC9BbmRyb2lkLm1rCmluZGV4IDZlOTQ0ZWYuLmViMmJlYmUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2lucHV0L0FuZHJvaWQubWsKKysrIGIvc2VydmljZXMvaW5wdXQvQW5kcm9pZC5tawpAQCAtNDIsNiArNDIsOCBAQAogTE9DQUxfQ19JTkNMVURFUyA6PSBcCiAgICAgZXh0ZXJuYWwvc2tpYS9pbmNsdWRlL2NvcmUKIAorTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tdW51c2VkLXBhcmFtZXRlcgorCiBMT0NBTF9NT0RVTEU6PSBsaWJpbnB1dHNlcnZpY2UKIAogTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2lucHV0L0V2ZW50SHViLmNwcCBiL3NlcnZpY2VzL2lucHV0L0V2ZW50SHViLmNwcAppbmRleCBmYzY0NjU2Li4wOWZjYTA0IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9pbnB1dC9FdmVudEh1Yi5jcHAKKysrIGIvc2VydmljZXMvaW5wdXQvRXZlbnRIdWIuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8c3lzL2xpbWl0cy5oPgogI2luY2x1ZGUgPHN5cy9zaGExLmg+CisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KIAogLyogdGhpcyBtYWNybyBpcyB1c2VkIHRvIHRlbGwgaWYgImJpdCIgaXMgc2V0IGluICJhcnJheSIKICAqIGl0IHNlbGVjdHMgYSBieXRlIGZyb20gdGhlIGFycmF5LCBhbmQgZG9lcyBhIGJvb2xlYW4gQU5ECkBAIC05Myw2ICs5NCwxNCBAQAogICAgIHJldHVybiBvdXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGdldExpbnV4UmVsZWFzZShpbnQqIG1ham9yLCBpbnQqIG1pbm9yKSB7CisgICAgc3RydWN0IHV0c25hbWUgaW5mbzsKKyAgICBpZiAodW5hbWUoJmluZm8pIHx8IHNzY2FuZihpbmZvLnJlbGVhc2UsICIlZC4lZCIsIG1ham9yLCBtaW5vcikgPD0gMCkgeworICAgICAgICAqbWFqb3IgPSAwLCAqbWlub3IgPSAwOworICAgICAgICBBTE9HRSgiQ291bGQgbm90IGdldCBsaW51eCB2ZXJzaW9uOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorfQorCiBzdGF0aWMgdm9pZCBzZXREZXNjcmlwdG9yKElucHV0RGV2aWNlSWRlbnRpZmllciYgaWRlbnRpZmllcikgewogICAgIC8vIENvbXB1dGUgYSBkZXZpY2UgZGVzY3JpcHRvciB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIGRldmljZS4KICAgICAvLyBUaGUgZGVzY3JpcHRvciBpcyBhc3N1bWVkIHRvIGJlIGEgc3RhYmxlIGlkZW50aWZpZXIuICBJdHMgdmFsdWUgc2hvdWxkIG5vdApAQCAtMjM2LDYgKzI0NSwxMSBAQAogICAgIHJlc3VsdCA9IGVwb2xsX2N0bChtRXBvbGxGZCwgRVBPTExfQ1RMX0FERCwgbVdha2VSZWFkUGlwZUZkLCAmZXZlbnRJdGVtKTsKICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKHJlc3VsdCAhPSAwLCAiQ291bGQgbm90IGFkZCB3YWtlIHJlYWQgcGlwZSB0byBlcG9sbCBpbnN0YW5jZS4gIGVycm5vPSVkIiwKICAgICAgICAgICAgIGVycm5vKTsKKworICAgIGludCBtYWpvciwgbWlub3I7CisgICAgZ2V0TGludXhSZWxlYXNlKCZtYWpvciwgJm1pbm9yKTsKKyAgICAvLyBFUE9MTFdBS0VVUCB3YXMgaW50cm9kdWNlZCBpbiBrZXJuZWwgMy41CisgICAgbVVzaW5nRXBvbGxXYWtldXAgPSBtYWpvciA+IDMgfHwgKG1ham9yID09IDMgJiYgbWlub3IgPj0gNSk7CiB9CiAKIEV2ZW50SHViOjp+RXZlbnRIdWIodm9pZCkgewpAQCAtNTA5LDggKzUyMyw5IEBACiBib29sIEV2ZW50SHViOjpoYXNMZWQoaW50MzJfdCBkZXZpY2VJZCwgaW50MzJfdCBsZWQpIGNvbnN0IHsKICAgICBBdXRvTXV0ZXggX2wobUxvY2spOwogICAgIERldmljZSogZGV2aWNlID0gZ2V0RGV2aWNlTG9ja2VkKGRldmljZUlkKTsKLSAgICBpZiAoZGV2aWNlICYmIGxlZCA+PSAwICYmIGxlZCA8PSBMRURfTUFYKSB7Ci0gICAgICAgIGlmICh0ZXN0X2JpdChsZWQsIGRldmljZS0+bGVkQml0bWFzaykpIHsKKyAgICBpbnQzMl90IHNjOworICAgIGlmIChkZXZpY2UgJiYgbWFwTGVkKGRldmljZSwgbGVkLCAmc2MpID09IE5PX0VSUk9SKSB7CisgICAgICAgIGlmICh0ZXN0X2JpdChzYywgZGV2aWNlLT5sZWRCaXRtYXNrKSkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC01MjAsMTIgKzUzNSwxNyBAQAogdm9pZCBFdmVudEh1Yjo6c2V0TGVkU3RhdGUoaW50MzJfdCBkZXZpY2VJZCwgaW50MzJfdCBsZWQsIGJvb2wgb24pIHsKICAgICBBdXRvTXV0ZXggX2wobUxvY2spOwogICAgIERldmljZSogZGV2aWNlID0gZ2V0RGV2aWNlTG9ja2VkKGRldmljZUlkKTsKLSAgICBpZiAoZGV2aWNlICYmICFkZXZpY2UtPmlzVmlydHVhbCgpICYmIGxlZCA+PSAwICYmIGxlZCA8PSBMRURfTUFYKSB7CisgICAgc2V0TGVkU3RhdGVMb2NrZWQoZGV2aWNlLCBsZWQsIG9uKTsKK30KKwordm9pZCBFdmVudEh1Yjo6c2V0TGVkU3RhdGVMb2NrZWQoRGV2aWNlKiBkZXZpY2UsIGludDMyX3QgbGVkLCBib29sIG9uKSB7CisgICAgaW50MzJfdCBzYzsKKyAgICBpZiAoZGV2aWNlICYmICFkZXZpY2UtPmlzVmlydHVhbCgpICYmIG1hcExlZChkZXZpY2UsIGxlZCwgJnNjKSAhPSBOQU1FX05PVF9GT1VORCkgewogICAgICAgICBzdHJ1Y3QgaW5wdXRfZXZlbnQgZXY7CiAgICAgICAgIGV2LnRpbWUudHZfc2VjID0gMDsKICAgICAgICAgZXYudGltZS50dl91c2VjID0gMDsKICAgICAgICAgZXYudHlwZSA9IEVWX0xFRDsKLSAgICAgICAgZXYuY29kZSA9IGxlZDsKKyAgICAgICAgZXYuY29kZSA9IHNjOwogICAgICAgICBldi52YWx1ZSA9IG9uID8gMSA6IDA7CiAKICAgICAgICAgc3NpemVfdCBuV3JpdGU7CkBAIC0xMjM5LDEyICsxMjU5LDEzIEBACiAKICAgICBpZiAoZGV2aWNlLT5jbGFzc2VzICYgKElOUFVUX0RFVklDRV9DTEFTU19KT1lTVElDSyB8IElOUFVUX0RFVklDRV9DTEFTU19HQU1FUEFEKSkgewogICAgICAgICBkZXZpY2UtPmNvbnRyb2xsZXJOdW1iZXIgPSBnZXROZXh0Q29udHJvbGxlck51bWJlckxvY2tlZChkZXZpY2UpOworICAgICAgICBzZXRMZWRGb3JDb250cm9sbGVyKGRldmljZSk7CiAgICAgfQogCiAgICAgLy8gUmVnaXN0ZXIgd2l0aCBlcG9sbC4KICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgZXZlbnRJdGVtOwogICAgIG1lbXNldCgmZXZlbnRJdGVtLCAwLCBzaXplb2YoZXZlbnRJdGVtKSk7Ci0gICAgZXZlbnRJdGVtLmV2ZW50cyA9IEVQT0xMSU47CisgICAgZXZlbnRJdGVtLmV2ZW50cyA9IG1Vc2luZ0Vwb2xsV2FrZXVwID8gRVBPTExJTiA6IEVQT0xMSU4gfCBFUE9MTFdBS0VVUDsKICAgICBldmVudEl0ZW0uZGF0YS51MzIgPSBkZXZpY2VJZDsKICAgICBpZiAoZXBvbGxfY3RsKG1FcG9sbEZkLCBFUE9MTF9DVExfQURELCBmZCwgJmV2ZW50SXRlbSkpIHsKICAgICAgICAgQUxPR0UoIkNvdWxkIG5vdCBhZGQgZGV2aWNlIGZkIHRvIGVwb2xsIGluc3RhbmNlLiAgZXJybm89JWQiLCBlcnJubyk7CkBAIC0xMjUyLDE1ICsxMjczLDIwIEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICAvLyBFbmFibGUgd2FrZS1sb2NrIGJlaGF2aW9yIG9uIGtlcm5lbHMgdGhhdCBzdXBwb3J0IGl0LgotICAgIC8vIFRPRE86IE9ubHkgbmVlZCB0aGlzIGZvciBkZXZpY2VzIHRoYXQgY2FuIHJlYWxseSB3YWtlIHRoZSBzeXN0ZW0uCisgICAgU3RyaW5nOCB3YWtlTWVjaGFuaXNtKCJFUE9MTFdBS0VVUCIpOworICAgIGlmICghbVVzaW5nRXBvbGxXYWtldXApIHsKICNpZm5kZWYgRVZJT0NTU1VTUEVOREJMT0NLCi0gICAgLy8gdWFwaSBoZWFkZXJzIGRvbid0IGluY2x1ZGUgRVZJT0NTU1VTUEVOREJMT0NLLCBhbmQgZnV0dXJlIGtlcm5lbHMKLSAgICAvLyB3aWxsIHVzZSBhbiBlcG9sbCBmbGFnIGluc3RlYWQsIHNvIGFzIGxvbmcgYXMgd2Ugd2FudCB0byBzdXBwb3J0Ci0gICAgLy8gdGhpcyBmZWF0dXJlLCB3ZSBuZWVkIHRvIGJlIHByZXBhcmVkIHRvIGRlZmluZSB0aGUgaW9jdGwgb3Vyc2VsdmVzLgorICAgICAgICAvLyB1YXBpIGhlYWRlcnMgZG9uJ3QgaW5jbHVkZSBFVklPQ1NTVVNQRU5EQkxPQ0ssIGFuZCBmdXR1cmUga2VybmVscworICAgICAgICAvLyB3aWxsIHVzZSBhbiBlcG9sbCBmbGFnIGluc3RlYWQsIHNvIGFzIGxvbmcgYXMgd2Ugd2FudCB0byBzdXBwb3J0CisgICAgICAgIC8vIHRoaXMgZmVhdHVyZSwgd2UgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBkZWZpbmUgdGhlIGlvY3RsIG91cnNlbHZlcy4KICNkZWZpbmUgRVZJT0NTU1VTUEVOREJMT0NLIF9JT1coJ0UnLCAweDkxLCBpbnQpCiAjZW5kaWYKLSAgICBib29sIHVzaW5nU3VzcGVuZEJsb2NrSW9jdGwgPSAhaW9jdGwoZmQsIEVWSU9DU1NVU1BFTkRCTE9DSywgMSk7CisgICAgICAgIGlmIChpb2N0bChmZCwgRVZJT0NTU1VTUEVOREJMT0NLLCAxKSkgeworICAgICAgICAgICAgd2FrZU1lY2hhbmlzbSA9ICI8bm9uZT4iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2FrZU1lY2hhbmlzbSA9ICJFVklPQ1NTVVNQRU5EQkxPQ0siOworICAgICAgICB9CisgICAgfQogCiAgICAgLy8gVGVsbCB0aGUga2VybmVsIHRoYXQgd2Ugd2FudCB0byB1c2UgdGhlIG1vbm90b25pYyBjbG9jayBmb3IgcmVwb3J0aW5nIHRpbWVzdGFtcHMKICAgICAvLyBhc3NvY2lhdGVkIHdpdGggaW5wdXQgZXZlbnRzLiAgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgaW5wdXQgc3lzdGVtCkBAIC0xMjgyLDE0ICsxMzA4LDE0IEBACiAKICAgICBBTE9HSSgiTmV3IGRldmljZTogaWQ9JWQsIGZkPSVkLCBwYXRoPSclcycsIG5hbWU9JyVzJywgY2xhc3Nlcz0weCV4LCAiCiAgICAgICAgICAgICAiY29uZmlndXJhdGlvbj0nJXMnLCBrZXlMYXlvdXQ9JyVzJywga2V5Q2hhcmFjdGVyTWFwPSclcycsIGJ1aWx0aW5LZXlib2FyZD0lcywgIgotICAgICAgICAgICAgInVzaW5nU3VzcGVuZEJsb2NrSW9jdGw9JXMsIHVzaW5nQ2xvY2tJb2N0bD0lcyIsCisgICAgICAgICAgICAid2FrZU1lY2hhbmlzbT0lcywgdXNpbmdDbG9ja0lvY3RsPSVzIiwKICAgICAgICAgIGRldmljZUlkLCBmZCwgZGV2aWNlUGF0aCwgZGV2aWNlLT5pZGVudGlmaWVyLm5hbWUuc3RyaW5nKCksCiAgICAgICAgICBkZXZpY2UtPmNsYXNzZXMsCiAgICAgICAgICBkZXZpY2UtPmNvbmZpZ3VyYXRpb25GaWxlLnN0cmluZygpLAogICAgICAgICAgZGV2aWNlLT5rZXlNYXAua2V5TGF5b3V0RmlsZS5zdHJpbmcoKSwKICAgICAgICAgIGRldmljZS0+a2V5TWFwLmtleUNoYXJhY3Rlck1hcEZpbGUuc3RyaW5nKCksCiAgICAgICAgICB0b1N0cmluZyhtQnVpbHRJbktleWJvYXJkSWQgPT0gZGV2aWNlSWQpLAotICAgICAgICAgdG9TdHJpbmcodXNpbmdTdXNwZW5kQmxvY2tJb2N0bCksIHRvU3RyaW5nKHVzaW5nQ2xvY2tJb2N0bCkpOworICAgICAgICAgd2FrZU1lY2hhbmlzbS5zdHJpbmcoKSwgdG9TdHJpbmcodXNpbmdDbG9ja0lvY3RsKSk7CiAKICAgICBhZGREZXZpY2VMb2NrZWQoZGV2aWNlKTsKICAgICByZXR1cm4gMDsKQEAgLTEzNzgsNiArMTQwNCwxMSBAQAogICAgIG1Db250cm9sbGVyTnVtYmVycy5jbGVhckJpdChzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtIC0gMSkpOwogfQogCit2b2lkIEV2ZW50SHViOjpzZXRMZWRGb3JDb250cm9sbGVyKERldmljZSogZGV2aWNlKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfQ09OVFJPTExFUl9MRURTOyBpKyspIHsKKyAgICAgICAgc2V0TGVkU3RhdGVMb2NrZWQoZGV2aWNlLCBBTEVEX0NPTlRST0xMRVJfMSArIGksIGRldmljZS0+Y29udHJvbGxlck51bWJlciA9PSBpICsgMSk7CisgICAgfQorfQogCiBib29sIEV2ZW50SHViOjpoYXNLZXljb2RlTG9ja2VkKERldmljZSogZGV2aWNlLCBpbnQga2V5Y29kZSkgY29uc3QgewogICAgIGlmICghZGV2aWNlLT5rZXlNYXAuaGF2ZUtleUxheW91dCgpIHx8ICFkZXZpY2UtPmtleUJpdG1hc2spIHsKQEAgLTEzOTcsNiArMTQyOCwyMSBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorc3RhdHVzX3QgRXZlbnRIdWI6Om1hcExlZChEZXZpY2UqIGRldmljZSwgaW50MzJfdCBsZWQsIGludDMyX3QqIG91dFNjYW5Db2RlKSBjb25zdCB7CisgICAgaWYgKCFkZXZpY2UtPmtleU1hcC5oYXZlS2V5TGF5b3V0KCkgfHwgIWRldmljZS0+bGVkQml0bWFzaykgeworICAgICAgICByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7CisgICAgfQorCisgICAgaW50MzJfdCBzY2FuQ29kZTsKKyAgICBpZihkZXZpY2UtPmtleU1hcC5rZXlMYXlvdXRNYXAtPmZpbmRTY2FuQ29kZUZvckxlZChsZWQsICZzY2FuQ29kZSkgIT0gTkFNRV9OT1RfRk9VTkQpIHsKKyAgICAgICAgaWYoc2NhbkNvZGUgPj0gMCAmJiBzY2FuQ29kZSA8PSBMRURfTUFYICYmIHRlc3RfYml0KHNjYW5Db2RlLCBkZXZpY2UtPmxlZEJpdG1hc2spKSB7CisgICAgICAgICAgICAqb3V0U2NhbkNvZGUgPSBzY2FuQ29kZTsKKyAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7Cit9CisKIHN0YXR1c190IEV2ZW50SHViOjpjbG9zZURldmljZUJ5UGF0aExvY2tlZChjb25zdCBjaGFyICpkZXZpY2VQYXRoKSB7CiAgICAgRGV2aWNlKiBkZXZpY2UgPSBnZXREZXZpY2VCeVBhdGhMb2NrZWQoZGV2aWNlUGF0aCk7CiAgICAgaWYgKGRldmljZSkgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvaW5wdXQvRXZlbnRIdWIuaCBiL3NlcnZpY2VzL2lucHV0L0V2ZW50SHViLmgKaW5kZXggYWUyOGYwMS4uYTlhMjhkMiAxMDA2NDQKLS0tIGEvc2VydmljZXMvaW5wdXQvRXZlbnRIdWIuaAorKysgYi9zZXJ2aWNlcy9pbnB1dC9FdmVudEh1Yi5oCkBAIC0yMzEsNiArMjMxLDggQEAKICAgICAgICAgICAgIHVpbnQ4X3QqIG91dEZsYWdzKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2NhbkNvZGUoaW50MzJfdCBkZXZpY2VJZCwgaW50MzJfdCBzY2FuQ29kZSkgY29uc3QgPSAwOworCisgICAgLyogTEVEIHJlbGF0ZWQgZnVuY3Rpb25zIGV4cGVjdCBBbmRyb2lkIExFRCBjb25zdGFudHMsIG5vdCBzY2FuIGNvZGVzIG9yIEhJRCB1c2FnZXMgKi8KICAgICB2aXJ0dWFsIGJvb2wgaGFzTGVkKGludDMyX3QgZGV2aWNlSWQsIGludDMyX3QgbGVkKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldExlZFN0YXRlKGludDMyX3QgZGV2aWNlSWQsIGludDMyX3QgbGVkLCBib29sIG9uKSA9IDA7CiAKQEAgLTM5Myw2ICszOTUsMTAgQEAKIAogICAgIGludDMyX3QgZ2V0TmV4dENvbnRyb2xsZXJOdW1iZXJMb2NrZWQoRGV2aWNlKiBkZXZpY2UpOwogICAgIHZvaWQgcmVsZWFzZUNvbnRyb2xsZXJOdW1iZXJMb2NrZWQoRGV2aWNlKiBkZXZpY2UpOworICAgIHZvaWQgc2V0TGVkRm9yQ29udHJvbGxlcihEZXZpY2UqIGRldmljZSk7CisKKyAgICBzdGF0dXNfdCBtYXBMZWQoRGV2aWNlKiBkZXZpY2UsIGludDMyX3QgbGVkLCBpbnQzMl90KiBvdXRTY2FuQ29kZSkgY29uc3Q7CisgICAgdm9pZCBzZXRMZWRTdGF0ZUxvY2tlZChEZXZpY2UqIGRldmljZSwgaW50MzJfdCBsZWQsIGJvb2wgb24pOwogCiAgICAgLy8gUHJvdGVjdCBhbGwgaW50ZXJuYWwgc3RhdGUuCiAgICAgbXV0YWJsZSBNdXRleCBtTG9jazsKQEAgLTQ0MCw2ICs0NDYsOCBAQAogICAgIHNpemVfdCBtUGVuZGluZ0V2ZW50Q291bnQ7CiAgICAgc2l6ZV90IG1QZW5kaW5nRXZlbnRJbmRleDsKICAgICBib29sIG1QZW5kaW5nSU5vdGlmeTsKKworICAgIGJvb2wgbVVzaW5nRXBvbGxXYWtldXA7CiB9OwogCiB9OyAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvc2VydmljZXMvaW5wdXQvSW5wdXRSZWFkZXIuY3BwIGIvc2VydmljZXMvaW5wdXQvSW5wdXRSZWFkZXIuY3BwCmluZGV4IDAzODUyYTUuLmE2ODNjNGIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2lucHV0L0lucHV0UmVhZGVyLmNwcAorKysgYi9zZXJ2aWNlcy9pbnB1dC9JbnB1dFJlYWRlci5jcHAKQEAgLTIxOTcsOSArMjE5Nyw5IEBACiB9CiAKIHZvaWQgS2V5Ym9hcmRJbnB1dE1hcHBlcjo6cmVzZXRMZWRTdGF0ZSgpIHsKLSAgICBpbml0aWFsaXplTGVkU3RhdGUobUNhcHNMb2NrTGVkU3RhdGUsIExFRF9DQVBTTCk7Ci0gICAgaW5pdGlhbGl6ZUxlZFN0YXRlKG1OdW1Mb2NrTGVkU3RhdGUsIExFRF9OVU1MKTsKLSAgICBpbml0aWFsaXplTGVkU3RhdGUobVNjcm9sbExvY2tMZWRTdGF0ZSwgTEVEX1NDUk9MTEwpOworICAgIGluaXRpYWxpemVMZWRTdGF0ZShtQ2Fwc0xvY2tMZWRTdGF0ZSwgQUxFRF9DQVBTX0xPQ0spOworICAgIGluaXRpYWxpemVMZWRTdGF0ZShtTnVtTG9ja0xlZFN0YXRlLCBBTEVEX05VTV9MT0NLKTsKKyAgICBpbml0aWFsaXplTGVkU3RhdGUobVNjcm9sbExvY2tMZWRTdGF0ZSwgQUxFRF9TQ1JPTExfTE9DSyk7CiAKICAgICB1cGRhdGVMZWRTdGF0ZSh0cnVlKTsKIH0KQEAgLTIyMTAsMTEgKzIyMTAsMTEgQEAKIH0KIAogdm9pZCBLZXlib2FyZElucHV0TWFwcGVyOjp1cGRhdGVMZWRTdGF0ZShib29sIHJlc2V0KSB7Ci0gICAgdXBkYXRlTGVkU3RhdGVGb3JNb2RpZmllcihtQ2Fwc0xvY2tMZWRTdGF0ZSwgTEVEX0NBUFNMLAorICAgIHVwZGF0ZUxlZFN0YXRlRm9yTW9kaWZpZXIobUNhcHNMb2NrTGVkU3RhdGUsIEFMRURfQ0FQU19MT0NLLAogICAgICAgICAgICAgQU1FVEFfQ0FQU19MT0NLX09OLCByZXNldCk7Ci0gICAgdXBkYXRlTGVkU3RhdGVGb3JNb2RpZmllcihtTnVtTG9ja0xlZFN0YXRlLCBMRURfTlVNTCwKKyAgICB1cGRhdGVMZWRTdGF0ZUZvck1vZGlmaWVyKG1OdW1Mb2NrTGVkU3RhdGUsIEFMRURfTlVNX0xPQ0ssCiAgICAgICAgICAgICBBTUVUQV9OVU1fTE9DS19PTiwgcmVzZXQpOwotICAgIHVwZGF0ZUxlZFN0YXRlRm9yTW9kaWZpZXIobVNjcm9sbExvY2tMZWRTdGF0ZSwgTEVEX1NDUk9MTEwsCisgICAgdXBkYXRlTGVkU3RhdGVGb3JNb2RpZmllcihtU2Nyb2xsTG9ja0xlZFN0YXRlLCBBTEVEX1NDUk9MTF9MT0NLLAogICAgICAgICAgICAgQU1FVEFfU0NST0xMX0xPQ0tfT04sIHJlc2V0KTsKIH0KIApAQCAtNjI4Myw3ICs2MjgzLDcgQEAKIAogICAgICAgICAgICAgICAgIC8vIFRvIGVsaW1pbmF0ZSBub2lzZSB3aGlsZSB0aGUgam95c3RpY2sgaXMgYXQgcmVzdCwgZmlsdGVyIG91dCBzbWFsbCB2YXJpYXRpb25zCiAgICAgICAgICAgICAgICAgLy8gaW4gYXhpcyB2YWx1ZXMgdXAgZnJvbnQuCi0gICAgICAgICAgICAgICAgYXhpcy5maWx0ZXIgPSBheGlzLmZsYXQgKiAwLjI1ZjsKKyAgICAgICAgICAgICAgICBheGlzLmZpbHRlciA9IGF4aXMuZnV6eiA/IGF4aXMuZnV6eiA6IGF4aXMuZmxhdCAqIDAuMjVmOwogCiAgICAgICAgICAgICAgICAgbUF4ZXMuYWRkKGFicywgYXhpcyk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9pbnB1dC9JbnB1dFJlYWRlci5oIGIvc2VydmljZXMvaW5wdXQvSW5wdXRSZWFkZXIuaAppbmRleCBhOGJiNjM2Li5lNmY0NWI2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9pbnB1dC9JbnB1dFJlYWRlci5oCisrKyBiL3NlcnZpY2VzL2lucHV0L0lucHV0UmVhZGVyLmgKQEAgLTU3NCw4ICs1NzQsOCBAQAogcHJpdmF0ZToKICAgICBJbnB1dFJlYWRlckNvbnRleHQqIG1Db250ZXh0OwogICAgIGludDMyX3QgbUlkOwotICAgIGludDMyX3QgbUNvbnRyb2xsZXJOdW1iZXI7CiAgICAgaW50MzJfdCBtR2VuZXJhdGlvbjsKKyAgICBpbnQzMl90IG1Db250cm9sbGVyTnVtYmVyOwogICAgIElucHV0RGV2aWNlSWRlbnRpZmllciBtSWRlbnRpZmllcjsKICAgICBTdHJpbmc4IG1BbGlhczsKICAgICB1aW50MzJfdCBtQ2xhc3NlczsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2lucHV0L1Nwcml0ZUNvbnRyb2xsZXIuY3BwIGIvc2VydmljZXMvaW5wdXQvU3ByaXRlQ29udHJvbGxlci5jcHAKaW5kZXggZmQ5YzY2Yi4uMjY2N2E3MiAxMDA2NDQKLS0tIGEvc2VydmljZXMvaW5wdXQvU3ByaXRlQ29udHJvbGxlci5jcHAKKysrIGIvc2VydmljZXMvaW5wdXQvU3ByaXRlQ29udHJvbGxlci5jcHAKQEAgLTIxNiwxMiArMjE2LDEyIEBACiAgICAgICAgICAgICAgICAgcGFpbnQuc2V0WGZlcm1vZGVNb2RlKFNrWGZlcm1vZGU6OmtTcmNfTW9kZSk7CiAgICAgICAgICAgICAgICAgc3VyZmFjZUNhbnZhcy5kcmF3Qml0bWFwKHVwZGF0ZS5zdGF0ZS5pY29uLmJpdG1hcCwgMCwgMCwgJnBhaW50KTsKIAotICAgICAgICAgICAgICAgIGlmIChvdXRCdWZmZXIud2lkdGggPiB1aW50MzJfdCh1cGRhdGUuc3RhdGUuaWNvbi5iaXRtYXAud2lkdGgoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAob3V0QnVmZmVyLndpZHRoID4gdXBkYXRlLnN0YXRlLmljb24uYml0bWFwLndpZHRoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgcGFpbnQuc2V0Q29sb3IoMCk7IC8vIHRyYW5zcGFyZW50IGZpbGwgY29sb3IKICAgICAgICAgICAgICAgICAgICAgc3VyZmFjZUNhbnZhcy5kcmF3UmVjdENvb3Jkcyh1cGRhdGUuc3RhdGUuaWNvbi5iaXRtYXAud2lkdGgoKSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRCdWZmZXIud2lkdGgsIHVwZGF0ZS5zdGF0ZS5pY29uLmJpdG1hcC5oZWlnaHQoKSwgcGFpbnQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAob3V0QnVmZmVyLmhlaWdodCA+IHVpbnQzMl90KHVwZGF0ZS5zdGF0ZS5pY29uLmJpdG1hcC5oZWlnaHQoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAob3V0QnVmZmVyLmhlaWdodCA+IHVwZGF0ZS5zdGF0ZS5pY29uLmJpdG1hcC5oZWlnaHQoKSkgewogICAgICAgICAgICAgICAgICAgICBwYWludC5zZXRDb2xvcigwKTsgLy8gdHJhbnNwYXJlbnQgZmlsbCBjb2xvcgogICAgICAgICAgICAgICAgICAgICBzdXJmYWNlQ2FudmFzLmRyYXdSZWN0Q29vcmRzKDAsIHVwZGF0ZS5zdGF0ZS5pY29uLmJpdG1hcC5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRCdWZmZXIud2lkdGgsIG91dEJ1ZmZlci5oZWlnaHQsIHBhaW50KTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0JhdHRlcnlTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9CYXR0ZXJ5U2VydmljZS5qYXZhCmluZGV4IDVmM2Y4OTQuLmIyMzRhNGUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0JhdHRlcnlTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQmF0dGVyeVNlcnZpY2UuamF2YQpAQCAtMTYwLDcgKzE2MCw3IEBACiAKICAgICAgICAgbUJhdHRlcnlQcm9wZXJ0aWVzTGlzdGVuZXIgPSBuZXcgQmF0dGVyeUxpc3RlbmVyKCk7CiAKLSAgICAgICAgSUJpbmRlciBiID0gU2VydmljZU1hbmFnZXIuZ2V0U2VydmljZSgiYmF0dGVyeXByb3ByZWciKTsKKyAgICAgICAgSUJpbmRlciBiID0gU2VydmljZU1hbmFnZXIuZ2V0U2VydmljZSgiYmF0dGVyeXByb3BlcnRpZXMiKTsKICAgICAgICAgbUJhdHRlcnlQcm9wZXJ0aWVzUmVnaXN0cmFyID0gSUJhdHRlcnlQcm9wZXJ0aWVzUmVnaXN0cmFyLlN0dWIuYXNJbnRlcmZhY2UoYik7CiAKICAgICAgICAgdHJ5IHsKQEAgLTMxNCw4ICszMTQsNiBAQAogICAgICAgICAgICAgICAgICAgICArICIsIGJhdHRlcnlMZXZlbD0iICsgbUJhdHRlcnlQcm9wcy5iYXR0ZXJ5TGV2ZWwKICAgICAgICAgICAgICAgICAgICAgKyAiLCBiYXR0ZXJ5VGVjaG5vbG9neT0iICsgbUJhdHRlcnlQcm9wcy5iYXR0ZXJ5VGVjaG5vbG9neQogICAgICAgICAgICAgICAgICAgICArICIsIGJhdHRlcnlWb2x0YWdlPSIgKyBtQmF0dGVyeVByb3BzLmJhdHRlcnlWb2x0YWdlCi0gICAgICAgICAgICAgICAgICAgICsgIiwgYmF0dGVyeUN1cnJlbnROb3c9IiArIG1CYXR0ZXJ5UHJvcHMuYmF0dGVyeUN1cnJlbnROb3cKLSAgICAgICAgICAgICAgICAgICAgKyAiLCBiYXR0ZXJ5Q2hhcmdlQ291bnRlcj0iICsgbUJhdHRlcnlQcm9wcy5iYXR0ZXJ5Q2hhcmdlQ291bnRlcgogICAgICAgICAgICAgICAgICAgICArICIsIGJhdHRlcnlUZW1wZXJhdHVyZT0iICsgbUJhdHRlcnlQcm9wcy5iYXR0ZXJ5VGVtcGVyYXR1cmUKICAgICAgICAgICAgICAgICAgICAgKyAiLCBtQmF0dGVyeUxldmVsQ3JpdGljYWw9IiArIG1CYXR0ZXJ5TGV2ZWxDcml0aWNhbAogICAgICAgICAgICAgICAgICAgICArICIsIG1QbHVnVHlwZT0iICsgbVBsdWdUeXBlKTsKQEAgLTYxNiwxNSArNjE0LDYgQEAKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCIgIGxldmVsOiAiICsgbUJhdHRlcnlQcm9wcy5iYXR0ZXJ5TGV2ZWwpOwogICAgICAgICAgICAgICAgIHB3LnByaW50bG4oIiAgc2NhbGU6ICIgKyBCQVRURVJZX1NDQUxFKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCIgIHZvbHRhZ2U6ICIgKyBtQmF0dGVyeVByb3BzLmJhdHRlcnlWb2x0YWdlKTsKLQotICAgICAgICAgICAgICAgIGlmIChtQmF0dGVyeVByb3BzLmJhdHRlcnlDdXJyZW50Tm93ICE9IEludGVnZXIuTUlOX1ZBTFVFKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB3LnByaW50bG4oIiAgY3VycmVudCBub3c6ICIgKyBtQmF0dGVyeVByb3BzLmJhdHRlcnlDdXJyZW50Tm93KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobUJhdHRlcnlQcm9wcy5iYXR0ZXJ5Q2hhcmdlQ291bnRlciAhPSBJbnRlZ2VyLk1JTl9WQUxVRSkgewotICAgICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCIgIGNoYXJnZSBjb3VudGVyOiAiICsgbUJhdHRlcnlQcm9wcy5iYXR0ZXJ5Q2hhcmdlQ291bnRlcik7Ci0gICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiICB0ZW1wZXJhdHVyZTogIiArIG1CYXR0ZXJ5UHJvcHMuYmF0dGVyeVRlbXBlcmF0dXJlKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCIgIHRlY2hub2xvZ3k6ICIgKyBtQmF0dGVyeVByb3BzLmJhdHRlcnlUZWNobm9sb2d5KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT0gMyAmJiAic2V0Ii5lcXVhbHMoYXJnc1swXSkpIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0NvbW1vblRpbWVNYW5hZ2VtZW50U2VydmljZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQ29tbW9uVGltZU1hbmFnZW1lbnRTZXJ2aWNlLmphdmEKaW5kZXggNzEwZmI5ZC4uNjBiMzY2YSAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQ29tbW9uVGltZU1hbmFnZW1lbnRTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQ29tbW9uVGltZU1hbmFnZW1lbnRTZXJ2aWNlLmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKQEAgLTI2LDEwICsyNSw4IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5JQ29ubmVjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5JTmV0d29ya01hbmFnZW1lbnRFdmVudE9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQubmV0LkludGVyZmFjZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya0luZm87CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Db21tb25UaW1lQ29uZmlnOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0Nvbm5lY3Rpdml0eVNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0Nvbm5lY3Rpdml0eVNlcnZpY2UuamF2YQppbmRleCBkNDJhZTNhLi42NTc0ODk4IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Db25uZWN0aXZpdHlTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQ29ubmVjdGl2aXR5U2VydmljZS5qYXZhCkBAIC0xMTIsNiArMTEyLDcgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuRGN0Q29uc3RhbnRzOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5QaG9uZTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuUGhvbmVDb25zdGFudHM7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LlRlbGVwaG9ueUludGVudHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5JbmRlbnRpbmdQcmludFdyaXRlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlhtbFV0aWxzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5hbS5CYXR0ZXJ5U3RhdHNTZXJ2aWNlOwpAQCAtMTQyLDcgKzE0Myw2IEBACiBpbXBvcnQgamF2YS5uZXQuSW5ldDZBZGRyZXNzOwogaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwogaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOwogaW1wb3J0IGphdmEubmV0LlVua25vd25Ib3N0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKQEAgLTIzMjUsMzYgKzIzMjUsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUNhcHRpdmVQb3J0YWxUcmFja2VyQ2hlY2soTmV0d29ya0luZm8gaW5mbykgewotICAgICAgICBpZiAoREJHKSBsb2coIkNhcHRpdmUgcG9ydGFsIGNoZWNrICIgKyBpbmZvKTsKLSAgICAgICAgaW50IHR5cGUgPSBpbmZvLmdldFR5cGUoKTsKLSAgICAgICAgZmluYWwgTmV0d29ya1N0YXRlVHJhY2tlciB0aGlzTmV0ID0gbU5ldFRyYWNrZXJzW3R5cGVdOwotICAgICAgICBpZiAobU5ldENvbmZpZ3NbdHlwZV0uaXNEZWZhdWx0KCkpIHsKLSAgICAgICAgICAgIGlmIChtQWN0aXZlRGVmYXVsdE5ldHdvcmsgIT0gLTEgJiYgbUFjdGl2ZURlZmF1bHROZXR3b3JrICE9IHR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNOZXdOZXRUeXBlUHJlZmVycmVkT3ZlckN1cnJlbnROZXRUeXBlKHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiQ2FwdGl2ZSBjaGVjayBvbiAiICsgaW5mby5nZXRUeXBlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbUNhcHRpdmVQb3J0YWxUcmFja2VyLmRldGVjdENhcHRpdmVQb3J0YWwobmV3IE5ldHdvcmtJbmZvKGluZm8pKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiVGVhciBkb3duIGxvdyBwcmlvcml0eSBuZXQgIiArIGluZm8uZ2V0VHlwZU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duKHRoaXNOZXQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKERCRykgbG9nKCJoYW5kbGVDYXB0aXZlUG9ydGFsVHJhY2tlckNoZWNrOiBjYWxsIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlIG5pPSIgKyBpbmZvKTsKLSAgICAgICAgdGhpc05ldC5jYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZSgpOwotICAgIH0KLQotICAgIC8qKiBAaGlkZSAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKE5ldHdvcmtJbmZvIGluZm8pIHsKLSAgICAgICAgZW5mb3JjZUNvbm5lY3Rpdml0eUludGVybmFsUGVybWlzc2lvbigpOwotICAgICAgICBpZiAoREJHKSBsb2coImNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlOiBuaT0iICsgaW5mbyk7Ci0gICAgICAgIG1OZXRUcmFja2Vyc1tpbmZvLmdldFR5cGUoKV0uY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGUoKTsKLSAgICB9Ci0KICAgICAvKiogQGhpZGUgKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZWQoTmV0d29ya0luZm8gaW5mbywgYm9vbGVhbiBpc0NhcHRpdmVQb3J0YWwpIHsKQEAgLTI5ODEsOSArMjk1MSw2IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmdldERldGFpbGVkU3RhdGUoKSA9PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtJbmZvLkRldGFpbGVkU3RhdGUuRkFJTEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDb25uZWN0aW9uRmFpbHVyZShpbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmZvLmdldERldGFpbGVkU3RhdGUoKSA9PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldGFpbGVkU3RhdGUuQ0FQVElWRV9QT1JUQUxfQ0hFQ0spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNhcHRpdmVQb3J0YWxUcmFja2VyQ2hlY2soaW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5mby5pc0Nvbm5lY3RlZFRvUHJvdmlzaW9uaW5nTmV0d29yaygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRPRE86IENyZWF0ZSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfTU9CSUxFX1BST1ZJU0lPTklORwpAQCAtNDU2MywxNSArNDUzMCwyNyBAQAogICAgICAgICAgICAgbWRzdC5lbmFibGVNb2JpbGVQcm92aXNpb25pbmcodXJsKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiaGFuZGxlTW9iaWxlUHJvdmlzaW9uaW5nQWN0aW9uOiBvbiBkZWZhdWx0IG5ldHdvcmsiKTsKLSAgICAgICAgICAgIEludGVudCBuZXdJbnRlbnQgPSBJbnRlbnQubWFrZU1haW5TZWxlY3RvckFjdGl2aXR5KEludGVudC5BQ1RJT05fTUFJTiwKLSAgICAgICAgICAgICAgICAgICAgSW50ZW50LkNBVEVHT1JZX0FQUF9CUk9XU0VSKTsKLSAgICAgICAgICAgIG5ld0ludGVudC5zZXREYXRhKFVyaS5wYXJzZSh1cmwpKTsKLSAgICAgICAgICAgIG5ld0ludGVudC5zZXRGbGFncyhJbnRlbnQuRkxBR19BQ1RJVklUWV9CUk9VR0hUX1RPX0ZST05UIHwKLSAgICAgICAgICAgICAgICAgICAgSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0spOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBtQ29udGV4dC5zdGFydEFjdGl2aXR5KG5ld0ludGVudCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChBY3Rpdml0eU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBsb2dlKCJoYW5kbGVNb2JpbGVQcm92aXNpb25pbmdBY3Rpb246IHN0YXJ0QWN0aXZpdHkgZmFpbGVkIiArIGUpOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yICBhcHBzIHRoYXQgY2FuIGhhbmRsZSBwcm92aXNpb25pbmcgZmlyc3QKKyAgICAgICAgICAgIEludGVudCBwcm92aXNpb25pbmdJbnRlbnQgPSBuZXcgSW50ZW50KFRlbGVwaG9ueUludGVudHMuQUNUSU9OX0NBUlJJRVJfU0VUVVApOworICAgICAgICAgICAgcHJvdmlzaW9uaW5nSW50ZW50LmFkZENhdGVnb3J5KFRlbGVwaG9ueUludGVudHMuQ0FURUdPUllfTUNDTU5DX1BSRUZJWAorICAgICAgICAgICAgICAgICAgICArIG1UZWxlcGhvbnlNYW5hZ2VyLmdldFNpbU9wZXJhdG9yKCkpOworICAgICAgICAgICAgaWYgKG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkucmVzb2x2ZUFjdGl2aXR5KHByb3Zpc2lvbmluZ0ludGVudCwgMCAvKiBmbGFncyAqLykKKyAgICAgICAgICAgICAgICAgICAgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHByb3Zpc2lvbmluZ0ludGVudC5zZXRGbGFncyhJbnRlbnQuRkxBR19BQ1RJVklUWV9CUk9VR0hUX1RPX0ZST05UIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIEludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLKTsKKyAgICAgICAgICAgICAgICBtQ29udGV4dC5zdGFydEFjdGl2aXR5KHByb3Zpc2lvbmluZ0ludGVudCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIElmIG5vIGFwcHMgZXhpc3QsIHVzZSBzdGFuZGFyZCBVUkwgQUNUSU9OX1ZJRVcgbWV0aG9kCisgICAgICAgICAgICAgICAgSW50ZW50IG5ld0ludGVudCA9IEludGVudC5tYWtlTWFpblNlbGVjdG9yQWN0aXZpdHkoSW50ZW50LkFDVElPTl9NQUlOLAorICAgICAgICAgICAgICAgICAgICAgICAgSW50ZW50LkNBVEVHT1JZX0FQUF9CUk9XU0VSKTsKKyAgICAgICAgICAgICAgICBuZXdJbnRlbnQuc2V0RGF0YShVcmkucGFyc2UodXJsKSk7CisgICAgICAgICAgICAgICAgbmV3SW50ZW50LnNldEZsYWdzKEludGVudC5GTEFHX0FDVElWSVRZX0JST1VHSFRfVE9fRlJPTlQgfAorICAgICAgICAgICAgICAgICAgICAgICAgSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0spOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LnN0YXJ0QWN0aXZpdHkobmV3SW50ZW50KTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChBY3Rpdml0eU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nZSgiaGFuZGxlTW9iaWxlUHJvdmlzaW9uaW5nQWN0aW9uOiBzdGFydEFjdGl2aXR5IGZhaWxlZCIgKyBlKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Db25zdW1lcklyU2VydmljZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQ29uc3VtZXJJclNlcnZpY2UuamF2YQppbmRleCA3ODNkZmYxLi4wNjZhOWM0IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Db25zdW1lcklyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0NvbnN1bWVySXJTZXJ2aWNlLmphdmEKQEAgLTE2LDMzICsxNiwxMyBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlcjsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ29udGVudE9ic2VydmVyOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuaW5wdXQuSW5wdXRNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuSUNvbnN1bWVySXJTZXJ2aWNlOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Xb3JrU291cmNlOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5TZXR0aW5nTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklucHV0RGV2aWNlOwogCiBpbXBvcnQgamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwogCiBwdWJsaWMgY2xhc3MgQ29uc3VtZXJJclNlcnZpY2UgZXh0ZW5kcyBJQ29uc3VtZXJJclNlcnZpY2UuU3R1YiB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDb25zdW1lcklyU2VydmljZSI7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9EaXNrU3RhdHNTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9EaXNrU3RhdHNTZXJ2aWNlLmphdmEKaW5kZXggYWMyNWRjNS4uYmMxMmZjNSAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvRGlza1N0YXRzU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0Rpc2tTdGF0c1NlcnZpY2UuamF2YQpAQCAtMTksNyArMTksNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5GaWxlVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC5vcy5TdGF0RnM7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvRW50cm9weU1peGVyLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9FbnRyb3B5TWl4ZXIuamF2YQppbmRleCBjZmRiZjdkLi4yNGQ4ZDFlIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9FbnRyb3B5TWl4ZXIuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9FbnRyb3B5TWl4ZXIuamF2YQpAQCAtMjAsNyArMjAsNiBAQAogaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9JbnB1dE1ldGhvZE1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9JbnB1dE1ldGhvZE1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggYTk5NmRiZC4uZjA2MTE0OSAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvSW5wdXRNZXRob2RNYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0lucHV0TWV0aG9kTWFuYWdlclNlcnZpY2UuamF2YQpAQCAtMTYsNiArMTYsOCBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXI7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5jb250ZW50LlBhY2thZ2VNb25pdG9yOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZVN3aXRjaGluZ0NvbnRyb2xsZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RTdWJ0eXBlU3dpdGNoaW5nQ29udHJvbGxlci5JbWVTdWJ0eXBlTGlzdEl0ZW07CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RVdGlsczsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZFV0aWxzLklucHV0TWV0aG9kU2V0dGluZ3M7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuSGFuZGxlckNhbGxlcjsKQEAgLTExNCwxMiArMTE2LDkgQEAKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7CiAKIC8qKgogICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHN5c3RlbSBzZXJ2aWNlIHRoYXQgbWFuYWdlcyBpbnB1dCBtZXRob2RzLgpAQCAtMTUwLDcgKzE0OSw3IEBACiAKICAgICBzdGF0aWMgZmluYWwgaW50IE1TR19IQVJEX0tFWUJPQVJEX1NXSVRDSF9DSEFOR0VEID0gNDAwMDsKIAotICAgIHN0YXRpYyBmaW5hbCBsb25nIFRJTUVfVE9fUkVDT05ORUNUID0gMTAqMTAwMDsKKyAgICBzdGF0aWMgZmluYWwgbG9uZyBUSU1FX1RPX1JFQ09OTkVDVCA9IDMgKiAxMDAwOwogCiAgICAgc3RhdGljIGZpbmFsIGludCBTRUNVUkVfU1VHR0VTVElPTl9TUEFOU19NQVhfU0laRSA9IDIwOwogCkBAIC0xNjcsNyArMTY2LDYgQEAKICAgICBmaW5hbCBIYW5kbGVyQ2FsbGVyIG1DYWxsZXI7CiAgICAgZmluYWwgYm9vbGVhbiBtSGFzRmVhdHVyZTsKICAgICBwcml2YXRlIElucHV0TWV0aG9kRmlsZU1hbmFnZXIgbUZpbGVNYW5hZ2VyOwotICAgIHByaXZhdGUgSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdE1hbmFnZXIgbUltTGlzdE1hbmFnZXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBIYXJkS2V5Ym9hcmRMaXN0ZW5lciBtSGFyZEtleWJvYXJkTGlzdGVuZXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBXaW5kb3dNYW5hZ2VyU2VydmljZSBtV2luZG93TWFuYWdlclNlcnZpY2U7CiAKQEAgLTE3OSw2ICsxNzcsNyBAQAogICAgIGZpbmFsIEhhc2hNYXA8U3RyaW5nLCBJbnB1dE1ldGhvZEluZm8+IG1NZXRob2RNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIElucHV0TWV0aG9kSW5mbz4oKTsKICAgICBwcml2YXRlIGZpbmFsIExydUNhY2hlPFN1Z2dlc3Rpb25TcGFuLCBJbnB1dE1ldGhvZEluZm8+IG1TZWN1cmVTdWdnZXN0aW9uU3BhbnMgPQogICAgICAgICAgICAgbmV3IExydUNhY2hlPFN1Z2dlc3Rpb25TcGFuLCBJbnB1dE1ldGhvZEluZm8+KFNFQ1VSRV9TVUdHRVNUSU9OX1NQQU5TX01BWF9TSVpFKTsKKyAgICBwcml2YXRlIGZpbmFsIElucHV0TWV0aG9kU3VidHlwZVN3aXRjaGluZ0NvbnRyb2xsZXIgbVN3aXRjaGluZ0NvbnRyb2xsZXI7CiAKICAgICAvLyBVc2VkIHRvIGJyaW5nIElNRSBzZXJ2aWNlIHVwIHRvIHZpc2libGUgYWRqdXN0bWVudCB3aGlsZSBpdCBpcyBiZWluZyBzaG93bi4KICAgICBmaW5hbCBTZXJ2aWNlQ29ubmVjdGlvbiBtVmlzaWJsZUNvbm5lY3Rpb24gPSBuZXcgU2VydmljZUNvbm5lY3Rpb24oKSB7CkBAIC02NzcsNyArNjc2LDggQEAKICAgICAgICAgbVNldHRpbmdzID0gbmV3IElucHV0TWV0aG9kU2V0dGluZ3MoCiAgICAgICAgICAgICAgICAgbVJlcywgY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwgbU1ldGhvZE1hcCwgbU1ldGhvZExpc3QsIHVzZXJJZCk7CiAgICAgICAgIG1GaWxlTWFuYWdlciA9IG5ldyBJbnB1dE1ldGhvZEZpbGVNYW5hZ2VyKG1NZXRob2RNYXAsIHVzZXJJZCk7Ci0gICAgICAgIG1JbUxpc3RNYW5hZ2VyID0gbmV3IElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3RNYW5hZ2VyKGNvbnRleHQsIHRoaXMpOworICAgICAgICBtU3dpdGNoaW5nQ29udHJvbGxlciA9IG5ldyBJbnB1dE1ldGhvZFN1YnR5cGVTd2l0Y2hpbmdDb250cm9sbGVyKG1TZXR0aW5ncyk7CisgICAgICAgIG1Td2l0Y2hpbmdDb250cm9sbGVyLnJlc2V0Q2lyY3VsYXJMaXN0TG9ja2VkKGNvbnRleHQpOwogCiAgICAgICAgIC8vIEp1c3QgY2hlY2tpbmcgaWYgZGVmYXVsdEltaUlkIGlzIGVtcHR5IG9yIG5vdAogICAgICAgICBmaW5hbCBTdHJpbmcgZGVmYXVsdEltaUlkID0gbVNldHRpbmdzLmdldFNlbGVjdGVkSW5wdXRNZXRob2QoKTsKQEAgLTc1Nyw4ICs3NTcsOCBAQAogICAgICAgICAgICAgaWYgKERFQlVHKSB7CiAgICAgICAgICAgICAgICAgU2xvZy5pKFRBRywgIkxvY2FsZSBoYXMgYmVlbiBjaGFuZ2VkIHRvICIgKyBuZXdMb2NhbGUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdE1hbmFnZXIgc2hvdWxkIGJlIHJlc2V0IHdoZW4gdGhlIGxvY2FsZSBpcyBjaGFuZ2VkLgotICAgICAgICAgICAgbUltTGlzdE1hbmFnZXIgPSBuZXcgSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdE1hbmFnZXIobUNvbnRleHQsIHRoaXMpOworICAgICAgICAgICAgLy8gQ2lyY3VsYXJMaXN0IHNob3VsZCBiZSByZXNldCB3aGVuIHRoZSBsb2NhbGUgaXMgY2hhbmdlZC4KKyAgICAgICAgICAgIG1Td2l0Y2hpbmdDb250cm9sbGVyLnJlc2V0Q2lyY3VsYXJMaXN0TG9ja2VkKG1Db250ZXh0KTsKICAgICAgICAgICAgIGJ1aWxkSW5wdXRNZXRob2RMaXN0TG9ja2VkKG1NZXRob2RMaXN0LCBtTWV0aG9kTWFwLCByZXNldERlZmF1bHRFbmFibGVkSW1lKTsKICAgICAgICAgICAgIGlmICghdXBkYXRlT25seVdoZW5Mb2NhbGVDaGFuZ2VkKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHNlbGVjdGVkSW1pSWQgPSBtU2V0dGluZ3MuZ2V0U2VsZWN0ZWRJbnB1dE1ldGhvZCgpOwpAQCAtOTYwLDE3ICs5NjAsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBIYXNoTWFwPElucHV0TWV0aG9kSW5mbywgTGlzdDxJbnB1dE1ldGhvZFN1YnR5cGU+PgotICAgICAgICAgICAgZ2V0RXhwbGljaXRseU9ySW1wbGljaXRseUVuYWJsZWRJbnB1dE1ldGhvZHNBbmRTdWJ0eXBlTGlzdExvY2tlZCgpIHsKLSAgICAgICAgSGFzaE1hcDxJbnB1dE1ldGhvZEluZm8sIExpc3Q8SW5wdXRNZXRob2RTdWJ0eXBlPj4gZW5hYmxlZElucHV0TWV0aG9kQW5kU3VidHlwZXMgPQotICAgICAgICAgICAgICAgIG5ldyBIYXNoTWFwPElucHV0TWV0aG9kSW5mbywgTGlzdDxJbnB1dE1ldGhvZFN1YnR5cGU+PigpOwotICAgICAgICBmb3IgKElucHV0TWV0aG9kSW5mbyBpbWk6IG1TZXR0aW5ncy5nZXRFbmFibGVkSW5wdXRNZXRob2RMaXN0TG9ja2VkKCkpIHsKLSAgICAgICAgICAgIGVuYWJsZWRJbnB1dE1ldGhvZEFuZFN1YnR5cGVzLnB1dCgKLSAgICAgICAgICAgICAgICAgICAgaW1pLCBtU2V0dGluZ3MuZ2V0RW5hYmxlZElucHV0TWV0aG9kU3VidHlwZUxpc3RMb2NrZWQobUNvbnRleHQsIGltaSwgdHJ1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBlbmFibGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlczsKLSAgICB9Ci0KICAgICAvKioKICAgICAgKiBAcGFyYW0gaW1pSWQgaWYgbnVsbCwgcmV0dXJucyBlbmFibGVkIHN1YnR5cGVzIGZvciB0aGUgY3VycmVudCBpbWkKICAgICAgKiBAcmV0dXJuIGVuYWJsZWQgc3VidHlwZXMgb2YgdGhlIHNwZWNpZmllZCBpbWkKQEAgLTIxNTMsNyArMjE0Miw3IEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgc3luY2hyb25pemVkIChtTWV0aG9kTWFwKSB7Ci0gICAgICAgICAgICBmaW5hbCBJbWVTdWJ0eXBlTGlzdEl0ZW0gbmV4dFN1YnR5cGUgPSBtSW1MaXN0TWFuYWdlci5nZXROZXh0SW5wdXRNZXRob2QoCisgICAgICAgICAgICBmaW5hbCBJbWVTdWJ0eXBlTGlzdEl0ZW0gbmV4dFN1YnR5cGUgPSBtU3dpdGNoaW5nQ29udHJvbGxlci5nZXROZXh0SW5wdXRNZXRob2QoCiAgICAgICAgICAgICAgICAgICAgIG9ubHlDdXJyZW50SW1lLCBtTWV0aG9kTWFwLmdldChtQ3VyTWV0aG9kSWQpLCBtQ3VycmVudFN1YnR5cGUpOwogICAgICAgICAgICAgaWYgKG5leHRTdWJ0eXBlID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTY5LDcgKzIxNTgsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHN5bmNocm9uaXplZCAobU1ldGhvZE1hcCkgewotICAgICAgICAgICAgZmluYWwgSW1lU3VidHlwZUxpc3RJdGVtIG5leHRTdWJ0eXBlID0gbUltTGlzdE1hbmFnZXIuZ2V0TmV4dElucHV0TWV0aG9kKAorICAgICAgICAgICAgZmluYWwgSW1lU3VidHlwZUxpc3RJdGVtIG5leHRTdWJ0eXBlID0gbVN3aXRjaGluZ0NvbnRyb2xsZXIuZ2V0TmV4dElucHV0TWV0aG9kKAogICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBvbmx5Q3VycmVudEltZSAqLywgbU1ldGhvZE1hcC5nZXQobUN1ck1ldGhvZElkKSwgbUN1cnJlbnRTdWJ0eXBlKTsKICAgICAgICAgICAgIGlmIChuZXh0U3VidHlwZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjI0Miw2ICsyMjMxLDIyIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGdldElucHV0TWV0aG9kV2luZG93VmlzaWJsZUhlaWdodCgpIHsKKyAgICAgICAgcmV0dXJuIG1XaW5kb3dNYW5hZ2VyU2VydmljZS5nZXRJbnB1dE1ldGhvZFdpbmRvd1Zpc2libGVIZWlnaHQoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBub3RpZnlUZXh0Q29tbWl0dGVkKCkgeworICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgIFNsb2cuZChUQUcsICJHb3QgdGhlIG5vdGlmaWNhdGlvbiBvZiBjb21taXRUZXh0Iik7CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgSW5wdXRNZXRob2RJbmZvIGltaSA9IG1NZXRob2RNYXAuZ2V0KG1DdXJNZXRob2RJZCk7CisgICAgICAgIGlmIChpbWkgIT0gbnVsbCkgeworICAgICAgICAgICAgbVN3aXRjaGluZ0NvbnRyb2xsZXIub25Db21taXRUZXh0KGltaSwgbUN1cnJlbnRTdWJ0eXBlKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCBzZXRJbnB1dE1ldGhvZFdpdGhTdWJ0eXBlSWQoSUJpbmRlciB0b2tlbiwgU3RyaW5nIGlkLCBpbnQgc3VidHlwZUlkKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobU1ldGhvZE1hcCkgewogICAgICAgICAgICAgaWYgKHRva2VuID09IG51bGwpIHsKQEAgLTI2MjAsNyArMjYyNSw4IEBACiAKICAgICAgICAgc3luY2hyb25pemVkIChtTWV0aG9kTWFwKSB7CiAgICAgICAgICAgICBmaW5hbCBIYXNoTWFwPElucHV0TWV0aG9kSW5mbywgTGlzdDxJbnB1dE1ldGhvZFN1YnR5cGU+PiBpbW1pcyA9Ci0gICAgICAgICAgICAgICAgICAgIGdldEV4cGxpY2l0bHlPckltcGxpY2l0bHlFbmFibGVkSW5wdXRNZXRob2RzQW5kU3VidHlwZUxpc3RMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgbVNldHRpbmdzLmdldEV4cGxpY2l0bHlPckltcGxpY2l0bHlFbmFibGVkSW5wdXRNZXRob2RzQW5kU3VidHlwZUxpc3RMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQpOwogICAgICAgICAgICAgaWYgKGltbWlzID09IG51bGwgfHwgaW1taXMuc2l6ZSgpID09IDApIHsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0yNjI4LDcgKzI2MzQsNyBAQAogICAgICAgICAgICAgaGlkZUlucHV0TWV0aG9kTWVudUxvY2tlZCgpOwogCiAgICAgICAgICAgICBmaW5hbCBMaXN0PEltZVN1YnR5cGVMaXN0SXRlbT4gaW1MaXN0ID0KLSAgICAgICAgICAgICAgICAgICAgbUltTGlzdE1hbmFnZXIuZ2V0U29ydGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdCgKKyAgICAgICAgICAgICAgICAgICAgbVN3aXRjaGluZ0NvbnRyb2xsZXIuZ2V0U29ydGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93U3VidHlwZXMsIG1JbnB1dFNob3duLCBpc1NjcmVlbkxvY2tlZCk7CiAKICAgICAgICAgICAgIGlmIChsYXN0SW5wdXRNZXRob2RTdWJ0eXBlSWQgPT0gTk9UX0FfU1VCVFlQRV9JRCkgewpAQCAtMjc0Nyw2NiArMjc1Myw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBJbWVTdWJ0eXBlTGlzdEl0ZW0gaW1wbGVtZW50cyBDb21wYXJhYmxlPEltZVN1YnR5cGVMaXN0SXRlbT4gewotICAgICAgICBwdWJsaWMgZmluYWwgQ2hhclNlcXVlbmNlIG1JbWVOYW1lOwotICAgICAgICBwdWJsaWMgZmluYWwgQ2hhclNlcXVlbmNlIG1TdWJ0eXBlTmFtZTsKLSAgICAgICAgcHVibGljIGZpbmFsIElucHV0TWV0aG9kSW5mbyBtSW1pOwotICAgICAgICBwdWJsaWMgZmluYWwgaW50IG1TdWJ0eXBlSWQ7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtSXNTeXN0ZW1Mb2NhbGU7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtSXNTeXN0ZW1MYW5ndWFnZTsKLQotICAgICAgICBwdWJsaWMgSW1lU3VidHlwZUxpc3RJdGVtKENoYXJTZXF1ZW5jZSBpbWVOYW1lLCBDaGFyU2VxdWVuY2Ugc3VidHlwZU5hbWUsCi0gICAgICAgICAgICAgICAgSW5wdXRNZXRob2RJbmZvIGltaSwgaW50IHN1YnR5cGVJZCwgU3RyaW5nIHN1YnR5cGVMb2NhbGUsIFN0cmluZyBzeXN0ZW1Mb2NhbGUpIHsKLSAgICAgICAgICAgIG1JbWVOYW1lID0gaW1lTmFtZTsKLSAgICAgICAgICAgIG1TdWJ0eXBlTmFtZSA9IHN1YnR5cGVOYW1lOwotICAgICAgICAgICAgbUltaSA9IGltaTsKLSAgICAgICAgICAgIG1TdWJ0eXBlSWQgPSBzdWJ0eXBlSWQ7Ci0gICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoc3VidHlwZUxvY2FsZSkpIHsKLSAgICAgICAgICAgICAgICBtSXNTeXN0ZW1Mb2NhbGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBtSXNTeXN0ZW1MYW5ndWFnZSA9IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtSXNTeXN0ZW1Mb2NhbGUgPSBzdWJ0eXBlTG9jYWxlLmVxdWFscyhzeXN0ZW1Mb2NhbGUpOwotICAgICAgICAgICAgICAgIG1Jc1N5c3RlbUxhbmd1YWdlID0gbUlzU3lzdGVtTG9jYWxlCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBzdWJ0eXBlTG9jYWxlLnN0YXJ0c1dpdGgoc3lzdGVtTG9jYWxlLnN1YnN0cmluZygwLCAyKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBjb21wYXJlVG8oSW1lU3VidHlwZUxpc3RJdGVtIG90aGVyKSB7Ci0gICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkobUltZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkob3RoZXIubUltZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuZXF1YWxzKG1JbWVOYW1lLCBvdGhlci5tSW1lTmFtZSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbUltZU5hbWUudG9TdHJpbmcoKS5jb21wYXJlVG8ob3RoZXIubUltZU5hbWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmVxdWFscyhtU3VidHlwZU5hbWUsIG90aGVyLm1TdWJ0eXBlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtSXNTeXN0ZW1Mb2NhbGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3RoZXIubUlzU3lzdGVtTG9jYWxlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobUlzU3lzdGVtTGFuZ3VhZ2UpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3RoZXIubUlzU3lzdGVtTGFuZ3VhZ2UpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShtU3VidHlwZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkob3RoZXIubVN1YnR5cGVOYW1lKSkgewotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtU3VidHlwZU5hbWUudG9TdHJpbmcoKS5jb21wYXJlVG8ob3RoZXIubVN1YnR5cGVOYW1lLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSW1lU3VidHlwZUxpc3RBZGFwdGVyIGV4dGVuZHMgQXJyYXlBZGFwdGVyPEltZVN1YnR5cGVMaXN0SXRlbT4gewogICAgICAgICBwcml2YXRlIGZpbmFsIExheW91dEluZmxhdGVyIG1JbmZsYXRlcjsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVRleHRWaWV3UmVzb3VyY2VJZDsKQEAgLTMxNzgsMTIzICszMTI0LDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3RNYW5hZ2VyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OwotICAgICAgICAvLyBVc2VkIHRvIGxvYWQgbGFiZWwKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBQYWNrYWdlTWFuYWdlciBtUG07Ci0gICAgICAgIHByaXZhdGUgZmluYWwgSW5wdXRNZXRob2RNYW5hZ2VyU2VydmljZSBtSW1tczsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVN5c3RlbUxvY2FsZVN0cjsKLSAgICAgICAgcHVibGljIElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3RNYW5hZ2VyKENvbnRleHQgY29udGV4dCwgSW5wdXRNZXRob2RNYW5hZ2VyU2VydmljZSBpbW1zKSB7Ci0gICAgICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgICAgICBtUG0gPSBjb250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7Ci0gICAgICAgICAgICBtSW1tcyA9IGltbXM7Ci0gICAgICAgICAgICBmaW5hbCBMb2NhbGUgbG9jYWxlID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCkubG9jYWxlOwotICAgICAgICAgICAgbVN5c3RlbUxvY2FsZVN0ciA9IGxvY2FsZSAhPSBudWxsID8gbG9jYWxlLnRvU3RyaW5nKCkgOiAiIjsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgZmluYWwgVHJlZU1hcDxJbnB1dE1ldGhvZEluZm8sIExpc3Q8SW5wdXRNZXRob2RTdWJ0eXBlPj4gbVNvcnRlZEltbWlzID0KLSAgICAgICAgICAgICAgICBuZXcgVHJlZU1hcDxJbnB1dE1ldGhvZEluZm8sIExpc3Q8SW5wdXRNZXRob2RTdWJ0eXBlPj4oCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ29tcGFyYXRvcjxJbnB1dE1ldGhvZEluZm8+KCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShJbnB1dE1ldGhvZEluZm8gaW1pMSwgSW5wdXRNZXRob2RJbmZvIGltaTIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltaTIgPT0gbnVsbCkgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWkxID09IG51bGwpIHJldHVybiAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVBtID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWkxLmdldElkKCkuY29tcGFyZVRvKGltaTIuZ2V0SWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhclNlcXVlbmNlIGltaUlkMSA9IGltaTEubG9hZExhYmVsKG1QbSkgKyAiLyIgKyBpbWkxLmdldElkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBpbWlJZDIgPSBpbWkyLmxvYWRMYWJlbChtUG0pICsgIi8iICsgaW1pMi5nZXRJZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1pSWQxLnRvU3RyaW5nKCkuY29tcGFyZVRvKGltaUlkMi50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICBwdWJsaWMgSW1lU3VidHlwZUxpc3RJdGVtIGdldE5leHRJbnB1dE1ldGhvZCgKLSAgICAgICAgICAgICAgICBib29sZWFuIG9ubHlDdXJyZW50SW1lLCBJbnB1dE1ldGhvZEluZm8gaW1pLCBJbnB1dE1ldGhvZFN1YnR5cGUgc3VidHlwZSkgewotICAgICAgICAgICAgaWYgKGltaSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PEltZVN1YnR5cGVMaXN0SXRlbT4gaW1MaXN0ID0gZ2V0U29ydGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdCgpOwotICAgICAgICAgICAgaWYgKGltTGlzdC5zaXplKCkgPD0gMSkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWwgaW50IE4gPSBpbUxpc3Quc2l6ZSgpOwotICAgICAgICAgICAgZmluYWwgaW50IGN1cnJlbnRTdWJ0eXBlSWQgPSBzdWJ0eXBlICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICAgPyBJbnB1dE1ldGhvZFV0aWxzLmdldFN1YnR5cGVJZEZyb21IYXNoQ29kZShpbWksIHN1YnR5cGUuaGFzaENvZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgOiBOT1RfQV9TVUJUWVBFX0lEOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBJbWVTdWJ0eXBlTGlzdEl0ZW0gaXNsaSA9IGltTGlzdC5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzbGkubUltaS5lcXVhbHMoaW1pKSAmJiBpc2xpLm1TdWJ0eXBlSWQgPT0gY3VycmVudFN1YnR5cGVJZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW9ubHlDdXJyZW50SW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1MaXN0LmdldCgoaSArIDEpICUgTik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBOIC0gMTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBJbWVTdWJ0eXBlTGlzdEl0ZW0gY2FuZGlkYXRlID0gaW1MaXN0LmdldCgoaSArIGogKyAxKSAlIE4pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5tSW1pLmVxdWFscyhpbWkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBMaXN0PEltZVN1YnR5cGVMaXN0SXRlbT4gZ2V0U29ydGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRTb3J0ZWRJbnB1dE1ldGhvZEFuZFN1YnR5cGVMaXN0KHRydWUsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgTGlzdDxJbWVTdWJ0eXBlTGlzdEl0ZW0+IGdldFNvcnRlZElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3QoYm9vbGVhbiBzaG93U3VidHlwZXMsCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBpbnB1dFNob3duLCBib29sZWFuIGlzU2NyZWVuTG9ja2VkKSB7Ci0gICAgICAgICAgICBmaW5hbCBBcnJheUxpc3Q8SW1lU3VidHlwZUxpc3RJdGVtPiBpbUxpc3QgPSBuZXcgQXJyYXlMaXN0PEltZVN1YnR5cGVMaXN0SXRlbT4oKTsKLSAgICAgICAgICAgIGZpbmFsIEhhc2hNYXA8SW5wdXRNZXRob2RJbmZvLCBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4+IGltbWlzID0KLSAgICAgICAgICAgICAgICAgICAgbUltbXMuZ2V0RXhwbGljaXRseU9ySW1wbGljaXRseUVuYWJsZWRJbnB1dE1ldGhvZHNBbmRTdWJ0eXBlTGlzdExvY2tlZCgpOwotICAgICAgICAgICAgaWYgKGltbWlzID09IG51bGwgfHwgaW1taXMuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtU29ydGVkSW1taXMuY2xlYXIoKTsKLSAgICAgICAgICAgIG1Tb3J0ZWRJbW1pcy5wdXRBbGwoaW1taXMpOwotICAgICAgICAgICAgZm9yIChJbnB1dE1ldGhvZEluZm8gaW1pIDogbVNvcnRlZEltbWlzLmtleVNldCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGltaSA9PSBudWxsKSBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4gZXhwbGljaXRseU9ySW1wbGljaXRseUVuYWJsZWRTdWJ0eXBlTGlzdCA9IGltbWlzLmdldChpbWkpOwotICAgICAgICAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBlbmFibGVkU3VidHlwZVNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLSAgICAgICAgICAgICAgICBmb3IgKElucHV0TWV0aG9kU3VidHlwZSBzdWJ0eXBlOiBleHBsaWNpdGx5T3JJbXBsaWNpdGx5RW5hYmxlZFN1YnR5cGVMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRTdWJ0eXBlU2V0LmFkZChTdHJpbmcudmFsdWVPZihzdWJ0eXBlLmhhc2hDb2RlKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmluYWwgQ2hhclNlcXVlbmNlIGltZUxhYmVsID0gaW1pLmxvYWRMYWJlbChtUG0pOwotICAgICAgICAgICAgICAgIGlmIChzaG93U3VidHlwZXMgJiYgZW5hYmxlZFN1YnR5cGVTZXQuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc3VidHlwZUNvdW50ID0gaW1pLmdldFN1YnR5cGVDb3VudCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudihUQUcsICJBZGQgc3VidHlwZXM6ICIgKyBzdWJ0eXBlQ291bnQgKyAiLCAiICsgaW1pLmdldElkKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3VidHlwZUNvdW50OyArK2opIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIElucHV0TWV0aG9kU3VidHlwZSBzdWJ0eXBlID0gaW1pLmdldFN1YnR5cGVBdChqKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzdWJ0eXBlSGFzaENvZGUgPSBTdHJpbmcudmFsdWVPZihzdWJ0eXBlLmhhc2hDb2RlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdyBhbGwgZW5hYmxlZCBJTUVzIGFuZCBzdWJ0eXBlcyB3aGVuIGFuIElNRSBpcyBzaG93bi4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmFibGVkU3VidHlwZVNldC5jb250YWlucyhzdWJ0eXBlSGFzaENvZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgoaW5wdXRTaG93biAmJiAhaXNTY3JlZW5Mb2NrZWQpIHx8ICFzdWJ0eXBlLmlzQXV4aWxpYXJ5KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgQ2hhclNlcXVlbmNlIHN1YnR5cGVMYWJlbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLm92ZXJyaWRlc0ltcGxpY2l0bHlFbmFibGVkU3VidHlwZSgpID8gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN1YnR5cGUuZ2V0RGlzcGxheU5hbWUobUNvbnRleHQsIGltaS5nZXRQYWNrYWdlTmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltaS5nZXRTZXJ2aWNlSW5mbygpLmFwcGxpY2F0aW9uSW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1MaXN0LmFkZChuZXcgSW1lU3VidHlwZUxpc3RJdGVtKGltZUxhYmVsLCBzdWJ0eXBlTGFiZWwsIGltaSwgaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuZ2V0TG9jYWxlKCksIG1TeXN0ZW1Mb2NhbGVTdHIpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoaXMgc3VidHlwZSBmcm9tIGVuYWJsZWRTdWJ0eXBlU2V0IGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBhZGQgYW4gZW50cnkgb2YgdGhpcyBzdWJ0eXBlIHRvIGltTGlzdCB0byBhdm9pZCBkdXBsaWNhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW50cmllcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkU3VidHlwZVNldC5yZW1vdmUoc3VidHlwZUhhc2hDb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGltTGlzdC5hZGQobmV3IEltZVN1YnR5cGVMaXN0SXRlbShpbWVMYWJlbCwgbnVsbCwgaW1pLCBOT1RfQV9TVUJUWVBFX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG1TeXN0ZW1Mb2NhbGVTdHIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KGltTGlzdCk7Ci0gICAgICAgICAgICByZXR1cm4gaW1MaXN0OwotICAgICAgICB9Ci0gICAgfQotCiAgICAgLy8gVE9ETzogQ2FjaGUgdGhlIHN0YXRlIGZvciBlYWNoIHVzZXIgYW5kIHJlc2V0IHdoZW4gdGhlIGNhY2hlZCB1c2VyIGlzIHJlbW92ZWQuCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSW5wdXRNZXRob2RGaWxlTWFuYWdlciB7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTWVNURU1fUEFUSCA9ICJzeXN0ZW0iOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvTG9ja1NldHRpbmdzU2VydmljZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvTG9ja1NldHRpbmdzU2VydmljZS5qYXZhCmluZGV4IDM1ZTdhZmEuLmZlODE0ZmMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0xvY2tTZXR0aW5nc1NlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Mb2NrU2V0dGluZ3NTZXJ2aWNlLmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXI7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXJOYXRpdmU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKQEAgLTI5LDggKzI4LDYgQEAKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZTsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVPcGVuSGVscGVyOwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZVN0YXRlbWVudDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvTnNkU2VydmljZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvTnNkU2VydmljZS5qYXZhCmluZGV4IDE2ZDI0NjguLjc0NjMzYWUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL05zZFNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Oc2RTZXJ2aWNlLmphdmEKQEAgLTI2LDExICsyNiw4IEBACiBpbXBvcnQgYW5kcm9pZC5uZXQubnNkLklOc2RNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubmV0Lm5zZC5Oc2RNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2VuZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKQEAgLTM5LDIwICszNiwxMyBAQAogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwogCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLklCYXR0ZXJ5U3RhdHM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LlRlbGVwaG9ueUludGVudHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Bc3luY0NoYW5uZWw7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Qcm90b2NvbDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlN0YXRlOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGVNYWNoaW5lOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5hbS5CYXR0ZXJ5U3RhdHNTZXJ2aWNlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5OYXRpdmVEYWVtb25Db25uZWN0b3IuQ29tbWFuZDsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwogCiAvKioKICAqIE5ldHdvcmsgU2VydmljZSBEaXNjb3ZlcnkgU2VydmljZSBoYW5kbGVzIHJlbW90ZSBzZXJ2aWNlIGRpc2NvdmVyeSBvcGVyYXRpb24gcmVxdWVzdHMgYnkKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1NlcnZpY2VXYXRjaGVyLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TZXJ2aWNlV2F0Y2hlci5qYXZhCmluZGV4IDVjN2JmYWIuLjkyNzQyOTUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1NlcnZpY2VXYXRjaGVyLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvU2VydmljZVdhdGNoZXIuamF2YQpAQCAtMzcsNyArMzcsNiBAQAogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvU2h1dGRvd25BY3Rpdml0eS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvU2h1dGRvd25BY3Rpdml0eS5qYXZhCmluZGV4IGJlNjUxNDEuLjU2MTcyZWQwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TaHV0ZG93bkFjdGl2aXR5LmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvU2h1dGRvd25BY3Rpdml0eS5qYXZhCkBAIC0yMCwxNCArMjAsMTEgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklQb3dlck1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIAotaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5wb3dlci5TaHV0ZG93blRocmVhZDsKLQogcHVibGljIGNsYXNzIFNodXRkb3duQWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlNodXRkb3duQWN0aXZpdHkiOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvU3lzdGVtU2VydmVyLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TeXN0ZW1TZXJ2ZXIuamF2YQppbmRleCAzYTFjNzQ3Li5jNzQ1MjY5IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TeXN0ZW1TZXJ2ZXIuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TeXN0ZW1TZXJ2ZXIuamF2YQpAQCAtMjYsNyArMjYsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb1NlcnZpY2U7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycFNlcnZpY2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwpAQCAtNzMsNiArNzIsNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci51c2IuVXNiU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIud2FsbHBhcGVyLldhbGxwYXBlck1hbmFnZXJTZXJ2aWNlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci53aWZpLldpZmlTZXJ2aWNlOworaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci53aWZpLnAycC5XaWZpUDJwU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlclNlcnZpY2U7CiAKIGltcG9ydCBkYWx2aWsuc3lzdGVtLlZNUnVudGltZTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1RleHRTZXJ2aWNlc01hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9UZXh0U2VydmljZXNNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IDA5NjQ3NjcuLmQ0YzQzNmYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1RleHRTZXJ2aWNlc01hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvVGV4dFNlcnZpY2VzTWFuYWdlclNlcnZpY2UuamF2YQpAQCAtMzMsNyArMzMsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uU2VydmljZUluZm87CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9VcGRhdGVMb2NrU2VydmljZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvVXBkYXRlTG9ja1NlcnZpY2UuamF2YQppbmRleCAwZjc3OGNkLi43ZjMzOTczIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9VcGRhdGVMb2NrU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1VwZGF0ZUxvY2tTZXJ2aWNlLmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JVXBkYXRlTG9jazsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQub3MuVG9rZW5XYXRjaGVyOwogaW1wb3J0IGFuZHJvaWQub3MuVXBkYXRlTG9jazsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9XYXRjaGRvZy5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvV2F0Y2hkb2cuamF2YQppbmRleCBlMTdmNDJkLi4zZTkwMDc4IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9XYXRjaGRvZy5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1dhdGNoZG9nLmphdmEKQEAgLTIyLDE0ICsyMiwxMSBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJTZXJ2aWNlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5wb3dlci5Qb3dlck1hbmFnZXJTZXJ2aWNlOwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWxhcm1NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwotaW1wb3J0IGFuZHJvaWQub3MuQmF0dGVyeU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5EZWJ1ZzsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CkBAIC00NSw3ICs0Miw2IEBACiBpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CiAKIC8qKiBUaGlzIGNsYXNzIGNhbGxzIGl0cyBtb25pdG9yIGV2ZXJ5IG1pbnV0ZS4gS2lsbGluZyB0aGlzIHByb2Nlc3MgaWYgdGhleSBkb24ndCByZXR1cm4gKiovCiBwdWJsaWMgY2xhc3MgV2F0Y2hkb2cgZXh0ZW5kcyBUaHJlYWQgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggY2NhYzBkMy4uNWUxMGQyNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC00NCw2ICs0NCw3IEBACiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5kaXNwbGF5LkRpc3BsYXlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuaW5wdXQuSW5wdXRNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5NYXRyaXg7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKQEAgLTUxLDYgKzUyLDcgQEAKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUNhbGxiYWNrTGlzdDsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKQEAgLTEzOSw2ICsxNDEsNTEgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfUE9PTF9TSVpFID0gMTA7CiAKKyAgICAvKiogTWF0cml4IGFuZCBvZmZzZXQgdXNlZCBmb3IgY29udmVydGluZyBjb2xvciB0byBncmF5c2NhbGUuICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXRbXSBHUkFZU0NBTEVfTUFUUklYID0gbmV3IGZsb2F0W10geworICAgICAgICAuMjEyNmYsIC4yMTI2ZiwgLjIxMjZmLCAwLAorICAgICAgICAuNzE1MmYsIC43MTUyZiwgLjcxNTJmLCAwLAorICAgICAgICAuMDcyMmYsIC4wNzIyZiwgLjA3MjJmLCAwLAorICAgICAgICAgICAgIDAsICAgICAgMCwgICAgICAwLCAxCisgICAgfTsKKworICAgIC8qKiBNYXRyaXggYW5kIG9mZnNldCB1c2VkIGZvciBzdGFuZGFyZCBkaXNwbGF5IGludmVyc2lvbi4gKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdFtdIElOVkVSU0lPTl9NQVRSSVhfU1RBTkRBUkQgPSBuZXcgZmxvYXRbXSB7CisgICAgICAgIC0xLCAgMCwgIDAsIDAsCisgICAgICAgICAwLCAtMSwgIDAsIDAsCisgICAgICAgICAwLCAgMCwgLTEsIDAsCisgICAgICAgICAxLCAgMSwgIDEsIDEKKyAgICB9OworCisgICAgLyoqIE1hdHJpeCBhbmQgb2Zmc2V0IHVzZWQgZm9yIGh1ZS1vbmx5IGRpc3BsYXkgaW52ZXJzaW9uLiAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0W10gSU5WRVJTSU9OX01BVFJJWF9IVUVfT05MWSA9IG5ldyBmbG9hdFtdIHsKKyAgICAgICAgICAwLCAuNWYsIC41ZiwgMCwKKyAgICAgICAgLjVmLCAgIDAsIC41ZiwgMCwKKyAgICAgICAgLjVmLCAuNWYsICAgMCwgMCwKKyAgICAgICAgICAwLCAgIDAsICAgMCwgMQorICAgIH07CisKKyAgICAvKiogTWF0cml4IGFuZCBvZmZzZXQgdXNlZCBmb3IgdmFsdWUtb25seSBkaXNwbGF5IGludmVyc2lvbi4gKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdFtdIElOVkVSU0lPTl9NQVRSSVhfVkFMVUVfT05MWSA9IG5ldyBmbG9hdFtdIHsKKyAgICAgICAgICAgMCwgLS41ZiwgLS41ZiwgMCwKKyAgICAgICAgLS41ZiwgICAgMCwgLS41ZiwgMCwKKyAgICAgICAgLS41ZiwgLS41ZiwgICAgMCwgMCwKKyAgICAgICAgICAgMSwgICAgMSwgICAgMSwgMQorICAgIH07CisKKyAgICAvKiogRGVmYXVsdCBjb250cmFzdCBmb3IgZGlzcGxheSBjb250cmFzdCBlbmhhbmNlbWVudC4gKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBERUZBVUxUX0RJU1BMQVlfQ09OVFJBU1QgPSAyOworCisgICAgLyoqIERlZmF1bHQgYnJpZ2h0bmVzcyBmb3IgZGlzcGxheSBjb250cmFzdCBlbmhhbmNlbWVudC4gKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBERUZBVUxUX0RJU1BMQVlfQlJJR0hUTkVTUyA9IDA7CisKKyAgICAvKiogRGVmYXVsdCBpbnZlcnNpb24gbW9kZSBmb3IgZGlzcGxheSBjb2xvciBpbnZlcnNpb24uICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfRElTUExBWV9JTlZFUlNJT04gPSBBY2Nlc3NpYmlsaXR5TWFuYWdlci5JTlZFUlNJT05fU1RBTkRBUkQ7CisKKyAgICAvKiogRGVmYXVsdCBpbnZlcnNpb24gbW9kZSBmb3IgZGlzcGxheSBjb2xvciBjb3JyZWN0aW9uLiAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX0RJU1BMQVlfREFMVE9OSVpFUiA9CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5TWFuYWdlci5EQUxUT05JWkVSX0NPUlJFQ1RfREVVVEVSQU5PTUFMWTsKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBzSWRDb3VudGVyID0gMDsKIAogICAgIHByaXZhdGUgc3RhdGljIGludCBzTmV4dFdpbmRvd0lkOwpAQCAtMTI5Nyw2ICsxMzQ0LDcgQEAKICAgICAgICAgdXBkYXRlRmlsdGVyS2V5RXZlbnRzTG9ja2VkKHVzZXJTdGF0ZSk7CiAgICAgICAgIHVwZGF0ZVRvdWNoRXhwbG9yYXRpb25Mb2NrZWQodXNlclN0YXRlKTsKICAgICAgICAgdXBkYXRlRW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5TG9ja2VkKHVzZXJTdGF0ZSk7CisgICAgICAgIHVwZGF0ZURpc3BsYXlDb2xvckFkanVzdG1lbnRTZXR0aW5nc0xvY2tlZCh1c2VyU3RhdGUpOwogICAgICAgICBzY2hlZHVsZVVwZGF0ZUlucHV0RmlsdGVyKHVzZXJTdGF0ZSk7CiAgICAgICAgIHNjaGVkdWxlVXBkYXRlQ2xpZW50c0lmTmVlZGVkTG9ja2VkKHVzZXJTdGF0ZSk7CiAgICAgfQpAQCAtMTM1NSw2ICsxNDAzLDcgQEAKICAgICAgICAgc29tdGhpbmdDaGFuZ2VkIHw9IHJlYWRUb3VjaEV4cGxvcmF0aW9uRW5hYmxlZFNldHRpbmdMb2NrZWQodXNlclN0YXRlKTsKICAgICAgICAgc29tdGhpbmdDaGFuZ2VkIHw9IHJlYWRFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHlFbmFibGVkQ2hhbmdlZExvY2tlZCh1c2VyU3RhdGUpOwogICAgICAgICBzb210aGluZ0NoYW5nZWQgfD0gcmVhZERpc3BsYXlNYWduaWZpY2F0aW9uRW5hYmxlZFNldHRpbmdMb2NrZWQodXNlclN0YXRlKTsKKyAgICAgICAgc29tdGhpbmdDaGFuZ2VkIHw9IHJlYWREaXNwbGF5Q29sb3JBZGp1c3RtZW50U2V0dGluZ3NMb2NrZWQodXNlclN0YXRlKTsKICAgICAgICAgcmV0dXJuIHNvbXRoaW5nQ2hhbmdlZDsKICAgICB9CiAKQEAgLTE0MDMsNiArMTQ1MiwxMjQgQEAKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBwcml2YXRlIGJvb2xlYW4gcmVhZERpc3BsYXlDb2xvckFkanVzdG1lbnRTZXR0aW5nc0xvY2tlZChVc2VyU3RhdGUgdXNlclN0YXRlKSB7CisgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciBjciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOworICAgICAgICBmaW5hbCBpbnQgdXNlcklkID0gdXNlclN0YXRlLm1Vc2VySWQ7CisKKyAgICAgICAgYm9vbGVhbiBoYXNDb2xvclRyYW5zZm9ybSA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9FTkFCTEVELCAwLCB1c2VySWQpID09IDE7CisKKyAgICAgICAgaWYgKCFoYXNDb2xvclRyYW5zZm9ybSkgeworICAgICAgICAgICAgaGFzQ29sb3JUcmFuc2Zvcm0gfD0gU2V0dGluZ3MuU2VjdXJlLmdldEludEZvclVzZXIoCisgICAgICAgICAgICAgICAgY3IsIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09OVFJBU1RfRU5BQkxFRCwgMCwgdXNlcklkKSA9PSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFoYXNDb2xvclRyYW5zZm9ybSkgeworICAgICAgICAgICAgaGFzQ29sb3JUcmFuc2Zvcm0gfD0gU2V0dGluZ3MuU2VjdXJlLmdldEludEZvclVzZXIoCisgICAgICAgICAgICAgICAgY3IsIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUl9FTkFCTEVELCAwLCB1c2VySWQpID09IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlclN0YXRlLm1IYXNEaXNwbGF5Q29sb3JBZGp1c3RtZW50ICE9IGhhc0NvbG9yVHJhbnNmb3JtKSB7CisgICAgICAgICAgICB1c2VyU3RhdGUubUhhc0Rpc3BsYXlDb2xvckFkanVzdG1lbnQgPSBoYXNDb2xvclRyYW5zZm9ybTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgYWRqdXN0bWVudCBpcyBlbmFibGVkLCBhbHdheXMgYXNzdW1lIHRoZXJlIHdhcyBhIHRyYW5zZm9ybSBjaGFuZ2UuCisgICAgICAgIHJldHVybiBoYXNDb2xvclRyYW5zZm9ybTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlRGlzcGxheUNvbG9yQWRqdXN0bWVudFNldHRpbmdzTG9ja2VkKFVzZXJTdGF0ZSB1c2VyU3RhdGUpIHsKKyAgICAgICAgZmluYWwgQ29udGVudFJlc29sdmVyIGNyID0gbUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCk7CisgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSB1c2VyU3RhdGUubVVzZXJJZDsKKyAgICAgICAgZmxvYXRbXSBjb2xvck1hdHJpeCA9IG5ldyBmbG9hdFsxNl07CisgICAgICAgIGZsb2F0W10gb3V0cHV0TWF0cml4ID0gbmV3IGZsb2F0WzE2XTsKKyAgICAgICAgYm9vbGVhbiBoYXNDb2xvclRyYW5zZm9ybSA9IGZhbHNlOworCisgICAgICAgIE1hdHJpeC5zZXRJZGVudGl0eU0oY29sb3JNYXRyaXgsIDApOworCisgICAgICAgIGZpbmFsIGJvb2xlYW4gaW52ZXJzaW9uRW5hYmxlZCA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9FTkFCTEVELCAwLCB1c2VySWQpID09IDE7CisgICAgICAgIGlmIChpbnZlcnNpb25FbmFibGVkKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgaW52ZXJzaW9uTW9kZSA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKGNyLAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTiwgREVGQVVMVF9ESVNQTEFZX0lOVkVSU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgdXNlcklkKTsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0W10gaW52ZXJzaW9uTWF0cml4OworICAgICAgICAgICAgc3dpdGNoIChpbnZlcnNpb25Nb2RlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5TWFuYWdlci5JTlZFUlNJT05fSFVFX09OTFk6CisgICAgICAgICAgICAgICAgICAgIGludmVyc2lvbk1hdHJpeCA9IElOVkVSU0lPTl9NQVRSSVhfSFVFX09OTFk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eU1hbmFnZXIuSU5WRVJTSU9OX1ZBTFVFX09OTFk6CisgICAgICAgICAgICAgICAgICAgIGludmVyc2lvbk1hdHJpeCA9IElOVkVSU0lPTl9NQVRSSVhfVkFMVUVfT05MWTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgaW52ZXJzaW9uTWF0cml4ID0gSU5WRVJTSU9OX01BVFJJWF9TVEFOREFSRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWF0cml4Lm11bHRpcGx5TU0ob3V0cHV0TWF0cml4LCAwLCBjb2xvck1hdHJpeCwgMCwgaW52ZXJzaW9uTWF0cml4LCAwKTsKKworICAgICAgICAgICAgZmluYWwgZmxvYXRbXSB0ZW1wID0gY29sb3JNYXRyaXg7CisgICAgICAgICAgICBjb2xvck1hdHJpeCA9IG91dHB1dE1hdHJpeDsKKyAgICAgICAgICAgIG91dHB1dE1hdHJpeCA9IGNvbG9yTWF0cml4OworCisgICAgICAgICAgICBoYXNDb2xvclRyYW5zZm9ybSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBib29sZWFuIGNvbnRyYXN0RW5hYmxlZCA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTlRSQVNUX0VOQUJMRUQsIDAsIHVzZXJJZCkgPT0gMTsKKyAgICAgICAgaWYgKGNvbnRyYXN0RW5hYmxlZCkgeworICAgICAgICAgICAgZmluYWwgZmxvYXQgY29udHJhc3QgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0RmxvYXRGb3JVc2VyKGNyLAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTlRSQVNULCBERUZBVUxUX0RJU1BMQVlfQ09OVFJBU1QsCisgICAgICAgICAgICAgICAgICAgIHVzZXJJZCk7CisgICAgICAgICAgICBmaW5hbCBmbG9hdCBicmlnaHRuZXNzID0gU2V0dGluZ3MuU2VjdXJlLmdldEZsb2F0Rm9yVXNlcihjciwKKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9CUklHSFRORVNTLCBERUZBVUxUX0RJU1BMQVlfQlJJR0hUTkVTUywKKyAgICAgICAgICAgICAgICAgICAgdXNlcklkKTsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IG9mZiA9IGJyaWdodG5lc3MgKiBjb250cmFzdCAtIDAuNWYgKiBjb250cmFzdCArIDAuNWY7CisgICAgICAgICAgICBmaW5hbCBmbG9hdFtdIGNvbnRyYXN0TWF0cml4ID0geworICAgICAgICAgICAgICAgICAgICBjb250cmFzdCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgMCwgY29udHJhc3QsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgIDAsIDAsIGNvbnRyYXN0LCAwLAorICAgICAgICAgICAgICAgICAgICBvZmYsIG9mZiwgb2ZmLCAxCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBNYXRyaXgubXVsdGlwbHlNTShvdXRwdXRNYXRyaXgsIDAsIGNvbG9yTWF0cml4LCAwLCBjb250cmFzdE1hdHJpeCwgMCk7CisKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0W10gdGVtcCA9IGNvbG9yTWF0cml4OworICAgICAgICAgICAgY29sb3JNYXRyaXggPSBvdXRwdXRNYXRyaXg7CisgICAgICAgICAgICBvdXRwdXRNYXRyaXggPSBjb2xvck1hdHJpeDsKKworICAgICAgICAgICAgaGFzQ29sb3JUcmFuc2Zvcm0gPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBkYWx0b25pemVyRW5hYmxlZCA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAorICAgICAgICAgICAgICAgIGNyLCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0RBTFRPTklaRVJfRU5BQkxFRCwgMCwgdXNlcklkKSAhPSAwOworICAgICAgICBpZiAoZGFsdG9uaXplckVuYWJsZWQpIHsKKyAgICAgICAgICAgIGZpbmFsIGludCBkYWx0b25pemVyTW9kZSA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKGNyLAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0RBTFRPTklaRVIsIERFRkFVTFRfRElTUExBWV9EQUxUT05JWkVSLAorICAgICAgICAgICAgICAgICAgICB1c2VySWQpOworICAgICAgICAgICAgLy8gTW9ub2Nocm9tYWN5IGlzbid0IHN1cHBvcnRlZCBieSB0aGUgbmF0aXZlIERhbHRvbml6ZXIuCisgICAgICAgICAgICBpZiAoZGFsdG9uaXplck1vZGUgPT0gQWNjZXNzaWJpbGl0eU1hbmFnZXIuREFMVE9OSVpFUl9TSU1VTEFURV9NT05PQ0hST01BQ1kpIHsKKyAgICAgICAgICAgICAgICBNYXRyaXgubXVsdGlwbHlNTShvdXRwdXRNYXRyaXgsIDAsIGNvbG9yTWF0cml4LCAwLCBHUkFZU0NBTEVfTUFUUklYLCAwKTsKKworICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0W10gdGVtcCA9IGNvbG9yTWF0cml4OworICAgICAgICAgICAgICAgIGNvbG9yTWF0cml4ID0gb3V0cHV0TWF0cml4OworICAgICAgICAgICAgICAgIG91dHB1dE1hdHJpeCA9IHRlbXA7CisKKyAgICAgICAgICAgICAgICBoYXNDb2xvclRyYW5zZm9ybSA9IHRydWU7CisgICAgICAgICAgICAgICAgbmF0aXZlU2V0RGFsdG9uaXplck1vZGUoQWNjZXNzaWJpbGl0eU1hbmFnZXIuREFMVE9OSVpFUl9ESVNBQkxFRCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5hdGl2ZVNldERhbHRvbml6ZXJNb2RlKGRhbHRvbml6ZXJNb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5hdGl2ZVNldERhbHRvbml6ZXJNb2RlKEFjY2Vzc2liaWxpdHlNYW5hZ2VyLkRBTFRPTklaRVJfRElTQUJMRUQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhc0NvbG9yVHJhbnNmb3JtKSB7CisgICAgICAgICAgICBuYXRpdmVTZXRDb2xvclRyYW5zZm9ybShjb2xvck1hdHJpeCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuYXRpdmVTZXRDb2xvclRyYW5zZm9ybShudWxsKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUb3VjaEV4cGxvcmF0aW9uTG9ja2VkKFVzZXJTdGF0ZSB1c2VyU3RhdGUpIHsKICAgICAgICAgYm9vbGVhbiBlbmFibGVkID0gZmFsc2U7CiAgICAgICAgIGZpbmFsIGludCBzZXJ2aWNlQ291bnQgPSB1c2VyU3RhdGUubUJvdW5kU2VydmljZXMuc2l6ZSgpOwpAQCAtMTUyOSw2ICsxNjk2LDU2IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBzdXJmYWNlIGZsaW5nZXIncyBEYWx0b25pemF0aW9uIG1vZGUuIFRoaXMgYWRqdXN0cyB0aGUgY29sb3IKKyAgICAgKiBzcGFjZSB0byBjb3JyZWN0IGZvciBvciBzaW11bGF0ZSB2YXJpb3VzIHR5cGVzIG9mIGNvbG9yIGJsaW5kbmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtb2RlIG5ldyBEYWx0b25pemF0aW9uIG1vZGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIG5hdGl2ZVNldERhbHRvbml6ZXJNb2RlKGludCBtb2RlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBJQmluZGVyIGZsaW5nZXIgPSBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKCJTdXJmYWNlRmxpbmdlciIpOworICAgICAgICAgICAgaWYgKGZsaW5nZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZpbmFsIFBhcmNlbCBkYXRhID0gUGFyY2VsLm9idGFpbigpOworICAgICAgICAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbigiYW5kcm9pZC51aS5JU3VyZmFjZUNvbXBvc2VyIik7CisgICAgICAgICAgICAgICAgZGF0YS53cml0ZUludChtb2RlKTsKKyAgICAgICAgICAgICAgICBmbGluZ2VyLnRyYW5zYWN0KDEwMTQsIGRhdGEsIG51bGwsIDApOworICAgICAgICAgICAgICAgIGRhdGEucmVjeWNsZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFNsb2cuZShMT0dfVEFHLCAiRmFpbGVkIHRvIHNldCBEYWx0b25pemVyIG1vZGUiLCBleCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBzdXJmYWNlIGZsaW5nZXIncyBjb2xvciB0cmFuc2Zvcm1hdGlvbiBhcyBhIDR4NCBtYXRyaXguIElmIHRoZQorICAgICAqIG1hdHJpeCBpcyBudWxsLCBjb2xvciB0cmFuc2Zvcm1hdGlvbnMgYXJlIGRpc2FibGVkLgorICAgICAqCisgICAgICogQHBhcmFtIG0gdGhlIGZsb2F0IGFycmF5IHRoYXQgaG9sZHMgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgb3IgbnVsbCB0bworICAgICAqICAgICAgICAgICAgZGlzYWJsZSB0cmFuc2Zvcm1hdGlvbgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbmF0aXZlU2V0Q29sb3JUcmFuc2Zvcm0oZmxvYXRbXSBtKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBJQmluZGVyIGZsaW5nZXIgPSBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKCJTdXJmYWNlRmxpbmdlciIpOworICAgICAgICAgICAgaWYgKGZsaW5nZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZpbmFsIFBhcmNlbCBkYXRhID0gUGFyY2VsLm9idGFpbigpOworICAgICAgICAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbigiYW5kcm9pZC51aS5JU3VyZmFjZUNvbXBvc2VyIik7CisgICAgICAgICAgICAgICAgaWYgKG0gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhLndyaXRlSW50KDEpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEud3JpdGVGbG9hdChtW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGEud3JpdGVJbnQoMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZsaW5nZXIudHJhbnNhY3QoMTAxNSwgZGF0YSwgbnVsbCwgMCk7CisgICAgICAgICAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU2xvZy5lKExPR19UQUcsICJGYWlsZWQgdG8gc2V0IGNvbG9yIHRyYW5zZm9ybSIsIGV4KTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgY2xhc3MgQWNjZXNzaWJpbGl0eUNvbm5lY3Rpb25XcmFwcGVyIGltcGxlbWVudHMgRGVhdGhSZWNpcGllbnQgewogICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtV2luZG93SWQ7CiAgICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1Vc2VySWQ7CkBAIC0yOTUyLDYgKzMxNjksNyBAQAogICAgICAgICBwdWJsaWMgYm9vbGVhbiBtSXNFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHlFbmFibGVkOwogICAgICAgICBwdWJsaWMgYm9vbGVhbiBtSXNEaXNwbGF5TWFnbmlmaWNhdGlvbkVuYWJsZWQ7CiAgICAgICAgIHB1YmxpYyBib29sZWFuIG1Jc0ZpbHRlcktleUV2ZW50c0VuYWJsZWQ7CisgICAgICAgIHB1YmxpYyBib29sZWFuIG1IYXNEaXNwbGF5Q29sb3JBZGp1c3RtZW50OwogCiAgICAgICAgIHByaXZhdGUgU2VydmljZSBtVWlBdXRvbWF0aW9uU2VydmljZTsKICAgICAgICAgcHJpdmF0ZSBJQWNjZXNzaWJpbGl0eVNlcnZpY2VDbGllbnQgbVVpQXV0b21hdGlvblNlcnZpY2VDbGllbnQ7CkBAIC0zMDQzLDYgKzMyNjEsMjMgQEAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbUVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eVVyaSA9IFNldHRpbmdzLlNlY3VyZQogICAgICAgICAgICAgICAgIC5nZXRVcmlGb3IoU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfU0NSSVBUX0lOSkVDVElPTik7CiAKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbURpc3BsYXlDb250cmFzdEVuYWJsZWRVcmkgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAorICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09OVFJBU1RfRU5BQkxFRCk7CisgICAgICAgIHByaXZhdGUgZmluYWwgVXJpIG1EaXNwbGF5Q29udHJhc3RVcmkgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAorICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09OVFJBU1QpOworICAgICAgICBwcml2YXRlIGZpbmFsIFVyaSBtRGlzcGxheUJyaWdodG5lc3NVcmkgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAorICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQlJJR0hUTkVTUyk7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbURpc3BsYXlJbnZlcnNpb25FbmFibGVkVXJpID0gU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcigKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9FTkFCTEVEKTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbURpc3BsYXlJbnZlcnNpb25VcmkgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAorICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfSU5WRVJTSU9OKTsKKworICAgICAgICBwcml2YXRlIGZpbmFsIFVyaSBtRGlzcGxheURhbHRvbml6ZXJFbmFibGVkVXJpID0gU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcigKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0RBTFRPTklaRVJfRU5BQkxFRCk7CisgICAgICAgIHByaXZhdGUgZmluYWwgVXJpIG1EaXNwbGF5RGFsdG9uaXplclVyaSA9IFNldHRpbmdzLlNlY3VyZS5nZXRVcmlGb3IoCisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9EQUxUT05JWkVSKTsKKwogICAgICAgICBwdWJsaWMgQWNjZXNzaWJpbGl0eUNvbnRlbnRPYnNlcnZlcihIYW5kbGVyIGhhbmRsZXIpIHsKICAgICAgICAgICAgIHN1cGVyKGhhbmRsZXIpOwogICAgICAgICB9CkBAIC0zMDYxLDYgKzMyOTYsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRoaXMsIFVzZXJIYW5kbGUuVVNFUl9BTEwpOwogICAgICAgICAgICAgY29udGVudFJlc29sdmVyLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKG1FbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHlVcmksCiAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB0aGlzLCBVc2VySGFuZGxlLlVTRVJfQUxMKTsKKyAgICAgICAgICAgIGNvbnRlbnRSZXNvbHZlci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcigKKyAgICAgICAgICAgICAgICAgICAgbURpc3BsYXlDb250cmFzdEVuYWJsZWRVcmksIGZhbHNlLCB0aGlzLCBVc2VySGFuZGxlLlVTRVJfQUxMKTsKKyAgICAgICAgICAgIGNvbnRlbnRSZXNvbHZlci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcigKKyAgICAgICAgICAgICAgICAgICAgbURpc3BsYXlDb250cmFzdFVyaSwgZmFsc2UsIHRoaXMsIFVzZXJIYW5kbGUuVVNFUl9BTEwpOworICAgICAgICAgICAgY29udGVudFJlc29sdmVyLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKAorICAgICAgICAgICAgICAgICAgICBtRGlzcGxheUJyaWdodG5lc3NVcmksIGZhbHNlLCB0aGlzLCBVc2VySGFuZGxlLlVTRVJfQUxMKTsKKyAgICAgICAgICAgIGNvbnRlbnRSZXNvbHZlci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcigKKyAgICAgICAgICAgICAgICAgICAgbURpc3BsYXlJbnZlcnNpb25FbmFibGVkVXJpLCBmYWxzZSwgdGhpcywgVXNlckhhbmRsZS5VU0VSX0FMTCk7CisgICAgICAgICAgICBjb250ZW50UmVzb2x2ZXIucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoCisgICAgICAgICAgICAgICAgICAgIG1EaXNwbGF5SW52ZXJzaW9uVXJpLCBmYWxzZSwgdGhpcywgVXNlckhhbmRsZS5VU0VSX0FMTCk7CisgICAgICAgICAgICBjb250ZW50UmVzb2x2ZXIucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoCisgICAgICAgICAgICAgICAgICAgIG1EaXNwbGF5RGFsdG9uaXplckVuYWJsZWRVcmksIGZhbHNlLCB0aGlzLCBVc2VySGFuZGxlLlVTRVJfQUxMKTsKKyAgICAgICAgICAgIGNvbnRlbnRSZXNvbHZlci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcigKKyAgICAgICAgICAgICAgICAgICAgbURpc3BsYXlEYWx0b25pemVyVXJpLCBmYWxzZSwgdGhpcywgVXNlckhhbmRsZS5VU0VSX0FMTCk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTMxMjUsNiArMzM3NCwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtRGlzcGxheUNvbnRyYXN0RW5hYmxlZFVyaS5lcXVhbHModXJpKQorICAgICAgICAgICAgICAgICAgICB8fCBtRGlzcGxheUludmVyc2lvbkVuYWJsZWRVcmkuZXF1YWxzKHVyaSkKKyAgICAgICAgICAgICAgICAgICAgfHwgbURpc3BsYXlEYWx0b25pemVyRW5hYmxlZFVyaS5lcXVhbHModXJpKQorICAgICAgICAgICAgICAgICAgICB8fCBtRGlzcGxheUNvbnRyYXN0VXJpLmVxdWFscyh1cmkpCisgICAgICAgICAgICAgICAgICAgIHx8IG1EaXNwbGF5QnJpZ2h0bmVzc1VyaS5lcXVhbHModXJpKQorICAgICAgICAgICAgICAgICAgICB8fCBtRGlzcGxheUludmVyc2lvblVyaS5lcXVhbHModXJpKQorICAgICAgICAgICAgICAgICAgICB8fCBtRGlzcGxheURhbHRvbml6ZXJVcmkuZXF1YWxzKHVyaSkpIHsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgdXBkYXRlIHdoZW4gdGhlIGF1dG9tYXRpb24gc2VydmljZSBkaWVzLgorICAgICAgICAgICAgICAgICAgICBVc2VyU3RhdGUgdXNlclN0YXRlID0gZ2V0Q3VycmVudFVzZXJTdGF0ZUxvY2tlZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAodXNlclN0YXRlLm1VaUF1dG9tYXRpb25TZXJ2aWNlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkRGlzcGxheUNvbG9yQWRqdXN0bWVudFNldHRpbmdzTG9ja2VkKHVzZXJTdGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVEaXNwbGF5Q29sb3JBZGp1c3RtZW50U2V0dGluZ3NMb2NrZWQodXNlclN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2ZVNlcnZpY2VzLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3RpdmVTZXJ2aWNlcy5qYXZhCmluZGV4IDg5YmRkYzYuLjE3YmIzZTAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2ZVNlcnZpY2VzLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZlU2VydmljZXMuamF2YQpAQCAtNjQsNyArNjQsNyBAQAogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX1NFUlZJQ0UgPSBBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLkRFQlVHX1NFUlZJQ0U7CiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfU0VSVklDRV9FWEVDVVRJTkcgPSBBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLkRFQlVHX1NFUlZJQ0VfRVhFQ1VUSU5HOwogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0RFTEFZRURfU0VSVklDRSA9IEFjdGl2aXR5TWFuYWdlclNlcnZpY2UuREVCVUdfU0VSVklDRTsKLSAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19ERUxBWUVEX1NUQVRTID0gREVCVUdfREVMQVlFRF9TRVJWSUNFOworICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0RFTEFZRURfU1RBUlRTID0gREVCVUdfREVMQVlFRF9TRVJWSUNFOwogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX01VID0gQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5ERUJVR19NVTsKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9IEFjdGl2aXR5TWFuYWdlclNlcnZpY2UuVEFHOwogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX01VID0gQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5UQUdfTVU7CkBAIC0xODYsMTEgKzE4NiwxMSBAQAogCiAgICAgICAgIHZvaWQgZW5zdXJlTm90U3RhcnRpbmdCYWNrZ3JvdW5kKFNlcnZpY2VSZWNvcmQgcikgewogICAgICAgICAgICAgaWYgKG1TdGFydGluZ0JhY2tncm91bmQucmVtb3ZlKHIpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHX0RFTEFZRURfU1RBVFMpIFNsb2cudihUQUcsICJObyBsb25nZXIgYmFja2dyb3VuZCBzdGFydGluZzogIiArIHIpOworICAgICAgICAgICAgICAgIGlmIChERUJVR19ERUxBWUVEX1NUQVJUUykgU2xvZy52KFRBRywgIk5vIGxvbmdlciBiYWNrZ3JvdW5kIHN0YXJ0aW5nOiAiICsgcik7CiAgICAgICAgICAgICAgICAgcmVzY2hlZHVsZURlbGF5ZWRTdGFydHMoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtRGVsYXllZFN0YXJ0TGlzdC5yZW1vdmUocikpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfREVMQVlFRF9TVEFUUykgU2xvZy52KFRBRywgIk5vIGxvbmdlciBkZWxheWluZyBzdGFydDogIiArIHIpOworICAgICAgICAgICAgICAgIGlmIChERUJVR19ERUxBWUVEX1NUQVJUUykgU2xvZy52KFRBRywgIk5vIGxvbmdlciBkZWxheWluZyBzdGFydDogIiArIHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTIwOCw3ICsyMDgsNyBAQAogICAgICAgICAgICAgd2hpbGUgKG1EZWxheWVkU3RhcnRMaXN0LnNpemUoKSA+IDAKICAgICAgICAgICAgICAgICAgICAgJiYgbVN0YXJ0aW5nQmFja2dyb3VuZC5zaXplKCkgPCBtTWF4U3RhcnRpbmdCYWNrZ3JvdW5kKSB7CiAgICAgICAgICAgICAgICAgU2VydmljZVJlY29yZCByID0gbURlbGF5ZWRTdGFydExpc3QucmVtb3ZlKDApOwotICAgICAgICAgICAgICAgIGlmIChERUJVR19ERUxBWUVEX1NUQVRTKSBTbG9nLnYoVEFHLCAiUkVNIEZSIERFTEFZIExJU1QgKGV4ZWMgbmV4dCk6ICIgKyByKTsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUdfREVMQVlFRF9TVEFSVFMpIFNsb2cudihUQUcsICJSRU0gRlIgREVMQVkgTElTVCAoZXhlYyBuZXh0KTogIiArIHIpOwogICAgICAgICAgICAgICAgIGlmIChyLnBlbmRpbmdTdGFydHMuc2l6ZSgpIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIioqKiogTk8gUEVORElORyBTVEFSVFMhICIgKyByICsgIiBzdGFydFJlcT0iICsgci5zdGFydFJlcXVlc3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBkZWxheWVkU3RvcD0iICsgci5kZWxheWVkU3RvcCk7CkBAIC0yNzYsNyArMjc2LDcgQEAKICAgICBDb21wb25lbnROYW1lIHN0YXJ0U2VydmljZUxvY2tlZChJQXBwbGljYXRpb25UaHJlYWQgY2FsbGVyLAogICAgICAgICAgICAgSW50ZW50IHNlcnZpY2UsIFN0cmluZyByZXNvbHZlZFR5cGUsCiAgICAgICAgICAgICBpbnQgY2FsbGluZ1BpZCwgaW50IGNhbGxpbmdVaWQsIGludCB1c2VySWQpIHsKLSAgICAgICAgaWYgKERFQlVHX0RFTEFZRURfU1RBVFMpIFNsb2cudihUQUcsICJzdGFydFNlcnZpY2U6ICIgKyBzZXJ2aWNlCisgICAgICAgIGlmIChERUJVR19ERUxBWUVEX1NUQVJUUykgU2xvZy52KFRBRywgInN0YXJ0U2VydmljZTogIiArIHNlcnZpY2UKICAgICAgICAgICAgICAgICArICIgdHlwZT0iICsgcmVzb2x2ZWRUeXBlICsgIiBhcmdzPSIgKyBzZXJ2aWNlLmdldEV4dHJhcygpKTsKIAogICAgICAgICBmaW5hbCBib29sZWFuIGNhbGxlckZnOwpAQCAtMzM2LDcgKzMzNiw3IEBACiAgICAgICAgICAgICAgICAgaWYgKHIuZGVsYXllZCkgewogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNlcnZpY2UgaXMgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGEgZGVsYXllZCBzdGFydDsganVzdCBsZWF2ZQogICAgICAgICAgICAgICAgICAgICAvLyBpdCBzdGlsbCB3YWl0aW5nLgotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfREVMQVlFRF9TVEFUUykgU2xvZy52KFRBRywgIkNvbnRpbnVpbmcgdG8gZGVsYXk6ICIgKyByKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0RFTEFZRURfU1RBUlRTKSBTbG9nLnYoVEFHLCAiQ29udGludWluZyB0byBkZWxheTogIiArIHIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gci5uYW1lOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoc21hcC5tU3RhcnRpbmdCYWNrZ3JvdW5kLnNpemUoKSA+PSBtTWF4U3RhcnRpbmdCYWNrZ3JvdW5kKSB7CkBAIC0zNDYsMTUgKzM0NiwxNSBAQAogICAgICAgICAgICAgICAgICAgICByLmRlbGF5ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gci5uYW1lOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfREVMQVlFRF9TVEFUUykgU2xvZy52KFRBRywgIk5vdCBkZWxheWluZzogIiArIHIpOworICAgICAgICAgICAgICAgIGlmIChERUJVR19ERUxBWUVEX1NUQVJUUykgU2xvZy52KFRBRywgIk5vdCBkZWxheWluZzogIiArIHIpOwogICAgICAgICAgICAgICAgIGFkZFRvU3RhcnRpbmcgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9jLmN1clByb2NTdGF0ZSA+PSBBY3Rpdml0eU1hbmFnZXIuUFJPQ0VTU19TVEFURV9TRVJWSUNFKSB7CiAgICAgICAgICAgICAgICAgLy8gV2Ugc2xpZ2h0bHkgbG9vc2VuIHdoZW4gd2Ugd2lsbCBlbnF1ZXVlIHRoaXMgbmV3IHNlcnZpY2UgYXMgYSBiYWNrZ3JvdW5kCiAgICAgICAgICAgICAgICAgLy8gc3RhcnRpbmcgc2VydmljZSB3ZSBhcmUgd2FpdGluZyBmb3IsIHRvIGFsc28gaW5jbHVkZSBwcm9jZXNzZXMgdGhhdCBhcmUKICAgICAgICAgICAgICAgICAvLyBjdXJyZW50bHkgcnVubmluZyBvdGhlciBzZXJ2aWNlcyBvciByZWNlaXZlcnMuCiAgICAgICAgICAgICAgICAgYWRkVG9TdGFydGluZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHX0RFTEFZRURfU1RBVFMpIFNsb2cudihUQUcsICJOb3QgZGVsYXlpbmcsIGJ1dCBjb3VudGluZyBhcyBiZzogIiArIHIpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChERUJVR19ERUxBWUVEX1NUQVRTKSB7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHX0RFTEFZRURfU1RBUlRTKSBTbG9nLnYoVEFHLCAiTm90IGRlbGF5aW5nLCBidXQgY291bnRpbmcgYXMgYmc6ICIgKyByKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoREVCVUdfREVMQVlFRF9TVEFSVFMpIHsKICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoMTI4KTsKICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIk5vdCBwb3RlbnRpYWwgZGVsYXkgKHN0YXRlPSIpLmFwcGVuZChwcm9jLmN1clByb2NTdGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoJyAnKS5hcHBlbmQocHJvYy5hZGpUeXBlKTsKQEAgLTM2Nyw3ICszNjcsNyBAQAogICAgICAgICAgICAgICAgIHNiLmFwcGVuZChyLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIFNsb2cudihUQUcsIHNiLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKERFQlVHX0RFTEFZRURfU1RBVFMpIHsKKyAgICAgICAgfSBlbHNlIGlmIChERUJVR19ERUxBWUVEX1NUQVJUUykgewogICAgICAgICAgICAgaWYgKGNhbGxlckZnKSB7CiAgICAgICAgICAgICAgICAgU2xvZy52KFRBRywgIk5vdCBwb3RlbnRpYWwgZGVsYXkgKGNhbGxlckZnPSIgKyBjYWxsZXJGZyArICIgdWlkPSIKICAgICAgICAgICAgICAgICAgICAgICAgICsgY2FsbGluZ1VpZCArICIgcGlkPSIgKyBjYWxsaW5nUGlkICsgIik6ICIgKyByKTsKQEAgLTQwNCw3ICs0MDQsNyBAQAogICAgICAgICAgICAgICAgIFJ1bnRpbWVFeGNlcHRpb24gaGVyZSA9IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJoZXJlIik7CiAgICAgICAgICAgICAgICAgaGVyZS5maWxsSW5TdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgU2xvZy52KFRBRywgIlN0YXJ0aW5nIGJhY2tncm91bmQgKGZpcnN0PSIgKyBmaXJzdCArICIpOiAiICsgciwgaGVyZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKERFQlVHX0RFTEFZRURfU1RBVFMpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoREVCVUdfREVMQVlFRF9TVEFSVFMpIHsKICAgICAgICAgICAgICAgICBTbG9nLnYoVEFHLCAiU3RhcnRpbmcgYmFja2dyb3VuZCAoZmlyc3Q9IiArIGZpcnN0ICsgIik6ICIgKyByKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmaXJzdCkgewpAQCAtNDIyLDcgKzQyMiw3IEBACiAgICAgICAgICAgICAvLyBJZiBzZXJ2aWNlIGlzbid0IGFjdHVhbGx5IHJ1bm5pbmcsIGJ1dCBpcyBpcyBiZWluZyBoZWxkIGluIHRoZQogICAgICAgICAgICAgLy8gZGVsYXllZCBsaXN0LCB0aGVuIHdlIG5lZWQgdG8ga2VlcCBpdCBzdGFydGVkIGJ1dCBub3RlIHRoYXQgaXQKICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBzdG9wcGVkIG9uY2Ugbm8gbG9uZ2VyIGRlbGF5ZWQuCi0gICAgICAgICAgICBpZiAoREVCVUdfREVMQVlFRF9TVEFUUykgU2xvZy52KFRBRywgIkRlbGF5aW5nIHN0b3Agb2YgcGVuZGluZzogIiArIHNlcnZpY2UpOworICAgICAgICAgICAgaWYgKERFQlVHX0RFTEFZRURfU1RBUlRTKSBTbG9nLnYoVEFHLCAiRGVsYXlpbmcgc3RvcCBvZiBwZW5kaW5nOiAiICsgc2VydmljZSk7CiAgICAgICAgICAgICBzZXJ2aWNlLmRlbGF5ZWRTdG9wID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTI3OCw3ICsxMjc4LDcgQEAKIAogICAgICAgICAvLyBNYWtlIHN1cmUgdGhpcyBzZXJ2aWNlIGlzIG5vIGxvbmdlciBjb25zaWRlcmVkIGRlbGF5ZWQsIHdlIGFyZSBzdGFydGluZyBpdCBub3cuCiAgICAgICAgIGlmIChyLmRlbGF5ZWQpIHsKLSAgICAgICAgICAgIGlmIChERUJVR19ERUxBWUVEX1NUQVRTKSBTbG9nLnYoVEFHLCAiUkVNIEZSIERFTEFZIExJU1QgKGJyaW5nIHVwKTogIiArIHIpOworICAgICAgICAgICAgaWYgKERFQlVHX0RFTEFZRURfU1RBUlRTKSBTbG9nLnYoVEFHLCAiUkVNIEZSIERFTEFZIExJU1QgKGJyaW5nIHVwKTogIiArIHIpOwogICAgICAgICAgICAgZ2V0U2VydmljZU1hcChyLnVzZXJJZCkubURlbGF5ZWRTdGFydExpc3QucmVtb3ZlKHIpOwogICAgICAgICAgICAgci5kZWxheWVkID0gZmFsc2U7CiAgICAgICAgIH0KQEAgLTEzNjEsNyArMTM2MSw3IEBACiAgICAgICAgICAgICAvLyBPaCBhbmQgaGV5IHdlJ3ZlIGFscmVhZHkgYmVlbiBhc2tlZCB0byBzdG9wIQogICAgICAgICAgICAgci5kZWxheWVkU3RvcCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKHIuc3RhcnRSZXF1ZXN0ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfREVMQVlFRF9TVEFUUykgU2xvZy52KFRBRywgIkFwcGx5aW5nIGRlbGF5ZWQgc3RvcCAoaW4gYnJpbmcgdXApOiAiICsgcik7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHX0RFTEFZRURfU1RBUlRTKSBTbG9nLnYoVEFHLCAiQXBwbHlpbmcgZGVsYXllZCBzdG9wIChpbiBicmluZyB1cCk6ICIgKyByKTsKICAgICAgICAgICAgICAgICBzdG9wU2VydmljZUxvY2tlZChyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTQzMiw3ICsxNDMyLDcgQEAKICAgICAgICAgc2VuZFNlcnZpY2VBcmdzTG9ja2VkKHIsIGV4ZWNJbkZnLCB0cnVlKTsKIAogICAgICAgICBpZiAoci5kZWxheWVkKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUdfREVMQVlFRF9TVEFUUykgU2xvZy52KFRBRywgIlJFTSBGUiBERUxBWSBMSVNUIChuZXcgcHJvYyk6ICIgKyByKTsKKyAgICAgICAgICAgIGlmIChERUJVR19ERUxBWUVEX1NUQVJUUykgU2xvZy52KFRBRywgIlJFTSBGUiBERUxBWSBMSVNUIChuZXcgcHJvYyk6ICIgKyByKTsKICAgICAgICAgICAgIGdldFNlcnZpY2VNYXAoci51c2VySWQpLm1EZWxheWVkU3RhcnRMaXN0LnJlbW92ZShyKTsKICAgICAgICAgICAgIHIuZGVsYXllZCA9IGZhbHNlOwogICAgICAgICB9CkBAIC0xNDQxLDcgKzE0NDEsNyBAQAogICAgICAgICAgICAgLy8gT2ggYW5kIGhleSB3ZSd2ZSBhbHJlYWR5IGJlZW4gYXNrZWQgdG8gc3RvcCEKICAgICAgICAgICAgIHIuZGVsYXllZFN0b3AgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChyLnN0YXJ0UmVxdWVzdGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHX0RFTEFZRURfU1RBVFMpIFNsb2cudihUQUcsICJBcHBseWluZyBkZWxheWVkIHN0b3AgKGZyb20gc3RhcnQpOiAiICsgcik7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHX0RFTEFZRURfU1RBUlRTKSBTbG9nLnYoVEFHLCAiQXBwbHlpbmcgZGVsYXllZCBzdG9wIChmcm9tIHN0YXJ0KTogIiArIHIpOwogICAgICAgICAgICAgICAgIHN0b3BTZXJ2aWNlTG9ja2VkKHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMDM0LDcgKzIwMzQsNyBAQAogICAgICAgICAgICAgc3luY2hyb25pemVkIChzci5zdGF0cy5nZXRCYXR0ZXJ5U3RhdHMoKSkgewogICAgICAgICAgICAgICAgIHNyLnN0YXRzLnN0b3BMYXVuY2hlZExvY2tlZCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNyLmFwcCAhPSBudWxsICYmICFzci5hcHAucGVyc2lzdGVudCkgeworICAgICAgICAgICAgaWYgKHNyLmFwcCAhPSBhcHAgJiYgc3IuYXBwICE9IG51bGwgJiYgIXNyLmFwcC5wZXJzaXN0ZW50KSB7CiAgICAgICAgICAgICAgICAgc3IuYXBwLnNlcnZpY2VzLnJlbW92ZShzcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzci5hcHAgPSBudWxsOwpAQCAtMjA2NywxMyArMjA2NywxOSBAQAogICAgICAgICAvLyBOb3cgZG8gcmVtYWluaW5nIHNlcnZpY2UgY2xlYW51cC4KICAgICAgICAgZm9yIChpbnQgaT1hcHAuc2VydmljZXMuc2l6ZSgpLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICAgU2VydmljZVJlY29yZCBzciA9IGFwcC5zZXJ2aWNlcy52YWx1ZUF0KGkpOworCisgICAgICAgICAgICAvLyBVbmxlc3MgdGhlIHByb2Nlc3MgaXMgcGVyc2lzdGVudCwgdGhpcyBwcm9jZXNzIHJlY29yZCBpcyBnb2luZyBhd2F5LAorICAgICAgICAgICAgLy8gc28gbWFrZSBzdXJlIHRoZSBzZXJ2aWNlIGlzIGNsZWFuZWQgb3V0IG9mIGl0LgorICAgICAgICAgICAgaWYgKCFhcHAucGVyc2lzdGVudCkgeworICAgICAgICAgICAgICAgIGFwcC5zZXJ2aWNlcy5yZW1vdmVBdChpKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gU2FuaXR5IGNoZWNrOiBpZiB0aGUgc2VydmljZSBsaXN0ZWQgZm9yIHRoZSBhcHAgaXMgbm90IG9uZQotICAgICAgICAgICAgLy8gd2UgYWN0dWFsbHkgYXJlIG1haW50YWluaW5nLCBkcm9wIGl0LgorICAgICAgICAgICAgLy8gd2UgYWN0dWFsbHkgYXJlIG1haW50YWluaW5nLCBqdXN0IGxldCBpdCBkcm9wLgogICAgICAgICAgICAgaWYgKHNtYXAubVNlcnZpY2VzQnlOYW1lLmdldChzci5uYW1lKSAhPSBzcikgewogICAgICAgICAgICAgICAgIFNlcnZpY2VSZWNvcmQgY3VyID0gc21hcC5tU2VydmljZXNCeU5hbWUuZ2V0KHNyLm5hbWUpOwogICAgICAgICAgICAgICAgIFNsb2cud3RmKFRBRywgIlNlcnZpY2UgIiArIHNyICsgIiBpbiBwcm9jZXNzICIgKyBhcHAKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBub3Qgc2FtZSBhcyBpbiBtYXA6ICIgKyBjdXIpOwotICAgICAgICAgICAgICAgIGFwcC5zZXJ2aWNlcy5yZW1vdmVBdChpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IDA1NjY2YjQuLjMyNjZjYTcgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5TWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTI5LDkgKzI5LDcgQEAKIAogaW1wb3J0IGFuZHJvaWQuYXBwLkFwcE9wc01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHB3aWRnZXQuQXBwV2lkZ2V0TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOwotaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuR3VhcmRlZEJ5OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JQXBwT3BzU2VydmljZTsKQEAgLTU0LDYgKzUyLDcgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuZmlyZXdhbGwuSW50ZW50RmlyZXdhbGw7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnBtLlVzZXJNYW5hZ2VyU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIud20uQXBwVHJhbnNpdGlvbjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIud20uU3RhY2tCb3g7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJTZXJ2aWNlOwogaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5jb2xsZWN0Lkxpc3RzOwogaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5jb2xsZWN0Lk1hcHM7CkBAIC02OSw2ICs2OCw3IEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5SdW5uaW5nVGFza0luZm87CitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrQm94SW5mbzsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJbmZvOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlck5hdGl2ZTsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU9wdGlvbnM7CkBAIC0xMzI2LDcgKzEzMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGtnID0gYnVuZGxlLmdldFN0cmluZygicGtnIik7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWFzb24gPSBidW5kbGUuZ2V0U3RyaW5nKCJyZWFzb24iKTsKICAgICAgICAgICAgICAgICAgICAgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChwa2csIGFwcGlkLCByZXN0YXJ0LCBmYWxzZSwgdHJ1ZSwgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5VU0VSX0FMTCwgcmVhc29uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgVXNlckhhbmRsZS5VU0VSX0FMTCwgcmVhc29uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBGSU5BTElaRV9QRU5ESU5HX0lOVEVOVF9NU0c6IHsKQEAgLTE3NzAsNyArMTc3MCw3IEBACiAgICAgcHVibGljIHZvaWQgc2V0V2luZG93TWFuYWdlcihXaW5kb3dNYW5hZ2VyU2VydmljZSB3bSkgewogICAgICAgICBtV2luZG93TWFuYWdlciA9IHdtOwogICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnNldFdpbmRvd01hbmFnZXIod20pOwotICAgICAgICB3bS5jcmVhdGVTdGFjayhIT01FX1NUQUNLX0lELCBEaXNwbGF5LkRFRkFVTFRfRElTUExBWSk7CisgICAgICAgIHdtLmNyZWF0ZVN0YWNrKEhPTUVfU1RBQ0tfSUQsIC0xLCBTdGFja0JveC5UQVNLX1NUQUNLX0dPRVNfT1ZFUiwgMS4wZik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc3RhcnRPYnNlcnZpbmdOYXRpdmVDcmFzaGVzKCkgewpAQCAtMzU5Miw5ICszNTkyLDEzIEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBmaW5hbCB2b2lkIGhhbmRsZUFwcERpZWRMb2NrZWQoUHJvY2Vzc1JlY29yZCBhcHAsCiAgICAgICAgICAgICBib29sZWFuIHJlc3RhcnRpbmcsIGJvb2xlYW4gYWxsb3dSZXN0YXJ0KSB7CisgICAgICAgIGludCBwaWQgPSBhcHAucGlkOwogICAgICAgICBjbGVhblVwQXBwbGljYXRpb25SZWNvcmRMb2NrZWQoYXBwLCByZXN0YXJ0aW5nLCBhbGxvd1Jlc3RhcnQsIC0xKTsKICAgICAgICAgaWYgKCFyZXN0YXJ0aW5nKSB7CiAgICAgICAgICAgICByZW1vdmVMcnVQcm9jZXNzTG9ja2VkKGFwcCk7CisgICAgICAgICAgICBpZiAocGlkID4gMCkgeworICAgICAgICAgICAgICAgIFByb2Nlc3NMaXN0LnJlbW92ZShwaWQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1Qcm9maWxlUHJvYyA9PSBhcHApIHsKQEAgLTQ0ODMsNyArNDQ4Nyw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1aWQsIFN0cmluZyByZWFzb24pIHsKICAgICAgICAgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChwYWNrYWdlTmFtZSwgVXNlckhhbmRsZS5nZXRBcHBJZCh1aWQpLCBmYWxzZSwKLSAgICAgICAgICAgICAgICBmYWxzZSwgdHJ1ZSwgZmFsc2UsIFVzZXJIYW5kbGUuZ2V0VXNlcklkKHVpZCksIHJlYXNvbik7CisgICAgICAgICAgICAgICAgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgVXNlckhhbmRsZS5nZXRVc2VySWQodWlkKSwgcmVhc29uKTsKICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9QQUNLQUdFX1JFU1RBUlRFRCwKICAgICAgICAgICAgICAgICBVcmkuZnJvbVBhcnRzKCJwYWNrYWdlIiwgcGFja2FnZU5hbWUsIG51bGwpKTsKICAgICAgICAgaWYgKCFtUHJvY2Vzc2VzUmVhZHkpIHsKQEAgLTQ0OTksNyArNDUwMyw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGZvcmNlU3RvcFVzZXJMb2NrZWQoaW50IHVzZXJJZCwgU3RyaW5nIHJlYXNvbikgewotICAgICAgICBmb3JjZVN0b3BQYWNrYWdlTG9ja2VkKG51bGwsIC0xLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCB1c2VySWQsIHJlYXNvbik7CisgICAgICAgIGZvcmNlU3RvcFBhY2thZ2VMb2NrZWQobnVsbCwgLTEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB1c2VySWQsIHJlYXNvbik7CiAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fVVNFUl9TVE9QUEVEKTsKICAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWQogICAgICAgICAgICAgICAgIHwgSW50ZW50LkZMQUdfUkVDRUlWRVJfRk9SRUdST1VORCk7CkBAIC00NTg0LDcgKzQ1ODgsNyBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGZvcmNlU3RvcFBhY2thZ2VMb2NrZWQoU3RyaW5nIG5hbWUsIGludCBhcHBJZCwKICAgICAgICAgICAgIGJvb2xlYW4gY2FsbGVyV2lsbFJlc3RhcnQsIGJvb2xlYW4gcHVyZ2VDYWNoZSwgYm9vbGVhbiBkb2l0LAotICAgICAgICAgICAgYm9vbGVhbiBldmVuUGVyc2lzdGVudCwgaW50IHVzZXJJZCwgU3RyaW5nIHJlYXNvbikgeworICAgICAgICAgICAgYm9vbGVhbiBldmVuUGVyc2lzdGVudCwgYm9vbGVhbiB1bmluc3RhbGxpbmcsIGludCB1c2VySWQsIFN0cmluZyByZWFzb24pIHsKICAgICAgICAgaW50IGk7CiAgICAgICAgIGludCBOOwogCkBAIC00Njc2LDcgKzQ2ODAsNyBAQAogICAgICAgICAvLyBSZW1vdmUgdHJhbnNpZW50IHBlcm1pc3Npb25zIGdyYW50ZWQgZnJvbS90byB0aGlzIHBhY2thZ2UvdXNlcgogICAgICAgICByZW1vdmVVcmlQZXJtaXNzaW9uc0ZvclBhY2thZ2VMb2NrZWQobmFtZSwgdXNlcklkLCBmYWxzZSk7CiAKLSAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgeworICAgICAgICBpZiAobmFtZSA9PSBudWxsIHx8IHVuaW5zdGFsbGluZykgewogICAgICAgICAgICAgLy8gUmVtb3ZlIHBlbmRpbmcgaW50ZW50cy4gIEZvciBub3cgd2Ugb25seSBkbyB0aGlzIHdoZW4gZm9yY2UKICAgICAgICAgICAgIC8vIHN0b3BwaW5nIHVzZXJzLCBiZWNhdXNlIHdlIGhhdmUgc29tZSBwcm9ibGVtcyB3aGVuIGRvaW5nIHRoaXMKICAgICAgICAgICAgIC8vIGZvciBwYWNrYWdlcyAtLSBhcHAgd2lkZ2V0cyBhcmUgbm90IGN1cnJlbnRseSBjbGVhbmVkIHVwIGZvcgpAQCAtNTEyMSw3ICs1MTI1LDcgQEAKICAgICAgICAgICAgICAgICBpZiAocGtncyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIHBrZyA6IHBrZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQWN0aXZpdHlNYW5hZ2VyU2VydmljZS50aGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcmNlU3RvcFBhY2thZ2VMb2NrZWQocGtnLCAtMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcmNlU3RvcFBhY2thZ2VMb2NrZWQocGtnLCAtMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbmlzaGVkIGJvb3RpbmciKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHRDb2RlKEFjdGl2aXR5LlJFU1VMVF9PSyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTcwOTYsMTUgKzcxMDAsMTYgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGNyZWF0ZVN0YWNrKGludCB0YXNrSWQpIHsKKyAgICBwdWJsaWMgaW50IGNyZWF0ZVN0YWNrKGludCB0YXNrSWQsIGludCByZWxhdGl2ZVN0YWNrQm94SWQsIGludCBwb3NpdGlvbiwgZmxvYXQgd2VpZ2h0KSB7CiAgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKICAgICAgICAgICAgICAgICAiY3JlYXRlU3RhY2soKSIpOwotICAgICAgICBpZiAoREVCVUdfU1RBQ0spIFNsb2cuZChUQUcsICJjcmVhdGVTdGFjazogdGFza0lkPSIgKyB0YXNrSWQpOworICAgICAgICBpZiAoREVCVUdfU1RBQ0spIFNsb2cuZChUQUcsICJjcmVhdGVTdGFjazogdGFza0lkPSIgKyB0YXNrSWQgKyAiIHJlbFN0YWNrQm94SWQ9IiArCisgICAgICAgICAgICAgICAgcmVsYXRpdmVTdGFja0JveElkICsgIiBwb3NpdGlvbj0iICsgcG9zaXRpb24gKyAiIHdlaWdodD0iICsgd2VpZ2h0KTsKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGludCBzdGFja0lkID0gbVN0YWNrU3VwZXJ2aXNvci5jcmVhdGVTdGFjaygpOwotICAgICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLmNyZWF0ZVN0YWNrKHN0YWNrSWQsIERpc3BsYXkuREVGQVVMVF9ESVNQTEFZKTsKKyAgICAgICAgICAgICAgICBtV2luZG93TWFuYWdlci5jcmVhdGVTdGFjayhzdGFja0lkLCByZWxhdGl2ZVN0YWNrQm94SWQsIHBvc2l0aW9uLCB3ZWlnaHQpOwogICAgICAgICAgICAgICAgIGlmICh0YXNrSWQgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIG1vdmVUYXNrVG9TdGFjayh0YXNrSWQsIHN0YWNrSWQsIHRydWUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTcxMzYsNDAgKzcxNDEsOTkgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZXNpemVTdGFjayhpbnQgc3RhY2tCb3hJZCwgUmVjdCBib3VuZHMpIHsKKyAgICBwdWJsaWMgdm9pZCByZXNpemVTdGFja0JveChpbnQgc3RhY2tCb3hJZCwgZmxvYXQgd2VpZ2h0KSB7CiAgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKICAgICAgICAgICAgICAgICAicmVzaXplU3RhY2tCb3goKSIpOwogICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtV2luZG93TWFuYWdlci5yZXNpemVTdGFjayhzdGFja0JveElkLCBib3VuZHMpOworICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIucmVzaXplU3RhY2tCb3goc3RhY2tCb3hJZCwgd2VpZ2h0KTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKICAgICAgICAgfQogICAgIH0KIAorICAgIHByaXZhdGUgQXJyYXlMaXN0PFN0YWNrSW5mbz4gZ2V0U3RhY2tzKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIEFycmF5TGlzdDxBY3Rpdml0eU1hbmFnZXIuU3RhY2tJbmZvPiBsaXN0ID0gbmV3IEFycmF5TGlzdDxBY3Rpdml0eU1hbmFnZXIuU3RhY2tJbmZvPigpOworICAgICAgICAgICAgQXJyYXlMaXN0PEFjdGl2aXR5U3RhY2s+IHN0YWNrcyA9IG1TdGFja1N1cGVydmlzb3IuZ2V0U3RhY2tzKCk7CisgICAgICAgICAgICBmb3IgKEFjdGl2aXR5U3RhY2sgc3RhY2sgOiBzdGFja3MpIHsKKyAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuU3RhY2tJbmZvIHN0YWNrSW5mbyA9IG5ldyBBY3Rpdml0eU1hbmFnZXIuU3RhY2tJbmZvKCk7CisgICAgICAgICAgICAgICAgaW50IHN0YWNrSWQgPSBzdGFjay5tU3RhY2tJZDsKKyAgICAgICAgICAgICAgICBzdGFja0luZm8uc3RhY2tJZCA9IHN0YWNrSWQ7CisgICAgICAgICAgICAgICAgc3RhY2tJbmZvLmJvdW5kcyA9IG1XaW5kb3dNYW5hZ2VyLmdldFN0YWNrQm91bmRzKHN0YWNrSWQpOworICAgICAgICAgICAgICAgIEFycmF5TGlzdDxUYXNrUmVjb3JkPiB0YXNrcyA9IHN0YWNrLmdldEFsbFRhc2tzKCk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IG51bVRhc2tzID0gdGFza3Muc2l6ZSgpOworICAgICAgICAgICAgICAgIGludFtdIHRhc2tJZHMgPSBuZXcgaW50W251bVRhc2tzXTsKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSB0YXNrTmFtZXMgPSBuZXcgU3RyaW5nW251bVRhc2tzXTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVRhc2tzOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgVGFza1JlY29yZCB0YXNrID0gdGFza3MuZ2V0KGkpOworICAgICAgICAgICAgICAgICAgICB0YXNrSWRzW2ldID0gdGFzay50YXNrSWQ7CisgICAgICAgICAgICAgICAgICAgIHRhc2tOYW1lc1tpXSA9IHRhc2sub3JpZ0FjdGl2aXR5ICE9IG51bGwgPyB0YXNrLm9yaWdBY3Rpdml0eS5mbGF0dGVuVG9TdHJpbmcoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFzay5yZWFsQWN0aXZpdHkgIT0gbnVsbCA/IHRhc2sucmVhbEFjdGl2aXR5LmZsYXR0ZW5Ub1N0cmluZygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0YXNrLmdldFRvcEFjdGl2aXR5KCkgIT0gbnVsbCA/IHRhc2suZ2V0VG9wQWN0aXZpdHkoKS5wYWNrYWdlTmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInVua25vd24iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGFja0luZm8udGFza0lkcyA9IHRhc2tJZHM7CisgICAgICAgICAgICAgICAgc3RhY2tJbmZvLnRhc2tOYW1lcyA9IHRhc2tOYW1lczsKKyAgICAgICAgICAgICAgICBsaXN0LmFkZChzdGFja0luZm8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYWRkU3RhY2tJbmZvVG9TdGFja0JveEluZm8oU3RhY2tCb3hJbmZvIHN0YWNrQm94SW5mbywgTGlzdDxTdGFja0luZm8+IHN0YWNrSW5mb3MpIHsKKyAgICAgICAgZmluYWwgaW50IHN0YWNrSWQgPSBzdGFja0JveEluZm8uc3RhY2tJZDsKKyAgICAgICAgaWYgKHN0YWNrSWQgPj0gMCkgeworICAgICAgICAgICAgZm9yIChTdGFja0luZm8gc3RhY2tJbmZvIDogc3RhY2tJbmZvcykgeworICAgICAgICAgICAgICAgIGlmIChzdGFja0lkID09IHN0YWNrSW5mby5zdGFja0lkKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrQm94SW5mby5zdGFjayA9IHN0YWNrSW5mbzsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2tJbmZvcy5yZW1vdmUoc3RhY2tJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkZFN0YWNrSW5mb1RvU3RhY2tCb3hJbmZvKHN0YWNrQm94SW5mby5jaGlsZHJlblswXSwgc3RhY2tJbmZvcyk7CisgICAgICAgICAgICBhZGRTdGFja0luZm9Ub1N0YWNrQm94SW5mbyhzdGFja0JveEluZm8uY2hpbGRyZW5bMV0sIHN0YWNrSW5mb3MpOworICAgICAgICB9CisgICAgfQorCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8U3RhY2tJbmZvPiBnZXRBbGxTdGFja0luZm9zKCkgeworICAgIHB1YmxpYyBMaXN0PFN0YWNrQm94SW5mbz4gZ2V0U3RhY2tCb3hlcygpIHsKICAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAogICAgICAgICAgICAgICAgICJnZXRTdGFja0JveGVzKCkiKTsKICAgICAgICAgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgeworICAgICAgICAgICAgTGlzdDxTdGFja0JveEluZm8+IHN0YWNrQm94SW5mb3MgPSBtV2luZG93TWFuYWdlci5nZXRTdGFja0JveEluZm9zKCk7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbVN0YWNrU3VwZXJ2aXNvci5nZXRBbGxTdGFja0luZm9zKCk7CisgICAgICAgICAgICAgICAgTGlzdDxTdGFja0luZm8+IHN0YWNrSW5mb3MgPSBnZXRTdGFja3MoKTsKKyAgICAgICAgICAgICAgICBmb3IgKFN0YWNrQm94SW5mbyBzdGFja0JveEluZm8gOiBzdGFja0JveEluZm9zKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFN0YWNrSW5mb1RvU3RhY2tCb3hJbmZvKHN0YWNrQm94SW5mbywgc3RhY2tJbmZvcyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN0YWNrQm94SW5mb3M7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RhY2tJbmZvIGdldFN0YWNrSW5mbyhpbnQgc3RhY2tJZCkgeworICAgIHB1YmxpYyBTdGFja0JveEluZm8gZ2V0U3RhY2tCb3hJbmZvKGludCBzdGFja0JveElkKSB7CiAgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAiZ2V0U3RhY2tJbmZvKCkiKTsKKyAgICAgICAgICAgICAgICAiZ2V0U3RhY2tCb3hJbmZvKCkiKTsKICAgICAgICAgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgeworICAgICAgICAgICAgTGlzdDxTdGFja0JveEluZm8+IHN0YWNrQm94SW5mb3MgPSBtV2luZG93TWFuYWdlci5nZXRTdGFja0JveEluZm9zKCk7CisgICAgICAgICAgICBTdGFja0JveEluZm8gaW5mbyA9IG51bGw7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbVN0YWNrU3VwZXJ2aXNvci5nZXRTdGFja0luZm8oc3RhY2tJZCk7CisgICAgICAgICAgICAgICAgTGlzdDxTdGFja0luZm8+IHN0YWNrSW5mb3MgPSBnZXRTdGFja3MoKTsKKyAgICAgICAgICAgICAgICBmb3IgKFN0YWNrQm94SW5mbyBzdGFja0JveEluZm8gOiBzdGFja0JveEluZm9zKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFN0YWNrSW5mb1RvU3RhY2tCb3hJbmZvKHN0YWNrQm94SW5mbywgc3RhY2tJbmZvcyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja0JveEluZm8uc3RhY2tCb3hJZCA9PSBzdGFja0JveElkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvID0gc3RhY2tCb3hJbmZvOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGluZm87CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CiAgICAgICAgIH0KQEAgLTgzNzQsNyArODQzOCw3IEBACiAgICAgICAgICAgICAgICAgbURlYnVnVHJhbnNpZW50ID0gIXBlcnNpc3RlbnQ7CiAgICAgICAgICAgICAgICAgaWYgKHBhY2thZ2VOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChwYWNrYWdlTmFtZSwgLTEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLlVTRVJfQUxMLCAic2V0IGRlYnVnIGFwcCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBVc2VySGFuZGxlLlVTRVJfQUxMLCAic2V0IGRlYnVnIGFwcCIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTEyMzEzLDYgKzEyMzc3LDcgQEAKICAgICAgICAgICAgIGJvb2xlYW4gcmVzdGFydGluZywgYm9vbGVhbiBhbGxvd1Jlc3RhcnQsIGludCBpbmRleCkgewogICAgICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAgICAgcmVtb3ZlTHJ1UHJvY2Vzc0xvY2tlZChhcHApOworICAgICAgICAgICAgUHJvY2Vzc0xpc3QucmVtb3ZlKGFwcC5waWQpOwogICAgICAgICB9CiAKICAgICAgICAgbVByb2Nlc3Nlc1RvR2MucmVtb3ZlKGFwcCk7CkBAIC0xMzI5OCw3ICsxMzM2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGlzdFtdID0gaW50ZW50LmdldFN0cmluZ0FycmF5RXh0cmEoSW50ZW50LkVYVFJBX0NIQU5HRURfUEFDS0FHRV9MSVNUKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ICE9IG51bGwgJiYgKGxpc3QubGVuZ3RoID4gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBwa2cgOiBsaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlU3RvcFBhY2thZ2VMb2NrZWQocGtnLCAtMSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCB1c2VySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlU3RvcFBhY2thZ2VMb2NrZWQocGtnLCAtMSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgdXNlcklkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdG9yYWdlIHVubW91bnQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFBhY2thZ2VCcm9hZGNhc3RMb2NrZWQoCkBAIC0xMzMxMCwxMCArMTMzNzUsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgKHNzcD1kYXRhLmdldFNjaGVtZVNwZWNpZmljUGFydCgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiByZW1vdmVkID0gSW50ZW50LkFDVElPTl9QQUNLQUdFX1JFTU9WRUQuZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50LmdldEFjdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZ1bGxVbmluc3RhbGwgPSByZW1vdmVkICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaW50ZW50LmdldEJvb2xlYW5FeHRyYShJbnRlbnQuRVhUUkFfUkVQTEFDSU5HLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEludGVudC5FWFRSQV9ET05UX0tJTExfQVBQLCBmYWxzZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChzc3AsIFVzZXJIYW5kbGUuZ2V0QXBwSWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50LmdldEludEV4dHJhKEludGVudC5FWFRSQV9VSUQsIC0xKSksIGZhbHNlLCB0cnVlLCB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB1c2VySWQsIHJlbW92ZWQgPyAicGtnIHJlbW92ZWQiIDogInBrZyBjaGFuZ2VkIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGZ1bGxVbmluc3RhbGwsIHVzZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID8gInBrZyByZW1vdmVkIiA6ICJwa2cgY2hhbmdlZCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kUGFja2FnZUJyb2FkY2FzdExvY2tlZChJQXBwbGljYXRpb25UaHJlYWQuUEFDS0FHRV9SRU1PVkVELApAQCAtMTM3OTEsNyArMTM4NTksNyBAQAogCiAgICAgICAgICAgICBmaW5hbCBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICAgICAgLy8gSW5zdHJ1bWVudGF0aW9uIGNhbiBraWxsIGFuZCByZWxhdW5jaCBldmVuIHBlcnNpc3RlbnQgcHJvY2Vzc2VzCi0gICAgICAgICAgICBmb3JjZVN0b3BQYWNrYWdlTG9ja2VkKGlpLnRhcmdldFBhY2thZ2UsIC0xLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdXNlcklkLAorICAgICAgICAgICAgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChpaS50YXJnZXRQYWNrYWdlLCAtMSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCB1c2VySWQsCiAgICAgICAgICAgICAgICAgICAgICJzdGFydCBpbnN0ciIpOwogICAgICAgICAgICAgUHJvY2Vzc1JlY29yZCBhcHAgPSBhZGRBcHBMb2NrZWQoYWksIGZhbHNlKTsKICAgICAgICAgICAgIGFwcC5pbnN0cnVtZW50YXRpb25DbGFzcyA9IGNsYXNzTmFtZTsKQEAgLTEzODU5LDcgKzEzOTI3LDcgQEAKICAgICAgICAgYXBwLmluc3RydW1lbnRhdGlvblByb2ZpbGVGaWxlID0gbnVsbDsKICAgICAgICAgYXBwLmluc3RydW1lbnRhdGlvbkFyZ3VtZW50cyA9IG51bGw7CiAKLSAgICAgICAgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChhcHAuaW5mby5wYWNrYWdlTmFtZSwgLTEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgYXBwLnVzZXJJZCwKKyAgICAgICAgZm9yY2VTdG9wUGFja2FnZUxvY2tlZChhcHAuaW5mby5wYWNrYWdlTmFtZSwgLTEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGFwcC51c2VySWQsCiAgICAgICAgICAgICAgICAgImZpbmlzaGVkIGluc3QiKTsKICAgICB9CiAKQEAgLTE1MTcyLDE2ICsxNTI0MCwxMyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGFwcC5jdXJBZGogIT0gYXBwLnNldEFkaikgewotICAgICAgICAgICAgaWYgKFByb2Nlc3Muc2V0T29tQWRqKGFwcC5waWQsIGFwcC5jdXJBZGopKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHX1NXSVRDSCB8fCBERUJVR19PT01fQURKKSBTbG9nLnYoCi0gICAgICAgICAgICAgICAgICAgIFRBRywgIlNldCAiICsgYXBwLnBpZCArICIgIiArIGFwcC5wcm9jZXNzTmFtZSArCi0gICAgICAgICAgICAgICAgICAgICIgYWRqICIgKyBhcHAuY3VyQWRqICsgIjogIiArIGFwcC5hZGpUeXBlKTsKLSAgICAgICAgICAgICAgICBhcHAuc2V0QWRqID0gYXBwLmN1ckFkajsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJGYWlsZWQgc2V0dGluZyBvb20gYWRqIG9mICIgKyBhcHAgKyAiIHRvICIgKyBhcHAuY3VyQWRqKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFByb2Nlc3NMaXN0LnNldE9vbUFkaihhcHAucGlkLCBhcHAuY3VyQWRqKTsKKyAgICAgICAgICAgIGlmIChERUJVR19TV0lUQ0ggfHwgREVCVUdfT09NX0FESikgU2xvZy52KAorICAgICAgICAgICAgICAgIFRBRywgIlNldCAiICsgYXBwLnBpZCArICIgIiArIGFwcC5wcm9jZXNzTmFtZSArCisgICAgICAgICAgICAgICAgIiBhZGogIiArIGFwcC5jdXJBZGogKyAiOiAiICsgYXBwLmFkalR5cGUpOworICAgICAgICAgICAgYXBwLnNldEFkaiA9IGFwcC5jdXJBZGo7CiAgICAgICAgIH0KKwogICAgICAgICBpZiAoYXBwLnNldFNjaGVkR3JvdXAgIT0gYXBwLmN1clNjaGVkR3JvdXApIHsKICAgICAgICAgICAgIGFwcC5zZXRTY2hlZEdyb3VwID0gYXBwLmN1clNjaGVkR3JvdXA7CiAgICAgICAgICAgICBpZiAoREVCVUdfU1dJVENIIHx8IERFQlVHX09PTV9BREopIFNsb2cudihUQUcsCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVJlY29yZC5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlSZWNvcmQuamF2YQppbmRleCA0OWYyOWZlLi44ZTg1OTE0IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVJlY29yZC5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5UmVjb3JkLmphdmEKQEAgLTE0Myw2ICsxNDMsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGluSGlzdG9yeTsgIC8vIGFyZSB3ZSBpbiB0aGUgaGlzdG9yeSBzdGFjaz8KICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrU3VwZXJ2aXNvciBtU3RhY2tTdXBlcnZpc29yOworICAgIGJvb2xlYW4gbVN0YXJ0aW5nV2luZG93U2hvd24gPSBmYWxzZTsKIAogICAgIHZvaWQgZHVtcChQcmludFdyaXRlciBwdywgU3RyaW5nIHByZWZpeCkgewogICAgICAgICBmaW5hbCBsb25nIG5vdyA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOwpAQCAtNzIyLDYgKzcyMywxMCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgQWN0aXZpdHlPcHRpb25zIGdldE9wdGlvbnNGb3JUYXJnZXRBY3Rpdml0eUxvY2tlZCgpIHsKKyAgICAgICAgcmV0dXJuIHBlbmRpbmdPcHRpb25zICE9IG51bGwgPyBwZW5kaW5nT3B0aW9ucy5mb3JUYXJnZXRBY3Rpdml0eSgpIDogbnVsbDsKKyAgICB9CisKICAgICB2b2lkIGNsZWFyT3B0aW9uc0xvY2tlZCgpIHsKICAgICAgICAgaWYgKHBlbmRpbmdPcHRpb25zICE9IG51bGwpIHsKICAgICAgICAgICAgIHBlbmRpbmdPcHRpb25zLmFib3J0KCk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVJlc3VsdC5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlSZXN1bHQuamF2YQppbmRleCA2ZDViZGViLi4zOTU5MThlIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVJlc3VsdC5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5UmVzdWx0LmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuYXBwLlJlc3VsdEluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIAogLyoqCiAgKiBQZW5kaW5nIHJlc3VsdCBpbmZvcm1hdGlvbiB0byBzZW5kIGJhY2sgdG8gYW4gYWN0aXZpdHkuCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YWNrLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YWNrLmphdmEKaW5kZXggMGUxNTI2MTEuLjE0ZDFkMTMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5U3RhY2suamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YWNrLmphdmEKQEAgLTM2LDYgKzM2LDggQEAKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLkRFQlVHX1NUQVRFUzsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLkhPTUVfU1RBQ0tfSUQ7CiAKK2ltcG9ydCBhbmRyb2lkLm9zLlRyYWNlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuQmF0dGVyeVN0YXRzSW1wbDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLk9iamVjdHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLldhdGNoZG9nOwpAQCAtMTIxLDggKzEyMyw3IEBACiAgICAgLy8gY29udmVydFRvVHJhbnNsdWNlbnQoKS4KICAgICBzdGF0aWMgZmluYWwgbG9uZyBUUkFOU0xVQ0VOVF9DT05WRVJTSU9OX1RJTUVPVVQgPSAyMDAwOwogCi0gICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gU0NSRUVOU0hPVF9GT1JDRV81NjUgPSBBY3Rpdml0eU1hbmFnZXIKLSAgICAgICAgICAgIC5pc0xvd1JhbURldmljZVN0YXRpYygpID8gdHJ1ZSA6IGZhbHNlOworICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIFNDUkVFTlNIT1RfRk9SQ0VfNTY1ID0gQWN0aXZpdHlNYW5hZ2VyLmlzTG93UmFtRGV2aWNlU3RhdGljKCk7CiAKICAgICBlbnVtIEFjdGl2aXR5U3RhdGUgewogICAgICAgICBJTklUSUFMSVpJTkcsCkBAIC0zOTgsOCArMzk5LDkgQEAKICAgICAgICAgLy8gYmUgc2ltcGxpZmllZCBvbmNlIHdlIHN0b3Agc3RvcmluZyB0YXNrcyB3aXRoIGVtcHR5IG1BY3Rpdml0aWVzIGxpc3RzLgogICAgICAgICBmb3IgKGludCB0YXNrTmR4ID0gbVRhc2tIaXN0b3J5LnNpemUoKSAtIDE7IHRhc2tOZHggPj0gMDsgLS10YXNrTmR4KSB7CiAgICAgICAgICAgICBBcnJheUxpc3Q8QWN0aXZpdHlSZWNvcmQ+IGFjdGl2aXRpZXMgPSBtVGFza0hpc3RvcnkuZ2V0KHRhc2tOZHgpLm1BY3Rpdml0aWVzOwotICAgICAgICAgICAgZm9yIChpbnQgYWN0aXZpdHlOZHggPSBhY3Rpdml0aWVzLnNpemUoKSAtIDE7IGFjdGl2aXR5TmR4ID49IDA7IC0tYWN0aXZpdHlOZHgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYWN0aXZpdGllcy5nZXQoYWN0aXZpdHlOZHgpOworICAgICAgICAgICAgZmluYWwgaW50IHRvcEFjdGl2aXR5TmR4ID0gYWN0aXZpdGllcy5zaXplKCkgLSAxOworICAgICAgICAgICAgaWYgKHRvcEFjdGl2aXR5TmR4ID49IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWN0aXZpdGllcy5nZXQodG9wQWN0aXZpdHlOZHgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNDM2LDI1ICs0MzgsNiBAQAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKLSAgICBib29sZWFuIGNvbnRhaW5zQXBwKFByb2Nlc3NSZWNvcmQgYXBwKSB7Ci0gICAgICAgIGlmIChhcHAgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IHRhc2tOZHggPSBtVGFza0hpc3Rvcnkuc2l6ZSgpIC0gMTsgdGFza05keCA+PSAwOyAtLXRhc2tOZHgpIHsKLSAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxBY3Rpdml0eVJlY29yZD4gYWN0aXZpdGllcyA9IG1UYXNrSGlzdG9yeS5nZXQodGFza05keCkubUFjdGl2aXRpZXM7Ci0gICAgICAgICAgICBmb3IgKGludCBhY3Rpdml0eU5keCA9IGFjdGl2aXRpZXMuc2l6ZSgpIC0gMTsgYWN0aXZpdHlOZHggPj0gMDsgLS1hY3Rpdml0eU5keCkgewotICAgICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHIgPSBhY3Rpdml0aWVzLmdldChhY3Rpdml0eU5keCk7Ci0gICAgICAgICAgICAgICAgaWYgKHIuZmluaXNoaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoci5hcHAgPT0gYXBwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgZmluYWwgYm9vbGVhbiB1cGRhdGVMUlVMaXN0TG9ja2VkKEFjdGl2aXR5UmVjb3JkIHIpIHsKICAgICAgICAgZmluYWwgYm9vbGVhbiBoYWRpdCA9IG1MUlVBY3Rpdml0aWVzLnJlbW92ZShyKTsKICAgICAgICAgbUxSVUFjdGl2aXRpZXMuYWRkKHIpOwpAQCAtMTA5Nyw3ICsxMDgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIuc2V0QXBwVmlzaWJpbGl0eShyLmFwcFRva2VuLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgIT0gc3RhcnRpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5zdGFydFNwZWNpZmljQWN0aXZpdHlMb2NrZWQociwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5zdGFydFNwZWNpZmljQWN0aXZpdHlMb2NrZWQociwgZmFsc2UsIGZhbHNlLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTEyMzQsNiArMTIxNywzMiBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqIElmIGFueSBhY3Rpdml0aWVzIGJlbG93IHRoZSB0b3AgcnVubmluZyBvbmUgYXJlIGluIHRoZSBJTklUSUFMSVpJTkcgc3RhdGUgYW5kIHRoZXkgaGF2ZSBhCisgICAgICogc3RhcnRpbmcgd2luZG93IGRpc3BsYXllZCB0aGVuIHJlbW92ZSB0aGF0IHN0YXJ0aW5nIHdpbmRvdy4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgYWN0aXZpdHkKKyAgICAgKiBpbiB0aGlzIHN0YXRlIHdpbGwgbmV2ZXIgcmVzdW1lZCBpbiB3aGljaCBjYXNlIHRoYXQgc3RhcnRpbmcgd2luZG93IHdpbGwgYmUgb3JwaGFuZWQuICovCisgICAgdm9pZCBjYW5jZWxJbml0aWFsaXppbmdBY3Rpdml0aWVzKCkgeworICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCB0b3BBY3Rpdml0eSA9IHRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZChudWxsKTsKKyAgICAgICAgYm9vbGVhbiBhYm92ZVRvcCA9IHRydWU7CisgICAgICAgIGZvciAoaW50IHRhc2tOZHggPSBtVGFza0hpc3Rvcnkuc2l6ZSgpIC0gMTsgdGFza05keCA+PSAwOyAtLXRhc2tOZHgpIHsKKyAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxBY3Rpdml0eVJlY29yZD4gYWN0aXZpdGllcyA9IG1UYXNrSGlzdG9yeS5nZXQodGFza05keCkubUFjdGl2aXRpZXM7CisgICAgICAgICAgICBmb3IgKGludCBhY3Rpdml0eU5keCA9IGFjdGl2aXRpZXMuc2l6ZSgpIC0gMTsgYWN0aXZpdHlOZHggPj0gMDsgLS1hY3Rpdml0eU5keCkgeworICAgICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHIgPSBhY3Rpdml0aWVzLmdldChhY3Rpdml0eU5keCk7CisgICAgICAgICAgICAgICAgaWYgKGFib3ZlVG9wKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyID09IHRvcEFjdGl2aXR5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhYm92ZVRvcCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChyLnN0YXRlID09IEFjdGl2aXR5U3RhdGUuSU5JVElBTElaSU5HICYmIHIubVN0YXJ0aW5nV2luZG93U2hvd24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1ZJU0JJTElUWSkgU2xvZy53KFRBRywgIkZvdW5kIG9ycGhhbmVkIHN0YXJ0aW5nIHdpbmRvdyAiICsgcik7CisgICAgICAgICAgICAgICAgICAgIHIubVN0YXJ0aW5nV2luZG93U2hvd24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIucmVtb3ZlQXBwU3RhcnRpbmdXaW5kb3coci5hcHBUb2tlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogRW5zdXJlIHRoYXQgdGhlIHRvcCBhY3Rpdml0eSBpbiB0aGUgc3RhY2sgaXMgcmVzdW1lZC4KICAgICAgKgpAQCAtMTI1MCw2ICsxMjU5LDggQEAKICAgICBmaW5hbCBib29sZWFuIHJlc3VtZVRvcEFjdGl2aXR5TG9ja2VkKEFjdGl2aXR5UmVjb3JkIHByZXYsIEJ1bmRsZSBvcHRpb25zKSB7CiAgICAgICAgIGlmIChBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLkRFQlVHX0xPQ0tTQ1JFRU4pIG1TZXJ2aWNlLmxvZ0xvY2tTY3JlZW4oIiIpOwogCisgICAgICAgIGNhbmNlbEluaXRpYWxpemluZ0FjdGl2aXRpZXMoKTsKKwogICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBhY3Rpdml0eSB0aGF0IGlzIG5vdCBmaW5pc2hpbmcuCiAgICAgICAgIEFjdGl2aXR5UmVjb3JkIG5leHQgPSB0b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQobnVsbCk7CiAKQEAgLTE1MDIsNyArMTUxMywxMyBAQAogICAgICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLnByZXBhcmVBcHBUcmFuc2l0aW9uKEFwcFRyYW5zaXRpb24uVFJBTlNJVF9BQ1RJVklUWV9PUEVOLCBmYWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICBCdW5kbGUgcmVzdW1lQW5pbU9wdGlvbnMgPSBudWxsOwogICAgICAgICBpZiAoYW5pbSkgeworICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zIG9wdHMgPSBuZXh0LmdldE9wdGlvbnNGb3JUYXJnZXRBY3Rpdml0eUxvY2tlZCgpOworICAgICAgICAgICAgaWYgKG9wdHMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJlc3VtZUFuaW1PcHRpb25zID0gb3B0cy50b0J1bmRsZSgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbmV4dC5hcHBseU9wdGlvbnNMb2NrZWQoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG5leHQuY2xlYXJPcHRpb25zTG9ja2VkKCk7CkBAIC0xNTk1LDcgKzE2MTIsNyBAQAogICAgICAgICAgICAgICAgIG5leHQuYXBwLnBlbmRpbmdVaUNsZWFuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBuZXh0LmFwcC5mb3JjZVByb2Nlc3NTdGF0ZVVwVG8oQWN0aXZpdHlNYW5hZ2VyLlBST0NFU1NfU1RBVEVfVE9QKTsKICAgICAgICAgICAgICAgICBuZXh0LmFwcC50aHJlYWQuc2NoZWR1bGVSZXN1bWVBY3Rpdml0eShuZXh0LmFwcFRva2VuLCBuZXh0LmFwcC5yZXBQcm9jU3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZS5pc05leHRUcmFuc2l0aW9uRm9yd2FyZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlLmlzTmV4dFRyYW5zaXRpb25Gb3J3YXJkKCksIHJlc3VtZUFuaW1PcHRpb25zKTsKIAogICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IuY2hlY2tSZWFkeUZvclNsZWVwTG9ja2VkKCk7CiAKQEAgLTE2MTksNyArMTYzNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5ub25Mb2NhbGl6ZWRMYWJlbCwgbmV4dC5sYWJlbFJlcywgbmV4dC5pY29uLCBuZXh0LmxvZ28sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC53aW5kb3dGbGFncywgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3Iuc3RhcnRTcGVjaWZpY0FjdGl2aXR5TG9ja2VkKG5leHQsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0U3BlY2lmaWNBY3Rpdml0eUxvY2tlZChuZXh0LCB0cnVlLCBmYWxzZSwgcmVzdW1lQW5pbU9wdGlvbnMpOwogICAgICAgICAgICAgICAgIGlmIChERUJVR19TVEFDSykgbVN0YWNrU3VwZXJ2aXNvci52YWxpZGF0ZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTE2NTcsNyArMTY3NCw3IEBACiAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1NXSVRDSCkgU2xvZy52KFRBRywgIlJlc3RhcnRpbmc6ICIgKyBuZXh0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChERUJVR19TVEFURVMpIFNsb2cuZChUQUcsICJyZXN1bWVUb3BBY3Rpdml0eUxvY2tlZDogUmVzdGFydGluZyAiICsgbmV4dCk7Ci0gICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0U3BlY2lmaWNBY3Rpdml0eUxvY2tlZChuZXh0LCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3Iuc3RhcnRTcGVjaWZpY0FjdGl2aXR5TG9ja2VkKG5leHQsIHRydWUsIHRydWUsIHJlc3VtZUFuaW1PcHRpb25zKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChERUJVR19TVEFDSykgbVN0YWNrU3VwZXJ2aXNvci52YWxpZGF0ZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKQEAgLTE3NTIsNiArMTc2OSwyMSBAQAogCiAgICAgICAgIHIucHV0SW5IaXN0b3J5KCk7CiAgICAgICAgIHIuZnJvbnRPZlRhc2sgPSBuZXdUYXNrOworICAgICAgICBpZiAoIXIuZnJvbnRPZlRhc2spIHsKKyAgICAgICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGN1cnJlbnQgZnJvbnRPZlRhc2sgYWN0aXZpdHkgaXMgZmluaXNoaW5nLiBDaGVjayBmb3IgdGhhdC4KKyAgICAgICAgICAgIEFycmF5TGlzdDxBY3Rpdml0eVJlY29yZD4gYWN0aXZpdGllcyA9IHRhc2subUFjdGl2aXRpZXM7CisgICAgICAgICAgICBmb3IgKGludCBhY3Rpdml0eU5keCA9IDA7IGFjdGl2aXR5TmR4IDwgYWN0aXZpdGllcy5zaXplKCk7ICsrYWN0aXZpdHlOZHgpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCBhY3Rpdml0eSA9IGFjdGl2aXRpZXMuZ2V0KGFjdGl2aXR5TmR4KTsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZpdHkuZmluaXNoaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZpdHkgPT0gcikgeworICAgICAgICAgICAgICAgICAgICAvLyBBbGwgYWN0aXZpdGllcyBiZWZvcmUgciBhcmUgZmluaXNoaW5nLgorICAgICAgICAgICAgICAgICAgICByLmZyb250T2ZUYXNrID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgaWYgKCFpc0hvbWVTdGFjaygpIHx8IG51bUFjdGl2aXRpZXMoKSA+IDApIHsKICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gc2hvdyB0aGUgc3RhcnRpbmcgcHJldmlldyB3aW5kb3cgaWYgd2UgYXJlCiAgICAgICAgICAgICAvLyBzd2l0Y2hpbmcgdG8gYSBuZXcgdGFzaywgb3IgdGhlIG5leHQgYWN0aXZpdHkncyBwcm9jZXNzIGlzCkBAIC0xODE2LDYgKzE4NDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmluZm8uYXBwbGljYXRpb25JbmZvKSwgci5ub25Mb2NhbGl6ZWRMYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHIubGFiZWxSZXMsIHIuaWNvbiwgci5sb2dvLCByLndpbmRvd0ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJldiAhPSBudWxsID8gcHJldi5hcHBUb2tlbiA6IG51bGwsIHNob3dTdGFydGluZ0ljb24pOworICAgICAgICAgICAgICAgIHIubVN0YXJ0aW5nV2luZG93U2hvd24gPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgYWN0aXZpdHksIGRvbid0IGRvIGFueSBmYW5jeSBhbmltYXRpb25zLApkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5U3RhY2tTdXBlcnZpc29yLmphdmEKaW5kZXggNGE0NjI4OC4uMDQ2MTdhZiAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5qYXZhCkBAIC0zNCw3ICszNCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSW5mbzsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU9wdGlvbnM7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQXBwR2xvYmFsczsKIGltcG9ydCBhbmRyb2lkLmFwcC5JQWN0aXZpdHlNYW5hZ2VyOwpAQCAtNzEsMTEgKzcwLDExIEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUludEFycmF5OwogCi1pbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLkhlYXZ5V2VpZ2h0U3dpdGNoZXJBY3Rpdml0eTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5UcmFuc2ZlclBpcGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlclNlcnZpY2UuUGVuZGluZ0FjdGl2aXR5TGF1bmNoOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrLkFjdGl2aXR5U3RhdGU7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLndtLlN0YWNrQm94OwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyU2VydmljZTsKIAogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CkBAIC0zODAsNyArMzc5LDcgQEAKICAgICAgICAgICAgICAgICBpZiAoaHIuYXBwID09IG51bGwgJiYgYXBwLnVpZCA9PSBoci5pbmZvLmFwcGxpY2F0aW9uSW5mby51aWQKICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByb2Nlc3NOYW1lLmVxdWFscyhoci5wcm9jZXNzTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFsU3RhcnRBY3Rpdml0eUxvY2tlZChociwgYXBwLCB0cnVlLCB0cnVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWxTdGFydEFjdGl2aXR5TG9ja2VkKGhyLCBhcHAsIHRydWUsIHRydWUsIG51bGwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKQEAgLTg2OSw3ICs4NjgsNyBAQAogICAgIH0KIAogICAgIGZpbmFsIGJvb2xlYW4gcmVhbFN0YXJ0QWN0aXZpdHlMb2NrZWQoQWN0aXZpdHlSZWNvcmQgciwKLSAgICAgICAgICAgIFByb2Nlc3NSZWNvcmQgYXBwLCBib29sZWFuIGFuZFJlc3VtZSwgYm9vbGVhbiBjaGVja0NvbmZpZykKKyAgICAgICAgICAgIFByb2Nlc3NSZWNvcmQgYXBwLCBib29sZWFuIGFuZFJlc3VtZSwgYm9vbGVhbiBjaGVja0NvbmZpZywgQnVuZGxlIHJlc3VtZUFyZ3MpCiAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKIAogICAgICAgICByLnN0YXJ0RnJlZXppbmdTY3JlZW5Mb2NrZWQoYXBwLCAwKTsKQEAgLTk2MSwxMyArOTYwLDE0IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGFwcC5mb3JjZVByb2Nlc3NTdGF0ZVVwVG8oQWN0aXZpdHlNYW5hZ2VyLlBST0NFU1NfU1RBVEVfVE9QKTsKICAgICAgICAgICAgIGFwcC50aHJlYWQuc2NoZWR1bGVMYXVuY2hBY3Rpdml0eShuZXcgSW50ZW50KHIuaW50ZW50KSwgci5hcHBUb2tlbiwKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmlkZW50aXR5SGFzaENvZGUociksIHIuaW5mbywKICAgICAgICAgICAgICAgICAgICAgbmV3IENvbmZpZ3VyYXRpb24obVNlcnZpY2UubUNvbmZpZ3VyYXRpb24pLCByLmNvbXBhdCwKICAgICAgICAgICAgICAgICAgICAgYXBwLnJlcFByb2NTdGF0ZSwgci5pY2ljbGUsIHJlc3VsdHMsIG5ld0ludGVudHMsICFhbmRSZXN1bWUsCiAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlLmlzTmV4dFRyYW5zaXRpb25Gb3J3YXJkKCksIHByb2ZpbGVGaWxlLCBwcm9maWxlRmQsCi0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGVBdXRvU3RvcCk7CisgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVBdXRvU3RvcCwgcmVzdW1lQXJncyk7CiAKICAgICAgICAgICAgIGlmICgoYXBwLmluZm8uZmxhZ3MmQXBwbGljYXRpb25JbmZvLkZMQUdfQ0FOVF9TQVZFX1NUQVRFKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtYXkgYmUgYSBoZWF2eS13ZWlnaHQgcHJvY2VzcyEgIE5vdGUgdGhhdCB0aGUgcGFja2FnZQpAQCAtMTA0MSw3ICsxMDQxLDcgQEAKICAgICB9CiAKICAgICB2b2lkIHN0YXJ0U3BlY2lmaWNBY3Rpdml0eUxvY2tlZChBY3Rpdml0eVJlY29yZCByLAotICAgICAgICAgICAgYm9vbGVhbiBhbmRSZXN1bWUsIGJvb2xlYW4gY2hlY2tDb25maWcpIHsKKyAgICAgICAgICAgIGJvb2xlYW4gYW5kUmVzdW1lLCBib29sZWFuIGNoZWNrQ29uZmlnLCBCdW5kbGUgcmVzdW1lQXJncykgewogICAgICAgICAvLyBJcyB0aGlzIGFjdGl2aXR5J3MgYXBwbGljYXRpb24gYWxyZWFkeSBydW5uaW5nPwogICAgICAgICBQcm9jZXNzUmVjb3JkIGFwcCA9IG1TZXJ2aWNlLmdldFByb2Nlc3NSZWNvcmRMb2NrZWQoci5wcm9jZXNzTmFtZSwKICAgICAgICAgICAgICAgICByLmluZm8uYXBwbGljYXRpb25JbmZvLnVpZCwgdHJ1ZSk7CkBAIC0xMDU4LDcgKzEwNTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAvLyBzZXBhcmF0ZSBhcGsgaW4gdGhlIHByb2Nlc3MuCiAgICAgICAgICAgICAgICAgICAgIGFwcC5hZGRQYWNrYWdlKHIuaW5mby5wYWNrYWdlTmFtZSwgbVNlcnZpY2UubVByb2Nlc3NTdGF0cyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlYWxTdGFydEFjdGl2aXR5TG9ja2VkKHIsIGFwcCwgYW5kUmVzdW1lLCBjaGVja0NvbmZpZyk7CisgICAgICAgICAgICAgICAgcmVhbFN0YXJ0QWN0aXZpdHlMb2NrZWQociwgYXBwLCBhbmRSZXN1bWUsIGNoZWNrQ29uZmlnLCByZXN1bWVBcmdzKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJFeGNlcHRpb24gd2hlbiBzdGFydGluZyBhY3Rpdml0eSAiCkBAIC0xMjg5LDcgKzEyODksOCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBUaW1lIHRvIGNyZWF0ZSB0aGUgZmlyc3QgYXBwIHN0YWNrIGZvciB0aGlzIHVzZXIuCi0gICAgICAgICAgICBpbnQgc3RhY2tJZCA9IG1TZXJ2aWNlLmNyZWF0ZVN0YWNrKC0xKTsKKyAgICAgICAgICAgIGludCBzdGFja0lkID0KKyAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2UuY3JlYXRlU3RhY2soLTEsIEhPTUVfU1RBQ0tfSUQsIFN0YWNrQm94LlRBU0tfU1RBQ0tfR09FU19PVkVSLCAxLjBmKTsKICAgICAgICAgICAgIGlmIChERUJVR19GT0NVUyB8fCBERUJVR19TVEFDSykgU2xvZy5kKFRBRywgImFkanVzdFN0YWNrRm9jdXM6IE5ldyBzdGFjayByPSIgKyByICsKICAgICAgICAgICAgICAgICAgICAgIiBzdGFja0lkPSIgKyBzdGFja0lkKTsKICAgICAgICAgICAgIG1Gb2N1c2VkU3RhY2sgPSBnZXRTdGFjayhzdGFja0lkKTsKQEAgLTI2NDQsNDMgKzI2NDUsNCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotCi0gICAgU3RhY2tJbmZvIGdldFN0YWNrSW5mbyhBY3Rpdml0eVN0YWNrIHN0YWNrKSB7Ci0gICAgICAgIFN0YWNrSW5mbyBpbmZvID0gbmV3IFN0YWNrSW5mbygpOwotICAgICAgICBtV2luZG93TWFuYWdlci5nZXRTdGFja0JvdW5kcyhzdGFjay5tU3RhY2tJZCwgaW5mby5ib3VuZHMpOwotICAgICAgICBpbmZvLmRpc3BsYXlJZCA9IERpc3BsYXkuREVGQVVMVF9ESVNQTEFZOwotICAgICAgICBpbmZvLnN0YWNrSWQgPSBzdGFjay5tU3RhY2tJZDsKLQotICAgICAgICBBcnJheUxpc3Q8VGFza1JlY29yZD4gdGFza3MgPSBzdGFjay5nZXRBbGxUYXNrcygpOwotICAgICAgICBmaW5hbCBpbnQgbnVtVGFza3MgPSB0YXNrcy5zaXplKCk7Ci0gICAgICAgIGludFtdIHRhc2tJZHMgPSBuZXcgaW50W251bVRhc2tzXTsKLSAgICAgICAgU3RyaW5nW10gdGFza05hbWVzID0gbmV3IFN0cmluZ1tudW1UYXNrc107Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGFza3M7ICsraSkgewotICAgICAgICAgICAgZmluYWwgVGFza1JlY29yZCB0YXNrID0gdGFza3MuZ2V0KGkpOwotICAgICAgICAgICAgdGFza0lkc1tpXSA9IHRhc2sudGFza0lkOwotICAgICAgICAgICAgdGFza05hbWVzW2ldID0gdGFzay5vcmlnQWN0aXZpdHkgIT0gbnVsbCA/IHRhc2sub3JpZ0FjdGl2aXR5LmZsYXR0ZW5Ub1N0cmluZygpCi0gICAgICAgICAgICAgICAgICAgIDogdGFzay5yZWFsQWN0aXZpdHkgIT0gbnVsbCA/IHRhc2sucmVhbEFjdGl2aXR5LmZsYXR0ZW5Ub1N0cmluZygpCi0gICAgICAgICAgICAgICAgICAgIDogdGFzay5nZXRUb3BBY3Rpdml0eSgpICE9IG51bGwgPyB0YXNrLmdldFRvcEFjdGl2aXR5KCkucGFja2FnZU5hbWUKLSAgICAgICAgICAgICAgICAgICAgOiAidW5rbm93biI7Ci0gICAgICAgIH0KLSAgICAgICAgaW5mby50YXNrSWRzID0gdGFza0lkczsKLSAgICAgICAgaW5mby50YXNrTmFtZXMgPSB0YXNrTmFtZXM7Ci0gICAgICAgIHJldHVybiBpbmZvOwotICAgIH0KLQotICAgIFN0YWNrSW5mbyBnZXRTdGFja0luZm8oaW50IHN0YWNrSWQpIHsKLSAgICAgICAgQWN0aXZpdHlTdGFjayBzdGFjayA9IGdldFN0YWNrKHN0YWNrSWQpOwotICAgICAgICBpZiAoc3RhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGdldFN0YWNrSW5mbyhzdGFjayk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQXJyYXlMaXN0PFN0YWNrSW5mbz4gZ2V0QWxsU3RhY2tJbmZvcygpIHsKLSAgICAgICAgQXJyYXlMaXN0PFN0YWNrSW5mbz4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RhY2tJbmZvPigpOwotICAgICAgICBmb3IgKGludCBuZHggPSBtU3RhY2tzLnNpemUoKSAtIDE7IG5keCA+PSAwOyAtLW5keCkgewotICAgICAgICAgICAgbGlzdC5hZGQoZ2V0U3RhY2tJbmZvKG1TdGFja3MuZ2V0KG5keCkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Ccm9hZGNhc3RRdWV1ZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQnJvYWRjYXN0UXVldWUuamF2YQppbmRleCBiZmI2NjdmLi5kMGRkNzVkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Ccm9hZGNhc3RRdWV1ZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0Jyb2FkY2FzdFF1ZXVlLmphdmEKQEAgLTI3LDcgKzI3LDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSUludGVudFJlY2VpdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mbzsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbzsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0NvbnRlbnRQcm92aWRlclJlY29yZC5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQ29udGVudFByb3ZpZGVyUmVjb3JkLmphdmEKaW5kZXggNjQ2YjdkMi4uZmYyMjc2NCAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQ29udGVudFByb3ZpZGVyUmVjb3JkLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQ29udGVudFByb3ZpZGVyUmVjb3JkLmphdmEKQEAgLTMxLDcgKzMxLDYgQEAKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiAKIGZpbmFsIGNsYXNzIENvbnRlbnRQcm92aWRlclJlY29yZCB7CiAgICAgZmluYWwgQWN0aXZpdHlNYW5hZ2VyU2VydmljZSBzZXJ2aWNlOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vSW50ZW50QmluZFJlY29yZC5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vSW50ZW50QmluZFJlY29yZC5qYXZhCmluZGV4IDIxY2YyNjYuLmJhNjAxMGEgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0ludGVudEJpbmRSZWNvcmQuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9JbnRlbnRCaW5kUmVjb3JkLmphdmEKQEAgLTIyLDggKzIyLDYgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlNYXA7CiAKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIAogLyoqCiAgKiBBIHBhcnRpY3VsYXIgSW50ZW50IHRoYXQgaGFzIGJlZW4gYm91bmQgdG8gYSBTZXJ2aWNlLgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vUHJvY2Vzc0xpc3QuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1Byb2Nlc3NMaXN0LmphdmEKaW5kZXggZDM3NzdjNy4uNzU1YTIzNzIyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Qcm9jZXNzTGlzdC5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1Byb2Nlc3NMaXN0LmphdmEKQEAgLTE2LDggKzE2LDkgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIuYW07CiAKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuTWVtSW5mb1JlYWRlcjsKQEAgLTI2LDYgKzI3LDggQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50OwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Mb2NhbFNvY2tldEFkZHJlc3M7CitpbXBvcnQgYW5kcm9pZC5uZXQuTG9jYWxTb2NrZXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CiAKQEAgLTE0MSw2ICsxNDQsMTYgQEAKICAgICAvLyBUaHJlc2hvbGQgb2YgbnVtYmVyIG9mIGNhY2hlZCtlbXB0eSB3aGVyZSB3ZSBjb25zaWRlciBtZW1vcnkgY3JpdGljYWwuCiAgICAgc3RhdGljIGZpbmFsIGludCBUUklNX0xPV19USFJFU0hPTEQgPSA1OwogCisgICAgLy8gTG93IE1lbW9yeSBLaWxsZXIgRGFlbW9uIGNvbW1hbmQgY29kZXMuCisgICAgLy8gVGhlc2UgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgaW4gbG1rZC5jCisgICAgLy8KKyAgICAvLyBMTUtfVEFSR0VUIDxtaW5mcmVlPiA8bWlua2lsbHByaW8+IC4uLiAodXAgdG8gNiBwYWlycykKKyAgICAvLyBMTUtfUFJPQ1BSSU8gPHBpZD4gPHByaW8+CisgICAgLy8gTE1LX1BST0NSRU1PVkUgPHBpZD4KKyAgICBzdGF0aWMgZmluYWwgYnl0ZSBMTUtfVEFSR0VUID0gMDsKKyAgICBzdGF0aWMgZmluYWwgYnl0ZSBMTUtfUFJPQ1BSSU8gPSAxOworICAgIHN0YXRpYyBmaW5hbCBieXRlIExNS19QUk9DUkVNT1ZFID0gMjsKKwogICAgIC8vIFRoZXNlIGFyZSB0aGUgdmFyaW91cyBpbnRlcmVzdGluZyBtZW1vcnkgbGV2ZWxzIHRoYXQgd2Ugd2lsbCBnaXZlIHRvCiAgICAgLy8gdGhlIE9PTSBraWxsZXIuICBOb3RlIHRoYXQgdGhlIE9PTSBraWxsZXIgb25seSBzdXBwb3J0cyA2IHNsb3RzLCBzbyB3ZQogICAgIC8vIGNhbid0IGdpdmUgaXQgYSBkaWZmZXJlbnQgdmFsdWUgZm9yIGV2ZXJ5IHBvc3NpYmxlIGtpbmQgb2YgcHJvY2Vzcy4KQEAgLTE1MCwxOCArMTYzLDE4IEBACiAgICAgfTsKICAgICAvLyBUaGVzZSBhcmUgdGhlIGxvdy1lbmQgT09NIGxldmVsIGxpbWl0cy4gIFRoaXMgaXMgYXBwcm9wcmlhdGUgZm9yIGFuCiAgICAgLy8gSFZHQSBvciBzbWFsbGVyIHBob25lIHdpdGggbGVzcyB0aGFuIDUxMk1CLiAgVmFsdWVzIGFyZSBpbiBLQi4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmdbXSBtT29tTWluRnJlZUxvdyA9IG5ldyBsb25nW10geworICAgIHByaXZhdGUgZmluYWwgaW50W10gbU9vbU1pbkZyZWVMb3cgPSBuZXcgaW50W10gewogICAgICAgICAgICAgODE5MiwgMTIyODgsIDE2Mzg0LAogICAgICAgICAgICAgMjQ1NzYsIDI4NjcyLCAzMjc2OAogICAgIH07CiAgICAgLy8gVGhlc2UgYXJlIHRoZSBoaWdoLWVuZCBPT00gbGV2ZWwgbGltaXRzLiAgVGhpcyBpcyBhcHByb3ByaWF0ZSBmb3IgYQogICAgIC8vIDEyODB4ODAwIG9yIGxhcmdlciBzY3JlZW4gd2l0aCBhcm91bmQgMUdCIFJBTS4gIFZhbHVlcyBhcmUgaW4gS0IuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nW10gbU9vbU1pbkZyZWVIaWdoID0gbmV3IGxvbmdbXSB7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnRbXSBtT29tTWluRnJlZUhpZ2ggPSBuZXcgaW50W10gewogICAgICAgICAgICAgNDkxNTIsIDYxNDQwLCA3MzcyOCwKICAgICAgICAgICAgIDg2MDE2LCA5ODMwNCwgMTIyODgwCiAgICAgfTsKICAgICAvLyBUaGUgYWN0dWFsIE9PTSBraWxsZXIgbWVtb3J5IGxldmVscyB3ZSBhcmUgdXNpbmcuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nW10gbU9vbU1pbkZyZWUgPSBuZXcgbG9uZ1ttT29tQWRqLmxlbmd0aF07CisgICAgcHJpdmF0ZSBmaW5hbCBpbnRbXSBtT29tTWluRnJlZSA9IG5ldyBpbnRbbU9vbUFkai5sZW5ndGhdOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBsb25nIG1Ub3RhbE1lbU1iOwogCkBAIC0xNjksNiArMTgyLDkgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBtSGF2ZURpc3BsYXlTaXplOwogCisgICAgcHJpdmF0ZSBzdGF0aWMgTG9jYWxTb2NrZXQgc0xta2RTb2NrZXQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgT3V0cHV0U3RyZWFtIHNMbWtkT3V0cHV0U3RyZWFtOworCiAgICAgUHJvY2Vzc0xpc3QoKSB7CiAgICAgICAgIE1lbUluZm9SZWFkZXIgbWluZm8gPSBuZXcgTWVtSW5mb1JlYWRlcigpOwogICAgICAgICBtaW5mby5yZWFkTWVtSW5mbygpOwpAQCAtMjAyLDkgKzIxOCw2IEBACiAgICAgICAgICAgICAgICAgICAgICsgIiBkaD0iICsgZGlzcGxheUhlaWdodCk7CiAgICAgICAgIH0KIAotICAgICAgICBTdHJpbmdCdWlsZGVyIGFkalN0cmluZyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgbWVtU3RyaW5nID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLQogICAgICAgICBmbG9hdCBzY2FsZSA9IHNjYWxlTWVtID4gc2NhbGVEaXNwID8gc2NhbGVNZW0gOiBzY2FsZURpc3A7CiAgICAgICAgIGlmIChzY2FsZSA8IDApIHNjYWxlID0gMDsKICAgICAgICAgZWxzZSBpZiAoc2NhbGUgPiAxKSBzY2FsZSA9IDE7CkBAIC0yMTcsMjAgKzIzMCwyMCBAQAogICAgICAgICB9CiAKICAgICAgICAgZm9yIChpbnQgaT0wOyBpPG1Pb21BZGoubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGxvbmcgbG93ID0gbU9vbU1pbkZyZWVMb3dbaV07Ci0gICAgICAgICAgICBsb25nIGhpZ2ggPSBtT29tTWluRnJlZUhpZ2hbaV07Ci0gICAgICAgICAgICBtT29tTWluRnJlZVtpXSA9IChsb25nKShsb3cgKyAoKGhpZ2gtbG93KSpzY2FsZSkpOworICAgICAgICAgICAgaW50IGxvdyA9IG1Pb21NaW5GcmVlTG93W2ldOworICAgICAgICAgICAgaW50IGhpZ2ggPSBtT29tTWluRnJlZUhpZ2hbaV07CisgICAgICAgICAgICBtT29tTWluRnJlZVtpXSA9IChpbnQpKGxvdyArICgoaGlnaC1sb3cpKnNjYWxlKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobWluZnJlZV9hYnMgPj0gMCkgewogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPG1Pb21BZGoubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBtT29tTWluRnJlZVtpXSA9IChsb25nKSgoZmxvYXQpbWluZnJlZV9hYnMgKiBtT29tTWluRnJlZVtpXSAvIG1Pb21NaW5GcmVlW21Pb21BZGoubGVuZ3RoIC0gMV0pOworICAgICAgICAgICAgICAgIG1Pb21NaW5GcmVlW2ldID0gKGludCkoKGZsb2F0KW1pbmZyZWVfYWJzICogbU9vbU1pbkZyZWVbaV0gLyBtT29tTWluRnJlZVttT29tQWRqLmxlbmd0aCAtIDFdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChtaW5mcmVlX2FkaiAhPSAwKSB7CiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8bU9vbUFkai5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIG1Pb21NaW5GcmVlW2ldICs9IChsb25nKSgoZmxvYXQpbWluZnJlZV9hZGogKiBtT29tTWluRnJlZVtpXSAvIG1Pb21NaW5GcmVlW21Pb21BZGoubGVuZ3RoIC0gMV0pOworICAgICAgICAgICAgICAgIG1Pb21NaW5GcmVlW2ldICs9IChpbnQpKChmbG9hdCltaW5mcmVlX2FkaiAqIG1Pb21NaW5GcmVlW2ldIC8gbU9vbU1pbkZyZWVbbU9vbUFkai5sZW5ndGggLSAxXSk7CiAgICAgICAgICAgICAgICAgaWYgKG1Pb21NaW5GcmVlW2ldIDwgMCkgewogICAgICAgICAgICAgICAgICAgICBtT29tTWluRnJlZVtpXSA9IDA7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjQyLDE1ICsyNTUsNiBAQAogICAgICAgICAvLyBiZWZvcmUga2lsbGluZyBiYWNrZ3JvdW5kIHByb2Nlc3Nlcy4KICAgICAgICAgbUNhY2hlZFJlc3RvcmVMZXZlbCA9IChnZXRNZW1MZXZlbChQcm9jZXNzTGlzdC5DQUNIRURfQVBQX01BWF9BREopLzEwMjQpIC8gMzsKIAotICAgICAgICBmb3IgKGludCBpPTA7IGk8bU9vbUFkai5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKGkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgYWRqU3RyaW5nLmFwcGVuZCgnLCcpOwotICAgICAgICAgICAgICAgIG1lbVN0cmluZy5hcHBlbmQoJywnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFkalN0cmluZy5hcHBlbmQobU9vbUFkaltpXSk7Ci0gICAgICAgICAgICBtZW1TdHJpbmcuYXBwZW5kKChtT29tTWluRnJlZVtpXSoxMDI0KS9QQUdFX1NJWkUpOwotICAgICAgICB9Ci0KICAgICAgICAgLy8gQXNrIHRoZSBrZXJuZWwgdG8gdHJ5IHRvIGtlZXAgZW5vdWdoIG1lbW9yeSBmcmVlIHRvIGFsbG9jYXRlIDMgZnVsbAogICAgICAgICAvLyBzY3JlZW4gMzJicHAgYnVmZmVycyB3aXRob3V0IGVudGVyaW5nIGRpcmVjdCByZWNsYWltLgogICAgICAgICBpbnQgcmVzZXJ2ZSA9IGRpc3BsYXlXaWR0aCAqIGRpc3BsYXlIZWlnaHQgKiA0ICogMyAvIDEwMjQ7CkBAIC0yNjgsMTAgKzI3MiwxNSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgLy9TbG9nLmkoIlhYWFhYWFgiLCAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBNSU5GUkVFOiAiICsgbWVtU3RyaW5nKTsKICAgICAgICAgaWYgKHdyaXRlKSB7Ci0gICAgICAgICAgICB3cml0ZUZpbGUoIi9zeXMvbW9kdWxlL2xvd21lbW9yeWtpbGxlci9wYXJhbWV0ZXJzL2FkaiIsIGFkalN0cmluZy50b1N0cmluZygpKTsKLSAgICAgICAgICAgIHdyaXRlRmlsZSgiL3N5cy9tb2R1bGUvbG93bWVtb3J5a2lsbGVyL3BhcmFtZXRlcnMvbWluZnJlZSIsIG1lbVN0cmluZy50b1N0cmluZygpKTsKKyAgICAgICAgICAgIEJ5dGVCdWZmZXIgYnVmID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZSg0ICogKDIqbU9vbUFkai5sZW5ndGggKyAxKSk7CisgICAgICAgICAgICBidWYucHV0SW50KExNS19UQVJHRVQpOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPG1Pb21BZGoubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBidWYucHV0SW50KChtT29tTWluRnJlZVtpXSoxMDI0KS9QQUdFX1NJWkUpOworICAgICAgICAgICAgICAgIGJ1Zi5wdXRJbnQobU9vbUFkaltpXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdyaXRlTG1rZChidWYpOwogICAgICAgICAgICAgU3lzdGVtUHJvcGVydGllcy5zZXQoInN5cy5zeXNjdGwuZXh0cmFfZnJlZV9rYnl0ZXMiLCBJbnRlZ2VyLnRvU3RyaW5nKHJlc2VydmUpKTsKICAgICAgICAgfQogICAgICAgICAvLyBHQjogMjA0OCwzMDcyLDQwOTYsNjE0NCw3MTY4LDgxOTIKQEAgLTUwNiwxOSArNTE1LDc4IEBACiAgICAgICAgIHJldHVybiBtQ2FjaGVkUmVzdG9yZUxldmVsOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCB3cml0ZUZpbGUoU3RyaW5nIHBhdGgsIFN0cmluZyBkYXRhKSB7Ci0gICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbnVsbDsKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIG91dC1vZi1tZW1vcnkgYmFkbmVzcyBhZGp1c3RtZW50IGZvciBhIHByb2Nlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcGlkIFRoZSBwcm9jZXNzIGlkZW50aWZpZXIgdG8gc2V0LgorICAgICAqIEBwYXJhbSBhbXQgQWRqdXN0bWVudCB2YWx1ZSAtLSBsbWtkIGFsbG93cyAtMTYgdG8gKzE1LgorICAgICAqCisgICAgICoge0BoaWRlfQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBzZXRPb21BZGooaW50IHBpZCwgaW50IGFtdCkgeworICAgICAgICBpZiAoYW10ID09IFVOS05PV05fQURKKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEJ5dGVCdWZmZXIgYnVmID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZSg0ICogMyk7CisgICAgICAgIGJ1Zi5wdXRJbnQoTE1LX1BST0NQUklPKTsKKyAgICAgICAgYnVmLnB1dEludChwaWQpOworICAgICAgICBidWYucHV0SW50KGFtdCk7CisgICAgICAgIHdyaXRlTG1rZChidWYpOworICAgIH0KKworICAgIC8qCisgICAgICoge0BoaWRlfQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCByZW1vdmUoaW50IHBpZCkgeworICAgICAgICBCeXRlQnVmZmVyIGJ1ZiA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoNCAqIDIpOworICAgICAgICBidWYucHV0SW50KExNS19QUk9DUkVNT1ZFKTsKKyAgICAgICAgYnVmLnB1dEludChwaWQpOworICAgICAgICB3cml0ZUxta2QoYnVmKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIG9wZW5MbWtkU29ja2V0KCkgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ocGF0aCk7Ci0gICAgICAgICAgICBmb3Mud3JpdGUoZGF0YS5nZXRCeXRlcygpKTsKLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU2xvZy53KEFjdGl2aXR5TWFuYWdlclNlcnZpY2UuVEFHLCAiVW5hYmxlIHRvIHdyaXRlICIgKyBwYXRoKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGlmIChmb3MgIT0gbnVsbCkgeworICAgICAgICAgICAgc0xta2RTb2NrZXQgPSBuZXcgTG9jYWxTb2NrZXQoTG9jYWxTb2NrZXQuU09DS0VUX1NFUVBBQ0tFVCk7CisgICAgICAgICAgICBzTG1rZFNvY2tldC5jb25uZWN0KAorICAgICAgICAgICAgICAgIG5ldyBMb2NhbFNvY2tldEFkZHJlc3MoImxta2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxTb2NrZXRBZGRyZXNzLk5hbWVzcGFjZS5SRVNFUlZFRCkpOworICAgICAgICAgICAgc0xta2RPdXRwdXRTdHJlYW0gPSBzTG1rZFNvY2tldC5nZXRPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFNsb2cudyhBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLlRBRywKKyAgICAgICAgICAgICAgICAgICAibG93bWVtb3J5a2lsbGVyIGRhZW1vbiBzb2NrZXQgb3BlbiBmYWlsZWQiKTsKKyAgICAgICAgICAgIHNMbWtkU29ja2V0ID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgd3JpdGVMbWtkKEJ5dGVCdWZmZXIgYnVmKSB7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChzTG1rZFNvY2tldCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChvcGVuTG1rZFNvY2tldCgpID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHNMbWtkT3V0cHV0U3RyZWFtLndyaXRlKGJ1Zi5hcnJheSgpLCAwLCBidWYucG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICBTbG9nLncoQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5UQUcsCisgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciB3cml0aW5nIHRvIGxvd21lbW9yeWtpbGxlciBzb2NrZXQiKTsKKwogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcy5jbG9zZSgpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc0xta2RTb2NrZXQuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleDIpIHsKICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzTG1rZFNvY2tldCA9IG51bGw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Qcm9jZXNzU3RhdHNTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Qcm9jZXNzU3RhdHNTZXJ2aWNlLmphdmEKaW5kZXggZTA1ZmNkYS4uNGE0NWFhYyAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vUHJvY2Vzc1N0YXRzU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1Byb2Nlc3NTdGF0c1NlcnZpY2UuamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5hbTsKIAotaW1wb3J0IGFuZHJvaWQuYXBwLkFwcEdsb2JhbHM7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLklQYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CkBAIC0yNSw3ICsyMyw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXRvbWljRmlsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1JlY2VpdmVyTGlzdC5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vUmVjZWl2ZXJMaXN0LmphdmEKaW5kZXggZmE4YzFkZi4uNmFkZTczNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vUmVjZWl2ZXJMaXN0LmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vUmVjZWl2ZXJMaXN0LmphdmEKQEAgLTE3LDExICsxNyw4IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5hbTsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JSW50ZW50UmVjZWl2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC51dGlsLlByaW50V3JpdGVyUHJpbnRlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuUHJpbnRlcjsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vVXNhZ2VTdGF0c1NlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1VzYWdlU3RhdHNTZXJ2aWNlLmphdmEKaW5kZXggZTk2ZDhiMS4uMjI2MGM3ZiAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vVXNhZ2VTdGF0c1NlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Vc2FnZVN0YXRzU2VydmljZS5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLklQYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKQEAgLTU0LDcgKzUzLDYgQEAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FwcHdpZGdldC9BcHBXaWRnZXRTZXJ2aWNlSW1wbC5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYXBwd2lkZ2V0L0FwcFdpZGdldFNlcnZpY2VJbXBsLmphdmEKaW5kZXggOThkZWFkMy4uYjYzOTFiNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYXBwd2lkZ2V0L0FwcFdpZGdldFNlcnZpY2VJbXBsLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYXBwd2lkZ2V0L0FwcFdpZGdldFNlcnZpY2VJbXBsLmphdmEKQEAgLTQyLDE2ICs0MiwxMyBAQAogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdG9taWNGaWxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuUGFpcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2JhY2t1cC9CYWNrdXBNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYmFja3VwL0JhY2t1cE1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggYzJiMGQxMGMuLjE4YzhlYzQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2JhY2t1cC9CYWNrdXBNYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2JhY2t1cC9CYWNrdXBNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC04Miw3ICs4Miw2IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYmFja3VwLkJhY2t1cENvbnN0YW50czsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5iYWNrdXAuSUJhY2t1cFRyYW5zcG9ydDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5iYWNrdXAuSU9iYkJhY2t1cFNlcnZpY2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYmFja3VwLkxvY2FsVHJhbnNwb3J0OwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5FdmVudExvZ1RhZ3M7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmJhY2t1cC5QYWNrYWdlTWFuYWdlckJhY2t1cEFnZW50Lk1ldGFkYXRhOwogCkBAIC0yMjE1LDYgKzIyMTQsNyBAQAogICAgICAgICAgICAgbVNhdmVkU3RhdGVOYW1lID0gbmV3IEZpbGUobVN0YXRlRGlyLCBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICBtQmFja3VwRGF0YU5hbWUgPSBuZXcgRmlsZShtRGF0YURpciwgcGFja2FnZU5hbWUgKyAiLmRhdGEiKTsKICAgICAgICAgICAgIG1OZXdTdGF0ZU5hbWUgPSBuZXcgRmlsZShtU3RhdGVEaXIsIHBhY2thZ2VOYW1lICsgIi5uZXciKTsKKyAgICAgICAgICAgIGlmIChNT1JFX0RFQlVHKSBTbG9nLmQoVEFHLCAiZGF0YSBmaWxlOiAiICsgbUJhY2t1cERhdGFOYW1lKTsKIAogICAgICAgICAgICAgbVNhdmVkU3RhdGUgPSBudWxsOwogICAgICAgICAgICAgbUJhY2t1cERhdGEgPSBudWxsOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY2xpcGJvYXJkL0NsaXBib2FyZFNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2NsaXBib2FyZC9DbGlwYm9hcmRTZXJ2aWNlLmphdmEKaW5kZXggNmFhNTk2ZC4uZjQ3ZDY2ZCAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY2xpcGJvYXJkL0NsaXBib2FyZFNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jbGlwYm9hcmQvQ2xpcGJvYXJkU2VydmljZS5qYXZhCkBAIC0zMSw3ICszMSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLklQYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKQEAgLTQwLDcgKzM5LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUNhbGxiYWNrTGlzdDsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb25uZWN0aXZpdHkvUGFjTWFuYWdlci5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29ubmVjdGl2aXR5L1BhY01hbmFnZXIuamF2YQppbmRleCA3Nzg2ZmU2Li44ODE1ZDBmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb25uZWN0aXZpdHkvUGFjTWFuYWdlci5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Nvbm5lY3Rpdml0eS9QYWNNYW5hZ2VyLmphdmEKQEAgLTI0LDE2ICsyNCwxMyBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5uZXQuUHJveHk7CiBpbXBvcnQgYW5kcm9pZC5uZXQuUHJveHlQcm9wZXJ0aWVzOwotaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKLWltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb25uZWN0aXZpdHkvVGV0aGVyaW5nLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb25uZWN0aXZpdHkvVGV0aGVyaW5nLmphdmEKaW5kZXggYWRmMWRmYy4uNTk3MTczNyAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29ubmVjdGl2aXR5L1RldGhlcmluZy5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Nvbm5lY3Rpdml0eS9UZXRoZXJpbmcuamF2YQpAQCAtMjgsNyArMjgsNiBAQAogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUudXNiLlVzYk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5JQ29ubmVjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5JTmV0d29ya01hbmFnZW1lbnRFdmVudE9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQubmV0LklOZXR3b3JrU3RhdHNTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQubmV0LkludGVyZmFjZUNvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5uZXQuTGlua0FkZHJlc3M7CkBAIC01Miw3ICs1MSw2IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZU1hY2hpbmU7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLklvVGhyZWFkOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5uZXQuQmFzZU5ldHdvcmtPYnNlcnZlcjsKLWltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuY29sbGVjdC5MaXN0czsKIAogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Nvbm5lY3Rpdml0eS9WcG4uamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Nvbm5lY3Rpdml0eS9WcG4uamF2YQppbmRleCAyY2EyY2M1Li5kODczODdmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb25uZWN0aXZpdHkvVnBuLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29ubmVjdGl2aXR5L1Zwbi5qYXZhCkBAIC0yOSw3ICsyOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSVBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlVzZXJJbmZvOwpAQCAtNjMsMTQgKzYyLDEyIEBACiBpbXBvcnQgYW5kcm9pZC5zZWN1cml0eS5LZXlTdG9yZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VCb29sZWFuQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5HdWFyZGVkQnk7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5uZXQuTGVnYWN5VnBuSW5mbzsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5uZXQuVnBuQ29uZmlnOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm5ldC5WcG5Qcm9maWxlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9uczsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuQ29ubmVjdGl2aXR5U2VydmljZS5WcG5DYWxsYmFjazsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIubmV0LkJhc2VOZXR3b3JrT2JzZXJ2ZXI7CiAKQEAgLTc4LDEwICs3NSw4IEBACiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLm5ldC5JbmV0NEFkZHJlc3M7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0ludGVnZXI7CiAKIGltcG9ydCBsaWJjb3JlLmlvLklvVXRpbHM7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L0NvbnRlbnRTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L0NvbnRlbnRTZXJ2aWNlLmphdmEKaW5kZXggMDIzYmYyYi4uYzdkMjg3MSAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9Db250ZW50U2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2NvbnRlbnQvQ29udGVudFNlcnZpY2UuamF2YQpAQCAtMTksMTEgKzE5LDEzIEBACiBpbXBvcnQgYW5kcm9pZC5NYW5pZmVzdDsKIGltcG9ydCBhbmRyb2lkLmFjY291bnRzLkFjY291bnQ7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklDb250ZW50U2VydmljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSVN5bmNTdGF0dXNPYnNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuUGVyaW9kaWNTeW5jOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU3luY0FkYXB0ZXJUeXBlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TeW5jSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU3luY1JlcXVlc3Q7CkBAIC00MSw3ICs0Myw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuUGFpcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlSW50QXJyYXk7CiAKQEAgLTMxNSw3ICszMTYsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgcmVxdWVzdFN5bmMoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LCBCdW5kbGUgZXh0cmFzKSB7CiAgICAgICAgIENvbnRlbnRSZXNvbHZlci52YWxpZGF0ZVN5bmNFeHRyYXNCdW5kbGUoZXh0cmFzKTsKICAgICAgICAgaW50IHVzZXJJZCA9IFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpOwpAQCAtMzQ1LDQ2ICszNDUsNTYgQEAKICAgICAgKiBEZXBlbmRpbmcgb24gdGhlIHJlcXVlc3QsIHdlIGVucXVldWUgdG8gc3VpdCBpbiB0aGUgU3luY01hbmFnZXIuCiAgICAgICogQHBhcmFtIHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0LiBWYWxpZGF0aW9uIG9mIHRoaXMgb2JqZWN0IGlzIGRvbmUgYnkgaXRzIGJ1aWxkZXIuCiAgICAgICovCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc3luYyhTeW5jUmVxdWVzdCByZXF1ZXN0KSB7Ci0gICAgICAgIEJ1bmRsZSBleHRyYXMgPSByZXF1ZXN0LmdldEJ1bmRsZSgpOwotICAgICAgICBsb25nIGZsZXh0aW1lID0gcmVxdWVzdC5nZXRTeW5jRmxleFRpbWUoKTsKLSAgICAgICAgbG9uZyBydW5BdFRpbWUgPSByZXF1ZXN0LmdldFN5bmNSdW5UaW1lKCk7CiAgICAgICAgIGludCB1c2VySWQgPSBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKTsKLSAgICAgICAgaW50IHVJZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7Ci0KKyAgICAgICAgaW50IGNhbGxlclVpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7CiAgICAgICAgIC8vIFRoaXMgbWFrZXMgaXQgc28gdGhhdCBmdXR1cmUgcGVybWlzc2lvbiBjaGVja3Mgd2lsbCBiZSBpbiB0aGUgY29udGV4dCBvZiB0aGlzCiAgICAgICAgIC8vIHByb2Nlc3MgcmF0aGVyIHRoYW4gdGhlIGNhbGxlcidzIHByb2Nlc3MuIFdlIHdpbGwgcmVzdG9yZSB0aGlzIGJlZm9yZSByZXR1cm5pbmcuCiAgICAgICAgIGxvbmcgaWRlbnRpdHlUb2tlbiA9IGNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeW5jTWFuYWdlciBzeW5jTWFuYWdlciA9IGdldFN5bmNNYW5hZ2VyKCk7Ci0gICAgICAgICAgICBpZiAoc3luY01hbmFnZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Lmhhc0F1dGhvcml0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFN5bmMgQWRhcHRlciByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbSAtIG9sZCBBUEkuCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsICBBY2NvdW50IGFjY291bnQgPSByZXF1ZXN0LmdldEFjY291bnQoKTsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHByb3ZpZGVyID0gcmVxdWVzdC5nZXRQcm92aWRlcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5pc1BlcmlvZGljKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuaWZlc3QucGVybWlzc2lvbi5XUklURV9TWU5DX1NFVFRJTkdTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gcGVybWlzc2lvbiB0byB3cml0ZSB0aGUgc3luYyBzZXR0aW5ncyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bkF0VGltZSA8IDYwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIlJlcXVlc3RlZCBwb2xsIGZyZXF1ZW5jeSBvZiAiICsgcnVuQXRUaW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgc2Vjb25kcyBiZWluZyByb3VuZGVkIHVwIHRvIDYwIHNlY29uZHMuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuQXRUaW1lID0gNjA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQZXJpb2RpY1N5bmMgc3luY1RvQWRkID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFBlcmlvZGljU3luYyhhY2NvdW50LCBwcm92aWRlciwgZXh0cmFzLCBydW5BdFRpbWUsIGZsZXh0aW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldFN5bmNNYW5hZ2VyKCkuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKS5hZGRQZXJpb2RpY1N5bmMoc3luY1RvQWRkLCB1c2VySWQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBiZWZvcmVSdW50aW1lTWlsbGlzID0gKGZsZXh0aW1lKSAqIDEwMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJ1bnRpbWVNaWxsaXMgPSBydW5BdFRpbWUgKiAxMDAwOwotICAgICAgICAgICAgICAgICAgICAgICAgc3luY01hbmFnZXIuc2NoZWR1bGVTeW5jKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50LCB1c2VySWQsIHVJZCwgcHJvdmlkZXIsIGV4dHJhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlUnVudGltZU1pbGxpcywgcnVudGltZU1pbGxpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogb25seVRob3NlV2l0aFVua25vd25TeW5jYWJsZVN0YXRlICovKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN5bmNNYW5hZ2VyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEJ1bmRsZSBleHRyYXMgPSByZXF1ZXN0LmdldEJ1bmRsZSgpOworICAgICAgICAgICAgbG9uZyBmbGV4dGltZSA9IHJlcXVlc3QuZ2V0U3luY0ZsZXhUaW1lKCk7CisgICAgICAgICAgICBsb25nIHJ1bkF0VGltZSA9IHJlcXVlc3QuZ2V0U3luY1J1blRpbWUoKTsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LmlzUGVyaW9kaWMoKSkgeworICAgICAgICAgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0LnBlcm1pc3Npb24uV1JJVEVfU1lOQ19TRVRUSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICAgICJubyBwZXJtaXNzaW9uIHRvIHdyaXRlIHRoZSBzeW5jIHNldHRpbmdzIik7CisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgaW5mbzsKKyAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3QuaGFzQXV0aG9yaXR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmEgcGVybWlzc2lvbnMgY2hlY2tpbmcgZm9yIHN5bmMgc2VydmljZS4KKyAgICAgICAgICAgICAgICAgICAgdmVyaWZ5U2lnbmF0dXJlRm9yUGFja2FnZShjYWxsZXJVaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2aWNlKCkuZ2V0UGFja2FnZU5hbWUoKSwgInN5bmMiKTsKKyAgICAgICAgICAgICAgICAgICAgaW5mbyA9IG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludChyZXF1ZXN0LmdldFNlcnZpY2UoKSwgdXNlcklkKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJVbnJlY29nbmlzZWQgc3luYyBwYXJhbWV0ZXJzLCBkb2luZyBub3RoaW5nLiIpOworICAgICAgICAgICAgICAgICAgICBpbmZvID0gbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuZ2V0QWNjb3VudCgpLCByZXF1ZXN0LmdldFByb3ZpZGVyKCksIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChydW5BdFRpbWUgPCA2MCkgeworICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiUmVxdWVzdGVkIHBvbGwgZnJlcXVlbmN5IG9mICIgKyBydW5BdFRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgc2Vjb25kcyBiZWluZyByb3VuZGVkIHVwIHRvIDYwIHNlY29uZHMuIik7CisgICAgICAgICAgICAgICAgICAgIHJ1bkF0VGltZSA9IDYwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBTY2hlZHVsZSBwZXJpb2RpYyBzeW5jLgorICAgICAgICAgICAgICAgIGdldFN5bmNNYW5hZ2VyKCkuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKQorICAgICAgICAgICAgICAgICAgICAudXBkYXRlT3JBZGRQZXJpb2RpY1N5bmMoaW5mbywgcnVuQXRUaW1lLCBmbGV4dGltZSwgZXh0cmFzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9uZyBiZWZvcmVSdW50aW1lTWlsbGlzID0gKGZsZXh0aW1lKSAqIDEwMDA7CisgICAgICAgICAgICAgICAgbG9uZyBydW50aW1lTWlsbGlzID0gcnVuQXRUaW1lICogMTAwMDsKKyAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5oYXNBdXRob3JpdHkoKSkgeworICAgICAgICAgICAgICAgIHN5bmNNYW5hZ2VyLnNjaGVkdWxlU3luYygKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuZ2V0QWNjb3VudCgpLCB1c2VySWQsIGNhbGxlclVpZCwgcmVxdWVzdC5nZXRQcm92aWRlcigpLCBleHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVSdW50aW1lTWlsbGlzLCBydW50aW1lTWlsbGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogb25seVRob3NlV2l0aFVua25vd25TeW5jYWJsZVN0YXRlICovKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzeW5jTWFuYWdlci5zY2hlZHVsZVN5bmMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2aWNlKCksIHVzZXJJZCwgY2FsbGVyVWlkLCBleHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlUnVudGltZU1pbGxpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lTWlsbGlzKTsgLy8gRW1wdHkgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewpAQCAtMzk1LDExICs0MDUsMTQgQEAKICAgICAvKioKICAgICAgKiBDbGVhciBhbGwgc2NoZWR1bGVkIHN5bmMgb3BlcmF0aW9ucyB0aGF0IG1hdGNoIHRoZSB1cmkgYW5kIGNhbmNlbCB0aGUgYWN0aXZlIHN5bmMKICAgICAgKiBpZiB0aGV5IG1hdGNoIHRoZSBhdXRob3JpdHkgYW5kIGFjY291bnQsIGlmIHRoZXkgYXJlIHByZXNlbnQuCi0gICAgICogQHBhcmFtIGFjY291bnQgZmlsdGVyIHRoZSBwZW5kaW5nIGFuZCBhY3RpdmUgc3luY3MgdG8gY2FuY2VsIHVzaW5nIHRoaXMgYWNjb3VudAotICAgICAqIEBwYXJhbSBhdXRob3JpdHkgZmlsdGVyIHRoZSBwZW5kaW5nIGFuZCBhY3RpdmUgc3luY3MgdG8gY2FuY2VsIHVzaW5nIHRoaXMgYXV0aG9yaXR5CisgICAgICoKKyAgICAgKiBAcGFyYW0gYWNjb3VudCBmaWx0ZXIgdGhlIHBlbmRpbmcgYW5kIGFjdGl2ZSBzeW5jcyB0byBjYW5jZWwgdXNpbmcgdGhpcyBhY2NvdW50LCBvciBudWxsLgorICAgICAqIEBwYXJhbSBhdXRob3JpdHkgZmlsdGVyIHRoZSBwZW5kaW5nIGFuZCBhY3RpdmUgc3luY3MgdG8gY2FuY2VsIHVzaW5nIHRoaXMgYXV0aG9yaXR5LCBvcgorICAgICAqIG51bGwuCisgICAgICogQHBhcmFtIGNuYW1lIGNhbmNlbCBzeW5jcyBydW5uaW5nIG9uIHRoaXMgc2VydmljZSwgb3IgbnVsbCBmb3IgcHJvdmlkZXIvYWNjb3VudC4KICAgICAgKi8KICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjYW5jZWxTeW5jKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSkgeworICAgIHB1YmxpYyB2b2lkIGNhbmNlbFN5bmMoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LCBDb21wb25lbnROYW1lIGNuYW1lKSB7CiAgICAgICAgIGlmIChhdXRob3JpdHkgIT0gbnVsbCAmJiBhdXRob3JpdHkubGVuZ3RoKCkgPT0gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQXV0aG9yaXR5IG11c3QgYmUgbm9uLWVtcHR5Iik7CiAgICAgICAgIH0KQEAgLTQxMSwxNCArNDI0LDU0IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeW5jTWFuYWdlciBzeW5jTWFuYWdlciA9IGdldFN5bmNNYW5hZ2VyKCk7CiAgICAgICAgICAgICBpZiAoc3luY01hbmFnZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHN5bmNNYW5hZ2VyLmNsZWFyU2NoZWR1bGVkU3luY09wZXJhdGlvbnMoYWNjb3VudCwgdXNlcklkLCBhdXRob3JpdHkpOwotICAgICAgICAgICAgICAgIHN5bmNNYW5hZ2VyLmNhbmNlbEFjdGl2ZVN5bmMoYWNjb3VudCwgdXNlcklkLCBhdXRob3JpdHkpOworICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm87CisgICAgICAgICAgICAgICAgaWYgKGNuYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mbyA9IG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludChhY2NvdW50LCBhdXRob3JpdHksIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mbyA9IG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludChjbmFtZSwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3luY01hbmFnZXIuY2xlYXJTY2hlZHVsZWRTeW5jT3BlcmF0aW9ucyhpbmZvKTsKKyAgICAgICAgICAgICAgICBzeW5jTWFuYWdlci5jYW5jZWxBY3RpdmVTeW5jKGluZm8sIG51bGwgLyogYWxsIHN5bmNzIGZvciB0aGlzIGFkYXB0ZXIgKi8pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgcmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudGl0eVRva2VuKTsKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIGNhbmNlbFJlcXVlc3QoU3luY1JlcXVlc3QgcmVxdWVzdCkgeworICAgICAgICBTeW5jTWFuYWdlciBzeW5jTWFuYWdlciA9IGdldFN5bmNNYW5hZ2VyKCk7CisgICAgICAgIGlmIChzeW5jTWFuYWdlciA9PSBudWxsKSByZXR1cm47CisgICAgICAgIGludCB1c2VySWQgPSBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKTsKKyAgICAgICAgaW50IGNhbGxlclVpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7CisKKyAgICAgICAgbG9uZyBpZGVudGl0eVRva2VuID0gY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm87CisgICAgICAgICAgICBCdW5kbGUgZXh0cmFzID0gbmV3IEJ1bmRsZShyZXF1ZXN0LmdldEJ1bmRsZSgpKTsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0Lmhhc0F1dGhvcml0eSgpKSB7CisgICAgICAgICAgICAgICAgQWNjb3VudCBhY2NvdW50ID0gcmVxdWVzdC5nZXRBY2NvdW50KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHByb3ZpZGVyID0gcmVxdWVzdC5nZXRQcm92aWRlcigpOworICAgICAgICAgICAgICAgIGluZm8gPSBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoYWNjb3VudCwgcHJvdmlkZXIsIHVzZXJJZCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIE9ubHkgYWxsb3dlZCB0byBtYW5pcHVsYXRlIHN5bmNzIGZvciBhIHNlcnZpY2Ugd2hpY2ggeW91IG93bi4KKyAgICAgICAgICAgICAgICBDb21wb25lbnROYW1lIHNlcnZpY2UgPSByZXF1ZXN0LmdldFNlcnZpY2UoKTsKKyAgICAgICAgICAgICAgICB2ZXJpZnlTaWduYXR1cmVGb3JQYWNrYWdlKGNhbGxlclVpZCwgc2VydmljZS5nZXRQYWNrYWdlTmFtZSgpLCAiY2FuY2VsIik7CisgICAgICAgICAgICAgICAgaW5mbyA9IG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludChzZXJ2aWNlLCB1c2VySWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlcXVlc3QuaXNQZXJpb2RpYygpKSB7CisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHBlcmlvZGljIHN5bmMuCisgICAgICAgICAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKE1hbmlmZXN0LnBlcm1pc3Npb24uV1JJVEVfU1lOQ19TRVRUSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICAgICJubyBwZXJtaXNzaW9uIHRvIHdyaXRlIHRoZSBzeW5jIHNldHRpbmdzIik7CisgICAgICAgICAgICAgICAgZ2V0U3luY01hbmFnZXIoKS5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpLnJlbW92ZVBlcmlvZGljU3luYyhpbmZvLCBleHRyYXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ2FuY2VsIGFjdGl2ZSBzeW5jcyBhbmQgY2xlYXIgcGVuZGluZyBzeW5jcyBmcm9tIHRoZSBxdWV1ZS4KKyAgICAgICAgICAgIHN5bmNNYW5hZ2VyLmNhbmNlbFNjaGVkdWxlZFN5bmNPcGVyYXRpb24oaW5mbywgZXh0cmFzKTsKKyAgICAgICAgICAgIHN5bmNNYW5hZ2VyLmNhbmNlbEFjdGl2ZVN5bmMoaW5mbywgZXh0cmFzKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHlUb2tlbik7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFN5bmNBZGFwdGVycyB0aGF0IGFyZSBrbm93biB0byB0aGUgc3lzdGVtLgogICAgICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgU3luY0FkYXB0ZXJzIHRoYXQgaGF2ZSByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbQpAQCAtNDQ3LDggKzUwMCw4IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeW5jTWFuYWdlciBzeW5jTWFuYWdlciA9IGdldFN5bmNNYW5hZ2VyKCk7CiAgICAgICAgICAgICBpZiAoc3luY01hbmFnZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBzeW5jTWFuYWdlci5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpLmdldFN5bmNBdXRvbWF0aWNhbGx5KAotICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudCwgdXNlcklkLCBwcm92aWRlck5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiBzeW5jTWFuYWdlci5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U3luY0F1dG9tYXRpY2FsbHkoYWNjb3VudCwgdXNlcklkLCBwcm92aWRlck5hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgcmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudGl0eVRva2VuKTsKQEAgLTQ2OSw4ICs1MjIsOCBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3luY01hbmFnZXIgc3luY01hbmFnZXIgPSBnZXRTeW5jTWFuYWdlcigpOwogICAgICAgICAgICAgaWYgKHN5bmNNYW5hZ2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzeW5jTWFuYWdlci5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpLnNldFN5bmNBdXRvbWF0aWNhbGx5KAotICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudCwgdXNlcklkLCBwcm92aWRlck5hbWUsIHN5bmMpOworICAgICAgICAgICAgICAgIHN5bmNNYW5hZ2VyLmdldFN5bmNTdG9yYWdlRW5naW5lKCkKKyAgICAgICAgICAgICAgICAuc2V0U3luY0F1dG9tYXRpY2FsbHkoYWNjb3VudCwgdXNlcklkLCBwcm92aWRlck5hbWUsIHN5bmMpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgcmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudGl0eVRva2VuKTsKQEAgLTQ5NiwyMSArNTQ5LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICsgIiBzZWNvbmRzIGJlaW5nIHJvdW5kZWQgdXAgdG8gNjAgc2Vjb25kcy4iKTsKICAgICAgICAgICAgIHBvbGxGcmVxdWVuY3kgPSA2MDsKICAgICAgICAgfQorICAgICAgICBsb25nIGRlZmF1bHRGbGV4ID0gU3luY1N0b3JhZ2VFbmdpbmUuY2FsY3VsYXRlRGVmYXVsdEZsZXhUaW1lKHBvbGxGcmVxdWVuY3kpOwogCiAgICAgICAgIGxvbmcgaWRlbnRpdHlUb2tlbiA9IGNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBBZGQgZGVmYXVsdCBmbGV4IHRpbWUgdG8gdGhpcyBzeW5jLgotICAgICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmNUb0FkZCA9Ci0gICAgICAgICAgICAgICAgICAgIG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudCwgYXV0aG9yaXR5LCBleHRyYXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9sbEZyZXF1ZW5jeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5jYWxjdWxhdGVEZWZhdWx0RmxleFRpbWUocG9sbEZyZXF1ZW5jeSkpOwotICAgICAgICAgICAgZ2V0U3luY01hbmFnZXIoKS5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpLmFkZFBlcmlvZGljU3luYyhzeW5jVG9BZGQsIHVzZXJJZCk7CisgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBpbmZvID0KKyAgICAgICAgICAgICAgICAgICAgbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KGFjY291bnQsIGF1dGhvcml0eSwgdXNlcklkKTsKKyAgICAgICAgICAgIGdldFN5bmNNYW5hZ2VyKCkuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKQorICAgICAgICAgICAgICAgIC51cGRhdGVPckFkZFBlcmlvZGljU3luYyhpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgcG9sbEZyZXF1ZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGbGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHlUb2tlbik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCByZW1vdmVQZXJpb2RpY1N5bmMoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LCBCdW5kbGUgZXh0cmFzKSB7CiAgICAgICAgIGlmIChhY2NvdW50ID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkFjY291bnQgbXVzdCBub3QgYmUgbnVsbCIpOwpAQCAtNTI0LDI0ICs1NzgsMTggQEAKICAgICAgICAgaW50IHVzZXJJZCA9IFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpOwogICAgICAgICBsb25nIGlkZW50aXR5VG9rZW4gPSBjbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmNUb1JlbW92ZSA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudCwgYXV0aG9yaXR5LCBleHRyYXMsCi0gICAgICAgICAgICAgICAgICAgIDAgLyogTm90IHJlYWQgZm9yIHJlbW92YWwgKi8sIDAgLyogTm90IHJlYWQgZm9yIHJlbW92YWwgKi8pOwotICAgICAgICAgICAgZ2V0U3luY01hbmFnZXIoKS5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpLnJlbW92ZVBlcmlvZGljU3luYyhzeW5jVG9SZW1vdmUsIHVzZXJJZCk7CisgICAgICAgICAgICBnZXRTeW5jTWFuYWdlcigpLmdldFN5bmNTdG9yYWdlRW5naW5lKCkKKyAgICAgICAgICAgICAgICAucmVtb3ZlUGVyaW9kaWNTeW5jKAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KGFjY291bnQsIGF1dGhvcml0eSwgdXNlcklkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcyk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICByZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50aXR5VG9rZW4pOwogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogVE9ETzogSW1wbGVtZW50LgotICAgICAqIEBwYXJhbSByZXF1ZXN0IFN5bmMgdG8gcmVtb3ZlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVN5bmMoU3luY1JlcXVlc3QgcmVxdWVzdCkgewogCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8UGVyaW9kaWNTeW5jPiBnZXRQZXJpb2RpY1N5bmNzKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIHByb3ZpZGVyTmFtZSkgeworICAgIHB1YmxpYyBMaXN0PFBlcmlvZGljU3luYz4gZ2V0UGVyaW9kaWNTeW5jcyhBY2NvdW50IGFjY291bnQsIFN0cmluZyBwcm92aWRlck5hbWUsCisgICAgICAgICAgICBDb21wb25lbnROYW1lIGNuYW1lKSB7CiAgICAgICAgIGlmIChhY2NvdW50ID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkFjY291bnQgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgICAgICB9CkBAIC01NTEsMTEgKzU5OSwyMCBAQAogICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oTWFuaWZlc3QucGVybWlzc2lvbi5SRUFEX1NZTkNfU0VUVElOR1MsCiAgICAgICAgICAgICAgICAgIm5vIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgc3luYyBzZXR0aW5ncyIpOwogCisgICAgICAgIGludCBjYWxsZXJVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOwogICAgICAgICBpbnQgdXNlcklkID0gVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCk7CiAgICAgICAgIGxvbmcgaWRlbnRpdHlUb2tlbiA9IGNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U3luY01hbmFnZXIoKS5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpLmdldFBlcmlvZGljU3luY3MoCi0gICAgICAgICAgICAgICAgICAgIGFjY291bnQsIHVzZXJJZCwgcHJvdmlkZXJOYW1lKTsKKyAgICAgICAgICAgIGlmIChjbmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldFN5bmNNYW5hZ2VyKCkuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKS5nZXRQZXJpb2RpY1N5bmNzKAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KGFjY291bnQsIHByb3ZpZGVyTmFtZSwgdXNlcklkKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFjY291bnQgPT0gbnVsbCAmJiBwcm92aWRlck5hbWUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZUZvclBhY2thZ2UoY2FsbGVyVWlkLCBjbmFtZS5nZXRQYWNrYWdlTmFtZSgpLCAiZ2V0UGVyaW9kaWNTeW5jcyIpOworICAgICAgICAgICAgICAgIHJldHVybiBnZXRTeW5jTWFuYWdlcigpLmdldFN5bmNTdG9yYWdlRW5naW5lKCkuZ2V0UGVyaW9kaWNTeW5jcygKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludChjbmFtZSwgdXNlcklkKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgYXV0aG9yaXR5IHNwZWNpZmllZCIpOworICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgcmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudGl0eVRva2VuKTsKICAgICAgICAgfQpAQCAtNTc5LDcgKzYzNiw2IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRJc1N5bmNhYmxlKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIHByb3ZpZGVyTmFtZSwgaW50IHN5bmNhYmxlKSB7CiAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShwcm92aWRlck5hbWUpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBdXRob3JpdHkgbXVzdCBub3QgYmUgZW1wdHkiKTsKQEAgLTYwMCw2ICs2NTYsNDUgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHNldFNlcnZpY2VBY3RpdmUoQ29tcG9uZW50TmFtZSBjbmFtZSwgYm9vbGVhbiBhY3RpdmUpIHsKKyAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKE1hbmlmZXN0LnBlcm1pc3Npb24uV1JJVEVfU1lOQ19TRVRUSU5HUywKKyAgICAgICAgICAgICAgICAibm8gcGVybWlzc2lvbiB0byB3cml0ZSB0aGUgc3luYyBzZXR0aW5ncyIpOworICAgICAgICB2ZXJpZnlTaWduYXR1cmVGb3JQYWNrYWdlKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIGNuYW1lLmdldFBhY2thZ2VOYW1lKCksCisgICAgICAgICAgICAgICAgInNldFNlcnZpY2VBY3RpdmUiKTsKKworICAgICAgICBpbnQgdXNlcklkID0gVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCk7CisgICAgICAgIGxvbmcgaWRlbnRpdHlUb2tlbiA9IGNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTeW5jTWFuYWdlciBzeW5jTWFuYWdlciA9IGdldFN5bmNNYW5hZ2VyKCk7CisgICAgICAgICAgICBpZiAoc3luY01hbmFnZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHN5bmNNYW5hZ2VyLmdldFN5bmNTdG9yYWdlRW5naW5lKCkuc2V0SXNUYXJnZXRTZXJ2aWNlQWN0aXZlKAorICAgICAgICAgICAgICAgICAgICAgICAgY25hbWUsIHVzZXJJZCwgYWN0aXZlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHlUb2tlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1NlcnZpY2VBY3RpdmUoQ29tcG9uZW50TmFtZSBjbmFtZSkgeworICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oTWFuaWZlc3QucGVybWlzc2lvbi5SRUFEX1NZTkNfU0VUVElOR1MsCisgICAgICAgICAgICAgICAgIm5vIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgc3luYyBzZXR0aW5ncyIpOworICAgICAgICB2ZXJpZnlTaWduYXR1cmVGb3JQYWNrYWdlKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIGNuYW1lLmdldFBhY2thZ2VOYW1lKCksCisgICAgICAgICAgICAgICAgImlzU2VydmljZUFjdGl2ZSIpOworCisgICAgICAgIGludCB1c2VySWQgPSBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKTsKKyAgICAgICAgbG9uZyBpZGVudGl0eVRva2VuID0gY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN5bmNNYW5hZ2VyIHN5bmNNYW5hZ2VyID0gZ2V0U3luY01hbmFnZXIoKTsKKyAgICAgICAgICAgIGlmIChzeW5jTWFuYWdlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN5bmNNYW5hZ2VyLmdldFN5bmNTdG9yYWdlRW5naW5lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRJc1RhcmdldFNlcnZpY2VBY3RpdmUoY25hbWUsIHVzZXJJZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICByZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50aXR5VG9rZW4pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBnZXRNYXN0ZXJTeW5jQXV0b21hdGljYWxseSgpIHsKICAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKE1hbmlmZXN0LnBlcm1pc3Npb24uUkVBRF9TWU5DX1NFVFRJTkdTLApAQCAtNjM1LDE3ICs3MzAsMjQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBib29sZWFuIGlzU3luY0FjdGl2ZShBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHkpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1N5bmNBY3RpdmUoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LCBDb21wb25lbnROYW1lIGNuYW1lKSB7CiAgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihNYW5pZmVzdC5wZXJtaXNzaW9uLlJFQURfU1lOQ19TVEFUUywKICAgICAgICAgICAgICAgICAibm8gcGVybWlzc2lvbiB0byByZWFkIHRoZSBzeW5jIHN0YXRzIik7CiAgICAgICAgIGludCB1c2VySWQgPSBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKTsKLQorICAgICAgICBpbnQgY2FsbGluZ1VpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7CiAgICAgICAgIGxvbmcgaWRlbnRpdHlUb2tlbiA9IGNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeW5jTWFuYWdlciBzeW5jTWFuYWdlciA9IGdldFN5bmNNYW5hZ2VyKCk7Ci0gICAgICAgICAgICBpZiAoc3luY01hbmFnZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKHN5bmNNYW5hZ2VyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY25hbWUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBzeW5jTWFuYWdlci5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpLmlzU3luY0FjdGl2ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludChhY2NvdW50LCBhdXRob3JpdHksIHVzZXJJZCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChhY2NvdW50ID09IG51bGwgJiYgYXV0aG9yaXR5ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB2ZXJpZnlTaWduYXR1cmVGb3JQYWNrYWdlKGNhbGxpbmdVaWQsIGNuYW1lLmdldFBhY2thZ2VOYW1lKCksICJpc1N5bmNBY3RpdmUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3luY01hbmFnZXIuZ2V0U3luY1N0b3JhZ2VFbmdpbmUoKS5pc1N5bmNBY3RpdmUoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoY25hbWUsIHVzZXJJZCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgcmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudGl0eVRva2VuKTsKQEAgLTY2Niw3ICs3NjgsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIFN5bmNTdGF0dXNJbmZvIGdldFN5bmNTdGF0dXMoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgcHVibGljIFN5bmNTdGF0dXNJbmZvIGdldFN5bmNTdGF0dXMoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LCBDb21wb25lbnROYW1lIGNuYW1lKSB7CiAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShhdXRob3JpdHkpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBdXRob3JpdHkgbXVzdCBub3QgYmUgZW1wdHkiKTsKICAgICAgICAgfQpAQCAtNjc0LDM0ICs3NzYsNTIgQEAKICAgICAgICAgICAgICAgICAibm8gcGVybWlzc2lvbiB0byByZWFkIHRoZSBzeW5jIHN0YXRzIik7CiAKICAgICAgICAgaW50IHVzZXJJZCA9IFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpOworICAgICAgICBpbnQgY2FsbGVyVWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKICAgICAgICAgbG9uZyBpZGVudGl0eVRva2VuID0gY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5bmNNYW5hZ2VyIHN5bmNNYW5hZ2VyID0gZ2V0U3luY01hbmFnZXIoKTsKLSAgICAgICAgICAgIGlmIChzeW5jTWFuYWdlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN5bmNNYW5hZ2VyLmdldFN5bmNTdG9yYWdlRW5naW5lKCkuZ2V0U3RhdHVzQnlBY2NvdW50QW5kQXV0aG9yaXR5KAotICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudCwgdXNlcklkLCBhdXRob3JpdHkpOworICAgICAgICAgICAgaWYgKHN5bmNNYW5hZ2VyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm87CisgICAgICAgICAgICBpZiAoY25hbWUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGluZm8gPSBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoYWNjb3VudCwgYXV0aG9yaXR5LCB1c2VySWQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChhY2NvdW50ID09IG51bGwgJiYgYXV0aG9yaXR5ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB2ZXJpZnlTaWduYXR1cmVGb3JQYWNrYWdlKGNhbGxlclVpZCwgY25hbWUuZ2V0UGFja2FnZU5hbWUoKSwgImdldFN5bmNTdGF0dXMiKTsKKyAgICAgICAgICAgICAgICBpbmZvID0gbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KGNuYW1lLCB1c2VySWQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNdXN0IGNhbGwgc3luYyBzdGF0dXMgd2l0aCB2YWxpZCBhdXRob3JpdHkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzeW5jTWFuYWdlci5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpLmdldFN0YXR1c0J5QXV0aG9yaXR5KGluZm8pOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgcmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudGl0eVRva2VuKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N5bmNQZW5kaW5nKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSkgeworICAgIHB1YmxpYyBib29sZWFuIGlzU3luY1BlbmRpbmcoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LCBDb21wb25lbnROYW1lIGNuYW1lKSB7CiAgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihNYW5pZmVzdC5wZXJtaXNzaW9uLlJFQURfU1lOQ19TVEFUUywKICAgICAgICAgICAgICAgICAibm8gcGVybWlzc2lvbiB0byByZWFkIHRoZSBzeW5jIHN0YXRzIik7CiAKKyAgICAgICAgaW50IGNhbGxlclVpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7CiAgICAgICAgIGludCB1c2VySWQgPSBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKTsKICAgICAgICAgbG9uZyBpZGVudGl0eVRva2VuID0gY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICAgICAgU3luY01hbmFnZXIgc3luY01hbmFnZXIgPSBnZXRTeW5jTWFuYWdlcigpOworICAgICAgICBpZiAoc3luY01hbmFnZXIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTeW5jTWFuYWdlciBzeW5jTWFuYWdlciA9IGdldFN5bmNNYW5hZ2VyKCk7Ci0gICAgICAgICAgICBpZiAoc3luY01hbmFnZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBzeW5jTWFuYWdlci5nZXRTeW5jU3RvcmFnZUVuZ2luZSgpLmlzU3luY1BlbmRpbmcoYWNjb3VudCwgdXNlcklkLCBhdXRob3JpdHkpOworICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgaW5mbzsKKyAgICAgICAgICAgIGlmIChjbmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgaW5mbyA9IG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludChhY2NvdW50LCBhdXRob3JpdHksIHVzZXJJZCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFjY291bnQgPT0gbnVsbCAmJiBhdXRob3JpdHkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZUZvclBhY2thZ2UoY2FsbGVyVWlkLCBjbmFtZS5nZXRQYWNrYWdlTmFtZSgpLCAiaXNTeW5jUGVuZGluZyIpOworICAgICAgICAgICAgICAgIGluZm8gPSBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoY25hbWUsIHVzZXJJZCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgYXV0aG9yaXR5IHNwZWNpZmllZCIpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN5bmNNYW5hZ2VyLmdldFN5bmNTdG9yYWdlRW5naW5lKCkuaXNTeW5jUGVuZGluZyhpbmZvKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHlUb2tlbik7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGFkZFN0YXR1c0NoYW5nZUxpc3RlbmVyKGludCBtYXNrLCBJU3luY1N0YXR1c09ic2VydmVyIGNhbGxiYWNrKSB7CkBAIC03MzUsNiArODU1LDMwIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogSGVscGVyIHRvIHZlcmlmeSB0aGF0IHRoZSBwcm92aWRlZCBwYWNrYWdlIG5hbWUgc2hhcmVzIHRoZSBzYW1lIGNlcnQgYXMgdGhlIGNhbGxlci4KKyAgICAgKiBAcGFyYW0gY2FsbGVyVWlkIHVpZCBvZiB0aGUgY2FsbGluZyBwcm9jZXNzLgorICAgICAqIEBwYXJhbSBwYWNrYWdlTmFtZSBwYWNrYWdlIHRvIHZlcmlmeSBhZ2FpbnN0IHBhY2thZ2Ugb2YgY2FsbGluZyBhcHBsaWNhdGlvbi4KKyAgICAgKiBAcGFyYW0gdGFnIGEgdGFnIHRvIHVzZSB3aGVuIHRocm93aW5nIGFuIGV4Y2VwdGlvbiBpZiB0aGUgc2lnbmF0dXJlcyBkb24ndAorICAgICAqIG1hdGNoLiBDYW5ub3QgYmUgbnVsbC4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24gYW5kIHRoZSBwcm92aWRlZCBwYWNrYWdlIGFyZSBzaWduZWQgd2l0aCB0aGUgc2FtZQorICAgICAqIGNlcnRpZmljYXRlLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiB2ZXJpZnlTaWduYXR1cmVGb3JQYWNrYWdlKGludCBjYWxsZXJVaWQsIFN0cmluZyBwYWNrYWdlTmFtZSwgU3RyaW5nIHRhZykgeworICAgICAgICBQYWNrYWdlTWFuYWdlciBwbSA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbnQgc2VydmljZVVpZCA9IHBtLmdldEFwcGxpY2F0aW9uSW5mbyhwYWNrYWdlTmFtZSwgMCkudWlkOworICAgICAgICAgICAgaWYgKHBtLmNoZWNrU2lnbmF0dXJlcyhjYWxsZXJVaWQsIHNlcnZpY2VVaWQpID09IFBhY2thZ2VNYW5hZ2VyLlNJR05BVFVSRV9NQVRDSCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24odGFnICsgIjogQ2FsbGVyIGNlcnRpZmljYXRlIGRvZXMgbm90IG1hdGNoIHRoYXQgZm9yIC0gIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRhZyArICI6ICIgKyBwYWNrYWdlTmFtZSArICIgcGFja2FnZSBub3QgZm91bmQuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKICAgICAgKiBIaWRlIHRoaXMgY2xhc3Mgc2luY2UgaXQgaXMgbm90IHBhcnQgb2YgYXBpLAogICAgICAqIGJ1dCBjdXJyZW50IHVuaXR0ZXN0IGZyYW1ld29yayByZXF1aXJlcyBpdCB0byBiZSBwdWJsaWMKICAgICAgKiBAaGlkZQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jTWFuYWdlci5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jTWFuYWdlci5qYXZhCmluZGV4IDcxZDhkOTkuLjVhZGQ1YjAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2NvbnRlbnQvU3luY01hbmFnZXIuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNNYW5hZ2VyLmphdmEKQEAgLTMxLDYgKzMxLDcgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSVN5bmNBZGFwdGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JU3luY0NvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LklTeW5jU2VydmljZUFkYXB0ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklTeW5jU3RhdHVzT2JzZXJ2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwpAQCAtODUsMTAgKzg2LDggQEAKIAogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CkBAIC05OSw3ICs5OCw2IEBACiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7CiAKIC8qKgogICogQGhpZGUKQEAgLTIwMiw4ICsyMDAsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIkludGVybmFsIHN0b3JhZ2UgaXMgbG93LiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgbVN0b3JhZ2VJc0xvdyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVTeW5jKG51bGwgLyogYW55IGFjY291bnQgKi8sIFVzZXJIYW5kbGUuVVNFUl9BTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLyogYW55IGF1dGhvcml0eSAqLyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVTeW5jKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludC5VU0VSX0FMTF9QUk9WSURFUl9BTExfQUNDT1VOVFNfQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIC8qIGFueSBzeW5jICovKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChJbnRlbnQuQUNUSU9OX0RFVklDRV9TVE9SQUdFX09LLmVxdWFscyhhY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJJbnRlcm5hbCBzdG9yYWdlIGlzIG9rLiIpOwpAQCAtMjIxLDE5ICsyMjAsNiBAQAogICAgICAgICB9CiAgICAgfTsKIAotICAgIHByaXZhdGUgQnJvYWRjYXN0UmVjZWl2ZXIgbUJhY2tncm91bmREYXRhU2V0dGluZ0NoYW5nZWQgPSBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgICAgICBpZiAoZ2V0Q29ubmVjdGl2aXR5TWFuYWdlcigpLmdldEJhY2tncm91bmREYXRhU2V0dGluZygpKSB7Ci0gICAgICAgICAgICAgICAgc2NoZWR1bGVTeW5jKG51bGwgLyogYWNjb3VudCAqLywgVXNlckhhbmRsZS5VU0VSX0FMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNPcGVyYXRpb24uUkVBU09OX0JBQ0tHUk9VTkRfREFUQV9TRVRUSU5HU19DSEFOR0VELAotICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKiBhdXRob3JpdHkgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQnVuZGxlKCksIDAgLyogZGVsYXkgKi8sIDAgLyogZGVsYXkgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBvbmx5VGhvc2VXaXRoVW5rbm93blN5bmNhYmxlU3RhdGUgKi8pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQogICAgIHByaXZhdGUgQnJvYWRjYXN0UmVjZWl2ZXIgbUFjY291bnRzVXBkYXRlZFJlY2VpdmVyID0gbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewpAQCAtMjc4LDE2ICsyNjQsMTYgQEAKICAgICAgICAgICAgIGRvRGF0YWJhc2VDbGVhbnVwKCk7CiAgICAgICAgIH0KIAorICAgICAgICBBY2NvdW50QW5kVXNlcltdIGFjY291bnRzID0gbVJ1bm5pbmdBY2NvdW50czsKICAgICAgICAgZm9yIChBY3RpdmVTeW5jQ29udGV4dCBjdXJyZW50U3luY0NvbnRleHQgOiBtQWN0aXZlU3luY0NvbnRleHRzKSB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRhaW5zQWNjb3VudEFuZFVzZXIobVJ1bm5pbmdBY2NvdW50cywKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLmFjY291bnQsCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi51c2VySWQpKSB7CisgICAgICAgICAgICBpZiAoIWNvbnRhaW5zQWNjb3VudEFuZFVzZXIoYWNjb3VudHMsCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi50YXJnZXQuYWNjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLnRhcmdldC51c2VySWQpKSB7CiAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiY2FuY2VsaW5nIHN5bmMgc2luY2UgdGhlIGFjY291bnQgaXMgbm8gbG9uZ2VyIHJ1bm5pbmciKTsKICAgICAgICAgICAgICAgICBzZW5kU3luY0ZpbmlzaGVkT3JDYW5jZWxlZE1lc3NhZ2UoY3VycmVudFN5bmNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKiBubyByZXN1bHQgc2luY2UgdGhpcyBpcyBhIGNhbmNlbCAqLyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgICAgICAvLyB3ZSBtdXN0IGRvIHRoaXMgc2luY2Ugd2UgZG9uJ3QgYm90aGVyIHNjaGVkdWxpbmcgYWxhcm1zIHdoZW4KICAgICAgICAgLy8gdGhlIGFjY291bnRzIGFyZSBub3Qgc2V0IHlldAogICAgICAgICBzZW5kQ2hlY2tBbGFybXNNZXNzYWdlKCk7CkBAIC0zMTYsOSArMzAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJSZWNvbm5lY3Rpb24gZGV0ZWN0ZWQ6IGNsZWFyaW5nIGFsbCBiYWNrb2ZmcyIpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZChtU3luY1F1ZXVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuY2xlYXJBbGxCYWNrb2Zmc0xvY2tlZChtU3luY1F1ZXVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuY2xlYXJBbGxCYWNrb2ZmcyhtU3luY1F1ZXVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2VuZENoZWNrQWxhcm1zTWVzc2FnZSgpOwogICAgICAgICAgICAgfQpAQCAtMzg0LDEyICszNjgsMTcgQEAKICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lID0gU3luY1N0b3JhZ2VFbmdpbmUuZ2V0U2luZ2xldG9uKCk7CiAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5zZXRPblN5bmNSZXF1ZXN0TGlzdGVuZXIobmV3IE9uU3luY1JlcXVlc3RMaXN0ZW5lcigpIHsKICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25TeW5jUmVxdWVzdChBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIGludCByZWFzb24sIFN0cmluZyBhdXRob3JpdHksCi0gICAgICAgICAgICAgICAgICAgIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgICAgICAgICBzY2hlZHVsZVN5bmMoYWNjb3VudCwgdXNlcklkLCByZWFzb24sIGF1dGhvcml0eSwgZXh0cmFzLAotICAgICAgICAgICAgICAgICAgICAwIC8qIG5vIGRlbGF5ICovLAotICAgICAgICAgICAgICAgICAgICAwIC8qIG5vIGRlbGF5ICovLAotICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblN5bmNSZXF1ZXN0KFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm8sIGludCByZWFzb24sIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVTeW5jKGluZm8uYWNjb3VudCwgaW5mby51c2VySWQsIHJlYXNvbiwgaW5mby5wcm92aWRlciwgZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBubyBmbGV4ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBydW4gaW1tZWRpYXRlbHkgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlU3luYyhpbmZvLnNlcnZpY2UsIGluZm8udXNlcklkLCByZWFzb24sIGV4dHJhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qIG5vIGZsZXggKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBydW4gaW1tZWRpYXRlbHkgKi8pOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKQEAgLTQyMSw5ICs0MTAsNiBAQAogICAgICAgICAgICAgY29udGV4dC5yZWdpc3RlclJlY2VpdmVyKG1Cb290Q29tcGxldGVkUmVjZWl2ZXIsIGludGVudEZpbHRlcik7CiAgICAgICAgIH0KIAotICAgICAgICBpbnRlbnRGaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKENvbm5lY3Rpdml0eU1hbmFnZXIuQUNUSU9OX0JBQ0tHUk9VTkRfREFUQV9TRVRUSU5HX0NIQU5HRUQpOwotICAgICAgICBjb250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIobUJhY2tncm91bmREYXRhU2V0dGluZ0NoYW5nZWQsIGludGVudEZpbHRlcik7Ci0KICAgICAgICAgaW50ZW50RmlsdGVyID0gbmV3IEludGVudEZpbHRlcihJbnRlbnQuQUNUSU9OX0RFVklDRV9TVE9SQUdFX0xPVyk7CiAgICAgICAgIGludGVudEZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9ERVZJQ0VfU1RPUkFHRV9PSyk7CiAgICAgICAgIGNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcihtU3RvcmFnZUludGVudFJlY2VpdmVyLCBpbnRlbnRGaWx0ZXIpOwpAQCAtNTM4LDExICs1MjQsNzggQEAKIAogICAgIHByaXZhdGUgdm9pZCBlbnN1cmVBbGFybVNlcnZpY2UoKSB7CiAgICAgICAgIGlmIChtQWxhcm1TZXJ2aWNlID09IG51bGwpIHsKLSAgICAgICAgICAgIG1BbGFybVNlcnZpY2UgPSAoQWxhcm1NYW5hZ2VyKW1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BTEFSTV9TRVJWSUNFKTsKKyAgICAgICAgICAgIG1BbGFybVNlcnZpY2UgPSAoQWxhcm1NYW5hZ2VyKSBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQUxBUk1fU0VSVklDRSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKKyAgICAgKiBJbml0aWF0ZSBhIHN5bmMgdXNpbmcgdGhlIG5ldyBhbm9ueW1vdXMgc2VydmljZSBBUEkuCisgICAgICogQHBhcmFtIGNuYW1lIFN5bmNTZXJ2aWNlIGNvbXBvbmVudCBib3VuZCB0byBpbiBvcmRlciB0byBwZXJmb3JtIHRoZSBzeW5jLiAKKyAgICAgKiBAcGFyYW0gdXNlcklkIHRoZSBpZCBvZiB0aGUgdXNlciB3aG9zZSBhY2NvdW50cyBhcmUgdG8gYmUgc3luY2VkLiBJZiB1c2VySWQgaXMgVVNFUl9BTEwsCisgICAgICogICAgICAgICAgdGhlbiBhbGwgdXNlcnMnIGFjY291bnRzIGFyZSBjb25zaWRlcmVkLgorICAgICAqIEBwYXJhbSB1aWQgTGludXggdWlkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IGlzIHBlcmZvcm1pbmcgdGhlIHN5bmMuIAorICAgICAqIEBwYXJhbSBleHRyYXMgYSBNYXAgb2YgU3luY0FkYXB0ZXItc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gY29udHJvbAorICAgICAqICAgICAgICAgIHN5bmNzIG9mIGEgc3BlY2lmaWMgcHJvdmlkZXIuIENhbm5vdCBiZSBudWxsLgorICAgICAqIEBwYXJhbSBiZWZvcmVSdW5UaW1lTWlsbGlzIG1pbGxpc2Vjb25kcyBiZWZvcmUgPGNvZGU+cnVudGltZU1pbGxpczwvY29kZT4gdGhhdCB0aGlzIHN5bmMgbWF5CisgICAgICogYmUgcnVuLgorICAgICAqIEBwYXJhbSBydW50aW1lTWlsbGlzIG1pbGxpc2Vjb25kcyBmcm9tIG5vdyBieSB3aGljaCB0aGlzIHN5bmMgbXVzdCBiZSBydW4uCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2NoZWR1bGVTeW5jKENvbXBvbmVudE5hbWUgY25hbWUsIGludCB1c2VySWQsIGludCB1aWQsIEJ1bmRsZSBleHRyYXMsCisgICAgICAgICAgICBsb25nIGJlZm9yZVJ1blRpbWVNaWxsaXMsIGxvbmcgcnVudGltZU1pbGxpcykgeworICAgICAgICBib29sZWFuIGlzTG9nZ2FibGUgPSBMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKTsKKyAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIm9uZSBvZmYgc3luYyBmb3I6ICIgKyBjbmFtZSArICIgIiArIGV4dHJhcy50b1N0cmluZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIEJvb2xlYW4gZXhwZWRpdGVkID0gZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0VYUEVESVRFRCwgZmFsc2UpOworICAgICAgICBpZiAoZXhwZWRpdGVkKSB7CisgICAgICAgICAgICBydW50aW1lTWlsbGlzID0gLTE7IC8vIHRoaXMgbWVhbnMgc2NoZWR1bGUgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBpZ25vcmVTZXR0aW5ncyA9CisgICAgICAgICAgICAgICAgZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9TRVRUSU5HUywgZmFsc2UpOworICAgICAgICBpbnQgc291cmNlID0gU3luY1N0b3JhZ2VFbmdpbmUuU09VUkNFX1NFUlZJQ0U7CisgICAgICAgIGJvb2xlYW4gaXNFbmFibGVkID0gbVN5bmNTdG9yYWdlRW5naW5lLmdldElzVGFyZ2V0U2VydmljZUFjdGl2ZShjbmFtZSwgdXNlcklkKTsKKyAgICAgICAgLy8gT25seSBzY2hlZHVsZSB0aGlzIHN5bmMgaWYKKyAgICAgICAgLy8gICAtIHdlJ3ZlIGV4cGxpY2l0bHkgYmVlbiB0b2xkIHRvIGlnbm9yZSBzZXR0aW5ncy4KKyAgICAgICAgLy8gICAtIGdsb2JhbCBzeW5jIGlzIGVuYWJsZWQgZm9yIHRoaXMgdXNlci4KKyAgICAgICAgYm9vbGVhbiBzeW5jQWxsb3dlZCA9CisgICAgICAgICAgICAgICAgaWdub3JlU2V0dGluZ3MKKyAgICAgICAgICAgICAgICB8fCBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0TWFzdGVyU3luY0F1dG9tYXRpY2FsbHkodXNlcklkKTsKKyAgICAgICAgaWYgKCFzeW5jQWxsb3dlZCkgeworICAgICAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJzY2hlZHVsZVN5bmM6IHN5bmMgb2YgIiArIGNuYW1lICsgIiBub3QgYWxsb3dlZCwgZHJvcHBpbmcgcmVxdWVzdC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzRW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJzY2hlZHVsZVN5bmM6ICIgKyBjbmFtZSArICIgaXMgbm90IGVuYWJsZWQsIGRyb3BwaW5nIHJlcXVlc3QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBpbmZvID0gbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KGNuYW1lLCB1c2VySWQpOworICAgICAgICBQYWlyPExvbmcsIExvbmc+IGJhY2tvZmYgPSBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0QmFja29mZihpbmZvKTsKKyAgICAgICAgbG9uZyBkZWxheVVudGlsID0gbVN5bmNTdG9yYWdlRW5naW5lLmdldERlbGF5VW50aWxUaW1lKGluZm8pOworICAgICAgICBmaW5hbCBsb25nIGJhY2tvZmZUaW1lID0gYmFja29mZiAhPSBudWxsID8gYmFja29mZi5maXJzdCA6IDA7CisgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAic2NoZWR1bGUgU3luYzoiCisgICAgICAgICAgICAgICAgICAgICAgICArICIsIGRlbGF5IHVudGlsICIgKyBkZWxheVVudGlsCisgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJ1biBieSAiICsgcnVudGltZU1pbGxpcworICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBmbGV4ICIgKyBiZWZvcmVSdW5UaW1lTWlsbGlzCisgICAgICAgICAgICAgICAgICAgICAgICArICIsIHNvdXJjZSAiICsgc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICArICIsIHN5bmMgc2VydmljZSAiICsgY25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgZXh0cmFzICIgKyBleHRyYXMpOworICAgICAgICB9CisgICAgICAgIHNjaGVkdWxlU3luY09wZXJhdGlvbigKKyAgICAgICAgICAgICAgICBuZXcgU3luY09wZXJhdGlvbihjbmFtZSwgdXNlcklkLCB1aWQsIHNvdXJjZSwgZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZU1pbGxpcyAvKiBydW50aW1lICovLAorICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlUnVuVGltZU1pbGxpcyAvKiBmbGV4dGltZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tvZmZUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlVbnRpbCkpOworICAgIH0KKworICAgIC8qKgogICAgICAqIEluaXRpYXRlIGEgc3luYy4gVGhpcyBjYW4gc3RhcnQgYSBzeW5jIGZvciBhbGwgcHJvdmlkZXJzCiAgICAgICogKHBhc3MgbnVsbCB0byB1cmwsIHNldCBvbmx5VGlja2xhYmxlIHRvIGZhbHNlKSwgb25seSB0aG9zZQogICAgICAqIHByb3ZpZGVycyB0aGF0IGFyZSBtYXJrZWQgYXMgdGlja2xhYmxlIChwYXNzIG51bGwgdG8gdXJsLApAQCAtNTg4LDkgKzY0MSw2IEBACiAgICAgICAgICAgICBsb25nIHJ1bnRpbWVNaWxsaXMsIGJvb2xlYW4gb25seVRob3NlV2l0aFVua293blN5bmNhYmxlU3RhdGUpIHsKICAgICAgICAgYm9vbGVhbiBpc0xvZ2dhYmxlID0gTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSk7CiAKLSAgICAgICAgZmluYWwgYm9vbGVhbiBiYWNrZ3JvdW5kRGF0YVVzYWdlQWxsb3dlZCA9ICFtQm9vdENvbXBsZXRlZCB8fAotICAgICAgICAgICAgICAgIGdldENvbm5lY3Rpdml0eU1hbmFnZXIoKS5nZXRCYWNrZ3JvdW5kRGF0YVNldHRpbmcoKTsKLQogICAgICAgICBpZiAoZXh0cmFzID09IG51bGwpIHsKICAgICAgICAgICAgIGV4dHJhcyA9IG5ldyBCdW5kbGUoKTsKICAgICAgICAgfQpAQCAtNjA3LDggKzY1Nyw2IEBACiAgICAgICAgIGlmIChyZXF1ZXN0ZWRBY2NvdW50ICE9IG51bGwgJiYgdXNlcklkICE9IFVzZXJIYW5kbGUuVVNFUl9BTEwpIHsKICAgICAgICAgICAgIGFjY291bnRzID0gbmV3IEFjY291bnRBbmRVc2VyW10geyBuZXcgQWNjb3VudEFuZFVzZXIocmVxdWVzdGVkQWNjb3VudCwgdXNlcklkKSB9OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gaWYgdGhlIGFjY291bnRzIGFyZW4ndCBjb25maWd1cmVkIHlldCB0aGVuIHdlIGNhbid0IHN1cHBvcnQgYW4gYWNjb3VudC1sZXNzCi0gICAgICAgICAgICAvLyBzeW5jIHJlcXVlc3QKICAgICAgICAgICAgIGFjY291bnRzID0gbVJ1bm5pbmdBY2NvdW50czsKICAgICAgICAgICAgIGlmIChhY2NvdW50cy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CkBAIC02ODMsMTIgKzczMSwxMCBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBhbHdheXMgYWxsb3cgaWYgdGhlIGlzU3luY2FibGUgc3RhdGUgaXMgdW5rbm93bgogICAgICAgICAgICAgICAgIGJvb2xlYW4gc3luY0FsbG93ZWQgPQotICAgICAgICAgICAgICAgICAgICAgICAgKGlzU3luY2FibGUgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgKGlzU3luY2FibGUgPCAwKSAvLyBhbHdheXMgYWxsb3cgaWYgdGhlIGlzU3luY2FibGUgc3RhdGUgaXMgdW5rbm93bgogICAgICAgICAgICAgICAgICAgICAgICAgfHwgaWdub3JlU2V0dGluZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChiYWNrZ3JvdW5kRGF0YVVzYWdlQWxsb3dlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0TWFzdGVyU3luY0F1dG9tYXRpY2FsbHkoYWNjb3VudC51c2VySWQpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAobVN5bmNTdG9yYWdlRW5naW5lLmdldE1hc3RlclN5bmNBdXRvbWF0aWNhbGx5KGFjY291bnQudXNlcklkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0U3luY0F1dG9tYXRpY2FsbHkoYWNjb3VudC5hY2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQudXNlcklkLCBhdXRob3JpdHkpKTsKICAgICAgICAgICAgICAgICBpZiAoIXN5bmNBbGxvd2VkKSB7CkBAIC02OTgsMTEgKzc0NCwxMiBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFBhaXI8TG9uZywgTG9uZz4gYmFja29mZiA9IG1TeW5jU3RvcmFnZUVuZ2luZQotICAgICAgICAgICAgICAgICAgICAgICAgLmdldEJhY2tvZmYoYWNjb3VudC5hY2NvdW50LCBhY2NvdW50LnVzZXJJZCwgYXV0aG9yaXR5KTsKLSAgICAgICAgICAgICAgICBsb25nIGRlbGF5VW50aWwgPSBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0RGVsYXlVbnRpbFRpbWUoYWNjb3VudC5hY2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC51c2VySWQsIGF1dGhvcml0eSk7CisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgaW5mbyA9CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQuYWNjb3VudCwgYXV0aG9yaXR5LCBhY2NvdW50LnVzZXJJZCk7CisgICAgICAgICAgICAgICAgUGFpcjxMb25nLCBMb25nPiBiYWNrb2ZmID0gbVN5bmNTdG9yYWdlRW5naW5lLmdldEJhY2tvZmYoaW5mbyk7CisgICAgICAgICAgICAgICAgbG9uZyBkZWxheVVudGlsID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5nZXREZWxheVVudGlsVGltZShpbmZvKTsKICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGJhY2tvZmZUaW1lID0gYmFja29mZiAhPSBudWxsID8gYmFja29mZi5maXJzdCA6IDA7CiAgICAgICAgICAgICAgICAgaWYgKGlzU3luY2FibGUgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpc2F0aW9uIHN5bmMuCkBAIC03MTIsNiArNzU5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgInNjaGVkdWxlIGluaXRpYWxpc2F0aW9uIFN5bmM6IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIGRlbGF5IHVudGlsICIgKyBkZWxheVVudGlsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcnVuIGJ5ICIgKyAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgZmxleCAiICsgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHNvdXJjZSAiICsgc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgYWNjb3VudCAiICsgYWNjb3VudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIGF1dGhvcml0eSAiICsgYXV0aG9yaXR5CkBAIC03ODcsMTMgKzgzNSwxMiBAQAogICAgICAgICBtU3luY0hhbmRsZXIuc2VuZE1lc3NhZ2UobXNnKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgc2VuZENhbmNlbFN5bmNzTWVzc2FnZShmaW5hbCBBY2NvdW50IGFjY291bnQsIGZpbmFsIGludCB1c2VySWQsCi0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgcHJpdmF0ZSB2b2lkIHNlbmRDYW5jZWxTeW5jc01lc3NhZ2UoZmluYWwgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgaW5mbywgQnVuZGxlIGV4dHJhcykgewogICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIExvZy52KFRBRywgInNlbmRpbmcgTUVTU0FHRV9DQU5DRUwiKTsKICAgICAgICAgTWVzc2FnZSBtc2cgPSBtU3luY0hhbmRsZXIub2J0YWluTWVzc2FnZSgpOwogICAgICAgICBtc2cud2hhdCA9IFN5bmNIYW5kbGVyLk1FU1NBR0VfQ0FOQ0VMOwotICAgICAgICBtc2cub2JqID0gUGFpci5jcmVhdGUoYWNjb3VudCwgYXV0aG9yaXR5KTsKLSAgICAgICAgbXNnLmFyZzEgPSB1c2VySWQ7CisgICAgICAgIG1zZy5zZXREYXRhKGV4dHJhcyk7CisgICAgICAgIG1zZy5vYmogPSBpbmZvOwogICAgICAgICBtU3luY0hhbmRsZXIuc2VuZE1lc3NhZ2UobXNnKTsKICAgICB9CiAKQEAgLTgxNiwxMCArODYzLDExIEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGNsZWFyQmFja29mZlNldHRpbmcoU3luY09wZXJhdGlvbiBvcCkgewotICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuc2V0QmFja29mZihvcC5hY2NvdW50LCBvcC51c2VySWQsIG9wLmF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5OT1RfSU5fQkFDS09GRl9NT0RFLCBTeW5jU3RvcmFnZUVuZ2luZS5OT1RfSU5fQkFDS09GRl9NT0RFKTsKKyAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLnNldEJhY2tvZmYob3AudGFyZ2V0LAorICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLk5PVF9JTl9CQUNLT0ZGX01PREUsCisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuTk9UX0lOX0JBQ0tPRkZfTU9ERSk7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVN5bmNRdWV1ZSkgewotICAgICAgICAgICAgbVN5bmNRdWV1ZS5vbkJhY2tvZmZDaGFuZ2VkKG9wLmFjY291bnQsIG9wLnVzZXJJZCwgb3AuYXV0aG9yaXR5LCAwKTsKKyAgICAgICAgICAgIG1TeW5jUXVldWUub25CYWNrb2ZmQ2hhbmdlZChvcC50YXJnZXQsIDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC04MjksNyArODc3LDcgQEAKICAgICAgICAgZmluYWwgbG9uZyBub3cgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKIAogICAgICAgICBmaW5hbCBQYWlyPExvbmcsIExvbmc+IHByZXZpb3VzU2V0dGluZ3MgPQotICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRCYWNrb2ZmKG9wLmFjY291bnQsIG9wLnVzZXJJZCwgb3AuYXV0aG9yaXR5KTsKKyAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0QmFja29mZihvcC50YXJnZXQpOwogICAgICAgICBsb25nIG5ld0RlbGF5SW5NcyA9IC0xOwogICAgICAgICBpZiAocHJldmlvdXNTZXR0aW5ncyAhPSBudWxsKSB7CiAgICAgICAgICAgICAvLyBkb24ndCBpbmNyZWFzZSBiYWNrb2ZmIGJlZm9yZSBjdXJyZW50IGJhY2tvZmYgaXMgZXhwaXJlZC4gVGhpcyB3aWxsIGhhcHBlbiBmb3Igb3AncwpAQCAtODYwLDE0ICs5MDgsMTIgQEAKIAogICAgICAgICBmaW5hbCBsb25nIGJhY2tvZmYgPSBub3cgKyBuZXdEZWxheUluTXM7CiAKLSAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLnNldEJhY2tvZmYob3AuYWNjb3VudCwgb3AudXNlcklkLCBvcC5hdXRob3JpdHksCi0gICAgICAgICAgICAgICAgYmFja29mZiwgbmV3RGVsYXlJbk1zKTsKLQorICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuc2V0QmFja29mZihvcC50YXJnZXQsIGJhY2tvZmYsIG5ld0RlbGF5SW5Ncyk7CiAgICAgICAgIG9wLmJhY2tvZmYgPSBiYWNrb2ZmOwogICAgICAgICBvcC51cGRhdGVFZmZlY3RpdmVSdW5UaW1lKCk7CiAKICAgICAgICAgc3luY2hyb25pemVkIChtU3luY1F1ZXVlKSB7Ci0gICAgICAgICAgICBtU3luY1F1ZXVlLm9uQmFja29mZkNoYW5nZWQob3AuYWNjb3VudCwgb3AudXNlcklkLCBvcC5hdXRob3JpdHksIGJhY2tvZmYpOworICAgICAgICAgICAgbVN5bmNRdWV1ZS5vbkJhY2tvZmZDaGFuZ2VkKG9wLnRhcmdldCwgYmFja29mZik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTg4MCwyMCArOTI2LDIwIEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBuZXdEZWxheVVudGlsVGltZSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lCi0gICAgICAgICAgICAgICAgLnNldERlbGF5VW50aWxUaW1lKG9wLmFjY291bnQsIG9wLnVzZXJJZCwgb3AuYXV0aG9yaXR5LCBuZXdEZWxheVVudGlsVGltZSk7CisgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5zZXREZWxheVVudGlsVGltZShvcC50YXJnZXQsIG5ld0RlbGF5VW50aWxUaW1lKTsKICAgICAgICAgc3luY2hyb25pemVkIChtU3luY1F1ZXVlKSB7Ci0gICAgICAgICAgICBtU3luY1F1ZXVlLm9uRGVsYXlVbnRpbFRpbWVDaGFuZ2VkKG9wLmFjY291bnQsIG9wLmF1dGhvcml0eSwgbmV3RGVsYXlVbnRpbFRpbWUpOworICAgICAgICAgICAgbVN5bmNRdWV1ZS5vbkRlbGF5VW50aWxUaW1lQ2hhbmdlZChvcC50YXJnZXQsIG5ld0RlbGF5VW50aWxUaW1lKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgotICAgICAqIENhbmNlbCB0aGUgYWN0aXZlIHN5bmMgaWYgaXQgbWF0Y2hlcyB0aGUgYXV0aG9yaXR5IGFuZCBhY2NvdW50LgotICAgICAqIEBwYXJhbSBhY2NvdW50IGxpbWl0IHRoZSBjYW5jZWxhdGlvbnMgdG8gc3luY3Mgd2l0aCB0aGlzIGFjY291bnQsIGlmIG5vbi1udWxsCi0gICAgICogQHBhcmFtIGF1dGhvcml0eSBsaW1pdCB0aGUgY2FuY2VsYXRpb25zIHRvIHN5bmNzIHdpdGggdGhpcyBhdXRob3JpdHksIGlmIG5vbi1udWxsCisgICAgICogQ2FuY2VsIHRoZSBhY3RpdmUgc3luYyBpZiBpdCBtYXRjaGVzIHRoZSB0YXJnZXQuCisgICAgICogQHBhcmFtIGluZm8gb2JqZWN0IGNvbnRhaW5pbmcgaW5mbyBhYm91dCB3aGljaCBzeW5jcyB0byBjYW5jZWwuIFRoZSB0YXJnZXQgY2FuCisgICAgICogaGF2ZSBudWxsIGFjY291bnQvcHJvdmlkZXIgaW5mbyB0byBzcGVjaWZ5IGFsbCBhY2NvdW50cy9wcm92aWRlcnMuCisgICAgICogQHBhcmFtIGV4dHJhcyBpZiBub24tbnVsbCwgc3BlY2lmaWVzIHRoZSBleGFjdCBzeW5jIHRvIHJlbW92ZS4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjYW5jZWxBY3RpdmVTeW5jKEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIGF1dGhvcml0eSkgewotICAgICAgICBzZW5kQ2FuY2VsU3luY3NNZXNzYWdlKGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5KTsKKyAgICBwdWJsaWMgdm9pZCBjYW5jZWxBY3RpdmVTeW5jKFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm8sIEJ1bmRsZSBleHRyYXMpIHsKKyAgICAgICAgc2VuZENhbmNlbFN5bmNzTWVzc2FnZShpbmZvLCBleHRyYXMpOwogICAgIH0KIAogICAgIC8qKgpAQCAtOTIyLDI0ICs5NjgsNDAgQEAKIAogICAgIC8qKgogICAgICAqIFJlbW92ZSBzY2hlZHVsZWQgc3luYyBvcGVyYXRpb25zLgotICAgICAqIEBwYXJhbSBhY2NvdW50IGxpbWl0IHRoZSByZW1vdmFscyB0byBvcGVyYXRpb25zIHdpdGggdGhpcyBhY2NvdW50LCBpZiBub24tbnVsbAotICAgICAqIEBwYXJhbSBhdXRob3JpdHkgbGltaXQgdGhlIHJlbW92YWxzIHRvIG9wZXJhdGlvbnMgd2l0aCB0aGlzIGF1dGhvcml0eSwgaWYgbm9uLW51bGwKKyAgICAgKiBAcGFyYW0gaW5mbyBsaW1pdCB0aGUgcmVtb3ZhbHMgdG8gb3BlcmF0aW9ucyB0aGF0IG1hdGNoIHRoaXMgdGFyZ2V0LiBUaGUgdGFyZ2V0IGNhbgorICAgICAqIGhhdmUgbnVsbCBhY2NvdW50L3Byb3ZpZGVyIGluZm8gdG8gc3BlY2lmeSBhbGwgYWNjb3VudHMvcHJvdmlkZXJzLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNsZWFyU2NoZWR1bGVkU3luY09wZXJhdGlvbnMoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgcHVibGljIHZvaWQgY2xlYXJTY2hlZHVsZWRTeW5jT3BlcmF0aW9ucyhTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBpbmZvKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVN5bmNRdWV1ZSkgewotICAgICAgICAgICAgbVN5bmNRdWV1ZS5yZW1vdmUoYWNjb3VudCwgdXNlcklkLCBhdXRob3JpdHkpOworICAgICAgICAgICAgbVN5bmNRdWV1ZS5yZW1vdmUoaW5mbywgbnVsbCAvKiBhbGwgb3BlcmF0aW9ucyAqLyk7CiAgICAgICAgIH0KLSAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLnNldEJhY2tvZmYoYWNjb3VudCwgdXNlcklkLCBhdXRob3JpdHksCisgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5zZXRCYWNrb2ZmKGluZm8sCiAgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuTk9UX0lOX0JBQ0tPRkZfTU9ERSwgU3luY1N0b3JhZ2VFbmdpbmUuTk9UX0lOX0JBQ0tPRkZfTU9ERSk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogUmVtb3ZlIGEgc3BlY2lmaWVkIHN5bmMsIGlmIGl0IGV4aXN0cy4KKyAgICAgKiBAcGFyYW0gaW5mbyBBdXRob3JpdHkgZm9yIHdoaWNoIHRoZSBzeW5jIGlzIHRvIGJlIHJlbW92ZWQuCisgICAgICogQHBhcmFtIGV4dHJhcyBleHRyYXMgYnVuZGxlIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHN5bmMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgY2FuY2VsU2NoZWR1bGVkU3luY09wZXJhdGlvbihTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBpbmZvLCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVN5bmNRdWV1ZSkgeworICAgICAgICAgICAgbVN5bmNRdWV1ZS5yZW1vdmUoaW5mbywgZXh0cmFzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXNldCB0aGUgYmFjay1vZmYgaWYgdGhlcmUgYXJlIG5vIG1vcmUgc3luY3MgcGVuZGluZy4KKyAgICAgICAgaWYgKCFtU3luY1N0b3JhZ2VFbmdpbmUuaXNTeW5jUGVuZGluZyhpbmZvKSkgeworICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLnNldEJhY2tvZmYoaW5mbywKKyAgICAgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuTk9UX0lOX0JBQ0tPRkZfTU9ERSwgU3luY1N0b3JhZ2VFbmdpbmUuTk9UX0lOX0JBQ0tPRkZfTU9ERSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICB2b2lkIG1heWJlUmVzY2hlZHVsZVN5bmMoU3luY1Jlc3VsdCBzeW5jUmVzdWx0LCBTeW5jT3BlcmF0aW9uIG9wZXJhdGlvbikgewogICAgICAgICBib29sZWFuIGlzTG9nZ2FibGUgPSBMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5ERUJVRyk7CiAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CiAgICAgICAgICAgICBMb2cuZChUQUcsICJlbmNvdW50ZXJlZCBlcnJvcihzKSBkdXJpbmcgdGhlIHN5bmM6ICIgKyBzeW5jUmVzdWx0ICsgIiwgIiArIG9wZXJhdGlvbik7CiAgICAgICAgIH0KIAotICAgICAgICBvcGVyYXRpb24gPSBuZXcgU3luY09wZXJhdGlvbihvcGVyYXRpb24pOworICAgICAgICBvcGVyYXRpb24gPSBuZXcgU3luY09wZXJhdGlvbihvcGVyYXRpb24sIDBMIC8qIG5ld1J1blRpbWVGcm9tTm93ICovKTsKIAogICAgICAgICAvLyBUaGUgU1lOQ19FWFRSQVNfSUdOT1JFX0JBQ0tPRkYgb25seSBhcHBsaWVzIHRvIHRoZSBmaXJzdCBhdHRlbXB0IHRvIHN5bmMgYSBnaXZlbgogICAgICAgICAvLyByZXF1ZXN0LiBSZXRyaWVzIG9mIHRoZSByZXF1ZXN0IHdpbGwgYWx3YXlzIGhvbm9yIHRoZSBiYWNrb2ZmLCBzbyBjbGVhciB0aGUKQEAgLTk0OCwyNSArMTAxMCwyOSBAQAogICAgICAgICAgICAgb3BlcmF0aW9uLmV4dHJhcy5yZW1vdmUoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9CQUNLT0ZGKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIElmIHRoaXMgc3luYyBhYm9ydGVkIGJlY2F1c2UgdGhlIGludGVybmFsIHN5bmMgbG9vcCByZXRyaWVkIHRvbyBtYW55IHRpbWVzIHRoZW4KLSAgICAgICAgLy8gICBkb24ndCByZXNjaGVkdWxlLiBPdGhlcndpc2Ugd2UgcmlzayBnZXR0aW5nIGludG8gYSByZXRyeSBsb29wLgotICAgICAgICAvLyBJZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZCB0byBzb21lIGV4dGVudCB0aGVuIHJldHJ5IGltbWVkaWF0ZWx5LgotICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIHR3by13YXkgc3luYyB0aGVuIHJldHJ5IHNvZnQgZXJyb3JzIHdpdGggYW4gZXhwb25lbnRpYWwgYmFja29mZi4KLSAgICAgICAgLy8gSWYgdGhpcyB3YXMgYW4gdXB3YXJkIHN5bmMgdGhlbiBzY2hlZHVsZSBhIHR3by13YXkgc3luYyBpbW1lZGlhdGVseS4KLSAgICAgICAgLy8gT3RoZXJ3aXNlIGRvIG5vdCByZXNjaGVkdWxlLgogICAgICAgICBpZiAob3BlcmF0aW9uLmV4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19ET19OT1RfUkVUUlksIGZhbHNlKSkgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAibm90IHJldHJ5aW5nIHN5bmMgb3BlcmF0aW9uIGJlY2F1c2UgU1lOQ19FWFRSQVNfRE9fTk9UX1JFVFJZIHdhcyBzcGVjaWZpZWQgIgotICAgICAgICAgICAgICAgICAgICArIG9wZXJhdGlvbik7CisgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgeworICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIm5vdCByZXRyeWluZyBzeW5jIG9wZXJhdGlvbiBiZWNhdXNlIFNZTkNfRVhUUkFTX0RPX05PVF9SRVRSWSB3YXMgc3BlY2lmaWVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgb3BlcmF0aW9uKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24uZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX1VQTE9BRCwgZmFsc2UpCiAgICAgICAgICAgICAgICAgJiYgIXN5bmNSZXN1bHQuc3luY0FscmVhZHlJblByb2dyZXNzKSB7CisgICAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBhbiB1cHdhcmQgc3luYyB0aGVuIHNjaGVkdWxlIGEgdHdvLXdheSBzeW5jIGltbWVkaWF0ZWx5LgogICAgICAgICAgICAgb3BlcmF0aW9uLmV4dHJhcy5yZW1vdmUoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX1VQTE9BRCk7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJyZXRyeWluZyBzeW5jIG9wZXJhdGlvbiBhcyBhIHR3by13YXkgc3luYyBiZWNhdXNlIGFuIHVwbG9hZC1vbmx5IHN5bmMgIgotICAgICAgICAgICAgICAgICAgICArICJlbmNvdW50ZXJlZCBhbiBlcnJvcjogIiArIG9wZXJhdGlvbik7CisgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgeworICAgICAgICAgICAgICAgIExvZy5kKFRBRywgInJldHJ5aW5nIHN5bmMgb3BlcmF0aW9uIGFzIGEgdHdvLXdheSBzeW5jIGJlY2F1c2UgYW4gdXBsb2FkLW9ubHkgc3luYyAiCisgICAgICAgICAgICAgICAgICAgICAgICArICJlbmNvdW50ZXJlZCBhbiBlcnJvcjogIiArIG9wZXJhdGlvbik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBzY2hlZHVsZVN5bmNPcGVyYXRpb24ob3BlcmF0aW9uKTsKICAgICAgICAgfSBlbHNlIGlmIChzeW5jUmVzdWx0LnRvb01hbnlSZXRyaWVzKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJub3QgcmV0cnlpbmcgc3luYyBvcGVyYXRpb24gYmVjYXVzZSBpdCByZXRyaWVkIHRvbyBtYW55IHRpbWVzOiAiCi0gICAgICAgICAgICAgICAgICAgICsgb3BlcmF0aW9uKTsKKyAgICAgICAgICAgIC8vIElmIHRoaXMgc3luYyBhYm9ydGVkIGJlY2F1c2UgdGhlIGludGVybmFsIHN5bmMgbG9vcCByZXRyaWVkIHRvbyBtYW55IHRpbWVzIHRoZW4KKyAgICAgICAgICAgIC8vICAgZG9uJ3QgcmVzY2hlZHVsZS4gT3RoZXJ3aXNlIHdlIHJpc2sgZ2V0dGluZyBpbnRvIGEgcmV0cnkgbG9vcC4KKyAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAibm90IHJldHJ5aW5nIHN5bmMgb3BlcmF0aW9uIGJlY2F1c2UgaXQgcmV0cmllZCB0b28gbWFueSB0aW1lczogIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBvcGVyYXRpb24pOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHN5bmNSZXN1bHQubWFkZVNvbWVQcm9ncmVzcygpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZCB0byBzb21lIGV4dGVudCB0aGVuIHJldHJ5IGltbWVkaWF0ZWx5LgogICAgICAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJyZXRyeWluZyBzeW5jIG9wZXJhdGlvbiBiZWNhdXNlIGV2ZW4gdGhvdWdoIGl0IGhhZCBhbiBlcnJvciAiCiAgICAgICAgICAgICAgICAgICAgICAgICArICJpdCBhY2hpZXZlZCBzb21lIHN1Y2Nlc3MiKTsKQEAgLTk3OSwxOSArMTA0NSwxOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2NoZWR1bGVTeW5jT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgIG5ldyBTeW5jT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uYWNjb3VudCwgb3BlcmF0aW9uLnVzZXJJZCwKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLnJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLnN5bmNTb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi5hdXRob3JpdHksIG9wZXJhdGlvbi5leHRyYXMsCi0gICAgICAgICAgICAgICAgICAgIERFTEFZX1JFVFJZX1NZTkNfSU5fUFJPR1JFU1NfSU5fU0VDT05EUyAqIDEwMDAsIG9wZXJhdGlvbi5mbGV4VGltZSwKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLmJhY2tvZmYsIG9wZXJhdGlvbi5kZWxheVVudGlsLCBvcGVyYXRpb24uYWxsb3dQYXJhbGxlbFN5bmNzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBERUxBWV9SRVRSWV9TWU5DX0lOX1BST0dSRVNTX0lOX1NFQ09ORFMgKiAxMDAwIC8qIG5ld1J1blRpbWVGcm9tTm93ICovKQorICAgICAgICAgICAgICAgICk7CiAgICAgICAgIH0gZWxzZSBpZiAoc3luY1Jlc3VsdC5oYXNTb2Z0RXJyb3IoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSB0d28td2F5IHN5bmMgdGhlbiByZXRyeSBzb2Z0IGVycm9ycyB3aXRoIGFuIGV4cG9uZW50aWFsIGJhY2tvZmYuCiAgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgewogICAgICAgICAgICAgICAgIExvZy5kKFRBRywgInJldHJ5aW5nIHN5bmMgb3BlcmF0aW9uIGJlY2F1c2UgaXQgZW5jb3VudGVyZWQgYSBzb2Z0IGVycm9yOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICArIG9wZXJhdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzY2hlZHVsZVN5bmNPcGVyYXRpb24ob3BlcmF0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSBkbyBub3QgcmVzY2hlZHVsZS4KICAgICAgICAgICAgIExvZy5kKFRBRywgIm5vdCByZXRyeWluZyBzeW5jIG9wZXJhdGlvbiBiZWNhdXNlIHRoZSBlcnJvciBpcyBhIGhhcmQgZXJyb3I6ICIKICAgICAgICAgICAgICAgICAgICAgKyBvcGVyYXRpb24pOwogICAgICAgICB9CkBAIC0xMDI0LDkgKzEwODksMTIgQEAKICAgICAgICAgdXBkYXRlUnVubmluZ0FjY291bnRzKCk7CiAKICAgICAgICAgY2FuY2VsQWN0aXZlU3luYygKLSAgICAgICAgICAgICAgICBudWxsIC8qIGFueSBhY2NvdW50ICovLAotICAgICAgICAgICAgICAgIHVzZXJJZCwKLSAgICAgICAgICAgICAgICBudWxsIC8qIGFueSBhdXRob3JpdHkgKi8pOworICAgICAgICAgICAgICAgIG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLyogYW55IGFjY291bnQgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICBudWxsIC8qIGFueSBhdXRob3JpdHkgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VySWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKiBhbnkgc3luYy4gKi8KKyAgICAgICAgICAgICAgICApOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBvblVzZXJSZW1vdmVkKGludCB1c2VySWQpIHsKQEAgLTEwMzUsNyArMTEwMyw3IEBACiAgICAgICAgIC8vIENsZWFuIHVwIHRoZSBzdG9yYWdlIGVuZ2luZSBkYXRhYmFzZQogICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuZG9EYXRhYmFzZUNsZWFudXAobmV3IEFjY291bnRbMF0sIHVzZXJJZCk7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVN5bmNRdWV1ZSkgewotICAgICAgICAgICAgbVN5bmNRdWV1ZS5yZW1vdmVVc2VyKHVzZXJJZCk7CisgICAgICAgICAgICBtU3luY1F1ZXVlLnJlbW92ZVVzZXJMb2NrZWQodXNlcklkKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTA0Nyw2ICsxMTE1LDcgQEAKICAgICAgICAgZmluYWwgU3luY09wZXJhdGlvbiBtU3luY09wZXJhdGlvbjsKICAgICAgICAgZmluYWwgbG9uZyBtSGlzdG9yeVJvd0lkOwogICAgICAgICBJU3luY0FkYXB0ZXIgbVN5bmNBZGFwdGVyOworICAgICAgICBJU3luY1NlcnZpY2VBZGFwdGVyIG1TeW5jU2VydmljZUFkYXB0ZXI7CiAgICAgICAgIGZpbmFsIGxvbmcgbVN0YXJ0VGltZTsKICAgICAgICAgbG9uZyBtVGltZW91dFN0YXJ0VGltZTsKICAgICAgICAgYm9vbGVhbiBtQm91bmQ7CkBAIC0xMDcyLDEwICsxMTQxLDEwIEBACiAgICAgICAgICAgICBtU3luY09wZXJhdGlvbiA9IHN5bmNPcGVyYXRpb247CiAgICAgICAgICAgICBtSGlzdG9yeVJvd0lkID0gaGlzdG9yeVJvd0lkOwogICAgICAgICAgICAgbVN5bmNBZGFwdGVyID0gbnVsbDsKKyAgICAgICAgICAgIG1TeW5jU2VydmljZUFkYXB0ZXIgPSBudWxsOwogICAgICAgICAgICAgbVN0YXJ0VGltZSA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwogICAgICAgICAgICAgbVRpbWVvdXRTdGFydFRpbWUgPSBtU3RhcnRUaW1lOwotICAgICAgICAgICAgbVN5bmNXYWtlTG9jayA9IG1TeW5jSGFuZGxlci5nZXRTeW5jV2FrZUxvY2soCi0gICAgICAgICAgICAgICAgICAgIG1TeW5jT3BlcmF0aW9uLmFjY291bnQsIG1TeW5jT3BlcmF0aW9uLmF1dGhvcml0eSk7CisgICAgICAgICAgICBtU3luY1dha2VMb2NrID0gbVN5bmNIYW5kbGVyLmdldFN5bmNXYWtlTG9jayhtU3luY09wZXJhdGlvbik7CiAgICAgICAgICAgICBtU3luY1dha2VMb2NrLnNldFdvcmtTb3VyY2UobmV3IFdvcmtTb3VyY2Uoc3luY0FkYXB0ZXJVaWQpKTsKICAgICAgICAgICAgIG1TeW5jV2FrZUxvY2suYWNxdWlyZSgpOwogICAgICAgICB9CkBAIC0xMTAyLDcgKzExNzEsNyBAQAogICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VDb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBuYW1lLCBJQmluZGVyIHNlcnZpY2UpIHsKICAgICAgICAgICAgIE1lc3NhZ2UgbXNnID0gbVN5bmNIYW5kbGVyLm9idGFpbk1lc3NhZ2UoKTsKICAgICAgICAgICAgIG1zZy53aGF0ID0gU3luY0hhbmRsZXIuTUVTU0FHRV9TRVJWSUNFX0NPTk5FQ1RFRDsKLSAgICAgICAgICAgIG1zZy5vYmogPSBuZXcgU2VydmljZUNvbm5lY3Rpb25EYXRhKHRoaXMsIElTeW5jQWRhcHRlci5TdHViLmFzSW50ZXJmYWNlKHNlcnZpY2UpKTsKKyAgICAgICAgICAgIG1zZy5vYmogPSBuZXcgU2VydmljZUNvbm5lY3Rpb25EYXRhKHRoaXMsIHNlcnZpY2UpOwogICAgICAgICAgICAgbVN5bmNIYW5kbGVyLnNlbmRNZXNzYWdlKG1zZyk7CiAgICAgICAgIH0KIApAQCAtMTExMywxMyArMTE4MiwxMyBAQAogICAgICAgICAgICAgbVN5bmNIYW5kbGVyLnNlbmRNZXNzYWdlKG1zZyk7CiAgICAgICAgIH0KIAotICAgICAgICBib29sZWFuIGJpbmRUb1N5bmNBZGFwdGVyKFJlZ2lzdGVyZWRTZXJ2aWNlc0NhY2hlLlNlcnZpY2VJbmZvIGluZm8sIGludCB1c2VySWQpIHsKKyAgICAgICAgYm9vbGVhbiBiaW5kVG9TeW5jQWRhcHRlcihDb21wb25lbnROYW1lIHNlcnZpY2VDb21wb25lbnQsIGludCB1c2VySWQpIHsKICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImJpbmRUb1N5bmNBZGFwdGVyOiAiICsgaW5mby5jb21wb25lbnROYW1lICsgIiwgY29ubmVjdGlvbiAiICsgdGhpcyk7CisgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiYmluZFRvU3luY0FkYXB0ZXI6ICIgKyBzZXJ2aWNlQ29tcG9uZW50ICsgIiwgY29ubmVjdGlvbiAiICsgdGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudCgpOwogICAgICAgICAgICAgaW50ZW50LnNldEFjdGlvbigiYW5kcm9pZC5jb250ZW50LlN5bmNBZGFwdGVyIik7Ci0gICAgICAgICAgICBpbnRlbnQuc2V0Q29tcG9uZW50KGluZm8uY29tcG9uZW50TmFtZSk7CisgICAgICAgICAgICBpbnRlbnQuc2V0Q29tcG9uZW50KHNlcnZpY2VDb21wb25lbnQpOwogICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9DTElFTlRfTEFCRUwsCiAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLnN5bmNfYmluZGluZ19sYWJlbCk7CiAgICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX0NMSUVOVF9JTlRFTlQsIFBlbmRpbmdJbnRlbnQuZ2V0QWN0aXZpdHlBc1VzZXIoCkBAIC0xMTI5LDcgKzExOTgsNyBAQAogICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBiaW5kUmVzdWx0ID0gbUNvbnRleHQuYmluZFNlcnZpY2VBc1VzZXIoaW50ZW50LCB0aGlzLAogICAgICAgICAgICAgICAgICAgICBDb250ZXh0LkJJTkRfQVVUT19DUkVBVEUgfCBDb250ZXh0LkJJTkRfTk9UX0ZPUkVHUk9VTkQKICAgICAgICAgICAgICAgICAgICAgfCBDb250ZXh0LkJJTkRfQUxMT1dfT09NX01BTkFHRU1FTlQsCi0gICAgICAgICAgICAgICAgICAgIG5ldyBVc2VySGFuZGxlKG1TeW5jT3BlcmF0aW9uLnVzZXJJZCkpOworICAgICAgICAgICAgICAgICAgICBuZXcgVXNlckhhbmRsZShtU3luY09wZXJhdGlvbi50YXJnZXQudXNlcklkKSk7CiAgICAgICAgICAgICBpZiAoIWJpbmRSZXN1bHQpIHsKICAgICAgICAgICAgICAgICBtQm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTExNTIsNyArMTIyMSw2IEBACiAgICAgICAgICAgICBtU3luY1dha2VMb2NrLnNldFdvcmtTb3VyY2UobnVsbCk7CiAgICAgICAgIH0KIAotICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgICAgICAgdG9TdHJpbmcoc2IpOwpAQCAtMTI5MSwxMSArMTM1OSwxMyBAQAogICAgICAgICAgICAgICAgIGludCByb3cgPSB0YWJsZS5nZXROdW1Sb3dzKCk7CiAgICAgICAgICAgICAgICAgUGFpcjxBdXRob3JpdHlJbmZvLCBTeW5jU3RhdHVzSW5mbz4gc3luY0F1dGhvcml0eVN5bmNTdGF0dXMgPSAKICAgICAgICAgICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRDb3B5T2ZBdXRob3JpdHlXaXRoU3luY1N0YXR1cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC5hY2NvdW50LCBhY2NvdW50LnVzZXJJZCwgc3luY0FkYXB0ZXJUeXBlLnR5cGUuYXV0aG9yaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQuYWNjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jQWRhcHRlclR5cGUudHlwZS5hdXRob3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC51c2VySWQpKTsKICAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5BdXRob3JpdHlJbmZvIHNldHRpbmdzID0gc3luY0F1dGhvcml0eVN5bmNTdGF0dXMuZmlyc3Q7CiAgICAgICAgICAgICAgICAgU3luY1N0YXR1c0luZm8gc3RhdHVzID0gc3luY0F1dGhvcml0eVN5bmNTdGF0dXMuc2Vjb25kOwotCi0gICAgICAgICAgICAgICAgU3RyaW5nIGF1dGhvcml0eSA9IHNldHRpbmdzLmF1dGhvcml0eTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgYXV0aG9yaXR5ID0gc2V0dGluZ3MudGFyZ2V0LnByb3ZpZGVyOwogICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHkubGVuZ3RoKCkgPiA1MCkgewogICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHkgPSBhdXRob3JpdHkuc3Vic3RyaW5nKGF1dGhvcml0eS5sZW5ndGgoKSAtIDUwKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNDE2LDE0ICsxNDg2LDI1IEBACiAgICAgICAgICAgICBpbnQgbWF4QXV0aG9yaXR5ID0gMDsKICAgICAgICAgICAgIGludCBtYXhBY2NvdW50ID0gMDsKICAgICAgICAgICAgIGZvciAoU3luY1N0b3JhZ2VFbmdpbmUuU3luY0hpc3RvcnlJdGVtIGl0ZW0gOiBpdGVtcykgewotICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkF1dGhvcml0eUluZm8gYXV0aG9yaXR5CisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvCiAgICAgICAgICAgICAgICAgICAgICAgICA9IG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRBdXRob3JpdHkoaXRlbS5hdXRob3JpdHlJZCk7CiAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGF1dGhvcml0eU5hbWU7CiAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFjY291bnRLZXk7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSBhdXRob3JpdHkuYXV0aG9yaXR5OwotICAgICAgICAgICAgICAgICAgICBhY2NvdW50S2V5ID0gYXV0aG9yaXR5LmFjY291bnQubmFtZSArICIvIiArIGF1dGhvcml0eS5hY2NvdW50LnR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdSIgKyBhdXRob3JpdHkudXNlcklkOworICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHlJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8udGFyZ2V0LnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSA9IGF1dGhvcml0eUluZm8udGFyZ2V0LnByb3ZpZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEtleSA9IGF1dGhvcml0eUluZm8udGFyZ2V0LmFjY291bnQubmFtZSArICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGF1dGhvcml0eUluZm8udGFyZ2V0LmFjY291bnQudHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdSIgKyBhdXRob3JpdHlJbmZvLnRhcmdldC51c2VySWQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXV0aG9yaXR5SW5mby50YXJnZXQudGFyZ2V0X3NlcnZpY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSBhdXRob3JpdHlJbmZvLnRhcmdldC5zZXJ2aWNlLmdldFBhY2thZ2VOYW1lKCkgKyAiLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhdXRob3JpdHlJbmZvLnRhcmdldC5zZXJ2aWNlLmdldENsYXNzTmFtZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1IiArIGF1dGhvcml0eUluZm8udGFyZ2V0LnVzZXJJZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRLZXkgPSAibm8gYWNjb3VudCI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlOYW1lID0gIlVua25vd24iOworICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEtleSA9ICJVbmtub3duIjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSAiVW5rbm93biI7CiAgICAgICAgICAgICAgICAgICAgIGFjY291bnRLZXkgPSAiVW5rbm93biI7CkBAIC0xNTQ0LDE0ICsxNjI1LDI1IEBACiAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlTWFuYWdlciBwbSA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLlN5bmNIaXN0b3J5SXRlbSBpdGVtID0gaXRlbXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkF1dGhvcml0eUluZm8gYXV0aG9yaXR5CisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvCiAgICAgICAgICAgICAgICAgICAgICAgICA9IG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRBdXRob3JpdHkoaXRlbS5hdXRob3JpdHlJZCk7CiAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGF1dGhvcml0eU5hbWU7CiAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFjY291bnRLZXk7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSBhdXRob3JpdHkuYXV0aG9yaXR5OwotICAgICAgICAgICAgICAgICAgICBhY2NvdW50S2V5ID0gYXV0aG9yaXR5LmFjY291bnQubmFtZSArICIvIiArIGF1dGhvcml0eS5hY2NvdW50LnR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdSIgKyBhdXRob3JpdHkudXNlcklkOworICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHlJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8udGFyZ2V0LnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSA9IGF1dGhvcml0eUluZm8udGFyZ2V0LnByb3ZpZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEtleSA9IGF1dGhvcml0eUluZm8udGFyZ2V0LmFjY291bnQubmFtZSArICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGF1dGhvcml0eUluZm8udGFyZ2V0LmFjY291bnQudHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdSIgKyBhdXRob3JpdHlJbmZvLnRhcmdldC51c2VySWQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXV0aG9yaXR5SW5mby50YXJnZXQudGFyZ2V0X3NlcnZpY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSBhdXRob3JpdHlJbmZvLnRhcmdldC5zZXJ2aWNlLmdldFBhY2thZ2VOYW1lKCkgKyAiLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhdXRob3JpdHlJbmZvLnRhcmdldC5zZXJ2aWNlLmdldENsYXNzTmFtZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1IiArIGF1dGhvcml0eUluZm8udGFyZ2V0LnVzZXJJZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRLZXkgPSAibm9uZSI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlOYW1lID0gIlVua25vd24iOworICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEtleSA9ICJVbmtub3duIjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSAiVW5rbm93biI7CiAgICAgICAgICAgICAgICAgICAgIGFjY291bnRLZXkgPSAiVW5rbm93biI7CkBAIC0xNjEwLDE0ICsxNzAyLDI1IEBACiAgICAgICAgICAgICAgICAgaWYgKGV4dHJhcyA9PSBudWxsIHx8IGV4dHJhcy5zaXplKCkgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmluYWwgU3luY1N0b3JhZ2VFbmdpbmUuQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkKKyAgICAgICAgICAgICAgICBmaW5hbCBTeW5jU3RvcmFnZUVuZ2luZS5BdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8KICAgICAgICAgICAgICAgICAgICAgICAgID0gbVN5bmNTdG9yYWdlRW5naW5lLmdldEF1dGhvcml0eShpdGVtLmF1dGhvcml0eUlkKTsKICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5TmFtZTsKICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYWNjb3VudEtleTsKLSAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSA9IGF1dGhvcml0eS5hdXRob3JpdHk7Ci0gICAgICAgICAgICAgICAgICAgIGFjY291bnRLZXkgPSBhdXRob3JpdHkuYWNjb3VudC5uYW1lICsgIi8iICsgYXV0aG9yaXR5LmFjY291bnQudHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1IiArIGF1dGhvcml0eS51c2VySWQ7CisgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5SW5mby50YXJnZXQudGFyZ2V0X3Byb3ZpZGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlOYW1lID0gYXV0aG9yaXR5SW5mby50YXJnZXQucHJvdmlkZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50S2V5ID0gYXV0aG9yaXR5SW5mby50YXJnZXQuYWNjb3VudC5uYW1lICsgIi8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYXV0aG9yaXR5SW5mby50YXJnZXQuYWNjb3VudC50eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1IiArIGF1dGhvcml0eUluZm8udGFyZ2V0LnVzZXJJZDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdXRob3JpdHlJbmZvLnRhcmdldC50YXJnZXRfc2VydmljZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSA9IGF1dGhvcml0eUluZm8udGFyZ2V0LnNlcnZpY2UuZ2V0UGFja2FnZU5hbWUoKSArICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGF1dGhvcml0eUluZm8udGFyZ2V0LnNlcnZpY2UuZ2V0Q2xhc3NOYW1lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHUiICsgYXV0aG9yaXR5SW5mby50YXJnZXQudXNlcklkOworICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEtleSA9ICJub25lIjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWUgPSAiVW5rbm93biI7CisgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50S2V5ID0gIlVua25vd24iOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSA9ICJVbmtub3duIjsKICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEtleSA9ICJVbmtub3duIjsKQEAgLTE3NjEsMTAgKzE4NjQsMTEgQEAKIAogICAgIGNsYXNzIFNlcnZpY2VDb25uZWN0aW9uRGF0YSB7CiAgICAgICAgIHB1YmxpYyBmaW5hbCBBY3RpdmVTeW5jQ29udGV4dCBhY3RpdmVTeW5jQ29udGV4dDsKLSAgICAgICAgcHVibGljIGZpbmFsIElTeW5jQWRhcHRlciBzeW5jQWRhcHRlcjsKLSAgICAgICAgU2VydmljZUNvbm5lY3Rpb25EYXRhKEFjdGl2ZVN5bmNDb250ZXh0IGFjdGl2ZVN5bmNDb250ZXh0LCBJU3luY0FkYXB0ZXIgc3luY0FkYXB0ZXIpIHsKKyAgICAgICAgcHVibGljIGZpbmFsIElCaW5kZXIgYWRhcHRlcjsKKworICAgICAgICBTZXJ2aWNlQ29ubmVjdGlvbkRhdGEoQWN0aXZlU3luY0NvbnRleHQgYWN0aXZlU3luY0NvbnRleHQsIElCaW5kZXIgYWRhcHRlcikgewogICAgICAgICAgICAgdGhpcy5hY3RpdmVTeW5jQ29udGV4dCA9IGFjdGl2ZVN5bmNDb250ZXh0OwotICAgICAgICAgICAgdGhpcy5zeW5jQWRhcHRlciA9IHN5bmNBZGFwdGVyOworICAgICAgICAgICAgdGhpcy5hZGFwdGVyID0gYWRhcHRlcjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTc4NCwxMSArMTg4OCwxMSBAQAogICAgICAgICBwdWJsaWMgZmluYWwgU3luY05vdGlmaWNhdGlvbkluZm8gbVN5bmNOb3RpZmljYXRpb25JbmZvID0gbmV3IFN5bmNOb3RpZmljYXRpb25JbmZvKCk7CiAgICAgICAgIHByaXZhdGUgTG9uZyBtQWxhcm1TY2hlZHVsZVRpbWUgPSBudWxsOwogICAgICAgICBwdWJsaWMgZmluYWwgU3luY1RpbWVUcmFja2VyIG1TeW5jVGltZVRyYWNrZXIgPSBuZXcgU3luY1RpbWVUcmFja2VyKCk7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgSGFzaE1hcDxQYWlyPEFjY291bnQsIFN0cmluZz4sIFBvd2VyTWFuYWdlci5XYWtlTG9jaz4gbVdha2VMb2NrcyA9Ci0gICAgICAgICAgICAgICAgTWFwcy5uZXdIYXNoTWFwKCk7CisgICAgICAgIHByaXZhdGUgZmluYWwgSGFzaE1hcDxTdHJpbmcsIFBvd2VyTWFuYWdlci5XYWtlTG9jaz4gbVdha2VMb2NrcyA9IE1hcHMubmV3SGFzaE1hcCgpOworCiAgICAgICAgIHByaXZhdGUgTGlzdDxNZXNzYWdlPiBtQm9vdFF1ZXVlID0gbmV3IEFycmF5TGlzdDxNZXNzYWdlPigpOwogCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQm9vdENvbXBsZXRlZCgpIHsKKyAgICAgIHB1YmxpYyB2b2lkIG9uQm9vdENvbXBsZXRlZCgpIHsKICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewogICAgICAgICAgICAgICAgIExvZy52KFRBRywgIkJvb3QgY29tcGxldGVkLCBjbGVhcmluZyBib290IHF1ZXVlLiIpOwogICAgICAgICAgICAgfQpAQCAtMTgwMywxMiArMTkwNywxMSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSBQb3dlck1hbmFnZXIuV2FrZUxvY2sgZ2V0U3luY1dha2VMb2NrKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSkgewotICAgICAgICAgICAgZmluYWwgUGFpcjxBY2NvdW50LCBTdHJpbmc+IHdha2VMb2NrS2V5ID0gUGFpci5jcmVhdGUoYWNjb3VudCwgYXV0aG9yaXR5KTsKKyAgICAgICAgcHJpdmF0ZSBQb3dlck1hbmFnZXIuV2FrZUxvY2sgZ2V0U3luY1dha2VMb2NrKFN5bmNPcGVyYXRpb24gb3BlcmF0aW9uKSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgd2FrZUxvY2tLZXkgPSBvcGVyYXRpb24ud2FrZUxvY2tLZXkoKTsKICAgICAgICAgICAgIFBvd2VyTWFuYWdlci5XYWtlTG9jayB3YWtlTG9jayA9IG1XYWtlTG9ja3MuZ2V0KHdha2VMb2NrS2V5KTsKICAgICAgICAgICAgIGlmICh3YWtlTG9jayA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUgPSBTWU5DX1dBS0VfTE9DS19QUkVGSVggKyAiLyIgKyBhdXRob3JpdHkgKyAiLyIgKyBhY2NvdW50LnR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIi8iICsgYWNjb3VudC5uYW1lOworICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gU1lOQ19XQUtFX0xPQ0tfUFJFRklYICsgb3BlcmF0aW9uLndha2VMb2NrTmFtZSgpOwogICAgICAgICAgICAgICAgIHdha2VMb2NrID0gbVBvd2VyTWFuYWdlci5uZXdXYWtlTG9jayhQb3dlck1hbmFnZXIuUEFSVElBTF9XQUtFX0xPQ0ssIG5hbWUpOwogICAgICAgICAgICAgICAgIHdha2VMb2NrLnNldFJlZmVyZW5jZUNvdW50ZWQoZmFsc2UpOwogICAgICAgICAgICAgICAgIG1XYWtlTG9ja3MucHV0KHdha2VMb2NrS2V5LCB3YWtlTG9jayk7CkBAIC0xODYxLDcgKzE5NjQsNiBAQAogICAgICAgICAgICAgc3VwZXIobG9vcGVyKTsKICAgICAgICAgfQogCi0gICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgICAgICBpZiAodHJ5RW5xdWV1ZU1lc3NhZ2VVbnRpbFJlYWR5VG9SdW4obXNnKSkgewogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4ODEsMTIgKzE5ODMsMTMgQEAKICAgICAgICAgICAgICAgICBlYXJsaWVzdEZ1dHVyZVBvbGxUaW1lID0gc2NoZWR1bGVSZWFkeVBlcmlvZGljU3luY3MoKTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3luY0hhbmRsZXIuTUVTU0FHRV9DQU5DRUw6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBhaXI8QWNjb3VudCwgU3RyaW5nPiBwYXlsb2FkID0gKFBhaXI8QWNjb3VudCwgU3RyaW5nPikgbXNnLm9iajsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IHBheWxvYWQgPSAoU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQpIG1zZy5vYmo7CisgICAgICAgICAgICAgICAgICAgICAgICBCdW5kbGUgZXh0cmFzID0gbXNnLnBlZWtEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJoYW5kbGVTeW5jSGFuZGxlck1lc3NhZ2U6IE1FU1NBR0VfU0VSVklDRV9DQU5DRUw6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcGF5bG9hZC5maXJzdCArICIsICIgKyBwYXlsb2FkLnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBheWxvYWQgKyAiIGJ1bmRsZTogIiArIGV4dHJhcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVTeW5jTG9ja2VkKHBheWxvYWQuZmlyc3QsIG1zZy5hcmcxLCBwYXlsb2FkLnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVTeW5jTG9ja2VkKHBheWxvYWQsIGV4dHJhcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UGVuZGluZ1N5bmNUaW1lID0gbWF5YmVTdGFydE5leHRTeW5jTG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTg5NSwzNSArMTk5OCwzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiaGFuZGxlU3luY0hhbmRsZXJNZXNzYWdlOiBNRVNTQUdFX1NZTkNfRklOSVNIRUQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNIYW5kbGVyTWVzc2FnZVBheWxvYWQgcGF5bG9hZCA9IChTeW5jSGFuZGxlck1lc3NhZ2VQYXlsb2FkKW1zZy5vYmo7CisgICAgICAgICAgICAgICAgICAgICAgICBTeW5jSGFuZGxlck1lc3NhZ2VQYXlsb2FkIHBheWxvYWQgPSAoU3luY0hhbmRsZXJNZXNzYWdlUGF5bG9hZCkgbXNnLm9iajsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTeW5jU3RpbGxBY3RpdmUocGF5bG9hZC5hY3RpdmVTeW5jQ29udGV4dCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJoYW5kbGVTeW5jSGFuZGxlck1lc3NhZ2U6IGRyb3BwaW5nIHNpbmNlIHRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJzeW5jIGlzIG5vIGxvbmdlciBhY3RpdmU6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcGF5bG9hZC5hY3RpdmVTeW5jQ29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBydW5TeW5jRmluaXNoZWRPckNhbmNlbGVkTG9ja2VkKHBheWxvYWQuc3luY1Jlc3VsdCwgcGF5bG9hZC5hY3RpdmVTeW5jQ29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBydW5TeW5jRmluaXNoZWRPckNhbmNlbGVkTG9ja2VkKHBheWxvYWQuc3luY1Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5hY3RpdmVTeW5jQ29udGV4dCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIGEgc3luYyBqdXN0IGZpbmlzaGVkIGNoZWNrIGlmIGl0IGlzIHRpbWUgdG8gc3RhcnQgYSBuZXcgc3luYwogICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFBlbmRpbmdTeW5jVGltZSA9IG1heWJlU3RhcnROZXh0U3luY0xvY2tlZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgY2FzZSBTeW5jSGFuZGxlci5NRVNTQUdFX1NFUlZJQ0VfQ09OTkVDVEVEOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlQ29ubmVjdGlvbkRhdGEgbXNnRGF0YSA9IChTZXJ2aWNlQ29ubmVjdGlvbkRhdGEpbXNnLm9iajsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VDb25uZWN0aW9uRGF0YSBtc2dEYXRhID0gKFNlcnZpY2VDb25uZWN0aW9uRGF0YSkgbXNnLm9iajsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImhhbmRsZVN5bmNIYW5kbGVyTWVzc2FnZTogTUVTU0FHRV9TRVJWSUNFX0NPTk5FQ1RFRDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtc2dEYXRhLmFjdGl2ZVN5bmNDb250ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhpcyBpc24ndCBhbiBvbGQgbWVzc2FnZQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3luY1N0aWxsQWN0aXZlKG1zZ0RhdGEuYWN0aXZlU3luY0NvbnRleHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuQm91bmRUb1N5bmNBZGFwdGVyKG1zZ0RhdGEuYWN0aXZlU3luY0NvbnRleHQsIG1zZ0RhdGEuc3luY0FkYXB0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkJvdW5kVG9BZGFwdGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnRGF0YS5hY3RpdmVTeW5jQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ0RhdGEuYWRhcHRlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3luY0hhbmRsZXIuTUVTU0FHRV9TRVJWSUNFX0RJU0NPTk5FQ1RFRDogewogICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZlU3luY0NvbnRleHQgY3VycmVudFN5bmNDb250ZXh0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTZXJ2aWNlQ29ubmVjdGlvbkRhdGEpbXNnLm9iaikuYWN0aXZlU3luY0NvbnRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU2VydmljZUNvbm5lY3Rpb25EYXRhKSBtc2cub2JqKS5hY3RpdmVTeW5jQ29udGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImhhbmRsZVN5bmNIYW5kbGVyTWVzc2FnZTogTUVTU0FHRV9TRVJWSUNFX0RJU0NPTk5FQ1RFRDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjdXJyZW50U3luY0NvbnRleHQpOwpAQCAtMTkzMiwxMiArMjAzOCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3luY1N0aWxsQWN0aXZlKGN1cnJlbnRTeW5jQ29udGV4dCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW5jZWwgdGhlIHN5bmMgaWYgd2UgaGF2ZSBhIHN5bmNhZGFwdGVyLCB3aGljaCBtZWFucyBvbmUgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdXRzdGFuZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3luY0NvbnRleHQubVN5bmNBZGFwdGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFN5bmNDb250ZXh0Lm1TeW5jQWRhcHRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3luY0NvbnRleHQubVN5bmNBZGFwdGVyLmNhbmNlbFN5bmMoY3VycmVudFN5bmNDb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gcmV0cnkgdGhpcyBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50U3luY0NvbnRleHQubVN5bmNTZXJ2aWNlQWRhcHRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3luY0NvbnRleHQubVN5bmNTZXJ2aWNlQWRhcHRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYW5jZWxTeW5jKGN1cnJlbnRTeW5jQ29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJldHJ5IHRoaXMgaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXRlbmQgdGhhdCB0aGUgc3luYyBmYWlsZWQgd2l0aCBhbiBJT0V4Y2VwdGlvbiwKQEAgLTE5ODIsOSArMjA5MSw0NiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIGlzRGlzcGF0Y2hhYmxlKFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IHRhcmdldCkgeworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0xvZ2dhYmxlID0gTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSk7CisgICAgICAgICAgICBpZiAodGFyZ2V0LnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIHN5bmMgaWYgdGhlIGFjY291bnQgb2YgdGhpcyBvcGVyYXRpb24gbm8gbG9uZ2VyIGV4aXN0cworICAgICAgICAgICAgICAgIEFjY291bnRBbmRVc2VyW10gYWNjb3VudHMgPSBtUnVubmluZ0FjY291bnRzOworICAgICAgICAgICAgICAgIGlmICghY29udGFpbnNBY2NvdW50QW5kVXNlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRzLCB0YXJnZXQuYWNjb3VudCwgdGFyZ2V0LnVzZXJJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIW1TeW5jU3RvcmFnZUVuZ2luZS5nZXRNYXN0ZXJTeW5jQXV0b21hdGljYWxseSh0YXJnZXQudXNlcklkKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1TeW5jU3RvcmFnZUVuZ2luZS5nZXRTeW5jQXV0b21hdGljYWxseSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFjY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC51c2VySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wcm92aWRlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIiAgICBOb3Qgc2NoZWR1bGluZyBwZXJpb2RpYyBvcGVyYXRpb246IHN5bmMgdHVybmVkIG9mZi4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChnZXRJc1N5bmNhYmxlKHRhcmdldC5hY2NvdW50LCB0YXJnZXQudXNlcklkLCB0YXJnZXQucHJvdmlkZXIpCisgICAgICAgICAgICAgICAgICAgICAgICA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICIgICAgTm90IHNjaGVkdWxpbmcgcGVyaW9kaWMgb3BlcmF0aW9uOiBpc1N5bmNhYmxlID09IDAuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRJc1RhcmdldFNlcnZpY2VBY3RpdmUodGFyZ2V0LnNlcnZpY2UsIHRhcmdldC51c2VySWQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICIgICBOb3Qgc2NoZWR1bGluZyBwZXJpb2RpYyBvcGVyYXRpb246IGlzRW5hYmxlZCA9PSAwLiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBUdXJuIGFueSBwZXJpb2RpYyBzeW5jIG9wZXJhdGlvbnMgdGhhdCBhcmUgcmVhZHkgdG8gcnVuIGludG8gcGVuZGluZyBzeW5jIG9wZXJhdGlvbnMuCi0gICAgICAgICAqIEByZXR1cm4gdGhlIGRlc2lyZWQgc3RhcnQgdGltZSBvZiB0aGUgZWFybGllc3QgZnV0dXJlICBwZXJpb2RpYyBzeW5jIG9wZXJhdGlvbiwKKyAgICAgICAgICogQHJldHVybiB0aGUgZGVzaXJlZCBzdGFydCB0aW1lIG9mIHRoZSBlYXJsaWVzdCBmdXR1cmUgcGVyaW9kaWMgc3luYyBvcGVyYXRpb24sCiAgICAgICAgICAqIGluIG1pbGxpc2Vjb25kcyBzaW5jZSBib290CiAgICAgICAgICAqLwogICAgICAgICBwcml2YXRlIGxvbmcgc2NoZWR1bGVSZWFkeVBlcmlvZGljU3luY3MoKSB7CkBAIC0xOTkyLDE0ICsyMTM4LDcgQEAKICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CiAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAic2NoZWR1bGVSZWFkeVBlcmlvZGljU3luY3MiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gYmFja2dyb3VuZERhdGFVc2FnZUFsbG93ZWQgPQotICAgICAgICAgICAgICAgICAgICBnZXRDb25uZWN0aXZpdHlNYW5hZ2VyKCkuZ2V0QmFja2dyb3VuZERhdGFTZXR0aW5nKCk7CiAgICAgICAgICAgICBsb25nIGVhcmxpZXN0RnV0dXJlUG9sbFRpbWUgPSBMb25nLk1BWF9WQUxVRTsKLSAgICAgICAgICAgIGlmICghYmFja2dyb3VuZERhdGFVc2FnZUFsbG93ZWQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZWFybGllc3RGdXR1cmVQb2xsVGltZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQWNjb3VudEFuZFVzZXJbXSBhY2NvdW50cyA9IG1SdW5uaW5nQWNjb3VudHM7CiAKICAgICAgICAgICAgIGZpbmFsIGxvbmcgbm93QWJzb2x1dGUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIGZpbmFsIGxvbmcgc2hpZnRlZE5vd0Fic29sdXRlID0gKDAgPCBub3dBYnNvbHV0ZSAtIG1TeW5jUmFuZG9tT2Zmc2V0TWlsbGlzKQpAQCAtMjAxMCw0MCArMjE0OSwzMSBAQAogICAgICAgICAgICAgZm9yIChQYWlyPEF1dGhvcml0eUluZm8sIFN5bmNTdGF0dXNJbmZvPiBpbmZvIDogaW5mb3MpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8gPSBpbmZvLmZpcnN0OwogICAgICAgICAgICAgICAgIGZpbmFsIFN5bmNTdGF0dXNJbmZvIHN0YXR1cyA9IGluZm8uc2Vjb25kOwotICAgICAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShhdXRob3JpdHlJbmZvLmF1dGhvcml0eSkpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiR290IGFuIGVtcHR5IHByb3ZpZGVyIHN0cmluZy4gU2tpcHBpbmc6ICIgKyBhdXRob3JpdHlJbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIHN5bmMgaWYgdGhlIGFjY291bnQgb2YgdGhpcyBvcGVyYXRpb24gbm8gbG9uZ2VyIGV4aXN0cwotICAgICAgICAgICAgICAgIGlmICghY29udGFpbnNBY2NvdW50QW5kVXNlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRzLCBhdXRob3JpdHlJbmZvLmFjY291bnQsIGF1dGhvcml0eUluZm8udXNlcklkKSkgeworCisgICAgICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGF1dGhvcml0eUluZm8udGFyZ2V0LnByb3ZpZGVyKSkgeworICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJHb3QgYW4gZW1wdHkgcHJvdmlkZXIgc3RyaW5nLiBTa2lwcGluZzogIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBhdXRob3JpdHlJbmZvLnRhcmdldC5wcm92aWRlcik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICghbVN5bmNTdG9yYWdlRW5naW5lLmdldE1hc3RlclN5bmNBdXRvbWF0aWNhbGx5KGF1dGhvcml0eUluZm8udXNlcklkKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1TeW5jU3RvcmFnZUVuZ2luZS5nZXRTeW5jQXV0b21hdGljYWxseSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5hY2NvdW50LCBhdXRob3JpdHlJbmZvLnVzZXJJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5hdXRob3JpdHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChnZXRJc1N5bmNhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5hY2NvdW50LCBhdXRob3JpdHlJbmZvLnVzZXJJZCwgYXV0aG9yaXR5SW5mby5hdXRob3JpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0Rpc3BhdGNoYWJsZShhdXRob3JpdHlJbmZvLnRhcmdldCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAsIE4gPSBhdXRob3JpdHlJbmZvLnBlcmlvZGljU3luY3Muc2l6ZSgpOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFBlcmlvZGljU3luYyBzeW5jID0gYXV0aG9yaXR5SW5mby5wZXJpb2RpY1N5bmNzLmdldChpKTsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgQnVuZGxlIGV4dHJhcyA9IHN5bmMuZXh0cmFzOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHBlcmlvZEluTWlsbGlzID0gc3luYy5wZXJpb2QgKiAxMDAwOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGZsZXhJbk1pbGxpcyA9IHN5bmMuZmxleFRpbWUgKiAxMDAwOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBMb25nIHBlcmlvZEluTWlsbGlzID0gc3luYy5wZXJpb2QgKiAxMDAwOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBMb25nIGZsZXhJbk1pbGxpcyA9IHN5bmMuZmxleFRpbWUgKiAxMDAwOwogICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIGlmIHRoZSBwZXJpb2QgaXMgaW52YWxpZC4KICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmlvZEluTWlsbGlzIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgd2hlbiB0aGlzIHBlcmlvZGljIHN5bmMgd2FzIGxhc3Qgc2NoZWR1bGVkIHRvIHJ1bi4KICAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBsYXN0UG9sbFRpbWVBYnNvbHV0ZSA9IHN0YXR1cy5nZXRQZXJpb2RpY1N5bmNUaW1lKGkpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHNoaWZ0ZWRMYXN0UG9sbFRpbWVBYnNvbHV0ZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgPCBsYXN0UG9sbFRpbWVBYnNvbHV0ZSAtIG1TeW5jUmFuZG9tT2Zmc2V0TWlsbGlzKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFzdFBvbGxUaW1lQWJzb2x1dGUgLSBtU3luY1JhbmRvbU9mZnNldE1pbGxpcykgOiAwOwogICAgICAgICAgICAgICAgICAgICBsb25nIHJlbWFpbmluZ01pbGxpcwogICAgICAgICAgICAgICAgICAgICAgICAgPSBwZXJpb2RJbk1pbGxpcyAtIChzaGlmdGVkTm93QWJzb2x1dGUgJSBwZXJpb2RJbk1pbGxpcyk7CiAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZVNpbmNlTGFzdFJ1bk1pbGxpcwpAQCAtMjA1NCwxMiArMjE4NCwxMyBAQAogICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJ1bkVhcmx5ID0gcmVtYWluaW5nTWlsbGlzIDw9IGZsZXhJbk1pbGxpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRpbWVTaW5jZUxhc3RSdW5NaWxsaXMgPiBwZXJpb2RJbk1pbGxpcyAtIGZsZXhJbk1pbGxpczsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgInN5bmM6ICIgKyBpICsgIiBmb3IgIiArIGF1dGhvcml0eUluZm8uYXV0aG9yaXR5ICsgIi4iCisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJzeW5jOiAiICsgaSArICIgZm9yICIgKyBhdXRob3JpdHlJbmZvLnRhcmdldCArICIuIgogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHBlcmlvZDogIiArIChwZXJpb2RJbk1pbGxpcykKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBmbGV4OiAiICsgKGZsZXhJbk1pbGxpcykKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiByZW1haW5pbmc6ICIgKyAocmVtYWluaW5nTWlsbGlzKQogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRpbWVfc2luY2VfbGFzdDogIiArIHRpbWVTaW5jZUxhc3RSdW5NaWxsaXMKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBsYXN0IHBvbGwgYWJzb2w6ICIgKyBsYXN0UG9sbFRpbWVBYnNvbHV0ZQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGxhc3QgcG9sbCBzaGlmZWQ6ICIgKyBzaGlmdGVkTGFzdFBvbGxUaW1lQWJzb2x1dGUKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBzaGlmdGVkIG5vdzogIiArIHNoaWZ0ZWROb3dBYnNvbHV0ZQogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHJ1bl9lYXJseTogIiArIHJ1bkVhcmx5KTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjA3Myw0MSArMjIwNCw0OSBAQAogICAgICAgICAgICAgICAgICAgICAgKiBmdXR1cmUsIHN5bmMgbm93IGFuZCByZWluaXRpYWxpemUuIFRoaXMgY2FuIGhhcHBlbiBmb3IKICAgICAgICAgICAgICAgICAgICAgICogZXhhbXBsZSBpZiB0aGUgdXNlciBjaGFuZ2VkIHRoZSB0aW1lLCBzeW5jZWQgYW5kIGNoYW5nZWQKICAgICAgICAgICAgICAgICAgICAgICogYmFjay4KLSAgICAgICAgICAgICAgICAgICAgICogQ2FzZSAzOiBJZiB3ZSBmYWlsZWQgdG8gc3luYyBhdCB0aGUgbGFzdCBzY2hlZHVsZWQKLSAgICAgICAgICAgICAgICAgICAgICogdGltZS4KKyAgICAgICAgICAgICAgICAgICAgICogQ2FzZSAzOiBJZiB3ZSBmYWlsZWQgdG8gc3luYyBhdCB0aGUgbGFzdCBzY2hlZHVsZWQgdGltZS4KICAgICAgICAgICAgICAgICAgICAgICogQ2FzZSA0OiBUaGlzIHN5bmMgaXMgY2xvc2UgZW5vdWdoIHRvIHRoZSB0aW1lIHRoYXQgd2UgY2FuIHNjaGVkdWxlIGl0LgogICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bkVhcmx5IC8vIENhc2UgNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHJlbWFpbmluZ01pbGxpcyA9PSBwZXJpb2RJbk1pbGxpcyAvLyBDYXNlIDEKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ01pbGxpcyA9PSBwZXJpb2RJbk1pbGxpcyAvLyBDYXNlIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBsYXN0UG9sbFRpbWVBYnNvbHV0ZSA+IG5vd0Fic29sdXRlIC8vIENhc2UgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRpbWVTaW5jZUxhc3RSdW5NaWxsaXMgPj0gcGVyaW9kSW5NaWxsaXMpIHsgLy8gQ2FzZSAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGltZVNpbmNlTGFzdFJ1bk1pbGxpcyA+PSBwZXJpb2RJbk1pbGxpcyAvLyBDYXNlIDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBydW5FYXJseSkgeyAvLyBDYXNlIDQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN5bmMgbm93Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFBhaXI8TG9uZywgTG9uZz4gYmFja29mZiA9IG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRCYWNrb2ZmKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmFjY291bnQsIGF1dGhvcml0eUluZm8udXNlcklkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmF1dGhvcml0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZWdpc3RlcmVkU2VydmljZXNDYWNoZS5TZXJ2aWNlSW5mbzxTeW5jQWRhcHRlclR5cGU+IHN5bmNBZGFwdGVySW5mbzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNBZGFwdGVySW5mbyA9IG1TeW5jQWRhcHRlcnMuZ2V0U2VydmljZUluZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNBZGFwdGVyVHlwZS5uZXdLZXkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5hdXRob3JpdHksIGF1dGhvcml0eUluZm8uYWNjb3VudC50eXBlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby51c2VySWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmNBZGFwdGVySW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCB0YXJnZXQgPSBhdXRob3JpdHlJbmZvLnRhcmdldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFBhaXI8TG9uZywgTG9uZz4gYmFja29mZiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRCYWNrb2ZmKHRhcmdldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuc2V0UGVyaW9kaWNTeW5jVGltZShhdXRob3JpdHlJbmZvLmlkZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLnBlcmlvZGljU3luY3MuZ2V0KGkpLCBub3dBYnNvbHV0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZVN5bmNPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTeW5jT3BlcmF0aW9uKGF1dGhvcml0eUluZm8uYWNjb3VudCwgYXV0aG9yaXR5SW5mby51c2VySWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY09wZXJhdGlvbi5SRUFTT05fUEVSSU9ESUMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuU09VUkNFX1BFUklPRElDLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYXV0aG9yaXR5LCBleHRyYXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBydW50aW1lICovLCAwIC8qIGZsZXggKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrb2ZmICE9IG51bGwgPyBiYWNrb2ZmLmZpcnN0IDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0RGVsYXlVbnRpbFRpbWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmFjY291bnQsIGF1dGhvcml0eUluZm8udXNlcklkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5hdXRob3JpdHkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNBZGFwdGVySW5mby50eXBlLmFsbG93UGFyYWxsZWxTeW5jcygpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZWdpc3RlcmVkU2VydmljZXNDYWNoZS5TZXJ2aWNlSW5mbzxTeW5jQWRhcHRlclR5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNBZGFwdGVySW5mbyA9IG1TeW5jQWRhcHRlcnMuZ2V0U2VydmljZUluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jQWRhcHRlclR5cGUubmV3S2V5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucHJvdmlkZXIsIHRhcmdldC5hY2NvdW50LnR5cGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnVzZXJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmNBZGFwdGVySW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZVN5bmNPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3luY09wZXJhdGlvbih0YXJnZXQuYWNjb3VudCwgdGFyZ2V0LnVzZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY09wZXJhdGlvbi5SRUFTT05fUEVSSU9ESUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLlNPVVJDRV9QRVJJT0RJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnByb3ZpZGVyLCBleHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogcnVudGltZSAqLywgMCAvKiBmbGV4ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrb2ZmICE9IG51bGwgPyBiYWNrb2ZmLmZpcnN0IDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLmdldERlbGF5VW50aWxUaW1lKHRhcmdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNBZGFwdGVySW5mby50eXBlLmFsbG93UGFyYWxsZWxTeW5jcygpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC50YXJnZXRfc2VydmljZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlU3luY09wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTeW5jT3BlcmF0aW9uKHRhcmdldC5zZXJ2aWNlLCB0YXJnZXQudXNlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jT3BlcmF0aW9uLlJFQVNPTl9QRVJJT0RJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuU09VUkNFX1BFUklPRElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogcnVudGltZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBmbGV4ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrb2ZmICE9IG51bGwgPyBiYWNrb2ZmLmZpcnN0IDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLmdldERlbGF5VW50aWxUaW1lKHRhcmdldCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHdoZW4gdGhpcyBwZXJpb2RpYyBzeW5jIHNob3VsZCBuZXh0IHJ1bi4KICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXh0UG9sbFRpbWVBYnNvbHV0ZTsKQEAgLTIxNTQsOCArMjI5Myw3IEBACiAKICAgICAgICAgICAgIC8vIElmIHRoZSBhY2NvdW50cyBhcmVuJ3Qga25vd24geWV0IHRoZW4gd2UgYXJlbid0IHJlYWR5IHRvIHJ1bi4gV2Ugd2lsbCBiZSBraWNrZWQKICAgICAgICAgICAgIC8vIHdoZW4gdGhlIGFjY291bnQgbG9va3VwIHJlcXVlc3QgZG9lcyBjb21wbGV0ZS4KLSAgICAgICAgICAgIEFjY291bnRBbmRVc2VyW10gYWNjb3VudHMgPSBtUnVubmluZ0FjY291bnRzOwotICAgICAgICAgICAgaWYgKGFjY291bnRzID09IElOSVRJQUxfQUNDT1VOVFNfQVJSQVkpIHsKKyAgICAgICAgICAgIGlmIChtUnVubmluZ0FjY291bnRzID09IElOSVRJQUxfQUNDT1VOVFNfQVJSQVkpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgewogICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJtYXliZVN0YXJ0TmV4dFN5bmM6IGFjY291bnRzIG5vdCBrbm93biwgc2tpcHBpbmciKTsKICAgICAgICAgICAgICAgICB9CkBAIC0yMTY1LDkgKzIzMDMsNiBAQAogICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGNvbnN1bWUgU3luY09wZXJhdGlvbnMgZnJvbSB0aGUgaGVhZCBvZiB0aGUgU3luY1F1ZXVlIHVudGlsIG9uZSBpcwogICAgICAgICAgICAgLy8gZm91bmQgdGhhdCBpcyBydW5uYWJsZSAobm90IGRpc2FibGVkLCBldGMpLiBJZiB0aGF0IG9uZSBpcyByZWFkeSB0byBydW4gdGhlbgogICAgICAgICAgICAgLy8gc3RhcnQgaXQsIG90aGVyd2lzZSBqdXN0IGdldCBvdXQuCi0gICAgICAgICAgICBmaW5hbCBib29sZWFuIGJhY2tncm91bmREYXRhVXNhZ2VBbGxvd2VkID0KLSAgICAgICAgICAgICAgICAgICAgZ2V0Q29ubmVjdGl2aXR5TWFuYWdlcigpLmdldEJhY2tncm91bmREYXRhU2V0dGluZygpOwotCiAgICAgICAgICAgICBmaW5hbCBsb25nIG5vdyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwogCiAgICAgICAgICAgICAvLyB3aWxsIGJlIHNldCB0byB0aGUgbmV4dCB0aW1lIHRoYXQgYSBzeW5jIHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBydW5uaW5nCkBAIC0yMTg5LDQwICsyMzI0LDIzIEBACiAgICAgICAgICAgICAgICAgd2hpbGUgKG9wZXJhdGlvbkl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgICBmaW5hbCBTeW5jT3BlcmF0aW9uIG9wID0gb3BlcmF0aW9uSXRlcmF0b3IubmV4dCgpOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIERyb3AgdGhlIHN5bmMgaWYgdGhlIGFjY291bnQgb2YgdGhpcyBvcGVyYXRpb24gbm8gbG9uZ2VyIGV4aXN0cy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250YWluc0FjY291bnRBbmRVc2VyKGFjY291bnRzLCBvcC5hY2NvdW50LCBvcC51c2VySWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25JdGVyYXRvci5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5kZWxldGVGcm9tUGVuZGluZyhvcC5wZW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiBhY2NvdW50IGRvZXNuJ3QgZXhpc3QuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIERyb3AgdGhpcyBzeW5jIHJlcXVlc3QgaWYgaXQgaXNuJ3Qgc3luY2FibGUuCi0gICAgICAgICAgICAgICAgICAgIGludCBzeW5jYWJsZVN0YXRlID0gZ2V0SXNTeW5jYWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5hY2NvdW50LCBvcC51c2VySWQsIG9wLmF1dGhvcml0eSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzeW5jYWJsZVN0YXRlID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkl0ZXJhdG9yLnJlbW92ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLmRlbGV0ZUZyb21QZW5kaW5nKG9wLnBlbmRpbmdPcGVyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICIgICAgRHJvcHBpbmcgc3luYyBvcGVyYXRpb246IGlzU3luY2FibGUgPT0gMC4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgaXMgbm90IHJ1bm5pbmcsIGRyb3AgdGhlIHJlcXVlc3QuCi0gICAgICAgICAgICAgICAgICAgIGlmICghYWN0aXZpdHlNYW5hZ2VyLmlzVXNlclJ1bm5pbmcob3AudXNlcklkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVXNlckluZm8gdXNlckluZm8gPSBtVXNlck1hbmFnZXIuZ2V0VXNlckluZm8ob3AudXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgaXMgbm90IHJ1bm5pbmcsIHNraXAgdGhlIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgICAgIGlmICghYWN0aXZpdHlNYW5hZ2VyLmlzVXNlclJ1bm5pbmcob3AudGFyZ2V0LnVzZXJJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFVzZXJJbmZvIHVzZXJJbmZvID0gbVVzZXJNYW5hZ2VyLmdldFVzZXJJbmZvKG9wLnRhcmdldC51c2VySWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkVXNlcnMuYWRkKG9wLnVzZXJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZFVzZXJzLmFkZChvcC50YXJnZXQudXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiB1c2VyIG5vdCBydW5uaW5nLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIiAgICBEcm9wcGluZyBhbGwgc3luYyBvcGVyYXRpb25zIGZvciArICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgb3AudGFyZ2V0LnVzZXJJZCArICI6IHVzZXIgbm90IHJ1bm5pbmcuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQotCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPcGVyYXRpb25WYWxpZExvY2tlZChvcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkl0ZXJhdG9yLnJlbW92ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLmRlbGV0ZUZyb21QZW5kaW5nKG9wLnBlbmRpbmdPcGVyYXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5leHQgcnVuIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZSwgZXZlbiBnaXZlbiB0aGUgZmxleGlibGUgc2NoZWR1bGluZywKICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSB0aW1lLgogICAgICAgICAgICAgICAgICAgICBpZiAob3AuZWZmZWN0aXZlUnVuVGltZSAtIG9wLmZsZXhUaW1lID4gbm93KSB7CkBAIC0yMjMwLDUxICsyMzQ4LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFJlYWR5VG9SdW5UaW1lID0gb3AuZWZmZWN0aXZlUnVuVGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiBTeW5jIHRvbyBmYXIgaW4gZnV0dXJlLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIiAgICBOb3QgcnVubmluZyBzeW5jIG9wZXJhdGlvbjogU3luYyB0b28gZmFyIGluIGZ1dHVyZS4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJlZmZlY3RpdmU6ICIgKyBvcC5lZmZlY3RpdmVSdW5UaW1lICsgIiBmbGV4OiAiICsgb3AuZmxleFRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBub3c6ICIgKyBub3cpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb3AgaXNuJ3QgYWxsb3dlZCBvbiBtZXRlcmVkIG5ldHdvcmtzIGFuZCB3ZSdyZSBvbiBvbmUsIGRyb3AgaXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChnZXRDb25uZWN0aXZpdHlNYW5hZ2VyKCkuaXNBY3RpdmVOZXR3b3JrTWV0ZXJlZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3AuaXNNZXRlcmVkRGlzYWxsb3dlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25JdGVyYXRvci5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5kZWxldGVGcm9tUGVuZGluZyhvcC5wZW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogY2hhbmdlIHRoaXMgYmVoYXZpb3VyIGZvciBub24tcmVnaXN0ZXJlZCBzeW5jcy4KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVnaXN0ZXJlZFNlcnZpY2VzQ2FjaGUuU2VydmljZUluZm88U3luY0FkYXB0ZXJUeXBlPiBzeW5jQWRhcHRlckluZm87Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNBZGFwdGVySW5mbyA9IG1TeW5jQWRhcHRlcnMuZ2V0U2VydmljZUluZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY0FkYXB0ZXJUeXBlLm5ld0tleShvcC5hdXRob3JpdHksIG9wLmFjY291bnQudHlwZSksIG9wLnVzZXJJZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gb25seSBwcm9jZWVkIGlmIG5ldHdvcmsgaXMgY29ubmVjdGVkIGZvciByZXF1ZXN0aW5nIFVJRAotICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHVpZE5ldHdvcmtDb25uZWN0ZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzeW5jQWRhcHRlckluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTmV0d29ya0luZm8gbmV0d29ya0luZm8gPSBnZXRDb25uZWN0aXZpdHlNYW5hZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEFjdGl2ZU5ldHdvcmtJbmZvRm9yVWlkKHN5bmNBZGFwdGVySW5mby51aWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgdWlkTmV0d29ya0Nvbm5lY3RlZCA9IG5ldHdvcmtJbmZvICE9IG51bGwgJiYgbmV0d29ya0luZm8uaXNDb25uZWN0ZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpZE5ldHdvcmtDb25uZWN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIHN5bmMgaWYgaXQgaXNuJ3QgbWFudWFsLCBhbmQgYXV0byBzeW5jIG9yCi0gICAgICAgICAgICAgICAgICAgIC8vIGJhY2tncm91bmQgZGF0YSB1c2FnZSBpcyBkaXNhYmxlZCBvciBuZXR3b3JrIGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIGRpc2Nvbm5lY3RlZCBmb3IgdGhlIHRhcmdldCBVSUQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghb3AuZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9TRVRUSU5HUywgZmFsc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHN5bmNhYmxlU3RhdGUgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICghbVN5bmNTdG9yYWdlRW5naW5lLmdldE1hc3RlclN5bmNBdXRvbWF0aWNhbGx5KG9wLnVzZXJJZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWJhY2tncm91bmREYXRhVXNhZ2VBbGxvd2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICF1aWROZXR3b3JrQ29ubmVjdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0U3luY0F1dG9tYXRpY2FsbHkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5hY2NvdW50LCBvcC51c2VySWQsIG9wLmF1dGhvcml0eSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25JdGVyYXRvci5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5kZWxldGVGcm9tUGVuZGluZyhvcC5wZW5kaW5nT3BlcmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgc3luYyB0byBiZSBydW4uCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYWRkKG9wKTsKICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBmb3IgKEludGVnZXIgdXNlciA6IHJlbW92ZWRVc2VycykgewogICAgICAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIHN0aWxsIHJlbW92ZWQKICAgICAgICAgICAgICAgICAgICAgaWYgKG1Vc2VyTWFuYWdlci5nZXRVc2VySW5mbyh1c2VyKSA9PSBudWxsKSB7CkBAIC0yMzE2LDEzICsyMzk5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZU9wLmFjY291bnQudHlwZS5lcXVhbHMoY2FuZGlkYXRlLmFjY291bnQudHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhY3RpdmVPcC5hdXRob3JpdHkuZXF1YWxzKGNhbmRpZGF0ZS5hdXRob3JpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYWN0aXZlT3AudXNlcklkID09IGNhbmRpZGF0ZS51c2VySWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoIWFjdGl2ZU9wLmFsbG93UGFyYWxsZWxTeW5jcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhY3RpdmVPcC5hY2NvdW50Lm5hbWUuZXF1YWxzKGNhbmRpZGF0ZS5hY2NvdW50Lm5hbWUpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlT3AuaXNDb25mbGljdChjYW5kaWRhdGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25mbGljdCA9IGFjdGl2ZVN5bmNDb250ZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgYnJlYWsgb3V0IHNpbmNlIHdlIHdhbnQgdG8gZG8gYSBmdWxsIGNvdW50IG9mIHRoZSB2YXJpZXRpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IGJyZWFrIG91dCBzaW5jZSB3ZSB3YW50IHRvIGRvIGEgZnVsbCBjb3VudCBvZiB0aGUgdmFyaWV0aWVzLgogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZUlzSW5pdGlhbGl6YXRpb24gPT0gYWN0aXZlT3AuaXNJbml0aWFsaXphdGlvbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGFjdGl2ZVN5bmNDb250ZXh0Lm1TdGFydFRpbWUgKyBNQVhfVElNRV9QRVJfU1lOQyA8IG5vdykgewpAQCAtMjM3Miw4ICsyNDUxLDggQEAKICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbnVsbC4gUmVzY2hlZHVsZSB0aGUgYWN0aXZlIHN5bmMgYW5kIHN0YXJ0IHRoZSBjYW5kaWRhdGUuCiAgICAgICAgICAgICAgICAgICAgIHRvUmVzY2hlZHVsZSA9IG9sZGVzdE5vbkV4cGVkaXRlZFJlZ3VsYXI7CiAgICAgICAgICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiY2FuY2VsaW5nIGFuZCByZXNjaGVkdWxpbmcgc3luYyBzaW5jZSBhbiBleHBlZGl0ZWQgaXMgcmVhZHkgdG8gcnVuLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgb2xkZXN0Tm9uRXhwZWRpdGVkUmVndWxhcik7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJjYW5jZWxpbmcgYW5kIHJlc2NoZWR1bGluZyBzeW5jIHNpbmNlIGFuIGV4cGVkaXRlZCBpcyByZWFkeSB0byIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHJ1biwgIiArIG9sZGVzdE5vbkV4cGVkaXRlZFJlZ3VsYXIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb25nUnVubmluZyAhPSBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2FuZGlkYXRlSXNJbml0aWFsaXphdGlvbgpAQCAtMjQwMiw3ICsyNDgxLDExNCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gbmV4dFJlYWR5VG9SdW5UaW1lOwotICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogRGV0ZXJtaW5lIGlmIGEgc3luYyBpcyBubyBsb25nZXIgdmFsaWQgYW5kIHNob3VsZCBiZSBkcm9wcGVkIGZyb20gdGhlIHN5bmMgcXVldWUgYW5kIGl0cworICAgICAgICAgKiBwZW5kaW5nIG9wIGRlbGV0ZWQuCisgICAgICAgICAqIEBwYXJhbSBvcCBvcGVyYXRpb24gZm9yIHdoaWNoIHRoZSBzeW5jIGlzIHRvIGJlIHNjaGVkdWxlZC4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc09wZXJhdGlvblZhbGlkTG9ja2VkKFN5bmNPcGVyYXRpb24gb3ApIHsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMb2dnYWJsZSA9IExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpOworICAgICAgICAgICAgaW50IHRhcmdldFVpZDsKKyAgICAgICAgICAgIGludCBzdGF0ZTsKKyAgICAgICAgICAgIGZpbmFsIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IHRhcmdldCA9IG9wLnRhcmdldDsKKyAgICAgICAgICAgIGJvb2xlYW4gc3luY0VuYWJsZWQgPSBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0TWFzdGVyU3luY0F1dG9tYXRpY2FsbHkodGFyZ2V0LnVzZXJJZCk7CisgICAgICAgICAgICBpZiAodGFyZ2V0LnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgIC8vIERyb3AgdGhlIHN5bmMgaWYgdGhlIGFjY291bnQgb2YgdGhpcyBvcGVyYXRpb24gbm8gbG9uZ2VyIGV4aXN0cy4KKyAgICAgICAgICAgICAgICBBY2NvdW50QW5kVXNlcltdIGFjY291bnRzID0gbVJ1bm5pbmdBY2NvdW50czsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRhaW5zQWNjb3VudEFuZFVzZXIoYWNjb3VudHMsIHRhcmdldC5hY2NvdW50LCB0YXJnZXQudXNlcklkKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiBhY2NvdW50IGRvZXNuJ3QgZXhpc3QuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBEcm9wIHRoaXMgc3luYyByZXF1ZXN0IGlmIGl0IGlzbid0IHN5bmNhYmxlLgorICAgICAgICAgICAgICAgIHN0YXRlID0gZ2V0SXNTeW5jYWJsZSh0YXJnZXQuYWNjb3VudCwgdGFyZ2V0LnVzZXJJZCwgdGFyZ2V0LnByb3ZpZGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiBpc1N5bmNhYmxlID09IDAuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzeW5jRW5hYmxlZCA9IHN5bmNFbmFibGVkICYmIG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRTeW5jQXV0b21hdGljYWxseSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hY2NvdW50LCB0YXJnZXQudXNlcklkLCB0YXJnZXQucHJvdmlkZXIpOworCisgICAgICAgICAgICAgICAgZmluYWwgUmVnaXN0ZXJlZFNlcnZpY2VzQ2FjaGUuU2VydmljZUluZm88U3luY0FkYXB0ZXJUeXBlPiBzeW5jQWRhcHRlckluZm87CisgICAgICAgICAgICAgICAgc3luY0FkYXB0ZXJJbmZvID0gbVN5bmNBZGFwdGVycy5nZXRTZXJ2aWNlSW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNBZGFwdGVyVHlwZS5uZXdLZXkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wcm92aWRlciwgdGFyZ2V0LmFjY291bnQudHlwZSksIHRhcmdldC51c2VySWQpOworICAgICAgICAgICAgICAgIGlmIChzeW5jQWRhcHRlckluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0YXJnZXRVaWQgPSBzeW5jQWRhcHRlckluZm8udWlkOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICIgICAgRHJvcHBpbmcgc3luYyBvcGVyYXRpb246IE5vIHN5bmMgYWRhcHRlciByZWdpc3RlcmVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJmb3I6ICIgKyB0YXJnZXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC50YXJnZXRfc2VydmljZSkgeworICAgICAgICAgICAgICAgIHN0YXRlID0gbVN5bmNTdG9yYWdlRW5naW5lLmdldElzVGFyZ2V0U2VydmljZUFjdGl2ZSh0YXJnZXQuc2VydmljZSwgdGFyZ2V0LnVzZXJJZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDEgOiAwOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IENoYW5nZSB0aGlzIHRvIG5vdCBkcm9wIGRpc2FibGVkIHN5bmNzIC0ga2VlcCB0aGVtIGluIHRoZSBwZW5kaW5nIHF1ZXVlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiBpc0FjdGl2ZSA9PSAwLiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlSW5mbyh0YXJnZXQuc2VydmljZSwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwbGljYXRpb25JbmZvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVpZDsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChQYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNMb2dnYWJsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiICAgIERyb3BwaW5nIHN5bmMgb3BlcmF0aW9uOiBObyBzZXJ2aWNlIHJlZ2lzdGVyZWQgZm9yOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdGFyZ2V0LnNlcnZpY2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVua25vd24gdGFyZ2V0IGZvciBTeW5jIE9wOiAiICsgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIGlnbm9yZSBzeXN0ZW0gc2V0dGluZ3MgdGhhdCBzcGVjaWZ5IHRoZSBzeW5jIGlzIGludmFsaWQgaWY6CisgICAgICAgICAgICAvLyAxKSBJdCdzIG1hbnVhbCAtIHdlIHRyeSBpdCBhbnl3YXkuIFdoZW4vaWYgaXQgZmFpbHMgaXQgd2lsbCBiZSByZXNjaGVkdWxlZC4KKyAgICAgICAgICAgIC8vICAgICAgb3IKKyAgICAgICAgICAgIC8vIDIpIGl0J3MgYW4gaW5pdGlhbGlzYXRpb24gc3luYyAtIHdlIGp1c3QgbmVlZCB0byBjb25uZWN0IHRvIGl0LgorICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpZ25vcmVTeXN0ZW1Db25maWd1cmF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgb3AuZXh0cmFzLmdldEJvb2xlYW4oQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9TRVRUSU5HUywgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHx8IChzdGF0ZSA8IDApOworCisgICAgICAgICAgICAvLyBTeW5jIG5vdCBlbmFibGVkLgorICAgICAgICAgICAgaWYgKCFzeW5jRW5hYmxlZCAmJiAhaWdub3JlU3lzdGVtQ29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIiAgICBEcm9wcGluZyBzeW5jIG9wZXJhdGlvbjogZGlzYWxsb3dlZCBieSBzZXR0aW5ncy9uZXR3b3JrLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBOZXR3b3JrIGRvd24uCisgICAgICAgICAgICBmaW5hbCBOZXR3b3JrSW5mbyBuZXR3b3JrSW5mbyA9IGdldENvbm5lY3Rpdml0eU1hbmFnZXIoKQorICAgICAgICAgICAgICAgICAgICAuZ2V0QWN0aXZlTmV0d29ya0luZm9Gb3JVaWQodGFyZ2V0VWlkKTsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdWlkTmV0d29ya0Nvbm5lY3RlZCA9IG5ldHdvcmtJbmZvICE9IG51bGwgJiYgbmV0d29ya0luZm8uaXNDb25uZWN0ZWQoKTsKKyAgICAgICAgICAgIGlmICghdWlkTmV0d29ya0Nvbm5lY3RlZCAmJiAhaWdub3JlU3lzdGVtQ29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIiAgICBEcm9wcGluZyBzeW5jIG9wZXJhdGlvbjogZGlzYWxsb3dlZCBieSBzZXR0aW5ncy9uZXR3b3JrLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBNZXRlcmVkIG5ldHdvcmsuCisgICAgICAgICAgICBpZiAob3AuaXNOb3RBbGxvd2VkT25NZXRlcmVkKCkgJiYgZ2V0Q29ubmVjdGl2aXR5TWFuYWdlcigpLmlzQWN0aXZlTmV0d29ya01ldGVyZWQoKQorICAgICAgICAgICAgICAgICAgICAmJiAhaWdub3JlU3lzdGVtQ29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChpc0xvZ2dhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIiAgICBEcm9wcGluZyBzeW5jIG9wZXJhdGlvbjogbm90IGFsbG93ZWQgb24gbWV0ZXJlZCBuZXR3b3JrLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBkaXNwYXRjaFN5bmNPcGVyYXRpb24oU3luY09wZXJhdGlvbiBvcCkgewogICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CkBAIC0yNDEyLDI3ICsyNTk4LDQ4IEBACiAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgc3luY0NvbnRleHQudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBjb25uZWN0IHRvIHRoZSBzeW5jIGFkYXB0ZXIKLSAgICAgICAgICAgIFN5bmNBZGFwdGVyVHlwZSBzeW5jQWRhcHRlclR5cGUgPSBTeW5jQWRhcHRlclR5cGUubmV3S2V5KG9wLmF1dGhvcml0eSwgb3AuYWNjb3VudC50eXBlKTsKLSAgICAgICAgICAgIGZpbmFsIFJlZ2lzdGVyZWRTZXJ2aWNlc0NhY2hlLlNlcnZpY2VJbmZvPFN5bmNBZGFwdGVyVHlwZT4gc3luY0FkYXB0ZXJJbmZvOwotICAgICAgICAgICAgc3luY0FkYXB0ZXJJbmZvID0gbVN5bmNBZGFwdGVycy5nZXRTZXJ2aWNlSW5mbyhzeW5jQWRhcHRlclR5cGUsIG9wLnVzZXJJZCk7Ci0gICAgICAgICAgICBpZiAoc3luY0FkYXB0ZXJJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJjYW4ndCBmaW5kIGEgc3luYyBhZGFwdGVyIGZvciAiICsgc3luY0FkYXB0ZXJUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlbW92aW5nIHNldHRpbmdzIGZvciBpdCIpOwotICAgICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5yZW1vdmVBdXRob3JpdHkob3AuYWNjb3VudCwgb3AudXNlcklkLCBvcC5hdXRob3JpdHkpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIENvbm5lY3QgdG8gdGhlIHN5bmMgYWRhcHRlci4KKyAgICAgICAgICAgIGludCB0YXJnZXRVaWQ7CisgICAgICAgICAgICBDb21wb25lbnROYW1lIHRhcmdldENvbXBvbmVudDsKKyAgICAgICAgICAgIGZpbmFsIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm8gPSBvcC50YXJnZXQ7CisgICAgICAgICAgICBpZiAoaW5mby50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICBTeW5jQWRhcHRlclR5cGUgc3luY0FkYXB0ZXJUeXBlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNBZGFwdGVyVHlwZS5uZXdLZXkoaW5mby5wcm92aWRlciwgaW5mby5hY2NvdW50LnR5cGUpOworICAgICAgICAgICAgICAgIGZpbmFsIFJlZ2lzdGVyZWRTZXJ2aWNlc0NhY2hlLlNlcnZpY2VJbmZvPFN5bmNBZGFwdGVyVHlwZT4gc3luY0FkYXB0ZXJJbmZvOworICAgICAgICAgICAgICAgIHN5bmNBZGFwdGVySW5mbyA9IG1TeW5jQWRhcHRlcnMuZ2V0U2VydmljZUluZm8oc3luY0FkYXB0ZXJUeXBlLCBpbmZvLnVzZXJJZCk7CisgICAgICAgICAgICAgICAgaWYgKHN5bmNBZGFwdGVySW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImNhbid0IGZpbmQgYSBzeW5jIGFkYXB0ZXIgZm9yICIgKyBzeW5jQWRhcHRlclR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlbW92aW5nIHNldHRpbmdzIGZvciBpdCIpOworICAgICAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUucmVtb3ZlQXV0aG9yaXR5KGluZm8pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRhcmdldFVpZCA9IHN5bmNBZGFwdGVySW5mby51aWQ7CisgICAgICAgICAgICAgICAgdGFyZ2V0Q29tcG9uZW50ID0gc3luY0FkYXB0ZXJJbmZvLmNvbXBvbmVudE5hbWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFRPRE86IFN0b3JlIHRoZSB1aWQgb2YgdGhlIHNlcnZpY2UgYXMgcGFydCBvZiB0aGUgYXV0aG9yaXR5IGluZm8gaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgICAvLyBhdm9pZCB0aGlzIGNhbGw/CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlSW5mbyhpbmZvLnNlcnZpY2UsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGxpY2F0aW9uSW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51aWQ7CisgICAgICAgICAgICAgICAgICAgIHRhcmdldENvbXBvbmVudCA9IGluZm8uc2VydmljZTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIkNhbid0IGZpbmQgYSBzZXJ2aWNlIGZvciAiICsgaW5mby5zZXJ2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZW1vdmluZyBzZXR0aW5ncyBmb3IgaXQiKTsKKyAgICAgICAgICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLnJlbW92ZUF1dGhvcml0eShpbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgQWN0aXZlU3luY0NvbnRleHQgYWN0aXZlU3luY0NvbnRleHQgPQotICAgICAgICAgICAgICAgICAgICBuZXcgQWN0aXZlU3luY0NvbnRleHQob3AsIGluc2VydFN0YXJ0U3luY0V2ZW50KG9wKSwgc3luY0FkYXB0ZXJJbmZvLnVpZCk7CisgICAgICAgICAgICAgICAgICAgIG5ldyBBY3RpdmVTeW5jQ29udGV4dChvcCwgaW5zZXJ0U3RhcnRTeW5jRXZlbnQob3ApLCB0YXJnZXRVaWQpOwogICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNJbmZvID0gbVN5bmNTdG9yYWdlRW5naW5lLmFkZEFjdGl2ZVN5bmMoYWN0aXZlU3luY0NvbnRleHQpOwogICAgICAgICAgICAgbUFjdGl2ZVN5bmNDb250ZXh0cy5hZGQoYWN0aXZlU3luY0NvbnRleHQpOwogICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CiAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiZGlzcGF0Y2hTeW5jT3BlcmF0aW9uOiBzdGFydGluZyAiICsgYWN0aXZlU3luY0NvbnRleHQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFhY3RpdmVTeW5jQ29udGV4dC5iaW5kVG9TeW5jQWRhcHRlcihzeW5jQWRhcHRlckluZm8sIG9wLnVzZXJJZCkpIHsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJCaW5kIGF0dGVtcHQgZmFpbGVkIHRvICIgKyBzeW5jQWRhcHRlckluZm8pOworICAgICAgICAgICAgaWYgKCFhY3RpdmVTeW5jQ29udGV4dC5iaW5kVG9TeW5jQWRhcHRlcih0YXJnZXRDb21wb25lbnQsIGluZm8udXNlcklkKSkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkJpbmQgYXR0ZW1wdCBmYWlsZWQgLSB0YXJnZXQ6ICIgKyB0YXJnZXRDb21wb25lbnQpOwogICAgICAgICAgICAgICAgIGNsb3NlQWN0aXZlU3luY0NvbnRleHQoYWN0aXZlU3luY0NvbnRleHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTI0NDAsNDcgKzI2NDcsNTQgQEAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSB2b2lkIHJ1bkJvdW5kVG9TeW5jQWRhcHRlcihmaW5hbCBBY3RpdmVTeW5jQ29udGV4dCBhY3RpdmVTeW5jQ29udGV4dCwKLSAgICAgICAgICAgICAgSVN5bmNBZGFwdGVyIHN5bmNBZGFwdGVyKSB7Ci0gICAgICAgICAgICBhY3RpdmVTeW5jQ29udGV4dC5tU3luY0FkYXB0ZXIgPSBzeW5jQWRhcHRlcjsKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHJ1bkJvdW5kVG9BZGFwdGVyKGZpbmFsIEFjdGl2ZVN5bmNDb250ZXh0IGFjdGl2ZVN5bmNDb250ZXh0LAorICAgICAgICAgICAgICAgIElCaW5kZXIgc3luY0FkYXB0ZXIpIHsKICAgICAgICAgICAgIGZpbmFsIFN5bmNPcGVyYXRpb24gc3luY09wZXJhdGlvbiA9IGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBhY3RpdmVTeW5jQ29udGV4dC5tSXNMaW5rZWRUb0RlYXRoID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzeW5jQWRhcHRlci5hc0JpbmRlcigpLmxpbmtUb0RlYXRoKGFjdGl2ZVN5bmNDb250ZXh0LCAwKTsKKyAgICAgICAgICAgICAgICBzeW5jQWRhcHRlci5saW5rVG9EZWF0aChhY3RpdmVTeW5jQ29udGV4dCwgMCk7CiAKLSAgICAgICAgICAgICAgICBzeW5jQWRhcHRlci5zdGFydFN5bmMoYWN0aXZlU3luY0NvbnRleHQsIHN5bmNPcGVyYXRpb24uYXV0aG9yaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5hY2NvdW50LCBzeW5jT3BlcmF0aW9uLmV4dHJhcyk7CisgICAgICAgICAgICAgICAgaWYgKHN5bmNPcGVyYXRpb24udGFyZ2V0LnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgICAgICBhY3RpdmVTeW5jQ29udGV4dC5tU3luY0FkYXB0ZXIgPSBJU3luY0FkYXB0ZXIuU3R1Yi5hc0ludGVyZmFjZShzeW5jQWRhcHRlcik7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jQWRhcHRlcgorICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0U3luYyhhY3RpdmVTeW5jQ29udGV4dCwgc3luY09wZXJhdGlvbi50YXJnZXQucHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24udGFyZ2V0LmFjY291bnQsIHN5bmNPcGVyYXRpb24uZXh0cmFzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN5bmNPcGVyYXRpb24udGFyZ2V0LnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jU2VydmljZUFkYXB0ZXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTeW5jU2VydmljZUFkYXB0ZXIuU3R1Yi5hc0ludGVyZmFjZShzeW5jQWRhcHRlcik7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jU2VydmljZUFkYXB0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zdGFydFN5bmMoYWN0aXZlU3luY0NvbnRleHQsIHN5bmNPcGVyYXRpb24uZXh0cmFzKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmVtb3RlRXhjKSB7CiAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAibWF5YmVTdGFydE5leHRTeW5jOiBjYXVnaHQgYSBSZW1vdGVFeGNlcHRpb24sIHJlc2NoZWR1bGluZyIsIHJlbW90ZUV4Yyk7CiAgICAgICAgICAgICAgICAgY2xvc2VBY3RpdmVTeW5jQ29udGV4dChhY3RpdmVTeW5jQ29udGV4dCk7CiAgICAgICAgICAgICAgICAgaW5jcmVhc2VCYWNrb2ZmU2V0dGluZyhzeW5jT3BlcmF0aW9uKTsKLSAgICAgICAgICAgICAgICBzY2hlZHVsZVN5bmNPcGVyYXRpb24obmV3IFN5bmNPcGVyYXRpb24oc3luY09wZXJhdGlvbikpOworICAgICAgICAgICAgICAgIHNjaGVkdWxlU3luY09wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTeW5jT3BlcmF0aW9uKHN5bmNPcGVyYXRpb24sIDBMIC8qIG5ld1J1blRpbWVGcm9tTm93ICovKSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGV4YykgewogICAgICAgICAgICAgICAgIGNsb3NlQWN0aXZlU3luY0NvbnRleHQoYWN0aXZlU3luY0NvbnRleHQpOwogICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhdWdodCBSdW50aW1lRXhjZXB0aW9uIHdoaWxlIHN0YXJ0aW5nIHRoZSBzeW5jICIgKyBzeW5jT3BlcmF0aW9uLCBleGMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSB2b2lkIGNhbmNlbEFjdGl2ZVN5bmNMb2NrZWQoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBDYW5jZWwgdGhlIHN5bmMgZm9yIHRoZSBwcm92aWRlZCB0YXJnZXQgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBidW5kbGUuCisgICAgICAgICAqIEBwYXJhbSBpbmZvIGNhbiBoYXZlIG51bGwgZmllbGRzIHRvIGluZGljYXRlIGFsbCB0aGUgYWN0aXZlIHN5bmNzIGZvciB0aGF0IGZpZWxkLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSB2b2lkIGNhbmNlbEFjdGl2ZVN5bmNMb2NrZWQoU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgaW5mbywgQnVuZGxlIGV4dHJhcykgewogICAgICAgICAgICAgQXJyYXlMaXN0PEFjdGl2ZVN5bmNDb250ZXh0PiBhY3RpdmVTeW5jcyA9CiAgICAgICAgICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8QWN0aXZlU3luY0NvbnRleHQ+KG1BY3RpdmVTeW5jQ29udGV4dHMpOwogICAgICAgICAgICAgZm9yIChBY3RpdmVTeW5jQ29udGV4dCBhY3RpdmVTeW5jQ29udGV4dCA6IGFjdGl2ZVN5bmNzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVN5bmNDb250ZXh0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgYW4gYWNjb3VudCB3YXMgc3BlY2lmaWVkIHRoZW4gb25seSBjYW5jZWwgdGhlIHN5bmMgaWYgaXQgbWF0Y2hlcwotICAgICAgICAgICAgICAgICAgICBpZiAoYWNjb3VudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY291bnQuZXF1YWxzKGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLmFjY291bnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IG9wSW5mbyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNPcGVyYXRpb24udGFyZ2V0OworICAgICAgICAgICAgICAgICAgICBpZiAoIW9wSW5mby5tYXRjaGVzU3BlYyhpbmZvKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgYW4gYXV0aG9yaXR5IHdhcyBzcGVjaWZpZWQgdGhlbiBvbmx5IGNhbmNlbCB0aGUgc3luYyBpZiBpdCBtYXRjaGVzCi0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdXRob3JpdHkuZXF1YWxzKGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLmF1dGhvcml0eSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgdXNlcmlkIG1hdGNoZXMKLSAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJJZCAhPSBVc2VySGFuZGxlLlVTRVJfQUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdXNlcklkICE9IGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLnVzZXJJZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmFzICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhc3luY0V4dHJhc0VxdWFscyhhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi5leHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBubyBjb25maWcgc2V0dGluZ3MgKi8pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBydW5TeW5jRmluaXNoZWRPckNhbmNlbGVkTG9ja2VkKG51bGwgLyogbm8gcmVzdWx0IHNpbmNlIHRoaXMgaXMgYSBjYW5jZWwgKi8sCkBAIC0yNDkzLDE2ICsyNzA3LDIwIEBACiAgICAgICAgICAgICAgICAgQWN0aXZlU3luY0NvbnRleHQgYWN0aXZlU3luY0NvbnRleHQpIHsKICAgICAgICAgICAgIGJvb2xlYW4gaXNMb2dnYWJsZSA9IExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpOwogCisgICAgICAgICAgICBmaW5hbCBTeW5jT3BlcmF0aW9uIHN5bmNPcGVyYXRpb24gPSBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbjsKKyAgICAgICAgICAgIGZpbmFsIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm8gPSBzeW5jT3BlcmF0aW9uLnRhcmdldDsKKwogICAgICAgICAgICAgaWYgKGFjdGl2ZVN5bmNDb250ZXh0Lm1Jc0xpbmtlZFRvRGVhdGgpIHsKLSAgICAgICAgICAgICAgICBhY3RpdmVTeW5jQ29udGV4dC5tU3luY0FkYXB0ZXIuYXNCaW5kZXIoKS51bmxpbmtUb0RlYXRoKGFjdGl2ZVN5bmNDb250ZXh0LCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNBZGFwdGVyLmFzQmluZGVyKCkudW5saW5rVG9EZWF0aChhY3RpdmVTeW5jQ29udGV4dCwgMCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNTZXJ2aWNlQWRhcHRlci5hc0JpbmRlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAudW5saW5rVG9EZWF0aChhY3RpdmVTeW5jQ29udGV4dCwgMCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFjdGl2ZVN5bmNDb250ZXh0Lm1Jc0xpbmtlZFRvRGVhdGggPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNsb3NlQWN0aXZlU3luY0NvbnRleHQoYWN0aXZlU3luY0NvbnRleHQpOwotCi0gICAgICAgICAgICBmaW5hbCBTeW5jT3BlcmF0aW9uIHN5bmNPcGVyYXRpb24gPSBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbjsKLQogICAgICAgICAgICAgZmluYWwgbG9uZyBlbGFwc2VkVGltZSA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpIC0gYWN0aXZlU3luY0NvbnRleHQubVN0YXJ0VGltZTsKLQogICAgICAgICAgICAgU3RyaW5nIGhpc3RvcnlNZXNzYWdlOwogICAgICAgICAgICAgaW50IGRvd25zdHJlYW1BY3Rpdml0eTsKICAgICAgICAgICAgIGludCB1cHN0cmVhbUFjdGl2aXR5OwpAQCAtMjU0NCw2ICsyNzYyLDEyIEBACiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIHRvIHJldHJ5IHRoaXMgaW4gdGhpcyBjYXNlCiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jU2VydmljZUFkYXB0ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNTZXJ2aWNlQWRhcHRlci5jYW5jZWxTeW5jKGFjdGl2ZVN5bmNDb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gcmV0cnkgdGhpcyBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBoaXN0b3J5TWVzc2FnZSA9IFN5bmNTdG9yYWdlRW5naW5lLk1FU0dfQ0FOQ0VMRUQ7CiAgICAgICAgICAgICAgICAgZG93bnN0cmVhbUFjdGl2aXR5ID0gMDsKQEAgLTI1NTMsMjQgKzI3NzcsMzUgQEAKICAgICAgICAgICAgIHN0b3BTeW5jRXZlbnQoYWN0aXZlU3luY0NvbnRleHQubUhpc3RvcnlSb3dJZCwgc3luY09wZXJhdGlvbiwgaGlzdG9yeU1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgIHVwc3RyZWFtQWN0aXZpdHksIGRvd25zdHJlYW1BY3Rpdml0eSwgZWxhcHNlZFRpbWUpOwogCi0gICAgICAgICAgICBpZiAoc3luY1Jlc3VsdCAhPSBudWxsICYmIHN5bmNSZXN1bHQudG9vTWFueURlbGV0aW9ucykgewotICAgICAgICAgICAgICAgIGluc3RhbGxIYW5kbGVUb29NYW55RGVsZXRlc05vdGlmaWNhdGlvbihzeW5jT3BlcmF0aW9uLmFjY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzeW5jT3BlcmF0aW9uLmF1dGhvcml0eSwgc3luY1Jlc3VsdC5zdGF0cy5udW1EZWxldGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi51c2VySWQpOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGZ1bGwtcmVzeW5jIGFuZCBzY2hlZHVsZSBpdCBhZnRlciBjbG9zaW5nIG9mZiB0aGUgbGFzdCBzeW5jLgorICAgICAgICAgICAgaWYgKGluZm8udGFyZ2V0X3Byb3ZpZGVyKSB7CisgICAgICAgICAgICAgICAgaWYgKHN5bmNSZXN1bHQgIT0gbnVsbCAmJiBzeW5jUmVzdWx0LnRvb01hbnlEZWxldGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbEhhbmRsZVRvb01hbnlEZWxldGVzTm90aWZpY2F0aW9uKGluZm8uYWNjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnByb3ZpZGVyLCBzeW5jUmVzdWx0LnN0YXRzLm51bURlbGV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby51c2VySWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1Ob3RpZmljYXRpb25NZ3IuY2FuY2VsQXNVc2VyKG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5hY2NvdW50Lmhhc2hDb2RlKCkgXiBpbmZvLnByb3ZpZGVyLmhhc2hDb2RlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVzZXJIYW5kbGUoaW5mby51c2VySWQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHN5bmNSZXN1bHQgIT0gbnVsbCAmJiBzeW5jUmVzdWx0LmZ1bGxTeW5jUmVxdWVzdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlU3luY09wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3luY09wZXJhdGlvbihpbmZvLmFjY291bnQsIGluZm8udXNlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jT3BlcmF0aW9uLnJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5zeW5jU291cmNlLCBpbmZvLnByb3ZpZGVyLCBuZXcgQnVuZGxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogZGVsYXkgKi8sIDAgLyogZmxleCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5iYWNrb2ZmLCBzeW5jT3BlcmF0aW9uLmRlbGF5VW50aWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24uYWxsb3dQYXJhbGxlbFN5bmNzKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtTm90aWZpY2F0aW9uTWdyLmNhbmNlbEFzVXNlcihudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5hY2NvdW50Lmhhc2hDb2RlKCkgXiBzeW5jT3BlcmF0aW9uLmF1dGhvcml0eS5oYXNoQ29kZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVzZXJIYW5kbGUoc3luY09wZXJhdGlvbi51c2VySWQpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHN5bmNSZXN1bHQgIT0gbnVsbCAmJiBzeW5jUmVzdWx0LmZ1bGxTeW5jUmVxdWVzdGVkKSB7Ci0gICAgICAgICAgICAgICAgc2NoZWR1bGVTeW5jT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN5bmNPcGVyYXRpb24oc3luY09wZXJhdGlvbi5hY2NvdW50LCBzeW5jT3BlcmF0aW9uLnVzZXJJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jT3BlcmF0aW9uLnJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jT3BlcmF0aW9uLnN5bmNTb3VyY2UsIHN5bmNPcGVyYXRpb24uYXV0aG9yaXR5LCBuZXcgQnVuZGxlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBkZWxheSAqLywgMCAvKiBmbGV4ICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24uYmFja29mZiwgc3luY09wZXJhdGlvbi5kZWxheVVudGlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24uYWxsb3dQYXJhbGxlbFN5bmNzKSk7CisgICAgICAgICAgICAgICAgaWYgKHN5bmNSZXN1bHQgIT0gbnVsbCAmJiBzeW5jUmVzdWx0LmZ1bGxTeW5jUmVxdWVzdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlU3luY09wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3luY09wZXJhdGlvbihpbmZvLnNlcnZpY2UsIGluZm8udXNlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jT3BlcmF0aW9uLnJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5zeW5jU291cmNlLCBuZXcgQnVuZGxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogZGVsYXkgKi8sIDAgLyogZmxleCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5iYWNrb2ZmLCBzeW5jT3BlcmF0aW9uLmRlbGF5VW50aWwpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBubyBuZWVkIHRvIHNjaGVkdWxlIGFuIGFsYXJtLCBhcyB0aGF0IHdpbGwgYmUgZG9uZSBieSBvdXIgY2FsbGVyLgogICAgICAgICB9CkBAIC0yNTc5LDcgKzI4MTQsNyBAQAogICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQuY2xvc2UoKTsKICAgICAgICAgICAgIG1BY3RpdmVTeW5jQ29udGV4dHMucmVtb3ZlKGFjdGl2ZVN5bmNDb250ZXh0KTsKICAgICAgICAgICAgIG1TeW5jU3RvcmFnZUVuZ2luZS5yZW1vdmVBY3RpdmVTeW5jKGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jSW5mbywKLSAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNPcGVyYXRpb24udXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN5bmNPcGVyYXRpb24udGFyZ2V0LnVzZXJJZCk7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKQEAgLTI4NDIsMjYgKzMwNzcsMTYgQEAKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBsb25nIGluc2VydFN0YXJ0U3luY0V2ZW50KFN5bmNPcGVyYXRpb24gc3luY09wZXJhdGlvbikgewotICAgICAgICAgICAgZmluYWwgaW50IHNvdXJjZSA9IHN5bmNPcGVyYXRpb24uc3luY1NvdXJjZTsKICAgICAgICAgICAgIGZpbmFsIGxvbmcgbm93ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0KLSAgICAgICAgICAgIEV2ZW50TG9nLndyaXRlRXZlbnQoMjcyMCwgc3luY09wZXJhdGlvbi5hdXRob3JpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkVWRU5UX1NUQVJULCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24uYWNjb3VudC5uYW1lLmhhc2hDb2RlKCkpOwotCi0gICAgICAgICAgICByZXR1cm4gbVN5bmNTdG9yYWdlRW5naW5lLmluc2VydFN0YXJ0U3luY0V2ZW50KAotICAgICAgICAgICAgICAgICAgICBzeW5jT3BlcmF0aW9uLmFjY291bnQsIHN5bmNPcGVyYXRpb24udXNlcklkLCBzeW5jT3BlcmF0aW9uLnJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgc3luY09wZXJhdGlvbi5hdXRob3JpdHksCi0gICAgICAgICAgICAgICAgICAgIG5vdywgc291cmNlLCBzeW5jT3BlcmF0aW9uLmlzSW5pdGlhbGl6YXRpb24oKSwgc3luY09wZXJhdGlvbi5leHRyYXMKLSAgICAgICAgICAgICk7CisgICAgICAgICAgICBFdmVudExvZy53cml0ZUV2ZW50KDI3MjAsCisgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24udG9FdmVudExvZyhTeW5jU3RvcmFnZUVuZ2luZS5FVkVOVF9TVEFSVCkpOworICAgICAgICAgICAgcmV0dXJuIG1TeW5jU3RvcmFnZUVuZ2luZS5pbnNlcnRTdGFydFN5bmNFdmVudChzeW5jT3BlcmF0aW9uLCBub3cpOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgc3RvcFN5bmNFdmVudChsb25nIHJvd0lkLCBTeW5jT3BlcmF0aW9uIHN5bmNPcGVyYXRpb24sIFN0cmluZyByZXN1bHRNZXNzYWdlLAogICAgICAgICAgICAgICAgIGludCB1cHN0cmVhbUFjdGl2aXR5LCBpbnQgZG93bnN0cmVhbUFjdGl2aXR5LCBsb25nIGVsYXBzZWRUaW1lKSB7Ci0gICAgICAgICAgICBFdmVudExvZy53cml0ZUV2ZW50KDI3MjAsIHN5bmNPcGVyYXRpb24uYXV0aG9yaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5FVkVOVF9TVE9QLCBzeW5jT3BlcmF0aW9uLnN5bmNTb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24uYWNjb3VudC5uYW1lLmhhc2hDb2RlKCkpOwotCisgICAgICAgICAgICBFdmVudExvZy53cml0ZUV2ZW50KDI3MjAsCisgICAgICAgICAgICAgICAgICAgIHN5bmNPcGVyYXRpb24udG9FdmVudExvZyhTeW5jU3RvcmFnZUVuZ2luZS5FVkVOVF9TVE9QKSk7CiAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuc3RvcFN5bmNFdmVudChyb3dJZCwgZWxhcHNlZFRpbWUsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE1lc3NhZ2UsIGRvd25zdHJlYW1BY3Rpdml0eSwgdXBzdHJlYW1BY3Rpdml0eSk7CiAgICAgICAgIH0KQEAgLTI4NzYsNiArMzEwMSw4MyBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgLyoqCisgICAgICogU3luYyBleHRyYSBjb21wYXJpc29uIGZ1bmN0aW9uLgorICAgICAqIEBwYXJhbSBiMSBidW5kbGUgdG8gY29tcGFyZQorICAgICAqIEBwYXJhbSBiMiBvdGhlciBidW5kbGUgdG8gY29tcGFyZQorICAgICAqIEBwYXJhbSBpbmNsdWRlU3luY1NldHRpbmdzIGlmIGZhbHNlLCBpZ25vcmUgc3lzdGVtIHNldHRpbmdzIGluIGJ1bmRsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc3luY0V4dHJhc0VxdWFscyhCdW5kbGUgYjEsIEJ1bmRsZSBiMiwgYm9vbGVhbiBpbmNsdWRlU3luY1NldHRpbmdzKSB7CisgICAgICAgIGlmIChiMSA9PSBiMikgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gRXhpdCBlYXJseSBpZiB3ZSBjYW4uCisgICAgICAgIGlmIChpbmNsdWRlU3luY1NldHRpbmdzICYmIGIxLnNpemUoKSAhPSBiMi5zaXplKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBCdW5kbGUgYmlnZ2VyID0gYjEuc2l6ZSgpID4gYjIuc2l6ZSgpID8gYjEgOiBiMjsKKyAgICAgICAgQnVuZGxlIHNtYWxsZXIgPSBiMS5zaXplKCkgPiBiMi5zaXplKCkgPyBiMiA6IGIxOworICAgICAgICBmb3IgKFN0cmluZyBrZXkgOiBiaWdnZXIua2V5U2V0KCkpIHsKKyAgICAgICAgICAgIGlmICghaW5jbHVkZVN5bmNTZXR0aW5ncyAmJiBpc1N5bmNTZXR0aW5nKGtleSkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc21hbGxlci5jb250YWluc0tleShrZXkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFiaWdnZXIuZ2V0KGtleSkuZXF1YWxzKHNtYWxsZXIuZ2V0KGtleSkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRPRE86IEdldCByaWQgb2YgdGhpcyB3aGVuIHdlIHNlcGFyYXRlIHN5bmMgc2V0dGluZ3MgZXh0cmFzIGZyb20gZGV2IHNwZWNpZmllZCBleHRyYXMuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBwcm92aWRlZCBrZXkgaXMgdXNlZCBieSB0aGUgU3luY01hbmFnZXIgaW4gc2NoZWR1bGluZyB0aGUgc3luYy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzU3luY1NldHRpbmcoU3RyaW5nIGtleSkgeworICAgICAgICBpZiAoa2V5LmVxdWFscyhDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRVhQRURJVEVEKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleS5lcXVhbHMoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0lHTk9SRV9TRVRUSU5HUykpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChrZXkuZXF1YWxzKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19JR05PUkVfQkFDS09GRikpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChrZXkuZXF1YWxzKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19ET19OT1RfUkVUUlkpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5LmVxdWFscyhDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfTUFOVUFMKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleS5lcXVhbHMoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX1VQTE9BRCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChrZXkuZXF1YWxzKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19PVkVSUklERV9UT09fTUFOWV9ERUxFVElPTlMpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5LmVxdWFscyhDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRElTQ0FSRF9MT0NBTF9ERUxFVElPTlMpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5LmVxdWFscyhDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRVhQRUNURURfVVBMT0FEKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleS5lcXVhbHMoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0VYUEVDVEVEX0RPV05MT0FEKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleS5lcXVhbHMoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX1BSSU9SSVRZKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleS5lcXVhbHMoQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0RJU0FMTE9XX01FVEVSRUQpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5LmVxdWFscyhDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfSU5JVElBTElaRSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzdGF0aWMgY2xhc3MgUHJpbnRUYWJsZSB7CiAgICAgICAgIHByaXZhdGUgQXJyYXlMaXN0PE9iamVjdFtdPiBtVGFibGUgPSBMaXN0cy5uZXdBcnJheUxpc3QoKTsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUNvbHM7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNPcGVyYXRpb24uamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2NvbnRlbnQvU3luY09wZXJhdGlvbi5qYXZhCmluZGV4IDQ4NTY3NDc4Li4wMzZiMjFmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNPcGVyYXRpb24uamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNPcGVyYXRpb24uamF2YQpAQCAtMjAsMTAgKzIwLDkgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU3luY1JlcXVlc3Q7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLnV0aWwuUGFpcjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiAvKioKICAqIFZhbHVlIHR5cGUgdGhhdCByZXByZXNlbnRzIGEgc3luYyBvcGVyYXRpb24uCkBAIC0zMiwxMCArMzEsMTMgQEAKICAqIHtAaGlkZX0KICAqLwogcHVibGljIGNsYXNzIFN5bmNPcGVyYXRpb24gaW1wbGVtZW50cyBDb21wYXJhYmxlIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiU3luY01hbmFnZXIiOworCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX0JBQ0tHUk9VTkRfREFUQV9TRVRUSU5HU19DSEFOR0VEID0gLTE7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX0FDQ09VTlRTX1VQREFURUQgPSAtMjsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fU0VSVklDRV9DSEFOR0VEID0gLTM7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX1BFUklPRElDID0gLTQ7CisgICAgLyoqIFN5bmMgc3RhcnRlZCBiZWNhdXNlIGl0IGhhcyBqdXN0IGJlZW4gc2V0IHRvIGlzU3luY2FibGUuICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX0lTX1NZTkNBQkxFID0gLTU7CiAgICAgLyoqIFN5bmMgc3RhcnRlZCBiZWNhdXNlIGl0IGhhcyBqdXN0IGJlZW4gc2V0IHRvIHN5bmMgYXV0b21hdGljYWxseS4gKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fU1lOQ19BVVRPID0gLTY7CkBAIC01NCwxOSArNTYsMjEgQEAKICAgICAgICAgICAgICJVc2VyU3RhcnQiLAogICAgIH07CiAKLSAgICAvKiogQWNjb3VudCBpbmZvIHRvIGlkZW50aWZ5IGEgU3luY0FkYXB0ZXIgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzeXN0ZW0uICovCi0gICAgcHVibGljIGZpbmFsIEFjY291bnQgYWNjb3VudDsKLSAgICAvKiogQXV0aG9yaXR5IGluZm8gdG8gaWRlbnRpZnkgYSBTeW5jQWRhcHRlciByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbS4gKi8KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGF1dGhvcml0eTsKLSAgICAvKiogU2VydmljZSB0byB3aGljaCB0aGlzIG9wZXJhdGlvbiB3aWxsIGJpbmQgdG8gcGVyZm9ybSB0aGUgc3luYy4gKi8KLSAgICBwdWJsaWMgZmluYWwgQ29tcG9uZW50TmFtZSBzZXJ2aWNlOwotICAgIHB1YmxpYyBmaW5hbCBpbnQgdXNlcklkOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNZTkNfVEFSR0VUX1VOS05PV04gPSAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNZTkNfVEFSR0VUX0FEQVBURVIgPSAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNZTkNfVEFSR0VUX1NFUlZJQ0UgPSAyOworCisgICAgLyoqIElkZW50aWZ5aW5nIGluZm8gZm9yIHRoZSB0YXJnZXQgZm9yIHRoaXMgb3BlcmF0aW9uLiAqLworICAgIHB1YmxpYyBmaW5hbCBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCB0YXJnZXQ7CisgICAgLyoqIFdoeSB0aGlzIHN5bmMgd2FzIGtpY2tlZCBvZmYuIHtAbGluayAjUkVBU09OX05BTUVTfSAqLwogICAgIHB1YmxpYyBmaW5hbCBpbnQgcmVhc29uOworICAgIC8qKiBXaGVyZSB0aGlzIHN5bmMgd2FzIGluaXRpYXRlZC4gKi8KICAgICBwdWJsaWMgaW50IHN5bmNTb3VyY2U7CiAgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gYWxsb3dQYXJhbGxlbFN5bmNzOwogICAgIHB1YmxpYyBCdW5kbGUgZXh0cmFzOwogICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcga2V5OwogICAgIHB1YmxpYyBib29sZWFuIGV4cGVkaXRlZDsKKyAgICAvKiogQmFyZS1ib25lcyB2ZXJzaW9uIG9mIHRoaXMgb3BlcmF0aW9uIHRoYXQgaXMgcGVyc2lzdGVkIGFjcm9zcyByZWJvb3RzLiAqLwogICAgIHB1YmxpYyBTeW5jU3RvcmFnZUVuZ2luZS5QZW5kaW5nT3BlcmF0aW9uIHBlbmRpbmdPcGVyYXRpb247CiAgICAgLyoqIEVsYXBzZWQgcmVhbCB0aW1lIGluIG1pbGxpcyBhdCB3aGljaCB0byBydW4gdGhpcyBzeW5jLiAqLwogICAgIHB1YmxpYyBsb25nIGxhdGVzdFJ1blRpbWU7CkBAIC03OSwyNSArODMsNTYgQEAKICAgICAgKiBEZXBlbmRzIG9uIG1heChiYWNrb2ZmLCBsYXRlc3RSdW5UaW1lLCBhbmQgZGVsYXlVbnRpbCkuCiAgICAgICovCiAgICAgcHVibGljIGxvbmcgZWZmZWN0aXZlUnVuVGltZTsKLSAgICAvKiogQW1vdW50IG9mIHRpbWUgYmVmb3JlIHtAbGluayBlZmZlY3RpdmVSdW5UaW1lfSBmcm9tIHdoaWNoIHRoaXMgc3luYyBjYW4gcnVuLiAqLworICAgIC8qKiBBbW91bnQgb2YgdGltZSBiZWZvcmUge0BsaW5rICNlZmZlY3RpdmVSdW5UaW1lfSBmcm9tIHdoaWNoIHRoaXMgc3luYyBjYW4gcnVuLiAqLwogICAgIHB1YmxpYyBsb25nIGZsZXhUaW1lOwogCi0gICAgcHVibGljIFN5bmNPcGVyYXRpb24oQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBpbnQgcmVhc29uLCBpbnQgc291cmNlLCBTdHJpbmcgYXV0aG9yaXR5LAorICAgIHB1YmxpYyBTeW5jT3BlcmF0aW9uKEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgaW50IHJlYXNvbiwgaW50IHNvdXJjZSwgU3RyaW5nIHByb3ZpZGVyLAogICAgICAgICAgICAgQnVuZGxlIGV4dHJhcywgbG9uZyBydW5UaW1lRnJvbU5vdywgbG9uZyBmbGV4VGltZSwgbG9uZyBiYWNrb2ZmLAogICAgICAgICAgICAgbG9uZyBkZWxheVVudGlsLCBib29sZWFuIGFsbG93UGFyYWxsZWxTeW5jcykgewotICAgICAgICB0aGlzLnNlcnZpY2UgPSBudWxsOwotICAgICAgICB0aGlzLmFjY291bnQgPSBhY2NvdW50OwotICAgICAgICB0aGlzLmF1dGhvcml0eSA9IGF1dGhvcml0eTsKLSAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7CisgICAgICAgIHRoaXMudGFyZ2V0ID0gbmV3IFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KGFjY291bnQsIHByb3ZpZGVyLCB1c2VySWQpOwogICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvbjsKLSAgICAgICAgdGhpcy5zeW5jU291cmNlID0gc291cmNlOwogICAgICAgICB0aGlzLmFsbG93UGFyYWxsZWxTeW5jcyA9IGFsbG93UGFyYWxsZWxTeW5jczsKKyAgICAgICAgdGhpcy5rZXkgPSBpbml0aWFsaXNlT3BlcmF0aW9uKHRoaXMudGFyZ2V0LCBzb3VyY2UsIGV4dHJhcywgcnVuVGltZUZyb21Ob3csIGZsZXhUaW1lLAorICAgICAgICAgICAgICAgIGJhY2tvZmYsIGRlbGF5VW50aWwpOworICAgIH0KKworICAgIHB1YmxpYyBTeW5jT3BlcmF0aW9uKENvbXBvbmVudE5hbWUgc2VydmljZSwgaW50IHVzZXJJZCwgaW50IHJlYXNvbiwgaW50IHNvdXJjZSwKKyAgICAgICAgICAgIEJ1bmRsZSBleHRyYXMsIGxvbmcgcnVuVGltZUZyb21Ob3csIGxvbmcgZmxleFRpbWUsIGxvbmcgYmFja29mZiwKKyAgICAgICAgICAgIGxvbmcgZGVsYXlVbnRpbCkgeworICAgICAgICB0aGlzLnRhcmdldCA9IG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludChzZXJ2aWNlLCB1c2VySWQpOworICAgICAgICAvLyBEZWZhdWx0IHRvIHRydWUgZm9yIHN5bmMgc2VydmljZS4gVGhlIHNlcnZpY2UgaXRzZWxmIGRlY2lkZXMgaG93IHRvIGhhbmRsZSB0aGlzLgorICAgICAgICB0aGlzLmFsbG93UGFyYWxsZWxTeW5jcyA9IHRydWU7CisgICAgICAgIHRoaXMucmVhc29uID0gcmVhc29uOworICAgICAgICB0aGlzLmtleSA9CisgICAgICAgICAgICAgICAgaW5pdGlhbGlzZU9wZXJhdGlvbih0aGlzLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgZXh0cmFzLCBydW5UaW1lRnJvbU5vdywgZmxleFRpbWUsIGJhY2tvZmYsIGRlbGF5VW50aWwpOworICAgIH0KKworICAgIC8qKiBVc2VkIHRvIHJlc2NoZWR1bGUgYSBzeW5jIGF0IGEgbmV3IHBvaW50IGluIHRpbWUuICovCisgICAgU3luY09wZXJhdGlvbihTeW5jT3BlcmF0aW9uIG90aGVyLCBsb25nIG5ld1J1blRpbWVGcm9tTm93KSB7CisgICAgICAgIHRoaXMudGFyZ2V0ID0gb3RoZXIudGFyZ2V0OworICAgICAgICB0aGlzLnJlYXNvbiA9IG90aGVyLnJlYXNvbjsKKyAgICAgICAgdGhpcy5leHBlZGl0ZWQgPSBvdGhlci5leHBlZGl0ZWQ7CisgICAgICAgIHRoaXMuYWxsb3dQYXJhbGxlbFN5bmNzID0gb3RoZXIuYWxsb3dQYXJhbGxlbFN5bmNzOworICAgICAgICAvLyByZS11c2Ugb2xkIGZsZXgsIGJ1dCBvbmx5IAorICAgICAgICBsb25nIG5ld0ZsZXhUaW1lID0gTWF0aC5taW4ob3RoZXIuZmxleFRpbWUsIG5ld1J1blRpbWVGcm9tTm93KTsKKyAgICAgICAgdGhpcy5rZXkgPQorICAgICAgICAgICAgICAgIGluaXRpYWxpc2VPcGVyYXRpb24odGhpcy50YXJnZXQsCisgICAgICAgICAgICAgICAgICAgIG90aGVyLnN5bmNTb3VyY2UsIG90aGVyLmV4dHJhcywKKyAgICAgICAgICAgICAgICAgICAgbmV3UnVuVGltZUZyb21Ob3cgLyogcnVuVGltZUZyb21Ob3cqLywKKyAgICAgICAgICAgICAgICAgICAgbmV3RmxleFRpbWUgLyogZmxleFRpbWUgKi8sCisgICAgICAgICAgICAgICAgICAgIG90aGVyLmJhY2tvZmYsCisgICAgICAgICAgICAgICAgICAgIDBMIC8qIGRlbGF5VW50aWwgKi8pOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGluaXRpYWxpc2VPcGVyYXRpb24oU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgaW5mbywgaW50IHNvdXJjZSwgQnVuZGxlIGV4dHJhcywKKyAgICAgICAgICAgIGxvbmcgcnVuVGltZUZyb21Ob3csIGxvbmcgZmxleFRpbWUsIGxvbmcgYmFja29mZiwgbG9uZyBkZWxheVVudGlsKSB7CisgICAgICAgIHRoaXMuc3luY1NvdXJjZSA9IHNvdXJjZTsKICAgICAgICAgdGhpcy5leHRyYXMgPSBuZXcgQnVuZGxlKGV4dHJhcyk7CiAgICAgICAgIGNsZWFuQnVuZGxlKHRoaXMuZXh0cmFzKTsKICAgICAgICAgdGhpcy5kZWxheVVudGlsID0gZGVsYXlVbnRpbDsKICAgICAgICAgdGhpcy5iYWNrb2ZmID0gYmFja29mZjsKICAgICAgICAgZmluYWwgbG9uZyBub3cgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgICAgLy8gQ2hlY2tzIHRoZSBleHRyYXMgYnVuZGxlLiBNdXN0IG9jY3VyIGFmdGVyIHdlIHNldCB0aGUgaW50ZXJuYWwgYnVuZGxlLgogICAgICAgICBpZiAocnVuVGltZUZyb21Ob3cgPCAwIHx8IGlzRXhwZWRpdGVkKCkpIHsKICAgICAgICAgICAgIHRoaXMuZXhwZWRpdGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHRoaXMubGF0ZXN0UnVuVGltZSA9IG5vdzsKQEAgLTEwOCw3ICsxNDMsMTEgQEAKICAgICAgICAgICAgIHRoaXMuZmxleFRpbWUgPSBmbGV4VGltZTsKICAgICAgICAgfQogICAgICAgICB1cGRhdGVFZmZlY3RpdmVSdW5UaW1lKCk7Ci0gICAgICAgIHRoaXMua2V5ID0gdG9LZXkoKTsKKyAgICAgICAgcmV0dXJuIHRvS2V5KGluZm8sIHRoaXMuZXh0cmFzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzQXV0aG9yaXR5KFN5bmNPcGVyYXRpb24gb3RoZXIpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0Lm1hdGNoZXNTcGVjKG90aGVyLnRhcmdldCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMjYsMTAgKzE2NSw2IEBACiAgICAgICAgIHJlbW92ZUZhbHNlRXh0cmEoYnVuZGxlLCBDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRVhQRURJVEVEKTsKICAgICAgICAgcmVtb3ZlRmFsc2VFeHRyYShidW5kbGUsIENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19PVkVSUklERV9UT09fTUFOWV9ERUxFVElPTlMpOwogICAgICAgICByZW1vdmVGYWxzZUV4dHJhKGJ1bmRsZSwgQ29udGVudFJlc29sdmVyLlNZTkNfRVhUUkFTX0RJU0FMTE9XX01FVEVSRUQpOwotCi0gICAgICAgIC8vIFJlbW92ZSBDb25maWcgZGF0YS4KLSAgICAgICAgYnVuZGxlLnJlbW92ZShDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRVhQRUNURURfVVBMT0FEKTsKLSAgICAgICAgYnVuZGxlLnJlbW92ZShDb250ZW50UmVzb2x2ZXIuU1lOQ19FWFRSQVNfRVhQRUNURURfRE9XTkxPQUQpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCByZW1vdmVGYWxzZUV4dHJhKEJ1bmRsZSBidW5kbGUsIFN0cmluZyBleHRyYU5hbWUpIHsKQEAgLTEzOCwyMiArMTczLDI0IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiogT25seSB1c2VkIHRvIGltbWVkaWF0ZWx5IHJlc2NoZWR1bGUgYSBzeW5jLiAqLwotICAgIFN5bmNPcGVyYXRpb24oU3luY09wZXJhdGlvbiBvdGhlcikgewotICAgICAgICB0aGlzLnNlcnZpY2UgPSBvdGhlci5zZXJ2aWNlOwotICAgICAgICB0aGlzLmFjY291bnQgPSBvdGhlci5hY2NvdW50OwotICAgICAgICB0aGlzLmF1dGhvcml0eSA9IG90aGVyLmF1dGhvcml0eTsKLSAgICAgICAgdGhpcy51c2VySWQgPSBvdGhlci51c2VySWQ7Ci0gICAgICAgIHRoaXMucmVhc29uID0gb3RoZXIucmVhc29uOwotICAgICAgICB0aGlzLnN5bmNTb3VyY2UgPSBvdGhlci5zeW5jU291cmNlOwotICAgICAgICB0aGlzLmV4dHJhcyA9IG5ldyBCdW5kbGUob3RoZXIuZXh0cmFzKTsKLSAgICAgICAgdGhpcy5leHBlZGl0ZWQgPSBvdGhlci5leHBlZGl0ZWQ7Ci0gICAgICAgIHRoaXMubGF0ZXN0UnVuVGltZSA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgICAgICB0aGlzLmZsZXhUaW1lID0gMEw7Ci0gICAgICAgIHRoaXMuYmFja29mZiA9IG90aGVyLmJhY2tvZmY7Ci0gICAgICAgIHRoaXMuYWxsb3dQYXJhbGxlbFN5bmNzID0gb3RoZXIuYWxsb3dQYXJhbGxlbFN5bmNzOwotICAgICAgICB0aGlzLnVwZGF0ZUVmZmVjdGl2ZVJ1blRpbWUoKTsKLSAgICAgICAgdGhpcy5rZXkgPSB0b0tleSgpOworICAgIC8qKgorICAgICAqIERldGVybWluZSB3aGV0aGVyIGlmIHRoaXMgc3luYyBvcGVyYXRpb24gaXMgcnVubmluZywgdGhlIHByb3ZpZGVkIG9wZXJhdGlvbiB3b3VsZCBjb25mbGljdAorICAgICAqIHdpdGggaXQuCisgICAgICogUGFyYWxsZWwgc3luY3MgYWxsb3cgbXVsdGlwbGUgYWNjb3VudHMgdG8gYmUgc3luY2VkIGF0IHRoZSBzYW1lIHRpbWUuIAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQ29uZmxpY3QoU3luY09wZXJhdGlvbiB0b1J1bikgeworICAgICAgICBmaW5hbCBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBvdGhlciA9IHRvUnVuLnRhcmdldDsKKyAgICAgICAgaWYgKHRhcmdldC50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYWNjb3VudC50eXBlLmVxdWFscyhvdGhlci5hY2NvdW50LnR5cGUpCisgICAgICAgICAgICAgICAgICAgICYmIHRhcmdldC5wcm92aWRlci5lcXVhbHMob3RoZXIucHJvdmlkZXIpCisgICAgICAgICAgICAgICAgICAgICYmIHRhcmdldC51c2VySWQgPT0gb3RoZXIudXNlcklkCisgICAgICAgICAgICAgICAgICAgICYmICghYWxsb3dQYXJhbGxlbFN5bmNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGFyZ2V0LmFjY291bnQubmFtZS5lcXVhbHMob3RoZXIuYWNjb3VudC5uYW1lKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPcHMgdGhhdCB0YXJnZXQgYSBzZXJ2aWNlIGRlZmF1bHQgdG8gYWxsb3cgcGFyYWxsZWwgc3luY3MsIHdoaWNoIGlzIGhhbmRsZWQgYnkgdGhlCisgICAgICAgICAgICAvLyBzZXJ2aWNlIHJldHVybmluZyBTWU5DX0lOX1BST0dSRVNTIGlmIHRoZXkgZG9uJ3QuCisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LnNlcnZpY2UuZXF1YWxzKG90aGVyLnNlcnZpY2UpICYmICFhbGxvd1BhcmFsbGVsU3luY3M7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTE2MiwxOCArMTk5LDI2IEBACiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBkdW1wKFBhY2thZ2VNYW5hZ2VyIHBtLCBib29sZWFuIHVzZU9uZUxpbmUpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCkKLSAgICAgICAgICAgICAgICAuYXBwZW5kKGFjY291bnQubmFtZSkKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgIGlmICh0YXJnZXQudGFyZ2V0X3Byb3ZpZGVyKSB7CisgICAgICAgICAgICBzYi5hcHBlbmQodGFyZ2V0LmFjY291bnQubmFtZSkKICAgICAgICAgICAgICAgICAuYXBwZW5kKCIgdSIpCi0gICAgICAgICAgICAgICAgLmFwcGVuZCh1c2VySWQpLmFwcGVuZCgiICgiKQotICAgICAgICAgICAgICAgIC5hcHBlbmQoYWNjb3VudC50eXBlKQorICAgICAgICAgICAgICAgIC5hcHBlbmQodGFyZ2V0LnVzZXJJZCkuYXBwZW5kKCIgKCIpCisgICAgICAgICAgICAgICAgLmFwcGVuZCh0YXJnZXQuYWNjb3VudC50eXBlKQogICAgICAgICAgICAgICAgIC5hcHBlbmQoIikiKQogICAgICAgICAgICAgICAgIC5hcHBlbmQoIiwgIikKLSAgICAgICAgICAgICAgICAuYXBwZW5kKGF1dGhvcml0eSkKLSAgICAgICAgICAgICAgICAuYXBwZW5kKCIsICIpCi0gICAgICAgICAgICAgICAgLmFwcGVuZChTeW5jU3RvcmFnZUVuZ2luZS5TT1VSQ0VTW3N5bmNTb3VyY2VdKQotICAgICAgICAgICAgICAgIC5hcHBlbmQoIiwgbGF0ZXN0UnVuVGltZSAiKQotICAgICAgICAgICAgICAgIC5hcHBlbmQobGF0ZXN0UnVuVGltZSk7CisgICAgICAgICAgICAgICAgLmFwcGVuZCh0YXJnZXQucHJvdmlkZXIpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQudGFyZ2V0X3NlcnZpY2UpIHsKKyAgICAgICAgICAgIHNiLmFwcGVuZCh0YXJnZXQuc2VydmljZS5nZXRQYWNrYWdlTmFtZSgpKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoIiB1IikKKyAgICAgICAgICAgICAgICAuYXBwZW5kKHRhcmdldC51c2VySWQpLmFwcGVuZCgiICgiKQorICAgICAgICAgICAgICAgIC5hcHBlbmQodGFyZ2V0LnNlcnZpY2UuZ2V0Q2xhc3NOYW1lKCkpLmFwcGVuZCgiKSIpCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgfQorICAgICAgICBzYi5hcHBlbmQoU3luY1N0b3JhZ2VFbmdpbmUuU09VUkNFU1tzeW5jU291cmNlXSkKKyAgICAgICAgICAgIC5hcHBlbmQoIiwgY3VycmVudFJ1blRpbWUgIikKKyAgICAgICAgICAgIC5hcHBlbmQoZWZmZWN0aXZlUnVuVGltZSk7CiAgICAgICAgIGlmIChleHBlZGl0ZWQpIHsKICAgICAgICAgICAgIHNiLmFwcGVuZCgiLCBFWFBFRElURUQiKTsKICAgICAgICAgfQpAQCAtMjExLDEwICsyNTYsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIGJvb2xlYW4gaXNNZXRlcmVkRGlzYWxsb3dlZCgpIHsKLSAgICAgICAgcmV0dXJuIGV4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19ESVNBTExPV19NRVRFUkVELCBmYWxzZSk7Ci0gICAgfQotCiAgICAgcHVibGljIGJvb2xlYW4gaXNJbml0aWFsaXphdGlvbigpIHsKICAgICAgICAgcmV0dXJuIGV4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19JTklUSUFMSVpFLCBmYWxzZSk7CiAgICAgfQpAQCAtMjI3LDI4ICsyNjgsMzkgQEAKICAgICAgICAgcmV0dXJuIGV4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19JR05PUkVfQkFDS09GRiwgZmFsc2UpOwogICAgIH0KIAorICAgIHB1YmxpYyBib29sZWFuIGlzTm90QWxsb3dlZE9uTWV0ZXJlZCgpIHsKKyAgICAgICAgcmV0dXJuIGV4dHJhcy5nZXRCb29sZWFuKENvbnRlbnRSZXNvbHZlci5TWU5DX0VYVFJBU19ESVNBTExPV19NRVRFUkVELCBmYWxzZSk7CisgICAgfQorCiAgICAgLyoqIENoYW5nZWQgaW4gVjMuICovCi0gICAgcHJpdmF0ZSBTdHJpbmcgdG9LZXkoKSB7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9LZXkoU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgaW5mbywgQnVuZGxlIGV4dHJhcykgewogICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgewotICAgICAgICAgICAgc2IuYXBwZW5kKCJhdXRob3JpdHk6ICIpLmFwcGVuZChhdXRob3JpdHkpOwotICAgICAgICAgICAgc2IuYXBwZW5kKCIgYWNjb3VudCB7bmFtZT0iICsgYWNjb3VudC5uYW1lICsgIiwgdXNlcj0iICsgdXNlcklkICsgIiwgdHlwZT0iICsgYWNjb3VudC50eXBlCisgICAgICAgIGlmIChpbmZvLnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgc2IuYXBwZW5kKCJwcm92aWRlcjogIikuYXBwZW5kKGluZm8ucHJvdmlkZXIpOworICAgICAgICAgICAgc2IuYXBwZW5kKCIgYWNjb3VudCB7bmFtZT0iICsgaW5mby5hY2NvdW50Lm5hbWUKKyAgICAgICAgICAgICAgICAgICAgKyAiLCB1c2VyPSIKKyAgICAgICAgICAgICAgICAgICAgKyBpbmZvLnVzZXJJZAorICAgICAgICAgICAgICAgICAgICArICIsIHR5cGU9IgorICAgICAgICAgICAgICAgICAgICArIGluZm8uYWNjb3VudC50eXBlCiAgICAgICAgICAgICAgICAgICAgICsgIn0iKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlIGlmIChpbmZvLnRhcmdldF9zZXJ2aWNlKSB7CiAgICAgICAgICAgICBzYi5hcHBlbmQoInNlcnZpY2Uge3BhY2thZ2U9IiApCi0gICAgICAgICAgICAgICAgLmFwcGVuZChzZXJ2aWNlLmdldFBhY2thZ2VOYW1lKCkpCisgICAgICAgICAgICAgICAgLmFwcGVuZChpbmZvLnNlcnZpY2UuZ2V0UGFja2FnZU5hbWUoKSkKICAgICAgICAgICAgICAgICAuYXBwZW5kKCIgdXNlcj0iKQotICAgICAgICAgICAgICAgIC5hcHBlbmQodXNlcklkKQorICAgICAgICAgICAgICAgIC5hcHBlbmQoaW5mby51c2VySWQpCiAgICAgICAgICAgICAgICAgLmFwcGVuZCgiLCBjbGFzcz0iKQotICAgICAgICAgICAgICAgIC5hcHBlbmQoc2VydmljZS5nZXRDbGFzc05hbWUoKSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKGluZm8uc2VydmljZS5nZXRDbGFzc05hbWUoKSkKICAgICAgICAgICAgICAgICAuYXBwZW5kKCJ9Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMb2cudihUQUcsICJDb252ZXJ0aW5nIFN5bmNPcGVyYXRvbiB0byBrZXksIGludmFsaWQgdGFyZ2V0OiAiICsgaW5mby50b1N0cmluZygpKTsKKyAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgfQogICAgICAgICBzYi5hcHBlbmQoIiBleHRyYXM6ICIpOwogICAgICAgICBleHRyYXNUb1N0cmluZ0J1aWxkZXIoZXh0cmFzLCBzYik7CiAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBleHRyYXNUb1N0cmluZ0J1aWxkZXIoQnVuZGxlIGJ1bmRsZSwgU3RyaW5nQnVpbGRlciBzYikgeworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZXh0cmFzVG9TdHJpbmdCdWlsZGVyKEJ1bmRsZSBidW5kbGUsIFN0cmluZ0J1aWxkZXIgc2IpIHsKICAgICAgICAgc2IuYXBwZW5kKCJbIik7CiAgICAgICAgIGZvciAoU3RyaW5nIGtleSA6IGJ1bmRsZS5rZXlTZXQoKSkgewogICAgICAgICAgICAgc2IuYXBwZW5kKGtleSkuYXBwZW5kKCI9IikuYXBwZW5kKGJ1bmRsZS5nZXQoa2V5KSkuYXBwZW5kKCIgIik7CkBAIC0yNTYsNiArMzA4LDMxIEBACiAgICAgICAgIHNiLmFwcGVuZCgiXSIpOwogICAgIH0KIAorICAgIHB1YmxpYyBTdHJpbmcgd2FrZUxvY2tLZXkoKSB7CisgICAgICAgIGlmICh0YXJnZXQudGFyZ2V0X3Byb3ZpZGVyKSB7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFjY291bnQubmFtZSArICIvIiArIHRhcmdldC5hY2NvdW50LnR5cGUgKyAiOiIgKyB0YXJnZXQucHJvdmlkZXI7CisgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LnNlcnZpY2UuZ2V0UGFja2FnZU5hbWUoKSArICIvIiArIHRhcmdldC5zZXJ2aWNlLmdldENsYXNzTmFtZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJJbnZhbGlkIHRhcmdldCBnZXR0aW5nIHdha2Vsb2NrIGZvciBvcGVyYXRpb24gLSAiICsga2V5KTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyB3YWtlTG9ja05hbWUoKSB7CisgICAgICAgIGlmICh0YXJnZXQudGFyZ2V0X3Byb3ZpZGVyKSB7CisgICAgICAgICAgICByZXR1cm4gIi8iICsgdGFyZ2V0LnByb3ZpZGVyCisgICAgICAgICAgICAgICAgICAgICsgIi8iICsgdGFyZ2V0LmFjY291bnQudHlwZQorICAgICAgICAgICAgICAgICAgICArICIvIiArIHRhcmdldC5hY2NvdW50Lm5hbWU7CisgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICByZXR1cm4gIi8iICsgdGFyZ2V0LnNlcnZpY2UuZ2V0UGFja2FnZU5hbWUoKQorICAgICAgICAgICAgICAgICAgICArICIvIiArIHRhcmdldC5zZXJ2aWNlLmdldENsYXNzTmFtZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJJbnZhbGlkIHRhcmdldCBnZXR0aW5nIHdha2Vsb2NrIG5hbWUgZm9yIG9wZXJhdGlvbiAtICIgKyBrZXkpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBVcGRhdGUgdGhlIGVmZmVjdGl2ZSBydW4gdGltZSBvZiB0aGlzIE9wZXJhdGlvbiBiYXNlZCBvbiBsYXRlc3RSdW5UaW1lIChzcGVjaWZpZWQgYXQKICAgICAgKiBjcmVhdGlvbiB0aW1lIG9mIHN5bmMpLCBkZWxheVVudGlsIChzcGVjaWZpZWQgYnkgU3luY0FkYXB0ZXIpLCBvciBiYWNrb2ZmIChzcGVjaWZpZWQgYnkKQEAgLTI5MSw0ICszNjgsMjEgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQorCisgICAgLy8gVE9ETzogVGVzdCB0aGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGNhc3RpbmcgdG8gb2JqZWN0IGRvZXNuJ3QgbG9zZSB0aGUgdHlwZSBpbmZvIGZvciBFdmVudExvZy4KKyAgICBwdWJsaWMgT2JqZWN0W10gdG9FdmVudExvZyhpbnQgZXZlbnQpIHsKKyAgICAgICAgT2JqZWN0W10gbG9nQXJyYXkgPSBuZXcgT2JqZWN0WzRdOworICAgICAgICBsb2dBcnJheVsxXSA9IGV2ZW50OworICAgICAgICBsb2dBcnJheVsyXSA9IHN5bmNTb3VyY2U7CisgICAgICAgIGlmICh0YXJnZXQudGFyZ2V0X3Byb3ZpZGVyKSB7CisgICAgICAgICAgICBsb2dBcnJheVswXSA9IHRhcmdldC5wcm92aWRlcjsKKyAgICAgICAgICAgIGxvZ0FycmF5WzNdID0gdGFyZ2V0LmFjY291bnQubmFtZS5oYXNoQ29kZSgpOworICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC50YXJnZXRfc2VydmljZSkgeworICAgICAgICAgICAgbG9nQXJyYXlbMF0gPSB0YXJnZXQuc2VydmljZS5nZXRQYWNrYWdlTmFtZSgpOworICAgICAgICAgICAgbG9nQXJyYXlbM10gPSB0YXJnZXQuc2VydmljZS5oYXNoQ29kZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTG9nLnd0ZihUQUcsICJzeW5jIG9wIHdpdGggaW52YWxpZCB0YXJnZXQ6ICIgKyBrZXkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsb2dBcnJheTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNRdWV1ZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jUXVldWUuamF2YQppbmRleCA2ZjNmZTZlLi41ZDkzODgyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNRdWV1ZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2NvbnRlbnQvU3luY1F1ZXVlLmphdmEKQEAgLTE2LDEyICsxNiwxMSBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5jb250ZW50OwogCi1pbXBvcnQgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVnaXN0ZXJlZFNlcnZpY2VzQ2FjaGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlN5bmNBZGFwdGVyVHlwZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU3luY0FkYXB0ZXJzQ2FjaGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlJlZ2lzdGVyZWRTZXJ2aWNlc0NhY2hlLlNlcnZpY2VJbmZvOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LmZvcm1hdC5EYXRlVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKQEAgLTYwLDI1ICs1OSw1MSBAQAogCiAgICAgcHVibGljIHZvaWQgYWRkUGVuZGluZ09wZXJhdGlvbnMoaW50IHVzZXJJZCkgewogICAgICAgICBmb3IgKFN5bmNTdG9yYWdlRW5naW5lLlBlbmRpbmdPcGVyYXRpb24gb3AgOiBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0UGVuZGluZ09wZXJhdGlvbnMoKSkgewotICAgICAgICAgICAgaWYgKG9wLnVzZXJJZCAhPSB1c2VySWQpIGNvbnRpbnVlOworICAgICAgICAgICAgZmluYWwgU3luY1N0b3JhZ2VFbmdpbmUuRW5kUG9pbnQgaW5mbyA9IG9wLnRhcmdldDsKKyAgICAgICAgICAgIGlmIChpbmZvLnVzZXJJZCAhPSB1c2VySWQpIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBmaW5hbCBQYWlyPExvbmcsIExvbmc+IGJhY2tvZmYgPSBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0QmFja29mZigKLSAgICAgICAgICAgICAgICAgICAgb3AuYWNjb3VudCwgb3AudXNlcklkLCBvcC5hdXRob3JpdHkpOwotICAgICAgICAgICAgZmluYWwgU2VydmljZUluZm88U3luY0FkYXB0ZXJUeXBlPiBzeW5jQWRhcHRlckluZm8gPSBtU3luY0FkYXB0ZXJzLmdldFNlcnZpY2VJbmZvKAotICAgICAgICAgICAgICAgICAgICBTeW5jQWRhcHRlclR5cGUubmV3S2V5KG9wLmF1dGhvcml0eSwgb3AuYWNjb3VudC50eXBlKSwgb3AudXNlcklkKTsKLSAgICAgICAgICAgIGlmIChzeW5jQWRhcHRlckluZm8gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIk1pc3Npbmcgc3luYyBhZGFwdGVyIGluZm8gZm9yIGF1dGhvcml0eSAiICsgb3AuYXV0aG9yaXR5ICsgIiwgdXNlcklkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgb3AudXNlcklkKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZpbmFsIFBhaXI8TG9uZywgTG9uZz4gYmFja29mZiA9IG1TeW5jU3RvcmFnZUVuZ2luZS5nZXRCYWNrb2ZmKGluZm8pOworICAgICAgICAgICAgU3luY09wZXJhdGlvbiBvcGVyYXRpb25Ub0FkZDsKKyAgICAgICAgICAgIGlmIChpbmZvLnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgIGZpbmFsIFNlcnZpY2VJbmZvPFN5bmNBZGFwdGVyVHlwZT4gc3luY0FkYXB0ZXJJbmZvID0gbVN5bmNBZGFwdGVycy5nZXRTZXJ2aWNlSW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNBZGFwdGVyVHlwZS5uZXdLZXkoaW5mby5wcm92aWRlciwgaW5mby5hY2NvdW50LnR5cGUpLCBpbmZvLnVzZXJJZCk7CisgICAgICAgICAgICAgICAgaWYgKHN5bmNBZGFwdGVySW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiTWlzc2luZyBzeW5jIGFkYXB0ZXIgaW5mbyBmb3IgYXV0aG9yaXR5ICIgKyBvcC50YXJnZXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvcGVyYXRpb25Ub0FkZCA9IG5ldyBTeW5jT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5hY2NvdW50LCBpbmZvLnVzZXJJZCwgb3AucmVhc29uLCBvcC5zeW5jU291cmNlLCBpbmZvLnByb3ZpZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgb3AuZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBkZWxheSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogZmxleCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tvZmYgIT0gbnVsbCA/IGJhY2tvZmYuZmlyc3QgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbVN5bmNTdG9yYWdlRW5naW5lLmdldERlbGF5VW50aWxUaW1lKGluZm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgc3luY0FkYXB0ZXJJbmZvLnR5cGUuYWxsb3dQYXJhbGxlbFN5bmNzKCkpOworICAgICAgICAgICAgICAgIG9wZXJhdGlvblRvQWRkLmV4cGVkaXRlZCA9IG9wLmV4cGVkaXRlZDsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25Ub0FkZC5wZW5kaW5nT3BlcmF0aW9uID0gb3A7CisgICAgICAgICAgICAgICAgYWRkKG9wZXJhdGlvblRvQWRkLCBvcCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluZm8udGFyZ2V0X3NlcnZpY2UpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBtUGFja2FnZU1hbmFnZXIuZ2V0U2VydmljZUluZm8oaW5mby5zZXJ2aWNlLCAwKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChQYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIk1pc3Npbmcgc3luYyBzZXJ2aWNlIGZvciBhdXRob3JpdHkgIiArIG9wLnRhcmdldCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9wZXJhdGlvblRvQWRkID0gbmV3IFN5bmNPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnNlcnZpY2UsIGluZm8udXNlcklkLCBvcC5yZWFzb24sIG9wLnN5bmNTb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBvcC5leHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAwIC8qIGRlbGF5ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBmbGV4ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgYmFja29mZiAhPSBudWxsID8gYmFja29mZi5maXJzdCA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0RGVsYXlVbnRpbFRpbWUoaW5mbykpOworICAgICAgICAgICAgICAgIG9wZXJhdGlvblRvQWRkLmV4cGVkaXRlZCA9IG9wLmV4cGVkaXRlZDsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25Ub0FkZC5wZW5kaW5nT3BlcmF0aW9uID0gb3A7CisgICAgICAgICAgICAgICAgYWRkKG9wZXJhdGlvblRvQWRkLCBvcCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTeW5jT3BlcmF0aW9uIHN5bmNPcGVyYXRpb24gPSBuZXcgU3luY09wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgb3AuYWNjb3VudCwgb3AudXNlcklkLCBvcC5yZWFzb24sIG9wLnN5bmNTb3VyY2UsIG9wLmF1dGhvcml0eSwgb3AuZXh0cmFzLAotICAgICAgICAgICAgICAgICAgICAwIC8qIGRlbGF5ICovLCAwIC8qIGZsZXggKi8sIGJhY2tvZmYgIT0gbnVsbCA/IGJhY2tvZmYuZmlyc3QgOiAwLAotICAgICAgICAgICAgICAgICAgICBtU3luY1N0b3JhZ2VFbmdpbmUuZ2V0RGVsYXlVbnRpbFRpbWUob3AuYWNjb3VudCwgb3AudXNlcklkLCBvcC5hdXRob3JpdHkpLAotICAgICAgICAgICAgICAgICAgICBzeW5jQWRhcHRlckluZm8udHlwZS5hbGxvd1BhcmFsbGVsU3luY3MoKSk7Ci0gICAgICAgICAgICBzeW5jT3BlcmF0aW9uLmV4cGVkaXRlZCA9IG9wLmV4cGVkaXRlZDsKLSAgICAgICAgICAgIHN5bmNPcGVyYXRpb24ucGVuZGluZ09wZXJhdGlvbiA9IG9wOwotICAgICAgICAgICAgYWRkKHN5bmNPcGVyYXRpb24sIG9wKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTE5LDEyICsxNDQsOCBAQAogICAgICAgICBvcGVyYXRpb24ucGVuZGluZ09wZXJhdGlvbiA9IHBvcDsKICAgICAgICAgLy8gRG9uJ3QgdXBkYXRlIHRoZSBQZW5kaW5nT3AgaWYgb25lIGFscmVhZHkgZXhpc3RzLiBUaGlzIHJlYWxseSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIsCiAgICAgICAgIC8vIG5vIGFjdHVhbCBzY2hlZHVsaW5nIGluZm8gaXMgcGxhY2VkIGhlcmUuCi0gICAgICAgIC8vIFRPRE86IENoYW5nZSB0aGlzIHRvIHN1cHBvcnQgc2VydmljZSBjb21wb25lbnRzLgogICAgICAgICBpZiAob3BlcmF0aW9uLnBlbmRpbmdPcGVyYXRpb24gPT0gbnVsbCkgewotICAgICAgICAgICAgcG9wID0gbmV3IFN5bmNTdG9yYWdlRW5naW5lLlBlbmRpbmdPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi5hY2NvdW50LCBvcGVyYXRpb24udXNlcklkLCBvcGVyYXRpb24ucmVhc29uLCBvcGVyYXRpb24uc3luY1NvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLmF1dGhvcml0eSwgb3BlcmF0aW9uLmV4dHJhcywgb3BlcmF0aW9uLmV4cGVkaXRlZCk7Ci0gICAgICAgICAgICBwb3AgPSBtU3luY1N0b3JhZ2VFbmdpbmUuaW5zZXJ0SW50b1BlbmRpbmcocG9wKTsKKyAgICAgICAgICAgIHBvcCA9IG1TeW5jU3RvcmFnZUVuZ2luZS5pbnNlcnRJbnRvUGVuZGluZyhvcGVyYXRpb24pOwogICAgICAgICAgICAgaWYgKHBvcCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiZXJyb3IgYWRkaW5nIHBlbmRpbmcgc3luYyBvcGVyYXRpb24gIgogICAgICAgICAgICAgICAgICAgICAgICAgKyBvcGVyYXRpb24pOwpAQCAtMTM2LDE3ICsxNTcsMTYgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlVXNlcihpbnQgdXNlcklkKSB7CisgICAgcHVibGljIHZvaWQgcmVtb3ZlVXNlckxvY2tlZChpbnQgdXNlcklkKSB7CiAgICAgICAgIEFycmF5TGlzdDxTeW5jT3BlcmF0aW9uPiBvcHNUb1JlbW92ZSA9IG5ldyBBcnJheUxpc3Q8U3luY09wZXJhdGlvbj4oKTsKICAgICAgICAgZm9yIChTeW5jT3BlcmF0aW9uIG9wIDogbU9wZXJhdGlvbnNNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChvcC51c2VySWQgPT0gdXNlcklkKSB7CisgICAgICAgICAgICBpZiAob3AudGFyZ2V0LnVzZXJJZCA9PSB1c2VySWQpIHsKICAgICAgICAgICAgICAgICBvcHNUb1JlbW92ZS5hZGQob3ApOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChTeW5jT3BlcmF0aW9uIG9wIDogb3BzVG9SZW1vdmUpIHsKLSAgICAgICAgICAgIHJlbW92ZShvcCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoU3luY09wZXJhdGlvbiBvcCA6IG9wc1RvUmVtb3ZlKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlKG9wKTsKKyAgICAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTE1NCw4ICsxNzQsMTUgQEAKICAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIHRoZSBvcGVyYXRpb24gdG8gcmVtb3ZlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlKFN5bmNPcGVyYXRpb24gb3BlcmF0aW9uKSB7CisgICAgICAgIGJvb2xlYW4gaXNMb2dnYWJsZSA9IExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpOwogICAgICAgICBTeW5jT3BlcmF0aW9uIG9wZXJhdGlvblRvUmVtb3ZlID0gbU9wZXJhdGlvbnNNYXAucmVtb3ZlKG9wZXJhdGlvbi5rZXkpOworICAgICAgICBpZiAoaXNMb2dnYWJsZSkgeworICAgICAgICAgICAgTG9nLnYoVEFHLCAiQXR0ZW1wdGluZyB0byByZW1vdmU6ICIgKyBvcGVyYXRpb24ua2V5KTsKKyAgICAgICAgfQogICAgICAgICBpZiAob3BlcmF0aW9uVG9SZW1vdmUgPT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKGlzTG9nZ2FibGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudihUQUcsICJDb3VsZCBub3QgZmluZDogIiArIG9wZXJhdGlvbi5rZXkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICghbVN5bmNTdG9yYWdlRW5naW5lLmRlbGV0ZUZyb21QZW5kaW5nKG9wZXJhdGlvblRvUmVtb3ZlLnBlbmRpbmdPcGVyYXRpb24pKSB7CkBAIC0xNjQsNDEgKzE5MSw1OCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgb25CYWNrb2ZmQ2hhbmdlZChBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIFN0cmluZyBwcm92aWRlck5hbWUsIGxvbmcgYmFja29mZikgewotICAgICAgICAvLyBmb3IgZWFjaCBvcCB0aGF0IG1hdGNoZXMgdGhlIGFjY291bnQgYW5kIHByb3ZpZGVyIHVwZGF0ZSBpdHMKKyAgICAvKiogUmVzZXQgYmFja29mZnMgZm9yIGFsbCBvcGVyYXRpb25zIGluIHRoZSBxdWV1ZS4gKi8KKyAgICBwdWJsaWMgdm9pZCBjbGVhckJhY2tvZmZzKCkgeworICAgICAgICBmb3IgKFN5bmNPcGVyYXRpb24gb3AgOiBtT3BlcmF0aW9uc01hcC52YWx1ZXMoKSkgeworICAgICAgICAgICAgb3AuYmFja29mZiA9IDBMOworICAgICAgICAgICAgb3AudXBkYXRlRWZmZWN0aXZlUnVuVGltZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgb25CYWNrb2ZmQ2hhbmdlZChTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCB0YXJnZXQsIGxvbmcgYmFja29mZikgeworICAgICAgICAvLyBGb3IgZWFjaCBvcCB0aGF0IG1hdGNoZXMgdGhlIHRhcmdldCBvZiB0aGUgY2hhbmdlZCBvcCwgdXBkYXRlIGl0cwogICAgICAgICAvLyBiYWNrb2ZmIGFuZCBlZmZlY3RpdmVTdGFydFRpbWUKICAgICAgICAgZm9yIChTeW5jT3BlcmF0aW9uIG9wIDogbU9wZXJhdGlvbnNNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChvcC5hY2NvdW50LmVxdWFscyhhY2NvdW50KSAmJiBvcC5hdXRob3JpdHkuZXF1YWxzKHByb3ZpZGVyTmFtZSkKLSAgICAgICAgICAgICAgICAgICAgJiYgb3AudXNlcklkID09IHVzZXJJZCkgeworICAgICAgICAgICAgaWYgKG9wLnRhcmdldC5tYXRjaGVzU3BlYyh0YXJnZXQpKSB7CiAgICAgICAgICAgICAgICAgb3AuYmFja29mZiA9IGJhY2tvZmY7CiAgICAgICAgICAgICAgICAgb3AudXBkYXRlRWZmZWN0aXZlUnVuVGltZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgb25EZWxheVVudGlsVGltZUNoYW5nZWQoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgcHJvdmlkZXJOYW1lLCBsb25nIGRlbGF5VW50aWwpIHsKLSAgICAgICAgLy8gZm9yIGVhY2ggb3AgdGhhdCBtYXRjaGVzIHRoZSBhY2NvdW50IGFuZCBwcm92aWRlciB1cGRhdGUgaXRzCi0gICAgICAgIC8vIGRlbGF5VW50aWxUaW1lIGFuZCBlZmZlY3RpdmVTdGFydFRpbWUKKyAgICBwdWJsaWMgdm9pZCBvbkRlbGF5VW50aWxUaW1lQ2hhbmdlZChTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCB0YXJnZXQsIGxvbmcgZGVsYXlVbnRpbCkgeworICAgICAgICAvLyBmb3IgZWFjaCBvcCB0aGF0IG1hdGNoZXMgdGhlIHRhcmdldCBpbmZvIG9mIHRoZSBwcm92aWRlZCBvcCwgY2hhbmdlIHRoZSBkZWxheSB0aW1lLgogICAgICAgICBmb3IgKFN5bmNPcGVyYXRpb24gb3AgOiBtT3BlcmF0aW9uc01hcC52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKG9wLmFjY291bnQuZXF1YWxzKGFjY291bnQpICYmIG9wLmF1dGhvcml0eS5lcXVhbHMocHJvdmlkZXJOYW1lKSkgeworICAgICAgICAgICAgaWYgKG9wLnRhcmdldC5tYXRjaGVzU3BlYyh0YXJnZXQpKSB7CiAgICAgICAgICAgICAgICAgb3AuZGVsYXlVbnRpbCA9IGRlbGF5VW50aWw7CiAgICAgICAgICAgICAgICAgb3AudXBkYXRlRWZmZWN0aXZlUnVuVGltZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlKEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIGF1dGhvcml0eSkgeworICAgIC8qKgorICAgICAqIFJlbW92ZSBhbGwgb2YgdGhlIFN5bmNPcGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIHRhcmdldC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmZvIHRhcmdldCBvYmplY3QgcHJvdmlkZWQgaGVyZSBjYW4gaGF2ZSBudWxsIEFjY291bnQvcHJvdmlkZXIuIFRoaXMgaXMgdGhlIGNhc2UKKyAgICAgKiB3aGVyZSB5b3Ugd2FudCB0byByZW1vdmUgYWxsIG9wcyBhc3NvY2lhdGVkIHdpdGggYSBwcm92aWRlciAobnVsbCBBY2NvdW50KSBvciBhbGwgb3BzCisgICAgICogYXNzb2NpYXRlZCB3aXRoIGFuIGFjY291bnQgKG51bGwgcHJvdmlkZXIpLgorICAgICAqIEBwYXJhbSBleHRyYXMgb3B0aW9uIGJ1bmRsZSB0byBpbmNsdWRlIHRvIGZ1cnRoZXIgc3BlY2lmeSB3aGljaCBvcGVyYXRpb24gdG8gcmVtb3ZlLiBJZiB0aGlzCisgICAgICogYnVuZGxlIGNvbnRhaW5zIHN5bmMgc2V0dGluZ3MgZmxhZ3MsIHRoZXkgYXJlIGlnbm9yZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVtb3ZlKGZpbmFsIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGluZm8sIEJ1bmRsZSBleHRyYXMpIHsKICAgICAgICAgSXRlcmF0b3I8TWFwLkVudHJ5PFN0cmluZywgU3luY09wZXJhdGlvbj4+IGVudHJpZXMgPSBtT3BlcmF0aW9uc01hcC5lbnRyeVNldCgpLml0ZXJhdG9yKCk7CiAgICAgICAgIHdoaWxlIChlbnRyaWVzLmhhc05leHQoKSkgewogICAgICAgICAgICAgTWFwLkVudHJ5PFN0cmluZywgU3luY09wZXJhdGlvbj4gZW50cnkgPSBlbnRyaWVzLm5leHQoKTsKICAgICAgICAgICAgIFN5bmNPcGVyYXRpb24gc3luY09wZXJhdGlvbiA9IGVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoYWNjb3VudCAhPSBudWxsICYmICFzeW5jT3BlcmF0aW9uLmFjY291bnQuZXF1YWxzKGFjY291bnQpKSB7CisgICAgICAgICAgICBmaW5hbCBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludCBvcEluZm8gPSBzeW5jT3BlcmF0aW9uLnRhcmdldDsKKyAgICAgICAgICAgIGlmICghb3BJbmZvLm1hdGNoZXNTcGVjKGluZm8pKSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXV0aG9yaXR5ICE9IG51bGwgJiYgIXN5bmNPcGVyYXRpb24uYXV0aG9yaXR5LmVxdWFscyhhdXRob3JpdHkpKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodXNlcklkICE9IHN5bmNPcGVyYXRpb24udXNlcklkKSB7CisgICAgICAgICAgICBpZiAoZXh0cmFzICE9IG51bGwKKyAgICAgICAgICAgICAgICAgICAgJiYgIVN5bmNNYW5hZ2VyLnN5bmNFeHRyYXNFcXVhbHMoCisgICAgICAgICAgICAgICAgICAgICAgICBzeW5jT3BlcmF0aW9uLmV4dHJhcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIG5vIGNvbmZpZyBmbGFncyovKSkgewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZW50cmllcy5yZW1vdmUoKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2NvbnRlbnQvU3luY1N0b3JhZ2VFbmdpbmUuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2NvbnRlbnQvU3luY1N0b3JhZ2VFbmdpbmUuamF2YQppbmRleCA1ZWJmOWVhLi4xMGYwZWE3IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNTdG9yYWdlRW5naW5lLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jU3RvcmFnZUVuZ2luZS5qYXZhCkBAIC0yNCw2ICsyNCw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklTeW5jU3RhdHVzT2JzZXJ2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlBlcmlvZGljU3luYzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU3luY0luZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LlN5bmNSZXF1ZXN0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TeW5jU3RhdHVzSW5mbzsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZTsKQEAgLTM2LDEwICszNywxMiBAQAogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlQ2FsbGJhY2tMaXN0OwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXRvbWljRmlsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5QYWlyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlNYXA7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLlZpc2libGVGb3JUZXN0aW5nOwpAQCAtNzEsNyArNzQsNiBAQAogcHVibGljIGNsYXNzIFN5bmNTdG9yYWdlRW5naW5lIGV4dGVuZHMgSGFuZGxlciB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlN5bmNNYW5hZ2VyIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19GSUxFID0gIlN5bmNNYW5hZ2VyRmlsZSI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX0FUVFJfTkVYVF9BVVRIT1JJVFlfSUQgPSAibmV4dEF1dGhvcml0eUlkIjsKQEAgLTEwOCwxMCArMTEwLDcgQEAKIAogICAgIC8qKiBFbnVtIHZhbHVlIGZvciBhIGxvY2FsLWluaXRpYXRlZCBzeW5jLiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPVVJDRV9MT0NBTCA9IDE7Ci0gICAgLyoqCi0gICAgICogRW51bSB2YWx1ZSBmb3IgYSBwb2xsLWJhc2VkIHN5bmMgKGUuZy4sIHVwb24gY29ubmVjdGlvbiB0bwotICAgICAqIG5ldHdvcmspCi0gICAgICovCisgICAgLyoqIEVudW0gdmFsdWUgZm9yIGEgcG9sbC1iYXNlZCBzeW5jIChlLmcuLCB1cG9uIGNvbm5lY3Rpb24gdG8gbmV0d29yaykgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTT1VSQ0VfUE9MTCA9IDI7CiAKICAgICAvKiogRW51bSB2YWx1ZSBmb3IgYSB1c2VyLWluaXRpYXRlZCBzeW5jLiAqLwpAQCAtMTE5LDYgKzExOCw5IEBACiAKICAgICAvKiogRW51bSB2YWx1ZSBmb3IgYSBwZXJpb2RpYyBzeW5jLiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPVVJDRV9QRVJJT0RJQyA9IDQ7CisgICAgCisgICAgLyoqIEVudW0gdmFsdWUgZm9yIGEgc3luYyBzdGFydGVkIGZvciBhIHNlcnZpY2UuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09VUkNFX1NFUlZJQ0UgPSA1OwogCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIE5PVF9JTl9CQUNLT0ZGX01PREUgPSAtMTsKIApAQCAtMTI4LDcgKzEzMCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTE9DQUwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBPTEwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVTRVIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBFUklPRElDIiB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBFUklPRElDIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRVJWSUNFIn07CiAKICAgICAvLyBUaGUgTUVTRyBjb2x1bW4gd2lsbCBjb250YWluIG9uZSBvZiB0aGVzZSBvciBvbmUgb2YgdGhlIEVycm9yIHR5cGVzLgogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FU0dfU1VDQ0VTUyA9ICJzdWNjZXNzIjsKQEAgLTE1Niw0MSArMTU5LDU0IEBACiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBQZW5kaW5nT3BlcmF0aW9uIHsKLSAgICAgICAgZmluYWwgQWNjb3VudCBhY2NvdW50OwotICAgICAgICBmaW5hbCBpbnQgdXNlcklkOworICAgICAgICBmaW5hbCBFbmRQb2ludCB0YXJnZXQ7CiAgICAgICAgIGZpbmFsIGludCByZWFzb247CiAgICAgICAgIGZpbmFsIGludCBzeW5jU291cmNlOwotICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5OwogICAgICAgICBmaW5hbCBCdW5kbGUgZXh0cmFzOyAgICAgICAgLy8gbm90ZTogcmVhZC1vbmx5LgotICAgICAgICBmaW5hbCBDb21wb25lbnROYW1lIHNlcnZpY2VOYW1lOwogICAgICAgICBmaW5hbCBib29sZWFuIGV4cGVkaXRlZDsKIAotICAgICAgICBpbnQgYXV0aG9yaXR5SWQ7CisgICAgICAgIGZpbmFsIGludCBhdXRob3JpdHlJZDsKKyAgICAgICAgLy8gTm8gbG9uZ2VyIHVzZWQuCisgICAgICAgIC8vIEtlZXAgYXJvdW5kIGZvciBzYWtlIHVwIHVwZGF0aW5nIGZyb20gcGVuZGluZy5iaW4gdG8gcGVuZGluZy54bWwKICAgICAgICAgYnl0ZVtdIGZsYXRFeHRyYXM7CiAKLSAgICAgICAgUGVuZGluZ09wZXJhdGlvbihBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIGludCByZWFzb24sIGludCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgU3RyaW5nIGF1dGhvcml0eSwgQnVuZGxlIGV4dHJhcywgYm9vbGVhbiBleHBlZGl0ZWQpIHsKLSAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IGFjY291bnQ7Ci0gICAgICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKKyAgICAgICAgUGVuZGluZ09wZXJhdGlvbihBdXRob3JpdHlJbmZvIGF1dGhvcml0eSwgaW50IHJlYXNvbiwgaW50IHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgQnVuZGxlIGV4dHJhcywgYm9vbGVhbiBleHBlZGl0ZWQpIHsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gYXV0aG9yaXR5LnRhcmdldDsKICAgICAgICAgICAgIHRoaXMuc3luY1NvdXJjZSA9IHNvdXJjZTsKICAgICAgICAgICAgIHRoaXMucmVhc29uID0gcmVhc29uOwotICAgICAgICAgICAgdGhpcy5hdXRob3JpdHkgPSBhdXRob3JpdHk7CiAgICAgICAgICAgICB0aGlzLmV4dHJhcyA9IGV4dHJhcyAhPSBudWxsID8gbmV3IEJ1bmRsZShleHRyYXMpIDogZXh0cmFzOwogICAgICAgICAgICAgdGhpcy5leHBlZGl0ZWQgPSBleHBlZGl0ZWQ7Ci0gICAgICAgICAgICB0aGlzLmF1dGhvcml0eUlkID0gLTE7Ci0gICAgICAgICAgICB0aGlzLnNlcnZpY2VOYW1lID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuYXV0aG9yaXR5SWQgPSBhdXRob3JpdHkuaWRlbnQ7CiAgICAgICAgIH0KIAogICAgICAgICBQZW5kaW5nT3BlcmF0aW9uKFBlbmRpbmdPcGVyYXRpb24gb3RoZXIpIHsKLSAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IG90aGVyLmFjY291bnQ7Ci0gICAgICAgICAgICB0aGlzLnVzZXJJZCA9IG90aGVyLnVzZXJJZDsKICAgICAgICAgICAgIHRoaXMucmVhc29uID0gb3RoZXIucmVhc29uOwogICAgICAgICAgICAgdGhpcy5zeW5jU291cmNlID0gb3RoZXIuc3luY1NvdXJjZTsKLSAgICAgICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gb3RoZXIuYXV0aG9yaXR5OworICAgICAgICAgICAgdGhpcy50YXJnZXQgPSBvdGhlci50YXJnZXQ7CiAgICAgICAgICAgICB0aGlzLmV4dHJhcyA9IG90aGVyLmV4dHJhczsKICAgICAgICAgICAgIHRoaXMuYXV0aG9yaXR5SWQgPSBvdGhlci5hdXRob3JpdHlJZDsKICAgICAgICAgICAgIHRoaXMuZXhwZWRpdGVkID0gb3RoZXIuZXhwZWRpdGVkOwotICAgICAgICAgICAgdGhpcy5zZXJ2aWNlTmFtZSA9IG90aGVyLnNlcnZpY2VOYW1lOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnNpZGVyZWQgZXF1YWwgaWYgdGhleSB0YXJnZXQgdGhlIHNhbWUgc3luYyBhZGFwdGVyIChBCisgICAgICAgICAqIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuU3luY1NlcnZpY2V9CisgICAgICAgICAqIGlzIGNvbnNpZGVyZWQgYW4gYWRhcHRlciksIGZvciB0aGUgc2FtZSB1c2VySWQuCisgICAgICAgICAqIEBwYXJhbSBvdGhlciBQZW5kaW5nT3BlcmF0aW9uIHRvIGNvbXBhcmUuCisgICAgICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdHdvIHBlbmRpbmcgb3BzIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhQZW5kaW5nT3BlcmF0aW9uIG90aGVyKSB7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0Lm1hdGNoZXNTcGVjKG90aGVyLnRhcmdldCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJzZXJ2aWNlPSIgKyB0YXJnZXQuc2VydmljZQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHVzZXI9IiArIHRhcmdldC51c2VySWQKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhdXRoPSIgKyB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhY2NvdW50PSIgKyB0YXJnZXQuYWNjb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHNyYz0iICsgc3luY1NvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGV4dHJhcz0iICsgZXh0cmFzOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDQsMTcgKzIyMCw5NiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBBdXRob3JpdHlJbmZvIHsKKyAgICAvKiogIEJhcmUgYm9uZXMgcmVwcmVzZW50YXRpb24gb2YgYSBzeW5jIHRhcmdldC4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEVuZFBvaW50IHsKKyAgICAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBFbmRQb2ludCBVU0VSX0FMTF9QUk9WSURFUl9BTExfQUNDT1VOVFNfQUxMID0KKyAgICAgICAgICAgICAgICBuZXcgRW5kUG9pbnQobnVsbCwgbnVsbCwgVXNlckhhbmRsZS5VU0VSX0FMTCk7CiAgICAgICAgIGZpbmFsIENvbXBvbmVudE5hbWUgc2VydmljZTsKICAgICAgICAgZmluYWwgQWNjb3VudCBhY2NvdW50OwogICAgICAgICBmaW5hbCBpbnQgdXNlcklkOwotICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5OworICAgICAgICBmaW5hbCBTdHJpbmcgcHJvdmlkZXI7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gdGFyZ2V0X3NlcnZpY2U7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gdGFyZ2V0X3Byb3ZpZGVyOworCisgICAgICAgIHB1YmxpYyBFbmRQb2ludChDb21wb25lbnROYW1lIHNlcnZpY2UsIGludCB1c2VySWQpIHsKKyAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7CisgICAgICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKKyAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IG51bGw7CisgICAgICAgICAgICB0aGlzLnByb3ZpZGVyID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0X3NlcnZpY2UgPSB0cnVlOworICAgICAgICAgICAgdGhpcy50YXJnZXRfcHJvdmlkZXIgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBFbmRQb2ludChBY2NvdW50IGFjY291bnQsIFN0cmluZyBwcm92aWRlciwgaW50IHVzZXJJZCkgeworICAgICAgICAgICAgdGhpcy5hY2NvdW50ID0gYWNjb3VudDsKKyAgICAgICAgICAgIHRoaXMucHJvdmlkZXIgPSBwcm92aWRlcjsKKyAgICAgICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOworICAgICAgICAgICAgdGhpcy5zZXJ2aWNlID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0X3NlcnZpY2UgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0X3Byb3ZpZGVyID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBBbiBFbmRwb2ludCBmb3IgYSBzeW5jIG1hdGNoZXMgaWYgaXQgdGFyZ2V0cyB0aGUgc2FtZSBzeW5jIGFkYXB0ZXIgZm9yIHRoZSBzYW1lIHVzZXIuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBzcGVjIHRoZSBFbmRwb2ludCB0byBtYXRjaC4gSWYgdGhlIHNwZWMgaGFzIG51bGwgZmllbGRzLCB0aGV5IGluZGljYXRlIGEgd2lsZGNhcmQKKyAgICAgICAgICogYW5kIG1hdGNoIGFueS4gCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzU3BlYyhFbmRQb2ludCBzcGVjKSB7CisgICAgICAgICAgICBpZiAodXNlcklkICE9IHNwZWMudXNlcklkCisgICAgICAgICAgICAgICAgICAgICYmIHVzZXJJZCAhPSBVc2VySGFuZGxlLlVTRVJfQUxMCisgICAgICAgICAgICAgICAgICAgICYmIHNwZWMudXNlcklkICE9IFVzZXJIYW5kbGUuVVNFUl9BTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGFyZ2V0X3NlcnZpY2UgJiYgc3BlYy50YXJnZXRfc2VydmljZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlLmVxdWFscyhzcGVjLnNlcnZpY2UpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRfcHJvdmlkZXIgJiYgc3BlYy50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICBib29sZWFuIGFjY291bnRzTWF0Y2g7CisgICAgICAgICAgICAgICAgaWYgKHNwZWMuYWNjb3VudCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGFjY291bnRzTWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFjY291bnRzTWF0Y2ggPSBhY2NvdW50LmVxdWFscyhzcGVjLmFjY291bnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBib29sZWFuIHByb3ZpZGVyc01hdGNoOworICAgICAgICAgICAgICAgIGlmIChzcGVjLnByb3ZpZGVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJzTWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyc01hdGNoID0gcHJvdmlkZXIuZXF1YWxzKHNwZWMucHJvdmlkZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gYWNjb3VudHNNYXRjaCAmJiBwcm92aWRlcnNNYXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgICAgIGlmICh0YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoYWNjb3VudCA9PSBudWxsID8gIkFMTCBBQ0NTIiA6IGFjY291bnQubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgiLyIpCisgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQocHJvdmlkZXIgPT0gbnVsbCA/ICJBTEwgUERSUyIgOiBwcm92aWRlcik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKHNlcnZpY2UuZ2V0UGFja2FnZU5hbWUoKSArICIvIikKKyAgICAgICAgICAgICAgICAgIC5hcHBlbmQoc2VydmljZS5nZXRDbGFzc05hbWUoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNiLmFwcGVuZCgiOnUiICsgdXNlcklkKTsKKyAgICAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBBdXRob3JpdHlJbmZvIHsKKyAgICAgICAgZmluYWwgRW5kUG9pbnQgdGFyZ2V0OwogICAgICAgICBmaW5hbCBpbnQgaWRlbnQ7CiAgICAgICAgIGJvb2xlYW4gZW5hYmxlZDsKICAgICAgICAgaW50IHN5bmNhYmxlOworICAgICAgICAvKiogVGltZSBhdCB3aGljaCB0aGlzIHN5bmMgd2lsbCBydW4sIHRha2luZyBpbnRvIGFjY291bnQgYmFja29mZi4gKi8KICAgICAgICAgbG9uZyBiYWNrb2ZmVGltZTsKKyAgICAgICAgLyoqIEFtb3VudCBvZiBkZWxheSBkdWUgdG8gYmFja29mZi4gKi8KICAgICAgICAgbG9uZyBiYWNrb2ZmRGVsYXk7CisgICAgICAgIC8qKiBUaW1lIG9mZnNldCB0byBhZGQgdG8gYW55IHJlcXVlc3RzIGNvbWluZyB0byB0aGlzIHRhcmdldC4gKi8KICAgICAgICAgbG9uZyBkZWxheVVudGlsOworCiAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxQZXJpb2RpY1N5bmM+IHBlcmlvZGljU3luY3M7CiAKICAgICAgICAgLyoqCkBAIC0yMjQsMTAgKzMxOSw3IEBACiAgICAgICAgICAqIEBwYXJhbSB0b0NvcHkgQXV0aG9yaXR5SW5mbyB0byBiZSBjb3BpZWQuCiAgICAgICAgICAqLwogICAgICAgICBBdXRob3JpdHlJbmZvKEF1dGhvcml0eUluZm8gdG9Db3B5KSB7Ci0gICAgICAgICAgICBhY2NvdW50ID0gdG9Db3B5LmFjY291bnQ7Ci0gICAgICAgICAgICB1c2VySWQgPSB0b0NvcHkudXNlcklkOwotICAgICAgICAgICAgYXV0aG9yaXR5ID0gdG9Db3B5LmF1dGhvcml0eTsKLSAgICAgICAgICAgIHNlcnZpY2UgPSB0b0NvcHkuc2VydmljZTsKKyAgICAgICAgICAgIHRhcmdldCA9IHRvQ29weS50YXJnZXQ7CiAgICAgICAgICAgICBpZGVudCA9IHRvQ29weS5pZGVudDsKICAgICAgICAgICAgIGVuYWJsZWQgPSB0b0NvcHkuZW5hYmxlZDsKICAgICAgICAgICAgIHN5bmNhYmxlID0gdG9Db3B5LnN5bmNhYmxlOwpAQCAtMjQxLDU2ICszMzMsNDAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDcmVhdGUgYW4gYXV0aG9yaXR5IHdpdGggb25lIHBlcmlvZGljIHN5bmMgc2NoZWR1bGVkIHdpdGggYW4gZW1wdHkgYnVuZGxlIGFuZCBzeW5jaW5nCi0gICAgICAgICAqIGV2ZXJ5IGRheS4gQW4gZW1wdHkgYnVuZGxlIGlzIGNvbnNpZGVyZWQgZXF1YWwgdG8gYW55IG90aGVyIGJ1bmRsZSBzZWUKLSAgICAgICAgICoge0BsaW5rIFBlcmlvZGljU3luYy5zeW5jRXh0cmFzRXF1YWxzfS4KLSAgICAgICAgICogQHBhcmFtIGFjY291bnQgQWNjb3VudCB0aGF0IHRoaXMgYXV0aG9yaXR5IHN5bmNzLgotICAgICAgICAgKiBAcGFyYW0gdXNlcklkIHdoaWNoIHVzZXIgdGhpcyBzeW5jIGlzIHJlZ2lzdGVyZWQgZm9yLgotICAgICAgICAgKiBAcGFyYW0gdXNlcklkIHVzZXIgZm9yIHdoaWNoIHRoaXMgYXV0aG9yaXR5IGlzIHJlZ2lzdGVyZWQuCi0gICAgICAgICAqIEBwYXJhbSBpZGVudCBpZCBvZiB0aGlzIGF1dGhvcml0eS4KLSAgICAgICAgICovCi0gICAgICAgIEF1dGhvcml0eUluZm8oQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgYXV0aG9yaXR5LCBpbnQgaWRlbnQpIHsKLSAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IGFjY291bnQ7Ci0gICAgICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKLSAgICAgICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gYXV0aG9yaXR5OwotICAgICAgICAgICAgdGhpcy5zZXJ2aWNlID0gbnVsbDsKLSAgICAgICAgICAgIHRoaXMuaWRlbnQgPSBpZGVudDsKLSAgICAgICAgICAgIGVuYWJsZWQgPSBTWU5DX0VOQUJMRURfREVGQVVMVDsKLSAgICAgICAgICAgIHN5bmNhYmxlID0gLTE7IC8vIGRlZmF1bHQgdG8gInVua25vd24iCi0gICAgICAgICAgICBiYWNrb2ZmVGltZSA9IC0xOyAvLyBpZiA8IDAgdGhlbiB3ZSBhcmVuJ3QgaW4gYmFja29mZiBtb2RlCi0gICAgICAgICAgICBiYWNrb2ZmRGVsYXkgPSAtMTsgLy8gaWYgPCAwIHRoZW4gd2UgYXJlbid0IGluIGJhY2tvZmYgbW9kZQorICAgICAgICBBdXRob3JpdHlJbmZvKEVuZFBvaW50IGluZm8sIGludCBpZCkgeworICAgICAgICAgICAgdGFyZ2V0ID0gaW5mbzsKKyAgICAgICAgICAgIGlkZW50ID0gaWQ7CisgICAgICAgICAgICBlbmFibGVkID0gaW5mby50YXJnZXRfcHJvdmlkZXIgPworICAgICAgICAgICAgICAgICAgICBTWU5DX0VOQUJMRURfREVGQVVMVCA6IHRydWU7CisgICAgICAgICAgICAvLyBTZXJ2aWNlIGlzIGFjdGl2ZSBieSBkZWZhdWx0LAorICAgICAgICAgICAgaWYgKGluZm8udGFyZ2V0X3NlcnZpY2UpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnN5bmNhYmxlID0gMTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBlcmlvZGljU3luY3MgPSBuZXcgQXJyYXlMaXN0PFBlcmlvZGljU3luYz4oKTsKLSAgICAgICAgICAgIC8vIE9sZCB2ZXJzaW9uIGFkZHMgb25lIHBlcmlvZGljIHN5bmMgYSBkYXkuCi0gICAgICAgICAgICBwZXJpb2RpY1N5bmNzLmFkZChuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ1bmRsZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1BPTExfRlJFUVVFTkNZX1NFQ09ORFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZURlZmF1bHRGbGV4VGltZShERUZBVUxUX1BPTExfRlJFUVVFTkNZX1NFQ09ORFMpKSk7CisgICAgICAgICAgICBkZWZhdWx0SW5pdGlhbGlzYXRpb24oKTsKICAgICAgICAgfQogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDcmVhdGUgYW4gYXV0aG9yaXR5IHdpdGggb25lIHBlcmlvZGljIHN5bmMgc2NoZWR1bGVkIHdpdGggYW4gZW1wdHkgYnVuZGxlIGFuZCBzeW5jaW5nCi0gICAgICAgICAqIGV2ZXJ5IGRheSB1c2luZyBhIHN5bmMgc2VydmljZS4KLSAgICAgICAgICogQHBhcmFtIGNuYW1lIHN5bmMgc2VydmljZSBpZGVudGlmaWVyLgotICAgICAgICAgKiBAcGFyYW0gdXNlcklkIHVzZXIgZm9yIHdoaWNoIHRoaXMgYXV0aG9yaXR5IGlzIHJlZ2lzdGVyZWQuCi0gICAgICAgICAqIEBwYXJhbSBpZGVudCBpZCBvZiB0aGlzIGF1dGhvcml0eS4KLSAgICAgICAgICovCi0gICAgICAgIEF1dGhvcml0eUluZm8oQ29tcG9uZW50TmFtZSBjbmFtZSwgaW50IHVzZXJJZCwgaW50IGlkZW50KSB7Ci0gICAgICAgICAgICB0aGlzLmFjY291bnQgPSBudWxsOwotICAgICAgICAgICAgdGhpcy51c2VySWQgPSB1c2VySWQ7Ci0gICAgICAgICAgICB0aGlzLmF1dGhvcml0eSA9IG51bGw7Ci0gICAgICAgICAgICB0aGlzLnNlcnZpY2UgPSBjbmFtZTsKLSAgICAgICAgICAgIHRoaXMuaWRlbnQgPSBpZGVudDsKLSAgICAgICAgICAgIC8vIFN5bmMgc2VydmljZSBpcyBhbHdheXMgZW5hYmxlZC4KLSAgICAgICAgICAgIGVuYWJsZWQgPSB0cnVlOworICAgICAgICBwcml2YXRlIHZvaWQgZGVmYXVsdEluaXRpYWxpc2F0aW9uKCkgewogICAgICAgICAgICAgc3luY2FibGUgPSAtMTsgLy8gZGVmYXVsdCB0byAidW5rbm93biIKICAgICAgICAgICAgIGJhY2tvZmZUaW1lID0gLTE7IC8vIGlmIDwgMCB0aGVuIHdlIGFyZW4ndCBpbiBiYWNrb2ZmIG1vZGUKICAgICAgICAgICAgIGJhY2tvZmZEZWxheSA9IC0xOyAvLyBpZiA8IDAgdGhlbiB3ZSBhcmVuJ3QgaW4gYmFja29mZiBtb2RlCi0gICAgICAgICAgICBwZXJpb2RpY1N5bmNzID0gbmV3IEFycmF5TGlzdDxQZXJpb2RpY1N5bmM+KCk7Ci0gICAgICAgICAgICBwZXJpb2RpY1N5bmNzLmFkZChuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ1bmRsZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1BPTExfRlJFUVVFTkNZX1NFQ09ORFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZURlZmF1bHRGbGV4VGltZShERUZBVUxUX1BPTExfRlJFUVVFTkNZX1NFQ09ORFMpKSk7CisgICAgICAgICAgICBQZXJpb2RpY1N5bmMgZGVmYXVsdFN5bmM7CisgICAgICAgICAgICAvLyBPbGQgdmVyc2lvbiBpcyBvbmUgc3luYyBhIGRheS4gRW1wdHkgYnVuZGxlIGdldHMgcmVwbGFjZWQgYnkgYW55IGFkZFBlcmlvZGljU3luYygpCisgICAgICAgICAgICAvLyBjYWxsLgorICAgICAgICAgICAgaWYgKHRhcmdldC50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICBkZWZhdWx0U3luYyA9CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUGVyaW9kaWNTeW5jKHRhcmdldC5hY2NvdW50LCB0YXJnZXQucHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ1bmRsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfUE9MTF9GUkVRVUVOQ1lfU0VDT05EUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVEZWZhdWx0RmxleFRpbWUoREVGQVVMVF9QT0xMX0ZSRVFVRU5DWV9TRUNPTkRTKSk7CisgICAgICAgICAgICAgICAgcGVyaW9kaWNTeW5jcy5hZGQoZGVmYXVsdFN5bmMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0ICsgIiwgZW5hYmxlZD0iICsgZW5hYmxlZCArICIsIHN5bmNhYmxlPSIgKyBzeW5jYWJsZSArICIsIGJhY2tvZmY9IgorICAgICAgICAgICAgICAgICAgICArIGJhY2tvZmZUaW1lICsgIiwgZGVsYXk9IiArIGRlbGF5VW50aWw7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyMiwxNiArMzk4LDkgQEAKICAgICB9CiAKICAgICBpbnRlcmZhY2UgT25TeW5jUmVxdWVzdExpc3RlbmVyIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCB3aGVuIGEgc3luYyBpcyBuZWVkZWQgb24gYW4gYWNjb3VudChzKSBkdWUgdG8gc29tZSBjaGFuZ2UgaW4gc3RhdGUuCi0gICAgICAgICAqIEBwYXJhbSBhY2NvdW50Ci0gICAgICAgICAqIEBwYXJhbSB1c2VySWQKLSAgICAgICAgICogQHBhcmFtIHJlYXNvbgotICAgICAgICAgKiBAcGFyYW0gYXV0aG9yaXR5Ci0gICAgICAgICAqIEBwYXJhbSBleHRyYXMKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU3luY1JlcXVlc3QoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBpbnQgcmVhc29uLCBTdHJpbmcgYXV0aG9yaXR5LAotICAgICAgICAgICAgICAgIEJ1bmRsZSBleHRyYXMpOworCisgICAgICAgIC8qKiBDYWxsZWQgd2hlbiBhIHN5bmMgaXMgbmVlZGVkIG9uIGFuIGFjY291bnQocykgZHVlIHRvIHNvbWUgY2hhbmdlIGluIHN0YXRlLiAqLworICAgICAgICBwdWJsaWMgdm9pZCBvblN5bmNSZXF1ZXN0KEVuZFBvaW50IGluZm8sIGludCByZWFzb24sIEJ1bmRsZSBleHRyYXMpOwogICAgIH0KIAogICAgIC8vIFByaW1hcnkgbGlzdCBvZiBhbGwgc3luY2FibGUgYXV0aG9yaXRpZXMuICBBbHNvIG91ciBnbG9iYWwgbG9jay4KQEAgLTM1Niw5ICs0MjUsOSBAQAogICAgIHByaXZhdGUgZmluYWwgUmVtb3RlQ2FsbGJhY2tMaXN0PElTeW5jU3RhdHVzT2JzZXJ2ZXI+IG1DaGFuZ2VMaXN0ZW5lcnMKICAgICAgICAgICAgID0gbmV3IFJlbW90ZUNhbGxiYWNrTGlzdDxJU3luY1N0YXR1c09ic2VydmVyPigpOwogCi0gICAgLyoqIFJldmVyc2UgbWFwcGluZyBmb3IgY29tcG9uZW50IG5hbWUgLT4gPHVzZXJpZCAtPiBhdXRob3JpdHkgaWQ+LiAqLwotICAgIHByaXZhdGUgZmluYWwgSGFzaE1hcDxDb21wb25lbnROYW1lLCBTcGFyc2VBcnJheTxBdXRob3JpdHlJbmZvPj4gbVNlcnZpY2VzID0KLSAgICAgICAgICAgIG5ldyBIYXNoTWFwPENvbXBvbmVudE5hbWUsIFNwYXJzZUFycmF5PEF1dGhvcml0eUluZm8+PigpOworICAgIC8qKiBSZXZlcnNlIG1hcHBpbmcgZm9yIGNvbXBvbmVudCBuYW1lIC0+IDx1c2VyaWQgLT4gdGFyZ2V0IGlkPi4gKi8KKyAgICBwcml2YXRlIGZpbmFsIEFycmF5TWFwPENvbXBvbmVudE5hbWUsIFNwYXJzZUFycmF5PEF1dGhvcml0eUluZm8+PiBtU2VydmljZXMgPQorICAgICAgICAgICAgbmV3IEFycmF5TWFwPENvbXBvbmVudE5hbWUsIFNwYXJzZUFycmF5PEF1dGhvcml0eUluZm8+PigpOwogCiAgICAgcHJpdmF0ZSBpbnQgbU5leHRBdXRob3JpdHlJZCA9IDA7CiAKQEAgLTUwMSw3ICs1NzAsNyBAQAogICAgICAqIEByZXR1cm4gYW1vdW50IG9mIHNlY29uZHMgYmVmb3JlIHN5bmNUaW1lU2Vjb25kcyB0aGF0IHRoZSBzeW5jIGNhbiBvY2N1ci4KICAgICAgKiAgICAgIEkuZS4KICAgICAgKiAgICAgIGVhcmxpZXN0X3N5bmNfdGltZSA9IHN5bmNUaW1lU2Vjb25kcyAtIGNhbGN1bGF0ZURlZmF1bHRGbGV4VGltZShzeW5jVGltZVNlY29uZHMpCi0gICAgICogVGhlIGZsZXggdGltZSBpcyBjYXBwZWQgYXQgYSBwZXJjZW50YWdlIG9mIHRoZSB7QGxpbmsgREVGQVVMVF9QT0xMX0ZSRVFVRU5DWV9TRUNPTkRTfS4KKyAgICAgKiBUaGUgZmxleCB0aW1lIGlzIGNhcHBlZCBhdCBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHtAbGluayAjREVGQVVMVF9QT0xMX0ZSRVFVRU5DWV9TRUNPTkRTfS4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGxvbmcgY2FsY3VsYXRlRGVmYXVsdEZsZXhUaW1lKGxvbmcgc3luY1RpbWVTZWNvbmRzKSB7CiAgICAgICAgIGlmIChzeW5jVGltZVNlY29uZHMgPCBERUZBVUxUX01JTl9GTEVYX0FMTE9XRURfU0VDUykgewpAQCAtNTM1LDcgKzYwNCw3IEBACiAgICAgICAgICAgICBtQ2hhbmdlTGlzdGVuZXJzLmZpbmlzaEJyb2FkY2FzdCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewogICAgICAgICAgICAgTG9nLnYoVEFHLCAicmVwb3J0Q2hhbmdlICIgKyB3aGljaCArICIgdG86ICIgKyByZXBvcnRzKTsKICAgICAgICAgfQogCkBAIC01NTUsNyArNjI0LDggQEAKICAgICBwdWJsaWMgYm9vbGVhbiBnZXRTeW5jQXV0b21hdGljYWxseShBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIFN0cmluZyBwcm92aWRlck5hbWUpIHsKICAgICAgICAgc3luY2hyb25pemVkIChtQXV0aG9yaXRpZXMpIHsKICAgICAgICAgICAgIGlmIChhY2NvdW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldEF1dGhvcml0eUxvY2tlZChhY2NvdW50LCB1c2VySWQsIHByb3ZpZGVyTmFtZSwKKyAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldEF1dGhvcml0eUxvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFbmRQb2ludChhY2NvdW50LCBwcm92aWRlck5hbWUsIHVzZXJJZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0U3luY0F1dG9tYXRpY2FsbHkiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXR5ICE9IG51bGwgJiYgYXV0aG9yaXR5LmVuYWJsZWQ7CiAgICAgICAgICAgICB9CkBAIC01NjMsMTAgKzYzMyw5IEBACiAgICAgICAgICAgICBpbnQgaSA9IG1BdXRob3JpdGllcy5zaXplKCk7CiAgICAgICAgICAgICB3aGlsZSAoaSA+IDApIHsKICAgICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBtQXV0aG9yaXRpZXMudmFsdWVBdChpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5LmF1dGhvcml0eS5lcXVhbHMocHJvdmlkZXJOYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0aG9yaXR5LnVzZXJJZCA9PSB1c2VySWQKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGF1dGhvcml0eS5lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvID0gbUF1dGhvcml0aWVzLnZhbHVlQXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8udGFyZ2V0Lm1hdGNoZXNTcGVjKG5ldyBFbmRQb2ludChhY2NvdW50LCBwcm92aWRlck5hbWUsIHVzZXJJZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBhdXRob3JpdHlJbmZvLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNTc2LDE1ICs2NDUsMTggQEAKIAogICAgIHB1YmxpYyB2b2lkIHNldFN5bmNBdXRvbWF0aWNhbGx5KEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIHByb3ZpZGVyTmFtZSwKICAgICAgICAgICAgIGJvb2xlYW4gc3luYykgewotICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CiAgICAgICAgICAgICBMb2cuZChUQUcsICJzZXRTeW5jQXV0b21hdGljYWxseTogIiArIC8qIGFjY291bnQgKyAqLyIgcHJvdmlkZXIgIiArIHByb3ZpZGVyTmFtZQogICAgICAgICAgICAgICAgICAgICArICIsIHVzZXIgIiArIHVzZXJJZCArICIgLT4gIiArIHN5bmMpOwogICAgICAgICB9CiAgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7Ci0gICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKGFjY291bnQsIHVzZXJJZCwgcHJvdmlkZXJOYW1lLCAtMSwKLSAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPQorICAgICAgICAgICAgICAgICAgICBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRW5kUG9pbnQoYWNjb3VudCwgcHJvdmlkZXJOYW1lLCB1c2VySWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xIC8qIGlkZW50ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKICAgICAgICAgICAgIGlmIChhdXRob3JpdHkuZW5hYmxlZCA9PSBzeW5jKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CiAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgInNldFN5bmNBdXRvbWF0aWNhbGx5OiBhbHJlYWR5IHNldCB0byAiICsgc3luYyArICIsIGRvaW5nIG5vdGhpbmciKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjAzLDggKzY3NSw5IEBACiAgICAgcHVibGljIGludCBnZXRJc1N5bmNhYmxlKEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIHByb3ZpZGVyTmFtZSkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewogICAgICAgICAgICAgaWYgKGFjY291bnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gZ2V0QXV0aG9yaXR5TG9ja2VkKGFjY291bnQsIHVzZXJJZCwgcHJvdmlkZXJOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgImdldElzU3luY2FibGUiKTsKKyAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldEF1dGhvcml0eUxvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFbmRQb2ludChhY2NvdW50LCBwcm92aWRlck5hbWUsIHVzZXJJZCksCisgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0IGF1dGhvcml0eSBzeW5jYWJsZSIpOwogICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHkgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjE0LDkgKzY4NywxMCBAQAogICAgICAgICAgICAgaW50IGkgPSBtQXV0aG9yaXRpZXMuc2l6ZSgpOwogICAgICAgICAgICAgd2hpbGUgKGkgPiAwKSB7CiAgICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbUF1dGhvcml0aWVzLnZhbHVlQXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eS5hdXRob3JpdHkuZXF1YWxzKHByb3ZpZGVyTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml0eS5zeW5jYWJsZTsKKyAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8gPSBtQXV0aG9yaXRpZXMudmFsdWVBdChpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5SW5mby50YXJnZXQgIT0gbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0aG9yaXR5SW5mby50YXJnZXQucHJvdmlkZXIuZXF1YWxzKHByb3ZpZGVyTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml0eUluZm8uc3luY2FibGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNjI0LDExOSArNjk4LDE3OCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldElzU3luY2FibGUoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgcHJvdmlkZXJOYW1lLCBpbnQgc3luY2FibGUpIHsKLSAgICAgICAgaWYgKHN5bmNhYmxlID4gMSkgewotICAgICAgICAgICAgc3luY2FibGUgPSAxOwotICAgICAgICB9IGVsc2UgaWYgKHN5bmNhYmxlIDwgLTEpIHsKLSAgICAgICAgICAgIHN5bmNhYmxlID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJzZXRJc1N5bmNhYmxlOiAiICsgYWNjb3VudCArICIsIHByb3ZpZGVyICIgKyBwcm92aWRlck5hbWUKLSAgICAgICAgICAgICAgICAgICAgKyAiLCB1c2VyICIgKyB1c2VySWQgKyAiIC0+ICIgKyBzeW5jYWJsZSk7Ci0gICAgICAgIH0KKyAgICAgICAgc2V0U3luY2FibGVTdGF0ZUZvckVuZFBvaW50KG5ldyBFbmRQb2ludChhY2NvdW50LCBwcm92aWRlck5hbWUsIHVzZXJJZCksIHN5bmNhYmxlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRJc1RhcmdldFNlcnZpY2VBY3RpdmUoQ29tcG9uZW50TmFtZSBjbmFtZSwgaW50IHVzZXJJZCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPQotICAgICAgICAgICAgICAgICAgICBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZChhY2NvdW50LCB1c2VySWQsIHByb3ZpZGVyTmFtZSwgLTEsIGZhbHNlKTsKLSAgICAgICAgICAgIGlmIChhdXRob3JpdHkuc3luY2FibGUgPT0gc3luY2FibGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgIGlmIChjbmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRBdXRob3JpdHlMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRW5kUG9pbnQoY25hbWUsIHVzZXJJZCksCisgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0IHNlcnZpY2UgYWN0aXZlIik7CisgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIChhdXRob3JpdHkuc3luY2FibGUgPT0gMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJc1RhcmdldFNlcnZpY2VBY3RpdmUoQ29tcG9uZW50TmFtZSBjbmFtZSwgaW50IHVzZXJJZCwgYm9vbGVhbiBhY3RpdmUpIHsKKyAgICAgICAgc2V0U3luY2FibGVTdGF0ZUZvckVuZFBvaW50KG5ldyBFbmRQb2ludChjbmFtZSwgdXNlcklkKSwgYWN0aXZlID8gMSA6IDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFuIGVuYWJsZWQgc3luYyBzZXJ2aWNlIGFuZCBhIHN5bmNhYmxlIHByb3ZpZGVyJ3MgYWRhcHRlciBib3RoIGdldCByZXNvbHZlZCB0byB0aGUgc2FtZQorICAgICAqIHBlcnNpc3RlZCB2YXJpYWJsZSAtIG5hbWVseSB0aGUgInN5bmNhYmxlIiBhdHRyaWJ1dGUgZm9yIGFuIEF1dGhvcml0eUluZm8gaW4gYWNjb3VudHMueG1sLgorICAgICAqIEBwYXJhbSB0YXJnZXQgdGFyZ2V0IHRvIHNldCB2YWx1ZSBmb3IuCisgICAgICogQHBhcmFtIHN5bmNhYmxlIDAgaW5kaWNhdGVzIHVuc3luY2FibGUsIDwwIHVua25vd24sID4wIGlzIGFjdGl2ZS9zeW5jYWJsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0U3luY2FibGVTdGF0ZUZvckVuZFBvaW50KEVuZFBvaW50IHRhcmdldCwgaW50IHN5bmNhYmxlKSB7CisgICAgICAgIEF1dGhvcml0eUluZm8gYUluZm87CisgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7CisgICAgICAgICAgICBhSW5mbyA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKHRhcmdldCwgLTEsIGZhbHNlKTsKKyAgICAgICAgICAgIGlmIChzeW5jYWJsZSA+IDEpIHsKKyAgICAgICAgICAgICAgICBzeW5jYWJsZSA9IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN5bmNhYmxlIDwgLTEpIHsKKyAgICAgICAgICAgICAgICBzeW5jYWJsZSA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CisgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAic2V0SXNTeW5jYWJsZTogIiArIGFJbmZvLnRvU3RyaW5nKCkgKyAiIC0+ICIgKyBzeW5jYWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYUluZm8uc3luY2FibGUgPT0gc3luY2FibGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAic2V0SXNTeW5jYWJsZTogYWxyZWFkeSBzZXQgdG8gIiArIHN5bmNhYmxlICsgIiwgZG9pbmcgbm90aGluZyIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRob3JpdHkuc3luY2FibGUgPSBzeW5jYWJsZTsKKyAgICAgICAgICAgIGFJbmZvLnN5bmNhYmxlID0gc3luY2FibGU7CiAgICAgICAgICAgICB3cml0ZUFjY291bnRJbmZvTG9ja2VkKCk7CiAgICAgICAgIH0KLQogICAgICAgICBpZiAoc3luY2FibGUgPiAwKSB7Ci0gICAgICAgICAgICByZXF1ZXN0U3luYyhhY2NvdW50LCB1c2VySWQsIFN5bmNPcGVyYXRpb24uUkVBU09OX0lTX1NZTkNBQkxFLCAgcHJvdmlkZXJOYW1lLAotICAgICAgICAgICAgICAgICAgICBuZXcgQnVuZGxlKCkpOworICAgICAgICAgICAgcmVxdWVzdFN5bmMoYUluZm8sIFN5bmNPcGVyYXRpb24uUkVBU09OX0lTX1NZTkNBQkxFLCBuZXcgQnVuZGxlKCkpOwogICAgICAgICB9CiAgICAgICAgIHJlcG9ydENoYW5nZShDb250ZW50UmVzb2x2ZXIuU1lOQ19PQlNFUlZFUl9UWVBFX1NFVFRJTkdTKTsKICAgICB9CiAKLSAgICBwdWJsaWMgUGFpcjxMb25nLCBMb25nPiBnZXRCYWNrb2ZmKEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIHByb3ZpZGVyTmFtZSkgeworICAgIHB1YmxpYyBQYWlyPExvbmcsIExvbmc+IGdldEJhY2tvZmYoRW5kUG9pbnQgaW5mbykgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRBdXRob3JpdHlMb2NrZWQoYWNjb3VudCwgdXNlcklkLCBwcm92aWRlck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICJnZXRCYWNrb2ZmIik7Ci0gICAgICAgICAgICBpZiAoYXV0aG9yaXR5ID09IG51bGwgfHwgYXV0aG9yaXR5LmJhY2tvZmZUaW1lIDwgMCkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRBdXRob3JpdHlMb2NrZWQoaW5mbywgImdldEJhY2tvZmYiKTsKKyAgICAgICAgICAgIGlmIChhdXRob3JpdHkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBQYWlyLmNyZWF0ZShhdXRob3JpdHkuYmFja29mZlRpbWUsIGF1dGhvcml0eS5iYWNrb2ZmRGVsYXkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIFBhaXIuY3JlYXRlKGF1dGhvcml0eS5iYWNrb2ZmVGltZSwgYXV0aG9yaXR5LmJhY2tvZmZEZWxheSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNldEJhY2tvZmYoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgcHJvdmlkZXJOYW1lLAotICAgICAgICAgICAgbG9uZyBuZXh0U3luY1RpbWUsIGxvbmcgbmV4dERlbGF5KSB7Ci0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLnYoVEFHLCAic2V0QmFja29mZjogIiArIGFjY291bnQgKyAiLCBwcm92aWRlciAiICsgcHJvdmlkZXJOYW1lCi0gICAgICAgICAgICAgICAgICAgICsgIiwgdXNlciAiICsgdXNlcklkCisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBiYWNrb2ZmIGZvciB0aGUgZ2l2ZW4gZW5kcG9pbnQuIFRoZSBlbmRwb2ludCBtYXkgYmUgZm9yIGEgcHJvdmlkZXIvYWNjb3VudCBhbmQKKyAgICAgKiB0aGUgYWNjb3VudCBvciBwcm92aWRlciBpbmZvIGJlIG51bGwsIHdoaWNoIHNpZ25pZmllcyBhbGwgYWNjb3VudHMgb3IgcHJvdmlkZXJzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEJhY2tvZmYoRW5kUG9pbnQgaW5mbywgbG9uZyBuZXh0U3luY1RpbWUsIGxvbmcgbmV4dERlbGF5KSB7CisgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgeworICAgICAgICAgICAgTG9nLnYoVEFHLCAic2V0QmFja29mZjogIiArIGluZm8KICAgICAgICAgICAgICAgICAgICAgKyAiIC0+IG5leHRTeW5jVGltZSAiICsgbmV4dFN5bmNUaW1lICsgIiwgbmV4dERlbGF5ICIgKyBuZXh0RGVsYXkpOwogICAgICAgICB9Ci0gICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBib29sZWFuIGNoYW5nZWQ7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7Ci0gICAgICAgICAgICBpZiAoYWNjb3VudCA9PSBudWxsIHx8IHByb3ZpZGVyTmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChBY2NvdW50SW5mbyBhY2NvdW50SW5mbyA6IG1BY2NvdW50cy52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYWNjb3VudCAhPSBudWxsICYmICFhY2NvdW50LmVxdWFscyhhY2NvdW50SW5mby5hY2NvdW50QW5kVXNlci5hY2NvdW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHVzZXJJZCAhPSBhY2NvdW50SW5mby5hY2NvdW50QW5kVXNlci51c2VySWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvIDogYWNjb3VudEluZm8uYXV0aG9yaXRpZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm92aWRlck5hbWUgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcHJvdmlkZXJOYW1lLmVxdWFscyhhdXRob3JpdHlJbmZvLmF1dGhvcml0eSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lICE9IG5leHRTeW5jVGltZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdXRob3JpdHlJbmZvLmJhY2tvZmZEZWxheSAhPSBuZXh0RGVsYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lID0gbmV4dFN5bmNUaW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5ID0gbmV4dERlbGF5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZm8udGFyZ2V0X3Byb3ZpZGVyCisgICAgICAgICAgICAgICAgICAgICYmIChpbmZvLmFjY291bnQgPT0gbnVsbCB8fCBpbmZvLnByb3ZpZGVyID09IG51bGwpKSB7CisgICAgICAgICAgICAgICAgLy8gRG8gbW9yZSB3b3JrIGZvciBhIHByb3ZpZGVyIHN5bmMgaWYgdGhlIHByb3ZpZGVkIGluZm8gaGFzIHNwZWNpZmllZCBhbGwKKyAgICAgICAgICAgICAgICAvLyBhY2NvdW50cy9wcm92aWRlcnMuIAorICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBzZXRCYWNrb2ZmTG9ja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5hY2NvdW50IC8qIG1heSBiZSBudWxsICovLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5mby51c2VySWQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnByb3ZpZGVyIC8qIG1heSBiZSBudWxsICovLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN5bmNUaW1lLCBuZXh0RGVsYXkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZChhY2NvdW50LCB1c2VySWQsIHByb3ZpZGVyTmFtZSwgLTEgLyogaWRlbnQgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHkuYmFja29mZlRpbWUgPT0gbmV4dFN5bmNUaW1lICYmIGF1dGhvcml0eS5iYWNrb2ZmRGVsYXkgPT0gbmV4dERlbGF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8gPQorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQoaW5mbywgLTEgLyogaWRlbnQgKi8sIHRydWUpOworICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lID09IG5leHRTeW5jVGltZQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXV0aG9yaXR5SW5mby5iYWNrb2ZmRGVsYXkgPT0gbmV4dERlbGF5KSB7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lID0gbmV4dFN5bmNUaW1lOworICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmJhY2tvZmZEZWxheSA9IG5leHREZWxheTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGF1dGhvcml0eS5iYWNrb2ZmVGltZSA9IG5leHRTeW5jVGltZTsKLSAgICAgICAgICAgICAgICBhdXRob3JpdHkuYmFja29mZkRlbGF5ID0gbmV4dERlbGF5OwotICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAgICAgaWYgKGNoYW5nZWQpIHsKICAgICAgICAgICAgIHJlcG9ydENoYW5nZShDb250ZW50UmVzb2x2ZXIuU1lOQ19PQlNFUlZFUl9UWVBFX1NFVFRJTkdTKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgotICAgICAqIENhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBuZWVkIHRvIGhvbGQgYSBsb2NrIGZvciBzeW5jUXVldWUgb2JqZWN0IHBhc3NlZCBpbi4gQmVhciBpbiBtaW5kCi0gICAgICogdGhpcyBmdW5jdGlvbiBncmFicyB0aGUgbG9jayBmb3Ige0BsaW5rICNtQXV0aG9yaXRpZXN9Ci0gICAgICogQHBhcmFtIHN5bmNRdWV1ZSBxdWV1ZSBjb250YWluaW5nIHBlbmRpbmcgc3luYyBvcGVyYXRpb25zLgorICAgICAqIEVpdGhlciBzZXQgYmFja29mZiBmb3IgYSBzcGVjaWZpYyBhdXRob3JpdHksIG9yIHNldCBiYWNrb2ZmIGZvciBhbGwgdGhlCisgICAgICogYWNjb3VudHMgb24gYSBzcGVjaWZpYyBhZGFwdGVyL2FsbCBhZGFwdGVycy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhY2NvdW50IGFjY291bnQgZm9yIHdoaWNoIHRvIHNldCBiYWNrb2ZmLiBOdWxsIHRvIHNwZWNpZnkgYWxsIGFjY291bnRzLgorICAgICAqIEBwYXJhbSB1c2VySWQgaWQgb2YgdGhlIHVzZXIgbWFraW5nIHRoaXMgcmVxdWVzdC4KKyAgICAgKiBAcGFyYW0gcHJvdmlkZXJOYW1lIHByb3ZpZGVyIGZvciB3aGljaCB0byBzZXQgYmFja29mZi4gTnVsbCB0byBzcGVjaWZ5IGFsbCBwcm92aWRlcnMuCisgICAgICogQHJldHVybiB0cnVlIGlmIGEgY2hhbmdlIG9jY3VyZWQuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJBbGxCYWNrb2Zmc0xvY2tlZChTeW5jUXVldWUgc3luY1F1ZXVlKSB7CisgICAgcHJpdmF0ZSBib29sZWFuIHNldEJhY2tvZmZMb2NrZWQoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgcHJvdmlkZXJOYW1lLAorICAgICAgICAgICAgbG9uZyBuZXh0U3luY1RpbWUsIGxvbmcgbmV4dERlbGF5KSB7CisgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEFjY291bnRJbmZvIGFjY291bnRJbmZvIDogbUFjY291bnRzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoYWNjb3VudCAhPSBudWxsICYmICFhY2NvdW50LmVxdWFscyhhY2NvdW50SW5mby5hY2NvdW50QW5kVXNlci5hY2NvdW50KQorICAgICAgICAgICAgICAgICAgICAmJiB1c2VySWQgIT0gYWNjb3VudEluZm8uYWNjb3VudEFuZFVzZXIudXNlcklkKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEF1dGhvcml0eUluZm8gYXV0aG9yaXR5SW5mbyA6IGFjY291bnRJbmZvLmF1dGhvcml0aWVzLnZhbHVlcygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyTmFtZSAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcHJvdmlkZXJOYW1lLmVxdWFscyhhdXRob3JpdHlJbmZvLnRhcmdldC5wcm92aWRlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lICE9IG5leHRTeW5jVGltZQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgYXV0aG9yaXR5SW5mby5iYWNrb2ZmRGVsYXkgIT0gbmV4dERlbGF5KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYmFja29mZlRpbWUgPSBuZXh0U3luY1RpbWU7CisgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5ID0gbmV4dERlbGF5OworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY2xlYXJBbGxCYWNrb2ZmcyhTeW5jUXVldWUgc3luY1F1ZXVlKSB7CiAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgZm9yIChBY2NvdW50SW5mbyBhY2NvdW50SW5mbyA6IG1BY2NvdW50cy52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgIGZvciAoQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvIDogYWNjb3VudEluZm8uYXV0aG9yaXRpZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8uYmFja29mZlRpbWUgIT0gTk9UX0lOX0JBQ0tPRkZfTU9ERQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5ICE9IE5PVF9JTl9CQUNLT0ZGX01PREUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgImNsZWFyQWxsQmFja29mZnM6IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGF1dGhvcml0eToiICsgYXV0aG9yaXR5SW5mby5hdXRob3JpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhY2NvdW50OiIgKyBhY2NvdW50SW5mby5hY2NvdW50QW5kVXNlci5hY2NvdW50Lm5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1c2VyOiIgKyBhY2NvdW50SW5mby5hY2NvdW50QW5kVXNlci51c2VySWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBiYWNrb2ZmVGltZSB3YXM6ICIgKyBhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYmFja29mZkRlbGF5IHdhczogIiArIGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5KTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAoc3luY1F1ZXVlKSB7CisgICAgICAgICAgICAgICAgLy8gQ2xlYXIgYmFja29mZiBmb3IgYWxsIHN5bmMgYWRhcHRlcnMuCisgICAgICAgICAgICAgICAgZm9yIChBY2NvdW50SW5mbyBhY2NvdW50SW5mbyA6IG1BY2NvdW50cy52YWx1ZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKEF1dGhvcml0eUluZm8gYXV0aG9yaXR5SW5mbyA6IGFjY291bnRJbmZvLmF1dGhvcml0aWVzLnZhbHVlcygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5SW5mby5iYWNrb2ZmVGltZSAhPSBOT1RfSU5fQkFDS09GRl9NT0RFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5ICE9IE5PVF9JTl9CQUNLT0ZGX01PREUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiY2xlYXJBbGxCYWNrb2ZmczoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGF1dGhvcml0eToiICsgYXV0aG9yaXR5SW5mby50YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYWNjb3VudDoiICsgYWNjb3VudEluZm8uYWNjb3VudEFuZFVzZXIuYWNjb3VudC5uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHVzZXI6IiArIGFjY291bnRJbmZvLmFjY291bnRBbmRVc2VyLnVzZXJJZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBiYWNrb2ZmVGltZSB3YXM6ICIgKyBhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGJhY2tvZmZEZWxheSB3YXM6ICIgKyBhdXRob3JpdHlJbmZvLmJhY2tvZmZEZWxheSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYmFja29mZlRpbWUgPSBOT1RfSU5fQkFDS09GRl9NT0RFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5ID0gTk9UX0lOX0JBQ0tPRkZfTU9ERTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8uYmFja29mZlRpbWUgPSBOT1RfSU5fQkFDS09GRl9NT0RFOwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5iYWNrb2ZmRGVsYXkgPSBOT1RfSU5fQkFDS09GRl9NT0RFOwotICAgICAgICAgICAgICAgICAgICAgICAgc3luY1F1ZXVlLm9uQmFja29mZkNoYW5nZWQoYWNjb3VudEluZm8uYWNjb3VudEFuZFVzZXIuYWNjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudEluZm8uYWNjb3VudEFuZFVzZXIudXNlcklkLCBhdXRob3JpdHlJbmZvLmF1dGhvcml0eSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBDbGVhciBiYWNrb2ZmIGZvciBhbGwgc3luYyBzZXJ2aWNlcy4KKyAgICAgICAgICAgICAgICBmb3IgKENvbXBvbmVudE5hbWUgc2VydmljZSA6IG1TZXJ2aWNlcy5rZXlTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBTcGFyc2VBcnJheTxBdXRob3JpdHlJbmZvPiBhSW5mb3MgPSBtU2VydmljZXMuZ2V0KHNlcnZpY2UpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFJbmZvcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvID0gYUluZm9zLnZhbHVlQXQoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5SW5mby5iYWNrb2ZmVGltZSAhPSBOT1RfSU5fQkFDS09GRl9NT0RFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF1dGhvcml0eUluZm8uYmFja29mZkRlbGF5ICE9IE5PVF9JTl9CQUNLT0ZGX01PREUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmJhY2tvZmZUaW1lID0gTk9UX0lOX0JBQ0tPRkZfTU9ERTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmJhY2tvZmZEZWxheSA9IE5PVF9JTl9CQUNLT0ZGX01PREU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3luY1F1ZXVlLmNsZWFyQmFja29mZnMoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC03NDUsMjggKzg3OCw5IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzZXREZWxheVVudGlsVGltZShBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIFN0cmluZyBwcm92aWRlck5hbWUsCi0gICAgICAgICAgICBsb25nIGRlbGF5VW50aWwpIHsKLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cudihUQUcsICJzZXREZWxheVVudGlsOiAiICsgYWNjb3VudCArICIsIHByb3ZpZGVyICIgKyBwcm92aWRlck5hbWUKLSAgICAgICAgICAgICAgICAgICAgKyAiLCB1c2VyICIgKyB1c2VySWQgKyAiIC0+IGRlbGF5VW50aWwgIiArIGRlbGF5VW50aWwpOwotICAgICAgICB9CisgICAgcHVibGljIGxvbmcgZ2V0RGVsYXlVbnRpbFRpbWUoRW5kUG9pbnQgaW5mbykgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZCgKLSAgICAgICAgICAgICAgICAgICAgYWNjb3VudCwgdXNlcklkLCBwcm92aWRlck5hbWUsIC0xIC8qIGlkZW50ICovLCB0cnVlKTsKLSAgICAgICAgICAgIGlmIChhdXRob3JpdHkuZGVsYXlVbnRpbCA9PSBkZWxheVVudGlsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0aG9yaXR5LmRlbGF5VW50aWwgPSBkZWxheVVudGlsOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVwb3J0Q2hhbmdlKENvbnRlbnRSZXNvbHZlci5TWU5DX09CU0VSVkVSX1RZUEVfU0VUVElOR1MpOwotICAgIH0KLQotICAgIHB1YmxpYyBsb25nIGdldERlbGF5VW50aWxUaW1lKEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIHByb3ZpZGVyTmFtZSkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRBdXRob3JpdHlMb2NrZWQoYWNjb3VudCwgdXNlcklkLCBwcm92aWRlck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICJnZXREZWxheVVudGlsIik7CisgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldEF1dGhvcml0eUxvY2tlZChpbmZvLCAiZ2V0RGVsYXlVbnRpbCIpOwogICAgICAgICAgICAgaWYgKGF1dGhvcml0eSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CkBAIC03NzQsMTEzICs4ODgsMTQ3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlT3JSZW1vdmVQZXJpb2RpY1N5bmMoUGVyaW9kaWNTeW5jIHRvVXBkYXRlLCBpbnQgdXNlcklkLCBib29sZWFuIGFkZCkgewotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIExvZy52KFRBRywgImFkZE9yUmVtb3ZlUGVyaW9kaWNTeW5jOiAiICsgdG9VcGRhdGUuYWNjb3VudCArICIsIHVzZXIgIiArIHVzZXJJZAotICAgICAgICAgICAgICAgICAgICArICIsIHByb3ZpZGVyICIgKyB0b1VwZGF0ZS5hdXRob3JpdHkKLSAgICAgICAgICAgICAgICAgICAgKyAiIC0+IHBlcmlvZCAiICsgdG9VcGRhdGUucGVyaW9kICsgIiwgZXh0cmFzICIgKyB0b1VwZGF0ZS5leHRyYXMpOworICAgIHB1YmxpYyB2b2lkIHNldERlbGF5VW50aWxUaW1lKEVuZFBvaW50IGluZm8sIGxvbmcgZGVsYXlVbnRpbCkgeworICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgIExvZy52KFRBRywgInNldERlbGF5VW50aWw6ICIgKyBpbmZvCisgICAgICAgICAgICAgICAgICAgICsgIiAtPiBkZWxheVVudGlsICIgKyBkZWxheVVudGlsKTsKICAgICAgICAgfQogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgaWYgKHRvVXBkYXRlLnBlcmlvZCA8PSAwICYmIGFkZCkgewotICAgICAgICAgICAgICAgIExvZy5lKFRBRywgInBlcmlvZCA8IDAsIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gdXBkYXRlT3JSZW1vdmVQZXJpb2RpY1N5bmM6IGFkZC0iCi0gICAgICAgICAgICAgICAgICAgICAgICArIGFkZCk7CisgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKGluZm8sIC0xLCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChhdXRob3JpdHkuZGVsYXlVbnRpbCA9PSBkZWxheVVudGlsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRvVXBkYXRlLmV4dHJhcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAibnVsbCBleHRyYXMsIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gdXBkYXRlT3JSZW1vdmVQZXJpb2RpY1N5bmM6IGFkZC0iCi0gICAgICAgICAgICAgICAgICAgICAgICArIGFkZCk7CisgICAgICAgICAgICBhdXRob3JpdHkuZGVsYXlVbnRpbCA9IGRlbGF5VW50aWw7CisgICAgICAgIH0KKyAgICAgICAgcmVwb3J0Q2hhbmdlKENvbnRlbnRSZXNvbHZlci5TWU5DX09CU0VSVkVSX1RZUEVfU0VUVElOR1MpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jKEVuZFBvaW50IGluZm8sIGxvbmcgcGVyaW9kLCBsb25nIGZsZXh0aW1lLCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgeworICAgICAgICAgICAgTG9nLnYoVEFHLCAiYWRkUGVyaW9kaWNTeW5jOiAiICsgaW5mbworICAgICAgICAgICAgICAgICAgICArICIgLT4gcGVyaW9kICIgKyBwZXJpb2QgKyAiLCBmbGV4ICIgKyBmbGV4dGltZSArICIsIGV4dHJhcyAiCisgICAgICAgICAgICAgICAgICAgICsgZXh0cmFzLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7CisgICAgICAgICAgICBpZiAocGVyaW9kIDw9IDApIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJwZXJpb2QgPCAwLCBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIHVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXh0cmFzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJudWxsIGV4dHJhcywgc2hvdWxkIG5ldmVyIGhhcHBlbiBpbiB1cGRhdGVPckFkZFBlcmlvZGljU3luYzoiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPQotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQodG9VcGRhdGUuYWNjb3VudCwgdXNlcklkLCB0b1VwZGF0ZS5hdXRob3JpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFkZCkgewotICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGhpcyBwZXJpb2RpYyBzeW5jIGlmIGFuIGVxdWl2YWxlbnQgcGVyaW9kaWMgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgotICAgICAgICAgICAgICAgICAgICBib29sZWFuIGFscmVhZHlQcmVzZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwLCBOID0gYXV0aG9yaXR5LnBlcmlvZGljU3luY3Muc2l6ZSgpOyBpIDwgTjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQZXJpb2RpY1N5bmMgc3luY0luZm8gPSBhdXRob3JpdHkucGVyaW9kaWNTeW5jcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUGVyaW9kaWNTeW5jLnN5bmNFeHRyYXNFcXVhbHMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvVXBkYXRlLmV4dHJhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY0luZm8uZXh0cmFzKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b1VwZGF0ZS5wZXJpb2QgPT0gc3luY0luZm8ucGVyaW9kICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VwZGF0ZS5mbGV4VGltZSA9PSBzeW5jSW5mby5mbGV4VGltZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBYnNvbHV0ZWx5IHRoZSBzYW1lLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eS5wZXJpb2RpY1N5bmNzLnNldChpLCBuZXcgUGVyaW9kaWNTeW5jKHRvVXBkYXRlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeVByZXNlbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFkZGVkIGFuIGVudHJ5IHRvIHRoZSBwZXJpb2RpY1N5bmNzIGFycmF5IGFsc28gYWRkIGFuIGVudHJ5IHRvCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwZXJpb2RpYyBzeW5jcyBzdGF0dXMgdG8gY29ycmVzcG9uZCB0byBpdC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5UHJlc2VudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5LnBlcmlvZGljU3luY3MuYWRkKG5ldyBQZXJpb2RpY1N5bmModG9VcGRhdGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNTdGF0dXNJbmZvIHN0YXR1cyA9IGdldE9yQ3JlYXRlU3luY1N0YXR1c0xvY2tlZChhdXRob3JpdHkuaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLnNldFBlcmlvZGljU3luY1RpbWUoYXV0aG9yaXR5LnBlcmlvZGljU3luY3Muc2l6ZSgpIC0gMSwgMEwpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUGVyaW9kaWNTeW5jIHRvVXBkYXRlOworICAgICAgICAgICAgICAgIGlmIChpbmZvLnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgICAgICB0b1VwZGF0ZSA9IG5ldyBQZXJpb2RpY1N5bmMoaW5mby5hY2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ucHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4dGltZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSBwZXJpb2RpYyBzeW5jcyB0aGF0IG1hdGNoIHRoZSBhdXRob3JpdHkgYW5kIGV4dHJhcy4KLSAgICAgICAgICAgICAgICAgICAgU3luY1N0YXR1c0luZm8gc3RhdHVzID0gbVN5bmNTdGF0dXMuZ2V0KGF1dGhvcml0eS5pZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBJdGVyYXRvcjxQZXJpb2RpY1N5bmM+IGl0ZXJhdG9yID0gYXV0aG9yaXR5LnBlcmlvZGljU3luY3MuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGkgPSAwOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQZXJpb2RpY1N5bmMgc3luY0luZm8gPSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUGVyaW9kaWNTeW5jLnN5bmNFeHRyYXNFcXVhbHMoc3luY0luZm8uZXh0cmFzLCB0b1VwZGF0ZS5leHRyYXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IucmVtb3ZlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgcmVtb3ZlZCBhbiBlbnRyeSBmcm9tIHRoZSBwZXJpb2RpY1N5bmNzIGFycmF5IGFsc28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgZnJvbSB0aGUgc3RhdHVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZW1vdmVQZXJpb2RpY1N5bmNUaW1lKGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlRyaWVkIHJlbW92aW5nIHN5bmMgc3RhdHVzIG9uIHJlbW92ZSBwZXJpb2RpYyBzeW5jIGJ1dCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJkaWQgbm90IGZpbmQgaXQuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgIHRvVXBkYXRlID0gbmV3IFBlcmlvZGljU3luYyhpbmZvLnNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4dGltZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKGluZm8sIC0xLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgLy8gYWRkIHRoaXMgcGVyaW9kaWMgc3luYyBpZiBhbiBlcXVpdmFsZW50IHBlcmlvZGljIGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KKyAgICAgICAgICAgICAgICBib29sZWFuIGFscmVhZHlQcmVzZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAsIE4gPSBhdXRob3JpdHkucGVyaW9kaWNTeW5jcy5zaXplKCk7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmNJbmZvID0gYXV0aG9yaXR5LnBlcmlvZGljU3luY3MuZ2V0KGkpOworICAgICAgICAgICAgICAgICAgICBpZiAoU3luY01hbmFnZXIuc3luY0V4dHJhc0VxdWFscyhzeW5jSW5mby5leHRyYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogaW5jbHVkZVN5bmNTZXR0aW5ncyovKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmlvZCA9PSBzeW5jSW5mby5wZXJpb2QgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleHRpbWUgPT0gc3luY0luZm8uZmxleFRpbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBYnNvbHV0ZWx5IHRoZSBzYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eS5wZXJpb2RpY1N5bmNzLnNldChpLCB0b1VwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5UHJlc2VudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYW5nZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhZGRlZCBhbiBlbnRyeSB0byB0aGUgcGVyaW9kaWNTeW5jcyBhcnJheSBhbHNvIGFkZCBhbiBlbnRyeSB0bworICAgICAgICAgICAgICAgIC8vIHRoZSBwZXJpb2RpYyBzeW5jcyBzdGF0dXMgdG8gY29ycmVzcG9uZCB0byBpdC4KKyAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlQcmVzZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eS5wZXJpb2RpY1N5bmNzLmFkZCh0b1VwZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIFN5bmNTdGF0dXNJbmZvIHN0YXR1cyA9IGdldE9yQ3JlYXRlU3luY1N0YXR1c0xvY2tlZChhdXRob3JpdHkuaWRlbnQpOworICAgICAgICAgICAgICAgICAgICAvLyBBIG5ldyBwZXJpb2RpYyBzeW5jIGlzIGluaXRpYWxpc2VkIGFzIGFscmVhZHkgaGF2aW5nIGJlZW4gcnVuLgorICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc2V0UGVyaW9kaWNTeW5jVGltZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHkucGVyaW9kaWNTeW5jcy5zaXplKCkgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIHdyaXRlQWNjb3VudEluZm9Mb2NrZWQoKTsKICAgICAgICAgICAgICAgICB3cml0ZVN0YXR1c0xvY2tlZCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAgICAgcmVwb3J0Q2hhbmdlKENvbnRlbnRSZXNvbHZlci5TWU5DX09CU0VSVkVSX1RZUEVfU0VUVElOR1MpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGFkZFBlcmlvZGljU3luYyhQZXJpb2RpY1N5bmMgdG9BZGQsIGludCB1c2VySWQpIHsKLSAgICAgICAgdXBkYXRlT3JSZW1vdmVQZXJpb2RpY1N5bmModG9BZGQsIHVzZXJJZCwgdHJ1ZSAvKiBhZGQgKi8pOworICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBlcmlvZGljU3luYyhFbmRQb2ludCBpbmZvLCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgIHN5bmNocm9uaXplZChtQXV0aG9yaXRpZXMpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPQorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQoaW5mbywgLTEsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAvLyBSZW1vdmUgYW55IHBlcmlvZGljIHN5bmNzIHRoYXQgbWF0Y2ggdGhlIHRhcmdldCBhbmQgZXh0cmFzLgorICAgICAgICAgICAgICAgIFN5bmNTdGF0dXNJbmZvIHN0YXR1cyA9IG1TeW5jU3RhdHVzLmdldChhdXRob3JpdHkuaWRlbnQpOworICAgICAgICAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIEl0ZXJhdG9yPFBlcmlvZGljU3luYz4gaXRlcmF0b3IgPSBhdXRob3JpdHkucGVyaW9kaWNTeW5jcy5pdGVyYXRvcigpOworICAgICAgICAgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFBlcmlvZGljU3luYyBzeW5jSW5mbyA9IGl0ZXJhdG9yLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFN5bmNNYW5hZ2VyLnN5bmNFeHRyYXNFcXVhbHMoc3luY0luZm8uZXh0cmFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIGluY2x1ZGVTeW5jU2V0dGluZ3MgKi8pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgcmVtb3ZlZCBhbiBlbnRyeSBmcm9tIHRoZSBwZXJpb2RpY1N5bmNzIGFycmF5IGFsc28KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBmcm9tIHRoZSBzdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5yZW1vdmVQZXJpb2RpY1N5bmNUaW1lKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJUcmllZCByZW1vdmluZyBzeW5jIHN0YXR1cyBvbiByZW1vdmUgcGVyaW9kaWMgc3luYyBidXQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgZGlkIG5vdCBmaW5kIGl0LiIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghY2hhbmdlZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICB3cml0ZUFjY291bnRJbmZvTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgd3JpdGVTdGF0dXNMb2NrZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXBvcnRDaGFuZ2UoQ29udGVudFJlc29sdmVyLlNZTkNfT0JTRVJWRVJfVFlQRV9TRVRUSU5HUyk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUGVyaW9kaWNTeW5jKFBlcmlvZGljU3luYyB0b1JlbW92ZSwgaW50IHVzZXJJZCkgewotICAgICAgICB1cGRhdGVPclJlbW92ZVBlcmlvZGljU3luYyh0b1JlbW92ZSwgdXNlcklkLCBmYWxzZSAvKiByZW1vdmUgKi8pOwotICAgIH0KLQotICAgIHB1YmxpYyBMaXN0PFBlcmlvZGljU3luYz4gZ2V0UGVyaW9kaWNTeW5jcyhBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIFN0cmluZyBwcm92aWRlck5hbWUpIHsKLSAgICAgICAgQXJyYXlMaXN0PFBlcmlvZGljU3luYz4gc3luY3MgPSBuZXcgQXJyYXlMaXN0PFBlcmlvZGljU3luYz4oKTsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIGxpc3Qgb2YgcGVyaW9kaWMgc3luY3MgZm9yIGEgdGFyZ2V0LiBOZXZlciBudWxsLiBJZiBubyBzdWNoIHN5bmNzIGV4aXN0LCByZXR1cm5zIGFuCisgICAgICogZW1wdHkgbGlzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgTGlzdDxQZXJpb2RpY1N5bmM+IGdldFBlcmlvZGljU3luY3MoRW5kUG9pbnQgaW5mbykgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRBdXRob3JpdHlMb2NrZWQoYWNjb3VudCwgdXNlcklkLCBwcm92aWRlck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICJnZXRQZXJpb2RpY1N5bmNzIik7Ci0gICAgICAgICAgICBpZiAoYXV0aG9yaXR5ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKFBlcmlvZGljU3luYyBpdGVtIDogYXV0aG9yaXR5LnBlcmlvZGljU3luY3MpIHsKKyAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5SW5mbyA9IGdldEF1dGhvcml0eUxvY2tlZChpbmZvLCAiZ2V0UGVyaW9kaWNTeW5jcyIpOworICAgICAgICAgICAgQXJyYXlMaXN0PFBlcmlvZGljU3luYz4gc3luY3MgPSBuZXcgQXJyYXlMaXN0PFBlcmlvZGljU3luYz4oKTsKKyAgICAgICAgICAgIGlmIChhdXRob3JpdHlJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFBlcmlvZGljU3luYyBpdGVtIDogYXV0aG9yaXR5SW5mby5wZXJpb2RpY1N5bmNzKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIENvcHkgYW5kIHNlbmQgb3V0LiBOZWNlc3NhcnkgZm9yIHRocmVhZC1zYWZldHkgYWx0aG91Z2ggaXQncyBwYXJjZWxlZC4KICAgICAgICAgICAgICAgICAgICAgc3luY3MuYWRkKG5ldyBQZXJpb2RpY1N5bmMoaXRlbSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzeW5jczsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gc3luY3M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0TWFzdGVyU3luY0F1dG9tYXRpY2FsbHkoYm9vbGVhbiBmbGFnLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7CiAgICAgICAgICAgICBCb29sZWFuIGF1dG8gPSBtTWFzdGVyU3luY0F1dG9tYXRpY2FsbHkuZ2V0KHVzZXJJZCk7Ci0gICAgICAgICAgICBpZiAoYXV0byAhPSBudWxsICYmIChib29sZWFuKSBhdXRvID09IGZsYWcpIHsKKyAgICAgICAgICAgIGlmIChhdXRvICE9IG51bGwgJiYgYXV0by5lcXVhbHMoZmxhZykpIHsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtTWFzdGVyU3luY0F1dG9tYXRpY2FsbHkucHV0KHVzZXJJZCwgZmxhZyk7CkBAIC05MDEsMTIgKzEwNDksNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlQXV0aG9yaXR5KEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIGF1dGhvcml0eSkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgcmVtb3ZlQXV0aG9yaXR5TG9ja2VkKGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5LCB0cnVlIC8qIGRvV3JpdGUgKi8pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcHVibGljIEF1dGhvcml0eUluZm8gZ2V0QXV0aG9yaXR5KGludCBhdXRob3JpdHlJZCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewogICAgICAgICAgICAgcmV0dXJuIG1BdXRob3JpdGllcy5nZXQoYXV0aG9yaXR5SWQpOwpAQCAtOTE0LDcyICsxMDU2LDYwIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBhIHN5bmMgb3BlcmF0aW9uIGZvciB0aGUgZ2l2ZW4KLSAgICAgKiBhY2NvdW50IG9yIGF1dGhvcml0eSBhY3RpdmVseSBiZWluZyBwcm9jZXNzZWQuCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBhIHN5bmMgb3BlcmF0aW9uIGJlaW5nIGFjdGl2ZWx5IHByb2Nlc3NlZCBmb3IgdGhlIGdpdmVuCisgICAgICogdGFyZ2V0LgogICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzU3luY0FjdGl2ZShBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsIFN0cmluZyBhdXRob3JpdHkpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1N5bmNBY3RpdmUoRW5kUG9pbnQgaW5mbykgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgZm9yIChTeW5jSW5mbyBzeW5jSW5mbyA6IGdldEN1cnJlbnRTeW5jcyh1c2VySWQpKSB7CisgICAgICAgICAgICBmb3IgKFN5bmNJbmZvIHN5bmNJbmZvIDogZ2V0Q3VycmVudFN5bmNzKGluZm8udXNlcklkKSkgewogICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYWluZm8gPSBnZXRBdXRob3JpdHkoc3luY0luZm8uYXV0aG9yaXR5SWQpOwotICAgICAgICAgICAgICAgIGlmIChhaW5mbyAhPSBudWxsICYmIGFpbmZvLmFjY291bnQuZXF1YWxzKGFjY291bnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBhaW5mby5hdXRob3JpdHkuZXF1YWxzKGF1dGhvcml0eSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGFpbmZvLnVzZXJJZCA9PSB1c2VySWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWluZm8gIT0gbnVsbCAmJiBhaW5mby50YXJnZXQubWF0Y2hlc1NwZWMoaW5mbykpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBQZW5kaW5nT3BlcmF0aW9uIGluc2VydEludG9QZW5kaW5nKFBlbmRpbmdPcGVyYXRpb24gb3ApIHsKKyAgICBwdWJsaWMgUGVuZGluZ09wZXJhdGlvbiBpbnNlcnRJbnRvUGVuZGluZyhTeW5jT3BlcmF0aW9uIG9wKSB7CisgICAgICAgIFBlbmRpbmdPcGVyYXRpb24gcG9wOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiaW5zZXJ0SW50b1BlbmRpbmc6IGFjY291bnQ9IiArIG9wLmFjY291bnQKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1c2VyPSIgKyBvcC51c2VySWQKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhdXRoPSIgKyBvcC5hdXRob3JpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBzcmM9IiArIG9wLnN5bmNTb3VyY2UKKyAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgeworICAgICAgICAgICAgICAgIExvZy52KFRBRywgImluc2VydEludG9QZW5kaW5nOiBhdXRob3JpdHk9IiArIG9wLnRhcmdldAogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGV4dHJhcz0iICsgb3AuZXh0cmFzKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHkgPSBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZChvcC5hY2NvdW50LCBvcC51c2VySWQsCi0gICAgICAgICAgICAgICAgICAgIG9wLmF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICAgICAgLTEgLyogZGVzaXJlZCBpZGVudGlmaWVyICovLAotICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIHdyaXRlIGFjY291bnRzIHRvIHN0b3JhZ2UgKi8pOworICAgICAgICAgICAgZmluYWwgRW5kUG9pbnQgaW5mbyA9IG9wLnRhcmdldDsKKyAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0KKyAgICAgICAgICAgICAgICAgICAgZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQoaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAvKiBkZXNpcmVkIGlkZW50aWZpZXIgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKiB3cml0ZSBhY2NvdW50cyB0byBzdG9yYWdlICovKTsKICAgICAgICAgICAgIGlmIChhdXRob3JpdHkgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBvcCA9IG5ldyBQZW5kaW5nT3BlcmF0aW9uKG9wKTsKLSAgICAgICAgICAgIG9wLmF1dGhvcml0eUlkID0gYXV0aG9yaXR5LmlkZW50OwotICAgICAgICAgICAgbVBlbmRpbmdPcGVyYXRpb25zLmFkZChvcCk7Ci0gICAgICAgICAgICBhcHBlbmRQZW5kaW5nT3BlcmF0aW9uTG9ja2VkKG9wKTsKKyAgICAgICAgICAgIHBvcCA9IG5ldyBQZW5kaW5nT3BlcmF0aW9uKGF1dGhvcml0eSwgb3AucmVhc29uLCBvcC5zeW5jU291cmNlLCBvcC5leHRyYXMsCisgICAgICAgICAgICAgICAgICAgIG9wLmV4cGVkaXRlZCk7CisgICAgICAgICAgICBtUGVuZGluZ09wZXJhdGlvbnMuYWRkKHBvcCk7CisgICAgICAgICAgICBhcHBlbmRQZW5kaW5nT3BlcmF0aW9uTG9ja2VkKHBvcCk7CiAKICAgICAgICAgICAgIFN5bmNTdGF0dXNJbmZvIHN0YXR1cyA9IGdldE9yQ3JlYXRlU3luY1N0YXR1c0xvY2tlZChhdXRob3JpdHkuaWRlbnQpOwogICAgICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSB0cnVlOwogICAgICAgICB9Ci0KICAgICAgICAgcmVwb3J0Q2hhbmdlKENvbnRlbnRSZXNvbHZlci5TWU5DX09CU0VSVkVSX1RZUEVfUEVORElORyk7Ci0gICAgICAgIHJldHVybiBvcDsKKyAgICAgICAgcmV0dXJuIHBvcDsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBSZW1vdmUgZnJvbSBsaXN0IG9mIHBlbmRpbmcgb3BlcmF0aW9ucy4gSWYgc3VjY2Vzc2Z1bCwgc2VhcmNoIHRocm91Z2ggbGlzdCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBhdXRob3JpdGllcy4gSWYgdGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZyBzeW5jcyBmb3IgdGhlIHNhbWUgYXV0aG9yaXR5L2FjY291bnQvdXNlcmlkLAotICAgICAqIHVwZGF0ZSB0aGUgU3luY1N0YXR1c0luZm8gZm9yIHRoYXQgYXV0aG9yaXR5KGF1dGhvcml0eSBoZXJlIGlzIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbgotICAgICAqIG9mIGEgJ3N5bmMgb3BlcmF0aW9uJy4KLSAgICAgKiBAcGFyYW0gb3AKLSAgICAgKiBAcmV0dXJuCisgICAgICogYXV0aG9yaXRpZXMuIElmIHRoZXJlIGFyZSBubyBtb3JlIHBlbmRpbmcgc3luY3MgZm9yIHRoZSBzYW1lIHRhcmdldCwKKyAgICAgKiB1cGRhdGUgdGhlIFN5bmNTdGF0dXNJbmZvIGZvciB0aGF0IHRhcmdldC4KKyAgICAgKiBAcGFyYW0gb3AgUGVuZGluZyBvcCB0byBkZWxldGUuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZGVsZXRlRnJvbVBlbmRpbmcoUGVuZGluZ09wZXJhdGlvbiBvcCkgewogICAgICAgICBib29sZWFuIHJlcyA9IGZhbHNlOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiZGVsZXRlRnJvbVBlbmRpbmc6IGFjY291bnQ9IiArIG9wLmFjY291bnQKLSAgICAgICAgICAgICAgICAgICAgKyAiIHVzZXI9IiArIG9wLnVzZXJJZAotICAgICAgICAgICAgICAgICAgICArICIgYXV0aD0iICsgb3AuYXV0aG9yaXR5Ci0gICAgICAgICAgICAgICAgICAgICsgIiBzcmM9IiArIG9wLnN5bmNTb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgKyAiIGV4dHJhcz0iICsgb3AuZXh0cmFzKTsKKyAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgeworICAgICAgICAgICAgICAgIExvZy52KFRBRywgImRlbGV0ZUZyb21QZW5kaW5nOiBhY2NvdW50PSIgKyBvcC50b1N0cmluZygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtUGVuZGluZ09wZXJhdGlvbnMucmVtb3ZlKG9wKSkgewogICAgICAgICAgICAgICAgIGlmIChtUGVuZGluZ09wZXJhdGlvbnMuc2l6ZSgpID09IDAKQEAgLTk4OSwzMCArMTExOSwyNyBAQAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1OdW1QZW5kaW5nRmluaXNoZWQrKzsKICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldEF1dGhvcml0eUxvY2tlZChvcC5hY2NvdW50LCBvcC51c2VySWQsIG9wLmF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVGcm9tUGVuZGluZyIpOworICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gZ2V0QXV0aG9yaXR5TG9ja2VkKG9wLnRhcmdldCwgImRlbGV0ZUZyb21QZW5kaW5nIik7CiAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAicmVtb3ZpbmcgLSAiICsgYXV0aG9yaXR5LnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgInJlbW92aW5nIC0gIiArIGF1dGhvcml0eS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IG1QZW5kaW5nT3BlcmF0aW9ucy5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbW9yZVBlbmRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgUGVuZGluZ09wZXJhdGlvbiBjdXIgPSBtUGVuZGluZ09wZXJhdGlvbnMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ci5hY2NvdW50LmVxdWFscyhvcC5hY2NvdW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjdXIuYXV0aG9yaXR5LmVxdWFscyhvcC5hdXRob3JpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1ci51c2VySWQgPT0gb3AudXNlcklkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyLmVxdWFscyhvcCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlUGVuZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBpZiAoIW1vcmVQZW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIm5vIG1vcmUgcGVuZGluZyEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgTG9nLnYoVEFHLCAibm8gbW9yZSBwZW5kaW5nISIpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3luY1N0YXR1c0luZm8gc3RhdHVzID0gZ2V0T3JDcmVhdGVTeW5jU3RhdHVzTG9ja2VkKGF1dGhvcml0eS5pZGVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMucGVuZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgcmVzID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTA0Nyw3ICsxMTc0LDkgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkb0RhdGFiYXNlQ2xlYW51cChBY2NvdW50W10gYWNjb3VudHMsIGludCB1c2VySWQpIHsKICAgICAgICAgc3luY2hyb25pemVkIChtQXV0aG9yaXRpZXMpIHsKLSAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiVXBkYXRpbmcgZm9yIG5ldyBhY2NvdW50cy4uLiIpOworICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CisgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiVXBkYXRpbmcgZm9yIG5ldyBhY2NvdW50cy4uLiIpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgU3BhcnNlQXJyYXk8QXV0aG9yaXR5SW5mbz4gcmVtb3ZpbmcgPSBuZXcgU3BhcnNlQXJyYXk8QXV0aG9yaXR5SW5mbz4oKTsKICAgICAgICAgICAgIEl0ZXJhdG9yPEFjY291bnRJbmZvPiBhY2NJdCA9IG1BY2NvdW50cy52YWx1ZXMoKS5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGFjY0l0Lmhhc05leHQoKSkgewpAQCAtMTA1NSw3ICsxMTg0LDcgQEAKICAgICAgICAgICAgICAgICBpZiAoIUFycmF5VXRpbHMuY29udGFpbnMoYWNjb3VudHMsIGFjYy5hY2NvdW50QW5kVXNlci5hY2NvdW50KQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgYWNjLmFjY291bnRBbmRVc2VyLnVzZXJJZCA9PSB1c2VySWQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhY2NvdW50IG5vIGxvbmdlciBleGlzdHMuLi4KLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiQWNjb3VudCByZW1vdmVkOiAiICsgYWNjLmFjY291bnRBbmRVc2VyKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBmb3IgKEF1dGhvcml0eUluZm8gYXV0aCA6IGFjYy5hdXRob3JpdGllcy52YWx1ZXMoKSkgewpAQCAtMTEwMiwyNSArMTIzMSwyNSBAQAogICAgIHB1YmxpYyBTeW5jSW5mbyBhZGRBY3RpdmVTeW5jKFN5bmNNYW5hZ2VyLkFjdGl2ZVN5bmNDb250ZXh0IGFjdGl2ZVN5bmNDb250ZXh0KSB7CiAgICAgICAgIGZpbmFsIFN5bmNJbmZvIHN5bmNJbmZvOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJzZXRBY3RpdmVTeW5jOiBhY2NvdW50PSIKLSAgICAgICAgICAgICAgICAgICAgKyBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi5hY2NvdW50Ci0gICAgICAgICAgICAgICAgICAgICsgIiBhdXRoPSIgKyBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi5hdXRob3JpdHkKKyAgICAgICAgICAgICAgICAgICAgKyAiIGF1dGg9IiArIGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLnRhcmdldAogICAgICAgICAgICAgICAgICAgICArICIgc3JjPSIgKyBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi5zeW5jU291cmNlCiAgICAgICAgICAgICAgICAgICAgICsgIiBleHRyYXM9IiArIGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLmV4dHJhcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKAotICAgICAgICAgICAgICAgICAgICBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi5hY2NvdW50LAotICAgICAgICAgICAgICAgICAgICBhY3RpdmVTeW5jQ29udGV4dC5tU3luY09wZXJhdGlvbi51c2VySWQsCi0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLmF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICAgICAgLTEgLyogYXNzaWduIGEgbmV3IGlkZW50aWZpZXIgaWYgY3JlYXRpbmcgYSBuZXcgYXV0aG9yaXR5ICovLAorICAgICAgICAgICAgZmluYWwgRW5kUG9pbnQgaW5mbyA9IGFjdGl2ZVN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLnRhcmdldDsKKyAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5SW5mbyA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKAorICAgICAgICAgICAgICAgICAgICBpbmZvLAorICAgICAgICAgICAgICAgICAgICAtMSAvKiBhc3NpZ24gYSBuZXcgaWRlbnRpZmllciBpZiBjcmVhdGluZyBhIG5ldyB0YXJnZXQgKi8sCiAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogd3JpdGUgdG8gc3RvcmFnZSBpZiB0aGlzIHJlc3VsdHMgaW4gYSBjaGFuZ2UgKi8pOwotICAgICAgICAgICAgc3luY0luZm8gPSBuZXcgU3luY0luZm8oYXV0aG9yaXR5LmlkZW50LAotICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHkuYWNjb3VudCwgYXV0aG9yaXR5LmF1dGhvcml0eSwKKyAgICAgICAgICAgIHN5bmNJbmZvID0gbmV3IFN5bmNJbmZvKAorICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLmlkZW50LAorICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLnRhcmdldC5hY2NvdW50LAorICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLnRhcmdldC5wcm92aWRlciwKKyAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby50YXJnZXQuc2VydmljZSwKICAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3luY0NvbnRleHQubVN0YXJ0VGltZSk7Ci0gICAgICAgICAgICBnZXRDdXJyZW50U3luY3MoYXV0aG9yaXR5LnVzZXJJZCkuYWRkKHN5bmNJbmZvKTsKKyAgICAgICAgICAgIGdldEN1cnJlbnRTeW5jcyhhdXRob3JpdHlJbmZvLnRhcmdldC51c2VySWQpLmFkZChzeW5jSW5mbyk7CiAgICAgICAgIH0KLQogICAgICAgICByZXBvcnRBY3RpdmVDaGFuZ2UoKTsKICAgICAgICAgcmV0dXJuIHN5bmNJbmZvOwogICAgIH0KQEAgLTExMzAsMTAgKzEyNTksMTEgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZW1vdmVBY3RpdmVTeW5jKFN5bmNJbmZvIHN5bmNJbmZvLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgewogICAgICAgICAgICAgICAgIExvZy52KFRBRywgInJlbW92ZUFjdGl2ZVN5bmM6IGFjY291bnQ9IiArIHN5bmNJbmZvLmFjY291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB1c2VyPSIgKyB1c2VySWQKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhdXRoPSIgKyBzeW5jSW5mby5hdXRob3JpdHkpOworICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGF1dGg9IiArIHN5bmNJbmZvLmF1dGhvcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHNlcnZpY2U9IiArIHN5bmNJbmZvLnNlcnZpY2UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZ2V0Q3VycmVudFN5bmNzKHVzZXJJZCkucmVtb3ZlKHN5bmNJbmZvKTsKICAgICAgICAgfQpAQCAtMTE0OSwzNyArMTI3OSwzNCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIE5vdGUgdGhhdCBzeW5jIGhhcyBzdGFydGVkIGZvciB0aGUgZ2l2ZW4gYWNjb3VudCBhbmQgYXV0aG9yaXR5LgorICAgICAqIE5vdGUgdGhhdCBzeW5jIGhhcyBzdGFydGVkIGZvciB0aGUgZ2l2ZW4gb3BlcmF0aW9uLgogICAgICAqLwotICAgIHB1YmxpYyBsb25nIGluc2VydFN0YXJ0U3luY0V2ZW50KEFjY291bnQgYWNjb3VudE5hbWUsIGludCB1c2VySWQsIGludCByZWFzb24sCi0gICAgICAgICAgICBTdHJpbmcgYXV0aG9yaXR5TmFtZSwgbG9uZyBub3csIGludCBzb3VyY2UsIGJvb2xlYW4gaW5pdGlhbGl6YXRpb24sIEJ1bmRsZSBleHRyYXMpIHsKKyAgICBwdWJsaWMgbG9uZyBpbnNlcnRTdGFydFN5bmNFdmVudChTeW5jT3BlcmF0aW9uIG9wLCBsb25nIG5vdykgewogICAgICAgICBsb25nIGlkOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiaW5zZXJ0U3RhcnRTeW5jRXZlbnQ6IGFjY291bnQ9IiArIGFjY291bnROYW1lICsgInVzZXI9IiArIHVzZXJJZAotICAgICAgICAgICAgICAgICAgICArICIgYXV0aD0iICsgYXV0aG9yaXR5TmFtZSArICIgc291cmNlPSIgKyBzb3VyY2UpOworICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CisgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiaW5zZXJ0U3RhcnRTeW5jRXZlbnQ6ICIgKyBvcCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGdldEF1dGhvcml0eUxvY2tlZChhY2NvdW50TmFtZSwgdXNlcklkLCBhdXRob3JpdHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAiaW5zZXJ0U3RhcnRTeW5jRXZlbnQiKTsKKyAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gZ2V0QXV0aG9yaXR5TG9ja2VkKG9wLnRhcmdldCwgImluc2VydFN0YXJ0U3luY0V2ZW50Iik7CiAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTeW5jSGlzdG9yeUl0ZW0gaXRlbSA9IG5ldyBTeW5jSGlzdG9yeUl0ZW0oKTsKLSAgICAgICAgICAgIGl0ZW0uaW5pdGlhbGl6YXRpb24gPSBpbml0aWFsaXphdGlvbjsKKyAgICAgICAgICAgIGl0ZW0uaW5pdGlhbGl6YXRpb24gPSBvcC5pc0luaXRpYWxpemF0aW9uKCk7CiAgICAgICAgICAgICBpdGVtLmF1dGhvcml0eUlkID0gYXV0aG9yaXR5LmlkZW50OwogICAgICAgICAgICAgaXRlbS5oaXN0b3J5SWQgPSBtTmV4dEhpc3RvcnlJZCsrOwogICAgICAgICAgICAgaWYgKG1OZXh0SGlzdG9yeUlkIDwgMCkgbU5leHRIaXN0b3J5SWQgPSAwOwogICAgICAgICAgICAgaXRlbS5ldmVudFRpbWUgPSBub3c7Ci0gICAgICAgICAgICBpdGVtLnNvdXJjZSA9IHNvdXJjZTsKLSAgICAgICAgICAgIGl0ZW0ucmVhc29uID0gcmVhc29uOwotICAgICAgICAgICAgaXRlbS5leHRyYXMgPSBleHRyYXM7CisgICAgICAgICAgICBpdGVtLnNvdXJjZSA9IG9wLnN5bmNTb3VyY2U7CisgICAgICAgICAgICBpdGVtLnJlYXNvbiA9IG9wLnJlYXNvbjsKKyAgICAgICAgICAgIGl0ZW0uZXh0cmFzID0gb3AuZXh0cmFzOwogICAgICAgICAgICAgaXRlbS5ldmVudCA9IEVWRU5UX1NUQVJUOwogICAgICAgICAgICAgbVN5bmNIaXN0b3J5LmFkZCgwLCBpdGVtKTsKICAgICAgICAgICAgIHdoaWxlIChtU3luY0hpc3Rvcnkuc2l6ZSgpID4gTUFYX0hJU1RPUlkpIHsKICAgICAgICAgICAgICAgICBtU3luY0hpc3RvcnkucmVtb3ZlKG1TeW5jSGlzdG9yeS5zaXplKCktMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZCA9IGl0ZW0uaGlzdG9yeUlkOwotICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJyZXR1cm5pbmcgaGlzdG9yeUlkICIgKyBpZCk7CisgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIExvZy52KFRBRywgInJldHVybmluZyBoaXN0b3J5SWQgIiArIGlkKTsKICAgICAgICAgfQogCiAgICAgICAgIHJlcG9ydENoYW5nZShDb250ZW50UmVzb2x2ZXIuU1lOQ19PQlNFUlZFUl9UWVBFX1NUQVRVUyk7CkBAIC0xMTg5LDcgKzEzMTYsNyBAQAogICAgIHB1YmxpYyB2b2lkIHN0b3BTeW5jRXZlbnQobG9uZyBoaXN0b3J5SWQsIGxvbmcgZWxhcHNlZFRpbWUsIFN0cmluZyByZXN1bHRNZXNzYWdlLAogICAgICAgICAgICAgbG9uZyBkb3duc3RyZWFtQWN0aXZpdHksIGxvbmcgdXBzdHJlYW1BY3Rpdml0eSkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1BdXRob3JpdGllcykgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJzdG9wU3luY0V2ZW50OiBoaXN0b3J5SWQ9IiArIGhpc3RvcnlJZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTeW5jSGlzdG9yeUl0ZW0gaXRlbSA9IG51bGw7CkBAIC0xMzQ2LDEzICsxNDczLDEyIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0dXJuIGEgY29weSBvZiB0aGUgc3BlY2lmaWVkIGF1dGhvcml0eSB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHN5bmMgc3RhdHVzCisgICAgICogUmV0dXJuIGEgY29weSBvZiB0aGUgc3BlY2lmaWVkIHRhcmdldCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHN5bmMgc3RhdHVzCiAgICAgICovCi0gICAgcHVibGljIFBhaXI8QXV0aG9yaXR5SW5mbywgU3luY1N0YXR1c0luZm8+IGdldENvcHlPZkF1dGhvcml0eVdpdGhTeW5jU3RhdHVzKAotICAgICAgICAgICAgQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgcHVibGljIFBhaXI8QXV0aG9yaXR5SW5mbywgU3luY1N0YXR1c0luZm8+IGdldENvcHlPZkF1dGhvcml0eVdpdGhTeW5jU3RhdHVzKEVuZFBvaW50IGluZm8pIHsKICAgICAgICAgc3luY2hyb25pemVkIChtQXV0aG9yaXRpZXMpIHsKLSAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5SW5mbyA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5LAotICAgICAgICAgICAgICAgICAgICAtMSAvKiBhc3NpZ24gYSBuZXcgaWRlbnRpZmllciBpZiBjcmVhdGluZyBhIG5ldyBhdXRob3JpdHkgKi8sCisgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8gPSBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZChpbmZvLAorICAgICAgICAgICAgICAgICAgICAtMSAvKiBhc3NpZ24gYSBuZXcgaWRlbnRpZmllciBpZiBjcmVhdGluZyBhIG5ldyB0YXJnZXQgKi8sCiAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogd3JpdGUgdG8gc3RvcmFnZSBpZiB0aGlzIHJlc3VsdHMgaW4gYSBjaGFuZ2UgKi8pOwogICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvcHlQYWlyT2ZBdXRob3JpdHlXaXRoU3luY1N0YXR1c0xvY2tlZChhdXRob3JpdHlJbmZvKTsKICAgICAgICAgfQpAQCAtMTM3MywyNiArMTQ5OSwyNCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHN0YXR1cyB0aGF0IG1hdGNoZXMgdGhlIGF1dGhvcml0eSBhbmQgYWNjb3VudC4KKyAgICAgKiBSZXR1cm5zIHRoZSBzdGF0dXMgdGhhdCBtYXRjaGVzIHRoZSB0YXJnZXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gYWNjb3VudCB0aGUgYWNjb3VudCB3ZSB3YW50IHRvIGNoZWNrCi0gICAgICogQHBhcmFtIGF1dGhvcml0eSB0aGUgYXV0aG9yaXR5IHdob3NlIHJvdyBzaG91bGQgYmUgc2VsZWN0ZWQKLSAgICAgKiBAcmV0dXJuIHRoZSBTeW5jU3RhdHVzSW5mbyBmb3IgdGhlIGF1dGhvcml0eSBvciBudWxsIGlmIG5vbmUgZm91bmQuCisgICAgICogQHBhcmFtIGluZm8gdGhlIGVuZHBvaW50IHRhcmdldCB3ZSBhcmUgcXVlcnlpbmcgc3RhdHVzIGluZm8gZm9yLgorICAgICAqIEByZXR1cm4gdGhlIFN5bmNTdGF0dXNJbmZvIGZvciB0aGUgZW5kcG9pbnQuCiAgICAgICovCi0gICAgcHVibGljIFN5bmNTdGF0dXNJbmZvIGdldFN0YXR1c0J5QWNjb3VudEFuZEF1dGhvcml0eShBY2NvdW50IGFjY291bnQsIGludCB1c2VySWQsCi0gICAgICAgICAgICBTdHJpbmcgYXV0aG9yaXR5KSB7Ci0gICAgICAgIGlmIChhY2NvdW50ID09IG51bGwgfHwgYXV0aG9yaXR5ID09IG51bGwpIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICBwdWJsaWMgU3luY1N0YXR1c0luZm8gZ2V0U3RhdHVzQnlBdXRob3JpdHkoRW5kUG9pbnQgaW5mbykgeworICAgICAgICBpZiAoaW5mby50YXJnZXRfcHJvdmlkZXIgJiYgKGluZm8uYWNjb3VudCA9PSBudWxsIHx8IGluZm8ucHJvdmlkZXIgPT0gbnVsbCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9IGVsc2UgaWYgKGluZm8udGFyZ2V0X3NlcnZpY2UgJiYgaW5mby5zZXJ2aWNlID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7CiAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IG1TeW5jU3RhdHVzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU3luY1N0YXR1c0luZm8gY3VyID0gbVN5bmNTdGF0dXMudmFsdWVBdChpKTsKICAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGFpbmZvID0gbUF1dGhvcml0aWVzLmdldChjdXIuYXV0aG9yaXR5SWQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGFpbmZvICE9IG51bGwgJiYgYWluZm8uYXV0aG9yaXR5LmVxdWFscyhhdXRob3JpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBhaW5mby51c2VySWQgPT0gdXNlcklkCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBhY2NvdW50LmVxdWFscyhhaW5mby5hY2NvdW50KSkgeworICAgICAgICAgICAgICAgIGlmIChhaW5mbyAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBhaW5mby50YXJnZXQubWF0Y2hlc1NwZWMoaW5mbykpIHsKICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTQwMCwyNSArMTUyNCwyMCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHBlbmRpbmcgc3RhdHVzIGlzIHRydWUgb2YgYW55IG1hdGNoaW5nIGF1dGhvcml0aWVzLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzU3luY1BlbmRpbmcoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBwZW5kaW5nIHN0YXR1cyBpcyB0cnVlIG9mIGFueSBtYXRjaGluZyBhdXRob3JpdGllcy4gKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc1N5bmNQZW5kaW5nKEVuZFBvaW50IGluZm8pIHsKICAgICAgICAgc3luY2hyb25pemVkIChtQXV0aG9yaXRpZXMpIHsKICAgICAgICAgICAgIGZpbmFsIGludCBOID0gbVN5bmNTdGF0dXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgICAgICBTeW5jU3RhdHVzSW5mbyBjdXIgPSBtU3luY1N0YXR1cy52YWx1ZUF0KGkpOwogICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYWluZm8gPSBtQXV0aG9yaXRpZXMuZ2V0KGN1ci5hdXRob3JpdHlJZCk7CiAgICAgICAgICAgICAgICAgaWYgKGFpbmZvID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh1c2VySWQgIT0gYWluZm8udXNlcklkKSB7CisgICAgICAgICAgICAgICAgaWYgKCFhaW5mby50YXJnZXQubWF0Y2hlc1NwZWMoaW5mbykpIHsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChhY2NvdW50ICE9IG51bGwgJiYgIWFpbmZvLmFjY291bnQuZXF1YWxzKGFjY291bnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYWluZm8uYXV0aG9yaXR5LmVxdWFscyhhdXRob3JpdHkpICYmIGN1ci5wZW5kaW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKGN1ci5wZW5kaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE0NzQsMTI4ICsxNTkzLDEzMyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHJpZXZlIGFuIGF1dGhvcml0eSwgcmV0dXJuaW5nIG51bGwgaWYgb25lIGRvZXMgbm90IGV4aXN0LgorICAgICAqIFJldHJpZXZlIGEgdGFyZ2V0J3MgZnVsbCBpbmZvLCByZXR1cm5pbmcgbnVsbCBpZiBvbmUgZG9lcyBub3QgZXhpc3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gYWNjb3VudE5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjY291bnQgZm9yIHRoZSBhdXRob3JpdHkuCi0gICAgICogQHBhcmFtIGF1dGhvcml0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIGF1dGhvcml0eSBpdHNlbGYuCisgICAgICogQHBhcmFtIGluZm8gaW5mbyBvZiB0aGUgdGFyZ2V0IHRvIGxvb2sgdXAuCiAgICAgICogQHBhcmFtIHRhZyBJZiBub24tbnVsbCwgdGhpcyB3aWxsIGJlIHVzZWQgaW4gYSBsb2cgbWVzc2FnZSBpZiB0aGUKLSAgICAgKiByZXF1ZXN0ZWQgYXV0aG9yaXR5IGRvZXMgbm90IGV4aXN0LgorICAgICAqIHJlcXVlc3RlZCB0YXJnZXQgZG9lcyBub3QgZXhpc3QuCiAgICAgICovCi0gICAgcHJpdmF0ZSBBdXRob3JpdHlJbmZvIGdldEF1dGhvcml0eUxvY2tlZChBY2NvdW50IGFjY291bnROYW1lLCBpbnQgdXNlcklkLCBTdHJpbmcgYXV0aG9yaXR5TmFtZSwKLSAgICAgICAgICAgIFN0cmluZyB0YWcpIHsKLSAgICAgICAgQWNjb3VudEFuZFVzZXIgYXUgPSBuZXcgQWNjb3VudEFuZFVzZXIoYWNjb3VudE5hbWUsIHVzZXJJZCk7Ci0gICAgICAgIEFjY291bnRJbmZvIGFjY291bnRJbmZvID0gbUFjY291bnRzLmdldChhdSk7Ci0gICAgICAgIGlmIChhY2NvdW50SW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAodGFnICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCB0YWcgKyAiOiB1bmtub3duIGFjY291bnQgIiArIGF1KTsKLSAgICAgICAgICAgICAgICB9CisgICAgcHJpdmF0ZSBBdXRob3JpdHlJbmZvIGdldEF1dGhvcml0eUxvY2tlZChFbmRQb2ludCBpbmZvLCBTdHJpbmcgdGFnKSB7CisgICAgICAgIGlmIChpbmZvLnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheTxBdXRob3JpdHlJbmZvPiBhSW5mbyA9IG1TZXJ2aWNlcy5nZXQoaW5mby5zZXJ2aWNlKTsKKyAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbnVsbDsKKyAgICAgICAgICAgIGlmIChhSW5mbyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYXV0aG9yaXR5ID0gYUluZm8uZ2V0KGluZm8udXNlcklkKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdXRob3JpdHkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmICh0YWcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgdGFnICsgIiBObyBhdXRob3JpdHkgaW5mbyBmb3VuZCBmb3IgIiArIGluZm8uc2VydmljZSArICIgZm9yIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdXNlciAiICsgaW5mby51c2VySWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGF1dGhvcml0eTsKKyAgICAgICAgfSBlbHNlIGlmIChpbmZvLnRhcmdldF9wcm92aWRlcil7CisgICAgICAgICAgICBBY2NvdW50QW5kVXNlciBhdSA9IG5ldyBBY2NvdW50QW5kVXNlcihpbmZvLmFjY291bnQsIGluZm8udXNlcklkKTsKKyAgICAgICAgICAgIEFjY291bnRJbmZvIGFjY291bnRJbmZvID0gbUFjY291bnRzLmdldChhdSk7CisgICAgICAgICAgICBpZiAoYWNjb3VudEluZm8gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmICh0YWcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgdGFnICsgIjogdW5rbm93biBhY2NvdW50ICIgKyBhdSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9IGFjY291bnRJbmZvLmF1dGhvcml0aWVzLmdldChpbmZvLnByb3ZpZGVyKTsKKyAgICAgICAgICAgIGlmIChhdXRob3JpdHkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmICh0YWcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgdGFnICsgIjogdW5rbm93biBwcm92aWRlciAiICsgaW5mby5wcm92aWRlcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXR5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTG9nLmUoVEFHLCB0YWcgKyAiIEF1dGhvcml0eSA6ICIgKyBpbmZvICsgIiwgaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gYWNjb3VudEluZm8uYXV0aG9yaXRpZXMuZ2V0KGF1dGhvcml0eU5hbWUpOwotICAgICAgICBpZiAoYXV0aG9yaXR5ID09IG51bGwpIHsKLSAgICAgICAgICAgIGlmICh0YWcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsIHRhZyArICI6IHVua25vd24gYXV0aG9yaXR5ICIgKyBhdXRob3JpdHlOYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBhdXRob3JpdHk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmUgYW4gYXV0aG9yaXR5LCByZXR1cm5pbmcgbnVsbCBpZiBvbmUgZG9lcyBub3QgZXhpc3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc2VydmljZSBUaGUgc2VydmljZSBuYW1lIHVzZWQgZm9yIHRoaXMgc3luYy4KLSAgICAgKiBAcGFyYW0gdXNlcklkIFRoZSB1c2VyIGZvciB3aG9tIHRoaXMgc3luYyBpcyBzY2hlZHVsZWQuCi0gICAgICogQHBhcmFtIHRhZyBJZiBub24tbnVsbCwgdGhpcyB3aWxsIGJlIHVzZWQgaW4gYSBsb2cgbWVzc2FnZSBpZiB0aGUKLSAgICAgKiByZXF1ZXN0ZWQgYXV0aG9yaXR5IGRvZXMgbm90IGV4aXN0LgotICAgICAqLwotICAgIHByaXZhdGUgQXV0aG9yaXR5SW5mbyBnZXRBdXRob3JpdHlMb2NrZWQoQ29tcG9uZW50TmFtZSBzZXJ2aWNlLCBpbnQgdXNlcklkLCBTdHJpbmcgdGFnKSB7Ci0gICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbVNlcnZpY2VzLmdldChzZXJ2aWNlKS5nZXQodXNlcklkKTsKLSAgICAgICAgaWYgKGF1dGhvcml0eSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAodGFnICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLCB0YWcgKyAiIE5vIGF1dGhvcml0eSBpbmZvIGZvdW5kIGZvciAiICsgc2VydmljZSArICIgZm9yIHVzZXIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdXNlcklkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYXV0aG9yaXR5OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBjbmFtZSBpZGVudGlmaWVyIGZvciB0aGUgc2VydmljZS4KLSAgICAgKiBAcGFyYW0gdXNlcklkIGZvciB0aGUgc3luY3MgY29ycmVzcG9uZGluZyB0byB0aGlzIGF1dGhvcml0eS4KLSAgICAgKiBAcGFyYW0gaWRlbnQgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGF1dGhvcml0eS4gLTEgZm9yIG5vbmUuCisgICAgICogQHBhcmFtIGluZm8gaW5mbyBpZGVudGlmeWluZyB0YXJnZXQuCisgICAgICogQHBhcmFtIGlkZW50IHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0YXJnZXQuIC0xIGZvciBub25lLgogICAgICAqIEBwYXJhbSBkb1dyaXRlIGlmIHRydWUsIHVwZGF0ZSB0aGUgYWNjb3VudHMueG1sIGZpbGUgb24gdGhlIGRpc2suCi0gICAgICogQHJldHVybiB0aGUgYXV0aG9yaXR5IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHByb3ZpZGVkIHN5bmMgc2VydmljZSwgY3JlYXRpbmcgaXQgaWYgbm9uZQorICAgICAqIEByZXR1cm4gdGhlIGF1dGhvcml0eSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBwcm92aWRlZCBzeW5jIHRhcmdldCwgY3JlYXRpbmcgaXQgaWYgbm9uZQogICAgICAqIGV4aXN0cy4KICAgICAgKi8KLSAgICBwcml2YXRlIEF1dGhvcml0eUluZm8gZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQoQ29tcG9uZW50TmFtZSBjbmFtZSwgaW50IHVzZXJJZCwgaW50IGlkZW50LAotICAgICAgICAgICAgYm9vbGVhbiBkb1dyaXRlKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5PEF1dGhvcml0eUluZm8+IGFJbmZvID0gbVNlcnZpY2VzLmdldChjbmFtZSk7Ci0gICAgICAgIGlmIChhSW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBhSW5mbyA9IG5ldyBTcGFyc2VBcnJheTxBdXRob3JpdHlJbmZvPigpOwotICAgICAgICAgICAgbVNlcnZpY2VzLnB1dChjbmFtZSwgYUluZm8pOwotICAgICAgICB9Ci0gICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gYUluZm8uZ2V0KHVzZXJJZCk7Ci0gICAgICAgIGlmIChhdXRob3JpdHkgPT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKGlkZW50IDwgMCkgewotICAgICAgICAgICAgICAgIGlkZW50ID0gbU5leHRBdXRob3JpdHlJZDsKLSAgICAgICAgICAgICAgICBtTmV4dEF1dGhvcml0eUlkKys7Ci0gICAgICAgICAgICAgICAgZG9Xcml0ZSA9IHRydWU7CisgICAgcHJpdmF0ZSBBdXRob3JpdHlJbmZvIGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKEVuZFBvaW50IGluZm8sIGludCBpZGVudCwgYm9vbGVhbiBkb1dyaXRlKSB7CisgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbnVsbDsKKyAgICAgICAgaWYgKGluZm8udGFyZ2V0X3NlcnZpY2UpIHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5PEF1dGhvcml0eUluZm8+IGFJbmZvID0gbVNlcnZpY2VzLmdldChpbmZvLnNlcnZpY2UpOworICAgICAgICAgICAgaWYgKGFJbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhSW5mbyA9IG5ldyBTcGFyc2VBcnJheTxBdXRob3JpdHlJbmZvPigpOworICAgICAgICAgICAgICAgIG1TZXJ2aWNlcy5wdXQoaW5mby5zZXJ2aWNlLCBhSW5mbyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cudihUQUcsICJjcmVhdGVkIGEgbmV3IEF1dGhvcml0eUluZm8gZm9yICIgKyBjbmFtZS5nZXRQYWNrYWdlTmFtZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICArICIsICIgKyBjbmFtZS5nZXRDbGFzc05hbWUoKQotICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCB1c2VyOiAiICsgdXNlcklkKTsKKyAgICAgICAgICAgIGF1dGhvcml0eSA9IGFJbmZvLmdldChpbmZvLnVzZXJJZCk7CisgICAgICAgICAgICBpZiAoYXV0aG9yaXR5ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhdXRob3JpdHkgPSBjcmVhdGVBdXRob3JpdHlMb2NrZWQoaW5mbywgaWRlbnQsIGRvV3JpdGUpOworICAgICAgICAgICAgICAgIGFJbmZvLnB1dChpbmZvLnVzZXJJZCwgYXV0aG9yaXR5KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dGhvcml0eSA9IG5ldyBBdXRob3JpdHlJbmZvKGNuYW1lLCB1c2VySWQsIGlkZW50KTsKLSAgICAgICAgICAgIGFJbmZvLnB1dCh1c2VySWQsIGF1dGhvcml0eSk7Ci0gICAgICAgICAgICBtQXV0aG9yaXRpZXMucHV0KGlkZW50LCBhdXRob3JpdHkpOwotICAgICAgICAgICAgaWYgKGRvV3JpdGUpIHsKLSAgICAgICAgICAgICAgICB3cml0ZUFjY291bnRJbmZvTG9ja2VkKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5mby50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgIEFjY291bnRBbmRVc2VyIGF1ID0gbmV3IEFjY291bnRBbmRVc2VyKGluZm8uYWNjb3VudCwgaW5mby51c2VySWQpOworICAgICAgICAgICAgQWNjb3VudEluZm8gYWNjb3VudCA9IG1BY2NvdW50cy5nZXQoYXUpOworICAgICAgICAgICAgaWYgKGFjY291bnQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGFjY291bnQgPSBuZXcgQWNjb3VudEluZm8oYXUpOworICAgICAgICAgICAgICAgIG1BY2NvdW50cy5wdXQoYXUsIGFjY291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0aG9yaXR5ID0gYWNjb3VudC5hdXRob3JpdGllcy5nZXQoaW5mby5wcm92aWRlcik7CisgICAgICAgICAgICBpZiAoYXV0aG9yaXR5ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhdXRob3JpdHkgPSBjcmVhdGVBdXRob3JpdHlMb2NrZWQoaW5mbywgaWRlbnQsIGRvV3JpdGUpOworICAgICAgICAgICAgICAgIGFjY291bnQuYXV0aG9yaXRpZXMucHV0KGluZm8ucHJvdmlkZXIsIGF1dGhvcml0eSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGF1dGhvcml0eTsKICAgICB9CiAKLSAgICBwcml2YXRlIEF1dGhvcml0eUluZm8gZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQoQWNjb3VudCBhY2NvdW50TmFtZSwgaW50IHVzZXJJZCwKLSAgICAgICAgICAgIFN0cmluZyBhdXRob3JpdHlOYW1lLCBpbnQgaWRlbnQsIGJvb2xlYW4gZG9Xcml0ZSkgewotICAgICAgICBBY2NvdW50QW5kVXNlciBhdSA9IG5ldyBBY2NvdW50QW5kVXNlcihhY2NvdW50TmFtZSwgdXNlcklkKTsKLSAgICAgICAgQWNjb3VudEluZm8gYWNjb3VudCA9IG1BY2NvdW50cy5nZXQoYXUpOwotICAgICAgICBpZiAoYWNjb3VudCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBhY2NvdW50ID0gbmV3IEFjY291bnRJbmZvKGF1KTsKLSAgICAgICAgICAgIG1BY2NvdW50cy5wdXQoYXUsIGFjY291bnQpOworICAgIHByaXZhdGUgQXV0aG9yaXR5SW5mbyBjcmVhdGVBdXRob3JpdHlMb2NrZWQoRW5kUG9pbnQgaW5mbywgaW50IGlkZW50LCBib29sZWFuIGRvV3JpdGUpIHsKKyAgICAgICAgQXV0aG9yaXR5SW5mbyBhdXRob3JpdHk7CisgICAgICAgIGlmIChpZGVudCA8IDApIHsKKyAgICAgICAgICAgIGlkZW50ID0gbU5leHRBdXRob3JpdHlJZDsKKyAgICAgICAgICAgIG1OZXh0QXV0aG9yaXR5SWQrKzsKKyAgICAgICAgICAgIGRvV3JpdGUgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gYWNjb3VudC5hdXRob3JpdGllcy5nZXQoYXV0aG9yaXR5TmFtZSk7Ci0gICAgICAgIGlmIChhdXRob3JpdHkgPT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKGlkZW50IDwgMCkgewotICAgICAgICAgICAgICAgIGlkZW50ID0gbU5leHRBdXRob3JpdHlJZDsKLSAgICAgICAgICAgICAgICBtTmV4dEF1dGhvcml0eUlkKys7Ci0gICAgICAgICAgICAgICAgZG9Xcml0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cudihUQUcsICJjcmVhdGVkIGEgbmV3IEF1dGhvcml0eUluZm8gZm9yICIgKyBhY2NvdW50TmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCB1c2VyICIgKyB1c2VySWQKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcHJvdmlkZXIgIiArIGF1dGhvcml0eU5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0aG9yaXR5ID0gbmV3IEF1dGhvcml0eUluZm8oYWNjb3VudE5hbWUsIHVzZXJJZCwgYXV0aG9yaXR5TmFtZSwgaWRlbnQpOwotICAgICAgICAgICAgYWNjb3VudC5hdXRob3JpdGllcy5wdXQoYXV0aG9yaXR5TmFtZSwgYXV0aG9yaXR5KTsKLSAgICAgICAgICAgIG1BdXRob3JpdGllcy5wdXQoaWRlbnQsIGF1dGhvcml0eSk7Ci0gICAgICAgICAgICBpZiAoZG9Xcml0ZSkgewotICAgICAgICAgICAgICAgIHdyaXRlQWNjb3VudEluZm9Mb2NrZWQoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLlZFUkJPU0UpKSB7CisgICAgICAgICAgICBMb2cudihUQUcsICJjcmVhdGVkIGEgbmV3IEF1dGhvcml0eUluZm8gZm9yICIgKyBpbmZvKTsKICAgICAgICAgfQotCisgICAgICAgIGF1dGhvcml0eSA9IG5ldyBBdXRob3JpdHlJbmZvKGluZm8sIGlkZW50KTsKKyAgICAgICAgbUF1dGhvcml0aWVzLnB1dChpZGVudCwgYXV0aG9yaXR5KTsKKyAgICAgICAgaWYgKGRvV3JpdGUpIHsKKyAgICAgICAgICAgIHdyaXRlQWNjb3VudEluZm9Mb2NrZWQoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gYXV0aG9yaXR5OwogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZUF1dGhvcml0eShFbmRQb2ludCBpbmZvKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7CisgICAgICAgICAgICBpZiAoaW5mby50YXJnZXRfcHJvdmlkZXIpIHsKKyAgICAgICAgICAgICAgICByZW1vdmVBdXRob3JpdHlMb2NrZWQoaW5mby5hY2NvdW50LCBpbmZvLnVzZXJJZCwgaW5mby5wcm92aWRlciwgdHJ1ZSAvKiBkb1dyaXRlICovKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3BhcnNlQXJyYXk8QXV0aG9yaXR5SW5mbz4gYUluZm9zID0gbVNlcnZpY2VzLmdldChpbmZvLnNlcnZpY2UpOworICAgICAgICAgICAgICAgIGlmIChhSW5mb3MgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8gPSBhSW5mb3MuZ2V0KGluZm8udXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUF1dGhvcml0aWVzLnJlbW92ZShhdXRob3JpdHlJbmZvLmlkZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFJbmZvcy5kZWxldGUoaW5mby51c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVBY2NvdW50SW5mb0xvY2tlZCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYW4gYXV0aG9yaXR5IGFzc29jaWF0ZWQgd2l0aCBhIHByb3ZpZGVyLiBOZWVkcyB0byBiZSBhIHN0YW5kYWxvbmUgZnVuY3Rpb24gZm9yCisgICAgICogYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgcmVtb3ZlQXV0aG9yaXR5TG9ja2VkKEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIGF1dGhvcml0eU5hbWUsCiAgICAgICAgICAgICBib29sZWFuIGRvV3JpdGUpIHsKICAgICAgICAgQWNjb3VudEluZm8gYWNjb3VudEluZm8gPSBtQWNjb3VudHMuZ2V0KG5ldyBBY2NvdW50QW5kVXNlcihhY2NvdW50LCB1c2VySWQpKTsKQEAgLTE2MTIsMTAgKzE3MzYsOSBAQAogCiAgICAgLyoqCiAgICAgICogVXBkYXRlcyAoaW4gYSBzeW5jaHJvbml6ZWQgd2F5KSB0aGUgcGVyaW9kaWMgc3luYyB0aW1lIG9mIHRoZSBzcGVjaWZpZWQKLSAgICAgKiBhdXRob3JpdHkgaWQgYW5kIHRhcmdldCBwZXJpb2RpYyBzeW5jCisgICAgICogdGFyZ2V0IGlkIGFuZCB0YXJnZXQgcGVyaW9kaWMgc3luYwogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFBlcmlvZGljU3luY1RpbWUoCi0gICAgICAgICAgICBpbnQgYXV0aG9yaXR5SWQsIFBlcmlvZGljU3luYyB0YXJnZXRQZXJpb2RpY1N5bmMsIGxvbmcgd2hlbikgeworICAgIHB1YmxpYyB2b2lkIHNldFBlcmlvZGljU3luY1RpbWUoaW50IGF1dGhvcml0eUlkLCBQZXJpb2RpY1N5bmMgdGFyZ2V0UGVyaW9kaWNTeW5jLCBsb25nIHdoZW4pIHsKICAgICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwogICAgICAgICBmaW5hbCBBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm87CiAgICAgICAgIHN5bmNocm9uaXplZCAobUF1dGhvcml0aWVzKSB7CkBAIC0xNjMxLDcgKzE3NTQsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgIExvZy53KFRBRywgIklnbm9yaW5nIHNldFBlcmlvZGljU3luY1RpbWUgcmVxdWVzdCBmb3IgYSBzeW5jIHRoYXQgZG9lcyBub3QgZXhpc3QuICIgKwotICAgICAgICAgICAgICAgICAgICAiQXV0aG9yaXR5OiAiICsgYXV0aG9yaXR5SW5mby5hdXRob3JpdHkpOworICAgICAgICAgICAgICAgICAgICAiQXV0aG9yaXR5OiAiICsgYXV0aG9yaXR5SW5mby50YXJnZXQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNjkyLDcgKzE4MTUsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmlzID0gbUFjY291bnRJbmZvRmlsZS5vcGVuUmVhZCgpOwogICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBR19GSUxFLCBMb2cuVkVSQk9TRSkpIHsKLSAgICAgICAgICAgICAgICBMb2cudihUQUcsICJSZWFkaW5nICIgKyBtQWNjb3VudEluZm9GaWxlLmdldEJhc2VGaWxlKCkpOworICAgICAgICAgICAgICAgIExvZy52KFRBR19GSUxFLCAiUmVhZGluZyAiICsgbUFjY291bnRJbmZvRmlsZS5nZXRCYXNlRmlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFhtbFB1bGxQYXJzZXIgcGFyc2VyID0gWG1sLm5ld1B1bGxQYXJzZXIoKTsKICAgICAgICAgICAgIHBhcnNlci5zZXRJbnB1dChmaXMsIG51bGwpOwpAQCAtMTgwMCwxMCArMTkyMywxNCBAQAogCiAgICAgICAgIEFycmF5TGlzdDxBdXRob3JpdHlJbmZvPiBhdXRob3JpdGllc1RvUmVtb3ZlID0gbmV3IEFycmF5TGlzdDxBdXRob3JpdHlJbmZvPigpOwogICAgICAgICBmaW5hbCBpbnQgTiA9IG1BdXRob3JpdGllcy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbUF1dGhvcml0aWVzLnZhbHVlQXQoaSk7CisgICAgICAgICAgICAvLyBza2lwIHRoaXMgYXV0aG9yaXR5IGlmIGl0IGRvZXNuJ3QgdGFyZ2V0IGEgcHJvdmlkZXIKKyAgICAgICAgICAgIGlmIChhdXRob3JpdHkudGFyZ2V0LnRhcmdldF9zZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBza2lwIHRoaXMgYXV0aG9yaXR5IGlmIGl0IGlzbid0IG9uZSBvZiB0aGUgcmVuYW1lZCBvbmVzCi0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmV3QXV0aG9yaXR5TmFtZSA9IHNBdXRob3JpdHlSZW5hbWVzLmdldChhdXRob3JpdHkuYXV0aG9yaXR5KTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuZXdBdXRob3JpdHlOYW1lID0gc0F1dGhvcml0eVJlbmFtZXMuZ2V0KGF1dGhvcml0eS50YXJnZXQucHJvdmlkZXIpOwogICAgICAgICAgICAgaWYgKG5ld0F1dGhvcml0eU5hbWUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtMTgxOSwyMCArMTk0NiwyNiBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSByZWNvcmQgb2YgdGhpcyBuZXcgYXV0aG9yaXR5IHRoZW4gZG9uJ3QgY29weSBvdmVyIHRoZSBzZXR0aW5ncwotICAgICAgICAgICAgaWYgKGdldEF1dGhvcml0eUxvY2tlZChhdXRob3JpdHkuYWNjb3VudCwgYXV0aG9yaXR5LnVzZXJJZCwgbmV3QXV0aG9yaXR5TmFtZSwgImNsZWFudXAiKQotICAgICAgICAgICAgICAgICAgICAhPSBudWxsKSB7CisgICAgICAgICAgICBFbmRQb2ludCBuZXdJbmZvID0KKyAgICAgICAgICAgICAgICAgICAgbmV3IEVuZFBvaW50KGF1dGhvcml0eS50YXJnZXQuYWNjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBdXRob3JpdHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eS50YXJnZXQudXNlcklkKTsKKyAgICAgICAgICAgIGlmIChnZXRBdXRob3JpdHlMb2NrZWQobmV3SW5mbywgImNsZWFudXAiKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEF1dGhvcml0eUluZm8gbmV3QXV0aG9yaXR5ID0gZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQoYXV0aG9yaXR5LmFjY291bnQsCi0gICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eS51c2VySWQsIG5ld0F1dGhvcml0eU5hbWUsIC0xIC8qIGlkZW50ICovLCBmYWxzZSAvKiBkb1dyaXRlICovKTsKKyAgICAgICAgICAgIEF1dGhvcml0eUluZm8gbmV3QXV0aG9yaXR5ID0KKyAgICAgICAgICAgICAgICAgICAgZ2V0T3JDcmVhdGVBdXRob3JpdHlMb2NrZWQobmV3SW5mbywgLTEgLyogaWRlbnQgKi8sIGZhbHNlIC8qIGRvV3JpdGUgKi8pOwogICAgICAgICAgICAgbmV3QXV0aG9yaXR5LmVuYWJsZWQgPSB0cnVlOwogICAgICAgICAgICAgd3JpdGVOZWVkZWQgPSB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgZm9yIChBdXRob3JpdHlJbmZvIGF1dGhvcml0eUluZm8gOiBhdXRob3JpdGllc1RvUmVtb3ZlKSB7Ci0gICAgICAgICAgICByZW1vdmVBdXRob3JpdHlMb2NrZWQoYXV0aG9yaXR5SW5mby5hY2NvdW50LCBhdXRob3JpdHlJbmZvLnVzZXJJZCwKLSAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5SW5mby5hdXRob3JpdHksIGZhbHNlIC8qIGRvV3JpdGUgKi8pOworICAgICAgICAgICAgcmVtb3ZlQXV0aG9yaXR5TG9ja2VkKAorICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLnRhcmdldC5hY2NvdW50LAorICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLnRhcmdldC51c2VySWQsCisgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8udGFyZ2V0LnByb3ZpZGVyLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBkb1dyaXRlICovKTsKICAgICAgICAgICAgIHdyaXRlTmVlZGVkID0gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0xODc0LDMwICsyMDA3LDM3IEBACiAgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgInBhY2thZ2UiKTsKICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImNsYXNzIik7CiAgICAgICAgICAgICBpbnQgdXNlcklkID0gdXNlciA9PSBudWxsID8gMCA6IEludGVnZXIucGFyc2VJbnQodXNlcik7Ci0gICAgICAgICAgICBpZiAoYWNjb3VudFR5cGUgPT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKGFjY291bnRUeXBlID09IG51bGwgJiYgcGFja2FnZU5hbWUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGFjY291bnRUeXBlID0gImNvbS5nb29nbGUiOwogICAgICAgICAgICAgICAgIHN5bmNhYmxlID0gInVua25vd24iOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYXV0aG9yaXR5ID0gbUF1dGhvcml0aWVzLmdldChpZCk7CiAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHX0ZJTEUsIExvZy5WRVJCT1NFKSkgewotICAgICAgICAgICAgICAgIExvZy52KFRBRywgIkFkZGluZyBhdXRob3JpdHk6IGFjY291bnQ9IgotICAgICAgICAgICAgICAgICAgICAgICAgKyBhY2NvdW50TmFtZSArICIgYXV0aD0iICsgYXV0aG9yaXR5TmFtZQorICAgICAgICAgICAgICAgIExvZy52KFRBR19GSUxFLCAiQWRkaW5nIGF1dGhvcml0eToiCisgICAgICAgICAgICAgICAgICAgICAgICArICIgYWNjb3VudD0iICsgYWNjb3VudE5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhY2NvdW50VHlwZT0iICsgYWNjb3VudFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhdXRoPSIgKyBhdXRob3JpdHlOYW1lCisgICAgICAgICAgICAgICAgICAgICAgICArICIgcGFja2FnZT0iICsgcGFja2FnZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBjbGFzcz0iICsgY2xhc3NOYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICArICIgdXNlcj0iICsgdXNlcklkCiAgICAgICAgICAgICAgICAgICAgICAgICArICIgZW5hYmxlZD0iICsgZW5hYmxlZAogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHN5bmNhYmxlPSIgKyBzeW5jYWJsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHX0ZJTEUsIExvZy5WRVJCT1NFKSkgewotICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJDcmVhdGluZyBlbnRyeSIpOworICAgICAgICAgICAgICAgICAgICBMb2cudihUQUdfRklMRSwgIkNyZWF0aW5nIGF1dGhvcml0eSBlbnRyeSIpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYWNjb3VudE5hbWUgIT0gbnVsbCAmJiBhY2NvdW50VHlwZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eSA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBY2NvdW50KGFjY291bnROYW1lLCBhY2NvdW50VHlwZSksIHVzZXJJZCwgYXV0aG9yaXR5TmFtZSwgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBFbmRQb2ludCBpbmZvOworICAgICAgICAgICAgICAgIGlmIChhY2NvdW50TmFtZSAhPSBudWxsICYmIGF1dGhvcml0eU5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpbmZvID0gbmV3IEVuZFBvaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBY2NvdW50KGFjY291bnROYW1lLCBhY2NvdW50VHlwZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSwgdXNlcklkKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHkgPSBnZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ29tcG9uZW50TmFtZShwYWNrYWdlTmFtZSwgY2xhc3NOYW1lKSwgdXNlcklkLCBpZCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBpbmZvID0gbmV3IEVuZFBvaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb21wb25lbnROYW1lKHBhY2thZ2VOYW1lLCBjbGFzc05hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGF1dGhvcml0eSA9IGdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKGluZm8sIGlkLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHZlcnNpb24gaXMgMCB0aGVuIHdlIGFyZSB1cGdyYWRpbmcgZnJvbSBhIGZpbGUgZm9ybWF0IHRoYXQgZGlkIG5vdAogICAgICAgICAgICAgICAgIC8vIGtub3cgYWJvdXQgcGVyaW9kaWMgc3luY3MuIEluIHRoYXQgY2FzZSBkb24ndCBjbGVhciB0aGUgbGlzdCBzaW5jZSB3ZQogICAgICAgICAgICAgICAgIC8vIHdhbnQgdGhlIGRlZmF1bHQsIHdoaWNoIGlzIGEgZGFpbHkgcGVyaW9kaWMgc3luYy4KQEAgLTE5MjgsNyArMjA2OCw3IEBACiAgICAgLyoqCiAgICAgICogUGFyc2UgYSBwZXJpb2RpYyBzeW5jIGZyb20gYWNjb3VudHMueG1sLiBTZXRzIHRoZSBidW5kbGUgdG8gYmUgZW1wdHkuCiAgICAgICovCi0gICAgcHJpdmF0ZSBQZXJpb2RpY1N5bmMgcGFyc2VQZXJpb2RpY1N5bmMoWG1sUHVsbFBhcnNlciBwYXJzZXIsIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5KSB7CisgICAgcHJpdmF0ZSBQZXJpb2RpY1N5bmMgcGFyc2VQZXJpb2RpY1N5bmMoWG1sUHVsbFBhcnNlciBwYXJzZXIsIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5SW5mbykgewogICAgICAgICBCdW5kbGUgZXh0cmFzID0gbmV3IEJ1bmRsZSgpOyAvLyBHZXRzIGZpbGxlZCBpbiBsYXRlci4KICAgICAgICAgU3RyaW5nIHBlcmlvZFZhbHVlID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJwZXJpb2QiKTsKICAgICAgICAgU3RyaW5nIGZsZXhWYWx1ZSA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiZmxleCIpOwpAQCAtMTk0NiwxNyArMjA4NiwzMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmxleHRpbWUgPSBMb25nLnBhcnNlTG9uZyhmbGV4VmFsdWUpOwogICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLmUoVEFHLCAiRXJyb3IgZm9ybWF0dGluZyB2YWx1ZSBwYXJzZWQgZm9yIHBlcmlvZGljIHN5bmMgZmxleDogIiArIGZsZXhWYWx1ZSk7CiAgICAgICAgICAgICBmbGV4dGltZSA9IGNhbGN1bGF0ZURlZmF1bHRGbGV4VGltZShwZXJpb2QpOworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRXJyb3IgZm9ybWF0dGluZyB2YWx1ZSBwYXJzZWQgZm9yIHBlcmlvZGljIHN5bmMgZmxleDogIiArIGZsZXhWYWx1ZQorICAgICAgICAgICAgICAgICAgICArICIsIHVzaW5nIGRlZmF1bHQ6ICIKKyAgICAgICAgICAgICAgICAgICAgKyBmbGV4dGltZSk7CiAgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGV4cGVjdGVkKSB7CiAgICAgICAgICAgICBmbGV4dGltZSA9IGNhbGN1bGF0ZURlZmF1bHRGbGV4VGltZShwZXJpb2QpOwogICAgICAgICAgICAgTG9nLmQoVEFHLCAiTm8gZmxleCB0aW1lIHNwZWNpZmllZCBmb3IgdGhpcyBzeW5jLCB1c2luZyBhIGRlZmF1bHQuIHBlcmlvZDogIgogICAgICAgICAgICAgKyBwZXJpb2QgKyAiIGZsZXg6ICIgKyBmbGV4dGltZSk7CiAgICAgICAgIH0KLSAgICAgICAgZmluYWwgUGVyaW9kaWNTeW5jIHBlcmlvZGljU3luYyA9Ci0gICAgICAgICAgICAgICAgbmV3IFBlcmlvZGljU3luYyhhdXRob3JpdHkuYWNjb3VudCwgYXV0aG9yaXR5LmF1dGhvcml0eSwgZXh0cmFzLAorICAgICAgICBQZXJpb2RpY1N5bmMgcGVyaW9kaWNTeW5jOworICAgICAgICBpZiAoYXV0aG9yaXR5SW5mby50YXJnZXQudGFyZ2V0X3Byb3ZpZGVyKSB7CisgICAgICAgICAgICBwZXJpb2RpY1N5bmMgPQorICAgICAgICAgICAgICAgIG5ldyBQZXJpb2RpY1N5bmMoYXV0aG9yaXR5SW5mby50YXJnZXQuYWNjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eUluZm8udGFyZ2V0LnByb3ZpZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzLAogICAgICAgICAgICAgICAgICAgICAgICAgcGVyaW9kLCBmbGV4dGltZSk7Ci0gICAgICAgIGF1dGhvcml0eS5wZXJpb2RpY1N5bmNzLmFkZChwZXJpb2RpY1N5bmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGVyaW9kaWNTeW5jID0KKyAgICAgICAgICAgICAgICAgICAgbmV3IFBlcmlvZGljU3luYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlJbmZvLnRhcmdldC5zZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJpb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleHRpbWUpOworICAgICAgICB9CisgICAgICAgIGF1dGhvcml0eUluZm8ucGVyaW9kaWNTeW5jcy5hZGQocGVyaW9kaWNTeW5jKTsKICAgICAgICAgcmV0dXJuIHBlcmlvZGljU3luYzsKICAgICB9CiAKQEAgLTE5OTQsNyArMjE0OCw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHdyaXRlQWNjb3VudEluZm9Mb2NrZWQoKSB7CiAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUdfRklMRSwgTG9nLlZFUkJPU0UpKSB7Ci0gICAgICAgICAgICBMb2cudihUQUcsICJXcml0aW5nIG5ldyAiICsgbUFjY291bnRJbmZvRmlsZS5nZXRCYXNlRmlsZSgpKTsKKyAgICAgICAgICAgIExvZy52KFRBR19GSUxFLCAiV3JpdGluZyBuZXcgIiArIG1BY2NvdW50SW5mb0ZpbGUuZ2V0QmFzZUZpbGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBudWxsOwogCkBAIC0yMDI0LDE3ICsyMTc4LDE4IEBACiAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IG1BdXRob3JpdGllcy5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbUF1dGhvcml0aWVzLnZhbHVlQXQoaSk7CisgICAgICAgICAgICAgICAgRW5kUG9pbnQgaW5mbyA9IGF1dGhvcml0eS50YXJnZXQ7CiAgICAgICAgICAgICAgICAgb3V0LnN0YXJ0VGFnKG51bGwsICJhdXRob3JpdHkiKTsKICAgICAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsICJpZCIsIEludGVnZXIudG9TdHJpbmcoYXV0aG9yaXR5LmlkZW50KSk7Ci0gICAgICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCBYTUxfQVRUUl9VU0VSLCBJbnRlZ2VyLnRvU3RyaW5nKGF1dGhvcml0eS51c2VySWQpKTsKKyAgICAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsIFhNTF9BVFRSX1VTRVIsIEludGVnZXIudG9TdHJpbmcoaW5mby51c2VySWQpKTsKICAgICAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsIFhNTF9BVFRSX0VOQUJMRUQsIEJvb2xlYW4udG9TdHJpbmcoYXV0aG9yaXR5LmVuYWJsZWQpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5LnNlcnZpY2UgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsICJhY2NvdW50IiwgYXV0aG9yaXR5LmFjY291bnQubmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgInR5cGUiLCBhdXRob3JpdHkuYWNjb3VudC50eXBlKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCAiYXV0aG9yaXR5IiwgYXV0aG9yaXR5LmF1dGhvcml0eSk7CisgICAgICAgICAgICAgICAgaWYgKGluZm8uc2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgImFjY291bnQiLCBpbmZvLmFjY291bnQubmFtZSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgInR5cGUiLCBpbmZvLmFjY291bnQudHlwZSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgImF1dGhvcml0eSIsIGluZm8ucHJvdmlkZXIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgInBhY2thZ2UiLCBhdXRob3JpdHkuc2VydmljZS5nZXRQYWNrYWdlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCAiY2xhc3MiLCBhdXRob3JpdHkuc2VydmljZS5nZXRDbGFzc05hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgInBhY2thZ2UiLCBpbmZvLnNlcnZpY2UuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgImNsYXNzIiwgaW5mby5zZXJ2aWNlLmdldENsYXNzTmFtZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eS5zeW5jYWJsZSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCAic3luY2FibGUiLCAidW5rbm93biIpOwpAQCAtMjA5NCw3ICsyMjQ5LDcgQEAKIAogICAgICAgICAgICAgLy8gQ29weSBpbiBhbGwgb2YgdGhlIHN0YXR1cyBpbmZvcm1hdGlvbiwgYXMgd2VsbCBhcyBhY2NvdW50cy4KICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUdfRklMRSwgTG9nLlZFUkJPU0UpKSB7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiUmVhZGluZyBsZWdhY3kgc3luYyBhY2NvdW50cyBkYiIpOworICAgICAgICAgICAgICAgIExvZy52KFRBR19GSUxFLCAiUmVhZGluZyBsZWdhY3kgc3luYyBhY2NvdW50cyBkYiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU1FMaXRlUXVlcnlCdWlsZGVyIHFiID0gbmV3IFNRTGl0ZVF1ZXJ5QnVpbGRlcigpOwogICAgICAgICAgICAgcWIuc2V0VGFibGVzKCJzdGF0cywgc3RhdHVzIik7CkBAIC0yMTI4LDkgKzIyODMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgYWNjb3VudFR5cGUgPSAiY29tLmdvb2dsZSI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFN0cmluZyBhdXRob3JpdHlOYW1lID0gYy5nZXRTdHJpbmcoYy5nZXRDb2x1bW5JbmRleCgiYXV0aG9yaXR5IikpOwotICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gdGhpcy5nZXRPckNyZWF0ZUF1dGhvcml0eUxvY2tlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBY2NvdW50KGFjY291bnROYW1lLCBhY2NvdW50VHlwZSksIDAgLyogbGVnYWN5IGlzIHNpbmdsZS11c2VyICovLAotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZSwgLTEsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBBdXRob3JpdHlJbmZvIGF1dGhvcml0eSA9CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9yQ3JlYXRlQXV0aG9yaXR5TG9ja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRW5kUG9pbnQobmV3IEFjY291bnQoYWNjb3VudE5hbWUsIGFjY291bnRUeXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogbGVnYWN5IGlzIHNpbmdsZS11c2VyICovKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBpID0gbVN5bmNTdGF0dXMuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CkBAIC0yMTgyLDcgKzIzNDEsNyBAQAogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGktLTsKICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcml0eUluZm8gYXV0aG9yaXR5ID0gbUF1dGhvcml0aWVzLnZhbHVlQXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5LmF1dGhvcml0eS5lcXVhbHMocHJvdmlkZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5LnRhcmdldC5wcm92aWRlci5lcXVhbHMocHJvdmlkZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5LmVuYWJsZWQgPSB2YWx1ZSA9PSBudWxsIHx8IEJvb2xlYW4ucGFyc2VCb29sZWFuKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHkuc3luY2FibGUgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjIwNiw3ICsyMzY1LDcgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgcmVhZFN0YXR1c0xvY2tlZCgpIHsKICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBR19GSUxFLCBMb2cuVkVSQk9TRSkpIHsKLSAgICAgICAgICAgIExvZy52KFRBRywgIlJlYWRpbmcgIiArIG1TdGF0dXNGaWxlLmdldEJhc2VGaWxlKCkpOworICAgICAgICAgICAgTG9nLnYoVEFHX0ZJTEUsICJSZWFkaW5nICIgKyBtU3RhdHVzRmlsZS5nZXRCYXNlRmlsZSgpKTsKICAgICAgICAgfQogICAgICAgICB0cnkgewogICAgICAgICAgICAgYnl0ZVtdIGRhdGEgPSBtU3RhdHVzRmlsZS5yZWFkRnVsbHkoKTsKQEAgLTIyMjAsOCArMjM3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChtQXV0aG9yaXRpZXMuaW5kZXhPZktleShzdGF0dXMuYXV0aG9yaXR5SWQpID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5wZW5kaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHX0ZJTEUsIExvZy5WRVJCT1NFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIkFkZGluZyBzdGF0dXMgZm9yIGlkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RhdHVzLmF1dGhvcml0eUlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUdfRklMRSwgIkFkZGluZyBzdGF0dXMgZm9yIGlkICIgKyBzdGF0dXMuYXV0aG9yaXR5SWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgbVN5bmNTdGF0dXMucHV0KHN0YXR1cy5hdXRob3JpdHlJZCwgc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjI0MSw3ICsyMzk5LDcgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgd3JpdGVTdGF0dXNMb2NrZWQoKSB7CiAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUdfRklMRSwgTG9nLlZFUkJPU0UpKSB7Ci0gICAgICAgICAgICBMb2cudihUQUcsICJXcml0aW5nIG5ldyAiICsgbVN0YXR1c0ZpbGUuZ2V0QmFzZUZpbGUoKSk7CisgICAgICAgICAgICBMb2cudihUQUdfRklMRSwgIldyaXRpbmcgbmV3ICIgKyBtU3RhdHVzRmlsZS5nZXRCYXNlRmlsZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBmaWxlIGlzIGJlaW5nIHdyaXR0ZW4sIHNvIHdlIGRvbid0IG5lZWQgdG8gaGF2ZSBhIHNjaGVkdWxlZApAQCAtMjI4NCw2ICsyNDQyLDkgQEAKICAgICAgICAgfQogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmlzID0gbVBlbmRpbmdGaWxlLm9wZW5SZWFkKCk7CisgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHX0ZJTEUsIExvZy5WRVJCT1NFKSkgeworICAgICAgICAgICAgICAgIExvZy52KFRBR19GSUxFLCAiUmVhZGluZyAiICsgbVBlbmRpbmdGaWxlLmdldEJhc2VGaWxlKCkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXI7CiAgICAgICAgICAgICBwYXJzZXIgPSBYbWwubmV3UHVsbFBhcnNlcigpOwogICAgICAgICAgICAgcGFyc2VyLnNldElucHV0KGZpcywgbnVsbCk7CkBAIC0yMjk1LDEyICsyNDU2LDExIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFhtbFB1bGxQYXJzZXIuRU5EX0RPQ1VNRU5UKSByZXR1cm47IC8vIE5vdGhpbmcgdG8gcmVhZC4KIAotICAgICAgICAgICAgU3RyaW5nIHRhZ05hbWUgPSBwYXJzZXIuZ2V0TmFtZSgpOwogICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgIFBlbmRpbmdPcGVyYXRpb24gcG9wID0gbnVsbDsKICAgICAgICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFhtbFB1bGxQYXJzZXIuU1RBUlRfVEFHKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YWdOYW1lID0gcGFyc2VyLmdldE5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0YWdOYW1lID0gcGFyc2VyLmdldE5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZXIuZ2V0RGVwdGgoKSA9PSAxICYmICJvcCIuZXF1YWxzKHRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmVyaWZ5IHZlcnNpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZlcnNpb25TdHJpbmcgPQpAQCAtMjMyNSwxOCArMjQ4NSwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXR5ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wID0gbmV3IFBlbmRpbmdPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5LmFjY291bnQsIGF1dGhvcml0eS51c2VySWQsIHJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jU291cmNlLCBhdXRob3JpdHkuYXV0aG9yaXR5LCBuZXcgQnVuZGxlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWRpdGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHksIHJlYXNvbiwgc3luY1NvdXJjZSwgbmV3IEJ1bmRsZSgpLCBleHBlZGl0ZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3AuZmxhdEV4dHJhcyA9IG51bGw7IC8vIE5vIGxvbmdlciB1c2VkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGVuZGluZ09wZXJhdGlvbnMuYWRkKHBvcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUdfRklMRSwgTG9nLlZFUkJPU0UpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUdfRklMRSwgIkFkZGluZyBwZW5kaW5nIG9wOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcG9wLmF1dGhvcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBvcC50YXJnZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHNyYz0iICsgcG9wLnN5bmNTb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHJlYXNvbj0iICsgcG9wLnJlYXNvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgZXhwZWRpdGVkPSIgKyBwb3AuZXhwZWRpdGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgbm9uLWV4aXN0ZW50IGF1dGhvcml0eS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wID0gbnVsbDsKQEAgLTIzNzEsMTEgKzI1MjksNDAgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0YXRpYyBwcml2YXRlIGJ5dGVbXSBmbGF0dGVuQnVuZGxlKEJ1bmRsZSBidW5kbGUpIHsKKyAgICAgICAgYnl0ZVtdIGZsYXREYXRhID0gbnVsbDsKKyAgICAgICAgUGFyY2VsIHBhcmNlbCA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGJ1bmRsZS53cml0ZVRvUGFyY2VsKHBhcmNlbCwgMCk7CisgICAgICAgICAgICBmbGF0RGF0YSA9IHBhcmNlbC5tYXJzaGFsbCgpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgcGFyY2VsLnJlY3ljbGUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmxhdERhdGE7CisgICAgfQorCisgICAgc3RhdGljIHByaXZhdGUgQnVuZGxlIHVuZmxhdHRlbkJ1bmRsZShieXRlW10gZmxhdERhdGEpIHsKKyAgICAgICAgQnVuZGxlIGJ1bmRsZTsKKyAgICAgICAgUGFyY2VsIHBhcmNlbCA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHBhcmNlbC51bm1hcnNoYWxsKGZsYXREYXRhLCAwLCBmbGF0RGF0YS5sZW5ndGgpOworICAgICAgICAgICAgcGFyY2VsLnNldERhdGFQb3NpdGlvbigwKTsKKyAgICAgICAgICAgIGJ1bmRsZSA9IHBhcmNlbC5yZWFkQnVuZGxlKCk7CisgICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gQSBSdW50aW1lRXhjZXB0aW9uIGlzIHRocm93biBpZiB3ZSB3ZXJlIHVuYWJsZSB0byBwYXJzZSB0aGUgcGFyY2VsLgorICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIGVtcHR5IHBhcmNlbCBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICBidW5kbGUgPSBuZXcgQnVuZGxlKCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBwYXJjZWwucmVjeWNsZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidW5kbGU7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9BVFRSX1ZFUlNJT04gPSAidmVyc2lvbiI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9BVFRSX0FVVEhPUklUWUlEID0gImF1dGhvcml0eV9pZCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9BVFRSX1NPVVJDRSA9ICJzb3VyY2UiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfQVRUUl9FWFBFRElURUQgPSAiZXhwZWRpdGVkIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX0FUVFJfUkVBU09OID0gInJlYXNvbiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9BVFRSX1ZFUlNJT04gPSAidmVyc2lvbiI7CiAKICAgICAvKioKICAgICAgKiBXcml0ZSBhbGwgY3VycmVudGx5IHBlbmRpbmcgb3BzIHRvIHRoZSBwZW5kaW5nIG9wcyBmaWxlLgpAQCAtMjM4NSwxNCArMjU3MiwxNCBAQAogICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoTiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBR19GSUxFLCBMb2cuVkVSQk9TRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHX0ZJTEUsICJUcnVuY2F0aW5nICIgKyBtUGVuZGluZ0ZpbGUuZ2V0QmFzZUZpbGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKExvZy5pc0xvZ2dhYmxlKFRBR19GSUxFLCBMb2cuVkVSQk9TRSkpeworICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJUcnVuY2F0aW5nICIgKyBtUGVuZGluZ0ZpbGUuZ2V0QmFzZUZpbGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1QZW5kaW5nRmlsZS50cnVuY2F0ZSgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUdfRklMRSwgTG9nLlZFUkJPU0UpKSB7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHX0ZJTEUsICJXcml0aW5nIG5ldyAiICsgbVBlbmRpbmdGaWxlLmdldEJhc2VGaWxlKCkpOworICAgICAgICAgICAgICAgIExvZy52KFRBRywgIldyaXRpbmcgbmV3ICIgKyBtUGVuZGluZ0ZpbGUuZ2V0QmFzZUZpbGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3MgPSBtUGVuZGluZ0ZpbGUuc3RhcnRXcml0ZSgpOwogICAgICAgICAgICAgWG1sU2VyaWFsaXplciBvdXQgPSBuZXcgRmFzdFhtbFNlcmlhbGl6ZXIoKTsKQEAgLTI0MDEsOSArMjU4OCw5IEBACiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgICAgIFBlbmRpbmdPcGVyYXRpb24gcG9wID0gbVBlbmRpbmdPcGVyYXRpb25zLmdldChpKTsKICAgICAgICAgICAgICAgICB3cml0ZVBlbmRpbmdPcGVyYXRpb25Mb2NrZWQocG9wLCBvdXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0LmVuZERvY3VtZW50KCk7Ci0gICAgICAgICAgICBtUGVuZGluZ0ZpbGUuZmluaXNoV3JpdGUoZm9zKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgb3V0LmVuZERvY3VtZW50KCk7CisgICAgICAgICAgICAgbVBlbmRpbmdGaWxlLmZpbmlzaFdyaXRlKGZvcyk7CiAgICAgICAgIH0gY2F0Y2ggKGphdmEuaW8uSU9FeGNlcHRpb24gZTEpIHsKICAgICAgICAgICAgIExvZy53KFRBRywgIkVycm9yIHdyaXRpbmcgcGVuZGluZyBvcGVyYXRpb25zIiwgZTEpOwogICAgICAgICAgICAgaWYgKGZvcyAhPSBudWxsKSB7CkBAIC0yNDYzLDM1ICsyNjUwLDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyBwcml2YXRlIGJ5dGVbXSBmbGF0dGVuQnVuZGxlKEJ1bmRsZSBidW5kbGUpIHsKLSAgICAgICAgYnl0ZVtdIGZsYXREYXRhID0gbnVsbDsKLSAgICAgICAgUGFyY2VsIHBhcmNlbCA9IFBhcmNlbC5vYnRhaW4oKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGJ1bmRsZS53cml0ZVRvUGFyY2VsKHBhcmNlbCwgMCk7Ci0gICAgICAgICAgICBmbGF0RGF0YSA9IHBhcmNlbC5tYXJzaGFsbCgpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgcGFyY2VsLnJlY3ljbGUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmxhdERhdGE7Ci0gICAgfQotCi0gICAgc3RhdGljIHByaXZhdGUgQnVuZGxlIHVuZmxhdHRlbkJ1bmRsZShieXRlW10gZmxhdERhdGEpIHsKLSAgICAgICAgQnVuZGxlIGJ1bmRsZTsKLSAgICAgICAgUGFyY2VsIHBhcmNlbCA9IFBhcmNlbC5vYnRhaW4oKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHBhcmNlbC51bm1hcnNoYWxsKGZsYXREYXRhLCAwLCBmbGF0RGF0YS5sZW5ndGgpOwotICAgICAgICAgICAgcGFyY2VsLnNldERhdGFQb3NpdGlvbigwKTsKLSAgICAgICAgICAgIGJ1bmRsZSA9IHBhcmNlbC5yZWFkQnVuZGxlKCk7Ci0gICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gQSBSdW50aW1lRXhjZXB0aW9uIGlzIHRocm93biBpZiB3ZSB3ZXJlIHVuYWJsZSB0byBwYXJzZSB0aGUgcGFyY2VsLgotICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIGVtcHR5IHBhcmNlbCBpbiB0aGlzIGNhc2UuCi0gICAgICAgICAgICBidW5kbGUgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBwYXJjZWwucmVjeWNsZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBidW5kbGU7Ci0gICAgfQotCiAgICAgcHJpdmF0ZSB2b2lkIGV4dHJhc1RvWG1sKFhtbFNlcmlhbGl6ZXIgb3V0LCBCdW5kbGUgZXh0cmFzKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7CiAgICAgICAgIGZvciAoU3RyaW5nIGtleSA6IGV4dHJhcy5rZXlTZXQoKSkgewogICAgICAgICAgICAgb3V0LnN0YXJ0VGFnKG51bGwsICJleHRyYSIpOwpAQCAtMjUyNCw2ICsyNjgyLDI0IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgcmVxdWVzdFN5bmMoQXV0aG9yaXR5SW5mbyBhdXRob3JpdHlJbmZvLCBpbnQgcmVhc29uLCBCdW5kbGUgZXh0cmFzKSB7CisgICAgICAgIGlmIChhbmRyb2lkLm9zLlByb2Nlc3MubXlVaWQoKSA9PSBhbmRyb2lkLm9zLlByb2Nlc3MuU1lTVEVNX1VJRAorICAgICAgICAgICAgICAgICYmIG1TeW5jUmVxdWVzdExpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1TeW5jUmVxdWVzdExpc3RlbmVyLm9uU3luY1JlcXVlc3QoYXV0aG9yaXR5SW5mby50YXJnZXQsIHJlYXNvbiwgZXh0cmFzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5bmNSZXF1ZXN0LkJ1aWxkZXIgcmVxID0KKyAgICAgICAgICAgICAgICAgICAgbmV3IFN5bmNSZXF1ZXN0LkJ1aWxkZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zeW5jT25jZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEV4dHJhcyhleHRyYXMpOworICAgICAgICAgICAgaWYgKGF1dGhvcml0eUluZm8udGFyZ2V0LnRhcmdldF9wcm92aWRlcikgeworICAgICAgICAgICAgICAgIHJlcS5zZXRTeW5jQWRhcHRlcihhdXRob3JpdHlJbmZvLnRhcmdldC5hY2NvdW50LCBhdXRob3JpdHlJbmZvLnRhcmdldC5wcm92aWRlcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlcS5zZXRTeW5jQWRhcHRlcihhdXRob3JpdHlJbmZvLnRhcmdldC5zZXJ2aWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENvbnRlbnRSZXNvbHZlci5yZXF1ZXN0U3luYyhyZXEuYnVpbGQoKSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBwcml2YXRlIHZvaWQgcmVxdWVzdFN5bmMoQWNjb3VudCBhY2NvdW50LCBpbnQgdXNlcklkLCBpbnQgcmVhc29uLCBTdHJpbmcgYXV0aG9yaXR5LAogICAgICAgICAgICAgQnVuZGxlIGV4dHJhcykgewogICAgICAgICAvLyBJZiB0aGlzIGlzIGhhcHBlbmluZyBpbiB0aGUgc3lzdGVtIHByb2Nlc3MsIHRoZW4gY2FsbCB0aGUgc3luY3JlcXVlc3QgbGlzdGVuZXIKQEAgLTI1MzIsNyArMjcwOCwxMCBAQAogICAgICAgICAvLyB3aGljaCB3aWxsIGtub3cgd2hpY2ggdXNlcklkIHRvIGFwcGx5IGJhc2VkIG9uIHRoZSBCaW5kZXIgaWQuCiAgICAgICAgIGlmIChhbmRyb2lkLm9zLlByb2Nlc3MubXlVaWQoKSA9PSBhbmRyb2lkLm9zLlByb2Nlc3MuU1lTVEVNX1VJRAogICAgICAgICAgICAgICAgICYmIG1TeW5jUmVxdWVzdExpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1TeW5jUmVxdWVzdExpc3RlbmVyLm9uU3luY1JlcXVlc3QoYWNjb3VudCwgdXNlcklkLCByZWFzb24sIGF1dGhvcml0eSwgZXh0cmFzKTsKKyAgICAgICAgICAgIG1TeW5jUmVxdWVzdExpc3RlbmVyLm9uU3luY1JlcXVlc3QoCisgICAgICAgICAgICAgICAgbmV3IEVuZFBvaW50KGFjY291bnQsIGF1dGhvcml0eSwgdXNlcklkKSwKKyAgICAgICAgICAgICAgICByZWFzb24sCisgICAgICAgICAgICAgICAgZXh0cmFzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENvbnRlbnRSZXNvbHZlci5yZXF1ZXN0U3luYyhhY2NvdW50LCBhdXRob3JpdHksIGV4dHJhcyk7CiAgICAgICAgIH0KQEAgLTI2MjgsMTAgKzI4MDcsOCBAQAogICAgIHB1YmxpYyB2b2lkIGR1bXBQZW5kaW5nT3BlcmF0aW9ucyhTdHJpbmdCdWlsZGVyIHNiKSB7CiAgICAgICAgIHNiLmFwcGVuZCgiUGVuZGluZyBPcHM6ICIpLmFwcGVuZChtUGVuZGluZ09wZXJhdGlvbnMuc2l6ZSgpKS5hcHBlbmQoIiBvcGVyYXRpb24ocylcbiIpOwogICAgICAgICBmb3IgKFBlbmRpbmdPcGVyYXRpb24gcG9wIDogbVBlbmRpbmdPcGVyYXRpb25zKSB7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoIigiICsgcG9wLmFjY291bnQpCi0gICAgICAgICAgICAgICAgLmFwcGVuZCgiLCB1IiArIHBvcC51c2VySWQpCi0gICAgICAgICAgICAgICAgLmFwcGVuZCgiLCAiICsgcG9wLmF1dGhvcml0eSkKLSAgICAgICAgICAgICAgICAuYXBwZW5kKCIsICIgKyBwb3AuZXh0cmFzKQorICAgICAgICAgICAgc2IuYXBwZW5kKCIoaW5mbzogIiArIHBvcC50YXJnZXQudG9TdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCIsIGV4dHJhczogIiArIHBvcC5leHRyYXMpCiAgICAgICAgICAgICAgICAgLmFwcGVuZCgiKVxuIik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRGV2aWNlUG9saWN5TWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IDUzYjhkYzQuLjM2Y2UzYTQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0zNCw3ICszNCw2IEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyTmF0aXZlOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFsYXJtTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5BcHBHbG9iYWxzOwotaW1wb3J0IGFuZHJvaWQuYXBwLklOb3RpZmljYXRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CkBAIC01MiwxNSArNTEsMTEgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSVBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlNpZ25hdHVyZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uVXNlckluZm87CiBpbXBvcnQgYW5kcm9pZC5uZXQuUHJveHlQcm9wZXJ0aWVzOwotaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLWltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CkBAIC04OCw3ICs4Myw2IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogaW1wb3J0IGFuZHJvaWQudXRpbC5YbWw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyUG9saWN5OwogCiBpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkZpbGU7CkBAIC05OCwxNCArOTIsMTEgQEAKIGltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuc2VjdXJpdHkuS2V5U3RvcmUuVHJ1c3RlZENlcnRpZmljYXRlRW50cnk7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZUZhY3Rvcnk7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZTsKIGltcG9ydCBqYXZhLnRleHQuRGF0ZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5EYXRlOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZGlzcGxheS9Mb2NhbERpc3BsYXlBZGFwdGVyLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kaXNwbGF5L0xvY2FsRGlzcGxheUFkYXB0ZXIuamF2YQppbmRleCBjYjhmM2UyLi4wMmJlNDc3IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kaXNwbGF5L0xvY2FsRGlzcGxheUFkYXB0ZXIuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kaXNwbGF5L0xvY2FsRGlzcGxheUFkYXB0ZXIuamF2YQpAQCAtMjYsNyArMjYsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5RXZlbnRSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUNvbnRyb2w7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VDb250cm9sLlBoeXNpY2FsRGlzcGxheUluZm87CiAKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogCkBAIC0xNjYsNiArMTY1LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIGlmICgicG9ydHJhaXQiLmVxdWFscyhTeXN0ZW1Qcm9wZXJ0aWVzLmdldCgicGVyc2lzdC5kZW1vLmhkbWlyb3RhdGlvbiIpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbUluZm8ucm90YXRpb24gPSBTdXJmYWNlLlJPVEFUSU9OXzI3MDsKICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzLCBhbGxvdyByb3RhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgZGlzcGxheQorICAgICAgICAgICAgICAgICAgICAvLyB0byBmb2xsb3cgdGhlIGJ1aWx0LWluIGRpc3BsYXkuCisgICAgICAgICAgICAgICAgICAgIGlmIChTeXN0ZW1Qcm9wZXJ0aWVzLmdldEJvb2xlYW4oInBlcnNpc3QuZGVtby5oZG1pcm90YXRlcyIsIGZhbHNlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUluZm8uZmxhZ3MgfD0gRGlzcGxheURldmljZUluZm8uRkxBR19ST1RBVEVTX1dJVEhfQ09OVEVOVDsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBtSW5mbzsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Rpc3BsYXkvTG9naWNhbERpc3BsYXkuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Rpc3BsYXkvTG9naWNhbERpc3BsYXkuamF2YQppbmRleCA3ZTM1N2MwLi5jMjZjNDM4IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kaXNwbGF5L0xvZ2ljYWxEaXNwbGF5LmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZGlzcGxheS9Mb2dpY2FsRGlzcGxheS5qYXZhCkBAIC0yNTgsOCArMjU4LDcgQEAKICAgICAgICAgLy8gVGhlIG9yaWVudGF0aW9uIHNwZWNpZmllcyBob3cgdGhlIHBoeXNpY2FsIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBkaXNwbGF5CiAgICAgICAgIC8vIGlzIHJvdGF0ZWQgd2hlbiB0aGUgY29udGVudHMgb2YgdGhlIGxvZ2ljYWwgZGlzcGxheSBhcmUgcmVuZGVyZWQuCiAgICAgICAgIGludCBvcmllbnRhdGlvbiA9IFN1cmZhY2UuUk9UQVRJT05fMDsKLSAgICAgICAgaWYgKGRldmljZSA9PSBtUHJpbWFyeURpc3BsYXlEZXZpY2UKLSAgICAgICAgICAgICAgICAmJiAoZGlzcGxheURldmljZUluZm8uZmxhZ3MgJiBEaXNwbGF5RGV2aWNlSW5mby5GTEFHX1JPVEFURVNfV0lUSF9DT05URU5UKSAhPSAwKSB7CisgICAgICAgIGlmICgoZGlzcGxheURldmljZUluZm8uZmxhZ3MgJiBEaXNwbGF5RGV2aWNlSW5mby5GTEFHX1JPVEFURVNfV0lUSF9DT05URU5UKSAhPSAwKSB7CiAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IGRpc3BsYXlJbmZvLnJvdGF0aW9uOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2ZpcmV3YWxsL0ludGVudEZpcmV3YWxsLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9maXJld2FsbC9JbnRlbnRGaXJld2FsbC5qYXZhCmluZGV4IGFhYTBiNTguLjZkZjFkYmQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2ZpcmV3YWxsL0ludGVudEZpcmV3YWxsLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZmlyZXdhbGwvSW50ZW50RmlyZXdhbGwuamF2YQpAQCAtMjY4LDExICsyNjgsMTMgQEAKICAgICAgICAgfQogCiAgICAgICAgIEZpbGVbXSBmaWxlcyA9IHJ1bGVzRGlyLmxpc3RGaWxlcygpOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8ZmlsZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIEZpbGUgZmlsZSA9IGZpbGVzW2ldOworICAgICAgICBpZiAoZmlsZXMgIT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGZpbGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgRmlsZSBmaWxlID0gZmlsZXNbaV07CiAKLSAgICAgICAgICAgIGlmIChmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiLnhtbCIpKSB7Ci0gICAgICAgICAgICAgICAgcmVhZFJ1bGVzKGZpbGUsIHJlc29sdmVycyk7CisgICAgICAgICAgICAgICAgaWYgKGZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIueG1sIikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVhZFJ1bGVzKGZpbGUsIHJlc29sdmVycyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0NvbXByZWhlbnNpdmVDb3VudHJ5RGV0ZWN0b3IuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0NvbXByZWhlbnNpdmVDb3VudHJ5RGV0ZWN0b3IuamF2YQppbmRleCAzNTQ4NThiLi42MTE3YTliIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9Db21wcmVoZW5zaXZlQ291bnRyeURldGVjdG9yLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vQ29tcHJlaGVuc2l2ZUNvdW50cnlEZXRlY3Rvci5qYXZhCkBAIC0yNiw3ICsyNiw2IEBACiBpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuU2VydmljZVN0YXRlOwogaW1wb3J0IGFuZHJvaWQudGVsZXBob255LlRlbGVwaG9ueU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogCiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dlb2NvZGVyUHJveHkuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dlb2NvZGVyUHJveHkuamF2YQppbmRleCA1ZDRhNzcwLi40MjJiOTRiIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9HZW9jb2RlclByb3h5LmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vR2VvY29kZXJQcm94eS5qYXZhCkBAIC0yMiw3ICsyMiw2IEBACiBpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5JR2VvY29kZVByb3ZpZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5TZXJ2aWNlV2F0Y2hlcjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dlb2ZlbmNlUHJveHkuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dlb2ZlbmNlUHJveHkuamF2YQppbmRleCBiYmMxZjQ3Li5iODg2ZWVmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9HZW9mZW5jZVByb3h5LmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vR2VvZmVuY2VQcm94eS5qYXZhCkBAIC0zMiw4ICszMiw2IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuU2VydmljZVdhdGNoZXI7CiAKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQogLyoqCiAgKiBAaGlkZQogICovCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9HcHNYdHJhRG93bmxvYWRlci5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vR3BzWHRyYURvd25sb2FkZXIuamF2YQppbmRleCBlNDIwMDczLi45ZGVkYjM1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9HcHNYdHJhRG93bmxvYWRlci5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dwc1h0cmFEb3dubG9hZGVyLmphdmEKQEAgLTI1LDcgKzI1LDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cEhvc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBSZXNwb25zZTsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuU3RhdHVzTGluZTsKLWltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lkh0dHBDbGllbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkh0dHBHZXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkh0dHBVcmlSZXF1ZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jb25uLnBhcmFtcy5Db25uUm91dGVQYXJhbXM7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9Mb2NhdGlvbkZ1ZGdlci5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vTG9jYXRpb25GdWRnZXIuamF2YQppbmRleCAyYTY4NzQzLi5hZTcxZmUzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9Mb2NhdGlvbkZ1ZGdlci5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0xvY2F0aW9uRnVkZ2VyLmphdmEKQEAgLTIyLDEwICsyMiw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5Db250ZW50T2JzZXJ2ZXI7CiBpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLkxvY2F0aW9uTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vTG9jYXRpb25Qcm92aWRlclByb3h5LmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9Mb2NhdGlvblByb3ZpZGVyUHJveHkuamF2YQppbmRleCAxNGRiODYyLi41ZWIwNmVkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9Mb2NhdGlvblByb3ZpZGVyUHJveHkuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9Mb2NhdGlvblByb3ZpZGVyUHJveHkuamF2YQpAQCAtMTgsNyArMTgsNiBAQAogCiBpbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5Mb2NhdGlvblByb3ZpZGVyOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vTW9ja1Byb3ZpZGVyLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9Nb2NrUHJvdmlkZXIuamF2YQppbmRleCAzNmM0M2ZmLi44NTc4NzYxIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9Nb2NrUHJvdmlkZXIuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9sb2NhdGlvbi9Nb2NrUHJvdmlkZXIuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5sb2NhdGlvbjsKIAotaW1wb3J0IGFuZHJvaWQubG9jYXRpb24uQ3JpdGVyaWE7CiBpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5JTG9jYXRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubG9jYXRpb24uTG9jYXRpb247CiBpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5Mb2NhdGlvblByb3ZpZGVyOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtTdGF0c1NlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25ldC9OZXR3b3JrU3RhdHNTZXJ2aWNlLmphdmEKaW5kZXggNWQ2YWRjMi4uMjcxZTllOSAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtTdGF0c1NlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9uZXQvTmV0d29ya1N0YXRzU2VydmljZS5qYXZhCkBAIC00NjQsMjEgKzQ2NCwyMSBAQAogICAgICAgICAgICAgcHJpdmF0ZSBOZXR3b3JrU3RhdHNDb2xsZWN0aW9uIG1VaWRUYWdDb21wbGV0ZTsKIAogICAgICAgICAgICAgcHJpdmF0ZSBOZXR3b3JrU3RhdHNDb2xsZWN0aW9uIGdldFVpZENvbXBsZXRlKCkgewotICAgICAgICAgICAgICAgIGlmIChtVWlkQ29tcGxldGUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0c0xvY2spIHsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1TdGF0c0xvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1VaWRDb21wbGV0ZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtVWlkQ29tcGxldGUgPSBtVWlkUmVjb3JkZXIuZ2V0T3JMb2FkQ29tcGxldGVMb2NrZWQoKTsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVVpZENvbXBsZXRlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbVVpZENvbXBsZXRlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwcml2YXRlIE5ldHdvcmtTdGF0c0NvbGxlY3Rpb24gZ2V0VWlkVGFnQ29tcGxldGUoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1VaWRUYWdDb21wbGV0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRzTG9jaykgeworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVN0YXRzTG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAobVVpZFRhZ0NvbXBsZXRlID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1VaWRUYWdDb21wbGV0ZSA9IG1VaWRUYWdSZWNvcmRlci5nZXRPckxvYWRDb21wbGV0ZUxvY2tlZCgpOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtVWlkVGFnQ29tcGxldGU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBtVWlkVGFnQ29tcGxldGU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vS2V5U2V0TWFuYWdlci5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vS2V5U2V0TWFuYWdlci5qYXZhCmluZGV4IDY2ZGMxZDEuLjEwNTZjZDAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL0tleVNldE1hbmFnZXIuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9LZXlTZXRNYW5hZ2VyLmphdmEKQEAgLTIwLDEzICsyMCwxMSBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlUGFyc2VyOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5CYXNlNjQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9uZ1NwYXJzZUFycmF5OwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuUHVibGljS2V5OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgamF2YS51dGlsLlNldDsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VLZXlTZXREYXRhLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlS2V5U2V0RGF0YS5qYXZhCmluZGV4IGNiNjA2MjEuLmViZGVkMjggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VLZXlTZXREYXRhLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZUtleVNldERhdGEuamF2YQpAQCAtMTgsOSArMTgsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIHB1YmxpYyBjbGFzcyBQYWNrYWdlS2V5U2V0RGF0YSB7CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VTZXR0aW5nQmFzZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZVNldHRpbmdCYXNlLmphdmEKaW5kZXggNzc0N2M4Zi4uMmE1Njk4YjkgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VTZXR0aW5nQmFzZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VTZXR0aW5nQmFzZS5qYXZhCkBAIC0yMCwxNCArMjAsMTEgQEAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLkNPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RJU0FCTEVEOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfRU5BQkxFRDsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VVc2VyU3RhdGU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlVzZXJJbmZvOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCiAgKiBTZXR0aW5ncyBiYXNlIGNsYXNzIGZvciBwZW5kaW5nIGFuZCByZXNvbHZlZCBjbGFzc2VzLgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vU0VMaW51eE1NQUMuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1NFTGludXhNTUFDLmphdmEKaW5kZXggMWQ2OGFmYS4uNmUxMmU0MSAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vU0VMaW51eE1NQUMuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9TRUxpbnV4TU1BQy5qYXZhCkBAIC0yNiw3ICsyNiw2IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5YbWxVdGlsczsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1NldHRpbmdzLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9TZXR0aW5ncy5qYXZhCmluZGV4IGU1OTk0MDkuLmFlNzIyODAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1NldHRpbmdzLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vU2V0dGluZ3MuamF2YQpAQCAtNDUsNyArNDUsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQ29tcG9uZW50SW5mbzsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uS2V5U2V0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlQ2xlYW5JdGVtOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZVBhcnNlcjsKQEAgLTYwLDcgKzU5LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvbmdTcGFyc2VBcnJheTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKQEAgLTcxLDcgKzY5LDYgQEAKIGltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuc2VjdXJpdHkuUHVibGljS2V5OwogaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1ByaW50TWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1ByaW50TWFuYWdlclNlcnZpY2UuamF2YQppbmRleCA5OGFjYzI3Li5hNDc1NjM5IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9QcmludE1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcHJpbnQvUHJpbnRNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0zOTksNyArMzk5LDcgQEAKICAgICBwcml2YXRlIHZvaWQgcmVnaXN0ZXJCb3JhZGNhc3RSZWNlaXZlcnMoKSB7CiAgICAgICAgIFBhY2thZ2VNb25pdG9yIG1vbml0b3IgPSBuZXcgUGFja2FnZU1vbml0b3IoKSB7CiAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uUGFja2FnZUNoYW5nZWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdWlkLCBTdHJpbmdbXSBjb21wb25lbnRzKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblBhY2thZ2VNb2RpZmllZChTdHJpbmcgcGFja2FnZU5hbWUpIHsKICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIFVzZXJTdGF0ZSB1c2VyU3RhdGUgPSBnZXRPckNyZWF0ZVVzZXJTdGF0ZUxvY2tlZChnZXRDaGFuZ2luZ1VzZXJJZCgpKTsKICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3I8Q29tcG9uZW50TmFtZT4gaXRlcmF0b3IgPSB1c2VyU3RhdGUuZ2V0RW5hYmxlZFNlcnZpY2VzKCkuaXRlcmF0b3IoKTsKQEAgLTQwNywxMSArNDA3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvbmVudE5hbWUgY29tcG9uZW50TmFtZSA9IGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNrYWdlTmFtZS5lcXVhbHMoY29tcG9uZW50TmFtZS5nZXRQYWNrYWdlTmFtZSgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJTdGF0ZS51cGRhdGVJZk5lZWRlZExvY2tlZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9Vc2VyU3RhdGUuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1VzZXJTdGF0ZS5qYXZhCmluZGV4IGYyM2E5OTIuLjQzNzU3ZjkgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1VzZXJTdGF0ZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1VzZXJTdGF0ZS5qYXZhCkBAIC02NTcsNyArNjU3LDMzIEBACiAgICAgICAgICAgICB0ZW1wUHJpbnRTZXJ2aWNlcy5hZGQoUHJpbnRTZXJ2aWNlSW5mby5jcmVhdGUoaW5zdGFsbGVkU2VydmljZSwgbUNvbnRleHQpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghdGVtcFByaW50U2VydmljZXMuZXF1YWxzKG1JbnN0YWxsZWRTZXJ2aWNlcykpIHsKKyAgICAgICAgYm9vbGVhbiBzb21lU2VydmljZUNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICBpZiAodGVtcFByaW50U2VydmljZXMuc2l6ZSgpICE9IG1JbnN0YWxsZWRTZXJ2aWNlcy5zaXplKCkpIHsKKyAgICAgICAgICAgIHNvbWVTZXJ2aWNlQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKFByaW50U2VydmljZUluZm8gbmV3U2VydmljZTogdGVtcFByaW50U2VydmljZXMpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgb2xkU2VydmljZUluZGV4ID0gbUluc3RhbGxlZFNlcnZpY2VzLmluZGV4T2YobmV3U2VydmljZSk7CisgICAgICAgICAgICAgICAgaWYgKG9sZFNlcnZpY2VJbmRleCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc29tZVNlcnZpY2VDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFByaW50U2VydmljZUluZm8jZXF1YWxzIGNvbXBhcmVzIG9ubHkgdGhlIGlkIG5vdCBhbGwgbWVtYmVycywKKyAgICAgICAgICAgICAgICAvLyBzbyB3ZSBhcmUgYWxzbyBjb21wYXJpbmcgdGhlIG1lbWJlcnMgY29taW5nIGZyb20gbWV0YS1kYXRhLgorICAgICAgICAgICAgICAgIFByaW50U2VydmljZUluZm8gb2xkU2VydmljZSA9IG1JbnN0YWxsZWRTZXJ2aWNlcy5nZXQob2xkU2VydmljZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIVRleHRVdGlscy5lcXVhbHMob2xkU2VydmljZS5nZXRBZGRQcmludGVyc0FjdGl2aXR5TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlcnZpY2UuZ2V0QWRkUHJpbnRlcnNBY3Rpdml0eU5hbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFUZXh0VXRpbHMuZXF1YWxzKG9sZFNlcnZpY2UuZ2V0QWR2YW5jZWRPcHRpb25zQWN0aXZpdHlOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlcnZpY2UuZ2V0QWR2YW5jZWRPcHRpb25zQWN0aXZpdHlOYW1lKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhVGV4dFV0aWxzLmVxdWFscyhvbGRTZXJ2aWNlLmdldFNldHRpbmdzQWN0aXZpdHlOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlcnZpY2UuZ2V0U2V0dGluZ3NBY3Rpdml0eU5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc29tZVNlcnZpY2VDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHNvbWVTZXJ2aWNlQ2hhbmdlZCkgewogICAgICAgICAgICAgbUluc3RhbGxlZFNlcnZpY2VzLmNsZWFyKCk7CiAgICAgICAgICAgICBtSW5zdGFsbGVkU2VydmljZXMuYWRkQWxsKHRlbXBQcmludFNlcnZpY2VzKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvc2VhcmNoL1NlYXJjaE1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9zZWFyY2gvU2VhcmNoTWFuYWdlclNlcnZpY2UuamF2YQppbmRleCBiNWQ4MWQxLi40ODY0NzdhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9zZWFyY2gvU2VhcmNoTWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9zZWFyY2gvU2VhcmNoTWFuYWdlclNlcnZpY2UuamF2YQpAQCAtMTcsNyArMTcsNiBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIuc2VhcmNoOwogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlck5hdGl2ZTsKIGltcG9ydCBhbmRyb2lkLmFwcC5BcHBHbG9iYWxzOwogaW1wb3J0IGFuZHJvaWQuYXBwLklTZWFyY2hNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLlNlYXJjaE1hbmFnZXI7CkBAIC0zOSw3ICszOCw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VyTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuY29udGVudC5QYWNrYWdlTW9uaXRvcjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VwZGF0ZXMvQ29uZmlnVXBkYXRlSW5zdGFsbFJlY2VpdmVyLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci91cGRhdGVzL0NvbmZpZ1VwZGF0ZUluc3RhbGxSZWNlaXZlci5qYXZhCmluZGV4IDk2MDFlOWEuLjFhNjhmYjMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VwZGF0ZXMvQ29uZmlnVXBkYXRlSW5zdGFsbFJlY2VpdmVyLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXBkYXRlcy9Db25maWdVcGRhdGVJbnN0YWxsUmVjZWl2ZXIuamF2YQpAQCAtMjEsNyArMjEsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKLWltcG9ydCBhbmRyb2lkLm9zLkZpbGVVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQmFzZTY0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5FdmVudExvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKQEAgLTMwLDE4ICsyOSwxNSBAQAogCiBpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGU7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZUZhY3Rvcnk7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZTsKIGltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247CiBpbXBvcnQgamF2YS5zZWN1cml0eS5TaWduYXR1cmU7Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5TaWduYXR1cmVFeGNlcHRpb247CiAKIGltcG9ydCBsaWJjb3JlLmlvLklvVXRpbHM7CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VwZGF0ZXMvU0VMaW51eFBvbGljeUluc3RhbGxSZWNlaXZlci5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXBkYXRlcy9TRUxpbnV4UG9saWN5SW5zdGFsbFJlY2VpdmVyLmphdmEKaW5kZXggZTQzMDgxNC4uZmRjNjA0ZiAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXBkYXRlcy9TRUxpbnV4UG9saWN5SW5zdGFsbFJlY2VpdmVyLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXBkYXRlcy9TRUxpbnV4UG9saWN5SW5zdGFsbFJlY2VpdmVyLmphdmEKQEAgLTE4LDggKzE4LDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5GaWxlVXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TRUxpbnV4OwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5CYXNlNjQ7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci91cGRhdGVzL1RaSW5mb0luc3RhbGxSZWNlaXZlci5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXBkYXRlcy9UWkluZm9JbnN0YWxsUmVjZWl2ZXIuamF2YQppbmRleCA4M2FkYmRiLi4yZmU2OGY4IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci91cGRhdGVzL1RaSW5mb0luc3RhbGxSZWNlaXZlci5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VwZGF0ZXMvVFpJbmZvSW5zdGFsbFJlY2VpdmVyLmphdmEKQEAgLTE3LDcgKzE3LDYgQEAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLnVwZGF0ZXM7CiAKIGltcG9ydCBhbmRyb2lkLnV0aWwuQmFzZTY0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9OZXR3b3JrVXBkYXRlUmVzdWx0LmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL05ldHdvcmtVcGRhdGVSZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2NjMzNmCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9OZXR3b3JrVXBkYXRlUmVzdWx0LmphdmEKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLndpZmk7CisKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpQ29uZmlndXJhdGlvbi5JTlZBTElEX05FVFdPUktfSUQ7CisKK2NsYXNzIE5ldHdvcmtVcGRhdGVSZXN1bHQgeworICAgIGludCBuZXRJZDsKKyAgICBib29sZWFuIGlwQ2hhbmdlZDsKKyAgICBib29sZWFuIHByb3h5Q2hhbmdlZDsKKyAgICBib29sZWFuIGlzTmV3TmV0d29yayA9IGZhbHNlOworCisgICAgcHVibGljIE5ldHdvcmtVcGRhdGVSZXN1bHQoaW50IGlkKSB7CisgICAgICAgIG5ldElkID0gaWQ7CisgICAgICAgIGlwQ2hhbmdlZCA9IGZhbHNlOworICAgICAgICBwcm94eUNoYW5nZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgTmV0d29ya1VwZGF0ZVJlc3VsdChib29sZWFuIGlwLCBib29sZWFuIHByb3h5KSB7CisgICAgICAgIG5ldElkID0gSU5WQUxJRF9ORVRXT1JLX0lEOworICAgICAgICBpcENoYW5nZWQgPSBpcDsKKyAgICAgICAgcHJveHlDaGFuZ2VkID0gcHJveHk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya0lkKGludCBpZCkgeworICAgICAgICBuZXRJZCA9IGlkOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0TmV0d29ya0lkKCkgeworICAgICAgICByZXR1cm4gbmV0SWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SXBDaGFuZ2VkKGJvb2xlYW4gaXApIHsKKyAgICAgICAgaXBDaGFuZ2VkID0gaXA7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaGFzSXBDaGFuZ2VkKCkgeworICAgICAgICByZXR1cm4gaXBDaGFuZ2VkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFByb3h5Q2hhbmdlZChib29sZWFuIHByb3h5KSB7CisgICAgICAgIHByb3h5Q2hhbmdlZCA9IHByb3h5OworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGhhc1Byb3h5Q2hhbmdlZCgpIHsKKyAgICAgICAgcmV0dXJuIHByb3h5Q2hhbmdlZDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc05ld05ldHdvcmsoKSB7CisgICAgICAgIHJldHVybiBpc05ld05ldHdvcms7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SXNOZXdOZXR3b3JrKGJvb2xlYW4gaXNOZXcpIHsKKyAgICAgICAgaXNOZXdOZXR3b3JrID0gaXNOZXc7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9TdGF0ZUNoYW5nZVJlc3VsdC5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9TdGF0ZUNoYW5nZVJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMmYyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1N0YXRlQ2hhbmdlUmVzdWx0LmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLndpZmk7CisKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLlN1cHBsaWNhbnRTdGF0ZTsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlTc2lkOworCisvKioKKyAqIFN0b3JlcyBzdXBwbGljYW50IHN0YXRlIGNoYW5nZSBpbmZvcm1hdGlvbiBwYXNzZWQgZnJvbSBXaWZpTW9uaXRvciB0bworICogYSBzdGF0ZSBtYWNoaW5lLiBXaWZpU3RhdGVNYWNoaW5lLCBTdXBwbGljYW50U3RhdGVUcmFja2VyIGFuZCBXcHNTdGF0ZU1hY2hpbmUKKyAqIGFyZSBleGFtcGxlIHN0YXRlIG1hY2hpbmVzIHRoYXQgaGFuZGxlIGl0LgorICogQGhpZGUKKyAqLworcHVibGljIGNsYXNzIFN0YXRlQ2hhbmdlUmVzdWx0IHsKKyAgICBTdGF0ZUNoYW5nZVJlc3VsdChpbnQgbmV0d29ya0lkLCBXaWZpU3NpZCB3aWZpU3NpZCwgU3RyaW5nIEJTU0lELAorICAgICAgICAgICAgU3VwcGxpY2FudFN0YXRlIHN0YXRlKSB7CisgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgdGhpcy53aWZpU3NpZD0gd2lmaVNzaWQ7CisgICAgICAgIHRoaXMuQlNTSUQgPSBCU1NJRDsKKyAgICAgICAgdGhpcy5uZXR3b3JrSWQgPSBuZXR3b3JrSWQ7CisgICAgfQorCisgICAgaW50IG5ldHdvcmtJZDsKKyAgICBXaWZpU3NpZCB3aWZpU3NpZDsKKyAgICBTdHJpbmcgQlNTSUQ7CisgICAgU3VwcGxpY2FudFN0YXRlIHN0YXRlOworfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9TdXBwbGljYW50U3RhdGVUcmFja2VyLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1N1cHBsaWNhbnRTdGF0ZVRyYWNrZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODA0OGZmCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9TdXBwbGljYW50U3RhdGVUcmFja2VyLmphdmEKQEAgLTAsMCArMSwzNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci53aWZpOworCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlN0YXRlTWFjaGluZTsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5TdXBwbGljYW50U3RhdGU7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCitpbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworCisvKioKKyAqIFRyYWNrcyB0aGUgc3RhdGUgY2hhbmdlcyBpbiBzdXBwbGljYW50IGFuZCBwcm92aWRlcyBmdW5jdGlvbmFsaXR5CisgKiB0aGF0IGlzIGJhc2VkIG9uIHRoZXNlIHN0YXRlIGNoYW5nZXM6CisgKiAtIGRldGVjdCBhIGZhaWxlZCBXUEEgaGFuZHNoYWtlIHRoYXQgbG9vcHMgaW5kZWZpbml0ZWx5CisgKiAtIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgaGFuZGxpbmcKKyAqLworY2xhc3MgU3VwcGxpY2FudFN0YXRlVHJhY2tlciBleHRlbmRzIFN0YXRlTWFjaGluZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREJHID0gZmFsc2U7CisKKyAgICBwcml2YXRlIFdpZmlTdGF0ZU1hY2hpbmUgbVdpZmlTdGF0ZU1hY2hpbmU7CisgICAgcHJpdmF0ZSBXaWZpQ29uZmlnU3RvcmUgbVdpZmlDb25maWdTdG9yZTsKKyAgICBwcml2YXRlIGludCBtQXV0aGVudGljYXRpb25GYWlsdXJlc0NvdW50ID0gMDsKKyAgICBwcml2YXRlIGludCBtQXNzb2NpYXRpb25SZWplY3RDb3VudCA9IDA7CisgICAgLyogSW5kaWNhdGVzIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgaW4gc3VwcGxpY2FudCBicm9hZGNhc3QuCisgICAgICogVE9ETzogZW5oYW5jZSBhdXRoIGZhaWx1cmUgcmVwb3J0aW5nIHRvIGluY2x1ZGUgbm90aWZpY2F0aW9uCisgICAgICogZm9yIGFsbCB0eXBlIG9mIGZhaWx1cmVzOiBFQVAsIFdQUyAmIFdQQSBuZXR3b3JrcyAqLworICAgIHByaXZhdGUgYm9vbGVhbiBtQXV0aEZhaWx1cmVJblN1cHBsaWNhbnRCcm9hZGNhc3QgPSBmYWxzZTsKKworICAgIC8qIE1heGltdW0gcmV0cmllcyBvbiBhIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgbm90aWZpY2F0aW9uICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9SRVRSSUVTX09OX0FVVEhFTlRJQ0FUSU9OX0ZBSUxVUkUgPSAyOworCisgICAgLyogTWF4aW11bSByZXRyaWVzIG9uIGFzc29jIHJlamVjdGlvbiBldmVudHMgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1JFVFJJRVNfT05fQVNTT0NJQVRJT05fUkVKRUNUID0gMTY7CisKKyAgICAvKiBUcmFja3MgaWYgbmV0d29ya3MgaGF2ZSBiZWVuIGRpc2FibGVkIGR1cmluZyBhIGNvbm5lY3Rpb24gKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gbU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ID0gZmFsc2U7CisKKyAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7CisKKyAgICBwcml2YXRlIFN0YXRlIG1VbmluaXRpYWxpemVkU3RhdGUgPSBuZXcgVW5pbml0aWFsaXplZFN0YXRlKCk7CisgICAgcHJpdmF0ZSBTdGF0ZSBtRGVmYXVsdFN0YXRlID0gbmV3IERlZmF1bHRTdGF0ZSgpOworICAgIHByaXZhdGUgU3RhdGUgbUluYWN0aXZlU3RhdGUgPSBuZXcgSW5hY3RpdmVTdGF0ZSgpOworICAgIHByaXZhdGUgU3RhdGUgbURpc2Nvbm5lY3RTdGF0ZSA9IG5ldyBEaXNjb25uZWN0ZWRTdGF0ZSgpOworICAgIHByaXZhdGUgU3RhdGUgbVNjYW5TdGF0ZSA9IG5ldyBTY2FuU3RhdGUoKTsKKyAgICBwcml2YXRlIFN0YXRlIG1IYW5kc2hha2VTdGF0ZSA9IG5ldyBIYW5kc2hha2VTdGF0ZSgpOworICAgIHByaXZhdGUgU3RhdGUgbUNvbXBsZXRlZFN0YXRlID0gbmV3IENvbXBsZXRlZFN0YXRlKCk7CisgICAgcHJpdmF0ZSBTdGF0ZSBtRG9ybWFudFN0YXRlID0gbmV3IERvcm1hbnRTdGF0ZSgpOworCisgICAgcHVibGljIFN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIoQ29udGV4dCBjLCBXaWZpU3RhdGVNYWNoaW5lIHdzbSwgV2lmaUNvbmZpZ1N0b3JlIHdjcywgSGFuZGxlciB0KSB7CisgICAgICAgIHN1cGVyKFRBRywgdC5nZXRMb29wZXIoKSk7CisKKyAgICAgICAgbUNvbnRleHQgPSBjOworICAgICAgICBtV2lmaVN0YXRlTWFjaGluZSA9IHdzbTsKKyAgICAgICAgbVdpZmlDb25maWdTdG9yZSA9IHdjczsKKyAgICAgICAgYWRkU3RhdGUobURlZmF1bHRTdGF0ZSk7CisgICAgICAgICAgICBhZGRTdGF0ZShtVW5pbml0aWFsaXplZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKKyAgICAgICAgICAgIGFkZFN0YXRlKG1JbmFjdGl2ZVN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKKyAgICAgICAgICAgIGFkZFN0YXRlKG1EaXNjb25uZWN0U3RhdGUsIG1EZWZhdWx0U3RhdGUpOworICAgICAgICAgICAgYWRkU3RhdGUobVNjYW5TdGF0ZSwgbURlZmF1bHRTdGF0ZSk7CisgICAgICAgICAgICBhZGRTdGF0ZShtSGFuZHNoYWtlU3RhdGUsIG1EZWZhdWx0U3RhdGUpOworICAgICAgICAgICAgYWRkU3RhdGUobUNvbXBsZXRlZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKKyAgICAgICAgICAgIGFkZFN0YXRlKG1Eb3JtYW50U3RhdGUsIG1EZWZhdWx0U3RhdGUpOworCisgICAgICAgIHNldEluaXRpYWxTdGF0ZShtVW5pbml0aWFsaXplZFN0YXRlKTsKKyAgICAgICAgc2V0TG9nUmVjU2l6ZSg1MCk7CisgICAgICAgIHNldExvZ09ubHlUcmFuc2l0aW9ucyh0cnVlKTsKKyAgICAgICAgLy9zdGFydCB0aGUgc3RhdGUgbWFjaGluZQorICAgICAgICBzdGFydCgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVOZXR3b3JrQ29ubmVjdGlvbkZhaWx1cmUoaW50IG5ldElkLCBpbnQgZGlzYWJsZVJlYXNvbikgeworICAgICAgICAvKiBJZiBvdGhlciBuZXR3b3JrcyBkaXNhYmxlZCBkdXJpbmcgY29ubmVjdGlvbiwgZW5hYmxlIHRoZW0gKi8KKyAgICAgICAgaWYgKG1OZXR3b3Jrc0Rpc2FibGVkRHVyaW5nQ29ubmVjdCkgeworICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5lbmFibGVBbGxOZXR3b3JrcygpOworICAgICAgICAgICAgbU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLyogRGlzYWJsZSBmYWlsZWQgbmV0d29yayAqLworICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmRpc2FibGVOZXR3b3JrKG5ldElkLCBkaXNhYmxlUmVhc29uKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdHJhbnNpdGlvbk9uU3VwcGxpY2FudFN0YXRlQ2hhbmdlKFN0YXRlQ2hhbmdlUmVzdWx0IHN0YXRlQ2hhbmdlUmVzdWx0KSB7CisgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdXBTdGF0ZSA9IChTdXBwbGljYW50U3RhdGUpIHN0YXRlQ2hhbmdlUmVzdWx0LnN0YXRlOworCisgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIlN1cHBsaWNhbnQgc3RhdGU6ICIgKyBzdXBTdGF0ZS50b1N0cmluZygpICsgIlxuIik7CisKKyAgICAgICAgc3dpdGNoIChzdXBTdGF0ZSkgeworICAgICAgICAgICBjYXNlIERJU0NPTk5FQ1RFRDoKKyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RTdGF0ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIElOVEVSRkFDRV9ESVNBQkxFRDoKKyAgICAgICAgICAgICAgICAvL3dlIHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgZGlzY29ubmVjdGlvbiBhbHJlYWR5LCBkbyBub3RoaW5nCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNDQU5OSU5HOgorICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtU2NhblN0YXRlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQVVUSEVOVElDQVRJTkc6CisgICAgICAgICAgICBjYXNlIEFTU09DSUFUSU5HOgorICAgICAgICAgICAgY2FzZSBBU1NPQ0lBVEVEOgorICAgICAgICAgICAgY2FzZSBGT1VSX1dBWV9IQU5EU0hBS0U6CisgICAgICAgICAgICBjYXNlIEdST1VQX0hBTkRTSEFLRToKKyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUhhbmRzaGFrZVN0YXRlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09NUExFVEVEOgorICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtQ29tcGxldGVkU3RhdGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBET1JNQU5UOgorICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRG9ybWFudFN0YXRlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSU5BQ1RJVkU6CisgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVU5JTklUSUFMSVpFRDoKKyAgICAgICAgICAgIGNhc2UgSU5WQUxJRDoKKyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVVuaW5pdGlhbGl6ZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVua25vd24gc3VwcGxpY2FudCBzdGF0ZSAiICsgc3VwU3RhdGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNlbmRTdXBwbGljYW50U3RhdGVDaGFuZ2VkQnJvYWRjYXN0KFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSwgYm9vbGVhbiBmYWlsZWRBdXRoKSB7CisgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pOworICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UCisgICAgICAgICAgICAgICAgfCBJbnRlbnQuRkxBR19SRUNFSVZFUl9SRVBMQUNFX1BFTkRJTkcpOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTkVXX1NUQVRFLCAoUGFyY2VsYWJsZSkgc3RhdGUpOworICAgICAgICBpZiAoZmFpbGVkQXV0aCkgeworICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKAorICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVYVFJBX1NVUFBMSUNBTlRfRVJST1IsCisgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuRVJST1JfQVVUSEVOVElDQVRJTkcpOworICAgICAgICB9CisgICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7CisgICAgfQorCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogSFNNIHN0YXRlcworICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgY2xhc3MgRGVmYXVsdFN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgIlxuIik7CisgICAgICAgICB9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpICsgIlxuIik7CisgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgbUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCsrOworICAgICAgICAgICAgICAgICAgICBtQXV0aEZhaWx1cmVJblN1cHBsaWNhbnRCcm9hZGNhc3QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBTdGF0ZUNoYW5nZVJlc3VsdCBzdGF0ZUNoYW5nZVJlc3VsdCA9IChTdGF0ZUNoYW5nZVJlc3VsdCkgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSA9IHN0YXRlQ2hhbmdlUmVzdWx0LnN0YXRlOworICAgICAgICAgICAgICAgICAgICBzZW5kU3VwcGxpY2FudFN0YXRlQ2hhbmdlZEJyb2FkY2FzdChzdGF0ZSwgbUF1dGhGYWlsdXJlSW5TdXBwbGljYW50QnJvYWRjYXN0KTsKKyAgICAgICAgICAgICAgICAgICAgbUF1dGhGYWlsdXJlSW5TdXBwbGljYW50QnJvYWRjYXN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25PblN1cHBsaWNhbnRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZVJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfUkVTRVRfU1VQUExJQ0FOVF9TVEFURToKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1VbmluaXRpYWxpemVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkNPTk5FQ1RfTkVUV09SSzoKKyAgICAgICAgICAgICAgICAgICAgbU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbUFzc29jaWF0aW9uUmVqZWN0Q291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLkFTU09DSUFUSU9OX1JFSkVDVElPTl9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgbUFzc29jaWF0aW9uUmVqZWN0Q291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiSWdub3JpbmcgIiArIG1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBzdXBwbGljYW50IHN0YXRlIGFzIHNlZW4KKyAgICAgKiBieSB0aGUgZnJhbWV3b3JrIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQuIFdlIGFyZQorICAgICAqIGluIHRoaXMgc3RhdGUgcmlnaHQgYWZ0ZXIgZXN0YWJsaXNoaW5nIGEgY29udHJvbAorICAgICAqIGNoYW5uZWwgY29ubmVjdGlvbiBiZWZvcmUgYW55IHN1cHBsaWNhbnQgZXZlbnRzCisgICAgICogb3IgYWZ0ZXIgd2UgaGF2ZSBsb3N0IHRoZSBjb250cm9sIGNoYW5uZWwKKyAgICAgKiBjb25uZWN0aW9uIHRvIHRoZSBzdXBwbGljYW50CisgICAgICovCisgICAgY2xhc3MgVW5pbml0aWFsaXplZFN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgIlxuIik7CisgICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgSW5hY3RpdmVTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsIGdldE5hbWUoKSArICJcbiIpOworICAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIERpc2Nvbm5lY3RlZFN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgIlxuIik7CisgICAgICAgICAgICAgLyogSWYgYSBkaXNjb25uZWN0IGV2ZW50IGhhcHBlbnMgYWZ0ZXIgYXV0aGVudGljYXRpb24gZmFpbHVyZQorICAgICAgICAgICAgICAqIGV4Y2VlZHMgbWF4aW11bSByZXRyaWVzLCBkaXNhYmxlIHRoZSBuZXR3b3JrCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZ2V0Q3VycmVudE1lc3NhZ2UoKTsKKyAgICAgICAgICAgICBTdGF0ZUNoYW5nZVJlc3VsdCBzdGF0ZUNoYW5nZVJlc3VsdCA9IChTdGF0ZUNoYW5nZVJlc3VsdCkgbWVzc2FnZS5vYmo7CisKKyAgICAgICAgICAgICBpZiAobUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCA+PSBNQVhfUkVUUklFU19PTl9BVVRIRU5USUNBVElPTl9GQUlMVVJFKSB7CisgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIkZhaWxlZCB0byBhdXRoZW50aWNhdGUsIGRpc2FibGluZyBuZXR3b3JrICIgKworICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlUmVzdWx0Lm5ldHdvcmtJZCk7CisgICAgICAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtDb25uZWN0aW9uRmFpbHVyZShzdGF0ZUNoYW5nZVJlc3VsdC5uZXR3b3JrSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uRElTQUJMRURfQVVUSF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICAgbUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCA9IDA7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGVsc2UgaWYgKG1Bc3NvY2lhdGlvblJlamVjdENvdW50ID49IE1BWF9SRVRSSUVTX09OX0FTU09DSUFUSU9OX1JFSkVDVCkgeworICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJBc3NvY2lhdGlvbiBnZXR0aW5nIHJlamVjdGVkLCBkaXNhYmxpbmcgbmV0d29yayAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZVJlc3VsdC5uZXR3b3JrSWQpOworICAgICAgICAgICAgICAgICBoYW5kbGVOZXR3b3JrQ29ubmVjdGlvbkZhaWx1cmUoc3RhdGVDaGFuZ2VSZXN1bHQubmV0d29ya0lkLAorICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLkRJU0FCTEVEX0FTU09DSUFUSU9OX1JFSkVDVCk7CisgICAgICAgICAgICAgICAgIG1Bc3NvY2lhdGlvblJlamVjdENvdW50ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBTY2FuU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCBnZXROYW1lKCkgKyAiXG4iKTsKKyAgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBIYW5kc2hha2VTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBtYXggbnVtYmVyIG9mIHRoZSBXUEEgc3VwcGxpY2FudCBsb29wIGl0ZXJhdGlvbnMgYmVmb3JlIHdlCisgICAgICAgICAqIGRlY2lkZSB0aGF0IHRoZSBsb29wIHNob3VsZCBiZSB0ZXJtaW5hdGVkOgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9TVVBQTElDQU5UX0xPT1BfSVRFUkFUSU9OUyA9IDQ7CisgICAgICAgIHByaXZhdGUgaW50IG1Mb29wRGV0ZWN0SW5kZXg7CisgICAgICAgIHByaXZhdGUgaW50IG1Mb29wRGV0ZWN0Q291bnQ7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsIGdldE5hbWUoKSArICJcbiIpOworICAgICAgICAgICAgIG1Mb29wRGV0ZWN0SW5kZXggPSAwOworICAgICAgICAgICAgIG1Mb29wRGV0ZWN0Q291bnQgPSAwOworICAgICAgICAgfQorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsIGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSArICJcbiIpOworICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBTdGF0ZUNoYW5nZVJlc3VsdCBzdGF0ZUNoYW5nZVJlc3VsdCA9IChTdGF0ZUNoYW5nZVJlc3VsdCkgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSA9IHN0YXRlQ2hhbmdlUmVzdWx0LnN0YXRlOworICAgICAgICAgICAgICAgICAgICBpZiAoU3VwcGxpY2FudFN0YXRlLmlzSGFuZHNoYWtlU3RhdGUoc3RhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUxvb3BEZXRlY3RJbmRleCA+IHN0YXRlLm9yZGluYWwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Mb29wRGV0ZWN0Q291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtTG9vcERldGVjdENvdW50ID4gTUFYX1NVUFBMSUNBTlRfTE9PUF9JVEVSQVRJT05TKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiU3VwcGxpY2FudCBsb29wIGRldGVjdGVkLCBkaXNhYmxpbmcgbmV0d29yayAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlUmVzdWx0Lm5ldHdvcmtJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya0Nvbm5lY3Rpb25GYWlsdXJlKHN0YXRlQ2hhbmdlUmVzdWx0Lm5ldHdvcmtJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLkRJU0FCTEVEX0FVVEhfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtTG9vcERldGVjdEluZGV4ID0gc3RhdGUub3JkaW5hbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFN1cHBsaWNhbnRTdGF0ZUNoYW5nZWRCcm9hZGNhc3Qoc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BdXRoRmFpbHVyZUluU3VwcGxpY2FudEJyb2FkY2FzdCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgdGhlIERlZmF1bHRTdGF0ZSBoYW5kbGUgdGhlIHRyYW5zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIENvbXBsZXRlZFN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgIlxuIik7CisgICAgICAgICAgICAgLyogUmVzZXQgYXV0aGVudGljYXRpb24gZmFpbHVyZSBjb3VudCAqLworICAgICAgICAgICAgIG1BdXRoZW50aWNhdGlvbkZhaWx1cmVzQ291bnQgPSAwOworICAgICAgICAgICAgIG1Bc3NvY2lhdGlvblJlamVjdENvdW50ID0gMDsKKyAgICAgICAgICAgICBpZiAobU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0KSB7CisgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZW5hYmxlQWxsTmV0d29ya3MoKTsKKyAgICAgICAgICAgICAgICAgbU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ID0gZmFsc2U7CisgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpICsgIlxuIik7CisgICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgU3RhdGVDaGFuZ2VSZXN1bHQgc3RhdGVDaGFuZ2VSZXN1bHQgPSAoU3RhdGVDaGFuZ2VSZXN1bHQpIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICBTdXBwbGljYW50U3RhdGUgc3RhdGUgPSBzdGF0ZUNoYW5nZVJlc3VsdC5zdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgc2VuZFN1cHBsaWNhbnRTdGF0ZUNoYW5nZWRCcm9hZGNhc3Qoc3RhdGUsIG1BdXRoRmFpbHVyZUluU3VwcGxpY2FudEJyb2FkY2FzdCk7CisgICAgICAgICAgICAgICAgICAgIC8qIElnbm9yZSBhbnkgY29ubmVjdGluZyBzdGF0ZSBpbiBjb21wbGV0ZWQgc3RhdGUuIEdyb3VwIHJlLWtleWluZworICAgICAgICAgICAgICAgICAgICAgKiBldmVudHMgYW5kIG90aGVyIGF1dGggZXZlbnRzIHRoYXQgZG8gbm90IGFmZmVjdCBjb25uZWN0aXZpdHkgYXJlCisgICAgICAgICAgICAgICAgICAgICAqIGlnbm9yZWQKKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmIChTdXBwbGljYW50U3RhdGUuaXNDb25uZWN0aW5nKHN0YXRlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbk9uU3VwcGxpY2FudFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9SRVNFVF9TVVBQTElDQU5UX1NUQVRFOgorICAgICAgICAgICAgICAgICAgICBzZW5kU3VwcGxpY2FudFN0YXRlQ2hhbmdlZEJyb2FkY2FzdChTdXBwbGljYW50U3RhdGUuRElTQ09OTkVDVEVELCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVW5pbml0aWFsaXplZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvL1RPRE86IHJlbW92ZSBhZnRlciBnZXR0aW5nIHJpZCBvZiB0aGUgc3RhdGUgaW4gc3VwcGxpY2FudAorICAgIGNsYXNzIERvcm1hbnRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCBnZXROYW1lKCkgKyAiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGR1bXAoRmlsZURlc2NyaXB0b3IgZmQsIFByaW50V3JpdGVyIHB3LCBTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIHN1cGVyLmR1bXAoZmQsIHB3LCBhcmdzKTsKKyAgICAgICAgcHcucHJpbnRsbigibUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCAiICsgbUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCk7CisgICAgICAgIHB3LnByaW50bG4oIm1BdXRoRmFpbHVyZUluU3VwcGxpY2FudEJyb2FkY2FzdCAiICsgbUF1dGhGYWlsdXJlSW5TdXBwbGljYW50QnJvYWRjYXN0KTsKKyAgICAgICAgcHcucHJpbnRsbigibU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ICIgKyBtTmV0d29ya3NEaXNhYmxlZER1cmluZ0Nvbm5lY3QpOworICAgICAgICBwdy5wcmludGxuKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpQXBDb25maWdTdG9yZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpQXBDb25maWdTdG9yZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMjhmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlBcENvbmZpZ1N0b3JlLmphdmEKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci53aWZpOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlDb25maWd1cmF0aW9uLktleU1nbXQ7CitpbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOworaW1wb3J0IGFuZHJvaWQub3MuTWVzc2VuZ2VyOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFzeW5jQ2hhbm5lbDsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGU7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZU1hY2hpbmU7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5CdWZmZXJlZE91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlVVSUQ7CisKKy8qKgorICogUHJvdmlkZXMgQVBJIHRvIHRoZSBXaWZpU3RhdGVNYWNoaW5lIGZvciBkb2luZyByZWFkL3dyaXRlIGFjY2VzcworICogdG8gc29mdCBhY2Nlc3MgcG9pbnQgY29uZmlndXJhdGlvbgorICovCitjbGFzcyBXaWZpQXBDb25maWdTdG9yZSBleHRlbmRzIFN0YXRlTWFjaGluZSB7CisKKyAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXaWZpQXBDb25maWdTdG9yZSI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVBfQ09ORklHX0ZJTEUgPSBFbnZpcm9ubWVudC5nZXREYXRhRGlyZWN0b3J5KCkgKworICAgICAgICAiL21pc2Mvd2lmaS9zb2Z0YXAuY29uZiI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQVBfQ09ORklHX0ZJTEVfVkVSU0lPTiA9IDE7CisKKyAgICBwcml2YXRlIFN0YXRlIG1EZWZhdWx0U3RhdGUgPSBuZXcgRGVmYXVsdFN0YXRlKCk7CisgICAgcHJpdmF0ZSBTdGF0ZSBtSW5hY3RpdmVTdGF0ZSA9IG5ldyBJbmFjdGl2ZVN0YXRlKCk7CisgICAgcHJpdmF0ZSBTdGF0ZSBtQWN0aXZlU3RhdGUgPSBuZXcgQWN0aXZlU3RhdGUoKTsKKworICAgIHByaXZhdGUgV2lmaUNvbmZpZ3VyYXRpb24gbVdpZmlBcENvbmZpZyA9IG51bGw7CisgICAgcHJpdmF0ZSBBc3luY0NoYW5uZWwgbVJlcGx5Q2hhbm5lbCA9IG5ldyBBc3luY0NoYW5uZWwoKTsKKworICAgIFdpZmlBcENvbmZpZ1N0b3JlKENvbnRleHQgY29udGV4dCwgSGFuZGxlciB0YXJnZXQpIHsKKyAgICAgICAgc3VwZXIoVEFHLCB0YXJnZXQuZ2V0TG9vcGVyKCkpOworCisgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgYWRkU3RhdGUobURlZmF1bHRTdGF0ZSk7CisgICAgICAgICAgICBhZGRTdGF0ZShtSW5hY3RpdmVTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7CisgICAgICAgICAgICBhZGRTdGF0ZShtQWN0aXZlU3RhdGUsIG1EZWZhdWx0U3RhdGUpOworCisgICAgICAgIHNldEluaXRpYWxTdGF0ZShtSW5hY3RpdmVTdGF0ZSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBXaWZpQXBDb25maWdTdG9yZSBtYWtlV2lmaUFwQ29uZmlnU3RvcmUoQ29udGV4dCBjb250ZXh0LCBIYW5kbGVyIHRhcmdldCkgeworICAgICAgICBXaWZpQXBDb25maWdTdG9yZSBzID0gbmV3IFdpZmlBcENvbmZpZ1N0b3JlKGNvbnRleHQsIHRhcmdldCk7CisgICAgICAgIHMuc3RhcnQoKTsKKyAgICAgICAgcmV0dXJuIHM7CisgICAgfQorCisgICAgY2xhc3MgRGVmYXVsdFN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9TRVRfQVBfQ09ORklHOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfU0VUX0FQX0NPTkZJR19DT01QTEVURUQ6CisgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVuZXhwZWN0ZWQgbWVzc2FnZTogIiArIG1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX1JFUVVFU1RfQVBfQ09ORklHOgorICAgICAgICAgICAgICAgICAgICBtUmVwbHlDaGFubmVsLnJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVN0YXRlTWFjaGluZS5DTURfUkVTUE9OU0VfQVBfQ09ORklHLCBtV2lmaUFwQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIGhhbmRsZSAiICsgbWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBJbmFjdGl2ZVN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9TRVRfQVBfQ09ORklHOgorICAgICAgICAgICAgICAgICAgICBtV2lmaUFwQ29uZmlnID0gKFdpZmlDb25maWd1cmF0aW9uKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1BY3RpdmVTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgQWN0aXZlU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgbmV3IFRocmVhZChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICB3cml0ZUFwQ29uZmlndXJhdGlvbihtV2lmaUFwQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoV2lmaVN0YXRlTWFjaGluZS5DTURfU0VUX0FQX0NPTkZJR19DT01QTEVURUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pLnN0YXJ0KCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgLy9UT0RPOiBoYXZlIGZlZWRiYWNrIHRvIHRoZSB1c2VyIHdoZW4gd2UgZG8gdGhpcworICAgICAgICAgICAgICAgIC8vdG8gaW5kaWNhdGUgdGhlIHdyaXRlIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfU0VUX0FQX0NPTkZJRzoKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX1NFVF9BUF9DT05GSUdfQ09NUExFVEVEOgorICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluYWN0aXZlU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbG9hZEFwQ29uZmlndXJhdGlvbigpIHsKKyAgICAgICAgRGF0YUlucHV0U3RyZWFtIGluID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IG5ldyBXaWZpQ29uZmlndXJhdGlvbigpOworICAgICAgICAgICAgaW4gPSBuZXcgRGF0YUlucHV0U3RyZWFtKG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG5ldyBGaWxlSW5wdXRTdHJlYW0oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBfQ09ORklHX0ZJTEUpKSk7CisKKyAgICAgICAgICAgIGludCB2ZXJzaW9uID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgaWYgKHZlcnNpb24gIT0gMSkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkJhZCB2ZXJzaW9uIG9uIGhvdHNwb3QgY29uZmlndXJhdGlvbiBmaWxlLCBzZXQgZGVmYXVsdHMiKTsKKyAgICAgICAgICAgICAgICBzZXREZWZhdWx0QXBDb25maWd1cmF0aW9uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uZmlnLlNTSUQgPSBpbi5yZWFkVVRGKCk7CisgICAgICAgICAgICBpbnQgYXV0aFR5cGUgPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBjb25maWcuYWxsb3dlZEtleU1hbmFnZW1lbnQuc2V0KGF1dGhUeXBlKTsKKyAgICAgICAgICAgIGlmIChhdXRoVHlwZSAhPSBLZXlNZ210Lk5PTkUpIHsKKyAgICAgICAgICAgICAgICBjb25maWcucHJlU2hhcmVkS2V5ID0gaW4ucmVhZFVURigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVdpZmlBcENvbmZpZyA9IGNvbmZpZzsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaWdub3JlKSB7CisgICAgICAgICAgICBzZXREZWZhdWx0QXBDb25maWd1cmF0aW9uKCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAoaW4gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGluLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkge30KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIE1lc3NlbmdlciBnZXRNZXNzZW5nZXIoKSB7CisgICAgICAgIHJldHVybiBuZXcgTWVzc2VuZ2VyKGdldEhhbmRsZXIoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHdyaXRlQXBDb25maWd1cmF0aW9uKGZpbmFsIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZykgeworICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBvdXQgPSBuZXcgRGF0YU91dHB1dFN0cmVhbShuZXcgQnVmZmVyZWRPdXRwdXRTdHJlYW0oCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsZU91dHB1dFN0cmVhbShBUF9DT05GSUdfRklMRSkpKTsKKworICAgICAgICAgICAgb3V0LndyaXRlSW50KEFQX0NPTkZJR19GSUxFX1ZFUlNJT04pOworICAgICAgICAgICAgb3V0LndyaXRlVVRGKGNvbmZpZy5TU0lEKTsKKyAgICAgICAgICAgIGludCBhdXRoVHlwZSA9IGNvbmZpZy5nZXRBdXRoVHlwZSgpOworICAgICAgICAgICAgb3V0LndyaXRlSW50KGF1dGhUeXBlKTsKKyAgICAgICAgICAgIGlmKGF1dGhUeXBlICE9IEtleU1nbXQuTk9ORSkgeworICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihjb25maWcucHJlU2hhcmVkS2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRXJyb3Igd3JpdGluZyBob3RzcG90IGNvbmZpZ3VyYXRpb24iICsgZSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAob3V0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogR2VuZXJhdGUgYSBkZWZhdWx0IFdQQTIgYmFzZWQgY29uZmlndXJhdGlvbiB3aXRoIGEgcmFuZG9tIHBhc3N3b3JkLgorICAgICAgIFdlIGFyZSBjaGFuZ2luZyB0aGUgV2lmaSBBcCBjb25maWd1cmF0aW9uIHN0b3JhZ2UgZnJvbSBzZWN1cmUgc2V0dGluZ3MgdG8gYQorICAgICAgIGZsYXQgZmlsZSBhY2Nlc3NpYmxlIG9ubHkgYnkgdGhlIHN5c3RlbS4gQSBXUEEyIGJhc2VkIGRlZmF1bHQgY29uZmlndXJhdGlvbgorICAgICAgIHdpbGwga2VlcCB0aGUgZGV2aWNlIHNlY3VyZSBhZnRlciB0aGUgdXBkYXRlICovCisgICAgcHJpdmF0ZSB2b2lkIHNldERlZmF1bHRBcENvbmZpZ3VyYXRpb24oKSB7CisgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IG5ldyBXaWZpQ29uZmlndXJhdGlvbigpOworICAgICAgICBjb25maWcuU1NJRCA9IG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy53aWZpX3RldGhlcl9jb25maWd1cmVfc3NpZF9kZWZhdWx0KTsKKyAgICAgICAgY29uZmlnLmFsbG93ZWRLZXlNYW5hZ2VtZW50LnNldChLZXlNZ210LldQQTJfUFNLKTsKKyAgICAgICAgU3RyaW5nIHJhbmRvbVVVSUQgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpOworICAgICAgICAvL2ZpcnN0IDEyIGNoYXJzIGZyb20geHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4CisgICAgICAgIGNvbmZpZy5wcmVTaGFyZWRLZXkgPSByYW5kb21VVUlELnN1YnN0cmluZygwLCA4KSArIHJhbmRvbVVVSUQuc3Vic3RyaW5nKDksMTMpOworICAgICAgICBzZW5kTWVzc2FnZShXaWZpU3RhdGVNYWNoaW5lLkNNRF9TRVRfQVBfQ09ORklHLCBjb25maWcpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaUNvbmZpZ1N0b3JlLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlDb25maWdTdG9yZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTQ3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlDb25maWdTdG9yZS5qYXZhCkBAIC0wLDAgKzEsMjAwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLndpZmk7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQubmV0LkxpbmtBZGRyZXNzOworaW1wb3J0IGFuZHJvaWQubmV0LkxpbmtQcm9wZXJ0aWVzOworaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtVdGlsczsKK2ltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrSW5mby5EZXRhaWxlZFN0YXRlOworaW1wb3J0IGFuZHJvaWQubmV0LlByb3h5UHJvcGVydGllczsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Sb3V0ZUluZm87CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlDb25maWd1cmF0aW9uLklwQXNzaWdubWVudDsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlDb25maWd1cmF0aW9uLktleU1nbXQ7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpQ29uZmlndXJhdGlvbi5Qcm94eVNldHRpbmdzOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaUNvbmZpZ3VyYXRpb24uU3RhdHVzOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC53aWZpLldpZmlDb25maWd1cmF0aW9uLklOVkFMSURfTkVUV09SS19JRDsKKworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaUVudGVycHJpc2VDb25maWc7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlTc2lkOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV3BzSW5mbzsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldwc1Jlc3VsdDsKK2ltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OworaW1wb3J0IGFuZHJvaWQub3MuRmlsZU9ic2VydmVyOworaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7CitpbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKK2ltcG9ydCBhbmRyb2lkLnNlY3VyaXR5LkNyZWRlbnRpYWxzOworaW1wb3J0IGFuZHJvaWQuc2VjdXJpdHkuS2V5Q2hhaW47CitpbXBvcnQgYW5kcm9pZC5zZWN1cml0eS5LZXlTdG9yZTsKK2ltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2NhbExvZzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5FT0ZFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CitpbXBvcnQgamF2YS5zZWN1cml0eS5Qcml2YXRlS2V5OworaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZTsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQml0U2V0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgdGhlIEFQSSB0byBtYW5hZ2UgY29uZmlndXJlZAorICogd2lmaSBuZXR3b3Jrcy4gVGhlIEFQSSBpcyBub3QgdGhyZWFkIHNhZmUgaXMgYmVpbmcKKyAqIHVzZWQgb25seSBmcm9tIFdpZmlTdGF0ZU1hY2hpbmUuCisgKgorICogSXQgZGVhbHMgd2l0aCB0aGUgZm9sbG93aW5nCisgKiAtIEFkZC91cGRhdGUvcmVtb3ZlIGEgV2lmaUNvbmZpZ3VyYXRpb24KKyAqICAgVGhlIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdHdvIHR5cGVzIG9mIGluZm9ybWF0aW9uLgorICogICAgID0gSVAgYW5kIHByb3h5IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBoYW5kbGVkIGJ5IFdpZmlDb25maWdTdG9yZSBhbmQKKyAqICAgICAgIGlzIHNhdmVkIHRvIGRpc2sgb24gYW55IGNoYW5nZS4KKyAqCisgKiAgICAgICBUaGUgZm9ybWF0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBhcyBmb2xsb3dzOgorICogICAgICAgPHZlcnNpb24+CisgKiAgICAgICA8bmV0QV9rZXkxPjxuZXRBX3ZhbHVlMT48bmV0QV9rZXkyPjxuZXRBX3ZhbHVlMj4uLi48RU9TPgorICogICAgICAgPG5ldEJfa2V5MT48bmV0Ql92YWx1ZTE+PG5ldEJfa2V5Mj48bmV0Ql92YWx1ZTI+Li4uPEVPUz4KKyAqICAgICAgIC4uCisgKgorICogICAgICAgKGtleSwgdmFsdWUpIHBhaXJzIGZvciBhIGdpdmVuIG5ldHdvcmsgYXJlIGdyb3VwZWQgdG9nZXRoZXIgYW5kIGNhbgorICogICAgICAgYmUgaW4gYW55IG9yZGVyLiBBIEVPUyBhdCB0aGUgZW5kIG9mIGEgc2V0IG9mIChrZXksIHZhbHVlKSBwYWlycworICogICAgICAgaW5kaWNhdGVzIHRoYXQgdGhlIG5leHQgc2V0IG9mIChrZXksIHZhbHVlKSBwYWlycyBhcmUgZm9yIGEgbmV3CisgKiAgICAgICBuZXR3b3JrLiBBIG5ldHdvcmsgaXMgaWRlbnRpZmllZCBieSBhIHVuaXF1ZSBJRF9LRVkuIElmIHRoZXJlIGlzIG5vCisgKiAgICAgICBJRF9LRVkgaW4gdGhlIChrZXksIHZhbHVlKSBwYWlycywgdGhlIGRhdGEgaXMgZGlzY2FyZGVkLgorICoKKyAqICAgICAgIEFuIGludmFsaWQgdmVyc2lvbiBvbiByZWFkIHdvdWxkIHJlc3VsdCBpbiBkaXNjYXJkaW5nIHRoZSBjb250ZW50cyBvZgorICogICAgICAgdGhlIGZpbGUuIE9uIHRoZSBuZXh0IHdyaXRlLCB0aGUgbGF0ZXN0IHZlcnNpb24gaXMgd3JpdHRlbiB0byBmaWxlLgorICoKKyAqICAgICAgIEFueSBmYWlsdXJlcyBkdXJpbmcgcmVhZCBvciB3cml0ZSB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFyZSBpZ25vcmVkCisgKiAgICAgICB3aXRob3V0IHJlcG9ydGluZyB0byB0aGUgdXNlciBzaW5jZSB0aGUgbGlrZWxpaG9vZCBvZiB0aGVzZSBlcnJvcnMgYXJlCisgKiAgICAgICBsb3cgYW5kIHRoZSBpbXBhY3Qgb24gY29ubmVjdGl2aXR5IGlzIGxvdy4KKyAqCisgKiAgICAgPSBTU0lEICYgc2VjdXJpdHkgZGV0YWlscyB0aGF0IGlzIHB1c2hlZCB0byB0aGUgc3VwcGxpY2FudC4KKyAqICAgICAgIHN1cHBsaWNhbnQgc2F2ZXMgdGhlc2UgZGV0YWlscyB0byB0aGUgZGlzayBvbiBjYWxsaW5nCisgKiAgICAgICBzYXZlQ29uZmlnQ29tbWFuZCgpLgorICoKKyAqICAgICAgIFdlIGhhdmUgdHdvIGtpbmRzIG9mIEFQSXMgZXhwb3NlZDoKKyAqICAgICAgICA+IHB1YmxpYyBBUEkgY2FsbHMgdGhhdCBwcm92aWRlIGZpbmUgZ3JhaW5lZCBjb250cm9sCisgKiAgICAgICAgICAtIGVuYWJsZU5ldHdvcmssIGRpc2FibGVOZXR3b3JrLCBhZGRPclVwZGF0ZU5ldHdvcmsoKSwKKyAqICAgICAgICAgIHJlbW92ZU5ldHdvcmsoKS4gRm9yIHRoZXNlIGNhbGxzLCB0aGUgY29uZmlnIGlzIG5vdCBwZXJzaXN0ZWQKKyAqICAgICAgICAgIHRvIHRoZSBkaXNrLiAoVE9ETzogZGVwcmVjYXRlIHRoZXNlIGNhbGxzIGluIFdpZmlNYW5hZ2VyKQorICogICAgICAgID4gVGhlIG5ldyBBUEkgY2FsbHMgLSBzZWxlY3ROZXR3b3JrKCksIHNhdmVOZXR3b3JrKCkgJiBmb3JnZXROZXR3b3JrKCkuCisgKiAgICAgICAgICBUaGVzZSBjYWxscyBwZXJzaXN0IHRoZSBzdXBwbGljYW50IGNvbmZpZyB0byBkaXNrLgorICoKKyAqIC0gTWFpbnRhaW4gYSBsaXN0IG9mIGNvbmZpZ3VyZWQgbmV0d29ya3MgZm9yIHF1aWNrIGFjY2VzcworICoKKyAqLworcHVibGljIGNsYXNzIFdpZmlDb25maWdTdG9yZSB7CisKKyAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXaWZpQ29uZmlnU3RvcmUiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREJHID0gdHJ1ZTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFZEQkcgPSBmYWxzZTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVVBQTElDQU5UX0NPTkZJR19GSUxFID0gIi9kYXRhL21pc2Mvd2lmaS93cGFfc3VwcGxpY2FudC5jb25mIjsKKworICAgIC8qIGNvbmZpZ3VyZWQgbmV0d29ya3Mgd2l0aCBuZXR3b3JrIGlkIGFzIHRoZSBrZXkgKi8KKyAgICBwcml2YXRlIEhhc2hNYXA8SW50ZWdlciwgV2lmaUNvbmZpZ3VyYXRpb24+IG1Db25maWd1cmVkTmV0d29ya3MgPQorICAgICAgICAgICAgbmV3IEhhc2hNYXA8SW50ZWdlciwgV2lmaUNvbmZpZ3VyYXRpb24+KCk7CisKKyAgICAvKiBBIG5ldHdvcmsgaWQgaXMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgYSBuZXR3b3JrIGNvbmZpZ3VyZWQgaW4gdGhlCisgICAgICogc3VwcGxpY2FudC4gTmV0d29yayBpZHMgYXJlIGdlbmVyYXRlZCB3aGVuIHRoZSBzdXBwbGljYW50IHJlYWRzCisgICAgICogdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBhdCBzdGFydCBhbmQgY2FuIHRodXMgY2hhbmdlIGZvciBuZXR3b3Jrcy4KKyAgICAgKiBXZSBzdG9yZSB0aGUgSVAgY29uZmlndXJhdGlvbiBmb3IgbmV0d29ya3MgYWxvbmcgd2l0aCBhIHVuaXF1ZSBpZAorICAgICAqIHRoYXQgaXMgZ2VuZXJhdGVkIGZyb20gU1NJRCBhbmQgc2VjdXJpdHkgdHlwZSBvZiB0aGUgbmV0d29yay4gQSBtYXBwaW5nCisgICAgICogZnJvbSB0aGUgZ2VuZXJhdGVkIHVuaXF1ZSBpZCB0byBuZXR3b3JrIGlkIG9mIHRoZSBuZXR3b3JrIGlzIG5lZWRlZCB0bworICAgICAqIG1hcCBzdXBwbGljYW50IGNvbmZpZyB0byBJUCBjb25maWd1cmF0aW9uLiAqLworICAgIHByaXZhdGUgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBtTmV0d29ya0lkcyA9CisgICAgICAgICAgICBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPigpOworCisgICAgLyogVHJhY2tzIHRoZSBoaWdoZXN0IHByaW9yaXR5IG9mIGNvbmZpZ3VyZWQgbmV0d29ya3MgKi8KKyAgICBwcml2YXRlIGludCBtTGFzdFByaW9yaXR5ID0gLTE7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgaXBDb25maWdGaWxlID0gRW52aXJvbm1lbnQuZ2V0RGF0YURpcmVjdG9yeSgpICsKKyAgICAgICAgICAgICIvbWlzYy93aWZpL2lwY29uZmlnLnR4dCI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSVBDT05GSUdfRklMRV9WRVJTSU9OID0gMjsKKworICAgIC8qIElQIGFuZCBwcm94eSBjb25maWd1cmF0aW9uIGtleXMgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfS0VZID0gImlkIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVBfQVNTSUdOTUVOVF9LRVkgPSAiaXBBc3NpZ25tZW50IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTElOS19BRERSRVNTX0tFWSA9ICJsaW5rQWRkcmVzcyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEdBVEVXQVlfS0VZID0gImdhdGV3YXkiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBETlNfS0VZID0gImRucyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1hZX1NFVFRJTkdTX0tFWSA9ICJwcm94eVNldHRpbmdzIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPWFlfSE9TVF9LRVkgPSAicHJveHlIb3N0IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPWFlfUE9SVF9LRVkgPSAicHJveHlQb3J0IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPWFlfUEFDX0ZJTEUgPSAicHJveHlQYWMiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWENMVVNJT05fTElTVF9LRVkgPSAiZXhjbHVzaW9uTGlzdCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVPUyA9ICJlb3MiOworCisKKyAgICAvKiBFbnRlcnByaXNlIGNvbmZpZ3VyYXRpb24ga2V5cyAqLworICAgIC8qKgorICAgICAqIEluIG9sZCBjb25maWd1cmF0aW9ucywgdGhlICJwcml2YXRlX2tleSIgZmllbGQgd2FzIHVzZWQuIEhvd2V2ZXIsIG5ld2VyCisgICAgICogY29uZmlndXJhdGlvbnMgdXNlIHRoZSBrZXlfaWQgZmllbGQgd2l0aCB0aGUgZW5naW5lX2lkIHNldCB0byAia2V5c3RvcmUiLgorICAgICAqIElmIHRoaXMgZmllbGQgaXMgZm91bmQgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIHRoZSBtaWdyYXRpb24gY29kZSBpcworICAgICAqIHRyaWdnZXJlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPTERfUFJJVkFURV9LRVlfTkFNRSA9ICJwcml2YXRlX2tleSI7CisKKyAgICAvKiogVGhpcyByZXByZXNlbnRzIGFuIGVtcHR5IHZhbHVlIG9mIGFuIGVudGVycHJpc2UgZmllbGQuCisgICAgICogTlVMTCBpcyB1c2VkIGF0IHdwYV9zdXBwbGljYW50IHRvIGluZGljYXRlIGFuIGVtcHR5IHZhbHVlCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBFTVBUWV9WQUxVRSA9ICJOVUxMIjsKKworICAgIC8qKiBJbnRlcm5hbCB1c2Ugb25seSAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVOVEVSUFJJU0VfQ09ORklHX1NVUFBMSUNBTlRfS0VZUyA9IG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICBXaWZpRW50ZXJwcmlzZUNvbmZpZy5FQVBfS0VZLCBXaWZpRW50ZXJwcmlzZUNvbmZpZy5QSEFTRTJfS0VZLAorICAgICAgICAgICAgV2lmaUVudGVycHJpc2VDb25maWcuSURFTlRJVFlfS0VZLCBXaWZpRW50ZXJwcmlzZUNvbmZpZy5BTk9OX0lERU5USVRZX0tFWSwKKyAgICAgICAgICAgIFdpZmlFbnRlcnByaXNlQ29uZmlnLlBBU1NXT1JEX0tFWSwgV2lmaUVudGVycHJpc2VDb25maWcuQ0xJRU5UX0NFUlRfS0VZLAorICAgICAgICAgICAgV2lmaUVudGVycHJpc2VDb25maWcuQ0FfQ0VSVF9LRVksIFdpZmlFbnRlcnByaXNlQ29uZmlnLlNVQkpFQ1RfTUFUQ0hfS0VZLAorICAgICAgICAgICAgV2lmaUVudGVycHJpc2VDb25maWcuRU5HSU5FX0tFWSwgV2lmaUVudGVycHJpc2VDb25maWcuRU5HSU5FX0lEX0tFWSwKKyAgICAgICAgICAgIFdpZmlFbnRlcnByaXNlQ29uZmlnLlBSSVZBVEVfS0VZX0lEX0tFWSB9OworCisgICAgcHJpdmF0ZSBmaW5hbCBMb2NhbExvZyBtTG9jYWxMb2c7CisgICAgcHJpdmF0ZSBmaW5hbCBXcGFDb25maWdGaWxlT2JzZXJ2ZXIgbUZpbGVPYnNlcnZlcjsKKworICAgIHByaXZhdGUgV2lmaU5hdGl2ZSBtV2lmaU5hdGl2ZTsKKyAgICBwcml2YXRlIGZpbmFsIEtleVN0b3JlIG1LZXlTdG9yZSA9IEtleVN0b3JlLmdldEluc3RhbmNlKCk7CisKKyAgICBXaWZpQ29uZmlnU3RvcmUoQ29udGV4dCBjLCBXaWZpTmF0aXZlIHduKSB7CisgICAgICAgIG1Db250ZXh0ID0gYzsKKyAgICAgICAgbVdpZmlOYXRpdmUgPSB3bjsKKworICAgICAgICBpZiAoVkRCRykgeworICAgICAgICAgICAgbUxvY2FsTG9nID0gbVdpZmlOYXRpdmUuZ2V0TG9jYWxMb2coKTsKKyAgICAgICAgICAgIG1GaWxlT2JzZXJ2ZXIgPSBuZXcgV3BhQ29uZmlnRmlsZU9ic2VydmVyKCk7CisgICAgICAgICAgICBtRmlsZU9ic2VydmVyLnN0YXJ0V2F0Y2hpbmcoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1Mb2NhbExvZyA9IG51bGw7CisgICAgICAgICAgICBtRmlsZU9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFdwYUNvbmZpZ0ZpbGVPYnNlcnZlciBleHRlbmRzIEZpbGVPYnNlcnZlciB7CisKKyAgICAgICAgcHVibGljIFdwYUNvbmZpZ0ZpbGVPYnNlcnZlcigpIHsKKyAgICAgICAgICAgIHN1cGVyKFNVUFBMSUNBTlRfQ09ORklHX0ZJTEUsIENMT1NFX1dSSVRFKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkV2ZW50KGludCBldmVudCwgU3RyaW5nIHBhdGgpIHsKKyAgICAgICAgICAgIGlmIChldmVudCA9PSBDTE9TRV9XUklURSkgeworICAgICAgICAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKFNVUFBMSUNBTlRfQ09ORklHX0ZJTEUpOworICAgICAgICAgICAgICAgIGlmIChWREJHKSBsb2NhbExvZygid3BhX3N1cHBsaWNhbnQuY29uZiBjaGFuZ2VkOyBuZXcgc2l6ZSA9ICIgKyBmaWxlLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogRmV0Y2ggdGhlIGxpc3Qgb2YgY29uZmlndXJlZCBuZXR3b3JrcworICAgICAqIGFuZCBlbmFibGUgYWxsIHN0b3JlZCBuZXR3b3JrcyBpbiBzdXBwbGljYW50LgorICAgICAqLworICAgIHZvaWQgbG9hZEFuZEVuYWJsZUFsbE5ldHdvcmtzKCkgeworICAgICAgICBpZiAoREJHKSBsb2coIkxvYWRpbmcgY29uZmlnIGFuZCBlbmFibGluZyBhbGwgbmV0d29ya3MiKTsKKyAgICAgICAgbG9hZENvbmZpZ3VyZWROZXR3b3JrcygpOworICAgICAgICBlbmFibGVBbGxOZXR3b3JrcygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZldGNoIHRoZSBsaXN0IG9mIGN1cnJlbnRseSBjb25maWd1cmVkIG5ldHdvcmtzCisgICAgICogQHJldHVybiBMaXN0IG9mIG5ldHdvcmtzCisgICAgICovCisgICAgTGlzdDxXaWZpQ29uZmlndXJhdGlvbj4gZ2V0Q29uZmlndXJlZE5ldHdvcmtzKCkgeworICAgICAgICBMaXN0PFdpZmlDb25maWd1cmF0aW9uPiBuZXR3b3JrcyA9IG5ldyBBcnJheUxpc3Q8V2lmaUNvbmZpZ3VyYXRpb24+KCk7CisgICAgICAgIGZvcihXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgOiBtQ29uZmlndXJlZE5ldHdvcmtzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBuZXR3b3Jrcy5hZGQobmV3IFdpZmlDb25maWd1cmF0aW9uKGNvbmZpZykpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXR3b3JrczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBlbmFibGUgYWxsIG5ldHdvcmtzIGFuZCBzYXZlIGNvbmZpZy4gVGhpcyB3aWxsIGJlIGEgbm8tb3AgaWYgdGhlIGxpc3QKKyAgICAgKiBvZiBjb25maWd1cmVkIG5ldHdvcmtzIGluZGljYXRlcyBhbGwgbmV0d29ya3MgYXMgYmVpbmcgZW5hYmxlZAorICAgICAqLworICAgIHZvaWQgZW5hYmxlQWxsTmV0d29ya3MoKSB7CisgICAgICAgIGJvb2xlYW4gbmV0d29ya0VuYWJsZWRTdGF0ZUNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yKFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA6IG1Db25maWd1cmVkTmV0d29ya3MudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmKGNvbmZpZyAhPSBudWxsICYmIGNvbmZpZy5zdGF0dXMgPT0gU3RhdHVzLkRJU0FCTEVEKSB7CisgICAgICAgICAgICAgICAgaWYobVdpZmlOYXRpdmUuZW5hYmxlTmV0d29yayhjb25maWcubmV0d29ya0lkLCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0d29ya0VuYWJsZWRTdGF0ZUNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBjb25maWcuc3RhdHVzID0gU3RhdHVzLkVOQUJMRUQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nZSgiRW5hYmxlIG5ldHdvcmsgZmFpbGVkIG9uICIgKyBjb25maWcubmV0d29ya0lkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobmV0d29ya0VuYWJsZWRTdGF0ZUNoYW5nZWQpIHsKKyAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNhdmVDb25maWcoKTsKKyAgICAgICAgICAgIHNlbmRDb25maWd1cmVkTmV0d29ya3NDaGFuZ2VkQnJvYWRjYXN0KCk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqIFNlbGVjdHMgdGhlIHNwZWNpZmllZCBuZXR3b3JrIGZvciBjb25uZWN0aW9uLiBUaGlzIGludm9sdmVzCisgICAgICogdXBkYXRpbmcgdGhlIHByaW9yaXR5IG9mIGFsbCB0aGUgbmV0d29ya3MgYW5kIGVuYWJsaW5nIHRoZSBnaXZlbgorICAgICAqIG5ldHdvcmsgd2hpbGUgZGlzYWJsaW5nIG90aGVycy4KKyAgICAgKgorICAgICAqIFNlbGVjdGluZyBhIG5ldHdvcmsgd2lsbCBsZWF2ZSB0aGUgb3RoZXIgbmV0d29ya3MgZGlzYWJsZWQgYW5kCisgICAgICogYSBjYWxsIHRvIGVuYWJsZUFsbE5ldHdvcmtzKCkgbmVlZHMgdG8gYmUgaXNzdWVkIHVwb24gYSBjb25uZWN0aW9uCisgICAgICogb3IgYSBmYWlsdXJlIGV2ZW50IGZyb20gc3VwcGxpY2FudAorICAgICAqCisgICAgICogQHBhcmFtIG5ldElkIG5ldHdvcmsgdG8gc2VsZWN0IGZvciBjb25uZWN0aW9uCisgICAgICogQHJldHVybiBmYWxzZSBpZiB0aGUgbmV0d29yayBpZCBpcyBpbnZhbGlkCisgICAgICovCisgICAgYm9vbGVhbiBzZWxlY3ROZXR3b3JrKGludCBuZXRJZCkgeworICAgICAgICBpZiAoVkRCRykgbG9jYWxMb2coInNlbGVjdE5ldHdvcmsiLCBuZXRJZCk7CisgICAgICAgIGlmIChuZXRJZCA9PSBJTlZBTElEX05FVFdPUktfSUQpIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBSZXNldCB0aGUgcHJpb3JpdHkgb2YgZWFjaCBuZXR3b3JrIGF0IHN0YXJ0IG9yIGlmIGl0IGdvZXMgdG9vIGhpZ2guCisgICAgICAgIGlmIChtTGFzdFByaW9yaXR5ID09IC0xIHx8IG1MYXN0UHJpb3JpdHkgPiAxMDAwMDAwKSB7CisgICAgICAgICAgICBmb3IoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnIDogbUNvbmZpZ3VyZWROZXR3b3Jrcy52YWx1ZXMoKSkgeworICAgICAgICAgICAgICAgIGlmIChjb25maWcubmV0d29ya0lkICE9IElOVkFMSURfTkVUV09SS19JRCkgeworICAgICAgICAgICAgICAgICAgICBjb25maWcucHJpb3JpdHkgPSAwOworICAgICAgICAgICAgICAgICAgICBhZGRPclVwZGF0ZU5ldHdvcmtOYXRpdmUoY29uZmlnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtTGFzdFByaW9yaXR5ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNldCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eSBhbmQgc2F2ZSB0aGUgY29uZmlndXJhdGlvbi4KKyAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnID0gbmV3IFdpZmlDb25maWd1cmF0aW9uKCk7CisgICAgICAgIGNvbmZpZy5uZXR3b3JrSWQgPSBuZXRJZDsKKyAgICAgICAgY29uZmlnLnByaW9yaXR5ID0gKyttTGFzdFByaW9yaXR5OworCisgICAgICAgIGFkZE9yVXBkYXRlTmV0d29ya05hdGl2ZShjb25maWcpOworICAgICAgICBtV2lmaU5hdGl2ZS5zYXZlQ29uZmlnKCk7CisKKyAgICAgICAgLyogRW5hYmxlIHRoZSBnaXZlbiBuZXR3b3JrIHdoaWxlIGRpc2FibGluZyBhbGwgb3RoZXIgbmV0d29ya3MgKi8KKyAgICAgICAgZW5hYmxlTmV0d29ya1dpdGhvdXRCcm9hZGNhc3QobmV0SWQsIHRydWUpOworCisgICAgICAgLyogQXZvaWQgc2F2aW5nIHRoZSBjb25maWcgJiBzZW5kaW5nIGEgYnJvYWRjYXN0IHRvIHByZXZlbnQgc2V0dGluZ3MKKyAgICAgICAgKiBmcm9tIGRpc3BsYXlpbmcgYSBkaXNhYmxlZCBsaXN0IG9mIG5ldHdvcmtzICovCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZC91cGRhdGUgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIGFuZCBzYXZlIGNvbmZpZworICAgICAqCisgICAgICogQHBhcmFtIGNvbmZpZyBXaWZpQ29uZmlndXJhdGlvbiB0byBiZSBzYXZlZAorICAgICAqIEByZXR1cm4gbmV0d29yayB1cGRhdGUgcmVzdWx0CisgICAgICovCisgICAgTmV0d29ya1VwZGF0ZVJlc3VsdCBzYXZlTmV0d29yayhXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKKyAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJzYXZlTmV0d29yayIsIGNvbmZpZy5uZXR3b3JrSWQpOworICAgICAgICAvLyBBIG5ldyBuZXR3b3JrIGNhbm5vdCBoYXZlIG51bGwgU1NJRAorICAgICAgICBpZiAoY29uZmlnID09IG51bGwgfHwgKGNvbmZpZy5uZXR3b3JrSWQgPT0gSU5WQUxJRF9ORVRXT1JLX0lEICYmCisgICAgICAgICAgICAgICAgY29uZmlnLlNTSUQgPT0gbnVsbCkpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTmV0d29ya1VwZGF0ZVJlc3VsdChJTlZBTElEX05FVFdPUktfSUQpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBuZXdOZXR3b3JrID0gKGNvbmZpZy5uZXR3b3JrSWQgPT0gSU5WQUxJRF9ORVRXT1JLX0lEKTsKKyAgICAgICAgTmV0d29ya1VwZGF0ZVJlc3VsdCByZXN1bHQgPSBhZGRPclVwZGF0ZU5ldHdvcmtOYXRpdmUoY29uZmlnKTsKKyAgICAgICAgaW50IG5ldElkID0gcmVzdWx0LmdldE5ldHdvcmtJZCgpOworICAgICAgICAvKiBlbmFibGUgYSBuZXcgbmV0d29yayAqLworICAgICAgICBpZiAobmV3TmV0d29yayAmJiBuZXRJZCAhPSBJTlZBTElEX05FVFdPUktfSUQpIHsKKyAgICAgICAgICAgIG1XaWZpTmF0aXZlLmVuYWJsZU5ldHdvcmsobmV0SWQsIGZhbHNlKTsKKyAgICAgICAgICAgIG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KG5ldElkKS5zdGF0dXMgPSBTdGF0dXMuRU5BQkxFRDsKKyAgICAgICAgfQorICAgICAgICBtV2lmaU5hdGl2ZS5zYXZlQ29uZmlnKCk7CisgICAgICAgIHNlbmRDb25maWd1cmVkTmV0d29ya3NDaGFuZ2VkQnJvYWRjYXN0KGNvbmZpZywgcmVzdWx0LmlzTmV3TmV0d29yaygpID8KKyAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0FEREVEIDogV2lmaU1hbmFnZXIuQ0hBTkdFX1JFQVNPTl9DT05GSUdfQ0hBTkdFKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIHVwZGF0ZVN0YXR1cyhpbnQgbmV0SWQsIERldGFpbGVkU3RhdGUgc3RhdGUpIHsKKyAgICAgICAgaWYgKG5ldElkICE9IElOVkFMSURfTkVUV09SS19JRCkgeworICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnID0gbUNvbmZpZ3VyZWROZXR3b3Jrcy5nZXQobmV0SWQpOworICAgICAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSByZXR1cm47CisgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDT05ORUNURUQ6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zdGF0dXMgPSBTdGF0dXMuQ1VSUkVOVDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBESVNDT05ORUNURUQ6CisgICAgICAgICAgICAgICAgICAgIC8vSWYgbmV0d29yayBpcyBhbHJlYWR5IGRpc2FibGVkLCBrZWVwIHRoZSBzdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5zdGF0dXMgPT0gU3RhdHVzLkNVUlJFTlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zdGF0dXMgPSBTdGF0dXMuRU5BQkxFRDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAvL2RvIG5vdGhpbmcsIHJldGFpbiB0aGUgZXhpc3Rpbmcgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGb3JnZXQgdGhlIHNwZWNpZmllZCBuZXR3b3JrIGFuZCBzYXZlIGNvbmZpZworICAgICAqCisgICAgICogQHBhcmFtIG5ldElkIG5ldHdvcmsgdG8gZm9yZ2V0CisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgaXQgc3VjY2VlZHMsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCisgICAgICovCisgICAgYm9vbGVhbiBmb3JnZXROZXR3b3JrKGludCBuZXRJZCkgeworICAgICAgICBpZiAoVkRCRykgbG9jYWxMb2coImZvcmdldE5ldHdvcmsiLCBuZXRJZCk7CisgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5yZW1vdmVOZXR3b3JrKG5ldElkKSkgeworICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2F2ZUNvbmZpZygpOworICAgICAgICAgICAgcmVtb3ZlQ29uZmlnQW5kU2VuZEJyb2FkY2FzdElmTmVlZGVkKG5ldElkKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHJlbW92ZSBuZXR3b3JrICIgKyBuZXRJZCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGQvdXBkYXRlIGEgbmV0d29yay4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHNhdmVDb25maWcgb3BlcmF0aW9uLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcHVibGljCisgICAgICogQVBJLiBUaGUgbW9yZSBwb3dlcmZ1bCBzYXZlTmV0d29yaygpIGlzIHVzZWQgYnkgdGhlCisgICAgICogc3RhdGUgbWFjaGluZQorICAgICAqCisgICAgICogQHBhcmFtIGNvbmZpZyB3aWZpIGNvbmZpZ3VyYXRpb24gdG8gYWRkL3VwZGF0ZQorICAgICAqIEByZXR1cm4gbmV0d29yayBJZAorICAgICAqLworICAgIGludCBhZGRPclVwZGF0ZU5ldHdvcmsoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnKSB7CisgICAgICAgIGlmIChWREJHKSBsb2NhbExvZygiYWRkT3JVcGRhdGVOZXR3b3JrIiwgY29uZmlnLm5ldHdvcmtJZCk7CisgICAgICAgIE5ldHdvcmtVcGRhdGVSZXN1bHQgcmVzdWx0ID0gYWRkT3JVcGRhdGVOZXR3b3JrTmF0aXZlKGNvbmZpZyk7CisgICAgICAgIGlmIChyZXN1bHQuZ2V0TmV0d29ya0lkKCkgIT0gV2lmaUNvbmZpZ3VyYXRpb24uSU5WQUxJRF9ORVRXT1JLX0lEKSB7CisgICAgICAgICAgICBzZW5kQ29uZmlndXJlZE5ldHdvcmtzQ2hhbmdlZEJyb2FkY2FzdChtQ29uZmlndXJlZE5ldHdvcmtzLmdldChyZXN1bHQuZ2V0TmV0d29ya0lkKCkpLAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXNOZXdOZXR3b3JrID8gV2lmaU1hbmFnZXIuQ0hBTkdFX1JFQVNPTl9BRERFRCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuQ0hBTkdFX1JFQVNPTl9DT05GSUdfQ0hBTkdFKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0LmdldE5ldHdvcmtJZCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIG5ldHdvcmsuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBzYXZlQ29uZmlnIG9wZXJhdGlvbi4KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHJldGFpbmVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHB1YmxpYworICAgICAqIEFQSS4gVGhlIG1vcmUgcG93ZXJmdWwgZm9yZ2V0TmV0d29yaygpIGlzIHVzZWQgYnkgdGhlCisgICAgICogc3RhdGUgbWFjaGluZSBmb3IgbmV0d29yayByZW1vdmFsCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayB0byBiZSByZW1vdmVkCisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgaXQgc3VjY2VlZHMsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCisgICAgICovCisgICAgYm9vbGVhbiByZW1vdmVOZXR3b3JrKGludCBuZXRJZCkgeworICAgICAgICBpZiAoVkRCRykgbG9jYWxMb2coInJlbW92ZU5ldHdvcmsiLCBuZXRJZCk7CisgICAgICAgIGJvb2xlYW4gcmV0ID0gbVdpZmlOYXRpdmUucmVtb3ZlTmV0d29yayhuZXRJZCk7CisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgIHJlbW92ZUNvbmZpZ0FuZFNlbmRCcm9hZGNhc3RJZk5lZWRlZChuZXRJZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVtb3ZlQ29uZmlnQW5kU2VuZEJyb2FkY2FzdElmTmVlZGVkKGludCBuZXRJZCkgeworICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7CisgICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSBhc3NvY2lhdGVkIGtleXMKKyAgICAgICAgICAgIGlmIChjb25maWcuZW50ZXJwcmlzZUNvbmZpZyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlS2V5cyhjb25maWcuZW50ZXJwcmlzZUNvbmZpZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQ29uZmlndXJlZE5ldHdvcmtzLnJlbW92ZShuZXRJZCk7CisgICAgICAgICAgICBtTmV0d29ya0lkcy5yZW1vdmUoY29uZmlnS2V5KGNvbmZpZykpOworCisgICAgICAgICAgICB3cml0ZUlwQW5kUHJveHlDb25maWd1cmF0aW9ucygpOworICAgICAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoY29uZmlnLCBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX1JFTU9WRUQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRW5hYmxlIGEgbmV0d29yay4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHNhdmVDb25maWcgb3BlcmF0aW9uLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcHVibGljCisgICAgICogQVBJLiBUaGUgbW9yZSBwb3dlcmZ1bCBzZWxlY3ROZXR3b3JrKCkvc2F2ZU5ldHdvcmsoKSBpcyB1c2VkIGJ5IHRoZQorICAgICAqIHN0YXRlIG1hY2hpbmUgZm9yIGNvbm5lY3RpbmcgdG8gYSBuZXR3b3JrCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayB0byBiZSBlbmFibGVkCisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgaXQgc3VjY2VlZHMsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCisgICAgICovCisgICAgYm9vbGVhbiBlbmFibGVOZXR3b3JrKGludCBuZXRJZCwgYm9vbGVhbiBkaXNhYmxlT3RoZXJzKSB7CisgICAgICAgIGJvb2xlYW4gcmV0ID0gZW5hYmxlTmV0d29ya1dpdGhvdXRCcm9hZGNhc3QobmV0SWQsIGRpc2FibGVPdGhlcnMpOworICAgICAgICBpZiAoZGlzYWJsZU90aGVycykgeworICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJlbmFibGVOZXR3b3JrKGRpc2FibGVPdGhlcnM9dHJ1ZSkgIiwgbmV0SWQpOworICAgICAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChWREJHKSBsb2NhbExvZygiZW5hYmxlTmV0d29yayhkaXNhYmxlT3RoZXJzPWZhbHNlKSAiLCBuZXRJZCk7CisgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBlbmFibGVkTmV0d29yayA9IG51bGw7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQobUNvbmZpZ3VyZWROZXR3b3JrcykgeworICAgICAgICAgICAgICAgIGVuYWJsZWROZXR3b3JrID0gbUNvbmZpZ3VyZWROZXR3b3Jrcy5nZXQobmV0SWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gY2hlY2sganVzdCBpbiBjYXNlIHRoZSBuZXR3b3JrIHdhcyByZW1vdmVkIGJ5IHNvbWVvbmUgZWxzZS4KKyAgICAgICAgICAgIGlmIChlbmFibGVkTmV0d29yayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoZW5hYmxlZE5ldHdvcmssCisgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0NPTkZJR19DSEFOR0UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgYm9vbGVhbiBlbmFibGVOZXR3b3JrV2l0aG91dEJyb2FkY2FzdChpbnQgbmV0SWQsIGJvb2xlYW4gZGlzYWJsZU90aGVycykgeworICAgICAgICBib29sZWFuIHJldCA9IG1XaWZpTmF0aXZlLmVuYWJsZU5ldHdvcmsobmV0SWQsIGRpc2FibGVPdGhlcnMpOworCisgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KG5ldElkKTsKKyAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSBjb25maWcuc3RhdHVzID0gU3RhdHVzLkVOQUJMRUQ7CisKKyAgICAgICAgaWYgKGRpc2FibGVPdGhlcnMpIHsKKyAgICAgICAgICAgIG1hcmtBbGxOZXR3b3Jrc0Rpc2FibGVkRXhjZXB0KG5ldElkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHZvaWQgZGlzYWJsZUFsbE5ldHdvcmtzKCkgeworICAgICAgICBpZiAoVkRCRykgbG9jYWxMb2coImRpc2FibGVBbGxOZXR3b3JrcyIpOworICAgICAgICBib29sZWFuIG5ldHdvcmtEaXNhYmxlZCA9IGZhbHNlOworICAgICAgICBmb3IoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnIDogbUNvbmZpZ3VyZWROZXR3b3Jrcy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYoY29uZmlnICE9IG51bGwgJiYgY29uZmlnLnN0YXR1cyAhPSBTdGF0dXMuRElTQUJMRUQpIHsKKyAgICAgICAgICAgICAgICBpZihtV2lmaU5hdGl2ZS5kaXNhYmxlTmV0d29yayhjb25maWcubmV0d29ya0lkKSkgeworICAgICAgICAgICAgICAgICAgICBuZXR3b3JrRGlzYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBjb25maWcuc3RhdHVzID0gU3RhdHVzLkRJU0FCTEVEOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkRpc2FibGUgbmV0d29yayBmYWlsZWQgb24gIiArIGNvbmZpZy5uZXR3b3JrSWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZXR3b3JrRGlzYWJsZWQpIHsKKyAgICAgICAgICAgIHNlbmRDb25maWd1cmVkTmV0d29ya3NDaGFuZ2VkQnJvYWRjYXN0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgLyoqCisgICAgICogRGlzYWJsZSBhIG5ldHdvcmsuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBzYXZlQ29uZmlnIG9wZXJhdGlvbi4KKyAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayB0byBiZSBkaXNhYmxlZAorICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGl0IHN1Y2NlZWRzLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQorICAgICAqLworICAgIGJvb2xlYW4gZGlzYWJsZU5ldHdvcmsoaW50IG5ldElkKSB7CisgICAgICAgIHJldHVybiBkaXNhYmxlTmV0d29yayhuZXRJZCwgV2lmaUNvbmZpZ3VyYXRpb24uRElTQUJMRURfVU5LTk9XTl9SRUFTT04pOworICAgIH0KKworICAgIC8qKgorICAgICAqIERpc2FibGUgYSBuZXR3b3JrLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gc2F2ZUNvbmZpZyBvcGVyYXRpb24uCisgICAgICogQHBhcmFtIG5ldElkIG5ldHdvcmsgdG8gYmUgZGlzYWJsZWQKKyAgICAgKiBAcGFyYW0gcmVhc29uIHJlYXNvbiBjb2RlIG5ldHdvcmsgd2FzIGRpc2FibGVkCisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgaXQgc3VjY2VlZHMsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCisgICAgICovCisgICAgYm9vbGVhbiBkaXNhYmxlTmV0d29yayhpbnQgbmV0SWQsIGludCByZWFzb24pIHsKKyAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJkaXNhYmxlTmV0d29yayIsIG5ldElkKTsKKyAgICAgICAgYm9vbGVhbiByZXQgPSBtV2lmaU5hdGl2ZS5kaXNhYmxlTmV0d29yayhuZXRJZCk7CisgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIG5ldHdvcmsgPSBudWxsOworICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7CisgICAgICAgIC8qIE9ubHkgY2hhbmdlIHRoZSByZWFzb24gaWYgdGhlIG5ldHdvcmsgd2FzIG5vdCBwcmV2aW91c2x5IGRpc2FibGVkICovCisgICAgICAgIGlmIChjb25maWcgIT0gbnVsbCAmJiBjb25maWcuc3RhdHVzICE9IFN0YXR1cy5ESVNBQkxFRCkgeworICAgICAgICAgICAgY29uZmlnLnN0YXR1cyA9IFN0YXR1cy5ESVNBQkxFRDsKKyAgICAgICAgICAgIGNvbmZpZy5kaXNhYmxlUmVhc29uID0gcmVhc29uOworICAgICAgICAgICAgbmV0d29yayA9IGNvbmZpZzsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV0d29yayAhPSBudWxsKSB7CisgICAgICAgICAgICBzZW5kQ29uZmlndXJlZE5ldHdvcmtzQ2hhbmdlZEJyb2FkY2FzdChuZXR3b3JrLAorICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0NPTkZJR19DSEFOR0UpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2F2ZSB0aGUgY29uZmlndXJlZCBuZXR3b3JrcyBpbiBzdXBwbGljYW50IHRvIGRpc2sKKyAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBpdCBzdWNjZWVkcywge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBib29sZWFuIHNhdmVDb25maWcoKSB7CisgICAgICAgIHJldHVybiBtV2lmaU5hdGl2ZS5zYXZlQ29uZmlnKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RhcnQgV1BTIHBpbiBtZXRob2QgY29uZmlndXJhdGlvbiB3aXRoIHBpbiBvYnRhaW5lZAorICAgICAqIGZyb20gdGhlIGFjY2VzcyBwb2ludAorICAgICAqIEBwYXJhbSBjb25maWcgV1BTIGNvbmZpZ3VyYXRpb24KKyAgICAgKiBAcmV0dXJuIFdwcyByZXN1bHQgY29udGFpbmluZyBzdGF0dXMgYW5kIHBpbgorICAgICAqLworICAgIFdwc1Jlc3VsdCBzdGFydFdwc1dpdGhQaW5Gcm9tQWNjZXNzUG9pbnQoV3BzSW5mbyBjb25maWcpIHsKKyAgICAgICAgV3BzUmVzdWx0IHJlc3VsdCA9IG5ldyBXcHNSZXN1bHQoKTsKKyAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnN0YXJ0V3BzUmVnaXN0cmFyKGNvbmZpZy5CU1NJRCwgY29uZmlnLnBpbikpIHsKKyAgICAgICAgICAgIC8qIFdQUyBsZWF2ZXMgYWxsIG5ldHdvcmtzIGRpc2FibGVkICovCisgICAgICAgICAgICBtYXJrQWxsTmV0d29ya3NEaXNhYmxlZCgpOworICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFdwc1Jlc3VsdC5TdGF0dXMuU1VDQ0VTUzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzdGFydCBXUFMgcGluIG1ldGhvZCBjb25maWd1cmF0aW9uIik7CisgICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gV3BzUmVzdWx0LlN0YXR1cy5GQUlMVVJFOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RhcnQgV1BTIHBpbiBtZXRob2QgY29uZmlndXJhdGlvbiB3aXRoIHBpbiBvYnRhaW5lZAorICAgICAqIGZyb20gdGhlIGRldmljZQorICAgICAqIEByZXR1cm4gV3BzUmVzdWx0IGluZGljYXRpbmcgc3RhdHVzIGFuZCBwaW4KKyAgICAgKi8KKyAgICBXcHNSZXN1bHQgc3RhcnRXcHNXaXRoUGluRnJvbURldmljZShXcHNJbmZvIGNvbmZpZykgeworICAgICAgICBXcHNSZXN1bHQgcmVzdWx0ID0gbmV3IFdwc1Jlc3VsdCgpOworICAgICAgICByZXN1bHQucGluID0gbVdpZmlOYXRpdmUuc3RhcnRXcHNQaW5EaXNwbGF5KGNvbmZpZy5CU1NJRCk7CisgICAgICAgIC8qIFdQUyBsZWF2ZXMgYWxsIG5ldHdvcmtzIGRpc2FibGVkICovCisgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkocmVzdWx0LnBpbikpIHsKKyAgICAgICAgICAgIG1hcmtBbGxOZXR3b3Jrc0Rpc2FibGVkKCk7CisgICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gV3BzUmVzdWx0LlN0YXR1cy5TVUNDRVNTOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHN0YXJ0IFdQUyBwaW4gbWV0aG9kIGNvbmZpZ3VyYXRpb24iKTsKKyAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBXcHNSZXN1bHQuU3RhdHVzLkZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdGFydCBXUFMgcHVzaCBidXR0b24gY29uZmlndXJhdGlvbgorICAgICAqIEBwYXJhbSBjb25maWcgV1BTIGNvbmZpZ3VyYXRpb24KKyAgICAgKiBAcmV0dXJuIFdwc1Jlc3VsdCBpbmRpY2F0aW5nIHN0YXR1cyBhbmQgcGluCisgICAgICovCisgICAgV3BzUmVzdWx0IHN0YXJ0V3BzUGJjKFdwc0luZm8gY29uZmlnKSB7CisgICAgICAgIFdwc1Jlc3VsdCByZXN1bHQgPSBuZXcgV3BzUmVzdWx0KCk7CisgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5zdGFydFdwc1BiYyhjb25maWcuQlNTSUQpKSB7CisgICAgICAgICAgICAvKiBXUFMgbGVhdmVzIGFsbCBuZXR3b3JrcyBkaXNhYmxlZCAqLworICAgICAgICAgICAgbWFya0FsbE5ldHdvcmtzRGlzYWJsZWQoKTsKKyAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBXcHNSZXN1bHQuU3RhdHVzLlNVQ0NFU1M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc3RhcnQgV1BTIHB1c2ggYnV0dG9uIGNvbmZpZ3VyYXRpb24iKTsKKyAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBXcHNSZXN1bHQuU3RhdHVzLkZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGZXRjaCB0aGUgbGluayBwcm9wZXJ0aWVzIGZvciBhIGdpdmVuIG5ldHdvcmsgaWQKKyAgICAgKiBAcmV0dXJuIExpbmtQcm9wZXJ0aWVzIGZvciB0aGUgZ2l2ZW4gbmV0d29yayBpZAorICAgICAqLworICAgIExpbmtQcm9wZXJ0aWVzIGdldExpbmtQcm9wZXJ0aWVzKGludCBuZXRJZCkgeworICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7CisgICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkgcmV0dXJuIG5ldyBMaW5rUHJvcGVydGllcyhjb25maWcubGlua1Byb3BlcnRpZXMpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBzZXQgSVAgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBuZXR3b3JrIGlkCisgICAgICovCisgICAgdm9pZCBzZXRMaW5rUHJvcGVydGllcyhpbnQgbmV0SWQsIExpbmtQcm9wZXJ0aWVzIGxpbmtQcm9wZXJ0aWVzKSB7CisgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KG5ldElkKTsKKyAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7CisgICAgICAgICAgICAvLyBhZGQgb2xkIHByb3h5IGRldGFpbHMgLSBUT0RPIC0gaXMgdGhpcyBzdGlsbCBuZWVkZWQ/CisgICAgICAgICAgICBpZihjb25maWcubGlua1Byb3BlcnRpZXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLnNldEh0dHBQcm94eShjb25maWcubGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uZmlnLmxpbmtQcm9wZXJ0aWVzID0gbGlua1Byb3BlcnRpZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBjbGVhciBJUCBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIG5ldHdvcmsgaWQKKyAgICAgKiBAcGFyYW0gbmV0d29yayBpZAorICAgICAqLworICAgIHZvaWQgY2xlYXJMaW5rUHJvcGVydGllcyhpbnQgbmV0SWQpIHsKKyAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnID0gbUNvbmZpZ3VyZWROZXR3b3Jrcy5nZXQobmV0SWQpOworICAgICAgICBpZiAoY29uZmlnICE9IG51bGwgJiYgY29uZmlnLmxpbmtQcm9wZXJ0aWVzICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIENsZWFyIGV2ZXJ5dGhpbmcgZXhjZXB0IHByb3h5CisgICAgICAgICAgICBQcm94eVByb3BlcnRpZXMgcHJveHkgPSBjb25maWcubGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCk7CisgICAgICAgICAgICBjb25maWcubGlua1Byb3BlcnRpZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIGNvbmZpZy5saW5rUHJvcGVydGllcy5zZXRIdHRwUHJveHkocHJveHkpOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBGZXRjaCB0aGUgcHJveHkgcHJvcGVydGllcyBmb3IgYSBnaXZlbiBuZXR3b3JrIGlkCisgICAgICogQHBhcmFtIG5ldHdvcmsgaWQKKyAgICAgKiBAcmV0dXJuIFByb3h5UHJvcGVydGllcyBmb3IgdGhlIG5ldHdvcmsgaWQKKyAgICAgKi8KKyAgICBQcm94eVByb3BlcnRpZXMgZ2V0UHJveHlQcm9wZXJ0aWVzKGludCBuZXRJZCkgeworICAgICAgICBMaW5rUHJvcGVydGllcyBsaW5rUHJvcGVydGllcyA9IGdldExpbmtQcm9wZXJ0aWVzKG5ldElkKTsKKyAgICAgICAgaWYgKGxpbmtQcm9wZXJ0aWVzICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUHJveHlQcm9wZXJ0aWVzKGxpbmtQcm9wZXJ0aWVzLmdldEh0dHBQcm94eSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gaWYgdGhlIHNwZWNpZmllZCBuZXR3b3JrIGlzIHVzaW5nIHN0YXRpYyBJUAorICAgICAqIEBwYXJhbSBuZXR3b3JrIGlkCisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdXNpbmcgc3RhdGljIGlwIGZvciBuZXRJZAorICAgICAqLworICAgIGJvb2xlYW4gaXNVc2luZ1N0YXRpY0lwKGludCBuZXRJZCkgeworICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7CisgICAgICAgIGlmIChjb25maWcgIT0gbnVsbCAmJiBjb25maWcuaXBBc3NpZ25tZW50ID09IElwQXNzaWdubWVudC5TVEFUSUMpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gYSBzaW5nbGUgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIG1hZGUuCisgICAgICogQHBhcmFtIG5ldHdvcmsgVGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiB0aGF0IGNoYW5nZWQuCisgICAgICogQHBhcmFtIHJlYXNvbiBUaGUgcmVhc29uIGZvciB0aGUgY2hhbmdlLCBzaG91bGQgYmUgb25lIG9mIFdpZmlNYW5hZ2VyLkNIQU5HRV9SRUFTT05fQURERUQsCisgICAgICogV2lmaU1hbmFnZXIuQ0hBTkdFX1JFQVNPTl9SRU1PVkVELCBvciBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0NIQU5HRS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoV2lmaUNvbmZpZ3VyYXRpb24gbmV0d29yaywKKyAgICAgICAgICAgIGludCByZWFzb24pIHsKKyAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuQ09ORklHVVJFRF9ORVRXT1JLU19DSEFOR0VEX0FDVElPTik7CisgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTVVMVElQTEVfTkVUV09SS1NfQ0hBTkdFRCwgZmFsc2UpOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfV0lGSV9DT05GSUdVUkFUSU9OLCBuZXR3b3JrKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX0NIQU5HRV9SRUFTT04sIHJlYXNvbik7CisgICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2hvdWxkIGJlIGNhbGxlZCB3aGVuIG11bHRpcGxlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGFyZSBtYWRlLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBzZW5kQ29uZmlndXJlZE5ldHdvcmtzQ2hhbmdlZEJyb2FkY2FzdCgpIHsKKyAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuQ09ORklHVVJFRF9ORVRXT1JLU19DSEFOR0VEX0FDVElPTik7CisgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTVVMVElQTEVfTkVUV09SS1NfQ0hBTkdFRCwgdHJ1ZSk7CisgICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkQ29uZmlndXJlZE5ldHdvcmtzKCkgeworICAgICAgICBTdHJpbmcgbGlzdFN0ciA9IG1XaWZpTmF0aXZlLmxpc3ROZXR3b3JrcygpOworICAgICAgICBtTGFzdFByaW9yaXR5ID0gMDsKKworICAgICAgICBtQ29uZmlndXJlZE5ldHdvcmtzLmNsZWFyKCk7CisgICAgICAgIG1OZXR3b3JrSWRzLmNsZWFyKCk7CisKKyAgICAgICAgaWYgKGxpc3RTdHIgPT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBTdHJpbmdbXSBsaW5lcyA9IGxpc3RTdHIuc3BsaXQoIlxuIik7CisgICAgICAgIC8vIFNraXAgdGhlIGZpcnN0IGxpbmUsIHdoaWNoIGlzIGEgaGVhZGVyCisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IGxpbmVzW2ldLnNwbGl0KCJcdCIpOworICAgICAgICAgICAgLy8gbmV0d29yay1pZCB8IHNzaWQgfCBic3NpZCB8IGZsYWdzCisgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgV2lmaUNvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29uZmlnLm5ldHdvcmtJZCA9IEludGVnZXIucGFyc2VJbnQocmVzdWx0WzBdKTsKKyAgICAgICAgICAgIH0gY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gcmVhZCBuZXR3b3JrLWlkICciICsgcmVzdWx0WzBdICsgIiciKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMykgeworICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbM10uaW5kZXhPZigiW0NVUlJFTlRdIikgIT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zdGF0dXMgPSBXaWZpQ29uZmlndXJhdGlvbi5TdGF0dXMuQ1VSUkVOVDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRbM10uaW5kZXhPZigiW0RJU0FCTEVEXSIpICE9IC0xKQorICAgICAgICAgICAgICAgICAgICBjb25maWcuc3RhdHVzID0gV2lmaUNvbmZpZ3VyYXRpb24uU3RhdHVzLkRJU0FCTEVEOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLnN0YXR1cyA9IFdpZmlDb25maWd1cmF0aW9uLlN0YXR1cy5FTkFCTEVEOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25maWcuc3RhdHVzID0gV2lmaUNvbmZpZ3VyYXRpb24uU3RhdHVzLkVOQUJMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkTmV0d29ya1ZhcmlhYmxlcyhjb25maWcpOworICAgICAgICAgICAgaWYgKGNvbmZpZy5wcmlvcml0eSA+IG1MYXN0UHJpb3JpdHkpIHsKKyAgICAgICAgICAgICAgICBtTGFzdFByaW9yaXR5ID0gY29uZmlnLnByaW9yaXR5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uZmlnLmlwQXNzaWdubWVudCA9IElwQXNzaWdubWVudC5ESENQOworICAgICAgICAgICAgY29uZmlnLnByb3h5U2V0dGluZ3MgPSBQcm94eVNldHRpbmdzLk5PTkU7CisKKyAgICAgICAgICAgIGlmIChtTmV0d29ya0lkcy5jb250YWluc0tleShjb25maWdLZXkoY29uZmlnKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGF0IFNTSUQgaXMgYWxyZWFkeSBrbm93biwganVzdCBpZ25vcmUgdGhpcyBkdXBsaWNhdGUgZW50cnkKKyAgICAgICAgICAgICAgICBpZiAoVkRCRykgbG9jYWxMb2coImRpc2NhcmRlZCBkdXBsaWNhdGUgbmV0d29yayIsIGNvbmZpZy5uZXR3b3JrSWQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtQ29uZmlndXJlZE5ldHdvcmtzLnB1dChjb25maWcubmV0d29ya0lkLCBjb25maWcpOworICAgICAgICAgICAgICAgIG1OZXR3b3JrSWRzLnB1dChjb25maWdLZXkoY29uZmlnKSwgY29uZmlnLm5ldHdvcmtJZCk7CisgICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJsb2FkZWQgY29uZmlndXJlZCBuZXR3b3JrIiwgY29uZmlnLm5ldHdvcmtJZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZWFkSXBBbmRQcm94eUNvbmZpZ3VyYXRpb25zKCk7CisgICAgICAgIHNlbmRDb25maWd1cmVkTmV0d29ya3NDaGFuZ2VkQnJvYWRjYXN0KCk7CisKKyAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJsb2FkQ29uZmlndXJlZE5ldHdvcmtzIGxvYWRlZCAiICsgbU5ldHdvcmtJZHMuc2l6ZSgpICsgIiBuZXR3b3JrcyIpOworCisgICAgICAgIGlmIChtTmV0d29ya0lkcy5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgLy8gbm8gbmV0d29ya3M/IExldHMgbG9nIGlmIHRoZSB3cGFfc3VwcGxpY2FudC5jb25mIGZpbGUgY29udGVudHMKKyAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihTVVBQTElDQU5UX0NPTkZJR19GSUxFKSk7CisgICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCItLS0gQmVnaW4gd3BhX3N1cHBsaWNhbnQuY29uZiBDb250ZW50cyAtLS0iKTsKKyAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7IGxpbmUgIT0gbnVsbDsgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChWREJHKSBsb2NhbExvZyhsaW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCItLS0gRW5kIHdwYV9zdXBwbGljYW50LmNvbmYgQ29udGVudHMgLS0tIik7CisgICAgICAgICAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGlmIChWREJHKSBsb2NhbExvZygiQ291bGQgbm90IG9wZW4gIiArIFNVUFBMSUNBTlRfQ09ORklHX0ZJTEUgKyAiLCAiICsgZSk7CisgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJDb3VsZCBub3QgcmVhZCAiICsgU1VQUExJQ0FOVF9DT05GSUdfRklMRSArICIsICIgKyBlKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBpZ25vcmUgdGhlIGZhY3QgdGhhdCB3ZSBjb3VsZG4ndCBjbG9zZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIE1hcmsgYWxsIG5ldHdvcmtzIGV4Y2VwdCBzcGVjaWZpZWQgbmV0SWQgYXMgZGlzYWJsZWQgKi8KKyAgICBwcml2YXRlIHZvaWQgbWFya0FsbE5ldHdvcmtzRGlzYWJsZWRFeGNlcHQoaW50IG5ldElkKSB7CisgICAgICAgIGZvcihXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgOiBtQ29uZmlndXJlZE5ldHdvcmtzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZihjb25maWcgIT0gbnVsbCAmJiBjb25maWcubmV0d29ya0lkICE9IG5ldElkKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5zdGF0dXMgIT0gU3RhdHVzLkRJU0FCTEVEKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zdGF0dXMgPSBTdGF0dXMuRElTQUJMRUQ7CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5kaXNhYmxlUmVhc29uID0gV2lmaUNvbmZpZ3VyYXRpb24uRElTQUJMRURfVU5LTk9XTl9SRUFTT047CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG1hcmtBbGxOZXR3b3Jrc0Rpc2FibGVkKCkgeworICAgICAgICBtYXJrQWxsTmV0d29ya3NEaXNhYmxlZEV4Y2VwdChJTlZBTElEX05FVFdPUktfSUQpOworICAgIH0KKworICAgIGJvb2xlYW4gbmVlZHNVbmxvY2tlZEtleVN0b3JlKCkgeworCisgICAgICAgIC8vIEFueSBuZXR3b3JrIHVzaW5nIGNlcnRpZmljYXRlcyB0byBhdXRoZW50aWNhdGUgYWNjZXNzIHJlcXVpcmVzCisgICAgICAgIC8vIHVubG9ja2VkIGtleSBzdG9yZTsgdW5sZXNzIHRoZSBjZXJ0aWZpY2F0ZXMgY2FuIGJlIHN0b3JlZCB3aXRoCisgICAgICAgIC8vIGhhcmR3YXJlIGVuY3J5cHRpb24KKworICAgICAgICBmb3IoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnIDogbUNvbmZpZ3VyZWROZXR3b3Jrcy52YWx1ZXMoKSkgeworCisgICAgICAgICAgICBpZiAoY29uZmlnLmFsbG93ZWRLZXlNYW5hZ2VtZW50LmdldChLZXlNZ210LldQQV9FQVApCisgICAgICAgICAgICAgICAgICAgICYmIGNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudC5nZXQoS2V5TWdtdC5JRUVFODAyMVgpKSB7CisKKyAgICAgICAgICAgICAgICBpZiAobmVlZHNTb2Z0d2FyZUJhY2tlZEtleVN0b3JlKGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHdyaXRlSXBBbmRQcm94eUNvbmZpZ3VyYXRpb25zKCkgeworCisgICAgICAgIC8qIE1ha2UgYSBjb3B5ICovCisgICAgICAgIExpc3Q8V2lmaUNvbmZpZ3VyYXRpb24+IG5ldHdvcmtzID0gbmV3IEFycmF5TGlzdDxXaWZpQ29uZmlndXJhdGlvbj4oKTsKKyAgICAgICAgZm9yKFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA6IG1Db25maWd1cmVkTmV0d29ya3MudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIG5ldHdvcmtzLmFkZChuZXcgV2lmaUNvbmZpZ3VyYXRpb24oY29uZmlnKSk7CisgICAgICAgIH0KKworICAgICAgICBEZWxheWVkRGlza1dyaXRlLndyaXRlKG5ldHdvcmtzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEZWxheWVkRGlza1dyaXRlIHsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBIYW5kbGVyVGhyZWFkIHNEaXNrV3JpdGVIYW5kbGVyVGhyZWFkOworICAgICAgICBwcml2YXRlIHN0YXRpYyBIYW5kbGVyIHNEaXNrV3JpdGVIYW5kbGVyOworICAgICAgICAvKiBUcmFja3MgbXVsdGlwbGUgd3JpdGVzIG9uIHRoZSBzYW1lIHRocmVhZCAqLworICAgICAgICBwcml2YXRlIHN0YXRpYyBpbnQgc1dyaXRlU2VxdWVuY2UgPSAwOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkRlbGF5ZWREaXNrV3JpdGUiOworCisgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlIChmaW5hbCBMaXN0PFdpZmlDb25maWd1cmF0aW9uPiBuZXR3b3JrcykgeworCisgICAgICAgICAgICAvKiBEbyBhIGRlbGF5ZWQgd3JpdGUgdG8gZGlzayBvbiBhIHNlcGVyYXRlIGhhbmRsZXIgdGhyZWFkICovCisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKERlbGF5ZWREaXNrV3JpdGUuY2xhc3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytzV3JpdGVTZXF1ZW5jZSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHNEaXNrV3JpdGVIYW5kbGVyVGhyZWFkID0gbmV3IEhhbmRsZXJUaHJlYWQoIldpZmlDb25maWdUaHJlYWQiKTsKKyAgICAgICAgICAgICAgICAgICAgc0Rpc2tXcml0ZUhhbmRsZXJUaHJlYWQuc3RhcnQoKTsKKyAgICAgICAgICAgICAgICAgICAgc0Rpc2tXcml0ZUhhbmRsZXIgPSBuZXcgSGFuZGxlcihzRGlza1dyaXRlSGFuZGxlclRocmVhZC5nZXRMb29wZXIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzRGlza1dyaXRlSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uV3JpdGVDYWxsZWQobmV0d29ya3MpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIG9uV3JpdGVDYWxsZWQoTGlzdDxXaWZpQ29uZmlndXJhdGlvbj4gbmV0d29ya3MpIHsKKworICAgICAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXQgPSBudWxsOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBvdXQgPSBuZXcgRGF0YU91dHB1dFN0cmVhbShuZXcgQnVmZmVyZWRPdXRwdXRTdHJlYW0oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGVPdXRwdXRTdHJlYW0oaXBDb25maWdGaWxlKSkpOworCisgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KElQQ09ORklHX0ZJTEVfVkVSU0lPTik7CisKKyAgICAgICAgICAgICAgICBmb3IoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnIDogbmV0d29ya3MpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB3cml0ZVRvRmlsZSA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMaW5rUHJvcGVydGllcyBsaW5rUHJvcGVydGllcyA9IGNvbmZpZy5saW5rUHJvcGVydGllczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29uZmlnLmlwQXNzaWdubWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1RBVElDOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoSVBfQVNTSUdOTUVOVF9LRVkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoY29uZmlnLmlwQXNzaWdubWVudC50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChMaW5rQWRkcmVzcyBsaW5rQWRkciA6IGxpbmtQcm9wZXJ0aWVzLmdldExpbmtBZGRyZXNzZXMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKExJTktfQUREUkVTU19LRVkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKGxpbmtBZGRyLmdldEFkZHJlc3MoKS5nZXRIb3N0QWRkcmVzcygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZUludChsaW5rQWRkci5nZXROZXR3b3JrUHJlZml4TGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUm91dGVJbmZvIHJvdXRlIDogbGlua1Byb3BlcnRpZXMuZ2V0Um91dGVzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihHQVRFV0FZX0tFWSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rQWRkcmVzcyBkZXN0ID0gcm91dGUuZ2V0RGVzdGluYXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQoMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKGRlc3QuZ2V0QWRkcmVzcygpLmdldEhvc3RBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZUludChkZXN0LmdldE5ldHdvcmtQcmVmaXhMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZUludCgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZS5nZXRHYXRld2F5KCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZUludCgxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYocm91dGUuZ2V0R2F0ZXdheSgpLmdldEhvc3RBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChJbmV0QWRkcmVzcyBpbmV0QWRkciA6IGxpbmtQcm9wZXJ0aWVzLmdldERuc2VzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihETlNfS0VZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihpbmV0QWRkci5nZXRIb3N0QWRkcmVzcygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVRvRmlsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgREhDUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKElQX0FTU0lHTk1FTlRfS0VZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKGNvbmZpZy5pcEFzc2lnbm1lbnQudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlVG9GaWxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBVTkFTU0lHTkVEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZ25vcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWdub3JlIGludmFsaWQgaXAgYXNzaWdubWVudCB3aGlsZSB3cml0aW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbmZpZy5wcm94eVNldHRpbmdzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTVEFUSUM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3h5UHJvcGVydGllcyBwcm94eVByb3BlcnRpZXMgPSBsaW5rUHJvcGVydGllcy5nZXRIdHRwUHJveHkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGV4Y2x1c2lvbkxpc3QgPSBwcm94eVByb3BlcnRpZXMuZ2V0RXhjbHVzaW9uTGlzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoUFJPWFlfU0VUVElOR1NfS0VZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKGNvbmZpZy5wcm94eVNldHRpbmdzLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoUFJPWFlfSE9TVF9LRVkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYocHJveHlQcm9wZXJ0aWVzLmdldEhvc3QoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihQUk9YWV9QT1JUX0tFWSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZUludChwcm94eVByb3BlcnRpZXMuZ2V0UG9ydCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKEVYQ0xVU0lPTl9MSVNUX0tFWSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihleGNsdXNpb25MaXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVUb0ZpbGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBBQzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJveHlQcm9wZXJ0aWVzIHByb3h5UGFjUHJvcGVydGllcyA9IGxpbmtQcm9wZXJ0aWVzLmdldEh0dHBQcm94eSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoUFJPWFlfU0VUVElOR1NfS0VZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKGNvbmZpZy5wcm94eVNldHRpbmdzLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoUFJPWFlfUEFDX0ZJTEUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYocHJveHlQYWNQcm9wZXJ0aWVzLmdldFBhY0ZpbGVVcmwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlVG9GaWxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOT05FOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoUFJPWFlfU0VUVElOR1NfS0VZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKGNvbmZpZy5wcm94eVNldHRpbmdzLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVRvRmlsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVU5BU1NJR05FRDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWdub3JlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIklnbnRoaXNvcmUgaW52YWxpZCBwcm94eSBzZXR0aW5ncyB3aGlsZSB3cml0aW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlVG9GaWxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKElEX0tFWSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KGNvbmZpZ0tleShjb25maWcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbHVyZSBpbiB3cml0aW5nICIgKyBjb25maWcubGlua1Byb3BlcnRpZXMgKyBlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoRU9TKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBsb2dlKCJFcnJvciB3cml0aW5nIGRhdGEgZmlsZSIpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBpZiAob3V0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC5jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvL1F1aXQgaWYgbm8gbW9yZSB3cml0ZXMgc2VudAorICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoRGVsYXllZERpc2tXcml0ZS5jbGFzcykgeworICAgICAgICAgICAgICAgICAgICBpZiAoLS1zV3JpdGVTZXF1ZW5jZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzRGlza1dyaXRlSGFuZGxlci5nZXRMb29wZXIoKS5xdWl0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzRGlza1dyaXRlSGFuZGxlciA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICBzRGlza1dyaXRlSGFuZGxlclRocmVhZCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGxvZ2UoU3RyaW5nIHMpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVhZElwQW5kUHJveHlDb25maWd1cmF0aW9ucygpIHsKKworICAgICAgICBEYXRhSW5wdXRTdHJlYW0gaW4gPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgaW4gPSBuZXcgRGF0YUlucHV0U3RyZWFtKG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG5ldyBGaWxlSW5wdXRTdHJlYW0oCisgICAgICAgICAgICAgICAgICAgIGlwQ29uZmlnRmlsZSkpKTsKKworICAgICAgICAgICAgaW50IHZlcnNpb24gPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBpZiAodmVyc2lvbiAhPSAyICYmIHZlcnNpb24gIT0gMSkgeworICAgICAgICAgICAgICAgIGxvZ2UoIkJhZCB2ZXJzaW9uIG9uIElQIGNvbmZpZ3VyYXRpb24gZmlsZSwgaWdub3JlIHJlYWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgaW50IGlkID0gLTE7CisgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBpcyBESENQIHdpdGggbm8gcHJveHkKKyAgICAgICAgICAgICAgICBJcEFzc2lnbm1lbnQgaXBBc3NpZ25tZW50ID0gSXBBc3NpZ25tZW50LkRIQ1A7CisgICAgICAgICAgICAgICAgUHJveHlTZXR0aW5ncyBwcm94eVNldHRpbmdzID0gUHJveHlTZXR0aW5ncy5OT05FOworICAgICAgICAgICAgICAgIExpbmtQcm9wZXJ0aWVzIGxpbmtQcm9wZXJ0aWVzID0gbmV3IExpbmtQcm9wZXJ0aWVzKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHByb3h5SG9zdCA9IG51bGw7CisgICAgICAgICAgICAgICAgU3RyaW5nIHBhY0ZpbGVVcmwgPSBudWxsOworICAgICAgICAgICAgICAgIGludCBwcm94eVBvcnQgPSAtMTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZXhjbHVzaW9uTGlzdCA9IG51bGw7CisgICAgICAgICAgICAgICAgU3RyaW5nIGtleTsKKworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAga2V5ID0gaW4ucmVhZFVURigpOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5lcXVhbHMoSURfS0VZKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKElQX0FTU0lHTk1FTlRfS0VZKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwQXNzaWdubWVudCA9IElwQXNzaWdubWVudC52YWx1ZU9mKGluLnJlYWRVVEYoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoTElOS19BRERSRVNTX0tFWSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rQWRkcmVzcyBsaW5rQWRkciA9IG5ldyBMaW5rQWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtVdGlscy5udW1lcmljVG9JbmV0QWRkcmVzcyhpbi5yZWFkVVRGKCkpLCBpbi5yZWFkSW50KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLmFkZExpbmtBZGRyZXNzKGxpbmtBZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LmVxdWFscyhHQVRFV0FZX0tFWSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rQWRkcmVzcyBkZXN0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV0QWRkcmVzcyBnYXRld2F5ID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyc2lvbiA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgc3VwcG9ydGVkIGRlZmF1bHQgZ2F0ZXdheXMgLSBsZWF2ZSB0aGUgZGVzdC9wcmVmaXggZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheSA9IE5ldHdvcmtVdGlscy5udW1lcmljVG9JbmV0QWRkcmVzcyhpbi5yZWFkVVRGKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbi5yZWFkSW50KCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9IG5ldyBMaW5rQWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29ya1V0aWxzLm51bWVyaWNUb0luZXRBZGRyZXNzKGluLnJlYWRVVEYoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLnJlYWRJbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluLnJlYWRJbnQoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5ID0gTmV0d29ya1V0aWxzLm51bWVyaWNUb0luZXRBZGRyZXNzKGluLnJlYWRVVEYoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMuYWRkUm91dGUobmV3IFJvdXRlSW5mbyhkZXN0LCBnYXRld2F5KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoRE5TX0tFWSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rUHJvcGVydGllcy5hZGREbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrVXRpbHMubnVtZXJpY1RvSW5ldEFkZHJlc3MoaW4ucmVhZFVURigpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoUFJPWFlfU0VUVElOR1NfS0VZKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5U2V0dGluZ3MgPSBQcm94eVNldHRpbmdzLnZhbHVlT2YoaW4ucmVhZFVURigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LmVxdWFscyhQUk9YWV9IT1NUX0tFWSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eUhvc3QgPSBpbi5yZWFkVVRGKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoUFJPWFlfUE9SVF9LRVkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlQb3J0ID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKFBST1hZX1BBQ19GSUxFKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY0ZpbGVVcmwgPSBpbi5yZWFkVVRGKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoRVhDTFVTSU9OX0xJU1RfS0VZKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1c2lvbkxpc3QgPSBpbi5yZWFkVVRGKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoRU9TKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJZ25vcmUgdW5rbm93biBrZXkgIiArIGtleSArICJ3aGlsZSByZWFkaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJZ25vcmUgaW52YWxpZCBhZGRyZXNzIHdoaWxlIHJlYWRpbmciICsgZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKKworICAgICAgICAgICAgICAgIGlmIChpZCAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTmV0d29ya0lkcy5nZXQoaWQpKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoImNvbmZpZ3VyYXRpb24gZm91bmQgZm9yIG1pc3NpbmcgbmV0d29yaywgaWdub3JlZCIpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmxpbmtQcm9wZXJ0aWVzID0gbGlua1Byb3BlcnRpZXM7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGlwQXNzaWdubWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1RBVElDOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgREhDUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmlwQXNzaWdubWVudCA9IGlwQXNzaWdubWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBVTkFTU0lHTkVEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJCVUc6IEZvdW5kIFVOQVNTSUdORUQgSVAgb24gZmlsZSwgdXNlIERIQ1AiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmlwQXNzaWdubWVudCA9IElwQXNzaWdubWVudC5ESENQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJZ25vcmUgaW52YWxpZCBpcCBhc3NpZ25tZW50IHdoaWxlIHJlYWRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHJveHlTZXR0aW5ncykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1RBVElDOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcucHJveHlTZXR0aW5ncyA9IHByb3h5U2V0dGluZ3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3h5UHJvcGVydGllcyBwcm94eVByb3BlcnRpZXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb3h5UHJvcGVydGllcyhwcm94eUhvc3QsIHByb3h5UG9ydCwgZXhjbHVzaW9uTGlzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLnNldEh0dHBQcm94eShwcm94eVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBBQzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnByb3h5U2V0dGluZ3MgPSBwcm94eVNldHRpbmdzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm94eVByb3BlcnRpZXMgcHJveHlQYWNQcm9wZXJ0aWVzID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb3h5UHJvcGVydGllcyhwYWNGaWxlVXJsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMuc2V0SHR0cFByb3h5KHByb3h5UGFjUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTk9ORToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnByb3h5U2V0dGluZ3MgPSBwcm94eVNldHRpbmdzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFVOQVNTSUdORUQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkJVRzogRm91bmQgVU5BU1NJR05FRCBwcm94eSBvbiBmaWxlLCB1c2UgTk9ORSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcucHJveHlTZXR0aW5ncyA9IFByb3h5U2V0dGluZ3MuTk9ORTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWdub3JlIGludmFsaWQgcHJveHkgc2V0dGluZ3Mgd2hpbGUgcmVhZGluZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiTWlzc2luZyBpZCB3aGlsZSBwYXJzaW5nIGNvbmZpZ3VyYXRpb24iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEVPRkV4Y2VwdGlvbiBpZ25vcmUpIHsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nZSgiRXJyb3IgcGFyc2luZyBjb25maWd1cmF0aW9uIiArIGUpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKGluICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpbi5jbG9zZSgpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBOZXR3b3JrVXBkYXRlUmVzdWx0IGFkZE9yVXBkYXRlTmV0d29ya05hdGl2ZShXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgdGhlIHN1cHBsaWVkIG5ldHdvcmtJZCBpcyBJTlZBTElEX05FVFdPUktfSUQsIHdlIGNyZWF0ZSBhIG5ldyBlbXB0eQorICAgICAgICAgKiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uIE90aGVyd2lzZSwgdGhlIG5ldHdvcmtJZCBzaG91bGQKKyAgICAgICAgICogcmVmZXIgdG8gYW4gZXhpc3RpbmcgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICovCisKKyAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJhZGRPclVwZGF0ZU5ldHdvcmtOYXRpdmUgIiArIGNvbmZpZy5nZXRQcmludGFibGVTc2lkKCkpOworCisgICAgICAgIGludCBuZXRJZCA9IGNvbmZpZy5uZXR3b3JrSWQ7CisgICAgICAgIGJvb2xlYW4gbmV3TmV0d29yayA9IGZhbHNlOworICAgICAgICAvLyBuZXR3b3JrSWQgb2YgSU5WQUxJRF9ORVRXT1JLX0lEIG1lYW5zIHdlIHdhbnQgdG8gY3JlYXRlIGEgbmV3IG5ldHdvcmsKKyAgICAgICAgaWYgKG5ldElkID09IElOVkFMSURfTkVUV09SS19JRCkgeworICAgICAgICAgICAgSW50ZWdlciBzYXZlZE5ldElkID0gbU5ldHdvcmtJZHMuZ2V0KGNvbmZpZ0tleShjb25maWcpKTsKKyAgICAgICAgICAgIGlmIChzYXZlZE5ldElkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBuZXRJZCA9IHNhdmVkTmV0SWQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5ld05ldHdvcmsgPSB0cnVlOworICAgICAgICAgICAgICAgIG5ldElkID0gbVdpZmlOYXRpdmUuYWRkTmV0d29yaygpOworICAgICAgICAgICAgICAgIGlmIChuZXRJZCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGFkZCBhIG5ldHdvcmshIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmV0d29ya1VwZGF0ZVJlc3VsdChJTlZBTElEX05FVFdPUktfSUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW4gdXBkYXRlRmFpbGVkID0gdHJ1ZTsKKworICAgICAgICBzZXRWYXJpYWJsZXM6IHsKKworICAgICAgICAgICAgaWYgKGNvbmZpZy5TU0lEICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICAgICAgIW1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldElkLAorICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uc3NpZFZhck5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuU1NJRCkpIHsKKyAgICAgICAgICAgICAgICBsb2dlKCJmYWlsZWQgdG8gc2V0IFNTSUQ6ICIrY29uZmlnLlNTSUQpOworICAgICAgICAgICAgICAgIGJyZWFrIHNldFZhcmlhYmxlczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbmZpZy5CU1NJRCAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgICAgICFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLmJzc2lkVmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5CU1NJRCkpIHsKKyAgICAgICAgICAgICAgICBsb2dlKCJmYWlsZWQgdG8gc2V0IEJTU0lEOiAiK2NvbmZpZy5CU1NJRCk7CisgICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdHJpbmcgYWxsb3dlZEtleU1hbmFnZW1lbnRTdHJpbmcgPQorICAgICAgICAgICAgICAgIG1ha2VTdHJpbmcoY29uZmlnLmFsbG93ZWRLZXlNYW5hZ2VtZW50LCBXaWZpQ29uZmlndXJhdGlvbi5LZXlNZ210LnN0cmluZ3MpOworICAgICAgICAgICAgaWYgKGNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudC5jYXJkaW5hbGl0eSgpICE9IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgIW1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldElkLAorICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uS2V5TWdtdC52YXJOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEtleU1hbmFnZW1lbnRTdHJpbmcpKSB7CisgICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCBrZXlfbWdtdDogIisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRLZXlNYW5hZ2VtZW50U3RyaW5nKTsKKyAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0cmluZyBhbGxvd2VkUHJvdG9jb2xzU3RyaW5nID0KKyAgICAgICAgICAgICAgICBtYWtlU3RyaW5nKGNvbmZpZy5hbGxvd2VkUHJvdG9jb2xzLCBXaWZpQ29uZmlndXJhdGlvbi5Qcm90b2NvbC5zdHJpbmdzKTsKKyAgICAgICAgICAgIGlmIChjb25maWcuYWxsb3dlZFByb3RvY29scy5jYXJkaW5hbGl0eSgpICE9IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgIW1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldElkLAorICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uUHJvdG9jb2wudmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRQcm90b2NvbHNTdHJpbmcpKSB7CisgICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCBwcm90bzogIisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRQcm90b2NvbHNTdHJpbmcpOworICAgICAgICAgICAgICAgIGJyZWFrIHNldFZhcmlhYmxlczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RyaW5nIGFsbG93ZWRBdXRoQWxnb3JpdGhtc1N0cmluZyA9CisgICAgICAgICAgICAgICAgbWFrZVN0cmluZyhjb25maWcuYWxsb3dlZEF1dGhBbGdvcml0aG1zLCBXaWZpQ29uZmlndXJhdGlvbi5BdXRoQWxnb3JpdGhtLnN0cmluZ3MpOworICAgICAgICAgICAgaWYgKGNvbmZpZy5hbGxvd2VkQXV0aEFsZ29yaXRobXMuY2FyZGluYWxpdHkoKSAhPSAwICYmCisgICAgICAgICAgICAgICAgICAgICFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLkF1dGhBbGdvcml0aG0udmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRBdXRoQWxnb3JpdGhtc1N0cmluZykpIHsKKyAgICAgICAgICAgICAgICBsb2dlKCJmYWlsZWQgdG8gc2V0IGF1dGhfYWxnOiAiKworICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEF1dGhBbGdvcml0aG1zU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0cmluZyBhbGxvd2VkUGFpcndpc2VDaXBoZXJzU3RyaW5nID0KKyAgICAgICAgICAgICAgICAgICAgbWFrZVN0cmluZyhjb25maWcuYWxsb3dlZFBhaXJ3aXNlQ2lwaGVycywKKyAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uUGFpcndpc2VDaXBoZXIuc3RyaW5ncyk7CisgICAgICAgICAgICBpZiAoY29uZmlnLmFsbG93ZWRQYWlyd2lzZUNpcGhlcnMuY2FyZGluYWxpdHkoKSAhPSAwICYmCisgICAgICAgICAgICAgICAgICAgICFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLlBhaXJ3aXNlQ2lwaGVyLnZhck5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUGFpcndpc2VDaXBoZXJzU3RyaW5nKSkgeworICAgICAgICAgICAgICAgIGxvZ2UoImZhaWxlZCB0byBzZXQgcGFpcndpc2U6ICIrCisgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUGFpcndpc2VDaXBoZXJzU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0cmluZyBhbGxvd2VkR3JvdXBDaXBoZXJzU3RyaW5nID0KKyAgICAgICAgICAgICAgICBtYWtlU3RyaW5nKGNvbmZpZy5hbGxvd2VkR3JvdXBDaXBoZXJzLCBXaWZpQ29uZmlndXJhdGlvbi5Hcm91cENpcGhlci5zdHJpbmdzKTsKKyAgICAgICAgICAgIGlmIChjb25maWcuYWxsb3dlZEdyb3VwQ2lwaGVycy5jYXJkaW5hbGl0eSgpICE9IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgIW1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldElkLAorICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uR3JvdXBDaXBoZXIudmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRHcm91cENpcGhlcnNTdHJpbmcpKSB7CisgICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCBncm91cDogIisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRHcm91cENpcGhlcnNTdHJpbmcpOworICAgICAgICAgICAgICAgIGJyZWFrIHNldFZhcmlhYmxlczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUHJldmVudCBjbGllbnQgc2NyZXctdXAgYnkgcGFzc2luZyBpbiBhIFdpZmlDb25maWd1cmF0aW9uIHdlIGdhdmUgaXQKKyAgICAgICAgICAgIC8vIGJ5IHByZXZlbnRpbmcgIioiIGFzIGEga2V5LgorICAgICAgICAgICAgaWYgKGNvbmZpZy5wcmVTaGFyZWRLZXkgIT0gbnVsbCAmJiAhY29uZmlnLnByZVNoYXJlZEtleS5lcXVhbHMoIioiKSAmJgorICAgICAgICAgICAgICAgICAgICAhbVdpZmlOYXRpdmUuc2V0TmV0d29ya1ZhcmlhYmxlKAorICAgICAgICAgICAgICAgICAgICAgICAgbmV0SWQsCisgICAgICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi5wc2tWYXJOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnByZVNoYXJlZEtleSkpIHsKKyAgICAgICAgICAgICAgICBsb2dlKCJmYWlsZWQgdG8gc2V0IHBzayIpOworICAgICAgICAgICAgICAgIGJyZWFrIHNldFZhcmlhYmxlczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbGVhbiBoYXNTZXRLZXkgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChjb25maWcud2VwS2V5cyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25maWcud2VwS2V5cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IGNsaWVudCBzY3Jldy11cCBieSBwYXNzaW5nIGluIGEgV2lmaUNvbmZpZ3VyYXRpb24gd2UgZ2F2ZSBpdAorICAgICAgICAgICAgICAgICAgICAvLyBieSBwcmV2ZW50aW5nICIqIiBhcyBhIGtleS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy53ZXBLZXlzW2ldICE9IG51bGwgJiYgIWNvbmZpZy53ZXBLZXlzW2ldLmVxdWFscygiKiIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldElkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24ud2VwS2V5VmFyTmFtZXNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcud2VwS2V5c1tpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJmYWlsZWQgdG8gc2V0IHdlcF9rZXkiICsgaSArICI6ICIgKyBjb25maWcud2VwS2V5c1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaGFzU2V0S2V5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGhhc1NldEtleSkgeworICAgICAgICAgICAgICAgIGlmICghbVdpZmlOYXRpdmUuc2V0TmV0d29ya1ZhcmlhYmxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldElkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLndlcFR4S2V5SWR4VmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvU3RyaW5nKGNvbmZpZy53ZXBUeEtleUluZGV4KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCB3ZXBfdHhfa2V5aWR4OiAiICsgY29uZmlnLndlcFR4S2V5SW5kZXgpOworICAgICAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIW1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldElkLAorICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24ucHJpb3JpdHlWYXJOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b1N0cmluZyhjb25maWcucHJpb3JpdHkpKSkgeworICAgICAgICAgICAgICAgIGxvZ2UoY29uZmlnLlNTSUQgKyAiOiBmYWlsZWQgdG8gc2V0IHByaW9yaXR5OiAiCisgICAgICAgICAgICAgICAgICAgICAgICArY29uZmlnLnByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb25maWcuaGlkZGVuU1NJRCAmJiAhbVdpZmlOYXRpdmUuc2V0TmV0d29ya1ZhcmlhYmxlKAorICAgICAgICAgICAgICAgICAgICAgICAgbmV0SWQsCisgICAgICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi5oaWRkZW5TU0lEVmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9TdHJpbmcoY29uZmlnLmhpZGRlblNTSUQgPyAxIDogMCkpKSB7CisgICAgICAgICAgICAgICAgbG9nZShjb25maWcuU1NJRCArICI6IGZhaWxlZCB0byBzZXQgaGlkZGVuU1NJRDogIisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5oaWRkZW5TU0lEKTsKKyAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb25maWcuZW50ZXJwcmlzZUNvbmZpZyAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnLmdldEVhcE1ldGhvZCgpICE9IFdpZmlFbnRlcnByaXNlQ29uZmlnLkVhcC5OT05FKSB7CisKKyAgICAgICAgICAgICAgICBXaWZpRW50ZXJwcmlzZUNvbmZpZyBlbnRlcnByaXNlQ29uZmlnID0gY29uZmlnLmVudGVycHJpc2VDb25maWc7CisKKyAgICAgICAgICAgICAgICBpZiAobmVlZHNLZXlTdG9yZShlbnRlcnByaXNlQ29uZmlnKSkgeworICAgICAgICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAgICAgICAgICogS2V5Z3VhcmQgc2V0dGluZ3MgbWF5IGV2ZW50dWFsbHkgYmUgY29udHJvbGxlZCBieSBkZXZpY2UgcG9saWN5LgorICAgICAgICAgICAgICAgICAgICAgKiBXZSBjaGVjayBoZXJlIGlmIGtleXN0b3JlIGlzIHVubG9ja2VkIGJlZm9yZSBpbnN0YWxsaW5nCisgICAgICAgICAgICAgICAgICAgICAqIGNyZWRlbnRpYWxzLgorICAgICAgICAgICAgICAgICAgICAgKiBUT0RPOiBEbyB3ZSBuZWVkIGEgZGlhbG9nIGhlcmUgPworICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1LZXlTdG9yZS5zdGF0ZSgpICE9IEtleVN0b3JlLlN0YXRlLlVOTE9DS0VEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKGNvbmZpZy5TU0lEICsgIjoga2V5IHN0b3JlIGlzIGxvY2tlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbmZpZyBwYXNzZWQgbWF5IGluY2x1ZGUgb25seSBmaWVsZHMgYmVpbmcgdXBkYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBrZXkgaWQsIGZldGNoIHVuaW5pdGlhbGl6ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIGZpZWxkcyBmcm9tIHRoZSBjdXJyZW50bHkgdHJhY2tlZCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGN1cnJlbnRDb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcga2V5SWQgPSBjb25maWcuZ2V0S2V5SWRGb3JDcmVkZW50aWFscyhjdXJyZW50Q29uZmlnKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0YWxsS2V5cyhlbnRlcnByaXNlQ29uZmlnLCBrZXlJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKGNvbmZpZy5TU0lEICsgIjogZmFpbGVkIHRvIGluc3RhbGwga2V5cyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHNldFZhcmlhYmxlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoY29uZmlnLlNTSUQgKyAiIGludmFsaWQgY29uZmlnIGZvciBrZXkgaW5zdGFsbGF0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBlbnRlcnByaXNlRmllbGRzID0gZW50ZXJwcmlzZUNvbmZpZy5nZXRGaWVsZHMoKTsKKyAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBrZXkgOiBlbnRlcnByaXNlRmllbGRzLmtleVNldCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBlbnRlcnByaXNlRmllbGRzLmdldChrZXkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUtleXMoZW50ZXJwcmlzZUNvbmZpZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZShjb25maWcuU1NJRCArICI6IGZhaWxlZCB0byBzZXQgIiArIGtleSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiAiICsgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHNldFZhcmlhYmxlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1cGRhdGVGYWlsZWQgPSBmYWxzZTsKKyAgICAgICAgfSAvL2VuZCBvZiBzZXRWYXJpYWJsZXMKKworICAgICAgICBpZiAodXBkYXRlRmFpbGVkKSB7CisgICAgICAgICAgICBpZiAobmV3TmV0d29yaykgeworICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnJlbW92ZU5ldHdvcmsobmV0SWQpOworICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXQgYSBuZXR3b3JrIHZhcmlhYmxlLCByZW1vdmVkIG5ldHdvcms6ICIgKyBuZXRJZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmV3IE5ldHdvcmtVcGRhdGVSZXN1bHQoSU5WQUxJRF9ORVRXT1JLX0lEKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEFuIHVwZGF0ZSBvZiB0aGUgbmV0d29yayB2YXJpYWJsZXMgcmVxdWlyZXMgcmVhZGluZyB0aGVtCisgICAgICAgICAqIGJhY2sgZnJvbSB0aGUgc3VwcGxpY2FudCB0byB1cGRhdGUgbUNvbmZpZ3VyZWROZXR3b3Jrcy4KKyAgICAgICAgICogVGhpcyBpcyBiZWNhdXNlIHNvbWUgb2YgdGhlIHZhcmlhYmxlcyAoU1NJRCwgd2VwIGtleXMgJgorICAgICAgICAgKiBwYXNzcGhyYXNlcykgcmVmbGVjdCBkaWZmZXJlbnQgdmFsdWVzIHdoZW4gcmVhZCBiYWNrIHRoYW4KKyAgICAgICAgICogd2hlbiB3cml0dGVuLiBGb3IgZXhhbXBsZSwgd2VwIGtleSBpcyBzdG9yZWQgYXMgKiBpcnJlc3BlY3RpdmUKKyAgICAgICAgICogb2YgdGhlIHZhbHVlIHNlbnQgdG8gdGhlIHN1cHBsaWNhbnQKKyAgICAgICAgICovCisgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGN1cnJlbnRDb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7CisgICAgICAgIGlmIChjdXJyZW50Q29uZmlnID09IG51bGwpIHsKKyAgICAgICAgICAgIGN1cnJlbnRDb25maWcgPSBuZXcgV2lmaUNvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAgICAgIGN1cnJlbnRDb25maWcuaXBBc3NpZ25tZW50ID0gSXBBc3NpZ25tZW50LkRIQ1A7CisgICAgICAgICAgICBjdXJyZW50Q29uZmlnLnByb3h5U2V0dGluZ3MgPSBQcm94eVNldHRpbmdzLk5PTkU7CisgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm5ldHdvcmtJZCA9IG5ldElkOworICAgICAgICB9CisKKyAgICAgICAgcmVhZE5ldHdvcmtWYXJpYWJsZXMoY3VycmVudENvbmZpZyk7CisKKyAgICAgICAgbUNvbmZpZ3VyZWROZXR3b3Jrcy5wdXQobmV0SWQsIGN1cnJlbnRDb25maWcpOworICAgICAgICBtTmV0d29ya0lkcy5wdXQoY29uZmlnS2V5KGN1cnJlbnRDb25maWcpLCBuZXRJZCk7CisKKyAgICAgICAgTmV0d29ya1VwZGF0ZVJlc3VsdCByZXN1bHQgPSB3cml0ZUlwQW5kUHJveHlDb25maWd1cmF0aW9uc09uQ2hhbmdlKGN1cnJlbnRDb25maWcsIGNvbmZpZyk7CisgICAgICAgIHJlc3VsdC5zZXRJc05ld05ldHdvcmsobmV3TmV0d29yayk7CisgICAgICAgIHJlc3VsdC5zZXROZXR3b3JrSWQobmV0SWQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIENvbXBhcmUgY3VycmVudCBhbmQgbmV3IGNvbmZpZ3VyYXRpb24gYW5kIHdyaXRlIHRvIGZpbGUgb24gY2hhbmdlICovCisgICAgcHJpdmF0ZSBOZXR3b3JrVXBkYXRlUmVzdWx0IHdyaXRlSXBBbmRQcm94eUNvbmZpZ3VyYXRpb25zT25DaGFuZ2UoCisgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjdXJyZW50Q29uZmlnLAorICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKSB7CisgICAgICAgIGJvb2xlYW4gaXBDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGJvb2xlYW4gcHJveHlDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIExpbmtQcm9wZXJ0aWVzIGxpbmtQcm9wZXJ0aWVzID0gbnVsbDsKKworICAgICAgICBzd2l0Y2ggKG5ld0NvbmZpZy5pcEFzc2lnbm1lbnQpIHsKKyAgICAgICAgICAgIGNhc2UgU1RBVElDOgorICAgICAgICAgICAgICAgIENvbGxlY3Rpb248TGlua0FkZHJlc3M+IGN1cnJlbnRMaW5rQWRkcmVzc2VzID0gY3VycmVudENvbmZpZy5saW5rUHJvcGVydGllcworICAgICAgICAgICAgICAgICAgICAgICAgLmdldExpbmtBZGRyZXNzZXMoKTsKKyAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPExpbmtBZGRyZXNzPiBuZXdMaW5rQWRkcmVzc2VzID0gbmV3Q29uZmlnLmxpbmtQcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0TGlua0FkZHJlc3NlcygpOworICAgICAgICAgICAgICAgIENvbGxlY3Rpb248SW5ldEFkZHJlc3M+IGN1cnJlbnREbnNlcyA9IGN1cnJlbnRDb25maWcubGlua1Byb3BlcnRpZXMuZ2V0RG5zZXMoKTsKKyAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPEluZXRBZGRyZXNzPiBuZXdEbnNlcyA9IG5ld0NvbmZpZy5saW5rUHJvcGVydGllcy5nZXREbnNlcygpOworICAgICAgICAgICAgICAgIENvbGxlY3Rpb248Um91dGVJbmZvPiBjdXJyZW50Um91dGVzID0gY3VycmVudENvbmZpZy5saW5rUHJvcGVydGllcy5nZXRSb3V0ZXMoKTsKKyAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPFJvdXRlSW5mbz4gbmV3Um91dGVzID0gbmV3Q29uZmlnLmxpbmtQcm9wZXJ0aWVzLmdldFJvdXRlcygpOworCisgICAgICAgICAgICAgICAgYm9vbGVhbiBsaW5rQWRkcmVzc2VzRGlmZmVyID0KKyAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50TGlua0FkZHJlc3Nlcy5zaXplKCkgIT0gbmV3TGlua0FkZHJlc3Nlcy5zaXplKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAhY3VycmVudExpbmtBZGRyZXNzZXMuY29udGFpbnNBbGwobmV3TGlua0FkZHJlc3Nlcyk7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBkbnNlc0RpZmZlciA9IChjdXJyZW50RG5zZXMuc2l6ZSgpICE9IG5ld0Ruc2VzLnNpemUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICFjdXJyZW50RG5zZXMuY29udGFpbnNBbGwobmV3RG5zZXMpOworICAgICAgICAgICAgICAgIGJvb2xlYW4gcm91dGVzRGlmZmVyID0gKGN1cnJlbnRSb3V0ZXMuc2l6ZSgpICE9IG5ld1JvdXRlcy5zaXplKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAhY3VycmVudFJvdXRlcy5jb250YWluc0FsbChuZXdSb3V0ZXMpOworCisgICAgICAgICAgICAgICAgaWYgKChjdXJyZW50Q29uZmlnLmlwQXNzaWdubWVudCAhPSBuZXdDb25maWcuaXBBc3NpZ25tZW50KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgbGlua0FkZHJlc3Nlc0RpZmZlciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgZG5zZXNEaWZmZXIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlc0RpZmZlcikgeworICAgICAgICAgICAgICAgICAgICBpcENoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgREhDUDoKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbmZpZy5pcEFzc2lnbm1lbnQgIT0gbmV3Q29uZmlnLmlwQXNzaWdubWVudCkgeworICAgICAgICAgICAgICAgICAgICBpcENoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVU5BU1NJR05FRDoKKyAgICAgICAgICAgICAgICAvKiBJZ25vcmUgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbG9nZSgiSWdub3JlIGludmFsaWQgaXAgYXNzaWdubWVudCBkdXJpbmcgd3JpdGUiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAobmV3Q29uZmlnLnByb3h5U2V0dGluZ3MpIHsKKyAgICAgICAgICAgIGNhc2UgU1RBVElDOgorICAgICAgICAgICAgY2FzZSBQQUM6CisgICAgICAgICAgICAgICAgUHJveHlQcm9wZXJ0aWVzIG5ld0h0dHBQcm94eSA9IG5ld0NvbmZpZy5saW5rUHJvcGVydGllcy5nZXRIdHRwUHJveHkoKTsKKyAgICAgICAgICAgICAgICBQcm94eVByb3BlcnRpZXMgY3VycmVudEh0dHBQcm94eSA9IGN1cnJlbnRDb25maWcubGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCk7CisKKyAgICAgICAgICAgICAgICBpZiAobmV3SHR0cFByb3h5ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJveHlDaGFuZ2VkID0gIW5ld0h0dHBQcm94eS5lcXVhbHMoY3VycmVudEh0dHBQcm94eSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJveHlDaGFuZ2VkID0gKGN1cnJlbnRIdHRwUHJveHkgIT0gbnVsbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBOT05FOgorICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29uZmlnLnByb3h5U2V0dGluZ3MgIT0gbmV3Q29uZmlnLnByb3h5U2V0dGluZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJveHlDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFVOQVNTSUdORUQ6CisgICAgICAgICAgICAgICAgLyogSWdub3JlICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGxvZ2UoIklnbm9yZSBpbnZhbGlkIHByb3h5IGNvbmZpZ3VyYXRpb24gZHVyaW5nIHdyaXRlIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWlwQ2hhbmdlZCkgeworICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMgPSBjb3B5SXBTZXR0aW5nc0Zyb21Db25maWcoY3VycmVudENvbmZpZyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjdXJyZW50Q29uZmlnLmlwQXNzaWdubWVudCA9IG5ld0NvbmZpZy5pcEFzc2lnbm1lbnQ7CisgICAgICAgICAgICBsaW5rUHJvcGVydGllcyA9IGNvcHlJcFNldHRpbmdzRnJvbUNvbmZpZyhuZXdDb25maWcpOworICAgICAgICAgICAgbG9nKCJJUCBjb25maWcgY2hhbmdlZCBTU0lEID0gIiArIGN1cnJlbnRDb25maWcuU1NJRCArICIgbGlua1Byb3BlcnRpZXM6ICIgKworICAgICAgICAgICAgICAgICAgICBsaW5rUHJvcGVydGllcy50b1N0cmluZygpKTsKKyAgICAgICAgfQorCisKKyAgICAgICAgaWYgKCFwcm94eUNoYW5nZWQpIHsKKyAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLnNldEh0dHBQcm94eShjdXJyZW50Q29uZmlnLmxpbmtQcm9wZXJ0aWVzLmdldEh0dHBQcm94eSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGN1cnJlbnRDb25maWcucHJveHlTZXR0aW5ncyA9IG5ld0NvbmZpZy5wcm94eVNldHRpbmdzOworICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMuc2V0SHR0cFByb3h5KG5ld0NvbmZpZy5saW5rUHJvcGVydGllcy5nZXRIdHRwUHJveHkoKSk7CisgICAgICAgICAgICBsb2coInByb3h5IGNoYW5nZWQgU1NJRCA9ICIgKyBjdXJyZW50Q29uZmlnLlNTSUQpOworICAgICAgICAgICAgaWYgKGxpbmtQcm9wZXJ0aWVzLmdldEh0dHBQcm94eSgpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBsb2coIiBwcm94eVByb3BlcnRpZXM6ICIgKyBsaW5rUHJvcGVydGllcy5nZXRIdHRwUHJveHkoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpcENoYW5nZWQgfHwgcHJveHlDaGFuZ2VkKSB7CisgICAgICAgICAgICBjdXJyZW50Q29uZmlnLmxpbmtQcm9wZXJ0aWVzID0gbGlua1Byb3BlcnRpZXM7CisgICAgICAgICAgICB3cml0ZUlwQW5kUHJveHlDb25maWd1cmF0aW9ucygpOworICAgICAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoY3VycmVudENvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuQ0hBTkdFX1JFQVNPTl9DT05GSUdfQ0hBTkdFKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IE5ldHdvcmtVcGRhdGVSZXN1bHQoaXBDaGFuZ2VkLCBwcm94eUNoYW5nZWQpOworICAgIH0KKworICAgIHByaXZhdGUgTGlua1Byb3BlcnRpZXMgY29weUlwU2V0dGluZ3NGcm9tQ29uZmlnKFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZykgeworICAgICAgICBMaW5rUHJvcGVydGllcyBsaW5rUHJvcGVydGllcyA9IG5ldyBMaW5rUHJvcGVydGllcygpOworICAgICAgICBsaW5rUHJvcGVydGllcy5zZXRJbnRlcmZhY2VOYW1lKGNvbmZpZy5saW5rUHJvcGVydGllcy5nZXRJbnRlcmZhY2VOYW1lKCkpOworICAgICAgICBmb3IgKExpbmtBZGRyZXNzIGxpbmtBZGRyIDogY29uZmlnLmxpbmtQcm9wZXJ0aWVzLmdldExpbmtBZGRyZXNzZXMoKSkgeworICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMuYWRkTGlua0FkZHJlc3MobGlua0FkZHIpOworICAgICAgICB9CisgICAgICAgIGZvciAoUm91dGVJbmZvIHJvdXRlIDogY29uZmlnLmxpbmtQcm9wZXJ0aWVzLmdldFJvdXRlcygpKSB7CisgICAgICAgICAgICBsaW5rUHJvcGVydGllcy5hZGRSb3V0ZShyb3V0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChJbmV0QWRkcmVzcyBkbnMgOiBjb25maWcubGlua1Byb3BlcnRpZXMuZ2V0RG5zZXMoKSkgeworICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMuYWRkRG5zKGRucyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxpbmtQcm9wZXJ0aWVzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlYWQgdGhlIHZhcmlhYmxlcyBmcm9tIHRoZSBzdXBwbGljYW50IGRhZW1vbiB0aGF0IGFyZSBuZWVkZWQgdG8KKyAgICAgKiBmaWxsIGluIHRoZSBXaWZpQ29uZmlndXJhdGlvbiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29uZmlnIHRoZSB7QGxpbmsgV2lmaUNvbmZpZ3VyYXRpb259IG9iamVjdCB0byBiZSBmaWxsZWQgaW4uCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHJlYWROZXR3b3JrVmFyaWFibGVzKFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZykgeworCisgICAgICAgIGludCBuZXRJZCA9IGNvbmZpZy5uZXR3b3JrSWQ7CisgICAgICAgIGlmIChuZXRJZCA8IDApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVE9ETzogbWF5YmUgc2hvdWxkIGhhdmUgYSBuYXRpdmUgbWV0aG9kIHRoYXQgdGFrZXMgYW4gYXJyYXkgb2YKKyAgICAgICAgICogdmFyaWFibGUgbmFtZXMgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdmFsdWVzLiBCdXQgd2UnZCBzdGlsbAorICAgICAgICAgKiBiZSBkb2luZyBhIHJvdW5kIHRyaXAgdG8gdGhlIHN1cHBsaWNhbnQgZGFlbW9uIGZvciBlYWNoIHZhcmlhYmxlLgorICAgICAgICAgKi8KKyAgICAgICAgU3RyaW5nIHZhbHVlOworCisgICAgICAgIHZhbHVlID0gbVdpZmlOYXRpdmUuZ2V0TmV0d29ya1ZhcmlhYmxlKG5ldElkLCBXaWZpQ29uZmlndXJhdGlvbi5zc2lkVmFyTmFtZSk7CisgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuY2hhckF0KDApICE9ICciJykgeworICAgICAgICAgICAgICAgIGNvbmZpZy5TU0lEID0gIlwiIiArIFdpZmlTc2lkLmNyZWF0ZUZyb21IZXgodmFsdWUpLnRvU3RyaW5nKCkgKyAiXCIiOworICAgICAgICAgICAgICAgIC8vVE9ETzogY29udmVydCBhIGhleCBzdHJpbmcgdGhhdCBpcyBub3QgVVRGLTggZGVjb2RhYmxlIHRvIGEgUC1mb3JtYXR0ZWQKKyAgICAgICAgICAgICAgICAvL3N1cHBsaWNhbnQgc3RyaW5nCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbmZpZy5TU0lEID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25maWcuU1NJRCA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICB2YWx1ZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgV2lmaUNvbmZpZ3VyYXRpb24uYnNzaWRWYXJOYW1lKTsKKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGNvbmZpZy5CU1NJRCA9IHZhbHVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uZmlnLkJTU0lEID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHZhbHVlID0gbVdpZmlOYXRpdmUuZ2V0TmV0d29ya1ZhcmlhYmxlKG5ldElkLCBXaWZpQ29uZmlndXJhdGlvbi5wcmlvcml0eVZhck5hbWUpOworICAgICAgICBjb25maWcucHJpb3JpdHkgPSAtMTsKKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29uZmlnLnByaW9yaXR5ID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7CisgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gaWdub3JlKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YWx1ZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgV2lmaUNvbmZpZ3VyYXRpb24uaGlkZGVuU1NJRFZhck5hbWUpOworICAgICAgICBjb25maWcuaGlkZGVuU1NJRCA9IGZhbHNlOworICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHZhbHVlKSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25maWcuaGlkZGVuU1NJRCA9IEludGVnZXIucGFyc2VJbnQodmFsdWUpICE9IDA7CisgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gaWdub3JlKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YWx1ZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgV2lmaUNvbmZpZ3VyYXRpb24ud2VwVHhLZXlJZHhWYXJOYW1lKTsKKyAgICAgICAgY29uZmlnLndlcFR4S2V5SW5kZXggPSAtMTsKKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29uZmlnLndlcFR4S2V5SW5kZXggPSBJbnRlZ2VyLnBhcnNlSW50KHZhbHVlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBpZ25vcmUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgICAgICB2YWx1ZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwKKyAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24ud2VwS2V5VmFyTmFtZXNbaV0pOworICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBjb25maWcud2VwS2V5c1tpXSA9IHZhbHVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25maWcud2VwS2V5c1tpXSA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YWx1ZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgV2lmaUNvbmZpZ3VyYXRpb24ucHNrVmFyTmFtZSk7CisgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7CisgICAgICAgICAgICBjb25maWcucHJlU2hhcmVkS2V5ID0gdmFsdWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25maWcucHJlU2hhcmVkS2V5ID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHZhbHVlID0gbVdpZmlOYXRpdmUuZ2V0TmV0d29ya1ZhcmlhYmxlKGNvbmZpZy5uZXR3b3JrSWQsCisgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uUHJvdG9jb2wudmFyTmFtZSk7CisgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7CisgICAgICAgICAgICBTdHJpbmcgdmFsc1tdID0gdmFsdWUuc3BsaXQoIiAiKTsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIHZhbCA6IHZhbHMpIHsKKyAgICAgICAgICAgICAgICBpbnQgaW5kZXggPQorICAgICAgICAgICAgICAgICAgICBsb29rdXBTdHJpbmcodmFsLCBXaWZpQ29uZmlndXJhdGlvbi5Qcm90b2NvbC5zdHJpbmdzKTsKKyAgICAgICAgICAgICAgICBpZiAoMCA8PSBpbmRleCkgeworICAgICAgICAgICAgICAgICAgICBjb25maWcuYWxsb3dlZFByb3RvY29scy5zZXQoaW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZhbHVlID0gbVdpZmlOYXRpdmUuZ2V0TmV0d29ya1ZhcmlhYmxlKGNvbmZpZy5uZXR3b3JrSWQsCisgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uS2V5TWdtdC52YXJOYW1lKTsKKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIFN0cmluZyB2YWxzW10gPSB2YWx1ZS5zcGxpdCgiICIpOworICAgICAgICAgICAgZm9yIChTdHJpbmcgdmFsIDogdmFscykgeworICAgICAgICAgICAgICAgIGludCBpbmRleCA9CisgICAgICAgICAgICAgICAgICAgIGxvb2t1cFN0cmluZyh2YWwsIFdpZmlDb25maWd1cmF0aW9uLktleU1nbXQuc3RyaW5ncyk7CisgICAgICAgICAgICAgICAgaWYgKDAgPD0gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFsbG93ZWRLZXlNYW5hZ2VtZW50LnNldChpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUoY29uZmlnLm5ldHdvcmtJZCwKKyAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi5BdXRoQWxnb3JpdGhtLnZhck5hbWUpOworICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHZhbHVlKSkgeworICAgICAgICAgICAgU3RyaW5nIHZhbHNbXSA9IHZhbHVlLnNwbGl0KCIgIik7CisgICAgICAgICAgICBmb3IgKFN0cmluZyB2YWwgOiB2YWxzKSB7CisgICAgICAgICAgICAgICAgaW50IGluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgbG9va3VwU3RyaW5nKHZhbCwgV2lmaUNvbmZpZ3VyYXRpb24uQXV0aEFsZ29yaXRobS5zdHJpbmdzKTsKKyAgICAgICAgICAgICAgICBpZiAoMCA8PSBpbmRleCkgeworICAgICAgICAgICAgICAgICAgICBjb25maWcuYWxsb3dlZEF1dGhBbGdvcml0aG1zLnNldChpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUoY29uZmlnLm5ldHdvcmtJZCwKKyAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi5QYWlyd2lzZUNpcGhlci52YXJOYW1lKTsKKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIFN0cmluZyB2YWxzW10gPSB2YWx1ZS5zcGxpdCgiICIpOworICAgICAgICAgICAgZm9yIChTdHJpbmcgdmFsIDogdmFscykgeworICAgICAgICAgICAgICAgIGludCBpbmRleCA9CisgICAgICAgICAgICAgICAgICAgIGxvb2t1cFN0cmluZyh2YWwsIFdpZmlDb25maWd1cmF0aW9uLlBhaXJ3aXNlQ2lwaGVyLnN0cmluZ3MpOworICAgICAgICAgICAgICAgIGlmICgwIDw9IGluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hbGxvd2VkUGFpcndpc2VDaXBoZXJzLnNldChpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUoY29uZmlnLm5ldHdvcmtJZCwKKyAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi5Hcm91cENpcGhlci52YXJOYW1lKTsKKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIFN0cmluZyB2YWxzW10gPSB2YWx1ZS5zcGxpdCgiICIpOworICAgICAgICAgICAgZm9yIChTdHJpbmcgdmFsIDogdmFscykgeworICAgICAgICAgICAgICAgIGludCBpbmRleCA9CisgICAgICAgICAgICAgICAgICAgIGxvb2t1cFN0cmluZyh2YWwsIFdpZmlDb25maWd1cmF0aW9uLkdyb3VwQ2lwaGVyLnN0cmluZ3MpOworICAgICAgICAgICAgICAgIGlmICgwIDw9IGluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hbGxvd2VkR3JvdXBDaXBoZXJzLnNldChpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnID09IG51bGwpIHsKKyAgICAgICAgICAgIGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnID0gbmV3IFdpZmlFbnRlcnByaXNlQ29uZmlnKCk7CisgICAgICAgIH0KKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZW50ZXJwcmlzZUZpZWxkcyA9IGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnLmdldEZpZWxkcygpOworICAgICAgICBmb3IgKFN0cmluZyBrZXkgOiBFTlRFUlBSSVNFX0NPTkZJR19TVVBQTElDQU5UX0tFWVMpIHsKKyAgICAgICAgICAgIHZhbHVlID0gbVdpZmlOYXRpdmUuZ2V0TmV0d29ya1ZhcmlhYmxlKG5ldElkLCBrZXkpOworICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBlbnRlcnByaXNlRmllbGRzLnB1dChrZXksIHJlbW92ZURvdWJsZVF1b3Rlcyh2YWx1ZSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbnRlcnByaXNlRmllbGRzLnB1dChrZXksIEVNUFRZX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChtaWdyYXRlT2xkRWFwVGxzTmF0aXZlKGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnLCBuZXRJZCkpIHsKKyAgICAgICAgICAgIHNhdmVDb25maWcoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1pZ3JhdGVDZXJ0cyhjb25maWcuZW50ZXJwcmlzZUNvbmZpZyk7CisgICAgICAgIC8vIGluaXRpYWxpemVTb2Z0d2FyZUtleXN0b3JlRmxhZyhjb25maWcuZW50ZXJwcmlzZUNvbmZpZywgbUtleVN0b3JlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVtb3ZlRG91YmxlUXVvdGVzKFN0cmluZyBzdHJpbmcpIHsKKyAgICAgICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgaWYgKChsZW5ndGggPiAxKSAmJiAoc3RyaW5nLmNoYXJBdCgwKSA9PSAnIicpCisgICAgICAgICAgICAgICAgJiYgKHN0cmluZy5jaGFyQXQobGVuZ3RoIC0gMSkgPT0gJyInKSkgeworICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoMSwgbGVuZ3RoIC0gMSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29udmVydFRvUXVvdGVkU3RyaW5nKFN0cmluZyBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuICJcIiIgKyBzdHJpbmcgKyAiXCIiOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBtYWtlU3RyaW5nKEJpdFNldCBzZXQsIFN0cmluZ1tdIHN0cmluZ3MpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgaW50IG5leHRTZXRCaXQgPSAtMTsKKworICAgICAgICAvKiBNYWtlIHN1cmUgYWxsIHNldCBiaXRzIGFyZSBpbiBbMCwgc3RyaW5ncy5sZW5ndGgpIHRvIGF2b2lkCisgICAgICAgICAqIGdvaW5nIG91dCBvZiBib3VuZHMgb24gc3RyaW5ncy4gIChTaG91bGRuJ3QgaGFwcGVuLCBidXQuLi4pICovCisgICAgICAgIHNldCA9IHNldC5nZXQoMCwgc3RyaW5ncy5sZW5ndGgpOworCisgICAgICAgIHdoaWxlICgobmV4dFNldEJpdCA9IHNldC5uZXh0U2V0Qml0KG5leHRTZXRCaXQgKyAxKSkgIT0gLTEpIHsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoc3RyaW5nc1tuZXh0U2V0Qml0XS5yZXBsYWNlKCdfJywgJy0nKSkuYXBwZW5kKCcgJyk7CisgICAgICAgIH0KKworICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgc3BhY2UKKyAgICAgICAgaWYgKHNldC5jYXJkaW5hbGl0eSgpID4gMCkgeworICAgICAgICAgICAgYnVmLnNldExlbmd0aChidWYubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBsb29rdXBTdHJpbmcoU3RyaW5nIHN0cmluZywgU3RyaW5nW10gc3RyaW5ncykgeworICAgICAgICBpbnQgc2l6ZSA9IHN0cmluZ3MubGVuZ3RoOworCisgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKCctJywgJ18nKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgICAgIGlmIChzdHJpbmcuZXF1YWxzKHN0cmluZ3NbaV0pKQorICAgICAgICAgICAgICAgIHJldHVybiBpOworCisgICAgICAgIC8vIGlmIHdlIGV2ZXIgZ2V0IGhlcmUsIHdlIHNob3VsZCBwcm9iYWJseSBhZGQgdGhlCisgICAgICAgIC8vIHZhbHVlIHRvIFdpZmlDb25maWd1cmF0aW9uIHRvIHJlZmxlY3QgdGhhdCBpdCdzCisgICAgICAgIC8vIHN1cHBvcnRlZCBieSB0aGUgV1BBIHN1cHBsaWNhbnQKKyAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGxvb2stdXAgYSBzdHJpbmc6ICIgKyBzdHJpbmcpOworCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBSZXR1cm5zIGEgdW5pcXVlIGZvciBhIGdpdmVuIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgY29uZmlnS2V5KFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZykgeworICAgICAgICBTdHJpbmcga2V5OworCisgICAgICAgIGlmIChjb25maWcuYWxsb3dlZEtleU1hbmFnZW1lbnQuZ2V0KEtleU1nbXQuV1BBX1BTSykpIHsKKyAgICAgICAgICAgIGtleSA9IGNvbmZpZy5TU0lEICsgS2V5TWdtdC5zdHJpbmdzW0tleU1nbXQuV1BBX1BTS107CisgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLmFsbG93ZWRLZXlNYW5hZ2VtZW50LmdldChLZXlNZ210LldQQV9FQVApIHx8CisgICAgICAgICAgICAgICAgY29uZmlnLmFsbG93ZWRLZXlNYW5hZ2VtZW50LmdldChLZXlNZ210LklFRUU4MDIxWCkpIHsKKyAgICAgICAgICAgIGtleSA9IGNvbmZpZy5TU0lEICsgS2V5TWdtdC5zdHJpbmdzW0tleU1nbXQuV1BBX0VBUF07CisgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLndlcEtleXNbMF0gIT0gbnVsbCkgeworICAgICAgICAgICAga2V5ID0gY29uZmlnLlNTSUQgKyAiV0VQIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGtleSA9IGNvbmZpZy5TU0lEICsgS2V5TWdtdC5zdHJpbmdzW0tleU1nbXQuTk9ORV07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ga2V5Lmhhc2hDb2RlKCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKEZpbGVEZXNjcmlwdG9yIGZkLCBQcmludFdyaXRlciBwdywgU3RyaW5nW10gYXJncykgeworICAgICAgICBwdy5wcmludGxuKCJXaWZpQ29uZmlnU3RvcmUiKTsKKyAgICAgICAgcHcucHJpbnRsbigibUxhc3RQcmlvcml0eSAiICsgbUxhc3RQcmlvcml0eSk7CisgICAgICAgIHB3LnByaW50bG4oIkNvbmZpZ3VyZWQgbmV0d29ya3MiKTsKKyAgICAgICAgZm9yIChXaWZpQ29uZmlndXJhdGlvbiBjb25mIDogZ2V0Q29uZmlndXJlZE5ldHdvcmtzKCkpIHsKKyAgICAgICAgICAgIHB3LnByaW50bG4oY29uZik7CisgICAgICAgIH0KKyAgICAgICAgcHcucHJpbnRsbigpOworCisgICAgICAgIGlmIChtTG9jYWxMb2cgIT0gbnVsbCkgeworICAgICAgICAgICAgcHcucHJpbnRsbigiV2lmaUNvbmZpZ1N0b3JlIC0gTG9nIEJlZ2luIC0tLS0iKTsKKyAgICAgICAgICAgIG1Mb2NhbExvZy5kdW1wKGZkLCBwdywgYXJncyk7CisgICAgICAgICAgICBwdy5wcmludGxuKCJXaWZpQ29uZmlnU3RvcmUgLSBMb2cgRW5kIC0tLS0iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29uZmlnRmlsZSgpIHsKKyAgICAgICAgcmV0dXJuIGlwQ29uZmlnRmlsZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgbG9nZShTdHJpbmcgcykgeworICAgICAgICBMb2cuZShUQUcsIHMpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBsb2coU3RyaW5nIHMpIHsKKyAgICAgICAgTG9nLmQoVEFHLCBzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgbG9jYWxMb2coU3RyaW5nIHMpIHsKKyAgICAgICAgaWYgKG1Mb2NhbExvZyAhPSBudWxsKSB7CisgICAgICAgICAgICBtTG9jYWxMb2cubG9nKHMpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGxvY2FsTG9nKFN0cmluZyBzLCBpbnQgbmV0SWQpIHsKKyAgICAgICAgaWYgKG1Mb2NhbExvZyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWc7CisgICAgICAgIHN5bmNocm9uaXplZChtQ29uZmlndXJlZE5ldHdvcmtzKSB7CisgICAgICAgICAgICBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1Mb2NhbExvZy5sb2cocyArICIgIiArIGNvbmZpZy5nZXRQcmludGFibGVTc2lkKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUxvY2FsTG9nLmxvZyhzICsgIiAiICsgbmV0SWQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5IG1hbmFnZW1lbnQgZm9yIEVudGVycHJpc2VDb25maWcKKyAgICBzdGF0aWMgYm9vbGVhbiBuZWVkc0tleVN0b3JlKFdpZmlFbnRlcnByaXNlQ29uZmlnIGNvbmZpZykgeworICAgICAgICAvLyBIYXMgbm8ga2V5cyB0byBiZSBpbnN0YWxsZWQKKyAgICAgICAgaWYgKGNvbmZpZy5nZXRDbGllbnRDZXJ0aWZpY2F0ZSgpID09IG51bGwgJiYgY29uZmlnLmdldENhQ2VydGlmaWNhdGUoKSA9PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbGVhbiBpc0hhcmR3YXJlQmFja2VkS2V5KFByaXZhdGVLZXkga2V5KSB7CisgICAgICAgIHJldHVybiBLZXlDaGFpbi5pc0JvdW5kS2V5QWxnb3JpdGhtKGtleS5nZXRBbGdvcml0aG0oKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2xlYW4gaGFzSGFyZHdhcmVCYWNrZWRLZXkoQ2VydGlmaWNhdGUgY2VydGlmaWNhdGUpIHsKKyAgICAgICAgcmV0dXJuIEtleUNoYWluLmlzQm91bmRLZXlBbGdvcml0aG0oY2VydGlmaWNhdGUuZ2V0UHVibGljS2V5KCkuZ2V0QWxnb3JpdGhtKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sZWFuIG5lZWRzU29mdHdhcmVCYWNrZWRLZXlTdG9yZShXaWZpRW50ZXJwcmlzZUNvbmZpZyBjb25maWcpIHsKKyAgICAgICAgU3RyaW5nIGNsaWVudCA9IGNvbmZpZy5nZXRDbGllbnRDZXJ0aWZpY2F0ZUFsaWFzKCk7CisgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkoY2xpZW50KSkgeworICAgICAgICAgICAgLy8gYSB2YWxpZCBjbGllbnQgY2VydGlmaWNhdGUgaXMgY29uZmlndXJlZAorCisgICAgICAgICAgICAvLyBCVUdCVUc6IGtleVN0b3JlLmdldCgpIG5ldmVyIHJldHVybnMgY2VydEJ5dGVzOyBiZWNhdXNlIGl0IGlzIG5vdAorICAgICAgICAgICAgLy8gdGFraW5nIFdJRklfVUlEIGFzIGEgcGFyYW1ldGVyLiBJdCBhbHdheXMgbG9va3MgZm9yIGNlcnRpZmljYXRlCisgICAgICAgICAgICAvLyB3aXRoIFNZU1RFTV9VSUQsIGFuZCBuZXZlciBmaW5kcyBhbnkgV2lmaSBjZXJ0aWZpY2F0ZXMuIEFzc3VtaW5nIHRoYXQKKyAgICAgICAgICAgIC8vIGFsbCBjZXJ0aWZpY2F0ZXMgbmVlZCBzb2Z0d2FyZSBrZXlzdG9yZSB1bnRpbCB3ZSBnZXQgdGhlIGdldCgpIEFQSQorICAgICAgICAgICAgLy8gZml4ZWQuCisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgdHJ5IHsKKworICAgICAgICAgICAgaWYgKERCRykgU2xvZy5kKFRBRywgIkxvYWRpbmcgY2xpZW50IGNlcnRpZmljYXRlICIgKyBDcmVkZW50aWFscworICAgICAgICAgICAgICAgICAgICAuVVNFUl9DRVJUSUZJQ0FURSArIGNsaWVudCk7CisKKyAgICAgICAgICAgIENlcnRpZmljYXRlRmFjdG9yeSBmYWN0b3J5ID0gQ2VydGlmaWNhdGVGYWN0b3J5LmdldEluc3RhbmNlKCJYLjUwOSIpOworICAgICAgICAgICAgaWYgKGZhY3RvcnkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJFcnJvciBnZXR0aW5nIGNlcnRpZmljYXRlIGZhY3RvcnkiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ5dGVbXSBjZXJ0Qnl0ZXMgPSBrZXlTdG9yZS5nZXQoQ3JlZGVudGlhbHMuVVNFUl9DRVJUSUZJQ0FURSArIGNsaWVudCk7CisgICAgICAgICAgICBpZiAoY2VydEJ5dGVzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBDZXJ0aWZpY2F0ZSBjZXJ0ID0gKFg1MDlDZXJ0aWZpY2F0ZSkgZmFjdG9yeS5nZW5lcmF0ZUNlcnRpZmljYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGNlcnRCeXRlcykpOworCisgICAgICAgICAgICAgICAgaWYgKGNlcnQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBtTmVlZHNTb2Z0d2FyZUtleXN0b3JlID0gaGFzSGFyZHdhcmVCYWNrZWRLZXkoY2VydCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgU2xvZy5kKFRBRywgIkxvYWRlZCBjbGllbnQgY2VydGlmaWNhdGUgIiArIENyZWRlbnRpYWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLlVTRVJfQ0VSVElGSUNBVEUgKyBjbGllbnQpOworICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBTbG9nLmQoVEFHLCAiSXQgIiArIChtTmVlZHNTb2Z0d2FyZUtleXN0b3JlID8gIm5lZWRzIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvZXMgbm90IG5lZWQiICkgKyAiIHNvZnR3YXJlIGtleSBzdG9yZSIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNsb2cuZChUQUcsICJjb3VsZCBub3QgZ2VuZXJhdGUgY2VydGlmaWNhdGUiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJDb3VsZCBub3QgbG9hZCBjbGllbnQgY2VydGlmaWNhdGUgIiArIENyZWRlbnRpYWxzCisgICAgICAgICAgICAgICAgICAgICAgICAuVVNFUl9DRVJUSUZJQ0FURSArIGNsaWVudCk7CisgICAgICAgICAgICAgICAgbU5lZWRzU29mdHdhcmVLZXlzdG9yZSA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBjYXRjaChDZXJ0aWZpY2F0ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTbG9nLmUoVEFHLCAiQ291bGQgbm90IHJlYWQgY2VydGlmaWNhdGVzIik7CisgICAgICAgICAgICBtQ2FDZXJ0ID0gbnVsbDsKKyAgICAgICAgICAgIG1DbGllbnRDZXJ0aWZpY2F0ZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgKi8KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbGVhbiBpbnN0YWxsS2V5cyhXaWZpRW50ZXJwcmlzZUNvbmZpZyBjb25maWcsIFN0cmluZyBuYW1lKSB7CisgICAgICAgIGJvb2xlYW4gcmV0ID0gdHJ1ZTsKKyAgICAgICAgU3RyaW5nIHByaXZLZXlOYW1lID0gQ3JlZGVudGlhbHMuVVNFUl9QUklWQVRFX0tFWSArIG5hbWU7CisgICAgICAgIFN0cmluZyB1c2VyQ2VydE5hbWUgPSBDcmVkZW50aWFscy5VU0VSX0NFUlRJRklDQVRFICsgbmFtZTsKKyAgICAgICAgU3RyaW5nIGNhQ2VydE5hbWUgPSBDcmVkZW50aWFscy5DQV9DRVJUSUZJQ0FURSArIG5hbWU7CisgICAgICAgIGlmIChjb25maWcuZ2V0Q2xpZW50Q2VydGlmaWNhdGUoKSAhPSBudWxsKSB7CisgICAgICAgICAgICBieXRlW10gcHJpdktleURhdGEgPSBjb25maWcuZ2V0Q2xpZW50UHJpdmF0ZUtleSgpLmdldEVuY29kZWQoKTsKKyAgICAgICAgICAgIGlmIChpc0hhcmR3YXJlQmFja2VkS2V5KGNvbmZpZy5nZXRDbGllbnRQcml2YXRlS2V5KCkpKSB7CisgICAgICAgICAgICAgICAgLy8gSGFyZHdhcmUgYmFja2VkIGtleSBzdG9yZSBpcyBzZWN1cmUgZW5vdWdoIHRvIHN0b3JlIGtleXMgdW4tZW5jcnlwdGVkLCB0aGlzCisgICAgICAgICAgICAgICAgLy8gcmVtb3ZlcyB0aGUgbmVlZCBmb3IgdXNlciB0byBwdW5jaCBhIFBJTiB0byBnZXQgYWNjZXNzIHRvIHRoZXNlIGtleXMKKyAgICAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJpbXBvcnRpbmcga2V5cyAiICsgbmFtZSArICIgaW4gaGFyZHdhcmUgYmFja2VkIHN0b3JlIik7CisgICAgICAgICAgICAgICAgcmV0ID0gbUtleVN0b3JlLmltcG9ydEtleShwcml2S2V5TmFtZSwgcHJpdktleURhdGEsIGFuZHJvaWQub3MuUHJvY2Vzcy5XSUZJX1VJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEtleVN0b3JlLkZMQUdfTk9ORSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFNvZnR3YXJlIGJhY2tlZCBrZXkgc3RvcmUgaXMgTk9UIHNlY3VyZSBlbm91Z2ggdG8gc3RvcmUga2V5cyB1bi1lbmNyeXB0ZWQuCisgICAgICAgICAgICAgICAgLy8gU2F2ZSBrZXlzIGVuY3J5cHRlZCBzbyB0aGV5IGFyZSBwcm90ZWN0ZWQgd2l0aCB1c2VyJ3MgUElOLiBVc2VyIHdpbGwKKyAgICAgICAgICAgICAgICAvLyBoYXZlIHRvIHVubG9jayBwaG9uZSBiZWZvcmUgYmVpbmcgYWJsZSB0byB1c2UgdGhlc2Uga2V5cyBhbmQgY29ubmVjdCB0bworICAgICAgICAgICAgICAgIC8vIG5ldHdvcmtzLgorICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgImltcG9ydGluZyBrZXlzICIgKyBuYW1lICsgIiBpbiBzb2Z0d2FyZSBiYWNrZWQgc3RvcmUiKTsKKyAgICAgICAgICAgICAgICByZXQgPSBtS2V5U3RvcmUuaW1wb3J0S2V5KHByaXZLZXlOYW1lLCBwcml2S2V5RGF0YSwgUHJvY2Vzcy5XSUZJX1VJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEtleVN0b3JlLkZMQUdfRU5DUllQVEVEKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXQgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgPSBwdXRDZXJ0SW5LZXlTdG9yZSh1c2VyQ2VydE5hbWUsIGNvbmZpZy5nZXRDbGllbnRDZXJ0aWZpY2F0ZSgpKTsKKyAgICAgICAgICAgIGlmIChyZXQgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAvLyBSZW1vdmUgcHJpdmF0ZSBrZXkgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgbUtleVN0b3JlLmRlbEtleShwcml2S2V5TmFtZSwgUHJvY2Vzcy5XSUZJX1VJRCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcuZ2V0Q2FDZXJ0aWZpY2F0ZSgpICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldCA9IHB1dENlcnRJbktleVN0b3JlKGNhQ2VydE5hbWUsIGNvbmZpZy5nZXRDYUNlcnRpZmljYXRlKCkpOworICAgICAgICAgICAgaWYgKHJldCA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIGlmIChjb25maWcuZ2V0Q2xpZW50Q2VydGlmaWNhdGUoKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBjbGllbnQga2V5K2NlcnQKKyAgICAgICAgICAgICAgICAgICAgbUtleVN0b3JlLmRlbEtleShwcml2S2V5TmFtZSwgUHJvY2Vzcy5XSUZJX1VJRCk7CisgICAgICAgICAgICAgICAgICAgIG1LZXlTdG9yZS5kZWxldGUodXNlckNlcnROYW1lLCBQcm9jZXNzLldJRklfVUlEKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFNldCBhbGlhcyBuYW1lcworICAgICAgICBpZiAoY29uZmlnLmdldENsaWVudENlcnRpZmljYXRlKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgY29uZmlnLnNldENsaWVudENlcnRpZmljYXRlQWxpYXMobmFtZSk7CisgICAgICAgICAgICBjb25maWcucmVzZXRDbGllbnRLZXlFbnRyeSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmZpZy5nZXRDYUNlcnRpZmljYXRlKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgY29uZmlnLnNldENhQ2VydGlmaWNhdGVBbGlhcyhuYW1lKTsKKyAgICAgICAgICAgIGNvbmZpZy5yZXNldENhQ2VydGlmaWNhdGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIHB1dENlcnRJbktleVN0b3JlKFN0cmluZyBuYW1lLCBDZXJ0aWZpY2F0ZSBjZXJ0KSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBieXRlW10gY2VydERhdGEgPSBDcmVkZW50aWFscy5jb252ZXJ0VG9QZW0oY2VydCk7CisgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJwdXR0aW5nIGNlcnRpZmljYXRlICIgKyBuYW1lICsgIiBpbiBrZXlzdG9yZSIpOworICAgICAgICAgICAgcmV0dXJuIG1LZXlTdG9yZS5wdXQobmFtZSwgY2VydERhdGEsIFByb2Nlc3MuV0lGSV9VSUQsIEtleVN0b3JlLkZMQUdfTk9ORSk7CisKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZTEpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBjYXRjaCAoQ2VydGlmaWNhdGVFeGNlcHRpb24gZTIpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcmVtb3ZlS2V5cyhXaWZpRW50ZXJwcmlzZUNvbmZpZyBjb25maWcpIHsKKyAgICAgICAgU3RyaW5nIGNsaWVudCA9IGNvbmZpZy5nZXRDbGllbnRDZXJ0aWZpY2F0ZUFsaWFzKCk7CisgICAgICAgIC8vIGEgdmFsaWQgY2xpZW50IGNlcnRpZmljYXRlIGlzIGNvbmZpZ3VyZWQKKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShjbGllbnQpKSB7CisgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJyZW1vdmluZyBjbGllbnQgcHJpdmF0ZSBrZXkgYW5kIHVzZXIgY2VydCIpOworICAgICAgICAgICAgbUtleVN0b3JlLmRlbEtleShDcmVkZW50aWFscy5VU0VSX1BSSVZBVEVfS0VZICsgY2xpZW50LCBQcm9jZXNzLldJRklfVUlEKTsKKyAgICAgICAgICAgIG1LZXlTdG9yZS5kZWxldGUoQ3JlZGVudGlhbHMuVVNFUl9DRVJUSUZJQ0FURSArIGNsaWVudCwgUHJvY2Vzcy5XSUZJX1VJRCk7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgY2EgPSBjb25maWcuZ2V0Q2FDZXJ0aWZpY2F0ZUFsaWFzKCk7CisgICAgICAgIC8vIGEgdmFsaWQgY2EgY2VydGlmaWNhdGUgaXMgY29uZmlndXJlZAorICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KGNhKSkgeworICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAicmVtb3ZpbmcgQ0EgY2VydCIpOworICAgICAgICAgICAgbUtleVN0b3JlLmRlbGV0ZShDcmVkZW50aWFscy5DQV9DRVJUSUZJQ0FURSArIGNhLCBQcm9jZXNzLldJRklfVUlEKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqIE1pZ3JhdGVzIHRoZSBvbGQgc3R5bGUgVExTIGNvbmZpZyB0byB0aGUgbmV3IGNvbmZpZyBzdHlsZS4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkCisgICAgICogd2hlbiByZXN0b3JpbmcgYW4gb2xkIHdwYV9zdXBwbGljYW50LmNvbmYgb3IgdXBncmFkaW5nIGZyb20gYSBwcmV2aW91cworICAgICAqIHBsYXRmb3JtIHZlcnNpb24uCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBjb25maWcgd2FzIHVwZGF0ZWQKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIGJvb2xlYW4gbWlncmF0ZU9sZEVhcFRsc05hdGl2ZShXaWZpRW50ZXJwcmlzZUNvbmZpZyBjb25maWcsIGludCBuZXRJZCkgeworICAgICAgICBTdHJpbmcgb2xkUHJpdmF0ZUtleSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgT0xEX1BSSVZBVEVfS0VZX05BTUUpOworICAgICAgICAvKgorICAgICAgICAgKiBJZiB0aGUgb2xkIGNvbmZpZ3VyYXRpb24gdmFsdWUgaXMgbm90IHByZXNlbnQsIHRoZW4gdGhlcmUgaXMgbm90aGluZworICAgICAgICAgKiB0byBkby4KKyAgICAgICAgICovCisgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShvbGRQcml2YXRlS2V5KSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQWxzbyBpZ25vcmUgaXQgaWYgaXQncyBlbXB0eSBxdW90ZXMuCisgICAgICAgICAgICBvbGRQcml2YXRlS2V5ID0gcmVtb3ZlRG91YmxlUXVvdGVzKG9sZFByaXZhdGVLZXkpOworICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG9sZFByaXZhdGVLZXkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uZmlnLnNldEZpZWxkVmFsdWUoV2lmaUVudGVycHJpc2VDb25maWcuRU5HSU5FX0tFWSwgV2lmaUVudGVycHJpc2VDb25maWcuRU5HSU5FX0VOQUJMRSk7CisgICAgICAgIGNvbmZpZy5zZXRGaWVsZFZhbHVlKFdpZmlFbnRlcnByaXNlQ29uZmlnLkVOR0lORV9JRF9LRVksCisgICAgICAgICAgICAgICAgV2lmaUVudGVycHJpc2VDb25maWcuRU5HSU5FX0lEX0tFWVNUT1JFKTsKKworICAgICAgICAvKgorICAgICAgICAqIFRoZSBvbGQga2V5IHN0YXJ0ZWQgd2l0aCB0aGUga2V5c3RvcmU6Ly8gVVJJIHByZWZpeCwgYnV0IHdlIGRvbid0CisgICAgICAgICogbmVlZCB0aGF0IGFueW1vcmUuIFRyaW0gaXQgb2ZmIGlmIGl0IGV4aXN0cy4KKyAgICAgICAgKi8KKyAgICAgICAgZmluYWwgU3RyaW5nIGtleU5hbWU7CisgICAgICAgIGlmIChvbGRQcml2YXRlS2V5LnN0YXJ0c1dpdGgoV2lmaUVudGVycHJpc2VDb25maWcuS0VZU1RPUkVfVVJJKSkgeworICAgICAgICAgICAga2V5TmFtZSA9IG5ldyBTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgIG9sZFByaXZhdGVLZXkuc3Vic3RyaW5nKFdpZmlFbnRlcnByaXNlQ29uZmlnLktFWVNUT1JFX1VSSS5sZW5ndGgoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAga2V5TmFtZSA9IG9sZFByaXZhdGVLZXk7CisgICAgICAgIH0KKyAgICAgICAgY29uZmlnLnNldEZpZWxkVmFsdWUoV2lmaUVudGVycHJpc2VDb25maWcuUFJJVkFURV9LRVlfSURfS0VZLCBrZXlOYW1lKTsKKworICAgICAgICBtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIFdpZmlFbnRlcnByaXNlQ29uZmlnLkVOR0lORV9LRVksCisgICAgICAgICAgICAgICAgY29uZmlnLmdldEZpZWxkVmFsdWUoV2lmaUVudGVycHJpc2VDb25maWcuRU5HSU5FX0tFWSwgIiIpKTsKKworICAgICAgICBtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIFdpZmlFbnRlcnByaXNlQ29uZmlnLkVOR0lORV9JRF9LRVksCisgICAgICAgICAgICAgICAgY29uZmlnLmdldEZpZWxkVmFsdWUoV2lmaUVudGVycHJpc2VDb25maWcuRU5HSU5FX0lEX0tFWSwgIiIpKTsKKworICAgICAgICBtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIFdpZmlFbnRlcnByaXNlQ29uZmlnLlBSSVZBVEVfS0VZX0lEX0tFWSwKKyAgICAgICAgICAgICAgICBjb25maWcuZ2V0RmllbGRWYWx1ZShXaWZpRW50ZXJwcmlzZUNvbmZpZy5QUklWQVRFX0tFWV9JRF9LRVksICIiKSk7CisKKyAgICAgICAgLy8gUmVtb3ZlIG9sZCBwcml2YXRlX2tleSBzdHJpbmcgc28gd2UgZG9uJ3QgcnVuIHRoaXMgYWdhaW4uCisgICAgICAgIG1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgT0xEX1BSSVZBVEVfS0VZX05BTUUsIEVNUFRZX1ZBTFVFKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKiogTWlncmF0ZSBjZXJ0cyBmcm9tIGdsb2JhbCBwb29sIHRvIHdpZmkgVUlEIGlmIG5vdCBhbHJlYWR5IGRvbmUgKi8KKyAgICB2b2lkIG1pZ3JhdGVDZXJ0cyhXaWZpRW50ZXJwcmlzZUNvbmZpZyBjb25maWcpIHsKKyAgICAgICAgU3RyaW5nIGNsaWVudCA9IGNvbmZpZy5nZXRDbGllbnRDZXJ0aWZpY2F0ZUFsaWFzKCk7CisgICAgICAgIC8vIGEgdmFsaWQgY2xpZW50IGNlcnRpZmljYXRlIGlzIGNvbmZpZ3VyZWQKKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShjbGllbnQpKSB7CisgICAgICAgICAgICBpZiAoIW1LZXlTdG9yZS5jb250YWlucyhDcmVkZW50aWFscy5VU0VSX1BSSVZBVEVfS0VZICsgY2xpZW50LCBQcm9jZXNzLldJRklfVUlEKSkgeworICAgICAgICAgICAgICAgIG1LZXlTdG9yZS5kdXBsaWNhdGUoQ3JlZGVudGlhbHMuVVNFUl9QUklWQVRFX0tFWSArIGNsaWVudCwgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICBDcmVkZW50aWFscy5VU0VSX1BSSVZBVEVfS0VZICsgY2xpZW50LCBQcm9jZXNzLldJRklfVUlEKTsKKyAgICAgICAgICAgICAgICBtS2V5U3RvcmUuZHVwbGljYXRlKENyZWRlbnRpYWxzLlVTRVJfQ0VSVElGSUNBVEUgKyBjbGllbnQsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlZGVudGlhbHMuVVNFUl9DRVJUSUZJQ0FURSArIGNsaWVudCwgUHJvY2Vzcy5XSUZJX1VJRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgY2EgPSBjb25maWcuZ2V0Q2FDZXJ0aWZpY2F0ZUFsaWFzKCk7CisgICAgICAgIC8vIGEgdmFsaWQgY2EgY2VydGlmaWNhdGUgaXMgY29uZmlndXJlZAorICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KGNhKSkgeworICAgICAgICAgICAgaWYgKCFtS2V5U3RvcmUuY29udGFpbnMoQ3JlZGVudGlhbHMuQ0FfQ0VSVElGSUNBVEUgKyBjYSwgUHJvY2Vzcy5XSUZJX1VJRCkpIHsKKyAgICAgICAgICAgICAgICBtS2V5U3RvcmUuZHVwbGljYXRlKENyZWRlbnRpYWxzLkNBX0NFUlRJRklDQVRFICsgY2EsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlZGVudGlhbHMuQ0FfQ0VSVElGSUNBVEUgKyBjYSwgUHJvY2Vzcy5XSUZJX1VJRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK30KKwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpQ29udHJvbGxlci5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpQ29udHJvbGxlci5qYXZhCmluZGV4IGEzZDUxNGUuLjg3NjY4MjYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaUNvbnRyb2xsZXIuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlDb250cm9sbGVyLmphdmEKQEAgLTMwLDcgKzMwLDYgQEAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX01PREVfRlVMTDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX01PREVfRlVMTF9ISUdIX1BFUkY7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9NT0RFX1NDQU5fT05MWTsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlTdGF0ZU1hY2hpbmU7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaU1vbml0b3IuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaU1vbml0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzYxYzExCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpTW9uaXRvci5qYXZhCkBAIC0wLDAgKzEsOTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIud2lmaTsKKworaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtJbmZvOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuU3VwcGxpY2FudFN0YXRlOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpU3NpZDsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5XaWZpUDJwQ29uZmlnOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBEZXZpY2U7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycEdyb3VwOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBQcm92RGlzY0V2ZW50OworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLm5zZC5XaWZpUDJwU2VydmljZVJlc3BvbnNlOworaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLndpZmkucDJwLldpZmlQMnBTZXJ2aWNlLlAycFN0YXR1czsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJvdG9jb2w7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZU1hY2hpbmU7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKK2ltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKKworLyoqCisgKiBMaXN0ZW5zIGZvciBldmVudHMgZnJvbSB0aGUgd3BhX3N1cHBsaWNhbnQgc2VydmVyLCBhbmQgcGFzc2VzIHRoZW0gb24KKyAqIHRvIHRoZSB7QGxpbmsgU3RhdGVNYWNoaW5lfSBmb3IgaGFuZGxpbmcuIFJ1bnMgaW4gaXRzIG93biB0aHJlYWQuCisgKgorICogQGhpZGUKKyAqLworcHVibGljIGNsYXNzIFdpZmlNb25pdG9yIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREJHID0gZmFsc2U7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXaWZpTW9uaXRvciI7CisKKyAgICAvKiogRXZlbnRzIHdlIHJlY2VpdmUgZnJvbSB0aGUgc3VwcGxpY2FudCBkYWVtb24gKi8KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT05ORUNURUQgICAgPSAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBESVNDT05ORUNURUQgPSAyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9DSEFOR0UgPSAzOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTQ0FOX1JFU1VMVFMgPSA0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU5LX1NQRUVEICAgPSA1OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVJNSU5BVElORyAgPSA2OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEUklWRVJfU1RBVEUgPSA3OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFQVBfRkFJTFVSRSAgPSA4OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBU1NPQ19SRUpFQ1QgPSA5OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTktOT1dOICAgICAgPSAxMDsKKworICAgIC8qKiBBbGwgZXZlbnRzIGNvbWluZyBmcm9tIHRoZSBzdXBwbGljYW50IHN0YXJ0IHdpdGggdGhpcyBwcmVmaXggKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVZFTlRfUFJFRklYX1NUUiA9ICJDVFJMLUVWRU5ULSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1BSRUZJWF9MRU5fU1RSID0gRVZFTlRfUFJFRklYX1NUUi5sZW5ndGgoKTsKKworICAgIC8qKiBBbGwgV1BBIGV2ZW50cyBjb21pbmcgZnJvbSB0aGUgc3VwcGxpY2FudCBzdGFydCB3aXRoIHRoaXMgcHJlZml4ICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdQQV9FVkVOVF9QUkVGSVhfU1RSID0gIldQQToiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQVNTV09SRF9NQVlfQkVfSU5DT1JSRUNUX1NUUiA9CisgICAgICAgInByZS1zaGFyZWQga2V5IG1heSBiZSBpbmNvcnJlY3QiOworCisgICAgLyogV1BTIGV2ZW50cyAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXUFNfU1VDQ0VTU19TVFIgPSAiV1BTLVNVQ0NFU1MiOworCisgICAgLyogRm9ybWF0OiBXUFMtRkFJTCBtc2c9JWQgW2NvbmZpZ19lcnJvcj0lZF0gW3JlYXNvbj0lZCAoJXMpXSAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXUFNfRkFJTF9TVFIgICAgPSAiV1BTLUZBSUwiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXUFNfRkFJTF9QQVRURVJOID0KKyAgICAgICAgICAgICJXUFMtRkFJTCBtc2c9XFxkKyg/OiBjb25maWdfZXJyb3I9KFxcZCspKT8oPzogcmVhc29uPShcXGQrKSk/IjsKKworICAgIC8qIGNvbmZpZyBlcnJvciBjb2RlIHZhbHVlcyBmb3IgY29uZmlnX2Vycm9yPSVkICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTkZJR19NVUxUSVBMRV9QQkNfREVURUNURUQgPSAxMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09ORklHX0FVVEhfRkFJTFVSRSA9IDE4OworCisgICAgLyogcmVhc29uIGNvZGUgdmFsdWVzIGZvciByZWFzb249JWQgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX1RLSVBfT05MWV9QUk9ISUJJVEVEID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX1dFUF9QUk9ISUJJVEVEID0gMjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXUFNfT1ZFUkxBUF9TVFIgPSAiV1BTLU9WRVJMQVAtREVURUNURUQiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXUFNfVElNRU9VVF9TVFIgPSAiV1BTLVRJTUVPVVQiOworCisgICAgLyoqCisgICAgICogTmFtZXMgb2YgZXZlbnRzIGZyb20gd3BhX3N1cHBsaWNhbnQgKG1pbnVzIHRoZSBwcmVmaXgpLiBJbiB0aGUKKyAgICAgKiBmb3JtYXQgZGVzY3JpcHRpb25zLCAqICZxdW90Ozxjb2RlPng8L2NvZGU+JnF1b3Q7CisgICAgICogZGVzaWduYXRlcyBhIGR5bmFtaWMgdmFsdWUgdGhhdCBuZWVkcyB0byBiZSBwYXJzZWQgb3V0IGZyb20gdGhlIGV2ZW50CisgICAgICogc3RyaW5nCisgICAgICovCisgICAgLyoqCisgICAgICogPHByZT4KKyAgICAgKiBDVFJMLUVWRU5ULUNPTk5FQ1RFRCAtIENvbm5lY3Rpb24gdG8geHg6eHg6eHg6eHg6eHg6eHggY29tcGxldGVkCisgICAgICogPC9wcmU+CisgICAgICogPGNvZGU+eHg6eHg6eHg6eHg6eHg6eHg8L2NvZGU+IGlzIHRoZSBCU1NJRCBvZiB0aGUgYXNzb2NpYXRlZCBhY2Nlc3MgcG9pbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OTkVDVEVEX1NUUiA9ICAgICJDT05ORUNURUQiOworICAgIC8qKgorICAgICAqIDxwcmU+CisgICAgICogQ1RSTC1FVkVOVC1ESVNDT05ORUNURUQgLSBEaXNjb25uZWN0IGV2ZW50IC0gcmVtb3ZlIGtleXMKKyAgICAgKiA8L3ByZT4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTQ09OTkVDVEVEX1NUUiA9ICJESVNDT05ORUNURUQiOworICAgIC8qKgorICAgICAqIDxwcmU+CisgICAgICogQ1RSTC1FVkVOVC1TVEFURS1DSEFOR0UgeAorICAgICAqIDwvcHJlPgorICAgICAqIDxjb2RlPng8L2NvZGU+IGlzIHRoZSBudW1lcmljYWwgdmFsdWUgb2YgdGhlIG5ldyBzdGF0ZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBVEVfQ0hBTkdFX1NUUiA9ICAiU1RBVEUtQ0hBTkdFIjsKKyAgICAvKioKKyAgICAgKiA8cHJlPgorICAgICAqIENUUkwtRVZFTlQtU0NBTi1SRVNVTFRTIHJlYWR5CisgICAgICogPC9wcmU+CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDQU5fUkVTVUxUU19TVFIgPSAgIlNDQU4tUkVTVUxUUyI7CisKKyAgICAvKioKKyAgICAgKiA8cHJlPgorICAgICAqIENUUkwtRVZFTlQtTElOSy1TUEVFRCB4IE1iL3MKKyAgICAgKiA8L3ByZT4KKyAgICAgKiB7QGNvZGUgeH0gaXMgdGhlIGxpbmsgc3BlZWQgaW4gTWIvc2VjLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5LX1NQRUVEX1NUUiA9ICJMSU5LLVNQRUVEIjsKKyAgICAvKioKKyAgICAgKiA8cHJlPgorICAgICAqIENUUkwtRVZFTlQtVEVSTUlOQVRJTkcgLSBzaWduYWwgeAorICAgICAqIDwvcHJlPgorICAgICAqIDxjb2RlPng8L2NvZGU+IGlzIHRoZSBzaWduYWwgdGhhdCBjYXVzZWQgdGVybWluYXRpb24uCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFUk1JTkFUSU5HX1NUUiA9ICAiVEVSTUlOQVRJTkciOworICAgIC8qKgorICAgICAqIDxwcmU+CisgICAgICogQ1RSTC1FVkVOVC1EUklWRVItU1RBVEUgc3RhdGUKKyAgICAgKiA8L3ByZT4KKyAgICAgKiA8Y29kZT5zdGF0ZTwvY29kZT4gY2FuIGJlIEhBTkdFRAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEUklWRVJfU1RBVEVfU1RSID0gIkRSSVZFUi1TVEFURSI7CisgICAgLyoqCisgICAgICogPHByZT4KKyAgICAgKiBDVFJMLUVWRU5ULUVBUC1GQUlMVVJFIEVBUCBhdXRoZW50aWNhdGlvbiBmYWlsZWQKKyAgICAgKiA8L3ByZT4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUFQX0ZBSUxVUkVfU1RSID0gIkVBUC1GQUlMVVJFIjsKKworICAgIC8qKgorICAgICAqIFRoaXMgaW5kaWNhdGVzIGFuIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgb24gRUFQIEZBSUxVUkUgZXZlbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUFQX0FVVEhfRkFJTFVSRV9TVFIgPSAiRUFQIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCI7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGluZGljYXRlcyBhbiBhc3NvYyByZWplY3QgZXZlbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVNTT0NfUkVKRUNUX1NUUiA9ICJBU1NPQy1SRUpFQ1QiOworCisgICAgLyoqCisgICAgICogUmVnZXggcGF0dGVybiBmb3IgZXh0cmFjdGluZyBhbiBFdGhlcm5ldC1zdHlsZSBNQUMgYWRkcmVzcyBmcm9tIGEgc3RyaW5nLgorICAgICAqIE1hdGNoZXMgYSBzdHJpbmdzIGxpa2UgdGhlIGZvbGxvd2luZzo8cHJlPgorICAgICAqIENUUkwtRVZFTlQtQ09OTkVDVEVEIC0gQ29ubmVjdGlvbiB0byAwMDoxZTo1ODplYzpkNTo2ZCBjb21wbGV0ZWQgKHJlYXV0aCkgW2lkPTEgaWRfc3RyPV08L3ByZT4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBQYXR0ZXJuIG1Db25uZWN0ZWRFdmVudFBhdHRlcm4gPQorICAgICAgICBQYXR0ZXJuLmNvbXBpbGUoIigoPzpbMC05YS1mXXsyfTopezV9WzAtOWEtZl17Mn0pIC4qIFxcW2lkPShbMC05XSspICIpOworCisgICAgLyoqIFAyUCBldmVudHMgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX0VWRU5UX1BSRUZJWF9TVFIgPSAiUDJQIjsKKworICAgIC8qIFAyUC1ERVZJQ0UtRk9VTkQgZmE6N2I6N2E6NDI6MDI6MTMgcDJwX2Rldl9hZGRyPWZhOjdiOjdhOjQyOjAyOjEzIHByaV9kZXZfdHlwZT0xLTAwNTBGMjA0LTEKKyAgICAgICBuYW1lPSdwMnAtVEVTVDEnIGNvbmZpZ19tZXRob2RzPTB4MTg4IGRldl9jYXBhYj0weDI3IGdyb3VwX2NhcGFiPTB4MCAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfREVWSUNFX0ZPVU5EX1NUUiA9ICJQMlAtREVWSUNFLUZPVU5EIjsKKworICAgIC8qIFAyUC1ERVZJQ0UtTE9TVCBwMnBfZGV2X2FkZHI9NDI6ZmM6ODk6ZTE6ZTI6MjcgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX0RFVklDRV9MT1NUX1NUUiA9ICJQMlAtREVWSUNFLUxPU1QiOworCisgICAgLyogUDJQLUZJTkQtU1RPUFBFRCAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfRklORF9TVE9QUEVEX1NUUiA9ICJQMlAtRklORC1TVE9QUEVEIjsKKworICAgIC8qIFAyUC1HTy1ORUctUkVRVUVTVCA0MjpmYzo4OTphODo5NjowOSBkZXZfcGFzc3dkX2lkPTQgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX0dPX05FR19SRVFVRVNUX1NUUiA9ICJQMlAtR08tTkVHLVJFUVVFU1QiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9HT19ORUdfU1VDQ0VTU19TVFIgPSAiUDJQLUdPLU5FRy1TVUNDRVNTIjsKKworICAgIC8qIFAyUC1HTy1ORUctRkFJTFVSRSBzdGF0dXM9eCAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfR09fTkVHX0ZBSUxVUkVfU1RSID0gIlAyUC1HTy1ORUctRkFJTFVSRSI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX0dST1VQX0ZPUk1BVElPTl9TVUNDRVNTX1NUUiA9CisgICAgICAgICAgICAiUDJQLUdST1VQLUZPUk1BVElPTi1TVUNDRVNTIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfR1JPVVBfRk9STUFUSU9OX0ZBSUxVUkVfU1RSID0KKyAgICAgICAgICAgICJQMlAtR1JPVVAtRk9STUFUSU9OLUZBSUxVUkUiOworCisgICAgLyogUDJQLUdST1VQLVNUQVJURUQgcDJwLXdsYW4wLTAgW2NsaWVudHxHT10gc3NpZD0iRElSRUNULVc4IiBmcmVxPTI0MzcKKyAgICAgICBbcHNrPTIxODJiMmU1MGU1M2YyNjBkMDRmM2M3YjI1ZWYzM2M5NjVhMzI5MWI5YjM2YjQ1NWE4MmQ3N2ZkODJjYTE1YmN8cGFzc3BocmFzZT0iZktHNGpNZTMiXQorICAgICAgIGdvX2Rldl9hZGRyPWZhOjdiOjdhOjQyOjAyOjEzIFtQRVJTSVNURU5UXSAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfR1JPVVBfU1RBUlRFRF9TVFIgPSAiUDJQLUdST1VQLVNUQVJURUQiOworCisgICAgLyogUDJQLUdST1VQLVJFTU9WRUQgcDJwLXdsYW4wLTAgW2NsaWVudHxHT10gcmVhc29uPVJFUVVFU1RFRCAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfR1JPVVBfUkVNT1ZFRF9TVFIgPSAiUDJQLUdST1VQLVJFTU9WRUQiOworCisgICAgLyogUDJQLUlOVklUQVRJT04tUkVDRUlWRUQgc2E9ZmE6N2I6N2E6NDI6MDI6MTMgZ29fZGV2X2FkZHI9Zjg6N2I6N2E6NDI6MDI6MTMKKyAgICAgICAgYnNzaWQ9ZmE6N2I6N2E6NDI6ODI6MTMgdW5rbm93bi1uZXR3b3JrICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9JTlZJVEFUSU9OX1JFQ0VJVkVEX1NUUiA9ICJQMlAtSU5WSVRBVElPTi1SRUNFSVZFRCI7CisKKyAgICAvKiBQMlAtSU5WSVRBVElPTi1SRVNVTFQgc3RhdHVzPTEgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX0lOVklUQVRJT05fUkVTVUxUX1NUUiA9ICJQMlAtSU5WSVRBVElPTi1SRVNVTFQiOworCisgICAgLyogUDJQLVBST1YtRElTQy1QQkMtUkVRIDQyOmZjOjg5OmUxOmUyOjI3IHAycF9kZXZfYWRkcj00MjpmYzo4OTplMTplMjoyNworICAgICAgIHByaV9kZXZfdHlwZT0xLTAwNTBGMjA0LTEgbmFtZT0ncDJwLVRFU1QyJyBjb25maWdfbWV0aG9kcz0weDE4OCBkZXZfY2FwYWI9MHgyNworICAgICAgIGdyb3VwX2NhcGFiPTB4MCAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfUFJPVl9ESVNDX1BCQ19SRVFfU1RSID0gIlAyUC1QUk9WLURJU0MtUEJDLVJFUSI7CisKKyAgICAvKiBQMlAtUFJPVi1ESVNDLVBCQy1SRVNQIDAyOjEyOjQ3OmYyOjVhOjM2ICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9QUk9WX0RJU0NfUEJDX1JTUF9TVFIgPSAiUDJQLVBST1YtRElTQy1QQkMtUkVTUCI7CisKKyAgICAvKiBQMlAtUFJPVi1ESVNDLUVOVEVSLVBJTiA0MjpmYzo4OTplMTplMjoyNyBwMnBfZGV2X2FkZHI9NDI6ZmM6ODk6ZTE6ZTI6MjcKKyAgICAgICBwcmlfZGV2X3R5cGU9MS0wMDUwRjIwNC0xIG5hbWU9J3AycC1URVNUMicgY29uZmlnX21ldGhvZHM9MHgxODggZGV2X2NhcGFiPTB4MjcKKyAgICAgICBncm91cF9jYXBhYj0weDAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX1BST1ZfRElTQ19FTlRFUl9QSU5fU1RSID0gIlAyUC1QUk9WLURJU0MtRU5URVItUElOIjsKKyAgICAvKiBQMlAtUFJPVi1ESVNDLVNIT1ctUElOIDQyOmZjOjg5OmUxOmUyOjI3IDQ0NDkwNjA3IHAycF9kZXZfYWRkcj00MjpmYzo4OTplMTplMjoyNworICAgICAgIHByaV9kZXZfdHlwZT0xLTAwNTBGMjA0LTEgbmFtZT0ncDJwLVRFU1QyJyBjb25maWdfbWV0aG9kcz0weDE4OCBkZXZfY2FwYWI9MHgyNworICAgICAgIGdyb3VwX2NhcGFiPTB4MCAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfUFJPVl9ESVNDX1NIT1dfUElOX1NUUiA9ICJQMlAtUFJPVi1ESVNDLVNIT1ctUElOIjsKKyAgICAvKiBQMlAtUFJPVi1ESVNDLUZBSUxVUkUgcDJwX2Rldl9hZGRyPTQyOmZjOjg5OmUxOmUyOjI3ICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9QUk9WX0RJU0NfRkFJTFVSRV9TVFIgPSAiUDJQLVBST1YtRElTQy1GQUlMVVJFIjsKKworICAgIC8qCisgICAgICogUHJvdG9jb2wgZm9ybWF0IGlzIGFzIGZvbGxvd3MuPGJyPgorICAgICAqIFNlZSB0aGUgVGFibGUuNjIgaW4gdGhlIFdpRmkgRGlyZWN0IHNwZWNpZmljYXRpb24gZm9yIHRoZSBkZXRhaWwuCisgICAgICogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgKiB8ICAgICAgICAgICBMZW5ndGgoMmJ5dGUpICAgICB8IFR5cGUoMWJ5dGUpIHwgVHJhbnNJZCgxYnl0ZSl9fAorICAgICAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgICogfCBzdGF0dXMoMWJ5dGUpICB8ICAgICAgICAgICAgdmVuZG9yIHNwZWNpZmljKHZhcmlhYmxlKSAgICAgIHwKKyAgICAgKgorICAgICAqIFAyUC1TRVJWLURJU0MtUkVTUCA0MjpmYzo4OTplMTplMjoyNyAxIDAzMDAwMDAxMDEKKyAgICAgKiBsZW5ndGg9Mywgc2VydmljZSB0eXBlPTAoQUxMIFNlcnZpY2UpLCB0cmFuc2FjdGlvbiBpZD0xLAorICAgICAqIHN0YXR1cz0xKHNlcnZpY2UgcHJvdG9jb2wgdHlwZSBub3QgYXZhaWxhYmxlKTxicj4KKyAgICAgKgorICAgICAqIFAyUC1TRVJWLURJU0MtUkVTUCA0MjpmYzo4OTplMTplMjoyNyAxIDAzMDAwMjAyMDEKKyAgICAgKiBsZW5ndGg9Mywgc2VydmljZSB0eXBlPTIoVVBuUCksIHRyYW5zYWN0aW9uIGlkPTIsCisgICAgICogc3RhdHVzPTEoc2VydmljZSBwcm90b2NvbCB0eXBlIG5vdCBhdmFpbGFibGUpCisgICAgICoKKyAgICAgKiBQMlAtU0VSVi1ESVNDLVJFU1AgNDI6ZmM6ODk6ZTE6ZTI6MjcgMSA5OTAwMDIwMzAwMTA3NTc1Njk2NDNhMzEzMTMyMworICAgICAqIDI2NDY1MzQ2NTJkMzgzNTM3MzQyZDM1Mzk2MTYyMmQzOTMzMzIzMjJkMzMzMzMzMzQzNTM2MzczODM5MzAzNDM0M2EzCisgICAgICogYTc1NzI2ZTNhNzM2MzY4NjU2ZDYxNzMyZDc1NzA2ZTcwMmQ2ZjcyNjczYTczNjU3Mjc2Njk2MzY1M2E0MzZmNmU3NDYKKyAgICAgKiA1NmU3NDQ0Njk3MjY1NjM3NDZmNzI3OTNhMzIyYzc1NzU2OTY0M2EzNjM4MzUzOTY0NjU2NDY1MmQzODM1MzczNDJkMworICAgICAqIDUzOTYxNjIyZDM5MzMzMzMyMmQzMTMyMzMzNDM1MzYzNzM4MzkzMDMxMzIzYTNhNzU3MDZlNzAzYTcyNmY2Zjc0NjQ2CisgICAgICogNTc2Njk2MzY1CisgICAgICogbGVuZ3RoPTE1Myx0eXBlPTIoVVBuUCksdHJhbnNhY3Rpb24gaWQ9MyxzdGF0dXM9MAorICAgICAqCisgICAgICogVVBuUCBQcm90b2NvbCBmb3JtYXQgaXMgYXMgZm9sbG93cy4KKyAgICAgKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgKiB8ICBWZXJzaW9uICgxKSAgfCAgICAgICAgICBVU04gKFZhcmlhYmxlKSAgICAgICAgICAgIHwKKyAgICAgKgorICAgICAqIHZlcnNpb249MHgxMChVUG5QMS4wKSBkYXRhPXVzbjp1dWlkOjExMjJkZTRlLTg1NzQtNTlhYi05MzIyLTMzMzQ1Njc4CisgICAgICogOTA0NDo6dXJuOnNjaGVtYXMtdXBucC1vcmc6c2VydmljZTpDb250ZW50RGlyZWN0b3J5OjIsdXNuOnV1aWQ6Njg1OWQKKyAgICAgKiBlZGUtODU3NC01OWFiLTkzMzItMTIzNDU2Nzg5MDEyOjp1cG5wOnJvb3RkZXZpY2UKKyAgICAgKgorICAgICAqIFAyUC1TRVJWLURJU0MtUkVTUCA1ODoxNzowYzpiYzpkZDpjYSAyMSAxOTAwMDEwMjAwMDQ1ZjY5NzAKKyAgICAgKiA3MGMwMGMwMDBjMDEwOTRkNzk1MDcyNjk2ZTc0NjU3MmMwMjcKKyAgICAgKiBsZW5ndGg9MjUsIHR5cGU9MShCb25qb3VyKSx0cmFuc2FjdGlvbiBpZD0yLHN0YXR1cz0wCisgICAgICoKKyAgICAgKiBCb25qb3VyIFByb3RvY29sIGZvcm1hdCBpcyBhcyBmb2xsb3dzLgorICAgICAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgKiB8RE5TIE5hbWUoVmFyaWFibGUpfEROUyBUeXBlKDEpfFZlcnNpb24oMSl8UkRBVEEoVmFyaWFibGUpfAorICAgICAqCisgICAgICogRE5TIE5hbWU9X2lwcC5fdGNwLmxvY2FsLixETlMgdHlwZT0xMihQVFIpLCBWZXJzaW9uPTEsCisgICAgICogUkRBVEE9TXlQcmludGVyLl9pcHAuX3RjcC5sb2NhbC4KKyAgICAgKgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfU0VSVl9ESVNDX1JFU1BfU1RSID0gIlAyUC1TRVJWLURJU0MtUkVTUCI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSE9TVF9BUF9FVkVOVF9QUkVGSVhfU1RSID0gIkFQIjsKKyAgICAvKiBBUC1TVEEtQ09OTkVDVEVEIDQyOmZjOjg5OmE4Ojk2OjA5IGRldl9hZGRyPTAyOjkwOjRjOmEwOjkyOjU0ICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFQX1NUQV9DT05ORUNURURfU1RSID0gIkFQLVNUQS1DT05ORUNURUQiOworICAgIC8qIEFQLVNUQS1ESVNDT05ORUNURUQgNDI6ZmM6ODk6YTg6OTY6MDkgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVBfU1RBX0RJU0NPTk5FQ1RFRF9TVFIgPSAiQVAtU1RBLURJU0NPTk5FQ1RFRCI7CisKKyAgICAvKiBTdXBwbGljYW50IGV2ZW50cyByZXBvcnRlZCB0byBhIHN0YXRlIG1hY2hpbmUgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQkFTRSA9IFByb3RvY29sLkJBU0VfV0lGSV9NT05JVE9SOworCisgICAgLyogQ29ubmVjdGlvbiB0byBzdXBwbGljYW50IGVzdGFibGlzaGVkICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQX0NPTk5FQ1RJT05fRVZFTlQgICAgICAgICAgICAgICAgID0gQkFTRSArIDE7CisgICAgLyogQ29ubmVjdGlvbiB0byBzdXBwbGljYW50IGxvc3QgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBfRElTQ09OTkVDVElPTl9FVkVOVCAgICAgICAgICAgICAgPSBCQVNFICsgMjsKKyAgIC8qIE5ldHdvcmsgY29ubmVjdGlvbiBjb21wbGV0ZWQgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLX0NPTk5FQ1RJT05fRVZFTlQgICAgICAgICAgICAgPSBCQVNFICsgMzsKKyAgICAvKiBOZXR3b3JrIGRpc2Nvbm5lY3Rpb24gY29tcGxldGVkICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UICAgICAgICAgID0gQkFTRSArIDQ7CisgICAgLyogU2NhbiByZXN1bHRzIGFyZSBhdmFpbGFibGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQ0FOX1JFU1VMVFNfRVZFTlQgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgNTsKKyAgICAvKiBTdXBwbGljYXRlIHN0YXRlIGNoYW5nZWQgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVCAgICAgICAgPSBCQVNFICsgNjsKKyAgICAvKiBQYXNzd29yZCBmYWlsdXJlIGFuZCBFQVAgYXV0aGVudGljYXRpb24gZmFpbHVyZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFVVEhFTlRJQ0FUSU9OX0ZBSUxVUkVfRVZFTlQgICAgICAgICA9IEJBU0UgKyA3OworICAgIC8qIFdQUyBzdWNjZXNzIGRldGVjdGVkICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV1BTX1NVQ0NFU1NfRVZFTlQgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDg7CisgICAgLyogV1BTIGZhaWx1cmUgZGV0ZWN0ZWQgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXUFNfRkFJTF9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgOTsKKyAgICAgLyogV1BTIG92ZXJsYXAgZGV0ZWN0ZWQgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXUFNfT1ZFUkxBUF9FVkVOVCAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMTA7CisgICAgIC8qIFdQUyB0aW1lb3V0IGRldGVjdGVkICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV1BTX1RJTUVPVVRfRVZFTlQgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDExOworICAgIC8qIERyaXZlciB3YXMgaHVuZyAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUl9IVU5HX0VWRU5UICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAxMjsKKworICAgIC8qIFAyUCBldmVudHMgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfREVWSUNFX0ZPVU5EX0VWRU5UICAgICAgICAgICAgICAgPSBCQVNFICsgMjE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX0RFVklDRV9MT1NUX0VWRU5UICAgICAgICAgICAgICAgID0gQkFTRSArIDIyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9HT19ORUdPVElBVElPTl9SRVFVRVNUX0VWRU5UICAgICA9IEJBU0UgKyAyMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfR09fTkVHT1RJQVRJT05fU1VDQ0VTU19FVkVOVCAgICAgPSBCQVNFICsgMjU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX0dPX05FR09USUFUSU9OX0ZBSUxVUkVfRVZFTlQgICAgID0gQkFTRSArIDI2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9HUk9VUF9GT1JNQVRJT05fU1VDQ0VTU19FVkVOVCAgICA9IEJBU0UgKyAyNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfR1JPVVBfRk9STUFUSU9OX0ZBSUxVUkVfRVZFTlQgICAgPSBCQVNFICsgMjg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX0dST1VQX1NUQVJURURfRVZFTlQgICAgICAgICAgICAgID0gQkFTRSArIDI5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9HUk9VUF9SRU1PVkVEX0VWRU5UICAgICAgICAgICAgICA9IEJBU0UgKyAzMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfSU5WSVRBVElPTl9SRUNFSVZFRF9FVkVOVCAgICAgICAgPSBCQVNFICsgMzE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX0lOVklUQVRJT05fUkVTVUxUX0VWRU5UICAgICAgICAgID0gQkFTRSArIDMyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9QUk9WX0RJU0NfUEJDX1JFUV9FVkVOVCAgICAgICAgICA9IEJBU0UgKyAzMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfUFJPVl9ESVNDX1BCQ19SU1BfRVZFTlQgICAgICAgICAgPSBCQVNFICsgMzQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX1BST1ZfRElTQ19FTlRFUl9QSU5fRVZFTlQgICAgICAgID0gQkFTRSArIDM1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9QUk9WX0RJU0NfU0hPV19QSU5fRVZFTlQgICAgICAgICA9IEJBU0UgKyAzNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfRklORF9TVE9QUEVEX0VWRU5UICAgICAgICAgICAgICAgPSBCQVNFICsgMzc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX1NFUlZfRElTQ19SRVNQX0VWRU5UICAgICAgICAgICAgID0gQkFTRSArIDM4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9QUk9WX0RJU0NfRkFJTFVSRV9FVkVOVCAgICAgICAgICA9IEJBU0UgKyAzOTsKKworICAgIC8qIGhvc3RhcCBldmVudHMgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBUF9TVEFfRElTQ09OTkVDVEVEX0VWRU5UICAgICAgICAgICAgPSBCQVNFICsgNDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVBfU1RBX0NPTk5FQ1RFRF9FVkVOVCAgICAgICAgICAgICAgID0gQkFTRSArIDQyOworCisgICAgLyogSW5kaWNhdGVzIGFzc29jIHJlamVjdCBldmVudCAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFTU09DSUFUSU9OX1JFSkVDVElPTl9FVkVOVCAgICAgICAgICA9IEJBU0UgKyA0MzsKKworICAgIC8qKgorICAgICAqIFRoaXMgaW5kaWNhdGVzIGEgcmVhZCBlcnJvciBvbiB0aGUgbW9uaXRvciBzb2NrZXQgY29uZW5jdGlvbgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXUEFfUkVDVl9FUlJPUl9TVFIgPSAicmVjdiBlcnJvciI7CisKKyAgICAvKioKKyAgICAgKiBNYXggZXJyb3JzIGJlZm9yZSB3ZSBjbG9zZSBzdXBwbGljYW50IGNvbm5lY3Rpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1JFQ1ZfRVJST1JTICAgID0gMTA7CisKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtSW50ZXJmYWNlTmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIFdpZmlOYXRpdmUgbVdpZmlOYXRpdmU7CisgICAgcHJpdmF0ZSBmaW5hbCBTdGF0ZU1hY2hpbmUgbVN0YXRlTWFjaGluZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gbU1vbml0b3Jpbmc7CisKKyAgICAvLyBUaGlzIGlzIGEgZ2xvYmFsIGNvdW50ZXIsIHNpbmNlIGl0J3Mgbm90IG1vbml0b3Igc3BlY2lmaWMuIEhvd2V2ZXIsIHRoZSBleGlzdGluZworICAgIC8vIGltcGxlbWVudGF0aW9uIGZvcndhcmRzIGFsbCAiZ2xvYmFsIiBjb250cm9sIGV2ZW50cyBsaWtlIENUUkwtRVZFTlQtVEVSTUlOQVRJTkcKKyAgICAvLyB0byB0aGUgcDJwMCBtb25pdG9yLiBJcyB0aGF0IGV4cGVjdGVkID8gSXQgc2VlbXMgYSBiaXQgc3VycHJpc2luZy4KKyAgICAvLworICAgIC8vIFRPRE86IElmIHRoZSBwMnAwIG1vbml0b3IgaXNuJ3QgcmVnaXN0ZXJlZCwgdGhlIGJlaGF2aW91ciBpcyBldmVuIG1vcmUgc3VycHJpc2luZy4KKyAgICAvLyBUaGUgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIHRvIGFsbCBtb25pdG9ycywgYW5kIGVhY2ggb2YgdGhlbSB3aWxsIGVuZCB1cCBpbmNyZW1lbnRpbmcKKyAgICAvLyBpdCBpbiB0aGVpciBkaXNwYXRjaFhYWCBtZXRob2QuIElmIHdlIGhhdmUgNSByZWdpc3RlcmVkIG1vbml0b3JzIChzYXkpLCAyIGNvbnNlY3V0aXZlCisgICAgLy8gcmVjdiBlcnJvcnMgd2lsbCBjYXVzZSB1cyB0byBkaXNjb25uZWN0IGZyb20gdGhlIHN1cHBsaWNhbnQgKGluc3RlYWQgb2YgdGhlIGludGVuZGVkIDEwKS4KKyAgICAvLworICAgIC8vIFRoaXMgdmFyaWFibGUgaXMgYWx3YXlzIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCB1bmRlciBhIFdpZmlNb25pdG9yU2luZ2xldG9uIGxvY2suCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHNSZWN2RXJyb3JzOworCisgICAgcHVibGljIFdpZmlNb25pdG9yKFN0YXRlTWFjaGluZSB3aWZpU3RhdGVNYWNoaW5lLCBXaWZpTmF0aXZlIHdpZmlOYXRpdmUpIHsKKyAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiQ3JlYXRpbmcgV2lmaU1vbml0b3IiKTsKKyAgICAgICAgbVdpZmlOYXRpdmUgPSB3aWZpTmF0aXZlOworICAgICAgICBtSW50ZXJmYWNlTmFtZSA9IHdpZmlOYXRpdmUubUludGVyZmFjZU5hbWU7CisgICAgICAgIG1TdGF0ZU1hY2hpbmUgPSB3aWZpU3RhdGVNYWNoaW5lOworICAgICAgICBtTW9uaXRvcmluZyA9IGZhbHNlOworCisgICAgICAgIFdpZmlNb25pdG9yU2luZ2xldG9uLnNJbnN0YW5jZS5yZWdpc3RlckludGVyZmFjZU1vbml0b3IobUludGVyZmFjZU5hbWUsIHRoaXMpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHN0YXJ0TW9uaXRvcmluZygpIHsKKyAgICAgICAgV2lmaU1vbml0b3JTaW5nbGV0b24uc0luc3RhbmNlLnN0YXJ0TW9uaXRvcmluZyhtSW50ZXJmYWNlTmFtZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RvcE1vbml0b3JpbmcoKSB7CisgICAgICAgIFdpZmlNb25pdG9yU2luZ2xldG9uLnNJbnN0YW5jZS5zdG9wTW9uaXRvcmluZyhtSW50ZXJmYWNlTmFtZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RvcFN1cHBsaWNhbnQoKSB7CisgICAgICAgIFdpZmlNb25pdG9yU2luZ2xldG9uLnNJbnN0YW5jZS5zdG9wU3VwcGxpY2FudCgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGtpbGxTdXBwbGljYW50KGJvb2xlYW4gcDJwU3VwcG9ydGVkKSB7CisgICAgICAgIFdpZmlNb25pdG9yU2luZ2xldG9uLnNJbnN0YW5jZS5raWxsU3VwcGxpY2FudChwMnBTdXBwb3J0ZWQpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFdpZmlNb25pdG9yU2luZ2xldG9uIHsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgV2lmaU1vbml0b3JTaW5nbGV0b24gc0luc3RhbmNlID0gbmV3IFdpZmlNb25pdG9yU2luZ2xldG9uKCk7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN0cmluZywgV2lmaU1vbml0b3I+IG1JZmFjZU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgV2lmaU1vbml0b3I+KCk7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtQ29ubmVjdGVkID0gZmFsc2U7CisgICAgICAgIHByaXZhdGUgV2lmaU5hdGl2ZSBtV2lmaU5hdGl2ZTsKKworICAgICAgICBwcml2YXRlIFdpZmlNb25pdG9yU2luZ2xldG9uKCkgeworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0YXJ0TW9uaXRvcmluZyhTdHJpbmcgaWZhY2UpIHsKKyAgICAgICAgICAgIFdpZmlNb25pdG9yIG0gPSBtSWZhY2VNYXAuZ2V0KGlmYWNlKTsKKyAgICAgICAgICAgIGlmIChtID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJzdGFydE1vbml0b3IgY2FsbGVkIHdpdGggdW5rbm93biBpZmFjZT0iICsgaWZhY2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTG9nLmQoVEFHLCAic3RhcnRNb25pdG9yaW5nKCIgKyBpZmFjZSArICIpIHdpdGggbUNvbm5lY3RlZCA9ICIgKyBtQ29ubmVjdGVkKTsKKworICAgICAgICAgICAgaWYgKG1Db25uZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICBtLm1Nb25pdG9yaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtLm1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoU1VQX0NPTk5FQ1RJT05fRVZFTlQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJjb25uZWN0aW5nIHRvIHN1cHBsaWNhbnQiKTsKKyAgICAgICAgICAgICAgICBpbnQgY29ubmVjdFRyaWVzID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUuY29ubmVjdFRvU3VwcGxpY2FudCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtLm1Nb25pdG9yaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG0ubVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShTVVBfQ09OTkVDVElPTl9FVkVOVCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTW9uaXRvclRocmVhZChtV2lmaU5hdGl2ZSwgdGhpcykuc3RhcnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RUcmllcysrIDwgNSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZ25vcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JZmFjZU1hcC5yZW1vdmUoaWZhY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgbS5tU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFNVUF9ESVNDT05ORUNUSU9OX0VWRU5UKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgInN0YXJ0TW9uaXRvcmluZygiICsgaWZhY2UgKyAiKSBmYWlsZWQhIik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzdG9wTW9uaXRvcmluZyhTdHJpbmcgaWZhY2UpIHsKKyAgICAgICAgICAgIFdpZmlNb25pdG9yIG0gPSBtSWZhY2VNYXAuZ2V0KGlmYWNlKTsKKyAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgInN0b3BNb25pdG9yaW5nKCIgKyBpZmFjZSArICIpID0gIiArIG0ubVN0YXRlTWFjaGluZSk7CisgICAgICAgICAgICBtLm1Nb25pdG9yaW5nID0gZmFsc2U7CisgICAgICAgICAgICBtLm1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoU1VQX0RJU0NPTk5FQ1RJT05fRVZFTlQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlZ2lzdGVySW50ZXJmYWNlTW9uaXRvcihTdHJpbmcgaWZhY2UsIFdpZmlNb25pdG9yIG0pIHsKKyAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgInJlZ2lzdGVySW50ZXJmYWNlKCIgKyBpZmFjZSArICIrIiArIG0ubVN0YXRlTWFjaGluZSArICIpIik7CisgICAgICAgICAgICBtSWZhY2VNYXAucHV0KGlmYWNlLCBtKTsKKyAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUgPSBtLm1XaWZpTmF0aXZlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHVucmVnaXN0ZXJJbnRlcmZhY2VNb25pdG9yKFN0cmluZyBpZmFjZSkgeworICAgICAgICAgICAgLy8gUkVWSUVXOiBXaGVuIHNob3VsZCB3ZSBjYWxsIHRoaXM/IElmIHRoaXMgaXNuJ3QgY2FsbGVkLCB0aGVuIFdpZmlNb25pdG9yCisgICAgICAgICAgICAvLyBvYmplY3RzIHdpbGwgcmVtYWluIGluIHRoZSBtSWZhY2VNYXA7IGFuZCB3b24ndCBldmVyIGdldCBkZWxldGVkCisKKyAgICAgICAgICAgIFdpZmlNb25pdG9yIG0gPSBtSWZhY2VNYXAucmVtb3ZlKGlmYWNlKTsKKyAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgInVucmVnaXN0ZXJJbnRlcmZhY2UoIiArIGlmYWNlICsgIisiICsgbS5tU3RhdGVNYWNoaW5lICsgIikiKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzdG9wU3VwcGxpY2FudCgpIHsKKyAgICAgICAgICAgIG1XaWZpTmF0aXZlLnN0b3BTdXBwbGljYW50KCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQga2lsbFN1cHBsaWNhbnQoYm9vbGVhbiBwMnBTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgIFdpZmlOYXRpdmUua2lsbFN1cHBsaWNhbnQocDJwU3VwcG9ydGVkKTsKKyAgICAgICAgICAgIG1Db25uZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoV2lmaU1vbml0b3IgbSA6IG1JZmFjZU1hcC52YWx1ZXMoKSkgeworICAgICAgICAgICAgICAgIG0ubU1vbml0b3JpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3luY2hyb25pemVkIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChTdHJpbmcgZXZlbnRTdHIpIHsKKyAgICAgICAgICAgIFN0cmluZyBpZmFjZTsKKyAgICAgICAgICAgIGlmIChldmVudFN0ci5zdGFydHNXaXRoKCJJRk5BTUU9IikpIHsKKyAgICAgICAgICAgICAgICBpbnQgc3BhY2UgPSBldmVudFN0ci5pbmRleE9mKCcgJyk7CisgICAgICAgICAgICAgICAgaWYgKHNwYWNlICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGlmYWNlID0gZXZlbnRTdHIuc3Vic3RyaW5nKDcsIHNwYWNlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtSWZhY2VNYXAuY29udGFpbnNLZXkoaWZhY2UpICYmIGlmYWNlLnN0YXJ0c1dpdGgoInAycC0iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcDJwIGludGVyZmFjZXMgYXJlIGNyZWF0ZWQgZHluYW1pY2FsbHksIGJ1dCB3ZSBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IG9uZSBQMnAgc3RhdGUgbWFjaGluZSBtb25pdG9yaW5nIGFsbCBvZiB0aGVtOyBsb29rCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgaXQgZXhwbGljaXRseSwgYW5kIHNlbmQgbWVzc2FnZXMgdGhlcmUgLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlID0gInAycDAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGV2ZW50U3RyID0gZXZlbnRTdHIuc3Vic3RyaW5nKHNwYWNlICsgMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm8gcG9pbnQgZGlzcGF0Y2hpbmcgdGhpcyBldmVudCB0byBhbnkgaW50ZXJmYWNlLCB0aGUgZGlzcGF0Y2hlZAorICAgICAgICAgICAgICAgICAgICAvLyBldmVudCBzdHJpbmcgd2lsbCBiZWdpbiB3aXRoICJJRk5BTUU9IiB3aGljaCBkaXNwYXRjaEV2ZW50IGNhbid0IHJlYWxseQorICAgICAgICAgICAgICAgICAgICAvLyBkbyBhbnl0aGluZyBhYm91dC4KKyAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRHJvcHBpbmcgbWFsZm9ybWVkIGV2ZW50ICh1bnBhcnNhYmxlIGlmYWNlKTogIiArIGV2ZW50U3RyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gZXZlbnRzIHdpdGhvdXQgcHJlZml4IGJlbG9uZyB0byBwMnAwIG1vbml0b3IKKyAgICAgICAgICAgICAgICBpZmFjZSA9ICJwMnAwIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiRGlzcGF0Y2hpbmcgZXZlbnQgdG8gaW50ZXJmYWNlOiAiICsgaWZhY2UpOworCisgICAgICAgICAgICBXaWZpTW9uaXRvciBtID0gbUlmYWNlTWFwLmdldChpZmFjZSk7CisgICAgICAgICAgICBpZiAobSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKG0ubU1vbml0b3JpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG0uZGlzcGF0Y2hFdmVudChldmVudFN0cikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkRyb3BwaW5nIGV2ZW50IGJlY2F1c2UgKCIgKyBpZmFjZSArICIpIGlzIHN0b3BwZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiU2VuZGluZyB0byBhbGwgbW9uaXRvcnMgYmVjYXVzZSB0aGVyZSdzIG5vIG1hdGNoaW5nIGlmYWNlIik7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBkb25lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yIChXaWZpTW9uaXRvciBtb25pdG9yIDogbUlmYWNlTWFwLnZhbHVlcygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtb25pdG9yLm1Nb25pdG9yaW5nICYmIG1vbml0b3IuZGlzcGF0Y2hFdmVudChldmVudFN0cikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgbUNvbm5lY3RlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBkb25lOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTW9uaXRvclRocmVhZCBleHRlbmRzIFRocmVhZCB7CisgICAgICAgIHByaXZhdGUgZmluYWwgV2lmaU5hdGl2ZSBtV2lmaU5hdGl2ZTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBXaWZpTW9uaXRvclNpbmdsZXRvbiBtV2lmaU1vbml0b3JTaW5nbGV0b247CisKKyAgICAgICAgcHVibGljIE1vbml0b3JUaHJlYWQoV2lmaU5hdGl2ZSB3aWZpTmF0aXZlLCBXaWZpTW9uaXRvclNpbmdsZXRvbiB3aWZpTW9uaXRvclNpbmdsZXRvbikgeworICAgICAgICAgICAgc3VwZXIoIldpZmlNb25pdG9yIik7CisgICAgICAgICAgICBtV2lmaU5hdGl2ZSA9IHdpZmlOYXRpdmU7CisgICAgICAgICAgICBtV2lmaU1vbml0b3JTaW5nbGV0b24gPSB3aWZpTW9uaXRvclNpbmdsZXRvbjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIEluZmluaXRlTG9vcFN0YXRlbWVudAorICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIFN0cmluZyBldmVudFN0ciA9IG1XaWZpTmF0aXZlLndhaXRGb3JFdmVudCgpOworCisgICAgICAgICAgICAgICAgLy8gU2tpcCBsb2dnaW5nIHRoZSBjb21tb24gYnV0IG1vc3RseSB1bmludGVyZXN0aW5nIHNjYW4tcmVzdWx0cyBldmVudAorICAgICAgICAgICAgICAgIGlmIChEQkcgJiYgZXZlbnRTdHIuaW5kZXhPZihTQ0FOX1JFU1VMVFNfU1RSKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJFdmVudCBbIiArIGV2ZW50U3RyICsgIl0iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobVdpZmlNb25pdG9yU2luZ2xldG9uLmRpc3BhdGNoRXZlbnQoZXZlbnRTdHIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkRpc2Nvbm5lY3RpbmcgZnJvbSB0aGUgc3VwcGxpY2FudCwgbm8gbW9yZSBldmVudHMiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogQHJldHVybiB0cnVlIGlmIHRoZSBldmVudCB3YXMgc3VwcGxpY2FudCBkaXNjb25uZWN0aW9uICovCisgICAgcHJpdmF0ZSBib29sZWFuIGRpc3BhdGNoRXZlbnQoU3RyaW5nIGV2ZW50U3RyKSB7CisKKyAgICAgICAgaWYgKCFldmVudFN0ci5zdGFydHNXaXRoKEVWRU5UX1BSRUZJWF9TVFIpKSB7CisgICAgICAgICAgICBpZiAoZXZlbnRTdHIuc3RhcnRzV2l0aChXUEFfRVZFTlRfUFJFRklYX1NUUikgJiYKKyAgICAgICAgICAgICAgICAgICAgMCA8IGV2ZW50U3RyLmluZGV4T2YoUEFTU1dPUkRfTUFZX0JFX0lOQ09SUkVDVF9TVFIpKSB7CisgICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShBVVRIRU5USUNBVElPTl9GQUlMVVJFX0VWRU5UKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRTdHIuc3RhcnRzV2l0aChXUFNfU1VDQ0VTU19TVFIpKSB7CisgICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShXUFNfU1VDQ0VTU19FVkVOVCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50U3RyLnN0YXJ0c1dpdGgoV1BTX0ZBSUxfU1RSKSkgeworICAgICAgICAgICAgICAgIGhhbmRsZVdwc0ZhaWxFdmVudChldmVudFN0cik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50U3RyLnN0YXJ0c1dpdGgoV1BTX09WRVJMQVBfU1RSKSkgeworICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoV1BTX09WRVJMQVBfRVZFTlQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFN0ci5zdGFydHNXaXRoKFdQU19USU1FT1VUX1NUUikpIHsKKyAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFdQU19USU1FT1VUX0VWRU5UKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRTdHIuc3RhcnRzV2l0aChQMlBfRVZFTlRfUFJFRklYX1NUUikpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVQMnBFdmVudHMoZXZlbnRTdHIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFN0ci5zdGFydHNXaXRoKEhPU1RfQVBfRVZFTlRfUFJFRklYX1NUUikpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVIb3N0QXBFdmVudHMoZXZlbnRTdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLncoVEFHLCAiY291bGRuJ3QgaWRlbnRpZnkgZXZlbnQgdHlwZSAtICIgKyBldmVudFN0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgZXZlbnROYW1lID0gZXZlbnRTdHIuc3Vic3RyaW5nKEVWRU5UX1BSRUZJWF9MRU5fU1RSKTsKKyAgICAgICAgaW50IG5hbWVFbmQgPSBldmVudE5hbWUuaW5kZXhPZignICcpOworICAgICAgICBpZiAobmFtZUVuZCAhPSAtMSkKKyAgICAgICAgICAgIGV2ZW50TmFtZSA9IGV2ZW50TmFtZS5zdWJzdHJpbmcoMCwgbmFtZUVuZCk7CisgICAgICAgIGlmIChldmVudE5hbWUubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgaWYgKERCRykgTG9nLmkoVEFHLCAiUmVjZWl2ZWQgd3BhX3N1cHBsaWNhbnQgZXZlbnQgd2l0aCBlbXB0eSBldmVudCBuYW1lIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAgKiBNYXAgZXZlbnQgbmFtZSBpbnRvIGV2ZW50IGVudW0KKyAgICAgICAgKi8KKyAgICAgICAgaW50IGV2ZW50OworICAgICAgICBpZiAoZXZlbnROYW1lLmVxdWFscyhDT05ORUNURURfU1RSKSkKKyAgICAgICAgICAgIGV2ZW50ID0gQ09OTkVDVEVEOworICAgICAgICBlbHNlIGlmIChldmVudE5hbWUuZXF1YWxzKERJU0NPTk5FQ1RFRF9TVFIpKQorICAgICAgICAgICAgZXZlbnQgPSBESVNDT05ORUNURUQ7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZS5lcXVhbHMoU1RBVEVfQ0hBTkdFX1NUUikpCisgICAgICAgICAgICBldmVudCA9IFNUQVRFX0NIQU5HRTsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lLmVxdWFscyhTQ0FOX1JFU1VMVFNfU1RSKSkKKyAgICAgICAgICAgIGV2ZW50ID0gU0NBTl9SRVNVTFRTOworICAgICAgICBlbHNlIGlmIChldmVudE5hbWUuZXF1YWxzKExJTktfU1BFRURfU1RSKSkKKyAgICAgICAgICAgIGV2ZW50ID0gTElOS19TUEVFRDsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lLmVxdWFscyhURVJNSU5BVElOR19TVFIpKQorICAgICAgICAgICAgZXZlbnQgPSBURVJNSU5BVElORzsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lLmVxdWFscyhEUklWRVJfU1RBVEVfU1RSKSkKKyAgICAgICAgICAgIGV2ZW50ID0gRFJJVkVSX1NUQVRFOworICAgICAgICBlbHNlIGlmIChldmVudE5hbWUuZXF1YWxzKEVBUF9GQUlMVVJFX1NUUikpCisgICAgICAgICAgICBldmVudCA9IEVBUF9GQUlMVVJFOworICAgICAgICBlbHNlIGlmIChldmVudE5hbWUuZXF1YWxzKEFTU09DX1JFSkVDVF9TVFIpKQorICAgICAgICAgICAgZXZlbnQgPSBBU1NPQ19SRUpFQ1Q7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV2ZW50ID0gVU5LTk9XTjsKKworICAgICAgICBTdHJpbmcgZXZlbnREYXRhID0gZXZlbnRTdHI7CisgICAgICAgIGlmIChldmVudCA9PSBEUklWRVJfU1RBVEUgfHwgZXZlbnQgPT0gTElOS19TUEVFRCkKKyAgICAgICAgICAgIGV2ZW50RGF0YSA9IGV2ZW50RGF0YS5zcGxpdCgiICIpWzFdOworICAgICAgICBlbHNlIGlmIChldmVudCA9PSBTVEFURV9DSEFOR0UgfHwgZXZlbnQgPT0gRUFQX0ZBSUxVUkUpIHsKKyAgICAgICAgICAgIGludCBpbmQgPSBldmVudFN0ci5pbmRleE9mKCIgIik7CisgICAgICAgICAgICBpZiAoaW5kICE9IC0xKSB7CisgICAgICAgICAgICAgICAgZXZlbnREYXRhID0gZXZlbnRTdHIuc3Vic3RyaW5nKGluZCArIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGluZCA9IGV2ZW50U3RyLmluZGV4T2YoIiAtICIpOworICAgICAgICAgICAgaWYgKGluZCAhPSAtMSkgeworICAgICAgICAgICAgICAgIGV2ZW50RGF0YSA9IGV2ZW50U3RyLnN1YnN0cmluZyhpbmQgKyAzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChldmVudCA9PSBTVEFURV9DSEFOR0UpIHsKKyAgICAgICAgICAgIGhhbmRsZVN1cHBsaWNhbnRTdGF0ZUNoYW5nZShldmVudERhdGEpOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IERSSVZFUl9TVEFURSkgeworICAgICAgICAgICAgaGFuZGxlRHJpdmVyRXZlbnQoZXZlbnREYXRhKTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PSBURVJNSU5BVElORykgeworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBDbG9zZSB0aGUgc3VwcGxpY2FudCBjb25uZWN0aW9uIGlmIHdlIHNlZQorICAgICAgICAgICAgICogdG9vIG1hbnkgcmVjdiBlcnJvcnMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKGV2ZW50RGF0YS5zdGFydHNXaXRoKFdQQV9SRUNWX0VSUk9SX1NUUikpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytzUmVjdkVycm9ycyA+IE1BWF9SRUNWX0VSUk9SUykgeworICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJ0b28gbWFueSByZWN2IGVycm9ycywgY2xvc2luZyBjb25uZWN0aW9uIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBub3RpZnkgYW5kIGV4aXQKKyAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoU1VQX0RJU0NPTk5FQ1RJT05fRVZFTlQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gRUFQX0ZBSUxVUkUpIHsKKyAgICAgICAgICAgIGlmIChldmVudERhdGEuc3RhcnRzV2l0aChFQVBfQVVUSF9GQUlMVVJFX1NUUikpIHsKKyAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKEFVVEhFTlRJQ0FUSU9OX0ZBSUxVUkVfRVZFTlQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IEFTU09DX1JFSkVDVCkgeworICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShBU1NPQ0lBVElPTl9SRUpFQ1RJT05fRVZFTlQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaGFuZGxlRXZlbnQoZXZlbnQsIGV2ZW50RGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgc1JlY3ZFcnJvcnMgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZURyaXZlckV2ZW50KFN0cmluZyBzdGF0ZSkgeworICAgICAgICBpZiAoc3RhdGUgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChzdGF0ZS5lcXVhbHMoIkhBTkdFRCIpKSB7CisgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKERSSVZFUl9IVU5HX0VWRU5UKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEhhbmRsZSBhbGwgc3VwcGxpY2FudCBldmVudHMgZXhjZXB0IFNUQVRFLUNIQU5HRQorICAgICAqIEBwYXJhbSBldmVudCB0aGUgZXZlbnQgdHlwZQorICAgICAqIEBwYXJhbSByZW1haW5kZXIgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyBmb2xsb3dpbmcgdGhlCisgICAgICogZXZlbnQgbmFtZSBhbmQgJnF1b3Q7JiM4MTk1OyYjODIxMjsmIzgxOTU7JnF1b3Q7CisgICAgICovCisgICAgdm9pZCBoYW5kbGVFdmVudChpbnQgZXZlbnQsIFN0cmluZyByZW1haW5kZXIpIHsKKyAgICAgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICAgICAgY2FzZSBESVNDT05ORUNURUQ6CisgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya1N0YXRlQ2hhbmdlKE5ldHdvcmtJbmZvLkRldGFpbGVkU3RhdGUuRElTQ09OTkVDVEVELCByZW1haW5kZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIENPTk5FQ1RFRDoKKyAgICAgICAgICAgICAgICBoYW5kbGVOZXR3b3JrU3RhdGVDaGFuZ2UoTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZS5DT05ORUNURUQsIHJlbWFpbmRlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU0NBTl9SRVNVTFRTOgorICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoU0NBTl9SRVNVTFRTX0VWRU5UKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBVTktOT1dOOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVdwc0ZhaWxFdmVudChTdHJpbmcgZGF0YVN0cmluZykgeworICAgICAgICBmaW5hbCBQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoV1BTX0ZBSUxfUEFUVEVSTik7CisgICAgICAgIE1hdGNoZXIgbWF0Y2ggPSBwLm1hdGNoZXIoZGF0YVN0cmluZyk7CisgICAgICAgIGlmIChtYXRjaC5maW5kKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBjZmdFcnIgPSBtYXRjaC5ncm91cCgxKTsKKyAgICAgICAgICAgIFN0cmluZyByZWFzb24gPSBtYXRjaC5ncm91cCgyKTsKKworICAgICAgICAgICAgaWYgKHJlYXNvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoKEludGVnZXIucGFyc2VJbnQocmVhc29uKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFJFQVNPTl9US0lQX09OTFlfUFJPSElCSVRFRDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UobVN0YXRlTWFjaGluZS5vYnRhaW5NZXNzYWdlKFdQU19GQUlMX0VWRU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5XUFNfVEtJUF9PTkxZX1BST0hJQklURUQsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBSRUFTT05fV0VQX1BST0hJQklURUQ6CisgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKG1TdGF0ZU1hY2hpbmUub2J0YWluTWVzc2FnZShXUFNfRkFJTF9FVkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuV1BTX1dFUF9QUk9ISUJJVEVELCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNmZ0VyciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoKEludGVnZXIucGFyc2VJbnQoY2ZnRXJyKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIENPTkZJR19BVVRIX0ZBSUxVUkU6CisgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKG1TdGF0ZU1hY2hpbmUub2J0YWluTWVzc2FnZShXUFNfRkFJTF9FVkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuV1BTX0FVVEhfRkFJTFVSRSwgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBjYXNlIENPTkZJR19NVUxUSVBMRV9QQkNfREVURUNURUQ6CisgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKG1TdGF0ZU1hY2hpbmUub2J0YWluTWVzc2FnZShXUFNfRkFJTF9FVkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuV1BTX09WRVJMQVBfRVJST1IsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy9Gb3IgYWxsIG90aGVyIGVycm9ycywgcmV0dXJuIGEgZ2VuZXJpYyBpbnRlcm5hbCBlcnJvcgorICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKG1TdGF0ZU1hY2hpbmUub2J0YWluTWVzc2FnZShXUFNfRkFJTF9FVkVOVCwKKyAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5FUlJPUiwgMCkpOworICAgIH0KKworICAgIC8qIDxldmVudD4gc3RhdHVzPTxlcnI+IGFuZCB0aGUgc3BlY2lhbCBjYXNlIG9mIDxldmVudD4gcmVhc29uPUZSRVFfQ09ORkxJQ1QgKi8KKyAgICBwcml2YXRlIFAycFN0YXR1cyBwMnBFcnJvcihTdHJpbmcgZGF0YVN0cmluZykgeworICAgICAgICBQMnBTdGF0dXMgZXJyID0gUDJwU3RhdHVzLlVOS05PV047CisgICAgICAgIFN0cmluZ1tdIHRva2VucyA9IGRhdGFTdHJpbmcuc3BsaXQoIiAiKTsKKyAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPCAyKSByZXR1cm4gZXJyOworICAgICAgICBTdHJpbmdbXSBuYW1lVmFsdWUgPSB0b2tlbnNbMV0uc3BsaXQoIj0iKTsKKyAgICAgICAgaWYgKG5hbWVWYWx1ZS5sZW5ndGggIT0gMikgcmV0dXJuIGVycjsKKworICAgICAgICAvKiBIYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSBvZiByZWFzb249RlJFUStDT05GTElDVCAqLworICAgICAgICBpZiAobmFtZVZhbHVlWzFdLmVxdWFscygiRlJFUV9DT05GTElDVCIpKSB7CisgICAgICAgICAgICByZXR1cm4gUDJwU3RhdHVzLk5PX0NPTU1PTl9DSEFOTkVMOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBlcnIgPSBQMnBTdGF0dXMudmFsdWVPZihJbnRlZ2VyLnBhcnNlSW50KG5hbWVWYWx1ZVsxXSkpOworICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIC8qKgorICAgICAqIEhhbmRsZSBwMnAgZXZlbnRzCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVAycEV2ZW50cyhTdHJpbmcgZGF0YVN0cmluZykgeworICAgICAgICBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9ERVZJQ0VfRk9VTkRfU1RSKSkgeworICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfREVWSUNFX0ZPVU5EX0VWRU5ULCBuZXcgV2lmaVAycERldmljZShkYXRhU3RyaW5nKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9ERVZJQ0VfTE9TVF9TVFIpKSB7CisgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9ERVZJQ0VfTE9TVF9FVkVOVCwgbmV3IFdpZmlQMnBEZXZpY2UoZGF0YVN0cmluZykpOworICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfRklORF9TVE9QUEVEX1NUUikpIHsKKyAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX0ZJTkRfU1RPUFBFRF9FVkVOVCk7CisgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9HT19ORUdfUkVRVUVTVF9TVFIpKSB7CisgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9HT19ORUdPVElBVElPTl9SRVFVRVNUX0VWRU5ULAorICAgICAgICAgICAgICAgICAgICBuZXcgV2lmaVAycENvbmZpZyhkYXRhU3RyaW5nKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9HT19ORUdfU1VDQ0VTU19TVFIpKSB7CisgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9HT19ORUdPVElBVElPTl9TVUNDRVNTX0VWRU5UKTsKKyAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0dPX05FR19GQUlMVVJFX1NUUikpIHsKKyAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX0dPX05FR09USUFUSU9OX0ZBSUxVUkVfRVZFTlQsIHAycEVycm9yKGRhdGFTdHJpbmcpKTsKKyAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0dST1VQX0ZPUk1BVElPTl9TVUNDRVNTX1NUUikpIHsKKyAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX0dST1VQX0ZPUk1BVElPTl9TVUNDRVNTX0VWRU5UKTsKKyAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0dST1VQX0ZPUk1BVElPTl9GQUlMVVJFX1NUUikpIHsKKyAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX0dST1VQX0ZPUk1BVElPTl9GQUlMVVJFX0VWRU5ULCBwMnBFcnJvcihkYXRhU3RyaW5nKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9HUk9VUF9TVEFSVEVEX1NUUikpIHsKKyAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX0dST1VQX1NUQVJURURfRVZFTlQsIG5ldyBXaWZpUDJwR3JvdXAoZGF0YVN0cmluZykpOworICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfR1JPVVBfUkVNT1ZFRF9TVFIpKSB7CisgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9HUk9VUF9SRU1PVkVEX0VWRU5ULCBuZXcgV2lmaVAycEdyb3VwKGRhdGFTdHJpbmcpKTsKKyAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0lOVklUQVRJT05fUkVDRUlWRURfU1RSKSkgeworICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfSU5WSVRBVElPTl9SRUNFSVZFRF9FVkVOVCwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFdpZmlQMnBHcm91cChkYXRhU3RyaW5nKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9JTlZJVEFUSU9OX1JFU1VMVF9TVFIpKSB7CisgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9JTlZJVEFUSU9OX1JFU1VMVF9FVkVOVCwgcDJwRXJyb3IoZGF0YVN0cmluZykpOworICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfUFJPVl9ESVNDX1BCQ19SRVFfU1RSKSkgeworICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfUFJPVl9ESVNDX1BCQ19SRVFfRVZFTlQsCisgICAgICAgICAgICAgICAgICAgIG5ldyBXaWZpUDJwUHJvdkRpc2NFdmVudChkYXRhU3RyaW5nKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9QUk9WX0RJU0NfUEJDX1JTUF9TVFIpKSB7CisgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9QUk9WX0RJU0NfUEJDX1JTUF9FVkVOVCwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFdpZmlQMnBQcm92RGlzY0V2ZW50KGRhdGFTdHJpbmcpKTsKKyAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX1BST1ZfRElTQ19FTlRFUl9QSU5fU1RSKSkgeworICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfUFJPVl9ESVNDX0VOVEVSX1BJTl9FVkVOVCwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFdpZmlQMnBQcm92RGlzY0V2ZW50KGRhdGFTdHJpbmcpKTsKKyAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX1BST1ZfRElTQ19TSE9XX1BJTl9TVFIpKSB7CisgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9QUk9WX0RJU0NfU0hPV19QSU5fRVZFTlQsCisgICAgICAgICAgICAgICAgICAgIG5ldyBXaWZpUDJwUHJvdkRpc2NFdmVudChkYXRhU3RyaW5nKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9QUk9WX0RJU0NfRkFJTFVSRV9TVFIpKSB7CisgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9QUk9WX0RJU0NfRkFJTFVSRV9FVkVOVCk7CisgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9TRVJWX0RJU0NfUkVTUF9TVFIpKSB7CisgICAgICAgICAgICBMaXN0PFdpZmlQMnBTZXJ2aWNlUmVzcG9uc2U+IGxpc3QgPSBXaWZpUDJwU2VydmljZVJlc3BvbnNlLm5ld0luc3RhbmNlKGRhdGFTdHJpbmcpOworICAgICAgICAgICAgaWYgKGxpc3QgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX1NFUlZfRElTQ19SRVNQX0VWRU5ULCBsaXN0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiTnVsbCBzZXJ2aWNlIHJlc3AgIiArIGRhdGFTdHJpbmcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSGFuZGxlIGhvc3RhcCBldmVudHMKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgaGFuZGxlSG9zdEFwRXZlbnRzKFN0cmluZyBkYXRhU3RyaW5nKSB7CisgICAgICAgIFN0cmluZ1tdIHRva2VucyA9IGRhdGFTdHJpbmcuc3BsaXQoIiAiKTsKKyAgICAgICAgLyogQVAtU1RBLUNPTk5FQ1RFRCA0MjpmYzo4OTphODo5NjowOSBwMnBfZGV2X2FkZHI9MDI6OTA6NGM6YTA6OTI6NTQgKi8KKyAgICAgICAgaWYgKHRva2Vuc1swXS5lcXVhbHMoQVBfU1RBX0NPTk5FQ1RFRF9TVFIpKSB7CisgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKEFQX1NUQV9DT05ORUNURURfRVZFTlQsIG5ldyBXaWZpUDJwRGV2aWNlKGRhdGFTdHJpbmcpKTsKKyAgICAgICAgICAgIC8qIEFQLVNUQS1ESVNDT05ORUNURUQgNDI6ZmM6ODk6YTg6OTY6MDkgcDJwX2Rldl9hZGRyPTAyOjkwOjRjOmEwOjkyOjU0ICovCisgICAgICAgIH0gZWxzZSBpZiAodG9rZW5zWzBdLmVxdWFscyhBUF9TVEFfRElTQ09OTkVDVEVEX1NUUikpIHsKKyAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoQVBfU1RBX0RJU0NPTk5FQ1RFRF9FVkVOVCwgbmV3IFdpZmlQMnBEZXZpY2UoZGF0YVN0cmluZykpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSGFuZGxlIHRoZSBzdXBwbGljYW50IFNUQVRFLUNIQU5HRSBldmVudAorICAgICAqIEBwYXJhbSBkYXRhU3RyaW5nIE5ldyBzdXBwbGljYW50IHN0YXRlIHN0cmluZyBpbiB0aGUgZm9ybWF0OgorICAgICAqIGlkPW5ldHdvcmstaWQgc3RhdGU9bmV3LXN0YXRlCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVN1cHBsaWNhbnRTdGF0ZUNoYW5nZShTdHJpbmcgZGF0YVN0cmluZykgeworICAgICAgICBXaWZpU3NpZCB3aWZpU3NpZCA9IG51bGw7CisgICAgICAgIGludCBpbmRleCA9IGRhdGFTdHJpbmcubGFzdEluZGV4T2YoIlNTSUQ9Iik7CisgICAgICAgIGlmIChpbmRleCAhPSAtMSkgeworICAgICAgICAgICAgd2lmaVNzaWQgPSBXaWZpU3NpZC5jcmVhdGVGcm9tQXNjaWlFbmNvZGVkKAorICAgICAgICAgICAgICAgICAgICBkYXRhU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDUpKTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmdbXSBkYXRhVG9rZW5zID0gZGF0YVN0cmluZy5zcGxpdCgiICIpOworCisgICAgICAgIFN0cmluZyBCU1NJRCA9IG51bGw7CisgICAgICAgIGludCBuZXR3b3JrSWQgPSAtMTsKKyAgICAgICAgaW50IG5ld1N0YXRlICA9IC0xOworICAgICAgICBmb3IgKFN0cmluZyB0b2tlbiA6IGRhdGFUb2tlbnMpIHsKKyAgICAgICAgICAgIFN0cmluZ1tdIG5hbWVWYWx1ZSA9IHRva2VuLnNwbGl0KCI9Iik7CisgICAgICAgICAgICBpZiAobmFtZVZhbHVlLmxlbmd0aCAhPSAyKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuYW1lVmFsdWVbMF0uZXF1YWxzKCJCU1NJRCIpKSB7CisgICAgICAgICAgICAgICAgQlNTSUQgPSBuYW1lVmFsdWVbMV07CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCB2YWx1ZTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBJbnRlZ2VyLnBhcnNlSW50KG5hbWVWYWx1ZVsxXSk7CisgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobmFtZVZhbHVlWzBdLmVxdWFscygiaWQiKSkgeworICAgICAgICAgICAgICAgIG5ldHdvcmtJZCA9IHZhbHVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lVmFsdWVbMF0uZXF1YWxzKCJzdGF0ZSIpKSB7CisgICAgICAgICAgICAgICAgbmV3U3RhdGUgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZXdTdGF0ZSA9PSAtMSkgcmV0dXJuOworCisgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBuZXdTdXBwbGljYW50U3RhdGUgPSBTdXBwbGljYW50U3RhdGUuSU5WQUxJRDsKKyAgICAgICAgZm9yIChTdXBwbGljYW50U3RhdGUgc3RhdGUgOiBTdXBwbGljYW50U3RhdGUudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5vcmRpbmFsKCkgPT0gbmV3U3RhdGUpIHsKKyAgICAgICAgICAgICAgICBuZXdTdXBwbGljYW50U3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobmV3U3VwcGxpY2FudFN0YXRlID09IFN1cHBsaWNhbnRTdGF0ZS5JTlZBTElEKSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJJbnZhbGlkIHN1cHBsaWNhbnQgc3RhdGU6ICIgKyBuZXdTdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgbm90aWZ5U3VwcGxpY2FudFN0YXRlQ2hhbmdlKG5ldHdvcmtJZCwgd2lmaVNzaWQsIEJTU0lELCBuZXdTdXBwbGljYW50U3RhdGUpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVOZXR3b3JrU3RhdGVDaGFuZ2UoTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZSBuZXdTdGF0ZSwgU3RyaW5nIGRhdGEpIHsKKyAgICAgICAgU3RyaW5nIEJTU0lEID0gbnVsbDsKKyAgICAgICAgaW50IG5ldHdvcmtJZCA9IC0xOworICAgICAgICBpZiAobmV3U3RhdGUgPT0gTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZS5DT05ORUNURUQpIHsKKyAgICAgICAgICAgIE1hdGNoZXIgbWF0Y2ggPSBtQ29ubmVjdGVkRXZlbnRQYXR0ZXJuLm1hdGNoZXIoZGF0YSk7CisgICAgICAgICAgICBpZiAoIW1hdGNoLmZpbmQoKSkgeworICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkNvdWxkIG5vdCBmaW5kIEJTU0lEIGluIENPTk5FQ1RFRCBldmVudCBzdHJpbmciKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQlNTSUQgPSBtYXRjaC5ncm91cCgxKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBuZXR3b3JrSWQgPSBJbnRlZ2VyLnBhcnNlSW50KG1hdGNoLmdyb3VwKDIpKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBuZXR3b3JrSWQgPSAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub3RpZnlOZXR3b3JrU3RhdGVDaGFuZ2UobmV3U3RhdGUsIEJTU0lELCBuZXR3b3JrSWQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2VuZCB0aGUgc3RhdGUgbWFjaGluZSBhIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBzdGF0ZSBvZiBXaWZpIGNvbm5lY3Rpdml0eQorICAgICAqIGhhcyBjaGFuZ2VkLgorICAgICAqIEBwYXJhbSBuZXdTdGF0ZSB0aGUgbmV3IG5ldHdvcmsgc3RhdGUKKyAgICAgKiBAcGFyYW0gQlNTSUQgd2hlbiB0aGUgbmV3IHN0YXRlIGlzIHtAbGluayBOZXR3b3JrSW5mby5EZXRhaWxlZFN0YXRlI0NPTk5FQ1RFRH0sCisgICAgICogdGhpcyBpcyB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGFjY2VzcyBwb2ludC4gT3RoZXJ3aXNlLCBpdAorICAgICAqIGlzIHtAY29kZSBudWxsfS4KKyAgICAgKiBAcGFyYW0gbmV0SWQgdGhlIGNvbmZpZ3VyZWQgbmV0d29yayBvbiB3aGljaCB0aGUgc3RhdGUgY2hhbmdlIG9jY3VycmVkCisgICAgICovCisgICAgdm9pZCBub3RpZnlOZXR3b3JrU3RhdGVDaGFuZ2UoTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZSBuZXdTdGF0ZSwgU3RyaW5nIEJTU0lELCBpbnQgbmV0SWQpIHsKKyAgICAgICAgaWYgKG5ld1N0YXRlID09IE5ldHdvcmtJbmZvLkRldGFpbGVkU3RhdGUuQ09OTkVDVEVEKSB7CisgICAgICAgICAgICBNZXNzYWdlIG0gPSBtU3RhdGVNYWNoaW5lLm9idGFpbk1lc3NhZ2UoTkVUV09SS19DT05ORUNUSU9OX0VWRU5ULAorICAgICAgICAgICAgICAgICAgICBuZXRJZCwgMCwgQlNTSUQpOworICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShtKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE1lc3NhZ2UgbSA9IG1TdGF0ZU1hY2hpbmUub2J0YWluTWVzc2FnZShORVRXT1JLX0RJU0NPTk5FQ1RJT05fRVZFTlQsCisgICAgICAgICAgICAgICAgICAgIG5ldElkLCAwLCBCU1NJRCk7CisgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKG0pOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU2VuZCB0aGUgc3RhdGUgbWFjaGluZSBhIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBzdGF0ZSBvZiB0aGUgc3VwcGxpY2FudAorICAgICAqIGhhcyBjaGFuZ2VkLgorICAgICAqIEBwYXJhbSBuZXR3b3JrSWQgdGhlIGNvbmZpZ3VyZWQgbmV0d29yayBvbiB3aGljaCB0aGUgc3RhdGUgY2hhbmdlIG9jY3VycmVkCisgICAgICogQHBhcmFtIHdpZmlTc2lkIG5ldHdvcmsgbmFtZQorICAgICAqIEBwYXJhbSBCU1NJRCBuZXR3b3JrIGFkZHJlc3MKKyAgICAgKiBAcGFyYW0gbmV3U3RhdGUgdGhlIG5ldyB7QGNvZGUgU3VwcGxpY2FudFN0YXRlfQorICAgICAqLworICAgIHZvaWQgbm90aWZ5U3VwcGxpY2FudFN0YXRlQ2hhbmdlKGludCBuZXR3b3JrSWQsIFdpZmlTc2lkIHdpZmlTc2lkLCBTdHJpbmcgQlNTSUQsCisgICAgICAgICAgICBTdXBwbGljYW50U3RhdGUgbmV3U3RhdGUpIHsKKyAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShtU3RhdGVNYWNoaW5lLm9idGFpbk1lc3NhZ2UoU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQsCisgICAgICAgICAgICAgICAgbmV3IFN0YXRlQ2hhbmdlUmVzdWx0KG5ldHdvcmtJZCwgd2lmaVNzaWQsIEJTU0lELCBuZXdTdGF0ZSkpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlOYXRpdmUuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaU5hdGl2ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YzZkN2QKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlOYXRpdmUuamF2YQpAQCAtMCwwICsxLDk3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLndpZmk7CisKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLkJhdGNoZWRTY2FuU2V0dGluZ3M7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XcHNJbmZvOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBDb25maWc7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycEdyb3VwOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAubnNkLldpZmlQMnBTZXJ2aWNlSW5mbzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9jYWxMb2c7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworLyoqCisgKiBOYXRpdmUgY2FsbHMgZm9yIGJyaW5nIHVwL3NodXQgZG93biBvZiB0aGUgc3VwcGxpY2FudCBkYWVtb24gYW5kIGZvcgorICogc2VuZGluZyByZXF1ZXN0cyB0byB0aGUgc3VwcGxpY2FudCBkYWVtb24KKyAqCisgKiB3YWl0Rm9yRXZlbnQoKSBpcyBjYWxsZWQgb24gdGhlIG1vbml0b3IgdGhyZWFkIGZvciBldmVudHMuIEFsbCBvdGhlciBtZXRob2RzCisgKiBtdXN0IGJlIHNlcmlhbGl6ZWQgZnJvbSB0aGUgZnJhbWV3b3JrLgorICoKKyAqIHtAaGlkZX0KKyAqLworcHVibGljIGNsYXNzIFdpZmlOYXRpdmUgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBEQkcgPSBmYWxzZTsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtVEFHOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX0dST1VQX09XTkVSX0lOVEVOVCAgICAgPSA2OworCisgICAgc3RhdGljIGZpbmFsIGludCBCTFVFVE9PVEhfQ09FWElTVEVOQ0VfTU9ERV9FTkFCTEVEICAgICA9IDA7CisgICAgc3RhdGljIGZpbmFsIGludCBCTFVFVE9PVEhfQ09FWElTVEVOQ0VfTU9ERV9ESVNBQkxFRCAgICA9IDE7CisgICAgc3RhdGljIGZpbmFsIGludCBCTFVFVE9PVEhfQ09FWElTVEVOQ0VfTU9ERV9TRU5TRSAgICAgICA9IDI7CisKKyAgICBzdGF0aWMgZmluYWwgaW50IFNDQU5fV0lUSE9VVF9DT05ORUNUSU9OX1NFVFVQICAgICAgICAgID0gMTsKKyAgICBzdGF0aWMgZmluYWwgaW50IFNDQU5fV0lUSF9DT05ORUNUSU9OX1NFVFVQICAgICAgICAgICAgID0gMjsKKworICAgIC8vIEhvbGQgdGhpcyBsb2NrIGJlZm9yZSBjYWxsaW5nIHN1cHBsaWNhbnQgLSBpdCBpcyByZXF1aXJlZCB0bworICAgIC8vIG11dHVhbGx5IGV4Y2x1ZGUgYWNjZXNzIGZyb20gV2lmaSBhbmQgUDJwIHN0YXRlIG1hY2hpbmVzCisgICAgc3RhdGljIGZpbmFsIE9iamVjdCBtTG9jayA9IG5ldyBPYmplY3QoKTsKKworICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgbUludGVyZmFjZU5hbWU7CisgICAgcHVibGljIGZpbmFsIFN0cmluZyBtSW50ZXJmYWNlUHJlZml4OworCisgICAgcHJpdmF0ZSBib29sZWFuIG1TdXNwZW5kT3B0RW5hYmxlZCA9IGZhbHNlOworCisgICAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiBsb2FkRHJpdmVyKCk7CisKKyAgICBwdWJsaWMgbmF0aXZlIHN0YXRpYyBib29sZWFuIGlzRHJpdmVyTG9hZGVkKCk7CisKKyAgICBwdWJsaWMgbmF0aXZlIHN0YXRpYyBib29sZWFuIHVubG9hZERyaXZlcigpOworCisgICAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiBzdGFydFN1cHBsaWNhbnQoYm9vbGVhbiBwMnBTdXBwb3J0ZWQpOworCisgICAgLyogU2VuZHMgYSBraWxsIHNpZ25hbCB0byBzdXBwbGljYW50LiBUbyBiZSB1c2VkIHdoZW4gd2UgaGF2ZSBsb3N0IGNvbm5lY3Rpb24KKyAgICAgICBvciB3aGVuIHRoZSBzdXBwbGljYW50IGlzIGh1bmcgKi8KKyAgICBwdWJsaWMgbmF0aXZlIHN0YXRpYyBib29sZWFuIGtpbGxTdXBwbGljYW50KGJvb2xlYW4gcDJwU3VwcG9ydGVkKTsKKworICAgIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gY29ubmVjdFRvU3VwcGxpY2FudE5hdGl2ZSgpOworCisgICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBjbG9zZVN1cHBsaWNhbnRDb25uZWN0aW9uTmF0aXZlKCk7CisKKyAgICAvKioKKyAgICAgKiBXYWl0IGZvciB0aGUgc3VwcGxpY2FudCB0byBzZW5kIGFuIGV2ZW50LCByZXR1cm5pbmcgdGhlIGV2ZW50IHN0cmluZy4KKyAgICAgKiBAcmV0dXJuIHRoZSBldmVudCBzdHJpbmcgc2VudCBieSB0aGUgc3VwcGxpY2FudC4KKyAgICAgKi8KKyAgICBwcml2YXRlIG5hdGl2ZSBTdHJpbmcgd2FpdEZvckV2ZW50TmF0aXZlKCk7CisKKyAgICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIGRvQm9vbGVhbkNvbW1hbmROYXRpdmUoU3RyaW5nIGNvbW1hbmQpOworCisgICAgcHJpdmF0ZSBuYXRpdmUgaW50IGRvSW50Q29tbWFuZE5hdGl2ZShTdHJpbmcgY29tbWFuZCk7CisKKyAgICBwcml2YXRlIG5hdGl2ZSBTdHJpbmcgZG9TdHJpbmdDb21tYW5kTmF0aXZlKFN0cmluZyBjb21tYW5kKTsKKworICAgIHB1YmxpYyBXaWZpTmF0aXZlKFN0cmluZyBpbnRlcmZhY2VOYW1lKSB7CisgICAgICAgIG1JbnRlcmZhY2VOYW1lID0gaW50ZXJmYWNlTmFtZTsKKyAgICAgICAgbVRBRyA9ICJXaWZpTmF0aXZlLSIgKyBpbnRlcmZhY2VOYW1lOworICAgICAgICBpZiAoIWludGVyZmFjZU5hbWUuZXF1YWxzKCJwMnAwIikpIHsKKyAgICAgICAgICAgIG1JbnRlcmZhY2VQcmVmaXggPSAiSUZOQU1FPSIgKyBpbnRlcmZhY2VOYW1lICsgIiAiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gY29tbWFuZHMgZm9yIHAycDAgaW50ZXJmYWNlIGRvbid0IG5lZWQgcHJlZml4CisgICAgICAgICAgICBtSW50ZXJmYWNlUHJlZml4ID0gIiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2NhbExvZyBtTG9jYWxMb2cgPSBuZXcgTG9jYWxMb2coMTAyNCk7CisKKyAgICAvLyBob2xkIG1Mb2NrIGJlZm9yZSBhY2Nlc3NpbmcgbUNtZElkTG9jaworICAgIHByaXZhdGUgaW50IG1DbWRJZDsKKworICAgIHB1YmxpYyBMb2NhbExvZyBnZXRMb2NhbExvZygpIHsKKyAgICAgICAgcmV0dXJuIG1Mb2NhbExvZzsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBnZXROZXdDbWRJZExvY2tlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1DbWRJZCsrOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBsb2NhbExvZyhTdHJpbmcgcykgeworICAgICAgICBpZiAobUxvY2FsTG9nICE9IG51bGwpCisgICAgICAgICAgICBtTG9jYWxMb2cubG9nKG1JbnRlcmZhY2VOYW1lICsgIjogIiArIHMpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGNvbm5lY3RUb1N1cHBsaWNhbnQoKSB7CisgICAgICAgIC8vIE5vIHN5bmNocm9uaXphdGlvbiBuZWNlc3NhcnkgLi4gaXQgaXMgaW1wbGVtZW50ZWQgaW4gV2lmaU1vbml0b3IKKyAgICAgICAgbG9jYWxMb2cobUludGVyZmFjZVByZWZpeCArICJjb25uZWN0VG9TdXBwbGljYW50Iik7CisgICAgICAgIHJldHVybiBjb25uZWN0VG9TdXBwbGljYW50TmF0aXZlKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY2xvc2VTdXBwbGljYW50Q29ubmVjdGlvbigpIHsKKyAgICAgICAgbG9jYWxMb2cobUludGVyZmFjZVByZWZpeCArICJjbG9zZVN1cHBsaWNhbnRDb25uZWN0aW9uIik7CisgICAgICAgIGNsb3NlU3VwcGxpY2FudENvbm5lY3Rpb25OYXRpdmUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHdhaXRGb3JFdmVudCgpIHsKKyAgICAgICAgLy8gTm8gc3luY2hyb25pemF0aW9uIG5lY2Vzc2FyeSAuLiBpdCBpcyBpbXBsZW1lbnRlZCBpbiBXaWZpTW9uaXRvcgorICAgICAgICByZXR1cm4gd2FpdEZvckV2ZW50TmF0aXZlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGRvQm9vbGVhbkNvbW1hbmQoU3RyaW5nIGNvbW1hbmQpIHsKKyAgICAgICAgaWYgKERCRykgTG9nLmQobVRBRywgImRvQm9vbGVhbjogIiArIGNvbW1hbmQpOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBpbnQgY21kSWQgPSBnZXROZXdDbWRJZExvY2tlZCgpOworICAgICAgICAgICAgbG9jYWxMb2coY21kSWQgKyAiLT4iICsgbUludGVyZmFjZVByZWZpeCArIGNvbW1hbmQpOworICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBkb0Jvb2xlYW5Db21tYW5kTmF0aXZlKG1JbnRlcmZhY2VQcmVmaXggKyBjb21tYW5kKTsKKyAgICAgICAgICAgIGxvY2FsTG9nKGNtZElkICsgIjwtIiArIHJlc3VsdCk7CisgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChtVEFHLCAiICAgcmV0dXJuZWQgIiArIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgZG9JbnRDb21tYW5kKFN0cmluZyBjb21tYW5kKSB7CisgICAgICAgIGlmIChEQkcpIExvZy5kKG1UQUcsICJkb0ludDogIiArIGNvbW1hbmQpOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBpbnQgY21kSWQgPSBnZXROZXdDbWRJZExvY2tlZCgpOworICAgICAgICAgICAgbG9jYWxMb2coY21kSWQgKyAiLT4iICsgbUludGVyZmFjZVByZWZpeCArIGNvbW1hbmQpOworICAgICAgICAgICAgaW50IHJlc3VsdCA9IGRvSW50Q29tbWFuZE5hdGl2ZShtSW50ZXJmYWNlUHJlZml4ICsgY29tbWFuZCk7CisgICAgICAgICAgICBsb2NhbExvZyhjbWRJZCArICI8LSIgKyByZXN1bHQpOworICAgICAgICAgICAgaWYgKERCRykgTG9nLmQobVRBRywgIiAgIHJldHVybmVkICIgKyByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGRvU3RyaW5nQ29tbWFuZChTdHJpbmcgY29tbWFuZCkgeworICAgICAgICBpZiAoREJHKSBMb2cuZChtVEFHLCAiZG9TdHJpbmc6ICIgKyBjb21tYW5kKTsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgaW50IGNtZElkID0gZ2V0TmV3Q21kSWRMb2NrZWQoKTsKKyAgICAgICAgICAgIGxvY2FsTG9nKGNtZElkICsgIi0+IiArIG1JbnRlcmZhY2VQcmVmaXggKyBjb21tYW5kKTsKKyAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBkb1N0cmluZ0NvbW1hbmROYXRpdmUobUludGVyZmFjZVByZWZpeCArIGNvbW1hbmQpOworICAgICAgICAgICAgbG9jYWxMb2coY21kSWQgKyAiPC0iICsgcmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKG1UQUcsICIgICByZXR1cm5lZCAiICsgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBkb1N0cmluZ0NvbW1hbmRXaXRob3V0TG9nZ2luZyhTdHJpbmcgY29tbWFuZCkgeworICAgICAgICBpZiAoREJHKSBMb2cuZChtVEFHLCAiZG9TdHJpbmc6ICIgKyBjb21tYW5kKTsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZE5hdGl2ZShtSW50ZXJmYWNlUHJlZml4ICsgY29tbWFuZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBwaW5nKCkgeworICAgICAgICBTdHJpbmcgcG9uZyA9IGRvU3RyaW5nQ29tbWFuZCgiUElORyIpOworICAgICAgICByZXR1cm4gKHBvbmcgIT0gbnVsbCAmJiBwb25nLmVxdWFscygiUE9ORyIpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzY2FuKGludCB0eXBlKSB7CisgICAgICAgIGlmICh0eXBlID09IFNDQU5fV0lUSE9VVF9DT05ORUNUSU9OX1NFVFVQKSB7CisgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0NBTiBUWVBFPU9OTFkiKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFNDQU5fV0lUSF9DT05ORUNUSU9OX1NFVFVQKSB7CisgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0NBTiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBzY2FuIHR5cGUiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIERvZXMgYSBncmFjZWZ1bCBzaHV0ZG93biBvZiBzdXBwbGljYW50LiBJcyBhIGNvbW1vbiBzdG9wIGZ1bmN0aW9uIGZvciBib3RoIHAycCBhbmQgc3RhLgorICAgICAqCisgICAgICogTm90ZSB0aGF0IHVuZGVybmVhdGggd2UgdXNlIGEgaGFyc2gtc291bmRpbmcgInRlcm1pbmF0ZSIgc3VwcGxpY2FudCBjb21tYW5kCisgICAgICogZm9yIGEgZ3JhY2VmdWwgc3RvcCBhbmQgYSBtaWxkLXNvdW5kaW5nICJzdG9wIiBpbnRlcmZhY2UKKyAgICAgKiB0byBraWxsIHRoZSBwcm9jZXNzCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gc3RvcFN1cHBsaWNhbnQoKSB7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJURVJNSU5BVEUiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGxpc3ROZXR3b3JrcygpIHsKKyAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZCgiTElTVF9ORVRXT1JLUyIpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgYWRkTmV0d29yaygpIHsKKyAgICAgICAgcmV0dXJuIGRvSW50Q29tbWFuZCgiQUREX05FVFdPUksiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXROZXR3b3JrVmFyaWFibGUoaW50IG5ldElkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7CisgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShuYW1lKSB8fCBUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNFVF9ORVRXT1JLICIgKyBuZXRJZCArICIgIiArIG5hbWUgKyAiICIgKyB2YWx1ZSk7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXROZXR3b3JrVmFyaWFibGUoaW50IG5ldElkLCBTdHJpbmcgbmFtZSkgeworICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkobmFtZSkpIHJldHVybiBudWxsOworCisgICAgICAgIC8vIEdFVF9ORVRXT1JLIHdpbGwgbGlrZWx5IGZsb29kIHRoZSBsb2dzIC4uLgorICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kV2l0aG91dExvZ2dpbmcoIkdFVF9ORVRXT1JLICIgKyBuZXRJZCArICIgIiArIG5hbWUpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHJlbW92ZU5ldHdvcmsoaW50IG5ldElkKSB7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJSRU1PVkVfTkVUV09SSyAiICsgbmV0SWQpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGVuYWJsZU5ldHdvcmsoaW50IG5ldElkLCBib29sZWFuIGRpc2FibGVPdGhlcnMpIHsKKyAgICAgICAgaWYgKGRpc2FibGVPdGhlcnMpIHsKKyAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTRUxFQ1RfTkVUV09SSyAiICsgbmV0SWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkVOQUJMRV9ORVRXT1JLICIgKyBuZXRJZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBkaXNhYmxlTmV0d29yayhpbnQgbmV0SWQpIHsKKyAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRJU0FCTEVfTkVUV09SSyAiICsgbmV0SWQpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHJlY29ubmVjdCgpIHsKKyAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlJFQ09OTkVDVCIpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHJlYXNzb2NpYXRlKCkgeworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUkVBU1NPQ0lBVEUiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBkaXNjb25uZWN0KCkgeworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRElTQ09OTkVDVCIpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgc3RhdHVzKCkgeworICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kKCJTVEFUVVMiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldE1hY0FkZHJlc3MoKSB7CisgICAgICAgIC8vTWFjYWRkciA9IFhYLlhYLlhYLlhYLlhYLlhYCisgICAgICAgIFN0cmluZyByZXQgPSBkb1N0cmluZ0NvbW1hbmQoIkRSSVZFUiBNQUNBRERSIik7CisgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkocmV0KSkgeworICAgICAgICAgICAgU3RyaW5nW10gdG9rZW5zID0gcmV0LnNwbGl0KCIgPSAiKTsKKyAgICAgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09IDIpIHJldHVybiB0b2tlbnNbMV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogRm9ybWF0IG9mIHJlc3VsdHM6CisgICAgICogPT09PT09PT09PT09PT09PT0KKyAgICAgKiBpZD0xCisgICAgICogYnNzaWQ9Njg6N2Y6NzQ6ZDc6MWI6NmUKKyAgICAgKiBmcmVxPTI0MTIKKyAgICAgKiBsZXZlbD0tNDMKKyAgICAgKiB0c2Y9MTM0NDYyMTk3NTE2MDk0NAorICAgICAqIGFnZT0yNjIzCisgICAgICogZmxhZ3M9W1dQQTItUFNLLUNDTVBdW1dQU11bRVNTXQorICAgICAqIHNzaWQ9enVieWIKKyAgICAgKiA9PT09CisgICAgICoKKyAgICAgKiBSQU5HRT1BTEwgZ2V0cyBhbGwgc2NhbiByZXN1bHRzCisgICAgICogUkFOR0U9SUQtIGdldHMgcmVzdWx0cyBmcm9tIElECisgICAgICogTUFTSz08Tj4gc2VlIHdwYV9zdXBwbGljYW50L3NyYy9jb21tb24vd3BhX2N0cmwuaCBmb3IgZGV0YWlscworICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgc2NhblJlc3VsdHMoaW50IHNpZCkgeworICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kV2l0aG91dExvZ2dpbmcoIkJTUyBSQU5HRT0iICsgc2lkICsgIi0gTUFTSz0weDIxOTg3Iik7CisgICAgfQorCisgICAgLyoqCisgICAgICogRm9ybWF0IG9mIGNvbW1hbmQKKyAgICAgKiBEUklWRVIgV0xTX0JBVENISU5HIFNFVCBTQ0FORlJFUT14IE1TQ0FOPXIgQkVTVE49eSBDSEFOTkVMPTx6LCB3LCB0PiBSVFQ9cworICAgICAqIHdoZXJlIHggaXMgYW4gYXNjaWkgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlciBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIHNjYW5zCisgICAgICogICAgICAgciBpcyBhbiBhc2NpaSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIG51bWJlciBvZiBzY2FucyBwZXIgYmF0Y2gKKyAgICAgKiAgICAgICB5IGlzIGFuIGFzY2lpIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIgbnVtYmVyIG9mIHRoZSBtYXggQVAgdG8gcmVtZW1iZXIgcGVyIHNjYW4KKyAgICAgKiAgICAgICB6LCB3LCB0IHJlcHJlc2VudCBhIDEuLm4gc2l6ZSBsaXN0IG9mIGNoYW5uZWwgbnVtYmVycyBhbmQvb3IgJ0EnLCAnQicgdmFsdWVzCisgICAgICogICAgICAgICAgIGluZGljYXRpbmcgZW50aXJlIHJhbmdlcyBvZiBjaGFubmVscworICAgICAqICAgICAgIHMgaXMgYW4gYXNjaWkgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlciBudW1iZXIgb2YgaGlnaGVzdC1zdHJlbmd0aCBBUAorICAgICAqICAgICAgICAgICBmb3Igd2hpY2ggd2UnZCBsaWtlIGFwcHJveGltYXRlIGRpc3RhbmNlIHJlcG9ydGVkCisgICAgICoKKyAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGFzY2lpIGludGVnZXIgcmVwcmVzZW50aW5nIGEgZ3Vlc3Mgb2YgdGhlIG51bWJlciBvZiBzY2FucworICAgICAqIHRoZSBmaXJtd2FyZSBjYW4gcmVtZW1iZXIgYmVmb3JlIGl0IHJ1bnMgb3V0IG9mIGJ1ZmZlciBzcGFjZSBvciAtMSBvbiBlcnJvcgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgc2V0QmF0Y2hlZFNjYW5TZXR0aW5ncyhCYXRjaGVkU2NhblNldHRpbmdzIHNldHRpbmdzKSB7CisgICAgICAgIGlmIChzZXR0aW5ncyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kKCJEUklWRVIgV0xTX0JBVENISU5HIFNUT1AiKTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgY21kID0gIkRSSVZFUiBXTFNfQkFUQ0hJTkcgU0VUIFNDQU5GUkVRPSIgKyBzZXR0aW5ncy5zY2FuSW50ZXJ2YWxTZWM7CisgICAgICAgIGNtZCArPSAiIE1TQ0FOPSIgKyBzZXR0aW5ncy5tYXhTY2Fuc1BlckJhdGNoOworICAgICAgICBpZiAoc2V0dGluZ3MubWF4QXBQZXJTY2FuICE9IEJhdGNoZWRTY2FuU2V0dGluZ3MuVU5TUEVDSUZJRUQpIHsKKyAgICAgICAgICAgIGNtZCArPSAiIEJFU1ROPSIgKyBzZXR0aW5ncy5tYXhBcFBlclNjYW47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNldHRpbmdzLmNoYW5uZWxTZXQgIT0gbnVsbCAmJiAhc2V0dGluZ3MuY2hhbm5lbFNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNtZCArPSAiIENIQU5ORUw9PCI7CisgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICBmb3IgKFN0cmluZyBjaGFubmVsIDogc2V0dGluZ3MuY2hhbm5lbFNldCkgeworICAgICAgICAgICAgICAgIGNtZCArPSAoaSA+IDAgPyAiLCIgOiAiIikgKyBjaGFubmVsOworICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNtZCArPSAiPiI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNldHRpbmdzLm1heEFwRm9yRGlzdGFuY2UgIT0gQmF0Y2hlZFNjYW5TZXR0aW5ncy5VTlNQRUNJRklFRCkgeworICAgICAgICAgICAgY21kICs9ICIgUlRUPSIgKyBzZXR0aW5ncy5tYXhBcEZvckRpc3RhbmNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmQoY21kKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldEJhdGNoZWRTY2FuUmVzdWx0cygpIHsKKyAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZCgiRFJJVkVSIFdMU19CQVRDSElORyBHRVQiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzdGFydERyaXZlcigpIHsKKyAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBTVEFSVCIpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHN0b3BEcml2ZXIoKSB7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgU1RPUCIpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogU3RhcnQgZmlsdGVyaW5nIG91dCBNdWx0aWNhc3QgVjQgcGFja2V0cworICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQorICAgICAqCisgICAgICogTXVsdGljYXN0IGZpbHRlcmluZyBydWxlcyB3b3JrIGFzIGZvbGxvd3M6CisgICAgICoKKyAgICAgKiBUaGUgZHJpdmVyIGNhbiBmaWx0ZXIgbXVsdGljYXN0ICh2NCBhbmQvb3IgdjYpIGFuZCBicm9hZGNhc3QgcGFja2V0cyB3aGVuIGluCisgICAgICogYSBwb3dlciBvcHRpbWl6ZWQgbW9kZSAodHlwaWNhbGx5IHdoZW4gc2NyZWVuIGdvZXMgb2ZmKS4KKyAgICAgKgorICAgICAqIEluIG9yZGVyIHRvIHByZXZlbnQgdGhlIGRyaXZlciBmcm9tIGZpbHRlcmluZyB0aGUgbXVsdGljYXN0L2Jyb2FkY2FzdCBwYWNrZXRzLCB3ZSBoYXZlIHRvCisgICAgICogYWRkIGEgRFJJVkVSIFJYRklMVEVSLUFERCBydWxlIGZvbGxvd2VkIGJ5IERSSVZFUiBSWEZJTFRFUi1TVEFSVCB0byBtYWtlIHRoZSBydWxlIGVmZmVjdGl2ZQorICAgICAqCisgICAgICogRFJJVkVSIFJYRklMVEVSLUFERCBOdW0KKyAgICAgKiAgIHdoZXJlIE51bSA9IDAgLSBVbmljYXN0LCAxIC0gQnJvYWRjYXN0LCAyIC0gTXV0aWw0IG9yIDMgLSBNdWx0aTYKKyAgICAgKgorICAgICAqIGFuZCBEUklWRVIgUlhGSUxURVItU1RBUlQKKyAgICAgKiBJbiBvcmRlciB0byBzdG9wIHRoZSB1c2FnZSBvZiB0aGVzZSBydWxlcywgd2UgZG8KKyAgICAgKgorICAgICAqIERSSVZFUiBSWEZJTFRFUi1TVE9QCisgICAgICogRFJJVkVSIFJYRklMVEVSLVJFTU9WRSBOdW0KKyAgICAgKiAgIHdoZXJlIE51bSBpcyBhcyBkZXNjcmliZWQgZm9yIFJYRklMVEVSLUFERAorICAgICAqCisgICAgICogVGhlICBTRVRTVVNQRU5ET1BUIGRyaXZlciBjb21tYW5kIG92ZXJyaWRlcyB0aGUgZmlsdGVyaW5nIHJ1bGVzCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gc3RhcnRGaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMoKSB7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgUlhGSUxURVItU1RPUCIpCisgICAgICAgICAgICAmJiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgUlhGSUxURVItUkVNT1ZFIDIiKQorICAgICAgICAgICAgJiYgZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFJYRklMVEVSLVNUQVJUIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RvcCBmaWx0ZXJpbmcgb3V0IE11bHRpY2FzdCBWNCBwYWNrZXRzLgorICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHN0b3BGaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMoKSB7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgUlhGSUxURVItU1RPUCIpCisgICAgICAgICAgICAmJiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgUlhGSUxURVItQUREIDIiKQorICAgICAgICAgICAgJiYgZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFJYRklMVEVSLVNUQVJUIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RhcnQgZmlsdGVyaW5nIG91dCBNdWx0aWNhc3QgVjYgcGFja2V0cworICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0RmlsdGVyaW5nTXVsdGljYXN0VjZQYWNrZXRzKCkgeworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFJYRklMVEVSLVNUT1AiKQorICAgICAgICAgICAgJiYgZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFJYRklMVEVSLVJFTU9WRSAzIikKKyAgICAgICAgICAgICYmIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBSWEZJTFRFUi1TVEFSVCIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0b3AgZmlsdGVyaW5nIG91dCBNdWx0aWNhc3QgVjYgcGFja2V0cy4KKyAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZCwge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBzdG9wRmlsdGVyaW5nTXVsdGljYXN0VjZQYWNrZXRzKCkgeworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFJYRklMVEVSLVNUT1AiKQorICAgICAgICAgICAgJiYgZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFJYRklMVEVSLUFERCAzIikKKyAgICAgICAgICAgICYmIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBSWEZJTFRFUi1TVEFSVCIpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0QmFuZCgpIHsKKyAgICAgICBTdHJpbmcgcmV0ID0gZG9TdHJpbmdDb21tYW5kKCJEUklWRVIgR0VUQkFORCIpOworICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHJldCkpIHsKKyAgICAgICAgICAgIC8vcmVwbHkgaXMgIkJBTkQgWCIgd2hlcmUgWCBpcyB0aGUgYmFuZAorICAgICAgICAgICAgU3RyaW5nW10gdG9rZW5zID0gcmV0LnNwbGl0KCIgIik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09IDIpIHJldHVybiBJbnRlZ2VyLnBhcnNlSW50KHRva2Vuc1sxXSk7CisgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gc2V0QmFuZChpbnQgYmFuZCkgeworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFNFVEJBTkQgIiArIGJhbmQpOworICAgIH0KKworICAgLyoqCisgICAgICogU2V0cyB0aGUgYmx1ZXRvb3RoIGNvZXhpc3RlbmNlIG1vZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbW9kZSBPbmUgb2Yge0BsaW5rICNCTFVFVE9PVEhfQ09FWElTVEVOQ0VfTU9ERV9ESVNBQkxFRH0sCisgICAgICogICAgICAgICAgICB7QGxpbmsgI0JMVUVUT09USF9DT0VYSVNURU5DRV9NT0RFX0VOQUJMRUR9LCBvcgorICAgICAqICAgICAgICAgICAge0BsaW5rICNCTFVFVE9PVEhfQ09FWElTVEVOQ0VfTU9ERV9TRU5TRX0uCisgICAgICogQHJldHVybiBXaGV0aGVyIHRoZSBtb2RlIHdhcyBzdWNjZXNzZnVsbHkgc2V0LgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHNldEJsdWV0b290aENvZXhpc3RlbmNlTW9kZShpbnQgbW9kZSkgeworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIEJUQ09FWE1PREUgIiArIG1vZGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEVuYWJsZSBvciBkaXNhYmxlIEJsdWV0b290aCBjb2V4aXN0ZW5jZSBzY2FuIG1vZGUuIFdoZW4gdGhpcyBtb2RlIGlzIG9uLAorICAgICAqIHNvbWUgb2YgdGhlIGxvdy1sZXZlbCBzY2FuIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUgZHJpdmVyIGFyZSBjaGFuZ2VkIHRvCisgICAgICogcmVkdWNlIGludGVyZmVyZW5jZSB3aXRoIEEyRFAgc3RyZWFtaW5nLgorICAgICAqCisgICAgICogQHBhcmFtIGlzU2V0IHdoZXRoZXIgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBtb2RlCisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGNvbW1hbmQgc3VjY2VlZGVkLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRCbHVldG9vdGhDb2V4aXN0ZW5jZVNjYW5Nb2RlKGJvb2xlYW4gc2V0Q29leFNjYW5Nb2RlKSB7CisgICAgICAgIGlmIChzZXRDb2V4U2Nhbk1vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgQlRDT0VYU0NBTi1TVEFSVCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBCVENPRVhTQ0FOLVNUT1AiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHNhdmVDb25maWcoKSB7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTQVZFX0NPTkZJRyIpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGFkZFRvQmxhY2tsaXN0KFN0cmluZyBic3NpZCkgeworICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoYnNzaWQpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJCTEFDS0xJU1QgIiArIGJzc2lkKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBjbGVhckJsYWNrbGlzdCgpIHsKKyAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkJMQUNLTElTVCBjbGVhciIpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zKGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICBpZiAobVN1c3BlbmRPcHRFbmFibGVkID09IGVuYWJsZWQpIHJldHVybiB0cnVlOworICAgICAgICBtU3VzcGVuZE9wdEVuYWJsZWQgPSBlbmFibGVkOworICAgICAgICBpZiAoZW5hYmxlZCkgeworICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBTRVRTVVNQRU5ETU9ERSAxIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFNFVFNVU1BFTkRNT0RFIDAiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHNldENvdW50cnlDb2RlKFN0cmluZyBjb3VudHJ5Q29kZSkgeworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIENPVU5UUlkgIiArIGNvdW50cnlDb2RlLnRvVXBwZXJDYXNlKExvY2FsZS5ST09UKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZW5hYmxlQmFja2dyb3VuZFNjYW4oYm9vbGVhbiBlbmFibGUpIHsKKyAgICAgICAgaWYgKGVuYWJsZSkgeworICAgICAgICAgICAgZG9Cb29sZWFuQ29tbWFuZCgiU0VUIHBubyAxIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgcG5vIDAiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFNjYW5JbnRlcnZhbChpbnQgc2NhbkludGVydmFsKSB7CisgICAgICAgIGRvQm9vbGVhbkNvbW1hbmQoIlNDQU5fSU5URVJWQUwgIiArIHNjYW5JbnRlcnZhbCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RhcnRUZGxzKFN0cmluZyBtYWNBZGRyLCBib29sZWFuIGVuYWJsZSkgeworICAgICAgICBpZiAoZW5hYmxlKSB7CisgICAgICAgICAgICBkb0Jvb2xlYW5Db21tYW5kKCJURExTX0RJU0NPVkVSICIgKyBtYWNBZGRyKTsKKyAgICAgICAgICAgIGRvQm9vbGVhbkNvbW1hbmQoIlRETFNfU0VUVVAgIiArIG1hY0FkZHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG9Cb29sZWFuQ29tbWFuZCgiVERMU19URUFSRE9XTiAiICsgbWFjQWRkcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiogRXhhbXBsZSBvdXRwdXQ6CisgICAgICogUlNTST0tNjUKKyAgICAgKiBMSU5LU1BFRUQ9NDgKKyAgICAgKiBOT0lTRT05OTk5CisgICAgICogRlJFUVVFTkNZPTAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHNpZ25hbFBvbGwoKSB7CisgICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmRXaXRob3V0TG9nZ2luZygiU0lHTkFMX1BPTEwiKTsKKyAgICB9CisKKyAgICAvKiogRXhhbXBsZSBvdXRvdXQ6CisgICAgICogVFhHT09EPTM5NgorICAgICAqIFRYQkFEPTEKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHBrdGNudFBvbGwoKSB7CisgICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmQoIlBLVENOVF9QT0xMIik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYnNzRmx1c2goKSB7CisgICAgICAgIGRvQm9vbGVhbkNvbW1hbmQoIkJTU19GTFVTSCAwIik7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gc3RhcnRXcHNQYmMoU3RyaW5nIGJzc2lkKSB7CisgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShic3NpZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJXUFNfUEJDIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiV1BTX1BCQyAiICsgYnNzaWQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gc3RhcnRXcHNQYmMoU3RyaW5nIGlmYWNlLCBTdHJpbmcgYnNzaWQpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGJzc2lkKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kTmF0aXZlKCJJRk5BTUU9IiArIGlmYWNlICsgIiBXUFNfUEJDIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kTmF0aXZlKCJJRk5BTUU9IiArIGlmYWNlICsgIiBXUFNfUEJDICIgKyBic3NpZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzdGFydFdwc1BpbktleXBhZChTdHJpbmcgcGluKSB7CisgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShwaW4pKSByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJXUFNfUElOIGFueSAiICsgcGluKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzdGFydFdwc1BpbktleXBhZChTdHJpbmcgaWZhY2UsIFN0cmluZyBwaW4pIHsKKyAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHBpbikpIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmROYXRpdmUoIklGTkFNRT0iICsgaWZhY2UgKyAiIFdQU19QSU4gYW55ICIgKyBwaW4pOworICAgICAgICB9CisgICAgfQorCisKKyAgICBwdWJsaWMgU3RyaW5nIHN0YXJ0V3BzUGluRGlzcGxheShTdHJpbmcgYnNzaWQpIHsKKyAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGJzc2lkKSkgeworICAgICAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZCgiV1BTX1BJTiBhbnkiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmQoIldQU19QSU4gIiArIGJzc2lkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgc3RhcnRXcHNQaW5EaXNwbGF5KFN0cmluZyBpZmFjZSwgU3RyaW5nIGJzc2lkKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShic3NpZCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kTmF0aXZlKCJJRk5BTUU9IiArIGlmYWNlICsgIiBXUFNfUElOIGFueSIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kTmF0aXZlKCJJRk5BTUU9IiArIGlmYWNlICsgIiBXUFNfUElOICIgKyBic3NpZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDb25maWd1cmVzIGFuIGFjY2VzcyBwb2ludCBjb25uZWN0aW9uICovCisgICAgcHVibGljIGJvb2xlYW4gc3RhcnRXcHNSZWdpc3RyYXIoU3RyaW5nIGJzc2lkLCBTdHJpbmcgcGluKSB7CisgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShic3NpZCkgfHwgVGV4dFV0aWxzLmlzRW1wdHkocGluKSkgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiV1BTX1JFRyAiICsgYnNzaWQgKyAiICIgKyBwaW4pOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGNhbmNlbFdwcygpIHsKKyAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIldQU19DQU5DRUwiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRQZXJzaXN0ZW50UmVjb25uZWN0KGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICBpbnQgdmFsdWUgPSAoZW5hYmxlZCA9PSB0cnVlKSA/IDEgOiAwOworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0VUIHBlcnNpc3RlbnRfcmVjb25uZWN0ICIgKyB2YWx1ZSk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gc2V0RGV2aWNlTmFtZShTdHJpbmcgbmFtZSkgeworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0VUIGRldmljZV9uYW1lICIgKyBuYW1lKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXREZXZpY2VUeXBlKFN0cmluZyB0eXBlKSB7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgZGV2aWNlX3R5cGUgIiArIHR5cGUpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHNldENvbmZpZ01ldGhvZHMoU3RyaW5nIGNmZykgeworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0VUIGNvbmZpZ19tZXRob2RzICIgKyBjZmcpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHNldE1hbnVmYWN0dXJlcihTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCBtYW51ZmFjdHVyZXIgIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRNb2RlbE5hbWUoU3RyaW5nIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgbW9kZWxfbmFtZSAiICsgdmFsdWUpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHNldE1vZGVsTnVtYmVyKFN0cmluZyB2YWx1ZSkgeworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0VUIG1vZGVsX251bWJlciAiICsgdmFsdWUpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHNldFNlcmlhbE51bWJlcihTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCBzZXJpYWxfbnVtYmVyICIgKyB2YWx1ZSk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gc2V0UDJwU3NpZFBvc3RmaXgoU3RyaW5nIHBvc3RmaXgpIHsKKyAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCBwMnBfc3NpZF9wb3N0Zml4ICIgKyBwb3N0Zml4KTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRQMnBHcm91cElkbGUoU3RyaW5nIGlmYWNlLCBpbnQgdGltZSkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZE5hdGl2ZSgiSUZOQU1FPSIgKyBpZmFjZSArICIgU0VUIHAycF9ncm91cF9pZGxlICIgKyB0aW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFBvd2VyU2F2ZShib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgaWYgKGVuYWJsZWQpIHsKKyAgICAgICAgICAgIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCBwcyAxIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgcHMgMCIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gc2V0UDJwUG93ZXJTYXZlKFN0cmluZyBpZmFjZSwgYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgIGlmIChlbmFibGVkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmROYXRpdmUoIklGTkFNRT0iICsgaWZhY2UgKyAiIFAyUF9TRVQgcHMgMSIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZE5hdGl2ZSgiSUZOQU1FPSIgKyBpZmFjZSArICIgUDJQX1NFVCBwcyAwIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRXZmRFbmFibGUoYm9vbGVhbiBlbmFibGUpIHsKKyAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCB3aWZpX2Rpc3BsYXkgIiArIChlbmFibGUgPyAiMSIgOiAiMCIpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRXZmREZXZpY2VJbmZvKFN0cmluZyBoZXgpIHsKKyAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIldGRF9TVUJFTEVNX1NFVCAwICIgKyBoZXgpOworICAgIH0KKworICAgIC8qKgorICAgICAqICJzdGEiIHByaW9yaXRpemVzIFNUQSBjb25uZWN0aW9uIG92ZXIgUDJQIGFuZCAicDJwIiBwcmlvcml0aXplcworICAgICAqIFAyUCBjb25uZWN0aW9uIG92ZXIgU1RBCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gc2V0Q29uY3VycmVuY3lQcmlvcml0eShTdHJpbmcgcykgeworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX1NFVCBjb25jX3ByZWYgIiArIHMpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHAycEZpbmQoKSB7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfRklORCIpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHAycEZpbmQoaW50IHRpbWVvdXQpIHsKKyAgICAgICAgaWYgKHRpbWVvdXQgPD0gMCkgeworICAgICAgICAgICAgcmV0dXJuIHAycEZpbmQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX0ZJTkQgIiArIHRpbWVvdXQpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHAycFN0b3BGaW5kKCkgeworICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfU1RPUF9GSU5EIik7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gcDJwTGlzdGVuKCkgeworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX0xJU1RFTiIpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHAycExpc3RlbihpbnQgdGltZW91dCkgeworICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gcDJwTGlzdGVuKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9MSVNURU4gIiArIHRpbWVvdXQpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHAycEV4dExpc3Rlbihib29sZWFuIGVuYWJsZSwgaW50IHBlcmlvZCwgaW50IGludGVydmFsKSB7CisgICAgICAgIGlmIChlbmFibGUgJiYgaW50ZXJ2YWwgPCBwZXJpb2QpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX0VYVF9MSVNURU4iCisgICAgICAgICAgICAgICAgICAgICsgKGVuYWJsZSA/ICgiICIgKyBwZXJpb2QgKyAiICIgKyBpbnRlcnZhbCkgOiAiIikpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHAycFNldENoYW5uZWwoaW50IGxjLCBpbnQgb2MpIHsKKyAgICAgICAgaWYgKERCRykgTG9nLmQobVRBRywgInAycFNldENoYW5uZWw6IGxjPSIrbGMrIiwgb2M9IitvYyk7CisKKyAgICAgICAgaWYgKGxjID49MSAmJiBsYyA8PSAxMSkgeworICAgICAgICAgICAgaWYgKCFkb0Jvb2xlYW5Db21tYW5kKCJQMlBfU0VUIGxpc3Rlbl9jaGFubmVsICIgKyBsYykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobGMgIT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9jID49IDEgJiYgb2MgPD0gMTY1ICkgeworICAgICAgICAgICAgaW50IGZyZXEgPSAob2MgPD0gMTQgPyAyNDA3IDogNTAwMCkgKyBvYyAqIDU7CisgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX1NFVCBkaXNhbGxvd19mcmVxIDEwMDAtIgorICAgICAgICAgICAgICAgICAgICArIChmcmVxIC0gNSkgKyAiLCIgKyAoZnJlcSArIDUpICsgIi02MDAwIik7CisgICAgICAgIH0gZWxzZSBpZiAob2MgPT0gMCkgeworICAgICAgICAgICAgLyogb2M9PTAgZGlzYWJsZXMgIlAyUF9TRVQgZGlzYWxsb3dfZnJlcSIgKGVuYWJsZXMgYWxsIGZyZXFzKSAqLworICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9TRVQgZGlzYWxsb3dfZnJlcSBcIlwiIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gcDJwRmx1c2goKSB7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfRkxVU0giKTsKKyAgICB9CisKKyAgICAvKiBwMnBfY29ubmVjdCA8cGVlciBkZXZpY2UgYWRkcmVzcz4gPHBiY3xwaW58UElOIz4gW2xhYmVsfGRpc3BsYXl8a2V5cGFkXQorICAgICAgICBbcGVyc2lzdGVudF0gW2pvaW58YXV0aF0gW2dvX2ludGVudD08MC4uMTU+XSBbZnJlcT08aW4gTUh6Pl0gKi8KKyAgICBwdWJsaWMgU3RyaW5nIHAycENvbm5lY3QoV2lmaVAycENvbmZpZyBjb25maWcsIGJvb2xlYW4gam9pbkV4aXN0aW5nR3JvdXApIHsKKyAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGFyZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICAgICAgV3BzSW5mbyB3cHMgPSBjb25maWcud3BzOworICAgICAgICBhcmdzLmFkZChjb25maWcuZGV2aWNlQWRkcmVzcyk7CisKKyAgICAgICAgc3dpdGNoICh3cHMuc2V0dXApIHsKKyAgICAgICAgICAgIGNhc2UgV3BzSW5mby5QQkM6CisgICAgICAgICAgICAgICAgYXJncy5hZGQoInBiYyIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXcHNJbmZvLkRJU1BMQVk6CisgICAgICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHdwcy5waW4pKSB7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MuYWRkKCJwaW4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhcmdzLmFkZCh3cHMucGluKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJncy5hZGQoImRpc3BsYXkiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV3BzSW5mby5LRVlQQUQ6CisgICAgICAgICAgICAgICAgYXJncy5hZGQod3BzLnBpbik7CisgICAgICAgICAgICAgICAgYXJncy5hZGQoImtleXBhZCIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXcHNJbmZvLkxBQkVMOgorICAgICAgICAgICAgICAgIGFyZ3MuYWRkKHdwcy5waW4pOworICAgICAgICAgICAgICAgIGFyZ3MuYWRkKCJsYWJlbCIpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcubmV0SWQgPT0gV2lmaVAycEdyb3VwLlBFUlNJU1RFTlRfTkVUX0lEKSB7CisgICAgICAgICAgICBhcmdzLmFkZCgicGVyc2lzdGVudCIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGpvaW5FeGlzdGluZ0dyb3VwKSB7CisgICAgICAgICAgICBhcmdzLmFkZCgiam9pbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy9UT0RPOiBUaGlzIGNhbiBiZSBhZGFwdGVkIGJhc2VkIG9uIGRldmljZSBwbHVnZ2VkIGluIHN0YXRlIGFuZAorICAgICAgICAgICAgLy9kZXZpY2UgYmF0dGVyeSBzdGF0ZQorICAgICAgICAgICAgaW50IGdyb3VwT3duZXJJbnRlbnQgPSBjb25maWcuZ3JvdXBPd25lckludGVudDsKKyAgICAgICAgICAgIGlmIChncm91cE93bmVySW50ZW50IDwgMCB8fCBncm91cE93bmVySW50ZW50ID4gMTUpIHsKKyAgICAgICAgICAgICAgICBncm91cE93bmVySW50ZW50ID0gREVGQVVMVF9HUk9VUF9PV05FUl9JTlRFTlQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmdzLmFkZCgiZ29faW50ZW50PSIgKyBncm91cE93bmVySW50ZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyBjb21tYW5kID0gIlAyUF9DT05ORUNUICI7CisgICAgICAgIGZvciAoU3RyaW5nIHMgOiBhcmdzKSBjb21tYW5kICs9IHMgKyAiICI7CisKKyAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZChjb21tYW5kKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBwMnBDYW5jZWxDb25uZWN0KCkgeworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX0NBTkNFTCIpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHAycFByb3Zpc2lvbkRpc2NvdmVyeShXaWZpUDJwQ29uZmlnIGNvbmZpZykgeworICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHJldHVybiBmYWxzZTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZy53cHMuc2V0dXApIHsKKyAgICAgICAgICAgIGNhc2UgV3BzSW5mby5QQkM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9QUk9WX0RJU0MgIiArIGNvbmZpZy5kZXZpY2VBZGRyZXNzICsgIiBwYmMiKTsKKyAgICAgICAgICAgIGNhc2UgV3BzSW5mby5ESVNQTEFZOgorICAgICAgICAgICAgICAgIC8vV2UgYXJlIGRvaW5nIGRpc3BsYXksIHNvIHByb3Zpc2lvbiBkaXNjb3ZlcnkgaXMga2V5cGFkCisgICAgICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9QUk9WX0RJU0MgIiArIGNvbmZpZy5kZXZpY2VBZGRyZXNzICsgIiBrZXlwYWQiKTsKKyAgICAgICAgICAgIGNhc2UgV3BzSW5mby5LRVlQQUQ6CisgICAgICAgICAgICAgICAgLy9XZSBhcmUgZG9pbmcga2V5cGFkLCBzbyBwcm92aXNpb24gZGlzY292ZXJ5IGlzIGRpc3BsYXkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX1BST1ZfRElTQyAiICsgY29uZmlnLmRldmljZUFkZHJlc3MgKyAiIGRpc3BsYXkiKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHAycEdyb3VwQWRkKGJvb2xlYW4gcGVyc2lzdGVudCkgeworICAgICAgICBpZiAocGVyc2lzdGVudCkgeworICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9HUk9VUF9BREQgcGVyc2lzdGVudCIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfR1JPVVBfQUREIik7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gcDJwR3JvdXBBZGQoaW50IG5ldElkKSB7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfR1JPVVBfQUREIHBlcnNpc3RlbnQ9IiArIG5ldElkKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBwMnBHcm91cFJlbW92ZShTdHJpbmcgaWZhY2UpIHsKKyAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGlmYWNlKSkgcmV0dXJuIGZhbHNlOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZE5hdGl2ZSgiSUZOQU1FPSIgKyBpZmFjZSArICIgUDJQX0dST1VQX1JFTU9WRSAiICsgaWZhY2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gcDJwUmVqZWN0KFN0cmluZyBkZXZpY2VBZGRyZXNzKSB7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfUkVKRUNUICIgKyBkZXZpY2VBZGRyZXNzKTsKKyAgICB9CisKKyAgICAvKiBJbnZpdGUgYSBwZWVyIHRvIGEgZ3JvdXAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBwMnBJbnZpdGUoV2lmaVAycEdyb3VwIGdyb3VwLCBTdHJpbmcgZGV2aWNlQWRkcmVzcykgeworICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoZGV2aWNlQWRkcmVzcykpIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoZ3JvdXAgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9JTlZJVEUgcGVlcj0iICsgZGV2aWNlQWRkcmVzcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX0lOVklURSBncm91cD0iICsgZ3JvdXAuZ2V0SW50ZXJmYWNlKCkKKyAgICAgICAgICAgICAgICAgICAgKyAiIHBlZXI9IiArIGRldmljZUFkZHJlc3MgKyAiIGdvX2Rldl9hZGRyPSIgKyBncm91cC5nZXRPd25lcigpLmRldmljZUFkZHJlc3MpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogUmVpbnZva2UgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBwMnBSZWludm9rZShpbnQgbmV0SWQsIFN0cmluZyBkZXZpY2VBZGRyZXNzKSB7CisgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShkZXZpY2VBZGRyZXNzKSB8fCBuZXRJZCA8IDApIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX0lOVklURSBwZXJzaXN0ZW50PSIgKyBuZXRJZCArICIgcGVlcj0iICsgZGV2aWNlQWRkcmVzcyk7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBwMnBHZXRTc2lkKFN0cmluZyBkZXZpY2VBZGRyZXNzKSB7CisgICAgICAgIHJldHVybiBwMnBHZXRQYXJhbShkZXZpY2VBZGRyZXNzLCAib3Blcl9zc2lkIik7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBwMnBHZXREZXZpY2VBZGRyZXNzKCkgeworICAgICAgICBTdHJpbmcgc3RhdHVzID0gc3RhdHVzKCk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gbnVsbCkgcmV0dXJuICIiOworCisgICAgICAgIFN0cmluZ1tdIHRva2VucyA9IHN0YXR1cy5zcGxpdCgiXG4iKTsKKyAgICAgICAgZm9yIChTdHJpbmcgdG9rZW4gOiB0b2tlbnMpIHsKKyAgICAgICAgICAgIGlmICh0b2tlbi5zdGFydHNXaXRoKCJwMnBfZGV2aWNlX2FkZHJlc3M9IikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSBuYW1lVmFsdWUgPSB0b2tlbi5zcGxpdCgiPSIpOworICAgICAgICAgICAgICAgIGlmIChuYW1lVmFsdWUubGVuZ3RoICE9IDIpIGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybiBuYW1lVmFsdWVbMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0R3JvdXBDYXBhYmlsaXR5KFN0cmluZyBkZXZpY2VBZGRyZXNzKSB7CisgICAgICAgIGludCBnYyA9IDA7CisgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShkZXZpY2VBZGRyZXNzKSkgcmV0dXJuIGdjOworICAgICAgICBTdHJpbmcgcGVlckluZm8gPSBwMnBQZWVyKGRldmljZUFkZHJlc3MpOworICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkocGVlckluZm8pKSByZXR1cm4gZ2M7CisKKyAgICAgICAgU3RyaW5nW10gdG9rZW5zID0gcGVlckluZm8uc3BsaXQoIlxuIik7CisgICAgICAgIGZvciAoU3RyaW5nIHRva2VuIDogdG9rZW5zKSB7CisgICAgICAgICAgICBpZiAodG9rZW4uc3RhcnRzV2l0aCgiZ3JvdXBfY2FwYWI9IikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSBuYW1lVmFsdWUgPSB0b2tlbi5zcGxpdCgiPSIpOworICAgICAgICAgICAgICAgIGlmIChuYW1lVmFsdWUubGVuZ3RoICE9IDIpIGJyZWFrOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLmRlY29kZShuYW1lVmFsdWVbMV0pOworICAgICAgICAgICAgICAgIH0gY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdjOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZ2M7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBwMnBQZWVyKFN0cmluZyBkZXZpY2VBZGRyZXNzKSB7CisgICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmQoIlAyUF9QRUVSICIgKyBkZXZpY2VBZGRyZXNzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBwMnBHZXRQYXJhbShTdHJpbmcgZGV2aWNlQWRkcmVzcywgU3RyaW5nIGtleSkgeworICAgICAgICBpZiAoZGV2aWNlQWRkcmVzcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKKworICAgICAgICBTdHJpbmcgcGVlckluZm8gPSBwMnBQZWVyKGRldmljZUFkZHJlc3MpOworICAgICAgICBpZiAocGVlckluZm8gPT0gbnVsbCkgcmV0dXJuIG51bGw7CisgICAgICAgIFN0cmluZ1tdIHRva2Vucz0gcGVlckluZm8uc3BsaXQoIlxuIik7CisKKyAgICAgICAga2V5ICs9ICI9IjsKKyAgICAgICAgZm9yIChTdHJpbmcgdG9rZW4gOiB0b2tlbnMpIHsKKyAgICAgICAgICAgIGlmICh0b2tlbi5zdGFydHNXaXRoKGtleSkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSBuYW1lVmFsdWUgPSB0b2tlbi5zcGxpdCgiPSIpOworICAgICAgICAgICAgICAgIGlmIChuYW1lVmFsdWUubGVuZ3RoICE9IDIpIGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybiBuYW1lVmFsdWVbMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gcDJwU2VydmljZUFkZChXaWZpUDJwU2VydmljZUluZm8gc2VydkluZm8pIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogUDJQX1NFUlZJQ0VfQUREIGJvbmpvdXIgPHF1ZXJ5IGhleGR1bXA+IDxSREFUQSBoZXhkdW1wPgorICAgICAgICAgKiBQMlBfU0VSVklDRV9BREQgdXBucCA8dmVyc2lvbiBoZXg+IDxzZXJ2aWNlPgorICAgICAgICAgKgorICAgICAgICAgKiBlLmcpCisgICAgICAgICAqIFtCb25qb3VyXQorICAgICAgICAgKiAjIElQIFByaW50aW5nIG92ZXIgVENQIChQVFIpIChSREFUQT1NeVByaW50ZXIuX2lwcC5fdGNwLmxvY2FsLikKKyAgICAgICAgICogUDJQX1NFUlZJQ0VfQUREIGJvbmpvdXIgMDQ1ZjY5NzA3MGMwMGMwMDBjMDEgMDk0ZDc5NTA3MjY5NmU3NDY1NzJjMDI3CisgICAgICAgICAqICMgSVAgUHJpbnRpbmcgb3ZlciBUQ1AgKFRYVCkgKFJEQVRBPXR4dHZlcnM9MSxwZGw9YXBwbGljYXRpb24vcG9zdHNjcmlwdCkKKyAgICAgICAgICogUDJQX1NFUlZJQ0VfQUREIGJvbmpvdXIgMDk2ZDc5NzA3MjY5NmU3NDY1NzIwNDVmNjk3MDcwYzAwYzAwMTAwMQorICAgICAgICAgKiAgMDk3NDc4NzQ3NjY1NzI3MzNkMzExYTcwNjQ2YzNkNjE3MDcwNmM2OTYzNjE3NDY5NmY2ZTJmNzA2ZjczNzQ3MzYzNzI3OTcwNzQKKyAgICAgICAgICoKKyAgICAgICAgICogW1VQblBdCisgICAgICAgICAqIFAyUF9TRVJWSUNFX0FERCB1cG5wIDEwIHV1aWQ6Njg1OWRlZGUtODU3NC01OWFiLTkzMzItMTIzNDU2Nzg5MDEyCisgICAgICAgICAqIFAyUF9TRVJWSUNFX0FERCB1cG5wIDEwIHV1aWQ6Njg1OWRlZGUtODU3NC01OWFiLTkzMzItMTIzNDU2Nzg5MDEyOjp1cG5wOnJvb3RkZXZpY2UKKyAgICAgICAgICogUDJQX1NFUlZJQ0VfQUREIHVwbnAgMTAgdXVpZDo2ODU5ZGVkZS04NTc0LTU5YWItOTMzMi0xMjM0NTY3ODkwMTI6OnVybjpzY2hlbWFzLXVwbnAKKyAgICAgICAgICogLW9yZzpkZXZpY2U6SW50ZXJuZXRHYXRld2F5RGV2aWNlOjEKKyAgICAgICAgICogUDJQX1NFUlZJQ0VfQUREIHVwbnAgMTAgdXVpZDo2ODU5ZGVkZS04NTc0LTU5YWItOTMyMi0xMjM0NTY3ODkwMTI6OnVybjpzY2hlbWFzLXVwbnAKKyAgICAgICAgICogLW9yZzpzZXJ2aWNlOkNvbnRlbnREaXJlY3Rvcnk6MgorICAgICAgICAgKi8KKyAgICAgICAgZm9yIChTdHJpbmcgcyA6IHNlcnZJbmZvLmdldFN1cHBsaWNhbnRRdWVyeUxpc3QoKSkgeworICAgICAgICAgICAgU3RyaW5nIGNvbW1hbmQgPSAiUDJQX1NFUlZJQ0VfQUREIjsKKyAgICAgICAgICAgIGNvbW1hbmQgKz0gKCIgIiArIHMpOworICAgICAgICAgICAgaWYgKCFkb0Jvb2xlYW5Db21tYW5kKGNvbW1hbmQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHAycFNlcnZpY2VEZWwoV2lmaVAycFNlcnZpY2VJbmZvIHNlcnZJbmZvKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFAyUF9TRVJWSUNFX0RFTCBib25qb3VyIDxxdWVyeSBoZXhkdW1wPgorICAgICAgICAgKiBQMlBfU0VSVklDRV9ERUwgdXBucCA8dmVyc2lvbiBoZXg+IDxzZXJ2aWNlPgorICAgICAgICAgKi8KKyAgICAgICAgZm9yIChTdHJpbmcgcyA6IHNlcnZJbmZvLmdldFN1cHBsaWNhbnRRdWVyeUxpc3QoKSkgeworICAgICAgICAgICAgU3RyaW5nIGNvbW1hbmQgPSAiUDJQX1NFUlZJQ0VfREVMICI7CisKKyAgICAgICAgICAgIFN0cmluZ1tdIGRhdGEgPSBzLnNwbGl0KCIgIik7CisgICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCAyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCJ1cG5wIi5lcXVhbHMoZGF0YVswXSkpIHsKKyAgICAgICAgICAgICAgICBjb21tYW5kICs9IHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCJib25qb3VyIi5lcXVhbHMoZGF0YVswXSkpIHsKKyAgICAgICAgICAgICAgICBjb21tYW5kICs9IGRhdGFbMF07CisgICAgICAgICAgICAgICAgY29tbWFuZCArPSAoIiAiICsgZGF0YVsxXSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZG9Cb29sZWFuQ29tbWFuZChjb21tYW5kKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBwMnBTZXJ2aWNlRmx1c2goKSB7CisgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfU0VSVklDRV9GTFVTSCIpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgcDJwU2VydkRpc2NSZXEoU3RyaW5nIGFkZHIsIFN0cmluZyBxdWVyeSkgeworICAgICAgICBTdHJpbmcgY29tbWFuZCA9ICJQMlBfU0VSVl9ESVNDX1JFUSI7CisgICAgICAgIGNvbW1hbmQgKz0gKCIgIiArIGFkZHIpOworICAgICAgICBjb21tYW5kICs9ICgiICIgKyBxdWVyeSk7CisKKyAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZChjb21tYW5kKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBwMnBTZXJ2RGlzY0NhbmNlbFJlcShTdHJpbmcgaWQpIHsKKyAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9TRVJWX0RJU0NfQ0FOQ0VMX1JFUSAiICsgaWQpOworICAgIH0KKworICAgIC8qIFNldCB0aGUgY3VycmVudCBtb2RlIG9mIG1pcmFjYXN0IG9wZXJhdGlvbi4KKyAgICAgKiAgMCA9IGRpc2FibGVkCisgICAgICogIDEgPSBvcGVyYXRpbmcgYXMgc291cmNlCisgICAgICogIDIgPSBvcGVyYXRpbmcgYXMgc2luaworICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1pcmFjYXN0TW9kZShpbnQgbW9kZSkgeworICAgICAgICAvLyBOb3RlOiBvcHRpb25hbCBmZWF0dXJlIG9uIHRoZSBkcml2ZXIuIEl0IGlzIG9rIGZvciB0aGlzIHRvIGZhaWwuCisgICAgICAgIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBNSVJBQ0FTVCAiICsgbW9kZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpTm90aWZpY2F0aW9uQ29udHJvbGxlci5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpTm90aWZpY2F0aW9uQ29udHJvbGxlci5qYXZhCmluZGV4IGE5MjA2ZTAuLmVjNmFhMzcgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaU5vdGlmaWNhdGlvbkNvbnRyb2xsZXIuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlOb3RpZmljYXRpb25Db250cm9sbGVyLmphdmEKQEAgLTI4LDcgKzI4LDYgQEAKIGltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrSW5mbzsKIGltcG9ydCBhbmRyb2lkLm5ldC53aWZpLlNjYW5SZXN1bHQ7CiBpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlTdGF0ZU1hY2hpbmU7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlTZXJ2aWNlLmphdmEKaW5kZXggZjJlZmRlMS4uNDM0MjI3MiAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaVNlcnZpY2UuamF2YQpAQCAtMzgsMTQgKzM4LDExIEBACiBpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpQ29uZmlndXJhdGlvbi5Qcm94eVNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaUluZm87CiBpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlTdGF0ZU1hY2hpbmU7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmU7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2VuZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JTmV0d29ya01hbmFnZW1lbnRTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CkBAIC01Myw3ICs1MCw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Xb3JrU291cmNlOwogaW1wb3J0IGFuZHJvaWQub3MuQXN5bmNUYXNrOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIAogaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwpAQCAtNjYsMTEgKzYyLDggQEAKIGltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5ldC5JbmV0NEFkZHJlc3M7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwotCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuSUJhdHRlcnlTdGF0czsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuVGVsZXBob255SW50ZW50czsKQEAgLTk4NCwxMSArOTc3LDYgQEAKICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUucmVjb25uZWN0Q29tbWFuZCgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCkgewotICAgICAgICBlbmZvcmNlQ29ubmVjdGl2aXR5SW50ZXJuYWxQZXJtaXNzaW9uKCk7Ci0gICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLmNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCk7Ci0gICAgfQotCiAgICAgLyoqCiAgICAgICogc2VlIHtAbGluayBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyI3N0b3BXaWZpfQogICAgICAqCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlTdGF0ZU1hY2hpbmUuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaVN0YXRlTWFjaGluZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNjhhNTQKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlTdGF0ZU1hY2hpbmUuamF2YQpAQCAtMCwwICsxLDQ0MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci53aWZpOworCitpbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9ESVNBQkxFRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX1NUQVRFX0RJU0FCTElORzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX1NUQVRFX0VOQUJMRUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9FTkFCTElORzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX1NUQVRFX1VOS05PV047CisKKy8qKgorICogVE9ETzoKKyAqIERlcHJlY2F0ZSBXSUZJX1NUQVRFX1VOS05PV04KKyAqLworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyLldJRklfQVBfU1RBVEVfRElTQUJMRUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9BUF9TVEFURV9ESVNBQkxJTkc7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9BUF9TVEFURV9FTkFCTEVEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyLldJRklfQVBfU1RBVEVfRU5BQkxJTkc7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9BUF9TVEFURV9GQUlMRUQ7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BbGFybU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKK2ltcG9ydCBhbmRyb2lkLmFwcC5iYWNrdXAuSUJhY2t1cE1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5ibHVldG9vdGguQmx1ZXRvb3RoQWRhcHRlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcjsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQubmV0LkRoY3BSZXN1bHRzOworaW1wb3J0IGFuZHJvaWQubmV0LkRoY3BTdGF0ZU1hY2hpbmU7CitpbXBvcnQgYW5kcm9pZC5uZXQuSW50ZXJmYWNlQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm5ldC5MaW5rQWRkcmVzczsKK2ltcG9ydCBhbmRyb2lkLm5ldC5MaW5rUHJvcGVydGllczsKK2ltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrSW5mbzsKK2ltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrSW5mby5EZXRhaWxlZFN0YXRlOworaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtVdGlsczsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Sb3V0ZUluZm87CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5CYXRjaGVkU2NhblJlc3VsdDsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLkJhdGNoZWRTY2FuU2V0dGluZ3M7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5Sc3NpUGFja2V0Q291bnRJbmZvOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuU2NhblJlc3VsdDsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLlN1cHBsaWNhbnRTdGF0ZTsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlDb25maWd1cmF0aW9uOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaUluZm87CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlTc2lkOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV3BzSW5mbzsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldwc1Jlc3VsdDsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldwc1Jlc3VsdC5TdGF0dXM7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycE1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5CYXR0ZXJ5U3RhdHM7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQub3MuSU5ldHdvcmtNYW5hZ2VtZW50U2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CitpbXBvcnQgYW5kcm9pZC5vcy5NZXNzZW5nZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5Qb3dlck1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKK2ltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5Xb3JrU291cmNlOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxydUNhY2hlOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JQmF0dGVyeVN0YXRzOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuQXN5bmNDaGFubmVsOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJvdG9jb2w7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlN0YXRlTWFjaGluZTsKKworaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5uZXQuQmFzZU5ldHdvcmtPYnNlcnZlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIud2lmaS5wMnAuV2lmaVAycFNlcnZpY2U7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKKworLyoqCisgKiBUcmFjayB0aGUgc3RhdGUgb2YgV2lmaSBjb25uZWN0aXZpdHkuIEFsbCBldmVudCBoYW5kbGluZyBpcyBkb25lIGhlcmUsCisgKiBhbmQgYWxsIGNoYW5nZXMgaW4gY29ubmVjdGl2aXR5IHN0YXRlIGFyZSBpbml0aWF0ZWQgaGVyZS4KKyAqCisgKiBXaS1GaSBub3cgc3VwcG9ydHMgdGhyZWUgbW9kZXMgb2Ygb3BlcmF0aW9uOiBDbGllbnQsIFNvZnRBcCBhbmQgcDJwCisgKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgd2Ugc3VwcG9ydCBjb25jdXJyZW50IHdpZmkgcDJwIGFuZCB3aWZpIG9wZXJhdGlvbi4KKyAqIFRoZSBXaWZpU3RhdGVNYWNoaW5lIGhhbmRsZXMgU29mdEFwIGFuZCBDbGllbnQgb3BlcmF0aW9ucyB3aGlsZSBXaWZpUDJwU2VydmljZQorICogaGFuZGxlcyBwMnAgb3BlcmF0aW9uLgorICoKKyAqIEBoaWRlCisgKi8KK3B1YmxpYyBjbGFzcyBXaWZpU3RhdGVNYWNoaW5lIGV4dGVuZHMgU3RhdGVNYWNoaW5lIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBORVRXT1JLVFlQRSA9ICJXSUZJIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERCRyA9IGZhbHNlOworCisgICAgcHJpdmF0ZSBXaWZpTW9uaXRvciBtV2lmaU1vbml0b3I7CisgICAgcHJpdmF0ZSBXaWZpTmF0aXZlIG1XaWZpTmF0aXZlOworICAgIHByaXZhdGUgV2lmaUNvbmZpZ1N0b3JlIG1XaWZpQ29uZmlnU3RvcmU7CisgICAgcHJpdmF0ZSBJTmV0d29ya01hbmFnZW1lbnRTZXJ2aWNlIG1Od1NlcnZpY2U7CisgICAgcHJpdmF0ZSBDb25uZWN0aXZpdHlNYW5hZ2VyIG1DbTsKKworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtUDJwU3VwcG9ydGVkOworICAgIHByaXZhdGUgZmluYWwgQXRvbWljQm9vbGVhbiBtUDJwQ29ubmVjdGVkID0gbmV3IEF0b21pY0Jvb2xlYW4oZmFsc2UpOworICAgIHByaXZhdGUgYm9vbGVhbiBtVGVtcG9yYXJpbHlEaXNjb25uZWN0V2lmaSA9IGZhbHNlOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1QcmltYXJ5RGV2aWNlVHlwZTsKKworICAgIC8qIFNjYW4gcmVzdWx0cyBoYW5kbGluZyAqLworICAgIHByaXZhdGUgTGlzdDxTY2FuUmVzdWx0PiBtU2NhblJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0PFNjYW5SZXN1bHQ+KCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBzY2FuUmVzdWx0UGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSgiXHQrIik7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDQU5fUkVTVUxUX0NBQ0hFX1NJWkUgPSA4MDsKKyAgICBwcml2YXRlIGZpbmFsIExydUNhY2hlPFN0cmluZywgU2NhblJlc3VsdD4gbVNjYW5SZXN1bHRDYWNoZTsKKworICAgIC8qIEJhdGNoIHNjYW4gcmVzdWx0cyAqLworICAgIHByaXZhdGUgZmluYWwgTGlzdDxCYXRjaGVkU2NhblJlc3VsdD4gbUJhdGNoZWRTY2FuUmVzdWx0cyA9CisgICAgICAgICAgICBuZXcgQXJyYXlMaXN0PEJhdGNoZWRTY2FuUmVzdWx0PigpOworICAgIHByaXZhdGUgaW50IG1CYXRjaGVkU2Nhbk93bmVyVWlkID0gVU5LTk9XTl9TQ0FOX1NPVVJDRTsKKyAgICBwcml2YXRlIGludCBtRXhwZWN0ZWRCYXRjaGVkU2NhbnMgPSAwOworICAgIHByaXZhdGUgbG9uZyBtQmF0Y2hlZFNjYW5NaW5Qb2xsVGltZSA9IDA7CisKKyAgICAvKiBDaGlwc2V0IHN1cHBvcnRzIGJhY2tncm91bmQgc2NhbiAqLworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtQmFja2dyb3VuZFNjYW5TdXBwb3J0ZWQ7CisKKyAgICBwcml2YXRlIFN0cmluZyBtSW50ZXJmYWNlTmFtZTsKKyAgICAvKiBUZXRoZXJpbmcgaW50ZXJmYWNlIGNvdWxkIGJlIHNlcGFyYXRlIGZyb20gd2xhbiBpbnRlcmZhY2UgKi8KKyAgICBwcml2YXRlIFN0cmluZyBtVGV0aGVySW50ZXJmYWNlTmFtZTsKKworICAgIHByaXZhdGUgaW50IG1MYXN0U2lnbmFsTGV2ZWwgPSAtMTsKKyAgICBwcml2YXRlIFN0cmluZyBtTGFzdEJzc2lkOworICAgIHByaXZhdGUgaW50IG1MYXN0TmV0d29ya0lkOworICAgIHByaXZhdGUgYm9vbGVhbiBtRW5hYmxlUnNzaVBvbGxpbmcgPSBmYWxzZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUVuYWJsZUJhY2tncm91bmRTY2FuID0gZmFsc2U7CisgICAgcHJpdmF0ZSBpbnQgbVJzc2lQb2xsVG9rZW4gPSAwOworICAgIHByaXZhdGUgaW50IG1SZWNvbm5lY3RDb3VudCA9IDA7CisgICAgLyogMyBvcGVyYXRpb25hbCBzdGF0ZXMgZm9yIFNUQSBvcGVyYXRpb246IENPTk5FQ1RfTU9ERSwgU0NBTl9PTkxZX01PREUsIFNDQU5fT05MWV9XSUZJX09GRl9NT0RFCisgICAgKiBJbiBDT05ORUNUX01PREUsIHRoZSBTVEEgY2FuIHNjYW4gYW5kIGNvbm5lY3QgdG8gYW4gYWNjZXNzIHBvaW50CisgICAgKiBJbiBTQ0FOX09OTFlfTU9ERSwgdGhlIFNUQSBjYW4gb25seSBzY2FuIGZvciBhY2Nlc3MgcG9pbnRzCisgICAgKiBJbiBTQ0FOX09OTFlfV0lGSV9PRkZfTU9ERSwgdGhlIFNUQSBjYW4gb25seSBzY2FuIGZvciBhY2Nlc3MgcG9pbnRzIHdpdGggd2lmaSB0b2dnbGUgYmVpbmcgb2ZmCisgICAgKi8KKyAgICBwcml2YXRlIGludCBtT3BlcmF0aW9uYWxNb2RlID0gQ09OTkVDVF9NT0RFOworICAgIHByaXZhdGUgYm9vbGVhbiBtU2NhblJlc3VsdElzUGVuZGluZyA9IGZhbHNlOworICAgIHByaXZhdGUgV29ya1NvdXJjZSBtU2NhbldvcmtTb3VyY2UgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTktOT1dOX1NDQU5fU09VUkNFID0gLTE7CisgICAgLyogVHJhY2tzIGlmIHN0YXRlIG1hY2hpbmUgaGFzIHJlY2VpdmVkIGFueSBzY3JlZW4gc3RhdGUgY2hhbmdlIGJyb2FkY2FzdCB5ZXQuCisgICAgICogV2UgY2FuIG1pc3Mgb25lIG9mIHRoZXNlIGF0IGJvb3QuCisgICAgICovCisgICAgcHJpdmF0ZSBBdG9taWNCb29sZWFuIG1TY3JlZW5Ccm9hZGNhc3RSZWNlaXZlZCA9IG5ldyBBdG9taWNCb29sZWFuKGZhbHNlKTsKKworICAgIHByaXZhdGUgYm9vbGVhbiBtQmx1ZXRvb3RoQ29ubmVjdGlvbkFjdGl2ZSA9IGZhbHNlOworCisgICAgcHJpdmF0ZSBQb3dlck1hbmFnZXIuV2FrZUxvY2sgbVN1c3BlbmRXYWtlTG9jazsKKworICAgIC8qKgorICAgICAqIEludGVydmFsIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHBvbGxpbmcgZm9yIFJTU0kKKyAgICAgKiBhbmQgbGlua3NwZWVkIGluZm9ybWF0aW9uCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBPTExfUlNTSV9JTlRFUlZBTF9NU0VDUyA9IDMwMDA7CisKKyAgICAvKioKKyAgICAgKiBEZWxheSBiZXR3ZWVuIHN1cHBsaWNhbnQgcmVzdGFydHMgdXBvbiBmYWlsdXJlIHRvIGVzdGFibGlzaCBjb25uZWN0aW9uCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNVUFBMSUNBTlRfUkVTVEFSVF9JTlRFUlZBTF9NU0VDUyA9IDUwMDA7CisKKyAgICAvKioKKyAgICAgKiBOdW1iZXIgb2YgdGltZXMgd2UgYXR0ZW1wdCB0byByZXN0YXJ0IHN1cHBsaWNhbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1VQUExJQ0FOVF9SRVNUQVJUX1RSSUVTID0gNTsKKworICAgIHByaXZhdGUgaW50IG1TdXBwbGljYW50UmVzdGFydENvdW50ID0gMDsKKyAgICAvKiBUcmFja3Mgc2VxdWVuY2UgbnVtYmVyIG9uIHN0b3AgZmFpbHVyZSBtZXNzYWdlICovCisgICAgcHJpdmF0ZSBpbnQgbVN1cHBsaWNhbnRTdG9wRmFpbHVyZVRva2VuID0gMDsKKworICAgIC8qKgorICAgICAqIFRldGhlciBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIHRpbWUgb3V0CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRFVEhFUl9OT1RJRklDQVRJT05fVElNRV9PVVRfTVNFQ1MgPSA1MDAwOworCisgICAgLyogVHJhY2tzIHNlcXVlbmNlIG51bWJlciBvbiBhIHRldGhlciBub3RpZmljYXRpb24gdGltZSBvdXQgKi8KKyAgICBwcml2YXRlIGludCBtVGV0aGVyVG9rZW4gPSAwOworCisgICAgLyoqCisgICAgICogRHJpdmVyIHN0YXJ0IHRpbWUgb3V0LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEUklWRVJfU1RBUlRfVElNRV9PVVRfTVNFQ1MgPSAxMDAwMDsKKworICAgIC8qIFRyYWNrcyBzZXF1ZW5jZSBudW1iZXIgb24gYSBkcml2ZXIgdGltZSBvdXQgKi8KKyAgICBwcml2YXRlIGludCBtRHJpdmVyU3RhcnRUb2tlbiA9IDA7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbGluayBwcm9wZXJ0aWVzIG9mIHRoZSB3aWZpIGludGVyZmFjZS4KKyAgICAgKiBEbyBub3QgbW9kaWZ5IHRoaXMgZGlyZWN0bHk7IHVzZSB1cGRhdGVMaW5rUHJvcGVydGllcyBpbnN0ZWFkLgorICAgICAqLworICAgIHByaXZhdGUgTGlua1Byb3BlcnRpZXMgbUxpbmtQcm9wZXJ0aWVzOworCisgICAgLyoqCisgICAgICogU3Vic2V0IG9mIGxpbmsgcHJvcGVydGllcyBjb21pbmcgZnJvbSBuZXRsaW5rLgorICAgICAqIEN1cnJlbnRseSBpbmNsdWRlcyBJUHY0IGFuZCBJUHY2IGFkZHJlc3Nlcy4gSW4gdGhlIGZ1dHVyZSB3aWxsIGFsc28gaW5jbHVkZSBJUHY2IEROUyBzZXJ2ZXJzCisgICAgICogYW5kIGRvbWFpbnMgb2J0YWluZWQgZnJvbSByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMgKFJGQyA2MTA2KS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIExpbmtQcm9wZXJ0aWVzIG1OZXRsaW5rTGlua1Byb3BlcnRpZXM7CisKKyAgICAvKiBUcmFja3Mgc2VxdWVuY2UgbnVtYmVyIG9uIGEgcGVyaW9kaWMgc2NhbiBtZXNzYWdlICovCisgICAgcHJpdmF0ZSBpbnQgbVBlcmlvZGljU2NhblRva2VuID0gMDsKKworICAgIC8vIFdha2Vsb2NrIGhlbGQgZHVyaW5nIHdpZmkgc3RhcnQvc3RvcCBhbmQgZHJpdmVyIGxvYWQvdW5sb2FkCisgICAgcHJpdmF0ZSBQb3dlck1hbmFnZXIuV2FrZUxvY2sgbVdha2VMb2NrOworCisgICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OworCisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbURoY3BSZXN1bHRzTG9jayA9IG5ldyBPYmplY3QoKTsKKyAgICBwcml2YXRlIERoY3BSZXN1bHRzIG1EaGNwUmVzdWx0czsKKyAgICBwcml2YXRlIFdpZmlJbmZvIG1XaWZpSW5mbzsKKyAgICBwcml2YXRlIE5ldHdvcmtJbmZvIG1OZXR3b3JrSW5mbzsKKyAgICBwcml2YXRlIFN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIgbVN1cHBsaWNhbnRTdGF0ZVRyYWNrZXI7CisgICAgcHJpdmF0ZSBEaGNwU3RhdGVNYWNoaW5lIG1EaGNwU3RhdGVNYWNoaW5lOworICAgIHByaXZhdGUgYm9vbGVhbiBtRGhjcEFjdGl2ZSA9IGZhbHNlOworCisgICAgcHJpdmF0ZSBjbGFzcyBJbnRlcmZhY2VPYnNlcnZlciBleHRlbmRzIEJhc2VOZXR3b3JrT2JzZXJ2ZXIgeworICAgICAgICBwcml2YXRlIFdpZmlTdGF0ZU1hY2hpbmUgbVdpZmlTdGF0ZU1hY2hpbmU7CisKKyAgICAgICAgSW50ZXJmYWNlT2JzZXJ2ZXIoV2lmaVN0YXRlTWFjaGluZSB3aWZpU3RhdGVNYWNoaW5lKSB7CisgICAgICAgICAgICBzdXBlcigpOworICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUgPSB3aWZpU3RhdGVNYWNoaW5lOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIG1heWJlTG9nKFN0cmluZyBvcGVyYXRpb24sIFN0cmluZyBpZmFjZSwgTGlua0FkZHJlc3MgYWRkcmVzcykgeworICAgICAgICAgICAgaWYgKERCRykgeworICAgICAgICAgICAgICAgIGxvZyhvcGVyYXRpb24gKyAiOiAiICsgYWRkcmVzcyArICIgb24gIiArIGlmYWNlICsKKyAgICAgICAgICAgICAgICAgICAgIiBmbGFncyAiICsgYWRkcmVzcy5nZXRGbGFncygpICsgIiBzY29wZSAiICsgYWRkcmVzcy5nZXRTY29wZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBhZGRyZXNzVXBkYXRlZChTdHJpbmcgaWZhY2UsIExpbmtBZGRyZXNzIGFkZHJlc3MpIHsKKyAgICAgICAgICAgIGlmIChtV2lmaVN0YXRlTWFjaGluZS5tSW50ZXJmYWNlTmFtZS5lcXVhbHMoaWZhY2UpKSB7CisgICAgICAgICAgICAgICAgbWF5YmVMb2coImFkZHJlc3NVcGRhdGVkIiwgaWZhY2UsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKENNRF9JUF9BRERSRVNTX1VQREFURUQsIGFkZHJlc3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGFkZHJlc3NSZW1vdmVkKFN0cmluZyBpZmFjZSwgTGlua0FkZHJlc3MgYWRkcmVzcykgeworICAgICAgICAgICAgaWYgKG1XaWZpU3RhdGVNYWNoaW5lLm1JbnRlcmZhY2VOYW1lLmVxdWFscyhpZmFjZSkpIHsKKyAgICAgICAgICAgICAgICBtYXliZUxvZygiYWRkcmVzc1JlbW92ZWQiLCBpZmFjZSwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoQ01EX0lQX0FERFJFU1NfUkVNT1ZFRCwgYWRkcmVzcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIEludGVyZmFjZU9ic2VydmVyIG1JbnRlcmZhY2VPYnNlcnZlcjsKKworICAgIHByaXZhdGUgQWxhcm1NYW5hZ2VyIG1BbGFybU1hbmFnZXI7CisgICAgcHJpdmF0ZSBQZW5kaW5nSW50ZW50IG1TY2FuSW50ZW50OworICAgIHByaXZhdGUgUGVuZGluZ0ludGVudCBtRHJpdmVyU3RvcEludGVudDsKKyAgICBwcml2YXRlIFBlbmRpbmdJbnRlbnQgbUJhdGNoZWRTY2FuSW50ZXJ2YWxJbnRlbnQ7CisKKyAgICAvKiBUcmFja3MgY3VycmVudCBmcmVxdWVuY3kgbW9kZSAqLworICAgIHByaXZhdGUgQXRvbWljSW50ZWdlciBtRnJlcXVlbmN5QmFuZCA9IG5ldyBBdG9taWNJbnRlZ2VyKFdpZmlNYW5hZ2VyLldJRklfRlJFUVVFTkNZX0JBTkRfQVVUTyk7CisKKyAgICAvKiBUcmFja3MgaWYgd2UgYXJlIGZpbHRlcmluZyBNdWx0aWNhc3QgdjQgcGFja2V0cy4gRGVmYXVsdCBpcyB0byBmaWx0ZXIuICovCisgICAgcHJpdmF0ZSBBdG9taWNCb29sZWFuIG1GaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMgPSBuZXcgQXRvbWljQm9vbGVhbih0cnVlKTsKKworICAgIC8vIENoYW5uZWwgZm9yIHNlbmRpbmcgcmVwbGllcy4KKyAgICBwcml2YXRlIEFzeW5jQ2hhbm5lbCBtUmVwbHlDaGFubmVsID0gbmV3IEFzeW5jQ2hhbm5lbCgpOworCisgICAgcHJpdmF0ZSBXaWZpUDJwTWFuYWdlciBtV2lmaVAycE1hbmFnZXI7CisgICAgLy9Vc2VkIHRvIGluaXRpYXRlIGEgY29ubmVjdGlvbiB3aXRoIFdpZmlQMnBTZXJ2aWNlCisgICAgcHJpdmF0ZSBBc3luY0NoYW5uZWwgbVdpZmlQMnBDaGFubmVsOworICAgIHByaXZhdGUgQXN5bmNDaGFubmVsIG1XaWZpQXBDb25maWdDaGFubmVsOworCisgICAgLyogVGhlIGJhc2UgZm9yIHdpZmkgbWVzc2FnZSB0eXBlcyAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQkFTRSA9IFByb3RvY29sLkJBU0VfV0lGSTsKKyAgICAvKiBTdGFydCB0aGUgc3VwcGxpY2FudCAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUQVJUX1NVUFBMSUNBTlQgICAgICAgICAgICAgICAgID0gQkFTRSArIDExOworICAgIC8qIFN0b3AgdGhlIHN1cHBsaWNhbnQgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TVE9QX1NVUFBMSUNBTlQgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAxMjsKKyAgICAvKiBTdGFydCB0aGUgZHJpdmVyICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RBUlRfRFJJVkVSICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMTM7CisgICAgLyogU3RvcCB0aGUgZHJpdmVyICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RPUF9EUklWRVIgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMTQ7CisgICAgLyogSW5kaWNhdGVzIFN0YXRpYyBJUCBzdWNjZWVkZWQgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TVEFUSUNfSVBfU1VDQ0VTUyAgICAgICAgICAgICAgICA9IEJBU0UgKyAxNTsKKyAgICAvKiBJbmRpY2F0ZXMgU3RhdGljIElQIGZhaWxlZCAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUQVRJQ19JUF9GQUlMVVJFICAgICAgICAgICAgICAgID0gQkFTRSArIDE2OworICAgIC8qIEluZGljYXRlcyBzdXBwbGljYW50IHN0b3AgZmFpbGVkICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RPUF9TVVBQTElDQU5UX0ZBSUxFRCAgICAgICAgICAgPSBCQVNFICsgMTc7CisgICAgLyogRGVsYXllZCBzdG9wIHRvIGF2b2lkIHNodXR0aW5nIGRvd24gZHJpdmVyIHRvbyBxdWljayovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfREVMQVlFRF9TVE9QX0RSSVZFUiAgICAgICAgICAgICAgPSBCQVNFICsgMTg7CisgICAgLyogQSBkZWxheWVkIG1lc3NhZ2Ugc2VudCB0byBzdGFydCBkcml2ZXIgd2hlbiBpdCBmYWlsIHRvIGNvbWUgdXAgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IENNRF9EUklWRVJfU1RBUlRfVElNRURfT1VUICAgICAgICAgICA9IEJBU0UgKyAxOTsKKworICAgIC8qIFN0YXJ0IHRoZSBzb2Z0IGFjY2VzcyBwb2ludCAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUQVJUX0FQICAgICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDIxOworICAgIC8qIEluZGljYXRlcyBzb2Z0IGFwIHN0YXJ0IHN1Y2NlZWRlZCAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUQVJUX0FQX1NVQ0NFU1MgICAgICAgICAgICAgICAgID0gQkFTRSArIDIyOworICAgIC8qIEluZGljYXRlcyBzb2Z0IGFwIHN0YXJ0IGZhaWxlZCAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUQVJUX0FQX0ZBSUxVUkUgICAgICAgICAgICAgICAgID0gQkFTRSArIDIzOworICAgIC8qIFN0b3AgdGhlIHNvZnQgYWNjZXNzIHBvaW50ICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RPUF9BUCAgICAgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMjQ7CisgICAgLyogU2V0IHRoZSBzb2Z0IGFjY2VzcyBwb2ludCBjb25maWd1cmF0aW9uICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfU0VUX0FQX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMjU7CisgICAgLyogU29mdCBhY2Nlc3MgcG9pbnQgY29uZmlndXJhdGlvbiBzZXQgY29tcGxldGVkICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfU0VUX0FQX0NPTkZJR19DT01QTEVURUQgICAgICAgICAgPSBCQVNFICsgMjY7CisgICAgLyogUmVxdWVzdCB0aGUgc29mdCBhY2Nlc3MgcG9pbnQgY29uZmlndXJhdGlvbiAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1JFUVVFU1RfQVBfQ09ORklHICAgICAgICAgICAgICAgID0gQkFTRSArIDI3OworICAgIC8qIFJlc3BvbnNlIHRvIGFjY2VzcyBwb2ludCBjb25maWd1cmF0aW9uIHJlcXVlc3QgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IENNRF9SRVNQT05TRV9BUF9DT05GSUcgICAgICAgICAgICAgICA9IEJBU0UgKyAyODsKKyAgICAvKiBJbnZva2VkIHdoZW4gZ2V0dGluZyBhIHRldGhlciBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfVEVUSEVSX1NUQVRFX0NIQU5HRSAgICAgICAgICAgICAgPSBCQVNFICsgMjk7CisgICAgLyogQSBkZWxheWVkIG1lc3NhZ2Ugc2VudCB0byBpbmRpY2F0ZSB0ZXRoZXIgc3RhdGUgY2hhbmdlIGZhaWxlZCB0byBhcnJpdmUgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IENNRF9URVRIRVJfTk9USUZJQ0FUSU9OX1RJTUVEX09VVCAgICA9IEJBU0UgKyAzMDsKKworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0JMVUVUT09USF9BREFQVEVSX1NUQVRFX0NIQU5HRSAgID0gQkFTRSArIDMxOworCisgICAgLyogU3VwcGxpY2FudCBjb21tYW5kcyAqLworICAgIC8qIElzIHN1cHBsaWNhbnQgYWxpdmUgPyAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1BJTkdfU1VQUExJQ0FOVCAgICAgICAgICAgICAgICAgID0gQkFTRSArIDUxOworICAgIC8qIEFkZC91cGRhdGUgYSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IENNRF9BRERfT1JfVVBEQVRFX05FVFdPUksgICAgICAgICAgICA9IEJBU0UgKyA1MjsKKyAgICAvKiBEZWxldGUgYSBuZXR3b3JrICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfUkVNT1ZFX05FVFdPUksgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgNTM7CisgICAgLyogRW5hYmxlIGEgbmV0d29yay4gVGhlIGRldmljZSB3aWxsIGF0dGVtcHQgYSBjb25uZWN0aW9uIHRvIHRoZSBnaXZlbiBuZXR3b3JrLiAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0VOQUJMRV9ORVRXT1JLICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDU0OworICAgIC8qIEVuYWJsZSBhbGwgbmV0d29ya3MgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IENNRF9FTkFCTEVfQUxMX05FVFdPUktTICAgICAgICAgICAgICA9IEJBU0UgKyA1NTsKKyAgICAvKiBCbGFja2xpc3QgbmV0d29yay4gRGUtcHJpb3JpdGl6ZXMgdGhlIGdpdmVuIEJTU0lEIGZvciBjb25uZWN0aW9uLiAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0JMQUNLTElTVF9ORVRXT1JLICAgICAgICAgICAgICAgID0gQkFTRSArIDU2OworICAgIC8qIENsZWFyIHRoZSBibGFja2xpc3QgbmV0d29yayBsaXN0ICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfQ0xFQVJfQkxBQ0tMSVNUICAgICAgICAgICAgICAgICAgPSBCQVNFICsgNTc7CisgICAgLyogU2F2ZSBjb25maWd1cmF0aW9uICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfU0FWRV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgNTg7CisgICAgLyogR2V0IGNvbmZpZ3VyZWQgbmV0d29ya3MqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0dFVF9DT05GSUdVUkVEX05FVFdPUktTICAgICAgICAgID0gQkFTRSArIDU5OworCisgICAgLyogU3VwcGxpY2FudCBjb21tYW5kcyBhZnRlciBkcml2ZXIgc3RhcnQqLworICAgIC8qIEluaXRpYXRlIGEgc2NhbiAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUQVJUX1NDQU4gICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDcxOworICAgIC8qIFNldCBvcGVyYXRpb25hbCBtb2RlLiBDT05ORUNULCBTQ0FOIE9OTFksIFNDQU5fT05MWSB3aXRoIFdpLUZpIG9mZiBtb2RlICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfU0VUX09QRVJBVElPTkFMX01PREUgICAgICAgICAgICAgPSBCQVNFICsgNzI7CisgICAgLyogRGlzY29ubmVjdCBmcm9tIGEgbmV0d29yayAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0RJU0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDczOworICAgIC8qIFJlY29ubmVjdCB0byBhIG5ldHdvcmsgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IENNRF9SRUNPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA3NDsKKyAgICAvKiBSZWFzc29jaWF0ZSB0byBhIG5ldHdvcmsgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IENNRF9SRUFTU09DSUFURSAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA3NTsKKyAgICAvKiBDb250cm9scyBzdXNwZW5kIG1vZGUgb3B0aW1pemF0aW9ucworICAgICAqCisgICAgICogV2hlbiBoaWdoIHBlcmYgbW9kZSBpcyBlbmFibGVkLCBzdXNwZW5kIG1vZGUgb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQKKyAgICAgKgorICAgICAqIFdoZW4gaGlnaCBwZXJmIG1vZGUgaXMgZGlzYWJsZWQsIHN1c3BlbmQgbW9kZSBvcHRpbWl6YXRpb25zIGFyZSBlbmFibGVkCisgICAgICoKKyAgICAgKiBTdXNwZW5kIG1vZGUgb3B0aW1pemF0aW9ucyBpbmNsdWRlOgorICAgICAqIC0gcGFja2V0IGZpbHRlcmluZworICAgICAqIC0gdHVybiBvZmYgcm9hbWluZworICAgICAqIC0gRFRJTSB3YWtlIHVwIHNldHRpbmdzCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfU0VUX0hJR0hfUEVSRl9NT0RFICAgICAgICAgICAgICAgPSBCQVNFICsgNzc7CisgICAgLyogU2V0IHRoZSBjb3VudHJ5IGNvZGUgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TRVRfQ09VTlRSWV9DT0RFICAgICAgICAgICAgICAgICA9IEJBU0UgKyA4MDsKKyAgICAvKiBFbmFibGVzIFJTU0kgcG9sbCAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0VOQUJMRV9SU1NJX1BPTEwgICAgICAgICAgICAgICAgID0gQkFTRSArIDgyOworICAgIC8qIFJTU0kgcG9sbCAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1JTU0lfUE9MTCAgICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDgzOworICAgIC8qIFNldCB1cCBwYWNrZXQgZmlsdGVyaW5nICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RBUlRfUEFDS0VUX0ZJTFRFUklORyAgICAgICAgICAgPSBCQVNFICsgODQ7CisgICAgLyogQ2xlYXIgcGFja2V0IGZpbHRlciAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORyAgICAgICAgICAgID0gQkFTRSArIDg1OworICAgIC8qIEVuYWJsZSBzdXNwZW5kIG1vZGUgb3B0aW1pemF0aW9ucyBpbiB0aGUgZHJpdmVyICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfU0VUX1NVU1BFTkRfT1BUX0VOQUJMRUQgICAgICAgICAgPSBCQVNFICsgODY7CisgICAgLyogV2hlbiB0aGVyZSBhcmUgbm8gc2F2ZWQgbmV0d29ya3MsIHdlIGRvIGEgcGVyaW9kaWMgc2NhbiB0byBub3RpZnkgdXNlciBvZgorICAgICAqIGFuIG9wZW4gbmV0d29yayAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX05PX05FVFdPUktTX1BFUklPRElDX1NDQU4gICAgICAgID0gQkFTRSArIDg4OworCisgICAgLyogYXJnMSB2YWx1ZXMgdG8gQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORyBhbmQgQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkcgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IE1VTFRJQ0FTVF9WNiAgPSAxOworICAgIHN0YXRpYyBmaW5hbCBpbnQgTVVMVElDQVNUX1Y0ICA9IDA7CisKKyAgIC8qIFNldCB0aGUgZnJlcXVlbmN5IGJhbmQgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TRVRfRlJFUVVFTkNZX0JBTkQgICAgICAgICAgICAgICA9IEJBU0UgKyA5MDsKKyAgICAvKiBFbmFibGUgYmFja2dyb3VuZCBzY2FuIGZvciBjb25maWd1cmVkIG5ldHdvcmtzICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfRU5BQkxFX0JBQ0tHUk9VTkRfU0NBTiAgICAgICAgICAgPSBCQVNFICsgOTE7CisgICAgLyogRW5hYmxlIFRETFMgb24gYSBzcGVjaWZpYyBNQUMgYWRkcmVzcyAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0VOQUJMRV9URExTICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDkyOworCisgICAgLyogQ29tbWFuZHMgZnJvbS90byB0aGUgU3VwcGxpY2FudFN0YXRlVHJhY2tlciAqLworICAgIC8qIFJlc2V0IHRoZSBzdXBwbGljYW50IHN0YXRlIHRyYWNrZXIgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IENNRF9SRVNFVF9TVVBQTElDQU5UX1NUQVRFICAgICAgICAgICA9IEJBU0UgKyAxMTE7CisKKyAgICAvKiBQMnAgY29tbWFuZHMgKi8KKyAgICAvKiBXZSBhcmUgb2sgd2l0aCBubyByZXNwb25zZSBoZXJlIHNpbmNlIHdlIHdvbnQgZG8gbXVjaCB3aXRoIGl0IGFueXdheSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENNRF9FTkFCTEVfUDJQICAgICAgICAgICAgICAgID0gQkFTRSArIDEzMTsKKyAgICAvKiBJbiBvcmRlciB0byBzaHV0IGRvd24gc3VwcGxpY2FudCBjbGVhbmx5LCB3ZSB3YWl0IHRpbGwgcDJwIGhhcworICAgICAqIGJlZW4gZGlzYWJsZWQgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTURfRElTQUJMRV9QMlBfUkVRICAgICAgICAgICA9IEJBU0UgKyAxMzI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0RJU0FCTEVfUDJQX1JTUCAgICAgICAgICAgPSBCQVNFICsgMTMzOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0JPT1RfQ09NUExFVEVEICAgICAgICAgICAgPSBCQVNFICsgMTM0OworCisgICAgLyogY2hhbmdlIHRoZSBiYXRjaCBzY2FuIHNldHRpbmdzLgorICAgICAqIGFyZzEgPSByZXNwb25zaWJsZSBVSUQKKyAgICAgKiBhcmcyID0gY3NwaCAoY2hhbm5lbCBzY2FucyBwZXIgaG91cikKKyAgICAgKiBvYmogPSBidW5kbGUgd2l0aCB0aGUgbmV3IHNldHRpbmdzIGFuZCB0aGUgb3B0aW9uYWwgd29ya3NvdXJjZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENNRF9TRVRfQkFUQ0hFRF9TQ0FOICAgICAgICAgID0gQkFTRSArIDEzNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTURfU1RBUlRfTkVYVF9CQVRDSEVEX1NDQU4gICA9IEJBU0UgKyAxMzY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1BPTExfQkFUQ0hFRF9TQ0FOICAgICAgICAgPSBCQVNFICsgMTM3OworCisgICAgLyogTGluayBjb25maWd1cmF0aW9uIChJUCBhZGRyZXNzLCBETlMsIC4uLikgY2hhbmdlcyAqLworICAgIC8qIEFuIG5ldyBJUCBhZGRyZXNzIHdhcyBhZGRlZCB0byBvdXIgaW50ZXJmYWNlLCBvciBhbiBleGlzdGluZyBJUCBhZGRyZXNzIHdhcyB1cGRhdGVkICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfSVBfQUREUkVTU19VUERBVEVEICAgICAgICAgICAgICAgPSBCQVNFICsgMTQwOworICAgIC8qIEFuIElQIGFkZHJlc3Mgd2FzIHJlbW92ZWQgZnJvbSBvdXIgaW50ZXJmYWNlICovCisgICAgc3RhdGljIGZpbmFsIGludCBDTURfSVBfQUREUkVTU19SRU1PVkVEICAgICAgICAgICAgICAgPSBCQVNFICsgMTQxOworICAgIC8qIFJlbG9hZCBhbGwgbmV0d29ya3MgYW5kIHJlY29ubmVjdCAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1JFTE9BRF9UTFNfQU5EX1JFQ09OTkVDVCAgICAgICAgID0gQkFTRSArIDE0MjsKKworICAgIC8qIFdpZmkgc3RhdGUgbWFjaGluZSBtb2RlcyBvZiBvcGVyYXRpb24gKi8KKyAgICAvKiBDT05ORUNUX01PREUgLSBjb25uZWN0IHRvIGFueSAna25vd24nIEFQIHdoZW4gaXQgYmVjb21lcyBhdmFpbGFibGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUX01PREUgICAgICAgICAgICAgICAgICAgPSAxOworICAgIC8qIFNDQU5fT05MWV9NT0RFIC0gZG9uJ3QgY29ubmVjdCB0byBhbnkgQVBzOyBzY2FuLCBidXQgb25seSB3aGlsZSBhcHBzIGhvbGQgbG9jayAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNDQU5fT05MWV9NT0RFICAgICAgICAgICAgICAgICA9IDI7CisgICAgLyogU0NBTl9PTkxZX1dJVEhfV0lGSV9PRkYgLSBzY2FuLCBidXQgZG9uJ3QgY29ubmVjdCB0byBhbnkgQVBzICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0NBTl9PTkxZX1dJVEhfV0lGSV9PRkZfTU9ERSAgID0gMzsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVUNDRVNTID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRkFJTFVSRSA9IC0xOworCisgICAgLyoqCisgICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHdlIHdpbGwgcmV0cnkgYSBjb25uZWN0aW9uIHRvIGFuIGFjY2VzcyBwb2ludAorICAgICAqIGZvciB3aGljaCB3ZSBoYXZlIGZhaWxlZCBpbiBhY3F1aXJpbmcgYW4gSVAgYWRkcmVzcyBmcm9tIERIQ1AuIEEgdmFsdWUgb2YKKyAgICAgKiBOIG1lYW5zIHRoYXQgd2Ugd2lsbCBtYWtlIE4rMSBjb25uZWN0aW9uIGF0dGVtcHRzIGluIGFsbC4KKyAgICAgKiA8cD4KKyAgICAgKiBTZWUge0BsaW5rIFNldHRpbmdzLlNlY3VyZSNXSUZJX01BWF9ESENQX1JFVFJZX0NPVU5UfS4gVGhpcyBpcyB0aGUgZGVmYXVsdAorICAgICAqIHZhbHVlIGlmIGEgU2V0dGluZ3MgdmFsdWUgaXMgbm90IHByZXNlbnQuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfTUFYX0RIQ1BfUkVUUklFUyA9IDk7CisKKyAgICAvKiBUcmFja3MgaWYgc3VzcGVuZCBvcHRpbWl6YXRpb25zIG5lZWQgdG8gYmUgZGlzYWJsZWQgYnkgREhDUCwKKyAgICAgKiBzY3JlZW4gb3IgZHVlIHRvIGhpZ2ggcGVyZiBtb2RlLgorICAgICAqIFdoZW4gYW55IG9mIHRoZW0gbmVlZHMgdG8gZGlzYWJsZSBpdCwgd2Uga2VlcCB0aGUgc3VzcGVuZCBvcHRpbWl6YXRpb25zCisgICAgICogZGlzYWJsZWQKKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBtU3VzcGVuZE9wdE5lZWRzRGlzYWJsZWQgPSAwOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNVU1BFTkRfRFVFX1RPX0RIQ1AgICAgICAgPSAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVVNQRU5EX0RVRV9UT19ISUdIX1BFUkYgID0gMTw8MTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1VTUEVORF9EVUVfVE9fU0NSRUVOICAgICA9IDE8PDI7CisKKyAgICAvKiBUcmFja3MgaWYgdXNlciBoYXMgZW5hYmxlZCBzdXNwZW5kIG9wdGltaXphdGlvbnMgdGhyb3VnaCBzZXR0aW5ncyAqLworICAgIHByaXZhdGUgQXRvbWljQm9vbGVhbiBtVXNlcldhbnRzU3VzcGVuZE9wdCA9IG5ldyBBdG9taWNCb29sZWFuKHRydWUpOworCisgICAgLyoqCisgICAgICogRGVmYXVsdCBmcmFtZXdvcmsgc2NhbiBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMuIFRoaXMgaXMgdXNlZCBpbiB0aGUgc2NlbmFyaW8gaW4gd2hpY2gKKyAgICAgKiB3aWZpIGNoaXBzZXQgZG9lcyBub3Qgc3VwcG9ydCBiYWNrZ3JvdW5kIHNjYW5uaW5nIHRvIHNldCB1cCBhCisgICAgICogcGVyaW9kaWMgd2FrZSB1cCBzY2FuIHNvIHRoYXQgdGhlIGRldmljZSBjYW4gY29ubmVjdCB0byBhIG5ldyBhY2Nlc3MKKyAgICAgKiBwb2ludCBvbiB0aGUgbW92ZS4ge0BsaW5rIFNldHRpbmdzLkdsb2JhbCNXSUZJX0ZSQU1FV09SS19TQ0FOX0lOVEVSVkFMX01TfSBjYW4KKyAgICAgKiBvdmVycmlkZSB0aGlzLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgaW50IG1EZWZhdWx0RnJhbWV3b3JrU2NhbkludGVydmFsTXM7CisKKyAgICAvKioKKyAgICAgKiBTdXBwbGljYW50IHNjYW4gaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLgorICAgICAqIENvbWVzIGZyb20ge0BsaW5rIFNldHRpbmdzLkdsb2JhbCNXSUZJX1NVUFBMSUNBTlRfU0NBTl9JTlRFUlZBTF9NU30gb3IKKyAgICAgKiBmcm9tIHRoZSBkZWZhdWx0IGNvbmZpZyBpZiB0aGUgc2V0dGluZyBpcyBub3Qgc2V0CisgICAgICovCisgICAgcHJpdmF0ZSBsb25nIG1TdXBwbGljYW50U2NhbkludGVydmFsTXM7CisKKyAgICAvKioKKyAgICAgKiBNaW5pbXVtIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBlbmFibGluZyBhbGwgbmV0d29ya3MuCisgICAgICogQSBkZXZpY2UgY2FuIGVuZCB1cCByZXBlYXRlZGx5IGNvbm5lY3RpbmcgdG8gYSBiYWQgbmV0d29yayBvbiBzY3JlZW4gb24vb2ZmIHRvZ2dsZQorICAgICAqIGR1ZSB0byBlbmFibGluZyBldmVyeSB0aW1lLiBXZSBhZGQgYSB0aHJlc2hvbGQgdG8gYXZvaWQgdGhpcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUlOX0lOVEVSVkFMX0VOQUJMRV9BTExfTkVUV09SS1NfTVMgPSAxMCAqIDYwICogMTAwMDsgLyogMTAgbWludXRlcyAqLworICAgIHByaXZhdGUgbG9uZyBtTGFzdEVuYWJsZUFsbE5ldHdvcmtzVGltZTsKKworICAgIC8qKgorICAgICAqIFN0YXJ0aW5nIGFuZCBzaHV0dGluZyBkb3duIGRyaXZlciB0b28gcXVpY2sgY2F1c2VzIHByb2JsZW1zIGxlYWRpbmcgdG8gZHJpdmVyCisgICAgICogYmVpbmcgaW4gYSBiYWQgc3RhdGUuIERlbGF5IGRyaXZlciBzdG9wLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgaW50IG1Ecml2ZXJTdG9wRGVsYXlNczsKKyAgICBwcml2YXRlIGludCBtRGVsYXllZFN0b3BDb3VudGVyOworICAgIHByaXZhdGUgYm9vbGVhbiBtSW5EZWxheWVkU3RvcCA9IGZhbHNlOworCisgICAgLy8gc29tZXRpbWVzIHRlbGVwaG9ueSBnaXZlcyB1cyB0aGlzIGRhdGEgYmVmb3JlIGJvb3QgaXMgY29tcGxldGUgYW5kIHdlIGNhbid0IHN0b3JlIGl0CisgICAgLy8gdW50aWwgYWZ0ZXIsIHNvIHRoZSB3cml0ZSBpcyBkZWZlcnJlZAorICAgIHByaXZhdGUgdm9sYXRpbGUgU3RyaW5nIG1QZXJzaXN0ZWRDb3VudHJ5Q29kZTsKKworICAgIC8vIFN1cHBsaWNhbnQgZG9lc24ndCBsaWtlIHNldHRpbmcgdGhlIHNhbWUgY291bnRyeSBjb2RlIG11bHRpcGxlIHRpbWVzIChpdCBtYXkgZHJvcAorICAgIC8vIGN1cnJlbnRseSBjb25uZWN0ZWQgbmV0d29yayksIHNvIHdlIHNhdmUgdGhlIGNvdW50cnkgY29kZSBoZXJlIHRvIGF2b2lkIHJlZHVuZGVuY3kKKyAgICBwcml2YXRlIFN0cmluZyBtTGFzdFNldENvdW50cnlDb2RlOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1JTl9SU1NJID0gLTIwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1JTU0kgPSAyNTY7CisKKyAgICAvKiBEZWZhdWx0IHBhcmVudCBzdGF0ZSAqLworICAgIHByaXZhdGUgU3RhdGUgbURlZmF1bHRTdGF0ZSA9IG5ldyBEZWZhdWx0U3RhdGUoKTsKKyAgICAvKiBUZW1wb3JhcnkgaW5pdGlhbCBzdGF0ZSAqLworICAgIHByaXZhdGUgU3RhdGUgbUluaXRpYWxTdGF0ZSA9IG5ldyBJbml0aWFsU3RhdGUoKTsKKyAgICAvKiBEcml2ZXIgbG9hZGVkLCB3YWl0aW5nIGZvciBzdXBwbGljYW50IHRvIHN0YXJ0ICovCisgICAgcHJpdmF0ZSBTdGF0ZSBtU3VwcGxpY2FudFN0YXJ0aW5nU3RhdGUgPSBuZXcgU3VwcGxpY2FudFN0YXJ0aW5nU3RhdGUoKTsKKyAgICAvKiBEcml2ZXIgbG9hZGVkIGFuZCBzdXBwbGljYW50IHJlYWR5ICovCisgICAgcHJpdmF0ZSBTdGF0ZSBtU3VwcGxpY2FudFN0YXJ0ZWRTdGF0ZSA9IG5ldyBTdXBwbGljYW50U3RhcnRlZFN0YXRlKCk7CisgICAgLyogV2FpdGluZyBmb3Igc3VwcGxpY2FudCB0byBzdG9wIGFuZCBtb25pdG9yIHRvIGV4aXQgKi8KKyAgICBwcml2YXRlIFN0YXRlIG1TdXBwbGljYW50U3RvcHBpbmdTdGF0ZSA9IG5ldyBTdXBwbGljYW50U3RvcHBpbmdTdGF0ZSgpOworICAgIC8qIERyaXZlciBzdGFydCBpc3N1ZWQsIHdhaXRpbmcgZm9yIGNvbXBsZXRlZCBldmVudCAqLworICAgIHByaXZhdGUgU3RhdGUgbURyaXZlclN0YXJ0aW5nU3RhdGUgPSBuZXcgRHJpdmVyU3RhcnRpbmdTdGF0ZSgpOworICAgIC8qIERyaXZlciBzdGFydGVkICovCisgICAgcHJpdmF0ZSBTdGF0ZSBtRHJpdmVyU3RhcnRlZFN0YXRlID0gbmV3IERyaXZlclN0YXJ0ZWRTdGF0ZSgpOworICAgIC8qIFdhaXQgdW50aWwgcDJwIGlzIGRpc2FibGVkCisgICAgICogVGhpcyBpcyBhIHNwZWNpYWwgc3RhdGUgd2hpY2ggaXMgZW50ZXJlZCByaWdodCBhZnRlciB3ZSBleGl0IG91dCBvZiBEcml2ZXJTdGFydGVkU3RhdGUKKyAgICAgKiBiZWZvcmUgdHJhbnNpdGlvbmluZyB0byBhbm90aGVyIHN0YXRlLgorICAgICAqLworICAgIHByaXZhdGUgU3RhdGUgbVdhaXRGb3JQMnBEaXNhYmxlU3RhdGUgPSBuZXcgV2FpdEZvclAycERpc2FibGVTdGF0ZSgpOworICAgIC8qIERyaXZlciBzdG9wcGluZyAqLworICAgIHByaXZhdGUgU3RhdGUgbURyaXZlclN0b3BwaW5nU3RhdGUgPSBuZXcgRHJpdmVyU3RvcHBpbmdTdGF0ZSgpOworICAgIC8qIERyaXZlciBzdG9wcGVkICovCisgICAgcHJpdmF0ZSBTdGF0ZSBtRHJpdmVyU3RvcHBlZFN0YXRlID0gbmV3IERyaXZlclN0b3BwZWRTdGF0ZSgpOworICAgIC8qIFNjYW4gZm9yIG5ldHdvcmtzLCBubyBjb25uZWN0aW9uIHdpbGwgYmUgZXN0YWJsaXNoZWQgKi8KKyAgICBwcml2YXRlIFN0YXRlIG1TY2FuTW9kZVN0YXRlID0gbmV3IFNjYW5Nb2RlU3RhdGUoKTsKKyAgICAvKiBDb25uZWN0aW5nIHRvIGFuIGFjY2VzcyBwb2ludCAqLworICAgIHByaXZhdGUgU3RhdGUgbUNvbm5lY3RNb2RlU3RhdGUgPSBuZXcgQ29ubmVjdE1vZGVTdGF0ZSgpOworICAgIC8qIENvbm5lY3RlZCBhdCA4MDIuMTEgKEwyKSBsZXZlbCAqLworICAgIHByaXZhdGUgU3RhdGUgbUwyQ29ubmVjdGVkU3RhdGUgPSBuZXcgTDJDb25uZWN0ZWRTdGF0ZSgpOworICAgIC8qIGZldGNoaW5nIElQIGFmdGVyIGNvbm5lY3Rpb24gdG8gYWNjZXNzIHBvaW50IChhc3NvYythdXRoIGNvbXBsZXRlKSAqLworICAgIHByaXZhdGUgU3RhdGUgbU9idGFpbmluZ0lwU3RhdGUgPSBuZXcgT2J0YWluaW5nSXBTdGF0ZSgpOworICAgIC8qIFdhaXRpbmcgZm9yIGxpbmsgcXVhbGl0eSB2ZXJpZmljYXRpb24gdG8gYmUgY29tcGxldGUgKi8KKyAgICBwcml2YXRlIFN0YXRlIG1WZXJpZnlpbmdMaW5rU3RhdGUgPSBuZXcgVmVyaWZ5aW5nTGlua1N0YXRlKCk7CisgICAgLyogQ29ubmVjdGVkIHdpdGggSVAgYWRkciAqLworICAgIHByaXZhdGUgU3RhdGUgbUNvbm5lY3RlZFN0YXRlID0gbmV3IENvbm5lY3RlZFN0YXRlKCk7CisgICAgLyogZGlzY29ubmVjdCBpc3N1ZWQsIHdhaXRpbmcgZm9yIG5ldHdvcmsgZGlzY29ubmVjdCBjb25maXJtYXRpb24gKi8KKyAgICBwcml2YXRlIFN0YXRlIG1EaXNjb25uZWN0aW5nU3RhdGUgPSBuZXcgRGlzY29ubmVjdGluZ1N0YXRlKCk7CisgICAgLyogTmV0d29yayBpcyBub3QgY29ubmVjdGVkLCBzdXBwbGljYW50IGFzc29jK2F1dGggaXMgbm90IGNvbXBsZXRlICovCisgICAgcHJpdmF0ZSBTdGF0ZSBtRGlzY29ubmVjdGVkU3RhdGUgPSBuZXcgRGlzY29ubmVjdGVkU3RhdGUoKTsKKyAgICAvKiBXYWl0aW5nIGZvciBXUFMgdG8gYmUgY29tcGxldGVkKi8KKyAgICBwcml2YXRlIFN0YXRlIG1XcHNSdW5uaW5nU3RhdGUgPSBuZXcgV3BzUnVubmluZ1N0YXRlKCk7CisKKyAgICAvKiBTb2Z0IGFwIGlzIHN0YXJ0aW5nIHVwICovCisgICAgcHJpdmF0ZSBTdGF0ZSBtU29mdEFwU3RhcnRpbmdTdGF0ZSA9IG5ldyBTb2Z0QXBTdGFydGluZ1N0YXRlKCk7CisgICAgLyogU29mdCBhcCBpcyBydW5uaW5nICovCisgICAgcHJpdmF0ZSBTdGF0ZSBtU29mdEFwU3RhcnRlZFN0YXRlID0gbmV3IFNvZnRBcFN0YXJ0ZWRTdGF0ZSgpOworICAgIC8qIFNvZnQgYXAgaXMgcnVubmluZyBhbmQgd2UgYXJlIHdhaXRpbmcgZm9yIHRldGhlciBub3RpZmljYXRpb24gKi8KKyAgICBwcml2YXRlIFN0YXRlIG1UZXRoZXJpbmdTdGF0ZSA9IG5ldyBUZXRoZXJpbmdTdGF0ZSgpOworICAgIC8qIFNvZnQgYXAgaXMgcnVubmluZyBhbmQgd2UgYXJlIHRldGhlcmVkIHRocm91Z2ggY29ubmVjdGl2aXR5IHNlcnZpY2UgKi8KKyAgICBwcml2YXRlIFN0YXRlIG1UZXRoZXJlZFN0YXRlID0gbmV3IFRldGhlcmVkU3RhdGUoKTsKKyAgICAvKiBXYWl0aW5nIGZvciB1bnRldGhlciBjb25maXJtYXRpb24gYmVmb3JlIHN0b3BwaW5nIHNvZnQgQXAgKi8KKyAgICBwcml2YXRlIFN0YXRlIG1VbnRldGhlcmluZ1N0YXRlID0gbmV3IFVudGV0aGVyaW5nU3RhdGUoKTsKKworICAgIHByaXZhdGUgY2xhc3MgVGV0aGVyU3RhdGVDaGFuZ2UgeworICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBhdmFpbGFibGU7CisgICAgICAgIEFycmF5TGlzdDxTdHJpbmc+IGFjdGl2ZTsKKyAgICAgICAgVGV0aGVyU3RhdGVDaGFuZ2UoQXJyYXlMaXN0PFN0cmluZz4gYXYsIEFycmF5TGlzdDxTdHJpbmc+IGFjKSB7CisgICAgICAgICAgICBhdmFpbGFibGUgPSBhdjsKKyAgICAgICAgICAgIGFjdGl2ZSA9IGFjOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBPbmUgb2YgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX1NUQVRFX0RJU0FCTEVEfSwKKyAgICAgKiAgICAgICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX1NUQVRFX0RJU0FCTElOR30sCisgICAgICogICAgICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9TVEFURV9FTkFCTEVEfSwKKyAgICAgKiAgICAgICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX1NUQVRFX0VOQUJMSU5HfSwKKyAgICAgKiAgICAgICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX1NUQVRFX1VOS05PV059CisgICAgICoKKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIEF0b21pY0ludGVnZXIgbVdpZmlTdGF0ZSA9IG5ldyBBdG9taWNJbnRlZ2VyKFdJRklfU1RBVEVfRElTQUJMRUQpOworCisgICAgLyoqCisgICAgICogT25lIG9mICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9BUF9TVEFURV9ESVNBQkxFRH0sCisgICAgICogICAgICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9BUF9TVEFURV9ESVNBQkxJTkd9LAorICAgICAqICAgICAgICAge0BsaW5rIFdpZmlNYW5hZ2VyI1dJRklfQVBfU1RBVEVfRU5BQkxFRH0sCisgICAgICogICAgICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9BUF9TVEFURV9FTkFCTElOR30sCisgICAgICogICAgICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9BUF9TVEFURV9GQUlMRUR9CisgICAgICoKKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIEF0b21pY0ludGVnZXIgbVdpZmlBcFN0YXRlID0gbmV3IEF0b21pY0ludGVnZXIoV0lGSV9BUF9TVEFURV9ESVNBQkxFRCk7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0NBTl9SRVFVRVNUID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX1NUQVJUX1NDQU4gPQorICAgICAgICAiY29tLmFuZHJvaWQuc2VydmVyLldpZmlNYW5hZ2VyLmFjdGlvbi5TVEFSVF9TQ0FOIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUxBWUVEX1NUT1BfQ09VTlRFUiA9ICJEZWxheWVkU3RvcENvdW50ZXIiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEUklWRVJfU1RPUF9SRVFVRVNUID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX0RFTEFZRURfRFJJVkVSX1NUT1AgPQorICAgICAgICAiY29tLmFuZHJvaWQuc2VydmVyLldpZmlNYW5hZ2VyLmFjdGlvbi5ERUxBWUVEX0RSSVZFUl9TVE9QIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fUkVGUkVTSF9CQVRDSEVEX1NDQU4gPQorICAgICAgICAgICAgImNvbS5hbmRyb2lkLnNlcnZlci5XaWZpTWFuYWdlci5hY3Rpb24uUkVGUkVTSF9CQVRDSEVEX1NDQU4iOworICAgIC8qKgorICAgICAqIEtlZXAgdHJhY2sgb2Ygd2hldGhlciBXSUZJIGlzIHJ1bm5pbmcuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIG1Jc1J1bm5pbmcgPSBmYWxzZTsKKworICAgIC8qKgorICAgICAqIEtlZXAgdHJhY2sgb2Ygd2hldGhlciB3ZSBsYXN0IHRvbGQgdGhlIGJhdHRlcnkgc3RhdHMgd2UgaGFkIHN0YXJ0ZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIG1SZXBvcnRlZFJ1bm5pbmcgPSBmYWxzZTsKKworICAgIC8qKgorICAgICAqIE1vc3QgcmVjZW50bHkgc2V0IHNvdXJjZSBvZiBzdGFydGluZyBXSUZJLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgV29ya1NvdXJjZSBtUnVubmluZ1dpZmlVaWRzID0gbmV3IFdvcmtTb3VyY2UoKTsKKworICAgIC8qKgorICAgICAqIFRoZSBsYXN0IHJlcG9ydGVkIFVJRHMgdGhhdCB3ZXJlIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZyBXSUZJLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgV29ya1NvdXJjZSBtTGFzdFJ1bm5pbmdXaWZpVWlkcyA9IG5ldyBXb3JrU291cmNlKCk7CisKKyAgICBwcml2YXRlIGZpbmFsIElCYXR0ZXJ5U3RhdHMgbUJhdHRlcnlTdGF0czsKKworICAgIHByaXZhdGUgQmF0Y2hlZFNjYW5TZXR0aW5ncyBtQmF0Y2hlZFNjYW5TZXR0aW5ncyA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBUcmFjayB0aGUgd29ya3NvdXJjZS9jb3N0IG9mIHRoZSBjdXJyZW50IHNldHRpbmdzIGFuZCB0cmFjayB3aGF0J3MgYmVlbiBub3RlZAorICAgICAqIHRvIHRoZSBiYXR0ZXJ5IHN0YXRzLCBzbyB3ZSBjYW4gbWFyayB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyB3aGVuIGNoYW5naW5nLgorICAgICAqLworICAgIHByaXZhdGUgV29ya1NvdXJjZSBtQmF0Y2hlZFNjYW5Xb3JrU291cmNlID0gbnVsbDsKKyAgICBwcml2YXRlIGludCBtQmF0Y2hlZFNjYW5Dc3BoID0gMDsKKyAgICBwcml2YXRlIFdvcmtTb3VyY2UgbU5vdGVkQmF0Y2hlZFNjYW5Xb3JrU291cmNlID0gbnVsbDsKKyAgICBwcml2YXRlIGludCBtTm90ZWRCYXRjaGVkU2NhbkNzcGggPSAwOworCisKKyAgICBwdWJsaWMgV2lmaVN0YXRlTWFjaGluZShDb250ZXh0IGNvbnRleHQsIFN0cmluZyB3bGFuSW50ZXJmYWNlKSB7CisgICAgICAgIHN1cGVyKCJXaWZpU3RhdGVNYWNoaW5lIik7CisgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgbUludGVyZmFjZU5hbWUgPSB3bGFuSW50ZXJmYWNlOworCisgICAgICAgIG1OZXR3b3JrSW5mbyA9IG5ldyBOZXR3b3JrSW5mbyhDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfV0lGSSwgMCwgTkVUV09SS1RZUEUsICIiKTsKKyAgICAgICAgbUJhdHRlcnlTdGF0cyA9IElCYXR0ZXJ5U3RhdHMuU3R1Yi5hc0ludGVyZmFjZShTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKAorICAgICAgICAgICAgICAgIEJhdHRlcnlTdGF0cy5TRVJWSUNFX05BTUUpKTsKKworICAgICAgICBJQmluZGVyIGIgPSBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKENvbnRleHQuTkVUV09SS01BTkFHRU1FTlRfU0VSVklDRSk7CisgICAgICAgIG1Od1NlcnZpY2UgPSBJTmV0d29ya01hbmFnZW1lbnRTZXJ2aWNlLlN0dWIuYXNJbnRlcmZhY2UoYik7CisKKyAgICAgICAgbVAycFN1cHBvcnRlZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuaGFzU3lzdGVtRmVhdHVyZSgKKyAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5GRUFUVVJFX1dJRklfRElSRUNUKTsKKworICAgICAgICBtV2lmaU5hdGl2ZSA9IG5ldyBXaWZpTmF0aXZlKG1JbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgbVdpZmlDb25maWdTdG9yZSA9IG5ldyBXaWZpQ29uZmlnU3RvcmUoY29udGV4dCwgbVdpZmlOYXRpdmUpOworICAgICAgICBtV2lmaU1vbml0b3IgPSBuZXcgV2lmaU1vbml0b3IodGhpcywgbVdpZmlOYXRpdmUpOworICAgICAgICBtV2lmaUluZm8gPSBuZXcgV2lmaUluZm8oKTsKKyAgICAgICAgbVN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIgPSBuZXcgU3VwcGxpY2FudFN0YXRlVHJhY2tlcihjb250ZXh0LCB0aGlzLCBtV2lmaUNvbmZpZ1N0b3JlLAorICAgICAgICAgICAgICAgIGdldEhhbmRsZXIoKSk7CisgICAgICAgIG1MaW5rUHJvcGVydGllcyA9IG5ldyBMaW5rUHJvcGVydGllcygpOworICAgICAgICBtTmV0bGlua0xpbmtQcm9wZXJ0aWVzID0gbmV3IExpbmtQcm9wZXJ0aWVzKCk7CisKKyAgICAgICAgbVdpZmlQMnBNYW5hZ2VyID0gKFdpZmlQMnBNYW5hZ2VyKSBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lGSV9QMlBfU0VSVklDRSk7CisKKyAgICAgICAgbU5ldHdvcmtJbmZvLnNldElzQXZhaWxhYmxlKGZhbHNlKTsKKyAgICAgICAgbUxhc3RCc3NpZCA9IG51bGw7CisgICAgICAgIG1MYXN0TmV0d29ya0lkID0gV2lmaUNvbmZpZ3VyYXRpb24uSU5WQUxJRF9ORVRXT1JLX0lEOworICAgICAgICBtTGFzdFNpZ25hbExldmVsID0gLTE7CisKKyAgICAgICAgbUludGVyZmFjZU9ic2VydmVyID0gbmV3IEludGVyZmFjZU9ic2VydmVyKHRoaXMpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbU53U2VydmljZS5yZWdpc3Rlck9ic2VydmVyKG1JbnRlcmZhY2VPYnNlcnZlcik7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2dlKCJDb3VsZG4ndCByZWdpc3RlciBpbnRlcmZhY2Ugb2JzZXJ2ZXI6ICIgKyBlLnRvU3RyaW5nKCkpOworICAgICAgICB9CisKKyAgICAgICAgbUFsYXJtTWFuYWdlciA9IChBbGFybU1hbmFnZXIpbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFMQVJNX1NFUlZJQ0UpOworICAgICAgICBJbnRlbnQgc2NhbkludGVudCA9IG5ldyBJbnRlbnQoQUNUSU9OX1NUQVJUX1NDQU4sIG51bGwpOworICAgICAgICBtU2NhbkludGVudCA9IFBlbmRpbmdJbnRlbnQuZ2V0QnJvYWRjYXN0KG1Db250ZXh0LCBTQ0FOX1JFUVVFU1QsIHNjYW5JbnRlbnQsIDApOworCisgICAgICAgIEludGVudCBiYXRjaGVkSW50ZW50ID0gbmV3IEludGVudChBQ1RJT05fUkVGUkVTSF9CQVRDSEVEX1NDQU4sIG51bGwpOworICAgICAgICBtQmF0Y2hlZFNjYW5JbnRlcnZhbEludGVudCA9IFBlbmRpbmdJbnRlbnQuZ2V0QnJvYWRjYXN0KG1Db250ZXh0LCAwLCBiYXRjaGVkSW50ZW50LCAwKTsKKworICAgICAgICBtRGVmYXVsdEZyYW1ld29ya1NjYW5JbnRlcnZhbE1zID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcigKKyAgICAgICAgICAgICAgICBSLmludGVnZXIuY29uZmlnX3dpZmlfZnJhbWV3b3JrX3NjYW5faW50ZXJ2YWwpOworCisgICAgICAgIG1Ecml2ZXJTdG9wRGVsYXlNcyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldEludGVnZXIoCisgICAgICAgICAgICAgICAgUi5pbnRlZ2VyLmNvbmZpZ193aWZpX2RyaXZlcl9zdG9wX2RlbGF5KTsKKworICAgICAgICBtQmFja2dyb3VuZFNjYW5TdXBwb3J0ZWQgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRCb29sZWFuKAorICAgICAgICAgICAgICAgIFIuYm9vbC5jb25maWdfd2lmaV9iYWNrZ3JvdW5kX3NjYW5fc3VwcG9ydCk7CisKKyAgICAgICAgbVByaW1hcnlEZXZpY2VUeXBlID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKAorICAgICAgICAgICAgICAgIFIuc3RyaW5nLmNvbmZpZ193aWZpX3AycF9kZXZpY2VfdHlwZSk7CisKKyAgICAgICAgbVVzZXJXYW50c1N1c3BlbmRPcHQuc2V0KFNldHRpbmdzLkdsb2JhbC5nZXRJbnQobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX1NVU1BFTkRfT1BUSU1JWkFUSU9OU19FTkFCTEVELCAxKSA9PSAxKTsKKworICAgICAgICBtQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKAorICAgICAgICAgICAgbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gYXZhaWxhYmxlID0gaW50ZW50LmdldFN0cmluZ0FycmF5TGlzdEV4dHJhKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpdml0eU1hbmFnZXIuRVhUUkFfQVZBSUxBQkxFX1RFVEhFUik7CisgICAgICAgICAgICAgICAgICAgIEFycmF5TGlzdDxTdHJpbmc+IGFjdGl2ZSA9IGludGVudC5nZXRTdHJpbmdBcnJheUxpc3RFeHRyYSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aXZpdHlNYW5hZ2VyLkVYVFJBX0FDVElWRV9URVRIRVIpOworICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfVEVUSEVSX1NUQVRFX0NIQU5HRSwgbmV3IFRldGhlclN0YXRlQ2hhbmdlKGF2YWlsYWJsZSwgYWN0aXZlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSxuZXcgSW50ZW50RmlsdGVyKENvbm5lY3Rpdml0eU1hbmFnZXIuQUNUSU9OX1RFVEhFUl9TVEFURV9DSEFOR0VEKSk7CisKKyAgICAgICAgbUNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcigKKyAgICAgICAgICAgICAgICBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBXb3JrU291cmNlIHdvcmtTb3VyY2UgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRTY2FuKFVOS05PV05fU0NBTl9TT1VSQ0UsIHdvcmtTb3VyY2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBuZXcgSW50ZW50RmlsdGVyKEFDVElPTl9TVEFSVF9TQ0FOKSk7CisKKyAgICAgICAgSW50ZW50RmlsdGVyIGZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoKTsKKyAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX1NDUkVFTl9PTik7CisgICAgICAgIGZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9TQ1JFRU5fT0ZGKTsKKyAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihBQ1RJT05fUkVGUkVTSF9CQVRDSEVEX1NDQU4pOworICAgICAgICBtQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKAorICAgICAgICAgICAgICAgIG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhY3Rpb24gPSBpbnRlbnQuZ2V0QWN0aW9uKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uZXF1YWxzKEludGVudC5BQ1RJT05fU0NSRUVOX09OKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNjcmVlblN0YXRlQ2hhbmdlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhJbnRlbnQuQUNUSU9OX1NDUkVFTl9PRkYpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2NyZWVuU3RhdGVDaGFuZ2VkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhBQ1RJT05fUkVGUkVTSF9CQVRDSEVEX1NDQU4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnROZXh0QmF0Y2hlZFNjYW5Bc3luYygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwgZmlsdGVyKTsKKworICAgICAgICBtQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKAorICAgICAgICAgICAgICAgIG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ZXIgPSBpbnRlbnQuZ2V0SW50RXh0cmEoREVMQVlFRF9TVE9QX0NPVU5URVIsIDApOworICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfREVMQVlFRF9TVE9QX0RSSVZFUiwgY291bnRlciwgMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIG5ldyBJbnRlbnRGaWx0ZXIoQUNUSU9OX0RFTEFZRURfRFJJVkVSX1NUT1ApKTsKKworICAgICAgICBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKS5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcihTZXR0aW5ncy5HbG9iYWwuZ2V0VXJpRm9yKAorICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX1NVU1BFTkRfT1BUSU1JWkFUSU9OU19FTkFCTEVEKSwgZmFsc2UsCisgICAgICAgICAgICAgICAgbmV3IENvbnRlbnRPYnNlcnZlcihnZXRIYW5kbGVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hhbmdlKGJvb2xlYW4gc2VsZkNoYW5nZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXJXYW50c1N1c3BlbmRPcHQuc2V0KFNldHRpbmdzLkdsb2JhbC5nZXRJbnQobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX1NVU1BFTkRfT1BUSU1JWkFUSU9OU19FTkFCTEVELCAxKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIoCisgICAgICAgICAgICAgICAgbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgeworICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX0JPT1RfQ09NUExFVEVEKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgbmV3IEludGVudEZpbHRlcihJbnRlbnQuQUNUSU9OX0JPT1RfQ09NUExFVEVEKSk7CisKKyAgICAgICAgbVNjYW5SZXN1bHRDYWNoZSA9IG5ldyBMcnVDYWNoZTxTdHJpbmcsIFNjYW5SZXN1bHQ+KFNDQU5fUkVTVUxUX0NBQ0hFX1NJWkUpOworCisgICAgICAgIFBvd2VyTWFuYWdlciBwb3dlck1hbmFnZXIgPSAoUG93ZXJNYW5hZ2VyKW1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5QT1dFUl9TRVJWSUNFKTsKKyAgICAgICAgbVdha2VMb2NrID0gcG93ZXJNYW5hZ2VyLm5ld1dha2VMb2NrKFBvd2VyTWFuYWdlci5QQVJUSUFMX1dBS0VfTE9DSywgZ2V0TmFtZSgpKTsKKworICAgICAgICBtU3VzcGVuZFdha2VMb2NrID0gcG93ZXJNYW5hZ2VyLm5ld1dha2VMb2NrKFBvd2VyTWFuYWdlci5QQVJUSUFMX1dBS0VfTE9DSywgIldpZmlTdXNwZW5kIik7CisgICAgICAgIG1TdXNwZW5kV2FrZUxvY2suc2V0UmVmZXJlbmNlQ291bnRlZChmYWxzZSk7CisKKyAgICAgICAgYWRkU3RhdGUobURlZmF1bHRTdGF0ZSk7CisgICAgICAgICAgICBhZGRTdGF0ZShtSW5pdGlhbFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKKyAgICAgICAgICAgIGFkZFN0YXRlKG1TdXBwbGljYW50U3RhcnRpbmdTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7CisgICAgICAgICAgICBhZGRTdGF0ZShtU3VwcGxpY2FudFN0YXJ0ZWRTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7CisgICAgICAgICAgICAgICAgYWRkU3RhdGUobURyaXZlclN0YXJ0aW5nU3RhdGUsIG1TdXBwbGljYW50U3RhcnRlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICBhZGRTdGF0ZShtRHJpdmVyU3RhcnRlZFN0YXRlLCBtU3VwcGxpY2FudFN0YXJ0ZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1TY2FuTW9kZVN0YXRlLCBtRHJpdmVyU3RhcnRlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobUNvbm5lY3RNb2RlU3RhdGUsIG1Ecml2ZXJTdGFydGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobUwyQ29ubmVjdGVkU3RhdGUsIG1Db25uZWN0TW9kZVN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtT2J0YWluaW5nSXBTdGF0ZSwgbUwyQ29ubmVjdGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1WZXJpZnlpbmdMaW5rU3RhdGUsIG1MMkNvbm5lY3RlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtQ29ubmVjdGVkU3RhdGUsIG1MMkNvbm5lY3RlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1EaXNjb25uZWN0aW5nU3RhdGUsIG1Db25uZWN0TW9kZVN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1EaXNjb25uZWN0ZWRTdGF0ZSwgbUNvbm5lY3RNb2RlU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobVdwc1J1bm5pbmdTdGF0ZSwgbUNvbm5lY3RNb2RlU3RhdGUpOworICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1XYWl0Rm9yUDJwRGlzYWJsZVN0YXRlLCBtU3VwcGxpY2FudFN0YXJ0ZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgYWRkU3RhdGUobURyaXZlclN0b3BwaW5nU3RhdGUsIG1TdXBwbGljYW50U3RhcnRlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICBhZGRTdGF0ZShtRHJpdmVyU3RvcHBlZFN0YXRlLCBtU3VwcGxpY2FudFN0YXJ0ZWRTdGF0ZSk7CisgICAgICAgICAgICBhZGRTdGF0ZShtU3VwcGxpY2FudFN0b3BwaW5nU3RhdGUsIG1EZWZhdWx0U3RhdGUpOworICAgICAgICAgICAgYWRkU3RhdGUobVNvZnRBcFN0YXJ0aW5nU3RhdGUsIG1EZWZhdWx0U3RhdGUpOworICAgICAgICAgICAgYWRkU3RhdGUobVNvZnRBcFN0YXJ0ZWRTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7CisgICAgICAgICAgICAgICAgYWRkU3RhdGUobVRldGhlcmluZ1N0YXRlLCBtU29mdEFwU3RhcnRlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICBhZGRTdGF0ZShtVGV0aGVyZWRTdGF0ZSwgbVNvZnRBcFN0YXJ0ZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgYWRkU3RhdGUobVVudGV0aGVyaW5nU3RhdGUsIG1Tb2Z0QXBTdGFydGVkU3RhdGUpOworCisgICAgICAgIHNldEluaXRpYWxTdGF0ZShtSW5pdGlhbFN0YXRlKTsKKworICAgICAgICBzZXRMb2dSZWNTaXplKDIwMDApOworICAgICAgICBzZXRMb2dPbmx5VHJhbnNpdGlvbnMoZmFsc2UpOworICAgICAgICBpZiAoREJHKSBzZXREYmcodHJ1ZSk7CisKKyAgICAgICAgLy9zdGFydCB0aGUgc3RhdGUgbWFjaGluZQorICAgICAgICBzdGFydCgpOworCisgICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLldJRklfU0NBTl9BVkFJTEFCTEUpOworICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX1NDQU5fQVZBSUxBQkxFLCBXSUZJX1NUQVRFX0RJU0FCTEVEKTsKKyAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKKyAgICB9CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogTWV0aG9kcyBleHBvc2VkIGZvciBwdWJsaWMgdXNlCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgcHVibGljIE1lc3NlbmdlciBnZXRNZXNzZW5nZXIoKSB7CisgICAgICAgIHJldHVybiBuZXcgTWVzc2VuZ2VyKGdldEhhbmRsZXIoKSk7CisgICAgfQorICAgIC8qKgorICAgICAqIFRPRE86IGRvYworICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHN5bmNQaW5nU3VwcGxpY2FudChBc3luY0NoYW5uZWwgY2hhbm5lbCkgeworICAgICAgICBNZXNzYWdlIHJlc3VsdE1zZyA9IGNoYW5uZWwuc2VuZE1lc3NhZ2VTeW5jaHJvbm91c2x5KENNRF9QSU5HX1NVUFBMSUNBTlQpOworICAgICAgICBib29sZWFuIHJlc3VsdCA9IChyZXN1bHRNc2cuYXJnMSAhPSBGQUlMVVJFKTsKKyAgICAgICAgcmVzdWx0TXNnLnJlY3ljbGUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbml0aWF0ZSBhIHdpZmkgc2Nhbi4gIElmIHdvcmtTb3VyY2UgaXMgbm90IG51bGwsIGJsYW1lIGlzIGdpdmVuIHRvIGl0LAorICAgICAqIG90aGVyd2lzZSBibGFtZSBpcyBnaXZlbiB0byBjYWxsaW5nVWlkLgorICAgICAqCisgICAgICogQHBhcmFtIGNhbGxpbmdVaWQgVGhlIHVpZCBpbml0aWF0aW5nIHRoZSB3aWZpIHNjYW4uICBCbGFtZSB3aWxsIGJlIGdpdmVuCisgICAgICogICAgICAgICAgICAgICAgICAgaGVyZSB1bmxlc3Mgd29ya1NvdXJjZSBpcyBzcGVjaWZpZWQuCisgICAgICogQHBhcmFtIHdvcmtTb3VyY2UgSWYgbm90IG51bGwsIGJsYW1lIGlzIGdpdmVuIHRvIHdvcmtTb3VyY2UuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3RhcnRTY2FuKGludCBjYWxsaW5nVWlkLCBXb3JrU291cmNlIHdvcmtTb3VyY2UpIHsKKyAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVJUX1NDQU4sIGNhbGxpbmdVaWQsIDAsIHdvcmtTb3VyY2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIHN0YXJ0IG9yIHN0b3AgYmF0Y2hlZCBzY2FubmluZyB1c2luZyB0aGUgZ2l2ZW4gc2V0dGluZ3MKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFUQ0hFRF9TRVRUSU5HID0gImJhdGNoZWRfc2V0dGluZ3MiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVRDSEVEX1dPUktTT1VSQ0UgPSAiYmF0Y2hlZF93b3Jrc291cmNlIjsKKyAgICBwdWJsaWMgdm9pZCBzZXRCYXRjaGVkU2NhblNldHRpbmdzKEJhdGNoZWRTY2FuU2V0dGluZ3Mgc2V0dGluZ3MsIGludCBjYWxsaW5nVWlkLCBpbnQgY3NwaCwKKyAgICAgICAgICAgIFdvcmtTb3VyY2Ugd29ya1NvdXJjZSkgeworICAgICAgICBCdW5kbGUgYnVuZGxlID0gbmV3IEJ1bmRsZSgpOworICAgICAgICBidW5kbGUucHV0UGFyY2VsYWJsZShCQVRDSEVEX1NFVFRJTkcsIHNldHRpbmdzKTsKKyAgICAgICAgYnVuZGxlLnB1dFBhcmNlbGFibGUoQkFUQ0hFRF9XT1JLU09VUkNFLCB3b3JrU291cmNlKTsKKyAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NFVF9CQVRDSEVEX1NDQU4sIGNhbGxpbmdVaWQsIGNzcGgsIGJ1bmRsZSk7CisgICAgfQorCisgICAgcHVibGljIExpc3Q8QmF0Y2hlZFNjYW5SZXN1bHQ+IHN5bmNHZXRCYXRjaGVkU2NhblJlc3VsdHNMaXN0KCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1CYXRjaGVkU2NhblJlc3VsdHMpIHsKKyAgICAgICAgICAgIExpc3Q8QmF0Y2hlZFNjYW5SZXN1bHQ+IGJhdGNoZWRTY2FuTGlzdCA9CisgICAgICAgICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8QmF0Y2hlZFNjYW5SZXN1bHQ+KG1CYXRjaGVkU2NhblJlc3VsdHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvcihCYXRjaGVkU2NhblJlc3VsdCByZXN1bHQ6IG1CYXRjaGVkU2NhblJlc3VsdHMpIHsKKyAgICAgICAgICAgICAgICBiYXRjaGVkU2Nhbkxpc3QuYWRkKG5ldyBCYXRjaGVkU2NhblJlc3VsdChyZXN1bHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBiYXRjaGVkU2Nhbkxpc3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZXF1ZXN0QmF0Y2hlZFNjYW5Qb2xsKCkgeworICAgICAgICBzZW5kTWVzc2FnZShDTURfUE9MTF9CQVRDSEVEX1NDQU4pOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzdGFydEJhdGNoZWRTY2FuKCkgeworICAgICAgICBpZiAobUJhdGNoZWRTY2FuU2V0dGluZ3MgPT0gbnVsbCkgcmV0dXJuOworCisgICAgICAgIGlmIChtRGhjcEFjdGl2ZSkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nKCJub3Qgc3RhcnRpbmcgQmF0Y2hlZCBTY2FucyBkdWUgdG8gREhDUCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gZmlyc3QgZ3JhYiBhbnkgZXhpc3RpbmcgZGF0YQorICAgICAgICByZXRyaWV2ZUJhdGNoZWRTY2FuRGF0YSgpOworCisgICAgICAgIG1BbGFybU1hbmFnZXIuY2FuY2VsKG1CYXRjaGVkU2NhbkludGVydmFsSW50ZW50KTsKKworICAgICAgICBTdHJpbmcgc2NhbnNFeHBlY3RlZCA9IG1XaWZpTmF0aXZlLnNldEJhdGNoZWRTY2FuU2V0dGluZ3MobUJhdGNoZWRTY2FuU2V0dGluZ3MpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUV4cGVjdGVkQmF0Y2hlZFNjYW5zID0gSW50ZWdlci5wYXJzZUludChzY2Fuc0V4cGVjdGVkKTsKKyAgICAgICAgICAgIHNldE5leHRCYXRjaGVkQWxhcm0obUV4cGVjdGVkQmF0Y2hlZFNjYW5zKTsKKyAgICAgICAgICAgIGlmIChtRXhwZWN0ZWRCYXRjaGVkU2NhbnMgPiAwKSBub3RlQmF0Y2hlZFNjYW5TdGFydCgpOworICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgc3RvcEJhdGNoZWRTY2FuKCk7CisgICAgICAgICAgICBsb2dlKCJFeGNlcHRpb24gcGFyc2luZyBXaWZpTmF0aXZlLnNldEJhdGNoZWRTY2FuU2V0dGluZ3MgcmVzcG9uc2UgIiArIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gY2FsbGVkIGZyb20gQnJvYWRjYXN0TGlzdGVuZXIKKyAgICBwcml2YXRlIHZvaWQgc3RhcnROZXh0QmF0Y2hlZFNjYW5Bc3luYygpIHsKKyAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVJUX05FWFRfQkFUQ0hFRF9TQ0FOKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc3RhcnROZXh0QmF0Y2hlZFNjYW4oKSB7CisgICAgICAgIC8vIGZpcnN0IGdyYWIgYW55IGV4aXN0aW5nIGRhdGEKKyAgICAgICAgcmV0cmlldmVCYXRjaGVkU2NhbkRhdGEoKTsKKworICAgICAgICBzZXROZXh0QmF0Y2hlZEFsYXJtKG1FeHBlY3RlZEJhdGNoZWRTY2Fucyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUJhdGNoZWRTY2FuUG9sbFJlcXVlc3QoKSB7CisgICAgICAgIGlmIChEQkcpIHsKKyAgICAgICAgICAgIGxvZygiaGFuZGxlQmF0Y2hlZFNjYW5Qb2xsIFJlcXVlc3QgLSBtQmF0Y2hlZFNjYW5NaW5Qb2xsVGltZT0iICsKKyAgICAgICAgICAgICAgICAgICAgbUJhdGNoZWRTY2FuTWluUG9sbFRpbWUgKyAiICwgbUJhdGNoZWRTY2FuU2V0dGluZ3M9IiArCisgICAgICAgICAgICAgICAgICAgIG1CYXRjaGVkU2NhblNldHRpbmdzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBhcHByb3ByaWF0ZSBQb2xsVGltZSB0aGF0J3MgYmVjYXVzZSB3ZSBlaXRoZXIgYXJlbid0CisgICAgICAgIC8vIGJhdGNoaW5nIG9yIHdlJ3ZlIGFscmVhZHkgc2V0IGEgdGltZSBmb3IgYSBwb2xsIHJlcXVlc3QKKyAgICAgICAgaWYgKG1CYXRjaGVkU2Nhbk1pblBvbGxUaW1lID09IDApIHJldHVybjsKKyAgICAgICAgaWYgKG1CYXRjaGVkU2NhblNldHRpbmdzID09IG51bGwpIHJldHVybjsKKworICAgICAgICBsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCisgICAgICAgIGlmIChub3cgPiBtQmF0Y2hlZFNjYW5NaW5Qb2xsVGltZSkgeworICAgICAgICAgICAgLy8gZG8gdGhlIHBvbGwgYW5kIHJlc2V0IG91ciB0aW1lcnMKKyAgICAgICAgICAgIHN0YXJ0TmV4dEJhdGNoZWRTY2FuKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQWxhcm1NYW5hZ2VyLnNldEV4YWN0KEFsYXJtTWFuYWdlci5SVENfV0FLRVVQLCBtQmF0Y2hlZFNjYW5NaW5Qb2xsVGltZSwKKyAgICAgICAgICAgICAgICAgICAgbUJhdGNoZWRTY2FuSW50ZXJ2YWxJbnRlbnQpOworICAgICAgICAgICAgbUJhdGNoZWRTY2FuTWluUG9sbFRpbWUgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gcmV0dXJuIHRydWUgaWYgbmV3L2RpZmZlcmVudAorICAgIHByaXZhdGUgYm9vbGVhbiByZWNvcmRCYXRjaGVkU2NhblNldHRpbmdzKGludCByZXNwb25zaWJsZVVpZCwgaW50IGNzcGgsIEJ1bmRsZSBidW5kbGUpIHsKKyAgICAgICAgQmF0Y2hlZFNjYW5TZXR0aW5ncyBzZXR0aW5ncyA9IGJ1bmRsZS5nZXRQYXJjZWxhYmxlKEJBVENIRURfU0VUVElORyk7CisgICAgICAgIFdvcmtTb3VyY2UgcmVzcG9uc2libGVXb3JrU291cmNlID0gYnVuZGxlLmdldFBhcmNlbGFibGUoQkFUQ0hFRF9XT1JLU09VUkNFKTsKKworICAgICAgICBpZiAoREJHKSB7CisgICAgICAgICAgICBsb2coInNldCBiYXRjaGVkIHNjYW4gdG8gIiArIHNldHRpbmdzICsgIiBmb3IgdWlkPSIgKyByZXNwb25zaWJsZVVpZCArCisgICAgICAgICAgICAgICAgICAgICIsIHdvcmtzb3VyY2U9IiArIHJlc3BvbnNpYmxlV29ya1NvdXJjZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNldHRpbmdzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChzZXR0aW5ncy5lcXVhbHMobUJhdGNoZWRTY2FuU2V0dGluZ3MpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobUJhdGNoZWRTY2FuU2V0dGluZ3MgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1CYXRjaGVkU2NhblNldHRpbmdzID0gc2V0dGluZ3M7CisgICAgICAgIGlmIChyZXNwb25zaWJsZVdvcmtTb3VyY2UgPT0gbnVsbCkgcmVzcG9uc2libGVXb3JrU291cmNlID0gbmV3IFdvcmtTb3VyY2UocmVzcG9uc2libGVVaWQpOworICAgICAgICBtQmF0Y2hlZFNjYW5Xb3JrU291cmNlID0gcmVzcG9uc2libGVXb3JrU291cmNlOworICAgICAgICBtQmF0Y2hlZFNjYW5Dc3BoID0gY3NwaDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHN0b3BCYXRjaGVkU2NhbigpIHsKKyAgICAgICAgbUFsYXJtTWFuYWdlci5jYW5jZWwobUJhdGNoZWRTY2FuSW50ZXJ2YWxJbnRlbnQpOworICAgICAgICByZXRyaWV2ZUJhdGNoZWRTY2FuRGF0YSgpOworICAgICAgICBtV2lmaU5hdGl2ZS5zZXRCYXRjaGVkU2NhblNldHRpbmdzKG51bGwpOworICAgICAgICBub3RlQmF0Y2hlZFNjYW5TdG9wKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldE5leHRCYXRjaGVkQWxhcm0oaW50IHNjYW5zRXhwZWN0ZWQpIHsKKworICAgICAgICBpZiAobUJhdGNoZWRTY2FuU2V0dGluZ3MgPT0gbnVsbCB8fCBzY2Fuc0V4cGVjdGVkIDwgMSkgcmV0dXJuOworCisgICAgICAgIG1CYXRjaGVkU2Nhbk1pblBvbGxUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKworICAgICAgICAgICAgICAgIG1CYXRjaGVkU2NhblNldHRpbmdzLnNjYW5JbnRlcnZhbFNlYyAqIDEwMDA7CisKKyAgICAgICAgaWYgKG1CYXRjaGVkU2NhblNldHRpbmdzLm1heFNjYW5zUGVyQmF0Y2ggPCBzY2Fuc0V4cGVjdGVkKSB7CisgICAgICAgICAgICBzY2Fuc0V4cGVjdGVkID0gbUJhdGNoZWRTY2FuU2V0dGluZ3MubWF4U2NhbnNQZXJCYXRjaDsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzZWNUb0Z1bGwgPSBtQmF0Y2hlZFNjYW5TZXR0aW5ncy5zY2FuSW50ZXJ2YWxTZWM7CisgICAgICAgIHNlY1RvRnVsbCAqPSBzY2Fuc0V4cGVjdGVkOworCisgICAgICAgIGludCBkZWJ1Z1BlcmlvZCA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0SW50KCJ3aWZpLmJhdGNoZWRTY2FuLnBvbGxQZXJpb2QiLCAwKTsKKyAgICAgICAgaWYgKGRlYnVnUGVyaW9kID4gMCkgc2VjVG9GdWxsID0gZGVidWdQZXJpb2Q7CisKKyAgICAgICAgLy8gc2V0IHRoZSBhbGFybSB0byBkbyB0aGUgbmV4dCBwb2xsLiAgV2Ugc2V0IGl0IGEgbGl0dGxlIHNob3J0IGFzIHdlJ2QgcmF0aGVyCisgICAgICAgIC8vIHdha2UgdXAgd2Vhcmx5IHRoYW4gbWlzcyBhIHNjYW4gZHVlIHRvIGJ1ZmZlciBvdmVyZmxvdworICAgICAgICBtQWxhcm1NYW5hZ2VyLnNldEV4YWN0KEFsYXJtTWFuYWdlci5SVENfV0FLRVVQLCBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKQorICAgICAgICAgICAgICAgICsgKChzZWNUb0Z1bGwgLSAobUJhdGNoZWRTY2FuU2V0dGluZ3Muc2NhbkludGVydmFsU2VjIC8gMikpICogMTAwMCksCisgICAgICAgICAgICAgICAgbUJhdGNoZWRTY2FuSW50ZXJ2YWxJbnRlbnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0YXJ0IHJlYWRpbmcgbmV3IHNjYW4gZGF0YQorICAgICAqIERhdGEgY29tZXMgaW4gYXM6CisgICAgICogInNjYW5jb3VudD01XG4iCisgICAgICogIm5leHRjb3VudD01XG4iCisgICAgICogICAiYXBjb3VudD0zXG4iCisgICAgICogICAidHJ1bmNcbiIgKG9wdGlvbmFsKQorICAgICAqICAgICAiYnNzaWQ9Li4uXG4iCisgICAgICogICAgICJzc2lkPS4uLlxuIgorICAgICAqICAgICAiZnJlcT0uLi5cbiIgKGluIE1oeikKKyAgICAgKiAgICAgImxldmVsPS4uLlxuIgorICAgICAqICAgICAiZGlzdD0uLi5cbiIgKGluIGNtKQorICAgICAqICAgICAiZGlzdHNkPS4uLlxuIiAoc3RhbmRhcmQgZGV2aWF0aW9uLCBpbiBjbSkKKyAgICAgKiAgICAgIj09PT0iCisgICAgICogICAgICJic3NpZD0uLi5cbiIKKyAgICAgKiAgICAgZXRjCisgICAgICogICAgICI9PT09IgorICAgICAqICAgICAiYnNzaWQ9Li4uXG4iCisgICAgICogICAgIGV0YworICAgICAqICAgICAiJSUlJSIKKyAgICAgKiAgICJhcGNvdW50PTJcbiIKKyAgICAgKiAgICAgImJzc2lkPS4uLlxuIgorICAgICAqICAgICBldGMKKyAgICAgKiAgICAgIiUlJSUKKyAgICAgKiAgIGV0YworICAgICAqICAgIi0tLS0iCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgYm9vbGVhbiBERUJVR19QQVJTRSA9IGZhbHNlOworICAgIHByaXZhdGUgdm9pZCByZXRyaWV2ZUJhdGNoZWRTY2FuRGF0YSgpIHsKKyAgICAgICAgU3RyaW5nIHJhd0RhdGEgPSBtV2lmaU5hdGl2ZS5nZXRCYXRjaGVkU2NhblJlc3VsdHMoKTsKKyAgICAgICAgaWYgKERFQlVHX1BBUlNFKSBsb2coInJhd0RhdGEgPSAiICsgcmF3RGF0YSk7CisgICAgICAgIG1CYXRjaGVkU2Nhbk1pblBvbGxUaW1lID0gMDsKKyAgICAgICAgaWYgKHJhd0RhdGEgPT0gbnVsbCB8fCByYXdEYXRhLmVxdWFsc0lnbm9yZUNhc2UoIk9LIikpIHsKKyAgICAgICAgICAgIGxvZ2UoIlVuZXhwZWN0ZWQgQmF0Y2hlZFNjYW5SZXN1bHRzIDoiICsgcmF3RGF0YSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgc2NhbkNvdW50ID0gMDsKKyAgICAgICAgZmluYWwgU3RyaW5nIEVORF9PRl9CQVRDSEVTID0gIi0tLS0iOworICAgICAgICBmaW5hbCBTdHJpbmcgU0NBTkNPVU5UID0gInNjYW5jb3VudD0iOworICAgICAgICBmaW5hbCBTdHJpbmcgVFJVTkNBVEVEID0gInRydW5jIjsKKyAgICAgICAgZmluYWwgU3RyaW5nIEFHRSA9ICJhZ2U9IjsKKyAgICAgICAgZmluYWwgU3RyaW5nIERJU1QgPSAiZGlzdD0iOworICAgICAgICBmaW5hbCBTdHJpbmcgRElTVFNEID0gImRpc3RTZD0iOworCisgICAgICAgIFN0cmluZyBzcGxpdERhdGFbXSA9IHJhd0RhdGEuc3BsaXQoIlxuIik7CisgICAgICAgIGludCBuID0gMDsKKyAgICAgICAgaWYgKHNwbGl0RGF0YVtuXS5zdGFydHNXaXRoKFNDQU5DT1VOVCkpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgc2NhbkNvdW50ID0gSW50ZWdlci5wYXJzZUludChzcGxpdERhdGFbbisrXS5zdWJzdHJpbmcoU0NBTkNPVU5ULmxlbmd0aCgpKSk7CisgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGxvZ2UoInNjYW5jb3VudCBwYXJzZUludCBFeGNlcHRpb24gZnJvbSAiICsgc3BsaXREYXRhW25dKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGxvZygic2NhbmNvdW50IG5vdCBmb3VuZCIpOworICAgICAgICBpZiAoc2NhbkNvdW50ID09IDApIHsKKyAgICAgICAgICAgIGxvZ2UoInNjYW5Db3VudD09MCAtIGFib3J0aW5nIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpTWFuYWdlci5CQVRDSEVEX1NDQU5fUkVTVUxUU19BVkFJTEFCTEVfQUNUSU9OKTsKKyAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7CisKKyAgICAgICAgc3luY2hyb25pemVkIChtQmF0Y2hlZFNjYW5SZXN1bHRzKSB7CisgICAgICAgICAgICBtQmF0Y2hlZFNjYW5SZXN1bHRzLmNsZWFyKCk7CisgICAgICAgICAgICBCYXRjaGVkU2NhblJlc3VsdCBiYXRjaGVkU2NhblJlc3VsdCA9IG5ldyBCYXRjaGVkU2NhblJlc3VsdCgpOworCisgICAgICAgICAgICBTdHJpbmcgYnNzaWQgPSBudWxsOworICAgICAgICAgICAgV2lmaVNzaWQgd2lmaVNzaWQgPSBudWxsOworICAgICAgICAgICAgaW50IGxldmVsID0gMDsKKyAgICAgICAgICAgIGludCBmcmVxID0gMDsKKyAgICAgICAgICAgIGludCBkaXN0LCBkaXN0U2Q7CisgICAgICAgICAgICBsb25nIHRzZiA9IDA7CisgICAgICAgICAgICBkaXN0ID0gZGlzdFNkID0gU2NhblJlc3VsdC5VTlNQRUNJRklFRDsKKyAgICAgICAgICAgIGZpbmFsIGxvbmcgbm93ID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgYnNzaWRTdHJMZW4gPSBCU1NJRF9TVFIubGVuZ3RoKCk7CisKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKG4gPCBzcGxpdERhdGEubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19QQVJTRSkgbG9nZCgicGFyc2luZyAiICsgc3BsaXREYXRhW25dKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNwbGl0RGF0YVtuXS5lcXVhbHMoRU5EX09GX0JBVENIRVMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobisxICE9IHNwbGl0RGF0YS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJkaWRuJ3QgY29uc3VtZSAiICsgKHNwbGl0RGF0YS5sZW5ndGgtbikpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1CYXRjaGVkU2NhblJlc3VsdHMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dkKCJyZXRyaWV2ZUJhdGNoZWRTY2FuUmVzdWx0cyBYIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKChzcGxpdERhdGFbbl0uZXF1YWxzKEVORF9TVFIpKSB8fCBzcGxpdERhdGFbbl0uZXF1YWxzKERFTElNSVRFUl9TVFIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnNzaWQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoZWRTY2FuUmVzdWx0LnNjYW5SZXN1bHRzLmFkZChuZXcgU2NhblJlc3VsdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZmlTc2lkLCBic3NpZCwgIiIsIGxldmVsLCBmcmVxLCB0c2YsIGRpc3QsIGRpc3RTZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZmlTc2lkID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBic3NpZCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXEgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IGRpc3RTZCA9IFNjYW5SZXN1bHQuVU5TUEVDSUZJRUQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaXREYXRhW25dLmVxdWFscyhFTkRfU1RSKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXRjaGVkU2NhblJlc3VsdC5zY2FuUmVzdWx0cy5zaXplKCkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQmF0Y2hlZFNjYW5SZXN1bHRzLmFkZChiYXRjaGVkU2NhblJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoZWRTY2FuUmVzdWx0ID0gbmV3IEJhdGNoZWRTY2FuUmVzdWx0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZCgiRm91bmQgZW1wdHkgYmF0Y2giKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BsaXREYXRhW25dLmVxdWFscyhUUlVOQ0FURUQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaGVkU2NhblJlc3VsdC50cnVuY2F0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwbGl0RGF0YVtuXS5zdGFydHNXaXRoKEJTU0lEX1NUUikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJzc2lkID0gbmV3IFN0cmluZyhzcGxpdERhdGFbbl0uZ2V0Qnl0ZXMoKSwgYnNzaWRTdHJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0RGF0YVtuXS5sZW5ndGgoKSAtIGJzc2lkU3RyTGVuKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdERhdGFbbl0uc3RhcnRzV2l0aChGUkVRX1NUUikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlcSA9IEludGVnZXIucGFyc2VJbnQoc3BsaXREYXRhW25dLnN1YnN0cmluZyhGUkVRX1NUUi5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJbnZhbGlkIGZyZXFlbmN5OiAiICsgc3BsaXREYXRhW25dKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVxID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdERhdGFbbl0uc3RhcnRzV2l0aChBR0UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZiA9IG5vdyAtIExvbmcucGFyc2VMb25nKHNwbGl0RGF0YVtuXS5zdWJzdHJpbmcoQUdFLmxlbmd0aCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNmICo9IDEwMDA7IC8vIGNvbnZlcnQgbVMgLT4gdVMKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSW52YWxpZCB0aW1lc3RhbXA6ICIgKyBzcGxpdERhdGFbbl0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BsaXREYXRhW25dLnN0YXJ0c1dpdGgoU1NJRF9TVFIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWZpU3NpZCA9IFdpZmlTc2lkLmNyZWF0ZUZyb21Bc2NpaUVuY29kZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0RGF0YVtuXS5zdWJzdHJpbmcoU1NJRF9TVFIubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdERhdGFbbl0uc3RhcnRzV2l0aChMRVZFTF9TVFIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gSW50ZWdlci5wYXJzZUludChzcGxpdERhdGFbbl0uc3Vic3RyaW5nKExFVkVMX1NUUi5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbCA+IDApIGxldmVsIC09IDI1NjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSW52YWxpZCBsZXZlbDogIiArIHNwbGl0RGF0YVtuXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwbGl0RGF0YVtuXS5zdGFydHNXaXRoKERJU1QpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSBJbnRlZ2VyLnBhcnNlSW50KHNwbGl0RGF0YVtuXS5zdWJzdHJpbmcoRElTVC5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJbnZhbGlkIGRpc3RhbmNlOiAiICsgc3BsaXREYXRhW25dKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gU2NhblJlc3VsdC5VTlNQRUNJRklFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdERhdGFbbl0uc3RhcnRzV2l0aChESVNUU0QpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RTZCA9IEludGVnZXIucGFyc2VJbnQoc3BsaXREYXRhW25dLnN1YnN0cmluZyhESVNUU0QubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSW52YWxpZCBkaXN0YW5jZVNkOiAiICsgc3BsaXREYXRhW25dKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0U2QgPSBTY2FuUmVzdWx0LlVOU1BFQ0lGSUVEOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiVW5hYmxlIHRvIHBhcnNlIGJhdGNoZWQgc2NhbiByZXN1bHQgbGluZTogIiArIHNwbGl0RGF0YVtuXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByYXdEYXRhID0gbVdpZmlOYXRpdmUuZ2V0QmF0Y2hlZFNjYW5SZXN1bHRzKCk7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHX1BBUlNFKSBsb2coInJlYWRpbmcgbW9yZSBkYXRhOlxuIiArIHJhd0RhdGEpOworICAgICAgICAgICAgICAgIGlmIChyYXdEYXRhID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nZSgiVW5leHBlY3RlZCBudWxsIEJhdGNoZWRTY2FuUmVzdWx0cyIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNwbGl0RGF0YSA9IHJhd0RhdGEuc3BsaXQoIlxuIik7CisgICAgICAgICAgICAgICAgaWYgKHNwbGl0RGF0YS5sZW5ndGggPT0gMCB8fCBzcGxpdERhdGFbMF0uZXF1YWxzKCJvayIpKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2UoImJhdGNoIHNjYW4gcmVzdWx0cyBqdXN0IGVuZGVkISIpOworICAgICAgICAgICAgICAgICAgICBpZiAobUJhdGNoZWRTY2FuUmVzdWx0cy5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbiA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB3b3JrU291cmNlIGlzIG5vdCBudWxsLCBibGFtZSBpcyBnaXZlbiB0byBpdCwgb3RoZXJ3aXNlIGJsYW1lIGlzIGdpdmVuIHRvIGNhbGxpbmdVaWQuCisgICAgcHJpdmF0ZSB2b2lkIG5vdGVTY2FuU3RhcnQoaW50IGNhbGxpbmdVaWQsIFdvcmtTb3VyY2Ugd29ya1NvdXJjZSkgeworICAgICAgICBpZiAobVNjYW5Xb3JrU291cmNlID09IG51bGwgJiYgKGNhbGxpbmdVaWQgIT0gVU5LTk9XTl9TQ0FOX1NPVVJDRSB8fCB3b3JrU291cmNlICE9IG51bGwpKSB7CisgICAgICAgICAgICBtU2NhbldvcmtTb3VyY2UgPSB3b3JrU291cmNlICE9IG51bGwgPyB3b3JrU291cmNlIDogbmV3IFdvcmtTb3VyY2UoY2FsbGluZ1VpZCk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZVdpZmlTY2FuU3RhcnRlZEZyb21Tb3VyY2UobVNjYW5Xb3JrU291cmNlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgbm90ZVNjYW5FbmQoKSB7CisgICAgICAgIGlmIChtU2NhbldvcmtTb3VyY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpU2NhblN0b3BwZWRGcm9tU291cmNlKG1TY2FuV29ya1NvdXJjZSk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBtU2NhbldvcmtTb3VyY2UgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5vdGVCYXRjaGVkU2NhblN0YXJ0KCkgeworICAgICAgICAvLyBub3RlIHRoZSBlbmQgb2YgYSBwcmV2aW91cyBzY2FuIHNldAorICAgICAgICBpZiAobU5vdGVkQmF0Y2hlZFNjYW5Xb3JrU291cmNlICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICAobU5vdGVkQmF0Y2hlZFNjYW5Xb3JrU291cmNlLmVxdWFscyhtQmF0Y2hlZFNjYW5Xb3JrU291cmNlKSA9PSBmYWxzZSB8fAorICAgICAgICAgICAgICAgICBtTm90ZWRCYXRjaGVkU2NhbkNzcGggIT0gbUJhdGNoZWRTY2FuQ3NwaCkpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbUJhdHRlcnlTdGF0cy5ub3RlV2lmaUJhdGNoZWRTY2FuU3RvcHBlZEZyb21Tb3VyY2UobU5vdGVkQmF0Y2hlZFNjYW5Xb3JrU291cmNlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIG1Ob3RlZEJhdGNoZWRTY2FuV29ya1NvdXJjZSA9IG51bGw7CisgICAgICAgICAgICAgICAgbU5vdGVkQmF0Y2hlZFNjYW5Dc3BoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBub3RlIHRoZSBzdGFydCBvZiB0aGUgbmV3CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpQmF0Y2hlZFNjYW5TdGFydGVkRnJvbVNvdXJjZShtQmF0Y2hlZFNjYW5Xb3JrU291cmNlLAorICAgICAgICAgICAgICAgICAgICBtQmF0Y2hlZFNjYW5Dc3BoKTsKKyAgICAgICAgICAgIG1Ob3RlZEJhdGNoZWRTY2FuV29ya1NvdXJjZSA9IG1CYXRjaGVkU2NhbldvcmtTb3VyY2U7CisgICAgICAgICAgICBtTm90ZWRCYXRjaGVkU2NhbkNzcGggPSBtQmF0Y2hlZFNjYW5Dc3BoOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgbm90ZUJhdGNoZWRTY2FuU3RvcCgpIHsKKyAgICAgICAgaWYgKG1Ob3RlZEJhdGNoZWRTY2FuV29ya1NvdXJjZSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZVdpZmlCYXRjaGVkU2NhblN0b3BwZWRGcm9tU291cmNlKG1Ob3RlZEJhdGNoZWRTY2FuV29ya1NvdXJjZSk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBtTm90ZWRCYXRjaGVkU2NhbldvcmtTb3VyY2UgPSBudWxsOworICAgICAgICAgICAgICAgIG1Ob3RlZEJhdGNoZWRTY2FuQ3NwaCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc3RhcnRTY2FuTmF0aXZlKGludCB0eXBlKSB7CisgICAgICAgIG1XaWZpTmF0aXZlLnNjYW4odHlwZSk7CisgICAgICAgIG1TY2FuUmVzdWx0SXNQZW5kaW5nID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUT0RPOiBkb2MKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRTdXBwbGljYW50UnVubmluZyhib29sZWFuIGVuYWJsZSkgeworICAgICAgICBpZiAoZW5hYmxlKSB7CisgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBUlRfU1VQUExJQ0FOVCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RPUF9TVVBQTElDQU5UKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRPRE86IGRvYworICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEhvc3RBcFJ1bm5pbmcoV2lmaUNvbmZpZ3VyYXRpb24gd2lmaUNvbmZpZywgYm9vbGVhbiBlbmFibGUpIHsKKyAgICAgICAgaWYgKGVuYWJsZSkgeworICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVJUX0FQLCB3aWZpQ29uZmlnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVE9QX0FQKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFdpZmlBcENvbmZpZ3VyYXRpb24oV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnKSB7CisgICAgICAgIG1XaWZpQXBDb25maWdDaGFubmVsLnNlbmRNZXNzYWdlKENNRF9TRVRfQVBfQ09ORklHLCBjb25maWcpOworICAgIH0KKworICAgIHB1YmxpYyBXaWZpQ29uZmlndXJhdGlvbiBzeW5jR2V0V2lmaUFwQ29uZmlndXJhdGlvbigpIHsKKyAgICAgICAgTWVzc2FnZSByZXN1bHRNc2cgPSBtV2lmaUFwQ29uZmlnQ2hhbm5lbC5zZW5kTWVzc2FnZVN5bmNocm9ub3VzbHkoQ01EX1JFUVVFU1RfQVBfQ09ORklHKTsKKyAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gcmV0ID0gKFdpZmlDb25maWd1cmF0aW9uKSByZXN1bHRNc2cub2JqOworICAgICAgICByZXN1bHRNc2cucmVjeWNsZSgpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRPRE86IGRvYworICAgICAqLworICAgIHB1YmxpYyBpbnQgc3luY0dldFdpZmlTdGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIG1XaWZpU3RhdGUuZ2V0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVE9ETzogZG9jCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBzeW5jR2V0V2lmaVN0YXRlQnlOYW1lKCkgeworICAgICAgICBzd2l0Y2ggKG1XaWZpU3RhdGUuZ2V0KCkpIHsKKyAgICAgICAgICAgIGNhc2UgV0lGSV9TVEFURV9ESVNBQkxJTkc6CisgICAgICAgICAgICAgICAgcmV0dXJuICJkaXNhYmxpbmciOworICAgICAgICAgICAgY2FzZSBXSUZJX1NUQVRFX0RJU0FCTEVEOgorICAgICAgICAgICAgICAgIHJldHVybiAiZGlzYWJsZWQiOworICAgICAgICAgICAgY2FzZSBXSUZJX1NUQVRFX0VOQUJMSU5HOgorICAgICAgICAgICAgICAgIHJldHVybiAiZW5hYmxpbmciOworICAgICAgICAgICAgY2FzZSBXSUZJX1NUQVRFX0VOQUJMRUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJlbmFibGVkIjsKKyAgICAgICAgICAgIGNhc2UgV0lGSV9TVEFURV9VTktOT1dOOgorICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biBzdGF0ZSI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAiW2ludmFsaWQgc3RhdGVdIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRPRE86IGRvYworICAgICAqLworICAgIHB1YmxpYyBpbnQgc3luY0dldFdpZmlBcFN0YXRlKCkgeworICAgICAgICByZXR1cm4gbVdpZmlBcFN0YXRlLmdldCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRPRE86IGRvYworICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgc3luY0dldFdpZmlBcFN0YXRlQnlOYW1lKCkgeworICAgICAgICBzd2l0Y2ggKG1XaWZpQXBTdGF0ZS5nZXQoKSkgeworICAgICAgICAgICAgY2FzZSBXSUZJX0FQX1NUQVRFX0RJU0FCTElORzoKKyAgICAgICAgICAgICAgICByZXR1cm4gImRpc2FibGluZyI7CisgICAgICAgICAgICBjYXNlIFdJRklfQVBfU1RBVEVfRElTQUJMRUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJkaXNhYmxlZCI7CisgICAgICAgICAgICBjYXNlIFdJRklfQVBfU1RBVEVfRU5BQkxJTkc6CisgICAgICAgICAgICAgICAgcmV0dXJuICJlbmFibGluZyI7CisgICAgICAgICAgICBjYXNlIFdJRklfQVBfU1RBVEVfRU5BQkxFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gImVuYWJsZWQiOworICAgICAgICAgICAgY2FzZSBXSUZJX0FQX1NUQVRFX0ZBSUxFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gImZhaWxlZCI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAiW2ludmFsaWQgc3RhdGVdIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24sIGlmIGFueS4KKyAgICAgKiBAcmV0dXJuIGEge0BsaW5rIFdpZmlJbmZvfSBvYmplY3QgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgV2lmaUluZm8gc3luY1JlcXVlc3RDb25uZWN0aW9uSW5mbygpIHsKKyAgICAgICAgcmV0dXJuIG1XaWZpSW5mbzsKKyAgICB9CisKKyAgICBwdWJsaWMgRGhjcFJlc3VsdHMgc3luY0dldERoY3BSZXN1bHRzKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1EaGNwUmVzdWx0c0xvY2spIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRGhjcFJlc3VsdHMobURoY3BSZXN1bHRzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRPRE86IGRvYworICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldERyaXZlclN0YXJ0KGJvb2xlYW4gZW5hYmxlKSB7CisgICAgICAgIGlmIChlbmFibGUpIHsKKyAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFSVF9EUklWRVIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUT1BfRFJJVkVSKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRPRE86IGRvYworICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE9wZXJhdGlvbmFsTW9kZShpbnQgbW9kZSkgeworICAgICAgICBpZiAoREJHKSBsb2coInNldHRpbmcgb3BlcmF0aW9uYWwgbW9kZSB0byAiICsgU3RyaW5nLnZhbHVlT2YobW9kZSkpOworICAgICAgICBzZW5kTWVzc2FnZShDTURfU0VUX09QRVJBVElPTkFMX01PREUsIG1vZGUsIDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRPRE86IGRvYworICAgICAqLworICAgIHB1YmxpYyBMaXN0PFNjYW5SZXN1bHQ+IHN5bmNHZXRTY2FuUmVzdWx0c0xpc3QoKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVNjYW5SZXN1bHRDYWNoZSkgeworICAgICAgICAgICAgTGlzdDxTY2FuUmVzdWx0PiBzY2FuTGlzdCA9IG5ldyBBcnJheUxpc3Q8U2NhblJlc3VsdD4oKTsKKyAgICAgICAgICAgIGZvcihTY2FuUmVzdWx0IHJlc3VsdDogbVNjYW5SZXN1bHRzKSB7CisgICAgICAgICAgICAgICAgc2Nhbkxpc3QuYWRkKG5ldyBTY2FuUmVzdWx0KHJlc3VsdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNjYW5MaXN0OworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRGlzY29ubmVjdCBmcm9tIEFjY2VzcyBQb2ludAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRpc2Nvbm5lY3RDb21tYW5kKCkgeworICAgICAgICBzZW5kTWVzc2FnZShDTURfRElTQ09OTkVDVCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5pdGlhdGUgYSByZWNvbm5lY3Rpb24gdG8gQVAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZWNvbm5lY3RDb21tYW5kKCkgeworICAgICAgICBzZW5kTWVzc2FnZShDTURfUkVDT05ORUNUKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbml0aWF0ZSBhIHJlLWFzc29jaWF0aW9uIHRvIEFQCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVhc3NvY2lhdGVDb21tYW5kKCkgeworICAgICAgICBzZW5kTWVzc2FnZShDTURfUkVBU1NPQ0lBVEUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbG9hZCBuZXR3b3JrcyBhbmQgdGhlbiByZWNvbm5lY3Q7IGhlbHBzIGxvYWQgY29ycmVjdCBkYXRhIGZvciBUTFMgbmV0d29ya3MKKyAgICAgKi8KKworICAgIHB1YmxpYyB2b2lkIHJlbG9hZFRsc05ldHdvcmtzQW5kUmVjb25uZWN0KCkgeworICAgICAgICBzZW5kTWVzc2FnZShDTURfUkVMT0FEX1RMU19BTkRfUkVDT05ORUNUKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGQgYSBuZXR3b3JrIHN5bmNocm9ub3VzbHkKKyAgICAgKgorICAgICAqIEByZXR1cm4gbmV0d29yayBpZCBvZiB0aGUgbmV3IG5ldHdvcmsKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IHN5bmNBZGRPclVwZGF0ZU5ldHdvcmsoQXN5bmNDaGFubmVsIGNoYW5uZWwsIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZykgeworICAgICAgICBNZXNzYWdlIHJlc3VsdE1zZyA9IGNoYW5uZWwuc2VuZE1lc3NhZ2VTeW5jaHJvbm91c2x5KENNRF9BRERfT1JfVVBEQVRFX05FVFdPUkssIGNvbmZpZyk7CisgICAgICAgIGludCByZXN1bHQgPSByZXN1bHRNc2cuYXJnMTsKKyAgICAgICAgcmVzdWx0TXNnLnJlY3ljbGUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdDxXaWZpQ29uZmlndXJhdGlvbj4gc3luY0dldENvbmZpZ3VyZWROZXR3b3JrcyhBc3luY0NoYW5uZWwgY2hhbm5lbCkgeworICAgICAgICBNZXNzYWdlIHJlc3VsdE1zZyA9IGNoYW5uZWwuc2VuZE1lc3NhZ2VTeW5jaHJvbm91c2x5KENNRF9HRVRfQ09ORklHVVJFRF9ORVRXT1JLUyk7CisgICAgICAgIExpc3Q8V2lmaUNvbmZpZ3VyYXRpb24+IHJlc3VsdCA9IChMaXN0PFdpZmlDb25maWd1cmF0aW9uPikgcmVzdWx0TXNnLm9iajsKKyAgICAgICAgcmVzdWx0TXNnLnJlY3ljbGUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWxldGUgYSBuZXR3b3JrCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmV0d29ya0lkIGlkIG9mIHRoZSBuZXR3b3JrIHRvIGJlIHJlbW92ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBzeW5jUmVtb3ZlTmV0d29yayhBc3luY0NoYW5uZWwgY2hhbm5lbCwgaW50IG5ldHdvcmtJZCkgeworICAgICAgICBNZXNzYWdlIHJlc3VsdE1zZyA9IGNoYW5uZWwuc2VuZE1lc3NhZ2VTeW5jaHJvbm91c2x5KENNRF9SRU1PVkVfTkVUV09SSywgbmV0d29ya0lkKTsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSAocmVzdWx0TXNnLmFyZzEgIT0gRkFJTFVSRSk7CisgICAgICAgIHJlc3VsdE1zZy5yZWN5Y2xlKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogRW5hYmxlIGEgbmV0d29yaworICAgICAqCisgICAgICogQHBhcmFtIG5ldElkIG5ldHdvcmsgaWQgb2YgdGhlIG5ldHdvcmsKKyAgICAgKiBAcGFyYW0gZGlzYWJsZU90aGVycyB0cnVlLCBpZiBhbGwgb3RoZXIgbmV0d29ya3MgaGF2ZSB0byBiZSBkaXNhYmxlZAorICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gc3luY0VuYWJsZU5ldHdvcmsoQXN5bmNDaGFubmVsIGNoYW5uZWwsIGludCBuZXRJZCwgYm9vbGVhbiBkaXNhYmxlT3RoZXJzKSB7CisgICAgICAgIE1lc3NhZ2UgcmVzdWx0TXNnID0gY2hhbm5lbC5zZW5kTWVzc2FnZVN5bmNocm9ub3VzbHkoQ01EX0VOQUJMRV9ORVRXT1JLLCBuZXRJZCwKKyAgICAgICAgICAgICAgICBkaXNhYmxlT3RoZXJzID8gMSA6IDApOworICAgICAgICBib29sZWFuIHJlc3VsdCA9IChyZXN1bHRNc2cuYXJnMSAhPSBGQUlMVVJFKTsKKyAgICAgICAgcmVzdWx0TXNnLnJlY3ljbGUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEaXNhYmxlIGEgbmV0d29yaworICAgICAqCisgICAgICogQHBhcmFtIG5ldElkIG5ldHdvcmsgaWQgb2YgdGhlIG5ldHdvcmsKKyAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRzLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHN5bmNEaXNhYmxlTmV0d29yayhBc3luY0NoYW5uZWwgY2hhbm5lbCwgaW50IG5ldElkKSB7CisgICAgICAgIE1lc3NhZ2UgcmVzdWx0TXNnID0gY2hhbm5lbC5zZW5kTWVzc2FnZVN5bmNocm9ub3VzbHkoV2lmaU1hbmFnZXIuRElTQUJMRV9ORVRXT1JLLCBuZXRJZCk7CisgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gKHJlc3VsdE1zZy5hcmcxICE9IFdpZmlNYW5hZ2VyLkRJU0FCTEVfTkVUV09SS19GQUlMRUQpOworICAgICAgICByZXN1bHRNc2cucmVjeWNsZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIEJsYWNrbGlzdCBhIEJTU0lELiBUaGlzIHdpbGwgYXZvaWQgdGhlIEFQIGlmIHRoZXJlIGFyZQorICAgICAqIGFsdGVybmF0ZSBBUHMgdG8gY29ubmVjdAorICAgICAqCisgICAgICogQHBhcmFtIGJzc2lkIEJTU0lEIG9mIHRoZSBuZXR3b3JrCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkVG9CbGFja2xpc3QoU3RyaW5nIGJzc2lkKSB7CisgICAgICAgIHNlbmRNZXNzYWdlKENNRF9CTEFDS0xJU1RfTkVUV09SSywgYnNzaWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENsZWFyIHRoZSBibGFja2xpc3QgbGlzdAorICAgICAqCisgICAgICovCisgICAgcHVibGljIHZvaWQgY2xlYXJCbGFja2xpc3QoKSB7CisgICAgICAgIHNlbmRNZXNzYWdlKENNRF9DTEVBUl9CTEFDS0xJU1QpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGVuYWJsZVJzc2lQb2xsaW5nKGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgIHNlbmRNZXNzYWdlKENNRF9FTkFCTEVfUlNTSV9QT0xMLCBlbmFibGVkID8gMSA6IDAsIDApOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGVuYWJsZUJhY2tncm91bmRTY2FuQ29tbWFuZChib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICBzZW5kTWVzc2FnZShDTURfRU5BQkxFX0JBQ0tHUk9VTkRfU0NBTiwgZW5hYmxlZCA/IDEgOiAwLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBlbmFibGVBbGxOZXR3b3JrcygpIHsKKyAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX0VOQUJMRV9BTExfTkVUV09SS1MpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0YXJ0IGZpbHRlcmluZyBNdWx0aWNhc3QgdjQgcGFja2V0cworICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN0YXJ0RmlsdGVyaW5nTXVsdGljYXN0VjRQYWNrZXRzKCkgeworICAgICAgICBtRmlsdGVyaW5nTXVsdGljYXN0VjRQYWNrZXRzLnNldCh0cnVlKTsKKyAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkcsIE1VTFRJQ0FTVF9WNCwgMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RvcCBmaWx0ZXJpbmcgTXVsdGljYXN0IHY0IHBhY2tldHMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdG9wRmlsdGVyaW5nTXVsdGljYXN0VjRQYWNrZXRzKCkgeworICAgICAgICBtRmlsdGVyaW5nTXVsdGljYXN0VjRQYWNrZXRzLnNldChmYWxzZSk7CisgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVE9QX1BBQ0tFVF9GSUxURVJJTkcsIE1VTFRJQ0FTVF9WNCwgMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RhcnQgZmlsdGVyaW5nIE11bHRpY2FzdCB2NCBwYWNrZXRzCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3RhcnRGaWx0ZXJpbmdNdWx0aWNhc3RWNlBhY2tldHMoKSB7CisgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HLCBNVUxUSUNBU1RfVjYsIDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0b3AgZmlsdGVyaW5nIE11bHRpY2FzdCB2NCBwYWNrZXRzCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3RvcEZpbHRlcmluZ011bHRpY2FzdFY2UGFja2V0cygpIHsKKyAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORywgTVVMVElDQVNUX1Y2LCAwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgaGlnaCBwZXJmb3JtYW5jZSBtb2RlIG9mIG9wZXJhdGlvbi4KKyAgICAgKiBFbmFibGluZyB3b3VsZCBzZXQgYWN0aXZlIHBvd2VyIG1vZGUgYW5kIGRpc2FibGUgc3VzcGVuZCBvcHRpbWl6YXRpb25zOworICAgICAqIGRpc2FibGluZyB3b3VsZCBzZXQgYXV0byBwb3dlciBtb2RlIGFuZCBlbmFibGUgc3VzcGVuZCBvcHRpbWl6YXRpb25zCisgICAgICogQHBhcmFtIGVuYWJsZSB0cnVlIGlmIGVuYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0SGlnaFBlcmZNb2RlRW5hYmxlZChib29sZWFuIGVuYWJsZSkgeworICAgICAgICBzZW5kTWVzc2FnZShDTURfU0VUX0hJR0hfUEVSRl9NT0RFLCBlbmFibGUgPyAxIDogMCwgMCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBjb3VudHJ5IGNvZGUKKyAgICAgKiBAcGFyYW0gY291bnRyeUNvZGUgZm9sbG93aW5nIElTTyAzMTY2IGZvcm1hdAorICAgICAqIEBwYXJhbSBwZXJzaXN0IHtAY29kZSB0cnVlfSBpZiB0aGUgc2V0dGluZyBzaG91bGQgYmUgcmVtZW1iZXJlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb3VudHJ5Q29kZShTdHJpbmcgY291bnRyeUNvZGUsIGJvb2xlYW4gcGVyc2lzdCkgeworICAgICAgICBpZiAocGVyc2lzdCkgeworICAgICAgICAgICAgbVBlcnNpc3RlZENvdW50cnlDb2RlID0gY291bnRyeUNvZGU7CisgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwucHV0U3RyaW5nKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9DT1VOVFJZX0NPREUsCisgICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlKTsKKyAgICAgICAgfQorICAgICAgICBzZW5kTWVzc2FnZShDTURfU0VUX0NPVU5UUllfQ09ERSwgY291bnRyeUNvZGUpOworICAgICAgICBtV2lmaVAycENoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaVAycFNlcnZpY2UuU0VUX0NPVU5UUllfQ09ERSwgY291bnRyeUNvZGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgb3BlcmF0aW9uYWwgZnJlcXVlbmN5IGJhbmQKKyAgICAgKiBAcGFyYW0gYmFuZAorICAgICAqIEBwYXJhbSBwZXJzaXN0IHtAY29kZSB0cnVlfSBpZiB0aGUgc2V0dGluZyBzaG91bGQgYmUgcmVtZW1iZXJlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRGcmVxdWVuY3lCYW5kKGludCBiYW5kLCBib29sZWFuIHBlcnNpc3QpIHsKKyAgICAgICAgaWYgKHBlcnNpc3QpIHsKKyAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5wdXRJbnQobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX0ZSRVFVRU5DWV9CQU5ELAorICAgICAgICAgICAgICAgICAgICBiYW5kKTsKKyAgICAgICAgfQorICAgICAgICBzZW5kTWVzc2FnZShDTURfU0VUX0ZSRVFVRU5DWV9CQU5ELCBiYW5kLCAwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbmFibGUgVERMUyBmb3IgYSBzcGVjaWZpYyBNQUMgYWRkcmVzcworICAgICAqLworICAgIHB1YmxpYyB2b2lkIGVuYWJsZVRkbHMoU3RyaW5nIHJlbW90ZU1hY0FkZHJlc3MsIGJvb2xlYW4gZW5hYmxlKSB7CisgICAgICAgIGludCBlbmFibGVyID0gZW5hYmxlID8gMSA6IDA7CisgICAgICAgIHNlbmRNZXNzYWdlKENNRF9FTkFCTEVfVERMUywgZW5hYmxlciwgMCwgcmVtb3RlTWFjQWRkcmVzcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgb3BlcmF0aW9uYWwgZnJlcXVlbmN5IGJhbmQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEZyZXF1ZW5jeUJhbmQoKSB7CisgICAgICAgIHJldHVybiBtRnJlcXVlbmN5QmFuZC5nZXQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB3aWZpIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29uZmlnRmlsZSgpIHsKKyAgICAgICAgcmV0dXJuIG1XaWZpQ29uZmlnU3RvcmUuZ2V0Q29uZmlnRmlsZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNlbmQgYSBtZXNzYWdlIGluZGljYXRpbmcgYmx1ZXRvb3RoIGFkYXB0ZXIgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2VuZEJsdWV0b290aEFkYXB0ZXJTdGF0ZUNoYW5nZShpbnQgc3RhdGUpIHsKKyAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX0JMVUVUT09USF9BREFQVEVSX1NUQVRFX0NIQU5HRSwgc3RhdGUsIDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNhdmUgY29uZmlndXJhdGlvbiBvbiBzdXBwbGljYW50CisgICAgICoKKyAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRzLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQorICAgICAqCisgICAgICogVE9ETzogZGVwcmVjYXRlIHRoaXMKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBzeW5jU2F2ZUNvbmZpZyhBc3luY0NoYW5uZWwgY2hhbm5lbCkgeworICAgICAgICBNZXNzYWdlIHJlc3VsdE1zZyA9IGNoYW5uZWwuc2VuZE1lc3NhZ2VTeW5jaHJvbm91c2x5KENNRF9TQVZFX0NPTkZJRyk7CisgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gKHJlc3VsdE1zZy5hcmcxICE9IEZBSUxVUkUpOworICAgICAgICByZXN1bHRNc2cucmVjeWNsZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUJhdHRlcnlXb3JrU291cmNlKFdvcmtTb3VyY2UgbmV3U291cmNlKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVJ1bm5pbmdXaWZpVWlkcykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpZiAobmV3U291cmNlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbVJ1bm5pbmdXaWZpVWlkcy5zZXQobmV3U291cmNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1Jc1J1bm5pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1SZXBvcnRlZFJ1bm5pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB3b3JrIHNvdXJjZSBoYXMgY2hhbmdlZCBzaW5jZSBsYXN0IHRpbWUsIG5lZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHJlbW92ZSBvbGQgd29yayBmcm9tIGJhdHRlcnkgc3RhdHMuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUxhc3RSdW5uaW5nV2lmaVVpZHMuZGlmZihtUnVubmluZ1dpZmlVaWRzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZVdpZmlSdW5uaW5nQ2hhbmdlZChtTGFzdFJ1bm5pbmdXaWZpVWlkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SdW5uaW5nV2lmaVVpZHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1MYXN0UnVubmluZ1dpZmlVaWRzLnNldChtUnVubmluZ1dpZmlVaWRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBiZWluZyBzdGFydGVkLCByZXBvcnQgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpUnVubmluZyhtUnVubmluZ1dpZmlVaWRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1MYXN0UnVubmluZ1dpZmlVaWRzLnNldChtUnVubmluZ1dpZmlVaWRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1SZXBvcnRlZFJ1bm5pbmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1SZXBvcnRlZFJ1bm5pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIExhc3QgcmVwb3J0ZWQgd2Ugd2VyZSBydW5uaW5nLCB0aW1lIHRvIHN0b3AuCisgICAgICAgICAgICAgICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpU3RvcHBlZChtTGFzdFJ1bm5pbmdXaWZpVWlkcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtTGFzdFJ1bm5pbmdXaWZpVWlkcy5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICAgICAgbVJlcG9ydGVkUnVubmluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1XYWtlTG9jay5zZXRXb3JrU291cmNlKG5ld1NvdXJjZSk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gaWdub3JlKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBkdW1wKEZpbGVEZXNjcmlwdG9yIGZkLCBQcmludFdyaXRlciBwdywgU3RyaW5nW10gYXJncykgeworICAgICAgICBzdXBlci5kdW1wKGZkLCBwdywgYXJncyk7CisgICAgICAgIG1TdXBwbGljYW50U3RhdGVUcmFja2VyLmR1bXAoZmQsIHB3LCBhcmdzKTsKKyAgICAgICAgcHcucHJpbnRsbigibUxpbmtQcm9wZXJ0aWVzICIgKyBtTGlua1Byb3BlcnRpZXMpOworICAgICAgICBwdy5wcmludGxuKCJtV2lmaUluZm8gIiArIG1XaWZpSW5mbyk7CisgICAgICAgIHB3LnByaW50bG4oIm1EaGNwUmVzdWx0cyAiICsgbURoY3BSZXN1bHRzKTsKKyAgICAgICAgcHcucHJpbnRsbigibU5ldHdvcmtJbmZvICIgKyBtTmV0d29ya0luZm8pOworICAgICAgICBwdy5wcmludGxuKCJtTGFzdFNpZ25hbExldmVsICIgKyBtTGFzdFNpZ25hbExldmVsKTsKKyAgICAgICAgcHcucHJpbnRsbigibUxhc3RCc3NpZCAiICsgbUxhc3RCc3NpZCk7CisgICAgICAgIHB3LnByaW50bG4oIm1MYXN0TmV0d29ya0lkICIgKyBtTGFzdE5ldHdvcmtJZCk7CisgICAgICAgIHB3LnByaW50bG4oIm1SZWNvbm5lY3RDb3VudCAiICsgbVJlY29ubmVjdENvdW50KTsKKyAgICAgICAgcHcucHJpbnRsbigibU9wZXJhdGlvbmFsTW9kZSAiICsgbU9wZXJhdGlvbmFsTW9kZSk7CisgICAgICAgIHB3LnByaW50bG4oIm1Vc2VyV2FudHNTdXNwZW5kT3B0ICIgKyBtVXNlcldhbnRzU3VzcGVuZE9wdCk7CisgICAgICAgIHB3LnByaW50bG4oIm1TdXNwZW5kT3B0TmVlZHNEaXNhYmxlZCAiICsgbVN1c3BlbmRPcHROZWVkc0Rpc2FibGVkKTsKKyAgICAgICAgcHcucHJpbnRsbigiU3VwcGxpY2FudCBzdGF0dXMgIiArIG1XaWZpTmF0aXZlLnN0YXR1cygpKTsKKyAgICAgICAgcHcucHJpbnRsbigibUVuYWJsZUJhY2tncm91bmRTY2FuICIgKyBtRW5hYmxlQmFja2dyb3VuZFNjYW4pOworICAgICAgICBwdy5wcmludGxuKCk7CisgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZHVtcChmZCwgcHcsIGFyZ3MpOworICAgIH0KKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBJbnRlcm5hbCBwcml2YXRlIGZ1bmN0aW9ucworICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVTY3JlZW5TdGF0ZUNoYW5nZWQoYm9vbGVhbiBzY3JlZW5PbikgeworICAgICAgICBpZiAoREJHKSBsb2coImhhbmRsZVNjcmVlblN0YXRlQ2hhbmdlZDogIiArIHNjcmVlbk9uKTsKKyAgICAgICAgZW5hYmxlUnNzaVBvbGxpbmcoc2NyZWVuT24pOworICAgICAgICBpZiAobUJhY2tncm91bmRTY2FuU3VwcG9ydGVkKSB7CisgICAgICAgICAgICBlbmFibGVCYWNrZ3JvdW5kU2NhbkNvbW1hbmQoc2NyZWVuT24gPT0gZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNjcmVlbk9uKSBlbmFibGVBbGxOZXR3b3JrcygpOworICAgICAgICBpZiAobVVzZXJXYW50c1N1c3BlbmRPcHQuZ2V0KCkpIHsKKyAgICAgICAgICAgIGlmIChzY3JlZW5PbikgeworICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TRVRfU1VTUEVORF9PUFRfRU5BQkxFRCwgMCwgMCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vQWxsb3cgMnMgZm9yIHN1c3BlbmQgb3B0aW1pemF0aW9ucyB0byBiZSBzZXQKKyAgICAgICAgICAgICAgICBtU3VzcGVuZFdha2VMb2NrLmFjcXVpcmUoMjAwMCk7CisgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NFVF9TVVNQRU5EX09QVF9FTkFCTEVELCAxLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtU2NyZWVuQnJvYWRjYXN0UmVjZWl2ZWQuc2V0KHRydWUpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjaGVja0FuZFNldENvbm5lY3Rpdml0eUluc3RhbmNlKCkgeworICAgICAgICBpZiAobUNtID09IG51bGwpIHsKKyAgICAgICAgICAgIG1DbSA9IChDb25uZWN0aXZpdHlNYW5hZ2VyKSBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQ09OTkVDVElWSVRZX1NFUlZJQ0UpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIHN0YXJ0VGV0aGVyaW5nKEFycmF5TGlzdDxTdHJpbmc+IGF2YWlsYWJsZSkgeworCisgICAgICAgIGJvb2xlYW4gd2lmaUF2YWlsYWJsZSA9IGZhbHNlOworCisgICAgICAgIGNoZWNrQW5kU2V0Q29ubmVjdGl2aXR5SW5zdGFuY2UoKTsKKworICAgICAgICBTdHJpbmdbXSB3aWZpUmVnZXhzID0gbUNtLmdldFRldGhlcmFibGVXaWZpUmVnZXhzKCk7CisKKyAgICAgICAgZm9yIChTdHJpbmcgaW50ZiA6IGF2YWlsYWJsZSkgeworICAgICAgICAgICAgZm9yIChTdHJpbmcgcmVnZXggOiB3aWZpUmVnZXhzKSB7CisgICAgICAgICAgICAgICAgaWYgKGludGYubWF0Y2hlcyhyZWdleCkpIHsKKworICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2VDb25maWd1cmF0aW9uIGlmY2cgPSBudWxsOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWZjZyA9IG1Od1NlcnZpY2UuZ2V0SW50ZXJmYWNlQ29uZmlnKGludGYpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlmY2cgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQL25ldG1hc2s6IDE5Mi4xNjguNDMuMS8yNTUuMjU1LjI1NS4wICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZjZy5zZXRMaW5rQWRkcmVzcyhuZXcgTGlua0FkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrVXRpbHMubnVtZXJpY1RvSW5ldEFkZHJlc3MoIjE5Mi4xNjguNDMuMSIpLCAyNCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmY2cuc2V0SW50ZXJmYWNlVXAoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Od1NlcnZpY2Uuc2V0SW50ZXJmYWNlQ29uZmlnKGludGYsIGlmY2cpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRXJyb3IgY29uZmlndXJpbmcgaW50ZXJmYWNlICIgKyBpbnRmICsgIiwgOiIgKyBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmKG1DbS50ZXRoZXIoaW50ZikgIT0gQ29ubmVjdGl2aXR5TWFuYWdlci5URVRIRVJfRVJST1JfTk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkVycm9yIHRldGhlcmluZyBvbiAiICsgaW50Zik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbVRldGhlckludGVyZmFjZU5hbWUgPSBpbnRmOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgZm91bmQgbm8gaW50ZXJmYWNlcyB0byB0ZXRoZXIKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzdG9wVGV0aGVyaW5nKCkgeworCisgICAgICAgIGNoZWNrQW5kU2V0Q29ubmVjdGl2aXR5SW5zdGFuY2UoKTsKKworICAgICAgICAvKiBDbGVhciB0aGUgaW50ZXJmYWNlIGNvbmZpZyB0byBhbGxvdyBkaGNwIGNvcnJlY3RseSBjb25maWd1cmUgbmV3CisgICAgICAgICAgIGlwIHNldHRpbmdzICovCisgICAgICAgIEludGVyZmFjZUNvbmZpZ3VyYXRpb24gaWZjZyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZmNnID0gbU53U2VydmljZS5nZXRJbnRlcmZhY2VDb25maWcobVRldGhlckludGVyZmFjZU5hbWUpOworICAgICAgICAgICAgaWYgKGlmY2cgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmY2cuc2V0TGlua0FkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGlua0FkZHJlc3MoTmV0d29ya1V0aWxzLm51bWVyaWNUb0luZXRBZGRyZXNzKCIwLjAuMC4wIiksIDApKTsKKyAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLnNldEludGVyZmFjZUNvbmZpZyhtVGV0aGVySW50ZXJmYWNlTmFtZSwgaWZjZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2dlKCJFcnJvciByZXNldHRpbmcgaW50ZXJmYWNlICIgKyBtVGV0aGVySW50ZXJmYWNlTmFtZSArICIsIDoiICsgZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobUNtLnVudGV0aGVyKG1UZXRoZXJJbnRlcmZhY2VOYW1lKSAhPSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRFVEhFUl9FUlJPUl9OT19FUlJPUikgeworICAgICAgICAgICAgbG9nZSgiVW50ZXRoZXIgaW5pdGlhdGUgZmFpbGVkISIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGlzV2lmaVRldGhlcmVkKEFycmF5TGlzdDxTdHJpbmc+IGFjdGl2ZSkgeworCisgICAgICAgIGNoZWNrQW5kU2V0Q29ubmVjdGl2aXR5SW5zdGFuY2UoKTsKKworICAgICAgICBTdHJpbmdbXSB3aWZpUmVnZXhzID0gbUNtLmdldFRldGhlcmFibGVXaWZpUmVnZXhzKCk7CisgICAgICAgIGZvciAoU3RyaW5nIGludGYgOiBhY3RpdmUpIHsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIHJlZ2V4IDogd2lmaVJlZ2V4cykgeworICAgICAgICAgICAgICAgIGlmIChpbnRmLm1hdGNoZXMocmVnZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBXZSBmb3VuZCBubyBpbnRlcmZhY2VzIHRoYXQgYXJlIHRldGhlcmVkCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGNvdW50cnkgY29kZSBmcm9tIHRoZSBzeXN0ZW0gc2V0dGluZyB2YWx1ZSwgaWYgYW55LgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBzZXRDb3VudHJ5Q29kZSgpIHsKKyAgICAgICAgU3RyaW5nIGNvdW50cnlDb2RlID0gU2V0dGluZ3MuR2xvYmFsLmdldFN0cmluZyhtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9DT1VOVFJZX0NPREUpOworICAgICAgICBpZiAoY291bnRyeUNvZGUgIT0gbnVsbCAmJiAhY291bnRyeUNvZGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBzZXRDb3VudHJ5Q29kZShjb3VudHJ5Q29kZSwgZmFsc2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy91c2UgZHJpdmVyIGRlZmF1bHQKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgZnJlcXVlbmN5IGJhbmQgZnJvbSB0aGUgc3lzdGVtIHNldHRpbmcgdmFsdWUsIGlmIGFueS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0RnJlcXVlbmN5QmFuZCgpIHsKKyAgICAgICAgaW50IGJhbmQgPSBTZXR0aW5ncy5HbG9iYWwuZ2V0SW50KG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAorICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX0ZSRVFVRU5DWV9CQU5ELCBXaWZpTWFuYWdlci5XSUZJX0ZSRVFVRU5DWV9CQU5EX0FVVE8pOworICAgICAgICBzZXRGcmVxdWVuY3lCYW5kKGJhbmQsIGZhbHNlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0U3VzcGVuZE9wdGltaXphdGlvbnNOYXRpdmUoaW50IHJlYXNvbiwgYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgIGlmIChEQkcpIGxvZygic2V0U3VzcGVuZE9wdGltaXphdGlvbnNOYXRpdmU6ICIgKyByZWFzb24gKyAiICIgKyBlbmFibGVkKTsKKyAgICAgICAgaWYgKGVuYWJsZWQpIHsKKyAgICAgICAgICAgIG1TdXNwZW5kT3B0TmVlZHNEaXNhYmxlZCAmPSB+cmVhc29uOworICAgICAgICAgICAgLyogTm9uZSBvZiBkaGNwLCBzY3JlZW4gb3IgaGlnaHBlcmYgbmVlZCBpdCBkaXNhYmxlZCBhbmQgdXNlciB3YW50cyBpdCBlbmFibGVkICovCisgICAgICAgICAgICBpZiAobVN1c3BlbmRPcHROZWVkc0Rpc2FibGVkID09IDAgJiYgbVVzZXJXYW50c1N1c3BlbmRPcHQuZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRTdXNwZW5kT3B0aW1pemF0aW9ucyh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1TdXNwZW5kT3B0TmVlZHNEaXNhYmxlZCB8PSByZWFzb247CisgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRTdXNwZW5kT3B0aW1pemF0aW9ucyhmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0U3VzcGVuZE9wdGltaXphdGlvbnMoaW50IHJlYXNvbiwgYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgIGlmIChEQkcpIGxvZygic2V0U3VzcGVuZE9wdGltaXphdGlvbnM6ICIgKyByZWFzb24gKyAiICIgKyBlbmFibGVkKTsKKyAgICAgICAgaWYgKGVuYWJsZWQpIHsKKyAgICAgICAgICAgIG1TdXNwZW5kT3B0TmVlZHNEaXNhYmxlZCAmPSB+cmVhc29uOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVN1c3BlbmRPcHROZWVkc0Rpc2FibGVkIHw9IHJlYXNvbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoREJHKSBsb2coIm1TdXNwZW5kT3B0TmVlZHNEaXNhYmxlZCAiICsgbVN1c3BlbmRPcHROZWVkc0Rpc2FibGVkKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0V2lmaVN0YXRlKGludCB3aWZpU3RhdGUpIHsKKyAgICAgICAgZmluYWwgaW50IHByZXZpb3VzV2lmaVN0YXRlID0gbVdpZmlTdGF0ZS5nZXQoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHdpZmlTdGF0ZSA9PSBXSUZJX1NUQVRFX0VOQUJMRUQpIHsKKyAgICAgICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpT24oKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAod2lmaVN0YXRlID09IFdJRklfU1RBVEVfRElTQUJMRUQpIHsKKyAgICAgICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpT2ZmKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gbm90ZSBiYXR0ZXJ5IHN0YXRzIGluIHdpZmkiKTsKKyAgICAgICAgfQorCisgICAgICAgIG1XaWZpU3RhdGUuc2V0KHdpZmlTdGF0ZSk7CisKKyAgICAgICAgaWYgKERCRykgbG9nKCJzZXRXaWZpU3RhdGU6ICIgKyBzeW5jR2V0V2lmaVN0YXRlQnlOYW1lKCkpOworCisgICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLldJRklfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pOworICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX1dJRklfU1RBVEUsIHdpZmlTdGF0ZSk7CisgICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9QUkVWSU9VU19XSUZJX1NUQVRFLCBwcmV2aW91c1dpZmlTdGF0ZSk7CisgICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldFdpZmlBcFN0YXRlKGludCB3aWZpQXBTdGF0ZSkgeworICAgICAgICBmaW5hbCBpbnQgcHJldmlvdXNXaWZpQXBTdGF0ZSA9IG1XaWZpQXBTdGF0ZS5nZXQoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHdpZmlBcFN0YXRlID09IFdJRklfQVBfU1RBVEVfRU5BQkxFRCkgeworICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZVdpZmlPbigpOworICAgICAgICAgICAgfSBlbHNlIGlmICh3aWZpQXBTdGF0ZSA9PSBXSUZJX0FQX1NUQVRFX0RJU0FCTEVEKSB7CisgICAgICAgICAgICAgICAgbUJhdHRlcnlTdGF0cy5ub3RlV2lmaU9mZigpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIG5vdGUgYmF0dGVyeSBzdGF0cyBpbiB3aWZpIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgc3RhdGUKKyAgICAgICAgbVdpZmlBcFN0YXRlLnNldCh3aWZpQXBTdGF0ZSk7CisKKyAgICAgICAgaWYgKERCRykgbG9nKCJzZXRXaWZpQXBTdGF0ZTogIiArIHN5bmNHZXRXaWZpQXBTdGF0ZUJ5TmFtZSgpKTsKKworICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpTWFuYWdlci5XSUZJX0FQX1NUQVRFX0NIQU5HRURfQUNUSU9OKTsKKyAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7CisgICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9XSUZJX0FQX1NUQVRFLCB3aWZpQXBTdGF0ZSk7CisgICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9QUkVWSU9VU19XSUZJX0FQX1NUQVRFLCBwcmV2aW91c1dpZmlBcFN0YXRlKTsKKyAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU1RSID0gImlkPSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJTU0lEX1NUUiA9ICJic3NpZD0iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGUkVRX1NUUiA9ICJmcmVxPSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExFVkVMX1NUUiA9ICJsZXZlbD0iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUU0ZfU1RSID0gInRzZj0iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGTEFHU19TVFIgPSAiZmxhZ3M9IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1NJRF9TVFIgPSAic3NpZD0iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUxJTUlURVJfU1RSID0gIj09PT0iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTkRfU1RSID0gIiMjIyMiOworCisgICAgLyoqCisgICAgICogRm9ybWF0OgorICAgICAqCisgICAgICogaWQ9MQorICAgICAqIGJzc2lkPTY4OjdmOjc2OmQ3OjFhOjZlCisgICAgICogZnJlcT0yNDEyCisgICAgICogbGV2ZWw9LTQ0CisgICAgICogdHNmPTEzNDQ2MjYyNDM3MDAzNDIKKyAgICAgKiBmbGFncz1bV1BBMi1QU0stQ0NNUF1bV1BTXVtFU1NdCisgICAgICogc3NpZD16ZmR5CisgICAgICogPT09PQorICAgICAqIGlkPTIKKyAgICAgKiBic3NpZD02ODo1Zjo3NDpkNzoxYTo2ZgorICAgICAqIGZyZXE9NTE4MAorICAgICAqIGxldmVsPS03MworICAgICAqIHRzZj0xMzQ0NjI2MjQzNzAwMzczCisgICAgICogZmxhZ3M9W1dQQTItUFNLLUNDTVBdW1dQU11bRVNTXQorICAgICAqIHNzaWQ9enVieQorICAgICAqID09PT0KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0U2NhblJlc3VsdHMoKSB7CisgICAgICAgIFN0cmluZyBic3NpZCA9ICIiOworICAgICAgICBpbnQgbGV2ZWwgPSAwOworICAgICAgICBpbnQgZnJlcSA9IDA7CisgICAgICAgIGxvbmcgdHNmID0gMDsKKyAgICAgICAgU3RyaW5nIGZsYWdzID0gIiI7CisgICAgICAgIFdpZmlTc2lkIHdpZmlTc2lkID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIHNjYW5SZXN1bHRzOworICAgICAgICBTdHJpbmcgdG1wUmVzdWx0czsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHNjYW5SZXN1bHRzQnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBpbnQgc2lkID0gMDsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgdG1wUmVzdWx0cyA9IG1XaWZpTmF0aXZlLnNjYW5SZXN1bHRzKHNpZCk7CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkodG1wUmVzdWx0cykpIGJyZWFrOworICAgICAgICAgICAgc2NhblJlc3VsdHNCdWYuYXBwZW5kKHRtcFJlc3VsdHMpOworICAgICAgICAgICAgc2NhblJlc3VsdHNCdWYuYXBwZW5kKCJcbiIpOworICAgICAgICAgICAgU3RyaW5nW10gbGluZXMgPSB0bXBSZXN1bHRzLnNwbGl0KCJcbiIpOworICAgICAgICAgICAgc2lkID0gLTE7CisgICAgICAgICAgICBmb3IgKGludCBpPWxpbmVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVzW2ldLnN0YXJ0c1dpdGgoRU5EX1NUUikpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lc1tpXS5zdGFydHNXaXRoKElEX1NUUikpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZCA9IEludGVnZXIucGFyc2VJbnQobGluZXNbaV0uc3Vic3RyaW5nKElEX1NUUi5sZW5ndGgoKSkpICsgMTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2lkID09IC0xKSBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNjYW5SZXN1bHRzID0gc2NhblJlc3VsdHNCdWYudG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHNjYW5SZXN1bHRzKSkgeworICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBub3RlIHRoYXQgYWxsIHRoZXNlIHNwbGl0cyBhbmQgc3Vic3RyaW5ncyBrZWVwIHJlZmVyZW5jZXMgdG8gdGhlIG9yaWdpbmFsCisgICAgICAgIC8vIGh1Z2Ugc3RyaW5nIGJ1ZmZlciB3aGlsZSB0aGUgYW1vdW50IHdlIHJlYWxseSB3YW50IGlzIGdlbmVyYWxseSBwcmV0dHkgc21hbGwKKyAgICAgICAgLy8gc28gbWFrZSBjb3BpZXMgaW5zdGVhZCAob25lIGV4YW1wbGUgYi8xMTA4Nzk1NiB3YXN0ZWQgNDAwayBvZiBoZWFwIGhlcmUpLgorICAgICAgICBzeW5jaHJvbml6ZWQobVNjYW5SZXN1bHRDYWNoZSkgeworICAgICAgICAgICAgbVNjYW5SZXN1bHRzID0gbmV3IEFycmF5TGlzdDxTY2FuUmVzdWx0PigpOworICAgICAgICAgICAgU3RyaW5nW10gbGluZXMgPSBzY2FuUmVzdWx0cy5zcGxpdCgiXG4iKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBic3NpZFN0ckxlbiA9IEJTU0lEX1NUUi5sZW5ndGgoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBmbGFnTGVuID0gRkxBR1NfU1RSLmxlbmd0aCgpOworCisgICAgICAgICAgICBmb3IgKFN0cmluZyBsaW5lIDogbGluZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKEJTU0lEX1NUUikpIHsKKyAgICAgICAgICAgICAgICAgICAgYnNzaWQgPSBuZXcgU3RyaW5nKGxpbmUuZ2V0Qnl0ZXMoKSwgYnNzaWRTdHJMZW4sIGxpbmUubGVuZ3RoKCkgLSBic3NpZFN0ckxlbik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoRlJFUV9TVFIpKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVxID0gSW50ZWdlci5wYXJzZUludChsaW5lLnN1YnN0cmluZyhGUkVRX1NUUi5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnJlcSA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChMRVZFTF9TVFIpKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IEludGVnZXIucGFyc2VJbnQobGluZS5zdWJzdHJpbmcoTEVWRUxfU1RSLmxlbmd0aCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBzb21lIGltcGxlbWVudGF0aW9ucyBhdm9pZCBuZWdhdGl2ZSB2YWx1ZXMgYnkgYWRkaW5nIDI1NgorICAgICAgICAgICAgICAgICAgICAgICAgICogc28gd2UgbmVlZCB0byBhZGp1c3QgZm9yIHRoYXQgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVsID4gMCkgbGV2ZWwgLT0gMjU2OworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChUU0ZfU1RSKSkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHNmID0gTG9uZy5wYXJzZUxvbmcobGluZS5zdWJzdHJpbmcoVFNGX1NUUi5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHNmID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKEZMQUdTX1NUUikpIHsKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBuZXcgU3RyaW5nKGxpbmUuZ2V0Qnl0ZXMoKSwgZmxhZ0xlbiwgbGluZS5sZW5ndGgoKSAtIGZsYWdMZW4pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKFNTSURfU1RSKSkgeworICAgICAgICAgICAgICAgICAgICB3aWZpU3NpZCA9IFdpZmlTc2lkLmNyZWF0ZUZyb21Bc2NpaUVuY29kZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5zdWJzdHJpbmcoU1NJRF9TVFIubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChERUxJTUlURVJfU1RSKSB8fCBsaW5lLnN0YXJ0c1dpdGgoRU5EX1NUUikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJzc2lkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzc2lkID0gKHdpZmlTc2lkICE9IG51bGwpID8gd2lmaVNzaWQudG9TdHJpbmcoKSA6IFdpZmlTc2lkLk5PTkU7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gYnNzaWQgKyBzc2lkOworICAgICAgICAgICAgICAgICAgICAgICAgU2NhblJlc3VsdCBzY2FuUmVzdWx0ID0gbVNjYW5SZXN1bHRDYWNoZS5nZXQoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2FuUmVzdWx0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuUmVzdWx0LmxldmVsID0gbGV2ZWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhblJlc3VsdC53aWZpU3NpZCA9IHdpZmlTc2lkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEtlZXAgZXhpc3RpbmcgQVBJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhblJlc3VsdC5TU0lEID0gKHdpZmlTc2lkICE9IG51bGwpID8gd2lmaVNzaWQudG9TdHJpbmcoKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpU3NpZC5OT05FOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5SZXN1bHQuY2FwYWJpbGl0aWVzID0gZmxhZ3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhblJlc3VsdC5mcmVxdWVuY3kgPSBmcmVxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5SZXN1bHQudGltZXN0YW1wID0gdHNmOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuUmVzdWx0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNjYW5SZXN1bHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lmaVNzaWQsIGJzc2lkLCBmbGFncywgbGV2ZWwsIGZyZXEsIHRzZik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNjYW5SZXN1bHRDYWNoZS5wdXQoa2V5LCBzY2FuUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1TY2FuUmVzdWx0cy5hZGQoc2NhblJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnNzaWQgPSBudWxsOworICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZyZXEgPSAwOworICAgICAgICAgICAgICAgICAgICB0c2YgPSAwOworICAgICAgICAgICAgICAgICAgICBmbGFncyA9ICIiOworICAgICAgICAgICAgICAgICAgICB3aWZpU3NpZCA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGZXRjaCBSU1NJIGFuZCBsaW5rc3BlZWQgb24gY3VycmVudCBjb25uZWN0aW9uCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGZldGNoUnNzaUFuZExpbmtTcGVlZE5hdGl2ZSgpIHsKKyAgICAgICAgaW50IG5ld1Jzc2kgPSAtMTsKKyAgICAgICAgaW50IG5ld0xpbmtTcGVlZCA9IC0xOworCisgICAgICAgIFN0cmluZyBzaWduYWxQb2xsID0gbVdpZmlOYXRpdmUuc2lnbmFsUG9sbCgpOworCisgICAgICAgIGlmIChzaWduYWxQb2xsICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN0cmluZ1tdIGxpbmVzID0gc2lnbmFsUG9sbC5zcGxpdCgiXG4iKTsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIGxpbmUgOiBsaW5lcykgeworICAgICAgICAgICAgICAgIFN0cmluZ1tdIHByb3AgPSBsaW5lLnNwbGl0KCI9Iik7CisgICAgICAgICAgICAgICAgaWYgKHByb3AubGVuZ3RoIDwgMikgY29udGludWU7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BbMF0uZXF1YWxzKCJSU1NJIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Jzc2kgPSBJbnRlZ2VyLnBhcnNlSW50KHByb3BbMV0pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BbMF0uZXF1YWxzKCJMSU5LU1BFRUQiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV3TGlua1NwZWVkID0gSW50ZWdlci5wYXJzZUludChwcm9wWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vSWdub3JlLCBkZWZhdWx0cyBvbiByc3NpIGFuZCBsaW5rc3BlZWQgYXJlIGFzc2lnbmVkCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG5ld1Jzc2kgIT0gLTEgJiYgTUlOX1JTU0kgPCBuZXdSc3NpICYmIG5ld1Jzc2kgPCBNQVhfUlNTSSkgeyAvLyBzY3JlZW4gb3V0IGludmFsaWQgdmFsdWVzCisgICAgICAgICAgICAvKiBzb21lIGltcGxlbWVudGF0aW9ucyBhdm9pZCBuZWdhdGl2ZSB2YWx1ZXMgYnkgYWRkaW5nIDI1NgorICAgICAgICAgICAgICogc28gd2UgbmVlZCB0byBhZGp1c3QgZm9yIHRoYXQgaGVyZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKG5ld1Jzc2kgPiAwKSBuZXdSc3NpIC09IDI1NjsKKyAgICAgICAgICAgIG1XaWZpSW5mby5zZXRSc3NpKG5ld1Jzc2kpOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFJhdGhlciB0aGVuIHNlbmRpbmcgdGhlIHJhdyBSU1NJIG91dCBldmVyeSB0aW1lIGl0CisgICAgICAgICAgICAgKiBjaGFuZ2VzLCB3ZSBwcmVjYWxjdWxhdGUgdGhlIHNpZ25hbCBsZXZlbCB0aGF0IHdvdWxkCisgICAgICAgICAgICAgKiBiZSBkaXNwbGF5ZWQgaW4gdGhlIHN0YXR1cyBiYXIsIGFuZCBvbmx5IHNlbmQgdGhlCisgICAgICAgICAgICAgKiBicm9hZGNhc3QgaWYgdGhhdCBtdWNoIG1vcmUgY29hcnNlLWdyYWluZWQgbnVtYmVyCisgICAgICAgICAgICAgKiBjaGFuZ2VzLiBUaGlzIGN1dHMgZG93biBncmVhdGx5IG9uIHRoZSBudW1iZXIgb2YKKyAgICAgICAgICAgICAqIGJyb2FkY2FzdHMsIGF0IHRoZSBjb3N0IG9mIG5vdCBpbmZvcm1pbmcgb3RoZXJzCisgICAgICAgICAgICAgKiBpbnRlcmVzdGVkIGluIFJTU0kgb2YgYWxsIHRoZSBjaGFuZ2VzIGluIHNpZ25hbAorICAgICAgICAgICAgICogbGV2ZWwuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGludCBuZXdTaWduYWxMZXZlbCA9IFdpZmlNYW5hZ2VyLmNhbGN1bGF0ZVNpZ25hbExldmVsKG5ld1Jzc2ksIFdpZmlNYW5hZ2VyLlJTU0lfTEVWRUxTKTsKKyAgICAgICAgICAgIGlmIChuZXdTaWduYWxMZXZlbCAhPSBtTGFzdFNpZ25hbExldmVsKSB7CisgICAgICAgICAgICAgICAgc2VuZFJzc2lDaGFuZ2VCcm9hZGNhc3QobmV3UnNzaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtTGFzdFNpZ25hbExldmVsID0gbmV3U2lnbmFsTGV2ZWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtV2lmaUluZm8uc2V0UnNzaShNSU5fUlNTSSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmV3TGlua1NwZWVkICE9IC0xKSB7CisgICAgICAgICAgICBtV2lmaUluZm8uc2V0TGlua1NwZWVkKG5ld0xpbmtTcGVlZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIEZldGNoIFRYIHBhY2tldCBjb3VudGVycyBvbiBjdXJyZW50IGNvbm5lY3Rpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZmV0Y2hQa3RjbnROYXRpdmUoUnNzaVBhY2tldENvdW50SW5mbyBpbmZvKSB7CisgICAgICAgIFN0cmluZyBwa3RjbnRQb2xsID0gbVdpZmlOYXRpdmUucGt0Y250UG9sbCgpOworCisgICAgICAgIGlmIChwa3RjbnRQb2xsICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN0cmluZ1tdIGxpbmVzID0gcGt0Y250UG9sbC5zcGxpdCgiXG4iKTsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIGxpbmUgOiBsaW5lcykgeworICAgICAgICAgICAgICAgIFN0cmluZ1tdIHByb3AgPSBsaW5lLnNwbGl0KCI9Iik7CisgICAgICAgICAgICAgICAgaWYgKHByb3AubGVuZ3RoIDwgMikgY29udGludWU7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BbMF0uZXF1YWxzKCJUWEdPT0QiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5mby50eGdvb2QgPSBJbnRlZ2VyLnBhcnNlSW50KHByb3BbMV0pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BbMF0uZXF1YWxzKCJUWEJBRCIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnR4YmFkID0gSW50ZWdlci5wYXJzZUludChwcm9wWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vSWdub3JlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVXBkYXRlcyBtTGlua1Byb3BlcnRpZXMgYnkgbWVyZ2luZyBpbmZvcm1hdGlvbiBmcm9tIHZhcmlvdXMgc291cmNlcy4KKyAgICAgKgorICAgICAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGluZm9ybWF0aW9uIGluIG1MaW5rUHJvcGVydGllcyBjb21lcyBmcm9tIG11bHRpcGxlIHNvdXJjZXMgKERIQ1AsCisgICAgICogbmV0bGluaywgc3RhdGljIGNvbmZpZ3VyYXRpb24sIC4uLikuIFdoZW4gb25lIG9mIHRoZXNlIHNvdXJjZXMgb2YgaW5mb3JtYXRpb24gaGFzIHVwZGF0ZWQKKyAgICAgKiBsaW5rIHByb3BlcnRpZXMsIHdlIGNhbid0IGp1c3QgYXNzaWduIHRoZW0gdG8gbUxpbmtQcm9wZXJ0aWVzIG9yIHdlJ2QgbG9zZSB0cmFjayBvZiB0aGUKKyAgICAgKiBpbmZvcm1hdGlvbiB0aGF0IGNhbWUgZnJvbSBvdGhlciBzb3VyY2VzLiBJbnN0ZWFkLCB3aGVuIG9uZSBvZiB0aG9zZSBzb3VyY2VzIGhhcyBuZXcKKyAgICAgKiBpbmZvcm1hdGlvbiwgd2UgdXBkYXRlIHRoZSBvYmplY3QgdGhhdCB0cmFja3MgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhhdCBzb3VyY2UgYW5kIHRoZW4KKyAgICAgKiBjYWxsIHRoaXMgbWV0aG9kIHRvIGFwcGx5IHRoZSBjaGFuZ2UgdG8gbUxpbmtQcm9wZXJ0aWVzLgorICAgICAqCisgICAgICogVGhlIGluZm9ybWF0aW9uIGluIG1MaW5rUHJvcGVydGllcyBpcyBjdXJyZW50bHkgb2J0YWluZWQgYXMgZm9sbG93czoKKyAgICAgKiAtIEludGVyZmFjZSBuYW1lOiBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yLgorICAgICAqIC0gSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXM6IG5ldGxpbmssIHZpYSBtSW50ZXJmYWNlT2JzZXJ2ZXIuCisgICAgICogLSBJUHY0IHJvdXRlcywgRE5TIHNlcnZlcnMsIGFuZCBkb21haW5zOiBESENQLgorICAgICAqIC0gSFRUUCBwcm94eTogdGhlIHdpZmkgY29uZmlnIHN0b3JlLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVMaW5rUHJvcGVydGllcygpIHsKKyAgICAgICAgTGlua1Byb3BlcnRpZXMgbmV3THAgPSBuZXcgTGlua1Byb3BlcnRpZXMoKTsKKworICAgICAgICAvLyBJbnRlcmZhY2UgbmFtZSBhbmQgcHJveHkgYXJlIGxvY2FsbHkgY29uZmlndXJlZC4KKyAgICAgICAgbmV3THAuc2V0SW50ZXJmYWNlTmFtZShtSW50ZXJmYWNlTmFtZSk7CisgICAgICAgIG5ld0xwLnNldEh0dHBQcm94eShtV2lmaUNvbmZpZ1N0b3JlLmdldFByb3h5UHJvcGVydGllcyhtTGFzdE5ldHdvcmtJZCkpOworCisgICAgICAgIC8vIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzIGNvbWUgZnJvbSBuZXRsaW5rLgorICAgICAgICBuZXdMcC5zZXRMaW5rQWRkcmVzc2VzKG1OZXRsaW5rTGlua1Byb3BlcnRpZXMuZ2V0TGlua0FkZHJlc3NlcygpKTsKKworICAgICAgICAvLyBGb3Igbm93LCByb3V0aW5nIGFuZCBETlMgb25seSBjb21lIGZyb20gREhDUCBvciBzdGF0aWMgY29uZmlndXJhdGlvbi4gSW4gdGhlIGZ1dHVyZSwKKyAgICAgICAgLy8gd2UnbGwgbmVlZCB0byBtZXJnZSBJUHY2IEROUyBzZXJ2ZXJzIGFuZCBkb21haW5zIGNvbWluZyBmcm9tIG5ldGxpbmsuCisgICAgICAgIHN5bmNocm9uaXplZCAobURoY3BSZXN1bHRzTG9jaykgeworICAgICAgICAgICAgLy8gRXZlbiB3aGVuIHdlJ3JlIHVzaW5nIHN0YXRpYyBjb25maWd1cmF0aW9uLCB3ZSBkb24ndCBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvbmZpZworICAgICAgICAgICAgLy8gc3RvcmUsIGJlY2F1c2Ugc3RhdGljIElQIGNvbmZpZ3VyYXRpb24gYWxzbyBwb3B1bGF0ZXMgbURoY3BSZXN1bHRzLgorICAgICAgICAgICAgaWYgKChtRGhjcFJlc3VsdHMgIT0gbnVsbCkgJiYgKG1EaGNwUmVzdWx0cy5saW5rUHJvcGVydGllcyAhPSBudWxsKSkgeworICAgICAgICAgICAgICAgIExpbmtQcm9wZXJ0aWVzIGxwID0gbURoY3BSZXN1bHRzLmxpbmtQcm9wZXJ0aWVzOworICAgICAgICAgICAgICAgIGZvciAoUm91dGVJbmZvIHJvdXRlOiBscC5nZXRSb3V0ZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBuZXdMcC5hZGRSb3V0ZShyb3V0ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoSW5ldEFkZHJlc3MgZG5zOiBscC5nZXREbnNlcygpKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld0xwLmFkZERucyhkbnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdMcC5zZXREb21haW5zKGxwLmdldERvbWFpbnMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBhbnl0aGluZyBoYXMgY2hhbmdlZCwgYW5kIHdlJ3JlIGFscmVhZHkgY29ubmVjdGVkLCBzZW5kIG91dCBhIG5vdGlmaWNhdGlvbi4KKyAgICAgICAgLy8gSWYgd2UncmUgc3RpbGwgY29ubmVjdGluZywgYXBwcyB3aWxsIGJlIG5vdGlmaWVkIHdoZW4gd2UgY29ubmVjdC4KKyAgICAgICAgaWYgKCFuZXdMcC5lcXVhbHMobUxpbmtQcm9wZXJ0aWVzKSkgeworICAgICAgICAgICAgaWYgKERCRykgeworICAgICAgICAgICAgICAgIGxvZygiTGluayBjb25maWd1cmF0aW9uIGNoYW5nZWQgZm9yIG5ldElkOiAiICsgbUxhc3ROZXR3b3JrSWQKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBvbGQ6ICIgKyBtTGlua1Byb3BlcnRpZXMgKyAibmV3OiAiICsgbmV3THApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUxpbmtQcm9wZXJ0aWVzID0gbmV3THA7CisgICAgICAgICAgICBpZiAoZ2V0TmV0d29ya0RldGFpbGVkU3RhdGUoKSA9PSBEZXRhaWxlZFN0YXRlLkNPTk5FQ1RFRCkgeworICAgICAgICAgICAgICAgIHNlbmRMaW5rQ29uZmlndXJhdGlvbkNoYW5nZWRCcm9hZGNhc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENsZWFycyBhbGwgb3VyIGxpbmsgcHJvcGVydGllcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgY2xlYXJMaW5rUHJvcGVydGllcygpIHsKKyAgICAgICAgLy8gSWYgdGhlIG5ldHdvcmsgdXNlZCBESENQLCBjbGVhciB0aGUgTGlua1Byb3BlcnRpZXMgd2Ugc3RvcmVkIGluIHRoZSBjb25maWcgc3RvcmUuCisgICAgICAgIGlmICghbVdpZmlDb25maWdTdG9yZS5pc1VzaW5nU3RhdGljSXAobUxhc3ROZXR3b3JrSWQpKSB7CisgICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmNsZWFyTGlua1Byb3BlcnRpZXMobUxhc3ROZXR3b3JrSWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xlYXIgdGhlIGxpbmsgcHJvcGVydGllcyBvYnRhaW5lZCBmcm9tIERIQ1AgYW5kIG5ldGxpbmsuCisgICAgICAgIHN5bmNocm9uaXplZChtRGhjcFJlc3VsdHNMb2NrKSB7CisgICAgICAgICAgICBpZiAobURoY3BSZXN1bHRzICE9IG51bGwgJiYgbURoY3BSZXN1bHRzLmxpbmtQcm9wZXJ0aWVzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtRGhjcFJlc3VsdHMubGlua1Byb3BlcnRpZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtTmV0bGlua0xpbmtQcm9wZXJ0aWVzLmNsZWFyKCk7CisKKyAgICAgICAgLy8gTm93IGNsZWFyIHRoZSBtZXJnZWQgbGluayBwcm9wZXJ0aWVzLgorICAgICAgICBtTGlua1Byb3BlcnRpZXMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBnZXRNYXhEaGNwUmV0cmllcygpIHsKKyAgICAgICAgcmV0dXJuIFNldHRpbmdzLkdsb2JhbC5nZXRJbnQobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX01BWF9ESENQX1JFVFJZX0NPVU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX01BWF9ESENQX1JFVFJJRVMpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZW5kU2NhblJlc3VsdHNBdmFpbGFibGVCcm9hZGNhc3QoKSB7CisgICAgICAgIG5vdGVTY2FuRW5kKCk7CisgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLlNDQU5fUkVTVUxUU19BVkFJTEFCTEVfQUNUSU9OKTsKKyAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7CisgICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNlbmRSc3NpQ2hhbmdlQnJvYWRjYXN0KGZpbmFsIGludCBuZXdSc3NpKSB7CisgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLlJTU0lfQ0hBTkdFRF9BQ1RJT04pOworICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX05FV19SU1NJLCBuZXdSc3NpKTsKKyAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2VuZE5ldHdvcmtTdGF0ZUNoYW5nZUJyb2FkY2FzdChTdHJpbmcgYnNzaWQpIHsKKyAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuTkVUV09SS19TVEFURV9DSEFOR0VEX0FDVElPTik7CisgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTkVUV09SS19JTkZPLCBuZXcgTmV0d29ya0luZm8obU5ldHdvcmtJbmZvKSk7CisgICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9MSU5LX1BST1BFUlRJRVMsIG5ldyBMaW5rUHJvcGVydGllcyAobUxpbmtQcm9wZXJ0aWVzKSk7CisgICAgICAgIGlmIChic3NpZCAhPSBudWxsKQorICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX0JTU0lELCBic3NpZCk7CisgICAgICAgIGlmIChtTmV0d29ya0luZm8uZ2V0RGV0YWlsZWRTdGF0ZSgpID09IERldGFpbGVkU3RhdGUuVkVSSUZZSU5HX1BPT1JfTElOSyB8fAorICAgICAgICAgICAgICAgIG1OZXR3b3JrSW5mby5nZXREZXRhaWxlZFN0YXRlKCkgPT0gRGV0YWlsZWRTdGF0ZS5DT05ORUNURUQpIHsKKyAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9XSUZJX0lORk8sIG5ldyBXaWZpSW5mbyhtV2lmaUluZm8pKTsKKyAgICAgICAgfQorICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZW5kTGlua0NvbmZpZ3VyYXRpb25DaGFuZ2VkQnJvYWRjYXN0KCkgeworICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpTWFuYWdlci5MSU5LX0NPTkZJR1VSQVRJT05fQ0hBTkdFRF9BQ1RJT04pOworICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX0xJTktfUFJPUEVSVElFUywgbmV3IExpbmtQcm9wZXJ0aWVzKG1MaW5rUHJvcGVydGllcykpOworICAgICAgICBtQ29udGV4dC5zZW5kQnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZW5kU3VwcGxpY2FudENvbm5lY3Rpb25DaGFuZ2VkQnJvYWRjYXN0KGJvb2xlYW4gY29ubmVjdGVkKSB7CisgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLlNVUFBMSUNBTlRfQ09OTkVDVElPTl9DSEFOR0VfQUNUSU9OKTsKKyAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7CisgICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9TVVBQTElDQU5UX0NPTk5FQ1RFRCwgY29ubmVjdGVkKTsKKyAgICAgICAgbUNvbnRleHQuc2VuZEJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWNvcmQgdGhlIGRldGFpbGVkIHN0YXRlIG9mIGEgbmV0d29yay4KKyAgICAgKiBAcGFyYW0gc3RhdGUgdGhlIG5ldyB7QGNvZGUgRGV0YWlsZWRTdGF0ZX0KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2V0TmV0d29ya0RldGFpbGVkU3RhdGUoTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZSBzdGF0ZSkgeworICAgICAgICBpZiAoREJHKSB7CisgICAgICAgICAgICBsb2coInNldERldGFpbGVkIHN0YXRlLCBvbGQgPSIKKyAgICAgICAgICAgICAgICAgICAgKyBtTmV0d29ya0luZm8uZ2V0RGV0YWlsZWRTdGF0ZSgpICsgIiBhbmQgbmV3IHN0YXRlPSIgKyBzdGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhdGUgIT0gbU5ldHdvcmtJbmZvLmdldERldGFpbGVkU3RhdGUoKSkgeworICAgICAgICAgICAgbU5ldHdvcmtJbmZvLnNldERldGFpbGVkU3RhdGUoc3RhdGUsIG51bGwsIG1XaWZpSW5mby5nZXRTU0lEKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBEZXRhaWxlZFN0YXRlIGdldE5ldHdvcmtEZXRhaWxlZFN0YXRlKCkgeworICAgICAgICByZXR1cm4gbU5ldHdvcmtJbmZvLmdldERldGFpbGVkU3RhdGUoKTsKKyAgICB9CisKKworICAgIHByaXZhdGUgU3VwcGxpY2FudFN0YXRlIGhhbmRsZVN1cHBsaWNhbnRTdGF0ZUNoYW5nZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgU3RhdGVDaGFuZ2VSZXN1bHQgc3RhdGVDaGFuZ2VSZXN1bHQgPSAoU3RhdGVDaGFuZ2VSZXN1bHQpIG1lc3NhZ2Uub2JqOworICAgICAgICBTdXBwbGljYW50U3RhdGUgc3RhdGUgPSBzdGF0ZUNoYW5nZVJlc3VsdC5zdGF0ZTsKKyAgICAgICAgLy8gU3VwcGxpY2FudCBzdGF0ZSBjaGFuZ2UKKyAgICAgICAgLy8gWzMxLTEzXSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQorICAgICAgICAvLyBbOCAtIDBdIFN1cHBsaWNhbnQgc3RhdGUgKGFzIGRlZmluZWQgaW4gU3VwcGxpY2FudFN0YXRlLmphdmEpCisgICAgICAgIC8vIDUwMDIzIHN1cHBsaWNhbnRfc3RhdGVfY2hhbmdlZCAoY3VzdG9tfDF8NSkKKyAgICAgICAgbVdpZmlJbmZvLnNldFN1cHBsaWNhbnRTdGF0ZShzdGF0ZSk7CisgICAgICAgIC8vIE5ldHdvcmsgaWQgaXMgb25seSB2YWxpZCB3aGVuIHdlIHN0YXJ0IGNvbm5lY3RpbmcKKyAgICAgICAgaWYgKFN1cHBsaWNhbnRTdGF0ZS5pc0Nvbm5lY3Rpbmcoc3RhdGUpKSB7CisgICAgICAgICAgICBtV2lmaUluZm8uc2V0TmV0d29ya0lkKHN0YXRlQ2hhbmdlUmVzdWx0Lm5ldHdvcmtJZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtV2lmaUluZm8uc2V0TmV0d29ya0lkKFdpZmlDb25maWd1cmF0aW9uLklOVkFMSURfTkVUV09SS19JRCk7CisgICAgICAgIH0KKworICAgICAgICBtV2lmaUluZm8uc2V0QlNTSUQoc3RhdGVDaGFuZ2VSZXN1bHQuQlNTSUQpOworICAgICAgICBtV2lmaUluZm8uc2V0U1NJRChzdGF0ZUNoYW5nZVJlc3VsdC53aWZpU3NpZCk7CisKKyAgICAgICAgbVN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIuc2VuZE1lc3NhZ2UoTWVzc2FnZS5vYnRhaW4obWVzc2FnZSkpOworCisgICAgICAgIHJldHVybiBzdGF0ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXNldHMgdGhlIFdpLUZpIENvbm5lY3Rpb25zIGJ5IGNsZWFyaW5nIGFueSBzdGF0ZSwgcmVzZXR0aW5nIGFueSBzb2NrZXRzCisgICAgICogdXNpbmcgdGhlIGludGVyZmFjZSwgc3RvcHBpbmcgREhDUCAmIGRpc2FibGluZyBpbnRlcmZhY2UKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgaGFuZGxlTmV0d29ya0Rpc2Nvbm5lY3QoKSB7CisgICAgICAgIGlmIChEQkcpIGxvZygiU3RvcHBpbmcgREhDUCBhbmQgY2xlYXJpbmcgSVAiKTsKKworICAgICAgICBzdG9wRGhjcCgpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtTndTZXJ2aWNlLmNsZWFySW50ZXJmYWNlQWRkcmVzc2VzKG1JbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgICAgIG1Od1NlcnZpY2UuZGlzYWJsZUlwdjYobUludGVyZmFjZU5hbWUpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGNsZWFyIGFkZHJlc3NlcyBvciBkaXNhYmxlIGlwdjYiICsgZSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBSZXNldCBkYXRhIHN0cnVjdHVyZXMgKi8KKyAgICAgICAgbVdpZmlJbmZvLnNldEluZXRBZGRyZXNzKG51bGwpOworICAgICAgICBtV2lmaUluZm8uc2V0QlNTSUQobnVsbCk7CisgICAgICAgIG1XaWZpSW5mby5zZXRTU0lEKG51bGwpOworICAgICAgICBtV2lmaUluZm8uc2V0TmV0d29ya0lkKFdpZmlDb25maWd1cmF0aW9uLklOVkFMSURfTkVUV09SS19JRCk7CisgICAgICAgIG1XaWZpSW5mby5zZXRSc3NpKE1JTl9SU1NJKTsKKyAgICAgICAgbVdpZmlJbmZvLnNldExpbmtTcGVlZCgtMSk7CisgICAgICAgIG1XaWZpSW5mby5zZXRNZXRlcmVkSGludChmYWxzZSk7CisKKyAgICAgICAgc2V0TmV0d29ya0RldGFpbGVkU3RhdGUoRGV0YWlsZWRTdGF0ZS5ESVNDT05ORUNURUQpOworICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLnVwZGF0ZVN0YXR1cyhtTGFzdE5ldHdvcmtJZCwgRGV0YWlsZWRTdGF0ZS5ESVNDT05ORUNURUQpOworCisgICAgICAgIC8qIENsZWFyIG5ldHdvcmsgcHJvcGVydGllcyAqLworICAgICAgICBjbGVhckxpbmtQcm9wZXJ0aWVzKCk7CisKKyAgICAgICAgLyogc2VuZCBldmVudCB0byBDTSAmIG5ldHdvcmsgY2hhbmdlIGJyb2FkY2FzdCAqLworICAgICAgICBzZW5kTmV0d29ya1N0YXRlQ2hhbmdlQnJvYWRjYXN0KG1MYXN0QnNzaWQpOworCisgICAgICAgIG1MYXN0QnNzaWQ9IG51bGw7CisgICAgICAgIG1MYXN0TmV0d29ya0lkID0gV2lmaUNvbmZpZ3VyYXRpb24uSU5WQUxJRF9ORVRXT1JLX0lEOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVTdXBwbGljYW50Q29ubmVjdGlvbkxvc3MoKSB7CisgICAgICAgIC8qIFNvY2tldCBjb25uZWN0aW9uIGNhbiBiZSBsb3N0IHdoZW4gd2UgZG8gYSBncmFjZWZ1bCBzaHV0ZG93bgorICAgICAgICAqIG9yIHdoZW4gdGhlIGRyaXZlciBpcyBodW5nLiBFbnN1cmUgc3VwcGxpY2FudCBpcyBzdG9wcGVkIGhlcmUuCisgICAgICAgICovCisgICAgICAgIG1XaWZpTW9uaXRvci5raWxsU3VwcGxpY2FudChtUDJwU3VwcG9ydGVkKTsKKyAgICAgICAgc2VuZFN1cHBsaWNhbnRDb25uZWN0aW9uQ2hhbmdlZEJyb2FkY2FzdChmYWxzZSk7CisgICAgICAgIHNldFdpZmlTdGF0ZShXSUZJX1NUQVRFX0RJU0FCTEVEKTsKKyAgICB9CisKKyAgICB2b2lkIGhhbmRsZVByZURoY3BTZXR1cCgpIHsKKyAgICAgICAgbURoY3BBY3RpdmUgPSB0cnVlOworICAgICAgICBpZiAoIW1CbHVldG9vdGhDb25uZWN0aW9uQWN0aXZlKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGhlcmUgYXJlIHByb2JsZW1zIHNldHRpbmcgdGhlIFdpLUZpIGRyaXZlcidzIHBvd2VyCisgICAgICAgICAgICAgKiBtb2RlIHRvIGFjdGl2ZSB3aGVuIGJsdWV0b290aCBjb2V4aXN0ZW5jZSBtb2RlIGlzCisgICAgICAgICAgICAgKiBlbmFibGVkIG9yIHNlbnNlLgorICAgICAgICAgICAgICogPHA+CisgICAgICAgICAgICAgKiBXZSBzZXQgV2ktRmkgdG8gYWN0aXZlIG1vZGUgd2hlbgorICAgICAgICAgICAgICogb2J0YWluaW5nIGFuIElQIGFkZHJlc3MgYmVjYXVzZSB3ZSd2ZSBmb3VuZAorICAgICAgICAgICAgICogY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBzb21lIHJvdXRlcnMgd2l0aCBsb3cgcG93ZXIKKyAgICAgICAgICAgICAqIG1vZGUuCisgICAgICAgICAgICAgKiA8cD4KKyAgICAgICAgICAgICAqIEluIG9yZGVyIGZvciB0aGlzIGFjdGl2ZSBwb3dlciBtb2RlIHRvIHByb3Blcmx5IGJlIHNldCwKKyAgICAgICAgICAgICAqIHdlIGRpc2FibGUgY29leGlzdGVuY2UgbW9kZSB1bnRpbCB3ZSdyZSBkb25lIHdpdGgKKyAgICAgICAgICAgICAqIG9idGFpbmluZyBhbiBJUCBhZGRyZXNzLiAgT25lIGV4Y2VwdGlvbiBpcyBpZiB3ZQorICAgICAgICAgICAgICogYXJlIGN1cnJlbnRseSBjb25uZWN0ZWQgdG8gYSBoZWFkc2V0LCBzaW5jZSBkaXNhYmxpbmcKKyAgICAgICAgICAgICAqIGNvZXhpc3RlbmNlIHdvdWxkIGludGVycnVwdCB0aGF0IGNvbm5lY3Rpb24uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8vIERpc2FibGUgdGhlIGNvZXhpc3RlbmNlIG1vZGUKKyAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNldEJsdWV0b290aENvZXhpc3RlbmNlTW9kZSgKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuQkxVRVRPT1RIX0NPRVhJU1RFTkNFX01PREVfRElTQUJMRUQpOworICAgICAgICB9CisKKyAgICAgICAgLyogRGlzYWJsZSBwb3dlciBzYXZlIGFuZCBzdXNwZW5kIG9wdGltaXphdGlvbnMgZHVyaW5nIERIQ1AgKi8KKyAgICAgICAgLy8gTm90ZTogVGhlIG9yZGVyIGhlcmUgaXMgaW1wb3J0YW50IGZvciBub3cuIEJyY20gZHJpdmVyIGNoYW5nZXMKKyAgICAgICAgLy8gcG93ZXIgc2V0dGluZ3Mgd2hlbiB3ZSBjb250cm9sIHN1c3BlbmQgbW9kZSBvcHRpbWl6YXRpb25zLgorICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBjb21tZW50IHdoZW4gdGhlIGRyaXZlciBpcyBmaXhlZC4KKyAgICAgICAgc2V0U3VzcGVuZE9wdGltaXphdGlvbnNOYXRpdmUoU1VTUEVORF9EVUVfVE9fREhDUCwgZmFsc2UpOworICAgICAgICBtV2lmaU5hdGl2ZS5zZXRQb3dlclNhdmUoZmFsc2UpOworCisgICAgICAgIHN0b3BCYXRjaGVkU2NhbigpOworCisgICAgICAgIC8qIFAycCBkaXNjb3ZlcnkgYnJlYWtzIGRoY3AsIHNodXQgaXQgZG93biBpbiBvcmRlciB0byBnZXQgdGhyb3VnaCB0aGlzICovCisgICAgICAgIE1lc3NhZ2UgbXNnID0gbmV3IE1lc3NhZ2UoKTsKKyAgICAgICAgbXNnLndoYXQgPSBXaWZpUDJwU2VydmljZS5CTE9DS19ESVNDT1ZFUlk7CisgICAgICAgIG1zZy5hcmcxID0gV2lmaVAycFNlcnZpY2UuRU5BQkxFRDsKKyAgICAgICAgbXNnLmFyZzIgPSBEaGNwU3RhdGVNYWNoaW5lLkNNRF9QUkVfREhDUF9BQ1RJT05fQ09NUExFVEU7CisgICAgICAgIG1zZy5vYmogPSBtRGhjcFN0YXRlTWFjaGluZTsKKyAgICAgICAgbVdpZmlQMnBDaGFubmVsLnNlbmRNZXNzYWdlKG1zZyk7CisgICAgfQorCisKKyAgICB2b2lkIHN0YXJ0RGhjcCgpIHsKKyAgICAgICAgaWYgKG1EaGNwU3RhdGVNYWNoaW5lID09IG51bGwpIHsKKyAgICAgICAgICAgIG1EaGNwU3RhdGVNYWNoaW5lID0gRGhjcFN0YXRlTWFjaGluZS5tYWtlRGhjcFN0YXRlTWFjaGluZSgKKyAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQsIFdpZmlTdGF0ZU1hY2hpbmUudGhpcywgbUludGVyZmFjZU5hbWUpOworCisgICAgICAgIH0KKyAgICAgICAgbURoY3BTdGF0ZU1hY2hpbmUucmVnaXN0ZXJGb3JQcmVEaGNwTm90aWZpY2F0aW9uKCk7CisgICAgICAgIG1EaGNwU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKERoY3BTdGF0ZU1hY2hpbmUuQ01EX1NUQVJUX0RIQ1ApOworICAgIH0KKworICAgIHZvaWQgc3RvcERoY3AoKSB7CisgICAgICAgIGlmIChtRGhjcFN0YXRlTWFjaGluZSAhPSBudWxsKSB7CisgICAgICAgICAgICAvKiBJbiBjYXNlIHdlIHdlcmUgaW4gbWlkZGxlIG9mIERIQ1Agb3BlcmF0aW9uIHJlc3RvcmUgYmFjayBwb3dlcm1vZGUgKi8KKyAgICAgICAgICAgIGhhbmRsZVBvc3REaGNwU2V0dXAoKTsKKyAgICAgICAgICAgIG1EaGNwU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKERoY3BTdGF0ZU1hY2hpbmUuQ01EX1NUT1BfREhDUCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGhhbmRsZVBvc3REaGNwU2V0dXAoKSB7CisgICAgICAgIC8qIFJlc3RvcmUgcG93ZXIgc2F2ZSBhbmQgc3VzcGVuZCBvcHRpbWl6YXRpb25zICovCisgICAgICAgIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zTmF0aXZlKFNVU1BFTkRfRFVFX1RPX0RIQ1AsIHRydWUpOworICAgICAgICBtV2lmaU5hdGl2ZS5zZXRQb3dlclNhdmUodHJ1ZSk7CisKKyAgICAgICAgbVdpZmlQMnBDaGFubmVsLnNlbmRNZXNzYWdlKFdpZmlQMnBTZXJ2aWNlLkJMT0NLX0RJU0NPVkVSWSwgV2lmaVAycFNlcnZpY2UuRElTQUJMRUQpOworCisgICAgICAgIC8vIFNldCB0aGUgY29leGlzdGVuY2UgbW9kZSBiYWNrIHRvIGl0cyBkZWZhdWx0IHZhbHVlCisgICAgICAgIG1XaWZpTmF0aXZlLnNldEJsdWV0b290aENvZXhpc3RlbmNlTW9kZSgKKyAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5CTFVFVE9PVEhfQ09FWElTVEVOQ0VfTU9ERV9TRU5TRSk7CisKKyAgICAgICAgbURoY3BBY3RpdmUgPSBmYWxzZTsKKworICAgICAgICBzdGFydEJhdGNoZWRTY2FuKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVN1Y2Nlc3NmdWxJcENvbmZpZ3VyYXRpb24oRGhjcFJlc3VsdHMgZGhjcFJlc3VsdHMpIHsKKyAgICAgICAgbUxhc3RTaWduYWxMZXZlbCA9IC0xOyAvLyBmb3JjZSB1cGRhdGUgb2Ygc2lnbmFsIHN0cmVuZ3RoCisgICAgICAgIG1SZWNvbm5lY3RDb3VudCA9IDA7IC8vUmVzZXQgSVAgZmFpbHVyZSB0cmFja2luZworICAgICAgICBzeW5jaHJvbml6ZWQgKG1EaGNwUmVzdWx0c0xvY2spIHsKKyAgICAgICAgICAgIG1EaGNwUmVzdWx0cyA9IGRoY3BSZXN1bHRzOworICAgICAgICB9CisgICAgICAgIExpbmtQcm9wZXJ0aWVzIGxpbmtQcm9wZXJ0aWVzID0gZGhjcFJlc3VsdHMubGlua1Byb3BlcnRpZXM7CisgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuc2V0TGlua1Byb3BlcnRpZXMobUxhc3ROZXR3b3JrSWQsIG5ldyBMaW5rUHJvcGVydGllcyhsaW5rUHJvcGVydGllcykpOworICAgICAgICBJbmV0QWRkcmVzcyBhZGRyID0gbnVsbDsKKyAgICAgICAgSXRlcmF0b3I8SW5ldEFkZHJlc3M+IGFkZHJzID0gbGlua1Byb3BlcnRpZXMuZ2V0QWRkcmVzc2VzKCkuaXRlcmF0b3IoKTsKKyAgICAgICAgaWYgKGFkZHJzLmhhc05leHQoKSkgeworICAgICAgICAgICAgYWRkciA9IGFkZHJzLm5leHQoKTsKKyAgICAgICAgfQorICAgICAgICBtV2lmaUluZm8uc2V0SW5ldEFkZHJlc3MoYWRkcik7CisgICAgICAgIG1XaWZpSW5mby5zZXRNZXRlcmVkSGludChkaGNwUmVzdWx0cy5oYXNNZXRlcmVkSGludCgpKTsKKyAgICAgICAgdXBkYXRlTGlua1Byb3BlcnRpZXMoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaGFuZGxlRmFpbGVkSXBDb25maWd1cmF0aW9uKCkgeworICAgICAgICBsb2dlKCJJUCBjb25maWd1cmF0aW9uIGZhaWxlZCIpOworCisgICAgICAgIG1XaWZpSW5mby5zZXRJbmV0QWRkcmVzcyhudWxsKTsKKyAgICAgICAgbVdpZmlJbmZvLnNldE1ldGVyZWRIaW50KGZhbHNlKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzIGZvciBESENQCisgICAgICAgICAqIHRvIGEgZ2l2ZW4gbmV0d29yaywgZGlzYWJsZSB0aGUgbmV0d29yaworICAgICAgICAgKi8KKyAgICAgICAgaW50IG1heFJldHJpZXMgPSBnZXRNYXhEaGNwUmV0cmllcygpOworICAgICAgICAvLyBtYXhSZXRyaWVzID09IDAgbWVhbnMga2VlcCB0cnlpbmcgZm9yZXZlcgorICAgICAgICBpZiAobWF4UmV0cmllcyA+IDAgJiYgKyttUmVjb25uZWN0Q291bnQgPiBtYXhSZXRyaWVzKSB7CisgICAgICAgICAgICBsb2dlKCJGYWlsZWQgIiArCisgICAgICAgICAgICAgICAgICAgIG1SZWNvbm5lY3RDb3VudCArICIgdGltZXMsIERpc2FibGluZyAiICsgbUxhc3ROZXR3b3JrSWQpOworICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5kaXNhYmxlTmV0d29yayhtTGFzdE5ldHdvcmtJZCwKKyAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uRElTQUJMRURfREhDUF9GQUlMVVJFKTsKKyAgICAgICAgICAgIG1SZWNvbm5lY3RDb3VudCA9IDA7CisgICAgICAgIH0KKworICAgICAgICAvKiBESENQIHRpbWVzIG91dCBhZnRlciBhYm91dCAzMCBzZWNvbmRzLCB3ZSBkbyBhCisgICAgICAgICAqIGRpc2Nvbm5lY3QgYW5kIGFuIGltbWVkaWF0ZSByZWNvbm5lY3QgdG8gdHJ5IGFnYWluCisgICAgICAgICAqLworICAgICAgICBtV2lmaU5hdGl2ZS5kaXNjb25uZWN0KCk7CisgICAgICAgIG1XaWZpTmF0aXZlLnJlY29ubmVjdCgpOworICAgIH0KKworICAgIC8qIEN1cnJlbnQgZGVzaWduIGlzIHRvIG5vdCBzZXQgdGhlIGNvbmZpZyBvbiBhIHJ1bm5pbmcgaG9zdGFwZCBidXQgaW5zdGVhZAorICAgICAqIHN0b3AgYW5kIHN0YXJ0IHRldGhlcmluZyB3aGVuIHVzZXIgY2hhbmdlcyBjb25maWcgb24gYSBydW5uaW5nIGFjY2VzcyBwb2ludAorICAgICAqCisgICAgICogVE9ETzogQWRkIGNvbnRyb2wgY2hhbm5lbCBzZXR1cCB0aHJvdWdoIGhvc3RhcGQgdGhhdCBhbGxvd3MgY2hhbmdpbmcgY29uZmlnCisgICAgICogb24gYSBydW5uaW5nIGRhZW1vbgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBzdGFydFNvZnRBcFdpdGhDb25maWcoZmluYWwgV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnKSB7CisgICAgICAgIC8vIHN0YXJ0IGhvc3RhcGQgb24gYSBzZXBlcmF0ZSB0aHJlYWQKKyAgICAgICAgbmV3IFRocmVhZChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgbU53U2VydmljZS5zdGFydEFjY2Vzc1BvaW50KGNvbmZpZywgbUludGVyZmFjZU5hbWUpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkV4Y2VwdGlvbiBpbiBzb2Z0YXAgc3RhcnQgIiArIGUpOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgbU53U2VydmljZS5zdG9wQWNjZXNzUG9pbnQobUludGVyZmFjZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgbU53U2VydmljZS5zdGFydEFjY2Vzc1BvaW50KGNvbmZpZywgbUludGVyZmFjZU5hbWUpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkV4Y2VwdGlvbiBpbiBzb2Z0YXAgcmUtc3RhcnQgIiArIGUxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFSVF9BUF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIlNvZnQgQVAgc3RhcnQgc3VjY2Vzc2Z1bCIpOworICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFSVF9BUF9TVUNDRVNTKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSkuc3RhcnQoKTsKKyAgICB9CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBIU00gc3RhdGVzCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgICBjbGFzcyBEZWZhdWx0U3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBBc3luY0NoYW5uZWwuQ01EX0NIQU5ORUxfSEFMRl9DT05ORUNURUQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gQXN5bmNDaGFubmVsLlNUQVRVU19TVUNDRVNTRlVMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaVAycENoYW5uZWwuc2VuZE1lc3NhZ2UoQXN5bmNDaGFubmVsLkNNRF9DSEFOTkVMX0ZVTExfQ09OTkVDVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJXaWZpUDJwU2VydmljZSBjb25uZWN0aW9uIGZhaWx1cmUsIGVycm9yPSIgKyBtZXNzYWdlLmFyZzEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQXN5bmNDaGFubmVsLkNNRF9DSEFOTkVMX0RJU0NPTk5FQ1RFRDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZSgiV2lmaVAycFNlcnZpY2UgY2hhbm5lbCBsb3N0LCBtZXNzYWdlLmFyZzEgPSIgKyBtZXNzYWdlLmFyZzEpOworICAgICAgICAgICAgICAgICAgICAvL1RPRE86IFJlLWVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHN0YXRlIG1hY2hpbmUgYWZ0ZXIgYSBkZWxheQorICAgICAgICAgICAgICAgICAgICAvL21XaWZpUDJwQ2hhbm5lbC5jb25uZWN0KG1Db250ZXh0LCBnZXRIYW5kbGVyKCksIG1XaWZpUDJwTWFuYWdlci5nZXRNZXNzZW5nZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX0JMVUVUT09USF9BREFQVEVSX1NUQVRFX0NIQU5HRToKKyAgICAgICAgICAgICAgICAgICAgbUJsdWV0b290aENvbm5lY3Rpb25BY3RpdmUgPSAobWVzc2FnZS5hcmcxICE9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmx1ZXRvb3RoQWRhcHRlci5TVEFURV9ESVNDT05ORUNURUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgLyogU3luY2hyb25vdXMgY2FsbCByZXR1cm5zICovCisgICAgICAgICAgICAgICAgY2FzZSBDTURfUElOR19TVVBQTElDQU5UOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX0VOQUJMRV9ORVRXT1JLOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX0FERF9PUl9VUERBVEVfTkVUV09SSzoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9SRU1PVkVfTkVUV09SSzoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TQVZFX0NPTkZJRzoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgbWVzc2FnZS53aGF0LCBGQUlMVVJFKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfR0VUX0NPTkZJR1VSRURfTkVUV09SS1M6CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2Uud2hhdCwgKExpc3Q8V2lmaUNvbmZpZ3VyYXRpb24+KSBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfRU5BQkxFX1JTU0lfUE9MTDoKKyAgICAgICAgICAgICAgICAgICAgbUVuYWJsZVJzc2lQb2xsaW5nID0gKG1lc3NhZ2UuYXJnMSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfRU5BQkxFX0JBQ0tHUk9VTkRfU0NBTjoKKyAgICAgICAgICAgICAgICAgICAgbUVuYWJsZUJhY2tncm91bmRTY2FuID0gKG1lc3NhZ2UuYXJnMSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0hJR0hfUEVSRl9NT0RFOgorICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zKFNVU1BFTkRfRFVFX1RPX0hJR0hfUEVSRiwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VzcGVuZE9wdGltaXphdGlvbnMoU1VTUEVORF9EVUVfVE9fSElHSF9QRVJGLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9CT09UX0NPTVBMRVRFRDoKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvdW50cnlDb2RlID0gbVBlcnNpc3RlZENvdW50cnlDb2RlOworICAgICAgICAgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoY291bnRyeUNvZGUpID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwucHV0U3RyaW5nKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9DT1VOVFJZX0NPREUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IG1heSBiZSB0aGF0IHRoZSBzdGF0ZSB0cmFuc2l0aW9uIHRoYXQgc2hvdWxkIHNlbmQgdGhpcyBpbmZvCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgZHJpdmVyIGhhcHBlbmVkIGJldHdlZW4gbVBlcnNpc3RlZENvdW50cnlDb2RlIGdldHRpbmcgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbm93LCBzbyBzaW1wbHkgcGVyc2lzdGluZyBpdCBoZXJlIHdvdWxkIG1lYW4gd2UgaGF2ZSBzZW50CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3RoaW5nIHRvIHRoZSBkcml2ZXIuICBTZW5kIHRoZSBjbWQgc28gaXQgbWlnaHQgYmUgc2V0IG5vdy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlQXRGcm9udE9mUXVldWUoQ01EX1NFVF9DT1VOVFJZX0NPREUsIGNvdW50cnlDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQkFUQ0hFRF9TQ0FOOgorICAgICAgICAgICAgICAgICAgICByZWNvcmRCYXRjaGVkU2NhblNldHRpbmdzKG1lc3NhZ2UuYXJnMSwgbWVzc2FnZS5hcmcyLCAoQnVuZGxlKW1lc3NhZ2Uub2JqKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfUE9MTF9CQVRDSEVEX1NDQU46CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUJhdGNoZWRTY2FuUG9sbFJlcXVlc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfTkVYVF9CQVRDSEVEX1NDQU46CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0TmV4dEJhdGNoZWRTY2FuKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAvKiBEaXNjYXJkICovCisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU0NBTjoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TVVBQTElDQU5UOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1NVUFBMSUNBTlRfRkFJTEVEOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0RSSVZFUjoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0RSSVZFUjoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9ERUxBWUVEX1NUT1BfRFJJVkVSOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RSSVZFUl9TVEFSVF9USU1FRF9PVVQ6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVA6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVBfU1VDQ0VTUzoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUF9GQUlMVVJFOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfQVA6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfVEVUSEVSX1NUQVRFX0NIQU5HRToKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9URVRIRVJfTk9USUZJQ0FUSU9OX1RJTUVEX09VVDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9ESVNDT05ORUNUOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFQ09OTkVDVDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUFTU09DSUFURToKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUxPQURfVExTX0FORF9SRUNPTk5FQ1Q6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBfQ09OTkVDVElPTl9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9ESVNDT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19DT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU0NBTl9SRVNVTFRTX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5BVVRIRU5USUNBVElPTl9GQUlMVVJFX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVNTT0NJQVRJT05fUkVKRUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuV1BTX09WRVJMQVBfRVZFTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfQkxBQ0tMSVNUX05FVFdPUks6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfQ0xFQVJfQkxBQ0tMSVNUOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9DT1VOVFJZX0NPREU6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JTU0lfUE9MTDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9FTkFCTEVfQUxMX05FVFdPUktTOgorICAgICAgICAgICAgICAgIGNhc2UgRGhjcFN0YXRlTWFjaGluZS5DTURfUFJFX0RIQ1BfQUNUSU9OOgorICAgICAgICAgICAgICAgIGNhc2UgRGhjcFN0YXRlTWFjaGluZS5DTURfUE9TVF9ESENQX0FDVElPTjoKKyAgICAgICAgICAgICAgICAvKiBIYW5kbGVkIGJ5IFdpZmlBcENvbmZpZ1N0b3JlICovCisgICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0FQX0NPTkZJRzoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQVBfQ09ORklHX0NPTVBMRVRFRDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9SRVFVRVNUX0FQX0NPTkZJRzoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9SRVNQT05TRV9BUF9DT05GSUc6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUuUE9PUl9MSU5LX0RFVEVDVEVEOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lLkdPT0RfTElOS19ERVRFQ1RFRDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9OT19ORVRXT1JLU19QRVJJT0RJQ19TQ0FOOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RJU0FCTEVfUDJQX1JTUDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBEaGNwU3RhdGVNYWNoaW5lLkNNRF9PTl9RVUlUOgorICAgICAgICAgICAgICAgICAgICBtRGhjcFN0YXRlTWFjaGluZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9TVVNQRU5EX09QVF9FTkFCTEVEOgorICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdXNwZW5kV2FrZUxvY2sucmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VzcGVuZE9wdGltaXphdGlvbnMoU1VTUEVORF9EVUVfVE9fU0NSRUVOLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zKFNVU1BFTkRfRFVFX1RPX1NDUkVFTiwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuRFJJVkVSX0hVTkdfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIHNldFN1cHBsaWNhbnRSdW5uaW5nKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0U3VwcGxpY2FudFJ1bm5pbmcodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuQ09OTkVDVF9ORVRXT1JLOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5DT05ORUNUX05FVFdPUktfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkJVU1kpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkZPUkdFVF9ORVRXT1JLOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5GT1JHRVRfTkVUV09SS19GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuQlVTWSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuU0FWRV9ORVRXT1JLOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5TQVZFX05FVFdPUktfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkJVU1kpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNUQVJUX1dQUzoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5CVVNZKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5DQU5DRUxfV1BTOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5DQU5DRUxfV1BTX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5CVVNZKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5ESVNBQkxFX05FVFdPUks6CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLkRJU0FCTEVfTkVUV09SS19GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuQlVTWSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuUlNTSV9QS1RDTlRfRkVUQ0g6CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLlJTU0lfUEtUQ05UX0ZFVENIX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5CVVNZKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwU2VydmljZS5QMlBfQ09OTkVDVElPTl9DSEFOR0VEOgorICAgICAgICAgICAgICAgICAgICBOZXR3b3JrSW5mbyBpbmZvID0gKE5ldHdvcmtJbmZvKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgbVAycENvbm5lY3RlZC5zZXQoaW5mby5pc0Nvbm5lY3RlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwU2VydmljZS5ESVNDT05ORUNUX1dJRklfUkVRVUVTVDoKKyAgICAgICAgICAgICAgICAgICAgbVRlbXBvcmFyaWx5RGlzY29ubmVjdFdpZmkgPSAobWVzc2FnZS5hcmcxID09IDEpOworICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwU2VydmljZS5ESVNDT05ORUNUX1dJRklfUkVTUE9OU0UpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9JUF9BRERSRVNTX1VQREFURUQ6CisgICAgICAgICAgICAgICAgICAgIC8vIGFkZExpbmtBZGRyZXNzIGlzIGEgbm8tb3AgaWYgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggdGhlIHNhbWUgYWRkcmVzcy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1OZXRsaW5rTGlua1Byb3BlcnRpZXMuYWRkTGlua0FkZHJlc3MoKExpbmtBZGRyZXNzKSBtZXNzYWdlLm9iaikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUxpbmtQcm9wZXJ0aWVzKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfSVBfQUREUkVTU19SRU1PVkVEOgorICAgICAgICAgICAgICAgICAgICBpZiAobU5ldGxpbmtMaW5rUHJvcGVydGllcy5yZW1vdmVMaW5rQWRkcmVzcygoTGlua0FkZHJlc3MpIG1lc3NhZ2Uub2JqKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTGlua1Byb3BlcnRpZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBsb2dlKCJFcnJvciEgdW5oYW5kbGVkIG1lc3NhZ2UiICsgbWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBJbml0aWFsU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgIG1XaWZpTmF0aXZlLnVubG9hZERyaXZlcigpOworCisgICAgICAgICAgICBpZiAobVdpZmlQMnBDaGFubmVsID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtV2lmaVAycENoYW5uZWwgPSBuZXcgQXN5bmNDaGFubmVsKCk7CisgICAgICAgICAgICAgICAgbVdpZmlQMnBDaGFubmVsLmNvbm5lY3QobUNvbnRleHQsIGdldEhhbmRsZXIoKSwgbVdpZmlQMnBNYW5hZ2VyLmdldE1lc3NlbmdlcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1XaWZpQXBDb25maWdDaGFubmVsID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtV2lmaUFwQ29uZmlnQ2hhbm5lbCA9IG5ldyBBc3luY0NoYW5uZWwoKTsKKyAgICAgICAgICAgICAgICBXaWZpQXBDb25maWdTdG9yZSB3aWZpQXBDb25maWdTdG9yZSA9IFdpZmlBcENvbmZpZ1N0b3JlLm1ha2VXaWZpQXBDb25maWdTdG9yZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LCBnZXRIYW5kbGVyKCkpOworICAgICAgICAgICAgICAgIHdpZmlBcENvbmZpZ1N0b3JlLmxvYWRBcENvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAgICAgICAgICBtV2lmaUFwQ29uZmlnQ2hhbm5lbC5jb25uZWN0U3luYyhtQ29udGV4dCwgZ2V0SGFuZGxlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgd2lmaUFwQ29uZmlnU3RvcmUuZ2V0TWVzc2VuZ2VyKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU1VQUExJQ0FOVDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLmxvYWREcml2ZXIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLndpZmlGaXJtd2FyZVJlbG9hZChtSW50ZXJmYWNlTmFtZSwgIlNUQSIpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gcmVsb2FkIFNUQSBmaXJtd2FyZSAiICsgZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHJ1bnRpbWUgY3Jhc2ggY2FuIGxlYXZlIHRoZSBpbnRlcmZhY2UgdXAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBhZmZlY3RzIGNvbm5lY3Rpdml0eSB3aGVuIHN1cHBsaWNhbnQgc3RhcnRzIHVwLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBpbnRlcmZhY2UgaXMgZG93biBiZWZvcmUgYSBzdXBwbGljYW50IHN0YXJ0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Od1NlcnZpY2Uuc2V0SW50ZXJmYWNlRG93bihtSW50ZXJmYWNlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHByaXZhY3kgZXh0ZW5zaW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Od1NlcnZpY2Uuc2V0SW50ZXJmYWNlSXB2NlByaXZhY3lFeHRlbnNpb25zKG1JbnRlcmZhY2VOYW1lLCB0cnVlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSVB2NiBpcyBlbmFibGVkIG9ubHkgYXMgbG9uZyBhcyBhY2Nlc3MgcG9pbnQgaXMgY29ubmVjdGVkIHNpbmNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBJUHY2IGFkZHJlc3NlcyBhbmQgcm91dGVzIHN0aWNrIGFyb3VuZCBhZnRlciBkaXNjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtIGtlcm5lbCBpcyB1bmF3YXJlIHdoZW4gY29ubmVjdGVkIGFuZCBmYWlscyB0byBzdGFydCBJUHY2IG5lZ290aWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtIGtlcm5lbCBjYW4gc3RhcnQgYXV0b2NvbmZpZ3VyYXRpb24gd2hlbiA4MDIuMXggaXMgbm90IGNvbXBsZXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU53U2VydmljZS5kaXNhYmxlSXB2NihtSW50ZXJmYWNlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJVbmFibGUgdG8gY2hhbmdlIGludGVyZmFjZSBzZXR0aW5nczogIiArIHJlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlVuYWJsZSB0byBjaGFuZ2UgaW50ZXJmYWNlIHNldHRpbmdzOiAiICsgaWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0b3AgYSBydW5uaW5nIHN1cHBsaWNhbnQgYWZ0ZXIgYSBydW50aW1lIHJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICogQXZvaWRzIGlzc3VlcyB3aXRoIGRyaXZlcnMgdGhhdCBkbyBub3QgaGFuZGxlIGludGVyZmFjZSBkb3duCisgICAgICAgICAgICAgICAgICAgICAgICAqIG9uIGEgcnVubmluZyBzdXBwbGljYW50IHByb3Blcmx5LgorICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTW9uaXRvci5raWxsU3VwcGxpY2FudChtUDJwU3VwcG9ydGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1XaWZpTmF0aXZlLnN0YXJ0U3VwcGxpY2FudChtUDJwU3VwcG9ydGVkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFdpZmlTdGF0ZShXSUZJX1NUQVRFX0VOQUJMSU5HKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIlN1cHBsaWNhbnQgc3RhcnQgc3VjY2Vzc2Z1bCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTW9uaXRvci5zdGFydE1vbml0b3JpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVN1cHBsaWNhbnRTdGFydGluZ1N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHN0YXJ0IHN1cHBsaWNhbnQhIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gbG9hZCBkcml2ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLmxvYWREcml2ZXIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2V0V2lmaUFwU3RhdGUoV0lGSV9BUF9TVEFURV9FTkFCTElORyk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVNvZnRBcFN0YXJ0aW5nU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGxvYWQgZHJpdmVyIGZvciBzb2Z0YXAiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgU3VwcGxpY2FudFN0YXJ0aW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIHByaXZhdGUgdm9pZCBpbml0aWFsaXplV3BzRGV0YWlscygpIHsKKyAgICAgICAgICAgIFN0cmluZyBkZXRhaWw7CisgICAgICAgICAgICBkZXRhaWwgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldCgicm8ucHJvZHVjdC5uYW1lIiwgIiIpOworICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXREZXZpY2VOYW1lKGRldGFpbCkpIHsKKyAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IGRldmljZSBuYW1lICIgKyAgZGV0YWlsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRldGFpbCA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0KCJyby5wcm9kdWN0Lm1hbnVmYWN0dXJlciIsICIiKTsKKyAgICAgICAgICAgIGlmICghbVdpZmlOYXRpdmUuc2V0TWFudWZhY3R1cmVyKGRldGFpbCkpIHsKKyAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IG1hbnVmYWN0dXJlciAiICsgZGV0YWlsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRldGFpbCA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0KCJyby5wcm9kdWN0Lm1vZGVsIiwgIiIpOworICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXRNb2RlbE5hbWUoZGV0YWlsKSkgeworICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXQgbW9kZWwgbmFtZSAiICsgZGV0YWlsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRldGFpbCA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0KCJyby5wcm9kdWN0Lm1vZGVsIiwgIiIpOworICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXRNb2RlbE51bWJlcihkZXRhaWwpKSB7CisgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHNldCBtb2RlbCBudW1iZXIgIiArIGRldGFpbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXRhaWwgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldCgicm8uc2VyaWFsbm8iLCAiIik7CisgICAgICAgICAgICBpZiAoIW1XaWZpTmF0aXZlLnNldFNlcmlhbE51bWJlcihkZXRhaWwpKSB7CisgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHNldCBzZXJpYWwgbnVtYmVyICIgKyBkZXRhaWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXRDb25maWdNZXRob2RzKCJwaHlzaWNhbF9kaXNwbGF5IHZpcnR1YWxfcHVzaF9idXR0b24iKSkgeworICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXQgV1BTIGNvbmZpZyBtZXRob2RzIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1XaWZpTmF0aXZlLnNldERldmljZVR5cGUobVByaW1hcnlEZXZpY2VUeXBlKSkgeworICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXQgcHJpbWFyeSBkZXZpY2UgdHlwZSAiICsgbVByaW1hcnlEZXZpY2VUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9DT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIlN1cHBsaWNhbnQgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCIpOworICAgICAgICAgICAgICAgICAgICBzZXRXaWZpU3RhdGUoV0lGSV9TVEFURV9FTkFCTEVEKTsKKyAgICAgICAgICAgICAgICAgICAgbVN1cHBsaWNhbnRSZXN0YXJ0Q291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgc3VwcGxpY2FudCBzdGF0ZSB0byBpbmRpY2F0ZSB0aGUgc3VwcGxpY2FudAorICAgICAgICAgICAgICAgICAgICAgKiBzdGF0ZSBpcyBub3Qga25vd24gYXQgdGhpcyB0aW1lICovCisgICAgICAgICAgICAgICAgICAgIG1TdXBwbGljYW50U3RhdGVUcmFja2VyLnNlbmRNZXNzYWdlKENNRF9SRVNFVF9TVVBQTElDQU5UX1NUQVRFKTsKKyAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBkYXRhIHN0cnVjdHVyZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgbUxhc3RCc3NpZCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIG1MYXN0TmV0d29ya0lkID0gV2lmaUNvbmZpZ3VyYXRpb24uSU5WQUxJRF9ORVRXT1JLX0lEOworICAgICAgICAgICAgICAgICAgICBtTGFzdFNpZ25hbExldmVsID0gLTE7CisKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlJbmZvLnNldE1hY0FkZHJlc3MobVdpZmlOYXRpdmUuZ2V0TWFjQWRkcmVzcygpKTsKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5sb2FkQW5kRW5hYmxlQWxsTmV0d29ya3MoKTsKKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVdwc0RldGFpbHMoKTsKKworICAgICAgICAgICAgICAgICAgICBzZW5kU3VwcGxpY2FudENvbm5lY3Rpb25DaGFuZ2VkQnJvYWRjYXN0KHRydWUpOworICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURyaXZlclN0YXJ0ZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQX0RJU0NPTk5FQ1RJT05fRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIGlmICgrK21TdXBwbGljYW50UmVzdGFydENvdW50IDw9IFNVUFBMSUNBTlRfUkVTVEFSVF9UUklFUykgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHNldHVwIGNvbnRyb2wgY2hhbm5lbCwgcmVzdGFydCBzdXBwbGljYW50Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU1vbml0b3Iua2lsbFN1cHBsaWNhbnQobVAycFN1cHBvcnRlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluaXRpYWxTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQoQ01EX1NUQVJUX1NVUFBMSUNBTlQsIFNVUFBMSUNBTlRfUkVTVEFSVF9JTlRFUlZBTF9NU0VDUyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgIiArIG1TdXBwbGljYW50UmVzdGFydENvdW50ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0aW1lcyB0byBzdGFydCBzdXBwbGljYW50LCB1bmxvYWQgZHJpdmVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICBtU3VwcGxpY2FudFJlc3RhcnRDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRXaWZpU3RhdGUoV0lGSV9TVEFURV9VTktOT1dOKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5pdGlhbFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TVVBQTElDQU5UOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0FQOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0RSSVZFUjoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0RSSVZFUjoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQ09VTlRSWV9DT0RFOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9GUkVRVUVOQ1lfQkFORDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORzoKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFN1cHBsaWNhbnRTdGFydGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgIC8qIFdpZmkgaXMgYXZhaWxhYmxlIGFzIGxvbmcgYXMgd2UgaGF2ZSBhIGNvbm5lY3Rpb24gdG8gc3VwcGxpY2FudCAqLworICAgICAgICAgICAgbU5ldHdvcmtJbmZvLnNldElzQXZhaWxhYmxlKHRydWUpOworCisgICAgICAgICAgICBpbnQgZGVmYXVsdEludGVydmFsID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcigKKyAgICAgICAgICAgICAgICAgICAgUi5pbnRlZ2VyLmNvbmZpZ193aWZpX3N1cHBsaWNhbnRfc2Nhbl9pbnRlcnZhbCk7CisKKyAgICAgICAgICAgIG1TdXBwbGljYW50U2NhbkludGVydmFsTXMgPSBTZXR0aW5ncy5HbG9iYWwuZ2V0TG9uZyhtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfU1VQUExJQ0FOVF9TQ0FOX0lOVEVSVkFMX01TLAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SW50ZXJ2YWwpOworCisgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRTY2FuSW50ZXJ2YWwoKGludCltU3VwcGxpY2FudFNjYW5JbnRlcnZhbE1zIC8gMTAwMCk7CisgICAgICAgIH0KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVDogICAvKiBTdXBwbGljYW50IHN0b3BwZWQgYnkgdXNlciAqLworICAgICAgICAgICAgICAgICAgICBpZiAobVAycFN1cHBvcnRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1XYWl0Rm9yUDJwRGlzYWJsZVN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtU3VwcGxpY2FudFN0b3BwaW5nU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQX0RJU0NPTk5FQ1RJT05fRVZFTlQ6ICAvKiBTdXBwbGljYW50IGNvbm5lY3Rpb24gbG9zdCAqLworICAgICAgICAgICAgICAgICAgICBsb2dlKCJDb25uZWN0aW9uIGxvc3QsIHJlc3RhcnQgc3VwcGxpY2FudCIpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdXBwbGljYW50Q29ubmVjdGlvbkxvc3MoKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya0Rpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgbVN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIuc2VuZE1lc3NhZ2UoQ01EX1JFU0VUX1NVUFBMSUNBTlRfU1RBVEUpOworICAgICAgICAgICAgICAgICAgICBpZiAobVAycFN1cHBvcnRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1XYWl0Rm9yUDJwRGlzYWJsZVN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5pdGlhbFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQoQ01EX1NUQVJUX1NVUFBMSUNBTlQsIFNVUFBMSUNBTlRfUkVTVEFSVF9JTlRFUlZBTF9NU0VDUyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU0NBTl9SRVNVTFRTX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBzZXRTY2FuUmVzdWx0cygpOworICAgICAgICAgICAgICAgICAgICBzZW5kU2NhblJlc3VsdHNBdmFpbGFibGVCcm9hZGNhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgbVNjYW5SZXN1bHRJc1BlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfUElOR19TVVBQTElDQU5UOgorICAgICAgICAgICAgICAgICAgICBib29sZWFuIG9rID0gbVdpZmlOYXRpdmUucGluZygpOworICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBtZXNzYWdlLndoYXQsIG9rID8gU1VDQ0VTUyA6IEZBSUxVUkUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgLyogQ2Fubm90IHN0YXJ0IHNvZnQgQVAgd2hpbGUgaW4gY2xpZW50IG1vZGUgKi8KKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHN0YXJ0IHNvZnQgQVAgd2l0aCBhIHJ1bm5pbmcgc3VwcGxpY2FudCIpOworICAgICAgICAgICAgICAgICAgICBzZXRXaWZpQXBTdGF0ZShXSUZJX0FQX1NUQVRFX0ZBSUxFRCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgorICAgICAgICAgICAgICAgICAgICBtT3BlcmF0aW9uYWxNb2RlID0gbWVzc2FnZS5hcmcxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgeworICAgICAgICAgICAgbU5ldHdvcmtJbmZvLnNldElzQXZhaWxhYmxlKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFN1cHBsaWNhbnRTdG9wcGluZ1N0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgICAgICAvKiBTZW5kIGFueSByZXNldCBjb21tYW5kcyB0byBzdXBwbGljYW50IGJlZm9yZSBzaHV0dGluZyBpdCBkb3duICovCisgICAgICAgICAgICBoYW5kbGVOZXR3b3JrRGlzY29ubmVjdCgpOworICAgICAgICAgICAgaWYgKG1EaGNwU3RhdGVNYWNoaW5lICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtRGhjcFN0YXRlTWFjaGluZS5kb1F1aXQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKERCRykgbG9nKCJzdG9wcGluZyBzdXBwbGljYW50Iik7CisgICAgICAgICAgICBtV2lmaU1vbml0b3Iuc3RvcFN1cHBsaWNhbnQoKTsKKworICAgICAgICAgICAgLyogU2VuZCBvdXJzZWx2ZXMgYSBkZWxheWVkIG1lc3NhZ2UgdG8gaW5kaWNhdGUgZmFpbHVyZSBhZnRlciBhIHdhaXQgdGltZSAqLworICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX1NUT1BfU1VQUExJQ0FOVF9GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICsrbVN1cHBsaWNhbnRTdG9wRmFpbHVyZVRva2VuLCAwKSwgU1VQUExJQ0FOVF9SRVNUQVJUX0lOVEVSVkFMX01TRUNTKTsKKyAgICAgICAgICAgIHNldFdpZmlTdGF0ZShXSUZJX1NUQVRFX0RJU0FCTElORyk7CisgICAgICAgICAgICBtU3VwcGxpY2FudFN0YXRlVHJhY2tlci5zZW5kTWVzc2FnZShDTURfUkVTRVRfU1VQUExJQ0FOVF9TVEFURSk7CisgICAgICAgIH0KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQX0NPTk5FQ1RJT05fRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlN1cHBsaWNhbnQgY29ubmVjdGlvbiByZWNlaXZlZCB3aGlsZSBzdG9wcGluZyIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9ESVNDT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIlN1cHBsaWNhbnQgY29ubmVjdGlvbiBsb3N0Iik7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZVN1cHBsaWNhbnRDb25uZWN0aW9uTG9zcygpOworICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluaXRpYWxTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVF9GQUlMRUQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gbVN1cHBsaWNhbnRTdG9wRmFpbHVyZVRva2VuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJUaW1lZCBvdXQgb24gYSBzdXBwbGljYW50IHN0b3AsIGtpbGwgYW5kIHByb2NlZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVN1cHBsaWNhbnRDb25uZWN0aW9uTG9zcygpOworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Jbml0aWFsU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NVUFBMSUNBTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9TVVBQTElDQU5UOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0FQOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfQVA6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9DT1VOVFJZX0NPREU6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkc6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HOgorICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgRHJpdmVyU3RhcnRpbmdTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVRyaWVzOworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgICAgICBtVHJpZXMgPSAxOworICAgICAgICAgICAgLyogU2VuZCBvdXJzZWx2ZXMgYSBkZWxheWVkIG1lc3NhZ2UgdG8gc3RhcnQgZHJpdmVyIGEgc2Vjb25kIHRpbWUgKi8KKyAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChvYnRhaW5NZXNzYWdlKENNRF9EUklWRVJfU1RBUlRfVElNRURfT1VULAorICAgICAgICAgICAgICAgICAgICAgICAgKyttRHJpdmVyU3RhcnRUb2tlbiwgMCksIERSSVZFUl9TVEFSVF9USU1FX09VVF9NU0VDUyk7CisgICAgICAgIH0KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgU3VwcGxpY2FudFN0YXRlIHN0YXRlID0gaGFuZGxlU3VwcGxpY2FudFN0YXRlQ2hhbmdlKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICAvKiBJZiBzdXBsaWNhbnQgaXMgZXhpdGluZyBvdXQgb2YgSU5URVJGQUNFX0RJU0FCTEVEIHN0YXRlIGludG8KKyAgICAgICAgICAgICAgICAgICAgICogYSBzdGF0ZSB0aGF0IGluZGljYXRlcyBkcml2ZXIgaGFzIHN0YXJ0ZWQsIGl0IGlzIHJlYWR5IHRvCisgICAgICAgICAgICAgICAgICAgICAqIHJlY2VpdmUgZHJpdmVyIGNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBpZiAoU3VwcGxpY2FudFN0YXRlLmlzRHJpdmVyQWN0aXZlKHN0YXRlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ecml2ZXJTdGFydGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RSSVZFUl9TVEFSVF9USU1FRF9PVVQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gbURyaXZlclN0YXJ0VG9rZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtVHJpZXMgPj0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzdGFydCBkcml2ZXIgYWZ0ZXIgIiArIG1Ucmllcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ecml2ZXJTdG9wcGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJEcml2ZXIgc3RhcnQgZmFpbGVkLCByZXRyeWluZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XYWtlTG9jay5hY3F1aXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhcnREcml2ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2FrZUxvY2sucmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyttVHJpZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBvdXJzZWx2ZXMgYSBkZWxheWVkIG1lc3NhZ2UgdG8gc3RhcnQgZHJpdmVyIGFnYWluICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX0RSSVZFUl9TVEFSVF9USU1FRF9PVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyttRHJpdmVyU3RhcnRUb2tlbiwgMCksIERSSVZFUl9TVEFSVF9USU1FX09VVF9NU0VDUyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIC8qIFF1ZXVlIGRyaXZlciBjb21tYW5kcyAmIGNvbm5lY3Rpb24gZXZlbnRzICovCisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19DT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLkFTU09DSUFUSU9OX1JFSkVDVElPTl9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLldQU19PVkVSTEFQX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9DT1VOVFJZX0NPREU6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkc6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NDQU46CisgICAgICAgICAgICAgICAgY2FzZSBDTURfRElTQ09OTkVDVDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUFTU09DSUFURToKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUNPTk5FQ1Q6CisgICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBEcml2ZXJTdGFydGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgIG1Jc1J1bm5pbmcgPSB0cnVlOworICAgICAgICAgICAgbUluRGVsYXllZFN0b3AgPSBmYWxzZTsKKyAgICAgICAgICAgIG1EZWxheWVkU3RvcENvdW50ZXIrKzsKKyAgICAgICAgICAgIHVwZGF0ZUJhdHRlcnlXb3JrU291cmNlKG51bGwpOworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBFbmFibGUgYmx1ZXRvb3RoIGNvZXhpc3RlbmNlIHNjYW4gbW9kZSB3aGVuIGJsdWV0b290aCBjb25uZWN0aW9uIGlzIGFjdGl2ZS4KKyAgICAgICAgICAgICAqIFdoZW4gdGhpcyBtb2RlIGlzIG9uLCBzb21lIG9mIHRoZSBsb3ctbGV2ZWwgc2NhbiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlCisgICAgICAgICAgICAgKiBkcml2ZXIgYXJlIGNoYW5nZWQgdG8gcmVkdWNlIGludGVyZmVyZW5jZSB3aXRoIGJsdWV0b290aAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRCbHVldG9vdGhDb2V4aXN0ZW5jZVNjYW5Nb2RlKG1CbHVldG9vdGhDb25uZWN0aW9uQWN0aXZlKTsKKyAgICAgICAgICAgIC8qIHNldCBjb3VudHJ5IGNvZGUgKi8KKyAgICAgICAgICAgIHNldENvdW50cnlDb2RlKCk7CisgICAgICAgICAgICAvKiBzZXQgZnJlcXVlbmN5IGJhbmQgb2Ygb3BlcmF0aW9uICovCisgICAgICAgICAgICBzZXRGcmVxdWVuY3lCYW5kKCk7CisgICAgICAgICAgICAvKiBpbml0aWFsaXplIG5ldHdvcmsgc3RhdGUgKi8KKyAgICAgICAgICAgIHNldE5ldHdvcmtEZXRhaWxlZFN0YXRlKERldGFpbGVkU3RhdGUuRElTQ09OTkVDVEVEKTsKKworICAgICAgICAgICAgLyogUmVtb3ZlIGFueSBmaWx0ZXJpbmcgb24gTXVsdGljYXN0IHY2IGF0IHN0YXJ0ICovCisgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zdG9wRmlsdGVyaW5nTXVsdGljYXN0VjZQYWNrZXRzKCk7CisKKyAgICAgICAgICAgIC8qIFJlc2V0IE11bHRpY2FzdCB2NCBmaWx0ZXJpbmcgc3RhdGUgKi8KKyAgICAgICAgICAgIGlmIChtRmlsdGVyaW5nTXVsdGljYXN0VjRQYWNrZXRzLmdldCgpKSB7CisgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhcnRGaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RvcEZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRGhjcEFjdGl2ZSA9IGZhbHNlOworCisgICAgICAgICAgICBzdGFydEJhdGNoZWRTY2FuKCk7CisKKyAgICAgICAgICAgIGlmIChtT3BlcmF0aW9uYWxNb2RlICE9IENPTk5FQ1RfTU9ERSkgeworICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmRpc2FibGVBbGxOZXR3b3JrcygpOworICAgICAgICAgICAgICAgIGlmIChtT3BlcmF0aW9uYWxNb2RlID09IFNDQU5fT05MWV9XSVRIX1dJRklfT0ZGX01PREUpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0V2lmaVN0YXRlKFdJRklfU1RBVEVfRElTQUJMRUQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVNjYW5Nb2RlU3RhdGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBEcml2ZXIgc3RvcCBtYXkgaGF2ZSBkaXNhYmxlZCBuZXR3b3JrcywgZW5hYmxlIHJpZ2h0IGFmdGVyIHN0YXJ0ICovCisgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5lbmFibGVBbGxOZXR3b3JrcygpOworCisgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJBdHRlbXB0aW5nIHRvIHJlY29ubmVjdCB0byB3aWZpIG5ldHdvcmsgLi4iKTsKKyAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5yZWNvbm5lY3QoKTsKKworICAgICAgICAgICAgICAgIC8vIFN0YXR1cyBwdWxscyBpbiB0aGUgY3VycmVudCBzdXBwbGljYW50IHN0YXRlIGFuZCBuZXR3b3JrIGNvbm5lY3Rpb24gc3RhdGUKKyAgICAgICAgICAgICAgICAvLyBldmVudHMgb3ZlciB0aGUgbW9uaXRvciBjb25uZWN0aW9uLiBUaGlzIGhlbHBzIGZyYW1ld29yayBzeW5jIHVwIHdpdGgKKyAgICAgICAgICAgICAgICAvLyBjdXJyZW50IHN1cHBsaWNhbnQgc3RhdGUKKyAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zdGF0dXMoKTsKKyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RlZFN0YXRlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgbWlzc2VkIHNjcmVlbiB1cGRhdGUgYXQgYm9vdAorICAgICAgICAgICAgaWYgKG1TY3JlZW5Ccm9hZGNhc3RSZWNlaXZlZC5nZXQoKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIFBvd2VyTWFuYWdlciBwb3dlck1hbmFnZXIgPSAoUG93ZXJNYW5hZ2VyKW1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCisgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0LlBPV0VSX1NFUlZJQ0UpOworICAgICAgICAgICAgICAgIGhhbmRsZVNjcmVlblN0YXRlQ2hhbmdlZChwb3dlck1hbmFnZXIuaXNTY3JlZW5PbigpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSByaWdodCBzdXNwZW5kIG1vZGUgc2V0dGluZ3MKKyAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRTdXNwZW5kT3B0aW1pemF0aW9ucyhtU3VzcGVuZE9wdE5lZWRzRGlzYWJsZWQgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbVVzZXJXYW50c1N1c3BlbmRPcHQuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0UG93ZXJTYXZlKHRydWUpOworCisgICAgICAgICAgICBpZiAobVAycFN1cHBvcnRlZCkgeworICAgICAgICAgICAgICAgIGlmIChtT3BlcmF0aW9uYWxNb2RlID09IENPTk5FQ1RfTU9ERSkgeworICAgICAgICAgICAgICAgICAgICBtV2lmaVAycENoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaVN0YXRlTWFjaGluZS5DTURfRU5BQkxFX1AyUCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUDJQIHN0YXRlbWFjaGluZSBzdGFydHMgaW4gZGlzYWJsZWQgc3RhdGUsIGFuZCBpcyBub3QgZW5hYmxlZCB1bnRpbAorICAgICAgICAgICAgICAgICAgICAvLyBDTURfRU5BQkxFX1AyUCBpcyBzZW50IGZyb20gaGVyZTsgc28sIG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZSB0bworICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIGl0IGRpc2FibGVkLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuV0lGSV9TQ0FOX0FWQUlMQUJMRSk7CisgICAgICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKKyAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9TQ0FOX0FWQUlMQUJMRSwgV0lGSV9TVEFURV9FTkFCTEVEKTsKKyAgICAgICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU0NBTjoKKyAgICAgICAgICAgICAgICAgICAgbm90ZVNjYW5TdGFydChtZXNzYWdlLmFyZzEsIChXb3JrU291cmNlKSBtZXNzYWdlLm9iaik7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0U2Nhbk5hdGl2ZShXaWZpTmF0aXZlLlNDQU5fV0lUSF9DT05ORUNUSU9OX1NFVFVQKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0JBVENIRURfU0NBTjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZEJhdGNoZWRTY2FuU2V0dGluZ3MobWVzc2FnZS5hcmcxLCBtZXNzYWdlLmFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJ1bmRsZSltZXNzYWdlLm9iaikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QmF0Y2hlZFNjYW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQ09VTlRSWV9DT0RFOgorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY291bnRyeSA9IChTdHJpbmcpIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coInNldCBjb3VudHJ5IGNvZGUgIiArIGNvdW50cnkpOworICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRyeSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5ID0gY291bnRyeS50b1VwcGVyQ2FzZShMb2NhbGUuUk9PVCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUxhc3RTZXRDb3VudHJ5Q29kZSA9PSBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvdW50cnkuZXF1YWxzKG1MYXN0U2V0Q291bnRyeUNvZGUpID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnNldENvdW50cnlDb2RlKGNvdW50cnkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1MYXN0U2V0Q291bnRyeUNvZGUgPSBjb3VudHJ5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXQgY291bnRyeSBjb2RlICIgKyBjb3VudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgorICAgICAgICAgICAgICAgICAgICBpbnQgYmFuZCA9ICBtZXNzYWdlLmFyZzE7CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygic2V0IGZyZXF1ZW5jeSBiYW5kICIgKyBiYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnNldEJhbmQoYmFuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1GcmVxdWVuY3lCYW5kLnNldChiYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsdXNoIG9sZCBkYXRhIC0gbGlrZSBzY2FuIHJlc3VsdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmJzc0ZsdXNoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvL0ZldGNoIHRoZSBsYXRlc3Qgc2NhbiByZXN1bHRzIHdoZW4gZnJlcXVlbmN5IGJhbmQgaXMgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFNjYW5OYXRpdmUoV2lmaU5hdGl2ZS5TQ0FOX1dJVEhfQ09OTkVDVElPTl9TRVRVUCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IGZyZXF1ZW5jeSBiYW5kICIgKyBiYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9CTFVFVE9PVEhfQURBUFRFUl9TVEFURV9DSEFOR0U6CisgICAgICAgICAgICAgICAgICAgIG1CbHVldG9vdGhDb25uZWN0aW9uQWN0aXZlID0gKG1lc3NhZ2UuYXJnMSAhPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsdWV0b290aEFkYXB0ZXIuU1RBVEVfRElTQ09OTkVDVEVEKTsKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0Qmx1ZXRvb3RoQ29leGlzdGVuY2VTY2FuTW9kZShtQmx1ZXRvb3RoQ29ubmVjdGlvbkFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSA9IG1lc3NhZ2UuYXJnMTsKKworICAgICAgICAgICAgICAgICAgICAvKiBBbHJlYWR5IGRvaW5nIGEgZGVsYXllZCBzdG9wICovCisgICAgICAgICAgICAgICAgICAgIGlmIChtSW5EZWxheWVkU3RvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJBbHJlYWR5IGluIGRlbGF5ZWQgc3RvcCIpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCByaWdodCBub3csIGJ1dCBsZWF2ZSB0aGUgZHJpdmVyIHJ1bm5pbmcgZm9yIGEgYml0ICovCisgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZGlzYWJsZUFsbE5ldHdvcmtzKCk7CisKKyAgICAgICAgICAgICAgICAgICAgbUluRGVsYXllZFN0b3AgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtRGVsYXllZFN0b3BDb3VudGVyKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiRGVsYXllZCBzdG9wIG1lc3NhZ2UgIiArIG1EZWxheWVkU3RvcENvdW50ZXIpOworCisgICAgICAgICAgICAgICAgICAgIC8qIHNlbmQgcmVndWxhciBkZWxheWVkIHNodXQgZG93biAqLworICAgICAgICAgICAgICAgICAgICBJbnRlbnQgZHJpdmVyU3RvcEludGVudCA9IG5ldyBJbnRlbnQoQUNUSU9OX0RFTEFZRURfRFJJVkVSX1NUT1AsIG51bGwpOworICAgICAgICAgICAgICAgICAgICBkcml2ZXJTdG9wSW50ZW50LnB1dEV4dHJhKERFTEFZRURfU1RPUF9DT1VOVEVSLCBtRGVsYXllZFN0b3BDb3VudGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbURyaXZlclN0b3BJbnRlbnQgPSBQZW5kaW5nSW50ZW50LmdldEJyb2FkY2FzdChtQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUklWRVJfU1RPUF9SRVFVRVNULCBkcml2ZXJTdG9wSW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQuRkxBR19VUERBVEVfQ1VSUkVOVCk7CisKKyAgICAgICAgICAgICAgICAgICAgbUFsYXJtTWFuYWdlci5zZXQoQWxhcm1NYW5hZ2VyLlJUQ19XQUtFVVAsIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtRHJpdmVyU3RvcERlbGF5TXMsIG1Ecml2ZXJTdG9wSW50ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgorICAgICAgICAgICAgICAgICAgICBpZiAobUluRGVsYXllZFN0b3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbkRlbGF5ZWRTdG9wID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBtRGVsYXllZFN0b3BDb3VudGVyKys7CisgICAgICAgICAgICAgICAgICAgICAgICBtQWxhcm1NYW5hZ2VyLmNhbmNlbChtRHJpdmVyU3RvcEludGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIkRlbGF5ZWQgc3RvcCBpZ25vcmVkIGR1ZSB0byBzdGFydCIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1PcGVyYXRpb25hbE1vZGUgPT0gQ09OTkVDVF9NT0RFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5lbmFibGVBbGxOZXR3b3JrcygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RFTEFZRURfU1RPUF9EUklWRVI6CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiZGVsYXllZCBzdG9wICIgKyBtZXNzYWdlLmFyZzEgKyAiICIgKyBtRGVsYXllZFN0b3BDb3VudGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSAhPSBtRGVsYXllZFN0b3BDb3VudGVyKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdldEN1cnJlbnRTdGF0ZSgpICE9IG1EaXNjb25uZWN0ZWRTdGF0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya0Rpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtV2FrZUxvY2suYWNxdWlyZSgpOworICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zdG9wRHJpdmVyKCk7CisgICAgICAgICAgICAgICAgICAgIG1XYWtlTG9jay5yZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtUDJwU3VwcG9ydGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVdhaXRGb3JQMnBEaXNhYmxlU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ecml2ZXJTdG9wcGluZ1N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HOgorICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IE1VTFRJQ0FTVF9WNikgeworICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhcnRGaWx0ZXJpbmdNdWx0aWNhc3RWNlBhY2tldHMoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmFyZzEgPT0gTVVMVElDQVNUX1Y0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zdGFydEZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cygpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWxsZWdhbCBhcnVnbWVudHMgdG8gQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1BBQ0tFVF9GSUxURVJJTkc6CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gTVVMVElDQVNUX1Y2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zdG9wRmlsdGVyaW5nTXVsdGljYXN0VjZQYWNrZXRzKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5hcmcxID09IE1VTFRJQ0FTVF9WNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RvcEZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cygpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWxsZWdhbCBhcnVnbWVudHMgdG8gQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9TVVNQRU5EX09QVF9FTkFCTEVEOgorICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zTmF0aXZlKFNVU1BFTkRfRFVFX1RPX1NDUkVFTiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtU3VzcGVuZFdha2VMb2NrLnJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zTmF0aXZlKFNVU1BFTkRfRFVFX1RPX1NDUkVFTiwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9ISUdIX1BFUkZfTU9ERToKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdXNwZW5kT3B0aW1pemF0aW9uc05hdGl2ZShTVVNQRU5EX0RVRV9UT19ISUdIX1BFUkYsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zTmF0aXZlKFNVU1BFTkRfRFVFX1RPX0hJR0hfUEVSRiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfRU5BQkxFX1RETFM6CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm9iaiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVtb3RlQWRkcmVzcyA9IChTdHJpbmcpIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBlbmFibGUgPSAobWVzc2FnZS5hcmcxID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhcnRUZGxzKHJlbW90ZUFkZHJlc3MsIGVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7CisgICAgICAgICAgICBtSXNSdW5uaW5nID0gZmFsc2U7CisgICAgICAgICAgICB1cGRhdGVCYXR0ZXJ5V29ya1NvdXJjZShudWxsKTsKKyAgICAgICAgICAgIG1TY2FuUmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8U2NhblJlc3VsdD4oKTsKKworICAgICAgICAgICAgc3RvcEJhdGNoZWRTY2FuKCk7CisKKyAgICAgICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLldJRklfU0NBTl9BVkFJTEFCTEUpOworICAgICAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7CisgICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfU0NBTl9BVkFJTEFCTEUsIFdJRklfU1RBVEVfRElTQUJMRUQpOworICAgICAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKKyAgICAgICAgICAgIG5vdGVTY2FuRW5kKCk7IC8vIHdyYXAgdXAgYW55IHBlbmRpbmcgcmVxdWVzdC4KKworICAgICAgICAgICAgbUxhc3RTZXRDb3VudHJ5Q29kZSA9IG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBXYWl0Rm9yUDJwRGlzYWJsZVN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBwcml2YXRlIFN0YXRlIG1UcmFuc2l0aW9uVG9TdGF0ZTsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgc3dpdGNoIChnZXRDdXJyZW50TWVzc2FnZSgpLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9ESVNDT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBtVHJhbnNpdGlvblRvU3RhdGUgPSBtSW5pdGlhbFN0YXRlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9ERUxBWUVEX1NUT1BfRFJJVkVSOgorICAgICAgICAgICAgICAgICAgICBtVHJhbnNpdGlvblRvU3RhdGUgPSBtRHJpdmVyU3RvcHBpbmdTdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9TVVBQTElDQU5UOgorICAgICAgICAgICAgICAgICAgICBtVHJhbnNpdGlvblRvU3RhdGUgPSBtU3VwcGxpY2FudFN0b3BwaW5nU3RhdGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIG1UcmFuc2l0aW9uVG9TdGF0ZSA9IG1Ecml2ZXJTdG9wcGluZ1N0YXRlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1XaWZpUDJwQ2hhbm5lbC5zZW5kTWVzc2FnZShXaWZpU3RhdGVNYWNoaW5lLkNNRF9ESVNBQkxFX1AyUF9SRVEpOworICAgICAgICB9CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0RJU0FCTEVfUDJQX1JTUDoKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1UcmFuc2l0aW9uVG9TdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8qIERlZmVyIHdpZmkgc3RhcnQvc2h1dCBhbmQgZHJpdmVyIGNvbW1hbmRzICovCisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TVVBQTElDQU5UOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0FQOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0RSSVZFUjoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0RSSVZFUjoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQ09VTlRSWV9DT0RFOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9GUkVRVUVOQ1lfQkFORDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORzoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TQ0FOOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RJU0NPTk5FQ1Q6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfUkVBU1NPQ0lBVEU6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfUkVDT05ORUNUOgorICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgRHJpdmVyU3RvcHBpbmdTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSA9IGhhbmRsZVN1cHBsaWNhbnRTdGF0ZUNoYW5nZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09IFN1cHBsaWNhbnRTdGF0ZS5JTlRFUkZBQ0VfRElTQUJMRUQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRHJpdmVyU3RvcHBlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgLyogUXVldWUgZHJpdmVyIGNvbW1hbmRzICovCisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9DT1VOVFJZX0NPREU6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkc6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NDQU46CisgICAgICAgICAgICAgICAgY2FzZSBDTURfRElTQ09OTkVDVDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUFTU09DSUFURToKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUNPTk5FQ1Q6CisgICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBEcml2ZXJTdG9wcGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgU3RhdGVDaGFuZ2VSZXN1bHQgc3RhdGVDaGFuZ2VSZXN1bHQgPSAoU3RhdGVDaGFuZ2VSZXN1bHQpIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICBTdXBwbGljYW50U3RhdGUgc3RhdGUgPSBzdGF0ZUNoYW5nZVJlc3VsdC5zdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQSBXRVhUIGJ1ZyBtZWFucyB0aGF0IHdlIGNhbiBiZSBiYWNrIHRvIGRyaXZlciBzdGFydGVkIHN0YXRlCisgICAgICAgICAgICAgICAgICAgIC8vIHVuZXhwZWN0ZWRseQorICAgICAgICAgICAgICAgICAgICBpZiAoU3VwcGxpY2FudFN0YXRlLmlzRHJpdmVyQWN0aXZlKHN0YXRlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ecml2ZXJTdGFydGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0RSSVZFUjoKKyAgICAgICAgICAgICAgICAgICAgbVdha2VMb2NrLmFjcXVpcmUoKTsKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhcnREcml2ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgbVdha2VMb2NrLnJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ecml2ZXJTdGFydGluZ1N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBTY2FuTW9kZVN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBwcml2YXRlIGludCBtTGFzdE9wZXJhdGlvbk1vZGU7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgIG1MYXN0T3BlcmF0aW9uTW9kZSA9IG1PcGVyYXRpb25hbE1vZGU7CisgICAgICAgIH0KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgorICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IENPTk5FQ1RfTU9ERSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUxhc3RPcGVyYXRpb25Nb2RlID09IFNDQU5fT05MWV9XSVRIX1dJRklfT0ZGX01PREUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRXaWZpU3RhdGUoV0lGSV9TVEFURV9FTkFCTEVEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIGFuZCByZS1lbmFibGUgbmV0d29ya3Mgd2hlbiBnb2luZyBiYWNrIHRvIGVuYWJsZWQgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGVzc2VudGlhbCBmb3IgbmV0d29ya3MgdG8gc2hvdyB1cCBhZnRlciByZXN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5sb2FkQW5kRW5hYmxlQWxsTmV0d29ya3MoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaVAycENoYW5uZWwuc2VuZE1lc3NhZ2UoQ01EX0VOQUJMRV9QMlApOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmVuYWJsZUFsbE5ldHdvcmtzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnJlY29ubmVjdCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtT3BlcmF0aW9uYWxNb2RlID0gQ09OTkVDVF9NT0RFOworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0ZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgc2Nhbi4gQWxsIHRoZSBjb25uZWN0aW9uIHJlbGF0ZWQgY29tbWFuZHMgYXJlCisgICAgICAgICAgICAgICAgLy8gaGFuZGxlZCBvbmx5IGluIENvbm5lY3RNb2RlU3RhdGUKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TQ0FOOgorICAgICAgICAgICAgICAgICAgICBub3RlU2NhblN0YXJ0KG1lc3NhZ2UuYXJnMSwgKFdvcmtTb3VyY2UpIG1lc3NhZ2Uub2JqKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRTY2FuTmF0aXZlKFdpZmlOYXRpdmUuU0NBTl9XSVRIT1VUX0NPTk5FQ1RJT05fU0VUVVApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIENvbm5lY3RNb2RlU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZzsKKyAgICAgICAgICAgIGJvb2xlYW4gb2s7CisgICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5BU1NPQ0lBVElPTl9SRUpFQ1RJT05fRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIG1TdXBwbGljYW50U3RhdGVUcmFja2VyLnNlbmRNZXNzYWdlKFdpZmlNb25pdG9yLkFTU09DSUFUSU9OX1JFSkVDVElPTl9FVkVOVCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgbVN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIuc2VuZE1lc3NhZ2UoV2lmaU1vbml0b3IuQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSA9IGhhbmRsZVN1cHBsaWNhbnRTdGF0ZUNoYW5nZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQSBkcml2ZXIvZmlybXdhcmUgaGFuZyBjYW4gbm93IHB1dCB0aGUgaW50ZXJmYWNlIGluIGEgZG93biBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZGV0ZWN0IHRoZSBpbnRlcmZhY2UgZ29pbmcgZG93biBhbmQgcmVjb3ZlciBmcm9tIGl0CisgICAgICAgICAgICAgICAgICAgIGlmICghU3VwcGxpY2FudFN0YXRlLmlzRHJpdmVyQWN0aXZlKHN0YXRlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1OZXR3b3JrSW5mby5nZXRTdGF0ZSgpICE9IE5ldHdvcmtJbmZvLlN0YXRlLkRJU0NPTk5FQ1RFRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtEaXNjb25uZWN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkRldGVjdGVkIGFuIGludGVyZmFjZSBkb3duLCByZXN0YXJ0IGRyaXZlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ecml2ZXJTdG9wcGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVJUX0RSSVZFUik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBsaWNhbnQgY2FuIGZhaWwgdG8gcmVwb3J0IGEgTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UCisgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gYXV0aGVudGljYXRpb24gdGltZXMgb3V0IGFmdGVyIGEgc3VjY2Vzc2Z1bCBjb25uZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjYW4gZmlndXJlIHRoaXMgZnJvbSB0aGUgc3VwcGxpY2FudCBzdGF0ZS4gSWYgc3VwcGxpY2FudAorICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZSBpcyBESVNDT05ORUNURUQsIGJ1dCB0aGUgbU5ldHdvcmtJbmZvIHNheXMgd2UgYXJlIG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBkaXNjb25uZWN0ZWQsIHdlIG5lZWQgdG8gaGFuZGxlIGEgZGlzY29ubmVjdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gU3VwcGxpY2FudFN0YXRlLkRJU0NPTk5FQ1RFRCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OZXR3b3JrSW5mby5nZXRTdGF0ZSgpICE9IE5ldHdvcmtJbmZvLlN0YXRlLkRJU0NPTk5FQ1RFRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJNaXNzZWQgQ1RSTC1FVkVOVC1ESVNDT05ORUNURUQsIGRpc2Nvbm5lY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtEaXNjb25uZWN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBTZXJ2aWNlLkRJU0NPTk5FQ1RfV0lGSV9SRVFVRVNUOgorICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wb3JhcmlseURpc2Nvbm5lY3RXaWZpID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnJlY29ubmVjdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBvcmFyaWx5RGlzY29ubmVjdFdpZmkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9BRERfT1JfVVBEQVRFX05FVFdPUks6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IChXaWZpQ29uZmlndXJhdGlvbikgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIENNRF9BRERfT1JfVVBEQVRFX05FVFdPUkssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5hZGRPclVwZGF0ZU5ldHdvcmsoY29uZmlnKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFTU9WRV9ORVRXT1JLOgorICAgICAgICAgICAgICAgICAgICBvayA9IG1XaWZpQ29uZmlnU3RvcmUucmVtb3ZlTmV0d29yayhtZXNzYWdlLmFyZzEpOworICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBtZXNzYWdlLndoYXQsIG9rID8gU1VDQ0VTUyA6IEZBSUxVUkUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9FTkFCTEVfTkVUV09SSzoKKyAgICAgICAgICAgICAgICAgICAgb2sgPSBtV2lmaUNvbmZpZ1N0b3JlLmVuYWJsZU5ldHdvcmsobWVzc2FnZS5hcmcxLCBtZXNzYWdlLmFyZzIgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2Uud2hhdCwgb2sgPyBTVUNDRVNTIDogRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX0VOQUJMRV9BTExfTkVUV09SS1M6CisgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZSA9ICBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAodGltZSAtIG1MYXN0RW5hYmxlQWxsTmV0d29ya3NUaW1lID4gTUlOX0lOVEVSVkFMX0VOQUJMRV9BTExfTkVUV09SS1NfTVMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZW5hYmxlQWxsTmV0d29ya3MoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1MYXN0RW5hYmxlQWxsTmV0d29ya3NUaW1lID0gdGltZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkRJU0FCTEVfTkVUV09SSzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpQ29uZmlnU3RvcmUuZGlzYWJsZU5ldHdvcmsobWVzc2FnZS5hcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLkRJU0FCTEVEX1VOS05PV05fUkVBU09OKSA9PSB0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5ESVNBQkxFX05FVFdPUktfU1VDQ0VFREVEKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLkRJU0FCTEVfTkVUV09SS19GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9CTEFDS0xJU1RfTkVUV09SSzoKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuYWRkVG9CbGFja2xpc3QoKFN0cmluZyltZXNzYWdlLm9iaik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX0NMRUFSX0JMQUNLTElTVDoKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuY2xlYXJCbGFja2xpc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU0FWRV9DT05GSUc6CisgICAgICAgICAgICAgICAgICAgIG9rID0gbVdpZmlDb25maWdTdG9yZS5zYXZlQ29uZmlnKCk7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIENNRF9TQVZFX0NPTkZJRywgb2sgPyBTVUNDRVNTIDogRkFJTFVSRSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSW5mb3JtIHRoZSBiYWNrdXAgbWFuYWdlciBhYm91dCBhIGRhdGEgY2hhbmdlCisgICAgICAgICAgICAgICAgICAgIElCYWNrdXBNYW5hZ2VyIGlibSA9IElCYWNrdXBNYW5hZ2VyLlN0dWIuYXNJbnRlcmZhY2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZU1hbmFnZXIuZ2V0U2VydmljZShDb250ZXh0LkJBQ0tVUF9TRVJWSUNFKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpYm0gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYm0uZGF0YUNoYW5nZWQoImNvbS5hbmRyb2lkLnByb3ZpZGVycy5zZXR0aW5ncyIpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgYWdhaW4gbGF0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9HRVRfQ09ORklHVVJFRF9ORVRXT1JLUzoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgbWVzc2FnZS53aGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZ2V0Q29uZmlndXJlZE5ldHdvcmtzKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgLyogRG8gYSByZWR1bmRhbnQgZGlzY29ubmVjdCB3aXRob3V0IHRyYW5zaXRpb24gKi8KKyAgICAgICAgICAgICAgICBjYXNlIENNRF9ESVNDT05ORUNUOgorICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5kaXNjb25uZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFQ09OTkVDVDoKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucmVjb25uZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFQVNTT0NJQVRFOgorICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5yZWFzc29jaWF0ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUxPQURfVExTX0FORF9SRUNPTk5FQ1Q6CisgICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaUNvbmZpZ1N0b3JlLm5lZWRzVW5sb2NrZWRLZXlTdG9yZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dkKCJSZWNvbm5lY3RpbmcgdG8gZ2l2ZSBhIGNoYW5jZSB0byB1bi1jb25uZWN0ZWQgVExTIG5ldHdvcmtzIik7CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5kaXNjb25uZWN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5yZWNvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkNPTk5FQ1RfTkVUV09SSzoKKyAgICAgICAgICAgICAgICAgICAgLyogVGhlIGNvbm5lY3QgbWVzc2FnZSBjYW4gY29udGFpbiBhIG5ldHdvcmsgaWQgcGFzc2VkIGFzIGFyZzEgb24gbWVzc2FnZSBvcgorICAgICAgICAgICAgICAgICAgICAgKiBvciBhIGNvbmZpZyBwYXNzZWQgYXMgb2JqIG9uIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgICAgICAqIEZvciBhIG5ldyBuZXR3b3JrLCBhIGNvbmZpZyBpcyBwYXNzZWQgdG8gY3JlYXRlIGFuZCBjb25uZWN0LgorICAgICAgICAgICAgICAgICAgICAgKiBGb3IgYW4gZXhpc3RpbmcgbmV0d29yaywgYSBuZXR3b3JrIGlkIGlzIHBhc3NlZAorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgaW50IG5ldElkID0gbWVzc2FnZS5hcmcxOworICAgICAgICAgICAgICAgICAgICBjb25maWcgPSAoV2lmaUNvbmZpZ3VyYXRpb24pIG1lc3NhZ2Uub2JqOworCisgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgdGhlIG5ldHdvcmsgY29uZmlnICovCisgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29ya1VwZGF0ZVJlc3VsdCByZXN1bHQgPSBtV2lmaUNvbmZpZ1N0b3JlLnNhdmVOZXR3b3JrKGNvbmZpZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCA9IHJlc3VsdC5nZXROZXR3b3JrSWQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaUNvbmZpZ1N0b3JlLnNlbGVjdE5ldHdvcmsobmV0SWQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucmVjb25uZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBzdGF0ZSB0cmFja2VyIGhhbmRsZXMgZW5hYmxpbmcgbmV0d29ya3MgdXBvbiBjb21wbGV0aW9uL2ZhaWx1cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdXBwbGljYW50U3RhdGVUcmFja2VyLnNlbmRNZXNzYWdlKFdpZmlNYW5hZ2VyLkNPTk5FQ1RfTkVUV09SSyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5DT05ORUNUX05FVFdPUktfU1VDQ0VFREVEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4cGVjdCBhIGRpc2Nvbm5lY3Rpb24gZnJvbSB0aGUgb2xkIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGluZ1N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBjb25uZWN0IGNvbmZpZzogIiArIGNvbmZpZyArICIgbmV0SWQ6ICIgKyBuZXRJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5DT05ORUNUX05FVFdPUktfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5FUlJPUik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNBVkVfTkVUV09SSzoKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gKFdpZmlDb25maWd1cmF0aW9uKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgTmV0d29ya1VwZGF0ZVJlc3VsdCByZXN1bHQgPSBtV2lmaUNvbmZpZ1N0b3JlLnNhdmVOZXR3b3JrKGNvbmZpZyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2V0TmV0d29ya0lkKCkgIT0gV2lmaUNvbmZpZ3VyYXRpb24uSU5WQUxJRF9ORVRXT1JLX0lEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5TQVZFX05FVFdPUktfU1VDQ0VFREVEKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzYXZlIG5ldHdvcmsiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLlNBVkVfTkVUV09SS19GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkZPUkdFVF9ORVRXT1JLOgorICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlDb25maWdTdG9yZS5mb3JnZXROZXR3b3JrKG1lc3NhZ2UuYXJnMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLkZPUkdFVF9ORVRXT1JLX1NVQ0NFRURFRCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gZm9yZ2V0IG5ldHdvcmsiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLkZPUkdFVF9ORVRXT1JLX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuRVJST1IpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuU1RBUlRfV1BTOgorICAgICAgICAgICAgICAgICAgICBXcHNJbmZvIHdwc0luZm8gPSAoV3BzSW5mbykgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIFdwc1Jlc3VsdCB3cHNSZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAod3BzSW5mby5zZXR1cCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBXcHNJbmZvLlBCQzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cHNSZXN1bHQgPSBtV2lmaUNvbmZpZ1N0b3JlLnN0YXJ0V3BzUGJjKHdwc0luZm8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBXcHNJbmZvLktFWVBBRDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cHNSZXN1bHQgPSBtV2lmaUNvbmZpZ1N0b3JlLnN0YXJ0V3BzV2l0aFBpbkZyb21BY2Nlc3NQb2ludCh3cHNJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgV3BzSW5mby5ESVNQTEFZOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdwc1Jlc3VsdCA9IG1XaWZpQ29uZmlnU3RvcmUuc3RhcnRXcHNXaXRoUGluRnJvbURldmljZSh3cHNJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3BzUmVzdWx0ID0gbmV3IFdwc1Jlc3VsdChTdGF0dXMuRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSW52YWxpZCBzZXR1cCBmb3IgV1BTIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHdwc1Jlc3VsdC5zdGF0dXMgPT0gU3RhdHVzLlNVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLlNUQVJUX1dQU19TVUNDRUVERUQsIHdwc1Jlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVdwc1J1bm5pbmdTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc3RhcnQgV1BTIHdpdGggY29uZmlnICIgKyB3cHNJbmZvLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0ZBSUxFRCwgV2lmaU1hbmFnZXIuRVJST1IpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19DT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIk5ldHdvcmsgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCIpOworICAgICAgICAgICAgICAgICAgICBtTGFzdE5ldHdvcmtJZCA9IG1lc3NhZ2UuYXJnMTsKKyAgICAgICAgICAgICAgICAgICAgbUxhc3RCc3NpZCA9IChTdHJpbmcpIG1lc3NhZ2Uub2JqOworCisgICAgICAgICAgICAgICAgICAgIG1XaWZpSW5mby5zZXRCU1NJRChtTGFzdEJzc2lkKTsKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlJbmZvLnNldE5ldHdvcmtJZChtTGFzdE5ldHdvcmtJZCk7CisgICAgICAgICAgICAgICAgICAgIC8qIHNlbmQgZXZlbnQgdG8gQ00gJiBuZXR3b3JrIGNoYW5nZSBicm9hZGNhc3QgKi8KKyAgICAgICAgICAgICAgICAgICAgc2V0TmV0d29ya0RldGFpbGVkU3RhdGUoRGV0YWlsZWRTdGF0ZS5PQlRBSU5JTkdfSVBBRERSKTsKKyAgICAgICAgICAgICAgICAgICAgc2VuZE5ldHdvcmtTdGF0ZUNoYW5nZUJyb2FkY2FzdChtTGFzdEJzc2lkKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1PYnRhaW5pbmdJcFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5ORVRXT1JLX0RJU0NPTk5FQ1RJT05fRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiTmV0d29yayBjb25uZWN0aW9uIGxvc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya0Rpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0ZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgTDJDb25uZWN0ZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgbVJzc2lQb2xsVG9rZW4rKzsKKyAgICAgICAgICAgIGlmIChtRW5hYmxlUnNzaVBvbGxpbmcpIHsKKyAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfUlNTSV9QT0xMLCBtUnNzaVBvbGxUb2tlbiwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZXhpdCgpIHsKKyAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtEaXNjb25uZWN0KCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICBjYXNlIERoY3BTdGF0ZU1hY2hpbmUuQ01EX1BSRV9ESENQX0FDVElPTjoKKyAgICAgICAgICAgICAgICAgIGhhbmRsZVByZURoY3BTZXR1cCgpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRGhjcFN0YXRlTWFjaGluZS5DTURfUE9TVF9ESENQX0FDVElPTjoKKyAgICAgICAgICAgICAgICAgIGhhbmRsZVBvc3REaGNwU2V0dXAoKTsKKyAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gRGhjcFN0YXRlTWFjaGluZS5ESENQX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIkRIQ1Agc3VjY2Vzc2Z1bCIpOworICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3NmdWxJcENvbmZpZ3VyYXRpb24oKERoY3BSZXN1bHRzKSBtZXNzYWdlLm9iaik7CisgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1WZXJpZnlpbmdMaW5rU3RhdGUpOworICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmFyZzEgPT0gRGhjcFN0YXRlTWFjaGluZS5ESENQX0ZBSUxVUkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIkRIQ1AgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRmFpbGVkSXBDb25maWd1cmF0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0aW5nU3RhdGUpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfRElTQ09OTkVDVDoKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RpbmdTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycFNlcnZpY2UuRElTQ09OTkVDVF9XSUZJX1JFUVVFU1Q6CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZGlzY29ubmVjdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBvcmFyaWx5RGlzY29ubmVjdFdpZmkgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0aW5nU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgorICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxICE9IENPTk5FQ1RfTU9ERSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX0RJU0NPTk5FQ1QpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NDQU46CisgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdCBhdHRlbXB0IHRvIGNvbm5lY3Qgd2hlbiB3ZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgbm90ZVNjYW5TdGFydChtZXNzYWdlLmFyZzEsIChXb3JrU291cmNlKSBtZXNzYWdlLm9iaik7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0U2Nhbk5hdGl2ZShXaWZpTmF0aXZlLlNDQU5fV0lUSE9VVF9DT05ORUNUSU9OX1NFVFVQKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIC8qIElnbm9yZSBjb25uZWN0aW9uIHRvIHNhbWUgbmV0d29yayAqLworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuQ09OTkVDVF9ORVRXT1JLOgorICAgICAgICAgICAgICAgICAgICBpbnQgbmV0SWQgPSBtZXNzYWdlLmFyZzE7CisgICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaUluZm8uZ2V0TmV0d29ya0lkKCkgPT0gbmV0SWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNBVkVfTkVUV09SSzoKKyAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnID0gKFdpZmlDb25maWd1cmF0aW9uKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgTmV0d29ya1VwZGF0ZVJlc3VsdCByZXN1bHQgPSBtV2lmaUNvbmZpZ1N0b3JlLnNhdmVOZXR3b3JrKGNvbmZpZyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaUluZm8uZ2V0TmV0d29ya0lkKCkgPT0gcmVzdWx0LmdldE5ldHdvcmtJZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0lwQ2hhbmdlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJSZWNvbmZpZ3VyaW5nIElQIG9uIGNvbm5lY3Rpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU9idGFpbmluZ0lwU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNQcm94eUNoYW5nZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiUmVjb25maWd1cmluZyBwcm94eSBvbiBjb25uZWN0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTGlua1Byb3BlcnRpZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2V0TmV0d29ya0lkKCkgIT0gV2lmaUNvbmZpZ3VyYXRpb24uSU5WQUxJRF9ORVRXT1JLX0lEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5TQVZFX05FVFdPUktfU1VDQ0VFREVEKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzYXZlIG5ldHdvcmsiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLlNBVkVfTkVUV09SS19GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgLyogSWdub3JlICovCisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5ORVRXT1JLX0NPTk5FQ1RJT05fRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JTU0lfUE9MTDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSBtUnNzaVBvbGxUb2tlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IEluZm8gYW5kIGNvbnRpbnVlIHBvbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoUnNzaUFuZExpbmtTcGVlZE5hdGl2ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX1JTU0lfUE9MTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJzc2lQb2xsVG9rZW4sIDApLCBQT0xMX1JTU0lfSU5URVJWQUxfTVNFQ1MpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG9sbGluZyBoYXMgY29tcGxldGVkCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfRU5BQkxFX1JTU0lfUE9MTDoKKyAgICAgICAgICAgICAgICAgICAgbUVuYWJsZVJzc2lQb2xsaW5nID0gKG1lc3NhZ2UuYXJnMSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgbVJzc2lQb2xsVG9rZW4rKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1FbmFibGVSc3NpUG9sbGluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgcG9sbAorICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hSc3NpQW5kTGlua1NwZWVkTmF0aXZlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShDTURfUlNTSV9QT0xMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUnNzaVBvbGxUb2tlbiwgMCksIFBPTExfUlNTSV9JTlRFUlZBTF9NU0VDUyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSDoKKyAgICAgICAgICAgICAgICAgICAgUnNzaVBhY2tldENvdW50SW5mbyBpbmZvID0gbmV3IFJzc2lQYWNrZXRDb3VudEluZm8oKTsKKyAgICAgICAgICAgICAgICAgICAgZmV0Y2hSc3NpQW5kTGlua1NwZWVkTmF0aXZlKCk7CisgICAgICAgICAgICAgICAgICAgIGluZm8ucnNzaSA9IG1XaWZpSW5mby5nZXRSc3NpKCk7CisgICAgICAgICAgICAgICAgICAgIGZldGNoUGt0Y250TmF0aXZlKGluZm8pOworICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSF9TVUNDRUVERUQsIGluZm8pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgT2J0YWluaW5nSXBTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgaWYgKCFtV2lmaUNvbmZpZ1N0b3JlLmlzVXNpbmdTdGF0aWNJcChtTGFzdE5ldHdvcmtJZCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBJZiB3ZSdyZSBzd2l0Y2hpbmcgYmV0d2VlbiBzdGF0aWMgSVAgY29uZmlndXJhdGlvbiBhbmQgREhDUCwgcmVtb3ZlIHRoZQorICAgICAgICAgICAgICAgIC8vIHN0YXRpYyBjb25maWd1cmF0aW9uIGZpcnN0LgorICAgICAgICAgICAgICAgIHN0YXJ0RGhjcCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBzdG9wIGFueSBydW5uaW5nIGRoY3AgYmVmb3JlIGFzc2lnbmluZyBzdGF0aWMgSVAKKyAgICAgICAgICAgICAgICBzdG9wRGhjcCgpOworICAgICAgICAgICAgICAgIERoY3BSZXN1bHRzIGRoY3BSZXN1bHRzID0gbmV3IERoY3BSZXN1bHRzKAorICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5nZXRMaW5rUHJvcGVydGllcyhtTGFzdE5ldHdvcmtJZCkpOworICAgICAgICAgICAgICAgIEludGVyZmFjZUNvbmZpZ3VyYXRpb24gaWZjZyA9IG5ldyBJbnRlcmZhY2VDb25maWd1cmF0aW9uKCk7CisgICAgICAgICAgICAgICAgSXRlcmF0b3I8TGlua0FkZHJlc3M+IGFkZHJzID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRoY3BSZXN1bHRzLmxpbmtQcm9wZXJ0aWVzLmdldExpbmtBZGRyZXNzZXMoKS5pdGVyYXRvcigpOworICAgICAgICAgICAgICAgIGlmICghYWRkcnMuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlN0YXRpYyBJUCBsYWNrcyBhZGRyZXNzIik7CisgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFUSUNfSVBfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWZjZy5zZXRMaW5rQWRkcmVzcyhhZGRycy5uZXh0KCkpOworICAgICAgICAgICAgICAgICAgICBpZmNnLnNldEludGVyZmFjZVVwKCk7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLnNldEludGVyZmFjZUNvbmZpZyhtSW50ZXJmYWNlTmFtZSwgaWZjZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIlN0YXRpYyBJUCBjb25maWd1cmF0aW9uIHN1Y2NlZWRlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVRJQ19JUF9TVUNDRVNTLCBkaGNwUmVzdWx0cyk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiU3RhdGljIElQIGNvbmZpZ3VyYXRpb24gZmFpbGVkOiAiICsgcmUpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVRJQ19JUF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlN0YXRpYyBJUCBjb25maWd1cmF0aW9uIGZhaWxlZDogIiArIGUpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVRJQ19JUF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICBpZiAoREJHKSBsb2coZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpICsgIlxuIik7CisgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgY2FzZSBDTURfU1RBVElDX0lQX1NVQ0NFU1M6CisgICAgICAgICAgICAgICAgICBoYW5kbGVTdWNjZXNzZnVsSXBDb25maWd1cmF0aW9uKChEaGNwUmVzdWx0cykgbWVzc2FnZS5vYmopOworICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1WZXJpZnlpbmdMaW5rU3RhdGUpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVRJQ19JUF9GQUlMVVJFOgorICAgICAgICAgICAgICAgICAgaGFuZGxlRmFpbGVkSXBDb25maWd1cmF0aW9uKCk7CisgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RpbmdTdGF0ZSk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNBVkVfTkVUV09SSzoKKyAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgLyogRGVmZXIgYW55IHBvd2VyIG1vZGUgY2hhbmdlcyBzaW5jZSB3ZSBtdXN0IGtlZXAgYWN0aXZlIHBvd2VyIG1vZGUgYXQgREhDUCAqLworICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfSElHSF9QRVJGX01PREU6CisgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIC8qIERlZmVyIHNjYW4gcmVxdWVzdCBzaW5jZSB3ZSBzaG91bGQgbm90IHN3aXRjaCB0byBvdGhlciBjaGFubmVscyBhdCBESENQICovCisgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NDQU46CisgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgVmVyaWZ5aW5nTGlua1N0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgICAgICBsb2coZ2V0TmFtZSgpICsgIiBlbnRlciIpOworICAgICAgICAgICAgc2V0TmV0d29ya0RldGFpbGVkU3RhdGUoRGV0YWlsZWRTdGF0ZS5WRVJJRllJTkdfUE9PUl9MSU5LKTsKKyAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUudXBkYXRlU3RhdHVzKG1MYXN0TmV0d29ya0lkLCBEZXRhaWxlZFN0YXRlLlZFUklGWUlOR19QT09SX0xJTkspOworICAgICAgICAgICAgc2VuZE5ldHdvcmtTdGF0ZUNoYW5nZUJyb2FkY2FzdChtTGFzdEJzc2lkKTsKKyAgICAgICAgfQorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lLlBPT1JfTElOS19ERVRFQ1RFRDoKKyAgICAgICAgICAgICAgICAgICAgLy9zdGF5IGhlcmUKKyAgICAgICAgICAgICAgICAgICAgbG9nKGdldE5hbWUoKSArICIgUE9PUl9MSU5LX0RFVEVDVEVEOiBubyB0cmFuc2l0aW9uIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lLkdPT0RfTElOS19ERVRFQ1RFRDoKKyAgICAgICAgICAgICAgICAgICAgbG9nKGdldE5hbWUoKSArICIgR09PRF9MSU5LX0RFVEVDVEVEOiB0cmFuc2l0aW9uIHRvIGNhcHRpdmUgcG9ydGFsIGNoZWNrIik7CisgICAgICAgICAgICAgICAgICAgIC8vIFNlbmQgb3V0IGEgYnJvYWRjYXN0IHdpdGggdGhlIENBUFRJVkVfUE9SVEFMX0NIRUNLIHRvIHByZXNlcnZlCisgICAgICAgICAgICAgICAgICAgIC8vIGV4aXN0aW5nIGJlaGF2aW91ci4gVGhlIGNhcHRpdmUgcG9ydGFsIGNoZWNrIHJlYWxseSBoYXBwZW5zIGFmdGVyIHdlCisgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gaW50byBEZXRhaWxlZFN0YXRlLkNPTk5FQ1RFRC4KKyAgICAgICAgICAgICAgICAgICAgc2V0TmV0d29ya0RldGFpbGVkU3RhdGUoRGV0YWlsZWRTdGF0ZS5DQVBUSVZFX1BPUlRBTF9DSEVDSyk7CisgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUudXBkYXRlU3RhdHVzKG1MYXN0TmV0d29ya0lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldGFpbGVkU3RhdGUuQ0FQVElWRV9QT1JUQUxfQ0hFQ0spOworICAgICAgICAgICAgICAgICAgICBzZW5kTmV0d29ya1N0YXRlQ2hhbmdlQnJvYWRjYXN0KG1MYXN0QnNzaWQpOworCisgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgbWlnaHQgbG9vayBsaWtlIGFuIG9kZCBwbGFjZSB0byBlbmFibGUgSVBWNiBidXQgdGhpcyBpcyBpbgorICAgICAgICAgICAgICAgICAgICAvLyByZXNwb25zZSB0byB0cmFuc2l0aW9uaW5nIGludG8gR09PRF9MSU5LX0RFVEVDVEVELiBTaW1pbGFybHksIHdlIGRpc2FibGUKKyAgICAgICAgICAgICAgICAgICAgLy8gaXB2NiB3aGVuIHdlIHRyYW5zaXRpb24gaW50byBQT09SX0xJTktfREVURUNURUQgaW4gbUNvbm5lY3RlZFN0YXRlLgorICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgbU53U2VydmljZS5lbmFibGVJcHY2KG1JbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gZW5hYmxlIElQdjY6ICIgKyByZSk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gZW5hYmxlIElQdjY6ICIgKyBlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGxvZyhnZXROYW1lKCkgKyAiIEdPT0RfTElOS19ERVRFQ1RFRDogdHJhbnNpdGlvbiB0byBDT05ORUNURUQiKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0TmV0d29ya0RldGFpbGVkU3RhdGUoRGV0YWlsZWRTdGF0ZS5DT05ORUNURUQpOworICAgICAgICAgICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLnVwZGF0ZVN0YXR1cyhtTGFzdE5ldHdvcmtJZCwgRGV0YWlsZWRTdGF0ZS5DT05ORUNURUQpOworICAgICAgICAgICAgICAgICAgICBzZW5kTmV0d29ya1N0YXRlQ2hhbmdlQnJvYWRjYXN0KG1MYXN0QnNzaWQpOworICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUNvbm5lY3RlZFN0YXRlKTsKKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coZ2V0TmFtZSgpICsgIiB3aGF0PSIgKyBtZXNzYWdlLndoYXQgKyAiIE5PVF9IQU5ETEVEIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgQ29ubmVjdGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICBjYXNlIFdpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZS5QT09SX0xJTktfREVURUNURUQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiV2F0Y2hkb2cgcmVwb3J0cyBwb29yIGxpbmsiKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Od1NlcnZpY2UuZGlzYWJsZUlwdjYobUludGVyZmFjZU5hbWUpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBkaXNhYmxlIElQdjY6ICIgKyByZSk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gZGlzYWJsZSBJUHY2OiAiICsgZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLyogUmVwb3J0IGEgZGlzY29ubmVjdCAqLworICAgICAgICAgICAgICAgICAgICBzZXROZXR3b3JrRGV0YWlsZWRTdGF0ZShEZXRhaWxlZFN0YXRlLkRJU0NPTk5FQ1RFRCk7CisgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUudXBkYXRlU3RhdHVzKG1MYXN0TmV0d29ya0lkLCBEZXRhaWxlZFN0YXRlLkRJU0NPTk5FQ1RFRCk7CisgICAgICAgICAgICAgICAgICAgIHNlbmROZXR3b3JrU3RhdGVDaGFuZ2VCcm9hZGNhc3QobUxhc3RCc3NpZCk7CisKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1WZXJpZnlpbmdMaW5rU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgeworICAgICAgICAgICAgLyogUmVxdWVzdCBhIENTIHdha2Vsb2NrIGR1cmluZyB0cmFuc2l0aW9uIHRvIG1vYmlsZSAqLworICAgICAgICAgICAgY2hlY2tBbmRTZXRDb25uZWN0aXZpdHlJbnN0YW5jZSgpOworICAgICAgICAgICAgbUNtLnJlcXVlc3ROZXR3b3JrVHJhbnNpdGlvbldha2Vsb2NrKGdldE5hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBEaXNjb25uZWN0aW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX09QRVJBVElPTkFMX01PREU6CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgIT0gQ09OTkVDVF9NT0RFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgZ2V0IGEgU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQgYmVmb3JlIE5FVFdPUktfRElTQ09OTkVDVElPTl9FVkVOVAorICAgICAgICAgICAgICAgICAgICAgKiB3ZSBoYXZlIG1pc3NlZCB0aGUgbmV0d29yayBkaXNjb25uZWN0aW9uLCB0cmFuc2l0aW9uIHRvIG1EaXNjb25uZWN0ZWRTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgKiBhbmQgaGFuZGxlIHRoZSByZXN0IG9mIHRoZSBldmVudHMgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya0Rpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0ZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgRGlzY29ubmVjdGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtQWxhcm1FbmFibGVkID0gZmFsc2U7CisgICAgICAgIC8qIFRoaXMgaXMgc2V0IGZyb20gdGhlIG92ZXJsYXkgY29uZmlnIGZpbGUgb3IgZnJvbSBhIHNlY3VyZSBzZXR0aW5nLgorICAgICAgICAgKiBBIHZhbHVlIG9mIDAgZGlzYWJsZXMgc2Nhbm5pbmcgaW4gdGhlIGZyYW1ld29yay4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgbG9uZyBtRnJhbWV3b3JrU2NhbkludGVydmFsTXM7CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHNldFNjYW5BbGFybShib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgICAgIGlmIChlbmFibGVkID09IG1BbGFybUVuYWJsZWQpIHJldHVybjsKKyAgICAgICAgICAgIGlmIChlbmFibGVkKSB7CisgICAgICAgICAgICAgICAgaWYgKG1GcmFtZXdvcmtTY2FuSW50ZXJ2YWxNcyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbUFsYXJtTWFuYWdlci5zZXRSZXBlYXRpbmcoQWxhcm1NYW5hZ2VyLlJUQ19XQUtFVVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyBtRnJhbWV3b3JrU2NhbkludGVydmFsTXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZyYW1ld29ya1NjYW5JbnRlcnZhbE1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TY2FuSW50ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgbUFsYXJtRW5hYmxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtQWxhcm1NYW5hZ2VyLmNhbmNlbChtU2NhbkludGVudCk7CisgICAgICAgICAgICAgICAgbUFsYXJtRW5hYmxlZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgLy8gV2UgZG9udCBzY2FuIGZyZXF1ZW50bHkgaWYgdGhpcyBpcyBhIHRlbXBvcmFyeSBkaXNjb25uZWN0CisgICAgICAgICAgICAvLyBkdWUgdG8gcDJwCisgICAgICAgICAgICBpZiAobVRlbXBvcmFyaWx5RGlzY29ubmVjdFdpZmkpIHsKKyAgICAgICAgICAgICAgICBtV2lmaVAycENoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaVAycFNlcnZpY2UuRElTQ09OTkVDVF9XSUZJX1JFU1BPTlNFKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1GcmFtZXdvcmtTY2FuSW50ZXJ2YWxNcyA9IFNldHRpbmdzLkdsb2JhbC5nZXRMb25nKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9GUkFNRVdPUktfU0NBTl9JTlRFUlZBTF9NUywKKyAgICAgICAgICAgICAgICAgICAgbURlZmF1bHRGcmFtZXdvcmtTY2FuSW50ZXJ2YWxNcyk7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogV2UgaW5pdGlhdGUgYmFja2dyb3VuZCBzY2FubmluZyBpZiBpdCBpcyBlbmFibGVkLCBvdGhlcndpc2Ugd2UKKyAgICAgICAgICAgICAqIGluaXRpYXRlIGFuIGluZnJlcXVlbnQgc2NhbiB0aGF0IHdha2VzIHVwIHRoZSBkZXZpY2UgdG8gZW5zdXJlCisgICAgICAgICAgICAgKiBhIHVzZXIgY29ubmVjdHMgdG8gYW4gYWNjZXNzIHBvaW50IG9uIHRoZSBtb3ZlCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChtRW5hYmxlQmFja2dyb3VuZFNjYW4pIHsKKyAgICAgICAgICAgICAgICAvKiBJZiBhIHJlZ3VsYXIgc2NhbiByZXN1bHQgaXMgcGVuZGluZywgZG8gbm90IGluaXRpYXRlIGJhY2tncm91bmQKKyAgICAgICAgICAgICAgICAgKiBzY2FuIHVudGlsIHRoZSBzY2FuIHJlc3VsdHMgYXJlIHJldHVybmVkLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlCisgICAgICAgICAgICAgICAgICogaW5pdGlhdGluZyBhIGJhY2tncm91bmQgc2NhbiB3aWxsIGNhbmNlbCB0aGUgcmVndWxhciBzY2FuIGFuZAorICAgICAgICAgICAgICAgICAqIHNjYW4gcmVzdWx0cyB3aWxsIG5vdCBiZSByZXR1cm5lZCB1bnRpbCBiYWNrZ3JvdW5kIHNjYW5uaW5nIGlzCisgICAgICAgICAgICAgICAgICogY2xlYXJlZAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICghbVNjYW5SZXN1bHRJc1BlbmRpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZW5hYmxlQmFja2dyb3VuZFNjYW4odHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZXRTY2FuQWxhcm0odHJ1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogSWYgd2UgaGF2ZSBubyBuZXR3b3JrcyBzYXZlZCwgdGhlIHN1cHBsaWNhbnQgc3RvcHMgZG9pbmcgdGhlIHBlcmlvZGljIHNjYW4uCisgICAgICAgICAgICAgKiBUaGUgc2NhbnMgYXJlIHVzZWZ1bCB0byBub3RpZnkgdGhlIHVzZXIgb2YgdGhlIHByZXNlbmNlIG9mIGFuIG9wZW4gbmV0d29yay4KKyAgICAgICAgICAgICAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgbm90IHdha2UgdXAgc2NhbnMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICghbVAycENvbm5lY3RlZC5nZXQoKSAmJiBtV2lmaUNvbmZpZ1N0b3JlLmdldENvbmZpZ3VyZWROZXR3b3JrcygpLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX05PX05FVFdPUktTX1BFUklPRElDX1NDQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyttUGVyaW9kaWNTY2FuVG9rZW4sIDApLCBtU3VwcGxpY2FudFNjYW5JbnRlcnZhbE1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgICAgICBib29sZWFuIHJldCA9IEhBTkRMRUQ7CisgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgQ01EX05PX05FVFdPUktTX1BFUklPRElDX1NDQU46CisgICAgICAgICAgICAgICAgICAgIGlmIChtUDJwQ29ubmVjdGVkLmdldCgpKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSBtUGVyaW9kaWNTY2FuVG9rZW4gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmdldENvbmZpZ3VyZWROZXR3b3JrcygpLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBUlRfU0NBTiwgVU5LTk9XTl9TQ0FOX1NPVVJDRSwgMCwgKFdvcmtTb3VyY2UpIG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX05PX05FVFdPUktTX1BFUklPRElDX1NDQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK21QZXJpb2RpY1NjYW5Ub2tlbiwgMCksIG1TdXBwbGljYW50U2NhbkludGVydmFsTXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuRk9SR0VUX05FVFdPUks6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfUkVNT1ZFX05FVFdPUks6CisgICAgICAgICAgICAgICAgICAgIC8vIFNldCB1cCBhIGRlbGF5ZWQgbWVzc2FnZSBoZXJlLiBBZnRlciB0aGUgZm9yZ2V0L3JlbW92ZSBpcyBoYW5kbGVkCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBoYW5kbGVkIGRlbGF5ZWQgbWVzc2FnZSB3aWxsIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gc2NhbiBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX05PX05FVFdPUktTX1BFUklPRElDX1NDQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbVBlcmlvZGljU2NhblRva2VuLCAwKSwgbVN1cHBsaWNhbnRTY2FuSW50ZXJ2YWxNcyk7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IE5PVF9IQU5ETEVEOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSAhPSBDT05ORUNUX01PREUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1PcGVyYXRpb25hbE1vZGUgPSBtZXNzYWdlLmFyZzE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZGlzYWJsZUFsbE5ldHdvcmtzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobU9wZXJhdGlvbmFsTW9kZSA9PSBTQ0FOX09OTFlfV0lUSF9XSUZJX09GRl9NT0RFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlQMnBDaGFubmVsLnNlbmRNZXNzYWdlKENNRF9ESVNBQkxFX1AyUF9SRVEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFdpZmlTdGF0ZShXSUZJX1NUQVRFX0RJU0FCTEVEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1TY2FuTW9kZVN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9FTkFCTEVfQkFDS0dST1VORF9TQ0FOOgorICAgICAgICAgICAgICAgICAgICBtRW5hYmxlQmFja2dyb3VuZFNjYW4gPSAobWVzc2FnZS5hcmcxID09IDEpOworICAgICAgICAgICAgICAgICAgICBpZiAobUVuYWJsZUJhY2tncm91bmRTY2FuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5lbmFibGVCYWNrZ3JvdW5kU2Nhbih0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjYW5BbGFybShmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5lbmFibGVCYWNrZ3JvdW5kU2NhbihmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRTY2FuQWxhcm0odHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIC8qIElnbm9yZSBuZXR3b3JrIGRpc2Nvbm5lY3QgKi8KKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLk5FVFdPUktfRElTQ09OTkVDVElPTl9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgU3RhdGVDaGFuZ2VSZXN1bHQgc3RhdGVDaGFuZ2VSZXN1bHQgPSAoU3RhdGVDaGFuZ2VSZXN1bHQpIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICBzZXROZXR3b3JrRGV0YWlsZWRTdGF0ZShXaWZpSW5mby5nZXREZXRhaWxlZFN0YXRlT2Yoc3RhdGVDaGFuZ2VSZXN1bHQuc3RhdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdE1vZGVTdGF0ZSBkb2VzIHRoZSByZXN0IG9mIHRoZSBoYW5kbGluZyAqLworICAgICAgICAgICAgICAgICAgICByZXQgPSBOT1RfSEFORExFRDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU0NBTjoKKyAgICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBiYWNrZ3JvdW5kIHNjYW4gdGVtcG9yYXJpbHkgZHVyaW5nIGEgcmVndWxhciBzY2FuICovCisgICAgICAgICAgICAgICAgICAgIGlmIChtRW5hYmxlQmFja2dyb3VuZFNjYW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmVuYWJsZUJhY2tncm91bmRTY2FuKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBIYW5kbGVkIGluIHBhcmVudCBzdGF0ZSAqLworICAgICAgICAgICAgICAgICAgICByZXQgPSBOT1RfSEFORExFRDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TQ0FOX1JFU1VMVFNfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIC8qIFJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjYW4gd2hlbiBhIHBlbmRpbmcgc2NhbiByZXN1bHQgaXMgcmVjZWl2ZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1FbmFibGVCYWNrZ3JvdW5kU2NhbiAmJiBtU2NhblJlc3VsdElzUGVuZGluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZW5hYmxlQmFja2dyb3VuZFNjYW4odHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlZCBpbiBwYXJlbnQgc3RhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycFNlcnZpY2UuUDJQX0NPTk5FQ1RJT05fQ0hBTkdFRDoKKyAgICAgICAgICAgICAgICAgICAgTmV0d29ya0luZm8gaW5mbyA9IChOZXR3b3JrSW5mbykgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIG1QMnBDb25uZWN0ZWQuc2V0KGluZm8uaXNDb25uZWN0ZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtUDJwQ29ubmVjdGVkLmdldCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVmYXVsdEludGVydmFsID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5pbnRlZ2VyLmNvbmZpZ193aWZpX3NjYW5faW50ZXJ2YWxfcDJwX2Nvbm5lY3RlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNjYW5JbnRlcnZhbE1zID0gU2V0dGluZ3MuR2xvYmFsLmdldExvbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX1NDQU5fSU5URVJWQUxfV0hFTl9QMlBfQ09OTkVDVEVEX01TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SW50ZXJ2YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0U2NhbkludGVydmFsKChpbnQpIHNjYW5JbnRlcnZhbE1zLzEwMDApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1XaWZpQ29uZmlnU3RvcmUuZ2V0Q29uZmlndXJlZE5ldHdvcmtzKCkuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiVHVybiBvbiBzY2FubmluZyBhZnRlciBwMnAgZGlzY29ubmVjdGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShDTURfTk9fTkVUV09SS1NfUEVSSU9ESUNfU0NBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbVBlcmlvZGljU2NhblRva2VuLCAwKSwgbVN1cHBsaWNhbnRTY2FuSW50ZXJ2YWxNcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUNPTk5FQ1Q6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfUkVBU1NPQ0lBVEU6CisgICAgICAgICAgICAgICAgICAgIGlmIChtVGVtcG9yYXJpbHlEaXNjb25uZWN0V2lmaSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRHJvcCBhIHRoaXJkIHBhcnR5IHJlY29ubmVjdC9yZWFzc29jaWF0ZSBpZiBTVEEgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlbXBvcmFyaWx5IGRpc2Nvbm5lY3RlZCBmb3IgcDJwCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbm5lY3RNb2RlU3RhdGUgaGFuZGxlcyBpdAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7CisgICAgICAgICAgICAvKiBObyBuZWVkIGZvciBhIGJhY2tncm91bmQgc2NhbiB1cG9uIGV4aXQgZnJvbSBhIGRpc2Nvbm5lY3RlZCBzdGF0ZSAqLworICAgICAgICAgICAgaWYgKG1FbmFibGVCYWNrZ3JvdW5kU2NhbikgeworICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmVuYWJsZUJhY2tncm91bmRTY2FuKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldFNjYW5BbGFybShmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBXcHNSdW5uaW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIC8vVHJhY2tzIHRoZSBzb3VyY2UgdG8gcHJvdmlkZSBhIHJlcGx5CisgICAgICAgIHByaXZhdGUgTWVzc2FnZSBtU291cmNlTWVzc2FnZTsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgbVNvdXJjZU1lc3NhZ2UgPSBNZXNzYWdlLm9idGFpbihnZXRDdXJyZW50TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuV1BTX1NVQ0NFU1NfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBpbnRlcm1lZGlhdGUgc3VjY2Vzcywgd2FpdCBmb3IgZnVsbCBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19DT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtU291cmNlTWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0NPTVBMRVRFRCk7CisgICAgICAgICAgICAgICAgICAgIG1Tb3VyY2VNZXNzYWdlLnJlY3ljbGUoKTsKKyAgICAgICAgICAgICAgICAgICAgbVNvdXJjZU1lc3NhZ2UgPSBudWxsOworICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLldQU19PVkVSTEFQX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtU291cmNlTWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5XUFNfT1ZFUkxBUF9FUlJPUik7CisgICAgICAgICAgICAgICAgICAgIG1Tb3VyY2VNZXNzYWdlLnJlY3ljbGUoKTsKKyAgICAgICAgICAgICAgICAgICAgbVNvdXJjZU1lc3NhZ2UgPSBudWxsOworICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5XUFNfRkFJTF9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgLy9hcmcxIGhhcyB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZQorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtU291cmNlTWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0ZBSUxFRCwgbWVzc2FnZS5hcmcxKTsKKyAgICAgICAgICAgICAgICAgICAgbVNvdXJjZU1lc3NhZ2UucmVjeWNsZSgpOworICAgICAgICAgICAgICAgICAgICBtU291cmNlTWVzc2FnZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLldQU19USU1FT1VUX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtU291cmNlTWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5XUFNfVElNRURfT1VUKTsKKyAgICAgICAgICAgICAgICAgICAgbVNvdXJjZU1lc3NhZ2UucmVjeWNsZSgpOworICAgICAgICAgICAgICAgICAgICBtU291cmNlTWVzc2FnZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNUQVJUX1dQUzoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0ZBSUxFRCwgV2lmaU1hbmFnZXIuSU5fUFJPR1JFU1MpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkNBTkNFTF9XUFM6CisgICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5jYW5jZWxXcHMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuQ0FOQ0VMX1dQU19TVUNDRURFRCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5DQU5DRUxfV1BTX0ZBSUxFRCwgV2lmaU1hbmFnZXIuRVJST1IpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvKiBEZWZlciBhbGwgY29tbWFuZHMgdGhhdCBjYW4gY2F1c2UgY29ubmVjdGlvbnMgdG8gYSBkaWZmZXJlbnQgbmV0d29yaworICAgICAgICAgICAgICAgICAqIG9yIHB1dCB0aGUgc3RhdGUgbWFjaGluZSBvdXQgb2YgY29ubmVjdCBtb2RlCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9EUklWRVI6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX09QRVJBVElPTkFMX01PREU6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5DT05ORUNUX05FVFdPUks6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfRU5BQkxFX05FVFdPUks6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfUkVDT05ORUNUOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFQVNTT0NJQVRFOgorICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIk5ldHdvcmsgY29ubmVjdGlvbiBsb3N0Iik7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtEaXNjb25uZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVNTT0NJQVRJT05fUkVKRUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIklnbm9yZSBBc3NvYyByZWplY3QgZXZlbnQgZHVyaW5nIFdQUyBDb25uZWN0aW9uIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgLy8gRGlzcmVnYXJkIGF1dGggZmFpbHVyZSBldmVudHMgZHVyaW5nIFdQUyBjb25uZWN0aW9uLiBUaGUKKyAgICAgICAgICAgICAgICAgICAgLy8gRUFQIHNlcXVlbmNlIGlzIHJldHJpZWQgc2V2ZXJhbCB0aW1lcywgYW5kIHRoZXJlIG1pZ2h0IGJlCisgICAgICAgICAgICAgICAgICAgIC8vIGZhaWx1cmVzIChlc3BlY2lhbGx5IGZvciB3cHMgcGluKS4gV2Ugd2lsbCBnZXQgYSBXUFNfWFhYCisgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGF0IHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlIGFueXdheS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJJZ25vcmUgYXV0aCBmYWlsdXJlIGR1cmluZyBXUFMgY29ubmVjdGlvbiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICAvL1Rocm93IGF3YXkgc3VwcGxpY2FudCBzdGF0ZSBjaGFuZ2VzIHdoZW4gV1BTIGlzIHJ1bm5pbmcuCisgICAgICAgICAgICAgICAgICAgIC8vV2Ugd2lsbCBzdGFydCBnZXR0aW5nIHN1cHBsaWNhbnQgc3RhdGUgY2hhbmdlcyBvbmNlIHdlIGdldAorICAgICAgICAgICAgICAgICAgICAvL2EgV1BTIHN1Y2Nlc3Mgb3IgZmFpbHVyZQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgeworICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5lbmFibGVBbGxOZXR3b3JrcygpOworICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5sb2FkQ29uZmlndXJlZE5ldHdvcmtzKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBTb2Z0QXBTdGFydGluZ1N0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgICAgICBmaW5hbCBNZXNzYWdlIG1lc3NhZ2UgPSBnZXRDdXJyZW50TWVzc2FnZSgpOworICAgICAgICAgICAgaWYgKG1lc3NhZ2Uud2hhdCA9PSBDTURfU1RBUlRfQVApIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSAoV2lmaUNvbmZpZ3VyYXRpb24pIG1lc3NhZ2Uub2JqOworCisgICAgICAgICAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG1XaWZpQXBDb25maWdDaGFubmVsLnNlbmRNZXNzYWdlKENNRF9SRVFVRVNUX0FQX0NPTkZJRyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlBcENvbmZpZ0NoYW5uZWwuc2VuZE1lc3NhZ2UoQ01EX1NFVF9BUF9DT05GSUcsIGNvbmZpZyk7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0U29mdEFwV2l0aENvbmZpZyhjb25maWcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIklsbGVnYWwgdHJhbnNpdGlvbiB0byBTb2Z0QXBTdGFydGluZ1N0YXRlOiAiICsgbWVzc2FnZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NVUFBMSUNBTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9TVVBQTElDQU5UOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0FQOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfQVA6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9DT1VOVFJZX0NPREU6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkc6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1RFVEhFUl9TVEFURV9DSEFOR0U6CisgICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9SRVNQT05TRV9BUF9DT05GSUc6CisgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IChXaWZpQ29uZmlndXJhdGlvbikgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRTb2Z0QXBXaXRoQ29uZmlnKGNvbmZpZyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJTb2Z0YXAgY29uZmlnIGlzIG51bGwhIik7CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBUlRfQVBfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVBfU1VDQ0VTUzoKKyAgICAgICAgICAgICAgICAgICAgc2V0V2lmaUFwU3RhdGUoV0lGSV9BUF9TVEFURV9FTkFCTEVEKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Tb2Z0QXBTdGFydGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUF9GQUlMVVJFOgorICAgICAgICAgICAgICAgICAgICBzZXRXaWZpQXBTdGF0ZShXSUZJX0FQX1NUQVRFX0ZBSUxFRCk7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5pdGlhbFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBTb2Z0QXBTdGFydGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0FQOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIlN0b3BwaW5nIFNvZnQgQVAiKTsKKyAgICAgICAgICAgICAgICAgICAgLyogV2UgaGF2ZSBub3QgdGV0aGVyZWQgYXQgdGhpcyBwb2ludCwgc28gd2UganVzdCBzaHV0ZG93biBzb2Z0IEFwICovCisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLnN0b3BBY2Nlc3NQb2ludChtSW50ZXJmYWNlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkV4Y2VwdGlvbiBpbiBzdG9wQWNjZXNzUG9pbnQoKSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHNldFdpZmlBcFN0YXRlKFdJRklfQVBfU1RBVEVfRElTQUJMRUQpOworICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluaXRpYWxTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0FQOgorICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgYSBzdGFydCBvbiBhIHJ1bm5pbmcgYWNjZXNzIHBvaW50CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAvKiBGYWlsIGNsaWVudCBtb2RlIG9wZXJhdGlvbiB3aGVuIHNvZnQgQVAgaXMgZW5hYmxlZCAqLworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NVUFBMSUNBTlQ6CisgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkNhbm5vdCBzdGFydCBzdXBwbGljYW50IHdpdGggYSBydW5uaW5nIHNvZnQgQVAiKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0V2lmaVN0YXRlKFdJRklfU1RBVEVfVU5LTk9XTik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1RFVEhFUl9TVEFURV9DSEFOR0U6CisgICAgICAgICAgICAgICAgICAgIFRldGhlclN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlID0gKFRldGhlclN0YXRlQ2hhbmdlKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0VGV0aGVyaW5nKHN0YXRlQ2hhbmdlLmF2YWlsYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVGV0aGVyaW5nU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgVGV0aGVyaW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgIC8qIFNlbmQgb3Vyc2VsdmVzIGEgZGVsYXllZCBtZXNzYWdlIHRvIHNodXQgZG93biBpZiB0ZXRoZXJpbmcgZmFpbHMgdG8gbm90aWZ5ICovCisgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShDTURfVEVUSEVSX05PVElGSUNBVElPTl9USU1FRF9PVVQsCisgICAgICAgICAgICAgICAgICAgICsrbVRldGhlclRva2VuLCAwKSwgVEVUSEVSX05PVElGSUNBVElPTl9USU1FX09VVF9NU0VDUyk7CisgICAgICAgIH0KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1RFVEhFUl9TVEFURV9DSEFOR0U6CisgICAgICAgICAgICAgICAgICAgIFRldGhlclN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlID0gKFRldGhlclN0YXRlQ2hhbmdlKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzV2lmaVRldGhlcmVkKHN0YXRlQ2hhbmdlLmFjdGl2ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVGV0aGVyZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgICAgICAgICAgY2FzZSBDTURfVEVUSEVSX05PVElGSUNBVElPTl9USU1FRF9PVVQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gbVRldGhlclRva2VuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gZ2V0IHRldGhlciB1cGRhdGUsIHNodXRkb3duIHNvZnQgYWNjZXNzIHBvaW50Iik7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVNvZnRBcFN0YXJ0ZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZWVkcyB0byBiZSBmaXJzdCB0aGluZyBoYW5kbGVkCisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZUF0RnJvbnRPZlF1ZXVlKENNRF9TVE9QX0FQKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TVVBQTElDQU5UOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0FQOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0RSSVZFUjoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0RSSVZFUjoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQ09VTlRSWV9DT0RFOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9GUkVRVUVOQ1lfQkFORDoKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORzoKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFRldGhlcmVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9URVRIRVJfU1RBVEVfQ0hBTkdFOgorICAgICAgICAgICAgICAgICAgICBUZXRoZXJTdGF0ZUNoYW5nZSBzdGF0ZUNoYW5nZSA9IChUZXRoZXJTdGF0ZUNoYW5nZSkgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNXaWZpVGV0aGVyZWQoc3RhdGVDaGFuZ2UuYWN0aXZlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiVGV0aGVyaW5nIHJlcG9ydHMgd2lmaSBhcyB1bnRldGhlcmVkISwgc2h1dCBkb3duIHNvZnQgQXAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvc3RBcFJ1bm5pbmcobnVsbCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9zdEFwUnVubmluZyhudWxsLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0FQOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIlVudGV0aGVyaW5nIGJlZm9yZSBzdG9wcGluZyBBUCIpOworICAgICAgICAgICAgICAgICAgICBzZXRXaWZpQXBTdGF0ZShXSUZJX0FQX1NUQVRFX0RJU0FCTElORyk7CisgICAgICAgICAgICAgICAgICAgIHN0b3BUZXRoZXJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1VbnRldGhlcmluZ1N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gTW9yZSB3b3JrIHRvIGRvIGFmdGVyIHVudGV0aGVyaW5nCisgICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBVbnRldGhlcmluZ1N0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgICAgICAvKiBTZW5kIG91cnNlbHZlcyBhIGRlbGF5ZWQgbWVzc2FnZSB0byBzaHV0IGRvd24gaWYgdGV0aGVyaW5nIGZhaWxzIHRvIG5vdGlmeSAqLworICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX1RFVEhFUl9OT1RJRklDQVRJT05fVElNRURfT1VULAorICAgICAgICAgICAgICAgICAgICArK21UZXRoZXJUb2tlbiwgMCksIFRFVEhFUl9OT1RJRklDQVRJT05fVElNRV9PVVRfTVNFQ1MpOworCisgICAgICAgIH0KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1RFVEhFUl9TVEFURV9DSEFOR0U6CisgICAgICAgICAgICAgICAgICAgIFRldGhlclN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlID0gKFRldGhlclN0YXRlQ2hhbmdlKSBtZXNzYWdlLm9iajsKKworICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IHRpbGwgd2lmaSBpcyB1bnRldGhlcmVkICovCisgICAgICAgICAgICAgICAgICAgIGlmIChpc1dpZmlUZXRoZXJlZChzdGF0ZUNoYW5nZS5hY3RpdmUpKSBicmVhazsKKworICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVNvZnRBcFN0YXJ0ZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1RFVEhFUl9OT1RJRklDQVRJT05fVElNRURfT1VUOgorICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IG1UZXRoZXJUb2tlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGdldCB0ZXRoZXIgdXBkYXRlLCBmb3JjZSBzdG9wIGFjY2VzcyBwb2ludCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Tb2Z0QXBTdGFydGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NVUFBMSUNBTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9TVVBQTElDQU5UOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0FQOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfQVA6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9DT1VOVFJZX0NPREU6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkc6CisgICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HOgorICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgLy9TdGF0ZSBtYWNoaW5lIGluaXRpYXRlZCByZXF1ZXN0cyBjYW4gaGF2ZSByZXBseVRvIHNldCB0byBudWxsIGluZGljYXRpbmcKKyAgICAvL3RoZXJlIGFyZSBubyByZWNlcGllbnRzLCB3ZSBpZ25vcmUgdGhvc2UgcmVwbHkgYWN0aW9ucworICAgIHByaXZhdGUgdm9pZCByZXBseVRvTWVzc2FnZShNZXNzYWdlIG1zZywgaW50IHdoYXQpIHsKKyAgICAgICAgaWYgKG1zZy5yZXBseVRvID09IG51bGwpIHJldHVybjsKKyAgICAgICAgTWVzc2FnZSBkc3RNc2cgPSBvYnRhaW5NZXNzYWdlV2l0aEFyZzIobXNnKTsKKyAgICAgICAgZHN0TXNnLndoYXQgPSB3aGF0OworICAgICAgICBtUmVwbHlDaGFubmVsLnJlcGx5VG9NZXNzYWdlKG1zZywgZHN0TXNnKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVwbHlUb01lc3NhZ2UoTWVzc2FnZSBtc2csIGludCB3aGF0LCBpbnQgYXJnMSkgeworICAgICAgICBpZiAobXNnLnJlcGx5VG8gPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBNZXNzYWdlIGRzdE1zZyA9IG9idGFpbk1lc3NhZ2VXaXRoQXJnMihtc2cpOworICAgICAgICBkc3RNc2cud2hhdCA9IHdoYXQ7CisgICAgICAgIGRzdE1zZy5hcmcxID0gYXJnMTsKKyAgICAgICAgbVJlcGx5Q2hhbm5lbC5yZXBseVRvTWVzc2FnZShtc2csIGRzdE1zZyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHJlcGx5VG9NZXNzYWdlKE1lc3NhZ2UgbXNnLCBpbnQgd2hhdCwgT2JqZWN0IG9iaikgeworICAgICAgICBpZiAobXNnLnJlcGx5VG8gPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBNZXNzYWdlIGRzdE1zZyA9IG9idGFpbk1lc3NhZ2VXaXRoQXJnMihtc2cpOworICAgICAgICBkc3RNc2cud2hhdCA9IHdoYXQ7CisgICAgICAgIGRzdE1zZy5vYmogPSBvYmo7CisgICAgICAgIG1SZXBseUNoYW5uZWwucmVwbHlUb01lc3NhZ2UobXNnLCBkc3RNc2cpOworICAgIH0KKworICAgIC8qKgorICAgICAqIGFyZzIgb24gdGhlIHNvdXJjZSBtZXNzYWdlIGhhcyBhIHVuaXF1ZSBpZCB0aGF0IG5lZWRzIHRvIGJlIHJldGFpbmVkIGluIHJlcGxpZXMKKyAgICAgKiB0byBtYXRjaCB0aGUgcmVxdWVzdAorCisgICAgICogc2VlIFdpZmlNYW5hZ2VyIGZvciBkZXRhaWxzCisgICAgICovCisgICAgcHJpdmF0ZSBNZXNzYWdlIG9idGFpbk1lc3NhZ2VXaXRoQXJnMihNZXNzYWdlIHNyY01zZykgeworICAgICAgICBNZXNzYWdlIG1zZyA9IE1lc3NhZ2Uub2J0YWluKCk7CisgICAgICAgIG1zZy5hcmcyID0gc3JjTXNnLmFyZzI7CisgICAgICAgIHJldHVybiBtc2c7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpVHJhZmZpY1BvbGxlci5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpVHJhZmZpY1BvbGxlci5qYXZhCmluZGV4IGI0OTg1NTAuLjU2NzgwODYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaVRyYWZmaWNQb2xsZXIuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL1dpZmlUcmFmZmljUG9sbGVyLmphdmEKQEAgLTI2LDcgKzI2LDYgQEAKIGltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2VuZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIApAQCAtMzYsOCArMzUsNiBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwogCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Bc3luY0NoYW5uZWw7Ci0KIC8qIFBvbGxzIGZvciB0cmFmZmljIHN0YXRzIGFuZCBub3RpZmllcyB0aGUgY2xpZW50cyAqLwogZmluYWwgY2xhc3MgV2lmaVRyYWZmaWNQb2xsZXIgewogICAgIC8qKgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9XaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI1MDM2YQotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dpZmkvV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lLmphdmEKQEAgLTAsMCArMSwxMjEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIud2lmaTsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcjsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQubmV0LkxpbmtQcm9wZXJ0aWVzOworaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtJbmZvOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuUnNzaVBhY2tldENvdW50SW5mbzsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLlN1cHBsaWNhbnRTdGF0ZTsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlJbmZvOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTHJ1Q2FjaGU7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFzeW5jQ2hhbm5lbDsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByb3RvY29sOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGU7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZU1hY2hpbmU7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS50ZXh0LkRlY2ltYWxGb3JtYXQ7CisKKy8qKgorICogV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lIG1vbml0b3JzIHRoZSBjb25uZWN0aW9uIHRvIGEgV2lGaSBuZXR3b3JrLiBXaGVuIFdpRmkKKyAqIGNvbm5lY3RzIGF0IEwyIGxheWVyLCB0aGUgYmVhY29ucyBmcm9tIGFjY2VzcyBwb2ludCByZWFjaCB0aGUgZGV2aWNlIGFuZCBpdAorICogY2FuIG1haW50YWluIGEgY29ubmVjdGlvbiwgYnV0IHRoZSBhcHBsaWNhdGlvbiBjb25uZWN0aXZpdHkgY2FuIGJlIGZsYWt5IChkdWUKKyAqIHRvIGJpZ2dlciBwYWNrZXQgc2l6ZSBleGNoYW5nZSkuCisgKiA8cD4KKyAqIFdlIG5vdyBtb25pdG9yIHRoZSBxdWFsaXR5IG9mIHRoZSBsYXN0IGhvcCBvbiBXaUZpIHVzaW5nIHBhY2tldCBsb3NzIHJhdGlvIGFzCisgKiBhbiBpbmRpY2F0b3IgdG8gZGVjaWRlIGlmIHRoZSBsaW5rIGlzIGdvb2QgZW5vdWdoIHRvIHN3aXRjaCB0byBXaS1GaSBhcyB0aGUKKyAqIHVwbGluay4KKyAqIDxwPgorICogV2hlbiBXaUZpIGlzIGNvbm5lY3RlZCwgdGhlIFdpRmkgd2F0Y2hkb2cga2VlcHMgc2FtcGxpbmcgdGhlIFJTU0kgYW5kIHRoZQorICogaW5zdGFudCBwYWNrZXQgbG9zcywgYW5kIHJlY29yZCBpdCBhcyBwZXItQVAgbG9zcy10by1yc3NpIHN0YXRpc3RpY3MuIFdoZW4KKyAqIHRoZSBpbnN0YW50IHBhY2tldCBsb3NzIGlzIGhpZ2hlciB0aGFuIGEgdGhyZXNob2xkLCB0aGUgV2lGaSB3YXRjaGRvZyBzZW5kcyBhCisgKiBwb29yIGxpbmsgbm90aWZpY2F0aW9uIHRvIGF2b2lkIFdpRmkgY29ubmVjdGlvbiB0ZW1wb3JhcmlseS4KKyAqIDxwPgorICogV2hpbGUgV2lGaSBpcyBiZWluZyBhdm9pZGVkLCB0aGUgV2lGaSB3YXRjaGRvZyBrZWVwIHdhdGNoaW5nIHRoZSBSU1NJIHRvCisgKiBicmluZyB0aGUgV2lGaSBjb25uZWN0aW9uIGJhY2suIE9uY2UgdGhlIFJTU0kgaXMgaGlnaCBlbm91Z2ggdG8gYWNoaWV2ZSBhCisgKiBsb3dlciBwYWNrZXQgbG9zcywgYSBnb29kIGxpbmsgZGV0ZWN0aW9uIGlzIHNlbnQgc3VjaCB0aGF0IHRoZSBXaUZpCisgKiBjb25uZWN0aW9uIGJlY29tZSBhdmFpbGFibGUgYWdhaW4uCisgKiA8cD4KKyAqIEJTU0lEIHJvYW1pbmcgaGFzIGJlZW4gdGFrZW4gaW50byBhY2NvdW50LiBXaGVuIHVzZXIgaXMgbW92aW5nIGFjcm9zcworICogbXVsdGlwbGUgQVBzLCB0aGUgV2lGaSB3YXRjaGRvZyB3aWxsIGRldGVjdCB0aGF0IGFuZCBrZWVwIHdhdGNoaW5nIHRoZQorICogY3VycmVudGx5IGNvbm5lY3RlZCBBUC4KKyAqIDxwPgorICogUG93ZXIgaW1wYWN0IHNob3VsZCBiZSBtaW5pbWFsIHNpbmNlIG11Y2ggb2YgdGhlIG1lYXN1cmVtZW50IHJlbGllcyBvbgorICogcGFzc2l2ZSBzdGF0aXN0aWNzIGFscmVhZHkgYmVpbmcgdHJhY2tlZCBhdCB0aGUgZHJpdmVyIGFuZCB0aGUgcG9sbGluZyBpcworICogZG9uZSB3aGVuIHNjcmVlbiBpcyB0dXJuZWQgb24gYW5kIHRoZSBSU1NJIGlzIGluIGEgY2VydGFpbiByYW5nZS4KKyAqCisgKiBAaGlkZQorICovCitwdWJsaWMgY2xhc3MgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lIGV4dGVuZHMgU3RhdGVNYWNoaW5lIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREJHID0gZmFsc2U7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQkFTRSA9IFByb3RvY29sLkJBU0VfV0lGSV9XQVRDSERPRzsKKworICAgIC8qIEludGVybmFsIGV2ZW50cyAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9XQVRDSERPR19UT0dHTEVEICAgICAgICAgICAgICAgICA9IEJBU0UgKyAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9ORVRXT1JLX1NUQVRFX0NIQU5HRSAgICAgICAgICAgICA9IEJBU0UgKyAyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9SU1NJX0NIQU5HRSAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAzOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVVBQTElDQU5UX1NUQVRFX0NIQU5HRSAgICAgICAgICA9IEJBU0UgKyA0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9XSUZJX1JBRElPX1NUQVRFX0NIQU5HRSAgICAgICAgICA9IEJBU0UgKyA1OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9XQVRDSERPR19TRVRUSU5HU19DSEFOR0UgICAgICAgICA9IEJBU0UgKyA2OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9CU1NJRF9DSEFOR0UgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA3OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TQ1JFRU5fT04gICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA4OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TQ1JFRU5fT0ZGICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA5OworCisgICAgLyogSW50ZXJuYWwgbWVzc2FnZXMgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1JTU0lfRkVUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMTE7CisKKyAgICAvKiBOb3RpZmljYXRpb25zIGZyb20vdG8gV2lmaVN0YXRlTWFjaGluZSAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgUE9PUl9MSU5LX0RFVEVDVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAyMTsKKyAgICBzdGF0aWMgZmluYWwgaW50IEdPT0RfTElOS19ERVRFQ1RFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMjI7CisKKyAgICAvKgorICAgICAqIFJTU0kgbGV2ZWxzIGFzIHVzZWQgYnkgbm90aWZpY2F0aW9uIGljb24KKyAgICAgKiBMZXZlbCA0ICAtNTUgPD0gUlNTSQorICAgICAqIExldmVsIDMgIC02NiA8PSBSU1NJIDwgLTU1CisgICAgICogTGV2ZWwgMiAgLTc3IDw9IFJTU0kgPCAtNjcKKyAgICAgKiBMZXZlbCAxICAtODggPD0gUlNTSSA8IC03OAorICAgICAqIExldmVsIDAgICAgICAgICBSU1NJIDwgLTg4CisgICAgICovCisKKyAgICAvKioKKyAgICAgKiBXaUZpIGxpbmsgc3RhdGlzdGljcyBpcyBtb25pdG9yZWQgYW5kIHJlY29yZGVkIGFjdGl2ZWx5IGJlbG93IHRoaXMgdGhyZXNob2xkLgorICAgICAqIDxwPgorICAgICAqIExhcmdlciB0aHJlc2hvbGQgaXMgbW9yZSBhZGFwdGl2ZSBidXQgaW5jcmVhc2VzIHNhbXBsaW5nIGNvc3QuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJTktfTU9OSVRPUl9MRVZFTF9USFJFU0hPTEQgPSBXaWZpTWFuYWdlci5SU1NJX0xFVkVMUyAtIDE7CisKKyAgICAvKioKKyAgICAgKiBSZW1lbWJlciBwYWNrZXQgbG9zcyBzdGF0aXN0aWNzIG9mIGhvdyBtYW55IEJTU0lEcy4KKyAgICAgKiA8cD4KKyAgICAgKiBMYXJnZXIgc2l6ZSBpcyB1c3VhbGx5IGJldHRlciBidXQgcmVxdWlyZXMgbW9yZSBzcGFjZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlNTSURfU1RBVF9DQUNIRV9TSVpFID0gMjA7CisKKyAgICAvKioKKyAgICAgKiBSU1NJIHJhbmdlIG9mIGEgQlNTSUQgc3RhdGlzdGljcy4KKyAgICAgKiBXaXRoaW4gdGhlIHJhbmdlLCAoUlNTSSAtPiBwYWNrZXQgbG9zcyAlKSBtYXBwaW5ncyBhcmUgc3RvcmVkLgorICAgICAqIDxwPgorICAgICAqIExhcmdlciByYW5nZSBpcyB1c3VhbGx5IGJldHRlciBidXQgcmVxdWlyZXMgbW9yZSBzcGFjZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlNTSURfU1RBVF9SQU5HRV9MT1dfREJNICA9IC0xMDU7CisKKyAgICAvKioKKyAgICAgKiBTZWUge0BsaW5rICNCU1NJRF9TVEFUX1JBTkdFX0xPV19EQk19LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCU1NJRF9TVEFUX1JBTkdFX0hJR0hfREJNID0gLTQ1OworCisgICAgLyoqCisgICAgICogSG93IG1hbnkgY29uc2VjdXRpdmUgZW1wdHkgZGF0YSBwb2ludCB0byB0cmlnZ2VyIGEgZW1wdHktY2FjaGUgZGV0ZWN0aW9uLgorICAgICAqIEluIHRoaXMgY2FzZSwgYSBwcmVzZXQvZGVmYXVsdCBsb3NzIHZhbHVlIChmdW5jdGlvbiBvbiBSU1NJKSBpcyB1c2VkLgorICAgICAqIDxwPgorICAgICAqIEluIG5vcm1hbCB1c2VzLCBzb21lIFJTU0kgdmFsdWVzIG1heSBuZXZlciBiZSBzZWVuIGR1ZSB0byBjaGFubmVsIHJhbmRvbW5lc3MuCisgICAgICogSG93ZXZlciwgdGhlIHNpemUgb2Ygc3VjaCBlbXB0eSBSU1NJIGNodW5rIGluIG5vcm1hbCB1c2UgaXMgZ2VuZXJhbGx5IDF+Mi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlNTSURfU1RBVF9FTVBUWV9DT1VOVCA9IDM7CisKKyAgICAvKioKKyAgICAgKiBTYW1wbGUgaW50ZXJ2YWwgZm9yIHBhY2tldCBsb3NzIHN0YXRpc3RpY3MsIGluIG1zZWMuCisgICAgICogPHA+CisgICAgICogU21hbGxlciBpbnRlcnZhbCBpcyBtb3JlIGFjY3VyYXRlIGJ1dCBpbmNyZWFzZXMgc2FtcGxpbmcgY29zdCAoYmF0dGVyeSBjb25zdW1wdGlvbikuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBMSU5LX1NBTVBMSU5HX0lOVEVSVkFMX01TID0gMSAqIDEwMDA7CisKKyAgICAvKioKKyAgICAgKiBDb2VmZmljaWVudHMgKGFscGhhKSBmb3IgbW92aW5nIGF2ZXJhZ2UgZm9yIHBhY2tldCBsb3NzIHRyYWNraW5nLgorICAgICAqIE11c3QgYmUgd2l0aGluICgwLjAsIDEuMCkuCisgICAgICogPHA+CisgICAgICogRXF1aXZhbGVudCBudW1iZXIgb2Ygc2FtcGxlczogTiA9IDIgLyBhbHBoYSAtIDEgLgorICAgICAqIFdlIHdhbnQgdGhlIGhpc3RvcmljIGxvc3MgdG8gYmFzZSBvbiBtb3JlIGRhdGEgcG9pbnRzIHRvIGJlIHN0YXRpc3RpY2FsbHkgcmVsaWFibGUuCisgICAgICogV2Ugd2FudCB0aGUgY3VycmVudCBpbnN0YW50IGxvc3MgdG8gYmFzZSBvbiBsZXNzIGRhdGEgcG9pbnRzIHRvIGJlIHJlc3BvbnNpdmUuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIEVYUF9DT0VGRklDSUVOVF9SRUNPUkQgID0gMC4xOworCisgICAgLyoqCisgICAgICogU2VlIHtAbGluayAjRVhQX0NPRUZGSUNJRU5UX1JFQ09SRH0uCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIEVYUF9DT0VGRklDSUVOVF9NT05JVE9SID0gMC41OworCisgICAgLyoqCisgICAgICogVGhyZXNob2xkcyBmb3Igc2VuZGluZyBnb29kL3Bvb3IgbGluayBub3RpZmljYXRpb25zLCBpbiBwYWNrZXQgbG9zcyAlLgorICAgICAqIEdvb2QgdGhyZXNob2xkIG11c3QgYmUgc21hbGxlciB0aGFuIHBvb3IgdGhyZXNob2xkLgorICAgICAqIFVzZSBzbWFsbGVyIHBvb3IgdGhyZXNob2xkIHRvIGF2b2lkIFdpRmkgbW9yZSBhZ2dyZXNzaXZlbHkuCisgICAgICogVXNlIHNtYWxsZXIgZ29vZCB0aHJlc2hvbGQgdG8gYnJpbmcgYmFjayBXaUZpIG1vcmUgY29uc2VydmF0aXZlbHkuCisgICAgICogPHA+CisgICAgICogV2hlbiBhcHByb2FjaGluZyB0aGUgYm91bmRhcnksIGxvc3MgcmF0aW8ganVtcHMgc2lnbmlmaWNhbnRseSB3aXRoaW4gYSBmZXcgZEJzLgorICAgICAqIDUwJSBsb3NzIHRocmVzaG9sZCBpcyBhIGdvb2QgYmFsYW5jZSBiZXR3ZWVuIGFjY3VyYWN5IGFuZCByZXBvbnNpdmVuZXNzLgorICAgICAqIDw9MTAlIGdvb2QgdGhyZXNob2xkIGlzIGEgc2FmZSB2YWx1ZSB0byBhdm9pZCBqdW1waW5nIGJhY2sgdG8gV2lGaSB0b28gZWFzaWx5LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBQT09SX0xJTktfTE9TU19USFJFU0hPTEQgPSAwLjU7CisKKyAgICAvKioKKyAgICAgKiBTZWUge0BsaW5rICNQT09SX0xJTktfTE9TU19USFJFU0hPTER9LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBHT09EX0xJTktfTE9TU19USFJFU0hPTEQgPSAwLjE7CisKKyAgICAvKioKKyAgICAgKiBOdW1iZXIgb2Ygc2FtcGxlcyB0byBjb25maXJtIGJlZm9yZSBzZW5kaW5nIGEgcG9vciBsaW5rIG5vdGlmaWNhdGlvbi4KKyAgICAgKiBSZXNwb25zZSB0aW1lID0gY29uZmlybV9jb3VudCAqIHNhbXBsZV9pbnRlcnZhbCAuCisgICAgICogPHA+CisgICAgICogQSBzbWFsbGVyIHRocmVzaG9sZCBpbXByb3ZlcyByZXNwb25zZSBzcGVlZCBidXQgbWF5IHN1ZmZlciBmcm9tIHJhbmRvbW5lc3MuCisgICAgICogQWNjb3JkaW5nIHRvIGV4cGVyaW1lbnRzLCAzfjUgYXJlIGdvb2QgdmFsdWVzIHRvIGFjaGlldmUgYSBiYWxhbmNlLgorICAgICAqIFRoZXNlIHBhcmFtZXRlcnMgc2hvdWxkIGJlIHR1bmVkIGFsb25nIHdpdGgge0BsaW5rICNMSU5LX1NBTVBMSU5HX0lOVEVSVkFMX01TfS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUE9PUl9MSU5LX1NBTVBMRV9DT1VOVCA9IDM7CisKKyAgICAvKioKKyAgICAgKiBNaW5pbXVtIHZvbHVtZSAoY29udmVydGVkIGZyb20gcGt0L3NlYykgdG8gZGV0ZWN0IGEgcG9vciBsaW5rLCB0byBhdm9pZCByYW5kb21uZXNzLgorICAgICAqIDxwPgorICAgICAqIEFjY29yZGluZyB0byBleHBlcmltZW50cywgMXBrdC9zZWMgaXMgdG9vIHNlbnNpdGl2ZSBidXQgM3BrdC9zZWMgaXMgc2xpZ2h0bHkgdW5yZXNwb25zaXZlLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBQT09SX0xJTktfTUlOX1ZPTFVNRSA9IDIuMCAqIExJTktfU0FNUExJTkdfSU5URVJWQUxfTVMgLyAxMDAwLjA7CisKKyAgICAvKioKKyAgICAgKiBXaGVuIGEgcG9vciBsaW5rIGlzIGRldGVjdGVkLCB3ZSBzY2FuIG92ZXIgdGhpcyByYW5nZSAoYmFzZWQgb24gY3VycmVudAorICAgICAqIHBvb3IgbGluayBSU1NJKSBmb3IgYSB0YXJnZXQgUlNTSSB0aGF0IHNhdGlzZmllcyBhIHRhcmdldCBwYWNrZXQgbG9zcy4KKyAgICAgKiBSZWZlciB0byB7QGxpbmsgI0dPT0RfTElOS19UQVJHRVR9LgorICAgICAqIDxwPgorICAgICAqIFdlIHdhbnQgcmFuZ2VfbWluIG5vdCB0b28gc21hbGwgdG8gYXZvaWQganVtcGluZyBiYWNrIHRvIFdpRmkgdG9vIGVhc2lseS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgR09PRF9MSU5LX1JTU0lfUkFOR0VfTUlOID0gMzsKKworICAgIC8qKgorICAgICAqIFNlZSB7QGxpbmsgI0dPT0RfTElOS19SU1NJX1JBTkdFX01JTn0uCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEdPT0RfTElOS19SU1NJX1JBTkdFX01BWCA9IDIwOworCisgICAgLyoqCisgICAgICogQWRhcHRpdmUgZ29vZCBsaW5rIHRhcmdldCB0byBhdm9pZCBmbGFwcGluZy4KKyAgICAgKiBXaGVuIGEgcG9vciBsaW5rIGlzIGRldGVjdGVkLCBhIGdvb2QgbGluayB0YXJnZXQgaXMgY2FsY3VsYXRlZCBhcyBmb2xsb3dzOgorICAgICAqIDxwPgorICAgICAqICAgICAgdGFyZ2V0UlNTSSA9IG1pbiB7IHJzc2kgfCBsb3NzKHJzc2kpIDwgR09PRF9MSU5LX0xPU1NfVEhSRVNIT0xEIH0gKyByc3NpX2FkaltpXSwKKyAgICAgKiAgICAgICAgICAgICAgICAgICB3aGVyZSByc3NpIGlzIHdpdGhpbiB0aGUgYWJvdmUgR09PRF9MSU5LX1JTU0lfUkFOR0UuCisgICAgICogICAgICB0YXJnZXRDb3VudCA9IHNhbXBsZV9jb3VudFtpXSAuCisgICAgICogPHA+CisgICAgICogV2hpbGUgV2lGaSBpcyBiZWluZyBhdm9pZGVkLCB3ZSBrZWVwIG1vbml0b3JpbmcgaXRzIHNpZ25hbCBzdHJlbmd0aC4KKyAgICAgKiBHb29kIGxpbmsgbm90aWZpY2F0aW9uIGlzIHNlbnQgd2hlbiB3ZSBzZWUgY3VycmVudCBSU1NJID49IHRhcmdldFJTU0kKKyAgICAgKiBmb3IgdGFyZ2V0Q291bnQgY29uc2VjdXRpdmUgdGltZXMuCisgICAgICogPHA+CisgICAgICogSW5kZXggaSBpcyBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYWZ0ZXIgYSBwb29yIGxpbmsgZGV0ZWN0aW9uLgorICAgICAqIEluZGV4IGkgaXMgZGVjcmVhc2VkIHRvIGF0IG1vc3QgayBpZiB0aGUgbGFzdCBwb29yIGxpbmsgd2FzIGF0IGxlYXNlIHJlZHVjZV90aW1lW2tdIGFnby4KKyAgICAgKiA8cD4KKyAgICAgKiBJbnR1aXRpdmVseSwgbGFyZ2VyIGluZGV4IGkgbWFrZXMgaXQgbW9yZSBkaWZmaWN1bHQgdG8gZ2V0IGJhY2sgdG8gV2lGaSwgYXZvaWRpbmcgZmxhcHBpbmcuCisgICAgICogSW4gZXhwZXJpbWVudHMsICgrOSBkQiAvIDMwIGNvdW50cykgbWFrZXMgaXQgcXVpdGUgZGlmZmljdWx0IHRvIGFjaGlldmUuCisgICAgICogQXZvaWQgdXNpbmcgaXQgdW5sZXNzIGZsYXBwaW5nIGlzIHJlYWxseSBiYWQgKHNheSwgbGFzdCBwb29yIGxpbmsgaXMgPCAxIG1pbiBhZ28pLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdvb2RMaW5rVGFyZ2V0W10gR09PRF9MSU5LX1RBUkdFVCA9IHsKKyAgICAgICAgLyogICAgICAgICAgICAgICAgICByc3NpX2FkaiwgICAgICAgc2FtcGxlX2NvdW50LCAgIHJlZHVjZV90aW1lICovCisgICAgICAgIG5ldyBHb29kTGlua1RhcmdldCggMCwgICAgICAgICAgICAgIDMsICAgICAgICAgICAgICAzMCAqIDYwMDAwICAgKSwKKyAgICAgICAgbmV3IEdvb2RMaW5rVGFyZ2V0KCAzLCAgICAgICAgICAgICAgNSwgICAgICAgICAgICAgIDUgICogNjAwMDAgICApLAorICAgICAgICBuZXcgR29vZExpbmtUYXJnZXQoIDYsICAgICAgICAgICAgICAxMCwgICAgICAgICAgICAgMSAgKiA2MDAwMCAgICksCisgICAgICAgIG5ldyBHb29kTGlua1RhcmdldCggOSwgICAgICAgICAgICAgIDMwLCAgICAgICAgICAgICAwICAqIDYwMDAwICAgKSwKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhlIG1heCB0aW1lIHRvIGF2b2lkIGEgQlNTSUQsIHRvIHByZXZlbnQgYXZvaWRpbmcgZm9yZXZlci4KKyAgICAgKiBJZiBjdXJyZW50IFJTU0kgaXMgYXQgbGVhc3QgbWluX3Jzc2lbaV0sIHRoZSBtYXggYXZvaWRhbmNlIHRpbWUgaXMgYXQgbW9zdCBtYXhfdGltZVtpXQorICAgICAqIDxwPgorICAgICAqIEl0IGlzIHVudXN1YWwgdG8gZXhwZXJpZW5jZSBoaWdoIHBhY2tldCBsb3NzIGF0IGhpZ2ggUlNTSS4gU29tZXRoaW5nIHVudXN1YWwgbXVzdCBiZQorICAgICAqIGhhcHBlbmluZyAoZS5nLiBzdHJvbmcgaW50ZXJmZXJlbmNlKS4gRm9yIGhpZ2hlciBzaWduYWwgc3RyZW5ndGhzLCB3ZSBzZXQgdGhlIGF2b2lkYW5jZQorICAgICAqIHRpbWUgdG8gYmUgbG93IHRvIGFsbG93IGZvciBxdWljayB0dXJuIGFyb3VuZCBmcm9tIHRlbXBvcmFyeSBpbnRlcmZlcmVuY2UuCisgICAgICogPHA+CisgICAgICogU2VlIHtAbGluayBCc3NpZFN0YXRpc3RpY3MjcG9vckxpbmtEZXRlY3RlZH0uCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWF4QXZvaWRUaW1lW10gTUFYX0FWT0lEX1RJTUUgPSB7CisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgbWF4X3RpbWUsICAgICAgICAgICBtaW5fcnNzaSAqLworICAgICAgICBuZXcgTWF4QXZvaWRUaW1lKCAgIDMwICogNjAwMDAsICAgICAgICAgLTIwMCAgICAgICksCisgICAgICAgIG5ldyBNYXhBdm9pZFRpbWUoICAgNSAgKiA2MDAwMCwgICAgICAgICAtNzAgICAgICAgKSwKKyAgICAgICAgbmV3IE1heEF2b2lkVGltZSggICAwICAqIDYwMDAwLCAgICAgICAgIC01NSAgICAgICApLAorICAgIH07CisKKyAgICAvKiBGcmFtZXdvcmsgcmVsYXRlZCAqLworICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKKyAgICBwcml2YXRlIENvbnRlbnRSZXNvbHZlciBtQ29udGVudFJlc29sdmVyOworICAgIHByaXZhdGUgV2lmaU1hbmFnZXIgbVdpZmlNYW5hZ2VyOworICAgIHByaXZhdGUgSW50ZW50RmlsdGVyIG1JbnRlbnRGaWx0ZXI7CisgICAgcHJpdmF0ZSBCcm9hZGNhc3RSZWNlaXZlciBtQnJvYWRjYXN0UmVjZWl2ZXI7CisgICAgcHJpdmF0ZSBBc3luY0NoYW5uZWwgbVdzbUNoYW5uZWwgPSBuZXcgQXN5bmNDaGFubmVsKCk7CisgICAgcHJpdmF0ZSBXaWZpSW5mbyBtV2lmaUluZm87CisgICAgcHJpdmF0ZSBMaW5rUHJvcGVydGllcyBtTGlua1Byb3BlcnRpZXM7CisKKyAgICAvKiBTeXN0ZW0gc2V0dGluZ3NzIHJlbGF0ZWQgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHNXaWZpT25seSA9IGZhbHNlOworICAgIHByaXZhdGUgYm9vbGVhbiBtUG9vck5ldHdvcmtEZXRlY3Rpb25FbmFibGVkOworCisgICAgLyogUG9vciBsaW5rIGRldGVjdGlvbiByZWxhdGVkICovCisgICAgcHJpdmF0ZSBMcnVDYWNoZTxTdHJpbmcsIEJzc2lkU3RhdGlzdGljcz4gbUJzc2lkQ2FjaGUgPQorICAgICAgICAgICAgbmV3IExydUNhY2hlPFN0cmluZywgQnNzaWRTdGF0aXN0aWNzPihCU1NJRF9TVEFUX0NBQ0hFX1NJWkUpOworICAgIHByaXZhdGUgaW50IG1Sc3NpRmV0Y2hUb2tlbiA9IDA7CisgICAgcHJpdmF0ZSBpbnQgbUN1cnJlbnRTaWduYWxMZXZlbDsKKyAgICBwcml2YXRlIEJzc2lkU3RhdGlzdGljcyBtQ3VycmVudEJzc2lkOworICAgIHByaXZhdGUgVm9sdW1lV2VpZ2h0ZWRFTUEgbUN1cnJlbnRMb3NzOworICAgIHByaXZhdGUgYm9vbGVhbiBtSXNTY3JlZW5PbiA9IHRydWU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZG91YmxlIHNQcmVzZXRMb3NzW107CisKKyAgICAvKiBXaUZpIHdhdGNoZG9nIHN0YXRlIG1hY2hpbmUgcmVsYXRlZCAqLworICAgIHByaXZhdGUgRGVmYXVsdFN0YXRlIG1EZWZhdWx0U3RhdGUgPSBuZXcgRGVmYXVsdFN0YXRlKCk7CisgICAgcHJpdmF0ZSBXYXRjaGRvZ0Rpc2FibGVkU3RhdGUgbVdhdGNoZG9nRGlzYWJsZWRTdGF0ZSA9IG5ldyBXYXRjaGRvZ0Rpc2FibGVkU3RhdGUoKTsKKyAgICBwcml2YXRlIFdhdGNoZG9nRW5hYmxlZFN0YXRlIG1XYXRjaGRvZ0VuYWJsZWRTdGF0ZSA9IG5ldyBXYXRjaGRvZ0VuYWJsZWRTdGF0ZSgpOworICAgIHByaXZhdGUgTm90Q29ubmVjdGVkU3RhdGUgbU5vdENvbm5lY3RlZFN0YXRlID0gbmV3IE5vdENvbm5lY3RlZFN0YXRlKCk7CisgICAgcHJpdmF0ZSBWZXJpZnlpbmdMaW5rU3RhdGUgbVZlcmlmeWluZ0xpbmtTdGF0ZSA9IG5ldyBWZXJpZnlpbmdMaW5rU3RhdGUoKTsKKyAgICBwcml2YXRlIENvbm5lY3RlZFN0YXRlIG1Db25uZWN0ZWRTdGF0ZSA9IG5ldyBDb25uZWN0ZWRTdGF0ZSgpOworICAgIHByaXZhdGUgT25saW5lV2F0Y2hTdGF0ZSBtT25saW5lV2F0Y2hTdGF0ZSA9IG5ldyBPbmxpbmVXYXRjaFN0YXRlKCk7CisgICAgcHJpdmF0ZSBMaW5rTW9uaXRvcmluZ1N0YXRlIG1MaW5rTW9uaXRvcmluZ1N0YXRlID0gbmV3IExpbmtNb25pdG9yaW5nU3RhdGUoKTsKKyAgICBwcml2YXRlIE9ubGluZVN0YXRlIG1PbmxpbmVTdGF0ZSA9IG5ldyBPbmxpbmVTdGF0ZSgpOworCisgICAgLyoqCisgICAgICogU1RBVEUgTUFQCisgICAgICogICAgICAgICAgRGVmYXVsdAorICAgICAqICAgICAgICAgLyAgICAgICBcCisgICAgICogRGlzYWJsZWQgICAgICBFbmFibGVkCisgICAgICogICAgICAgICAgICAgLyAgICAgXCAgICAgXAorICAgICAqIE5vdENvbm5lY3RlZCAgVmVyaWZ5aW5nICBDb25uZWN0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAvLS0tLS0tLS0tXAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAoYWxsIG90aGVyIHN0YXRlcykKKyAgICAgKi8KKyAgICBwcml2YXRlIFdpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZShDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgc3VwZXIoIldpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZSIpOworICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgIG1Db250ZW50UmVzb2x2ZXIgPSBjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOworICAgICAgICBtV2lmaU1hbmFnZXIgPSAoV2lmaU1hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJRklfU0VSVklDRSk7CisgICAgICAgIG1Xc21DaGFubmVsLmNvbm5lY3RTeW5jKG1Db250ZXh0LCBnZXRIYW5kbGVyKCksCisgICAgICAgICAgICAgICAgbVdpZmlNYW5hZ2VyLmdldFdpZmlTdGF0ZU1hY2hpbmVNZXNzZW5nZXIoKSk7CisKKyAgICAgICAgc2V0dXBOZXR3b3JrUmVjZWl2ZXIoKTsKKworICAgICAgICAvLyB0aGUgY29udGVudCBvYnNlcnZlciB0byBsaXN0ZW4gbmVlZHMgYSBoYW5kbGVyCisgICAgICAgIHJlZ2lzdGVyRm9yU2V0dGluZ3NDaGFuZ2VzKCk7CisgICAgICAgIHJlZ2lzdGVyRm9yV2F0Y2hkb2dUb2dnbGUoKTsKKyAgICAgICAgYWRkU3RhdGUobURlZmF1bHRTdGF0ZSk7CisgICAgICAgICAgICBhZGRTdGF0ZShtV2F0Y2hkb2dEaXNhYmxlZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKKyAgICAgICAgICAgIGFkZFN0YXRlKG1XYXRjaGRvZ0VuYWJsZWRTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7CisgICAgICAgICAgICAgICAgYWRkU3RhdGUobU5vdENvbm5lY3RlZFN0YXRlLCBtV2F0Y2hkb2dFbmFibGVkU3RhdGUpOworICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1WZXJpZnlpbmdMaW5rU3RhdGUsIG1XYXRjaGRvZ0VuYWJsZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgYWRkU3RhdGUobUNvbm5lY3RlZFN0YXRlLCBtV2F0Y2hkb2dFbmFibGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtT25saW5lV2F0Y2hTdGF0ZSwgbUNvbm5lY3RlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobUxpbmtNb25pdG9yaW5nU3RhdGUsIG1Db25uZWN0ZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1PbmxpbmVTdGF0ZSwgbUNvbm5lY3RlZFN0YXRlKTsKKworICAgICAgICBpZiAoaXNXYXRjaGRvZ0VuYWJsZWQoKSkgeworICAgICAgICAgICAgc2V0SW5pdGlhbFN0YXRlKG1Ob3RDb25uZWN0ZWRTdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZXRJbml0aWFsU3RhdGUobVdhdGNoZG9nRGlzYWJsZWRTdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0TG9nUmVjU2l6ZSgyNSk7CisgICAgICAgIHNldExvZ09ubHlUcmFuc2l0aW9ucyh0cnVlKTsKKyAgICAgICAgdXBkYXRlU2V0dGluZ3MoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFdpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZSBtYWtlV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lKENvbnRleHQgY29udGV4dCkgeworICAgICAgICBDb250ZW50UmVzb2x2ZXIgY29udGVudFJlc29sdmVyID0gY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKKworICAgICAgICBDb25uZWN0aXZpdHlNYW5hZ2VyIGNtID0gKENvbm5lY3Rpdml0eU1hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZSgKKyAgICAgICAgICAgICAgICBDb250ZXh0LkNPTk5FQ1RJVklUWV9TRVJWSUNFKTsKKyAgICAgICAgc1dpZmlPbmx5ID0gKGNtLmlzTmV0d29ya1N1cHBvcnRlZChDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfTU9CSUxFKSA9PSBmYWxzZSk7CisKKyAgICAgICAgLy8gV2F0Y2hkb2cgaXMgYWx3YXlzIGVuYWJsZWQuIFBvb3IgbmV0d29yayBkZXRlY3Rpb24gY2FuIGJlIHNlcGVyYXRlbHkgdHVybmVkIG9uL29mZgorICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBzZXR0aW5nICYgY2xlYW4gdXAgc3RhdGUgbWFjaGluZSBzaW5jZSB3ZSBhbHdheXMgaGF2ZQorICAgICAgICAvLyB3YXRjaGRvZyBpbiBhbiBlbmFibGVkIHN0YXRlCisgICAgICAgIHB1dFNldHRpbmdzR2xvYmFsQm9vbGVhbihjb250ZW50UmVzb2x2ZXIsIFNldHRpbmdzLkdsb2JhbC5XSUZJX1dBVENIRE9HX09OLCB0cnVlKTsKKworICAgICAgICBXaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUgd3dzbSA9IG5ldyBXaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUoY29udGV4dCk7CisgICAgICAgIHd3c20uc3RhcnQoKTsKKyAgICAgICAgcmV0dXJuIHd3c207CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldHVwTmV0d29ya1JlY2VpdmVyKCkgeworICAgICAgICBtQnJvYWRjYXN0UmVjZWl2ZXIgPSBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgYWN0aW9uID0gaW50ZW50LmdldEFjdGlvbigpOworICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uZXF1YWxzKFdpZmlNYW5hZ2VyLlJTU0lfQ0hBTkdFRF9BQ1RJT04pKSB7CisgICAgICAgICAgICAgICAgICAgIG9idGFpbk1lc3NhZ2UoRVZFTlRfUlNTSV9DSEFOR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50LmdldEludEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX05FV19SU1NJLCAtMjAwKSwgMCkuc2VuZFRvVGFyZ2V0KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKFdpZmlNYW5hZ2VyLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKEVWRU5UX1NVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFLCBpbnRlbnQpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhXaWZpTWFuYWdlci5ORVRXT1JLX1NUQVRFX0NIQU5HRURfQUNUSU9OKSkgeworICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShFVkVOVF9ORVRXT1JLX1NUQVRFX0NIQU5HRSwgaW50ZW50KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoSW50ZW50LkFDVElPTl9TQ1JFRU5fT04pKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKEVWRU5UX1NDUkVFTl9PTik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKEludGVudC5BQ1RJT05fU0NSRUVOX09GRikpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoRVZFTlRfU0NSRUVOX09GRik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKFdpZmlNYW5hZ2VyLldJRklfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKEVWRU5UX1dJRklfUkFESU9fU1RBVEVfQ0hBTkdFLGludGVudC5nZXRJbnRFeHRyYSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5FWFRSQV9XSUZJX1NUQVRFLCBXaWZpTWFuYWdlci5XSUZJX1NUQVRFX1VOS05PV04pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgbUludGVudEZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoKTsKKyAgICAgICAgbUludGVudEZpbHRlci5hZGRBY3Rpb24oV2lmaU1hbmFnZXIuTkVUV09SS19TVEFURV9DSEFOR0VEX0FDVElPTik7CisgICAgICAgIG1JbnRlbnRGaWx0ZXIuYWRkQWN0aW9uKFdpZmlNYW5hZ2VyLldJRklfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pOworICAgICAgICBtSW50ZW50RmlsdGVyLmFkZEFjdGlvbihXaWZpTWFuYWdlci5SU1NJX0NIQU5HRURfQUNUSU9OKTsKKyAgICAgICAgbUludGVudEZpbHRlci5hZGRBY3Rpb24oV2lmaU1hbmFnZXIuU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VEX0FDVElPTik7CisgICAgICAgIG1JbnRlbnRGaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fU0NSRUVOX09OKTsKKyAgICAgICAgbUludGVudEZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9TQ1JFRU5fT0ZGKTsKKyAgICAgICAgbUNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcihtQnJvYWRjYXN0UmVjZWl2ZXIsIG1JbnRlbnRGaWx0ZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE9ic2VydmVzIHRoZSB3YXRjaGRvZyBvbi9vZmYgc2V0dGluZywgYW5kIHRha2VzIGFjdGlvbiB3aGVuIGNoYW5nZWQuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyRm9yV2F0Y2hkb2dUb2dnbGUoKSB7CisgICAgICAgIENvbnRlbnRPYnNlcnZlciBjb250ZW50T2JzZXJ2ZXIgPSBuZXcgQ29udGVudE9ic2VydmVyKHRoaXMuZ2V0SGFuZGxlcigpKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hhbmdlKGJvb2xlYW4gc2VsZkNoYW5nZSkgeworICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKEVWRU5UX1dBVENIRE9HX1RPR0dMRUQpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKAorICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5nZXRVcmlGb3IoU2V0dGluZ3MuR2xvYmFsLldJRklfV0FUQ0hET0dfT04pLAorICAgICAgICAgICAgICAgIGZhbHNlLCBjb250ZW50T2JzZXJ2ZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE9ic2VydmVzIHdhdGNoZG9ncyBzZWN1cmUgc2V0dGluZyBjaGFuZ2VzLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCByZWdpc3RlckZvclNldHRpbmdzQ2hhbmdlcygpIHsKKyAgICAgICAgQ29udGVudE9ic2VydmVyIGNvbnRlbnRPYnNlcnZlciA9IG5ldyBDb250ZW50T2JzZXJ2ZXIodGhpcy5nZXRIYW5kbGVyKCkpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25DaGFuZ2UoYm9vbGVhbiBzZWxmQ2hhbmdlKSB7CisgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoRVZFTlRfV0FUQ0hET0dfU0VUVElOR1NfQ0hBTkdFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKS5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcigKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuZ2V0VXJpRm9yKFNldHRpbmdzLkdsb2JhbC5XSUZJX1dBVENIRE9HX1BPT1JfTkVUV09SS19URVNUX0VOQUJMRUQpLAorICAgICAgICAgICAgICAgIGZhbHNlLCBjb250ZW50T2JzZXJ2ZXIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGR1bXAoRmlsZURlc2NyaXB0b3IgZmQsIFByaW50V3JpdGVyIHB3LCBTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIHN1cGVyLmR1bXAoZmQsIHB3LCBhcmdzKTsKKyAgICAgICAgcHcucHJpbnRsbigibVdpZmlJbmZvOiBbIiArIG1XaWZpSW5mbyArICJdIik7CisgICAgICAgIHB3LnByaW50bG4oIm1MaW5rUHJvcGVydGllczogWyIgKyBtTGlua1Byb3BlcnRpZXMgKyAiXSIpOworICAgICAgICBwdy5wcmludGxuKCJtQ3VycmVudFNpZ25hbExldmVsOiBbIiArIG1DdXJyZW50U2lnbmFsTGV2ZWwgKyAiXSIpOworICAgICAgICBwdy5wcmludGxuKCJtUG9vck5ldHdvcmtEZXRlY3Rpb25FbmFibGVkOiBbIiArIG1Qb29yTmV0d29ya0RldGVjdGlvbkVuYWJsZWQgKyAiXSIpOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBpc1dhdGNoZG9nRW5hYmxlZCgpIHsKKyAgICAgICAgYm9vbGVhbiByZXQgPSBnZXRTZXR0aW5nc0dsb2JhbEJvb2xlYW4oCisgICAgICAgICAgICAgICAgbUNvbnRlbnRSZXNvbHZlciwgU2V0dGluZ3MuR2xvYmFsLldJRklfV0FUQ0hET0dfT04sIHRydWUpOworICAgICAgICBpZiAoREJHKSBsb2dkKCJXYXRjaGRvZyBlbmFibGVkICIgKyByZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVTZXR0aW5ncygpIHsKKyAgICAgICAgaWYgKERCRykgbG9nZCgiVXBkYXRpbmcgc2VjdXJlIHNldHRpbmdzIik7CisKKyAgICAgICAgLy8gZGlzYWJsZSBwb29yIG5ldHdvcmsgYXZvaWRhbmNlCisgICAgICAgIGlmIChzV2lmaU9ubHkpIHsKKyAgICAgICAgICAgIGxvZ2QoIkRpc2FibGluZyBwb29yIG5ldHdvcmsgYXZvaWRhbmNlIGZvciB3aS1maSBvbmx5IGRldmljZSIpOworICAgICAgICAgICAgbVBvb3JOZXR3b3JrRGV0ZWN0aW9uRW5hYmxlZCA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVBvb3JOZXR3b3JrRGV0ZWN0aW9uRW5hYmxlZCA9IGdldFNldHRpbmdzR2xvYmFsQm9vbGVhbihtQ29udGVudFJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9XQVRDSERPR19QT09SX05FVFdPUktfVEVTVF9FTkFCTEVELAorICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5ERUZBVUxUX1BPT1JfTkVUV09SS19BVk9JREFOQ0VfRU5BQkxFRCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IHN0YXRlLCBndWFyZCBmb3IgdW5oYW5kbGVkIG1lc3NhZ2VzLgorICAgICAqLworICAgIGNsYXNzIERlZmF1bHRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9XQVRDSERPR19TRVRUSU5HU19DSEFOR0U6CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVNldHRpbmdzKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlVwZGF0aW5nIHdpZmktd2F0Y2hkb2cgc2VjdXJlIHNldHRpbmdzIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfUlNTSV9DSEFOR0U6CisgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50U2lnbmFsTGV2ZWwgPSBjYWxjdWxhdGVTaWduYWxMZXZlbChtc2cuYXJnMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfV0lGSV9SQURJT19TVEFURV9DSEFOR0U6CisgICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9ORVRXT1JLX1NUQVRFX0NIQU5HRToKKyAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1NVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFOgorICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfQlNTSURfQ0hBTkdFOgorICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JTU0lfRkVUQ0g6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSF9TVUNDRUVERUQ6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSF9GQUlMRUQ6CisgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1NDUkVFTl9PTjoKKyAgICAgICAgICAgICAgICAgICAgbUlzU2NyZWVuT24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1NDUkVFTl9PRkY6CisgICAgICAgICAgICAgICAgICAgIG1Jc1NjcmVlbk9uID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlVuaGFuZGxlZCBtZXNzYWdlICIgKyBtc2cgKyAiIGluIHN0YXRlICIgKyBnZXRDdXJyZW50U3RhdGUoKS5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogV2lGaSB3YXRjaGRvZyBpcyBkaXNhYmxlZCBieSB0aGUgc2V0dGluZy4KKyAgICAgKi8KKyAgICBjbGFzcyBXYXRjaGRvZ0Rpc2FibGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1zZykgeworICAgICAgICAgICAgc3dpdGNoIChtc2cud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfV0FUQ0hET0dfVE9HR0xFRDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzV2F0Y2hkb2dFbmFibGVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU5vdENvbm5lY3RlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9ORVRXT1JLX1NUQVRFX0NIQU5HRToKKyAgICAgICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IChJbnRlbnQpIG1zZy5vYmo7CisgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtJbmZvIG5ldHdvcmtJbmZvID0gKE5ldHdvcmtJbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudC5nZXRQYXJjZWxhYmxlRXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTkVUV09SS19JTkZPKTsKKworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtJbmZvLmdldERldGFpbGVkU3RhdGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWRVJJRllJTkdfUE9PUl9MSU5LOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIldhdGNoZG9nIGRpc2FibGVkLCB2ZXJpZnkgbGluayIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRMaW5rU3RhdHVzTm90aWZpY2F0aW9uKHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFdpRmkgd2F0Y2hkb2cgaXMgZW5hYmxlZCBieSB0aGUgc2V0dGluZy4KKyAgICAgKi8KKyAgICBjbGFzcyBXYXRjaGRvZ0VuYWJsZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgICAgICBJbnRlbnQgaW50ZW50OworICAgICAgICAgICAgc3dpdGNoIChtc2cud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfV0FUQ0hET0dfVE9HR0xFRDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1dhdGNoZG9nRW5hYmxlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1XYXRjaGRvZ0Rpc2FibGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfTkVUV09SS19TVEFURV9DSEFOR0U6CisgICAgICAgICAgICAgICAgICAgIGludGVudCA9IChJbnRlbnQpIG1zZy5vYmo7CisgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtJbmZvIG5ldHdvcmtJbmZvID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTmV0d29ya0luZm8pIGludGVudC5nZXRQYXJjZWxhYmxlRXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTkVUV09SS19JTkZPKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiTmV0d29yayBzdGF0ZSBjaGFuZ2UgIiArIG5ldHdvcmtJbmZvLmdldERldGFpbGVkU3RhdGUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlJbmZvID0gKFdpZmlJbmZvKSBpbnRlbnQuZ2V0UGFyY2VsYWJsZUV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX1dJRklfSU5GTyk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRCc3NpZChtV2lmaUluZm8gIT0gbnVsbCA/IG1XaWZpSW5mby5nZXRCU1NJRCgpIDogbnVsbCk7CisKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrSW5mby5nZXREZXRhaWxlZFN0YXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVkVSSUZZSU5HX1BPT1JfTElOSzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGlua1Byb3BlcnRpZXMgPSAoTGlua1Byb3BlcnRpZXMpIGludGVudC5nZXRQYXJjZWxhYmxlRXh0cmEoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5FWFRSQV9MSU5LX1BST1BFUlRJRVMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtUG9vck5ldHdvcmtEZXRlY3Rpb25FbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaUluZm8gPT0gbnVsbCB8fCBtQ3VycmVudEJzc2lkID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIklnbm9yZSwgd2lmaWluZm8gIiArIG1XaWZpSW5mbyArIiBic3NpZCAiICsgbUN1cnJlbnRCc3NpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTGlua1N0YXR1c05vdGlmaWNhdGlvbih0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVmVyaWZ5aW5nTGlua1N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRMaW5rU3RhdHVzTm90aWZpY2F0aW9uKHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09OTkVDVEVEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtT25saW5lV2F0Y2hTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtTm90Q29ubmVjdGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9TVVBQTElDQU5UX1NUQVRFX0NIQU5HRToKKyAgICAgICAgICAgICAgICAgICAgaW50ZW50ID0gKEludGVudCkgbXNnLm9iajsKKyAgICAgICAgICAgICAgICAgICAgU3VwcGxpY2FudFN0YXRlIHN1cHBsaWNhbnRTdGF0ZSA9IChTdXBwbGljYW50U3RhdGUpIGludGVudC5nZXRQYXJjZWxhYmxlRXh0cmEoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuRVhUUkFfTkVXX1NUQVRFKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN1cHBsaWNhbnRTdGF0ZSA9PSBTdXBwbGljYW50U3RhdGUuQ09NUExFVEVEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaUluZm8gPSBtV2lmaU1hbmFnZXIuZ2V0Q29ubmVjdGlvbkluZm8oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRCc3NpZChtV2lmaUluZm8uZ2V0QlNTSUQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1dJRklfUkFESU9fU1RBVEVfQ0hBTkdFOgorICAgICAgICAgICAgICAgICAgICBpZiAobXNnLmFyZzEgPT0gV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9ESVNBQkxJTkcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtTm90Q29ubmVjdGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFdpRmkgaXMgZGlzY29ubmVjdGVkLgorICAgICAqLworICAgIGNsYXNzIE5vdENvbm5lY3RlZFN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXaUZpIGlzIGNvbm5lY3RlZCwgYnV0IHdhaXRpbmcgZm9yIGdvb2QgbGluayBkZXRlY3Rpb24gbWVzc2FnZS4KKyAgICAgKi8KKyAgICBjbGFzcyBWZXJpZnlpbmdMaW5rU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVNhbXBsZUNvdW50OworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIG1TYW1wbGVDb3VudCA9IDA7CisgICAgICAgICAgICBtQ3VycmVudEJzc2lkLm5ld0xpbmtEZXRlY3RlZCgpOworICAgICAgICAgICAgc2VuZE1lc3NhZ2Uob2J0YWluTWVzc2FnZShDTURfUlNTSV9GRVRDSCwgKyttUnNzaUZldGNoVG9rZW4sIDApKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1zZykgeworICAgICAgICAgICAgc3dpdGNoIChtc2cud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfV0FUQ0hET0dfU0VUVElOR1NfQ0hBTkdFOgorICAgICAgICAgICAgICAgICAgICB1cGRhdGVTZXR0aW5ncygpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW1Qb29yTmV0d29ya0RldGVjdGlvbkVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRMaW5rU3RhdHVzTm90aWZpY2F0aW9uKHRydWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9CU1NJRF9DSEFOR0U6CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVmVyaWZ5aW5nTGlua1N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9SU1NJX0ZFVENIOgorICAgICAgICAgICAgICAgICAgICBpZiAobXNnLmFyZzEgPT0gbVJzc2lGZXRjaFRva2VuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtV3NtQ2hhbm5lbC5zZW5kTWVzc2FnZShXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShDTURfUlNTSV9GRVRDSCwgKyttUnNzaUZldGNoVG9rZW4sIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSU5LX1NBTVBMSU5HX0lOVEVSVkFMX01TKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuUlNTSV9QS1RDTlRfRkVUQ0hfU1VDQ0VFREVEOgorICAgICAgICAgICAgICAgICAgICBSc3NpUGFja2V0Q291bnRJbmZvIGluZm8gPSAoUnNzaVBhY2tldENvdW50SW5mbykgbXNnLm9iajsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJzc2kgPSBpbmZvLnJzc2k7CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkZldGNoIFJTU0kgc3VjY2VlZCwgcnNzaT0iICsgcnNzaSk7CisKKyAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lID0gbUN1cnJlbnRCc3NpZC5tQnNzaWRBdm9pZFRpbWVNYXggLSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWUgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4IGF2b2lkYW5jZSB0aW1lIGlzIG1ldAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiTWF4IGF2b2lkIHRpbWUgZWxhcHNlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZExpbmtTdGF0dXNOb3RpZmljYXRpb24odHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnNzaSA+PSBtQ3VycmVudEJzc2lkLm1Hb29kTGlua1RhcmdldFJzc2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKyttU2FtcGxlQ291bnQgPj0gbUN1cnJlbnRCc3NpZC5tR29vZExpbmtUYXJnZXRDb3VudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5rIGlzIGdvb2QgYWdhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiR29vZCBsaW5rIGRldGVjdGVkLCByc3NpPSIgKyByc3NpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRCc3NpZC5tQnNzaWRBdm9pZFRpbWVNYXggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTGlua1N0YXR1c05vdGlmaWNhdGlvbih0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiTGluayBpcyBzdGlsbCBwb29yLCB0aW1lIGxlZnQ9IiArIHRpbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSF9GQUlMRUQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlJTU0lfRkVUQ0hfRkFJTEVEIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXaUZpIGlzIGNvbm5lY3RlZCBhbmQgbGluayBpcyB2ZXJpZmllZC4KKyAgICAgKi8KKyAgICBjbGFzcyBDb25uZWN0ZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9XQVRDSERPR19TRVRUSU5HU19DSEFOR0U6CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVNldHRpbmdzKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtUG9vck5ldHdvcmtEZXRlY3Rpb25FbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU9ubGluZVdhdGNoU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1PbmxpbmVTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSU1NJIGlzIGhpZ2ggZW5vdWdoIGFuZCBkb24ndCBuZWVkIGxpbmsgbW9uaXRvcmluZy4KKyAgICAgKi8KKyAgICBjbGFzcyBPbmxpbmVXYXRjaFN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7CisgICAgICAgICAgICBpZiAobVBvb3JOZXR3b3JrRGV0ZWN0aW9uRW5hYmxlZCkgeworICAgICAgICAgICAgICAgIC8vIHRyZWF0IGVudHJ5IGFzIGFuIHJzc2kgY2hhbmdlCisgICAgICAgICAgICAgICAgaGFuZGxlUnNzaUNoYW5nZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU9ubGluZVN0YXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVSc3NpQ2hhbmdlKCkgeworICAgICAgICAgICAgaWYgKG1DdXJyZW50U2lnbmFsTGV2ZWwgPD0gTElOS19NT05JVE9SX0xFVkVMX1RIUkVTSE9MRCAmJiBtQ3VycmVudEJzc2lkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUxpbmtNb25pdG9yaW5nU3RhdGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBzdGF5IGhlcmUKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1zZykgeworICAgICAgICAgICAgc3dpdGNoIChtc2cud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfUlNTSV9DSEFOR0U6CisgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50U2lnbmFsTGV2ZWwgPSBjYWxjdWxhdGVTaWduYWxMZXZlbChtc2cuYXJnMSk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZVJzc2lDaGFuZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBLZWVwIHNhbXBsaW5nIHRoZSBsaW5rIGFuZCBtb25pdG9yIGFueSBwb29yIGxpbmsgc2l0dWF0aW9uLgorICAgICAqLworICAgIGNsYXNzIExpbmtNb25pdG9yaW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVNhbXBsZUNvdW50OworCisgICAgICAgIHByaXZhdGUgaW50IG1MYXN0UnNzaTsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUxhc3RUeEdvb2Q7CisgICAgICAgIHByaXZhdGUgaW50IG1MYXN0VHhCYWQ7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOworICAgICAgICAgICAgbVNhbXBsZUNvdW50ID0gMDsKKyAgICAgICAgICAgIG1DdXJyZW50TG9zcyA9IG5ldyBWb2x1bWVXZWlnaHRlZEVNQShFWFBfQ09FRkZJQ0lFTlRfTU9OSVRPUik7CisgICAgICAgICAgICBzZW5kTWVzc2FnZShvYnRhaW5NZXNzYWdlKENNRF9SU1NJX0ZFVENILCArK21Sc3NpRmV0Y2hUb2tlbiwgMCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9SU1NJX0NIQU5HRToKKyAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRTaWduYWxMZXZlbCA9IGNhbGN1bGF0ZVNpZ25hbExldmVsKG1zZy5hcmcxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50U2lnbmFsTGV2ZWwgPD0gTElOS19NT05JVE9SX0xFVkVMX1RIUkVTSE9MRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RheSBoZXJlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCBmcmVxdWVudCBSU1NJIG1vbml0b3JpbmcgYW55IG1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtT25saW5lV2F0Y2hTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX0JTU0lEX0NIQU5HRToKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1MaW5rTW9uaXRvcmluZ1N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIENNRF9SU1NJX0ZFVENIOgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1Jc1NjcmVlbk9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU9ubGluZVN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cuYXJnMSA9PSBtUnNzaUZldGNoVG9rZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Xc21DaGFubmVsLnNlbmRNZXNzYWdlKFdpZmlNYW5hZ2VyLlJTU0lfUEtUQ05UX0ZFVENIKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChvYnRhaW5NZXNzYWdlKENNRF9SU1NJX0ZFVENILCArK21Sc3NpRmV0Y2hUb2tlbiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJTktfU0FNUExJTkdfSU5URVJWQUxfTVMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSF9TVUNDRUVERUQ6CisgICAgICAgICAgICAgICAgICAgIFJzc2lQYWNrZXRDb3VudEluZm8gaW5mbyA9IChSc3NpUGFja2V0Q291bnRJbmZvKSBtc2cub2JqOworICAgICAgICAgICAgICAgICAgICBpbnQgcnNzaSA9IGluZm8ucnNzaTsKKyAgICAgICAgICAgICAgICAgICAgaW50IG1yc3NpID0gKG1MYXN0UnNzaSArIHJzc2kpIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgaW50IHR4YmFkID0gaW5mby50eGJhZDsKKyAgICAgICAgICAgICAgICAgICAgaW50IHR4Z29vZCA9IGluZm8udHhnb29kOworICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJGZXRjaCBSU1NJIHN1Y2NlZWQsIHJzc2k9IiArIHJzc2kgKyAiIG1yc3NpPSIgKyBtcnNzaSArICIgdHhiYWQ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdHhiYWQgKyAiIHR4Z29vZD0iICsgdHhnb29kKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBza2lwIHRoZSBmaXJzdCBkYXRhIHBvaW50IGFzIHdlIHdhbnQgaW5jcmVtZW50YWwgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGxvbmcgbm93ID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub3cgLSBtQ3VycmVudEJzc2lkLm1MYXN0VGltZVNhbXBsZSA8IExJTktfU0FNUExJTkdfSU5URVJWQUxfTVMgKiAyKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBwYWNrZXQgbG9zcyBzdGF0aXN0aWNzCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGJhZCA9IHR4YmFkIC0gbUxhc3RUeEJhZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZ29vZCA9IHR4Z29vZCAtIG1MYXN0VHhHb29kOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR0b3RhbCA9IGRiYWQgKyBkZ29vZDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR0b3RhbCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgcGFja2V0IGxvc3MgaW4gdGhlIGxhc3Qgc2FtcGxpbmcgaW50ZXJ2YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbG9zcyA9ICgoZG91YmxlKSBkYmFkKSAvICgoZG91YmxlKSBkdG90YWwpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRMb3NzLnVwZGF0ZShsb3NzLCBkdG90YWwpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoIiMuIyMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZCgiSW5jcmVtZW50YWwgbG9zcz0iICsgZGJhZCArICIvIiArIGR0b3RhbCArICIgQ3VycmVudCBsb3NzPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGRmLmZvcm1hdChtQ3VycmVudExvc3MubVZhbHVlICogMTAwKSArICIlIHZvbHVtZT0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBkZi5mb3JtYXQobUN1cnJlbnRMb3NzLm1Wb2x1bWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VycmVudEJzc2lkLnVwZGF0ZUxvc3MobXJzc2ksIGxvc3MsIGR0b3RhbCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgaGlnaCBwYWNrZXQgbG9zcyBhbmQgc2VuZCBwb29yIGxpbmsgbm90aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50TG9zcy5tVmFsdWUgPiBQT09SX0xJTktfTE9TU19USFJFU0hPTEQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1DdXJyZW50TG9zcy5tVm9sdW1lID4gUE9PUl9MSU5LX01JTl9WT0xVTUUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbVNhbXBsZUNvdW50ID49IFBPT1JfTElOS19TQU1QTEVfQ09VTlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUN1cnJlbnRCc3NpZC5wb29yTGlua0RldGVjdGVkKHJzc2kpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZExpbmtTdGF0dXNOb3RpZmljYXRpb24oZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbVJzc2lGZXRjaFRva2VuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRCc3NpZC5tTGFzdFRpbWVTYW1wbGUgPSBub3c7CisgICAgICAgICAgICAgICAgICAgIG1MYXN0VHhCYWQgPSB0eGJhZDsKKyAgICAgICAgICAgICAgICAgICAgbUxhc3RUeEdvb2QgPSB0eGdvb2Q7CisgICAgICAgICAgICAgICAgICAgIG1MYXN0UnNzaSA9IHJzc2k7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSF9GQUlMRUQ6CisgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBoYXBwZW4gaWYgd2UgYXJlIHdhaXRpbmcgdG8gZ2V0IGEgZGlzY29ubmVjdCBub3RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiUlNTSV9GRVRDSF9GQUlMRUQiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorICAgfQorCisgICAgLyoqCisgICAgICogQ2hpbGQgc3RhdGUgb2YgQ29ubmVjdGVkU3RhdGUgaW5kaWNhdGluZyB0aGF0IHdlIGFyZSBvbmxpbmUgYW5kIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uCisgICAgICovCisgICAgY2xhc3MgT25saW5lU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1zZykgeworICAgICAgICAgICAgc3dpdGNoIChtc2cud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfU0NSRUVOX09OOgorICAgICAgICAgICAgICAgICAgICBtSXNTY3JlZW5PbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChtUG9vck5ldHdvcmtEZXRlY3Rpb25FbmFibGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1PbmxpbmVXYXRjaFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlQ3VycmVudEJzc2lkKFN0cmluZyBic3NpZCkgeworICAgICAgICBpZiAoREJHKSBsb2dkKCJVcGRhdGUgY3VycmVudCBCU1NJRCB0byAiICsgKGJzc2lkICE9IG51bGwgPyBic3NpZCA6ICJudWxsIikpOworCisgICAgICAgIC8vIGlmIGN1cnJlbnRseSBub3QgY29ubmVjdGVkLCB0aGVuIHNldCBjdXJyZW50IEJTU0lEIHRvIG51bGwKKyAgICAgICAgaWYgKGJzc2lkID09IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChtQ3VycmVudEJzc2lkID09IG51bGwpIHJldHVybjsKKyAgICAgICAgICAgIG1DdXJyZW50QnNzaWQgPSBudWxsOworICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiQlNTSUQgY2hhbmdlZCIpOworICAgICAgICAgICAgc2VuZE1lc3NhZ2UoRVZFTlRfQlNTSURfQ0hBTkdFKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGlmIGl0IGlzIGFscmVhZHkgdGhlIGN1cnJlbnQgQlNTSUQsIHRoZW4gZG9uZQorICAgICAgICBpZiAobUN1cnJlbnRCc3NpZCAhPSBudWxsICYmIGJzc2lkLmVxdWFscyhtQ3VycmVudEJzc2lkLm1Cc3NpZCkpIHJldHVybjsKKworICAgICAgICAvLyBzZWFyY2ggZm9yIHRoZSBuZXcgQlNTSUQgaW4gdGhlIGNhY2hlLCBhZGQgdG8gY2FjaGUgaWYgbm90IGZvdW5kCisgICAgICAgIG1DdXJyZW50QnNzaWQgPSBtQnNzaWRDYWNoZS5nZXQoYnNzaWQpOworICAgICAgICBpZiAobUN1cnJlbnRCc3NpZCA9PSBudWxsKSB7CisgICAgICAgICAgICBtQ3VycmVudEJzc2lkID0gbmV3IEJzc2lkU3RhdGlzdGljcyhic3NpZCk7CisgICAgICAgICAgICBtQnNzaWRDYWNoZS5wdXQoYnNzaWQsIG1DdXJyZW50QnNzaWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gc2VuZCBCU1NJRCBjaGFuZ2Ugbm90aWZpY2F0aW9uCisgICAgICAgIGlmIChEQkcpIGxvZ2QoIkJTU0lEIGNoYW5nZWQiKTsKKyAgICAgICAgc2VuZE1lc3NhZ2UoRVZFTlRfQlNTSURfQ0hBTkdFKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBjYWxjdWxhdGVTaWduYWxMZXZlbChpbnQgcnNzaSkgeworICAgICAgICBpbnQgc2lnbmFsTGV2ZWwgPSBXaWZpTWFuYWdlci5jYWxjdWxhdGVTaWduYWxMZXZlbChyc3NpLCBXaWZpTWFuYWdlci5SU1NJX0xFVkVMUyk7CisgICAgICAgIGlmIChEQkcpCisgICAgICAgICAgICBsb2dkKCJSU1NJIGN1cnJlbnQ6ICIgKyBtQ3VycmVudFNpZ25hbExldmVsICsgIiBuZXc6ICIgKyByc3NpICsgIiwgIiArIHNpZ25hbExldmVsKTsKKyAgICAgICAgcmV0dXJuIHNpZ25hbExldmVsOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZW5kTGlua1N0YXR1c05vdGlmaWNhdGlvbihib29sZWFuIGlzR29vZCkgeworICAgICAgICBpZiAoREJHKSBsb2dkKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgIGlmIChpc0dvb2QpIHsKKyAgICAgICAgICAgIG1Xc21DaGFubmVsLnNlbmRNZXNzYWdlKEdPT0RfTElOS19ERVRFQ1RFRCk7CisgICAgICAgICAgICBpZiAobUN1cnJlbnRCc3NpZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRCc3NpZC5tTGFzdFRpbWVHb29kID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJHb29kIGxpbmsgbm90aWZpY2F0aW9uIGlzIHNlbnQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1Xc21DaGFubmVsLnNlbmRNZXNzYWdlKFBPT1JfTElOS19ERVRFQ1RFRCk7CisgICAgICAgICAgICBpZiAobUN1cnJlbnRCc3NpZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRCc3NpZC5tTGFzdFRpbWVQb29yID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsb2dkKCJQb29yIGxpbmsgbm90aWZpY2F0aW9uIGlzIHNlbnQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIGEgc2luZ2xlIHNlY3VyZSBzZXR0aW5ncyB2YWx1ZSBhcyBhCisgICAgICogYm9vbGVhbi4gTm90ZSB0aGF0IGludGVybmFsbHkgc2V0dGluZyB2YWx1ZXMgYXJlIGFsd2F5cyBzdG9yZWQgYXMKKyAgICAgKiBzdHJpbmdzOyB0aGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBzdHJpbmcgdG8gYSBib29sZWFuIGZvciB5b3UuIFRoZQorICAgICAqIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgc2V0dGluZyBpcyBub3QgZGVmaW5lZCBvciBub3QgYQorICAgICAqIHZhbGlkIGJvb2xlYW4uCisgICAgICoKKyAgICAgKiBAcGFyYW0gY3IgVGhlIENvbnRlbnRSZXNvbHZlciB0byBhY2Nlc3MuCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHNldHRpbmcgdG8gcmV0cmlldmUuCisgICAgICogQHBhcmFtIGRlZiBWYWx1ZSB0byByZXR1cm4gaWYgdGhlIHNldHRpbmcgaXMgbm90IGRlZmluZWQuCisgICAgICogQHJldHVybiBUaGUgc2V0dGluZydzIGN1cnJlbnQgdmFsdWUsIG9yICdkZWYnIGlmIGl0IGlzIG5vdCBkZWZpbmVkIG9yIG5vdAorICAgICAqICAgICAgICAgYSB2YWxpZCBib29sZWFuLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZ2V0U2V0dGluZ3NHbG9iYWxCb29sZWFuKENvbnRlbnRSZXNvbHZlciBjciwgU3RyaW5nIG5hbWUsIGJvb2xlYW4gZGVmKSB7CisgICAgICAgIHJldHVybiBTZXR0aW5ncy5HbG9iYWwuZ2V0SW50KGNyLCBuYW1lLCBkZWYgPyAxIDogMCkgPT0gMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgYSBzaW5nbGUgc2V0dGluZ3MgdmFsdWUgYXMgYW4gaW50ZWdlci4KKyAgICAgKiBUaGlzIHdpbGwgZWl0aGVyIGNyZWF0ZSBhIG5ldyBlbnRyeSBpbiB0aGUgdGFibGUgaWYgdGhlIGdpdmVuIG5hbWUgZG9lcworICAgICAqIG5vdCBleGlzdCwgb3IgbW9kaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgZXhpc3Rpbmcgcm93IHdpdGggdGhhdCBuYW1lLiBOb3RlCisgICAgICogdGhhdCBpbnRlcm5hbGx5IHNldHRpbmcgdmFsdWVzIGFyZSBhbHdheXMgc3RvcmVkIGFzIHN0cmluZ3MsIHNvIHRoaXMKKyAgICAgKiBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgZ2l2ZW4gdmFsdWUgdG8gYSBzdHJpbmcgYmVmb3JlIHN0b3JpbmcgaXQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY3IgVGhlIENvbnRlbnRSZXNvbHZlciB0byBhY2Nlc3MuCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHNldHRpbmcgdG8gbW9kaWZ5LgorICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHZhbHVlIGZvciB0aGUgc2V0dGluZy4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIHdhcyBzZXQsIGZhbHNlIG9uIGRhdGFiYXNlIGVycm9ycworICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcHV0U2V0dGluZ3NHbG9iYWxCb29sZWFuKENvbnRlbnRSZXNvbHZlciBjciwgU3RyaW5nIG5hbWUsIGJvb2xlYW4gdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIFNldHRpbmdzLkdsb2JhbC5wdXRJbnQoY3IsIG5hbWUsIHZhbHVlID8gMSA6IDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIEJ1bmRsZSBvZiBnb29kIGxpbmsgY291bnQgcGFyYW1ldGVycworICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEdvb2RMaW5rVGFyZ2V0IHsKKyAgICAgICAgcHVibGljIGZpbmFsIGludCBSU1NJX0FESl9EQk07CisgICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgU0FNUExFX0NPVU5UOworICAgICAgICBwdWJsaWMgZmluYWwgaW50IFJFRFVDRV9USU1FX01TOworICAgICAgICBwdWJsaWMgR29vZExpbmtUYXJnZXQoaW50IGFkaiwgaW50IGNvdW50LCBpbnQgdGltZSkgeworICAgICAgICAgICAgUlNTSV9BREpfREJNID0gYWRqOworICAgICAgICAgICAgU0FNUExFX0NPVU5UID0gY291bnQ7CisgICAgICAgICAgICBSRURVQ0VfVElNRV9NUyA9IHRpbWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBCdW5kbGUgb2YgbWF4IGF2b2lkYW5jZSB0aW1lIHBhcmFtZXRlcnMKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNYXhBdm9pZFRpbWUgeworICAgICAgICBwdWJsaWMgZmluYWwgaW50IFRJTUVfTVM7CisgICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgTUlOX1JTU0lfREJNOworICAgICAgICBwdWJsaWMgTWF4QXZvaWRUaW1lKGludCB0aW1lLCBpbnQgcnNzaSkgeworICAgICAgICAgICAgVElNRV9NUyA9IHRpbWU7CisgICAgICAgICAgICBNSU5fUlNTSV9EQk0gPSByc3NpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVm9sdW1lLXdlaWdodGVkIEV4cG9uZW50aWFsIE1vdmluZyBBdmVyYWdlIChWLUVNQSkKKyAgICAgKiAgICAtIHZvbHVtZS13ZWlnaHRlZDogIGVhY2ggdXBkYXRlIGhhcyBpdHMgb3duIHdlaWdodCAobnVtYmVyIG9mIHBhY2tldHMpCisgICAgICogICAgLSBleHBvbmVudGlhbDogICAgICBPKDEpIHRpbWUgYW5kIE8oMSkgc3BhY2UgZm9yIGJvdGggdXBkYXRlIGFuZCBxdWVyeQorICAgICAqICAgIC0gbW92aW5nIGF2ZXJhZ2U6ICAgcmVmbGVjdCBtb3N0IHJlY2VudCByZXN1bHRzIGFuZCBleHBpcmUgb2xkIG9uZXMKKyAgICAgKi8KKyAgICBwcml2YXRlIGNsYXNzIFZvbHVtZVdlaWdodGVkRU1BIHsKKyAgICAgICAgcHJpdmF0ZSBkb3VibGUgbVZhbHVlOworICAgICAgICBwcml2YXRlIGRvdWJsZSBtVm9sdW1lOworICAgICAgICBwcml2YXRlIGRvdWJsZSBtUHJvZHVjdDsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBkb3VibGUgbUFscGhhOworCisgICAgICAgIHB1YmxpYyBWb2x1bWVXZWlnaHRlZEVNQShkb3VibGUgY29lZmZpY2llbnQpIHsKKyAgICAgICAgICAgIG1WYWx1ZSAgID0gMC4wOworICAgICAgICAgICAgbVZvbHVtZSAgPSAwLjA7CisgICAgICAgICAgICBtUHJvZHVjdCA9IDAuMDsKKyAgICAgICAgICAgIG1BbHBoYSAgID0gY29lZmZpY2llbnQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGUoZG91YmxlIG5ld1ZhbHVlLCBpbnQgbmV3Vm9sdW1lKSB7CisgICAgICAgICAgICBpZiAobmV3Vm9sdW1lIDw9IDApIHJldHVybjsKKyAgICAgICAgICAgIC8vIGNvcmUgdXBkYXRlIGZvcm11bGFzCisgICAgICAgICAgICBkb3VibGUgbmV3UHJvZHVjdCA9IG5ld1ZhbHVlICogbmV3Vm9sdW1lOworICAgICAgICAgICAgbVByb2R1Y3QgPSBtQWxwaGEgKiBuZXdQcm9kdWN0ICsgKDEgLSBtQWxwaGEpICogbVByb2R1Y3Q7CisgICAgICAgICAgICBtVm9sdW1lICA9IG1BbHBoYSAqIG5ld1ZvbHVtZSAgKyAoMSAtIG1BbHBoYSkgKiBtVm9sdW1lOworICAgICAgICAgICAgbVZhbHVlICAgPSBtUHJvZHVjdCAvIG1Wb2x1bWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWNvcmQgKFJTU0kgLT4gcGFrY2UgbG9zcyAlKSBtYXBwaW5ncyBvZiBvbmUgQlNTSUQKKyAgICAgKi8KKyAgICBwcml2YXRlIGNsYXNzIEJzc2lkU3RhdGlzdGljcyB7CisKKyAgICAgICAgLyogTUFDIGFkZHJlc3Mgb2YgdGhpcyBCU1NJRCAqLworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtQnNzaWQ7CisKKyAgICAgICAgLyogUlNTSSAtPiBwYWNrZXQgbG9zcyAlIG1hcHBpbmdzICovCisgICAgICAgIHByaXZhdGUgVm9sdW1lV2VpZ2h0ZWRFTUFbXSBtRW50cmllczsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVJzc2lCYXNlOworICAgICAgICBwcml2YXRlIGludCBtRW50cmllc1NpemU7CisKKyAgICAgICAgLyogVGFyZ2V0IHRvIHNlbmQgZ29vZCBsaW5rIG5vdGlmaWNhdGlvbiwgc2V0IHdoZW4gcG9vciBsaW5rIGlzIGRldGVjdGVkICovCisgICAgICAgIHByaXZhdGUgaW50IG1Hb29kTGlua1RhcmdldFJzc2k7CisgICAgICAgIHByaXZhdGUgaW50IG1Hb29kTGlua1RhcmdldENvdW50OworCisgICAgICAgIC8qIEluZGV4IG9mIEdPT0RfTElOS19UQVJHRVQgYXJyYXkgKi8KKyAgICAgICAgcHJpdmF0ZSBpbnQgbUdvb2RMaW5rVGFyZ2V0SW5kZXg7CisKKyAgICAgICAgLyogVGltZXN0YW1wcyBvZiBzb21lIGxhc3QgZXZlbnRzICovCisgICAgICAgIHByaXZhdGUgbG9uZyBtTGFzdFRpbWVTYW1wbGU7CisgICAgICAgIHByaXZhdGUgbG9uZyBtTGFzdFRpbWVHb29kOworICAgICAgICBwcml2YXRlIGxvbmcgbUxhc3RUaW1lUG9vcjsKKworICAgICAgICAvKiBNYXggdGltZSB0byBhdm9pZCB0aGlzIEJTU0lEICovCisgICAgICAgIHByaXZhdGUgbG9uZyBtQnNzaWRBdm9pZFRpbWVNYXg7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnN0cnVjdG9yCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBic3NpZCBpcyB0aGUgYWRkcmVzcyBvZiB0aGlzIEJTU0lECisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnNzaWRTdGF0aXN0aWNzKFN0cmluZyBic3NpZCkgeworICAgICAgICAgICAgdGhpcy5tQnNzaWQgPSBic3NpZDsKKyAgICAgICAgICAgIG1Sc3NpQmFzZSA9IEJTU0lEX1NUQVRfUkFOR0VfTE9XX0RCTTsKKyAgICAgICAgICAgIG1FbnRyaWVzU2l6ZSA9IEJTU0lEX1NUQVRfUkFOR0VfSElHSF9EQk0gLSBCU1NJRF9TVEFUX1JBTkdFX0xPV19EQk0gKyAxOworICAgICAgICAgICAgbUVudHJpZXMgPSBuZXcgVm9sdW1lV2VpZ2h0ZWRFTUFbbUVudHJpZXNTaXplXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUVudHJpZXNTaXplOyBpKyspCisgICAgICAgICAgICAgICAgbUVudHJpZXNbaV0gPSBuZXcgVm9sdW1lV2VpZ2h0ZWRFTUEoRVhQX0NPRUZGSUNJRU5UX1JFQ09SRCk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVXBkYXRlIHRoaXMgQlNTSUQgY2FjaGUKKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHJzc2kgaXMgdGhlIFJTU0kKKyAgICAgICAgICogQHBhcmFtIHZhbHVlIGlzIHRoZSBuZXcgaW5zdGFudCBsb3NzIHZhbHVlIGF0IHRoaXMgUlNTSQorICAgICAgICAgKiBAcGFyYW0gdm9sdW1lIGlzIHRoZSB2b2x1bWUgZm9yIHRoaXMgc2luZ2xlIHVwZGF0ZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlTG9zcyhpbnQgcnNzaSwgZG91YmxlIHZhbHVlLCBpbnQgdm9sdW1lKSB7CisgICAgICAgICAgICBpZiAodm9sdW1lIDw9IDApIHJldHVybjsKKyAgICAgICAgICAgIGludCBpbmRleCA9IHJzc2kgLSBtUnNzaUJhc2U7CisgICAgICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1FbnRyaWVzU2l6ZSkgcmV0dXJuOworICAgICAgICAgICAgbUVudHJpZXNbaW5kZXhdLnVwZGF0ZSh2YWx1ZSwgdm9sdW1lKTsKKyAgICAgICAgICAgIGlmIChEQkcpIHsKKyAgICAgICAgICAgICAgICBEZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoIiMuIyMiKTsKKyAgICAgICAgICAgICAgICBsb2dkKCJDYWNoZSB1cGRhdGVkOiBsb3NzWyIgKyByc3NpICsgIl09IiArIGRmLmZvcm1hdChtRW50cmllc1tpbmRleF0ubVZhbHVlICogMTAwKQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiJSB2b2x1bWU9IiArIGRmLmZvcm1hdChtRW50cmllc1tpbmRleF0ubVZvbHVtZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCBwcmVzZXQgbG9zcyBpZiB0aGUgY2FjaGUgaGFzIGluc3VmZmljaWVudCBkYXRhLCBvYnNlcnZlZCBmcm9tIGV4cGVyaW1lbnRzLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gcnNzaSBpcyB0aGUgaW5wdXQgUlNTSQorICAgICAgICAgKiBAcmV0dXJuIHByZXNldCBsb3NzIG9mIHRoZSBnaXZlbiBSU1NJCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgZG91YmxlIHByZXNldExvc3MoaW50IHJzc2kpIHsKKyAgICAgICAgICAgIGlmIChyc3NpIDw9IC05MCkgcmV0dXJuIDEuMDsKKyAgICAgICAgICAgIGlmIChyc3NpID4gMCkgcmV0dXJuIDAuMDsKKworICAgICAgICAgICAgaWYgKHNQcmVzZXRMb3NzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBwcmUtY2FsY3VsYXRlIGFsbCBwcmVzZXQgbG9zc2VzIG9ubHkgb25jZSwgdGhlbiByZXVzZSB0aGVtCisgICAgICAgICAgICAgICAgZmluYWwgaW50IHNpemUgPSA5MDsKKyAgICAgICAgICAgICAgICBzUHJlc2V0TG9zcyA9IG5ldyBkb3VibGVbc2l6ZV07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHNQcmVzZXRMb3NzW2ldID0gMS4wIC8gTWF0aC5wb3coOTAgLSBpLCAxLjUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNQcmVzZXRMb3NzWy1yc3NpXTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBBIHBvb3IgbGluayBpcyBkZXRlY3RlZCwgY2FsY3VsYXRlIGEgdGFyZ2V0IFJTU0kgdG8gYnJpbmcgV2lGaSBiYWNrLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gcnNzaSBpcyB0aGUgY3VycmVudCBSU1NJCisgICAgICAgICAqIEByZXR1cm4gdHJ1ZSBpZmYgdGhlIGN1cnJlbnQgQlNTSUQgc2hvdWxkIGJlIGF2b2lkZWQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBib29sZWFuIHBvb3JMaW5rRGV0ZWN0ZWQoaW50IHJzc2kpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlBvb3IgbGluayBkZXRlY3RlZCwgcnNzaT0iICsgcnNzaSk7CisKKyAgICAgICAgICAgIGxvbmcgbm93ID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7CisgICAgICAgICAgICBsb25nIGxhc3RHb29kID0gbm93IC0gbUxhc3RUaW1lR29vZDsKKyAgICAgICAgICAgIGxvbmcgbGFzdFBvb3IgPSBub3cgLSBtTGFzdFRpbWVQb29yOworCisgICAgICAgICAgICAvLyByZWR1Y2UgdGhlIGRpZmZpY3VsdHkgb2YgZ29vZCBsaW5rIHRhcmdldCBpZiBsYXN0IGF2b2lkYW5jZSB3YXMgbG9uZyB0aW1lIGFnbworICAgICAgICAgICAgd2hpbGUgKG1Hb29kTGlua1RhcmdldEluZGV4ID4gMAorICAgICAgICAgICAgICAgICAgICAmJiBsYXN0UG9vciA+PSBHT09EX0xJTktfVEFSR0VUW21Hb29kTGlua1RhcmdldEluZGV4IC0gMV0uUkVEVUNFX1RJTUVfTVMpCisgICAgICAgICAgICAgICAgbUdvb2RMaW5rVGFyZ2V0SW5kZXgtLTsKKyAgICAgICAgICAgIG1Hb29kTGlua1RhcmdldENvdW50ID0gR09PRF9MSU5LX1RBUkdFVFttR29vZExpbmtUYXJnZXRJbmRleF0uU0FNUExFX0NPVU5UOworCisgICAgICAgICAgICAvLyBzY2FuIGZvciBhIHRhcmdldCBSU1NJIGF0IHdoaWNoIHRoZSBsaW5rIGlzIGdvb2QKKyAgICAgICAgICAgIGludCBmcm9tID0gcnNzaSArIEdPT0RfTElOS19SU1NJX1JBTkdFX01JTjsKKyAgICAgICAgICAgIGludCB0byA9IHJzc2kgKyBHT09EX0xJTktfUlNTSV9SQU5HRV9NQVg7CisgICAgICAgICAgICBtR29vZExpbmtUYXJnZXRSc3NpID0gZmluZFJzc2lUYXJnZXQoZnJvbSwgdG8sIEdPT0RfTElOS19MT1NTX1RIUkVTSE9MRCk7CisgICAgICAgICAgICBtR29vZExpbmtUYXJnZXRSc3NpICs9IEdPT0RfTElOS19UQVJHRVRbbUdvb2RMaW5rVGFyZ2V0SW5kZXhdLlJTU0lfQURKX0RCTTsKKyAgICAgICAgICAgIGlmIChtR29vZExpbmtUYXJnZXRJbmRleCA8IEdPT0RfTElOS19UQVJHRVQubGVuZ3RoIC0gMSkgbUdvb2RMaW5rVGFyZ2V0SW5kZXgrKzsKKworICAgICAgICAgICAgLy8gY2FsY3VsYXRlIG1heCBhdm9pZGFuY2UgdGltZSB0byBwcmV2ZW50IGF2b2lkaW5nIGZvcmV2ZXIKKyAgICAgICAgICAgIGludCBwID0gMCwgcG1heCA9IE1BWF9BVk9JRF9USU1FLmxlbmd0aCAtIDE7CisgICAgICAgICAgICB3aGlsZSAocCA8IHBtYXggJiYgcnNzaSA+PSBNQVhfQVZPSURfVElNRVtwICsgMV0uTUlOX1JTU0lfREJNKSBwKys7CisgICAgICAgICAgICBsb25nIGF2b2lkTWF4ID0gTUFYX0FWT0lEX1RJTUVbcF0uVElNRV9NUzsKKworICAgICAgICAgICAgLy8gZG9uJ3QgYXZvaWQgaWYgbWF4IGF2b2lkYW5jZSB0aW1lIGlzIDAgKFJTU0kgaXMgc3VwZXIgaGlnaCkKKyAgICAgICAgICAgIGlmIChhdm9pZE1heCA8PSAwKSByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIHNldCBtYXggYXZvaWRhbmNlIHRpbWUsIHNlbmQgcG9vciBsaW5rIG5vdGlmaWNhdGlvbgorICAgICAgICAgICAgbUJzc2lkQXZvaWRUaW1lTWF4ID0gbm93ICsgYXZvaWRNYXg7CisKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoImdvb2RSc3NpPSIgKyBtR29vZExpbmtUYXJnZXRSc3NpICsgIiBnb29kQ291bnQ9IiArIG1Hb29kTGlua1RhcmdldENvdW50CisgICAgICAgICAgICAgICAgICAgICsgIiBsYXN0R29vZD0iICsgbGFzdEdvb2QgKyAiIGxhc3RQb29yPSIgKyBsYXN0UG9vciArICIgYXZvaWRNYXg9IiArIGF2b2lkTWF4KTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQSBuZXcgQlNTSUQgaXMgY29ubmVjdGVkLCByZWNhbGN1bGF0ZSB0YXJnZXQgUlNTSSB0aHJlc2hvbGQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG5ld0xpbmtEZXRlY3RlZCgpIHsKKyAgICAgICAgICAgIC8vIGlmIHRoaXMgQlNTSUQgaXMgY3VycmVudGx5IGJlaW5nIGF2b2lkZWQsIHRoZSByZXVzZSB0aG9zZSB2YWx1ZXMKKyAgICAgICAgICAgIGlmIChtQnNzaWRBdm9pZFRpbWVNYXggPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiUHJldmlvdXMgYXZvaWRhbmNlIHN0aWxsIGluIGVmZmVjdCwgcnNzaT0iICsgbUdvb2RMaW5rVGFyZ2V0UnNzaQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGNvdW50PSIgKyBtR29vZExpbmtUYXJnZXRDb3VudCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjYWxjdWxhdGUgYSBuZXcgUlNTSSB0aHJlc2hvbGQgZm9yIG5ldyBsaW5rIHZlcmlmeWluZworICAgICAgICAgICAgaW50IGZyb20gPSBCU1NJRF9TVEFUX1JBTkdFX0xPV19EQk07CisgICAgICAgICAgICBpbnQgdG8gPSBCU1NJRF9TVEFUX1JBTkdFX0hJR0hfREJNOworICAgICAgICAgICAgbUdvb2RMaW5rVGFyZ2V0UnNzaSA9IGZpbmRSc3NpVGFyZ2V0KGZyb20sIHRvLCBHT09EX0xJTktfTE9TU19USFJFU0hPTEQpOworICAgICAgICAgICAgbUdvb2RMaW5rVGFyZ2V0Q291bnQgPSAxOworICAgICAgICAgICAgbUJzc2lkQXZvaWRUaW1lTWF4ID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkgKyBNQVhfQVZPSURfVElNRVswXS5USU1FX01TOworICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiTmV3IGxpbmsgdmVyaWZ5aW5nIHRhcmdldCBzZXQsIHJzc2k9IiArIG1Hb29kTGlua1RhcmdldFJzc2kgKyAiIGNvdW50PSIKKyAgICAgICAgICAgICAgICAgICAgKyBtR29vZExpbmtUYXJnZXRDb3VudCk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJuIHRoZSBmaXJzdCBSU1NJIHdpdGhpbiB0aGUgcmFuZ2Ugd2hlcmUgbG9zc1tyc3NpXSA8IHRocmVzaG9sZAorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gZnJvbSBzdGFydCBzY2FubmluZyBmcm9tIHRoaXMgUlNTSQorICAgICAgICAgKiBAcGFyYW0gdG8gc3RvcCBzY2FubmluZyBhdCB0aGlzIFJTU0kKKyAgICAgICAgICogQHBhcmFtIHRocmVzaG9sZCB0YXJnZXQgdGhyZXNob2xkIGZvciBzY2FubmluZworICAgICAgICAgKiBAcmV0dXJuIHRhcmdldCBSU1NJCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGZpbmRSc3NpVGFyZ2V0KGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSB0aHJlc2hvbGQpIHsKKyAgICAgICAgICAgIGZyb20gLT0gbVJzc2lCYXNlOworICAgICAgICAgICAgdG8gLT0gbVJzc2lCYXNlOworICAgICAgICAgICAgaW50IGVtcHR5Q291bnQgPSAwOworICAgICAgICAgICAgaW50IGQgPSBmcm9tIDwgdG8gPyAxIDogLTE7CisgICAgICAgICAgICBmb3IgKGludCBpID0gZnJvbTsgaSAhPSB0bzsgaSArPSBkKQorICAgICAgICAgICAgICAgIC8vIGRvbid0IHVzZSBhIGRhdGEgcG9pbnQgaWYgaXQgdm9sdW1lIGlzIHRvbyBzbWFsbCAoc3RhdGlzdGljYWxseSB1bnJlbGlhYmxlKQorICAgICAgICAgICAgICAgIGlmIChpID49IDAgJiYgaSA8IG1FbnRyaWVzU2l6ZSAmJiBtRW50cmllc1tpXS5tVm9sdW1lID4gMS4wKSB7CisgICAgICAgICAgICAgICAgICAgIGVtcHR5Q291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAobUVudHJpZXNbaV0ubVZhbHVlIDwgdGhyZXNob2xkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzY2FuIHRhcmdldCBmb3VuZAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJzc2kgPSBtUnNzaUJhc2UgKyBpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIy4jIyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2QoIlNjYW4gdGFyZ2V0IGZvdW5kOiByc3NpPSIgKyByc3NpICsgIiB0aHJlc2hvbGQ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBkZi5mb3JtYXQodGhyZXNob2xkICogMTAwKSArICIlIHZhbHVlPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZGYuZm9ybWF0KG1FbnRyaWVzW2ldLm1WYWx1ZSAqIDEwMCkgKyAiJSB2b2x1bWU9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBkZi5mb3JtYXQobUVudHJpZXNbaV0ubVZvbHVtZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJzc2k7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCsrZW1wdHlDb3VudCA+PSBCU1NJRF9TVEFUX0VNUFRZX0NPVU5UKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGNhY2hlIGhhcyBpbnN1ZmZpY2llbnQgZGF0YSBhcm91bmQgdGhpcyBSU1NJLCB1c2UgcHJlc2V0IGxvc3MgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgICBpbnQgcnNzaSA9IG1Sc3NpQmFzZSArIGk7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBsb3NzUHJlc2V0ID0gcHJlc2V0TG9zcyhyc3NpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvc3NQcmVzZXQgPCB0aHJlc2hvbGQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoIiMuIyMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dkKCJTY2FuIHRhcmdldCBmb3VuZDogcnNzaT0iICsgcnNzaSArICIgdGhyZXNob2xkPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZGYuZm9ybWF0KHRocmVzaG9sZCAqIDEwMCkgKyAiJSB2YWx1ZT0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGRmLmZvcm1hdChsb3NzUHJlc2V0ICogMTAwKSArICIlIHZvbHVtZT1wcmVzZXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByc3NpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbVJzc2lCYXNlICsgdG87CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93aWZpL3AycC9XaWZpUDJwU2VydmljZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9wMnAvV2lmaVAycFNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDA4ODJkCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2lmaS9wMnAvV2lmaVAycFNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDI5NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci53aWZpLnAycDsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nOworaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQubmV0LkRoY3BSZXN1bHRzOworaW1wb3J0IGFuZHJvaWQubmV0LkRoY3BTdGF0ZU1hY2hpbmU7CitpbXBvcnQgYW5kcm9pZC5uZXQuSW50ZXJmYWNlQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm5ldC5MaW5rQWRkcmVzczsKK2ltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrSW5mbzsKK2ltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrVXRpbHM7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XcHNJbmZvOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLklXaWZpUDJwTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5XaWZpUDJwQ29uZmlnOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBEZXZpY2U7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycERldmljZUxpc3Q7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycEdyb3VwOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBHcm91cExpc3Q7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycEdyb3VwTGlzdC5Hcm91cERlbGV0ZUxpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBJbmZvOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBQcm92RGlzY0V2ZW50OworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBXZmRJbmZvOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLm5zZC5XaWZpUDJwU2VydmljZUluZm87CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAubnNkLldpZmlQMnBTZXJ2aWNlUmVxdWVzdDsKK2ltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5uc2QuV2lmaVAycFNlcnZpY2VSZXNwb25zZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5JTmV0d29ya01hbmFnZW1lbnRTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKK2ltcG9ydCBhbmRyb2lkLm9zLk1lc3NlbmdlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OworaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5FZGl0VGV4dDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Bc3luY0NoYW5uZWw7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Qcm90b2NvbDsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlN0YXRlOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGVNYWNoaW5lOworaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci53aWZpLldpZmlNb25pdG9yOworaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci53aWZpLldpZmlOYXRpdmU7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLndpZmkuV2lmaVN0YXRlTWFjaGluZTsKKworaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKKworLyoqCisgKiBXaWZpUDJwU2VydmljZSBpbmNsdWRlcyBhIHN0YXRlIG1hY2hpbmUgdG8gcGVyZm9ybSBXaS1GaSBwMnAgb3BlcmF0aW9ucy4gQXBwbGljYXRpb25zCisgKiBjb21tdW5pY2F0ZSB3aXRoIHRoaXMgc2VydmljZSB0byBpc3N1ZSBkZXZpY2UgZGlzY292ZXJ5IGFuZCBjb25uZWN0aXZpdHkgcmVxdWVzdHMKKyAqIHRocm91Z2ggdGhlIFdpZmlQMnBNYW5hZ2VyIGludGVyZmFjZS4gVGhlIHN0YXRlIG1hY2hpbmUgY29tbXVuaWNhdGVzIHdpdGggdGhlIHdpZmkKKyAqIGRyaXZlciB0aHJvdWdoIHdwYV9zdXBwbGljYW50IGFuZCBoYW5kbGVzIHRoZSBldmVudCByZXNwb25zZXMgdGhyb3VnaCBXaWZpTW9uaXRvci4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHRlcm0gV2lmaSB3aGVuIHVzZWQgd2l0aG91dCBhIHAycCBzdWZmaXggcmVmZXJzIHRvIHRoZSBjbGllbnQgbW9kZQorICogb2YgV2lmaSBvcGVyYXRpb24KKyAqIEBoaWRlCisgKi8KK3B1YmxpYyBjbGFzcyBXaWZpUDJwU2VydmljZSBleHRlbmRzIElXaWZpUDJwTWFuYWdlci5TdHViIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldpZmlQMnBTZXJ2aWNlIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERCRyA9IGZhbHNlOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBORVRXT1JLVFlQRSA9ICJXSUZJX1AyUCI7CisKKyAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgbUludGVyZmFjZTsKKyAgICBwcml2YXRlIE5vdGlmaWNhdGlvbiBtTm90aWZpY2F0aW9uOworCisgICAgSU5ldHdvcmtNYW5hZ2VtZW50U2VydmljZSBtTndTZXJ2aWNlOworICAgIHByaXZhdGUgRGhjcFN0YXRlTWFjaGluZSBtRGhjcFN0YXRlTWFjaGluZTsKKworICAgIHByaXZhdGUgUDJwU3RhdGVNYWNoaW5lIG1QMnBTdGF0ZU1hY2hpbmU7CisgICAgcHJpdmF0ZSBBc3luY0NoYW5uZWwgbVJlcGx5Q2hhbm5lbCA9IG5ldyBBc3luY0NoYW5uZWwoKTsKKyAgICBwcml2YXRlIEFzeW5jQ2hhbm5lbCBtV2lmaUNoYW5uZWw7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCb29sZWFuIEpPSU5fR1JPVVAgPSB0cnVlOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJvb2xlYW4gRk9STV9HUk9VUCA9IGZhbHNlOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQm9vbGVhbiBSRUxPQUQgPSB0cnVlOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJvb2xlYW4gTk9fUkVMT0FEID0gZmFsc2U7CisKKyAgICAvKiBUd28gbWludXRlcyBjb21lcyBmcm9tIHRoZSB3cGFfc3VwcGxpY2FudCBzZXR0aW5nICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEdST1VQX0NSRUFUSU5HX1dBSVRfVElNRV9NUyA9IDEyMCAqIDEwMDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IG1Hcm91cENyZWF0aW5nVGltZW91dEluZGV4ID0gMDsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBESVNBQkxFX1AyUF9XQUlUX1RJTUVfTVMgPSA1ICogMTAwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgbURpc2FibGVQMnBUaW1lb3V0SW5kZXggPSAwOworCisgICAgLyogU2V0IGEgdHdvIG1pbnV0ZSBkaXNjb3ZlciB0aW1lb3V0IHRvIGF2b2lkIFNUQSBzY2FucyBmcm9tIGJlaW5nIGJsb2NrZWQgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRElTQ09WRVJfVElNRU9VVF9TID0gMTIwOworCisgICAgLyogSWRsZSB0aW1lIGFmdGVyIGEgcGVlciBpcyBnb25lIHdoZW4gdGhlIGdyb3VwIGlzIHRvcm4gZG93biAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBHUk9VUF9JRExFX1RJTUVfUyA9IDEwOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJBU0UgPSBQcm90b2NvbC5CQVNFX1dJRklfUDJQX1NFUlZJQ0U7CisKKyAgICAvKiBEZWxheWVkIG1lc3NhZ2UgdG8gdGltZW91dCBncm91cCBjcmVhdGlvbiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdST1VQX0NSRUFUSU5HX1RJTUVEX09VVCAgICAgICAgPSAgIEJBU0UgKyAxOworCisgICAgLyogVXNlciBhY2NlcHRlZCBhIHBlZXIgcmVxdWVzdCAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQRUVSX0NPTk5FQ1RJT05fVVNFUl9BQ0NFUFQgICAgPSAgIEJBU0UgKyAyOworICAgIC8qIFVzZXIgcmVqZWN0ZWQgYSBwZWVyIHJlcXVlc3QgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUEVFUl9DT05ORUNUSU9OX1VTRVJfUkVKRUNUICAgID0gICBCQVNFICsgMzsKKyAgICAvKiBVc2VyIHdhbnRzIHRvIGRpc2Nvbm5lY3Qgd2lmaSBpbiBmYXZvdXIgb2YgcDJwICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERST1BfV0lGSV9VU0VSX0FDQ0VQVCAgICAgICAgICA9ICAgQkFTRSArIDQ7CisgICAgLyogVXNlciB3YW50cyB0byBrZWVwIGhpcyB3aWZpIGNvbm5lY3Rpb24gYW5kIGRyb3AgcDJwICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERST1BfV0lGSV9VU0VSX1JFSkVDVCAgICAgICAgICA9ICAgQkFTRSArIDU7CisgICAgLyogRGVsYXllZCBtZXNzYWdlIHRvIHRpbWVvdXQgcDJwIGRpc2FibGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESVNBQkxFX1AyUF9USU1FRF9PVVQgICAgICAgICAgID0gICBCQVNFICsgNjsKKworCisgICAgLyogQ29tbWFuZHMgdG8gdGhlIFdpZmlTdGF0ZU1hY2hpbmUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfQ09OTkVDVElPTl9DSEFOR0VEICAgICAgICAgID0gICBCQVNFICsgMTE7CisKKyAgICAvKiBUaGVzZSBjb21tYW5kcyBhcmUgdXNlZCB0byB0ZW1wb3JhcmlseSBkaXNjb25uZWN0IHdpZmkgd2hlbiB3ZSBkZXRlY3QKKyAgICAgKiBhIGZyZXF1ZW5jeSBjb25mbGljdCB3aGljaCB3b3VsZCBtYWtlIGl0IGltcG9zc2libGUgdG8gaGF2ZSB3aXRoIHAycAorICAgICAqIGFuZCB3aWZpIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAqCisgICAgICogSWYgdGhlIHVzZXIgY2hvb3NlcyB0byBkaXNhYmxlIHdpZmkgdGVtcG9yYXJpbHksIHdlIGtlZXAgd2lmaSBkaXNjb25uZWN0ZWQKKyAgICAgKiB1bnRpbCB0aGUgcDJwIGNvbm5lY3Rpb24gaXMgZG9uZSBhbmQgdGVybWluYXRlZCBhdCB3aGljaCBwb2ludCB3ZSB3aWxsCisgICAgICogYnJpbmcgYmFjayB3aWZpIHVwCisgICAgICoKKyAgICAgKiBESVNDT05ORUNUX1dJRklfUkVRVUVTVAorICAgICAqICAgICAgbXNnLmFyZzEgPSAxIGVuYWJsZXMgdGVtcG9yYXJ5IGRpc2Nvbm5lY3QgYW5kIDAgZGlzYWJsZXMgaXQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElTQ09OTkVDVF9XSUZJX1JFUVVFU1QgICAgICAgICA9ICAgQkFTRSArIDEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERJU0NPTk5FQ1RfV0lGSV9SRVNQT05TRSAgICAgICAgPSAgIEJBU0UgKyAxMzsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFVF9NSVJBQ0FTVF9NT0RFICAgICAgICAgICAgICAgPSAgIEJBU0UgKyAxNDsKKworICAgIC8vIER1cmluZyBkaGNwIChhbmQgcGVyaGFwcyBvdGhlciB0aW1lcykgd2UgY2FuJ3QgYWZmb3JkIHRvIGRyb3AgcGFja2V0cworICAgIC8vIGJ1dCBEaXNjb3Zlcnkgd2lsbCBzd2l0Y2ggb3VyIGNoYW5uZWwgZW5vdWdoIHdlIHdpbGwuCisgICAgLy8gICBtc2cuYXJnMSA9IEVOQUJMRUQgZm9yIGJsb2NraW5nLCBESVNBQkxFRCBmb3IgcmVzdW1lZC4KKyAgICAvLyAgIG1zZy5hcmcyID0gbXNnIHRvIHNlbmQgd2hlbiBibG9ja2VkCisgICAgLy8gICBtc2cub2JqICA9IFN0YXRlTWFjaGluZSB0byBzZW5kIHRvIHdoZW4gYmxvY2tlZAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJMT0NLX0RJU0NPVkVSWSAgICAgICAgICAgICAgICAgPSAgIEJBU0UgKyAxNTsKKworICAgIC8vIHNldCBjb3VudHJ5IGNvZGUKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVRfQ09VTlRSWV9DT0RFICAgICAgICAgICAgICAgID0gICBCQVNFICsgMTY7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTkFCTEVEICAgICAgICAgICAgICAgICAgICAgICAgID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESVNBQkxFRCAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKKworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtUDJwU3VwcG9ydGVkOworCisgICAgcHJpdmF0ZSBXaWZpUDJwRGV2aWNlIG1UaGlzRGV2aWNlID0gbmV3IFdpZmlQMnBEZXZpY2UoKTsKKworICAgIC8qIFdoZW4gYSBncm91cCBoYXMgYmVlbiBleHBsaWNpdGx5IGNyZWF0ZWQgYnkgYW4gYXBwLCB3ZSBwZXJzaXN0IHRoZSBncm91cAorICAgICAqIGV2ZW4gYWZ0ZXIgYWxsIGNsaWVudHMgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCB1bnRpbCBhbiBleHBsaWNpdCByZW1vdmUKKyAgICAgKiBpcyBpbnZva2VkICovCisgICAgcHJpdmF0ZSBib29sZWFuIG1BdXRvbm9tb3VzR3JvdXA7CisKKyAgICAvKiBJbnZpdGF0aW9uIHRvIGpvaW4gYW4gZXhpc3RpbmcgcDJwIGdyb3VwICovCisgICAgcHJpdmF0ZSBib29sZWFuIG1Kb2luRXhpc3RpbmdHcm91cDsKKworICAgIC8qIFRyYWNrIHdoZXRoZXIgd2UgYXJlIGluIHAycCBkaXNjb3ZlcnkuIFRoaXMgaXMgdXNlZCB0byBhdm9pZCBzZW5kaW5nIGR1cGxpY2F0ZQorICAgICAqIGJyb2FkY2FzdHMKKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gbURpc2NvdmVyeVN0YXJ0ZWQ7CisgICAgLyogVHJhY2sgd2hldGhlciBzZXJ2Y2ljZS9wZWVyIGRpc2NvdmVyeSBpcyBibG9ja2VkIGluIGZhdm9yIG9mIG90aGVyIHdpZmkgYWN0aW9ucworICAgICAqIChub3RhYmx5IGRoY3ApCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIG1EaXNjb3ZlcnlCbG9ja2VkOworCisgICAgLy8gU3VwcGxpY2FudCBkb2Vzbid0IGxpa2Ugc2V0dGluZyB0aGUgc2FtZSBjb3VudHJ5IGNvZGUgbXVsdGlwbGUgdGltZXMgKGl0IG1heSBkcm9wCisgICAgLy8gY3VycmVudCBjb25uZWN0ZWQgbmV0d29yayksIHNvIHdlIHNhdmUgdGhlIGNvdW50cnkgY29kZSBoZXJlIHRvIGF2b2lkIHJlZHVuZGVuY3kKKyAgICBwcml2YXRlIFN0cmluZyBtTGFzdFNldENvdW50cnlDb2RlOworCisgICAgLyoKKyAgICAgKiByZW1lbWJlciBpZiB3ZSB3ZXJlIGluIGEgc2NhbiB3aGVuIGl0IGhhZCB0byBiZSBzdG9wcGVkCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIG1EaXNjb3ZlcnlQb3N0cG9uZWQgPSBmYWxzZTsKKworICAgIHByaXZhdGUgTmV0d29ya0luZm8gbU5ldHdvcmtJbmZvOworCisgICAgcHJpdmF0ZSBib29sZWFuIG1UZW1wb2FyaWx5RGlzY29ubmVjdGVkV2lmaSA9IGZhbHNlOworCisgICAgLyogVGhlIHRyYW5zYWN0aW9uIElkIG9mIHNlcnZpY2UgZGlzY292ZXJ5IHJlcXVlc3QgKi8KKyAgICBwcml2YXRlIGJ5dGUgbVNlcnZpY2VUcmFuc2FjdGlvbklkID0gMDsKKworICAgIC8qIFNlcnZpY2UgZGlzY292ZXJ5IHJlcXVlc3QgSUQgb2Ygd3BhX3N1cHBsaWNhbnQuCisgICAgICogbnVsbCBtZWFucyBpdCdzIG5vdCBzZXQgeWV0LiAqLworICAgIHByaXZhdGUgU3RyaW5nIG1TZXJ2aWNlRGlzY1JlcUlkOworCisgICAgLyogY2xpZW50cyhhcHBsaWNhdGlvbikgaW5mb3JtYXRpb24gbGlzdC4gKi8KKyAgICBwcml2YXRlIEhhc2hNYXA8TWVzc2VuZ2VyLCBDbGllbnRJbmZvPiBtQ2xpZW50SW5mb0xpc3QgPSBuZXcgSGFzaE1hcDxNZXNzZW5nZXIsIENsaWVudEluZm8+KCk7CisKKyAgICAvKiBJcyBjaG9zZW4gYXMgYSB1bmlxdWUgcmFuZ2UgdG8gYXZvaWQgY29uZmxpY3Qgd2l0aAorICAgICAgIHRoZSByYW5nZSBkZWZpbmVkIGluIFRldGhlcmluZy5qYXZhICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gREhDUF9SQU5HRSA9IHsiMTkyLjE2OC40OS4yIiwgIjE5Mi4xNjguNDkuMjU0In07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZFUl9BRERSRVNTID0gIjE5Mi4xNjguNDkuMSI7CisKKyAgICAvKioKKyAgICAgKiBFcnJvciBjb2RlIGRlZmluaXRpb24uCisgICAgICogc2VlIHRoZSBUYWJsZS44IGluIHRoZSBXaUZpIERpcmVjdCBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZGV0YWlsLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZW51bSBQMnBTdGF0dXMgeworICAgICAgICAvKiBTdWNjZXNzLiAqLworICAgICAgICBTVUNDRVNTLAorCisgICAgICAgIC8qIFRoZSB0YXJnZXQgZGV2aWNlIGlzIGN1cnJlbnRseSB1bmF2YWlsYWJsZS4gKi8KKyAgICAgICAgSU5GT1JNQVRJT05fSVNfQ1VSUkVOVExZX1VOQVZBSUxBQkxFLAorCisgICAgICAgIC8qIFByb3RvY29sIGVycm9yLiAqLworICAgICAgICBJTkNPTVBBVElCTEVfUEFSQU1FVEVSUywKKworICAgICAgICAvKiBUaGUgdGFyZ2V0IGRldmljZSByZWFjaGVkIHRoZSBsaW1pdCBvZiB0aGUgbnVtYmVyIG9mIHRoZSBjb25uZWN0YWJsZSBkZXZpY2UuCisgICAgICAgICAqIEZvciBleGFtcGxlLCBkZXZpY2UgbGltaXQgb3IgZ3JvdXAgbGltaXQgaXMgc2V0LiAqLworICAgICAgICBMSU1JVF9SRUFDSEVELAorCisgICAgICAgIC8qIFByb3RvY29sIGVycm9yLiAqLworICAgICAgICBJTlZBTElEX1BBUkFNRVRFUiwKKworICAgICAgICAvKiBVbmFibGUgdG8gYWNjb21tb2RhdGUgcmVxdWVzdC4gKi8KKyAgICAgICAgVU5BQkxFX1RPX0FDQ09NTU9EQVRFX1JFUVVFU1QsCisKKyAgICAgICAgLyogUHJldmlvdXMgcHJvdG9jb2wgZXJyb3IsIG9yIGRpc3J1cHRpdmUgYmVoYXZpb3IuICovCisgICAgICAgIFBSRVZJT1VTX1BST1RPQ09MX0VSUk9SLAorCisgICAgICAgIC8qIFRoZXJlIGlzIG5vIGNvbW1vbiBjaGFubmVscyB0aGUgYm90aCBkZXZpY2VzIGNhbiB1c2UuICovCisgICAgICAgIE5PX0NPTU1PTl9DSEFOTkVMLAorCisgICAgICAgIC8qIFVua25vd24gcDJwIGdyb3VwLiBGb3IgZXhhbXBsZSwgRGV2aWNlIEEgdHJpZXMgdG8gaW52b2tlIHRoZSBwcmV2aW91cyBwZXJzaXN0ZW50IGdyb3VwLAorICAgICAgICAgKiAgYnV0IGRldmljZSBCIGhhcyByZW1vdmVkIHRoZSBzcGVjaWZpZWQgY3JlZGVudGlhbCBhbHJlYWR5LiAqLworICAgICAgICBVTktOT1dOX1AyUF9HUk9VUCwKKworICAgICAgICAvKiBCb3RoIHAycCBkZXZpY2VzIGluZGljYXRlZCBhbiBpbnRlbnQgb2YgMTUgaW4gZ3JvdXAgb3duZXIgbmVnb3RpYXRpb24uICovCisgICAgICAgIEJPVEhfR09fSU5URU5UXzE1LAorCisgICAgICAgIC8qIEluY29tcGF0aWJsZSBwcm92aXNpb25pbmcgbWV0aG9kLiAqLworICAgICAgICBJTkNPTVBBVElCTEVfUFJPVklTSU9OSU5HX01FVEhPRCwKKworICAgICAgICAvKiBSZWplY3RlZCBieSB1c2VyICovCisgICAgICAgIFJFSkVDVEVEX0JZX1VTRVIsCisKKyAgICAgICAgLyogVW5rbm93biBlcnJvciAqLworICAgICAgICBVTktOT1dOOworCisgICAgICAgIHB1YmxpYyBzdGF0aWMgUDJwU3RhdHVzIHZhbHVlT2YoaW50IGVycm9yKSB7CisgICAgICAgICAgICBzd2l0Y2goZXJyb3IpIHsKKyAgICAgICAgICAgIGNhc2UgMCA6CisgICAgICAgICAgICAgICAgcmV0dXJuIFNVQ0NFU1M7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgcmV0dXJuIElORk9STUFUSU9OX0lTX0NVUlJFTlRMWV9VTkFWQUlMQUJMRTsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gSU5DT01QQVRJQkxFX1BBUkFNRVRFUlM7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgcmV0dXJuIExJTUlUX1JFQUNIRUQ7CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfUEFSQU1FVEVSOworICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgIHJldHVybiBVTkFCTEVfVE9fQUNDT01NT0RBVEVfUkVRVUVTVDsKKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICByZXR1cm4gUFJFVklPVVNfUFJPVE9DT0xfRVJST1I7CisgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5PX0NPTU1PTl9DSEFOTkVMOworICAgICAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX1AyUF9HUk9VUDsKKyAgICAgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgICAgICByZXR1cm4gQk9USF9HT19JTlRFTlRfMTU7CisgICAgICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgICAgIHJldHVybiBJTkNPTVBBVElCTEVfUFJPVklTSU9OSU5HX01FVEhPRDsKKyAgICAgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgICAgICAgcmV0dXJuIFJFSkVDVEVEX0JZX1VTRVI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIFdpZmlQMnBTZXJ2aWNlKENvbnRleHQgY29udGV4dCkgeworICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisKKyAgICAgICAgLy9TVE9QU0hJUDogZ2V0IHRoaXMgZnJvbSBuYXRpdmUgc2lkZQorICAgICAgICBtSW50ZXJmYWNlID0gInAycDAiOworICAgICAgICBtTmV0d29ya0luZm8gPSBuZXcgTmV0d29ya0luZm8oQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX1dJRklfUDJQLCAwLCBORVRXT1JLVFlQRSwgIiIpOworCisgICAgICAgIG1QMnBTdXBwb3J0ZWQgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3RlbUZlYXR1cmUoCisgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuRkVBVFVSRV9XSUZJX0RJUkVDVCk7CisKKyAgICAgICAgbVRoaXNEZXZpY2UucHJpbWFyeURldmljZVR5cGUgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuY29uZmlnX3dpZmlfcDJwX2RldmljZV90eXBlKTsKKworICAgICAgICBtUDJwU3RhdGVNYWNoaW5lID0gbmV3IFAycFN0YXRlTWFjaGluZShUQUcsIG1QMnBTdXBwb3J0ZWQpOworICAgICAgICBtUDJwU3RhdGVNYWNoaW5lLnN0YXJ0KCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY29ubmVjdGl2aXR5U2VydmljZVJlYWR5KCkgeworICAgICAgICBJQmluZGVyIGIgPSBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKENvbnRleHQuTkVUV09SS01BTkFHRU1FTlRfU0VSVklDRSk7CisgICAgICAgIG1Od1NlcnZpY2UgPSBJTmV0d29ya01hbmFnZW1lbnRTZXJ2aWNlLlN0dWIuYXNJbnRlcmZhY2UoYik7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGVuZm9yY2VBY2Nlc3NQZXJtaXNzaW9uKCkgeworICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLkFDQ0VTU19XSUZJX1NUQVRFLAorICAgICAgICAgICAgICAgICJXaWZpUDJwU2VydmljZSIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBlbmZvcmNlQ2hhbmdlUGVybWlzc2lvbigpIHsKKyAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5DSEFOR0VfV0lGSV9TVEFURSwKKyAgICAgICAgICAgICAgICAiV2lmaVAycFNlcnZpY2UiKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZW5mb3JjZUNvbm5lY3Rpdml0eUludGVybmFsUGVybWlzc2lvbigpIHsKKyAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKAorICAgICAgICAgICAgICAgIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5DT05ORUNUSVZJVFlfSU5URVJOQUwsCisgICAgICAgICAgICAgICAgIldpZmlQMnBTZXJ2aWNlIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGEgcmVmZXJlbmNlIHRvIGhhbmRsZXIuIFRoaXMgaXMgdXNlZCBieSBhIGNsaWVudCB0byBlc3RhYmxpc2gKKyAgICAgKiBhbiBBc3luY0NoYW5uZWwgY29tbXVuaWNhdGlvbiB3aXRoIFdpZmlQMnBTZXJ2aWNlCisgICAgICovCisgICAgcHVibGljIE1lc3NlbmdlciBnZXRNZXNzZW5nZXIoKSB7CisgICAgICAgIGVuZm9yY2VBY2Nlc3NQZXJtaXNzaW9uKCk7CisgICAgICAgIGVuZm9yY2VDaGFuZ2VQZXJtaXNzaW9uKCk7CisgICAgICAgIHJldHVybiBuZXcgTWVzc2VuZ2VyKG1QMnBTdGF0ZU1hY2hpbmUuZ2V0SGFuZGxlcigpKTsKKyAgICB9CisKKyAgICAvKiogVGhpcyBpcyB1c2VkIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gdG8gZHJpdmVycyB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBkZXBlbmRpbmcKKyAgICAgKiBvbiB0aGUgY3VycmVudCBtb2RlIG9mIG9wZXJhdGlvbi4KKyAgICAgKiAwIC0gZGlzYWJsZWQKKyAgICAgKiAxIC0gc291cmNlIG9wZXJhdGlvbgorICAgICAqIDIgLSBzaW5rIG9wZXJhdGlvbgorICAgICAqCisgICAgICogQXMgYW4gZXhhbXBsZSwgdGhlIGRyaXZlciBjb3VsZCByZWR1Y2UgdGhlIGNoYW5uZWwgZHdlbGwgdGltZSBkdXJpbmcgc2Nhbm5pbmcKKyAgICAgKiB3aGVuIGFjdGluZyBhcyBhIHNvdXJjZSBvciBzaW5rIHRvIG1pbmltaXplIGltcGFjdCBvbiBtaXJhY2FzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNaXJhY2FzdE1vZGUoaW50IG1vZGUpIHsKKyAgICAgICAgZW5mb3JjZUNvbm5lY3Rpdml0eUludGVybmFsUGVybWlzc2lvbigpOworICAgICAgICBtUDJwU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFNFVF9NSVJBQ0FTVF9NT0RFLCBtb2RlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBkdW1wKEZpbGVEZXNjcmlwdG9yIGZkLCBQcmludFdyaXRlciBwdywgU3RyaW5nW10gYXJncykgeworICAgICAgICBpZiAobUNvbnRleHQuY2hlY2tDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uRFVNUCkKKyAgICAgICAgICAgICAgICAhPSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQpIHsKKyAgICAgICAgICAgIHB3LnByaW50bG4oIlBlcm1pc3Npb24gRGVuaWFsOiBjYW4ndCBkdW1wIFdpZmlQMnBTZXJ2aWNlIGZyb20gZnJvbSBwaWQ9IgorICAgICAgICAgICAgICAgICAgICArIEJpbmRlci5nZXRDYWxsaW5nUGlkKCkKKyAgICAgICAgICAgICAgICAgICAgKyAiLCB1aWQ9IiArIEJpbmRlci5nZXRDYWxsaW5nVWlkKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1QMnBTdGF0ZU1hY2hpbmUuZHVtcChmZCwgcHcsIGFyZ3MpOworICAgICAgICBwdy5wcmludGxuKCJtQXV0b25vbW91c0dyb3VwICIgKyBtQXV0b25vbW91c0dyb3VwKTsKKyAgICAgICAgcHcucHJpbnRsbigibUpvaW5FeGlzdGluZ0dyb3VwICIgKyBtSm9pbkV4aXN0aW5nR3JvdXApOworICAgICAgICBwdy5wcmludGxuKCJtRGlzY292ZXJ5U3RhcnRlZCAiICsgbURpc2NvdmVyeVN0YXJ0ZWQpOworICAgICAgICBwdy5wcmludGxuKCJtTmV0d29ya0luZm8gIiArIG1OZXR3b3JrSW5mbyk7CisgICAgICAgIHB3LnByaW50bG4oIm1UZW1wb2FyaWx5RGlzY29ubmVjdGVkV2lmaSAiICsgbVRlbXBvYXJpbHlEaXNjb25uZWN0ZWRXaWZpKTsKKyAgICAgICAgcHcucHJpbnRsbigibVNlcnZpY2VEaXNjUmVxSWQgIiArIG1TZXJ2aWNlRGlzY1JlcUlkKTsKKyAgICAgICAgcHcucHJpbnRsbigpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogSGFuZGxlcyBpbnRlcmFjdGlvbiB3aXRoIFdpZmlTdGF0ZU1hY2hpbmUKKyAgICAgKi8KKyAgICBwcml2YXRlIGNsYXNzIFAycFN0YXRlTWFjaGluZSBleHRlbmRzIFN0YXRlTWFjaGluZSB7CisKKyAgICAgICAgcHJpdmF0ZSBEZWZhdWx0U3RhdGUgbURlZmF1bHRTdGF0ZSA9IG5ldyBEZWZhdWx0U3RhdGUoKTsKKyAgICAgICAgcHJpdmF0ZSBQMnBOb3RTdXBwb3J0ZWRTdGF0ZSBtUDJwTm90U3VwcG9ydGVkU3RhdGUgPSBuZXcgUDJwTm90U3VwcG9ydGVkU3RhdGUoKTsKKyAgICAgICAgcHJpdmF0ZSBQMnBEaXNhYmxpbmdTdGF0ZSBtUDJwRGlzYWJsaW5nU3RhdGUgPSBuZXcgUDJwRGlzYWJsaW5nU3RhdGUoKTsKKyAgICAgICAgcHJpdmF0ZSBQMnBEaXNhYmxlZFN0YXRlIG1QMnBEaXNhYmxlZFN0YXRlID0gbmV3IFAycERpc2FibGVkU3RhdGUoKTsKKyAgICAgICAgcHJpdmF0ZSBQMnBFbmFibGluZ1N0YXRlIG1QMnBFbmFibGluZ1N0YXRlID0gbmV3IFAycEVuYWJsaW5nU3RhdGUoKTsKKyAgICAgICAgcHJpdmF0ZSBQMnBFbmFibGVkU3RhdGUgbVAycEVuYWJsZWRTdGF0ZSA9IG5ldyBQMnBFbmFibGVkU3RhdGUoKTsKKyAgICAgICAgLy8gSW5hY3RpdmUgaXMgd2hlbiBwMnAgaXMgZW5hYmxlZCB3aXRoIG5vIGNvbm5lY3Rpdml0eQorICAgICAgICBwcml2YXRlIEluYWN0aXZlU3RhdGUgbUluYWN0aXZlU3RhdGUgPSBuZXcgSW5hY3RpdmVTdGF0ZSgpOworICAgICAgICBwcml2YXRlIEdyb3VwQ3JlYXRpbmdTdGF0ZSBtR3JvdXBDcmVhdGluZ1N0YXRlID0gbmV3IEdyb3VwQ3JlYXRpbmdTdGF0ZSgpOworICAgICAgICBwcml2YXRlIFVzZXJBdXRob3JpemluZ0ludml0ZVJlcXVlc3RTdGF0ZSBtVXNlckF1dGhvcml6aW5nSW52aXRlUmVxdWVzdFN0YXRlCisgICAgICAgICAgICAgICAgPSBuZXcgVXNlckF1dGhvcml6aW5nSW52aXRlUmVxdWVzdFN0YXRlKCk7CisgICAgICAgIHByaXZhdGUgVXNlckF1dGhvcml6aW5nTmVnb3RpYXRpb25SZXF1ZXN0U3RhdGUgbVVzZXJBdXRob3JpemluZ05lZ290aWF0aW9uUmVxdWVzdFN0YXRlCisgICAgICAgICAgICAgICAgPSBuZXcgVXNlckF1dGhvcml6aW5nTmVnb3RpYXRpb25SZXF1ZXN0U3RhdGUoKTsKKyAgICAgICAgcHJpdmF0ZSBQcm92aXNpb25EaXNjb3ZlcnlTdGF0ZSBtUHJvdmlzaW9uRGlzY292ZXJ5U3RhdGUgPSBuZXcgUHJvdmlzaW9uRGlzY292ZXJ5U3RhdGUoKTsKKyAgICAgICAgcHJpdmF0ZSBHcm91cE5lZ290aWF0aW9uU3RhdGUgbUdyb3VwTmVnb3RpYXRpb25TdGF0ZSA9IG5ldyBHcm91cE5lZ290aWF0aW9uU3RhdGUoKTsKKyAgICAgICAgcHJpdmF0ZSBGcmVxdWVuY3lDb25mbGljdFN0YXRlIG1GcmVxdWVuY3lDb25mbGljdFN0YXRlID1uZXcgRnJlcXVlbmN5Q29uZmxpY3RTdGF0ZSgpOworCisgICAgICAgIHByaXZhdGUgR3JvdXBDcmVhdGVkU3RhdGUgbUdyb3VwQ3JlYXRlZFN0YXRlID0gbmV3IEdyb3VwQ3JlYXRlZFN0YXRlKCk7CisgICAgICAgIHByaXZhdGUgVXNlckF1dGhvcml6aW5nSm9pblN0YXRlIG1Vc2VyQXV0aG9yaXppbmdKb2luU3RhdGUgPSBuZXcgVXNlckF1dGhvcml6aW5nSm9pblN0YXRlKCk7CisgICAgICAgIHByaXZhdGUgT25nb2luZ0dyb3VwUmVtb3ZhbFN0YXRlIG1PbmdvaW5nR3JvdXBSZW1vdmFsU3RhdGUgPSBuZXcgT25nb2luZ0dyb3VwUmVtb3ZhbFN0YXRlKCk7CisKKyAgICAgICAgcHJpdmF0ZSBXaWZpTmF0aXZlIG1XaWZpTmF0aXZlID0gbmV3IFdpZmlOYXRpdmUobUludGVyZmFjZSk7CisgICAgICAgIHByaXZhdGUgV2lmaU1vbml0b3IgbVdpZmlNb25pdG9yID0gbmV3IFdpZmlNb25pdG9yKHRoaXMsIG1XaWZpTmF0aXZlKTsKKworICAgICAgICBwcml2YXRlIGZpbmFsIFdpZmlQMnBEZXZpY2VMaXN0IG1QZWVycyA9IG5ldyBXaWZpUDJwRGV2aWNlTGlzdCgpOworICAgICAgICAvKiBEdXJpbmcgYSBjb25uZWN0aW9uLCBzdXBwbGljYW50IGNhbiB0ZWxsIHVzIHRoYXQgYSBkZXZpY2Ugd2FzIGxvc3QuIEZyb20gYSBzdXBwbGljYW50J3MKKyAgICAgICAgICogcGVyc3BlY3RpdmUsIHRoZSBkaXNjb3Zlcnkgc3RvcHMgZHVyaW5nIGNvbm5lY3Rpb24gYW5kIGl0IHB1cmdlcyBkZXZpY2Ugc2luY2UgaXQgZG9lcworICAgICAgICAgKiBub3QgZ2V0IGxhdGVzdCB1cGRhdGVzIGFib3V0IHRoZSBkZXZpY2Ugd2l0aG91dCBiZWluZyBpbiBkaXNjb3Zlcnkgc3RhdGUuCisgICAgICAgICAqCisgICAgICAgICAqIEZyb20gdGhlIGZyYW1ld29yayBwZXJzcGVjdGl2ZSwgdGhlIGRldmljZSBpcyBzdGlsbCB0aGVyZSBzaW5jZSB3ZSBhcmUgY29ubmVjdGluZyBvcgorICAgICAgICAgKiBjb25uZWN0ZWQgdG8gaXQuIHNvIHdlIGtlZXAgdGhlc2UgZGV2aWNlcyBpbiBhIHNlcGFyYXRlIGxpc3QsIHNvIHRoYXQgdGhleSBhcmUgcmVtb3ZlZAorICAgICAgICAgKiB3aGVuIGNvbm5lY3Rpb24gaXMgY2FuY2VsbGVkIG9yIGxvc3QKKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgZmluYWwgV2lmaVAycERldmljZUxpc3QgbVBlZXJzTG9zdER1cmluZ0Nvbm5lY3Rpb24gPSBuZXcgV2lmaVAycERldmljZUxpc3QoKTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBXaWZpUDJwR3JvdXBMaXN0IG1Hcm91cHMgPSBuZXcgV2lmaVAycEdyb3VwTGlzdChudWxsLAorICAgICAgICAgICAgICAgIG5ldyBHcm91cERlbGV0ZUxpc3RlbmVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkRlbGV0ZUdyb3VwKGludCBuZXRJZCkgeworICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoImNhbGxlZCBvbkRlbGV0ZUdyb3VwKCkgbmV0SWQ9IiArIG5ldElkKTsKKyAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5yZW1vdmVOZXR3b3JrKG5ldElkKTsKKyAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zYXZlQ29uZmlnKCk7CisgICAgICAgICAgICAgICAgc2VuZFAycFBlcnNpc3RlbnRHcm91cHNDaGFuZ2VkQnJvYWRjYXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBwcml2YXRlIGZpbmFsIFdpZmlQMnBJbmZvIG1XaWZpUDJwSW5mbyA9IG5ldyBXaWZpUDJwSW5mbygpOworICAgICAgICBwcml2YXRlIFdpZmlQMnBHcm91cCBtR3JvdXA7CisKKyAgICAgICAgLy8gU2F2ZWQgV2lmaVAycENvbmZpZyBmb3IgYW4gb25nb2luZyBwZWVyIGNvbm5lY3Rpb24uIFRoaXMgd2lsbCBuZXZlciBiZSBudWxsLgorICAgICAgICAvLyBUaGUgZGV2aWNlQWRkcmVzcyB3aWxsIGJlIGFuIGVtcHR5IHN0cmluZyB3aGVuIHRoZSBkZXZpY2UgaXMgaW5hY3RpdmUKKyAgICAgICAgLy8gb3IgaWYgaXQgaXMgY29ubmVjdGVkIHdpdGhvdXQgYW55IG9uZ29pbmcgam9pbiByZXF1ZXN0CisgICAgICAgIHByaXZhdGUgV2lmaVAycENvbmZpZyBtU2F2ZWRQZWVyQ29uZmlnID0gbmV3IFdpZmlQMnBDb25maWcoKTsKKworICAgICAgICAvLyBTYXZlZCBXaWZpUDJwR3JvdXAgZnJvbSBpbnZpdGF0aW9uIHJlcXVlc3QKKyAgICAgICAgcHJpdmF0ZSBXaWZpUDJwR3JvdXAgbVNhdmVkUDJwR3JvdXA7CisKKyAgICAgICAgUDJwU3RhdGVNYWNoaW5lKFN0cmluZyBuYW1lLCBib29sZWFuIHAycFN1cHBvcnRlZCkgeworICAgICAgICAgICAgc3VwZXIobmFtZSk7CisKKyAgICAgICAgICAgIGFkZFN0YXRlKG1EZWZhdWx0U3RhdGUpOworICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1QMnBOb3RTdXBwb3J0ZWRTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7CisgICAgICAgICAgICAgICAgYWRkU3RhdGUobVAycERpc2FibGluZ1N0YXRlLCBtRGVmYXVsdFN0YXRlKTsKKyAgICAgICAgICAgICAgICBhZGRTdGF0ZShtUDJwRGlzYWJsZWRTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7CisgICAgICAgICAgICAgICAgYWRkU3RhdGUobVAycEVuYWJsaW5nU3RhdGUsIG1EZWZhdWx0U3RhdGUpOworICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1QMnBFbmFibGVkU3RhdGUsIG1EZWZhdWx0U3RhdGUpOworICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtSW5hY3RpdmVTdGF0ZSwgbVAycEVuYWJsZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1Hcm91cENyZWF0aW5nU3RhdGUsIG1QMnBFbmFibGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobVVzZXJBdXRob3JpemluZ0ludml0ZVJlcXVlc3RTdGF0ZSwgbUdyb3VwQ3JlYXRpbmdTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtVXNlckF1dGhvcml6aW5nTmVnb3RpYXRpb25SZXF1ZXN0U3RhdGUsIG1Hcm91cENyZWF0aW5nU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobVByb3Zpc2lvbkRpc2NvdmVyeVN0YXRlLCBtR3JvdXBDcmVhdGluZ1N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1Hcm91cE5lZ290aWF0aW9uU3RhdGUsIG1Hcm91cENyZWF0aW5nU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobUZyZXF1ZW5jeUNvbmZsaWN0U3RhdGUsIG1Hcm91cENyZWF0aW5nU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtR3JvdXBDcmVhdGVkU3RhdGUsIG1QMnBFbmFibGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobVVzZXJBdXRob3JpemluZ0pvaW5TdGF0ZSwgbUdyb3VwQ3JlYXRlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1PbmdvaW5nR3JvdXBSZW1vdmFsU3RhdGUsIG1Hcm91cENyZWF0ZWRTdGF0ZSk7CisKKyAgICAgICAgICAgIGlmIChwMnBTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgICAgICBzZXRJbml0aWFsU3RhdGUobVAycERpc2FibGVkU3RhdGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZXRJbml0aWFsU3RhdGUobVAycE5vdFN1cHBvcnRlZFN0YXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldExvZ1JlY1NpemUoNTApOworICAgICAgICAgICAgc2V0TG9nT25seVRyYW5zaXRpb25zKHRydWUpOworICAgICAgICB9CisKKyAgICBjbGFzcyBEZWZhdWx0U3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBBc3luY0NoYW5uZWwuQ01EX0NIQU5ORUxfSEFMRl9DT05ORUNURUQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gQXN5bmNDaGFubmVsLlNUQVRVU19TVUNDRVNTRlVMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJGdWxsIGNvbm5lY3Rpb24gd2l0aCBXaWZpU3RhdGVNYWNoaW5lIGVzdGFibGlzaGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaUNoYW5uZWwgPSAoQXN5bmNDaGFubmVsKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZ1bGwgY29ubmVjdGlvbiBmYWlsdXJlLCBlcnJvciA9ICIgKyBtZXNzYWdlLmFyZzEpOworICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlDaGFubmVsID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQXN5bmNDaGFubmVsLkNNRF9DSEFOTkVMX0RJU0NPTk5FQ1RFRDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSBBc3luY0NoYW5uZWwuU1RBVFVTX1NFTkRfVU5TVUNDRVNTRlVMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJTZW5kIGZhaWxlZCwgY2xpZW50IGNvbm5lY3Rpb24gbG9zdCIpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiQ2xpZW50IGNvbm5lY3Rpb24gbG9zdCB3aXRoIHJlYXNvbjogIiArIG1lc3NhZ2UuYXJnMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbVdpZmlDaGFubmVsID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEFzeW5jQ2hhbm5lbC5DTURfQ0hBTk5FTF9GVUxMX0NPTk5FQ1RJT046CisgICAgICAgICAgICAgICAgICAgIEFzeW5jQ2hhbm5lbCBhYyA9IG5ldyBBc3luY0NoYW5uZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgYWMuY29ubmVjdChtQ29udGV4dCwgZ2V0SGFuZGxlcigpLCBtZXNzYWdlLnJlcGx5VG8pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEJMT0NLX0RJU0NPVkVSWToKKyAgICAgICAgICAgICAgICAgICAgbURpc2NvdmVyeUJsb2NrZWQgPSAobWVzc2FnZS5hcmcxID09IEVOQUJMRUQgPyB0cnVlIDogZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAvLyBhbHdheXMgcmVzZXQgdGhpcyAtIHdlIHdlbnQgdG8gYSBzdGF0ZSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBkaXNjb3Zlcnkgc28KKyAgICAgICAgICAgICAgICAgICAgLy8gaXQgd291bGQgaGF2ZSBzdG9wcGVkIHJlZ2FyZGxlc3MKKyAgICAgICAgICAgICAgICAgICAgbURpc2NvdmVyeVBvc3Rwb25lZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAobURpc2NvdmVyeUJsb2NrZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGVNYWNoaW5lIG0gPSAoU3RhdGVNYWNoaW5lKW1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uc2VuZE1lc3NhZ2UobWVzc2FnZS5hcmcyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgidW5hYmxlIHRvIHNlbmQgQkxPQ0tfRElTQ09WRVJZIHJlc3BvbnNlOiAiICsgZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9QRUVSUzoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfUEVFUlNfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUT1BfRElTQ09WRVJZOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVE9QX0RJU0NPVkVSWV9GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfU0VSVklDRVM6CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1NFUlZJQ0VTX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DT05ORUNUOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DT05ORUNUX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DQU5DRUxfQ09OTkVDVDoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ0FOQ0VMX0NPTk5FQ1RfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNSRUFURV9HUk9VUDoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ1JFQVRFX0dST1VQX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRU1PVkVfR1JPVVA6CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9HUk9VUF9GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQUREX0xPQ0FMX1NFUlZJQ0U6CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkFERF9MT0NBTF9TRVJWSUNFX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRU1PVkVfTE9DQUxfU0VSVklDRToKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0xPQ0FMX1NFUlZJQ0VfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNMRUFSX0xPQ0FMX1NFUlZJQ0VTOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DTEVBUl9MT0NBTF9TRVJWSUNFU19GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQUREX1NFUlZJQ0VfUkVRVUVTVDoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQUREX1NFUlZJQ0VfUkVRVUVTVF9GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX1NFUlZJQ0VfUkVRVUVTVDoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5SRU1PVkVfU0VSVklDRV9SRVFVRVNUX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DTEVBUl9TRVJWSUNFX1JFUVVFU1RTOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkNMRUFSX1NFUlZJQ0VfUkVRVUVTVFNfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNFVF9ERVZJQ0VfTkFNRToKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU0VUX0RFVklDRV9OQU1FX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5ERUxFVEVfUEVSU0lTVEVOVF9HUk9VUDoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuREVMRVRFX1BFUlNJU1RFTlRfR1JPVVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU0VUX1dGRF9JTkZPOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TRVRfV0ZEX0lORk9fRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFUVVFU1RfUEVFUlM6CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlJFU1BPTlNFX1BFRVJTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWZpUDJwRGV2aWNlTGlzdChtUGVlcnMpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRVFVRVNUX0NPTk5FQ1RJT05fSU5GTzoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuUkVTUE9OU0VfQ09OTkVDVElPTl9JTkZPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWZpUDJwSW5mbyhtV2lmaVAycEluZm8pKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRVFVRVNUX0dST1VQX0lORk86CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlJFU1BPTlNFX0dST1VQX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUdyb3VwICE9IG51bGwgPyBuZXcgV2lmaVAycEdyb3VwKG1Hcm91cCkgOiBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRVFVRVNUX1BFUlNJU1RFTlRfR1JPVVBfSU5GTzoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuUkVTUE9OU0VfUEVSU0lTVEVOVF9HUk9VUF9JTkZPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWZpUDJwR3JvdXBMaXN0KG1Hcm91cHMsIG51bGwpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVEFSVF9XUFM6CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX1dQU19GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZQorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0lOVklUQVRJT05fUkVTVUxUX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU0NBTl9SRVNVTFRTX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQX0NPTk5FQ1RJT05fRVZFTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBfRElTQ09OTkVDVElPTl9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLk5FVFdPUktfQ09OTkVDVElPTl9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLk5FVFdPUktfRElTQ09OTkVDVElPTl9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLldQU19TVUNDRVNTX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuV1BTX0ZBSUxfRVZFTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5XUFNfT1ZFUkxBUF9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLldQU19USU1FT1VUX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX1JFTU9WRURfRVZFTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfREVWSUNFX0ZPVU5EX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0RFVklDRV9MT1NUX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0ZJTkRfU1RPUFBFRF9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9TRVJWX0RJU0NfUkVTUF9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIFBFRVJfQ09OTkVDVElPTl9VU0VSX0FDQ0VQVDoKKyAgICAgICAgICAgICAgICBjYXNlIFBFRVJfQ09OTkVDVElPTl9VU0VSX1JFSkVDVDoKKyAgICAgICAgICAgICAgICBjYXNlIERJU0NPTk5FQ1RfV0lGSV9SRVNQT05TRToKKyAgICAgICAgICAgICAgICBjYXNlIERST1BfV0lGSV9VU0VSX0FDQ0VQVDoKKyAgICAgICAgICAgICAgICBjYXNlIERST1BfV0lGSV9VU0VSX1JFSkVDVDoKKyAgICAgICAgICAgICAgICBjYXNlIEdST1VQX0NSRUFUSU5HX1RJTUVEX09VVDoKKyAgICAgICAgICAgICAgICBjYXNlIERJU0FCTEVfUDJQX1RJTUVEX09VVDoKKyAgICAgICAgICAgICAgICBjYXNlIERoY3BTdGF0ZU1hY2hpbmUuQ01EX1BSRV9ESENQX0FDVElPTjoKKyAgICAgICAgICAgICAgICBjYXNlIERoY3BTdGF0ZU1hY2hpbmUuQ01EX1BPU1RfREhDUF9BQ1RJT046CisgICAgICAgICAgICAgICAgY2FzZSBEaGNwU3RhdGVNYWNoaW5lLkNNRF9PTl9RVUlUOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19GQUlMVVJFX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgU0VUX01JUkFDQVNUX01PREU6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVEFSVF9MSVNURU46CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVE9QX0xJU1RFTjoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNFVF9DSEFOTkVMOgorICAgICAgICAgICAgICAgIGNhc2UgU0VUX0NPVU5UUllfQ09ERToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9FTkFCTEVfUDJQOgorICAgICAgICAgICAgICAgICAgICAvLyBFbmFibGUgaXMgbGF6eSBhbmQgaGFzIG5vIHJlc3BvbnNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfRElTQUJMRV9QMlBfUkVROgorICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBlbmQgdXAgaGFuZGxpbmcgaW4gZGVmYXVsdCwgcDJwIGlzIG5vdCBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgIG1XaWZpQ2hhbm5lbC5zZW5kTWVzc2FnZShXaWZpU3RhdGVNYWNoaW5lLkNNRF9ESVNBQkxFX1AyUF9SU1ApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgLyogdW5leHBlY3RlZCBncm91cCBjcmVhdGVkLCByZW1vdmUgKi8KKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9TVEFSVEVEX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBtR3JvdXAgPSAoV2lmaVAycEdyb3VwKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgbG9nZSgiVW5leHBlY3RlZCBncm91cCBjcmVhdGlvbiwgcmVtb3ZlICIgKyBtR3JvdXApOworICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBHcm91cFJlbW92ZShtR3JvdXAuZ2V0SW50ZXJmYWNlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvLyBBIGdyb3VwIGZvcm1hdGlvbiBmYWlsdXJlIGlzIGFsd2F5cyBmb2xsb3dlZCBieQorICAgICAgICAgICAgICAgIC8vIGEgZ3JvdXAgcmVtb3ZlZCBldmVudC4gRmx1c2hpbmcgdGhpbmdzIGF0IGdyb3VwIGZvcm1hdGlvbgorICAgICAgICAgICAgICAgIC8vIGZhaWx1cmUgY2F1c2VzIHN1cHBsaWNhbnQgaXNzdWVzLiBJZ25vcmUgcmlnaHQgbm93LgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX0ZPUk1BVElPTl9GQUlMVVJFX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBsb2dlKCJVbmhhbmRsZWQgbWVzc2FnZSAiICsgbWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgUDJwTm90U3VwcG9ydGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1BFRVJTOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9QRUVSU19GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVE9QX0RJU0NPVkVSWToKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RPUF9ESVNDT1ZFUllfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfU0VSVklDRVM6CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1NFUlZJQ0VTX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNPTk5FQ1Q6CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNPTk5FQ1RfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ0FOQ0VMX0NPTk5FQ1Q6CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNBTkNFTF9DT05ORUNUX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ1JFQVRFX0dST1VQOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DUkVBVEVfR1JPVVBfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0dST1VQOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5SRU1PVkVfR1JPVVBfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQUREX0xPQ0FMX1NFUlZJQ0U6CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkFERF9MT0NBTF9TRVJWSUNFX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9MT0NBTF9TRVJWSUNFOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5SRU1PVkVfTE9DQUxfU0VSVklDRV9GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DTEVBUl9MT0NBTF9TRVJWSUNFUzoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ0xFQVJfTE9DQUxfU0VSVklDRVNfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQUREX1NFUlZJQ0VfUkVRVUVTVDoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQUREX1NFUlZJQ0VfUkVRVUVTVF9GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRU1PVkVfU0VSVklDRV9SRVFVRVNUOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9TRVJWSUNFX1JFUVVFU1RfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ0xFQVJfU0VSVklDRV9SRVFVRVNUUzoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5DTEVBUl9TRVJWSUNFX1JFUVVFU1RTX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNFVF9ERVZJQ0VfTkFNRToKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU0VUX0RFVklDRV9OQU1FX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkRFTEVURV9QRVJTSVNURU5UX0dST1VQOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ERUxFVEVfUEVSU0lTVEVOVF9HUk9VUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNFVF9XRkRfSU5GTzoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU0VUX1dGRF9JTkZPX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX1dQUzoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RBUlRfV1BTX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX0xJU1RFTjoKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RBUlRfTElTVEVOX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUT1BfTElTVEVOOgorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVE9QX0xJU1RFTl9GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFAycERpc2FibGluZ1N0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7CisgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShESVNBQkxFX1AyUF9USU1FRF9PVVQsCisgICAgICAgICAgICAgICAgICAgICsrbURpc2FibGVQMnBUaW1lb3V0SW5kZXgsIDApLCBESVNBQkxFX1AyUF9XQUlUX1RJTUVfTVMpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9ESVNDT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJwMnAgc29ja2V0IGNvbm5lY3Rpb24gbG9zdCIpOworICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVAycERpc2FibGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0VOQUJMRV9QMlA6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9ESVNBQkxFX1AyUF9SRVE6CisgICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBESVNBQkxFX1AyUF9USU1FRF9PVVQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChtR3JvdXBDcmVhdGluZ1RpbWVvdXRJbmRleCA9PSBtZXNzYWdlLmFyZzEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlAycCBkaXNhYmxlIHRpbWVkIG91dCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1QMnBEaXNhYmxlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgeworICAgICAgICAgICAgbVdpZmlDaGFubmVsLnNlbmRNZXNzYWdlKFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0RJU0FCTEVfUDJQX1JTUCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBQMnBEaXNhYmxlZFN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9FTkFCTEVfUDJQOgorICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgbU53U2VydmljZS5zZXRJbnRlcmZhY2VVcChtSW50ZXJmYWNlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJVbmFibGUgdG8gY2hhbmdlIGludGVyZmFjZSBzZXR0aW5nczogIiArIHJlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGllKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJVbmFibGUgdG8gY2hhbmdlIGludGVyZmFjZSBzZXR0aW5nczogIiArIGllKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtV2lmaU1vbml0b3Iuc3RhcnRNb25pdG9yaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtUDJwRW5hYmxpbmdTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgUDJwRW5hYmxpbmdTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9DT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJQMnAgc29ja2V0IGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCIpOworICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluYWN0aXZlU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9ESVNDT05ORUNUSU9OX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBsb2dlKCJQMnAgc29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtUDJwRGlzYWJsZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfRU5BQkxFX1AyUDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0RJU0FCTEVfUDJQX1JFUToKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFAycEVuYWJsZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOworICAgICAgICAgICAgc2VuZFAycFN0YXRlQ2hhbmdlZEJyb2FkY2FzdCh0cnVlKTsKKyAgICAgICAgICAgIG1OZXR3b3JrSW5mby5zZXRJc0F2YWlsYWJsZSh0cnVlKTsKKyAgICAgICAgICAgIHNlbmRQMnBDb25uZWN0aW9uQ2hhbmdlZEJyb2FkY2FzdCgpOworICAgICAgICAgICAgaW5pdGlhbGl6ZVAycFNldHRpbmdzKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQX0RJU0NPTk5FQ1RJT05fRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlVuZXhwZWN0ZWQgbG9zcyBvZiBwMnAgc29ja2V0IGNvbm5lY3Rpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1QMnBEaXNhYmxlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9FTkFCTEVfUDJQOgorICAgICAgICAgICAgICAgICAgICAvL05vdGhpbmcgdG8gZG8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9ESVNBQkxFX1AyUF9SRVE6CisgICAgICAgICAgICAgICAgICAgIGlmIChtUGVlcnMuY2xlYXIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFBlZXJzQ2hhbmdlZEJyb2FkY2FzdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtR3JvdXBzLmNsZWFyKCkpIHNlbmRQMnBQZXJzaXN0ZW50R3JvdXBzQ2hhbmdlZEJyb2FkY2FzdCgpOworCisgICAgICAgICAgICAgICAgICAgIG1XaWZpTW9uaXRvci5zdG9wTW9uaXRvcmluZygpOworICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVAycERpc2FibGluZ1N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TRVRfREVWSUNFX05BTUU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBXaWZpUDJwRGV2aWNlIGQgPSAoV2lmaVAycERldmljZSkgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGlmIChkICE9IG51bGwgJiYgc2V0QW5kUGVyc2lzdERldmljZU5hbWUoZC5kZXZpY2VOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgic2V0IGRldmljZSBuYW1lICIgKyBkLmRldmljZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU0VUX0RFVklDRV9OQU1FX1NVQ0NFRURFRCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TRVRfREVWSUNFX05BTUVfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5FUlJPUik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU0VUX1dGRF9JTkZPOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgV2lmaVAycFdmZEluZm8gZCA9IChXaWZpUDJwV2ZkSW5mbykgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGlmIChkICE9IG51bGwgJiYgc2V0V2ZkSW5mbyhkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU0VUX1dGRF9JTkZPX1NVQ0NFRURFRCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TRVRfV0ZEX0lORk9fRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5FUlJPUik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgQkxPQ0tfRElTQ09WRVJZOgorICAgICAgICAgICAgICAgICAgICBib29sZWFuIGJsb2NrZWQgPSAobWVzc2FnZS5hcmcxID09IEVOQUJMRUQgPyB0cnVlIDogZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBpZiAobURpc2NvdmVyeUJsb2NrZWQgPT0gYmxvY2tlZCkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIG1EaXNjb3ZlcnlCbG9ja2VkID0gYmxvY2tlZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrZWQgJiYgbURpc2NvdmVyeVN0YXJ0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycFN0b3BGaW5kKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtRGlzY292ZXJ5UG9zdHBvbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrZWQgJiYgbURpc2NvdmVyeVBvc3Rwb25lZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbURpc2NvdmVyeVBvc3Rwb25lZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwRmluZChESVNDT1ZFUl9USU1FT1VUX1MpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9ja2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlTWFjaGluZSBtID0gKFN0YXRlTWFjaGluZSltZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnNlbmRNZXNzYWdlKG1lc3NhZ2UuYXJnMik7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoInVuYWJsZSB0byBzZW5kIEJMT0NLX0RJU0NPVkVSWSByZXNwb25zZTogIiArIGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfUEVFUlM6CisgICAgICAgICAgICAgICAgICAgIGlmIChtRGlzY292ZXJ5QmxvY2tlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfUEVFUlNfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBzZW5kIHNlcnZpY2UgZGlzY292ZXJ5IHJlcXVlc3Qgd2hpbGUgbm9ybWFsIGZpbmQgb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBjbGVhclN1cHBsaWNhbnRTZXJ2aWNlUmVxdWVzdCgpOworICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUucDJwRmluZChESVNDT1ZFUl9USU1FT1VUX1MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9QRUVSU19TVUNDRUVERUQpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFAycERpc2NvdmVyeUNoYW5nZWRCcm9hZGNhc3QodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9QRUVSU19GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkVSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9GSU5EX1NUT1BQRURfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIHNlbmRQMnBEaXNjb3ZlcnlDaGFuZ2VkQnJvYWRjYXN0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVE9QX0RJU0NPVkVSWToKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnAycFN0b3BGaW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUT1BfRElTQ09WRVJZX1NVQ0NFRURFRCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVE9QX0RJU0NPVkVSWV9GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkVSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1NFUlZJQ0VTOgorICAgICAgICAgICAgICAgICAgICBpZiAobURpc2NvdmVyeUJsb2NrZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1NFUlZJQ0VTX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgZGlzY292ZXIgc2VydmljZXMiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVTdXBwbGljYW50U2VydmljZVJlcXVlc3QoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfU0VSVklDRVNfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5OT19TRVJWSUNFX1JFUVVFU1RTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5wMnBGaW5kKERJU0NPVkVSX1RJTUVPVVRfUykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1NFUlZJQ0VTX1NVQ0NFRURFRCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9TRVJWSUNFU19GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkVSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9ERVZJQ0VfRk9VTkRfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBEZXZpY2UgZGV2aWNlID0gKFdpZmlQMnBEZXZpY2UpIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICBpZiAobVRoaXNEZXZpY2UuZGV2aWNlQWRkcmVzcy5lcXVhbHMoZGV2aWNlLmRldmljZUFkZHJlc3MpKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbVBlZXJzLnVwZGF0ZVN1cHBsaWNhbnREZXRhaWxzKGRldmljZSk7CisgICAgICAgICAgICAgICAgICAgIHNlbmRQZWVyc0NoYW5nZWRCcm9hZGNhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfREVWSUNFX0xPU1RfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIGRldmljZSA9IChXaWZpUDJwRGV2aWNlKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgLy8gR2V0cyBjdXJyZW50IGRldGFpbHMgZm9yIHRoZSBvbmUgcmVtb3ZlZAorICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPSBtUGVlcnMucmVtb3ZlKGRldmljZS5kZXZpY2VBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRldmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kUGVlcnNDaGFuZ2VkQnJvYWRjYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5BRERfTE9DQUxfU0VSVklDRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGFkZCBzZXJ2aWNlIik7CisgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBTZXJ2aWNlSW5mbyBzZXJ2SW5mbyA9IChXaWZpUDJwU2VydmljZUluZm8pbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGlmIChhZGRMb2NhbFNlcnZpY2UobWVzc2FnZS5yZXBseVRvLCBzZXJ2SW5mbykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkFERF9MT0NBTF9TRVJWSUNFX1NVQ0NFRURFRCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5BRERfTE9DQUxfU0VSVklDRV9GQUlMRUQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0xPQ0FMX1NFUlZJQ0U6CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiByZW1vdmUgc2VydmljZSIpOworICAgICAgICAgICAgICAgICAgICBzZXJ2SW5mbyA9IChXaWZpUDJwU2VydmljZUluZm8pbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FsU2VydmljZShtZXNzYWdlLnJlcGx5VG8sIHNlcnZJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0xPQ0FMX1NFUlZJQ0VfU1VDQ0VFREVEKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DTEVBUl9MT0NBTF9TRVJWSUNFUzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGNsZWFyIHNlcnZpY2UiKTsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJMb2NhbFNlcnZpY2VzKG1lc3NhZ2UucmVwbHlUbyk7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNMRUFSX0xPQ0FMX1NFUlZJQ0VTX1NVQ0NFRURFRCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQUREX1NFUlZJQ0VfUkVRVUVTVDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGFkZCBzZXJ2aWNlIHJlcXVlc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGRTZXJ2aWNlUmVxdWVzdChtZXNzYWdlLnJlcGx5VG8sIChXaWZpUDJwU2VydmljZVJlcXVlc3QpbWVzc2FnZS5vYmopKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5BRERfU0VSVklDRV9SRVFVRVNUX0ZBSUxFRCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5BRERfU0VSVklDRV9SRVFVRVNUX1NVQ0NFRURFRCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX1NFUlZJQ0VfUkVRVUVTVDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIHJlbW92ZSBzZXJ2aWNlIHJlcXVlc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2VydmljZVJlcXVlc3QobWVzc2FnZS5yZXBseVRvLCAoV2lmaVAycFNlcnZpY2VSZXF1ZXN0KW1lc3NhZ2Uub2JqKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX1NFUlZJQ0VfUkVRVUVTVF9TVUNDRUVERUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNMRUFSX1NFUlZJQ0VfUkVRVUVTVFM6CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBjbGVhciBzZXJ2aWNlIHJlcXVlc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJTZXJ2aWNlUmVxdWVzdHMobWVzc2FnZS5yZXBseVRvKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ0xFQVJfU0VSVklDRV9SRVFVRVNUU19TVUNDRUVERUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9TRVJWX0RJU0NfUkVTUF9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIHJlY2VpdmUgc2VydmljZSByZXNwb25zZSIpOworICAgICAgICAgICAgICAgICAgICBMaXN0PFdpZmlQMnBTZXJ2aWNlUmVzcG9uc2U+IHNkUmVzcExpc3QgPQorICAgICAgICAgICAgICAgICAgICAgICAgKExpc3Q8V2lmaVAycFNlcnZpY2VSZXNwb25zZT4pIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICBmb3IgKFdpZmlQMnBTZXJ2aWNlUmVzcG9uc2UgcmVzcCA6IHNkUmVzcExpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBEZXZpY2UgZGV2ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGVlcnMuZ2V0KHJlc3AuZ2V0U3JjRGV2aWNlKCkuZGV2aWNlQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNwLnNldFNyY0RldmljZShkZXYpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFNlcnZpY2VSZXNwb25zZShyZXNwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkRFTEVURV9QRVJTSVNURU5UX0dST1VQOgorICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBkZWxldGUgcGVyc2lzdGVudCBncm91cCIpOworICAgICAgICAgICAgICAgICAgIG1Hcm91cHMucmVtb3ZlKG1lc3NhZ2UuYXJnMSk7CisgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuREVMRVRFX1BFUlNJU1RFTlRfR1JPVVBfU1VDQ0VFREVEKTsKKyAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNFVF9NSVJBQ0FTVF9NT0RFOgorICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRNaXJhY2FzdE1vZGUobWVzc2FnZS5hcmcxKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVEFSVF9MSVNURU46CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBzdGFydCBsaXN0ZW4gbW9kZSIpOworICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBGbHVzaCgpOworICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUucDJwRXh0TGlzdGVuKHRydWUsIDUwMCwgNTAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RBUlRfTElTVEVOX1NVQ0NFRURFRCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVEFSVF9MSVNURU5fRkFJTEVEKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUT1BfTElTVEVOOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgc3RvcCBsaXN0ZW4gbW9kZSIpOworICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUucDJwRXh0TGlzdGVuKGZhbHNlLCAwLCAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RPUF9MSVNURU5fU1VDQ0VFREVEKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUT1BfTElTVEVOX0ZBSUxFRCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwRmx1c2goKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TRVRfQ0hBTk5FTDoKKyAgICAgICAgICAgICAgICAgICAgQnVuZGxlIHAycENoYW5uZWxzID0gKEJ1bmRsZSkgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGludCBsYyA9IHAycENoYW5uZWxzLmdldEludCgibGMiLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IG9jID0gcDJwQ2hhbm5lbHMuZ2V0SW50KCJvYyIsIDApOworICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgc2V0IGxpc3RlbiBhbmQgb3BlcmF0aW5nIGNoYW5uZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnAycFNldENoYW5uZWwobGMsIG9jKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU0VUX0NIQU5ORUxfU1VDQ0VFREVEKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNFVF9DSEFOTkVMX0ZBSUxFRCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTRVRfQ09VTlRSWV9DT0RFOgorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY291bnRyeUNvZGUgPSAoU3RyaW5nKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGUgPSBjb3VudHJ5Q29kZS50b1VwcGVyQ2FzZShMb2NhbGUuUk9PVCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtTGFzdFNldENvdW50cnlDb2RlID09IG51bGwgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZS5lcXVhbHMobUxhc3RTZXRDb3VudHJ5Q29kZSkgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5zZXRDb3VudHJ5Q29kZShjb3VudHJ5Q29kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGFzdFNldENvdW50cnlDb2RlID0gY291bnRyeUNvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgeworICAgICAgICAgICAgc2VuZFAycERpc2NvdmVyeUNoYW5nZWRCcm9hZGNhc3QoZmFsc2UpOworICAgICAgICAgICAgc2VuZFAycFN0YXRlQ2hhbmdlZEJyb2FkY2FzdChmYWxzZSk7CisgICAgICAgICAgICBtTmV0d29ya0luZm8uc2V0SXNBdmFpbGFibGUoZmFsc2UpOworCisgICAgICAgICAgICBtTGFzdFNldENvdW50cnlDb2RlID0gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIEluYWN0aXZlU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcuaW52YWxpZGF0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNPTk5FQ1Q6CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBzZW5kaW5nIGNvbm5lY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgV2lmaVAycENvbmZpZyBjb25maWcgPSAoV2lmaVAycENvbmZpZykgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbmZpZ0ludmFsaWQoY29uZmlnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRHJvcHBpbmcgY29ubmVjdCByZXF1ZXNldCAiICsgY29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNPTk5FQ1RfRkFJTEVEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbUF1dG9ub21vdXNHcm91cCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBTdG9wRmluZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAocmVpbnZva2VQZXJzaXN0ZW50R3JvdXAoY29uZmlnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Hcm91cE5lZ290aWF0aW9uU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Qcm92aXNpb25EaXNjb3ZlcnlTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZyA9IGNvbmZpZzsKKyAgICAgICAgICAgICAgICAgICAgbVBlZXJzLnVwZGF0ZVN0YXR1cyhtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MsIFdpZmlQMnBEZXZpY2UuSU5WSVRFRCk7CisgICAgICAgICAgICAgICAgICAgIHNlbmRQZWVyc0NoYW5nZWRCcm9hZGNhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ09OTkVDVF9TVUNDRUVERUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUT1BfRElTQ09WRVJZOgorICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUucDJwU3RvcEZpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBkaXNjb3Zlcnkgc3RvcHMgaW4gaW5hY3RpdmUgc3RhdGUsIGZsdXNoIHRvIGNsZWFyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZSBwZWVyIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycEZsdXNoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZURpc2NSZXFJZCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVE9QX0RJU0NPVkVSWV9TVUNDRUVERUQpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RPUF9ESVNDT1ZFUllfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5FUlJPUik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR09fTkVHT1RJQVRJT05fUkVRVUVTVF9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gKFdpZmlQMnBDb25maWcpIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb25maWdJbnZhbGlkKGNvbmZpZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkRyb3BwaW5nIEdPIG5lZyByZXF1ZXN0ICIgKyBjb25maWcpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZyA9IGNvbmZpZzsKKyAgICAgICAgICAgICAgICAgICAgbUF1dG9ub21vdXNHcm91cCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtSm9pbkV4aXN0aW5nR3JvdXAgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Vc2VyQXV0aG9yaXppbmdOZWdvdGlhdGlvblJlcXVlc3RTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0lOVklUQVRJT05fUkVDRUlWRURfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBHcm91cCBncm91cCA9IChXaWZpUDJwR3JvdXApIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICBXaWZpUDJwRGV2aWNlIG93bmVyID0gZ3JvdXAuZ2V0T3duZXIoKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAob3duZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWdub3JlZCBpbnZpdGF0aW9uIGZyb20gbnVsbCBvd25lciIpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjb25maWcgPSBuZXcgV2lmaVAycENvbmZpZygpOworICAgICAgICAgICAgICAgICAgICBjb25maWcuZGV2aWNlQWRkcmVzcyA9IGdyb3VwLmdldE93bmVyKCkuZGV2aWNlQWRkcmVzczsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb25maWdJbnZhbGlkKGNvbmZpZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkRyb3BwaW5nIGludml0YXRpb24gcmVxdWVzdCAiICsgY29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcgPSBjb25maWc7CisKKyAgICAgICAgICAgICAgICAgICAgLy9DaGVjayBpZiB3ZSBoYXZlIHRoZSBvd25lciBpbiBwZWVyIGxpc3QgYW5kIHVzZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICAvL3dwcyBtZXRob2QuIERlZmF1bHQgaXMgdG8gdXNlIFBCQy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKChvd25lciA9IG1QZWVycy5nZXQob3duZXIuZGV2aWNlQWRkcmVzcykpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvd25lci53cHNQYmNTdXBwb3J0ZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcud3BzLnNldHVwID0gV3BzSW5mby5QQkM7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG93bmVyLndwc0tleXBhZFN1cHBvcnRlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy53cHMuc2V0dXAgPSBXcHNJbmZvLktFWVBBRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3duZXIud3BzRGlzcGxheVN1cHBvcnRlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy53cHMuc2V0dXAgPSBXcHNJbmZvLkRJU1BMQVk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBtQXV0b25vbW91c0dyb3VwID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1Kb2luRXhpc3RpbmdHcm91cCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVXNlckF1dGhvcml6aW5nSW52aXRlUmVxdWVzdFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX1BCQ19SRVFfRVZFTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX0VOVEVSX1BJTl9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfU0hPV19QSU5fRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIC8vV2UgbGV0IHRoZSBzdXBwbGljYW50IGhhbmRsZSB0aGUgcHJvdmlzaW9uIGRpc2NvdmVyeSByZXNwb25zZQorICAgICAgICAgICAgICAgICAgICAvL2FuZCB3YWl0IGluc3RlYWQgZm9yIHRoZSBHT19ORUdPVElBVElPTl9SRVFVRVNUX0VWRU5ULgorICAgICAgICAgICAgICAgICAgICAvL0hhbmRsaW5nIHByb3Zpc2lvbiBkaXNjb3ZlcnkgYW5kIGlzc3VpbmcgYSBwMnBfY29ubmVjdCBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgLy9ncm91cCBuZWdvdGlhdGlvbiBjb21lcyB0aHJvdWdoIGNhdXNlcyBpc3N1ZXMKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DUkVBVEVfR1JPVVA6CisgICAgICAgICAgICAgICAgICAgIG1BdXRvbm9tb3VzR3JvdXAgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpbnQgbmV0SWQgPSBtZXNzYWdlLmFyZzE7CisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmV0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXRJZCA9PSBXaWZpUDJwR3JvdXAuUEVSU0lTVEVOVF9ORVRfSUQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBnbyBwZXJzaXN0ZW50IGdyb3VwIGlzIHByZXNlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCA9IG1Hcm91cHMuZ2V0TmV0d29ya0lkKG1UaGlzRGV2aWNlLmRldmljZUFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ldElkICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gbVdpZmlOYXRpdmUucDJwR3JvdXBBZGQobmV0SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBtV2lmaU5hdGl2ZS5wMnBHcm91cEFkZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IG1XaWZpTmF0aXZlLnAycEdyb3VwQWRkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNSRUFURV9HUk9VUF9TVUNDRUVERUQpOworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Hcm91cE5lZ290aWF0aW9uU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ1JFQVRFX0dST1VQX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuRVJST1IpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtYWluIGF0IHRoaXMgc3RhdGUuCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfU1RBUlRFRF9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgbUdyb3VwID0gKFdpZmlQMnBHcm91cCkgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBncm91cCBzdGFydGVkIik7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGl0IHRoaXMgc2NlbmFyaW8gd2hlbiBhIHBlcnNpc3RlbnQgZ3JvdXAgaXMgcmVpbnZva2VkCisgICAgICAgICAgICAgICAgICAgIGlmIChtR3JvdXAuZ2V0TmV0d29ya0lkKCkgPT0gV2lmaVAycEdyb3VwLlBFUlNJU1RFTlRfTkVUX0lEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtQXV0b25vbW91c0dyb3VwID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUdyb3VwTmVnb3RpYXRpb25TdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJVbmV4cGVjdGVkIGdyb3VwIGNyZWF0aW9uLCByZW1vdmUgIiArIG1Hcm91cCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBHcm91cFJlbW92ZShtR3JvdXAuZ2V0SW50ZXJmYWNlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RBUlRfTElTVEVOOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgc3RhcnQgbGlzdGVuIG1vZGUiKTsKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwRmx1c2goKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnAycEV4dExpc3Rlbih0cnVlLCA1MDAsIDUwMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX0xJU1RFTl9TVUNDRUVERUQpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RBUlRfTElTVEVOX0ZBSUxFRCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVE9QX0xJU1RFTjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIHN0b3AgbGlzdGVuIG1vZGUiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnAycEV4dExpc3RlbihmYWxzZSwgMCwgMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUT1BfTElTVEVOX1NVQ0NFRURFRCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVE9QX0xJU1RFTl9GQUlMRUQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycEZsdXNoKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU0VUX0NIQU5ORUw6CisgICAgICAgICAgICAgICAgICAgIEJ1bmRsZSBwMnBDaGFubmVscyA9IChCdW5kbGUpIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICBpbnQgbGMgPSBwMnBDaGFubmVscy5nZXRJbnQoImxjIiwgMCk7CisgICAgICAgICAgICAgICAgICAgIGludCBvYyA9IHAycENoYW5uZWxzLmdldEludCgib2MiLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIHNldCBsaXN0ZW4gYW5kIG9wZXJhdGluZyBjaGFubmVsIik7CisgICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5wMnBTZXRDaGFubmVsKGxjLCBvYykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNFVF9DSEFOTkVMX1NVQ0NFRURFRCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TRVRfQ0hBTk5FTF9GQUlMRUQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgR3JvdXBDcmVhdGluZ1N0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7CisgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShHUk9VUF9DUkVBVElOR19USU1FRF9PVVQsCisgICAgICAgICAgICAgICAgICAgICsrbUdyb3VwQ3JlYXRpbmdUaW1lb3V0SW5kZXgsIDApLCBHUk9VUF9DUkVBVElOR19XQUlUX1RJTUVfTVMpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgYm9vbGVhbiByZXQgPSBIQU5ETEVEOworICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKKyAgICAgICAgICAgICAgIGNhc2UgR1JPVVBfQ1JFQVRJTkdfVElNRURfT1VUOgorICAgICAgICAgICAgICAgICAgICBpZiAobUdyb3VwQ3JlYXRpbmdUaW1lb3V0SW5kZXggPT0gbWVzc2FnZS5hcmcxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJHcm91cCBuZWdvdGlhdGlvbiB0aW1lZCBvdXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUdyb3VwQ3JlYXRpb25GYWlsdXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluYWN0aXZlU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0RFVklDRV9MT1NUX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBXaWZpUDJwRGV2aWNlIGRldmljZSA9IChXaWZpUDJwRGV2aWNlKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MuZXF1YWxzKGRldmljZS5kZXZpY2VBZGRyZXNzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2QoIm1TYXZlZFBlZXJDb25maWcgIiArIG1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXZpY2UgIiArIGRldmljZS5kZXZpY2VBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIHRoZSByZWd1bGFyIGRldmljZSBsb3N0IGhhbmRsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBOT1RfSEFORExFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiQWRkIGRldmljZSB0byBsb3N0IGxpc3QgIiArIGRldmljZSk7CisgICAgICAgICAgICAgICAgICAgIG1QZWVyc0xvc3REdXJpbmdDb25uZWN0aW9uLnVwZGF0ZVN1cHBsaWNhbnREZXRhaWxzKGRldmljZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfUEVFUlM6CisgICAgICAgICAgICAgICAgICAgIC8qIERpc2NvdmVyeSB3aWxsIGJyZWFrIG5lZ290aWF0aW9uICovCisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1BFRVJTX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DQU5DRUxfQ09OTkVDVDoKKyAgICAgICAgICAgICAgICAgICAgLy9EbyBhIHN1cHBsaWNhbnQgcDJwX2NhbmNlbCB3aGljaCBvbmx5IGNhbmNlbHMgYW4gb25nb2luZworICAgICAgICAgICAgICAgICAgICAvL2dyb3VwIG5lZ290aWF0aW9uLiBUaGlzIHdpbGwgZmFpbCBmb3IgYSBwZW5kaW5nIHByb3Zpc2lvbgorICAgICAgICAgICAgICAgICAgICAvL2Rpc2NvdmVyeSBvciBmb3IgYSBwZW5kaW5nIHVzZXIgYWN0aW9uLCBidXQgYXQgdGhlIGZyYW1ld29yaworICAgICAgICAgICAgICAgICAgICAvL2xldmVsLCB3ZSBhbHdheXMgdHJlYXQgY2FuY2VsIGFzIHN1Y2NlZWRlZCBhbmQgZW50ZXIKKyAgICAgICAgICAgICAgICAgICAgLy9hbiBpbmFjdGl2ZSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBDYW5jZWxDb25uZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUdyb3VwQ3JlYXRpb25GYWlsdXJlKCk7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5hY3RpdmVTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNBTkNFTF9DT05ORUNUX1NVQ0NFRURFRCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldCA9IE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIFVzZXJBdXRob3JpemluZ05lZ290aWF0aW9uUmVxdWVzdFN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7CisgICAgICAgICAgICBub3RpZnlJbnZpdGF0aW9uUmVjZWl2ZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGJvb2xlYW4gcmV0ID0gSEFORExFRDsKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBQRUVSX0NPTk5FQ1RJT05fVVNFUl9BQ0NFUFQ6CisgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycFN0b3BGaW5kKCk7CisgICAgICAgICAgICAgICAgICAgIHAycENvbm5lY3RXaXRoUGluRGlzcGxheShtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgbVBlZXJzLnVwZGF0ZVN0YXR1cyhtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MsIFdpZmlQMnBEZXZpY2UuSU5WSVRFRCk7CisgICAgICAgICAgICAgICAgICAgIHNlbmRQZWVyc0NoYW5nZWRCcm9hZGNhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Hcm91cE5lZ290aWF0aW9uU3RhdGUpOworICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUEVFUl9DT05ORUNUSU9OX1VTRVJfUkVKRUNUOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJVc2VyIHJlamVjdGVkIG5lZ290aWF0aW9uICIgKyBtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgeworICAgICAgICAgICAgLy9UT0RPOiBkaXNtaXNzIGRpYWxvZyBpZiBub3QgYWxyZWFkeSBkb25lCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBVc2VyQXV0aG9yaXppbmdJbnZpdGVSZXF1ZXN0U3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIG5vdGlmeUludml0YXRpb25SZWNlaXZlZCgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgYm9vbGVhbiByZXQgPSBIQU5ETEVEOworICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBFRVJfQ09OTkVDVElPTl9VU0VSX0FDQ0VQVDoKKyAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwU3RvcEZpbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWludm9rZVBlcnNpc3RlbnRHcm91cChtU2F2ZWRQZWVyQ29uZmlnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbmVnb3RpYXRpb24gd2hlbiBwZXJzaXN0ZW5jZSBmYWlscworICAgICAgICAgICAgICAgICAgICAgICAgcDJwQ29ubmVjdFdpdGhQaW5EaXNwbGF5KG1TYXZlZFBlZXJDb25maWcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1QZWVycy51cGRhdGVTdGF0dXMobVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzLCBXaWZpUDJwRGV2aWNlLklOVklURUQpOworICAgICAgICAgICAgICAgICAgICBzZW5kUGVlcnNDaGFuZ2VkQnJvYWRjYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtR3JvdXBOZWdvdGlhdGlvblN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFBFRVJfQ09OTkVDVElPTl9VU0VSX1JFSkVDVDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiVXNlciByZWplY3RlZCBpbnZpdGF0aW9uICIgKyBtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgeworICAgICAgICAgICAgLy9UT0RPOiBkaXNtaXNzIGRpYWxvZyBpZiBub3QgYWxyZWFkeSBkb25lCisgICAgICAgIH0KKyAgICB9CisKKworCisgICAgY2xhc3MgUHJvdmlzaW9uRGlzY292ZXJ5U3RhdGUgZXh0ZW5kcyBTdGF0ZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycFByb3Zpc2lvbkRpc2NvdmVyeShtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIFdpZmlQMnBQcm92RGlzY0V2ZW50IHByb3ZEaXNjOworICAgICAgICAgICAgV2lmaVAycERldmljZSBkZXZpY2U7CisgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19QQkNfUlNQX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBwcm92RGlzYyA9IChXaWZpUDJwUHJvdkRpc2NFdmVudCkgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGRldmljZSA9IHByb3ZEaXNjLmRldmljZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkZXZpY2UuZGV2aWNlQWRkcmVzcy5lcXVhbHMobVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzKSkgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1TYXZlZFBlZXJDb25maWcud3BzLnNldHVwID09IFdwc0luZm8uUEJDKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJGb3VuZCBhIG1hdGNoICIgKyBtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHAycENvbm5lY3RXaXRoUGluRGlzcGxheShtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtR3JvdXBOZWdvdGlhdGlvblN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfRU5URVJfUElOX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBwcm92RGlzYyA9IChXaWZpUDJwUHJvdkRpc2NFdmVudCkgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGRldmljZSA9IHByb3ZEaXNjLmRldmljZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkZXZpY2UuZGV2aWNlQWRkcmVzcy5lcXVhbHMobVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzKSkgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1TYXZlZFBlZXJDb25maWcud3BzLnNldHVwID09IFdwc0luZm8uS0VZUEFEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJGb3VuZCBhIG1hdGNoICIgKyBtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdlIGFscmVhZHkgaGF2ZSB0aGUgcGluICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KG1TYXZlZFBlZXJDb25maWcud3BzLnBpbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMnBDb25uZWN0V2l0aFBpbkRpc3BsYXkobVNhdmVkUGVlckNvbmZpZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Hcm91cE5lZ290aWF0aW9uU3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSm9pbkV4aXN0aW5nR3JvdXAgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVVzZXJBdXRob3JpemluZ05lZ290aWF0aW9uUmVxdWVzdFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfU0hPV19QSU5fRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIHByb3ZEaXNjID0gKFdpZmlQMnBQcm92RGlzY0V2ZW50KSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgZGV2aWNlID0gcHJvdkRpc2MuZGV2aWNlOworICAgICAgICAgICAgICAgICAgICBpZiAoIWRldmljZS5kZXZpY2VBZGRyZXNzLmVxdWFscyhtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MpKSBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBpZiAobVNhdmVkUGVlckNvbmZpZy53cHMuc2V0dXAgPT0gV3BzSW5mby5ESVNQTEFZKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJGb3VuZCBhIG1hdGNoICIgKyBtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcud3BzLnBpbiA9IHByb3ZEaXNjLnBpbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHAycENvbm5lY3RXaXRoUGluRGlzcGxheShtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUludml0YXRpb25TZW50KHByb3ZEaXNjLnBpbiwgZGV2aWNlLmRldmljZUFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Hcm91cE5lZ290aWF0aW9uU3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19GQUlMVVJFX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBsb2dlKCJwcm92aXNpb24gZGlzY292ZXJ5IGZhaWxlZCIpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVHcm91cENyZWF0aW9uRmFpbHVyZSgpOworICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluYWN0aXZlU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIEdyb3VwTmVnb3RpYXRpb25TdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhlc2UgcmlnaHQgbm93LCBzaW5jZSB3ZSBnZXQgYSBHUk9VUF9TVEFSVEVEIG5vdGlmaWNhdGlvbgorICAgICAgICAgICAgICAgIC8vIGFmdGVyd2FyZHMKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HT19ORUdPVElBVElPTl9TVUNDRVNTX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX0ZPUk1BVElPTl9TVUNDRVNTX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgZ28gc3VjY2VzcyIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9TVEFSVEVEX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBtR3JvdXAgPSAoV2lmaVAycEdyb3VwKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGdyb3VwIHN0YXJ0ZWQiKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAobUdyb3VwLmdldE5ldHdvcmtJZCgpID09IFdpZmlQMnBHcm91cC5QRVJTSVNURU5UX05FVF9JRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHVwZGF0ZSBjYWNoZSBpbmZvcm1hdGlvbiBhbmQgc2V0IG5ldHdvcmsgaWQgdG8gbUdyb3VwLgorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVQZXJzaXN0ZW50TmV0d29ya3MoTk9fUkVMT0FEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZXZBZGRyID0gbUdyb3VwLmdldE93bmVyKCkuZGV2aWNlQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Hcm91cC5zZXROZXR3b3JrSWQobUdyb3Vwcy5nZXROZXR3b3JrSWQoZGV2QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUdyb3VwLmdldE5ldHdvcmtOYW1lKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChtR3JvdXAuaXNHcm91cE93bmVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldHRpbmcgYW4gaWRsZSB0aW1lIG91dCBvbiBHTyBjYXVzZXMgaXNzdWVzIHdpdGggY2VydGFpbiBzY2VuYXJpb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIG9uIGNsaWVudHMgd2hlcmUgaXQgY2FuIGJlIG9mZi1jaGFubmVsIGZvciBsb25nZXIgYW5kIHdpdGggdGhlIHBvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBzYXZlIG1vZGVzIHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgICAgICogVE9ETzogVmVyaWZ5IG11bHRpLWNoYW5uZWwgc2NlbmFyaW9zIGFuZCBzdXBwbGljYW50IGJlaGF2aW9yIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICogYmV0dGVyIGJlZm9yZSBhZGRpbmcgYSB0aW1lIG91dCBpbiBmdXR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgLy9TZXQgZ3JvdXAgaWRsZSB0aW1lb3V0IG9mIDEwIHNlYywgdG8gYXZvaWQgR08gYmVhY29uaW5nIGluY2FzZSBvZiBhbnkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZmFpbHVyZSBkdXJpbmcgNC13YXkgSGFuZHNoYWtlLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtQXV0b25vbW91c0dyb3VwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0UDJwR3JvdXBJZGxlKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSwgR1JPVVBfSURMRV9USU1FX1MpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnREaGNwU2VydmVyKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRQMnBHcm91cElkbGUobUdyb3VwLmdldEludGVyZmFjZSgpLCBHUk9VUF9JRExFX1RJTUVfUyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtRGhjcFN0YXRlTWFjaGluZSA9IERoY3BTdGF0ZU1hY2hpbmUubWFrZURoY3BTdGF0ZU1hY2hpbmUobUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAycFN0YXRlTWFjaGluZS50aGlzLCBtR3JvdXAuZ2V0SW50ZXJmYWNlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIHVzZSBESENQIHN0YXRlIG1hY2hpbmUgUFJFIG1lc3NhZ2UgbGlrZSBXaWZpU3RhdGVNYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRQMnBQb3dlclNhdmUobUdyb3VwLmdldEludGVyZmFjZSgpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtRGhjcFN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShEaGNwU3RhdGVNYWNoaW5lLkNNRF9TVEFSVF9ESENQKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBEZXZpY2UgZ3JvdXBPd25lciA9IG1Hcm91cC5nZXRPd25lcigpOworICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycERldmljZSBwZWVyID0gbVBlZXJzLmdldChncm91cE93bmVyLmRldmljZUFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBncm91cCBvd25lciBkZXRhaWxzIHdpdGggcGVlciBkZXRhaWxzIGZvdW5kIGF0IGRpc2NvdmVyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwT3duZXIudXBkYXRlU3VwcGxpY2FudERldGFpbHMocGVlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBlZXJzLnVwZGF0ZVN0YXR1cyhncm91cE93bmVyLmRldmljZUFkZHJlc3MsIFdpZmlQMnBEZXZpY2UuQ09OTkVDVEVEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kUGVlcnNDaGFuZ2VkQnJvYWRjYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgc3VwcGxpY2FudCBidWcgY2FuIGxlYWQgdG8gcmVwb3J0aW5nIGFuIGludmFsaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBncm91cCBvd25lciBhZGRyZXNzIChhbGwgemVyb2VzKSBhdCB0aW1lcy4gQXZvaWQgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNyYXNoLCBidXQgY29udGludWUgZ3JvdXAgY3JlYXRpb24gc2luY2UgaXQgaXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNzZW50aWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ3coIlVua25vd24gZ3JvdXAgb3duZXIgIiArIGdyb3VwT3duZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtR3JvdXBDcmVhdGVkU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HT19ORUdPVElBVElPTl9GQUlMVVJFX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBQMnBTdGF0dXMgc3RhdHVzID0gKFAycFN0YXR1cykgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gUDJwU3RhdHVzLk5PX0NPTU1PTl9DSEFOTkVMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUZyZXF1ZW5jeUNvbmZsaWN0U3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLyogY29udGludWUgd2l0aCBncm91cCByZW1vdmFsIGhhbmRsaW5nICovCisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfUkVNT1ZFRF9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGdvIGZhaWx1cmUiKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlR3JvdXBDcmVhdGlvbkZhaWx1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gQSBncm91cCBmb3JtYXRpb24gZmFpbHVyZSBpcyBhbHdheXMgZm9sbG93ZWQgYnkKKyAgICAgICAgICAgICAgICAvLyBhIGdyb3VwIHJlbW92ZWQgZXZlbnQuIEZsdXNoaW5nIHRoaW5ncyBhdCBncm91cCBmb3JtYXRpb24KKyAgICAgICAgICAgICAgICAvLyBmYWlsdXJlIGNhdXNlcyBzdXBwbGljYW50IGlzc3Vlcy4gSWdub3JlIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9GT1JNQVRJT05fRkFJTFVSRV9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gKFAycFN0YXR1cykgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gUDJwU3RhdHVzLk5PX0NPTU1PTl9DSEFOTkVMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUZyZXF1ZW5jeUNvbmZsaWN0U3RhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfSU5WSVRBVElPTl9SRVNVTFRfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IChQMnBTdGF0dXMpbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gUDJwU3RhdHVzLlNVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludm9jYXRpb24gd2FzIHN1Y2NlZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgUDJQX0dST1VQX1NUQVJURURfRVZFTlQuCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsb2dlKCJJbnZpdGF0aW9uIHJlc3VsdCAiICsgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBQMnBTdGF0dXMuVU5LTk9XTl9QMlBfR1JPVVApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRhcmdldCBkZXZpY2UgaGFzIGFscmVhZHkgcmVtb3ZlZCB0aGUgY3JlZGVudGlhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvLCByZW1vdmUgdGhpcyBjcmVkZW50aWFsIGFjY29yZGluZ2x5LgorICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5ldElkID0gbVNhdmVkUGVlckNvbmZpZy5uZXRJZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXRJZCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiUmVtb3ZlIHVua25vd24gY2xpZW50IGZyb20gdGhlIGxpc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGllbnRGcm9tTGlzdChuZXRJZCwgbVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVpbnZvY2F0aW9uIGhhcyBmYWlsZWQsIHRyeSBncm91cCBuZWdvdGlhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy5uZXRJZCA9IFdpZmlQMnBHcm91cC5QRVJTSVNURU5UX05FVF9JRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHAycENvbm5lY3RXaXRoUGluRGlzcGxheShtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT0gUDJwU3RhdHVzLklORk9STUFUSU9OX0lTX0NVUlJFTlRMWV9VTkFWQUlMQUJMRSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXZpY2VzIHNldHRpbmcgcGVyc2lzdGVudF9yZWNvbm5lY3QgdG8gMCBpbiB3cGFfc3VwcGxpY2FudAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWx3YXlzIGRlZmVyIHRoZSBpbnZvY2F0aW9uIHJlcXVlc3QgYW5kIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gImluZm9ybWF0aW9uIGlzIGN1cnJlbnRseSB1bmFibGUiIGVycm9yLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gU28sIHRyeSBhbm90aGVyIHdheSB0byBjb25uZWN0IGZvciBpbnRlcm9wZXJhYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy5uZXRJZCA9IFdpZmlQMnBHcm91cC5QRVJTSVNURU5UX05FVF9JRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHAycENvbm5lY3RXaXRoUGluRGlzcGxheShtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT0gUDJwU3RhdHVzLk5PX0NPTU1PTl9DSEFOTkVMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUZyZXF1ZW5jeUNvbmZsaWN0U3RhdGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlR3JvdXBDcmVhdGlvbkZhaWx1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5hY3RpdmVTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBGcmVxdWVuY3lDb25mbGljdFN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBwcml2YXRlIEFsZXJ0RGlhbG9nIG1GcmVxdWVuY3lDb25mbGljdERpYWxvZzsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOworICAgICAgICAgICAgbm90aWZ5RnJlcXVlbmN5Q29uZmxpY3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBub3RpZnlGcmVxdWVuY3lDb25mbGljdCgpIHsKKyAgICAgICAgICAgIGxvZ2QoIk5vdGlmeSBmcmVxdWVuY3kgY29uZmxpY3QiKTsKKyAgICAgICAgICAgIFJlc291cmNlcyByID0gUmVzb3VyY2VzLmdldFN5c3RlbSgpOworCisgICAgICAgICAgICBBbGVydERpYWxvZyBkaWFsb2cgPSBuZXcgQWxlcnREaWFsb2cuQnVpbGRlcihtQ29udGV4dCkKKyAgICAgICAgICAgICAgICAuc2V0TWVzc2FnZShyLmdldFN0cmluZyhSLnN0cmluZy53aWZpX3AycF9mcmVxdWVuY3lfY29uZmxpY3RfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldERldmljZU5hbWUobVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzKSkpCisgICAgICAgICAgICAgICAgLnNldFBvc2l0aXZlQnV0dG9uKHIuZ2V0U3RyaW5nKFIuc3RyaW5nLmRsZ19vayksIG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRGlhbG9nSW50ZXJmYWNlIGRpYWxvZywgaW50IHdoaWNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoRFJPUF9XSUZJX1VTRVJfQUNDRVBUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAuc2V0TmVnYXRpdmVCdXR0b24oci5nZXRTdHJpbmcoUi5zdHJpbmcuZGVjbGluZSksIG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRGlhbG9nSW50ZXJmYWNlIGRpYWxvZywgaW50IHdoaWNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoRFJPUF9XSUZJX1VTRVJfUkVKRUNUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAuc2V0T25DYW5jZWxMaXN0ZW5lcihuZXcgRGlhbG9nSW50ZXJmYWNlLk9uQ2FuY2VsTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2FuY2VsKERpYWxvZ0ludGVyZmFjZSBhcmcwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoRFJPUF9XSUZJX1VTRVJfUkVKRUNUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisKKyAgICAgICAgICAgIGRpYWxvZy5nZXRXaW5kb3coKS5zZXRUeXBlKFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfU1lTVEVNX0FMRVJUKTsKKyAgICAgICAgICAgIGRpYWxvZy5zaG93KCk7CisgICAgICAgICAgICBtRnJlcXVlbmN5Q29uZmxpY3REaWFsb2cgPSBkaWFsb2c7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dPX05FR09USUFUSU9OX1NVQ0NFU1NfRVZFTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfRk9STUFUSU9OX1NVQ0NFU1NfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIGxvZ2UoZ2V0TmFtZSgpICsgImdyb3VwIHN1Y2VzcyBkdXJpbmcgZnJlcSBjb25mbGljdCEiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfU1RBUlRFRF9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZShnZXROYW1lKCkgKyAiZ3JvdXAgc3RhcnRlZCBhZnRlciBmcmVxIGNvbmZsaWN0LCBoYW5kbGUgYW55d2F5Iik7CisgICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Hcm91cE5lZ290aWF0aW9uU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HT19ORUdPVElBVElPTl9GQUlMVVJFX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX1JFTU9WRURfRVZFTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfRk9STUFUSU9OX0ZBSUxVUkVfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBmYWlsdXJlcyBzaW5jZSB3ZSByZXRyeSBhZ2FpbgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIERST1BfV0lGSV9VU0VSX1JFSkVDVDoKKyAgICAgICAgICAgICAgICAgICAgLy8gVXNlciByZWplY3RlZCBkcm9wcGluZyB3aWZpIGluIGZhdm91ciBvZiBwMnAKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlR3JvdXBDcmVhdGlvbkZhaWx1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBEUk9QX1dJRklfVVNFUl9BQ0NFUFQ6CisgICAgICAgICAgICAgICAgICAgIC8vIFVzZXIgYWNjZXB0ZWQgZHJvcHBpbmcgd2lmaSBpbiBmYXZvdXIgb2YgcDJwCisgICAgICAgICAgICAgICAgICAgIG1XaWZpQ2hhbm5lbC5zZW5kTWVzc2FnZShXaWZpUDJwU2VydmljZS5ESVNDT05ORUNUX1dJRklfUkVRVUVTVCwgMSk7CisgICAgICAgICAgICAgICAgICAgIG1UZW1wb2FyaWx5RGlzY29ubmVjdGVkV2lmaSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRElTQ09OTkVDVF9XSUZJX1JFU1BPTlNFOgorICAgICAgICAgICAgICAgICAgICAvLyBHb3QgYSByZXNwb25zZSBmcm9tIHdpZmlzdGF0ZW1hY2hpbmUsIHJldHJ5IHAycAorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICJXaWZpIGRpc2Nvbm5lY3RlZCwgcmV0cnkgcDJwIik7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5hY3RpdmVTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKFdpZmlQMnBNYW5hZ2VyLkNPTk5FQ1QsIG1TYXZlZFBlZXJDb25maWcpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7CisgICAgICAgICAgICBpZiAobUZyZXF1ZW5jeUNvbmZsaWN0RGlhbG9nICE9IG51bGwpIG1GcmVxdWVuY3lDb25mbGljdERpYWxvZy5kaXNtaXNzKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBHcm91cENyZWF0ZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOworICAgICAgICAgICAgLy8gT25jZSBjb25uZWN0ZWQsIHBlZXIgY29uZmlnIGRldGFpbHMgYXJlIGludmFsaWQKKyAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcuaW52YWxpZGF0ZSgpOworICAgICAgICAgICAgbU5ldHdvcmtJbmZvLnNldERldGFpbGVkU3RhdGUoTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZS5DT05ORUNURUQsIG51bGwsIG51bGwpOworCisgICAgICAgICAgICB1cGRhdGVUaGlzRGV2aWNlKFdpZmlQMnBEZXZpY2UuQ09OTkVDVEVEKTsKKworICAgICAgICAgICAgLy9ESENQIHNlcnZlciBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQgaWYgSSBhbSBhIGdyb3VwIG93bmVyCisgICAgICAgICAgICBpZiAobUdyb3VwLmlzR3JvdXBPd25lcigpKSB7CisgICAgICAgICAgICAgICAgc2V0V2lmaVAycEluZm9Pbkdyb3VwRm9ybWF0aW9uKE5ldHdvcmtVdGlscy5udW1lcmljVG9JbmV0QWRkcmVzcyhTRVJWRVJfQUREUkVTUykpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGEgbmVnb3RpYXRpb24gZ3JvdXAsIGNvbm5lY3Rpb24gY2hhbmdlZCBpcyBzZW50CisgICAgICAgICAgICAvLyBhZnRlciBhIGNsaWVudCBqb2lucy4gRm9yIGF1dG9ub21vdXMsIHNlbmQgbm93CisgICAgICAgICAgICBpZiAobUF1dG9ub21vdXNHcm91cCkgeworICAgICAgICAgICAgICAgIHNlbmRQMnBDb25uZWN0aW9uQ2hhbmdlZEJyb2FkY2FzdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLkFQX1NUQV9DT05ORUNURURfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBEZXZpY2UgZGV2aWNlID0gKFdpZmlQMnBEZXZpY2UpIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGV2aWNlQWRkcmVzcyA9IGRldmljZS5kZXZpY2VBZGRyZXNzOworICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciB0aW1lb3V0IHRoYXQgd2FzIHNldCB3aGVuIGdyb3VwIHdhcyBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRQMnBHcm91cElkbGUobUdyb3VwLmdldEludGVyZmFjZSgpLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRldmljZUFkZHJlc3MgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1QZWVycy5nZXQoZGV2aWNlQWRkcmVzcykgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Hcm91cC5hZGRDbGllbnQobVBlZXJzLmdldChkZXZpY2VBZGRyZXNzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Hcm91cC5hZGRDbGllbnQoZGV2aWNlQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtUGVlcnMudXBkYXRlU3RhdHVzKGRldmljZUFkZHJlc3MsIFdpZmlQMnBEZXZpY2UuQ09OTkVDVEVEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBhcCBzdGEgY29ubmVjdGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kUGVlcnNDaGFuZ2VkQnJvYWRjYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJDb25uZWN0IG9uIG51bGwgZGV2aWNlIGFkZHJlc3MsIGlnbm9yZSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHNlbmRQMnBDb25uZWN0aW9uQ2hhbmdlZEJyb2FkY2FzdCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLkFQX1NUQV9ESVNDT05ORUNURURfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIGRldmljZSA9IChXaWZpUDJwRGV2aWNlKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgZGV2aWNlQWRkcmVzcyA9IGRldmljZS5kZXZpY2VBZGRyZXNzOworICAgICAgICAgICAgICAgICAgICBpZiAoZGV2aWNlQWRkcmVzcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtUGVlcnMudXBkYXRlU3RhdHVzKGRldmljZUFkZHJlc3MsIFdpZmlQMnBEZXZpY2UuQVZBSUxBQkxFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtR3JvdXAucmVtb3ZlQ2xpZW50KGRldmljZUFkZHJlc3MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiUmVtb3ZlZCBjbGllbnQgIiArIGRldmljZUFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbUF1dG9ub21vdXNHcm91cCAmJiBtR3JvdXAuaXNDbGllbnRMaXN0RW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dkKCJDbGllbnQgbGlzdCBlbXB0eSwgcmVtb3ZlIG5vbi1wZXJzaXN0ZW50IHAycCBncm91cCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBHcm91cFJlbW92ZShtR3JvdXAuZ2V0SW50ZXJmYWNlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBlbmQgdXAgc2VuZGluZyBjb25uZWN0aW9uIGNoYW5nZWQgYnJvYWRjYXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhpcyBoYXBwZW5zIGF0IGV4aXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGlmeSB3aGVuIGEgY2xpZW50IGRpc2Nvbm5lY3RzIGZyb20gZ3JvdXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFAycENvbm5lY3Rpb25DaGFuZ2VkQnJvYWRjYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJGYWlsZWQgdG8gcmVtb3ZlIGNsaWVudCAiICsgZGV2aWNlQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChXaWZpUDJwRGV2aWNlIGMgOiBtR3JvdXAuZ2V0Q2xpZW50TGlzdCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoImNsaWVudCAiICsgYy5kZXZpY2VBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kUGVlcnNDaGFuZ2VkQnJvYWRjYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgYXAgc3RhIGRpc2Nvbm5lY3RlZCIpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRGlzY29ubmVjdCBvbiB1bmtub3duIGRldmljZTogIiArIGRldmljZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBEaGNwU3RhdGVNYWNoaW5lLkNNRF9QT1NUX0RIQ1BfQUNUSU9OOgorICAgICAgICAgICAgICAgICAgICBEaGNwUmVzdWx0cyBkaGNwUmVzdWx0cyA9IChEaGNwUmVzdWx0cykgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gRGhjcFN0YXRlTWFjaGluZS5ESENQX1NVQ0NFU1MgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaGNwUmVzdWx0cyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJEaGNwUmVzdWx0czogIiArIGRoY3BSZXN1bHRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFdpZmlQMnBJbmZvT25Hcm91cEZvcm1hdGlvbihkaGNwUmVzdWx0cy5zZXJ2ZXJBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRQMnBDb25uZWN0aW9uQ2hhbmdlZEJyb2FkY2FzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgLy9UdXJuIG9uIHBvd2VyIHNhdmUgb24gY2xpZW50CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRQMnBQb3dlclNhdmUobUdyb3VwLmdldEludGVyZmFjZSgpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkRIQ1AgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBHcm91cFJlbW92ZShtR3JvdXAuZ2V0SW50ZXJmYWNlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0dST1VQOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgcmVtb3ZlIGdyb3VwIik7CisgICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5wMnBHcm91cFJlbW92ZShtR3JvdXAuZ2V0SW50ZXJmYWNlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU9uZ29pbmdHcm91cFJlbW92YWxTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5SRU1PVkVfR1JPVVBfU1VDQ0VFREVEKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUdyb3VwUmVtb3ZlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9HUk9VUF9GQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkVSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvKiBXZSBkbyBub3QgbGlzdGVuIHRvIE5FVFdPUktfRElTQ09OTkVDVElPTl9FVkVOVCBmb3IgZ3JvdXAgcmVtb3ZhbAorICAgICAgICAgICAgICAgICAqIGhhbmRsaW5nIHNpbmNlIHN1cHBsaWNhbnQgYWN0dWFsbHkgdHJpZXMgdG8gcmVjb25uZWN0IGFmdGVyIGEgdGVtcG9yYXJ5CisgICAgICAgICAgICAgICAgICogZGlzY29ubmVjdCB1bnRpbCBncm91cCBpZGxlIHRpbWUgb3V0LiBFdmVudHVhbGx5LCBhIGdyb3VwIHJlbW92YWwgZXZlbnQKKyAgICAgICAgICAgICAgICAgKiB3aWxsIGNvbWUgd2hlbiBncm91cCBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICogV2hlbiB0aGVyZSBhcmUgY29ubmVjdGl2aXR5IGlzc3VlcyBkdXJpbmcgdGVtcG9yYXJ5IGRpc2Nvbm5lY3QsIHRoZSBhcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgICAqIHdpbGwgYWxzbyBqdXN0IHJlbW92ZSB0aGUgZ3JvdXAuCisgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgKiBUcmVhdGluZyBuZXR3b3JrIGRpc2Nvbm5lY3Rpb24gYXMgZ3JvdXAgcmVtb3ZhbCBjYXVzZXMgcmFjZSBjb25kaXRpb25zIHNpbmNlCisgICAgICAgICAgICAgICAgICogc3VwcGxpY2FudCB3b3VsZCBzdGlsbCBtYWludGFpbiB0aGUgZ3JvdXAgYXQgdGhhdCBzdGFnZS4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9SRU1PVkVEX0VWRU5UOgorICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgZ3JvdXAgcmVtb3ZlZCIpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVHcm91cFJlbW92ZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfREVWSUNFX0xPU1RfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIGRldmljZSA9IChXaWZpUDJwRGV2aWNlKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgLy9EZXZpY2UgbG9zcyBmb3IgYSBjb25uZWN0ZWQgZGV2aWNlIGluZGljYXRlcyBpdCBpcyBub3QgaW4gZGlzY292ZXJ5IGFueSBtb3JlCisgICAgICAgICAgICAgICAgICAgIGlmIChtR3JvdXAuY29udGFpbnMoZGV2aWNlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiQWRkIGRldmljZSB0byBsb3N0IGxpc3QgIiArIGRldmljZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtUGVlcnNMb3N0RHVyaW5nQ29ubmVjdGlvbi51cGRhdGVTdXBwbGljYW50RGV0YWlscyhkZXZpY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gRG8gdGhlIHJlZ3VsYXIgZGV2aWNlIGxvc3QgaGFuZGxpbmcKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfRElTQUJMRV9QMlBfUkVROgorICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShXaWZpUDJwTWFuYWdlci5SRU1PVkVfR1JPVVApOworICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBhbnkgY2xpZW50IHRvIGpvaW4gdGhlIEdPIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gV1BTIHdpbmRvdworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RBUlRfV1BTOgorICAgICAgICAgICAgICAgICAgICBXcHNJbmZvIHdwcyA9IChXcHNJbmZvKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdwcyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVEFSVF9XUFNfRkFJTEVEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmV0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdwcy5zZXR1cCA9PSBXcHNJbmZvLlBCQykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gbVdpZmlOYXRpdmUuc3RhcnRXcHNQYmMobUdyb3VwLmdldEludGVyZmFjZSgpLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cHMucGluID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGluID0gbVdpZmlOYXRpdmUuc3RhcnRXcHNQaW5EaXNwbGF5KG1Hcm91cC5nZXRJbnRlcmZhY2UoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci5wYXJzZUludChwaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlJbnZpdGF0aW9uU2VudChwaW4sICJhbnkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gaWdub3JlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gbVdpZmlOYXRpdmUuc3RhcnRXcHNQaW5LZXlwYWQobUdyb3VwLmdldEludGVyZmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3BzLnBpbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgcmV0ID8gV2lmaVAycE1hbmFnZXIuU1RBUlRfV1BTX1NVQ0NFRURFRCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuU1RBUlRfV1BTX0ZBSUxFRCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ09OTkVDVDoKKyAgICAgICAgICAgICAgICAgICAgV2lmaVAycENvbmZpZyBjb25maWcgPSAoV2lmaVAycENvbmZpZykgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbmZpZ0ludmFsaWQoY29uZmlnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRHJvcHBpbmcgY29ubmVjdCByZXF1ZXNldCAiICsgY29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNPTk5FQ1RfRkFJTEVEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxvZ2QoIkludml0aW5nIGRldmljZSA6ICIgKyBjb25maWcuZGV2aWNlQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcgPSBjb25maWc7CisgICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5wMnBJbnZpdGUobUdyb3VwLCBjb25maWcuZGV2aWNlQWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1QZWVycy51cGRhdGVTdGF0dXMoY29uZmlnLmRldmljZUFkZHJlc3MsIFdpZmlQMnBEZXZpY2UuSU5WSVRFRCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kUGVlcnNDaGFuZ2VkQnJvYWRjYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DT05ORUNUX1NVQ0NFRURFRCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DT05ORUNUX0ZBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuRVJST1IpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgdXBkYXRpbmcgdGhlIHN0YXR1cyB0byBkZWNsaW5lZCB3aGVuIGludml0YXRpb24gaXMgcmVqZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfSU5WSVRBVElPTl9SRVNVTFRfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIFAycFN0YXR1cyBzdGF0dXMgPSAoUDJwU3RhdHVzKW1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IFAycFN0YXR1cy5TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnZvY2F0aW9uIHdhcyBzdWNjZWVkZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsb2dlKCJJbnZpdGF0aW9uIHJlc3VsdCAiICsgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBQMnBTdGF0dXMuVU5LTk9XTl9QMlBfR1JPVVApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRhcmdldCBkZXZpY2UgaGFzIGFscmVhZHkgcmVtb3ZlZCB0aGUgY3JlZGVudGlhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvLCByZW1vdmUgdGhpcyBjcmVkZW50aWFsIGFjY29yZGluZ2x5LgorICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5ldElkID0gbUdyb3VwLmdldE5ldHdvcmtJZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ldElkID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJSZW1vdmUgdW5rbm93biBjbGllbnQgZnJvbSB0aGUgbGlzdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVtb3ZlQ2xpZW50RnJvbUxpc3QobmV0SWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MsIGZhbHNlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgZm91bmQgdGhlIGNsaWVudCBvbiB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJBbHJlYWR5IHJlbW92ZWQgdGhlIGNsaWVudCwgaWdub3JlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnkgaW52aXRhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShXaWZpUDJwTWFuYWdlci5DT05ORUNULCBtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfUEJDX1JFUV9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfRU5URVJfUElOX0VWRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19TSE9XX1BJTl9FVkVOVDoKKyAgICAgICAgICAgICAgICAgICAgV2lmaVAycFByb3ZEaXNjRXZlbnQgcHJvdkRpc2MgPSAoV2lmaVAycFByb3ZEaXNjRXZlbnQpIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnID0gbmV3IFdpZmlQMnBDb25maWcoKTsKKyAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzID0gcHJvdkRpc2MuZGV2aWNlLmRldmljZUFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLndoYXQgPT0gV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19FTlRFUl9QSU5fRVZFTlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcud3BzLnNldHVwID0gV3BzSW5mby5LRVlQQUQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS53aGF0ID09IFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfU0hPV19QSU5fRVZFTlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcud3BzLnNldHVwID0gV3BzSW5mby5ESVNQTEFZOworICAgICAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy53cHMucGluID0gcHJvdkRpc2MucGluOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy53cHMuc2V0dXAgPSBXcHNJbmZvLlBCQzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVVzZXJBdXRob3JpemluZ0pvaW5TdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX1NUQVJURURfRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkR1cGxpY2F0ZSBncm91cCBjcmVhdGlvbiBldmVudCBub3RpY2UsIGlnbm9yZSIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7CisgICAgICAgICAgICB1cGRhdGVUaGlzRGV2aWNlKFdpZmlQMnBEZXZpY2UuQVZBSUxBQkxFKTsKKyAgICAgICAgICAgIHJlc2V0V2lmaVAycEluZm8oKTsKKyAgICAgICAgICAgIG1OZXR3b3JrSW5mby5zZXREZXRhaWxlZFN0YXRlKE5ldHdvcmtJbmZvLkRldGFpbGVkU3RhdGUuRElTQ09OTkVDVEVELCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgIHNlbmRQMnBDb25uZWN0aW9uQ2hhbmdlZEJyb2FkY2FzdCgpOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgVXNlckF1dGhvcml6aW5nSm9pblN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7CisgICAgICAgICAgICBub3RpZnlJbnZpdGF0aW9uUmVjZWl2ZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX1BCQ19SRVFfRVZFTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX0VOVEVSX1BJTl9FVkVOVDoKKyAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfU0hPV19QSU5fRVZFTlQ6CisgICAgICAgICAgICAgICAgICAgIC8vSWdub3JlIG1vcmUgY2xpZW50IHJlcXVlc3RzCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUEVFUl9DT05ORUNUSU9OX1VTRVJfQUNDRVBUOgorICAgICAgICAgICAgICAgICAgICAvL1N0b3AgZGlzY292ZXJ5IHRvIGF2b2lkIGZhaWx1cmUgZHVlIHRvIGNoYW5uZWwgc3dpdGNoCisgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycFN0b3BGaW5kKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtU2F2ZWRQZWVyQ29uZmlnLndwcy5zZXR1cCA9PSBXcHNJbmZvLlBCQykgeworICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhcnRXcHNQYmMobUdyb3VwLmdldEludGVyZmFjZSgpLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnN0YXJ0V3BzUGluS2V5cGFkKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy53cHMucGluKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUdyb3VwQ3JlYXRlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBQRUVSX0NPTk5FQ1RJT05fVVNFUl9SRUpFQ1Q6CisgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlVzZXIgcmVqZWN0ZWQgaW5jb21pbmcgcmVxdWVzdCIpOworICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUdyb3VwQ3JlYXRlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZXhpdCgpIHsKKyAgICAgICAgICAgIC8vVE9ETzogZGlzbWlzcyBkaWFsb2cgaWYgbm90IGFscmVhZHkgZG9uZQorICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgT25nb2luZ0dyb3VwUmVtb3ZhbFN0YXRlIGV4dGVuZHMgU3RhdGUgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7CisgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgeworICAgICAgICAgICAgICAgIC8vIEdyb3VwIHJlbW92YWwgb25nb2luZy4gTXVsdGlwbGUgY2FsbHMKKyAgICAgICAgICAgICAgICAvLyBlbmQgdXAgcmVtb3ZpbmcgcGVyc2lzdGVkIG5ldHdvcmsuIERvIG5vdGhpbmcuCisgICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRU1PVkVfR1JPVVA6CisgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9HUk9VUF9TVUNDRUVERUQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvLyBQYXJlbnQgc3RhdGUgd2lsbCB0cmFuc2l0aW9uIG91dCBvZiB0aGlzIHN0YXRlCisgICAgICAgICAgICAgICAgLy8gd2hlbiByZW1vdmFsIGlzIGNvbXBsZXRlCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBkdW1wKEZpbGVEZXNjcmlwdG9yIGZkLCBQcmludFdyaXRlciBwdywgU3RyaW5nW10gYXJncykgeworICAgICAgICBzdXBlci5kdW1wKGZkLCBwdywgYXJncyk7CisgICAgICAgIHB3LnByaW50bG4oIm1XaWZpUDJwSW5mbyAiICsgbVdpZmlQMnBJbmZvKTsKKyAgICAgICAgcHcucHJpbnRsbigibUdyb3VwICIgKyBtR3JvdXApOworICAgICAgICBwdy5wcmludGxuKCJtU2F2ZWRQZWVyQ29uZmlnICIgKyBtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgcHcucHJpbnRsbigibVNhdmVkUDJwR3JvdXAgIiArIG1TYXZlZFAycEdyb3VwKTsKKyAgICAgICAgcHcucHJpbnRsbigpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZW5kUDJwU3RhdGVDaGFuZ2VkQnJvYWRjYXN0KGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpUDJwTWFuYWdlci5XSUZJX1AyUF9TVEFURV9DSEFOR0VEX0FDVElPTik7CisgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOworICAgICAgICBpZiAoZW5hYmxlZCkgeworICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlQMnBNYW5hZ2VyLkVYVFJBX1dJRklfU1RBVEUsCisgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLldJRklfUDJQX1NUQVRFX0VOQUJMRUQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlQMnBNYW5hZ2VyLkVYVFJBX1dJRklfU1RBVEUsCisgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLldJRklfUDJQX1NUQVRFX0RJU0FCTEVEKTsKKyAgICAgICAgfQorICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZW5kUDJwRGlzY292ZXJ5Q2hhbmdlZEJyb2FkY2FzdChib29sZWFuIHN0YXJ0ZWQpIHsKKyAgICAgICAgaWYgKG1EaXNjb3ZlcnlTdGFydGVkID09IHN0YXJ0ZWQpIHJldHVybjsKKyAgICAgICAgbURpc2NvdmVyeVN0YXJ0ZWQgPSBzdGFydGVkOworCisgICAgICAgIGlmIChEQkcpIGxvZ2QoImRpc2NvdmVyeSBjaGFuZ2UgYnJvYWRjYXN0ICIgKyBzdGFydGVkKTsKKworICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpUDJwTWFuYWdlci5XSUZJX1AyUF9ESVNDT1ZFUllfQ0hBTkdFRF9BQ1RJT04pOworICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlQMnBNYW5hZ2VyLkVYVFJBX0RJU0NPVkVSWV9TVEFURSwgc3RhcnRlZCA/CisgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuV0lGSV9QMlBfRElTQ09WRVJZX1NUQVJURUQgOgorICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLldJRklfUDJQX0RJU0NPVkVSWV9TVE9QUEVEKTsKKyAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2VuZFRoaXNEZXZpY2VDaGFuZ2VkQnJvYWRjYXN0KCkgeworICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpUDJwTWFuYWdlci5XSUZJX1AyUF9USElTX0RFVklDRV9DSEFOR0VEX0FDVElPTik7CisgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaVAycE1hbmFnZXIuRVhUUkFfV0lGSV9QMlBfREVWSUNFLCBuZXcgV2lmaVAycERldmljZShtVGhpc0RldmljZSkpOworICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZW5kUGVlcnNDaGFuZ2VkQnJvYWRjYXN0KCkgeworICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpUDJwTWFuYWdlci5XSUZJX1AyUF9QRUVSU19DSEFOR0VEX0FDVElPTik7CisgICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpUDJwTWFuYWdlci5FWFRSQV9QMlBfREVWSUNFX0xJU1QsIG5ldyBXaWZpUDJwRGV2aWNlTGlzdChtUGVlcnMpKTsKKyAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7CisgICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNlbmRQMnBDb25uZWN0aW9uQ2hhbmdlZEJyb2FkY2FzdCgpIHsKKyAgICAgICAgaWYgKERCRykgbG9nZCgic2VuZGluZyBwMnAgY29ubmVjdGlvbiBjaGFuZ2VkIGJyb2FkY2FzdCIpOworICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpUDJwTWFuYWdlci5XSUZJX1AyUF9DT05ORUNUSU9OX0NIQU5HRURfQUNUSU9OKTsKKyAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVAorICAgICAgICAgICAgICAgIHwgSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVQTEFDRV9QRU5ESU5HKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlQMnBNYW5hZ2VyLkVYVFJBX1dJRklfUDJQX0lORk8sIG5ldyBXaWZpUDJwSW5mbyhtV2lmaVAycEluZm8pKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlQMnBNYW5hZ2VyLkVYVFJBX05FVFdPUktfSU5GTywgbmV3IE5ldHdvcmtJbmZvKG1OZXR3b3JrSW5mbykpOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaVAycE1hbmFnZXIuRVhUUkFfV0lGSV9QMlBfR1JPVVAsIG5ldyBXaWZpUDJwR3JvdXAobUdyb3VwKSk7CisgICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7CisgICAgICAgIG1XaWZpQ2hhbm5lbC5zZW5kTWVzc2FnZShXaWZpUDJwU2VydmljZS5QMlBfQ09OTkVDVElPTl9DSEFOR0VELAorICAgICAgICAgICAgICAgIG5ldyBOZXR3b3JrSW5mbyhtTmV0d29ya0luZm8pKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2VuZFAycFBlcnNpc3RlbnRHcm91cHNDaGFuZ2VkQnJvYWRjYXN0KCkgeworICAgICAgICBpZiAoREJHKSBsb2dkKCJzZW5kaW5nIHAycCBwZXJzaXN0ZW50IGdyb3VwcyBjaGFuZ2VkIGJyb2FkY2FzdCIpOworICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpUDJwTWFuYWdlci5XSUZJX1AyUF9QRVJTSVNURU5UX0dST1VQU19DSEFOR0VEX0FDVElPTik7CisgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOworICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzdGFydERoY3BTZXJ2ZXIoU3RyaW5nIGludGYpIHsKKyAgICAgICAgSW50ZXJmYWNlQ29uZmlndXJhdGlvbiBpZmNnID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmY2cgPSBtTndTZXJ2aWNlLmdldEludGVyZmFjZUNvbmZpZyhpbnRmKTsKKyAgICAgICAgICAgIGlmY2cuc2V0TGlua0FkZHJlc3MobmV3IExpbmtBZGRyZXNzKE5ldHdvcmtVdGlscy5udW1lcmljVG9JbmV0QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgIFNFUlZFUl9BRERSRVNTKSwgMjQpKTsKKyAgICAgICAgICAgIGlmY2cuc2V0SW50ZXJmYWNlVXAoKTsKKyAgICAgICAgICAgIG1Od1NlcnZpY2Uuc2V0SW50ZXJmYWNlQ29uZmlnKGludGYsIGlmY2cpOworICAgICAgICAgICAgLyogVGhpcyBzdGFydHMgdGhlIGRuc21hc3Egc2VydmVyICovCisgICAgICAgICAgICBtTndTZXJ2aWNlLnN0YXJ0VGV0aGVyaW5nKERIQ1BfUkFOR0UpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nZSgiRXJyb3IgY29uZmlndXJpbmcgaW50ZXJmYWNlICIgKyBpbnRmICsgIiwgOiIgKyBlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGxvZ2QoIlN0YXJ0ZWQgRGhjcCBzZXJ2ZXIgb24gIiArIGludGYpOworICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHN0b3BEaGNwU2VydmVyKFN0cmluZyBpbnRmKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtTndTZXJ2aWNlLnN0b3BUZXRoZXJpbmcoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGxvZ2UoIkVycm9yIHN0b3BwaW5nIERoY3Agc2VydmVyIiArIGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbG9nZCgiU3RvcHBlZCBEaGNwIHNlcnZlciIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBub3RpZnlQMnBFbmFibGVGYWlsdXJlKCkgeworICAgICAgICBSZXNvdXJjZXMgciA9IFJlc291cmNlcy5nZXRTeXN0ZW0oKTsKKyAgICAgICAgQWxlcnREaWFsb2cgZGlhbG9nID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIobUNvbnRleHQpCisgICAgICAgICAgICAuc2V0VGl0bGUoci5nZXRTdHJpbmcoUi5zdHJpbmcud2lmaV9wMnBfZGlhbG9nX3RpdGxlKSkKKyAgICAgICAgICAgIC5zZXRNZXNzYWdlKHIuZ2V0U3RyaW5nKFIuc3RyaW5nLndpZmlfcDJwX2ZhaWxlZF9tZXNzYWdlKSkKKyAgICAgICAgICAgIC5zZXRQb3NpdGl2ZUJ1dHRvbihyLmdldFN0cmluZyhSLnN0cmluZy5vayksIG51bGwpCisgICAgICAgICAgICAuY3JlYXRlKCk7CisgICAgICAgIGRpYWxvZy5nZXRXaW5kb3coKS5zZXRUeXBlKFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfU1lTVEVNX0FMRVJUKTsKKyAgICAgICAgZGlhbG9nLnNob3coKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYWRkUm93VG9EaWFsb2coVmlld0dyb3VwIGdyb3VwLCBpbnQgc3RyaW5nSWQsIFN0cmluZyB2YWx1ZSkgeworICAgICAgICBSZXNvdXJjZXMgciA9IFJlc291cmNlcy5nZXRTeXN0ZW0oKTsKKyAgICAgICAgVmlldyByb3cgPSBMYXlvdXRJbmZsYXRlci5mcm9tKG1Db250ZXh0KS5pbmZsYXRlKFIubGF5b3V0LndpZmlfcDJwX2RpYWxvZ19yb3csCisgICAgICAgICAgICAgICAgZ3JvdXAsIGZhbHNlKTsKKyAgICAgICAgKChUZXh0Vmlldykgcm93LmZpbmRWaWV3QnlJZChSLmlkLm5hbWUpKS5zZXRUZXh0KHIuZ2V0U3RyaW5nKHN0cmluZ0lkKSk7CisgICAgICAgICgoVGV4dFZpZXcpIHJvdy5maW5kVmlld0J5SWQoUi5pZC52YWx1ZSkpLnNldFRleHQodmFsdWUpOworICAgICAgICBncm91cC5hZGRWaWV3KHJvdyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUludml0YXRpb25TZW50KFN0cmluZyBwaW4sIFN0cmluZyBwZWVyQWRkcmVzcykgeworICAgICAgICBSZXNvdXJjZXMgciA9IFJlc291cmNlcy5nZXRTeXN0ZW0oKTsKKworICAgICAgICBmaW5hbCBWaWV3IHRleHRFbnRyeVZpZXcgPSBMYXlvdXRJbmZsYXRlci5mcm9tKG1Db250ZXh0KQorICAgICAgICAgICAgICAgIC5pbmZsYXRlKFIubGF5b3V0LndpZmlfcDJwX2RpYWxvZywgbnVsbCk7CisKKyAgICAgICAgVmlld0dyb3VwIGdyb3VwID0gKFZpZXdHcm91cCkgdGV4dEVudHJ5Vmlldy5maW5kVmlld0J5SWQoUi5pZC5pbmZvKTsKKyAgICAgICAgYWRkUm93VG9EaWFsb2coZ3JvdXAsIFIuc3RyaW5nLndpZmlfcDJwX3RvX21lc3NhZ2UsIGdldERldmljZU5hbWUocGVlckFkZHJlc3MpKTsKKyAgICAgICAgYWRkUm93VG9EaWFsb2coZ3JvdXAsIFIuc3RyaW5nLndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UsIHBpbik7CisKKyAgICAgICAgQWxlcnREaWFsb2cgZGlhbG9nID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIobUNvbnRleHQpCisgICAgICAgICAgICAuc2V0VGl0bGUoci5nZXRTdHJpbmcoUi5zdHJpbmcud2lmaV9wMnBfaW52aXRhdGlvbl9zZW50X3RpdGxlKSkKKyAgICAgICAgICAgIC5zZXRWaWV3KHRleHRFbnRyeVZpZXcpCisgICAgICAgICAgICAuc2V0UG9zaXRpdmVCdXR0b24oci5nZXRTdHJpbmcoUi5zdHJpbmcub2spLCBudWxsKQorICAgICAgICAgICAgLmNyZWF0ZSgpOworICAgICAgICBkaWFsb2cuZ2V0V2luZG93KCkuc2V0VHlwZShXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX1NZU1RFTV9BTEVSVCk7CisgICAgICAgIGRpYWxvZy5zaG93KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUludml0YXRpb25SZWNlaXZlZCgpIHsKKyAgICAgICAgUmVzb3VyY2VzIHIgPSBSZXNvdXJjZXMuZ2V0U3lzdGVtKCk7CisgICAgICAgIGZpbmFsIFdwc0luZm8gd3BzID0gbVNhdmVkUGVlckNvbmZpZy53cHM7CisgICAgICAgIGZpbmFsIFZpZXcgdGV4dEVudHJ5VmlldyA9IExheW91dEluZmxhdGVyLmZyb20obUNvbnRleHQpCisgICAgICAgICAgICAgICAgLmluZmxhdGUoUi5sYXlvdXQud2lmaV9wMnBfZGlhbG9nLCBudWxsKTsKKworICAgICAgICBWaWV3R3JvdXAgZ3JvdXAgPSAoVmlld0dyb3VwKSB0ZXh0RW50cnlWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmluZm8pOworICAgICAgICBhZGRSb3dUb0RpYWxvZyhncm91cCwgUi5zdHJpbmcud2lmaV9wMnBfZnJvbV9tZXNzYWdlLCBnZXREZXZpY2VOYW1lKAorICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcykpOworCisgICAgICAgIGZpbmFsIEVkaXRUZXh0IHBpbiA9IChFZGl0VGV4dCkgdGV4dEVudHJ5Vmlldy5maW5kVmlld0J5SWQoUi5pZC53aWZpX3AycF93cHNfcGluKTsKKworICAgICAgICBBbGVydERpYWxvZyBkaWFsb2cgPSBuZXcgQWxlcnREaWFsb2cuQnVpbGRlcihtQ29udGV4dCkKKyAgICAgICAgICAgIC5zZXRUaXRsZShyLmdldFN0cmluZyhSLnN0cmluZy53aWZpX3AycF9pbnZpdGF0aW9uX3RvX2Nvbm5lY3RfdGl0bGUpKQorICAgICAgICAgICAgLnNldFZpZXcodGV4dEVudHJ5VmlldykKKyAgICAgICAgICAgIC5zZXRQb3NpdGl2ZUJ1dHRvbihyLmdldFN0cmluZyhSLnN0cmluZy5hY2NlcHQpLCBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhEaWFsb2dJbnRlcmZhY2UgZGlhbG9nLCBpbnQgd2hpY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod3BzLnNldHVwID09IFdwc0luZm8uS0VZUEFEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcud3BzLnBpbiA9IHBpbi5nZXRUZXh0KCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGFjY2VwdCBpbnZpdGF0aW9uICIgKyBtU2F2ZWRQZWVyQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShQRUVSX0NPTk5FQ1RJT05fVVNFUl9BQ0NFUFQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnNldE5lZ2F0aXZlQnV0dG9uKHIuZ2V0U3RyaW5nKFIuc3RyaW5nLmRlY2xpbmUpLCBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCB3aGljaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBpZ25vcmUgY29ubmVjdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKFBFRVJfQ09OTkVDVElPTl9VU0VSX1JFSkVDVCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAuc2V0T25DYW5jZWxMaXN0ZW5lcihuZXcgRGlhbG9nSW50ZXJmYWNlLk9uQ2FuY2VsTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2FuY2VsKERpYWxvZ0ludGVyZmFjZSBhcmcwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGlnbm9yZSBjb25uZWN0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoUEVFUl9DT05ORUNUSU9OX1VTRVJfUkVKRUNUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC5jcmVhdGUoKTsKKworICAgICAgICAvL21ha2UgdGhlIGVudGVyIHBpbiBhcmVhIG9yIHRoZSBkaXNwbGF5IHBpbiBhcmVhIHZpc2libGUKKyAgICAgICAgc3dpdGNoICh3cHMuc2V0dXApIHsKKyAgICAgICAgICAgIGNhc2UgV3BzSW5mby5LRVlQQUQ6CisgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiRW50ZXIgcGluIHNlY3Rpb24gdmlzaWJsZSIpOworICAgICAgICAgICAgICAgIHRleHRFbnRyeVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuZW50ZXJfcGluX3NlY3Rpb24pLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV3BzSW5mby5ESVNQTEFZOgorICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlNob3duIHBpbiBzZWN0aW9uIHZpc2libGUiKTsKKyAgICAgICAgICAgICAgICBhZGRSb3dUb0RpYWxvZyhncm91cCwgUi5zdHJpbmcud2lmaV9wMnBfc2hvd19waW5fbWVzc2FnZSwgd3BzLnBpbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChyLmdldENvbmZpZ3VyYXRpb24oKS51aU1vZGUgJiBDb25maWd1cmF0aW9uLlVJX01PREVfVFlQRV9BUFBMSUFOQ0UpID09CisgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbi5VSV9NT0RFX1RZUEVfQVBQTElBTkNFKSB7CisgICAgICAgICAgICAvLyBGb3IgYXBwbGlhbmNlIGRldmljZXMsIGFkZCBhIGtleSBsaXN0ZW5lciB3aGljaCBhY2NlcHRzLgorICAgICAgICAgICAgZGlhbG9nLnNldE9uS2V5TGlzdGVuZXIobmV3IERpYWxvZ0ludGVyZmFjZS5PbktleUxpc3RlbmVyKCkgeworCisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gb25LZXkoRGlhbG9nSW50ZXJmYWNlIGRpYWxvZywgaW50IGtleUNvZGUsIEtleUV2ZW50IGV2ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IG1ha2UgdGhlIGFjdHVhbCBrZXkgY29tZSBmcm9tIGEgY29uZmlnIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX1ZPTFVNRV9NVVRFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShQRUVSX0NPTk5FQ1RJT05fVVNFUl9BQ0NFUFQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nLmRpc21pc3MoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIFRPRE86IGFkZCB0aW1lb3V0IGZvciB0aGlzIGRpYWxvZy4KKyAgICAgICAgICAgIC8vIFRPRE86IHVwZGF0ZSBVSSBpbiBhcHBsaWFuY2UgbW9kZSB0byB0ZWxsIHVzZXIgd2hhdCB0byBkby4KKyAgICAgICAgfQorCisgICAgICAgIGRpYWxvZy5nZXRXaW5kb3coKS5zZXRUeXBlKFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfU1lTVEVNX0FMRVJUKTsKKyAgICAgICAgZGlhbG9nLnNob3coKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTeW5jaHJvbml6ZSB0aGUgcGVyc2lzdGVudCBncm91cCBsaXN0IGJldHdlZW4KKyAgICAgKiB3cGFfc3VwcGxpY2FudCBhbmQgbUdyb3Vwcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlUGVyc2lzdGVudE5ldHdvcmtzKGJvb2xlYW4gcmVsb2FkKSB7CisgICAgICAgIFN0cmluZyBsaXN0U3RyID0gbVdpZmlOYXRpdmUubGlzdE5ldHdvcmtzKCk7CisgICAgICAgIGlmIChsaXN0U3RyID09IG51bGwpIHJldHVybjsKKworICAgICAgICBib29sZWFuIGlzU2F2ZVJlcXVpcmVkID0gZmFsc2U7CisgICAgICAgIFN0cmluZ1tdIGxpbmVzID0gbGlzdFN0ci5zcGxpdCgiXG4iKTsKKyAgICAgICAgaWYgKGxpbmVzID09IG51bGwpIHJldHVybjsKKworICAgICAgICBpZiAocmVsb2FkKSBtR3JvdXBzLmNsZWFyKCk7CisKKyAgICAgICAgLy8gU2tpcCB0aGUgZmlyc3QgbGluZSwgd2hpY2ggaXMgYSBoZWFkZXIKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgU3RyaW5nW10gcmVzdWx0ID0gbGluZXNbaV0uc3BsaXQoIlx0Iik7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IG51bGwgfHwgcmVzdWx0Lmxlbmd0aCA8IDQpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIG5ldHdvcmstaWQgfCBzc2lkIHwgYnNzaWQgfCBmbGFncworICAgICAgICAgICAgaW50IG5ldElkID0gLTE7CisgICAgICAgICAgICBTdHJpbmcgc3NpZCA9IHJlc3VsdFsxXTsKKyAgICAgICAgICAgIFN0cmluZyBic3NpZCA9IHJlc3VsdFsyXTsKKyAgICAgICAgICAgIFN0cmluZyBmbGFncyA9IHJlc3VsdFszXTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbmV0SWQgPSBJbnRlZ2VyLnBhcnNlSW50KHJlc3VsdFswXSk7CisgICAgICAgICAgICB9IGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZsYWdzLmluZGV4T2YoIltDVVJSRU5UXSIpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmxhZ3MuaW5kZXhPZigiW1AyUC1QRVJTSVNURU5UXSIpID09IC0xKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBUaGUgdW51c2VkIHByb2ZpbGUgaXMgc29tZXRpbWVzIHJlbWFpbmVkIHdoZW4gdGhlIHAycCBncm91cCBmb3JtYXRpb24gaXMgZmFpbGVkLgorICAgICAgICAgICAgICAgICAqIFNvLCB3ZSBjbGVhbiB1cCB0aGUgcDJwIGdyb3VwIGhlcmUuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiY2xlYW4gdXAgdGhlIHVudXNlZCBwZXJzaXN0ZW50IGdyb3VwLiBuZXRJZD0iICsgbmV0SWQpOworICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnJlbW92ZU5ldHdvcmsobmV0SWQpOworICAgICAgICAgICAgICAgIGlzU2F2ZVJlcXVpcmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1Hcm91cHMuY29udGFpbnMobmV0SWQpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdpZmlQMnBHcm91cCBncm91cCA9IG5ldyBXaWZpUDJwR3JvdXAoKTsKKyAgICAgICAgICAgIGdyb3VwLnNldE5ldHdvcmtJZChuZXRJZCk7CisgICAgICAgICAgICBncm91cC5zZXROZXR3b3JrTmFtZShzc2lkKTsKKyAgICAgICAgICAgIFN0cmluZyBtb2RlID0gbVdpZmlOYXRpdmUuZ2V0TmV0d29ya1ZhcmlhYmxlKG5ldElkLCAibW9kZSIpOworICAgICAgICAgICAgaWYgKG1vZGUgIT0gbnVsbCAmJiBtb2RlLmVxdWFscygiMyIpKSB7CisgICAgICAgICAgICAgICAgZ3JvdXAuc2V0SXNHcm91cE93bmVyKHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJzc2lkLmVxdWFsc0lnbm9yZUNhc2UobVRoaXNEZXZpY2UuZGV2aWNlQWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBncm91cC5zZXRPd25lcihtVGhpc0RldmljZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFdpZmlQMnBEZXZpY2UgZGV2aWNlID0gbmV3IFdpZmlQMnBEZXZpY2UoKTsKKyAgICAgICAgICAgICAgICBkZXZpY2UuZGV2aWNlQWRkcmVzcyA9IGJzc2lkOworICAgICAgICAgICAgICAgIGdyb3VwLnNldE93bmVyKGRldmljZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtR3JvdXBzLmFkZChncm91cCk7CisgICAgICAgICAgICBpc1NhdmVSZXF1aXJlZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVsb2FkIHx8IGlzU2F2ZVJlcXVpcmVkKSB7CisgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zYXZlQ29uZmlnKCk7CisgICAgICAgICAgICBzZW5kUDJwUGVyc2lzdGVudEdyb3Vwc0NoYW5nZWRCcm9hZGNhc3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEEgY29uZmlnIGlzIHZhbGlkIGlmIGl0IGhhcyBhIHBlZXIgYWRkcmVzcyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4KKyAgICAgKiBkaXNjb3ZlcmVkCisgICAgICogQHJldHVybiB0cnVlIGlmIGl0IGlzIGludmFsaWQsIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpc0NvbmZpZ0ludmFsaWQoV2lmaVAycENvbmZpZyBjb25maWcpIHsKKyAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGNvbmZpZy5kZXZpY2VBZGRyZXNzKSkgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChtUGVlcnMuZ2V0KGNvbmZpZy5kZXZpY2VBZGRyZXNzKSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qIFRPRE86IFRoZSBzdXBwbGljYW50IGRvZXMgbm90IHByb3ZpZGUgZ3JvdXAgY2FwYWJpbGl0eSBjaGFuZ2VzIGFzIGFuIGV2ZW50LgorICAgICAqIEhhdmluZyBpdCBwdXNoZWQgYXMgYW4gZXZlbnQgd291bGQgYXZvaWQgcG9sbGluZyBmb3IgdGhpcyBpbmZvcm1hdGlvbiByaWdodAorICAgICAqIGJlZm9yZSBhIGNvbm5lY3Rpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIFdpZmlQMnBEZXZpY2UgZmV0Y2hDdXJyZW50RGV2aWNlRGV0YWlscyhXaWZpUDJwQ29uZmlnIGNvbmZpZykgeworICAgICAgICAvKiBGZXRjaCAmIHVwZGF0ZSBncm91cCBjYXBhYmlsaXR5IGZyb20gc3VwcGxpY2FudCBvbiB0aGUgZGV2aWNlICovCisgICAgICAgIGludCBnYyA9IG1XaWZpTmF0aXZlLmdldEdyb3VwQ2FwYWJpbGl0eShjb25maWcuZGV2aWNlQWRkcmVzcyk7CisgICAgICAgIG1QZWVycy51cGRhdGVHcm91cENhcGFiaWxpdHkoY29uZmlnLmRldmljZUFkZHJlc3MsIGdjKTsKKyAgICAgICAgcmV0dXJuIG1QZWVycy5nZXQoY29uZmlnLmRldmljZUFkZHJlc3MpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0YXJ0IGEgcDJwIGdyb3VwIG5lZ290aWF0aW9uIGFuZCBkaXNwbGF5IHBpbiBpZiBuZWNlc3NhcnkKKyAgICAgKiBAcGFyYW0gY29uZmlnIGZvciB0aGUgcGVlcgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBwMnBDb25uZWN0V2l0aFBpbkRpc3BsYXkoV2lmaVAycENvbmZpZyBjb25maWcpIHsKKyAgICAgICAgV2lmaVAycERldmljZSBkZXYgPSBmZXRjaEN1cnJlbnREZXZpY2VEZXRhaWxzKGNvbmZpZyk7CisKKyAgICAgICAgU3RyaW5nIHBpbiA9IG1XaWZpTmF0aXZlLnAycENvbm5lY3QoY29uZmlnLCBkZXYuaXNHcm91cE93bmVyKCkpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgSW50ZWdlci5wYXJzZUludChwaW4pOworICAgICAgICAgICAgbm90aWZ5SW52aXRhdGlvblNlbnQocGluLCBjb25maWcuZGV2aWNlQWRkcmVzcyk7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBpZ25vcmUpIHsKKyAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcgaWYgcDJwQ29ubmVjdCBkaWQgbm90IHJldHVybiBhIHBpbgorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVpbnZva2UgYSBwZXJzaXN0ZW50IGdyb3VwLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbmZpZyBmb3IgdGhlIHBlZXIKKyAgICAgKiBAcmV0dXJuIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZQorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiByZWludm9rZVBlcnNpc3RlbnRHcm91cChXaWZpUDJwQ29uZmlnIGNvbmZpZykgeworICAgICAgICBXaWZpUDJwRGV2aWNlIGRldiA9IGZldGNoQ3VycmVudERldmljZURldGFpbHMoY29uZmlnKTsKKworICAgICAgICBib29sZWFuIGpvaW4gPSBkZXYuaXNHcm91cE93bmVyKCk7CisgICAgICAgIFN0cmluZyBzc2lkID0gbVdpZmlOYXRpdmUucDJwR2V0U3NpZChkZXYuZGV2aWNlQWRkcmVzcyk7CisgICAgICAgIGlmIChEQkcpIGxvZ2QoInRhcmdldCBzc2lkIGlzICIgKyBzc2lkICsgIiBqb2luOiIgKyBqb2luKTsKKworICAgICAgICBpZiAoam9pbiAmJiBkZXYuaXNHcm91cExpbWl0KCkpIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoInRhcmdldCBkZXZpY2UgcmVhY2hlcyBncm91cCBsaW1pdC4iKTsKKworICAgICAgICAgICAgLy8gaWYgdGhlIHRhcmdldCBncm91cCBoYXMgcmVhY2hlZCB0aGUgbGltaXQsCisgICAgICAgICAgICAvLyB0cnkgZ3JvdXAgZm9ybWF0aW9uLgorICAgICAgICAgICAgam9pbiA9IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGpvaW4pIHsKKyAgICAgICAgICAgIGludCBuZXRJZCA9IG1Hcm91cHMuZ2V0TmV0d29ya0lkKGRldi5kZXZpY2VBZGRyZXNzLCBzc2lkKTsKKyAgICAgICAgICAgIGlmIChuZXRJZCA+PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gU2tpcCBXUFMgYW5kIHN0YXJ0IDR3YXkgaGFuZHNoYWtlIGltbWVkaWF0ZWx5LgorICAgICAgICAgICAgICAgIGlmICghbVdpZmlOYXRpdmUucDJwR3JvdXBBZGQobmV0SWQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWpvaW4gJiYgZGV2LmlzRGV2aWNlTGltaXQoKSkgeworICAgICAgICAgICAgbG9nZSgidGFyZ2V0IGRldmljZSByZWFjaGVzIHRoZSBkZXZpY2UgbGltaXQuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWpvaW4gJiYgZGV2LmlzSW52aXRhdGlvbkNhcGFibGUoKSkgeworICAgICAgICAgICAgaW50IG5ldElkID0gV2lmaVAycEdyb3VwLlBFUlNJU1RFTlRfTkVUX0lEOworICAgICAgICAgICAgaWYgKGNvbmZpZy5uZXRJZCA+PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5kZXZpY2VBZGRyZXNzLmVxdWFscyhtR3JvdXBzLmdldE93bmVyQWRkcihjb25maWcubmV0SWQpKSkgeworICAgICAgICAgICAgICAgICAgICBuZXRJZCA9IGNvbmZpZy5uZXRJZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5ldElkID0gbUdyb3Vwcy5nZXROZXR3b3JrSWQoZGV2LmRldmljZUFkZHJlc3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5ldElkIDwgMCkgeworICAgICAgICAgICAgICAgIG5ldElkID0gZ2V0TmV0d29ya0lkRnJvbUNsaWVudExpc3QoZGV2LmRldmljZUFkZHJlc3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKERCRykgbG9nZCgibmV0SWQgcmVsYXRlZCB3aXRoICIgKyBkZXYuZGV2aWNlQWRkcmVzcyArICIgPSAiICsgbmV0SWQpOworICAgICAgICAgICAgaWYgKG5ldElkID49IDApIHsKKyAgICAgICAgICAgICAgICAvLyBJbnZva2UgdGhlIHBlcnNpc3RlbnQgZ3JvdXAuCisgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnAycFJlaW52b2tlKG5ldElkLCBkZXYuZGV2aWNlQWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2F2ZSBuZXR3b3JrIGlkLiBJdCdsbCBiZSB1c2VkIHdoZW4gYW4gaW52aXRhdGlvbiByZXN1bHQgZXZlbnQgaXMgcmVjZWl2ZWQuCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5uZXRJZCA9IG5ldElkOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsb2dlKCJwMnBSZWludm9rZSgpIGZhaWxlZCwgdXBkYXRlIG5ldHdvcmtzIik7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBlcnNpc3RlbnROZXR3b3JrcyhSRUxPQUQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgbmV0d29yayBpZCBvZiB0aGUgZ3JvdXAgb3duZXIgcHJvZmlsZSB3aGljaCBoYXMgdGhlIHAycCBjbGllbnQgd2l0aAorICAgICAqIHRoZSBzcGVjaWZpZWQgZGV2aWNlIGFkZHJlc3MgaW4gaXQncyBjbGllbnQgbGlzdC4KKyAgICAgKiBJZiBtb3JlIHRoYW4gb25lIHBlcnNpc3RlbnQgZ3JvdXAgb2YgdGhlIHNhbWUgYWRkcmVzcyBpcyBwcmVzZW50IGluIGl0cyBjbGllbnQKKyAgICAgKiBsaXN0cywgcmV0dXJuIHRoZSBmaXJzdCBvbmUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGV2aWNlQWRkcmVzcyBwMnAgZGV2aWNlIGFkZHJlc3MuCisgICAgICogQHJldHVybiB0aGUgbmV0d29yayBpZC4gaWYgbm90IGZvdW5kLCByZXR1cm4gLTEuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgZ2V0TmV0d29ya0lkRnJvbUNsaWVudExpc3QoU3RyaW5nIGRldmljZUFkZHJlc3MpIHsKKyAgICAgICAgaWYgKGRldmljZUFkZHJlc3MgPT0gbnVsbCkgcmV0dXJuIC0xOworCisgICAgICAgIENvbGxlY3Rpb248V2lmaVAycEdyb3VwPiBncm91cHMgPSBtR3JvdXBzLmdldEdyb3VwTGlzdCgpOworICAgICAgICBmb3IgKFdpZmlQMnBHcm91cCBncm91cCA6IGdyb3VwcykgeworICAgICAgICAgICAgaW50IG5ldElkID0gZ3JvdXAuZ2V0TmV0d29ya0lkKCk7CisgICAgICAgICAgICBTdHJpbmdbXSBwMnBDbGllbnRMaXN0ID0gZ2V0Q2xpZW50TGlzdChuZXRJZCk7CisgICAgICAgICAgICBpZiAocDJwQ2xpZW50TGlzdCA9PSBudWxsKSBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIGNsaWVudCA6IHAycENsaWVudExpc3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGV2aWNlQWRkcmVzcy5lcXVhbHNJZ25vcmVDYXNlKGNsaWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldElkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHAycCBjbGllbnQgbGlzdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBuZXR3b3JrIGlkLgorICAgICAqIEBwYXJhbSBuZXRJZCBuZXR3b3JrIGlkLgorICAgICAqIEByZXR1cm4gcDJwIGNsaWVudCBsaXN0LiBpZiBub3QgZm91bmQsIHJldHVybiBudWxsLgorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nW10gZ2V0Q2xpZW50TGlzdChpbnQgbmV0SWQpIHsKKyAgICAgICAgU3RyaW5nIHAycENsaWVudHMgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsICJwMnBfY2xpZW50X2xpc3QiKTsKKyAgICAgICAgaWYgKHAycENsaWVudHMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHAycENsaWVudHMuc3BsaXQoIiAiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgdGhlIHNwZWNpZmllZCBwMnAgY2xpZW50IGZyb20gdGhlIHNwZWNpZmllZCBwcm9maWxlLgorICAgICAqIEBwYXJhbSBuZXRJZCBuZXR3b3JrIGlkIG9mIHRoZSBwcm9maWxlLgorICAgICAqIEBwYXJhbSBhZGRyIHAycCBjbGllbnQgYWRkcmVzcyB0byBiZSByZW1vdmVkLgorICAgICAqIEBwYXJhbSBpc1JlbW92YWJsZSBpZiB0cnVlLCByZW1vdmUgdGhlIHNwZWNpZmllZCBwcm9maWxlIGlmIGl0cyBjbGllbnQgbGlzdCBiZWNvbWVzIGVtcHR5LgorICAgICAqIEByZXR1cm4gd2hldGhlciByZW1vdmluZyB0aGUgc3BlY2lmaWVkIHAycCBjbGllbnQgaXMgc3VjY2Vzc2Z1bCBvciBub3QuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIHJlbW92ZUNsaWVudEZyb21MaXN0KGludCBuZXRJZCwgU3RyaW5nIGFkZHIsIGJvb2xlYW4gaXNSZW1vdmFibGUpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBtb2RpZmllZENsaWVudExpc3QgPSAgbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgU3RyaW5nW10gY3VycmVudENsaWVudExpc3QgPSBnZXRDbGllbnRMaXN0KG5ldElkKTsKKyAgICAgICAgYm9vbGVhbiBpc0NsaWVudFJlbW92ZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGN1cnJlbnRDbGllbnRMaXN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIGNsaWVudCA6IGN1cnJlbnRDbGllbnRMaXN0KSB7CisgICAgICAgICAgICAgICAgaWYgKCFjbGllbnQuZXF1YWxzSWdub3JlQ2FzZShhZGRyKSkgeworICAgICAgICAgICAgICAgICAgICBtb2RpZmllZENsaWVudExpc3QuYXBwZW5kKCIgIik7CisgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkQ2xpZW50TGlzdC5hcHBlbmQoY2xpZW50KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpc0NsaWVudFJlbW92ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobW9kaWZpZWRDbGllbnRMaXN0Lmxlbmd0aCgpID09IDAgJiYgaXNSZW1vdmFibGUpIHsKKyAgICAgICAgICAgIC8vIHRoZSBjbGllbnQgbGlzdCBpcyBlbXB0eS4gc28gcmVtb3ZlIGl0LgorICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiUmVtb3ZlIHVua25vd24gbmV0d29yayIpOworICAgICAgICAgICAgbUdyb3Vwcy5yZW1vdmUobmV0SWQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWlzQ2xpZW50UmVtb3ZlZCkgeworICAgICAgICAgICAgLy8gc3BlY2lmaWVkIHAycCBjbGllbnQgaXMgbm90IGZvdW5kLiBhbHJlYWR5IHJlbW92ZWQuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoREJHKSBsb2dkKCJNb2RpZmllZCBjbGllbnQgbGlzdDogIiArIG1vZGlmaWVkQ2xpZW50TGlzdCk7CisgICAgICAgIGlmIChtb2RpZmllZENsaWVudExpc3QubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgbW9kaWZpZWRDbGllbnRMaXN0LmFwcGVuZCgiXCJcIiIpOworICAgICAgICB9CisgICAgICAgIG1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwKKyAgICAgICAgICAgICAgICAicDJwX2NsaWVudF9saXN0IiwgbW9kaWZpZWRDbGllbnRMaXN0LnRvU3RyaW5nKCkpOworICAgICAgICBtV2lmaU5hdGl2ZS5zYXZlQ29uZmlnKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRXaWZpUDJwSW5mb09uR3JvdXBGb3JtYXRpb24oSW5ldEFkZHJlc3Mgc2VydmVySW5ldEFkZHJlc3MpIHsKKyAgICAgICAgbVdpZmlQMnBJbmZvLmdyb3VwRm9ybWVkID0gdHJ1ZTsKKyAgICAgICAgbVdpZmlQMnBJbmZvLmlzR3JvdXBPd25lciA9IG1Hcm91cC5pc0dyb3VwT3duZXIoKTsKKyAgICAgICAgbVdpZmlQMnBJbmZvLmdyb3VwT3duZXJBZGRyZXNzID0gc2VydmVySW5ldEFkZHJlc3M7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHJlc2V0V2lmaVAycEluZm8oKSB7CisgICAgICAgIG1XaWZpUDJwSW5mby5ncm91cEZvcm1lZCA9IGZhbHNlOworICAgICAgICBtV2lmaVAycEluZm8uaXNHcm91cE93bmVyID0gZmFsc2U7CisgICAgICAgIG1XaWZpUDJwSW5mby5ncm91cE93bmVyQWRkcmVzcyA9IG51bGw7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0RGV2aWNlTmFtZShTdHJpbmcgZGV2aWNlQWRkcmVzcykgeworICAgICAgICBXaWZpUDJwRGV2aWNlIGQgPSBtUGVlcnMuZ2V0KGRldmljZUFkZHJlc3MpOworICAgICAgICBpZiAoZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGQuZGV2aWNlTmFtZTsKKyAgICAgICAgfQorICAgICAgICAvL1RyZWF0IHRoZSBhZGRyZXNzIGFzIG5hbWUgaWYgdGhlcmUgaXMgbm8gbWF0Y2gKKyAgICAgICAgcmV0dXJuIGRldmljZUFkZHJlc3M7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0UGVyc2lzdGVkRGV2aWNlTmFtZSgpIHsKKyAgICAgICAgU3RyaW5nIGRldmljZU5hbWUgPSBTZXR0aW5ncy5HbG9iYWwuZ2V0U3RyaW5nKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAorICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX1AyUF9ERVZJQ0VfTkFNRSk7CisgICAgICAgIGlmIChkZXZpY2VOYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgIC8qIFdlIHVzZSB0aGUgNCBkaWdpdHMgb2YgdGhlIEFORFJPSURfSUQgdG8gaGF2ZSBhIGZyaWVuZGx5CisgICAgICAgICAgICAgKiBkZWZhdWx0IHRoYXQgaGFzIGxvdyBsaWtlbGlob29kIG9mIGNvbGxpc2lvbiB3aXRoIGEgcGVlciAqLworICAgICAgICAgICAgU3RyaW5nIGlkID0gU2V0dGluZ3MuU2VjdXJlLmdldFN0cmluZyhtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFORFJPSURfSUQpOworICAgICAgICAgICAgcmV0dXJuICJBbmRyb2lkXyIgKyBpZC5zdWJzdHJpbmcoMCw0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGV2aWNlTmFtZTsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gc2V0QW5kUGVyc2lzdERldmljZU5hbWUoU3RyaW5nIGRldk5hbWUpIHsKKyAgICAgICAgaWYgKGRldk5hbWUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghbVdpZmlOYXRpdmUuc2V0RGV2aWNlTmFtZShkZXZOYW1lKSkgeworICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHNldCBkZXZpY2UgbmFtZSAiICsgZGV2TmFtZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtVGhpc0RldmljZS5kZXZpY2VOYW1lID0gZGV2TmFtZTsKKyAgICAgICAgbVdpZmlOYXRpdmUuc2V0UDJwU3NpZFBvc3RmaXgoIi0iICsgbVRoaXNEZXZpY2UuZGV2aWNlTmFtZSk7CisKKyAgICAgICAgU2V0dGluZ3MuR2xvYmFsLnB1dFN0cmluZyhtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9QMlBfREVWSUNFX05BTUUsIGRldk5hbWUpOworICAgICAgICBzZW5kVGhpc0RldmljZUNoYW5nZWRCcm9hZGNhc3QoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIHNldFdmZEluZm8oV2lmaVAycFdmZEluZm8gd2ZkSW5mbykgeworICAgICAgICBib29sZWFuIHN1Y2Nlc3M7CisKKyAgICAgICAgaWYgKCF3ZmRJbmZvLmlzV2ZkRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gbVdpZmlOYXRpdmUuc2V0V2ZkRW5hYmxlKGZhbHNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPQorICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNldFdmZEVuYWJsZSh0cnVlKQorICAgICAgICAgICAgICAgICYmIG1XaWZpTmF0aXZlLnNldFdmZERldmljZUluZm8od2ZkSW5mby5nZXREZXZpY2VJbmZvSGV4KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IHdmZCBwcm9wZXJ0aWVzIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtVGhpc0RldmljZS53ZmRJbmZvID0gd2ZkSW5mbzsKKyAgICAgICAgc2VuZFRoaXNEZXZpY2VDaGFuZ2VkQnJvYWRjYXN0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBpbml0aWFsaXplUDJwU2V0dGluZ3MoKSB7CisgICAgICAgIG1XaWZpTmF0aXZlLnNldFBlcnNpc3RlbnRSZWNvbm5lY3QodHJ1ZSk7CisgICAgICAgIG1UaGlzRGV2aWNlLmRldmljZU5hbWUgPSBnZXRQZXJzaXN0ZWREZXZpY2VOYW1lKCk7CisgICAgICAgIG1XaWZpTmF0aXZlLnNldERldmljZU5hbWUobVRoaXNEZXZpY2UuZGV2aWNlTmFtZSk7CisgICAgICAgIC8vIERJUkVDVC1YWS1ERVZJQ0VOQU1FIChYWSBpcyByYW5kb21seSBnZW5lcmF0ZWQpCisgICAgICAgIG1XaWZpTmF0aXZlLnNldFAycFNzaWRQb3N0Zml4KCItIiArIG1UaGlzRGV2aWNlLmRldmljZU5hbWUpOworICAgICAgICBtV2lmaU5hdGl2ZS5zZXREZXZpY2VUeXBlKG1UaGlzRGV2aWNlLnByaW1hcnlEZXZpY2VUeXBlKTsKKyAgICAgICAgLy8gU3VwcGxpY2FudCBkZWZhdWx0cyB0byB1c2luZyB2aXJ0dWFsIGRpc3BsYXkgd2l0aCBkaXNwbGF5CisgICAgICAgIC8vIHdoaWNoIHJlZmVycyB0byBhIHJlbW90ZSBkaXNwbGF5LiBVc2UgcGh5c2ljYWxfZGlzcGxheQorICAgICAgICBtV2lmaU5hdGl2ZS5zZXRDb25maWdNZXRob2RzKCJ2aXJ0dWFsX3B1c2hfYnV0dG9uIHBoeXNpY2FsX2Rpc3BsYXkga2V5cGFkIik7CisgICAgICAgIC8vIFNUQSBoYXMgaGlnaGVyIHByaW9yaXR5IG92ZXIgUDJQCisgICAgICAgIG1XaWZpTmF0aXZlLnNldENvbmN1cnJlbmN5UHJpb3JpdHkoInN0YSIpOworCisgICAgICAgIG1UaGlzRGV2aWNlLmRldmljZUFkZHJlc3MgPSBtV2lmaU5hdGl2ZS5wMnBHZXREZXZpY2VBZGRyZXNzKCk7CisgICAgICAgIHVwZGF0ZVRoaXNEZXZpY2UoV2lmaVAycERldmljZS5BVkFJTEFCTEUpOworICAgICAgICBpZiAoREJHKSBsb2dkKCJEZXZpY2VBZGRyZXNzOiAiICsgbVRoaXNEZXZpY2UuZGV2aWNlQWRkcmVzcyk7CisKKyAgICAgICAgbUNsaWVudEluZm9MaXN0LmNsZWFyKCk7CisgICAgICAgIG1XaWZpTmF0aXZlLnAycEZsdXNoKCk7CisgICAgICAgIG1XaWZpTmF0aXZlLnAycFNlcnZpY2VGbHVzaCgpOworICAgICAgICBtU2VydmljZVRyYW5zYWN0aW9uSWQgPSAwOworICAgICAgICBtU2VydmljZURpc2NSZXFJZCA9IG51bGw7CisKKyAgICAgICAgU3RyaW5nIGNvdW50cnlDb2RlID0gU2V0dGluZ3MuR2xvYmFsLmdldFN0cmluZyhtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9DT1VOVFJZX0NPREUpOworICAgICAgICBpZiAoY291bnRyeUNvZGUgIT0gbnVsbCAmJiAhY291bnRyeUNvZGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtUDJwU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFNFVF9DT1VOVFJZX0NPREUsIGNvdW50cnlDb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHVwZGF0ZVBlcnNpc3RlbnROZXR3b3JrcyhSRUxPQUQpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUaGlzRGV2aWNlKGludCBzdGF0dXMpIHsKKyAgICAgICAgbVRoaXNEZXZpY2Uuc3RhdHVzID0gc3RhdHVzOworICAgICAgICBzZW5kVGhpc0RldmljZUNoYW5nZWRCcm9hZGNhc3QoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaGFuZGxlR3JvdXBDcmVhdGlvbkZhaWx1cmUoKSB7CisgICAgICAgIHJlc2V0V2lmaVAycEluZm8oKTsKKyAgICAgICAgbU5ldHdvcmtJbmZvLnNldERldGFpbGVkU3RhdGUoTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZS5GQUlMRUQsIG51bGwsIG51bGwpOworICAgICAgICBzZW5kUDJwQ29ubmVjdGlvbkNoYW5nZWRCcm9hZGNhc3QoKTsKKworICAgICAgICAvLyBSZW1vdmUgb25seSB0aGUgcGVlciB3ZSBmYWlsZWQgdG8gY29ubmVjdCB0byBzbyB0aGF0IG90aGVyIGRldmljZXMgZGlzY292ZXJlZAorICAgICAgICAvLyB0aGF0IGhhdmUgbm90IHRpbWVkIG91dCBzdGlsbCByZW1haW4gaW4gbGlzdCBmb3IgY29ubmVjdGlvbgorICAgICAgICBib29sZWFuIHBlZXJzQ2hhbmdlZCA9IG1QZWVycy5yZW1vdmUobVBlZXJzTG9zdER1cmluZ0Nvbm5lY3Rpb24pOworICAgICAgICBpZiAobVBlZXJzLnJlbW92ZShtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MpICE9IG51bGwpIHsKKyAgICAgICAgICAgIHBlZXJzQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBlZXJzQ2hhbmdlZCkgeworICAgICAgICAgICAgc2VuZFBlZXJzQ2hhbmdlZEJyb2FkY2FzdCgpOworICAgICAgICB9CisKKyAgICAgICAgbVBlZXJzTG9zdER1cmluZ0Nvbm5lY3Rpb24uY2xlYXIoKTsKKyAgICAgICAgbVNlcnZpY2VEaXNjUmVxSWQgPSBudWxsOworICAgICAgICBzZW5kTWVzc2FnZShXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9QRUVSUyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUdyb3VwUmVtb3ZlZCgpIHsKKyAgICAgICAgaWYgKG1Hcm91cC5pc0dyb3VwT3duZXIoKSkgeworICAgICAgICAgICAgc3RvcERoY3BTZXJ2ZXIobUdyb3VwLmdldEludGVyZmFjZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoInN0b3AgREhDUCBjbGllbnQiKTsKKyAgICAgICAgICAgIG1EaGNwU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKERoY3BTdGF0ZU1hY2hpbmUuQ01EX1NUT1BfREhDUCk7CisgICAgICAgICAgICBtRGhjcFN0YXRlTWFjaGluZS5kb1F1aXQoKTsKKyAgICAgICAgICAgIG1EaGNwU3RhdGVNYWNoaW5lID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtTndTZXJ2aWNlLmNsZWFySW50ZXJmYWNlQWRkcmVzc2VzKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gY2xlYXIgYWRkcmVzc2VzICIgKyBlKTsKKyAgICAgICAgfQorICAgICAgICBOZXR3b3JrVXRpbHMucmVzZXRDb25uZWN0aW9ucyhtR3JvdXAuZ2V0SW50ZXJmYWNlKCksIE5ldHdvcmtVdGlscy5SRVNFVF9BTExfQUREUkVTU0VTKTsKKworICAgICAgICAvLyBDbGVhciBhbnkgdGltZW91dCB0aGF0IHdhcyBzZXQuIFRoaXMgaXMgZXNzZW50aWFsIGZvciBkZXZpY2VzCisgICAgICAgIC8vIHRoYXQgcmV1c2UgdGhlIG1haW4gcDJwIGludGVyZmFjZSBmb3IgYSBjcmVhdGVkIGdyb3VwLgorICAgICAgICBtV2lmaU5hdGl2ZS5zZXRQMnBHcm91cElkbGUobUdyb3VwLmdldEludGVyZmFjZSgpLCAwKTsKKworICAgICAgICBib29sZWFuIHBlZXJzQ2hhbmdlZCA9IGZhbHNlOworICAgICAgICAvLyBSZW1vdmUgb25seSBwZWVycyBwYXJ0IG9mIHRoZSBncm91cCwgc28gdGhhdCBvdGhlciBkZXZpY2VzIGRpc2NvdmVyZWQKKyAgICAgICAgLy8gdGhhdCBoYXZlIG5vdCB0aW1lZCBvdXQgc3RpbGwgcmVtYWluIGluIGxpc3QgZm9yIGNvbm5lY3Rpb24KKyAgICAgICAgZm9yIChXaWZpUDJwRGV2aWNlIGQgOiBtR3JvdXAuZ2V0Q2xpZW50TGlzdCgpKSB7CisgICAgICAgICAgICBpZiAobVBlZXJzLnJlbW92ZShkKSkgcGVlcnNDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobVBlZXJzLnJlbW92ZShtR3JvdXAuZ2V0T3duZXIoKSkpIHBlZXJzQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIGlmIChtUGVlcnMucmVtb3ZlKG1QZWVyc0xvc3REdXJpbmdDb25uZWN0aW9uKSkgcGVlcnNDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgaWYgKHBlZXJzQ2hhbmdlZCkgeworICAgICAgICAgICAgc2VuZFBlZXJzQ2hhbmdlZEJyb2FkY2FzdCgpOworICAgICAgICB9CisKKyAgICAgICAgbUdyb3VwID0gbnVsbDsKKyAgICAgICAgbVBlZXJzTG9zdER1cmluZ0Nvbm5lY3Rpb24uY2xlYXIoKTsKKyAgICAgICAgbVNlcnZpY2VEaXNjUmVxSWQgPSBudWxsOworCisgICAgICAgIGlmIChtVGVtcG9hcmlseURpc2Nvbm5lY3RlZFdpZmkpIHsKKyAgICAgICAgICAgIG1XaWZpQ2hhbm5lbC5zZW5kTWVzc2FnZShXaWZpUDJwU2VydmljZS5ESVNDT05ORUNUX1dJRklfUkVRVUVTVCwgMCk7CisgICAgICAgICAgICBtVGVtcG9hcmlseURpc2Nvbm5lY3RlZFdpZmkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgfQorCisgICAgLy9TdGF0ZSBtYWNoaW5lIGluaXRpYXRlZCByZXF1ZXN0cyBjYW4gaGF2ZSByZXBseVRvIHNldCB0byBudWxsIGluZGljYXRpbmcKKyAgICAvL3RoZXJlIGFyZSBubyByZWNpcGllbnRzLCB3ZSBpZ25vcmUgdGhvc2UgcmVwbHkgYWN0aW9ucworICAgIHByaXZhdGUgdm9pZCByZXBseVRvTWVzc2FnZShNZXNzYWdlIG1zZywgaW50IHdoYXQpIHsKKyAgICAgICAgaWYgKG1zZy5yZXBseVRvID09IG51bGwpIHJldHVybjsKKyAgICAgICAgTWVzc2FnZSBkc3RNc2cgPSBvYnRhaW5NZXNzYWdlKG1zZyk7CisgICAgICAgIGRzdE1zZy53aGF0ID0gd2hhdDsKKyAgICAgICAgbVJlcGx5Q2hhbm5lbC5yZXBseVRvTWVzc2FnZShtc2csIGRzdE1zZyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHJlcGx5VG9NZXNzYWdlKE1lc3NhZ2UgbXNnLCBpbnQgd2hhdCwgaW50IGFyZzEpIHsKKyAgICAgICAgaWYgKG1zZy5yZXBseVRvID09IG51bGwpIHJldHVybjsKKyAgICAgICAgTWVzc2FnZSBkc3RNc2cgPSBvYnRhaW5NZXNzYWdlKG1zZyk7CisgICAgICAgIGRzdE1zZy53aGF0ID0gd2hhdDsKKyAgICAgICAgZHN0TXNnLmFyZzEgPSBhcmcxOworICAgICAgICBtUmVwbHlDaGFubmVsLnJlcGx5VG9NZXNzYWdlKG1zZywgZHN0TXNnKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVwbHlUb01lc3NhZ2UoTWVzc2FnZSBtc2csIGludCB3aGF0LCBPYmplY3Qgb2JqKSB7CisgICAgICAgIGlmIChtc2cucmVwbHlUbyA9PSBudWxsKSByZXR1cm47CisgICAgICAgIE1lc3NhZ2UgZHN0TXNnID0gb2J0YWluTWVzc2FnZShtc2cpOworICAgICAgICBkc3RNc2cud2hhdCA9IHdoYXQ7CisgICAgICAgIGRzdE1zZy5vYmogPSBvYmo7CisgICAgICAgIG1SZXBseUNoYW5uZWwucmVwbHlUb01lc3NhZ2UobXNnLCBkc3RNc2cpOworICAgIH0KKworICAgIC8qIGFyZzIgb24gdGhlIHNvdXJjZSBtZXNzYWdlIGhhcyBhIGhhc2ggY29kZSB0aGF0IG5lZWRzIHRvIGJlIHJldGFpbmVkIGluIHJlcGxpZXMKKyAgICAgKiBzZWUgV2lmaVAycE1hbmFnZXIgZm9yIGRldGFpbHMgKi8KKyAgICBwcml2YXRlIE1lc3NhZ2Ugb2J0YWluTWVzc2FnZShNZXNzYWdlIHNyY01zZykgeworICAgICAgICBNZXNzYWdlIG1zZyA9IE1lc3NhZ2Uub2J0YWluKCk7CisgICAgICAgIG1zZy5hcmcyID0gc3JjTXNnLmFyZzI7CisgICAgICAgIHJldHVybiBtc2c7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgbG9nZChTdHJpbmcgcykgeworICAgICAgICBTbG9nLmQoVEFHLCBzKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBsb2dlKFN0cmluZyBzKSB7CisgICAgICAgIFNsb2cuZShUQUcsIHMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZSBzZXJ2aWNlIGRpc2NvdmVyeSByZXF1ZXN0IHRvIHdwYV9zdXBwbGljYW50LgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiB1cGRhdGVTdXBwbGljYW50U2VydmljZVJlcXVlc3QoKSB7CisgICAgICAgIGNsZWFyU3VwcGxpY2FudFNlcnZpY2VSZXF1ZXN0KCk7CisKKyAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBmb3IgKENsaWVudEluZm8gYzogbUNsaWVudEluZm9MaXN0LnZhbHVlcygpKSB7CisgICAgICAgICAgICBpbnQga2V5OworICAgICAgICAgICAgV2lmaVAycFNlcnZpY2VSZXF1ZXN0IHJlcTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGMubVJlcUxpc3Quc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICByZXEgPSBjLm1SZXFMaXN0LnZhbHVlQXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZChyZXEuZ2V0U3VwcGxpY2FudFF1ZXJ5KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzYi5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtU2VydmljZURpc2NSZXFJZCA9IG1XaWZpTmF0aXZlLnAycFNlcnZEaXNjUmVxKCIwMDowMDowMDowMDowMDowMCIsIHNiLnRvU3RyaW5nKCkpOworICAgICAgICBpZiAobVNlcnZpY2VEaXNjUmVxSWQgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENsZWFyIHNlcnZpY2UgZGlzY292ZXJ5IHJlcXVlc3QgaW4gd3BhX3N1cHBsaWNhbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgY2xlYXJTdXBwbGljYW50U2VydmljZVJlcXVlc3QoKSB7CisgICAgICAgIGlmIChtU2VydmljZURpc2NSZXFJZCA9PSBudWxsKSByZXR1cm47CisKKyAgICAgICAgbVdpZmlOYXRpdmUucDJwU2VydkRpc2NDYW5jZWxSZXEobVNlcnZpY2VEaXNjUmVxSWQpOworICAgICAgICBtU2VydmljZURpc2NSZXFJZCA9IG51bGw7CisgICAgfQorCisgICAgLyogVE9ETzogV2UgY291bGQgdHJhY2sgaW5kaXZpZHVhbCBzZXJ2aWNlIGFkZHMgc2VwYXJhdGVseSBhbmQgYXZvaWQKKyAgICAgKiBoYXZpbmcgdG8gZG8gdXBkYXRlIGFsbCBzZXJ2aWNlIHJlcXVlc3RzIG9uIGV2ZXJ5IG5ldyByZXF1ZXN0CisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGFkZFNlcnZpY2VSZXF1ZXN0KE1lc3NlbmdlciBtLCBXaWZpUDJwU2VydmljZVJlcXVlc3QgcmVxKSB7CisgICAgICAgIGNsZWFyQ2xpZW50RGVhZENoYW5uZWxzKCk7CisgICAgICAgIENsaWVudEluZm8gY2xpZW50SW5mbyA9IGdldENsaWVudEluZm8obSwgdHJ1ZSk7CisgICAgICAgIGlmIChjbGllbnRJbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgICsrbVNlcnZpY2VUcmFuc2FjdGlvbklkOworICAgICAgICAvL1RoZSBXaS1GaSBwMnAgc3BlYyBzYXlzIHRyYW5zYWN0aW9uIGlkIHNob3VsZCBiZSBub24temVybworICAgICAgICBpZiAobVNlcnZpY2VUcmFuc2FjdGlvbklkID09IDApICsrbVNlcnZpY2VUcmFuc2FjdGlvbklkOworICAgICAgICByZXEuc2V0VHJhbnNhY3Rpb25JZChtU2VydmljZVRyYW5zYWN0aW9uSWQpOworICAgICAgICBjbGllbnRJbmZvLm1SZXFMaXN0LnB1dChtU2VydmljZVRyYW5zYWN0aW9uSWQsIHJlcSk7CisKKyAgICAgICAgaWYgKG1TZXJ2aWNlRGlzY1JlcUlkID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHVwZGF0ZVN1cHBsaWNhbnRTZXJ2aWNlUmVxdWVzdCgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCByZW1vdmVTZXJ2aWNlUmVxdWVzdChNZXNzZW5nZXIgbSwgV2lmaVAycFNlcnZpY2VSZXF1ZXN0IHJlcSkgeworICAgICAgICBDbGllbnRJbmZvIGNsaWVudEluZm8gPSBnZXRDbGllbnRJbmZvKG0sIGZhbHNlKTsKKyAgICAgICAgaWYgKGNsaWVudEluZm8gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy9BcHBsaWNhdGlvbiBkb2VzIG5vdCBoYXZlIHRyYW5zYWN0aW9uIGlkIGluZm9ybWF0aW9uCisgICAgICAgIC8vZ28gdGhyb3VnaCBzdG9yZWQgcmVxdWVzdHMgdG8gcmVtb3ZlCisgICAgICAgIGJvb2xlYW4gcmVtb3ZlZCA9IGZhbHNlOworICAgICAgICBmb3IgKGludCBpPTA7IGk8Y2xpZW50SW5mby5tUmVxTGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKHJlcS5lcXVhbHMoY2xpZW50SW5mby5tUmVxTGlzdC52YWx1ZUF0KGkpKSkgeworICAgICAgICAgICAgICAgIHJlbW92ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGNsaWVudEluZm8ubVJlcUxpc3QucmVtb3ZlQXQoaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXJlbW92ZWQpIHJldHVybjsKKworICAgICAgICBpZiAoY2xpZW50SW5mby5tUmVxTGlzdC5zaXplKCkgPT0gMCAmJiBjbGllbnRJbmZvLm1TZXJ2TGlzdC5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZCgicmVtb3ZlIGNsaWVudCBpbmZvcm1hdGlvbiBmcm9tIGZyYW1ld29yayIpOworICAgICAgICAgICAgbUNsaWVudEluZm9MaXN0LnJlbW92ZShjbGllbnRJbmZvLm1NZXNzZW5nZXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1TZXJ2aWNlRGlzY1JlcUlkID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHVwZGF0ZVN1cHBsaWNhbnRTZXJ2aWNlUmVxdWVzdCgpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjbGVhclNlcnZpY2VSZXF1ZXN0cyhNZXNzZW5nZXIgbSkgeworCisgICAgICAgIENsaWVudEluZm8gY2xpZW50SW5mbyA9IGdldENsaWVudEluZm8obSwgZmFsc2UpOworICAgICAgICBpZiAoY2xpZW50SW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xpZW50SW5mby5tUmVxTGlzdC5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2xpZW50SW5mby5tUmVxTGlzdC5jbGVhcigpOworCisgICAgICAgIGlmIChjbGllbnRJbmZvLm1TZXJ2TGlzdC5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZCgicmVtb3ZlIGNoYW5uZWwgaW5mb3JtYXRpb24gZnJvbSBmcmFtZXdvcmsiKTsKKyAgICAgICAgICAgIG1DbGllbnRJbmZvTGlzdC5yZW1vdmUoY2xpZW50SW5mby5tTWVzc2VuZ2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtU2VydmljZURpc2NSZXFJZCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1cGRhdGVTdXBwbGljYW50U2VydmljZVJlcXVlc3QoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gYWRkTG9jYWxTZXJ2aWNlKE1lc3NlbmdlciBtLCBXaWZpUDJwU2VydmljZUluZm8gc2VydkluZm8pIHsKKyAgICAgICAgY2xlYXJDbGllbnREZWFkQ2hhbm5lbHMoKTsKKyAgICAgICAgQ2xpZW50SW5mbyBjbGllbnRJbmZvID0gZ2V0Q2xpZW50SW5mbyhtLCB0cnVlKTsKKyAgICAgICAgaWYgKGNsaWVudEluZm8gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjbGllbnRJbmZvLm1TZXJ2TGlzdC5hZGQoc2VydkluZm8pKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1XaWZpTmF0aXZlLnAycFNlcnZpY2VBZGQoc2VydkluZm8pKSB7CisgICAgICAgICAgICBjbGllbnRJbmZvLm1TZXJ2TGlzdC5yZW1vdmUoc2VydkluZm8pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHJlbW92ZUxvY2FsU2VydmljZShNZXNzZW5nZXIgbSwgV2lmaVAycFNlcnZpY2VJbmZvIHNlcnZJbmZvKSB7CisgICAgICAgIENsaWVudEluZm8gY2xpZW50SW5mbyA9IGdldENsaWVudEluZm8obSwgZmFsc2UpOworICAgICAgICBpZiAoY2xpZW50SW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtV2lmaU5hdGl2ZS5wMnBTZXJ2aWNlRGVsKHNlcnZJbmZvKTsKKworICAgICAgICBjbGllbnRJbmZvLm1TZXJ2TGlzdC5yZW1vdmUoc2VydkluZm8pOworICAgICAgICBpZiAoY2xpZW50SW5mby5tUmVxTGlzdC5zaXplKCkgPT0gMCAmJiBjbGllbnRJbmZvLm1TZXJ2TGlzdC5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgaWYgKERCRykgbG9nZCgicmVtb3ZlIGNsaWVudCBpbmZvcm1hdGlvbiBmcm9tIGZyYW1ld29yayIpOworICAgICAgICAgICAgbUNsaWVudEluZm9MaXN0LnJlbW92ZShjbGllbnRJbmZvLm1NZXNzZW5nZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNsZWFyTG9jYWxTZXJ2aWNlcyhNZXNzZW5nZXIgbSkgeworICAgICAgICBDbGllbnRJbmZvIGNsaWVudEluZm8gPSBnZXRDbGllbnRJbmZvKG0sIGZhbHNlKTsKKyAgICAgICAgaWYgKGNsaWVudEluZm8gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChXaWZpUDJwU2VydmljZUluZm8gc2VydkluZm86IGNsaWVudEluZm8ubVNlcnZMaXN0KSB7CisgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBTZXJ2aWNlRGVsKHNlcnZJbmZvKTsKKyAgICAgICAgfQorCisgICAgICAgIGNsaWVudEluZm8ubVNlcnZMaXN0LmNsZWFyKCk7CisgICAgICAgIGlmIChjbGllbnRJbmZvLm1SZXFMaXN0LnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJyZW1vdmUgY2xpZW50IGluZm9ybWF0aW9uIGZyb20gZnJhbWV3b3JrIik7CisgICAgICAgICAgICBtQ2xpZW50SW5mb0xpc3QucmVtb3ZlKGNsaWVudEluZm8ubU1lc3Nlbmdlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY2xlYXJDbGllbnRJbmZvKE1lc3NlbmdlciBtKSB7CisgICAgICAgIGNsZWFyTG9jYWxTZXJ2aWNlcyhtKTsKKyAgICAgICAgY2xlYXJTZXJ2aWNlUmVxdWVzdHMobSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2VuZCB0aGUgc2VydmljZSByZXNwb25zZSB0byB0aGUgV2lmaVAycE1hbmFnZXIuQ2hhbm5lbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSByZXNwCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHNlbmRTZXJ2aWNlUmVzcG9uc2UoV2lmaVAycFNlcnZpY2VSZXNwb25zZSByZXNwKSB7CisgICAgICAgIGZvciAoQ2xpZW50SW5mbyBjIDogbUNsaWVudEluZm9MaXN0LnZhbHVlcygpKSB7CisgICAgICAgICAgICBXaWZpUDJwU2VydmljZVJlcXVlc3QgcmVxID0gYy5tUmVxTGlzdC5nZXQocmVzcC5nZXRUcmFuc2FjdGlvbklkKCkpOworICAgICAgICAgICAgaWYgKHJlcSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgTWVzc2FnZSBtc2cgPSBNZXNzYWdlLm9idGFpbigpOworICAgICAgICAgICAgICAgIG1zZy53aGF0ID0gV2lmaVAycE1hbmFnZXIuUkVTUE9OU0VfU0VSVklDRTsKKyAgICAgICAgICAgICAgICBtc2cuYXJnMSA9IDA7CisgICAgICAgICAgICAgICAgbXNnLmFyZzIgPSAwOworICAgICAgICAgICAgICAgIG1zZy5vYmogPSByZXNwOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGMubU1lc3Nlbmdlci5zZW5kKG1zZyk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiZGV0ZWN0IGRlYWQgY2hhbm5lbCIpOworICAgICAgICAgICAgICAgICAgICBjbGVhckNsaWVudEluZm8oYy5tTWVzc2VuZ2VyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFdlIGRvbnQgZ2V0IG5vdGlmaWNhdGlvbnMgb2YgY2xpZW50cyB0aGF0IGhhdmUgZ29uZSBhd2F5LgorICAgICAqIFdlIGRldGVjdCB0aGlzIGFjdGl2ZWx5IHdoZW4gc2VydmljZXMgYXJlIGFkZGVkIGFuZCB0aHJvdworICAgICAqIHRoZW0gYXdheS4KKyAgICAgKgorICAgICAqIFRPRE86IFRoaXMgY2FuIGJlIGRvbmUgYmV0dGVyIHdpdGggZnVsbCBhc3luYyBjaGFubmVscy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgY2xlYXJDbGllbnREZWFkQ2hhbm5lbHMoKSB7CisgICAgICAgIEFycmF5TGlzdDxNZXNzZW5nZXI+IGRlYWRDbGllbnRzID0gbmV3IEFycmF5TGlzdDxNZXNzZW5nZXI+KCk7CisKKyAgICAgICAgZm9yIChDbGllbnRJbmZvIGMgOiBtQ2xpZW50SW5mb0xpc3QudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIE1lc3NhZ2UgbXNnID0gTWVzc2FnZS5vYnRhaW4oKTsKKyAgICAgICAgICAgIG1zZy53aGF0ID0gV2lmaVAycE1hbmFnZXIuUElORzsKKyAgICAgICAgICAgIG1zZy5hcmcxID0gMDsKKyAgICAgICAgICAgIG1zZy5hcmcyID0gMDsKKyAgICAgICAgICAgIG1zZy5vYmogPSBudWxsOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjLm1NZXNzZW5nZXIuc2VuZChtc2cpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJkZXRlY3QgZGVhZCBjaGFubmVsIik7CisgICAgICAgICAgICAgICAgZGVhZENsaWVudHMuYWRkKGMubU1lc3Nlbmdlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKE1lc3NlbmdlciBtIDogZGVhZENsaWVudHMpIHsKKyAgICAgICAgICAgIGNsZWFyQ2xpZW50SW5mbyhtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgc3BlY2lmaWVkIENsaWVudEluZm8uCisgICAgICogQHBhcmFtIG0gTWVzc2VuZ2VyCisgICAgICogQHBhcmFtIGNyZWF0ZUlmTm90RXhpc3QgaWYgdHJ1ZSBhbmQgdGhlIHNwZWNpZmllZCBjaGFubmVsIGluZm8gZG9lcyBub3QgZXhpc3QsCisgICAgICogY3JlYXRlIG5ldyBjbGllbnQgaW5mby4KKyAgICAgKiBAcmV0dXJuIHRoZSBzcGVjaWZpZWQgQ2xpZW50SW5mby4KKyAgICAgKi8KKyAgICBwcml2YXRlIENsaWVudEluZm8gZ2V0Q2xpZW50SW5mbyhNZXNzZW5nZXIgbSwgYm9vbGVhbiBjcmVhdGVJZk5vdEV4aXN0KSB7CisgICAgICAgIENsaWVudEluZm8gY2xpZW50SW5mbyA9IG1DbGllbnRJbmZvTGlzdC5nZXQobSk7CisKKyAgICAgICAgaWYgKGNsaWVudEluZm8gPT0gbnVsbCAmJiBjcmVhdGVJZk5vdEV4aXN0KSB7CisgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJhZGQgYSBuZXcgY2xpZW50Iik7CisgICAgICAgICAgICBjbGllbnRJbmZvID0gbmV3IENsaWVudEluZm8obSk7CisgICAgICAgICAgICBtQ2xpZW50SW5mb0xpc3QucHV0KG0sIGNsaWVudEluZm8pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNsaWVudEluZm87CisgICAgfQorCisgICAgfQorCisgICAgLyoqCisgICAgICogSW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIGNsaWVudCBhbmQgd2UgdHJhY2sgdGhlIHNlcnZpY2UgZGlzY292ZXJ5IHJlcXVlc3RzCisgICAgICogYW5kIHRoZSBsb2NhbCBzZXJ2aWNlcyByZWdpc3RlcmVkIGJ5IHRoZSBjbGllbnQuCisgICAgICovCisgICAgcHJpdmF0ZSBjbGFzcyBDbGllbnRJbmZvIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byBXaWZpUDJwTWFuYWdlci5DaGFubmVsIGhhbmRsZXIuCisgICAgICAgICAqIFRoZSByZXNwb25zZSBvZiB0aGlzIHJlcXVlc3QgaXMgbm90aWZpZWQgdG8gV2lmaVAycE1hbmFnZXIuQ2hhbm5lbCBoYW5kbGVyCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIE1lc3NlbmdlciBtTWVzc2VuZ2VyOworCisgICAgICAgIC8qCisgICAgICAgICAqIEEgc2VydmljZSBkaXNjb3ZlcnkgcmVxdWVzdCBsaXN0LgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBTcGFyc2VBcnJheTxXaWZpUDJwU2VydmljZVJlcXVlc3Q+IG1SZXFMaXN0OworCisgICAgICAgIC8qCisgICAgICAgICAqIEEgbG9jYWwgc2VydmljZSBpbmZvcm1hdGlvbiBsaXN0LgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBMaXN0PFdpZmlQMnBTZXJ2aWNlSW5mbz4gbVNlcnZMaXN0OworCisgICAgICAgIHByaXZhdGUgQ2xpZW50SW5mbyhNZXNzZW5nZXIgbSkgeworICAgICAgICAgICAgbU1lc3NlbmdlciA9IG07CisgICAgICAgICAgICBtUmVxTGlzdCA9IG5ldyBTcGFyc2VBcnJheSgpOworICAgICAgICAgICAgbVNlcnZMaXN0ID0gbmV3IEFycmF5TGlzdDxXaWZpUDJwU2VydmljZUluZm8+KCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9EaW1MYXllci5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vRGltTGF5ZXIuamF2YQppbmRleCA5NzhkNWI3Li5jMTg5ZGRkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9EaW1MYXllci5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0RpbUxheWVyLmphdmEKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiAgICAgICAgIGZpbmFsIGludCBkdywgZGg7CiAgICAgICAgIGZpbmFsIGZsb2F0IHhQb3MsIHlQb3M7Ci0gICAgICAgIGlmICghbVN0YWNrLmlzRnVsbHNjcmVlbigpKSB7CisgICAgICAgIGlmIChtU3RhY2suaGFzU2libGluZygpKSB7CiAgICAgICAgICAgICBkdyA9IG1Cb3VuZHMud2lkdGgoKTsKICAgICAgICAgICAgIGRoID0gbUJvdW5kcy5oZWlnaHQoKTsKICAgICAgICAgICAgIHhQb3MgPSBtQm91bmRzLmxlZnQ7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9EaXNwbGF5Q29udGVudC5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vRGlzcGxheUNvbnRlbnQuamF2YQppbmRleCA0MzUyZWNlLi5kMzU4YjRjIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9EaXNwbGF5Q29udGVudC5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0Rpc3BsYXlDb250ZW50LmphdmEKQEAgLTIxLDggKzIxLDEwIEBACiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyU2VydmljZS5ERUJVR19WSVNJQklMSVRZOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlclNlcnZpY2UuVEFHOwogCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrQm94SW5mbzsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWdpb247CitpbXBvcnQgYW5kcm9pZC5vcy5EZWJ1ZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRXZlbnRMb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CkBAIC03Miw3ICs3NCw2IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBEaXNwbGF5IG1EaXNwbGF5OwogCiAgICAgUmVjdCBtQmFzZURpc3BsYXlSZWN0ID0gbmV3IFJlY3QoKTsKLSAgICBSZWN0IG1Db250ZW50UmVjdCA9IG5ldyBSZWN0KCk7CiAKICAgICAvLyBBY2Nlc3NlZCBkaXJlY3RseSBieSBhbGwgdXNlcnMuCiAgICAgYm9vbGVhbiBsYXlvdXROZWVkZWQ7CkBAIC05MSwxMiArOTIsMTEgQEAKICAgICAgKi8KICAgICBmaW5hbCBBcHBUb2tlbkxpc3QgbUV4aXRpbmdBcHBUb2tlbnMgPSBuZXcgQXBwVG9rZW5MaXN0KCk7CiAKLSAgICAvKiogQXJyYXkgY29udGFpbmluZyBhbGwgVGFza1N0YWNrcyBvbiB0aGlzIGRpc3BsYXkuICBBcnJheQorICAgIC8qKiBBcnJheSBjb250YWluaW5nIHRoZSBob21lIFN0YWNrQm94IGFuZCBwb3NzaWJseSBvbmUgbW9yZSB3aGljaCB3b3VsZCBjb250YWluIGFwcHMuIEFycmF5CiAgICAgICogaXMgc3RvcmVkIGluIGRpc3BsYXkgb3JkZXIgd2l0aCB0aGUgY3VycmVudCBib3R0b20gc3RhY2sgYXQgMC4gKi8KLSAgICBwcml2YXRlIEFycmF5TGlzdDxUYXNrU3RhY2s+IG1TdGFja3MgPSBuZXcgQXJyYXlMaXN0PFRhc2tTdGFjaz4oKTsKKyAgICBwcml2YXRlIEFycmF5TGlzdDxTdGFja0JveD4gbVN0YWNrQm94ZXMgPSBuZXcgQXJyYXlMaXN0PFN0YWNrQm94PigpOwogCi0gICAgLyoqIEEgc3BlY2lhbCBUYXNrU3RhY2sgd2l0aCBpZD09SE9NRV9TVEFDS19JRCB0aGF0IG1vdmVzIHRvIHRoZSBib3R0b20gd2hlbmV2ZXIgYW55IFRhc2tTdGFjawotICAgICAqIChleGNlcHQgYSBmdXR1cmUgbG9ja3NjcmVlbiBUYXNrU3RhY2spIG1vdmVzIHRvIHRoZSB0b3AuICovCisgICAgLyoqIFRydWUgd2hlbiB0aGUgaG9tZSBTdGFja0JveCBpcyBhdCB0aGUgdG9wIG9mIG1TdGFja0JveGVzLCBmYWxzZSBvdGhlcndpc2UuICovCiAgICAgcHJpdmF0ZSBUYXNrU3RhY2sgbUhvbWVTdGFjayA9IG51bGw7CiAKICAgICAvKiogRGV0ZWN0IHVzZXIgdGFwcGluZyBvdXRzaWRlIG9mIGN1cnJlbnQgZm9jdXNlZCBzdGFjayBib3VuZHMgLiovCkBAIC0xMjMsNiArMTIzLDEzIEBACiAgICAgICAgIGRpc3BsYXkuZ2V0RGlzcGxheUluZm8obURpc3BsYXlJbmZvKTsKICAgICAgICAgaXNEZWZhdWx0RGlzcGxheSA9IG1EaXNwbGF5SWQgPT0gRGlzcGxheS5ERUZBVUxUX0RJU1BMQVk7CiAgICAgICAgIG1TZXJ2aWNlID0gc2VydmljZTsKKworICAgICAgICBTdGFja0JveCBuZXdCb3ggPSBuZXcgU3RhY2tCb3goc2VydmljZSwgdGhpcywgbnVsbCk7CisgICAgICAgIG1TdGFja0JveGVzLmFkZChuZXdCb3gpOworICAgICAgICBUYXNrU3RhY2sgbmV3U3RhY2sgPSBuZXcgVGFza1N0YWNrKHNlcnZpY2UsIEhPTUVfU1RBQ0tfSUQsIHRoaXMpOworICAgICAgICBuZXdTdGFjay5tU3RhY2tCb3ggPSBuZXdCb3g7CisgICAgICAgIG5ld0JveC5tU3RhY2sgPSBuZXdTdGFjazsKKyAgICAgICAgbUhvbWVTdGFjayA9IG5ld1N0YWNrOwogICAgIH0KIAogICAgIGludCBnZXREaXNwbGF5SWQoKSB7CkBAIC0xNDgsNiArMTU1LDEwIEBACiAgICAgICAgIHJldHVybiBtRGlzcGxheS5oYXNBY2Nlc3ModWlkKTsKICAgICB9CiAKKyAgICBib29sZWFuIGhvbWVPblRvcCgpIHsKKyAgICAgICAgcmV0dXJuIG1TdGFja0JveGVzLmdldCgwKS5tU3RhY2sgIT0gbUhvbWVTdGFjazsKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiBpc1ByaXZhdGUoKSB7CiAgICAgICAgIHJldHVybiAobURpc3BsYXkuZ2V0RmxhZ3MoKSAmIERpc3BsYXkuRkxBR19QUklWQVRFKSAhPSAwOwogICAgIH0KQEAgLTE5NCwxOCArMjA1LDcgQEAKICAgICB9CiAKICAgICB2b2lkIHVwZGF0ZURpc3BsYXlJbmZvKCkgewotICAgICAgICAvLyBTYXZlIG9sZCBzaXplLgotICAgICAgICBpbnQgb2xkV2lkdGggPSBtRGlzcGxheUluZm8ubG9naWNhbFdpZHRoOwotICAgICAgICBpbnQgb2xkSGVpZ2h0ID0gbURpc3BsYXlJbmZvLmxvZ2ljYWxIZWlnaHQ7CiAgICAgICAgIG1EaXNwbGF5LmdldERpc3BsYXlJbmZvKG1EaXNwbGF5SW5mbyk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IG1TdGFja3Muc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIGZpbmFsIFRhc2tTdGFjayBzdGFjayA9IG1TdGFja3MuZ2V0KGkpOwotICAgICAgICAgICAgaWYgKCFzdGFjay5pc0Z1bGxzY3JlZW4oKSkgewotICAgICAgICAgICAgICAgIHN0YWNrLnJlc2l6ZUJvdW5kcyhvbGRXaWR0aCwgb2xkSGVpZ2h0LCBtRGlzcGxheUluZm8ubG9naWNhbFdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgbURpc3BsYXlJbmZvLmxvZ2ljYWxIZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBnZXRMb2dpY2FsRGlzcGxheVJlY3QoUmVjdCBvdXQpIHsKQEAgLTIyNyw1OCArMjI3LDE1OSBAQAogICAgICAgICByZXR1cm4gY291bnQ7CiAgICAgfQogCi0gICAgLyoqIFJlZmVyIHRvIHtAbGluayBXaW5kb3dNYW5hZ2VyU2VydmljZSNjcmVhdGVTdGFjayhpbnQsIGludCl9ICovCi0gICAgVGFza1N0YWNrIGNyZWF0ZVN0YWNrKGludCBzdGFja0lkKSB7Ci0gICAgICAgIGlmIChERUJVR19TVEFDSykgU2xvZy5kKFRBRywgImNyZWF0ZVN0YWNrOiBzdGFja0lkPSIgKyBzdGFja0lkKTsKLSAgICAgICAgVGFza1N0YWNrIG5ld1N0YWNrID0gbmV3IFRhc2tTdGFjayhtU2VydmljZSwgc3RhY2tJZCwgdGhpcyk7CisgICAgLyoqIFJlZmVyIHRvIHtAbGluayBXaW5kb3dNYW5hZ2VyU2VydmljZSNjcmVhdGVTdGFjayhpbnQsIGludCwgaW50LCBmbG9hdCl9ICovCisgICAgVGFza1N0YWNrIGNyZWF0ZVN0YWNrKGludCBzdGFja0lkLCBpbnQgcmVsYXRpdmVTdGFja0JveElkLCBpbnQgcG9zaXRpb24sIGZsb2F0IHdlaWdodCkgeworICAgICAgICBUYXNrU3RhY2sgbmV3U3RhY2sgPSBudWxsOworICAgICAgICBpZiAoREVCVUdfU1RBQ0spIFNsb2cuZChUQUcsICJjcmVhdGVTdGFjazogc3RhY2tJZD0iICsgc3RhY2tJZCArICIgcmVsYXRpdmVTdGFja0JveElkPSIKKyAgICAgICAgICAgICAgICArIHJlbGF0aXZlU3RhY2tCb3hJZCArICIgcG9zaXRpb249IiArIHBvc2l0aW9uICsgIiB3ZWlnaHQ9IiArIHdlaWdodCk7CiAgICAgICAgIGlmIChzdGFja0lkID09IEhPTUVfU1RBQ0tfSUQpIHsKLSAgICAgICAgICAgIGlmIChtSG9tZVN0YWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChtU3RhY2tCb3hlcy5zaXplKCkgIT0gMSkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNyZWF0ZVN0YWNrOiBIT01FX1NUQUNLX0lEICgwKSBub3QgZmlyc3QuIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtSG9tZVN0YWNrID0gbmV3U3RhY2s7CisgICAgICAgICAgICBuZXdTdGFjayA9IG1Ib21lU3RhY2s7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgc3RhY2tCb3hOZHg7CisgICAgICAgICAgICBmb3IgKHN0YWNrQm94TmR4ID0gbVN0YWNrQm94ZXMuc2l6ZSgpIC0gMTsgc3RhY2tCb3hOZHggPj0gMDsgLS1zdGFja0JveE5keCkgeworICAgICAgICAgICAgICAgIGZpbmFsIFN0YWNrQm94IGJveCA9IG1TdGFja0JveGVzLmdldChzdGFja0JveE5keCk7CisgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IFN0YWNrQm94LlRBU0tfU1RBQ0tfR09FU19PVkVSCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBwb3NpdGlvbiA9PSBTdGFja0JveC5UQVNLX1NUQUNLX0dPRVNfVU5ERVIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUG9zaXRpb24gaW5kaWNhdGVzIGEgbmV3IGJveCBpcyBhZGRlZCBhdCB0b3AgbGV2ZWwgb25seS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGJveC5jb250YWlucyhyZWxhdGl2ZVN0YWNrQm94SWQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0JveCBuZXdCb3ggPSBuZXcgU3RhY2tCb3gobVNlcnZpY2UsIHRoaXMsIG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhY2sgPSBuZXcgVGFza1N0YWNrKG1TZXJ2aWNlLCBzdGFja0lkLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0YWNrLm1TdGFja0JveCA9IG5ld0JveDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JveC5tU3RhY2sgPSBuZXdTdGFjazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBvZmZzZXQgPSBwb3NpdGlvbiA9PSBTdGFja0JveC5UQVNLX1NUQUNLX0dPRVNfT1ZFUiA/IDEgOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1NUQUNLKSBTbG9nLmQoVEFHLCAiY3JlYXRlU3RhY2s6IGluc2VydGluZyBzdGFjayBhdCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YWNrQm94TmR4ICsgb2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtU3RhY2tCb3hlcy5hZGQoc3RhY2tCb3hOZHggKyBvZmZzZXQsIG5ld0JveCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlbWFpbmluZyBwb3NpdGlvbiB2YWx1ZXMgaW5kaWNhdGUgYSBib3ggbXVzdCBiZSBzcGxpdC4KKyAgICAgICAgICAgICAgICAgICAgbmV3U3RhY2sgPSBib3guc3BsaXQoc3RhY2tJZCwgcmVsYXRpdmVTdGFja0JveElkLCBwb3NpdGlvbiwgd2VpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0YWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0YWNrQm94TmR4IDwgMCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNyZWF0ZVN0YWNrOiBzdGFja0JveElkICIgKyByZWxhdGl2ZVN0YWNrQm94SWQKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBub3QgZm91bmQuIik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbVN0YWNrcy5hZGQobmV3U3RhY2spOwotICAgICAgICBsYXlvdXROZWVkZWQgPSB0cnVlOworICAgICAgICBpZiAobmV3U3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgbGF5b3V0TmVlZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBFdmVudExvZy53cml0ZUV2ZW50KEV2ZW50TG9nVGFncy5XTV9TVEFDS19DUkVBVEVELCBzdGFja0lkLCByZWxhdGl2ZVN0YWNrQm94SWQsIHBvc2l0aW9uLAorICAgICAgICAgICAgICAgIChpbnQpKHdlaWdodCAqIDEwMCArIDAuNSkpOwogICAgICAgICByZXR1cm4gbmV3U3RhY2s7CiAgICAgfQogCi0gICAgdm9pZCBtb3ZlU3RhY2soVGFza1N0YWNrIHN0YWNrLCBib29sZWFuIHRvVG9wKSB7Ci0gICAgICAgIG1TdGFja3MucmVtb3ZlKHN0YWNrKTsKLSAgICAgICAgbVN0YWNrcy5hZGQodG9Ub3AgPyBtU3RhY2tzLnNpemUoKSA6IDAsIHN0YWNrKTsKLSAgICB9Ci0KLSAgICBUYXNrU3RhY2sgdG9wU3RhY2soKSB7Ci0gICAgICAgIHJldHVybiBtU3RhY2tzLmdldChtU3RhY2tzLnNpemUoKSAtIDEpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb3BhZ2F0ZSB0aGUgbmV3IGJvdW5kcyB0byBhbGwgY2hpbGQgc3RhY2tzLgotICAgICAqIEBwYXJhbSBjb250ZW50UmVjdCBUaGUgYm91bmRzIHRvIGFwcGx5IGF0IHRoZSB0b3AgbGV2ZWwuCi0gICAgICovCi0gICAgdm9pZCByZXNpemUoUmVjdCBjb250ZW50UmVjdCkgewotICAgICAgICBtQ29udGVudFJlY3Quc2V0KGNvbnRlbnRSZWN0KTsKLSAgICB9Ci0KLSAgICBib29sZWFuIGdldFN0YWNrQm91bmRzKGludCBzdGFja0lkLCBSZWN0IGJvdW5kcykgewotICAgICAgICBmb3IgKGludCBzdGFja05keCA9IG1TdGFja3Muc2l6ZSgpIC0gMTsgc3RhY2tOZHggPj0gMDsgLS1zdGFja05keCkgewotICAgICAgICAgICAgZmluYWwgVGFza1N0YWNrIHN0YWNrID0gbVN0YWNrcy5nZXQoc3RhY2tOZHgpOwotICAgICAgICAgICAgaWYgKHN0YWNrSWQgPT0gc3RhY2subVN0YWNrSWQpIHsKLSAgICAgICAgICAgICAgICBib3VuZHMuc2V0KHN0YWNrLm1Cb3VuZHMpOworICAgIC8qKiBSZWZlciB0byB7QGxpbmsgV2luZG93TWFuYWdlclNlcnZpY2UjcmVzaXplU3RhY2tCb3goaW50LCBmbG9hdCl9ICovCisgICAgYm9vbGVhbiByZXNpemVTdGFjayhpbnQgc3RhY2tCb3hJZCwgZmxvYXQgd2VpZ2h0KSB7CisgICAgICAgIGZvciAoaW50IHN0YWNrQm94TmR4ID0gbVN0YWNrQm94ZXMuc2l6ZSgpIC0gMTsgc3RhY2tCb3hOZHggPj0gMDsgLS1zdGFja0JveE5keCkgeworICAgICAgICAgICAgZmluYWwgU3RhY2tCb3ggYm94ID0gbVN0YWNrQm94ZXMuZ2V0KHN0YWNrQm94TmR4KTsKKyAgICAgICAgICAgIGlmIChib3gucmVzaXplKHN0YWNrQm94SWQsIHdlaWdodCkpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXROZWVkZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQgc3RhY2tJZEZyb21Qb2ludChpbnQgeCwgaW50IHkpIHsKLSAgICAgICAgZm9yIChpbnQgc3RhY2tOZHggPSBtU3RhY2tzLnNpemUoKSAtIDE7IHN0YWNrTmR4ID49IDA7IC0tc3RhY2tOZHgpIHsKLSAgICAgICAgICAgIGZpbmFsIFRhc2tTdGFjayBzdGFjayA9IG1TdGFja3MuZ2V0KHN0YWNrTmR4KTsKLSAgICAgICAgICAgIHN0YWNrLmdldEJvdW5kcyhtVG1wUmVjdCk7Ci0gICAgICAgICAgICBpZiAobVRtcFJlY3QuY29udGFpbnMoeCwgeSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2subVN0YWNrSWQ7CisgICAgdm9pZCBhZGRTdGFja0JveChTdGFja0JveCBib3gsIGJvb2xlYW4gdG9Ub3ApIHsKKyAgICAgICAgaWYgKG1TdGFja0JveGVzLnNpemUoKSA+PSAyKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiYWRkU3RhY2tCb3g6IFRvbyBtYW55IHRvcGxldmVsIFN0YWNrQm94ZXMhIik7CisgICAgICAgIH0KKyAgICAgICAgbVN0YWNrQm94ZXMuYWRkKHRvVG9wID8gbVN0YWNrQm94ZXMuc2l6ZSgpIDogMCwgYm94KTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZVN0YWNrQm94KFN0YWNrQm94IGJveCkgeworICAgICAgICBpZiAoREVCVUdfU1RBQ0spIFNsb2cuZChUQUcsICJyZW1vdmVTdGFja0JveDogYm94PSIgKyBib3gpOworICAgICAgICBmaW5hbCBUYXNrU3RhY2sgc3RhY2sgPSBib3gubVN0YWNrOworICAgICAgICBpZiAoc3RhY2sgIT0gbnVsbCAmJiBzdGFjay5tU3RhY2tJZCA9PSBIT01FX1NUQUNLX0lEKSB7CisgICAgICAgICAgICAvLyBOZXZlciBkZWxldGUgdGhlIGhvbWUgc3RhY2ssIGV2ZW4gaWYgaXQgaXMgZW1wdHkuCisgICAgICAgICAgICBpZiAoREVCVUdfU1RBQ0spIFNsb2cuZChUQUcsICJyZW1vdmVTdGFja0JveDogTm90IGRlbGV0aW5nIGhvbWUgc3RhY2suIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbVN0YWNrQm94ZXMucmVtb3ZlKGJveCk7CisgICAgfQorCisgICAgU3RhY2tCb3hJbmZvIGdldFN0YWNrQm94SW5mbyhTdGFja0JveCBib3gpIHsKKyAgICAgICAgU3RhY2tCb3hJbmZvIGluZm8gPSBuZXcgU3RhY2tCb3hJbmZvKCk7CisgICAgICAgIGluZm8uc3RhY2tCb3hJZCA9IGJveC5tU3RhY2tCb3hJZDsKKyAgICAgICAgaW5mby53ZWlnaHQgPSBib3gubVdlaWdodDsKKyAgICAgICAgaW5mby52ZXJ0aWNhbCA9IGJveC5tVmVydGljYWw7CisgICAgICAgIGluZm8uYm91bmRzID0gbmV3IFJlY3QoYm94Lm1Cb3VuZHMpOworICAgICAgICBpZiAoYm94Lm1TdGFjayAhPSBudWxsKSB7CisgICAgICAgICAgICBpbmZvLnN0YWNrSWQgPSBib3gubVN0YWNrLm1TdGFja0lkOworICAgICAgICAgICAgLy8gQWN0aXZpdHlNYW5hZ2VyU2VydmljZSB3aWxsIGZpbGwgaW4gdGhlIFN0YWNrSW5mby4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGluZm8uc3RhY2tJZCA9IC0xOworICAgICAgICAgICAgaW5mby5jaGlsZHJlbiA9IG5ldyBTdGFja0JveEluZm9bMl07CisgICAgICAgICAgICBpbmZvLmNoaWxkcmVuWzBdID0gZ2V0U3RhY2tCb3hJbmZvKGJveC5tRmlyc3QpOworICAgICAgICAgICAgaW5mby5jaGlsZHJlblsxXSA9IGdldFN0YWNrQm94SW5mbyhib3gubVNlY29uZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGluZm87CisgICAgfQorCisgICAgQXJyYXlMaXN0PFN0YWNrQm94SW5mbz4gZ2V0U3RhY2tCb3hJbmZvcygpIHsKKyAgICAgICAgQXJyYXlMaXN0PFN0YWNrQm94SW5mbz4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RhY2tCb3hJbmZvPigpOworICAgICAgICBmb3IgKGludCBzdGFja0JveE5keCA9IG1TdGFja0JveGVzLnNpemUoKSAtIDE7IHN0YWNrQm94TmR4ID49IDA7IC0tc3RhY2tCb3hOZHgpIHsKKyAgICAgICAgICAgIGxpc3QuYWRkKGdldFN0YWNrQm94SW5mbyhtU3RhY2tCb3hlcy5nZXQoc3RhY2tCb3hOZHgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorCisgICAgLyoqCisgICAgICogTW92ZSB0aGUgaG9tZSBTdGFja0JveCB0byB0aGUgdG9wIG9yIGJvdHRvbSBvZiBtU3RhY2tCb3hlcy4gVGhhdCBpcyB0aGUgb25seSBwbGFjZQorICAgICAqIGl0IGlzIGFsbG93ZWQgdG8gYmUuIFRoaXMgaXMgYSBub3AgaWYgdGhlIGhvbWUgU3RhY2tCb3ggaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbi4KKyAgICAgKiBAcGFyYW0gdG9Ub3AgTW92ZSBob21lIHRvIHRoZSB0b3Agb2YgbVN0YWNrQm94ZXMgaWYgdHJ1ZSwgdG8gdGhlIGJvdHRvbSBpZiBmYWxzZS4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgYSBjaGFuZ2Ugd2FzIG1hZGUsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sZWFuIG1vdmVIb21lU3RhY2tCb3goYm9vbGVhbiB0b1RvcCkgeworICAgICAgICBpZiAoREVCVUdfU1RBQ0spIFNsb2cuZChUQUcsICJtb3ZlSG9tZVN0YWNrQm94OiB0b1RvcD0iICsgdG9Ub3AgKyAiIENhbGxlcnM9IiArCisgICAgICAgICAgICAgICAgRGVidWcuZ2V0Q2FsbGVycyg0KSk7CisgICAgICAgIEV2ZW50TG9nLndyaXRlRXZlbnQoRXZlbnRMb2dUYWdzLldNX0hPTUVfU1RBQ0tfTU9WRUQsIHRvVG9wID8gMSA6IDApOworICAgICAgICBzd2l0Y2ggKG1TdGFja0JveGVzLnNpemUoKSkgeworICAgICAgICAgICAgY2FzZSAwOiB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigibW92ZUhvbWVTdGFja0JveDogTm8gaG9tZSBTdGFja0JveCEiKTsKKyAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIGZhbHNlOyAvLyBPbmx5IHRoZSBob21lIFN0YWNrQm94IGV4aXN0cy4KKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBpZiAoaG9tZU9uVG9wKCkgXiB0b1RvcCkgeworICAgICAgICAgICAgICAgICAgICBtU3RhY2tCb3hlcy5hZGQobVN0YWNrQm94ZXMucmVtb3ZlKDApKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJtb3ZlSG9tZVN0YWNrQm94OiBUb28gbWFueSB0b3BsZXZlbCBTdGFja0JveGVzISIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJvcGFnYXRlIHRoZSBuZXcgYm91bmRzIHRvIGFsbCBjaGlsZCBzdGFjayBib3hlcywgYXBwbHlpbmcgd2VpZ2h0cyBhcyB3ZSBtb3ZlIGRvd24uCisgICAgICogQHBhcmFtIGNvbnRlbnRSZWN0IFRoZSBib3VuZHMgdG8gYXBwbHkgYXQgdGhlIHRvcCBsZXZlbC4KKyAgICAgKi8KKyAgICBib29sZWFuIHNldFN0YWNrQm94U2l6ZShSZWN0IGNvbnRlbnRSZWN0KSB7CisgICAgICAgIGJvb2xlYW4gY2hhbmdlID0gZmFsc2U7CisgICAgICAgIGZvciAoaW50IHN0YWNrQm94TmR4ID0gbVN0YWNrQm94ZXMuc2l6ZSgpIC0gMTsgc3RhY2tCb3hOZHggPj0gMDsgLS1zdGFja0JveE5keCkgeworICAgICAgICAgICAgY2hhbmdlIHw9IG1TdGFja0JveGVzLmdldChzdGFja0JveE5keCkuc2V0U3RhY2tCb3hTaXplcyhjb250ZW50UmVjdCwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoYW5nZTsKKyAgICB9CisKKyAgICBSZWN0IGdldFN0YWNrQm91bmRzKGludCBzdGFja0lkKSB7CisgICAgICAgIGZvciAoaW50IHN0YWNrQm94TmR4ID0gbVN0YWNrQm94ZXMuc2l6ZSgpIC0gMTsgc3RhY2tCb3hOZHggPj0gMDsgLS1zdGFja0JveE5keCkgeworICAgICAgICAgICAgUmVjdCBib3VuZHMgPSBtU3RhY2tCb3hlcy5nZXQoc3RhY2tCb3hOZHgpLmdldFN0YWNrQm91bmRzKHN0YWNrSWQpOworICAgICAgICAgICAgaWYgKGJvdW5kcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJvdW5kczsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIGludCBzdGFja0lkRnJvbVBvaW50KGludCB4LCBpbnQgeSkgeworICAgICAgICBTdGFja0JveCB0b3BCb3ggPSBtU3RhY2tCb3hlcy5nZXQobVN0YWNrQm94ZXMuc2l6ZSgpIC0gMSk7CisgICAgICAgIHJldHVybiB0b3BCb3guc3RhY2tJZEZyb21Qb2ludCh4LCB5KTsKICAgICB9CiAKICAgICB2b2lkIHNldFRvdWNoRXhjbHVkZVJlZ2lvbihUYXNrU3RhY2sgZm9jdXNlZFN0YWNrKSB7CkBAIC0zMDcsNDggKzQwOCw0OCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChpbnQgc3RhY2tOZHggPSBtU3RhY2tzLnNpemUoKSAtIDE7IHN0YWNrTmR4ID49IDA7IC0tc3RhY2tOZHgpIHsKLSAgICAgICAgICAgIG1TdGFja3MuZ2V0KHN0YWNrTmR4KS5zd2l0Y2hVc2VyKG5ld1VzZXJJZCk7CisgICAgICAgIGZvciAoaW50IHN0YWNrQm94TmR4ID0gbVN0YWNrQm94ZXMuc2l6ZSgpIC0gMTsgc3RhY2tCb3hOZHggPj0gMDsgLS1zdGFja0JveE5keCkgeworICAgICAgICAgICAgbVN0YWNrQm94ZXMuZ2V0KHN0YWNrQm94TmR4KS5zd2l0Y2hVc2VyU3RhY2tzKG5ld1VzZXJJZCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICB2b2lkIHJlc2V0QW5pbWF0aW9uQmFja2dyb3VuZEFuaW1hdG9yKCkgewotICAgICAgICBmb3IgKGludCBzdGFja05keCA9IG1TdGFja3Muc2l6ZSgpIC0gMTsgc3RhY2tOZHggPj0gMDsgLS1zdGFja05keCkgewotICAgICAgICAgICAgbVN0YWNrcy5nZXQoc3RhY2tOZHgpLnJlc2V0QW5pbWF0aW9uQmFja2dyb3VuZEFuaW1hdG9yKCk7CisgICAgICAgIGZvciAoaW50IHN0YWNrQm94TmR4ID0gbVN0YWNrQm94ZXMuc2l6ZSgpIC0gMTsgc3RhY2tCb3hOZHggPj0gMDsgLS1zdGFja0JveE5keCkgeworICAgICAgICAgICAgbVN0YWNrQm94ZXMuZ2V0KHN0YWNrQm94TmR4KS5yZXNldEFuaW1hdGlvbkJhY2tncm91bmRBbmltYXRvcigpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgYm9vbGVhbiBhbmltYXRlRGltTGF5ZXJzKCkgewogICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICBmb3IgKGludCBzdGFja05keCA9IG1TdGFja3Muc2l6ZSgpIC0gMTsgc3RhY2tOZHggPj0gMDsgLS1zdGFja05keCkgewotICAgICAgICAgICAgcmVzdWx0IHw9IG1TdGFja3MuZ2V0KHN0YWNrTmR4KS5hbmltYXRlRGltTGF5ZXJzKCk7CisgICAgICAgIGZvciAoaW50IHN0YWNrQm94TmR4ID0gbVN0YWNrQm94ZXMuc2l6ZSgpIC0gMTsgc3RhY2tCb3hOZHggPj0gMDsgLS1zdGFja0JveE5keCkgeworICAgICAgICAgICAgcmVzdWx0IHw9IG1TdGFja0JveGVzLmdldChzdGFja0JveE5keCkuYW5pbWF0ZURpbUxheWVycygpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgdm9pZCByZXNldERpbW1pbmcoKSB7Ci0gICAgICAgIGZvciAoaW50IHN0YWNrTmR4ID0gbVN0YWNrcy5zaXplKCkgLSAxOyBzdGFja05keCA+PSAwOyAtLXN0YWNrTmR4KSB7Ci0gICAgICAgICAgICBtU3RhY2tzLmdldChzdGFja05keCkucmVzZXREaW1taW5nVGFnKCk7CisgICAgICAgIGZvciAoaW50IHN0YWNrQm94TmR4ID0gbVN0YWNrQm94ZXMuc2l6ZSgpIC0gMTsgc3RhY2tCb3hOZHggPj0gMDsgLS1zdGFja0JveE5keCkgeworICAgICAgICAgICAgbVN0YWNrQm94ZXMuZ2V0KHN0YWNrQm94TmR4KS5yZXNldERpbW1pbmcoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2xlYW4gaXNEaW1taW5nKCkgewogICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICBmb3IgKGludCBzdGFja05keCA9IG1TdGFja3Muc2l6ZSgpIC0gMTsgc3RhY2tOZHggPj0gMDsgLS1zdGFja05keCkgewotICAgICAgICAgICAgcmVzdWx0IHw9IG1TdGFja3MuZ2V0KHN0YWNrTmR4KS5pc0RpbW1pbmcoKTsKKyAgICAgICAgZm9yIChpbnQgc3RhY2tCb3hOZHggPSBtU3RhY2tCb3hlcy5zaXplKCkgLSAxOyBzdGFja0JveE5keCA+PSAwOyAtLXN0YWNrQm94TmR4KSB7CisgICAgICAgICAgICByZXN1bHQgfD0gbVN0YWNrQm94ZXMuZ2V0KHN0YWNrQm94TmR4KS5pc0RpbW1pbmcoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIHZvaWQgc3RvcERpbW1pbmdJZk5lZWRlZCgpIHsKLSAgICAgICAgZm9yIChpbnQgc3RhY2tOZHggPSBtU3RhY2tzLnNpemUoKSAtIDE7IHN0YWNrTmR4ID49IDA7IC0tc3RhY2tOZHgpIHsKLSAgICAgICAgICAgIG1TdGFja3MuZ2V0KHN0YWNrTmR4KS5zdG9wRGltbWluZ0lmTmVlZGVkKCk7CisgICAgICAgIGZvciAoaW50IHN0YWNrQm94TmR4ID0gbVN0YWNrQm94ZXMuc2l6ZSgpIC0gMTsgc3RhY2tCb3hOZHggPj0gMDsgLS1zdGFja0JveE5keCkgeworICAgICAgICAgICAgbVN0YWNrQm94ZXMuZ2V0KHN0YWNrQm94TmR4KS5zdG9wRGltbWluZ0lmTmVlZGVkKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICB2b2lkIGNsb3NlKCkgewotICAgICAgICBmb3IgKGludCBzdGFja05keCA9IG1TdGFja3Muc2l6ZSgpIC0gMTsgc3RhY2tOZHggPj0gMDsgLS1zdGFja05keCkgewotICAgICAgICAgICAgbVN0YWNrcy5nZXQoc3RhY2tOZHgpLmNsb3NlKCk7CisgICAgICAgIGZvciAoaW50IHN0YWNrQm94TmR4ID0gbVN0YWNrQm94ZXMuc2l6ZSgpIC0gMTsgc3RhY2tCb3hOZHggPj0gMDsgLS1zdGFja0JveE5keCkgeworICAgICAgICAgICAgbVN0YWNrQm94ZXMuZ2V0KHN0YWNrQm94TmR4KS5jbG9zZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNzYsMTAgKzQ3Nyw5IEBACiAgICAgICAgICAgICBwdy5wcmludCgiLSIpOyBwdy5wcmludChtRGlzcGxheUluZm8ubGFyZ2VzdE5vbWluYWxBcHBXaWR0aCk7CiAgICAgICAgICAgICBwdy5wcmludCgieCIpOyBwdy5wcmludGxuKG1EaXNwbGF5SW5mby5sYXJnZXN0Tm9taW5hbEFwcEhlaWdodCk7CiAgICAgICAgICAgICBwdy5wcmludChzdWJQcmVmaXgpOyBwdy5wcmludCgibGF5b3V0TmVlZGVkPSIpOyBwdy5wcmludGxuKGxheW91dE5lZWRlZCk7Ci0gICAgICAgIGZvciAoaW50IHN0YWNrTmR4ID0gbVN0YWNrcy5zaXplKCkgLSAxOyBzdGFja05keCA+PSAwOyAtLXN0YWNrTmR4KSB7Ci0gICAgICAgICAgICBmaW5hbCBUYXNrU3RhY2sgc3RhY2sgPSBtU3RhY2tzLmdldChzdGFja05keCk7Ci0gICAgICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgibVN0YWNrc1siICsgc3RhY2tOZHggKyAiXSIpOyBwdy5wcmludGxuKHN0YWNrLm1TdGFja0lkKTsKLSAgICAgICAgICAgIHN0YWNrLmR1bXAocHJlZml4ICsgIiAgIiwgcHcpOworICAgICAgICBmb3IgKGludCBib3hOZHggPSAwOyBib3hOZHggPCBtU3RhY2tCb3hlcy5zaXplKCk7ICsrYm94TmR4KSB7CisgICAgICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgiU3RhY2tCb3ggIyIpOyBwdy5wcmludGxuKGJveE5keCk7CisgICAgICAgICAgICBtU3RhY2tCb3hlcy5nZXQoYm94TmR4KS5kdW1wKHByZWZpeCArICIgICIsIHB3KTsKICAgICAgICAgfQogICAgICAgICBpbnQgbmR4ID0gbnVtVG9rZW5zKCk7CiAgICAgICAgIGlmIChuZHggPiAwKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9EcmFnU3RhdGUuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0RyYWdTdGF0ZS5qYXZhCmluZGV4IGE3Mzc5MzkuLmVkYzdjOTMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0RyYWdTdGF0ZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0RyYWdTdGF0ZS5qYXZhCkBAIC0zMyw3ICszMyw2IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRyYWdFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXRDaGFubmVsOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlQ29udHJvbDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0Zha2VXaW5kb3dJbXBsLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9GYWtlV2luZG93SW1wbC5qYXZhCmluZGV4IDVhMzQ3MWIuLmMxOGVhMDEgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0Zha2VXaW5kb3dJbXBsLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vRmFrZVdpbmRvd0ltcGwuamF2YQpAQCAtMjEsMTEgKzIxLDkgQEAKIAogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXRDaGFubmVsOwogaW1wb3J0IGFuZHJvaWQudmlldy5JbnB1dEV2ZW50UmVjZWl2ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklucHV0UXVldWU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJQb2xpY3k7CiAKIHB1YmxpYyBmaW5hbCBjbGFzcyBGYWtlV2luZG93SW1wbCBpbXBsZW1lbnRzIFdpbmRvd01hbmFnZXJQb2xpY3kuRmFrZVdpbmRvdyB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9Gb2N1c2VkU3RhY2tGcmFtZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vRm9jdXNlZFN0YWNrRnJhbWUuamF2YQppbmRleCBmMWY1ZmU4Li5jYzQ4Yjg2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9Gb2N1c2VkU3RhY2tGcmFtZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0ZvY3VzZWRTdGFja0ZyYW1lLmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICBwcml2YXRlIGZpbmFsIFN1cmZhY2VDb250cm9sIG1TdXJmYWNlQ29udHJvbDsKICAgICBwcml2YXRlIGZpbmFsIFN1cmZhY2UgbVN1cmZhY2UgPSBuZXcgU3VyZmFjZSgpOwogICAgIHByaXZhdGUgZmluYWwgUmVjdCBtTGFzdEJvdW5kcyA9IG5ldyBSZWN0KCk7Ci0gICAgZmluYWwgUmVjdCBtQm91bmRzID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbUJvdW5kcyA9IG5ldyBSZWN0KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1UbXBEcmF3UmVjdCA9IG5ldyBSZWN0KCk7CiAKICAgICBwdWJsaWMgRm9jdXNlZFN0YWNrRnJhbWUoRGlzcGxheSBkaXNwbGF5LCBTdXJmYWNlU2Vzc2lvbiBzZXNzaW9uKSB7CkBAIC0xMzEsOSArMTMxLDkgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNldEJvdW5kcyhUYXNrU3RhY2sgc3RhY2spIHsKLSAgICAgICAgc3RhY2suZ2V0Qm91bmRzKG1Cb3VuZHMpOwotICAgICAgICBpZiAoZmFsc2UgJiYgREVCVUdfU1RBQ0spIFNsb2cuaShUQUcsICJzZXRCb3VuZHM6IGJvdW5kcz0iICsgbUJvdW5kcyk7CisgICAgcHVibGljIHZvaWQgc2V0Qm91bmRzKFJlY3QgYm91bmRzKSB7CisgICAgICAgIGlmIChmYWxzZSAmJiBERUJVR19TVEFDSykgU2xvZy5pKFRBRywgInNldEJvdW5kczogYm91bmRzPSIgKyBib3VuZHMpOworICAgICAgICBtQm91bmRzLnNldChib3VuZHMpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldExheWVyKGludCBsYXllcikgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vSW5wdXRNb25pdG9yLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9JbnB1dE1vbml0b3IuamF2YQppbmRleCA4MDNiOWFjLi4zZDJlYzQ1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9JbnB1dE1vbml0b3IuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9JbnB1dE1vbml0b3IuamF2YQpAQCAtNTgsOCArNTgsNiBAQAogICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1JbnB1dERldmljZXNSZWFkeU1vbml0b3IgPSBuZXcgT2JqZWN0KCk7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1JbnB1dERldmljZXNSZWFkeTsKIAotICAgIFJlY3QgbVRtcFJlY3QgPSBuZXcgUmVjdCgpOwotCiAgICAgcHVibGljIElucHV0TW9uaXRvcihXaW5kb3dNYW5hZ2VyU2VydmljZSBzZXJ2aWNlKSB7CiAgICAgICAgIG1TZXJ2aWNlID0gc2VydmljZTsKICAgICB9CkBAIC0xNzcsOCArMTc1LDcgQEAKICAgICAgICAgaWYgKG1vZGFsICYmIGNoaWxkLm1BcHBUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAvLyBMaW1pdCB0aGUgb3V0ZXIgdG91Y2ggdG8gdGhlIGFjdGl2aXR5IHN0YWNrIHJlZ2lvbi4KICAgICAgICAgICAgIGZsYWdzIHw9IFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZMQUdfTk9UX1RPVUNIX01PREFMOwotICAgICAgICAgICAgY2hpbGQuZ2V0U3RhY2tCb3VuZHMobVRtcFJlY3QpOwotICAgICAgICAgICAgaW5wdXRXaW5kb3dIYW5kbGUudG91Y2hhYmxlUmVnaW9uLnNldChtVG1wUmVjdCk7CisgICAgICAgICAgICBpbnB1dFdpbmRvd0hhbmRsZS50b3VjaGFibGVSZWdpb24uc2V0KGNoaWxkLmdldFN0YWNrQm91bmRzKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gTm90IG1vZGFsIG9yIGZ1bGwgc2NyZWVuIG1vZGFsCiAgICAgICAgICAgICBjaGlsZC5nZXRUb3VjaGFibGVSZWdpb24oaW5wdXRXaW5kb3dIYW5kbGUudG91Y2hhYmxlUmVnaW9uKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0tleWd1YXJkRGlzYWJsZUhhbmRsZXIuamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0tleWd1YXJkRGlzYWJsZUhhbmRsZXIuamF2YQppbmRleCA4NTlkZjUxLi5jMTQyMGE4IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9LZXlndWFyZERpc2FibGVIYW5kbGVyLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vS2V5Z3VhcmREaXNhYmxlSGFuZGxlci5qYXZhCkBAIC0yNCw3ICsyNCw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuVG9rZW5XYXRjaGVyOwotaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5QYWlyOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyUG9saWN5OwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vU3RhY2tCb3guamF2YSBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1N0YWNrQm94LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1MTkyNQotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1N0YWNrQm94LmphdmEKQEAgLTAsMCArMSw0MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci53bTsKKworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuSE9NRV9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJTZXJ2aWNlLkRFQlVHX1NUQUNLOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlclNlcnZpY2UuVEFHOworCitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKKworcHVibGljIGNsYXNzIFN0YWNrQm94IHsKKyAgICAvKiogVXNlZCB3aXRoIHtAbGluayBXaW5kb3dNYW5hZ2VyU2VydmljZSNjcmVhdGVTdGFja30uIERlcGVuZGVudCBvbiBDb25maWd1cmF0aW9uIExUUi9SVEwuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEFTS19TVEFDS19HT0VTX0JFRk9SRSA9IDA7CisgICAgLyoqIFVzZWQgd2l0aCB7QGxpbmsgV2luZG93TWFuYWdlclNlcnZpY2UjY3JlYXRlU3RhY2t9LiBEZXBlbmRlbnQgb24gQ29uZmlndXJhdGlvbiBMVFIvUlRMLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRBU0tfU1RBQ0tfR09FU19BRlRFUiA9IDE7CisgICAgLyoqIFVzZWQgd2l0aCB7QGxpbmsgV2luZG93TWFuYWdlclNlcnZpY2UjY3JlYXRlU3RhY2t9LiBIb3Jpem9udGFsIHRvIGxlZnQgb2YuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEFTS19TVEFDS19UT19MRUZUX09GID0gMjsKKyAgICAvKiogVXNlZCB3aXRoIHtAbGluayBXaW5kb3dNYW5hZ2VyU2VydmljZSNjcmVhdGVTdGFja30uIEhvcml6b250YWwgdG8gcmlnaHQgb2YuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEFTS19TVEFDS19UT19SSUdIVF9PRiA9IDM7CisgICAgLyoqIFVzZWQgd2l0aCB7QGxpbmsgV2luZG93TWFuYWdlclNlcnZpY2UjY3JlYXRlU3RhY2t9LiBWZXJ0aWNhbDogbG93ZXIgdC9iIFJlY3QgdmFsdWVzLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRBU0tfU1RBQ0tfR09FU19BQk9WRSA9IDQ7CisgICAgLyoqIFVzZWQgd2l0aCB7QGxpbmsgV2luZG93TWFuYWdlclNlcnZpY2UjY3JlYXRlU3RhY2t9LiBWZXJ0aWNhbDogaGlnaGVyIHQvYiBSZWN0IHZhbHVlcy4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUQVNLX1NUQUNLX0dPRVNfQkVMT1cgPSA1OworICAgIC8qKiBVc2VkIHdpdGgge0BsaW5rIFdpbmRvd01hbmFnZXJTZXJ2aWNlI2NyZWF0ZVN0YWNrfS4gUHV0IG9uIGEgaGlnaGVyIGxheWVyIG9uIGRpc3BsYXkuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEFTS19TVEFDS19HT0VTX09WRVIgPSA2OworICAgIC8qKiBVc2VkIHdpdGgge0BsaW5rIFdpbmRvd01hbmFnZXJTZXJ2aWNlI2NyZWF0ZVN0YWNrfS4gUHV0IG9uIGEgbG93ZXIgbGF5ZXIgb24gZGlzcGxheS4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUQVNLX1NUQUNLX0dPRVNfVU5ERVIgPSA3OworCisgICAgc3RhdGljIGludCBzQ3VycmVudEJveElkID0gMDsKKworICAgIC8qKiBVbmlxdWUgaWQgZm9yIHRoaXMgYm94ICovCisgICAgZmluYWwgaW50IG1TdGFja0JveElkOworCisgICAgLyoqIFRoZSBzZXJ2aWNlICovCisgICAgZmluYWwgV2luZG93TWFuYWdlclNlcnZpY2UgbVNlcnZpY2U7CisKKyAgICAvKiogVGhlIGRpc3BsYXkgdGhpcyBib3ggc2l0cyBpbi4gKi8KKyAgICBmaW5hbCBEaXNwbGF5Q29udGVudCBtRGlzcGxheUNvbnRlbnQ7CisKKyAgICAvKiogTm9uLW51bGwgaW5kaWNhdGVzIHRoaXMgaXMgbUZpcnN0IG9yIG1TZWNvbmQgb2YgYSBwYXJlbnQgU3RhY2tCb3guIE51bGwgaW5kaWNhdGVzIHRoaXMKKyAgICAgKiBpcyB0aGlzIGVudGlyZSBzaXplIG9mIG1EaXNwbGF5Q29udGVudC4gKi8KKyAgICBTdGFja0JveCBtUGFyZW50OworCisgICAgLyoqIEZpcnN0IGNoaWxkLCB0aGlzIGlzIG51bGwgZXhhY3RseSB3aGVuIG1TdGFjayBpcyBub24tbnVsbC4gKi8KKyAgICBTdGFja0JveCBtRmlyc3Q7CisKKyAgICAvKiogU2Vjb25kIGNoaWxkLCB0aGlzIGlzIG51bGwgZXhhY3RseSB3aGVuIG1TdGFjayBpcyBub24tbnVsbC4gKi8KKyAgICBTdGFja0JveCBtU2Vjb25kOworCisgICAgLyoqIFN0YWNrIG9mIFRhc2tzLCB0aGlzIGlzIG51bGwgZXhhY3RseSB3aGVuIG1GaXJzdCBhbmQgbVNlY29uZCBhcmUgbm9uLW51bGwuICovCisgICAgVGFza1N0YWNrIG1TdGFjazsKKworICAgIC8qKiBDb250ZW50IGxpbWl0cyByZWxhdGl2ZSB0byB0aGUgRGlzcGxheUNvbnRlbnQgdGhpcyBzaXRzIGluLiAqLworICAgIFJlY3QgbUJvdW5kcyA9IG5ldyBSZWN0KCk7CisKKyAgICAvKiogUmVsYXRpdmUgb3JpZW50YXRpb24gb2YgbUZpcnN0IGFuZCBtU2Vjb25kLiAqLworICAgIGJvb2xlYW4gbVZlcnRpY2FsOworCisgICAgLyoqIEZyYWN0aW9uIG9mIG1Cb3VuZHMgdG8gZGV2b3RlIHRvIG1GaXJzdCwgcmVtYWluZGVyIGdvZXMgdG8gbVNlY29uZCAqLworICAgIGZsb2F0IG1XZWlnaHQ7CisKKyAgICAvKiogRGlydHkgZmxhZy4gU29tZXRoaW5nIGluc2lkZSB0aGlzIG9yIHNvbWUgZGVzY2VuZGFudCBvZiB0aGlzIGhhcyBjaGFuZ2VkLiAqLworICAgIGJvb2xlYW4gbGF5b3V0TmVlZGVkOworCisgICAgLyoqIFRydWUgaWYgdGhpcyBTdGFja0JveCBzaXRzIGJlbG93IHRoZSBTdGF0dXMgQmFyLiAqLworICAgIGJvb2xlYW4gbVVuZGVyU3RhdHVzQmFyOworCisgICAgLyoqIFVzZWQgdG8ga2VlcCBmcm9tIHJlYWxsb2NhdGluZyBhIHRlbXBvcmFyeSBSZWN0IGZvciBwcm9wYWdhdGluZyBib3VuZHMgdG8gY2hpbGQgYm94ZXMgKi8KKyAgICBSZWN0IG1UbXBSZWN0ID0gbmV3IFJlY3QoKTsKKworICAgIFN0YWNrQm94KFdpbmRvd01hbmFnZXJTZXJ2aWNlIHNlcnZpY2UsIERpc3BsYXlDb250ZW50IGRpc3BsYXlDb250ZW50LCBTdGFja0JveCBwYXJlbnQpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChTdGFja0JveC5jbGFzcykgeworICAgICAgICAgICAgbVN0YWNrQm94SWQgPSBzQ3VycmVudEJveElkKys7CisgICAgICAgIH0KKworICAgICAgICBtU2VydmljZSA9IHNlcnZpY2U7CisgICAgICAgIG1EaXNwbGF5Q29udGVudCA9IGRpc3BsYXlDb250ZW50OworICAgICAgICBtUGFyZW50ID0gcGFyZW50OworICAgIH0KKworICAgIC8qKiBQcm9wYWdhdGUgI2xheW91dE5lZWRlZCBib3R0b20gdXAuICovCisgICAgdm9pZCBtYWtlRGlydHkoKSB7CisgICAgICAgIGxheW91dE5lZWRlZCA9IHRydWU7CisgICAgICAgIGlmIChtUGFyZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1QYXJlbnQubWFrZURpcnR5KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmUgaWYgYSBwYXJ0aWN1bGFyIFN0YWNrQm94IGlzIHRoaXMgb25lIG9yIGEgZGVzY2VuZGFudCBvZiB0aGlzIG9uZS4KKyAgICAgKiBAcGFyYW0gc3RhY2tCb3hJZCBUaGUgU3RhY2tCb3ggYmVpbmcgc2VhcmNoZWQgZm9yLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFN0YWNrQm94IG1hdGNoZXMgdGhpcyBvciBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzLgorICAgICAqLworICAgIGJvb2xlYW4gY29udGFpbnMoaW50IHN0YWNrQm94SWQpIHsKKyAgICAgICAgcmV0dXJuIG1TdGFja0JveElkID09IHN0YWNrQm94SWQgfHwKKyAgICAgICAgICAgICAgICAobVN0YWNrID09IG51bGwgJiYgIChtRmlyc3QuY29udGFpbnMoc3RhY2tCb3hJZCkgfHwgbVNlY29uZC5jb250YWlucyhzdGFja0JveElkKSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgc3RhY2tJZCBvZiB0aGUgc3RhY2sgdGhhdCBpbnRlcnNlY3RzIHRoZSBwYXNzZWQgcG9pbnQuCisgICAgICogQHBhcmFtIHggY29vcmRpbmF0ZSBvZiBwb2ludC4KKyAgICAgKiBAcGFyYW0geSBjb29yZGluYXRlIG9mIHBvaW50LgorICAgICAqIEByZXR1cm4gLTEgaWYgcG9pbnQgaXMgb3V0c2lkZSBvZiBtQm91bmRzLCBvdGhlcndpc2UgdGhlIHN0YWNrSWQgb2YgdGhlIGNvbnRhaW5pbmcgc3RhY2suCisgICAgICovCisgICAgaW50IHN0YWNrSWRGcm9tUG9pbnQoaW50IHgsIGludCB5KSB7CisgICAgICAgIGlmICghbUJvdW5kcy5jb250YWlucyh4LCB5KSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChtU3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG1TdGFjay5tU3RhY2tJZDsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3RhY2tJZCA9IG1GaXJzdC5zdGFja0lkRnJvbVBvaW50KHgsIHkpOworICAgICAgICBpZiAoc3RhY2tJZCA+PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhY2tJZDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbVNlY29uZC5zdGFja0lkRnJvbVBvaW50KHgsIHkpOworICAgIH0KKworICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhpcyBTdGFja0JveCBpcyB0aGUgZmlyc3QgY2hpbGQgb3Igc2Vjb25kIGNoaWxkLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjaGlsZC4KKyAgICAgKi8KKyAgICBib29sZWFuIGlzRmlyc3RDaGlsZCgpIHsKKyAgICAgICAgcmV0dXJuIG1QYXJlbnQgIT0gbnVsbCAmJiBtUGFyZW50Lm1GaXJzdCA9PSB0aGlzOworICAgIH0KKworICAgIC8qKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIHNwZWNpZmllZCBUYXNrU3RhY2sgaWYgaXQgaXMgY29udGFpbmVkIGluIHRoaXMgU3RhY2tCb3guCisgICAgICogQHBhcmFtIHN0YWNrSWQgdGhlIFRhc2tTdGFjayB0byBmaW5kIHRoZSBib3VuZHMgb2YuCisgICAgICogQHJldHVybiBhIG5ldyBSZWN0IHdpdGggdGhlIGJvdW5kcyBvZiBzdGFja0lkIGlmIGl0IGlzIHdpdGhpbiB0aGlzIFN0YWNrQm94LCBudWxsIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBSZWN0IGdldFN0YWNrQm91bmRzKGludCBzdGFja0lkKSB7CisgICAgICAgIGlmIChtU3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG1TdGFjay5tU3RhY2tJZCA9PSBzdGFja0lkID8gbmV3IFJlY3QobUJvdW5kcykgOiBudWxsOworICAgICAgICB9CisgICAgICAgIFJlY3QgYm91bmRzID0gbUZpcnN0LmdldFN0YWNrQm91bmRzKHN0YWNrSWQpOworICAgICAgICBpZiAoYm91bmRzICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBib3VuZHM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1TZWNvbmQuZ2V0U3RhY2tCb3VuZHMoc3RhY2tJZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IFRhc2tTdGFjayByZWxhdGl2ZSB0byBhIHNwZWNpZmllZCBvbmUgYnkgc3BsaXR0aW5nIHRoZSBTdGFja0JveCBjb250YWluaW5nCisgICAgICogdGhlIHNwZWNpZmllZCBUYXNrU3RhY2sgaW50byB0d28gY2hpbGRyZW4uIFRoZSBzaXplIGFuZCBwb3NpdGlvbiBlYWNoIG9mIHRoZSBuZXcgU3RhY2tCb3hlcworICAgICAqIGlzIGRldGVybWluZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLgorICAgICAqIEBwYXJhbSBzdGFja0lkIFRoZSBpZCBvZiB0aGUgbmV3IFRhc2tTdGFjayB0byBjcmVhdGUuCisgICAgICogQHBhcmFtIHJlbGF0aXZlU3RhY2tCb3hJZCBUaGUgaWQgb2YgdGhlIFN0YWNrQm94IHRvIHBsYWNlIHRoZSBuZXcgVGFza1N0YWNrIG5leHQgdG8uCisgICAgICogQHBhcmFtIHBvc2l0aW9uIE9uZSBvZiB0aGUgc3RhdGljIFRBU0tfU1RBQ0tfR09FU194eHggcG9zaXRpb25zIGRlZmluZWQgaW4gdGhpcyBjbGFzcy4KKyAgICAgKiBAcGFyYW0gd2VpZ2h0IFRoZSBwZXJjZW50YWdlIHNpemUgb2YgdGhlIHBhcmVudCBTdGFja0JveCB0byBkZXZvdGUgdG8gdGhlIG5ldyBUYXNrU3RhY2suCisgICAgICogQHJldHVybiBUaGUgbmV3IFRhc2tTdGFjay4KKyAgICAgKi8KKyAgICBUYXNrU3RhY2sgc3BsaXQoaW50IHN0YWNrSWQsIGludCByZWxhdGl2ZVN0YWNrQm94SWQsIGludCBwb3NpdGlvbiwgZmxvYXQgd2VpZ2h0KSB7CisgICAgICAgIGlmIChtU3RhY2tCb3hJZCAhPSByZWxhdGl2ZVN0YWNrQm94SWQpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSB0YXJnZXRlZCBTdGFja0JveC4KKyAgICAgICAgICAgIGlmIChtU3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gUHJvcGFnYXRlIHRoZSBzcGxpdCB0byBzZWUgaWYgdGhlIHRhcmdldGVkIFN0YWNrQm94IGlzIGluIGVpdGhlciBzdWIgYm94LgorICAgICAgICAgICAgVGFza1N0YWNrIHN0YWNrID0gbUZpcnN0LnNwbGl0KHN0YWNrSWQsIHJlbGF0aXZlU3RhY2tCb3hJZCwgcG9zaXRpb24sIHdlaWdodCk7CisgICAgICAgICAgICBpZiAoc3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGFjazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtU2Vjb25kLnNwbGl0KHN0YWNrSWQsIHJlbGF0aXZlU3RhY2tCb3hJZCwgcG9zaXRpb24sIHdlaWdodCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGb3VuZCBpdCEKKyAgICAgICAgVGFza1N0YWNrIHN0YWNrID0gbmV3IFRhc2tTdGFjayhtU2VydmljZSwgc3RhY2tJZCwgbURpc3BsYXlDb250ZW50KTsKKyAgICAgICAgVGFza1N0YWNrIGZpcnN0U3RhY2s7CisgICAgICAgIFRhc2tTdGFjayBzZWNvbmRTdGFjazsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09IFRBU0tfU1RBQ0tfR09FU19CRUZPUkUpIHsKKyAgICAgICAgICAgIC8vIFRPRE86IFRlc3QgQ29uZmlndXJhdGlvbiBoZXJlIGZvciBMVFIvUlRMLgorICAgICAgICAgICAgcG9zaXRpb24gPSBUQVNLX1NUQUNLX1RPX0xFRlRfT0Y7CisgICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT0gVEFTS19TVEFDS19HT0VTX0FGVEVSKSB7CisgICAgICAgICAgICAvLyBUT0RPOiBUZXN0IENvbmZpZ3VyYXRpb24gaGVyZSBmb3IgTFRSL1JUTC4KKyAgICAgICAgICAgIHBvc2l0aW9uID0gVEFTS19TVEFDS19UT19SSUdIVF9PRjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY2FzZSBUQVNLX1NUQUNLX1RPX0xFRlRfT0Y6CisgICAgICAgICAgICBjYXNlIFRBU0tfU1RBQ0tfVE9fUklHSFRfT0Y6CisgICAgICAgICAgICAgICAgbVZlcnRpY2FsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IFRBU0tfU1RBQ0tfVE9fTEVGVF9PRikgeworICAgICAgICAgICAgICAgICAgICBtV2VpZ2h0ID0gd2VpZ2h0OworICAgICAgICAgICAgICAgICAgICBmaXJzdFN0YWNrID0gc3RhY2s7CisgICAgICAgICAgICAgICAgICAgIHNlY29uZFN0YWNrID0gbVN0YWNrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1XZWlnaHQgPSAxLjBmIC0gd2VpZ2h0OworICAgICAgICAgICAgICAgICAgICBmaXJzdFN0YWNrID0gbVN0YWNrOworICAgICAgICAgICAgICAgICAgICBzZWNvbmRTdGFjayA9IHN0YWNrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVEFTS19TVEFDS19HT0VTX0FCT1ZFOgorICAgICAgICAgICAgY2FzZSBUQVNLX1NUQUNLX0dPRVNfQkVMT1c6CisgICAgICAgICAgICAgICAgbVZlcnRpY2FsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gVEFTS19TVEFDS19HT0VTX0FCT1ZFKSB7CisgICAgICAgICAgICAgICAgICAgIG1XZWlnaHQgPSB3ZWlnaHQ7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0U3RhY2sgPSBzdGFjazsKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kU3RhY2sgPSBtU3RhY2s7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbVdlaWdodCA9IDEuMGYgLSB3ZWlnaHQ7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0U3RhY2sgPSBtU3RhY2s7CisgICAgICAgICAgICAgICAgICAgIHNlY29uZFN0YWNrID0gc3RhY2s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgbUZpcnN0ID0gbmV3IFN0YWNrQm94KG1TZXJ2aWNlLCBtRGlzcGxheUNvbnRlbnQsIHRoaXMpOworICAgICAgICBmaXJzdFN0YWNrLm1TdGFja0JveCA9IG1GaXJzdDsKKyAgICAgICAgbUZpcnN0Lm1TdGFjayA9IGZpcnN0U3RhY2s7CisKKyAgICAgICAgbVNlY29uZCA9IG5ldyBTdGFja0JveChtU2VydmljZSwgbURpc3BsYXlDb250ZW50LCB0aGlzKTsKKyAgICAgICAgc2Vjb25kU3RhY2subVN0YWNrQm94ID0gbVNlY29uZDsKKyAgICAgICAgbVNlY29uZC5tU3RhY2sgPSBzZWNvbmRTdGFjazsKKworICAgICAgICBtU3RhY2sgPSBudWxsOworICAgICAgICByZXR1cm4gc3RhY2s7CisgICAgfQorCisgICAgLyoqIFJldHVybiB0aGUgc3RhY2tJZCBvZiB0aGUgZmlyc3QgbUZpcnN0IFN0YWNrQm94IHdpdGggYSBub24tbnVsbCBtU3RhY2sgKi8KKyAgICBpbnQgZ2V0U3RhY2tJZCgpIHsKKyAgICAgICAgaWYgKG1TdGFjayAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbVN0YWNrLm1TdGFja0lkOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtRmlyc3QuZ2V0U3RhY2tJZCgpOworICAgIH0KKworICAgIC8qKiBSZW1vdmUgdGhpcyBib3ggYW5kIHByb3BhZ2F0ZSBpdHMgc2libGluZydzIGNvbnRlbnQgdXAgdG8gdGhlaXIgcGFyZW50LgorICAgICAqIEByZXR1cm4gVGhlIGZpcnN0IHN0YWNrSWQgb2YgdGhlIHJlc3VsdGluZyBTdGFja0JveC4gKi8KKyAgICBpbnQgcmVtb3ZlKCkgeworICAgICAgICBtRGlzcGxheUNvbnRlbnQubGF5b3V0TmVlZGVkID0gdHJ1ZTsKKworICAgICAgICBpZiAobVBhcmVudCA9PSBudWxsKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSB0b3AtcGxhbmUgc3RhY2suCisgICAgICAgICAgICBpZiAoREVCVUdfU1RBQ0spIFNsb2cuaShUQUcsICJTdGFja0JveC5yZW1vdmU6IHJlbW92aW5nIHRvcCBwbGFuZS4iKTsKKyAgICAgICAgICAgIG1EaXNwbGF5Q29udGVudC5yZW1vdmVTdGFja0JveCh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBIT01FX1NUQUNLX0lEOworICAgICAgICB9CisKKyAgICAgICAgU3RhY2tCb3ggc2libGluZyA9IGlzRmlyc3RDaGlsZCgpID8gbVBhcmVudC5tU2Vjb25kIDogbVBhcmVudC5tRmlyc3Q7CisgICAgICAgIFN0YWNrQm94IGdyYW5kcGFyZW50ID0gbVBhcmVudC5tUGFyZW50OworICAgICAgICBzaWJsaW5nLm1QYXJlbnQgPSBncmFuZHBhcmVudDsKKyAgICAgICAgaWYgKGdyYW5kcGFyZW50ID09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIG1QYXJlbnQgaXMgYSB0b3AtcGxhbmUgc3RhY2suIE5vdyBzaWJsaW5nIHdpbGwgYmUuCisgICAgICAgICAgICBpZiAoREVCVUdfU1RBQ0spIFNsb2cuaShUQUcsICJTdGFja0JveC5yZW1vdmU6IGdyYW5kcGFyZW50IG51bGwiKTsKKyAgICAgICAgICAgIG1EaXNwbGF5Q29udGVudC5yZW1vdmVTdGFja0JveChtUGFyZW50KTsKKyAgICAgICAgICAgIG1EaXNwbGF5Q29udGVudC5hZGRTdGFja0JveChzaWJsaW5nLCB0cnVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChERUJVR19TVEFDSykgU2xvZy5pKFRBRywgIlN0YWNrQm94LnJlbW92ZTogZ3JhbmRwYXJlbnQgZ2V0dGluZyBzaWJsaW5nIik7CisgICAgICAgICAgICBpZiAobVBhcmVudC5pc0ZpcnN0Q2hpbGQoKSkgeworICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50Lm1GaXJzdCA9IHNpYmxpbmc7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50Lm1TZWNvbmQgPSBzaWJsaW5nOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBzaWJsaW5nLmdldFN0YWNrSWQoKTsKKyAgICB9CisKKyAgICBib29sZWFuIHJlc2l6ZShpbnQgc3RhY2tCb3hJZCwgZmxvYXQgd2VpZ2h0KSB7CisgICAgICAgIGlmIChtU3RhY2tCb3hJZCAhPSBzdGFja0JveElkKSB7CisgICAgICAgICAgICByZXR1cm4gbVN0YWNrID09IG51bGwgJiYKKyAgICAgICAgICAgICAgICAgICAgKG1GaXJzdC5yZXNpemUoc3RhY2tCb3hJZCwgd2VpZ2h0KSB8fCBtU2Vjb25kLnJlc2l6ZShzdGFja0JveElkLCB3ZWlnaHQpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBEb24ndCBjaGFuZ2Ugd2VpZ2h0IG9uIHRvcG1vc3Qgc3RhY2suCisgICAgICAgIGlmIChtUGFyZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1QYXJlbnQubVdlaWdodCA9IGlzRmlyc3RDaGlsZCgpID8gd2VpZ2h0IDogMS4wZiAtIHdlaWdodDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKiogSWYgdGhpcyBpcyBhIHRlcm1pbmFsIFN0YWNrQm94IChjb250YWlucyBhIFRhc2tTdGFjaykgc2V0IHRoZSBib3VuZHMuCisgICAgICogQHBhcmFtIGJvdW5kcyBUaGUgcmVjdGFuZ2xlIHRvIHNldCB0aGUgYm91bmRzIHRvLgorICAgICAqIEBwYXJhbSB1bmRlclN0YXR1c0JhciBUcnVlIGlmIHRoZSBTdGFja0JveCBpcyBkaXJlY3RseSBiZWxvdyB0aGUgU3RhdHVzIEJhci4KKyAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGJvdW5kcyBjaGFuZ2VkLCBmYWxzZSBvdGhlcndpc2UuICovCisgICAgYm9vbGVhbiBzZXRTdGFja0JveFNpemVzKFJlY3QgYm91bmRzLCBib29sZWFuIHVuZGVyU3RhdHVzQmFyKSB7CisgICAgICAgIGJvb2xlYW4gY2hhbmdlID0gZmFsc2U7CisgICAgICAgIGlmIChtVW5kZXJTdGF0dXNCYXIgIT0gdW5kZXJTdGF0dXNCYXIpIHsKKyAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7CisgICAgICAgICAgICBtVW5kZXJTdGF0dXNCYXIgPSB1bmRlclN0YXR1c0JhcjsKKyAgICAgICAgfQorICAgICAgICBpZiAobVN0YWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgIGNoYW5nZSB8PSAhbUJvdW5kcy5lcXVhbHMoYm91bmRzKTsKKyAgICAgICAgICAgIGlmIChjaGFuZ2UpIHsKKyAgICAgICAgICAgICAgICBtQm91bmRzLnNldChib3VuZHMpOworICAgICAgICAgICAgICAgIG1TdGFjay5zZXRCb3VuZHMoYm91bmRzLCB1bmRlclN0YXR1c0Jhcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtVG1wUmVjdC5zZXQoYm91bmRzKTsKKyAgICAgICAgICAgIGlmIChtVmVydGljYWwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gYm91bmRzLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGludCBmaXJzdEhlaWdodCA9IChpbnQpKGhlaWdodCAqIG1XZWlnaHQpOworICAgICAgICAgICAgICAgIG1UbXBSZWN0LmJvdHRvbSA9IGJvdW5kcy50b3AgKyBmaXJzdEhlaWdodDsKKyAgICAgICAgICAgICAgICBjaGFuZ2UgfD0gbUZpcnN0LnNldFN0YWNrQm94U2l6ZXMobVRtcFJlY3QsIHVuZGVyU3RhdHVzQmFyKTsKKyAgICAgICAgICAgICAgICBtVG1wUmVjdC50b3AgPSBtVG1wUmVjdC5ib3R0b207CisgICAgICAgICAgICAgICAgbVRtcFJlY3QuYm90dG9tID0gYm91bmRzLnRvcCArIGhlaWdodDsKKyAgICAgICAgICAgICAgICBjaGFuZ2UgfD0gbVNlY29uZC5zZXRTdGFja0JveFNpemVzKG1UbXBSZWN0LCBmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZpbmFsIGludCB3aWR0aCA9IGJvdW5kcy53aWR0aCgpOworICAgICAgICAgICAgICAgIGludCBmaXJzdFdpZHRoID0gKGludCkod2lkdGggKiBtV2VpZ2h0KTsKKyAgICAgICAgICAgICAgICBtVG1wUmVjdC5yaWdodCA9IGJvdW5kcy5sZWZ0ICsgZmlyc3RXaWR0aDsKKyAgICAgICAgICAgICAgICBjaGFuZ2UgfD0gbUZpcnN0LnNldFN0YWNrQm94U2l6ZXMobVRtcFJlY3QsIHVuZGVyU3RhdHVzQmFyKTsKKyAgICAgICAgICAgICAgICBtVG1wUmVjdC5sZWZ0ID0gbVRtcFJlY3QucmlnaHQ7CisgICAgICAgICAgICAgICAgbVRtcFJlY3QucmlnaHQgPSBib3VuZHMubGVmdCArIHdpZHRoOworICAgICAgICAgICAgICAgIGNoYW5nZSB8PSBtU2Vjb25kLnNldFN0YWNrQm94U2l6ZXMobVRtcFJlY3QsIHVuZGVyU3RhdHVzQmFyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2hhbmdlOworICAgIH0KKworICAgIHZvaWQgcmVzZXRBbmltYXRpb25CYWNrZ3JvdW5kQW5pbWF0b3IoKSB7CisgICAgICAgIGlmIChtU3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgbVN0YWNrLnJlc2V0QW5pbWF0aW9uQmFja2dyb3VuZEFuaW1hdG9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbUZpcnN0LnJlc2V0QW5pbWF0aW9uQmFja2dyb3VuZEFuaW1hdG9yKCk7CisgICAgICAgIG1TZWNvbmQucmVzZXRBbmltYXRpb25CYWNrZ3JvdW5kQW5pbWF0b3IoKTsKKyAgICB9CisKKyAgICBib29sZWFuIGFuaW1hdGVEaW1MYXllcnMoKSB7CisgICAgICAgIGlmIChtU3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG1TdGFjay5hbmltYXRlRGltTGF5ZXJzKCk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBtRmlyc3QuYW5pbWF0ZURpbUxheWVycygpOworICAgICAgICByZXN1bHQgfD0gbVNlY29uZC5hbmltYXRlRGltTGF5ZXJzKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCByZXNldERpbW1pbmcoKSB7CisgICAgICAgIGlmIChtU3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgbVN0YWNrLnJlc2V0RGltbWluZ1RhZygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1GaXJzdC5yZXNldERpbW1pbmcoKTsKKyAgICAgICAgbVNlY29uZC5yZXNldERpbW1pbmcoKTsKKyAgICB9CisKKyAgICBib29sZWFuIGlzRGltbWluZygpIHsKKyAgICAgICAgaWYgKG1TdGFjayAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbVN0YWNrLmlzRGltbWluZygpOworICAgICAgICB9CisgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gbUZpcnN0LmlzRGltbWluZygpOworICAgICAgICByZXN1bHQgfD0gbVNlY29uZC5pc0RpbW1pbmcoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIHN0b3BEaW1taW5nSWZOZWVkZWQoKSB7CisgICAgICAgIGlmIChtU3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgbVN0YWNrLnN0b3BEaW1taW5nSWZOZWVkZWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtRmlyc3Quc3RvcERpbW1pbmdJZk5lZWRlZCgpOworICAgICAgICBtU2Vjb25kLnN0b3BEaW1taW5nSWZOZWVkZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIHN3aXRjaFVzZXJTdGFja3MoaW50IHVzZXJJZCkgeworICAgICAgICBpZiAobVN0YWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1TdGFjay5zd2l0Y2hVc2VyKHVzZXJJZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbUZpcnN0LnN3aXRjaFVzZXJTdGFja3ModXNlcklkKTsKKyAgICAgICAgbVNlY29uZC5zd2l0Y2hVc2VyU3RhY2tzKHVzZXJJZCk7CisgICAgfQorCisgICAgdm9pZCBjbG9zZSgpIHsKKyAgICAgICAgaWYgKG1TdGFjayAhPSBudWxsKSB7CisgICAgICAgICAgICBtU3RhY2subURpbUxheWVyLm1EaW1TdXJmYWNlLmRlc3Ryb3koKTsKKyAgICAgICAgICAgIG1TdGFjay5tQW5pbWF0aW9uQmFja2dyb3VuZFN1cmZhY2UubURpbVN1cmZhY2UuZGVzdHJveSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1GaXJzdC5jbG9zZSgpOworICAgICAgICBtU2Vjb25kLmNsb3NlKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZHVtcChTdHJpbmcgcHJlZml4LCBQcmludFdyaXRlciBwdykgeworICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgibVBhcmVudD0iKTsgcHcucHJpbnRsbihtUGFyZW50KTsKKyAgICAgICAgcHcucHJpbnQocHJlZml4KTsgcHcucHJpbnQoIm1Cb3VuZHM9Iik7IHB3LnByaW50KG1Cb3VuZHMudG9TaG9ydFN0cmluZygpKTsKKyAgICAgICAgICAgIHB3LnByaW50KCIgbVZlcnRpY2FsPSIpOyBwdy5wcmludChtVmVydGljYWwpOworICAgICAgICAgICAgcHcucHJpbnQoIiBsYXlvdXROZWVkZWQ9Iik7IHB3LnByaW50bG4obGF5b3V0TmVlZGVkKTsKKyAgICAgICAgaWYgKG1GaXJzdCAhPSBudWxsKSB7CisgICAgICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgibUZpcnN0PSIpOyBwdy5wcmludGxuKFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKG1GaXJzdCkpOworICAgICAgICAgICAgbUZpcnN0LmR1bXAocHJlZml4ICsgIiAgIiwgcHcpOworICAgICAgICAgICAgcHcucHJpbnQocHJlZml4KTsgcHcucHJpbnQoIm1TZWNvbmQ9Iik7IHB3LnByaW50bG4oU3lzdGVtLmlkZW50aXR5SGFzaENvZGUobVNlY29uZCkpOworICAgICAgICAgICAgbVNlY29uZC5kdW1wKHByZWZpeCArICIgICIsIHB3KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJtU3RhY2s9Iik7IHB3LnByaW50bG4obVN0YWNrKTsKKyAgICAgICAgICAgIG1TdGFjay5kdW1wKHByZWZpeCArICIgICIsIHB3KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIGlmIChtU3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuICJCb3h7IiArIGhhc2hDb2RlKCkgKyAiIHN0YWNrPSIgKyBtU3RhY2subVN0YWNrSWQgKyAifSI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJCb3h7IiArIGhhc2hDb2RlKCkgKyAiIHBhcmVudD0iICsgU3lzdGVtLmlkZW50aXR5SGFzaENvZGUobVBhcmVudCkKKyAgICAgICAgICAgICAgICArICIgZmlyc3Q9IiArIFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKG1GaXJzdCkKKyAgICAgICAgICAgICAgICArICIgc2Vjb25kPSIgKyBTeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZShtU2Vjb25kKSArICJ9IjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9UYXNrLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9UYXNrLmphdmEKaW5kZXggMTNmZGJjOC4uYTE3MDRhNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFzay5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2suamF2YQpAQCAtMTcsNyArMTcsNiBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIud207CiAKIGltcG9ydCBhbmRyb2lkLnV0aWwuRXZlbnRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLkV2ZW50TG9nVGFnczsKIAogY2xhc3MgVGFzayB7CiAvLyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBUQUcgPSAiVGFza0dyb3VwIjsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2tTdGFjay5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFza1N0YWNrLmphdmEKaW5kZXggZGYxZDEwOC4uY2IyOWRmNCAxMDA2NDQKLS0tIGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFza1N0YWNrLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFza1N0YWNrLmphdmEKQEAgLTI2LDYgKzI2LDggQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuRXZlbnRMb2dUYWdzOwogCitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5IT01FX1NUQUNLX0lEOworCiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogCkBAIC00Nyw5ICs0OSw4IEBACiAgICAgICogbVRhc2tIaXN0b3J5IGluIHRoZSBBY3Rpdml0eVN0YWNrIHdpdGggdGhlIHNhbWUgbVN0YWNrSWQgKi8KICAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxUYXNrPiBtVGFza3MgPSBuZXcgQXJyYXlMaXN0PFRhc2s+KCk7CiAKLSAgICAvKiogQ29udGVudCBsaW1pdHMgcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlDb250ZW50IHRoaXMgc2l0cyBpbi4gRW1wdHkgaW5kaWNhdGVzIGZ1bGxzY3JlZW4sCi0gICAgICogTm9uZW1wdHkgaXMgc2l6ZSBvZiB0aGlzIFRhc2tTdGFjayBidXQgaXMgYWxzbyB1c2VkIHRvIHNjYWxlIGlmIERpc3BsYXlDb250ZW50IGNoYW5nZXMuICovCi0gICAgUmVjdCBtQm91bmRzID0gbmV3IFJlY3QoKTsKKyAgICAvKiogVGhlIFN0YWNrQm94IHRoaXMgc2l0cyBpbi4gKi8KKyAgICBTdGFja0JveCBtU3RhY2tCb3g7CiAKICAgICAvKiogVXNlZCB0byBzdXBwb3J0IHtAbGluayBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMjRkxBR19ESU1fQkVISU5EfSAqLwogICAgIGZpbmFsIERpbUxheWVyIG1EaW1MYXllcjsKQEAgLTczLDkgKzc0LDYgQEAKICAgICAgICAgbURpc3BsYXlDb250ZW50ID0gZGlzcGxheUNvbnRlbnQ7CiAgICAgICAgIG1EaW1MYXllciA9IG5ldyBEaW1MYXllcihzZXJ2aWNlLCB0aGlzKTsKICAgICAgICAgbUFuaW1hdGlvbkJhY2tncm91bmRTdXJmYWNlID0gbmV3IERpbUxheWVyKHNlcnZpY2UsIHRoaXMpOwotICAgICAgICAvLyBUT0RPOiByZW1vdmUgYm91bmRzIGZyb20gbG9nLCB0aGV5IGFyZSBhbHdheXMgMC4KLSAgICAgICAgRXZlbnRMb2cud3JpdGVFdmVudChFdmVudExvZ1RhZ3MuV01fU1RBQ0tfQ1JFQVRFRCwgc3RhY2tJZCwgbUJvdW5kcy5sZWZ0LCBtQm91bmRzLnRvcCwKLSAgICAgICAgICAgICAgICBtQm91bmRzLnJpZ2h0LCBtQm91bmRzLmJvdHRvbSk7CiAgICAgfQogCiAgICAgRGlzcGxheUNvbnRlbnQgZ2V0RGlzcGxheUNvbnRlbnQoKSB7CkBAIC04Niw2NCArODQsMTIgQEAKICAgICAgICAgcmV0dXJuIG1UYXNrczsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgcmVzaXplV2luZG93cygpIHsKLSAgICAgICAgZmluYWwgYm9vbGVhbiB1bmRlclN0YXR1c0JhciA9IG1Cb3VuZHMudG9wID09IDA7Ci0KLSAgICAgICAgZmluYWwgQXJyYXlMaXN0PFdpbmRvd1N0YXRlPiByZXNpemluZ1dpbmRvd3MgPSBtU2VydmljZS5tUmVzaXppbmdXaW5kb3dzOwotICAgICAgICBmb3IgKGludCB0YXNrTmR4ID0gbVRhc2tzLnNpemUoKSAtIDE7IHRhc2tOZHggPj0gMDsgLS10YXNrTmR4KSB7Ci0gICAgICAgICAgICBmaW5hbCBBcnJheUxpc3Q8QXBwV2luZG93VG9rZW4+IGFjdGl2aXRpZXMgPSBtVGFza3MuZ2V0KHRhc2tOZHgpLm1BcHBUb2tlbnM7Ci0gICAgICAgICAgICBmb3IgKGludCBhY3Rpdml0eU5keCA9IGFjdGl2aXRpZXMuc2l6ZSgpIC0gMTsgYWN0aXZpdHlOZHggPj0gMDsgLS1hY3Rpdml0eU5keCkgewotICAgICAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxXaW5kb3dTdGF0ZT4gd2luZG93cyA9IGFjdGl2aXRpZXMuZ2V0KGFjdGl2aXR5TmR4KS5hbGxBcHBXaW5kb3dzOwotICAgICAgICAgICAgICAgIGZvciAoaW50IHdpbk5keCA9IHdpbmRvd3Muc2l6ZSgpIC0gMTsgd2luTmR4ID49IDA7IC0td2luTmR4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFdpbmRvd1N0YXRlIHdpbiA9IHdpbmRvd3MuZ2V0KHdpbk5keCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcmVzaXppbmdXaW5kb3dzLmNvbnRhaW5zKHdpbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXaW5kb3dNYW5hZ2VyU2VydmljZS5ERUJVR19SRVNJWkUpIFNsb2cuZChUQUcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRCb3VuZHM6IFJlc2l6aW5nICIgKyB3aW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXppbmdXaW5kb3dzLmFkZCh3aW4pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHdpbi5tVW5kZXJTdGF0dXNCYXIgPSB1bmRlclN0YXR1c0JhcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBib29sZWFuIGlzSG9tZVN0YWNrKCkgeworICAgICAgICByZXR1cm4gbVN0YWNrSWQgPT0gSE9NRV9TVEFDS19JRDsKICAgICB9CiAKLSAgICBib29sZWFuIHNldEJvdW5kcyhSZWN0IGJvdW5kcykgewotICAgICAgICBpZiAobUJvdW5kcy5lcXVhbHMoYm91bmRzKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbURpbUxheWVyLnNldEJvdW5kcyhib3VuZHMpOwotICAgICAgICBtQW5pbWF0aW9uQmFja2dyb3VuZFN1cmZhY2Uuc2V0Qm91bmRzKGJvdW5kcyk7Ci0gICAgICAgIG1Cb3VuZHMuc2V0KGJvdW5kcyk7Ci0KLSAgICAgICAgcmVzaXplV2luZG93cygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGdldEJvdW5kcyhSZWN0IG91dCkgewotICAgICAgICBpZiAobUJvdW5kcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1EaXNwbGF5Q29udGVudC5nZXRMb2dpY2FsRGlzcGxheVJlY3Qob3V0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG91dC5zZXQobUJvdW5kcyk7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0LmludGVyc2VjdChtRGlzcGxheUNvbnRlbnQubUNvbnRlbnRSZWN0KTsKLSAgICB9Ci0KLSAgICBib29sZWFuIGlzRnVsbHNjcmVlbigpIHsKLSAgICAgICAgcmV0dXJuIG1Cb3VuZHMuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIHZvaWQgcmVzaXplQm91bmRzKGZsb2F0IG9sZFdpZHRoLCBmbG9hdCBvbGRIZWlnaHQsIGZsb2F0IG5ld1dpZHRoLCBmbG9hdCBuZXdIZWlnaHQpIHsKLSAgICAgICAgaWYgKG9sZFdpZHRoID09IG5ld1dpZHRoICYmIG9sZEhlaWdodCA9PSBuZXdIZWlnaHQpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBmbG9hdCB3aWR0aFNjYWxlID0gbmV3V2lkdGggLyBvbGRXaWR0aDsKLSAgICAgICAgZmxvYXQgaGVpZ2h0U2NhbGUgPSBuZXdIZWlnaHQgLyBvbGRIZWlnaHQ7Ci0gICAgICAgIG1Cb3VuZHMubGVmdCA9IChpbnQpKG1Cb3VuZHMubGVmdCAqIHdpZHRoU2NhbGUgKyAwLjUpOwotICAgICAgICBtQm91bmRzLnRvcCA9IChpbnQpKG1Cb3VuZHMudG9wICogaGVpZ2h0U2NhbGUgKyAwLjUpOwotICAgICAgICBtQm91bmRzLnJpZ2h0ID0gKGludCkobUJvdW5kcy5yaWdodCAqIHdpZHRoU2NhbGUgKyAwLjUpOwotICAgICAgICBtQm91bmRzLmJvdHRvbSA9IChpbnQpKG1Cb3VuZHMuYm90dG9tICogaGVpZ2h0U2NhbGUgKyAwLjUpOwotICAgICAgICByZXNpemVXaW5kb3dzKCk7CisgICAgYm9vbGVhbiBoYXNTaWJsaW5nKCkgeworICAgICAgICByZXR1cm4gbVN0YWNrQm94Lm1QYXJlbnQgIT0gbnVsbDsKICAgICB9CiAKICAgICAvKioKQEAgLTE1MSw3ICs5Nyw5IEBACiAgICAgICogQHBhcmFtIHRhc2sgVGhlIHRhc2sgdG8gYWRkLgogICAgICAqIEBwYXJhbSB0b1RvcCBXaGV0aGVyIHRvIGFkZCBpdCB0byB0aGUgdG9wIG9yIGJvdHRvbS4KICAgICAgKi8KLSAgICB2b2lkIGFkZFRhc2soVGFzayB0YXNrLCBib29sZWFuIHRvVG9wKSB7CisgICAgYm9vbGVhbiBhZGRUYXNrKFRhc2sgdGFzaywgYm9vbGVhbiB0b1RvcCkgeworICAgICAgICBtU3RhY2tCb3gubWFrZURpcnR5KCk7CisKICAgICAgICAgaW50IHN0YWNrTmR4OwogICAgICAgICBpZiAoIXRvVG9wKSB7CiAgICAgICAgICAgICBzdGFja05keCA9IDA7CkBAIC0xNzQsMjAgKzEyMiwyMCBAQAogCiAgICAgICAgIHRhc2subVN0YWNrID0gdGhpczsKICAgICAgICAgbURpc3BsYXlDb250ZW50LmFkZFRhc2sodGFzaywgdG9Ub3ApOwotICAgICAgICBtRGlzcGxheUNvbnRlbnQubW92ZVN0YWNrKHRoaXMsIHRydWUpOworICAgICAgICByZXR1cm4gbURpc3BsYXlDb250ZW50Lm1vdmVIb21lU3RhY2tCb3gobVN0YWNrSWQgPT0gSE9NRV9TVEFDS19JRCk7CiAgICAgfQogCi0gICAgdm9pZCBtb3ZlVGFza1RvVG9wKFRhc2sgdGFzaykgeworICAgIGJvb2xlYW4gbW92ZVRhc2tUb1RvcChUYXNrIHRhc2spIHsKICAgICAgICAgaWYgKERFQlVHX1RBU0tfTU9WRU1FTlQpIFNsb2cuZChUQUcsICJtb3ZlVGFza1RvVG9wOiB0YXNrPSIgKyB0YXNrICsgIiBDYWxsZXJzPSIKICAgICAgICAgICAgICAgICArIERlYnVnLmdldENhbGxlcnMoNikpOwogICAgICAgICBtVGFza3MucmVtb3ZlKHRhc2spOwotICAgICAgICBhZGRUYXNrKHRhc2ssIHRydWUpOworICAgICAgICByZXR1cm4gYWRkVGFzayh0YXNrLCB0cnVlKTsKICAgICB9CiAKLSAgICB2b2lkIG1vdmVUYXNrVG9Cb3R0b20oVGFzayB0YXNrKSB7CisgICAgYm9vbGVhbiBtb3ZlVGFza1RvQm90dG9tKFRhc2sgdGFzaykgewogICAgICAgICBpZiAoREVCVUdfVEFTS19NT1ZFTUVOVCkgU2xvZy5kKFRBRywgIm1vdmVUYXNrVG9Cb3R0b206IHRhc2s9IiArIHRhc2spOwogICAgICAgICBtVGFza3MucmVtb3ZlKHRhc2spOwotICAgICAgICBhZGRUYXNrKHRhc2ssIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGFkZFRhc2sodGFzaywgZmFsc2UpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTk3LDYgKzE0NSw3IEBACiAgICAgICovCiAgICAgdm9pZCByZW1vdmVUYXNrKFRhc2sgdGFzaykgewogICAgICAgICBpZiAoREVCVUdfVEFTS19NT1ZFTUVOVCkgU2xvZy5kKFRBRywgInJlbW92ZVRhc2s6IHRhc2s9IiArIHRhc2spOworICAgICAgICBtU3RhY2tCb3gubWFrZURpcnR5KCk7CiAgICAgICAgIG1UYXNrcy5yZW1vdmUodGFzayk7CiAgICAgICAgIG1EaXNwbGF5Q29udGVudC5yZW1vdmVUYXNrKHRhc2spOwogICAgIH0KQEAgLTIwNSw3ICsxNTQsNyBAQAogICAgICAgICBtQW5pbWF0aW9uQmFja2dyb3VuZFN1cmZhY2UuZGVzdHJveVN1cmZhY2UoKTsKICAgICAgICAgbURpbUxheWVyLmRlc3Ryb3lTdXJmYWNlKCk7CiAgICAgICAgIEV2ZW50TG9nLndyaXRlRXZlbnQoRXZlbnRMb2dUYWdzLldNX1NUQUNLX1JFTU9WRUQsIG1TdGFja0lkKTsKLSAgICAgICAgcmV0dXJuIG1EaXNwbGF5Q29udGVudC50b3BTdGFjaygpLm1TdGFja0lkOworICAgICAgICByZXR1cm4gbVN0YWNrQm94LnJlbW92ZSgpOwogICAgIH0KIAogICAgIHZvaWQgcmVzZXRBbmltYXRpb25CYWNrZ3JvdW5kQW5pbWF0b3IoKSB7CkBAIC0zMTAsNiArMjU5LDI4IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNldEJvdW5kcyhSZWN0IGJvdW5kcywgYm9vbGVhbiB1bmRlclN0YXR1c0JhcikgeworICAgICAgICBtRGltTGF5ZXIuc2V0Qm91bmRzKGJvdW5kcyk7CisgICAgICAgIG1BbmltYXRpb25CYWNrZ3JvdW5kU3VyZmFjZS5zZXRCb3VuZHMoYm91bmRzKTsKKworICAgICAgICBmaW5hbCBBcnJheUxpc3Q8V2luZG93U3RhdGU+IHJlc2l6aW5nV2luZG93cyA9IG1TZXJ2aWNlLm1SZXNpemluZ1dpbmRvd3M7CisgICAgICAgIGZvciAoaW50IHRhc2tOZHggPSBtVGFza3Muc2l6ZSgpIC0gMTsgdGFza05keCA+PSAwOyAtLXRhc2tOZHgpIHsKKyAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxBcHBXaW5kb3dUb2tlbj4gYWN0aXZpdGllcyA9IG1UYXNrcy5nZXQodGFza05keCkubUFwcFRva2VuczsKKyAgICAgICAgICAgIGZvciAoaW50IGFjdGl2aXR5TmR4ID0gYWN0aXZpdGllcy5zaXplKCkgLSAxOyBhY3Rpdml0eU5keCA+PSAwOyAtLWFjdGl2aXR5TmR4KSB7CisgICAgICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PFdpbmRvd1N0YXRlPiB3aW5kb3dzID0gYWN0aXZpdGllcy5nZXQoYWN0aXZpdHlOZHgpLmFsbEFwcFdpbmRvd3M7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgd2luTmR4ID0gd2luZG93cy5zaXplKCkgLSAxOyB3aW5OZHggPj0gMDsgLS13aW5OZHgpIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgV2luZG93U3RhdGUgd2luID0gd2luZG93cy5nZXQod2luTmR4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNpemluZ1dpbmRvd3MuY29udGFpbnMod2luKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdpbmRvd01hbmFnZXJTZXJ2aWNlLkRFQlVHX1JFU0laRSkgU2xvZy5kKFRBRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldEJvdW5kczogUmVzaXppbmcgIiArIHdpbik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNpemluZ1dpbmRvd3MuYWRkKHdpbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2luLm1VbmRlclN0YXR1c0JhciA9IHVuZGVyU3RhdHVzQmFyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc3dpdGNoVXNlcihpbnQgdXNlcklkKSB7CiAgICAgICAgIGludCB0b3AgPSBtVGFza3Muc2l6ZSgpOwogICAgICAgICBmb3IgKGludCB0YXNrTmR4ID0gMDsgdGFza05keCA8IHRvcDsgKyt0YXNrTmR4KSB7CkBAIC0zMjIsMTEgKzI5Myw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGNsb3NlKCkgewotICAgICAgICBtRGltTGF5ZXIubURpbVN1cmZhY2UuZGVzdHJveSgpOwotICAgICAgICBtQW5pbWF0aW9uQmFja2dyb3VuZFN1cmZhY2UubURpbVN1cmZhY2UuZGVzdHJveSgpOwotICAgIH0KLQogICAgIHB1YmxpYyB2b2lkIGR1bXAoU3RyaW5nIHByZWZpeCwgUHJpbnRXcml0ZXIgcHcpIHsKICAgICAgICAgcHcucHJpbnQocHJlZml4KTsgcHcucHJpbnQoIm1TdGFja0lkPSIpOyBwdy5wcmludGxuKG1TdGFja0lkKTsKICAgICAgICAgZm9yIChpbnQgdGFza05keCA9IDA7IHRhc2tOZHggPCBtVGFza3Muc2l6ZSgpOyArK3Rhc2tOZHgpIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd01hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IGU1MGQ2MWYuLjI4ZGRlMGQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd01hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93TWFuYWdlclNlcnZpY2UuamF2YQpAQCAtNDUsNiArNDUsNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5wb3dlci5TaHV0ZG93blRocmVhZDsKIAogaW1wb3J0IGFuZHJvaWQuTWFuaWZlc3Q7CitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrQm94SW5mbzsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXJOYXRpdmU7CiBpbXBvcnQgYW5kcm9pZC5hcHAuSUFjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5TdGF0dXNCYXJNYW5hZ2VyOwpAQCAtMjU1LDkgKzI1Niw2IEBACiAgICAgLyoqIEFtb3VudCBvZiB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRvIGRlbGF5IGJlZm9yZSBkZWNsYXJpbmcgYSB3aW5kb3cgZnJlZXplIHRpbWVvdXQuICovCiAgICAgc3RhdGljIGZpbmFsIGludCBXSU5ET1dfRlJFRVpFX1RJTUVPVVRfRFVSQVRJT04gPSAyMDAwOwogCi0gICAgLyoqIEFtb3VudCBvZiB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRvIGRlbGF5IGJlZm9yZSBkZWNsYXJpbmcgYSBzdGFydGluZyB3aW5kb3cgbGVha2VkLiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgU1RBUlRJTkdfV0lORE9XX1RJTUVPVVRfRFVSQVRJT04gPSAxMDAwMDsKLQogICAgIC8qKgogICAgICAqIElmIHRydWUsIHRoZSB3aW5kb3cgbWFuYWdlciB3aWxsIGRvIGl0cyBvd24gY3VzdG9tIGZyZWV6aW5nIGFuZCBnZW5lcmFsCiAgICAgICogbWFuYWdlbWVudCBvZiB0aGUgc2NyZWVuIGR1cmluZyByb3RhdGlvbi4KQEAgLTQzNCw4ICs0MzIsMTUgQEAKICAgICBpbnQgbVJvdGF0aW9uID0gMDsKICAgICBpbnQgbUZvcmNlZEFwcE9yaWVudGF0aW9uID0gQWN0aXZpdHlJbmZvLlNDUkVFTl9PUklFTlRBVElPTl9VTlNQRUNJRklFRDsKICAgICBib29sZWFuIG1BbHRPcmllbnRhdGlvbiA9IGZhbHNlOwotICAgIEFycmF5TGlzdDxJUm90YXRpb25XYXRjaGVyPiBtUm90YXRpb25XYXRjaGVycwotICAgICAgICAgICAgPSBuZXcgQXJyYXlMaXN0PElSb3RhdGlvbldhdGNoZXI+KCk7CisgICAgY2xhc3MgUm90YXRpb25XYXRjaGVyIHsKKyAgICAgICAgSVJvdGF0aW9uV2F0Y2hlciB3YXRjaGVyOworICAgICAgICBJQmluZGVyLkRlYXRoUmVjaXBpZW50IGRlYXRoUmVjaXBpZW50OworICAgICAgICBSb3RhdGlvbldhdGNoZXIoSVJvdGF0aW9uV2F0Y2hlciB3LCBJQmluZGVyLkRlYXRoUmVjaXBpZW50IGQpIHsKKyAgICAgICAgICAgIHdhdGNoZXIgPSB3OworICAgICAgICAgICAgZGVhdGhSZWNpcGllbnQgPSBkOworICAgICAgICB9CisgICAgfQorICAgIEFycmF5TGlzdDxSb3RhdGlvbldhdGNoZXI+IG1Sb3RhdGlvbldhdGNoZXJzID0gbmV3IEFycmF5TGlzdDxSb3RhdGlvbldhdGNoZXI+KCk7CiAgICAgaW50IG1EZWZlcnJlZFJvdGF0aW9uUGF1c2VDb3VudDsKIAogICAgIGludCBtU3lzdGVtRGVjb3JMYXllciA9IDA7CkBAIC0yMjY3LDggKzIyNzIsNiBAQAogICAgICAgICAgICAgICAgIHRva2VuLmFwcFdpbmRvd1Rva2VuLnN0YXJ0aW5nV2luZG93ID0gd2luOwogICAgICAgICAgICAgICAgIGlmIChERUJVR19TVEFSVElOR19XSU5ET1cpIFNsb2cudiAoVEFHLCAiYWRkV2luZG93OiAiICsgdG9rZW4uYXBwV2luZG93VG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBzdGFydGluZ1dpbmRvdz0iICsgd2luKTsKLSAgICAgICAgICAgICAgICBNZXNzYWdlIG0gPSBtSC5vYnRhaW5NZXNzYWdlKEguUkVNT1ZFX1NUQVJUSU5HX1RJTUVPVVQsIHRva2VuLmFwcFdpbmRvd1Rva2VuKTsKLSAgICAgICAgICAgICAgICBtSC5zZW5kTWVzc2FnZURlbGF5ZWQobSwgU1RBUlRJTkdfV0lORE9XX1RJTUVPVVRfRFVSQVRJT04pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBib29sZWFuIGltTWF5TW92ZSA9IHRydWU7CkBAIC0yMzcxLDcgKzIzNzQsNiBAQAogICAgIHB1YmxpYyB2b2lkIHJlbW92ZVdpbmRvd0xvY2tlZChTZXNzaW9uIHNlc3Npb24sIFdpbmRvd1N0YXRlIHdpbikgewogICAgICAgICBpZiAod2luLm1BdHRycy50eXBlID09IFRZUEVfQVBQTElDQVRJT05fU1RBUlRJTkcpIHsKICAgICAgICAgICAgIGlmIChERUJVR19TVEFSVElOR19XSU5ET1cpIFNsb2cuZChUQUcsICJTdGFydGluZyB3aW5kb3cgcmVtb3ZlZCAiICsgd2luKTsKLSAgICAgICAgICAgIHJlbW92ZVN0YXJ0aW5nV2luZG93VGltZW91dCh3aW4ubUFwcFRva2VuKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChsb2NhbExPR1YgfHwgREVCVUdfRk9DVVMgfHwgREVCVUdfRk9DVVNfTElHSFQgJiYgd2luPT1tQ3VycmVudEZvY3VzKSBTbG9nLnYoCkBAIC0yNTE1LDcgKzI1MTcsNiBAQAogICAgICAgICBpZiAoYXRva2VuICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChhdG9rZW4uc3RhcnRpbmdXaW5kb3cgPT0gd2luKSB7CiAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1NUQVJUSU5HX1dJTkRPVykgU2xvZy52KFRBRywgIk51bGxpbmcgc3RhcnRpbmdXaW5kb3cgIiArIHdpbik7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlU3RhcnRpbmdXaW5kb3dUaW1lb3V0KGF0b2tlbik7CiAgICAgICAgICAgICAgICAgYXRva2VuLnN0YXJ0aW5nV2luZG93ID0gbnVsbDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXRva2VuLmFsbEFwcFdpbmRvd3Muc2l6ZSgpID09IDAgJiYgYXRva2VuLnN0YXJ0aW5nRGF0YSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgbGFzdCB3aW5kb3cgYW5kIHdlIGhhZCByZXF1ZXN0ZWQgYSBzdGFydGluZwpAQCAtMzc3NCw4ICszNzc1LDEwIEBACiAgICAgICAgICAgICBpZiAoc3RhY2sgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1Gb2N1c2VkU3RhY2tGcmFtZS5zZXRWaXNpYmlsaXR5KGZhbHNlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbUZvY3VzZWRTdGFja0ZyYW1lLnNldEJvdW5kcyhzdGFjayk7Ci0gICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBtdWx0aXBsZVN0YWNrcyA9ICFzdGFjay5pc0Z1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdGFja0JveCBib3ggPSBzdGFjay5tU3RhY2tCb3g7CisgICAgICAgICAgICAgICAgZmluYWwgUmVjdCBib3VuZHMgPSBib3gubUJvdW5kczsKKyAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIG11bHRpcGxlU3RhY2tzID0gYm94Lm1QYXJlbnQgIT0gbnVsbDsKKyAgICAgICAgICAgICAgICBtRm9jdXNlZFN0YWNrRnJhbWUuc2V0Qm91bmRzKGJvdW5kcyk7CiAgICAgICAgICAgICAgICAgbUZvY3VzZWRTdGFja0ZyYW1lLnNldFZpc2liaWxpdHkobXVsdGlwbGVTdGFja3MpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewpAQCAtMzgzNiwyMiArMzgzOSwyMiBAQAogICAgICAgICAgICAgICAgICAgICArICIgIiArIG1BcHBUcmFuc2l0aW9uCiAgICAgICAgICAgICAgICAgICAgICsgIiBhbHdheXNLZWVwQ3VycmVudD0iICsgYWx3YXlzS2VlcEN1cnJlbnQKICAgICAgICAgICAgICAgICAgICAgKyAiIENhbGxlcnM9IiArIERlYnVnLmdldENhbGxlcnMoMykpOwotICAgICAgICAgICAgaWYgKG9rVG9EaXNwbGF5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1BcHBUcmFuc2l0aW9uLmlzVHJhbnNpdGlvblNldCgpIHx8IG1BcHBUcmFuc2l0aW9uLmlzVHJhbnNpdGlvbk5vbmUoKSkgeworICAgICAgICAgICAgaWYgKCFtQXBwVHJhbnNpdGlvbi5pc1RyYW5zaXRpb25TZXQoKSB8fCBtQXBwVHJhbnNpdGlvbi5pc1RyYW5zaXRpb25Ob25lKCkpIHsKKyAgICAgICAgICAgICAgICBtQXBwVHJhbnNpdGlvbi5zZXRBcHBUcmFuc2l0aW9uKHRyYW5zaXQpOworICAgICAgICAgICAgfSBlbHNlIGlmICghYWx3YXlzS2VlcEN1cnJlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNpdCA9PSBBcHBUcmFuc2l0aW9uLlRSQU5TSVRfVEFTS19PUEVOCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtQXBwVHJhbnNpdGlvbi5pc1RyYW5zaXRpb25FcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwVHJhbnNpdGlvbi5UUkFOU0lUX1RBU0tfQ0xPU0UpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE9wZW5pbmcgYSBuZXcgdGFzayBhbHdheXMgc3VwZXJzZWRlcyBhIGNsb3NlIGZvciB0aGUgYW5pbS4KICAgICAgICAgICAgICAgICAgICAgbUFwcFRyYW5zaXRpb24uc2V0QXBwVHJhbnNpdGlvbih0cmFuc2l0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFhbHdheXNLZWVwQ3VycmVudCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNpdCA9PSBBcHBUcmFuc2l0aW9uLlRSQU5TSVRfVEFTS19PUEVOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbUFwcFRyYW5zaXRpb24uaXNUcmFuc2l0aW9uRXF1YWwoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBUcmFuc2l0aW9uLlRSQU5TSVRfVEFTS19DTE9TRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZW5pbmcgYSBuZXcgdGFzayBhbHdheXMgc3VwZXJzZWRlcyBhIGNsb3NlIGZvciB0aGUgYW5pbS4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1BcHBUcmFuc2l0aW9uLnNldEFwcFRyYW5zaXRpb24odHJhbnNpdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHJhbnNpdCA9PSBBcHBUcmFuc2l0aW9uLlRSQU5TSVRfQUNUSVZJVFlfT1BFTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1BcHBUcmFuc2l0aW9uLmlzVHJhbnNpdGlvbkVxdWFsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBUcmFuc2l0aW9uLlRSQU5TSVRfQUNUSVZJVFlfQ0xPU0UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVuaW5nIGEgbmV3IGFjdGl2aXR5IGFsd2F5cyBzdXBlcnNlZGVzIGEgY2xvc2UgZm9yIHRoZSBhbmltLgotICAgICAgICAgICAgICAgICAgICAgICAgbUFwcFRyYW5zaXRpb24uc2V0QXBwVHJhbnNpdGlvbih0cmFuc2l0KTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHJhbnNpdCA9PSBBcHBUcmFuc2l0aW9uLlRSQU5TSVRfQUNUSVZJVFlfT1BFTgorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbUFwcFRyYW5zaXRpb24uaXNUcmFuc2l0aW9uRXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwVHJhbnNpdGlvbi5UUkFOU0lUX0FDVElWSVRZX0NMT1NFKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBPcGVuaW5nIGEgbmV3IGFjdGl2aXR5IGFsd2F5cyBzdXBlcnNlZGVzIGEgY2xvc2UgZm9yIHRoZSBhbmltLgorICAgICAgICAgICAgICAgICAgICBtQXBwVHJhbnNpdGlvbi5zZXRBcHBUcmFuc2l0aW9uKHRyYW5zaXQpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChva1RvRGlzcGxheSgpKSB7CiAgICAgICAgICAgICAgICAgbUFwcFRyYW5zaXRpb24ucHJlcGFyZSgpOwogICAgICAgICAgICAgICAgIG1TdGFydGluZ0ljb25JblRyYW5zaXRpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgICBtU2tpcEFwcFRyYW5zaXRpb25BbmltYXRpb24gPSBmYWxzZTsKQEAgLTM5ODMsNyArMzk4Niw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfV0lORE9XX01PVkVNRU5UIHx8IERFQlVHX0FERF9SRU1PVkUgfHwgREVCVUdfU1RBUlRJTkdfV0lORE9XKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy52KFRBRywgIlJlbW92aW5nIHN0YXJ0aW5nIHdpbmRvdzogIiArIHN0YXJ0aW5nV2luZG93KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVN0YXJ0aW5nV2luZG93VGltZW91dCh0dG9rZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmdXaW5kb3cuZ2V0V2luZG93TGlzdCgpLnJlbW92ZShzdGFydGluZ1dpbmRvdyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtV2luZG93c0NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0FERF9SRU1PVkUpIFNsb2cudihUQUcsCkBAIC00MTMwLDYgKzQxMzIsMTUgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZUFwcFN0YXJ0aW5nV2luZG93KElCaW5kZXIgdG9rZW4pIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CisgICAgICAgICAgICBBcHBXaW5kb3dUb2tlbiB3dG9rZW4gPSBtVG9rZW5NYXAuZ2V0KHRva2VuKS5hcHBXaW5kb3dUb2tlbjsKKyAgICAgICAgICAgIGlmICh3dG9rZW4uc3RhcnRpbmdXaW5kb3cgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNjaGVkdWxlUmVtb3ZlU3RhcnRpbmdXaW5kb3cod3Rva2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldEFwcFdpbGxCZUhpZGRlbihJQmluZGVyIHRva2VuKSB7CiAgICAgICAgIGlmICghY2hlY2tDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FQUF9UT0tFTlMsCkBAIC00NTQ3LDIxICs0NTU4LDExIEBACiAgICAgICAgIHNjaGVkdWxlUmVtb3ZlU3RhcnRpbmdXaW5kb3coc3RhcnRpbmdUb2tlbik7CiAgICAgfQogCi0gICAgdm9pZCByZW1vdmVTdGFydGluZ1dpbmRvd1RpbWVvdXQoQXBwV2luZG93VG9rZW4gd3Rva2VuKSB7Ci0gICAgICAgIGlmICh3dG9rZW4gIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKERFQlVHX1NUQVJUSU5HX1dJTkRPVykgU2xvZy52KFRBRywgRGVidWcuZ2V0Q2FsbGVycygxKSArCi0gICAgICAgICAgICAgICAgICAgICI6IFJlbW92ZSBzdGFydGluZyB3aW5kb3cgdGltZW91dCAiICsgd3Rva2VuICsgKHd0b2tlbiAhPSBudWxsID8KLSAgICAgICAgICAgICAgICAgICAgIiBzdGFydGluZ1dpbmRvdz0iICsgd3Rva2VuLnN0YXJ0aW5nV2luZG93IDogIiIpKTsKLSAgICAgICAgICAgIG1ILnJlbW92ZU1lc3NhZ2VzKEguUkVNT1ZFX1NUQVJUSU5HX1RJTUVPVVQsIHd0b2tlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICB2b2lkIHNjaGVkdWxlUmVtb3ZlU3RhcnRpbmdXaW5kb3coQXBwV2luZG93VG9rZW4gd3Rva2VuKSB7CiAgICAgICAgIGlmICh3dG9rZW4gIT0gbnVsbCAmJiB3dG9rZW4uc3RhcnRpbmdXaW5kb3cgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKERFQlVHX1NUQVJUSU5HX1dJTkRPVykgU2xvZy52KFRBRywgRGVidWcuZ2V0Q2FsbGVycygxKSArCiAgICAgICAgICAgICAgICAgICAgICI6IFNjaGVkdWxlIHJlbW92ZSBzdGFydGluZyAiICsgd3Rva2VuICsgKHd0b2tlbiAhPSBudWxsID8KICAgICAgICAgICAgICAgICAgICAgIiBzdGFydGluZ1dpbmRvdz0iICsgd3Rva2VuLnN0YXJ0aW5nV2luZG93IDogIiIpKTsKLSAgICAgICAgICAgIHJlbW92ZVN0YXJ0aW5nV2luZG93VGltZW91dCh3dG9rZW4pOwogICAgICAgICAgICAgTWVzc2FnZSBtID0gbUgub2J0YWluTWVzc2FnZShILlJFTU9WRV9TVEFSVElORywgd3Rva2VuKTsKICAgICAgICAgICAgIG1ILnNlbmRNZXNzYWdlKG0pOwogICAgICAgICB9CkBAIC00NzgyLDEyICs0NzgzLDEwIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGZpbmFsIFRhc2tTdGFjayBzdGFjayA9IHRhc2subVN0YWNrOwogICAgICAgICAgICAgICAgIGZpbmFsIERpc3BsYXlDb250ZW50IGRpc3BsYXlDb250ZW50ID0gdGFzay5nZXREaXNwbGF5Q29udGVudCgpOwotICAgICAgICAgICAgICAgIGRpc3BsYXlDb250ZW50Lm1vdmVTdGFjayhzdGFjaywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZmluYWwgVGFza1N0YWNrIGhvbWVTdGFjayA9IGRpc3BsYXlDb250ZW50LmdldEhvbWVTdGFjaygpOwotICAgICAgICAgICAgICAgIGlmIChob21lU3RhY2sgIT0gc3RhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBhIG5vbi1ob21lIHN0YWNrIG1vdmVzIHRvIHRoZSB0b3AsIHRoZSBob21lIHN0YWNrIG1vdmVzIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBib3R0b20uCi0gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlDb250ZW50Lm1vdmVTdGFjayhob21lU3RhY2ssIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGlzSG9tZVN0YWNrVGFzayA9IHN0YWNrLmlzSG9tZVN0YWNrKCk7CisgICAgICAgICAgICAgICAgaWYgKGlzSG9tZVN0YWNrVGFzayAhPSBkaXNwbGF5Q29udGVudC5ob21lT25Ub3AoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBtb3ZlIHRoZSBzdGFjayBpdHNlbGYuCisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlDb250ZW50Lm1vdmVIb21lU3RhY2tCb3goaXNIb21lU3RhY2tUYXNrKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhY2subW92ZVRhc2tUb1RvcCh0YXNrKTsKICAgICAgICAgICAgIH0KQEAgLTQ4MTgsMTkgKzQ4MTcsMzYgQEAKICAgICAvKioKICAgICAgKiBDcmVhdGUgYSBuZXcgVGFza1N0YWNrIGFuZCBwbGFjZSBpdCBuZXh0IHRvIGFuIGV4aXN0aW5nIHN0YWNrLgogICAgICAqIEBwYXJhbSBzdGFja0lkIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgbmV3IHN0YWNrLgorICAgICAqIEBwYXJhbSByZWxhdGl2ZVN0YWNrQm94SWQgVGhlIGV4aXN0aW5nIHN0YWNrIHRoYXQgdGhpcyBzdGFjayBnb2VzIGJlZm9yZSBvciBhZnRlci4KKyAgICAgKiBAcGFyYW0gcG9zaXRpb24gT25lIG9mOgorICAgICAqICAgICAge0BsaW5rIFN0YWNrQm94I1RBU0tfU1RBQ0tfR09FU19CRUZPUkV9CisgICAgICogICAgICB7QGxpbmsgU3RhY2tCb3gjVEFTS19TVEFDS19HT0VTX0FGVEVSfQorICAgICAqICAgICAge0BsaW5rIFN0YWNrQm94I1RBU0tfU1RBQ0tfR09FU19BQk9WRX0KKyAgICAgKiAgICAgIHtAbGluayBTdGFja0JveCNUQVNLX1NUQUNLX0dPRVNfQkVMT1d9CisgICAgICogICAgICB7QGxpbmsgU3RhY2tCb3gjVEFTS19TVEFDS19HT0VTX1VOREVSfQorICAgICAqICAgICAge0BsaW5rIFN0YWNrQm94I1RBU0tfU1RBQ0tfR09FU19PVkVSfQorICAgICAqIEBwYXJhbSB3ZWlnaHQgUmVsYXRpdmUgd2VpZ2h0IGZvciBkZXRlcm1pbmluZyBob3cgYmlnIHRvIG1ha2UgdGhlIG5ldyBUYXNrU3RhY2suCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgY3JlYXRlU3RhY2soaW50IHN0YWNrSWQsIGludCBkaXNwbGF5SWQpIHsKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVTdGFjayhpbnQgc3RhY2tJZCwgaW50IHJlbGF0aXZlU3RhY2tCb3hJZCwgaW50IHBvc2l0aW9uLCBmbG9hdCB3ZWlnaHQpIHsKICAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPD0gU3RhY2tCb3guVEFTS19TVEFDS19HT0VTX0JFTE9XICYmCisgICAgICAgICAgICAgICAgICAgICh3ZWlnaHQgPCBTVEFDS19XRUlHSFRfTUlOIHx8IHdlaWdodCA+IFNUQUNLX1dFSUdIVF9NQVgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJjcmVhdGVTdGFjazogd2VpZ2h0IG11c3QgYmUgYmV0d2VlbiAiICsgU1RBQ0tfV0VJR0hUX01JTiArICIgYW5kICIgKworICAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfV0VJR0hUX01BWCArICIsIHdlaWdodD0iICsgd2VpZ2h0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZpbmFsIGludCBudW1EaXNwbGF5cyA9IG1EaXNwbGF5Q29udGVudHMuc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChpbnQgZGlzcGxheU5keCA9IDA7IGRpc3BsYXlOZHggPCBudW1EaXNwbGF5czsgKytkaXNwbGF5TmR4KSB7CiAgICAgICAgICAgICAgICAgZmluYWwgRGlzcGxheUNvbnRlbnQgZGlzcGxheUNvbnRlbnQgPSBtRGlzcGxheUNvbnRlbnRzLnZhbHVlQXQoZGlzcGxheU5keCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlDb250ZW50LmdldERpc3BsYXlJZCgpID09IGRpc3BsYXlJZCkgewotICAgICAgICAgICAgICAgICAgICBUYXNrU3RhY2sgc3RhY2sgPSBkaXNwbGF5Q29udGVudC5jcmVhdGVTdGFjayhzdGFja0lkKTsKKyAgICAgICAgICAgICAgICBUYXNrU3RhY2sgc3RhY2sgPSBkaXNwbGF5Q29udGVudC5jcmVhdGVTdGFjayhzdGFja0lkLCByZWxhdGl2ZVN0YWNrQm94SWQsIHBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0KTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2sgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBtU3RhY2tJZFRvU3RhY2sucHV0KHN0YWNrSWQsIHN0YWNrKTsKICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybUxheW91dEFuZFBsYWNlU3VyZmFjZXNMb2NrZWQoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNsb2cuZShUQUcsICJjcmVhdGVTdGFjazogVW5hYmxlIHRvIGZpbmQgcmVsYXRpdmVTdGFja0JveElkPSIgKyByZWxhdGl2ZVN0YWNrQm94SWQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00ODc3LDI3ICs0ODkzLDQwIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZXNpemVTdGFjayhpbnQgc3RhY2tJZCwgUmVjdCBib3VuZHMpIHsKKyAgICBwdWJsaWMgdm9pZCByZXNpemVTdGFja0JveChpbnQgc3RhY2tCb3hJZCwgZmxvYXQgd2VpZ2h0KSB7CisgICAgICAgIGlmICh3ZWlnaHQgPCBTVEFDS19XRUlHSFRfTUlOIHx8IHdlaWdodCA+IFNUQUNLX1dFSUdIVF9NQVgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJyZXNpemVTdGFjazogd2VpZ2h0IG11c3QgYmUgYmV0d2VlbiAiICsgU1RBQ0tfV0VJR0hUX01JTiArICIgYW5kICIgKworICAgICAgICAgICAgICAgICAgICBTVEFDS19XRUlHSFRfTUFYICsgIiwgd2VpZ2h0PSIgKyB3ZWlnaHQpOworICAgICAgICB9CiAgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgewotICAgICAgICAgICAgZmluYWwgVGFza1N0YWNrIHN0YWNrID0gbVN0YWNrSWRUb1N0YWNrLmdldChzdGFja0lkKTsKLSAgICAgICAgICAgIGlmIChzdGFjayA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicmVzaXplU3RhY2s6IHN0YWNrSWQgIiArIHN0YWNrSWQKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBub3QgZm91bmQuIik7CisgICAgICAgICAgICBmaW5hbCBpbnQgbnVtRGlzcGxheXMgPSBtRGlzcGxheUNvbnRlbnRzLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGRpc3BsYXlOZHggPSAwOyBkaXNwbGF5TmR4IDwgbnVtRGlzcGxheXM7ICsrZGlzcGxheU5keCkgeworICAgICAgICAgICAgICAgIGlmIChtRGlzcGxheUNvbnRlbnRzLnZhbHVlQXQoZGlzcGxheU5keCkucmVzaXplU3RhY2soc3RhY2tCb3hJZCwgd2VpZ2h0KSkgeworICAgICAgICAgICAgICAgICAgICBwZXJmb3JtTGF5b3V0QW5kUGxhY2VTdXJmYWNlc0xvY2tlZCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0YWNrLnNldEJvdW5kcyhib3VuZHMpKSB7Ci0gICAgICAgICAgICAgICAgc3RhY2suZ2V0RGlzcGxheUNvbnRlbnQoKS5sYXlvdXROZWVkZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHBlcmZvcm1MYXlvdXRBbmRQbGFjZVN1cmZhY2VzTG9ja2VkKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicmVzaXplU3RhY2s6IHN0YWNrQm94SWQgIiArIHN0YWNrQm94SWQKKyAgICAgICAgICAgICAgICArICIgbm90IGZvdW5kLiIpOworICAgIH0KKworICAgIHB1YmxpYyBBcnJheUxpc3Q8U3RhY2tCb3hJbmZvPiBnZXRTdGFja0JveEluZm9zKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQobVdpbmRvd01hcCkgeworICAgICAgICAgICAgcmV0dXJuIGdldERlZmF1bHREaXNwbGF5Q29udGVudExvY2tlZCgpLmdldFN0YWNrQm94SW5mb3MoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGdldFN0YWNrQm91bmRzKGludCBzdGFja0lkLCBSZWN0IGJvdW5kcykgewotICAgICAgICBmaW5hbCBUYXNrU3RhY2sgc3RhY2sgPSBtU3RhY2tJZFRvU3RhY2suZ2V0KHN0YWNrSWQpOwotICAgICAgICBpZiAoc3RhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgc3RhY2suZ2V0Qm91bmRzKGJvdW5kcyk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgcHVibGljIFJlY3QgZ2V0U3RhY2tCb3VuZHMoaW50IHN0YWNrSWQpIHsKKyAgICAgICAgZmluYWwgaW50IG51bURpc3BsYXlzID0gbURpc3BsYXlDb250ZW50cy5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGRpc3BsYXlOZHggPSAwOyBkaXNwbGF5TmR4IDwgbnVtRGlzcGxheXM7ICsrZGlzcGxheU5keCkgeworICAgICAgICAgICAgUmVjdCBib3VuZHMgPSBtRGlzcGxheUNvbnRlbnRzLnZhbHVlQXQoZGlzcGxheU5keCkuZ2V0U3RhY2tCb3VuZHMoc3RhY2tJZCk7CisgICAgICAgICAgICBpZiAoYm91bmRzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYm91bmRzOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGJvdW5kcy5zZXRFbXB0eSgpOworICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NTU0LDcgKzU1ODMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwV2luID0gd3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3MuZ2V0U3RhY2tCb3VuZHMoc3RhY2tCb3VuZHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQm91bmRzLnNldCh3cy5nZXRTdGFja0JvdW5kcygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC01OTUyLDcgKzU5ODEsNyBAQAogCiAgICAgICAgIGZvciAoaW50IGk9bVJvdGF0aW9uV2F0Y2hlcnMuc2l6ZSgpLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBtUm90YXRpb25XYXRjaGVycy5nZXQoaSkub25Sb3RhdGlvbkNoYW5nZWQocm90YXRpb24pOworICAgICAgICAgICAgICAgIG1Sb3RhdGlvbldhdGNoZXJzLmdldChpKS53YXRjaGVyLm9uUm90YXRpb25DaGFuZ2VkKHJvdGF0aW9uKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU5ODQsMTAgKzYwMTMsMTEgQEAKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGJpbmRlckRpZWQoKSB7CiAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxtUm90YXRpb25XYXRjaGVycy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhdGNoZXJCaW5kZXIgPT0gbVJvdGF0aW9uV2F0Y2hlcnMuZ2V0KGkpLmFzQmluZGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUm90YXRpb25XYXRjaGVyIHJlbW92ZWQgPSBtUm90YXRpb25XYXRjaGVycy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkLmFzQmluZGVyKCkudW5saW5rVG9EZWF0aCh0aGlzLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YXRjaGVyQmluZGVyID09IG1Sb3RhdGlvbldhdGNoZXJzLmdldChpKS53YXRjaGVyLmFzQmluZGVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb3RhdGlvbldhdGNoZXIgcmVtb3ZlZCA9IG1Sb3RhdGlvbldhdGNoZXJzLnJlbW92ZShpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQmluZGVyIGJpbmRlciA9IHJlbW92ZWQud2F0Y2hlci5hc0JpbmRlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kZXIudW5saW5rVG9EZWF0aCh0aGlzLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNTk5OSw3ICs2MDI5LDcgQEAKICAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHdhdGNoZXIuYXNCaW5kZXIoKS5saW5rVG9EZWF0aChkciwgMCk7Ci0gICAgICAgICAgICAgICAgbVJvdGF0aW9uV2F0Y2hlcnMuYWRkKHdhdGNoZXIpOworICAgICAgICAgICAgICAgIG1Sb3RhdGlvbldhdGNoZXJzLmFkZChuZXcgUm90YXRpb25XYXRjaGVyKHdhdGNoZXIsIGRyKSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIC8vIENsaWVudCBkaWVkLCBubyBjbGVhbnVwIG5lZWRlZC4KICAgICAgICAgICAgIH0KQEAgLTYwMTMsOCArNjA0MywxMyBAQAogICAgICAgICBmaW5hbCBJQmluZGVyIHdhdGNoZXJCaW5kZXIgPSB3YXRjaGVyLmFzQmluZGVyKCk7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgewogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPG1Sb3RhdGlvbldhdGNoZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHdhdGNoZXJCaW5kZXIgPT0gbVJvdGF0aW9uV2F0Y2hlcnMuZ2V0KGkpLmFzQmluZGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbVJvdGF0aW9uV2F0Y2hlcnMucmVtb3ZlKGkpOworICAgICAgICAgICAgICAgIFJvdGF0aW9uV2F0Y2hlciByb3RhdGlvbldhdGNoZXIgPSBtUm90YXRpb25XYXRjaGVycy5nZXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHdhdGNoZXJCaW5kZXIgPT0gcm90YXRpb25XYXRjaGVyLndhdGNoZXIuYXNCaW5kZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBSb3RhdGlvbldhdGNoZXIgcmVtb3ZlZCA9IG1Sb3RhdGlvbldhdGNoZXJzLnJlbW92ZShpKTsKKyAgICAgICAgICAgICAgICAgICAgSUJpbmRlciBiaW5kZXIgPSByZW1vdmVkLndhdGNoZXIuYXNCaW5kZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiaW5kZXIudW5saW5rVG9EZWF0aChyZW1vdmVkLmRlYXRoUmVjaXBpZW50LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpLS07CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNzAzMiw4ICs3MDY3LDYgQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEFQX09VVFNJREVfU1RBQ0sgPSAzMTsKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9USUZZX0FDVElWSVRZX0RSQVdOID0gMzI7CiAKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVNT1ZFX1NUQVJUSU5HX1RJTUVPVVQgPSAzMzsKLQogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1zZykgewogICAgICAgICAgICAgaWYgKERFQlVHX1dJTkRPV19UUkFDRSkgewpAQCAtNzEzMiw3ICs3MTY1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFib3J0ZWQgc3RhcnRpbmcgIiArIHd0b2tlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICI6IHJlbW92ZWQ9IiArIHd0b2tlbi5yZW1vdmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBzdGFydGluZ0RhdGE9IiArIHd0b2tlbi5zdGFydGluZ0RhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU3RhcnRpbmdXaW5kb3dUaW1lb3V0KHd0b2tlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3dG9rZW4uc3RhcnRpbmdXaW5kb3cgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Rva2VuLnN0YXJ0aW5nRGF0YSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCA9IHRydWU7CkBAIC03MTU3LDExICs3MTg5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBjYXNlIFJFTU9WRV9TVEFSVElOR19USU1FT1VUOiB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIEFwcFdpbmRvd1Rva2VuIHd0b2tlbiA9IChBcHBXaW5kb3dUb2tlbiltc2cub2JqOwotICAgICAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiU3RhcnRpbmcgd2luZG93ICIgKyB3dG9rZW4gKyAiIHRpbWVkIG91dCIpOwotICAgICAgICAgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guCi0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgUkVNT1ZFX1NUQVJUSU5HOiB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEFwcFdpbmRvd1Rva2VuIHd0b2tlbiA9IChBcHBXaW5kb3dUb2tlbiltc2cub2JqOwogICAgICAgICAgICAgICAgICAgICBJQmluZGVyIHRva2VuID0gbnVsbDsKQEAgLTgxODMsNyArODIxMCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBtUG9saWN5LmdldENvbnRlbnRSZWN0THcobVRtcENvbnRlbnRSZWN0KTsKLSAgICAgICAgZGlzcGxheUNvbnRlbnQucmVzaXplKG1UbXBDb250ZW50UmVjdCk7CisgICAgICAgIGRpc3BsYXlDb250ZW50LnNldFN0YWNrQm94U2l6ZShtVG1wQ29udGVudFJlY3QpOwogCiAgICAgICAgIGludCBzZXEgPSBtTGF5b3V0U2VxKzE7CiAgICAgICAgIGlmIChzZXEgPCAwKSBzZXEgPSAwOwpAQCAtMTAxMzUsNiArMTAxNjIsMTIgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyBpbnQgZ2V0SW5wdXRNZXRob2RXaW5kb3dWaXNpYmxlSGVpZ2h0KCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1XaW5kb3dNYXApIHsKKyAgICAgICAgICAgIHJldHVybiBtUG9saWN5LmdldElucHV0TWV0aG9kV2luZG93VmlzaWJsZUhlaWdodEx3KCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOYXZpZ2F0aW9uQmFyKCkgewogICAgICAgICByZXR1cm4gbVBvbGljeS5oYXNOYXZpZ2F0aW9uQmFyKCk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dTdGF0ZS5qYXZhIGIvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93U3RhdGUuamF2YQppbmRleCBlNmMxZTk4Li40ZDUzY2VhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dTdGF0ZS5qYXZhCisrKyBiL3NlcnZpY2VzL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd1N0YXRlLmphdmEKQEAgLTQ2Myw4ICs0NjMsOCBAQAogICAgICAgICBtSGF2ZUZyYW1lID0gdHJ1ZTsKIAogICAgICAgICBUYXNrU3RhY2sgc3RhY2sgPSBtQXBwVG9rZW4gIT0gbnVsbCA/IGdldFN0YWNrKCkgOiBudWxsOwotICAgICAgICBpZiAoc3RhY2sgIT0gbnVsbCAmJiAhc3RhY2suaXNGdWxsc2NyZWVuKCkpIHsKLSAgICAgICAgICAgIGdldFN0YWNrQm91bmRzKHN0YWNrLCBtQ29udGFpbmluZ0ZyYW1lKTsKKyAgICAgICAgaWYgKHN0YWNrICE9IG51bGwgJiYgc3RhY2suaGFzU2libGluZygpKSB7CisgICAgICAgICAgICBtQ29udGFpbmluZ0ZyYW1lLnNldChnZXRTdGFja0JvdW5kcyhzdGFjaykpOwogICAgICAgICAgICAgaWYgKG1VbmRlclN0YXR1c0JhcikgewogICAgICAgICAgICAgICAgIG1Db250YWluaW5nRnJhbWUudG9wID0gcGYudG9wOwogICAgICAgICAgICAgfQpAQCAtNzIzLDE2ICs3MjMsMTUgQEAKICAgICAgICAgcmV0dXJuIG1EaXNwbGF5Q29udGVudC5nZXRIb21lU3RhY2soKTsKICAgICB9CiAKLSAgICB2b2lkIGdldFN0YWNrQm91bmRzKFJlY3QgYm91bmRzKSB7Ci0gICAgICAgIGdldFN0YWNrQm91bmRzKGdldFN0YWNrKCksIGJvdW5kcyk7CisgICAgUmVjdCBnZXRTdGFja0JvdW5kcygpIHsKKyAgICAgICAgcmV0dXJuIGdldFN0YWNrQm91bmRzKGdldFN0YWNrKCkpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBnZXRTdGFja0JvdW5kcyhUYXNrU3RhY2sgc3RhY2ssIFJlY3QgYm91bmRzKSB7CisgICAgcHJpdmF0ZSBSZWN0IGdldFN0YWNrQm91bmRzKFRhc2tTdGFjayBzdGFjaykgewogICAgICAgICBpZiAoc3RhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgc3RhY2suZ2V0Qm91bmRzKGJvdW5kcyk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gc3RhY2subVN0YWNrQm94Lm1Cb3VuZHM7CiAgICAgICAgIH0KLSAgICAgICAgYm91bmRzLnNldChtRnJhbWUpOworICAgICAgICByZXR1cm4gbUZyYW1lOwogICAgIH0KIAogICAgIHB1YmxpYyBsb25nIGdldElucHV0RGlzcGF0Y2hpbmdUaW1lb3V0TmFub3MoKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jU3RvcmFnZUVuZ2luZVRlc3QuamF2YSBiL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNTdG9yYWdlRW5naW5lVGVzdC5qYXZhCmluZGV4IGY4NzBlNGMuLjcwZmQ4MTAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNTdG9yYWdlRW5naW5lVGVzdC5qYXZhCisrKyBiL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9jb250ZW50L1N5bmNTdG9yYWdlRW5naW5lVGVzdC5qYXZhCkBAIC0xNyw2ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5jb250ZW50OwogCiBpbXBvcnQgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHRXcmFwcGVyOwpAQCAtMzIsMjIgKzMzLDM0IEBACiBpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7CiBpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKIAoraW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5jb250ZW50LlN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50OworCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuQXRvbWljRmlsZTsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuY29udGVudC5TeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludDsKKwogcHVibGljIGNsYXNzIFN5bmNTdG9yYWdlRW5naW5lVGVzdCBleHRlbmRzIEFuZHJvaWRUZXN0Q2FzZSB7CiAKICAgICBwcm90ZWN0ZWQgQWNjb3VudCBhY2NvdW50MTsKKyAgICBwcm90ZWN0ZWQgQWNjb3VudCBhY2NvdW50MjsKKyAgICBwcm90ZWN0ZWQgQ29tcG9uZW50TmFtZSBzeW5jU2VydmljZTE7CiAgICAgcHJvdGVjdGVkIFN0cmluZyBhdXRob3JpdHkxID0gInRlc3Rwcm92aWRlciI7CiAgICAgcHJvdGVjdGVkIEJ1bmRsZSBkZWZhdWx0QnVuZGxlOwogICAgIHByb3RlY3RlZCBmaW5hbCBpbnQgREVGQVVMVF9VU0VSID0gMDsKLSAgICAKKworICAgIC8qIFNvbWUgZGVmYXVsdCBwb2xsIGZyZXF1ZW5jaWVzLiAqLworICAgIGZpbmFsIGxvbmcgZGF5UG9sbCA9ICg2MCAqIDYwICogMjQpOworICAgIGZpbmFsIGxvbmcgZGF5RnV6eiA9IDYwOworICAgIGZpbmFsIGxvbmcgdGhvdXNhbmRTZWNzID0gMTAwMDsKKyAgICBmaW5hbCBsb25nIHRob3VzYW5kU2Vjc0Z1enogPSAxMDA7CisKICAgICBNb2NrQ29udGVudFJlc29sdmVyIG1vY2tSZXNvbHZlcjsKICAgICBTeW5jU3RvcmFnZUVuZ2luZSBlbmdpbmU7Ci0gICAgCisKICAgICBwcml2YXRlIEZpbGUgZ2V0U3luY0RpcigpIHsKICAgICAgICAgcmV0dXJuIG5ldyBGaWxlKG5ldyBGaWxlKGdldENvbnRleHQoKS5nZXRGaWxlc0RpcigpLCAic3lzdGVtIiksICJzeW5jIik7CiAgICAgfQpAQCAtNTUsNiArNjgsOCBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgewogICAgICAgICBhY2NvdW50MSA9IG5ldyBBY2NvdW50KCJhQGV4YW1wbGUuY29tIiwgImV4YW1wbGUudHlwZSIpOworICAgICAgICBhY2NvdW50MiA9IG5ldyBBY2NvdW50KCJiQGV4YW1wbGUuY29tIiwgImV4YW1wbGUudHlwZSIpOworICAgICAgICBzeW5jU2VydmljZTEgPSBuZXcgQ29tcG9uZW50TmFtZSgiY29tLmV4YW1wbGUiLCAiU3luY1NlcnZpY2UiKTsKICAgICAgICAgLy8gRGVmYXVsdCBidW5kbGUuCiAgICAgICAgIGRlZmF1bHRCdW5kbGUgPSBuZXcgQnVuZGxlKCk7CiAgICAgICAgIGRlZmF1bHRCdW5kbGUucHV0SW50KCJpbnRfa2V5IiwgMCk7CkBAIC04MCwxMSArOTUsMTMgQEAKIAogICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZSBlbmdpbmUgPSBTeW5jU3RvcmFnZUVuZ2luZS5uZXdUZXN0SW5zdGFuY2UoCiAgICAgICAgICAgICAgICAgbmV3IFRlc3RDb250ZXh0KG1vY2tSZXNvbHZlciwgZ2V0Q29udGV4dCgpKSk7Ci0KICAgICAgICAgbG9uZyB0aW1lMCA9IDEwMDA7Ci0gICAgICAgIGxvbmcgaGlzdG9yeUlkID0gZW5naW5lLmluc2VydFN0YXJ0U3luY0V2ZW50KAotICAgICAgICAgICAgICAgIGFjY291bnQsIDAsIFN5bmNPcGVyYXRpb24uUkVBU09OX1BFUklPRElDLCBhdXRob3JpdHksIHRpbWUwLAotICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLlNPVVJDRV9MT0NBTCwgZmFsc2UgLyogaW5pdGlhbGl6YXRpb24gKi8sIG51bGwgLyogZXh0cmFzICovKTsKKyAgICAgICAgU3luY09wZXJhdGlvbiBvcCA9IG5ldyBTeW5jT3BlcmF0aW9uKGFjY291bnQsIDAsCisgICAgICAgICAgICAgICAgU3luY09wZXJhdGlvbi5SRUFTT05fUEVSSU9ESUMsCisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuU09VUkNFX0xPQ0FMLAorICAgICAgICAgICAgICAgIGF1dGhvcml0eSwKKyAgICAgICAgICAgICAgICBCdW5kbGUuRU1QVFksIHRpbWUwLCAwIC8qIGZsZXgqLywgMCwgMCwgdHJ1ZSk7CisgICAgICAgIGxvbmcgaGlzdG9yeUlkID0gZW5naW5lLmluc2VydFN0YXJ0U3luY0V2ZW50KG9wLCB0aW1lMCk7CiAgICAgICAgIGxvbmcgdGltZTEgPSB0aW1lMCArIFN5bmNTdG9yYWdlRW5naW5lLk1JTExJU19JTl80V0VFS1MgKiAyOwogICAgICAgICBlbmdpbmUuc3RvcFN5bmNFdmVudChoaXN0b3J5SWQsIHRpbWUxIC0gdGltZTAsICJ5YXkiLCAwLCAwKTsKICAgICB9CkBAIC05MywyOCArMTEwLDEwMCBAQAogICAgICAqIFRlc3QgcGVyc2lzdGVuY2Ugb2YgcGVuZGluZyBvcGVyYXRpb25zLgogICAgICAqLwogICAgIEBNZWRpdW1UZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdFBlbmRpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuUGVuZGluZ09wZXJhdGlvbiBwb3AgPQotICAgICAgICAgICAgICAgIG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5QZW5kaW5nT3BlcmF0aW9uKGFjY291bnQxLCBERUZBVUxUX1VTRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICBTeW5jT3BlcmF0aW9uLlJFQVNPTl9QRVJJT0RJQywgU3luY1N0b3JhZ2VFbmdpbmUuU09VUkNFX0xPQ0FMLAotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5MSwgZGVmYXVsdEJ1bmRsZSwgZmFsc2UpOwotICAgICAgICAKLSAgICAgICAgZW5naW5lLmluc2VydEludG9QZW5kaW5nKHBvcCk7CisgICAgcHVibGljIHZvaWQgdGVzdEFwcGVuZFBlbmRpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3luY09wZXJhdGlvbiBzb3AgPSBuZXcgU3luY09wZXJhdGlvbihhY2NvdW50MSwKKyAgICAgICAgICAgICAgICBERUZBVUxUX1VTRVIsCisgICAgICAgICAgICAgICAgU3luY09wZXJhdGlvbi5SRUFTT05fUEVSSU9ESUMsCisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuU09VUkNFX0xPQ0FMLCBhdXRob3JpdHkxLCBCdW5kbGUuRU1QVFksCisgICAgICAgICAgICAgICAgMCAvKiBydW50aW1lICovLCAwIC8qIGZsZXggKi8sIDAgLyogYmFja29mZiAqLywgMCAvKiBkZWxheXVudGlsICovLAorICAgICAgICAgICAgICAgIHRydWUgLyogZXhwZWRpdGVkICovKTsKKyAgICAgICAgZW5naW5lLmluc2VydEludG9QZW5kaW5nKHNvcCk7CisKICAgICAgICAgLy8gRm9yY2UgZW5naW5lIHRvIHJlYWQgZnJvbSBkaXNrLgogICAgICAgICBlbmdpbmUuY2xlYXJBbmRSZWFkU3RhdGUoKTsKIAotICAgICAgICBhc3NlcnQoZW5naW5lLmdldFBlbmRpbmdPcGVyYXRpb25Db3VudCgpID09IDEpOworICAgICAgICBhc3NlcnRUcnVlKGVuZ2luZS5nZXRQZW5kaW5nT3BlcmF0aW9uQ291bnQoKSA9PSAxKTsKICAgICAgICAgTGlzdDxTeW5jU3RvcmFnZUVuZ2luZS5QZW5kaW5nT3BlcmF0aW9uPiBwb3BzID0gZW5naW5lLmdldFBlbmRpbmdPcGVyYXRpb25zKCk7CiAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLlBlbmRpbmdPcGVyYXRpb24gcG9wUmV0cmlldmVkID0gcG9wcy5nZXQoMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhwb3AuYWNjb3VudCwgcG9wUmV0cmlldmVkLmFjY291bnQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocG9wLnJlYXNvbiwgcG9wUmV0cmlldmVkLnJlYXNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhwb3AudXNlcklkLCBwb3BSZXRyaWV2ZWQudXNlcklkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHBvcC5zeW5jU291cmNlLCBwb3BSZXRyaWV2ZWQuc3luY1NvdXJjZSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhwb3AuYXV0aG9yaXR5LCBwb3BSZXRyaWV2ZWQuYXV0aG9yaXR5KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHBvcC5leHBlZGl0ZWQsIHBvcFJldHJpZXZlZC5leHBlZGl0ZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocG9wLnNlcnZpY2VOYW1lLCBwb3BSZXRyaWV2ZWQuc2VydmljZU5hbWUpOwotICAgICAgICBhc3NlcnQoYW5kcm9pZC5jb250ZW50LlBlcmlvZGljU3luYy5zeW5jRXh0cmFzRXF1YWxzKHBvcC5leHRyYXMsIHBvcFJldHJpZXZlZC5leHRyYXMpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcC50YXJnZXQuYWNjb3VudCwgcG9wUmV0cmlldmVkLnRhcmdldC5hY2NvdW50KTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcC50YXJnZXQucHJvdmlkZXIsIHBvcFJldHJpZXZlZC50YXJnZXQucHJvdmlkZXIpOworICAgICAgICBhc3NlcnRFcXVhbHMoc29wLnRhcmdldC5zZXJ2aWNlLCBwb3BSZXRyaWV2ZWQudGFyZ2V0LnNlcnZpY2UpOworICAgICAgICBhc3NlcnRFcXVhbHMoc29wLnRhcmdldC51c2VySWQsIHBvcFJldHJpZXZlZC50YXJnZXQudXNlcklkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcC5yZWFzb24sIHBvcFJldHJpZXZlZC5yZWFzb24pOworICAgICAgICBhc3NlcnRFcXVhbHMoc29wLnN5bmNTb3VyY2UsIHBvcFJldHJpZXZlZC5zeW5jU291cmNlKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcC5leHBlZGl0ZWQsIHBvcFJldHJpZXZlZC5leHBlZGl0ZWQpOworICAgICAgICBhc3NlcnQoYW5kcm9pZC5jb250ZW50LlBlcmlvZGljU3luYy5zeW5jRXh0cmFzRXF1YWxzKHNvcC5leHRyYXMsIHBvcFJldHJpZXZlZC5leHRyYXMpKTsKKyAgICB9CiAKKyAgICAvKioKKyAgICAgKiBWZXJpZnkge0BsaW5rIGNvbS5hbmRyb2lkLnNlcnZlci5jb250ZW50LlN5bmNTdG9yYWdlRW5naW5lI3dyaXRlUGVuZGluZ09wZXJhdGlvbnNMb2NrZWQoKX0KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0ZXN0V3JpdGVQZW5kaW5nT3BlcmF0aW9uc0xvY2tlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTeW5jT3BlcmF0aW9uIHNvcCA9IG5ldyBTeW5jT3BlcmF0aW9uKGFjY291bnQxLAorICAgICAgICAgICAgICAgIERFRkFVTFRfVVNFUiwKKyAgICAgICAgICAgICAgICBTeW5jT3BlcmF0aW9uLlJFQVNPTl9JU19TWU5DQUJMRSwKKyAgICAgICAgICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5TT1VSQ0VfTE9DQUwsIGF1dGhvcml0eTEsIEJ1bmRsZS5FTVBUWSwKKyAgICAgICAgICAgICAgICAxMDAwTCAvKiBydW50aW1lICovLCA1N0wgLyogZmxleCAqLywgMCAvKiBiYWNrb2ZmICovLCAwIC8qIGRlbGF5dW50aWwgKi8sCisgICAgICAgICAgICAgICAgdHJ1ZSAvKiBleHBlZGl0ZWQgKi8pOworICAgICAgICBTeW5jT3BlcmF0aW9uIHNvcDEgPSBuZXcgU3luY09wZXJhdGlvbihhY2NvdW50MiwKKyAgICAgICAgICAgICAgICBERUZBVUxUX1VTRVIsCisgICAgICAgICAgICAgICAgU3luY09wZXJhdGlvbi5SRUFTT05fUEVSSU9ESUMsCisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuU09VUkNFX0xPQ0FMLCBhdXRob3JpdHkxLCBkZWZhdWx0QnVuZGxlLAorICAgICAgICAgICAgICAgIDAgLyogcnVudGltZSAqLywgMCAvKiBmbGV4ICovLCAyMEwgLyogYmFja29mZiAqLywgMTAwTCAvKiBkZWxheXVudGlsICovLAorICAgICAgICAgICAgICAgIGZhbHNlIC8qIGV4cGVkaXRlZCAqLyk7CisgICAgICAgIFN5bmNPcGVyYXRpb24gZGVsZXRlZCA9IG5ldyBTeW5jT3BlcmF0aW9uKGFjY291bnQyLAorICAgICAgICAgICAgICAgIERFRkFVTFRfVVNFUiwKKyAgICAgICAgICAgICAgICBTeW5jT3BlcmF0aW9uLlJFQVNPTl9TWU5DX0FVVE8sCisgICAgICAgICAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUuU09VUkNFX0xPQ0FMLCBhdXRob3JpdHkxLCBCdW5kbGUuRU1QVFksCisgICAgICAgICAgICAgICAgMCAvKiBydW50aW1lICovLCAwIC8qIGZsZXggKi8sIDIwTCAvKiBiYWNrb2ZmICovLCAxMDBMIC8qIGRlbGF5dW50aWwgKi8sCisgICAgICAgICAgICAgICAgZmFsc2UgLyogZXhwZWRpdGVkICovKTsKKyAgICAgICAgZW5naW5lLmluc2VydEludG9QZW5kaW5nKHNvcCk7CisgICAgICAgIGVuZ2luZS5pbnNlcnRJbnRvUGVuZGluZyhzb3AxKTsKKyAgICAgICAgZW5naW5lLmluc2VydEludG9QZW5kaW5nKGRlbGV0ZWQpOworCisgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLlBlbmRpbmdPcGVyYXRpb24gcG9wRGVsZXRlZCA9IGVuZ2luZS5nZXRQZW5kaW5nT3BlcmF0aW9ucygpLmdldCgyKTsKKyAgICAgICAgLy8gRnJlZSB2ZXJpZnlpbmcsIGdvaW5nIHRvIGRlbGV0ZSBpdCBhbnl3YXkuCisgICAgICAgIGFzc2VydEVxdWFscyhkZWxldGVkLnRhcmdldC5hY2NvdW50LCBwb3BEZWxldGVkLnRhcmdldC5hY2NvdW50KTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGRlbGV0ZWQudGFyZ2V0LnByb3ZpZGVyLCBwb3BEZWxldGVkLnRhcmdldC5wcm92aWRlcik7CisgICAgICAgIGFzc2VydEVxdWFscyhkZWxldGVkLnRhcmdldC5zZXJ2aWNlLCBwb3BEZWxldGVkLnRhcmdldC5zZXJ2aWNlKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGRlbGV0ZWQudGFyZ2V0LnVzZXJJZCwgcG9wRGVsZXRlZC50YXJnZXQudXNlcklkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGRlbGV0ZWQucmVhc29uLCBwb3BEZWxldGVkLnJlYXNvbik7CisgICAgICAgIGFzc2VydEVxdWFscyhkZWxldGVkLnN5bmNTb3VyY2UsIHBvcERlbGV0ZWQuc3luY1NvdXJjZSk7CisgICAgICAgIGFzc2VydEVxdWFscyhkZWxldGVkLmV4cGVkaXRlZCwgcG9wRGVsZXRlZC5leHBlZGl0ZWQpOworICAgICAgICBhc3NlcnQoYW5kcm9pZC5jb250ZW50LlBlcmlvZGljU3luYy5zeW5jRXh0cmFzRXF1YWxzKGRlbGV0ZWQuZXh0cmFzLCBwb3BEZWxldGVkLmV4dHJhcykpOworICAgICAgICAvLyBEZWxldGUgb25lIHRvIGZvcmNlIHdyaXRlLWFsbAorICAgICAgICBlbmdpbmUuZGVsZXRlRnJvbVBlbmRpbmcocG9wRGVsZXRlZCk7CisgICAgICAgIGFzc2VydEVxdWFscygiRGVsZXRlIG9mIHBlbmRpbmcgb3AgZmFpbGVkLiIsIDIsIGVuZ2luZS5nZXRQZW5kaW5nT3BlcmF0aW9uQ291bnQoKSk7CisgICAgICAgIC8vIElmIHRoZXJlJ3MgZGlydHkgcGVuZGluZyBkYXRhICh3aGljaCB0aGVyZSBpcyBiZWNhdXNlIHdlIGRlbGV0ZWQgYSBwZW5kaW5nIG9wKSB0aGlzCisgICAgICAgIC8vIHJlLXdyaXRlcyB0aGUgZW50aXJlIGZpbGUuCisgICAgICAgIGVuZ2luZS53cml0ZUFsbFN0YXRlKCk7CisKKyAgICAgICAgZW5naW5lLmNsZWFyQW5kUmVhZFN0YXRlKCk7CisKKyAgICAgICAgLy8gVmFsaWRhdGUgc3RhdGUgcmVhZCBiYWNrIG91dC4KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZWxldGUgb2YgcGVuZGluZyBvcCBmYWlsZWQuIiwgMiwgZW5naW5lLmdldFBlbmRpbmdPcGVyYXRpb25Db3VudCgpKTsKKworICAgICAgICBMaXN0PFN5bmNTdG9yYWdlRW5naW5lLlBlbmRpbmdPcGVyYXRpb24+IHBvcHMgPSBlbmdpbmUuZ2V0UGVuZGluZ09wZXJhdGlvbnMoKTsKKworICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5QZW5kaW5nT3BlcmF0aW9uIHBvcFJldHJpZXZlZCA9IHBvcHMuZ2V0KDApOworICAgICAgICBhc3NlcnRFcXVhbHMoc29wLnRhcmdldC5hY2NvdW50LCBwb3BSZXRyaWV2ZWQudGFyZ2V0LmFjY291bnQpOworICAgICAgICBhc3NlcnRFcXVhbHMoc29wLnRhcmdldC5wcm92aWRlciwgcG9wUmV0cmlldmVkLnRhcmdldC5wcm92aWRlcik7CisgICAgICAgIGFzc2VydEVxdWFscyhzb3AudGFyZ2V0LnNlcnZpY2UsIHBvcFJldHJpZXZlZC50YXJnZXQuc2VydmljZSk7CisgICAgICAgIGFzc2VydEVxdWFscyhzb3AudGFyZ2V0LnVzZXJJZCwgcG9wUmV0cmlldmVkLnRhcmdldC51c2VySWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoc29wLnJlYXNvbiwgcG9wUmV0cmlldmVkLnJlYXNvbik7CisgICAgICAgIGFzc2VydEVxdWFscyhzb3Auc3luY1NvdXJjZSwgcG9wUmV0cmlldmVkLnN5bmNTb3VyY2UpOworICAgICAgICBhc3NlcnRFcXVhbHMoc29wLmV4cGVkaXRlZCwgcG9wUmV0cmlldmVkLmV4cGVkaXRlZCk7CisgICAgICAgIGFzc2VydChhbmRyb2lkLmNvbnRlbnQuUGVyaW9kaWNTeW5jLnN5bmNFeHRyYXNFcXVhbHMoc29wLmV4dHJhcywgcG9wUmV0cmlldmVkLmV4dHJhcykpOworCisgICAgICAgIHBvcFJldHJpZXZlZCA9IHBvcHMuZ2V0KDEpOworICAgICAgICBhc3NlcnRFcXVhbHMoc29wMS50YXJnZXQuYWNjb3VudCwgcG9wUmV0cmlldmVkLnRhcmdldC5hY2NvdW50KTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcDEudGFyZ2V0LnByb3ZpZGVyLCBwb3BSZXRyaWV2ZWQudGFyZ2V0LnByb3ZpZGVyKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcDEudGFyZ2V0LnNlcnZpY2UsIHBvcFJldHJpZXZlZC50YXJnZXQuc2VydmljZSk7CisgICAgICAgIGFzc2VydEVxdWFscyhzb3AxLnRhcmdldC51c2VySWQsIHBvcFJldHJpZXZlZC50YXJnZXQudXNlcklkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcDEucmVhc29uLCBwb3BSZXRyaWV2ZWQucmVhc29uKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNvcDEuc3luY1NvdXJjZSwgcG9wUmV0cmlldmVkLnN5bmNTb3VyY2UpOworICAgICAgICBhc3NlcnRFcXVhbHMoc29wMS5leHBlZGl0ZWQsIHBvcFJldHJpZXZlZC5leHBlZGl0ZWQpOworICAgICAgICBhc3NlcnQoYW5kcm9pZC5jb250ZW50LlBlcmlvZGljU3luYy5zeW5jRXh0cmFzRXF1YWxzKHNvcDEuZXh0cmFzLCBwb3BSZXRyaWV2ZWQuZXh0cmFzKSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMzQsNDIgKzIyMyw0NCBAQAogICAgICAgICBmaW5hbCBpbnQgcGVyaW9kMiA9IDEwMDA7CiAKICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMxID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50MSwgYXV0aG9yaXR5LCBleHRyYXMxLCBwZXJpb2QxKTsKKyAgICAgICAgRW5kUG9pbnQgZW5kMSA9IG5ldyBFbmRQb2ludChhY2NvdW50MSwgYXV0aG9yaXR5LCAwKTsKKwogICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzIgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQxLCBhdXRob3JpdHksIGV4dHJhczIsIHBlcmlvZDEpOwogICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzMgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQxLCBhdXRob3JpdHksIGV4dHJhczIsIHBlcmlvZDIpOwogICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzQgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQyLCBhdXRob3JpdHksIGV4dHJhczIsIHBlcmlvZDIpOwogCi0gICAgICAgIAorCiAKICAgICAgICAgcmVtb3ZlUGVyaW9kaWNTeW5jcyhlbmdpbmUsIGFjY291bnQxLCAwLCBhdXRob3JpdHkpOwogICAgICAgICByZW1vdmVQZXJpb2RpY1N5bmNzKGVuZ2luZSwgYWNjb3VudDIsIDAsIGF1dGhvcml0eSk7CiAgICAgICAgIHJlbW92ZVBlcmlvZGljU3luY3MoZW5naW5lLCBhY2NvdW50MSwgMSwgYXV0aG9yaXR5KTsKIAogICAgICAgICAvLyB0aGlzIHNob3VsZCBhZGQgdHdvIGRpc3RpbmN0IHBlcmlvZGljIHN5bmNzIGZvciBhY2NvdW50MSBhbmQgb25lIGZvciBhY2NvdW50MgotICAgICAgICBlbmdpbmUuYWRkUGVyaW9kaWNTeW5jKHN5bmMxLCAwKTsKLSAgICAgICAgZW5naW5lLmFkZFBlcmlvZGljU3luYyhzeW5jMiwgMCk7Ci0gICAgICAgIGVuZ2luZS5hZGRQZXJpb2RpY1N5bmMoc3luYzMsIDApOwotICAgICAgICBlbmdpbmUuYWRkUGVyaW9kaWNTeW5jKHN5bmM0LCAwKTsKKyAgICAgICAgZW5naW5lLnVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jKG5ldyBFbmRQb2ludChhY2NvdW50MSwgYXV0aG9yaXR5LCAwKSwgcGVyaW9kMSwgMCwgZXh0cmFzMSk7CisgICAgICAgIGVuZ2luZS51cGRhdGVPckFkZFBlcmlvZGljU3luYyhuZXcgRW5kUG9pbnQoYWNjb3VudDEsIGF1dGhvcml0eSwgMCksIHBlcmlvZDEsIDAsIGV4dHJhczIpOworICAgICAgICBlbmdpbmUudXBkYXRlT3JBZGRQZXJpb2RpY1N5bmMobmV3IEVuZFBvaW50KGFjY291bnQxLCBhdXRob3JpdHksIDApLCBwZXJpb2QyLCAwLCBleHRyYXMyKTsKKyAgICAgICAgZW5naW5lLnVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jKG5ldyBFbmRQb2ludChhY2NvdW50MiwgYXV0aG9yaXR5LCAwKSwgcGVyaW9kMiwgMCwgZXh0cmFzMik7CiAgICAgICAgIC8vIGFkZCBhIHNlY29uZCB1c2VyCi0gICAgICAgIGVuZ2luZS5hZGRQZXJpb2RpY1N5bmMoc3luYzIsIDEpOworICAgICAgICBlbmdpbmUudXBkYXRlT3JBZGRQZXJpb2RpY1N5bmMobmV3IEVuZFBvaW50KGFjY291bnQxLCBhdXRob3JpdHksIDEpLCBwZXJpb2QxLCAwLCBleHRyYXMyKTsKIAotICAgICAgICBMaXN0PFBlcmlvZGljU3luYz4gc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50MSwgMCwgYXV0aG9yaXR5KTsKKyAgICAgICAgTGlzdDxQZXJpb2RpY1N5bmM+IHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MobmV3IEVuZFBvaW50KGFjY291bnQxLCBhdXRob3JpdHksIDApKTsKIAogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc3luY3Muc2l6ZSgpKTsKIAogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzEsIHN5bmNzLmdldCgwKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMywgc3luY3MuZ2V0KDEpKTsKIAotICAgICAgICBlbmdpbmUucmVtb3ZlUGVyaW9kaWNTeW5jKHN5bmMxLCAwKTsKKyAgICAgICAgZW5naW5lLnJlbW92ZVBlcmlvZGljU3luYyhuZXcgRW5kUG9pbnQoYWNjb3VudDEsIGF1dGhvcml0eSwgMCksIGV4dHJhczEpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudDEsIDAsIGF1dGhvcml0eSk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MobmV3IEVuZFBvaW50KGFjY291bnQxLCBhdXRob3JpdHksIDApKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMywgc3luY3MuZ2V0KDApKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQyLCAwLCBhdXRob3JpdHkpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKG5ldyBFbmRQb2ludChhY2NvdW50MiwgYXV0aG9yaXR5LCAwKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzQsIHN5bmNzLmdldCgwKSk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhzeW5jMi5hY2NvdW50LCAxLCBzeW5jMi5hdXRob3JpdHkpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKG5ldyBFbmRQb2ludChzeW5jMi5hY2NvdW50LCBzeW5jMi5hdXRob3JpdHksIDEpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMiwgc3luY3MuZ2V0KDApKTsKICAgICB9CkBAIC0xOTAsMTIgKzI4MSwxOSBAQAogICAgICAgICBmaW5hbCBpbnQgcGVyaW9kMiA9IDEwMDA7CiAgICAgICAgIGZpbmFsIGludCBmbGV4MSA9IDEwOwogICAgICAgICBmaW5hbCBpbnQgZmxleDIgPSAxMDA7CisgICAgICAgIEVuZFBvaW50IHBvaW50MSA9IG5ldyBFbmRQb2ludChhY2NvdW50MSwgYXV0aG9yaXR5LCAwKTsKKyAgICAgICAgRW5kUG9pbnQgcG9pbnQyID0gbmV3IEVuZFBvaW50KGFjY291bnQyLCBhdXRob3JpdHksIDApOworICAgICAgICBFbmRQb2ludCBwb2ludDFVc2VyMiA9IG5ldyBFbmRQb2ludChhY2NvdW50MSwgYXV0aG9yaXR5LCAxKTsKIAogICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzEgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQxLCBhdXRob3JpdHksIGV4dHJhczEsIHBlcmlvZDEsIGZsZXgxKTsKICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMyID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50MSwgYXV0aG9yaXR5LCBleHRyYXMyLCBwZXJpb2QxLCBmbGV4MSk7CiAgICAgICAgIFBlcmlvZGljU3luYyBzeW5jMyA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudDEsIGF1dGhvcml0eSwgZXh0cmFzMiwgcGVyaW9kMiwgZmxleDIpOwogICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzQgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQyLCBhdXRob3JpdHksIGV4dHJhczIsIHBlcmlvZDIsIGZsZXgyKTsKIAorICAgICAgICBFbmRQb2ludCB0YXJnZXQxID0gbmV3IEVuZFBvaW50KGFjY291bnQxLCBhdXRob3JpdHksIDApOworICAgICAgICBFbmRQb2ludCB0YXJnZXQyID0gbmV3IEVuZFBvaW50KGFjY291bnQyLCBhdXRob3JpdHksIDApOworICAgICAgICBFbmRQb2ludCB0YXJnZXQxVXNlckIgPSBuZXcgRW5kUG9pbnQoYWNjb3VudDEsIGF1dGhvcml0eSwgMSk7CisKICAgICAgICAgTW9ja0NvbnRlbnRSZXNvbHZlciBtb2NrUmVzb2x2ZXIgPSBuZXcgTW9ja0NvbnRlbnRSZXNvbHZlcigpOwogCiAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lIGVuZ2luZSA9IFN5bmNTdG9yYWdlRW5naW5lLm5ld1Rlc3RJbnN0YW5jZSgKQEAgLTIwNiw0MCArMzA0LDQyIEBACiAgICAgICAgIHJlbW92ZVBlcmlvZGljU3luY3MoZW5naW5lLCBhY2NvdW50MSwgMSwgYXV0aG9yaXR5KTsKIAogICAgICAgICAvLyBUaGlzIHNob3VsZCBhZGQgdHdvIGRpc3RpbmN0IHBlcmlvZGljIHN5bmNzIGZvciBhY2NvdW50MSBhbmQgb25lIGZvciBhY2NvdW50MgotICAgICAgICBlbmdpbmUuYWRkUGVyaW9kaWNTeW5jKHN5bmMxLCAwKTsKLSAgICAgICAgZW5naW5lLmFkZFBlcmlvZGljU3luYyhzeW5jMiwgMCk7Ci0gICAgICAgIGVuZ2luZS5hZGRQZXJpb2RpY1N5bmMoc3luYzMsIDApOyAvLyBTaG91bGQgZWRpdCBzeW5jMiBhbmQgdXBkYXRlIHRoZSBwZXJpb2QuCi0gICAgICAgIGVuZ2luZS5hZGRQZXJpb2RpY1N5bmMoc3luYzQsIDApOwotICAgICAgICAvLyBhZGQgYSBzZWNvbmQgdXNlcgotICAgICAgICBlbmdpbmUuYWRkUGVyaW9kaWNTeW5jKHN5bmMyLCAxKTsKKyAgICAgICAgZW5naW5lLnVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jKHRhcmdldDEsIHBlcmlvZDEsIGZsZXgxLCBleHRyYXMxKTsKKyAgICAgICAgZW5naW5lLnVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jKHRhcmdldDEsIHBlcmlvZDEsIGZsZXgxLCBleHRyYXMyKTsKKyAgICAgICAgLy8gRWRpdCBleGlzdGluZyBzeW5jIGFuZCB1cGRhdGUgdGhlIHBlcmlvZCBhbmQgZmxleC4KKyAgICAgICAgZW5naW5lLnVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jKHRhcmdldDEsIHBlcmlvZDIsIGZsZXgyLCBleHRyYXMyKTsKKyAgICAgICAgZW5naW5lLnVwZGF0ZU9yQWRkUGVyaW9kaWNTeW5jKHRhcmdldDIsIHBlcmlvZDIsIGZsZXgyLCBleHRyYXMyKTsKKyAgICAgICAgLy8gYWRkIGEgdGFyZ2V0IGZvciBhIHNlY29uZCB1c2VyLgorICAgICAgICBlbmdpbmUudXBkYXRlT3JBZGRQZXJpb2RpY1N5bmModGFyZ2V0MVVzZXJCLCBwZXJpb2QxLCBmbGV4MSwgZXh0cmFzMik7CiAKLSAgICAgICAgTGlzdDxQZXJpb2RpY1N5bmM+IHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudDEsIDAsIGF1dGhvcml0eSk7CisgICAgICAgIExpc3Q8UGVyaW9kaWNTeW5jPiBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDEpOwogCiAgICAgICAgIGFzc2VydEVxdWFscygyLCBzeW5jcy5zaXplKCkpOwogCiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMSwgc3luY3MuZ2V0KDApKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmMzLCBzeW5jcy5nZXQoMSkpOwogCi0gICAgICAgIGVuZ2luZS5yZW1vdmVQZXJpb2RpY1N5bmMoc3luYzEsIDApOworICAgICAgICBlbmdpbmUucmVtb3ZlUGVyaW9kaWNTeW5jKHRhcmdldDEsIGV4dHJhczEpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudDEsIDAsIGF1dGhvcml0eSk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0MSk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzMsIHN5bmNzLmdldCgwKSk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50MiwgMCwgYXV0aG9yaXR5KTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQyKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jNCwgc3luY3MuZ2V0KDApKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHN5bmMyLmFjY291bnQsIDEsIHN5bmMyLmF1dGhvcml0eSk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0MVVzZXJCKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMiwgc3luY3MuZ2V0KDApKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcmVtb3ZlUGVyaW9kaWNTeW5jcyhTeW5jU3RvcmFnZUVuZ2luZSBlbmdpbmUsIEFjY291bnQgYWNjb3VudCwgaW50IHVzZXJJZCwgU3RyaW5nIGF1dGhvcml0eSkgewotICAgICAgICBlbmdpbmUuc2V0SXNTeW5jYWJsZShhY2NvdW50LCB1c2VySWQsIGF1dGhvcml0eSwgZW5naW5lLmdldElzU3luY2FibGUoYWNjb3VudCwgMCwgYXV0aG9yaXR5KSk7Ci0gICAgICAgIExpc3Q8UGVyaW9kaWNTeW5jPiBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5KTsKKyAgICAgICAgRW5kUG9pbnQgdGFyZ2V0ID0gbmV3IEVuZFBvaW50KGFjY291bnQsIGF1dGhvcml0eSwgdXNlcklkKTsKKyAgICAgICAgZW5naW5lLnNldElzU3luY2FibGUoYWNjb3VudCwgdXNlcklkLCBhdXRob3JpdHksIGVuZ2luZS5nZXRJc1N5bmNhYmxlKGFjY291bnQsIHVzZXJJZCwgYXV0aG9yaXR5KSk7CisgICAgICAgIExpc3Q8UGVyaW9kaWNTeW5jPiBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldCk7CiAgICAgICAgIGZvciAoUGVyaW9kaWNTeW5jIHN5bmMgOiBzeW5jcykgewotICAgICAgICAgICAgZW5naW5lLnJlbW92ZVBlcmlvZGljU3luYyhzeW5jLCB1c2VySWQpOworICAgICAgICAgICAgZW5naW5lLnJlbW92ZVBlcmlvZGljU3luYyh0YXJnZXQsIHN5bmMuZXh0cmFzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjY0LDE2ICszNjQsMTkgQEAKICAgICAgICAgZmluYWwgaW50IGZsZXgxID0gMTA7CiAgICAgICAgIGZpbmFsIGludCBmbGV4MiA9IDEwMDsKIAorICAgICAgICBFbmRQb2ludCBwb2ludDEgPSBuZXcgRW5kUG9pbnQoYWNjb3VudDEsIGF1dGhvcml0eTEsIDApOworICAgICAgICBFbmRQb2ludCBwb2ludDIgPSBuZXcgRW5kUG9pbnQoYWNjb3VudDEsIGF1dGhvcml0eTIsIDApOworICAgICAgICBFbmRQb2ludCBwb2ludDMgPSBuZXcgRW5kUG9pbnQoYWNjb3VudDIsIGF1dGhvcml0eTEsIDApOworCiAgICAgICAgIFBlcmlvZGljU3luYyBzeW5jMSA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudDEsIGF1dGhvcml0eTEsIGV4dHJhczEsIHBlcmlvZDEsIGZsZXgxKTsKICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMyID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50MSwgYXV0aG9yaXR5MSwgZXh0cmFzMiwgcGVyaW9kMSwgZmxleDEpOwogICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzMgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQxLCBhdXRob3JpdHkyLCBleHRyYXMxLCBwZXJpb2QxLCBmbGV4MSk7CiAgICAgICAgIFBlcmlvZGljU3luYyBzeW5jNCA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudDEsIGF1dGhvcml0eTIsIGV4dHJhczIsIHBlcmlvZDIsIGZsZXgyKTsKICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmM1ID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50MiwgYXV0aG9yaXR5MSwgZXh0cmFzMSwgcGVyaW9kMSwgZmxleDEpOwogCi0gICAgICAgIE1vY2tDb250ZW50UmVzb2x2ZXIgbW9ja1Jlc29sdmVyID0gbmV3IE1vY2tDb250ZW50UmVzb2x2ZXIoKTsKLQotICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZSBlbmdpbmUgPSBTeW5jU3RvcmFnZUVuZ2luZS5uZXdUZXN0SW5zdGFuY2UoCi0gICAgICAgICAgICAgICAgbmV3IFRlc3RDb250ZXh0KG1vY2tSZXNvbHZlciwgZ2V0Q29udGV4dCgpKSk7CisgICAgICAgIEVuZFBvaW50IHRhcmdldDEgPSBuZXcgRW5kUG9pbnQoYWNjb3VudDEsIGF1dGhvcml0eTEsIDApOworICAgICAgICBFbmRQb2ludCB0YXJnZXQyID0gbmV3IEVuZFBvaW50KGFjY291bnQxLCBhdXRob3JpdHkyLCAwKTsKKyAgICAgICAgRW5kUG9pbnQgdGFyZ2V0MyA9IG5ldyBFbmRQb2ludChhY2NvdW50MiwgYXV0aG9yaXR5MSwgMCk7CiAKICAgICAgICAgcmVtb3ZlUGVyaW9kaWNTeW5jcyhlbmdpbmUsIGFjY291bnQxLCAwLCBhdXRob3JpdHkxKTsKICAgICAgICAgcmVtb3ZlUGVyaW9kaWNTeW5jcyhlbmdpbmUsIGFjY291bnQyLCAwLCBhdXRob3JpdHkxKTsKQEAgLTI5NCwyNiArMzk3LDI2IEBACiAgICAgICAgIGVuZ2luZS5zZXRJc1N5bmNhYmxlKGFjY291bnQyLCAwLCBhdXRob3JpdHkyLCAwKTsKICAgICAgICAgZW5naW5lLnNldFN5bmNBdXRvbWF0aWNhbGx5KGFjY291bnQyLCAwLCBhdXRob3JpdHkyLCB0cnVlKTsKIAotICAgICAgICBlbmdpbmUuYWRkUGVyaW9kaWNTeW5jKHN5bmMxLCAwKTsKLSAgICAgICAgZW5naW5lLmFkZFBlcmlvZGljU3luYyhzeW5jMiwgMCk7Ci0gICAgICAgIGVuZ2luZS5hZGRQZXJpb2RpY1N5bmMoc3luYzMsIDApOwotICAgICAgICBlbmdpbmUuYWRkUGVyaW9kaWNTeW5jKHN5bmM0LCAwKTsKLSAgICAgICAgZW5naW5lLmFkZFBlcmlvZGljU3luYyhzeW5jNSwgMCk7CisgICAgICAgIGVuZ2luZS51cGRhdGVPckFkZFBlcmlvZGljU3luYyh0YXJnZXQxLCBwZXJpb2QxLCBmbGV4MSwgZXh0cmFzMSk7CisgICAgICAgIGVuZ2luZS51cGRhdGVPckFkZFBlcmlvZGljU3luYyh0YXJnZXQxLCBwZXJpb2QxLCBmbGV4MSwgZXh0cmFzMik7CisgICAgICAgIGVuZ2luZS51cGRhdGVPckFkZFBlcmlvZGljU3luYyh0YXJnZXQyLCBwZXJpb2QxLCBmbGV4MSwgZXh0cmFzMSk7CisgICAgICAgIGVuZ2luZS51cGRhdGVPckFkZFBlcmlvZGljU3luYyh0YXJnZXQyLCBwZXJpb2QyLCBmbGV4MiwgZXh0cmFzMik7CisgICAgICAgIGVuZ2luZS51cGRhdGVPckFkZFBlcmlvZGljU3luYyh0YXJnZXQzLCBwZXJpb2QxLCBmbGV4MSwgZXh0cmFzMSk7CiAKICAgICAgICAgZW5naW5lLndyaXRlQWxsU3RhdGUoKTsKICAgICAgICAgZW5naW5lLmNsZWFyQW5kUmVhZFN0YXRlKCk7CiAKLSAgICAgICAgTGlzdDxQZXJpb2RpY1N5bmM+IHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudDEsIDAsIGF1dGhvcml0eTEpOworICAgICAgICBMaXN0PFBlcmlvZGljU3luYz4gc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQxKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMSwgc3luY3MuZ2V0KDApKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmMyLCBzeW5jcy5nZXQoMSkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudDEsIDAsIGF1dGhvcml0eTIpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc3luY3Muc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmMzLCBzeW5jcy5nZXQoMCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzQsIHN5bmNzLmdldCgxKSk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50MiwgMCwgYXV0aG9yaXR5MSk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0Myk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzUsIHN5bmNzLmdldCgwKSk7CiAKQEAgLTMyOCw2ICs0MzEsNTAgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGVuZ2luZS5nZXRJc1N5bmNhYmxlKGFjY291bnQyLCAwLCBhdXRob3JpdHkyKSk7CiAgICAgfQogCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RDb21wb25lbnRQYXJzaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICAgICAgYnl0ZVtdIGFjY291bnRzRmlsZURhdGEgPSAoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04JyBzdGFuZGFsb25lPSd5ZXMnID8+XG4iCisgICAgICAgICAgICAgICAgKyAiPGFjY291bnRzIHZlcnNpb249XCIyXCIgPlxuIgorICAgICAgICAgICAgICAgICsgIjxhdXRob3JpdHkgaWQ9XCIwXCIgdXNlcj1cIjBcIiBwYWNrYWdlPVwiIiArIHN5bmNTZXJ2aWNlMS5nZXRQYWNrYWdlTmFtZSgpICsgIlwiIgorICAgICAgICAgICAgICAgICsgIiBjbGFzcz1cIiIgKyBzeW5jU2VydmljZTEuZ2V0Q2xhc3NOYW1lKCkgKyAiXCIgc3luY2FibGU9XCJ0cnVlXCI+IgorICAgICAgICAgICAgICAgICsgIlxuPHBlcmlvZGljU3luYyBwZXJpb2Q9XCIiICsgZGF5UG9sbCArICJcIiBmbGV4PVwiIiArIGRheUZ1enogKyAiXCIvPiIKKyAgICAgICAgICAgICAgICArICJcbjwvYXV0aG9yaXR5PiIKKyAgICAgICAgICAgICAgICArICI8L2FjY291bnRzPiIpLmdldEJ5dGVzKCk7CisKKyAgICAgICAgRmlsZSBzeW5jRGlyID0gZ2V0U3luY0RpcigpOworICAgICAgICBzeW5jRGlyLm1rZGlycygpOworICAgICAgICBBdG9taWNGaWxlIGFjY291bnRJbmZvRmlsZSA9IG5ldyBBdG9taWNGaWxlKG5ldyBGaWxlKHN5bmNEaXIsICJhY2NvdW50cy54bWwiKSk7CisgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gYWNjb3VudEluZm9GaWxlLnN0YXJ0V3JpdGUoKTsKKyAgICAgICAgZm9zLndyaXRlKGFjY291bnRzRmlsZURhdGEpOworICAgICAgICBhY2NvdW50SW5mb0ZpbGUuZmluaXNoV3JpdGUoZm9zKTsKKworICAgICAgICBlbmdpbmUuY2xlYXJBbmRSZWFkU3RhdGUoKTsKKworICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZS5BdXRob3JpdHlJbmZvIGFJbmZvID0gZW5naW5lLmdldEF1dGhvcml0eSgwKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChhSW5mbyk7CisKKyAgICAgICAgLy8gVGVzdCBzZXJ2aWNlIGNvbXBvbmVudCByZWFkCisgICAgICAgIExpc3Q8UGVyaW9kaWNTeW5jPiBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKAorICAgICAgICAgICAgICAgIG5ldyBTeW5jU3RvcmFnZUVuZ2luZS5FbmRQb2ludChzeW5jU2VydmljZTEsIDApKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN5bmNzLnNpemUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyh0cnVlLCBlbmdpbmUuZ2V0SXNUYXJnZXRTZXJ2aWNlQWN0aXZlKHN5bmNTZXJ2aWNlMSwgMCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q29tcG9uZW50U2V0dGluZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgRW5kUG9pbnQgdGFyZ2V0MSA9IG5ldyBFbmRQb2ludChzeW5jU2VydmljZTEsIDApOworICAgICAgICBlbmdpbmUudXBkYXRlT3JBZGRQZXJpb2RpY1N5bmModGFyZ2V0MSwgZGF5UG9sbCwgZGF5RnV6eiwgQnVuZGxlLkVNUFRZKTsKKyAgICAgICAgCisgICAgICAgIGVuZ2luZS5zZXRJc1RhcmdldFNlcnZpY2VBY3RpdmUodGFyZ2V0MS5zZXJ2aWNlLCAwLCB0cnVlKTsKKyAgICAgICAgYm9vbGVhbiBhY3RpdmUgPSBlbmdpbmUuZ2V0SXNUYXJnZXRTZXJ2aWNlQWN0aXZlKHRhcmdldDEuc2VydmljZSwgMCk7CisgICAgICAgIGFzc2VydChhY3RpdmUpOworCisgICAgICAgIGVuZ2luZS5zZXRJc1RhcmdldFNlcnZpY2VBY3RpdmUodGFyZ2V0MS5zZXJ2aWNlLCAxLCBmYWxzZSk7CisgICAgICAgIGFjdGl2ZSA9IGVuZ2luZS5nZXRJc1RhcmdldFNlcnZpY2VBY3RpdmUodGFyZ2V0MS5zZXJ2aWNlLCAxKTsKKyAgICAgICAgYXNzZXJ0KCFhY3RpdmUpOworICAgIH0KKwogICAgIEBNZWRpdW1UZXN0CiAgICAgLyoqCiAgICAgICogVjIgaW50cm9kdWNlcyBmbGV4IHRpbWUgYXMgd2VsbCBhcyBzZXJ2aWNlIGNvbXBvbmVudHMuCkBAIC0zMzksMjAgKzQ4NiwyMCBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5MiA9ICJhdXRoMiI7CiAgICAgICAgIGZpbmFsIFN0cmluZyBhdXRob3JpdHkzID0gImF1dGgzIjsKIAotICAgICAgICBmaW5hbCBsb25nIGRheVBvbGwgPSAoNjAgKiA2MCAqIDI0KTsKLSAgICAgICAgZmluYWwgbG9uZyBkYXlGdXp6ID0gNjA7Ci0gICAgICAgIGZpbmFsIGxvbmcgdGhvdXNhbmRTZWNzID0gMTAwMDsKLSAgICAgICAgZmluYWwgbG9uZyB0aG91c2FuZFNlY3NGdXp6ID0gMTAwOwotICAgICAgICBmaW5hbCBCdW5kbGUgZXh0cmFzID0gbmV3IEJ1bmRsZSgpOwotICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzEgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eTEsIGV4dHJhcywgZGF5UG9sbCwgZGF5RnV6eik7Ci0gICAgICAgIFBlcmlvZGljU3luYyBzeW5jMiA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudCwgYXV0aG9yaXR5MiwgZXh0cmFzLCBkYXlQb2xsLCBkYXlGdXp6KTsKLSAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMzID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50LCBhdXRob3JpdHkzLCBleHRyYXMsIGRheVBvbGwsIGRheUZ1enopOwotICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzFzID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50LCBhdXRob3JpdHkxLCBleHRyYXMsIHRob3VzYW5kU2VjcywgdGhvdXNhbmRTZWNzRnV6eik7Ci0gICAgICAgIFBlcmlvZGljU3luYyBzeW5jMnMgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eTIsIGV4dHJhcywgdGhvdXNhbmRTZWNzLCB0aG91c2FuZFNlY3NGdXp6KTsKLSAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMzcyA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudCwgYXV0aG9yaXR5MywgZXh0cmFzLCB0aG91c2FuZFNlY3MsIHRob3VzYW5kU2Vjc0Z1enopOwotICAgICAgICBNb2NrQ29udGVudFJlc29sdmVyIG1vY2tSZXNvbHZlciA9IG5ldyBNb2NrQ29udGVudFJlc29sdmVyKCk7CisgICAgICAgIEVuZFBvaW50IHRhcmdldDEgPSBuZXcgRW5kUG9pbnQoYWNjb3VudCwgYXV0aG9yaXR5MSwgMCk7CisgICAgICAgIEVuZFBvaW50IHRhcmdldDIgPSBuZXcgRW5kUG9pbnQoYWNjb3VudCwgYXV0aG9yaXR5MiwgMCk7CisgICAgICAgIEVuZFBvaW50IHRhcmdldDMgPSBuZXcgRW5kUG9pbnQoYWNjb3VudCwgYXV0aG9yaXR5MywgMCk7CisgICAgICAgIEVuZFBvaW50IHRhcmdldDQgPSBuZXcgRW5kUG9pbnQoYWNjb3VudCwgYXV0aG9yaXR5MywgMSk7CiAKLSAgICAgICAgZmluYWwgVGVzdENvbnRleHQgdGVzdENvbnRleHQgPSBuZXcgVGVzdENvbnRleHQobW9ja1Jlc29sdmVyLCBnZXRDb250ZXh0KCkpOworICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzEgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eTEsIEJ1bmRsZS5FTVBUWSwgZGF5UG9sbCwgZGF5RnV6eik7CisgICAgICAgIFBlcmlvZGljU3luYyBzeW5jMiA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudCwgYXV0aG9yaXR5MiwgQnVuZGxlLkVNUFRZLCBkYXlQb2xsLCBkYXlGdXp6KTsKKyAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMzID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50LCBhdXRob3JpdHkzLCBCdW5kbGUuRU1QVFksIGRheVBvbGwsIGRheUZ1enopOworICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzFzID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50LCBhdXRob3JpdHkxLCBCdW5kbGUuRU1QVFksIHRob3VzYW5kU2VjcywKKyAgICAgICAgICAgICAgICB0aG91c2FuZFNlY3NGdXp6KTsKKyAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMycyA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudCwgYXV0aG9yaXR5MiwgQnVuZGxlLkVNUFRZLCB0aG91c2FuZFNlY3MsCisgICAgICAgICAgICAgICAgdGhvdXNhbmRTZWNzRnV6eik7CisgICAgICAgIFBlcmlvZGljU3luYyBzeW5jM3MgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eTMsIEJ1bmRsZS5FTVBUWSwgdGhvdXNhbmRTZWNzLAorICAgICAgICAgICAgICAgIHRob3VzYW5kU2Vjc0Z1enopOwogCiAgICAgICAgIGJ5dGVbXSBhY2NvdW50c0ZpbGVEYXRhID0gKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1dGYtOCcgc3RhbmRhbG9uZT0neWVzJyA/PlxuIgogICAgICAgICAgICAgICAgICsgIjxhY2NvdW50cyB2ZXJzaW9uPVwiMlwiID5cbiIKQEAgLTM3OCwyMSArNTI1LDIyIEBACiAgICAgICAgIGZvcy53cml0ZShhY2NvdW50c0ZpbGVEYXRhKTsKICAgICAgICAgYWNjb3VudEluZm9GaWxlLmZpbmlzaFdyaXRlKGZvcyk7CiAKLSAgICAgICAgU3luY1N0b3JhZ2VFbmdpbmUgZW5naW5lID0gU3luY1N0b3JhZ2VFbmdpbmUubmV3VGVzdEluc3RhbmNlKHRlc3RDb250ZXh0KTsKKyAgICAgICAgZW5naW5lLmNsZWFyQW5kUmVhZFN0YXRlKCk7CiAKLSAgICAgICAgTGlzdDxQZXJpb2RpY1N5bmM+IHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5MSk7CisgICAgICAgIExpc3Q8UGVyaW9kaWNTeW5jPiBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDEpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIkdvdCBpbmNvcnJlY3QgIyBvZiBzeW5jcyIsIDEsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMSwgc3luY3MuZ2V0KDApKTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQsIDAsIGF1dGhvcml0eTIpOworICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKHRhcmdldDIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc3luY3Muc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmMyLCBzeW5jcy5nZXQoMCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5Myk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0Myk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzMsIHN5bmNzLmdldCgwKSk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCAxLCBhdXRob3JpdHkzKTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQ0KTsKKwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc3luY3Muc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHN5bmMzLCBzeW5jcy5nZXQoMCkpOwogCkBAIC00MTEsMTMgKzU1OSwxMyBAQAogCiAgICAgICAgIGVuZ2luZS5jbGVhckFuZFJlYWRTdGF0ZSgpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5MSk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0MSk7CiAgICAgICAgIGFzc2VydEVxdWFscygwLCBzeW5jcy5zaXplKCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5Mik7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0Mik7CiAgICAgICAgIGFzc2VydEVxdWFscygwLCBzeW5jcy5zaXplKCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5Myk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0Myk7CiAgICAgICAgIGFzc2VydEVxdWFscygwLCBzeW5jcy5zaXplKCkpOwogCiAgICAgICAgIGFjY291bnRzRmlsZURhdGEgPSAoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04JyBzdGFuZGFsb25lPSd5ZXMnID8+XG4iCkBAIC00NDAsMTUgKzU4OCwxNSBAQAogCiAgICAgICAgIGVuZ2luZS5jbGVhckFuZFJlYWRTdGF0ZSgpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5MSk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0MSk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzFzLCBzeW5jcy5nZXQoMCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5Mik7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0Mik7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzJzLCBzeW5jcy5nZXQoMCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5Myk7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0Myk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzNzLCBzeW5jcy5nZXQoMCkpOwogICAgIH0KQEAgLTQ2MCw2ICs2MDgsMTIgQEAKICAgICAgICAgZmluYWwgU3RyaW5nIGF1dGhvcml0eTIgPSAiYXV0aDIiOwogICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5MyA9ICJhdXRoMyI7CiAgICAgICAgIGZpbmFsIEJ1bmRsZSBleHRyYXMgPSBuZXcgQnVuZGxlKCk7CisKKyAgICAgICAgRW5kUG9pbnQgdGFyZ2V0MSA9IG5ldyBFbmRQb2ludChhY2NvdW50LCBhdXRob3JpdHkxLCAwKTsKKyAgICAgICAgRW5kUG9pbnQgdGFyZ2V0MiA9IG5ldyBFbmRQb2ludChhY2NvdW50LCBhdXRob3JpdHkyLCAwKTsKKyAgICAgICAgRW5kUG9pbnQgdGFyZ2V0MyA9IG5ldyBFbmRQb2ludChhY2NvdW50LCBhdXRob3JpdHkzLCAwKTsKKyAgICAgICAgRW5kUG9pbnQgdGFyZ2V0NCA9IG5ldyBFbmRQb2ludChhY2NvdW50LCBhdXRob3JpdHkzLCAxKTsKKwogICAgICAgICBQZXJpb2RpY1N5bmMgc3luYzEgPSBuZXcgUGVyaW9kaWNTeW5jKGFjY291bnQsIGF1dGhvcml0eTEsIGV4dHJhcywgKGxvbmcpICg2MCAqIDYwICogMjQpKTsKICAgICAgICAgUGVyaW9kaWNTeW5jIHN5bmMyID0gbmV3IFBlcmlvZGljU3luYyhhY2NvdW50LCBhdXRob3JpdHkyLCBleHRyYXMsIChsb25nKSAoNjAgKiA2MCAqIDI0KSk7CiAgICAgICAgIFBlcmlvZGljU3luYyBzeW5jMyA9IG5ldyBQZXJpb2RpY1N5bmMoYWNjb3VudCwgYXV0aG9yaXR5MywgZXh0cmFzLCAobG9uZykgKDYwICogNjAgKiAyNCkpOwpAQCAtNDg4LDE5ICs2NDIsMjAgQEAKIAogICAgICAgICBTeW5jU3RvcmFnZUVuZ2luZSBlbmdpbmUgPSBTeW5jU3RvcmFnZUVuZ2luZS5uZXdUZXN0SW5zdGFuY2UodGVzdENvbnRleHQpOwogCi0gICAgICAgIExpc3Q8UGVyaW9kaWNTeW5jPiBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQsIDAsIGF1dGhvcml0eTEpOworICAgICAgICBMaXN0PFBlcmlvZGljU3luYz4gc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQxKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygiZXhwZWN0ZWQgc3luYzE6ICIgKyBzeW5jMS50b1N0cmluZygpICsgIiA9PSBzeW5jIDIiICsgc3luY3MuZ2V0KDApLnRvU3RyaW5nKCksIHN5bmMxLCBzeW5jcy5nZXQoMCkpOwogCi0gICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3MoYWNjb3VudCwgMCwgYXV0aG9yaXR5Mik7CisgICAgICAgIHN5bmNzID0gZW5naW5lLmdldFBlcmlvZGljU3luY3ModGFyZ2V0Mik7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzIsIHN5bmNzLmdldCgwKSk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCAwLCBhdXRob3JpdHkzKTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQzKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMywgc3luY3MuZ2V0KDApKTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQ0KTsKIAotICAgICAgICBzeW5jcyA9IGVuZ2luZS5nZXRQZXJpb2RpY1N5bmNzKGFjY291bnQsIDEsIGF1dGhvcml0eTMpOworCiAgICAgICAgIGFzc2VydEVxdWFscygxLCBzeW5jcy5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc3luYzMsIHN5bmNzLmdldCgwKSk7CiAKQEAgLTUxOCwxMyArNjczLDEzIEBACiAKICAgICAgICAgZW5naW5lLmNsZWFyQW5kUmVhZFN0YXRlKCk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCAwLCBhdXRob3JpdHkxKTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQxKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHN5bmNzLnNpemUoKSk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCAwLCBhdXRob3JpdHkyKTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQyKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHN5bmNzLnNpemUoKSk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCAwLCBhdXRob3JpdHkzKTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQzKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHN5bmNzLnNpemUoKSk7CiAKICAgICAgICAgYWNjb3VudHNGaWxlRGF0YSA9ICgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnIHN0YW5kYWxvbmU9J3llcycgPz5cbiIKQEAgLTU0NywxNSArNzAyLDE1IEBACiAKICAgICAgICAgZW5naW5lLmNsZWFyQW5kUmVhZFN0YXRlKCk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCAwLCBhdXRob3JpdHkxKTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQxKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMXMsIHN5bmNzLmdldCgwKSk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCAwLCBhdXRob3JpdHkyKTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQyKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jMnMsIHN5bmNzLmdldCgwKSk7CiAKLSAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyhhY2NvdW50LCAwLCBhdXRob3JpdHkzKTsKKyAgICAgICAgc3luY3MgPSBlbmdpbmUuZ2V0UGVyaW9kaWNTeW5jcyh0YXJnZXQzKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN5bmNzLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhzeW5jM3MsIHN5bmNzLmdldCgwKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbExvY2F0aW9uLmphdmEgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9DZWxsTG9jYXRpb24uamF2YQppbmRleCA0MmMyYWZmLi5mOWEyMjJmIDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9DZWxsTG9jYXRpb24uamF2YQorKysgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9DZWxsTG9jYXRpb24uamF2YQpAQCAtMTksOSArMTksNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7Ci0KIAogaW1wb3J0IGFuZHJvaWQudGVsZXBob255LmNkbWEuQ2RtYUNlbGxMb2NhdGlvbjsKIGltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5nc20uR3NtQ2VsbExvY2F0aW9uOwpkaWZmIC0tZ2l0IGEvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvQ2VsbFNpZ25hbFN0cmVuZ3RoLmphdmEgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9DZWxsU2lnbmFsU3RyZW5ndGguamF2YQppbmRleCAzYjQ3MGZjLi45YzIzZjc4IDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9DZWxsU2lnbmFsU3RyZW5ndGguamF2YQorKysgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9DZWxsU2lnbmFsU3RyZW5ndGguamF2YQpAQCAtMTYsOSArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQudGVsZXBob255OwogCi1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotCiAvKioKICAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGNlbGwgcGhvbmUgc2lnbmFsIHN0cmVuZ3RoIHJlbGF0ZWQgaW5mb3JtYXRpb24uCiAgKi8KZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1Bob25lU3RhdGVMaXN0ZW5lci5qYXZhIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvUGhvbmVTdGF0ZUxpc3RlbmVyLmphdmEKaW5kZXggZmY3N2ZjMC4uMDIyYmYxMiAxMDA2NDQKLS0tIGEvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvUGhvbmVTdGF0ZUxpc3RlbmVyLmphdmEKKysrIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvUGhvbmVTdGF0ZUxpc3RlbmVyLmphdmEKQEAgLTIzLDcgKzIzLDYgQEAKIGltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5TaWduYWxTdHJlbmd0aDsKIGltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5DZWxsTG9jYXRpb247CiBpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuQ2VsbEluZm87Ci1pbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuUmxvZzsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5JUGhvbmVTdGF0ZUxpc3RlbmVyOwogCmRpZmYgLS1naXQgYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9SbG9nLmphdmEgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9SbG9nLmphdmEKaW5kZXggOWFjN2JkYS4uMmE3ZjdhZiAxMDA2NDQKLS0tIGEvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvUmxvZy5qYXZhCisrKyBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1Jsb2cuamF2YQpAQCAtMTYsMTMgKzE2LDggQEAKIAogcGFja2FnZSBhbmRyb2lkLnRlbGVwaG9ueTsKIAotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLlJ1bnRpbWVJbml0OwotCiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KIC8qKgogICogQSBjbGFzcyB0byBsb2cgc3RyaW5ncyB0byB0aGUgUkFESU8gTE9HLgogICoKZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RoaXJkUGFydHlDYWxsTGlzdGVuZXIuamF2YSBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RoaXJkUGFydHlDYWxsTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDI2NWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQudGVsZXBob255OworCitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuSVRoaXJkUGFydHlDYWxsTGlzdGVuZXI7CisKKy8qKgorICogSW50ZXJmYWNlIHByb3ZpZGVkIHRvIHtAbGluayBhbmRyb2lkLnRlbGVwaG9ueS5UaGlyZFBhcnR5Q2FsbFNlcnZpY2V9LiBUaGUgc2VydmljZSBjYW4gdXNlIHRoaXMKKyAqIHRvIG5vdGlmeSB0aGUgbGlzdGVuZXIgb2YgY2hhbmdlcyB0byB0aGUgY2FsbCBzdGF0ZS4KKyAqLworcHVibGljIGNsYXNzIFRoaXJkUGFydHlDYWxsTGlzdGVuZXIgeworICAgIHByaXZhdGUgZmluYWwgSVRoaXJkUGFydHlDYWxsTGlzdGVuZXIgbUxpc3RlbmVyOworCisgICAgLy8gQ2FsbCBlbmQgcmVhc29uLiBUT0RPOiByZW5hbWUgdGhpcyB0byBEaXNjb25uZWN0Q2F1c2Ugb25jZSB0aGV5IGFyZSBwdWJsaWMuCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FMTF9FTkRfTk9STUFMID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQUxMX0VORF9JTkNPTUlOR19NSVNTRUQgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTExfRU5EX09USEVSID0gMzsKKworICAgIHB1YmxpYyBUaGlyZFBhcnR5Q2FsbExpc3RlbmVyKElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIGlmIChsaXN0ZW5lciA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGxpc3RlbmVyIik7CisgICAgICAgIH0KKyAgICAgICAgbUxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBzZXJ2aWNlIHdoZW4gYSBjYWxsIHByb3ZpZGVyIGlzIGF2YWlsYWJsZSB0byBwZXJmb3JtIHRoZSBvdXRnb2luZyBvciBpbmNvbWluZworICAgICAqIGNhbGwuCisgICAgICovCisgICAgcHVibGljIHZvaWQgb25DYWxsUHJvdmlkZXJBdHRhY2hlZChUaGlyZFBhcnR5Q2FsbFByb3ZpZGVyIGNhbGxQcm92aWRlcikgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUxpc3RlbmVyLm9uQ2FsbFByb3ZpZGVyQXR0YWNoZWQoY2FsbFByb3ZpZGVyLmdldENhbGxiYWNrKCkpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogTm90aWZpZXMgdGhlIGxpc3RlbmVyIHRoYXQgcmluZ2luZyBoYXMgc3RhcnRlZCBmb3IgdGhpcyBjYWxsLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG9uUmluZ2luZ1N0YXJ0ZWQoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtTGlzdGVuZXIub25SaW5naW5nU3RhcnRlZCgpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogTm90aWZpZXMgdGhlIGxpc3RlbmVyIHRoYXQgdGhlIGNhbGwgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGVzdGFibGlzaGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG9uQ2FsbEVzdGFibGlzaGVkKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUxpc3RlbmVyLm9uQ2FsbEVzdGFibGlzaGVkKCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOb3RpZmllcyB0aGUgbGlzdGVuZXIgdGhhdCB0aGUgY2FsbCBoYXMgZW5kZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgb25DYWxsRW5kZWQoaW50IHJlYXNvbikgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUxpc3RlbmVyLm9uQ2FsbEVuZGVkKHJlYXNvbik7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9UaGlyZFBhcnR5Q2FsbFByb3ZpZGVyLmphdmEgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9UaGlyZFBhcnR5Q2FsbFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4YTFlYQotLS0gL2Rldi9udWxsCisrKyBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RoaXJkUGFydHlDYWxsUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC50ZWxlcGhvbnk7CisKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOworCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LklUaGlyZFBhcnR5Q2FsbFByb3ZpZGVyOworCisvKioKKyAqIEludGVyZmFjZSBzZW50IHRvIHtAbGluayBhbmRyb2lkLnRlbGVwaG9ueS5UaGlyZFBhcnR5Q2FsbExpc3RlbmVyI29uQ2FsbFByb3ZpZGVyQXR0YWNoZWQKKyAqIG9uQ2FsbFByb3ZpZGVyQXR0YWNoZWR9LiBUaGlzIGlzIHVzZWQgdG8gY29udHJvbCBhbiBvdXRnb2luZyBvciBhbiBpbmNvbWluZyBjYWxsLgorICovCitwdWJsaWMgY2xhc3MgVGhpcmRQYXJ0eUNhbGxQcm92aWRlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19NVVRFID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX0hBTkdVUCA9IDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19JTkNPTUlOR19DQUxMX0FDQ0VQVCA9IDM7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19TRU5EX0RUTUYgPSA0OworCisgICAgLyoqCisgICAgICogTXV0ZXMgb3IgdW5tdXRlcyB0aGUgY2FsbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBtdXRlKGJvb2xlYW4gc2hvdWxkTXV0ZSkgeworICAgICAgICAvLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGVtcHR5CisgICAgfQorCisgICAgLyoqCisgICAgICogRW5kcyB0aGUgY3VycmVudCBjYWxsLiBJZiB0aGlzIGlzIGFuIHVuYW5zd2VyZWQgaW5jb21pbmcgY2FsbCB0aGVuIHRoZSBjYWxsIGlzIHJlamVjdGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGhhbmd1cCgpIHsKKyAgICAgICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBlbXB0eQorICAgIH0KKworICAgLyoqCisgICAgICogQWNjZXB0cyB0aGUgaW5jb21pbmcgY2FsbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBpbmNvbWluZ0NhbGxBY2NlcHQoKSB7CisgICAgICAgIC8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZW1wdHkKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZW5kcyB0aGUgZ2l2ZW4gRFRNRiBjb2RlLiBUaGUgY29kZSBjYW4gYmUgJzAnLSc5JywgJ0EnLSdEJywgJyMnLCBvciAnKicuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2VuZER0bWYoY2hhciBjKSB7CisgICAgICAgIC8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZW1wdHkKKyAgICB9CisKKyAgICBJVGhpcmRQYXJ0eUNhbGxQcm92aWRlciBnZXRDYWxsYmFjaygpIHsKKyAgICAgICAgcmV0dXJuIG1DYWxsYmFjazsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIElUaGlyZFBhcnR5Q2FsbFByb3ZpZGVyIG1DYWxsYmFjayA9IG5ldyBJVGhpcmRQYXJ0eUNhbGxQcm92aWRlci5TdHViKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgbXV0ZShib29sZWFuIHNob3VsZE11dGUpIHsKKyAgICAgICAgICAgIE1lc3NhZ2Uub2J0YWluKG1IYW5kbGVyLCBNU0dfTVVURSwgc2hvdWxkTXV0ZSA/IDEgOiAwLCAwKS5zZW5kVG9UYXJnZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBoYW5ndXAoKSB7CisgICAgICAgICAgICBNZXNzYWdlLm9idGFpbihtSGFuZGxlciwgTVNHX0hBTkdVUCkuc2VuZFRvVGFyZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgaW5jb21pbmdDYWxsQWNjZXB0KCkgeworICAgICAgICAgICAgTWVzc2FnZS5vYnRhaW4obUhhbmRsZXIsIE1TR19JTkNPTUlOR19DQUxMX0FDQ0VQVCkuc2VuZFRvVGFyZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2VuZER0bWYoY2hhciBjKSB7CisgICAgICAgICAgICBNZXNzYWdlLm9idGFpbihtSGFuZGxlciwgTVNHX1NFTkRfRFRNRiwgKGludCkgYywgMCkuc2VuZFRvVGFyZ2V0KCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIG1IYW5kbGVyID0gbmV3IEhhbmRsZXIoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfTVVURToKKyAgICAgICAgICAgICAgICAgICAgbXV0ZShtc2cuYXJnMSAhPSAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfSEFOR1VQOgorICAgICAgICAgICAgICAgICAgICBoYW5ndXAoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfSU5DT01JTkdfQ0FMTF9BQ0NFUFQ6CisgICAgICAgICAgICAgICAgICAgIGluY29taW5nQ2FsbEFjY2VwdCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19TRU5EX0RUTUY6CisgICAgICAgICAgICAgICAgICAgIHNlbmREdG1mKChjaGFyKSBtc2cuYXJnMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RoaXJkUGFydHlDYWxsU2VydmljZS5qYXZhIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvVGhpcmRQYXJ0eUNhbGxTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkZGI0MwotLS0gL2Rldi9udWxsCisrKyBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RoaXJkUGFydHlDYWxsU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQudGVsZXBob255OworCitpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOworaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CitpbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuSVRoaXJkUGFydHlDYWxsTGlzdGVuZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LklUaGlyZFBhcnR5Q2FsbFNlcnZpY2U7CisKKy8qKgorICogSW50ZXJmYWNlIHByb3ZpZGVkIGJ5IGEgc2VydmljZSB0byBzdGFydCBvdXRnb2luZyBjYWxscyBhbmQgYXR0YWNoIHRvIGluY29taW5nIGNhbGxzLgorICovCitwdWJsaWMgY2xhc3MgVGhpcmRQYXJ0eUNhbGxTZXJ2aWNlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX09VVEdPSU5HX0NBTExfSU5JVElBVEUgPSAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfSU5DT01JTkdfQ0FMTF9BVFRBQ0ggPSAyOworCisgICAgLyoqCisgICAgICogQ2FsbCB0byBzdGFydCBhIG5ldyBvdXRnb2luZyBjYWxsLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG91dGdvaW5nQ2FsbEluaXRpYXRlKFRoaXJkUGFydHlDYWxsTGlzdGVuZXIgbGlzdGVuZXIsIFN0cmluZyBudW1iZXIpIHsKKyAgICAgICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBlbXB0eQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGwgdG8gYXR0YWNoIHRvIGFuIGluY29taW5nIGNhbGwuCisgICAgICovCisgICAgcHVibGljIHZvaWQgaW5jb21pbmdDYWxsQXR0YWNoKFRoaXJkUGFydHlDYWxsTGlzdGVuZXIgbGlzdGVuZXIsIFN0cmluZyBjYWxsSWQpIHsKKyAgICAgICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBlbXB0eQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gSUJpbmRlciBpbnN0YW5jZSB0aGF0IGNhbiByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2aWNlJ3Mgb25CaW5kIGZ1bmN0aW9uLgorICAgICAqLworICAgIHB1YmxpYyBJQmluZGVyIGdldEJpbmRlcigpIHsKKyAgICAgICAgcmV0dXJuIG1DYWxsYmFjazsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIElUaGlyZFBhcnR5Q2FsbFNlcnZpY2UuU3R1YiBtQ2FsbGJhY2sgPSBuZXcgSVRoaXJkUGFydHlDYWxsU2VydmljZS5TdHViKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb3V0Z29pbmdDYWxsSW5pdGlhdGUoSVRoaXJkUGFydHlDYWxsTGlzdGVuZXIgbGlzdGVuZXIsIFN0cmluZyBudW1iZXIpIHsKKyAgICAgICAgICAgIFJsb2cudygiVGhpcmRQYXJ0eVBob25lIiwgIlRoaXJkUGFydHlDYWxsU2VydmljZS5JVGhpcmRQYXJ0eUNhbGxTZXJ2aWNlLm91dCIpOworICAgICAgICAgICAgTWVzc2FnZS5vYnRhaW4obUhhbmRsZXIsIE1TR19PVVRHT0lOR19DQUxMX0lOSVRJQVRFLAorICAgICAgICAgICAgICAgICAgICBQYWlyLmNyZWF0ZShsaXN0ZW5lciwgbnVtYmVyKSkuc2VuZFRvVGFyZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgaW5jb21pbmdDYWxsQXR0YWNoKElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyIGxpc3RlbmVyLCBTdHJpbmcgY2FsbElkKSB7CisgICAgICAgICAgICBSbG9nLncoIlRoaXJkUGFydHlQaG9uZSIsICJUaGlyZFBhcnR5Q2FsbFNlcnZpY2UuSVRoaXJkUGFydHlDYWxsU2VydmljZS5pbiIpOworICAgICAgICAgICAgTWVzc2FnZS5vYnRhaW4obUhhbmRsZXIsIE1TR19JTkNPTUlOR19DQUxMX0FUVEFDSCwKKyAgICAgICAgICAgICAgICAgICAgUGFpci5jcmVhdGUobGlzdGVuZXIsIGNhbGxJZCkpLnNlbmRUb1RhcmdldCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHByaXZhdGUgZmluYWwgSGFuZGxlciBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgICAgICBSbG9nLncoIlRoaXJkUGFydHlQaG9uZSIsICJUaGlyZFBhcnR5Q2FsbFNlcnZpY2UuaGFuZGxlTWVzc2FnZTogIiArIG1zZy53aGF0KTsKKyAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19PVVRHT0lOR19DQUxMX0lOSVRJQVRFOiB7CisgICAgICAgICAgICAgICAgICAgIFJsb2cudygiVGhpcmRQYXJ0eVBob25lIiwgIlRoaXJkUGFydHlDYWxsU2VydmljZS5oYW5kbGVNZXNzYWdlIG91dCIpOworICAgICAgICAgICAgICAgICAgICBQYWlyPElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyLCBTdHJpbmc+IHBhaXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQYWlyPElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyLCBTdHJpbmc+KSBtc2cub2JqOworICAgICAgICAgICAgICAgICAgICBUaGlyZFBhcnR5Q2FsbExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRoaXJkUGFydHlDYWxsTGlzdGVuZXIocGFpci5maXJzdCk7CisgICAgICAgICAgICAgICAgICAgIG91dGdvaW5nQ2FsbEluaXRpYXRlKGxpc3RlbmVyLCBwYWlyLnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIE1TR19JTkNPTUlOR19DQUxMX0FUVEFDSDogeworICAgICAgICAgICAgICAgICAgICBSbG9nLncoIlRoaXJkUGFydHlQaG9uZSIsICJUaGlyZFBhcnR5Q2FsbFNlcnZpY2UuaGFuZGxlTWVzc2FnZSBpbiIpOworICAgICAgICAgICAgICAgICAgICBQYWlyPElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyLCBTdHJpbmc+IHBhaXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQYWlyPElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyLCBTdHJpbmc+KSBtc2cub2JqOworICAgICAgICAgICAgICAgICAgICBUaGlyZFBhcnR5Q2FsbExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRoaXJkUGFydHlDYWxsTGlzdGVuZXIocGFpci5maXJzdCk7CisgICAgICAgICAgICAgICAgICAgIGluY29taW5nQ2FsbEF0dGFjaChsaXN0ZW5lciwgcGFpci5zZWNvbmQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0NhbGxlckluZm9Bc3luY1F1ZXJ5LmphdmEgYi90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvQ2FsbGVySW5mb0FzeW5jUXVlcnkuamF2YQppbmRleCBjNjNiZTkxLi43NGY3M2I1IDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvQ2FsbGVySW5mb0FzeW5jUXVlcnkuamF2YQorKysgYi90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvQ2FsbGVySW5mb0FzeW5jUXVlcnkuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1Qcm9wZXJ0aWVzOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuQ29udGFjdHNDb250cmFjdC5Db21tb25EYXRhS2luZHMuU2lwQWRkcmVzczsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkNvbnRhY3RzQ29udHJhY3QuRGF0YTsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkNvbnRhY3RzQ29udHJhY3QuUGhvbmVMb29rdXA7CmRpZmYgLS1naXQgYS90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVRoaXJkUGFydHlDYWxsTGlzdGVuZXIuYWlkbCBiL3RlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JVGhpcmRQYXJ0eUNhbGxMaXN0ZW5lci5haWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZjJkODEKLS0tIC9kZXYvbnVsbAorKysgYi90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVRoaXJkUGFydHlDYWxsTGlzdGVuZXIuYWlkbApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnk7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuSVRoaXJkUGFydHlDYWxsUHJvdmlkZXI7CisKKy8qKgorICogSW50ZXJmYWNlIHByb3ZpZGVkIHRvIFRoaXJkUGFydHlDYWxsU2VydmljZS4gVGhlIHNlcnZpY2UgY2FuIHVzZSB0aGlzIHRvIG5vdGlmeSB0aGUgbGlzdGVuZXIgb2YKKyAqIGNoYW5nZXMgdG8gdGhlIGNhbGwgc3RhdGUuCisgKi8KK29uZXdheSBpbnRlcmZhY2UgSVRoaXJkUGFydHlDYWxsTGlzdGVuZXIgeworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgc2VydmljZSB3aGVuIGEgY2FsbCBwcm92aWRlciBpcyBhdmFpbGFibGUgdG8gcGVyZm9ybSB0aGUgb3V0Z29pbmcgb3IgaW5jb21pbmcKKyAgICAgKiBjYWxsLgorICAgICAqLworICAgIHZvaWQgb25DYWxsUHJvdmlkZXJBdHRhY2hlZChJVGhpcmRQYXJ0eUNhbGxQcm92aWRlciBjYWxsUHJvdmlkZXIpOworCisgICAgLyoqCisgICAgICogTm90aWZpZXMgdGhlIGxpc3RlbmVyIHRoYXQgcmluZ2luZyBoYXMgc3RhcnRlZCBmb3IgdGhpcyBjYWxsLgorICAgICAqLworICAgIHZvaWQgb25SaW5naW5nU3RhcnRlZCgpOworCisgICAgLyoqCisgICAgICogTm90aWZpZXMgdGhlIGxpc3RlbmVyIHRoYXQgdGhlIGNhbGwgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGVzdGFibGlzaGVkLgorICAgICAqLworICAgIHZvaWQgb25DYWxsRXN0YWJsaXNoZWQoKTsKKworICAgIC8qKgorICAgICAqIE5vdGlmaWVzIHRoZSBsaXN0ZW5lciB0aGF0IHRoZSBjYWxsIGhhcyBlbmRlZC4KKyAgICAgKi8KKyAgICB2b2lkIG9uQ2FsbEVuZGVkKGludCByZWFzb24pOworfQpkaWZmIC0tZ2l0IGEvdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lUaGlyZFBhcnR5Q2FsbFByb3ZpZGVyLmFpZGwgYi90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVRoaXJkUGFydHlDYWxsUHJvdmlkZXIuYWlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWQ2N2E0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lUaGlyZFBhcnR5Q2FsbFByb3ZpZGVyLmFpZGwKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255OworCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LklUaGlyZFBhcnR5Q2FsbExpc3RlbmVyOworCisvKioKKyAqIEludGVyZmFjZSBzZW50IHRvIFRoaXJkUGFydHlDYWxsTGlzdGVuZXIub25DYWxsUHJvdmlkZXJBdHRhY2hlZC4gVGhpcyBpcyB1c2VkIHRvIGNvbnRyb2wgYW4KKyAqIG91dGdvaW5nIG9yIGluY29taW5nIGNhbGwuCisgKi8KK29uZXdheSBpbnRlcmZhY2UgSVRoaXJkUGFydHlDYWxsUHJvdmlkZXIgeworICAgIC8qKgorICAgICAqIE11dGVzIG9yIHVubXV0ZXMgdGhlIGNhbGwuCisgICAgICovCisgICAgdm9pZCBtdXRlKGJvb2xlYW4gc2hvdWxkTXV0ZSk7CisKKyAgICAvKioKKyAgICAgKiBFbmRzIHRoZSBjdXJyZW50IGNhbGwuIElmIHRoaXMgaXMgYW4gdW5hbnN3ZXJlZCBpbmNvbWluZyBjYWxsIHRoZW4gdGhlIGNhbGwgaXMgcmVqZWN0ZWQgKGZvcgorICAgICAqIGV4YW1wbGUsIGEgbm90aWZpY2F0aW9uIGlzIHNlbnQgdG8gYSBzZXJ2ZXIgdGhhdCB0aGUgdXNlciBkZWNsaW5lZCB0aGUgY2FsbCkuCisgICAgICovCisgICAgdm9pZCBoYW5ndXAoKTsKKworICAgIC8qKgorICAgICAqIEFjY2VwdHMgdGhlIGluY29taW5nIGNhbGwuCisgICAgICovCisgICAgdm9pZCBpbmNvbWluZ0NhbGxBY2NlcHQoKTsKKworICAgIC8qKgorICAgICAqIFNlbmRzIHRoZSBnaXZlbiBEVE1GIGNvZGUuIFRoZSBjb2RlIGNhbiBiZSAnMCctJzknLCAnQSctJ0QnLCAnIycsIG9yICcqJy4KKyAgICAgKi8KKyAgICB2b2lkIHNlbmREdG1mKGNoYXIgYyk7Cit9CmRpZmYgLS1naXQgYS90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVRoaXJkUGFydHlDYWxsU2VydmljZS5haWRsIGIvdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lUaGlyZFBhcnR5Q2FsbFNlcnZpY2UuYWlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWVlNGVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lUaGlyZFBhcnR5Q2FsbFNlcnZpY2UuYWlkbApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnk7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuSVRoaXJkUGFydHlDYWxsTGlzdGVuZXI7CisKKy8qKgorICogSW50ZXJmYWNlIHByb3ZpZGVkIGJ5IGEgc2VydmljZSB0byBzdGFydCBvdXRnb2luZyBjYWxscyBhbmQgYXR0YWNoIHRvIGluY29taW5nIGNhbGxzLgorICovCitvbmV3YXkgaW50ZXJmYWNlIElUaGlyZFBhcnR5Q2FsbFNlcnZpY2UgeworICAgIC8qKgorICAgICAqIENhbGwgdG8gc3RhcnQgYSBuZXcgb3V0Z29pbmcgY2FsbC4KKyAgICAgKi8KKyAgICB2b2lkIG91dGdvaW5nQ2FsbEluaXRpYXRlKElUaGlyZFBhcnR5Q2FsbExpc3RlbmVyIGxpc3RlbmVyLCBTdHJpbmcgbnVtYmVyKTsKKworICAgIC8qKgorICAgICAqIENhbGwgdG8gYXR0YWNoIHRvIGFuIGluY29taW5nIGNhbGwuCisgICAgICovCisgICAgdm9pZCBpbmNvbWluZ0NhbGxBdHRhY2goSVRoaXJkUGFydHlDYWxsTGlzdGVuZXIgbGlzdGVuZXIsIFN0cmluZyBjYWxsSWQpOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9BY3Rpdml0eUluc3RydW1lbnRhdGlvblRlc3RDYXNlLmphdmEgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0FjdGl2aXR5SW5zdHJ1bWVudGF0aW9uVGVzdENhc2UuamF2YQppbmRleCBkMTJmZjZmLi5hNTllZTM1IDEwMDY0NAotLS0gYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0FjdGl2aXR5SW5zdHJ1bWVudGF0aW9uVGVzdENhc2UuamF2YQorKysgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0FjdGl2aXR5SW5zdHJ1bWVudGF0aW9uVGVzdENhc2UuamF2YQpAQCAtMTgsOCArMTgsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiAKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKLQogLyoqCiAgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9uYWwgdGVzdGluZyBvZiBhIHNpbmdsZSBhY3Rpdml0eS4gIFRoZSBhY3Rpdml0eSB1bmRlciB0ZXN0IHdpbGwKICAqIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIHN5c3RlbSBpbmZyYXN0cnVjdHVyZSAoYnkgY2FsbGluZyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZS5sYXVuY2hBY3Rpdml0eSgpKQpkaWZmIC0tZ2l0IGEvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9BcHBsaWNhdGlvblRlc3RDYXNlLmphdmEgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0FwcGxpY2F0aW9uVGVzdENhc2UuamF2YQppbmRleCBhZTVmYTRkLi5mMDkzMTgxIDEwMDY0NAotLS0gYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0FwcGxpY2F0aW9uVGVzdENhc2UuamF2YQorKysgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0FwcGxpY2F0aW9uVGVzdENhc2UuamF2YQpAQCAtMTYsOCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQudGVzdDsKIAotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotCiBpbXBvcnQgYW5kcm9pZC5hcHAuQXBwbGljYXRpb247CiBpbXBvcnQgYW5kcm9pZC5hcHAuSW5zdHJ1bWVudGF0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwpkaWZmIC0tZ2l0IGEvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9JbnN0cnVtZW50YXRpb25VdGlscy5qYXZhIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9JbnN0cnVtZW50YXRpb25VdGlscy5qYXZhCmluZGV4IDRjNTkwOTcuLjFhNzAwMmEgMTAwNjQ0Ci0tLSBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvSW5zdHJ1bWVudGF0aW9uVXRpbHMuamF2YQorKysgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0luc3RydW1lbnRhdGlvblV0aWxzLmphdmEKQEAgLTE2LDggKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnRlc3Q7CiAKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKLQogLyoqCiAgKiAKICAqIFRoZSBJbnN0cnVtZW50YXRpb25VdGlscyBjbGFzcyBoYXMgYWxsIHRoZSB1dGlsaXR5IGZ1bmN0aW9ucyBuZWVkZWQgZm9yCmRpZmYgLS1naXQgYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0lzb2xhdGVkQ29udGV4dC5qYXZhIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9Jc29sYXRlZENvbnRleHQuamF2YQppbmRleCBiYzAwZjY4Li5mOTcxYjVkIDEwMDY0NAotLS0gYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0lzb2xhdGVkQ29udGV4dC5qYXZhCisrKyBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvSXNvbGF0ZWRDb250ZXh0LmphdmEKQEAgLTM5LDggKzM5LDYgQEAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogCmRpZmYgLS1naXQgYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0xhdW5jaFBlcmZvcm1hbmNlQmFzZS5qYXZhIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9MYXVuY2hQZXJmb3JtYW5jZUJhc2UuamF2YQppbmRleCBjMzI0NDQ2Li5kNDIzZTYyIDEwMDY0NAotLS0gYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L0xhdW5jaFBlcmZvcm1hbmNlQmFzZS5qYXZhCisrKyBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvTGF1bmNoUGVyZm9ybWFuY2VCYXNlLmphdmEKQEAgLTE5LDEzICsxOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuSW5zdHJ1bWVudGF0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5EZWJ1ZzsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIAogCiAvKioKZGlmZiAtLWdpdCBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvTW9yZUFzc2VydHMuamF2YSBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvTW9yZUFzc2VydHMuamF2YQppbmRleCA4M2NjNDIwLi5mYjBmYWJhIDEwMDY0NAotLS0gYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L01vcmVBc3NlcnRzLmphdmEKKysrIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9Nb3JlQXNzZXJ0cy5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2UgYW5kcm9pZC50ZXN0OwogCi1pbXBvcnQgY29tLmdvb2dsZS5hbmRyb2lkLmNvbGxlY3QuTGlzdHM7CiBpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmRpZmYgLS1naXQgYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L1NlcnZpY2VUZXN0Q2FzZS5qYXZhIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9TZXJ2aWNlVGVzdENhc2UuamF2YQppbmRleCBkOGNlZDM4Li5iYTIwYzA5IDEwMDY0NAotLS0gYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L1NlcnZpY2VUZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvU2VydmljZVRlc3RDYXNlLmphdmEKQEAgLTE4LDE0ICsxOCwxMSBAQAogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQXBwbGljYXRpb247CiBpbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLnRlc3QubW9jay5Nb2NrQXBwbGljYXRpb247CiAKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKIGltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwogCiAvKioKQEAgLTI2Myw2ICsyNjAsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChtU2VydmljZUNyZWF0ZWQpIHsKICAgICAgICAgICAgIG1TZXJ2aWNlLm9uRGVzdHJveSgpOworICAgICAgICAgICAgbVNlcnZpY2VDcmVhdGVkID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvU2luZ2xlTGF1bmNoQWN0aXZpdHlUZXN0Q2FzZS5qYXZhIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9TaW5nbGVMYXVuY2hBY3Rpdml0eVRlc3RDYXNlLmphdmEKaW5kZXggNzljNTU0YS4uNzJjOTNjZSAxMDA2NDQKLS0tIGEvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9TaW5nbGVMYXVuY2hBY3Rpdml0eVRlc3RDYXNlLmphdmEKKysrIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9TaW5nbGVMYXVuY2hBY3Rpdml0eVRlc3RDYXNlLmphdmEKQEAgLTE3LDggKzE3LDYgQEAKIHBhY2thZ2UgYW5kcm9pZC50ZXN0OwogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiAKIC8qKgogICogSWYgeW91IHdvdWxkIGxpa2UgdG8gdGVzdCBhIHNpbmdsZSBhY3Rpdml0eSB3aXRoIGFuCmRpZmYgLS1naXQgYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L21vY2svTW9ja0N1cnNvci5qYXZhIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9tb2NrL01vY2tDdXJzb3IuamF2YQppbmRleCA1YjhhNGY0Li5hMzdjNmViIDEwMDY0NAotLS0gYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L21vY2svTW9ja0N1cnNvci5qYXZhCisrKyBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvbW9jay9Nb2NrQ3Vyc29yLmphdmEKQEAgLTI0LDggKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiAKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCiAvKioKICAqIDxQPgogICogQSBtb2NrIHtAbGluayBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcn0gY2xhc3MgdGhhdCBpc29sYXRlcyB0aGUgdGVzdCBjb2RlIGZyb20gcmVhbApkaWZmIC0tZ2l0IGEvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9tb2NrL01vY2tQYWNrYWdlTWFuYWdlci5qYXZhIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9tb2NrL01vY2tQYWNrYWdlTWFuYWdlci5qYXZhCmluZGV4IDY2MWJkNDEuLmZmNWM5MzUgMTAwNjQ0Ci0tLSBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvbW9jay9Nb2NrUGFja2FnZU1hbmFnZXIuamF2YQorKysgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L21vY2svTW9ja1BhY2thZ2VNYW5hZ2VyLmphdmEKQEAgLTQwLDEzICs0MCwxMCBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5TZXJ2aWNlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uVmVyaWZpY2F0aW9uUGFyYW1zOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5WZXJpZmllckRldmljZUlkZW50aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5YbWxSZXNvdXJjZVBhcnNlcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLWltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKZGlmZiAtLWdpdCBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3Qvc3VpdGVidWlsZGVyL1Rlc3RTdWl0ZUJ1aWxkZXIuamF2YSBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3Qvc3VpdGVidWlsZGVyL1Rlc3RTdWl0ZUJ1aWxkZXIuamF2YQppbmRleCAyOGY3MjE2Li44Yzg5NDg5IDEwMDY0NAotLS0gYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L3N1aXRlYnVpbGRlci9UZXN0U3VpdGVCdWlsZGVyLmphdmEKKysrIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9zdWl0ZWJ1aWxkZXIvVGVzdFN1aXRlQnVpbGRlci5qYXZhCkBAIC0yOSw4ICsyOSw2IEBACiBpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwogaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CiAKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwpkaWZmIC0tZ2l0IGEvdGVzdC1ydW5uZXIvc3JjL2p1bml0L3J1bm5lci9Mb2FkaW5nVGVzdENvbGxlY3Rvci5qYXZhIGIvdGVzdC1ydW5uZXIvc3JjL2p1bml0L3J1bm5lci9Mb2FkaW5nVGVzdENvbGxlY3Rvci5qYXZhCmluZGV4IDQ4OWQ5ZDYuLjkxMDE5MDAgMTAwNjQ0Ci0tLSBhL3Rlc3QtcnVubmVyL3NyYy9qdW5pdC9ydW5uZXIvTG9hZGluZ1Rlc3RDb2xsZWN0b3IuamF2YQorKysgYi90ZXN0LXJ1bm5lci9zcmMvanVuaXQvcnVubmVyL0xvYWRpbmdUZXN0Q29sbGVjdG9yLmphdmEKQEAgLTEsNyArMSw2IEBACiBwYWNrYWdlIGp1bml0LnJ1bm5lcjsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lio7Ci1pbXBvcnQganVuaXQucnVubmVyLio7CiBpbXBvcnQganVuaXQuZnJhbWV3b3JrLio7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvdGVzdC1ydW5uZXIvc3JjL2p1bml0L3J1bm5lci9Tb3J0ZXIuamF2YSBiL3Rlc3QtcnVubmVyL3NyYy9qdW5pdC9ydW5uZXIvU29ydGVyLmphdmEKaW5kZXggNzczMWY2Ni4uOGQ5MzQxZCAxMDA2NDQKLS0tIGEvdGVzdC1ydW5uZXIvc3JjL2p1bml0L3J1bm5lci9Tb3J0ZXIuamF2YQorKysgYi90ZXN0LXJ1bm5lci9zcmMvanVuaXQvcnVubmVyL1NvcnRlci5qYXZhCkBAIC0yLDggKzIsNiBAQAogCiBpbXBvcnQgamF2YS51dGlsLio7CiAKLWltcG9ydCBqdW5pdC5ydW5uZXIuKjsKLQogLyoqCiAgKiBBIGN1c3RvbSBxdWljayBzb3J0IHdpdGggc3VwcG9ydCB0byBjdXN0b21pemUgdGhlIHN3YXAgYmVoYXZpb3VyLgogICogTk9USUNFOiBXZSBjYW4ndCB1c2UgdGhlIHRoZSBzb3J0aW5nIHN1cHBvcnQgZnJvbSB0aGUgSkRLIDEuMiBjb2xsZWN0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy9CaURpVGVzdHMvc3JjL2NvbS9hbmRyb2lkL2JpZGkvQmlEaVRlc3RHcmlkTGF5b3V0Q29kZUx0ci5qYXZhIGIvdGVzdHMvQmlEaVRlc3RzL3NyYy9jb20vYW5kcm9pZC9iaWRpL0JpRGlUZXN0R3JpZExheW91dENvZGVMdHIuamF2YQppbmRleCAyYjVlNjc0Li5lYTA4YTZhIDEwMDY0NAotLS0gYS90ZXN0cy9CaURpVGVzdHMvc3JjL2NvbS9hbmRyb2lkL2JpZGkvQmlEaVRlc3RHcmlkTGF5b3V0Q29kZUx0ci5qYXZhCisrKyBiL3Rlc3RzL0JpRGlUZXN0cy9zcmMvY29tL2FuZHJvaWQvYmlkaS9CaURpVGVzdEdyaWRMYXlvdXRDb2RlTHRyLmphdmEKQEAgLTIyLDExICsyMiwyNSBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5FZGl0VGV4dDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lio7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuU3BhY2U7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CiAKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC50ZXh0LklucHV0VHlwZS4qOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0Lio7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudGV4dC5JbnB1dFR5cGUuVFlQRV9DTEFTU19URVhUOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnRleHQuSW5wdXRUeXBlLlRZUEVfVEVYVF9WQVJJQVRJT05fRU1BSUxfQUREUkVTUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC50ZXh0LklucHV0VHlwZS5UWVBFX1RFWFRfVkFSSUFUSU9OX1BBU1NXT1JEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkFMSUdOX0JPVU5EUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5CQVNFTElORTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5DRU5URVI7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuRklMTDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5MRUZUOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LlJJR0hUOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LlNUQVJUOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LlNwZWM7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuc3BlYzsKIAogcHVibGljIGNsYXNzIEJpRGlUZXN0R3JpZExheW91dENvZGVMdHIgZXh0ZW5kcyBGcmFnbWVudCB7CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL0JpRGlUZXN0cy9zcmMvY29tL2FuZHJvaWQvYmlkaS9CaURpVGVzdEdyaWRMYXlvdXRDb2RlUnRsLmphdmEgYi90ZXN0cy9CaURpVGVzdHMvc3JjL2NvbS9hbmRyb2lkL2JpZGkvQmlEaVRlc3RHcmlkTGF5b3V0Q29kZVJ0bC5qYXZhCmluZGV4IDNhMDNjNmMuLmZjM2E5MmMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL0JpRGlUZXN0cy9zcmMvY29tL2FuZHJvaWQvYmlkaS9CaURpVGVzdEdyaWRMYXlvdXRDb2RlUnRsLmphdmEKKysrIGIvdGVzdHMvQmlEaVRlc3RzL3NyYy9jb20vYW5kcm9pZC9iaWRpL0JpRGlUZXN0R3JpZExheW91dENvZGVSdGwuamF2YQpAQCAtMjIsMTEgKzIyLDI1IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuKjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5TcGFjZTsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKIAotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnRleHQuSW5wdXRUeXBlLio7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuKjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC50ZXh0LklucHV0VHlwZS5UWVBFX0NMQVNTX1RFWFQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudGV4dC5JbnB1dFR5cGUuVFlQRV9URVhUX1ZBUklBVElPTl9FTUFJTF9BRERSRVNTOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnRleHQuSW5wdXRUeXBlLlRZUEVfVEVYVF9WQVJJQVRJT05fUEFTU1dPUkQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuQUxJR05fQk9VTkRTOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkJBU0VMSU5FOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkNFTlRFUjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5GSUxMOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkxFRlQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuUklHSFQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuU1RBUlQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuU3BlYzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5zcGVjOwogCiBwdWJsaWMgY2xhc3MgQmlEaVRlc3RHcmlkTGF5b3V0Q29kZVJ0bCBleHRlbmRzIEZyYWdtZW50IHsKIApkaWZmIC0tZ2l0IGEvdGVzdHMvR3JpZExheW91dFRlc3Qvc3JjL2NvbS9hbmRyb2lkL3Rlc3QvbGF5b3V0L0Fic3RyYWN0TGF5b3V0VGVzdC5qYXZhIGIvdGVzdHMvR3JpZExheW91dFRlc3Qvc3JjL2NvbS9hbmRyb2lkL3Rlc3QvbGF5b3V0L0Fic3RyYWN0TGF5b3V0VGVzdC5qYXZhCmluZGV4IDRkM2E4NDMuLjE5NmE1YzEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL0dyaWRMYXlvdXRUZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2xheW91dC9BYnN0cmFjdExheW91dFRlc3QuamF2YQorKysgYi90ZXN0cy9HcmlkTGF5b3V0VGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9sYXlvdXQvQWJzdHJhY3RMYXlvdXRUZXN0LmphdmEKQEAgLTI0LDcgKzI0LDEzIEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CiAKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LkdyYXZpdHkuKjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LkdyYXZpdHkuQk9UVE9NOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuR3Jhdml0eS5DRU5URVI7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5HcmF2aXR5LkZJTEw7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5HcmF2aXR5LkxFRlQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5HcmF2aXR5Lk5PX0dSQVZJVFk7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5HcmF2aXR5LlJJR0hUOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuR3Jhdml0eS5UT1A7CiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdExheW91dFRlc3QgZXh0ZW5kcyBBY3Rpdml0eSB7CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL0dyaWRMYXlvdXRUZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2xheW91dC9BbGlnbm1lbnRUZXN0LmphdmEgYi90ZXN0cy9HcmlkTGF5b3V0VGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9sYXlvdXQvQWxpZ25tZW50VGVzdC5qYXZhCmluZGV4IGIxYzQ0ODYuLjU1NTk3MDcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL0dyaWRMYXlvdXRUZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2xheW91dC9BbGlnbm1lbnRUZXN0LmphdmEKKysrIGIvdGVzdHMvR3JpZExheW91dFRlc3Qvc3JjL2NvbS9hbmRyb2lkL3Rlc3QvbGF5b3V0L0FsaWdubWVudFRlc3QuamF2YQpAQCAtMjAsMTUgKzIwLDI1IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25DbGlja0xpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5BbGlnbm1lbnQ7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5MYXlvdXRQYXJhbXM7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CiAKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC4qOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkJBU0VMSU5FOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LkJPVFRPTTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5DRU5URVI7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuRklMTDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5MRUZUOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LlJJR0hUOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LlRPUDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC5zcGVjOwogCi1wdWJsaWMgY2xhc3MgQWxpZ25tZW50VGVzdCAgZXh0ZW5kcyBBY3Rpdml0eSB7CitwdWJsaWMgY2xhc3MgQWxpZ25tZW50VGVzdCBleHRlbmRzIEFjdGl2aXR5IHsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gSE9SSVpPTlRBTF9OQU1FUyA9IHsiTEVGVCIsICJjZW50ZXIiLCAiZWFzdCIsICJmaWxsIn07CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBBbGlnbm1lbnRbXSBIT1JJWk9OVEFMX0FMSUdOTUVOVFMgPSB7TEVGVCwgQ0VOVEVSLCBSSUdIVCwgRklMTH07CmRpZmYgLS1naXQgYS90ZXN0cy9HcmlkTGF5b3V0VGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9sYXlvdXQvR3JpZExheW91dFRlc3QuamF2YSBiL3Rlc3RzL0dyaWRMYXlvdXRUZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2xheW91dC9HcmlkTGF5b3V0VGVzdC5qYXZhCmluZGV4IDRjZTQ0OWEuLjgwNDdjNWYxIDEwMDY0NAotLS0gYS90ZXN0cy9HcmlkTGF5b3V0VGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9sYXlvdXQvR3JpZExheW91dFRlc3QuamF2YQorKysgYi90ZXN0cy9HcmlkTGF5b3V0VGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9sYXlvdXQvR3JpZExheW91dFRlc3QuamF2YQpAQCAtMjEsNyArMjEsMTAgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQ7CiAKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuR3JpZExheW91dC4qOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LlNwZWM7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkdyaWRMYXlvdXQuVU5ERUZJTkVEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LlZFUlRJQ0FMOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5HcmlkTGF5b3V0LnNwZWM7CiAKIHB1YmxpYyBjbGFzcyBHcmlkTGF5b3V0VGVzdCBleHRlbmRzIEFic3RyYWN0TGF5b3V0VGVzdCB7CiAgICAgcHVibGljIFZpZXdHcm91cCBjcmVhdGUoQ29udGV4dCBjb250ZXh0KSB7CmRpZmYgLS1naXQgYS90ZXN0cy9HcmlkTGF5b3V0VGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9sYXlvdXQvTGluZWFyTGF5b3V0VGVzdC5qYXZhIGIvdGVzdHMvR3JpZExheW91dFRlc3Qvc3JjL2NvbS9hbmRyb2lkL3Rlc3QvbGF5b3V0L0xpbmVhckxheW91dFRlc3QuamF2YQppbmRleCBjN2Y0NjY1Li5kYzViMTJjIDEwMDY0NAotLS0gYS90ZXN0cy9HcmlkTGF5b3V0VGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9sYXlvdXQvTGluZWFyTGF5b3V0VGVzdC5qYXZhCisrKyBiL3Rlc3RzL0dyaWRMYXlvdXRUZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2xheW91dC9MaW5lYXJMYXlvdXRUZXN0LmphdmEKQEAgLTIwLDkgKzIwLDkgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zOwogCi1pbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dC4qOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zLio7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UOwogCiBwdWJsaWMgY2xhc3MgTGluZWFyTGF5b3V0VGVzdCBleHRlbmRzIEFic3RyYWN0TGF5b3V0VGVzdCB7CiAgICAgcHVibGljIFZpZXdHcm91cCBjcmVhdGUoQ29udGV4dCBjb250ZXh0KSB7CmRpZmYgLS1naXQgYS90ZXN0cy9Id0FjY2VsZXJhdGlvblRlc3QvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3Rlc3RzL0h3QWNjZWxlcmF0aW9uVGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sCmluZGV4IDFiYjBkYjAuLjZmNzc0ZjggMTAwNjQ0Ci0tLSBhL3Rlc3RzL0h3QWNjZWxlcmF0aW9uVGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyBiL3Rlc3RzL0h3QWNjZWxlcmF0aW9uVGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC03MDYsNiArNzA2LDE1IEBACiAgICAgICAgIDwvYWN0aXZpdHk+CiAKICAgICAgICAgPGFjdGl2aXR5CisgICAgICAgICAgICAgICAgYW5kcm9pZDpuYW1lPSJDb2xvckZpbHRlcnNNdXRhdGVBY3Rpdml0eSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJDb2xvckZpbHRlcnMvTXV0YXRlIEZpbHRlcnMiPgorICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CisgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgorICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImNvbS5hbmRyb2lkLnRlc3QuaHd1aS5URVNUIiAvPgorICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorICAgICAgICA8L2FjdGl2aXR5PgorCisgICAgICAgIDxhY3Rpdml0eQogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bmFtZT0iTGluZXNBY3Rpdml0eSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJEcmF3L0xpbmVzIj4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgpkaWZmIC0tZ2l0IGEvdGVzdHMvSHdBY2NlbGVyYXRpb25UZXN0L3NyYy9jb20vYW5kcm9pZC90ZXN0L2h3dWkvQ29sb3JGaWx0ZXJzTXV0YXRlQWN0aXZpdHkuamF2YSBiL3Rlc3RzL0h3QWNjZWxlcmF0aW9uVGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9od3VpL0NvbG9yRmlsdGVyc011dGF0ZUFjdGl2aXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4YjVkMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL0h3QWNjZWxlcmF0aW9uVGVzdC9zcmMvY29tL2FuZHJvaWQvdGVzdC9od3VpL0NvbG9yRmlsdGVyc011dGF0ZUFjdGl2aXR5LmphdmEKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnRlc3QuaHd1aTsKKworaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFyZ2JFdmFsdWF0b3I7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3I7CitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JNYXRyaXg7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvck1hdHJpeENvbG9yRmlsdGVyOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuTGlnaHRpbmdDb2xvckZpbHRlcjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmZDb2xvckZpbHRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKKworQFN1cHByZXNzV2FybmluZ3MoeyJVbnVzZWREZWNsYXJhdGlvbiJ9KQorcHVibGljIGNsYXNzIENvbG9yRmlsdGVyc011dGF0ZUFjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgeworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICAgICAgZmluYWwgQml0bWFwc1ZpZXcgdmlldyA9IG5ldyBCaXRtYXBzVmlldyh0aGlzKTsKKyAgICAgICAgc2V0Q29udGVudFZpZXcodmlldyk7CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEJpdG1hcHNWaWV3IGV4dGVuZHMgVmlldyB7CisgICAgICAgIHByaXZhdGUgZmluYWwgQml0bWFwIG1CaXRtYXAxOworICAgICAgICBwcml2YXRlIGZpbmFsIEJpdG1hcCBtQml0bWFwMjsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtQ29sb3JNYXRyaXhQYWludDsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtTGlnaHRpbmdQYWludDsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtQmxlbmRQYWludDsKKworICAgICAgICBwcml2YXRlIGZsb2F0IG1TYXR1cmF0aW9uID0gMC4wZjsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUxpZ2h0QWRkID0gMDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUxpZ2h0TXVsID0gMDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVBvcnRlckR1ZmZDb2xvciA9IDA7CisKKyAgICAgICAgQml0bWFwc1ZpZXcoQ29udGV4dCBjKSB7CisgICAgICAgICAgICBzdXBlcihjKTsKKworICAgICAgICAgICAgbUJpdG1hcDEgPSBCaXRtYXBGYWN0b3J5LmRlY29kZVJlc291cmNlKGMuZ2V0UmVzb3VyY2VzKCksIFIuZHJhd2FibGUuc3Vuc2V0MSk7CisgICAgICAgICAgICBtQml0bWFwMiA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlUmVzb3VyY2UoYy5nZXRSZXNvdXJjZXMoKSwgUi5kcmF3YWJsZS5zdW5zZXQyKTsKKworICAgICAgICAgICAgbUNvbG9yTWF0cml4UGFpbnQgPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgICAgIGZpbmFsIENvbG9yTWF0cml4IGNvbG9yTWF0cml4ID0gbmV3IENvbG9yTWF0cml4KCk7CisgICAgICAgICAgICBjb2xvck1hdHJpeC5zZXRTYXR1cmF0aW9uKDApOworICAgICAgICAgICAgbUNvbG9yTWF0cml4UGFpbnQuc2V0Q29sb3JGaWx0ZXIobmV3IENvbG9yTWF0cml4Q29sb3JGaWx0ZXIoY29sb3JNYXRyaXgpKTsKKworICAgICAgICAgICAgbUxpZ2h0aW5nUGFpbnQgPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgICAgIG1MaWdodGluZ1BhaW50LnNldENvbG9yRmlsdGVyKG5ldyBMaWdodGluZ0NvbG9yRmlsdGVyKDAsIDApKTsKKworICAgICAgICAgICAgbUJsZW5kUGFpbnQgPSBuZXcgUGFpbnQoKTsKKyAgICAgICAgICAgIG1CbGVuZFBhaW50LnNldENvbG9yRmlsdGVyKG5ldyBQb3J0ZXJEdWZmQ29sb3JGaWx0ZXIoMCwgUG9ydGVyRHVmZi5Nb2RlLlNSQ19PVkVSKSk7CisKKyAgICAgICAgICAgIE9iamVjdEFuaW1hdG9yIHNhdCA9IE9iamVjdEFuaW1hdG9yLm9mRmxvYXQodGhpcywgInNhdHVyYXRpb24iLCAxLjBmKTsKKyAgICAgICAgICAgIHNhdC5zZXREdXJhdGlvbigxMDAwKTsKKyAgICAgICAgICAgIHNhdC5zZXRSZXBlYXRDb3VudChPYmplY3RBbmltYXRvci5JTkZJTklURSk7CisgICAgICAgICAgICBzYXQuc2V0UmVwZWF0TW9kZShPYmplY3RBbmltYXRvci5SRVZFUlNFKTsKKyAgICAgICAgICAgIHNhdC5zdGFydCgpOworCisgICAgICAgICAgICBPYmplY3RBbmltYXRvciBsaWdodCA9IE9iamVjdEFuaW1hdG9yLm9mSW50KHRoaXMsICJsaWdodEFkZCIsIDB4MDAxMDEwMzApOworICAgICAgICAgICAgbGlnaHQuc2V0RXZhbHVhdG9yKG5ldyBBcmdiRXZhbHVhdG9yKCkpOworICAgICAgICAgICAgbGlnaHQuc2V0RHVyYXRpb24oMTAwMCk7CisgICAgICAgICAgICBsaWdodC5zZXRSZXBlYXRDb3VudChPYmplY3RBbmltYXRvci5JTkZJTklURSk7CisgICAgICAgICAgICBsaWdodC5zZXRSZXBlYXRNb2RlKE9iamVjdEFuaW1hdG9yLlJFVkVSU0UpOworICAgICAgICAgICAgbGlnaHQuc3RhcnQoKTsKKworICAgICAgICAgICAgT2JqZWN0QW5pbWF0b3IgbXVsdCA9IE9iamVjdEFuaW1hdG9yLm9mSW50KHRoaXMsICJsaWdodE11bCIsIDB4MDA2MGZmZmYpOworICAgICAgICAgICAgbXVsdC5zZXRFdmFsdWF0b3IobmV3IEFyZ2JFdmFsdWF0b3IoKSk7CisgICAgICAgICAgICBtdWx0LnNldER1cmF0aW9uKDEwMDApOworICAgICAgICAgICAgbXVsdC5zZXRSZXBlYXRDb3VudChPYmplY3RBbmltYXRvci5JTkZJTklURSk7CisgICAgICAgICAgICBtdWx0LnNldFJlcGVhdE1vZGUoT2JqZWN0QW5pbWF0b3IuUkVWRVJTRSk7CisgICAgICAgICAgICBtdWx0LnN0YXJ0KCk7CisKKyAgICAgICAgICAgIE9iamVjdEFuaW1hdG9yIGNvbG9yID0gT2JqZWN0QW5pbWF0b3Iub2ZJbnQodGhpcywgInBvcnRlckR1ZmZDb2xvciIsIDB4N2Y5OTAwNDApOworICAgICAgICAgICAgY29sb3Iuc2V0RXZhbHVhdG9yKG5ldyBBcmdiRXZhbHVhdG9yKCkpOworICAgICAgICAgICAgY29sb3Iuc2V0RHVyYXRpb24oMTAwMCk7CisgICAgICAgICAgICBjb2xvci5zZXRSZXBlYXRDb3VudChPYmplY3RBbmltYXRvci5JTkZJTklURSk7CisgICAgICAgICAgICBjb2xvci5zZXRSZXBlYXRNb2RlKE9iamVjdEFuaW1hdG9yLlJFVkVSU0UpOworICAgICAgICAgICAgY29sb3Iuc3RhcnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0UG9ydGVyRHVmZkNvbG9yKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Qb3J0ZXJEdWZmQ29sb3I7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRQb3J0ZXJEdWZmQ29sb3IoaW50IHBvcnRlckR1ZmZDb2xvcikgeworICAgICAgICAgICAgbVBvcnRlckR1ZmZDb2xvciA9IHBvcnRlckR1ZmZDb2xvcjsKKyAgICAgICAgICAgIGZpbmFsIFBvcnRlckR1ZmZDb2xvckZpbHRlciBmaWx0ZXIgPQorICAgICAgICAgICAgICAgICAgICAoUG9ydGVyRHVmZkNvbG9yRmlsdGVyKSBtQmxlbmRQYWludC5nZXRDb2xvckZpbHRlcigpOworICAgICAgICAgICAgZmlsdGVyLnNldENvbG9yKG1Qb3J0ZXJEdWZmQ29sb3IpOworICAgICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRMaWdodEFkZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtTGlnaHRBZGQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRMaWdodEFkZChpbnQgbGlnaHRBZGQpIHsKKyAgICAgICAgICAgIG1MaWdodEFkZCA9IGxpZ2h0QWRkOworICAgICAgICAgICAgZmluYWwgTGlnaHRpbmdDb2xvckZpbHRlciBmaWx0ZXIgPQorICAgICAgICAgICAgICAgICAgICAoTGlnaHRpbmdDb2xvckZpbHRlcikgbUxpZ2h0aW5nUGFpbnQuZ2V0Q29sb3JGaWx0ZXIoKTsKKyAgICAgICAgICAgIGZpbHRlci5zZXRDb2xvckFkZChsaWdodEFkZCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgaW50IGdldExpZ2h0TXVsKCkgeworICAgICAgICAgICAgcmV0dXJuIG1MaWdodEFkZDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldExpZ2h0TXVsKGludCBsaWdodE11bCkgeworICAgICAgICAgICAgbUxpZ2h0TXVsID0gbGlnaHRNdWw7CisgICAgICAgICAgICBmaW5hbCBMaWdodGluZ0NvbG9yRmlsdGVyIGZpbHRlciA9CisgICAgICAgICAgICAgICAgICAgIChMaWdodGluZ0NvbG9yRmlsdGVyKSBtTGlnaHRpbmdQYWludC5nZXRDb2xvckZpbHRlcigpOworICAgICAgICAgICAgZmlsdGVyLnNldENvbG9yTXVsdGlwbHkobGlnaHRNdWwpOworICAgICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0U2F0dXJhdGlvbihmbG9hdCBzYXR1cmF0aW9uKSB7CisgICAgICAgICAgICBtU2F0dXJhdGlvbiA9IHNhdHVyYXRpb247CisgICAgICAgICAgICBmaW5hbCBDb2xvck1hdHJpeENvbG9yRmlsdGVyIGZpbHRlciA9CisgICAgICAgICAgICAgICAgICAgIChDb2xvck1hdHJpeENvbG9yRmlsdGVyKSBtQ29sb3JNYXRyaXhQYWludC5nZXRDb2xvckZpbHRlcigpOworICAgICAgICAgICAgZmluYWwgQ29sb3JNYXRyaXggbSA9IGZpbHRlci5nZXRDb2xvck1hdHJpeCgpOworICAgICAgICAgICAgbS5zZXRTYXR1cmF0aW9uKHNhdHVyYXRpb24pOworICAgICAgICAgICAgZmlsdGVyLnNldENvbG9yTWF0cml4KG0pOworICAgICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGZsb2F0IGdldFNhdHVyYXRpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gbVNhdHVyYXRpb247CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgICAgIHN1cGVyLm9uRHJhdyhjYW52YXMpOworCisgICAgICAgICAgICBjYW52YXMuZHJhd0FSR0IoMjU1LCAyNTUsIDI1NSwgMjU1KTsKKworICAgICAgICAgICAgY2FudmFzLnNhdmUoKTsKKyAgICAgICAgICAgIGNhbnZhcy50cmFuc2xhdGUoMTIwLjBmLCA1MC4wZik7CisgICAgICAgICAgICBjYW52YXMuZHJhd0JpdG1hcChtQml0bWFwMSwgMC4wZiwgMC4wZiwgbUNvbG9yTWF0cml4UGFpbnQpOworCisgICAgICAgICAgICBjYW52YXMudHJhbnNsYXRlKDAuMGYsIDUwLjBmICsgbUJpdG1hcDEuZ2V0SGVpZ2h0KCkpOworICAgICAgICAgICAgY2FudmFzLmRyYXdCaXRtYXAobUJpdG1hcDEsIDAuMGYsIDAuMGYsIG1MaWdodGluZ1BhaW50KTsKKworICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSgwLjBmLCA1MC4wZiArIG1CaXRtYXAxLmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKG1CaXRtYXAxLCAwLjBmLCAwLjBmLCBtQmxlbmRQYWludCk7CisgICAgICAgICAgICBjYW52YXMucmVzdG9yZSgpOworCisgICAgICAgICAgICBjYW52YXMuc2F2ZSgpOworICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSgxMjAuMGYgKyBtQml0bWFwMS5nZXRXaWR0aCgpICsgMTIwLjBmLCA1MC4wZik7CisgICAgICAgICAgICBjYW52YXMuZHJhd0JpdG1hcChtQml0bWFwMiwgMC4wZiwgMC4wZiwgbUNvbG9yTWF0cml4UGFpbnQpOworCisgICAgICAgICAgICBjYW52YXMudHJhbnNsYXRlKDAuMGYsIDUwLjBmICsgbUJpdG1hcDIuZ2V0SGVpZ2h0KCkpOworICAgICAgICAgICAgY2FudmFzLmRyYXdCaXRtYXAobUJpdG1hcDIsIDAuMGYsIDAuMGYsIG1MaWdodGluZ1BhaW50KTsKKworICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSgwLjBmLCA1MC4wZiArIG1CaXRtYXAyLmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKG1CaXRtYXAyLCAwLjBmLCAwLjBmLCBtQmxlbmRQYWludCk7CisgICAgICAgICAgICBjYW52YXMucmVzdG9yZSgpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9BbmRyb2lkLm1rIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkY2JhMmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L0FuZHJvaWQubWsKQEAgLTAsMCArMSwxOCBAQAorTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworIyBPbmx5IGNvbXBpbGUgc291cmNlIGphdmEgZmlsZXMgaW4gdGhpcyBhcGsuCitMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1qYXZhLWZpbGVzLXVuZGVyLCBzcmMpCisKK0xPQ0FMX1BBQ0tBR0VfTkFNRSA6PSBSZW5kZXJUaHJlYWRUZXN0CisKK0xPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUyArPSBhbmRyb2lkLWNvbW1vbgorCitMT0NBTF9QUk9HVUFSRF9FTkFCTEVEIDo9IGRpc2FibGVkCisKK2luY2x1ZGUgJChCVUlMRF9QQUNLQUdFKQorCisjIFVzZSB0aGUgZm9sbG93aW5nIGluY2x1ZGUgdG8gbWFrZSBvdXIgdGVzdCBhcGsuCitpbmNsdWRlICQoY2FsbCBhbGwtbWFrZWZpbGVzLXVuZGVyLCQoTE9DQUxfUEFUSCkpCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2Y2ZjZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMCwwICsxLDI5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBwYWNrYWdlPSJjb20uZXhhbXBsZS5yZW5kZXJ0aHJlYWQiCisgICAgYW5kcm9pZDp2ZXJzaW9uQ29kZT0iMSIKKyAgICBhbmRyb2lkOnZlcnNpb25OYW1lPSIxLjAiID4KKworICAgIDx1c2VzLXNkaworICAgICAgICBhbmRyb2lkOm1pblNka1ZlcnNpb249IjE4IgorICAgICAgICBhbmRyb2lkOnRhcmdldFNka1ZlcnNpb249IjE4IiAvPgorCisgICAgPGFwcGxpY2F0aW9uCisgICAgICAgIGFuZHJvaWQ6YWxsb3dCYWNrdXA9InRydWUiCisgICAgICAgIGFuZHJvaWQ6aWNvbj0iQGRyYXdhYmxlL2ljX2xhdW5jaGVyIgorICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FwcF9uYW1lIgorICAgICAgICBhbmRyb2lkOnRoZW1lPSJAc3R5bGUvQXBwVGhlbWUiID4KKyAgICAgICAgPGFjdGl2aXR5CisgICAgICAgICAgICBhbmRyb2lkOm5hbWU9Ii5NYWluQWN0aXZpdHkiCisgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FwcF9uYW1lIiA+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisKKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUiIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLlN1YkFjdGl2aXR5IgorICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iQHN0eWxlL0FwcFRoZW1lLlRyYW5zcGFyZW50IiAvPgorICAgIDwvYXBwbGljYXRpb24+CisKKzwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xhdW5jaGVyLnBuZyBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbGF1bmNoZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YTQ0MmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xhdW5jaGVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xhdW5jaGVyLnBuZyBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbGF1bmNoZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTA0N2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xhdW5jaGVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjNmQ3NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xhdW5jaGVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9kcmF3YWJsZS14aGRwaS9zdGFycnlfbmlnaHRfYmcuanBnIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvZHJhd2FibGUteGhkcGkvc3RhcnJ5X25pZ2h0X2JnLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTUyMzJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvZHJhd2FibGUteGhkcGkvc3RhcnJ5X25pZ2h0X2JnLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9sYXlvdXQvYWN0aXZpdHlfbWFpbi54bWwgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9sYXlvdXQvYWN0aXZpdHlfbWFpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZkNTQ1OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvcmVzL2xheW91dC9hY3Rpdml0eV9tYWluLnhtbApAQCAtMCwwICsxLDEyIEBACis8RnJhbWVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnRvb2xzPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS90b29scyIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgIHRvb2xzOmNvbnRleHQ9Ii5NYWluQWN0aXZpdHkiID4KKworICAgIDxMaXN0VmlldyBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9saXN0IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpkaXZpZGVyPSJAbnVsbCIgLz4KKworPC9GcmFtZUxheW91dD4KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvcmVzL2xheW91dC9hY3Rpdml0eV9zdWIueG1sIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvbGF5b3V0L2FjdGl2aXR5X3N1Yi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzY2VlNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvcmVzL2xheW91dC9hY3Rpdml0eV9zdWIueG1sCkBAIC0wLDAgKzEsMzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8RnJhbWVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiID4KKworICAgIDxWaWV3CisgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYmdfY29udGFpbmVyIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvc3RhcnJ5X25pZ2h0X2JnIiAvPgorCisgICAgPExpbmVhckxheW91dAorICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL215X2NvbnRhaW5lciIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiA+CisKKyAgICAgICAgPFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZnJvbV9sZWZ0IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNDhkaXAiCisgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IiM3MDAwRkYwMCIgLz4KKworICAgICAgICA8VmlldworICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9mcm9tX3JpZ2h0IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iODBkaXAiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCisgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IiM5MEZGMDAwMCIgLz4KKworICAgICAgICA8VmlldworICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9mcm9tX2xlZnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRpcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iIzcwMDBGRjAwIiAvPgorICAgIDwvTGluZWFyTGF5b3V0PgorCis8L0ZyYW1lTGF5b3V0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvcmVzL2xheW91dC9pdGVtX2xheW91dC54bWwgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9sYXlvdXQvaXRlbV9sYXlvdXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZGIxYWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy9sYXlvdXQvaXRlbV9sYXlvdXQueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8VGV4dFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL3RleHQxIgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZUxpc3RJdGVtU21hbGwiCisgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCisgICAgYW5kcm9pZDpwYWRkaW5nU3RhcnQ9Ij9hbmRyb2lkOmF0dHIvbGlzdFByZWZlcnJlZEl0ZW1QYWRkaW5nU3RhcnQiCisgICAgYW5kcm9pZDpwYWRkaW5nRW5kPSI/YW5kcm9pZDphdHRyL2xpc3RQcmVmZXJyZWRJdGVtUGFkZGluZ0VuZCIKKyAgICBhbmRyb2lkOm1pbkhlaWdodD0iP2FuZHJvaWQ6YXR0ci9saXN0UHJlZmVycmVkSXRlbUhlaWdodFNtYWxsIgorICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iIzMzYjVlNSIKKy8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ODJlOTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHJlc291cmNlcz4KKworICAgIDxzdHJpbmcgbmFtZT0iYXBwX25hbWUiPlJlbmRlciBUaHJlYWQ8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9zZXR0aW5ncyI+U2V0dGluZ3M8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlbGxvX3dvcmxkIj5IZWxsbyB3b3JsZCE8L3N0cmluZz4KKworPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy92YWx1ZXMvc3R5bGVzLnhtbCBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3QvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YjVkNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3Jlcy92YWx1ZXMvc3R5bGVzLnhtbApAQCAtMCwwICsxLDExIEBACis8cmVzb3VyY2VzPgorICAgIDwhLS0gQXBwbGljYXRpb24gdGhlbWUuIC0tPgorICAgIDxzdHlsZSBuYW1lPSJBcHBUaGVtZSIgcGFyZW50PSJhbmRyb2lkOlRoZW1lLkhvbG8uTGlnaHQiPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iQXBwVGhlbWUuVHJhbnNwYXJlbnQiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0lzVHJhbnNsdWNlbnQiPnRydWU8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QmFja2dyb3VuZCI+QGFuZHJvaWQ6Y29sb3IvdHJhbnNwYXJlbnQ8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3NyYy9jb20vZXhhbXBsZS9yZW5kZXJ0aHJlYWQvTWFpbkFjdGl2aXR5LmphdmEgYi90ZXN0cy9SZW5kZXJUaHJlYWRUZXN0L3NyYy9jb20vZXhhbXBsZS9yZW5kZXJ0aHJlYWQvTWFpbkFjdGl2aXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM5YWJhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3Qvc3JjL2NvbS9leGFtcGxlL3JlbmRlcnRocmVhZC9NYWluQWN0aXZpdHkuamF2YQpAQCAtMCwwICsxLDE1OCBAQAorCitwYWNrYWdlIGNvbS5leGFtcGxlLnJlbmRlcnRocmVhZDsKKworaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLlRpbWVJbnRlcnBvbGF0b3I7CitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheUxpc3Q7CitpbXBvcnQgYW5kcm9pZC52aWV3LkhhcmR3YXJlUmVuZGVyZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlRocmVhZGVkUmVuZGVyZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BY2NlbGVyYXRlRGVjZWxlcmF0ZUludGVycG9sYXRvcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldy5Pbkl0ZW1DbGlja0xpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lkxpc3RWaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNpbXBsZUFkYXB0ZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK3B1YmxpYyBjbGFzcyBNYWluQWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSBpbXBsZW1lbnRzIE9uSXRlbUNsaWNrTGlzdGVuZXIgeworCisgICAgc3RhdGljIGZpbmFsIGludCBEVVJBVElPTiA9IDQwMDsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX05BTUUgPSAibmFtZSI7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQ0xBU1MgPSAiY2xhenoiOworCisgICAgc3RhdGljIE1hcDxTdHJpbmcsPz4gbWFrZShTdHJpbmcgbmFtZSkgeworICAgICAgICBNYXA8U3RyaW5nLE9iamVjdD4gcmV0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLE9iamVjdD4oKTsKKyAgICAgICAgcmV0LnB1dChLRVlfTkFNRSwgbmFtZSk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgQFN1cHByZXNzV2FybmluZ3MoInNlcmlhbCIpCisgICAgc3RhdGljIGZpbmFsIEFycmF5TGlzdDxNYXA8U3RyaW5nLD8+PiBTQU1QTEVTID0gbmV3IEFycmF5TGlzdDxNYXA8U3RyaW5nLD8+PigpIHt7CisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMjU7IGkrKykgeworICAgICAgICAgICAgYWRkKG1ha2UoIkxpc3QgSXRlbTogIiArIGkpKTsKKyAgICAgICAgfQorICAgIH19OworCisgICAgSGFuZGxlciBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKCk7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIEhhcmR3YXJlUmVuZGVyZXIuc1VzZVJlbmRlclRocmVhZCA9IHRydWU7CisgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LmFjdGl2aXR5X21haW4pOworICAgICAgICBMaXN0VmlldyBsdiA9IChMaXN0VmlldykgZmluZFZpZXdCeUlkKGFuZHJvaWQuUi5pZC5saXN0KTsKKyAgICAgICAgbHYuc2V0RHJhd1NlbGVjdG9yT25Ub3AodHJ1ZSk7CisgICAgICAgIGx2LnNldEFkYXB0ZXIobmV3IFNpbXBsZUFkYXB0ZXIodGhpcywgU0FNUExFUywKKyAgICAgICAgICAgICAgICBSLmxheW91dC5pdGVtX2xheW91dCwgbmV3IFN0cmluZ1tdIHsgS0VZX05BTUUgfSwKKyAgICAgICAgICAgICAgICBuZXcgaW50W10geyBhbmRyb2lkLlIuaWQudGV4dDEgfSkpOworICAgICAgICBsdi5zZXRPbkl0ZW1DbGlja0xpc3RlbmVyKHRoaXMpOworICAgICAgICBnZXRBY3Rpb25CYXIoKS5zZXRUaXRsZSgiTWFpbkFjdGl2aXR5Iik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25SZXN1bWUoKSB7CisgICAgICAgIHN1cGVyLm9uUmVzdW1lKCk7CisgICAgICAgIExpc3RWaWV3IGx2ID0gKExpc3RWaWV3KSBmaW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLmxpc3QpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGx2LmdldENoaWxkQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBsdi5nZXRDaGlsZEF0KGkpLmFuaW1hdGUoKS50cmFuc2xhdGlvblkoMCkuc2V0RHVyYXRpb24oRFVSQVRJT04pOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGlzcGxheUxpc3RBbmltYXRvciB7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRpbWVJbnRlcnBvbGF0b3Igc0RlZmF1bHRJbnRlcnBvbGF0b3IgPQorICAgICAgICAgICAgICAgIG5ldyBBY2NlbGVyYXRlRGVjZWxlcmF0ZUludGVycG9sYXRvcigpOworCisgICAgICAgIERpc3BsYXlMaXN0IG1EaXNwbGF5TGlzdDsKKyAgICAgICAgZmxvYXQgbUZyb21WYWx1ZTsKKyAgICAgICAgZmxvYXQgbURlbHRhOworICAgICAgICBsb25nIG1EdXJhdGlvbiA9IERVUkFUSU9OICogMjsKKyAgICAgICAgbG9uZyBtU3RhcnRUaW1lOworCisgICAgICAgIERpc3BsYXlMaXN0QW5pbWF0b3IoVmlldyB2aWV3LCBmbG9hdCB0cmFuc2xhdGVYQnkpIHsKKyAgICAgICAgICAgIG1EZWx0YSA9IHRyYW5zbGF0ZVhCeTsKKyAgICAgICAgICAgIG1Gcm9tVmFsdWUgPSB2aWV3LmdldFRyYW5zbGF0aW9uWSgpOworICAgICAgICAgICAgbURpc3BsYXlMaXN0ID0gdmlldy5nZXREaXNwbGF5TGlzdCgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBhbmltYXRlKGxvbmcgY3VycmVudFRpbWUpIHsKKyAgICAgICAgICAgIGlmIChtU3RhcnRUaW1lID09IDApIG1TdGFydFRpbWUgPSBjdXJyZW50VGltZTsKKworICAgICAgICAgICAgZmxvYXQgZnJhY3Rpb24gPSAoZmxvYXQpKGN1cnJlbnRUaW1lIC0gbVN0YXJ0VGltZSkgLyBtRHVyYXRpb247CisgICAgICAgICAgICBpZiAoZnJhY3Rpb24gPiAxKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnJhY3Rpb24gPSBzRGVmYXVsdEludGVycG9sYXRvci5nZXRJbnRlcnBvbGF0aW9uKGZyYWN0aW9uKTsKKyAgICAgICAgICAgIGZsb2F0IHRyYW5zbGF0aW9uID0gbUZyb21WYWx1ZSArIChtRGVsdGEgKiBmcmFjdGlvbik7CisgICAgICAgICAgICBtRGlzcGxheUxpc3Quc2V0VHJhbnNsYXRpb25ZKHRyYW5zbGF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBmcmFjdGlvbiA8IDFmOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQW5pbWF0aW9uRXhlY3V0b3IgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgICAgICAgIERpc3BsYXlMaXN0QW5pbWF0b3JbXSBtQW5pbWF0aW9uczsKKyAgICAgICAgVGhyZWFkZWRSZW5kZXJlciBtUmVuZGVyZXI7CisKKyAgICAgICAgQW5pbWF0aW9uRXhlY3V0b3IoVGhyZWFkZWRSZW5kZXJlciByZW5kZXJlciwgRGlzcGxheUxpc3RBbmltYXRvcltdIGFuaW1hdGlvbnMpIHsKKyAgICAgICAgICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOworICAgICAgICAgICAgbUFuaW1hdGlvbnMgPSBhbmltYXRpb25zOworICAgICAgICAgICAgVGhyZWFkZWRSZW5kZXJlci5wb3N0VG9SZW5kZXJUaHJlYWQodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgYm9vbGVhbiBoYXNNb3JlID0gZmFsc2U7CisgICAgICAgICAgICBsb25nIG5vdyA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOworICAgICAgICAgICAgZm9yIChEaXNwbGF5TGlzdEFuaW1hdG9yIGFuaW1hdG9yIDogbUFuaW1hdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBoYXNNb3JlIHw9IGFuaW1hdG9yLmFuaW1hdGUobm93KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1SZW5kZXJlci5yZXBlYXRMYXN0RHJhdygpOworICAgICAgICAgICAgaWYgKGhhc01vcmUpIHsKKyAgICAgICAgICAgICAgICBUaHJlYWRlZFJlbmRlcmVyLnBvc3RUb1JlbmRlclRocmVhZCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25JdGVtQ2xpY2soZmluYWwgQWRhcHRlclZpZXc8Pz4gYWRhcHRlclZpZXcsIFZpZXcgY2xpY2tlZFZpZXcsCisgICAgICAgICAgICBpbnQgY2xpY2tlZFBvc2l0aW9uLCBsb25nIGNsaWNrZWRJZCkgeworICAgICAgICBpbnQgdG9wUG9zaXRpb24gPSBhZGFwdGVyVmlldy5nZXRGaXJzdFZpc2libGVQb3NpdGlvbigpOworICAgICAgICBpbnQgZHkgPSBhZGFwdGVyVmlldy5nZXRIZWlnaHQoKTsKKyAgICAgICAgZmluYWwgRGlzcGxheUxpc3RBbmltYXRvcltdIGFuaW1hdG9ycyA9IG5ldyBEaXNwbGF5TGlzdEFuaW1hdG9yW2FkYXB0ZXJWaWV3LmdldENoaWxkQ291bnQoKV07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWRhcHRlclZpZXcuZ2V0Q2hpbGRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIGludCBwb3MgPSB0b3BQb3NpdGlvbiArIGk7CisgICAgICAgICAgICBWaWV3IGNoaWxkID0gYWRhcHRlclZpZXcuZ2V0Q2hpbGRBdChpKTsKKyAgICAgICAgICAgIGZsb2F0IGRlbHRhID0gKHBvcyAtIGNsaWNrZWRQb3NpdGlvbikgKiAxLjFmOworICAgICAgICAgICAgaWYgKGRlbHRhID09IDApIGRlbHRhID0gLTE7CisgICAgICAgICAgICBhbmltYXRvcnNbaV0gPSBuZXcgRGlzcGxheUxpc3RBbmltYXRvcihjaGlsZCwgZHkgKiBkZWx0YSk7CisgICAgICAgIH0KKyAgICAgICAgYWRhcHRlclZpZXcuaW52YWxpZGF0ZSgpOworICAgICAgICBhZGFwdGVyVmlldy5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgbmV3IEFuaW1hdGlvbkV4ZWN1dG9yKChUaHJlYWRlZFJlbmRlcmVyKSBhZGFwdGVyVmlldy5nZXRIYXJkd2FyZVJlbmRlcmVyKCksIGFuaW1hdG9ycyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICAvL21IYW5kbGVyLnBvc3REZWxheWVkKG1MYXVuY2hBY3Rpdml0eSwgKGxvbmcpIChEVVJBVElPTiAqIC40KSk7CisgICAgICAgIG1MYXVuY2hBY3Rpdml0eS5ydW4oKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFJ1bm5hYmxlIG1MYXVuY2hBY3Rpdml0eSA9IG5ldyBSdW5uYWJsZSgpIHsKKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgc3RhcnRBY3Rpdml0eShuZXcgSW50ZW50KE1haW5BY3Rpdml0eS50aGlzLCBTdWJBY3Rpdml0eS5jbGFzcykpOworICAgICAgICAgICAgb3ZlcnJpZGVQZW5kaW5nVHJhbnNpdGlvbigwLCAwKTsKKyAgICAgICAgfQorICAgIH07CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclRocmVhZFRlc3Qvc3JjL2NvbS9leGFtcGxlL3JlbmRlcnRocmVhZC9TdWJBY3Rpdml0eS5qYXZhIGIvdGVzdHMvUmVuZGVyVGhyZWFkVGVzdC9zcmMvY29tL2V4YW1wbGUvcmVuZGVydGhyZWFkL1N1YkFjdGl2aXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkyY2JhZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL1JlbmRlclRocmVhZFRlc3Qvc3JjL2NvbS9leGFtcGxlL3JlbmRlcnRocmVhZC9TdWJBY3Rpdml0eS5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5leGFtcGxlLnJlbmRlcnRocmVhZDsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKK2ltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CisKK3B1YmxpYyBjbGFzcyBTdWJBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIGxvbmcgYmVmb3JlID0gU3lzdGVtQ2xvY2suY3VycmVudFRocmVhZFRpbWVNaWxsaXMoKTsKKyAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQuYWN0aXZpdHlfc3ViKTsKKyAgICAgICAgZ2V0QWN0aW9uQmFyKCkuc2V0VGl0bGUoIlN1YkFjdGl2aXR5Iik7CisgICAgICAgIC8vIFNpbXVsYXRlIGJlaW5nIGEgcmVhbCBhcHAhCisgICAgICAgIHdoaWxlIChTeXN0ZW1DbG9jay5jdXJyZW50VGhyZWFkVGltZU1pbGxpcygpIC0gYmVmb3JlIDwgMTAwKSB7CisgICAgICAgICAgICBWaWV3IHYgPSBuZXcgVmlldyh0aGlzLCBudWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1lKCkgeworICAgICAgICBzdXBlci5vblJlc3VtZSgpOworICAgICAgICBWaWV3R3JvdXAgY29udGFpbmVyID0gKFZpZXdHcm91cCkgZmluZFZpZXdCeUlkKFIuaWQubXlfY29udGFpbmVyKTsKKyAgICAgICAgaW50IGR4ID0gZ2V0V2luZG93TWFuYWdlcigpLmdldERlZmF1bHREaXNwbGF5KCkuZ2V0V2lkdGgoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb250YWluZXIuZ2V0Q2hpbGRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIFZpZXcgY2hpbGQgPSBjb250YWluZXIuZ2V0Q2hpbGRBdChpKTsKKyAgICAgICAgICAgIGludCBkaXIgPSBjaGlsZC5nZXRJZCgpID09IFIuaWQuZnJvbV9sZWZ0ID8gMSA6IC0xOworICAgICAgICAgICAgY2hpbGQuc2V0VHJhbnNsYXRpb25YKGR4ICogZGlyKTsKKyAgICAgICAgICAgIGNoaWxkLmFuaW1hdGUoKS50cmFuc2xhdGlvblgoMCkuc2V0RHVyYXRpb24oTWFpbkFjdGl2aXR5LkRVUkFUSU9OKTsKKyAgICAgICAgfQorICAgICAgICBWaWV3IGJnID0gZmluZFZpZXdCeUlkKFIuaWQuYmdfY29udGFpbmVyKTsKKyAgICAgICAgYmcuc2V0QWxwaGEoMGYpOworICAgICAgICBiZy5hbmltYXRlKCkuYWxwaGEoMWYpLnNldER1cmF0aW9uKE1haW5BY3Rpdml0eS5EVVJBVElPTik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25CYWNrUHJlc3NlZCgpIHsKKyAgICAgICAgc3VwZXIub25CYWNrUHJlc3NlZCgpOworICAgICAgICBvdmVycmlkZVBlbmRpbmdUcmFuc2l0aW9uKDAsIDApOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvQWFwdEFzc2V0cy5jcHAgYi90b29scy9hYXB0L0FhcHRBc3NldHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGUxMTNhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvQWFwdEFzc2V0cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzI2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotCi0jaW5jbHVkZSAiQWFwdEFzc2V0cy5oIgotI2luY2x1ZGUgIlJlc291cmNlRmlsdGVyLmgiCi0jaW5jbHVkZSAiTWFpbi5oIgotCi0jaW5jbHVkZSA8dXRpbHMvbWlzYy5oPgotI2luY2x1ZGUgPHV0aWxzL1NvcnRlZFZlY3Rvci5oPgotCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxkaXJlbnQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi1zdGF0aWMgY29uc3QgY2hhcioga0RlZmF1bHRMb2NhbGUgPSAiZGVmYXVsdCI7Ci1zdGF0aWMgY29uc3QgY2hhcioga1dpbGRjYXJkTmFtZSA9ICJhbnkiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtBc3NldERpciA9ICJhc3NldHMiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtSZXNvdXJjZURpciA9ICJyZXMiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtWYWx1ZXNEaXIgPSAidmFsdWVzIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrTWlwbWFwRGlyID0gIm1pcG1hcCI7Ci1zdGF0aWMgY29uc3QgY2hhcioga0ludmFsaWRDaGFycyA9ICIvXFw6IjsKLXN0YXRpYyBjb25zdCBzaXplX3Qga01heEFzc2V0RmlsZU5hbWUgPSAxMDA7Ci0KLXN0YXRpYyBjb25zdCBTdHJpbmc4IGtSZXNTdHJpbmcoa1Jlc291cmNlRGlyKTsKLQotLyoKLSAqIE5hbWVzIG9mIGFzc2V0IGZpbGVzIG11c3QgbWVldCB0aGUgZm9sbG93aW5nIGNyaXRlcmlhOgotICoKLSAqICAtIHRoZSBmaWxlbmFtZSBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4ga01heEFzc2V0RmlsZU5hbWUgYnl0ZXMgbG9uZwotICogICAgKGFuZCBjYW4ndCBiZSBlbXB0eSkKLSAqICAtIGFsbCBjaGFyYWN0ZXJzIG11c3QgYmUgNy1iaXQgcHJpbnRhYmxlIEFTQ0lJCi0gKiAgLSBub25lIG9mIHsgJy8nICdcXCcgJzonIH0KLSAqCi0gKiBQYXNzIGluIGp1c3QgdGhlIGZpbGVuYW1lLCBub3QgdGhlIGZ1bGwgcGF0aC4KLSAqLwotc3RhdGljIGJvb2wgdmFsaWRhdGVGaWxlTmFtZShjb25zdCBjaGFyKiBmaWxlTmFtZSkKLXsKLSAgICBjb25zdCBjaGFyKiBjcCA9IGZpbGVOYW1lOwotICAgIHNpemVfdCBsZW4gPSAwOwotCi0gICAgd2hpbGUgKCpjcCAhPSAnXDAnKSB7Ci0gICAgICAgIGlmICgoKmNwICYgMHg4MCkgIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgIC8vIHJlamVjdCBoaWdoIEFTQ0lJCi0gICAgICAgIGlmICgqY3AgPCAweDIwIHx8ICpjcCA+PSAweDdmKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgLy8gcmVqZWN0IGNvbnRyb2wgY2hhcnMgYW5kIDB4N2YKLSAgICAgICAgaWYgKHN0cmNocihrSW52YWxpZENoYXJzLCAqY3ApICE9IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAvLyByZWplY3QgcGF0aCBzZXAgY2hhcnMKLSAgICAgICAgY3ArKzsKLSAgICAgICAgbGVuKys7Ci0gICAgfQotCi0gICAgaWYgKGxlbiA8IDEgfHwgbGVuID4ga01heEFzc2V0RmlsZU5hbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAvLyByZWplY3QgZW1wdHkgb3IgdG9vIGxvbmcKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUaGUgZGVmYXVsdCB0byB1c2UgaWYgbm8gb3RoZXIgaWdub3JlIHBhdHRlcm4gaXMgZGVmaW5lZC4KLWNvbnN0IGNoYXIgKiBjb25zdCBnRGVmYXVsdElnbm9yZUFzc2V0cyA9Ci0gICAgIiEuc3ZuOiEuZ2l0OiEuZHNfc3RvcmU6ISouc2NjOi4qOjxkaXI+Xyo6IUNWUzohdGh1bWJzLmRiOiFwaWNhc2EuaW5pOiEqfiI7Ci0vLyBUaGUgaWdub3JlIHBhdHRlcm4gdGhhdCBjYW4gYmUgcGFzc2VkIHZpYSAtLWlnbm9yZS1hc3NldHMgaW4gTWFpbi5jcHAKLWNvbnN0IGNoYXIgKiBnVXNlcklnbm9yZUFzc2V0cyA9IE5VTEw7Ci0KLXN0YXRpYyBib29sIGlzSGlkZGVuKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKnBhdGgpCi17Ci0gICAgLy8gUGF0dGVybnMgc3ludGF4OgotICAgIC8vIC0gRGVsaW1pdGVyIGlzIDoKLSAgICAvLyAtIEVudHJ5IGNhbiBzdGFydCB3aXRoIHRoZSBmbGFnICEgdG8gYXZvaWQgcHJpbnRpbmcgYSB3YXJuaW5nCi0gICAgLy8gICBhYm91dCB0aGUgZmlsZSBiZWluZyBpZ25vcmVkLgotICAgIC8vIC0gRW50cnkgY2FuIGhhdmUgdGhlIGZsYWcgIjxkaXI+IiB0byBtYXRjaCBvbmx5IGRpcmVjdG9yaWVzCi0gICAgLy8gICBvciA8ZmlsZT4gdG8gbWF0Y2ggb25seSBmaWxlcy4gRGVmYXVsdCBpcyB0byBtYXRjaCBib3RoLgotICAgIC8vIC0gRW50cnkgY2FuIGJlIGEgc2ltcGxpZmllZCBnbG9iICI8cHJlZml4PioiIG9yICIqPHN1ZmZpeD4iCi0gICAgLy8gICB3aGVyZSBwcmVmaXgvc3VmZml4IG11c3QgaGF2ZSBhdCBsZWFzdCAxIGNoYXJhY3RlciAoc28gdGhhdAotICAgIC8vICAgd2UgZG9uJ3QgbWF0Y2ggYSAnKicgY2F0Y2gtYWxsIHBhdHRlcm4uKQotICAgIC8vIC0gVGhlIHNwZWNpYWwgZmlsZW5hbWVzICIuIiBhbmQgIi4uIiBhcmUgYWx3YXlzIGlnbm9yZWQuCi0gICAgLy8gLSBPdGhlcndpc2UgdGhlIGZ1bGwgc3RyaW5nIGlzIG1hdGNoZWQuCi0gICAgLy8gLSBtYXRjaCBpcyBub3QgY2FzZS1zZW5zaXRpdmUuCi0KLSAgICBpZiAoc3RyY21wKHBhdGgsICIuIikgPT0gMCB8fCBzdHJjbXAocGF0aCwgIi4uIikgPT0gMCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyICpkZWxpbSA9ICI6IjsKLSAgICBjb25zdCBjaGFyICpwID0gZ1VzZXJJZ25vcmVBc3NldHM7Ci0gICAgaWYgKCFwIHx8ICFwWzBdKSB7Ci0gICAgICAgIHAgPSBnZXRlbnYoIkFORFJPSURfQUFQVF9JR05PUkUiKTsKLSAgICB9Ci0gICAgaWYgKCFwIHx8ICFwWzBdKSB7Ci0gICAgICAgIHAgPSBnRGVmYXVsdElnbm9yZUFzc2V0czsKLSAgICB9Ci0gICAgY2hhciAqcGF0dGVybnMgPSBzdHJkdXAocCk7Ci0KLSAgICBib29sIGlnbm9yZSA9IGZhbHNlOwotICAgIGJvb2wgY2hhdHR5ID0gdHJ1ZTsKLSAgICBjaGFyICptYXRjaGVkUGF0dGVybiA9IE5VTEw7Ci0KLSAgICBTdHJpbmc4IGZ1bGxQYXRoKHJvb3QpOwotICAgIGZ1bGxQYXRoLmFwcGVuZFBhdGgocGF0aCk7Ci0gICAgRmlsZVR5cGUgdHlwZSA9IGdldEZpbGVUeXBlKGZ1bGxQYXRoKTsKLQotICAgIGludCBwbGVuID0gc3RybGVuKHBhdGgpOwotCi0gICAgLy8gTm90ZTogd2UgZG9uJ3QgaGF2ZSBzdHJ0b2tfciB1bmRlciBtaW5ndy4KLSAgICBmb3IoY2hhciAqdG9rZW4gPSBzdHJ0b2socGF0dGVybnMsIGRlbGltKTsKLSAgICAgICAgICAgICFpZ25vcmUgJiYgdG9rZW4gIT0gTlVMTDsKLSAgICAgICAgICAgIHRva2VuID0gc3RydG9rKE5VTEwsIGRlbGltKSkgewotICAgICAgICBjaGF0dHkgPSB0b2tlblswXSAhPSAnISc7Ci0gICAgICAgIGlmICghY2hhdHR5KSB0b2tlbisrOyAvLyBza2lwICEKLSAgICAgICAgaWYgKHN0cm5jYXNlY21wKHRva2VuLCAiPGRpcj4iICwgNSkgPT0gMCkgewotICAgICAgICAgICAgaWYgKHR5cGUgIT0ga0ZpbGVUeXBlRGlyZWN0b3J5KSBjb250aW51ZTsKLSAgICAgICAgICAgIHRva2VuICs9IDU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0cm5jYXNlY21wKHRva2VuLCAiPGZpbGU+IiwgNikgPT0gMCkgewotICAgICAgICAgICAgaWYgKHR5cGUgIT0ga0ZpbGVUeXBlUmVndWxhcikgY29udGludWU7Ci0gICAgICAgICAgICB0b2tlbiArPSA2OwotICAgICAgICB9Ci0KLSAgICAgICAgbWF0Y2hlZFBhdHRlcm4gPSB0b2tlbjsKLSAgICAgICAgaW50IG4gPSBzdHJsZW4odG9rZW4pOwotCi0gICAgICAgIGlmICh0b2tlblswXSA9PSAnKicpIHsKLSAgICAgICAgICAgIC8vIE1hdGNoICpzdWZmaXgKLSAgICAgICAgICAgIHRva2VuKys7Ci0gICAgICAgICAgICBuLS07Ci0gICAgICAgICAgICBpZiAobiA8PSBwbGVuKSB7Ci0gICAgICAgICAgICAgICAgaWdub3JlID0gc3RybmNhc2VjbXAodG9rZW4sIHBhdGggKyBwbGVuIC0gbiwgbikgPT0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChuID4gMSAmJiB0b2tlbltuIC0gMV0gPT0gJyonKSB7Ci0gICAgICAgICAgICAvLyBNYXRjaCBwcmVmaXgqCi0gICAgICAgICAgICBpZ25vcmUgPSBzdHJuY2FzZWNtcCh0b2tlbiwgcGF0aCwgbiAtIDEpID09IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZ25vcmUgPSBzdHJjYXNlY21wKHRva2VuLCBwYXRoKSA9PSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGlnbm9yZSAmJiBjaGF0dHkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgKHNraXBwaW5nICVzICclcycgZHVlIHRvIEFORFJPSURfQUFQVF9JR05PUkUgcGF0dGVybiAnJXMnKVxuIiwKLSAgICAgICAgICAgICAgICB0eXBlID09IGtGaWxlVHlwZURpcmVjdG9yeSA/ICJkaXIiIDogImZpbGUiLAotICAgICAgICAgICAgICAgIHBhdGgsCi0gICAgICAgICAgICAgICAgbWF0Y2hlZFBhdHRlcm4gPyBtYXRjaGVkUGF0dGVybiA6ICIiKTsKLSAgICB9Ci0KLSAgICBmcmVlKHBhdHRlcm5zKTsKLSAgICByZXR1cm4gaWdub3JlOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXR1c190Ci1BYXB0R3JvdXBFbnRyeTo6cGFyc2VOYW1lUGFydChjb25zdCBTdHJpbmc4JiBwYXJ0LCBpbnQqIGF4aXMsIHVpbnQzMl90KiB2YWx1ZSkKLXsKLSAgICBSZXNUYWJsZV9jb25maWcgY29uZmlnOwotCi0gICAgLy8gSU1TSSAtIE1DQwotICAgIGlmIChnZXRNY2NOYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19NQ0M7Ci0gICAgICAgICp2YWx1ZSA9IGNvbmZpZy5tY2M7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIElNU0kgLSBNTkMKLSAgICBpZiAoZ2V0TW5jTmFtZShwYXJ0LnN0cmluZygpLCAmY29uZmlnKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfTU5DOwotICAgICAgICAqdmFsdWUgPSBjb25maWcubW5jOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBsb2NhbGUgLSBsYW5ndWFnZQotICAgIGlmIChwYXJ0Lmxlbmd0aCgpID09IDIgJiYgaXNhbHBoYShwYXJ0WzBdKSAmJiBpc2FscGhhKHBhcnRbMV0pKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19MQU5HVUFHRTsKLSAgICAgICAgKnZhbHVlID0gcGFydFsxXSA8PCA4IHwgcGFydFswXTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gbG9jYWxlIC0gbGFuZ3VhZ2VfUkVHSU9OCi0gICAgaWYgKHBhcnQubGVuZ3RoKCkgPT0gNSAmJiBpc2FscGhhKHBhcnRbMF0pICYmIGlzYWxwaGEocGFydFsxXSkKLSAgICAgICAgICAgICYmIHBhcnRbMl0gPT0gJ18nICYmIGlzYWxwaGEocGFydFszXSkgJiYgaXNhbHBoYShwYXJ0WzRdKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfTEFOR1VBR0U7Ci0gICAgICAgICp2YWx1ZSA9IChwYXJ0WzRdIDw8IDI0KSB8IChwYXJ0WzNdIDw8IDE2KSB8IChwYXJ0WzFdIDw8IDgpIHwgKHBhcnRbMF0pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBsYXlvdXQgZGlyZWN0aW9uCi0gICAgaWYgKGdldExheW91dERpcmVjdGlvbk5hbWUocGFydC5zdHJpbmcoKSwgJmNvbmZpZykpIHsKLSAgICAgICAgKmF4aXMgPSBBWElTX0xBWU9VVERJUjsKLSAgICAgICAgKnZhbHVlID0gKGNvbmZpZy5zY3JlZW5MYXlvdXQmUmVzVGFibGVfY29uZmlnOjpNQVNLX0xBWU9VVERJUik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIHNtYWxsZXN0IHNjcmVlbiBkcCB3aWR0aAotICAgIGlmIChnZXRTbWFsbGVzdFNjcmVlbldpZHRoRHBOYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19TTUFMTEVTVFNDUkVFTldJRFRIRFA7Ci0gICAgICAgICp2YWx1ZSA9IGNvbmZpZy5zbWFsbGVzdFNjcmVlbldpZHRoRHA7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIHNjcmVlbiBkcCB3aWR0aAotICAgIGlmIChnZXRTY3JlZW5XaWR0aERwTmFtZShwYXJ0LnN0cmluZygpLCAmY29uZmlnKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfU0NSRUVOV0lEVEhEUDsKLSAgICAgICAgKnZhbHVlID0gY29uZmlnLnNjcmVlbldpZHRoRHA7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIHNjcmVlbiBkcCBoZWlnaHQKLSAgICBpZiAoZ2V0U2NyZWVuSGVpZ2h0RHBOYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19TQ1JFRU5IRUlHSFREUDsKLSAgICAgICAgKnZhbHVlID0gY29uZmlnLnNjcmVlbkhlaWdodERwOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBzY3JlZW4gbGF5b3V0IHNpemUKLSAgICBpZiAoZ2V0U2NyZWVuTGF5b3V0U2l6ZU5hbWUocGFydC5zdHJpbmcoKSwgJmNvbmZpZykpIHsKLSAgICAgICAgKmF4aXMgPSBBWElTX1NDUkVFTkxBWU9VVFNJWkU7Ci0gICAgICAgICp2YWx1ZSA9IChjb25maWcuc2NyZWVuTGF5b3V0JlJlc1RhYmxlX2NvbmZpZzo6TUFTS19TQ1JFRU5TSVpFKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gc2NyZWVuIGxheW91dCBsb25nCi0gICAgaWYgKGdldFNjcmVlbkxheW91dExvbmdOYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19TQ1JFRU5MQVlPVVRMT05HOwotICAgICAgICAqdmFsdWUgPSAoY29uZmlnLnNjcmVlbkxheW91dCZSZXNUYWJsZV9jb25maWc6Ok1BU0tfU0NSRUVOTE9ORyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIG9yaWVudGF0aW9uCi0gICAgaWYgKGdldE9yaWVudGF0aW9uTmFtZShwYXJ0LnN0cmluZygpLCAmY29uZmlnKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfT1JJRU5UQVRJT047Ci0gICAgICAgICp2YWx1ZSA9IGNvbmZpZy5vcmllbnRhdGlvbjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gdWkgbW9kZSB0eXBlCi0gICAgaWYgKGdldFVpTW9kZVR5cGVOYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19VSU1PREVUWVBFOwotICAgICAgICAqdmFsdWUgPSAoY29uZmlnLnVpTW9kZSZSZXNUYWJsZV9jb25maWc6Ok1BU0tfVUlfTU9ERV9UWVBFKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gdWkgbW9kZSBuaWdodAotICAgIGlmIChnZXRVaU1vZGVOaWdodE5hbWUocGFydC5zdHJpbmcoKSwgJmNvbmZpZykpIHsKLSAgICAgICAgKmF4aXMgPSBBWElTX1VJTU9ERU5JR0hUOwotICAgICAgICAqdmFsdWUgPSAoY29uZmlnLnVpTW9kZSZSZXNUYWJsZV9jb25maWc6Ok1BU0tfVUlfTU9ERV9OSUdIVCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIGRlbnNpdHkKLSAgICBpZiAoZ2V0RGVuc2l0eU5hbWUocGFydC5zdHJpbmcoKSwgJmNvbmZpZykpIHsKLSAgICAgICAgKmF4aXMgPSBBWElTX0RFTlNJVFk7Ci0gICAgICAgICp2YWx1ZSA9IGNvbmZpZy5kZW5zaXR5OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyB0b3VjaHNjcmVlbgotICAgIGlmIChnZXRUb3VjaHNjcmVlbk5hbWUocGFydC5zdHJpbmcoKSwgJmNvbmZpZykpIHsKLSAgICAgICAgKmF4aXMgPSBBWElTX1RPVUNIU0NSRUVOOwotICAgICAgICAqdmFsdWUgPSBjb25maWcudG91Y2hzY3JlZW47Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIGtleWJvYXJkIGhpZGRlbgotICAgIGlmIChnZXRLZXlzSGlkZGVuTmFtZShwYXJ0LnN0cmluZygpLCAmY29uZmlnKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfS0VZU0hJRERFTjsKLSAgICAgICAgKnZhbHVlID0gY29uZmlnLmlucHV0RmxhZ3M7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIGtleWJvYXJkCi0gICAgaWYgKGdldEtleWJvYXJkTmFtZShwYXJ0LnN0cmluZygpLCAmY29uZmlnKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfS0VZQk9BUkQ7Ci0gICAgICAgICp2YWx1ZSA9IGNvbmZpZy5rZXlib2FyZDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gbmF2aWdhdGlvbiBoaWRkZW4KLSAgICBpZiAoZ2V0TmF2SGlkZGVuTmFtZShwYXJ0LnN0cmluZygpLCAmY29uZmlnKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfTkFWSElEREVOOwotICAgICAgICAqdmFsdWUgPSBjb25maWcuaW5wdXRGbGFnczsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gbmF2aWdhdGlvbgotICAgIGlmIChnZXROYXZpZ2F0aW9uTmFtZShwYXJ0LnN0cmluZygpLCAmY29uZmlnKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfTkFWSUdBVElPTjsKLSAgICAgICAgKnZhbHVlID0gY29uZmlnLm5hdmlnYXRpb247Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIHNjcmVlbiBzaXplCi0gICAgaWYgKGdldFNjcmVlblNpemVOYW1lKHBhcnQuc3RyaW5nKCksICZjb25maWcpKSB7Ci0gICAgICAgICpheGlzID0gQVhJU19TQ1JFRU5TSVpFOwotICAgICAgICAqdmFsdWUgPSBjb25maWcuc2NyZWVuU2l6ZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gdmVyc2lvbgotICAgIGlmIChnZXRWZXJzaW9uTmFtZShwYXJ0LnN0cmluZygpLCAmY29uZmlnKSkgewotICAgICAgICAqYXhpcyA9IEFYSVNfVkVSU0lPTjsKLSAgICAgICAgKnZhbHVlID0gY29uZmlnLnZlcnNpb247Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiAxOwotfQotCi11aW50MzJfdAotQWFwdEdyb3VwRW50cnk6OmdldENvbmZpZ1ZhbHVlRm9yQXhpcyhjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZywgaW50IGF4aXMpCi17Ci0gICAgc3dpdGNoIChheGlzKSB7Ci0gICAgICAgIGNhc2UgQVhJU19NQ0M6Ci0gICAgICAgICAgICByZXR1cm4gY29uZmlnLm1jYzsKLSAgICAgICAgY2FzZSBBWElTX01OQzoKLSAgICAgICAgICAgIHJldHVybiBjb25maWcubW5jOwotICAgICAgICBjYXNlIEFYSVNfTEFOR1VBR0U6Ci0gICAgICAgICAgICByZXR1cm4gKCgodWludDMyX3QpY29uZmlnLmNvdW50cnlbMV0pIDw8IDI0KSB8ICgoKHVpbnQzMl90KWNvbmZpZy5jb3VudHJ5WzBdKSA8PCAxNikKLSAgICAgICAgICAgICAgICB8ICgoKHVpbnQzMl90KWNvbmZpZy5sYW5ndWFnZVsxXSkgPDwgOCkgfCAoY29uZmlnLmxhbmd1YWdlWzBdKTsKLSAgICAgICAgY2FzZSBBWElTX0xBWU9VVERJUjoKLSAgICAgICAgICAgIHJldHVybiBjb25maWcuc2NyZWVuTGF5b3V0JlJlc1RhYmxlX2NvbmZpZzo6TUFTS19MQVlPVVRESVI7Ci0gICAgICAgIGNhc2UgQVhJU19TQ1JFRU5MQVlPVVRTSVpFOgotICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5zY3JlZW5MYXlvdXQmUmVzVGFibGVfY29uZmlnOjpNQVNLX1NDUkVFTlNJWkU7Ci0gICAgICAgIGNhc2UgQVhJU19PUklFTlRBVElPTjoKLSAgICAgICAgICAgIHJldHVybiBjb25maWcub3JpZW50YXRpb247Ci0gICAgICAgIGNhc2UgQVhJU19VSU1PREVUWVBFOgotICAgICAgICAgICAgcmV0dXJuIChjb25maWcudWlNb2RlJlJlc1RhYmxlX2NvbmZpZzo6TUFTS19VSV9NT0RFX1RZUEUpOwotICAgICAgICBjYXNlIEFYSVNfVUlNT0RFTklHSFQ6Ci0gICAgICAgICAgICByZXR1cm4gKGNvbmZpZy51aU1vZGUmUmVzVGFibGVfY29uZmlnOjpNQVNLX1VJX01PREVfTklHSFQpOwotICAgICAgICBjYXNlIEFYSVNfREVOU0lUWToKLSAgICAgICAgICAgIHJldHVybiBjb25maWcuZGVuc2l0eTsKLSAgICAgICAgY2FzZSBBWElTX1RPVUNIU0NSRUVOOgotICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy50b3VjaHNjcmVlbjsKLSAgICAgICAgY2FzZSBBWElTX0tFWVNISURERU46Ci0gICAgICAgICAgICByZXR1cm4gY29uZmlnLmlucHV0RmxhZ3M7Ci0gICAgICAgIGNhc2UgQVhJU19LRVlCT0FSRDoKLSAgICAgICAgICAgIHJldHVybiBjb25maWcua2V5Ym9hcmQ7Ci0gICAgICAgIGNhc2UgQVhJU19OQVZJR0FUSU9OOgotICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5uYXZpZ2F0aW9uOwotICAgICAgICBjYXNlIEFYSVNfU0NSRUVOU0laRToKLSAgICAgICAgICAgIHJldHVybiBjb25maWcuc2NyZWVuU2l6ZTsKLSAgICAgICAgY2FzZSBBWElTX1NNQUxMRVNUU0NSRUVOV0lEVEhEUDoKLSAgICAgICAgICAgIHJldHVybiBjb25maWcuc21hbGxlc3RTY3JlZW5XaWR0aERwOwotICAgICAgICBjYXNlIEFYSVNfU0NSRUVOV0lEVEhEUDoKLSAgICAgICAgICAgIHJldHVybiBjb25maWcuc2NyZWVuV2lkdGhEcDsKLSAgICAgICAgY2FzZSBBWElTX1NDUkVFTkhFSUdIVERQOgotICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5zY3JlZW5IZWlnaHREcDsKLSAgICAgICAgY2FzZSBBWElTX1ZFUlNJT046Ci0gICAgICAgICAgICByZXR1cm4gY29uZmlnLnZlcnNpb247Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1ib29sCi1BYXB0R3JvdXBFbnRyeTo6Y29uZmlnU2FtZUV4Y2VwdChjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZywKLSAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnJiBvdGhlckNvbmZpZywgaW50IGF4aXMpCi17Ci0gICAgZm9yIChpbnQgaT1BWElTX1NUQVJUOyBpPD1BWElTX0VORDsgaSsrKSB7Ci0gICAgICAgIGlmIChpID09IGF4aXMpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChnZXRDb25maWdWYWx1ZUZvckF4aXMoY29uZmlnLCBpKSAhPSBnZXRDb25maWdWYWx1ZUZvckF4aXMob3RoZXJDb25maWcsIGkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wKLUFhcHRHcm91cEVudHJ5Ojppbml0RnJvbURpck5hbWUoY29uc3QgY2hhciogZGlyLCBTdHJpbmc4KiByZXNUeXBlKQotewotICAgIG1QYXJhbXNDaGFuZ2VkID0gdHJ1ZTsKLQotICAgIFZlY3RvcjxTdHJpbmc4PiBwYXJ0czsKLQotICAgIFN0cmluZzggbWNjLCBtbmMsIGxvYywgbGF5b3V0c2l6ZSwgbGF5b3V0bG9uZywgb3JpZW50LCBkZW47Ci0gICAgU3RyaW5nOCB0b3VjaCwga2V5LCBrZXlzSGlkZGVuLCBuYXYsIG5hdkhpZGRlbiwgc2l6ZSwgbGF5b3V0RGlyLCB2ZXJzOwotICAgIFN0cmluZzggdWlNb2RlVHlwZSwgdWlNb2RlTmlnaHQsIHNtYWxsZXN0d2lkdGhkcCwgd2lkdGhkcCwgaGVpZ2h0ZHA7Ci0KLSAgICBjb25zdCBjaGFyICpwID0gZGlyOwotICAgIGNvbnN0IGNoYXIgKnE7Ci0gICAgd2hpbGUgKE5VTEwgIT0gKHEgPSBzdHJjaHIocCwgJy0nKSkpIHsKLSAgICAgICAgU3RyaW5nOCB2YWwocCwgcS1wKTsKLSAgICAgICAgdmFsLnRvTG93ZXIoKTsKLSAgICAgICAgcGFydHMuYWRkKHZhbCk7Ci0gICAgICAgIC8vcHJpbnRmKCJwYXJ0OiAlc1xuIiwgcGFydHNbcGFydHMuc2l6ZSgpLTFdLnN0cmluZygpKTsKLSAgICAgICAgcCA9IHErMTsKLSAgICB9Ci0gICAgU3RyaW5nOCB2YWwocCk7Ci0gICAgdmFsLnRvTG93ZXIoKTsKLSAgICBwYXJ0cy5hZGQodmFsKTsKLSAgICAvL3ByaW50ZigicGFydDogJXNcbiIsIHBhcnRzW3BhcnRzLnNpemUoKS0xXS5zdHJpbmcoKSk7Ci0KLSAgICBjb25zdCBpbnQgTiA9IHBhcnRzLnNpemUoKTsKLSAgICBpbnQgaW5kZXggPSAwOwotICAgIFN0cmluZzggcGFydCA9IHBhcnRzW2luZGV4XTsKLQotICAgIC8vIHJlc291cmNlIHR5cGUKLSAgICBpZiAoIWlzVmFsaWRSZXNvdXJjZVR5cGUocGFydCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAqcmVzVHlwZSA9IHBhcnQ7Ci0KLSAgICBpbmRleCsrOwotICAgIGlmIChpbmRleCA9PSBOKSB7Ci0gICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICB9Ci0gICAgcGFydCA9IHBhcnRzW2luZGV4XTsKLQotICAgIC8vIGltc2kgLSBtY2MKLSAgICBpZiAoZ2V0TWNjTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICBtY2MgPSBwYXJ0OwotCi0gICAgICAgIGluZGV4Kys7Ci0gICAgICAgIGlmIChpbmRleCA9PSBOKSB7Ci0gICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgcGFydCA9IHBhcnRzW2luZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICAvL3ByaW50Zigibm90IG1jYzogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIGltc2kgLSBtbmMKLSAgICBpZiAoZ2V0TW5jTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICBtbmMgPSBwYXJ0OwotCi0gICAgICAgIGluZGV4Kys7Ci0gICAgICAgIGlmIChpbmRleCA9PSBOKSB7Ci0gICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgcGFydCA9IHBhcnRzW2luZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICAvL3ByaW50Zigibm90IG1jYzogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIGxvY2FsZSAtIGxhbmd1YWdlCi0gICAgaWYgKHBhcnQubGVuZ3RoKCkgPT0gMiAmJiBpc2FscGhhKHBhcnRbMF0pICYmIGlzYWxwaGEocGFydFsxXSkpIHsKLSAgICAgICAgbG9jID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCBsYW5ndWFnZTogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIGxvY2FsZSAtIHJlZ2lvbgotICAgIGlmIChsb2MubGVuZ3RoKCkgPiAwCi0gICAgICAgICAgICAmJiBwYXJ0Lmxlbmd0aCgpID09IDMgJiYgcGFydFswXSA9PSAncicgJiYgcGFydFswXSAmJiBwYXJ0WzFdKSB7Ci0gICAgICAgIGxvYyArPSAiLSI7Ci0gICAgICAgIHBhcnQudG9VcHBlcigpOwotICAgICAgICBsb2MgKz0gcGFydC5zdHJpbmcoKSArIDE7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3QgcmVnaW9uOiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgaWYgKGdldExheW91dERpcmVjdGlvbk5hbWUocGFydC5zdHJpbmcoKSkpIHsKLSAgICAgICAgbGF5b3V0RGlyID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCBsYXlvdXQgZGlyZWN0aW9uOiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgaWYgKGdldFNtYWxsZXN0U2NyZWVuV2lkdGhEcE5hbWUocGFydC5zdHJpbmcoKSkpIHsKLSAgICAgICAgc21hbGxlc3R3aWR0aGRwID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCBzbWFsbGVzdCBzY3JlZW4gd2lkdGggZHA6ICVzXG4iLCBwYXJ0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0U2NyZWVuV2lkdGhEcE5hbWUocGFydC5zdHJpbmcoKSkpIHsKLSAgICAgICAgd2lkdGhkcCA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3Qgc2NyZWVuIHdpZHRoIGRwOiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgaWYgKGdldFNjcmVlbkhlaWdodERwTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICBoZWlnaHRkcCA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3Qgc2NyZWVuIGhlaWdodCBkcDogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIGlmIChnZXRTY3JlZW5MYXlvdXRTaXplTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICBsYXlvdXRzaXplID0gcGFydDsKLQotICAgICAgICBpbmRleCsrOwotICAgICAgICBpZiAoaW5kZXggPT0gTikgewotICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICB9Ci0gICAgICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy9wcmludGYoIm5vdCBzY3JlZW4gbGF5b3V0IHNpemU6ICVzXG4iLCBwYXJ0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0U2NyZWVuTGF5b3V0TG9uZ05hbWUocGFydC5zdHJpbmcoKSkpIHsKLSAgICAgICAgbGF5b3V0bG9uZyA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3Qgc2NyZWVuIGxheW91dCBsb25nOiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgLy8gb3JpZW50YXRpb24KLSAgICBpZiAoZ2V0T3JpZW50YXRpb25OYW1lKHBhcnQuc3RyaW5nKCkpKSB7Ci0gICAgICAgIG9yaWVudCA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3Qgb3JpZW50YXRpb246ICVzXG4iLCBwYXJ0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICAvLyB1aSBtb2RlIHR5cGUKLSAgICBpZiAoZ2V0VWlNb2RlVHlwZU5hbWUocGFydC5zdHJpbmcoKSkpIHsKLSAgICAgICAgdWlNb2RlVHlwZSA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3QgdWkgbW9kZSB0eXBlOiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgLy8gdWkgbW9kZSBuaWdodAotICAgIGlmIChnZXRVaU1vZGVOaWdodE5hbWUocGFydC5zdHJpbmcoKSkpIHsKLSAgICAgICAgdWlNb2RlTmlnaHQgPSBwYXJ0OwotCi0gICAgICAgIGluZGV4Kys7Ci0gICAgICAgIGlmIChpbmRleCA9PSBOKSB7Ci0gICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgcGFydCA9IHBhcnRzW2luZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICAvL3ByaW50Zigibm90IHVpIG1vZGUgbmlnaHQ6ICVzXG4iLCBwYXJ0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICAvLyBkZW5zaXR5Ci0gICAgaWYgKGdldERlbnNpdHlOYW1lKHBhcnQuc3RyaW5nKCkpKSB7Ci0gICAgICAgIGRlbiA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3QgZGVuc2l0eTogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIHRvdWNoc2NyZWVuCi0gICAgaWYgKGdldFRvdWNoc2NyZWVuTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICB0b3VjaCA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3QgdG91Y2hzY3JlZW46ICVzXG4iLCBwYXJ0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICAvLyBrZXlib2FyZCBoaWRkZW4KLSAgICBpZiAoZ2V0S2V5c0hpZGRlbk5hbWUocGFydC5zdHJpbmcoKSkpIHsKLSAgICAgICAga2V5c0hpZGRlbiA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3Qga2V5c0hpZGRlbjogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIGtleWJvYXJkCi0gICAgaWYgKGdldEtleWJvYXJkTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICBrZXkgPSBwYXJ0OwotCi0gICAgICAgIGluZGV4Kys7Ci0gICAgICAgIGlmIChpbmRleCA9PSBOKSB7Ci0gICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgcGFydCA9IHBhcnRzW2luZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICAvL3ByaW50Zigibm90IGtleWJvYXJkOiAlc1xuIiwgcGFydC5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgLy8gbmF2aWdhdGlvbiBoaWRkZW4KLSAgICBpZiAoZ2V0TmF2SGlkZGVuTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICBuYXZIaWRkZW4gPSBwYXJ0OwotCi0gICAgICAgIGluZGV4Kys7Ci0gICAgICAgIGlmIChpbmRleCA9PSBOKSB7Ci0gICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgcGFydCA9IHBhcnRzW2luZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICAvL3ByaW50Zigibm90IG5hdkhpZGRlbjogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIGlmIChnZXROYXZpZ2F0aW9uTmFtZShwYXJ0LnN0cmluZygpKSkgewotICAgICAgICBuYXYgPSBwYXJ0OwotCi0gICAgICAgIGluZGV4Kys7Ci0gICAgICAgIGlmIChpbmRleCA9PSBOKSB7Ci0gICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgcGFydCA9IHBhcnRzW2luZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICAvL3ByaW50Zigibm90IG5hdmlnYXRpb246ICVzXG4iLCBwYXJ0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0U2NyZWVuU2l6ZU5hbWUocGFydC5zdHJpbmcoKSkpIHsKLSAgICAgICAgc2l6ZSA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3Qgc2NyZWVuIHNpemU6ICVzXG4iLCBwYXJ0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0VmVyc2lvbk5hbWUocGFydC5zdHJpbmcoKSkpIHsKLSAgICAgICAgdmVycyA9IHBhcnQ7Ci0KLSAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgaWYgKGluZGV4ID09IE4pIHsKLSAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKLSAgICAgICAgfQotICAgICAgICBwYXJ0ID0gcGFydHNbaW5kZXhdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vcHJpbnRmKCJub3QgdmVyc2lvbjogJXNcbiIsIHBhcnQuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIGlmIHRoZXJlIGFyZSBleHRyYSBwYXJ0cywgaXQgZG9lc24ndCBtYXRjaAotICAgIHJldHVybiBmYWxzZTsKLQotc3VjY2VzczoKLSAgICB0aGlzLT5tY2MgPSBtY2M7Ci0gICAgdGhpcy0+bW5jID0gbW5jOwotICAgIHRoaXMtPmxvY2FsZSA9IGxvYzsKLSAgICB0aGlzLT5zY3JlZW5MYXlvdXRTaXplID0gbGF5b3V0c2l6ZTsKLSAgICB0aGlzLT5zY3JlZW5MYXlvdXRMb25nID0gbGF5b3V0bG9uZzsKLSAgICB0aGlzLT5zbWFsbGVzdFNjcmVlbldpZHRoRHAgPSBzbWFsbGVzdHdpZHRoZHA7Ci0gICAgdGhpcy0+c2NyZWVuV2lkdGhEcCA9IHdpZHRoZHA7Ci0gICAgdGhpcy0+c2NyZWVuSGVpZ2h0RHAgPSBoZWlnaHRkcDsKLSAgICB0aGlzLT5vcmllbnRhdGlvbiA9IG9yaWVudDsKLSAgICB0aGlzLT51aU1vZGVUeXBlID0gdWlNb2RlVHlwZTsKLSAgICB0aGlzLT51aU1vZGVOaWdodCA9IHVpTW9kZU5pZ2h0OwotICAgIHRoaXMtPmRlbnNpdHkgPSBkZW47Ci0gICAgdGhpcy0+dG91Y2hzY3JlZW4gPSB0b3VjaDsKLSAgICB0aGlzLT5rZXlzSGlkZGVuID0ga2V5c0hpZGRlbjsKLSAgICB0aGlzLT5rZXlib2FyZCA9IGtleTsKLSAgICB0aGlzLT5uYXZIaWRkZW4gPSBuYXZIaWRkZW47Ci0gICAgdGhpcy0+bmF2aWdhdGlvbiA9IG5hdjsKLSAgICB0aGlzLT5zY3JlZW5TaXplID0gc2l6ZTsKLSAgICB0aGlzLT5sYXlvdXREaXJlY3Rpb24gPSBsYXlvdXREaXI7Ci0gICAgdGhpcy0+dmVyc2lvbiA9IHZlcnM7Ci0KLSAgICAvLyB3aGF0IGlzIHRoaXMgYW55d2F5PwotICAgIHRoaXMtPnZlbmRvciA9ICIiOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVN0cmluZzgKLUFhcHRHcm91cEVudHJ5Ojp0b1N0cmluZygpIGNvbnN0Ci17Ci0gICAgU3RyaW5nOCBzID0gdGhpcy0+bWNjOwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0gdGhpcy0+bW5jOwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0gdGhpcy0+bG9jYWxlOwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0gbGF5b3V0RGlyZWN0aW9uOwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0gc21hbGxlc3RTY3JlZW5XaWR0aERwOwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0gc2NyZWVuV2lkdGhEcDsKLSAgICBzICs9ICIsIjsKLSAgICBzICs9IHNjcmVlbkhlaWdodERwOwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0gc2NyZWVuTGF5b3V0U2l6ZTsKLSAgICBzICs9ICIsIjsKLSAgICBzICs9IHNjcmVlbkxheW91dExvbmc7Ci0gICAgcyArPSAiLCI7Ci0gICAgcyArPSB0aGlzLT5vcmllbnRhdGlvbjsKLSAgICBzICs9ICIsIjsKLSAgICBzICs9IHVpTW9kZVR5cGU7Ci0gICAgcyArPSAiLCI7Ci0gICAgcyArPSB1aU1vZGVOaWdodDsKLSAgICBzICs9ICIsIjsKLSAgICBzICs9IGRlbnNpdHk7Ci0gICAgcyArPSAiLCI7Ci0gICAgcyArPSB0b3VjaHNjcmVlbjsKLSAgICBzICs9ICIsIjsKLSAgICBzICs9IGtleXNIaWRkZW47Ci0gICAgcyArPSAiLCI7Ci0gICAgcyArPSBrZXlib2FyZDsKLSAgICBzICs9ICIsIjsKLSAgICBzICs9IG5hdkhpZGRlbjsKLSAgICBzICs9ICIsIjsKLSAgICBzICs9IG5hdmlnYXRpb247Ci0gICAgcyArPSAiLCI7Ci0gICAgcyArPSBzY3JlZW5TaXplOwotICAgIHMgKz0gIiwiOwotICAgIHMgKz0gdmVyc2lvbjsKLSAgICByZXR1cm4gczsKLX0KLQotU3RyaW5nOAotQWFwdEdyb3VwRW50cnk6OnRvRGlyTmFtZShjb25zdCBTdHJpbmc4JiByZXNUeXBlKSBjb25zdAotewotICAgIFN0cmluZzggcyA9IHJlc1R5cGU7Ci0gICAgaWYgKHRoaXMtPm1jYyAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0gbWNjOwotICAgIH0KLSAgICBpZiAodGhpcy0+bW5jICE9ICIiKSB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcyArPSAiLSI7Ci0gICAgICAgIH0KLSAgICAgICAgcyArPSBtbmM7Ci0gICAgfQotICAgIGlmICh0aGlzLT5sb2NhbGUgIT0gIiIpIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKLSAgICAgICAgfQotICAgICAgICBzICs9IGxvY2FsZTsKLSAgICB9Ci0gICAgaWYgKHRoaXMtPmxheW91dERpcmVjdGlvbiAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0gbGF5b3V0RGlyZWN0aW9uOwotICAgIH0KLSAgICBpZiAodGhpcy0+c21hbGxlc3RTY3JlZW5XaWR0aERwICE9ICIiKSB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcyArPSAiLSI7Ci0gICAgICAgIH0KLSAgICAgICAgcyArPSBzbWFsbGVzdFNjcmVlbldpZHRoRHA7Ci0gICAgfQotICAgIGlmICh0aGlzLT5zY3JlZW5XaWR0aERwICE9ICIiKSB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcyArPSAiLSI7Ci0gICAgICAgIH0KLSAgICAgICAgcyArPSBzY3JlZW5XaWR0aERwOwotICAgIH0KLSAgICBpZiAodGhpcy0+c2NyZWVuSGVpZ2h0RHAgIT0gIiIpIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKLSAgICAgICAgfQotICAgICAgICBzICs9IHNjcmVlbkhlaWdodERwOwotICAgIH0KLSAgICBpZiAodGhpcy0+c2NyZWVuTGF5b3V0U2l6ZSAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0gc2NyZWVuTGF5b3V0U2l6ZTsKLSAgICB9Ci0gICAgaWYgKHRoaXMtPnNjcmVlbkxheW91dExvbmcgIT0gIiIpIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKLSAgICAgICAgfQotICAgICAgICBzICs9IHNjcmVlbkxheW91dExvbmc7Ci0gICAgfQotICAgIGlmICh0aGlzLT5vcmllbnRhdGlvbiAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0gb3JpZW50YXRpb247Ci0gICAgfQotICAgIGlmICh0aGlzLT51aU1vZGVUeXBlICE9ICIiKSB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcyArPSAiLSI7Ci0gICAgICAgIH0KLSAgICAgICAgcyArPSB1aU1vZGVUeXBlOwotICAgIH0KLSAgICBpZiAodGhpcy0+dWlNb2RlTmlnaHQgIT0gIiIpIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKLSAgICAgICAgfQotICAgICAgICBzICs9IHVpTW9kZU5pZ2h0OwotICAgIH0KLSAgICBpZiAodGhpcy0+ZGVuc2l0eSAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0gZGVuc2l0eTsKLSAgICB9Ci0gICAgaWYgKHRoaXMtPnRvdWNoc2NyZWVuICE9ICIiKSB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcyArPSAiLSI7Ci0gICAgICAgIH0KLSAgICAgICAgcyArPSB0b3VjaHNjcmVlbjsKLSAgICB9Ci0gICAgaWYgKHRoaXMtPmtleXNIaWRkZW4gIT0gIiIpIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKLSAgICAgICAgfQotICAgICAgICBzICs9IGtleXNIaWRkZW47Ci0gICAgfQotICAgIGlmICh0aGlzLT5rZXlib2FyZCAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0ga2V5Ym9hcmQ7Ci0gICAgfQotICAgIGlmICh0aGlzLT5uYXZIaWRkZW4gIT0gIiIpIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKLSAgICAgICAgfQotICAgICAgICBzICs9IG5hdkhpZGRlbjsKLSAgICB9Ci0gICAgaWYgKHRoaXMtPm5hdmlnYXRpb24gIT0gIiIpIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKLSAgICAgICAgfQotICAgICAgICBzICs9IG5hdmlnYXRpb247Ci0gICAgfQotICAgIGlmICh0aGlzLT5zY3JlZW5TaXplICE9ICIiKSB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgcyArPSAiLSI7Ci0gICAgICAgIH0KLSAgICAgICAgcyArPSBzY3JlZW5TaXplOwotICAgIH0KLSAgICBpZiAodGhpcy0+dmVyc2lvbiAhPSAiIikgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0gdmVyc2lvbjsKLSAgICB9Ci0KLSAgICByZXR1cm4gczsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0TWNjTmFtZShjb25zdCBjaGFyKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgaWYgKHN0cmNtcChuYW1lLCBrV2lsZGNhcmROYW1lKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+bWNjID0gMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIGMgPSBuYW1lOwotICAgIGlmICh0b2xvd2VyKCpjKSAhPSAnbScpIHJldHVybiBmYWxzZTsKLSAgICBjKys7Ci0gICAgaWYgKHRvbG93ZXIoKmMpICE9ICdjJykgcmV0dXJuIGZhbHNlOwotICAgIGMrKzsKLSAgICBpZiAodG9sb3dlcigqYykgIT0gJ2MnKSByZXR1cm4gZmFsc2U7Ci0gICAgYysrOwotCi0gICAgY29uc3QgY2hhciogdmFsID0gYzsKLQotICAgIHdoaWxlICgqYyA+PSAnMCcgJiYgKmMgPD0gJzknKSB7Ci0gICAgICAgIGMrKzsKLSAgICB9Ci0gICAgaWYgKCpjICE9IDApIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYy12YWwgIT0gMykgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGQgPSBhdG9pKHZhbCk7Ci0gICAgaWYgKGQgIT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPm1jYyA9IGQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0TW5jTmFtZShjb25zdCBjaGFyKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgaWYgKHN0cmNtcChuYW1lLCBrV2lsZGNhcmROYW1lKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+bWNjID0gMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIGMgPSBuYW1lOwotICAgIGlmICh0b2xvd2VyKCpjKSAhPSAnbScpIHJldHVybiBmYWxzZTsKLSAgICBjKys7Ci0gICAgaWYgKHRvbG93ZXIoKmMpICE9ICduJykgcmV0dXJuIGZhbHNlOwotICAgIGMrKzsKLSAgICBpZiAodG9sb3dlcigqYykgIT0gJ2MnKSByZXR1cm4gZmFsc2U7Ci0gICAgYysrOwotCi0gICAgY29uc3QgY2hhciogdmFsID0gYzsKLQotICAgIHdoaWxlICgqYyA+PSAnMCcgJiYgKmMgPD0gJzknKSB7Ci0gICAgICAgIGMrKzsKLSAgICB9Ci0gICAgaWYgKCpjICE9IDApIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYy12YWwgPT0gMCB8fCBjLXZhbCA+IDMpIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChvdXQpIHsKLSAgICAgICAgb3V0LT5tbmMgPSBhdG9pKHZhbCk7Ci0gICAgICAgIGlmIChvdXQtPm1uYyA9PSAwKSB7Ci0gICAgICAgICAgICBvdXQtPm1uYyA9IEFDT05GSUdVUkFUSU9OX01OQ19aRVJPOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBEb2VzIHRoaXMgZGlyZWN0b3J5IG5hbWUgZml0IHRoZSBwYXR0ZXJuIG9mIGEgbG9jYWxlIGRpciAoImVuLXJVUyIgb3IKLSAqICJkZWZhdWx0Iik/Ci0gKgotICogVE9ETzogU2hvdWxkIGluc2lzdCB0aGF0IHRoZSBmaXJzdCB0d28gbGV0dGVycyBhcmUgbG93ZXIgY2FzZSwgYW5kIHRoZQotICogc2Vjb25kIHR3byBhcmUgdXBwZXIuCi0gKi8KLWJvb2wgQWFwdEdyb3VwRW50cnk6OmdldExvY2FsZU5hbWUoY29uc3QgY2hhciogZmlsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIGlmIChzdHJjbXAoZmlsZU5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDAKLSAgICAgICAgICAgIHx8IHN0cmNtcChmaWxlTmFtZSwga0RlZmF1bHRMb2NhbGUpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgewotICAgICAgICAgICAgb3V0LT5sYW5ndWFnZVswXSA9IDA7Ci0gICAgICAgICAgICBvdXQtPmxhbmd1YWdlWzFdID0gMDsKLSAgICAgICAgICAgIG91dC0+Y291bnRyeVswXSA9IDA7Ci0gICAgICAgICAgICBvdXQtPmNvdW50cnlbMV0gPSAwOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChzdHJsZW4oZmlsZU5hbWUpID09IDIgJiYgaXNhbHBoYShmaWxlTmFtZVswXSkgJiYgaXNhbHBoYShmaWxlTmFtZVsxXSkpIHsKLSAgICAgICAgaWYgKG91dCkgewotICAgICAgICAgICAgb3V0LT5sYW5ndWFnZVswXSA9IGZpbGVOYW1lWzBdOwotICAgICAgICAgICAgb3V0LT5sYW5ndWFnZVsxXSA9IGZpbGVOYW1lWzFdOwotICAgICAgICAgICAgb3V0LT5jb3VudHJ5WzBdID0gMDsKLSAgICAgICAgICAgIG91dC0+Y291bnRyeVsxXSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHN0cmxlbihmaWxlTmFtZSkgPT0gNSAmJgotICAgICAgICBpc2FscGhhKGZpbGVOYW1lWzBdKSAmJgotICAgICAgICBpc2FscGhhKGZpbGVOYW1lWzFdKSAmJgotICAgICAgICBmaWxlTmFtZVsyXSA9PSAnLScgJiYKLSAgICAgICAgaXNhbHBoYShmaWxlTmFtZVszXSkgJiYKLSAgICAgICAgaXNhbHBoYShmaWxlTmFtZVs0XSkpIHsKLSAgICAgICAgaWYgKG91dCkgewotICAgICAgICAgICAgb3V0LT5sYW5ndWFnZVswXSA9IGZpbGVOYW1lWzBdOwotICAgICAgICAgICAgb3V0LT5sYW5ndWFnZVsxXSA9IGZpbGVOYW1lWzFdOwotICAgICAgICAgICAgb3V0LT5jb3VudHJ5WzBdID0gZmlsZU5hbWVbM107Ci0gICAgICAgICAgICBvdXQtPmNvdW50cnlbMV0gPSBmaWxlTmFtZVs0XTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWFwdEdyb3VwRW50cnk6OmdldExheW91dERpcmVjdGlvbk5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgaWYgKHN0cmNtcChuYW1lLCBrV2lsZGNhcmROYW1lKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+c2NyZWVuTGF5b3V0ID0KLSAgICAgICAgICAgICAgICAob3V0LT5zY3JlZW5MYXlvdXQmflJlc1RhYmxlX2NvbmZpZzo6TUFTS19MQVlPVVRESVIpCi0gICAgICAgICAgICAgICAgfCBSZXNUYWJsZV9jb25maWc6OkxBWU9VVERJUl9BTlk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJsZGx0ciIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5zY3JlZW5MYXlvdXQgPQotICAgICAgICAgICAgICAgIChvdXQtPnNjcmVlbkxheW91dCZ+UmVzVGFibGVfY29uZmlnOjpNQVNLX0xBWU9VVERJUikKLSAgICAgICAgICAgICAgICB8IFJlc1RhYmxlX2NvbmZpZzo6TEFZT1VURElSX0xUUjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImxkcnRsIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnNjcmVlbkxheW91dCA9Ci0gICAgICAgICAgICAgICAgKG91dC0+c2NyZWVuTGF5b3V0Jn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfTEFZT1VURElSKQotICAgICAgICAgICAgICAgIHwgUmVzVGFibGVfY29uZmlnOjpMQVlPVVRESVJfUlRMOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWFwdEdyb3VwRW50cnk6OmdldFNjcmVlbkxheW91dFNpemVOYW1lKGNvbnN0IGNoYXIqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgaWYgKHN0cmNtcChuYW1lLCBrV2lsZGNhcmROYW1lKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+c2NyZWVuTGF5b3V0ID0KLSAgICAgICAgICAgICAgICAob3V0LT5zY3JlZW5MYXlvdXQmflJlc1RhYmxlX2NvbmZpZzo6TUFTS19TQ1JFRU5TSVpFKQotICAgICAgICAgICAgICAgIHwgUmVzVGFibGVfY29uZmlnOjpTQ1JFRU5TSVpFX0FOWTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgInNtYWxsIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnNjcmVlbkxheW91dCA9Ci0gICAgICAgICAgICAgICAgKG91dC0+c2NyZWVuTGF5b3V0Jn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfU0NSRUVOU0laRSkKLSAgICAgICAgICAgICAgICB8IFJlc1RhYmxlX2NvbmZpZzo6U0NSRUVOU0laRV9TTUFMTDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgIm5vcm1hbCIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5zY3JlZW5MYXlvdXQgPQotICAgICAgICAgICAgICAgIChvdXQtPnNjcmVlbkxheW91dCZ+UmVzVGFibGVfY29uZmlnOjpNQVNLX1NDUkVFTlNJWkUpCi0gICAgICAgICAgICAgICAgfCBSZXNUYWJsZV9jb25maWc6OlNDUkVFTlNJWkVfTk9STUFMOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAibGFyZ2UiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+c2NyZWVuTGF5b3V0ID0KLSAgICAgICAgICAgICAgICAob3V0LT5zY3JlZW5MYXlvdXQmflJlc1RhYmxlX2NvbmZpZzo6TUFTS19TQ1JFRU5TSVpFKQotICAgICAgICAgICAgICAgIHwgUmVzVGFibGVfY29uZmlnOjpTQ1JFRU5TSVpFX0xBUkdFOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAieGxhcmdlIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnNjcmVlbkxheW91dCA9Ci0gICAgICAgICAgICAgICAgKG91dC0+c2NyZWVuTGF5b3V0Jn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfU0NSRUVOU0laRSkKLSAgICAgICAgICAgICAgICB8IFJlc1RhYmxlX2NvbmZpZzo6U0NSRUVOU0laRV9YTEFSR0U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0U2NyZWVuTGF5b3V0TG9uZ05hbWUoY29uc3QgY2hhciogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZV9jb25maWcqIG91dCkKLXsKLSAgICBpZiAoc3RyY21wKG5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5zY3JlZW5MYXlvdXQgPQotICAgICAgICAgICAgICAgIChvdXQtPnNjcmVlbkxheW91dCZ+UmVzVGFibGVfY29uZmlnOjpNQVNLX1NDUkVFTkxPTkcpCi0gICAgICAgICAgICAgICAgfCBSZXNUYWJsZV9jb25maWc6OlNDUkVFTkxPTkdfQU5ZOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAibG9uZyIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5zY3JlZW5MYXlvdXQgPQotICAgICAgICAgICAgICAgIChvdXQtPnNjcmVlbkxheW91dCZ+UmVzVGFibGVfY29uZmlnOjpNQVNLX1NDUkVFTkxPTkcpCi0gICAgICAgICAgICAgICAgfCBSZXNUYWJsZV9jb25maWc6OlNDUkVFTkxPTkdfWUVTOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAibm90bG9uZyIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5zY3JlZW5MYXlvdXQgPQotICAgICAgICAgICAgICAgIChvdXQtPnNjcmVlbkxheW91dCZ+UmVzVGFibGVfY29uZmlnOjpNQVNLX1NDUkVFTkxPTkcpCi0gICAgICAgICAgICAgICAgfCBSZXNUYWJsZV9jb25maWc6OlNDUkVFTkxPTkdfTk87Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0T3JpZW50YXRpb25OYW1lKGNvbnN0IGNoYXIqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfY29uZmlnKiBvdXQpCi17Ci0gICAgaWYgKHN0cmNtcChuYW1lLCBrV2lsZGNhcmROYW1lKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+b3JpZW50YXRpb24gPSBvdXQtPk9SSUVOVEFUSU9OX0FOWTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgInBvcnQiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+b3JpZW50YXRpb24gPSBvdXQtPk9SSUVOVEFUSU9OX1BPUlQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJsYW5kIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPm9yaWVudGF0aW9uID0gb3V0LT5PUklFTlRBVElPTl9MQU5EOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAic3F1YXJlIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPm9yaWVudGF0aW9uID0gb3V0LT5PUklFTlRBVElPTl9TUVVBUkU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0VWlNb2RlVHlwZU5hbWUoY29uc3QgY2hhciogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIGlmIChzdHJjbXAobmFtZSwga1dpbGRjYXJkTmFtZSkgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnVpTW9kZSA9Ci0gICAgICAgICAgICAgICAgKG91dC0+dWlNb2RlJn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfVUlfTU9ERV9UWVBFKQotICAgICAgICAgICAgICAgIHwgUmVzVGFibGVfY29uZmlnOjpVSV9NT0RFX1RZUEVfQU5ZOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiZGVzayIpID09IDApIHsKLSAgICAgIGlmIChvdXQpIG91dC0+dWlNb2RlID0KLSAgICAgICAgICAgICAgKG91dC0+dWlNb2RlJn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfVUlfTU9ERV9UWVBFKQotICAgICAgICAgICAgICB8IFJlc1RhYmxlX2NvbmZpZzo6VUlfTU9ERV9UWVBFX0RFU0s7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJjYXIiKSA9PSAwKSB7Ci0gICAgICBpZiAob3V0KSBvdXQtPnVpTW9kZSA9Ci0gICAgICAgICAgICAgIChvdXQtPnVpTW9kZSZ+UmVzVGFibGVfY29uZmlnOjpNQVNLX1VJX01PREVfVFlQRSkKLSAgICAgICAgICAgICAgfCBSZXNUYWJsZV9jb25maWc6OlVJX01PREVfVFlQRV9DQVI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ0ZWxldmlzaW9uIikgPT0gMCkgewotICAgICAgaWYgKG91dCkgb3V0LT51aU1vZGUgPQotICAgICAgICAgICAgICAob3V0LT51aU1vZGUmflJlc1RhYmxlX2NvbmZpZzo6TUFTS19VSV9NT0RFX1RZUEUpCi0gICAgICAgICAgICAgIHwgUmVzVGFibGVfY29uZmlnOjpVSV9NT0RFX1RZUEVfVEVMRVZJU0lPTjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImFwcGxpYW5jZSIpID09IDApIHsKLSAgICAgIGlmIChvdXQpIG91dC0+dWlNb2RlID0KLSAgICAgICAgICAgICAgKG91dC0+dWlNb2RlJn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfVUlfTU9ERV9UWVBFKQotICAgICAgICAgICAgICB8IFJlc1RhYmxlX2NvbmZpZzo6VUlfTU9ERV9UWVBFX0FQUExJQU5DRTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFhcHRHcm91cEVudHJ5OjpnZXRVaU1vZGVOaWdodE5hbWUoY29uc3QgY2hhciogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIGlmIChzdHJjbXAobmFtZSwga1dpbGRjYXJkTmFtZSkgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnVpTW9kZSA9Ci0gICAgICAgICAgICAgICAgKG91dC0+dWlNb2RlJn5SZXNUYWJsZV9jb25maWc6Ok1BU0tfVUlfTU9ERV9OSUdIVCkKLSAgICAgICAgICAgICAgICB8IFJlc1RhYmxlX2NvbmZpZzo6VUlfTU9ERV9OSUdIVF9BTlk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJuaWdodCIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT51aU1vZGUgPQotICAgICAgICAgICAgICAgIChvdXQtPnVpTW9kZSZ+UmVzVGFibGVfY29uZmlnOjpNQVNLX1VJX01PREVfTklHSFQpCi0gICAgICAgICAgICAgICAgfCBSZXNUYWJsZV9jb25maWc6OlVJX01PREVfTklHSFRfWUVTOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAibm90bmlnaHQiKSA9PSAwKSB7Ci0gICAgICBpZiAob3V0KSBvdXQtPnVpTW9kZSA9Ci0gICAgICAgICAgICAgIChvdXQtPnVpTW9kZSZ+UmVzVGFibGVfY29uZmlnOjpNQVNLX1VJX01PREVfTklHSFQpCi0gICAgICAgICAgICAgIHwgUmVzVGFibGVfY29uZmlnOjpVSV9NT0RFX05JR0hUX05POwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWFwdEdyb3VwRW50cnk6OmdldERlbnNpdHlOYW1lKGNvbnN0IGNoYXIqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZV9jb25maWcqIG91dCkKLXsKLSAgICBpZiAoc3RyY21wKG5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5kZW5zaXR5ID0gUmVzVGFibGVfY29uZmlnOjpERU5TSVRZX0RFRkFVTFQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoc3RyY21wKG5hbWUsICJub2RwaSIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5kZW5zaXR5ID0gUmVzVGFibGVfY29uZmlnOjpERU5TSVRZX05PTkU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoc3RyY21wKG5hbWUsICJsZHBpIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPmRlbnNpdHkgPSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfTE9XOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHN0cmNtcChuYW1lLCAibWRwaSIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5kZW5zaXR5ID0gUmVzVGFibGVfY29uZmlnOjpERU5TSVRZX01FRElVTTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChzdHJjbXAobmFtZSwgInR2ZHBpIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPmRlbnNpdHkgPSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfVFY7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoc3RyY21wKG5hbWUsICJoZHBpIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPmRlbnNpdHkgPSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfSElHSDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcChuYW1lLCAieGhkcGkiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+ZGVuc2l0eSA9IFJlc1RhYmxlX2NvbmZpZzo6REVOU0lUWV9YSElHSDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcChuYW1lLCAieHhoZHBpIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPmRlbnNpdHkgPSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfWFhISUdIOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJ4eHhoZHBpIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPmRlbnNpdHkgPSBSZXNUYWJsZV9jb25maWc6OkRFTlNJVFlfWFhYSElHSDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2hhciogYyA9IChjaGFyKiluYW1lOwotICAgIHdoaWxlICgqYyA+PSAnMCcgJiYgKmMgPD0gJzknKSB7Ci0gICAgICAgIGMrKzsKLSAgICB9Ci0KLSAgICAvLyBjaGVjayB0aGF0IHdlIGhhdmUgJ2RwaScgYWZ0ZXIgdGhlIGxhc3QgZGlnaXQuCi0gICAgaWYgKHRvdXBwZXIoY1swXSkgIT0gJ0QnIHx8Ci0gICAgICAgICAgICB0b3VwcGVyKGNbMV0pICE9ICdQJyB8fAotICAgICAgICAgICAgdG91cHBlcihjWzJdKSAhPSAnSScgfHwKLSAgICAgICAgICAgIGNbM10gIT0gMCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gdGVtcG9yYXJpbHkgcmVwbGFjZSB0aGUgZmlyc3QgbGV0dGVyIHdpdGggXDAgdG8KLSAgICAvLyB1c2UgYXRvaS4KLSAgICBjaGFyIHRtcCA9IGNbMF07Ci0gICAgY1swXSA9ICdcMCc7Ci0KLSAgICBpbnQgZCA9IGF0b2kobmFtZSk7Ci0gICAgY1swXSA9IHRtcDsKLQotICAgIGlmIChkICE9IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5kZW5zaXR5ID0gZDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFhcHRHcm91cEVudHJ5OjpnZXRUb3VjaHNjcmVlbk5hbWUoY29uc3QgY2hhciogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZV9jb25maWcqIG91dCkKLXsKLSAgICBpZiAoc3RyY21wKG5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT50b3VjaHNjcmVlbiA9IG91dC0+VE9VQ0hTQ1JFRU5fQU5ZOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAibm90b3VjaCIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT50b3VjaHNjcmVlbiA9IG91dC0+VE9VQ0hTQ1JFRU5fTk9UT1VDSDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgInN0eWx1cyIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT50b3VjaHNjcmVlbiA9IG91dC0+VE9VQ0hTQ1JFRU5fU1RZTFVTOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiZmluZ2VyIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPnRvdWNoc2NyZWVuID0gb3V0LT5UT1VDSFNDUkVFTl9GSU5HRVI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0S2V5c0hpZGRlbk5hbWUoY29uc3QgY2hhciogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIHVpbnQ4X3QgbWFzayA9IDA7Ci0gICAgdWludDhfdCB2YWx1ZSA9IDA7Ci0gICAgaWYgKHN0cmNtcChuYW1lLCBrV2lsZGNhcmROYW1lKSA9PSAwKSB7Ci0gICAgICAgIG1hc2sgPSBSZXNUYWJsZV9jb25maWc6Ok1BU0tfS0VZU0hJRERFTjsKLSAgICAgICAgdmFsdWUgPSBSZXNUYWJsZV9jb25maWc6OktFWVNISURERU5fQU5ZOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJrZXlzZXhwb3NlZCIpID09IDApIHsKLSAgICAgICAgbWFzayA9IFJlc1RhYmxlX2NvbmZpZzo6TUFTS19LRVlTSElEREVOOwotICAgICAgICB2YWx1ZSA9IFJlc1RhYmxlX2NvbmZpZzo6S0VZU0hJRERFTl9OTzsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAia2V5c2hpZGRlbiIpID09IDApIHsKLSAgICAgICAgbWFzayA9IFJlc1RhYmxlX2NvbmZpZzo6TUFTS19LRVlTSElEREVOOwotICAgICAgICB2YWx1ZSA9IFJlc1RhYmxlX2NvbmZpZzo6S0VZU0hJRERFTl9ZRVM7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImtleXNzb2Z0IikgPT0gMCkgewotICAgICAgICBtYXNrID0gUmVzVGFibGVfY29uZmlnOjpNQVNLX0tFWVNISURERU47Ci0gICAgICAgIHZhbHVlID0gUmVzVGFibGVfY29uZmlnOjpLRVlTSElEREVOX1NPRlQ7Ci0gICAgfQotCi0gICAgaWYgKG1hc2sgIT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPmlucHV0RmxhZ3MgPSAob3V0LT5pbnB1dEZsYWdzJn5tYXNrKSB8IHZhbHVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWFwdEdyb3VwRW50cnk6OmdldEtleWJvYXJkTmFtZShjb25zdCBjaGFyKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIGlmIChzdHJjbXAobmFtZSwga1dpbGRjYXJkTmFtZSkgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPmtleWJvYXJkID0gb3V0LT5LRVlCT0FSRF9BTlk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJub2tleXMiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+a2V5Ym9hcmQgPSBvdXQtPktFWUJPQVJEX05PS0VZUzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgInF3ZXJ0eSIpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5rZXlib2FyZCA9IG91dC0+S0VZQk9BUkRfUVdFUlRZOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiMTJrZXkiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+a2V5Ym9hcmQgPSBvdXQtPktFWUJPQVJEXzEyS0VZOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWFwdEdyb3VwRW50cnk6OmdldE5hdkhpZGRlbk5hbWUoY29uc3QgY2hhciogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIHVpbnQ4X3QgbWFzayA9IDA7Ci0gICAgdWludDhfdCB2YWx1ZSA9IDA7Ci0gICAgaWYgKHN0cmNtcChuYW1lLCBrV2lsZGNhcmROYW1lKSA9PSAwKSB7Ci0gICAgICAgIG1hc2sgPSBSZXNUYWJsZV9jb25maWc6Ok1BU0tfTkFWSElEREVOOwotICAgICAgICB2YWx1ZSA9IFJlc1RhYmxlX2NvbmZpZzo6TkFWSElEREVOX0FOWTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAibmF2ZXhwb3NlZCIpID09IDApIHsKLSAgICAgICAgbWFzayA9IFJlc1RhYmxlX2NvbmZpZzo6TUFTS19OQVZISURERU47Ci0gICAgICAgIHZhbHVlID0gUmVzVGFibGVfY29uZmlnOjpOQVZISURERU5fTk87Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgIm5hdmhpZGRlbiIpID09IDApIHsKLSAgICAgICAgbWFzayA9IFJlc1RhYmxlX2NvbmZpZzo6TUFTS19OQVZISURERU47Ci0gICAgICAgIHZhbHVlID0gUmVzVGFibGVfY29uZmlnOjpOQVZISURERU5fWUVTOwotICAgIH0KLQotICAgIGlmIChtYXNrICE9IDApIHsKLSAgICAgICAgaWYgKG91dCkgb3V0LT5pbnB1dEZsYWdzID0gKG91dC0+aW5wdXRGbGFncyZ+bWFzaykgfCB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFhcHRHcm91cEVudHJ5OjpnZXROYXZpZ2F0aW9uTmFtZShjb25zdCBjaGFyKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIGlmIChzdHJjbXAobmFtZSwga1dpbGRjYXJkTmFtZSkgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPm5hdmlnYXRpb24gPSBvdXQtPk5BVklHQVRJT05fQU5ZOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAibm9uYXYiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+bmF2aWdhdGlvbiA9IG91dC0+TkFWSUdBVElPTl9OT05BVjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImRwYWQiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+bmF2aWdhdGlvbiA9IG91dC0+TkFWSUdBVElPTl9EUEFEOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidHJhY2tiYWxsIikgPT0gMCkgewotICAgICAgICBpZiAob3V0KSBvdXQtPm5hdmlnYXRpb24gPSBvdXQtPk5BVklHQVRJT05fVFJBQ0tCQUxMOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAid2hlZWwiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChvdXQpIG91dC0+bmF2aWdhdGlvbiA9IG91dC0+TkFWSUdBVElPTl9XSEVFTDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFhcHRHcm91cEVudHJ5OjpnZXRTY3JlZW5TaXplTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCkKLXsKLSAgICBpZiAoc3RyY21wKG5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgewotICAgICAgICAgICAgb3V0LT5zY3JlZW5XaWR0aCA9IG91dC0+U0NSRUVOV0lEVEhfQU5ZOwotICAgICAgICAgICAgb3V0LT5zY3JlZW5IZWlnaHQgPSBvdXQtPlNDUkVFTkhFSUdIVF9BTlk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogeCA9IG5hbWU7Ci0gICAgd2hpbGUgKCp4ID49ICcwJyAmJiAqeCA8PSAnOScpIHgrKzsKLSAgICBpZiAoeCA9PSBuYW1lIHx8ICp4ICE9ICd4JykgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZzggeE5hbWUobmFtZSwgeC1uYW1lKTsKLSAgICB4Kys7Ci0KLSAgICBjb25zdCBjaGFyKiB5ID0geDsKLSAgICB3aGlsZSAoKnkgPj0gJzAnICYmICp5IDw9ICc5JykgeSsrOwotICAgIGlmICh5ID09IG5hbWUgfHwgKnkgIT0gMCkgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZzggeU5hbWUoeCwgeS14KTsKLQotICAgIHVpbnQxNl90IHcgPSAodWludDE2X3QpYXRvaSh4TmFtZS5zdHJpbmcoKSk7Ci0gICAgdWludDE2X3QgaCA9ICh1aW50MTZfdClhdG9pKHlOYW1lLnN0cmluZygpKTsKLSAgICBpZiAodyA8IGgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChvdXQpIHsKLSAgICAgICAgb3V0LT5zY3JlZW5XaWR0aCA9IHc7Ci0gICAgICAgIG91dC0+c2NyZWVuSGVpZ2h0ID0gaDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0U21hbGxlc3RTY3JlZW5XaWR0aERwTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCkKLXsKLSAgICBpZiAoc3RyY21wKG5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgewotICAgICAgICAgICAgb3V0LT5zbWFsbGVzdFNjcmVlbldpZHRoRHAgPSBvdXQtPlNDUkVFTldJRFRIX0FOWTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoKm5hbWUgIT0gJ3MnKSByZXR1cm4gZmFsc2U7Ci0gICAgbmFtZSsrOwotICAgIGlmICgqbmFtZSAhPSAndycpIHJldHVybiBmYWxzZTsKLSAgICBuYW1lKys7Ci0gICAgY29uc3QgY2hhciogeCA9IG5hbWU7Ci0gICAgd2hpbGUgKCp4ID49ICcwJyAmJiAqeCA8PSAnOScpIHgrKzsKLSAgICBpZiAoeCA9PSBuYW1lIHx8IHhbMF0gIT0gJ2QnIHx8IHhbMV0gIT0gJ3AnIHx8IHhbMl0gIT0gMCkgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZzggeE5hbWUobmFtZSwgeC1uYW1lKTsKLQotICAgIGlmIChvdXQpIHsKLSAgICAgICAgb3V0LT5zbWFsbGVzdFNjcmVlbldpZHRoRHAgPSAodWludDE2X3QpYXRvaSh4TmFtZS5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQWFwdEdyb3VwRW50cnk6OmdldFNjcmVlbldpZHRoRHBOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIGlmIChzdHJjbXAobmFtZSwga1dpbGRjYXJkTmFtZSkgPT0gMCkgewotICAgICAgICBpZiAob3V0KSB7Ci0gICAgICAgICAgICBvdXQtPnNjcmVlbldpZHRoRHAgPSBvdXQtPlNDUkVFTldJRFRIX0FOWTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoKm5hbWUgIT0gJ3cnKSByZXR1cm4gZmFsc2U7Ci0gICAgbmFtZSsrOwotICAgIGNvbnN0IGNoYXIqIHggPSBuYW1lOwotICAgIHdoaWxlICgqeCA+PSAnMCcgJiYgKnggPD0gJzknKSB4Kys7Ci0gICAgaWYgKHggPT0gbmFtZSB8fCB4WzBdICE9ICdkJyB8fCB4WzFdICE9ICdwJyB8fCB4WzJdICE9IDApIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmc4IHhOYW1lKG5hbWUsIHgtbmFtZSk7Ci0KLSAgICBpZiAob3V0KSB7Ci0gICAgICAgIG91dC0+c2NyZWVuV2lkdGhEcCA9ICh1aW50MTZfdClhdG9pKHhOYW1lLnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBYXB0R3JvdXBFbnRyeTo6Z2V0U2NyZWVuSGVpZ2h0RHBOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0KQotewotICAgIGlmIChzdHJjbXAobmFtZSwga1dpbGRjYXJkTmFtZSkgPT0gMCkgewotICAgICAgICBpZiAob3V0KSB7Ci0gICAgICAgICAgICBvdXQtPnNjcmVlbkhlaWdodERwID0gb3V0LT5TQ1JFRU5XSURUSF9BTlk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCpuYW1lICE9ICdoJykgcmV0dXJuIGZhbHNlOwotICAgIG5hbWUrKzsKLSAgICBjb25zdCBjaGFyKiB4ID0gbmFtZTsKLSAgICB3aGlsZSAoKnggPj0gJzAnICYmICp4IDw9ICc5JykgeCsrOwotICAgIGlmICh4ID09IG5hbWUgfHwgeFswXSAhPSAnZCcgfHwgeFsxXSAhPSAncCcgfHwgeFsyXSAhPSAwKSByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nOCB4TmFtZShuYW1lLCB4LW5hbWUpOwotCi0gICAgaWYgKG91dCkgewotICAgICAgICBvdXQtPnNjcmVlbkhlaWdodERwID0gKHVpbnQxNl90KWF0b2koeE5hbWUuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFhcHRHcm91cEVudHJ5OjpnZXRWZXJzaW9uTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCkKLXsKLSAgICBpZiAoc3RyY21wKG5hbWUsIGtXaWxkY2FyZE5hbWUpID09IDApIHsKLSAgICAgICAgaWYgKG91dCkgewotICAgICAgICAgICAgb3V0LT5zZGtWZXJzaW9uID0gb3V0LT5TREtWRVJTSU9OX0FOWTsKLSAgICAgICAgICAgIG91dC0+bWlub3JWZXJzaW9uID0gb3V0LT5NSU5PUlZFUlNJT05fQU5ZOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICgqbmFtZSAhPSAndicpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG5hbWUrKzsKLSAgICBjb25zdCBjaGFyKiBzID0gbmFtZTsKLSAgICB3aGlsZSAoKnMgPj0gJzAnICYmICpzIDw9ICc5JykgcysrOwotICAgIGlmIChzID09IG5hbWUgfHwgKnMgIT0gMCkgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZzggc2RrTmFtZShuYW1lLCBzLW5hbWUpOwotCi0gICAgaWYgKG91dCkgewotICAgICAgICBvdXQtPnNka1ZlcnNpb24gPSAodWludDE2X3QpYXRvaShzZGtOYW1lLnN0cmluZygpKTsKLSAgICAgICAgb3V0LT5taW5vclZlcnNpb24gPSAwOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgQWFwdEdyb3VwRW50cnk6OmNvbXBhcmUoY29uc3QgQWFwdEdyb3VwRW50cnkmIG8pIGNvbnN0Ci17Ci0gICAgaW50IHYgPSBtY2MuY29tcGFyZShvLm1jYyk7Ci0gICAgaWYgKHYgPT0gMCkgdiA9IG1uYy5jb21wYXJlKG8ubW5jKTsKLSAgICBpZiAodiA9PSAwKSB2ID0gbG9jYWxlLmNvbXBhcmUoby5sb2NhbGUpOwotICAgIGlmICh2ID09IDApIHYgPSBsYXlvdXREaXJlY3Rpb24uY29tcGFyZShvLmxheW91dERpcmVjdGlvbik7Ci0gICAgaWYgKHYgPT0gMCkgdiA9IHZlbmRvci5jb21wYXJlKG8udmVuZG9yKTsKLSAgICBpZiAodiA9PSAwKSB2ID0gc21hbGxlc3RTY3JlZW5XaWR0aERwLmNvbXBhcmUoby5zbWFsbGVzdFNjcmVlbldpZHRoRHApOwotICAgIGlmICh2ID09IDApIHYgPSBzY3JlZW5XaWR0aERwLmNvbXBhcmUoby5zY3JlZW5XaWR0aERwKTsKLSAgICBpZiAodiA9PSAwKSB2ID0gc2NyZWVuSGVpZ2h0RHAuY29tcGFyZShvLnNjcmVlbkhlaWdodERwKTsKLSAgICBpZiAodiA9PSAwKSB2ID0gc2NyZWVuTGF5b3V0U2l6ZS5jb21wYXJlKG8uc2NyZWVuTGF5b3V0U2l6ZSk7Ci0gICAgaWYgKHYgPT0gMCkgdiA9IHNjcmVlbkxheW91dExvbmcuY29tcGFyZShvLnNjcmVlbkxheW91dExvbmcpOwotICAgIGlmICh2ID09IDApIHYgPSBvcmllbnRhdGlvbi5jb21wYXJlKG8ub3JpZW50YXRpb24pOwotICAgIGlmICh2ID09IDApIHYgPSB1aU1vZGVUeXBlLmNvbXBhcmUoby51aU1vZGVUeXBlKTsKLSAgICBpZiAodiA9PSAwKSB2ID0gdWlNb2RlTmlnaHQuY29tcGFyZShvLnVpTW9kZU5pZ2h0KTsKLSAgICBpZiAodiA9PSAwKSB2ID0gZGVuc2l0eS5jb21wYXJlKG8uZGVuc2l0eSk7Ci0gICAgaWYgKHYgPT0gMCkgdiA9IHRvdWNoc2NyZWVuLmNvbXBhcmUoby50b3VjaHNjcmVlbik7Ci0gICAgaWYgKHYgPT0gMCkgdiA9IGtleXNIaWRkZW4uY29tcGFyZShvLmtleXNIaWRkZW4pOwotICAgIGlmICh2ID09IDApIHYgPSBrZXlib2FyZC5jb21wYXJlKG8ua2V5Ym9hcmQpOwotICAgIGlmICh2ID09IDApIHYgPSBuYXZIaWRkZW4uY29tcGFyZShvLm5hdkhpZGRlbik7Ci0gICAgaWYgKHYgPT0gMCkgdiA9IG5hdmlnYXRpb24uY29tcGFyZShvLm5hdmlnYXRpb24pOwotICAgIGlmICh2ID09IDApIHYgPSBzY3JlZW5TaXplLmNvbXBhcmUoby5zY3JlZW5TaXplKTsKLSAgICBpZiAodiA9PSAwKSB2ID0gdmVyc2lvbi5jb21wYXJlKG8udmVyc2lvbik7Ci0gICAgcmV0dXJuIHY7Ci19Ci0KLWNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgQWFwdEdyb3VwRW50cnk6OnRvUGFyYW1zKCkgY29uc3QKLXsKLSAgICBpZiAoIW1QYXJhbXNDaGFuZ2VkKSB7Ci0gICAgICAgIHJldHVybiBtUGFyYW1zOwotICAgIH0KLQotICAgIG1QYXJhbXNDaGFuZ2VkID0gZmFsc2U7Ci0gICAgUmVzVGFibGVfY29uZmlnJiBwYXJhbXMobVBhcmFtcyk7Ci0gICAgbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKLSAgICBnZXRNY2NOYW1lKG1jYy5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0TW5jTmFtZShtbmMuc3RyaW5nKCksICZwYXJhbXMpOwotICAgIGdldExvY2FsZU5hbWUobG9jYWxlLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXRMYXlvdXREaXJlY3Rpb25OYW1lKGxheW91dERpcmVjdGlvbi5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0U21hbGxlc3RTY3JlZW5XaWR0aERwTmFtZShzbWFsbGVzdFNjcmVlbldpZHRoRHAuc3RyaW5nKCksICZwYXJhbXMpOwotICAgIGdldFNjcmVlbldpZHRoRHBOYW1lKHNjcmVlbldpZHRoRHAuc3RyaW5nKCksICZwYXJhbXMpOwotICAgIGdldFNjcmVlbkhlaWdodERwTmFtZShzY3JlZW5IZWlnaHREcC5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0U2NyZWVuTGF5b3V0U2l6ZU5hbWUoc2NyZWVuTGF5b3V0U2l6ZS5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0U2NyZWVuTGF5b3V0TG9uZ05hbWUoc2NyZWVuTGF5b3V0TG9uZy5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0T3JpZW50YXRpb25OYW1lKG9yaWVudGF0aW9uLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXRVaU1vZGVUeXBlTmFtZSh1aU1vZGVUeXBlLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXRVaU1vZGVOaWdodE5hbWUodWlNb2RlTmlnaHQuc3RyaW5nKCksICZwYXJhbXMpOwotICAgIGdldERlbnNpdHlOYW1lKGRlbnNpdHkuc3RyaW5nKCksICZwYXJhbXMpOwotICAgIGdldFRvdWNoc2NyZWVuTmFtZSh0b3VjaHNjcmVlbi5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0S2V5c0hpZGRlbk5hbWUoa2V5c0hpZGRlbi5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0S2V5Ym9hcmROYW1lKGtleWJvYXJkLnN0cmluZygpLCAmcGFyYW1zKTsKLSAgICBnZXROYXZIaWRkZW5OYW1lKG5hdkhpZGRlbi5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0TmF2aWdhdGlvbk5hbWUobmF2aWdhdGlvbi5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0U2NyZWVuU2l6ZU5hbWUoc2NyZWVuU2l6ZS5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgZ2V0VmVyc2lvbk5hbWUodmVyc2lvbi5zdHJpbmcoKSwgJnBhcmFtcyk7Ci0gICAgCi0gICAgLy8gRml4IHVwIHZlcnNpb24gbnVtYmVyIGJhc2VkIG9uIHNwZWNpZmllZCBwYXJhbWV0ZXJzLgotICAgIGludCBtaW5TZGsgPSAwOwotICAgIGlmIChwYXJhbXMuc21hbGxlc3RTY3JlZW5XaWR0aERwICE9IFJlc1RhYmxlX2NvbmZpZzo6U0NSRUVOV0lEVEhfQU5ZCi0gICAgICAgICAgICB8fCBwYXJhbXMuc2NyZWVuV2lkdGhEcCAhPSBSZXNUYWJsZV9jb25maWc6OlNDUkVFTldJRFRIX0FOWQotICAgICAgICAgICAgfHwgcGFyYW1zLnNjcmVlbkhlaWdodERwICE9IFJlc1RhYmxlX2NvbmZpZzo6U0NSRUVOSEVJR0hUX0FOWSkgewotICAgICAgICBtaW5TZGsgPSBTREtfSE9ORVlDT01CX01SMjsKLSAgICB9IGVsc2UgaWYgKChwYXJhbXMudWlNb2RlJlJlc1RhYmxlX2NvbmZpZzo6TUFTS19VSV9NT0RFX1RZUEUpCi0gICAgICAgICAgICAgICAgIT0gUmVzVGFibGVfY29uZmlnOjpVSV9NT0RFX1RZUEVfQU5ZCi0gICAgICAgICAgICB8fCAgKHBhcmFtcy51aU1vZGUmUmVzVGFibGVfY29uZmlnOjpNQVNLX1VJX01PREVfTklHSFQpCi0gICAgICAgICAgICAgICAgIT0gUmVzVGFibGVfY29uZmlnOjpVSV9NT0RFX05JR0hUX0FOWSkgewotICAgICAgICBtaW5TZGsgPSBTREtfRlJPWU87Ci0gICAgfSBlbHNlIGlmICgocGFyYW1zLnNjcmVlbkxheW91dCZSZXNUYWJsZV9jb25maWc6Ok1BU0tfU0NSRUVOU0laRSkKLSAgICAgICAgICAgICAgICAhPSBSZXNUYWJsZV9jb25maWc6OlNDUkVFTlNJWkVfQU5ZCi0gICAgICAgICAgICB8fCAgKHBhcmFtcy5zY3JlZW5MYXlvdXQmUmVzVGFibGVfY29uZmlnOjpNQVNLX1NDUkVFTkxPTkcpCi0gICAgICAgICAgICAgICAgIT0gUmVzVGFibGVfY29uZmlnOjpTQ1JFRU5MT05HX0FOWQotICAgICAgICAgICAgfHwgcGFyYW1zLmRlbnNpdHkgIT0gUmVzVGFibGVfY29uZmlnOjpERU5TSVRZX0RFRkFVTFQpIHsKLSAgICAgICAgbWluU2RrID0gU0RLX0RPTlVUOwotICAgIH0KLSAgICAKLSAgICBpZiAobWluU2RrID4gcGFyYW1zLnNka1ZlcnNpb24pIHsKLSAgICAgICAgcGFyYW1zLnNka1ZlcnNpb24gPSBtaW5TZGs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwYXJhbXM7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotdm9pZCogQWFwdEZpbGU6OmVkaXREYXRhKHNpemVfdCBzaXplKQotewotICAgIGlmIChzaXplIDw9IG1CdWZmZXJTaXplKSB7Ci0gICAgICAgIG1EYXRhU2l6ZSA9IHNpemU7Ci0gICAgICAgIHJldHVybiBtRGF0YTsKLSAgICB9Ci0gICAgc2l6ZV90IGFsbG9jU2l6ZSA9IChzaXplKjMpLzI7Ci0gICAgdm9pZCogYnVmID0gcmVhbGxvYyhtRGF0YSwgYWxsb2NTaXplKTsKLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIG1EYXRhID0gYnVmOwotICAgIG1EYXRhU2l6ZSA9IHNpemU7Ci0gICAgbUJ1ZmZlclNpemUgPSBhbGxvY1NpemU7Ci0gICAgcmV0dXJuIGJ1ZjsKLX0KLQotdm9pZCogQWFwdEZpbGU6OmVkaXREYXRhKHNpemVfdCogb3V0U2l6ZSkKLXsKLSAgICBpZiAob3V0U2l6ZSkgewotICAgICAgICAqb3V0U2l6ZSA9IG1EYXRhU2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJuIG1EYXRhOwotfQotCi12b2lkKiBBYXB0RmlsZTo6cGFkRGF0YShzaXplX3Qgd29yZFNpemUpCi17Ci0gICAgY29uc3Qgc2l6ZV90IGV4dHJhID0gbURhdGFTaXplJXdvcmRTaXplOwotICAgIGlmIChleHRyYSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBtRGF0YTsKLSAgICB9Ci0KLSAgICBzaXplX3QgaW5pdGlhbCA9IG1EYXRhU2l6ZTsKLSAgICB2b2lkKiBkYXRhID0gZWRpdERhdGEoaW5pdGlhbCsod29yZFNpemUtZXh0cmEpKTsKLSAgICBpZiAoZGF0YSAhPSBOVUxMKSB7Ci0gICAgICAgIG1lbXNldCgoKHVpbnQ4X3QqKWRhdGEpICsgaW5pdGlhbCwgMCwgd29yZFNpemUtZXh0cmEpOwotICAgIH0KLSAgICByZXR1cm4gZGF0YTsKLX0KLQotc3RhdHVzX3QgQWFwdEZpbGU6OndyaXRlRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBzaXplX3QgZW5kID0gbURhdGFTaXplOwotICAgIHNpemVfdCB0b3RhbCA9IHNpemUgKyBlbmQ7Ci0gICAgdm9pZCogYnVmID0gZWRpdERhdGEodG90YWwpOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgbWVtY3B5KCgoY2hhciopYnVmKStlbmQsIGRhdGEsIHNpemUpOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotdm9pZCBBYXB0RmlsZTo6Y2xlYXJEYXRhKCkKLXsKLSAgICBpZiAobURhdGEgIT0gTlVMTCkgZnJlZShtRGF0YSk7Ci0gICAgbURhdGEgPSBOVUxMOwotICAgIG1EYXRhU2l6ZSA9IDA7Ci0gICAgbUJ1ZmZlclNpemUgPSAwOwotfQotCi1TdHJpbmc4IEFhcHRGaWxlOjpnZXRQcmludGFibGVTb3VyY2UoKSBjb25zdAotewotICAgIGlmIChoYXNEYXRhKCkpIHsKLSAgICAgICAgU3RyaW5nOCBuYW1lKG1Hcm91cEVudHJ5LnRvRGlyTmFtZShTdHJpbmc4KCkpKTsKLSAgICAgICAgbmFtZS5hcHBlbmRQYXRoKG1QYXRoKTsKLSAgICAgICAgbmFtZS5hcHBlbmQoIiAjZ2VuZXJhdGVkIik7Ci0gICAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLSAgICByZXR1cm4gbVNvdXJjZUZpbGU7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotc3RhdHVzX3QgQWFwdEdyb3VwOjphZGRGaWxlKGNvbnN0IHNwPEFhcHRGaWxlPiYgZmlsZSkKLXsKLSAgICBpZiAobUZpbGVzLmluZGV4T2ZLZXkoZmlsZS0+Z2V0R3JvdXBFbnRyeSgpKSA8IDApIHsKLSAgICAgICAgZmlsZS0+bVBhdGggPSBtUGF0aDsKLSAgICAgICAgbUZpbGVzLmFkZChmaWxlLT5nZXRHcm91cEVudHJ5KCksIGZpbGUpOwotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotCi0jaWYgMAotICAgIHByaW50ZigiRXJyb3IgYWRkaW5nIGZpbGUgJXM6IGdyb3VwICVzIGFscmVhZHkgZXhpc3RzIGluIGxlYWY9JXMgcGF0aD0lc1xuIiwKLSAgICAgICAgICAgIGZpbGUtPmdldFNvdXJjZUZpbGUoKS5zdHJpbmcoKSwKLSAgICAgICAgICAgIGZpbGUtPmdldEdyb3VwRW50cnkoKS50b0Rpck5hbWUoU3RyaW5nOCgpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgIG1MZWFmLnN0cmluZygpLCBtUGF0aC5zdHJpbmcoKSk7Ci0jZW5kaWYKLQotICAgIFNvdXJjZVBvcyhmaWxlLT5nZXRTb3VyY2VGaWxlKCksIC0xKS5lcnJvcigiRHVwbGljYXRlIGZpbGUuXG4lczogT3JpZ2luYWwgaXMgaGVyZS4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci19Ci0KLXZvaWQgQWFwdEdyb3VwOjpyZW1vdmVGaWxlKHNpemVfdCBpbmRleCkKLXsKLQltRmlsZXMucmVtb3ZlSXRlbXNBdChpbmRleCk7Ci19Ci0KLXZvaWQgQWFwdEdyb3VwOjpwcmludChjb25zdCBTdHJpbmc4JiBwcmVmaXgpIGNvbnN0Ci17Ci0gICAgcHJpbnRmKCIlcyVzXG4iLCBwcmVmaXguc3RyaW5nKCksIGdldFBhdGgoKS5zdHJpbmcoKSk7Ci0gICAgY29uc3Qgc2l6ZV90IE49bUZpbGVzLnNpemUoKTsKLSAgICBzaXplX3QgaTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgc3A8QWFwdEZpbGU+IGZpbGUgPSBtRmlsZXMudmFsdWVBdChpKTsKLSAgICAgICAgY29uc3QgQWFwdEdyb3VwRW50cnkmIGUgPSBmaWxlLT5nZXRHcm91cEVudHJ5KCk7Ci0gICAgICAgIGlmIChmaWxlLT5oYXNEYXRhKCkpIHsKLSAgICAgICAgICAgIHByaW50ZigiJXMgIEdlbjogKCVzKSAlZCBieXRlc1xuIiwgcHJlZml4LnN0cmluZygpLCBlLnRvRGlyTmFtZShTdHJpbmc4KCkpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAoaW50KWZpbGUtPmdldFNpemUoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludGYoIiVzICBTcmM6ICglcykgJXNcbiIsIHByZWZpeC5zdHJpbmcoKSwgZS50b0Rpck5hbWUoU3RyaW5nOCgpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgZmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIC8vcHJpbnRmKCIlcyAgRmlsZSBHcm91cCBFbnRyeTogJXNcbiIsIHByZWZpeC5zdHJpbmcoKSwKLSAgICAgICAgLy8gICAgICAgIGZpbGUtPmdldEdyb3VwRW50cnkoKS50b0Rpck5hbWUoU3RyaW5nOCgpKS5zdHJpbmcoKSk7Ci0gICAgfQotfQotCi1TdHJpbmc4IEFhcHRHcm91cDo6Z2V0UHJpbnRhYmxlU291cmNlKCkgY29uc3QKLXsKLSAgICBpZiAobUZpbGVzLnNpemUoKSA+IDApIHsKLSAgICAgICAgLy8gQXJiaXRyYXJpbHkgcHVsbCB0aGUgZmlyc3Qgc291cmNlIGZpbGUgb3V0IG9mIHRoZSBsaXN0LgotICAgICAgICByZXR1cm4gbUZpbGVzLnZhbHVlQXQoMCktPmdldFByaW50YWJsZVNvdXJjZSgpOwotICAgIH0KLQotICAgIC8vIFNob3VsZCBuZXZlciBoaXQgdGhpcyBjYXNlLCBidXQgdG8gYmUgc2FmZS4uLgotICAgIHJldHVybiBnZXRQYXRoKCk7Ci0KLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0dXNfdCBBYXB0RGlyOjphZGRGaWxlKGNvbnN0IFN0cmluZzgmIG5hbWUsIGNvbnN0IHNwPEFhcHRHcm91cD4mIGZpbGUpCi17Ci0gICAgaWYgKG1GaWxlcy5pbmRleE9mS2V5KG5hbWUpID49IDApIHsKLSAgICAgICAgcmV0dXJuIEFMUkVBRFlfRVhJU1RTOwotICAgIH0KLSAgICBtRmlsZXMuYWRkKG5hbWUsIGZpbGUpOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgQWFwdERpcjo6YWRkRGlyKGNvbnN0IFN0cmluZzgmIG5hbWUsIGNvbnN0IHNwPEFhcHREaXI+JiBkaXIpCi17Ci0gICAgaWYgKG1EaXJzLmluZGV4T2ZLZXkobmFtZSkgPj0gMCkgewotICAgICAgICByZXR1cm4gQUxSRUFEWV9FWElTVFM7Ci0gICAgfQotICAgIG1EaXJzLmFkZChuYW1lLCBkaXIpOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3A8QWFwdERpcj4gQWFwdERpcjo6bWFrZURpcihjb25zdCBTdHJpbmc4JiBwYXRoKQotewotICAgIFN0cmluZzggbmFtZTsKLSAgICBTdHJpbmc4IHJlbWFpbiA9IHBhdGg7Ci0KLSAgICBzcDxBYXB0RGlyPiBzdWJkaXIgPSB0aGlzOwotICAgIHdoaWxlIChuYW1lID0gcmVtYWluLndhbGtQYXRoKCZyZW1haW4pLCByZW1haW4gIT0gIiIpIHsKLSAgICAgICAgc3ViZGlyID0gc3ViZGlyLT5tYWtlRGlyKG5hbWUpOwotICAgIH0KLQotICAgIHNzaXplX3QgaSA9IHN1YmRpci0+bURpcnMuaW5kZXhPZktleShuYW1lKTsKLSAgICBpZiAoaSA+PSAwKSB7Ci0gICAgICAgIHJldHVybiBzdWJkaXItPm1EaXJzLnZhbHVlQXQoaSk7Ci0gICAgfQotICAgIHNwPEFhcHREaXI+IGRpciA9IG5ldyBBYXB0RGlyKG5hbWUsIHN1YmRpci0+bVBhdGguYXBwZW5kUGF0aENvcHkobmFtZSkpOwotICAgIHN1YmRpci0+bURpcnMuYWRkKG5hbWUsIGRpcik7Ci0gICAgcmV0dXJuIGRpcjsKLX0KLQotdm9pZCBBYXB0RGlyOjpyZW1vdmVGaWxlKGNvbnN0IFN0cmluZzgmIG5hbWUpCi17Ci0gICAgbUZpbGVzLnJlbW92ZUl0ZW0obmFtZSk7Ci19Ci0KLXZvaWQgQWFwdERpcjo6cmVtb3ZlRGlyKGNvbnN0IFN0cmluZzgmIG5hbWUpCi17Ci0gICAgbURpcnMucmVtb3ZlSXRlbShuYW1lKTsKLX0KLQotc3RhdHVzX3QgQWFwdERpcjo6YWRkTGVhZkZpbGUoY29uc3QgU3RyaW5nOCYgbGVhZk5hbWUsIGNvbnN0IHNwPEFhcHRGaWxlPiYgZmlsZSkKLXsKLSAgICBzcDxBYXB0R3JvdXA+IGdyb3VwOwotICAgIGlmIChtRmlsZXMuaW5kZXhPZktleShsZWFmTmFtZSkgPj0gMCkgewotICAgICAgICBncm91cCA9IG1GaWxlcy52YWx1ZUZvcihsZWFmTmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZ3JvdXAgPSBuZXcgQWFwdEdyb3VwKGxlYWZOYW1lLCBtUGF0aC5hcHBlbmRQYXRoQ29weShsZWFmTmFtZSkpOwotICAgICAgICBtRmlsZXMuYWRkKGxlYWZOYW1lLCBncm91cCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdyb3VwLT5hZGRGaWxlKGZpbGUpOwotfQotCi1zc2l6ZV90IEFhcHREaXI6OnNsdXJwRnVsbFRyZWUoQnVuZGxlKiBidW5kbGUsIGNvbnN0IFN0cmluZzgmIHNyY0RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBYXB0R3JvdXBFbnRyeSYga2luZCwgY29uc3QgU3RyaW5nOCYgcmVzVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxGaWxlUGF0aFN0b3JlPiYgZnVsbFJlc1BhdGhzKQotewotICAgIFZlY3RvcjxTdHJpbmc4PiBmaWxlTmFtZXM7Ci0gICAgewotICAgICAgICBESVIqIGRpciA9IE5VTEw7Ci0KLSAgICAgICAgZGlyID0gb3BlbmRpcihzcmNEaXIuc3RyaW5nKCkpOwotICAgICAgICBpZiAoZGlyID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG9wZW5kaXIoJXMpOiAlc1xuIiwgc3JjRGlyLnN0cmluZygpLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBTbHVycCB0aGUgZmlsZW5hbWVzIG91dCBvZiB0aGUgZGlyZWN0b3J5LgotICAgICAgICAgKi8KLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQqIGVudHJ5OwotCi0gICAgICAgICAgICBlbnRyeSA9IHJlYWRkaXIoZGlyKTsKLSAgICAgICAgICAgIGlmIChlbnRyeSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAoaXNIaWRkZW4oc3JjRGlyLnN0cmluZygpLCBlbnRyeS0+ZF9uYW1lKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU3RyaW5nOCBuYW1lKGVudHJ5LT5kX25hbWUpOwotICAgICAgICAgICAgZmlsZU5hbWVzLmFkZChuYW1lKTsKLSAgICAgICAgICAgIC8vIEFkZCBmdWxseSBxdWFsaWZpZWQgcGF0aCBmb3IgZGVwZW5kZW5jeSBwdXJwb3NlcwotICAgICAgICAgICAgLy8gaWYgd2UncmUgY29sbGVjdGluZyB0aGVtCi0gICAgICAgICAgICBpZiAoZnVsbFJlc1BhdGhzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmdWxsUmVzUGF0aHMtPmFkZChzcmNEaXIuYXBwZW5kUGF0aENvcHkobmFtZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNsb3NlZGlyKGRpcik7Ci0gICAgfQotCi0gICAgc3NpemVfdCBjb3VudCA9IDA7Ci0KLSAgICAvKgotICAgICAqIFN0YXNoIGF3YXkgdGhlIGZpbGVzIGFuZCByZWN1cnNpdmVseSBkZXNjZW5kIGludG8gc3ViZGlyZWN0b3JpZXMuCi0gICAgICovCi0gICAgY29uc3Qgc2l6ZV90IE4gPSBmaWxlTmFtZXMuc2l6ZSgpOwotICAgIHNpemVfdCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspIHsKLSAgICAgICAgU3RyaW5nOCBwYXRoTmFtZShzcmNEaXIpOwotICAgICAgICBGaWxlVHlwZSB0eXBlOwotCi0gICAgICAgIHBhdGhOYW1lLmFwcGVuZFBhdGgoZmlsZU5hbWVzW2ldLnN0cmluZygpKTsKLSAgICAgICAgdHlwZSA9IGdldEZpbGVUeXBlKHBhdGhOYW1lLnN0cmluZygpKTsKLSAgICAgICAgaWYgKHR5cGUgPT0ga0ZpbGVUeXBlRGlyZWN0b3J5KSB7Ci0gICAgICAgICAgICBzcDxBYXB0RGlyPiBzdWJkaXI7Ci0gICAgICAgICAgICBib29sIG5vdEFkZGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobURpcnMuaW5kZXhPZktleShmaWxlTmFtZXNbaV0pID49IDApIHsKLSAgICAgICAgICAgICAgICBzdWJkaXIgPSBtRGlycy52YWx1ZUZvcihmaWxlTmFtZXNbaV0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdWJkaXIgPSBuZXcgQWFwdERpcihmaWxlTmFtZXNbaV0sIG1QYXRoLmFwcGVuZFBhdGhDb3B5KGZpbGVOYW1lc1tpXSkpOwotICAgICAgICAgICAgICAgIG5vdEFkZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNzaXplX3QgcmVzID0gc3ViZGlyLT5zbHVycEZ1bGxUcmVlKGJ1bmRsZSwgcGF0aE5hbWUsIGtpbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNUeXBlLCBmdWxsUmVzUGF0aHMpOwotICAgICAgICAgICAgaWYgKHJlcyA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXMgPiAwICYmIG5vdEFkZGVkKSB7Ci0gICAgICAgICAgICAgICAgbURpcnMuYWRkKGZpbGVOYW1lc1tpXSwgc3ViZGlyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvdW50ICs9IHJlczsKLSAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IGtGaWxlVHlwZVJlZ3VsYXIpIHsKLSAgICAgICAgICAgIHNwPEFhcHRGaWxlPiBmaWxlID0gbmV3IEFhcHRGaWxlKHBhdGhOYW1lLCBraW5kLCByZXNUeXBlKTsKLSAgICAgICAgICAgIHN0YXR1c190IGVyciA9IGFkZExlYWZGaWxlKGZpbGVOYW1lc1tpXSwgZmlsZSk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY291bnQrKzsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKQotICAgICAgICAgICAgICAgIHByaW50ZigiICAgKGlnbm9yaW5nIG5vbi1maWxlL2RpciAnJXMnKVxuIiwgcGF0aE5hbWUuc3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotfQotCi1zdGF0dXNfdCBBYXB0RGlyOjp2YWxpZGF0ZSgpIGNvbnN0Ci17Ci0gICAgY29uc3Qgc2l6ZV90IE5GID0gbUZpbGVzLnNpemUoKTsKLSAgICBjb25zdCBzaXplX3QgTkQgPSBtRGlycy5zaXplKCk7Ci0gICAgc2l6ZV90IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IE5GOyBpKyspIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZUZpbGVOYW1lKG1GaWxlcy52YWx1ZUF0KGkpLT5nZXRMZWFmKCkuc3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICBTb3VyY2VQb3MobUZpbGVzLnZhbHVlQXQoaSktPmdldFByaW50YWJsZVNvdXJjZSgpLCAtMSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGZpbGVuYW1lLiAgVW5hYmxlIHRvIGFkZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZV90IGo7Ci0gICAgICAgIGZvciAoaiA9IGkrMTsgaiA8IE5GOyBqKyspIHsKLSAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKG1GaWxlcy52YWx1ZUF0KGkpLT5nZXRMZWFmKCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtRmlsZXMudmFsdWVBdChqKS0+Z2V0TGVhZigpLnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zKG1GaWxlcy52YWx1ZUF0KGkpLT5nZXRQcmludGFibGVTb3VyY2UoKSwgLTEpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGUgaXMgY2FzZS1pbnNlbnNpdGl2ZSBlcXVpdmFsZW50IHRvOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtRmlsZXMudmFsdWVBdChqKS0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUT0RPOiBpZiAiLmd6IiwgY2hlY2sgZm9yIG5vbi0uZ3o7IGlmIG5vbi0sIGNoZWNrIGZvciAiLmd6IgotICAgICAgICAgICAgLy8gKHRoaXMgaXMgbW9zdGx5IGNhdWdodCBieSB0aGUgIm1hcmtlZCIgc3R1ZmYsIGJlbG93KQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChqID0gMDsgaiA8IE5EOyBqKyspIHsKLSAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKG1GaWxlcy52YWx1ZUF0KGkpLT5nZXRMZWFmKCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtRGlycy52YWx1ZUF0KGopLT5nZXRMZWFmKCkuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3MobUZpbGVzLnZhbHVlQXQoaSktPmdldFByaW50YWJsZVNvdXJjZSgpLCAtMSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiRmlsZSBjb25mbGljdHMgd2l0aCBkaXIgZnJvbTogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgbURpcnMudmFsdWVBdChqKS0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IE5EOyBpKyspIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZUZpbGVOYW1lKG1EaXJzLnZhbHVlQXQoaSktPmdldExlYWYoKS5zdHJpbmcoKSkpIHsKLSAgICAgICAgICAgIFNvdXJjZVBvcyhtRGlycy52YWx1ZUF0KGkpLT5nZXRQcmludGFibGVTb3VyY2UoKSwgLTEpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBkaXJlY3RvcnkgbmFtZSwgdW5hYmxlIHRvIGFkZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZV90IGo7Ci0gICAgICAgIGZvciAoaiA9IGkrMTsgaiA8IE5EOyBqKyspIHsKLSAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKG1EaXJzLnZhbHVlQXQoaSktPmdldExlYWYoKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EaXJzLnZhbHVlQXQoaiktPmdldExlYWYoKS5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhtRGlycy52YWx1ZUF0KGkpLT5nZXRQcmludGFibGVTb3VyY2UoKSwgLTEpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgIkRpcmVjdG9yeSBpcyBjYXNlLWluc2Vuc2l0aXZlIGVxdWl2YWxlbnQgdG86ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EaXJzLnZhbHVlQXQoaiktPmdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHN0YXR1c190IGVyciA9IG1EaXJzLnZhbHVlQXQoaSktPnZhbGlkYXRlKCk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXZvaWQgQWFwdERpcjo6cHJpbnQoY29uc3QgU3RyaW5nOCYgcHJlZml4KSBjb25zdAotewotICAgIGNvbnN0IHNpemVfdCBORD1nZXREaXJzKCkuc2l6ZSgpOwotICAgIHNpemVfdCBpOwotICAgIGZvciAoaT0wOyBpPE5EOyBpKyspIHsKLSAgICAgICAgZ2V0RGlycygpLnZhbHVlQXQoaSktPnByaW50KHByZWZpeCk7Ci0gICAgfQotCi0gICAgY29uc3Qgc2l6ZV90IE5GPWdldEZpbGVzKCkuc2l6ZSgpOwotICAgIGZvciAoaT0wOyBpPE5GOyBpKyspIHsKLSAgICAgICAgZ2V0RmlsZXMoKS52YWx1ZUF0KGkpLT5wcmludChwcmVmaXgpOwotICAgIH0KLX0KLQotU3RyaW5nOCBBYXB0RGlyOjpnZXRQcmludGFibGVTb3VyY2UoKSBjb25zdAotewotICAgIGlmIChtRmlsZXMuc2l6ZSgpID4gMCkgewotICAgICAgICAvLyBBcmJpdHJhcmlseSBwdWxsIHRoZSBmaXJzdCBmaWxlIG91dCBvZiB0aGUgbGlzdCBhcyB0aGUgc291cmNlIGRpci4KLSAgICAgICAgcmV0dXJuIG1GaWxlcy52YWx1ZUF0KDApLT5nZXRQcmludGFibGVTb3VyY2UoKS5nZXRQYXRoRGlyKCk7Ci0gICAgfQotICAgIGlmIChtRGlycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIC8vIE9yIGFyYml0cmFyaWx5IHB1bGwgdGhlIGZpcnN0IGRpciBvdXQgb2YgdGhlIGxpc3QgYXMgdGhlIHNvdXJjZSBkaXIuCi0gICAgICAgIHJldHVybiBtRGlycy52YWx1ZUF0KDApLT5nZXRQcmludGFibGVTb3VyY2UoKS5nZXRQYXRoRGlyKCk7Ci0gICAgfQotCi0gICAgLy8gU2hvdWxkIG5ldmVyIGhpdCB0aGlzIGNhc2UsIGJ1dCB0byBiZSBzYWZlLi4uCi0gICAgcmV0dXJuIG1QYXRoOwotCi19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotc3RhdHVzX3QgQWFwdFN5bWJvbHM6OmFwcGx5SmF2YVN5bWJvbHMoY29uc3Qgc3A8QWFwdFN5bWJvbHM+JiBqYXZhU3ltYm9scykKLXsKLSAgICBzdGF0dXNfdCBlcnIgPSBOT19FUlJPUjsKLSAgICBzaXplX3QgTiA9IGphdmFTeW1ib2xzLT5tU3ltYm9scy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBjb25zdCBTdHJpbmc4JiBuYW1lID0gamF2YVN5bWJvbHMtPm1TeW1ib2xzLmtleUF0KGkpOwotICAgICAgICBjb25zdCBBYXB0U3ltYm9sRW50cnkmIGVudHJ5ID0gamF2YVN5bWJvbHMtPm1TeW1ib2xzLnZhbHVlQXQoaSk7Ci0gICAgICAgIHNzaXplX3QgcG9zID0gbVN5bWJvbHMuaW5kZXhPZktleShuYW1lKTsKLSAgICAgICAgaWYgKHBvcyA8IDApIHsKLSAgICAgICAgICAgIGVudHJ5LnNvdXJjZVBvcy5lcnJvcigiU3ltYm9sICclcycgZGVjbGFyZWQgd2l0aCA8amF2YS1zeW1ib2w+IG5vdCBkZWZpbmVkXG4iLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgIGVyciA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAvL3ByaW50ZigiKioqKiBzZXR0aW5nIHN5bWJvbCAjJWQvJWQgJXMgdG8gaXNKYXZhU3ltYm9sPSVkXG4iLAotICAgICAgICAvLyAgICAgICAgaSwgTiwgbmFtZS5zdHJpbmcoKSwgZW50cnkuaXNKYXZhU3ltYm9sID8gMSA6IDApOwotICAgICAgICBtU3ltYm9scy5lZGl0VmFsdWVBdChwb3MpLmlzSmF2YVN5bWJvbCA9IGVudHJ5LmlzSmF2YVN5bWJvbDsKLSAgICB9Ci0KLSAgICBOID0gamF2YVN5bWJvbHMtPm1OZXN0ZWRTeW1ib2xzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZzgmIG5hbWUgPSBqYXZhU3ltYm9scy0+bU5lc3RlZFN5bWJvbHMua2V5QXQoaSk7Ci0gICAgICAgIGNvbnN0IHNwPEFhcHRTeW1ib2xzPiYgc3ltYm9scyA9IGphdmFTeW1ib2xzLT5tTmVzdGVkU3ltYm9scy52YWx1ZUF0KGkpOwotICAgICAgICBzc2l6ZV90IHBvcyA9IG1OZXN0ZWRTeW1ib2xzLmluZGV4T2ZLZXkobmFtZSk7Ci0gICAgICAgIGlmIChwb3MgPCAwKSB7Ci0gICAgICAgICAgICBTb3VyY2VQb3MgcG9zOwotICAgICAgICAgICAgcG9zLmVycm9yKCJKYXZhIHN5bWJvbCBkaXIgJXMgbm90IGRlZmluZWRcbiIsIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgZXJyID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vcHJpbnRmKCIqKioqIGFwcGx5aW5nIGphdmEgc3ltYm9scyBpbiBkaXIgJXNcbiIsIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICBzdGF0dXNfdCBteWVyciA9IG1OZXN0ZWRTeW1ib2xzLnZhbHVlQXQocG9zKS0+YXBwbHlKYXZhU3ltYm9scyhzeW1ib2xzKTsKLSAgICAgICAgaWYgKG15ZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBlcnIgPSBteWVycjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQWFwdEFzc2V0czo6QWFwdEFzc2V0cygpCi0gICAgOiBBYXB0RGlyKFN0cmluZzgoKSwgU3RyaW5nOCgpKSwKLSAgICAgIG1DaGFuZ2VkKGZhbHNlKSwgbUhhdmVJbmNsdWRlZEFzc2V0cyhmYWxzZSksIG1SZXMoTlVMTCkKLXsKLX0KLQotY29uc3QgU29ydGVkVmVjdG9yPEFhcHRHcm91cEVudHJ5PiYgQWFwdEFzc2V0czo6Z2V0R3JvdXBFbnRyaWVzKCkgY29uc3QgewotICAgIGlmIChtQ2hhbmdlZCkgewotICAgIH0KLSAgICByZXR1cm4gbUdyb3VwRW50cmllczsKLX0KLQotc3RhdHVzX3QgQWFwdEFzc2V0czo6YWRkRmlsZShjb25zdCBTdHJpbmc4JiBuYW1lLCBjb25zdCBzcDxBYXB0R3JvdXA+JiBmaWxlKQotewotICAgIG1DaGFuZ2VkID0gdHJ1ZTsKLSAgICByZXR1cm4gQWFwdERpcjo6YWRkRmlsZShuYW1lLCBmaWxlKTsKLX0KLQotc3A8QWFwdEZpbGU+IEFhcHRBc3NldHM6OmFkZEZpbGUoCi0gICAgICAgIGNvbnN0IFN0cmluZzgmIGZpbGVQYXRoLCBjb25zdCBBYXB0R3JvdXBFbnRyeSYgZW50cnksCi0gICAgICAgIGNvbnN0IFN0cmluZzgmIHNyY0Rpciwgc3A8QWFwdEdyb3VwPiogb3V0R3JvdXAsCi0gICAgICAgIGNvbnN0IFN0cmluZzgmIHJlc1R5cGUpCi17Ci0gICAgc3A8QWFwdERpcj4gZGlyID0gdGhpczsKLSAgICBzcDxBYXB0R3JvdXA+IGdyb3VwOwotICAgIHNwPEFhcHRGaWxlPiBmaWxlOwotICAgIFN0cmluZzggcm9vdCwgcmVtYWluKGZpbGVQYXRoKSwgcGFydGlhbFBhdGg7Ci0gICAgd2hpbGUgKHJlbWFpbi5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgcm9vdCA9IHJlbWFpbi53YWxrUGF0aCgmcmVtYWluKTsKLSAgICAgICAgcGFydGlhbFBhdGguYXBwZW5kUGF0aChyb290KTsKLQotICAgICAgICBjb25zdCBTdHJpbmc4IHJvb3RTdHIocm9vdCk7Ci0KLSAgICAgICAgaWYgKHJlbWFpbi5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICAgICAgICBzc2l6ZV90IGkgPSBkaXItPmdldEZpbGVzKCkuaW5kZXhPZktleShyb290U3RyKTsKLSAgICAgICAgICAgIGlmIChpID49IDApIHsKLSAgICAgICAgICAgICAgICBncm91cCA9IGRpci0+Z2V0RmlsZXMoKS52YWx1ZUF0KGkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBncm91cCA9IG5ldyBBYXB0R3JvdXAocm9vdFN0ciwgZmlsZVBhdGgpOwotICAgICAgICAgICAgICAgIHN0YXR1c190IHJlcyA9IGRpci0+YWRkRmlsZShyb290U3RyLCBncm91cCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcyAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaWxlID0gbmV3IEFhcHRGaWxlKHNyY0Rpci5hcHBlbmRQYXRoQ29weShmaWxlUGF0aCksIGVudHJ5LCByZXNUeXBlKTsKLSAgICAgICAgICAgIHN0YXR1c190IHJlcyA9IGdyb3VwLT5hZGRGaWxlKGZpbGUpOwotICAgICAgICAgICAgaWYgKHJlcyAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNzaXplX3QgaSA9IGRpci0+Z2V0RGlycygpLmluZGV4T2ZLZXkocm9vdFN0cik7Ci0gICAgICAgICAgICBpZiAoaSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgZGlyID0gZGlyLT5nZXREaXJzKCkudmFsdWVBdChpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3A8QWFwdERpcj4gc3ViZGlyID0gbmV3IEFhcHREaXIocm9vdFN0ciwgcGFydGlhbFBhdGgpOwotICAgICAgICAgICAgICAgIHN0YXR1c190IHJlcyA9IGRpci0+YWRkRGlyKHJvb3RTdHIsIHN1YmRpcik7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcyAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGlyID0gc3ViZGlyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgbUdyb3VwRW50cmllcy5hZGQoZW50cnkpOwotICAgIGlmIChvdXRHcm91cCkgKm91dEdyb3VwID0gZ3JvdXA7Ci0gICAgcmV0dXJuIGZpbGU7Ci19Ci0KLXZvaWQgQWFwdEFzc2V0czo6YWRkUmVzb3VyY2UoY29uc3QgU3RyaW5nOCYgbGVhZk5hbWUsIGNvbnN0IFN0cmluZzgmIHBhdGgsCi0gICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlLCBjb25zdCBTdHJpbmc4JiByZXNUeXBlKQotewotICAgIHNwPEFhcHREaXI+IHJlcyA9IEFhcHREaXI6Om1ha2VEaXIoa1Jlc1N0cmluZyk7Ci0gICAgU3RyaW5nOCBkaXJuYW1lID0gZmlsZS0+Z2V0R3JvdXBFbnRyeSgpLnRvRGlyTmFtZShyZXNUeXBlKTsKLSAgICBzcDxBYXB0RGlyPiBzdWJkaXIgPSByZXMtPm1ha2VEaXIoZGlybmFtZSk7Ci0gICAgc3A8QWFwdEdyb3VwPiBncnIgPSBuZXcgQWFwdEdyb3VwKGxlYWZOYW1lLCBwYXRoKTsKLSAgICBncnItPmFkZEZpbGUoZmlsZSk7Ci0KLSAgICBzdWJkaXItPmFkZEZpbGUobGVhZk5hbWUsIGdycik7Ci19Ci0KLQotc3NpemVfdCBBYXB0QXNzZXRzOjpzbHVycEZyb21BcmdzKEJ1bmRsZSogYnVuZGxlKQotewotICAgIGludCBjb3VudDsKLSAgICBpbnQgdG90YWxDb3VudCA9IDA7Ci0gICAgRmlsZVR5cGUgdHlwZTsKLSAgICBjb25zdCBWZWN0b3I8Y29uc3QgY2hhciAqPiYgcmVzRGlycyA9IGJ1bmRsZS0+Z2V0UmVzb3VyY2VTb3VyY2VEaXJzKCk7Ci0gICAgY29uc3Qgc2l6ZV90IGRpckNvdW50ID1yZXNEaXJzLnNpemUoKTsKLSAgICBzcDxBYXB0QXNzZXRzPiBjdXJyZW50ID0gdGhpczsKLQotICAgIGNvbnN0IGludCBOID0gYnVuZGxlLT5nZXRGaWxlU3BlY0NvdW50KCk7Ci0KLSAgICAvKgotICAgICAqIElmIGEgcGFja2FnZSBtYW5pZmVzdCB3YXMgc3BlY2lmaWVkLCBpbmNsdWRlIHRoYXQgZmlyc3QuCi0gICAgICovCi0gICAgaWYgKGJ1bmRsZS0+Z2V0QW5kcm9pZE1hbmlmZXN0RmlsZSgpICE9IE5VTEwpIHsKLSAgICAgICAgLy8gcGxhY2UgYXQgcm9vdCBvZiB6aXAuCi0gICAgICAgIFN0cmluZzggc3JjRmlsZShidW5kbGUtPmdldEFuZHJvaWRNYW5pZmVzdEZpbGUoKSk7Ci0gICAgICAgIGFkZEZpbGUoc3JjRmlsZS5nZXRQYXRoTGVhZigpLCBBYXB0R3JvdXBFbnRyeSgpLCBzcmNGaWxlLmdldFBhdGhEaXIoKSwKLSAgICAgICAgICAgICAgICBOVUxMLCBTdHJpbmc4KCkpOwotICAgICAgICB0b3RhbENvdW50Kys7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBJZiBhIGRpcmVjdG9yeSBvZiBjdXN0b20gYXNzZXRzIHdhcyBzdXBwbGllZCwgc2x1cnAgJ2VtIHVwLgotICAgICAqLwotICAgIGlmIChidW5kbGUtPmdldEFzc2V0U291cmNlRGlyKCkpIHsKLSAgICAgICAgY29uc3QgY2hhciogYXNzZXREaXIgPSBidW5kbGUtPmdldEFzc2V0U291cmNlRGlyKCk7Ci0KLSAgICAgICAgRmlsZVR5cGUgdHlwZSA9IGdldEZpbGVUeXBlKGFzc2V0RGlyKTsKLSAgICAgICAgaWYgKHR5cGUgPT0ga0ZpbGVUeXBlTm9uZXhpc3RlbnQpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGFzc2V0IGRpcmVjdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0XG4iLCBhc3NldERpcik7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBrRmlsZVR5cGVEaXJlY3RvcnkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICclcycgaXMgbm90IGEgZGlyZWN0b3J5XG4iLCBhc3NldERpcik7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZzggYXNzZXRSb290KGFzc2V0RGlyKTsKLSAgICAgICAgc3A8QWFwdERpcj4gYXNzZXRBYXB0RGlyID0gbWFrZURpcihTdHJpbmc4KGtBc3NldERpcikpOwotICAgICAgICBBYXB0R3JvdXBFbnRyeSBncm91cDsKLSAgICAgICAgY291bnQgPSBhc3NldEFhcHREaXItPnNsdXJwRnVsbFRyZWUoYnVuZGxlLCBhc3NldFJvb3QsIGdyb3VwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KCksIG1GdWxsQXNzZXRQYXRocyk7Ci0gICAgICAgIGlmIChjb3VudCA8IDApIHsKLSAgICAgICAgICAgIHRvdGFsQ291bnQgPSBjb3VudDsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoY291bnQgPiAwKSB7Ci0gICAgICAgICAgICBtR3JvdXBFbnRyaWVzLmFkZChncm91cCk7Ci0gICAgICAgIH0KLSAgICAgICAgdG90YWxDb3VudCArPSBjb3VudDsKLQotICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpCi0gICAgICAgICAgICBwcmludGYoIkZvdW5kICVkIGN1c3RvbSBhc3NldCBmaWxlJXMgaW4gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgY291bnQsIChjb3VudD09MSkgPyAiIiA6ICJzIiwgYXNzZXREaXIpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogSWYgYSBkaXJlY3Rvcnkgb2YgcmVzb3VyY2Utc3BlY2lmaWMgYXNzZXRzIHdhcyBzdXBwbGllZCwgc2x1cnAgJ2VtIHVwLgotICAgICAqLwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxkaXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnJlcyA9IHJlc0RpcnNbaV07Ci0gICAgICAgIGlmIChyZXMpIHsKLSAgICAgICAgICAgIHR5cGUgPSBnZXRGaWxlVHlwZShyZXMpOwotICAgICAgICAgICAgaWYgKHR5cGUgPT0ga0ZpbGVUeXBlTm9uZXhpc3RlbnQpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiByZXNvdXJjZSBkaXJlY3RvcnkgJyVzJyBkb2VzIG5vdCBleGlzdFxuIiwgcmVzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0eXBlID09IGtGaWxlVHlwZURpcmVjdG9yeSkgewotICAgICAgICAgICAgICAgIGlmIChpPjApIHsKLSAgICAgICAgICAgICAgICAgICAgc3A8QWFwdEFzc2V0cz4gbmV4dE92ZXJsYXkgPSBuZXcgQWFwdEFzc2V0cygpOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5zZXRPdmVybGF5KG5leHRPdmVybGF5KTsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IG5leHRPdmVybGF5OwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5zZXRGdWxsUmVzUGF0aHMobUZ1bGxSZXNQYXRocyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvdW50ID0gY3VycmVudC0+c2x1cnBSZXNvdXJjZVRyZWUoYnVuZGxlLCBTdHJpbmc4KHJlcykpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkgewotICAgICAgICAgICAgICAgICAgICB0b3RhbENvdW50ID0gY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdG90YWxDb3VudCArPSBjb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICclcycgaXMgbm90IGEgZGlyZWN0b3J5XG4iLCByZXMpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgIH0KLSAgICAvKgotICAgICAqIE5vdyBkbyBhbnkgYWRkaXRpb25hbCByYXcgZmlsZXMuCi0gICAgICovCi0gICAgZm9yIChpbnQgYXJnPTA7IGFyZzxOOyBhcmcrKykgewotICAgICAgICBjb25zdCBjaGFyKiBhc3NldERpciA9IGJ1bmRsZS0+Z2V0RmlsZVNwZWNFbnRyeShhcmcpOwotCi0gICAgICAgIEZpbGVUeXBlIHR5cGUgPSBnZXRGaWxlVHlwZShhc3NldERpcik7Ci0gICAgICAgIGlmICh0eXBlID09IGtGaWxlVHlwZU5vbmV4aXN0ZW50KSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBpbnB1dCBkaXJlY3RvcnkgJyVzJyBkb2VzIG5vdCBleGlzdFxuIiwgYXNzZXREaXIpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGUgIT0ga0ZpbGVUeXBlRGlyZWN0b3J5KSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeVxuIiwgYXNzZXREaXIpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmc4IGFzc2V0Um9vdChhc3NldERpcik7Ci0KLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKQotICAgICAgICAgICAgcHJpbnRmKCJQcm9jZXNzaW5nIHJhdyBkaXIgJyVzJ1xuIiwgKGNvbnN0IGNoYXIqKSBhc3NldERpcik7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogRG8gYSByZWN1cnNpdmUgdHJhdmVyc2FsIG9mIHN1YmRpciB0cmVlLiAgV2UgZG9uJ3QgbWFrZSBhbnkKLSAgICAgICAgICogZ3VhcmFudGVlcyBhYm91dCBvcmRlcmluZywgc28gd2UncmUgb2theSB3aXRoIGFuIGlub3JkZXIgc2VhcmNoCi0gICAgICAgICAqIHVzaW5nIHdoYXRldmVyIG9yZGVyIHRoZSBPUyBoYXBwZW5zIHRvIGhhbmQgYmFjayB0byB1cy4KLSAgICAgICAgICovCi0gICAgICAgIGNvdW50ID0gc2x1cnBGdWxsVHJlZShidW5kbGUsIGFzc2V0Um9vdCwgQWFwdEdyb3VwRW50cnkoKSwgU3RyaW5nOCgpLCBtRnVsbEFzc2V0UGF0aHMpOwotICAgICAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgICAgICAvKiBmYWlsdXJlOyByZXBvcnQgZXJyb3IgYW5kIHJlbW92ZSBhcmNoaXZlICovCi0gICAgICAgICAgICB0b3RhbENvdW50ID0gY291bnQ7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgdG90YWxDb3VudCArPSBjb3VudDsKLQotICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpCi0gICAgICAgICAgICBwcmludGYoIkZvdW5kICVkIGFzc2V0IGZpbGUlcyBpbiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICBjb3VudCwgKGNvdW50PT0xKSA/ICIiIDogInMiLCBhc3NldERpcik7Ci0gICAgfQotCi0gICAgY291bnQgPSB2YWxpZGF0ZSgpOwotICAgIGlmIChjb3VudCAhPSBOT19FUlJPUikgewotICAgICAgICB0b3RhbENvdW50ID0gY291bnQ7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBjb3VudCA9IGZpbHRlcihidW5kbGUpOwotICAgIGlmIChjb3VudCAhPSBOT19FUlJPUikgewotICAgICAgICB0b3RhbENvdW50ID0gY291bnQ7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLWJhaWw6Ci0gICAgcmV0dXJuIHRvdGFsQ291bnQ7Ci19Ci0KLXNzaXplX3QgQWFwdEFzc2V0czo6c2x1cnBGdWxsVHJlZShCdW5kbGUqIGJ1bmRsZSwgY29uc3QgU3RyaW5nOCYgc3JjRGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWFwdEdyb3VwRW50cnkmIGtpbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiByZXNUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3A8RmlsZVBhdGhTdG9yZT4mIGZ1bGxSZXNQYXRocykKLXsKLSAgICBzc2l6ZV90IHJlcyA9IEFhcHREaXI6OnNsdXJwRnVsbFRyZWUoYnVuZGxlLCBzcmNEaXIsIGtpbmQsIHJlc1R5cGUsIGZ1bGxSZXNQYXRocyk7Ci0gICAgaWYgKHJlcyA+IDApIHsKLSAgICAgICAgbUdyb3VwRW50cmllcy5hZGQoa2luZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlczsKLX0KLQotc3NpemVfdCBBYXB0QXNzZXRzOjpzbHVycFJlc291cmNlVHJlZShCdW5kbGUqIGJ1bmRsZSwgY29uc3QgU3RyaW5nOCYgc3JjRGlyKQotewotICAgIHNzaXplX3QgZXJyID0gMDsKLQotICAgIERJUiogZGlyID0gb3BlbmRpcihzcmNEaXIuc3RyaW5nKCkpOwotICAgIGlmIChkaXIgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBvcGVuZGlyKCVzKTogJXNcbiIsIHNyY0Rpci5zdHJpbmcoKSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgc3RhdHVzX3QgY291bnQgPSAwOwotCi0gICAgLyoKLSAgICAgKiBSdW4gdGhyb3VnaCB0aGUgZGlyZWN0b3J5LCBsb29raW5nIGZvciBkaXJzIHRoYXQgbWF0Y2ggdGhlCi0gICAgICogZXhwZWN0ZWQgcGF0dGVybi4KLSAgICAgKi8KLSAgICB3aGlsZSAoMSkgewotICAgICAgICBzdHJ1Y3QgZGlyZW50KiBlbnRyeSA9IHJlYWRkaXIoZGlyKTsKLSAgICAgICAgaWYgKGVudHJ5ID09IE5VTEwpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzSGlkZGVuKHNyY0Rpci5zdHJpbmcoKSwgZW50cnktPmRfbmFtZSkpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nOCBzdWJkaXJOYW1lKHNyY0Rpcik7Ci0gICAgICAgIHN1YmRpck5hbWUuYXBwZW5kUGF0aChlbnRyeS0+ZF9uYW1lKTsKLQotICAgICAgICBBYXB0R3JvdXBFbnRyeSBncm91cDsKLSAgICAgICAgU3RyaW5nOCByZXNUeXBlOwotICAgICAgICBib29sIGIgPSBncm91cC5pbml0RnJvbURpck5hbWUoZW50cnktPmRfbmFtZSwgJnJlc1R5cGUpOwotICAgICAgICBpZiAoIWIpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW52YWxpZCByZXNvdXJjZSBkaXJlY3RvcnkgbmFtZTogJXMvJXNcbiIsIHNyY0Rpci5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgZW50cnktPmRfbmFtZSk7Ci0gICAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0TWF4UmVzVmVyc2lvbigpICE9IE5VTEwgJiYgZ3JvdXAuZ2V0VmVyc2lvblN0cmluZygpLmxlbmd0aCgpICE9IDApIHsKLSAgICAgICAgICAgIGludCBtYXhSZXNJbnQgPSBhdG9pKGJ1bmRsZS0+Z2V0TWF4UmVzVmVyc2lvbigpKTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZlclN0cmluZyA9IGdyb3VwLmdldFZlcnNpb25TdHJpbmcoKS5zdHJpbmcoKTsKLSAgICAgICAgICAgIGludCBkaXJWZXJzaW9uSW50ID0gYXRvaSh2ZXJTdHJpbmcgKyAxKTsgLy8gc2tpcCAndicgaW4gdmVyc2lvbiBuYW1lCi0gICAgICAgICAgICBpZiAoZGlyVmVyc2lvbkludCA+IG1heFJlc0ludCkgewotICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1heCByZXMgJWQsIHNraXBwaW5nICVzXG4iLCBtYXhSZXNJbnQsIGVudHJ5LT5kX25hbWUpOwotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEZpbGVUeXBlIHR5cGUgPSBnZXRGaWxlVHlwZShzdWJkaXJOYW1lLnN0cmluZygpKTsKLQotICAgICAgICBpZiAodHlwZSA9PSBrRmlsZVR5cGVEaXJlY3RvcnkpIHsKLSAgICAgICAgICAgIHNwPEFhcHREaXI+IGRpciA9IG1ha2VEaXIocmVzVHlwZSk7Ci0gICAgICAgICAgICBzc2l6ZV90IHJlcyA9IGRpci0+c2x1cnBGdWxsVHJlZShidW5kbGUsIHN1YmRpck5hbWUsIGdyb3VwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzVHlwZSwgbUZ1bGxSZXNQYXRocyk7Ci0gICAgICAgICAgICBpZiAocmVzIDwgMCkgewotICAgICAgICAgICAgICAgIGNvdW50ID0gcmVzOwotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgbUdyb3VwRW50cmllcy5hZGQoZ3JvdXApOwotICAgICAgICAgICAgICAgIGNvdW50ICs9IHJlczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gT25seSBhZGQgdGhpcyBkaXJlY3RvcnkgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEgcmVzb3VyY2UgZGlyCi0gICAgICAgICAgICAvLyBmb3IgdGhlIGN1cnJlbnQgdHlwZS4gIFRoaXMgZW5zdXJlcyB0aGF0IHdlIG9ubHkgYWRkIHRoZSBkaXIgb25jZQotICAgICAgICAgICAgLy8gZm9yIGFsbCBjb25maWdzLgotICAgICAgICAgICAgc3A8QWFwdERpcj4gcmRpciA9IHJlc0RpcihyZXNUeXBlKTsKLSAgICAgICAgICAgIGlmIChyZGlyID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBtUmVzRGlycy5hZGQoZGlyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgKGlnbm9yaW5nIGZpbGUgJyVzJylcbiIsIHN1YmRpck5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi1iYWlsOgotICAgIGNsb3NlZGlyKGRpcik7Ci0gICAgZGlyID0gTlVMTDsKLQotICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLXNzaXplX3QKLUFhcHRBc3NldHM6OnNsdXJwUmVzb3VyY2VaaXAoQnVuZGxlKiBidW5kbGUsIGNvbnN0IGNoYXIqIGZpbGVuYW1lKQotewotICAgIGludCBjb3VudCA9IDA7Ci0gICAgU29ydGVkVmVjdG9yPEFhcHRHcm91cEVudHJ5PiBlbnRyaWVzOwotCi0gICAgWmlwRmlsZSogemlwID0gbmV3IFppcEZpbGU7Ci0gICAgc3RhdHVzX3QgZXJyID0gemlwLT5vcGVuKGZpbGVuYW1lLCBaaXBGaWxlOjprT3BlblJlYWRPbmx5KTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3Igb3BlbmluZyB6aXAgZmlsZSAlc1xuIiwgZmlsZW5hbWUpOwotICAgICAgICBjb3VudCA9IGVycjsKLSAgICAgICAgZGVsZXRlIHppcDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGNvbnN0IGludCBOID0gemlwLT5nZXROdW1FbnRyaWVzKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICBaaXBFbnRyeSogZW50cnkgPSB6aXAtPmdldEVudHJ5QnlJbmRleChpKTsKLSAgICAgICAgaWYgKGVudHJ5LT5nZXREZWxldGVkKCkpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nOCBlbnRyeU5hbWUoZW50cnktPmdldEZpbGVOYW1lKCkpOwotCi0gICAgICAgIFN0cmluZzggZGlyTmFtZSA9IGVudHJ5TmFtZS5nZXRQYXRoRGlyKCk7Ci0gICAgICAgIHNwPEFhcHREaXI+IGRpciA9IGRpck5hbWUgPT0gIiIgPyB0aGlzIDogbWFrZURpcihkaXJOYW1lKTsKLQotICAgICAgICBTdHJpbmc4IHJlc1R5cGU7Ci0gICAgICAgIEFhcHRHcm91cEVudHJ5IGtpbmQ7Ci0KLSAgICAgICAgU3RyaW5nOCByZW1haW47Ci0gICAgICAgIGlmIChlbnRyeU5hbWUud2Fsa1BhdGgoJnJlbWFpbikgPT0ga1Jlc291cmNlRGlyKSB7Ci0gICAgICAgICAgICAvLyB0aGVzZSBhcmUgdGhlIHJlc291cmNlcywgcHVsbCB0aGVpciB0eXBlIG91dCBvZiB0aGUgZGlyZWN0b3J5IG5hbWUKLSAgICAgICAgICAgIGtpbmQuaW5pdEZyb21EaXJOYW1lKHJlbWFpbi53YWxrUGF0aCgpLnN0cmluZygpLCAmcmVzVHlwZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyB0aGVzZSBhcmUgdW50eXBlZCBhbmQgZG9uJ3QgaGF2ZSBhbiBBYXB0R3JvdXBFbnRyeQotICAgICAgICB9Ci0gICAgICAgIGlmIChlbnRyaWVzLmluZGV4T2Yoa2luZCkgPCAwKSB7Ci0gICAgICAgICAgICBlbnRyaWVzLmFkZChraW5kKTsKLSAgICAgICAgICAgIG1Hcm91cEVudHJpZXMuYWRkKGtpbmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdXNlIHRoZSBvbmUgZnJvbSB0aGUgemlwIGZpbGUgaWYgdGhleSBib3RoIGV4aXN0LgotICAgICAgICBkaXItPnJlbW92ZUZpbGUoZW50cnlOYW1lLmdldFBhdGhMZWFmKCkpOwotCi0gICAgICAgIHNwPEFhcHRGaWxlPiBmaWxlID0gbmV3IEFhcHRGaWxlKGVudHJ5TmFtZSwga2luZCwgcmVzVHlwZSk7Ci0gICAgICAgIHN0YXR1c190IGVyciA9IGRpci0+YWRkTGVhZkZpbGUoZW50cnlOYW1lLmdldFBhdGhMZWFmKCksIGZpbGUpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycj0lcyBlbnRyeU5hbWU9JXNcbiIsIHN0cmVycm9yKGVyciksIGVudHJ5TmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBjb3VudCA9IGVycjsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBmaWxlLT5zZXRDb21wcmVzc2lvbk1ldGhvZChlbnRyeS0+Z2V0Q29tcHJlc3Npb25NZXRob2QoKSk7Ci0KLSNpZiAwCi0gICAgICAgIGlmIChlbnRyeU5hbWUgPT0gIkFuZHJvaWRNYW5pZmVzdC54bWwiKSB7Ci0gICAgICAgICAgICBwcmludGYoIkFuZHJvaWRNYW5pZmVzdC54bWxcbiIpOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiXG5cbmZpbGU6ICVzXG4iLCBlbnRyeU5hbWUuc3RyaW5nKCkpOwotI2VuZGlmCi0KLSAgICAgICAgc2l6ZV90IGxlbiA9IGVudHJ5LT5nZXRVbmNvbXByZXNzZWRMZW4oKTsKLSAgICAgICAgdm9pZCogZGF0YSA9IHppcC0+dW5jb21wcmVzcyhlbnRyeSk7Ci0gICAgICAgIHZvaWQqIGJ1ZiA9IGZpbGUtPmVkaXREYXRhKGxlbik7Ci0gICAgICAgIG1lbWNweShidWYsIGRhdGEsIGxlbik7Ci0KLSNpZiAwCi0gICAgICAgIGNvbnN0IGludCBPRkYgPSAwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwID0gKHVuc2lnbmVkIGNoYXIqKWRhdGE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGVuZCA9IHArbGVuOwotICAgICAgICBwICs9IE9GRjsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPDMyICYmIHAgPCBlbmQ7IGkrKykgewotICAgICAgICAgICAgcHJpbnRmKCIweCUwM3ggIiwgaSoweDEwICsgT0ZGKTsKLSAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajwweDEwICYmIHAgPCBlbmQ7IGorKykgewotICAgICAgICAgICAgICAgIHByaW50ZigiICUwMngiLCAqcCk7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBmcmVlKGRhdGEpOwotCi0gICAgICAgIGNvdW50Kys7Ci0gICAgfQotCi1iYWlsOgotICAgIGRlbGV0ZSB6aXA7Ci0gICAgcmV0dXJuIGNvdW50OwotfQotCi1zdGF0dXNfdCBBYXB0QXNzZXRzOjpmaWx0ZXIoQnVuZGxlKiBidW5kbGUpCi17Ci0gICAgUmVzb3VyY2VGaWx0ZXIgcmVxRmlsdGVyOwotICAgIHN0YXR1c190IGVyciA9IHJlcUZpbHRlci5wYXJzZShidW5kbGUtPmdldENvbmZpZ3VyYXRpb25zKCkpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZUZpbHRlciBwcmVmRmlsdGVyOwotICAgIGVyciA9IHByZWZGaWx0ZXIucGFyc2UoYnVuZGxlLT5nZXRQcmVmZXJyZWRDb25maWd1cmF0aW9ucygpKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgaWYgKHJlcUZpbHRlci5pc0VtcHR5KCkgJiYgcHJlZkZpbHRlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgIH0KLQotICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICBpZiAoIXJlcUZpbHRlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHByaW50ZigiQXBwbHlpbmcgcmVxdWlyZWQgZmlsdGVyOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgYnVuZGxlLT5nZXRDb25maWd1cmF0aW9ucygpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXByZWZGaWx0ZXIuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBwcmludGYoIkFwcGx5aW5nIHByZWZlcnJlZCBmaWx0ZXI6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBidW5kbGUtPmdldFByZWZlcnJlZENvbmZpZ3VyYXRpb25zKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3QgVmVjdG9yPHNwPEFhcHREaXI+ID4mIHJlc2RpcnMgPSBtUmVzRGlyczsKLSAgICBjb25zdCBzaXplX3QgTkQgPSByZXNkaXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TkQ7IGkrKykgewotICAgICAgICBjb25zdCBzcDxBYXB0RGlyPiYgZGlyID0gcmVzZGlycy5pdGVtQXQoaSk7Ci0gICAgICAgIGlmIChkaXItPmdldExlYWYoKSA9PSBrVmFsdWVzRGlyKSB7Ci0gICAgICAgICAgICAvLyBUaGUgInZhbHVlIiBkaXIgaXMgc3BlY2lhbCBzaW5jZSBhIHNpbmdsZSBmaWxlIGRlZmluZXMKLSAgICAgICAgICAgIC8vIG11bHRpcGxlIHJlc291cmNlcywgc28gd2UgY2FuIG5vdCBkbyBmaWx0ZXJpbmcgb24gdGhlCi0gICAgICAgICAgICAvLyBmaWxlcyB0aGVtc2VsdmVzLgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRpci0+Z2V0TGVhZigpID09IGtNaXBtYXBEaXIpIHsKLSAgICAgICAgICAgIC8vIFdlIGFsc28gc2tpcCB0aGUgIm1pcG1hcCIgZGlyZWN0b3J5LCBzaW5jZSB0aGUgcG9pbnQgb2YgdGhpcwotICAgICAgICAgICAgLy8gaXMgdG8gaW5jbHVkZSBhbGwgZGVuc2l0aWVzIHdpdGhvdXQgc3RyaXBwaW5nLiAgSWYgeW91IHB1dAotICAgICAgICAgICAgLy8gb3RoZXIgY29uZmlndXJhdGlvbnMgaW4gaGVyZSBhcyB3ZWxsIHRoZXkgd29uJ3QgYmUgc3RyaXBwZWQKLSAgICAgICAgICAgIC8vIGVpdGhlci4uLiAgU28gZG9uJ3QgZG8gdGhhdC4gIFNlcmlvdXNseS4gIFdoYXQgaXMgd3Jvbmcgd2l0aCB5b3U/Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IHNpemVfdCBORyA9IGRpci0+Z2V0RmlsZXMoKS5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGo9MDsgajxORzsgaisrKSB7Ci0gICAgICAgICAgICBzcDxBYXB0R3JvdXA+IGdycCA9IGRpci0+Z2V0RmlsZXMoKS52YWx1ZUF0KGopOwotCi0gICAgICAgICAgICAvLyBGaXJzdCByZW1vdmUgYW55IGNvbmZpZ3VyYXRpb25zIHdlIGtub3cgd2UgZG9uJ3QgbmVlZC4KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGs9MDsgazxncnAtPmdldEZpbGVzKCkuc2l6ZSgpOyBrKyspIHsKLSAgICAgICAgICAgICAgICBzcDxBYXB0RmlsZT4gZmlsZSA9IGdycC0+Z2V0RmlsZXMoKS52YWx1ZUF0KGspOwotICAgICAgICAgICAgICAgIGlmIChrID09IDAgJiYgZ3JwLT5nZXRGaWxlcygpLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIG9ubHkgZmlsZSBsZWZ0LCB3ZSBuZWVkIHRvIGtlZXAgaXQuCi0gICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGUgcmVzb3VyY2UgSURzIHdlIGFyZSB1c2luZyB3aWxsIGJlIGluY29uc2lzdGVudAotICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIHdoYXQgd2UgZ2V0IHdoZW4gbm90IHN0cmlwcGluZy4gIFN1Y2t5LCBidXQgYXQgbGVhc3QKLSAgICAgICAgICAgICAgICAgICAgLy8gZm9yIG5vdyB3ZSBjYW4gcmVseSBvbiB0aGUgYmFjay1lbmQgZG9pbmcgYW5vdGhlciBmaWx0ZXJpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFzcyB0byB0YWtlIHRoaXMgb3V0IGFuZCBsZWF2ZSB1cyB3aXRoIHRoaXMgcmVzb3VyY2UgbmFtZQotICAgICAgICAgICAgICAgICAgICAvLyBjb250YWluaW5nIG5vIGVudHJpZXMuCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZmlsZS0+Z2V0UGF0aCgpLmdldFBhdGhFeHRlbnNpb24oKSA9PSAiLnhtbCIpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgcmVtb3ZlIC54bWwgZmlsZXMgYXQgdGhpcyBwb2ludCwgYmVjYXVzZSB3aGVuCi0gICAgICAgICAgICAgICAgICAgIC8vIHdlIHBhcnNlIHRoZW0gdGhleSBtYXkgYWRkIGlkZW50aWZpZXIgcmVzb3VyY2VzLCBzbwotICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmluZyB0aGVtIGNhbiBjYXVzZSBvdXIgcmVzb3VyY2UgaWRlbnRpZmllcnMgdG8KLSAgICAgICAgICAgICAgICAgICAgLy8gYmVjb21lIGluY29uc2lzdGVudC4KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgY29uZmlnKGZpbGUtPmdldEdyb3VwRW50cnkoKS50b1BhcmFtcygpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlcUZpbHRlci5tYXRjaChjb25maWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJQcnVuaW5nIHVubmVlZGVkIHJlc291cmNlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGdycC0+cmVtb3ZlRmlsZShrKTsKLSAgICAgICAgICAgICAgICAgICAgay0tOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gUXVpY2sgY2hlY2s6IG5vIHByZWZlcnJlZCBmaWx0ZXJzLCBub3RoaW5nIG1vcmUgdG8gZG8uCi0gICAgICAgICAgICBpZiAocHJlZkZpbHRlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gR2V0IHRoZSBwcmVmZXJyZWQgZGVuc2l0eSBpZiB0aGVyZSBpcyBvbmUuIFdlIGRvIG5vdCBtYXRjaCBleGFjdGx5IGZvciBkZW5zaXR5LgotICAgICAgICAgICAgLy8gSWYgb3VyIHByZWZlcnJlZCBkZW5zaXR5IGlzIGhkcGkgYnV0IHdlIG9ubHkgaGF2ZSBtZHBpIGFuZCB4aGRwaSByZXNvdXJjZXMsIHdlCi0gICAgICAgICAgICAvLyBwaWNrIHhoZHBpLgotICAgICAgICAgICAgdWludDMyX3QgcHJlZmVycmVkRGVuc2l0eSA9IDA7Ci0gICAgICAgICAgICBjb25zdCBTb3J0ZWRWZWN0b3I8dWludDMyX3Q+KiBwcmVmZXJyZWRDb25maWdzID0gcHJlZkZpbHRlci5jb25maWdzRm9yQXhpcyhBWElTX0RFTlNJVFkpOwotICAgICAgICAgICAgaWYgKHByZWZlcnJlZENvbmZpZ3MgIT0gTlVMTCAmJiBwcmVmZXJyZWRDb25maWdzLT5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcHJlZmVycmVkRGVuc2l0eSA9ICgqcHJlZmVycmVkQ29uZmlncylbMF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE5vdyBkZWFsIHdpdGggcHJlZmVycmVkIGNvbmZpZ3VyYXRpb25zLgotICAgICAgICAgICAgZm9yIChpbnQgYXhpcz1BWElTX1NUQVJUOyBheGlzPD1BWElTX0VORDsgYXhpcysrKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3Qgaz0wOyBrPGdycC0+Z2V0RmlsZXMoKS5zaXplKCk7IGsrKykgewotICAgICAgICAgICAgICAgICAgICBzcDxBYXB0RmlsZT4gZmlsZSA9IGdycC0+Z2V0RmlsZXMoKS52YWx1ZUF0KGspOwotICAgICAgICAgICAgICAgICAgICBpZiAoayA9PSAwICYmIGdycC0+Z2V0RmlsZXMoKS5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgb25seSBmaWxlIGxlZnQsIHdlIG5lZWQgdG8ga2VlcCBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGUgcmVzb3VyY2UgSURzIHdlIGFyZSB1c2luZyB3aWxsIGJlIGluY29uc2lzdGVudAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCB3aGF0IHdlIGdldCB3aGVuIG5vdCBzdHJpcHBpbmcuICBTdWNreSwgYnV0IGF0IGxlYXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igbm93IHdlIGNhbiByZWx5IG9uIHRoZSBiYWNrLWVuZCBkb2luZyBhbm90aGVyIGZpbHRlcmluZwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFzcyB0byB0YWtlIHRoaXMgb3V0IGFuZCBsZWF2ZSB1cyB3aXRoIHRoaXMgcmVzb3VyY2UgbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGFpbmluZyBubyBlbnRyaWVzLgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGUtPmdldFBhdGgoKS5nZXRQYXRoRXh0ZW5zaW9uKCkgPT0gIi54bWwiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCByZW1vdmUgLnhtbCBmaWxlcyBhdCB0aGlzIHBvaW50LCBiZWNhdXNlIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHBhcnNlIHRoZW0gdGhleSBtYXkgYWRkIGlkZW50aWZpZXIgcmVzb3VyY2VzLCBzbwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZpbmcgdGhlbSBjYW4gY2F1c2Ugb3VyIHJlc291cmNlIGlkZW50aWZpZXJzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWNvbWUgaW5jb25zaXN0ZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnJiBjb25maWcoZmlsZS0+Z2V0R3JvdXBFbnRyeSgpLnRvUGFyYW1zKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXByZWZGaWx0ZXIubWF0Y2goYXhpcywgY29uZmlnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlc291cmNlIHdlIHdvdWxkIHByZWZlciBub3QgdG8gaGF2ZS4gIENoZWNrCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBzZWUgaWYgaGF2ZSBhIHNpbWlsYXIgdmFyaWF0aW9uIHRoYXQgd2Ugd291bGQgbGlrZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gaGF2ZSBhbmQsIGlmIHNvLCB3ZSBjYW4gZHJvcCBpdC4KLQotICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYmVzdERlbnNpdHkgPSBjb25maWcuZGVuc2l0eTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgbT0wOyBtPGdycC0+Z2V0RmlsZXMoKS5zaXplKCk7IG0rKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtID09IGspIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPEFhcHRGaWxlPiBtZmlsZSA9IGdycC0+Z2V0RmlsZXMoKS52YWx1ZUF0KG0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgbWNvbmZpZyhtZmlsZS0+Z2V0R3JvdXBFbnRyeSgpLnRvUGFyYW1zKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBYXB0R3JvdXBFbnRyeTo6Y29uZmlnU2FtZUV4Y2VwdChjb25maWcsIG1jb25maWcsIGF4aXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChheGlzID09IEFYSVNfREVOU0lUWSAmJiBwcmVmZXJyZWREZW5zaXR5ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGEgYmV0dGVyIGRlbnNpdHkgcmVzb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtY29uZmlnLmRlbnNpdHkgPCBiZXN0RGVuc2l0eSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtY29uZmlnLmRlbnNpdHkgPiBwcmVmZXJyZWREZW5zaXR5ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3REZW5zaXR5ID4gcHJlZmVycmVkRGVuc2l0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZGVuc2l0eSBpcyBiZXR3ZWVuIG91ciBiZXN0IGRlbnNpdHkgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHByZWZlcnJlZCBkZW5zaXR5LCB0aGVyZWZvcmUgaXQgaXMgYmV0dGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3REZW5zaXR5ID0gbWNvbmZpZy5kZW5zaXR5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtY29uZmlnLmRlbnNpdHkgPiBiZXN0RGVuc2l0eSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0RGVuc2l0eSA8IHByZWZlcnJlZERlbnNpdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGRlbnNpdHkgaXMgYmV0dGVyIHRoYW4gb3VyIGJlc3QgZGVuc2l0eSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdXIgYmVzdCBkZW5zaXR5IHdhcyBzbWFsbGVyIHRoYW4gb3VyIHByZWZlcnJlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbnNpdHksIHNvIGl0IGlzIGJldHRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0RGVuc2l0eSA9IG1jb25maWcuZGVuc2l0eTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcmVmRmlsdGVyLm1hdGNoKGF4aXMsIG1jb25maWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlBydW5pbmcgdW5uZWVkZWQgcmVzb3VyY2U6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwLT5yZW1vdmVGaWxlKGspOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgay0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChheGlzID09IEFYSVNfREVOU0lUWSAmJiBwcmVmZXJyZWREZW5zaXR5ID4gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0RGVuc2l0eSAhPSBjb25maWcuZGVuc2l0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlBydW5pbmcgdW5uZWVkZWQgcmVzb3VyY2U6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUtPmdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwLT5yZW1vdmVGaWxlKGspOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGstLTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3A8QWFwdFN5bWJvbHM+IEFhcHRBc3NldHM6OmdldFN5bWJvbHNGb3IoY29uc3QgU3RyaW5nOCYgbmFtZSkKLXsKLSAgICBzcDxBYXB0U3ltYm9scz4gc3ltID0gbVN5bWJvbHMudmFsdWVGb3IobmFtZSk7Ci0gICAgaWYgKHN5bSA9PSBOVUxMKSB7Ci0gICAgICAgIHN5bSA9IG5ldyBBYXB0U3ltYm9scygpOwotICAgICAgICBtU3ltYm9scy5hZGQobmFtZSwgc3ltKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN5bTsKLX0KLQotc3A8QWFwdFN5bWJvbHM+IEFhcHRBc3NldHM6OmdldEphdmFTeW1ib2xzRm9yKGNvbnN0IFN0cmluZzgmIG5hbWUpCi17Ci0gICAgc3A8QWFwdFN5bWJvbHM+IHN5bSA9IG1KYXZhU3ltYm9scy52YWx1ZUZvcihuYW1lKTsKLSAgICBpZiAoc3ltID09IE5VTEwpIHsKLSAgICAgICAgc3ltID0gbmV3IEFhcHRTeW1ib2xzKCk7Ci0gICAgICAgIG1KYXZhU3ltYm9scy5hZGQobmFtZSwgc3ltKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN5bTsKLX0KLQotc3RhdHVzX3QgQWFwdEFzc2V0czo6YXBwbHlKYXZhU3ltYm9scygpCi17Ci0gICAgc2l6ZV90IE4gPSBtSmF2YVN5bWJvbHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgY29uc3QgU3RyaW5nOCYgbmFtZSA9IG1KYXZhU3ltYm9scy5rZXlBdChpKTsKLSAgICAgICAgY29uc3Qgc3A8QWFwdFN5bWJvbHM+JiBzeW1ib2xzID0gbUphdmFTeW1ib2xzLnZhbHVlQXQoaSk7Ci0gICAgICAgIHNzaXplX3QgcG9zID0gbVN5bWJvbHMuaW5kZXhPZktleShuYW1lKTsKLSAgICAgICAgaWYgKHBvcyA8IDApIHsKLSAgICAgICAgICAgIFNvdXJjZVBvcyBwb3M7Ci0gICAgICAgICAgICBwb3MuZXJyb3IoIkphdmEgc3ltYm9sIGRpciAlcyBub3QgZGVmaW5lZFxuIiwgbmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICAvL3ByaW50ZigiKioqKiBhcHBseWluZyBqYXZhIHN5bWJvbHMgaW4gZGlyICVzXG4iLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgc3RhdHVzX3QgZXJyID0gbVN5bWJvbHMudmFsdWVBdChwb3MpLT5hcHBseUphdmFTeW1ib2xzKHN5bWJvbHMpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1ib29sIEFhcHRBc3NldHM6OmlzSmF2YVN5bWJvbChjb25zdCBBYXB0U3ltYm9sRW50cnkmIHN5bSwgYm9vbCBpbmNsdWRlUHJpdmF0ZSkgY29uc3QgewotICAgIC8vcHJpbnRmKCJpc0phdmFTeW1ib2wgJXM6IHB1YmxpYz0lZCwgaW5jbHVkZVByaXZhdGU9JWQsIGlzSmF2YVN5bWJvbD0lZFxuIiwKLSAgICAvLyAgICAgICAgc3ltLm5hbWUuc3RyaW5nKCksIHN5bS5pc1B1YmxpYyA/IDEgOiAwLCBpbmNsdWRlUHJpdmF0ZSA/IDEgOiAwLAotICAgIC8vICAgICAgICBzeW0uaXNKYXZhU3ltYm9sID8gMSA6IDApOwotICAgIGlmICghbUhhdmVQcml2YXRlU3ltYm9scykgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHN5bS5pc1B1YmxpYykgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGluY2x1ZGVQcml2YXRlICYmIHN5bS5pc0phdmFTeW1ib2wpIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdHVzX3QgQWFwdEFzc2V0czo6YnVpbGRJbmNsdWRlZFJlc291cmNlcyhCdW5kbGUqIGJ1bmRsZSkKLXsKLSAgICBpZiAoIW1IYXZlSW5jbHVkZWRBc3NldHMpIHsKLSAgICAgICAgLy8gQWRkIGluIGFsbCBpbmNsdWRlcy4KLSAgICAgICAgY29uc3QgVmVjdG9yPGNvbnN0IGNoYXIqPiYgaW5jbCA9IGJ1bmRsZS0+Z2V0UGFja2FnZUluY2x1ZGVzKCk7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBOPWluY2wuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJJbmNsdWRpbmcgcmVzb3VyY2VzIGZyb20gcGFja2FnZTogJXNcbiIsIGluY2xbaV0pOwotICAgICAgICAgICAgaWYgKCFtSW5jbHVkZWRBc3NldHMuYWRkQXNzZXRQYXRoKFN0cmluZzgoaW5jbFtpXSksIE5VTEwpKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogQXNzZXQgcGFja2FnZSBpbmNsdWRlICclcycgbm90IGZvdW5kLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluY2xbaV0pOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1IYXZlSW5jbHVkZWRBc3NldHMgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgQWFwdEFzc2V0czo6YWRkSW5jbHVkZWRSZXNvdXJjZXMoY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlKQotewotICAgIGNvbnN0IFJlc1RhYmxlJiByZXMgPSBnZXRJbmNsdWRlZFJlc291cmNlcygpOwotICAgIC8vIFhYWCBkaXJ0eSEKLSAgICByZXR1cm4gY29uc3RfY2FzdDxSZXNUYWJsZSY+KHJlcykuYWRkKGZpbGUtPmdldERhdGEoKSwgZmlsZS0+Z2V0U2l6ZSgpLCBOVUxMKTsKLX0KLQotY29uc3QgUmVzVGFibGUmIEFhcHRBc3NldHM6OmdldEluY2x1ZGVkUmVzb3VyY2VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluY2x1ZGVkQXNzZXRzLmdldFJlc291cmNlcyhmYWxzZSk7Ci19Ci0KLXZvaWQgQWFwdEFzc2V0czo6cHJpbnQoY29uc3QgU3RyaW5nOCYgcHJlZml4KSBjb25zdAotewotICAgIFN0cmluZzggaW5uZXJQcmVmaXgocHJlZml4KTsKLSAgICBpbm5lclByZWZpeC5hcHBlbmQoIiAgIik7Ci0gICAgU3RyaW5nOCBpbm5lcklubmVyUHJlZml4KGlubmVyUHJlZml4KTsKLSAgICBpbm5lcklubmVyUHJlZml4LmFwcGVuZCgiICAiKTsKLSAgICBwcmludGYoIiVzQ29uZmlndXJhdGlvbnM6XG4iLCBwcmVmaXguc3RyaW5nKCkpOwotICAgIGNvbnN0IHNpemVfdCBOPW1Hcm91cEVudHJpZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgU3RyaW5nOCBjbmFtZSA9IG1Hcm91cEVudHJpZXMuaXRlbUF0KGkpLnRvRGlyTmFtZShTdHJpbmc4KCkpOwotICAgICAgICBwcmludGYoIiVzICVzXG4iLCBwcmVmaXguc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgY25hbWUgIT0gIiIgPyBjbmFtZS5zdHJpbmcoKSA6ICIoZGVmYXVsdCkiKTsKLSAgICB9Ci0KLSAgICBwcmludGYoIlxuJXNGaWxlczpcbiIsIHByZWZpeC5zdHJpbmcoKSk7Ci0gICAgQWFwdERpcjo6cHJpbnQoaW5uZXJQcmVmaXgpOwotCi0gICAgcHJpbnRmKCJcbiVzUmVzb3VyY2UgRGlyczpcbiIsIHByZWZpeC5zdHJpbmcoKSk7Ci0gICAgY29uc3QgVmVjdG9yPHNwPEFhcHREaXI+ID4mIHJlc2RpcnMgPSBtUmVzRGlyczsKLSAgICBjb25zdCBzaXplX3QgTlIgPSByZXNkaXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TlI7IGkrKykgewotICAgICAgICBjb25zdCBzcDxBYXB0RGlyPiYgZCA9IHJlc2RpcnMuaXRlbUF0KGkpOwotICAgICAgICBwcmludGYoIiVzICBUeXBlICVzXG4iLCBwcmVmaXguc3RyaW5nKCksIGQtPmdldExlYWYoKS5zdHJpbmcoKSk7Ci0gICAgICAgIGQtPnByaW50KGlubmVySW5uZXJQcmVmaXgpOwotICAgIH0KLX0KLQotc3A8QWFwdERpcj4gQWFwdEFzc2V0czo6cmVzRGlyKGNvbnN0IFN0cmluZzgmIG5hbWUpIGNvbnN0Ci17Ci0gICAgY29uc3QgVmVjdG9yPHNwPEFhcHREaXI+ID4mIHJlc2RpcnMgPSBtUmVzRGlyczsKLSAgICBjb25zdCBzaXplX3QgTiA9IHJlc2RpcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgY29uc3Qgc3A8QWFwdERpcj4mIGQgPSByZXNkaXJzLml0ZW1BdChpKTsKLSAgICAgICAgaWYgKGQtPmdldExlYWYoKSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gZDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotYm9vbAotdmFsaWRfc3ltYm9sX25hbWUoY29uc3QgU3RyaW5nOCYgc3ltYm9sKQotewotICAgIHN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgS0VZV09SRFNbXSA9IHsKLSAgICAgICAgImFic3RyYWN0IiwgImFzc2VydCIsICJib29sZWFuIiwgImJyZWFrIiwKLSAgICAgICAgImJ5dGUiLCAiY2FzZSIsICJjYXRjaCIsICJjaGFyIiwgImNsYXNzIiwgImNvbnN0IiwgImNvbnRpbnVlIiwKLSAgICAgICAgImRlZmF1bHQiLCAiZG8iLCAiZG91YmxlIiwgImVsc2UiLCAiZW51bSIsICJleHRlbmRzIiwgImZpbmFsIiwKLSAgICAgICAgImZpbmFsbHkiLCAiZmxvYXQiLCAiZm9yIiwgImdvdG8iLCAiaWYiLCAiaW1wbGVtZW50cyIsICJpbXBvcnQiLAotICAgICAgICAiaW5zdGFuY2VvZiIsICJpbnQiLCAiaW50ZXJmYWNlIiwgImxvbmciLCAibmF0aXZlIiwgIm5ldyIsICJwYWNrYWdlIiwKLSAgICAgICAgInByaXZhdGUiLCAicHJvdGVjdGVkIiwgInB1YmxpYyIsICJyZXR1cm4iLCAic2hvcnQiLCAic3RhdGljIiwKLSAgICAgICAgInN0cmljdGZwIiwgInN1cGVyIiwgInN3aXRjaCIsICJzeW5jaHJvbml6ZWQiLCAidGhpcyIsICJ0aHJvdyIsCi0gICAgICAgICJ0aHJvd3MiLCAidHJhbnNpZW50IiwgInRyeSIsICJ2b2lkIiwgInZvbGF0aWxlIiwgIndoaWxlIiwKLSAgICAgICAgInRydWUiLCAiZmFsc2UiLCAibnVsbCIsCi0gICAgICAgIE5VTEwKLSAgICB9OwotICAgIGNvbnN0IGNoYXIqY29uc3QqIGsgPSBLRVlXT1JEUzsKLSAgICBjb25zdCBjaGFyKmNvbnN0IHMgPSBzeW1ib2wuc3RyaW5nKCk7Ci0gICAgd2hpbGUgKCprKSB7Ci0gICAgICAgIGlmICgwID09IHN0cmNtcChzLCAqaykpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBrKys7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9BYXB0QXNzZXRzLmggYi90b29scy9hYXB0L0FhcHRBc3NldHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNmYTkxMy4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L0FhcHRBc3NldHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIEluZm9ybWF0aW9uIGFib3V0IGFzc2V0cyBiZWluZyBvcGVyYXRlZCBvbi4KLS8vCi0jaWZuZGVmIF9fQUFQVF9BU1NFVFNfSAotI2RlZmluZSBfX0FBUFRfQVNTRVRTX0gKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGFuZHJvaWRmdy9Bc3NldE1hbmFnZXIuaD4KLSNpbmNsdWRlIDxhbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5oPgotI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgotI2luY2x1ZGUgPHV0aWxzL1NvcnRlZFZlY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+Ci0jaW5jbHVkZSAiWmlwRmlsZS5oIgotCi0jaW5jbHVkZSAiQnVuZGxlLmgiCi0jaW5jbHVkZSAiU291cmNlUG9zLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi0KLWV4dGVybiBjb25zdCBjaGFyICogY29uc3QgZ0RlZmF1bHRJZ25vcmVBc3NldHM7Ci1leHRlcm4gY29uc3QgY2hhciAqIGdVc2VySWdub3JlQXNzZXRzOwotCi1ib29sIHZhbGlkX3N5bWJvbF9uYW1lKGNvbnN0IFN0cmluZzgmIHN0cik7Ci0KLWNsYXNzIEFhcHRBc3NldHM7Ci0KLWVudW0gewotICAgIEFYSVNfTk9ORSA9IDAsCi0gICAgQVhJU19NQ0MgPSAxLAotICAgIEFYSVNfTU5DLAotICAgIEFYSVNfTEFOR1VBR0UsCi0gICAgQVhJU19SRUdJT04sCi0gICAgQVhJU19TQ1JFRU5MQVlPVVRTSVpFLAotICAgIEFYSVNfU0NSRUVOTEFZT1VUTE9ORywKLSAgICBBWElTX09SSUVOVEFUSU9OLAotICAgIEFYSVNfVUlNT0RFVFlQRSwKLSAgICBBWElTX1VJTU9ERU5JR0hULAotICAgIEFYSVNfREVOU0lUWSwKLSAgICBBWElTX1RPVUNIU0NSRUVOLAotICAgIEFYSVNfS0VZU0hJRERFTiwKLSAgICBBWElTX0tFWUJPQVJELAotICAgIEFYSVNfTkFWSElEREVOLAotICAgIEFYSVNfTkFWSUdBVElPTiwKLSAgICBBWElTX1NDUkVFTlNJWkUsCi0gICAgQVhJU19TTUFMTEVTVFNDUkVFTldJRFRIRFAsCi0gICAgQVhJU19TQ1JFRU5XSURUSERQLAotICAgIEFYSVNfU0NSRUVOSEVJR0hURFAsCi0gICAgQVhJU19MQVlPVVRESVIsCi0gICAgQVhJU19WRVJTSU9OLAotCi0gICAgQVhJU19TVEFSVCA9IEFYSVNfTUNDLAotICAgIEFYSVNfRU5EID0gQVhJU19WRVJTSU9OLAotfTsKLQotLyoqCi0gKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBhIHNwZWNpZmljIHZhcmlhdGlvbiBvZiBhIHNpbmdsZSBmaWxlIG91dAotICogb2YgYWxsIHRoZSB2YXJpYXRpb25zIGl0IGNhbiBoYXZlIHRoYXQgd2UgY2FuIGhhdmUuCi0gKi8KLXN0cnVjdCBBYXB0R3JvdXBFbnRyeQotewotcHVibGljOgotICAgIEFhcHRHcm91cEVudHJ5KCkgOiBtUGFyYW1zQ2hhbmdlZCh0cnVlKSB7IH0KLSAgICBBYXB0R3JvdXBFbnRyeShjb25zdCBTdHJpbmc4JiBfbG9jYWxlLCBjb25zdCBTdHJpbmc4JiBfdmVuZG9yKQotICAgICAgICA6IGxvY2FsZShfbG9jYWxlKSwgdmVuZG9yKF92ZW5kb3IpLCBtUGFyYW1zQ2hhbmdlZCh0cnVlKSB7IH0KLQotICAgIGJvb2wgaW5pdEZyb21EaXJOYW1lKGNvbnN0IGNoYXIqIGRpciwgU3RyaW5nOCogcmVzVHlwZSk7Ci0KLSAgICBzdGF0aWMgc3RhdHVzX3QgcGFyc2VOYW1lUGFydChjb25zdCBTdHJpbmc4JiBwYXJ0LCBpbnQqIGF4aXMsIHVpbnQzMl90KiB2YWx1ZSk7Ci0KLSAgICBzdGF0aWMgdWludDMyX3QgZ2V0Q29uZmlnVmFsdWVGb3JBeGlzKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgY29uZmlnLCBpbnQgYXhpcyk7Ci0KLSAgICBzdGF0aWMgYm9vbCBjb25maWdTYW1lRXhjZXB0KGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgY29uZmlnLAotICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnJiBvdGhlckNvbmZpZywgaW50IGF4aXMpOwotCi0gICAgc3RhdGljIGJvb2wgZ2V0TWNjTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCA9IE5VTEwpOwotICAgIHN0YXRpYyBib29sIGdldE1uY05hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQgPSBOVUxMKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRMb2NhbGVOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0U2NyZWVuTGF5b3V0U2l6ZU5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQgPSBOVUxMKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRTY3JlZW5MYXlvdXRMb25nTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCA9IE5VTEwpOwotICAgIHN0YXRpYyBib29sIGdldE9yaWVudGF0aW9uTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCA9IE5VTEwpOwotICAgIHN0YXRpYyBib29sIGdldFVpTW9kZVR5cGVOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0VWlNb2RlTmlnaHROYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0RGVuc2l0eU5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQgPSBOVUxMKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRUb3VjaHNjcmVlbk5hbWUoY29uc3QgY2hhciogbmFtZSwgUmVzVGFibGVfY29uZmlnKiBvdXQgPSBOVUxMKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRLZXlzSGlkZGVuTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCA9IE5VTEwpOwotICAgIHN0YXRpYyBib29sIGdldEtleWJvYXJkTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCA9IE5VTEwpOwotICAgIHN0YXRpYyBib29sIGdldE5hdmlnYXRpb25OYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0TmF2SGlkZGVuTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCA9IE5VTEwpOwotICAgIHN0YXRpYyBib29sIGdldFNjcmVlblNpemVOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0U21hbGxlc3RTY3JlZW5XaWR0aERwTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCA9IE5VTEwpOwotICAgIHN0YXRpYyBib29sIGdldFNjcmVlbldpZHRoRHBOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0U2NyZWVuSGVpZ2h0RHBOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0TGF5b3V0RGlyZWN0aW9uTmFtZShjb25zdCBjaGFyKiBuYW1lLCBSZXNUYWJsZV9jb25maWcqIG91dCA9IE5VTEwpOwotICAgIHN0YXRpYyBib29sIGdldFZlcnNpb25OYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFJlc1RhYmxlX2NvbmZpZyogb3V0ID0gTlVMTCk7Ci0KLSAgICBpbnQgY29tcGFyZShjb25zdCBBYXB0R3JvdXBFbnRyeSYgbykgY29uc3Q7Ci0KLSAgICBjb25zdCBSZXNUYWJsZV9jb25maWcmIHRvUGFyYW1zKCkgY29uc3Q7Ci0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgQWFwdEdyb3VwRW50cnkmIG8pIGNvbnN0IHsgcmV0dXJuIGNvbXBhcmUobykgPCAwOyB9Ci0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBBYXB0R3JvdXBFbnRyeSYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSA8PSAwOyB9Ci0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBYXB0R3JvdXBFbnRyeSYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSA9PSAwOyB9Ci0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBYXB0R3JvdXBFbnRyeSYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSAhPSAwOyB9Ci0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBBYXB0R3JvdXBFbnRyeSYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSA+PSAwOyB9Ci0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEFhcHRHcm91cEVudHJ5JiBvKSBjb25zdCB7IHJldHVybiBjb21wYXJlKG8pID4gMDsgfQotCi0gICAgU3RyaW5nOCB0b1N0cmluZygpIGNvbnN0OwotICAgIFN0cmluZzggdG9EaXJOYW1lKGNvbnN0IFN0cmluZzgmIHJlc1R5cGUpIGNvbnN0OwotCi0gICAgY29uc3QgU3RyaW5nOCYgZ2V0VmVyc2lvblN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHZlcnNpb247IH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmc4IG1jYzsKLSAgICBTdHJpbmc4IG1uYzsKLSAgICBTdHJpbmc4IGxvY2FsZTsKLSAgICBTdHJpbmc4IHZlbmRvcjsKLSAgICBTdHJpbmc4IHNtYWxsZXN0U2NyZWVuV2lkdGhEcDsKLSAgICBTdHJpbmc4IHNjcmVlbldpZHRoRHA7Ci0gICAgU3RyaW5nOCBzY3JlZW5IZWlnaHREcDsKLSAgICBTdHJpbmc4IHNjcmVlbkxheW91dFNpemU7Ci0gICAgU3RyaW5nOCBzY3JlZW5MYXlvdXRMb25nOwotICAgIFN0cmluZzggb3JpZW50YXRpb247Ci0gICAgU3RyaW5nOCB1aU1vZGVUeXBlOwotICAgIFN0cmluZzggdWlNb2RlTmlnaHQ7Ci0gICAgU3RyaW5nOCBkZW5zaXR5OwotICAgIFN0cmluZzggdG91Y2hzY3JlZW47Ci0gICAgU3RyaW5nOCBrZXlzSGlkZGVuOwotICAgIFN0cmluZzgga2V5Ym9hcmQ7Ci0gICAgU3RyaW5nOCBuYXZIaWRkZW47Ci0gICAgU3RyaW5nOCBuYXZpZ2F0aW9uOwotICAgIFN0cmluZzggc2NyZWVuU2l6ZTsKLSAgICBTdHJpbmc4IGxheW91dERpcmVjdGlvbjsKLSAgICBTdHJpbmc4IHZlcnNpb247Ci0KLSAgICBtdXRhYmxlIGJvb2wgbVBhcmFtc0NoYW5nZWQ7Ci0gICAgbXV0YWJsZSBSZXNUYWJsZV9jb25maWcgbVBhcmFtczsKLX07Ci0KLWlubGluZSBpbnQgY29tcGFyZV90eXBlKGNvbnN0IEFhcHRHcm91cEVudHJ5JiBsaHMsIGNvbnN0IEFhcHRHcm91cEVudHJ5JiByaHMpCi17Ci0gICAgcmV0dXJuIGxocy5jb21wYXJlKHJocyk7Ci19Ci0KLWlubGluZSBpbnQgc3RyaWN0bHlfb3JkZXJfdHlwZShjb25zdCBBYXB0R3JvdXBFbnRyeSYgbGhzLCBjb25zdCBBYXB0R3JvdXBFbnRyeSYgcmhzKQotewotICAgIHJldHVybiBjb21wYXJlX3R5cGUobGhzLCByaHMpIDwgMDsKLX0KLQotY2xhc3MgQWFwdEdyb3VwOwotY2xhc3MgRmlsZVBhdGhTdG9yZTsKLQotLyoqCi0gKiBBIHNpbmdsZSBhc3NldCBmaWxlIHdlIGtub3cgYWJvdXQuCi0gKi8KLWNsYXNzIEFhcHRGaWxlIDogcHVibGljIFJlZkJhc2UKLXsKLXB1YmxpYzoKLSAgICBBYXB0RmlsZShjb25zdCBTdHJpbmc4JiBzb3VyY2VGaWxlLCBjb25zdCBBYXB0R3JvdXBFbnRyeSYgZ3JvdXBFbnRyeSwKLSAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiByZXNUeXBlKQotICAgICAgICA6IG1Hcm91cEVudHJ5KGdyb3VwRW50cnkpCi0gICAgICAgICwgbVJlc291cmNlVHlwZShyZXNUeXBlKQotICAgICAgICAsIG1Tb3VyY2VGaWxlKHNvdXJjZUZpbGUpCi0gICAgICAgICwgbURhdGEoTlVMTCkKLSAgICAgICAgLCBtRGF0YVNpemUoMCkKLSAgICAgICAgLCBtQnVmZmVyU2l6ZSgwKQotICAgICAgICAsIG1Db21wcmVzc2lvbihaaXBFbnRyeTo6a0NvbXByZXNzU3RvcmVkKQotICAgICAgICB7Ci0gICAgICAgICAgICAvL3ByaW50ZigibmV3IEFhcHRGaWxlIGNyZWF0ZWQgJXNcbiIsIChjb25zdCBjaGFyKilzb3VyY2VGaWxlKTsKLSAgICAgICAgfQotICAgIHZpcnR1YWwgfkFhcHRGaWxlKCkgewotICAgICAgICBmcmVlKG1EYXRhKTsKLSAgICB9Ci0KLSAgICBjb25zdCBTdHJpbmc4JiBnZXRQYXRoKCkgY29uc3QgeyByZXR1cm4gbVBhdGg7IH0KLSAgICBjb25zdCBBYXB0R3JvdXBFbnRyeSYgZ2V0R3JvdXBFbnRyeSgpIGNvbnN0IHsgcmV0dXJuIG1Hcm91cEVudHJ5OyB9Ci0KLSAgICAvLyBEYXRhIEFQSS4gIElmIHRoZXJlIGlzIGRhdGEgYXR0YWNoZWQgdG8gdGhlIGZpbGUsCi0gICAgLy8gZ2V0U291cmNlRmlsZSgpIGlzIG5vdCB1c2VkLgotICAgIGJvb2wgaGFzRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1EYXRhICE9IE5VTEw7IH0KLSAgICBjb25zdCB2b2lkKiBnZXREYXRhKCkgY29uc3QgeyByZXR1cm4gbURhdGE7IH0KLSAgICBzaXplX3QgZ2V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1EYXRhU2l6ZTsgfQotICAgIHZvaWQqIGVkaXREYXRhKHNpemVfdCBzaXplKTsKLSAgICB2b2lkKiBlZGl0RGF0YShzaXplX3QqIG91dFNpemUgPSBOVUxMKTsKLSAgICB2b2lkKiBwYWREYXRhKHNpemVfdCB3b3JkU2l6ZSk7Ci0gICAgc3RhdHVzX3Qgd3JpdGVEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKLSAgICB2b2lkIGNsZWFyRGF0YSgpOwotCi0gICAgY29uc3QgU3RyaW5nOCYgZ2V0UmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gbVJlc291cmNlVHlwZTsgfQotCi0gICAgLy8gRmlsZSBBUEkuICBJZiB0aGUgZmlsZSBkb2VzIG5vdCBob2xkIHJhdyBkYXRhLCB0aGlzIGlzCi0gICAgLy8gYSBmdWxsIHBhdGggdG8gYSBmaWxlIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgaG9sZHMgaXRzIGRhdGEuCi0gICAgY29uc3QgU3RyaW5nOCYgZ2V0U291cmNlRmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1Tb3VyY2VGaWxlOyB9Ci0KLSAgICBTdHJpbmc4IGdldFByaW50YWJsZVNvdXJjZSgpIGNvbnN0OwotCi0gICAgLy8gRGVzaXJlZCBjb21wcmVzc2lvbiBtZXRob2QsIGFzIHBlciB1dGlscy9aaXBFbnRyeS5oLiAgRm9yIGV4YW1wbGUsCi0gICAgLy8gbm8gY29tcHJlc3Npb24gaXMgWmlwRW50cnk6OmtDb21wcmVzc1N0b3JlZC4KLSAgICBpbnQgZ2V0Q29tcHJlc3Npb25NZXRob2QoKSBjb25zdCB7IHJldHVybiBtQ29tcHJlc3Npb247IH0KLSAgICB2b2lkIHNldENvbXByZXNzaW9uTWV0aG9kKGludCBjKSB7IG1Db21wcmVzc2lvbiA9IGM7IH0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEFhcHRHcm91cDsKLQotICAgIFN0cmluZzggbVBhdGg7Ci0gICAgQWFwdEdyb3VwRW50cnkgbUdyb3VwRW50cnk7Ci0gICAgU3RyaW5nOCBtUmVzb3VyY2VUeXBlOwotICAgIFN0cmluZzggbVNvdXJjZUZpbGU7Ci0gICAgdm9pZCogbURhdGE7Ci0gICAgc2l6ZV90IG1EYXRhU2l6ZTsKLSAgICBzaXplX3QgbUJ1ZmZlclNpemU7Ci0gICAgaW50IG1Db21wcmVzc2lvbjsKLX07Ci0KLS8qKgotICogQSBncm91cCBvZiByZWxhdGVkIGZpbGVzICh0aGUgc2FtZSBmaWxlLCB3aXRoIGRpZmZlcmVudAotICogdmVuZG9yL2xvY2FsZSB2YXJpYXRpb25zKS4KLSAqLwotY2xhc3MgQWFwdEdyb3VwIDogcHVibGljIFJlZkJhc2UKLXsKLXB1YmxpYzoKLSAgICBBYXB0R3JvdXAoY29uc3QgU3RyaW5nOCYgbGVhZiwgY29uc3QgU3RyaW5nOCYgcGF0aCkKLSAgICAgICAgOiBtTGVhZihsZWFmKSwgbVBhdGgocGF0aCkgeyB9Ci0gICAgdmlydHVhbCB+QWFwdEdyb3VwKCkgeyB9Ci0KLSAgICBjb25zdCBTdHJpbmc4JiBnZXRMZWFmKCkgY29uc3QgeyByZXR1cm4gbUxlYWY7IH0KLQotICAgIC8vIFJldHVybnMgdGhlIHJlbGF0aXZlIHBhdGggYWZ0ZXIgdGhlIEFhcHRHcm91cEVudHJ5IGRpcnMuCi0gICAgY29uc3QgU3RyaW5nOCYgZ2V0UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1QYXRoOyB9Ci0KLSAgICBjb25zdCBEZWZhdWx0S2V5ZWRWZWN0b3I8QWFwdEdyb3VwRW50cnksIHNwPEFhcHRGaWxlPiA+JiBnZXRGaWxlcygpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1GaWxlczsgfQotCi0gICAgc3RhdHVzX3QgYWRkRmlsZShjb25zdCBzcDxBYXB0RmlsZT4mIGZpbGUpOwotICAgIHZvaWQgcmVtb3ZlRmlsZShzaXplX3QgaW5kZXgpOwotCi0gICAgdm9pZCBwcmludChjb25zdCBTdHJpbmc4JiBwcmVmaXgpIGNvbnN0OwotCi0gICAgU3RyaW5nOCBnZXRQcmludGFibGVTb3VyY2UoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBTdHJpbmc4IG1MZWFmOwotICAgIFN0cmluZzggbVBhdGg7Ci0KLSAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8QWFwdEdyb3VwRW50cnksIHNwPEFhcHRGaWxlPiA+IG1GaWxlczsKLX07Ci0KLS8qKgotICogQSBzaW5nbGUgZGlyZWN0b3J5IG9mIGFzc2V0cywgd2hpY2ggY2FuIGNvbnRhaW4gZmlsZXMgYW5kIG90aGVyCi0gKiBzdWItZGlyZWN0b3JpZXMuCi0gKi8KLWNsYXNzIEFhcHREaXIgOiBwdWJsaWMgUmVmQmFzZQotewotcHVibGljOgotICAgIEFhcHREaXIoY29uc3QgU3RyaW5nOCYgbGVhZiwgY29uc3QgU3RyaW5nOCYgcGF0aCkKLSAgICAgICAgOiBtTGVhZihsZWFmKSwgbVBhdGgocGF0aCkgeyB9Ci0gICAgdmlydHVhbCB+QWFwdERpcigpIHsgfQotCi0gICAgY29uc3QgU3RyaW5nOCYgZ2V0TGVhZigpIGNvbnN0IHsgcmV0dXJuIG1MZWFmOyB9Ci0KLSAgICBjb25zdCBTdHJpbmc4JiBnZXRQYXRoKCkgY29uc3QgeyByZXR1cm4gbVBhdGg7IH0KLQotICAgIGNvbnN0IERlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmc4LCBzcDxBYXB0R3JvdXA+ID4mIGdldEZpbGVzKCkgY29uc3QgeyByZXR1cm4gbUZpbGVzOyB9Ci0gICAgY29uc3QgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPEFhcHREaXI+ID4mIGdldERpcnMoKSBjb25zdCB7IHJldHVybiBtRGlyczsgfQotCi0gICAgdmlydHVhbCBzdGF0dXNfdCBhZGRGaWxlKGNvbnN0IFN0cmluZzgmIG5hbWUsIGNvbnN0IHNwPEFhcHRHcm91cD4mIGZpbGUpOwotCi0gICAgdm9pZCByZW1vdmVGaWxlKGNvbnN0IFN0cmluZzgmIG5hbWUpOwotICAgIHZvaWQgcmVtb3ZlRGlyKGNvbnN0IFN0cmluZzgmIG5hbWUpOwotCi0gICAgLyoKLSAgICAgKiBQZXJmb3JtIHNvbWUgc2FuaXR5IGNoZWNrcyBvbiB0aGUgbmFtZXMgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGhlcmUuCi0gICAgICogSW4gcGFydGljdWxhcjoKLSAgICAgKiAgLSBDaGVjayBmb3IgaWxsZWdhbCBjaGFycyBpbiBmaWxlbmFtZXMuCi0gICAgICogIC0gQ2hlY2sgZmlsZW5hbWUgbGVuZ3RoLgotICAgICAqICAtIENoZWNrIGZvciBwcmVzZW5jZSBvZiAiLmd6IiBhbmQgbm9uLSIuZ3oiIGNvcGllcyBvZiBzYW1lIGZpbGUuCi0gICAgICogIC0gQ2hlY2sgZm9yIG11bHRpcGxlIGZpbGVzIHdob3NlIG5hbWVzIG1hdGNoIGluIGEgY2FzZS1pbnNlbnNpdGl2ZQotICAgICAqICAgIGZhc2hpb24gKHByb2JsZW1hdGljIGZvciBzb21lIHN5c3RlbXMpLgotICAgICAqCi0gICAgICogQ29tcGFyaW5nIG5hbWVzIGFnYWluc3QgYWxsIG90aGVyIG5hbWVzIGlzIE8obl4yKS4gIFdlIGNvdWxkIHNwZWVkCi0gICAgICogaXQgdXAgc29tZSBieSBzb3J0aW5nIHRoZSBlbnRyaWVzIGFuZCBiZWluZyBzbWFydGVyIGFib3V0IHdoYXQgd2UKLSAgICAgKiBjb21wYXJlIGFnYWluc3QsIGJ1dCBJJ20gbm90IGV4cGVjdGluZyB0byBoYXZlIGVub3VnaCBmaWxlcyBpbiBhCi0gICAgICogc2luZ2xlIGRpcmVjdG9yeSB0byBtYWtlIGEgbm90aWNlYWJsZSBkaWZmZXJlbmNlIGluIHNwZWVkLgotICAgICAqCi0gICAgICogTm90ZSB0aGF0IHNvcnRpbmcgaGVyZSBpcyBub3QgZW5vdWdoIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBwYWNrYWdlCi0gICAgICogY29udGVudHMgYXJlIHNvcnRlZCAtLSBzdWJzZXF1ZW50IHVwZGF0ZXMgY2FuIHJlYXJyYW5nZSB0aGluZ3MuCi0gICAgICovCi0gICAgc3RhdHVzX3QgdmFsaWRhdGUoKSBjb25zdDsKLQotICAgIHZvaWQgcHJpbnQoY29uc3QgU3RyaW5nOCYgcHJlZml4KSBjb25zdDsKLQotICAgIFN0cmluZzggZ2V0UHJpbnRhYmxlU291cmNlKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEFhcHRBc3NldHM7Ci0KLSAgICBzdGF0dXNfdCBhZGREaXIoY29uc3QgU3RyaW5nOCYgbmFtZSwgY29uc3Qgc3A8QWFwdERpcj4mIGRpcik7Ci0gICAgc3A8QWFwdERpcj4gbWFrZURpcihjb25zdCBTdHJpbmc4JiBuYW1lKTsKLSAgICBzdGF0dXNfdCBhZGRMZWFmRmlsZShjb25zdCBTdHJpbmc4JiBsZWFmTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4mIGZpbGUpOwotICAgIHZpcnR1YWwgc3NpemVfdCBzbHVycEZ1bGxUcmVlKEJ1bmRsZSogYnVuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIHNyY0RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBYXB0R3JvdXBFbnRyeSYga2luZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiByZXNUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPEZpbGVQYXRoU3RvcmU+JiBmdWxsUmVzUGF0aHMpOwotCi0gICAgU3RyaW5nOCBtTGVhZjsKLSAgICBTdHJpbmc4IG1QYXRoOwotCi0gICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPEFhcHRHcm91cD4gPiBtRmlsZXM7Ci0gICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPEFhcHREaXI+ID4gbURpcnM7Ci19OwotCi0vKioKLSAqIEFsbCBpbmZvcm1hdGlvbiB3ZSBrbm93IGFib3V0IGEgcGFydGljdWxhciBzeW1ib2wuCi0gKi8KLWNsYXNzIEFhcHRTeW1ib2xFbnRyeQotewotcHVibGljOgotICAgIEFhcHRTeW1ib2xFbnRyeSgpCi0gICAgICAgIDogaXNQdWJsaWMoZmFsc2UpLCBpc0phdmFTeW1ib2woZmFsc2UpLCB0eXBlQ29kZShUWVBFX1VOS05PV04pCi0gICAgewotICAgIH0KLSAgICBBYXB0U3ltYm9sRW50cnkoY29uc3QgU3RyaW5nOCYgX25hbWUpCi0gICAgICAgIDogbmFtZShfbmFtZSksIGlzUHVibGljKGZhbHNlKSwgaXNKYXZhU3ltYm9sKGZhbHNlKSwgdHlwZUNvZGUoVFlQRV9VTktOT1dOKQotICAgIHsKLSAgICB9Ci0gICAgQWFwdFN5bWJvbEVudHJ5KGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgbykKLSAgICAgICAgOiBuYW1lKG8ubmFtZSksIHNvdXJjZVBvcyhvLnNvdXJjZVBvcyksIGlzUHVibGljKG8uaXNQdWJsaWMpCi0gICAgICAgICwgaXNKYXZhU3ltYm9sKG8uaXNKYXZhU3ltYm9sKSwgY29tbWVudChvLmNvbW1lbnQpLCB0eXBlQ29tbWVudChvLnR5cGVDb21tZW50KQotICAgICAgICAsIHR5cGVDb2RlKG8udHlwZUNvZGUpLCBpbnQzMlZhbChvLmludDMyVmFsKSwgc3RyaW5nVmFsKG8uc3RyaW5nVmFsKQotICAgIHsKLSAgICB9Ci0gICAgQWFwdFN5bWJvbEVudHJ5IG9wZXJhdG9yPShjb25zdCBBYXB0U3ltYm9sRW50cnkmIG8pCi0gICAgewotICAgICAgICBzb3VyY2VQb3MgPSBvLnNvdXJjZVBvczsKLSAgICAgICAgaXNQdWJsaWMgPSBvLmlzUHVibGljOwotICAgICAgICBpc0phdmFTeW1ib2wgPSBvLmlzSmF2YVN5bWJvbDsKLSAgICAgICAgY29tbWVudCA9IG8uY29tbWVudDsKLSAgICAgICAgdHlwZUNvbW1lbnQgPSBvLnR5cGVDb21tZW50OwotICAgICAgICB0eXBlQ29kZSA9IG8udHlwZUNvZGU7Ci0gICAgICAgIGludDMyVmFsID0gby5pbnQzMlZhbDsKLSAgICAgICAgc3RyaW5nVmFsID0gby5zdHJpbmdWYWw7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgU3RyaW5nOCBuYW1lOwotICAgIAotICAgIFNvdXJjZVBvcyBzb3VyY2VQb3M7Ci0gICAgYm9vbCBpc1B1YmxpYzsKLSAgICBib29sIGlzSmF2YVN5bWJvbDsKLSAgICAKLSAgICBTdHJpbmcxNiBjb21tZW50OwotICAgIFN0cmluZzE2IHR5cGVDb21tZW50OwotICAgIAotICAgIGVudW0gewotICAgICAgICBUWVBFX1VOS05PV04gPSAwLAotICAgICAgICBUWVBFX0lOVDMyLAotICAgICAgICBUWVBFX1NUUklORwotICAgIH07Ci0gICAgCi0gICAgaW50IHR5cGVDb2RlOwotICAgIAotICAgIC8vIFZhbHVlLiAgTWF5IGJlIG9uZSBvZiB0aGVzZS4KLSAgICBpbnQzMl90IGludDMyVmFsOwotICAgIFN0cmluZzggc3RyaW5nVmFsOwotfTsKLQotLyoqCi0gKiBBIGdyb3VwIG9mIHJlbGF0ZWQgc3ltYm9scyAoc3VjaCBhcyBpbmRpY2VzIGludG8gYSBzdHJpbmcgYmxvY2spCi0gKiB0aGF0IGhhdmUgYmVlbiBnZW5lcmF0ZWQgZnJvbSB0aGUgYXNzZXRzLgotICovCi1jbGFzcyBBYXB0U3ltYm9scyA6IHB1YmxpYyBSZWZCYXNlCi17Ci1wdWJsaWM6Ci0gICAgQWFwdFN5bWJvbHMoKSB7IH0KLSAgICB2aXJ0dWFsIH5BYXB0U3ltYm9scygpIHsgfQotCi0gICAgc3RhdHVzX3QgYWRkU3ltYm9sKGNvbnN0IFN0cmluZzgmIG5hbWUsIGludDMyX3QgdmFsdWUsIGNvbnN0IFNvdXJjZVBvcyYgcG9zKSB7Ci0gICAgICAgIGlmICghY2hlY2tfdmFsaWRfc3ltYm9sX25hbWUobmFtZSwgcG9zLCAic3ltYm9sIikpIHsKLSAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgICAgIH0KLSAgICAgICAgQWFwdFN5bWJvbEVudHJ5JiBzeW0gPSBlZGl0X3N5bWJvbChuYW1lLCAmcG9zKTsKLSAgICAgICAgc3ltLnR5cGVDb2RlID0gQWFwdFN5bWJvbEVudHJ5OjpUWVBFX0lOVDMyOwotICAgICAgICBzeW0uaW50MzJWYWwgPSB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgIH0KLQotICAgIHN0YXR1c190IGFkZFN0cmluZ1N5bWJvbChjb25zdCBTdHJpbmc4JiBuYW1lLCBjb25zdCBTdHJpbmc4JiB2YWx1ZSwKLSAgICAgICAgICAgIGNvbnN0IFNvdXJjZVBvcyYgcG9zKSB7Ci0gICAgICAgIGlmICghY2hlY2tfdmFsaWRfc3ltYm9sX25hbWUobmFtZSwgcG9zLCAic3ltYm9sIikpIHsKLSAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7Ci0gICAgICAgIH0KLSAgICAgICAgQWFwdFN5bWJvbEVudHJ5JiBzeW0gPSBlZGl0X3N5bWJvbChuYW1lLCAmcG9zKTsKLSAgICAgICAgc3ltLnR5cGVDb2RlID0gQWFwdFN5bWJvbEVudHJ5OjpUWVBFX1NUUklORzsKLSAgICAgICAgc3ltLnN0cmluZ1ZhbCA9IHZhbHVlOwotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotCi0gICAgc3RhdHVzX3QgbWFrZVN5bWJvbFB1YmxpYyhjb25zdCBTdHJpbmc4JiBuYW1lLCBjb25zdCBTb3VyY2VQb3MmIHBvcykgewotICAgICAgICBpZiAoIWNoZWNrX3ZhbGlkX3N5bWJvbF9uYW1lKG5hbWUsIHBvcywgInN5bWJvbCIpKSB7Ci0gICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgICAgICB9Ci0gICAgICAgIEFhcHRTeW1ib2xFbnRyeSYgc3ltID0gZWRpdF9zeW1ib2wobmFtZSwgJnBvcyk7Ci0gICAgICAgIHN5bS5pc1B1YmxpYyA9IHRydWU7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBzdGF0dXNfdCBtYWtlU3ltYm9sSmF2YVN5bWJvbChjb25zdCBTdHJpbmc4JiBuYW1lLCBjb25zdCBTb3VyY2VQb3MmIHBvcykgewotICAgICAgICBpZiAoIWNoZWNrX3ZhbGlkX3N5bWJvbF9uYW1lKG5hbWUsIHBvcywgInN5bWJvbCIpKSB7Ci0gICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwotICAgICAgICB9Ci0gICAgICAgIEFhcHRTeW1ib2xFbnRyeSYgc3ltID0gZWRpdF9zeW1ib2wobmFtZSwgJnBvcyk7Ci0gICAgICAgIHN5bS5pc0phdmFTeW1ib2wgPSB0cnVlOwotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRDb21tZW50KGNvbnN0IFN0cmluZzgmIG5hbWUsIGNvbnN0IFN0cmluZzE2JiBjb21tZW50LCBjb25zdCBTb3VyY2VQb3MmIHBvcykgewotICAgICAgICBpZiAoY29tbWVudC5zaXplKCkgPD0gMCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIEFhcHRTeW1ib2xFbnRyeSYgc3ltID0gZWRpdF9zeW1ib2wobmFtZSwgJnBvcyk7Ci0gICAgICAgIGlmIChzeW0uY29tbWVudC5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgc3ltLmNvbW1lbnQgPSBjb21tZW50OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ltLmNvbW1lbnQuYXBwZW5kKFN0cmluZzE2KCJcbiIpKTsKLSAgICAgICAgICAgIHN5bS5jb21tZW50LmFwcGVuZChjb21tZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kVHlwZUNvbW1lbnQoY29uc3QgU3RyaW5nOCYgbmFtZSwgY29uc3QgU3RyaW5nMTYmIGNvbW1lbnQpIHsKLSAgICAgICAgaWYgKGNvbW1lbnQuc2l6ZSgpIDw9IDApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBBYXB0U3ltYm9sRW50cnkmIHN5bSA9IGVkaXRfc3ltYm9sKG5hbWUsIE5VTEwpOwotICAgICAgICBpZiAoc3ltLnR5cGVDb21tZW50LnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICBzeW0udHlwZUNvbW1lbnQgPSBjb21tZW50OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ltLnR5cGVDb21tZW50LmFwcGVuZChTdHJpbmcxNigiXG4iKSk7Ci0gICAgICAgICAgICBzeW0udHlwZUNvbW1lbnQuYXBwZW5kKGNvbW1lbnQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHNwPEFhcHRTeW1ib2xzPiBhZGROZXN0ZWRTeW1ib2woY29uc3QgU3RyaW5nOCYgbmFtZSwgY29uc3QgU291cmNlUG9zJiBwb3MpIHsKLSAgICAgICAgaWYgKCFjaGVja192YWxpZF9zeW1ib2xfbmFtZShuYW1lLCBwb3MsICJuZXN0ZWQgc3ltYm9sIikpIHsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzcDxBYXB0U3ltYm9scz4gc3ltID0gbU5lc3RlZFN5bWJvbHMudmFsdWVGb3IobmFtZSk7Ci0gICAgICAgIGlmIChzeW0gPT0gTlVMTCkgewotICAgICAgICAgICAgc3ltID0gbmV3IEFhcHRTeW1ib2xzKCk7Ci0gICAgICAgICAgICBtTmVzdGVkU3ltYm9scy5hZGQobmFtZSwgc3ltKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzeW07Ci0gICAgfQotCi0gICAgc3RhdHVzX3QgYXBwbHlKYXZhU3ltYm9scyhjb25zdCBzcDxBYXB0U3ltYm9scz4mIGphdmFTeW1ib2xzKTsKLQotICAgIGNvbnN0IEtleWVkVmVjdG9yPFN0cmluZzgsIEFhcHRTeW1ib2xFbnRyeT4mIGdldFN5bWJvbHMoKSBjb25zdAotICAgICAgICB7IHJldHVybiBtU3ltYm9sczsgfQotICAgIGNvbnN0IERlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmc4LCBzcDxBYXB0U3ltYm9scz4gPiYgZ2V0TmVzdGVkU3ltYm9scygpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1OZXN0ZWRTeW1ib2xzOyB9Ci0KLSAgICBjb25zdCBTdHJpbmcxNiYgZ2V0Q29tbWVudChjb25zdCBTdHJpbmc4JiBuYW1lKSBjb25zdAotICAgICAgICB7IHJldHVybiBnZXRfc3ltYm9sKG5hbWUpLmNvbW1lbnQ7IH0KLSAgICBjb25zdCBTdHJpbmcxNiYgZ2V0VHlwZUNvbW1lbnQoY29uc3QgU3RyaW5nOCYgbmFtZSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gZ2V0X3N5bWJvbChuYW1lKS50eXBlQ29tbWVudDsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgY2hlY2tfdmFsaWRfc3ltYm9sX25hbWUoY29uc3QgU3RyaW5nOCYgc3ltYm9sLCBjb25zdCBTb3VyY2VQb3MmIHBvcywgY29uc3QgY2hhciogbGFiZWwpIHsKLSAgICAgICAgaWYgKHZhbGlkX3N5bWJvbF9uYW1lKHN5bWJvbCkpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHBvcy5lcnJvcigiaW52YWxpZCAlczogJyVzJ1xuIiwgbGFiZWwsIHN5bWJvbC5zdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgQWFwdFN5bWJvbEVudHJ5JiBlZGl0X3N5bWJvbChjb25zdCBTdHJpbmc4JiBzeW1ib2wsIGNvbnN0IFNvdXJjZVBvcyogcG9zKSB7Ci0gICAgICAgIHNzaXplX3QgaSA9IG1TeW1ib2xzLmluZGV4T2ZLZXkoc3ltYm9sKTsKLSAgICAgICAgaWYgKGkgPCAwKSB7Ci0gICAgICAgICAgICBpID0gbVN5bWJvbHMuYWRkKHN5bWJvbCwgQWFwdFN5bWJvbEVudHJ5KHN5bWJvbCkpOwotICAgICAgICB9Ci0gICAgICAgIEFhcHRTeW1ib2xFbnRyeSYgc3ltID0gbVN5bWJvbHMuZWRpdFZhbHVlQXQoaSk7Ci0gICAgICAgIGlmIChwb3MgIT0gTlVMTCAmJiBzeW0uc291cmNlUG9zLmxpbmUgPCAwKSB7Ci0gICAgICAgICAgICBzeW0uc291cmNlUG9zID0gKnBvczsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3ltOwotICAgIH0KLSAgICBjb25zdCBBYXB0U3ltYm9sRW50cnkmIGdldF9zeW1ib2woY29uc3QgU3RyaW5nOCYgc3ltYm9sKSBjb25zdCB7Ci0gICAgICAgIHNzaXplX3QgaSA9IG1TeW1ib2xzLmluZGV4T2ZLZXkoc3ltYm9sKTsKLSAgICAgICAgaWYgKGkgPj0gMCkgewotICAgICAgICAgICAgcmV0dXJuIG1TeW1ib2xzLnZhbHVlQXQoaSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1EZWZTeW1ib2w7Ci0gICAgfQotCi0gICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgQWFwdFN5bWJvbEVudHJ5PiAgICAgICAgICAgbVN5bWJvbHM7Ci0gICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPEFhcHRTeW1ib2xzPiA+ICAgbU5lc3RlZFN5bWJvbHM7Ci0gICAgQWFwdFN5bWJvbEVudHJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURlZlN5bWJvbDsKLX07Ci0KLWNsYXNzIFJlc291cmNlVHlwZVNldCA6IHB1YmxpYyBSZWZCYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIEtleWVkVmVjdG9yPFN0cmluZzgsc3A8QWFwdEdyb3VwPiA+Ci17Ci1wdWJsaWM6Ci0gICAgUmVzb3VyY2VUeXBlU2V0KCk7Ci19OwotCi0vLyBTdG9yYWdlIGZvciBsaXN0cyBvZiBmdWxseSBxdWFsaWZpZWQgcGF0aHMgZm9yCi0vLyByZXNvdXJjZXMgZW5jb3VudGVyZWQgZHVyaW5nIHNsdXJwaW5nLgotY2xhc3MgRmlsZVBhdGhTdG9yZSA6IHB1YmxpYyBSZWZCYXNlLAotICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBWZWN0b3I8U3RyaW5nOD4KLXsKLXB1YmxpYzoKLSAgICBGaWxlUGF0aFN0b3JlKCk7Ci19OwotCi0vKioKLSAqIEFzc2V0IGhpZXJhcmNoeSBiZWluZyBvcGVyYXRlZCBvbi4KLSAqLwotY2xhc3MgQWFwdEFzc2V0cyA6IHB1YmxpYyBBYXB0RGlyCi17Ci1wdWJsaWM6Ci0gICAgQWFwdEFzc2V0cygpOwotICAgIHZpcnR1YWwgfkFhcHRBc3NldHMoKSB7IGRlbGV0ZSBtUmVzOyB9Ci0KLSAgICBjb25zdCBTdHJpbmc4JiBnZXRQYWNrYWdlKCkgY29uc3QgeyByZXR1cm4gbVBhY2thZ2U7IH0KLSAgICB2b2lkIHNldFBhY2thZ2UoY29uc3QgU3RyaW5nOCYgcGFja2FnZSkgewotICAgICAgICBtUGFja2FnZSA9IHBhY2thZ2U7Ci0gICAgICAgIG1TeW1ib2xzUHJpdmF0ZVBhY2thZ2UgPSBwYWNrYWdlOwotICAgICAgICBtSGF2ZVByaXZhdGVTeW1ib2xzID0gZmFsc2U7Ci0gICAgfQotCi0gICAgY29uc3QgU29ydGVkVmVjdG9yPEFhcHRHcm91cEVudHJ5PiYgZ2V0R3JvdXBFbnRyaWVzKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHN0YXR1c190IGFkZEZpbGUoY29uc3QgU3RyaW5nOCYgbmFtZSwgY29uc3Qgc3A8QWFwdEdyb3VwPiYgZmlsZSk7Ci0KLSAgICBzcDxBYXB0RmlsZT4gYWRkRmlsZShjb25zdCBTdHJpbmc4JiBmaWxlUGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBYXB0R3JvdXBFbnRyeSYgZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nOCYgc3JjRGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNwPEFhcHRHcm91cD4qIG91dEdyb3VwLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIHJlc1R5cGUpOwotCi0gICAgdm9pZCBhZGRSZXNvdXJjZShjb25zdCBTdHJpbmc4JiBsZWFmTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzgmIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4mIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiByZXNUeXBlKTsKLQotICAgIHZvaWQgYWRkR3JvdXBFbnRyeShjb25zdCBBYXB0R3JvdXBFbnRyeSYgZW50cnkpIHsgbUdyb3VwRW50cmllcy5hZGQoZW50cnkpOyB9Ci0gICAgCi0gICAgc3NpemVfdCBzbHVycEZyb21BcmdzKEJ1bmRsZSogYnVuZGxlKTsKLQotICAgIHNwPEFhcHRTeW1ib2xzPiBnZXRTeW1ib2xzRm9yKGNvbnN0IFN0cmluZzgmIG5hbWUpOwotCi0gICAgc3A8QWFwdFN5bWJvbHM+IGdldEphdmFTeW1ib2xzRm9yKGNvbnN0IFN0cmluZzgmIG5hbWUpOwotCi0gICAgc3RhdHVzX3QgYXBwbHlKYXZhU3ltYm9scygpOwotCi0gICAgY29uc3QgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPEFhcHRTeW1ib2xzPiA+JiBnZXRTeW1ib2xzKCkgY29uc3QgeyByZXR1cm4gbVN5bWJvbHM7IH0KLQotICAgIFN0cmluZzggZ2V0U3ltYm9sc1ByaXZhdGVQYWNrYWdlKCkgY29uc3QgeyByZXR1cm4gbVN5bWJvbHNQcml2YXRlUGFja2FnZTsgfQotICAgIHZvaWQgc2V0U3ltYm9sc1ByaXZhdGVQYWNrYWdlKGNvbnN0IFN0cmluZzgmIHBrZykgewotICAgICAgICBtU3ltYm9sc1ByaXZhdGVQYWNrYWdlID0gcGtnOwotICAgICAgICBtSGF2ZVByaXZhdGVTeW1ib2xzID0gbVN5bWJvbHNQcml2YXRlUGFja2FnZSAhPSBtUGFja2FnZTsKLSAgICB9Ci0KLSAgICBib29sIGhhdmVQcml2YXRlU3ltYm9scygpIGNvbnN0IHsgcmV0dXJuIG1IYXZlUHJpdmF0ZVN5bWJvbHM7IH0KLQotICAgIGJvb2wgaXNKYXZhU3ltYm9sKGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgc3ltLCBib29sIGluY2x1ZGVQcml2YXRlKSBjb25zdDsKLQotICAgIHN0YXR1c190IGJ1aWxkSW5jbHVkZWRSZXNvdXJjZXMoQnVuZGxlKiBidW5kbGUpOwotICAgIHN0YXR1c190IGFkZEluY2x1ZGVkUmVzb3VyY2VzKGNvbnN0IHNwPEFhcHRGaWxlPiYgZmlsZSk7Ci0gICAgY29uc3QgUmVzVGFibGUmIGdldEluY2x1ZGVkUmVzb3VyY2VzKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHByaW50KGNvbnN0IFN0cmluZzgmIHByZWZpeCkgY29uc3Q7Ci0KLSAgICBpbmxpbmUgY29uc3QgVmVjdG9yPHNwPEFhcHREaXI+ID4mIHJlc0RpcnMoKSBjb25zdCB7IHJldHVybiBtUmVzRGlyczsgfQotICAgIHNwPEFhcHREaXI+IHJlc0Rpcihjb25zdCBTdHJpbmc4JiBuYW1lKSBjb25zdDsKLQotICAgIGlubGluZSBzcDxBYXB0QXNzZXRzPiBnZXRPdmVybGF5KCkgeyByZXR1cm4gbU92ZXJsYXk7IH0KLSAgICBpbmxpbmUgdm9pZCBzZXRPdmVybGF5KHNwPEFhcHRBc3NldHM+JiBvdmVybGF5KSB7IG1PdmVybGF5ID0gb3ZlcmxheTsgfQotICAgIAotICAgIGlubGluZSBLZXllZFZlY3RvcjxTdHJpbmc4LCBzcDxSZXNvdXJjZVR5cGVTZXQ+ID4qIGdldFJlc291cmNlcygpIHsgcmV0dXJuIG1SZXM7IH0KLSAgICBpbmxpbmUgdm9pZCAKLSAgICAgICAgc2V0UmVzb3VyY2VzKEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPFJlc291cmNlVHlwZVNldD4gPiogcmVzKSB7IGRlbGV0ZSBtUmVzOyBtUmVzID0gcmVzOyB9Ci0KLSAgICBpbmxpbmUgc3A8RmlsZVBhdGhTdG9yZT4mIGdldEZ1bGxSZXNQYXRocygpIHsgcmV0dXJuIG1GdWxsUmVzUGF0aHM7IH0KLSAgICBpbmxpbmUgdm9pZAotICAgICAgICBzZXRGdWxsUmVzUGF0aHMoc3A8RmlsZVBhdGhTdG9yZT4mIHJlcykgeyBtRnVsbFJlc1BhdGhzID0gcmVzOyB9Ci0KLSAgICBpbmxpbmUgc3A8RmlsZVBhdGhTdG9yZT4mIGdldEZ1bGxBc3NldFBhdGhzKCkgeyByZXR1cm4gbUZ1bGxBc3NldFBhdGhzOyB9Ci0gICAgaW5saW5lIHZvaWQKLSAgICAgICAgc2V0RnVsbEFzc2V0UGF0aHMoc3A8RmlsZVBhdGhTdG9yZT4mIHJlcykgeyBtRnVsbEFzc2V0UGF0aHMgPSByZXM7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHNzaXplX3Qgc2x1cnBGdWxsVHJlZShCdW5kbGUqIGJ1bmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiBzcmNEaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWFwdEdyb3VwRW50cnkmIGtpbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nOCYgcmVzVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxGaWxlUGF0aFN0b3JlPiYgZnVsbFJlc1BhdGhzKTsKLQotICAgIHNzaXplX3Qgc2x1cnBSZXNvdXJjZVRyZWUoQnVuZGxlKiBidW5kbGUsIGNvbnN0IFN0cmluZzgmIHNyY0Rpcik7Ci0gICAgc3NpemVfdCBzbHVycFJlc291cmNlWmlwKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBjaGFyKiBmaWxlbmFtZSk7Ci0KLSAgICBzdGF0dXNfdCBmaWx0ZXIoQnVuZGxlKiBidW5kbGUpOwotCi0gICAgU3RyaW5nOCBtUGFja2FnZTsKLSAgICBTb3J0ZWRWZWN0b3I8QWFwdEdyb3VwRW50cnk+IG1Hcm91cEVudHJpZXM7Ci0gICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPEFhcHRTeW1ib2xzPiA+IG1TeW1ib2xzOwotICAgIERlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmc4LCBzcDxBYXB0U3ltYm9scz4gPiBtSmF2YVN5bWJvbHM7Ci0gICAgU3RyaW5nOCBtU3ltYm9sc1ByaXZhdGVQYWNrYWdlOwotICAgIGJvb2wgbUhhdmVQcml2YXRlU3ltYm9sczsKLQotICAgIFZlY3RvcjxzcDxBYXB0RGlyPiA+IG1SZXNEaXJzOwotCi0gICAgYm9vbCBtQ2hhbmdlZDsKLQotICAgIGJvb2wgbUhhdmVJbmNsdWRlZEFzc2V0czsKLSAgICBBc3NldE1hbmFnZXIgbUluY2x1ZGVkQXNzZXRzOwotCi0gICAgc3A8QWFwdEFzc2V0cz4gbU92ZXJsYXk7Ci0gICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgc3A8UmVzb3VyY2VUeXBlU2V0PiA+KiBtUmVzOwotCi0gICAgc3A8RmlsZVBhdGhTdG9yZT4gbUZ1bGxSZXNQYXRoczsKLSAgICBzcDxGaWxlUGF0aFN0b3JlPiBtRnVsbEFzc2V0UGF0aHM7Ci19OwotCi0jZW5kaWYgLy8gX19BQVBUX0FTU0VUU19ICi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvQW5kcm9pZC5tayBiL3Rvb2xzL2FhcHQvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk0OWY4ZS4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotIyAKLSMgQ29weXJpZ2h0IDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBBbmRyb2lkIEFzc2V0IFBhY2thZ2luZyBUb29sCi0jCi0KLSMgVGhpcyB0b29sIGlzIHByZWJ1aWx0IGlmIHdlJ3JlIGRvaW5nIGFuIGFwcC1vbmx5IGJ1aWxkLgotaWZlcSAoJChUQVJHRVRfQlVJTERfQVBQUyksKQotCi0KLWFhcHRfc3JjX2ZpbGVzIDo9IFwKLQlBYXB0QXNzZXRzLmNwcCBcCi0JQ29tbWFuZC5jcHAgXAotCUNydW5jaENhY2hlLmNwcCBcCi0JRmlsZUZpbmRlci5jcHAgXAotCU1haW4uY3BwIFwKLQlQYWNrYWdlLmNwcCBcCi0JU3RyaW5nUG9vbC5jcHAgXAotCVhNTE5vZGUuY3BwIFwKLQlSZXNvdXJjZUZpbHRlci5jcHAgXAotCVJlc291cmNlSWRDYWNoZS5jcHAgXAotCVJlc291cmNlVGFibGUuY3BwIFwKLQlJbWFnZXMuY3BwIFwKLQlSZXNvdXJjZS5jcHAgXAotICAgIHBzZXVkb2xvY2FsaXplLmNwcCBcCi0gICAgU291cmNlUG9zLmNwcCBcCi0JV29ya1F1ZXVlLmNwcCBcCi0gICAgWmlwRW50cnkuY3BwIFwKLSAgICBaaXBGaWxlLmNwcCBcCi0JcXNvcnRfcl9jb21wYXQuYwotCi1MT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVMgOj0gJChhYXB0X3NyY19maWxlcykKLQotTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tZm9ybWF0LXkyawotaWZlcSAoZGFyd2luLCQoSE9TVF9PUykpCi1MT0NBTF9DRkxBR1MgKz0gLURfREFSV0lOX1VOTElNSVRFRF9TVFJFQU1TCi1lbmRpZgotCi1MT0NBTF9DRkxBR1MgKz0gLURTVEFUSUNfQU5EUk9JREZXX0ZPUl9UT09MUwotCi1MT0NBTF9DX0lOQ0xVREVTICs9IGV4dGVybmFsL2xpYnBuZwotTE9DQUxfQ19JTkNMVURFUyArPSBleHRlcm5hbC96bGliCi0KLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gXAotCWxpYmFuZHJvaWRmdyBcCi0JbGlidXRpbHMgXAotCWxpYmN1dGlscyBcCi0JbGliZXhwYXQgXAotCWxpYnBuZyBcCi0JbGlibG9nIFwKLQlsaWJ6aXBhcmNoaXZlLWhvc3QKLQotaWZlcSAoJChIT1NUX09TKSxsaW51eCkKLUxPQ0FMX0xETElCUyArPSAtbHJ0IC1sZGwgLWxwdGhyZWFkCi1lbmRpZgotCi0jIFN0YXRpY2FsbHkgbGluayBsaWJ6IGZvciBNaW5HVyAoV2luIFNESyB1bmRlciBMaW51eCksCi0jIGFuZCBkeW5hbWljYWxseSBsaW5rIGZvciBhbGwgb3RoZXJzLgotaWZuZXEgKCQoc3RyaXAgJChVU0VfTUlOR1cpKSwpCi0gIExPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgKz0gbGliegotZWxzZQotICBMT0NBTF9MRExJQlMgKz0gLWx6Ci1lbmRpZgotCi1MT0NBTF9NT0RVTEUgOj0gYWFwdAotCi1pbmNsdWRlICQoQlVJTERfSE9TVF9FWEVDVVRBQkxFKQotCi0jIGFhcHQgZm9yIHJ1bm5pbmcgb24gdGhlIGRldmljZQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWlmbmVxICgkKFNES19PTkxZKSx0cnVlKQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX1NSQ19GSUxFUyA6PSAkKGFhcHRfc3JjX2ZpbGVzKQotCi1MT0NBTF9NT0RVTEUgOj0gYWFwdAotCi1MT0NBTF9DX0lOQ0xVREVTICs9IGJpb25pYwotTE9DQUxfQ19JTkNMVURFUyArPSBiaW9uaWMvbGlic3RkYysrL2luY2x1ZGUKLUxPQ0FMX0NfSU5DTFVERVMgKz0gZXh0ZXJuYWwvc3RscG9ydC9zdGxwb3J0Ci1MT0NBTF9DX0lOQ0xVREVTICs9IGV4dGVybmFsL2xpYnBuZwotTE9DQUxfQ19JTkNMVURFUyArPSBleHRlcm5hbC96bGliCi0KLUxPQ0FMX0NGTEFHUyArPSAtV25vLW5vbi12aXJ0dWFsLWR0b3IKLQotTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBcCi0gICAgICAgIGxpYmFuZHJvaWRmdyBcCi0gICAgICAgIGxpYnV0aWxzIFwKLSAgICAgICAgbGliY3V0aWxzIFwKLSAgICAgICAgbGlicG5nIFwKLSAgICAgICAgbGlibG9nIFwKLSAgICAgICAgbGliegotCi1MT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IFwKLSAgICAgICAgbGlic3RscG9ydF9zdGF0aWMgXAotICAgICAgICBsaWJleHBhdF9zdGF0aWMKLQotaW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCi1lbmRpZgotCi1lbmRpZiAjIFRBUkdFVF9CVUlMRF9BUFBTCmRpZmYgLS1naXQgYS90b29scy9hYXB0L0J1bmRsZS5oIGIvdG9vbHMvYWFwdC9CdW5kbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA4OWI5ZC4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L0J1bmRsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gU3RhdGUgYnVuZGxlLiAgVXNlZCB0byBwYXNzIGFyb3VuZCBzdHVmZiBsaWtlIGNvbW1hbmQtbGluZSBhcmdzLgotLy8KLSNpZm5kZWYgX19CVU5ETEVfSAotI2RlZmluZSBfX0JVTkRMRV9ICi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDx1dGlscy90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTGlzdC5oPgotI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KLQotZW51bSB7Ci0gICAgU0RLX0NVUENBS0UgPSAzLAotICAgIFNES19ET05VVCA9IDQsCi0gICAgU0RLX0VDTEFJUiA9IDUsCi0gICAgU0RLX0VDTEFJUl8wXzEgPSA2LAotICAgIFNES19NUjEgPSA3LAotICAgIFNES19GUk9ZTyA9IDgsCi0gICAgU0RLX0hPTkVZQ09NQl9NUjIgPSAxMywKLSAgICBTREtfSUNFX0NSRUFNX1NBTkRXSUNIID0gMTQsCi0gICAgU0RLX0lDRV9DUkVBTV9TQU5EV0lDSF9NUjEgPSAxNSwKLX07Ci0KLS8qCi0gKiBUaGluZ3Mgd2UgY2FuIGRvLgotICovCi10eXBlZGVmIGVudW0gQ29tbWFuZCB7Ci0gICAga0NvbW1hbmRVbmtub3duID0gMCwKLSAgICBrQ29tbWFuZFZlcnNpb24sCi0gICAga0NvbW1hbmRMaXN0LAotICAgIGtDb21tYW5kRHVtcCwKLSAgICBrQ29tbWFuZEFkZCwKLSAgICBrQ29tbWFuZFJlbW92ZSwKLSAgICBrQ29tbWFuZFBhY2thZ2UsCi0gICAga0NvbW1hbmRDcnVuY2gsCi0gICAga0NvbW1hbmRTaW5nbGVDcnVuY2gsCi19IENvbW1hbmQ7Ci0KLS8qCi0gKiBCdW5kbGUgb2YgZ29vZGllcywgaW5jbHVkaW5nIGV2ZXJ5dGhpbmcgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0gKi8KLWNsYXNzIEJ1bmRsZSB7Ci1wdWJsaWM6Ci0gICAgQnVuZGxlKHZvaWQpCi0gICAgICAgIDogbUNtZChrQ29tbWFuZFVua25vd24pLCBtVmVyYm9zZShmYWxzZSksIG1BbmRyb2lkTGlzdChmYWxzZSksCi0gICAgICAgICAgbUZvcmNlKGZhbHNlKSwgbUdyYXlzY2FsZVRvbGVyYW5jZSgwKSwgbU1ha2VQYWNrYWdlRGlycyhmYWxzZSksCi0gICAgICAgICAgbVVwZGF0ZShmYWxzZSksIG1FeHRlbmRpbmcoZmFsc2UpLAotICAgICAgICAgIG1SZXF1aXJlTG9jYWxpemF0aW9uKGZhbHNlKSwgbVBzZXVkb2xvY2FsaXplKGZhbHNlKSwKLSAgICAgICAgICBtV2FudFVURjE2KGZhbHNlKSwgbVZhbHVlcyhmYWxzZSksCi0gICAgICAgICAgbUNvbXByZXNzaW9uTWV0aG9kKDApLCBtSnVua1BhdGgoZmFsc2UpLCBtT3V0cHV0QVBLRmlsZShOVUxMKSwKLSAgICAgICAgICBtTWFuaWZlc3RQYWNrYWdlTmFtZU92ZXJyaWRlKE5VTEwpLCBtSW5zdHJ1bWVudGF0aW9uUGFja2FnZU5hbWVPdmVycmlkZShOVUxMKSwKLSAgICAgICAgICBtQXV0b0FkZE92ZXJsYXkoZmFsc2UpLCBtR2VuRGVwZW5kZW5jaWVzKGZhbHNlKSwKLSAgICAgICAgICBtQXNzZXRTb3VyY2VEaXIoTlVMTCksIAotICAgICAgICAgIG1DcnVuY2hlZE91dHB1dERpcihOVUxMKSwgbVByb2d1YXJkRmlsZShOVUxMKSwKLSAgICAgICAgICBtQW5kcm9pZE1hbmlmZXN0RmlsZShOVUxMKSwgbVB1YmxpY091dHB1dEZpbGUoTlVMTCksCi0gICAgICAgICAgbVJDbGFzc0RpcihOVUxMKSwgbVJlc291cmNlSW50ZXJtZWRpYXRlc0RpcihOVUxMKSwgbU1hbmlmZXN0TWluU2RrVmVyc2lvbihOVUxMKSwKLSAgICAgICAgICBtTWluU2RrVmVyc2lvbihOVUxMKSwgbVRhcmdldFNka1ZlcnNpb24oTlVMTCksIG1NYXhTZGtWZXJzaW9uKE5VTEwpLAotICAgICAgICAgIG1WZXJzaW9uQ29kZShOVUxMKSwgbVZlcnNpb25OYW1lKE5VTEwpLCBtQ3VzdG9tUGFja2FnZShOVUxMKSwgbUV4dHJhUGFja2FnZXMoTlVMTCksCi0gICAgICAgICAgbU1heFJlc1ZlcnNpb24oTlVMTCksIG1EZWJ1Z01vZGUoZmFsc2UpLCBtTm9uQ29uc3RhbnRJZChmYWxzZSksIG1Qcm9kdWN0KE5VTEwpLAotICAgICAgICAgIG1Vc2VDcnVuY2hDYWNoZShmYWxzZSksIG1FcnJvck9uRmFpbGVkSW5zZXJ0KGZhbHNlKSwgbU91dHB1dFRleHRTeW1ib2xzKE5VTEwpLAotICAgICAgICAgIG1TaW5nbGVDcnVuY2hJbnB1dEZpbGUoTlVMTCksIG1TaW5nbGVDcnVuY2hPdXRwdXRGaWxlKE5VTEwpLAotICAgICAgICAgIG1BcmdjKDApLCBtQXJndihOVUxMKQotICAgICAgICB7fQotICAgIH5CdW5kbGUodm9pZCkge30KLQotICAgIC8qCi0gICAgICogU2V0IHRoZSBjb21tYW5kIHZhbHVlLiAgUmV0dXJucyAiZmFsc2UiIGlmIGl0IHdhcyBwcmV2aW91c2x5IHNldC4KLSAgICAgKi8KLSAgICBDb21tYW5kIGdldENvbW1hbmQodm9pZCkgY29uc3QgeyByZXR1cm4gbUNtZDsgfQotICAgIHZvaWQgc2V0Q29tbWFuZChDb21tYW5kIGNtZCkgeyBtQ21kID0gY21kOyB9Ci0KLSAgICAvKgotICAgICAqIENvbW1hbmQgbW9kaWZpZXJzLiAgTm90IGFsbCBtb2RpZmllcnMgYXJlIGFwcHJvcHJpYXRlIGZvciBhbGwKLSAgICAgKiBjb21tYW5kcy4KLSAgICAgKi8KLSAgICBib29sIGdldFZlcmJvc2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbVZlcmJvc2U7IH0KLSAgICB2b2lkIHNldFZlcmJvc2UoYm9vbCB2YWwpIHsgbVZlcmJvc2UgPSB2YWw7IH0KLSAgICBib29sIGdldEFuZHJvaWRMaXN0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1BbmRyb2lkTGlzdDsgfQotICAgIHZvaWQgc2V0QW5kcm9pZExpc3QoYm9vbCB2YWwpIHsgbUFuZHJvaWRMaXN0ID0gdmFsOyB9Ci0gICAgYm9vbCBnZXRGb3JjZSh2b2lkKSBjb25zdCB7IHJldHVybiBtRm9yY2U7IH0KLSAgICB2b2lkIHNldEZvcmNlKGJvb2wgdmFsKSB7IG1Gb3JjZSA9IHZhbDsgfQotICAgIHZvaWQgc2V0R3JheXNjYWxlVG9sZXJhbmNlKGludCB2YWwpIHsgbUdyYXlzY2FsZVRvbGVyYW5jZSA9IHZhbDsgfQotICAgIGludCAgZ2V0R3JheXNjYWxlVG9sZXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbUdyYXlzY2FsZVRvbGVyYW5jZTsgfQotICAgIGJvb2wgZ2V0TWFrZVBhY2thZ2VEaXJzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1NYWtlUGFja2FnZURpcnM7IH0KLSAgICB2b2lkIHNldE1ha2VQYWNrYWdlRGlycyhib29sIHZhbCkgeyBtTWFrZVBhY2thZ2VEaXJzID0gdmFsOyB9Ci0gICAgYm9vbCBnZXRVcGRhdGUodm9pZCkgY29uc3QgeyByZXR1cm4gbVVwZGF0ZTsgfQotICAgIHZvaWQgc2V0VXBkYXRlKGJvb2wgdmFsKSB7IG1VcGRhdGUgPSB2YWw7IH0KLSAgICBib29sIGdldEV4dGVuZGluZyh2b2lkKSBjb25zdCB7IHJldHVybiBtRXh0ZW5kaW5nOyB9Ci0gICAgdm9pZCBzZXRFeHRlbmRpbmcoYm9vbCB2YWwpIHsgbUV4dGVuZGluZyA9IHZhbDsgfQotICAgIGJvb2wgZ2V0UmVxdWlyZUxvY2FsaXphdGlvbih2b2lkKSBjb25zdCB7IHJldHVybiBtUmVxdWlyZUxvY2FsaXphdGlvbjsgfQotICAgIHZvaWQgc2V0UmVxdWlyZUxvY2FsaXphdGlvbihib29sIHZhbCkgeyBtUmVxdWlyZUxvY2FsaXphdGlvbiA9IHZhbDsgfQotICAgIGJvb2wgZ2V0UHNldWRvbG9jYWxpemUodm9pZCkgY29uc3QgeyByZXR1cm4gbVBzZXVkb2xvY2FsaXplOyB9Ci0gICAgdm9pZCBzZXRQc2V1ZG9sb2NhbGl6ZShib29sIHZhbCkgeyBtUHNldWRvbG9jYWxpemUgPSB2YWw7IH0KLSAgICB2b2lkIHNldFdhbnRVVEYxNihib29sIHZhbCkgeyBtV2FudFVURjE2ID0gdmFsOyB9Ci0gICAgYm9vbCBnZXRWYWx1ZXModm9pZCkgY29uc3QgeyByZXR1cm4gbVZhbHVlczsgfQotICAgIHZvaWQgc2V0VmFsdWVzKGJvb2wgdmFsKSB7IG1WYWx1ZXMgPSB2YWw7IH0KLSAgICBpbnQgZ2V0Q29tcHJlc3Npb25NZXRob2Qodm9pZCkgY29uc3QgeyByZXR1cm4gbUNvbXByZXNzaW9uTWV0aG9kOyB9Ci0gICAgdm9pZCBzZXRDb21wcmVzc2lvbk1ldGhvZChpbnQgdmFsKSB7IG1Db21wcmVzc2lvbk1ldGhvZCA9IHZhbDsgfQotICAgIGJvb2wgZ2V0SnVua1BhdGgodm9pZCkgY29uc3QgeyByZXR1cm4gbUp1bmtQYXRoOyB9Ci0gICAgdm9pZCBzZXRKdW5rUGF0aChib29sIHZhbCkgeyBtSnVua1BhdGggPSB2YWw7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRPdXRwdXRBUEtGaWxlKCkgY29uc3QgeyByZXR1cm4gbU91dHB1dEFQS0ZpbGU7IH0KLSAgICB2b2lkIHNldE91dHB1dEFQS0ZpbGUoY29uc3QgY2hhciogdmFsKSB7IG1PdXRwdXRBUEtGaWxlID0gdmFsOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0TWFuaWZlc3RQYWNrYWdlTmFtZU92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbU1hbmlmZXN0UGFja2FnZU5hbWVPdmVycmlkZTsgfQotICAgIHZvaWQgc2V0TWFuaWZlc3RQYWNrYWdlTmFtZU92ZXJyaWRlKGNvbnN0IGNoYXIgKiB2YWwpIHsgbU1hbmlmZXN0UGFja2FnZU5hbWVPdmVycmlkZSA9IHZhbDsgfQotICAgIGNvbnN0IGNoYXIqIGdldEluc3RydW1lbnRhdGlvblBhY2thZ2VOYW1lT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtSW5zdHJ1bWVudGF0aW9uUGFja2FnZU5hbWVPdmVycmlkZTsgfQotICAgIHZvaWQgc2V0SW5zdHJ1bWVudGF0aW9uUGFja2FnZU5hbWVPdmVycmlkZShjb25zdCBjaGFyICogdmFsKSB7IG1JbnN0cnVtZW50YXRpb25QYWNrYWdlTmFtZU92ZXJyaWRlID0gdmFsOyB9Ci0gICAgYm9vbCBnZXRBdXRvQWRkT3ZlcmxheSgpIHsgcmV0dXJuIG1BdXRvQWRkT3ZlcmxheTsgfQotICAgIHZvaWQgc2V0QXV0b0FkZE92ZXJsYXkoYm9vbCB2YWwpIHsgbUF1dG9BZGRPdmVybGF5ID0gdmFsOyB9Ci0gICAgYm9vbCBnZXRHZW5EZXBlbmRlbmNpZXMoKSB7IHJldHVybiBtR2VuRGVwZW5kZW5jaWVzOyB9Ci0gICAgdm9pZCBzZXRHZW5EZXBlbmRlbmNpZXMoYm9vbCB2YWwpIHsgbUdlbkRlcGVuZGVuY2llcyA9IHZhbDsgfQotICAgIGJvb2wgZ2V0RXJyb3JPbkZhaWxlZEluc2VydCgpIHsgcmV0dXJuIG1FcnJvck9uRmFpbGVkSW5zZXJ0OyB9Ci0gICAgdm9pZCBzZXRFcnJvck9uRmFpbGVkSW5zZXJ0KGJvb2wgdmFsKSB7IG1FcnJvck9uRmFpbGVkSW5zZXJ0ID0gdmFsOyB9Ci0KLSAgICBib29sIGdldFVURjE2U3RyaW5nc09wdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIG1XYW50VVRGMTYgfHwgIWlzTWluU2RrQXRMZWFzdChTREtfRlJPWU8pOwotICAgIH0KLQotICAgIC8qCi0gICAgICogSW5wdXQgb3B0aW9ucy4KLSAgICAgKi8KLSAgICBjb25zdCBjaGFyKiBnZXRBc3NldFNvdXJjZURpcigpIGNvbnN0IHsgcmV0dXJuIG1Bc3NldFNvdXJjZURpcjsgfQotICAgIHZvaWQgc2V0QXNzZXRTb3VyY2VEaXIoY29uc3QgY2hhciogZGlyKSB7IG1Bc3NldFNvdXJjZURpciA9IGRpcjsgfQotICAgIGNvbnN0IGNoYXIqIGdldENydW5jaGVkT3V0cHV0RGlyKCkgY29uc3QgeyByZXR1cm4gbUNydW5jaGVkT3V0cHV0RGlyOyB9Ci0gICAgdm9pZCBzZXRDcnVuY2hlZE91dHB1dERpcihjb25zdCBjaGFyKiBkaXIpIHsgbUNydW5jaGVkT3V0cHV0RGlyID0gZGlyOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0UHJvZ3VhcmRGaWxlKCkgY29uc3QgeyByZXR1cm4gbVByb2d1YXJkRmlsZTsgfQotICAgIHZvaWQgc2V0UHJvZ3VhcmRGaWxlKGNvbnN0IGNoYXIqIGZpbGUpIHsgbVByb2d1YXJkRmlsZSA9IGZpbGU7IH0KLSAgICBjb25zdCBhbmRyb2lkOjpWZWN0b3I8Y29uc3QgY2hhcio+JiBnZXRSZXNvdXJjZVNvdXJjZURpcnMoKSBjb25zdCB7IHJldHVybiBtUmVzb3VyY2VTb3VyY2VEaXJzOyB9Ci0gICAgdm9pZCBhZGRSZXNvdXJjZVNvdXJjZURpcihjb25zdCBjaGFyKiBkaXIpIHsgbVJlc291cmNlU291cmNlRGlycy5pbnNlcnRBdChkaXIsMCk7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRBbmRyb2lkTWFuaWZlc3RGaWxlKCkgY29uc3QgeyByZXR1cm4gbUFuZHJvaWRNYW5pZmVzdEZpbGU7IH0KLSAgICB2b2lkIHNldEFuZHJvaWRNYW5pZmVzdEZpbGUoY29uc3QgY2hhciogZmlsZSkgeyBtQW5kcm9pZE1hbmlmZXN0RmlsZSA9IGZpbGU7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRQdWJsaWNPdXRwdXRGaWxlKCkgY29uc3QgeyByZXR1cm4gbVB1YmxpY091dHB1dEZpbGU7IH0KLSAgICB2b2lkIHNldFB1YmxpY091dHB1dEZpbGUoY29uc3QgY2hhciogZmlsZSkgeyBtUHVibGljT3V0cHV0RmlsZSA9IGZpbGU7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRSQ2xhc3NEaXIoKSBjb25zdCB7IHJldHVybiBtUkNsYXNzRGlyOyB9Ci0gICAgdm9pZCBzZXRSQ2xhc3NEaXIoY29uc3QgY2hhciogZGlyKSB7IG1SQ2xhc3NEaXIgPSBkaXI7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRDb25maWd1cmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1Db25maWd1cmF0aW9ucy5zaXplKCkgPiAwID8gbUNvbmZpZ3VyYXRpb25zLnN0cmluZygpIDogTlVMTDsgfQotICAgIHZvaWQgYWRkQ29uZmlndXJhdGlvbnMoY29uc3QgY2hhciogdmFsKSB7IGlmIChtQ29uZmlndXJhdGlvbnMuc2l6ZSgpID4gMCkgeyBtQ29uZmlndXJhdGlvbnMuYXBwZW5kKCIsIik7IG1Db25maWd1cmF0aW9ucy5hcHBlbmQodmFsKTsgfSBlbHNlIHsgbUNvbmZpZ3VyYXRpb25zID0gdmFsOyB9IH0KLSAgICBjb25zdCBjaGFyKiBnZXRQcmVmZXJyZWRDb25maWd1cmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1QcmVmZXJyZWRDb25maWd1cmF0aW9ucy5zaXplKCkgPiAwID8gbVByZWZlcnJlZENvbmZpZ3VyYXRpb25zLnN0cmluZygpIDogTlVMTDsgfQotICAgIHZvaWQgYWRkUHJlZmVycmVkQ29uZmlndXJhdGlvbnMoY29uc3QgY2hhciogdmFsKSB7IGlmIChtUHJlZmVycmVkQ29uZmlndXJhdGlvbnMuc2l6ZSgpID4gMCkgeyBtUHJlZmVycmVkQ29uZmlndXJhdGlvbnMuYXBwZW5kKCIsIik7IG1QcmVmZXJyZWRDb25maWd1cmF0aW9ucy5hcHBlbmQodmFsKTsgfSBlbHNlIHsgbVByZWZlcnJlZENvbmZpZ3VyYXRpb25zID0gdmFsOyB9IH0KLSAgICBjb25zdCBjaGFyKiBnZXRSZXNvdXJjZUludGVybWVkaWF0ZXNEaXIoKSBjb25zdCB7IHJldHVybiBtUmVzb3VyY2VJbnRlcm1lZGlhdGVzRGlyOyB9Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUludGVybWVkaWF0ZXNEaXIoY29uc3QgY2hhciogZGlyKSB7IG1SZXNvdXJjZUludGVybWVkaWF0ZXNEaXIgPSBkaXI7IH0KLSAgICBjb25zdCBhbmRyb2lkOjpWZWN0b3I8Y29uc3QgY2hhcio+JiBnZXRQYWNrYWdlSW5jbHVkZXMoKSBjb25zdCB7IHJldHVybiBtUGFja2FnZUluY2x1ZGVzOyB9Ci0gICAgdm9pZCBhZGRQYWNrYWdlSW5jbHVkZShjb25zdCBjaGFyKiBmaWxlKSB7IG1QYWNrYWdlSW5jbHVkZXMuYWRkKGZpbGUpOyB9Ci0gICAgY29uc3QgYW5kcm9pZDo6VmVjdG9yPGNvbnN0IGNoYXIqPiYgZ2V0SmFyRmlsZXMoKSBjb25zdCB7IHJldHVybiBtSmFyRmlsZXM7IH0KLSAgICB2b2lkIGFkZEphckZpbGUoY29uc3QgY2hhciogZmlsZSkgeyBtSmFyRmlsZXMuYWRkKGZpbGUpOyB9Ci0gICAgY29uc3QgYW5kcm9pZDo6VmVjdG9yPGNvbnN0IGNoYXIqPiYgZ2V0Tm9Db21wcmVzc0V4dGVuc2lvbnMoKSBjb25zdCB7IHJldHVybiBtTm9Db21wcmVzc0V4dGVuc2lvbnM7IH0KLSAgICB2b2lkIGFkZE5vQ29tcHJlc3NFeHRlbnNpb24oY29uc3QgY2hhciogZXh0KSB7IG1Ob0NvbXByZXNzRXh0ZW5zaW9ucy5hZGQoZXh0KTsgfQotCi0gICAgY29uc3QgY2hhciogIGdldE1hbmlmZXN0TWluU2RrVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1NYW5pZmVzdE1pblNka1ZlcnNpb247IH0KLSAgICB2b2lkIHNldE1hbmlmZXN0TWluU2RrVmVyc2lvbihjb25zdCBjaGFyKiAgdmFsKSB7IG1NYW5pZmVzdE1pblNka1ZlcnNpb24gPSB2YWw7IH0KLSAgICBjb25zdCBjaGFyKiAgZ2V0TWluU2RrVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1NaW5TZGtWZXJzaW9uOyB9Ci0gICAgdm9pZCBzZXRNaW5TZGtWZXJzaW9uKGNvbnN0IGNoYXIqICB2YWwpIHsgbU1pblNka1ZlcnNpb24gPSB2YWw7IH0KLSAgICBjb25zdCBjaGFyKiAgZ2V0VGFyZ2V0U2RrVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1UYXJnZXRTZGtWZXJzaW9uOyB9Ci0gICAgdm9pZCBzZXRUYXJnZXRTZGtWZXJzaW9uKGNvbnN0IGNoYXIqICB2YWwpIHsgbVRhcmdldFNka1ZlcnNpb24gPSB2YWw7IH0KLSAgICBjb25zdCBjaGFyKiAgZ2V0TWF4U2RrVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1NYXhTZGtWZXJzaW9uOyB9Ci0gICAgdm9pZCBzZXRNYXhTZGtWZXJzaW9uKGNvbnN0IGNoYXIqICB2YWwpIHsgbU1heFNka1ZlcnNpb24gPSB2YWw7IH0KLSAgICBjb25zdCBjaGFyKiAgZ2V0VmVyc2lvbkNvZGUoKSBjb25zdCB7IHJldHVybiBtVmVyc2lvbkNvZGU7IH0KLSAgICB2b2lkIHNldFZlcnNpb25Db2RlKGNvbnN0IGNoYXIqICB2YWwpIHsgbVZlcnNpb25Db2RlID0gdmFsOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0VmVyc2lvbk5hbWUoKSBjb25zdCB7IHJldHVybiBtVmVyc2lvbk5hbWU7IH0KLSAgICB2b2lkIHNldFZlcnNpb25OYW1lKGNvbnN0IGNoYXIqIHZhbCkgeyBtVmVyc2lvbk5hbWUgPSB2YWw7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRDdXN0b21QYWNrYWdlKCkgY29uc3QgeyByZXR1cm4gbUN1c3RvbVBhY2thZ2U7IH0KLSAgICB2b2lkIHNldEN1c3RvbVBhY2thZ2UoY29uc3QgY2hhciogdmFsKSB7IG1DdXN0b21QYWNrYWdlID0gdmFsOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0RXh0cmFQYWNrYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1FeHRyYVBhY2thZ2VzOyB9Ci0gICAgdm9pZCBzZXRFeHRyYVBhY2thZ2VzKGNvbnN0IGNoYXIqIHZhbCkgeyBtRXh0cmFQYWNrYWdlcyA9IHZhbDsgfQotICAgIGNvbnN0IGNoYXIqIGdldE1heFJlc1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtTWF4UmVzVmVyc2lvbjsgfQotICAgIHZvaWQgc2V0TWF4UmVzVmVyc2lvbihjb25zdCBjaGFyICogdmFsKSB7IG1NYXhSZXNWZXJzaW9uID0gdmFsOyB9Ci0gICAgYm9vbCBnZXREZWJ1Z01vZGUoKSBjb25zdCB7IHJldHVybiBtRGVidWdNb2RlOyB9Ci0gICAgdm9pZCBzZXREZWJ1Z01vZGUoYm9vbCB2YWwpIHsgbURlYnVnTW9kZSA9IHZhbDsgfQotICAgIGJvb2wgZ2V0Tm9uQ29uc3RhbnRJZCgpIGNvbnN0IHsgcmV0dXJuIG1Ob25Db25zdGFudElkOyB9Ci0gICAgdm9pZCBzZXROb25Db25zdGFudElkKGJvb2wgdmFsKSB7IG1Ob25Db25zdGFudElkID0gdmFsOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0UHJvZHVjdCgpIGNvbnN0IHsgcmV0dXJuIG1Qcm9kdWN0OyB9Ci0gICAgdm9pZCBzZXRQcm9kdWN0KGNvbnN0IGNoYXIgKiB2YWwpIHsgbVByb2R1Y3QgPSB2YWw7IH0KLSAgICB2b2lkIHNldFVzZUNydW5jaENhY2hlKGJvb2wgdmFsKSB7IG1Vc2VDcnVuY2hDYWNoZSA9IHZhbDsgfQotICAgIGJvb2wgZ2V0VXNlQ3J1bmNoQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtVXNlQ3J1bmNoQ2FjaGU7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRPdXRwdXRUZXh0U3ltYm9scygpIGNvbnN0IHsgcmV0dXJuIG1PdXRwdXRUZXh0U3ltYm9sczsgfQotICAgIHZvaWQgc2V0T3V0cHV0VGV4dFN5bWJvbHMoY29uc3QgY2hhciogdmFsKSB7IG1PdXRwdXRUZXh0U3ltYm9scyA9IHZhbDsgfQotICAgIGNvbnN0IGNoYXIqIGdldFNpbmdsZUNydW5jaElucHV0RmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1TaW5nbGVDcnVuY2hJbnB1dEZpbGU7IH0KLSAgICB2b2lkIHNldFNpbmdsZUNydW5jaElucHV0RmlsZShjb25zdCBjaGFyKiB2YWwpIHsgbVNpbmdsZUNydW5jaElucHV0RmlsZSA9IHZhbDsgfQotICAgIGNvbnN0IGNoYXIqIGdldFNpbmdsZUNydW5jaE91dHB1dEZpbGUoKSBjb25zdCB7IHJldHVybiBtU2luZ2xlQ3J1bmNoT3V0cHV0RmlsZTsgfQotICAgIHZvaWQgc2V0U2luZ2xlQ3J1bmNoT3V0cHV0RmlsZShjb25zdCBjaGFyKiB2YWwpIHsgbVNpbmdsZUNydW5jaE91dHB1dEZpbGUgPSB2YWw7IH0KLQotICAgIC8qCi0gICAgICogU2V0IGFuZCBnZXQgdGhlIGZpbGUgc3BlY2lmaWNhdGlvbi4KLSAgICAgKgotICAgICAqIE5vdGUgdGhpcyBkb2VzIE5PVCBtYWtlIGEgY29weSBvZiBhcmd2LgotICAgICAqLwotICAgIHZvaWQgc2V0RmlsZVNwZWMoY2hhciogY29uc3QgYXJndltdLCBpbnQgYXJnYykgewotICAgICAgICBtQXJnYyA9IGFyZ2M7Ci0gICAgICAgIG1Bcmd2ID0gYXJndjsKLSAgICB9Ci0gICAgaW50IGdldEZpbGVTcGVjQ291bnQodm9pZCkgY29uc3QgeyByZXR1cm4gbUFyZ2M7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRGaWxlU3BlY0VudHJ5KGludCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1Bcmd2W2lkeF07IH0KLSAgICB2b2lkIGVhdEFyZ3MoaW50IG4pIHsKLSAgICAgICAgaWYgKG4gPiBtQXJnYykgbiA9IG1BcmdjOwotICAgICAgICBtQXJndiArPSBuOwotICAgICAgICBtQXJnYyAtPSBuOwotICAgIH0KLQotI2lmIDAKLSAgICAvKgotICAgICAqIFBhY2thZ2UgY291bnQuICBOb3RoaW5nIHRvIGRvIHdpdGggYW55dGhpbmcgZWxzZSBoZXJlOyB0aGlzIGlzCi0gICAgICoganVzdCBhIGNvbnZlbmllbnQgcGxhY2UgdG8gc3R1ZmYgaXQgc28gd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIGl0Ci0gICAgICogYXJvdW5kIGV2ZXJ5d2hlcmUuCi0gICAgICovCi0gICAgaW50IGdldFBhY2thZ2VDb3VudCh2b2lkKSBjb25zdCB7IHJldHVybiBtUGFja2FnZUNvdW50OyB9Ci0gICAgdm9pZCBzZXRQYWNrYWdlQ291bnQoaW50IHZhbCkgeyBtUGFja2FnZUNvdW50ID0gdmFsOyB9Ci0jZW5kaWYKLQotICAgIC8qIENlcnRhaW4gZmVhdHVyZXMgbWF5IG9ubHkgYmUgYXZhaWxhYmxlIG9uIGEgc3BlY2lmaWMgU0RLIGxldmVsIG9yCi0gICAgICogYWJvdmUuIFNESyBsZXZlbHMgdGhhdCBoYXZlIGEgbm9uLW51bWVyaWMgaWRlbnRpZmllciBhcmUgYXNzdW1lZAotICAgICAqIHRvIGJlIG5ld2VyIHRoYW4gYW55IFNESyBsZXZlbCB0aGF0IGhhcyBhIG51bWJlciBkZXNpZ25hdGVkLgotICAgICAqLwotICAgIGJvb2wgaXNNaW5TZGtBdExlYXN0KGludCBkZXNpcmVkKSB7Ci0gICAgICAgIC8qIElmIHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpZXMgYSBtaW5TZGtWZXJzaW9uIGluIHRoZSBtYW5pZmVzdAotICAgICAgICAgKiB0aGVuIHVzZSB0aGF0LiBPdGhlcndpc2UsIGNoZWNrIHdoYXQgdGhlIHVzZXIgc3BlY2lmaWVkIG9uCi0gICAgICAgICAqIHRoZSBjb21tYW5kIGxpbmUuIElmIG5laXRoZXIsIGl0J3Mgbm90IGF2YWlsYWJsZSBzaW5jZQotICAgICAgICAgKiB0aGUgbWluaW11bSBTREsgdmVyc2lvbiBpcyBhc3N1bWVkIHRvIGJlIDEuCi0gICAgICAgICAqLwotICAgICAgICBjb25zdCBjaGFyICptaW5WZXI7Ci0gICAgICAgIGlmIChtTWFuaWZlc3RNaW5TZGtWZXJzaW9uICE9IE5VTEwpIHsKLSAgICAgICAgICAgIG1pblZlciA9IG1NYW5pZmVzdE1pblNka1ZlcnNpb247Ci0gICAgICAgIH0gZWxzZSBpZiAobU1pblNka1ZlcnNpb24gIT0gTlVMTCkgewotICAgICAgICAgICAgbWluVmVyID0gbU1pblNka1ZlcnNpb247Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjaGFyICplbmQ7Ci0gICAgICAgIGludCBtaW5TZGtOdW0gPSAoaW50KXN0cnRvbChtaW5WZXIsICZlbmQsIDApOwotICAgICAgICBpZiAoKmVuZCA9PSAnXDAnKSB7Ci0gICAgICAgICAgICBpZiAobWluU2RrTnVtIDwgZGVzaXJlZCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgLyogY29tbWFuZHMgJiBtb2RpZmllcnMgKi8KLSAgICBDb21tYW5kICAgICBtQ21kOwotICAgIGJvb2wgICAgICAgIG1WZXJib3NlOwotICAgIGJvb2wgICAgICAgIG1BbmRyb2lkTGlzdDsKLSAgICBib29sICAgICAgICBtRm9yY2U7Ci0gICAgaW50ICAgICAgICAgbUdyYXlzY2FsZVRvbGVyYW5jZTsKLSAgICBib29sICAgICAgICBtTWFrZVBhY2thZ2VEaXJzOwotICAgIGJvb2wgICAgICAgIG1VcGRhdGU7Ci0gICAgYm9vbCAgICAgICAgbUV4dGVuZGluZzsKLSAgICBib29sICAgICAgICBtUmVxdWlyZUxvY2FsaXphdGlvbjsKLSAgICBib29sICAgICAgICBtUHNldWRvbG9jYWxpemU7Ci0gICAgYm9vbCAgICAgICAgbVdhbnRVVEYxNjsKLSAgICBib29sICAgICAgICBtVmFsdWVzOwotICAgIGludCAgICAgICAgIG1Db21wcmVzc2lvbk1ldGhvZDsKLSAgICBib29sICAgICAgICBtSnVua1BhdGg7Ci0gICAgY29uc3QgY2hhciogbU91dHB1dEFQS0ZpbGU7Ci0gICAgY29uc3QgY2hhciogbU1hbmlmZXN0UGFja2FnZU5hbWVPdmVycmlkZTsKLSAgICBjb25zdCBjaGFyKiBtSW5zdHJ1bWVudGF0aW9uUGFja2FnZU5hbWVPdmVycmlkZTsKLSAgICBib29sICAgICAgICBtQXV0b0FkZE92ZXJsYXk7Ci0gICAgYm9vbCAgICAgICAgbUdlbkRlcGVuZGVuY2llczsKLSAgICBjb25zdCBjaGFyKiBtQXNzZXRTb3VyY2VEaXI7Ci0gICAgY29uc3QgY2hhciogbUNydW5jaGVkT3V0cHV0RGlyOwotICAgIGNvbnN0IGNoYXIqIG1Qcm9ndWFyZEZpbGU7Ci0gICAgY29uc3QgY2hhciogbUFuZHJvaWRNYW5pZmVzdEZpbGU7Ci0gICAgY29uc3QgY2hhciogbVB1YmxpY091dHB1dEZpbGU7Ci0gICAgY29uc3QgY2hhciogbVJDbGFzc0RpcjsKLSAgICBjb25zdCBjaGFyKiBtUmVzb3VyY2VJbnRlcm1lZGlhdGVzRGlyOwotICAgIGFuZHJvaWQ6OlN0cmluZzggbUNvbmZpZ3VyYXRpb25zOwotICAgIGFuZHJvaWQ6OlN0cmluZzggbVByZWZlcnJlZENvbmZpZ3VyYXRpb25zOwotICAgIGFuZHJvaWQ6OlZlY3Rvcjxjb25zdCBjaGFyKj4gbVBhY2thZ2VJbmNsdWRlczsKLSAgICBhbmRyb2lkOjpWZWN0b3I8Y29uc3QgY2hhcio+IG1KYXJGaWxlczsKLSAgICBhbmRyb2lkOjpWZWN0b3I8Y29uc3QgY2hhcio+IG1Ob0NvbXByZXNzRXh0ZW5zaW9uczsKLSAgICBhbmRyb2lkOjpWZWN0b3I8Y29uc3QgY2hhcio+IG1SZXNvdXJjZVNvdXJjZURpcnM7Ci0KLSAgICBjb25zdCBjaGFyKiBtTWFuaWZlc3RNaW5TZGtWZXJzaW9uOwotICAgIGNvbnN0IGNoYXIqIG1NaW5TZGtWZXJzaW9uOwotICAgIGNvbnN0IGNoYXIqIG1UYXJnZXRTZGtWZXJzaW9uOwotICAgIGNvbnN0IGNoYXIqIG1NYXhTZGtWZXJzaW9uOwotICAgIGNvbnN0IGNoYXIqIG1WZXJzaW9uQ29kZTsKLSAgICBjb25zdCBjaGFyKiBtVmVyc2lvbk5hbWU7Ci0gICAgY29uc3QgY2hhciogbUN1c3RvbVBhY2thZ2U7Ci0gICAgY29uc3QgY2hhciogbUV4dHJhUGFja2FnZXM7Ci0gICAgY29uc3QgY2hhciogbU1heFJlc1ZlcnNpb247Ci0gICAgYm9vbCAgICAgICAgbURlYnVnTW9kZTsKLSAgICBib29sICAgICAgICBtTm9uQ29uc3RhbnRJZDsKLSAgICBjb25zdCBjaGFyKiBtUHJvZHVjdDsKLSAgICBib29sICAgICAgICBtVXNlQ3J1bmNoQ2FjaGU7Ci0gICAgYm9vbCAgICAgICAgbUVycm9yT25GYWlsZWRJbnNlcnQ7Ci0gICAgY29uc3QgY2hhciogbU91dHB1dFRleHRTeW1ib2xzOwotICAgIGNvbnN0IGNoYXIqIG1TaW5nbGVDcnVuY2hJbnB1dEZpbGU7Ci0gICAgY29uc3QgY2hhciogbVNpbmdsZUNydW5jaE91dHB1dEZpbGU7Ci0KLSAgICAvKiBmaWxlIHNwZWNpZmljYXRpb24gKi8KLSAgICBpbnQgICAgICAgICBtQXJnYzsKLSAgICBjaGFyKiBjb25zdCogbUFyZ3Y7Ci0KLSNpZiAwCi0gICAgLyogbWlzYyBzdHVmZiAqLwotICAgIGludCAgICAgICAgIG1QYWNrYWdlQ291bnQ7Ci0jZW5kaWYKLQotfTsKLQotI2VuZGlmIC8vIF9fQlVORExFX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvQ2FjaGVVcGRhdGVyLmggYi90b29scy9hYXB0L0NhY2hlVXBkYXRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTY1NTg5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvQ2FjaGVVcGRhdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBBYnN0cmFjdGlvbiBvZiBjYWxscyB0byBzeXN0ZW0gdG8gbWFrZSBkaXJlY3RvcmllcyBhbmQgZGVsZXRlIGZpbGVzIGFuZAotLy8gd3JhcHBlciB0byBpbWFnZSBwcm9jZXNzaW5nLgotCi0jaWZuZGVmIENBQ0hFX1VQREFURVJfSAotI2RlZmluZSBDQUNIRV9VUERBVEVSX0gKLQotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAiSW1hZ2VzLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi0vKiogQ2FjaGVVcGRhdGVyCi0gKiAgVGhpcyBpcyBhIHB1cmUgdmlydHVhbCBjbGFzcyB0aGF0IGRlY2xhcmVzIGFic3RyYWN0aW9ucyBvZiBmdW5jdGlvbnMgdXNlZnVsCi0gKiAgZm9yIG1hbmFnaW5nIGEgY2FjaGUgZmlsZXMuIFRoaXMgbWFuYWdlciBpcyBzZXQgdXAgdG8gYmUgdXNlZCBpbiBhCi0gKiAgbWlycm9yIGNhY2hlIHdoZXJlIHRoZSBzb3VyY2UgdHJlZSBpcyBkdXBsaWNhdGVkIGFuZCBmaWxsZWQgd2l0aCBwcm9jZXNzZWQKLSAqICBpbWFnZXMuIFRoaXMgY2xhc3MgaXMgYWJzdHJhY3RlZCB0byBhbGxvdyBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24gZHVyaW5nCi0gKiAgdW5pdCB0ZXN0aW5nLgotICogIFVzYWdlOgotICogICAgICBUbyB1cGRhdGUvYWRkIGEgZmlsZSB0byB0aGUgY2FjaGUsIGNhbGwgcHJvY2Vzc0ltYWdlCi0gKiAgICAgIFRvIHJlbW92ZSBhIGZpbGUgZnJvbSB0aGUgY2FjaGUsIGNhbGwgZGVsZXRlRmlsZQotICovCi1jbGFzcyBDYWNoZVVwZGF0ZXIgewotcHVibGljOgotICAgIC8vIE1ha2Ugc3VyZSBhbGwgdGhlIGRpcmVjdG9yaWVzIGFsb25nIHRoaXMgcGF0aCBleGlzdAotICAgIHZpcnR1YWwgdm9pZCBlbnN1cmVEaXJlY3Rvcmllc0V4aXN0KFN0cmluZzggcGF0aCkgPSAwOwotCi0gICAgLy8gRGVsZXRlIGEgZmlsZQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGaWxlKFN0cmluZzggcGF0aCkgPSAwOwotCi0gICAgLy8gUHJvY2VzcyBhbiBpbWFnZSBmcm9tIHNvdXJjZSBvdXQgdG8gZGVzdAotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzSW1hZ2UoU3RyaW5nOCBzb3VyY2UsIFN0cmluZzggZGVzdCkgPSAwOwotcHJpdmF0ZToKLX07Ci0KLS8qKiBTeXN0ZW1DYWNoZVVwZGF0ZXIKLSAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGFib3ZlIHZpcnR1YWwgY2FjaGUgdXBkYXRlciBzcGVjaWZpY2F0aW9uLgotICogVGhpcyBpbXBsZW1lbnRhdGlvbnMgaGl0cyB0aGUgZmlsZXN5c3RlbSB0byBtYW5hZ2UgYSBjYWNoZSBhbmQgY2FsbHMgb3V0IHRvCi0gKiB0aGUgUE5HIGNydW5jaGluZyBpbiBpbWFnZXMuaCB0byBwcm9jZXNzIGltYWdlcyBvdXQgdG8gaXRzIGNhY2hlIGNvbXBvbmVudHMuCi0gKi8KLWNsYXNzIFN5c3RlbUNhY2hlVXBkYXRlciA6IHB1YmxpYyBDYWNoZVVwZGF0ZXIgewotcHVibGljOgotICAgIC8vIENvbnN0cnVjdG9yIHRvIHNldCBidW5kbGUgdG8gcGFzcyB0byBwcmVQcm9jZXNzSW1hZ2UKLSAgICBTeXN0ZW1DYWNoZVVwZGF0ZXIgKEJ1bmRsZSogYikKLSAgICAgICAgOiBidW5kbGUoYikgeyB9OwotCi0gICAgLy8gTWFrZSBzdXJlIGFsbCB0aGUgZGlyZWN0b3JpZXMgYWxvbmcgdGhpcyBwYXRoIGV4aXN0Ci0gICAgdmlydHVhbCB2b2lkIGVuc3VyZURpcmVjdG9yaWVzRXhpc3QoU3RyaW5nOCBwYXRoKQotICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZ1bGx5IHF1YWxpZmllZCBwYXRoCi0gICAgICAgIFN0cmluZzggZXhpc3RzUGF0aDsKLSAgICAgICAgU3RyaW5nOCB0b0NyZWF0ZTsKLSAgICAgICAgU3RyaW5nOCByZW1haW5zOwotICAgICAgICBzdHJ1Y3Qgc3RhdCBzOwotCi0gICAgICAgIC8vIENoZWNrIG9wdG9taXN0aWNhbGx5IHRvIHNlZSBpZiBhbGwgZGlyZWN0b3JpZXMgZXhpc3QuCi0gICAgICAgIC8vIElmIHNvbWV0aGluZyBpbiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0LCB0aGVuIHdhbGsgdGhlIHBhdGggYmFja3dhcmRzCi0gICAgICAgIC8vIGFuZCBmaW5kIHRoZSBwbGFjZSB0byBzdGFydCBjcmVhdGluZyBkaXJlY3RvcmllcyBmb3J3YXJkLgotICAgICAgICBpZiAoc3RhdChwYXRoLnN0cmluZygpLCZzKSA9PSAtMSkgewotICAgICAgICAgICAgLy8gV2FsayBiYWNrd2FyZHMgdG8gZmluZCBwbGFjZSB0byBzdGFydCBjcmVhdGluZyBkaXJlY3RvcmllcwotICAgICAgICAgICAgZXhpc3RzUGF0aCA9IHBhdGg7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgLy8gQXMgd2UgcmVtb3ZlIHRoZSBlbmQgb2YgZXhpc3RzUGF0aCBhZGQgaXQgdG8KLSAgICAgICAgICAgICAgICAvLyB0aGUgc3RyaW5nIG9mIHBhdGhzIHRvIGNyZWF0ZS4KLSAgICAgICAgICAgICAgICB0b0NyZWF0ZSA9IGV4aXN0c1BhdGguZ2V0UGF0aExlYWYoKS5hcHBlbmRQYXRoKHRvQ3JlYXRlKTsKLSAgICAgICAgICAgICAgICBleGlzdHNQYXRoID0gZXhpc3RzUGF0aC5nZXRQYXRoRGlyKCk7Ci0gICAgICAgICAgICB9IHdoaWxlIChzdGF0KGV4aXN0c1BhdGguc3RyaW5nKCksJnMpID09IC0xKTsKLQotICAgICAgICAgICAgLy8gV2FsayBmb3J3YXJkcyBhbmQgYnVpbGQgZGlyZWN0b3JpZXMgYXMgd2UgZ28KLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHNlZ21lbnQgb2YgdGhlIHBhdGgKLSAgICAgICAgICAgICAgICBleGlzdHNQYXRoLmFwcGVuZFBhdGgodG9DcmVhdGUud2Fsa1BhdGgoJnJlbWFpbnMpKTsKLSAgICAgICAgICAgICAgICB0b0NyZWF0ZSA9IHJlbWFpbnM7Ci0jaWZkZWYgSEFWRV9NU19DX1JVTlRJTUUKLSAgICAgICAgICAgICAgICBfbWtkaXIoZXhpc3RzUGF0aC5zdHJpbmcoKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIG1rZGlyKGV4aXN0c1BhdGguc3RyaW5nKCksIFNfSVJVU1J8U19JV1VTUnxTX0lYVVNSfFNfSVJHUlB8U19JWEdSUCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0gd2hpbGUgKHJlbWFpbnMubGVuZ3RoKCkgPiAwKTsKLSAgICAgICAgfSAvL2lmCi0gICAgfTsKLQotICAgIC8vIERlbGV0ZSBhIGZpbGUKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRmlsZShTdHJpbmc4IHBhdGgpCi0gICAgewotICAgICAgICBpZiAocmVtb3ZlKHBhdGguc3RyaW5nKCkpICE9IDApCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiRVJST1IgREVMRVRJTkcgJXNcbiIscGF0aC5zdHJpbmcoKSk7Ci0gICAgfTsKLQotICAgIC8vIFByb2Nlc3MgYW4gaW1hZ2UgZnJvbSBzb3VyY2Ugb3V0IHRvIGRlc3QKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0ltYWdlKFN0cmluZzggc291cmNlLCBTdHJpbmc4IGRlc3QpCi0gICAgewotICAgICAgICAvLyBNYWtlIHN1cmUgd2UncmUgdHJ5aW5nIHRvIHdyaXRlIHRvIGEgZGlyZWN0b3J5IHRoYXQgaXMgZXh0YW50Ci0gICAgICAgIGVuc3VyZURpcmVjdG9yaWVzRXhpc3QoZGVzdC5nZXRQYXRoRGlyKCkpOwotCi0gICAgICAgIHByZVByb2Nlc3NJbWFnZVRvQ2FjaGUoYnVuZGxlLCBzb3VyY2UsIGRlc3QpOwotICAgIH07Ci1wcml2YXRlOgotICAgIEJ1bmRsZSogYnVuZGxlOwotfTsKLQotI2VuZGlmIC8vIENBQ0hFX1VQREFURVJfSApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvQ29tbWFuZC5jcHAgYi90b29scy9hYXB0L0NvbW1hbmQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzJlZmUwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvQ29tbWFuZC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjY5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gQW5kcm9pZCBBc3NldCBQYWNrYWdpbmcgVG9vbCBtYWluIGVudHJ5IHBvaW50LgotLy8KLSNpbmNsdWRlICJNYWluLmgiCi0jaW5jbHVkZSAiQnVuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVRhYmxlLmgiCi0jaW5jbHVkZSAiSW1hZ2VzLmgiCi0jaW5jbHVkZSAiWE1MTm9kZS5oIgotCi0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0jaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgotI2luY2x1ZGUgPHV0aWxzL0xpc3QuaD4KLSNpbmNsdWRlIDx1dGlscy9FcnJvcnMuaD4KLQotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLS8qCi0gKiBTaG93IHZlcnNpb24gaW5mby4gIEFsbCB0aGUgY29vbCBraWRzIGRvIGl0LgotICovCi1pbnQgZG9WZXJzaW9uKEJ1bmRsZSogYnVuZGxlKQotewotICAgIGlmIChidW5kbGUtPmdldEZpbGVTcGVjQ291bnQoKSAhPSAwKQotICAgICAgICBwcmludGYoIihpZ25vcmluZyBleHRyYSBhcmd1bWVudHMpXG4iKTsKLSAgICBwcmludGYoIkFuZHJvaWQgQXNzZXQgUGFja2FnaW5nIFRvb2wsIHYwLjJcbiIpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIE9wZW4gdGhlIGZpbGUgcmVhZCBvbmx5LiAgVGhlIGNhbGwgZmFpbHMgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdC4KLSAqCi0gKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4KLSAqLwotWmlwRmlsZSogb3BlblJlYWRPbmx5KGNvbnN0IGNoYXIqIGZpbGVOYW1lKQotewotICAgIFppcEZpbGUqIHppcDsKLSAgICBzdGF0dXNfdCByZXN1bHQ7Ci0KLSAgICB6aXAgPSBuZXcgWmlwRmlsZTsKLSAgICByZXN1bHQgPSB6aXAtPm9wZW4oZmlsZU5hbWUsIFppcEZpbGU6OmtPcGVuUmVhZE9ubHkpOwotICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOQU1FX05PVF9GT1VORCkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICclcycgbm90IGZvdW5kXG4iLCBmaWxlTmFtZSk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBQRVJNSVNTSU9OX0RFTklFRCkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICclcycgYWNjZXNzIGRlbmllZFxuIiwgZmlsZU5hbWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBmYWlsZWQgb3BlbmluZyAnJXMnIGFzIFppcCBmaWxlXG4iLAotICAgICAgICAgICAgICAgIGZpbGVOYW1lKTsKLSAgICAgICAgZGVsZXRlIHppcDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIHppcDsKLX0KLQotLyoKLSAqIE9wZW4gdGhlIGZpbGUgcmVhZC13cml0ZS4gIFRoZSBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0Ci0gKiBhbHJlYWR5IGV4aXN0IGFuZCAib2theVRvQ3JlYXRlIiBpcyBzZXQuCi0gKgotICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUuCi0gKi8KLVppcEZpbGUqIG9wZW5SZWFkV3JpdGUoY29uc3QgY2hhciogZmlsZU5hbWUsIGJvb2wgb2theVRvQ3JlYXRlKQotewotICAgIFppcEZpbGUqIHppcCA9IE5VTEw7Ci0gICAgc3RhdHVzX3QgcmVzdWx0OwotICAgIGludCBmbGFnczsKLQotICAgIGZsYWdzID0gWmlwRmlsZTo6a09wZW5SZWFkV3JpdGU7Ci0gICAgaWYgKG9rYXlUb0NyZWF0ZSkKLSAgICAgICAgZmxhZ3MgfD0gWmlwRmlsZTo6a09wZW5DcmVhdGU7Ci0KLSAgICB6aXAgPSBuZXcgWmlwRmlsZTsKLSAgICByZXN1bHQgPSB6aXAtPm9wZW4oZmlsZU5hbWUsIGZsYWdzKTsKLSAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGRlbGV0ZSB6aXA7Ci0gICAgICAgIHppcCA9IE5VTEw7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLWJhaWw6Ci0gICAgcmV0dXJuIHppcDsKLX0KLQotCi0vKgotICogUmV0dXJuIGEgc2hvcnQgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNvbXByZXNzaW9uIG1ldGhvZC4KLSAqLwotY29uc3QgY2hhciogY29tcHJlc3Npb25OYW1lKGludCBtZXRob2QpCi17Ci0gICAgaWYgKG1ldGhvZCA9PSBaaXBFbnRyeTo6a0NvbXByZXNzU3RvcmVkKQotICAgICAgICByZXR1cm4gIlN0b3JlZCI7Ci0gICAgZWxzZSBpZiAobWV0aG9kID09IFppcEVudHJ5OjprQ29tcHJlc3NEZWZsYXRlZCkKLSAgICAgICAgcmV0dXJuICJEZWZsYXRlZCI7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gIlVua25vd24iOwotfQotCi0vKgotICogUmV0dXJuIHRoZSBwZXJjZW50IHJlZHVjdGlvbiBpbiBzaXplICgwJSA9PSBubyBjb21wcmVzc2lvbikuCi0gKi8KLWludCBjYWxjUGVyY2VudChsb25nIHVuY29tcHJlc3NlZExlbiwgbG9uZyBjb21wcmVzc2VkTGVuKQotewotICAgIGlmICghdW5jb21wcmVzc2VkTGVuKQotICAgICAgICByZXR1cm4gMDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAoaW50KSAoMTAwLjAgLSAoY29tcHJlc3NlZExlbiAqIDEwMC4wKSAvIHVuY29tcHJlc3NlZExlbiArIDAuNSk7Ci19Ci0KLS8qCi0gKiBIYW5kbGUgdGhlICJsaXN0IiBjb21tYW5kLCB3aGljaCBjYW4gYmUgYSBzaW1wbGUgZmlsZSBkdW1wIG9yCi0gKiBhIHZlcmJvc2UgbGlzdGluZy4KLSAqCi0gKiBUaGUgdmVyYm9zZSBsaXN0aW5nIGNsb3NlbHkgbWF0Y2hlcyB0aGUgb3V0cHV0IG9mIHRoZSBJbmZvLVpJUCAidW56aXAiCi0gKiBjb21tYW5kLgotICovCi1pbnQgZG9MaXN0KEJ1bmRsZSogYnVuZGxlKQotewotICAgIGludCByZXN1bHQgPSAxOwotICAgIFppcEZpbGUqIHppcCA9IE5VTEw7Ci0gICAgY29uc3QgWmlwRW50cnkqIGVudHJ5OwotICAgIGxvbmcgdG90YWxVbmNMZW4sIHRvdGFsQ29tcExlbjsKLSAgICBjb25zdCBjaGFyKiB6aXBGaWxlTmFtZTsKLQotICAgIGlmIChidW5kbGUtPmdldEZpbGVTcGVjQ291bnQoKSAhPSAxKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHNwZWNpZnkgemlwIGZpbGUgbmFtZSAob25seSlcbiIpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotICAgIHppcEZpbGVOYW1lID0gYnVuZGxlLT5nZXRGaWxlU3BlY0VudHJ5KDApOwotCi0gICAgemlwID0gb3BlblJlYWRPbmx5KHppcEZpbGVOYW1lKTsKLSAgICBpZiAoemlwID09IE5VTEwpCi0gICAgICAgIGdvdG8gYmFpbDsKLQotICAgIGludCBjb3VudCwgaTsKLQotICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICBwcmludGYoIkFyY2hpdmU6ICAlc1xuIiwgemlwRmlsZU5hbWUpOwotICAgICAgICBwcmludGYoCi0gICAgICAgICAgICAiIExlbmd0aCAgIE1ldGhvZCAgICBTaXplICBSYXRpbyAgIE9mZnNldCAgICAgIERhdGUgIFRpbWUgIENSQy0zMiAgICBOYW1lXG4iKTsKLSAgICAgICAgcHJpbnRmKAotICAgICAgICAgICAgIi0tLS0tLS0tICAtLS0tLS0gIC0tLS0tLS0gLS0tLS0gIC0tLS0tLS0gICAgICAtLS0tICAtLS0tICAtLS0tLS0gICAgLS0tLVxuIik7Ci0gICAgfQotCi0gICAgdG90YWxVbmNMZW4gPSB0b3RhbENvbXBMZW4gPSAwOwotCi0gICAgY291bnQgPSB6aXAtPmdldE51bUVudHJpZXMoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBlbnRyeSA9IHppcC0+Z2V0RW50cnlCeUluZGV4KGkpOwotICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgICAgIGNoYXIgZGF0ZUJ1ZlszMl07Ci0gICAgICAgICAgICB0aW1lX3Qgd2hlbjsKLQotICAgICAgICAgICAgd2hlbiA9IGVudHJ5LT5nZXRNb2RXaGVuKCk7Ci0gICAgICAgICAgICBzdHJmdGltZShkYXRlQnVmLCBzaXplb2YoZGF0ZUJ1ZiksICIlbS0lZC0leSAlSDolTSIsCi0gICAgICAgICAgICAgICAgbG9jYWx0aW1lKCZ3aGVuKSk7Ci0KLSAgICAgICAgICAgIHByaW50ZigiJThsZCAgJS03LjdzICU3bGQgJTNkJSUgICU4emQgICVzICAlMDhseCAgJXNcbiIsCi0gICAgICAgICAgICAgICAgKGxvbmcpIGVudHJ5LT5nZXRVbmNvbXByZXNzZWRMZW4oKSwKLSAgICAgICAgICAgICAgICBjb21wcmVzc2lvbk5hbWUoZW50cnktPmdldENvbXByZXNzaW9uTWV0aG9kKCkpLAotICAgICAgICAgICAgICAgIChsb25nKSBlbnRyeS0+Z2V0Q29tcHJlc3NlZExlbigpLAotICAgICAgICAgICAgICAgIGNhbGNQZXJjZW50KGVudHJ5LT5nZXRVbmNvbXByZXNzZWRMZW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+Z2V0Q29tcHJlc3NlZExlbigpKSwKLSAgICAgICAgICAgICAgICAoc2l6ZV90KSBlbnRyeS0+Z2V0TEZIT2Zmc2V0KCksCi0gICAgICAgICAgICAgICAgZGF0ZUJ1ZiwKLSAgICAgICAgICAgICAgICBlbnRyeS0+Z2V0Q1JDMzIoKSwKLSAgICAgICAgICAgICAgICBlbnRyeS0+Z2V0RmlsZU5hbWUoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludGYoIiVzXG4iLCBlbnRyeS0+Z2V0RmlsZU5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0b3RhbFVuY0xlbiArPSBlbnRyeS0+Z2V0VW5jb21wcmVzc2VkTGVuKCk7Ci0gICAgICAgIHRvdGFsQ29tcExlbiArPSBlbnRyeS0+Z2V0Q29tcHJlc3NlZExlbigpOwotICAgIH0KLQotICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICBwcmludGYoCi0gICAgICAgICItLS0tLS0tLSAgICAgICAgICAtLS0tLS0tICAtLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLVxuIik7Ci0gICAgICAgIHByaW50ZigiJThsZCAgICAgICAgICAlN2xkICAlMmQlJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAlZCBmaWxlc1xuIiwKLSAgICAgICAgICAgIHRvdGFsVW5jTGVuLAotICAgICAgICAgICAgdG90YWxDb21wTGVuLAotICAgICAgICAgICAgY2FsY1BlcmNlbnQodG90YWxVbmNMZW4sIHRvdGFsQ29tcExlbiksCi0gICAgICAgICAgICB6aXAtPmdldE51bUVudHJpZXMoKSk7Ci0gICAgfQotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0QW5kcm9pZExpc3QoKSkgewotICAgICAgICBBc3NldE1hbmFnZXIgYXNzZXRzOwotICAgICAgICBpZiAoIWFzc2V0cy5hZGRBc3NldFBhdGgoU3RyaW5nOCh6aXBGaWxlTmFtZSksIE5VTEwpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBsaXN0IC1hIGZhaWxlZCBiZWNhdXNlIGFzc2V0cyBjb3VsZCBub3QgYmUgbG9hZGVkXG4iKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFJlc1RhYmxlJiByZXMgPSBhc3NldHMuZ2V0UmVzb3VyY2VzKGZhbHNlKTsKLSAgICAgICAgaWYgKCZyZXMgPT0gTlVMTCkgewotICAgICAgICAgICAgcHJpbnRmKCJcbk5vIHJlc291cmNlIHRhYmxlIGZvdW5kLlxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0jaWZuZGVmIEhBVkVfQU5EUk9JRF9PUwotICAgICAgICAgICAgcHJpbnRmKCJcblJlc291cmNlIHRhYmxlOlxuIik7Ci0gICAgICAgICAgICByZXMucHJpbnQoZmFsc2UpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBBc3NldCogbWFuaWZlc3RBc3NldCA9IGFzc2V0cy5vcGVuTm9uQXNzZXQoIkFuZHJvaWRNYW5pZmVzdC54bWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXQ6OkFDQ0VTU19CVUZGRVIpOwotICAgICAgICBpZiAobWFuaWZlc3RBc3NldCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBwcmludGYoIlxuTm8gQW5kcm9pZE1hbmlmZXN0LnhtbCBmb3VuZC5cbiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnRmKCJcbkFuZHJvaWQgbWFuaWZlc3Q6XG4iKTsKLSAgICAgICAgICAgIFJlc1hNTFRyZWUgdHJlZTsKLSAgICAgICAgICAgIHRyZWUuc2V0VG8obWFuaWZlc3RBc3NldC0+Z2V0QnVmZmVyKHRydWUpLAotICAgICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdEFzc2V0LT5nZXRMZW5ndGgoKSk7Ci0gICAgICAgICAgICBwcmludFhNTEJsb2NrKCZ0cmVlKTsKLSAgICAgICAgfQotICAgICAgICBkZWxldGUgbWFuaWZlc3RBc3NldDsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSAwOwotCi1iYWlsOgotICAgIGRlbGV0ZSB6aXA7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHNzaXplX3QgaW5kZXhPZkF0dHJpYnV0ZShjb25zdCBSZXNYTUxUcmVlJiB0cmVlLCB1aW50MzJfdCBhdHRyUmVzKQotewotICAgIHNpemVfdCBOID0gdHJlZS5nZXRBdHRyaWJ1dGVDb3VudCgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgaWYgKHRyZWUuZ2V0QXR0cmlidXRlTmFtZVJlc0lEKGkpID09IGF0dHJSZXMpIHsKLSAgICAgICAgICAgIHJldHVybiAoc3NpemVfdClpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotU3RyaW5nOCBnZXRBdHRyaWJ1dGUoY29uc3QgUmVzWE1MVHJlZSYgdHJlZSwgY29uc3QgY2hhciogbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYXR0ciwgU3RyaW5nOCogb3V0RXJyb3IpCi17Ci0gICAgc3NpemVfdCBpZHggPSB0cmVlLmluZGV4T2ZBdHRyaWJ1dGUobnMsIGF0dHIpOwotICAgIGlmIChpZHggPCAwKSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmc4KCk7Ci0gICAgfQotICAgIFJlc192YWx1ZSB2YWx1ZTsKLSAgICBpZiAodHJlZS5nZXRBdHRyaWJ1dGVWYWx1ZShpZHgsICZ2YWx1ZSkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgaWYgKHZhbHVlLmRhdGFUeXBlICE9IFJlc192YWx1ZTo6VFlQRV9TVFJJTkcpIHsKLSAgICAgICAgICAgIGlmIChvdXRFcnJvciAhPSBOVUxMKSAqb3V0RXJyb3IgPSAiYXR0cmlidXRlIGlzIG5vdCBhIHN0cmluZyB2YWx1ZSI7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nOCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIHNpemVfdCBsZW47Ci0gICAgY29uc3QgdWludDE2X3QqIHN0ciA9IHRyZWUuZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaWR4LCAmbGVuKTsKLSAgICByZXR1cm4gc3RyID8gU3RyaW5nOChzdHIsIGxlbikgOiBTdHJpbmc4KCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmc4IGdldEF0dHJpYnV0ZShjb25zdCBSZXNYTUxUcmVlJiB0cmVlLCB1aW50MzJfdCBhdHRyUmVzLCBTdHJpbmc4KiBvdXRFcnJvcikKLXsKLSAgICBzc2l6ZV90IGlkeCA9IGluZGV4T2ZBdHRyaWJ1dGUodHJlZSwgYXR0clJlcyk7Ci0gICAgaWYgKGlkeCA8IDApIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZzgoKTsKLSAgICB9Ci0gICAgUmVzX3ZhbHVlIHZhbHVlOwotICAgIGlmICh0cmVlLmdldEF0dHJpYnV0ZVZhbHVlKGlkeCwgJnZhbHVlKSAhPSBOT19FUlJPUikgewotICAgICAgICBpZiAodmFsdWUuZGF0YVR5cGUgIT0gUmVzX3ZhbHVlOjpUWVBFX1NUUklORykgewotICAgICAgICAgICAgaWYgKG91dEVycm9yICE9IE5VTEwpICpvdXRFcnJvciA9ICJhdHRyaWJ1dGUgaXMgbm90IGEgc3RyaW5nIHZhbHVlIjsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc4KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc2l6ZV90IGxlbjsKLSAgICBjb25zdCB1aW50MTZfdCogc3RyID0gdHJlZS5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpZHgsICZsZW4pOwotICAgIHJldHVybiBzdHIgPyBTdHJpbmc4KHN0ciwgbGVuKSA6IFN0cmluZzgoKTsKLX0KLQotc3RhdGljIGludDMyX3QgZ2V0SW50ZWdlckF0dHJpYnV0ZShjb25zdCBSZXNYTUxUcmVlJiB0cmVlLCB1aW50MzJfdCBhdHRyUmVzLAotICAgICAgICBTdHJpbmc4KiBvdXRFcnJvciwgaW50MzJfdCBkZWZWYWx1ZSA9IC0xKQotewotICAgIHNzaXplX3QgaWR4ID0gaW5kZXhPZkF0dHJpYnV0ZSh0cmVlLCBhdHRyUmVzKTsKLSAgICBpZiAoaWR4IDwgMCkgewotICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgfQotICAgIFJlc192YWx1ZSB2YWx1ZTsKLSAgICBpZiAodHJlZS5nZXRBdHRyaWJ1dGVWYWx1ZShpZHgsICZ2YWx1ZSkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgaWYgKHZhbHVlLmRhdGFUeXBlIDwgUmVzX3ZhbHVlOjpUWVBFX0ZJUlNUX0lOVAotICAgICAgICAgICAgICAgIHx8IHZhbHVlLmRhdGFUeXBlID4gUmVzX3ZhbHVlOjpUWVBFX0xBU1RfSU5UKSB7Ci0gICAgICAgICAgICBpZiAob3V0RXJyb3IgIT0gTlVMTCkgKm91dEVycm9yID0gImF0dHJpYnV0ZSBpcyBub3QgYW4gaW50ZWdlciB2YWx1ZSI7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlLmRhdGE7Ci19Ci0KLXN0YXRpYyBpbnQzMl90IGdldFJlc29sdmVkSW50ZWdlckF0dHJpYnV0ZShjb25zdCBSZXNUYWJsZSogcmVzVGFibGUsIGNvbnN0IFJlc1hNTFRyZWUmIHRyZWUsCi0gICAgICAgIHVpbnQzMl90IGF0dHJSZXMsIFN0cmluZzgqIG91dEVycm9yLCBpbnQzMl90IGRlZlZhbHVlID0gLTEpCi17Ci0gICAgc3NpemVfdCBpZHggPSBpbmRleE9mQXR0cmlidXRlKHRyZWUsIGF0dHJSZXMpOwotICAgIGlmIChpZHggPCAwKSB7Ci0gICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICB9Ci0gICAgUmVzX3ZhbHVlIHZhbHVlOwotICAgIGlmICh0cmVlLmdldEF0dHJpYnV0ZVZhbHVlKGlkeCwgJnZhbHVlKSAhPSBOT19FUlJPUikgewotICAgICAgICBpZiAodmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX1JFRkVSRU5DRSkgewotICAgICAgICAgICAgcmVzVGFibGUtPnJlc29sdmVSZWZlcmVuY2UoJnZhbHVlLCAwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsdWUuZGF0YVR5cGUgPCBSZXNfdmFsdWU6OlRZUEVfRklSU1RfSU5UCi0gICAgICAgICAgICAgICAgfHwgdmFsdWUuZGF0YVR5cGUgPiBSZXNfdmFsdWU6OlRZUEVfTEFTVF9JTlQpIHsKLSAgICAgICAgICAgIGlmIChvdXRFcnJvciAhPSBOVUxMKSAqb3V0RXJyb3IgPSAiYXR0cmlidXRlIGlzIG5vdCBhbiBpbnRlZ2VyIHZhbHVlIjsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsdWUuZGF0YTsKLX0KLQotc3RhdGljIFN0cmluZzggZ2V0UmVzb2x2ZWRBdHRyaWJ1dGUoY29uc3QgUmVzVGFibGUqIHJlc1RhYmxlLCBjb25zdCBSZXNYTUxUcmVlJiB0cmVlLAotICAgICAgICB1aW50MzJfdCBhdHRyUmVzLCBTdHJpbmc4KiBvdXRFcnJvcikKLXsKLSAgICBzc2l6ZV90IGlkeCA9IGluZGV4T2ZBdHRyaWJ1dGUodHJlZSwgYXR0clJlcyk7Ci0gICAgaWYgKGlkeCA8IDApIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZzgoKTsKLSAgICB9Ci0gICAgUmVzX3ZhbHVlIHZhbHVlOwotICAgIGlmICh0cmVlLmdldEF0dHJpYnV0ZVZhbHVlKGlkeCwgJnZhbHVlKSAhPSBOT19FUlJPUikgewotICAgICAgICBpZiAodmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX1NUUklORykgewotICAgICAgICAgICAgc2l6ZV90IGxlbjsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBzdHIgPSB0cmVlLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGlkeCwgJmxlbik7Ci0gICAgICAgICAgICByZXR1cm4gc3RyID8gU3RyaW5nOChzdHIsIGxlbikgOiBTdHJpbmc4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzVGFibGUtPnJlc29sdmVSZWZlcmVuY2UoJnZhbHVlLCAwKTsKLSAgICAgICAgaWYgKHZhbHVlLmRhdGFUeXBlICE9IFJlc192YWx1ZTo6VFlQRV9TVFJJTkcpIHsKLSAgICAgICAgICAgIGlmIChvdXRFcnJvciAhPSBOVUxMKSAqb3V0RXJyb3IgPSAiYXR0cmlidXRlIGlzIG5vdCBhIHN0cmluZyB2YWx1ZSI7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nOCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIHNpemVfdCBsZW47Ci0gICAgY29uc3QgUmVzX3ZhbHVlKiB2YWx1ZTIgPSAmdmFsdWU7Ci0gICAgY29uc3QgY2hhcjE2X3QqIHN0ciA9IGNvbnN0X2Nhc3Q8UmVzVGFibGUqPihyZXNUYWJsZSktPnZhbHVlVG9TdHJpbmcodmFsdWUyLCAwLCBOVUxMLCAmbGVuKTsKLSAgICByZXR1cm4gc3RyID8gU3RyaW5nOChzdHIsIGxlbikgOiBTdHJpbmc4KCk7Ci19Ci0KLS8vIFRoZXNlIGFyZSBhdHRyaWJ1dGUgcmVzb3VyY2UgY29uc3RhbnRzIGZvciB0aGUgcGxhdGZvcm0sIGFzIGZvdW5kCi0vLyBpbiBhbmRyb2lkLlIuYXR0cgotZW51bSB7Ci0gICAgTEFCRUxfQVRUUiA9IDB4MDEwMTAwMDEsCi0gICAgSUNPTl9BVFRSID0gMHgwMTAxMDAwMiwKLSAgICBOQU1FX0FUVFIgPSAweDAxMDEwMDAzLAotICAgIFBFUk1JU1NJT05fQVRUUiA9IDB4MDEwMTAwMDYsCi0gICAgUkVTT1VSQ0VfQVRUUiA9IDB4MDEwMTAwMjUsCi0gICAgREVCVUdHQUJMRV9BVFRSID0gMHgwMTAxMDAwZiwKLSAgICBWRVJTSU9OX0NPREVfQVRUUiA9IDB4MDEwMTAyMWIsCi0gICAgVkVSU0lPTl9OQU1FX0FUVFIgPSAweDAxMDEwMjFjLAotICAgIFNDUkVFTl9PUklFTlRBVElPTl9BVFRSID0gMHgwMTAxMDAxZSwKLSAgICBNSU5fU0RLX1ZFUlNJT05fQVRUUiA9IDB4MDEwMTAyMGMsCi0gICAgTUFYX1NES19WRVJTSU9OX0FUVFIgPSAweDAxMDEwMjcxLAotICAgIFJFUV9UT1VDSF9TQ1JFRU5fQVRUUiA9IDB4MDEwMTAyMjcsCi0gICAgUkVRX0tFWUJPQVJEX1RZUEVfQVRUUiA9IDB4MDEwMTAyMjgsCi0gICAgUkVRX0hBUkRfS0VZQk9BUkRfQVRUUiA9IDB4MDEwMTAyMjksCi0gICAgUkVRX05BVklHQVRJT05fQVRUUiA9IDB4MDEwMTAyMmEsCi0gICAgUkVRX0ZJVkVfV0FZX05BVl9BVFRSID0gMHgwMTAxMDIzMiwKLSAgICBUQVJHRVRfU0RLX1ZFUlNJT05fQVRUUiA9IDB4MDEwMTAyNzAsCi0gICAgVEVTVF9PTkxZX0FUVFIgPSAweDAxMDEwMjcyLAotICAgIEFOWV9ERU5TSVRZX0FUVFIgPSAweDAxMDEwMjZjLAotICAgIEdMX0VTX1ZFUlNJT05fQVRUUiA9IDB4MDEwMTAyODEsCi0gICAgU01BTExfU0NSRUVOX0FUVFIgPSAweDAxMDEwMjg0LAotICAgIE5PUk1BTF9TQ1JFRU5fQVRUUiA9IDB4MDEwMTAyODUsCi0gICAgTEFSR0VfU0NSRUVOX0FUVFIgPSAweDAxMDEwMjg2LAotICAgIFhMQVJHRV9TQ1JFRU5fQVRUUiA9IDB4MDEwMTAyYmYsCi0gICAgUkVRVUlSRURfQVRUUiA9IDB4MDEwMTAyOGUsCi0gICAgU0NSRUVOX1NJWkVfQVRUUiA9IDB4MDEwMTAyY2EsCi0gICAgU0NSRUVOX0RFTlNJVFlfQVRUUiA9IDB4MDEwMTAyY2IsCi0gICAgUkVRVUlSRVNfU01BTExFU1RfV0lEVEhfRFBfQVRUUiA9IDB4MDEwMTAzNjQsCi0gICAgQ09NUEFUSUJMRV9XSURUSF9MSU1JVF9EUF9BVFRSID0gMHgwMTAxMDM2NSwKLSAgICBMQVJHRVNUX1dJRFRIX0xJTUlUX0RQX0FUVFIgPSAweDAxMDEwMzY2LAotICAgIFBVQkxJQ19LRVlfQVRUUiA9IDB4MDEwMTAzYTYsCi0gICAgQ0FURUdPUllfQVRUUiA9IDB4MDEwMTAzZTgsCi19OwotCi1jb25zdCBjaGFyICpnZXRDb21wb25lbnROYW1lKFN0cmluZzggJnBrZ05hbWUsIFN0cmluZzggJmNvbXBvbmVudE5hbWUpIHsKLSAgICBzc2l6ZV90IGlkeCA9IGNvbXBvbmVudE5hbWUuZmluZCgiLiIpOwotICAgIFN0cmluZzggcmV0U3RyKHBrZ05hbWUpOwotICAgIGlmIChpZHggPT0gMCkgewotICAgICAgICByZXRTdHIgKz0gY29tcG9uZW50TmFtZTsKLSAgICB9IGVsc2UgaWYgKGlkeCA8IDApIHsKLSAgICAgICAgcmV0U3RyICs9ICIuIjsKLSAgICAgICAgcmV0U3RyICs9IGNvbXBvbmVudE5hbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGNvbXBvbmVudE5hbWUuc3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiByZXRTdHIuc3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50Q29tcGF0aWJsZVNjcmVlbnMoUmVzWE1MVHJlZSYgdHJlZSkgewotICAgIHNpemVfdCBsZW47Ci0gICAgUmVzWE1MVHJlZTo6ZXZlbnRfY29kZV90IGNvZGU7Ci0gICAgaW50IGRlcHRoID0gMDsKLSAgICBib29sIGZpcnN0ID0gdHJ1ZTsKLSAgICBwcmludGYoImNvbXBhdGlibGUtc2NyZWVuczoiKTsKLSAgICB3aGlsZSAoKGNvZGU9dHJlZS5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfVEFHKSB7Ci0gICAgICAgICAgICBkZXB0aC0tOwotICAgICAgICAgICAgaWYgKGRlcHRoIDwgMCkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvZGUgIT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBkZXB0aCsrOwotICAgICAgICBTdHJpbmc4IHRhZyh0cmVlLmdldEVsZW1lbnROYW1lKCZsZW4pKTsKLSAgICAgICAgaWYgKHRhZyA9PSAic2NyZWVuIikgewotICAgICAgICAgICAgaW50MzJfdCBzY3JlZW5TaXplID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLAotICAgICAgICAgICAgICAgICAgICBTQ1JFRU5fU0laRV9BVFRSLCBOVUxMLCAtMSk7Ci0gICAgICAgICAgICBpbnQzMl90IHNjcmVlbkRlbnNpdHkgPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsCi0gICAgICAgICAgICAgICAgICAgIFNDUkVFTl9ERU5TSVRZX0FUVFIsIE5VTEwsIC0xKTsKLSAgICAgICAgICAgIGlmIChzY3JlZW5TaXplID4gMCAmJiBzY3JlZW5EZW5zaXR5ID4gMCkgewotICAgICAgICAgICAgICAgIGlmICghZmlyc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIsIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCInJWQvJWQnIiwgc2NyZWVuU2l6ZSwgc2NyZWVuRGVuc2l0eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcHJpbnRmKCJcbiIpOwotfQotCi1WZWN0b3I8U3RyaW5nOD4gZ2V0TmZjQWlkQ2F0ZWdvcmllcyhBc3NldE1hbmFnZXImIGFzc2V0cywgU3RyaW5nOCB4bWxQYXRoLCBib29sIG9mZkhvc3QsCi0gICAgICAgIFN0cmluZzggKm91dEVycm9yID0gTlVMTCkKLXsKLSAgICBBc3NldCogYWlkQXNzZXQgPSBhc3NldHMub3Blbk5vbkFzc2V0KHhtbFBhdGgsIEFzc2V0OjpBQ0NFU1NfQlVGRkVSKTsKLSAgICBpZiAoYWlkQXNzZXQgPT0gTlVMTCkgewotICAgICAgICBpZiAob3V0RXJyb3IgIT0gTlVMTCkgKm91dEVycm9yID0gInhtbCByZXNvdXJjZSBkb2VzIG5vdCBleGlzdCI7Ci0gICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nOD4oKTsKLSAgICB9Ci0KLSAgICBjb25zdCBTdHJpbmc4IHNlcnZpY2VUYWdOYW1lKG9mZkhvc3QgPyAib2ZmaG9zdC1hcGR1LXNlcnZpY2UiIDogImhvc3QtYXBkdS1zZXJ2aWNlIik7Ci0KLSAgICBib29sIHdpdGhpbkFwZHVTZXJ2aWNlID0gZmFsc2U7Ci0gICAgVmVjdG9yPFN0cmluZzg+IGNhdGVnb3JpZXM7Ci0KLSAgICBTdHJpbmc4IGVycm9yOwotICAgIFJlc1hNTFRyZWUgdHJlZTsKLSAgICB0cmVlLnNldFRvKGFpZEFzc2V0LT5nZXRCdWZmZXIodHJ1ZSksIGFpZEFzc2V0LT5nZXRMZW5ndGgoKSk7Ci0KLSAgICBzaXplX3QgbGVuOwotICAgIGludCBkZXB0aCA9IDA7Ci0gICAgUmVzWE1MVHJlZTo6ZXZlbnRfY29kZV90IGNvZGU7Ci0gICAgd2hpbGUgKChjb2RlPXRyZWUubmV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX1RBRykgewotICAgICAgICAgICAgZGVwdGgtLTsKLSAgICAgICAgICAgIFN0cmluZzggdGFnKHRyZWUuZ2V0RWxlbWVudE5hbWUoJmxlbikpOwotCi0gICAgICAgICAgICBpZiAoZGVwdGggPT0gMCAmJiB0YWcgPT0gc2VydmljZVRhZ05hbWUpIHsKLSAgICAgICAgICAgICAgICB3aXRoaW5BcGR1U2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpTVEFSVF9UQUcpIHsKLSAgICAgICAgICAgIGRlcHRoKys7Ci0gICAgICAgICAgICBTdHJpbmc4IHRhZyh0cmVlLmdldEVsZW1lbnROYW1lKCZsZW4pKTsKLQotICAgICAgICAgICAgaWYgKGRlcHRoID09IDEpIHsKLSAgICAgICAgICAgICAgICBpZiAodGFnID09IHNlcnZpY2VUYWdOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdpdGhpbkFwZHVTZXJ2aWNlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRlcHRoID09IDIgJiYgd2l0aGluQXBkdVNlcnZpY2UpIHsKLSAgICAgICAgICAgICAgICBpZiAodGFnID09ICJhaWQtZ3JvdXAiKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZzggY2F0ZWdvcnkgPSBnZXRBdHRyaWJ1dGUodHJlZSwgQ0FURUdPUllfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3V0RXJyb3IgIT0gTlVMTCkgKm91dEVycm9yID0gZXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZzg+KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLmFkZChjYXRlZ29yeSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGFpZEFzc2V0LT5jbG9zZSgpOwotICAgIHJldHVybiBjYXRlZ29yaWVzOwotfQotCi0vKgotICogSGFuZGxlIHRoZSAiZHVtcCIgY29tbWFuZCwgdG8gZXh0cmFjdCBzZWxlY3QgZGF0YSBmcm9tIGFuIGFyY2hpdmUuCi0gKi8KLWV4dGVybiBjaGFyIENPTlNPTEVfREFUQVsyOTI1XTsgLy8gc2VlIEVPRgotaW50IGRvRHVtcChCdW5kbGUqIGJ1bmRsZSkKLXsKLSAgICBzdGF0dXNfdCByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgIEFzc2V0KiBhc3NldCA9IE5VTEw7Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRGaWxlU3BlY0NvdW50KCkgPCAxKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG5vIGR1bXAgb3B0aW9uIHNwZWNpZmllZFxuIik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmIChidW5kbGUtPmdldEZpbGVTcGVjQ291bnQoKSA8IDIpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogbm8gZHVtcCBmaWxlIHNwZWNpZmllZFxuIik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIG9wdGlvbiA9IGJ1bmRsZS0+Z2V0RmlsZVNwZWNFbnRyeSgwKTsKLSAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9IGJ1bmRsZS0+Z2V0RmlsZVNwZWNFbnRyeSgxKTsKLQotICAgIEFzc2V0TWFuYWdlciBhc3NldHM7Ci0gICAgdm9pZCogYXNzZXRzQ29va2llOwotICAgIGlmICghYXNzZXRzLmFkZEFzc2V0UGF0aChTdHJpbmc4KGZpbGVuYW1lKSwgJmFzc2V0c0Nvb2tpZSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogZHVtcCBmYWlsZWQgYmVjYXVzZSBhc3NldHMgY291bGQgbm90IGJlIGxvYWRlZFxuIik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8vIE1ha2UgYSBkdW1teSBjb25maWcgZm9yIHJldHJpZXZpbmcgcmVzb3VyY2VzLi4uICB3ZSBuZWVkIHRvIHN1cHBseQotICAgIC8vIG5vbi1kZWZhdWx0IHZhbHVlcyBmb3Igc29tZSBjb25maWdzIHNvIHRoYXQgd2UgY2FuIHJldHJpZXZlIHJlc291cmNlcwotICAgIC8vIGluIHRoZSBhcHAgdGhhdCBkb24ndCBoYXZlIGEgZGVmYXVsdC4gIFRoZSBtb3N0IGltcG9ydGFudCBvZiB0aGVzZSBpcwotICAgIC8vIHRoZSBBUEkgdmVyc2lvbiBiZWNhdXNlIGtleSByZXNvdXJjZXMgbGlrZSBpY29ucyB3aWxsIGhhdmUgYW4gaW1wbGljaXQKLSAgICAvLyB2ZXJzaW9uIGlmIHRoZXkgYXJlIHVzaW5nIG5ld2VyIGNvbmZpZyB0eXBlcyBsaWtlIGRlbnNpdHkuCi0gICAgUmVzVGFibGVfY29uZmlnIGNvbmZpZzsKLSAgICBjb25maWcubGFuZ3VhZ2VbMF0gPSAnZSc7Ci0gICAgY29uZmlnLmxhbmd1YWdlWzFdID0gJ24nOwotICAgIGNvbmZpZy5jb3VudHJ5WzBdID0gJ1UnOwotICAgIGNvbmZpZy5jb3VudHJ5WzFdID0gJ1MnOwotICAgIGNvbmZpZy5vcmllbnRhdGlvbiA9IFJlc1RhYmxlX2NvbmZpZzo6T1JJRU5UQVRJT05fUE9SVDsKLSAgICBjb25maWcuZGVuc2l0eSA9IFJlc1RhYmxlX2NvbmZpZzo6REVOU0lUWV9NRURJVU07Ci0gICAgY29uZmlnLnNka1ZlcnNpb24gPSAxMDAwMDsgLy8gVmVyeSBoaWdoLgotICAgIGNvbmZpZy5zY3JlZW5XaWR0aERwID0gMzIwOwotICAgIGNvbmZpZy5zY3JlZW5IZWlnaHREcCA9IDQ4MDsKLSAgICBjb25maWcuc21hbGxlc3RTY3JlZW5XaWR0aERwID0gMzIwOwotICAgIGFzc2V0cy5zZXRDb25maWd1cmF0aW9uKGNvbmZpZyk7Ci0KLSAgICBjb25zdCBSZXNUYWJsZSYgcmVzID0gYXNzZXRzLmdldFJlc291cmNlcyhmYWxzZSk7Ci0gICAgaWYgKCZyZXMgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBkdW1wIGZhaWxlZCBiZWNhdXNlIG5vIHJlc291cmNlIHRhYmxlIHdhcyBmb3VuZFxuIik7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKCJyZXNvdXJjZXMiLCBvcHRpb24pID09IDApIHsKLSNpZm5kZWYgSEFWRV9BTkRST0lEX09TCi0gICAgICAgIHJlcy5wcmludChidW5kbGUtPmdldFZhbHVlcygpKTsKLSNlbmRpZgotCi0gICAgfSBlbHNlIGlmIChzdHJjbXAoInN0cmluZ3MiLCBvcHRpb24pID09IDApIHsKLSAgICAgICAgY29uc3QgUmVzU3RyaW5nUG9vbCogcG9vbCA9IHJlcy5nZXRUYWJsZVN0cmluZ0Jsb2NrKDApOwotICAgICAgICBwcmludFN0cmluZ1Bvb2wocG9vbCk7Ci0KLSAgICB9IGVsc2UgaWYgKHN0cmNtcCgieG1sdHJlZSIsIG9wdGlvbikgPT0gMCkgewotICAgICAgICBpZiAoYnVuZGxlLT5nZXRGaWxlU3BlY0NvdW50KCkgPCAzKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBubyBkdW1wIHhtbHRyZWUgcmVzb3VyY2UgZmlsZSBzcGVjaWZpZWRcbiIpOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaT0yOyBpPGJ1bmRsZS0+Z2V0RmlsZVNwZWNDb3VudCgpOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlc25hbWUgPSBidW5kbGUtPmdldEZpbGVTcGVjRW50cnkoaSk7Ci0gICAgICAgICAgICBSZXNYTUxUcmVlIHRyZWU7Ci0gICAgICAgICAgICBhc3NldCA9IGFzc2V0cy5vcGVuTm9uQXNzZXQocmVzbmFtZSwgQXNzZXQ6OkFDQ0VTU19CVUZGRVIpOwotICAgICAgICAgICAgaWYgKGFzc2V0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBkdW1wIGZhaWxlZCBiZWNhdXNlIHJlc291cmNlICVzIGZvdW5kXG4iLCByZXNuYW1lKTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0cmVlLnNldFRvKGFzc2V0LT5nZXRCdWZmZXIodHJ1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldC0+Z2V0TGVuZ3RoKCkpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogUmVzb3VyY2UgJXMgaXMgY29ycnVwdFxuIiwgcmVzbmFtZSk7Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdHJlZS5yZXN0YXJ0KCk7Ci0gICAgICAgICAgICBwcmludFhNTEJsb2NrKCZ0cmVlKTsKLSAgICAgICAgICAgIHRyZWUudW5pbml0KCk7Ci0gICAgICAgICAgICBkZWxldGUgYXNzZXQ7Ci0gICAgICAgICAgICBhc3NldCA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgIH0gZWxzZSBpZiAoc3RyY21wKCJ4bWxzdHJpbmdzIiwgb3B0aW9uKSA9PSAwKSB7Ci0gICAgICAgIGlmIChidW5kbGUtPmdldEZpbGVTcGVjQ291bnQoKSA8IDMpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG5vIGR1bXAgeG1sdHJlZSByZXNvdXJjZSBmaWxlIHNwZWNpZmllZFxuIik7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBpPTI7IGk8YnVuZGxlLT5nZXRGaWxlU3BlY0NvdW50KCk7IGkrKykgewotICAgICAgICAgICAgY29uc3QgY2hhciogcmVzbmFtZSA9IGJ1bmRsZS0+Z2V0RmlsZVNwZWNFbnRyeShpKTsKLSAgICAgICAgICAgIFJlc1hNTFRyZWUgdHJlZTsKLSAgICAgICAgICAgIGFzc2V0ID0gYXNzZXRzLm9wZW5Ob25Bc3NldChyZXNuYW1lLCBBc3NldDo6QUNDRVNTX0JVRkZFUik7Ci0gICAgICAgICAgICBpZiAoYXNzZXQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGR1bXAgZmFpbGVkIGJlY2F1c2UgcmVzb3VyY2UgJXMgZm91bmRcbiIsIHJlc25hbWUpOwotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRyZWUuc2V0VG8oYXNzZXQtPmdldEJ1ZmZlcih0cnVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0LT5nZXRMZW5ndGgoKSkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBSZXNvdXJjZSAlcyBpcyBjb3JydXB0XG4iLCByZXNuYW1lKTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludFN0cmluZ1Bvb2woJnRyZWUuZ2V0U3RyaW5ncygpKTsKLSAgICAgICAgICAgIGRlbGV0ZSBhc3NldDsKLSAgICAgICAgICAgIGFzc2V0ID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVzWE1MVHJlZSB0cmVlOwotICAgICAgICBhc3NldCA9IGFzc2V0cy5vcGVuTm9uQXNzZXQoIkFuZHJvaWRNYW5pZmVzdC54bWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NldDo6QUNDRVNTX0JVRkZFUik7Ci0gICAgICAgIGlmIChhc3NldCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBkdW1wIGZhaWxlZCBiZWNhdXNlIG5vIEFuZHJvaWRNYW5pZmVzdC54bWwgZm91bmRcbiIpOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRyZWUuc2V0VG8oYXNzZXQtPmdldEJ1ZmZlcih0cnVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgYXNzZXQtPmdldExlbmd0aCgpKSAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogQW5kcm9pZE1hbmlmZXN0LnhtbCBpcyBjb3JydXB0XG4iKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICB0cmVlLnJlc3RhcnQoKTsKLQotICAgICAgICBpZiAoc3RyY21wKCJwZXJtaXNzaW9ucyIsIG9wdGlvbikgPT0gMCkgewotICAgICAgICAgICAgc2l6ZV90IGxlbjsKLSAgICAgICAgICAgIFJlc1hNTFRyZWU6OmV2ZW50X2NvZGVfdCBjb2RlOwotICAgICAgICAgICAgaW50IGRlcHRoID0gMDsKLSAgICAgICAgICAgIHdoaWxlICgoY29kZT10cmVlLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX1RBRykgewotICAgICAgICAgICAgICAgICAgICBkZXB0aC0tOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvZGUgIT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZXB0aCsrOwotICAgICAgICAgICAgICAgIFN0cmluZzggdGFnKHRyZWUuZ2V0RWxlbWVudE5hbWUoJmxlbikpOwotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJEZXB0aCAlZCB0YWcgJXNcbiIsIGRlcHRoLCB0YWcuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0YWcgIT0gIm1hbmlmZXN0IikgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogbWFuaWZlc3QgZG9lcyBub3Qgc3RhcnQgd2l0aCA8bWFuaWZlc3Q+IHRhZ1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBwa2cgPSBnZXRBdHRyaWJ1dGUodHJlZSwgTlVMTCwgInBhY2thZ2UiLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJwYWNrYWdlOiAlc1xuIiwgcGtnLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlcHRoID09IDIgJiYgdGFnID09ICJwZXJtaXNzaW9uIikgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IGVycm9yOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWUgPSBnZXRBdHRyaWJ1dGUodHJlZSwgTkFNRV9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICVzXG4iLCBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJwZXJtaXNzaW9uOiAlc1xuIiwgbmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXB0aCA9PSAyICYmIHRhZyA9PSAidXNlcy1wZXJtaXNzaW9uIikgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IGVycm9yOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWUgPSBnZXRBdHRyaWJ1dGUodHJlZSwgTkFNRV9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICVzXG4iLCBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLXBlcm1pc3Npb246ICVzXG4iLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IHJlcSA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwgUkVRVUlSRURfQVRUUiwgTlVMTCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcmVxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIm9wdGlvbmFsLXBlcm1pc3Npb246ICVzXG4iLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoImJhZGdpbmciLCBvcHRpb24pID09IDApIHsKLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc4PiBsb2NhbGVzOwotICAgICAgICAgICAgcmVzLmdldExvY2FsZXMoJmxvY2FsZXMpOwotCi0gICAgICAgICAgICBWZWN0b3I8UmVzVGFibGVfY29uZmlnPiBjb25maWdzOwotICAgICAgICAgICAgcmVzLmdldENvbmZpZ3VyYXRpb25zKCZjb25maWdzKTsKLSAgICAgICAgICAgIFNvcnRlZFZlY3RvcjxpbnQ+IGRlbnNpdGllczsKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOQyA9IGNvbmZpZ3Muc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE5DOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpbnQgZGVucyA9IGNvbmZpZ3NbaV0uZGVuc2l0eTsKLSAgICAgICAgICAgICAgICBpZiAoZGVucyA9PSAwKSBkZW5zID0gMTYwOwotICAgICAgICAgICAgICAgIGRlbnNpdGllcy5hZGQoZGVucyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgICAgICBSZXNYTUxUcmVlOjpldmVudF9jb2RlX3QgY29kZTsKLSAgICAgICAgICAgIGludCBkZXB0aCA9IDA7Ci0gICAgICAgICAgICBTdHJpbmc4IGVycm9yOwotICAgICAgICAgICAgYm9vbCB3aXRoaW5BY3Rpdml0eSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBpc01haW5BY3Rpdml0eSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBpc0xhdW5jaGVyQWN0aXZpdHkgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaXNTZWFyY2hhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHdpdGhpbkFwcGxpY2F0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHdpdGhpblN1cHBvcnRzSW5wdXQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgd2l0aGluUmVjZWl2ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgd2l0aGluU2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCB3aXRoaW5JbnRlbnRGaWx0ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzTWFpbkFjdGl2aXR5ID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc090aGVyQWN0aXZpdGllcyA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNPdGhlclJlY2VpdmVycyA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNPdGhlclNlcnZpY2VzID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc1dhbGxwYXBlclNlcnZpY2UgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzSW1lU2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNBY2Nlc3NpYmlsaXR5U2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNQcmludFNlcnZpY2UgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzV2lkZ2V0UmVjZWl2ZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc0RldmljZUFkbWluUmVjZWl2ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzSW50ZW50RmlsdGVyID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc1BheW1lbnRTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGFjdE1haW5BY3Rpdml0eSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBhY3RXaWRnZXRSZWNlaXZlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgYWN0RGV2aWNlQWRtaW5FbmFibGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGFjdEltZVNlcnZpY2UgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgYWN0V2FsbHBhcGVyU2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBhY3RBY2Nlc3NpYmlsaXR5U2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBhY3RQcmludFNlcnZpY2UgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgYWN0SG9zdEFwZHVTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGFjdE9mZkhvc3RBcGR1U2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNNZXRhSG9zdFBheW1lbnRDYXRlZ29yeSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNNZXRhT2ZmSG9zdFBheW1lbnRDYXRlZ29yeSA9IGZhbHNlOwotCi0gICAgICAgICAgICAvLyBUaGVzZSBwZXJtaXNzaW9ucyBhcmUgcmVxdWlyZWQgYnkgc2VydmljZXMgaW1wbGVtZW50aW5nIHNlcnZpY2VzCi0gICAgICAgICAgICAvLyB0aGUgc3lzdGVtIGJpbmRzIHRvIChJTUUsIEFjY2Vzc2liaWxpdHksIFByaW50U2VydmljZXMsIGV0Yy4pCi0gICAgICAgICAgICBib29sIGhhc0JpbmREZXZpY2VBZG1pblBlcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzQmluZElucHV0TWV0aG9kUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNCaW5kQWNjZXNzaWJpbGl0eVNlcnZpY2VQZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc0JpbmRQcmludFNlcnZpY2VQZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc0JpbmROZmNTZXJ2aWNlUGVybWlzc2lvbiA9IGZhbHNlOwotCi0gICAgICAgICAgICAvLyBUaGVzZSB0d28gaW1wbGVtZW50IHRoZSBpbXBsaWNpdCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBncmFudGVkCi0gICAgICAgICAgICAvLyB0byBwcmUtMS42IGFwcGxpY2F0aW9ucy4KLSAgICAgICAgICAgIGJvb2wgaGFzV3JpdGVFeHRlcm5hbFN0b3JhZ2VQZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc1JlYWRQaG9uZVN0YXRlUGVybWlzc2lvbiA9IGZhbHNlOwotCi0gICAgICAgICAgICAvLyBJZiBhbiBhcHAgcmVxdWVzdHMgd3JpdGUgc3RvcmFnZSwgdGhleSB3aWxsIGFsc28gZ2V0IHJlYWQgc3RvcmFnZS4KLSAgICAgICAgICAgIGJvb2wgaGFzUmVhZEV4dGVybmFsU3RvcmFnZVBlcm1pc3Npb24gPSBmYWxzZTsKLQotICAgICAgICAgICAgLy8gSW1wbGVtZW50IHRyYW5zaXRpb24gdG8gcmVhZCBhbmQgd3JpdGUgY2FsbCBsb2cuCi0gICAgICAgICAgICBib29sIGhhc1JlYWRDb250YWN0c1Blcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzV3JpdGVDb250YWN0c1Blcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzUmVhZENhbGxMb2dQZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc1dyaXRlQ2FsbExvZ1Blcm1pc3Npb24gPSBmYWxzZTsKLQotICAgICAgICAgICAgLy8gVGhpcyBuZXh0IGdyb3VwIG9mIHZhcmlhYmxlcyBpcyB1c2VkIHRvIGltcGxlbWVudCBhIGdyb3VwIG9mCi0gICAgICAgICAgICAvLyBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IGhldXJpc3RpY3MgbmVjZXNzaXRhdGVkIGJ5IHRoZSBhZGRpdGlvbiBvZgotICAgICAgICAgICAgLy8gc29tZSBuZXcgdXNlcy1mZWF0dXJlIGNvbnN0YW50cyBpbiAyLjEgYW5kIDIuMi4gSW4gbW9zdCBjYXNlcywgdGhlCi0gICAgICAgICAgICAvLyBoZXVyaXN0aWMgaXMgImlmIGFuIGFwcCByZXF1ZXN0cyBhIHBlcm1pc3Npb24gYnV0IGRvZXNuJ3QgZXhwbGljaXRseQotICAgICAgICAgICAgLy8gcmVxdWVzdCB0aGUgY29ycmVzcG9uZGluZyA8dXNlcy1mZWF0dXJlPiwgcHJlc3VtZSBpdCdzIHRoZXJlIGFueXdheSIuCi0gICAgICAgICAgICBib29sIHNwZWNDYW1lcmFGZWF0dXJlID0gZmFsc2U7IC8vIGNhbWVyYS1yZWxhdGVkCi0gICAgICAgICAgICBib29sIHNwZWNDYW1lcmFBdXRvZm9jdXNGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHJlcUNhbWVyYUF1dG9mb2N1c0ZlYXR1cmUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgcmVxQ2FtZXJhRmxhc2hGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc0NhbWVyYVBlcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgc3BlY0xvY2F0aW9uRmVhdHVyZSA9IGZhbHNlOyAvLyBsb2NhdGlvbi1yZWxhdGVkCi0gICAgICAgICAgICBib29sIHNwZWNOZXR3b3JrTG9jRmVhdHVyZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCByZXFOZXR3b3JrTG9jRmVhdHVyZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBzcGVjR3BzRmVhdHVyZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCByZXFHcHNGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc01vY2tMb2NQZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc0NvYXJzZUxvY1Blcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzR3BzUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNHZW5lcmFsTG9jUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBzcGVjQmx1ZXRvb3RoRmVhdHVyZSA9IGZhbHNlOyAvLyBCbHVldG9vdGggQVBJLXJlbGF0ZWQKLSAgICAgICAgICAgIGJvb2wgaGFzQmx1ZXRvb3RoUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBzcGVjTWljcm9waG9uZUZlYXR1cmUgPSBmYWxzZTsgLy8gbWljcm9waG9uZS1yZWxhdGVkCi0gICAgICAgICAgICBib29sIGhhc1JlY29yZEF1ZGlvUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBzcGVjV2lGaUZlYXR1cmUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaGFzV2lGaVBlcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgc3BlY1RlbGVwaG9ueUZlYXR1cmUgPSBmYWxzZTsgLy8gdGVsZXBob255LXJlbGF0ZWQKLSAgICAgICAgICAgIGJvb2wgcmVxVGVsZXBob255U3ViRmVhdHVyZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBoYXNUZWxlcGhvbnlQZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHNwZWNUb3VjaHNjcmVlbkZlYXR1cmUgPSBmYWxzZTsgLy8gdG91Y2hzY3JlZW4tcmVsYXRlZAotICAgICAgICAgICAgYm9vbCBzcGVjTXVsdGl0b3VjaEZlYXR1cmUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgcmVxRGlzdGluY3RNdWx0aXRvdWNoRmVhdHVyZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBzcGVjU2NyZWVuUG9ydHJhaXRGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHNwZWNTY3JlZW5MYW5kc2NhcGVGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIHJlcVNjcmVlblBvcnRyYWl0RmVhdHVyZSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCByZXFTY3JlZW5MYW5kc2NhcGVGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICAvLyAyLjIgYWxzbyBhZGRlZCBzb21lIG90aGVyIGZlYXR1cmVzIHRoYXQgYXBwcyBjYW4gcmVxdWVzdCwgYnV0IHRoYXQKLSAgICAgICAgICAgIC8vIGhhdmUgbm8gY29ycmVzcG9uZGluZyBwZXJtaXNzaW9uLCBzbyB3ZSBjYW5ub3QgaW1wbGVtZW50IGFueQotICAgICAgICAgICAgLy8gYmFjay1jb21wYXRpYmlsaXR5IGhldXJpc3RpYyBmb3IgdGhlbS4gVGhlIGJlbG93IGFyZSB0aHVzIHVubmVjZXNzYXJ5Ci0gICAgICAgICAgICAvLyAoYnV0IGFyZSByZXRhaW5lZCBoZXJlIGZvciBkb2N1bWVudGFyeSBwdXJwb3Nlcy4pCi0gICAgICAgICAgICAvL2Jvb2wgc3BlY0NvbXBhc3NGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICAvL2Jvb2wgc3BlY0FjY2VsZXJvbWV0ZXJGZWF0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICAvL2Jvb2wgc3BlY1Byb3hpbWl0eUZlYXR1cmUgPSBmYWxzZTsKLSAgICAgICAgICAgIC8vYm9vbCBzcGVjQW1iaWVudExpZ2h0RmVhdHVyZSA9IGZhbHNlOwotICAgICAgICAgICAgLy9ib29sIHNwZWNMaXZlV2FsbHBhcGVyRmVhdHVyZSA9IGZhbHNlOwotCi0gICAgICAgICAgICBpbnQgdGFyZ2V0U2RrID0gMDsKLSAgICAgICAgICAgIGludCBzbWFsbFNjcmVlbiA9IDE7Ci0gICAgICAgICAgICBpbnQgbm9ybWFsU2NyZWVuID0gMTsKLSAgICAgICAgICAgIGludCBsYXJnZVNjcmVlbiA9IDE7Ci0gICAgICAgICAgICBpbnQgeGxhcmdlU2NyZWVuID0gMTsKLSAgICAgICAgICAgIGludCBhbnlEZW5zaXR5ID0gMTsKLSAgICAgICAgICAgIGludCByZXF1aXJlc1NtYWxsZXN0V2lkdGhEcCA9IDA7Ci0gICAgICAgICAgICBpbnQgY29tcGF0aWJsZVdpZHRoTGltaXREcCA9IDA7Ci0gICAgICAgICAgICBpbnQgbGFyZ2VzdFdpZHRoTGltaXREcCA9IDA7Ci0gICAgICAgICAgICBTdHJpbmc4IHBrZzsKLSAgICAgICAgICAgIFN0cmluZzggYWN0aXZpdHlOYW1lOwotICAgICAgICAgICAgU3RyaW5nOCBhY3Rpdml0eUxhYmVsOwotICAgICAgICAgICAgU3RyaW5nOCBhY3Rpdml0eUljb247Ci0gICAgICAgICAgICBTdHJpbmc4IHJlY2VpdmVyTmFtZTsKLSAgICAgICAgICAgIFN0cmluZzggc2VydmljZU5hbWU7Ci0gICAgICAgICAgICBWZWN0b3I8U3RyaW5nOD4gc3VwcG9ydGVkSW5wdXQ7Ci0gICAgICAgICAgICB3aGlsZSAoKGNvZGU9dHJlZS5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICAgICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVwdGgtLTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoIDwgMikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpdGhpblN1cHBvcnRzSW5wdXQgJiYgIXN1cHBvcnRlZElucHV0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigic3VwcG9ydHMtaW5wdXQ6ICciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgTiA9IHN1cHBvcnRlZElucHV0LnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMiLCBzdXBwb3J0ZWRJbnB1dFtpXS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IE4gLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIicgJyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCInXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRJbnB1dC5jbGVhcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluQXBwbGljYXRpb24gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpblN1cHBvcnRzSW5wdXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXB0aCA8IDMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXRoaW5BY3Rpdml0eSAmJiBpc01haW5BY3Rpdml0eSAmJiBpc0xhdW5jaGVyQWN0aXZpdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphTmFtZSA9IGdldENvbXBvbmVudE5hbWUocGtnLCBhY3Rpdml0eU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigibGF1bmNoYWJsZS1hY3Rpdml0eToiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYU5hbWUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBuYW1lPSclcycgIiwgYU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBsYWJlbD0nJXMnIGljb249JyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5TGFiZWwuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eUljb24uc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNJbnRlbnRGaWx0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNPdGhlckFjdGl2aXRpZXMgfD0gd2l0aGluQWN0aXZpdHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3RoZXJSZWNlaXZlcnMgfD0gd2l0aGluUmVjZWl2ZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3RoZXJTZXJ2aWNlcyB8PSB3aXRoaW5TZXJ2aWNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2l0aGluU2VydmljZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQYXltZW50U2VydmljZSB8PSAoYWN0SG9zdEFwZHVTZXJ2aWNlICYmIGhhc01ldGFIb3N0UGF5bWVudENhdGVnb3J5ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmluZE5mY1NlcnZpY2VQZXJtaXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGF5bWVudFNlcnZpY2UgfD0gKGFjdE9mZkhvc3RBcGR1U2VydmljZSAmJiBoYXNNZXRhT2ZmSG9zdFBheW1lbnRDYXRlZ29yeSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JpbmROZmNTZXJ2aWNlUGVybWlzc2lvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluQWN0aXZpdHkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpblNlcnZpY2UgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpblJlY2VpdmVyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNJbnRlbnRGaWx0ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzTWFpbkFjdGl2aXR5ID0gaXNMYXVuY2hlckFjdGl2aXR5ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVwdGggPCA0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2l0aGluSW50ZW50RmlsdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpdGhpbkFjdGl2aXR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc01haW5BY3Rpdml0eSB8PSBhY3RNYWluQWN0aXZpdHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc090aGVyQWN0aXZpdGllcyB8PSAhYWN0TWFpbkFjdGl2aXR5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aGluUmVjZWl2ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzV2lkZ2V0UmVjZWl2ZXJzIHw9IGFjdFdpZGdldFJlY2VpdmVyczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRGV2aWNlQWRtaW5SZWNlaXZlciB8PSAoYWN0RGV2aWNlQWRtaW5FbmFibGVkICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmluZERldmljZUFkbWluUGVybWlzc2lvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc090aGVyUmVjZWl2ZXJzIHw9ICghYWN0V2lkZ2V0UmVjZWl2ZXJzICYmICFhY3REZXZpY2VBZG1pbkVuYWJsZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aGluU2VydmljZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJbWVTZXJ2aWNlIHw9IGFjdEltZVNlcnZpY2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1dhbGxwYXBlclNlcnZpY2UgfD0gYWN0V2FsbHBhcGVyU2VydmljZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQWNjZXNzaWJpbGl0eVNlcnZpY2UgfD0gKGFjdEFjY2Vzc2liaWxpdHlTZXJ2aWNlICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlUGVybWlzc2lvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1ByaW50U2VydmljZSB8PSAoYWN0UHJpbnRTZXJ2aWNlICYmIGhhc0JpbmRQcmludFNlcnZpY2VQZXJtaXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3RoZXJTZXJ2aWNlcyB8PSAoIWFjdEltZVNlcnZpY2UgJiYgIWFjdFdhbGxwYXBlclNlcnZpY2UgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWN0QWNjZXNzaWJpbGl0eVNlcnZpY2UgJiYgIWFjdFByaW50U2VydmljZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhY3RIb3N0QXBkdVNlcnZpY2UgJiYgIWFjdE9mZkhvc3RBcGR1U2VydmljZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluSW50ZW50RmlsdGVyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjb2RlICE9IFJlc1hNTFRyZWU6OlNUQVJUX1RBRykgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVwdGgrKzsKLSAgICAgICAgICAgICAgICBTdHJpbmc4IHRhZyh0cmVlLmdldEVsZW1lbnROYW1lKCZsZW4pKTsKLSAgICAgICAgICAgICAgICAvL3ByaW50ZigiRGVwdGggJWQsICAlc1xuIiwgZGVwdGgsIHRhZy5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlcHRoID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyAhPSAibWFuaWZlc3QiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBtYW5pZmVzdCBkb2VzIG5vdCBzdGFydCB3aXRoIDxtYW5pZmVzdD4gdGFnXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwa2cgPSBnZXRBdHRyaWJ1dGUodHJlZSwgTlVMTCwgInBhY2thZ2UiLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJwYWNrYWdlOiBuYW1lPSclcycgIiwgcGtnLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB2ZXJzaW9uQ29kZSA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwgVkVSU0lPTl9DT0RFX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOnZlcnNpb25Db2RlJyBhdHRyaWJ1dGU6ICVzXG4iLCBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb25Db2RlID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ2ZXJzaW9uQ29kZT0nJWQnICIsIHZlcnNpb25Db2RlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigidmVyc2lvbkNvZGU9JycgIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCB2ZXJzaW9uTmFtZSA9IGdldFJlc29sdmVkQXR0cmlidXRlKCZyZXMsIHRyZWUsIFZFUlNJT05fTkFNRV9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDp2ZXJzaW9uTmFtZScgYXR0cmlidXRlOiAlc1xuIiwgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigidmVyc2lvbk5hbWU9JyVzJ1xuIiwgdmVyc2lvbk5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVwdGggPT0gMikgewotICAgICAgICAgICAgICAgICAgICB3aXRoaW5BcHBsaWNhdGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09ICJhcHBsaWNhdGlvbiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbkFwcGxpY2F0aW9uID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBsYWJlbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOTCA9IGxvY2FsZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE5MOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBsb2NhbGVTdHIgPSAgbG9jYWxlc1tpXS5zdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldHMuc2V0TG9jYWxlKGxvY2FsZVN0ciAhPSBOVUxMID8gbG9jYWxlU3RyIDogIiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggbGxhYmVsID0gZ2V0UmVzb2x2ZWRBdHRyaWJ1dGUoJnJlcywgdHJlZSwgTEFCRUxfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGxhYmVsICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGVTdHIgPT0gTlVMTCB8fCBzdHJsZW4obG9jYWxlU3RyKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IGxsYWJlbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiYXBwbGljYXRpb24tbGFiZWw6JyVzJ1xuIiwgbGxhYmVsLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYWJlbCA9PSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gbGxhYmVsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJhcHBsaWNhdGlvbi1sYWJlbC0lczonJXMnXG4iLCBsb2NhbGVTdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxsYWJlbC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlX2NvbmZpZyB0bXBDb25maWcgPSBjb25maWc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgTkQgPSBkZW5zaXRpZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE5EOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDb25maWcuZGVuc2l0eSA9IGRlbnNpdGllc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldHMuc2V0Q29uZmlndXJhdGlvbih0bXBDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggaWNvbiA9IGdldFJlc29sdmVkQXR0cmlidXRlKCZyZXMsIHRyZWUsIElDT05fQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWNvbiAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImFwcGxpY2F0aW9uLWljb24tJWQ6JyVzJ1xuIiwgZGVuc2l0aWVzW2ldLCBpY29uLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NldHMuc2V0Q29uZmlndXJhdGlvbihjb25maWcpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IGljb24gPSBnZXRSZXNvbHZlZEF0dHJpYnV0ZSgmcmVzLCB0cmVlLCBJQ09OX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6aWNvbicgYXR0cmlidXRlOiAlc1xuIiwgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgdGVzdE9ubHkgPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsIFRFU1RfT05MWV9BVFRSLCAmZXJyb3IsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOnRlc3RPbmx5JyBhdHRyaWJ1dGU6ICVzXG4iLCBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJhcHBsaWNhdGlvbjogbGFiZWw9JyVzJyAiLCBsYWJlbC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImljb249JyVzJ1xuIiwgaWNvbi5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVzdE9ubHkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigidGVzdE9ubHk9JyVkJ1xuIiwgdGVzdE9ubHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGRlYnVnZ2FibGUgPSBnZXRSZXNvbHZlZEludGVnZXJBdHRyaWJ1dGUoJnJlcywgdHJlZSwgREVCVUdHQUJMRV9BVFRSLCAmZXJyb3IsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOmRlYnVnZ2FibGUnIGF0dHJpYnV0ZTogJXNcbiIsIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWdnYWJsZSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJhcHBsaWNhdGlvbi1kZWJ1Z2dhYmxlXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInVzZXMtc2RrIikgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBjb2RlID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLCBNSU5fU0RLX1ZFUlNJT05fQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lID0gZ2V0UmVzb2x2ZWRBdHRyaWJ1dGUoJnJlcywgdHJlZSwgTUlOX1NES19WRVJTSU9OX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDptaW5TZGtWZXJzaW9uJyBhdHRyaWJ1dGU6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAiRG9udXQiKSB0YXJnZXRTZGsgPSA0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigic2RrVmVyc2lvbjonJXMnXG4iLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFNkayA9IGNvZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJzZGtWZXJzaW9uOiclZCdcbiIsIGNvZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwgTUFYX1NES19WRVJTSU9OX0FUVFIsIE5VTEwsIC0xKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJtYXhTZGtWZXJzaW9uOiclZCdcbiIsIGNvZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwgVEFSR0VUX1NES19WRVJTSU9OX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICIiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IGdldFJlc29sdmVkQXR0cmlidXRlKCZyZXMsIHRyZWUsIFRBUkdFVF9TREtfVkVSU0lPTl9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6dGFyZ2V0U2RrVmVyc2lvbicgYXR0cmlidXRlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIkRvbnV0IiAmJiB0YXJnZXRTZGsgPCA0KSB0YXJnZXRTZGsgPSA0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigidGFyZ2V0U2RrVmVyc2lvbjonJXMnXG4iLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRTZGsgPCBjb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFNkayA9IGNvZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigidGFyZ2V0U2RrVmVyc2lvbjonJWQnXG4iLCBjb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInVzZXMtY29uZmlndXJhdGlvbiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcmVxVG91Y2hTY3JlZW4gPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUV9UT1VDSF9TQ1JFRU5fQVRUUiwgTlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHJlcUtleWJvYXJkVHlwZSA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRX0tFWUJPQVJEX1RZUEVfQVRUUiwgTlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHJlcUhhcmRLZXlib2FyZCA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRX0hBUkRfS0VZQk9BUkRfQVRUUiwgTlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHJlcU5hdmlnYXRpb24gPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUV9OQVZJR0FUSU9OX0FUVFIsIE5VTEwsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCByZXFGaXZlV2F5TmF2ID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFfRklWRV9XQVlfTkFWX0FUVFIsIE5VTEwsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWNvbmZpZ3VyYXRpb246Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxVG91Y2hTY3JlZW4gIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIHJlcVRvdWNoU2NyZWVuPSclZCciLCByZXFUb3VjaFNjcmVlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxS2V5Ym9hcmRUeXBlICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiByZXFLZXlib2FyZFR5cGU9JyVkJyIsIHJlcUtleWJvYXJkVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxSGFyZEtleWJvYXJkICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiByZXFIYXJkS2V5Ym9hcmQ9JyVkJyIsIHJlcUhhcmRLZXlib2FyZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxTmF2aWdhdGlvbiAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgcmVxTmF2aWdhdGlvbj0nJWQnIiwgcmVxTmF2aWdhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxRml2ZVdheU5hdiAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgcmVxRml2ZVdheU5hdj0nJWQnIiwgcmVxRml2ZVdheU5hdik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09ICJzdXBwb3J0cy1pbnB1dCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpblN1cHBvcnRzSW5wdXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSAic3VwcG9ydHMtc2NyZWVucyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsU2NyZWVuID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTUFMTF9TQ1JFRU5fQVRUUiwgTlVMTCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxTY3JlZW4gPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PUk1BTF9TQ1JFRU5fQVRUUiwgTlVMTCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXJnZVNjcmVlbiA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEFSR0VfU0NSRUVOX0FUVFIsIE5VTEwsIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgeGxhcmdlU2NyZWVuID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTEFSR0VfU0NSRUVOX0FUVFIsIE5VTEwsIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgYW55RGVuc2l0eSA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5ZX0RFTlNJVFlfQVRUUiwgTlVMTCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlc1NtYWxsZXN0V2lkdGhEcCA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRVNfU01BTExFU1RfV0lEVEhfRFBfQVRUUiwgTlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlV2lkdGhMaW1pdERwID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01QQVRJQkxFX1dJRFRIX0xJTUlUX0RQX0FUVFIsIE5VTEwsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2VzdFdpZHRoTGltaXREcCA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEFSR0VTVF9XSURUSF9MSU1JVF9EUF9BVFRSLCBOVUxMLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInVzZXMtZmVhdHVyZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICE9ICIiICYmIGVycm9yID09ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcSA9IGdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUVVJUkVEX0FUVFIsIE5VTEwsIDEpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjQ2FtZXJhRmVhdHVyZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5hdXRvZm9jdXMiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXNlIGhhdmUgbm8gY29ycmVzcG9uZGluZyBwZXJtaXNzaW9uIHRvIGNoZWNrIGZvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHNob3VsZCBpbXBseSB0aGUgZm91bmRhdGlvbmFsIGNhbWVyYSBwZXJtaXNzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcUNhbWVyYUF1dG9mb2N1c0ZlYXR1cmUgPSByZXFDYW1lcmFBdXRvZm9jdXNGZWF0dXJlIHx8IHJlcTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY0NhbWVyYUF1dG9mb2N1c0ZlYXR1cmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVxICYmIChuYW1lID09ICJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5mbGFzaCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXNlIGhhdmUgbm8gY29ycmVzcG9uZGluZyBwZXJtaXNzaW9uIHRvIGNoZWNrIGZvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHNob3VsZCBpbXBseSB0aGUgZm91bmRhdGlvbmFsIGNhbWVyYSBwZXJtaXNzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcUNhbWVyYUZsYXNoRmVhdHVyZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjTG9jYXRpb25GZWF0dXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQuaGFyZHdhcmUubG9jYXRpb24ubmV0d29yayIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY05ldHdvcmtMb2NGZWF0dXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxTmV0d29ya0xvY0ZlYXR1cmUgPSByZXFOZXR3b3JrTG9jRmVhdHVyZSB8fCByZXE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uLmdwcyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY0dwc0ZlYXR1cmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFHcHNGZWF0dXJlID0gcmVxR3BzRmVhdHVyZSB8fCByZXE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLmhhcmR3YXJlLmJsdWV0b290aCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY0JsdWV0b290aEZlYXR1cmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5oYXJkd2FyZS50b3VjaHNjcmVlbiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY1RvdWNoc2NyZWVuRmVhdHVyZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLmhhcmR3YXJlLnRvdWNoc2NyZWVuLm11bHRpdG91Y2giKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNNdWx0aXRvdWNoRmVhdHVyZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLmhhcmR3YXJlLnRvdWNoc2NyZWVuLm11bHRpdG91Y2guZGlzdGluY3QiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcURpc3RpbmN0TXVsdGl0b3VjaEZlYXR1cmUgPSByZXFEaXN0aW5jdE11bHRpdG91Y2hGZWF0dXJlIHx8IHJlcTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQuaGFyZHdhcmUubWljcm9waG9uZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY01pY3JvcGhvbmVGZWF0dXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQuaGFyZHdhcmUud2lmaSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY1dpRmlGZWF0dXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQuaGFyZHdhcmUudGVsZXBob255IikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjVGVsZXBob255RmVhdHVyZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXEgJiYgKG5hbWUgPT0gImFuZHJvaWQuaGFyZHdhcmUudGVsZXBob255LmdzbSIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5oYXJkd2FyZS50ZWxlcGhvbnkuY2RtYSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXNlIGhhdmUgbm8gY29ycmVzcG9uZGluZyBwZXJtaXNzaW9uIHRvIGNoZWNrIGZvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHNob3VsZCBpbXBseSB0aGUgZm91bmRhdGlvbmFsIHRlbGVwaG9ueSBwZXJtaXNzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcVRlbGVwaG9ueVN1YkZlYXR1cmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5oYXJkd2FyZS5zY3JlZW4ucG9ydHJhaXQiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNTY3JlZW5Qb3J0cmFpdEZlYXR1cmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5oYXJkd2FyZS5zY3JlZW4ubGFuZHNjYXBlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjU2NyZWVuTGFuZHNjYXBlRmVhdHVyZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1mZWF0dXJlJXM6JyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcSA/ICIiIDogIi1ub3QtcmVxdWlyZWQiLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnMgPSBnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9FU19WRVJTSU9OX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yID09ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1nbC1lczonMHgleCdcbiIsIHZlcnMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInVzZXMtcGVybWlzc2lvbiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAiIiAmJiBlcnJvciA9PSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQ0FNRVJBIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNDYW1lcmFQZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfRklORV9MT0NBVElPTiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzR3BzUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX01PQ0tfTE9DQVRJT04iKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc01vY2tMb2NQZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfQ09BUlNFX0xPQ0FUSU9OIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNDb2Fyc2VMb2NQZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfTE9DQVRJT05fRVhUUkFfQ09NTUFORFMiIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uSU5TVEFMTF9MT0NBVElPTl9QUk9WSURFUiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzR2VuZXJhbExvY1Blcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJMVUVUT09USCIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5CTFVFVE9PVEhfQURNSU4iKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JsdWV0b290aFBlcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ09SRF9BVURJTyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVjb3JkQXVkaW9QZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfV0lGSV9TVEFURSIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5DSEFOR0VfV0lGSV9TVEFURSIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5DSEFOR0VfV0lGSV9NVUxUSUNBU1RfU1RBVEUiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1dpRmlQZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5DQUxMX1BIT05FIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkNBTExfUFJJVklMRUdFRCIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5NT0RJRllfUEhPTkVfU1RBVEUiIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uUFJPQ0VTU19PVVRHT0lOR19DQUxMUyIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUFEX1NNUyIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUNFSVZFX1NNUyIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUNFSVZFX01NUyIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUNFSVZFX1dBUF9QVVNIIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlNFTkRfU01TIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0FQTl9TRVRUSU5HUyIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5XUklURV9TTVMiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1RlbGVwaG9ueVBlcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0VYVEVSTkFMX1NUT1JBR0UiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1dyaXRlRXh0ZXJuYWxTdG9yYWdlUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9FWFRFUk5BTF9TVE9SQUdFIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNSZWFkRXh0ZXJuYWxTdG9yYWdlUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9QSE9ORV9TVEFURSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVhZFBob25lU3RhdGVQZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUFEX0NPTlRBQ1RTIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNSZWFkQ29udGFjdHNQZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5XUklURV9DT05UQUNUUyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzV3JpdGVDb250YWN0c1Blcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfQ0FMTF9MT0ciKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JlYWRDYWxsTG9nUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfQ0FMTF9MT0ciKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1dyaXRlQ2FsbExvZ1Blcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtcGVybWlzc2lvbjonJXMnXG4iLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLCBSRVFVSVJFRF9BVFRSLCBOVUxMLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlcSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIm9wdGlvbmFsLXBlcm1pc3Npb246JyVzJ1xuIiwgbmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6bmFtZScgYXR0cmlidXRlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09ICJ1c2VzLXBhY2thZ2UiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWUgPSBnZXRBdHRyaWJ1dGUodHJlZSwgTkFNRV9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gIiIgJiYgZXJyb3IgPT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtcGFja2FnZTonJXMnXG4iLCBuYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOm5hbWUnIGF0dHJpYnV0ZTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gIm9yaWdpbmFsLXBhY2thZ2UiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWUgPSBnZXRBdHRyaWJ1dGUodHJlZSwgTkFNRV9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gIiIgJiYgZXJyb3IgPT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIm9yaWdpbmFsLXBhY2thZ2U6JyVzJ1xuIiwgbmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDpuYW1lJyBhdHRyaWJ1dGU6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09ICJzdXBwb3J0cy1nbC10ZXh0dXJlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lID0gZ2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICE9ICIiICYmIGVycm9yID09ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJzdXBwb3J0cy1nbC10ZXh0dXJlOiclcydcbiIsIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6bmFtZScgYXR0cmlidXRlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSAiY29tcGF0aWJsZS1zY3JlZW5zIikgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRDb21wYXRpYmxlU2NyZWVucyh0cmVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoLS07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09ICJwYWNrYWdlLXZlcmlmaWVyIikgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lID0gZ2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICE9ICIiICYmIGVycm9yID09ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBwdWJsaWNLZXkgPSBnZXRBdHRyaWJ1dGUodHJlZSwgUFVCTElDX0tFWV9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdWJsaWNLZXkgIT0gIiIgJiYgZXJyb3IgPT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJwYWNrYWdlLXZlcmlmaWVyOiBuYW1lPSclcycgcHVibGljS2V5PSclcydcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS5zdHJpbmcoKSwgcHVibGljS2V5LnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlcHRoID09IDMpIHsKLSAgICAgICAgICAgICAgICAgICAgd2l0aGluQWN0aXZpdHkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgd2l0aGluUmVjZWl2ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgd2l0aGluU2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBoYXNJbnRlbnRGaWx0ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaGFzTWV0YUhvc3RQYXltZW50Q2F0ZWdvcnkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaGFzTWV0YU9mZkhvc3RQYXltZW50Q2F0ZWdvcnkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaGFzQmluZERldmljZUFkbWluUGVybWlzc2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBoYXNCaW5kSW5wdXRNZXRob2RQZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZVBlcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaGFzQmluZFByaW50U2VydmljZVBlcm1pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaGFzQmluZE5mY1NlcnZpY2VQZXJtaXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3aXRoaW5BcHBsaWNhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYodGFnID09ICJhY3Rpdml0eSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW5BY3Rpdml0eSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlOYW1lID0gZ2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOm5hbWUnIGF0dHJpYnV0ZTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlMYWJlbCA9IGdldFJlc29sdmVkQXR0cmlidXRlKCZyZXMsIHRyZWUsIExBQkVMX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDpsYWJlbCcgYXR0cmlidXRlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eUljb24gPSBnZXRSZXNvbHZlZEF0dHJpYnV0ZSgmcmVzLCB0cmVlLCBJQ09OX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDppY29uJyBhdHRyaWJ1dGU6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgb3JpZW4gPSBnZXRSZXNvbHZlZEludGVnZXJBdHRyaWJ1dGUoJnJlcywgdHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUkVFTl9PUklFTlRBVElPTl9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciA9PSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZW4gPT0gMCB8fCBvcmllbiA9PSA2IHx8IG9yaWVuID09IDgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcXVlc3RzIGxhbmRzY2FwZSwgc2Vuc29yTGFuZHNjYXBlLCBvciByZXZlcnNlTGFuZHNjYXBlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxU2NyZWVuTGFuZHNjYXBlRmVhdHVyZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3JpZW4gPT0gMSB8fCBvcmllbiA9PSA3IHx8IG9yaWVuID09IDkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcXVlc3RzIHBvcnRyYWl0LCBzZW5zb3JQb3J0cmFpdCwgb3IgcmV2ZXJzZVBvcnRyYWl0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxU2NyZWVuUG9ydHJhaXRGZWF0dXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09ICJ1c2VzLWxpYnJhcnkiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBsaWJyYXJ5TmFtZSA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOm5hbWUnIGF0dHJpYnV0ZSBmb3IgdXNlcy1saWJyYXJ5IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgJXNcbiIsIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxID0gZ2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRURfQVRUUiwgTlVMTCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWxpYnJhcnklczonJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxID8gIiIgOiAiLW5vdC1yZXF1aXJlZCIsIGxpYnJhcnlOYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09ICJyZWNlaXZlciIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW5SZWNlaXZlciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXJOYW1lID0gZ2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDpuYW1lJyBhdHRyaWJ1dGUgZm9yIHJlY2VpdmVyOiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICVzXG4iLCBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IHBlcm1pc3Npb24gPSBnZXRBdHRyaWJ1dGUodHJlZSwgUEVSTUlTU0lPTl9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciA9PSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvbiA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfREVWSUNFX0FETUlOIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmluZERldmljZUFkbWluUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6cGVybWlzc2lvbicgYXR0cmlidXRlIGZvciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJlY2VpdmVyICclcyc6ICVzXG4iLCByZWNlaXZlck5hbWUuc3RyaW5nKCksIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSAic2VydmljZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW5TZXJ2aWNlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZSA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOm5hbWUnIGF0dHJpYnV0ZSBmb3IiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzZXJ2aWNlOiAlc1xuIiwgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBwZXJtaXNzaW9uID0gZ2V0QXR0cmlidXRlKHRyZWUsIFBFUk1JU1NJT05fQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgPT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24gPT0gImFuZHJvaWQucGVybWlzc2lvbi5CSU5EX0lOUFVUX01FVEhPRCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JpbmRJbnB1dE1ldGhvZFBlcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24gPT0gImFuZHJvaWQucGVybWlzc2lvbi5CSU5EX0FDQ0VTU0lCSUxJVFlfU0VSVklDRSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZVBlcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24gPT0gImFuZHJvaWQucGVybWlzc2lvbi5CSU5EX1BSSU5UX1NFUlZJQ0UiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNCaW5kUHJpbnRTZXJ2aWNlUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfTkZDX1NFUlZJQ0UiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNCaW5kTmZjU2VydmljZVBlcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOnBlcm1pc3Npb24nIGF0dHJpYnV0ZSBmb3IiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzZXJ2aWNlICclcyc6ICVzXG4iLCBzZXJ2aWNlTmFtZS5zdHJpbmcoKSwgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRoaW5TdXBwb3J0c0lucHV0ICYmIHRhZyA9PSAiaW5wdXQtdHlwZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAiIiAmJiBlcnJvciA9PSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZElucHV0LmFkZChuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOm5hbWUnIGF0dHJpYnV0ZTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXB0aCA9PSA0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gImludGVudC1maWx0ZXIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNJbnRlbnRGaWx0ZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluSW50ZW50RmlsdGVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdE1haW5BY3Rpdml0eSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgYWN0V2lkZ2V0UmVjZWl2ZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3RJbWVTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3RXYWxscGFwZXJTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3RBY2Nlc3NpYmlsaXR5U2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgYWN0UHJpbnRTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3REZXZpY2VBZG1pbkVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdEhvc3RBcGR1U2VydmljZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgYWN0T2ZmSG9zdEFwZHVTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aGluU2VydmljZSAmJiB0YWcgPT0gIm1ldGEtZGF0YSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6bmFtZScgYXR0cmlidXRlIGZvciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbWV0YS1kYXRhIHRhZyBpbiBzZXJ2aWNlICclcyc6ICVzXG4iLCBzZXJ2aWNlTmFtZS5zdHJpbmcoKSwgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gImFuZHJvaWQubmZjLmNhcmRlbXVsYXRpb24uaG9zdF9hcGR1X3NlcnZpY2UiIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQubmZjLmNhcmRlbXVsYXRpb24ub2ZmX2hvc3RfYXBkdV9zZXJ2aWNlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgb2ZmSG9zdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gImFuZHJvaWQubmZjLmNhcmRlbXVsYXRpb24uaG9zdF9hcGR1X3NlcnZpY2UiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZkhvc3QgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IHhtbFBhdGggPSBnZXRSZXNvbHZlZEF0dHJpYnV0ZSgmcmVzLCB0cmVlLCBSRVNPVVJDRV9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6cmVzb3VyY2UnIGF0dHJpYnV0ZSBmb3IiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBtZXRhLWRhdGEgdGFnIGluIHNlcnZpY2UgJyVzJzogJXNcbiIsIHNlcnZpY2VOYW1lLnN0cmluZygpLCBlcnJvci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nOD4gY2F0ZWdvcmllcyA9IGdldE5mY0FpZENhdGVnb3JpZXMoYXNzZXRzLCB4bWxQYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmSG9zdCwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nIEFJRCBjYXRlZ29yeSBmb3Igc2VydmljZSAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VOYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBjYXRMZW4gPSBjYXRlZ29yaWVzLnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhdExlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGF5bWVudENhdGVnb3J5ID0gKGNhdGVnb3JpZXNbaV0gPT0gInBheW1lbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZkhvc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc01ldGFPZmZIb3N0UGF5bWVudENhdGVnb3J5IHw9IHBheW1lbnRDYXRlZ29yeTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc01ldGFIb3N0UGF5bWVudENhdGVnb3J5IHw9IHBheW1lbnRDYXRlZ29yeTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRlcHRoID09IDUpICYmIHdpdGhpbkludGVudEZpbHRlcil7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZzggYWN0aW9uOwotICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09ICJhY3Rpb24iKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSBnZXRBdHRyaWJ1dGUodHJlZSwgTkFNRV9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOm5hbWUnIGF0dHJpYnV0ZTogJXNcbiIsIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2l0aGluQWN0aXZpdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09ICJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNYWluQWN0aXZpdHkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RNYWluQWN0aXZpdHkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aGluUmVjZWl2ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09ICJhbmRyb2lkLmFwcHdpZGdldC5hY3Rpb24uQVBQV0lER0VUX1VQREFURSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0V2lkZ2V0UmVjZWl2ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSAiYW5kcm9pZC5hcHAuYWN0aW9uLkRFVklDRV9BRE1JTl9FTkFCTEVEIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3REZXZpY2VBZG1pbkVuYWJsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aGluU2VydmljZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gImFuZHJvaWQudmlldy5JbnB1dE1ldGhvZCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0SW1lU2VydmljZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gImFuZHJvaWQuc2VydmljZS53YWxscGFwZXIuV2FsbHBhcGVyU2VydmljZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0V2FsbHBhcGVyU2VydmljZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gImFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2UiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdEFjY2Vzc2liaWxpdHlTZXJ2aWNlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSAiYW5kcm9pZC5wcmludHNlcnZpY2UuUHJpbnRTZXJ2aWNlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RQcmludFNlcnZpY2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09ICJhbmRyb2lkLm5mYy5jYXJkZW11bGF0aW9uLmFjdGlvbi5IT1NUX0FQRFVfU0VSVklDRSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0SG9zdEFwZHVTZXJ2aWNlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSAiYW5kcm9pZC5uZmMuY2FyZGVtdWxhdGlvbi5hY3Rpb24uT0ZGX0hPU1RfQVBEVV9TRVJWSUNFIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RPZmZIb3N0QXBkdVNlcnZpY2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gImFuZHJvaWQuaW50ZW50LmFjdGlvbi5TRUFSQ0giKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWFyY2hhYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gImNhdGVnb3J5IikgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBjYXRlZ29yeSA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ25hbWUnIGF0dHJpYnV0ZTogJXNcbiIsIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2l0aGluQWN0aXZpdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2F0ZWdvcnkgPT0gImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xhdW5jaGVyQWN0aXZpdHkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gUHJlLTEuNiBpbXBsaWNpdGx5IGdyYW50ZWQgcGVybWlzc2lvbiBjb21wYXRpYmlsaXR5IGxvZ2ljCi0gICAgICAgICAgICBpZiAodGFyZ2V0U2RrIDwgNCkgewotICAgICAgICAgICAgICAgIGlmICghaGFzV3JpdGVFeHRlcm5hbFN0b3JhZ2VQZXJtaXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1wZXJtaXNzaW9uOidhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfRVhURVJOQUxfU1RPUkFHRSdcbiIpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtaW1wbGllZC1wZXJtaXNzaW9uOidhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfRVhURVJOQUxfU1RPUkFHRScsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIid0YXJnZXRTZGtWZXJzaW9uIDwgNCdcbiIpOwotICAgICAgICAgICAgICAgICAgICBoYXNXcml0ZUV4dGVybmFsU3RvcmFnZVBlcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWhhc1JlYWRQaG9uZVN0YXRlUGVybWlzc2lvbikgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtcGVybWlzc2lvbjonYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfUEhPTkVfU1RBVEUnXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtcGVybWlzc2lvbjonYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfUEhPTkVfU1RBVEUnLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIndGFyZ2V0U2RrVmVyc2lvbiA8IDQnXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSBhcHBsaWNhdGlvbiBoYXMgcmVxdWVzdGVkIFdSSVRFX0VYVEVSTkFMX1NUT1JBR0UsIHdlIHdpbGwKLSAgICAgICAgICAgIC8vIGZvcmNlIHRoZW0gdG8gYWx3YXlzIHRha2UgUkVBRF9FWFRFUk5BTF9TVE9SQUdFIGFzIHdlbGwuICBXZSBhbHdheXMKLSAgICAgICAgICAgIC8vIGRvIHRoaXMgKHJlZ2FyZGxlc3Mgb2YgdGFyZ2V0IEFQSSB2ZXJzaW9uKSBiZWNhdXNlIHdlIGNhbid0IGhhdmUKLSAgICAgICAgICAgIC8vIGFuIGFwcCB3aXRoIHdyaXRlIHBlcm1pc3Npb24gYnV0IG5vdCByZWFkIHBlcm1pc3Npb24uCi0gICAgICAgICAgICBpZiAoIWhhc1JlYWRFeHRlcm5hbFN0b3JhZ2VQZXJtaXNzaW9uICYmIGhhc1dyaXRlRXh0ZXJuYWxTdG9yYWdlUGVybWlzc2lvbikgewotICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1wZXJtaXNzaW9uOidhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9FWFRFUk5BTF9TVE9SQUdFJ1xuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtcGVybWlzc2lvbjonYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfRVhURVJOQUxfU1RPUkFHRScsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiJ3JlcXVlc3RlZCBXUklURV9FWFRFUk5BTF9TVE9SQUdFJ1xuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFByZS1KZWxseUJlYW4gY2FsbCBsb2cgcGVybWlzc2lvbiBjb21wYXRpYmlsaXR5LgotICAgICAgICAgICAgaWYgKHRhcmdldFNkayA8IDE2KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNSZWFkQ2FsbExvZ1Blcm1pc3Npb24gJiYgaGFzUmVhZENvbnRhY3RzUGVybWlzc2lvbikgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtcGVybWlzc2lvbjonYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfQ0FMTF9MT0cnXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtcGVybWlzc2lvbjonYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfQ0FMTF9MT0cnLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIndGFyZ2V0U2RrVmVyc2lvbiA8IDE2IGFuZCByZXF1ZXN0ZWQgUkVBRF9DT05UQUNUUydcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWhhc1dyaXRlQ2FsbExvZ1Blcm1pc3Npb24gJiYgaGFzV3JpdGVDb250YWN0c1Blcm1pc3Npb24pIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLXBlcm1pc3Npb246J2FuZHJvaWQucGVybWlzc2lvbi5XUklURV9DQUxMX0xPRydcbiIpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtaW1wbGllZC1wZXJtaXNzaW9uOidhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfQ0FMTF9MT0cnLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIndGFyZ2V0U2RrVmVyc2lvbiA8IDE2IGFuZCByZXF1ZXN0ZWQgV1JJVEVfQ09OVEFDVFMnXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgYmxvY2tzIGhhbmRsZSBwcmludGluZyAiaW5mZXJyZWQiIHVzZXMtZmVhdHVyZXMsIGJhc2VkCi0gICAgICAgICAgICAgKiBvbiB3aGV0aGVyIHJlbGF0ZWQgZmVhdHVyZXMgb3IgcGVybWlzc2lvbnMgYXJlIHVzZWQgYnkgdGhlIGFwcC4KLSAgICAgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgdmFyaW91cyBzcGVjKkZlYXR1cmUgdmFyaWFibGVzIGRlbm90ZSB3aGV0aGVyIHRoZQotICAgICAgICAgICAgICogcmVsZXZhbnQgdGFnIHdhcyAqcHJlc2VudCogaW4gdGhlIEFuZHJvaWRNYW5mZXN0LCBub3QgdGhhdCBpdCB3YXMKLSAgICAgICAgICAgICAqIHByZXNlbnQgYW5kIHNldCB0byB0cnVlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICAvLyBDYW1lcmEtcmVsYXRlZCBiYWNrLWNvbXBhdGliaWxpdHkgbG9naWMKLSAgICAgICAgICAgIGlmICghc3BlY0NhbWVyYUZlYXR1cmUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVxQ2FtZXJhRmxhc2hGZWF0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlmIGFwcCByZXF1ZXN0ZWQgYSBzdWItZmVhdHVyZSAoYXV0b2ZvY3VzIG9yIGZsYXNoKSBhbmQgZGlkbid0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJlcXVlc3QgdGhlIGJhc2UgY2FtZXJhIGZlYXR1cmUsIHdlIGluZmVyIHRoYXQgaXQgbWVhbnQgdG8KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhJ1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1pbXBsaWVkLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhJywiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3JlcXVlc3RlZCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5mbGFzaCBmZWF0dXJlJ1xuIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXFDYW1lcmFBdXRvZm9jdXNGZWF0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlmIGFwcCByZXF1ZXN0ZWQgYSBzdWItZmVhdHVyZSAoYXV0b2ZvY3VzIG9yIGZsYXNoKSBhbmQgZGlkbid0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJlcXVlc3QgdGhlIGJhc2UgY2FtZXJhIGZlYXR1cmUsIHdlIGluZmVyIHRoYXQgaXQgbWVhbnQgdG8KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhJ1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1pbXBsaWVkLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhJywiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3JlcXVlc3RlZCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5hdXRvZm9jdXMgZmVhdHVyZSdcbiIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2FtZXJhUGVybWlzc2lvbikgewotICAgICAgICAgICAgICAgICAgICAvLyBpZiBhcHAgd2FudHMgdG8gdXNlIGNhbWVyYSBidXQgZGlkbid0IHJlcXVlc3QgdGhlIGZlYXR1cmUsIHdlIGluZmVyIAotICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGl0IG1lYW50IHRvLCBhbmQgZnVydGhlciB0aGF0IGl0IHdhbnRzIGF1dG9mb2N1cwotICAgICAgICAgICAgICAgICAgICAvLyAod2hpY2ggd2FzIHRoZSAxLjAgLSAxLjUgYmVoYXZpb3IpCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYSdcbiIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXNwZWNDYW1lcmFBdXRvZm9jdXNGZWF0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuYXV0b2ZvY3VzJ1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtaW1wbGllZC1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5hdXRvZm9jdXMnLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3JlcXVlc3RlZCBhbmRyb2lkLnBlcm1pc3Npb24uQ0FNRVJBIHBlcm1pc3Npb24nXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTG9jYXRpb24tcmVsYXRlZCBiYWNrLWNvbXBhdGliaWxpdHkgbG9naWMKLSAgICAgICAgICAgIGlmICghc3BlY0xvY2F0aW9uRmVhdHVyZSAmJgotICAgICAgICAgICAgICAgIChoYXNNb2NrTG9jUGVybWlzc2lvbiB8fCBoYXNDb2Fyc2VMb2NQZXJtaXNzaW9uIHx8IGhhc0dwc1Blcm1pc3Npb24gfHwKLSAgICAgICAgICAgICAgICAgaGFzR2VuZXJhbExvY1Blcm1pc3Npb24gfHwgcmVxTmV0d29ya0xvY0ZlYXR1cmUgfHwgcmVxR3BzRmVhdHVyZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBpZiBhcHAgZWl0aGVyIHRha2VzIGEgbG9jYXRpb24tcmVsYXRlZCBwZXJtaXNzaW9uIG9yIHJlcXVlc3RzIG9uZSBvZiB0aGUKLSAgICAgICAgICAgICAgICAvLyBzdWItZmVhdHVyZXMsIHdlIGluZmVyIHRoYXQgaXQgYWxzbyBtZWFudCB0byByZXF1ZXN0IHRoZSBiYXNlIGxvY2F0aW9uIGZlYXR1cmUKLSAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS5sb2NhdGlvbidcbiIpOwotICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1pbXBsaWVkLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUubG9jYXRpb24nLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgIidyZXF1ZXN0ZWQgYSBsb2NhdGlvbiBhY2Nlc3MgcGVybWlzc2lvbidcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFzcGVjR3BzRmVhdHVyZSAmJiBoYXNHcHNQZXJtaXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgLy8gaWYgYXBwIHRha2VzIEdQUyAoRklORSBsb2NhdGlvbikgcGVybSBidXQgZG9lcyBub3QgcmVxdWVzdCB0aGUgR1BTCi0gICAgICAgICAgICAgICAgLy8gZmVhdHVyZSwgd2UgaW5mZXIgdGhhdCBpdCBtZWFudCB0bwotICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uLmdwcydcbiIpOwotICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1pbXBsaWVkLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUubG9jYXRpb24uZ3BzJywiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICIncmVxdWVzdGVkIGFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfRklORV9MT0NBVElPTiBwZXJtaXNzaW9uJ1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXNwZWNOZXR3b3JrTG9jRmVhdHVyZSAmJiBoYXNDb2Fyc2VMb2NQZXJtaXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgLy8gaWYgYXBwIHRha2VzIE5ldHdvcmsgbG9jYXRpb24gKENPQVJTRSBsb2NhdGlvbikgcGVybSBidXQgZG9lcyBub3QgcmVxdWVzdCB0aGUKLSAgICAgICAgICAgICAgICAvLyBuZXR3b3JrIGxvY2F0aW9uIGZlYXR1cmUsIHdlIGluZmVyIHRoYXQgaXQgbWVhbnQgdG8KLSAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS5sb2NhdGlvbi5uZXR3b3JrJ1xuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS5sb2NhdGlvbi5uZXR3b3JrJywiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICIncmVxdWVzdGVkIGFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfQ09BUlNFX0xPQ0FUSU9OIHBlcm1pc3Npb24nXG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQmx1ZXRvb3RoLXJlbGF0ZWQgY29tcGF0aWJpbGl0eSBsb2dpYwotICAgICAgICAgICAgaWYgKCFzcGVjQmx1ZXRvb3RoRmVhdHVyZSAmJiBoYXNCbHVldG9vdGhQZXJtaXNzaW9uICYmICh0YXJnZXRTZGsgPiA0KSkgewotICAgICAgICAgICAgICAgIC8vIGlmIGFwcCB0YWtlcyBhIEJsdWV0b290aCBwZXJtaXNzaW9uIGJ1dCBkb2VzIG5vdCByZXF1ZXN0IHRoZSBCbHVldG9vdGgKLSAgICAgICAgICAgICAgICAvLyBmZWF0dXJlLCB3ZSBpbmZlciB0aGF0IGl0IG1lYW50IHRvCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUuYmx1ZXRvb3RoJ1xuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS5ibHVldG9vdGgnLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgIidyZXF1ZXN0ZWQgYW5kcm9pZC5wZXJtaXNzaW9uLkJMVUVUT09USCBvciBhbmRyb2lkLnBlcm1pc3Npb24uQkxVRVRPT1RIX0FETUlOICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgInBlcm1pc3Npb24gYW5kIHRhcmdldFNka1ZlcnNpb24gPiA0J1xuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE1pY3JvcGhvbmUtcmVsYXRlZCBjb21wYXRpYmlsaXR5IGxvZ2ljCi0gICAgICAgICAgICBpZiAoIXNwZWNNaWNyb3Bob25lRmVhdHVyZSAmJiBoYXNSZWNvcmRBdWRpb1Blcm1pc3Npb24pIHsKLSAgICAgICAgICAgICAgICAvLyBpZiBhcHAgdGFrZXMgdGhlIHJlY29yZC1hdWRpbyBwZXJtaXNzaW9uIGJ1dCBkb2VzIG5vdCByZXF1ZXN0IHRoZSBtaWNyb3Bob25lCi0gICAgICAgICAgICAgICAgLy8gZmVhdHVyZSwgd2UgaW5mZXIgdGhhdCBpdCBtZWFudCB0bwotICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLm1pY3JvcGhvbmUnXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtaW1wbGllZC1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLm1pY3JvcGhvbmUnLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgIidyZXF1ZXN0ZWQgYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ09SRF9BVURJTyBwZXJtaXNzaW9uJ1xuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFdpRmktcmVsYXRlZCBjb21wYXRpYmlsaXR5IGxvZ2ljCi0gICAgICAgICAgICBpZiAoIXNwZWNXaUZpRmVhdHVyZSAmJiBoYXNXaUZpUGVybWlzc2lvbikgewotICAgICAgICAgICAgICAgIC8vIGlmIGFwcCB0YWtlcyBvbmUgb2YgdGhlIFdpRmkgcGVybWlzc2lvbnMgYnV0IGRvZXMgbm90IHJlcXVlc3QgdGhlIFdpRmkKLSAgICAgICAgICAgICAgICAvLyBmZWF0dXJlLCB3ZSBpbmZlciB0aGF0IGl0IG1lYW50IHRvCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUud2lmaSdcbiIpOwotICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1pbXBsaWVkLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUud2lmaScsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiJ3JlcXVlc3RlZCBhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX1dJRklfU1RBVEUsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQucGVybWlzc2lvbi5DSEFOR0VfV0lGSV9TVEFURSwgb3IgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5wZXJtaXNzaW9uLkNIQU5HRV9XSUZJX01VTFRJQ0FTVF9TVEFURSBwZXJtaXNzaW9uJ1xuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFRlbGVwaG9ueS1yZWxhdGVkIGNvbXBhdGliaWxpdHkgbG9naWMKLSAgICAgICAgICAgIGlmICghc3BlY1RlbGVwaG9ueUZlYXR1cmUgJiYgKGhhc1RlbGVwaG9ueVBlcm1pc3Npb24gfHwgcmVxVGVsZXBob255U3ViRmVhdHVyZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBpZiBhcHAgdGFrZXMgb25lIG9mIHRoZSB0ZWxlcGhvbnkgcGVybWlzc2lvbnMgb3IgcmVxdWVzdHMgYSBzdWItZmVhdHVyZSBidXQKLSAgICAgICAgICAgICAgICAvLyBkb2VzIG5vdCByZXF1ZXN0IHRoZSBiYXNlIHRlbGVwaG9ueSBmZWF0dXJlLCB3ZSBpbmZlciB0aGF0IGl0IG1lYW50IHRvCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUudGVsZXBob255J1xuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS50ZWxlcGhvbnknLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgIidyZXF1ZXN0ZWQgYSB0ZWxlcGhvbnktcmVsYXRlZCBwZXJtaXNzaW9uIG9yIGZlYXR1cmUnXG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVG91Y2hzY3JlZW4tcmVsYXRlZCBiYWNrLWNvbXBhdGliaWxpdHkgbG9naWMKLSAgICAgICAgICAgIGlmICghc3BlY1RvdWNoc2NyZWVuRmVhdHVyZSkgeyAvLyBub3QgYSB0eXBvIQotICAgICAgICAgICAgICAgIC8vIGFsbCBhcHBzIGFyZSBwcmVzdW1lZCB0byByZXF1aXJlIGEgdG91Y2hzY3JlZW4sIHVubGVzcyB0aGV5IGV4cGxpY2l0bHkgc2F5Ci0gICAgICAgICAgICAgICAgLy8gPHVzZXMtZmVhdHVyZSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaGFyZHdhcmUudG91Y2hzY3JlZW4iIGFuZHJvaWQ6cmVxdWlyZWQ9ImZhbHNlIi8+Ci0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHNwZWNUb3VjaHNjcmVlbkZlYXR1cmUgaXMgdHJ1ZSBpZiB0aGUgdGFnIGlzIHByZXNlbnQsIHJlZ2FyZGxlc3MKLSAgICAgICAgICAgICAgICAvLyBvZiB3aGV0aGVyIGl0cyB2YWx1ZSBpcyB0cnVlIG9yIGZhbHNlLCBzbyB0aGlzIGlzIHNhZmUKLSAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtZmVhdHVyZTonYW5kcm9pZC5oYXJkd2FyZS50b3VjaHNjcmVlbidcbiIpOwotICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1pbXBsaWVkLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUudG91Y2hzY3JlZW4nLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgIidhc3N1bWVkIHlvdSByZXF1aXJlIGEgdG91Y2ggc2NyZWVuIHVubGVzcyBleHBsaWNpdGx5IG1hZGUgb3B0aW9uYWwnXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghc3BlY011bHRpdG91Y2hGZWF0dXJlICYmIHJlcURpc3RpbmN0TXVsdGl0b3VjaEZlYXR1cmUpIHsKLSAgICAgICAgICAgICAgICAvLyBpZiBhcHAgdGFrZXMgb25lIG9mIHRoZSB0ZWxlcGhvbnkgcGVybWlzc2lvbnMgb3IgcmVxdWVzdHMgYSBzdWItZmVhdHVyZSBidXQKLSAgICAgICAgICAgICAgICAvLyBkb2VzIG5vdCByZXF1ZXN0IHRoZSBiYXNlIHRlbGVwaG9ueSBmZWF0dXJlLCB3ZSBpbmZlciB0aGF0IGl0IG1lYW50IHRvCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUudG91Y2hzY3JlZW4ubXVsdGl0b3VjaCdcbiIpOwotICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1pbXBsaWVkLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUudG91Y2hzY3JlZW4ubXVsdGl0b3VjaCcsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiJ3JlcXVlc3RlZCBhbmRyb2lkLmhhcmR3YXJlLnRvdWNoc2NyZWVuLm11bHRpdG91Y2guZGlzdGluY3QgZmVhdHVyZSdcbiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBMYW5kc2NhcGUvcG9ydHJhaXQtcmVsYXRlZCBjb21wYXRpYmlsaXR5IGxvZ2ljCi0gICAgICAgICAgICBpZiAoIXNwZWNTY3JlZW5MYW5kc2NhcGVGZWF0dXJlICYmICFzcGVjU2NyZWVuUG9ydHJhaXRGZWF0dXJlKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGFwcCBoYXMgc3BlY2lmaWVkIGFueSBhY3Rpdml0aWVzIGluIGl0cyBtYW5pZmVzdAotICAgICAgICAgICAgICAgIC8vIHRoYXQgcmVxdWVzdCBhIHNwZWNpZmljIG9yaWVudGF0aW9uLCB0aGVuIGFzc3VtZSB0aGF0Ci0gICAgICAgICAgICAgICAgLy8gb3JpZW50YXRpb24gaXMgcmVxdWlyZWQuCi0gICAgICAgICAgICAgICAgaWYgKHJlcVNjcmVlbkxhbmRzY2FwZUZlYXR1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ1c2VzLWZlYXR1cmU6J2FuZHJvaWQuaGFyZHdhcmUuc2NyZWVuLmxhbmRzY2FwZSdcbiIpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtaW1wbGllZC1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLnNjcmVlbi5sYW5kc2NhcGUnLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICInb25lIG9yIG1vcmUgYWN0aXZpdGllcyBoYXZlIHNwZWNpZmllZCBhIGxhbmRzY2FwZSBvcmllbnRhdGlvbidcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocmVxU2NyZWVuUG9ydHJhaXRGZWF0dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigidXNlcy1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLnNjcmVlbi5wb3J0cmFpdCdcbiIpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoInVzZXMtaW1wbGllZC1mZWF0dXJlOidhbmRyb2lkLmhhcmR3YXJlLnNjcmVlbi5wb3J0cmFpdCcsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIidvbmUgb3IgbW9yZSBhY3Rpdml0aWVzIGhhdmUgc3BlY2lmaWVkIGEgcG9ydHJhaXQgb3JpZW50YXRpb24nXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChoYXNNYWluQWN0aXZpdHkpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIm1haW5cbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc1dpZGdldFJlY2VpdmVycykgewotICAgICAgICAgICAgICAgIHByaW50ZigiYXBwLXdpZGdldFxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzRGV2aWNlQWRtaW5SZWNlaXZlcikgewotICAgICAgICAgICAgICAgIHByaW50ZigiZGV2aWNlLWFkbWluXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChoYXNJbWVTZXJ2aWNlKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJpbWVcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc1dhbGxwYXBlclNlcnZpY2UpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIndhbGxwYXBlclxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzQWNjZXNzaWJpbGl0eVNlcnZpY2UpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoImFjY2Vzc2liaWxpdHlcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc1ByaW50U2VydmljZSkgewotICAgICAgICAgICAgICAgIHByaW50ZigicHJpbnRcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc1BheW1lbnRTZXJ2aWNlKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJwYXltZW50XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChoYXNPdGhlckFjdGl2aXRpZXMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIm90aGVyLWFjdGl2aXRpZXNcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzU2VhcmNoYWJsZSkgewotICAgICAgICAgICAgICAgIHByaW50Zigic2VhcmNoXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChoYXNPdGhlclJlY2VpdmVycykgewotICAgICAgICAgICAgICAgIHByaW50Zigib3RoZXItcmVjZWl2ZXJzXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChoYXNPdGhlclNlcnZpY2VzKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJvdGhlci1zZXJ2aWNlc1xuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEZvciBtb2Rlcm4gYXBwcywgaWYgc2NyZWVuIHNpemUgYnVja2V0cyBoYXZlbid0IGJlZW4gc3BlY2lmaWVkCi0gICAgICAgICAgICAvLyBidXQgdGhlIG5ldyB3aWR0aCByYW5nZXMgaGF2ZSwgdGhlbiBpbmZlciB0aGUgYnVja2V0cyBmcm9tIHRoZW0uCi0gICAgICAgICAgICBpZiAoc21hbGxTY3JlZW4gPiAwICYmIG5vcm1hbFNjcmVlbiA+IDAgJiYgbGFyZ2VTY3JlZW4gPiAwICYmIHhsYXJnZVNjcmVlbiA+IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgcmVxdWlyZXNTbWFsbGVzdFdpZHRoRHAgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaW50IGNvbXBhdFdpZHRoID0gY29tcGF0aWJsZVdpZHRoTGltaXREcDsKLSAgICAgICAgICAgICAgICBpZiAoY29tcGF0V2lkdGggPD0gMCkgY29tcGF0V2lkdGggPSByZXF1aXJlc1NtYWxsZXN0V2lkdGhEcDsKLSAgICAgICAgICAgICAgICBpZiAocmVxdWlyZXNTbWFsbGVzdFdpZHRoRHAgPD0gMjQwICYmIGNvbXBhdFdpZHRoID49IDI0MCkgewotICAgICAgICAgICAgICAgICAgICBzbWFsbFNjcmVlbiA9IC0xOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNtYWxsU2NyZWVuID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVzU21hbGxlc3RXaWR0aERwIDw9IDMyMCAmJiBjb21wYXRXaWR0aCA+PSAzMjApIHsKLSAgICAgICAgICAgICAgICAgICAgbm9ybWFsU2NyZWVuID0gLTE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbm9ybWFsU2NyZWVuID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVzU21hbGxlc3RXaWR0aERwIDw9IDQ4MCAmJiBjb21wYXRXaWR0aCA+PSA0ODApIHsKLSAgICAgICAgICAgICAgICAgICAgbGFyZ2VTY3JlZW4gPSAtMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsYXJnZVNjcmVlbiA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlc1NtYWxsZXN0V2lkdGhEcCA8PSA3MjAgJiYgY29tcGF0V2lkdGggPj0gNzIwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHhsYXJnZVNjcmVlbiA9IC0xOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHhsYXJnZVNjcmVlbiA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBEZXRlcm1pbmUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFueSB1bnNwZWNpZmllZCBzY3JlZW4gc2l6ZXMsCi0gICAgICAgICAgICAvLyBiYXNlZCBvbiB0aGUgdGFyZ2V0IFNESyBvZiB0aGUgcGFja2FnZS4gIEFzIG9mIDQgKGRvbnV0KQotICAgICAgICAgICAgLy8gdGhlIHNjcmVlbiBzaXplIHN1cHBvcnQgd2FzIGludHJvZHVjZWQsIHNvIGFsbCBkZWZhdWx0IHRvCi0gICAgICAgICAgICAvLyBlbmFibGVkLgotICAgICAgICAgICAgaWYgKHNtYWxsU2NyZWVuID4gMCkgewotICAgICAgICAgICAgICAgIHNtYWxsU2NyZWVuID0gdGFyZ2V0U2RrID49IDQgPyAtMSA6IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobm9ybWFsU2NyZWVuID4gMCkgewotICAgICAgICAgICAgICAgIG5vcm1hbFNjcmVlbiA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxhcmdlU2NyZWVuID4gMCkgewotICAgICAgICAgICAgICAgIGxhcmdlU2NyZWVuID0gdGFyZ2V0U2RrID49IDQgPyAtMSA6IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeGxhcmdlU2NyZWVuID4gMCkgewotICAgICAgICAgICAgICAgIC8vIEludHJvZHVjZWQgaW4gR2luZ2VyYnJlYWQuCi0gICAgICAgICAgICAgICAgeGxhcmdlU2NyZWVuID0gdGFyZ2V0U2RrID49IDkgPyAtMSA6IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYW55RGVuc2l0eSA+IDApIHsKLSAgICAgICAgICAgICAgICBhbnlEZW5zaXR5ID0gKHRhcmdldFNkayA+PSA0IHx8IHJlcXVpcmVzU21hbGxlc3RXaWR0aERwID4gMAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29tcGF0aWJsZVdpZHRoTGltaXREcCA+IDApID8gLTEgOiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCJzdXBwb3J0cy1zY3JlZW5zOiIpOwotICAgICAgICAgICAgaWYgKHNtYWxsU2NyZWVuICE9IDApIHByaW50ZigiICdzbWFsbCciKTsKLSAgICAgICAgICAgIGlmIChub3JtYWxTY3JlZW4gIT0gMCkgcHJpbnRmKCIgJ25vcm1hbCciKTsKLSAgICAgICAgICAgIGlmIChsYXJnZVNjcmVlbiAhPSAwKSBwcmludGYoIiAnbGFyZ2UnIik7Ci0gICAgICAgICAgICBpZiAoeGxhcmdlU2NyZWVuICE9IDApIHByaW50ZigiICd4bGFyZ2UnIik7Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICBwcmludGYoInN1cHBvcnRzLWFueS1kZW5zaXR5OiAnJXMnXG4iLCBhbnlEZW5zaXR5ID8gInRydWUiIDogImZhbHNlIik7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNTbWFsbGVzdFdpZHRoRHAgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJyZXF1aXJlcy1zbWFsbGVzdC13aWR0aDonJWQnXG4iLCByZXF1aXJlc1NtYWxsZXN0V2lkdGhEcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY29tcGF0aWJsZVdpZHRoTGltaXREcCA+IDApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoImNvbXBhdGlibGUtd2lkdGgtbGltaXQ6JyVkJ1xuIiwgY29tcGF0aWJsZVdpZHRoTGltaXREcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGFyZ2VzdFdpZHRoTGltaXREcCA+IDApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoImxhcmdlc3Qtd2lkdGgtbGltaXQ6JyVkJ1xuIiwgbGFyZ2VzdFdpZHRoTGltaXREcCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaW50ZigibG9jYWxlczoiKTsKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOTCA9IGxvY2FsZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE5MOyBpKyspIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBsb2NhbGVTdHIgPSAgbG9jYWxlc1tpXS5zdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBpZiAobG9jYWxlU3RyID09IE5VTEwgfHwgc3RybGVuKGxvY2FsZVN0cikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBsb2NhbGVTdHIgPSAiLS1fLS0iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGYoIiAnJXMnIiwgbG9jYWxlU3RyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLQotICAgICAgICAgICAgcHJpbnRmKCJkZW5zaXRpZXM6Iik7Ci0gICAgICAgICAgICBjb25zdCBzaXplX3QgTkQgPSBkZW5zaXRpZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE5EOyBpKyspIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiAnJWQnIiwgZGVuc2l0aWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLQotICAgICAgICAgICAgQXNzZXREaXIqIGRpciA9IGFzc2V0cy5vcGVuTm9uQXNzZXREaXIoYXNzZXRzQ29va2llLCAibGliIik7Ci0gICAgICAgICAgICBpZiAoZGlyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGlyLT5nZXRGaWxlQ291bnQoKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJuYXRpdmUtY29kZToiKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPGRpci0+Z2V0RmlsZUNvdW50KCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJyVzJyIsIGRpci0+Z2V0RmlsZU5hbWUoaSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGRpcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoImJhZGdlciIsIG9wdGlvbikgPT0gMCkgewotICAgICAgICAgICAgcHJpbnRmKCIlcyIsIENPTlNPTEVfREFUQSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKCJjb25maWd1cmF0aW9ucyIsIG9wdGlvbikgPT0gMCkgewotICAgICAgICAgICAgVmVjdG9yPFJlc1RhYmxlX2NvbmZpZz4gY29uZmlnczsKLSAgICAgICAgICAgIHJlcy5nZXRDb25maWd1cmF0aW9ucygmY29uZmlncyk7Ci0gICAgICAgICAgICBjb25zdCBzaXplX3QgTiA9IGNvbmZpZ3Muc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIGNvbmZpZ3NbaV0udG9TdHJpbmcoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiB1bmtub3duIGR1bXAgb3B0aW9uICclcydcbiIsIG9wdGlvbik7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXN1bHQgPSBOT19FUlJPUjsKLQotYmFpbDoKLSAgICBpZiAoYXNzZXQpIHsKLSAgICAgICAgZGVsZXRlIGFzc2V0OwotICAgIH0KLSAgICByZXR1cm4gKHJlc3VsdCAhPSBOT19FUlJPUik7Ci19Ci0KLQotLyoKLSAqIEhhbmRsZSB0aGUgImFkZCIgY29tbWFuZCwgd2hpY2ggd2FudHMgdG8gYWRkIGZpbGVzIHRvIGEgbmV3IG9yCi0gKiBwcmUtZXhpc3RpbmcgYXJjaGl2ZS4KLSAqLwotaW50IGRvQWRkKEJ1bmRsZSogYnVuZGxlKQotewotICAgIFppcEZpbGUqIHppcCA9IE5VTEw7Ci0gICAgc3RhdHVzX3QgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICBjb25zdCBjaGFyKiB6aXBGaWxlTmFtZTsKLQotICAgIGlmIChidW5kbGUtPmdldFVwZGF0ZSgpKSB7Ci0gICAgICAgIC8qIGF2b2lkIGNvbmZ1c2lvbiAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBjYW4ndCB1c2UgJy11JyB3aXRoIGFkZFxuIik7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRGaWxlU3BlY0NvdW50KCkgPCAxKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG11c3Qgc3BlY2lmeSB6aXAgZmlsZSBuYW1lXG4iKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLSAgICB6aXBGaWxlTmFtZSA9IGJ1bmRsZS0+Z2V0RmlsZVNwZWNFbnRyeSgwKTsKLQotICAgIGlmIChidW5kbGUtPmdldEZpbGVTcGVjQ291bnQoKSA8IDIpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJOT1RFOiBub3RoaW5nIHRvIGRvXG4iKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIHppcCA9IG9wZW5SZWFkV3JpdGUoemlwRmlsZU5hbWUsIHRydWUpOwotICAgIGlmICh6aXAgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBmYWlsZWQgb3BlbmluZy9jcmVhdGluZyAnJXMnIGFzIFppcCBmaWxlXG4iLCB6aXBGaWxlTmFtZSk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMTsgaSA8IGJ1bmRsZS0+Z2V0RmlsZVNwZWNDb3VudCgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgY2hhciogZmlsZU5hbWUgPSBidW5kbGUtPmdldEZpbGVTcGVjRW50cnkoaSk7Ci0KLSAgICAgICAgaWYgKHN0cmNhc2VjbXAoU3RyaW5nOChmaWxlTmFtZSkuZ2V0UGF0aEV4dGVuc2lvbigpLnN0cmluZygpLCAiLmd6IikgPT0gMCkgewotICAgICAgICAgICAgcHJpbnRmKCIgJyVzJy4uLiAoZnJvbSBnemlwKVxuIiwgZmlsZU5hbWUpOwotICAgICAgICAgICAgcmVzdWx0ID0gemlwLT5hZGRHemlwKGZpbGVOYW1lLCBTdHJpbmc4KGZpbGVOYW1lKS5nZXRCYXNlUGF0aCgpLnN0cmluZygpLCBOVUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChidW5kbGUtPmdldEp1bmtQYXRoKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmc4IHN0b3JhZ2VOYW1lID0gU3RyaW5nOChmaWxlTmFtZSkuZ2V0UGF0aExlYWYoKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiAnJXMnIGFzICclcycuLi5cbiIsIGZpbGVOYW1lLCBzdG9yYWdlTmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gemlwLT5hZGQoZmlsZU5hbWUsIHN0b3JhZ2VOYW1lLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZS0+Z2V0Q29tcHJlc3Npb25NZXRob2QoKSwgTlVMTCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiICclcycuLi5cbiIsIGZpbGVOYW1lKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB6aXAtPmFkZChmaWxlTmFtZSwgYnVuZGxlLT5nZXRDb21wcmVzc2lvbk1ldGhvZCgpLCBOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBhZGQgJyVzJyB0byAnJXMnIiwgYnVuZGxlLT5nZXRGaWxlU3BlY0VudHJ5KGkpLCB6aXBGaWxlTmFtZSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IE5BTUVfTk9UX0ZPVU5EKQotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiOiBmaWxlIG5vdCBmb3VuZFxuIik7Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gQUxSRUFEWV9FWElTVFMpCi0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI6IGFscmVhZHkgZXhpc3RzIGluIGFyY2hpdmVcbiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdCA9IE5PX0VSUk9SOwotCi1iYWlsOgotICAgIGRlbGV0ZSB6aXA7Ci0gICAgcmV0dXJuIChyZXN1bHQgIT0gTk9fRVJST1IpOwotfQotCi0KLS8qCi0gKiBEZWxldGUgZmlsZXMgZnJvbSBhbiBleGlzdGluZyBhcmNoaXZlLgotICovCi1pbnQgZG9SZW1vdmUoQnVuZGxlKiBidW5kbGUpCi17Ci0gICAgWmlwRmlsZSogemlwID0gTlVMTDsKLSAgICBzdGF0dXNfdCByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgIGNvbnN0IGNoYXIqIHppcEZpbGVOYW1lOwotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0RmlsZVNwZWNDb3VudCgpIDwgMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBtdXN0IHNwZWNpZnkgemlwIGZpbGUgbmFtZVxuIik7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0gICAgemlwRmlsZU5hbWUgPSBidW5kbGUtPmdldEZpbGVTcGVjRW50cnkoMCk7Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRGaWxlU3BlY0NvdW50KCkgPCAyKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiTk9URTogbm90aGluZyB0byBkb1xuIik7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICB6aXAgPSBvcGVuUmVhZFdyaXRlKHppcEZpbGVOYW1lLCBmYWxzZSk7Ci0gICAgaWYgKHppcCA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGZhaWxlZCBvcGVuaW5nIFppcCBhcmNoaXZlICclcydcbiIsCi0gICAgICAgICAgICB6aXBGaWxlTmFtZSk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMTsgaSA8IGJ1bmRsZS0+Z2V0RmlsZVNwZWNDb3VudCgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgY2hhciogZmlsZU5hbWUgPSBidW5kbGUtPmdldEZpbGVTcGVjRW50cnkoaSk7Ci0gICAgICAgIFppcEVudHJ5KiBlbnRyeTsKLQotICAgICAgICBlbnRyeSA9IHppcC0+Z2V0RW50cnlCeU5hbWUoZmlsZU5hbWUpOwotICAgICAgICBpZiAoZW50cnkgPT0gTlVMTCkgewotICAgICAgICAgICAgcHJpbnRmKCIgJyVzJyBOT1QgRk9VTkRcbiIsIGZpbGVOYW1lKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gemlwLT5yZW1vdmUoZW50cnkpOwotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGRlbGV0ZSAnJXMnIGZyb20gJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICBidW5kbGUtPmdldEZpbGVTcGVjRW50cnkoaSksIHppcEZpbGVOYW1lKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIHVwZGF0ZSB0aGUgYXJjaGl2ZSAqLwotICAgIHppcC0+Zmx1c2goKTsKLQotYmFpbDoKLSAgICBkZWxldGUgemlwOwotICAgIHJldHVybiAocmVzdWx0ICE9IE5PX0VSUk9SKTsKLX0KLQotCi0vKgotICogUGFja2FnZSB1cCBhbiBhc3NldCBkaXJlY3RvcnkgYW5kIGFzc29jaWF0ZWQgYXBwbGljYXRpb24gZmlsZXMuCi0gKi8KLWludCBkb1BhY2thZ2UoQnVuZGxlKiBidW5kbGUpCi17Ci0gICAgY29uc3QgY2hhciogb3V0cHV0QVBLRmlsZTsKLSAgICBpbnQgcmV0VmFsID0gMTsKLSAgICBzdGF0dXNfdCBlcnI7Ci0gICAgc3A8QWFwdEFzc2V0cz4gYXNzZXRzOwotICAgIGludCBOOwotICAgIEZJTEUqIGZwOwotICAgIFN0cmluZzggZGVwZW5kZW5jeUZpbGU7Ci0KLSAgICAvLyAtYyB6el9aWiBtZWFucyBkbyBwc2V1ZG9sb2NhbGl6YXRpb24KLSAgICBSZXNvdXJjZUZpbHRlciBmaWx0ZXI7Ci0gICAgZXJyID0gZmlsdGVyLnBhcnNlKGJ1bmRsZS0+Z2V0Q29uZmlndXJhdGlvbnMoKSk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotICAgIGlmIChmaWx0ZXIuY29udGFpbnNQc2V1ZG8oKSkgewotICAgICAgICBidW5kbGUtPnNldFBzZXVkb2xvY2FsaXplKHRydWUpOwotICAgIH0KLQotICAgIE4gPSBidW5kbGUtPmdldEZpbGVTcGVjQ291bnQoKTsKLSAgICBpZiAoTiA8IDEgJiYgYnVuZGxlLT5nZXRSZXNvdXJjZVNvdXJjZURpcnMoKS5zaXplKCkgPT0gMCAmJiBidW5kbGUtPmdldEphckZpbGVzKCkuc2l6ZSgpID09IDAKLSAgICAgICAgICAgICYmIGJ1bmRsZS0+Z2V0QW5kcm9pZE1hbmlmZXN0RmlsZSgpID09IE5VTEwgJiYgYnVuZGxlLT5nZXRBc3NldFNvdXJjZURpcigpID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogbm8gaW5wdXQgZmlsZXNcbiIpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgb3V0cHV0QVBLRmlsZSA9IGJ1bmRsZS0+Z2V0T3V0cHV0QVBLRmlsZSgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBmaWxlbmFtZXMgcHJvdmlkZWQgZXhpc3QgYW5kIGFyZSBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KLSAgICBpZiAob3V0cHV0QVBLRmlsZSkgewotICAgICAgICBGaWxlVHlwZSB0eXBlOwotICAgICAgICB0eXBlID0gZ2V0RmlsZVR5cGUob3V0cHV0QVBLRmlsZSk7Ci0gICAgICAgIGlmICh0eXBlICE9IGtGaWxlVHlwZU5vbmV4aXN0ZW50ICYmIHR5cGUgIT0ga0ZpbGVUeXBlUmVndWxhcikgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgIkVSUk9SOiBvdXRwdXQgZmlsZSAnJXMnIGV4aXN0cyBidXQgaXMgbm90IHJlZ3VsYXIgZmlsZVxuIiwKLSAgICAgICAgICAgICAgICBvdXRwdXRBUEtGaWxlKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIExvYWQgdGhlIGFzc2V0cy4KLSAgICBhc3NldHMgPSBuZXcgQWFwdEFzc2V0cygpOwotCi0gICAgLy8gU2V0IHVwIHRoZSByZXNvdXJjZSBnYXRoZXJpbmcgaW4gYXNzZXRzIGlmIHdlJ3JlIGdvaW5nIHRvIGdlbmVyYXRlCi0gICAgLy8gZGVwZW5kZW5jeSBmaWxlcy4gRXZlcnkgdGltZSB3ZSBlbmNvdW50ZXIgYSByZXNvdXJjZSB3aGlsZSBzbHVycGluZwotICAgIC8vIHRoZSB0cmVlLCB3ZSdsbCBhZGQgaXQgdG8gdGhlc2Ugc3RvcmVzIHNvIHdlIGhhdmUgZnVsbCByZXNvdXJjZSBwYXRocwotICAgIC8vIHRvIHdyaXRlIHRvIGEgZGVwZW5kZW5jeSBmaWxlLgotICAgIGlmIChidW5kbGUtPmdldEdlbkRlcGVuZGVuY2llcygpKSB7Ci0gICAgICAgIHNwPEZpbGVQYXRoU3RvcmU+IHJlc1BhdGhTdG9yZSA9IG5ldyBGaWxlUGF0aFN0b3JlOwotICAgICAgICBhc3NldHMtPnNldEZ1bGxSZXNQYXRocyhyZXNQYXRoU3RvcmUpOwotICAgICAgICBzcDxGaWxlUGF0aFN0b3JlPiBhc3NldFBhdGhTdG9yZSA9IG5ldyBGaWxlUGF0aFN0b3JlOwotICAgICAgICBhc3NldHMtPnNldEZ1bGxBc3NldFBhdGhzKGFzc2V0UGF0aFN0b3JlKTsKLSAgICB9Ci0KLSAgICBlcnIgPSBhc3NldHMtPnNsdXJwRnJvbUFyZ3MoYnVuZGxlKTsKLSAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgIGFzc2V0cy0+cHJpbnQoU3RyaW5nOCgpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGV5IGFza2VkIGZvciBhbnkgZmlsZUFzIHRoYXQgbmVlZCB0byBiZSBjb21waWxlZCwgZG8gc28uCi0gICAgaWYgKGJ1bmRsZS0+Z2V0UmVzb3VyY2VTb3VyY2VEaXJzKCkuc2l6ZSgpIHx8IGJ1bmRsZS0+Z2V0QW5kcm9pZE1hbmlmZXN0RmlsZSgpKSB7Ci0gICAgICAgIGVyciA9IGJ1aWxkUmVzb3VyY2VzKGJ1bmRsZSwgYXNzZXRzKTsKLSAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IHdlJ3ZlIHJlYWQgZXZlcnl0aGluZyBhbmQgcHJvY2Vzc2VkIGV2ZXJ5dGhpbmcuICBGcm9tIGhlcmUKLSAgICAvLyBvbiBvdXQgaXQncyBqdXN0IHdyaXRpbmcgb3V0cHV0IGZpbGVzLgotICAgIGlmIChTb3VyY2VQb3M6Omhhc0Vycm9ycygpKSB7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgc3ltYm9scyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIG9uZXMgYXJlIG5lZWRlZCBhcyBKYXZhIHN5bWJvbHMuCi0gICAgYXNzZXRzLT5hcHBseUphdmFTeW1ib2xzKCk7Ci0gICAgaWYgKFNvdXJjZVBvczo6aGFzRXJyb3JzKCkpIHsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8vIElmIHdlJ3ZlIGJlZW4gYXNrZWQgdG8gZ2VuZXJhdGUgYSBkZXBlbmRlbmN5IGZpbGUsIGRvIHRoYXQgaGVyZQotICAgIGlmIChidW5kbGUtPmdldEdlbkRlcGVuZGVuY2llcygpKSB7Ci0gICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIHBhY2thZ2luZyBzdGVwLCBnZW5lcmF0ZSB0aGUgZGVwZW5kZW5jeSBmaWxlIG5leHQgdG8KLSAgICAgICAgLy8gdGhlIG91dHB1dCBhcGsgKGUuZy4gYmluL3Jlc291cmNlcy5hcF8uZCkKLSAgICAgICAgaWYgKG91dHB1dEFQS0ZpbGUpIHsKLSAgICAgICAgICAgIGRlcGVuZGVuY3lGaWxlID0gU3RyaW5nOChvdXRwdXRBUEtGaWxlKTsKLSAgICAgICAgICAgIC8vIEFkZCB0aGUgLmQgZXh0ZW5zaW9uIHRvIHRoZSBkZXBlbmRlbmN5IGZpbGUuCi0gICAgICAgICAgICBkZXBlbmRlbmN5RmlsZS5hcHBlbmQoIi5kIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBFbHNlIGlmIHRoaXMgaXMgdGhlIFIuamF2YSBkZXBlbmRlbmN5IGdlbmVyYXRpb24gc3RlcCwKLSAgICAgICAgICAgIC8vIGdlbmVyYXRlIHRoZSBkZXBlbmRlbmN5IGZpbGUgaW4gdGhlIFIuamF2YSBwYWNrYWdlIHN1YmRpcmVjdG9yeQotICAgICAgICAgICAgLy8gZS5nLiBnZW4vY29tL2Zvby9hcHAvUi5qYXZhLmQKLSAgICAgICAgICAgIGRlcGVuZGVuY3lGaWxlID0gU3RyaW5nOChidW5kbGUtPmdldFJDbGFzc0RpcigpKTsKLSAgICAgICAgICAgIGRlcGVuZGVuY3lGaWxlLmFwcGVuZFBhdGgoIlIuamF2YS5kIik7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBjbGVhbiBkZXBlbmRlbmN5IGZpbGUgdG8gc3RhcnQgd2l0aAotICAgICAgICBmcCA9IGZvcGVuKGRlcGVuZGVuY3lGaWxlLCAidyIpOwotICAgICAgICBmY2xvc2UoZnApOwotICAgIH0KLQotICAgIC8vIFdyaXRlIG91dCBSLmphdmEgY29uc3RhbnRzCi0gICAgaWYgKCFhc3NldHMtPmhhdmVQcml2YXRlU3ltYm9scygpKSB7Ci0gICAgICAgIGlmIChidW5kbGUtPmdldEN1c3RvbVBhY2thZ2UoKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAvLyBXcml0ZSB0aGUgUi5qYXZhIGZpbGUgaW50byB0aGUgYXBwcm9wcmlhdGUgY2xhc3MgZGlyZWN0b3J5Ci0gICAgICAgICAgICAvLyBlLmcuIGdlbi9jb20vZm9vL2FwcC9SLmphdmEKLSAgICAgICAgICAgIGVyciA9IHdyaXRlUmVzb3VyY2VTeW1ib2xzKGJ1bmRsZSwgYXNzZXRzLCBhc3NldHMtPmdldFBhY2thZ2UoKSwgdHJ1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmc4IGN1c3RvbVBrZyhidW5kbGUtPmdldEN1c3RvbVBhY2thZ2UoKSk7Ci0gICAgICAgICAgICBlcnIgPSB3cml0ZVJlc291cmNlU3ltYm9scyhidW5kbGUsIGFzc2V0cywgY3VzdG9tUGtnLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHdlIGhhdmUgbGlicmFyeSBmaWxlcywgd2UncmUgZ29pbmcgdG8gd3JpdGUgb3VyIFIuamF2YSBmaWxlIGludG8KLSAgICAgICAgLy8gdGhlIGFwcHJvcHJpYXRlIGNsYXNzIGRpcmVjdG9yeSBmb3IgdGhvc2UgbGlicmFyaWVzIGFzIHdlbGwuCi0gICAgICAgIC8vIGUuZy4gZ2VuL2NvbS9mb28vYXBwL2xpYi9SLmphdmEKLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0RXh0cmFQYWNrYWdlcygpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IG9uIGNvbG9uCi0gICAgICAgICAgICBTdHJpbmc4IGxpYnMoYnVuZGxlLT5nZXRFeHRyYVBhY2thZ2VzKCkpOwotICAgICAgICAgICAgY2hhciogcGFja2FnZVN0cmluZyA9IHN0cnRvayhsaWJzLmxvY2tCdWZmZXIobGlicy5sZW5ndGgoKSksICI6Iik7Ci0gICAgICAgICAgICB3aGlsZSAocGFja2FnZVN0cmluZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgLy8gV3JpdGUgdGhlIFIuamF2YSBmaWxlIG91dCB3aXRoIHRoZSBjb3JyZWN0IHBhY2thZ2UgbmFtZQotICAgICAgICAgICAgICAgIGVyciA9IHdyaXRlUmVzb3VyY2VTeW1ib2xzKGJ1bmRsZSwgYXNzZXRzLCBTdHJpbmc4KHBhY2thZ2VTdHJpbmcpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBhY2thZ2VTdHJpbmcgPSBzdHJ0b2soTlVMTCwgIjoiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpYnMudW5sb2NrQnVmZmVyKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBlcnIgPSB3cml0ZVJlc291cmNlU3ltYm9scyhidW5kbGUsIGFzc2V0cywgYXNzZXRzLT5nZXRQYWNrYWdlKCksIGZhbHNlKTsKLSAgICAgICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBlcnIgPSB3cml0ZVJlc291cmNlU3ltYm9scyhidW5kbGUsIGFzc2V0cywgYXNzZXRzLT5nZXRTeW1ib2xzUHJpdmF0ZVBhY2thZ2UoKSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBXcml0ZSBvdXQgdGhlIFByb0d1YXJkIGZpbGUKLSAgICBlcnIgPSB3cml0ZVByb2d1YXJkRmlsZShidW5kbGUsIGFzc2V0cyk7Ci0gICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8vIFdyaXRlIHRoZSBhcGsKLSAgICBpZiAob3V0cHV0QVBLRmlsZSkgewotICAgICAgICBlcnIgPSB3cml0ZUFQSyhidW5kbGUsIGFzc2V0cywgU3RyaW5nOChvdXRwdXRBUEtGaWxlKSk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHBhY2thZ2luZyBvZiAnJXMnIGZhaWxlZFxuIiwgb3V0cHV0QVBLRmlsZSk7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSd2ZSBiZWVuIGFza2VkIHRvIGdlbmVyYXRlIGEgZGVwZW5kZW5jeSBmaWxlLCB3ZSBuZWVkIHRvIGZpbmlzaCB1cCBoZXJlLgotICAgIC8vIHRoZSB3cml0ZVJlc291cmNlU3ltYm9scyBhbmQgd3JpdGVBUEsgZnVuY3Rpb25zIGhhdmUgYWxyZWFkeSB3cml0dGVuIHRoZSB0YXJnZXQKLSAgICAvLyBoYWxmIG9mIHRoZSBkZXBlbmRlbmN5IGZpbGUsIG5vdyB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBwcmVyZXF1aXNpdGVzLiAoZmlsZXMgdGhhdAotICAgIC8vIHRoZSBSLmphdmEgZmlsZSBvciAuYXBfIGZpbGUgZGVwZW5kIG9uKQotICAgIGlmIChidW5kbGUtPmdldEdlbkRlcGVuZGVuY2llcygpKSB7Ci0gICAgICAgIC8vIE5vdyB0aGF0IHdyaXRlUmVzb3VyY2VTeW1ib2xzIG9yIHdyaXRlQVBLIGhhcyB0YWtlbiBjYXJlIG9mIHdyaXRpbmcKLSAgICAgICAgLy8gdGhlIHRhcmdldHMgdG8gb3VyIGRlcGVuZGVuY3kgZmlsZSwgd2UnbGwgd3JpdGUgdGhlIHByZXJlcXMKLSAgICAgICAgZnAgPSBmb3BlbihkZXBlbmRlbmN5RmlsZSwgImErIik7Ci0gICAgICAgIGZwcmludGYoZnAsICIgOiAiKTsKLSAgICAgICAgYm9vbCBpbmNsdWRlUmF3ID0gKG91dHB1dEFQS0ZpbGUgIT0gTlVMTCk7Ci0gICAgICAgIGVyciA9IHdyaXRlRGVwZW5kZW5jeVByZVJlcXMoYnVuZGxlLCBhc3NldHMsIGZwLCBpbmNsdWRlUmF3KTsKLSAgICAgICAgLy8gQWxzbyBtYW51YWxseSBhZGQgdGhlIEFuZHJvaWRNYW5pZmVzZXQgc2luY2UgaXQncyBub3QgdW5kZXIgcmVzLyBvciBhc3NldHMvCi0gICAgICAgIC8vIGFuZCB0aGVyZWZvcmUgd2FzIG5vdCBhZGRlZCB0byBvdXIgcGF0aHN0b3JlcyBkdXJpbmcgc2x1cnBpbmcKLSAgICAgICAgZnByaW50ZihmcCwgIiVzIFxcXG4iLCBidW5kbGUtPmdldEFuZHJvaWRNYW5pZmVzdEZpbGUoKSk7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgfQotCi0gICAgcmV0VmFsID0gMDsKLWJhaWw6Ci0gICAgaWYgKFNvdXJjZVBvczo6aGFzRXJyb3JzKCkpIHsKLSAgICAgICAgU291cmNlUG9zOjpwcmludEVycm9ycyhzdGRlcnIpOwotICAgIH0KLSAgICByZXR1cm4gcmV0VmFsOwotfQotCi0vKgotICogRG8gUE5HIENydW5jaGluZwotICogUFJFQ09ORElUSU9OUwotICogIC1TIGZsYWcgcG9pbnRzIHRvIGEgc291cmNlIGRpcmVjdG9yeSBjb250YWluaW5nIGRyYXdhYmxlKiBmb2xkZXJzCi0gKiAgLUMgZmxhZyBwb2ludHMgdG8gZGVzdGluYXRpb24gZGlyZWN0b3J5LiBUaGUgZm9sZGVyIHN0cnVjdHVyZSBpbiB0aGUKLSAqICAgICBzb3VyY2UgZGlyZWN0b3J5IHdpbGwgYmUgbWlycm9yZWQgdG8gdGhlIGRlc3RpbmF0aW9uIChjYWNoZSkgZGlyZWN0b3J5Ci0gKgotICogUE9TVENPTkRJVElPTlMKLSAqICBEZXN0aW5hdGlvbiBkaXJlY3Rvcnkgd2lsbCBiZSB1cGRhdGVkIHRvIG1hdGNoIHRoZSBQTkcgZmlsZXMgaW4KLSAqICB0aGUgc291cmNlIGRpcmVjdG9yeS4gCi0gKi8KLWludCBkb0NydW5jaChCdW5kbGUqIGJ1bmRsZSkKLXsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIkNydW5jaGluZyBQTkcgRmlsZXMgaW4gIik7Ci0gICAgZnByaW50ZihzdGRvdXQsICJzb3VyY2UgZGlyOiAlc1xuIiwgYnVuZGxlLT5nZXRSZXNvdXJjZVNvdXJjZURpcnMoKVswXSk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJUbyBkZXN0aW5hdGlvbiBkaXI6ICVzXG4iLCBidW5kbGUtPmdldENydW5jaGVkT3V0cHV0RGlyKCkpOwotCi0gICAgdXBkYXRlUHJlUHJvY2Vzc2VkQ2FjaGUoYnVuZGxlKTsKLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotLyoKLSAqIERvIFBORyBDcnVuY2hpbmcgb24gYSBzaW5nbGUgZmxhZwotICogIC1pIHBvaW50cyB0byBhIHNpbmdsZSBwbmcgZmlsZQotICogIC1vIHBvaW50cyB0byBhIHNpbmdsZSBwbmcgb3V0cHV0IGZpbGUKLSAqLwotaW50IGRvU2luZ2xlQ3J1bmNoKEJ1bmRsZSogYnVuZGxlKQotewotICAgIGZwcmludGYoc3Rkb3V0LCAiQ3J1bmNoaW5nIHNpbmdsZSBQTkcgZmlsZTogJXNcbiIsIGJ1bmRsZS0+Z2V0U2luZ2xlQ3J1bmNoSW5wdXRGaWxlKCkpOwotICAgIGZwcmludGYoc3Rkb3V0LCAiXHRPdXRwdXQgZmlsZTogJXNcbiIsIGJ1bmRsZS0+Z2V0U2luZ2xlQ3J1bmNoT3V0cHV0RmlsZSgpKTsKLQotICAgIFN0cmluZzggaW5wdXQoYnVuZGxlLT5nZXRTaW5nbGVDcnVuY2hJbnB1dEZpbGUoKSk7Ci0gICAgU3RyaW5nOCBvdXRwdXQoYnVuZGxlLT5nZXRTaW5nbGVDcnVuY2hPdXRwdXRGaWxlKCkpOwotCi0gICAgaWYgKHByZVByb2Nlc3NJbWFnZVRvQ2FjaGUoYnVuZGxlLCBpbnB1dCwgb3V0cHV0KSAhPSBOT19FUlJPUikgewotICAgICAgICAvLyB3ZSBjYW4ndCByZXR1cm4gdGhlIHN0YXR1c190IGFzIGl0IGdldHMgdHJ1bmNhdGUgdG8gdGhlIGxvd2VyIDggYml0cy4KLSAgICAgICAgcmV0dXJuIDQyOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotY2hhciBDT05TT0xFX0RBVEFbMjkyNV0gPSB7Ci0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgOTUsIDQ2LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNjEsIDYzLAotICAgIDg2LCAzNSwgNDAsIDQ2LCA0NiwgOTUsIDk1LCA5NSwgOTUsIDk3LCA5NywgNDQsIDMyLCA0NiwgMTI0LCA0MiwgMzMsIDgzLAotICAgIDYyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNTgsIDQ2LCA1OCwgNTksIDYxLCA1OSwgNjEsIDgxLAotICAgIDgxLCA4MSwgODEsIDY2LCA5NiwgNjEsIDYxLCA1OCwgNDYsIDQ2LCA0NiwgNTgsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDQ2LCA2MSwgNTksIDU5LCA1OSwgNTgsIDEwNiwgODEsIDgxLCA4MSwgODEsIDEwMiwgNTksIDYxLCA1OSwKLSAgICA1OSwgNjEsIDYxLCA2MSwgNTgsIDQ2LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNjEsIDU5LCA1OSwKLSAgICA1OSwgNTgsIDEwOSwgODEsIDgxLCA4MSwgODEsIDYxLCA1OSwgNTksIDU5LCA1OSwgNTksIDU4LCA1OSwgNTksIDQ2LCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDQ2LCA2MSwgNTksIDU5LCA1OSwgNjAsIDgxLCA4MSwgODEsIDgxLCA4NywKLSAgICA1OCwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNjEsIDExOSwgNDQsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNDYsCi0gICAgNDcsIDYxLCA1OSwgNTksIDU4LCAxMDAsIDgxLCA4MSwgODEsIDgxLCAzNSwgNTgsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTgsCi0gICAgMTIxLCA4MSwgOTEsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNDYsIDEwOSwgNTgsIDU5LCA1OSwgNjEsIDgxLCA4MSwKLSAgICA4MSwgODEsIDgxLCAxMDksIDU4LCA1OSwgNTksIDU5LCA1OSwgNjEsIDEwOSwgODEsIDgxLCA3NiwgNDYsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDQxLCA4NywgNTksIDYxLCA1OSwgNDEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDU5LCA2MSwgNTksCi0gICAgNTksIDU4LCAxMDksIDgxLCA4MSwgODcsIDM5LCA0NiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDYwLCA4MSwgOTEsIDU5LAotICAgIDU5LCA2MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4NywgNDMsIDU5LCA1OCwgNTksIDYwLCA4MSwgODEsIDgxLCA3NiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNTIsIDkxLCA1OCwgNDUsIDU5LCA4NywgODEsIDgxLCA4MSwgODEsCi0gICAgNzAsIDU4LCA1OCwgNTgsIDU5LCAxMDYsIDgxLCA4MSwgODEsIDkxLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCA5MywgNDAsIDMyLCA0NiwgNTksIDEwMCwgODEsIDgxLCA4MSwgODEsIDQwLCA1OCwgNDYsIDQ2LCA1OCwgMTAwLCA4MSwKLSAgICA4MSwgNjgsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDQ2LCA0NiwgNDYsIDMyLCA0NiwgNDYsIDQ2LCAzMiwgNDYsIDMyLCA0NiwgNDUsIDkxLCA1OSwgNjEsIDU4LCAxMDksCi0gICAgODEsIDgxLCA4MSwgODcsIDQ2LCA1OCwgNjEsIDU5LCA2MCwgODEsIDgxLCA4MCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA0NiwgNDYsIDYxLCA1OSwgNjEsIDYxLCA2MSwgNTksIDYxLCA2MSwgNTksCi0gICAgNTksIDU5LCA1OCwgNTgsIDQ2LCA0NiwgNDEsIDU4LCA1OSwgNTgsIDgxLCA4MSwgODEsIDgxLCA2OSwgNTgsIDU5LCA1OSwKLSAgICA2MCwgODEsIDgxLCA2OCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA1OCwgNTksCi0gICAgNjEsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNjEsIDYxLCA0NiwKLSAgICA2MSwgNTksIDkzLCA4MSwgODEsIDgxLCA4MSwgMTA3LCA1OCwgNTksIDU4LCAxMDksIDg3LCA2OCwgOTYsIDMyLCAzMiwgMzIsCi0gICAgNDYsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCA0NiwgNjAsIDYxLCA2MSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU4LCA1OCwgNTgsIDExNSwgMTA5LCA2OCwgNDEsIDM2LCA4MSwKLSAgICAxMDksIDQ2LCA2MSwgNjEsIDgxLCA2OSwgOTYsIDQ2LCA1OCwgNTgsIDQ2LCA1OCwgNDYsIDQ2LCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDQ2LCAzMiwgOTUsIDgxLAotICAgIDY3LCA2MSwgNjEsIDU4LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksCi0gICAgNTksIDU5LCA1OSwgNTksIDU4LCA2OCwgMzksIDYxLCAxMDUsIDYxLCA2MywgODEsIDExOSwgNTgsIDEwNiwgODAsIDMyLCA1OCwKLSAgICA2MSwgNTksIDU5LCA2MSwgNTksIDYxLCA1OSwgNjEsIDQ2LCA5NSwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDM2LCA4MSwgMTA5LCAxMDUsIDU5LCA2MSwgNTksIDU5LCA1OSwKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA0NiwgNTgsIDM3LAotICAgIDczLCAxMDgsIDEwOCwgNjIsIDUyLCA4MSwgMTA5LCAzNCwgMzIsIDYxLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksCi0gICAgNTksIDYxLCA1OSwgNjEsIDYxLCA0NiwgNDYsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwKLSAgICAzMiwgNDYsIDQ1LCA1NywgMTAxLCA0MywgNDMsIDYxLCA2MSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNjEsIDU5LCA1OSwKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTgsIDk3LCA0NiwgNjEsIDEwOCwgNjIsIDEyNiwgNTgsIDEwNiwgODAsIDk2LAotICAgIDQ2LCA2MSwgNjEsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA2MSwgNjEsCi0gICAgOTcsIDEwMywgOTcsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDQ1LCA0NiwgMzIsCi0gICAgNDYsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNDUsIDQ1LCA0NSwgNTgsIDU5LCA1OSwgNTksIDU5LCA2MSwKLSAgICAxMTksIDgxLCA5NywgMTI0LCAxMDUsIDEyNCwgMTI0LCAzOSwgMTI2LCA5NSwgMTE5LCA1OCwgNjEsIDU4LCA1OSwgNTksIDU5LAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNjEsIDExOSwgODEsIDgxLCA5OSwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDU4LCA1OSwgNTksIDU4LCAxMDYsIDgxLCA4MSwgODEsIDEwOSwgMTE5LAotICAgIDExOSwgMTE5LCAxMDksIDEwOSwgODEsIDgxLCAxMjIsIDU4LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTgsIDExNSwgODEsIDg3LCA4MSwgMTAyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgNjEsIDU4LCA1OSwgNjEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDg3LCA4NywgODEsIDgxLCA4MSwgODEsCi0gICAgODEsIDU4LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU4LCA0NSwgNDUsIDQ1LCA1OSwgNTksIDU5LCA0MSwKLSAgICA4NywgNjYsIDMzLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA1OCwgNTksIDU5LCA5MywgODEsCi0gICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgNDAsIDU4LCA1OSwgNTksIDU5LCA1OCwKLSAgICA0NSwgMzIsIDQ2LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDQ2LCAzMiwgMTI2LCA5NiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDU4LCA2MSwgNTksIDU4LCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsCi0gICAgODEsIDgxLCA4MSwgODEsIDgxLCA0MCwgNTgsIDU5LCA1OSwgNTksIDU4LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNTgsCi0gICAgNTksIDU5LCA1OCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDQwLCA1OCwKLSAgICA1OSwgNTksIDU5LCA0NiwgNDYsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDU4LCA2MSwgNTksIDYwLCA4MSwgODEsIDgxLCA4MSwKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA1OSwgNjEsIDU5LCA1OSwgNjEsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCA1OCwgNTksIDU5LCA5MywgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLAotICAgIDgxLCA4MSwgNDAsIDU5LCA1OSwgNTksIDU5LCAzMiwgNDYsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDU4LCA2MSwgNTgsIDEwNiwKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgNzYsIDU4LCA1OSwgNTksIDU5LAotICAgIDMyLCA0NiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNjEsIDU4LCA1OCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLAotICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODcsIDU4LCA1OSwgNTksIDU5LCA1OSwgMzIsIDQ2LCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDU4LCA1OSwgNjEsIDQxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4NywgNTksCi0gICAgNjEsIDU4LCA1OSwgNTksIDQ2LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNTgsIDYxLCA1OCwgNjEsIDgxLCA4MSwgODEsCi0gICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgMTA3LCA1OCwgNTksIDU5LCA1OSwgNTksIDU4LCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCA1OCwgNTksIDU5LCA1OCwgNTEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsCi0gICAgODEsIDEwMiwgOTQsIDU5LCA1OSwgNTksIDU5LCA1OSwgNjEsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA1OCwgNjEsIDU5LAotICAgIDU5LCA1OSwgNDMsIDYzLCAzNiwgODEsIDgxLCA4MSwgODcsIDY0LCA4NiwgMTAyLCA1OCwgNTksIDU5LCA1OSwgNTksIDU5LAotICAgIDU5LCA1OSwgNDYsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNDYsIDYxLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNDMsIDMzLAotICAgIDU4LCAxMjYsIDEyNiwgNTgsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAzMiwgNDYsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNDYsCi0gICAgNjEsIDU5LCA1OSwgNTksIDU4LCA0NSwgNTgsIDYxLCA1OSwgNTgsIDU4LCA1OCwgNjEsIDU5LCA1OSwgNTksIDU5LCA1OSwKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTgsIDMyLCA0NiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNDYsIDYxLCA1OSwgNTksIDU5LCA1OSwgNTksIDU4LCA5NSwKLSAgICAzMiwgNDUsIDYxLCA1OSwgNjEsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA0NSwgNTgsIDU5LCA1OSwgNTksIDU5LAotICAgIDYxLCA1OCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDU4LCA2MSwgNTksIDU5LCA1OSwgNTksIDU5LCA2MSwgNTksIDYxLCA0NiwgNDYsIDMyLCA0NSwgNDUsIDQ1LAotICAgIDU5LCA1OCwgNDUsIDQ1LCA0NiwgNTgsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDYxLCA0NiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA0NiwgNTgsIDU5LCA1OSwgNTksIDU5LAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNjEsIDU5LCA0NiwgMzIsIDMyLCA0NiwgMzIsIDQ2LCAzMiwgNTgsIDYxLCA1OSwgNTksCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA0NSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OCwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA2MSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU4LCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDEwLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgNDYsIDYxLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgMzIsIDQ2LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA2MSwKLSAgICA0NiwgNjEsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU4LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCA2MSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwKLSAgICA1OSwgNTksIDMyLCA0NiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDQ2LCA2MSwgNTgsIDU5LCA1OSwgNTksIDU5LAotICAgIDU5LCA1OCwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgNTgsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNDYsIDQ2LCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCA2MSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDQ1LCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAxMCwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDQ2LCAzMiwgNDUsIDYxLAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTgsIDMyLCA0NiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDU4LCA1OSwgNTksCi0gICAgNTksIDU5LCA1OSwgNTgsIDQ1LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNDUsIDQ1LCA0NSwgNDUsIDMyLCA0NiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgNDUsIDYxLCA1OSwgNTgsIDQ1LCA0NSwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDEwLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCi0gICAgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwKLSAgICAzMiwgMzIsIDQ2LCAzMiwgMzIsIDQ2LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLAotICAgIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMTAKLSAgfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvQ3J1bmNoQ2FjaGUuY3BwIGIvdG9vbHMvYWFwdC9DcnVuY2hDYWNoZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0Y2Y2YmMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9DcnVuY2hDYWNoZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBJbXBsZW1lbnRhdGlvbiBmaWxlIGZvciBDcnVuY2hDYWNoZQotLy8gVGhpcyBmaWxlIGRlZmluZXMgZnVuY3Rpb25zIGxhaWQgb3V0IGFuZCBkb2N1bWVudGVkIGluCi0vLyBDcnVuY2hDYWNoZS5oCi0KLSNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLSNpbmNsdWRlICJEaXJlY3RvcnlXYWxrZXIuaCIKLSNpbmNsdWRlICJGaWxlRmluZGVyLmgiCi0jaW5jbHVkZSAiQ2FjaGVVcGRhdGVyLmgiCi0jaW5jbHVkZSAiQ3J1bmNoQ2FjaGUuaCIKLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLUNydW5jaENhY2hlOjpDcnVuY2hDYWNoZShTdHJpbmc4IHNvdXJjZVBhdGgsIFN0cmluZzggZGVzdFBhdGgsIEZpbGVGaW5kZXIqIGZmKQotICAgIDogbVNvdXJjZVBhdGgoc291cmNlUGF0aCksIG1EZXN0UGF0aChkZXN0UGF0aCksIG1Tb3VyY2VGaWxlcygwKSwgbURlc3RGaWxlcygwKSwgbUZpbGVGaW5kZXIoZmYpCi17Ci0gICAgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB2YWx1ZSB0byByZXR1cm4gdG8gMCBzbyBpZiBhIGZpbGUgZG9lc24ndCBleGlzdAotICAgIC8vIHRoZW4gYWxsIGZpbGVzIGFyZSBhdXRvbWF0aWNhbGx5ICJuZXdlciIgdGhhbiBpdC4KLQotICAgIC8vIFNldCBmaWxlIGV4dGVuc2lvbnMgdG8gbG9vayBmb3IuIFJpZ2h0IG5vdyBqdXN0IHBuZ3MuCi0gICAgbUV4dGVuc2lvbnMucHVzaChTdHJpbmc4KCIucG5nIikpOwotCi0gICAgLy8gTG9hZCBmaWxlcyBpbnRvIG91ciBkYXRhIG1lbWJlcnMKLSAgICBsb2FkRmlsZXMoKTsKLX0KLQotc2l6ZV90IENydW5jaENhY2hlOjpjcnVuY2goQ2FjaGVVcGRhdGVyKiBjdSwgYm9vbCBmb3JjZU92ZXJ3cml0ZSkKLXsKLSAgICBzaXplX3QgbnVtRmlsZXNVcGRhdGVkID0gMDsKLQotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc291cmNlIGZpbGVzIGFuZCBjb21wYXJlIHRvIGNhY2hlLgotICAgIC8vIEFmdGVyIHByb2Nlc3NpbmcgYSBmaWxlLCByZW1vdmUgaXQgZnJvbSB0aGUgc291cmNlIGZpbGVzIGFuZAotICAgIC8vIGZyb20gdGhlIGRlc3QgZmlsZXMuCi0gICAgLy8gV2UncmUgZG9uZSB3aGVuIHdlJ3JlIG91dCBvZiBmaWxlcyBpbiBzb3VyY2UuCi0gICAgU3RyaW5nOCByZWxhdGl2ZVBhdGg7Ci0gICAgd2hpbGUgKG1Tb3VyY2VGaWxlcy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIC8vIEdldCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBzb3VyY2UgZmlsZSwgdGhlbiBjb252ZXJ0IHRvIGEgYy1zdHJpbmcKLSAgICAgICAgLy8gYW5kIG9mZnNldCBvdXIgYmVnaW5uaW5nIHBvaW50ZXIgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlUGF0aAotICAgICAgICAvLyBUaGlzIGVmZmljaWVudGx5IHN0cmlwcyB0aGUgc291cmNlIGRpcmVjdG9yeSBwcmVmaXggZnJvbSBvdXIgcGF0aC4KLSAgICAgICAgLy8gQWxzbywgU3RyaW5nOCBkb2Vzbid0IGhhdmUgYSBzdWJzdHJpbmcgbWV0aG9kIHNvIHRoaXMgaXMgd2hhdCB3ZSd2ZQotICAgICAgICAvLyBnb3QgdG8gd29yayB3aXRoLgotICAgICAgICBjb25zdCBjaGFyKiByUGF0aFB0ciA9IG1Tb3VyY2VGaWxlcy5rZXlBdCgwKS5zdHJpbmcoKSttU291cmNlUGF0aC5sZW5ndGgoKTsKLSAgICAgICAgLy8gU3RyaXAgbGVhZGluZyBzbGFzaCBpZiBwcmVzZW50Ci0gICAgICAgIGludCBvZmZzZXQgPSAwOwotICAgICAgICBpZiAoclBhdGhQdHJbMF0gPT0gT1NfUEFUSF9TRVBBUkFUT1IpCi0gICAgICAgICAgICBvZmZzZXQgPSAxOwotICAgICAgICByZWxhdGl2ZVBhdGggPSBTdHJpbmc4KHJQYXRoUHRyICsgb2Zmc2V0KTsKLQotICAgICAgICBpZiAoZm9yY2VPdmVyd3JpdGUgfHwgbmVlZHNVcGRhdGluZyhyZWxhdGl2ZVBhdGgpKSB7Ci0gICAgICAgICAgICBjdS0+cHJvY2Vzc0ltYWdlKG1Tb3VyY2VQYXRoLmFwcGVuZFBhdGhDb3B5KHJlbGF0aXZlUGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EZXN0UGF0aC5hcHBlbmRQYXRoQ29weShyZWxhdGl2ZVBhdGgpKTsKLSAgICAgICAgICAgIG51bUZpbGVzVXBkYXRlZCsrOwotICAgICAgICAgICAgLy8gY3J1bmNoRmlsZShyZWxhdGl2ZVBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIERlbGV0ZSB0aGlzIGZpbGUgZnJvbSB0aGUgc291cmNlIGZpbGVzIGFuZCAoaWYgaXQgZXhpc3RzKSBmcm9tIHRoZQotICAgICAgICAvLyBkZXN0IGZpbGVzLgotICAgICAgICBtU291cmNlRmlsZXMucmVtb3ZlSXRlbXNBdCgwKTsKLSAgICAgICAgbURlc3RGaWxlcy5yZW1vdmVJdGVtKG1EZXN0UGF0aC5hcHBlbmRQYXRoQ29weShyZWxhdGl2ZVBhdGgpKTsKLSAgICB9Ci0KLSAgICAvLyBJdGVyYXRlIHRocm91Z2ggd2hhdCdzIGxlZnQgb2YgZGVzdEZpbGVzIGFuZCBkZWxldGUgbGVmdG92ZXJzCi0gICAgd2hpbGUgKG1EZXN0RmlsZXMuc2l6ZSgpID4gMCkgewotICAgICAgICBjdS0+ZGVsZXRlRmlsZShtRGVzdEZpbGVzLmtleUF0KDApKTsKLSAgICAgICAgbURlc3RGaWxlcy5yZW1vdmVJdGVtc0F0KDApOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBvdXIga25vd2xlZGdlIG9mIHRoZSBmaWxlcyBjYWNoZQotICAgIC8vIGJvdGggc291cmNlIGFuZCBkZXN0IHNob3VsZCBiZSBlbXB0eSBieSBub3cuCi0gICAgbG9hZEZpbGVzKCk7Ci0KLSAgICByZXR1cm4gbnVtRmlsZXNVcGRhdGVkOwotfQotCi12b2lkIENydW5jaENhY2hlOjpsb2FkRmlsZXMoKQotewotICAgIC8vIENsZWFyIG91dCBvdXIgZGF0YSBzdHJ1Y3R1cmVzIHRvIGF2b2lkIHB1dHRpbmcgaW4gZHVwbGljYXRlcwotICAgIG1Tb3VyY2VGaWxlcy5jbGVhcigpOwotICAgIG1EZXN0RmlsZXMuY2xlYXIoKTsKLQotICAgIC8vIE1ha2UgYSBkaXJlY3Rvcnkgd2Fsa2VyIHRoYXQgcG9pbnRzIHRvIHRoZSBzeXN0ZW0uCi0gICAgRGlyZWN0b3J5V2Fsa2VyKiBkdyA9IG5ldyBTeXN0ZW1EaXJlY3RvcnlXYWxrZXIoKTsKLQotICAgIC8vIExvYWQgZmlsZXMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkKLSAgICBtRmlsZUZpbmRlci0+ZmluZEZpbGVzKG1Tb3VyY2VQYXRoLCBtRXh0ZW5zaW9ucywgbVNvdXJjZUZpbGVzLGR3KTsKLQotICAgIC8vIExvYWQgZmlsZXMgaW4gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeQotICAgIG1GaWxlRmluZGVyLT5maW5kRmlsZXMobURlc3RQYXRoLG1FeHRlbnNpb25zLG1EZXN0RmlsZXMsZHcpOwotCi0gICAgZGVsZXRlIGR3OwotfQotCi1ib29sIENydW5jaENhY2hlOjpuZWVkc1VwZGF0aW5nKFN0cmluZzggcmVsYXRpdmVQYXRoKSBjb25zdAotewotICAgIC8vIFJldHJpZXZlIG1vZGlmaWNhdGlvbiBkYXRlcyBmb3IgdGhpcyBmaWxlIGVudHJ5IHVuZGVyIHRoZSBzb3VyY2UgYW5kCi0gICAgLy8gY2FjaGUgZGlyZWN0b3J5IHRyZWVzLiBUaGUgdmVjdG9ycyB3aWxsIHJldHVybiBhIG1vZGlmaWNhdGlvbiBkYXRlIG9mIDAKLSAgICAvLyBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LgotICAgIHRpbWVfdCBzb3VyY2VEYXRlID0gbVNvdXJjZUZpbGVzLnZhbHVlRm9yKG1Tb3VyY2VQYXRoLmFwcGVuZFBhdGhDb3B5KHJlbGF0aXZlUGF0aCkpOwotICAgIHRpbWVfdCBkZXN0RGF0ZSA9IG1EZXN0RmlsZXMudmFsdWVGb3IobURlc3RQYXRoLmFwcGVuZFBhdGhDb3B5KHJlbGF0aXZlUGF0aCkpOwotICAgIHJldHVybiBzb3VyY2VEYXRlID4gZGVzdERhdGU7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9DcnVuY2hDYWNoZS5oIGIvdG9vbHMvYWFwdC9DcnVuY2hDYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTNkYTVjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvQ3J1bmNoQ2FjaGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIENhY2hlIG1hbmFnZXIgZm9yIHByZS1wcm9jZXNzZWQgUE5HIGZpbGVzLgotLy8gQ29udGFpbnMgY29kZSBmb3IgbWFuYWdpbmcgd2hpY2ggUE5HIGZpbGVzIGdldCBwcm9jZXNzZWQKLS8vIGF0IGJ1aWxkIHRpbWUuCi0vLwotCi0jaWZuZGVmIENSVU5DSENBQ0hFX0gKLSNkZWZpbmUgQ1JVTkNIQ0FDSEVfSAotCi0jaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0jaW5jbHVkZSAiRmlsZUZpbmRlci5oIgotI2luY2x1ZGUgIkNhY2hlVXBkYXRlci5oIgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotLyoqIENydW5jaENhY2hlCi0gKiAgVGhpcyBjbGFzcyBpcyBhIGNhY2hlIG1hbmFnZXIgd2hpY2ggY2FuIHByZS1wcm9jZXNzIFBORyBmaWxlcyBhbmQgc3RvcmUKLSAqICB0aGVtIGluIGEgbWlycm9yLWNhY2hlLiBJdCdzIGNhcGFibGUgb2YgZG9pbmcgaW5jcmVtZW50YWwgdXBkYXRlcyB0byBpdHMKLSAqICBjYWNoZS4KLSAqCi0gKiAgVXNhZ2U6Ci0gKiAgICAgIENyZWF0ZSBhbiBpbnN0YW5jZSBpbml0aWFsaXplZCB3aXRoIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZSwgdGhlCi0gKiAgICAgIHJvb3QgbG9jYXRpb24gdG8gc3RvcmUgdGhlIGNhY2hlIGZpbGVzLCBhbmQgYW4gaW5zdGFuY2Ugb2YgYSBmaWxlIGZpbmRlci4KLSAqICAgICAgVGhlbiB1cGRhdGUgdGhlIGNhY2hlIGJ5IGNhbGxpbmcgY3J1bmNoLgotICovCi1jbGFzcyBDcnVuY2hDYWNoZSB7Ci1wdWJsaWM6Ci0gICAgLy8gQ29uc3RydWN0b3IKLSAgICBDcnVuY2hDYWNoZShTdHJpbmc4IHNvdXJjZVBhdGgsIFN0cmluZzggZGVzdFBhdGgsIEZpbGVGaW5kZXIqIGZmKTsKLQotICAgIC8vIE5vYm9keSBzaG91bGQgYmUgY2FsbGluZyB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgIC8vIFNvIHRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rCi0KLSAgICAvLyBEZWZhdWx0IENvcHkgQ29uc3RydWN0b3IgYW5kIERlc3RydWN0b3IgYXJlIGZpbmUKLQotICAgIC8qKiBjcnVuY2ggaXMgdGhlIHdvcmtob3JzZSBvZiB0aGlzIGNsYXNzLgotICAgICAqIEl0IGdvZXMgdGhyb3VnaCBhbGwgdGhlIGZpbGVzIGZvdW5kIGluIHRoZSBzb3VyY2VQYXRoIGFuZCBjb21wYXJlcwotICAgICAqIHRoZW0gdG8gdGhlIGNhY2hlZCB2ZXJzaW9ucyBpbiB0aGUgZGVzdFBhdGguIElmIHRoZSBvcHRpb25hbAotICAgICAqIGFyZ3VtZW50IGZvcmNlT3ZlcndyaXRlIGlzIHNldCB0byB0cnVlLCB0aGVuIGFsbCBzb3VyY2UgZmlsZXMgYXJlCi0gICAgICogcmUtY3J1bmNoZWQgZXZlbiBpZiB0aGV5IGhhdmUgbm90IGJlZW4gbW9kaWZpZWQgcmVjZW50bHkuIE90aGVyd2lzZSwKLSAgICAgKiBzb3VyY2UgZmlsZXMgYXJlIG9ubHkgY3J1bmNoZWQgd2hlbiB0aGV5IG5lZWRVcGRhdGluZy4gQWZ0ZXJ3YXJkcywKLSAgICAgKiB3ZSBkZWxldGUgYW55IGxlZnRvdmVyIGZpbGVzIGluIHRoZSBjYWNoZSB0aGF0IGFyZSBubyBsb25nZXIgcHJlc2VudAotICAgICAqIGluIHNvdXJjZS4KLSAgICAgKgotICAgICAqIFBSRUNPTkRJVElPTlM6Ci0gICAgICogICAgICBObyBzZXR1cCBiZXNpZGVzIGNvbnN0cnVjdGlvbiBpcyBuZWVkZWQKLSAgICAgKiBQT1NUQ09ORElUSU9OUzoKLSAgICAgKiAgICAgIFRoZSBjYWNoZSBpcyB1cGRhdGVkIHRvIGZ1bGx5IHJlZmxlY3QgYWxsIGNoYW5nZXMgaW4gc291cmNlLgotICAgICAqICAgICAgVGhlIGZ1bmN0aW9uIHRoZW4gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGZpbGVzIGNoYW5nZWQgaW4gY2FjaGUKLSAgICAgKiAgICAgIChjb3VudGluZyBkZWxldGlvbnMpLgotICAgICAqLwotICAgIHNpemVfdCBjcnVuY2goQ2FjaGVVcGRhdGVyKiBjdSwgYm9vbCBmb3JjZU92ZXJ3cml0ZT1mYWxzZSk7Ci0KLXByaXZhdGU6Ci0gICAgLyoqIGxvYWRGaWxlcyBpcyBhIHdyYXBwZXIgdG8gdGhlIEZpbGVGaW5kZXIgdGhhdCBwbGFjZXMgbWF0Y2hpbmcKLSAgICAgKiBmaWxlcyBpbnRvIG1Tb3VyY2VGaWxlcyBhbmQgbURlc3RGaWxlcy4KLSAgICAgKgotICAgICAqICBQT1NUQ09ORElUSU9OUwotICAgICAqICAgICAgbURlc3RGaWxlcyBhbmQgbVNvdXJjZUZpbGVzIGFyZSByZWZyZXNoZWQgdG8gcmVmbGVjdCB0aGUgY3VycmVudAotICAgICAqICAgICAgc3RhdGUgb2YgdGhlIGZpbGVzIGluIHRoZSBzb3VyY2UgYW5kIGRlc3QgZGlyZWN0b3JpZXMuCi0gICAgICogICAgICBBbnkgcHJldmlvdXMgY29udGVudHMgb2YgbVNvdXJjZUZpbGVzIGFuZCBtRGVzdEZpbGVzIGFyZSBjbGVhcmVkLgotICAgICAqLwotICAgIHZvaWQgbG9hZEZpbGVzKCk7Ci0KLSAgICAvKiogbmVlZHNVcGRhdGluZyB0YWtlcyBhIGZpbGUgcGF0aAotICAgICAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIGZpbGUgcmVwcmVzZW50ZWQgYnkgdGhpcyBwYXRoIGlzIG5ld2VyIGluIHRoZQotICAgICAqIHNvdXJjZUZpbGVzIHRoYW4gaW4gdGhlIGNhY2hlIChtRGVzdEZpbGVzKS4KLSAgICAgKgotICAgICAqIFBSRUNPTkRJVElPTlM6Ci0gICAgICogICAgICBtU291cmNlRmlsZXMgYW5kIG1EZXN0RmlsZXMgbXVzdCBiZSBpbml0aWFsaXplZCBhbmQgZmlsbGVkLgotICAgICAqIFBPU1RDT05ESVRJT05TOgotICAgICAqICAgICAgcmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHNvdXJjZSBmaWxlJ3MgbW9kaWZpY2F0aW9uIHRpbWUKLSAgICAgKiAgICAgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY2FjaGVkIGZpbGUncyBtb2QtdGltZS4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCi0gICAgICoKLSAgICAgKiBVU0FHRToKLSAgICAgKiAgICAgIFNob3VsZCBiZSB1c2VkIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6Ci0gICAgICogICAgICBpZiAobmVlZHNVcGRhdGluZyhmaWxlUGF0aCkpCi0gICAgICogICAgICAgICAgLy8gUmVjcnVuY2ggc291cmNlRmlsZSBvdXQgdG8gZGVzdEZpbGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBib29sIG5lZWRzVXBkYXRpbmcoU3RyaW5nOCByZWxhdGl2ZVBhdGgpIGNvbnN0OwotCi0gICAgLy8gREFUQSBNRU1CRVJTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFN0cmluZzggbVNvdXJjZVBhdGg7Ci0gICAgU3RyaW5nOCBtRGVzdFBhdGg7Ci0KLSAgICBWZWN0b3I8U3RyaW5nOD4gbUV4dGVuc2lvbnM7Ci0KLSAgICAvLyBFYWNoIHZlY3RvciBvZiBwYXRocyBjb250YWlucyBvbmUgZW50cnkgcGVyIFBORyBmaWxlIGVuY291bnRlcmVkLgotICAgIC8vIEVhY2ggZW50cnkgY29uc2lzdHMgb2YgYSBwYXRoIHBvaW50aW5nIHRvIHRoYXQgUE5HLgotICAgIERlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmc4LHRpbWVfdD4gbVNvdXJjZUZpbGVzOwotICAgIERlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmc4LHRpbWVfdD4gbURlc3RGaWxlczsKLQotICAgIC8vIFBvaW50ZXIgdG8gYSBGaWxlRmluZGVyIHRvIHVzZQotICAgIEZpbGVGaW5kZXIqIG1GaWxlRmluZGVyOwotfTsKLQotI2VuZGlmIC8vIENSVU5DSENBQ0hFX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvRGlyZWN0b3J5V2Fsa2VyLmggYi90b29scy9hYXB0L0RpcmVjdG9yeVdhbGtlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODAzMWQwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvRGlyZWN0b3J5V2Fsa2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIERlZmluZXMgYW4gYWJzdHJhY3Rpb24gZm9yIG9wZW5pbmcgYSBkaXJlY3Rvcnkgb24gdGhlIGZpbGVzeXN0ZW0gYW5kCi0vLyBpdGVyYXRpbmcgdGhyb3VnaCBpdC4KLQotI2lmbmRlZiBESVJFQ1RPUllXQUxLRVJfSAotI2RlZmluZSBESVJFQ1RPUllXQUxLRVJfSAotCi0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotLy8gRGlyZWN0b3J5IFdhbGtlcgotLy8gVGhpcyBpcyBhbiBhYnN0cmFjdGlvbiBmb3Igd2Fsa2luZyB0aHJvdWdoIGEgZGlyZWN0b3J5IGFuZCBnZXR0aW5nIGZpbGVzCi0vLyBhbmQgZGVzY3JpcHRpb25zLgotCi1jbGFzcyBEaXJlY3RvcnlXYWxrZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkRpcmVjdG9yeVdhbGtlcigpIHt9OwotICAgIHZpcnR1YWwgYm9vbCBvcGVuRGlyKFN0cmluZzggcGF0aCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBvcGVuRGlyKGNvbnN0IGNoYXIqIHBhdGgpID0gMDsKLSAgICAvLyBBZHZhbmNlIHRvIG5leHQgZGlyZWN0b3J5IGVudHJ5Ci0gICAgdmlydHVhbCBzdHJ1Y3QgZGlyZW50KiBuZXh0RW50cnkoKSA9IDA7Ci0gICAgLy8gR2V0IHRoZSBzdGF0cyBmb3IgdGhlIGN1cnJlbnQgZW50cnkKLSAgICB2aXJ0dWFsIHN0cnVjdCBzdGF0KiAgIGVudHJ5U3RhdHMoKSA9IDA7Ci0gICAgLy8gQ2xlYW4gVXAKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VEaXIoKSA9IDA7Ci0gICAgLy8gVGhpcyBjbGFzcyBpcyBhYmxlIHRvIHJlcGxpY2F0ZSBpdHNlbGYgb24gdGhlIGhlYXAKLSAgICB2aXJ0dWFsIERpcmVjdG9yeVdhbGtlciogY2xvbmUoKSA9IDA7Ci0KLSAgICAvLyBEQVRBIE1FTUJFUlMKLSAgICAvLyBDdXJyZW50IGRpcmVjdG9yeSBlbnRyeQotICAgIHN0cnVjdCBkaXJlbnQgbUVudHJ5OwotICAgIC8vIFN0YXRzIGZvciB0aGF0IGRpcmVjdG9yeSBlbnRyeQotICAgIHN0cnVjdCBzdGF0IG1TdGF0czsKLSAgICAvLyBCYXNlIHBhdGgKLSAgICBTdHJpbmc4IG1CYXNlUGF0aDsKLX07Ci0KLS8vIFN5c3RlbSBEaXJlY3RvcnkgV2Fsa2VyCi0vLyBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhYm92ZSBhYnN0cmFjdGlvbiB0aGF0IGNhbGxzCi0vLyByZWFsIHN5c3RlbSBjYWxscyBhbmQgaXMgZnVsbHkgZnVuY3Rpb25hbC4KLS8vIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCBzaW5jZSB0aGV5J3JlIHZlcnkgc2hvcnQgYW5kIHNpbXBsZQotCi1jbGFzcyBTeXN0ZW1EaXJlY3RvcnlXYWxrZXIgOiBwdWJsaWMgRGlyZWN0b3J5V2Fsa2VyIHsKLQotICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IsIGNvcHkgY29uc3RydWN0b3IsIGFuZCBkZXN0cnVjdG9yIGFyZSBmaW5lCi1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIG9wZW5EaXIoU3RyaW5nOCBwYXRoKSB7Ci0gICAgICAgIG1CYXNlUGF0aCA9IHBhdGg7Ci0gICAgICAgIGRpciA9IE5VTEw7Ci0gICAgICAgIGRpciA9IG9wZW5kaXIobUJhc2VQYXRoLnN0cmluZygpICk7Ci0KLSAgICAgICAgaWYgKGRpciA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH07Ci0gICAgdmlydHVhbCBib29sIG9wZW5EaXIoY29uc3QgY2hhciogcGF0aCkgewotICAgICAgICBTdHJpbmc4IHAocGF0aCk7Ci0gICAgICAgIG9wZW5EaXIocCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH07Ci0gICAgLy8gQWR2YW5jZSB0byBuZXh0IGRpcmVjdG9yeSBlbnRyeQotICAgIHZpcnR1YWwgc3RydWN0IGRpcmVudCogbmV4dEVudHJ5KCkgewotICAgICAgICBzdHJ1Y3QgZGlyZW50KiBlbnRyeVB0ciA9IHJlYWRkaXIoZGlyKTsKLSAgICAgICAgaWYgKGVudHJ5UHRyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICBtRW50cnkgPSAqZW50cnlQdHI7Ci0gICAgICAgIC8vIEdldCBzdGF0cwotICAgICAgICBTdHJpbmc4IGZ1bGxQYXRoID0gbUJhc2VQYXRoLmFwcGVuZFBhdGhDb3B5KG1FbnRyeS5kX25hbWUpOwotICAgICAgICBzdGF0KGZ1bGxQYXRoLnN0cmluZygpLCZtU3RhdHMpOwotICAgICAgICByZXR1cm4gJm1FbnRyeTsKLSAgICB9OwotICAgIC8vIEdldCB0aGUgc3RhdHMgZm9yIHRoZSBjdXJyZW50IGVudHJ5Ci0gICAgdmlydHVhbCBzdHJ1Y3Qgc3RhdCogICBlbnRyeVN0YXRzKCkgewotICAgICAgICByZXR1cm4gJm1TdGF0czsKLSAgICB9OwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZURpcigpIHsKLSAgICAgICAgY2xvc2VkaXIoZGlyKTsKLSAgICB9OwotICAgIHZpcnR1YWwgRGlyZWN0b3J5V2Fsa2VyKiBjbG9uZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTeXN0ZW1EaXJlY3RvcnlXYWxrZXIoKnRoaXMpOwotICAgIH07Ci1wcml2YXRlOgotICAgIERJUiogZGlyOwotfTsKLQotI2VuZGlmIC8vIERJUkVDVE9SWVdBTEtFUl9ICmRpZmYgLS1naXQgYS90b29scy9hYXB0L0ZpbGVGaW5kZXIuY3BwIGIvdG9vbHMvYWFwdC9GaWxlRmluZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg3NzVjMC4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L0ZpbGVGaW5kZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0KLS8vIEZpbGUgRmluZGVyIGltcGxlbWVudGF0aW9uLgotLy8gSW1wbGVtZW50YXRpb24gZm9yIHRoZSBmdW5jdGlvbnMgZGVjbGFyZWQgYW5kIGRvY3VtZW50ZWQgaW4gRmlsZUZpbmRlci5oCi0KLSNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KLQotI2luY2x1ZGUgPGRpcmVudC5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0KLSNpbmNsdWRlICJEaXJlY3RvcnlXYWxrZXIuaCIKLSNpbmNsdWRlICJGaWxlRmluZGVyLmgiCi0KLS8vI2RlZmluZSBERUJVRwotCi11c2luZyBhbmRyb2lkOjpTdHJpbmc4OwotCi0vLyBQcml2YXRlIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYSBmaWxlIGlzIGEgZGlyZWN0b3J5IG9yIG5vdAotYm9vbCBpc0RpcmVjdG9yeShjb25zdCBjaGFyKiBmaWxlbmFtZSkgewotICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OwotICAgIGlmIChzdGF0KGZpbGVuYW1lLCAmZmlsZVN0YXQpID09IC0xKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuKFNfSVNESVIoZmlsZVN0YXQuc3RfbW9kZSkpOwotfQotCi0KLS8vIFByaXZhdGUgZnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciBhIGZpbGUgaXMgYSByZWd1bGFyIGZpbGUgb3Igbm90Ci1ib29sIGlzRmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSkgewotICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OwotICAgIGlmIChzdGF0KGZpbGVuYW1lLCAmZmlsZVN0YXQpID09IC0xKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuKFNfSVNSRUcoZmlsZVN0YXQuc3RfbW9kZSkpOwotfQotCi1ib29sIFN5c3RlbUZpbGVGaW5kZXI6OmZpbmRGaWxlcyhTdHJpbmc4IGJhc2VQYXRoLCBWZWN0b3I8U3RyaW5nOD4mIGV4dGVuc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXllZFZlY3RvcjxTdHJpbmc4LHRpbWVfdD4mIGZpbGVTdG9yZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeVdhbGtlciogZHcpCi17Ci0gICAgLy8gU2NhbiB0aGUgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkgYmFzZVBhdGgKLSAgICAvLyBjaGVjayBmaWxlcyBhbmQgcmVjdXJzZSBpbnRvIHN1YmRpcmVjdG9yaWVzLgotICAgIGlmICghZHctPm9wZW5EaXIoYmFzZVBhdGgpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLyoKLSAgICAgKiAgR28gdGhyb3VnaCBhbGwgZGlyZWN0b3J5IGVudHJpZXMuIENoZWNrIGVhY2ggZmlsZSB1c2luZyBjaGVja0FuZEFkZEZpbGUKLSAgICAgKiAgYW5kIHJlY3Vyc2UgaW50byBzdWItZGlyZWN0b3JpZXMuCi0gICAgICovCi0gICAgc3RydWN0IGRpcmVudCogZW50cnk7Ci0gICAgd2hpbGUgKChlbnRyeSA9IGR3LT5uZXh0RW50cnkoKSkgIT0gTlVMTCkgewotICAgICAgICBTdHJpbmc4IGVudHJ5TmFtZShlbnRyeS0+ZF9uYW1lKTsKLSAgICAgICAgaWYgKGVudHJ5LT5kX25hbWVbMF0gPT0gJy4nKSAvLyBTa2lwIGhpZGRlbiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFN0cmluZzggZnVsbFBhdGggPSBiYXNlUGF0aC5hcHBlbmRQYXRoQ29weShlbnRyeU5hbWUpOwotICAgICAgICAvLyBJZiB0aGlzIGVudHJ5IGlzIGEgZGlyZWN0b3J5IHdlJ2xsIHJlY3Vyc2UgaW50byBpdAotICAgICAgICBpZiAoaXNEaXJlY3RvcnkoZnVsbFBhdGguc3RyaW5nKCkpICkgewotICAgICAgICAgICAgRGlyZWN0b3J5V2Fsa2VyKiBjb3B5ID0gZHctPmNsb25lKCk7Ci0gICAgICAgICAgICBmaW5kRmlsZXMoZnVsbFBhdGgsIGV4dGVuc2lvbnMsIGZpbGVTdG9yZSxjb3B5KTsKLSAgICAgICAgICAgIGRlbGV0ZSBjb3B5OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBlbnRyeSBpcyBhIGZpbGUsIHdlJ2xsIHBhc3MgaXQgb3ZlciB0byBjaGVja0FuZEFkZEZpbGUKLSAgICAgICAgaWYgKGlzRmlsZShmdWxsUGF0aC5zdHJpbmcoKSkgKSB7Ci0gICAgICAgICAgICBjaGVja0FuZEFkZEZpbGUoZnVsbFBhdGgsZHctPmVudHJ5U3RhdHMoKSxleHRlbnNpb25zLGZpbGVTdG9yZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDbGVhbiB1cAotICAgIGR3LT5jbG9zZURpcigpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU3lzdGVtRmlsZUZpbmRlcjo6Y2hlY2tBbmRBZGRGaWxlKFN0cmluZzggcGF0aCwgY29uc3Qgc3RydWN0IHN0YXQqIHN0YXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFN0cmluZzg+JiBleHRlbnNpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCx0aW1lX3Q+JiBmaWxlU3RvcmUpCi17Ci0gICAgLy8gTG9vcCBvdmVyIHRoZSBleHRlbnNpb25zLCBjaGVja2luZyBmb3IgYSBtYXRjaAotICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgIFN0cmluZzggZXh0KHBhdGguZ2V0UGF0aEV4dGVuc2lvbigpKTsKLSAgICBleHQudG9Mb3dlcigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCkgJiYgIWRvbmU7ICsraSkgewotICAgICAgICBTdHJpbmc4IGV4dDIgPSBleHRlbnNpb25zW2ldLmdldFBhdGhFeHRlbnNpb24oKTsKLSAgICAgICAgZXh0Mi50b0xvd2VyKCk7Ci0gICAgICAgIC8vIENvbXBhcmUgdGhlIGV4dGVuc2lvbnMuIElmIGEgbWF0Y2ggaXMgZm91bmQsIGFkZCB0byBzdG9yYWdlLgotICAgICAgICBpZiAoZXh0ID09IGV4dDIpIHsKLSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICAgICAgZmlsZVN0b3JlLmFkZChwYXRoLHN0YXRzLT5zdF9tdGltZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvRmlsZUZpbmRlci5oIGIvdG9vbHMvYWFwdC9GaWxlRmluZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NzRhZWUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9GaWxlRmluZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLQotLy8gRmlsZSBGaW5kZXIuCi0vLyBUaGlzIGlzIGEgY29sbGVjdGlvbiBvZiB1c2VmdWwgZnVuY3Rpb25zIGZvciBmaW5kaW5nIHBhdGhzIGFuZCBtb2RpZmljYXRpb24KLS8vIHRpbWVzIG9mIGZpbGVzIHRoYXQgbWF0Y2ggYW4gZXh0ZW5zaW9uIHBhdHRlcm4gaW4gYSBkaXJlY3RvcnkgdHJlZS4KLS8vIGFuZCBmaW5kaW5nIGZpbGVzIGluIGl0LgotCi0jaWZuZGVmIEZJTEVGSU5ERVJfSAotI2RlZmluZSBGSUxFRklOREVSX0gKLQotI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotCi0jaW5jbHVkZSAiRGlyZWN0b3J5V2Fsa2VyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi0vLyBBYnN0cmFjdGlvbiB0byBhbGxvdyBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uIFNlZSBNb2NrRmlsZUZpbmRlci5oCi0vLyBmb3IgdGhlIHRlc3RpbmcgaW1wbGVtZW50YXRpb24uCi1jbGFzcyBGaWxlRmluZGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgZmluZEZpbGVzKFN0cmluZzggYmFzZVBhdGgsIFZlY3RvcjxTdHJpbmc4PiYgZXh0ZW5zaW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleWVkVmVjdG9yPFN0cmluZzgsdGltZV90PiYgZmlsZVN0b3JlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5V2Fsa2VyKiBkdykgPSAwOwotCi0gICAgdmlydHVhbCB+RmlsZUZpbmRlcigpIHt9OwotfTsKLQotY2xhc3MgU3lzdGVtRmlsZUZpbmRlciA6IHB1YmxpYyBGaWxlRmluZGVyIHsKLXB1YmxpYzoKLQotICAgIC8qIGZpbmRGaWxlcyB0YWtlcyBhIHBhdGgsIGEgVmVjdG9yIG9mIGV4dGVuc2lvbnMsIGFuZCBhIGRlc3RpbmF0aW9uIEtleWVkVmVjdG9yCi0gICAgICogICAgICAgICAgIGFuZCBwbGFjZXMgcGF0aC9tb2RpZmljYXRpb24gZGF0ZSBrZXkvdmFsdWVzIHBvaW50aW5nIHRvCi0gICAgICogICAgICAgICAgYWxsIGZpbGVzIHdpdGggbWF0Y2hpbmcgZXh0ZW5zaW9ucyBmb3VuZCBpbnRvIHRoZSBLZXllZFZlY3RvcgotICAgICAqIFBSRUNPTkRJVElPTlMKLSAgICAgKiAgICAgcGF0aCBpcyBhIHZhbGlkIHN5c3RlbSBwYXRoCi0gICAgICogICAgIGV4dGVuc2lvbnMgc2hvdWxkIGluY2x1ZGUgbGVhZGluZyAiLiIKLSAgICAgKiAgICAgICAgICAgICAgICBUaGlzIGlzIG5vdCBuZWNlc3NhcnksIGJ1dCB0aGUgY29tcGFyaXNvbiBkaXJlY3RseQotICAgICAqICAgICAgICAgICAgICAgIGNvbXBhcmVzIHRoZSBlbmQgb2YgdGhlIHBhdGggc3RyaW5nIHNvIGlmIHRoZSAiLiIKLSAgICAgKiAgICAgICAgICAgICAgICBpcyBleGNsdWRlZCB0aGVyZSBpcyBhIHNtYWxsIGNoYW5jZSB5b3UgY291bGQgaGF2ZQotICAgICAqICAgICAgICAgICAgICAgIGEgZmFsc2UgcG9zaXRpdmUgbWF0Y2guIChGb3IgZXhhbXBsZTogZXh0ZW5zaW9uICJwbmciCi0gICAgICogICAgICAgICAgICAgICAgd291bGQgbWF0Y2ggYSBmaWxlIGNhbGxlZCAiYmxhaGJsYWhwbmciKQotICAgICAqCi0gICAgICogUE9TVENPTkRJVElPTlMKLSAgICAgKiAgICAgZmlsZVN0b3JlIGNvbnRhaW5zIChpbiBubyBndWFyYW50ZWVkIG9yZGVyKSBwYXRocyB0byBhbGwKLSAgICAgKiAgICAgICAgICAgICAgICBtYXRjaGluZyBmaWxlcyBlbmNvdW50ZXJlZCBpbiBzdWJkaXJlY3RvcmllcyBvZiBwYXRoCi0gICAgICogICAgICAgICAgICAgICAgYXMga2V5cyBpbiB0aGUgS2V5ZWRWZWN0b3IuIEVhY2gga2V5IGhhcyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUKLSAgICAgKiAgICAgICAgICAgICAgICBvZiB0aGUgZmlsZSBhcyBpdHMgdmFsdWUuCi0gICAgICoKLSAgICAgKiBDYWxscyBjaGVja0FuZEFkZEZpbGUgb24gZWFjaCBmaWxlIGVuY291bnRlcmVkIGluIHRoZSBkaXJlY3RvcnkgdHJlZQotICAgICAqIFJlY3Vyc2l2ZWx5IGRlc2NlbmRzIGludG8gc3ViZGlyZWN0b3JpZXMuCi0gICAgICovCi0gICAgdmlydHVhbCBib29sIGZpbmRGaWxlcyhTdHJpbmc4IGJhc2VQYXRoLCBWZWN0b3I8U3RyaW5nOD4mIGV4dGVuc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBLZXllZFZlY3RvcjxTdHJpbmc4LHRpbWVfdD4mIGZpbGVTdG9yZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeVdhbGtlciogZHcpOwotCi1wcml2YXRlOgotICAgIC8qKgotICAgICAqIGNoZWNrQW5kQWRkRmlsZSBsb29rcyBhdCBhIHNpbmdsZSBmaWxlIHBhdGggYW5kIHN0YXQgY29tYm8KLSAgICAgKiB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBpcyBhIG1hdGNoaW5nIGZpbGUgKGJ5IGxvb2tpbmcgYXQKLSAgICAgKiB0aGUgZXh0ZW5zaW9uKQotICAgICAqCi0gICAgICogUFJFQ09ORElUSU9OUwotICAgICAqICAgIG5vIHNldHVwIGlzIG5lZWRlZAotICAgICAqCi0gICAgICogUE9TVENPTkRJVElPTlMKLSAgICAgKiAgICBJZiB0aGUgZ2l2ZW4gZmlsZSBoYXMgYSBtYXRjaGluZyBleHRlbnNpb24gdGhlbiBhIG5ldyBlbnRyeQotICAgICAqICAgIGlzIGFkZGVkIHRvIHRoZSBLZXllZFZlY3RvciB3aXRoIHRoZSBwYXRoIGFzIHRoZSBrZXkgYW5kIHRoZSBtb2RpZmljYXRpb24KLSAgICAgKiAgICB0aW1lIGFzIHRoZSB2YWx1ZS4KLSAgICAgKgotICAgICAqLwotICAgIHN0YXRpYyB2b2lkIGNoZWNrQW5kQWRkRmlsZShTdHJpbmc4IHBhdGgsIGNvbnN0IHN0cnVjdCBzdGF0KiBzdGF0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFN0cmluZzg+JiBleHRlbnNpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXllZFZlY3RvcjxTdHJpbmc4LHRpbWVfdD4mIGZpbGVTdG9yZSk7Ci0KLX07Ci0jZW5kaWYgLy8gRklMRUZJTkRFUl9ICmRpZmYgLS1naXQgYS90b29scy9hYXB0L0ltYWdlcy5jcHAgYi90b29scy9hYXB0L0ltYWdlcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YTk0OGQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9JbWFnZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM4NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIEJ1aWxkIHJlc291cmNlIGZpbGVzIGZyb20gcmF3IGFzc2V0cy4KLS8vCi0KLSNkZWZpbmUgUE5HX0lOVEVSTkFMCi0KLSNpbmNsdWRlICJJbWFnZXMuaCIKLQotI2luY2x1ZGUgPGFuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvQnl0ZU9yZGVyLmg+Ci0KLSNpbmNsdWRlIDxwbmcuaD4KLSNpbmNsdWRlIDx6bGliLmg+Ci0KLSNkZWZpbmUgTk9JU1koeCkgLy94Ci0KLXN0YXRpYyB2b2lkCi1wbmdfd3JpdGVfYWFwdF9maWxlKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19ieXRlcCBkYXRhLCBwbmdfc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBBYXB0RmlsZSogYWFwdGZpbGUgPSAoQWFwdEZpbGUqKSBwbmdfZ2V0X2lvX3B0cihwbmdfcHRyKTsKLSAgICBzdGF0dXNfdCBlcnIgPSBhYXB0ZmlsZS0+d3JpdGVEYXRhKGRhdGEsIGxlbmd0aCk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIldyaXRlIEVycm9yIik7Ci0gICAgfQotfQotCi0KLXN0YXRpYyB2b2lkCi1wbmdfZmx1c2hfYWFwdF9maWxlKHBuZ19zdHJ1Y3RwIHBuZ19wdHIpCi17Ci19Ci0KLS8vIFRoaXMgaG9sZHMgYW4gaW1hZ2UgYXMgOGJwcCBSR0JBLgotc3RydWN0IGltYWdlX2luZm8KLXsKLSAgICBpbWFnZV9pbmZvKCkgOiByb3dzKE5VTEwpLCBpczlQYXRjaChmYWxzZSksIGFsbG9jUm93cyhOVUxMKSB7IH0KLSAgICB+aW1hZ2VfaW5mbygpIHsKLSAgICAgICAgaWYgKHJvd3MgJiYgcm93cyAhPSBhbGxvY1Jvd3MpIHsKLSAgICAgICAgICAgIGZyZWUocm93cyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGFsbG9jUm93cykgewotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPChpbnQpYWxsb2NIZWlnaHQ7IGkrKykgewotICAgICAgICAgICAgICAgIGZyZWUoYWxsb2NSb3dzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZyZWUoYWxsb2NSb3dzKTsKLSAgICAgICAgfQotICAgICAgICBmcmVlKGluZm85UGF0Y2gueERpdnMpOwotICAgICAgICBmcmVlKGluZm85UGF0Y2gueURpdnMpOwotICAgICAgICBmcmVlKGluZm85UGF0Y2guY29sb3JzKTsKLSAgICB9Ci0KLSAgICBwbmdfdWludF8zMiB3aWR0aDsKLSAgICBwbmdfdWludF8zMiBoZWlnaHQ7Ci0gICAgcG5nX2J5dGVwcCByb3dzOwotCi0gICAgLy8gOS1wYXRjaCBpbmZvLgotICAgIGJvb2wgaXM5UGF0Y2g7Ci0gICAgUmVzX3BuZ185cGF0Y2ggaW5mbzlQYXRjaDsKLQotICAgIC8vIExheW91dCBwYWRkaW5nLCBpZiByZWxldmFudAotICAgIGJvb2wgaGF2ZUxheW91dEJvdW5kczsKLSAgICBpbnQzMl90IGxheW91dEJvdW5kc0xlZnQ7Ci0gICAgaW50MzJfdCBsYXlvdXRCb3VuZHNUb3A7Ci0gICAgaW50MzJfdCBsYXlvdXRCb3VuZHNSaWdodDsKLSAgICBpbnQzMl90IGxheW91dEJvdW5kc0JvdHRvbTsKLQotICAgIHBuZ191aW50XzMyIGFsbG9jSGVpZ2h0OwotICAgIHBuZ19ieXRlcHAgYWxsb2NSb3dzOwotfTsKLQotc3RhdGljIHZvaWQgcmVhZF9wbmcoY29uc3QgY2hhciogaW1hZ2VOYW1lLAotICAgICAgICAgICAgICAgICAgICAgcG5nX3N0cnVjdHAgcmVhZF9wdHIsIHBuZ19pbmZvcCByZWFkX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICBpbWFnZV9pbmZvKiBvdXRJbWFnZUluZm8pCi17Ci0gICAgaW50IGNvbG9yX3R5cGU7Ci0gICAgaW50IGJpdF9kZXB0aCwgaW50ZXJsYWNlX3R5cGUsIGNvbXByZXNzaW9uX3R5cGU7Ci0gICAgaW50IGk7Ci0KLSAgICBwbmdfcmVhZF9pbmZvKHJlYWRfcHRyLCByZWFkX2luZm8pOwotCi0gICAgcG5nX2dldF9JSERSKHJlYWRfcHRyLCByZWFkX2luZm8sICZvdXRJbWFnZUluZm8tPndpZHRoLAotICAgICAgICZvdXRJbWFnZUluZm8tPmhlaWdodCwgJmJpdF9kZXB0aCwgJmNvbG9yX3R5cGUsCi0gICAgICAgJmludGVybGFjZV90eXBlLCAmY29tcHJlc3Npb25fdHlwZSwgTlVMTCk7Ci0KLSAgICAvL3ByaW50ZigiSW1hZ2UgJXM6XG4iLCBpbWFnZU5hbWUpOwotICAgIC8vcHJpbnRmKCJjb2xvcl90eXBlPSVkLCBiaXRfZGVwdGg9JWQsIGludGVybGFjZV90eXBlPSVkLCBjb21wcmVzc2lvbl90eXBlPSVkXG4iLAotICAgIC8vICAgICAgIGNvbG9yX3R5cGUsIGJpdF9kZXB0aCwgaW50ZXJsYWNlX3R5cGUsIGNvbXByZXNzaW9uX3R5cGUpOwotCi0gICAgaWYgKGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUEFMRVRURSkKLSAgICAgICAgcG5nX3NldF9wYWxldHRlX3RvX3JnYihyZWFkX3B0cik7Ci0KLSAgICBpZiAoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZICYmIGJpdF9kZXB0aCA8IDgpCi0gICAgICAgIHBuZ19zZXRfZXhwYW5kX2dyYXlfMV8yXzRfdG9fOChyZWFkX3B0cik7Ci0KLSAgICBpZiAocG5nX2dldF92YWxpZChyZWFkX3B0ciwgcmVhZF9pbmZvLCBQTkdfSU5GT190Uk5TKSkgewotICAgICAgICAvL3ByaW50ZigiSGFzIFBOR19JTkZPX3RSTlMhXG4iKTsKLSAgICAgICAgcG5nX3NldF90Uk5TX3RvX2FscGhhKHJlYWRfcHRyKTsKLSAgICB9Ci0KLSAgICBpZiAoYml0X2RlcHRoID09IDE2KQotICAgICAgICBwbmdfc2V0X3N0cmlwXzE2KHJlYWRfcHRyKTsKLQotICAgIGlmICgoY29sb3JfdHlwZSZQTkdfQ09MT1JfTUFTS19BTFBIQSkgPT0gMCkKLSAgICAgICAgcG5nX3NldF9hZGRfYWxwaGEocmVhZF9wdHIsIDB4RkYsIFBOR19GSUxMRVJfQUZURVIpOwotCi0gICAgaWYgKGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWSB8fCBjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVlfQUxQSEEpCi0gICAgICAgIHBuZ19zZXRfZ3JheV90b19yZ2IocmVhZF9wdHIpOwotCi0gICAgcG5nX3JlYWRfdXBkYXRlX2luZm8ocmVhZF9wdHIsIHJlYWRfaW5mbyk7Ci0KLSAgICBvdXRJbWFnZUluZm8tPnJvd3MgPSAocG5nX2J5dGVwcCltYWxsb2MoCi0gICAgICAgIG91dEltYWdlSW5mby0+aGVpZ2h0ICogc2l6ZW9mKHBuZ19ieXRlcCkpOwotICAgIG91dEltYWdlSW5mby0+YWxsb2NIZWlnaHQgPSBvdXRJbWFnZUluZm8tPmhlaWdodDsKLSAgICBvdXRJbWFnZUluZm8tPmFsbG9jUm93cyA9IG91dEltYWdlSW5mby0+cm93czsKLQotICAgIHBuZ19zZXRfcm93cyhyZWFkX3B0ciwgcmVhZF9pbmZvLCBvdXRJbWFnZUluZm8tPnJvd3MpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IChpbnQpb3V0SW1hZ2VJbmZvLT5oZWlnaHQ7IGkrKykKLSAgICB7Ci0gICAgICAgIG91dEltYWdlSW5mby0+cm93c1tpXSA9IChwbmdfYnl0ZXApCi0gICAgICAgICAgICBtYWxsb2MocG5nX2dldF9yb3dieXRlcyhyZWFkX3B0ciwgcmVhZF9pbmZvKSk7Ci0gICAgfQotCi0gICAgcG5nX3JlYWRfaW1hZ2UocmVhZF9wdHIsIG91dEltYWdlSW5mby0+cm93cyk7Ci0KLSAgICBwbmdfcmVhZF9lbmQocmVhZF9wdHIsIHJlYWRfaW5mbyk7Ci0KLSAgICBOT0lTWShwcmludGYoIkltYWdlICVzOiB3PSVkLCBoPSVkLCBkPSVkLCBjb2xvcnM9JWQsIGludGVyPSVkLCBjb21wPSVkXG4iLAotICAgICAgICAgICAgICAgICBpbWFnZU5hbWUsCi0gICAgICAgICAgICAgICAgIChpbnQpb3V0SW1hZ2VJbmZvLT53aWR0aCwgKGludClvdXRJbWFnZUluZm8tPmhlaWdodCwKLSAgICAgICAgICAgICAgICAgYml0X2RlcHRoLCBjb2xvcl90eXBlLAotICAgICAgICAgICAgICAgICBpbnRlcmxhY2VfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkpOwotCi0gICAgcG5nX2dldF9JSERSKHJlYWRfcHRyLCByZWFkX2luZm8sICZvdXRJbWFnZUluZm8tPndpZHRoLAotICAgICAgICZvdXRJbWFnZUluZm8tPmhlaWdodCwgJmJpdF9kZXB0aCwgJmNvbG9yX3R5cGUsCi0gICAgICAgJmludGVybGFjZV90eXBlLCAmY29tcHJlc3Npb25fdHlwZSwgTlVMTCk7Ci19Ci0KLSNkZWZpbmUgQ09MT1JfVFJBTlNQQVJFTlQgMAotI2RlZmluZSBDT0xPUl9XSElURSAweEZGRkZGRkZGCi0jZGVmaW5lIENPTE9SX1RJQ0sgIDB4RkYwMDAwMDAKLSNkZWZpbmUgQ09MT1JfTEFZT1VUX0JPVU5EU19USUNLIDB4RkYwMDAwRkYKLQotZW51bSB7Ci0gICAgVElDS19UWVBFX05PTkUsCi0gICAgVElDS19UWVBFX1RJQ0ssCi0gICAgVElDS19UWVBFX0xBWU9VVF9CT1VORFMsCi0gICAgVElDS19UWVBFX0JPVEgKLX07Ci0KLXN0YXRpYyBpbnQgdGlja190eXBlKHBuZ19ieXRlcCBwLCBib29sIHRyYW5zcGFyZW50LCBjb25zdCBjaGFyKiogb3V0RXJyb3IpCi17Ci0gICAgcG5nX3VpbnRfMzIgY29sb3IgPSBwWzBdIHwgKHBbMV0gPDwgOCkgfCAocFsyXSA8PCAxNikgfCAocFszXSA8PCAyNCk7Ci0KLSAgICBpZiAodHJhbnNwYXJlbnQpIHsKLSAgICAgICAgaWYgKHBbM10gPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIFRJQ0tfVFlQRV9OT05FOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjb2xvciA9PSBDT0xPUl9MQVlPVVRfQk9VTkRTX1RJQ0spIHsKLSAgICAgICAgICAgIHJldHVybiBUSUNLX1RZUEVfTEFZT1VUX0JPVU5EUzsKLSAgICAgICAgfQotICAgICAgICBpZiAoY29sb3IgPT0gQ09MT1JfVElDSykgewotICAgICAgICAgICAgcmV0dXJuIFRJQ0tfVFlQRV9USUNLOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRXJyb3IgY2FzZXMKLSAgICAgICAgaWYgKHBbM10gIT0gMHhmZikgewotICAgICAgICAgICAgKm91dEVycm9yID0gIkZyYW1lIHBpeGVscyBtdXN0IGJlIGVpdGhlciBzb2xpZCBvciB0cmFuc3BhcmVudCAobm90IGludGVybWVkaWF0ZSBhbHBoYXMpIjsKLSAgICAgICAgICAgIHJldHVybiBUSUNLX1RZUEVfTk9ORTsKLSAgICAgICAgfQotICAgICAgICBpZiAocFswXSAhPSAwIHx8IHBbMV0gIT0gMCB8fCBwWzJdICE9IDApIHsKLSAgICAgICAgICAgICpvdXRFcnJvciA9ICJUaWNrcyBpbiB0cmFuc3BhcmVudCBmcmFtZSBtdXN0IGJlIGJsYWNrIG9yIHJlZCI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFRJQ0tfVFlQRV9USUNLOwotICAgIH0KLQotICAgIGlmIChwWzNdICE9IDB4RkYpIHsKLSAgICAgICAgKm91dEVycm9yID0gIldoaXRlIGZyYW1lIG11c3QgYmUgYSBzb2xpZCBjb2xvciAobm8gYWxwaGEpIjsKLSAgICB9Ci0gICAgaWYgKGNvbG9yID09IENPTE9SX1dISVRFKSB7Ci0gICAgICAgIHJldHVybiBUSUNLX1RZUEVfTk9ORTsKLSAgICB9Ci0gICAgaWYgKGNvbG9yID09IENPTE9SX1RJQ0spIHsKLSAgICAgICAgcmV0dXJuIFRJQ0tfVFlQRV9USUNLOwotICAgIH0KLSAgICBpZiAoY29sb3IgPT0gQ09MT1JfTEFZT1VUX0JPVU5EU19USUNLKSB7Ci0gICAgICAgIHJldHVybiBUSUNLX1RZUEVfTEFZT1VUX0JPVU5EUzsKLSAgICB9Ci0KLSAgICBpZiAocFswXSAhPSAwIHx8IHBbMV0gIT0gMCB8fCBwWzJdICE9IDApIHsKLSAgICAgICAgKm91dEVycm9yID0gIlRpY2tzIGluIHdoaXRlIGZyYW1lIG11c3QgYmUgYmxhY2sgb3IgcmVkIjsKLSAgICAgICAgcmV0dXJuIFRJQ0tfVFlQRV9OT05FOwotICAgIH0KLSAgICByZXR1cm4gVElDS19UWVBFX1RJQ0s7Ci19Ci0KLWVudW0gewotICAgIFRJQ0tfU1RBUlQsCi0gICAgVElDS19JTlNJREVfMSwKLSAgICBUSUNLX09VVFNJREVfMQotfTsKLQotc3RhdGljIHN0YXR1c190IGdldF9ob3Jpem9udGFsX3RpY2tzKAotICAgICAgICBwbmdfYnl0ZXAgcm93LCBpbnQgd2lkdGgsIGJvb2wgdHJhbnNwYXJlbnQsIGJvb2wgcmVxdWlyZWQsCi0gICAgICAgIGludDMyX3QqIG91dExlZnQsIGludDMyX3QqIG91dFJpZ2h0LCBjb25zdCBjaGFyKiogb3V0RXJyb3IsCi0gICAgICAgIHVpbnQ4X3QqIG91dERpdnMsIGJvb2wgbXVsdGlwbGVBbGxvd2VkKQotewotICAgIGludCBpOwotICAgICpvdXRMZWZ0ID0gKm91dFJpZ2h0ID0gLTE7Ci0gICAgaW50IHN0YXRlID0gVElDS19TVEFSVDsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0KLSAgICBmb3IgKGk9MTsgaTx3aWR0aC0xOyBpKyspIHsKLSAgICAgICAgaWYgKFRJQ0tfVFlQRV9USUNLID09IHRpY2tfdHlwZShyb3craSo0LCB0cmFuc3BhcmVudCwgb3V0RXJyb3IpKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUgPT0gVElDS19TVEFSVCB8fAotICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBUSUNLX09VVFNJREVfMSAmJiBtdWx0aXBsZUFsbG93ZWQpKSB7Ci0gICAgICAgICAgICAgICAgKm91dExlZnQgPSBpLTE7Ci0gICAgICAgICAgICAgICAgKm91dFJpZ2h0ID0gd2lkdGgtMjsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKG91dERpdnMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAqb3V0RGl2cyArPSAyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzdGF0ZSA9IFRJQ0tfSU5TSURFXzE7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IFRJQ0tfT1VUU0lERV8xKSB7Ci0gICAgICAgICAgICAgICAgKm91dEVycm9yID0gIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBtYXJrZWQgcmVnaW9uIGFsb25nIGVkZ2UiOwotICAgICAgICAgICAgICAgICpvdXRMZWZ0ID0gaTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgqb3V0RXJyb3IgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKHN0YXRlID09IFRJQ0tfSU5TSURFXzEpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBkaXYuICBNb3ZlIG9uIHRvIHRoZSBuZXh0LgotICAgICAgICAgICAgICAgICpvdXRSaWdodCA9IGktMTsKLSAgICAgICAgICAgICAgICBvdXRSaWdodCArPSAyOwotICAgICAgICAgICAgICAgIG91dExlZnQgKz0gMjsKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IFRJQ0tfT1VUU0lERV8xOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKm91dExlZnQgPSBpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZWQgJiYgIWZvdW5kKSB7Ci0gICAgICAgICpvdXRFcnJvciA9ICJObyBtYXJrZWQgcmVnaW9uIGZvdW5kIGFsb25nIGVkZ2UiOwotICAgICAgICAqb3V0TGVmdCA9IC0xOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyBzdGF0dXNfdCBnZXRfdmVydGljYWxfdGlja3MoCi0gICAgICAgIHBuZ19ieXRlcHAgcm93cywgaW50IG9mZnNldCwgaW50IGhlaWdodCwgYm9vbCB0cmFuc3BhcmVudCwgYm9vbCByZXF1aXJlZCwKLSAgICAgICAgaW50MzJfdCogb3V0VG9wLCBpbnQzMl90KiBvdXRCb3R0b20sIGNvbnN0IGNoYXIqKiBvdXRFcnJvciwKLSAgICAgICAgdWludDhfdCogb3V0RGl2cywgYm9vbCBtdWx0aXBsZUFsbG93ZWQpCi17Ci0gICAgaW50IGk7Ci0gICAgKm91dFRvcCA9ICpvdXRCb3R0b20gPSAtMTsKLSAgICBpbnQgc3RhdGUgPSBUSUNLX1NUQVJUOwotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLQotICAgIGZvciAoaT0xOyBpPGhlaWdodC0xOyBpKyspIHsKLSAgICAgICAgaWYgKFRJQ0tfVFlQRV9USUNLID09IHRpY2tfdHlwZShyb3dzW2ldK29mZnNldCwgdHJhbnNwYXJlbnQsIG91dEVycm9yKSkgewotICAgICAgICAgICAgaWYgKHN0YXRlID09IFRJQ0tfU1RBUlQgfHwKLSAgICAgICAgICAgICAgICAoc3RhdGUgPT0gVElDS19PVVRTSURFXzEgJiYgbXVsdGlwbGVBbGxvd2VkKSkgewotICAgICAgICAgICAgICAgICpvdXRUb3AgPSBpLTE7Ci0gICAgICAgICAgICAgICAgKm91dEJvdHRvbSA9IGhlaWdodC0yOwotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAob3V0RGl2cyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICpvdXREaXZzICs9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN0YXRlID0gVElDS19JTlNJREVfMTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gVElDS19PVVRTSURFXzEpIHsKLSAgICAgICAgICAgICAgICAqb3V0RXJyb3IgPSAiQ2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIG1hcmtlZCByZWdpb24gYWxvbmcgZWRnZSI7Ci0gICAgICAgICAgICAgICAgKm91dFRvcCA9IGk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKm91dEVycm9yID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBUSUNLX0lOU0lERV8xKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB3aXRoIHRoaXMgZGl2LiAgTW92ZSBvbiB0byB0aGUgbmV4dC4KLSAgICAgICAgICAgICAgICAqb3V0Qm90dG9tID0gaS0xOwotICAgICAgICAgICAgICAgIG91dFRvcCArPSAyOwotICAgICAgICAgICAgICAgIG91dEJvdHRvbSArPSAyOwotICAgICAgICAgICAgICAgIHN0YXRlID0gVElDS19PVVRTSURFXzE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqb3V0VG9wID0gaTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlcXVpcmVkICYmICFmb3VuZCkgewotICAgICAgICAqb3V0RXJyb3IgPSAiTm8gbWFya2VkIHJlZ2lvbiBmb3VuZCBhbG9uZyBlZGdlIjsKLSAgICAgICAgKm91dFRvcCA9IC0xOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyBzdGF0dXNfdCBnZXRfaG9yaXpvbnRhbF9sYXlvdXRfYm91bmRzX3RpY2tzKAotICAgICAgICBwbmdfYnl0ZXAgcm93LCBpbnQgd2lkdGgsIGJvb2wgdHJhbnNwYXJlbnQsIGJvb2wgcmVxdWlyZWQsCi0gICAgICAgIGludDMyX3QqIG91dExlZnQsIGludDMyX3QqIG91dFJpZ2h0LCBjb25zdCBjaGFyKiogb3V0RXJyb3IpCi17Ci0gICAgaW50IGk7Ci0gICAgKm91dExlZnQgPSAqb3V0UmlnaHQgPSAwOwotCi0gICAgLy8gTG9vayBmb3IgbGVmdCB0aWNrCi0gICAgaWYgKFRJQ0tfVFlQRV9MQVlPVVRfQk9VTkRTID09IHRpY2tfdHlwZShyb3cgKyA0LCB0cmFuc3BhcmVudCwgb3V0RXJyb3IpKSB7Ci0gICAgICAgIC8vIFN0YXJ0aW5nIHdpdGggYSBsYXlvdXQgcGFkZGluZyB0aWNrCi0gICAgICAgIGkgPSAxOwotICAgICAgICB3aGlsZSAoaSA8IHdpZHRoIC0gMSkgewotICAgICAgICAgICAgKCpvdXRMZWZ0KSsrOwotICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgaW50IHRpY2sgPSB0aWNrX3R5cGUocm93ICsgaSAqIDQsIHRyYW5zcGFyZW50LCBvdXRFcnJvcik7Ci0gICAgICAgICAgICBpZiAodGljayAhPSBUSUNLX1RZUEVfTEFZT1VUX0JPVU5EUykgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTG9vayBmb3IgcmlnaHQgdGljawotICAgIGlmIChUSUNLX1RZUEVfTEFZT1VUX0JPVU5EUyA9PSB0aWNrX3R5cGUocm93ICsgKHdpZHRoIC0gMikgKiA0LCB0cmFuc3BhcmVudCwgb3V0RXJyb3IpKSB7Ci0gICAgICAgIC8vIEVuZGluZyB3aXRoIGEgbGF5b3V0IHBhZGRpbmcgdGljawotICAgICAgICBpID0gd2lkdGggLSAyOwotICAgICAgICB3aGlsZSAoaSA+IDEpIHsKLSAgICAgICAgICAgICgqb3V0UmlnaHQpKys7Ci0gICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICBpbnQgdGljayA9IHRpY2tfdHlwZShyb3craSo0LCB0cmFuc3BhcmVudCwgb3V0RXJyb3IpOwotICAgICAgICAgICAgaWYgKHRpY2sgIT0gVElDS19UWVBFX0xBWU9VVF9CT1VORFMpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdGljIHN0YXR1c190IGdldF92ZXJ0aWNhbF9sYXlvdXRfYm91bmRzX3RpY2tzKAotICAgICAgICBwbmdfYnl0ZXBwIHJvd3MsIGludCBvZmZzZXQsIGludCBoZWlnaHQsIGJvb2wgdHJhbnNwYXJlbnQsIGJvb2wgcmVxdWlyZWQsCi0gICAgICAgIGludDMyX3QqIG91dFRvcCwgaW50MzJfdCogb3V0Qm90dG9tLCBjb25zdCBjaGFyKiogb3V0RXJyb3IpCi17Ci0gICAgaW50IGk7Ci0gICAgKm91dFRvcCA9ICpvdXRCb3R0b20gPSAwOwotCi0gICAgLy8gTG9vayBmb3IgdG9wIHRpY2sKLSAgICBpZiAoVElDS19UWVBFX0xBWU9VVF9CT1VORFMgPT0gdGlja190eXBlKHJvd3NbMV0gKyBvZmZzZXQsIHRyYW5zcGFyZW50LCBvdXRFcnJvcikpIHsKLSAgICAgICAgLy8gU3RhcnRpbmcgd2l0aCBhIGxheW91dCBwYWRkaW5nIHRpY2sKLSAgICAgICAgaSA9IDE7Ci0gICAgICAgIHdoaWxlIChpIDwgaGVpZ2h0IC0gMSkgewotICAgICAgICAgICAgKCpvdXRUb3ApKys7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICBpbnQgdGljayA9IHRpY2tfdHlwZShyb3dzW2ldICsgb2Zmc2V0LCB0cmFuc3BhcmVudCwgb3V0RXJyb3IpOwotICAgICAgICAgICAgaWYgKHRpY2sgIT0gVElDS19UWVBFX0xBWU9VVF9CT1VORFMpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIExvb2sgZm9yIGJvdHRvbSB0aWNrCi0gICAgaWYgKFRJQ0tfVFlQRV9MQVlPVVRfQk9VTkRTID09IHRpY2tfdHlwZShyb3dzW2hlaWdodCAtIDJdICsgb2Zmc2V0LCB0cmFuc3BhcmVudCwgb3V0RXJyb3IpKSB7Ci0gICAgICAgIC8vIEVuZGluZyB3aXRoIGEgbGF5b3V0IHBhZGRpbmcgdGljawotICAgICAgICBpID0gaGVpZ2h0IC0gMjsKLSAgICAgICAgd2hpbGUgKGkgPiAxKSB7Ci0gICAgICAgICAgICAoKm91dEJvdHRvbSkrKzsKLSAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIGludCB0aWNrID0gdGlja190eXBlKHJvd3NbaV0gKyBvZmZzZXQsIHRyYW5zcGFyZW50LCBvdXRFcnJvcik7Ci0gICAgICAgICAgICBpZiAodGljayAhPSBUSUNLX1RZUEVfTEFZT1VUX0JPVU5EUykgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0KLXN0YXRpYyB1aW50MzJfdCBnZXRfY29sb3IoCi0gICAgcG5nX2J5dGVwcCByb3dzLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKQotewotICAgIHBuZ19ieXRlcCBjb2xvciA9IHJvd3NbdG9wXSArIGxlZnQqNDsKLQotICAgIGlmIChsZWZ0ID4gcmlnaHQgfHwgdG9wID4gYm90dG9tKSB7Ci0gICAgICAgIHJldHVybiBSZXNfcG5nXzlwYXRjaDo6VFJBTlNQQVJFTlRfQ09MT1I7Ci0gICAgfQotCi0gICAgd2hpbGUgKHRvcCA8PSBib3R0b20pIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7IGkrKykgewotICAgICAgICAgICAgcG5nX2J5dGVwIHAgPSByb3dzW3RvcF0raSo0OwotICAgICAgICAgICAgaWYgKGNvbG9yWzNdID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAocFszXSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXNfcG5nXzlwYXRjaDo6Tk9fQ09MT1I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChwWzBdICE9IGNvbG9yWzBdIHx8IHBbMV0gIT0gY29sb3JbMV0KLSAgICAgICAgICAgICAgICAgICAgICAgfHwgcFsyXSAhPSBjb2xvclsyXSB8fCBwWzNdICE9IGNvbG9yWzNdKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFJlc19wbmdfOXBhdGNoOjpOT19DT0xPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB0b3ArKzsKLSAgICB9Ci0KLSAgICBpZiAoY29sb3JbM10gPT0gMCkgewotICAgICAgICByZXR1cm4gUmVzX3BuZ185cGF0Y2g6OlRSQU5TUEFSRU5UX0NPTE9SOwotICAgIH0KLSAgICByZXR1cm4gKGNvbG9yWzNdPDwyNCkgfCAoY29sb3JbMF08PDE2KSB8IChjb2xvclsxXTw8OCkgfCBjb2xvclsyXTsKLX0KLQotc3RhdGljIHZvaWQgc2VsZWN0X3BhdGNoKAotICAgIGludCB3aGljaCwgaW50IGZyb250LCBpbnQgYmFjaywgaW50IHNpemUsIGludCogc3RhcnQsIGludCogZW5kKQotewotICAgIHN3aXRjaCAod2hpY2gpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgICpzdGFydCA9IDA7Ci0gICAgICAgICplbmQgPSBmcm9udC0xOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICAgICpzdGFydCA9IGZyb250OwotICAgICAgICAqZW5kID0gYmFjay0xOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgICpzdGFydCA9IGJhY2s7Ci0gICAgICAgICplbmQgPSBzaXplLTE7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHVpbnQzMl90IGdldF9jb2xvcihpbWFnZV9pbmZvKiBpbWFnZSwgaW50IGhwYXRjaCwgaW50IHZwYXRjaCkKLXsKLSAgICBpbnQgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tOwotICAgIHNlbGVjdF9wYXRjaCgKLSAgICAgICAgaHBhdGNoLCBpbWFnZS0+aW5mbzlQYXRjaC54RGl2c1swXSwgaW1hZ2UtPmluZm85UGF0Y2gueERpdnNbMV0sCi0gICAgICAgIGltYWdlLT53aWR0aCwgJmxlZnQsICZyaWdodCk7Ci0gICAgc2VsZWN0X3BhdGNoKAotICAgICAgICB2cGF0Y2gsIGltYWdlLT5pbmZvOVBhdGNoLnlEaXZzWzBdLCBpbWFnZS0+aW5mbzlQYXRjaC55RGl2c1sxXSwKLSAgICAgICAgaW1hZ2UtPmhlaWdodCwgJnRvcCwgJmJvdHRvbSk7Ci0gICAgLy9wcmludGYoIlNlbGVjdGluZyBoPSVkIHY9JWQ6ICglZCwlZCktKCVkLCVkKVxuIiwKLSAgICAvLyAgICAgICBocGF0Y2gsIHZwYXRjaCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICBjb25zdCB1aW50MzJfdCBjID0gZ2V0X2NvbG9yKGltYWdlLT5yb3dzLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIE5PSVNZKHByaW50ZigiQ29sb3IgaW4gKCVkLCVkKS0oJWQsJWQpOiAjJTA4eFxuIiwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBjKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLXN0YXRpYyBzdGF0dXNfdCBkb185cGF0Y2goY29uc3QgY2hhciogaW1hZ2VOYW1lLCBpbWFnZV9pbmZvKiBpbWFnZSkKLXsKLSAgICBpbWFnZS0+aXM5UGF0Y2ggPSB0cnVlOwotCi0gICAgaW50IFcgPSBpbWFnZS0+d2lkdGg7Ci0gICAgaW50IEggPSBpbWFnZS0+aGVpZ2h0OwotICAgIGludCBpLCBqOwotCi0gICAgaW50IG1heFNpemVYRGl2cyA9IFcgKiBzaXplb2YoaW50MzJfdCk7Ci0gICAgaW50IG1heFNpemVZRGl2cyA9IEggKiBzaXplb2YoaW50MzJfdCk7Ci0gICAgaW50MzJfdCogeERpdnMgPSBpbWFnZS0+aW5mbzlQYXRjaC54RGl2cyA9IChpbnQzMl90KikgbWFsbG9jKG1heFNpemVYRGl2cyk7Ci0gICAgaW50MzJfdCogeURpdnMgPSBpbWFnZS0+aW5mbzlQYXRjaC55RGl2cyA9IChpbnQzMl90KikgbWFsbG9jKG1heFNpemVZRGl2cyk7Ci0gICAgdWludDhfdCBudW1YRGl2cyA9IDA7Ci0gICAgdWludDhfdCBudW1ZRGl2cyA9IDA7Ci0KLSAgICBpbnQ4X3QgbnVtQ29sb3JzOwotICAgIGludCBudW1Sb3dzOwotICAgIGludCBudW1Db2xzOwotICAgIGludCB0b3A7Ci0gICAgaW50IGxlZnQ7Ci0gICAgaW50IHJpZ2h0OwotICAgIGludCBib3R0b207Ci0gICAgbWVtc2V0KHhEaXZzLCAtMSwgbWF4U2l6ZVhEaXZzKTsKLSAgICBtZW1zZXQoeURpdnMsIC0xLCBtYXhTaXplWURpdnMpOwotICAgIGltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdMZWZ0ID0gaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ1JpZ2h0ID0KLSAgICAgICAgaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ1RvcCA9IGltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdCb3R0b20gPSAtMTsKLQotICAgIGltYWdlLT5sYXlvdXRCb3VuZHNMZWZ0ID0gaW1hZ2UtPmxheW91dEJvdW5kc1JpZ2h0ID0KLSAgICAgICAgaW1hZ2UtPmxheW91dEJvdW5kc1RvcCA9IGltYWdlLT5sYXlvdXRCb3VuZHNCb3R0b20gPSAwOwotCi0gICAgcG5nX2J5dGVwIHAgPSBpbWFnZS0+cm93c1swXTsKLSAgICBib29sIHRyYW5zcGFyZW50ID0gcFszXSA9PSAwOwotICAgIGJvb2wgaGFzQ29sb3IgPSBmYWxzZTsKLQotICAgIGNvbnN0IGNoYXIqIGVycm9yTXNnID0gTlVMTDsKLSAgICBpbnQgZXJyb3JQaXhlbCA9IC0xOwotICAgIGNvbnN0IGNoYXIqIGVycm9yRWRnZSA9IE5VTEw7Ci0KLSAgICBpbnQgY29sb3JJbmRleCA9IDA7Ci0KLSAgICAvLyBWYWxpZGF0ZSBzaXplLi4uCi0gICAgaWYgKFcgPCAzIHx8IEggPCAzKSB7Ci0gICAgICAgIGVycm9yTXNnID0gIkltYWdlIG11c3QgYmUgYXQgbGVhc3QgM3gzICgxeDEgd2l0aG91dCBmcmFtZSkgcGl4ZWxzIjsKLSAgICAgICAgZ290byBnZXRvdXQ7Ci0gICAgfQotCi0gICAgLy8gVmFsaWRhdGUgZnJhbWUuLi4KLSAgICBpZiAoIXRyYW5zcGFyZW50ICYmCi0gICAgICAgIChwWzBdICE9IDB4RkYgfHwgcFsxXSAhPSAweEZGIHx8IHBbMl0gIT0gMHhGRiB8fCBwWzNdICE9IDB4RkYpKSB7Ci0gICAgICAgIGVycm9yTXNnID0gIk11c3QgaGF2ZSBvbmUtcGl4ZWwgZnJhbWUgdGhhdCBpcyBlaXRoZXIgdHJhbnNwYXJlbnQgb3Igd2hpdGUiOwotICAgICAgICBnb3RvIGdldG91dDsKLSAgICB9Ci0KLSAgICAvLyBGaW5kIGxlZnQgYW5kIHJpZ2h0IG9mIHNpemluZyBhcmVhcy4uLgotICAgIGlmIChnZXRfaG9yaXpvbnRhbF90aWNrcyhwLCBXLCB0cmFuc3BhcmVudCwgdHJ1ZSwgJnhEaXZzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeERpdnNbMV0sICZlcnJvck1zZywgJm51bVhEaXZzLCB0cnVlKSAhPSBOT19FUlJPUikgewotICAgICAgICBlcnJvclBpeGVsID0geERpdnNbMF07Ci0gICAgICAgIGVycm9yRWRnZSA9ICJ0b3AiOwotICAgICAgICBnb3RvIGdldG91dDsKLSAgICB9Ci0KLSAgICAvLyBGaW5kIHRvcCBhbmQgYm90dG9tIG9mIHNpemluZyBhcmVhcy4uLgotICAgIGlmIChnZXRfdmVydGljYWxfdGlja3MoaW1hZ2UtPnJvd3MsIDAsIEgsIHRyYW5zcGFyZW50LCB0cnVlLCAmeURpdnNbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmeURpdnNbMV0sICZlcnJvck1zZywgJm51bVlEaXZzLCB0cnVlKSAhPSBOT19FUlJPUikgewotICAgICAgICBlcnJvclBpeGVsID0geURpdnNbMF07Ci0gICAgICAgIGVycm9yRWRnZSA9ICJsZWZ0IjsKLSAgICAgICAgZ290byBnZXRvdXQ7Ci0gICAgfQotCi0gICAgLy8gQ29weSBwYXRjaCBzaXplIGRhdGEgaW50byBpbWFnZS4uLgotICAgIGltYWdlLT5pbmZvOVBhdGNoLm51bVhEaXZzID0gbnVtWERpdnM7Ci0gICAgaW1hZ2UtPmluZm85UGF0Y2gubnVtWURpdnMgPSBudW1ZRGl2czsKLQotICAgIC8vIEZpbmQgbGVmdCBhbmQgcmlnaHQgb2YgcGFkZGluZyBhcmVhLi4uCi0gICAgaWYgKGdldF9ob3Jpem9udGFsX3RpY2tzKGltYWdlLT5yb3dzW0gtMV0sIFcsIHRyYW5zcGFyZW50LCBmYWxzZSwgJmltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdMZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ1JpZ2h0LCAmZXJyb3JNc2csIE5VTEwsIGZhbHNlKSAhPSBOT19FUlJPUikgewotICAgICAgICBlcnJvclBpeGVsID0gaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ0xlZnQ7Ci0gICAgICAgIGVycm9yRWRnZSA9ICJib3R0b20iOwotICAgICAgICBnb3RvIGdldG91dDsKLSAgICB9Ci0KLSAgICAvLyBGaW5kIHRvcCBhbmQgYm90dG9tIG9mIHBhZGRpbmcgYXJlYS4uLgotICAgIGlmIChnZXRfdmVydGljYWxfdGlja3MoaW1hZ2UtPnJvd3MsIChXLTEpKjQsIEgsIHRyYW5zcGFyZW50LCBmYWxzZSwgJmltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdUb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ0JvdHRvbSwgJmVycm9yTXNnLCBOVUxMLCBmYWxzZSkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgZXJyb3JQaXhlbCA9IGltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdUb3A7Ci0gICAgICAgIGVycm9yRWRnZSA9ICJyaWdodCI7Ci0gICAgICAgIGdvdG8gZ2V0b3V0OwotICAgIH0KLQotICAgIC8vIEZpbmQgbGVmdCBhbmQgcmlnaHQgb2YgbGF5b3V0IHBhZGRpbmcuLi4KLSAgICBnZXRfaG9yaXpvbnRhbF9sYXlvdXRfYm91bmRzX3RpY2tzKGltYWdlLT5yb3dzW0gtMV0sIFcsIHRyYW5zcGFyZW50LCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW1hZ2UtPmxheW91dEJvdW5kc0xlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmltYWdlLT5sYXlvdXRCb3VuZHNSaWdodCwgJmVycm9yTXNnKTsKLQotICAgIGdldF92ZXJ0aWNhbF9sYXlvdXRfYm91bmRzX3RpY2tzKGltYWdlLT5yb3dzLCAoVy0xKSo0LCBILCB0cmFuc3BhcmVudCwgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmltYWdlLT5sYXlvdXRCb3VuZHNUb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmltYWdlLT5sYXlvdXRCb3VuZHNCb3R0b20sICZlcnJvck1zZyk7Ci0KLSAgICBpbWFnZS0+aGF2ZUxheW91dEJvdW5kcyA9IGltYWdlLT5sYXlvdXRCb3VuZHNMZWZ0ICE9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpbWFnZS0+bGF5b3V0Qm91bmRzUmlnaHQgIT0gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGltYWdlLT5sYXlvdXRCb3VuZHNUb3AgIT0gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGltYWdlLT5sYXlvdXRCb3VuZHNCb3R0b20gIT0gMDsKLQotICAgIGlmIChpbWFnZS0+aGF2ZUxheW91dEJvdW5kcykgewotICAgICAgICBOT0lTWShwcmludGYoImxheW91dEJvdW5kcz0lZCAlZCAlZCAlZFxuIiwgaW1hZ2UtPmxheW91dEJvdW5kc0xlZnQsIGltYWdlLT5sYXlvdXRCb3VuZHNUb3AsCi0gICAgICAgICAgICAgICAgaW1hZ2UtPmxheW91dEJvdW5kc1JpZ2h0LCBpbWFnZS0+bGF5b3V0Qm91bmRzQm90dG9tKSk7Ci0gICAgfQotCi0gICAgLy8gSWYgcGFkZGluZyBpcyBub3QgeWV0IHNwZWNpZmllZCwgdGFrZSB2YWx1ZXMgZnJvbSBzaXplLgotICAgIGlmIChpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nTGVmdCA8IDApIHsKLSAgICAgICAgaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ0xlZnQgPSB4RGl2c1swXTsKLSAgICAgICAgaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ1JpZ2h0ID0gVyAtIDIgLSB4RGl2c1sxXTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBBZGp1c3QgdmFsdWUgdG8gYmUgY29ycmVjdCEKLSAgICAgICAgaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ1JpZ2h0ID0gVyAtIDIgLSBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nUmlnaHQ7Ci0gICAgfQotICAgIGlmIChpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nVG9wIDwgMCkgewotICAgICAgICBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nVG9wID0geURpdnNbMF07Ci0gICAgICAgIGltYWdlLT5pbmZvOVBhdGNoLnBhZGRpbmdCb3R0b20gPSBIIC0gMiAtIHlEaXZzWzFdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEFkanVzdCB2YWx1ZSB0byBiZSBjb3JyZWN0IQotICAgICAgICBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nQm90dG9tID0gSCAtIDIgLSBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nQm90dG9tOwotICAgIH0KLQotICAgIE5PSVNZKHByaW50ZigiU2l6ZSB0aWNrcyBmb3IgJXM6IHgwPSVkLCB4MT0lZCwgeTA9JWQsIHkxPSVkXG4iLCBpbWFnZU5hbWUsCi0gICAgICAgICAgICAgICAgIGltYWdlLT5pbmZvOVBhdGNoLnhEaXZzWzBdLCBpbWFnZS0+aW5mbzlQYXRjaC54RGl2c1sxXSwKLSAgICAgICAgICAgICAgICAgaW1hZ2UtPmluZm85UGF0Y2gueURpdnNbMF0sIGltYWdlLT5pbmZvOVBhdGNoLnlEaXZzWzFdKSk7Ci0gICAgTk9JU1kocHJpbnRmKCJwYWRkaW5nIHRpY2tzIGZvciAlczogbD0lZCwgcj0lZCwgdD0lZCwgYj0lZFxuIiwgaW1hZ2VOYW1lLAotICAgICAgICAgICAgICAgICBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nTGVmdCwgaW1hZ2UtPmluZm85UGF0Y2gucGFkZGluZ1JpZ2h0LAotICAgICAgICAgICAgICAgICBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nVG9wLCBpbWFnZS0+aW5mbzlQYXRjaC5wYWRkaW5nQm90dG9tKSk7Ci0KLSAgICAvLyBSZW1vdmUgZnJhbWUgZnJvbSBpbWFnZS4KLSAgICBpbWFnZS0+cm93cyA9IChwbmdfYnl0ZXBwKW1hbGxvYygoSC0yKSAqIHNpemVvZihwbmdfYnl0ZXApKTsKLSAgICBmb3IgKGk9MDsgaTwoSC0yKTsgaSsrKSB7Ci0gICAgICAgIGltYWdlLT5yb3dzW2ldID0gaW1hZ2UtPmFsbG9jUm93c1tpKzFdOwotICAgICAgICBtZW1tb3ZlKGltYWdlLT5yb3dzW2ldLCBpbWFnZS0+cm93c1tpXSs0LCAoVy0yKSo0KTsKLSAgICB9Ci0gICAgaW1hZ2UtPndpZHRoIC09IDI7Ci0gICAgVyA9IGltYWdlLT53aWR0aDsKLSAgICBpbWFnZS0+aGVpZ2h0IC09IDI7Ci0gICAgSCA9IGltYWdlLT5oZWlnaHQ7Ci0KLSAgICAvLyBGaWd1cmUgb3V0IHRoZSBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucyBpbiB0aGUgTi1wYXRjaAotICAgIG51bUNvbHMgPSBudW1YRGl2cyArIDE7Ci0gICAgaWYgKHhEaXZzWzBdID09IDApIHsgIC8vIENvbHVtbiAxIGlzIHN0cmVjaGFibGUKLSAgICAgICAgbnVtQ29scy0tOwotICAgIH0KLSAgICBpZiAoeERpdnNbbnVtWERpdnMgLSAxXSA9PSBXKSB7Ci0gICAgICAgIG51bUNvbHMtLTsKLSAgICB9Ci0gICAgbnVtUm93cyA9IG51bVlEaXZzICsgMTsKLSAgICBpZiAoeURpdnNbMF0gPT0gMCkgeyAgLy8gUm93IDEgaXMgc3RyZWNoYWJsZQotICAgICAgICBudW1Sb3dzLS07Ci0gICAgfQotICAgIGlmICh5RGl2c1tudW1ZRGl2cyAtIDFdID09IEgpIHsKLSAgICAgICAgbnVtUm93cy0tOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW1vdW50IG9mIHJvd3MgYW5kIGNvbHVtbnMgd2lsbCBmaXQgaW4gdGhlIG51bWJlciBvZgotICAgIC8vIGNvbG9ycyB3ZSBjYW4gdXNlIGluIHRoZSA5LXBhdGNoIGZvcm1hdC4KLSAgICBpZiAobnVtUm93cyAqIG51bUNvbHMgPiAweDdGKSB7Ci0gICAgICAgIGVycm9yTXNnID0gIlRvbyBtYW55IHJvd3MgYW5kIGNvbHVtbnMgaW4gOS1wYXRjaCBwZXJpbWV0ZXIiOwotICAgICAgICBnb3RvIGdldG91dDsKLSAgICB9Ci0KLSAgICBudW1Db2xvcnMgPSBudW1Sb3dzICogbnVtQ29sczsKLSAgICBpbWFnZS0+aW5mbzlQYXRjaC5udW1Db2xvcnMgPSBudW1Db2xvcnM7Ci0gICAgaW1hZ2UtPmluZm85UGF0Y2guY29sb3JzID0gKHVpbnQzMl90KiltYWxsb2MobnVtQ29sb3JzICogc2l6ZW9mKHVpbnQzMl90KSk7Ci0KLSAgICAvLyBGaWxsIGluIGNvbG9yIGluZm9ybWF0aW9uIGZvciBlYWNoIHBhdGNoLgotCi0gICAgdWludDMyX3QgYzsKLSAgICB0b3AgPSAwOwotCi0gICAgLy8gVGhlIGZpcnN0IHJvdyBhbHdheXMgc3RhcnRzIHdpdGggdGhlIHRvcCBiZWluZyBhdCB5PTAgYW5kIHRoZSBib3R0b20KLSAgICAvLyBiZWluZyBlaXRoZXIgeURpdnNbMV0gKGlmIHlEaXZzWzBdPTApIG9mIHlEaXZzWzBdLiAgSW4gdGhlIGZvcm1lciBjYXNlCi0gICAgLy8gdGhlIGZpcnN0IHJvdyBpcyBzdHJldGNoYWJsZSBhbG9uZyB0aGUgWSBheGlzLCBvdGhlcndpc2UgaXQgaXMgZml4ZWQuCi0gICAgLy8gVGhlIGxhc3Qgcm93IGFsd2F5cyBlbmRzIHdpdGggdGhlIGJvdHRvbSBiZWluZyBiaXRtYXAuaGVpZ2h0IGFuZCB0aGUgdG9wCi0gICAgLy8gYmVpbmcgZWl0aGVyIHlEaXZzW251bVlEaXZzLTJdIChpZiB5RGl2c1tudW1ZRGl2cy0xXT1iaXRtYXAuaGVpZ2h0KSBvcgotICAgIC8vIHlEaXZzW251bVlEaXZzLTFdLiBJbiB0aGUgZm9ybWVyIGNhc2UgdGhlIGxhc3Qgcm93IGlzIHN0cmV0Y2hhYmxlIGFsb25nCi0gICAgLy8gdGhlIFkgYXhpcywgb3RoZXJ3aXNlIGl0IGlzIGZpeGVkLgotICAgIC8vCi0gICAgLy8gVGhlIGZpcnN0IGFuZCBsYXN0IGNvbHVtbnMgYXJlIHNpbWlsYXJseSB0cmVhdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgWAotICAgIC8vIGF4aXMuCi0gICAgLy8KLSAgICAvLyBUaGUgYWJvdmUgaXMgdG8gaGVscCBleHBsYWluIHNvbWUgb2YgdGhlIHNwZWNpYWwgY2FzaW5nIHRoYXQgZ29lcyBvbiB0aGUKLSAgICAvLyBjb2RlIGJlbG93LgotCi0gICAgLy8gVGhlIGluaXRpYWwgeURpdiBhbmQgd2hldGhlciB0aGUgZmlyc3Qgcm93IGlzIGNvbnNpZGVyZWQgc3RyZXRjaGFibGUgb3IKLSAgICAvLyBub3QgZGVwZW5kcyBvbiB3aGV0aGVyIHlEaXZbMF0gd2FzIHplcm8gb3Igbm90LgotICAgIGZvciAoaiA9ICh5RGl2c1swXSA9PSAwID8gMSA6IDApOwotICAgICAgICAgIGogPD0gbnVtWURpdnMgJiYgdG9wIDwgSDsKLSAgICAgICAgICBqKyspIHsKLSAgICAgICAgaWYgKGogPT0gbnVtWURpdnMpIHsKLSAgICAgICAgICAgIGJvdHRvbSA9IEg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBib3R0b20gPSB5RGl2c1tqXTsKLSAgICAgICAgfQotICAgICAgICBsZWZ0ID0gMDsKLSAgICAgICAgLy8gVGhlIGluaXRpYWwgeERpdiBhbmQgd2hldGhlciB0aGUgZmlyc3QgY29sdW1uIGlzIGNvbnNpZGVyZWQKLSAgICAgICAgLy8gc3RyZXRjaGFibGUgb3Igbm90IGRlcGVuZHMgb24gd2hldGhlciB4RGl2WzBdIHdhcyB6ZXJvIG9yIG5vdC4KLSAgICAgICAgZm9yIChpID0geERpdnNbMF0gPT0gMCA/IDEgOiAwOwotICAgICAgICAgICAgICBpIDw9IG51bVhEaXZzICYmIGxlZnQgPCBXOwotICAgICAgICAgICAgICBpKyspIHsKLSAgICAgICAgICAgIGlmIChpID09IG51bVhEaXZzKSB7Ci0gICAgICAgICAgICAgICAgcmlnaHQgPSBXOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByaWdodCA9IHhEaXZzW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYyA9IGdldF9jb2xvcihpbWFnZS0+cm93cywgbGVmdCwgdG9wLCByaWdodCAtIDEsIGJvdHRvbSAtIDEpOwotICAgICAgICAgICAgaW1hZ2UtPmluZm85UGF0Y2guY29sb3JzW2NvbG9ySW5kZXgrK10gPSBjOwotICAgICAgICAgICAgTk9JU1koaWYgKGMgIT0gUmVzX3BuZ185cGF0Y2g6Ok5PX0NPTE9SKSBoYXNDb2xvciA9IHRydWUpOwotICAgICAgICAgICAgbGVmdCA9IHJpZ2h0OwotICAgICAgICB9Ci0gICAgICAgIHRvcCA9IGJvdHRvbTsKLSAgICB9Ci0KLSAgICBhc3NlcnQoY29sb3JJbmRleCA9PSBudW1Db2xvcnMpOwotCi0gICAgZm9yIChpPTA7IGk8bnVtQ29sb3JzOyBpKyspIHsKLSAgICAgICAgaWYgKGhhc0NvbG9yKSB7Ci0gICAgICAgICAgICBpZiAoaSA9PSAwKSBwcmludGYoIkNvbG9ycyBpbiAlczpcbiAiLCBpbWFnZU5hbWUpOwotICAgICAgICAgICAgcHJpbnRmKCIgIyUwOHgiLCBpbWFnZS0+aW5mbzlQYXRjaC5jb2xvcnNbaV0pOwotICAgICAgICAgICAgaWYgKGkgPT0gbnVtQ29sb3JzIC0gMSkgcHJpbnRmKCJcbiIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW1hZ2UtPmlzOVBhdGNoID0gdHJ1ZTsKLSAgICBpbWFnZS0+aW5mbzlQYXRjaC5kZXZpY2VUb0ZpbGUoKTsKLQotZ2V0b3V0OgotICAgIGlmIChlcnJvck1zZykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICJFUlJPUjogOS1wYXRjaCBpbWFnZSAlcyBtYWxmb3JtZWQuXG4iCi0gICAgICAgICAgICAiICAgICAgICVzLlxuIiwgaW1hZ2VOYW1lLCBlcnJvck1zZyk7Ci0gICAgICAgIGlmIChlcnJvckVkZ2UgIT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKGVycm9yUGl4ZWwgPj0gMCkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAiICAgICAgIEZvdW5kIGF0IHBpeGVsICMlZCBhbG9uZyAlcyBlZGdlLlxuIiwgZXJyb3JQaXhlbCwgZXJyb3JFZGdlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICIgICAgICAgRm91bmQgYWxvbmcgJXMgZWRnZS5cbiIsIGVycm9yRWRnZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tOaW5lUGF0Y2hTZXJpYWxpemF0aW9uKFJlc19wbmdfOXBhdGNoKiBpblBhdGNoLCAgdm9pZCAqIGRhdGEpCi17Ci0gICAgaWYgKHNpemVvZih2b2lkKikgIT0gc2l6ZW9mKGludDMyX3QpKSB7Ci0gICAgICAgIC8vIGNhbid0IGRlc2VyaWFsaXplIG9uIGEgbm9uLTMyIGJpdCBzeXN0ZW0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzaXplX3QgcGF0Y2hTaXplID0gaW5QYXRjaC0+c2VyaWFsaXplZFNpemUoKTsKLSAgICB2b2lkICogbmV3RGF0YSA9IG1hbGxvYyhwYXRjaFNpemUpOwotICAgIG1lbWNweShuZXdEYXRhLCBkYXRhLCBwYXRjaFNpemUpOwotICAgIFJlc19wbmdfOXBhdGNoKiBvdXRQYXRjaCA9IGluUGF0Y2gtPmRlc2VyaWFsaXplKG5ld0RhdGEpOwotICAgIC8vIGRlc2VyaWFsaXphdGlvbiBpcyBkb25lIGluIHBsYWNlLCBzbyBvdXRQYXRjaCA9PSBuZXdEYXRhCi0gICAgYXNzZXJ0KG91dFBhdGNoID09IG5ld0RhdGEpOwotICAgIGFzc2VydChvdXRQYXRjaC0+bnVtWERpdnMgPT0gaW5QYXRjaC0+bnVtWERpdnMpOwotICAgIGFzc2VydChvdXRQYXRjaC0+bnVtWURpdnMgPT0gaW5QYXRjaC0+bnVtWURpdnMpOwotICAgIGFzc2VydChvdXRQYXRjaC0+cGFkZGluZ0xlZnQgPT0gaW5QYXRjaC0+cGFkZGluZ0xlZnQpOwotICAgIGFzc2VydChvdXRQYXRjaC0+cGFkZGluZ1JpZ2h0ID09IGluUGF0Y2gtPnBhZGRpbmdSaWdodCk7Ci0gICAgYXNzZXJ0KG91dFBhdGNoLT5wYWRkaW5nVG9wID09IGluUGF0Y2gtPnBhZGRpbmdUb3ApOwotICAgIGFzc2VydChvdXRQYXRjaC0+cGFkZGluZ0JvdHRvbSA9PSBpblBhdGNoLT5wYWRkaW5nQm90dG9tKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG91dFBhdGNoLT5udW1YRGl2czsgaSsrKSB7Ci0gICAgICAgIGFzc2VydChvdXRQYXRjaC0+eERpdnNbaV0gPT0gaW5QYXRjaC0+eERpdnNbaV0pOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG91dFBhdGNoLT5udW1ZRGl2czsgaSsrKSB7Ci0gICAgICAgIGFzc2VydChvdXRQYXRjaC0+eURpdnNbaV0gPT0gaW5QYXRjaC0+eURpdnNbaV0pOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG91dFBhdGNoLT5udW1Db2xvcnM7IGkrKykgewotICAgICAgICBhc3NlcnQob3V0UGF0Y2gtPmNvbG9yc1tpXSA9PSBpblBhdGNoLT5jb2xvcnNbaV0pOwotICAgIH0KLSAgICBmcmVlKG5ld0RhdGEpOwotfQotCi1zdGF0aWMgYm9vbCBwYXRjaF9lcXVhbHMoUmVzX3BuZ185cGF0Y2gmIHBhdGNoMSwgUmVzX3BuZ185cGF0Y2gmIHBhdGNoMikgewotICAgIGlmICghKHBhdGNoMS5udW1YRGl2cyA9PSBwYXRjaDIubnVtWERpdnMgJiYKLSAgICAgICAgICBwYXRjaDEubnVtWURpdnMgPT0gcGF0Y2gyLm51bVlEaXZzICYmCi0gICAgICAgICAgcGF0Y2gxLm51bUNvbG9ycyA9PSBwYXRjaDIubnVtQ29sb3JzICYmCi0gICAgICAgICAgcGF0Y2gxLnBhZGRpbmdMZWZ0ID09IHBhdGNoMi5wYWRkaW5nTGVmdCAmJgotICAgICAgICAgIHBhdGNoMS5wYWRkaW5nUmlnaHQgPT0gcGF0Y2gyLnBhZGRpbmdSaWdodCAmJgotICAgICAgICAgIHBhdGNoMS5wYWRkaW5nVG9wID09IHBhdGNoMi5wYWRkaW5nVG9wICYmCi0gICAgICAgICAgcGF0Y2gxLnBhZGRpbmdCb3R0b20gPT0gcGF0Y2gyLnBhZGRpbmdCb3R0b20pKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0Y2gxLm51bUNvbG9yczsgaSsrKSB7Ci0gICAgICAgIGlmIChwYXRjaDEuY29sb3JzW2ldICE9IHBhdGNoMi5jb2xvcnNbaV0pIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhdGNoMS5udW1YRGl2czsgaSsrKSB7Ci0gICAgICAgIGlmIChwYXRjaDEueERpdnNbaV0gIT0gcGF0Y2gyLnhEaXZzW2ldKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRjaDEubnVtWURpdnM7IGkrKykgewotICAgICAgICBpZiAocGF0Y2gxLnlEaXZzW2ldICE9IHBhdGNoMi55RGl2c1tpXSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBkdW1wX2ltYWdlKGludCB3LCBpbnQgaCwgcG5nX2J5dGVwcCByb3dzLCBpbnQgY29sb3JfdHlwZSkKLXsKLSAgICBpbnQgaSwgaiwgcnIsIGdnLCBiYiwgYWE7Ci0KLSAgICBpbnQgYnBwOwotICAgIGlmIChjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1BBTEVUVEUgfHwgY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZKSB7Ci0gICAgICAgIGJwcCA9IDE7Ci0gICAgfSBlbHNlIGlmIChjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVlfQUxQSEEpIHsKLSAgICAgICAgYnBwID0gMjsKLSAgICB9IGVsc2UgaWYgKGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUkdCIHx8IGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUkdCX0FMUEhBKSB7Ci0gICAgICAgIC8vIFdlIHVzZSBhIHBhZGRpbmcgYnl0ZSBldmVuIHdoZW4gdGhlcmUgaXMgbm8gYWxwaGEKLSAgICAgICAgYnBwID0gNDsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmludGYoIlVua25vd24gY29sb3IgdHlwZSAlZC5cbiIsIGNvbG9yX3R5cGUpOwotICAgIH0KLQotICAgIGZvciAoaiA9IDA7IGogPCBoOyBqKyspIHsKLSAgICAgICAgcG5nX2J5dGVwIHJvdyA9IHJvd3Nbal07Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCB3OyBpKyspIHsKLSAgICAgICAgICAgIHJyID0gcm93WzBdOwotICAgICAgICAgICAgZ2cgPSByb3dbMV07Ci0gICAgICAgICAgICBiYiA9IHJvd1syXTsKLSAgICAgICAgICAgIGFhID0gcm93WzNdOwotICAgICAgICAgICAgcm93ICs9IGJwcDsKLQotICAgICAgICAgICAgaWYgKGkgPT0gMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiUm93ICVkOiIsIGopOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3dpdGNoIChicHApIHsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBwcmludGYoIiAoJWQpIiwgcnIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIHByaW50ZigiICglZCAlZCIsIHJyLCBnZyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgKCVkICVkICVkKSIsIHJyLCBnZywgYmIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgIHByaW50ZigiICglZCAlZCAlZCAlZCkiLCByciwgZ2csIGJiLCBhYSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaSA9PSAodyAtIDEpKSB7Ci0gICAgICAgICAgICAgICAgTk9JU1kocHJpbnRmKCJcbiIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotI2RlZmluZSBNQVgoYSxiKSAoKGEpPihiKT8oYSk6KGIpKQotI2RlZmluZSBBQlMoYSkgICAoKGEpPDA/LShhKTooYSkpCi0KLXN0YXRpYyB2b2lkIGFuYWx5emVfaW1hZ2UoY29uc3QgY2hhciAqaW1hZ2VOYW1lLCBpbWFnZV9pbmZvICZpbWFnZUluZm8sIGludCBncmF5c2NhbGVUb2xlcmFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19jb2xvcnAgcmdiUGFsZXR0ZSwgcG5nX2J5dGVwIGFscGhhUGFsZXR0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwYWxldHRlRW50cmllcywgYm9vbCAqaGFzVHJhbnNwYXJlbmN5LCBpbnQgKmNvbG9yVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGVwcCBvdXRSb3dzKQotewotICAgIGludCB3ID0gaW1hZ2VJbmZvLndpZHRoOwotICAgIGludCBoID0gaW1hZ2VJbmZvLmhlaWdodDsKLSAgICBpbnQgaSwgaiwgcnIsIGdnLCBiYiwgYWEsIGlkeDsKLSAgICB1aW50MzJfdCBjb2xvcnNbMjU2XSwgY29sOwotICAgIGludCBudW1fY29sb3JzID0gMDsKLSAgICBpbnQgbWF4R3JheURldmlhdGlvbiA9IDA7Ci0KLSAgICBib29sIGlzT3BhcXVlID0gdHJ1ZTsKLSAgICBib29sIGlzUGFsZXR0ZSA9IHRydWU7Ci0gICAgYm9vbCBpc0dyYXlzY2FsZSA9IHRydWU7Ci0KLSAgICAvLyBTY2FuIHRoZSBlbnRpcmUgaW1hZ2UgYW5kIGRldGVybWluZSBpZjoKLSAgICAvLyAxLiBFdmVyeSBwaXhlbCBoYXMgUiA9PSBHID09IEIgKGdyYXlzY2FsZSkKLSAgICAvLyAyLiBFdmVyeSBwaXhlbCBoYXMgQSA9PSAyNTUgKG9wYXF1ZSkKLSAgICAvLyAzLiBUaGVyZSBhcmUgbm8gbW9yZSB0aGFuIDI1NiBkaXN0aW5jdCBSR0JBIGNvbG9ycwotCi0gICAgLy8gTk9JU1kocHJpbnRmKCJJbml0aWFsIGltYWdlIGRhdGE6XG4iKSk7Ci0gICAgLy8gZHVtcF9pbWFnZSh3LCBoLCBpbWFnZUluZm8ucm93cywgUE5HX0NPTE9SX1RZUEVfUkdCX0FMUEhBKTsKLQotICAgIGZvciAoaiA9IDA7IGogPCBoOyBqKyspIHsKLSAgICAgICAgcG5nX2J5dGVwIHJvdyA9IGltYWdlSW5mby5yb3dzW2pdOwotICAgICAgICBwbmdfYnl0ZXAgb3V0ID0gb3V0Um93c1tqXTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHc7IGkrKykgewotICAgICAgICAgICAgcnIgPSAqcm93Kys7Ci0gICAgICAgICAgICBnZyA9ICpyb3crKzsKLSAgICAgICAgICAgIGJiID0gKnJvdysrOwotICAgICAgICAgICAgYWEgPSAqcm93Kys7Ci0KLSAgICAgICAgICAgIGludCBvZGV2ID0gbWF4R3JheURldmlhdGlvbjsKLSAgICAgICAgICAgIG1heEdyYXlEZXZpYXRpb24gPSBNQVgoQUJTKHJyIC0gZ2cpLCBtYXhHcmF5RGV2aWF0aW9uKTsKLSAgICAgICAgICAgIG1heEdyYXlEZXZpYXRpb24gPSBNQVgoQUJTKGdnIC0gYmIpLCBtYXhHcmF5RGV2aWF0aW9uKTsKLSAgICAgICAgICAgIG1heEdyYXlEZXZpYXRpb24gPSBNQVgoQUJTKGJiIC0gcnIpLCBtYXhHcmF5RGV2aWF0aW9uKTsKLSAgICAgICAgICAgIGlmIChtYXhHcmF5RGV2aWF0aW9uID4gb2RldikgewotICAgICAgICAgICAgICAgIE5PSVNZKHByaW50ZigiTmV3IG1heCBkZXYuID0gJWQgYXQgcGl4ZWwgKCVkLCAlZCkgPSAoJWQgJWQgJWQgJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhHcmF5RGV2aWF0aW9uLCBpLCBqLCByciwgZ2csIGJiLCBhYSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDaGVjayBpZiBpbWFnZSBpcyByZWFsbHkgZ3JheXNjYWxlCi0gICAgICAgICAgICBpZiAoaXNHcmF5c2NhbGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocnIgIT0gZ2cgfHwgcnIgIT0gYmIpIHsKLSAgICAgICAgICAgICAgICAgICAgIE5PSVNZKHByaW50ZigiRm91bmQgYSBub24tZ3JheSBwaXhlbCBhdCAlZCwgJWQgPSAoJWQgJWQgJWQgJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIGosIHJyLCBnZywgYmIsIGFhKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlzR3JheXNjYWxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDaGVjayBpZiBpbWFnZSBpcyByZWFsbHkgb3BhcXVlCi0gICAgICAgICAgICBpZiAoaXNPcGFxdWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWEgIT0gMHhmZikgewotICAgICAgICAgICAgICAgICAgICBOT0lTWShwcmludGYoIkZvdW5kIGEgbm9uLW9wYXF1ZSBwaXhlbCBhdCAlZCwgJWQgPSAoJWQgJWQgJWQgJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgaiwgcnIsIGdnLCBiYiwgYWEpKTsKLSAgICAgICAgICAgICAgICAgICAgaXNPcGFxdWUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIGlmIGltYWdlIGlzIHJlYWxseSA8PSAyNTYgY29sb3JzCi0gICAgICAgICAgICBpZiAoaXNQYWxldHRlKSB7Ci0gICAgICAgICAgICAgICAgY29sID0gKHVpbnQzMl90KSAoKHJyIDw8IDI0KSB8IChnZyA8PCAxNikgfCAoYmIgPDwgOCkgfCBhYSk7Ci0gICAgICAgICAgICAgICAgYm9vbCBtYXRjaCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbnVtX2NvbG9yczsgaWR4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yc1tpZHhdID09IGNvbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBXcml0ZSB0aGUgcGFsZXR0ZSBpbmRleCBmb3IgdGhlIHBpeGVsIHRvIG91dFJvd3Mgb3B0aW1pc3RpY2FsbHkKLSAgICAgICAgICAgICAgICAvLyBXZSBtaWdodCBvdmVyd3JpdGUgaXQgbGF0ZXIgaWYgd2UgZGVjaWRlIHRvIGVuY29kZSBhcyBncmF5IG9yCi0gICAgICAgICAgICAgICAgLy8gZ3JheSArIGFscGhhCi0gICAgICAgICAgICAgICAgKm91dCsrID0gaWR4OwotICAgICAgICAgICAgICAgIGlmICghbWF0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG51bV9jb2xvcnMgPT0gMjU2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOT0lTWShwcmludGYoIkZvdW5kIDI1N3RoIGNvbG9yIGF0ICVkLCAlZFxuIiwgaSwgaikpOwotICAgICAgICAgICAgICAgICAgICAgICAgaXNQYWxldHRlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbbnVtX2NvbG9ycysrXSA9IGNvbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgICpwYWxldHRlRW50cmllcyA9IDA7Ci0gICAgKmhhc1RyYW5zcGFyZW5jeSA9ICFpc09wYXF1ZTsKLSAgICBpbnQgYnBwID0gaXNPcGFxdWUgPyAzIDogNDsKLSAgICBpbnQgcGFsZXR0ZVNpemUgPSB3ICogaCArIGJwcCAqIG51bV9jb2xvcnM7Ci0KLSAgICBOT0lTWShwcmludGYoImlzR3JheXNjYWxlID0gJXNcbiIsIGlzR3JheXNjYWxlID8gInRydWUiIDogImZhbHNlIikpOwotICAgIE5PSVNZKHByaW50ZigiaXNPcGFxdWUgPSAlc1xuIiwgaXNPcGFxdWUgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7Ci0gICAgTk9JU1kocHJpbnRmKCJpc1BhbGV0dGUgPSAlc1xuIiwgaXNQYWxldHRlID8gInRydWUiIDogImZhbHNlIikpOwotICAgIE5PSVNZKHByaW50ZigiU2l6ZSB3LyBwYWxldHRlID0gJWQsIGdyYXkrYWxwaGEgPSAlZCwgcmdiKGEpID0gJWRcbiIsCi0gICAgICAgICAgICAgICAgIHBhbGV0dGVTaXplLCAyICogdyAqIGgsIGJwcCAqIHcgKiBoKSk7Ci0gICAgTk9JU1kocHJpbnRmKCJNYXggZ3JheSBkZXZpYXRpb24gPSAlZCwgdG9sZXJhbmNlID0gJWRcbiIsIG1heEdyYXlEZXZpYXRpb24sIGdyYXlzY2FsZVRvbGVyYW5jZSkpOwotCi0gICAgLy8gQ2hvb3NlIHRoZSBiZXN0IGNvbG9yIHR5cGUgZm9yIHRoZSBpbWFnZS4KLSAgICAvLyAxLiBPcGFxdWUgZ3JheSAtIHVzZSBDT0xPUl9UWVBFX0dSQVkgYXQgMSBieXRlL3BpeGVsCi0gICAgLy8gMi4gR3JheSArIGFscGhhIC0gdXNlIENPTE9SX1RZUEVfUEFMRVRURSBpZiB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IGNvbWJpbmF0aW9ucwotICAgIC8vICAgICBpcyBzdWZmaWNpZW50bHkgc21hbGwsIG90aGVyd2lzZSB1c2UgQ09MT1JfVFlQRV9HUkFZX0FMUEhBCi0gICAgLy8gMy4gUkdCKEEpIC0gdXNlIENPTE9SX1RZUEVfUEFMRVRURSBpZiB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IGNvbG9ycyBpcyBzdWZmaWNpZW50bHkKLSAgICAvLyAgICAgc21hbGwsIG90aGVyd2lzZSB1c2UgQ09MT1JfVFlQRV9SR0J7X0FMUEhBfQotICAgIGlmIChpc0dyYXlzY2FsZSkgewotICAgICAgICBpZiAoaXNPcGFxdWUpIHsKLSAgICAgICAgICAgICpjb2xvclR5cGUgPSBQTkdfQ09MT1JfVFlQRV9HUkFZOyAvLyAxIGJ5dGUvcGl4ZWwKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFVzZSBhIHNpbXBsZSBoZXVyaXN0aWMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdXNpbmcgYSBwYWxldHRlIHdpbGwKLSAgICAgICAgICAgIC8vIHNhdmUgc3BhY2UgdmVyc3VzIHVzaW5nIGdyYXkgKyBhbHBoYSBmb3IgZWFjaCBwaXhlbC4KLSAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCBjaHVuayBvdmVyaGVhZCwgZmlsdGVyaW5nLCBMWgotICAgICAgICAgICAgLy8gY29tcHJlc3Npb24sIGV0Yy4KLSAgICAgICAgICAgIGlmIChpc1BhbGV0dGUgJiYgKHBhbGV0dGVTaXplIDwgMiAqIHcgKiBoKSkgewotICAgICAgICAgICAgICAgICpjb2xvclR5cGUgPSBQTkdfQ09MT1JfVFlQRV9QQUxFVFRFOyAvLyAxIGJ5dGUvcGl4ZWwgKyA0IGJ5dGVzL2NvbG9yCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICpjb2xvclR5cGUgPSBQTkdfQ09MT1JfVFlQRV9HUkFZX0FMUEhBOyAvLyAyIGJ5dGVzIHBlciBwaXhlbAotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChpc1BhbGV0dGUgJiYgKHBhbGV0dGVTaXplIDwgYnBwICogdyAqIGgpKSB7Ci0gICAgICAgICpjb2xvclR5cGUgPSBQTkdfQ09MT1JfVFlQRV9QQUxFVFRFOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtYXhHcmF5RGV2aWF0aW9uIDw9IGdyYXlzY2FsZVRvbGVyYW5jZSkgewotICAgICAgICAgICAgcHJpbnRmKCIlczogZm9yY2luZyBpbWFnZSB0byBncmF5IChtYXggZGV2aWF0aW9uID0gJWQpXG4iLCBpbWFnZU5hbWUsIG1heEdyYXlEZXZpYXRpb24pOwotICAgICAgICAgICAgKmNvbG9yVHlwZSA9IGlzT3BhcXVlID8gUE5HX0NPTE9SX1RZUEVfR1JBWSA6IFBOR19DT0xPUl9UWVBFX0dSQVlfQUxQSEE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqY29sb3JUeXBlID0gaXNPcGFxdWUgPyBQTkdfQ09MT1JfVFlQRV9SR0IgOiBQTkdfQ09MT1JfVFlQRV9SR0JfQUxQSEE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQZXJmb3JtIHBvc3Rwcm9jZXNzaW5nIG9mIHRoZSBpbWFnZSBvciBwYWxldHRlIGRhdGEgYmFzZWQgb24gdGhlIGZpbmFsCi0gICAgLy8gY29sb3IgdHlwZSBjaG9zZW4KLQotICAgIGlmICgqY29sb3JUeXBlID09IFBOR19DT0xPUl9UWVBFX1BBTEVUVEUpIHsKLSAgICAgICAgLy8gQ3JlYXRlIHNlcGFyYXRlIFJHQiBhbmQgQWxwaGEgcGFsZXR0ZXMgYW5kIHNldCB0aGUgbnVtYmVyIG9mIGNvbG9ycwotICAgICAgICAqcGFsZXR0ZUVudHJpZXMgPSBudW1fY29sb3JzOwotCi0gICAgICAgIC8vIENyZWF0ZSB0aGUgUkdCIGFuZCBhbHBoYSBwYWxldHRlcwotICAgICAgICBmb3IgKGludCBpZHggPSAwOyBpZHggPCBudW1fY29sb3JzOyBpZHgrKykgewotICAgICAgICAgICAgY29sID0gY29sb3JzW2lkeF07Ci0gICAgICAgICAgICByZ2JQYWxldHRlW2lkeF0ucmVkICAgPSAocG5nX2J5dGUpICgoY29sID4+IDI0KSAmIDB4ZmYpOwotICAgICAgICAgICAgcmdiUGFsZXR0ZVtpZHhdLmdyZWVuID0gKHBuZ19ieXRlKSAoKGNvbCA+PiAxNikgJiAweGZmKTsKLSAgICAgICAgICAgIHJnYlBhbGV0dGVbaWR4XS5ibHVlICA9IChwbmdfYnl0ZSkgKChjb2wgPj4gIDgpICYgMHhmZik7Ci0gICAgICAgICAgICBhbHBoYVBhbGV0dGVbaWR4XSAgICAgPSAocG5nX2J5dGUpICAoY29sICAgICAgICAmIDB4ZmYpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgqY29sb3JUeXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVkgfHwgKmNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZX0FMUEhBKSB7Ci0gICAgICAgIC8vIElmIHRoZSBpbWFnZSBpcyBncmF5IG9yIGdyYXkgKyBhbHBoYSwgY29tcGFjdCB0aGUgcGl4ZWxzIGludG8gb3V0Um93cwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgaDsgaisrKSB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgcm93ID0gaW1hZ2VJbmZvLnJvd3Nbal07Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgb3V0ID0gb3V0Um93c1tqXTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3OyBpKyspIHsKLSAgICAgICAgICAgICAgICByciA9ICpyb3crKzsKLSAgICAgICAgICAgICAgICBnZyA9ICpyb3crKzsKLSAgICAgICAgICAgICAgICBiYiA9ICpyb3crKzsKLSAgICAgICAgICAgICAgICBhYSA9ICpyb3crKzsKLQotICAgICAgICAgICAgICAgIGlmIChpc0dyYXlzY2FsZSkgewotICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSBycjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAocG5nX2J5dGUpIChyciAqIDAuMjEyNmYgKyBnZyAqIDAuNzE1MmYgKyBiYiAqIDAuMDcyMmYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWlzT3BhcXVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICpvdXQrKyA9IGFhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi0KLXN0YXRpYyB2b2lkIHdyaXRlX3BuZyhjb25zdCBjaGFyKiBpbWFnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgcG5nX3N0cnVjdHAgd3JpdGVfcHRyLCBwbmdfaW5mb3Agd3JpdGVfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICBpbWFnZV9pbmZvJiBpbWFnZUluZm8sIGludCBncmF5c2NhbGVUb2xlcmFuY2UpCi17Ci0gICAgYm9vbCBvcHRpbWl6ZSA9IHRydWU7Ci0gICAgcG5nX3VpbnRfMzIgd2lkdGgsIGhlaWdodDsKLSAgICBpbnQgY29sb3JfdHlwZTsKLSAgICBpbnQgYml0X2RlcHRoLCBpbnRlcmxhY2VfdHlwZSwgY29tcHJlc3Npb25fdHlwZTsKLSAgICBpbnQgaTsKLQotICAgIHBuZ191bmtub3duX2NodW5rIHVua25vd25zWzJdOwotICAgIHVua25vd25zWzBdLmRhdGEgPSBOVUxMOwotICAgIHVua25vd25zWzFdLmRhdGEgPSBOVUxMOwotCi0gICAgcG5nX2J5dGVwcCBvdXRSb3dzID0gKHBuZ19ieXRlcHApIG1hbGxvYygoaW50KSBpbWFnZUluZm8uaGVpZ2h0ICogc2l6ZW9mKHBuZ19ieXRlcCkpOwotICAgIGlmIChvdXRSb3dzID09IChwbmdfYnl0ZXBwKSAwKSB7Ci0gICAgICAgIHByaW50ZigiQ2FuJ3QgYWxsb2NhdGUgb3V0cHV0IGJ1ZmZlciFcbiIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgaW1hZ2VJbmZvLmhlaWdodDsgaSsrKSB7Ci0gICAgICAgIG91dFJvd3NbaV0gPSAocG5nX2J5dGVwKSBtYWxsb2MoMiAqIChpbnQpIGltYWdlSW5mby53aWR0aCk7Ci0gICAgICAgIGlmIChvdXRSb3dzW2ldID09IChwbmdfYnl0ZXApIDApIHsKLSAgICAgICAgICAgIHByaW50ZigiQ2FuJ3QgYWxsb2NhdGUgb3V0cHV0IGJ1ZmZlciFcbiIpOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHBuZ19zZXRfY29tcHJlc3Npb25fbGV2ZWwod3JpdGVfcHRyLCBaX0JFU1RfQ09NUFJFU1NJT04pOwotCi0gICAgTk9JU1kocHJpbnRmKCJXcml0aW5nIGltYWdlICVzOiB3ID0gJWQsIGggPSAlZFxuIiwgaW1hZ2VOYW1lLAotICAgICAgICAgIChpbnQpIGltYWdlSW5mby53aWR0aCwgKGludCkgaW1hZ2VJbmZvLmhlaWdodCkpOwotCi0gICAgcG5nX2NvbG9yIHJnYlBhbGV0dGVbMjU2XTsKLSAgICBwbmdfYnl0ZSBhbHBoYVBhbGV0dGVbMjU2XTsKLSAgICBib29sIGhhc1RyYW5zcGFyZW5jeTsKLSAgICBpbnQgcGFsZXR0ZUVudHJpZXM7Ci0KLSAgICBhbmFseXplX2ltYWdlKGltYWdlTmFtZSwgaW1hZ2VJbmZvLCBncmF5c2NhbGVUb2xlcmFuY2UsIHJnYlBhbGV0dGUsIGFscGhhUGFsZXR0ZSwKLSAgICAgICAgICAgICAgICAgICZwYWxldHRlRW50cmllcywgJmhhc1RyYW5zcGFyZW5jeSwgJmNvbG9yX3R5cGUsIG91dFJvd3MpOwotCi0gICAgLy8gSWYgdGhlIGltYWdlIGlzIGEgOS1wYXRjaCwgd2UgbmVlZCB0byBwcmVzZXJ2ZSBpdCBhcyBhIEFSR0IgZmlsZSB0byBtYWtlCi0gICAgLy8gc3VyZSB0aGUgcGl4ZWxzIHdpbGwgbm90IGJlIHByZS1kaXRoZXJlZC9jbGFtcGVkIHVudGlsIHdlIGRlY2lkZSB0aGV5IGFyZQotICAgIGlmIChpbWFnZUluZm8uaXM5UGF0Y2ggJiYgKGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUkdCIHx8Ci0gICAgICAgICAgICBjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVkgfHwgY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9QQUxFVFRFKSkgewotICAgICAgICBjb2xvcl90eXBlID0gUE5HX0NPTE9SX1RZUEVfUkdCX0FMUEhBOwotICAgIH0KLQotICAgIHN3aXRjaCAoY29sb3JfdHlwZSkgewotICAgIGNhc2UgUE5HX0NPTE9SX1RZUEVfUEFMRVRURToKLSAgICAgICAgTk9JU1kocHJpbnRmKCJJbWFnZSAlcyBoYXMgJWQgY29sb3JzJXMsIHVzaW5nIFBOR19DT0xPUl9UWVBFX1BBTEVUVEVcbiIsCi0gICAgICAgICAgICAgICAgICAgICBpbWFnZU5hbWUsIHBhbGV0dGVFbnRyaWVzLAotICAgICAgICAgICAgICAgICAgICAgaGFzVHJhbnNwYXJlbmN5ID8gIiAod2l0aCBhbHBoYSkiIDogIiIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQTkdfQ09MT1JfVFlQRV9HUkFZOgotICAgICAgICBOT0lTWShwcmludGYoIkltYWdlICVzIGlzIG9wYXF1ZSBncmF5LCB1c2luZyBQTkdfQ09MT1JfVFlQRV9HUkFZXG4iLCBpbWFnZU5hbWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQTkdfQ09MT1JfVFlQRV9HUkFZX0FMUEhBOgotICAgICAgICBOT0lTWShwcmludGYoIkltYWdlICVzIGlzIGdyYXkgKyBhbHBoYSwgdXNpbmcgUE5HX0NPTE9SX1RZUEVfR1JBWV9BTFBIQVxuIiwgaW1hZ2VOYW1lKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUE5HX0NPTE9SX1RZUEVfUkdCOgotICAgICAgICBOT0lTWShwcmludGYoIkltYWdlICVzIGlzIG9wYXF1ZSBSR0IsIHVzaW5nIFBOR19DT0xPUl9UWVBFX1JHQlxuIiwgaW1hZ2VOYW1lKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUE5HX0NPTE9SX1RZUEVfUkdCX0FMUEhBOgotICAgICAgICBOT0lTWShwcmludGYoIkltYWdlICVzIGlzIFJHQiArIGFscGhhLCB1c2luZyBQTkdfQ09MT1JfVFlQRV9SR0JfQUxQSEFcbiIsIGltYWdlTmFtZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBwbmdfc2V0X0lIRFIod3JpdGVfcHRyLCB3cml0ZV9pbmZvLCBpbWFnZUluZm8ud2lkdGgsIGltYWdlSW5mby5oZWlnaHQsCi0gICAgICAgICAgICAgICAgIDgsIGNvbG9yX3R5cGUsIFBOR19JTlRFUkxBQ0VfTk9ORSwKLSAgICAgICAgICAgICAgICAgUE5HX0NPTVBSRVNTSU9OX1RZUEVfREVGQVVMVCwgUE5HX0ZJTFRFUl9UWVBFX0RFRkFVTFQpOwotCi0gICAgaWYgKGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUEFMRVRURSkgewotICAgICAgICBwbmdfc2V0X1BMVEUod3JpdGVfcHRyLCB3cml0ZV9pbmZvLCByZ2JQYWxldHRlLCBwYWxldHRlRW50cmllcyk7Ci0gICAgICAgIGlmIChoYXNUcmFuc3BhcmVuY3kpIHsKLSAgICAgICAgICAgIHBuZ19zZXRfdFJOUyh3cml0ZV9wdHIsIHdyaXRlX2luZm8sIGFscGhhUGFsZXR0ZSwgcGFsZXR0ZUVudHJpZXMsIChwbmdfY29sb3JfMTZwKSAwKTsKLSAgICAgICAgfQotICAgICAgIHBuZ19zZXRfZmlsdGVyKHdyaXRlX3B0ciwgMCwgUE5HX05PX0ZJTFRFUlMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgcG5nX3NldF9maWx0ZXIod3JpdGVfcHRyLCAwLCBQTkdfQUxMX0ZJTFRFUlMpOwotICAgIH0KLQotICAgIGlmIChpbWFnZUluZm8uaXM5UGF0Y2gpIHsKLSAgICAgICAgaW50IGNodW5rX2NvdW50ID0gMSArIChpbWFnZUluZm8uaGF2ZUxheW91dEJvdW5kcyA/IDEgOiAwKTsKLSAgICAgICAgaW50IHBfaW5kZXggPSBpbWFnZUluZm8uaGF2ZUxheW91dEJvdW5kcyA/IDEgOiAwOwotICAgICAgICBpbnQgYl9pbmRleCA9IDA7Ci0gICAgICAgIHBuZ19ieXRlICpjaHVua19uYW1lcyA9IGltYWdlSW5mby5oYXZlTGF5b3V0Qm91bmRzCi0gICAgICAgICAgICAgICAgPyAocG5nX2J5dGUqKSJucExiXDBucFRjXDAiCi0gICAgICAgICAgICAgICAgOiAocG5nX2J5dGUqKSJucFRjIjsKLSAgICAgICAgTk9JU1kocHJpbnRmKCJBZGRpbmcgOS1wYXRjaCBpbmZvLi4uXG4iKSk7Ci0gICAgICAgIHN0cmNweSgoY2hhciopdW5rbm93bnNbcF9pbmRleF0ubmFtZSwgIm5wVGMiKTsKLSAgICAgICAgdW5rbm93bnNbcF9pbmRleF0uZGF0YSA9IChwbmdfYnl0ZSopaW1hZ2VJbmZvLmluZm85UGF0Y2guc2VyaWFsaXplKCk7Ci0gICAgICAgIHVua25vd25zW3BfaW5kZXhdLnNpemUgPSBpbWFnZUluZm8uaW5mbzlQYXRjaC5zZXJpYWxpemVkU2l6ZSgpOwotICAgICAgICAvLyBUT0RPOiByZW1vdmUgdGhlIGNoZWNrIGJlbG93IHdoZW4gZXZlcnl0aGluZyB3b3JrcwotICAgICAgICBjaGVja05pbmVQYXRjaFNlcmlhbGl6YXRpb24oJmltYWdlSW5mby5pbmZvOVBhdGNoLCB1bmtub3duc1twX2luZGV4XS5kYXRhKTsKLQotICAgICAgICBpZiAoaW1hZ2VJbmZvLmhhdmVMYXlvdXRCb3VuZHMpIHsKLSAgICAgICAgICAgIGludCBjaHVua19zaXplID0gc2l6ZW9mKHBuZ191aW50XzMyKSAqIDQ7Ci0gICAgICAgICAgICBzdHJjcHkoKGNoYXIqKXVua25vd25zW2JfaW5kZXhdLm5hbWUsICJucExiIik7Ci0gICAgICAgICAgICB1bmtub3duc1tiX2luZGV4XS5kYXRhID0gKHBuZ19ieXRlKikgY2FsbG9jKGNodW5rX3NpemUsIDEpOwotICAgICAgICAgICAgbWVtY3B5KHVua25vd25zW2JfaW5kZXhdLmRhdGEsICZpbWFnZUluZm8ubGF5b3V0Qm91bmRzTGVmdCwgY2h1bmtfc2l6ZSk7Ci0gICAgICAgICAgICB1bmtub3duc1tiX2luZGV4XS5zaXplID0gY2h1bmtfc2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2h1bmtfY291bnQ7IGkrKykgewotICAgICAgICAgICAgdW5rbm93bnNbaV0ubG9jYXRpb24gPSBQTkdfSEFWRV9QTFRFOwotICAgICAgICB9Ci0gICAgICAgIHBuZ19zZXRfa2VlcF91bmtub3duX2NodW5rcyh3cml0ZV9wdHIsIFBOR19IQU5ETEVfQ0hVTktfQUxXQVlTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfbmFtZXMsIGNodW5rX2NvdW50KTsKLSAgICAgICAgcG5nX3NldF91bmtub3duX2NodW5rcyh3cml0ZV9wdHIsIHdyaXRlX2luZm8sIHVua25vd25zLCBjaHVua19jb3VudCk7Ci0jaWYgUE5HX0xJQlBOR19WRVIgPCAxMDYwMAotICAgICAgICAvKiBEZWFsIHdpdGggdW5rbm93biBjaHVuayBsb2NhdGlvbiBidWcgaW4gMS41LnggYW5kIGVhcmxpZXIgKi8KLSAgICAgICAgcG5nX3NldF91bmtub3duX2NodW5rX2xvY2F0aW9uKHdyaXRlX3B0ciwgd3JpdGVfaW5mbywgMCwgUE5HX0hBVkVfUExURSk7Ci0gICAgICAgIGlmIChpbWFnZUluZm8uaGF2ZUxheW91dEJvdW5kcykgewotICAgICAgICAgICAgcG5nX3NldF91bmtub3duX2NodW5rX2xvY2F0aW9uKHdyaXRlX3B0ciwgd3JpdGVfaW5mbywgMSwgUE5HX0hBVkVfUExURSk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotCi0gICAgcG5nX3dyaXRlX2luZm8od3JpdGVfcHRyLCB3cml0ZV9pbmZvKTsKLQotICAgIHBuZ19ieXRlcHAgcm93czsKLSAgICBpZiAoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0IgfHwgY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0JfQUxQSEEpIHsKLSAgICAgICAgaWYgKGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUkdCKSB7Ci0gICAgICAgICAgICBwbmdfc2V0X2ZpbGxlcih3cml0ZV9wdHIsIDAsIFBOR19GSUxMRVJfQUZURVIpOwotICAgICAgICB9Ci0gICAgICAgIHJvd3MgPSBpbWFnZUluZm8ucm93czsKLSAgICB9IGVsc2UgewotICAgICAgICByb3dzID0gb3V0Um93czsKLSAgICB9Ci0gICAgcG5nX3dyaXRlX2ltYWdlKHdyaXRlX3B0ciwgcm93cyk7Ci0KLS8vICAgICBOT0lTWShwcmludGYoIkZpbmFsIGltYWdlIGRhdGE6XG4iKSk7Ci0vLyAgICAgZHVtcF9pbWFnZShpbWFnZUluZm8ud2lkdGgsIGltYWdlSW5mby5oZWlnaHQsIHJvd3MsIGNvbG9yX3R5cGUpOwotCi0gICAgcG5nX3dyaXRlX2VuZCh3cml0ZV9wdHIsIHdyaXRlX2luZm8pOwotCi0gICAgZm9yIChpID0gMDsgaSA8IChpbnQpIGltYWdlSW5mby5oZWlnaHQ7IGkrKykgewotICAgICAgICBmcmVlKG91dFJvd3NbaV0pOwotICAgIH0KLSAgICBmcmVlKG91dFJvd3MpOwotICAgIGZyZWUodW5rbm93bnNbMF0uZGF0YSk7Ci0gICAgZnJlZSh1bmtub3duc1sxXS5kYXRhKTsKLQotICAgIHBuZ19nZXRfSUhEUih3cml0ZV9wdHIsIHdyaXRlX2luZm8sICZ3aWR0aCwgJmhlaWdodCwKLSAgICAgICAmYml0X2RlcHRoLCAmY29sb3JfdHlwZSwgJmludGVybGFjZV90eXBlLAotICAgICAgICZjb21wcmVzc2lvbl90eXBlLCBOVUxMKTsKLQotICAgIE5PSVNZKHByaW50ZigiSW1hZ2Ugd3JpdHRlbjogdz0lZCwgaD0lZCwgZD0lZCwgY29sb3JzPSVkLCBpbnRlcj0lZCwgY29tcD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgKGludCl3aWR0aCwgKGludCloZWlnaHQsIGJpdF9kZXB0aCwgY29sb3JfdHlwZSwgaW50ZXJsYWNlX3R5cGUsCi0gICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGUpKTsKLX0KLQotc3RhdHVzX3QgcHJlUHJvY2Vzc0ltYWdlKGNvbnN0IEJ1bmRsZSogYnVuZGxlLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRGaWxlPiYgZmlsZSwgU3RyaW5nOCogb3V0TmV3TGVhZk5hbWUpCi17Ci0gICAgU3RyaW5nOCBleHQoZmlsZS0+Z2V0UGF0aCgpLmdldFBhdGhFeHRlbnNpb24oKSk7Ci0KLSAgICAvLyBXZSBjdXJyZW50bHkgb25seSBwcm9jZXNzIFBORyBpbWFnZXMuCi0gICAgaWYgKHN0cmNtcChleHQuc3RyaW5nKCksICIucG5nIikgIT0gMCkgewotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotCi0gICAgLy8gRXhhbXBsZSBvZiByZW5hbWluZyBhIGZpbGU6Ci0gICAgLy8qb3V0TmV3TGVhZk5hbWUgPSBmaWxlLT5nZXRQYXRoKCkuZ2V0QmFzZVBhdGgoKS5nZXRGaWxlTmFtZSgpOwotICAgIC8vb3V0TmV3TGVhZk5hbWUtPmFwcGVuZCgiLm51cG5nIik7Ci0KLSAgICBTdHJpbmc4IHByaW50YWJsZU5hbWUoZmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCkpOwotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgIHByaW50ZigiUHJvY2Vzc2luZyBpbWFnZTogJXNcbiIsIHByaW50YWJsZU5hbWUuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIHBuZ19zdHJ1Y3RwIHJlYWRfcHRyID0gTlVMTDsKLSAgICBwbmdfaW5mb3AgcmVhZF9pbmZvID0gTlVMTDsKLSAgICBGSUxFKiBmcDsKLQotICAgIGltYWdlX2luZm8gaW1hZ2VJbmZvOwotCi0gICAgcG5nX3N0cnVjdHAgd3JpdGVfcHRyID0gTlVMTDsKLSAgICBwbmdfaW5mb3Agd3JpdGVfaW5mbyA9IE5VTEw7Ci0KLSAgICBzdGF0dXNfdCBlcnJvciA9IFVOS05PV05fRVJST1I7Ci0KLSAgICBjb25zdCBzaXplX3QgbmFtZUxlbiA9IGZpbGUtPmdldFBhdGgoKS5sZW5ndGgoKTsKLQotICAgIGZwID0gZm9wZW4oZmlsZS0+Z2V0U291cmNlRmlsZSgpLnN0cmluZygpLCAicmIiKTsKLSAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogVW5hYmxlIHRvIG9wZW4gUE5HIGZpbGVcbiIsIHByaW50YWJsZU5hbWUuc3RyaW5nKCkpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgcmVhZF9wdHIgPSBwbmdfY3JlYXRlX3JlYWRfc3RydWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywgMCwgKHBuZ19lcnJvcl9wdHIpTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG5nX2Vycm9yX3B0cilOVUxMKTsKLSAgICBpZiAoIXJlYWRfcHRyKSB7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICByZWFkX2luZm8gPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KHJlYWRfcHRyKTsKLSAgICBpZiAoIXJlYWRfaW5mbykgewotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgaWYgKHNldGptcChwbmdfam1wYnVmKHJlYWRfcHRyKSkpIHsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIHBuZ19pbml0X2lvKHJlYWRfcHRyLCBmcCk7Ci0KLSAgICByZWFkX3BuZyhwcmludGFibGVOYW1lLnN0cmluZygpLCByZWFkX3B0ciwgcmVhZF9pbmZvLCAmaW1hZ2VJbmZvKTsKLQotICAgIGlmIChuYW1lTGVuID4gNikgewotICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gZmlsZS0+Z2V0UGF0aCgpLnN0cmluZygpOwotICAgICAgICBpZiAobmFtZVtuYW1lTGVuLTVdID09ICc5JyAmJiBuYW1lW25hbWVMZW4tNl0gPT0gJy4nKSB7Ci0gICAgICAgICAgICBpZiAoZG9fOXBhdGNoKHByaW50YWJsZU5hbWUuc3RyaW5nKCksICZpbWFnZUluZm8pICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgd3JpdGVfcHRyID0gcG5nX2NyZWF0ZV93cml0ZV9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJfU1RSSU5HLCAwLCAocG5nX2Vycm9yX3B0cilOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwbmdfZXJyb3JfcHRyKU5VTEwpOwotICAgIGlmICghd3JpdGVfcHRyKQotICAgIHsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIHdyaXRlX2luZm8gPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KHdyaXRlX3B0cik7Ci0gICAgaWYgKCF3cml0ZV9pbmZvKQotICAgIHsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIHBuZ19zZXRfd3JpdGVfZm4od3JpdGVfcHRyLCAodm9pZCopZmlsZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgIHBuZ193cml0ZV9hYXB0X2ZpbGUsIHBuZ19mbHVzaF9hYXB0X2ZpbGUpOwotCi0gICAgaWYgKHNldGptcChwbmdfam1wYnVmKHdyaXRlX3B0cikpKQotICAgIHsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIHdyaXRlX3BuZyhwcmludGFibGVOYW1lLnN0cmluZygpLCB3cml0ZV9wdHIsIHdyaXRlX2luZm8sIGltYWdlSW5mbywKLSAgICAgICAgICAgICAgYnVuZGxlLT5nZXRHcmF5c2NhbGVUb2xlcmFuY2UoKSk7Ci0KLSAgICBlcnJvciA9IE5PX0VSUk9SOwotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgIGZzZWVrKGZwLCAwLCBTRUVLX0VORCk7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gKHNpemVfdClmdGVsbChmcCk7Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gZmlsZS0+Z2V0U2l6ZSgpOwotICAgICAgICBmbG9hdCBmYWN0b3IgPSAoKGZsb2F0KW5ld1NpemUpL29sZFNpemU7Ci0gICAgICAgIGludCBwZXJjZW50ID0gKGludCkoZmFjdG9yKjEwMCk7Ci0gICAgICAgIHByaW50ZigiICAgIChwcm9jZXNzZWQgaW1hZ2UgJXM6ICVkJSUgc2l6ZSBvZiBzb3VyY2UpXG4iLCBwcmludGFibGVOYW1lLnN0cmluZygpLCBwZXJjZW50KTsKLSAgICB9Ci0KLWJhaWw6Ci0gICAgaWYgKHJlYWRfcHRyKSB7Ci0gICAgICAgIHBuZ19kZXN0cm95X3JlYWRfc3RydWN0KCZyZWFkX3B0ciwgJnJlYWRfaW5mbywgKHBuZ19pbmZvcHApTlVMTCk7Ci0gICAgfQotICAgIGlmIChmcCkgewotICAgICAgICBmY2xvc2UoZnApOwotICAgIH0KLSAgICBpZiAod3JpdGVfcHRyKSB7Ci0gICAgICAgIHBuZ19kZXN0cm95X3dyaXRlX3N0cnVjdCgmd3JpdGVfcHRyLCAmd3JpdGVfaW5mbyk7Ci0gICAgfQotCi0gICAgaWYgKGVycm9yICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IEZhaWx1cmUgcHJvY2Vzc2luZyBQTkcgaW1hZ2UgJXNcbiIsCi0gICAgICAgICAgICAgICAgZmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXR1c190IHByZVByb2Nlc3NJbWFnZVRvQ2FjaGUoY29uc3QgQnVuZGxlKiBidW5kbGUsIGNvbnN0IFN0cmluZzgmIHNvdXJjZSwgY29uc3QgU3RyaW5nOCYgZGVzdCkKLXsKLSAgICBwbmdfc3RydWN0cCByZWFkX3B0ciA9IE5VTEw7Ci0gICAgcG5nX2luZm9wIHJlYWRfaW5mbyA9IE5VTEw7Ci0KLSAgICBGSUxFKiBmcDsKLQotICAgIGltYWdlX2luZm8gaW1hZ2VJbmZvOwotCi0gICAgcG5nX3N0cnVjdHAgd3JpdGVfcHRyID0gTlVMTDsKLSAgICBwbmdfaW5mb3Agd3JpdGVfaW5mbyA9IE5VTEw7Ci0KLSAgICBzdGF0dXNfdCBlcnJvciA9IFVOS05PV05fRVJST1I7Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgcHJpbnRmKCJQcm9jZXNzaW5nIGltYWdlIHRvIGNhY2hlOiAlcyA9PiAlc1xuIiwgc291cmNlLnN0cmluZygpLCBkZXN0LnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgYSBmaWxlIGhhbmRsZXIgdG8gcmVhZCBmcm9tCi0gICAgZnAgPSBmb3Blbihzb3VyY2Uuc3RyaW5nKCksInJiIik7Ci0gICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBFUlJPUjogVW5hYmxlIHRvIG9wZW4gUE5HIGZpbGVcbiIsIHNvdXJjZS5zdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Ci0KLSAgICAvLyBDYWxsIGxpYnBuZyB0byBnZXQgYSBzdHJ1Y3QgdG8gcmVhZCBpbWFnZSBkYXRhIGludG8KLSAgICByZWFkX3B0ciA9IHBuZ19jcmVhdGVfcmVhZF9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJfU1RSSU5HLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICBpZiAoIXJlYWRfcHRyKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHBuZ19kZXN0cm95X3JlYWRfc3RydWN0KCZyZWFkX3B0ciwgJnJlYWRfaW5mbyxOVUxMKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIC8vIENhbGwgbGlicG5nIHRvIGdldCBhIHN0cnVjdCB0byByZWFkIGltYWdlIGluZm8gaW50bwotICAgIHJlYWRfaW5mbyA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QocmVhZF9wdHIpOwotICAgIGlmICghcmVhZF9pbmZvKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHBuZ19kZXN0cm95X3JlYWRfc3RydWN0KCZyZWFkX3B0ciwgJnJlYWRfaW5mbyxOVUxMKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIC8vIFNldCBhIGp1bXAgcG9pbnQgZm9yIGxpYnBuZyB0byBsb25nIGp1bXAgYmFjayB0byBvbiBlcnJvcgotICAgIGlmIChzZXRqbXAocG5nX2ptcGJ1ZihyZWFkX3B0cikpKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHBuZ19kZXN0cm95X3JlYWRfc3RydWN0KCZyZWFkX3B0ciwgJnJlYWRfaW5mbyxOVUxMKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIC8vIFNldCB1cCBsaWJwbmcgdG8gcmVhZCBmcm9tIG91ciBmaWxlLgotICAgIHBuZ19pbml0X2lvKHJlYWRfcHRyLGZwKTsKLQotICAgIC8vIEFjdHVhbGx5IHJlYWQgZGF0YSBmcm9tIHRoZSBmaWxlCi0gICAgcmVhZF9wbmcoc291cmNlLnN0cmluZygpLCByZWFkX3B0ciwgcmVhZF9pbmZvLCAmaW1hZ2VJbmZvKTsKLQotICAgIC8vIFdlJ3JlIGRvbmUgcmVhZGluZyBzbyB3ZSBjYW4gY2xlYW4gdXAKLSAgICAvLyBGaW5kIG9sZCBmaWxlIHNpemUgYmVmb3JlIHJlbGVhc2luZyBoYW5kbGUKLSAgICBmc2VlayhmcCwgMCwgU0VFS19FTkQpOwotICAgIHNpemVfdCBvbGRTaXplID0gKHNpemVfdClmdGVsbChmcCk7Ci0gICAgZmNsb3NlKGZwKTsKLSAgICBwbmdfZGVzdHJveV9yZWFkX3N0cnVjdCgmcmVhZF9wdHIsICZyZWFkX2luZm8sTlVMTCk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgOS1wYXRjaAotICAgIC8vIElmIHdlIGFyZSwgcHJvY2VzcyBhcHByb3ByaWF0ZWx5Ci0gICAgaWYgKHNvdXJjZS5nZXRCYXNlUGF0aCgpLmdldFBhdGhFeHRlbnNpb24oKSA9PSAiLjkiKSAgewotICAgICAgICBpZiAoZG9fOXBhdGNoKHNvdXJjZS5zdHJpbmcoKSwgJmltYWdlSW5mbykgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENhbGwgbGlicG5nIHRvIGNyZWF0ZSBhIHN0cnVjdHVyZSB0byBob2xkIHRoZSBwcm9jZXNzZWQgaW1hZ2UgZGF0YQotICAgIC8vIHRoYXQgY2FuIGJlIHdyaXR0ZW4gdG8gZGlzawotICAgIHdyaXRlX3B0ciA9IHBuZ19jcmVhdGVfd3JpdGVfc3RydWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgaWYgKCF3cml0ZV9wdHIpIHsKLSAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZ3cml0ZV9wdHIsICZ3cml0ZV9pbmZvKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIC8vIENhbGwgbGlicG5nIHRvIGNyZWF0ZSBhIHN0cnVjdHVyZSB0byBob2xkIHByb2Nlc3NlZCBpbWFnZSBpbmZvIHRoYXQgY2FuCi0gICAgLy8gYmUgd3JpdHRlbiB0byBkaXNrCi0gICAgd3JpdGVfaW5mbyA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3Qod3JpdGVfcHRyKTsKLSAgICBpZiAoIXdyaXRlX2luZm8pIHsKLSAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZ3cml0ZV9wdHIsICZ3cml0ZV9pbmZvKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIC8vIE9wZW4gdXAgb3VyIGRlc3RpbmF0aW9uIGZpbGUgZm9yIHdyaXRpbmcKLSAgICBmcCA9IGZvcGVuKGRlc3Quc3RyaW5nKCksICJ3YiIpOwotICAgIGlmICghZnApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBFUlJPUjogVW5hYmxlIHRvIG9wZW4gUE5HIGZpbGVcbiIsIGRlc3Quc3RyaW5nKCkpOwotICAgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJndyaXRlX3B0ciwgJndyaXRlX2luZm8pOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQotCi0gICAgLy8gU2V0IHVwIGxpYnBuZyB0byB3cml0ZSB0byBvdXIgZmlsZQotICAgIHBuZ19pbml0X2lvKHdyaXRlX3B0ciwgZnApOwotCi0gICAgLy8gU2V0IHVwIGEganVtcCBmb3IgbGlicG5nIHRvIGxvbmcganVtcCBiYWNrIG9uIG9uIGVycm9ycwotICAgIGlmIChzZXRqbXAocG5nX2ptcGJ1Zih3cml0ZV9wdHIpKSkgewotICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJndyaXRlX3B0ciwgJndyaXRlX2luZm8pOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQotCi0gICAgLy8gQWN0dWFsbHkgd3JpdGUgb3V0IHRvIHRoZSBuZXcgcG5nCi0gICAgd3JpdGVfcG5nKGRlc3Quc3RyaW5nKCksIHdyaXRlX3B0ciwgd3JpdGVfaW5mbywgaW1hZ2VJbmZvLAotICAgICAgICAgICAgICBidW5kbGUtPmdldEdyYXlzY2FsZVRvbGVyYW5jZSgpKTsKLQotICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAvLyBGaW5kIHRoZSBzaXplIG9mIG91ciBuZXcgZmlsZQotICAgICAgICBGSUxFKiByZWFkZXIgPSBmb3BlbihkZXN0LnN0cmluZygpLCAicmIiKTsKLSAgICAgICAgZnNlZWsocmVhZGVyLCAwLCBTRUVLX0VORCk7Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gKHNpemVfdClmdGVsbChyZWFkZXIpOwotICAgICAgICBmY2xvc2UocmVhZGVyKTsKLQotICAgICAgICBmbG9hdCBmYWN0b3IgPSAoKGZsb2F0KW5ld1NpemUpL29sZFNpemU7Ci0gICAgICAgIGludCBwZXJjZW50ID0gKGludCkoZmFjdG9yKjEwMCk7Ci0gICAgICAgIHByaW50ZigiICAocHJvY2Vzc2VkIGltYWdlIHRvIGNhY2hlIGVudHJ5ICVzOiAlZCUlIHNpemUgb2Ygc291cmNlKVxuIiwKLSAgICAgICAgICAgICAgIGRlc3Quc3RyaW5nKCksIHBlcmNlbnQpOwotICAgIH0KLQotICAgIC8vQ2xlYW4gdXAKLSAgICBmY2xvc2UoZnApOwotICAgIHBuZ19kZXN0cm95X3dyaXRlX3N0cnVjdCgmd3JpdGVfcHRyLCAmd3JpdGVfaW5mbyk7Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IHBvc3RQcm9jZXNzSW1hZ2UoY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUYWJsZSogdGFibGUsIGNvbnN0IHNwPEFhcHRGaWxlPiYgZmlsZSkKLXsKLSAgICBTdHJpbmc4IGV4dChmaWxlLT5nZXRQYXRoKCkuZ2V0UGF0aEV4dGVuc2lvbigpKTsKLQotICAgIC8vIEF0IHRoaXMgcG9pbnQsIG5vdyB0aGF0IHdlIGhhdmUgYWxsIHRoZSByZXNvdXJjZSBkYXRhLCBhbGwgd2UgbmVlZCB0bwotICAgIC8vIGRvIGlzIGNvbXBpbGUgWE1MIGZpbGVzLgotICAgIGlmIChzdHJjbXAoZXh0LnN0cmluZygpLCAiLnhtbCIpID09IDApIHsKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVYbWxGaWxlKGFzc2V0cywgZmlsZSwgdGFibGUpOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvSW1hZ2VzLmggYi90b29scy9hYXB0L0ltYWdlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWI2NTU0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvSW1hZ2VzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIEJ1aWxkIHJlc291cmNlIGZpbGVzIGZyb20gcmF3IGFzc2V0cy4KLS8vCi0KLSNpZm5kZWYgSU1BR0VTX0gKLSNkZWZpbmUgSU1BR0VTX0gKLQotI2luY2x1ZGUgIlJlc291cmNlVGFibGUuaCIKLSNpbmNsdWRlICJCdW5kbGUuaCIKLQotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+Ci0KLXVzaW5nIGFuZHJvaWQ6OlN0cmluZzg7Ci0KLXN0YXR1c190IHByZVByb2Nlc3NJbWFnZShjb25zdCBCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4mIGZpbGUsIFN0cmluZzgqIG91dE5ld0xlYWZOYW1lKTsKLQotc3RhdHVzX3QgcHJlUHJvY2Vzc0ltYWdlVG9DYWNoZShjb25zdCBCdW5kbGUqIGJ1bmRsZSwgY29uc3QgU3RyaW5nOCYgc291cmNlLCBjb25zdCBTdHJpbmc4JiBkZXN0KTsKLQotc3RhdHVzX3QgcG9zdFByb2Nlc3NJbWFnZShjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVRhYmxlKiB0YWJsZSwgY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9hYXB0L01haW4uY3BwIGIvdG9vbHMvYWFwdC9NYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc3MjI2Yi4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L01haW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjUxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gQW5kcm9pZCBBc3NldCBQYWNrYWdpbmcgVG9vbCBtYWluIGVudHJ5IHBvaW50LgotLy8KLSNpbmNsdWRlICJNYWluLmgiCi0jaW5jbHVkZSAiQnVuZGxlLmgiCi0KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDx1dGlscy90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTGlzdC5oPgotI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8Z2V0b3B0Lmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi1zdGF0aWMgY29uc3QgY2hhciogZ1Byb2dOYW1lID0gImFhcHQiOwotCi0vKgotICogV2hlbiBydW5uaW5nIHVuZGVyIEN5Z3dpbiBvbiBXaW5kb3dzLCB0aGlzIHdpbGwgY29udmVydCBzbGFzaC1iYXNlZAotICogcGF0aHMgaW50byBiYWNrLXNsYXNoLWJhc2VkIG9uZXMuIE90aGVyd2lzZSB0aGUgQXBwdEFzc2V0cyBmaWxlIGNvbXBhcmlzb25zCi0gKiBmYWlsIGxhdGVyIGFzIHRoZXkgdXNlIGJhY2stc2xhc2ggc2VwYXJhdG9ycyB1bmRlciBXaW5kb3dzLgotICoKLSAqIFRoaXMgb3BlcmF0ZXMgaW4tcGxhY2Ugb24gdGhlIHBhdGggc3RyaW5nLgotICovCi12b2lkIGNvbnZlcnRQYXRoKGNoYXIgKnBhdGgpIHsKLSAgaWYgKHBhdGggIT0gTlVMTCAmJiBPU19QQVRIX1NFUEFSQVRPUiAhPSAnLycpIHsKLSAgICBmb3IgKDsgKnBhdGg7IHBhdGgrKykgewotICAgICAgaWYgKCpwYXRoID09ICcvJykgewotICAgICAgICAqcGF0aCA9IE9TX1BBVEhfU0VQQVJBVE9SOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi0vKgotICogUHJpbnQgdXNhZ2UgaW5mby4KLSAqLwotdm9pZCB1c2FnZSh2b2lkKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiQW5kcm9pZCBBc3NldCBQYWNrYWdpbmcgVG9vbFxuXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOlxuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICIgJXMgbFtpc3RdIFstdl0gWy1hXSBmaWxlLnt6aXAsamFyLGFwa31cbiIKLSAgICAgICAgIiAgIExpc3QgY29udGVudHMgb2YgWmlwLWNvbXBhdGlibGUgYXJjaGl2ZS5cblxuIiwgZ1Byb2dOYW1lKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyBkW3VtcF0gWy0tdmFsdWVzXSBXSEFUIGZpbGUue2Fwa30gW2Fzc2V0IFthc3NldCAuLi5dXVxuIgotICAgICAgICAiICAgc3RyaW5ncyAgICAgICAgICBQcmludCB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRhYmxlIHN0cmluZyBwb29sIGluIHRoZSBBUEsuXG4iCi0gICAgICAgICIgICBiYWRnaW5nICAgICAgICAgIFByaW50IHRoZSBsYWJlbCBhbmQgaWNvbiBmb3IgdGhlIGFwcCBkZWNsYXJlZCBpbiBBUEsuXG4iCi0gICAgICAgICIgICBwZXJtaXNzaW9ucyAgICAgIFByaW50IHRoZSBwZXJtaXNzaW9ucyBmcm9tIHRoZSBBUEsuXG4iCi0gICAgICAgICIgICByZXNvdXJjZXMgICAgICAgIFByaW50IHRoZSByZXNvdXJjZSB0YWJsZSBmcm9tIHRoZSBBUEsuXG4iCi0gICAgICAgICIgICBjb25maWd1cmF0aW9ucyAgIFByaW50IHRoZSBjb25maWd1cmF0aW9ucyBpbiB0aGUgQVBLLlxuIgotICAgICAgICAiICAgeG1sdHJlZSAgICAgICAgICBQcmludCB0aGUgY29tcGlsZWQgeG1scyBpbiB0aGUgZ2l2ZW4gYXNzZXRzLlxuIgotICAgICAgICAiICAgeG1sc3RyaW5ncyAgICAgICBQcmludCB0aGUgc3RyaW5ncyBvZiB0aGUgZ2l2ZW4gY29tcGlsZWQgeG1sIGFzc2V0cy5cblxuIiwgZ1Byb2dOYW1lKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyBwW2Fja2FnZV0gWy1kXVstZl1bLW1dWy11XVstdl1bLXhdWy16XVstTSBBbmRyb2lkTWFuaWZlc3QueG1sXSBcXFxuIgotICAgICAgICAiICAgICAgICBbLTAgZXh0ZW5zaW9uIFstMCBleHRlbnNpb24gLi4uXV0gWy1nIHRvbGVyYW5jZV0gWy1qIGphcmZpbGVdIFxcXG4iCi0gICAgICAgICIgICAgICAgIFstLWRlYnVnLW1vZGVdIFstLW1pbi1zZGstdmVyc2lvbiBWQUxdIFstLXRhcmdldC1zZGstdmVyc2lvbiBWQUxdIFxcXG4iCi0gICAgICAgICIgICAgICAgIFstLWFwcC12ZXJzaW9uIFZBTF0gWy0tYXBwLXZlcnNpb24tbmFtZSBURVhUXSBbLS1jdXN0b20tcGFja2FnZSBWQUxdIFxcXG4iCi0gICAgICAgICIgICAgICAgIFstLXJlbmFtZS1tYW5pZmVzdC1wYWNrYWdlIFBBQ0tBR0VdIFxcXG4iCi0gICAgICAgICIgICAgICAgIFstLXJlbmFtZS1pbnN0cnVtZW50YXRpb24tdGFyZ2V0LXBhY2thZ2UgUEFDS0FHRV0gXFxcbiIKLSAgICAgICAgIiAgICAgICAgWy0tdXRmMTZdIFstLWF1dG8tYWRkLW92ZXJsYXldIFxcXG4iCi0gICAgICAgICIgICAgICAgIFstLW1heC1yZXMtdmVyc2lvbiBWQUxdIFxcXG4iCi0gICAgICAgICIgICAgICAgIFstSSBiYXNlLXBhY2thZ2UgWy1JIGJhc2UtcGFja2FnZSAuLi5dXSBcXFxuIgotICAgICAgICAiICAgICAgICBbLUEgYXNzZXQtc291cmNlLWRpcl0gIFstRyBjbGFzcy1saXN0LWZpbGVdIFstUCBwdWJsaWMtZGVmaW5pdGlvbnMtZmlsZV0gXFxcbiIKLSAgICAgICAgIiAgICAgICAgWy1TIHJlc291cmNlLXNvdXJjZXMgWy1TIHJlc291cmNlLXNvdXJjZXMgLi4uXV0gXFxcbiIKLSAgICAgICAgIiAgICAgICAgWy1GIGFway1maWxlXSBbLUogUi1maWxlLWRpcl0gXFxcbiIKLSAgICAgICAgIiAgICAgICAgWy0tcHJvZHVjdCBwcm9kdWN0MSxwcm9kdWN0MiwuLi5dIFxcXG4iCi0gICAgICAgICIgICAgICAgIFstYyBDT05GSUdTXSBbLS1wcmVmZXJyZWQtY29uZmlndXJhdGlvbnMgQ09ORklHU10gXFxcbiIKLSAgICAgICAgIiAgICAgICAgW3Jhdy1maWxlcy1kaXIgW3Jhdy1maWxlcy1kaXJdIC4uLl0gXFxcbiIKLSAgICAgICAgIiAgICAgICAgWy0tb3V0cHV0LXRleHQtc3ltYm9scyBESVJdXG4iCi0gICAgICAgICJcbiIKLSAgICAgICAgIiAgIFBhY2thZ2UgdGhlIGFuZHJvaWQgcmVzb3VyY2VzLiAgSXQgd2lsbCByZWFkIGFzc2V0cyBhbmQgcmVzb3VyY2VzIHRoYXQgYXJlXG4iCi0gICAgICAgICIgICBzdXBwbGllZCB3aXRoIHRoZSAtTSAtQSAtUyBvciByYXctZmlsZXMtZGlyIGFyZ3VtZW50cy4gIFRoZSAtSiAtUCAtRiBhbmQgLVJcbiIKLSAgICAgICAgIiAgIG9wdGlvbnMgY29udHJvbCB3aGljaCBmaWxlcyBhcmUgb3V0cHV0LlxuXG4iCi0gICAgICAgICwgZ1Byb2dOYW1lKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyByW2Vtb3ZlXSBbLXZdIGZpbGUue3ppcCxqYXIsYXBrfSBmaWxlMSBbZmlsZTIgLi4uXVxuIgotICAgICAgICAiICAgRGVsZXRlIHNwZWNpZmllZCBmaWxlcyBmcm9tIFppcC1jb21wYXRpYmxlIGFyY2hpdmUuXG5cbiIsCi0gICAgICAgIGdQcm9nTmFtZSk7Ci0gICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICIgJXMgYVtkZF0gWy12XSBmaWxlLnt6aXAsamFyLGFwa30gZmlsZTEgW2ZpbGUyIC4uLl1cbiIKLSAgICAgICAgIiAgIEFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gWmlwLWNvbXBhdGlibGUgYXJjaGl2ZS5cblxuIiwgZ1Byb2dOYW1lKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyBjW3J1bmNoXSBbLXZdIC1TIHJlc291cmNlLXNvdXJjZXMgLi4uIC1DIG91dHB1dC1mb2xkZXIgLi4uXG4iCi0gICAgICAgICIgICBEbyBQTkcgcHJlcHJvY2Vzc2luZyBvbiBvbmUgb3Igc2V2ZXJhbCByZXNvdXJjZSBmb2xkZXJzXG4iCi0gICAgICAgICIgICBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gdGhlIG91dHB1dCBmb2xkZXIuXG5cbiIsIGdQcm9nTmFtZSk7Ci0gICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICIgJXMgc1tpbmdsZUNydW5jaF0gWy12XSAtaSBpbnB1dC1maWxlIC1vIG91dHB1dGZpbGVcbiIKLSAgICAgICAgIiAgIERvIFBORyBwcmVwcm9jZXNzaW5nIG9uIGEgc2luZ2xlIGZpbGUuXG5cbiIsIGdQcm9nTmFtZSk7Ci0gICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICIgJXMgdltlcnNpb25dXG4iCi0gICAgICAgICIgICBQcmludCBwcm9ncmFtIHZlcnNpb24uXG5cbiIsIGdQcm9nTmFtZSk7Ci0gICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICIgTW9kaWZpZXJzOlxuIgotICAgICAgICAiICAgLWEgIHByaW50IEFuZHJvaWQtc3BlY2lmaWMgZGF0YSAocmVzb3VyY2VzLCBtYW5pZmVzdCkgd2hlbiBsaXN0aW5nXG4iCi0gICAgICAgICIgICAtYyAgc3BlY2lmeSB3aGljaCBjb25maWd1cmF0aW9ucyB0byBpbmNsdWRlLiAgVGhlIGRlZmF1bHQgaXMgYWxsXG4iCi0gICAgICAgICIgICAgICAgY29uZmlndXJhdGlvbnMuICBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciBzaG91bGQgYmUgYSBjb21tYVxuIgotICAgICAgICAiICAgICAgIHNlcGFyYXRlZCBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gdmFsdWVzLiAgTG9jYWxlcyBzaG91bGQgYmUgc3BlY2lmaWVkXG4iCi0gICAgICAgICIgICAgICAgYXMgZWl0aGVyIGEgbGFuZ3VhZ2Ugb3IgbGFuZ3VhZ2UtcmVnaW9uIHBhaXIuICBTb21lIGV4YW1wbGVzOlxuIgotICAgICAgICAiICAgICAgICAgICAgZW5cbiIKLSAgICAgICAgIiAgICAgICAgICAgIHBvcnQsZW5cbiIKLSAgICAgICAgIiAgICAgICAgICAgIHBvcnQsbGFuZCxlbl9VU1xuIgotICAgICAgICAiICAgICAgIElmIHlvdSBwdXQgdGhlIHNwZWNpYWwgbG9jYWxlLCB6el9aWiBvbiB0aGUgbGlzdCwgaXQgd2lsbCBwZXJmb3JtXG4iCi0gICAgICAgICIgICAgICAgcHNldWRvbG9jYWxpemF0aW9uIG9uIHRoZSBkZWZhdWx0IGxvY2FsZSwgbW9kaWZ5aW5nIGFsbCBvZiB0aGVcbiIKLSAgICAgICAgIiAgICAgICBzdHJpbmdzIHNvIHlvdSBjYW4gbG9vayBmb3Igc3RyaW5ncyB0aGF0IG1pc3NlZCB0aGVcbiIKLSAgICAgICAgIiAgICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbiBwcm9jZXNzLiAgRm9yIGV4YW1wbGU6XG4iCi0gICAgICAgICIgICAgICAgICAgICBwb3J0LGxhbmQsenpfWlpcbiIKLSAgICAgICAgIiAgIC1kICBvbmUgb3IgbW9yZSBkZXZpY2UgYXNzZXRzIHRvIGluY2x1ZGUsIHNlcGFyYXRlZCBieSBjb21tYXNcbiIKLSAgICAgICAgIiAgIC1mICBmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXNcbiIKLSAgICAgICAgIiAgIC1nICBzcGVjaWZ5IGEgcGl4ZWwgdG9sZXJhbmNlIHRvIGZvcmNlIGltYWdlcyB0byBncmF5c2NhbGUsIGRlZmF1bHQgMFxuIgotICAgICAgICAiICAgLWogIHNwZWNpZnkgYSBqYXIgb3IgemlwIGZpbGUgY29udGFpbmluZyBjbGFzc2VzIHRvIGluY2x1ZGVcbiIKLSAgICAgICAgIiAgIC1rICBqdW5rIHBhdGggb2YgZmlsZShzKSBhZGRlZFxuIgotICAgICAgICAiICAgLW0gIG1ha2UgcGFja2FnZSBkaXJlY3RvcmllcyB1bmRlciBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgLUpcbiIKLSNpZiAwCi0gICAgICAgICIgICAtcCAgcHNldWRvbG9jYWxpemUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvblxuIgotI2VuZGlmCi0gICAgICAgICIgICAtdSAgdXBkYXRlIGV4aXN0aW5nIHBhY2thZ2VzIChhZGQgbmV3LCByZXBsYWNlIG9sZGVyLCByZW1vdmUgZGVsZXRlZCBmaWxlcylcbiIKLSAgICAgICAgIiAgIC12ICB2ZXJib3NlIG91dHB1dFxuIgotICAgICAgICAiICAgLXggIGNyZWF0ZSBleHRlbmRpbmcgKG5vbi1hcHBsaWNhdGlvbikgcmVzb3VyY2UgSURzXG4iCi0gICAgICAgICIgICAteiAgcmVxdWlyZSBsb2NhbGl6YXRpb24gb2YgcmVzb3VyY2UgYXR0cmlidXRlcyBtYXJrZWQgd2l0aFxuIgotICAgICAgICAiICAgICAgIGxvY2FsaXphdGlvbj1cInN1Z2dlc3RlZFwiXG4iCi0gICAgICAgICIgICAtQSAgYWRkaXRpb25hbCBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gZmluZCByYXcgYXNzZXQgZmlsZXNcbiIKLSAgICAgICAgIiAgIC1HICBBIGZpbGUgdG8gb3V0cHV0IHByb2d1YXJkIG9wdGlvbnMgaW50by5cbiIKLSAgICAgICAgIiAgIC1GICBzcGVjaWZ5IHRoZSBhcGsgZmlsZSB0byBvdXRwdXRcbiIKLSAgICAgICAgIiAgIC1JICBhZGQgYW4gZXhpc3RpbmcgcGFja2FnZSB0byBiYXNlIGluY2x1ZGUgc2V0XG4iCi0gICAgICAgICIgICAtSiAgc3BlY2lmeSB3aGVyZSB0byBvdXRwdXQgUi5qYXZhIHJlc291cmNlIGNvbnN0YW50IGRlZmluaXRpb25zXG4iCi0gICAgICAgICIgICAtTSAgc3BlY2lmeSBmdWxsIHBhdGggdG8gQW5kcm9pZE1hbmlmZXN0LnhtbCB0byBpbmNsdWRlIGluIHppcFxuIgotICAgICAgICAiICAgLVAgIHNwZWNpZnkgd2hlcmUgdG8gb3V0cHV0IHB1YmxpYyByZXNvdXJjZSBkZWZpbml0aW9uc1xuIgotICAgICAgICAiICAgLVMgIGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHJlc291cmNlcy4gIE11bHRpcGxlIGRpcmVjdG9yaWVzIHdpbGwgYmUgc2Nhbm5lZFxuIgotICAgICAgICAiICAgICAgIGFuZCB0aGUgZmlyc3QgbWF0Y2ggZm91bmQgKGxlZnQgdG8gcmlnaHQpIHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuIgotICAgICAgICAiICAgLTAgIHNwZWNpZmllcyBhbiBhZGRpdGlvbmFsIGV4dGVuc2lvbiBmb3Igd2hpY2ggc3VjaCBmaWxlcyB3aWxsIG5vdFxuIgotICAgICAgICAiICAgICAgIGJlIHN0b3JlZCBjb21wcmVzc2VkIGluIHRoZSAuYXBrLiAgQW4gZW1wdHkgc3RyaW5nIG1lYW5zIHRvIG5vdFxuIgotICAgICAgICAiICAgICAgIGNvbXByZXNzIGFueSBmaWxlcyBhdCBhbGwuXG4iCi0gICAgICAgICIgICAtLWRlYnVnLW1vZGVcbiIKLSAgICAgICAgIiAgICAgICBpbnNlcnRzIGFuZHJvaWQ6ZGVidWdnYWJsZT1cInRydWVcIiBpbiB0byB0aGUgYXBwbGljYXRpb24gbm9kZSBvZiB0aGVcbiIKLSAgICAgICAgIiAgICAgICBtYW5pZmVzdCwgbWFraW5nIHRoZSBhcHBsaWNhdGlvbiBkZWJ1Z2dhYmxlIGV2ZW4gb24gcHJvZHVjdGlvbiBkZXZpY2VzLlxuIgotICAgICAgICAiICAgLS1taW4tc2RrLXZlcnNpb25cbiIKLSAgICAgICAgIiAgICAgICBpbnNlcnRzIGFuZHJvaWQ6bWluU2RrVmVyc2lvbiBpbiB0byBtYW5pZmVzdC4gIElmIHRoZSB2ZXJzaW9uIGlzIDcgb3JcbiIKLSAgICAgICAgIiAgICAgICBoaWdoZXIsIHRoZSBkZWZhdWx0IGVuY29kaW5nIGZvciByZXNvdXJjZXMgd2lsbCBiZSBpbiBVVEYtOC5cbiIKLSAgICAgICAgIiAgIC0tdGFyZ2V0LXNkay12ZXJzaW9uXG4iCi0gICAgICAgICIgICAgICAgaW5zZXJ0cyBhbmRyb2lkOnRhcmdldFNka1ZlcnNpb24gaW4gdG8gbWFuaWZlc3QuXG4iCi0gICAgICAgICIgICAtLW1heC1yZXMtdmVyc2lvblxuIgotICAgICAgICAiICAgICAgIGlnbm9yZXMgdmVyc2lvbmVkIHJlc291cmNlIGRpcmVjdG9yaWVzIGFib3ZlIHRoZSBnaXZlbiB2YWx1ZS5cbiIKLSAgICAgICAgIiAgIC0tdmFsdWVzXG4iCi0gICAgICAgICIgICAgICAgd2hlbiB1c2VkIHdpdGggXCJkdW1wIHJlc291cmNlc1wiIGFsc28gaW5jbHVkZXMgcmVzb3VyY2UgdmFsdWVzLlxuIgotICAgICAgICAiICAgLS12ZXJzaW9uLWNvZGVcbiIKLSAgICAgICAgIiAgICAgICBpbnNlcnRzIGFuZHJvaWQ6dmVyc2lvbkNvZGUgaW4gdG8gbWFuaWZlc3QuXG4iCi0gICAgICAgICIgICAtLXZlcnNpb24tbmFtZVxuIgotICAgICAgICAiICAgICAgIGluc2VydHMgYW5kcm9pZDp2ZXJzaW9uTmFtZSBpbiB0byBtYW5pZmVzdC5cbiIKLSAgICAgICAgIiAgIC0tY3VzdG9tLXBhY2thZ2VcbiIKLSAgICAgICAgIiAgICAgICBnZW5lcmF0ZXMgUi5qYXZhIGludG8gYSBkaWZmZXJlbnQgcGFja2FnZS5cbiIKLSAgICAgICAgIiAgIC0tZXh0cmEtcGFja2FnZXNcbiIKLSAgICAgICAgIiAgICAgICBnZW5lcmF0ZSBSLmphdmEgZm9yIGxpYnJhcmllcy4gU2VwYXJhdGUgbGlicmFyaWVzIHdpdGggJzonLlxuIgotICAgICAgICAiICAgLS1nZW5lcmF0ZS1kZXBlbmRlbmNpZXNcbiIKLSAgICAgICAgIiAgICAgICBnZW5lcmF0ZSBkZXBlbmRlbmN5IGZpbGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yaWVzIGZvciBSLmphdmEgYW5kIHJlc291cmNlIHBhY2thZ2VcbiIKLSAgICAgICAgIiAgIC0tYXV0by1hZGQtb3ZlcmxheVxuIgotICAgICAgICAiICAgICAgIEF1dG9tYXRpY2FsbHkgYWRkIHJlc291cmNlcyB0aGF0IGFyZSBvbmx5IGluIG92ZXJsYXlzLlxuIgotICAgICAgICAiICAgLS1wcmVmZXJyZWQtY29uZmlndXJhdGlvbnNcbiIKLSAgICAgICAgIiAgICAgICBMaWtlIHRoZSAtYyBvcHRpb24gZm9yIGZpbHRlcmluZyBvdXQgdW5uZWVkZWQgY29uZmlndXJhdGlvbnMsIGJ1dFxuIgotICAgICAgICAiICAgICAgIG9ubHkgZXhwcmVzc2VzIGEgcHJlZmVyZW5jZS4gIElmIHRoZXJlIGlzIG5vIHJlc291cmNlIGF2YWlsYWJsZSB3aXRoXG4iCi0gICAgICAgICIgICAgICAgdGhlIHByZWZlcnJlZCBjb25maWd1cmF0aW9uIHRoZW4gaXQgd2lsbCBub3QgYmUgc3RyaXBwZWQuXG4iCi0gICAgICAgICIgICAtLXJlbmFtZS1tYW5pZmVzdC1wYWNrYWdlXG4iCi0gICAgICAgICIgICAgICAgUmV3cml0ZSB0aGUgbWFuaWZlc3Qgc28gdGhhdCBpdHMgcGFja2FnZSBuYW1lIGlzIHRoZSBwYWNrYWdlIG5hbWVcbiIKLSAgICAgICAgIiAgICAgICBnaXZlbiBoZXJlLiAgUmVsYXRpdmUgY2xhc3MgbmFtZXMgKGZvciBleGFtcGxlIC5Gb28pIHdpbGwgYmVcbiIKLSAgICAgICAgIiAgICAgICBjaGFuZ2VkIHRvIGFic29sdXRlIG5hbWVzIHdpdGggdGhlIG9sZCBwYWNrYWdlIHNvIHRoYXQgdGhlIGNvZGVcbiIKLSAgICAgICAgIiAgICAgICBkb2VzIG5vdCBuZWVkIHRvIGNoYW5nZS5cbiIKLSAgICAgICAgIiAgIC0tcmVuYW1lLWluc3RydW1lbnRhdGlvbi10YXJnZXQtcGFja2FnZVxuIgotICAgICAgICAiICAgICAgIFJld3JpdGUgdGhlIG1hbmlmZXN0IHNvIHRoYXQgYWxsIG9mIGl0cyBpbnN0cnVtZW50YXRpb25cbiIKLSAgICAgICAgIiAgICAgICBjb21wb25lbnRzIHRhcmdldCB0aGUgZ2l2ZW4gcGFja2FnZS4gIFVzZWZ1bCB3aGVuIHVzZWQgaW5cbiIKLSAgICAgICAgIiAgICAgICBjb25qdW5jdGlvbiB3aXRoIC0tcmVuYW1lLW1hbmlmZXN0LXBhY2thZ2UgdG8gZml4IHRlc3RzIGFnYWluc3RcbiIKLSAgICAgICAgIiAgICAgICBhIHBhY2thZ2UgdGhhdCBoYXMgYmVlbiByZW5hbWVkLlxuIgotICAgICAgICAiICAgLS1wcm9kdWN0XG4iCi0gICAgICAgICIgICAgICAgU3BlY2lmaWVzIHdoaWNoIHZhcmlhbnQgdG8gY2hvb3NlIGZvciBzdHJpbmdzIHRoYXQgaGF2ZVxuIgotICAgICAgICAiICAgICAgIHByb2R1Y3QgdmFyaWFudHNcbiIKLSAgICAgICAgIiAgIC0tdXRmMTZcbiIKLSAgICAgICAgIiAgICAgICBjaGFuZ2VzIGRlZmF1bHQgZW5jb2RpbmcgZm9yIHJlc291cmNlcyB0byBVVEYtMTYuICBPbmx5IHVzZWZ1bCB3aGVuIEFQSVxuIgotICAgICAgICAiICAgICAgIGxldmVsIGlzIHNldCB0byA3IG9yIGhpZ2hlciB3aGVyZSB0aGUgZGVmYXVsdCBlbmNvZGluZyBpcyBVVEYtOC5cbiIKLSAgICAgICAgIiAgIC0tbm9uLWNvbnN0YW50LWlkXG4iCi0gICAgICAgICIgICAgICAgTWFrZSB0aGUgcmVzb3VyY2VzIElEIG5vbiBjb25zdGFudC4gVGhpcyBpcyByZXF1aXJlZCB0byBtYWtlIGFuIFIgamF2YSBjbGFzc1xuIgotICAgICAgICAiICAgICAgIHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgZmluYWwgdmFsdWUgYnV0IGlzIHVzZWQgdG8gbWFrZSByZXVzYWJsZSBjb21waWxlZFxuIgotICAgICAgICAiICAgICAgIGxpYnJhcmllcyB0aGF0IG5lZWQgdG8gYWNjZXNzIHJlc291cmNlcy5cbiIKLSAgICAgICAgIiAgIC0tZXJyb3Itb24tZmFpbGVkLWluc2VydFxuIgotICAgICAgICAiICAgICAgIEZvcmNlcyBhYXB0IHRvIHJldHVybiBhbiBlcnJvciBpZiBpdCBmYWlscyB0byBpbnNlcnQgdmFsdWVzIGludG8gdGhlIG1hbmlmZXN0XG4iCi0gICAgICAgICIgICAgICAgd2l0aCAtLWRlYnVnLW1vZGUsIC0tbWluLXNkay12ZXJzaW9uLCAtLXRhcmdldC1zZGstdmVyc2lvbiAtLXZlcnNpb24tY29kZVxuIgotICAgICAgICAiICAgICAgIGFuZCAtLXZlcnNpb24tbmFtZS5cbiIKLSAgICAgICAgIiAgICAgICBJbnNlcnRpb24gdHlwaWNhbGx5IGZhaWxzIGlmIHRoZSBtYW5pZmVzdCBhbHJlYWR5IGRlZmluZXMgdGhlIGF0dHJpYnV0ZS5cbiIKLSAgICAgICAgIiAgIC0tb3V0cHV0LXRleHQtc3ltYm9sc1xuIgotICAgICAgICAiICAgICAgIEdlbmVyYXRlcyBhIHRleHQgZmlsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZSBzeW1ib2xzIG9mIHRoZSBSIGNsYXNzIGluIHRoZVxuIgotICAgICAgICAiICAgICAgIHNwZWNpZmllZCBmb2xkZXIuXG4iCi0gICAgICAgICIgICAtLWlnbm9yZS1hc3NldHNcbiIKLSAgICAgICAgIiAgICAgICBBc3NldHMgdG8gYmUgaWdub3JlZC4gRGVmYXVsdCBwYXR0ZXJuIGlzOlxuIgotICAgICAgICAiICAgICAgICVzXG4iLAotICAgICAgICBnRGVmYXVsdElnbm9yZUFzc2V0cyk7Ci19Ci0KLS8qCi0gKiBEaXNwYXRjaCB0aGUgY29tbWFuZC4KLSAqLwotaW50IGhhbmRsZUNvbW1hbmQoQnVuZGxlKiBidW5kbGUpCi17Ci0gICAgLy9wcmludGYoIi0tLSBjb21tYW5kICVkICh2ZXJib3NlPSVkIGZvcmNlPSVkKTpcbiIsCi0gICAgLy8gICAgYnVuZGxlLT5nZXRDb21tYW5kKCksIGJ1bmRsZS0+Z2V0VmVyYm9zZSgpLCBidW5kbGUtPmdldEZvcmNlKCkpOwotICAgIC8vZm9yIChpbnQgaSA9IDA7IGkgPCBidW5kbGUtPmdldEZpbGVTcGVjQ291bnQoKTsgaSsrKQotICAgIC8vICAgIHByaW50ZigiICAlZDogJyVzJ1xuIiwgaSwgYnVuZGxlLT5nZXRGaWxlU3BlY0VudHJ5KGkpKTsKLQotICAgIHN3aXRjaCAoYnVuZGxlLT5nZXRDb21tYW5kKCkpIHsKLSAgICBjYXNlIGtDb21tYW5kVmVyc2lvbjogICAgICByZXR1cm4gZG9WZXJzaW9uKGJ1bmRsZSk7Ci0gICAgY2FzZSBrQ29tbWFuZExpc3Q6ICAgICAgICAgcmV0dXJuIGRvTGlzdChidW5kbGUpOwotICAgIGNhc2Uga0NvbW1hbmREdW1wOiAgICAgICAgIHJldHVybiBkb0R1bXAoYnVuZGxlKTsKLSAgICBjYXNlIGtDb21tYW5kQWRkOiAgICAgICAgICByZXR1cm4gZG9BZGQoYnVuZGxlKTsKLSAgICBjYXNlIGtDb21tYW5kUmVtb3ZlOiAgICAgICByZXR1cm4gZG9SZW1vdmUoYnVuZGxlKTsKLSAgICBjYXNlIGtDb21tYW5kUGFja2FnZTogICAgICByZXR1cm4gZG9QYWNrYWdlKGJ1bmRsZSk7Ci0gICAgY2FzZSBrQ29tbWFuZENydW5jaDogICAgICAgcmV0dXJuIGRvQ3J1bmNoKGJ1bmRsZSk7Ci0gICAgY2FzZSBrQ29tbWFuZFNpbmdsZUNydW5jaDogcmV0dXJuIGRvU2luZ2xlQ3J1bmNoKGJ1bmRsZSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogcmVxdWVzdGVkIGNvbW1hbmQgbm90IHlldCBzdXBwb3J0ZWRcbiIsIGdQcm9nTmFtZSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLX0KLQotLyoKLSAqIFBhcnNlIGFyZ3MuCi0gKi8KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiBjb25zdCBhcmd2W10pCi17Ci0gICAgY2hhciAqcHJvZyA9IGFyZ3ZbMF07Ci0gICAgQnVuZGxlIGJ1bmRsZTsKLSAgICBib29sIHdhbnRVc2FnZSA9IGZhbHNlOwotICAgIGludCByZXN1bHQgPSAxOyAgICAvLyBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIGFuIGVycm9yLgotICAgIGludCB0b2xlcmFuY2UgPSAwOwotCi0gICAgLyogZGVmYXVsdCB0byBjb21wcmVzc2lvbiAqLwotICAgIGJ1bmRsZS5zZXRDb21wcmVzc2lvbk1ldGhvZChaaXBFbnRyeTo6a0NvbXByZXNzRGVmbGF0ZWQpOwotCi0gICAgaWYgKGFyZ2MgPCAyKSB7Ci0gICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBpZiAoYXJndlsxXVswXSA9PSAndicpCi0gICAgICAgIGJ1bmRsZS5zZXRDb21tYW5kKGtDb21tYW5kVmVyc2lvbik7Ci0gICAgZWxzZSBpZiAoYXJndlsxXVswXSA9PSAnZCcpCi0gICAgICAgIGJ1bmRsZS5zZXRDb21tYW5kKGtDb21tYW5kRHVtcCk7Ci0gICAgZWxzZSBpZiAoYXJndlsxXVswXSA9PSAnbCcpCi0gICAgICAgIGJ1bmRsZS5zZXRDb21tYW5kKGtDb21tYW5kTGlzdCk7Ci0gICAgZWxzZSBpZiAoYXJndlsxXVswXSA9PSAnYScpCi0gICAgICAgIGJ1bmRsZS5zZXRDb21tYW5kKGtDb21tYW5kQWRkKTsKLSAgICBlbHNlIGlmIChhcmd2WzFdWzBdID09ICdyJykKLSAgICAgICAgYnVuZGxlLnNldENvbW1hbmQoa0NvbW1hbmRSZW1vdmUpOwotICAgIGVsc2UgaWYgKGFyZ3ZbMV1bMF0gPT0gJ3AnKQotICAgICAgICBidW5kbGUuc2V0Q29tbWFuZChrQ29tbWFuZFBhY2thZ2UpOwotICAgIGVsc2UgaWYgKGFyZ3ZbMV1bMF0gPT0gJ2MnKQotICAgICAgICBidW5kbGUuc2V0Q29tbWFuZChrQ29tbWFuZENydW5jaCk7Ci0gICAgZWxzZSBpZiAoYXJndlsxXVswXSA9PSAncycpCi0gICAgICAgIGJ1bmRsZS5zZXRDb21tYW5kKGtDb21tYW5kU2luZ2xlQ3J1bmNoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW5rbm93biBjb21tYW5kICclcydcbiIsIGFyZ3ZbMV0pOwotICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotICAgIGFyZ2MgLT0gMjsKLSAgICBhcmd2ICs9IDI7Ci0KLSAgICAvKgotICAgICAqIFB1bGwgb3V0IGZsYWdzLiAgV2Ugc3VwcG9ydCAiLWZ2IiBhbmQgIi1mIC12Ii4KLSAgICAgKi8KLSAgICB3aGlsZSAoYXJnYyAmJiBhcmd2WzBdWzBdID09ICctJykgewotICAgICAgICAvKiBmbGFnKHMpIGZvdW5kICovCi0gICAgICAgIGNvbnN0IGNoYXIqIGNwID0gYXJndlswXSArMTsKLQotICAgICAgICB3aGlsZSAoKmNwICE9ICdcMCcpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoKmNwKSB7Ci0gICAgICAgICAgICBjYXNlICd2JzoKLSAgICAgICAgICAgICAgICBidW5kbGUuc2V0VmVyYm9zZSh0cnVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ2EnOgotICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRBbmRyb2lkTGlzdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ2MnOgotICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLWMnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnVuZGxlLmFkZENvbmZpZ3VyYXRpb25zKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAgICAgICAgICAgYnVuZGxlLnNldEZvcmNlKHRydWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnZyc6Ci0gICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctZycgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0b2xlcmFuY2UgPSBhdG9pKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRHcmF5c2NhbGVUb2xlcmFuY2UodG9sZXJhbmNlKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzOiBJbWFnZXMgd2l0aCBkZXZpYXRpb24gPD0gJWQgd2lsbCBiZSBmb3JjZWQgdG8gZ3JheXNjYWxlLlxuIiwgcHJvZywgdG9sZXJhbmNlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ2snOgotICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRKdW5rUGF0aCh0cnVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ20nOgotICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRNYWtlUGFja2FnZURpcnModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWYgMAotICAgICAgICAgICAgY2FzZSAncCc6Ci0gICAgICAgICAgICAgICAgYnVuZGxlLnNldFBzZXVkb2xvY2FsaXplKHRydWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgICAgICBidW5kbGUuc2V0VXBkYXRlKHRydWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICAgICAgYnVuZGxlLnNldEV4dGVuZGluZyh0cnVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3onOgotICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRSZXF1aXJlTG9jYWxpemF0aW9uKHRydWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnaic6Ci0gICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctaicgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb252ZXJ0UGF0aChhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBidW5kbGUuYWRkSmFyRmlsZShhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ0EnOgotICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLUEnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udmVydFBhdGgoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnVuZGxlLnNldEFzc2V0U291cmNlRGlyKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnRyc6Ci0gICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctRycgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb252ZXJ0UGF0aChhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBidW5kbGUuc2V0UHJvZ3VhcmRGaWxlKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnSSc6Ci0gICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctSScgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb252ZXJ0UGF0aChhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBidW5kbGUuYWRkUGFja2FnZUluY2x1ZGUoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdGJzoKLSAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy1GJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnZlcnRQYXRoKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRPdXRwdXRBUEtGaWxlKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnSic6Ci0gICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctSicgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb252ZXJ0UGF0aChhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBidW5kbGUuc2V0UkNsYXNzRGlyKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnTSc6Ci0gICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctTScgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb252ZXJ0UGF0aChhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBidW5kbGUuc2V0QW5kcm9pZE1hbmlmZXN0RmlsZShhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ1AnOgotICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLVAnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udmVydFBhdGgoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnVuZGxlLnNldFB1YmxpY091dHB1dEZpbGUoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdTJzoKLSAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy1TJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnZlcnRQYXRoKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJ1bmRsZS5hZGRSZXNvdXJjZVNvdXJjZURpcihhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ0MnOgotICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLUMnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udmVydFBhdGgoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgYnVuZGxlLnNldENydW5jaGVkT3V0cHV0RGlyKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctaScgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb252ZXJ0UGF0aChhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBidW5kbGUuc2V0U2luZ2xlQ3J1bmNoSW5wdXRGaWxlKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnbyc6Ci0gICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctbycgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb252ZXJ0UGF0aChhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBidW5kbGUuc2V0U2luZ2xlQ3J1bmNoT3V0cHV0RmlsZShhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJzAnOgotICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLWUnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3ZbMF1bMF0gIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBidW5kbGUuYWRkTm9Db21wcmVzc0V4dGVuc2lvbihhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0Q29tcHJlc3Npb25NZXRob2QoWmlwRW50cnk6OmtDb21wcmVzc1N0b3JlZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnLSc6Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmNtcChjcCwgIi1kZWJ1Zy1tb2RlIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0RGVidWdNb2RlKHRydWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLW1pbi1zZGstdmVyc2lvbiIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctLW1pbi1zZGstdmVyc2lvbicgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnVuZGxlLnNldE1pblNka1ZlcnNpb24oYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItdGFyZ2V0LXNkay12ZXJzaW9uIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy0tdGFyZ2V0LXNkay12ZXJzaW9uJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0VGFyZ2V0U2RrVmVyc2lvbihhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjcCwgIi1tYXgtc2RrLXZlcnNpb24iKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLS1tYXgtc2RrLXZlcnNpb24nIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRNYXhTZGtWZXJzaW9uKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLW1heC1yZXMtdmVyc2lvbiIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctLW1heC1yZXMtdmVyc2lvbicgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnVuZGxlLnNldE1heFJlc1ZlcnNpb24oYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItdmVyc2lvbi1jb2RlIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy0tdmVyc2lvbi1jb2RlJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0VmVyc2lvbkNvZGUoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItdmVyc2lvbi1uYW1lIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy0tdmVyc2lvbi1uYW1lJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0VmVyc2lvbk5hbWUoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItdmFsdWVzIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0VmFsdWVzKHRydWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLWN1c3RvbS1wYWNrYWdlIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy0tY3VzdG9tLXBhY2thZ2UnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRDdXN0b21QYWNrYWdlKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLWV4dHJhLXBhY2thZ2VzIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3YrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBObyBhcmd1bWVudCBzdXBwbGllZCBmb3IgJy0tZXh0cmEtcGFja2FnZXMnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXRFeHRyYVBhY2thZ2VzKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLWdlbmVyYXRlLWRlcGVuZGVuY2llcyIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYnVuZGxlLnNldEdlbkRlcGVuZGVuY2llcyh0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjcCwgIi11dGYxNiIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYnVuZGxlLnNldFdhbnRVVEYxNih0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjcCwgIi1wcmVmZXJyZWQtY29uZmlndXJhdGlvbnMiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLS1wcmVmZXJyZWQtY29uZmlndXJhdGlvbnMnIG9wdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5hZGRQcmVmZXJyZWRDb25maWd1cmF0aW9ucyhhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjcCwgIi1yZW5hbWUtbWFuaWZlc3QtcGFja2FnZSIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctLXJlbmFtZS1tYW5pZmVzdC1wYWNrYWdlJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0TWFuaWZlc3RQYWNrYWdlTmFtZU92ZXJyaWRlKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLXJlbmFtZS1pbnN0cnVtZW50YXRpb24tdGFyZ2V0LXBhY2thZ2UiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLS1yZW5hbWUtaW5zdHJ1bWVudGF0aW9uLXRhcmdldC1wYWNrYWdlJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0SW5zdHJ1bWVudGF0aW9uUGFja2FnZU5hbWVPdmVycmlkZShhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjcCwgIi1hdXRvLWFkZC1vdmVybGF5IikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0QXV0b0FkZE92ZXJsYXkodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItZXJyb3Itb24tZmFpbGVkLWluc2VydCIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYnVuZGxlLnNldEVycm9yT25GYWlsZWRJbnNlcnQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY3AsICItb3V0cHV0LXRleHQtc3ltYm9scyIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYXJnYy0tOwotICAgICAgICAgICAgICAgICAgICBhcmd2Kys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXJnYykgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gYXJndW1lbnQgc3VwcGxpZWQgZm9yICctb3V0cHV0LXRleHQtc3ltYm9scycgb3B0aW9uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnVuZGxlLnNldE91dHB1dFRleHRTeW1ib2xzKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLXByb2R1Y3QiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLS1wcm9kdWN0JyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBidW5kbGUuc2V0UHJvZHVjdChhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjcCwgIi1ub24tY29uc3RhbnQtaWQiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5zZXROb25Db25zdGFudElkKHRydWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLW5vLWNydW5jaCIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYnVuZGxlLnNldFVzZUNydW5jaENhY2hlKHRydWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNwLCAiLWlnbm9yZS1hc3NldHMiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgYXJndisrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE5vIGFyZ3VtZW50IHN1cHBsaWVkIGZvciAnLS1pZ25vcmUtYXNzZXRzJyBvcHRpb25cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBnVXNlcklnbm9yZUFzc2V0cyA9IGFyZ3ZbMF07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW5rbm93biBvcHRpb24gJy0lcydcbiIsIGNwKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjcCArPSBzdHJsZW4oY3ApIC0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW5rbm93biBmbGFnICctJWMnXG4iLCAqY3ApOwotICAgICAgICAgICAgICAgIHdhbnRVc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjcCsrOwotICAgICAgICB9Ci0gICAgICAgIGFyZ2MtLTsKLSAgICAgICAgYXJndisrOwotICAgIH0KLQotICAgIC8qCi0gICAgICogV2UncmUgcGFzdCB0aGUgZmxhZ3MuICBUaGUgcmVzdCBhbGwgZ29lcyBzdHJhaWdodCBpbi4KLSAgICAgKi8KLSAgICBidW5kbGUuc2V0RmlsZVNwZWMoYXJndiwgYXJnYyk7Ci0KLSAgICByZXN1bHQgPSBoYW5kbGVDb21tYW5kKCZidW5kbGUpOwotCi1iYWlsOgotICAgIGlmICh3YW50VXNhZ2UpIHsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgcmVzdWx0ID0gMjsKLSAgICB9Ci0KLSAgICAvL3ByaW50ZigiLS0+IHJldHVybmluZyAlZFxuIiwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9NYWluLmggYi90b29scy9hYXB0L01haW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZiMzlhYy4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L01haW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gU29tZSBnbG9iYWwgZGVmaW5lcyB0aGF0IGRvbid0IHJlYWxseSBtZXJpdCB0aGVpciBvd24gaGVhZGVyLgotLy8KLSNpZm5kZWYgX19NQUlOX0gKLSNkZWZpbmUgX19NQUlOX0gKLQotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KLSNpbmNsdWRlIDx1dGlscy9MaXN0Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSAiQnVuZGxlLmgiCi0jaW5jbHVkZSAiQWFwdEFzc2V0cy5oIgotI2luY2x1ZGUgIlppcEZpbGUuaCIKLQotCi0vKiBCZW5jaG1hcmtpbmcgRmxhZyAqLwotLy8jZGVmaW5lIEJFTkNITUFSSyAxCi0KLSNpZiBCRU5DSE1BUksKLSAgICAjaW5jbHVkZSA8dGltZS5oPgotI2VuZGlmIC8qIEJFTkNITUFSSyAqLwotCi1leHRlcm4gaW50IGRvVmVyc2lvbihCdW5kbGUqIGJ1bmRsZSk7Ci1leHRlcm4gaW50IGRvTGlzdChCdW5kbGUqIGJ1bmRsZSk7Ci1leHRlcm4gaW50IGRvRHVtcChCdW5kbGUqIGJ1bmRsZSk7Ci1leHRlcm4gaW50IGRvQWRkKEJ1bmRsZSogYnVuZGxlKTsKLWV4dGVybiBpbnQgZG9SZW1vdmUoQnVuZGxlKiBidW5kbGUpOwotZXh0ZXJuIGludCBkb1BhY2thZ2UoQnVuZGxlKiBidW5kbGUpOwotZXh0ZXJuIGludCBkb0NydW5jaChCdW5kbGUqIGJ1bmRsZSk7Ci1leHRlcm4gaW50IGRvU2luZ2xlQ3J1bmNoKEJ1bmRsZSogYnVuZGxlKTsKLQotZXh0ZXJuIGludCBjYWxjUGVyY2VudChsb25nIHVuY29tcHJlc3NlZExlbiwgbG9uZyBjb21wcmVzc2VkTGVuKTsKLQotZXh0ZXJuIGFuZHJvaWQ6OnN0YXR1c190IHdyaXRlQVBLKEJ1bmRsZSogYnVuZGxlLAotICAgIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgY29uc3QgYW5kcm9pZDo6U3RyaW5nOCYgb3V0cHV0RmlsZSk7Ci0KLWV4dGVybiBhbmRyb2lkOjpzdGF0dXNfdCB1cGRhdGVQcmVQcm9jZXNzZWRDYWNoZShCdW5kbGUqIGJ1bmRsZSk7Ci0KLWV4dGVybiBhbmRyb2lkOjpzdGF0dXNfdCBidWlsZFJlc291cmNlcyhCdW5kbGUqIGJ1bmRsZSwKLSAgICBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzKTsKLQotZXh0ZXJuIGFuZHJvaWQ6OnN0YXR1c190IHdyaXRlUmVzb3VyY2VTeW1ib2xzKEJ1bmRsZSogYnVuZGxlLAotICAgIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsIGNvbnN0IFN0cmluZzgmIHBrZ05hbWUsIGJvb2wgaW5jbHVkZVByaXZhdGUpOwotCi1leHRlcm4gYW5kcm9pZDo6c3RhdHVzX3Qgd3JpdGVQcm9ndWFyZEZpbGUoQnVuZGxlKiBidW5kbGUsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMpOwotCi1leHRlcm4gYm9vbCBpc1ZhbGlkUmVzb3VyY2VUeXBlKGNvbnN0IFN0cmluZzgmIHR5cGUpOwotCi1zc2l6ZV90IHByb2Nlc3NBc3NldHMoQnVuZGxlKiBidW5kbGUsIFppcEZpbGUqIHppcCwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cyk7Ci0KLWV4dGVybiBzdGF0dXNfdCBmaWx0ZXJSZXNvdXJjZXMoQnVuZGxlKiBidW5kbGUsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMpOwotCi1pbnQgZHVtcFJlc291cmNlcyhCdW5kbGUqIGJ1bmRsZSk7Ci0KLVN0cmluZzggZ2V0QXR0cmlidXRlKGNvbnN0IFJlc1hNTFRyZWUmIHRyZWUsIGNvbnN0IGNoYXIqIG5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGF0dHIsIFN0cmluZzgqIG91dEVycm9yKTsKLQotc3RhdHVzX3Qgd3JpdGVEZXBlbmRlbmN5UHJlUmVxcyhCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSogZnAsIGJvb2wgaW5jbHVkZVJhdyk7Ci0jZW5kaWYgLy8gX19NQUlOX0gKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvTk9USUNFIGIvdG9vbHMvYWFwdC9OT1RJQ0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YjFlZmEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9OT1RJQ0UKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotCi0gICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLQotICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKLSAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KLQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCi0KLSAgIDEuIERlZmluaXRpb25zLgotCi0gICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAotICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCi0KLSAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5Ci0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKLSAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KLSAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCi0gICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKLSAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCi0gICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKLSAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCi0KLSAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCi0KLSAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAotICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgotICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLQotICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKLSAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKLSAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKLSAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KLQotICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKLSAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKLSAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawotICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KLQotICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAotICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQotICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucwotICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKLSAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgotICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAotICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KLQotICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKLSAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQotICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgotICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCi0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKLSAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKLSAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCi0gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAotICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKLSAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAotICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKLSAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgotCi0gICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCi0gICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KLQotICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCi0gICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKLSAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCi0KLSAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAotICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCi0gICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQotICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKLSAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKLSAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91Ci0gICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQotICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawotICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKLSAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKLSAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQotICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgotCi0gICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0Ci0gICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQotICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLSAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCi0gICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKLQotICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAotCi0gICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKLSAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKLSAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCi0gICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAotCi0gICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKLSAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0Ci0gICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCi0gICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90Ci0gICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCi0gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKLSAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCi0gICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAotICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwotICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKLSAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgotICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCi0gICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCi0gICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCi0gICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKLSAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKLSAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAotICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCi0gICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgotCi0gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCi0gICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKLSAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KLSAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKLSAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCi0gICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCi0KLSAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKLSAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKLSAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQotICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCi0KLSAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgotICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAotICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCi0gICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCi0gICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKLSAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQotICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgotCi0gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKLSAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAotICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKLSAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCi0gICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCi0gICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKLSAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKLSAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKLSAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCi0gICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCi0gICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCi0KLSAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKLSAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCi0gICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAotICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKLSAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5Ci0gICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgotICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAotICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5Ci0gICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCi0gICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KLQotICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvUGFja2FnZS5jcHAgYi90b29scy9hYXB0L1BhY2thZ2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzJkOTVjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvUGFja2FnZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MDUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBQYWNrYWdlIGFzc2V0cyBpbnRvIFppcCBmaWxlcy4KLS8vCi0jaW5jbHVkZSAiTWFpbi5oIgotI2luY2x1ZGUgIkFhcHRBc3NldHMuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVRhYmxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VGaWx0ZXIuaCIKLQotI2luY2x1ZGUgPGFuZHJvaWRmdy9taXNjLmg+Ci0KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLSNpbmNsdWRlIDx1dGlscy90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTGlzdC5oPgotI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotI2luY2x1ZGUgPHV0aWxzL21pc2MuaD4KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGRpcmVudC5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBrRXhjbHVkZUV4dGVuc2lvbiA9ICIuRVhDTFVERSI7Ci0KLS8qIHRoZXNlIGZvcm1hdHMgYXJlIGFscmVhZHkgY29tcHJlc3NlZCwgb3IgZG9uJ3QgY29tcHJlc3Mgd2VsbCAqLwotc3RhdGljIGNvbnN0IGNoYXIqIGtOb0NvbXByZXNzRXh0W10gPSB7Ci0gICAgIi5qcGciLCAiLmpwZWciLCAiLnBuZyIsICIuZ2lmIiwKLSAgICAiLndhdiIsICIubXAyIiwgIi5tcDMiLCAiLm9nZyIsICIuYWFjIiwKLSAgICAiLm1wZyIsICIubXBlZyIsICIubWlkIiwgIi5taWRpIiwgIi5zbWYiLCAiLmpldCIsCi0gICAgIi5ydHR0bCIsICIuaW15IiwgIi54bWYiLCAiLm1wNCIsICIubTRhIiwKLSAgICAiLm00diIsICIuM2dwIiwgIi4zZ3BwIiwgIi4zZzIiLCAiLjNncHAyIiwKLSAgICAiLmFtciIsICIuYXdiIiwgIi53bWEiLCAiLndtdiIKLX07Ci0KLS8qIGZ3ZCBkZWNscywgc28gSSBjYW4gd3JpdGUgdGhpcyBkb3dud2FyZCAqLwotc3NpemVfdCBwcm9jZXNzQXNzZXRzKEJ1bmRsZSogYnVuZGxlLCBaaXBGaWxlKiB6aXAsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMpOwotc3NpemVfdCBwcm9jZXNzQXNzZXRzKEJ1bmRsZSogYnVuZGxlLCBaaXBGaWxlKiB6aXAsIGNvbnN0IHNwPEFhcHREaXI+JiBkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBYXB0R3JvdXBFbnRyeSYgZ2UsIGNvbnN0IFJlc291cmNlRmlsdGVyKiBmaWx0ZXIpOwotYm9vbCBwcm9jZXNzRmlsZShCdW5kbGUqIGJ1bmRsZSwgWmlwRmlsZSogemlwLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEdyb3VwPiYgZ3JvdXAsIGNvbnN0IHNwPEFhcHRGaWxlPiYgZmlsZSk7Ci1ib29sIG9rYXlUb0NvbXByZXNzKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBTdHJpbmc4JiBwYXRoTmFtZSk7Ci1zc2l6ZV90IHByb2Nlc3NKYXJGaWxlcyhCdW5kbGUqIGJ1bmRsZSwgWmlwRmlsZSogemlwKTsKLQotLyoKLSAqIFRoZSBkaXJlY3RvcnkgaGllcmFyY2h5IGxvb2tzIGxpa2UgdGhpczoKLSAqICJvdXRwdXREaXIiIGFuZCAiYXNzZXRSb290IiBhcmUgZXhpc3RpbmcgZGlyZWN0b3JpZXMuCi0gKgotICogT24gc3VjY2VzcywgImJ1bmRsZS0+bnVtUGFja2FnZXMiIHdpbGwgYmUgdGhlIG51bWJlciBvZiBaaXAgcGFja2FnZXMKLSAqIHdlIGNyZWF0ZWQuCi0gKi8KLXN0YXR1c190IHdyaXRlQVBLKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiBvdXRwdXRGaWxlKQotewotICAgICNpZiBCRU5DSE1BUksKLSAgICBmcHJpbnRmKHN0ZG91dCwgIkJFTkNITUFSSzogU3RhcnRpbmcgQVBLIEJ1bmRsaW5nIFxuIik7Ci0gICAgbG9uZyBzdGFydEFQS1RpbWUgPSBjbG9jaygpOwotICAgICNlbmRpZiAvKiBCRU5DSE1BUksgKi8KLQotICAgIHN0YXR1c190IHJlc3VsdCA9IE5PX0VSUk9SOwotICAgIFppcEZpbGUqIHppcCA9IE5VTEw7Ci0gICAgaW50IGNvdW50OwotCi0gICAgLy9idW5kbGUtPnNldFBhY2thZ2VDb3VudCgwKTsKLQotICAgIC8qCi0gICAgICogUHJlcCB0aGUgWmlwIGFyY2hpdmUuCi0gICAgICoKLSAgICAgKiBJZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgZmFpbCB1bmxlc3MgInVwZGF0ZSIgb3IgImZvcmNlIiBpcyBzZXQuCi0gICAgICogSWYgInVwZGF0ZSIgaXMgc2V0LCB1cGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBleGlzdGluZyBhcmNoaXZlLgotICAgICAqIEVsc2UsIGlmICJmb3JjZSIgaXMgc2V0LCByZW1vdmUgdGhlIGV4aXN0aW5nIGFyY2hpdmUuCi0gICAgICovCi0gICAgRmlsZVR5cGUgZmlsZVR5cGUgPSBnZXRGaWxlVHlwZShvdXRwdXRGaWxlLnN0cmluZygpKTsKLSAgICBpZiAoZmlsZVR5cGUgPT0ga0ZpbGVUeXBlTm9uZXhpc3RlbnQpIHsKLSAgICAgICAgLy8gb2theSwgY3JlYXRlIGl0IGJlbG93Ci0gICAgfSBlbHNlIGlmIChmaWxlVHlwZSA9PSBrRmlsZVR5cGVSZWd1bGFyKSB7Ci0gICAgICAgIGlmIChidW5kbGUtPmdldFVwZGF0ZSgpKSB7Ci0gICAgICAgICAgICAvLyBva2F5LCBvcGVuIGl0IGJlbG93Ci0gICAgICAgIH0gZWxzZSBpZiAoYnVuZGxlLT5nZXRGb3JjZSgpKSB7Ci0gICAgICAgICAgICBpZiAodW5saW5rKG91dHB1dEZpbGUuc3RyaW5nKCkpICE9IDApIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiB1bmFibGUgdG8gcmVtb3ZlICclcyc6ICVzXG4iLCBvdXRwdXRGaWxlLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiAnJXMnIGV4aXN0cyAodXNlICctZicgdG8gZm9yY2Ugb3ZlcndyaXRlKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0RmlsZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiAnJXMnIGV4aXN0cyBhbmQgaXMgbm90IGEgcmVndWxhciBmaWxlXG4iLCBvdXRwdXRGaWxlLnN0cmluZygpKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICBwcmludGYoIiVzICclcydcbiIsIChmaWxlVHlwZSA9PSBrRmlsZVR5cGVOb25leGlzdGVudCkgPyAiQ3JlYXRpbmciIDogIk9wZW5pbmciLAotICAgICAgICAgICAgICAgIG91dHB1dEZpbGUuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIHN0YXR1c190IHN0YXR1czsKLSAgICB6aXAgPSBuZXcgWmlwRmlsZTsKLSAgICBzdGF0dXMgPSB6aXAtPm9wZW4ob3V0cHV0RmlsZS5zdHJpbmcoKSwgWmlwRmlsZTo6a09wZW5SZWFkV3JpdGUgfCBaaXBGaWxlOjprT3BlbkNyZWF0ZSk7Ci0gICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiB1bmFibGUgdG8gb3BlbiAnJXMnIGFzIFppcCBmaWxlIGZvciB3cml0aW5nXG4iLAotICAgICAgICAgICAgICAgIG91dHB1dEZpbGUuc3RyaW5nKCkpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgIHByaW50ZigiV3JpdGluZyBhbGwgZmlsZXMuLi5cbiIpOwotICAgIH0KLQotICAgIGNvdW50ID0gcHJvY2Vzc0Fzc2V0cyhidW5kbGUsIHppcCwgYXNzZXRzKTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHVuYWJsZSB0byBwcm9jZXNzIGFzc2V0cyB3aGlsZSBwYWNrYWdpbmcgJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICBvdXRwdXRGaWxlLnN0cmluZygpKTsKLSAgICAgICAgcmVzdWx0ID0gY291bnQ7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgcHJpbnRmKCJHZW5lcmF0ZWQgJWQgZmlsZSVzXG4iLCBjb3VudCwgKGNvdW50PT0xKSA/ICIiIDogInMiKTsKLSAgICB9Ci0gICAgCi0gICAgY291bnQgPSBwcm9jZXNzSmFyRmlsZXMoYnVuZGxlLCB6aXApOwotICAgIGlmIChjb3VudCA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogdW5hYmxlIHRvIHByb2Nlc3MgamFyIGZpbGVzIHdoaWxlIHBhY2thZ2luZyAnJXMnXG4iLAotICAgICAgICAgICAgICAgIG91dHB1dEZpbGUuc3RyaW5nKCkpOwotICAgICAgICByZXN1bHQgPSBjb3VudDsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLSAgICAKLSAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpCi0gICAgICAgIHByaW50ZigiSW5jbHVkZWQgJWQgZmlsZSVzIGZyb20gamFyL3ppcCBmaWxlcy5cbiIsIGNvdW50LCAoY291bnQ9PTEpID8gIiIgOiAicyIpOwotICAgIAotICAgIHJlc3VsdCA9IE5PX0VSUk9SOwotCi0gICAgLyoKLSAgICAgKiBDaGVjayBmb3IgY3J1ZnQuICBXZSBzZXQgdGhlICJtYXJrZWQiIGZsYWcgb24gYWxsIGVudHJpZXMgd2UgY3JlYXRlZAotICAgICAqIG9yIGRlY2lkZWQgbm90IHRvIHVwZGF0ZS4gIElmIHRoZSBlbnRyeSBpc24ndCBhbHJlYWR5IHNsYXRlZCBmb3IKLSAgICAgKiBkZWxldGlvbiwgcmVtb3ZlIGl0IG5vdy4KLSAgICAgKi8KLSAgICB7Ci0gICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkKLSAgICAgICAgICAgIHByaW50ZigiQ2hlY2tpbmcgZm9yIGRlbGV0ZWQgZmlsZXNcbiIpOwotICAgICAgICBpbnQgaSwgcmVtb3ZlZCA9IDA7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCB6aXAtPmdldE51bUVudHJpZXMoKTsgaSsrKSB7Ci0gICAgICAgICAgICBaaXBFbnRyeSogZW50cnkgPSB6aXAtPmdldEVudHJ5QnlJbmRleChpKTsKLQotICAgICAgICAgICAgaWYgKCFlbnRyeS0+Z2V0TWFya2VkKCkgJiYgZW50cnktPmdldERlbGV0ZWQoKSkgewotICAgICAgICAgICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIChyZW1vdmluZyBjcnVmdHkgJyVzJylcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+Z2V0RmlsZU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHppcC0+cmVtb3ZlKGVudHJ5KTsKLSAgICAgICAgICAgICAgICByZW1vdmVkKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpICYmIHJlbW92ZWQgPiAwKQotICAgICAgICAgICAgcHJpbnRmKCJSZW1vdmVkICVkIGZpbGUlc1xuIiwgcmVtb3ZlZCwgKHJlbW92ZWQ9PTEpID8gIiIgOiAicyIpOwotICAgIH0KLQotICAgIC8qIHRlbGwgWmlwIGxpYiB0byBwcm9jZXNzIGRlbGV0aW9ucyBhbmQgb3RoZXIgcGVuZGluZyBjaGFuZ2VzICovCi0gICAgcmVzdWx0ID0gemlwLT5mbHVzaCgpOwotICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogWmlwIGZsdXNoIGZhaWxlZCwgYXJjaGl2ZSBtYXkgYmUgaG9zZWRcbiIpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgLyogYW55dGhpbmcgaGVyZT8gKi8KLSAgICBpZiAoemlwLT5nZXROdW1FbnRyaWVzKCkgPT0gMCkgewotICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgICAgIHByaW50ZigiQXJjaGl2ZSBpcyBlbXB0eSAtLSByZW1vdmluZyAlc1xuIiwgb3V0cHV0RmlsZS5nZXRQYXRoTGVhZigpLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBkZWxldGUgemlwOyAgICAgICAgLy8gY2xvc2UgdGhlIGZpbGUgc28gd2UgY2FuIHJlbW92ZSBpdCBpbiBXaW4zMgotICAgICAgICB6aXAgPSBOVUxMOwotICAgICAgICBpZiAodW5saW5rKG91dHB1dEZpbGUuc3RyaW5nKCkpICE9IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAid2FybmluZzogY291bGQgbm90IHVubGluayAnJXMnXG4iLCBvdXRwdXRGaWxlLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHdlJ3ZlIGJlZW4gYXNrZWQgdG8gZ2VuZXJhdGUgYSBkZXBlbmRlbmN5IGZpbGUgZm9yIHRoZSAuYXBfIHBhY2thZ2UsCi0gICAgLy8gZG8gc28gaGVyZQotICAgIGlmIChidW5kbGUtPmdldEdlbkRlcGVuZGVuY2llcygpKSB7Ci0gICAgICAgIC8vIFRoZSBkZXBlbmRlbmN5IGZpbGUgZ2V0cyBvdXRwdXQgdG8gdGhlIHNhbWUgZGlyZWN0b3J5Ci0gICAgICAgIC8vIGFzIHRoZSBzcGVjaWZpZWQgb3V0cHV0IGZpbGUgd2l0aCBhbiBhZGRpdGlvbmFsIC5kIGV4dGVuc2lvbi4KLSAgICAgICAgLy8gZS5nLiBiaW4vcmVzb3VyY2VzLmFwXy5kCi0gICAgICAgIFN0cmluZzggZGVwZW5kZW5jeUZpbGUgPSBvdXRwdXRGaWxlOwotICAgICAgICBkZXBlbmRlbmN5RmlsZS5hcHBlbmQoIi5kIik7Ci0KLSAgICAgICAgRklMRSogZnAgPSBmb3BlbihkZXBlbmRlbmN5RmlsZS5zdHJpbmcoKSwgImEiKTsKLSAgICAgICAgLy8gQWRkIHRoaXMgZmlsZSB0byB0aGUgZGVwZW5kZW5jeSBmaWxlCi0gICAgICAgIGZwcmludGYoZnAsICIlcyBcXFxuIiwgb3V0cHV0RmlsZS5zdHJpbmcoKSk7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgfQotCi0gICAgYXNzZXJ0KHJlc3VsdCA9PSBOT19FUlJPUik7Ci0KLWJhaWw6Ci0gICAgZGVsZXRlIHppcDsgICAgICAgIC8vIG11c3QgY2xvc2UgYmVmb3JlIHJlbW92ZSBpbiBXaW4zMgotICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICBwcmludGYoIlJlbW92aW5nICVzIGR1ZSB0byBlYXJsaWVyIGZhaWx1cmVzXG4iLCBvdXRwdXRGaWxlLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodW5saW5rKG91dHB1dEZpbGUuc3RyaW5nKCkpICE9IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAid2FybmluZzogY291bGQgbm90IHVubGluayAnJXMnXG4iLCBvdXRwdXRGaWxlLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXN1bHQgPT0gTk9fRVJST1IgJiYgYnVuZGxlLT5nZXRWZXJib3NlKCkpCi0gICAgICAgIHByaW50ZigiRG9uZSFcbiIpOwotCi0gICAgI2lmIEJFTkNITUFSSwotICAgIGZwcmludGYoc3Rkb3V0LCAiQkVOQ0hNQVJLOiBFbmQgQVBLIEJ1bmRsaW5nLiBUaW1lIEVsYXBzZWQ6ICVmIG1zIFxuIiwoY2xvY2soKSAtIHN0YXJ0QVBLVGltZSkvMTAwMC4wKTsKLSAgICAjZW5kaWYgLyogQkVOQ0hNQVJLICovCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3NpemVfdCBwcm9jZXNzQXNzZXRzKEJ1bmRsZSogYnVuZGxlLCBaaXBGaWxlKiB6aXAsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cykKLXsKLSAgICBSZXNvdXJjZUZpbHRlciBmaWx0ZXI7Ci0gICAgc3RhdHVzX3Qgc3RhdHVzID0gZmlsdGVyLnBhcnNlKGJ1bmRsZS0+Z2V0Q29uZmlndXJhdGlvbnMoKSk7Ci0gICAgaWYgKHN0YXR1cyAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgc3NpemVfdCBjb3VudCA9IDA7Ci0KLSAgICBjb25zdCBzaXplX3QgTiA9IGFzc2V0cy0+Z2V0R3JvdXBFbnRyaWVzKCkuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgY29uc3QgQWFwdEdyb3VwRW50cnkmIGdlID0gYXNzZXRzLT5nZXRHcm91cEVudHJpZXMoKVtpXTsKLQotICAgICAgICBzc2l6ZV90IHJlcyA9IHByb2Nlc3NBc3NldHMoYnVuZGxlLCB6aXAsIGFzc2V0cywgZ2UsICZmaWx0ZXIpOwotICAgICAgICBpZiAocmVzIDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgfQotCi0gICAgICAgIGNvdW50ICs9IHJlczsKLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLXNzaXplX3QgcHJvY2Vzc0Fzc2V0cyhCdW5kbGUqIGJ1bmRsZSwgWmlwRmlsZSogemlwLCBjb25zdCBzcDxBYXB0RGlyPiYgZGlyLAotICAgICAgICBjb25zdCBBYXB0R3JvdXBFbnRyeSYgZ2UsIGNvbnN0IFJlc291cmNlRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgc3NpemVfdCBjb3VudCA9IDA7Ci0KLSAgICBjb25zdCBzaXplX3QgTkQgPSBkaXItPmdldERpcnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IGk7Ci0gICAgZm9yIChpPTA7IGk8TkQ7IGkrKykgewotICAgICAgICBjb25zdCBzcDxBYXB0RGlyPiYgc3ViRGlyID0gZGlyLT5nZXREaXJzKCkudmFsdWVBdChpKTsKLQotICAgICAgICBjb25zdCBib29sIGZpbHRlcmFibGUgPSBmaWx0ZXIgIT0gTlVMTCAmJiBzdWJEaXItPmdldExlYWYoKS5maW5kKCJtaXBtYXAtIikgIT0gMDsKLQotICAgICAgICBpZiAoZmlsdGVyYWJsZSAmJiBzdWJEaXItPmdldExlYWYoKSAhPSBzdWJEaXItPmdldFBhdGgoKSAmJiAhZmlsdGVyLT5tYXRjaChnZS50b1BhcmFtcygpKSkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBzc2l6ZV90IHJlcyA9IHByb2Nlc3NBc3NldHMoYnVuZGxlLCB6aXAsIHN1YkRpciwgZ2UsIGZpbHRlcmFibGUgPyBmaWx0ZXIgOiBOVUxMKTsKLSAgICAgICAgaWYgKHJlcyA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIH0KLSAgICAgICAgY291bnQgKz0gcmVzOwotICAgIH0KLQotICAgIGlmIChmaWx0ZXIgIT0gTlVMTCAmJiAhZmlsdGVyLT5tYXRjaChnZS50b1BhcmFtcygpKSkgewotICAgICAgICByZXR1cm4gY291bnQ7Ci0gICAgfQotCi0gICAgY29uc3Qgc2l6ZV90IE5GID0gZGlyLT5nZXRGaWxlcygpLnNpemUoKTsKLSAgICBmb3IgKGk9MDsgaTxORjsgaSsrKSB7Ci0gICAgICAgIHNwPEFhcHRHcm91cD4gZ3AgPSBkaXItPmdldEZpbGVzKCkudmFsdWVBdChpKTsKLSAgICAgICAgc3NpemVfdCBmaSA9IGdwLT5nZXRGaWxlcygpLmluZGV4T2ZLZXkoZ2UpOwotICAgICAgICBpZiAoZmkgPj0gMCkgewotICAgICAgICAgICAgc3A8QWFwdEZpbGU+IGZsID0gZ3AtPmdldEZpbGVzKCkudmFsdWVBdChmaSk7Ci0gICAgICAgICAgICBpZiAoIXByb2Nlc3NGaWxlKGJ1bmRsZSwgemlwLCBncCwgZmwpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotfQotCi0vKgotICogUHJvY2VzcyBhIHJlZ3VsYXIgZmlsZSwgYWRkaW5nIGl0IHRvIHRoZSBhcmNoaXZlIGlmIGFwcHJvcHJpYXRlLgotICoKLSAqIElmIHdlJ3JlIGluICJ1cGRhdGUiIG1vZGUsIGFuZCB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgYXJjaGl2ZSwKLSAqIGRlbGV0ZSB0aGUgZXhpc3RpbmcgZW50cnkgYmVmb3JlIGFkZGluZyB0aGUgbmV3IG9uZS4KLSAqLwotYm9vbCBwcm9jZXNzRmlsZShCdW5kbGUqIGJ1bmRsZSwgWmlwRmlsZSogemlwLAotICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0R3JvdXA+JiBncm91cCwgY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlKQotewotICAgIGNvbnN0IGJvb2wgaGFzRGF0YSA9IGZpbGUtPmhhc0RhdGEoKTsKLQotICAgIFN0cmluZzggc3RvcmFnZU5hbWUoZ3JvdXAtPmdldFBhdGgoKSk7Ci0gICAgc3RvcmFnZU5hbWUuY29udmVydFRvUmVzUGF0aCgpOwotICAgIFppcEVudHJ5KiBlbnRyeTsKLSAgICBib29sIGZyb21HemlwID0gZmFsc2U7Ci0gICAgc3RhdHVzX3QgcmVzdWx0OwotCi0gICAgLyoKLSAgICAgKiBTZWUgaWYgdGhlIGZpbGVuYW1lIGVuZHMgaW4gIi5FWENMVURFIi4gIFdlIGNhbid0IHVzZQotICAgICAqIFN0cmluZzg6OmdldFBhdGhFeHRlbnNpb24oKSBiZWNhdXNlIHRoZSBsZW5ndGggb2Ygd2hhdCBpdCBjb25zaWRlcnMKLSAgICAgKiB0byBiZSBhbiBleHRlbnNpb24gaXMgY2FwcGVkLgotICAgICAqCi0gICAgICogVGhlIEFzc2V0IE1hbmFnZXIgZG9lc24ndCBjaGVjayBmb3IgIi5FWENMVURFIiBpbiBaaXAgYXJjaGl2ZXMsCi0gICAgICogc28gdGhlcmUncyBubyB2YWx1ZSBpbiBhZGRpbmcgdGhlbSAoYW5kIGl0IG1ha2VzIGxpZmUgZWFzaWVyIG9uCi0gICAgICogdGhlIEFzc2V0TWFuYWdlciBsaWIgaWYgd2UgZG9uJ3QpLgotICAgICAqCi0gICAgICogTk9URTogdGhpcyByZXN0cmljdGlvbiBoYXMgYmVlbiByZW1vdmVkLiAgSWYgeW91J3JlIGluIHRoaXMgY29kZSwgeW91Ci0gICAgICogc2hvdWxkIGNsZWFuIHRoaXMgdXAsIGJ1dCBJJ20gaW4gaGVyZSBnZXR0aW5nIHJpZCBvZiBQYXRoIE5hbWUsIGFuZCBJCi0gICAgICogZG9uJ3Qgd2FudCB0byBtYWtlIG90aGVyIHBvdGVudGlhbGx5IGJyZWFraW5nIGNoYW5nZXMgLS1qb2VvCi0gICAgICovCi0gICAgaW50IGZpbGVOYW1lTGVuID0gc3RvcmFnZU5hbWUubGVuZ3RoKCk7Ci0gICAgaW50IGV4Y2x1ZGVFeHRlbnNpb25MZW4gPSBzdHJsZW4oa0V4Y2x1ZGVFeHRlbnNpb24pOwotICAgIGlmIChmaWxlTmFtZUxlbiA+IGV4Y2x1ZGVFeHRlbnNpb25MZW4KLSAgICAgICAgICAgICYmICgwID09IHN0cmNtcChzdG9yYWdlTmFtZS5zdHJpbmcoKSArIChmaWxlTmFtZUxlbiAtIGV4Y2x1ZGVFeHRlbnNpb25MZW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtFeGNsdWRlRXh0ZW5zaW9uKSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiAnJXMnIG5vdCBhZGRlZCB0byBaaXBcbiIsIHN0b3JhZ2VOYW1lLnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHN0cmNhc2VjbXAoc3RvcmFnZU5hbWUuZ2V0UGF0aEV4dGVuc2lvbigpLnN0cmluZygpLCAiLmd6IikgPT0gMCkgewotICAgICAgICBmcm9tR3ppcCA9IHRydWU7Ci0gICAgICAgIHN0b3JhZ2VOYW1lID0gc3RvcmFnZU5hbWUuZ2V0QmFzZVBhdGgoKTsKLSAgICB9Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRVcGRhdGUoKSkgewotICAgICAgICBlbnRyeSA9IHppcC0+Z2V0RW50cnlCeU5hbWUoc3RvcmFnZU5hbWUuc3RyaW5nKCkpOwotICAgICAgICBpZiAoZW50cnkgIT0gTlVMTCkgewotICAgICAgICAgICAgLyogZmlsZSBhbHJlYWR5IGV4aXN0cyBpbiBhcmNoaXZlOyB0aGVyZSBjYW4gYmUgb25seSBvbmUgKi8KLSAgICAgICAgICAgIGlmIChlbnRyeS0+Z2V0TWFya2VkKCkpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJFUlJPUjogJyVzJyBleGlzdHMgdHdpY2UgKGNoZWNrIGZvciB3aXRoICYgdy9vICcuZ3onPylcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFoYXNEYXRhKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nOCYgc3JjTmFtZSA9IGZpbGUtPmdldFNvdXJjZUZpbGUoKTsKLSAgICAgICAgICAgICAgICB0aW1lX3QgZmlsZU1vZFdoZW47Ci0gICAgICAgICAgICAgICAgZmlsZU1vZFdoZW4gPSBnZXRGaWxlTW9kRGF0ZShzcmNOYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBpZiAoZmlsZU1vZFdoZW4gPT0gKHRpbWVfdCkgLTEpIHsgLy8gZmlsZSBleGlzdGVuY2UgdGVzdGVkIGVhcmxpZXIsCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgIC8vICBub3QgZXhwZWN0aW5nIGFuIGVycm9yIGhlcmUKLSAgICAgICAgICAgICAgICB9Ci0gICAgCi0gICAgICAgICAgICAgICAgaWYgKGZpbGVNb2RXaGVuID4gZW50cnktPmdldE1vZFdoZW4oKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBtYXJrIGFzIGRlbGV0ZWQgc28gYWRkKCkgd2lsbCBzdWNjZWVkCi0gICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICAocmVtb3Zpbmcgb2xkICclcycpXG4iLCBzdG9yYWdlTmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAKLSAgICAgICAgICAgICAgICAgICAgemlwLT5yZW1vdmUoZW50cnkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHZlcnNpb24gaW4gYXJjaGl2ZSBpcyBuZXdlcgotICAgICAgICAgICAgICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgKG5vdCB1cGRhdGluZyAnJXMnKVxuIiwgc3RvcmFnZU5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zZXRNYXJrZWQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gR2VuZXJhdGVkIGZpbGVzIGFyZSBhbHdheXMgcmVwbGFjZWQuCi0gICAgICAgICAgICAgICAgemlwLT5yZW1vdmUoZW50cnkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy9hbmRyb2lkX3NldE1pblByaW9yaXR5KE5VTEwsIEFORFJPSURfTE9HX1ZFUkJPU0UpOwotCi0gICAgaWYgKGZyb21HemlwKSB7Ci0gICAgICAgIHJlc3VsdCA9IHppcC0+YWRkR3ppcChmaWxlLT5nZXRTb3VyY2VGaWxlKCkuc3RyaW5nKCksIHN0b3JhZ2VOYW1lLnN0cmluZygpLCAmZW50cnkpOwotICAgIH0gZWxzZSBpZiAoIWhhc0RhdGEpIHsKLSAgICAgICAgLyogZG9uJ3QgY29tcHJlc3MgY2VydGFpbiBmaWxlcywgZS5nLiBQTkdzICovCi0gICAgICAgIGludCBjb21wcmVzc2lvbk1ldGhvZCA9IGJ1bmRsZS0+Z2V0Q29tcHJlc3Npb25NZXRob2QoKTsKLSAgICAgICAgaWYgKCFva2F5VG9Db21wcmVzcyhidW5kbGUsIHN0b3JhZ2VOYW1lKSkgewotICAgICAgICAgICAgY29tcHJlc3Npb25NZXRob2QgPSBaaXBFbnRyeTo6a0NvbXByZXNzU3RvcmVkOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IHppcC0+YWRkKGZpbGUtPmdldFNvdXJjZUZpbGUoKS5zdHJpbmcoKSwgc3RvcmFnZU5hbWUuc3RyaW5nKCksIGNvbXByZXNzaW9uTWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbnRyeSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gemlwLT5hZGQoZmlsZS0+Z2V0RGF0YSgpLCBmaWxlLT5nZXRTaXplKCksIHN0b3JhZ2VOYW1lLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS0+Z2V0Q29tcHJlc3Npb25NZXRob2QoKSwgJmVudHJ5KTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCA9PSBOT19FUlJPUikgewotICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgICAgIHByaW50ZigiICAgICAgJyVzJyVzIiwgc3RvcmFnZU5hbWUuc3RyaW5nKCksIGZyb21HemlwID8gIiAoZnJvbSAuZ3opIiA6ICIiKTsKLSAgICAgICAgICAgIGlmIChlbnRyeS0+Z2V0Q29tcHJlc3Npb25NZXRob2QoKSA9PSBaaXBFbnRyeTo6a0NvbXByZXNzU3RvcmVkKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgKG5vdCBjb21wcmVzc2VkKVxuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiIChjb21wcmVzc2VkICVkJSUpXG4iLCBjYWxjUGVyY2VudChlbnRyeS0+Z2V0VW5jb21wcmVzc2VkTGVuKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmdldENvbXByZXNzZWRMZW4oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVudHJ5LT5zZXRNYXJrZWQodHJ1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBBTFJFQURZX0VYSVNUUykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgICBVbmFibGUgdG8gYWRkICclcyc6IGZpbGUgYWxyZWFkeSBpbiBhcmNoaXZlICh0cnkgJy11Jz8pXG4iLAotICAgICAgICAgICAgICAgICAgICBmaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAgIFVuYWJsZSB0byBhZGQgJyVzJzogWmlwIGFkZCBmYWlsZWRcbiIsIAotICAgICAgICAgICAgICAgICAgICBmaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vKgotICogRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIHdhbnQgdG8gdHJ5IHRvIGNvbXByZXNzIHRoaXMgZmlsZSBiYXNlZAotICogb24gdGhlIGZpbGUgZXh0ZW5zaW9uLgotICovCi1ib29sIG9rYXlUb0NvbXByZXNzKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBTdHJpbmc4JiBwYXRoTmFtZSkKLXsKLSAgICBTdHJpbmc4IGV4dCA9IHBhdGhOYW1lLmdldFBhdGhFeHRlbnNpb24oKTsKLSAgICBpbnQgaTsKLQotICAgIGlmIChleHQubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgTkVMRU0oa05vQ29tcHJlc3NFeHQpOyBpKyspIHsKLSAgICAgICAgaWYgKHN0cmNhc2VjbXAoZXh0LnN0cmluZygpLCBrTm9Db21wcmVzc0V4dFtpXSkgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjb25zdCBhbmRyb2lkOjpWZWN0b3I8Y29uc3QgY2hhcio+JiBvdGhlcnMoYnVuZGxlLT5nZXROb0NvbXByZXNzRXh0ZW5zaW9ucygpKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgKGludClvdGhlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgY2hhciogc3RyID0gb3RoZXJzW2ldOwotICAgICAgICBpbnQgcG9zID0gcGF0aE5hbWUubGVuZ3RoKCkgLSBzdHJsZW4oc3RyKTsKLSAgICAgICAgaWYgKHBvcyA8IDApIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IGNoYXIqIHBhdGggPSBwYXRoTmFtZS5zdHJpbmcoKTsKLSAgICAgICAgaWYgKHN0cmNhc2VjbXAocGF0aCArIHBvcywgc3RyKSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBlbmRzV2l0aChjb25zdCBjaGFyKiBoYXlzdGFjaywgY29uc3QgY2hhciogbmVlZGxlKQotewotICAgIHNpemVfdCBhID0gc3RybGVuKGhheXN0YWNrKTsKLSAgICBzaXplX3QgYiA9IHN0cmxlbihuZWVkbGUpOwotICAgIGlmIChhIDwgYikgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBzdHJjYXNlY21wKGhheXN0YWNrKyhhLWIpLCBuZWVkbGUpID09IDA7Ci19Ci0KLXNzaXplX3QgcHJvY2Vzc0phckZpbGUoWmlwRmlsZSogamFyLCBaaXBGaWxlKiBvdXQpCi17Ci0gICAgc3RhdHVzX3QgZXJyOwotICAgIHNpemVfdCBOID0gamFyLT5nZXROdW1FbnRyaWVzKCk7Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIFppcEVudHJ5KiBlbnRyeSA9IGphci0+Z2V0RW50cnlCeUluZGV4KGkpOwotICAgICAgICBjb25zdCBjaGFyKiBzdG9yYWdlTmFtZSA9IGVudHJ5LT5nZXRGaWxlTmFtZSgpOwotICAgICAgICBpZiAoZW5kc1dpdGgoc3RvcmFnZU5hbWUsICIuY2xhc3MiKSkgewotICAgICAgICAgICAgaW50IGNvbXByZXNzaW9uTWV0aG9kID0gZW50cnktPmdldENvbXByZXNzaW9uTWV0aG9kKCk7Ci0gICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGVudHJ5LT5nZXRVbmNvbXByZXNzZWRMZW4oKTsKLSAgICAgICAgICAgIGNvbnN0IHZvaWQqIGRhdGEgPSBqYXItPnVuY29tcHJlc3MoZW50cnkpOwotICAgICAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHVuYWJsZSB0byB1bmNvbXByZXNzIGVudHJ5ICclcydcbiIsCi0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VOYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvdXQtPmFkZChkYXRhLCBzaXplLCBzdG9yYWdlTmFtZSwgY29tcHJlc3Npb25NZXRob2QsIE5VTEwpOwotICAgICAgICAgICAgZnJlZSgodm9pZCopZGF0YSk7Ci0gICAgICAgIH0KLSAgICAgICAgY291bnQrKzsKLSAgICB9Ci0gICAgcmV0dXJuIGNvdW50OwotfQotCi1zc2l6ZV90IHByb2Nlc3NKYXJGaWxlcyhCdW5kbGUqIGJ1bmRsZSwgWmlwRmlsZSogemlwKQotewotICAgIHN0YXR1c190IGVycjsKLSAgICBzc2l6ZV90IGNvdW50ID0gMDsKLSAgICBjb25zdCBhbmRyb2lkOjpWZWN0b3I8Y29uc3QgY2hhcio+JiBqYXJzID0gYnVuZGxlLT5nZXRKYXJGaWxlcygpOwotCi0gICAgc2l6ZV90IE4gPSBqYXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIFppcEZpbGUgamFyOwotICAgICAgICBlcnIgPSBqYXIub3BlbihqYXJzW2ldLCBaaXBGaWxlOjprT3BlblJlYWRPbmx5KTsKLSAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiB1bmFibGUgdG8gb3BlbiAnJXMnIGFzIGEgemlwIGZpbGU6ICVkXG4iLAotICAgICAgICAgICAgICAgIGphcnNbaV0sIGVycik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgICAgIGVyciArPSBwcm9jZXNzSmFyRmlsZSgmamFyLCB6aXApOwotICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogdW5hYmxlIHRvIHByb2Nlc3MgJyVzJ1xuIiwgamFyc1tpXSk7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgICAgIGNvdW50ICs9IGVycjsKLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19CmRpZmYgLS1naXQgYS90b29scy9hYXB0L1Jlc291cmNlLmNwcCBiL3Rvb2xzL2FhcHQvUmVzb3VyY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODY4ODhiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvUmVzb3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjY1MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIEJ1aWxkIHJlc291cmNlIGZpbGVzIGZyb20gcmF3IGFzc2V0cy4KLS8vCi0jaW5jbHVkZSAiTWFpbi5oIgotI2luY2x1ZGUgIkFhcHRBc3NldHMuaCIKLSNpbmNsdWRlICJTdHJpbmdQb29sLmgiCi0jaW5jbHVkZSAiWE1MTm9kZS5oIgotI2luY2x1ZGUgIlJlc291cmNlVGFibGUuaCIKLSNpbmNsdWRlICJJbWFnZXMuaCIKLQotI2luY2x1ZGUgIkNydW5jaENhY2hlLmgiCi0jaW5jbHVkZSAiRmlsZUZpbmRlci5oIgotI2luY2x1ZGUgIkNhY2hlVXBkYXRlci5oIgotCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0KLSNpZiBIQVZFX1BSSU5URl9aRAotIyAgZGVmaW5lIFpEICIlemQiCi0jICBkZWZpbmUgWkRfVFlQRSBzc2l6ZV90Ci0jZWxzZQotIyAgZGVmaW5lIFpEICIlbGQiCi0jICBkZWZpbmUgWkRfVFlQRSBsb25nCi0jZW5kaWYKLQotI2RlZmluZSBOT0lTWSh4KSAvLyB4Ci0KLS8vIE51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSBmb3IgcHJlcHJvY2Vzc2luZyBpbWFnZXMuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IE1BWF9USFJFQURTID0gNDsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1jbGFzcyBQYWNrYWdlSW5mbwotewotcHVibGljOgotICAgIFBhY2thZ2VJbmZvKCkKLSAgICB7Ci0gICAgfQotICAgIH5QYWNrYWdlSW5mbygpCi0gICAgewotICAgIH0KLQotICAgIHN0YXR1c190IHBhcnNlUGFja2FnZShjb25zdCBzcDxBYXB0R3JvdXA+JiBncnApOwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgU3RyaW5nOCBwYXJzZVJlc291cmNlTmFtZShjb25zdCBTdHJpbmc4JiBsZWFmKQotewotICAgIGNvbnN0IGNoYXIqIGZpcnN0RG90ID0gc3RyY2hyKGxlYWYuc3RyaW5nKCksICcuJyk7Ci0gICAgY29uc3QgY2hhciogc3RyID0gbGVhZi5zdHJpbmcoKTsKLQotICAgIGlmIChmaXJzdERvdCkgewotICAgICAgICByZXR1cm4gU3RyaW5nOChzdHIsIGZpcnN0RG90LXN0cik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZzgoc3RyKTsKLSAgICB9Ci19Ci0KLVJlc291cmNlVHlwZVNldDo6UmVzb3VyY2VUeXBlU2V0KCkKLSAgICA6UmVmQmFzZSgpLAotICAgICBLZXllZFZlY3RvcjxTdHJpbmc4LHNwPEFhcHRHcm91cD4gPigpCi17Ci19Ci0KLUZpbGVQYXRoU3RvcmU6OkZpbGVQYXRoU3RvcmUoKQotICAgIDpSZWZCYXNlKCksCi0gICAgIFZlY3RvcjxTdHJpbmc4PigpCi17Ci19Ci0KLWNsYXNzIFJlc291cmNlRGlySXRlcmF0b3IKLXsKLXB1YmxpYzoKLSAgICBSZXNvdXJjZURpckl0ZXJhdG9yKGNvbnN0IHNwPFJlc291cmNlVHlwZVNldD4mIHNldCwgY29uc3QgU3RyaW5nOCYgcmVzVHlwZSkKLSAgICAgICAgOiBtUmVzVHlwZShyZXNUeXBlKSwgbVNldChzZXQpLCBtU2V0UG9zKDApLCBtR3JvdXBQb3MoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGNvbnN0IHNwPEFhcHRHcm91cD4mIGdldEdyb3VwKCkgY29uc3QgeyByZXR1cm4gbUdyb3VwOyB9Ci0gICAgaW5saW5lIGNvbnN0IHNwPEFhcHRGaWxlPiYgZ2V0RmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1GaWxlOyB9Ci0KLSAgICBpbmxpbmUgY29uc3QgU3RyaW5nOCYgZ2V0QmFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBtQmFzZU5hbWU7IH0KLSAgICBpbmxpbmUgY29uc3QgU3RyaW5nOCYgZ2V0TGVhZk5hbWUoKSBjb25zdCB7IHJldHVybiBtTGVhZk5hbWU7IH0KLSAgICBpbmxpbmUgU3RyaW5nOCBnZXRQYXRoKCkgY29uc3QgeyByZXR1cm4gbVBhdGg7IH0KLSAgICBpbmxpbmUgY29uc3QgUmVzVGFibGVfY29uZmlnJiBnZXRQYXJhbXMoKSBjb25zdCB7IHJldHVybiBtUGFyYW1zOyB9Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgRU9EID0gMQotICAgIH07Ci0KLSAgICBzc2l6ZV90IG5leHQoKQotICAgIHsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIHNwPEFhcHRHcm91cD4gZ3JvdXA7Ci0gICAgICAgICAgICBzcDxBYXB0RmlsZT4gZmlsZTsKLQotICAgICAgICAgICAgLy8gVHJ5IHRvIGdldCBuZXh0IGZpbGUgaW4gdGhpcyBjdXJyZW50IGdyb3VwLgotICAgICAgICAgICAgaWYgKG1Hcm91cCAhPSBOVUxMICYmIG1Hcm91cFBvcyA8IG1Hcm91cC0+Z2V0RmlsZXMoKS5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBncm91cCA9IG1Hcm91cDsKLSAgICAgICAgICAgICAgICBmaWxlID0gZ3JvdXAtPmdldEZpbGVzKCkudmFsdWVBdChtR3JvdXBQb3MrKyk7Ci0KLSAgICAgICAgICAgIC8vIFRyeSB0byBnZXQgdGhlIG5leHQgZ3JvdXAvZmlsZSBpbiB0aGlzIGRpcmVjdG9yeQotICAgICAgICAgICAgfSBlbHNlIGlmIChtU2V0UG9zIDwgbVNldC0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbUdyb3VwID0gZ3JvdXAgPSBtU2V0LT52YWx1ZUF0KG1TZXRQb3MrKyk7Ci0gICAgICAgICAgICAgICAgaWYgKGdyb3VwLT5nZXRGaWxlcygpLnNpemUoKSA8IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZpbGUgPSBncm91cC0+Z2V0RmlsZXMoKS52YWx1ZUF0KDApOwotICAgICAgICAgICAgICAgIG1Hcm91cFBvcyA9IDE7Ci0KLSAgICAgICAgICAgIC8vIEFsbCBkb25lIQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRU9EOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRmlsZSA9IGZpbGU7Ci0KLSAgICAgICAgICAgIFN0cmluZzggbGVhZihncm91cC0+Z2V0TGVhZigpKTsKLSAgICAgICAgICAgIG1MZWFmTmFtZSA9IFN0cmluZzgobGVhZik7Ci0gICAgICAgICAgICBtUGFyYW1zID0gZmlsZS0+Z2V0R3JvdXBFbnRyeSgpLnRvUGFyYW1zKCk7Ci0gICAgICAgICAgICBOT0lTWShwcmludGYoIkRpciAlczogbWNjPSVkIG1uYz0lZCBsYW5nPSVjJWMgY250PSVjJWMgb3JpZW50PSVkIHVpPSVkIGRlbnNpdHk9JWQgdG91Y2g9JWQga2V5PSVkIGlucD0lZCBuYXY9JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgZ3JvdXAtPmdldFBhdGgoKS5zdHJpbmcoKSwgbVBhcmFtcy5tY2MsIG1QYXJhbXMubW5jLAotICAgICAgICAgICAgICAgICAgIG1QYXJhbXMubGFuZ3VhZ2VbMF0gPyBtUGFyYW1zLmxhbmd1YWdlWzBdIDogJy0nLAotICAgICAgICAgICAgICAgICAgIG1QYXJhbXMubGFuZ3VhZ2VbMV0gPyBtUGFyYW1zLmxhbmd1YWdlWzFdIDogJy0nLAotICAgICAgICAgICAgICAgICAgIG1QYXJhbXMuY291bnRyeVswXSA/IG1QYXJhbXMuY291bnRyeVswXSA6ICctJywKLSAgICAgICAgICAgICAgICAgICBtUGFyYW1zLmNvdW50cnlbMV0gPyBtUGFyYW1zLmNvdW50cnlbMV0gOiAnLScsCi0gICAgICAgICAgICAgICAgICAgbVBhcmFtcy5vcmllbnRhdGlvbiwgbVBhcmFtcy51aU1vZGUsCi0gICAgICAgICAgICAgICAgICAgbVBhcmFtcy5kZW5zaXR5LCBtUGFyYW1zLnRvdWNoc2NyZWVuLCBtUGFyYW1zLmtleWJvYXJkLAotICAgICAgICAgICAgICAgICAgIG1QYXJhbXMuaW5wdXRGbGFncywgbVBhcmFtcy5uYXZpZ2F0aW9uKSk7Ci0gICAgICAgICAgICBtUGF0aCA9ICJyZXMiOwotICAgICAgICAgICAgbVBhdGguYXBwZW5kUGF0aChmaWxlLT5nZXRHcm91cEVudHJ5KCkudG9EaXJOYW1lKG1SZXNUeXBlKSk7Ci0gICAgICAgICAgICBtUGF0aC5hcHBlbmRQYXRoKGxlYWYpOwotICAgICAgICAgICAgbUJhc2VOYW1lID0gcGFyc2VSZXNvdXJjZU5hbWUobGVhZik7Ci0gICAgICAgICAgICBpZiAobUJhc2VOYW1lID09ICIiKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogbWFsZm9ybWVkIHJlc291cmNlIGZpbGVuYW1lICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBOT0lTWShwcmludGYoImZpbGUgbmFtZT0lc1xuIiwgbUJhc2VOYW1lLnN0cmluZygpKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmc4IG1SZXNUeXBlOwotCi0gICAgY29uc3Qgc3A8UmVzb3VyY2VUeXBlU2V0PiBtU2V0OwotICAgIHNpemVfdCBtU2V0UG9zOwotCi0gICAgc3A8QWFwdEdyb3VwPiBtR3JvdXA7Ci0gICAgc2l6ZV90IG1Hcm91cFBvczsKLQotICAgIHNwPEFhcHRGaWxlPiBtRmlsZTsKLSAgICBTdHJpbmc4IG1CYXNlTmFtZTsKLSAgICBTdHJpbmc4IG1MZWFmTmFtZTsKLSAgICBTdHJpbmc4IG1QYXRoOwotICAgIFJlc1RhYmxlX2NvbmZpZyBtUGFyYW1zOwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1ib29sIGlzVmFsaWRSZXNvdXJjZVR5cGUoY29uc3QgU3RyaW5nOCYgdHlwZSkKLXsKLSAgICByZXR1cm4gdHlwZSA9PSAiYW5pbSIgfHwgdHlwZSA9PSAiYW5pbWF0b3IiIHx8IHR5cGUgPT0gImludGVycG9sYXRvciIKLSAgICAgICAgfHwgdHlwZSA9PSAidHJhbnNpdGlvbiIKLSAgICAgICAgfHwgdHlwZSA9PSAiZHJhd2FibGUiIHx8IHR5cGUgPT0gImxheW91dCIKLSAgICAgICAgfHwgdHlwZSA9PSAidmFsdWVzIiB8fCB0eXBlID09ICJ4bWwiIHx8IHR5cGUgPT0gInJhdyIKLSAgICAgICAgfHwgdHlwZSA9PSAiY29sb3IiIHx8IHR5cGUgPT0gIm1lbnUiIHx8IHR5cGUgPT0gIm1pcG1hcCI7Ci19Ci0KLXN0YXRpYyBzcDxBYXB0RmlsZT4gZ2V0UmVzb3VyY2VGaWxlKGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsIGJvb2wgbWFrZUlmTmVjZXNzYXJ5PXRydWUpCi17Ci0gICAgc3A8QWFwdEdyb3VwPiBncm91cCA9IGFzc2V0cy0+Z2V0RmlsZXMoKS52YWx1ZUZvcihTdHJpbmc4KCJyZXNvdXJjZXMuYXJzYyIpKTsKLSAgICBzcDxBYXB0RmlsZT4gZmlsZTsKLSAgICBpZiAoZ3JvdXAgIT0gTlVMTCkgewotICAgICAgICBmaWxlID0gZ3JvdXAtPmdldEZpbGVzKCkudmFsdWVGb3IoQWFwdEdyb3VwRW50cnkoKSk7Ci0gICAgICAgIGlmIChmaWxlICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBmaWxlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtYWtlSWZOZWNlc3NhcnkpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBhc3NldHMtPmFkZEZpbGUoU3RyaW5nOCgicmVzb3VyY2VzLmFyc2MiKSwgQWFwdEdyb3VwRW50cnkoKSwgU3RyaW5nOCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIFN0cmluZzgoKSk7Ci19Ci0KLXN0YXRpYyBzdGF0dXNfdCBwYXJzZVBhY2thZ2UoQnVuZGxlKiBidW5kbGUsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgY29uc3Qgc3A8QWFwdEdyb3VwPiYgZ3JwKQotewotICAgIGlmIChncnAtPmdldEZpbGVzKCkuc2l6ZSgpICE9IDEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBNdWx0aXBsZSBBbmRyb2lkTWFuaWZlc3QueG1sIGZpbGVzIGZvdW5kLCB1c2luZyAlc1xuIiwKLSAgICAgICAgICAgICAgICBncnAtPmdldEZpbGVzKCkudmFsdWVBdCgwKS0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIHNwPEFhcHRGaWxlPiBmaWxlID0gZ3JwLT5nZXRGaWxlcygpLnZhbHVlQXQoMCk7Ci0KLSAgICBSZXNYTUxUcmVlIGJsb2NrOwotICAgIHN0YXR1c190IGVyciA9IHBhcnNlWE1MUmVzb3VyY2UoZmlsZSwgJmJsb2NrKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIC8vcHJpbnRYTUxCbG9jaygmYmxvY2spOwotCi0gICAgUmVzWE1MVHJlZTo6ZXZlbnRfY29kZV90IGNvZGU7Ci0gICAgd2hpbGUgKChjb2RlPWJsb2NrLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHCi0gICAgICAgICAgICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UCi0gICAgICAgICAgICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgfQotCi0gICAgc2l6ZV90IGxlbjsKLSAgICBpZiAoY29kZSAhPSBSZXNYTUxUcmVlOjpTVEFSVF9UQUcpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogTm8gc3RhcnQgdGFnIGZvdW5kXG4iLAotICAgICAgICAgICAgICAgIGZpbGUtPmdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBTdHJpbmcxNigibWFuaWZlc3QiKS5zdHJpbmcoKSkgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBJbnZhbGlkIHN0YXJ0IHRhZyAlcywgZXhwZWN0ZWQgPG1hbmlmZXN0PlxuIiwKLSAgICAgICAgICAgICAgICBmaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpLAotICAgICAgICAgICAgICAgIFN0cmluZzgoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgc3NpemVfdCBuYW1lSW5kZXggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJwYWNrYWdlIik7Ci0gICAgaWYgKG5hbWVJbmRleCA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogPG1hbmlmZXN0PiBkb2VzIG5vdCBoYXZlIHBhY2thZ2UgYXR0cmlidXRlLlxuIiwKLSAgICAgICAgICAgICAgICBmaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgYXNzZXRzLT5zZXRQYWNrYWdlKFN0cmluZzgoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUobmFtZUluZGV4LCAmbGVuKSkpOwotCi0gICAgU3RyaW5nMTYgdXNlc19zZGsxNigidXNlcy1zZGsiKTsKLSAgICB3aGlsZSAoKGNvZGU9YmxvY2submV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQKLSAgICAgICAgICAgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgICAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHVzZXNfc2RrMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBzc2l6ZV90IG1pblNka0luZGV4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pblNka1ZlcnNpb24iKTsKLSAgICAgICAgICAgICAgICBpZiAobWluU2RrSW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MTZfdCogbWluU2RrMTYgPSBibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShtaW5TZGtJbmRleCwgJmxlbik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1pblNkazggPSBzdHJkdXAoU3RyaW5nOChtaW5TZGsxNikuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBidW5kbGUtPnNldE1hbmlmZXN0TWluU2RrVmVyc2lvbihtaW5TZGs4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotc3RhdGljIHN0YXR1c190IG1ha2VGaWxlUmVzb3VyY2VzKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVGFibGUqIHRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPFJlc291cmNlVHlwZVNldD4mIHNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZXNUeXBlKQotewotICAgIFN0cmluZzggdHlwZTgocmVzVHlwZSk7Ci0gICAgU3RyaW5nMTYgdHlwZTE2KHJlc1R5cGUpOwotCi0gICAgYm9vbCBoYXNFcnJvcnMgPSBmYWxzZTsKLQotICAgIFJlc291cmNlRGlySXRlcmF0b3IgaXQoc2V0LCBTdHJpbmc4KHJlc1R5cGUpKTsKLSAgICBzc2l6ZV90IHJlczsKLSAgICB3aGlsZSAoKHJlcz1pdC5uZXh0KCkpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgcHJpbnRmKCIgICAgKG5ldyByZXNvdXJjZSBpZCAlcyBmcm9tICVzKVxuIiwKLSAgICAgICAgICAgICAgICAgICBpdC5nZXRCYXNlTmFtZSgpLnN0cmluZygpLCBpdC5nZXRGaWxlKCktPmdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcxNiBiYXNlTmFtZShpdC5nZXRCYXNlTmFtZSgpKTsKLSAgICAgICAgY29uc3QgY2hhcjE2X3QqIHN0ciA9IGJhc2VOYW1lLnN0cmluZygpOwotICAgICAgICBjb25zdCBjaGFyMTZfdCogY29uc3QgZW5kID0gc3RyICsgYmFzZU5hbWUuc2l6ZSgpOwotICAgICAgICB3aGlsZSAoc3RyIDwgZW5kKSB7Ci0gICAgICAgICAgICBpZiAoISgoKnN0ciA+PSAnYScgJiYgKnN0ciA8PSAneicpCi0gICAgICAgICAgICAgICAgICAgIHx8ICgqc3RyID49ICcwJyAmJiAqc3RyIDw9ICc5JykKLSAgICAgICAgICAgICAgICAgICAgfHwgKnN0ciA9PSAnXycgfHwgKnN0ciA9PSAnLicpKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogSW52YWxpZCBmaWxlIG5hbWU6IG11c3QgY29udGFpbiBvbmx5IFthLXowLTlfLl1cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpdC5nZXRQYXRoKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdHIrKzsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmc4IHJlc1BhdGggPSBpdC5nZXRQYXRoKCk7Ci0gICAgICAgIHJlc1BhdGguY29udmVydFRvUmVzUGF0aCgpOwotICAgICAgICB0YWJsZS0+YWRkRW50cnkoU291cmNlUG9zKGl0LmdldFBhdGgoKSwgMCksIFN0cmluZzE2KGFzc2V0cy0+Z2V0UGFja2FnZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUxNiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYocmVzUGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgJml0LmdldFBhcmFtcygpKTsKLSAgICAgICAgYXNzZXRzLT5hZGRSZXNvdXJjZShpdC5nZXRMZWFmTmFtZSgpLCByZXNQYXRoLCBpdC5nZXRGaWxlKCksIHR5cGU4KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGFzRXJyb3JzID8gVU5LTk9XTl9FUlJPUiA6IE5PX0VSUk9SOwotfQotCi1jbGFzcyBQcmVQcm9jZXNzSW1hZ2VXb3JrVW5pdCA6IHB1YmxpYyBXb3JrUXVldWU6OldvcmtVbml0IHsKLXB1YmxpYzoKLSAgICBQcmVQcm9jZXNzSW1hZ2VXb3JrVW5pdChjb25zdCBCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRGaWxlPiYgZmlsZSwgdm9sYXRpbGUgYm9vbCogaGFzRXJyb3JzKSA6Ci0gICAgICAgICAgICBtQnVuZGxlKGJ1bmRsZSksIG1Bc3NldHMoYXNzZXRzKSwgbUZpbGUoZmlsZSksIG1IYXNFcnJvcnMoaGFzRXJyb3JzKSB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIHJ1bigpIHsKLSAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gcHJlUHJvY2Vzc0ltYWdlKG1CdW5kbGUsIG1Bc3NldHMsIG1GaWxlLCBOVUxMKTsKLSAgICAgICAgaWYgKHN0YXR1cykgewotICAgICAgICAgICAgKm1IYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOyAvLyBjb250aW51ZSBldmVuIGlmIHRoZXJlIGFyZSBlcnJvcnMKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgQnVuZGxlKiBtQnVuZGxlOwotICAgIHNwPEFhcHRBc3NldHM+IG1Bc3NldHM7Ci0gICAgc3A8QWFwdEZpbGU+IG1GaWxlOwotICAgIHZvbGF0aWxlIGJvb2wqIG1IYXNFcnJvcnM7Ci19OwotCi1zdGF0aWMgc3RhdHVzX3QgcHJlUHJvY2Vzc0ltYWdlcyhjb25zdCBCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8UmVzb3VyY2VUeXBlU2V0PiYgc2V0LCBjb25zdCBjaGFyKiB0eXBlKQotewotICAgIHZvbGF0aWxlIGJvb2wgaGFzRXJyb3JzID0gZmFsc2U7Ci0gICAgc3NpemVfdCByZXMgPSBOT19FUlJPUjsKLSAgICBpZiAoYnVuZGxlLT5nZXRVc2VDcnVuY2hDYWNoZSgpID09IGZhbHNlKSB7Ci0gICAgICAgIFdvcmtRdWV1ZSB3cShNQVhfVEhSRUFEUywgZmFsc2UpOwotICAgICAgICBSZXNvdXJjZURpckl0ZXJhdG9yIGl0KHNldCwgU3RyaW5nOCh0eXBlKSk7Ci0gICAgICAgIHdoaWxlICgocmVzPWl0Lm5leHQoKSkgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIFByZVByb2Nlc3NJbWFnZVdvcmtVbml0KiB3ID0gbmV3IFByZVByb2Nlc3NJbWFnZVdvcmtVbml0KAotICAgICAgICAgICAgICAgICAgICBidW5kbGUsIGFzc2V0cywgaXQuZ2V0RmlsZSgpLCAmaGFzRXJyb3JzKTsKLSAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IHdxLnNjaGVkdWxlKHcpOwotICAgICAgICAgICAgaWYgKHN0YXR1cykgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicHJlUHJvY2Vzc0ltYWdlcyBmYWlsZWQ6IHNjaGVkdWxlKCkgcmV0dXJuZWQgJWRcbiIsIHN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBkZWxldGUgdzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSB3cS5maW5pc2goKTsKLSAgICAgICAgaWYgKHN0YXR1cykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJwcmVQcm9jZXNzSW1hZ2VzIGZhaWxlZDogZmluaXNoKCkgcmV0dXJuZWQgJWRcbiIsIHN0YXR1cyk7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAoaGFzRXJyb3JzIHx8IChyZXMgPCBOT19FUlJPUikpID8gVU5LTk9XTl9FUlJPUiA6IE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBwb3N0UHJvY2Vzc0ltYWdlcyhjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUYWJsZSogdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxSZXNvdXJjZVR5cGVTZXQ+JiBzZXQpCi17Ci0gICAgUmVzb3VyY2VEaXJJdGVyYXRvciBpdChzZXQsIFN0cmluZzgoImRyYXdhYmxlIikpOwotICAgIGJvb2wgaGFzRXJyb3JzID0gZmFsc2U7Ci0gICAgc3NpemVfdCByZXM7Ci0gICAgd2hpbGUgKChyZXM9aXQubmV4dCgpKSA9PSBOT19FUlJPUikgewotICAgICAgICByZXMgPSBwb3N0UHJvY2Vzc0ltYWdlKGFzc2V0cywgdGFibGUsIGl0LmdldEZpbGUoKSk7Ci0gICAgICAgIGlmIChyZXMgPCBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAoaGFzRXJyb3JzIHx8IChyZXMgPCBOT19FUlJPUikpID8gVU5LTk9XTl9FUlJPUiA6IE5PX0VSUk9SOwotfQotCi1zdGF0aWMgdm9pZCBjb2xsZWN0X2ZpbGVzKGNvbnN0IHNwPEFhcHREaXI+JiBkaXIsCi0gICAgICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPFJlc291cmNlVHlwZVNldD4gPiogcmVzb3VyY2VzKQotewotICAgIGNvbnN0IERlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmc4LCBzcDxBYXB0R3JvdXA+ID4mIGdyb3VwcyA9IGRpci0+Z2V0RmlsZXMoKTsKLSAgICBpbnQgTiA9IGdyb3Vwcy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICBTdHJpbmc4IGxlYWZOYW1lID0gZ3JvdXBzLmtleUF0KGkpOwotICAgICAgICBjb25zdCBzcDxBYXB0R3JvdXA+JiBncm91cCA9IGdyb3Vwcy52YWx1ZUF0KGkpOwotCi0gICAgICAgIGNvbnN0IERlZmF1bHRLZXllZFZlY3RvcjxBYXB0R3JvdXBFbnRyeSwgc3A8QWFwdEZpbGU+ID4mIGZpbGVzCi0gICAgICAgICAgICAgICAgPSBncm91cC0+Z2V0RmlsZXMoKTsKLQotICAgICAgICBpZiAoZmlsZXMuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nOCByZXNUeXBlID0gZmlsZXMudmFsdWVBdCgwKS0+Z2V0UmVzb3VyY2VUeXBlKCk7Ci0KLSAgICAgICAgc3NpemVfdCBpbmRleCA9IHJlc291cmNlcy0+aW5kZXhPZktleShyZXNUeXBlKTsKLQotICAgICAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgICAgICBzcDxSZXNvdXJjZVR5cGVTZXQ+IHNldCA9IG5ldyBSZXNvdXJjZVR5cGVTZXQoKTsKLSAgICAgICAgICAgIE5PSVNZKHByaW50ZigiQ3JlYXRpbmcgbmV3IHJlc291cmNlIHR5cGUgc2V0IGZvciBsZWFmICVzIHdpdGggZ3JvdXAgJXMgKCVwKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgbGVhZk5hbWUuc3RyaW5nKCksIGdyb3VwLT5nZXRQYXRoKCkuc3RyaW5nKCksIGdyb3VwLmdldCgpKSk7Ci0gICAgICAgICAgICBzZXQtPmFkZChsZWFmTmFtZSwgZ3JvdXApOwotICAgICAgICAgICAgcmVzb3VyY2VzLT5hZGQocmVzVHlwZSwgc2V0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNwPFJlc291cmNlVHlwZVNldD4gc2V0ID0gcmVzb3VyY2VzLT52YWx1ZUF0KGluZGV4KTsKLSAgICAgICAgICAgIGluZGV4ID0gc2V0LT5pbmRleE9mS2V5KGxlYWZOYW1lKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgICAgICBOT0lTWShwcmludGYoIkFkZGluZyB0byByZXNvdXJjZSB0eXBlIHNldCBmb3IgbGVhZiAlcyBncm91cCAlcyAoJXApXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVhZk5hbWUuc3RyaW5nKCksIGdyb3VwLT5nZXRQYXRoKCkuc3RyaW5nKCksIGdyb3VwLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgc2V0LT5hZGQobGVhZk5hbWUsIGdyb3VwKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3A8QWFwdEdyb3VwPiBleGlzdGluZ0dyb3VwID0gc2V0LT52YWx1ZUF0KGluZGV4KTsKLSAgICAgICAgICAgICAgICBOT0lTWShwcmludGYoIkV4dGVuZGluZyB0byByZXNvdXJjZSB0eXBlIHNldCBmb3IgbGVhZiAlcyBncm91cCAlcyAoJXApXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVhZk5hbWUuc3RyaW5nKCksIGdyb3VwLT5nZXRQYXRoKCkuc3RyaW5nKCksIGdyb3VwLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3Qgaj0wOyBqPGZpbGVzLnNpemUoKTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5PSVNZKHByaW50ZigiQWRkaW5nIGZpbGUgJXMgaW4gZ3JvdXAgJXMgcmVzVHlwZSAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLnZhbHVlQXQoaiktPmdldFNvdXJjZUZpbGUoKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLmtleUF0KGopLnRvRGlyTmFtZShTdHJpbmc4KCkpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzVHlwZS5zdHJpbmcoKSkpOwotICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBleGlzdGluZ0dyb3VwLT5hZGRGaWxlKGZpbGVzLnZhbHVlQXQoaikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY29sbGVjdF9maWxlcyhjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzLAotICAgICAgICBLZXllZFZlY3RvcjxTdHJpbmc4LCBzcDxSZXNvdXJjZVR5cGVTZXQ+ID4qIHJlc291cmNlcykKLXsKLSAgICBjb25zdCBWZWN0b3I8c3A8QWFwdERpcj4gPiYgZGlycyA9IGFzcy0+cmVzRGlycygpOwotICAgIGludCBOID0gZGlycy5zaXplKCk7Ci0KLSAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHNwPEFhcHREaXI+IGQgPSBkaXJzLml0ZW1BdChpKTsKLSAgICAgICAgTk9JU1kocHJpbnRmKCJDb2xsZWN0aW5nIGRpciAjJWQgJXA6ICVzLCBsZWFmICVzXG4iLCBpLCBkLmdldCgpLCBkLT5nZXRQYXRoKCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgZC0+Z2V0TGVhZigpLnN0cmluZygpKSk7Ci0gICAgICAgIGNvbGxlY3RfZmlsZXMoZCwgcmVzb3VyY2VzKTsKLQotICAgICAgICAvLyBkb24ndCB0cnkgdG8gaW5jbHVkZSB0aGUgcmVzIGRpcgotICAgICAgICBOT0lTWShwcmludGYoIlJlbW92aW5nIGRpciBsZWFmICVzXG4iLCBkLT5nZXRMZWFmKCkuc3RyaW5nKCkpKTsKLSAgICAgICAgYXNzLT5yZW1vdmVEaXIoZC0+Z2V0TGVhZigpKTsKLSAgICB9Ci19Ci0KLWVudW0gewotICAgIEFUVFJfT0tBWSA9IC0xLAotICAgIEFUVFJfTk9UX0ZPVU5EID0gLTIsCi0gICAgQVRUUl9MRUFESU5HX1NQQUNFUyA9IC0zLAotICAgIEFUVFJfVFJBSUxJTkdfU1BBQ0VTID0gLTQKLX07Ci1zdGF0aWMgaW50IHZhbGlkYXRlQXR0cihjb25zdCBTdHJpbmc4JiBwYXRoLCBjb25zdCBSZXNUYWJsZSYgdGFibGUsCi0gICAgICAgIGNvbnN0IFJlc1hNTFBhcnNlciYgcGFyc2VyLAotICAgICAgICBjb25zdCBjaGFyKiBucywgY29uc3QgY2hhciogYXR0ciwgY29uc3QgY2hhciogdmFsaWRDaGFycywgYm9vbCByZXF1aXJlZCkKLXsKLSAgICBzaXplX3QgbGVuOwotCi0gICAgc3NpemVfdCBpbmRleCA9IHBhcnNlci5pbmRleE9mQXR0cmlidXRlKG5zLCBhdHRyKTsKLSAgICBjb25zdCB1aW50MTZfdCogc3RyOwotICAgIFJlc192YWx1ZSB2YWx1ZTsKLSAgICBpZiAoaW5kZXggPj0gMCAmJiBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUoaW5kZXgsICZ2YWx1ZSkgPj0gMCkgewotICAgICAgICBjb25zdCBSZXNTdHJpbmdQb29sKiBwb29sID0gJnBhcnNlci5nZXRTdHJpbmdzKCk7Ci0gICAgICAgIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfUkVGRVJFTkNFKSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBzcGVjRmxhZ3MgPSAwOwotICAgICAgICAgICAgaW50IHN0cklkeDsKLSAgICAgICAgICAgIGlmICgoc3RySWR4PXRhYmxlLnJlc29sdmVSZWZlcmVuY2UoJnZhbHVlLCAweDEwMDAwMDAwLCBOVUxMLCAmc3BlY0ZsYWdzKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogVGFnIDwlcz4gYXR0cmlidXRlICVzIHJlZmVyZW5jZXMgdW5rbm93biByZXNpZCAweCUwOHguXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5zdHJpbmcoKSwgcGFyc2VyLmdldExpbmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocGFyc2VyLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSwgYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmRhdGEpOwotICAgICAgICAgICAgICAgIHJldHVybiBBVFRSX05PVF9GT1VORDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcG9vbCA9IHRhYmxlLmdldFRhYmxlU3RyaW5nQmxvY2soc3RySWR4KTsKLSAgICAgICAgICAgICNpZiAwCi0gICAgICAgICAgICBpZiAocG9vbCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc3RyID0gcG9vbC0+c3RyaW5nQXQodmFsdWUuZGF0YSwgJmxlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIioqKioqIFJFUyBBVFRSOiAlcyBzcGVjRmxhZ3M9MHgleCBzdHJJZHg9JWQ6ICVzXG4iLCBhdHRyLAotICAgICAgICAgICAgICAgICAgICBzcGVjRmxhZ3MsIHN0cklkeCwgc3RyICE9IE5VTEwgPyBTdHJpbmc4KHN0cikuc3RyaW5nKCkgOiAiPz8/Iik7Ci0gICAgICAgICAgICAjZW5kaWYKLSAgICAgICAgICAgIGlmICgoc3BlY0ZsYWdzJn5SZXNUYWJsZV90eXBlU3BlYzo6U1BFQ19QVUJMSUMpICE9IDAgJiYgZmFsc2UpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBUYWcgPCVzPiBhdHRyaWJ1dGUgJXMgdmFyaWVzIGJ5IGNvbmZpZ3VyYXRpb25zIDB4JXguXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5zdHJpbmcoKSwgcGFyc2VyLmdldExpbmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocGFyc2VyLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSwgYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNGbGFncyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFUVFJfTk9UX0ZPVU5EOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfU1RSSU5HKSB7Ci0gICAgICAgICAgICBpZiAocG9vbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogVGFnIDwlcz4gYXR0cmlidXRlICVzIGhhcyBubyBzdHJpbmcgYmxvY2suXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5zdHJpbmcoKSwgcGFyc2VyLmdldExpbmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocGFyc2VyLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSwgYXR0cik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFUVFJfTk9UX0ZPVU5EOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChzdHI9cG9vbC0+c3RyaW5nQXQodmFsdWUuZGF0YSwgJmxlbikpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBUYWcgPCVzPiBhdHRyaWJ1dGUgJXMgaGFzIGNvcnJ1cHQgc3RyaW5nIHZhbHVlLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguc3RyaW5nKCksIHBhcnNlci5nZXRMaW5lTnVtYmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHBhcnNlci5nZXRFbGVtZW50TmFtZSgmbGVuKSkuc3RyaW5nKCksIGF0dHIpOwotICAgICAgICAgICAgICAgIHJldHVybiBBVFRSX05PVF9GT1VORDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IFRhZyA8JXM+IGF0dHJpYnV0ZSAlcyBoYXMgaW52YWxpZCB0eXBlICVkLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgcGF0aC5zdHJpbmcoKSwgcGFyc2VyLmdldExpbmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChwYXJzZXIuZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpLCBhdHRyLAotICAgICAgICAgICAgICAgICAgICB2YWx1ZS5kYXRhVHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gQVRUUl9OT1RfRk9VTkQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbGlkQ2hhcnMpIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxsZW47IGkrKykgewotICAgICAgICAgICAgICAgIHVpbnQxNl90IGMgPSBzdHJbaV07Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogcCA9IHZhbGlkQ2hhcnM7Ci0gICAgICAgICAgICAgICAgYm9vbCBva2F5ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjID09ICpwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBva2F5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFva2F5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IFRhZyA8JXM+IGF0dHJpYnV0ZSAlcyBoYXMgaW52YWxpZCBjaGFyYWN0ZXIgJyVjJy5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5zdHJpbmcoKSwgcGFyc2VyLmdldExpbmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHBhcnNlci5nZXRFbGVtZW50TmFtZSgmbGVuKSkuc3RyaW5nKCksIGF0dHIsIChjaGFyKXN0cltpXSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50KWk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICgqc3RyID09ICcgJykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogVGFnIDwlcz4gYXR0cmlidXRlICVzIGNhbiBub3Qgc3RhcnQgd2l0aCBhIHNwYWNlLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgcGF0aC5zdHJpbmcoKSwgcGFyc2VyLmdldExpbmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChwYXJzZXIuZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpLCBhdHRyKTsKLSAgICAgICAgICAgIHJldHVybiBBVFRSX0xFQURJTkdfU1BBQ0VTOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdHJbbGVuLTFdID09ICcgJykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZDogVGFnIDwlcz4gYXR0cmlidXRlICVzIGNhbiBub3QgZW5kIHdpdGggYSBzcGFjZS5cbiIsCi0gICAgICAgICAgICAgICAgICAgIHBhdGguc3RyaW5nKCksIHBhcnNlci5nZXRMaW5lTnVtYmVyKCksCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgocGFyc2VyLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSwgYXR0cik7Ci0gICAgICAgICAgICByZXR1cm4gQVRUUl9UUkFJTElOR19TUEFDRVM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEFUVFJfT0tBWTsKLSAgICB9Ci0gICAgaWYgKHJlcXVpcmVkKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IFRhZyA8JXM+IG1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlICVzLlxuIiwKLSAgICAgICAgICAgICAgICBwYXRoLnN0cmluZygpLCBwYXJzZXIuZ2V0TGluZU51bWJlcigpLAotICAgICAgICAgICAgICAgIFN0cmluZzgocGFyc2VyLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSwgYXR0cik7Ci0gICAgICAgIHJldHVybiBBVFRSX05PVF9GT1VORDsKLSAgICB9Ci0gICAgcmV0dXJuIEFUVFJfT0tBWTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tGb3JJZHMoY29uc3QgU3RyaW5nOCYgcGF0aCwgUmVzWE1MUGFyc2VyJiBwYXJzZXIpCi17Ci0gICAgUmVzWE1MVHJlZTo6ZXZlbnRfY29kZV90IGNvZGU7Ci0gICAgd2hpbGUgKChjb2RlPXBhcnNlci5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVAotICAgICAgICAgICAmJiBjb2RlID4gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OlNUQVJUX1RBRykgewotICAgICAgICAgICAgc3NpemVfdCBpbmRleCA9IHBhcnNlci5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJpZCIpOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiB3YXJuaW5nOiBmb3VuZCBwbGFpbiAnaWQnIGF0dHJpYnV0ZTsgZGlkIHlvdSBtZWFuIHRoZSBuZXcgJ2FuZHJvaWQ6aWQnIG5hbWU/XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5zdHJpbmcoKSwgcGFyc2VyLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGFwcGx5RmlsZU92ZXJsYXkoQnVuZGxlICpidW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwPFJlc291cmNlVHlwZVNldD4gKmJhc2VTZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlc1R5cGUpCi17Ci0gICAgaWYgKGJ1bmRsZS0+Z2V0VmVyYm9zZSgpKSB7Ci0gICAgICAgIHByaW50ZigiYXBwbHlGaWxlT3ZlcmxheSBmb3IgJXNcbiIsIHJlc1R5cGUpOwotICAgIH0KLQotICAgIC8vIFJlcGxhY2UgYW55IGJhc2UgbGV2ZWwgZmlsZXMgaW4gdGhpcyBjYXRlZ29yeSB3aXRoIGFueSBmb3VuZCBmcm9tIHRoZSBvdmVybGF5Ci0gICAgLy8gQWxzbyBhZGQgYW55IGZvdW5kIG9ubHkgaW4gdGhlIG92ZXJsYXkuCi0gICAgc3A8QWFwdEFzc2V0cz4gb3ZlcmxheSA9IGFzc2V0cy0+Z2V0T3ZlcmxheSgpOwotICAgIFN0cmluZzggcmVzVHlwZVN0cmluZyhyZXNUeXBlKTsKLQotICAgIC8vIHdvcmsgdGhyb3VnaCB0aGUgbGlua2VkIGxpc3Qgb2Ygb3ZlcmxheXMKLSAgICB3aGlsZSAob3ZlcmxheS5nZXQoKSkgewotICAgICAgICBLZXllZFZlY3RvcjxTdHJpbmc4LCBzcDxSZXNvdXJjZVR5cGVTZXQ+ID4qIG92ZXJsYXlSZXMgPSBvdmVybGF5LT5nZXRSZXNvdXJjZXMoKTsKLQotICAgICAgICAvLyBnZXQgdGhlIG92ZXJsYXkgcmVzb3VyY2VzIG9mIHRoZSByZXF1ZXN0ZWQgdHlwZQotICAgICAgICBzc2l6ZV90IGluZGV4ID0gb3ZlcmxheVJlcy0+aW5kZXhPZktleShyZXNUeXBlU3RyaW5nKTsKLSAgICAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgICAgIHNwPFJlc291cmNlVHlwZVNldD4gb3ZlcmxheVNldCA9IG92ZXJsYXlSZXMtPnZhbHVlQXQoaW5kZXgpOwotCi0gICAgICAgICAgICAvLyBmb3IgZWFjaCBvZiB0aGUgcmVzb3VyY2VzLCBjaGVjayBmb3IgYSBtYXRjaCBpbiB0aGUgcHJldmlvdXNseSBidWlsdAotICAgICAgICAgICAgLy8gbm9uLW92ZXJsYXkgImJhc2VzZXQiLgotICAgICAgICAgICAgc2l6ZV90IG92ZXJsYXlDb3VudCA9IG92ZXJsYXlTZXQtPnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IG92ZXJsYXlJbmRleD0wOyBvdmVybGF5SW5kZXg8b3ZlcmxheUNvdW50OyBvdmVybGF5SW5kZXgrKykgewotICAgICAgICAgICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoInRyeWluZyBvdmVybGF5U2V0IEtleT0lc1xuIixvdmVybGF5U2V0LT5rZXlBdChvdmVybGF5SW5kZXgpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGJhc2VJbmRleCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VTZXQtPmdldCgpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgYmFzZUluZGV4ID0gKCpiYXNlU2V0KS0+aW5kZXhPZktleShvdmVybGF5U2V0LT5rZXlBdChvdmVybGF5SW5kZXgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VJbmRleCA8IFVOS05PV05fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gbG9vayBmb3Igc2FtZSBmbGF2b3IuICBGb3IgYSBnaXZlbiBmaWxlIChzdHJpbmdzLnhtbCwgZm9yIGV4YW1wbGUpCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIG1heSBiZSBhIGxvY2FsZSBzcGVjaWZpYyBvciBvdGhlciBmbGF2b3JzIC0gd2Ugd2FudCB0byBtYXRjaAotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBmbGF2b3IuCi0gICAgICAgICAgICAgICAgICAgIHNwPEFhcHRHcm91cD4gb3ZlcmxheUdyb3VwID0gb3ZlcmxheVNldC0+dmFsdWVBdChvdmVybGF5SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBzcDxBYXB0R3JvdXA+IGJhc2VHcm91cCA9ICgqYmFzZVNldCktPnZhbHVlQXQoYmFzZUluZGV4KTsKLQotICAgICAgICAgICAgICAgICAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8QWFwdEdyb3VwRW50cnksIHNwPEFhcHRGaWxlPiA+IG92ZXJsYXlGaWxlcyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUdyb3VwLT5nZXRGaWxlcygpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRLZXllZFZlY3RvcjxBYXB0R3JvdXBFbnRyeSwgc3A8QWFwdEZpbGU+ID4gYmFzZUZpbGVzID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUdyb3VwLT5nZXRGaWxlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpIDwgYmFzZUZpbGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJiYXNlRmlsZSAiIFpEICIgaGFzIGZsYXZvciAlc1xuIiwgKFpEX1RZUEUpIGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRmlsZXMua2V5QXQoaSkudG9TdHJpbmcoKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBvdmVybGF5RmlsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIm92ZXJsYXlGaWxlICIgWkQgIiBoYXMgZmxhdm9yICVzXG4iLCAoWkRfVFlQRSkgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlGaWxlcy5rZXlBdChpKS50b1N0cmluZygpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdmVybGF5R3JvdXBTaXplID0gb3ZlcmxheUZpbGVzLnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qgb3ZlcmxheUdyb3VwSW5kZXggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlHcm91cEluZGV4PG92ZXJsYXlHcm91cFNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUdyb3VwSW5kZXgrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJhc2VGaWxlSW5kZXggPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR3JvdXAtPmdldEZpbGVzKCkuaW5kZXhPZktleShvdmVybGF5RmlsZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUF0KG92ZXJsYXlHcm91cEluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZUZpbGVJbmRleCA8IFVOS05PV05fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJmb3VuZCBhIG1hdGNoICgiIFpEICIpIGZvciBvdmVybGF5IGZpbGUgJXMsIGZvciBmbGF2b3IgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFpEX1RZUEUpIGJhc2VGaWxlSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUdyb3VwLT5nZXRMZWFmKCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUZpbGVzLmtleUF0KG92ZXJsYXlHcm91cEluZGV4KS50b1N0cmluZygpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUdyb3VwLT5yZW1vdmVGaWxlKGJhc2VGaWxlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkaWRuJ3QgZmluZCBhIG1hdGNoIGZhbGwgdGhyb3VnaCBhbmQgYWRkIGl0Li4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJ1ZSB8fCBidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIm5vdGhpbmcgbWF0Y2hlcyBvdmVybGF5IGZpbGUgJXMsIGZvciBmbGF2b3IgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUdyb3VwLT5nZXRMZWFmKCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUZpbGVzLmtleUF0KG92ZXJsYXlHcm91cEluZGV4KS50b1N0cmluZygpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlR3JvdXAtPmFkZEZpbGUob3ZlcmxheUZpbGVzLnZhbHVlQXQob3ZlcmxheUdyb3VwSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0cy0+YWRkR3JvdXBFbnRyeShvdmVybGF5RmlsZXMua2V5QXQob3ZlcmxheUdyb3VwSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiYXNlU2V0LT5nZXQoKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqYmFzZVNldCA9IG5ldyBSZXNvdXJjZVR5cGVTZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0cy0+Z2V0UmVzb3VyY2VzKCktPmFkZChTdHJpbmc4KHJlc1R5cGUpLCAqYmFzZVNldCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBncm91cCBkb2Vzbid0IGV4aXN0IChhIGZpbGUgdGhhdCdzIG9ubHkgaW4gdGhlIG92ZXJsYXkpCi0gICAgICAgICAgICAgICAgICAgICgqYmFzZVNldCktPmFkZChvdmVybGF5U2V0LT5rZXlBdChvdmVybGF5SW5kZXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlTZXQtPnZhbHVlQXQob3ZlcmxheUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBhbGwgZmxhdm9ycyBhcmUgZGVmaW5lZCBpbiB0aGUgcmVzb3VyY2VzLgotICAgICAgICAgICAgICAgICAgICBzcDxBYXB0R3JvdXA+IG92ZXJsYXlHcm91cCA9IG92ZXJsYXlTZXQtPnZhbHVlQXQob3ZlcmxheUluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgRGVmYXVsdEtleWVkVmVjdG9yPEFhcHRHcm91cEVudHJ5LCBzcDxBYXB0RmlsZT4gPiBvdmVybGF5RmlsZXMgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlHcm91cC0+Z2V0RmlsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG92ZXJsYXlHcm91cFNpemUgPSBvdmVybGF5RmlsZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvdmVybGF5R3JvdXBJbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUdyb3VwSW5kZXg8b3ZlcmxheUdyb3VwU2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5R3JvdXBJbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NldHMtPmFkZEdyb3VwRW50cnkob3ZlcmxheUZpbGVzLmtleUF0KG92ZXJsYXlHcm91cEluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyB0aGlzIG92ZXJsYXkgZGlkbid0IGhhdmUgcmVzb3VyY2VzIGZvciB0aGlzIHR5cGUKLSAgICAgICAgfQotICAgICAgICAvLyB0cnkgbmV4dCBvdmVybGF5Ci0gICAgICAgIG92ZXJsYXkgPSBvdmVybGF5LT5nZXRPdmVybGF5KCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0vKgotICogSW5zZXJ0cyBhbiBhdHRyaWJ1dGUgaW4gYSBnaXZlbiBub2RlLCBvbmx5IGlmIHRoZSBhdHRyaWJ1dGUgZG9lcyBub3QKLSAqIGV4aXN0LgotICogSWYgZXJyb3JPbkZhaWxlZEluc2VydCBpcyB0cnVlLCBhbmQgdGhlIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cywgcmV0dXJucyBmYWxzZS4KLSAqIFJldHVybnMgdHJ1ZSBvdGhlcndpc2UsIGV2ZW4gaWYgdGhlIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cy4KLSAqLwotYm9vbCBhZGRUYWdBdHRyaWJ1dGUoY29uc3Qgc3A8WE1MTm9kZT4mIG5vZGUsIGNvbnN0IGNoYXIqIG5zOCwKLSAgICAgICAgY29uc3QgY2hhciogYXR0cjgsIGNvbnN0IGNoYXIqIHZhbHVlLCBib29sIGVycm9yT25GYWlsZWRJbnNlcnQpCi17Ci0gICAgaWYgKHZhbHVlID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY29uc3QgU3RyaW5nMTYgbnMobnM4KTsKLSAgICBjb25zdCBTdHJpbmcxNiBhdHRyKGF0dHI4KTsKLQotICAgIGlmIChub2RlLT5nZXRBdHRyaWJ1dGUobnMsIGF0dHIpICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKGVycm9yT25GYWlsZWRJbnNlcnQpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IEFuZHJvaWRNYW5pZmVzdC54bWwgYWxyZWFkeSBkZWZpbmVzICVzIChpbiAlcyk7IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgY2Fubm90IGluc2VydCBuZXcgdmFsdWUgJXMuXG4iLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGF0dHIpLnN0cmluZygpLCBTdHJpbmc4KG5zKS5zdHJpbmcoKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBBbmRyb2lkTWFuaWZlc3QueG1sIGFscmVhZHkgZGVmaW5lcyAlcyAoaW4gJXMpOyIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgdXNpbmcgZXhpc3RpbmcgdmFsdWUgaW4gbWFuaWZlc3QuXG4iLAotICAgICAgICAgICAgICAgIFN0cmluZzgoYXR0cikuc3RyaW5nKCksIFN0cmluZzgobnMpLnN0cmluZygpKTsKLQotICAgICAgICAvLyBkb24ndCBzdG9wIHRoZSBidWlsZC4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgbm9kZS0+YWRkQXR0cmlidXRlKG5zLCBhdHRyLCBTdHJpbmcxNih2YWx1ZSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBmdWxseVF1YWxpZnlDbGFzc05hbWUoY29uc3QgU3RyaW5nOCYgcGFja2FnZSwgc3A8WE1MTm9kZT4gbm9kZSwKLSAgICAgICAgY29uc3QgU3RyaW5nMTYmIGF0dHJOYW1lKSB7Ci0gICAgWE1MTm9kZTo6YXR0cmlidXRlX2VudHJ5KiBhdHRyID0gbm9kZS0+ZWRpdEF0dHJpYnV0ZSgKLSAgICAgICAgICAgIFN0cmluZzE2KCJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiKSwgYXR0ck5hbWUpOwotICAgIGlmIChhdHRyICE9IE5VTEwpIHsKLSAgICAgICAgU3RyaW5nOCBuYW1lKGF0dHItPnN0cmluZyk7Ci0KLSAgICAgICAgLy8gYXNkZiAgICAgLS0+IHBhY2thZ2UuYXNkZgotICAgICAgICAvLyAuYXNkZiAgLmEuYiAgLS0+IHBhY2thZ2UuYXNkZiBwYWNrYWdlLmEuYgotICAgICAgICAvLyBhc2RmLmFkc2YgLS0+IGFzZGYuYXNkZgotICAgICAgICBTdHJpbmc4IGNsYXNzTmFtZTsKLSAgICAgICAgY29uc3QgY2hhciogcCA9IG5hbWUuc3RyaW5nKCk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHEgPSBzdHJjaHIocCwgJy4nKTsKLSAgICAgICAgaWYgKHAgPT0gcSkgewotICAgICAgICAgICAgY2xhc3NOYW1lICs9IHBhY2thZ2U7Ci0gICAgICAgICAgICBjbGFzc05hbWUgKz0gbmFtZTsKLSAgICAgICAgfSBlbHNlIGlmIChxID09IE5VTEwpIHsKLSAgICAgICAgICAgIGNsYXNzTmFtZSArPSBwYWNrYWdlOwotICAgICAgICAgICAgY2xhc3NOYW1lICs9ICIuIjsKLSAgICAgICAgICAgIGNsYXNzTmFtZSArPSBuYW1lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2xhc3NOYW1lICs9IG5hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgTk9JU1kocHJpbnRmKCJRdWFsaWZ5aW5nIGNsYXNzICclcycgdG8gJyVzJyIsIG5hbWUuc3RyaW5nKCksIGNsYXNzTmFtZS5zdHJpbmcoKSkpOwotICAgICAgICBhdHRyLT5zdHJpbmcuc2V0VG8oU3RyaW5nMTYoY2xhc3NOYW1lKSk7Ci0gICAgfQotfQotCi1zdGF0dXNfdCBtYXNzYWdlTWFuaWZlc3QoQnVuZGxlKiBidW5kbGUsIHNwPFhNTE5vZGU+IHJvb3QpCi17Ci0gICAgcm9vdCA9IHJvb3QtPnNlYXJjaEVsZW1lbnQoU3RyaW5nMTYoKSwgU3RyaW5nMTYoIm1hbmlmZXN0IikpOwotICAgIGlmIChyb290ID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJObyA8bWFuaWZlc3Q+IHRhZy5cbiIpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBib29sIGVycm9yT25GYWlsZWRJbnNlcnQgPSBidW5kbGUtPmdldEVycm9yT25GYWlsZWRJbnNlcnQoKTsKLQotICAgIGlmICghYWRkVGFnQXR0cmlidXRlKHJvb3QsIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgInZlcnNpb25Db2RlIiwKLSAgICAgICAgICAgIGJ1bmRsZS0+Z2V0VmVyc2lvbkNvZGUoKSwgZXJyb3JPbkZhaWxlZEluc2VydCkpIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIGlmICghYWRkVGFnQXR0cmlidXRlKHJvb3QsIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgInZlcnNpb25OYW1lIiwKLSAgICAgICAgICAgIGJ1bmRsZS0+Z2V0VmVyc2lvbk5hbWUoKSwgZXJyb3JPbkZhaWxlZEluc2VydCkpIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgaWYgKGJ1bmRsZS0+Z2V0TWluU2RrVmVyc2lvbigpICE9IE5VTEwKLSAgICAgICAgICAgIHx8IGJ1bmRsZS0+Z2V0VGFyZ2V0U2RrVmVyc2lvbigpICE9IE5VTEwKLSAgICAgICAgICAgIHx8IGJ1bmRsZS0+Z2V0TWF4U2RrVmVyc2lvbigpICE9IE5VTEwpIHsKLSAgICAgICAgc3A8WE1MTm9kZT4gdmVycyA9IHJvb3QtPmdldENoaWxkRWxlbWVudChTdHJpbmcxNigpLCBTdHJpbmcxNigidXNlcy1zZGsiKSk7Ci0gICAgICAgIGlmICh2ZXJzID09IE5VTEwpIHsKLSAgICAgICAgICAgIHZlcnMgPSBYTUxOb2RlOjpuZXdFbGVtZW50KHJvb3QtPmdldEZpbGVuYW1lKCksIFN0cmluZzE2KCksIFN0cmluZzE2KCJ1c2VzLXNkayIpKTsKLSAgICAgICAgICAgIHJvb3QtPmluc2VydENoaWxkQXQodmVycywgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWFkZFRhZ0F0dHJpYnV0ZSh2ZXJzLCBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJtaW5TZGtWZXJzaW9uIiwKLSAgICAgICAgICAgICAgICBidW5kbGUtPmdldE1pblNka1ZlcnNpb24oKSwgZXJyb3JPbkZhaWxlZEluc2VydCkpIHsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIGlmICghYWRkVGFnQXR0cmlidXRlKHZlcnMsIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgInRhcmdldFNka1ZlcnNpb24iLAotICAgICAgICAgICAgICAgIGJ1bmRsZS0+Z2V0VGFyZ2V0U2RrVmVyc2lvbigpLCBlcnJvck9uRmFpbGVkSW5zZXJ0KSkgewotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFhZGRUYWdBdHRyaWJ1dGUodmVycywgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAibWF4U2RrVmVyc2lvbiIsCi0gICAgICAgICAgICAgICAgYnVuZGxlLT5nZXRNYXhTZGtWZXJzaW9uKCksIGVycm9yT25GYWlsZWRJbnNlcnQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChidW5kbGUtPmdldERlYnVnTW9kZSgpKSB7Ci0gICAgICAgIHNwPFhNTE5vZGU+IGFwcGxpY2F0aW9uID0gcm9vdC0+Z2V0Q2hpbGRFbGVtZW50KFN0cmluZzE2KCksIFN0cmluZzE2KCJhcHBsaWNhdGlvbiIpKTsKLSAgICAgICAgaWYgKGFwcGxpY2F0aW9uICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmICghYWRkVGFnQXR0cmlidXRlKGFwcGxpY2F0aW9uLCBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJkZWJ1Z2dhYmxlIiwgInRydWUiLAotICAgICAgICAgICAgICAgICAgICBlcnJvck9uRmFpbGVkSW5zZXJ0KSkgewotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRGVhbCB3aXRoIG1hbmlmZXN0IHBhY2thZ2UgbmFtZSBvdmVycmlkZXMKLSAgICBjb25zdCBjaGFyKiBtYW5pZmVzdFBhY2thZ2VOYW1lT3ZlcnJpZGUgPSBidW5kbGUtPmdldE1hbmlmZXN0UGFja2FnZU5hbWVPdmVycmlkZSgpOwotICAgIGlmIChtYW5pZmVzdFBhY2thZ2VOYW1lT3ZlcnJpZGUgIT0gTlVMTCkgewotICAgICAgICAvLyBVcGRhdGUgdGhlIGFjdHVhbCBwYWNrYWdlIG5hbWUKLSAgICAgICAgWE1MTm9kZTo6YXR0cmlidXRlX2VudHJ5KiBhdHRyID0gcm9vdC0+ZWRpdEF0dHJpYnV0ZShTdHJpbmcxNigpLCBTdHJpbmcxNigicGFja2FnZSIpKTsKLSAgICAgICAgaWYgKGF0dHIgPT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJwYWNrYWdlIG5hbWUgaXMgcmVxdWlyZWQgd2l0aCAtLXJlbmFtZS1tYW5pZmVzdC1wYWNrYWdlLlxuIik7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmc4IG9yaWdQYWNrYWdlKGF0dHItPnN0cmluZyk7Ci0gICAgICAgIGF0dHItPnN0cmluZy5zZXRUbyhTdHJpbmcxNihtYW5pZmVzdFBhY2thZ2VOYW1lT3ZlcnJpZGUpKTsKLSAgICAgICAgTk9JU1kocHJpbnRmKCJPdmVycmlkaW5nIHBhY2thZ2UgJyVzJyB0byBiZSAnJXMnXG4iLCBvcmlnUGFja2FnZS5zdHJpbmcoKSwgbWFuaWZlc3RQYWNrYWdlTmFtZU92ZXJyaWRlKSk7Ci0KLSAgICAgICAgLy8gTWFrZSBjbGFzcyBuYW1lcyBmdWxseSBxdWFsaWZpZWQKLSAgICAgICAgc3A8WE1MTm9kZT4gYXBwbGljYXRpb24gPSByb290LT5nZXRDaGlsZEVsZW1lbnQoU3RyaW5nMTYoKSwgU3RyaW5nMTYoImFwcGxpY2F0aW9uIikpOwotICAgICAgICBpZiAoYXBwbGljYXRpb24gIT0gTlVMTCkgewotICAgICAgICAgICAgZnVsbHlRdWFsaWZ5Q2xhc3NOYW1lKG9yaWdQYWNrYWdlLCBhcHBsaWNhdGlvbiwgU3RyaW5nMTYoIm5hbWUiKSk7Ci0gICAgICAgICAgICBmdWxseVF1YWxpZnlDbGFzc05hbWUob3JpZ1BhY2thZ2UsIGFwcGxpY2F0aW9uLCBTdHJpbmcxNigiYmFja3VwQWdlbnQiKSk7Ci0KLSAgICAgICAgICAgIFZlY3RvcjxzcDxYTUxOb2RlPiA+JiBjaGlsZHJlbiA9IGNvbnN0X2Nhc3Q8VmVjdG9yPHNwPFhNTE5vZGU+ID4mPihhcHBsaWNhdGlvbi0+Z2V0Q2hpbGRyZW4oKSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgc3A8WE1MTm9kZT4gY2hpbGQgPSBjaGlsZHJlbi5lZGl0SXRlbUF0KGkpOwotICAgICAgICAgICAgICAgIFN0cmluZzggdGFnKGNoaWxkLT5nZXRFbGVtZW50TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAodGFnID09ICJhY3Rpdml0eSIgfHwgdGFnID09ICJzZXJ2aWNlIiB8fCB0YWcgPT0gInJlY2VpdmVyIiB8fCB0YWcgPT0gInByb3ZpZGVyIikgewotICAgICAgICAgICAgICAgICAgICBmdWxseVF1YWxpZnlDbGFzc05hbWUob3JpZ1BhY2thZ2UsIGNoaWxkLCBTdHJpbmcxNigibmFtZSIpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSAiYWN0aXZpdHktYWxpYXMiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bGx5UXVhbGlmeUNsYXNzTmFtZShvcmlnUGFja2FnZSwgY2hpbGQsIFN0cmluZzE2KCJuYW1lIikpOwotICAgICAgICAgICAgICAgICAgICBmdWxseVF1YWxpZnlDbGFzc05hbWUob3JpZ1BhY2thZ2UsIGNoaWxkLCBTdHJpbmcxNigidGFyZ2V0QWN0aXZpdHkiKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRGVhbCB3aXRoIG1hbmlmZXN0IHBhY2thZ2UgbmFtZSBvdmVycmlkZXMKLSAgICBjb25zdCBjaGFyKiBpbnN0cnVtZW50YXRpb25QYWNrYWdlTmFtZU92ZXJyaWRlID0gYnVuZGxlLT5nZXRJbnN0cnVtZW50YXRpb25QYWNrYWdlTmFtZU92ZXJyaWRlKCk7Ci0gICAgaWYgKGluc3RydW1lbnRhdGlvblBhY2thZ2VOYW1lT3ZlcnJpZGUgIT0gTlVMTCkgewotICAgICAgICAvLyBGaXggdXAgaW5zdHJ1bWVudGF0aW9uIHRhcmdldHMuCi0gICAgICAgIFZlY3RvcjxzcDxYTUxOb2RlPiA+JiBjaGlsZHJlbiA9IGNvbnN0X2Nhc3Q8VmVjdG9yPHNwPFhNTE5vZGU+ID4mPihyb290LT5nZXRDaGlsZHJlbigpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgc3A8WE1MTm9kZT4gY2hpbGQgPSBjaGlsZHJlbi5lZGl0SXRlbUF0KGkpOwotICAgICAgICAgICAgU3RyaW5nOCB0YWcoY2hpbGQtPmdldEVsZW1lbnROYW1lKCkpOwotICAgICAgICAgICAgaWYgKHRhZyA9PSAiaW5zdHJ1bWVudGF0aW9uIikgewotICAgICAgICAgICAgICAgIFhNTE5vZGU6OmF0dHJpYnV0ZV9lbnRyeSogYXR0ciA9IGNoaWxkLT5lZGl0QXR0cmlidXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYoImh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIpLCBTdHJpbmcxNigidGFyZ2V0UGFja2FnZSIpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXR0ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF0dHItPnN0cmluZy5zZXRUbyhTdHJpbmcxNihpbnN0cnVtZW50YXRpb25QYWNrYWdlTmFtZU92ZXJyaWRlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0jZGVmaW5lIEFTU0lHTl9JVChuKSBcCi0gICAgICAgIGRvIHsgXAotICAgICAgICAgICAgc3NpemVfdCBpbmRleCA9IHJlc291cmNlcy0+aW5kZXhPZktleShTdHJpbmc4KCNuKSk7IFwKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7IFwKLSAgICAgICAgICAgICAgICBuICMjIHMgPSByZXNvdXJjZXMtPnZhbHVlQXQoaW5kZXgpOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgfSB3aGlsZSAoMCkKLQotc3RhdHVzX3QgdXBkYXRlUHJlUHJvY2Vzc2VkQ2FjaGUoQnVuZGxlKiBidW5kbGUpCi17Ci0gICAgI2lmIEJFTkNITUFSSwotICAgIGZwcmludGYoc3Rkb3V0LCAiQkVOQ0hNQVJLOiBTdGFydGluZyBQTkcgUHJlUHJvY2Vzc2luZyBcbiIpOwotICAgIGxvbmcgc3RhcnRQTkdUaW1lID0gY2xvY2soKTsKLSAgICAjZW5kaWYgLyogQkVOQ0hNQVJLICovCi0KLSAgICBTdHJpbmc4IHNvdXJjZShidW5kbGUtPmdldFJlc291cmNlU291cmNlRGlycygpWzBdKTsKLSAgICBTdHJpbmc4IGRlc3QoYnVuZGxlLT5nZXRDcnVuY2hlZE91dHB1dERpcigpKTsKLQotICAgIEZpbGVGaW5kZXIqIGZmID0gbmV3IFN5c3RlbUZpbGVGaW5kZXIoKTsKLSAgICBDcnVuY2hDYWNoZSBjYyhzb3VyY2UsZGVzdCxmZik7Ci0KLSAgICBDYWNoZVVwZGF0ZXIqIGN1ID0gbmV3IFN5c3RlbUNhY2hlVXBkYXRlcihidW5kbGUpOwotICAgIHNpemVfdCBudW1GaWxlcyA9IGNjLmNydW5jaChjdSk7Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpCi0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiQ3J1bmNoZWQgJWQgUE5HIGZpbGVzIHRvIHVwZGF0ZSBjYWNoZVxuIiwgKGludCludW1GaWxlcyk7Ci0KLSAgICBkZWxldGUgZmY7Ci0gICAgZGVsZXRlIGN1OwotCi0gICAgI2lmIEJFTkNITUFSSwotICAgIGZwcmludGYoc3Rkb3V0LCAiQkVOQ0hNQVJLOiBFbmQgUE5HIFByZVByb2Nlc3NpbmcuIFRpbWUgRWxhcHNlZDogJWYgbXMgXG4iCi0gICAgICAgICAgICAsKGNsb2NrKCkgLSBzdGFydFBOR1RpbWUpLzEwMDAuMCk7Ci0gICAgI2VuZGlmIC8qIEJFTkNITUFSSyAqLwotICAgIHJldHVybiAwOwotfQotCi1zdGF0dXNfdCBidWlsZFJlc291cmNlcyhCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cykKLXsKLSAgICAvLyBGaXJzdCwgbG9vayBmb3IgYSBwYWNrYWdlIGZpbGUgdG8gcGFyc2UuICBUaGlzIGlzIHJlcXVpcmVkIHRvCi0gICAgLy8gYmUgYWJsZSB0byBnZW5lcmF0ZSB0aGUgcmVzb3VyY2UgaW5mb3JtYXRpb24uCi0gICAgc3A8QWFwdEdyb3VwPiBhbmRyb2lkTWFuaWZlc3RGaWxlID0KLSAgICAgICAgICAgIGFzc2V0cy0+Z2V0RmlsZXMoKS52YWx1ZUZvcihTdHJpbmc4KCJBbmRyb2lkTWFuaWZlc3QueG1sIikpOwotICAgIGlmIChhbmRyb2lkTWFuaWZlc3RGaWxlID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gQW5kcm9pZE1hbmlmZXN0LnhtbCBmaWxlIGZvdW5kLlxuIik7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIHN0YXR1c190IGVyciA9IHBhcnNlUGFja2FnZShidW5kbGUsIGFzc2V0cywgYW5kcm9pZE1hbmlmZXN0RmlsZSk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIE5PSVNZKHByaW50ZigiQ3JlYXRpbmcgcmVzb3VyY2VzIGZvciBwYWNrYWdlICVzXG4iLAotICAgICAgICAgICAgICAgICBhc3NldHMtPmdldFBhY2thZ2UoKS5zdHJpbmcoKSkpOwotCi0gICAgUmVzb3VyY2VUYWJsZSB0YWJsZShidW5kbGUsIFN0cmluZzE2KGFzc2V0cy0+Z2V0UGFja2FnZSgpKSk7Ci0gICAgZXJyID0gdGFibGUuYWRkSW5jbHVkZWRSZXNvdXJjZXMoYnVuZGxlLCBhc3NldHMpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBOT0lTWShwcmludGYoIkZvdW5kICVkIGluY2x1ZGVkIHJlc291cmNlIHBhY2thZ2VzXG4iLCAoaW50KXRhYmxlLnNpemUoKSkpOwotCi0gICAgLy8gU3RhbmRhcmQgZmxhZ3MgZm9yIGNvbXBpbGVkIFhNTCBhbmQgb3B0aW9uYWwgVVRGLTggZW5jb2RpbmcKLSAgICBpbnQgeG1sRmxhZ3MgPSBYTUxfQ09NUElMRV9TVEFOREFSRF9SRVNPVVJDRTsKLQotICAgIC8qIE9ubHkgZW5hYmxlIFVURi04IGlmIHRoZSBjYWxsZXIgb2YgYWFwdCBkaWRuJ3Qgc3BlY2lmaWNhbGx5Ci0gICAgICogcmVxdWVzdCBVVEYtMTYgZW5jb2RpbmcgYW5kIHRoZSBwYXJhbWV0ZXJzIG9mIHRoaXMgcGFja2FnZQotICAgICAqIGFsbG93IFVURi04IHRvIGJlIHVzZWQuCi0gICAgICovCi0gICAgaWYgKCFidW5kbGUtPmdldFVURjE2U3RyaW5nc09wdGlvbigpKSB7Ci0gICAgICAgIHhtbEZsYWdzIHw9IFhNTF9DT01QSUxFX1VURjg7Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBGaXJzdCwgZ2F0aGVyIGFsbCByZXNvdXJjZSBpbmZvcm1hdGlvbi4KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gcmVzVHlwZSAtPiBsZWFmTmFtZSAtPiBncm91cAotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPFJlc291cmNlVHlwZVNldD4gPiAqcmVzb3VyY2VzID0KLSAgICAgICAgICAgIG5ldyBLZXllZFZlY3RvcjxTdHJpbmc4LCBzcDxSZXNvdXJjZVR5cGVTZXQ+ID47Ci0gICAgY29sbGVjdF9maWxlcyhhc3NldHMsIHJlc291cmNlcyk7Ci0KLSAgICBzcDxSZXNvdXJjZVR5cGVTZXQ+IGRyYXdhYmxlczsKLSAgICBzcDxSZXNvdXJjZVR5cGVTZXQ+IGxheW91dHM7Ci0gICAgc3A8UmVzb3VyY2VUeXBlU2V0PiBhbmltczsKLSAgICBzcDxSZXNvdXJjZVR5cGVTZXQ+IGFuaW1hdG9yczsKLSAgICBzcDxSZXNvdXJjZVR5cGVTZXQ+IGludGVycG9sYXRvcnM7Ci0gICAgc3A8UmVzb3VyY2VUeXBlU2V0PiB0cmFuc2l0aW9uczsKLSAgICBzcDxSZXNvdXJjZVR5cGVTZXQ+IHhtbHM7Ci0gICAgc3A8UmVzb3VyY2VUeXBlU2V0PiByYXdzOwotICAgIHNwPFJlc291cmNlVHlwZVNldD4gY29sb3JzOwotICAgIHNwPFJlc291cmNlVHlwZVNldD4gbWVudXM7Ci0gICAgc3A8UmVzb3VyY2VUeXBlU2V0PiBtaXBtYXBzOwotCi0gICAgQVNTSUdOX0lUKGRyYXdhYmxlKTsKLSAgICBBU1NJR05fSVQobGF5b3V0KTsKLSAgICBBU1NJR05fSVQoYW5pbSk7Ci0gICAgQVNTSUdOX0lUKGFuaW1hdG9yKTsKLSAgICBBU1NJR05fSVQoaW50ZXJwb2xhdG9yKTsKLSAgICBBU1NJR05fSVQodHJhbnNpdGlvbik7Ci0gICAgQVNTSUdOX0lUKHhtbCk7Ci0gICAgQVNTSUdOX0lUKHJhdyk7Ci0gICAgQVNTSUdOX0lUKGNvbG9yKTsKLSAgICBBU1NJR05fSVQobWVudSk7Ci0gICAgQVNTSUdOX0lUKG1pcG1hcCk7Ci0KLSAgICBhc3NldHMtPnNldFJlc291cmNlcyhyZXNvdXJjZXMpOwotICAgIC8vIG5vdyBnbyB0aHJvdWdoIGFueSByZXNvdXJjZSBvdmVybGF5cyBhbmQgY29sbGVjdCB0aGVpciBmaWxlcwotICAgIHNwPEFhcHRBc3NldHM+IGN1cnJlbnQgPSBhc3NldHMtPmdldE92ZXJsYXkoKTsKLSAgICB3aGlsZShjdXJyZW50LmdldCgpKSB7Ci0gICAgICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPFJlc291cmNlVHlwZVNldD4gPiAqcmVzb3VyY2VzID0KLSAgICAgICAgICAgICAgICBuZXcgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgc3A8UmVzb3VyY2VUeXBlU2V0PiA+OwotICAgICAgICBjdXJyZW50LT5zZXRSZXNvdXJjZXMocmVzb3VyY2VzKTsKLSAgICAgICAgY29sbGVjdF9maWxlcyhjdXJyZW50LCByZXNvdXJjZXMpOwotICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+Z2V0T3ZlcmxheSgpOwotICAgIH0KLSAgICAvLyBhcHBseSB0aGUgb3ZlcmxheSBmaWxlcyB0byB0aGUgYmFzZSBzZXQKLSAgICBpZiAoIWFwcGx5RmlsZU92ZXJsYXkoYnVuZGxlLCBhc3NldHMsICZkcmF3YWJsZXMsICJkcmF3YWJsZSIpIHx8Ci0gICAgICAgICAgICAhYXBwbHlGaWxlT3ZlcmxheShidW5kbGUsIGFzc2V0cywgJmxheW91dHMsICJsYXlvdXQiKSB8fAotICAgICAgICAgICAgIWFwcGx5RmlsZU92ZXJsYXkoYnVuZGxlLCBhc3NldHMsICZhbmltcywgImFuaW0iKSB8fAotICAgICAgICAgICAgIWFwcGx5RmlsZU92ZXJsYXkoYnVuZGxlLCBhc3NldHMsICZhbmltYXRvcnMsICJhbmltYXRvciIpIHx8Ci0gICAgICAgICAgICAhYXBwbHlGaWxlT3ZlcmxheShidW5kbGUsIGFzc2V0cywgJmludGVycG9sYXRvcnMsICJpbnRlcnBvbGF0b3IiKSB8fAotICAgICAgICAgICAgIWFwcGx5RmlsZU92ZXJsYXkoYnVuZGxlLCBhc3NldHMsICZ0cmFuc2l0aW9ucywgInRyYW5zaXRpb24iKSB8fAotICAgICAgICAgICAgIWFwcGx5RmlsZU92ZXJsYXkoYnVuZGxlLCBhc3NldHMsICZ4bWxzLCAieG1sIikgfHwKLSAgICAgICAgICAgICFhcHBseUZpbGVPdmVybGF5KGJ1bmRsZSwgYXNzZXRzLCAmcmF3cywgInJhdyIpIHx8Ci0gICAgICAgICAgICAhYXBwbHlGaWxlT3ZlcmxheShidW5kbGUsIGFzc2V0cywgJmNvbG9ycywgImNvbG9yIikgfHwKLSAgICAgICAgICAgICFhcHBseUZpbGVPdmVybGF5KGJ1bmRsZSwgYXNzZXRzLCAmbWVudXMsICJtZW51IikgfHwKLSAgICAgICAgICAgICFhcHBseUZpbGVPdmVybGF5KGJ1bmRsZSwgYXNzZXRzLCAmbWlwbWFwcywgIm1pcG1hcCIpKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIGJvb2wgaGFzRXJyb3JzID0gZmFsc2U7Ci0KLSAgICBpZiAoZHJhd2FibGVzICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0T3V0cHV0QVBLRmlsZSgpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGVyciA9IHByZVByb2Nlc3NJbWFnZXMoYnVuZGxlLCBhc3NldHMsIGRyYXdhYmxlcywgImRyYXdhYmxlIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVyciA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgZXJyID0gbWFrZUZpbGVSZXNvdXJjZXMoYnVuZGxlLCBhc3NldHMsICZ0YWJsZSwgZHJhd2FibGVzLCAiZHJhd2FibGUiKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtaXBtYXBzICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0T3V0cHV0QVBLRmlsZSgpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGVyciA9IHByZVByb2Nlc3NJbWFnZXMoYnVuZGxlLCBhc3NldHMsIG1pcG1hcHMsICJtaXBtYXAiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXJyID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBlcnIgPSBtYWtlRmlsZVJlc291cmNlcyhidW5kbGUsIGFzc2V0cywgJnRhYmxlLCBtaXBtYXBzLCAibWlwbWFwIik7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobGF5b3V0cyAhPSBOVUxMKSB7Ci0gICAgICAgIGVyciA9IG1ha2VGaWxlUmVzb3VyY2VzKGJ1bmRsZSwgYXNzZXRzLCAmdGFibGUsIGxheW91dHMsICJsYXlvdXQiKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChhbmltcyAhPSBOVUxMKSB7Ci0gICAgICAgIGVyciA9IG1ha2VGaWxlUmVzb3VyY2VzKGJ1bmRsZSwgYXNzZXRzLCAmdGFibGUsIGFuaW1zLCAiYW5pbSIpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFuaW1hdG9ycyAhPSBOVUxMKSB7Ci0gICAgICAgIGVyciA9IG1ha2VGaWxlUmVzb3VyY2VzKGJ1bmRsZSwgYXNzZXRzLCAmdGFibGUsIGFuaW1hdG9ycywgImFuaW1hdG9yIik7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodHJhbnNpdGlvbnMgIT0gTlVMTCkgewotICAgICAgICBlcnIgPSBtYWtlRmlsZVJlc291cmNlcyhidW5kbGUsIGFzc2V0cywgJnRhYmxlLCB0cmFuc2l0aW9ucywgInRyYW5zaXRpb24iKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChpbnRlcnBvbGF0b3JzICE9IE5VTEwpIHsKLSAgICAgICAgZXJyID0gbWFrZUZpbGVSZXNvdXJjZXMoYnVuZGxlLCBhc3NldHMsICZ0YWJsZSwgaW50ZXJwb2xhdG9ycywgImludGVycG9sYXRvciIpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHhtbHMgIT0gTlVMTCkgewotICAgICAgICBlcnIgPSBtYWtlRmlsZVJlc291cmNlcyhidW5kbGUsIGFzc2V0cywgJnRhYmxlLCB4bWxzLCAieG1sIik7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmF3cyAhPSBOVUxMKSB7Ci0gICAgICAgIGVyciA9IG1ha2VGaWxlUmVzb3VyY2VzKGJ1bmRsZSwgYXNzZXRzLCAmdGFibGUsIHJhd3MsICJyYXciKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIGNvbXBpbGUgcmVzb3VyY2VzCi0gICAgY3VycmVudCA9IGFzc2V0czsKLSAgICB3aGlsZShjdXJyZW50LmdldCgpKSB7Ci0gICAgICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIHNwPFJlc291cmNlVHlwZVNldD4gPiAqcmVzb3VyY2VzID0KLSAgICAgICAgICAgICAgICBjdXJyZW50LT5nZXRSZXNvdXJjZXMoKTsKLQotICAgICAgICBzc2l6ZV90IGluZGV4ID0gcmVzb3VyY2VzLT5pbmRleE9mS2V5KFN0cmluZzgoInZhbHVlcyIpKTsKLSAgICAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgICAgIFJlc291cmNlRGlySXRlcmF0b3IgaXQocmVzb3VyY2VzLT52YWx1ZUF0KGluZGV4KSwgU3RyaW5nOCgidmFsdWVzIikpOwotICAgICAgICAgICAgc3NpemVfdCByZXM7Ci0gICAgICAgICAgICB3aGlsZSAoKHJlcz1pdC5uZXh0KCkpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgc3A8QWFwdEZpbGU+IGZpbGUgPSBpdC5nZXRGaWxlKCk7Ci0gICAgICAgICAgICAgICAgcmVzID0gY29tcGlsZVJlc291cmNlRmlsZShidW5kbGUsIGFzc2V0cywgZmlsZSwgaXQuZ2V0UGFyYW1zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudCE9YXNzZXRzKSwgJnRhYmxlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5nZXRPdmVybGF5KCk7Ci0gICAgfQotCi0gICAgaWYgKGNvbG9ycyAhPSBOVUxMKSB7Ci0gICAgICAgIGVyciA9IG1ha2VGaWxlUmVzb3VyY2VzKGJ1bmRsZSwgYXNzZXRzLCAmdGFibGUsIGNvbG9ycywgImNvbG9yIik7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobWVudXMgIT0gTlVMTCkgewotICAgICAgICBlcnIgPSBtYWtlRmlsZVJlc291cmNlcyhidW5kbGUsIGFzc2V0cywgJnRhYmxlLCBtZW51cywgIm1lbnUiKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gQXNzaWdubWVudCBvZiByZXNvdXJjZSBJRHMgYW5kIGluaXRpYWwgZ2VuZXJhdGlvbiBvZiByZXNvdXJjZSB0YWJsZS4KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgaWYgKHRhYmxlLmhhc1Jlc291cmNlcygpKSB7Ci0gICAgICAgIHNwPEFhcHRGaWxlPiByZXNGaWxlKGdldFJlc291cmNlRmlsZShhc3NldHMpKTsKLSAgICAgICAgaWYgKHJlc0ZpbGUgPT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogdW5hYmxlIHRvIGdlbmVyYXRlIGVudHJ5IGZvciByZXNvdXJjZSBkYXRhXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgZXJyID0gdGFibGUuYXNzaWduUmVzb3VyY2VJZHMoKTsKLSAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBGaW5hbGx5LCB3ZSBjYW4gbm93IHdlIGNhbiBjb21waWxlIFhNTCBmaWxlcywgd2hpY2ggbWF5IHJlZmVyZW5jZQotICAgIC8vIHJlc291cmNlcy4KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgaWYgKGxheW91dHMgIT0gTlVMTCkgewotICAgICAgICBSZXNvdXJjZURpckl0ZXJhdG9yIGl0KGxheW91dHMsIFN0cmluZzgoImxheW91dCIpKTsKLSAgICAgICAgd2hpbGUgKChlcnI9aXQubmV4dCgpKSA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgU3RyaW5nOCBzcmMgPSBpdC5nZXRGaWxlKCktPmdldFByaW50YWJsZVNvdXJjZSgpOwotICAgICAgICAgICAgZXJyID0gY29tcGlsZVhtbEZpbGUoYXNzZXRzLCBpdC5nZXRGaWxlKCksICZ0YWJsZSwgeG1sRmxhZ3MpOwotICAgICAgICAgICAgaWYgKGVyciA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIFJlc1hNTFRyZWUgYmxvY2s7Ci0gICAgICAgICAgICAgICAgYmxvY2suc2V0VG8oaXQuZ2V0RmlsZSgpLT5nZXREYXRhKCksIGl0LmdldEZpbGUoKS0+Z2V0U2l6ZSgpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBjaGVja0ZvcklkcyhzcmMsIGJsb2NrKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlcnIgPSBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAoYW5pbXMgIT0gTlVMTCkgewotICAgICAgICBSZXNvdXJjZURpckl0ZXJhdG9yIGl0KGFuaW1zLCBTdHJpbmc4KCJhbmltIikpOwotICAgICAgICB3aGlsZSAoKGVycj1pdC5uZXh0KCkpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBlcnIgPSBjb21waWxlWG1sRmlsZShhc3NldHMsIGl0LmdldEZpbGUoKSwgJnRhYmxlLCB4bWxGbGFncyk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlcnIgPSBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAoYW5pbWF0b3JzICE9IE5VTEwpIHsKLSAgICAgICAgUmVzb3VyY2VEaXJJdGVyYXRvciBpdChhbmltYXRvcnMsIFN0cmluZzgoImFuaW1hdG9yIikpOwotICAgICAgICB3aGlsZSAoKGVycj1pdC5uZXh0KCkpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBlcnIgPSBjb21waWxlWG1sRmlsZShhc3NldHMsIGl0LmdldEZpbGUoKSwgJnRhYmxlLCB4bWxGbGFncyk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlcnIgPSBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAoaW50ZXJwb2xhdG9ycyAhPSBOVUxMKSB7Ci0gICAgICAgIFJlc291cmNlRGlySXRlcmF0b3IgaXQoaW50ZXJwb2xhdG9ycywgU3RyaW5nOCgiaW50ZXJwb2xhdG9yIikpOwotICAgICAgICB3aGlsZSAoKGVycj1pdC5uZXh0KCkpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBlcnIgPSBjb21waWxlWG1sRmlsZShhc3NldHMsIGl0LmdldEZpbGUoKSwgJnRhYmxlLCB4bWxGbGFncyk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlcnIgPSBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAodHJhbnNpdGlvbnMgIT0gTlVMTCkgewotICAgICAgICBSZXNvdXJjZURpckl0ZXJhdG9yIGl0KHRyYW5zaXRpb25zLCBTdHJpbmc4KCJ0cmFuc2l0aW9uIikpOwotICAgICAgICB3aGlsZSAoKGVycj1pdC5uZXh0KCkpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBlcnIgPSBjb21waWxlWG1sRmlsZShhc3NldHMsIGl0LmdldEZpbGUoKSwgJnRhYmxlLCB4bWxGbGFncyk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlcnIgPSBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAoeG1scyAhPSBOVUxMKSB7Ci0gICAgICAgIFJlc291cmNlRGlySXRlcmF0b3IgaXQoeG1scywgU3RyaW5nOCgieG1sIikpOwotICAgICAgICB3aGlsZSAoKGVycj1pdC5uZXh0KCkpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBlcnIgPSBjb21waWxlWG1sRmlsZShhc3NldHMsIGl0LmdldEZpbGUoKSwgJnRhYmxlLCB4bWxGbGFncyk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlcnIgPSBOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAoZHJhd2FibGVzICE9IE5VTEwpIHsKLSAgICAgICAgZXJyID0gcG9zdFByb2Nlc3NJbWFnZXMoYXNzZXRzLCAmdGFibGUsIGRyYXdhYmxlcyk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29sb3JzICE9IE5VTEwpIHsKLSAgICAgICAgUmVzb3VyY2VEaXJJdGVyYXRvciBpdChjb2xvcnMsIFN0cmluZzgoImNvbG9yIikpOwotICAgICAgICB3aGlsZSAoKGVycj1pdC5uZXh0KCkpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgZXJyID0gY29tcGlsZVhtbEZpbGUoYXNzZXRzLCBpdC5nZXRGaWxlKCksICZ0YWJsZSwgeG1sRmxhZ3MpOwotICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXJyIDwgTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZXJyID0gTk9fRVJST1I7Ci0gICAgfQotCi0gICAgaWYgKG1lbnVzICE9IE5VTEwpIHsKLSAgICAgICAgUmVzb3VyY2VEaXJJdGVyYXRvciBpdChtZW51cywgU3RyaW5nOCgibWVudSIpKTsKLSAgICAgICAgd2hpbGUgKChlcnI9aXQubmV4dCgpKSA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgU3RyaW5nOCBzcmMgPSBpdC5nZXRGaWxlKCktPmdldFByaW50YWJsZVNvdXJjZSgpOwotICAgICAgICAgICAgZXJyID0gY29tcGlsZVhtbEZpbGUoYXNzZXRzLCBpdC5nZXRGaWxlKCksICZ0YWJsZSwgeG1sRmxhZ3MpOwotICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZXNYTUxUcmVlIGJsb2NrOwotICAgICAgICAgICAgYmxvY2suc2V0VG8oaXQuZ2V0RmlsZSgpLT5nZXREYXRhKCksIGl0LmdldEZpbGUoKS0+Z2V0U2l6ZSgpLCB0cnVlKTsKLSAgICAgICAgICAgIGNoZWNrRm9ySWRzKHNyYywgYmxvY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVyciA9IE5PX0VSUk9SOwotICAgIH0KLQotICAgIGlmICh0YWJsZS52YWxpZGF0ZUxvY2FsaXphdGlvbnMoKSkgewotICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChoYXNFcnJvcnMpIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgY29uc3Qgc3A8QWFwdEZpbGU+IG1hbmlmZXN0RmlsZShhbmRyb2lkTWFuaWZlc3RGaWxlLT5nZXRGaWxlcygpLnZhbHVlQXQoMCkpOwotICAgIFN0cmluZzggbWFuaWZlc3RQYXRoKG1hbmlmZXN0RmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCkpOwotCi0gICAgLy8gR2VuZXJhdGUgZmluYWwgY29tcGlsZWQgbWFuaWZlc3QgZmlsZS4KLSAgICBtYW5pZmVzdEZpbGUtPmNsZWFyRGF0YSgpOwotICAgIHNwPFhNTE5vZGU+IG1hbmlmZXN0VHJlZSA9IFhNTE5vZGU6OnBhcnNlKG1hbmlmZXN0RmlsZSk7Ci0gICAgaWYgKG1hbmlmZXN0VHJlZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICBlcnIgPSBtYXNzYWdlTWFuaWZlc3QoYnVuZGxlLCBtYW5pZmVzdFRyZWUpOwotICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLSAgICBlcnIgPSBjb21waWxlWG1sRmlsZShhc3NldHMsIG1hbmlmZXN0VHJlZSwgbWFuaWZlc3RGaWxlLCAmdGFibGUpOwotICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIC8vYmxvY2sucmVzdGFydCgpOwotICAgIC8vcHJpbnRYTUxCbG9jaygmYmxvY2spOwotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBHZW5lcmF0ZSB0aGUgZmluYWwgcmVzb3VyY2UgdGFibGUuCi0gICAgLy8gUmUtZmxhdHRlbiBiZWNhdXNlIHdlIG1heSBoYXZlIGFkZGVkIG5ldyByZXNvdXJjZSBJRHMKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgUmVzVGFibGUgZmluYWxSZXNUYWJsZTsKLSAgICBzcDxBYXB0RmlsZT4gcmVzRmlsZTsKLQotICAgIGlmICh0YWJsZS5oYXNSZXNvdXJjZXMoKSkgewotICAgICAgICBzcDxBYXB0U3ltYm9scz4gc3ltYm9scyA9IGFzc2V0cy0+Z2V0U3ltYm9sc0ZvcihTdHJpbmc4KCJSIikpOwotICAgICAgICBlcnIgPSB0YWJsZS5hZGRTeW1ib2xzKHN5bWJvbHMpOwotICAgICAgICBpZiAoZXJyIDwgTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXNGaWxlID0gZ2V0UmVzb3VyY2VGaWxlKGFzc2V0cyk7Ci0gICAgICAgIGlmIChyZXNGaWxlID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHVuYWJsZSB0byBnZW5lcmF0ZSBlbnRyeSBmb3IgcmVzb3VyY2UgZGF0YVxuIik7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGVyciA9IHRhYmxlLmZsYXR0ZW4oYnVuZGxlLCByZXNGaWxlKTsKLSAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJ1bmRsZS0+Z2V0UHVibGljT3V0cHV0RmlsZSgpKSB7Ci0gICAgICAgICAgICBGSUxFKiBmcCA9IGZvcGVuKGJ1bmRsZS0+Z2V0UHVibGljT3V0cHV0RmlsZSgpLCAidysiKTsKLSAgICAgICAgICAgIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW5hYmxlIHRvIG9wZW4gcHVibGljIGRlZmluaXRpb25zIG91dHB1dCBmaWxlICVzOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyKilidW5kbGUtPmdldFB1YmxpY091dHB1dEZpbGUoKSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiICBXcml0aW5nIHB1YmxpYyBkZWZpbml0aW9ucyB0byAlcy5cbiIsIGJ1bmRsZS0+Z2V0UHVibGljT3V0cHV0RmlsZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRhYmxlLndyaXRlUHVibGljRGVmaW5pdGlvbnMoU3RyaW5nMTYoYXNzZXRzLT5nZXRQYWNrYWdlKCkpLCBmcCk7Ci0gICAgICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVhZCByZXNvdXJjZXMgYmFjayBpbiwKLSAgICAgICAgZmluYWxSZXNUYWJsZS5hZGQocmVzRmlsZS0+Z2V0RGF0YSgpLCByZXNGaWxlLT5nZXRTaXplKCksIE5VTEwpOwotCi0jaWYgMAotICAgICAgICBOT0lTWSgKLSAgICAgICAgICAgICAgcHJpbnRmKCJHZW5lcmF0ZWQgcmVzb3VyY2VzOlxuIik7Ci0gICAgICAgICAgICAgIGZpbmFsUmVzVGFibGUucHJpbnQoKTsKLSAgICAgICAgKQotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gUGVyZm9ybSBhIGJhc2ljIHZhbGlkYXRpb24gb2YgdGhlIG1hbmlmZXN0IGZpbGUuICBUaGlzIHRpbWUgd2UKLSAgICAvLyBwYXJzZSBpdCB3aXRoIHRoZSBjb21tZW50cyBpbnRhY3QsIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIHRvCi0gICAgLy8gZ2VuZXJhdGUgamF2YSBkb2NzLi4uICBzbyB3ZSBhcmUgbm90IGdvaW5nIHRvIHdyaXRlIHRoaXMgb25lCi0gICAgLy8gYmFjayBvdXQgdG8gdGhlIGZpbmFsIG1hbmlmZXN0IGRhdGEuCi0gICAgc3A8QWFwdEZpbGU+IG91dE1hbmlmZXN0RmlsZSA9IG5ldyBBYXB0RmlsZShtYW5pZmVzdEZpbGUtPmdldFNvdXJjZUZpbGUoKSwKLSAgICAgICAgICAgIG1hbmlmZXN0RmlsZS0+Z2V0R3JvdXBFbnRyeSgpLAotICAgICAgICAgICAgbWFuaWZlc3RGaWxlLT5nZXRSZXNvdXJjZVR5cGUoKSk7Ci0gICAgZXJyID0gY29tcGlsZVhtbEZpbGUoYXNzZXRzLCBtYW5pZmVzdEZpbGUsCi0gICAgICAgICAgICBvdXRNYW5pZmVzdEZpbGUsICZ0YWJsZSwKLSAgICAgICAgICAgIFhNTF9DT01QSUxFX0FTU0lHTl9BVFRSSUJVVEVfSURTCi0gICAgICAgICAgICB8IFhNTF9DT01QSUxFX1NUUklQX1dISVRFU1BBQ0UgfCBYTUxfQ09NUElMRV9TVFJJUF9SQVdfVkFMVUVTKTsKLSAgICBpZiAoZXJyIDwgTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgUmVzWE1MVHJlZSBibG9jazsKLSAgICBibG9jay5zZXRUbyhvdXRNYW5pZmVzdEZpbGUtPmdldERhdGEoKSwgb3V0TWFuaWZlc3RGaWxlLT5nZXRTaXplKCksIHRydWUpOwotICAgIFN0cmluZzE2IG1hbmlmZXN0MTYoIm1hbmlmZXN0Iik7Ci0gICAgU3RyaW5nMTYgcGVybWlzc2lvbjE2KCJwZXJtaXNzaW9uIik7Ci0gICAgU3RyaW5nMTYgcGVybWlzc2lvbl9ncm91cDE2KCJwZXJtaXNzaW9uLWdyb3VwIik7Ci0gICAgU3RyaW5nMTYgdXNlc19wZXJtaXNzaW9uMTYoInVzZXMtcGVybWlzc2lvbiIpOwotICAgIFN0cmluZzE2IGluc3RydW1lbnRhdGlvbjE2KCJpbnN0cnVtZW50YXRpb24iKTsKLSAgICBTdHJpbmcxNiBhcHBsaWNhdGlvbjE2KCJhcHBsaWNhdGlvbiIpOwotICAgIFN0cmluZzE2IHByb3ZpZGVyMTYoInByb3ZpZGVyIik7Ci0gICAgU3RyaW5nMTYgc2VydmljZTE2KCJzZXJ2aWNlIik7Ci0gICAgU3RyaW5nMTYgcmVjZWl2ZXIxNigicmVjZWl2ZXIiKTsKLSAgICBTdHJpbmcxNiBhY3Rpdml0eTE2KCJhY3Rpdml0eSIpOwotICAgIFN0cmluZzE2IGFjdGlvbjE2KCJhY3Rpb24iKTsKLSAgICBTdHJpbmcxNiBjYXRlZ29yeTE2KCJjYXRlZ29yeSIpOwotICAgIFN0cmluZzE2IGRhdGExNigic2NoZW1lIik7Ci0gICAgY29uc3QgY2hhciogcGFja2FnZUlkZW50Q2hhcnMgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCi0gICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi5fMDEyMzQ1Njc4OSI7Ci0gICAgY29uc3QgY2hhciogcGFja2FnZUlkZW50Q2hhcnNXaXRoVGhlU3R1cGlkID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgotICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVouXzAxMjM0NTY3ODktIjsKLSAgICBjb25zdCBjaGFyKiBjbGFzc0lkZW50Q2hhcnMgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCi0gICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi5fMDEyMzQ1Njc4OSQiOwotICAgIGNvbnN0IGNoYXIqIHByb2Nlc3NJZGVudENoYXJzID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgotICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVouXzAxMjM0NTY3ODk6IjsKLSAgICBjb25zdCBjaGFyKiBhdXRob3JpdGllc0lkZW50Q2hhcnMgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCi0gICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi5fMDEyMzQ1Njc4OS06OyI7Ci0gICAgY29uc3QgY2hhciogdHlwZUlkZW50Q2hhcnMgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCi0gICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi5fMDEyMzQ1Njc4OTotLyorIjsKLSAgICBjb25zdCBjaGFyKiBzY2hlbWVJZGVudENoYXJzID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgotICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVouXzAxMjM0NTY3ODktIjsKLSAgICBSZXNYTUxUcmVlOjpldmVudF9jb2RlX3QgY29kZTsKLSAgICBzcDxBYXB0U3ltYm9scz4gcGVybWlzc2lvblN5bWJvbHM7Ci0gICAgc3A8QWFwdFN5bWJvbHM+IHBlcm1pc3Npb25Hcm91cFN5bWJvbHM7Ci0gICAgd2hpbGUgKChjb2RlPWJsb2NrLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UCi0gICAgICAgICAgICYmIGNvZGUgPiBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICAgICAgaWYgKGJsb2NrLmdldEVsZW1lbnROYW1lc3BhY2UoJmxlbikgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBtYW5pZmVzdDE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLCBOVUxMLCAicGFja2FnZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlSWRlbnRDaGFycywgdHJ1ZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUF0dHIobWFuaWZlc3RQYXRoLCBmaW5hbFJlc1RhYmxlLCBibG9jaywgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoYXJlZFVzZXJJZCIsIHBhY2thZ2VJZGVudENoYXJzLCBmYWxzZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgcGVybWlzc2lvbjE2LnN0cmluZygpKSA9PSAwCi0gICAgICAgICAgICAgICAgICAgIHx8IHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBwZXJtaXNzaW9uX2dyb3VwMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBjb25zdCBib29sIGlzR3JvdXAgPSBzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25fZ3JvdXAxNi5zdHJpbmcoKSkgPT0gMDsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiwgaXNHcm91cCA/IHBhY2thZ2VJZGVudENoYXJzV2l0aFRoZVN0dXBpZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwYWNrYWdlSWRlbnRDaGFycywgdHJ1ZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyBzcmNQb3MobWFuaWZlc3RQYXRoLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpOwotICAgICAgICAgICAgICAgIHNwPEFhcHRTeW1ib2xzPiBzeW1zOwotICAgICAgICAgICAgICAgIGlmICghaXNHcm91cCkgewotICAgICAgICAgICAgICAgICAgICBzeW1zID0gcGVybWlzc2lvblN5bWJvbHM7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzeW1zID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwPEFhcHRTeW1ib2xzPiBzeW1ib2xzID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXRzLT5nZXRTeW1ib2xzRm9yKFN0cmluZzgoIk1hbmlmZXN0IikpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3ltcyA9IHBlcm1pc3Npb25TeW1ib2xzID0gc3ltYm9scy0+YWRkTmVzdGVkU3ltYm9sKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KCJwZXJtaXNzaW9uIiksIHNyY1Bvcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzeW1zID0gcGVybWlzc2lvbkdyb3VwU3ltYm9sczsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bXMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3A8QWFwdFN5bWJvbHM+IHN5bWJvbHMgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldHMtPmdldFN5bWJvbHNGb3IoU3RyaW5nOCgiTWFuaWZlc3QiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeW1zID0gcGVybWlzc2lvbkdyb3VwU3ltYm9scyA9IHN5bWJvbHMtPmFkZE5lc3RlZFN5bWJvbCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCgicGVybWlzc2lvbl9ncm91cCIpLCBzcmNQb3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgICAgICAgICAgc3NpemVfdCBpbmRleCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAibmFtZSIpOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBpZCA9IGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGluZGV4LCAmbGVuKTsKLSAgICAgICAgICAgICAgICBpZiAoaWQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIG5hbWUgYXR0cmlidXRlIGluIGVsZW1lbnQgPCVzPi5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RQYXRoLnN0cmluZygpLCBibG9jay5nZXRMaW5lTnVtYmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3RyaW5nOCBpZFN0cihpZCk7Ci0gICAgICAgICAgICAgICAgY2hhciogcCA9IGlkU3RyLmxvY2tCdWZmZXIoaWRTdHIuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBjaGFyKiBlID0gcCArIGlkU3RyLnNpemUoKTsKLSAgICAgICAgICAgICAgICBib29sIGJlZ2luc193aXRoX2RpZ2l0ID0gdHJ1ZTsgIC8vIGluaXQgdG8gdHJ1ZSBzbyBhbiBlbXB0eSBzdHJpbmcgZmFpbHMKLSAgICAgICAgICAgICAgICB3aGlsZSAoZSA+IHApIHsKLSAgICAgICAgICAgICAgICAgICAgZS0tOwotICAgICAgICAgICAgICAgICAgICBpZiAoKmUgPj0gJzAnICYmICplIDw9ICc5JykgewotICAgICAgICAgICAgICAgICAgICAgIGJlZ2luc193aXRoX2RpZ2l0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoKCplID49ICdhJyAmJiAqZSA8PSAneicpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKmUgPj0gJ0EnICYmICplIDw9ICdaJykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgqZSA9PSAnXycpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgYmVnaW5zX3dpdGhfZGlnaXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoaXNHcm91cCAmJiAoKmUgPT0gJy0nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgKmUgPSAnXyc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbnNfd2l0aF9kaWdpdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZSsrOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWRTdHIudW5sb2NrQnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgLy8gdmVyaWZ5IHRoYXQgd2Ugc3RvcHBlZCBiZWNhdXNlIHdlIGhpdCBhIHBlcmlvZCBvcgotICAgICAgICAgICAgICAgIC8vIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZywgYW5kIHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgLy8gaWRlbnRpZmllciBkaWRuJ3QgYmVnaW4gd2l0aCBhIGRpZ2l0LgotICAgICAgICAgICAgICAgIGlmIChiZWdpbnNfd2l0aF9kaWdpdCB8fCAoZSAhPSBwICYmICooZS0xKSAhPSAnLicpKSB7Ci0gICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiVkOiBQZXJtaXNzaW9uIG5hbWUgPCVzPiBpcyBub3QgYSB2YWxpZCBKYXZhIHN5bWJvbFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RQYXRoLnN0cmluZygpLCBibG9jay5nZXRMaW5lTnVtYmVyKCksIGlkU3RyLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN5bXMtPmFkZFN0cmluZ1N5bWJvbChTdHJpbmc4KGUpLCBpZFN0ciwgc3JjUG9zKTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50MTZfdCogY210ID0gYmxvY2suZ2V0Q29tbWVudCgmbGVuKTsKLSAgICAgICAgICAgICAgICBpZiAoY210ICE9IE5VTEwgJiYgKmNtdCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJDb21tZW50IG9mICVzOiAlc1xuIiwgU3RyaW5nOChlKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIFN0cmluZzgoY210KS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN5bXMtPmFwcGVuZENvbW1lbnQoU3RyaW5nOChlKSwgU3RyaW5nMTYoY210KSwgc3JjUG9zKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiTm8gY29tbWVudCBmb3IgJXNcbiIsIFN0cmluZzgoZSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzeW1zLT5tYWtlU3ltYm9sUHVibGljKFN0cmluZzgoZSksIHNyY1Bvcyk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCB1c2VzX3Blcm1pc3Npb24xNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUF0dHIobWFuaWZlc3RQYXRoLCBmaW5hbFJlc1RhYmxlLCBibG9jaywgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiLCBwYWNrYWdlSWRlbnRDaGFycywgdHJ1ZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgaW5zdHJ1bWVudGF0aW9uMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiwgY2xhc3NJZGVudENoYXJzLCB0cnVlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAidGFyZ2V0UGFja2FnZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlSWRlbnRDaGFycywgdHJ1ZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgYXBwbGljYXRpb24xNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUF0dHIobWFuaWZlc3RQYXRoLCBmaW5hbFJlc1RhYmxlLCBibG9jaywgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiLCBjbGFzc0lkZW50Q2hhcnMsIGZhbHNlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAicGVybWlzc2lvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlSWRlbnRDaGFycywgZmFsc2UpICE9IEFUVFJfT0tBWSkgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJwcm9jZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJZGVudENoYXJzLCBmYWxzZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUF0dHIobWFuaWZlc3RQYXRoLCBmaW5hbFJlc1RhYmxlLCBibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgInRhc2tBZmZpbml0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSWRlbnRDaGFycywgZmFsc2UpICE9IEFUVFJfT0tBWSkgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHByb3ZpZGVyMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiwgY2xhc3NJZGVudENoYXJzLCB0cnVlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAiYXV0aG9yaXRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXRpZXNJZGVudENoYXJzLCB0cnVlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAicGVybWlzc2lvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlSWRlbnRDaGFycywgZmFsc2UpICE9IEFUVFJfT0tBWSkgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJwcm9jZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJZGVudENoYXJzLCBmYWxzZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgc2VydmljZTE2LnN0cmluZygpKSA9PSAwCi0gICAgICAgICAgICAgICAgICAgICAgIHx8IHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCByZWNlaXZlcjE2LnN0cmluZygpKSA9PSAwCi0gICAgICAgICAgICAgICAgICAgICAgIHx8IHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBhY3Rpdml0eTE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLCBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIsIGNsYXNzSWRlbnRDaGFycywgdHJ1ZSkgIT0gQVRUUl9PS0FZKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUF0dHIobWFuaWZlc3RQYXRoLCBmaW5hbFJlc1RhYmxlLCBibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgInBlcm1pc3Npb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZUlkZW50Q2hhcnMsIGZhbHNlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAicHJvY2VzcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSWRlbnRDaGFycywgZmFsc2UpICE9IEFUVFJfT0tBWSkgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVBdHRyKG1hbmlmZXN0UGF0aCwgZmluYWxSZXNUYWJsZSwgYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJ0YXNrQWZmaW5pdHkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0lkZW50Q2hhcnMsIGZhbHNlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBhY3Rpb24xNi5zdHJpbmcoKSkgPT0gMAotICAgICAgICAgICAgICAgICAgICAgICB8fCBzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgY2F0ZWdvcnkxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUF0dHIobWFuaWZlc3RQYXRoLCBmaW5hbFJlc1RhYmxlLCBibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgIm5hbWUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZUlkZW50Q2hhcnMsIHRydWUpICE9IEFUVFJfT0tBWSkgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGRhdGExNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZUF0dHIobWFuaWZlc3RQYXRoLCBmaW5hbFJlc1RhYmxlLCBibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgIm1pbWVUeXBlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVJZGVudENoYXJzLCB0cnVlKSAhPSBBVFRSX09LQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQXR0cihtYW5pZmVzdFBhdGgsIGZpbmFsUmVzVGFibGUsIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAic2NoZW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtZUlkZW50Q2hhcnMsIHRydWUpICE9IEFUVFJfT0tBWSkgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXNGaWxlICE9IE5VTEwpIHsKLSAgICAgICAgLy8gVGhlc2UgcmVzb3VyY2VzIGFyZSBub3cgY29uc2lkZXJlZCB0byBiZSBhIHBhcnQgb2YgdGhlIGluY2x1ZGVkCi0gICAgICAgIC8vIHJlc291cmNlcywgZm9yIG90aGVycyB0byByZWZlcmVuY2UuCi0gICAgICAgIGVyciA9IGFzc2V0cy0+YWRkSW5jbHVkZWRSZXNvdXJjZXMocmVzRmlsZSk7Ci0gICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW5hYmxlIHRvIHBhcnNlIGdlbmVyYXRlZCByZXNvdXJjZXMsIGFib3J0aW5nLlxuIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGdldEluZGVudFNwYWNlKGludCBpbmRlbnQpCi17Ci1zdGF0aWMgY29uc3QgY2hhciB3aGl0ZXNwYWNlW10gPQotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7Ci0KLSAgICByZXR1cm4gd2hpdGVzcGFjZSArIHNpemVvZih3aGl0ZXNwYWNlKSAtIDEgLSBpbmRlbnQqNDsKLX0KLQotc3RhdGljIFN0cmluZzggZmxhdHRlblN5bWJvbChjb25zdCBTdHJpbmc4JiBzeW1ib2wpIHsKLSAgICBTdHJpbmc4IHJlc3VsdChzeW1ib2wpOwotICAgIHNzaXplX3QgZmlyc3Q7Ci0gICAgaWYgKChmaXJzdCA9IHN5bWJvbC5maW5kKCI6IiwgMCkpID49IDAKLSAgICAgICAgICAgIHx8IChmaXJzdCA9IHN5bWJvbC5maW5kKCIuIiwgMCkpID49IDApIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzeW1ib2wuc2l6ZSgpOwotICAgICAgICBjaGFyKiBidWYgPSByZXN1bHQubG9ja0J1ZmZlcihzaXplKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0OyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoYnVmW2ldID09ICc6JyB8fCBidWZbaV0gPT0gJy4nKSB7Ci0gICAgICAgICAgICAgICAgYnVmW2ldID0gJ18nOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdC51bmxvY2tCdWZmZXIoc2l6ZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBTdHJpbmc4IGdldFN5bWJvbFBhY2thZ2UoY29uc3QgU3RyaW5nOCYgc3ltYm9sLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLCBib29sIHB1YikgewotICAgIHNzaXplX3QgY29sb24gPSBzeW1ib2wuZmluZCgiOiIsIDApOwotICAgIGlmIChjb2xvbiA+PSAwKSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmc4KHN5bWJvbC5zdHJpbmcoKSwgY29sb24pOwotICAgIH0KLSAgICByZXR1cm4gcHViID8gYXNzZXRzLT5nZXRQYWNrYWdlKCkgOiBhc3NldHMtPmdldFN5bWJvbHNQcml2YXRlUGFja2FnZSgpOwotfQotCi1zdGF0aWMgU3RyaW5nOCBnZXRTeW1ib2xOYW1lKGNvbnN0IFN0cmluZzgmIHN5bWJvbCkgewotICAgIHNzaXplX3QgY29sb24gPSBzeW1ib2wuZmluZCgiOiIsIDApOwotICAgIGlmIChjb2xvbiA+PSAwKSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmc4KHN5bWJvbC5zdHJpbmcoKSArIGNvbG9uICsgMSk7Ci0gICAgfQotICAgIHJldHVybiBzeW1ib2w7Ci19Ci0KLXN0YXRpYyBTdHJpbmcxNiBnZXRBdHRyaWJ1dGVDb21tZW50KGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYqIG91dFR5cGVDb21tZW50ID0gTlVMTCkKLXsKLSAgICBzcDxBYXB0U3ltYm9scz4gYXN5bSA9IGFzc2V0cy0+Z2V0U3ltYm9sc0ZvcihTdHJpbmc4KCJSIikpOwotICAgIGlmIChhc3ltICE9IE5VTEwpIHsKLSAgICAgICAgLy9wcmludGYoIkdvdCBSIHN5bWJvbHMhXG4iKTsKLSAgICAgICAgYXN5bSA9IGFzeW0tPmdldE5lc3RlZFN5bWJvbHMoKS52YWx1ZUZvcihTdHJpbmc4KCJhdHRyIikpOwotICAgICAgICBpZiAoYXN5bSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAvL3ByaW50ZigiR290IGF0dHJzIHN5bWJvbHMhIGNvbW1lbnQgJXM9JXNcbiIsCi0gICAgICAgICAgICAvLyAgICAgbmFtZS5zdHJpbmcoKSwgU3RyaW5nOChhc3ltLT5nZXRDb21tZW50KG5hbWUpKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBpZiAob3V0VHlwZUNvbW1lbnQgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICpvdXRUeXBlQ29tbWVudCA9IGFzeW0tPmdldFR5cGVDb21tZW50KG5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFzeW0tPmdldENvbW1lbnQobmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZzE2KCk7Ci19Ci0KLXN0YXRpYyBzdGF0dXNfdCB3cml0ZUxheW91dENsYXNzZXMoCi0gICAgRklMRSogZnAsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgY29uc3Qgc3A8QWFwdFN5bWJvbHM+JiBzeW1ib2xzLCBpbnQgaW5kZW50LCBib29sIGluY2x1ZGVQcml2YXRlKQotewotICAgIGNvbnN0IGNoYXIqIGluZGVudFN0ciA9IGdldEluZGVudFNwYWNlKGluZGVudCk7Ci0gICAgaWYgKCFpbmNsdWRlUHJpdmF0ZSkgewotICAgICAgICBmcHJpbnRmKGZwLCAiJXMvKiogQGRvY29ubHkgKi9cbiIsIGluZGVudFN0cik7Ci0gICAgfQotICAgIGZwcmludGYoZnAsICIlc3B1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3Mgc3R5bGVhYmxlIHtcbiIsIGluZGVudFN0cik7Ci0gICAgaW5kZW50Kys7Ci0KLSAgICBTdHJpbmcxNiBhdHRyMTYoImF0dHIiKTsKLSAgICBTdHJpbmcxNiBwYWNrYWdlMTYoYXNzZXRzLT5nZXRQYWNrYWdlKCkpOwotCi0gICAgaW5kZW50U3RyID0gZ2V0SW5kZW50U3BhY2UoaW5kZW50KTsKLSAgICBib29sIGhhc0Vycm9ycyA9IGZhbHNlOwotCi0gICAgc2l6ZV90IGk7Ci0gICAgc2l6ZV90IE4gPSBzeW1ib2xzLT5nZXROZXN0ZWRTeW1ib2xzKCkuc2l6ZSgpOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICBzcDxBYXB0U3ltYm9scz4gbnN5bWJvbHMgPSBzeW1ib2xzLT5nZXROZXN0ZWRTeW1ib2xzKCkudmFsdWVBdChpKTsKLSAgICAgICAgU3RyaW5nOCByZWFsQ2xhc3NOYW1lKHN5bWJvbHMtPmdldE5lc3RlZFN5bWJvbHMoKS5rZXlBdChpKSk7Ci0gICAgICAgIFN0cmluZzggbmNsYXNzTmFtZShmbGF0dGVuU3ltYm9sKHJlYWxDbGFzc05hbWUpKTsKLQotICAgICAgICBTb3J0ZWRWZWN0b3I8dWludDMyX3Q+IGlkZW50czsKLSAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBvcmlnT3JkZXI7Ci0gICAgICAgIFZlY3Rvcjxib29sPiBwdWJsaWNGbGFnczsKLQotICAgICAgICBzaXplX3QgYTsKLSAgICAgICAgc2l6ZV90IE5BID0gbnN5bWJvbHMtPmdldFN5bWJvbHMoKS5zaXplKCk7Ci0gICAgICAgIGZvciAoYT0wOyBhPE5BOyBhKyspIHsKLSAgICAgICAgICAgIGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgc3ltKG5zeW1ib2xzLT5nZXRTeW1ib2xzKCkudmFsdWVBdChhKSk7Ci0gICAgICAgICAgICBpbnQzMl90IGNvZGUgPSBzeW0udHlwZUNvZGUgPT0gQWFwdFN5bWJvbEVudHJ5OjpUWVBFX0lOVDMyCi0gICAgICAgICAgICAgICAgICAgID8gc3ltLmludDMyVmFsIDogMDsKLSAgICAgICAgICAgIGJvb2wgaXNQdWJsaWMgPSB0cnVlOwotICAgICAgICAgICAgaWYgKGNvZGUgPT0gMCkgewotICAgICAgICAgICAgICAgIFN0cmluZzE2IG5hbWUxNihzeW0ubmFtZSk7Ci0gICAgICAgICAgICAgICAgdWludDMyX3QgdHlwZVNwZWNGbGFnczsKLSAgICAgICAgICAgICAgICBjb2RlID0gYXNzZXRzLT5nZXRJbmNsdWRlZFJlc291cmNlcygpLmlkZW50aWZpZXJGb3JOYW1lKAotICAgICAgICAgICAgICAgICAgICBuYW1lMTYuc3RyaW5nKCksIG5hbWUxNi5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgIGF0dHIxNi5zdHJpbmcoKSwgYXR0cjE2LnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgcGFja2FnZTE2LnN0cmluZygpLCBwYWNrYWdlMTYuc2l6ZSgpLCAmdHlwZVNwZWNGbGFncyk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBJbiA8ZGVjbGFyZS1zdHlsZWFibGU+ICVzLCB1bmFibGUgdG8gZmluZCBhdHRyaWJ1dGUgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNsYXNzTmFtZS5zdHJpbmcoKSwgc3ltLm5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpc1B1YmxpYyA9ICh0eXBlU3BlY0ZsYWdzJlJlc1RhYmxlX3R5cGVTcGVjOjpTUEVDX1BVQkxJQykgIT0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlkZW50cy5hZGQoY29kZSk7Ci0gICAgICAgICAgICBvcmlnT3JkZXIuYWRkKGNvZGUpOwotICAgICAgICAgICAgcHVibGljRmxhZ3MuYWRkKGlzUHVibGljKTsKLSAgICAgICAgfQotCi0gICAgICAgIE5BID0gaWRlbnRzLnNpemUoKTsKLQotICAgICAgICBib29sIGRlcHJlY2F0ZWQgPSBmYWxzZTsKLQotICAgICAgICBTdHJpbmcxNiBjb21tZW50ID0gc3ltYm9scy0+Z2V0Q29tbWVudChyZWFsQ2xhc3NOYW1lKTsKLSAgICAgICAgZnByaW50ZihmcCwgIiVzLyoqICIsIGluZGVudFN0cik7Ci0gICAgICAgIGlmIChjb21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIFN0cmluZzggY210KGNvbW1lbnQpOwotICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzXG4iLCBjbXQuc3RyaW5nKCkpOwotICAgICAgICAgICAgaWYgKHN0cnN0cihjbXQuc3RyaW5nKCksICJAZGVwcmVjYXRlZCIpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBkZXByZWNhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoZnAsICJBdHRyaWJ1dGVzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBhICVzLlxuIiwgbmNsYXNzTmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBoYXNUYWJsZSA9IGZhbHNlOwotICAgICAgICBmb3IgKGE9MDsgYTxOQTsgYSsrKSB7Ci0gICAgICAgICAgICBzc2l6ZV90IHBvcyA9IGlkZW50cy5pbmRleE9mKG9yaWdPcmRlci5pdGVtQXQoYSkpOwotICAgICAgICAgICAgaWYgKHBvcyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNUYWJsZSkgewotICAgICAgICAgICAgICAgICAgICBoYXNUYWJsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICAgPHA+SW5jbHVkZXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOjwvcD5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgICA8dGFibGU+XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICAgPGNvbGdyb3VwIGFsaWduPVwibGVmdFwiIC8+XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICAgPGNvbGdyb3VwIGFsaWduPVwibGVmdFwiIC8+XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICAgPHRyPjx0aD5BdHRyaWJ1dGU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50U3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudFN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRTdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50U3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudFN0cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgc3ltID0gbnN5bWJvbHMtPmdldFN5bWJvbHMoKS52YWx1ZUF0KGEpOwotICAgICAgICAgICAgICAgIGlmICghcHVibGljRmxhZ3MuaXRlbUF0KGEpICYmICFpbmNsdWRlUHJpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lOChzeW0ubmFtZSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nMTYgY29tbWVudChzeW0uY29tbWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuc2l6ZSgpIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGdldEF0dHJpYnV0ZUNvbW1lbnQoYXNzZXRzLCBuYW1lOCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjb21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHAgPSBjb21tZW50LnN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgIT0gMCAmJiAqcCAhPSAnLicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqcCA9PSAneycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgIT0gMCAmJiAqcCAhPSAnfScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqcCA9PSAnLicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gU3RyaW5nMTYoY29tbWVudC5zdHJpbmcoKSwgcC1jb21tZW50LnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzICAgPHRyPjx0ZD48Y29kZT57QGxpbmsgIyVzXyVzICVzOiVzfTwvY29kZT48L3RkPjx0ZD4lczwvdGQ+PC90cj5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRTdHIsIG5jbGFzc05hbWUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBmbGF0dGVuU3ltYm9sKG5hbWU4KS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldFN5bWJvbFBhY2thZ2UobmFtZTgsIGFzc2V0cywgdHJ1ZSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRTeW1ib2xOYW1lKG5hbWU4KS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoY29tbWVudCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChoYXNUYWJsZSkgewotICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzICAgPC90YWJsZT5cbiIsIGluZGVudFN0cik7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChhPTA7IGE8TkE7IGErKykgewotICAgICAgICAgICAgc3NpemVfdCBwb3MgPSBpZGVudHMuaW5kZXhPZihvcmlnT3JkZXIuaXRlbUF0KGEpKTsKLSAgICAgICAgICAgIGlmIChwb3MgPj0gMCkgewotICAgICAgICAgICAgICAgIGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgc3ltID0gbnN5bWJvbHMtPmdldFN5bWJvbHMoKS52YWx1ZUF0KGEpOwotICAgICAgICAgICAgICAgIGlmICghcHVibGljRmxhZ3MuaXRlbUF0KGEpICYmICFpbmNsdWRlUHJpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzICAgQHNlZSAjJXNfJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRTdHIsIG5jbGFzc05hbWUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBmbGF0dGVuU3ltYm9sKHN5bS5uYW1lKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZnByaW50ZihmcCwgIiVzICovXG4iLCBnZXRJbmRlbnRTcGFjZShpbmRlbnQpKTsKLQotICAgICAgICBpZiAoZGVwcmVjYXRlZCkgewotICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzQERlcHJlY2F0ZWRcbiIsIGluZGVudFN0cik7Ci0gICAgICAgIH0KLQotICAgICAgICBmcHJpbnRmKGZwLAotICAgICAgICAgICAgICAgICIlc3B1YmxpYyBzdGF0aWMgZmluYWwgaW50W10gJXMgPSB7XG4iCi0gICAgICAgICAgICAgICAgIiVzIiwKLSAgICAgICAgICAgICAgICBpbmRlbnRTdHIsIG5jbGFzc05hbWUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgZ2V0SW5kZW50U3BhY2UoaW5kZW50KzEpKTsKLQotICAgICAgICBmb3IgKGE9MDsgYTxOQTsgYSsrKSB7Ci0gICAgICAgICAgICBpZiAoYSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChhJjMpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIixcbiVzIiwgZ2V0SW5kZW50U3BhY2UoaW5kZW50KzEpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiLCAiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcHJpbnRmKGZwLCAiMHglMDh4IiwgaWRlbnRzW2FdKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZwcmludGYoZnAsICJcbiVzfTtcbiIsIGluZGVudFN0cik7Ci0KLSAgICAgICAgZm9yIChhPTA7IGE8TkE7IGErKykgewotICAgICAgICAgICAgc3NpemVfdCBwb3MgPSBpZGVudHMuaW5kZXhPZihvcmlnT3JkZXIuaXRlbUF0KGEpKTsKLSAgICAgICAgICAgIGlmIChwb3MgPj0gMCkgewotICAgICAgICAgICAgICAgIGNvbnN0IEFhcHRTeW1ib2xFbnRyeSYgc3ltID0gbnN5bWJvbHMtPmdldFN5bWJvbHMoKS52YWx1ZUF0KGEpOwotICAgICAgICAgICAgICAgIGlmICghcHVibGljRmxhZ3MuaXRlbUF0KGEpICYmICFpbmNsdWRlUHJpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lOChzeW0ubmFtZSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nMTYgY29tbWVudChzeW0uY29tbWVudCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nMTYgdHlwZUNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuc2l6ZSgpIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGdldEF0dHJpYnV0ZUNvbW1lbnQoYXNzZXRzLCBuYW1lOCwgJnR5cGVDb21tZW50KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBnZXRBdHRyaWJ1dGVDb21tZW50KGFzc2V0cywgbmFtZTgsICZ0eXBlQ29tbWVudCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdWludDMyX3QgdHlwZVNwZWNGbGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgU3RyaW5nMTYgbmFtZTE2KHN5bS5uYW1lKTsKLSAgICAgICAgICAgICAgICBhc3NldHMtPmdldEluY2x1ZGVkUmVzb3VyY2VzKCkuaWRlbnRpZmllckZvck5hbWUoCi0gICAgICAgICAgICAgICAgICAgIG5hbWUxNi5zdHJpbmcoKSwgbmFtZTE2LnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgYXR0cjE2LnN0cmluZygpLCBhdHRyMTYuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICBwYWNrYWdlMTYuc3RyaW5nKCksIHBhY2thZ2UxNi5zaXplKCksICZ0eXBlU3BlY0ZsYWdzKTsKLSAgICAgICAgICAgICAgICAvL3ByaW50ZigiJXM6JXMvJXM6IDB4JTA4eFxuIiwgU3RyaW5nOChwYWNrYWdlMTYpLnN0cmluZygpLAotICAgICAgICAgICAgICAgIC8vICAgIFN0cmluZzgoYXR0cjE2KS5zdHJpbmcoKSwgU3RyaW5nOChuYW1lMTYpLnN0cmluZygpLCB0eXBlU3BlY0ZsYWdzKTsKLSAgICAgICAgICAgICAgICBjb25zdCBib29sIHB1YiA9ICh0eXBlU3BlY0ZsYWdzJlJlc1RhYmxlX3R5cGVTcGVjOjpTUEVDX1BVQkxJQykgIT0gMDsKLQotICAgICAgICAgICAgICAgIGJvb2wgZGVwcmVjYXRlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzLyoqXG4iLCBpbmRlbnRTdHIpOwotICAgICAgICAgICAgICAgIGlmIChjb21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBjbXQoY29tbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIlcyAgPHA+XG4lcyAgQGF0dHIgZGVzY3JpcHRpb25cbiIsIGluZGVudFN0ciwgaW5kZW50U3RyKTsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiVzICAlc1xuIiwgaW5kZW50U3RyLCBjbXQuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3Ryc3RyKGNtdC5zdHJpbmcoKSwgIkBkZXByZWNhdGVkIikgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAgPHA+VGhpcyBzeW1ib2wgaXMgdGhlIG9mZnNldCB3aGVyZSB0aGUge0BsaW5rICVzLlIuYXR0ciMlc31cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgIGF0dHJpYnV0ZSdzIHZhbHVlIGNhbiBiZSBmb3VuZCBpbiB0aGUge0BsaW5rICMlc30gYXJyYXkuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudFN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTeW1ib2xQYWNrYWdlKG5hbWU4LCBhc3NldHMsIHB1Yikuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U3ltYm9sTmFtZShuYW1lOCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50U3RyLCBuY2xhc3NOYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVDb21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBjbXQodHlwZUNvbW1lbnQpOwotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiXG5cbiVzICAlc1xuIiwgaW5kZW50U3RyLCBjbXQuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3Ryc3RyKGNtdC5zdHJpbmcoKSwgIkBkZXByZWNhdGVkIikgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAocHViKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgIDxwPlRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGdsb2JhbCBhdHRyaWJ1dGVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICByZXNvdXJjZSBzeW1ib2wge0BsaW5rICVzLlIuYXR0ciMlc30uXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRTdHIsIGluZGVudFN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U3ltYm9sUGFja2FnZShuYW1lOCwgYXNzZXRzLCB0cnVlKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U3ltYm9sTmFtZShuYW1lOCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICA8cD5UaGlzIGlzIGEgcHJpdmF0ZSBzeW1ib2wuXG4iLCBpbmRlbnRTdHIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIlcyAgQGF0dHIgbmFtZSAlczolc1xuIiwgaW5kZW50U3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U3ltYm9sUGFja2FnZShuYW1lOCwgYXNzZXRzLCBwdWIpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U3ltYm9sTmFtZShuYW1lOCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIlcyovXG4iLCBpbmRlbnRTdHIpOwotICAgICAgICAgICAgICAgIGlmIChkZXByZWNhdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIlc0BEZXByZWNhdGVkXG4iLCBpbmRlbnRTdHIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLAotICAgICAgICAgICAgICAgICAgICAgICAgIiVzcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgJXNfJXMgPSAlZDtcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRTdHIsIG5jbGFzc05hbWUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBmbGF0dGVuU3ltYm9sKG5hbWU4KS5zdHJpbmcoKSwgKGludClwb3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW5kZW50LS07Ci0gICAgZnByaW50ZihmcCwgIiVzfTtcbiIsIGdldEluZGVudFNwYWNlKGluZGVudCkpOwotICAgIHJldHVybiBoYXNFcnJvcnMgPyBVTktOT1dOX0VSUk9SIDogTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyBzdGF0dXNfdCB3cml0ZVRleHRMYXlvdXRDbGFzc2VzKAotICAgIEZJTEUqIGZwLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgIGNvbnN0IHNwPEFhcHRTeW1ib2xzPiYgc3ltYm9scywgYm9vbCBpbmNsdWRlUHJpdmF0ZSkKLXsKLSAgICBTdHJpbmcxNiBhdHRyMTYoImF0dHIiKTsKLSAgICBTdHJpbmcxNiBwYWNrYWdlMTYoYXNzZXRzLT5nZXRQYWNrYWdlKCkpOwotCi0gICAgYm9vbCBoYXNFcnJvcnMgPSBmYWxzZTsKLQotICAgIHNpemVfdCBpOwotICAgIHNpemVfdCBOID0gc3ltYm9scy0+Z2V0TmVzdGVkU3ltYm9scygpLnNpemUoKTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgc3A8QWFwdFN5bWJvbHM+IG5zeW1ib2xzID0gc3ltYm9scy0+Z2V0TmVzdGVkU3ltYm9scygpLnZhbHVlQXQoaSk7Ci0gICAgICAgIFN0cmluZzggcmVhbENsYXNzTmFtZShzeW1ib2xzLT5nZXROZXN0ZWRTeW1ib2xzKCkua2V5QXQoaSkpOwotICAgICAgICBTdHJpbmc4IG5jbGFzc05hbWUoZmxhdHRlblN5bWJvbChyZWFsQ2xhc3NOYW1lKSk7Ci0KLSAgICAgICAgU29ydGVkVmVjdG9yPHVpbnQzMl90PiBpZGVudHM7Ci0gICAgICAgIFZlY3Rvcjx1aW50MzJfdD4gb3JpZ09yZGVyOwotICAgICAgICBWZWN0b3I8Ym9vbD4gcHVibGljRmxhZ3M7Ci0KLSAgICAgICAgc2l6ZV90IGE7Ci0gICAgICAgIHNpemVfdCBOQSA9IG5zeW1ib2xzLT5nZXRTeW1ib2xzKCkuc2l6ZSgpOwotICAgICAgICBmb3IgKGE9MDsgYTxOQTsgYSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBBYXB0U3ltYm9sRW50cnkmIHN5bShuc3ltYm9scy0+Z2V0U3ltYm9scygpLnZhbHVlQXQoYSkpOwotICAgICAgICAgICAgaW50MzJfdCBjb2RlID0gc3ltLnR5cGVDb2RlID09IEFhcHRTeW1ib2xFbnRyeTo6VFlQRV9JTlQzMgotICAgICAgICAgICAgICAgICAgICA/IHN5bS5pbnQzMlZhbCA6IDA7Ci0gICAgICAgICAgICBib29sIGlzUHVibGljID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChjb2RlID09IDApIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcxNiBuYW1lMTYoc3ltLm5hbWUpOwotICAgICAgICAgICAgICAgIHVpbnQzMl90IHR5cGVTcGVjRmxhZ3M7Ci0gICAgICAgICAgICAgICAgY29kZSA9IGFzc2V0cy0+Z2V0SW5jbHVkZWRSZXNvdXJjZXMoKS5pZGVudGlmaWVyRm9yTmFtZSgKLSAgICAgICAgICAgICAgICAgICAgbmFtZTE2LnN0cmluZygpLCBuYW1lMTYuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICBhdHRyMTYuc3RyaW5nKCksIGF0dHIxNi5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgIHBhY2thZ2UxNi5zdHJpbmcoKSwgcGFja2FnZTE2LnNpemUoKSwgJnR5cGVTcGVjRmxhZ3MpOwotICAgICAgICAgICAgICAgIGlmIChjb2RlID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogSW4gPGRlY2xhcmUtc3R5bGVhYmxlPiAlcywgdW5hYmxlIHRvIGZpbmQgYXR0cmlidXRlICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jbGFzc05hbWUuc3RyaW5nKCksIHN5bS5uYW1lLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaXNQdWJsaWMgPSAodHlwZVNwZWNGbGFncyZSZXNUYWJsZV90eXBlU3BlYzo6U1BFQ19QVUJMSUMpICE9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZGVudHMuYWRkKGNvZGUpOwotICAgICAgICAgICAgb3JpZ09yZGVyLmFkZChjb2RlKTsKLSAgICAgICAgICAgIHB1YmxpY0ZsYWdzLmFkZChpc1B1YmxpYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBOQSA9IGlkZW50cy5zaXplKCk7Ci0KLSAgICAgICAgZnByaW50ZihmcCwgImludFtdIHN0eWxlYWJsZSAlcyB7IiwgbmNsYXNzTmFtZS5zdHJpbmcoKSk7Ci0KLSAgICAgICAgZm9yIChhPTA7IGE8TkE7IGErKykgewotICAgICAgICAgICAgaWYgKGEgIT0gMCkgewotICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICIsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcHJpbnRmKGZwLCAiIDB4JTA4eCIsIGlkZW50c1thXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmcHJpbnRmKGZwLCAiIH1cbiIpOwotCi0gICAgICAgIGZvciAoYT0wOyBhPE5BOyBhKyspIHsKLSAgICAgICAgICAgIHNzaXplX3QgcG9zID0gaWRlbnRzLmluZGV4T2Yob3JpZ09yZGVyLml0ZW1BdChhKSk7Ci0gICAgICAgICAgICBpZiAocG9zID49IDApIHsKLSAgICAgICAgICAgICAgICBjb25zdCBBYXB0U3ltYm9sRW50cnkmIHN5bSA9IG5zeW1ib2xzLT5nZXRTeW1ib2xzKCkudmFsdWVBdChhKTsKLSAgICAgICAgICAgICAgICBpZiAoIXB1YmxpY0ZsYWdzLml0ZW1BdChhKSAmJiAhaW5jbHVkZVByaXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZTgoc3ltLm5hbWUpOwotICAgICAgICAgICAgICAgIFN0cmluZzE2IGNvbW1lbnQoc3ltLmNvbW1lbnQpOwotICAgICAgICAgICAgICAgIFN0cmluZzE2IHR5cGVDb21tZW50OwotICAgICAgICAgICAgICAgIGlmIChjb21tZW50LnNpemUoKSA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBnZXRBdHRyaWJ1dGVDb21tZW50KGFzc2V0cywgbmFtZTgsICZ0eXBlQ29tbWVudCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0QXR0cmlidXRlQ29tbWVudChhc3NldHMsIG5hbWU4LCAmdHlwZUNvbW1lbnQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHVpbnQzMl90IHR5cGVTcGVjRmxhZ3MgPSAwOwotICAgICAgICAgICAgICAgIFN0cmluZzE2IG5hbWUxNihzeW0ubmFtZSk7Ci0gICAgICAgICAgICAgICAgYXNzZXRzLT5nZXRJbmNsdWRlZFJlc291cmNlcygpLmlkZW50aWZpZXJGb3JOYW1lKAotICAgICAgICAgICAgICAgICAgICBuYW1lMTYuc3RyaW5nKCksIG5hbWUxNi5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgIGF0dHIxNi5zdHJpbmcoKSwgYXR0cjE2LnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgcGFja2FnZTE2LnN0cmluZygpLCBwYWNrYWdlMTYuc2l6ZSgpLCAmdHlwZVNwZWNGbGFncyk7Ci0gICAgICAgICAgICAgICAgLy9wcmludGYoIiVzOiVzLyVzOiAweCUwOHhcbiIsIFN0cmluZzgocGFja2FnZTE2KS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAvLyAgICBTdHJpbmc4KGF0dHIxNikuc3RyaW5nKCksIFN0cmluZzgobmFtZTE2KS5zdHJpbmcoKSwgdHlwZVNwZWNGbGFncyk7Ci0gICAgICAgICAgICAgICAgY29uc3QgYm9vbCBwdWIgPSAodHlwZVNwZWNGbGFncyZSZXNUYWJsZV90eXBlU3BlYzo6U1BFQ19QVUJMSUMpICE9IDA7Ci0KLSAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLAotICAgICAgICAgICAgICAgICAgICAgICAgImludCBzdHlsZWFibGUgJXNfJXMgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBuY2xhc3NOYW1lLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlblN5bWJvbChuYW1lOCkuc3RyaW5nKCksIChpbnQpcG9zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBoYXNFcnJvcnMgPyBVTktOT1dOX0VSUk9SIDogTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyBzdGF0dXNfdCB3cml0ZVN5bWJvbENsYXNzKAotICAgIEZJTEUqIGZwLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLCBib29sIGluY2x1ZGVQcml2YXRlLAotICAgIGNvbnN0IHNwPEFhcHRTeW1ib2xzPiYgc3ltYm9scywgY29uc3QgU3RyaW5nOCYgY2xhc3NOYW1lLCBpbnQgaW5kZW50LAotICAgIGJvb2wgbm9uQ29uc3RhbnRJZCkKLXsKLSAgICBmcHJpbnRmKGZwLCAiJXNwdWJsaWMgJXNmaW5hbCBjbGFzcyAlcyB7XG4iLAotICAgICAgICAgICAgZ2V0SW5kZW50U3BhY2UoaW5kZW50KSwKLSAgICAgICAgICAgIGluZGVudCAhPSAwID8gInN0YXRpYyAiIDogIiIsIGNsYXNzTmFtZS5zdHJpbmcoKSk7Ci0gICAgaW5kZW50Kys7Ci0KLSAgICBzaXplX3QgaTsKLSAgICBzdGF0dXNfdCBlcnIgPSBOT19FUlJPUjsKLQotICAgIGNvbnN0IGNoYXIgKiBpZF9mb3JtYXQgPSBub25Db25zdGFudElkID8KLSAgICAgICAgICAgICIlc3B1YmxpYyBzdGF0aWMgaW50ICVzPTB4JTA4eDtcbiIgOgotICAgICAgICAgICAgIiVzcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgJXM9MHglMDh4O1xuIjsKLQotICAgIHNpemVfdCBOID0gc3ltYm9scy0+Z2V0U3ltYm9scygpLnNpemUoKTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgY29uc3QgQWFwdFN5bWJvbEVudHJ5JiBzeW0gPSBzeW1ib2xzLT5nZXRTeW1ib2xzKCkudmFsdWVBdChpKTsKLSAgICAgICAgaWYgKHN5bS50eXBlQ29kZSAhPSBBYXB0U3ltYm9sRW50cnk6OlRZUEVfSU5UMzIpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghYXNzZXRzLT5pc0phdmFTeW1ib2woc3ltLCBpbmNsdWRlUHJpdmF0ZSkpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZzggbmFtZTgoc3ltLm5hbWUpOwotICAgICAgICBTdHJpbmcxNiBjb21tZW50KHN5bS5jb21tZW50KTsKLSAgICAgICAgYm9vbCBoYXZlQ29tbWVudCA9IGZhbHNlOwotICAgICAgICBib29sIGRlcHJlY2F0ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGNvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgaGF2ZUNvbW1lbnQgPSB0cnVlOwotICAgICAgICAgICAgU3RyaW5nOCBjbXQoY29tbWVudCk7Ci0gICAgICAgICAgICBmcHJpbnRmKGZwLAotICAgICAgICAgICAgICAgICAgICAiJXMvKiogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGdldEluZGVudFNwYWNlKGluZGVudCksIGNtdC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBpZiAoc3Ryc3RyKGNtdC5zdHJpbmcoKSwgIkBkZXByZWNhdGVkIikgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHN5bS5pc1B1YmxpYyAmJiAhaW5jbHVkZVByaXZhdGUpIHsKLSAgICAgICAgICAgIHN5bS5zb3VyY2VQb3Mud2FybmluZygiTm8gY29tbWVudCBmb3IgcHVibGljIHN5bWJvbCAlczolcy8lcyIsCi0gICAgICAgICAgICAgICAgYXNzZXRzLT5nZXRQYWNrYWdlKCkuc3RyaW5nKCksIGNsYXNzTmFtZS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBTdHJpbmc4KHN5bS5uYW1lKS5zdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nMTYgdHlwZUNvbW1lbnQoc3ltLnR5cGVDb21tZW50KTsKLSAgICAgICAgaWYgKHR5cGVDb21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIFN0cmluZzggY210KHR5cGVDb21tZW50KTsKLSAgICAgICAgICAgIGlmICghaGF2ZUNvbW1lbnQpIHsKLSAgICAgICAgICAgICAgICBoYXZlQ29tbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihmcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICIlcy8qKiAlc1xuIiwgZ2V0SW5kZW50U3BhY2UoaW5kZW50KSwgY210LnN0cmluZygpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihmcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICIlcyAlc1xuIiwgZ2V0SW5kZW50U3BhY2UoaW5kZW50KSwgY210LnN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdHJzdHIoY210LnN0cmluZygpLCAiQGRlcHJlY2F0ZWQiKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZGVwcmVjYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhhdmVDb21tZW50KSB7Ci0gICAgICAgICAgICBmcHJpbnRmKGZwLCIlcyAqL1xuIiwgZ2V0SW5kZW50U3BhY2UoaW5kZW50KSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRlcHJlY2F0ZWQpIHsKLSAgICAgICAgICAgIGZwcmludGYoZnAsICIlc0BEZXByZWNhdGVkXG4iLCBnZXRJbmRlbnRTcGFjZShpbmRlbnQpKTsKLSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKGZwLCBpZF9mb3JtYXQsCi0gICAgICAgICAgICAgICAgZ2V0SW5kZW50U3BhY2UoaW5kZW50KSwKLSAgICAgICAgICAgICAgICBmbGF0dGVuU3ltYm9sKG5hbWU4KS5zdHJpbmcoKSwgKGludClzeW0uaW50MzJWYWwpOwotICAgIH0KLQotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICBjb25zdCBBYXB0U3ltYm9sRW50cnkmIHN5bSA9IHN5bWJvbHMtPmdldFN5bWJvbHMoKS52YWx1ZUF0KGkpOwotICAgICAgICBpZiAoc3ltLnR5cGVDb2RlICE9IEFhcHRTeW1ib2xFbnRyeTo6VFlQRV9TVFJJTkcpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghYXNzZXRzLT5pc0phdmFTeW1ib2woc3ltLCBpbmNsdWRlUHJpdmF0ZSkpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZzggbmFtZTgoc3ltLm5hbWUpOwotICAgICAgICBTdHJpbmcxNiBjb21tZW50KHN5bS5jb21tZW50KTsKLSAgICAgICAgYm9vbCBkZXByZWNhdGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChjb21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIFN0cmluZzggY210KGNvbW1lbnQpOwotICAgICAgICAgICAgZnByaW50ZihmcCwKLSAgICAgICAgICAgICAgICAgICAgIiVzLyoqICVzXG4iCi0gICAgICAgICAgICAgICAgICAgICAiJXMgKi9cbiIsCi0gICAgICAgICAgICAgICAgICAgIGdldEluZGVudFNwYWNlKGluZGVudCksIGNtdC5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgZ2V0SW5kZW50U3BhY2UoaW5kZW50KSk7Ci0gICAgICAgICAgICBpZiAoc3Ryc3RyKGNtdC5zdHJpbmcoKSwgIkBkZXByZWNhdGVkIikgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHN5bS5pc1B1YmxpYyAmJiAhaW5jbHVkZVByaXZhdGUpIHsKLSAgICAgICAgICAgIHN5bS5zb3VyY2VQb3Mud2FybmluZygiTm8gY29tbWVudCBmb3IgcHVibGljIHN5bWJvbCAlczolcy8lcyIsCi0gICAgICAgICAgICAgICAgYXNzZXRzLT5nZXRQYWNrYWdlKCkuc3RyaW5nKCksIGNsYXNzTmFtZS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBTdHJpbmc4KHN5bS5uYW1lKS5zdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRlcHJlY2F0ZWQpIHsKLSAgICAgICAgICAgIGZwcmludGYoZnAsICIlc0BEZXByZWNhdGVkXG4iLCBnZXRJbmRlbnRTcGFjZShpbmRlbnQpKTsKLSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKGZwLCAiJXNwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyAlcz1cIiVzXCI7XG4iLAotICAgICAgICAgICAgICAgIGdldEluZGVudFNwYWNlKGluZGVudCksCi0gICAgICAgICAgICAgICAgZmxhdHRlblN5bWJvbChuYW1lOCkuc3RyaW5nKCksIHN5bS5zdHJpbmdWYWwuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIHNwPEFhcHRTeW1ib2xzPiBzdHlsZWFibGVTeW1ib2xzOwotCi0gICAgTiA9IHN5bWJvbHMtPmdldE5lc3RlZFN5bWJvbHMoKS5zaXplKCk7Ci0gICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHNwPEFhcHRTeW1ib2xzPiBuc3ltYm9scyA9IHN5bWJvbHMtPmdldE5lc3RlZFN5bWJvbHMoKS52YWx1ZUF0KGkpOwotICAgICAgICBTdHJpbmc4IG5jbGFzc05hbWUoc3ltYm9scy0+Z2V0TmVzdGVkU3ltYm9scygpLmtleUF0KGkpKTsKLSAgICAgICAgaWYgKG5jbGFzc05hbWUgPT0gInN0eWxlYWJsZSIpIHsKLSAgICAgICAgICAgIHN0eWxlYWJsZVN5bWJvbHMgPSBuc3ltYm9sczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVyciA9IHdyaXRlU3ltYm9sQ2xhc3MoZnAsIGFzc2V0cywgaW5jbHVkZVByaXZhdGUsIG5zeW1ib2xzLCBuY2xhc3NOYW1lLCBpbmRlbnQsIG5vbkNvbnN0YW50SWQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3R5bGVhYmxlU3ltYm9scyAhPSBOVUxMKSB7Ci0gICAgICAgIGVyciA9IHdyaXRlTGF5b3V0Q2xhc3NlcyhmcCwgYXNzZXRzLCBzdHlsZWFibGVTeW1ib2xzLCBpbmRlbnQsIGluY2x1ZGVQcml2YXRlKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGluZGVudC0tOwotICAgIGZwcmludGYoZnAsICIlc31cbiIsIGdldEluZGVudFNwYWNlKGluZGVudCkpOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdGljIHN0YXR1c190IHdyaXRlVGV4dFN5bWJvbENsYXNzKAotICAgIEZJTEUqIGZwLCBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLCBib29sIGluY2x1ZGVQcml2YXRlLAotICAgIGNvbnN0IHNwPEFhcHRTeW1ib2xzPiYgc3ltYm9scywgY29uc3QgU3RyaW5nOCYgY2xhc3NOYW1lKQotewotICAgIHNpemVfdCBpOwotICAgIHN0YXR1c190IGVyciA9IE5PX0VSUk9SOwotCi0gICAgc2l6ZV90IE4gPSBzeW1ib2xzLT5nZXRTeW1ib2xzKCkuc2l6ZSgpOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICBjb25zdCBBYXB0U3ltYm9sRW50cnkmIHN5bSA9IHN5bWJvbHMtPmdldFN5bWJvbHMoKS52YWx1ZUF0KGkpOwotICAgICAgICBpZiAoc3ltLnR5cGVDb2RlICE9IEFhcHRTeW1ib2xFbnRyeTo6VFlQRV9JTlQzMikgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWFzc2V0cy0+aXNKYXZhU3ltYm9sKHN5bSwgaW5jbHVkZVByaXZhdGUpKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZzggbmFtZTgoc3ltLm5hbWUpOwotICAgICAgICBmcHJpbnRmKGZwLCAiaW50ICVzICVzIDB4JTA4eFxuIiwKLSAgICAgICAgICAgICAgICBjbGFzc05hbWUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgZmxhdHRlblN5bWJvbChuYW1lOCkuc3RyaW5nKCksIChpbnQpc3ltLmludDMyVmFsKTsKLSAgICB9Ci0KLSAgICBOID0gc3ltYm9scy0+Z2V0TmVzdGVkU3ltYm9scygpLnNpemUoKTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgc3A8QWFwdFN5bWJvbHM+IG5zeW1ib2xzID0gc3ltYm9scy0+Z2V0TmVzdGVkU3ltYm9scygpLnZhbHVlQXQoaSk7Ci0gICAgICAgIFN0cmluZzggbmNsYXNzTmFtZShzeW1ib2xzLT5nZXROZXN0ZWRTeW1ib2xzKCkua2V5QXQoaSkpOwotICAgICAgICBpZiAobmNsYXNzTmFtZSA9PSAic3R5bGVhYmxlIikgewotICAgICAgICAgICAgZXJyID0gd3JpdGVUZXh0TGF5b3V0Q2xhc3NlcyhmcCwgYXNzZXRzLCBuc3ltYm9scywgaW5jbHVkZVByaXZhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXJyID0gd3JpdGVUZXh0U3ltYm9sQ2xhc3MoZnAsIGFzc2V0cywgaW5jbHVkZVByaXZhdGUsIG5zeW1ib2xzLCBuY2xhc3NOYW1lKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCB3cml0ZVJlc291cmNlU3ltYm9scyhCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICBjb25zdCBTdHJpbmc4JiBwYWNrYWdlLCBib29sIGluY2x1ZGVQcml2YXRlKQotewotICAgIGlmICghYnVuZGxlLT5nZXRSQ2xhc3NEaXIoKSkgewotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogdGV4dFN5bWJvbHNEZXN0ID0gYnVuZGxlLT5nZXRPdXRwdXRUZXh0U3ltYm9scygpOwotCi0gICAgU3RyaW5nOCBSKCJSIik7Ci0gICAgY29uc3Qgc2l6ZV90IE4gPSBhc3NldHMtPmdldFN5bWJvbHMoKS5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBzcDxBYXB0U3ltYm9scz4gc3ltYm9scyA9IGFzc2V0cy0+Z2V0U3ltYm9scygpLnZhbHVlQXQoaSk7Ci0gICAgICAgIFN0cmluZzggY2xhc3NOYW1lKGFzc2V0cy0+Z2V0U3ltYm9scygpLmtleUF0KGkpKTsKLSAgICAgICAgU3RyaW5nOCBkZXN0KGJ1bmRsZS0+Z2V0UkNsYXNzRGlyKCkpOwotCi0gICAgICAgIGlmIChidW5kbGUtPmdldE1ha2VQYWNrYWdlRGlycygpKSB7Ci0gICAgICAgICAgICBTdHJpbmc4IHBrZyhwYWNrYWdlKTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGxhc3QgPSBwa2cuc3RyaW5nKCk7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBzID0gbGFzdC0xOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgICAgICBpZiAocyA+IGxhc3QgJiYgKCpzID09ICcuJyB8fCAqcyA9PSAwKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IHBhcnQobGFzdCwgcy1sYXN0KTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdC5hcHBlbmRQYXRoKHBhcnQpOwotI2lmZGVmIEhBVkVfTVNfQ19SVU5USU1FCi0gICAgICAgICAgICAgICAgICAgIF9ta2RpcihkZXN0LnN0cmluZygpKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1rZGlyKGRlc3Quc3RyaW5nKCksIFNfSVJVU1J8U19JV1VTUnxTX0lYVVNSfFNfSVJHUlB8U19JWEdSUCk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHMrMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IHdoaWxlICgqcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdC5hcHBlbmRQYXRoKGNsYXNzTmFtZSk7Ci0gICAgICAgIGRlc3QuYXBwZW5kKCIuamF2YSIpOwotICAgICAgICBGSUxFKiBmcCA9IGZvcGVuKGRlc3Quc3RyaW5nKCksICJ3KyIpOwotICAgICAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW5hYmxlIHRvIG9wZW4gY2xhc3MgZmlsZSAlczogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGRlc3Quc3RyaW5nKCksIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBpZiAoYnVuZGxlLT5nZXRWZXJib3NlKCkpIHsKLSAgICAgICAgICAgIHByaW50ZigiICBXcml0aW5nIHN5bWJvbHMgZm9yIGNsYXNzICVzLlxuIiwgY2xhc3NOYW1lLnN0cmluZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZwcmludGYoZnAsCi0gICAgICAgICAgICAiLyogQVVUTy1HRU5FUkFURUQgRklMRS4gIERPIE5PVCBNT0RJRlkuXG4iCi0gICAgICAgICAgICAiICpcbiIKLSAgICAgICAgICAgICIgKiBUaGlzIGNsYXNzIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSB0aGVcbiIKLSAgICAgICAgICAgICIgKiBhYXB0IHRvb2wgZnJvbSB0aGUgcmVzb3VyY2UgZGF0YSBpdCBmb3VuZC4gIEl0XG4iCi0gICAgICAgICAgICAiICogc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBieSBoYW5kLlxuIgotICAgICAgICAgICAgIiAqL1xuIgotICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgInBhY2thZ2UgJXM7XG5cbiIsIHBhY2thZ2Uuc3RyaW5nKCkpOwotCi0gICAgICAgIHN0YXR1c190IGVyciA9IHdyaXRlU3ltYm9sQ2xhc3MoZnAsIGFzc2V0cywgaW5jbHVkZVByaXZhdGUsIHN5bWJvbHMsCi0gICAgICAgICAgICAgICAgY2xhc3NOYW1lLCAwLCBidW5kbGUtPmdldE5vbkNvbnN0YW50SWQoKSk7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGV4dFN5bWJvbHNEZXN0ICE9IE5VTEwgJiYgUiA9PSBjbGFzc05hbWUpIHsKLSAgICAgICAgICAgIFN0cmluZzggdGV4dERlc3QodGV4dFN5bWJvbHNEZXN0KTsKLSAgICAgICAgICAgIHRleHREZXN0LmFwcGVuZFBhdGgoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIHRleHREZXN0LmFwcGVuZCgiLnR4dCIpOwotCi0gICAgICAgICAgICBGSUxFKiBmcCA9IGZvcGVuKHRleHREZXN0LnN0cmluZygpLCAidysiKTsKLSAgICAgICAgICAgIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW5hYmxlIHRvIG9wZW4gdGV4dCBzeW1ib2wgZmlsZSAlczogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGVzdC5zdHJpbmcoKSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChidW5kbGUtPmdldFZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiICBXcml0aW5nIHRleHQgc3ltYm9scyBmb3IgY2xhc3MgJXMuXG4iLCBjbGFzc05hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSB3cml0ZVRleHRTeW1ib2xDbGFzcyhmcCwgYXNzZXRzLCBpbmNsdWRlUHJpdmF0ZSwgc3ltYm9scywKLSAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIHdlcmUgYXNrZWQgdG8gZ2VuZXJhdGUgYSBkZXBlbmRlbmN5IGZpbGUsIHdlJ2xsIGdvIGFoZWFkIGFuZCBhZGQgdGhpcyBSLmphdmEKLSAgICAgICAgLy8gYXMgYSB0YXJnZXQgaW4gdGhlIGRlcGVuZGVuY3kgZmlsZSByaWdodCBuZXh0IHRvIGl0LgotICAgICAgICBpZiAoYnVuZGxlLT5nZXRHZW5EZXBlbmRlbmNpZXMoKSAmJiBSID09IGNsYXNzTmFtZSkgewotICAgICAgICAgICAgLy8gQWRkIHRoaXMgUi5qYXZhIHRvIHRoZSBkZXBlbmRlbmN5IGZpbGUKLSAgICAgICAgICAgIFN0cmluZzggZGVwZW5kZW5jeUZpbGUoYnVuZGxlLT5nZXRSQ2xhc3NEaXIoKSk7Ci0gICAgICAgICAgICBkZXBlbmRlbmN5RmlsZS5hcHBlbmRQYXRoKCJSLmphdmEuZCIpOwotCi0gICAgICAgICAgICBGSUxFICpmcCA9IGZvcGVuKGRlcGVuZGVuY3lGaWxlLnN0cmluZygpLCAiYSIpOwotICAgICAgICAgICAgZnByaW50ZihmcCwiJXMgXFxcbiIsIGRlc3Quc3RyaW5nKCkpOwotICAgICAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotCi1jbGFzcyBQcm9ndWFyZEtlZXBTZXQKLXsKLXB1YmxpYzoKLSAgICAvLyB7IHJ1bGUgLS0+IHsgZmlsZSBsb2NhdGlvbnMgfSB9Ci0gICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgU29ydGVkVmVjdG9yPFN0cmluZzg+ID4gcnVsZXM7Ci0KLSAgICB2b2lkIGFkZChjb25zdCBTdHJpbmc4JiBydWxlLCBjb25zdCBTdHJpbmc4JiB3aGVyZSk7Ci19OwotCi12b2lkIFByb2d1YXJkS2VlcFNldDo6YWRkKGNvbnN0IFN0cmluZzgmIHJ1bGUsIGNvbnN0IFN0cmluZzgmIHdoZXJlKQotewotICAgIHNzaXplX3QgaW5kZXggPSBydWxlcy5pbmRleE9mS2V5KHJ1bGUpOwotICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgaW5kZXggPSBydWxlcy5hZGQocnVsZSwgU29ydGVkVmVjdG9yPFN0cmluZzg+KCkpOwotICAgIH0KLSAgICBydWxlcy5lZGl0VmFsdWVBdChpbmRleCkuYWRkKHdoZXJlKTsKLX0KLQotdm9pZAotYWRkUHJvZ3VhcmRLZWVwUnVsZShQcm9ndWFyZEtlZXBTZXQqIGtlZXAsIGNvbnN0IFN0cmluZzgmIGluQ2xhc3NOYW1lLAotICAgICAgICBjb25zdCBjaGFyKiBwa2csIGNvbnN0IFN0cmluZzgmIHNyY05hbWUsIGludCBsaW5lKQotewotICAgIFN0cmluZzggY2xhc3NOYW1lKGluQ2xhc3NOYW1lKTsKLSAgICBpZiAocGtnICE9IE5VTEwpIHsKLSAgICAgICAgLy8gYXNkZiAgICAgLS0+IHBhY2thZ2UuYXNkZgotICAgICAgICAvLyAuYXNkZiAgLmEuYiAgLS0+IHBhY2thZ2UuYXNkZiBwYWNrYWdlLmEuYgotICAgICAgICAvLyBhc2RmLmFkc2YgLS0+IGFzZGYuYXNkZgotICAgICAgICBjb25zdCBjaGFyKiBwID0gY2xhc3NOYW1lLnN0cmluZygpOwotICAgICAgICBjb25zdCBjaGFyKiBxID0gc3RyY2hyKHAsICcuJyk7Ci0gICAgICAgIGlmIChwID09IHEpIHsKLSAgICAgICAgICAgIGNsYXNzTmFtZSA9IHBrZzsKLSAgICAgICAgICAgIGNsYXNzTmFtZS5hcHBlbmQoaW5DbGFzc05hbWUpOwotICAgICAgICB9IGVsc2UgaWYgKHEgPT0gTlVMTCkgewotICAgICAgICAgICAgY2xhc3NOYW1lID0gcGtnOwotICAgICAgICAgICAgY2xhc3NOYW1lLmFwcGVuZCgiLiIpOwotICAgICAgICAgICAgY2xhc3NOYW1lLmFwcGVuZChpbkNsYXNzTmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTdHJpbmc4IHJ1bGUoIi1rZWVwIGNsYXNzICIpOwotICAgIHJ1bGUgKz0gY2xhc3NOYW1lOwotICAgIHJ1bGUgKz0gIiB7IDxpbml0PiguLi4pOyB9IjsKLQotICAgIFN0cmluZzggbG9jYXRpb24oInZpZXcgIik7Ci0gICAgbG9jYXRpb24gKz0gc3JjTmFtZTsKLSAgICBjaGFyIGxpbmVub1syMF07Ci0gICAgc3ByaW50ZihsaW5lbm8sICI6JWQiLCBsaW5lKTsKLSAgICBsb2NhdGlvbiArPSBsaW5lbm87Ci0KLSAgICBrZWVwLT5hZGQocnVsZSwgbG9jYXRpb24pOwotfQotCi12b2lkCi1hZGRQcm9ndWFyZEtlZXBNZXRob2RSdWxlKFByb2d1YXJkS2VlcFNldCoga2VlcCwgY29uc3QgU3RyaW5nOCYgbWVtYmVyTmFtZSwKLSAgICAgICAgY29uc3QgY2hhciogcGtnLCBjb25zdCBTdHJpbmc4JiBzcmNOYW1lLCBpbnQgbGluZSkKLXsKLSAgICBTdHJpbmc4IHJ1bGUoIi1rZWVwY2xhc3NtZW1iZXJzIGNsYXNzICogeyAqKiogIik7Ci0gICAgcnVsZSArPSBtZW1iZXJOYW1lOwotICAgIHJ1bGUgKz0gIiguLi4pOyB9IjsKLQotICAgIFN0cmluZzggbG9jYXRpb24oIm9uQ2xpY2sgIik7Ci0gICAgbG9jYXRpb24gKz0gc3JjTmFtZTsKLSAgICBjaGFyIGxpbmVub1syMF07Ci0gICAgc3ByaW50ZihsaW5lbm8sICI6JWQiLCBsaW5lKTsKLSAgICBsb2NhdGlvbiArPSBsaW5lbm87Ci0KLSAgICBrZWVwLT5hZGQocnVsZSwgbG9jYXRpb24pOwotfQotCi1zdGF0dXNfdAotd3JpdGVQcm9ndWFyZEZvckFuZHJvaWRNYW5pZmVzdChQcm9ndWFyZEtlZXBTZXQqIGtlZXAsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMpCi17Ci0gICAgc3RhdHVzX3QgZXJyOwotICAgIFJlc1hNTFRyZWUgdHJlZTsKLSAgICBzaXplX3QgbGVuOwotICAgIFJlc1hNTFRyZWU6OmV2ZW50X2NvZGVfdCBjb2RlOwotICAgIGludCBkZXB0aCA9IDA7Ci0gICAgYm9vbCBpbkFwcGxpY2F0aW9uID0gZmFsc2U7Ci0gICAgU3RyaW5nOCBlcnJvcjsKLSAgICBzcDxBYXB0R3JvdXA+IGFzc0dyb3VwOwotICAgIHNwPEFhcHRGaWxlPiBhc3NGaWxlOwotICAgIFN0cmluZzggcGtnOwotCi0gICAgLy8gRmlyc3QsIGxvb2sgZm9yIGEgcGFja2FnZSBmaWxlIHRvIHBhcnNlLiAgVGhpcyBpcyByZXF1aXJlZCB0bwotICAgIC8vIGJlIGFibGUgdG8gZ2VuZXJhdGUgdGhlIHJlc291cmNlIGluZm9ybWF0aW9uLgotICAgIGFzc0dyb3VwID0gYXNzZXRzLT5nZXRGaWxlcygpLnZhbHVlRm9yKFN0cmluZzgoIkFuZHJvaWRNYW5pZmVzdC54bWwiKSk7Ci0gICAgaWYgKGFzc0dyb3VwID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogTm8gQW5kcm9pZE1hbmlmZXN0LnhtbCBmaWxlIGZvdW5kLlxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAoYXNzR3JvdXAtPmdldEZpbGVzKCkuc2l6ZSgpICE9IDEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBNdWx0aXBsZSBBbmRyb2lkTWFuaWZlc3QueG1sIGZpbGVzIGZvdW5kLCB1c2luZyAlc1xuIiwKLSAgICAgICAgICAgICAgICBhc3NHcm91cC0+Z2V0RmlsZXMoKS52YWx1ZUF0KDApLT5nZXRQcmludGFibGVTb3VyY2UoKS5zdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgYXNzRmlsZSA9IGFzc0dyb3VwLT5nZXRGaWxlcygpLnZhbHVlQXQoMCk7Ci0KLSAgICBlcnIgPSBwYXJzZVhNTFJlc291cmNlKGFzc0ZpbGUsICZ0cmVlKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgdHJlZS5yZXN0YXJ0KCk7Ci0KLSAgICB3aGlsZSAoKGNvZGU9dHJlZS5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfVEFHKSB7Ci0gICAgICAgICAgICBpZiAoLyogbmFtZSA9PSAiQXBwbGljYXRpb24iICYmICovIGRlcHRoID09IDIpIHsKLSAgICAgICAgICAgICAgICBpbkFwcGxpY2F0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXB0aC0tOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvZGUgIT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBkZXB0aCsrOwotICAgICAgICBTdHJpbmc4IHRhZyh0cmVlLmdldEVsZW1lbnROYW1lKCZsZW4pKTsKLSAgICAgICAgLy8gcHJpbnRmKCJEZXB0aCAlZCB0YWcgJXNcbiIsIGRlcHRoLCB0YWcuc3RyaW5nKCkpOwotICAgICAgICBib29sIGtlZXBUYWcgPSBmYWxzZTsKLSAgICAgICAgaWYgKGRlcHRoID09IDEpIHsKLSAgICAgICAgICAgIGlmICh0YWcgIT0gIm1hbmlmZXN0IikgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG1hbmlmZXN0IGRvZXMgbm90IHN0YXJ0IHdpdGggPG1hbmlmZXN0PiB0YWdcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBrZyA9IGdldEF0dHJpYnV0ZSh0cmVlLCBOVUxMLCAicGFja2FnZSIsIE5VTEwpOwotICAgICAgICB9IGVsc2UgaWYgKGRlcHRoID09IDIpIHsKLSAgICAgICAgICAgIGlmICh0YWcgPT0gImFwcGxpY2F0aW9uIikgewotICAgICAgICAgICAgICAgIGluQXBwbGljYXRpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIGtlZXBUYWcgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgU3RyaW5nOCBhZ2VudCA9IGdldEF0dHJpYnV0ZSh0cmVlLCAiaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdXBBZ2VudCIsICZlcnJvcik7Ci0gICAgICAgICAgICAgICAgaWYgKGFnZW50Lmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBhZGRQcm9ndWFyZEtlZXBSdWxlKGtlZXAsIGFnZW50LCBwa2cuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzRmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCksIHRyZWUuZ2V0TGluZU51bWJlcigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSAiaW5zdHJ1bWVudGF0aW9uIikgewotICAgICAgICAgICAgICAgIGtlZXBUYWcgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICgha2VlcFRhZyAmJiBpbkFwcGxpY2F0aW9uICYmIGRlcHRoID09IDMpIHsKLSAgICAgICAgICAgIGlmICh0YWcgPT0gImFjdGl2aXR5IiB8fCB0YWcgPT0gInNlcnZpY2UiIHx8IHRhZyA9PSAicmVjZWl2ZXIiIHx8IHRhZyA9PSAicHJvdmlkZXIiKSB7Ci0gICAgICAgICAgICAgICAga2VlcFRhZyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtlZXBUYWcpIHsKLSAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IGdldEF0dHJpYnV0ZSh0cmVlLCAiaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiwKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiLCAmZXJyb3IpOwotICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJXNcbiIsIGVycm9yLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobmFtZS5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBhZGRQcm9ndWFyZEtlZXBSdWxlKGtlZXAsIG5hbWUsIHBrZy5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc0ZpbGUtPmdldFByaW50YWJsZVNvdXJjZSgpLCB0cmVlLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0cnVjdCBOYW1lc3BhY2VBdHRyaWJ1dGVQYWlyIHsKLSAgICBjb25zdCBjaGFyKiBuczsKLSAgICBjb25zdCBjaGFyKiBhdHRyOwotCi0gICAgTmFtZXNwYWNlQXR0cmlidXRlUGFpcihjb25zdCBjaGFyKiBuLCBjb25zdCBjaGFyKiBhKSA6IG5zKG4pLCBhdHRyKGEpIHt9Ci0gICAgTmFtZXNwYWNlQXR0cmlidXRlUGFpcigpIDogbnMoTlVMTCksIGF0dHIoTlVMTCkge30KLX07Ci0KLXN0YXR1c190Ci13cml0ZVByb2d1YXJkRm9yWG1sKFByb2d1YXJkS2VlcFNldCoga2VlcCwgY29uc3Qgc3A8QWFwdEZpbGU+JiBsYXlvdXRGaWxlLAotICAgICAgICBjb25zdCBjaGFyKiBzdGFydFRhZywgY29uc3QgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgVmVjdG9yPE5hbWVzcGFjZUF0dHJpYnV0ZVBhaXI+ID4qIHRhZ0F0dHJQYWlycykKLXsKLSAgICBzdGF0dXNfdCBlcnI7Ci0gICAgUmVzWE1MVHJlZSB0cmVlOwotICAgIHNpemVfdCBsZW47Ci0gICAgUmVzWE1MVHJlZTo6ZXZlbnRfY29kZV90IGNvZGU7Ci0KLSAgICBlcnIgPSBwYXJzZVhNTFJlc291cmNlKGxheW91dEZpbGUsICZ0cmVlKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgdHJlZS5yZXN0YXJ0KCk7Ci0KLSAgICBpZiAoc3RhcnRUYWcgIT0gTlVMTCkgewotICAgICAgICBib29sIGhhdmVTdGFydCA9IGZhbHNlOwotICAgICAgICB3aGlsZSAoKGNvZGU9dHJlZS5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICAgICAgaWYgKGNvZGUgIT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmc4IHRhZyh0cmVlLmdldEVsZW1lbnROYW1lKCZsZW4pKTsKLSAgICAgICAgICAgIGlmICh0YWcgPT0gc3RhcnRUYWcpIHsKLSAgICAgICAgICAgICAgICBoYXZlU3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFoYXZlU3RhcnQpIHsKLSAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlICgoY29kZT10cmVlLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgIGlmIChjb2RlICE9IFJlc1hNTFRyZWU6OlNUQVJUX1RBRykgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nOCB0YWcodHJlZS5nZXRFbGVtZW50TmFtZSgmbGVuKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gJy4nLCB3ZSdsbCBhc3N1bWUgdGhhdCBpdCdzIG9uZSBvZiB0aGUgYnVpbHQgaW4gbmFtZXMuCi0gICAgICAgIGlmIChzdHJjaHIodGFnLnN0cmluZygpLCAnLicpKSB7Ci0gICAgICAgICAgICBhZGRQcm9ndWFyZEtlZXBSdWxlKGtlZXAsIHRhZywgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgbGF5b3V0RmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCksIHRyZWUuZ2V0TGluZU51bWJlcigpKTsKLSAgICAgICAgfSBlbHNlIGlmICh0YWdBdHRyUGFpcnMgIT0gTlVMTCkgewotICAgICAgICAgICAgc3NpemVfdCB0YWdJbmRleCA9IHRhZ0F0dHJQYWlycy0+aW5kZXhPZktleSh0YWcpOwotICAgICAgICAgICAgaWYgKHRhZ0luZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8TmFtZXNwYWNlQXR0cmlidXRlUGFpcj4mIG5zQXR0clZlY3RvciA9IHRhZ0F0dHJQYWlycy0+dmFsdWVBdCh0YWdJbmRleCk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuc0F0dHJWZWN0b3Iuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZXNwYWNlQXR0cmlidXRlUGFpciYgbnNBdHRyID0gbnNBdHRyVmVjdG9yW2ldOwotCi0gICAgICAgICAgICAgICAgICAgIHNzaXplX3QgYXR0ckluZGV4ID0gdHJlZS5pbmRleE9mQXR0cmlidXRlKG5zQXR0ci5ucywgbnNBdHRyLmF0dHIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ckluZGV4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnByaW50ZihzdGRlcnIsICIlczolZDogPCVzPiBkb2VzIG5vdCBoYXZlIGF0dHJpYnV0ZSAlczolcy5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbGF5b3V0RmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCksIHRyZWUuZ2V0TGluZU51bWJlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRhZy5zdHJpbmcoKSwgbnNBdHRyLm5zLCBuc0F0dHIuYXR0cik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkUHJvZ3VhcmRLZWVwUnVsZShrZWVwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHRyZWUuZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoYXR0ckluZGV4LCAmbGVuKSksIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dEZpbGUtPmdldFByaW50YWJsZVNvdXJjZSgpLCB0cmVlLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3NpemVfdCBhdHRySW5kZXggPSB0cmVlLmluZGV4T2ZBdHRyaWJ1dGUoUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAib25DbGljayIpOwotICAgICAgICBpZiAoYXR0ckluZGV4ID49IDApIHsKLSAgICAgICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgICAgICBhZGRQcm9ndWFyZEtlZXBNZXRob2RSdWxlKGtlZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgodHJlZS5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShhdHRySW5kZXgsICZsZW4pKSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0RmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCksIHRyZWUuZ2V0TGluZU51bWJlcigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdGljIHZvaWQgYWRkVGFnQXR0clBhaXIoS2V5ZWRWZWN0b3I8U3RyaW5nOCwgVmVjdG9yPE5hbWVzcGFjZUF0dHJpYnV0ZVBhaXI+ID4qIGRlc3QsCi0gICAgICAgIGNvbnN0IGNoYXIqIHRhZywgY29uc3QgY2hhciogbnMsIGNvbnN0IGNoYXIqIGF0dHIpIHsKLSAgICBTdHJpbmc4IHRhZ1N0cih0YWcpOwotICAgIHNzaXplX3QgaW5kZXggPSBkZXN0LT5pbmRleE9mS2V5KHRhZ1N0cik7Ci0KLSAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgIFZlY3RvcjxOYW1lc3BhY2VBdHRyaWJ1dGVQYWlyPiB2ZWN0b3I7Ci0gICAgICAgIHZlY3Rvci5hZGQoTmFtZXNwYWNlQXR0cmlidXRlUGFpcihucywgYXR0cikpOwotICAgICAgICBkZXN0LT5hZGQodGFnU3RyLCB2ZWN0b3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc3QtPmVkaXRWYWx1ZUF0KGluZGV4KS5hZGQoTmFtZXNwYWNlQXR0cmlidXRlUGFpcihucywgYXR0cikpOwotICAgIH0KLX0KLQotc3RhdHVzX3QKLXdyaXRlUHJvZ3VhcmRGb3JMYXlvdXRzKFByb2d1YXJkS2VlcFNldCoga2VlcCwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cykKLXsKLSAgICBzdGF0dXNfdCBlcnI7Ci0KLSAgICAvLyB0YWc6YXR0cmlidXRlIHBhaXJzIHRoYXQgc2hvdWxkIGJlIGNoZWNrZWQgaW4gbGF5b3V0IGZpbGVzLgotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIFZlY3RvcjxOYW1lc3BhY2VBdHRyaWJ1dGVQYWlyPiA+IGtMYXlvdXRUYWdBdHRyUGFpcnM7Ci0gICAgYWRkVGFnQXR0clBhaXIoJmtMYXlvdXRUYWdBdHRyUGFpcnMsICJ2aWV3IiwgTlVMTCwgImNsYXNzIik7Ci0gICAgYWRkVGFnQXR0clBhaXIoJmtMYXlvdXRUYWdBdHRyUGFpcnMsICJmcmFnbWVudCIsIE5VTEwsICJjbGFzcyIpOwotICAgIGFkZFRhZ0F0dHJQYWlyKCZrTGF5b3V0VGFnQXR0clBhaXJzLCAiZnJhZ21lbnQiLCBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0UsICJuYW1lIik7Ci0KLSAgICAvLyB0YWc6YXR0cmlidXRlIHBhaXJzIHRoYXQgc2hvdWxkIGJlIGNoZWNrZWQgaW4geG1sIGZpbGVzLgotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIFZlY3RvcjxOYW1lc3BhY2VBdHRyaWJ1dGVQYWlyPiA+IGtYbWxUYWdBdHRyUGFpcnM7Ci0gICAgYWRkVGFnQXR0clBhaXIoJmtYbWxUYWdBdHRyUGFpcnMsICJQcmVmZXJlbmNlU2NyZWVuIiwgUkVTT1VSQ0VTX0FORFJPSURfTkFNRVNQQUNFLCAiZnJhZ21lbnQiKTsKLSAgICBhZGRUYWdBdHRyUGFpcigma1htbFRhZ0F0dHJQYWlycywgImhlYWRlciIsIFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSwgImZyYWdtZW50Iik7Ci0KLSAgICBjb25zdCBWZWN0b3I8c3A8QWFwdERpcj4gPiYgZGlycyA9IGFzc2V0cy0+cmVzRGlycygpOwotICAgIGNvbnN0IHNpemVfdCBLID0gZGlycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3Qgaz0wOyBrPEs7IGsrKykgewotICAgICAgICBjb25zdCBzcDxBYXB0RGlyPiYgZCA9IGRpcnMuaXRlbUF0KGspOwotICAgICAgICBjb25zdCBTdHJpbmc4JiBkaXJOYW1lID0gZC0+Z2V0TGVhZigpOwotICAgICAgICBjb25zdCBjaGFyKiBzdGFydFRhZyA9IE5VTEw7Ci0gICAgICAgIGNvbnN0IEtleWVkVmVjdG9yPFN0cmluZzgsIFZlY3RvcjxOYW1lc3BhY2VBdHRyaWJ1dGVQYWlyPiA+KiB0YWdBdHRyUGFpcnMgPSBOVUxMOwotICAgICAgICBpZiAoKGRpck5hbWUgPT0gU3RyaW5nOCgibGF5b3V0IikpIHx8IChzdHJuY21wKGRpck5hbWUuc3RyaW5nKCksICJsYXlvdXQtIiwgNykgPT0gMCkpIHsKLSAgICAgICAgICAgIHRhZ0F0dHJQYWlycyA9ICZrTGF5b3V0VGFnQXR0clBhaXJzOwotICAgICAgICB9IGVsc2UgaWYgKChkaXJOYW1lID09IFN0cmluZzgoInhtbCIpKSB8fCAoc3RybmNtcChkaXJOYW1lLnN0cmluZygpLCAieG1sLSIsIDQpID09IDApKSB7Ci0gICAgICAgICAgICBzdGFydFRhZyA9ICJQcmVmZXJlbmNlU2NyZWVuIjsKLSAgICAgICAgICAgIHRhZ0F0dHJQYWlycyA9ICZrWG1sVGFnQXR0clBhaXJzOwotICAgICAgICB9IGVsc2UgaWYgKChkaXJOYW1lID09IFN0cmluZzgoIm1lbnUiKSkgfHwgKHN0cm5jbXAoZGlyTmFtZS5zdHJpbmcoKSwgIm1lbnUtIiwgNSkgPT0gMCkpIHsKLSAgICAgICAgICAgIHN0YXJ0VGFnID0gIm1lbnUiOwotICAgICAgICAgICAgdGFnQXR0clBhaXJzID0gTlVMTDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgS2V5ZWRWZWN0b3I8U3RyaW5nOCxzcDxBYXB0R3JvdXA+ID4gZ3JvdXBzID0gZC0+Z2V0RmlsZXMoKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBncm91cHMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBzcDxBYXB0R3JvdXA+JiBncm91cCA9IGdyb3Vwcy52YWx1ZUF0KGkpOwotICAgICAgICAgICAgY29uc3QgRGVmYXVsdEtleWVkVmVjdG9yPEFhcHRHcm91cEVudHJ5LCBzcDxBYXB0RmlsZT4gPiYgZmlsZXMgPSBncm91cC0+Z2V0RmlsZXMoKTsKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBNID0gZmlsZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3Qgaj0wOyBqPE07IGorKykgewotICAgICAgICAgICAgICAgIGVyciA9IHdyaXRlUHJvZ3VhcmRGb3JYbWwoa2VlcCwgZmlsZXMudmFsdWVBdChqKSwgc3RhcnRUYWcsIHRhZ0F0dHJQYWlycyk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gSGFuZGxlIHRoZSBvdmVybGF5cwotICAgIHNwPEFhcHRBc3NldHM+IG92ZXJsYXkgPSBhc3NldHMtPmdldE92ZXJsYXkoKTsKLSAgICBpZiAob3ZlcmxheS5nZXQoKSkgewotICAgICAgICByZXR1cm4gd3JpdGVQcm9ndWFyZEZvckxheW91dHMoa2VlcCwgb3ZlcmxheSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdAotd3JpdGVQcm9ndWFyZEZpbGUoQnVuZGxlKiBidW5kbGUsIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMpCi17Ci0gICAgc3RhdHVzX3QgZXJyID0gLTE7Ci0KLSAgICBpZiAoIWJ1bmRsZS0+Z2V0UHJvZ3VhcmRGaWxlKCkpIHsKLSAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgIH0KLQotICAgIFByb2d1YXJkS2VlcFNldCBrZWVwOwotCi0gICAgZXJyID0gd3JpdGVQcm9ndWFyZEZvckFuZHJvaWRNYW5pZmVzdCgma2VlcCwgYXNzZXRzKTsKLSAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGVyciA9IHdyaXRlUHJvZ3VhcmRGb3JMYXlvdXRzKCZrZWVwLCBhc3NldHMpOwotICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgRklMRSogZnAgPSBmb3BlbihidW5kbGUtPmdldFByb2d1YXJkRmlsZSgpLCAidysiKTsKLSAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBVbmFibGUgdG8gb3BlbiBjbGFzcyBmaWxlICVzOiAlc1xuIiwKLSAgICAgICAgICAgICAgICBidW5kbGUtPmdldFByb2d1YXJkRmlsZSgpLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LCBTb3J0ZWRWZWN0b3I8U3RyaW5nOD4gPiYgcnVsZXMgPSBrZWVwLnJ1bGVzOwotICAgIGNvbnN0IHNpemVfdCBOID0gcnVsZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgY29uc3QgU29ydGVkVmVjdG9yPFN0cmluZzg+JiBsb2NhdGlvbnMgPSBydWxlcy52YWx1ZUF0KGkpOwotICAgICAgICBjb25zdCBzaXplX3QgTSA9IGxvY2F0aW9ucy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGo9MDsgajxNOyBqKyspIHsKLSAgICAgICAgICAgIGZwcmludGYoZnAsICIjICVzXG4iLCBsb2NhdGlvbnMuaXRlbUF0KGopLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKGZwLCAiJXNcblxuIiwgcnVsZXMua2V5QXQoaSkuc3RyaW5nKCkpOwotICAgIH0KLSAgICBmY2xvc2UoZnApOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotLy8gTG9vcHMgdGhyb3VnaCB0aGUgc3RyaW5nIHBhdGhzIGFuZCB3cml0ZXMgdGhlbSB0byB0aGUgZmlsZSBwb2ludGVyCi0vLyBFYWNoIGZpbGUgcGF0aCBpcyB3cml0dGVuIG9uIGl0cyBvd24gbGluZSB3aXRoIGEgdGVybWluYXRpbmcgYmFja3NsYXNoLgotc3RhdHVzX3Qgd3JpdGVQYXRoc1RvRmlsZShjb25zdCBzcDxGaWxlUGF0aFN0b3JlPiYgZmlsZXMsIEZJTEUqIGZwKQotewotICAgIHN0YXR1c190IGRlcHMgPSAtMTsKLSAgICBmb3IgKHNpemVfdCBmaWxlX2kgPSAwOyBmaWxlX2kgPCBmaWxlcy0+c2l6ZSgpOyArK2ZpbGVfaSkgewotICAgICAgICAvLyBBZGQgdGhlIGZ1bGwgZmlsZSBwYXRoIHRvIHRoZSBkZXBlbmRlbmN5IGZpbGUKLSAgICAgICAgZnByaW50ZihmcCwgIiVzIFxcXG4iLCBmaWxlcy0+aXRlbUF0KGZpbGVfaSkuc3RyaW5nKCkpOwotICAgICAgICBkZXBzKys7Ci0gICAgfQotICAgIHJldHVybiBkZXBzOwotfQotCi1zdGF0dXNfdAotd3JpdGVEZXBlbmRlbmN5UHJlUmVxcyhCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywgRklMRSogZnAsIGJvb2wgaW5jbHVkZVJhdykKLXsKLSAgICBzdGF0dXNfdCBkZXBzID0gLTE7Ci0gICAgZGVwcyArPSB3cml0ZVBhdGhzVG9GaWxlKGFzc2V0cy0+Z2V0RnVsbFJlc1BhdGhzKCksIGZwKTsKLSAgICBpZiAoaW5jbHVkZVJhdykgewotICAgICAgICBkZXBzICs9IHdyaXRlUGF0aHNUb0ZpbGUoYXNzZXRzLT5nZXRGdWxsQXNzZXRQYXRocygpLCBmcCk7Ci0gICAgfQotICAgIHJldHVybiBkZXBzOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9SZXNvdXJjZUZpbHRlci5jcHAgYi90b29scy9hYXB0L1Jlc291cmNlRmlsdGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNmZDJhNS4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L1Jlc291cmNlRmlsdGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIEJ1aWxkIHJlc291cmNlIGZpbGVzIGZyb20gcmF3IGFzc2V0cy4KLS8vCi0KLSNpbmNsdWRlICJSZXNvdXJjZUZpbHRlci5oIgotCi1zdGF0dXNfdAotUmVzb3VyY2VGaWx0ZXI6OnBhcnNlKGNvbnN0IGNoYXIqIGFyZykKLXsKLSAgICBpZiAoYXJnID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogcCA9IGFyZzsKLSAgICBjb25zdCBjaGFyKiBxOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgcSA9IHN0cmNocihwLCAnLCcpOwotICAgICAgICBpZiAocSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBxID0gcCArIHN0cmxlbihwKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZzggcGFydChwLCBxLXApOwotCi0gICAgICAgIGlmIChwYXJ0ID09ICJ6el9aWiIpIHsKLSAgICAgICAgICAgIG1Db250YWluc1BzZXVkbyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGF4aXM7Ci0gICAgICAgIHVpbnQzMl90IHZhbHVlOwotICAgICAgICBpZiAoQWFwdEdyb3VwRW50cnk6OnBhcnNlTmFtZVBhcnQocGFydCwgJmF4aXMsICZ2YWx1ZSkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBjb25maWd1cmF0aW9uOiAlc1xuIiwgYXJnKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICAgICAgICAgICAgICAgICAgICAiKTsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxwLWFyZzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8cS1wOyBpKyspIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIl4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0KLSAgICAgICAgc3NpemVfdCBpbmRleCA9IG1EYXRhLmluZGV4T2ZLZXkoYXhpcyk7Ci0gICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgIG1EYXRhLmFkZChheGlzLCBTb3J0ZWRWZWN0b3I8dWludDMyX3Q+KCkpOwotICAgICAgICB9Ci0gICAgICAgIFNvcnRlZFZlY3Rvcjx1aW50MzJfdD4mIHN2ID0gbURhdGEuZWRpdFZhbHVlRm9yKGF4aXMpOwotICAgICAgICBzdi5hZGQodmFsdWUpOwotICAgICAgICAvLyBpZiBpdCdzIGEgbG9jYWxlIHdpdGggYSByZWdpb24sIGFsc28gbWF0Y2ggYW4gdW5tb2RpZmllZCBsb2NhbGUgb2YgdGhlCi0gICAgICAgIC8vIHNhbWUgbGFuZ3VhZ2UKLSAgICAgICAgaWYgKGF4aXMgPT0gQVhJU19MQU5HVUFHRSkgewotICAgICAgICAgICAgaWYgKHZhbHVlICYgMHhmZmZmMDAwMCkgewotICAgICAgICAgICAgICAgIHN2LmFkZCh2YWx1ZSAmIDB4MDAwMGZmZmYpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHAgPSBxOwotICAgICAgICBpZiAoISpwKSBicmVhazsKLSAgICAgICAgcCsrOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotYm9vbAotUmVzb3VyY2VGaWx0ZXI6OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiBtRGF0YS5zaXplKCkgPT0gMDsKLX0KLQotYm9vbAotUmVzb3VyY2VGaWx0ZXI6Om1hdGNoKGludCBheGlzLCB1aW50MzJfdCB2YWx1ZSkgY29uc3QKLXsKLSAgICBpZiAodmFsdWUgPT0gMCkgewotICAgICAgICAvLyB0aGV5IGRpZG4ndCBzcGVjaWZ5IGFueXRoaW5nIHNvIHRha2UgZXZlcnl0aGluZwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgc3NpemVfdCBpbmRleCA9IG1EYXRhLmluZGV4T2ZLZXkoYXhpcyk7Ci0gICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICAvLyB3ZSBkaWRuJ3QgcmVxdWVzdCBhbnl0aGluZyBvbiB0aGlzIGF4aXMgc28gdGFrZSBldmVyeXRoaW5nCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjb25zdCBTb3J0ZWRWZWN0b3I8dWludDMyX3Q+JiBzdiA9IG1EYXRhLnZhbHVlQXQoaW5kZXgpOwotICAgIHJldHVybiBzdi5pbmRleE9mKHZhbHVlKSA+PSAwOwotfQotCi1ib29sCi1SZXNvdXJjZUZpbHRlcjo6bWF0Y2goaW50IGF4aXMsIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgY29uZmlnKSBjb25zdAotewotICAgIHJldHVybiBtYXRjaChheGlzLCBBYXB0R3JvdXBFbnRyeTo6Z2V0Q29uZmlnVmFsdWVGb3JBeGlzKGNvbmZpZywgYXhpcykpOwotfQotCi1ib29sCi1SZXNvdXJjZUZpbHRlcjo6bWF0Y2goY29uc3QgUmVzVGFibGVfY29uZmlnJiBjb25maWcpIGNvbnN0Ci17Ci0gICAgZm9yIChpbnQgaT1BWElTX1NUQVJUOyBpPD1BWElTX0VORDsgaSsrKSB7Ci0gICAgICAgIGlmICghbWF0Y2goaSwgQWFwdEdyb3VwRW50cnk6OmdldENvbmZpZ1ZhbHVlRm9yQXhpcyhjb25maWcsIGkpKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1jb25zdCBTb3J0ZWRWZWN0b3I8dWludDMyX3Q+KiBSZXNvdXJjZUZpbHRlcjo6Y29uZmlnc0ZvckF4aXMoaW50IGF4aXMpIGNvbnN0Ci17Ci0gICAgc3NpemVfdCBpbmRleCA9IG1EYXRhLmluZGV4T2ZLZXkoYXhpcyk7Ci0gICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuICZtRGF0YS52YWx1ZUF0KGluZGV4KTsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvUmVzb3VyY2VGaWx0ZXIuaCBiL3Rvb2xzL2FhcHQvUmVzb3VyY2VGaWx0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ3YjdiYi4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L1Jlc291cmNlRmlsdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIEJ1aWxkIHJlc291cmNlIGZpbGVzIGZyb20gcmF3IGFzc2V0cy4KLS8vCi0KLSNpZm5kZWYgUkVTT1VSQ0VfRklMVEVSX0gKLSNkZWZpbmUgUkVTT1VSQ0VfRklMVEVSX0gKLQotI2luY2x1ZGUgIkFhcHRBc3NldHMuaCIKLQotLyoqCi0gKiBJbXBsZW1lbnRzIGxvZ2ljIGZvciBwYXJzaW5nIGFuZCBoYW5kbGluZyAiLWMiIGFuZCAiLS1wcmVmZXJyZWQtY29uZmlndXJhdGlvbnMiCi0gKiBvcHRpb25zLgotICovCi1jbGFzcyBSZXNvdXJjZUZpbHRlcgotewotcHVibGljOgotICAgIFJlc291cmNlRmlsdGVyKCkgOiBtRGF0YSgpLCBtQ29udGFpbnNQc2V1ZG8oZmFsc2UpIHt9Ci0gICAgc3RhdHVzX3QgcGFyc2UoY29uc3QgY2hhciogYXJnKTsKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKLSAgICBib29sIG1hdGNoKGludCBheGlzLCB1aW50MzJfdCB2YWx1ZSkgY29uc3Q7Ci0gICAgYm9vbCBtYXRjaChpbnQgYXhpcywgY29uc3QgUmVzVGFibGVfY29uZmlnJiBjb25maWcpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2goY29uc3QgUmVzVGFibGVfY29uZmlnJiBjb25maWcpIGNvbnN0OwotICAgIGNvbnN0IFNvcnRlZFZlY3Rvcjx1aW50MzJfdD4qIGNvbmZpZ3NGb3JBeGlzKGludCBheGlzKSBjb25zdDsKLSAgICBpbmxpbmUgYm9vbCBjb250YWluc1BzZXVkbygpIGNvbnN0IHsgcmV0dXJuIG1Db250YWluc1BzZXVkbzsgfQotCi1wcml2YXRlOgotICAgIEtleWVkVmVjdG9yPGludCxTb3J0ZWRWZWN0b3I8dWludDMyX3Q+ID4gbURhdGE7Ci0gICAgYm9vbCBtQ29udGFpbnNQc2V1ZG87Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvUmVzb3VyY2VJZENhY2hlLmNwcCBiL3Rvb2xzL2FhcHQvUmVzb3VyY2VJZENhY2hlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAzZjRmNi4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L1Jlc291cmNlSWRDYWNoZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBNYW5hZ2UgYSByZXNvdXJjZSBJRCBjYWNoZS4KLQotI2RlZmluZSBMT0dfVEFHICJSZXNvdXJjZUlkQ2FjaGUiCi0KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmcxNi5oPgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotI2luY2x1ZGUgIlJlc291cmNlSWRDYWNoZS5oIgotI2luY2x1ZGUgPG1hcD4KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLQotc3RhdGljIHNpemVfdCBtSGl0cyA9IDA7Ci1zdGF0aWMgc2l6ZV90IG1NaXNzZXMgPSAwOwotc3RhdGljIHNpemVfdCBtQ29sbGlzaW9ucyA9IDA7Ci0KLXN0YXRpYyBjb25zdCBzaXplX3QgTUFYX0NBQ0hFX0VOVFJJRVMgPSAyMDQ4Owotc3RhdGljIGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2IFRSVUUxNigiMSIpOwotc3RhdGljIGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2IEZBTFNFMTYoIjAiKTsKLQotc3RydWN0IENhY2hlRW50cnkgewotICAgIC8vIGNvbmNhdGVuYXRpb24gb2YgdGhlIHJlbGV2YW50IHN0cmluZ3MgaW50byBhIHNpbmdsZSBpbnN0YW5jZQotICAgIGFuZHJvaWQ6OlN0cmluZzE2IGhhc2hlZE5hbWU7Ci0gICAgdWludDMyX3QgaWQ7Ci0KLSAgICBDYWNoZUVudHJ5KCkge30KLSAgICBDYWNoZUVudHJ5KGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2JiBuYW1lLCB1aW50MzJfdCByZXNJZCkgOiBoYXNoZWROYW1lKG5hbWUpLCBpZChyZXNJZCkgeyB9Ci19OwotCi1zdGF0aWMgbWFwPCB1aW50MzJfdCwgQ2FjaGVFbnRyeSA+IG1JZE1hcDsKLQotCi0vLyBkamIyOyByZWFzb25hYmxlIGNob2ljZSBmb3Igc3RyaW5ncyB3aGVuIGNvbGxpc2lvbnMgYXJlbid0IHBhcnRpY3VsYXJseSBpbXBvcnRhbnQKLXN0YXRpYyBpbmxpbmUgdWludDMyX3QgaGFzaHJvdW5kKHVpbnQzMl90IGhhc2gsIGludCBjKSB7Ci0gICAgcmV0dXJuICgoaGFzaCA8PCA1KSArIGhhc2gpICsgYzsgICAgLyogaGFzaCAqIDMzICsgYyAqLwotfQotCi1zdGF0aWMgdWludDMyX3QgaGFzaChjb25zdCBhbmRyb2lkOjpTdHJpbmcxNiYgaGFzaGFibGVTdHJpbmcpIHsKLSAgICB1aW50MzJfdCBoYXNoID0gNTM4MTsKLSAgICBjb25zdCBjaGFyMTZfdCogc3RyID0gaGFzaGFibGVTdHJpbmcuc3RyaW5nKCk7Ci0gICAgd2hpbGUgKGludCBjID0gKnN0cisrKSBoYXNoID0gaGFzaHJvdW5kKGhhc2gsIGMpOwotICAgIHJldHVybiBoYXNoOwotfQotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nMTYgbWFrZUhhc2hhYmxlTmFtZShjb25zdCBhbmRyb2lkOjpTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgY29uc3QgYW5kcm9pZDo6U3RyaW5nMTYmIHR5cGUsCi0gICAgICAgIGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2JiBuYW1lLAotICAgICAgICBib29sIG9ubHlQdWJsaWMpIHsKLSAgICBTdHJpbmcxNiBoYXNoYWJsZSA9IFN0cmluZzE2KG5hbWUpOwotICAgIGhhc2hhYmxlICs9IHR5cGU7Ci0gICAgaGFzaGFibGUgKz0gcGFja2FnZTsKLSAgICBoYXNoYWJsZSArPSAob25seVB1YmxpYyA/IFRSVUUxNiA6IEZBTFNFMTYpOwotICAgIHJldHVybiBoYXNoYWJsZTsKLX0KLQotdWludDMyX3QgUmVzb3VyY2VJZENhY2hlOjpsb29rdXAoY29uc3QgYW5kcm9pZDo6U3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgIGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2JiB0eXBlLAotICAgICAgICBjb25zdCBhbmRyb2lkOjpTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgYm9vbCBvbmx5UHVibGljKSB7Ci0gICAgY29uc3QgU3RyaW5nMTYgaGFzaGVkTmFtZSA9IG1ha2VIYXNoYWJsZU5hbWUocGFja2FnZSwgdHlwZSwgbmFtZSwgb25seVB1YmxpYyk7Ci0gICAgY29uc3QgdWludDMyX3QgaGFzaGNvZGUgPSBoYXNoKGhhc2hlZE5hbWUpOwotICAgIG1hcDx1aW50MzJfdCwgQ2FjaGVFbnRyeT46Oml0ZXJhdG9yIGl0ZW0gPSBtSWRNYXAuZmluZChoYXNoY29kZSk7Ci0gICAgaWYgKGl0ZW0gPT0gbUlkTWFwLmVuZCgpKSB7Ci0gICAgICAgIC8vIGNhY2hlIG1pc3MKLSAgICAgICAgbU1pc3NlcysrOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBsZWdpdCBtYXRjaD8KLSAgICBpZiAoaGFzaGVkTmFtZSA9PSAoKml0ZW0pLnNlY29uZC5oYXNoZWROYW1lKSB7Ci0gICAgICAgIG1IaXRzKys7Ci0gICAgICAgIHJldHVybiAoKml0ZW0pLnNlY29uZC5pZDsKLSAgICB9Ci0KLSAgICAvLyBjb2xsaXNpb24KLSAgICBtQ29sbGlzaW9ucysrOwotICAgIG1JZE1hcC5lcmFzZShoYXNoY29kZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIHJldHVybnMgdGhlIHJlc291cmNlIElEIGJlaW5nIHN0b3JlZCwgZm9yIGNhbGxzaXRlIGNvbnZlbmllbmNlCi11aW50MzJfdCBSZXNvdXJjZUlkQ2FjaGU6OnN0b3JlKGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICBjb25zdCBhbmRyb2lkOjpTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgY29uc3QgYW5kcm9pZDo6U3RyaW5nMTYmIG5hbWUsCi0gICAgICAgIGJvb2wgb25seVB1YmxpYywKLSAgICAgICAgdWludDMyX3QgcmVzSWQpIHsKLSAgICBpZiAobUlkTWFwLnNpemUoKSA8IE1BWF9DQUNIRV9FTlRSSUVTKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZzE2IGhhc2hlZE5hbWUgPSBtYWtlSGFzaGFibGVOYW1lKHBhY2thZ2UsIHR5cGUsIG5hbWUsIG9ubHlQdWJsaWMpOwotICAgICAgICBjb25zdCB1aW50MzJfdCBoYXNoY29kZSA9IGhhc2goaGFzaGVkTmFtZSk7Ci0gICAgICAgIG1JZE1hcFtoYXNoY29kZV0gPSBDYWNoZUVudHJ5KGhhc2hlZE5hbWUsIHJlc0lkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc0lkOwotfQotCi12b2lkIFJlc291cmNlSWRDYWNoZTo6ZHVtcCgpIHsKLSAgICBwcmludGYoIlJlc291cmNlSWRDYWNoZSBkdW1wOlxuIik7Ci0gICAgcHJpbnRmKCJTaXplOiAlbGRcbiIsIG1JZE1hcC5zaXplKCkpOwotICAgIHByaW50ZigiSGl0czogICAlbGRcbiIsIG1IaXRzKTsKLSAgICBwcmludGYoIk1pc3NlczogJWxkXG4iLCBtTWlzc2VzKTsKLSAgICBwcmludGYoIihDb2xsaXNpb25zOiAlbGQpXG4iLCBtQ29sbGlzaW9ucyk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvUmVzb3VyY2VJZENhY2hlLmggYi90b29scy9hYXB0L1Jlc291cmNlSWRDYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWY3NzgxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvUmVzb3VyY2VJZENhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIE1hbmFnZSBhIHJlc291cmNlIElEIGNhY2hlLgotCi0jaWZuZGVmIFJFU09VUkNFX0lEX0NBQ0hFX0gKLSNkZWZpbmUgUkVTT1VSQ0VfSURfQ0FDSEVfSAotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1jbGFzcyBhbmRyb2lkOjpTdHJpbmcxNjsKLQotY2xhc3MgUmVzb3VyY2VJZENhY2hlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdWludDMyX3QgbG9va3VwKGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgY29uc3QgYW5kcm9pZDo6U3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICBjb25zdCBhbmRyb2lkOjpTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgIGJvb2wgb25seVB1YmxpYyk7Ci0KLSAgICBzdGF0aWMgdWludDMyX3Qgc3RvcmUoY29uc3QgYW5kcm9pZDo6U3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICBjb25zdCBhbmRyb2lkOjpTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgIGNvbnN0IGFuZHJvaWQ6OlN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgYm9vbCBvbmx5UHVibGljLAotICAgICAgICAgICAgdWludDMyX3QgcmVzSWQpOwotCi0gICAgc3RhdGljIHZvaWQgZHVtcCh2b2lkKTsKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9hYXB0L1Jlc291cmNlVGFibGUuY3BwIGIvdG9vbHMvYWFwdC9SZXNvdXJjZVRhYmxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJlNTI1NC4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L1Jlc291cmNlVGFibGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzk2NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIEJ1aWxkIHJlc291cmNlIGZpbGVzIGZyb20gcmF3IGFzc2V0cy4KLS8vCi0KLSNpbmNsdWRlICJSZXNvdXJjZVRhYmxlLmgiCi0KLSNpbmNsdWRlICJYTUxOb2RlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUlkQ2FjaGUuaCIKLQotI2luY2x1ZGUgPGFuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvQnl0ZU9yZGVyLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0KLSNkZWZpbmUgTk9JU1koeCkgLy94Ci0KLXN0YXR1c190IGNvbXBpbGVYbWxGaWxlKGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4mIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVGFibGUqIHRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbnMpCi17Ci0gICAgc3A8WE1MTm9kZT4gcm9vdCA9IFhNTE5vZGU6OnBhcnNlKHRhcmdldCk7Ci0gICAgaWYgKHJvb3QgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbXBpbGVYbWxGaWxlKGFzc2V0cywgcm9vdCwgdGFyZ2V0LCB0YWJsZSwgb3B0aW9ucyk7Ci19Ci0KLXN0YXR1c190IGNvbXBpbGVYbWxGaWxlKGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4mIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRGaWxlPiYgb3V0VGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUYWJsZSogdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9ucykKLXsKLSAgICBzcDxYTUxOb2RlPiByb290ID0gWE1MTm9kZTo6cGFyc2UodGFyZ2V0KTsKLSAgICBpZiAocm9vdCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gY29tcGlsZVhtbEZpbGUoYXNzZXRzLCByb290LCBvdXRUYXJnZXQsIHRhYmxlLCBvcHRpb25zKTsKLX0KLQotc3RhdHVzX3QgY29tcGlsZVhtbEZpbGUoY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPFhNTE5vZGU+JiByb290LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEZpbGU+JiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVRhYmxlKiB0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHRpb25zKQotewotICAgIGlmICgob3B0aW9ucyZYTUxfQ09NUElMRV9TVFJJUF9XSElURVNQQUNFKSAhPSAwKSB7Ci0gICAgICAgIHJvb3QtPnJlbW92ZVdoaXRlc3BhY2UodHJ1ZSwgTlVMTCk7Ci0gICAgfSBlbHNlICBpZiAoKG9wdGlvbnMmWE1MX0NPTVBJTEVfQ09NUEFDVF9XSElURVNQQUNFKSAhPSAwKSB7Ci0gICAgICAgIHJvb3QtPnJlbW92ZVdoaXRlc3BhY2UoZmFsc2UsIE5VTEwpOwotICAgIH0KLQotICAgIGlmICgob3B0aW9ucyZYTUxfQ09NUElMRV9VVEY4KSAhPSAwKSB7Ci0gICAgICAgIHJvb3QtPnNldFVURjgodHJ1ZSk7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNFcnJvcnMgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoKG9wdGlvbnMmWE1MX0NPTVBJTEVfQVNTSUdOX0FUVFJJQlVURV9JRFMpICE9IDApIHsKLSAgICAgICAgc3RhdHVzX3QgZXJyID0gcm9vdC0+YXNzaWduUmVzb3VyY2VJZHMoYXNzZXRzLCB0YWJsZSk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0dXNfdCBlcnIgPSByb290LT5wYXJzZVZhbHVlcyhhc3NldHMsIHRhYmxlKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGhhc0Vycm9ycykgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgCi0gICAgTk9JU1kocHJpbnRmKCJJbnB1dCBYTUwgUmVzb3VyY2U6XG4iKSk7Ci0gICAgTk9JU1kocm9vdC0+cHJpbnQoKSk7Ci0gICAgZXJyID0gcm9vdC0+ZmxhdHRlbih0YXJnZXQsCi0gICAgICAgICAgICAob3B0aW9ucyZYTUxfQ09NUElMRV9TVFJJUF9DT01NRU5UUykgIT0gMCwKLSAgICAgICAgICAgIChvcHRpb25zJlhNTF9DT01QSUxFX1NUUklQX1JBV19WQUxVRVMpICE9IDApOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBOT0lTWShwcmludGYoIk91dHB1dCBYTUwgUmVzb3VyY2U6XG4iKSk7Ci0gICAgTk9JU1koUmVzWE1MVHJlZSB0cmVlOwotICAgICAgICB0cmVlLnNldFRvKHRhcmdldC0+Z2V0RGF0YSgpLCB0YXJnZXQtPmdldFNpemUoKSk7Ci0gICAgICAgIHByaW50WE1MQmxvY2soJnRyZWUpKTsKLQotICAgIHRhcmdldC0+c2V0Q29tcHJlc3Npb25NZXRob2QoWmlwRW50cnk6OmtDb21wcmVzc0RlZmxhdGVkKTsKLSAgICAKLSAgICByZXR1cm4gZXJyOwotfQotCi0jdW5kZWYgTk9JU1kKLSNkZWZpbmUgTk9JU1koeCkgLy94Ci0KLXN0cnVjdCBmbGFnX2VudHJ5Ci17Ci0gICAgY29uc3QgY2hhcjE2X3QqIG5hbWU7Ci0gICAgc2l6ZV90IG5hbWVMZW47Ci0gICAgdWludDMyX3QgdmFsdWU7Ci0gICAgY29uc3QgY2hhciogZGVzY3JpcHRpb247Ci19OwotCi1zdGF0aWMgY29uc3QgY2hhcjE2X3QgcmVmZXJlbmNlQXJyYXlbXSA9Ci0gICAgeyAncicsICdlJywgJ2YnLCAnZScsICdyJywgJ2UnLCAnbicsICdjJywgJ2UnIH07Ci1zdGF0aWMgY29uc3QgY2hhcjE2X3Qgc3RyaW5nQXJyYXlbXSA9Ci0gICAgeyAncycsICd0JywgJ3InLCAnaScsICduJywgJ2cnIH07Ci1zdGF0aWMgY29uc3QgY2hhcjE2X3QgaW50ZWdlckFycmF5W10gPQotICAgIHsgJ2knLCAnbicsICd0JywgJ2UnLCAnZycsICdlJywgJ3InIH07Ci1zdGF0aWMgY29uc3QgY2hhcjE2X3QgYm9vbGVhbkFycmF5W10gPQotICAgIHsgJ2InLCAnbycsICdvJywgJ2wnLCAnZScsICdhJywgJ24nIH07Ci1zdGF0aWMgY29uc3QgY2hhcjE2X3QgY29sb3JBcnJheVtdID0KLSAgICB7ICdjJywgJ28nLCAnbCcsICdvJywgJ3InIH07Ci1zdGF0aWMgY29uc3QgY2hhcjE2X3QgZmxvYXRBcnJheVtdID0KLSAgICB7ICdmJywgJ2wnLCAnbycsICdhJywgJ3QnIH07Ci1zdGF0aWMgY29uc3QgY2hhcjE2X3QgZGltZW5zaW9uQXJyYXlbXSA9Ci0gICAgeyAnZCcsICdpJywgJ20nLCAnZScsICduJywgJ3MnLCAnaScsICdvJywgJ24nIH07Ci1zdGF0aWMgY29uc3QgY2hhcjE2X3QgZnJhY3Rpb25BcnJheVtdID0KLSAgICB7ICdmJywgJ3InLCAnYScsICdjJywgJ3QnLCAnaScsICdvJywgJ24nIH07Ci1zdGF0aWMgY29uc3QgY2hhcjE2X3QgZW51bUFycmF5W10gPQotICAgIHsgJ2UnLCAnbicsICd1JywgJ20nIH07Ci1zdGF0aWMgY29uc3QgY2hhcjE2X3QgZmxhZ3NBcnJheVtdID0KLSAgICB7ICdmJywgJ2wnLCAnYScsICdnJywgJ3MnIH07Ci0KLXN0YXRpYyBjb25zdCBmbGFnX2VudHJ5IGdGb3JtYXRGbGFnc1tdID0gewotICAgIHsgcmVmZXJlbmNlQXJyYXksIHNpemVvZihyZWZlcmVuY2VBcnJheSkvMiwgUmVzVGFibGVfbWFwOjpUWVBFX1JFRkVSRU5DRSwKLSAgICAgICJhIHJlZmVyZW5jZSB0byBhbm90aGVyIHJlc291cmNlLCBpbiB0aGUgZm9ybSBcIjxjb2RlPkBbK11bPGk+cGFja2FnZTwvaT46XTxpPnR5cGU8L2k+OjxpPm5hbWU8L2k+PC9jb2RlPlwiXG4iCi0gICAgICAib3IgdG8gYSB0aGVtZSBhdHRyaWJ1dGUgaW4gdGhlIGZvcm0gXCI8Y29kZT4/WzxpPnBhY2thZ2U8L2k+Ol1bPGk+dHlwZTwvaT46XTxpPm5hbWU8L2k+PC9jb2RlPlwiLiJ9LAotICAgIHsgc3RyaW5nQXJyYXksIHNpemVvZihzdHJpbmdBcnJheSkvMiwgUmVzVGFibGVfbWFwOjpUWVBFX1NUUklORywKLSAgICAgICJhIHN0cmluZyB2YWx1ZSwgdXNpbmcgJ1xcXFw7JyB0byBlc2NhcGUgY2hhcmFjdGVycyBzdWNoIGFzICdcXFxcbicgb3IgJ1xcXFx1eHh4eCcgZm9yIGEgdW5pY29kZSBjaGFyYWN0ZXIuIiB9LAotICAgIHsgaW50ZWdlckFycmF5LCBzaXplb2YoaW50ZWdlckFycmF5KS8yLCBSZXNUYWJsZV9tYXA6OlRZUEVfSU5URUdFUiwKLSAgICAgICJhbiBpbnRlZ2VyIHZhbHVlLCBzdWNoIGFzIFwiPGNvZGU+MTAwPC9jb2RlPlwiLiIgfSwKLSAgICB7IGJvb2xlYW5BcnJheSwgc2l6ZW9mKGJvb2xlYW5BcnJheSkvMiwgUmVzVGFibGVfbWFwOjpUWVBFX0JPT0xFQU4sCi0gICAgICAiYSBib29sZWFuIHZhbHVlLCBlaXRoZXIgXCI8Y29kZT50cnVlPC9jb2RlPlwiIG9yIFwiPGNvZGU+ZmFsc2U8L2NvZGU+XCIuIiB9LAotICAgIHsgY29sb3JBcnJheSwgc2l6ZW9mKGNvbG9yQXJyYXkpLzIsIFJlc1RhYmxlX21hcDo6VFlQRV9DT0xPUiwKLSAgICAgICJhIGNvbG9yIHZhbHVlLCBpbiB0aGUgZm9ybSBvZiBcIjxjb2RlPiM8aT5yZ2I8L2k+PC9jb2RlPlwiLCBcIjxjb2RlPiM8aT5hcmdiPC9pPjwvY29kZT5cIixcbiIKLSAgICAgICJcIjxjb2RlPiM8aT5ycmdnYmI8L2k+PC9jb2RlPlwiLCBvciBcIjxjb2RlPiM8aT5hYXJyZ2diYjwvaT48L2NvZGU+XCIuIiB9LAotICAgIHsgZmxvYXRBcnJheSwgc2l6ZW9mKGZsb2F0QXJyYXkpLzIsIFJlc1RhYmxlX21hcDo6VFlQRV9GTE9BVCwKLSAgICAgICJhIGZsb2F0aW5nIHBvaW50IHZhbHVlLCBzdWNoIGFzIFwiPGNvZGU+MS4yPC9jb2RlPlwiLiJ9LAotICAgIHsgZGltZW5zaW9uQXJyYXksIHNpemVvZihkaW1lbnNpb25BcnJheSkvMiwgUmVzVGFibGVfbWFwOjpUWVBFX0RJTUVOU0lPTiwKLSAgICAgICJhIGRpbWVuc2lvbiB2YWx1ZSwgd2hpY2ggaXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYXBwZW5kZWQgd2l0aCBhIHVuaXQgc3VjaCBhcyBcIjxjb2RlPjE0LjVzcDwvY29kZT5cIi5cbiIKLSAgICAgICJBdmFpbGFibGUgdW5pdHMgYXJlOiBweCAocGl4ZWxzKSwgZHAgKGRlbnNpdHktaW5kZXBlbmRlbnQgcGl4ZWxzKSwgc3AgKHNjYWxlZCBwaXhlbHMgYmFzZWQgb24gcHJlZmVycmVkIGZvbnQgc2l6ZSksXG4iCi0gICAgICAiaW4gKGluY2hlcyksIG1tIChtaWxsaW1ldGVycykuIiB9LAotICAgIHsgZnJhY3Rpb25BcnJheSwgc2l6ZW9mKGZyYWN0aW9uQXJyYXkpLzIsIFJlc1RhYmxlX21hcDo6VFlQRV9GUkFDVElPTiwKLSAgICAgICJhIGZyYWN0aW9uYWwgdmFsdWUsIHdoaWNoIGlzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGFwcGVuZGVkIHdpdGggZWl0aGVyICUgb3IgJXAsIHN1Y2ggYXMgXCI8Y29kZT4xNC41JTwvY29kZT5cIi5cbiIKLSAgICAgICJUaGUgJSBzdWZmaXggYWx3YXlzIG1lYW5zIGEgcGVyY2VudGFnZSBvZiB0aGUgYmFzZSBzaXplOyB0aGUgb3B0aW9uYWwgJXAgc3VmZml4IHByb3ZpZGVzIGEgc2l6ZSByZWxhdGl2ZSB0b1xuIgotICAgICAgInNvbWUgcGFyZW50IGNvbnRhaW5lci4iIH0sCi0gICAgeyBlbnVtQXJyYXksIHNpemVvZihlbnVtQXJyYXkpLzIsIFJlc1RhYmxlX21hcDo6VFlQRV9FTlVNLCBOVUxMIH0sCi0gICAgeyBmbGFnc0FycmF5LCBzaXplb2YoZmxhZ3NBcnJheSkvMiwgUmVzVGFibGVfbWFwOjpUWVBFX0ZMQUdTLCBOVUxMIH0sCi0gICAgeyBOVUxMLCAwLCAwLCBOVUxMIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyMTZfdCBzdWdnZXN0ZWRBcnJheVtdID0geyAncycsICd1JywgJ2cnLCAnZycsICdlJywgJ3MnLCAndCcsICdlJywgJ2QnIH07Ci0KLXN0YXRpYyBjb25zdCBmbGFnX2VudHJ5IGwxMG5SZXF1aXJlZEZsYWdzW10gPSB7Ci0gICAgeyBzdWdnZXN0ZWRBcnJheSwgc2l6ZW9mKHN1Z2dlc3RlZEFycmF5KS8yLCBSZXNUYWJsZV9tYXA6OkwxME5fU1VHR0VTVEVELCBOVUxMIH0sCi0gICAgeyBOVUxMLCAwLCAwLCBOVUxMIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyMTZfdCBudWxTdHJbXSA9IHsgMCB9OwotCi1zdGF0aWMgdWludDMyX3QgcGFyc2VfZmxhZ3MoY29uc3QgY2hhcjE2X3QqIHN0ciwgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxhZ19lbnRyeSogZmxhZ3MsIGJvb2wqIG91dEVycm9yID0gTlVMTCkKLXsKLSAgICB3aGlsZSAobGVuID4gMCAmJiBpc3NwYWNlKCpzdHIpKSB7Ci0gICAgICAgIHN0cisrOwotICAgICAgICBsZW4tLTsKLSAgICB9Ci0gICAgd2hpbGUgKGxlbiA+IDAgJiYgaXNzcGFjZShzdHJbbGVuLTFdKSkgewotICAgICAgICBsZW4tLTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyMTZfdCogY29uc3QgZW5kID0gc3RyICsgbGVuOwotICAgIHVpbnQzMl90IHZhbHVlID0gMDsKLQotICAgIHdoaWxlIChzdHIgPCBlbmQpIHsKLSAgICAgICAgY29uc3QgY2hhcjE2X3QqIGRpdiA9IHN0cjsKLSAgICAgICAgd2hpbGUgKGRpdiA8IGVuZCAmJiAqZGl2ICE9ICd8JykgewotICAgICAgICAgICAgZGl2Kys7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBmbGFnX2VudHJ5KiBjdXIgPSBmbGFnczsKLSAgICAgICAgd2hpbGUgKGN1ci0+bmFtZSkgewotICAgICAgICAgICAgaWYgKHN0cnpjbXAxNihjdXItPm5hbWUsIGN1ci0+bmFtZUxlbiwgc3RyLCBkaXYtc3RyKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgfD0gY3VyLT52YWx1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cisrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFjdXItPm5hbWUpIHsKLSAgICAgICAgICAgIGlmIChvdXRFcnJvcikgKm91dEVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RyID0gZGl2IDwgZW5kID8gZGl2KzEgOiBkaXY7Ci0gICAgfQotCi0gICAgaWYgKG91dEVycm9yKSAqb3V0RXJyb3IgPSBmYWxzZTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXN0YXRpYyBTdHJpbmcxNiBtYXlPck11c3QoaW50IHR5cGUsIGludCBmbGFncykKLXsKLSAgICBpZiAoKHR5cGUmKH5mbGFncykpID09IDApIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZzE2KCI8cD5NdXN0Iik7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBTdHJpbmcxNigiPHA+TWF5Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIGFwcGVuZFR5cGVJbmZvKFJlc291cmNlVGFibGUqIG91dFRhYmxlLCBjb25zdCBTdHJpbmcxNiYgcGtnLAotICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZU5hbWUsIGNvbnN0IFN0cmluZzE2JiBpZGVudCwgaW50IHR5cGUsCi0gICAgICAgIGNvbnN0IGZsYWdfZW50cnkqIGZsYWdzKQotewotICAgIGJvb2wgaGFkVHlwZSA9IGZhbHNlOwotICAgIHdoaWxlIChmbGFncy0+bmFtZSkgewotICAgICAgICBpZiAoKHR5cGUmZmxhZ3MtPnZhbHVlKSAhPSAwICYmIGZsYWdzLT5kZXNjcmlwdGlvbiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBTdHJpbmcxNiBmdWxsTXNnKG1heU9yTXVzdCh0eXBlLCBmbGFncy0+dmFsdWUpKTsKLSAgICAgICAgICAgIGZ1bGxNc2cuYXBwZW5kKFN0cmluZzE2KCIgYmUgIikpOwotICAgICAgICAgICAgZnVsbE1zZy5hcHBlbmQoU3RyaW5nMTYoZmxhZ3MtPmRlc2NyaXB0aW9uKSk7Ci0gICAgICAgICAgICBvdXRUYWJsZS0+YXBwZW5kVHlwZUNvbW1lbnQocGtnLCB0eXBlTmFtZSwgaWRlbnQsIGZ1bGxNc2cpOwotICAgICAgICAgICAgaGFkVHlwZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZmxhZ3MrKzsKLSAgICB9Ci0gICAgaWYgKGhhZFR5cGUgJiYgKHR5cGUmUmVzVGFibGVfbWFwOjpUWVBFX1JFRkVSRU5DRSkgPT0gMCkgewotICAgICAgICBvdXRUYWJsZS0+YXBwZW5kVHlwZUNvbW1lbnQocGtnLCB0eXBlTmFtZSwgaWRlbnQsCi0gICAgICAgICAgICAgICAgU3RyaW5nMTYoIjxwPlRoaXMgbWF5IGFsc28gYmUgYSByZWZlcmVuY2UgdG8gYSByZXNvdXJjZSAoaW4gdGhlIGZvcm1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiXCI8Y29kZT5AWzxpPnBhY2thZ2U8L2k+Ol08aT50eXBlPC9pPjo8aT5uYW1lPC9pPjwvY29kZT5cIikgb3JcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAidGhlbWUgYXR0cmlidXRlIChpbiB0aGUgZm9ybVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICJcIjxjb2RlPj9bPGk+cGFja2FnZTwvaT46XVs8aT50eXBlPC9pPjpdPGk+bmFtZTwvaT48L2NvZGU+XCIpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRhaW5pbmcgYSB2YWx1ZSBvZiB0aGlzIHR5cGUuIikpOwotICAgIH0KLX0KLQotc3RydWN0IFBlbmRpbmdBdHRyaWJ1dGUKLXsKLSAgICBjb25zdCBTdHJpbmcxNiBteVBhY2thZ2U7Ci0gICAgY29uc3QgU291cmNlUG9zIHNvdXJjZVBvczsKLSAgICBjb25zdCBib29sIGFwcGVuZENvbW1lbnQ7Ci0gICAgaW50MzJfdCB0eXBlOwotICAgIFN0cmluZzE2IGlkZW50OwotICAgIFN0cmluZzE2IGNvbW1lbnQ7Ci0gICAgYm9vbCBoYXNFcnJvcnM7Ci0gICAgYm9vbCBhZGRlZDsKLSAgICAKLSAgICBQZW5kaW5nQXR0cmlidXRlKFN0cmluZzE2IF9wYWNrYWdlLCBjb25zdCBzcDxBYXB0RmlsZT4mIGluLAotICAgICAgICAgICAgUmVzWE1MVHJlZSYgYmxvY2ssIGJvb2wgX2FwcGVuZENvbW1lbnQpCi0gICAgICAgIDogbXlQYWNrYWdlKF9wYWNrYWdlKQotICAgICAgICAsIHNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkKLSAgICAgICAgLCBhcHBlbmRDb21tZW50KF9hcHBlbmRDb21tZW50KQotICAgICAgICAsIHR5cGUoUmVzVGFibGVfbWFwOjpUWVBFX0FOWSkKLSAgICAgICAgLCBoYXNFcnJvcnMoZmFsc2UpCi0gICAgICAgICwgYWRkZWQoZmFsc2UpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzdGF0dXNfdCBjcmVhdGVJZk5lZWRlZChSZXNvdXJjZVRhYmxlKiBvdXRUYWJsZSkKLSAgICB7Ci0gICAgICAgIGlmIChhZGRlZCB8fCBoYXNFcnJvcnMpIHsKLSAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBhZGRlZCA9IHRydWU7Ci0KLSAgICAgICAgU3RyaW5nMTYgYXR0cjE2KCJhdHRyIik7Ci0gICAgICAgIAotICAgICAgICBpZiAob3V0VGFibGUtPmhhc0JhZ09yRW50cnkobXlQYWNrYWdlLCBhdHRyMTYsIGlkZW50KSkgewotICAgICAgICAgICAgc291cmNlUG9zLmVycm9yKCJBdHRyaWJ1dGUgXCIlc1wiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChpZGVudCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjaGFyIG51bWJlclN0clsxNl07Ci0gICAgICAgIHNwcmludGYobnVtYmVyU3RyLCAiJWQiLCB0eXBlKTsKLSAgICAgICAgc3RhdHVzX3QgZXJyID0gb3V0VGFibGUtPmFkZEJhZyhzb3VyY2VQb3MsIG15UGFja2FnZSwKLSAgICAgICAgICAgICAgICBhdHRyMTYsIGlkZW50LCBTdHJpbmcxNigiIiksCi0gICAgICAgICAgICAgICAgU3RyaW5nMTYoIl50eXBlIiksCi0gICAgICAgICAgICAgICAgU3RyaW5nMTYobnVtYmVyU3RyKSwgTlVMTCwgTlVMTCk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgICAgIG91dFRhYmxlLT5hcHBlbmRDb21tZW50KG15UGFja2FnZSwgYXR0cjE2LCBpZGVudCwgY29tbWVudCwgYXBwZW5kQ29tbWVudCk7Ci0gICAgICAgIC8vcHJpbnRmKCJBdHRyaWJ1dGUgJXMgY29tbWVudDogJXNcbiIsIFN0cmluZzgoaWRlbnQpLnN0cmluZygpLAotICAgICAgICAvLyAgICAgU3RyaW5nOChjb21tZW50KS5zdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotfTsKLQotc3RhdGljIHN0YXR1c190IGNvbXBpbGVBdHRyaWJ1dGUoY29uc3Qgc3A8QWFwdEZpbGU+JiBpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1hNTFRyZWUmIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG15UGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVGFibGUqIG91dFRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYqIG91dElkZW50ID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5TdHlsZWFibGUgPSBmYWxzZSkKLXsKLSAgICBQZW5kaW5nQXR0cmlidXRlIGF0dHIobXlQYWNrYWdlLCBpbiwgYmxvY2ssIGluU3R5bGVhYmxlKTsKLSAgICAKLSAgICBjb25zdCBTdHJpbmcxNiBhdHRyMTYoImF0dHIiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBpZDE2KCJpZCIpOwotCi0gICAgLy8gQXR0cmlidXRlIHR5cGUgY29uc3RhbnRzLgotICAgIGNvbnN0IFN0cmluZzE2IGVudW0xNigiZW51bSIpOwotICAgIGNvbnN0IFN0cmluZzE2IGZsYWcxNigiZmxhZyIpOwotCi0gICAgUmVzWE1MVHJlZTo6ZXZlbnRfY29kZV90IGNvZGU7Ci0gICAgc2l6ZV90IGxlbjsKLSAgICBzdGF0dXNfdCBlcnI7Ci0gICAgCi0gICAgc3NpemVfdCBpZGVudElkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgIm5hbWUiKTsKLSAgICBpZiAoaWRlbnRJZHggPj0gMCkgewotICAgICAgICBhdHRyLmlkZW50ID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaWRlbnRJZHgsICZsZW4pKTsKLSAgICAgICAgaWYgKG91dElkZW50KSB7Ci0gICAgICAgICAgICAqb3V0SWRlbnQgPSBhdHRyLmlkZW50OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXR0ci5zb3VyY2VQb3MuZXJyb3IoIkEgJ25hbWUnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPGF0dHI+XG4iKTsKLSAgICAgICAgYXR0ci5oYXNFcnJvcnMgPSB0cnVlOwotICAgIH0KLQotICAgIGF0dHIuY29tbWVudCA9IFN0cmluZzE2KAotICAgICAgICAgICAgYmxvY2suZ2V0Q29tbWVudCgmbGVuKSA/IGJsb2NrLmdldENvbW1lbnQoJmxlbikgOiBudWxTdHIpOwotCi0gICAgc3NpemVfdCB0eXBlSWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAiZm9ybWF0Iik7Ci0gICAgaWYgKHR5cGVJZHggPj0gMCkgewotICAgICAgICBTdHJpbmcxNiB0eXBlU3RyID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUodHlwZUlkeCwgJmxlbikpOwotICAgICAgICBhdHRyLnR5cGUgPSBwYXJzZV9mbGFncyh0eXBlU3RyLnN0cmluZygpLCB0eXBlU3RyLnNpemUoKSwgZ0Zvcm1hdEZsYWdzKTsKLSAgICAgICAgaWYgKGF0dHIudHlwZSA9PSAwKSB7Ci0gICAgICAgICAgICBhdHRyLnNvdXJjZVBvcy5lcnJvcigiVGFnIDxhdHRyPiAnZm9ybWF0JyBhdHRyaWJ1dGUgdmFsdWUgXCIlc1wiIG5vdCB2YWxpZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCh0eXBlU3RyKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYXR0ci5jcmVhdGVJZk5lZWRlZChvdXRUYWJsZSk7Ci0gICAgfSBlbHNlIGlmICghaW5TdHlsZWFibGUpIHsKLSAgICAgICAgLy8gQXR0cmlidXRlIGRlZmluaXRpb25zIG91dHNpZGUgb2Ygc3R5bGVhYmxlcyBhbHdheXMgZGVmaW5lIHRoZQotICAgICAgICAvLyBhdHRyaWJ1dGUgYXMgYSBnZW5lcmljIHZhbHVlLgotICAgICAgICBhdHRyLmNyZWF0ZUlmTmVlZGVkKG91dFRhYmxlKTsKLSAgICB9Ci0KLSAgICAvL3ByaW50ZigiQXR0cmlidXRlICVzOiB0eXBlPTB4JTA4eFxuIiwgU3RyaW5nOChhdHRyLmlkZW50KS5zdHJpbmcoKSwgYXR0ci50eXBlKTsKLQotICAgIHNzaXplX3QgbWluSWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAibWluIik7Ci0gICAgaWYgKG1pbklkeCA+PSAwKSB7Ci0gICAgICAgIFN0cmluZzE2IHZhbCA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKG1pbklkeCwgJmxlbikpOwotICAgICAgICBpZiAoIVJlc1RhYmxlOjpzdHJpbmdUb0ludCh2YWwuc3RyaW5nKCksIHZhbC5zaXplKCksIE5VTEwpKSB7Ci0gICAgICAgICAgICBhdHRyLnNvdXJjZVBvcy5lcnJvcigiVGFnIDxhdHRyPiAnbWluJyBhdHRyaWJ1dGUgbXVzdCBiZSBhIG51bWJlciwgbm90IFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCh2YWwpLnN0cmluZygpKTsKLSAgICAgICAgICAgIGF0dHIuaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBhdHRyLmNyZWF0ZUlmTmVlZGVkKG91dFRhYmxlKTsKLSAgICAgICAgaWYgKCFhdHRyLmhhc0Vycm9ycykgewotICAgICAgICAgICAgZXJyID0gb3V0VGFibGUtPmFkZEJhZyhhdHRyLnNvdXJjZVBvcywgbXlQYWNrYWdlLCBhdHRyMTYsIGF0dHIuaWRlbnQsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzE2KCIiKSwgU3RyaW5nMTYoIl5taW4iKSwgU3RyaW5nMTYodmFsKSwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgYXR0ci5oYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3NpemVfdCBtYXhJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJtYXgiKTsKLSAgICBpZiAobWF4SWR4ID49IDApIHsKLSAgICAgICAgU3RyaW5nMTYgdmFsID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUobWF4SWR4LCAmbGVuKSk7Ci0gICAgICAgIGlmICghUmVzVGFibGU6OnN0cmluZ1RvSW50KHZhbC5zdHJpbmcoKSwgdmFsLnNpemUoKSwgTlVMTCkpIHsKLSAgICAgICAgICAgIGF0dHIuc291cmNlUG9zLmVycm9yKCJUYWcgPGF0dHI+ICdtYXgnIGF0dHJpYnV0ZSBtdXN0IGJlIGEgbnVtYmVyLCBub3QgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHZhbCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgYXR0ci5oYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGF0dHIuY3JlYXRlSWZOZWVkZWQob3V0VGFibGUpOwotICAgICAgICBpZiAoIWF0dHIuaGFzRXJyb3JzKSB7Ci0gICAgICAgICAgICBlcnIgPSBvdXRUYWJsZS0+YWRkQmFnKGF0dHIuc291cmNlUG9zLCBteVBhY2thZ2UsIGF0dHIxNiwgYXR0ci5pZGVudCwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYoIiIpLCBTdHJpbmcxNigiXm1heCIpLCBTdHJpbmcxNih2YWwpLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgIGF0dHIuaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgobWluSWR4ID49IDAgfHwgbWF4SWR4ID49IDApICYmIChhdHRyLnR5cGUmUmVzVGFibGVfbWFwOjpUWVBFX0lOVEVHRVIpID09IDApIHsKLSAgICAgICAgYXR0ci5zb3VyY2VQb3MuZXJyb3IoIlRhZyA8YXR0cj4gbXVzdCBoYXZlIGZvcm1hdD1pbnRlZ2VyIGF0dHJpYnV0ZSBpZiB1c2luZyBtYXggb3IgbWluXG4iKTsKLSAgICAgICAgYXR0ci5oYXNFcnJvcnMgPSB0cnVlOwotICAgIH0KLQotICAgIHNzaXplX3QgbDEwbklkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgImxvY2FsaXphdGlvbiIpOwotICAgIGlmIChsMTBuSWR4ID49IDApIHsKLSAgICAgICAgY29uc3QgdWludDE2X3QqIHN0ciA9IGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGwxMG5JZHgsICZsZW4pOwotICAgICAgICBib29sIGVycm9yOwotICAgICAgICB1aW50MzJfdCBsMTBuX3JlcXVpcmVkID0gcGFyc2VfZmxhZ3Moc3RyLCBsZW4sIGwxMG5SZXF1aXJlZEZsYWdzLCAmZXJyb3IpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGF0dHIuc291cmNlUG9zLmVycm9yKCJUYWcgPGF0dHI+ICdsb2NhbGl6YXRpb24nIGF0dHJpYnV0ZSB2YWx1ZSBcIiVzXCIgbm90IHZhbGlkXG4iLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHN0cikuc3RyaW5nKCkpOwotICAgICAgICAgICAgYXR0ci5oYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGF0dHIuY3JlYXRlSWZOZWVkZWQob3V0VGFibGUpOwotICAgICAgICBpZiAoIWF0dHIuaGFzRXJyb3JzKSB7Ci0gICAgICAgICAgICBjaGFyIGJ1ZlsxMV07Ci0gICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVkIiwgbDEwbl9yZXF1aXJlZCk7Ci0gICAgICAgICAgICBlcnIgPSBvdXRUYWJsZS0+YWRkQmFnKGF0dHIuc291cmNlUG9zLCBteVBhY2thZ2UsIGF0dHIxNiwgYXR0ci5pZGVudCwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYoIiIpLCBTdHJpbmcxNigiXmwxMG4iKSwgU3RyaW5nMTYoYnVmKSwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgYXR0ci5oYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nMTYgZW51bU9yRmxhZ3NDb21tZW50OwotICAgIAotICAgIHdoaWxlICgoY29kZT1ibG9jay5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpTVEFSVF9UQUcpIHsKLSAgICAgICAgICAgIHVpbnQzMl90IGxvY2FsVHlwZSA9IDA7Ci0gICAgICAgICAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGVudW0xNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGxvY2FsVHlwZSA9IFJlc1RhYmxlX21hcDo6VFlQRV9FTlVNOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgZmxhZzE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgbG9jYWxUeXBlID0gUmVzVGFibGVfbWFwOjpUWVBFX0ZMQUdTOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAuZXJyb3IoIlRhZyA8JXM+IGNhbiBub3QgYXBwZWFyIGluc2lkZSA8YXR0cj4sIG9ubHkgPGVudW0+IG9yIDxmbGFnPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXR0ci5jcmVhdGVJZk5lZWRlZChvdXRUYWJsZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhdHRyLnR5cGUgPT0gUmVzVGFibGVfbWFwOjpUWVBFX0FOWSkgewotICAgICAgICAgICAgICAgIC8vIE5vIHR5cGUgd2FzIGV4cGxpY2l0bHkgc3RhdGVkLCBzbyBzdXBwbHlpbmcgZW51bSB0YWdzCi0gICAgICAgICAgICAgICAgLy8gaW1wbGljaXRseSBjcmVhdGVzIGFuIGVudW0gb3IgZmxhZy4KLSAgICAgICAgICAgICAgICBhdHRyLnR5cGUgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKGF0dHIudHlwZSYoUmVzVGFibGVfbWFwOjpUWVBFX0VOVU18UmVzVGFibGVfbWFwOjpUWVBFX0ZMQUdTKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIC8vIFdhc24ndCBvcmlnaW5hbGx5IHNwZWNpZmllZCBhcyBhbiBlbnVtLCBzbyB1cGRhdGUgaXRzIHR5cGUuCi0gICAgICAgICAgICAgICAgYXR0ci50eXBlIHw9IGxvY2FsVHlwZTsKLSAgICAgICAgICAgICAgICBpZiAoIWF0dHIuaGFzRXJyb3JzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgbnVtYmVyU3RyWzE2XTsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihudW1iZXJTdHIsICIlZCIsIGF0dHIudHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVyciA9IG91dFRhYmxlLT5hZGRCYWcoU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVBhY2thZ2UsIGF0dHIxNiwgYXR0ci5pZGVudCwgU3RyaW5nMTYoIiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2KCJedHlwZSIpLCBTdHJpbmcxNihudW1iZXJTdHIpLCBOVUxMLCBOVUxMLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5oYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICgodWludDMyX3QpKGF0dHIudHlwZSYoUmVzVGFibGVfbWFwOjpUWVBFX0VOVU18UmVzVGFibGVfbWFwOjpUWVBFX0ZMQUdTKSkgIT0gbG9jYWxUeXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2FsVHlwZSA9PSBSZXNUYWJsZV9tYXA6OlRZUEVfRU5VTSkgewotICAgICAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmVycm9yKCI8ZW51bT4gYXR0cmlidXRlIGNhbiBub3QgYmUgdXNlZCBpbnNpZGUgYSBmbGFncyBmb3JtYXRcbiIpOwotICAgICAgICAgICAgICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5lcnJvcigiPGZsYWc+IGF0dHJpYnV0ZSBjYW4gbm90IGJlIHVzZWQgaW5zaWRlIGEgZW51bSBmb3JtYXRcbiIpOwotICAgICAgICAgICAgICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcxNiBpdGVtSWRlbnQ7Ci0gICAgICAgICAgICBzc2l6ZV90IGl0ZW1JZGVudElkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgIm5hbWUiKTsKLSAgICAgICAgICAgIGlmIChpdGVtSWRlbnRJZHggPj0gMCkgewotICAgICAgICAgICAgICAgIGl0ZW1JZGVudCA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGl0ZW1JZGVudElkeCwgJmxlbikpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAuZXJyb3IoIkEgJ25hbWUnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPGVudW0+IG9yIDxmbGFnPlxuIik7Ci0gICAgICAgICAgICAgICAgYXR0ci5oYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcxNiB2YWx1ZTsKLSAgICAgICAgICAgIHNzaXplX3QgdmFsdWVJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJ2YWx1ZSIpOwotICAgICAgICAgICAgaWYgKHZhbHVlSWR4ID49IDApIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKHZhbHVlSWR4LCAmbGVuKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5lcnJvcigiQSAndmFsdWUnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPGVudW0+IG9yIDxmbGFnPlxuIik7Ci0gICAgICAgICAgICAgICAgYXR0ci5oYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFhdHRyLmhhc0Vycm9ycyAmJiAhUmVzVGFibGU6OnN0cmluZ1RvSW50KHZhbHVlLnN0cmluZygpLCB2YWx1ZS5zaXplKCksIE5VTEwpKSB7Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgLmVycm9yKCJUYWcgPGVudW0+IG9yIDxmbGFnPiAndmFsdWUnIGF0dHJpYnV0ZSBtdXN0IGJlIGEgbnVtYmVyLCIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgbm90IFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgodmFsdWUpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBhbiBpZCBpcyBkZWZpbmVkIGZvciB0aGlzIGVudW0vZmxhZyBpZGVudGlmaWVyLi4uCi0gICAgICAgICAgICBpZiAoIWF0dHIuaGFzRXJyb3JzICYmICFvdXRUYWJsZS0+aGFzQmFnT3JFbnRyeShpdGVtSWRlbnQsICZpZDE2LCAmbXlQYWNrYWdlKSkgewotICAgICAgICAgICAgICAgIGVyciA9IG91dFRhYmxlLT5zdGFydEJhZyhTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVBhY2thZ2UsIGlkMTYsIGl0ZW1JZGVudCwgU3RyaW5nMTYoKSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICBhdHRyLmhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWF0dHIuaGFzRXJyb3JzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVudW1PckZsYWdzQ29tbWVudC5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBlbnVtT3JGbGFnc0NvbW1lbnQuYXBwZW5kKG1heU9yTXVzdChhdHRyLnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGVfbWFwOjpUWVBFX0VOVU18UmVzVGFibGVfbWFwOjpUWVBFX0ZMQUdTKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVudW1PckZsYWdzQ29tbWVudC5hcHBlbmQoKGF0dHIudHlwZSZSZXNUYWJsZV9tYXA6OlRZUEVfRU5VTSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU3RyaW5nMTYoIiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudCB2YWx1ZXMuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU3RyaW5nMTYoIiBiZSBvbmUgb3IgbW9yZSAoc2VwYXJhdGVkIGJ5ICd8Jykgb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudCB2YWx1ZXMuIikpOwotICAgICAgICAgICAgICAgICAgICBlbnVtT3JGbGFnc0NvbW1lbnQuYXBwZW5kKFN0cmluZzE2KCI8L3A+XG48dGFibGU+XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGNvbGdyb3VwIGFsaWduPVwibGVmdFwiIC8+XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGNvbGdyb3VwIGFsaWduPVwibGVmdFwiIC8+XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGNvbGdyb3VwIGFsaWduPVwibGVmdFwiIC8+XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHRyPjx0aD5Db25zdGFudDwvdGg+PHRoPlZhbHVlPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+IikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlbnVtT3JGbGFnc0NvbW1lbnQuYXBwZW5kKFN0cmluZzE2KCJcbjx0cj48dGQ+PGNvZGU+IikpOwotICAgICAgICAgICAgICAgIGVudW1PckZsYWdzQ29tbWVudC5hcHBlbmQoaXRlbUlkZW50KTsKLSAgICAgICAgICAgICAgICBlbnVtT3JGbGFnc0NvbW1lbnQuYXBwZW5kKFN0cmluZzE2KCI8L2NvZGU+PC90ZD48dGQ+IikpOwotICAgICAgICAgICAgICAgIGVudW1PckZsYWdzQ29tbWVudC5hcHBlbmQodmFsdWUpOwotICAgICAgICAgICAgICAgIGVudW1PckZsYWdzQ29tbWVudC5hcHBlbmQoU3RyaW5nMTYoIjwvdGQ+PHRkPiIpKTsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2suZ2V0Q29tbWVudCgmbGVuKSkgewotICAgICAgICAgICAgICAgICAgICBlbnVtT3JGbGFnc0NvbW1lbnQuYXBwZW5kKFN0cmluZzE2KGJsb2NrLmdldENvbW1lbnQoJmxlbikpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZW51bU9yRmxhZ3NDb21tZW50LmFwcGVuZChTdHJpbmcxNigiPC90ZD48L3RyPiIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlcnIgPSBvdXRUYWJsZS0+YWRkQmFnKFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyMTYsIGF0dHIuaWRlbnQsIFN0cmluZzE2KCIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JZGVudCwgdmFsdWUsIE5VTEwsIE5VTEwsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF0dHIuaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfVEFHKSB7Ci0gICAgICAgICAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGF0dHIxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChhdHRyLnR5cGUmUmVzVGFibGVfbWFwOjpUWVBFX0VOVU0pICE9IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGVudW0xNi5zdHJpbmcoKSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmVycm9yKCJGb3VuZCB0YWcgPC8lcz4gd2hlcmUgPC9lbnVtPiBpcyBleHBlY3RlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBmbGFnMTYuc3RyaW5nKCkpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5lcnJvcigiRm91bmQgdGFnIDwvJXM+IHdoZXJlIDwvZmxhZz4gaXMgZXhwZWN0ZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKCFhdHRyLmhhc0Vycm9ycyAmJiBhdHRyLmFkZGVkKSB7Ci0gICAgICAgIGFwcGVuZFR5cGVJbmZvKG91dFRhYmxlLCBteVBhY2thZ2UsIGF0dHIxNiwgYXR0ci5pZGVudCwgYXR0ci50eXBlLCBnRm9ybWF0RmxhZ3MpOwotICAgIH0KLSAgICAKLSAgICBpZiAoIWF0dHIuaGFzRXJyb3JzICYmIGVudW1PckZsYWdzQ29tbWVudC5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGVudW1PckZsYWdzQ29tbWVudC5hcHBlbmQoU3RyaW5nMTYoIlxuPC90YWJsZT4iKSk7Ci0gICAgICAgIG91dFRhYmxlLT5hcHBlbmRUeXBlQ29tbWVudChteVBhY2thZ2UsIGF0dHIxNiwgYXR0ci5pZGVudCwgZW51bU9yRmxhZ3NDb21tZW50KTsKLSAgICB9Ci0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotYm9vbCBsb2NhbGVJc0RlZmluZWQoY29uc3QgUmVzVGFibGVfY29uZmlnJiBjb25maWcpCi17Ci0gICAgcmV0dXJuIGNvbmZpZy5sb2NhbGUgPT0gMDsKLX0KLQotc3RhdHVzX3QgcGFyc2VBbmRBZGRCYWcoQnVuZGxlKiBidW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4mIGluLAotICAgICAgICAgICAgICAgICAgICAgICAgUmVzWE1MVHJlZSogYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBteVBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgY3VyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBpZGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBwYXJlbnRJZGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBpdGVtSWRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGN1ckZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNGb3JtYXR0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgcHJvZHVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHNldWRvbG9jYWxpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIG92ZXJ3cml0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVGFibGUqIG91dFRhYmxlKQotewotICAgIHN0YXR1c190IGVycjsKLSAgICBjb25zdCBTdHJpbmcxNiBpdGVtMTYoIml0ZW0iKTsKLSAgICAKLSAgICBTdHJpbmcxNiBzdHI7Ci0gICAgVmVjdG9yPFN0cmluZ1Bvb2w6OmVudHJ5X3N0eWxlX3NwYW4+IHNwYW5zOwotICAgIGVyciA9IHBhcnNlU3R5bGVkU3RyaW5nKGJ1bmRsZSwgaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBpdGVtMTYsICZzdHIsICZzcGFucywgaXNGb3JtYXR0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvbG9jYWxpemUpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgCi0gICAgTk9JU1kocHJpbnRmKCJBZGRpbmcgcmVzb3VyY2UgYmFnIGVudHJ5IGw9JWMlYyBjPSVjJWMgb3JpZW49JWQgZD0lZCAiCi0gICAgICAgICAgICAgICAgICIgcGlkPSVzLCBiYWc9JXMsIGlkPSVzOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgY29uZmlnLmxhbmd1YWdlWzBdLCBjb25maWcubGFuZ3VhZ2VbMV0sCi0gICAgICAgICAgICAgICAgIGNvbmZpZy5jb3VudHJ5WzBdLCBjb25maWcuY291bnRyeVsxXSwKLSAgICAgICAgICAgICAgICAgY29uZmlnLm9yaWVudGF0aW9uLCBjb25maWcuZGVuc2l0eSwKLSAgICAgICAgICAgICAgICAgU3RyaW5nOChwYXJlbnRJZGVudCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgIFN0cmluZzgoaWRlbnQpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICBTdHJpbmc4KGl0ZW1JZGVudCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgIFN0cmluZzgoc3RyKS5zdHJpbmcoKSkpOwotCi0gICAgZXJyID0gb3V0VGFibGUtPmFkZEJhZyhTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay0+Z2V0TGluZU51bWJlcigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG15UGFja2FnZSwgY3VyVHlwZSwgaWRlbnQsIHBhcmVudElkZW50LCBpdGVtSWRlbnQsIHN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcGFucywgJmNvbmZpZywgb3ZlcndyaXRlLCBmYWxzZSwgY3VyRm9ybWF0KTsKLSAgICByZXR1cm4gZXJyOwotfQotCi0vKgotICogUmV0dXJucyB0cnVlIGlmIG5lZWRsZSBpcyBvbmUgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBjb21tYS1zZXBhcmF0ZWQgbGlzdAotICogaGF5c3RhY2ssIGZhbHNlIG90aGVyd2lzZS4KLSAqLwotYm9vbCBpc0luUHJvZHVjdExpc3QoY29uc3QgU3RyaW5nMTYmIG5lZWRsZSwgY29uc3QgU3RyaW5nMTYmIGhheXN0YWNrKSB7Ci0gICAgY29uc3QgY2hhcjE2X3QgKm5lZWRsZTIgPSBuZWVkbGUuc3RyaW5nKCk7Ci0gICAgY29uc3QgY2hhcjE2X3QgKmhheXN0YWNrMiA9IGhheXN0YWNrLnN0cmluZygpOwotICAgIHNpemVfdCBuZWVkbGVzaXplID0gbmVlZGxlLnNpemUoKTsKLQotICAgIHdoaWxlICgqaGF5c3RhY2syICE9ICdcMCcpIHsKLSAgICAgICAgaWYgKHN0cm5jbXAxNihoYXlzdGFjazIsIG5lZWRsZTIsIG5lZWRsZXNpemUpID09IDApIHsKLSAgICAgICAgICAgIGlmIChoYXlzdGFjazJbbmVlZGxlc2l6ZV0gPT0gJ1wwJyB8fCBoYXlzdGFjazJbbmVlZGxlc2l6ZV0gPT0gJywnKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAoKmhheXN0YWNrMiAhPSAnXDAnICYmICpoYXlzdGFjazIgIT0gJywnKSB7Ci0gICAgICAgICAgICBoYXlzdGFjazIrKzsKLSAgICAgICAgfQotICAgICAgICBpZiAoKmhheXN0YWNrMiA9PSAnLCcpIHsKLSAgICAgICAgICAgIGhheXN0YWNrMisrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vKgotICogQSBzaW1wbGUgY29udGFpbmVyIHRoYXQgaG9sZHMgYSByZXNvdXJjZSB0eXBlIGFuZCBuYW1lLiBJdCBpcyBvcmRlcmVkIGZpcnN0IGJ5IHR5cGUgdGhlbgotICogYnkgbmFtZS4KLSAqLwotc3RydWN0IHR5cGVfaWRlbnRfcGFpcl90IHsKLSAgICBTdHJpbmcxNiB0eXBlOwotICAgIFN0cmluZzE2IGlkZW50OwotCi0gICAgdHlwZV9pZGVudF9wYWlyX3QoKSB7IH07Ci0gICAgdHlwZV9pZGVudF9wYWlyX3QoY29uc3QgU3RyaW5nMTYmIHQsIGNvbnN0IFN0cmluZzE2JiBpKSA6IHR5cGUodCksIGlkZW50KGkpIHsgfQotICAgIHR5cGVfaWRlbnRfcGFpcl90KGNvbnN0IHR5cGVfaWRlbnRfcGFpcl90JiBvKSA6IHR5cGUoby50eXBlKSwgaWRlbnQoby5pZGVudCkgeyB9Ci0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgdHlwZV9pZGVudF9wYWlyX3QmIG8pIGNvbnN0IHsKLSAgICAgICAgaW50IGNtcCA9IGNvbXBhcmVfdHlwZSh0eXBlLCBvLnR5cGUpOwotICAgICAgICBpZiAoY21wIDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoY21wID4gMCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIHN0cmljdGx5X29yZGVyX3R5cGUoaWRlbnQsIG8uaWRlbnQpOwotICAgICAgICB9Ci0gICAgfQotfTsKLQotCi1zdGF0dXNfdCBwYXJzZUFuZEFkZEVudHJ5KEJ1bmRsZSogYnVuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEZpbGU+JiBpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlc1hNTFRyZWUqIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbXlQYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGN1clR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgaWRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgY3VyVGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdXJJc1N0eWxlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgY3VyRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0Zvcm1hdHRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBwcm9kdWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwc2V1ZG9sb2NhbGl6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgb3ZlcndyaXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgS2V5ZWRWZWN0b3I8dHlwZV9pZGVudF9wYWlyX3QsIGJvb2w+KiBza2lwcGVkUmVzb3VyY2VOYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVGFibGUqIG91dFRhYmxlKQotewotICAgIHN0YXR1c190IGVycjsKLQotICAgIFN0cmluZzE2IHN0cjsKLSAgICBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4gc3BhbnM7Ci0gICAgZXJyID0gcGFyc2VTdHlsZWRTdHJpbmcoYnVuZGxlLCBpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCksIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1clRhZywgJnN0ciwgY3VySXNTdHlsZWQgPyAmc3BhbnMgOiBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRm9ybWF0dGVkLCBwc2V1ZG9sb2NhbGl6ZSk7Ci0KLSAgICBpZiAoZXJyIDwgTk9fRVJST1IpIHsgCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBJZiBhIHByb2R1Y3QgdHlwZSB3YXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUKLSAgICAgKiBhbmQgYWxzbyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHR3byBhcmUgbm90IHRoZSBzYW1lLAotICAgICAqIHJldHVybiB3aXRob3V0IGFkZGluZyB0aGUgc3RyaW5nLgotICAgICAqLwotCi0gICAgY29uc3QgY2hhciAqYnVuZGxlUHJvZHVjdCA9IGJ1bmRsZS0+Z2V0UHJvZHVjdCgpOwotICAgIGlmIChidW5kbGVQcm9kdWN0ID09IE5VTEwpIHsKLSAgICAgICAgYnVuZGxlUHJvZHVjdCA9ICIiOwotICAgIH0KLQotICAgIGlmIChwcm9kdWN0LnNpemUoKSAhPSAwKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIElmIHRoZSBjb21tYW5kLWxpbmUtc3BlY2lmaWVkIHByb2R1Y3QgaXMgZW1wdHksIG9ubHkgImRlZmF1bHQiCi0gICAgICAgICAqIG1hdGNoZXMuICBPdGhlciB2YXJpYW50cyBhcmUgc2tpcHBlZC4gIFRoaXMgaXMgc28gZ2VuZXJhdGlvbgotICAgICAgICAgKiBvZiB0aGUgUi5qYXZhIGZpbGUgd2hlbiB0aGUgcHJvZHVjdCBpcyBub3Qga25vd24gaXMgcHJlZGljdGFibGUuCi0gICAgICAgICAqLwotCi0gICAgICAgIGlmIChidW5kbGVQcm9kdWN0WzBdID09ICdcMCcpIHsKLSAgICAgICAgICAgIGlmIChzdHJjbXAxNihTdHJpbmcxNigiZGVmYXVsdCIpLnN0cmluZygpLCBwcm9kdWN0LnN0cmluZygpKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBUaGlzIHN0cmluZyBoYXMgYSBwcm9kdWN0IG90aGVyIHRoYW4gJ2RlZmF1bHQnLiBEbyBub3QgYWRkIGl0LAotICAgICAgICAgICAgICAgICAqIGJ1dCByZWNvcmQgaXQgc28gdGhhdCBpZiB3ZSBkbyBub3Qgc2VlIHRoZSBzYW1lIHN0cmluZyB3aXRoCi0gICAgICAgICAgICAgICAgICogcHJvZHVjdCAnZGVmYXVsdCcgb3Igbm8gcHJvZHVjdCwgdGhlbiByZXBvcnQgYW4gZXJyb3IuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgc2tpcHBlZFJlc291cmNlTmFtZXMtPnJlcGxhY2VWYWx1ZUZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfaWRlbnRfcGFpcl90KGN1clR5cGUsIGlkZW50KSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoZSBjb21tYW5kLWxpbmUgcHJvZHVjdCBpcyBub3QgZW1wdHkuCi0gICAgICAgICAgICAgKiBJZiB0aGUgcHJvZHVjdCBmb3IgdGhpcyBzdHJpbmcgaXMgb24gdGhlIGNvbW1hbmQtbGluZSBsaXN0LAotICAgICAgICAgICAgICogaXQgbWF0Y2hlcy4gICJkZWZhdWx0IiBhbHNvIG1hdGNoZXMsIGJ1dCBvbmx5IGlmIG5vdGhpbmcKLSAgICAgICAgICAgICAqIGVsc2UgaGFzIG1hdGNoZWQgYWxyZWFkeS4KLSAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICBpZiAoaXNJblByb2R1Y3RMaXN0KHByb2R1Y3QsIFN0cmluZzE2KGJ1bmRsZVByb2R1Y3QpKSkgewotICAgICAgICAgICAgICAgIDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoU3RyaW5nMTYoImRlZmF1bHQiKS5zdHJpbmcoKSwgcHJvZHVjdC5zdHJpbmcoKSkgPT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAhb3V0VGFibGUtPmhhc0JhZ09yRW50cnkobXlQYWNrYWdlLCBjdXJUeXBlLCBpZGVudCwgY29uZmlnKSkgewotICAgICAgICAgICAgICAgIDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgTk9JU1kocHJpbnRmKCJBZGRpbmcgcmVzb3VyY2UgZW50cnkgbD0lYyVjIGM9JWMlYyBvcmllbj0lZCBkPSVkIGlkPSVzOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgY29uZmlnLmxhbmd1YWdlWzBdLCBjb25maWcubGFuZ3VhZ2VbMV0sCi0gICAgICAgICAgICAgICAgIGNvbmZpZy5jb3VudHJ5WzBdLCBjb25maWcuY291bnRyeVsxXSwKLSAgICAgICAgICAgICAgICAgY29uZmlnLm9yaWVudGF0aW9uLCBjb25maWcuZGVuc2l0eSwKLSAgICAgICAgICAgICAgICAgU3RyaW5nOChpZGVudCkuc3RyaW5nKCksIFN0cmluZzgoc3RyKS5zdHJpbmcoKSkpOwotCi0gICAgZXJyID0gb3V0VGFibGUtPmFkZEVudHJ5KFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLT5nZXRMaW5lTnVtYmVyKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVBhY2thZ2UsIGN1clR5cGUsIGlkZW50LCBzdHIsICZzcGFucywgJmNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGN1ckZvcm1hdCwgb3ZlcndyaXRlKTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXR1c190IGNvbXBpbGVSZXNvdXJjZUZpbGUoQnVuZGxlKiBidW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRGaWxlPiYgaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgZGVmUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIG92ZXJ3cml0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUYWJsZSogb3V0VGFibGUpCi17Ci0gICAgUmVzWE1MVHJlZSBibG9jazsKLSAgICBzdGF0dXNfdCBlcnIgPSBwYXJzZVhNTFJlc291cmNlKGluLCAmYmxvY2ssIGZhbHNlLCB0cnVlKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgLy8gVG9wLWxldmVsIHRhZy4KLSAgICBjb25zdCBTdHJpbmcxNiByZXNvdXJjZXMxNigicmVzb3VyY2VzIik7Ci0KLSAgICAvLyBJZGVudGlmaWVyIGRlY2xhcmF0aW9uIHRhZ3MuCi0gICAgY29uc3QgU3RyaW5nMTYgZGVjbGFyZV9zdHlsZWFibGUxNigiZGVjbGFyZS1zdHlsZWFibGUiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBhdHRyMTYoImF0dHIiKTsKLQotICAgIC8vIERhdGEgY3JlYXRpb24gb3JnYW5pemF0aW9uYWwgdGFncy4KLSAgICBjb25zdCBTdHJpbmcxNiBzdHJpbmcxNigic3RyaW5nIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgZHJhd2FibGUxNigiZHJhd2FibGUiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBjb2xvcjE2KCJjb2xvciIpOwotICAgIGNvbnN0IFN0cmluZzE2IGJvb2wxNigiYm9vbCIpOwotICAgIGNvbnN0IFN0cmluZzE2IGludGVnZXIxNigiaW50ZWdlciIpOwotICAgIGNvbnN0IFN0cmluZzE2IGRpbWVuMTYoImRpbWVuIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgZnJhY3Rpb24xNigiZnJhY3Rpb24iKTsKLSAgICBjb25zdCBTdHJpbmcxNiBzdHlsZTE2KCJzdHlsZSIpOwotICAgIGNvbnN0IFN0cmluZzE2IHBsdXJhbHMxNigicGx1cmFscyIpOwotICAgIGNvbnN0IFN0cmluZzE2IGFycmF5MTYoImFycmF5Iik7Ci0gICAgY29uc3QgU3RyaW5nMTYgc3RyaW5nX2FycmF5MTYoInN0cmluZy1hcnJheSIpOwotICAgIGNvbnN0IFN0cmluZzE2IGludGVnZXJfYXJyYXkxNigiaW50ZWdlci1hcnJheSIpOwotICAgIGNvbnN0IFN0cmluZzE2IHB1YmxpYzE2KCJwdWJsaWMiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBwdWJsaWNfcGFkZGluZzE2KCJwdWJsaWMtcGFkZGluZyIpOwotICAgIGNvbnN0IFN0cmluZzE2IHByaXZhdGVfc3ltYm9sczE2KCJwcml2YXRlLXN5bWJvbHMiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBqYXZhX3N5bWJvbDE2KCJqYXZhLXN5bWJvbCIpOwotICAgIGNvbnN0IFN0cmluZzE2IGFkZF9yZXNvdXJjZTE2KCJhZGQtcmVzb3VyY2UiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBza2lwMTYoInNraXAiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBlYXRfY29tbWVudDE2KCJlYXQtY29tbWVudCIpOwotCi0gICAgLy8gRGF0YSBjcmVhdGlvbiB0YWdzLgotICAgIGNvbnN0IFN0cmluZzE2IGJhZzE2KCJiYWciKTsKLSAgICBjb25zdCBTdHJpbmcxNiBpdGVtMTYoIml0ZW0iKTsKLQotICAgIC8vIEF0dHJpYnV0ZSB0eXBlIGNvbnN0YW50cy4KLSAgICBjb25zdCBTdHJpbmcxNiBlbnVtMTYoImVudW0iKTsKLQotICAgIC8vIHBsdXJhbCB2YWx1ZXMKLSAgICBjb25zdCBTdHJpbmcxNiBvdGhlcjE2KCJvdGhlciIpOwotICAgIGNvbnN0IFN0cmluZzE2IHF1YW50aXR5T3RoZXIxNigiXm90aGVyIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgemVybzE2KCJ6ZXJvIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgcXVhbnRpdHlaZXJvMTYoIl56ZXJvIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgb25lMTYoIm9uZSIpOwotICAgIGNvbnN0IFN0cmluZzE2IHF1YW50aXR5T25lMTYoIl5vbmUiKTsKLSAgICBjb25zdCBTdHJpbmcxNiB0d28xNigidHdvIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgcXVhbnRpdHlUd28xNigiXnR3byIpOwotICAgIGNvbnN0IFN0cmluZzE2IGZldzE2KCJmZXciKTsKLSAgICBjb25zdCBTdHJpbmcxNiBxdWFudGl0eUZldzE2KCJeZmV3Iik7Ci0gICAgY29uc3QgU3RyaW5nMTYgbWFueTE2KCJtYW55Iik7Ci0gICAgY29uc3QgU3RyaW5nMTYgcXVhbnRpdHlNYW55MTYoIl5tYW55Iik7Ci0KLSAgICAvLyB1c2VmdWwgYXR0cmlidXRlIG5hbWVzIGFuZCBzcGVjaWFsIHZhbHVlcwotICAgIGNvbnN0IFN0cmluZzE2IG5hbWUxNigibmFtZSIpOwotICAgIGNvbnN0IFN0cmluZzE2IHRyYW5zbGF0YWJsZTE2KCJ0cmFuc2xhdGFibGUiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBmb3JtYXR0ZWQxNigiZm9ybWF0dGVkIik7Ci0gICAgY29uc3QgU3RyaW5nMTYgZmFsc2UxNigiZmFsc2UiKTsKLQotICAgIGNvbnN0IFN0cmluZzE2IG15UGFja2FnZShhc3NldHMtPmdldFBhY2thZ2UoKSk7Ci0KLSAgICBib29sIGhhc0Vycm9ycyA9IGZhbHNlOwotCi0gICAgYm9vbCBmaWxlSXNUcmFuc2xhdGFibGUgPSB0cnVlOwotICAgIGlmIChzdHJzdHIoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLnN0cmluZygpLCAiZG9ub3R0cmFuc2xhdGUiKSAhPSBOVUxMKSB7Ci0gICAgICAgIGZpbGVJc1RyYW5zbGF0YWJsZSA9IGZhbHNlOwotICAgIH0KLQotICAgIERlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmcxNiwgdWludDMyX3Q+IG5leHRQdWJsaWNJZCgwKTsKLQotICAgIC8vIFN0b3JlcyB0aGUgcmVzb3VyY2UgbmFtZXMgdGhhdCB3ZXJlIHNraXBwZWQuIFR5cGljYWxseSB0aGlzIGhhcHBlbnMgd2hlbgotICAgIC8vIEFBUFQgaXMgaW52b2tlZCB3aXRob3V0IGEgcHJvZHVjdCBzcGVjaWZpZWQgYW5kIGEgcmVzb3VyY2UgaGFzIG5vCi0gICAgLy8gJ2RlZmF1bHQnIHByb2R1Y3QgYXR0cmlidXRlLgotICAgIEtleWVkVmVjdG9yPHR5cGVfaWRlbnRfcGFpcl90LCBib29sPiBza2lwcGVkUmVzb3VyY2VOYW1lczsKLQotICAgIFJlc1hNTFRyZWU6OmV2ZW50X2NvZGVfdCBjb2RlOwotICAgIGRvIHsKLSAgICAgICAgY29kZSA9IGJsb2NrLm5leHQoKTsKLSAgICB9IHdoaWxlIChjb2RlID09IFJlc1hNTFRyZWU6OlNUQVJUX05BTUVTUEFDRSk7Ci0KLSAgICBzaXplX3QgbGVuOwotICAgIGlmIChjb2RlICE9IFJlc1hNTFRyZWU6OlNUQVJUX1RBRykgewotICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICJObyBzdGFydCB0YWcgZm91bmRcbiIpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCByZXNvdXJjZXMxNi5zdHJpbmcoKSkgIT0gMCkgewotICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICJJbnZhbGlkIHN0YXJ0IHRhZyAlc1xuIiwgU3RyaW5nOChibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSkuc3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBSZXNUYWJsZV9jb25maWcgY3VyUGFyYW1zKGRlZlBhcmFtcyk7Ci0KLSAgICBSZXNUYWJsZV9jb25maWcgcHNldWRvUGFyYW1zKGN1clBhcmFtcyk7Ci0gICAgICAgIHBzZXVkb1BhcmFtcy5sYW5ndWFnZVswXSA9ICd6JzsKLSAgICAgICAgcHNldWRvUGFyYW1zLmxhbmd1YWdlWzFdID0gJ3onOwotICAgICAgICBwc2V1ZG9QYXJhbXMuY291bnRyeVswXSA9ICdaJzsKLSAgICAgICAgcHNldWRvUGFyYW1zLmNvdW50cnlbMV0gPSAnWic7Ci0KLSAgICB3aGlsZSAoKGNvZGU9YmxvY2submV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcxNiogY3VyVGFnID0gTlVMTDsKLSAgICAgICAgICAgIFN0cmluZzE2IGN1clR5cGU7Ci0gICAgICAgICAgICBpbnQzMl90IGN1ckZvcm1hdCA9IFJlc1RhYmxlX21hcDo6VFlQRV9BTlk7Ci0gICAgICAgICAgICBib29sIGN1cklzQmFnID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGN1cklzQmFnUmVwbGFjZU9uT3ZlcndyaXRlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGN1cklzU3R5bGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGN1cklzUHNldWRvbG9jYWxpemFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgY3VySXNGb3JtYXR0ZWQgPSBmaWxlSXNUcmFuc2xhdGFibGU7Ci0gICAgICAgICAgICBib29sIGxvY2FsSGFzRXJyb3JzID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgc2tpcDE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChjb2RlPWJsb2NrLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfVEFHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHNraXAxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBlYXRfY29tbWVudDE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChjb2RlPWJsb2NrLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfVEFHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGVhdF9jb21tZW50MTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgcHVibGljMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3Mgc3JjUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZzE2IHR5cGU7Ci0gICAgICAgICAgICAgICAgc3NpemVfdCB0eXBlSWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAidHlwZSIpOwotICAgICAgICAgICAgICAgIGlmICh0eXBlSWR4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIkEgJ3R5cGUnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPHB1YmxpYz5cbiIpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHR5cGUgPSBTdHJpbmcxNihibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZSh0eXBlSWR4LCAmbGVuKSk7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcxNiBuYW1lOwotICAgICAgICAgICAgICAgIHNzaXplX3QgbmFtZUlkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgIm5hbWUiKTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZUlkeCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc3JjUG9zLmVycm9yKCJBICduYW1lJyBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgZm9yIDxwdWJsaWM+XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUobmFtZUlkeCwgJmxlbikpOwotCi0gICAgICAgICAgICAgICAgdWludDMyX3QgaWRlbnQgPSAwOwotICAgICAgICAgICAgICAgIHNzaXplX3QgaWRlbnRJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJpZCIpOwotICAgICAgICAgICAgICAgIGlmIChpZGVudElkeCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBpZGVudFN0ciA9IGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGlkZW50SWR4LCAmbGVuKTsKLSAgICAgICAgICAgICAgICAgICAgUmVzX3ZhbHVlIGlkZW50VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUmVzVGFibGU6OnN0cmluZ1RvSW50KGlkZW50U3RyLCBsZW4sICZpZGVudFZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3JjUG9zLmVycm9yKCJHaXZlbiAnaWQnIGF0dHJpYnV0ZSBpcyBub3QgYW4gaW50ZWdlcjogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaWRlbnRJZHgsICZsZW4pKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZGVudCA9IGlkZW50VmFsdWUuZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHRQdWJsaWNJZC5yZXBsYWNlVmFsdWVGb3IodHlwZSwgaWRlbnQrMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHRQdWJsaWNJZC5pbmRleE9mS2V5KHR5cGUpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIk5vICdpZCcgYXR0cmlidXRlIHN1cHBsaWVkIDxwdWJsaWM+LCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGFuZCBubyBwcmV2aW91cyBpZCBkZWZpbmVkIGluIHRoaXMgZmlsZS5cbiIpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbG9jYWxIYXNFcnJvcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnQgPSBuZXh0UHVibGljSWQudmFsdWVGb3IodHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIG5leHRQdWJsaWNJZC5yZXBsYWNlVmFsdWVGb3IodHlwZSwgaWRlbnQrMSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFsb2NhbEhhc0Vycm9ycykgewotICAgICAgICAgICAgICAgICAgICBlcnIgPSBvdXRUYWJsZS0+YWRkUHVibGljKHNyY1BvcywgbXlQYWNrYWdlLCB0eXBlLCBuYW1lLCBpZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghbG9jYWxIYXNFcnJvcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgc3A8QWFwdFN5bWJvbHM+IHN5bWJvbHMgPSBhc3NldHMtPmdldFN5bWJvbHNGb3IoU3RyaW5nOCgiUiIpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbHMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scyA9IHN5bWJvbHMtPmFkZE5lc3RlZFN5bWJvbChTdHJpbmc4KHR5cGUpLCBzcmNQb3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2xzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMtPm1ha2VTeW1ib2xQdWJsaWMoU3RyaW5nOChuYW1lKSwgc3JjUG9zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2IGNvbW1lbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2suZ2V0Q29tbWVudCgmbGVuKSA/IGJsb2NrLmdldENvbW1lbnQoJmxlbikgOiBudWxTdHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scy0+YXBwZW5kQ29tbWVudChTdHJpbmc4KG5hbWUpLCBjb21tZW50LCBzcmNQb3MpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3JjUG9zLmVycm9yKCJVbmFibGUgdG8gY3JlYXRlIHN5bWJvbHMhXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHdoaWxlICgoY29kZT1ibG9jay5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfVEFHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHB1YmxpYzE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHB1YmxpY19wYWRkaW5nMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3Mgc3JjUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZzE2IHR5cGU7Ci0gICAgICAgICAgICAgICAgc3NpemVfdCB0eXBlSWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAidHlwZSIpOwotICAgICAgICAgICAgICAgIGlmICh0eXBlSWR4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIkEgJ3R5cGUnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPHB1YmxpYy1wYWRkaW5nPlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdHlwZSA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKHR5cGVJZHgsICZsZW4pKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZzE2IG5hbWU7Ci0gICAgICAgICAgICAgICAgc3NpemVfdCBuYW1lSWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAibmFtZSIpOwotICAgICAgICAgICAgICAgIGlmIChuYW1lSWR4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIkEgJ25hbWUnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPHB1YmxpYy1wYWRkaW5nPlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmFtZSA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKG5hbWVJZHgsICZsZW4pKTsKLQotICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgICBzc2l6ZV90IHN0YXJ0SWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAic3RhcnQiKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhcnRJZHggPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogc3RhcnRTdHIgPSBibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShzdGFydElkeCwgJmxlbik7Ci0gICAgICAgICAgICAgICAgICAgIFJlc192YWx1ZSBzdGFydFZhbHVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoIVJlc1RhYmxlOjpzdHJpbmdUb0ludChzdGFydFN0ciwgbGVuLCAmc3RhcnRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiR2l2ZW4gJ3N0YXJ0JyBhdHRyaWJ1dGUgaXMgbm90IGFuIGludGVnZXI6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKHN0YXJ0SWR4LCAmbGVuKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydFZhbHVlLmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHRQdWJsaWNJZC5pbmRleE9mS2V5KHR5cGUpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIk5vICdzdGFydCcgYXR0cmlidXRlIHN1cHBsaWVkIDxwdWJsaWMtcGFkZGluZz4sIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYW5kIG5vIHByZXZpb3VzIGlkIGRlZmluZWQgaW4gdGhpcyBmaWxlLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFsb2NhbEhhc0Vycm9ycykgewotICAgICAgICAgICAgICAgICAgICBzdGFydCA9IG5leHRQdWJsaWNJZC52YWx1ZUZvcih0eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB1aW50MzJfdCBlbmQgPSAwOwotICAgICAgICAgICAgICAgIHNzaXplX3QgZW5kSWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAiZW5kIik7Ci0gICAgICAgICAgICAgICAgaWYgKGVuZElkeCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBlbmRTdHIgPSBibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShlbmRJZHgsICZsZW4pOwotICAgICAgICAgICAgICAgICAgICBSZXNfdmFsdWUgZW5kVmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUmVzVGFibGU6OnN0cmluZ1RvSW50KGVuZFN0ciwgbGVuLCAmZW5kVmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIkdpdmVuICdlbmQnIGF0dHJpYnV0ZSBpcyBub3QgYW4gaW50ZWdlcjogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoZW5kSWR4LCAmbGVuKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gZW5kVmFsdWUuZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiTm8gJ2VuZCcgYXR0cmlidXRlIHN1cHBsaWVkIDxwdWJsaWMtcGFkZGluZz5cbiIpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGVuZCA+PSBzdGFydCkgewotICAgICAgICAgICAgICAgICAgICBuZXh0UHVibGljSWQucmVwbGFjZVZhbHVlRm9yKHR5cGUsIGVuZCsxKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIlBhZGRpbmcgc3RhcnQgJyV1bCcgaXMgYWZ0ZXIgZW5kICcldWwnXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZzE2IGNvbW1lbnQoCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrLmdldENvbW1lbnQoJmxlbikgPyBibG9jay5nZXRDb21tZW50KCZsZW4pIDogbnVsU3RyKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGN1cklkZW50PXN0YXJ0OyBjdXJJZGVudDw9ZW5kOyBjdXJJZGVudCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbEhhc0Vycm9ycykgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYgY3VyTmFtZShuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBidWZbNjRdOwotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVkIiwgKGludCkoZW5kLWN1cklkZW50KzEpKTsKLSAgICAgICAgICAgICAgICAgICAgY3VyTmFtZS5hcHBlbmQoU3RyaW5nMTYoYnVmKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBlcnIgPSBvdXRUYWJsZS0+YWRkRW50cnkoc3JjUG9zLCBteVBhY2thZ2UsIHR5cGUsIGN1ck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNigicGFkZGluZyIpLCBOVUxMLCAmY3VyUGFyYW1zLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlX21hcDo6VFlQRV9TVFJJTkcsIG92ZXJ3cml0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZXJyID0gb3V0VGFibGUtPmFkZFB1YmxpYyhzcmNQb3MsIG15UGFja2FnZSwgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJOYW1lLCBjdXJJZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc3A8QWFwdFN5bWJvbHM+IHN5bWJvbHMgPSBhc3NldHMtPmdldFN5bWJvbHNGb3IoU3RyaW5nOCgiUiIpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbHMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scyA9IHN5bWJvbHMtPmFkZE5lc3RlZFN5bWJvbChTdHJpbmc4KHR5cGUpLCBzcmNQb3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2xzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMtPm1ha2VTeW1ib2xQdWJsaWMoU3RyaW5nOChjdXJOYW1lKSwgc3JjUG9zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMtPmFwcGVuZENvbW1lbnQoU3RyaW5nOChjdXJOYW1lKSwgY29tbWVudCwgc3JjUG9zKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSBzeW1ib2xzIVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoKGNvZGU9YmxvY2submV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX1RBRykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBwdWJsaWNfcGFkZGluZzE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIHByaXZhdGVfc3ltYm9sczE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nMTYgcGtnOwotICAgICAgICAgICAgICAgIHNzaXplX3QgcGtnSWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAicGFja2FnZSIpOwotICAgICAgICAgICAgICAgIGlmIChwa2dJZHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEgJ3BhY2thZ2UnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPHByaXZhdGUtc3ltYm9scz5cbiIpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBrZyA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKHBrZ0lkeCwgJmxlbikpOwotICAgICAgICAgICAgICAgIGlmICghbG9jYWxIYXNFcnJvcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXRzLT5zZXRTeW1ib2xzUHJpdmF0ZVBhY2thZ2UoU3RyaW5nOChwa2cpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoKGNvZGU9YmxvY2submV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX1RBRykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBwcml2YXRlX3N5bWJvbHMxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBqYXZhX3N5bWJvbDE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zIHNyY1Bvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJpbmcxNiB0eXBlOwotICAgICAgICAgICAgICAgIHNzaXplX3QgdHlwZUlkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgInR5cGUiKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZUlkeCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc3JjUG9zLmVycm9yKCJBICd0eXBlJyBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgZm9yIDxwdWJsaWM+XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0eXBlID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUodHlwZUlkeCwgJmxlbikpOwotCi0gICAgICAgICAgICAgICAgU3RyaW5nMTYgbmFtZTsKLSAgICAgICAgICAgICAgICBzc2l6ZV90IG5hbWVJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJuYW1lIik7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWVJZHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiQSAnbmFtZScgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciA8cHVibGljPlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmFtZSA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKG5hbWVJZHgsICZsZW4pKTsKLQotICAgICAgICAgICAgICAgIHNwPEFhcHRTeW1ib2xzPiBzeW1ib2xzID0gYXNzZXRzLT5nZXRKYXZhU3ltYm9sc0ZvcihTdHJpbmc4KCJSIikpOwotICAgICAgICAgICAgICAgIGlmIChzeW1ib2xzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgc3ltYm9scyA9IHN5bWJvbHMtPmFkZE5lc3RlZFN5bWJvbChTdHJpbmc4KHR5cGUpLCBzcmNQb3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc3ltYm9scyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bWJvbHMtPm1ha2VTeW1ib2xKYXZhU3ltYm9sKFN0cmluZzgobmFtZSksIHNyY1Bvcyk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZzE2IGNvbW1lbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay5nZXRDb21tZW50KCZsZW4pID8gYmxvY2suZ2V0Q29tbWVudCgmbGVuKSA6IG51bFN0cik7Ci0gICAgICAgICAgICAgICAgICAgIHN5bWJvbHMtPmFwcGVuZENvbW1lbnQoU3RyaW5nOChuYW1lKSwgY29tbWVudCwgc3JjUG9zKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcmNQb3MuZXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgc3ltYm9scyFcbiIpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgd2hpbGUgKChjb2RlPWJsb2NrLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgamF2YV9zeW1ib2wxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGFkZF9yZXNvdXJjZTE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zIHNyY1Bvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJpbmcxNiB0eXBlTmFtZTsKLSAgICAgICAgICAgICAgICBzc2l6ZV90IHR5cGVJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJ0eXBlIik7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVJZHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiQSAndHlwZScgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciA8YWRkLXJlc291cmNlPlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdHlwZU5hbWUgPSBTdHJpbmcxNihibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZSh0eXBlSWR4LCAmbGVuKSk7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcxNiBuYW1lOwotICAgICAgICAgICAgICAgIHNzaXplX3QgbmFtZUlkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgIm5hbWUiKTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZUlkeCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc3JjUG9zLmVycm9yKCJBICduYW1lJyBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgZm9yIDxhZGQtcmVzb3VyY2U+XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUobmFtZUlkeCwgJmxlbikpOwotCi0gICAgICAgICAgICAgICAgb3V0VGFibGUtPmNhbkFkZEVudHJ5KHNyY1BvcywgbXlQYWNrYWdlLCB0eXBlTmFtZSwgbmFtZSk7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoKGNvZGU9YmxvY2submV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX1RBRykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBhZGRfcmVzb3VyY2UxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgZGVjbGFyZV9zdHlsZWFibGUxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyBzcmNQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJpbmcxNiBpZGVudDsKLSAgICAgICAgICAgICAgICBzc2l6ZV90IGlkZW50SWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAibmFtZSIpOwotICAgICAgICAgICAgICAgIGlmIChpZGVudElkeCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc3JjUG9zLmVycm9yKCJBICduYW1lJyBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgZm9yIDxkZWNsYXJlLXN0eWxlYWJsZT5cbiIpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlkZW50ID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaWRlbnRJZHgsICZsZW4pKTsKLQotICAgICAgICAgICAgICAgIHNwPEFhcHRTeW1ib2xzPiBzeW1ib2xzID0gYXNzZXRzLT5nZXRTeW1ib2xzRm9yKFN0cmluZzgoIlIiKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFsb2NhbEhhc0Vycm9ycykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9scyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xzID0gc3ltYm9scy0+YWRkTmVzdGVkU3ltYm9sKFN0cmluZzgoInN0eWxlYWJsZSIpLCBzcmNQb3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNwPEFhcHRTeW1ib2xzPiBzdHlsZVN5bWJvbHMgPSBzeW1ib2xzOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9scyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xzID0gc3ltYm9scy0+YWRkTmVzdGVkU3ltYm9sKFN0cmluZzgoaWRlbnQpLCBzcmNQb3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2xzID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY1Bvcy5lcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSBzeW1ib2xzIVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYgY29tbWVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmdldENvbW1lbnQoJmxlbikgPyBibG9jay5nZXRDb21tZW50KCZsZW4pIDogbnVsU3RyKTsKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVTeW1ib2xzLT5hcHBlbmRDb21tZW50KFN0cmluZzgoaWRlbnQpLCBjb21tZW50LCBzcmNQb3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bWJvbHMgPSBOVUxMOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHdoaWxlICgoY29kZT1ibG9jay5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpTVEFSVF9UQUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgc2tpcDE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjb2RlPWJsb2NrLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgc2tpcDE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBlYXRfY29tbWVudDE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjb2RlPWJsb2NrLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgZWF0X2NvbW1lbnQxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgYXR0cjE2LnN0cmluZygpKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYWcgPCVzPiBjYW4gbm90IGFwcGVhciBpbnNpZGUgPGRlY2xhcmUtc3R5bGVhYmxlPiwgb25seSA8YXR0cj5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2IGNvbW1lbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2suZ2V0Q29tbWVudCgmbGVuKSA/IGJsb2NrLmdldENvbW1lbnQoJmxlbikgOiBudWxTdHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYgaXRlbUlkZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gY29tcGlsZUF0dHJpYnV0ZShpbiwgYmxvY2ssIG15UGFja2FnZSwgb3V0VGFibGUsICZpdGVtSWRlbnQsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbHMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZVBvcyBzcmNQb3MoU3RyaW5nOChpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCkpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMtPmFkZFN5bWJvbChTdHJpbmc4KGl0ZW1JZGVudCksIDAsIHNyY1Bvcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scy0+YXBwZW5kQ29tbWVudChTdHJpbmc4KGl0ZW1JZGVudCksIGNvbW1lbnQsIHNyY1Bvcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIkF0dHJpYnV0ZSAlcyBjb21tZW50OiAlc1xuIiwgU3RyaW5nOChpdGVtSWRlbnQpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBTdHJpbmc4KGNvbW1lbnQpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgZGVjbGFyZV9zdHlsZWFibGUxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRm91bmQgdGFnIDwvJXM+IHdoZXJlIDwvYXR0cj4gaXMgZXhwZWN0ZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBhdHRyMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBlcnIgPSBjb21waWxlQXR0cmlidXRlKGluLCBibG9jaywgbXlQYWNrYWdlLCBvdXRUYWJsZSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgaXRlbTE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY3VyVGFnID0gJml0ZW0xNjsKLSAgICAgICAgICAgICAgICBzc2l6ZV90IGF0dHJpID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAidHlwZSIpOwotICAgICAgICAgICAgICAgIGlmIChhdHRyaSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1clR5cGUgPSBTdHJpbmcxNihibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShhdHRyaSwgJmxlbikpOwotICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IGZvcm1hdElkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgImZvcm1hdCIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0SWR4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2IGZvcm1hdFN0ciA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRJZHgsICZsZW4pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ckZvcm1hdCA9IHBhcnNlX2ZsYWdzKGZvcm1hdFN0ci5zdHJpbmcoKSwgZm9ybWF0U3RyLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdGb3JtYXRGbGFncyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyRm9ybWF0ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhZyA8aXRlbT4gJ2Zvcm1hdCcgYXR0cmlidXRlIHZhbHVlIFwiJXNcIiBub3QgdmFsaWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGZvcm1hdFN0cikuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEgJ3R5cGUnIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPGl0ZW0+XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjdXJJc1N0eWxlZCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBzdHJpbmcxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhlIGV4aXN0ZW5jZSBhbmQgbG9jYWxlIG9mIGV2ZXJ5IHN0cmluZyB3ZSBwcm9jZXNzCi0gICAgICAgICAgICAgICAgY2hhciByYXdMb2NhbGVbMTZdOwotICAgICAgICAgICAgICAgIGN1clBhcmFtcy5nZXRMb2NhbGUocmF3TG9jYWxlKTsKLSAgICAgICAgICAgICAgICBTdHJpbmc4IGxvY2FsZShyYXdMb2NhbGUpOwotICAgICAgICAgICAgICAgIFN0cmluZzE2IG5hbWU7Ci0gICAgICAgICAgICAgICAgU3RyaW5nMTYgdHJhbnNsYXRhYmxlOwotICAgICAgICAgICAgICAgIFN0cmluZzE2IGZvcm1hdHRlZDsKLQotICAgICAgICAgICAgICAgIHNpemVfdCBuID0gYmxvY2suZ2V0QXR0cmlidXRlQ291bnQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MTZfdCogYXR0ciA9IGJsb2NrLmdldEF0dHJpYnV0ZU5hbWUoaSwgJmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNihhdHRyLCBuYW1lMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuc2V0VG8oYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaSwgJmxlbmd0aCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGF0dHIsIHRyYW5zbGF0YWJsZTE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGFibGUuc2V0VG8oYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaSwgJmxlbmd0aCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGF0dHIsIGZvcm1hdHRlZDE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQuc2V0VG8oYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaSwgJmxlbmd0aCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChuYW1lLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0YWJsZSA9PSBmYWxzZTE2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJJc0Zvcm1hdHRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW50cmFuc2xhdGFibGUgc3RyaW5ncyBtdXN0IG9ubHkgZXhpc3QgaW4gdGhlIGRlZmF1bHQgW2VtcHR5XSBsb2NhbGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYWFwdDogd2FybmluZzogc3RyaW5nICclcycgaW4gJXMgbWFya2VkIHVudHJhbnNsYXRhYmxlIGJ1dCBleGlzdHMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGluIGxvY2FsZSAnJXMnXG4iLCBTdHJpbmc4KG5hbWUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlLT5nZXRSZXNvdXJjZVNvdXJjZURpcnMoKVswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGVtcHR5IGJsb2NrOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYWRkIHVudHJhbnNsYXRhYmxlIHN0cmluZ3MgdG8gdGhlIGxvY2FsaXphdGlvbiB0YWJsZTsgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdheSBpZiB3ZSBsYXRlciBzZWUgbG9jYWxpemF0aW9ucyBvZiB0aGVtLCB0aGV5J2xsIGJlIGZsYWdnZWQgYXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZpbmcgbm8gZGVmYXVsdCB0cmFuc2xhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dFRhYmxlLT5hZGRMb2NhbGl6YXRpb24obmFtZSwgbG9jYWxlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXR0ZWQgPT0gZmFsc2UxNikgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VySXNGb3JtYXR0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGN1clRhZyA9ICZzdHJpbmcxNjsKLSAgICAgICAgICAgICAgICBjdXJUeXBlID0gc3RyaW5nMTY7Ci0gICAgICAgICAgICAgICAgY3VyRm9ybWF0ID0gUmVzVGFibGVfbWFwOjpUWVBFX1JFRkVSRU5DRXxSZXNUYWJsZV9tYXA6OlRZUEVfU1RSSU5HOwotICAgICAgICAgICAgICAgIGN1cklzU3R5bGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjdXJJc1BzZXVkb2xvY2FsaXphYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGRyYXdhYmxlMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBjdXJUYWcgPSAmZHJhd2FibGUxNjsKLSAgICAgICAgICAgICAgICBjdXJUeXBlID0gZHJhd2FibGUxNjsKLSAgICAgICAgICAgICAgICBjdXJGb3JtYXQgPSBSZXNUYWJsZV9tYXA6OlRZUEVfUkVGRVJFTkNFfFJlc1RhYmxlX21hcDo6VFlQRV9DT0xPUjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGNvbG9yMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBjdXJUYWcgPSAmY29sb3IxNjsKLSAgICAgICAgICAgICAgICBjdXJUeXBlID0gY29sb3IxNjsKLSAgICAgICAgICAgICAgICBjdXJGb3JtYXQgPSBSZXNUYWJsZV9tYXA6OlRZUEVfUkVGRVJFTkNFfFJlc1RhYmxlX21hcDo6VFlQRV9DT0xPUjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGJvb2wxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGN1clRhZyA9ICZib29sMTY7Ci0gICAgICAgICAgICAgICAgY3VyVHlwZSA9IGJvb2wxNjsKLSAgICAgICAgICAgICAgICBjdXJGb3JtYXQgPSBSZXNUYWJsZV9tYXA6OlRZUEVfUkVGRVJFTkNFfFJlc1RhYmxlX21hcDo6VFlQRV9CT09MRUFOOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgaW50ZWdlcjE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY3VyVGFnID0gJmludGVnZXIxNjsKLSAgICAgICAgICAgICAgICBjdXJUeXBlID0gaW50ZWdlcjE2OwotICAgICAgICAgICAgICAgIGN1ckZvcm1hdCA9IFJlc1RhYmxlX21hcDo6VFlQRV9SRUZFUkVOQ0V8UmVzVGFibGVfbWFwOjpUWVBFX0lOVEVHRVI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBkaW1lbjE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY3VyVGFnID0gJmRpbWVuMTY7Ci0gICAgICAgICAgICAgICAgY3VyVHlwZSA9IGRpbWVuMTY7Ci0gICAgICAgICAgICAgICAgY3VyRm9ybWF0ID0gUmVzVGFibGVfbWFwOjpUWVBFX1JFRkVSRU5DRXxSZXNUYWJsZV9tYXA6OlRZUEVfRElNRU5TSU9OOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgZnJhY3Rpb24xNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGN1clRhZyA9ICZmcmFjdGlvbjE2OwotICAgICAgICAgICAgICAgIGN1clR5cGUgPSBmcmFjdGlvbjE2OwotICAgICAgICAgICAgICAgIGN1ckZvcm1hdCA9IFJlc1RhYmxlX21hcDo6VFlQRV9SRUZFUkVOQ0V8UmVzVGFibGVfbWFwOjpUWVBFX0ZSQUNUSU9OOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgYmFnMTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBjdXJUYWcgPSAmYmFnMTY7Ci0gICAgICAgICAgICAgICAgY3VySXNCYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgIHNzaXplX3QgYXR0cmkgPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJ0eXBlIik7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY3VyVHlwZSA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGF0dHJpLCAmbGVuKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQSAndHlwZScgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciA8YmFnPlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBzdHlsZTE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY3VyVGFnID0gJnN0eWxlMTY7Ci0gICAgICAgICAgICAgICAgY3VyVHlwZSA9IHN0eWxlMTY7Ci0gICAgICAgICAgICAgICAgY3VySXNCYWcgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgcGx1cmFsczE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY3VyVGFnID0gJnBsdXJhbHMxNjsKLSAgICAgICAgICAgICAgICBjdXJUeXBlID0gcGx1cmFsczE2OwotICAgICAgICAgICAgICAgIGN1cklzQmFnID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGFycmF5MTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBjdXJUYWcgPSAmYXJyYXkxNjsKLSAgICAgICAgICAgICAgICBjdXJUeXBlID0gYXJyYXkxNjsKLSAgICAgICAgICAgICAgICBjdXJJc0JhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY3VySXNCYWdSZXBsYWNlT25PdmVyd3JpdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIHNzaXplX3QgZm9ybWF0SWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAiZm9ybWF0Iik7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcm1hdElkeCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZzE2IGZvcm1hdFN0ciA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdElkeCwgJmxlbikpOwotICAgICAgICAgICAgICAgICAgICBjdXJGb3JtYXQgPSBwYXJzZV9mbGFncyhmb3JtYXRTdHIuc3RyaW5nKCksIGZvcm1hdFN0ci5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdGb3JtYXRGbGFncyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJGb3JtYXQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhZyA8YXJyYXk+ICdmb3JtYXQnIGF0dHJpYnV0ZSB2YWx1ZSBcIiVzXCIgbm90IHZhbGlkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGZvcm1hdFN0cikuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAxNihibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSwgc3RyaW5nX2FycmF5MTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZXNlIHN0cmluZ3MgbmVlZCB2YWxpZCBmb3JtYXRzLgotICAgICAgICAgICAgICAgIC8vIChzaW1wbGlmaWVkIGZvcm0gb2Ygd2hhdCBzdHJpbmcxNiBkb2VzIGFib3ZlKQotICAgICAgICAgICAgICAgIHNpemVfdCBuID0gYmxvY2suZ2V0QXR0cmlidXRlQ291bnQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MTZfdCogYXR0ciA9IGJsb2NrLmdldEF0dHJpYnV0ZU5hbWUoaSwgJmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNihhdHRyLCB0cmFuc2xhdGFibGUxNi5zdHJpbmcoKSkgPT0gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0cmNtcDE2KGF0dHIsIGZvcm1hdHRlZDE2LnN0cmluZygpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MTZfdCogdmFsdWUgPSBibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpLCAmbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAxNih2YWx1ZSwgZmFsc2UxNi5zdHJpbmcoKSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cklzRm9ybWF0dGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjdXJUYWcgPSAmc3RyaW5nX2FycmF5MTY7Ci0gICAgICAgICAgICAgICAgY3VyVHlwZSA9IGFycmF5MTY7Ci0gICAgICAgICAgICAgICAgY3VyRm9ybWF0ID0gUmVzVGFibGVfbWFwOjpUWVBFX1JFRkVSRU5DRXxSZXNUYWJsZV9tYXA6OlRZUEVfU1RSSU5HOwotICAgICAgICAgICAgICAgIGN1cklzQmFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjdXJJc0JhZ1JlcGxhY2VPbk92ZXJ3cml0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY3VySXNQc2V1ZG9sb2NhbGl6YWJsZSA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBpbnRlZ2VyX2FycmF5MTYuc3RyaW5nKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICBjdXJUYWcgPSAmaW50ZWdlcl9hcnJheTE2OwotICAgICAgICAgICAgICAgIGN1clR5cGUgPSBhcnJheTE2OwotICAgICAgICAgICAgICAgIGN1ckZvcm1hdCA9IFJlc1RhYmxlX21hcDo6VFlQRV9SRUZFUkVOQ0V8UmVzVGFibGVfbWFwOjpUWVBFX0lOVEVHRVI7Ci0gICAgICAgICAgICAgICAgY3VySXNCYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgIGN1cklzQmFnUmVwbGFjZU9uT3ZlcndyaXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJGb3VuZCB0YWcgJXMgd2hlcmUgaXRlbSBpcyBleHBlY3RlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nMTYgaWRlbnQ7Ci0gICAgICAgICAgICBzc2l6ZV90IGlkZW50SWR4ID0gYmxvY2suaW5kZXhPZkF0dHJpYnV0ZShOVUxMLCAibmFtZSIpOwotICAgICAgICAgICAgaWYgKGlkZW50SWR4ID49IDApIHsKLSAgICAgICAgICAgICAgICBpZGVudCA9IFN0cmluZzE2KGJsb2NrLmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGlkZW50SWR4LCAmbGVuKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiQSAnbmFtZScgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciA8JXM+XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCgqY3VyVGFnKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcxNiBwcm9kdWN0OwotICAgICAgICAgICAgaWRlbnRJZHggPSBibG9jay5pbmRleE9mQXR0cmlidXRlKE5VTEwsICJwcm9kdWN0Iik7Ci0gICAgICAgICAgICBpZiAoaWRlbnRJZHggPj0gMCkgewotICAgICAgICAgICAgICAgIHByb2R1Y3QgPSBTdHJpbmcxNihibG9jay5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpZGVudElkeCwgJmxlbikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcxNiBjb21tZW50KGJsb2NrLmdldENvbW1lbnQoJmxlbikgPyBibG9jay5nZXRDb21tZW50KCZsZW4pIDogbnVsU3RyKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGN1cklzQmFnKSB7Ci0gICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCB0aGUgcGFyZW50IG9mIHRoaXMgYmFnLi4uCi0gICAgICAgICAgICAgICAgU3RyaW5nMTYgcGFyZW50SWRlbnQ7Ci0gICAgICAgICAgICAgICAgc3NpemVfdCBwYXJlbnRJZGVudElkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgInBhcmVudCIpOwotICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZGVudElkeCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudElkZW50ID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUocGFyZW50SWRlbnRJZHgsICZsZW4pKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IHNlcCA9IGlkZW50LmZpbmRMYXN0KCcuJyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZXAgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWRlbnQuc2V0VG8oaWRlbnQsIHNlcCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWxvY2FsSGFzRXJyb3JzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVyciA9IG91dFRhYmxlLT5zdGFydEJhZyhTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmdldExpbmVOdW1iZXIoKSksIG15UGFja2FnZSwgY3VyVHlwZSwgaWRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWRlbnQsICZjdXJQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcndyaXRlLCBjdXJJc0JhZ1JlcGxhY2VPbk92ZXJ3cml0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzc2l6ZV90IGVsbUluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICBjaGFyIGVsbUluZGV4U3RyWzE0XTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGNvZGU9YmxvY2submV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wMTYoYmxvY2suZ2V0RWxlbWVudE5hbWUoJmxlbiksIGl0ZW0xNi5zdHJpbmcoKSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFnIDwlcz4gY2FuIG5vdCBhcHBlYXIgaW5zaWRlIDwlcz4sIG9ubHkgPGl0ZW0+XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChibG9jay5nZXRFbGVtZW50TmFtZSgmbGVuKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KCpjdXJUYWcpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYgaXRlbUlkZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1clR5cGUgPT0gYXJyYXkxNikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoZWxtSW5kZXhTdHIsICJeaW5kZXhfJWQiLCAoaW50KWVsbUluZGV4KyspOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JZGVudCA9IFN0cmluZzE2KGVsbUluZGV4U3RyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyVHlwZSA9PSBwbHVyYWxzMTYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IGl0ZW1JZGVudElkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgInF1YW50aXR5Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1JZGVudElkeCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2IHF1YW50aXR5MTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaXRlbUlkZW50SWR4LCAmbGVuKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWFudGl0eTE2ID09IG90aGVyMTYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JZGVudCA9IHF1YW50aXR5T3RoZXIxNjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFudGl0eTE2ID09IHplcm8xNikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUlkZW50ID0gcXVhbnRpdHlaZXJvMTY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVhbnRpdHkxNiA9PSBvbmUxNikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUlkZW50ID0gcXVhbnRpdHlPbmUxNjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFudGl0eTE2ID09IHR3bzE2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtSWRlbnQgPSBxdWFudGl0eVR3bzE2OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YW50aXR5MTYgPT0gZmV3MTYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JZGVudCA9IHF1YW50aXR5RmV3MTY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocXVhbnRpdHkxNiA9PSBtYW55MTYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JZGVudCA9IHF1YW50aXR5TWFueTE2OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklsbGVnYWwgJ3F1YW50aXR5JyBhdHRyaWJ1dGUgaXMgPGl0ZW0+IGluc2lkZSA8cGx1cmFscz5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQSAncXVhbnRpdHknIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgPGl0ZW0+IGluc2lkZSA8cGx1cmFscz5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IGl0ZW1JZGVudElkeCA9IGJsb2NrLmluZGV4T2ZBdHRyaWJ1dGUoTlVMTCwgIm5hbWUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUlkZW50SWR4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUlkZW50ID0gU3RyaW5nMTYoYmxvY2suZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoaXRlbUlkZW50SWR4LCAmbGVuKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQSAnbmFtZScgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciA8aXRlbT5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSBsb2NhbEhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBSZXNYTUxQYXJzZXI6OlJlc1hNTFBvc2l0aW9uIHBhcnNlclBvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2suZ2V0UG9zaXRpb24oJnBhcnNlclBvc2l0aW9uKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gcGFyc2VBbmRBZGRCYWcoYnVuZGxlLCBpbiwgJmJsb2NrLCBjdXJQYXJhbXMsIG15UGFja2FnZSwgY3VyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQsIHBhcmVudElkZW50LCBpdGVtSWRlbnQsIGN1ckZvcm1hdCwgY3VySXNGb3JtYXR0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsIGZhbHNlLCBvdmVyd3JpdGUsIG91dFRhYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VySXNQc2V1ZG9sb2NhbGl6YWJsZSAmJiBsb2NhbGVJc0RlZmluZWQoY3VyUGFyYW1zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYnVuZGxlLT5nZXRQc2V1ZG9sb2NhbGl6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBzZXVkb2xvY2FsaXplIGhlcmUKLSNpZiAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLnNldFBvc2l0aW9uKHBhcnNlclBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gcGFyc2VBbmRBZGRCYWcoYnVuZGxlLCBpbiwgJmJsb2NrLCBwc2V1ZG9QYXJhbXMsIG15UGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJUeXBlLCBpZGVudCwgcGFyZW50SWRlbnQsIGl0ZW1JZGVudCwgY3VyRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cklzRm9ybWF0dGVkLCBwcm9kdWN0LCB0cnVlLCBvdmVyd3JpdGUsIG91dFRhYmxlKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX1RBRykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCBjdXJUYWctPnN0cmluZygpKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zKGluLT5nZXRQcmludGFibGVTb3VyY2UoKSwgYmxvY2suZ2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGb3VuZCB0YWcgPC8lcz4gd2hlcmUgPC8lcz4gaXMgZXhwZWN0ZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoKmN1clRhZykuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFJlc1hNTFBhcnNlcjo6UmVzWE1MUG9zaXRpb24gcGFyc2VyUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgYmxvY2suZ2V0UG9zaXRpb24oJnBhcnNlclBvc2l0aW9uKTsKLQotICAgICAgICAgICAgICAgIGVyciA9IHBhcnNlQW5kQWRkRW50cnkoYnVuZGxlLCBpbiwgJmJsb2NrLCBjdXJQYXJhbXMsIG15UGFja2FnZSwgY3VyVHlwZSwgaWRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAqY3VyVGFnLCBjdXJJc1N0eWxlZCwgY3VyRm9ybWF0LCBjdXJJc0Zvcm1hdHRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsIGZhbHNlLCBvdmVyd3JpdGUsICZza2lwcGVkUmVzb3VyY2VOYW1lcywgb3V0VGFibGUpOwotCi0gICAgICAgICAgICAgICAgaWYgKGVyciA8IE5PX0VSUk9SKSB7IC8vIFdoeSBlcnIgPCBOT19FUlJPUiBpbnN0ZWFkIG9mIGVyciAhPSBOT19FUlJPUj8KLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gbG9jYWxIYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cklzUHNldWRvbG9jYWxpemFibGUgJiYgbG9jYWxlSXNEZWZpbmVkKGN1clBhcmFtcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBidW5kbGUtPmdldFBzZXVkb2xvY2FsaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBzZXVkb2xvY2FsaXplIGhlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLnNldFBvc2l0aW9uKHBhcnNlclBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IHBhcnNlQW5kQWRkRW50cnkoYnVuZGxlLCBpbiwgJmJsb2NrLCBwc2V1ZG9QYXJhbXMsIG15UGFja2FnZSwgY3VyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQsICpjdXJUYWcsIGN1cklzU3R5bGVkLCBjdXJGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cklzRm9ybWF0dGVkLCBwcm9kdWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBvdmVyd3JpdGUsICZza2lwcGVkUmVzb3VyY2VOYW1lcywgb3V0VGFibGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IGxvY2FsSGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotI2lmIDAKLSAgICAgICAgICAgIGlmIChjb21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIkNvbW1lbnQgZm9yIEAlczolcy8lczogJXNcbiIsIFN0cmluZzgobXlQYWNrYWdlKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChjdXJUeXBlKS5zdHJpbmcoKSwgU3RyaW5nOChpZGVudCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoY29tbWVudCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICBpZiAoIWxvY2FsSGFzRXJyb3JzKSB7Ci0gICAgICAgICAgICAgICAgb3V0VGFibGUtPmFwcGVuZENvbW1lbnQobXlQYWNrYWdlLCBjdXJUeXBlLCBpZGVudCwgY29tbWVudCwgZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX1RBRykgewotICAgICAgICAgICAgaWYgKHN0cmNtcDE2KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pLCByZXNvdXJjZXMxNi5zdHJpbmcoKSkgIT0gMCkgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCksIGJsb2NrLmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBlbmQgdGFnICVzXG4iLCBTdHJpbmc4KGJsb2NrLmdldEVsZW1lbnROYW1lKCZsZW4pKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpTVEFSVF9OQU1FU1BBQ0UgfHwgY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfTkFNRVNQQUNFKSB7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpURVhUKSB7Ci0gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGJsb2NrLmdldFRleHQoJmxlbikpKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTb3VyY2VQb3MoaW4tPmdldFByaW50YWJsZVNvdXJjZSgpLCBibG9jay5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAiRm91bmQgdGV4dCBcIiVzXCIgd2hlcmUgaXRlbSB0YWcgaXMgZXhwZWN0ZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgoYmxvY2suZ2V0VGV4dCgmbGVuKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGb3IgZXZlcnkgcmVzb3VyY2UgZGVmaW5lZCwgdGhlcmUgbXVzdCBiZSBleGlzdCBvbmUgdmFyaWFudCB3aXRoIGEgcHJvZHVjdCBhdHRyaWJ1dGUKLSAgICAvLyBzZXQgdG8gJ2RlZmF1bHQnIChvciBubyBwcm9kdWN0IGF0dHJpYnV0ZSBhdCBhbGwpLgotICAgIC8vIFdlIGNoZWNrIHRvIHNlZSB0aGF0IGZvciBldmVyeSByZXNvdXJjZSB0aGF0IHdhcyBpZ25vcmVkIGJlY2F1c2Ugb2YgYSBtaXNtYXRjaGVkCi0gICAgLy8gcHJvZHVjdCBhdHRyaWJ1dGUsIHNvbWUgcHJvZHVjdCB2YXJpYW50IG9mIHRoYXQgcmVzb3VyY2Ugd2FzIHByb2Nlc3NlZC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNraXBwZWRSZXNvdXJjZU5hbWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChza2lwcGVkUmVzb3VyY2VOYW1lc1tpXSkgewotICAgICAgICAgICAgY29uc3QgdHlwZV9pZGVudF9wYWlyX3QmIHAgPSBza2lwcGVkUmVzb3VyY2VOYW1lcy5rZXlBdChpKTsKLSAgICAgICAgICAgIGlmICghb3V0VGFibGUtPmhhc0JhZ09yRW50cnkobXlQYWNrYWdlLCBwLnR5cGUsIHAuaWRlbnQpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogYnVuZGxlUHJvZHVjdCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoYnVuZGxlLT5nZXRQcm9kdWN0KCkgPT0gTlVMTCkgPyAiIiA6IGJ1bmRsZS0+Z2V0UHJvZHVjdCgpOwotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW4gcmVzb3VyY2UgZmlsZSAlczogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbi0+Z2V0UHJpbnRhYmxlU291cmNlKCkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJQYXJhbXMudG9TdHJpbmcoKS5zdHJpbmcoKSk7Ci0KLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlx0JXMgJyVzJyBkb2VzIG5vdCBtYXRjaCBwcm9kdWN0ICVzLlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIlx0WW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBpbmNsdWRlIGEgJ2RlZmF1bHQnIHByb2R1Y3QgdmFyaWFudCIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgb2YgdGhlIHJlc291cmNlLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgocC50eXBlKS5zdHJpbmcoKSwgU3RyaW5nOChwLmlkZW50KS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZVByb2R1Y3RbMF0gPT0gMCA/ICJkZWZhdWx0IiA6IGJ1bmRsZVByb2R1Y3QpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhhc0Vycm9ycyA/IFVOS05PV05fRVJST1IgOiBOT19FUlJPUjsKLX0KLQotUmVzb3VyY2VUYWJsZTo6UmVzb3VyY2VUYWJsZShCdW5kbGUqIGJ1bmRsZSwgY29uc3QgU3RyaW5nMTYmIGFzc2V0c1BhY2thZ2UpCi0gICAgOiBtQXNzZXRzUGFja2FnZShhc3NldHNQYWNrYWdlKSwgbU5leHRQYWNrYWdlSWQoMSksIG1IYXZlQXBwUGFja2FnZShmYWxzZSksCi0gICAgICBtSXNBcHBQYWNrYWdlKCFidW5kbGUtPmdldEV4dGVuZGluZygpKSwKLSAgICAgIG1OdW1Mb2NhbCgwKSwKLSAgICAgIG1CdW5kbGUoYnVuZGxlKQotewotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjphZGRJbmNsdWRlZFJlc291cmNlcyhCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cykKLXsKLSAgICBzdGF0dXNfdCBlcnIgPSBhc3NldHMtPmJ1aWxkSW5jbHVkZWRSZXNvdXJjZXMoYnVuZGxlKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgLy8gRm9yIGZ1dHVyZSByZWZlcmVuY2UgdG8gaW5jbHVkZWQgcmVzb3VyY2VzLgotICAgIG1Bc3NldHMgPSBhc3NldHM7Ci0KLSAgICBjb25zdCBSZXNUYWJsZSYgaW5jbCA9IGFzc2V0cy0+Z2V0SW5jbHVkZWRSZXNvdXJjZXMoKTsKLQotICAgIC8vIFJldHJpZXZlIGFsbCB0aGUgcGFja2FnZXMuCi0gICAgY29uc3Qgc2l6ZV90IE4gPSBpbmNsLmdldEJhc2VQYWNrYWdlQ291bnQoKTsKLSAgICBmb3IgKHNpemVfdCBwaGFzZT0wOyBwaGFzZTwyOyBwaGFzZSsrKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIFN0cmluZzE2IG5hbWUoaW5jbC5nZXRCYXNlUGFja2FnZU5hbWUoaSkpOwotICAgICAgICAgICAgdWludDMyX3QgaWQgPSBpbmNsLmdldEJhc2VQYWNrYWdlSWQoaSk7Ci0gICAgICAgICAgICAvLyBGaXJzdCB0aW1lIHRocm91Z2g6IG9ubHkgYWRkIGJhc2UgcGFja2FnZXMgKGlkCi0gICAgICAgICAgICAvLyBpcyBub3QgMCk7IHNlY29uZCB0aW1lIHRocm91Z2ggYWRkIHRoZSBvdGhlcgotICAgICAgICAgICAgLy8gcGFja2FnZXMuCi0gICAgICAgICAgICBpZiAocGhhc2UgIT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChpZCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNraXAgYmFzZSBwYWNrYWdlcyAtLSBhbHJlYWR5IG9uZS4KLSAgICAgICAgICAgICAgICAgICAgaWQgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbiBhIGR5bmFtaWMgaWQuCi0gICAgICAgICAgICAgICAgICAgIGlkID0gbU5leHRQYWNrYWdlSWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChpZCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlkID09IDEyNykgewotICAgICAgICAgICAgICAgICAgICBpZiAobUhhdmVBcHBQYWNrYWdlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkluY2x1ZGVkIHJlc291cmNlcyBoYXZlIHR3byBhcHBsaWNhdGlvbiBwYWNrYWdlcyFcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbUhhdmVBcHBQYWNrYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1OZXh0UGFja2FnZUlkID4gaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbmNsdWRlZCBiYXNlIHBhY2thZ2UgSUQgJWQgYWxyZWFkeSBpbiB1c2UhXG4iLCBpZCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpZCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgTk9JU1kocHJpbnRmKCJJbmNsdWRpbmcgcGFja2FnZSAlcyB3aXRoIElEPSVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG5hbWUpLnN0cmluZygpLCBpZCkpOwotICAgICAgICAgICAgICAgIHNwPFBhY2thZ2U+IHAgPSBuZXcgUGFja2FnZShuYW1lLCBpZCk7Ci0gICAgICAgICAgICAgICAgbVBhY2thZ2VzLmFkZChuYW1lLCBwKTsKLSAgICAgICAgICAgICAgICBtT3JkZXJlZFBhY2thZ2VzLmFkZChwKTsKLQotICAgICAgICAgICAgICAgIGlmIChpZCA+PSBtTmV4dFBhY2thZ2VJZCkgewotICAgICAgICAgICAgICAgICAgICBtTmV4dFBhY2thZ2VJZCA9IGlkKzE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRXZlcnkgcmVzb3VyY2UgdGFibGUgYWx3YXlzIGhhcyBvbmUgZmlyc3QgZW50cnksIHRoZSBiYWcgYXR0cmlidXRlcy4KLSAgICBjb25zdCBTb3VyY2VQb3MgdW5rbm93bihTdHJpbmc4KCI/Pz8/IiksIDApOwotICAgIHNwPFR5cGU+IGF0dHIgPSBnZXRUeXBlKG1Bc3NldHNQYWNrYWdlLCBTdHJpbmcxNigiYXR0ciIpLCB1bmtub3duKTsKLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6YWRkUHVibGljKGNvbnN0IFNvdXJjZVBvcyYgc291cmNlUG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGlkZW50KQotewotICAgIHVpbnQzMl90IHJpZCA9IG1Bc3NldHMtPmdldEluY2x1ZGVkUmVzb3VyY2VzKCkKLSAgICAgICAgLmlkZW50aWZpZXJGb3JOYW1lKG5hbWUuc3RyaW5nKCksIG5hbWUuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5zdHJpbmcoKSwgdHlwZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLnN0cmluZygpLCBwYWNrYWdlLnNpemUoKSk7Ci0gICAgaWYgKHJpZCAhPSAwKSB7Ci0gICAgICAgIHNvdXJjZVBvcy5lcnJvcigiRXJyb3IgZGVjbGFyaW5nIHB1YmxpYyByZXNvdXJjZSAlcy8lcyBmb3IgaW5jbHVkZWQgcGFja2FnZSAlc1xuIiwKLSAgICAgICAgICAgICAgICBTdHJpbmc4KHR5cGUpLnN0cmluZygpLCBTdHJpbmc4KG5hbWUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgIFN0cmluZzgocGFja2FnZSkuc3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICBzcDxUeXBlPiB0ID0gZ2V0VHlwZShwYWNrYWdlLCB0eXBlLCBzb3VyY2VQb3MpOwotICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIHJldHVybiB0LT5hZGRQdWJsaWMoc291cmNlUG9zLCBuYW1lLCBpZGVudCk7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OmFkZEVudHJ5KGNvbnN0IFNvdXJjZVBvcyYgc291cmNlUG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZ1Bvb2w6OmVudHJ5X3N0eWxlX3NwYW4+KiBzdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogcGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBkb1NldEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIG92ZXJ3cml0ZSkKLXsKLSAgICAvLyBDaGVjayBmb3IgYWRkaW5nIGVudHJpZXMgaW4gb3RoZXIgcGFja2FnZXMuLi4gIGZvciBub3cgd2UgZG8KLSAgICAvLyBub3RoaW5nLiAgV2UgbmVlZCB0byBkbyB0aGUgcmlnaHQgdGhpbmcgaGVyZSB0byBzdXBwb3J0IHNraW5uaW5nLgotICAgIHVpbnQzMl90IHJpZCA9IG1Bc3NldHMtPmdldEluY2x1ZGVkUmVzb3VyY2VzKCkKLSAgICAgICAgLmlkZW50aWZpZXJGb3JOYW1lKG5hbWUuc3RyaW5nKCksIG5hbWUuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5zdHJpbmcoKSwgdHlwZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLnN0cmluZygpLCBwYWNrYWdlLnNpemUoKSk7Ci0gICAgaWYgKHJpZCAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICB9Ci0gICAgCi0jaWYgMAotICAgIGlmIChuYW1lID09IFN0cmluZzE2KCJsZWZ0IikpIHsKLSAgICAgICAgcHJpbnRmKCJBZGRpbmcgZW50cnkgbGVmdDogZmlsZT0lcywgbGluZT0lZCwgdHlwZT0lcywgdmFsdWU9JXNcbiIsCi0gICAgICAgICAgICAgICBzb3VyY2VQb3MuZmlsZS5zdHJpbmcoKSwgc291cmNlUG9zLmxpbmUsIFN0cmluZzgodHlwZSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICBTdHJpbmc4KHZhbHVlKS5zdHJpbmcoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBzcDxFbnRyeT4gZSA9IGdldEVudHJ5KHBhY2thZ2UsIHR5cGUsIG5hbWUsIHNvdXJjZVBvcywgb3ZlcndyaXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLCBkb1NldEluZGV4KTsKLSAgICBpZiAoZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICBzdGF0dXNfdCBlcnIgPSBlLT5zZXRJdGVtKHNvdXJjZVBvcywgdmFsdWUsIHN0eWxlLCBmb3JtYXQsIG92ZXJ3cml0ZSk7Ci0gICAgaWYgKGVyciA9PSBOT19FUlJPUikgewotICAgICAgICBtTnVtTG9jYWwrKzsKLSAgICB9Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6c3RhcnRCYWcoY29uc3QgU291cmNlUG9zJiBzb3VyY2VQb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgYmFnUGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnKiBwYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG92ZXJsYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlcGxhY2UsIGJvb2wgaXNJZCkKLXsKLSAgICBzdGF0dXNfdCByZXN1bHQgPSBOT19FUlJPUjsKLQotICAgIC8vIENoZWNrIGZvciBhZGRpbmcgZW50cmllcyBpbiBvdGhlciBwYWNrYWdlcy4uLiAgZm9yIG5vdyB3ZSBkbwotICAgIC8vIG5vdGhpbmcuICBXZSBuZWVkIHRvIGRvIHRoZSByaWdodCB0aGluZyBoZXJlIHRvIHN1cHBvcnQgc2tpbm5pbmcuCi0gICAgdWludDMyX3QgcmlkID0gbUFzc2V0cy0+Z2V0SW5jbHVkZWRSZXNvdXJjZXMoKQotICAgIC5pZGVudGlmaWVyRm9yTmFtZShuYW1lLnN0cmluZygpLCBuYW1lLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5zdHJpbmcoKSwgdHlwZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Uuc3RyaW5nKCksIHBhY2thZ2Uuc2l6ZSgpKTsKLSAgICBpZiAocmlkICE9IDApIHsKLSAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgIH0KLSAgICAKLSNpZiAwCi0gICAgaWYgKG5hbWUgPT0gU3RyaW5nMTYoImxlZnQiKSkgewotICAgICAgICBwcmludGYoIkFkZGluZyBiYWcgbGVmdDogZmlsZT0lcywgbGluZT0lZCwgdHlwZT0lc1xuIiwKLSAgICAgICAgICAgICAgIHNvdXJjZVBvcy5maWxlLnN0cmlpbmcoKSwgc291cmNlUG9zLmxpbmUsIFN0cmluZzgodHlwZSkuc3RyaW5nKCkpOwotICAgIH0KLSNlbmRpZgotICAgIGlmIChvdmVybGF5ICYmICFtQnVuZGxlLT5nZXRBdXRvQWRkT3ZlcmxheSgpICYmICFoYXNCYWdPckVudHJ5KHBhY2thZ2UsIHR5cGUsIG5hbWUpKSB7Ci0gICAgICAgIGJvb2wgY2FuQWRkID0gZmFsc2U7Ci0gICAgICAgIHNwPFBhY2thZ2U+IHAgPSBtUGFja2FnZXMudmFsdWVGb3IocGFja2FnZSk7Ci0gICAgICAgIGlmIChwICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHNwPFR5cGU+IHQgPSBwLT5nZXRUeXBlcygpLnZhbHVlRm9yKHR5cGUpOwotICAgICAgICAgICAgaWYgKHQgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmICh0LT5nZXRDYW5BZGRFbnRyaWVzKCkuaW5kZXhPZihuYW1lKSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbkFkZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghY2FuQWRkKSB7Ci0gICAgICAgICAgICBzb3VyY2VQb3MuZXJyb3IoIlJlc291cmNlIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgaW4gb3ZlcmxheSBhdCAnJXMnOyB1c2UgPGFkZC1yZXNvdXJjZT4gdG8gYWRkLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG5hbWUpLnN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotICAgIHNwPEVudHJ5PiBlID0gZ2V0RW50cnkocGFja2FnZSwgdHlwZSwgbmFtZSwgc291cmNlUG9zLCBvdmVybGF5LCBwYXJhbXMpOwotICAgIGlmIChlID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIAotICAgIC8vIElmIGEgcGFyZW50IGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBzZXQgaXQuCi0gICAgaWYgKGJhZ1BhcmVudC5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGUtPnNldFBhcmVudChiYWdQYXJlbnQpOwotICAgIH0KLQotICAgIGlmICgocmVzdWx0ID0gZS0+bWFrZUl0QUJhZyhzb3VyY2VQb3MpKSAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGlmIChvdmVybGF5ICYmIHJlcGxhY2UpIHsgCi0gICAgICAgIHJldHVybiBlLT5lbXB0eUJhZyhzb3VyY2VQb3MpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjphZGRCYWcoY29uc3QgU291cmNlUG9zJiBzb3VyY2VQb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGJhZ1BhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgYmFnS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4qIHN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogcGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVwbGFjZSwgYm9vbCBpc0lkLCBjb25zdCBpbnQzMl90IGZvcm1hdCkKLXsKLSAgICAvLyBDaGVjayBmb3IgYWRkaW5nIGVudHJpZXMgaW4gb3RoZXIgcGFja2FnZXMuLi4gIGZvciBub3cgd2UgZG8KLSAgICAvLyBub3RoaW5nLiAgV2UgbmVlZCB0byBkbyB0aGUgcmlnaHQgdGhpbmcgaGVyZSB0byBzdXBwb3J0IHNraW5uaW5nLgotICAgIHVpbnQzMl90IHJpZCA9IG1Bc3NldHMtPmdldEluY2x1ZGVkUmVzb3VyY2VzKCkKLSAgICAgICAgLmlkZW50aWZpZXJGb3JOYW1lKG5hbWUuc3RyaW5nKCksIG5hbWUuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5zdHJpbmcoKSwgdHlwZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLnN0cmluZygpLCBwYWNrYWdlLnNpemUoKSk7Ci0gICAgaWYgKHJpZCAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICB9Ci0KLSNpZiAwCi0gICAgaWYgKG5hbWUgPT0gU3RyaW5nMTYoImxlZnQiKSkgewotICAgICAgICBwcmludGYoIkFkZGluZyBiYWcgbGVmdDogZmlsZT0lcywgbGluZT0lZCwgdHlwZT0lc1xuIiwKLSAgICAgICAgICAgICAgIHNvdXJjZVBvcy5maWxlLnN0cmlpbmcoKSwgc291cmNlUG9zLmxpbmUsIFN0cmluZzgodHlwZSkuc3RyaW5nKCkpOwotICAgIH0KLSNlbmRpZgotICAgIHNwPEVudHJ5PiBlID0gZ2V0RW50cnkocGFja2FnZSwgdHlwZSwgbmFtZSwgc291cmNlUG9zLCByZXBsYWNlLCBwYXJhbXMpOwotICAgIGlmIChlID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgLy8gSWYgYSBwYXJlbnQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIHNldCBpdC4KLSAgICBpZiAoYmFnUGFyZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgZS0+c2V0UGFyZW50KGJhZ1BhcmVudCk7Ci0gICAgfQotCi0gICAgY29uc3QgYm9vbCBmaXJzdCA9IGUtPmdldEJhZygpLmluZGV4T2ZLZXkoYmFnS2V5KSA8IDA7Ci0gICAgc3RhdHVzX3QgZXJyID0gZS0+YWRkVG9CYWcoc291cmNlUG9zLCBiYWdLZXksIHZhbHVlLCBzdHlsZSwgcmVwbGFjZSwgaXNJZCwgZm9ybWF0KTsKLSAgICBpZiAoZXJyID09IE5PX0VSUk9SICYmIGZpcnN0KSB7Ci0gICAgICAgIG1OdW1Mb2NhbCsrOwotICAgIH0KLSAgICByZXR1cm4gZXJyOwotfQotCi1ib29sIFJlc291cmNlVGFibGU6Omhhc0JhZ09yRW50cnkoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUpIGNvbnN0Ci17Ci0gICAgLy8gRmlyc3QgbG9vayBmb3IgdGhpcyBpbiB0aGUgaW5jbHVkZWQgcmVzb3VyY2VzLi4uCi0gICAgdWludDMyX3QgcmlkID0gbUFzc2V0cy0+Z2V0SW5jbHVkZWRSZXNvdXJjZXMoKQotICAgICAgICAuaWRlbnRpZmllckZvck5hbWUobmFtZS5zdHJpbmcoKSwgbmFtZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLnN0cmluZygpLCB0eXBlLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Uuc3RyaW5nKCksIHBhY2thZ2Uuc2l6ZSgpKTsKLSAgICBpZiAocmlkICE9IDApIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc3A8UGFja2FnZT4gcCA9IG1QYWNrYWdlcy52YWx1ZUZvcihwYWNrYWdlKTsKLSAgICBpZiAocCAhPSBOVUxMKSB7Ci0gICAgICAgIHNwPFR5cGU+IHQgPSBwLT5nZXRUeXBlcygpLnZhbHVlRm9yKHR5cGUpOwotICAgICAgICBpZiAodCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBzcDxDb25maWdMaXN0PiBjID0gIHQtPmdldENvbmZpZ3MoKS52YWx1ZUZvcihuYW1lKTsKLSAgICAgICAgICAgIGlmIChjICE9IE5VTEwpIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlc291cmNlVGFibGU6Omhhc0JhZ09yRW50cnkoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnJiBjb25maWcpIGNvbnN0Ci17Ci0gICAgLy8gRmlyc3QgbG9vayBmb3IgdGhpcyBpbiB0aGUgaW5jbHVkZWQgcmVzb3VyY2VzLi4uCi0gICAgdWludDMyX3QgcmlkID0gbUFzc2V0cy0+Z2V0SW5jbHVkZWRSZXNvdXJjZXMoKQotICAgICAgICAuaWRlbnRpZmllckZvck5hbWUobmFtZS5zdHJpbmcoKSwgbmFtZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLnN0cmluZygpLCB0eXBlLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Uuc3RyaW5nKCksIHBhY2thZ2Uuc2l6ZSgpKTsKLSAgICBpZiAocmlkICE9IDApIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc3A8UGFja2FnZT4gcCA9IG1QYWNrYWdlcy52YWx1ZUZvcihwYWNrYWdlKTsKLSAgICBpZiAocCAhPSBOVUxMKSB7Ci0gICAgICAgIHNwPFR5cGU+IHQgPSBwLT5nZXRUeXBlcygpLnZhbHVlRm9yKHR5cGUpOwotICAgICAgICBpZiAodCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBzcDxDb25maWdMaXN0PiBjID0gIHQtPmdldENvbmZpZ3MoKS52YWx1ZUZvcihuYW1lKTsKLSAgICAgICAgICAgIGlmIChjICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzcDxFbnRyeT4gZSA9IGMtPmdldEVudHJpZXMoKS52YWx1ZUZvcihjb25maWcpOwotICAgICAgICAgICAgICAgIGlmIChlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlc291cmNlVGFibGU6Omhhc0JhZ09yRW50cnkoY29uc3QgU3RyaW5nMTYmIHJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiogZGVmVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiogZGVmUGFja2FnZSkKLXsKLSAgICBTdHJpbmcxNiBwYWNrYWdlLCB0eXBlLCBuYW1lOwotICAgIGlmICghUmVzVGFibGU6OmV4cGFuZFJlc291cmNlUmVmKHJlZi5zdHJpbmcoKSwgcmVmLnNpemUoKSwgJnBhY2thZ2UsICZ0eXBlLCAmbmFtZSwKLSAgICAgICAgICAgICAgICBkZWZUeXBlLCBkZWZQYWNrYWdlID8gZGVmUGFja2FnZTombUFzc2V0c1BhY2thZ2UsIE5VTEwpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhc0JhZ09yRW50cnkocGFja2FnZSwgdHlwZSwgbmFtZSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VUYWJsZTo6YXBwZW5kQ29tbWVudChjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgY29tbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG9ubHlJZkVtcHR5KQotewotICAgIGlmIChjb21tZW50LnNpemUoKSA8PSAwKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHNwPFBhY2thZ2U+IHAgPSBtUGFja2FnZXMudmFsdWVGb3IocGFja2FnZSk7Ci0gICAgaWYgKHAgIT0gTlVMTCkgewotICAgICAgICBzcDxUeXBlPiB0ID0gcC0+Z2V0VHlwZXMoKS52YWx1ZUZvcih0eXBlKTsKLSAgICAgICAgaWYgKHQgIT0gTlVMTCkgewotICAgICAgICAgICAgc3A8Q29uZmlnTGlzdD4gYyA9ICB0LT5nZXRDb25maWdzKCkudmFsdWVGb3IobmFtZSk7Ci0gICAgICAgICAgICBpZiAoYyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgYy0+YXBwZW5kQ29tbWVudChjb21tZW50LCBvbmx5SWZFbXB0eSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlc291cmNlVGFibGU6OmFwcGVuZFR5cGVDb21tZW50KGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBjb21tZW50KQotewotICAgIGlmIChjb21tZW50LnNpemUoKSA8PSAwKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBzcDxQYWNrYWdlPiBwID0gbVBhY2thZ2VzLnZhbHVlRm9yKHBhY2thZ2UpOwotICAgIGlmIChwICE9IE5VTEwpIHsKLSAgICAgICAgc3A8VHlwZT4gdCA9IHAtPmdldFR5cGVzKCkudmFsdWVGb3IodHlwZSk7Ci0gICAgICAgIGlmICh0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHNwPENvbmZpZ0xpc3Q+IGMgPSAgdC0+Z2V0Q29uZmlncygpLnZhbHVlRm9yKG5hbWUpOwotICAgICAgICAgICAgaWYgKGMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGMtPmFwcGVuZFR5cGVDb21tZW50KGNvbW1lbnQpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZXNvdXJjZVRhYmxlOjpjYW5BZGRFbnRyeShjb25zdCBTb3VyY2VQb3MmIHBvcywKLSAgICAgICAgY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsIGNvbnN0IFN0cmluZzE2JiB0eXBlLCBjb25zdCBTdHJpbmcxNiYgbmFtZSkKLXsKLSAgICBzcDxUeXBlPiB0ID0gZ2V0VHlwZShwYWNrYWdlLCB0eXBlLCBwb3MpOwotICAgIGlmICh0ICE9IE5VTEwpIHsKLSAgICAgICAgdC0+Y2FuQWRkRW50cnkobmFtZSk7Ci0gICAgfQotfQotCi1zaXplX3QgUmVzb3VyY2VUYWJsZTo6c2l6ZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gbVBhY2thZ2VzLnNpemUoKTsKLX0KLQotc2l6ZV90IFJlc291cmNlVGFibGU6Om51bUxvY2FsUmVzb3VyY2VzKCkgY29uc3QgewotICAgIHJldHVybiBtTnVtTG9jYWw7Ci19Ci0KLWJvb2wgUmVzb3VyY2VUYWJsZTo6aGFzUmVzb3VyY2VzKCkgY29uc3QgewotICAgIHJldHVybiBtTnVtTG9jYWwgPiAwOwotfQotCi1zcDxBYXB0RmlsZT4gUmVzb3VyY2VUYWJsZTo6ZmxhdHRlbihCdW5kbGUqIGJ1bmRsZSkKLXsKLSAgICBzcDxBYXB0RmlsZT4gZGF0YSA9IG5ldyBBYXB0RmlsZShTdHJpbmc4KCksIEFhcHRHcm91cEVudHJ5KCksIFN0cmluZzgoKSk7Ci0gICAgc3RhdHVzX3QgZXJyID0gZmxhdHRlbihidW5kbGUsIGRhdGEpOwotICAgIHJldHVybiBlcnIgPT0gTk9fRVJST1IgPyBkYXRhIDogTlVMTDsKLX0KLQotaW5saW5lIHVpbnQzMl90IFJlc291cmNlVGFibGU6OmdldFJlc0lkKGNvbnN0IHNwPFBhY2thZ2U+JiBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPFR5cGU+JiB0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG5hbWVJZCkKLXsKLSAgICByZXR1cm4gbWFrZVJlc0lkKHAtPmdldEFzc2lnbmVkSWQoKSwgdC0+Z2V0SW5kZXgoKSwgbmFtZUlkKTsKLX0KLQotdWludDMyX3QgUmVzb3VyY2VUYWJsZTo6Z2V0UmVzSWQoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvbmx5UHVibGljKSBjb25zdAotewotICAgIHVpbnQzMl90IGlkID0gUmVzb3VyY2VJZENhY2hlOjpsb29rdXAocGFja2FnZSwgdHlwZSwgbmFtZSwgb25seVB1YmxpYyk7Ci0gICAgaWYgKGlkICE9IDApIHJldHVybiBpZDsgICAgIC8vIGNhY2hlIGhpdAotCi0gICAgc3A8UGFja2FnZT4gcCA9IG1QYWNrYWdlcy52YWx1ZUZvcihwYWNrYWdlKTsKLSAgICBpZiAocCA9PSBOVUxMKSByZXR1cm4gMDsKLQotICAgIC8vIEZpcnN0IGxvb2sgZm9yIHRoaXMgaW4gdGhlIGluY2x1ZGVkIHJlc291cmNlcy4uLgotICAgIHVpbnQzMl90IHNwZWNGbGFncyA9IDA7Ci0gICAgdWludDMyX3QgcmlkID0gbUFzc2V0cy0+Z2V0SW5jbHVkZWRSZXNvdXJjZXMoKQotICAgICAgICAuaWRlbnRpZmllckZvck5hbWUobmFtZS5zdHJpbmcoKSwgbmFtZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLnN0cmluZygpLCB0eXBlLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Uuc3RyaW5nKCksIHBhY2thZ2Uuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwZWNGbGFncyk7Ci0gICAgaWYgKHJpZCAhPSAwKSB7Ci0gICAgICAgIGlmIChvbmx5UHVibGljKSB7Ci0gICAgICAgICAgICBpZiAoKHNwZWNGbGFncyAmIFJlc1RhYmxlX3R5cGVTcGVjOjpTUEVDX1BVQkxJQykgPT0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoUmVzX0lOVEVSTkFMSUQocmlkKSkgewotICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlSWRDYWNoZTo6c3RvcmUocGFja2FnZSwgdHlwZSwgbmFtZSwgb25seVB1YmxpYywgcmlkKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUmVzb3VyY2VJZENhY2hlOjpzdG9yZShwYWNrYWdlLCB0eXBlLCBuYW1lLCBvbmx5UHVibGljLAotICAgICAgICAgICAgICAgIFJlc19NQUtFSUQocC0+Z2V0QXNzaWduZWRJZCgpLTEsIFJlc19HRVRUWVBFKHJpZCksIFJlc19HRVRFTlRSWShyaWQpKSk7Ci0gICAgfQotCi0gICAgc3A8VHlwZT4gdCA9IHAtPmdldFR5cGVzKCkudmFsdWVGb3IodHlwZSk7Ci0gICAgaWYgKHQgPT0gTlVMTCkgcmV0dXJuIDA7Ci0gICAgc3A8Q29uZmlnTGlzdD4gYyA9ICB0LT5nZXRDb25maWdzKCkudmFsdWVGb3IobmFtZSk7Ci0gICAgaWYgKGMgPT0gTlVMTCkgcmV0dXJuIDA7Ci0gICAgaW50MzJfdCBlaSA9IGMtPmdldEVudHJ5SW5kZXgoKTsKLSAgICBpZiAoZWkgPCAwKSByZXR1cm4gMDsKLQotICAgIHJldHVybiBSZXNvdXJjZUlkQ2FjaGU6OnN0b3JlKHBhY2thZ2UsIHR5cGUsIG5hbWUsIG9ubHlQdWJsaWMsCi0gICAgICAgICAgICBnZXRSZXNJZChwLCB0LCBlaSkpOwotfQotCi11aW50MzJfdCBSZXNvdXJjZVRhYmxlOjpnZXRSZXNJZChjb25zdCBTdHJpbmcxNiYgcmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiogZGVmUGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBvdXRFcnJvck1zZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgb25seVB1YmxpYykgY29uc3QKLXsKLSAgICBTdHJpbmcxNiBwYWNrYWdlLCB0eXBlLCBuYW1lOwotICAgIGJvb2wgcmVmT25seVB1YmxpYyA9IHRydWU7Ci0gICAgaWYgKCFSZXNUYWJsZTo6ZXhwYW5kUmVzb3VyY2VSZWYoCi0gICAgICAgIHJlZi5zdHJpbmcoKSwgcmVmLnNpemUoKSwgJnBhY2thZ2UsICZ0eXBlLCAmbmFtZSwKLSAgICAgICAgZGVmVHlwZSwgZGVmUGFja2FnZSA/IGRlZlBhY2thZ2U6Jm1Bc3NldHNQYWNrYWdlLAotICAgICAgICBvdXRFcnJvck1zZywgJnJlZk9ubHlQdWJsaWMpKSB7Ci0gICAgICAgIE5PSVNZKHByaW50ZigiRXhwYW5kaW5nIHJlc291cmNlOiByZWY9JXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHJlZikuc3RyaW5nKCkpKTsKLSAgICAgICAgTk9JU1kocHJpbnRmKCJFeHBhbmRpbmcgcmVzb3VyY2U6IGRlZlR5cGU9JXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICBkZWZUeXBlID8gU3RyaW5nOCgqZGVmVHlwZSkuc3RyaW5nKCkgOiAiTlVMTCIpKTsKLSAgICAgICAgTk9JU1kocHJpbnRmKCJFeHBhbmRpbmcgcmVzb3VyY2U6IGRlZlBhY2thZ2U9JXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICBkZWZQYWNrYWdlID8gU3RyaW5nOCgqZGVmUGFja2FnZSkuc3RyaW5nKCkgOiAiTlVMTCIpKTsKLSAgICAgICAgTk9JU1kocHJpbnRmKCJFeHBhbmRpbmcgcmVzb3VyY2U6IHJlZj0lc1xuIiwgU3RyaW5nOChyZWYpLnN0cmluZygpKSk7Ci0gICAgICAgIE5PSVNZKHByaW50ZigiRXhwYW5kZWQgcmVzb3VyY2U6IHA9JXMsIHQ9JXMsIG49JXMsIHJlcz0wXG4iLAotICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChwYWNrYWdlKS5zdHJpbmcoKSwgU3RyaW5nOCh0eXBlKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgobmFtZSkuc3RyaW5nKCkpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHVpbnQzMl90IHJlcyA9IGdldFJlc0lkKHBhY2thZ2UsIHR5cGUsIG5hbWUsIG9ubHlQdWJsaWMgJiYgcmVmT25seVB1YmxpYyk7Ci0gICAgTk9JU1kocHJpbnRmKCJFeHBhbmRlZCByZXNvdXJjZTogcD0lcywgdD0lcywgbj0lcywgcmVzPSVkXG4iLAotICAgICAgICAgICAgICAgICBTdHJpbmc4KHBhY2thZ2UpLnN0cmluZygpLCBTdHJpbmc4KHR5cGUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICBTdHJpbmc4KG5hbWUpLnN0cmluZygpLCByZXMpKTsKLSAgICBpZiAocmVzID09IDApIHsKLSAgICAgICAgaWYgKG91dEVycm9yTXNnKQotICAgICAgICAgICAgKm91dEVycm9yTXNnID0gIk5vIHJlc291cmNlIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gbmFtZSI7Ci0gICAgfQotICAgIHJldHVybiByZXM7Ci19Ci0KLWJvb2wgUmVzb3VyY2VUYWJsZTo6aXNWYWxpZFJlc291cmNlTmFtZShjb25zdCBTdHJpbmcxNiYgcykKLXsKLSAgICBjb25zdCBjaGFyMTZfdCogcCA9IHMuc3RyaW5nKCk7Ci0gICAgYm9vbCBmaXJzdCA9IHRydWU7Ci0gICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgIGlmICgoKnAgPj0gJ2EnICYmICpwIDw9ICd6JykKLSAgICAgICAgICAgIHx8ICgqcCA+PSAnQScgJiYgKnAgPD0gJ1onKQotICAgICAgICAgICAgfHwgKnAgPT0gJ18nCi0gICAgICAgICAgICB8fCAoIWZpcnN0ICYmICpwID49ICcwJyAmJiAqcCA8PSAnOScpKSB7Ci0gICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwotICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZXNvdXJjZVRhYmxlOjpzdHJpbmdUb1ZhbHVlKFJlc192YWx1ZSogb3V0VmFsdWUsIFN0cmluZ1Bvb2wqIHBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZXNlcnZlU3BhY2VzLCBib29sIGNvZXJjZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXR0cklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmdQb29sOjplbnRyeV9zdHlsZV9zcGFuPiogc3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYqIG91dFN0ciwgdm9pZCogYWNjZXNzb3JDb29raWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXR0clR5cGUsIGNvbnN0IFN0cmluZzgqIGNvbmZpZ1R5cGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbmZpZ0Rlc2NyaXB0aW9uKiBjb25maWcpCi17Ci0gICAgU3RyaW5nMTYgZmluYWxTdHI7Ci0KLSAgICBib29sIHJlcyA9IHRydWU7Ci0gICAgaWYgKHN0eWxlID09IE5VTEwgfHwgc3R5bGUtPnNpemUoKSA9PSAwKSB7Ci0gICAgICAgIC8vIFRleHQgaXMgbm90IHN0eWxlZCBzbyBpdCBjYW4gYmUgYW55IHR5cGUuLi4gIGxldCdzIGZpZ3VyZSBpdCBvdXQuCi0gICAgICAgIHJlcyA9IG1Bc3NldHMtPmdldEluY2x1ZGVkUmVzb3VyY2VzKCkKLSAgICAgICAgICAgIC5zdHJpbmdUb1ZhbHVlKG91dFZhbHVlLCAmZmluYWxTdHIsIHN0ci5zdHJpbmcoKSwgc3RyLnNpemUoKSwgcHJlc2VydmVTcGFjZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lcmNlVHlwZSwgYXR0cklELCBOVUxMLCAmbUFzc2V0c1BhY2thZ2UsIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NvckNvb2tpZSwgYXR0clR5cGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFN0eWxlZCB0ZXh0IGNhbiBvbmx5IGJlIGEgc3RyaW5nLCBhbmQgd2hpbGUgY29sbGVjdGluZyB0aGUgc3R5bGUKLSAgICAgICAgLy8gaW5mb3JtYXRpb24gd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZCB0aGF0IHN0cmluZyEKLSAgICAgICAgb3V0VmFsdWUtPnNpemUgPSBzaXplb2YoUmVzX3ZhbHVlKTsKLSAgICAgICAgb3V0VmFsdWUtPnJlczAgPSAwOwotICAgICAgICBvdXRWYWx1ZS0+ZGF0YVR5cGUgPSBvdXRWYWx1ZS0+VFlQRV9TVFJJTkc7Ci0gICAgICAgIG91dFZhbHVlLT5kYXRhID0gMDsKLSAgICAgICAgZmluYWxTdHIgPSBzdHI7Ci0gICAgfQotCi0gICAgaWYgKCFyZXMpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChvdXRWYWx1ZS0+ZGF0YVR5cGUgPT0gb3V0VmFsdWUtPlRZUEVfU1RSSU5HKSB7Ci0gICAgICAgIC8vIFNob3VsZCBkbyBiZXR0ZXIgbWVyZ2luZyBzdHlsZXMuCi0gICAgICAgIGlmIChwb29sKSB7Ci0gICAgICAgICAgICBTdHJpbmc4IGNvbmZpZ1N0cjsKLSAgICAgICAgICAgIGlmIChjb25maWcgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGNvbmZpZ1N0ciA9IGNvbmZpZy0+dG9TdHJpbmcoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnU3RyID0gIihudWxsKSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBOT0lTWShwcmludGYoIkFkZGluZyB0byBwb29sIHN0cmluZyBzdHlsZSAjJWQgY29uZmlnICVzOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgc3R5bGUgIT0gTlVMTCA/IHN0eWxlLT5zaXplKCkgOiAwLAotICAgICAgICAgICAgICAgICAgICBjb25maWdTdHIuc3RyaW5nKCksIFN0cmluZzgoZmluYWxTdHIpLnN0cmluZygpKSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUgIT0gTlVMTCAmJiBzdHlsZS0+c2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgIG91dFZhbHVlLT5kYXRhID0gcG9vbC0+YWRkKGZpbmFsU3RyLCAqc3R5bGUsIGNvbmZpZ1R5cGVOYW1lLCBjb25maWcpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IHBvb2wtPmFkZChmaW5hbFN0ciwgdHJ1ZSwgY29uZmlnVHlwZU5hbWUsIGNvbmZpZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBDYWxsZXIgd2lsbCBmaWxsIHRoaXMgaW4gbGF0ZXIuCi0gICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSA9IDA7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgaWYgKG91dFN0cikgewotICAgICAgICAgICAgKm91dFN0ciA9IGZpbmFsU3RyOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdWludDMyX3QgUmVzb3VyY2VUYWJsZTo6Z2V0Q3VzdG9tUmVzb3VyY2UoCi0gICAgY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsIGNvbnN0IFN0cmluZzE2JiB0eXBlLCBjb25zdCBTdHJpbmcxNiYgbmFtZSkgY29uc3QKLXsKLSAgICAvL3ByaW50ZigiZ2V0Q3VzdG9tUmVzb3VyY2U6ICVzICVzICVzXG4iLCBTdHJpbmc4KHBhY2thZ2UpLnN0cmluZygpLAotICAgIC8vICAgICAgIFN0cmluZzgodHlwZSkuc3RyaW5nKCksIFN0cmluZzgobmFtZSkuc3RyaW5nKCkpOwotICAgIHNwPFBhY2thZ2U+IHAgPSBtUGFja2FnZXMudmFsdWVGb3IocGFja2FnZSk7Ci0gICAgaWYgKHAgPT0gTlVMTCkgcmV0dXJuIDA7Ci0gICAgc3A8VHlwZT4gdCA9IHAtPmdldFR5cGVzKCkudmFsdWVGb3IodHlwZSk7Ci0gICAgaWYgKHQgPT0gTlVMTCkgcmV0dXJuIDA7Ci0gICAgc3A8Q29uZmlnTGlzdD4gYyA9ICB0LT5nZXRDb25maWdzKCkudmFsdWVGb3IobmFtZSk7Ci0gICAgaWYgKGMgPT0gTlVMTCkgcmV0dXJuIDA7Ci0gICAgaW50MzJfdCBlaSA9IGMtPmdldEVudHJ5SW5kZXgoKTsKLSAgICBpZiAoZWkgPCAwKSByZXR1cm4gMDsKLSAgICByZXR1cm4gZ2V0UmVzSWQocCwgdCwgZWkpOwotfQotCi11aW50MzJfdCBSZXNvdXJjZVRhYmxlOjpnZXRDdXN0b21SZXNvdXJjZVdpdGhDcmVhdGlvbigKLSAgICAgICAgY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsIGNvbnN0IFN0cmluZzE2JiB0eXBlLCBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgY29uc3QgYm9vbCBjcmVhdGVJZk5vdEZvdW5kKQotewotICAgIHVpbnQzMl90IHJlc0lkID0gZ2V0Q3VzdG9tUmVzb3VyY2UocGFja2FnZSwgdHlwZSwgbmFtZSk7Ci0gICAgaWYgKHJlc0lkICE9IDAgfHwgIWNyZWF0ZUlmTm90Rm91bmQpIHsKLSAgICAgICAgcmV0dXJuIHJlc0lkOwotICAgIH0KLSAgICBTdHJpbmcxNiB2YWx1ZSgiZmFsc2UiKTsKLQotICAgIHN0YXR1c190IHN0YXR1cyA9IGFkZEVudHJ5KG1DdXJyZW50WG1sUG9zLCBwYWNrYWdlLCB0eXBlLCBuYW1lLCB2YWx1ZSwgTlVMTCwgTlVMTCwgdHJ1ZSk7Ci0gICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUikgewotICAgICAgICByZXNJZCA9IGdldFJlc0lkKHBhY2thZ2UsIHR5cGUsIG5hbWUpOwotICAgICAgICByZXR1cm4gcmVzSWQ7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi11aW50MzJfdCBSZXNvdXJjZVRhYmxlOjpnZXRSZW1hcHBlZFBhY2thZ2UodWludDMyX3Qgb3JpZ1BhY2thZ2UpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG9yaWdQYWNrYWdlOwotfQotCi1ib29sIFJlc291cmNlVGFibGU6OmdldEF0dHJpYnV0ZVR5cGUodWludDMyX3QgYXR0cklELCB1aW50MzJfdCogb3V0VHlwZSkKLXsKLSAgICAvL3ByaW50ZigiZ2V0QXR0cmlidXRlVHlwZSAjJTA4eFxuIiwgYXR0cklEKTsKLSAgICBSZXNfdmFsdWUgdmFsdWU7Ci0gICAgaWYgKGdldEl0ZW1WYWx1ZShhdHRySUQsIFJlc1RhYmxlX21hcDo6QVRUUl9UWVBFLCAmdmFsdWUpKSB7Ci0gICAgICAgIC8vcHJpbnRmKCJnZXRBdHRyaWJ1dGVUeXBlICMlMDh4ICglcyk6ICMlMDh4XG4iLCBhdHRySUQsCi0gICAgICAgIC8vICAgICAgIFN0cmluZzgoZ2V0RW50cnkoYXR0cklEKS0+Z2V0TmFtZSgpKS5zdHJpbmcoKSwgdmFsdWUuZGF0YSk7Ci0gICAgICAgICpvdXRUeXBlID0gdmFsdWUuZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZXNvdXJjZVRhYmxlOjpnZXRBdHRyaWJ1dGVNaW4odWludDMyX3QgYXR0cklELCB1aW50MzJfdCogb3V0TWluKQotewotICAgIC8vcHJpbnRmKCJnZXRBdHRyaWJ1dGVNaW4gIyUwOHhcbiIsIGF0dHJJRCk7Ci0gICAgUmVzX3ZhbHVlIHZhbHVlOwotICAgIGlmIChnZXRJdGVtVmFsdWUoYXR0cklELCBSZXNUYWJsZV9tYXA6OkFUVFJfTUlOLCAmdmFsdWUpKSB7Ci0gICAgICAgICpvdXRNaW4gPSB2YWx1ZS5kYXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlc291cmNlVGFibGU6OmdldEF0dHJpYnV0ZU1heCh1aW50MzJfdCBhdHRySUQsIHVpbnQzMl90KiBvdXRNYXgpCi17Ci0gICAgLy9wcmludGYoImdldEF0dHJpYnV0ZU1heCAjJTA4eFxuIiwgYXR0cklEKTsKLSAgICBSZXNfdmFsdWUgdmFsdWU7Ci0gICAgaWYgKGdldEl0ZW1WYWx1ZShhdHRySUQsIFJlc1RhYmxlX21hcDo6QVRUUl9NQVgsICZ2YWx1ZSkpIHsKLSAgICAgICAgKm91dE1heCA9IHZhbHVlLmRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXVpbnQzMl90IFJlc291cmNlVGFibGU6OmdldEF0dHJpYnV0ZUwxME4odWludDMyX3QgYXR0cklEKQotewotICAgIC8vcHJpbnRmKCJnZXRBdHRyaWJ1dGVMMTBOICMlMDh4XG4iLCBhdHRySUQpOwotICAgIFJlc192YWx1ZSB2YWx1ZTsKLSAgICBpZiAoZ2V0SXRlbVZhbHVlKGF0dHJJRCwgUmVzVGFibGVfbWFwOjpBVFRSX0wxME4sICZ2YWx1ZSkpIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmRhdGE7Ci0gICAgfQotICAgIHJldHVybiBSZXNUYWJsZV9tYXA6OkwxME5fTk9UX1JFUVVJUkVEOwotfQotCi1ib29sIFJlc291cmNlVGFibGU6OmdldExvY2FsaXphdGlvblNldHRpbmcoKQotewotICAgIHJldHVybiBtQnVuZGxlLT5nZXRSZXF1aXJlTG9jYWxpemF0aW9uKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VUYWJsZTo6cmVwb3J0RXJyb3Iodm9pZCogYWNjZXNzb3JDb29raWUsIGNvbnN0IGNoYXIqIGZtdCwgLi4uKQotewotICAgIGlmIChhY2Nlc3NvckNvb2tpZSAhPSBOVUxMICYmIGZtdCAhPSBOVUxMKSB7Ci0gICAgICAgIEFjY2Vzc29yQ29va2llKiBhYyA9IChBY2Nlc3NvckNvb2tpZSopYWNjZXNzb3JDb29raWU7Ci0gICAgICAgIGludCByZXR2YWw9MDsKLSAgICAgICAgY2hhciBidWZbMTAyNF07Ci0gICAgICAgIHZhX2xpc3QgYXA7Ci0gICAgICAgIHZhX3N0YXJ0KGFwLCBmbXQpOwotICAgICAgICByZXR2YWwgPSB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7Ci0gICAgICAgIHZhX2VuZChhcCk7Ci0gICAgICAgIGFjLT5zb3VyY2VQb3MuZXJyb3IoIkVycm9yOiAlcyAoYXQgJyVzJyB3aXRoIHZhbHVlICclcycpLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGFjLT5hdHRyLnN0cmluZygpLCBhYy0+dmFsdWUuc3RyaW5nKCkpOwotICAgIH0KLX0KLQotYm9vbCBSZXNvdXJjZVRhYmxlOjpnZXRBdHRyaWJ1dGVLZXlzKAotICAgIHVpbnQzMl90IGF0dHJJRCwgVmVjdG9yPFN0cmluZzE2Piogb3V0S2V5cykKLXsKLSAgICBzcDxjb25zdCBFbnRyeT4gZSA9IGdldEVudHJ5KGF0dHJJRCk7Ci0gICAgaWYgKGUgIT0gTlVMTCkgewotICAgICAgICBjb25zdCBzaXplX3QgTiA9IGUtPmdldEJhZygpLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGtleSA9IGUtPmdldEJhZygpLmtleUF0KGkpOwotICAgICAgICAgICAgaWYgKGtleS5zaXplKCkgPiAwICYmIGtleS5zdHJpbmcoKVswXSAhPSAnXicpIHsKLSAgICAgICAgICAgICAgICBvdXRLZXlzLT5hZGQoa2V5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlc291cmNlVGFibGU6OmdldEF0dHJpYnV0ZUVudW0oCi0gICAgdWludDMyX3QgYXR0cklELCBjb25zdCBjaGFyMTZfdCogbmFtZSwgc2l6ZV90IG5hbWVMZW4sCi0gICAgUmVzX3ZhbHVlKiBvdXRWYWx1ZSkKLXsKLSAgICAvL3ByaW50ZigiZ2V0QXR0cmlidXRlRW51bSAjJTA4eCAlc1xuIiwgYXR0cklELCBTdHJpbmc4KG5hbWUsIG5hbWVMZW4pLnN0cmluZygpKTsKLSAgICBTdHJpbmcxNiBuYW1lU3RyKG5hbWUsIG5hbWVMZW4pOwotICAgIHNwPGNvbnN0IEVudHJ5PiBlID0gZ2V0RW50cnkoYXR0cklEKTsKLSAgICBpZiAoZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBOID0gZS0+Z2V0QmFnKCkuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICAvL3ByaW50ZigiQ29tcGFyaW5nICVzIHRvICVzXG4iLCBTdHJpbmc4KG5hbWUsIG5hbWVMZW4pLnN0cmluZygpLAotICAgICAgICAgICAgLy8gICAgICAgU3RyaW5nOChlLT5nZXRCYWcoKS5rZXlBdChpKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgaWYgKGUtPmdldEJhZygpLmtleUF0KGkpID09IG5hbWVTdHIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SXRlbVZhbHVlKGF0dHJJRCwgZS0+Z2V0QmFnKCkudmFsdWVBdChpKS5iYWdLZXlJZCwgb3V0VmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZXNvdXJjZVRhYmxlOjpnZXRBdHRyaWJ1dGVGbGFncygKLSAgICB1aW50MzJfdCBhdHRySUQsIGNvbnN0IGNoYXIxNl90KiBuYW1lLCBzaXplX3QgbmFtZUxlbiwKLSAgICBSZXNfdmFsdWUqIG91dFZhbHVlKQotewotICAgIG91dFZhbHVlLT5kYXRhVHlwZSA9IFJlc192YWx1ZTo6VFlQRV9JTlRfSEVYOwotICAgIG91dFZhbHVlLT5kYXRhID0gMDsKLQotICAgIC8vcHJpbnRmKCJnZXRBdHRyaWJ1dGVGbGFncyAjJTA4eCAlc1xuIiwgYXR0cklELCBTdHJpbmc4KG5hbWUsIG5hbWVMZW4pLnN0cmluZygpKTsKLSAgICBTdHJpbmcxNiBuYW1lU3RyKG5hbWUsIG5hbWVMZW4pOwotICAgIHNwPGNvbnN0IEVudHJ5PiBlID0gZ2V0RW50cnkoYXR0cklEKTsKLSAgICBpZiAoZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBOID0gZS0+Z2V0QmFnKCkuc2l6ZSgpOwotCi0gICAgICAgIGNvbnN0IGNoYXIxNl90KiBlbmQgPSBuYW1lICsgbmFtZUxlbjsKLSAgICAgICAgY29uc3QgY2hhcjE2X3QqIHBvcyA9IG5hbWU7Ci0gICAgICAgIHdoaWxlIChwb3MgPCBlbmQpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBzdGFydCA9IHBvczsKLSAgICAgICAgICAgIHdoaWxlIChwb3MgPCBlbmQgJiYgKnBvcyAhPSAnfCcpIHsKLSAgICAgICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nMTYgbmFtZVN0cihzdGFydCwgcG9zLXN0YXJ0KTsKLSAgICAgICAgICAgIHNpemVfdCBpOwotICAgICAgICAgICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgLy9wcmludGYoIkNvbXBhcmluZyBcIiVzXCIgdG8gXCIlc1wiXG4iLCBTdHJpbmc4KG5hbWVTdHIpLnN0cmluZygpLAotICAgICAgICAgICAgICAgIC8vICAgICAgIFN0cmluZzgoZS0+Z2V0QmFnKCkua2V5QXQoaSkpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBpZiAoZS0+Z2V0QmFnKCkua2V5QXQoaSkgPT0gbmFtZVN0cikgewotICAgICAgICAgICAgICAgICAgICBSZXNfdmFsdWUgdmFsOwotICAgICAgICAgICAgICAgICAgICBib29sIGdvdCA9IGdldEl0ZW1WYWx1ZShhdHRySUQsIGUtPmdldEJhZygpLnZhbHVlQXQoaSkuYmFnS2V5SWQsICZ2YWwpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWdvdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJHb3QgdmFsdWU6IDB4JTA4eFxuIiwgdmFsLmRhdGEpOwotICAgICAgICAgICAgICAgICAgICBvdXRWYWx1ZS0+ZGF0YSB8PSB2YWwuZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaSA+PSBOKSB7Ci0gICAgICAgICAgICAgICAgLy8gRGlkbid0IGZpbmQgdGhpcyBmbGFnIGlkZW50aWZpZXIuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjphc3NpZ25SZXNvdXJjZUlkcygpCi17Ci0gICAgY29uc3Qgc2l6ZV90IE4gPSBtT3JkZXJlZFBhY2thZ2VzLnNpemUoKTsKLSAgICBzaXplX3QgcGk7Ci0gICAgc3RhdHVzX3QgZmlyc3RFcnJvciA9IE5PX0VSUk9SOwotCi0gICAgLy8gRmlyc3QgZ2VuZXJhdGUgYWxsIGJhZyBhdHRyaWJ1dGVzIGFuZCBhc3NpZ24gaW5kaWNlcy4KLSAgICBmb3IgKHBpPTA7IHBpPE47IHBpKyspIHsKLSAgICAgICAgc3A8UGFja2FnZT4gcCA9IG1PcmRlcmVkUGFja2FnZXMuaXRlbUF0KHBpKTsKLSAgICAgICAgaWYgKHAgPT0gTlVMTCB8fCBwLT5nZXRUeXBlcygpLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAvLyBFbXB0eSwgc2tpcCEKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdHVzX3QgZXJyID0gcC0+YXBwbHlQdWJsaWNUeXBlT3JkZXIoKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUiAmJiBmaXJzdEVycm9yID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBmaXJzdEVycm9yID0gZXJyOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2VuZXJhdGUgYXR0cmlidXRlcy4uLgotICAgICAgICBjb25zdCBzaXplX3QgTiA9IHAtPmdldE9yZGVyZWRUeXBlcygpLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IHRpOwotICAgICAgICBmb3IgKHRpPTA7IHRpPE47IHRpKyspIHsKLSAgICAgICAgICAgIHNwPFR5cGU+IHQgPSBwLT5nZXRPcmRlcmVkVHlwZXMoKS5pdGVtQXQodGkpOwotICAgICAgICAgICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSB0LT5nZXRPcmRlcmVkQ29uZmlncygpLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGNpPTA7IGNpPE47IGNpKyspIHsKLSAgICAgICAgICAgICAgICBzcDxDb25maWdMaXN0PiBjID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5pdGVtQXQoY2kpOwotICAgICAgICAgICAgICAgIGlmIChjID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOID0gYy0+Z2V0RW50cmllcygpLnNpemUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBlaT0wOyBlaTxOOyBlaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwPEVudHJ5PiBlID0gYy0+Z2V0RW50cmllcygpLnZhbHVlQXQoZWkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBlLT5nZW5lcmF0ZUF0dHJpYnV0ZXModGhpcywgcC0+Z2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUiAmJiBmaXJzdEVycm9yID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEVycm9yID0gZXJyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgU291cmNlUG9zIHVua25vd24oU3RyaW5nOCgiPz8/PyIpLCAwKTsKLSAgICAgICAgc3A8VHlwZT4gYXR0ciA9IHAtPmdldFR5cGUoU3RyaW5nMTYoImF0dHIiKSwgdW5rbm93bik7Ci0KLSAgICAgICAgLy8gQXNzaWduIGluZGljZXMuLi4KLSAgICAgICAgZm9yICh0aT0wOyB0aTxOOyB0aSsrKSB7Ci0gICAgICAgICAgICBzcDxUeXBlPiB0ID0gcC0+Z2V0T3JkZXJlZFR5cGVzKCkuaXRlbUF0KHRpKTsKLSAgICAgICAgICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IHQtPmFwcGx5UHVibGljRW50cnlPcmRlcigpOwotICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUiAmJiBmaXJzdEVycm9yID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgZmlyc3RFcnJvciA9IGVycjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSB0LT5nZXRPcmRlcmVkQ29uZmlncygpLnNpemUoKTsKLSAgICAgICAgICAgIHQtPnNldEluZGV4KHRpKzEpOwotCi0gICAgICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKHRpID09IDAgJiYgYXR0ciAhPSB0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlyc3QgdHlwZSBpcyBub3QgYXR0ciEiKTsKLQotICAgICAgICAgICAgZm9yIChzaXplX3QgZWk9MDsgZWk8TjsgZWkrKykgewotICAgICAgICAgICAgICAgIHNwPENvbmZpZ0xpc3Q+IGMgPSB0LT5nZXRPcmRlcmVkQ29uZmlncygpLml0ZW1BdChlaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYy0+c2V0RW50cnlJbmRleChlaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBc3NpZ24gcmVzb3VyY2UgSURzIHRvIGtleXMgaW4gYmFncy4uLgotICAgICAgICBmb3IgKHRpPTA7IHRpPE47IHRpKyspIHsKLSAgICAgICAgICAgIHNwPFR5cGU+IHQgPSBwLT5nZXRPcmRlcmVkVHlwZXMoKS5pdGVtQXQodGkpOwotICAgICAgICAgICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSB0LT5nZXRPcmRlcmVkQ29uZmlncygpLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGNpPTA7IGNpPE47IGNpKyspIHsKLSAgICAgICAgICAgICAgICBzcDxDb25maWdMaXN0PiBjID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5pdGVtQXQoY2kpOwotICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJPcmRlcmVkIGNvbmZpZyAjJWQ6ICVwXG4iLCBjaSwgYy5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBjLT5nZXRFbnRyaWVzKCkuc2l6ZSgpOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGVpPTA7IGVpPE47IGVpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc3A8RW50cnk+IGUgPSBjLT5nZXRFbnRyaWVzKCkudmFsdWVBdChlaSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHN0YXR1c190IGVyciA9IGUtPmFzc2lnblJlc291cmNlSWRzKHRoaXMsIHAtPmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IgJiYgZmlyc3RFcnJvciA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RFcnJvciA9IGVycjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmlyc3RFcnJvcjsKLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6YWRkU3ltYm9scyhjb25zdCBzcDxBYXB0U3ltYm9scz4mIG91dFN5bWJvbHMpIHsKLSAgICBjb25zdCBzaXplX3QgTiA9IG1PcmRlcmVkUGFja2FnZXMuc2l6ZSgpOwotICAgIHNpemVfdCBwaTsKLQotICAgIGZvciAocGk9MDsgcGk8TjsgcGkrKykgewotICAgICAgICBzcDxQYWNrYWdlPiBwID0gbU9yZGVyZWRQYWNrYWdlcy5pdGVtQXQocGkpOwotICAgICAgICBpZiAocC0+Z2V0VHlwZXMoKS5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgLy8gRW1wdHksIHNraXAhCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IHNpemVfdCBOID0gcC0+Z2V0T3JkZXJlZFR5cGVzKCkuc2l6ZSgpOwotICAgICAgICBzaXplX3QgdGk7Ci0KLSAgICAgICAgZm9yICh0aT0wOyB0aTxOOyB0aSsrKSB7Ci0gICAgICAgICAgICBzcDxUeXBlPiB0ID0gcC0+Z2V0T3JkZXJlZFR5cGVzKCkuaXRlbUF0KHRpKTsKLSAgICAgICAgICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5zaXplKCk7Ci0gICAgICAgICAgICBzcDxBYXB0U3ltYm9scz4gdHlwZVN5bWJvbHM7Ci0gICAgICAgICAgICB0eXBlU3ltYm9scyA9IG91dFN5bWJvbHMtPmFkZE5lc3RlZFN5bWJvbChTdHJpbmc4KHQtPmdldE5hbWUoKSksIHQtPmdldFBvcygpKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGNpPTA7IGNpPE47IGNpKyspIHsKLSAgICAgICAgICAgICAgICBzcDxDb25maWdMaXN0PiBjID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5pdGVtQXQoY2kpOwotICAgICAgICAgICAgICAgIGlmIChjID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHVpbnQzMl90IHJpZCA9IGdldFJlc0lkKHAsIHQsIGNpKTsKLSAgICAgICAgICAgICAgICBpZiAocmlkID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChSZXNfR0VUUEFDS0FHRShyaWQpID09IChzaXplX3QpKHAtPmdldEFzc2lnbmVkSWQoKS0xKSkgewotICAgICAgICAgICAgICAgICAgICB0eXBlU3ltYm9scy0+YWRkU3ltYm9sKFN0cmluZzgoYy0+Z2V0TmFtZSgpKSwgcmlkLCBjLT5nZXRQb3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiBjb21tZW50KGMtPmdldENvbW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVTeW1ib2xzLT5hcHBlbmRDb21tZW50KFN0cmluZzgoYy0+Z2V0TmFtZSgpKSwgY29tbWVudCwgYy0+Z2V0UG9zKCkpOwotICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiVHlwZSBzeW1ib2wgWyUwOHhdICVzIGNvbW1lbnQ6ICVzXG4iLCByaWQsCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBTdHJpbmc4KGMtPmdldE5hbWUoKSkuc3RyaW5nKCksIFN0cmluZzgoY29tbWVudCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gYy0+Z2V0VHlwZUNvbW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgdHlwZVN5bWJvbHMtPmFwcGVuZFR5cGVDb21tZW50KFN0cmluZzgoYy0+Z2V0TmFtZSgpKSwgY29tbWVudCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSNpZiAwCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiKioqKiBOTyBNQVRDSDogMHglMDh4IHZzIDB4JTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc19HRVRQQUNLQUdFKHJpZCksIHAtPmdldEFzc2lnbmVkSWQoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0KLXZvaWQKLVJlc291cmNlVGFibGU6OmFkZExvY2FsaXphdGlvbihjb25zdCBTdHJpbmcxNiYgbmFtZSwgY29uc3QgU3RyaW5nOCYgbG9jYWxlKQotewotICAgIG1Mb2NhbGl6YXRpb25zW25hbWVdLmluc2VydChsb2NhbGUpOwotfQotCi0KLS8qIQotICogRmxhZyB2YXJpb3VzIHNvcnRzIG9mIGxvY2FsaXphdGlvbiBwcm9ibGVtcy4gICcrJyBpbmRpY2F0ZXMgY2hlY2tzIGFscmVhZHkgaW1wbGVtZW50ZWQ7Ci0gKiAnLScgaW5kaWNhdGVzIGNoZWNrcyB0aGF0IHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGZ1dHVyZS4KLSAqCi0gKiArIEEgbG9jYWxpemVkIHN0cmluZyBmb3Igd2hpY2ggbm8gZGVmYXVsdC1sb2NhbGUgdmVyc2lvbiBleGlzdHMgPT4gd2FybmluZwotICogKyBBIHN0cmluZyBmb3Igd2hpY2ggbm8gdmVyc2lvbiBpbiBhbiBleHBsaWNpdGx5LXJlcXVlc3RlZCBsb2NhbGUgZXhpc3RzID0+IHdhcm5pbmcKLSAqICsgQSBsb2NhbGl6ZWQgdHJhbnNsYXRpb24gb2YgYW4gdHJhbnNsYXRlYWJsZT0iZmFsc2UiIHN0cmluZyA9PiB3YXJuaW5nCi0gKiAtIEEgbG9jYWxpemVkIHN0cmluZyBub3QgcHJvdmlkZWQgaW4gZXZlcnkgbG9jYWxlIHVzZWQgYnkgdGhlIHRhYmxlCi0gKi8KLXN0YXR1c190Ci1SZXNvdXJjZVRhYmxlOjp2YWxpZGF0ZUxvY2FsaXphdGlvbnModm9pZCkKLXsKLSAgICBzdGF0dXNfdCBlcnIgPSBOT19FUlJPUjsKLSAgICBjb25zdCBTdHJpbmc4IGRlZmF1bHRMb2NhbGU7Ci0KLSAgICAvLyBGb3IgYWxsIHN0cmluZ3MuLi4KLSAgICBmb3IgKG1hcDxTdHJpbmcxNiwgc2V0PFN0cmluZzg+ID46Oml0ZXJhdG9yIG5hbWVJdGVyID0gbUxvY2FsaXphdGlvbnMuYmVnaW4oKTsKLSAgICAgICAgIG5hbWVJdGVyICE9IG1Mb2NhbGl6YXRpb25zLmVuZCgpOwotICAgICAgICAgbmFtZUl0ZXIrKykgewotICAgICAgICBjb25zdCBzZXQ8U3RyaW5nOD4mIGNvbmZpZ1NldCA9IG5hbWVJdGVyLT5zZWNvbmQ7ICAgLy8gbmFtaW5nIGNvbnZlbmllbmNlCi0KLSAgICAgICAgLy8gTG9vayBmb3Igc3RyaW5ncyB3aXRoIG5vIGRlZmF1bHQgbG9jYWxpemF0aW9uCi0gICAgICAgIGlmIChjb25maWdTZXQuY291bnQoZGVmYXVsdExvY2FsZSkgPT0gMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICJhYXB0OiB3YXJuaW5nOiBzdHJpbmcgJyVzJyBoYXMgbm8gZGVmYXVsdCB0cmFuc2xhdGlvbiBpbiAlczsgZm91bmQ6IiwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChuYW1lSXRlci0+Zmlyc3QpLnN0cmluZygpLCBtQnVuZGxlLT5nZXRSZXNvdXJjZVNvdXJjZURpcnMoKVswXSk7Ci0gICAgICAgICAgICBmb3IgKHNldDxTdHJpbmc4Pjo6Y29uc3RfaXRlcmF0b3IgbG9jYWxlcyA9IGNvbmZpZ1NldC5iZWdpbigpOwotICAgICAgICAgICAgICAgICBsb2NhbGVzICE9IGNvbmZpZ1NldC5lbmQoKTsKLSAgICAgICAgICAgICAgICAgbG9jYWxlcysrKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICIgJXMiLCAoKmxvY2FsZXMpLnN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiXG4iKTsKLSAgICAgICAgICAgIC8vICEhISBUT0RPOiB0aHJvdyBhbiBlcnJvciBoZXJlIGluIHNvbWUgY2lyY3Vtc3RhbmNlcwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgcmVxdWVzdGVkIGxvY2FsaXphdGlvbnMgYXJlIHByZXNlbnQgZm9yIHRoaXMgc3RyaW5nCi0gICAgICAgIGlmIChtQnVuZGxlLT5nZXRDb25maWd1cmF0aW9ucygpICE9IE5VTEwgJiYgbUJ1bmRsZS0+Z2V0UmVxdWlyZUxvY2FsaXphdGlvbigpKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBhbGxDb25maWdzID0gbUJ1bmRsZS0+Z2V0Q29uZmlndXJhdGlvbnMoKTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN0YXJ0ID0gYWxsQ29uZmlnczsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbW1hOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nOCBjb25maWc7Ci0gICAgICAgICAgICAgICAgY29tbWEgPSBzdHJjaHIoc3RhcnQsICcsJyk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbW1hICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNldFRvKHN0YXJ0LCBjb21tYSAtIHN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBjb21tYSArIDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNldFRvKHN0YXJ0KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBkb24ndCBib3RoZXIgd2l0aCB0aGUgcHNldWRvbG9jYWxlICJ6el9aWiIKLSAgICAgICAgICAgICAgICBpZiAoY29uZmlnICE9ICJ6el9aWiIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ1NldC5maW5kKGNvbmZpZykgPT0gY29uZmlnU2V0LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBva2F5LCBubyBzcGVjaWZpYyBsb2NhbGl6YXRpb24gZm91bmQuICBpdCdzIHBvc3NpYmxlIHRoYXQgd2UgYXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJpbmcgYSBzcGVjaWZpYyByZWdpb25hbCBsb2NhbGl6YXRpb24gW2UuZy4gZGVfREVdIGJ1dCB0aGVyZSBpcyBhbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXZhaWxhYmxlIHN0cmluZyBpbiB0aGUgZ2VuZXJpYyBsYW5ndWFnZSBsb2NhbGl6YXRpb24gW2UuZy4gZGVdOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc2lkZXIgdGhhdCBzdHJpbmcgdG8gaGF2ZSBmdWxmaWxsZWQgdGhlIGxvY2FsaXphdGlvbiByZXF1aXJlbWVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggcmVnaW9uKGNvbmZpZy5zdHJpbmcoKSwgMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnU2V0LmZpbmQocmVnaW9uKSA9PSBjb25maWdTZXQuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnU2V0LmNvdW50KGRlZmF1bHRMb2NhbGUpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICJhYXB0OiB3YXJuaW5nOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIioqKiogc3RyaW5nICclcycgaGFzIG5vIGRlZmF1bHQgb3IgcmVxdWlyZWQgbG9jYWxpemF0aW9uICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yICclcycgaW4gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChuYW1lSXRlci0+Zmlyc3QpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQnVuZGxlLT5nZXRSZXNvdXJjZVNvdXJjZURpcnMoKVswXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICB9IHdoaWxlIChjb21tYSAhPSBOVUxMKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OmZsYXR0ZW4oQnVuZGxlKiBidW5kbGUsIGNvbnN0IHNwPEFhcHRGaWxlPiYgZGVzdCkKLXsKLSAgICBSZXNvdXJjZUZpbHRlciBmaWx0ZXI7Ci0gICAgc3RhdHVzX3QgZXJyID0gZmlsdGVyLnBhcnNlKGJ1bmRsZS0+Z2V0Q29uZmlndXJhdGlvbnMoKSk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGNvbnN0IENvbmZpZ0Rlc2NyaXB0aW9uIG51bGxDb25maWc7Ci0KLSAgICBjb25zdCBzaXplX3QgTiA9IG1PcmRlcmVkUGFja2FnZXMuc2l6ZSgpOwotICAgIHNpemVfdCBwaTsKLQotICAgIGNvbnN0IHN0YXRpYyBTdHJpbmcxNiBtaXBtYXAxNigibWlwbWFwIik7Ci0KLSAgICBib29sIHVzZVVURjggPSAhYnVuZGxlLT5nZXRVVEYxNlN0cmluZ3NPcHRpb24oKTsKLQotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgZGF0YSwgY29sbGVjdGluZyBhbGwgdmFsdWVzIChzdHJpbmdzLAotICAgIC8vIHJlZmVyZW5jZXMsIGV0YykuCi0gICAgU3RyaW5nUG9vbCB2YWx1ZVN0cmluZ3ModXNlVVRGOCk7Ci0gICAgVmVjdG9yPHNwPEVudHJ5PiA+IGFsbEVudHJpZXM7Ci0gICAgZm9yIChwaT0wOyBwaTxOOyBwaSsrKSB7Ci0gICAgICAgIHNwPFBhY2thZ2U+IHAgPSBtT3JkZXJlZFBhY2thZ2VzLml0ZW1BdChwaSk7Ci0gICAgICAgIGlmIChwLT5nZXRUeXBlcygpLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAvLyBFbXB0eSwgc2tpcCEKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nUG9vbCB0eXBlU3RyaW5ncyh1c2VVVEY4KTsKLSAgICAgICAgU3RyaW5nUG9vbCBrZXlTdHJpbmdzKHVzZVVURjgpOwotCi0gICAgICAgIGNvbnN0IHNpemVfdCBOID0gcC0+Z2V0T3JkZXJlZFR5cGVzKCkuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCB0aT0wOyB0aTxOOyB0aSsrKSB7Ci0gICAgICAgICAgICBzcDxUeXBlPiB0ID0gcC0+Z2V0T3JkZXJlZFR5cGVzKCkuaXRlbUF0KHRpKTsKLSAgICAgICAgICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5ncy5hZGQoU3RyaW5nMTYoIjxlbXB0eT4iKSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYgdHlwZU5hbWUodC0+Z2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHR5cGVTdHJpbmdzLmFkZCh0eXBlTmFtZSwgZmFsc2UpOwotCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgaGFjayB0byB0d2VhayB0aGUgc29ydGluZyBvcmRlciBvZiB0aGUgZmluYWwgc3RyaW5ncywKLSAgICAgICAgICAgIC8vIHRvIHB1dCBzdHVmZiB0aGF0IGlzIGdlbmVyYWxseSBub3QgbGFuZ3VhZ2Utc3BlY2lmaWMgZmlyc3QuCi0gICAgICAgICAgICBTdHJpbmc4IGNvbmZpZ1R5cGVOYW1lKHR5cGVOYW1lKTsKLSAgICAgICAgICAgIGlmIChjb25maWdUeXBlTmFtZSA9PSAiZHJhd2FibGUiIHx8IGNvbmZpZ1R5cGVOYW1lID09ICJsYXlvdXQiCi0gICAgICAgICAgICAgICAgICAgIHx8IGNvbmZpZ1R5cGVOYW1lID09ICJjb2xvciIgfHwgY29uZmlnVHlwZU5hbWUgPT0gImFuaW0iCi0gICAgICAgICAgICAgICAgICAgIHx8IGNvbmZpZ1R5cGVOYW1lID09ICJpbnRlcnBvbGF0b3IiIHx8IGNvbmZpZ1R5cGVOYW1lID09ICJhbmltYXRvciIKLSAgICAgICAgICAgICAgICAgICAgfHwgY29uZmlnVHlwZU5hbWUgPT0gInhtbCIgfHwgY29uZmlnVHlwZU5hbWUgPT0gIm1lbnUiCi0gICAgICAgICAgICAgICAgICAgIHx8IGNvbmZpZ1R5cGVOYW1lID09ICJtaXBtYXAiIHx8IGNvbmZpZ1R5cGVOYW1lID09ICJyYXciKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnVHlwZU5hbWUgPSAiMWNvbXBsZXgiOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25maWdUeXBlTmFtZSA9ICIydmFsdWUiOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBib29sIGZpbHRlcmFibGUgPSAodHlwZU5hbWUgIT0gbWlwbWFwMTYpOwotCi0gICAgICAgICAgICBjb25zdCBzaXplX3QgTiA9IHQtPmdldE9yZGVyZWRDb25maWdzKCkuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgY2k9MDsgY2k8TjsgY2krKykgewotICAgICAgICAgICAgICAgIHNwPENvbmZpZ0xpc3Q+IGMgPSB0LT5nZXRPcmRlcmVkQ29uZmlncygpLml0ZW1BdChjaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBjLT5nZXRFbnRyaWVzKCkuc2l6ZSgpOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGVpPTA7IGVpPE47IGVpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uZmlnRGVzY3JpcHRpb24gY29uZmlnID0gYy0+Z2V0RW50cmllcygpLmtleUF0KGVpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmFibGUgJiYgIWZpbHRlci5tYXRjaChjb25maWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzcDxFbnRyeT4gZSA9IGMtPmdldEVudHJpZXMoKS52YWx1ZUF0KGVpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZS0+c2V0TmFtZUluZGV4KGtleVN0cmluZ3MuYWRkKGUtPmdldE5hbWUoKSwgdHJ1ZSkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgZW50cnkgaGFzIG5vIHZhbHVlcyBmb3Igb3RoZXIgY29uZmlncywKLSAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGlzIHRoZSBkZWZhdWx0IGNvbmZpZywgdGhlbiBpdCBpcyBzcGVjaWFsLiAgT3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIHdlIHdhbnQgdG8gYWRkIGl0IHdpdGggdGhlIGNvbmZpZyBpbmZvLgotICAgICAgICAgICAgICAgICAgICBDb25maWdEZXNjcmlwdGlvbiogdmFsdWVDb25maWcgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpZiAoTiAhPSAxIHx8IGNvbmZpZyA9PSBudWxsQ29uZmlnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUNvbmZpZyA9ICZjb25maWc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBlcnIgPSBlLT5wcmVwYXJlRmxhdHRlbigmdmFsdWVTdHJpbmdzLCB0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25maWdUeXBlTmFtZSwgJmNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYWxsRW50cmllcy5hZGQoZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcC0+c2V0VHlwZVN0cmluZ3ModHlwZVN0cmluZ3MuY3JlYXRlU3RyaW5nQmxvY2soKSk7Ci0gICAgICAgIHAtPnNldEtleVN0cmluZ3Moa2V5U3RyaW5ncy5jcmVhdGVTdHJpbmdCbG9jaygpKTsKLSAgICB9Ci0KLSAgICBpZiAoYnVuZGxlLT5nZXRPdXRwdXRBUEtGaWxlKCkgIT0gTlVMTCkgewotICAgICAgICAvLyBOb3cgd2Ugd2FudCB0byBzb3J0IHRoZSB2YWx1ZSBzdHJpbmdzIGZvciBiZXR0ZXIgbG9jYWxpdHkuICBUaGlzIHdpbGwKLSAgICAgICAgLy8gY2F1c2UgdGhlIHBvc2l0aW9ucyBvZiB0aGUgc3RyaW5ncyB0byBjaGFuZ2UsIHNvIHdlIG5lZWQgdG8gZ28gYmFjawotICAgICAgICAvLyB0aHJvdWdoIG91dCByZXNvdXJjZSBlbnRyaWVzIGFuZCB1cGRhdGUgdGhlbSBhY2NvcmRpbmdseS4gIE9ubHkgbmVlZAotICAgICAgICAvLyB0byBkbyB0aGlzIGlmIGFjdHVhbGx5IHdyaXRpbmcgdGhlIG91dHB1dCBmaWxlLgotICAgICAgICB2YWx1ZVN0cmluZ3Muc29ydEJ5Q29uZmlnKCk7Ci0gICAgICAgIGZvciAocGk9MDsgcGk8YWxsRW50cmllcy5zaXplKCk7IHBpKyspIHsKLSAgICAgICAgICAgIGFsbEVudHJpZXNbcGldLT5yZW1hcFN0cmluZ1ZhbHVlKCZ2YWx1ZVN0cmluZ3MpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3NpemVfdCBzdHJBbXQgPSAwOwotICAgIAotICAgIC8vIE5vdyBidWlsZCB0aGUgYXJyYXkgb2YgcGFja2FnZSBjaHVua3MuCi0gICAgVmVjdG9yPHNwPEFhcHRGaWxlPiA+IGZsYXRQYWNrYWdlczsKLSAgICBmb3IgKHBpPTA7IHBpPE47IHBpKyspIHsKLSAgICAgICAgc3A8UGFja2FnZT4gcCA9IG1PcmRlcmVkUGFja2FnZXMuaXRlbUF0KHBpKTsKLSAgICAgICAgaWYgKHAtPmdldFR5cGVzKCkuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIC8vIEVtcHR5LCBza2lwIQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBzaXplX3QgTiA9IHAtPmdldFR5cGVTdHJpbmdzKCkuc2l6ZSgpOwotCi0gICAgICAgIGNvbnN0IHNpemVfdCBiYXNlU2l6ZSA9IHNpemVvZihSZXNUYWJsZV9wYWNrYWdlKTsKLQotICAgICAgICAvLyBTdGFydCB0aGUgcGFja2FnZSBkYXRhLgotICAgICAgICBzcDxBYXB0RmlsZT4gZGF0YSA9IG5ldyBBYXB0RmlsZShTdHJpbmc4KCksIEFhcHRHcm91cEVudHJ5KCksIFN0cmluZzgoKSk7Ci0gICAgICAgIFJlc1RhYmxlX3BhY2thZ2UqIGhlYWRlciA9IChSZXNUYWJsZV9wYWNrYWdlKilkYXRhLT5lZGl0RGF0YShiYXNlU2l6ZSk7Ci0gICAgICAgIGlmIChoZWFkZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogb3V0IG9mIG1lbW9yeSBjcmVhdGluZyBSZXNUYWJsZV9wYWNrYWdlXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KGhlYWRlciwgMCwgc2l6ZW9mKCpoZWFkZXIpKTsKLSAgICAgICAgaGVhZGVyLT5oZWFkZXIudHlwZSA9IGh0b2RzKFJFU19UQUJMRV9QQUNLQUdFX1RZUEUpOwotICAgICAgICBoZWFkZXItPmhlYWRlci5oZWFkZXJTaXplID0gaHRvZHMoc2l6ZW9mKCpoZWFkZXIpKTsKLSAgICAgICAgaGVhZGVyLT5pZCA9IGh0b2RsKHAtPmdldEFzc2lnbmVkSWQoKSk7Ci0gICAgICAgIHN0cmNweTE2X2h0b2QoaGVhZGVyLT5uYW1lLCBwLT5nZXROYW1lKCkuc3RyaW5nKCkpOwotCi0gICAgICAgIC8vIFdyaXRlIHRoZSBzdHJpbmcgYmxvY2tzLgotICAgICAgICBjb25zdCBzaXplX3QgdHlwZVN0cmluZ3NTdGFydCA9IGRhdGEtPmdldFNpemUoKTsKLSAgICAgICAgc3A8QWFwdEZpbGU+IHN0ckZpbGUgPSBwLT5nZXRUeXBlU3RyaW5nc0RhdGEoKTsKLSAgICAgICAgc3NpemVfdCBhbXQgPSBkYXRhLT53cml0ZURhdGEoc3RyRmlsZS0+Z2V0RGF0YSgpLCBzdHJGaWxlLT5nZXRTaXplKCkpOwotICAgICAgICAjaWYgUFJJTlRfU1RSSU5HX01FVFJJQ1MKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIqKioqIHR5cGUgc3RyaW5nczogJWRcbiIsIGFtdCk7Ci0gICAgICAgICNlbmRpZgotICAgICAgICBzdHJBbXQgKz0gYW10OwotICAgICAgICBpZiAoYW10IDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIGFtdDsKLSAgICAgICAgfQotICAgICAgICBjb25zdCBzaXplX3Qga2V5U3RyaW5nc1N0YXJ0ID0gZGF0YS0+Z2V0U2l6ZSgpOwotICAgICAgICBzdHJGaWxlID0gcC0+Z2V0S2V5U3RyaW5nc0RhdGEoKTsKLSAgICAgICAgYW10ID0gZGF0YS0+d3JpdGVEYXRhKHN0ckZpbGUtPmdldERhdGEoKSwgc3RyRmlsZS0+Z2V0U2l6ZSgpKTsKLSAgICAgICAgI2lmIFBSSU5UX1NUUklOR19NRVRSSUNTCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiKioqKiBrZXkgc3RyaW5nczogJWRcbiIsIGFtdCk7Ci0gICAgICAgICNlbmRpZgotICAgICAgICBzdHJBbXQgKz0gYW10OwotICAgICAgICBpZiAoYW10IDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIGFtdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEJ1aWxkIHRoZSB0eXBlIGNodW5rcyBpbnNpZGUgb2YgdGhpcyBwYWNrYWdlLgotICAgICAgICBmb3IgKHNpemVfdCB0aT0wOyB0aTxOOyB0aSsrKSB7Ci0gICAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGVtIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSB0eXBlIHN0cmluZyBibG9jay4KLSAgICAgICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgICAgICBTdHJpbmcxNiB0eXBlTmFtZShwLT5nZXRUeXBlU3RyaW5ncygpLnN0cmluZ0F0KHRpLCAmbGVuKSk7Ci0gICAgICAgICAgICBzcDxUeXBlPiB0ID0gcC0+Z2V0VHlwZXMoKS52YWx1ZUZvcih0eXBlTmFtZSk7Ci0gICAgICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKHQgPT0gTlVMTCAmJiB0eXBlTmFtZSAhPSBTdHJpbmcxNigiPGVtcHR5PiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHlwZSBuYW1lICVzIG5vdCBmb3VuZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgodHlwZU5hbWUpLnN0cmluZygpKTsKLQotICAgICAgICAgICAgY29uc3QgYm9vbCBmaWx0ZXJhYmxlID0gKHR5cGVOYW1lICE9IG1pcG1hcDE2KTsKLQotICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSB0ICE9IE5VTEwgPyB0LT5nZXRPcmRlcmVkQ29uZmlncygpLnNpemUoKSA6IDA7Ci0KLSAgICAgICAgICAgIC8vIFVudGlsIGEgbm9uLU5PX0VOVFJZIHZhbHVlIGhhcyBiZWVuIHdyaXR0ZW4gZm9yIGEgcmVzb3VyY2UsCi0gICAgICAgICAgICAvLyB0aGF0IHJlc291cmNlIGlzIGludmFsaWQ7IHZhbGlkUmVzb3VyY2VzW2ldIHJlcHJlc2VudHMKLSAgICAgICAgICAgIC8vIHRoZSBpdGVtIGF0IHQtPmdldE9yZGVyZWRDb25maWdzKCkuaXRlbUF0KGkpLgotICAgICAgICAgICAgVmVjdG9yPGJvb2w+IHZhbGlkUmVzb3VyY2VzOwotICAgICAgICAgICAgdmFsaWRSZXNvdXJjZXMuaW5zZXJ0QXQoZmFsc2UsIDAsIE4pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGaXJzdCB3cml0ZSB0aGUgdHlwZVNwZWMgY2h1bmssIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQKLSAgICAgICAgICAgIC8vIGVhY2ggcmVzb3VyY2UgZW50cnkgaW4gdGhpcyB0eXBlLgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCB0eXBlU3BlY1NpemUgPSBzaXplb2YoUmVzVGFibGVfdHlwZVNwZWMpICsgc2l6ZW9mKHVpbnQzMl90KSpOOwotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCB0eXBlU3BlY1N0YXJ0ID0gZGF0YS0+Z2V0U2l6ZSgpOwotICAgICAgICAgICAgICAgIFJlc1RhYmxlX3R5cGVTcGVjKiB0c0hlYWRlciA9IChSZXNUYWJsZV90eXBlU3BlYyopCi0gICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QqKWRhdGEtPmVkaXREYXRhKHR5cGVTcGVjU3RhcnQrdHlwZVNwZWNTaXplKSkgKyB0eXBlU3BlY1N0YXJ0KTsKLSAgICAgICAgICAgICAgICBpZiAodHNIZWFkZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBvdXQgb2YgbWVtb3J5IGNyZWF0aW5nIFJlc1RhYmxlX3R5cGVTcGVjXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtc2V0KHRzSGVhZGVyLCAwLCBzaXplb2YoKnRzSGVhZGVyKSk7Ci0gICAgICAgICAgICAgICAgdHNIZWFkZXItPmhlYWRlci50eXBlID0gaHRvZHMoUkVTX1RBQkxFX1RZUEVfU1BFQ19UWVBFKTsKLSAgICAgICAgICAgICAgICB0c0hlYWRlci0+aGVhZGVyLmhlYWRlclNpemUgPSBodG9kcyhzaXplb2YoKnRzSGVhZGVyKSk7Ci0gICAgICAgICAgICAgICAgdHNIZWFkZXItPmhlYWRlci5zaXplID0gaHRvZGwodHlwZVNwZWNTaXplKTsKLSAgICAgICAgICAgICAgICB0c0hlYWRlci0+aWQgPSB0aSsxOwotICAgICAgICAgICAgICAgIHRzSGVhZGVyLT5lbnRyeUNvdW50ID0gaHRvZGwoTik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdWludDMyX3QqIHR5cGVTcGVjRmxhZ3MgPSAodWludDMyX3QqKQotICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KilkYXRhLT5lZGl0RGF0YSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgKyB0eXBlU3BlY1N0YXJ0ICsgc2l6ZW9mKFJlc1RhYmxlX3R5cGVTcGVjKSk7Ci0gICAgICAgICAgICAgICAgbWVtc2V0KHR5cGVTcGVjRmxhZ3MsIDAsIHNpemVvZih1aW50MzJfdCkqTik7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBlaT0wOyBlaTxOOyBlaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwPENvbmZpZ0xpc3Q+IGNsID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5pdGVtQXQoZWkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2wtPmdldFB1YmxpYygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlU3BlY0ZsYWdzW2VpXSB8PSBodG9kbChSZXNUYWJsZV90eXBlU3BlYzo6U1BFQ19QVUJMSUMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBDTiA9IGNsLT5nZXRFbnRyaWVzKCkuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjaT0wOyBjaTxDTjsgY2krKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmFibGUgJiYgIWZpbHRlci5tYXRjaChjbC0+Z2V0RW50cmllcygpLmtleUF0KGNpKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGNqPWNpKzE7IGNqPENOOyBjaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmFibGUgJiYgIWZpbHRlci5tYXRjaChjbC0+Z2V0RW50cmllcygpLmtleUF0KGNqKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVTcGVjRmxhZ3NbZWldIHw9IGh0b2RsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+Z2V0RW50cmllcygpLmtleUF0KGNpKS5kaWZmKGNsLT5nZXRFbnRyaWVzKCkua2V5QXQoY2opKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gd3JpdGUgb25lIHR5cGUgY2h1bmsgZm9yIGVhY2ggY29uZmlndXJhdGlvbiBmb3IKLSAgICAgICAgICAgIC8vIHdoaWNoIHdlIGhhdmUgZW50cmllcyBpbiB0aGlzIHR5cGUuCi0gICAgICAgICAgICBjb25zdCBzaXplX3QgTkMgPSB0LT5nZXRVbmlxdWVDb25maWdzKCkuc2l6ZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBzaXplX3QgdHlwZVNpemUgPSBzaXplb2YoUmVzVGFibGVfdHlwZSkgKyBzaXplb2YodWludDMyX3QpKk47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGNpPTA7IGNpPE5DOyBjaSsrKSB7Ci0gICAgICAgICAgICAgICAgQ29uZmlnRGVzY3JpcHRpb24gY29uZmlnID0gdC0+Z2V0VW5pcXVlQ29uZmlncygpLml0ZW1BdChjaSk7Ci0KLSAgICAgICAgICAgICAgICBOT0lTWShwcmludGYoIldyaXRpbmcgY29uZmlnICVkIGNvbmZpZzogaW1zaTolZC8lZCBsYW5nOiVjJWMgY250OiVjJWMgIgotICAgICAgICAgICAgICAgICAgICAgIm9yaWVuOiVkIHVpOiVkIHRvdWNoOiVkIGRlbnNpdHk6JWQga2V5OiVkIGlucDolZCBuYXY6JWQgc3o6JWR4JWQgIgotICAgICAgICAgICAgICAgICAgICAgInN3JWRkcCB3JWRkcCBoJWRkcCBkaXI6JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgdGkrMSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcubWNjLCBjb25maWcubW5jLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5sYW5ndWFnZVswXSA/IGNvbmZpZy5sYW5ndWFnZVswXSA6ICctJywKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcubGFuZ3VhZ2VbMV0gPyBjb25maWcubGFuZ3VhZ2VbMV0gOiAnLScsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmNvdW50cnlbMF0gPyBjb25maWcuY291bnRyeVswXSA6ICctJywKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcuY291bnRyeVsxXSA/IGNvbmZpZy5jb3VudHJ5WzFdIDogJy0nLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5vcmllbnRhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcudWlNb2RlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy50b3VjaHNjcmVlbiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcuZGVuc2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcua2V5Ym9hcmQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmlucHV0RmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLm5hdmlnYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNjcmVlbldpZHRoLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zY3JlZW5IZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNtYWxsZXN0U2NyZWVuV2lkdGhEcCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcuc2NyZWVuV2lkdGhEcCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWcuc2NyZWVuSGVpZ2h0RHAsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmxheW91dERpcmVjdGlvbikpOwotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJhYmxlICYmICFmaWx0ZXIubWF0Y2goY29uZmlnKSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHR5cGVTdGFydCA9IGRhdGEtPmdldFNpemUoKTsKLQotICAgICAgICAgICAgICAgIFJlc1RhYmxlX3R5cGUqIHRIZWFkZXIgPSAoUmVzVGFibGVfdHlwZSopCi0gICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QqKWRhdGEtPmVkaXREYXRhKHR5cGVTdGFydCt0eXBlU2l6ZSkpICsgdHlwZVN0YXJ0KTsKLSAgICAgICAgICAgICAgICBpZiAodEhlYWRlciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG91dCBvZiBtZW1vcnkgY3JlYXRpbmcgUmVzVGFibGVfdHlwZVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbWVtc2V0KHRIZWFkZXIsIDAsIHNpemVvZigqdEhlYWRlcikpOwotICAgICAgICAgICAgICAgIHRIZWFkZXItPmhlYWRlci50eXBlID0gaHRvZHMoUkVTX1RBQkxFX1RZUEVfVFlQRSk7Ci0gICAgICAgICAgICAgICAgdEhlYWRlci0+aGVhZGVyLmhlYWRlclNpemUgPSBodG9kcyhzaXplb2YoKnRIZWFkZXIpKTsKLSAgICAgICAgICAgICAgICB0SGVhZGVyLT5pZCA9IHRpKzE7Ci0gICAgICAgICAgICAgICAgdEhlYWRlci0+ZW50cnlDb3VudCA9IGh0b2RsKE4pOwotICAgICAgICAgICAgICAgIHRIZWFkZXItPmVudHJpZXNTdGFydCA9IGh0b2RsKHR5cGVTaXplKTsKLSAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcgPSBjb25maWc7Ci0gICAgICAgICAgICAgICAgTk9JU1kocHJpbnRmKCJXcml0aW5nIHR5cGUgJWQgY29uZmlnOiBpbXNpOiVkLyVkIGxhbmc6JWMlYyBjbnQ6JWMlYyAiCi0gICAgICAgICAgICAgICAgICAgICAib3JpZW46JWQgdWk6JWQgdG91Y2g6JWQgZGVuc2l0eTolZCBrZXk6JWQgaW5wOiVkIG5hdjolZCBzejolZHglZCAiCi0gICAgICAgICAgICAgICAgICAgICAic3clZGRwIHclZGRwIGglZGRwIGRpcjolZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICB0aSsxLAotICAgICAgICAgICAgICAgICAgICAgIHRIZWFkZXItPmNvbmZpZy5tY2MsIHRIZWFkZXItPmNvbmZpZy5tbmMsCi0gICAgICAgICAgICAgICAgICAgICAgdEhlYWRlci0+Y29uZmlnLmxhbmd1YWdlWzBdID8gdEhlYWRlci0+Y29uZmlnLmxhbmd1YWdlWzBdIDogJy0nLAotICAgICAgICAgICAgICAgICAgICAgIHRIZWFkZXItPmNvbmZpZy5sYW5ndWFnZVsxXSA/IHRIZWFkZXItPmNvbmZpZy5sYW5ndWFnZVsxXSA6ICctJywKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcuY291bnRyeVswXSA/IHRIZWFkZXItPmNvbmZpZy5jb3VudHJ5WzBdIDogJy0nLAotICAgICAgICAgICAgICAgICAgICAgIHRIZWFkZXItPmNvbmZpZy5jb3VudHJ5WzFdID8gdEhlYWRlci0+Y29uZmlnLmNvdW50cnlbMV0gOiAnLScsCi0gICAgICAgICAgICAgICAgICAgICAgdEhlYWRlci0+Y29uZmlnLm9yaWVudGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIHRIZWFkZXItPmNvbmZpZy51aU1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgdEhlYWRlci0+Y29uZmlnLnRvdWNoc2NyZWVuLAotICAgICAgICAgICAgICAgICAgICAgIHRIZWFkZXItPmNvbmZpZy5kZW5zaXR5LAotICAgICAgICAgICAgICAgICAgICAgIHRIZWFkZXItPmNvbmZpZy5rZXlib2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcuaW5wdXRGbGFncywKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcubmF2aWdhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcuc2NyZWVuV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgdEhlYWRlci0+Y29uZmlnLnNjcmVlbkhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcuc21hbGxlc3RTY3JlZW5XaWR0aERwLAotICAgICAgICAgICAgICAgICAgICAgIHRIZWFkZXItPmNvbmZpZy5zY3JlZW5XaWR0aERwLAotICAgICAgICAgICAgICAgICAgICAgIHRIZWFkZXItPmNvbmZpZy5zY3JlZW5IZWlnaHREcCwKLSAgICAgICAgICAgICAgICAgICAgICB0SGVhZGVyLT5jb25maWcubGF5b3V0RGlyZWN0aW9uKSk7Ci0gICAgICAgICAgICAgICAgdEhlYWRlci0+Y29uZmlnLnN3YXBIdG9EKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBCdWlsZCB0aGUgZW50cmllcyBpbnNpZGUgb2YgdGhpcyB0eXBlLgotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGVpPTA7IGVpPE47IGVpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc3A8Q29uZmlnTGlzdD4gY2wgPSB0LT5nZXRPcmRlcmVkQ29uZmlncygpLml0ZW1BdChlaSk7Ci0gICAgICAgICAgICAgICAgICAgIHNwPEVudHJ5PiBlID0gY2wtPmdldEVudHJpZXMoKS52YWx1ZUZvcihjb25maWcpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgb2Zmc2V0IGZvciB0aGlzIGVudHJ5IGluIGl0cyB0eXBlLgotICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogaW5kZXggPSAodWludDMyX3QqKQotICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCopZGF0YS0+ZWRpdERhdGEoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHR5cGVTdGFydCArIHNpemVvZihSZXNUYWJsZV90eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4W2VpXSA9IGh0b2RsKGRhdGEtPmdldFNpemUoKS10eXBlU3RhcnQtdHlwZVNpemUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGVudHJ5LgotICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBhbXQgPSBlLT5mbGF0dGVuKGJ1bmRsZSwgZGF0YSwgY2wtPmdldFB1YmxpYygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFtdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkUmVzb3VyY2VzLmVkaXRJdGVtQXQoZWkpID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4W2VpXSA9IGh0b2RsKFJlc1RhYmxlX3R5cGU6Ok5PX0VOVFJZKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIHR5cGUgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgdEhlYWRlciA9IChSZXNUYWJsZV90eXBlKikKLSAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCopZGF0YS0+ZWRpdERhdGEoKSkgKyB0eXBlU3RhcnQpOwotICAgICAgICAgICAgICAgIHRIZWFkZXItPmhlYWRlci5zaXplID0gaHRvZGwoZGF0YS0+Z2V0U2l6ZSgpLXR5cGVTdGFydCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZFJlc291cmNlc1tpXSkgewotICAgICAgICAgICAgICAgICAgICBzcDxDb25maWdMaXN0PiBjID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5pdGVtQXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAid2FybmluZzogbm8gZW50cmllcyB3cml0dGVuIGZvciAlcy8lc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHR5cGVOYW1lKS5zdHJpbmcoKSwgU3RyaW5nOChjLT5nZXROYW1lKCkpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGaWxsIGluIHRoZSByZXN0IG9mIHRoZSBwYWNrYWdlIGluZm9ybWF0aW9uLgotICAgICAgICBoZWFkZXIgPSAoUmVzVGFibGVfcGFja2FnZSopZGF0YS0+ZWRpdERhdGEoKTsKLSAgICAgICAgaGVhZGVyLT5oZWFkZXIuc2l6ZSA9IGh0b2RsKGRhdGEtPmdldFNpemUoKSk7Ci0gICAgICAgIGhlYWRlci0+dHlwZVN0cmluZ3MgPSBodG9kbCh0eXBlU3RyaW5nc1N0YXJ0KTsKLSAgICAgICAgaGVhZGVyLT5sYXN0UHVibGljVHlwZSA9IGh0b2RsKHAtPmdldFR5cGVTdHJpbmdzKCkuc2l6ZSgpKTsKLSAgICAgICAgaGVhZGVyLT5rZXlTdHJpbmdzID0gaHRvZGwoa2V5U3RyaW5nc1N0YXJ0KTsKLSAgICAgICAgaGVhZGVyLT5sYXN0UHVibGljS2V5ID0gaHRvZGwocC0+Z2V0S2V5U3RyaW5ncygpLnNpemUoKSk7Ci0KLSAgICAgICAgZmxhdFBhY2thZ2VzLmFkZChkYXRhKTsKLSAgICB9Ci0KLSAgICAvLyBBbmQgbm93IHdyaXRlIG91dCB0aGUgZmluYWwgY2h1bmtzLgotICAgIGNvbnN0IHNpemVfdCBkYXRhU3RhcnQgPSBkZXN0LT5nZXRTaXplKCk7Ci0KLSAgICB7Ci0gICAgICAgIC8vIGJsYWgKLSAgICAgICAgUmVzVGFibGVfaGVhZGVyIGhlYWRlcjsKLSAgICAgICAgbWVtc2V0KCZoZWFkZXIsIDAsIHNpemVvZihoZWFkZXIpKTsKLSAgICAgICAgaGVhZGVyLmhlYWRlci50eXBlID0gaHRvZHMoUkVTX1RBQkxFX1RZUEUpOwotICAgICAgICBoZWFkZXIuaGVhZGVyLmhlYWRlclNpemUgPSBodG9kcyhzaXplb2YoaGVhZGVyKSk7Ci0gICAgICAgIGhlYWRlci5wYWNrYWdlQ291bnQgPSBodG9kbChmbGF0UGFja2FnZXMuc2l6ZSgpKTsKLSAgICAgICAgc3RhdHVzX3QgZXJyID0gZGVzdC0+d3JpdGVEYXRhKCZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogb3V0IG9mIG1lbW9yeSBjcmVhdGluZyBSZXNUYWJsZV9oZWFkZXJcbiIpOwotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzc2l6ZV90IHN0clN0YXJ0ID0gZGVzdC0+Z2V0U2l6ZSgpOwotICAgIGVyciA9IHZhbHVlU3RyaW5ncy53cml0ZVN0cmluZ0Jsb2NrKGRlc3QpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBzc2l6ZV90IGFtdCA9IChkZXN0LT5nZXRTaXplKCktc3RyU3RhcnQpOwotICAgIHN0ckFtdCArPSBhbXQ7Ci0gICAgI2lmIFBSSU5UX1NUUklOR19NRVRSSUNTCi0gICAgZnByaW50ZihzdGRlcnIsICIqKioqIHZhbHVlIHN0cmluZ3M6ICVkXG4iLCBhbXQpOwotICAgIGZwcmludGYoc3RkZXJyLCAiKioqKiB0b3RhbCBzdHJpbmdzOiAlZFxuIiwgc3RyQW10KTsKLSAgICAjZW5kaWYKLSAgICAKLSAgICBmb3IgKHBpPTA7IHBpPGZsYXRQYWNrYWdlcy5zaXplKCk7IHBpKyspIHsKLSAgICAgICAgZXJyID0gZGVzdC0+d3JpdGVEYXRhKGZsYXRQYWNrYWdlc1twaV0tPmdldERhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXRQYWNrYWdlc1twaV0tPmdldFNpemUoKSk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG91dCBvZiBtZW1vcnkgY3JlYXRpbmcgcGFja2FnZSBjaHVuayBmb3IgUmVzVGFibGVfaGVhZGVyXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZXNUYWJsZV9oZWFkZXIqIGhlYWRlciA9IChSZXNUYWJsZV9oZWFkZXIqKQotICAgICAgICAoKCh1aW50OF90KilkZXN0LT5nZXREYXRhKCkpICsgZGF0YVN0YXJ0KTsKLSAgICBoZWFkZXItPmhlYWRlci5zaXplID0gaHRvZGwoZGVzdC0+Z2V0U2l6ZSgpIC0gZGF0YVN0YXJ0KTsKLQotICAgIE5PSVNZKGFvdXQgPDwgIlJlc291cmNlIHRhYmxlOiIKLSAgICAgICAgICA8PCBIZXhEdW1wKGRlc3QtPmdldERhdGEoKSwgZGVzdC0+Z2V0U2l6ZSgpKSA8PCBlbmRsKTsKLQotICAgICNpZiBQUklOVF9TVFJJTkdfTUVUUklDUwotICAgIGZwcmludGYoc3RkZXJyLCAiKioqKiB0b3RhbCByZXNvdXJjZSB0YWJsZSBzaXplOiAlZCAvICVkJSUgc3RyaW5nc1xuIiwKLSAgICAgICAgZGVzdC0+Z2V0U2l6ZSgpLCAoc3RyQW10KjEwMCkvZGVzdC0+Z2V0U2l6ZSgpKTsKLSAgICAjZW5kaWYKLSAgICAKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXZvaWQgUmVzb3VyY2VUYWJsZTo6d3JpdGVQdWJsaWNEZWZpbml0aW9ucyhjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwgRklMRSogZnApCi17Ci0gICAgZnByaW50ZihmcCwKLSAgICAiPCEtLSBUaGlzIGZpbGUgY29udGFpbnMgPHB1YmxpYz4gcmVzb3VyY2UgZGVmaW5pdGlvbnMgZm9yIGFsbFxuIgotICAgICIgICAgIHJlc291cmNlcyB0aGF0IHdlcmUgZ2VuZXJhdGVkIGZyb20gdGhlIHNvdXJjZSBkYXRhLiAtLT5cbiIKLSAgICAiXG4iCi0gICAgIjxyZXNvdXJjZXM+XG4iKTsKLQotICAgIHdyaXRlUHVibGljRGVmaW5pdGlvbnMocGFja2FnZSwgZnAsIHRydWUpOwotICAgIHdyaXRlUHVibGljRGVmaW5pdGlvbnMocGFja2FnZSwgZnAsIGZhbHNlKTsKLQotICAgIGZwcmludGYoZnAsCi0gICAgIlxuIgotICAgICI8L3Jlc291cmNlcz5cbiIpOwotfQotCi12b2lkIFJlc291cmNlVGFibGU6OndyaXRlUHVibGljRGVmaW5pdGlvbnMoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsIEZJTEUqIGZwLCBib29sIHB1YikKLXsKLSAgICBib29sIGRpZEhlYWRlciA9IGZhbHNlOwotCi0gICAgc3A8UGFja2FnZT4gcGtnID0gbVBhY2thZ2VzLnZhbHVlRm9yKHBhY2thZ2UpOwotICAgIGlmIChwa2cgIT0gTlVMTCkgewotICAgICAgICBjb25zdCBzaXplX3QgTlQgPSBwa2ctPmdldE9yZGVyZWRUeXBlcygpLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE5UOyBpKyspIHsKLSAgICAgICAgICAgIHNwPFR5cGU+IHQgPSBwa2ctPmdldE9yZGVyZWRUeXBlcygpLml0ZW1BdChpKTsKLSAgICAgICAgICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBkaWRUeXBlID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOQyA9IHQtPmdldE9yZGVyZWRDb25maWdzKCkuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3Qgaj0wOyBqPE5DOyBqKyspIHsKLSAgICAgICAgICAgICAgICBzcDxDb25maWdMaXN0PiBjID0gdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5pdGVtQXQoaik7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYy0+Z2V0UHVibGljKCkgIT0gcHViKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghZGlkVHlwZSkgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgZGlkVHlwZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghZGlkSGVhZGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwdWIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZnAsIiAgPCEtLSBQVUJMSUMgU0VDVElPTi4gIFRoZXNlIHJlc291cmNlcyBoYXZlIGJlZW4gZGVjbGFyZWQgcHVibGljLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCIgICAgICAgQ2hhbmdlcyB0byB0aGVzZSBkZWZpbml0aW9ucyB3aWxsIGJyZWFrIGJpbmFyeSBjb21wYXRpYmlsaXR5LiAtLT5cblxuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCIgIDwhLS0gUFJJVkFURSBTRUNUSU9OLiAgVGhlc2UgcmVzb3VyY2VzIGhhdmUgbm90IGJlZW4gZGVjbGFyZWQgcHVibGljLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwLCIgICAgICAgWW91IGNhbiBtYWtlIHRoZW0gcHVibGljIG15IG1vdmluZyB0aGVzZSBsaW5lcyBpbnRvIGEgZmlsZSBpbiByZXMvdmFsdWVzLiAtLT5cblxuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGlkSGVhZGVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFwdWIpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IE5FID0gYy0+Z2V0RW50cmllcygpLnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qgaz0wOyBrPE5FOyBrKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZVBvcyYgcG9zID0gYy0+Z2V0RW50cmllcygpLnZhbHVlQXQoayktPmdldFBvcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcy5maWxlICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcCwiICA8IS0tIERlY2xhcmVkIGF0ICVzOiVkIC0tPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcy5maWxlLnN0cmluZygpLCBwb3MubGluZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnByaW50ZihmcCwgIiAgPHB1YmxpYyB0eXBlPVwiJXNcIiBuYW1lPVwiJXNcIiBpZD1cIjB4JTA4eFwiIC8+XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCh0LT5nZXROYW1lKCkpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChjLT5nZXROYW1lKCkpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVzSWQocGtnLCB0LCBjLT5nZXRFbnRyeUluZGV4KCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotUmVzb3VyY2VUYWJsZTo6SXRlbTo6SXRlbShjb25zdCBTb3VyY2VQb3MmIF9zb3VyY2VQb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgX2lzSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmdQb29sOjplbnRyeV9zdHlsZV9zcGFuPiogX3N0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IF9mb3JtYXQpCi0gICAgOiBzb3VyY2VQb3MoX3NvdXJjZVBvcykKLSAgICAsIGlzSWQoX2lzSWQpCi0gICAgLCB2YWx1ZShfdmFsdWUpCi0gICAgLCBmb3JtYXQoX2Zvcm1hdCkKLSAgICAsIGJhZ0tleUlkKDApCi0gICAgLCBldmFsdWF0aW5nKGZhbHNlKQotewotICAgIGlmIChfc3R5bGUpIHsKLSAgICAgICAgc3R5bGUgPSAqX3N0eWxlOwotICAgIH0KLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6RW50cnk6Om1ha2VJdEFCYWcoY29uc3QgU291cmNlUG9zJiBzb3VyY2VQb3MpCi17Ci0gICAgaWYgKG1UeXBlID09IFRZUEVfQkFHKSB7Ci0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICB9Ci0gICAgaWYgKG1UeXBlID09IFRZUEVfVU5LTk9XTikgewotICAgICAgICBtVHlwZSA9IFRZUEVfQkFHOwotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfQotICAgIHNvdXJjZVBvcy5lcnJvcigiUmVzb3VyY2UgZW50cnkgJXMgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgc2luZ2xlIGl0ZW0uXG4iCi0gICAgICAgICAgICAgICAgICAgICIlczolZDogT3JpZ2luYWxseSBkZWZpbmVkIGhlcmUuXG4iLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG1OYW1lKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgbUl0ZW0uc291cmNlUG9zLmZpbGUuc3RyaW5nKCksIG1JdGVtLnNvdXJjZVBvcy5saW5lKTsKLSAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6RW50cnk6OnNldEl0ZW0oY29uc3QgU291cmNlUG9zJiBzb3VyY2VQb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4qIHN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIG92ZXJ3cml0ZSkKLXsKLSAgICBJdGVtIGl0ZW0oc291cmNlUG9zLCBmYWxzZSwgdmFsdWUsIHN0eWxlKTsKLQotICAgIGlmIChtVHlwZSA9PSBUWVBFX0JBRykgewotICAgICAgICBjb25zdCBJdGVtJiBpdGVtKG1CYWcudmFsdWVBdCgwKSk7Ci0gICAgICAgIHNvdXJjZVBvcy5lcnJvcigiUmVzb3VyY2UgZW50cnkgJXMgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgYmFnLlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiVkOiBPcmlnaW5hbGx5IGRlZmluZWQgaGVyZS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG1OYW1lKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc291cmNlUG9zLmZpbGUuc3RyaW5nKCksIGl0ZW0uc291cmNlUG9zLmxpbmUpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgaWYgKCAobVR5cGUgIT0gVFlQRV9VTktOT1dOKSAmJiAob3ZlcndyaXRlID09IGZhbHNlKSApIHsKLSAgICAgICAgc291cmNlUG9zLmVycm9yKCJSZXNvdXJjZSBlbnRyeSAlcyBpcyBhbHJlYWR5IGRlZmluZWQuXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXM6JWQ6IE9yaWdpbmFsbHkgZGVmaW5lZCBoZXJlLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgobU5hbWUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgbUl0ZW0uc291cmNlUG9zLmZpbGUuc3RyaW5nKCksIG1JdGVtLnNvdXJjZVBvcy5saW5lKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgbVR5cGUgPSBUWVBFX0lURU07Ci0gICAgbUl0ZW0gPSBpdGVtOwotICAgIG1JdGVtRm9ybWF0ID0gZm9ybWF0OwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6RW50cnk6OmFkZFRvQmFnKGNvbnN0IFNvdXJjZVBvcyYgc291cmNlUG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBrZXksIGNvbnN0IFN0cmluZzE2JiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4qIHN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVwbGFjZSwgYm9vbCBpc0lkLCBpbnQzMl90IGZvcm1hdCkKLXsKLSAgICBzdGF0dXNfdCBlcnIgPSBtYWtlSXRBQmFnKHNvdXJjZVBvcyk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIEl0ZW0gaXRlbShzb3VyY2VQb3MsIGlzSWQsIHZhbHVlLCBzdHlsZSwgZm9ybWF0KTsKLSAgICAKLSAgICAvLyBYWFggTk9URTogdGhlcmUgaXMgYW4gZXJyb3IgaWYgeW91IHRyeSB0byBoYXZlIGEgYmFnIHdpdGggdHdvIGtleXMsCi0gICAgLy8gb25lIGFuIGF0dHIgYW5kIG9uZSBhbiBpZCwgd2l0aCB0aGUgc2FtZSBuYW1lLiAgTm90IHNvbWV0aGluZyB3ZQotICAgIC8vIGN1cnJlbnRseSBldmVyIGhhdmUgdG8gd29ycnkgYWJvdXQuCi0gICAgc3NpemVfdCBvcmlnS2V5ID0gbUJhZy5pbmRleE9mS2V5KGtleSk7Ci0gICAgaWYgKG9yaWdLZXkgPj0gMCkgewotICAgICAgICBpZiAoIXJlcGxhY2UpIHsKLSAgICAgICAgICAgIGNvbnN0IEl0ZW0mIGl0ZW0obUJhZy52YWx1ZUF0KG9yaWdLZXkpKTsKLSAgICAgICAgICAgIHNvdXJjZVBvcy5lcnJvcigiUmVzb3VyY2UgZW50cnkgJXMgYWxyZWFkeSBoYXMgYmFnIGl0ZW0gJXMuXG4iCi0gICAgICAgICAgICAgICAgICAgICIlczolZDogT3JpZ2luYWxseSBkZWZpbmVkIGhlcmUuXG4iLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG1OYW1lKS5zdHJpbmcoKSwgU3RyaW5nOChrZXkpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICBpdGVtLnNvdXJjZVBvcy5maWxlLnN0cmluZygpLCBpdGVtLnNvdXJjZVBvcy5saW5lKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIC8vcHJpbnRmKCJSZXBsYWNpbmcgJXMgd2l0aCAlc1xuIiwKLSAgICAgICAgLy8gICAgICAgU3RyaW5nOChtQmFnLnZhbHVlRm9yKGtleSkudmFsdWUpLnN0cmluZygpLCBTdHJpbmc4KHZhbHVlKS5zdHJpbmcoKSk7Ci0gICAgICAgIG1CYWcucmVwbGFjZVZhbHVlRm9yKGtleSwgaXRlbSk7Ci0gICAgfQotCi0gICAgbUJhZy5hZGQoa2V5LCBpdGVtKTsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OkVudHJ5OjplbXB0eUJhZyhjb25zdCBTb3VyY2VQb3MmIHNvdXJjZVBvcykKLXsKLSAgICBzdGF0dXNfdCBlcnIgPSBtYWtlSXRBQmFnKHNvdXJjZVBvcyk7Ci0gICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIG1CYWcuY2xlYXIoKTsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OkVudHJ5OjpnZW5lcmF0ZUF0dHJpYnV0ZXMoUmVzb3VyY2VUYWJsZSogdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlKQotewotICAgIGNvbnN0IFN0cmluZzE2IGF0dHIxNigiYXR0ciIpOwotICAgIGNvbnN0IFN0cmluZzE2IGlkMTYoImlkIik7Ci0gICAgY29uc3Qgc2l6ZV90IE4gPSBtQmFnLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZzE2JiBrZXkgPSBtQmFnLmtleUF0KGkpOwotICAgICAgICBjb25zdCBJdGVtJiBpdCA9IG1CYWcudmFsdWVBdChpKTsKLSAgICAgICAgaWYgKGl0LmlzSWQpIHsKLSAgICAgICAgICAgIGlmICghdGFibGUtPmhhc0JhZ09yRW50cnkoa2V5LCAmaWQxNiwgJnBhY2thZ2UpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nMTYgdmFsdWUoImZhbHNlIik7Ci0gICAgICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gdGFibGUtPmFkZEVudHJ5KFNvdXJjZVBvcyhTdHJpbmc4KCI8Z2VuZXJhdGVkPiIpLCAwKSwgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQxNiwga2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghdGFibGUtPmhhc0JhZ09yRW50cnkoa2V5LCAmYXR0cjE2LCAmcGFja2FnZSkpIHsKLQotI2lmIDEKLS8vICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IEJhZyBhdHRyaWJ1dGUgJyVzJyBoYXMgbm90IGJlZW4gZGVmaW5lZC5cbiIsCi0vLyAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoa2V5KS5zdHJpbmcoKSk7Ci0vLyAgICAgICAgICAgICBjb25zdCBJdGVtJiBpdGVtKG1CYWcudmFsdWVBdChpKSk7Ci0vLyAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJlZmVyZW5jZWQgZnJvbSBmaWxlICVzIGxpbmUgJWRcbiIsCi0vLyAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc291cmNlUG9zLmZpbGUuc3RyaW5nKCksIGl0ZW0uc291cmNlUG9zLmxpbmUpOwotLy8gICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0jZWxzZQotICAgICAgICAgICAgY2hhciBudW1iZXJTdHJbMTZdOwotICAgICAgICAgICAgc3ByaW50ZihudW1iZXJTdHIsICIlZCIsIFJlc1RhYmxlX21hcDo6VFlQRV9BTlkpOwotICAgICAgICAgICAgc3RhdHVzX3QgZXJyID0gdGFibGUtPmFkZEJhZyhTb3VyY2VQb3MoIjxnZW5lcmF0ZWQ+IiwgMCksIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIxNiwga2V5LCBTdHJpbmcxNigiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2KCJedHlwZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNihudW1iZXJTdHIpLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjpFbnRyeTo6YXNzaWduUmVzb3VyY2VJZHMoUmVzb3VyY2VUYWJsZSogdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UpCi17Ci0gICAgYm9vbCBoYXNFcnJvcnMgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAobVR5cGUgPT0gVFlQRV9CQUcpIHsKLSAgICAgICAgY29uc3QgY2hhciogZXJyb3JNc2c7Ci0gICAgICAgIGNvbnN0IFN0cmluZzE2IHN0eWxlMTYoInN0eWxlIik7Ci0gICAgICAgIGNvbnN0IFN0cmluZzE2IGF0dHIxNigiYXR0ciIpOwotICAgICAgICBjb25zdCBTdHJpbmcxNiBpZDE2KCJpZCIpOwotICAgICAgICBtUGFyZW50SWQgPSAwOwotICAgICAgICBpZiAobVBhcmVudC5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBtUGFyZW50SWQgPSB0YWJsZS0+Z2V0UmVzSWQobVBhcmVudCwgJnN0eWxlMTYsIE5VTEwsICZlcnJvck1zZyk7Ci0gICAgICAgICAgICBpZiAobVBhcmVudElkID09IDApIHsKLSAgICAgICAgICAgICAgICBtUG9zLmVycm9yKCJFcnJvciByZXRyaWV2aW5nIHBhcmVudCBmb3IgaXRlbTogJXMgJyVzJy5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1zZywgU3RyaW5nOChtUGFyZW50KS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjb25zdCBzaXplX3QgTiA9IG1CYWcuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYga2V5ID0gbUJhZy5rZXlBdChpKTsKLSAgICAgICAgICAgIEl0ZW0mIGl0ID0gbUJhZy5lZGl0VmFsdWVBdChpKTsKLSAgICAgICAgICAgIGl0LmJhZ0tleUlkID0gdGFibGUtPmdldFJlc0lkKGtleSwKLSAgICAgICAgICAgICAgICAgICAgaXQuaXNJZCA/ICZpZDE2IDogJmF0dHIxNiwgTlVMTCwgJmVycm9yTXNnKTsKLSAgICAgICAgICAgIC8vcHJpbnRmKCJCYWcga2V5IG9mICVzOiAjJTA4eFxuIiwgU3RyaW5nOChrZXkpLnN0cmluZygpLCBpdC5iYWdLZXlJZCk7Ci0gICAgICAgICAgICBpZiAoaXQuYmFnS2V5SWQgPT0gMCkgewotICAgICAgICAgICAgICAgIGl0LnNvdXJjZVBvcy5lcnJvcigiRXJyb3I6ICVzOiAlcyAnJXMnLlxuIiwgZXJyb3JNc2csCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGl0LmlzSWQgPyBpZDE2IDogYXR0cjE2KS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoa2V5KS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGFzRXJyb3JzID8gVU5LTk9XTl9FUlJPUiA6IE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjpFbnRyeTo6cHJlcGFyZUZsYXR0ZW4oU3RyaW5nUG9vbCogc3RyaW5ncywgUmVzb3VyY2VUYWJsZSogdGFibGUsCi0gICAgICAgIGNvbnN0IFN0cmluZzgqIGNvbmZpZ1R5cGVOYW1lLCBjb25zdCBDb25maWdEZXNjcmlwdGlvbiogY29uZmlnKQotewotICAgIGlmIChtVHlwZSA9PSBUWVBFX0lURU0pIHsKLSAgICAgICAgSXRlbSYgaXQgPSBtSXRlbTsKLSAgICAgICAgQWNjZXNzb3JDb29raWUgYWMoaXQuc291cmNlUG9zLCBTdHJpbmc4KG1OYW1lKSwgU3RyaW5nOChpdC52YWx1ZSkpOwotICAgICAgICBpZiAoIXRhYmxlLT5zdHJpbmdUb1ZhbHVlKCZpdC5wYXJzZWRWYWx1ZSwgc3RyaW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC52YWx1ZSwgZmFsc2UsIHRydWUsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0LnN0eWxlLCBOVUxMLCAmYWMsIG1JdGVtRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1R5cGVOYW1lLCBjb25maWcpKSB7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobVR5cGUgPT0gVFlQRV9CQUcpIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBtQmFnLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGtleSA9IG1CYWcua2V5QXQoaSk7Ci0gICAgICAgICAgICBJdGVtJiBpdCA9IG1CYWcuZWRpdFZhbHVlQXQoaSk7Ci0gICAgICAgICAgICBBY2Nlc3NvckNvb2tpZSBhYyhpdC5zb3VyY2VQb3MsIFN0cmluZzgoa2V5KSwgU3RyaW5nOChpdC52YWx1ZSkpOwotICAgICAgICAgICAgaWYgKCF0YWJsZS0+c3RyaW5nVG9WYWx1ZSgmaXQucGFyc2VkVmFsdWUsIHN0cmluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LnZhbHVlLCBmYWxzZSwgdHJ1ZSwgaXQuYmFnS2V5SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpdC5zdHlsZSwgTlVMTCwgJmFjLCBpdC5mb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1R5cGVOYW1lLCBjb25maWcpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBtUG9zLmVycm9yKCJFcnJvcjogZW50cnkgJXMgaXMgbm90IGEgc2luZ2xlIGl0ZW0gb3IgYSBiYWcuXG4iLAotICAgICAgICAgICAgICAgICAgIFN0cmluZzgobU5hbWUpLnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6RW50cnk6OnJlbWFwU3RyaW5nVmFsdWUoU3RyaW5nUG9vbCogc3RyaW5ncykKLXsKLSAgICBpZiAobVR5cGUgPT0gVFlQRV9JVEVNKSB7Ci0gICAgICAgIEl0ZW0mIGl0ID0gbUl0ZW07Ci0gICAgICAgIGlmIChpdC5wYXJzZWRWYWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfU1RSSU5HKSB7Ci0gICAgICAgICAgICBpdC5wYXJzZWRWYWx1ZS5kYXRhID0gc3RyaW5ncy0+bWFwT3JpZ2luYWxQb3NUb05ld1BvcyhpdC5wYXJzZWRWYWx1ZS5kYXRhKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobVR5cGUgPT0gVFlQRV9CQUcpIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBtQmFnLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgSXRlbSYgaXQgPSBtQmFnLmVkaXRWYWx1ZUF0KGkpOwotICAgICAgICAgICAgaWYgKGl0LnBhcnNlZFZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9TVFJJTkcpIHsKLSAgICAgICAgICAgICAgICBpdC5wYXJzZWRWYWx1ZS5kYXRhID0gc3RyaW5ncy0+bWFwT3JpZ2luYWxQb3NUb05ld1BvcyhpdC5wYXJzZWRWYWx1ZS5kYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1Qb3MuZXJyb3IoIkVycm9yOiBlbnRyeSAlcyBpcyBub3QgYSBzaW5nbGUgaXRlbSBvciBhIGJhZy5cbiIsCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nOChtTmFtZSkuc3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zc2l6ZV90IFJlc291cmNlVGFibGU6OkVudHJ5OjpmbGF0dGVuKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBzcDxBYXB0RmlsZT4mIGRhdGEsIGJvb2wgaXNQdWJsaWMpCi17Ci0gICAgc2l6ZV90IGFtdCA9IDA7Ci0gICAgUmVzVGFibGVfZW50cnkgaGVhZGVyOwotICAgIG1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7Ci0gICAgaGVhZGVyLnNpemUgPSBodG9kcyhzaXplb2YoaGVhZGVyKSk7Ci0gICAgY29uc3QgdHlwZSB0eSA9IHRoaXMgIT0gTlVMTCA/IG1UeXBlIDogVFlQRV9JVEVNOwotICAgIGlmICh0aGlzICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKHR5ID09IFRZUEVfQkFHKSB7Ci0gICAgICAgICAgICBoZWFkZXIuZmxhZ3MgfD0gaHRvZHMoaGVhZGVyLkZMQUdfQ09NUExFWCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzUHVibGljKSB7Ci0gICAgICAgICAgICBoZWFkZXIuZmxhZ3MgfD0gaHRvZHMoaGVhZGVyLkZMQUdfUFVCTElDKTsKLSAgICAgICAgfQotICAgICAgICBoZWFkZXIua2V5LmluZGV4ID0gaHRvZGwobU5hbWVJbmRleCk7Ci0gICAgfQotICAgIGlmICh0eSAhPSBUWVBFX0JBRykgewotICAgICAgICBzdGF0dXNfdCBlcnIgPSBkYXRhLT53cml0ZURhdGEoJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBvdXQgb2YgbWVtb3J5IGNyZWF0aW5nIFJlc1RhYmxlX2VudHJ5XG4iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBJdGVtJiBpdCA9IG1JdGVtOwotICAgICAgICBSZXNfdmFsdWUgcGFyOwotICAgICAgICBtZW1zZXQoJnBhciwgMCwgc2l6ZW9mKHBhcikpOwotICAgICAgICBwYXIuc2l6ZSA9IGh0b2RzKGl0LnBhcnNlZFZhbHVlLnNpemUpOwotICAgICAgICBwYXIuZGF0YVR5cGUgPSBpdC5wYXJzZWRWYWx1ZS5kYXRhVHlwZTsKLSAgICAgICAgcGFyLnJlczAgPSBpdC5wYXJzZWRWYWx1ZS5yZXMwOwotICAgICAgICBwYXIuZGF0YSA9IGh0b2RsKGl0LnBhcnNlZFZhbHVlLmRhdGEpOwotICAgICAgICAjaWYgMAotICAgICAgICBwcmludGYoIldyaXRpbmcgaXRlbSAoJXMpOiB0eXBlPSVkLCBkYXRhPTB4JXgsIHJlczA9MHgleFxuIiwKLSAgICAgICAgICAgICAgIFN0cmluZzgobU5hbWUpLnN0cmluZygpLCBpdC5wYXJzZWRWYWx1ZS5kYXRhVHlwZSwKLSAgICAgICAgICAgICAgIGl0LnBhcnNlZFZhbHVlLmRhdGEsIHBhci5yZXMwKTsKLSAgICAgICAgI2VuZGlmCi0gICAgICAgIGVyciA9IGRhdGEtPndyaXRlRGF0YSgmcGFyLCBpdC5wYXJzZWRWYWx1ZS5zaXplKTsKLSAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogb3V0IG9mIG1lbW9yeSBjcmVhdGluZyBSZXNfdmFsdWVcbiIpOwotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgICAgICBhbXQgKz0gaXQucGFyc2VkVmFsdWUuc2l6ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBzaXplX3QgTiA9IG1CYWcuc2l6ZSgpOwotICAgICAgICBzaXplX3QgaTsKLSAgICAgICAgLy8gQ3JlYXRlIGNvcnJlY3Qgb3JkZXJpbmcgb2YgaXRlbXMuCi0gICAgICAgIEtleWVkVmVjdG9yPHVpbnQzMl90LCBjb25zdCBJdGVtKj4gaXRlbXM7Ci0gICAgICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgY29uc3QgSXRlbSYgaXQgPSBtQmFnLnZhbHVlQXQoaSk7Ci0gICAgICAgICAgICBpdGVtcy5hZGQoaXQuYmFnS2V5SWQsICZpdCk7Ci0gICAgICAgIH0KLSAgICAgICAgTiA9IGl0ZW1zLnNpemUoKTsKLSAgICAgICAgCi0gICAgICAgIFJlc1RhYmxlX21hcF9lbnRyeSBtYXBIZWFkZXI7Ci0gICAgICAgIG1lbWNweSgmbWFwSGVhZGVyLCAmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7Ci0gICAgICAgIG1hcEhlYWRlci5zaXplID0gaHRvZHMoc2l6ZW9mKG1hcEhlYWRlcikpOwotICAgICAgICBtYXBIZWFkZXIucGFyZW50LmlkZW50ID0gaHRvZGwobVBhcmVudElkKTsKLSAgICAgICAgbWFwSGVhZGVyLmNvdW50ID0gaHRvZGwoTik7Ci0gICAgICAgIHN0YXR1c190IGVyciA9IGRhdGEtPndyaXRlRGF0YSgmbWFwSGVhZGVyLCBzaXplb2YobWFwSGVhZGVyKSk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG91dCBvZiBtZW1vcnkgY3JlYXRpbmcgUmVzVGFibGVfZW50cnlcbiIpOwotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgY29uc3QgSXRlbSYgaXQgPSAqaXRlbXMudmFsdWVBdChpKTsKLSAgICAgICAgICAgIFJlc1RhYmxlX21hcCBtYXA7Ci0gICAgICAgICAgICBtYXAubmFtZS5pZGVudCA9IGh0b2RsKGl0LmJhZ0tleUlkKTsKLSAgICAgICAgICAgIG1hcC52YWx1ZS5zaXplID0gaHRvZHMoaXQucGFyc2VkVmFsdWUuc2l6ZSk7Ci0gICAgICAgICAgICBtYXAudmFsdWUuZGF0YVR5cGUgPSBpdC5wYXJzZWRWYWx1ZS5kYXRhVHlwZTsKLSAgICAgICAgICAgIG1hcC52YWx1ZS5yZXMwID0gaXQucGFyc2VkVmFsdWUucmVzMDsKLSAgICAgICAgICAgIG1hcC52YWx1ZS5kYXRhID0gaHRvZGwoaXQucGFyc2VkVmFsdWUuZGF0YSk7Ci0gICAgICAgICAgICBlcnIgPSBkYXRhLT53cml0ZURhdGEoJm1hcCwgc2l6ZW9mKG1hcCkpOwotICAgICAgICAgICAgaWYgKGVyciAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG91dCBvZiBtZW1vcnkgY3JlYXRpbmcgUmVzX3ZhbHVlXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYW10ICs9IHNpemVvZihtYXApOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhbXQ7Ci19Ci0KLXZvaWQgUmVzb3VyY2VUYWJsZTo6Q29uZmlnTGlzdDo6YXBwZW5kQ29tbWVudChjb25zdCBTdHJpbmcxNiYgY29tbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG9ubHlJZkVtcHR5KQotewotICAgIGlmIChjb21tZW50LnNpemUoKSA8PSAwKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG9ubHlJZkVtcHR5ICYmIG1Db21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobUNvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICBtQ29tbWVudC5hcHBlbmQoU3RyaW5nMTYoIlxuIikpOwotICAgIH0KLSAgICBtQ29tbWVudC5hcHBlbmQoY29tbWVudCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VUYWJsZTo6Q29uZmlnTGlzdDo6YXBwZW5kVHlwZUNvbW1lbnQoY29uc3QgU3RyaW5nMTYmIGNvbW1lbnQpCi17Ci0gICAgaWYgKGNvbW1lbnQuc2l6ZSgpIDw9IDApIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobVR5cGVDb21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgbVR5cGVDb21tZW50LmFwcGVuZChTdHJpbmcxNigiXG4iKSk7Ci0gICAgfQotICAgIG1UeXBlQ29tbWVudC5hcHBlbmQoY29tbWVudCk7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OlR5cGU6OmFkZFB1YmxpYyhjb25zdCBTb3VyY2VQb3MmIHNvdXJjZVBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBpZGVudCkKLXsKLSAgICAjaWYgMAotICAgIGludDMyX3QgZW50cnlJZHggPSBSZXNfR0VURU5UUlkoaWRlbnQpOwotICAgIGlmIChlbnRyeUlkeCA8IDApIHsKLSAgICAgICAgc291cmNlUG9zLmVycm9yKCJQdWJsaWMgcmVzb3VyY2UgJXMvJXMgaGFzIGFuIGludmFsaWQgMCBpZGVudGlmaWVyICgweCUwOHgpLlxuIiwKLSAgICAgICAgICAgICAgICBTdHJpbmc4KG1OYW1lKS5zdHJpbmcoKSwgU3RyaW5nOChuYW1lKS5zdHJpbmcoKSwgaWRlbnQpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgI2VuZGlmCi0KLSAgICBpbnQzMl90IHR5cGVJZHggPSBSZXNfR0VUVFlQRShpZGVudCk7Ci0gICAgaWYgKHR5cGVJZHggPj0gMCkgewotICAgICAgICB0eXBlSWR4Kys7Ci0gICAgICAgIGlmIChtUHVibGljSW5kZXggPiAwICYmIG1QdWJsaWNJbmRleCAhPSB0eXBlSWR4KSB7Ci0gICAgICAgICAgICBzb3VyY2VQb3MuZXJyb3IoIlB1YmxpYyByZXNvdXJjZSAlcy8lcyBoYXMgY29uZmxpY3RpbmcgdHlwZSBjb2RlcyBmb3IgaXRzIgotICAgICAgICAgICAgICAgICAgICAiIHB1YmxpYyBpZGVudGlmaWVycyAoMHgleCB2cyAweCV4KS5cbiIsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgobU5hbWUpLnN0cmluZygpLCBTdHJpbmc4KG5hbWUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICBtUHVibGljSW5kZXgsIHR5cGVJZHgpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgbVB1YmxpY0luZGV4ID0gdHlwZUlkeDsKLSAgICB9Ci0KLSAgICBpZiAobUZpcnN0UHVibGljU291cmNlUG9zID09IE5VTEwpIHsKLSAgICAgICAgbUZpcnN0UHVibGljU291cmNlUG9zID0gbmV3IFNvdXJjZVBvcyhzb3VyY2VQb3MpOwotICAgIH0KLQotICAgIGlmIChtUHVibGljLmluZGV4T2ZLZXkobmFtZSkgPCAwKSB7Ci0gICAgICAgIG1QdWJsaWMuYWRkKG5hbWUsIFB1YmxpYyhzb3VyY2VQb3MsIFN0cmluZzE2KCksIGlkZW50KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUHVibGljJiBwID0gbVB1YmxpYy5lZGl0VmFsdWVGb3IobmFtZSk7Ci0gICAgICAgIGlmIChwLmlkZW50ICE9IGlkZW50KSB7Ci0gICAgICAgICAgICBzb3VyY2VQb3MuZXJyb3IoIlB1YmxpYyByZXNvdXJjZSAlcy8lcyBoYXMgY29uZmxpY3RpbmcgcHVibGljIGlkZW50aWZpZXJzIgotICAgICAgICAgICAgICAgICAgICAiICgweCUwOHggdnMgMHglMDh4KS5cbiIKLSAgICAgICAgICAgICAgICAgICAgIiVzOiVkOiBPcmlnaW5hbGx5IGRlZmluZWQgaGVyZS5cbiIsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgobU5hbWUpLnN0cmluZygpLCBTdHJpbmc4KG5hbWUpLnN0cmluZygpLCBwLmlkZW50LCBpZGVudCwKLSAgICAgICAgICAgICAgICAgICAgcC5zb3VyY2VQb3MuZmlsZS5zdHJpbmcoKSwgcC5zb3VyY2VQb3MubGluZSk7Ci0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotdm9pZCBSZXNvdXJjZVRhYmxlOjpUeXBlOjpjYW5BZGRFbnRyeShjb25zdCBTdHJpbmcxNiYgbmFtZSkKLXsKLSAgICBtQ2FuQWRkRW50cmllcy5hZGQobmFtZSk7Ci19Ci0KLXNwPFJlc291cmNlVGFibGU6OkVudHJ5PiBSZXNvdXJjZVRhYmxlOjpUeXBlOjpnZXRFbnRyeShjb25zdCBTdHJpbmcxNiYgZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291cmNlUG9zJiBzb3VyY2VQb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnKiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkb1NldEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgb3ZlcmxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9BZGRPdmVybGF5KQotewotICAgIGludCBwb3MgPSAtMTsKLSAgICBzcDxDb25maWdMaXN0PiBjID0gbUNvbmZpZ3MudmFsdWVGb3IoZW50cnkpOwotICAgIGlmIChjID09IE5VTEwpIHsKLSAgICAgICAgaWYgKG92ZXJsYXkgJiYgIWF1dG9BZGRPdmVybGF5ICYmIG1DYW5BZGRFbnRyaWVzLmluZGV4T2YoZW50cnkpIDwgMCkgewotICAgICAgICAgICAgc291cmNlUG9zLmVycm9yKCJSZXNvdXJjZSBhdCAlcyBhcHBlYXJzIGluIG92ZXJsYXkgYnV0IG5vdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGluIHRoZSBiYXNlIHBhY2thZ2U7IHVzZSA8YWRkLXJlc291cmNlPiB0byBhZGQuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZW50cnkpLnN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGMgPSBuZXcgQ29uZmlnTGlzdChlbnRyeSwgc291cmNlUG9zKTsKLSAgICAgICAgbUNvbmZpZ3MuYWRkKGVudHJ5LCBjKTsKLSAgICAgICAgcG9zID0gKGludCltT3JkZXJlZENvbmZpZ3Muc2l6ZSgpOwotICAgICAgICBtT3JkZXJlZENvbmZpZ3MuYWRkKGMpOwotICAgICAgICBpZiAoZG9TZXRJbmRleCkgewotICAgICAgICAgICAgYy0+c2V0RW50cnlJbmRleChwb3MpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIENvbmZpZ0Rlc2NyaXB0aW9uIGNkZXNjOwotICAgIGlmIChjb25maWcpIGNkZXNjID0gKmNvbmZpZzsKLSAgICAKLSAgICBzcDxFbnRyeT4gZSA9IGMtPmdldEVudHJpZXMoKS52YWx1ZUZvcihjZGVzYyk7Ci0gICAgaWYgKGUgPT0gTlVMTCkgewotICAgICAgICBpZiAoY29uZmlnICE9IE5VTEwpIHsKLSAgICAgICAgICAgIE5PSVNZKHByaW50ZigiTmV3IGVudHJ5IGF0ICVzOiVkOiBpbXNpOiVkLyVkIGxhbmc6JWMlYyBjbnQ6JWMlYyAiCi0gICAgICAgICAgICAgICAgICAgICJvcmllbjolZCB0b3VjaDolZCBkZW5zaXR5OiVkIGtleTolZCBpbnA6JWQgbmF2OiVkIHN6OiVkeCVkICIKLSAgICAgICAgICAgICAgICAgICAgInN3JWRkcCB3JWRkcCBoJWRkcCBkaXI6JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgc291cmNlUG9zLmZpbGUuc3RyaW5nKCksIHNvdXJjZVBvcy5saW5lLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+bWNjLCBjb25maWctPm1uYywKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmxhbmd1YWdlWzBdID8gY29uZmlnLT5sYW5ndWFnZVswXSA6ICctJywKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmxhbmd1YWdlWzFdID8gY29uZmlnLT5sYW5ndWFnZVsxXSA6ICctJywKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmNvdW50cnlbMF0gPyBjb25maWctPmNvdW50cnlbMF0gOiAnLScsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5jb3VudHJ5WzFdID8gY29uZmlnLT5jb3VudHJ5WzFdIDogJy0nLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+b3JpZW50YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT50b3VjaHNjcmVlbiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmRlbnNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5rZXlib2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmlucHV0RmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5uYXZpZ2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+c2NyZWVuV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5zY3JlZW5IZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5zbWFsbGVzdFNjcmVlbldpZHRoRHAsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5zY3JlZW5XaWR0aERwLAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+c2NyZWVuSGVpZ2h0RHAsCi0gICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5sYXlvdXREaXJlY3Rpb24pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE5PSVNZKHByaW50ZigiTmV3IGVudHJ5IGF0ICVzOiVkOiBOVUxMIGNvbmZpZ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VQb3MuZmlsZS5zdHJpbmcoKSwgc291cmNlUG9zLmxpbmUpKTsKLSAgICAgICAgfQotICAgICAgICBlID0gbmV3IEVudHJ5KGVudHJ5LCBzb3VyY2VQb3MpOwotICAgICAgICBjLT5hZGRFbnRyeShjZGVzYywgZSk7Ci0gICAgICAgIC8qCi0gICAgICAgIGlmIChkb1NldEluZGV4KSB7Ci0gICAgICAgICAgICBpZiAocG9zIDwgMCkgewotICAgICAgICAgICAgICAgIGZvciAocG9zPTA7IHBvczwoaW50KW1PcmRlcmVkQ29uZmlncy5zaXplKCk7IHBvcysrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtT3JkZXJlZENvbmZpZ3NbcG9zXSA9PSBjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocG9zID49IChpbnQpbU9yZGVyZWRDb25maWdzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICBzb3VyY2VQb3MuZXJyb3IoIkludGVybmFsIGVycm9yOiBjb25maWcgbm90IGZvdW5kIGluIG1PcmRlcmVkQ29uZmlncyB3aGVuIGFkZGluZyBlbnRyeSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlLT5zZXRFbnRyeUluZGV4KHBvcyk7Ci0gICAgICAgIH0KLSAgICAgICAgKi8KLSAgICB9Ci0gICAgCi0gICAgbVVuaXF1ZUNvbmZpZ3MuYWRkKGNkZXNjKTsKLSAgICAKLSAgICByZXR1cm4gZTsKLX0KLQotc3RhdHVzX3QgUmVzb3VyY2VUYWJsZTo6VHlwZTo6YXBwbHlQdWJsaWNFbnRyeU9yZGVyKCkKLXsKLSAgICBzaXplX3QgTiA9IG1PcmRlcmVkQ29uZmlncy5zaXplKCk7Ci0gICAgVmVjdG9yPHNwPENvbmZpZ0xpc3Q+ID4gb3JpZ09yZGVyKG1PcmRlcmVkQ29uZmlncyk7Ci0gICAgYm9vbCBoYXNFcnJvciA9IGZhbHNlOwotCi0gICAgc2l6ZV90IGk7Ci0gICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIG1PcmRlcmVkQ29uZmlncy5yZXBsYWNlQXQoTlVMTCwgaSk7Ci0gICAgfQotCi0gICAgY29uc3Qgc2l6ZV90IE5QID0gbVB1YmxpYy5zaXplKCk7Ci0gICAgLy9wcmludGYoIk9yZGVyaW5nICVkIGNvbmZpZ3MgZnJvbSAlZCBwdWJsaWMgZGVmc1xuIiwgTiwgTlApOwotICAgIHNpemVfdCBqOwotICAgIGZvciAoaj0wOyBqPE5QOyBqKyspIHsKLSAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUgPSBtUHVibGljLmtleUF0KGopOwotICAgICAgICBjb25zdCBQdWJsaWMmIHAgPSBtUHVibGljLnZhbHVlQXQoaik7Ci0gICAgICAgIGludDMyX3QgaWR4ID0gUmVzX0dFVEVOVFJZKHAuaWRlbnQpOwotICAgICAgICAvL3ByaW50ZigiTG9va2luZyBmb3IgZW50cnkgXCIlc1wiL1wiJXNcIiAoMHglMDh4KSBpbiAlZC4uLlxuIiwKLSAgICAgICAgLy8gICAgICAgU3RyaW5nOChtTmFtZSkuc3RyaW5nKCksIFN0cmluZzgobmFtZSkuc3RyaW5nKCksIHAuaWRlbnQsIE4pOwotICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgc3A8Q29uZmlnTGlzdD4gZSA9IG9yaWdPcmRlci5pdGVtQXQoaSk7Ci0gICAgICAgICAgICAvL3ByaW50ZigiIyVkOiBcIiVzXCJcbiIsIGksIFN0cmluZzgoZS0+Z2V0TmFtZSgpKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBpZiAoZS0+Z2V0TmFtZSgpID09IG5hbWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoaWR4ID49IChpbnQzMl90KW1PcmRlcmVkQ29uZmlncy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcC5zb3VyY2VQb3MuZXJyb3IoIlB1YmxpYyBlbnRyeSBpZGVudGlmaWVyIDB4JXggZW50cnkgaW5kZXggIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcyBsYXJnZXIgdGhhbiBhdmFpbGFibGUgc3ltYm9scyAoaW5kZXggJWQsIHRvdGFsIHN5bWJvbHMgJWQpLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmlkZW50LCBpZHgsIG1PcmRlcmVkQ29uZmlncy5zaXplKCkpOwotICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtT3JkZXJlZENvbmZpZ3MuaXRlbUF0KGlkeCkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBlLT5zZXRQdWJsaWModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGUtPnNldFB1YmxpY1NvdXJjZVBvcyhwLnNvdXJjZVBvcyk7Ci0gICAgICAgICAgICAgICAgICAgIG1PcmRlcmVkQ29uZmlncy5yZXBsYWNlQXQoZSwgaWR4KTsKLSAgICAgICAgICAgICAgICAgICAgb3JpZ09yZGVyLnJlbW92ZUF0KGkpOwotICAgICAgICAgICAgICAgICAgICBOLS07Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3A8Q29uZmlnTGlzdD4gb2UgPSBtT3JkZXJlZENvbmZpZ3MuaXRlbUF0KGlkeCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcC5zb3VyY2VQb3MuZXJyb3IoIk11bHRpcGxlIGVudHJ5IG5hbWVzIGRlY2xhcmVkIGZvciBwdWJsaWMgZW50cnkiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpZGVudGlmaWVyIDB4JXggaW4gdHlwZSAlcyAoJXMgdnMgJXMpLlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczolZDogT3JpZ2luYWxseSBkZWZpbmVkIGhlcmUuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHgrMSwgU3RyaW5nOChtTmFtZSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChvZS0+Z2V0TmFtZSgpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KG5hbWUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lLT5nZXRQdWJsaWNTb3VyY2VQb3MoKS5maWxlLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lLT5nZXRQdWJsaWNTb3VyY2VQb3MoKS5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIHAuc291cmNlUG9zLmVycm9yKCJQdWJsaWMgc3ltYm9sICVzLyVzIGRlY2xhcmVkIGhlcmUgaXMgbm90IGRlZmluZWQuIiwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChtTmFtZSkuc3RyaW5nKCksIFN0cmluZzgobmFtZSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy9wcmludGYoIkNvcHlpbmcgYmFjayBpbiAlZCBub24tcHVibGljIGNvbmZpZ3MsIGhhdmUgJWRcbiIsIE4sIG9yaWdPcmRlci5zaXplKCkpOwotICAgIAotICAgIGlmIChOICE9IG9yaWdPcmRlci5zaXplKCkpIHsKLSAgICAgICAgcHJpbnRmKCJJbnRlcm5hbCBlcnJvcjogcmVtYWluaW5nIHByaXZhdGUgc3ltYm9sIGNvdW50IG1pc21hdGNoXG4iKTsKLSAgICAgICAgTiA9IG9yaWdPcmRlci5zaXplKCk7Ci0gICAgfQotICAgIAotICAgIGogPSAwOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICBzcDxDb25maWdMaXN0PiBlID0gb3JpZ09yZGVyLml0ZW1BdChpKTsKLSAgICAgICAgLy8gVGhlcmUgd2lsbCBhbHdheXMgYmUgZW5vdWdoIHJvb20gZm9yIHRoZSByZW1haW5pbmcgZW50cmllcy4KLSAgICAgICAgd2hpbGUgKG1PcmRlcmVkQ29uZmlncy5pdGVtQXQoaikgIT0gTlVMTCkgewotICAgICAgICAgICAgaisrOwotICAgICAgICB9Ci0gICAgICAgIG1PcmRlcmVkQ29uZmlncy5yZXBsYWNlQXQoZSwgaik7Ci0gICAgICAgIGorKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGFzRXJyb3IgPyBVTktOT1dOX0VSUk9SIDogTk9fRVJST1I7Ci19Ci0KLVJlc291cmNlVGFibGU6OlBhY2thZ2U6OlBhY2thZ2UoY29uc3QgU3RyaW5nMTYmIG5hbWUsIHNzaXplX3QgaW5jbHVkZWRJZCkKLSAgICA6IG1OYW1lKG5hbWUpLCBtSW5jbHVkZWRJZChpbmNsdWRlZElkKSwKLSAgICAgIG1UeXBlU3RyaW5nc01hcHBpbmcoMHhmZmZmZmZmZiksCi0gICAgICBtS2V5U3RyaW5nc01hcHBpbmcoMHhmZmZmZmZmZikKLXsKLX0KLQotc3A8UmVzb3VyY2VUYWJsZTo6VHlwZT4gUmVzb3VyY2VUYWJsZTo6UGFja2FnZTo6Z2V0VHlwZShjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291cmNlUG9zJiBzb3VyY2VQb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZG9TZXRJbmRleCkKLXsKLSAgICBzcDxUeXBlPiB0ID0gbVR5cGVzLnZhbHVlRm9yKHR5cGUpOwotICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgdCA9IG5ldyBUeXBlKHR5cGUsIHNvdXJjZVBvcyk7Ci0gICAgICAgIG1UeXBlcy5hZGQodHlwZSwgdCk7Ci0gICAgICAgIG1PcmRlcmVkVHlwZXMuYWRkKHQpOwotICAgICAgICBpZiAoZG9TZXRJbmRleCkgewotICAgICAgICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIHRoZSB0eXBlJ3MgaW5kZXggaXMgc2V0IHRvIG9uZSBwbHVzIHRoZSBpbmRleAotICAgICAgICAgICAgLy8gaW4gdGhlIG1PcmRlcmVkVHlwZXMgbGlzdCwgcmF0aGVyIHRoYW4ganVzdCB0aGUgaW5kZXguCi0gICAgICAgICAgICB0LT5zZXRJbmRleChtT3JkZXJlZFR5cGVzLnNpemUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHQ7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OlBhY2thZ2U6OnNldFR5cGVTdHJpbmdzKGNvbnN0IHNwPEFhcHRGaWxlPiYgZGF0YSkKLXsKLSAgICBtVHlwZVN0cmluZ3NEYXRhID0gZGF0YTsKLSAgICBzdGF0dXNfdCBlcnIgPSBzZXRTdHJpbmdzKGRhdGEsICZtVHlwZVN0cmluZ3MsICZtVHlwZVN0cmluZ3NNYXBwaW5nKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IFR5cGUgc3RyaW5nIGRhdGEgaXMgY29ycnVwdCFcbiIpOwotICAgIH0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0dXNfdCBSZXNvdXJjZVRhYmxlOjpQYWNrYWdlOjpzZXRLZXlTdHJpbmdzKGNvbnN0IHNwPEFhcHRGaWxlPiYgZGF0YSkKLXsKLSAgICBtS2V5U3RyaW5nc0RhdGEgPSBkYXRhOwotICAgIHN0YXR1c190IGVyciA9IHNldFN0cmluZ3MoZGF0YSwgJm1LZXlTdHJpbmdzLCAmbUtleVN0cmluZ3NNYXBwaW5nKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IEtleSBzdHJpbmcgZGF0YSBpcyBjb3JydXB0IVxuIik7Ci0gICAgfQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OlBhY2thZ2U6OnNldFN0cmluZ3MoY29uc3Qgc3A8QWFwdEZpbGU+JiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNTdHJpbmdQb29sKiBzdHJpbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nMTYsIHVpbnQzMl90PiogbWFwcGluZ3MpCi17Ci0gICAgaWYgKGRhdGEtPmdldERhdGEoKSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIE5PSVNZKGFvdXQgPDwgIlNldHRpbmcgcmVzdGFibGUgc3RyaW5nIHBvb2w6ICIKLSAgICAgICAgICA8PCBIZXhEdW1wKGRhdGEtPmdldERhdGEoKSwgZGF0YS0+Z2V0U2l6ZSgpKSA8PCBlbmRsKTsKLQotICAgIHN0YXR1c190IGVyciA9IHN0cmluZ3MtPnNldFRvKGRhdGEtPmdldERhdGEoKSwgZGF0YS0+Z2V0U2l6ZSgpKTsKLSAgICBpZiAoZXJyID09IE5PX0VSUk9SKSB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBOID0gc3RyaW5ncy0+c2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICAgICAgbWFwcGluZ3MtPmFkZChTdHJpbmcxNihzdHJpbmdzLT5zdHJpbmdBdChpLCAmbGVuKSksIGkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXR1c190IFJlc291cmNlVGFibGU6OlBhY2thZ2U6OmFwcGx5UHVibGljVHlwZU9yZGVyKCkKLXsKLSAgICBzaXplX3QgTiA9IG1PcmRlcmVkVHlwZXMuc2l6ZSgpOwotICAgIFZlY3RvcjxzcDxUeXBlPiA+IG9yaWdPcmRlcihtT3JkZXJlZFR5cGVzKTsKLQotICAgIHNpemVfdCBpOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICBtT3JkZXJlZFR5cGVzLnJlcGxhY2VBdChOVUxMLCBpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgc3A8VHlwZT4gdCA9IG9yaWdPcmRlci5pdGVtQXQoaSk7Ci0gICAgICAgIGludDMyX3QgaWR4ID0gdC0+Z2V0UHVibGljSW5kZXgoKTsKLSAgICAgICAgaWYgKGlkeCA+IDApIHsKLSAgICAgICAgICAgIGlkeC0tOwotICAgICAgICAgICAgd2hpbGUgKGlkeCA+PSAoaW50MzJfdCltT3JkZXJlZFR5cGVzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIG1PcmRlcmVkVHlwZXMuYWRkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobU9yZGVyZWRUeXBlcy5pdGVtQXQoaWR4KSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc3A8VHlwZT4gb3QgPSBtT3JkZXJlZFR5cGVzLml0ZW1BdChpZHgpOwotICAgICAgICAgICAgICAgIHQtPmdldEZpcnN0UHVibGljU291cmNlUG9zKCkuZXJyb3IoIk11bHRpcGxlIHR5cGUgbmFtZXMgZGVjbGFyZWQgZm9yIHB1YmxpYyB0eXBlIgotICAgICAgICAgICAgICAgICAgICAgICAgIiBpZGVudGlmaWVyIDB4JXggKCVzIHZzICVzKS5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICIlczolZDogT3JpZ2luYWxseSBkZWZpbmVkIGhlcmUuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkeCwgU3RyaW5nOChvdC0+Z2V0TmFtZSgpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgodC0+Z2V0TmFtZSgpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG90LT5nZXRGaXJzdFB1YmxpY1NvdXJjZVBvcygpLmZpbGUuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBvdC0+Z2V0Rmlyc3RQdWJsaWNTb3VyY2VQb3MoKS5saW5lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1PcmRlcmVkVHlwZXMucmVwbGFjZUF0KHQsIGlkeCk7Ci0gICAgICAgICAgICBvcmlnT3JkZXIucmVtb3ZlQXQoaSk7Ci0gICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICBOLS07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzaXplX3Qgaj0wOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICBzcDxUeXBlPiB0ID0gb3JpZ09yZGVyLml0ZW1BdChpKTsKLSAgICAgICAgLy8gVGhlcmUgd2lsbCBhbHdheXMgYmUgZW5vdWdoIHJvb20gZm9yIHRoZSByZW1haW5pbmcgdHlwZXMuCi0gICAgICAgIHdoaWxlIChtT3JkZXJlZFR5cGVzLml0ZW1BdChqKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBqKys7Ci0gICAgICAgIH0KLSAgICAgICAgbU9yZGVyZWRUeXBlcy5yZXBsYWNlQXQodCwgaik7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zcDxSZXNvdXJjZVRhYmxlOjpQYWNrYWdlPiBSZXNvdXJjZVRhYmxlOjpnZXRQYWNrYWdlKGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlKQotewotICAgIHNwPFBhY2thZ2U+IHAgPSBtUGFja2FnZXMudmFsdWVGb3IocGFja2FnZSk7Ci0gICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgICBpZiAobUlzQXBwUGFja2FnZSkgewotICAgICAgICAgICAgaWYgKG1IYXZlQXBwUGFja2FnZSkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQWRkaW5nIG11bHRpcGxlIGFwcGxpY2F0aW9uIHBhY2thZ2UgcmVzb3VyY2VzOyBvbmx5IG9uZSBpcyBhbGxvd2VkLlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlIC14IHRvIGNyZWF0ZSBleHRlbmRlZCByZXNvdXJjZXMuXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1IYXZlQXBwUGFja2FnZSA9IHRydWU7Ci0gICAgICAgICAgICBwID0gbmV3IFBhY2thZ2UocGFja2FnZSwgMTI3KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHAgPSBuZXcgUGFja2FnZShwYWNrYWdlLCBtTmV4dFBhY2thZ2VJZCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy9wcmludGYoIioqKiBORVcgUEFDS0FHRTogXCIlc1wiIGlkPSVkXG4iLAotICAgICAgICAvLyAgICAgICBTdHJpbmc4KHBhY2thZ2UpLnN0cmluZygpLCBwLT5nZXRBc3NpZ25lZElkKCkpOwotICAgICAgICBtUGFja2FnZXMuYWRkKHBhY2thZ2UsIHApOwotICAgICAgICBtT3JkZXJlZFBhY2thZ2VzLmFkZChwKTsKLSAgICAgICAgbU5leHRQYWNrYWdlSWQrKzsKLSAgICB9Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLXNwPFJlc291cmNlVGFibGU6OlR5cGU+IFJlc291cmNlVGFibGU6OmdldFR5cGUoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb3VyY2VQb3MmIHNvdXJjZVBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkb1NldEluZGV4KQotewotICAgIHNwPFBhY2thZ2U+IHAgPSBnZXRQYWNrYWdlKHBhY2thZ2UpOwotICAgIGlmIChwID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBwLT5nZXRUeXBlKHR5cGUsIHNvdXJjZVBvcywgZG9TZXRJbmRleCk7Ci19Ci0KLXNwPFJlc291cmNlVGFibGU6OkVudHJ5PiBSZXNvdXJjZVRhYmxlOjpnZXRFbnRyeShjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb3VyY2VQb3MmIHNvdXJjZVBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG92ZXJsYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnKiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkb1NldEluZGV4KQotewotICAgIHNwPFR5cGU+IHQgPSBnZXRUeXBlKHBhY2thZ2UsIHR5cGUsIHNvdXJjZVBvcywgZG9TZXRJbmRleCk7Ci0gICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIHQtPmdldEVudHJ5KG5hbWUsIHNvdXJjZVBvcywgY29uZmlnLCBkb1NldEluZGV4LCBvdmVybGF5LCBtQnVuZGxlLT5nZXRBdXRvQWRkT3ZlcmxheSgpKTsKLX0KLQotc3A8Y29uc3QgUmVzb3VyY2VUYWJsZTo6RW50cnk+IFJlc291cmNlVGFibGU6OmdldEVudHJ5KHVpbnQzMl90IHJlc0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogY29uZmlnKSBjb25zdAotewotICAgIGludCBwaWQgPSBSZXNfR0VUUEFDS0FHRShyZXNJRCkrMTsKLSAgICBjb25zdCBzaXplX3QgTiA9IG1PcmRlcmVkUGFja2FnZXMuc2l6ZSgpOwotICAgIHNpemVfdCBpOwotICAgIHNwPFBhY2thZ2U+IHA7Ci0gICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHNwPFBhY2thZ2U+IGNoZWNrID0gbU9yZGVyZWRQYWNrYWdlc1tpXTsKLSAgICAgICAgaWYgKGNoZWNrLT5nZXRBc3NpZ25lZElkKCkgPT0gcGlkKSB7Ci0gICAgICAgICAgICBwID0gY2hlY2s7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgfQotICAgIGlmIChwID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBQYWNrYWdlIG5vdCBmb3VuZCBmb3IgcmVzb3VyY2UgIyUwOHhcbiIsIHJlc0lEKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaW50IHRpZCA9IFJlc19HRVRUWVBFKHJlc0lEKTsKLSAgICBpZiAodGlkIDwgMCB8fCB0aWQgPj0gKGludClwLT5nZXRPcmRlcmVkVHlwZXMoKS5zaXplKCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBUeXBlIG5vdCBmb3VuZCBmb3IgcmVzb3VyY2UgIyUwOHhcbiIsIHJlc0lEKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHNwPFR5cGU+IHQgPSBwLT5nZXRPcmRlcmVkVHlwZXMoKVt0aWRdOwotCi0gICAgaW50IGVpZCA9IFJlc19HRVRFTlRSWShyZXNJRCk7Ci0gICAgaWYgKGVpZCA8IDAgfHwgZWlkID49IChpbnQpdC0+Z2V0T3JkZXJlZENvbmZpZ3MoKS5zaXplKCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBFbnRyeSBub3QgZm91bmQgZm9yIHJlc291cmNlICMlMDh4XG4iLCByZXNJRCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHNwPENvbmZpZ0xpc3Q+IGMgPSB0LT5nZXRPcmRlcmVkQ29uZmlncygpW2VpZF07Ci0gICAgaWYgKGMgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IEVudHJ5IG5vdCBmb3VuZCBmb3IgcmVzb3VyY2UgIyUwOHhcbiIsIHJlc0lEKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIAotICAgIENvbmZpZ0Rlc2NyaXB0aW9uIGNkZXNjOwotICAgIGlmIChjb25maWcpIGNkZXNjID0gKmNvbmZpZzsKLSAgICBzcDxFbnRyeT4gZSA9IGMtPmdldEVudHJpZXMoKS52YWx1ZUZvcihjZGVzYyk7Ci0gICAgaWYgKGMgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IEVudHJ5IGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kIGZvciByZXNvdXJjZSAjJTA4eFxuIiwgcmVzSUQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGU7Ci19Ci0KLWNvbnN0IFJlc291cmNlVGFibGU6Okl0ZW0qIFJlc291cmNlVGFibGU6OmdldEl0ZW0odWludDMyX3QgcmVzSUQsIHVpbnQzMl90IGF0dHJJRCkgY29uc3QKLXsKLSAgICBzcDxjb25zdCBFbnRyeT4gZSA9IGdldEVudHJ5KHJlc0lEKTsKLSAgICBpZiAoZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGNvbnN0IHNpemVfdCBOID0gZS0+Z2V0QmFnKCkuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgY29uc3QgSXRlbSYgaXQgPSBlLT5nZXRCYWcoKS52YWx1ZUF0KGkpOwotICAgICAgICBpZiAoaXQuYmFnS2V5SWQgPT0gMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBJRCBub3QgeWV0IGFzc2lnbmVkIHRvICclcycgaW4gYmFnICclcydcbiIsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZS0+Z2V0TmFtZSgpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChlLT5nZXRCYWcoKS5rZXlBdChpKSkuc3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpdC5iYWdLZXlJZCA9PSBhdHRySUQpIHsKLSAgICAgICAgICAgIHJldHVybiAmaXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotYm9vbCBSZXNvdXJjZVRhYmxlOjpnZXRJdGVtVmFsdWUoCi0gICAgdWludDMyX3QgcmVzSUQsIHVpbnQzMl90IGF0dHJJRCwgUmVzX3ZhbHVlKiBvdXRWYWx1ZSkKLXsKLSAgICBjb25zdCBJdGVtKiBpdGVtID0gZ2V0SXRlbShyZXNJRCwgYXR0cklEKTsKLQotICAgIGJvb2wgcmVzID0gZmFsc2U7Ci0gICAgaWYgKGl0ZW0gIT0gTlVMTCkgewotICAgICAgICBpZiAoaXRlbS0+ZXZhbHVhdGluZykgewotICAgICAgICAgICAgc3A8Y29uc3QgRW50cnk+IGUgPSBnZXRFbnRyeShyZXNJRCk7Ci0gICAgICAgICAgICBjb25zdCBzaXplX3QgTiA9IGUtPmdldEJhZygpLnNpemUoKTsKLSAgICAgICAgICAgIHNpemVfdCBpOwotICAgICAgICAgICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCZlLT5nZXRCYWcoKS52YWx1ZUF0KGkpID09IGl0ZW0pIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4ga2V5ICclcycgb2YgYmFnICclcydcbiIsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZS0+Z2V0TmFtZSgpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChlLT5nZXRCYWcoKS5rZXlBdChpKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGl0ZW0tPmV2YWx1YXRpbmcgPSB0cnVlOwotICAgICAgICByZXMgPSBzdHJpbmdUb1ZhbHVlKG91dFZhbHVlLCBOVUxMLCBpdGVtLT52YWx1ZSwgZmFsc2UsIGZhbHNlLCBpdGVtLT5iYWdLZXlJZCk7Ci0gICAgICAgIE5PSVNZKAotICAgICAgICAgICAgaWYgKHJlcykgewotICAgICAgICAgICAgICAgIHByaW50ZigiZ2V0SXRlbVZhbHVlIG9mICMlMDh4WyMlMDh4XSAoJXMpOiB0eXBlPSMlMDh4LCBkYXRhPSMlMDh4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICByZXNJRCwgYXR0cklELCBTdHJpbmc4KGdldEVudHJ5KHJlc0lEKS0+Z2V0TmFtZSgpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgb3V0VmFsdWUtPmRhdGFUeXBlLCBvdXRWYWx1ZS0+ZGF0YSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiZ2V0SXRlbVZhbHVlIG9mICMlMDh4WyMlMDh4XTogZmFpbGVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICByZXNJRCwgYXR0cklEKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLSAgICAgICAgaXRlbS0+ZXZhbHVhdGluZyA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gcmVzOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9SZXNvdXJjZVRhYmxlLmggYi90b29scy9hYXB0L1Jlc291cmNlVGFibGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNlMDY2Ni4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L1Jlc291cmNlVGFibGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1NyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIEJ1aWxkIHJlc291cmNlIGZpbGVzIGZyb20gcmF3IGFzc2V0cy4KLS8vCi0KLSNpZm5kZWYgUkVTT1VSQ0VfVEFCTEVfSAotI2RlZmluZSBSRVNPVVJDRV9UQUJMRV9ICi0KLSNpbmNsdWRlICJTdHJpbmdQb29sLmgiCi0jaW5jbHVkZSAiU291cmNlUG9zLmgiCi0KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8bWFwPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1jbGFzcyBYTUxOb2RlOwotY2xhc3MgUmVzb3VyY2VUYWJsZTsKLQotZW51bSB7Ci0gICAgWE1MX0NPTVBJTEVfU1RSSVBfQ09NTUVOVFMgPSAxPDwwLAotICAgIFhNTF9DT01QSUxFX0FTU0lHTl9BVFRSSUJVVEVfSURTID0gMTw8MSwKLSAgICBYTUxfQ09NUElMRV9DT01QQUNUX1dISVRFU1BBQ0UgPSAxPDwyLAotICAgIFhNTF9DT01QSUxFX1NUUklQX1dISVRFU1BBQ0UgPSAxPDwzLAotICAgIFhNTF9DT01QSUxFX1NUUklQX1JBV19WQUxVRVMgPSAxPDw0LAotICAgIFhNTF9DT01QSUxFX1VURjggPSAxPDw1LAotICAgIAotICAgIFhNTF9DT01QSUxFX1NUQU5EQVJEX1JFU09VUkNFID0KLSAgICAgICAgICAgIFhNTF9DT01QSUxFX1NUUklQX0NPTU1FTlRTIHwgWE1MX0NPTVBJTEVfQVNTSUdOX0FUVFJJQlVURV9JRFMKLSAgICAgICAgICAgIHwgWE1MX0NPTVBJTEVfU1RSSVBfV0hJVEVTUEFDRSB8IFhNTF9DT01QSUxFX1NUUklQX1JBV19WQUxVRVMKLX07Ci0KLXN0YXR1c190IGNvbXBpbGVYbWxGaWxlKGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4mIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVGFibGUqIHRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbnMgPSBYTUxfQ09NUElMRV9TVEFOREFSRF9SRVNPVVJDRSk7Ci0KLXN0YXR1c190IGNvbXBpbGVYbWxGaWxlKGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4mIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPEFhcHRGaWxlPiYgb3V0VGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUYWJsZSogdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9ucyA9IFhNTF9DT01QSUxFX1NUQU5EQVJEX1JFU09VUkNFKTsKLQotc3RhdHVzX3QgY29tcGlsZVhtbEZpbGUoY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPFhNTE5vZGU+JiB4bWxUcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3A8QWFwdEZpbGU+JiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVRhYmxlKiB0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHRpb25zID0gWE1MX0NPTVBJTEVfU1RBTkRBUkRfUkVTT1VSQ0UpOwotCi1zdGF0dXNfdCBjb21waWxlUmVzb3VyY2VGaWxlKEJ1bmRsZSogYnVuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4mIGluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcmIGRlZlBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBvdmVyd3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVGFibGUqIG91dFRhYmxlKTsKLQotc3RydWN0IEFjY2Vzc29yQ29va2llCi17Ci0gICAgU291cmNlUG9zIHNvdXJjZVBvczsKLSAgICBTdHJpbmc4IGF0dHI7Ci0gICAgU3RyaW5nOCB2YWx1ZTsKLQotICAgIEFjY2Vzc29yQ29va2llKGNvbnN0IFNvdXJjZVBvcyZwLCBjb25zdCBTdHJpbmc4JiBhLCBjb25zdCBTdHJpbmc4JiB2KQotICAgICAgICA6c291cmNlUG9zKHApLAotICAgICAgICAgYXR0cihhKSwKLSAgICAgICAgIHZhbHVlKHYpCi0gICAgewotICAgIH0KLX07Ci0KLWNsYXNzIFJlc291cmNlVGFibGUgOiBwdWJsaWMgUmVzVGFibGU6OkFjY2Vzc29yCi17Ci1wdWJsaWM6Ci0gICAgY2xhc3MgUGFja2FnZTsKLSAgICBjbGFzcyBUeXBlOwotICAgIGNsYXNzIEVudHJ5OwotCi0gICAgc3RydWN0IENvbmZpZ0Rlc2NyaXB0aW9uIDogcHVibGljIFJlc1RhYmxlX2NvbmZpZyB7Ci0gICAgICAgIENvbmZpZ0Rlc2NyaXB0aW9uKCkgewotICAgICAgICAgICAgbWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOwotICAgICAgICAgICAgc2l6ZSA9IHNpemVvZihSZXNUYWJsZV9jb25maWcpOwotICAgICAgICB9Ci0gICAgICAgIENvbmZpZ0Rlc2NyaXB0aW9uKGNvbnN0IFJlc1RhYmxlX2NvbmZpZyZvKSB7Ci0gICAgICAgICAgICAqc3RhdGljX2Nhc3Q8UmVzVGFibGVfY29uZmlnKj4odGhpcykgPSBvOwotICAgICAgICAgICAgc2l6ZSA9IHNpemVvZihSZXNUYWJsZV9jb25maWcpOwotICAgICAgICB9Ci0gICAgICAgIENvbmZpZ0Rlc2NyaXB0aW9uKGNvbnN0IENvbmZpZ0Rlc2NyaXB0aW9uJm8pIHsKLSAgICAgICAgICAgICpzdGF0aWNfY2FzdDxSZXNUYWJsZV9jb25maWcqPih0aGlzKSA9IG87Ci0gICAgICAgIH0KLQotICAgICAgICBDb25maWdEZXNjcmlwdGlvbiYgb3BlcmF0b3I9KGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgbykgewotICAgICAgICAgICAgKnN0YXRpY19jYXN0PFJlc1RhYmxlX2NvbmZpZyo+KHRoaXMpID0gbzsKLSAgICAgICAgICAgIHNpemUgPSBzaXplb2YoUmVzVGFibGVfY29uZmlnKTsKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotICAgICAgICBDb25maWdEZXNjcmlwdGlvbiYgb3BlcmF0b3I9KGNvbnN0IENvbmZpZ0Rlc2NyaXB0aW9uJiBvKSB7Ci0gICAgICAgICAgICAqc3RhdGljX2Nhc3Q8UmVzVGFibGVfY29uZmlnKj4odGhpcykgPSBvOwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IENvbmZpZ0Rlc2NyaXB0aW9uJiBvKSBjb25zdCB7IHJldHVybiBjb21wYXJlKG8pIDwgMDsgfQotICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IENvbmZpZ0Rlc2NyaXB0aW9uJiBvKSBjb25zdCB7IHJldHVybiBjb21wYXJlKG8pIDw9IDA7IH0KLSAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb25maWdEZXNjcmlwdGlvbiYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSA9PSAwOyB9Ci0gICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29uZmlnRGVzY3JpcHRpb24mIG8pIGNvbnN0IHsgcmV0dXJuIGNvbXBhcmUobykgIT0gMDsgfQotICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IENvbmZpZ0Rlc2NyaXB0aW9uJiBvKSBjb25zdCB7IHJldHVybiBjb21wYXJlKG8pID49IDA7IH0KLSAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IENvbmZpZ0Rlc2NyaXB0aW9uJiBvKSBjb25zdCB7IHJldHVybiBjb21wYXJlKG8pID4gMDsgfQotICAgIH07Ci0KLSAgICBSZXNvdXJjZVRhYmxlKEJ1bmRsZSogYnVuZGxlLCBjb25zdCBTdHJpbmcxNiYgYXNzZXRzUGFja2FnZSk7Ci0KLSAgICBzdGF0dXNfdCBhZGRJbmNsdWRlZFJlc291cmNlcyhCdW5kbGUqIGJ1bmRsZSwgY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cyk7Ci0KLSAgICBzdGF0dXNfdCBhZGRQdWJsaWMoY29uc3QgU291cmNlUG9zJiBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGlkZW50KTsKLQotICAgIHN0YXR1c190IGFkZEVudHJ5KGNvbnN0IFNvdXJjZVBvcyYgcG9zLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4qIHN0eWxlID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcqIHBhcmFtcyA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBkb1NldEluZGV4ID0gZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBmb3JtYXQgPSBSZXNUYWJsZV9tYXA6OlRZUEVfQU5ZLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgb3ZlcndyaXRlID0gZmFsc2UpOwotCi0gICAgc3RhdHVzX3Qgc3RhcnRCYWcoY29uc3QgU291cmNlUG9zJiBwb3MsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBiYWdQYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogcGFyYW1zID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBvdmVybGF5ID0gZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgcmVwbGFjZSA9IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICBib29sIGlzSWQgPSBmYWxzZSk7Ci0gICAgCi0gICAgc3RhdHVzX3QgYWRkQmFnKGNvbnN0IFNvdXJjZVBvcyYgcG9zLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgYmFnUGFyZW50LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgYmFnS2V5LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmdQb29sOjplbnRyeV9zdHlsZV9zcGFuPiogc3R5bGUgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcqIHBhcmFtcyA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgcmVwbGFjZSA9IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICBib29sIGlzSWQgPSBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBmb3JtYXQgPSBSZXNUYWJsZV9tYXA6OlRZUEVfQU5ZKTsKLQotICAgIGJvb2wgaGFzQmFnT3JFbnRyeShjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lKSBjb25zdDsKLQotICAgIGJvb2wgaGFzQmFnT3JFbnRyeShjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZykgY29uc3Q7Ci0KLSAgICBib29sIGhhc0JhZ09yRW50cnkoY29uc3QgU3RyaW5nMTYmIHJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlR5cGUgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiogZGVmUGFja2FnZSA9IE5VTEwpOwotCi0gICAgYm9vbCBhcHBlbmRDb21tZW50KGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBjb21tZW50LAotICAgICAgICAgICAgICAgICAgICAgICBib29sIG9ubHlJZkVtcHR5ID0gZmFsc2UpOwotCi0gICAgYm9vbCBhcHBlbmRUeXBlQ29tbWVudChjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgY29tbWVudCk7Ci0gICAgCi0gICAgdm9pZCBjYW5BZGRFbnRyeShjb25zdCBTb3VyY2VQb3MmIHBvcywKLSAgICAgICAgY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsIGNvbnN0IFN0cmluZzE2JiB0eXBlLCBjb25zdCBTdHJpbmcxNiYgbmFtZSk7Ci0gICAgICAgIAotICAgIHNpemVfdCBzaXplKCkgY29uc3Q7Ci0gICAgc2l6ZV90IG51bUxvY2FsUmVzb3VyY2VzKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNSZXNvdXJjZXMoKSBjb25zdDsKLQotICAgIHNwPEFhcHRGaWxlPiBmbGF0dGVuKEJ1bmRsZSopOwotCi0gICAgc3RhdGljIGlubGluZSB1aW50MzJfdCBtYWtlUmVzSWQodWludDMyX3QgcGFja2FnZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHR5cGVJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBuYW1lSWQpCi0gICAgewotICAgICAgICByZXR1cm4gbmFtZUlkIHwgKHR5cGVJZDw8MTYpIHwgKHBhY2thZ2VJZDw8MjQpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgZ2V0UmVzSWQoY29uc3Qgc3A8UGFja2FnZT4mIHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcDxUeXBlPiYgdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG5hbWVJZCk7Ci0KLSAgICB1aW50MzJfdCBnZXRSZXNJZChjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICBib29sIG9ubHlQdWJsaWMgPSB0cnVlKSBjb25zdDsKLQotICAgIHVpbnQzMl90IGdldFJlc0lkKGNvbnN0IFN0cmluZzE2JiByZWYsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYqIGRlZlR5cGUgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2KiBkZWZQYWNrYWdlID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogb3V0RXJyb3JNc2cgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgb25seVB1YmxpYyA9IHRydWUpIGNvbnN0OwotCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFJlc291cmNlTmFtZShjb25zdCBTdHJpbmcxNiYgcyk7Ci0gICAgCi0gICAgYm9vbCBzdHJpbmdUb1ZhbHVlKFJlc192YWx1ZSogb3V0VmFsdWUsIFN0cmluZ1Bvb2wqIHBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlc2VydmVTcGFjZXMsIGJvb2wgY29lcmNlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXR0cklELAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4qIHN0eWxlID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYqIG91dFN0ciA9IE5VTEwsIHZvaWQqIGFjY2Vzc29yQ29va2llID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXR0clR5cGUgPSBSZXNUYWJsZV9tYXA6OlRZUEVfQU5ZLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4KiBjb25maWdUeXBlTmFtZSA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbmZpZ0Rlc2NyaXB0aW9uKiBjb25maWcgPSBOVUxMKTsKLQotICAgIHN0YXR1c190IGFzc2lnblJlc291cmNlSWRzKCk7Ci0gICAgc3RhdHVzX3QgYWRkU3ltYm9scyhjb25zdCBzcDxBYXB0U3ltYm9scz4mIG91dFN5bWJvbHMgPSBOVUxMKTsKLSAgICB2b2lkIGFkZExvY2FsaXphdGlvbihjb25zdCBTdHJpbmcxNiYgbmFtZSwgY29uc3QgU3RyaW5nOCYgbG9jYWxlKTsKLSAgICBzdGF0dXNfdCB2YWxpZGF0ZUxvY2FsaXphdGlvbnModm9pZCk7Ci0KLSAgICBzdGF0dXNfdCBmbGF0dGVuKEJ1bmRsZSosIGNvbnN0IHNwPEFhcHRGaWxlPiYgZGVzdCk7Ci0KLSAgICB2b2lkIHdyaXRlUHVibGljRGVmaW5pdGlvbnMoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsIEZJTEUqIGZwKTsKLQotICAgIHZpcnR1YWwgdWludDMyX3QgZ2V0Q3VzdG9tUmVzb3VyY2UoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVpbnQzMl90IGdldEN1c3RvbVJlc291cmNlV2l0aENyZWF0aW9uKGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgY3JlYXRlSWZOZWVkZWQpOwotICAgIHZpcnR1YWwgdWludDMyX3QgZ2V0UmVtYXBwZWRQYWNrYWdlKHVpbnQzMl90IG9yaWdQYWNrYWdlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0QXR0cmlidXRlVHlwZSh1aW50MzJfdCBhdHRySUQsIHVpbnQzMl90KiBvdXRUeXBlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0QXR0cmlidXRlTWluKHVpbnQzMl90IGF0dHJJRCwgdWludDMyX3QqIG91dE1pbik7Ci0gICAgdmlydHVhbCBib29sIGdldEF0dHJpYnV0ZU1heCh1aW50MzJfdCBhdHRySUQsIHVpbnQzMl90KiBvdXRNYXgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRBdHRyaWJ1dGVLZXlzKHVpbnQzMl90IGF0dHJJRCwgVmVjdG9yPFN0cmluZzE2Piogb3V0S2V5cyk7Ci0gICAgdmlydHVhbCBib29sIGdldEF0dHJpYnV0ZUVudW0odWludDMyX3QgYXR0cklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBuYW1lLCBzaXplX3QgbmFtZUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNfdmFsdWUqIG91dFZhbHVlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0QXR0cmlidXRlRmxhZ3ModWludDMyX3QgYXR0cklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogbmFtZSwgc2l6ZV90IG5hbWVMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc192YWx1ZSogb3V0VmFsdWUpOwotICAgIHZpcnR1YWwgdWludDMyX3QgZ2V0QXR0cmlidXRlTDEwTih1aW50MzJfdCBhdHRySUQpOwotCi0gICAgdmlydHVhbCBib29sIGdldExvY2FsaXphdGlvblNldHRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXJyb3Iodm9pZCogYWNjZXNzb3JDb29raWUsIGNvbnN0IGNoYXIqIGZtdCwgLi4uKTsKLQotICAgIHZvaWQgc2V0Q3VycmVudFhtbFBvcyhjb25zdCBTb3VyY2VQb3MmIHBvcykgeyBtQ3VycmVudFhtbFBvcyA9IHBvczsgfQotCi0gICAgY2xhc3MgSXRlbSB7Ci0gICAgcHVibGljOgotICAgICAgICBJdGVtKCkgOiBpc0lkKGZhbHNlKSwgZm9ybWF0KFJlc1RhYmxlX21hcDo6VFlQRV9BTlkpLCBiYWdLZXlJZCgwKSwgZXZhbHVhdGluZyhmYWxzZSkKLSAgICAgICAgICAgIHsgbWVtc2V0KCZwYXJzZWRWYWx1ZSwgMCwgc2l6ZW9mKHBhcnNlZFZhbHVlKSk7IH0KLSAgICAgICAgSXRlbShjb25zdCBTb3VyY2VQb3MmIHBvcywKLSAgICAgICAgICAgICBib29sIF9pc0lkLAotICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBfdmFsdWUsCi0gICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZ1Bvb2w6OmVudHJ5X3N0eWxlX3NwYW4+KiBfc3R5bGUgPSBOVUxMLAotICAgICAgICAgICAgIGludDMyX3QgZm9ybWF0ID0gUmVzVGFibGVfbWFwOjpUWVBFX0FOWSk7Ci0gICAgICAgIEl0ZW0oY29uc3QgSXRlbSYgbykgOiBzb3VyY2VQb3Moby5zb3VyY2VQb3MpLAotICAgICAgICAgICAgaXNJZChvLmlzSWQpLCB2YWx1ZShvLnZhbHVlKSwgc3R5bGUoby5zdHlsZSksCi0gICAgICAgICAgICBmb3JtYXQoby5mb3JtYXQpLCBiYWdLZXlJZChvLmJhZ0tleUlkKSwgZXZhbHVhdGluZyhmYWxzZSkgewotICAgICAgICAgICAgbWVtc2V0KCZwYXJzZWRWYWx1ZSwgMCwgc2l6ZW9mKHBhcnNlZFZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgfkl0ZW0oKSB7IH0KLQotICAgICAgICBJdGVtJiBvcGVyYXRvcj0oY29uc3QgSXRlbSYgbykgewotICAgICAgICAgICAgc291cmNlUG9zID0gby5zb3VyY2VQb3M7Ci0gICAgICAgICAgICBpc0lkID0gby5pc0lkOwotICAgICAgICAgICAgdmFsdWUgPSBvLnZhbHVlOwotICAgICAgICAgICAgc3R5bGUgPSBvLnN0eWxlOwotICAgICAgICAgICAgZm9ybWF0ID0gby5mb3JtYXQ7Ci0gICAgICAgICAgICBiYWdLZXlJZCA9IG8uYmFnS2V5SWQ7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG8ucGFyc2VkVmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBTb3VyY2VQb3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUG9zOwotICAgICAgICBtdXRhYmxlIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJZDsKLSAgICAgICAgU3RyaW5nMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOwotICAgICAgICBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4gICAgc3R5bGU7Ci0gICAgICAgIGludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ7Ci0gICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWdLZXlJZDsKLSAgICAgICAgbXV0YWJsZSBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRpbmc7Ci0gICAgICAgIFJlc192YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZTsKLSAgICB9OwotCi0gICAgY2xhc3MgRW50cnkgOiBwdWJsaWMgUmVmQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBFbnRyeShjb25zdCBTdHJpbmcxNiYgbmFtZSwgY29uc3QgU291cmNlUG9zJiBwb3MpCi0gICAgICAgICAgICA6IG1OYW1lKG5hbWUpLCBtVHlwZShUWVBFX1VOS05PV04pLAotICAgICAgICAgICAgICBtSXRlbUZvcm1hdChSZXNUYWJsZV9tYXA6OlRZUEVfQU5ZKSwgbU5hbWVJbmRleCgtMSksIG1Qb3MocG9zKQotICAgICAgICB7IH0KLSAgICAgICAgdmlydHVhbCB+RW50cnkoKSB7IH0KLQotICAgICAgICBlbnVtIHR5cGUgewotICAgICAgICAgICAgVFlQRV9VTktOT1dOID0gMCwKLSAgICAgICAgICAgIFRZUEVfSVRFTSwKLSAgICAgICAgICAgIFRZUEVfQkFHCi0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcxNiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbU5hbWU7IH0KLSAgICAgICAgdHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KLQotICAgICAgICB2b2lkIHNldFBhcmVudChjb25zdCBTdHJpbmcxNiYgcGFyZW50KSB7IG1QYXJlbnQgPSBwYXJlbnQ7IH0KLSAgICAgICAgU3RyaW5nMTYgZ2V0UGFyZW50KCkgY29uc3QgeyByZXR1cm4gbVBhcmVudDsgfQotCi0gICAgICAgIHN0YXR1c190IG1ha2VJdEFCYWcoY29uc3QgU291cmNlUG9zJiBzb3VyY2VQb3MpOwotCi0gICAgICAgIHN0YXR1c190IGVtcHR5QmFnKGNvbnN0IFNvdXJjZVBvcyYgc291cmNlUG9zKTsKLSAKLSAgICAgICAgc3RhdHVzX3Qgc2V0SXRlbShjb25zdCBTb3VyY2VQb3MmIHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZ1Bvb2w6OmVudHJ5X3N0eWxlX3NwYW4+KiBzdHlsZSA9IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBmb3JtYXQgPSBSZXNUYWJsZV9tYXA6OlRZUEVfQU5ZLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgb3ZlcndyaXRlID0gZmFsc2UpOwotCi0gICAgICAgIHN0YXR1c190IGFkZFRvQmFnKGNvbnN0IFNvdXJjZVBvcyYgcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYga2V5LCBjb25zdCBTdHJpbmcxNiYgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmdQb29sOjplbnRyeV9zdHlsZV9zcGFuPiogc3R5bGUgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlcGxhY2U9ZmFsc2UsIGJvb2wgaXNJZCA9IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGZvcm1hdCA9IFJlc1RhYmxlX21hcDo6VFlQRV9BTlkpOwotCi0gICAgICAgIC8vIEluZGV4IG9mIHRoZSBlbnRyeSdzIG5hbWUgc3RyaW5nIGluIHRoZSBrZXkgcG9vbC4KLSAgICAgICAgaW50MzJfdCBnZXROYW1lSW5kZXgoKSBjb25zdCB7IHJldHVybiBtTmFtZUluZGV4OyB9Ci0gICAgICAgIHZvaWQgc2V0TmFtZUluZGV4KGludDMyX3QgaW5kZXgpIHsgbU5hbWVJbmRleCA9IGluZGV4OyB9Ci0KLSAgICAgICAgY29uc3QgSXRlbSogZ2V0SXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlID09IFRZUEVfSVRFTSA/ICZtSXRlbSA6IE5VTEw7IH0KLSAgICAgICAgY29uc3QgS2V5ZWRWZWN0b3I8U3RyaW5nMTYsIEl0ZW0+JiBnZXRCYWcoKSBjb25zdCB7IHJldHVybiBtQmFnOyB9Ci0KLSAgICAgICAgc3RhdHVzX3QgZ2VuZXJhdGVBdHRyaWJ1dGVzKFJlc291cmNlVGFibGUqIHRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UpOwotCi0gICAgICAgIHN0YXR1c190IGFzc2lnblJlc291cmNlSWRzKFJlc291cmNlVGFibGUqIHRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgcGFja2FnZSk7Ci0KLSAgICAgICAgc3RhdHVzX3QgcHJlcGFyZUZsYXR0ZW4oU3RyaW5nUG9vbCogc3RyaW5ncywgUmVzb3VyY2VUYWJsZSogdGFibGUsCi0gICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4KiBjb25maWdUeXBlTmFtZSwgY29uc3QgQ29uZmlnRGVzY3JpcHRpb24qIGNvbmZpZyk7Ci0KLSAgICAgICAgc3RhdHVzX3QgcmVtYXBTdHJpbmdWYWx1ZShTdHJpbmdQb29sKiBzdHJpbmdzKTsKLQotICAgICAgICBzc2l6ZV90IGZsYXR0ZW4oQnVuZGxlKiwgY29uc3Qgc3A8QWFwdEZpbGU+JiBkYXRhLCBib29sIGlzUHVibGljKTsKLQotICAgICAgICBjb25zdCBTb3VyY2VQb3MmIGdldFBvcygpIGNvbnN0IHsgcmV0dXJuIG1Qb3M7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFN0cmluZzE2IG1OYW1lOwotICAgICAgICBTdHJpbmcxNiBtUGFyZW50OwotICAgICAgICB0eXBlIG1UeXBlOwotICAgICAgICBJdGVtIG1JdGVtOwotICAgICAgICBpbnQzMl90IG1JdGVtRm9ybWF0OwotICAgICAgICBLZXllZFZlY3RvcjxTdHJpbmcxNiwgSXRlbT4gbUJhZzsKLSAgICAgICAgaW50MzJfdCBtTmFtZUluZGV4OwotICAgICAgICB1aW50MzJfdCBtUGFyZW50SWQ7Ci0gICAgICAgIFNvdXJjZVBvcyBtUG9zOwotICAgIH07Ci0gICAgCi0gICAgY2xhc3MgQ29uZmlnTGlzdCA6IHB1YmxpYyBSZWZCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENvbmZpZ0xpc3QoY29uc3QgU3RyaW5nMTYmIG5hbWUsIGNvbnN0IFNvdXJjZVBvcyYgcG9zKQotICAgICAgICAgICAgOiBtTmFtZShuYW1lKSwgbVBvcyhwb3MpLCBtUHVibGljKGZhbHNlKSwgbUVudHJ5SW5kZXgoLTEpIHsgfQotICAgICAgICB2aXJ0dWFsIH5Db25maWdMaXN0KCkgeyB9Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcxNiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbU5hbWU7IH0KLSAgICAgICAgY29uc3QgU291cmNlUG9zJiBnZXRQb3MoKSBjb25zdCB7IHJldHVybiBtUG9zOyB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGFwcGVuZENvbW1lbnQoY29uc3QgU3RyaW5nMTYmIGNvbW1lbnQsIGJvb2wgb25seUlmRW1wdHkgPSBmYWxzZSk7Ci0gICAgICAgIGNvbnN0IFN0cmluZzE2JiBnZXRDb21tZW50KCkgY29uc3QgeyByZXR1cm4gbUNvbW1lbnQ7IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgYXBwZW5kVHlwZUNvbW1lbnQoY29uc3QgU3RyaW5nMTYmIGNvbW1lbnQpOwotICAgICAgICBjb25zdCBTdHJpbmcxNiYgZ2V0VHlwZUNvbW1lbnQoKSBjb25zdCB7IHJldHVybiBtVHlwZUNvbW1lbnQ7IH0KLSAgICAgICAgCi0gICAgICAgIC8vIEluZGV4IG9mIHRoaXMgZW50cnkgaW4gaXRzIFR5cGUuCi0gICAgICAgIGludDMyX3QgZ2V0RW50cnlJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1FbnRyeUluZGV4OyB9Ci0gICAgICAgIHZvaWQgc2V0RW50cnlJbmRleChpbnQzMl90IGluZGV4KSB7IG1FbnRyeUluZGV4ID0gaW5kZXg7IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0UHVibGljKGJvb2wgcHViKSB7IG1QdWJsaWMgPSBwdWI7IH0KLSAgICAgICAgYm9vbCBnZXRQdWJsaWMoKSBjb25zdCB7IHJldHVybiBtUHVibGljOyB9Ci0gICAgICAgIHZvaWQgc2V0UHVibGljU291cmNlUG9zKGNvbnN0IFNvdXJjZVBvcyYgcG9zKSB7IG1QdWJsaWNTb3VyY2VQb3MgPSBwb3M7IH0KLSAgICAgICAgY29uc3QgU291cmNlUG9zJiBnZXRQdWJsaWNTb3VyY2VQb3MoKSB7IHJldHVybiBtUHVibGljU291cmNlUG9zOyB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGFkZEVudHJ5KGNvbnN0IFJlc1RhYmxlX2NvbmZpZyYgY29uZmlnLCBjb25zdCBzcDxFbnRyeT4mIGVudHJ5KSB7Ci0gICAgICAgICAgICBtRW50cmllcy5hZGQoY29uZmlnLCBlbnRyeSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0IERlZmF1bHRLZXllZFZlY3RvcjxDb25maWdEZXNjcmlwdGlvbiwgc3A8RW50cnk+ID4mIGdldEVudHJpZXMoKSBjb25zdCB7IHJldHVybiBtRW50cmllczsgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IFN0cmluZzE2IG1OYW1lOwotICAgICAgICBjb25zdCBTb3VyY2VQb3MgbVBvczsKLSAgICAgICAgU3RyaW5nMTYgbUNvbW1lbnQ7Ci0gICAgICAgIFN0cmluZzE2IG1UeXBlQ29tbWVudDsKLSAgICAgICAgYm9vbCBtUHVibGljOwotICAgICAgICBTb3VyY2VQb3MgbVB1YmxpY1NvdXJjZVBvczsKLSAgICAgICAgaW50MzJfdCBtRW50cnlJbmRleDsKLSAgICAgICAgRGVmYXVsdEtleWVkVmVjdG9yPENvbmZpZ0Rlc2NyaXB0aW9uLCBzcDxFbnRyeT4gPiBtRW50cmllczsKLSAgICB9OwotICAgIAotICAgIGNsYXNzIFB1YmxpYyB7Ci0gICAgcHVibGljOgotICAgICAgICBQdWJsaWMoKSA6IHNvdXJjZVBvcygpLCBpZGVudCgwKSB7IH0KLSAgICAgICAgUHVibGljKGNvbnN0IFNvdXJjZVBvcyYgcG9zLAotICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIF9jb21tZW50LAotICAgICAgICAgICAgICAgdWludDMyX3QgX2lkZW50KQotICAgICAgICAgICAgOiBzb3VyY2VQb3MocG9zKSwKLSAgICAgICAgICAgIGNvbW1lbnQoX2NvbW1lbnQpLCBpZGVudChfaWRlbnQpIHsgfQotICAgICAgICBQdWJsaWMoY29uc3QgUHVibGljJiBvKSA6IHNvdXJjZVBvcyhvLnNvdXJjZVBvcyksCi0gICAgICAgICAgICBjb21tZW50KG8uY29tbWVudCksIGlkZW50KG8uaWRlbnQpIHsgfQotICAgICAgICB+UHVibGljKCkgeyB9Ci0gICAgICAgIAotICAgICAgICBQdWJsaWMmIG9wZXJhdG9yPShjb25zdCBQdWJsaWMmIG8pIHsKLSAgICAgICAgICAgIHNvdXJjZVBvcyA9IG8uc291cmNlUG9zOwotICAgICAgICAgICAgY29tbWVudCA9IG8uY29tbWVudDsKLSAgICAgICAgICAgIGlkZW50ID0gby5pZGVudDsKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU291cmNlUG9zICAgc291cmNlUG9zOwotICAgICAgICBTdHJpbmcxNiAgICBjb21tZW50OwotICAgICAgICB1aW50MzJfdCAgICBpZGVudDsKLSAgICB9OwotICAgIAotICAgIGNsYXNzIFR5cGUgOiBwdWJsaWMgUmVmQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBUeXBlKGNvbnN0IFN0cmluZzE2JiBuYW1lLCBjb25zdCBTb3VyY2VQb3MmIHBvcykKLSAgICAgICAgICAgICAgICA6IG1OYW1lKG5hbWUpLCBtRmlyc3RQdWJsaWNTb3VyY2VQb3MoTlVMTCksIG1QdWJsaWNJbmRleCgtMSksIG1JbmRleCgtMSksIG1Qb3MocG9zKQotICAgICAgICB7IH0KLSAgICAgICAgdmlydHVhbCB+VHlwZSgpIHsgZGVsZXRlIG1GaXJzdFB1YmxpY1NvdXJjZVBvczsgfQotCi0gICAgICAgIHN0YXR1c190IGFkZFB1YmxpYyhjb25zdCBTb3VyY2VQb3MmIHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgaWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIHZvaWQgY2FuQWRkRW50cnkoY29uc3QgU3RyaW5nMTYmIG5hbWUpOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nMTYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1OYW1lOyB9Ci0gICAgICAgIHNwPEVudHJ5PiBnZXRFbnRyeShjb25zdCBTdHJpbmcxNiYgZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb3VyY2VQb3MmIHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogY29uZmlnID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZG9TZXRJbmRleCA9IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvdmVybGF5ID0gZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9BZGRPdmVybGF5ID0gZmFsc2UpOwotCi0gICAgICAgIGNvbnN0IFNvdXJjZVBvcyYgZ2V0Rmlyc3RQdWJsaWNTb3VyY2VQb3MoKSBjb25zdCB7IHJldHVybiAqbUZpcnN0UHVibGljU291cmNlUG9zOyB9Ci0KLSAgICAgICAgaW50MzJfdCBnZXRQdWJsaWNJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1QdWJsaWNJbmRleDsgfQotCi0gICAgICAgIGludDMyX3QgZ2V0SW5kZXgoKSBjb25zdCB7IHJldHVybiBtSW5kZXg7IH0KLSAgICAgICAgdm9pZCBzZXRJbmRleChpbnQzMl90IGluZGV4KSB7IG1JbmRleCA9IGluZGV4OyB9Ci0KLSAgICAgICAgc3RhdHVzX3QgYXBwbHlQdWJsaWNFbnRyeU9yZGVyKCk7Ci0KLSAgICAgICAgY29uc3QgU29ydGVkVmVjdG9yPENvbmZpZ0Rlc2NyaXB0aW9uPiYgZ2V0VW5pcXVlQ29uZmlncygpIGNvbnN0IHsgcmV0dXJuIG1VbmlxdWVDb25maWdzOyB9Ci0gICAgICAgIAotICAgICAgICBjb25zdCBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nMTYsIHNwPENvbmZpZ0xpc3Q+ID4mIGdldENvbmZpZ3MoKSBjb25zdCB7IHJldHVybiBtQ29uZmlnczsgfQotICAgICAgICBjb25zdCBWZWN0b3I8c3A8Q29uZmlnTGlzdD4gPiYgZ2V0T3JkZXJlZENvbmZpZ3MoKSBjb25zdCB7IHJldHVybiBtT3JkZXJlZENvbmZpZ3M7IH0KLQotICAgICAgICBjb25zdCBTb3J0ZWRWZWN0b3I8U3RyaW5nMTY+JiBnZXRDYW5BZGRFbnRyaWVzKCkgY29uc3QgeyByZXR1cm4gbUNhbkFkZEVudHJpZXM7IH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0IFNvdXJjZVBvcyYgZ2V0UG9zKCkgY29uc3QgeyByZXR1cm4gbVBvczsgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIFN0cmluZzE2IG1OYW1lOwotICAgICAgICBTb3VyY2VQb3MqIG1GaXJzdFB1YmxpY1NvdXJjZVBvczsKLSAgICAgICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzE2LCBQdWJsaWM+IG1QdWJsaWM7Ci0gICAgICAgIFNvcnRlZFZlY3RvcjxDb25maWdEZXNjcmlwdGlvbj4gbVVuaXF1ZUNvbmZpZ3M7Ci0gICAgICAgIERlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmcxNiwgc3A8Q29uZmlnTGlzdD4gPiBtQ29uZmlnczsKLSAgICAgICAgVmVjdG9yPHNwPENvbmZpZ0xpc3Q+ID4gbU9yZGVyZWRDb25maWdzOwotICAgICAgICBTb3J0ZWRWZWN0b3I8U3RyaW5nMTY+IG1DYW5BZGRFbnRyaWVzOwotICAgICAgICBpbnQzMl90IG1QdWJsaWNJbmRleDsKLSAgICAgICAgaW50MzJfdCBtSW5kZXg7Ci0gICAgICAgIFNvdXJjZVBvcyBtUG9zOwotICAgIH07Ci0KLSAgICBjbGFzcyBQYWNrYWdlIDogcHVibGljIFJlZkJhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgUGFja2FnZShjb25zdCBTdHJpbmcxNiYgbmFtZSwgc3NpemVfdCBpbmNsdWRlZElkPS0xKTsKLSAgICAgICAgdmlydHVhbCB+UGFja2FnZSgpIHsgfQotCi0gICAgICAgIFN0cmluZzE2IGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBtTmFtZTsgfQotICAgICAgICBzcDxUeXBlPiBnZXRUeXBlKGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvdXJjZVBvcyYgcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZG9TZXRJbmRleCA9IGZhbHNlKTsKLQotICAgICAgICBzc2l6ZV90IGdldEFzc2lnbmVkSWQoKSBjb25zdCB7IHJldHVybiBtSW5jbHVkZWRJZDsgfQotCi0gICAgICAgIGNvbnN0IFJlc1N0cmluZ1Bvb2wmIGdldFR5cGVTdHJpbmdzKCkgY29uc3QgeyByZXR1cm4gbVR5cGVTdHJpbmdzOyB9Ci0gICAgICAgIHVpbnQzMl90IGluZGV4T2ZUeXBlU3RyaW5nKGNvbnN0IFN0cmluZzE2JiBzKSBjb25zdCB7IHJldHVybiBtVHlwZVN0cmluZ3NNYXBwaW5nLnZhbHVlRm9yKHMpOyB9Ci0gICAgICAgIGNvbnN0IHNwPEFhcHRGaWxlPiBnZXRUeXBlU3RyaW5nc0RhdGEoKSBjb25zdCB7IHJldHVybiBtVHlwZVN0cmluZ3NEYXRhOyB9Ci0gICAgICAgIHN0YXR1c190IHNldFR5cGVTdHJpbmdzKGNvbnN0IHNwPEFhcHRGaWxlPiYgZGF0YSk7Ci0KLSAgICAgICAgY29uc3QgUmVzU3RyaW5nUG9vbCYgZ2V0S2V5U3RyaW5ncygpIGNvbnN0IHsgcmV0dXJuIG1LZXlTdHJpbmdzOyB9Ci0gICAgICAgIHVpbnQzMl90IGluZGV4T2ZLZXlTdHJpbmcoY29uc3QgU3RyaW5nMTYmIHMpIGNvbnN0IHsgcmV0dXJuIG1LZXlTdHJpbmdzTWFwcGluZy52YWx1ZUZvcihzKTsgfQotICAgICAgICBjb25zdCBzcDxBYXB0RmlsZT4gZ2V0S2V5U3RyaW5nc0RhdGEoKSBjb25zdCB7IHJldHVybiBtS2V5U3RyaW5nc0RhdGE7IH0KLSAgICAgICAgc3RhdHVzX3Qgc2V0S2V5U3RyaW5ncyhjb25zdCBzcDxBYXB0RmlsZT4mIGRhdGEpOwotCi0gICAgICAgIHN0YXR1c190IGFwcGx5UHVibGljVHlwZU9yZGVyKCk7Ci0KLSAgICAgICAgY29uc3QgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzE2LCBzcDxUeXBlPiA+JiBnZXRUeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1UeXBlczsgfQotICAgICAgICBjb25zdCBWZWN0b3I8c3A8VHlwZT4gPiYgZ2V0T3JkZXJlZFR5cGVzKCkgY29uc3QgeyByZXR1cm4gbU9yZGVyZWRUeXBlczsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdHVzX3Qgc2V0U3RyaW5ncyhjb25zdCBzcDxBYXB0RmlsZT4mIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzU3RyaW5nUG9vbCogc3RyaW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nMTYsIHVpbnQzMl90PiogbWFwcGluZ3MpOwotCi0gICAgICAgIGNvbnN0IFN0cmluZzE2IG1OYW1lOwotICAgICAgICBjb25zdCBzc2l6ZV90IG1JbmNsdWRlZElkOwotICAgICAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nMTYsIHNwPFR5cGU+ID4gbVR5cGVzOwotICAgICAgICBWZWN0b3I8c3A8VHlwZT4gPiBtT3JkZXJlZFR5cGVzOwotICAgICAgICBzcDxBYXB0RmlsZT4gbVR5cGVTdHJpbmdzRGF0YTsKLSAgICAgICAgc3A8QWFwdEZpbGU+IG1LZXlTdHJpbmdzRGF0YTsKLSAgICAgICAgUmVzU3RyaW5nUG9vbCBtVHlwZVN0cmluZ3M7Ci0gICAgICAgIFJlc1N0cmluZ1Bvb2wgbUtleVN0cmluZ3M7Ci0gICAgICAgIERlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmcxNiwgdWludDMyX3Q+IG1UeXBlU3RyaW5nc01hcHBpbmc7Ci0gICAgICAgIERlZmF1bHRLZXllZFZlY3RvcjxTdHJpbmcxNiwgdWludDMyX3Q+IG1LZXlTdHJpbmdzTWFwcGluZzsKLSAgICB9OwotCi1wcml2YXRlOgotICAgIHZvaWQgd3JpdGVQdWJsaWNEZWZpbml0aW9ucyhjb25zdCBTdHJpbmcxNiYgcGFja2FnZSwgRklMRSogZnAsIGJvb2wgcHViKTsKLSAgICBzcDxQYWNrYWdlPiBnZXRQYWNrYWdlKGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlKTsKLSAgICBzcDxUeXBlPiBnZXRUeXBlKGNvbnN0IFN0cmluZzE2JiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBTb3VyY2VQb3MmIHBvcywKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgZG9TZXRJbmRleCA9IGZhbHNlKTsKLSAgICBzcDxFbnRyeT4gZ2V0RW50cnkoY29uc3QgU3RyaW5nMTYmIHBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZzE2JiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU291cmNlUG9zJiBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wgb3ZlcmxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzVGFibGVfY29uZmlnKiBjb25maWcgPSBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICBib29sIGRvU2V0SW5kZXggPSBmYWxzZSk7Ci0gICAgc3A8Y29uc3QgRW50cnk+IGdldEVudHJ5KHVpbnQzMl90IHJlc0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNUYWJsZV9jb25maWcqIGNvbmZpZyA9IE5VTEwpIGNvbnN0OwotICAgIGNvbnN0IEl0ZW0qIGdldEl0ZW0odWludDMyX3QgcmVzSUQsIHVpbnQzMl90IGF0dHJJRCkgY29uc3Q7Ci0gICAgYm9vbCBnZXRJdGVtVmFsdWUodWludDMyX3QgcmVzSUQsIHVpbnQzMl90IGF0dHJJRCwKLSAgICAgICAgICAgICAgICAgICAgICBSZXNfdmFsdWUqIG91dFZhbHVlKTsKLQotCi0gICAgU3RyaW5nMTYgbUFzc2V0c1BhY2thZ2U7Ci0gICAgc3A8QWFwdEFzc2V0cz4gbUFzc2V0czsKLSAgICBEZWZhdWx0S2V5ZWRWZWN0b3I8U3RyaW5nMTYsIHNwPFBhY2thZ2U+ID4gbVBhY2thZ2VzOwotICAgIFZlY3RvcjxzcDxQYWNrYWdlPiA+IG1PcmRlcmVkUGFja2FnZXM7Ci0gICAgdWludDMyX3QgbU5leHRQYWNrYWdlSWQ7Ci0gICAgYm9vbCBtSGF2ZUFwcFBhY2thZ2U7Ci0gICAgYm9vbCBtSXNBcHBQYWNrYWdlOwotICAgIHNpemVfdCBtTnVtTG9jYWw7Ci0gICAgU291cmNlUG9zIG1DdXJyZW50WG1sUG9zOwotICAgIEJ1bmRsZSogbUJ1bmRsZTsKLSAgICAKLSAgICAvLyBrZXkgPSBzdHJpbmcgcmVzb3VyY2UgbmFtZSwgdmFsdWUgPSBzZXQgb2YgbG9jYWxlcyBpbiB3aGljaCB0aGF0IG5hbWUgaXMgZGVmaW5lZAotICAgIG1hcDxTdHJpbmcxNiwgc2V0PFN0cmluZzg+ID4gbUxvY2FsaXphdGlvbnM7Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvU291cmNlUG9zLmNwcCBiL3Rvb2xzL2FhcHQvU291cmNlUG9zLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJhOTIxYy4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L1NvdXJjZVBvcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotI2luY2x1ZGUgIlNvdXJjZVBvcy5oIgotCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi0KLS8vIEVycm9yUG9zCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RydWN0IEVycm9yUG9zCi17Ci0gICAgU3RyaW5nOCBmaWxlOwotICAgIGludCBsaW5lOwotICAgIFN0cmluZzggZXJyb3I7Ci0gICAgYm9vbCBmYXRhbDsKLQotICAgIEVycm9yUG9zKCk7Ci0gICAgRXJyb3JQb3MoY29uc3QgRXJyb3JQb3MmIHRoYXQpOwotICAgIEVycm9yUG9zKGNvbnN0IFN0cmluZzgmIGZpbGUsIGludCBsaW5lLCBjb25zdCBTdHJpbmc4JiBlcnJvciwgYm9vbCBmYXRhbCk7Ci0gICAgfkVycm9yUG9zKCk7Ci0gICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgRXJyb3JQb3MmIHJocykgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEVycm9yUG9zJiByaHMpIGNvbnN0OwotICAgIEVycm9yUG9zJiBvcGVyYXRvcj0oY29uc3QgRXJyb3JQb3MmIHJocyk7Ci0KLSAgICB2b2lkIHByaW50KEZJTEUqIHRvKSBjb25zdDsKLX07Ci0KLXN0YXRpYyB2ZWN0b3I8RXJyb3JQb3M+IGdfZXJyb3JzOwotCi1FcnJvclBvczo6RXJyb3JQb3MoKQotICAgIDpsaW5lKC0xKSwgZmF0YWwoZmFsc2UpCi17Ci19Ci0KLUVycm9yUG9zOjpFcnJvclBvcyhjb25zdCBFcnJvclBvcyYgdGhhdCkKLSAgICA6ZmlsZSh0aGF0LmZpbGUpLAotICAgICBsaW5lKHRoYXQubGluZSksCi0gICAgIGVycm9yKHRoYXQuZXJyb3IpLAotICAgICBmYXRhbCh0aGF0LmZhdGFsKQotewotfQotCi1FcnJvclBvczo6RXJyb3JQb3MoY29uc3QgU3RyaW5nOCYgZiwgaW50IGwsIGNvbnN0IFN0cmluZzgmIGUsIGJvb2wgZmF0KQotICAgIDpmaWxlKGYpLAotICAgICBsaW5lKGwpLAotICAgICBlcnJvcihlKSwKLSAgICAgZmF0YWwoZmF0KQotewotfQotCi1FcnJvclBvczo6fkVycm9yUG9zKCkKLXsKLX0KLQotYm9vbAotRXJyb3JQb3M6Om9wZXJhdG9yPChjb25zdCBFcnJvclBvcyYgcmhzKSBjb25zdAotewotICAgIGlmICh0aGlzLT5maWxlIDwgcmhzLmZpbGUpIHJldHVybiB0cnVlOwotICAgIGlmICh0aGlzLT5maWxlID09IHJocy5maWxlKSB7Ci0gICAgICAgIGlmICh0aGlzLT5saW5lIDwgcmhzLmxpbmUpIHJldHVybiB0cnVlOwotICAgICAgICBpZiAodGhpcy0+bGluZSA9PSByaHMubGluZSkgewotICAgICAgICAgICAgaWYgKHRoaXMtPmVycm9yIDwgcmhzLmVycm9yKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wKLUVycm9yUG9zOjpvcGVyYXRvcj09KGNvbnN0IEVycm9yUG9zJiByaHMpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRoaXMtPmZpbGUgPT0gcmhzLmZpbGUKLSAgICAgICAgICAgICYmIHRoaXMtPmxpbmUgPT0gcmhzLmxpbmUKLSAgICAgICAgICAgICYmIHRoaXMtPmVycm9yID09IHJocy5lcnJvcjsKLX0KLQotRXJyb3JQb3MmCi1FcnJvclBvczo6b3BlcmF0b3I9KGNvbnN0IEVycm9yUG9zJiByaHMpCi17Ci0gICAgdGhpcy0+ZmlsZSA9IHJocy5maWxlOwotICAgIHRoaXMtPmxpbmUgPSByaHMubGluZTsKLSAgICB0aGlzLT5lcnJvciA9IHJocy5lcnJvcjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLXZvaWQKLUVycm9yUG9zOjpwcmludChGSUxFKiB0bykgY29uc3QKLXsKLSAgICBjb25zdCBjaGFyKiB0eXBlID0gZmF0YWwgPyAiZXJyb3I6IiA6ICJ3YXJuaW5nOiI7Ci0gICAgCi0gICAgaWYgKHRoaXMtPmxpbmUgPj0gMCkgewotICAgICAgICBmcHJpbnRmKHRvLCAiJXM6JWQ6ICVzICVzXG4iLCB0aGlzLT5maWxlLnN0cmluZygpLCB0aGlzLT5saW5lLCB0eXBlLCB0aGlzLT5lcnJvci5zdHJpbmcoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnByaW50Zih0bywgIiVzOiAlcyAlc1xuIiwgdGhpcy0+ZmlsZS5zdHJpbmcoKSwgdHlwZSwgdGhpcy0+ZXJyb3Iuc3RyaW5nKCkpOwotICAgIH0KLX0KLQotLy8gU291cmNlUG9zCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotU291cmNlUG9zOjpTb3VyY2VQb3MoY29uc3QgU3RyaW5nOCYgZiwgaW50IGwpCi0gICAgOiBmaWxlKGYpLCBsaW5lKGwpCi17Ci19Ci0KLVNvdXJjZVBvczo6U291cmNlUG9zKGNvbnN0IFNvdXJjZVBvcyYgdGhhdCkKLSAgICA6IGZpbGUodGhhdC5maWxlKSwgbGluZSh0aGF0LmxpbmUpCi17Ci19Ci0KLVNvdXJjZVBvczo6U291cmNlUG9zKCkKLSAgICA6IGZpbGUoIj8/PyIsIDApLCBsaW5lKC0xKQotewotfQotCi1Tb3VyY2VQb3M6On5Tb3VyY2VQb3MoKQotewotfQotCi1pbnQKLVNvdXJjZVBvczo6ZXJyb3IoY29uc3QgY2hhciogZm10LCAuLi4pIGNvbnN0Ci17Ci0gICAgaW50IHJldHZhbD0wOwotICAgIGNoYXIgYnVmWzEwMjRdOwotICAgIHZhX2xpc3QgYXA7Ci0gICAgdmFfc3RhcnQoYXAsIGZtdCk7Ci0gICAgcmV0dmFsID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOwotICAgIHZhX2VuZChhcCk7Ci0gICAgY2hhciogcCA9IGJ1ZiArIHJldHZhbCAtIDE7Ci0gICAgd2hpbGUgKHAgPiBidWYgJiYgKnAgPT0gJ1xuJykgewotICAgICAgICAqcCA9ICdcMCc7Ci0gICAgICAgIHAtLTsKLSAgICB9Ci0gICAgZ19lcnJvcnMucHVzaF9iYWNrKEVycm9yUG9zKHRoaXMtPmZpbGUsIHRoaXMtPmxpbmUsIFN0cmluZzgoYnVmKSwgdHJ1ZSkpOwotICAgIHJldHVybiByZXR2YWw7Ci19Ci0KLWludAotU291cmNlUG9zOjp3YXJuaW5nKGNvbnN0IGNoYXIqIGZtdCwgLi4uKSBjb25zdAotewotICAgIGludCByZXR2YWw9MDsKLSAgICBjaGFyIGJ1ZlsxMDI0XTsKLSAgICB2YV9saXN0IGFwOwotICAgIHZhX3N0YXJ0KGFwLCBmbXQpOwotICAgIHJldHZhbCA9IHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKLSAgICB2YV9lbmQoYXApOwotICAgIGNoYXIqIHAgPSBidWYgKyByZXR2YWwgLSAxOwotICAgIHdoaWxlIChwID4gYnVmICYmICpwID09ICdcbicpIHsKLSAgICAgICAgKnAgPSAnXDAnOwotICAgICAgICBwLS07Ci0gICAgfQotICAgIEVycm9yUG9zKHRoaXMtPmZpbGUsIHRoaXMtPmxpbmUsIFN0cmluZzgoYnVmKSwgZmFsc2UpLnByaW50KHN0ZGVycik7Ci0gICAgcmV0dXJuIHJldHZhbDsKLX0KLQotYm9vbAotU291cmNlUG9zOjpoYXNFcnJvcnMoKQotewotICAgIHJldHVybiBnX2Vycm9ycy5zaXplKCkgPiAwOwotfQotCi12b2lkCi1Tb3VyY2VQb3M6OnByaW50RXJyb3JzKEZJTEUqIHRvKQotewotICAgIHZlY3RvcjxFcnJvclBvcz46OmNvbnN0X2l0ZXJhdG9yIGl0OwotICAgIGZvciAoaXQ9Z19lcnJvcnMuYmVnaW4oKTsgaXQhPWdfZXJyb3JzLmVuZCgpOyBpdCsrKSB7Ci0gICAgICAgIGl0LT5wcmludCh0byk7Ci0gICAgfQotfQotCi0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9Tb3VyY2VQb3MuaCBiL3Rvb2xzL2FhcHQvU291cmNlUG9zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzZjcyYTkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9Tb3VyY2VQb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSNpZm5kZWYgU09VUkNFUE9TX0gKLSNkZWZpbmUgU09VUkNFUE9TX0gKLQotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotY2xhc3MgU291cmNlUG9zCi17Ci1wdWJsaWM6Ci0gICAgU3RyaW5nOCBmaWxlOwotICAgIGludCBsaW5lOwotCi0gICAgU291cmNlUG9zKGNvbnN0IFN0cmluZzgmIGYsIGludCBsKTsKLSAgICBTb3VyY2VQb3MoY29uc3QgU291cmNlUG9zJiB0aGF0KTsKLSAgICBTb3VyY2VQb3MoKTsKLSAgICB+U291cmNlUG9zKCk7Ci0KLSAgICBpbnQgZXJyb3IoY29uc3QgY2hhciogZm10LCAuLi4pIGNvbnN0OwotICAgIGludCB3YXJuaW5nKGNvbnN0IGNoYXIqIGZtdCwgLi4uKSBjb25zdDsKLQotICAgIHN0YXRpYyBib29sIGhhc0Vycm9ycygpOwotICAgIHN0YXRpYyB2b2lkIHByaW50RXJyb3JzKEZJTEUqIHRvKTsKLX07Ci0KLQotI2VuZGlmIC8vIFNPVVJDRVBPU19ICmRpZmYgLS1naXQgYS90b29scy9hYXB0L1N0cmluZ1Bvb2wuY3BwIGIvdG9vbHMvYWFwdC9TdHJpbmdQb29sLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU4YjM5MS4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L1N0cmluZ1Bvb2wuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTc0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gQnVpbGQgcmVzb3VyY2UgZmlsZXMgZnJvbSByYXcgYXNzZXRzLgotLy8KLQotI2luY2x1ZGUgIlN0cmluZ1Bvb2wuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVRhYmxlLmgiCi0KLSNpbmNsdWRlIDx1dGlscy9CeXRlT3JkZXIuaD4KLSNpbmNsdWRlIDx1dGlscy9Tb3J0ZWRWZWN0b3IuaD4KLSNpbmNsdWRlICJxc29ydF9yX2NvbXBhdC5oIgotCi0jaWYgSEFWRV9QUklOVEZfWkQKLSMgIGRlZmluZSBaRCAiJXpkIgotIyAgZGVmaW5lIFpEX1RZUEUgc3NpemVfdAotI2Vsc2UKLSMgIGRlZmluZSBaRCAiJWxkIgotIyAgZGVmaW5lIFpEX1RZUEUgbG9uZwotI2VuZGlmCi0KLSNkZWZpbmUgTk9JU1koeCkgLy94Ci0KLXZvaWQgc3RyY3B5MTZfaHRvZCh1aW50MTZfdCogZHN0LCBjb25zdCB1aW50MTZfdCogc3JjKQotewotICAgIHdoaWxlICgqc3JjKSB7Ci0gICAgICAgIGNoYXIxNl90IHMgPSBodG9kcygqc3JjKTsKLSAgICAgICAgKmRzdCsrID0gczsKLSAgICAgICAgc3JjKys7Ci0gICAgfQotICAgICpkc3QgPSAwOwotfQotCi12b2lkIHByaW50U3RyaW5nUG9vbChjb25zdCBSZXNTdHJpbmdQb29sKiBwb29sKQotewotICAgIFNvcnRlZFZlY3Rvcjxjb25zdCB2b2lkKj4gdW5pcXVlU3RyaW5nczsKLSAgICBjb25zdCBzaXplX3QgTiA9IHBvb2wtPnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgIGlmIChwb29sLT5pc1VURjgoKSkgewotICAgICAgICAgICAgdW5pcXVlU3RyaW5ncy5hZGQocG9vbC0+c3RyaW5nOEF0KGksICZsZW4pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVuaXF1ZVN0cmluZ3MuYWRkKHBvb2wtPnN0cmluZ0F0KGksICZsZW4pKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaW50ZigiU3RyaW5nIHBvb2wgb2YgIiBaRCAiIHVuaXF1ZSAlcyAlcyBzdHJpbmdzLCAiIFpEICIgZW50cmllcyBhbmQgIgotICAgICAgICAgICAgWkQgIiBzdHlsZXMgdXNpbmcgIiBaRCAiIGJ5dGVzOlxuIiwKLSAgICAgICAgICAgIChaRF9UWVBFKXVuaXF1ZVN0cmluZ3Muc2l6ZSgpLCBwb29sLT5pc1VURjgoKSA/ICJVVEYtOCIgOiAiVVRGLTE2IiwKLSAgICAgICAgICAgIHBvb2wtPmlzU29ydGVkKCkgPyAic29ydGVkIiA6ICJub24tc29ydGVkIiwKLSAgICAgICAgICAgIChaRF9UWVBFKU4sIChaRF9UWVBFKXBvb2wtPnN0eWxlQ291bnQoKSwgKFpEX1RZUEUpcG9vbC0+Ynl0ZXMoKSk7Ci0KLSAgICBjb25zdCBzaXplX3QgTlMgPSBwb29sLT5zaXplKCk7Ci0gICAgZm9yIChzaXplX3Qgcz0wOyBzPE5TOyBzKyspIHsKLSAgICAgICAgU3RyaW5nOCBzdHIgPSBwb29sLT5zdHJpbmc4T2JqZWN0QXQocyk7Ci0gICAgICAgIHByaW50ZigiU3RyaW5nICMiIFpEICI6ICVzXG4iLCAoWkRfVFlQRSkgcywgc3RyLnN0cmluZygpKTsKLSAgICB9Ci19Ci0KLVN0cmluZzggU3RyaW5nUG9vbDo6ZW50cnk6Om1ha2VDb25maWdzU3RyaW5nKCkgY29uc3QgewotICAgIFN0cmluZzggY29uZmlnU3RyKGNvbmZpZ1R5cGVOYW1lKTsKLSAgICBpZiAoY29uZmlnU3RyLnNpemUoKSA+IDApIGNvbmZpZ1N0ci5hcHBlbmQoIiAiKTsKLSAgICBpZiAoY29uZmlncy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGo9MDsgajxjb25maWdzLnNpemUoKTsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoaiA+IDApIGNvbmZpZ1N0ci5hcHBlbmQoIiwgIik7Ci0gICAgICAgICAgICBjb25maWdTdHIuYXBwZW5kKGNvbmZpZ3Nbal0udG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBjb25maWdTdHIgPSAiKG5vbmUpIjsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbmZpZ1N0cjsKLX0KLQotaW50IFN0cmluZ1Bvb2w6OmVudHJ5Ojpjb21wYXJlKGNvbnN0IGVudHJ5JiBvKSBjb25zdCB7Ci0gICAgLy8gU3RyaW5ncyB3aXRoIHN0eWxlcyBnbyBmaXJzdCwgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBzdHlsZXMgYXJyYXkuCi0gICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgdGhlc2Ugc3RyaW5ncy4KLSAgICBpZiAoaGFzU3R5bGVzKSB7Ci0gICAgICAgIHJldHVybiBvLmhhc1N0eWxlcyA/IDAgOiAtMTsKLSAgICB9Ci0gICAgaWYgKG8uaGFzU3R5bGVzKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8vIFNvcnQgdW5zdHlsZWQgc3RyaW5ncyBieSB0eXBlLCB0aGVuIGJ5IGxvZ2ljYWwgY29uZmlndXJhdGlvbi4KLSAgICBpbnQgY29tcCA9IGNvbmZpZ1R5cGVOYW1lLmNvbXBhcmUoby5jb25maWdUeXBlTmFtZSk7Ci0gICAgaWYgKGNvbXAgIT0gMCkgewotICAgICAgICByZXR1cm4gY29tcDsKLSAgICB9Ci0gICAgY29uc3Qgc2l6ZV90IExITiA9IGNvbmZpZ3Muc2l6ZSgpOwotICAgIGNvbnN0IHNpemVfdCBSSE4gPSBvLmNvbmZpZ3Muc2l6ZSgpOwotICAgIHNpemVfdCBpPTA7Ci0gICAgd2hpbGUgKGkgPCBMSE4gJiYgaSA8IFJITikgewotICAgICAgICBjb21wID0gY29uZmlnc1tpXS5jb21wYXJlTG9naWNhbChvLmNvbmZpZ3NbaV0pOwotICAgICAgICBpZiAoY29tcCAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gY29tcDsKLSAgICAgICAgfQotICAgICAgICBpKys7Ci0gICAgfQotICAgIGlmIChMSE4gPCBSSE4pIHJldHVybiAtMTsKLSAgICBlbHNlIGlmIChMSE4gPiBSSE4pIHJldHVybiAxOwotICAgIHJldHVybiAwOwotfQotCi1TdHJpbmdQb29sOjpTdHJpbmdQb29sKGJvb2wgdXRmOCkgOgotICAgICAgICBtVVRGOCh1dGY4KSwgbVZhbHVlcygtMSkKLXsKLX0KLQotc3NpemVfdCBTdHJpbmdQb29sOjphZGQoY29uc3QgU3RyaW5nMTYmIHZhbHVlLCBjb25zdCBWZWN0b3I8ZW50cnlfc3R5bGVfc3Bhbj4mIHNwYW5zLAotICAgICAgICBjb25zdCBTdHJpbmc4KiBjb25maWdUeXBlTmFtZSwgY29uc3QgUmVzVGFibGVfY29uZmlnKiBjb25maWcpCi17Ci0gICAgc3NpemVfdCByZXMgPSBhZGQodmFsdWUsIGZhbHNlLCBjb25maWdUeXBlTmFtZSwgY29uZmlnKTsKLSAgICBpZiAocmVzID49IDApIHsKLSAgICAgICAgYWRkU3R5bGVTcGFucyhyZXMsIHNwYW5zKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotc3NpemVfdCBTdHJpbmdQb29sOjphZGQoY29uc3QgU3RyaW5nMTYmIHZhbHVlLAotICAgICAgICBib29sIG1lcmdlRHVwbGljYXRlcywgY29uc3QgU3RyaW5nOCogY29uZmlnVHlwZU5hbWUsIGNvbnN0IFJlc1RhYmxlX2NvbmZpZyogY29uZmlnKQotewotICAgIHNzaXplX3QgdmlkeCA9IG1WYWx1ZXMuaW5kZXhPZktleSh2YWx1ZSk7Ci0gICAgc3NpemVfdCBwb3MgPSB2aWR4ID49IDAgPyBtVmFsdWVzLnZhbHVlQXQodmlkeCkgOiAtMTsKLSAgICBzc2l6ZV90IGVpZHggPSBwb3MgPj0gMCA/IG1FbnRyeUFycmF5Lml0ZW1BdChwb3MpIDogLTE7Ci0gICAgaWYgKGVpZHggPCAwKSB7Ci0gICAgICAgIGVpZHggPSBtRW50cmllcy5hZGQoZW50cnkodmFsdWUpKTsKLSAgICAgICAgaWYgKGVpZHggPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWx1cmUgYWRkaW5nIHN0cmluZyAlc1xuIiwgU3RyaW5nOCh2YWx1ZSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuIGVpZHg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29uZmlnVHlwZU5hbWUgIT0gTlVMTCkgewotICAgICAgICBlbnRyeSYgZW50ID0gbUVudHJpZXMuZWRpdEl0ZW1BdChlaWR4KTsKLSAgICAgICAgTk9JU1kocHJpbnRmKCIqKiogYWRkaW5nIGNvbmZpZyB0eXBlIG5hbWUgJXMsIHdhcyAlc1xuIiwKLSAgICAgICAgICAgICAgICBjb25maWdUeXBlTmFtZS0+c3RyaW5nKCksIGVudC5jb25maWdUeXBlTmFtZS5zdHJpbmcoKSkpOwotICAgICAgICBpZiAoZW50LmNvbmZpZ1R5cGVOYW1lLnNpemUoKSA8PSAwKSB7Ci0gICAgICAgICAgICBlbnQuY29uZmlnVHlwZU5hbWUgPSAqY29uZmlnVHlwZU5hbWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoZW50LmNvbmZpZ1R5cGVOYW1lICE9ICpjb25maWdUeXBlTmFtZSkgewotICAgICAgICAgICAgZW50LmNvbmZpZ1R5cGVOYW1lID0gIiAiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNvbmZpZyAhPSBOVUxMKSB7Ci0gICAgICAgIC8vIEFkZCB0aGlzIHRvIHRoZSBzZXQgb2YgY29uZmlncyBhc3NvY2lhdGVkIHdpdGggdGhlIHN0cmluZy4KLSAgICAgICAgZW50cnkmIGVudCA9IG1FbnRyaWVzLmVkaXRJdGVtQXQoZWlkeCk7Ci0gICAgICAgIHNpemVfdCBhZGRQb3M7Ci0gICAgICAgIGZvciAoYWRkUG9zPTA7IGFkZFBvczxlbnQuY29uZmlncy5zaXplKCk7IGFkZFBvcysrKSB7Ci0gICAgICAgICAgICBpbnQgY21wID0gZW50LmNvbmZpZ3MuaXRlbUF0KGFkZFBvcykuY29tcGFyZUxvZ2ljYWwoKmNvbmZpZyk7Ci0gICAgICAgICAgICBpZiAoY21wID49IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoY21wID4gMCkgewotICAgICAgICAgICAgICAgICAgICBOT0lTWShwcmludGYoIioqKiBpbnNlcnRpbmcgY29uZmlnOiAlc1xuIiwgY29uZmlnLT50b1N0cmluZygpLnN0cmluZygpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVudC5jb25maWdzLmluc2VydEF0KCpjb25maWcsIGFkZFBvcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChhZGRQb3MgPj0gZW50LmNvbmZpZ3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICBOT0lTWShwcmludGYoIioqKiBhZGRpbmcgY29uZmlnOiAlc1xuIiwgY29uZmlnLT50b1N0cmluZygpLnN0cmluZygpKSk7Ci0gICAgICAgICAgICBlbnQuY29uZmlncy5hZGQoKmNvbmZpZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBib29sIGZpcnN0ID0gdmlkeCA8IDA7Ci0gICAgY29uc3QgYm9vbCBzdHlsZWQgPSAocG9zID49IDAgJiYgKHNpemVfdClwb3MgPCBtRW50cnlTdHlsZUFycmF5LnNpemUoKSkgPwotICAgICAgICBtRW50cnlTdHlsZUFycmF5W3Bvc10uc3BhbnMuc2l6ZSgpIDogMDsKLSAgICBpZiAoZmlyc3QgfHwgc3R5bGVkIHx8ICFtZXJnZUR1cGxpY2F0ZXMpIHsKLSAgICAgICAgcG9zID0gbUVudHJ5QXJyYXkuYWRkKGVpZHgpOwotICAgICAgICBpZiAoZmlyc3QpIHsKLSAgICAgICAgICAgIHZpZHggPSBtVmFsdWVzLmFkZCh2YWx1ZSwgcG9zKTsKLSAgICAgICAgfQotICAgICAgICBlbnRyeSYgZW50ID0gbUVudHJpZXMuZWRpdEl0ZW1BdChlaWR4KTsKLSAgICAgICAgZW50LmluZGljZXMuYWRkKHBvcyk7Ci0gICAgfQotCi0gICAgTk9JU1kocHJpbnRmKCJBZGRpbmcgc3RyaW5nICVzIHRvIHBvb2w6IHBvcz0lZCBlaWR4PSVkIHZpZHg9JWRcbiIsCi0gICAgICAgICAgICBTdHJpbmc4KHZhbHVlKS5zdHJpbmcoKSwgcG9zLCBlaWR4LCB2aWR4KSk7Ci0gICAgCi0gICAgcmV0dXJuIHBvczsKLX0KLQotc3RhdHVzX3QgU3RyaW5nUG9vbDo6YWRkU3R5bGVTcGFuKHNpemVfdCBpZHgsIGNvbnN0IFN0cmluZzE2JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBlbmQpCi17Ci0gICAgZW50cnlfc3R5bGVfc3BhbiBzcGFuOwotICAgIHNwYW4ubmFtZSA9IG5hbWU7Ci0gICAgc3Bhbi5zcGFuLmZpcnN0Q2hhciA9IHN0YXJ0OwotICAgIHNwYW4uc3Bhbi5sYXN0Q2hhciA9IGVuZDsKLSAgICByZXR1cm4gYWRkU3R5bGVTcGFuKGlkeCwgc3Bhbik7Ci19Ci0KLXN0YXR1c190IFN0cmluZ1Bvb2w6OmFkZFN0eWxlU3BhbnMoc2l6ZV90IGlkeCwgY29uc3QgVmVjdG9yPGVudHJ5X3N0eWxlX3NwYW4+JiBzcGFucykKLXsKLSAgICBjb25zdCBzaXplX3QgTj1zcGFucy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICBzdGF0dXNfdCBlcnIgPSBhZGRTdHlsZVNwYW4oaWR4LCBzcGFuc1tpXSk7Ci0gICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBTdHJpbmdQb29sOjphZGRTdHlsZVNwYW4oc2l6ZV90IGlkeCwgY29uc3QgZW50cnlfc3R5bGVfc3BhbiYgc3BhbikKLXsKLSAgICAvLyBQbGFjZSBibGFuayBlbnRyaWVzIGluIHRoZSBzcGFuIGFycmF5IHVwIHRvIHRoaXMgaW5kZXguCi0gICAgd2hpbGUgKG1FbnRyeVN0eWxlQXJyYXkuc2l6ZSgpIDw9IGlkeCkgewotICAgICAgICBtRW50cnlTdHlsZUFycmF5LmFkZCgpOwotICAgIH0KLQotICAgIGVudHJ5X3N0eWxlJiBzdHlsZSA9IG1FbnRyeVN0eWxlQXJyYXkuZWRpdEl0ZW1BdChpZHgpOwotICAgIHN0eWxlLnNwYW5zLmFkZChzcGFuKTsKLSAgICBtRW50cmllcy5lZGl0SXRlbUF0KG1FbnRyeUFycmF5W2lkeF0pLmhhc1N0eWxlcyA9IHRydWU7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1pbnQgU3RyaW5nUG9vbDo6Y29uZmlnX3NvcnQodm9pZCogc3RhdGUsIGNvbnN0IHZvaWQqIGxocywgY29uc3Qgdm9pZCogcmhzKQotewotICAgIFN0cmluZ1Bvb2wqIHBvb2wgPSAoU3RyaW5nUG9vbCopc3RhdGU7Ci0gICAgY29uc3QgZW50cnkmIGxoZSA9IHBvb2wtPm1FbnRyaWVzW3Bvb2wtPm1FbnRyeUFycmF5WypzdGF0aWNfY2FzdDxjb25zdCBzaXplX3QqPihsaHMpXV07Ci0gICAgY29uc3QgZW50cnkmIHJoZSA9IHBvb2wtPm1FbnRyaWVzW3Bvb2wtPm1FbnRyeUFycmF5WypzdGF0aWNfY2FzdDxjb25zdCBzaXplX3QqPihyaHMpXV07Ci0gICAgcmV0dXJuIGxoZS5jb21wYXJlKHJoZSk7Ci19Ci0KLXZvaWQgU3RyaW5nUG9vbDo6c29ydEJ5Q29uZmlnKCkKLXsKLSAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKG1PcmlnaW5hbFBvc1RvTmV3UG9zLnNpemUoKSA+IDAsICJDYW4ndCBzb3J0IHN0cmluZyBwb29sIGFmdGVyIGFscmVhZHkgc29ydGVkLiIpOwotCi0gICAgY29uc3Qgc2l6ZV90IE4gPSBtRW50cnlBcnJheS5zaXplKCk7Ci0KLSAgICAvLyBUaGlzIGlzIGEgdmVjdG9yIHRoYXQgc3RhcnRzIG91dCB3aXRoIGEgMToxIG1hcHBpbmcgdG8gZW50cmllcwotICAgIC8vIGluIHRoZSBhcnJheSwgd2hpY2ggd2Ugd2lsbCBzb3J0IHRvIGNvbWUgdXAgd2l0aCB0aGUgZGVzaXJlZCBvcmRlci4KLSAgICAvLyBBdCB0aGF0IHBvaW50IGl0IG1hcHMgZnJvbSB0aGUgbmV3IHBvc2l0aW9uIGluIHRoZSBhcnJheSB0byB0aGUKLSAgICAvLyBvcmlnaW5hbCBwb3NpdGlvbiB0aGUgZW50cnkgYXBwZWFyZWQuCi0gICAgVmVjdG9yPHNpemVfdD4gbmV3UG9zVG9PcmlnaW5hbFBvczsKLSAgICBuZXdQb3NUb09yaWdpbmFsUG9zLnNldENhcGFjaXR5KE4pOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaSA8IE47IGkrKykgewotICAgICAgICBuZXdQb3NUb09yaWdpbmFsUG9zLmFkZChpKTsKLSAgICB9Ci0KLSAgICAvLyBTb3J0IHRoZSBhcnJheS4KLSAgICBOT0lTWShwcmludGYoIlNPUlRJTkcgU1RSSU5HUyBCWSBDT05GSUdVUkFUSU9OLi4uXG4iKSk7Ci0gICAgLy8gVmVjdG9yOjpzb3J0IHVzZXMgaW5zZXJ0aW9uIHNvcnQsIHdoaWNoIGlzIHZlcnkgc2xvdyBmb3IgdGhpcyBkYXRhIHNldC4KLSAgICAvLyBVc2UgcXVpY2tzb3J0IGluc3RlYWQgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIGEgc3RhYmxlIHNvcnQgaGVyZS4KLSAgICBxc29ydF9yX2NvbXBhdChuZXdQb3NUb09yaWdpbmFsUG9zLmVkaXRBcnJheSgpLCBOLCBzaXplb2Yoc2l6ZV90KSwgdGhpcywgY29uZmlnX3NvcnQpOwotICAgIC8vbmV3UG9zVG9PcmlnaW5hbFBvcy5zb3J0KGNvbmZpZ19zb3J0LCB0aGlzKTsKLSAgICBOT0lTWShwcmludGYoIkRPTkUgU09SVElORyBTVFJJTkdTIEJZIENPTkZJR1VSQVRJT04uXG4iKSk7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIHJldmVyc2UgbWFwcGluZyBmcm9tIHRoZSBvcmlnaW5hbCBwb3NpdGlvbiBpbiB0aGUgYXJyYXkKLSAgICAvLyB0byB0aGUgbmV3IHBvc2l0aW9uIHdoZXJlIGl0IGFwcGVhcnMgaW4gdGhlIHNvcnRlZCBhcnJheS4gIFRoaXMgaXMKLSAgICAvLyBzbyB0aGF0IGNsaWVudHMgY2FuIHJlLW1hcCBhbnkgcG9zaXRpb25zIHRoZXkgaGFkIHByZXZpb3VzbHkgc3RvcmVkLgotICAgIG1PcmlnaW5hbFBvc1RvTmV3UG9zID0gbmV3UG9zVG9PcmlnaW5hbFBvczsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIG1PcmlnaW5hbFBvc1RvTmV3UG9zLmVkaXRJdGVtQXQobmV3UG9zVG9PcmlnaW5hbFBvc1tpXSkgPSBpOwotICAgIH0KLQotI2lmIDAKLSAgICBTb3J0ZWRWZWN0b3I8ZW50cnk+IGVudHJpZXM7Ci0KLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiIyVkIHdhcyAlZDogJXNcbiIsIGksIG5ld1Bvc1RvT3JpZ2luYWxQb3NbaV0sCi0gICAgICAgICAgICAgICAgbUVudHJpZXNbbUVudHJ5QXJyYXlbbmV3UG9zVG9PcmlnaW5hbFBvc1tpXV1dLm1ha2VDb25maWdzU3RyaW5nKCkuc3RyaW5nKCkpOwotICAgICAgICBlbnRyaWVzLmFkZChtRW50cmllc1ttRW50cnlBcnJheVtpXV0pOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxlbnRyaWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiU29ydGVkIGNvbmZpZyAjJWQ6ICVzXG4iLCBpLAotICAgICAgICAgICAgICAgIGVudHJpZXNbaV0ubWFrZUNvbmZpZ3NTdHJpbmcoKS5zdHJpbmcoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBOb3cgd2UgcmVidWlsZCB0aGUgYXJyYXlzLgotICAgIFZlY3RvcjxlbnRyeT4gbmV3RW50cmllczsKLSAgICBWZWN0b3I8c2l6ZV90PiBuZXdFbnRyeUFycmF5OwotICAgIFZlY3RvcjxlbnRyeV9zdHlsZT4gbmV3RW50cnlTdHlsZUFycmF5OwotICAgIERlZmF1bHRLZXllZFZlY3RvcjxzaXplX3QsIHNpemVfdD4gb3JpZ09mZnNldFRvTmV3T2Zmc2V0OwotCi0gICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAvLyBXZSBhcmUgZmlsbGluZyBpbiBuZXcgb2Zmc2V0ICdpJzsgb2xkSSBpcyB3aGVyZSB3ZSBjYW4gZmluZCBpdAotICAgICAgICAvLyBpbiB0aGUgb3JpZ2luYWwgZGF0YSBzdHJ1Y3R1cmUuCi0gICAgICAgIHNpemVfdCBvbGRJID0gbmV3UG9zVG9PcmlnaW5hbFBvc1tpXTsKLSAgICAgICAgLy8gVGhpcyBpcyB0aGUgYWN0dWFsIGVudHJ5IGFzc29jaWF0ZWQgd2l0aCB0aGUgb2xkIG9mZnNldC4KLSAgICAgICAgY29uc3QgZW50cnkmIG9sZEVudCA9IG1FbnRyaWVzW21FbnRyeUFycmF5W29sZEldXTsKLSAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBlbnRyeSB0aGUgbGFzdCB0aW1lIHdlIGFkZGVkIGl0IHRvIHRoZQotICAgICAgICAvLyBuZXcgZW50cnkgYXJyYXksIGlmIGFueS4KLSAgICAgICAgc3NpemVfdCBuZXdJbmRleE9mT2Zmc2V0ID0gb3JpZ09mZnNldFRvTmV3T2Zmc2V0LmluZGV4T2ZLZXkob2xkSSk7Ci0gICAgICAgIHNpemVfdCBuZXdPZmZzZXQ7Ci0gICAgICAgIGlmIChuZXdJbmRleE9mT2Zmc2V0IDwgMCkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBoYXZlIHNlZW4gdGhlIGVudHJ5LCBzbyBhZGQKLSAgICAgICAgICAgIC8vIGl0LgotICAgICAgICAgICAgbmV3T2Zmc2V0ID0gbmV3RW50cmllcy5hZGQob2xkRW50KTsKLSAgICAgICAgICAgIG5ld0VudHJpZXMuZWRpdEl0ZW1BdChuZXdPZmZzZXQpLmluZGljZXMuY2xlYXIoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgc2VlbiB0aGlzIGVudHJ5IGJlZm9yZSwgdXNlIHRoZSBleGlzdGluZyBvbmUKLSAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgYWRkaW5nIGl0IGFnYWluLgotICAgICAgICAgICAgbmV3T2Zmc2V0ID0gb3JpZ09mZnNldFRvTmV3T2Zmc2V0LnZhbHVlQXQobmV3SW5kZXhPZk9mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVXBkYXRlIHRoZSBpbmRpY2VzIHRvIGluY2x1ZGUgdGhpcyBuZXcgcG9zaXRpb24uCi0gICAgICAgIG5ld0VudHJpZXMuZWRpdEl0ZW1BdChuZXdPZmZzZXQpLmluZGljZXMuYWRkKGkpOwotICAgICAgICAvLyBBbmQgYWRkIHRoZSBvZmZzZXQgb2YgdGhlIGVudHJ5IHRvIHRoZSBuZXcgZW50cnkgYXJyYXkuCi0gICAgICAgIG5ld0VudHJ5QXJyYXkuYWRkKG5ld09mZnNldCk7Ci0gICAgICAgIC8vIEFkZCBhbnkgb2xkIHN0eWxlIHRvIHRoZSBuZXcgc3R5bGUgYXJyYXkuCi0gICAgICAgIGlmIChtRW50cnlTdHlsZUFycmF5LnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGlmIChvbGRJIDwgbUVudHJ5U3R5bGVBcnJheS5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBuZXdFbnRyeVN0eWxlQXJyYXkuYWRkKG1FbnRyeVN0eWxlQXJyYXlbb2xkSV0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBuZXdFbnRyeVN0eWxlQXJyYXkuYWRkKGVudHJ5X3N0eWxlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm93IHRyaW0gYW55IGVudHJpZXMgYXQgdGhlIGVuZCBvZiB0aGUgbmV3IHN0eWxlIGFycmF5IHRoYXQgYXJlCi0gICAgLy8gbm90IG5lZWRlZC4KLSAgICBmb3IgKHNzaXplX3QgaT1uZXdFbnRyeVN0eWxlQXJyYXkuc2l6ZSgpLTE7IGk+PTA7IGktLSkgewotICAgICAgICBjb25zdCBlbnRyeV9zdHlsZSYgc3R5bGUgPSBuZXdFbnRyeVN0eWxlQXJyYXlbaV07Ci0gICAgICAgIGlmIChzdHlsZS5zcGFucy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAvLyBUaGF0J3MgaXQuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAvLyBUaGlzIG9uZSBpcyBub3QgbmVlZGVkOyByZW1vdmUuCi0gICAgICAgIG5ld0VudHJ5U3R5bGVBcnJheS5yZW1vdmVBdChpKTsKLSAgICB9Ci0KLSAgICAvLyBBbGwgZG9uZSwgaW5zdGFsbCB0aGUgbmV3IGRhdGEgc3RydWN0dXJlcyBhbmQgdXBhdGUgbVZhbHVlcyB3aXRoCi0gICAgLy8gdGhlIG5ldyBwb3NpdGlvbnMuCi0gICAgbUVudHJpZXMgPSBuZXdFbnRyaWVzOwotICAgIG1FbnRyeUFycmF5ID0gbmV3RW50cnlBcnJheTsKLSAgICBtRW50cnlTdHlsZUFycmF5ID0gbmV3RW50cnlTdHlsZUFycmF5OwotICAgIG1WYWx1ZXMuY2xlYXIoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8bUVudHJpZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgZW50cnkmIGVudCA9IG1FbnRyaWVzW2ldOwotICAgICAgICBtVmFsdWVzLmFkZChlbnQudmFsdWUsIGVudC5pbmRpY2VzWzBdKTsKLSAgICB9Ci0KLSNpZiAwCi0gICAgcHJpbnRmKCJGSU5BTCBTT1JURUQgU1RSSU5HIENPTkZJR1M6XG4iKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8bUVudHJpZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgZW50cnkmIGVudCA9IG1FbnRyaWVzW2ldOwotICAgICAgICBwcmludGYoIiMiIFpEICIgJXM6ICVzXG4iLCAoWkRfVFlQRSlpLCBlbnQubWFrZUNvbmZpZ3NTdHJpbmcoKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICBTdHJpbmc4KGVudC52YWx1ZSkuc3RyaW5nKCkpOwotICAgIH0KLSNlbmRpZgotfQotCi1zcDxBYXB0RmlsZT4gU3RyaW5nUG9vbDo6Y3JlYXRlU3RyaW5nQmxvY2soKQotewotICAgIHNwPEFhcHRGaWxlPiBwb29sID0gbmV3IEFhcHRGaWxlKFN0cmluZzgoKSwgQWFwdEdyb3VwRW50cnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KCkpOwotICAgIHN0YXR1c190IGVyciA9IHdyaXRlU3RyaW5nQmxvY2socG9vbCk7Ci0gICAgcmV0dXJuIGVyciA9PSBOT19FUlJPUiA/IHBvb2wgOiBOVUxMOwotfQotCi0jZGVmaW5lIEVOQ09ERV9MRU5HVEgoc3RyLCBjaHJzeiwgc3RyU2l6ZSkgXAoteyBcCi0gICAgc2l6ZV90IG1heE1hc2sgPSAxIDw8ICgoY2hyc3oqOCktMSk7IFwKLSAgICBzaXplX3QgbWF4U2l6ZSA9IG1heE1hc2stMTsgXAotICAgIGlmIChzdHJTaXplID4gbWF4U2l6ZSkgeyBcCi0gICAgICAgICpzdHIrKyA9IG1heE1hc2sgfCAoKHN0clNpemU+PihjaHJzeio4KSkmbWF4U2l6ZSk7IFwKLSAgICB9IFwKLSAgICAqc3RyKysgPSBzdHJTaXplOyBcCi19Ci0KLXN0YXR1c190IFN0cmluZ1Bvb2w6OndyaXRlU3RyaW5nQmxvY2soY29uc3Qgc3A8QWFwdEZpbGU+JiBwb29sKQotewotICAgIC8vIEFsbG93IGFwcGVuZGluZy4gIFNvcnJ5IHRoaXMgaXMgYSBsaXR0bGUgd2Fja3kuCi0gICAgaWYgKHBvb2wtPmdldFNpemUoKSA+IDApIHsKLSAgICAgICAgc3A8QWFwdEZpbGU+IGJsb2NrID0gY3JlYXRlU3RyaW5nQmxvY2soKTsKLSAgICAgICAgaWYgKGJsb2NrID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIHNzaXplX3QgcmVzID0gcG9vbC0+d3JpdGVEYXRhKGJsb2NrLT5nZXREYXRhKCksIGJsb2NrLT5nZXRTaXplKCkpOwotICAgICAgICByZXR1cm4gKHJlcyA+PSAwKSA/IChzdGF0dXNfdClOT19FUlJPUiA6IHJlczsKLSAgICB9Ci0KLSAgICAvLyBGaXJzdCB3ZSBuZWVkIHRvIGFkZCBhbGwgc3R5bGUgc3BhbiBuYW1lcyB0byB0aGUgc3RyaW5nIHBvb2wuCi0gICAgLy8gV2UgZG8gdGhpcyBub3cgKGluc3RlYWQgb2Ygd2hlbiB0aGUgc3BhbiBpcyBhZGRlZCkgc28gdGhhdCB0aGVzZQotICAgIC8vIHdpbGwgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIHBvb2wsIG5vdCBkaXNydXB0aW5nIHRoZSBvcmRlcgotICAgIC8vIG91ciBjbGllbnQgcGxhY2VkIHRoZWlyIG93biBzdHJpbmdzIGluIGl0LgotICAgIAotICAgIGNvbnN0IHNpemVfdCBTVFlMRVMgPSBtRW50cnlTdHlsZUFycmF5LnNpemUoKTsKLSAgICBzaXplX3QgaTsKLQotICAgIGZvciAoaT0wOyBpPFNUWUxFUzsgaSsrKSB7Ci0gICAgICAgIGVudHJ5X3N0eWxlJiBzdHlsZSA9IG1FbnRyeVN0eWxlQXJyYXkuZWRpdEl0ZW1BdChpKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBzdHlsZS5zcGFucy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIGVudHJ5X3N0eWxlX3NwYW4mIHNwYW4gPSBzdHlsZS5zcGFucy5lZGl0SXRlbUF0KGkpOwotICAgICAgICAgICAgc3NpemVfdCBpZHggPSBhZGQoc3Bhbi5uYW1lLCB0cnVlKTsKLSAgICAgICAgICAgIGlmIChpZHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBhZGRpbmcgc3BhbiBmb3Igc3R5bGUgdGFnICclcydcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KHNwYW4ubmFtZSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBpZHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzcGFuLnNwYW4ubmFtZS5pbmRleCA9ICh1aW50MzJfdClpZHg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBzaXplX3QgRU5UUklFUyA9IG1FbnRyeUFycmF5LnNpemUoKTsKLQotICAgIC8vIE5vdyBidWlsZCB0aGUgcG9vbCBvZiB1bmlxdWUgc3RyaW5ncy4KLQotICAgIGNvbnN0IHNpemVfdCBTVFJJTkdTID0gbUVudHJpZXMuc2l6ZSgpOwotICAgIGNvbnN0IHNpemVfdCBwcmVTaXplID0gc2l6ZW9mKFJlc1N0cmluZ1Bvb2xfaGVhZGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICsgKHNpemVvZih1aW50MzJfdCkqRU5UUklFUykKLSAgICAgICAgICAgICAgICAgICAgICAgICArIChzaXplb2YodWludDMyX3QpKlNUWUxFUyk7Ci0gICAgaWYgKHBvb2wtPmVkaXREYXRhKHByZVNpemUpID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogT3V0IG9mIG1lbW9yeSBmb3Igc3RyaW5nIHBvb2xcbiIpOwotICAgICAgICByZXR1cm4gTk9fTUVNT1JZOwotICAgIH0KLQotICAgIGNvbnN0IHNpemVfdCBjaGFyU2l6ZSA9IG1VVEY4ID8gc2l6ZW9mKHVpbnQ4X3QpIDogc2l6ZW9mKGNoYXIxNl90KTsKLQotICAgIHNpemVfdCBzdHJQb3MgPSAwOwotICAgIGZvciAoaT0wOyBpPFNUUklOR1M7IGkrKykgewotICAgICAgICBlbnRyeSYgZW50ID0gbUVudHJpZXMuZWRpdEl0ZW1BdChpKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IHN0clNpemUgPSAoZW50LnZhbHVlLnNpemUoKSk7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBsZW5TaXplID0gc3RyU2l6ZSA+IChzaXplX3QpKDE8PCgoY2hhclNpemUqOCktMSkpLTEgPwotICAgICAgICAgICAgY2hhclNpemUqMiA6IGNoYXJTaXplOwotCi0gICAgICAgIFN0cmluZzggZW5jU3RyOwotICAgICAgICBpZiAobVVURjgpIHsKLSAgICAgICAgICAgIGVuY1N0ciA9IFN0cmluZzgoZW50LnZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IHNpemVfdCBlbmNTaXplID0gbVVURjggPyBlbmNTdHIuc2l6ZSgpIDogMDsKLSAgICAgICAgY29uc3Qgc2l6ZV90IGVuY0xlblNpemUgPSBtVVRGOCA/Ci0gICAgICAgICAgICAoZW5jU2l6ZSA+IChzaXplX3QpKDE8PCgoY2hhclNpemUqOCktMSkpLTEgPwotICAgICAgICAgICAgICAgIGNoYXJTaXplKjIgOiBjaGFyU2l6ZSkgOiAwOwotCi0gICAgICAgIGVudC5vZmZzZXQgPSBzdHJQb3M7Ci0KLSAgICAgICAgY29uc3Qgc2l6ZV90IHRvdGFsU2l6ZSA9IGxlblNpemUgKyBlbmNMZW5TaXplICsKLSAgICAgICAgICAgICgobVVURjggPyBlbmNTaXplIDogc3RyU2l6ZSkrMSkqY2hhclNpemU7Ci0KLSAgICAgICAgdm9pZCogZGF0ID0gKHZvaWQqKXBvb2wtPmVkaXREYXRhKHByZVNpemUgKyBzdHJQb3MgKyB0b3RhbFNpemUpOwotICAgICAgICBpZiAoZGF0ID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE91dCBvZiBtZW1vcnkgZm9yIHN0cmluZyBwb29sXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0ID0gKHVpbnQ4X3QqKWRhdCArIHByZVNpemUgKyBzdHJQb3M7Ci0gICAgICAgIGlmIChtVVRGOCkgewotICAgICAgICAgICAgdWludDhfdCogc3RyaW5ncyA9ICh1aW50OF90KilkYXQ7Ci0KLSAgICAgICAgICAgIEVOQ09ERV9MRU5HVEgoc3RyaW5ncywgc2l6ZW9mKHVpbnQ4X3QpLCBzdHJTaXplKQotCi0gICAgICAgICAgICBFTkNPREVfTEVOR1RIKHN0cmluZ3MsIHNpemVvZih1aW50OF90KSwgZW5jU2l6ZSkKLQotICAgICAgICAgICAgc3RybmNweSgoY2hhciopc3RyaW5ncywgZW5jU3RyLCBlbmNTaXplKzEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdWludDE2X3QqIHN0cmluZ3MgPSAodWludDE2X3QqKWRhdDsKLQotICAgICAgICAgICAgRU5DT0RFX0xFTkdUSChzdHJpbmdzLCBzaXplb2YodWludDE2X3QpLCBzdHJTaXplKQotCi0gICAgICAgICAgICBzdHJjcHkxNl9odG9kKHN0cmluZ3MsIGVudC52YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdHJQb3MgKz0gdG90YWxTaXplOwotICAgIH0KLQotICAgIC8vIFBhZCBlbmRpbmcgc3RyaW5nIHBvc2l0aW9uIHVwIHRvIGEgdWludDMyX3QgYm91bmRhcnkuCi0KLSAgICBpZiAoc3RyUG9zJjB4MykgewotICAgICAgICBzaXplX3QgcGFkUG9zID0gKChzdHJQb3MrMykmfjB4Myk7Ci0gICAgICAgIHVpbnQ4X3QqIGRhdCA9ICh1aW50OF90Kilwb29sLT5lZGl0RGF0YShwcmVTaXplICsgcGFkUG9zKTsKLSAgICAgICAgaWYgKGRhdCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBPdXQgb2YgbWVtb3J5IHBhZGRpbmcgc3RyaW5nIHBvb2xcbiIpOwotICAgICAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICAgICAgfQotICAgICAgICBtZW1zZXQoZGF0K3ByZVNpemUrc3RyUG9zLCAwLCBwYWRQb3Mtc3RyUG9zKTsKLSAgICAgICAgc3RyUG9zID0gcGFkUG9zOwotICAgIH0KLQotICAgIC8vIEJ1aWxkIHRoZSBwb29sIG9mIHN0eWxlIHNwYW5zLgotCi0gICAgc2l6ZV90IHN0eVBvcyA9IHN0clBvczsKLSAgICBmb3IgKGk9MDsgaTxTVFlMRVM7IGkrKykgewotICAgICAgICBlbnRyeV9zdHlsZSYgZW50ID0gbUVudHJ5U3R5bGVBcnJheS5lZGl0SXRlbUF0KGkpOwotICAgICAgICBjb25zdCBzaXplX3QgTiA9IGVudC5zcGFucy5zaXplKCk7Ci0gICAgICAgIGNvbnN0IHNpemVfdCB0b3RhbFNpemUgPSAoTipzaXplb2YoUmVzU3RyaW5nUG9vbF9zcGFuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNpemVvZihSZXNTdHJpbmdQb29sX3JlZik7Ci0KLSAgICAgICAgZW50Lm9mZnNldCA9IHN0eVBvcy1zdHJQb3M7Ci0gICAgICAgIHVpbnQ4X3QqIGRhdCA9ICh1aW50OF90Kilwb29sLT5lZGl0RGF0YShwcmVTaXplICsgc3R5UG9zICsgdG90YWxTaXplKTsKLSAgICAgICAgaWYgKGRhdCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBPdXQgb2YgbWVtb3J5IGZvciBzdHJpbmcgc3R5bGVzXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIH0KLSAgICAgICAgUmVzU3RyaW5nUG9vbF9zcGFuKiBzcGFuID0gKFJlc1N0cmluZ1Bvb2xfc3BhbiopKGRhdCtwcmVTaXplK3N0eVBvcyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIHNwYW4tPm5hbWUuaW5kZXggPSBodG9kbChlbnQuc3BhbnNbaV0uc3Bhbi5uYW1lLmluZGV4KTsKLSAgICAgICAgICAgIHNwYW4tPmZpcnN0Q2hhciA9IGh0b2RsKGVudC5zcGFuc1tpXS5zcGFuLmZpcnN0Q2hhcik7Ci0gICAgICAgICAgICBzcGFuLT5sYXN0Q2hhciA9IGh0b2RsKGVudC5zcGFuc1tpXS5zcGFuLmxhc3RDaGFyKTsKLSAgICAgICAgICAgIHNwYW4rKzsKLSAgICAgICAgfQotICAgICAgICBzcGFuLT5uYW1lLmluZGV4ID0gaHRvZGwoUmVzU3RyaW5nUG9vbF9zcGFuOjpFTkQpOwotCi0gICAgICAgIHN0eVBvcyArPSB0b3RhbFNpemU7Ci0gICAgfQotCi0gICAgaWYgKFNUWUxFUyA+IDApIHsKLSAgICAgICAgLy8gQWRkIGZ1bGwgdGVybWluYXRvciBhdCB0aGUgZW5kICh3aGVuIHJlYWRpbmcgd2UgdmFsaWRhdGUgdGhhdAotICAgICAgICAvLyB0aGUgZW5kIG9mIHRoZSBwb29sIGlzIGZ1bGx5IHRlcm1pbmF0ZWQgdG8gc2ltcGxpZnkgZXJyb3IKLSAgICAgICAgLy8gY2hlY2tpbmcpLgotICAgICAgICBzaXplX3QgZXh0cmEgPSBzaXplb2YoUmVzU3RyaW5nUG9vbF9zcGFuKS1zaXplb2YoUmVzU3RyaW5nUG9vbF9yZWYpOwotICAgICAgICB1aW50OF90KiBkYXQgPSAodWludDhfdCopcG9vbC0+ZWRpdERhdGEocHJlU2l6ZSArIHN0eVBvcyArIGV4dHJhKTsKLSAgICAgICAgaWYgKGRhdCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBPdXQgb2YgbWVtb3J5IGZvciBzdHJpbmcgc3R5bGVzXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIH0KLSAgICAgICAgdWludDMyX3QqIHAgPSAodWludDMyX3QqKShkYXQrcHJlU2l6ZStzdHlQb3MpOwotICAgICAgICB3aGlsZSAoZXh0cmEgPiAwKSB7Ci0gICAgICAgICAgICAqcCsrID0gaHRvZGwoUmVzU3RyaW5nUG9vbF9zcGFuOjpFTkQpOwotICAgICAgICAgICAgZXh0cmEgLT0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgfQotICAgICAgICBzdHlQb3MgKz0gZXh0cmE7Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgaGVhZGVyLgotCi0gICAgUmVzU3RyaW5nUG9vbF9oZWFkZXIqIGhlYWRlciA9Ci0gICAgICAgIChSZXNTdHJpbmdQb29sX2hlYWRlciopcG9vbC0+cGFkRGF0YShzaXplb2YodWludDMyX3QpKTsKLSAgICBpZiAoaGVhZGVyID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogT3V0IG9mIG1lbW9yeSBmb3Igc3RyaW5nIHBvb2xcbiIpOwotICAgICAgICByZXR1cm4gTk9fTUVNT1JZOwotICAgIH0KLSAgICBtZW1zZXQoaGVhZGVyLCAwLCBzaXplb2YoKmhlYWRlcikpOwotICAgIGhlYWRlci0+aGVhZGVyLnR5cGUgPSBodG9kcyhSRVNfU1RSSU5HX1BPT0xfVFlQRSk7Ci0gICAgaGVhZGVyLT5oZWFkZXIuaGVhZGVyU2l6ZSA9IGh0b2RzKHNpemVvZigqaGVhZGVyKSk7Ci0gICAgaGVhZGVyLT5oZWFkZXIuc2l6ZSA9IGh0b2RsKHBvb2wtPmdldFNpemUoKSk7Ci0gICAgaGVhZGVyLT5zdHJpbmdDb3VudCA9IGh0b2RsKEVOVFJJRVMpOwotICAgIGhlYWRlci0+c3R5bGVDb3VudCA9IGh0b2RsKFNUWUxFUyk7Ci0gICAgaWYgKG1VVEY4KSB7Ci0gICAgICAgIGhlYWRlci0+ZmxhZ3MgfD0gaHRvZGwoUmVzU3RyaW5nUG9vbF9oZWFkZXI6OlVURjhfRkxBRyk7Ci0gICAgfQotICAgIGhlYWRlci0+c3RyaW5nc1N0YXJ0ID0gaHRvZGwocHJlU2l6ZSk7Ci0gICAgaGVhZGVyLT5zdHlsZXNTdGFydCA9IGh0b2RsKFNUWUxFUyA+IDAgPyAocHJlU2l6ZStzdHJQb3MpIDogMCk7Ci0KLSAgICAvLyBXcml0ZSBzdHJpbmcgaW5kZXggYXJyYXkuCi0KLSAgICB1aW50MzJfdCogaW5kZXggPSAodWludDMyX3QqKShoZWFkZXIrMSk7Ci0gICAgZm9yIChpPTA7IGk8RU5UUklFUzsgaSsrKSB7Ci0gICAgICAgIGVudHJ5JiBlbnQgPSBtRW50cmllcy5lZGl0SXRlbUF0KG1FbnRyeUFycmF5W2ldKTsKLSAgICAgICAgKmluZGV4KysgPSBodG9kbChlbnQub2Zmc2V0KTsKLSAgICAgICAgTk9JU1kocHJpbnRmKCJXcml0aW5nIGVudHJ5ICMlZDogXCIlc1wiIGVudD0lZCBvZmY9JWRcbiIsIGksCi0gICAgICAgICAgICAgICAgU3RyaW5nOChlbnQudmFsdWUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgIG1FbnRyeUFycmF5W2ldLCBlbnQub2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgc3R5bGUgaW5kZXggYXJyYXkuCi0KLSAgICBmb3IgKGk9MDsgaTxTVFlMRVM7IGkrKykgewotICAgICAgICAqaW5kZXgrKyA9IGh0b2RsKG1FbnRyeVN0eWxlQXJyYXlbaV0ub2Zmc2V0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXNzaXplX3QgU3RyaW5nUG9vbDo6b2Zmc2V0Rm9yU3RyaW5nKGNvbnN0IFN0cmluZzE2JiB2YWwpIGNvbnN0Ci17Ci0gICAgY29uc3QgVmVjdG9yPHNpemVfdD4qIGluZGljZXMgPSBvZmZzZXRzRm9yU3RyaW5nKHZhbCk7Ci0gICAgc3NpemVfdCByZXMgPSBpbmRpY2VzICE9IE5VTEwgJiYgaW5kaWNlcy0+c2l6ZSgpID4gMCA/IGluZGljZXMtPml0ZW1BdCgwKSA6IC0xOwotICAgIE5PSVNZKHByaW50ZigiT2Zmc2V0IGZvciBzdHJpbmcgJXM6ICVkICglcylcbiIsIFN0cmluZzgodmFsKS5zdHJpbmcoKSwgcmVzLAotICAgICAgICAgICAgcmVzID49IDAgPyBTdHJpbmc4KG1FbnRyaWVzW21FbnRyeUFycmF5W3Jlc11dLnZhbHVlKS5zdHJpbmcoKSA6IFN0cmluZzgoKSkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLWNvbnN0IFZlY3RvcjxzaXplX3Q+KiBTdHJpbmdQb29sOjpvZmZzZXRzRm9yU3RyaW5nKGNvbnN0IFN0cmluZzE2JiB2YWwpIGNvbnN0Ci17Ci0gICAgc3NpemVfdCBwb3MgPSBtVmFsdWVzLnZhbHVlRm9yKHZhbCk7Ci0gICAgaWYgKHBvcyA8IDApIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiAmbUVudHJpZXNbbUVudHJ5QXJyYXlbcG9zXV0uaW5kaWNlczsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvU3RyaW5nUG9vbC5oIGIvdG9vbHMvYWFwdC9TdHJpbmdQb29sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiM2FiZmQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9TdHJpbmdQb29sLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBCdWlsZCByZXNvdXJjZSBmaWxlcyBmcm9tIHJhdyBhc3NldHMuCi0vLwotCi0jaWZuZGVmIFNUUklOR19QT09MX0gKLSNkZWZpbmUgU1RSSU5HX1BPT0xfSAotCi0jaW5jbHVkZSAiTWFpbi5oIgotI2luY2x1ZGUgIkFhcHRBc3NldHMuaCIKLQotI2luY2x1ZGUgPGFuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nMTYuaD4KLSNpbmNsdWRlIDx1dGlscy9UeXBlSGVscGVycy5oPgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2luY2x1ZGUgPGxpYmV4cGF0L2V4cGF0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi0jZGVmaW5lIFBSSU5UX1NUUklOR19NRVRSSUNTIDAKLQotdm9pZCBzdHJjcHkxNl9odG9kKHVpbnQxNl90KiBkc3QsIGNvbnN0IHVpbnQxNl90KiBzcmMpOwotCi12b2lkIHByaW50U3RyaW5nUG9vbChjb25zdCBSZXNTdHJpbmdQb29sKiBwb29sKTsKLQotLyoqCi0gKiBUaGUgU3RyaW5nUG9vbCBjbGFzcyBpcyB1c2VkIGFzIGFuIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiBmb3IKLSAqIGdlbmVyYXRpbmcgdGhlIHN0cmluZyBwb29sIHJlc291cmNlIGRhdGEgc3RydWN0dXJlIHRoYXQgY2FuIGJlIHBhcnNlZCB3aXRoCi0gKiBSZXNTdHJpbmdQb29sIGluIGluY2x1ZGUvdXRpbHMvUmVzb3VyY2VUeXBlcy5oLgotICovCi1jbGFzcyBTdHJpbmdQb29sCi17Ci1wdWJsaWM6Ci0gICAgc3RydWN0IGVudHJ5IHsKLSAgICAgICAgZW50cnkoKSA6IG9mZnNldCgwKSB7IH0KLSAgICAgICAgZW50cnkoY29uc3QgU3RyaW5nMTYmIF92YWx1ZSkgOiB2YWx1ZShfdmFsdWUpLCBvZmZzZXQoMCksIGhhc1N0eWxlcyhmYWxzZSkgeyB9Ci0gICAgICAgIGVudHJ5KGNvbnN0IGVudHJ5JiBvKSA6IHZhbHVlKG8udmFsdWUpLCBvZmZzZXQoby5vZmZzZXQpLAotICAgICAgICAgICAgICAgIGhhc1N0eWxlcyhvLmhhc1N0eWxlcyksIGluZGljZXMoby5pbmRpY2VzKSwKLSAgICAgICAgICAgICAgICBjb25maWdUeXBlTmFtZShvLmNvbmZpZ1R5cGVOYW1lKSwgY29uZmlncyhvLmNvbmZpZ3MpIHsgfQotCi0gICAgICAgIFN0cmluZzE2IHZhbHVlOwotICAgICAgICBzaXplX3Qgb2Zmc2V0OwotICAgICAgICBib29sIGhhc1N0eWxlczsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gaW5kaWNlczsKLSAgICAgICAgU3RyaW5nOCBjb25maWdUeXBlTmFtZTsKLSAgICAgICAgVmVjdG9yPFJlc1RhYmxlX2NvbmZpZz4gY29uZmlnczsKLQotICAgICAgICBTdHJpbmc4IG1ha2VDb25maWdzU3RyaW5nKCkgY29uc3Q7Ci0KLSAgICAgICAgaW50IGNvbXBhcmUoY29uc3QgZW50cnkmIG8pIGNvbnN0OwotCi0gICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBlbnRyeSYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSA8IDA7IH0KLSAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBlbnRyeSYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSA8PSAwOyB9Ci0gICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZW50cnkmIG8pIGNvbnN0IHsgcmV0dXJuIGNvbXBhcmUobykgPT0gMDsgfQotICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGVudHJ5JiBvKSBjb25zdCB7IHJldHVybiBjb21wYXJlKG8pICE9IDA7IH0KLSAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBlbnRyeSYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSA+PSAwOyB9Ci0gICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBlbnRyeSYgbykgY29uc3QgeyByZXR1cm4gY29tcGFyZShvKSA+IDA7IH0KLSAgICB9OwotCi0gICAgc3RydWN0IGVudHJ5X3N0eWxlX3NwYW4gewotICAgICAgICBTdHJpbmcxNiBuYW1lOwotICAgICAgICBSZXNTdHJpbmdQb29sX3NwYW4gc3BhbjsKLSAgICB9OwotCi0gICAgc3RydWN0IGVudHJ5X3N0eWxlIHsKLSAgICAgICAgZW50cnlfc3R5bGUoKSA6IG9mZnNldCgwKSB7IH0KLQotICAgICAgICBlbnRyeV9zdHlsZShjb25zdCBlbnRyeV9zdHlsZSYgbykgOiBvZmZzZXQoby5vZmZzZXQpLCBzcGFucyhvLnNwYW5zKSB7IH0KLQotICAgICAgICBzaXplX3Qgb2Zmc2V0OwotICAgICAgICBWZWN0b3I8ZW50cnlfc3R5bGVfc3Bhbj4gc3BhbnM7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIElmICd1dGY4JyBpcyB0cnVlLCBzdHJpbmdzIHdpbGwgYmUgZW5jb2RlZCB3aXRoIFVURi04IGluc3RlYWQgb2YKLSAgICAgKiBsZWZ0IGluIEphdmEncyBuYXRpdmUgVVRGLTE2LgotICAgICAqLwotICAgIGV4cGxpY2l0IFN0cmluZ1Bvb2woYm9vbCB1dGY4ID0gZmFsc2UpOwotCi0gICAgLyoqCi0gICAgICogQWRkIGEgbmV3IHN0cmluZyB0byB0aGUgcG9vbC4gIElmIG1lcmdlRHVwbGljYXRlcyBpcyB0cnVlLCB0aGVuaWYKLSAgICAgKiB0aGUgc3RyaW5nIGFscmVhZHkgZXhpc3RzIHRoZSBleGlzdGluZyBlbnRyeSBmb3IgaXQgd2lsbCBiZSB1c2VkOwotICAgICAqIG90aGVyd2lzZSwgb3IgaWYgdGhlIHZhbHVlIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCwgYSBuZXcgZW50cnkgaXMKLSAgICAgKiBjcmVhdGVkLgotICAgICAqCi0gICAgICogUmV0dXJucyB0aGUgaW5kZXggaW4gdGhlIGVudHJ5IGFycmF5IG9mIHRoZSBuZXcgc3RyaW5nIGVudHJ5LgotICAgICAqLwotICAgIHNzaXplX3QgYWRkKGNvbnN0IFN0cmluZzE2JiB2YWx1ZSwgYm9vbCBtZXJnZUR1cGxpY2F0ZXMgPSBmYWxzZSwKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZzgqIGNvbmZpZ1R5cGVOYW1lID0gTlVMTCwgY29uc3QgUmVzVGFibGVfY29uZmlnKiBjb25maWcgPSBOVUxMKTsKLQotICAgIHNzaXplX3QgYWRkKGNvbnN0IFN0cmluZzE2JiB2YWx1ZSwgY29uc3QgVmVjdG9yPGVudHJ5X3N0eWxlX3NwYW4+JiBzcGFucywKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZzgqIGNvbmZpZ1R5cGVOYW1lID0gTlVMTCwgY29uc3QgUmVzVGFibGVfY29uZmlnKiBjb25maWcgPSBOVUxMKTsKLQotICAgIHN0YXR1c190IGFkZFN0eWxlU3BhbihzaXplX3QgaWR4LCBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCk7Ci0gICAgc3RhdHVzX3QgYWRkU3R5bGVTcGFucyhzaXplX3QgaWR4LCBjb25zdCBWZWN0b3I8ZW50cnlfc3R5bGVfc3Bhbj4mIHNwYW5zKTsKLSAgICBzdGF0dXNfdCBhZGRTdHlsZVNwYW4oc2l6ZV90IGlkeCwgY29uc3QgZW50cnlfc3R5bGVfc3BhbiYgc3Bhbik7Ci0KLSAgICAvLyBTb3J0IHRoZSBjb250ZW50cyBvZiB0aGUgc3RyaW5nIGJsb2NrIGJ5IHRoZSBjb25maWd1cmF0aW9uIGFzc29jaWF0ZWQKLSAgICAvLyB3aXRoIGVhY2ggaXRlbS4gIEFmdGVyIGRvaW5nIHRoaXMgeW91IGNhbiB1c2UgbWFwT3JpZ2luYWxQb3NUb05ld1BvcygpCi0gICAgLy8gdG8gZmluZCBvdXQgdGhlIG5ldyBwb3NpdGlvbiBnaXZlbiB0aGUgcG9zaXRpb24gb3JpZ2luYWxseSByZXR1cm5lZCBieQotICAgIC8vIGFkZCgpLgotICAgIHZvaWQgc29ydEJ5Q29uZmlnKCk7Ci0KLSAgICAvLyBGb3IgdXNlIGFmdGVyIHNvcnRCeUNvbmZpZygpIHRvIG1hcCBmcm9tIHRoZSBvcmlnaW5hbCBwb3NpdGlvbiBvZgotICAgIC8vIGEgc3RyaW5nIHRvIGl0cyBuZXcgc29ydGVkIHBvc2l0aW9uLgotICAgIHNpemVfdCBtYXBPcmlnaW5hbFBvc1RvTmV3UG9zKHNpemVfdCBvcmlnaW5hbFBvcykgY29uc3QgewotICAgICAgICByZXR1cm4gbU9yaWdpbmFsUG9zVG9OZXdQb3MuaXRlbUF0KG9yaWdpbmFsUG9zKTsKLSAgICB9Ci0KLSAgICBzcDxBYXB0RmlsZT4gY3JlYXRlU3RyaW5nQmxvY2soKTsKLQotICAgIHN0YXR1c190IHdyaXRlU3RyaW5nQmxvY2soY29uc3Qgc3A8QWFwdEZpbGU+JiBwb29sKTsKLQotICAgIC8qKgotICAgICAqIEZpbmQgb3V0IGFuIG9mZnNldCBpbiB0aGUgcG9vbCBmb3IgYSBwYXJ0aWN1bGFyIHN0cmluZy4gIElmIHRoZSBzdHJpbmcKLSAgICAgKiBwb29sIGlzIHNvcnRlZCwgdGhpcyBjYW4gbm90IGJlIGNhbGxlZCB1bnRpbCBhZnRlciBjcmVhdGVTdHJpbmdCbG9jaygpCi0gICAgICogb3Igd3JpdGVTdHJpbmdCbG9jaygpIGhhcyBiZWVuIGNhbGxlZAotICAgICAqICh3aGljaCBkZXRlcm1pbmVzIHRoZSBvZmZzZXRzKS4gIEluIHRoZSBjYXNlIG9mIGEgc3RyaW5nIHRoYXQgYXBwZWFycwotICAgICAqIG11bHRpcGxlIHRpbWVzIGluIHRoZSBwb29sLCB0aGUgZmlyc3Qgb2Zmc2V0IHdpbGwgYmUgcmV0dXJuZWQuICBSZXR1cm5zCi0gICAgICogLTEgaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBleGlzdC4KLSAgICAgKi8KLSAgICBzc2l6ZV90IG9mZnNldEZvclN0cmluZyhjb25zdCBTdHJpbmcxNiYgdmFsKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIEZpbmQgYWxsIG9mIHRoZSBvZmZzZXRzIGluIHRoZSBwb29sIGZvciBhIHBhcnRpY3VsYXIgc3RyaW5nLiAgSWYgdGhlCi0gICAgICogc3RyaW5nIHBvb2wgaXMgc29ydGVkLCB0aGlzIGNhbiBub3QgYmUgY2FsbGVkIHVudGlsIGFmdGVyCi0gICAgICogY3JlYXRlU3RyaW5nQmxvY2soKSBvciB3cml0ZVN0cmluZ0Jsb2NrKCkgaGFzIGJlZW4gY2FsbGVkCi0gICAgICogKHdoaWNoIGRldGVybWluZXMgdGhlIG9mZnNldHMpLiAgUmV0dXJucyBOVUxMIGlmIHRoZSBzdHJpbmcgZG9lcyBub3QgZXhpc3QuCi0gICAgICovCi0gICAgY29uc3QgVmVjdG9yPHNpemVfdD4qIG9mZnNldHNGb3JTdHJpbmcoY29uc3QgU3RyaW5nMTYmIHZhbCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGludCBjb25maWdfc29ydCh2b2lkKiBzdGF0ZSwgY29uc3Qgdm9pZCogbGhzLCBjb25zdCB2b2lkKiByaHMpOwotCi0gICAgY29uc3QgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1VVEY4OwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBkYXRhIHN0cnVjdHVyZXMgcmVwcmVzZW50IHRoZSBhY3R1YWwgc3RydWN0dXJlcwotICAgIC8vIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSBmaW5hbCBzdHJpbmcgcG9vbC4KLQotICAgIC8vIFJhdyBhcnJheSBvZiB1bmlxdWUgc3RyaW5ncywgaW4gc29tZSBhcmJpdHJhcnkgb3JkZXIuICBUaGlzIGlzIHRoZQotICAgIC8vIGFjdHVhbCBzdHJpbmdzIHRoYXQgYXBwZWFyIGluIHRoZSBmaW5hbCBzdHJpbmcgcG9vbCwgaW4gdGhlIG9yZGVyCi0gICAgLy8gdGhhdCB0aGV5IHdpbGwgYmUgd3JpdHRlbi4KLSAgICBWZWN0b3I8ZW50cnk+ICAgICAgICAgICAgICAgICAgICAgICAgICAgbUVudHJpZXM7Ci0gICAgLy8gQXJyYXkgb2YgaW5kaWNlcyBpbnRvIG1FbnRyaWVzLCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlCi0gICAgLy8gYWRkZWQgdG8gdGhlIHBvb2wuICBUaGlzIGNhbiBiZSBkaWZmZXJlbnQgdGhhbiBtRW50cmllcwotICAgIC8vIGlmIHRoZSBzYW1lIHN0cmluZyB3YXMgYWRkZWQgbXVsdGlwbGUgdGltZXMgKGl0IHdpbGwgYXBwZWFyCi0gICAgLy8gb25jZSBpbiBtRW50cmllcywgd2l0aCBtdWx0aXBsZSBvY2N1cnJlbmNlcyBpbiB0aGlzIGFycmF5KS4KLSAgICAvLyBUaGlzIGlzIHRoZSBsb29rdXAgYXJyYXkgdGhhdCB3aWxsIGJlIHdyaXR0ZW4gZm9yIGZpbmRpbmcKLSAgICAvLyB0aGUgc3RyaW5nIGZvciBlYWNoIG9mZnNldC9wb3NpdGlvbiBpbiB0aGUgc3RyaW5nIHBvb2wuCi0gICAgVmVjdG9yPHNpemVfdD4gICAgICAgICAgICAgICAgICAgICAgICAgIG1FbnRyeUFycmF5OwotICAgIC8vIE9wdGlvbmFsIHN0eWxlIHNwYW4gaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGVhY2ggaW5kZXggb2YKLSAgICAvLyBtRW50cnlBcnJheS4KLSAgICBWZWN0b3I8ZW50cnlfc3R5bGU+ICAgICAgICAgICAgICAgICAgICAgbUVudHJ5U3R5bGVBcnJheTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB1c2VkIGZvciBib29rLWtlZXBpbmcgYXMgdGhlCi0gICAgLy8gc3RyaW5nIHBvb2wgaXMgY29uc3RydWN0ZWQuCi0KLSAgICAvLyBVbmlxdWUgc2V0IG9mIGFsbCB0aGUgc3RyaW5ncyBhZGRlZCB0byB0aGUgcG9vbCwgbWFwcGVkIHRvCi0gICAgLy8gdGhlIGZpcnN0IGluZGV4IG9mIG1FbnRyeUFycmF5IHdoZXJlIHRoZSB2YWx1ZSB3YXMgYWRkZWQuCi0gICAgRGVmYXVsdEtleWVkVmVjdG9yPFN0cmluZzE2LCBzc2l6ZV90PiAgIG1WYWx1ZXM7Ci0gICAgLy8gVGhpcyBhcnJheSBtYXBzIGZyb20gdGhlIG9yaWdpbmFsIHBvc2l0aW9uIGEgc3RyaW5nIHdhcyBwbGFjZWQgYXQKLSAgICAvLyBpbiBtRW50cnlBcnJheSB0byBpdHMgbmV3IHBvc2l0aW9uIGFmdGVyIGJlaW5nIHNvcnRlZCB3aXRoIHNvcnRCeUNvbmZpZygpLgotICAgIFZlY3RvcjxzaXplX3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICBtT3JpZ2luYWxQb3NUb05ld1BvczsKLX07Ci0KLS8vIFRoZSBlbnRyeSB0eXBlcyBhcmUgdHJpdmlhbGx5IG1vdmFibGUgYmVjYXVzZSBhbGwgZmllbGRzIHRoZXkgY29udGFpbiwgaW5jbHVkaW5nCi0vLyB0aGUgdmVjdG9ycyBhbmQgc3RyaW5ncywgYXJlIHRyaXZpYWxseSBtb3ZhYmxlLgotbmFtZXNwYWNlIGFuZHJvaWQgewotICAgIEFORFJPSURfVFJJVklBTF9NT1ZFX1RSQUlUKFN0cmluZ1Bvb2w6OmVudHJ5KTsKLSAgICBBTkRST0lEX1RSSVZJQUxfTU9WRV9UUkFJVChTdHJpbmdQb29sOjplbnRyeV9zdHlsZV9zcGFuKTsKLSAgICBBTkRST0lEX1RSSVZJQUxfTU9WRV9UUkFJVChTdHJpbmdQb29sOjplbnRyeV9zdHlsZSk7Ci19OwotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9Xb3JrUXVldWUuY3BwIGIvdG9vbHMvYWFwdC9Xb3JrUXVldWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGE5NjJmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvV29ya1F1ZXVlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8gI2RlZmluZSBMT0dfTkRFQlVHIDAKLSNkZWZpbmUgTE9HX1RBRyAiV29ya1F1ZXVlIgotCi0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLy8gLS0tIFdvcmtRdWV1ZSAtLS0KLQotV29ya1F1ZXVlOjpXb3JrUXVldWUoc2l6ZV90IG1heFRocmVhZHMsIGJvb2wgY2FuQ2FsbEphdmEpIDoKLSAgICAgICAgbU1heFRocmVhZHMobWF4VGhyZWFkcyksIG1DYW5DYWxsSmF2YShjYW5DYWxsSmF2YSksCi0gICAgICAgIG1DYW5jZWxlZChmYWxzZSksIG1GaW5pc2hlZChmYWxzZSksIG1JZGxlVGhyZWFkcygwKSB7Ci19Ci0KLVdvcmtRdWV1ZTo6fldvcmtRdWV1ZSgpIHsKLSAgICBpZiAoIWNhbmNlbCgpKSB7Ci0gICAgICAgIGZpbmlzaCgpOwotICAgIH0KLX0KLQotc3RhdHVzX3QgV29ya1F1ZXVlOjpzY2hlZHVsZShXb3JrVW5pdCogd29ya1VuaXQsIHNpemVfdCBiYWNrbG9nKSB7Ci0gICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKLQotICAgIGlmIChtRmluaXNoZWQgfHwgbUNhbmNlbGVkKSB7Ci0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICBpZiAobVdvcmtUaHJlYWRzLnNpemUoKSA8IG1NYXhUaHJlYWRzCi0gICAgICAgICAgICAmJiBtSWRsZVRocmVhZHMgPCBtV29ya1VuaXRzLnNpemUoKSArIDEpIHsKLSAgICAgICAgc3A8V29ya1RocmVhZD4gd29ya1RocmVhZCA9IG5ldyBXb3JrVGhyZWFkKHRoaXMsIG1DYW5DYWxsSmF2YSk7Ci0gICAgICAgIHN0YXR1c190IHN0YXR1cyA9IHdvcmtUaHJlYWQtPnJ1bigiV29ya1F1ZXVlOjpXb3JrVGhyZWFkIik7Ci0gICAgICAgIGlmIChzdGF0dXMpIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KLSAgICAgICAgbVdvcmtUaHJlYWRzLmFkZCh3b3JrVGhyZWFkKTsKLSAgICAgICAgbUlkbGVUaHJlYWRzICs9IDE7Ci0gICAgfSBlbHNlIGlmIChiYWNrbG9nKSB7Ci0gICAgICAgIHdoaWxlIChtV29ya1VuaXRzLnNpemUoKSA+PSBtTWF4VGhyZWFkcyAqIGJhY2tsb2cpIHsKLSAgICAgICAgICAgIG1Xb3JrRGVxdWV1ZWRDb25kaXRpb24ud2FpdChtTG9jayk7Ci0gICAgICAgICAgICBpZiAobUZpbmlzaGVkIHx8IG1DYW5jZWxlZCkgewotICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG1Xb3JrVW5pdHMuYWRkKHdvcmtVbml0KTsKLSAgICBtV29ya0NoYW5nZWRDb25kaXRpb24uYnJvYWRjYXN0KCk7Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBXb3JrUXVldWU6OmNhbmNlbCgpIHsKLSAgICBBdXRvTXV0ZXggX2wobUxvY2spOwotCi0gICAgcmV0dXJuIGNhbmNlbExvY2tlZCgpOwotfQotCi1zdGF0dXNfdCBXb3JrUXVldWU6OmNhbmNlbExvY2tlZCgpIHsKLSAgICBpZiAobUZpbmlzaGVkKSB7Ci0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICBpZiAoIW1DYW5jZWxlZCkgewotICAgICAgICBtQ2FuY2VsZWQgPSB0cnVlOwotCi0gICAgICAgIHNpemVfdCBjb3VudCA9IG1Xb3JrVW5pdHMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtV29ya1VuaXRzLml0ZW1BdChpKTsKLSAgICAgICAgfQotICAgICAgICBtV29ya1VuaXRzLmNsZWFyKCk7Ci0gICAgICAgIG1Xb3JrQ2hhbmdlZENvbmRpdGlvbi5icm9hZGNhc3QoKTsKLSAgICAgICAgbVdvcmtEZXF1ZXVlZENvbmRpdGlvbi5icm9hZGNhc3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuIE9LOwotfQotCi1zdGF0dXNfdCBXb3JrUXVldWU6OmZpbmlzaCgpIHsKLSAgICB7IC8vIGFjcXVpcmUgbG9jawotICAgICAgICBBdXRvTXV0ZXggX2wobUxvY2spOwotCi0gICAgICAgIGlmIChtRmluaXNoZWQpIHsKLSAgICAgICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICAgICAgfQotCi0gICAgICAgIG1GaW5pc2hlZCA9IHRydWU7Ci0gICAgICAgIG1Xb3JrQ2hhbmdlZENvbmRpdGlvbi5icm9hZGNhc3QoKTsKLSAgICB9IC8vIHJlbGVhc2UgbG9jawotCi0gICAgLy8gSXQgaXMgbm90IHBvc3NpYmxlIGZvciB0aGUgbGlzdCBvZiB3b3JrIHRocmVhZHMgdG8gY2hhbmdlIG9uY2UgdGhlIG1GaW5pc2hlZAotICAgIC8vIGZsYWcgaGFzIGJlZW4gc2V0LCBzbyB3ZSBjYW4gYWNjZXNzIG1Xb3JrVGhyZWFkcyBvdXRzaWRlIG9mIHRoZSBsb2NrIGhlcmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbVdvcmtUaHJlYWRzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgbVdvcmtUaHJlYWRzLml0ZW1BdChpKS0+am9pbigpOwotICAgIH0KLSAgICBtV29ya1RocmVhZHMuY2xlYXIoKTsKLSAgICByZXR1cm4gT0s7Ci19Ci0KLWJvb2wgV29ya1F1ZXVlOjp0aHJlYWRMb29wKCkgewotICAgIFdvcmtVbml0KiB3b3JrVW5pdDsKLSAgICB7IC8vIGFjcXVpcmUgbG9jawotICAgICAgICBBdXRvTXV0ZXggX2wobUxvY2spOwotCi0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIGlmIChtQ2FuY2VsZWQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbVdvcmtVbml0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICB3b3JrVW5pdCA9IG1Xb3JrVW5pdHMuaXRlbUF0KDApOwotICAgICAgICAgICAgICAgIG1Xb3JrVW5pdHMucmVtb3ZlQXQoMCk7Ci0gICAgICAgICAgICAgICAgbUlkbGVUaHJlYWRzIC09IDE7Ci0gICAgICAgICAgICAgICAgbVdvcmtEZXF1ZXVlZENvbmRpdGlvbi5icm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1GaW5pc2hlZCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVdvcmtDaGFuZ2VkQ29uZGl0aW9uLndhaXQobUxvY2spOwotICAgICAgICB9Ci0gICAgfSAvLyByZWxlYXNlIGxvY2sKLQotICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB3b3JrVW5pdC0+cnVuKCk7Ci0gICAgZGVsZXRlIHdvcmtVbml0OwotCi0gICAgeyAvLyBhY3F1aXJlIGxvY2sKLSAgICAgICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKLQotICAgICAgICBtSWRsZVRocmVhZHMgKz0gMTsKLQotICAgICAgICBpZiAoIXNob3VsZENvbnRpbnVlKSB7Ci0gICAgICAgICAgICBjYW5jZWxMb2NrZWQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gLy8gcmVsZWFzZSBsb2NrCi0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gLS0tIFdvcmtRdWV1ZTo6V29ya1RocmVhZCAtLS0KLQotV29ya1F1ZXVlOjpXb3JrVGhyZWFkOjpXb3JrVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBib29sIGNhbkNhbGxKYXZhKSA6Ci0gICAgICAgIFRocmVhZChjYW5DYWxsSmF2YSksIG1Xb3JrUXVldWUod29ya1F1ZXVlKSB7Ci19Ci0KLVdvcmtRdWV1ZTo6V29ya1RocmVhZDo6fldvcmtUaHJlYWQoKSB7Ci19Ci0KLWJvb2wgV29ya1F1ZXVlOjpXb3JrVGhyZWFkOjp0aHJlYWRMb29wKCkgewotICAgIHJldHVybiBtV29ya1F1ZXVlLT50aHJlYWRMb29wKCk7Ci19Ci0KLX07ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9Xb3JrUXVldWUuaCBiL3Rvb2xzL2FhcHQvV29ya1F1ZXVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzOGYwNWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9Xb3JrUXVldWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKl0KLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgQUFQVF9XT1JLX1FVRVVFX0gKLSNkZWZpbmUgQUFQVF9XT1JLX1FVRVVFX0gKLQotI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi0vKgotICogQSB0aHJlYWRlZCB3b3JrIHF1ZXVlLgotICoKLSAqIFRoaXMgY2xhc3MgaXMgZGVzaWduZWQgdG8gbWFrZSBpdCBlYXN5IHRvIHJ1biBhIGJ1bmNoIG9mIGlzb2xhdGVkIHdvcmsKLSAqIHVuaXRzIGluIHBhcmFsbGVsLCB1c2luZyB1cCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0aHJlYWRzLgotICogVG8gdXNlIGl0LCB3cml0ZSBhIGxvb3AgdG8gcG9zdCB3b3JrIHVuaXRzIHRvIHRoZSB3b3JrIHF1ZXVlLCB0aGVuIHN5bmNocm9uaXplCi0gKiBvbiB0aGUgcXVldWUgYXQgdGhlIGVuZC4KLSAqLwotY2xhc3MgV29ya1F1ZXVlIHsKLXB1YmxpYzoKLSAgICBjbGFzcyBXb3JrVW5pdCB7Ci0gICAgcHVibGljOgotICAgICAgICBXb3JrVW5pdCgpIHsgfQotICAgICAgICB2aXJ0dWFsIH5Xb3JrVW5pdCgpIHsgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFJ1bnMgdGhlIHdvcmsgdW5pdC4KLSAgICAgICAgICogSWYgdGhlIHJlc3VsdCBpcyAndHJ1ZScgdGhlbiB0aGUgd29yayBxdWV1ZSBjb250aW51ZXMgc2NoZWR1bGluZyB3b3JrIGFzIHVzdWFsLgotICAgICAgICAgKiBJZiB0aGUgcmVzdWx0IGlzICdmYWxzZScgdGhlbiB0aGUgd29yayBxdWV1ZSBpcyBjYW5jZWxlZC4KLSAgICAgICAgICovCi0gICAgICAgIHZpcnR1YWwgYm9vbCBydW4oKSA9IDA7Ci0gICAgfTsKLQotICAgIC8qIENyZWF0ZXMgYSB3b3JrIHF1ZXVlIHdpdGggdGhlIHNwZWNpZmllZCBtYXhpbXVtIG51bWJlciBvZiB3b3JrIHRocmVhZHMuICovCi0gICAgV29ya1F1ZXVlKHNpemVfdCBtYXhUaHJlYWRzLCBib29sIGNhbkNhbGxKYXZhID0gdHJ1ZSk7Ci0KLSAgICAvKiBEZXN0cm95cyB0aGUgd29yayBxdWV1ZS4KLSAgICAgKiBDYW5jZWxzIHBlbmRpbmcgd29yayBhbmQgd2FpdHMgZm9yIGFsbCByZW1haW5pbmcgdGhyZWFkcyB0byBjb21wbGV0ZS4KLSAgICAgKi8KLSAgICB+V29ya1F1ZXVlKCk7Ci0KLSAgICAvKiBQb3N0cyBhIHdvcmsgdW5pdCB0byBydW4gbGF0ZXIuCi0gICAgICogSWYgdGhlIHdvcmsgcXVldWUgaGFzIGJlZW4gY2FuY2VsZWQgb3IgaXMgYWxyZWFkeSBmaW5pc2hlZCwgcmV0dXJucyBJTlZBTElEX09QRVJBVElPTgotICAgICAqIGFuZCBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgd29yayB1bml0IChjYWxsZXIgbXVzdCBkZXN0cm95IGl0IGl0c2VsZikuCi0gICAgICogT3RoZXJ3aXNlLCByZXR1cm5zIE9LIGFuZCB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHdvcmsgdW5pdCAodGhlIHdvcmsgcXVldWUgd2lsbAotICAgICAqIGRlc3Ryb3kgaXQgYXV0b21hdGljYWxseSkuCi0gICAgICoKLSAgICAgKiBGb3IgZmxvdyBjb250cm9sLCB0aGlzIG1ldGhvZCBibG9ja3Mgd2hlbiB0aGUgc2l6ZSBvZiB0aGUgcGVuZGluZyB3b3JrIHF1ZXVlIGlzIG1vcmUKLSAgICAgKiAnYmFja2xvZycgdGltZXMgdGhlIG51bWJlciBvZiB0aHJlYWRzLiAgVGhpcyBjb25kaXRpb24gcmVkdWNlcyB0aGUgcmF0ZSBvZiBlbnRyeSBpbnRvCi0gICAgICogdGhlIHBlbmRpbmcgd29yayBxdWV1ZSBhbmQgcHJldmVudHMgaXQgZnJvbSBncm93aW5nIG11Y2ggbW9yZSByYXBpZGx5IHRoYW4gdGhlCi0gICAgICogd29yayB0aHJlYWRzIGNhbiBhY3R1YWxseSBoYW5kbGUuCi0gICAgICoKLSAgICAgKiBJZiAnYmFja2xvZycgaXMgMCwgdGhlbiBubyB0aHJvdHRsZSBpcyBhcHBsaWVkLgotICAgICAqLwotICAgIHN0YXR1c190IHNjaGVkdWxlKFdvcmtVbml0KiB3b3JrVW5pdCwgc2l6ZV90IGJhY2tsb2cgPSAyKTsKLQotICAgIC8qIENhbmNlbHMgYWxsIHBlbmRpbmcgd29yay4KLSAgICAgKiBJZiB0aGUgd29yayBxdWV1ZSBpcyBhbHJlYWR5IGZpbmlzaGVkLCByZXR1cm5zIElOVkFMSURfT1BFUkFUSU9OLgotICAgICAqIElmIHRoZSB3b3JrIHF1ZXVlIGlzIGFscmVhZHkgY2FuY2VsZWQsIHJldHVybnMgT0sgYW5kIGRvZXMgbm90aGluZyBlbHNlLgotICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyBPSywgZGlzY2FyZHMgYWxsIHBlbmRpbmcgd29yayB1bml0cyBhbmQgcHJldmVudHMgYWRkaXRpb25hbAotICAgICAqIHdvcmsgdW5pdHMgZnJvbSBiZWluZyBzY2hlZHVsZWQuCi0gICAgICoKLSAgICAgKiBDYWxsIGZpbmlzaCgpIGFmdGVyIGNhbmNlbCgpIHRvIHdhaXQgZm9yIGFsbCByZW1haW5pbmcgd29yayB0byBjb21wbGV0ZS4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBjYW5jZWwoKTsKLQotICAgIC8qIFdhaXRzIGZvciBhbGwgd29yayB0byBjb21wbGV0ZS4KLSAgICAgKiBJZiB0aGUgd29yayBxdWV1ZSBpcyBhbHJlYWR5IGZpbmlzaGVkLCByZXR1cm5zIElOVkFMSURfT1BFUkFUSU9OLgotICAgICAqIE90aGVyd2lzZSwgd2FpdHMgZm9yIGFsbCB3b3JrIHRvIGNvbXBsZXRlIGFuZCByZXR1cm5zIE9LLgotICAgICAqLwotICAgIHN0YXR1c190IGZpbmlzaCgpOwotCi1wcml2YXRlOgotICAgIGNsYXNzIFdvcmtUaHJlYWQgOiBwdWJsaWMgVGhyZWFkIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFdvcmtUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUsIGJvb2wgY2FuQ2FsbEphdmEpOwotICAgICAgICB2aXJ0dWFsIH5Xb3JrVGhyZWFkKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2aXJ0dWFsIGJvb2wgdGhyZWFkTG9vcCgpOwotCi0gICAgICAgIFdvcmtRdWV1ZSogY29uc3QgbVdvcmtRdWV1ZTsKLSAgICB9OwotCi0gICAgc3RhdHVzX3QgY2FuY2VsTG9ja2VkKCk7Ci0gICAgYm9vbCB0aHJlYWRMb29wKCk7IC8vIGNhbGxlZCBmcm9tIGVhY2ggd29yayB0aHJlYWQKLQotICAgIGNvbnN0IHNpemVfdCBtTWF4VGhyZWFkczsKLSAgICBjb25zdCBib29sIG1DYW5DYWxsSmF2YTsKLQotICAgIE11dGV4IG1Mb2NrOwotICAgIENvbmRpdGlvbiBtV29ya0NoYW5nZWRDb25kaXRpb247Ci0gICAgQ29uZGl0aW9uIG1Xb3JrRGVxdWV1ZWRDb25kaXRpb247Ci0KLSAgICBib29sIG1DYW5jZWxlZDsKLSAgICBib29sIG1GaW5pc2hlZDsKLSAgICBzaXplX3QgbUlkbGVUaHJlYWRzOwotICAgIFZlY3RvcjxzcDxXb3JrVGhyZWFkPiA+IG1Xb3JrVGhyZWFkczsKLSAgICBWZWN0b3I8V29ya1VuaXQqPiBtV29ya1VuaXRzOwotfTsKLQotfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIEFBUFRfV09SS19RVUVVRV9ICmRpZmYgLS1naXQgYS90b29scy9hYXB0L1hNTE5vZGUuY3BwIGIvdG9vbHMvYWFwdC9YTUxOb2RlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY2M2FkNS4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L1hNTE5vZGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTUxMCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIEJ1aWxkIHJlc291cmNlIGZpbGVzIGZyb20gcmF3IGFzc2V0cy4KLS8vCi0KLSNpbmNsdWRlICJYTUxOb2RlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VUYWJsZS5oIgotI2luY2x1ZGUgInBzZXVkb2xvY2FsaXplLmgiCi0KLSNpbmNsdWRlIDx1dGlscy9CeXRlT3JkZXIuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZuZGVmIEhBVkVfTVNfQ19SVU5USU1FCi0jZGVmaW5lIE9fQklOQVJZIDAKLSNlbmRpZgotCi0jZGVmaW5lIE5PSVNZKHgpIC8veAotI2RlZmluZSBOT0lTWV9QQVJTRSh4KSAvL3gKLQotY29uc3QgY2hhciogY29uc3QgUkVTT1VSQ0VTX1JPT1RfTkFNRVNQQUNFID0gImh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvIjsKLWNvbnN0IGNoYXIqIGNvbnN0IFJFU09VUkNFU19BTkRST0lEX05BTUVTUEFDRSA9ICJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiOwotY29uc3QgY2hhciogY29uc3QgUkVTT1VSQ0VTX0FVVE9fUEFDS0FHRV9OQU1FU1BBQ0UgPSAiaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy1hdXRvIjsKLWNvbnN0IGNoYXIqIGNvbnN0IFJFU09VUkNFU19ST09UX1BSVl9OQU1FU1BBQ0UgPSAiaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Bydi9yZXMvIjsKLQotY29uc3QgY2hhciogY29uc3QgWExJRkZfWE1MTlMgPSAidXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI7Ci1jb25zdCBjaGFyKiBjb25zdCBBTExPV0VEX1hMSUZGX0VMRU1FTlRTW10gPSB7Ci0gICAgICAgICJicHQiLAotICAgICAgICAiZXB0IiwKLSAgICAgICAgIml0IiwKLSAgICAgICAgInBoIiwKLSAgICAgICAgImciLAotICAgICAgICAiYngiLAotICAgICAgICAiZXgiLAotICAgICAgICAieCIKLSAgICB9OwotCi1ib29sIGlzV2hpdGVzcGFjZShjb25zdCBjaGFyMTZfdCogc3RyKQotewotICAgIHdoaWxlICgqc3RyICE9IDAgJiYgKnN0ciA8IDEyOCAmJiBpc3NwYWNlKCpzdHIpKSB7Ci0gICAgICAgIHN0cisrOwotICAgIH0KLSAgICByZXR1cm4gKnN0ciA9PSAwOwotfQotCi1zdGF0aWMgY29uc3QgU3RyaW5nMTYgUkVTT1VSQ0VTX1BSRUZJWChSRVNPVVJDRVNfUk9PVF9OQU1FU1BBQ0UpOwotc3RhdGljIGNvbnN0IFN0cmluZzE2IFJFU09VUkNFU19QUkVGSVhfQVVUT19QQUNLQUdFKFJFU09VUkNFU19BVVRPX1BBQ0tBR0VfTkFNRVNQQUNFKTsKLXN0YXRpYyBjb25zdCBTdHJpbmcxNiBSRVNPVVJDRVNfUFJWX1BSRUZJWChSRVNPVVJDRVNfUk9PVF9QUlZfTkFNRVNQQUNFKTsKLXN0YXRpYyBjb25zdCBTdHJpbmcxNiBSRVNPVVJDRVNfVE9PTFNfTkFNRVNQQUNFKCJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS90b29scyIpOwotCi1TdHJpbmcxNiBnZXROYW1lc3BhY2VSZXNvdXJjZVBhY2thZ2UoU3RyaW5nMTYgYXBwUGFja2FnZSwgU3RyaW5nMTYgbmFtZXNwYWNlVXJpLCBib29sKiBvdXRJc1B1YmxpYykKLXsKLSAgICAvL3ByaW50ZigiJXMgc3RhcnRzIHdpdGggJXM/XG4iLCBTdHJpbmc4KG5hbWVzcGFjZVVyaSkuc3RyaW5nKCksCi0gICAgLy8gICAgICAgU3RyaW5nOChSRVNPVVJDRVNfUFJFRklYKS5zdHJpbmcoKSk7Ci0gICAgc2l6ZV90IHByZWZpeFNpemU7Ci0gICAgYm9vbCBpc1B1YmxpYyA9IHRydWU7Ci0gICAgaWYobmFtZXNwYWNlVXJpLnN0YXJ0c1dpdGgoUkVTT1VSQ0VTX1BSRUZJWF9BVVRPX1BBQ0tBR0UpKSB7Ci0gICAgICAgIE5PSVNZKHByaW50ZigiVXNpbmcgZGVmYXVsdCBhcHBsaWNhdGlvbiBwYWNrYWdlOiAlcyAtPiAlc1xuIiwgU3RyaW5nOChuYW1lc3BhY2VVcmkpLnN0cmluZygpLCBTdHJpbmc4KGFwcFBhY2thZ2UpLnN0cmluZygpKSk7Ci0gICAgICAgIGlzUHVibGljID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGFwcFBhY2thZ2U7Ci0gICAgfSBlbHNlIGlmIChuYW1lc3BhY2VVcmkuc3RhcnRzV2l0aChSRVNPVVJDRVNfUFJFRklYKSkgewotICAgICAgICBwcmVmaXhTaXplID0gUkVTT1VSQ0VTX1BSRUZJWC5zaXplKCk7Ci0gICAgfSBlbHNlIGlmIChuYW1lc3BhY2VVcmkuc3RhcnRzV2l0aChSRVNPVVJDRVNfUFJWX1BSRUZJWCkpIHsKLSAgICAgICAgaXNQdWJsaWMgPSBmYWxzZTsKLSAgICAgICAgcHJlZml4U2l6ZSA9IFJFU09VUkNFU19QUlZfUFJFRklYLnNpemUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAob3V0SXNQdWJsaWMpICpvdXRJc1B1YmxpYyA9IGlzUHVibGljOyAvLyA9IHRydWUKLSAgICAgICAgcmV0dXJuIFN0cmluZzE2KCk7Ci0gICAgfQotCi0gICAgLy9wcmludGYoIllFUyFcbiIpOwotICAgIC8vcHJpbnRmKCJuYW1lc3BhY2U6ICVzXG4iLCBTdHJpbmc4KFN0cmluZzE2KG5hbWVzcGFjZVVyaSwgbmFtZXNwYWNlVXJpLnNpemUoKS1wcmVmaXhTaXplLCBwcmVmaXhTaXplKSkuc3RyaW5nKCkpOwotICAgIGlmIChvdXRJc1B1YmxpYykgKm91dElzUHVibGljID0gaXNQdWJsaWM7Ci0gICAgcmV0dXJuIFN0cmluZzE2KG5hbWVzcGFjZVVyaSwgbmFtZXNwYWNlVXJpLnNpemUoKS1wcmVmaXhTaXplLCBwcmVmaXhTaXplKTsKLX0KLQotc3RhdHVzX3QgaGFzU3Vic3RpdHV0aW9uRXJyb3JzKGNvbnN0IGNoYXIqIGZpbGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1hNTFRyZWUqIGluWG1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2IHN0cjE2KQotewotICAgIGNvbnN0IGNoYXIxNl90KiBzdHIgPSBzdHIxNi5zdHJpbmcoKTsKLSAgICBjb25zdCBjaGFyMTZfdCogcCA9IHN0cjsKLSAgICBjb25zdCBjaGFyMTZfdCogZW5kID0gc3RyICsgc3RyMTYuc2l6ZSgpOwotCi0gICAgYm9vbCBub25wb3NpdGlvbmFsID0gZmFsc2U7Ci0gICAgaW50IGFyZ0NvdW50ID0gMDsKLQotICAgIHdoaWxlIChwIDwgZW5kKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIExvb2sgZm9yIHRoZSBzdGFydCBvZiBhIEphdmEtc3R5bGUgc3Vic3RpdHV0aW9uIHNlcXVlbmNlLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCpwID09ICclJyAmJiBwICsgMSA8IGVuZCkgewotICAgICAgICAgICAgcCsrOwotCi0gICAgICAgICAgICAvLyBBIGxpdGVyYWwgcGVyY2VudCBzaWduIHJlcHJlc2VudGVkIGJ5ICUlCi0gICAgICAgICAgICBpZiAoKnAgPT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhcmdDb3VudCsrOwotCi0gICAgICAgICAgICBpZiAoKnAgPj0gJzAnICYmICpwIDw9ICc5JykgewotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKCpwID49ICcwJyAmJiAqcCA8PSAnOScpOwotICAgICAgICAgICAgICAgIGlmICgqcCAhPSAnJCcpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGEgc2l6ZSBzcGVjaWZpY2F0aW9uIGluc3RlYWQgb2YgcG9zaXRpb24uCi0gICAgICAgICAgICAgICAgICAgIG5vbnBvc2l0aW9uYWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJzwnKSB7Ci0gICAgICAgICAgICAgICAgLy8gUmV1c2luZyBsYXN0IGFyZ3VtZW50OyBiYWQgaWRlYSBzaW5jZSBpdCBjYW4gYmUgcmUtYXJyYW5nZWQuCi0gICAgICAgICAgICAgICAgbm9ucG9zaXRpb25hbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcCsrOwotCi0gICAgICAgICAgICAgICAgLy8gT3B0aW9uYWxseSAnJCcgY2FuIGJlIHNwZWNpZmllZCBhdCB0aGUgZW5kLgotICAgICAgICAgICAgICAgIGlmIChwIDwgZW5kICYmICpwID09ICckJykgewotICAgICAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBub25wb3NpdGlvbmFsID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWdub3JlIGZsYWdzIGFuZCB3aWR0aHMKLSAgICAgICAgICAgIHdoaWxlIChwIDwgZW5kICYmICgqcCA9PSAnLScgfHwKLSAgICAgICAgICAgICAgICAgICAgKnAgPT0gJyMnIHx8Ci0gICAgICAgICAgICAgICAgICAgICpwID09ICcrJyB8fAotICAgICAgICAgICAgICAgICAgICAqcCA9PSAnICcgfHwKLSAgICAgICAgICAgICAgICAgICAgKnAgPT0gJywnIHx8Ci0gICAgICAgICAgICAgICAgICAgICpwID09ICcoJyB8fAotICAgICAgICAgICAgICAgICAgICAoKnAgPj0gJzAnICYmICpwIDw9ICc5JykpKSB7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGRldGVjdCBzdHJpbmdzIHRoYXQgYXJlIGdvaW5nIHRvIFRpbWUuZm9ybWF0KCkKLSAgICAgICAgICAgICAqIGluc3RlYWQgb2YgU3RyaW5nLmZvcm1hdCgpCi0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogQ29tcGFyaXNvbiBvZiBTdHJpbmcuZm9ybWF0KCkgYW5kIFRpbWUuZm9ybWF0KCkgYXJnczoKLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBTdHJpbmc6IEFCQyBFIEdIICBTVCBYIGFiY2RlZmdoICBub3N0IHgKLSAgICAgICAgICAgICAqICAgVGltZTogICAgREVGR0hLTVMgVyBaYSAgZCAgIGhrbSAgcyB3IHl6Ci0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogVGhlcmVmb3JlIHdlIGtub3cgaXQncyBkZWZpbml0ZWx5IFRpbWUgaWYgd2UgaGF2ZToKLSAgICAgICAgICAgICAqICAgICBERktNV1prbXd5egotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAocCA8IGVuZCkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoKnApIHsKLSAgICAgICAgICAgICAgICBjYXNlICdEJzoKLSAgICAgICAgICAgICAgICBjYXNlICdGJzoKLSAgICAgICAgICAgICAgICBjYXNlICdLJzoKLSAgICAgICAgICAgICAgICBjYXNlICdNJzoKLSAgICAgICAgICAgICAgICBjYXNlICdXJzoKLSAgICAgICAgICAgICAgICBjYXNlICdaJzoKLSAgICAgICAgICAgICAgICBjYXNlICdrJzoKLSAgICAgICAgICAgICAgICBjYXNlICdtJzoKLSAgICAgICAgICAgICAgICBjYXNlICd3JzoKLSAgICAgICAgICAgICAgICBjYXNlICd5JzoKLSAgICAgICAgICAgICAgICBjYXNlICd6JzoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHArKzsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBzdWJzdGl0dXRpb24gaW4gdGhpcyBzdHJpbmcgYW5kIGFueSBvZiB0aGVtCi0gICAgICogYXJlIG5vdCBpbiBwb3NpdGlvbmFsIGZvcm0sIGdpdmUgdGhlIHVzZXIgYW4gZXJyb3IuCi0gICAgICovCi0gICAgaWYgKGFyZ0NvdW50ID4gMSAmJiBub25wb3NpdGlvbmFsKSB7Ci0gICAgICAgIFNvdXJjZVBvcyhTdHJpbmc4KGZpbGVOYW1lKSwgaW5YbWwtPmdldExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgIk11bHRpcGxlIHN1YnN0aXR1dGlvbnMgc3BlY2lmaWVkIGluIG5vbi1wb3NpdGlvbmFsIGZvcm1hdDsgIgotICAgICAgICAgICAgICAgICJkaWQgeW91IG1lYW4gdG8gYWRkIHRoZSBmb3JtYXR0ZWQ9XCJmYWxzZVwiIGF0dHJpYnV0ZT9cbiIpOwotICAgICAgICByZXR1cm4gTk9UX0VOT1VHSF9EQVRBOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgcGFyc2VTdHlsZWRTdHJpbmcoQnVuZGxlKiBidW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1hNTFRyZWUqIGluWG1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIGVuZFRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzE2KiBvdXRTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nUG9vbDo6ZW50cnlfc3R5bGVfc3Bhbj4qIG91dFNwYW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0Zvcm1hdHRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHNldWRvbG9jYWxpemUpCi17Ci0gICAgVmVjdG9yPFN0cmluZ1Bvb2w6OmVudHJ5X3N0eWxlX3NwYW4+IHNwYW5TdGFjazsKLSAgICBTdHJpbmcxNiBjdXJTdHJpbmc7Ci0gICAgU3RyaW5nMTYgcmF3U3RyaW5nOwotICAgIGNvbnN0IGNoYXIqIGVycm9yTXNnOwotICAgIGludCB4bGlmZkRlcHRoID0gMDsKLSAgICBib29sIGZpcnN0VGltZSA9IHRydWU7Ci0KLSAgICBzaXplX3QgbGVuOwotICAgIFJlc1hNTFRyZWU6OmV2ZW50X2NvZGVfdCBjb2RlOwotICAgIHdoaWxlICgoY29kZT1pblhtbC0+bmV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQgJiYgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKLQotICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpURVhUKSB7Ci0gICAgICAgICAgICBTdHJpbmcxNiB0ZXh0KGluWG1sLT5nZXRUZXh0KCZsZW4pKTsKLSAgICAgICAgICAgIGlmIChmaXJzdFRpbWUgJiYgdGV4dC5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHQuc3RyaW5nKClbMF0gPT0gJ0AnKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSByZXNvdXJjZSByZWZlcmVuY2UsIGRvbid0IGRvIHRoZSBwc2V1ZG9sb2MuCi0gICAgICAgICAgICAgICAgICAgIHBzZXVkb2xvY2FsaXplID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHhsaWZmRGVwdGggPT0gMCAmJiBwc2V1ZG9sb2NhbGl6ZSkgewotICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG9yaWcoU3RyaW5nOCh0ZXh0KS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcHNldWRvID0gcHNldWRvbG9jYWxpemVfc3RyaW5nKG9yaWcpOwotICAgICAgICAgICAgICAgIGN1clN0cmluZy5hcHBlbmQoU3RyaW5nMTYoU3RyaW5nOChwc2V1ZG8uY19zdHIoKSkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRm9ybWF0dGVkICYmIGhhc1N1YnN0aXR1dGlvbkVycm9ycyhmaWxlTmFtZSwgaW5YbWwsIHRleHQpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1clN0cmluZy5hcHBlbmQodGV4dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcxNiBlbGVtZW50MTYoaW5YbWwtPmdldEVsZW1lbnROYW1lKCZsZW4pKTsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZzggZWxlbWVudDgoZWxlbWVudDE2KTsKLQotICAgICAgICAgICAgc2l6ZV90IG5zbGVuOwotICAgICAgICAgICAgY29uc3QgdWludDE2X3QqIG5zID0gaW5YbWwtPmdldEVsZW1lbnROYW1lc3BhY2UoJm5zbGVuKTsKLSAgICAgICAgICAgIGlmIChucyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbnMgPSAoY29uc3QgdWludDE2X3QqKSJcMFwwIjsKLSAgICAgICAgICAgICAgICBuc2xlbiA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmc4IG5zcGFjZShTdHJpbmcxNihucywgbnNsZW4pKTsKLSAgICAgICAgICAgIGlmIChuc3BhY2UgPT0gWExJRkZfWE1MTlMpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgTiA9IHNpemVvZihBTExPV0VEX1hMSUZGX0VMRU1FTlRTKS9zaXplb2YoQUxMT1dFRF9YTElGRl9FTEVNRU5UU1swXSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudDggPT0gQUxMT1dFRF9YTElGRl9FTEVNRU5UU1tpXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgeGxpZmZEZXB0aCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlLCB0cmVhdCBpdCBsaWtlIGl0IHdhcyBqdXN0IHRleHQsIGluIG90aGVyIHdvcmRzLCBkbyBub3RoaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoZXJlIGFuZCBzaWxlbnRseSBkcm9wIHRoaXMgZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3Zlb247Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTb3VyY2VQb3MoU3RyaW5nOChmaWxlTmFtZSksIGluWG1sLT5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGb3VuZCB1bnN1cHBvcnRlZCBYTElGRiB0YWcgPCVzPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgICAgIH0KLW1vdmVvbjoKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG91dFNwYW5zID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3MoU3RyaW5nOChmaWxlTmFtZSksIGluWG1sLT5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgIkZvdW5kIHN0eWxlIHRhZyA8JXM+IHdoZXJlIHN0eWxlcyBhcmUgbm90IGFsbG93ZWRcbiIsIGVsZW1lbnQ4LnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFSZXNUYWJsZTo6Y29sbGVjdFN0cmluZyhvdXRTdHJpbmcsIGN1clN0cmluZy5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyU3RyaW5nLnNpemUoKSwgZmFsc2UsICZlcnJvck1zZywgdHJ1ZSkpIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3MoU3RyaW5nOChmaWxlTmFtZSksIGluWG1sLT5nZXRMaW5lTnVtYmVyKCkpLmVycm9yKCIlcyAoaW4gJXMpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNc2csIFN0cmluZzgoY3VyU3RyaW5nKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByYXdTdHJpbmcuYXBwZW5kKGN1clN0cmluZyk7Ci0gICAgICAgICAgICBjdXJTdHJpbmcgPSBTdHJpbmcxNigpOwotCi0gICAgICAgICAgICBTdHJpbmdQb29sOjplbnRyeV9zdHlsZV9zcGFuIHNwYW47Ci0gICAgICAgICAgICBzcGFuLm5hbWUgPSBlbGVtZW50MTY7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBhaT0wOyBhaTxpblhtbC0+Z2V0QXR0cmlidXRlQ291bnQoKTsgYWkrKykgewotICAgICAgICAgICAgICAgIHNwYW4ubmFtZS5hcHBlbmQoU3RyaW5nMTYoIjsiKSk7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHN0ciA9IGluWG1sLT5nZXRBdHRyaWJ1dGVOYW1lKGFpLCAmbGVuKTsKLSAgICAgICAgICAgICAgICBzcGFuLm5hbWUuYXBwZW5kKHN0ciwgbGVuKTsKLSAgICAgICAgICAgICAgICBzcGFuLm5hbWUuYXBwZW5kKFN0cmluZzE2KCI9IikpOwotICAgICAgICAgICAgICAgIHN0ciA9IGluWG1sLT5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShhaSwgJmxlbik7Ci0gICAgICAgICAgICAgICAgc3Bhbi5uYW1lLmFwcGVuZChzdHIsIGxlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvL3ByaW50ZigiU3BhbjogJXNcbiIsIFN0cmluZzgoc3Bhbi5uYW1lKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBzcGFuLnNwYW4uZmlyc3RDaGFyID0gc3Bhbi5zcGFuLmxhc3RDaGFyID0gb3V0U3RyaW5nLT5zaXplKCk7Ci0gICAgICAgICAgICBzcGFuU3RhY2sucHVzaChzcGFuKTsKLQotICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX1RBRykgewotICAgICAgICAgICAgc2l6ZV90IG5zbGVuOwotICAgICAgICAgICAgY29uc3QgdWludDE2X3QqIG5zID0gaW5YbWwtPmdldEVsZW1lbnROYW1lc3BhY2UoJm5zbGVuKTsKLSAgICAgICAgICAgIGlmIChucyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbnMgPSAoY29uc3QgdWludDE2X3QqKSJcMFwwIjsKLSAgICAgICAgICAgICAgICBuc2xlbiA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmc4IG5zcGFjZShTdHJpbmcxNihucywgbnNsZW4pKTsKLSAgICAgICAgICAgIGlmIChuc3BhY2UgPT0gWExJRkZfWE1MTlMpIHsKLSAgICAgICAgICAgICAgICB4bGlmZkRlcHRoLS07Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIVJlc1RhYmxlOjpjb2xsZWN0U3RyaW5nKG91dFN0cmluZywgY3VyU3RyaW5nLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJTdHJpbmcuc2l6ZSgpLCBmYWxzZSwgJmVycm9yTXNnLCB0cnVlKSkgewotICAgICAgICAgICAgICAgIFNvdXJjZVBvcyhTdHJpbmc4KGZpbGVOYW1lKSwgaW5YbWwtPmdldExpbmVOdW1iZXIoKSkuZXJyb3IoIiVzIChpbiAlcylcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1zZywgU3RyaW5nOChjdXJTdHJpbmcpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJhd1N0cmluZy5hcHBlbmQoY3VyU3RyaW5nKTsKLSAgICAgICAgICAgIGN1clN0cmluZyA9IFN0cmluZzE2KCk7Ci0KLSAgICAgICAgICAgIGlmIChzcGFuU3RhY2suc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RyY21wMTYoaW5YbWwtPmdldEVsZW1lbnROYW1lKCZsZW4pLCBlbmRUYWcuc3RyaW5nKCkpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU291cmNlUG9zKFN0cmluZzgoZmlsZU5hbWUpLCBpblhtbC0+Z2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRm91bmQgdGFnICVzIHdoZXJlIDwlcz4gY2xvc2UgaXMgZXhwZWN0ZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChpblhtbC0+Z2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZW5kVGFnKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZ1Bvb2w6OmVudHJ5X3N0eWxlX3NwYW4gc3BhbiA9IHNwYW5TdGFjay50b3AoKTsKLSAgICAgICAgICAgIFN0cmluZzE2IHNwYW5UYWc7Ci0gICAgICAgICAgICBzc2l6ZV90IHNlbWkgPSBzcGFuLm5hbWUuZmluZEZpcnN0KCc7Jyk7Ci0gICAgICAgICAgICBpZiAoc2VtaSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgc3BhblRhZy5zZXRUbyhzcGFuLm5hbWUuc3RyaW5nKCksIHNlbWkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzcGFuVGFnLnNldFRvKHNwYW4ubmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3RyY21wMTYoaW5YbWwtPmdldEVsZW1lbnROYW1lKCZsZW4pLCBzcGFuVGFnLnN0cmluZygpKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zKFN0cmluZzgoZmlsZU5hbWUpLCBpblhtbC0+Z2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJGb3VuZCBjbG9zZSB0YWcgJXMgd2hlcmUgY2xvc2UgdGFnICVzIGlzIGV4cGVjdGVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChpblhtbC0+Z2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChzcGFuVGFnKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBib29sIGVtcHR5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChvdXRTdHJpbmctPnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBzcGFuLnNwYW4ubGFzdENoYXIgPSBvdXRTdHJpbmctPnNpemUoKS0xOwotICAgICAgICAgICAgICAgIGlmIChzcGFuLnNwYW4ubGFzdENoYXIgPj0gc3Bhbi5zcGFuLmZpcnN0Q2hhcikgewotICAgICAgICAgICAgICAgICAgICBlbXB0eSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBvdXRTcGFucy0+YWRkKHNwYW4pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNwYW5TdGFjay5wb3AoKTsKLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoaXMgd2FybmluZyBzZWVtcyB0byBiZSBqdXN0IGFuIGlycml0YXRpb24gdG8gbW9zdCBwZW9wbGUsCi0gICAgICAgICAgICAgKiBzaW5jZSBpdCBpcyB0eXBpY2FsbHkgaW50cm9kdWNlZCBieSB0cmFuc2xhdG9ycyB3aG8gdGhlbiBuZXZlcgotICAgICAgICAgICAgICogc2VlIHRoZSB3YXJuaW5nLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoMCAmJiBlbXB0eSkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IHdhcm5pbmc6IGVtcHR5ICclcycgc3BhbiBmb3VuZCBpbiB0ZXh0ICclcydcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSwgaW5YbWwtPmdldExpbmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzgoc3BhblRhZykuc3RyaW5nKCksIFN0cmluZzgoKm91dFN0cmluZykuc3RyaW5nKCkpOwotCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpTVEFSVF9OQU1FU1BBQ0UpIHsKLSAgICAgICAgICAgIC8vIG5vdGhpbmcKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewotICAgICAgICAgICAgU291cmNlUG9zKFN0cmluZzgoZmlsZU5hbWUpLCBpblhtbC0+Z2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgIkVycm9yIHBhcnNpbmcgWE1MXG4iKTsKLSAgICB9Ci0KLSAgICBpZiAob3V0U3BhbnMgIT0gTlVMTCAmJiBvdXRTcGFucy0+c2l6ZSgpID4gMCkgewotICAgICAgICBpZiAoY3VyU3RyaW5nLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGlmICghUmVzVGFibGU6OmNvbGxlY3RTdHJpbmcob3V0U3RyaW5nLCBjdXJTdHJpbmcuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1clN0cmluZy5zaXplKCksIGZhbHNlLCAmZXJyb3JNc2csIHRydWUpKSB7Ci0gICAgICAgICAgICAgICAgU291cmNlUG9zKFN0cmluZzgoZmlsZU5hbWUpLCBpblhtbC0+Z2V0TGluZU51bWJlcigpKS5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICIlcyAoaW4gJXMpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNc2csIFN0cmluZzgoY3VyU3RyaW5nKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBUaGVyZSBpcyBubyBzdHlsZSBpbmZvcm1hdGlvbiwgc28gc3RyaW5nIHByb2Nlc3Npbmcgd2lsbCBoYXBwZW4KLSAgICAgICAgLy8gbGF0ZXIgYXMgcGFydCBvZiB0aGUgb3ZlcmFsbCB0eXBlIGNvbnZlcnNpb24uICBSZXR1cm4gdG8gdGhlCi0gICAgICAgIC8vIGNsaWVudCB0aGUgcmF3IHVucHJvY2Vzc2VkIHRleHQuCi0gICAgICAgIHJhd1N0cmluZy5hcHBlbmQoY3VyU3RyaW5nKTsKLSAgICAgICAgb3V0U3RyaW5nLT5zZXRUbyhyYXdTdHJpbmcpOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RydWN0IG5hbWVzcGFjZV9lbnRyeSB7Ci0gICAgU3RyaW5nOCBwcmVmaXg7Ci0gICAgU3RyaW5nOCB1cmk7Ci19OwotCi1zdGF0aWMgU3RyaW5nOCBtYWtlX3ByZWZpeChpbnQgZGVwdGgpCi17Ci0gICAgU3RyaW5nOCBwcmVmaXg7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpPTA7IGk8ZGVwdGg7IGkrKykgewotICAgICAgICBwcmVmaXguYXBwZW5kKCIgICIpOwotICAgIH0KLSAgICByZXR1cm4gcHJlZml4OwotfQotCi1zdGF0aWMgU3RyaW5nOCBidWlsZF9uYW1lc3BhY2UoY29uc3QgVmVjdG9yPG5hbWVzcGFjZV9lbnRyeT4mIG5hbWVzcGFjZXMsCi0gICAgICAgIGNvbnN0IHVpbnQxNl90KiBucykKLXsKLSAgICBTdHJpbmc4IHN0cjsKLSAgICBpZiAobnMgIT0gTlVMTCkgewotICAgICAgICBzdHIgPSBTdHJpbmc4KG5zKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBuYW1lc3BhY2VzLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgY29uc3QgbmFtZXNwYWNlX2VudHJ5JiBuZSA9IG5hbWVzcGFjZXMuaXRlbUF0KGkpOwotICAgICAgICAgICAgaWYgKG5lLnVyaSA9PSBzdHIpIHsKLSAgICAgICAgICAgICAgICBzdHIgPSBuZS5wcmVmaXg7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3RyLmFwcGVuZCgiOiIpOwotICAgIH0KLSAgICByZXR1cm4gc3RyOwotfQotCi12b2lkIHByaW50WE1MQmxvY2soUmVzWE1MVHJlZSogYmxvY2spCi17Ci0gICAgYmxvY2stPnJlc3RhcnQoKTsKLQotICAgIFZlY3RvcjxuYW1lc3BhY2VfZW50cnk+IG5hbWVzcGFjZXM7Ci0gICAgCi0gICAgUmVzWE1MVHJlZTo6ZXZlbnRfY29kZV90IGNvZGU7Ci0gICAgaW50IGRlcHRoID0gMDsKLSAgICB3aGlsZSAoKGNvZGU9YmxvY2stPm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7Ci0gICAgICAgIFN0cmluZzggcHJlZml4ID0gbWFrZV9wcmVmaXgoZGVwdGgpOwotICAgICAgICBpbnQgaTsKLSAgICAgICAgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6U1RBUlRfVEFHKSB7Ci0gICAgICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICAgICAgY29uc3QgdWludDE2X3QqIG5zMTYgPSBibG9jay0+Z2V0RWxlbWVudE5hbWVzcGFjZSgmbGVuKTsKLSAgICAgICAgICAgIFN0cmluZzggZWxlbU5zID0gYnVpbGRfbmFtZXNwYWNlKG5hbWVzcGFjZXMsIG5zMTYpOwotICAgICAgICAgICAgY29uc3QgdWludDE2X3QqIGNvbTE2ID0gYmxvY2stPmdldENvbW1lbnQoJmxlbik7Ci0gICAgICAgICAgICBpZiAoY29tMTYpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzIDwhLS0gJXMgLS0+XG4iLCBwcmVmaXguc3RyaW5nKCksIFN0cmluZzgoY29tMTYpLnN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ZigiJXNFOiAlcyVzIChsaW5lPSVkKVxuIiwgcHJlZml4LnN0cmluZygpLCBlbGVtTnMuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgU3RyaW5nOChibG9jay0+Z2V0RWxlbWVudE5hbWUoJmxlbikpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgIGJsb2NrLT5nZXRMaW5lTnVtYmVyKCkpOwotICAgICAgICAgICAgaW50IE4gPSBibG9jay0+Z2V0QXR0cmlidXRlQ291bnQoKTsKLSAgICAgICAgICAgIGRlcHRoKys7Ci0gICAgICAgICAgICBwcmVmaXggPSBtYWtlX3ByZWZpeChkZXB0aCk7Ci0gICAgICAgICAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCByZXMgPSBibG9jay0+Z2V0QXR0cmlidXRlTmFtZVJlc0lEKGkpOwotICAgICAgICAgICAgICAgIG5zMTYgPSBibG9jay0+Z2V0QXR0cmlidXRlTmFtZXNwYWNlKGksICZsZW4pOwotICAgICAgICAgICAgICAgIFN0cmluZzggbnMgPSBidWlsZF9uYW1lc3BhY2UobmFtZXNwYWNlcywgbnMxNik7Ci0gICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lKGJsb2NrLT5nZXRBdHRyaWJ1dGVOYW1lKGksICZsZW4pKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzQTogIiwgcHJlZml4LnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMlcygweCUwOHgpIiwgbnMuc3RyaW5nKCksIG5hbWUuc3RyaW5nKCksIHJlcyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyVzIiwgbnMuc3RyaW5nKCksIG5hbWUuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBSZXNfdmFsdWUgdmFsdWU7Ci0gICAgICAgICAgICAgICAgYmxvY2stPmdldEF0dHJpYnV0ZVZhbHVlKGksICZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9OVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiPShudWxsKSIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX1JFRkVSRU5DRSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj1AMHgleCIsIChpbnQpdmFsdWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfQVRUUklCVVRFKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiPT8weCV4IiwgKGludCl2YWx1ZS5kYXRhKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9TVFJJTkcpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI9XCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZTo6bm9ybWFsaXplRm9yT3V0cHV0KFN0cmluZzgoYmxvY2stPmdldEF0dHJpYnV0ZVN0cmluZ1ZhbHVlKGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbikpLnN0cmluZygpKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI9KHR5cGUgMHgleCkweCV4IiwgKGludCl2YWx1ZS5kYXRhVHlwZSwgKGludCl2YWx1ZS5kYXRhKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIHZhbCA9IGJsb2NrLT5nZXRBdHRyaWJ1dGVTdHJpbmdWYWx1ZShpLCAmbGVuKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgKFJhdzogXCIlc1wiKSIsIFJlc1RhYmxlOjpub3JtYWxpemVGb3JPdXRwdXQoU3RyaW5nOCh2YWwpLnN0cmluZygpKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKLSAgICAgICAgICAgIGRlcHRoLS07Ci0gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpTVEFSVF9OQU1FU1BBQ0UpIHsKLSAgICAgICAgICAgIG5hbWVzcGFjZV9lbnRyeSBuczsKLSAgICAgICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgICAgICBjb25zdCB1aW50MTZfdCogcHJlZml4MTYgPSBibG9jay0+Z2V0TmFtZXNwYWNlUHJlZml4KCZsZW4pOwotICAgICAgICAgICAgaWYgKHByZWZpeDE2KSB7Ci0gICAgICAgICAgICAgICAgbnMucHJlZml4ID0gU3RyaW5nOChwcmVmaXgxNik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5zLnByZWZpeCA9ICI8REVGPiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBucy51cmkgPSBTdHJpbmc4KGJsb2NrLT5nZXROYW1lc3BhY2VVcmkoJmxlbikpOwotICAgICAgICAgICAgbmFtZXNwYWNlcy5wdXNoKG5zKTsKLSAgICAgICAgICAgIHByaW50ZigiJXNOOiAlcz0lc1xuIiwgcHJlZml4LnN0cmluZygpLCBucy5wcmVmaXguc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgIG5zLnVyaS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICBkZXB0aCsrOwotICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gUmVzWE1MVHJlZTo6RU5EX05BTUVTUEFDRSkgewotICAgICAgICAgICAgZGVwdGgtLTsKLSAgICAgICAgICAgIGNvbnN0IG5hbWVzcGFjZV9lbnRyeSYgbnMgPSBuYW1lc3BhY2VzLnRvcCgpOwotICAgICAgICAgICAgc2l6ZV90IGxlbjsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBwcmVmaXgxNiA9IGJsb2NrLT5nZXROYW1lc3BhY2VQcmVmaXgoJmxlbik7Ci0gICAgICAgICAgICBTdHJpbmc4IHByOwotICAgICAgICAgICAgaWYgKHByZWZpeDE2KSB7Ci0gICAgICAgICAgICAgICAgcHIgPSBTdHJpbmc4KHByZWZpeDE2KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHIgPSAiPERFRj4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5zLnByZWZpeCAhPSBwcikgewotICAgICAgICAgICAgICAgIHByZWZpeCA9IG1ha2VfcHJlZml4KGRlcHRoKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzKioqIEJBRCBFTkQgTlMgUFJFRklYOiBmb3VuZD0lcywgZXhwZWN0ZWQ9JXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXguc3RyaW5nKCksIHByLnN0cmluZygpLCBucy5wcmVmaXguc3RyaW5nKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nOCB1cmkgPSBTdHJpbmc4KGJsb2NrLT5nZXROYW1lc3BhY2VVcmkoJmxlbikpOwotICAgICAgICAgICAgaWYgKG5zLnVyaSAhPSB1cmkpIHsKLSAgICAgICAgICAgICAgICBwcmVmaXggPSBtYWtlX3ByZWZpeChkZXB0aCk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlcyAqKiogQkFEIEVORCBOUyBVUkk6IGZvdW5kPSVzLCBleHBlY3RlZD0lc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeC5zdHJpbmcoKSwgdXJpLnN0cmluZygpLCBucy51cmkuc3RyaW5nKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbmFtZXNwYWNlcy5wb3AoKTsKLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OlRFWFQpIHsKLSAgICAgICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgICAgICBwcmludGYoIiVzQzogXCIlc1wiXG4iLCBwcmVmaXguc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlOjpub3JtYWxpemVGb3JPdXRwdXQoU3RyaW5nOChibG9jay0+Z2V0VGV4dCgmbGVuKSkuc3RyaW5nKCkpLnN0cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJsb2NrLT5yZXN0YXJ0KCk7Ci19Ci0KLXN0YXR1c190IHBhcnNlWE1MUmVzb3VyY2UoY29uc3Qgc3A8QWFwdEZpbGU+JiBmaWxlLCBSZXNYTUxUcmVlKiBvdXRUcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0cmlwQWxsLCBib29sIGtlZXBDb21tZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIGNEYXRhVGFncykKLXsKLSAgICBzcDxYTUxOb2RlPiByb290ID0gWE1MTm9kZTo6cGFyc2UoZmlsZSk7Ci0gICAgaWYgKHJvb3QgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgcm9vdC0+cmVtb3ZlV2hpdGVzcGFjZShzdHJpcEFsbCwgY0RhdGFUYWdzKTsKLQotICAgIE5PSVNZKHByaW50ZigiSW5wdXQgWE1MIGZyb20gJXM6XG4iLCAoY29uc3QgY2hhciopZmlsZS0+Z2V0UHJpbnRhYmxlU291cmNlKCkpKTsKLSAgICBOT0lTWShyb290LT5wcmludCgpKTsKLSAgICBzcDxBYXB0RmlsZT4gcnNjID0gbmV3IEFhcHRGaWxlKFN0cmluZzgoKSwgQWFwdEdyb3VwRW50cnkoKSwgU3RyaW5nOCgpKTsKLSAgICBzdGF0dXNfdCBlcnIgPSByb290LT5mbGF0dGVuKHJzYywgIWtlZXBDb21tZW50cywgZmFsc2UpOwotICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgZXJyID0gb3V0VHJlZS0+c2V0VG8ocnNjLT5nZXREYXRhKCksIHJzYy0+Z2V0U2l6ZSgpLCB0cnVlKTsKLSAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgTk9JU1kocHJpbnRmKCJPdXRwdXQgWE1MOlxuIikpOwotICAgIE5PSVNZKHByaW50WE1MQmxvY2sob3V0VHJlZSkpOwotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zcDxYTUxOb2RlPiBYTUxOb2RlOjpwYXJzZShjb25zdCBzcDxBYXB0RmlsZT4mIGZpbGUpCi17Ci0gICAgY2hhciBidWZbMTYzODRdOwotICAgIGludCBmZCA9IG9wZW4oZmlsZS0+Z2V0U291cmNlRmlsZSgpLnN0cmluZygpLCBPX1JET05MWSB8IE9fQklOQVJZKTsKLSAgICBpZiAoZmQgPCAwKSB7Ci0gICAgICAgIFNvdXJjZVBvcyhmaWxlLT5nZXRTb3VyY2VGaWxlKCksIC0xKS5lcnJvcigiVW5hYmxlIHRvIG9wZW4gZmlsZSBmb3IgcmVhZDogJXMiLAotICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIFhNTF9QYXJzZXIgcGFyc2VyID0gWE1MX1BhcnNlckNyZWF0ZU5TKE5VTEwsIDEpOwotICAgIFBhcnNlU3RhdGUgc3RhdGU7Ci0gICAgc3RhdGUuZmlsZW5hbWUgPSBmaWxlLT5nZXRQcmludGFibGVTb3VyY2UoKTsKLSAgICBzdGF0ZS5wYXJzZXIgPSBwYXJzZXI7Ci0gICAgWE1MX1NldFVzZXJEYXRhKHBhcnNlciwgJnN0YXRlKTsKLSAgICBYTUxfU2V0RWxlbWVudEhhbmRsZXIocGFyc2VyLCBzdGFydEVsZW1lbnQsIGVuZEVsZW1lbnQpOwotICAgIFhNTF9TZXROYW1lc3BhY2VEZWNsSGFuZGxlcihwYXJzZXIsIHN0YXJ0TmFtZXNwYWNlLCBlbmROYW1lc3BhY2UpOwotICAgIFhNTF9TZXRDaGFyYWN0ZXJEYXRhSGFuZGxlcihwYXJzZXIsIGNoYXJhY3RlckRhdGEpOwotICAgIFhNTF9TZXRDb21tZW50SGFuZGxlcihwYXJzZXIsIGNvbW1lbnREYXRhKTsKLQotICAgIHNzaXplX3QgbGVuOwotICAgIGJvb2wgZG9uZTsKLSAgICBkbyB7Ci0gICAgICAgIGxlbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgICAgICBkb25lID0gbGVuIDwgKHNzaXplX3Qpc2l6ZW9mKGJ1Zik7Ci0gICAgICAgIGlmIChsZW4gPCAwKSB7Ci0gICAgICAgICAgICBTb3VyY2VQb3MoZmlsZS0+Z2V0U291cmNlRmlsZSgpLCAtMSkuZXJyb3IoIkVycm9yIHJlYWRpbmcgZmlsZTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAoWE1MX1BhcnNlKHBhcnNlciwgYnVmLCBsZW4sIGRvbmUpID09IFhNTF9TVEFUVVNfRVJST1IpIHsKLSAgICAgICAgICAgIFNvdXJjZVBvcyhmaWxlLT5nZXRTb3VyY2VGaWxlKCksIChpbnQpWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyKHBhcnNlcikpLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAiRXJyb3IgcGFyc2luZyBYTUw6ICVzXG4iLCBYTUxfRXJyb3JTdHJpbmcoWE1MX0dldEVycm9yQ29kZShwYXJzZXIpKSk7Ci0gICAgICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKCFkb25lKTsKLQotICAgIFhNTF9QYXJzZXJGcmVlKHBhcnNlcik7Ci0gICAgaWYgKHN0YXRlLnJvb3QgPT0gTlVMTCkgewotICAgICAgICBTb3VyY2VQb3MoZmlsZS0+Z2V0U291cmNlRmlsZSgpLCAtMSkuZXJyb3IoIk5vIFhNTCBkYXRhIGdlbmVyYXRlZCB3aGVuIHBhcnNpbmciKTsKLSAgICB9Ci0gICAgY2xvc2UoZmQpOwotICAgIHJldHVybiBzdGF0ZS5yb290OwotfQotCi1YTUxOb2RlOjpYTUxOb2RlKGNvbnN0IFN0cmluZzgmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcxNiYgczEsIGNvbnN0IFN0cmluZzE2JiBzMiwgYm9vbCBpc05hbWVzcGFjZSkKLSAgICA6IG1OZXh0QXR0cmlidXRlSW5kZXgoMHg4MDAwMDAwMCkKLSAgICAsIG1GaWxlbmFtZShmaWxlbmFtZSkKLSAgICAsIG1TdGFydExpbmVOdW1iZXIoMCkKLSAgICAsIG1FbmRMaW5lTnVtYmVyKDApCi0gICAgLCBtVVRGOChmYWxzZSkKLXsKLSAgICBpZiAoaXNOYW1lc3BhY2UpIHsKLSAgICAgICAgbU5hbWVzcGFjZVByZWZpeCA9IHMxOwotICAgICAgICBtTmFtZXNwYWNlVXJpID0gczI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbU5hbWVzcGFjZVVyaSA9IHMxOwotICAgICAgICBtRWxlbWVudE5hbWUgPSBzMjsKLSAgICB9Ci19Ci0KLVhNTE5vZGU6OlhNTE5vZGUoY29uc3QgU3RyaW5nOCYgZmlsZW5hbWUpCi0gICAgOiBtRmlsZW5hbWUoZmlsZW5hbWUpCi17Ci0gICAgbWVtc2V0KCZtQ2hhcnNWYWx1ZSwgMCwgc2l6ZW9mKG1DaGFyc1ZhbHVlKSk7Ci19Ci0KLVhNTE5vZGU6OnR5cGUgWE1MTm9kZTo6Z2V0VHlwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1FbGVtZW50TmFtZS5zaXplKCkgIT0gMCkgewotICAgICAgICByZXR1cm4gVFlQRV9FTEVNRU5UOwotICAgIH0KLSAgICBpZiAobU5hbWVzcGFjZVVyaS5zaXplKCkgIT0gMCkgewotICAgICAgICByZXR1cm4gVFlQRV9OQU1FU1BBQ0U7Ci0gICAgfQotICAgIHJldHVybiBUWVBFX0NEQVRBOwotfQotCi1jb25zdCBTdHJpbmcxNiYgWE1MTm9kZTo6Z2V0TmFtZXNwYWNlUHJlZml4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU5hbWVzcGFjZVByZWZpeDsKLX0KLQotY29uc3QgU3RyaW5nMTYmIFhNTE5vZGU6OmdldE5hbWVzcGFjZVVyaSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1OYW1lc3BhY2VVcmk7Ci19Ci0KLWNvbnN0IFN0cmluZzE2JiBYTUxOb2RlOjpnZXRFbGVtZW50TmFtZXNwYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU5hbWVzcGFjZVVyaTsKLX0KLQotY29uc3QgU3RyaW5nMTYmIFhNTE5vZGU6OmdldEVsZW1lbnROYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUVsZW1lbnROYW1lOwotfQotCi1jb25zdCBWZWN0b3I8c3A8WE1MTm9kZT4gPiYgWE1MTm9kZTo6Z2V0Q2hpbGRyZW4oKSBjb25zdAotewotICAgIHJldHVybiBtQ2hpbGRyZW47Ci19Ci0KLWNvbnN0IFN0cmluZzgmIFhNTE5vZGU6OmdldEZpbGVuYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUZpbGVuYW1lOwotfQotICAgIAotY29uc3QgVmVjdG9yPFhNTE5vZGU6OmF0dHJpYnV0ZV9lbnRyeT4mCi0gICAgWE1MTm9kZTo6Z2V0QXR0cmlidXRlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1BdHRyaWJ1dGVzOwotfQotCi1jb25zdCBYTUxOb2RlOjphdHRyaWJ1dGVfZW50cnkqIFhNTE5vZGU6OmdldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcxNiYgbnMsCi0gICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lKSBjb25zdAotewotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxtQXR0cmlidXRlcy5zaXplKCk7IGkrKykgewotICAgICAgICBjb25zdCBhdHRyaWJ1dGVfZW50cnkmIGFlKG1BdHRyaWJ1dGVzLml0ZW1BdChpKSk7Ci0gICAgICAgIGlmIChhZS5ucyA9PSBucyAmJiBhZS5uYW1lID09IG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiAmYWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLVhNTE5vZGU6OmF0dHJpYnV0ZV9lbnRyeSogWE1MTm9kZTo6ZWRpdEF0dHJpYnV0ZShjb25zdCBTdHJpbmcxNiYgbnMsCi0gICAgICAgIGNvbnN0IFN0cmluZzE2JiBuYW1lKQotewotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxtQXR0cmlidXRlcy5zaXplKCk7IGkrKykgewotICAgICAgICBhdHRyaWJ1dGVfZW50cnkgKiBhZSA9ICZtQXR0cmlidXRlcy5lZGl0SXRlbUF0KGkpOwotICAgICAgICBpZiAoYWUtPm5zID09IG5zICYmIGFlLT5uYW1lID09IG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBhZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOVUxMOwotfQotCi1jb25zdCBTdHJpbmcxNiYgWE1MTm9kZTo6Z2V0Q0RhdGEoKSBjb25zdAotewotICAgIHJldHVybiBtQ2hhcnM7Ci19Ci0KLWNvbnN0IFN0cmluZzE2JiBYTUxOb2RlOjpnZXRDb21tZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUNvbW1lbnQ7Ci19Ci0KLWludDMyX3QgWE1MTm9kZTo6Z2V0U3RhcnRMaW5lTnVtYmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXJ0TGluZU51bWJlcjsKLX0KLQotaW50MzJfdCBYTUxOb2RlOjpnZXRFbmRMaW5lTnVtYmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUVuZExpbmVOdW1iZXI7Ci19Ci0KLXNwPFhNTE5vZGU+IFhNTE5vZGU6OnNlYXJjaEVsZW1lbnQoY29uc3QgU3RyaW5nMTYmIHRhZ05hbWVzcGFjZSwgY29uc3QgU3RyaW5nMTYmIHRhZ05hbWUpCi17Ci0gICAgaWYgKGdldFR5cGUoKSA9PSBYTUxOb2RlOjpUWVBFX0VMRU1FTlQKLSAgICAgICAgICAgICYmIG1OYW1lc3BhY2VVcmkgPT0gdGFnTmFtZXNwYWNlCi0gICAgICAgICAgICAmJiBtRWxlbWVudE5hbWUgPT0gdGFnTmFtZSkgewotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaT0wOyBpPG1DaGlsZHJlbi5zaXplKCk7IGkrKykgewotICAgICAgICBzcDxYTUxOb2RlPiBmb3VuZCA9IG1DaGlsZHJlbi5pdGVtQXQoaSktPnNlYXJjaEVsZW1lbnQodGFnTmFtZXNwYWNlLCB0YWdOYW1lKTsKLSAgICAgICAgaWYgKGZvdW5kICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBmb3VuZDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3A8WE1MTm9kZT4gWE1MTm9kZTo6Z2V0Q2hpbGRFbGVtZW50KGNvbnN0IFN0cmluZzE2JiB0YWdOYW1lc3BhY2UsIGNvbnN0IFN0cmluZzE2JiB0YWdOYW1lKQotewotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxtQ2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgc3A8WE1MTm9kZT4gY2hpbGQgPSBtQ2hpbGRyZW4uaXRlbUF0KGkpOwotICAgICAgICBpZiAoY2hpbGQtPmdldFR5cGUoKSA9PSBYTUxOb2RlOjpUWVBFX0VMRU1FTlQKLSAgICAgICAgICAgICAgICAmJiBjaGlsZC0+bU5hbWVzcGFjZVVyaSA9PSB0YWdOYW1lc3BhY2UKLSAgICAgICAgICAgICAgICAmJiBjaGlsZC0+bUVsZW1lbnROYW1lID09IHRhZ05hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBjaGlsZDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdHVzX3QgWE1MTm9kZTo6YWRkQ2hpbGQoY29uc3Qgc3A8WE1MTm9kZT4mIGNoaWxkKQotewotICAgIGlmIChnZXRUeXBlKCkgPT0gVFlQRV9DREFUQSkgewotICAgICAgICBTb3VyY2VQb3MobUZpbGVuYW1lLCBjaGlsZC0+Z2V0U3RhcnRMaW5lTnVtYmVyKCkpLmVycm9yKCJDaGlsZCB0byBDREFUQSBub2RlLiIpOwotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0gICAgLy9wcmludGYoIkFkZGluZyBjaGlsZCAlcCB0byBwYXJlbnQgJXBcbiIsIGNoaWxkLmdldCgpLCB0aGlzKTsKLSAgICBtQ2hpbGRyZW4uYWRkKGNoaWxkKTsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFhNTE5vZGU6Omluc2VydENoaWxkQXQoY29uc3Qgc3A8WE1MTm9kZT4mIGNoaWxkLCBzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKGdldFR5cGUoKSA9PSBUWVBFX0NEQVRBKSB7Ci0gICAgICAgIFNvdXJjZVBvcyhtRmlsZW5hbWUsIGNoaWxkLT5nZXRTdGFydExpbmVOdW1iZXIoKSkuZXJyb3IoIkNoaWxkIHRvIENEQVRBIG5vZGUuIik7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLSAgICAvL3ByaW50ZigiQWRkaW5nIGNoaWxkICVwIHRvIHBhcmVudCAlcFxuIiwgY2hpbGQuZ2V0KCksIHRoaXMpOwotICAgIG1DaGlsZHJlbi5pbnNlcnRBdChjaGlsZCwgaW5kZXgpOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgWE1MTm9kZTo6YWRkQXR0cmlidXRlKGNvbnN0IFN0cmluZzE2JiBucywgY29uc3QgU3RyaW5nMTYmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHZhbHVlKQotewotICAgIGlmIChnZXRUeXBlKCkgPT0gVFlQRV9DREFUQSkgewotICAgICAgICBTb3VyY2VQb3MobUZpbGVuYW1lLCBnZXRTdGFydExpbmVOdW1iZXIoKSkuZXJyb3IoIkNoaWxkIHRvIENEQVRBIG5vZGUuIik7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIGlmIChucyAhPSBSRVNPVVJDRVNfVE9PTFNfTkFNRVNQQUNFKSB7Ci0gICAgICAgIGF0dHJpYnV0ZV9lbnRyeSBlOwotICAgICAgICBlLmluZGV4ID0gbU5leHRBdHRyaWJ1dGVJbmRleCsrOwotICAgICAgICBlLm5zID0gbnM7Ci0gICAgICAgIGUubmFtZSA9IG5hbWU7Ci0gICAgICAgIGUuc3RyaW5nID0gdmFsdWU7Ci0gICAgICAgIG1BdHRyaWJ1dGVzLmFkZChlKTsKLSAgICAgICAgbUF0dHJpYnV0ZU9yZGVyLmFkZChlLmluZGV4LCBtQXR0cmlidXRlcy5zaXplKCktMSk7Ci0gICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotdm9pZCBYTUxOb2RlOjpzZXRBdHRyaWJ1dGVSZXNJRChzaXplX3QgYXR0cklkeCwgdWludDMyX3QgcmVzSWQpCi17Ci0gICAgYXR0cmlidXRlX2VudHJ5JiBlID0gbUF0dHJpYnV0ZXMuZWRpdEl0ZW1BdChhdHRySWR4KTsKLSAgICBpZiAoZS5uYW1lUmVzSWQpIHsKLSAgICAgICAgbUF0dHJpYnV0ZU9yZGVyLnJlbW92ZUl0ZW0oZS5uYW1lUmVzSWQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1BdHRyaWJ1dGVPcmRlci5yZW1vdmVJdGVtKGUuaW5kZXgpOwotICAgIH0KLSAgICBOT0lTWShwcmludGYoIkVsZW0gJXMgJXM9XCIlc1wiOiBzZXQgcmVzIGlkID0gMHglMDh4XG4iLAotICAgICAgICAgICAgU3RyaW5nOChnZXRFbGVtZW50TmFtZSgpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgIFN0cmluZzgobUF0dHJpYnV0ZXMuaXRlbUF0KGF0dHJJZHgpLm5hbWUpLnN0cmluZygpLAotICAgICAgICAgICAgU3RyaW5nOChtQXR0cmlidXRlcy5pdGVtQXQoYXR0cklkeCkuc3RyaW5nKS5zdHJpbmcoKSwKLSAgICAgICAgICAgIHJlc0lkKSk7Ci0gICAgbUF0dHJpYnV0ZXMuZWRpdEl0ZW1BdChhdHRySWR4KS5uYW1lUmVzSWQgPSByZXNJZDsKLSAgICBtQXR0cmlidXRlT3JkZXIuYWRkKHJlc0lkLCBhdHRySWR4KTsKLX0KLQotc3RhdHVzX3QgWE1MTm9kZTo6YXBwZW5kQ2hhcnMoY29uc3QgU3RyaW5nMTYmIGNoYXJzKQotewotICAgIGlmIChnZXRUeXBlKCkgIT0gVFlQRV9DREFUQSkgewotICAgICAgICBTb3VyY2VQb3MobUZpbGVuYW1lLCBnZXRTdGFydExpbmVOdW1iZXIoKSkuZXJyb3IoIkFkZGluZyBjaGFyYWN0ZXJzIHRvIGVsZW1lbnQgbm9kZS4iKTsKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotICAgIG1DaGFycy5hcHBlbmQoY2hhcnMpOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgWE1MTm9kZTo6YXBwZW5kQ29tbWVudChjb25zdCBTdHJpbmcxNiYgY29tbWVudCkKLXsKLSAgICBpZiAobUNvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICBtQ29tbWVudC5hcHBlbmQoU3RyaW5nMTYoIlxuIikpOwotICAgIH0KLSAgICBtQ29tbWVudC5hcHBlbmQoY29tbWVudCk7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi12b2lkIFhNTE5vZGU6OnNldFN0YXJ0TGluZU51bWJlcihpbnQzMl90IGxpbmUpCi17Ci0gICAgbVN0YXJ0TGluZU51bWJlciA9IGxpbmU7Ci19Ci0KLXZvaWQgWE1MTm9kZTo6c2V0RW5kTGluZU51bWJlcihpbnQzMl90IGxpbmUpCi17Ci0gICAgbUVuZExpbmVOdW1iZXIgPSBsaW5lOwotfQotCi12b2lkIFhNTE5vZGU6OnJlbW92ZVdoaXRlc3BhY2UoYm9vbCBzdHJpcEFsbCwgY29uc3QgY2hhcioqIGNEYXRhVGFncykKLXsKLSAgICAvL3ByaW50ZigiUmVtb3Zpbmcgd2hpdGVzcGFjZSBpbiAlc1xuIiwgU3RyaW5nOChtRWxlbWVudE5hbWUpLnN0cmluZygpKTsKLSAgICBzaXplX3QgTiA9IG1DaGlsZHJlbi5zaXplKCk7Ci0gICAgaWYgKGNEYXRhVGFncykgewotICAgICAgICBTdHJpbmc4IHRhZyhtRWxlbWVudE5hbWUpOwotICAgICAgICBjb25zdCBjaGFyKiogcCA9IGNEYXRhVGFnczsKLSAgICAgICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgICAgICBpZiAodGFnID09ICpwKSB7Ci0gICAgICAgICAgICAgICAgc3RyaXBBbGwgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHNwPFhNTE5vZGU+IG5vZGUgPSBtQ2hpbGRyZW4uaXRlbUF0KGkpOwotICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09IFRZUEVfQ0RBVEEpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBDREFUQSBub2RlLi4uCi0gICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogcCA9IG5vZGUtPm1DaGFycy5zdHJpbmcoKTsKLSAgICAgICAgICAgIHdoaWxlICgqcCAhPSAwICYmICpwIDwgMTI4ICYmIGlzc3BhY2UoKnApKSB7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy9wcmludGYoIlNwYWNlIGVuZHMgYXQgJWQgaW4gXCIlc1wiXG4iLAotICAgICAgICAgICAgLy8gICAgICAgKGludCkocC1ub2RlLT5tQ2hhcnMuc3RyaW5nKCkpLAotICAgICAgICAgICAgLy8gICAgICAgU3RyaW5nOChub2RlLT5tQ2hhcnMpLnN0cmluZygpKTsKLSAgICAgICAgICAgIGlmICgqcCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmlwQWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGlzIG5vZGUhCi0gICAgICAgICAgICAgICAgICAgIG1DaGlsZHJlbi5yZW1vdmVBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgTi0tOwotICAgICAgICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+bUNoYXJzID0gU3RyaW5nMTYoIiAiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIENvbXBhY3QgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlLgotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBlID0gbm9kZS0+bUNoYXJzLnN0cmluZygpK25vZGUtPm1DaGFycy5zaXplKCktMTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZSA+IHAgJiYgKmUgPCAxMjggJiYgaXNzcGFjZSgqZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZS0tOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocCA+IG5vZGUtPm1DaGFycy5zdHJpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBwLS07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChlIDwgKG5vZGUtPm1DaGFycy5zdHJpbmcoKStub2RlLT5tQ2hhcnMuc2l6ZSgpLTEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGUrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHAgPiBub2RlLT5tQ2hhcnMuc3RyaW5nKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgZSA8IChub2RlLT5tQ2hhcnMuc3RyaW5nKCkrbm9kZS0+bUNoYXJzLnNpemUoKS0xKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcxNiB0bXAocCwgZS1wKzEpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5tQ2hhcnMgPSB0bXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbm9kZS0+cmVtb3ZlV2hpdGVzcGFjZShzdHJpcEFsbCwgY0RhdGFUYWdzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdHVzX3QgWE1MTm9kZTo6cGFyc2VWYWx1ZXMoY29uc3Qgc3A8QWFwdEFzc2V0cz4mIGFzc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVGFibGUqIHRhYmxlKQotewotICAgIGJvb2wgaGFzRXJyb3JzID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKGdldFR5cGUoKSA9PSBUWVBFX0VMRU1FTlQpIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBtQXR0cmlidXRlcy5zaXplKCk7Ci0gICAgICAgIFN0cmluZzE2IGRlZlBhY2thZ2UoYXNzZXRzLT5nZXRQYWNrYWdlKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVfZW50cnkmIGUgPSBtQXR0cmlidXRlcy5lZGl0SXRlbUF0KGkpOwotICAgICAgICAgICAgQWNjZXNzb3JDb29raWUgYWMoU291cmNlUG9zKG1GaWxlbmFtZSwgZ2V0U3RhcnRMaW5lTnVtYmVyKCkpLCBTdHJpbmc4KGUubmFtZSksCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZS5zdHJpbmcpKTsKLSAgICAgICAgICAgIHRhYmxlLT5zZXRDdXJyZW50WG1sUG9zKFNvdXJjZVBvcyhtRmlsZW5hbWUsIGdldFN0YXJ0TGluZU51bWJlcigpKSk7Ci0gICAgICAgICAgICBpZiAoIWFzc2V0cy0+Z2V0SW5jbHVkZWRSZXNvdXJjZXMoKQotICAgICAgICAgICAgICAgICAgICAuc3RyaW5nVG9WYWx1ZSgmZS52YWx1ZSwgJmUuc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RyaW5nLnN0cmluZygpLCBlLnN0cmluZy5zaXplKCksIHRydWUsIHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5uYW1lUmVzSWQsIE5VTEwsICZkZWZQYWNrYWdlLCB0YWJsZSwgJmFjKSkgewotICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBOT0lTWShwcmludGYoIkF0dHIgJXM6IHR5cGU9MHgleCwgc3RyPSVzXG4iLAotICAgICAgICAgICAgICAgICAgIFN0cmluZzgoZS5uYW1lKS5zdHJpbmcoKSwgZS52YWx1ZS5kYXRhVHlwZSwKLSAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGUuc3RyaW5nKS5zdHJpbmcoKSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbnN0IHNpemVfdCBOID0gbUNoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHN0YXR1c190IGVyciA9IG1DaGlsZHJlbi5pdGVtQXQoaSktPnBhcnNlVmFsdWVzKGFzc2V0cywgdGFibGUpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBoYXNFcnJvcnMgPyBVTktOT1dOX0VSUk9SIDogTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFhNTE5vZGU6OmFzc2lnblJlc291cmNlSWRzKGNvbnN0IHNwPEFhcHRBc3NldHM+JiBhc3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVRhYmxlKiB0YWJsZSkKLXsKLSAgICBib29sIGhhc0Vycm9ycyA9IGZhbHNlOwotICAgIAotICAgIGlmIChnZXRUeXBlKCkgPT0gVFlQRV9FTEVNRU5UKSB7Ci0gICAgICAgIFN0cmluZzE2IGF0dHIoImF0dHIiKTsKLSAgICAgICAgY29uc3QgY2hhciogZXJyb3JNc2c7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBOID0gbUF0dHJpYnV0ZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVfZW50cnkmIGUgPSBtQXR0cmlidXRlcy5pdGVtQXQoaSk7Ci0gICAgICAgICAgICBpZiAoZS5ucy5zaXplKCkgPD0gMCkgY29udGludWU7Ci0gICAgICAgICAgICBib29sIG5zSXNQdWJsaWM7Ci0gICAgICAgICAgICBTdHJpbmcxNiBwa2coZ2V0TmFtZXNwYWNlUmVzb3VyY2VQYWNrYWdlKFN0cmluZzE2KGFzc2V0cy0+Z2V0UGFja2FnZSgpKSwgZS5ucywgJm5zSXNQdWJsaWMpKTsKLSAgICAgICAgICAgIE5PSVNZKHByaW50ZigiRWxlbSAlcyAlcz1cIiVzXCI6IG5hbWVzcGFjZSglcykgJXMgPT09PiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChnZXRFbGVtZW50TmFtZSgpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChlLm5hbWUpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGUuc3RyaW5nKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChlLm5zKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgKG5zSXNQdWJsaWMpID8gInB1YmxpYyIgOiAicHJpdmF0ZSIsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZzgocGtnKS5zdHJpbmcoKSkpOwotICAgICAgICAgICAgaWYgKHBrZy5zaXplKCkgPD0gMCkgY29udGludWU7Ci0gICAgICAgICAgICB1aW50MzJfdCByZXMgPSB0YWJsZSAhPSBOVUxMCi0gICAgICAgICAgICAgICAgPyB0YWJsZS0+Z2V0UmVzSWQoZS5uYW1lLCAmYXR0ciwgJnBrZywgJmVycm9yTXNnLCBuc0lzUHVibGljKQotICAgICAgICAgICAgICAgIDogYXNzZXRzLT5nZXRJbmNsdWRlZFJlc291cmNlcygpLgotICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyRm9yTmFtZShlLm5hbWUuc3RyaW5nKCksIGUubmFtZS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuc3RyaW5nKCksIGF0dHIuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2cuc3RyaW5nKCksIHBrZy5zaXplKCkpOwotICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgTk9JU1kocHJpbnRmKCJYTUwgYXR0cmlidXRlIG5hbWUgJXM6IHJlc2lkPTB4JTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChlLm5hbWUpLnN0cmluZygpLCByZXMpKTsKLSAgICAgICAgICAgICAgICBzZXRBdHRyaWJ1dGVSZXNJRChpLCByZXMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTb3VyY2VQb3MobUZpbGVuYW1lLCBnZXRTdGFydExpbmVOdW1iZXIoKSkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiTm8gcmVzb3VyY2UgaWRlbnRpZmllciBmb3VuZCBmb3IgYXR0cmlidXRlICclcycgaW4gcGFja2FnZSAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOChlLm5hbWUpLnN0cmluZygpLCBTdHJpbmc4KHBrZykuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29uc3Qgc2l6ZV90IE4gPSBtQ2hpbGRyZW4uc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgc3RhdHVzX3QgZXJyID0gbUNoaWxkcmVuLml0ZW1BdChpKS0+YXNzaWduUmVzb3VyY2VJZHMoYXNzZXRzLCB0YWJsZSk7Ci0gICAgICAgIGlmIChlcnIgPCBOT19FUlJPUikgewotICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBoYXNFcnJvcnMgPyBVTktOT1dOX0VSUk9SIDogTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IFhNTE5vZGU6OmZsYXR0ZW4oY29uc3Qgc3A8QWFwdEZpbGU+JiBkZXN0LAotICAgICAgICBib29sIHN0cmlwQ29tbWVudHMsIGJvb2wgc3RyaXBSYXdWYWx1ZXMpIGNvbnN0Ci17Ci0gICAgU3RyaW5nUG9vbCBzdHJpbmdzKG1VVEY4KTsKLSAgICBWZWN0b3I8dWludDMyX3Q+IHJlc2lkczsKLSAgICAKLSAgICAvLyBGaXJzdCBjb2xsZWN0IGp1c3QgdGhlIHN0cmluZ3MgZm9yIGF0dHJpYnV0ZSBuYW1lcyB0aGF0IGhhdmUgYQotICAgIC8vIHJlc291cmNlIElEIGFzc2lnbmVkIHRvIHRoZW0uICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcmVzb3VyY2UgSUQKLSAgICAvLyBhcnJheSBpcyBjb21wYWN0LCBhbmQgbWFrZXMgaXQgZWFzaWVyIHRvIGRlYWwgd2l0aCBhdHRyaWJ1dGUgbmFtZXMKLSAgICAvLyBpbiBkaWZmZXJlbnQgbmFtZXNwYWNlcyAoYW5kIHRodXMgd2l0aCBkaWZmZXJlbnQgcmVzb3VyY2UgSURzKS4KLSAgICBjb2xsZWN0X3Jlc2lkX3N0cmluZ3MoJnN0cmluZ3MsICZyZXNpZHMpOwotCi0gICAgLy8gTmV4dCBjb2xsZWN0IGFsbCByZW1haW5pYm5nIHN0cmluZ3MuCi0gICAgY29sbGVjdF9zdHJpbmdzKCZzdHJpbmdzLCAmcmVzaWRzLCBzdHJpcENvbW1lbnRzLCBzdHJpcFJhd1ZhbHVlcyk7Ci0KLSNpZiAwICAvLyBObyBsb25nZXIgY29tcGlsZXMKLSAgICBOT0lTWShwcmludGYoIkZvdW5kIHN0cmluZ3M6XG4iKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IE4gPSBzdHJpbmdzLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgU3RyaW5nOChzdHJpbmdzLmVudHJ5QXQoaSkuc3RyaW5nKS5zdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICApOwotI2VuZGlmICAgIAotCi0gICAgc3A8QWFwdEZpbGU+IHN0cmluZ1Bvb2wgPSBzdHJpbmdzLmNyZWF0ZVN0cmluZ0Jsb2NrKCk7Ci0gICAgTk9JU1koYW91dCA8PCAiU3RyaW5nIHBvb2w6IgotICAgICAgICAgIDw8IEhleER1bXAoc3RyaW5nUG9vbC0+Z2V0RGF0YSgpLCBzdHJpbmdQb29sLT5nZXRTaXplKCkpIDw8IGVuZGwpOwotCi0gICAgUmVzWE1MVHJlZV9oZWFkZXIgaGVhZGVyOwotICAgIG1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7Ci0gICAgaGVhZGVyLmhlYWRlci50eXBlID0gaHRvZHMoUkVTX1hNTF9UWVBFKTsKLSAgICBoZWFkZXIuaGVhZGVyLmhlYWRlclNpemUgPSBodG9kcyhzaXplb2YoaGVhZGVyKSk7Ci0KLSAgICBjb25zdCBzaXplX3QgYmFzZVBvcyA9IGRlc3QtPmdldFNpemUoKTsKLSAgICBkZXN0LT53cml0ZURhdGEoJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOwotICAgIGRlc3QtPndyaXRlRGF0YShzdHJpbmdQb29sLT5nZXREYXRhKCksIHN0cmluZ1Bvb2wtPmdldFNpemUoKSk7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIHJlc291cmNlIElEcywgd3JpdGUgdGhlbS4KLSAgICBpZiAocmVzaWRzLnNpemUoKSA+IDApIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IHJlc0lkc1BvcyA9IGRlc3QtPmdldFNpemUoKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IHJlc0lkc1NpemUgPQotICAgICAgICAgICAgc2l6ZW9mKFJlc0NodW5rX2hlYWRlcikrKHNpemVvZih1aW50MzJfdCkqcmVzaWRzLnNpemUoKSk7Ci0gICAgICAgIFJlc0NodW5rX2hlYWRlciogaWRzSGVhZGVyID0gKFJlc0NodW5rX2hlYWRlciopCi0gICAgICAgICAgICAoKChjb25zdCB1aW50OF90KilkZXN0LT5lZGl0RGF0YShyZXNJZHNQb3MrcmVzSWRzU2l6ZSkpK3Jlc0lkc1Bvcyk7Ci0gICAgICAgIGlkc0hlYWRlci0+dHlwZSA9IGh0b2RzKFJFU19YTUxfUkVTT1VSQ0VfTUFQX1RZUEUpOwotICAgICAgICBpZHNIZWFkZXItPmhlYWRlclNpemUgPSBodG9kcyhzaXplb2YoKmlkc0hlYWRlcikpOwotICAgICAgICBpZHNIZWFkZXItPnNpemUgPSBodG9kbChyZXNJZHNTaXplKTsKLSAgICAgICAgdWludDMyX3QqIGlkcyA9ICh1aW50MzJfdCopKGlkc0hlYWRlcisxKTsKLSAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPHJlc2lkcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgKmlkcysrID0gaHRvZGwocmVzaWRzW2ldKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZsYXR0ZW5fbm9kZShzdHJpbmdzLCBkZXN0LCBzdHJpcENvbW1lbnRzLCBzdHJpcFJhd1ZhbHVlcyk7Ci0KLSAgICB2b2lkKiBkYXRhID0gZGVzdC0+ZWRpdERhdGEoKTsKLSAgICBSZXNYTUxUcmVlX2hlYWRlciogaGQgPSAoUmVzWE1MVHJlZV9oZWFkZXIqKSgoKHVpbnQ4X3QqKWRhdGEpK2Jhc2VQb3MpOwotICAgIHNpemVfdCBzaXplID0gZGVzdC0+Z2V0U2l6ZSgpLWJhc2VQb3M7Ci0gICAgaGQtPmhlYWRlci5zaXplID0gaHRvZGwoZGVzdC0+Z2V0U2l6ZSgpLWJhc2VQb3MpOwotCi0gICAgTk9JU1koYW91dCA8PCAiWE1MIHJlc291cmNlOiIKLSAgICAgICAgICA8PCBIZXhEdW1wKGRlc3QtPmdldERhdGEoKSwgZGVzdC0+Z2V0U2l6ZSgpKSA8PCBlbmRsKTsKLQotICAgICNpZiBQUklOVF9TVFJJTkdfTUVUUklDUwotICAgIGZwcmludGYoc3RkZXJyLCAiKioqKiB0b3RhbCB4bWwgc2l6ZTogJWQgLyAlZCUlIHN0cmluZ3MgKGluICVzKVxuIiwKLSAgICAgICAgZGVzdC0+Z2V0U2l6ZSgpLCAoc3RyaW5nUG9vbC0+Z2V0U2l6ZSgpKjEwMCkvZGVzdC0+Z2V0U2l6ZSgpLAotICAgICAgICBkZXN0LT5nZXRQYXRoKCkuc3RyaW5nKCkpOwotICAgICNlbmRpZgotICAgICAgICAKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXZvaWQgWE1MTm9kZTo6cHJpbnQoaW50IGluZGVudCkKLXsKLSAgICBTdHJpbmc4IHByZWZpeDsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGk9MDsgaTxpbmRlbnQ7IGkrKykgewotICAgICAgICBwcmVmaXguYXBwZW5kKCIgICIpOwotICAgIH0KLSAgICBpZiAoZ2V0VHlwZSgpID09IFRZUEVfRUxFTUVOVCkgewotICAgICAgICBTdHJpbmc4IGVsZW1OcyhnZXROYW1lc3BhY2VVcmkoKSk7Ci0gICAgICAgIGlmIChlbGVtTnMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgZWxlbU5zLmFwcGVuZCgiOiIpOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiJXMgRTogJXMlcyIsIHByZWZpeC5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgIGVsZW1Ocy5zdHJpbmcoKSwgU3RyaW5nOChnZXRFbGVtZW50TmFtZSgpKS5zdHJpbmcoKSk7Ci0gICAgICAgIGludCBOID0gbUF0dHJpYnV0ZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIHNzaXplX3QgaWR4ID0gbUF0dHJpYnV0ZU9yZGVyLnZhbHVlQXQoaSk7Ci0gICAgICAgICAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgLyAiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIsICIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlX2VudHJ5JiBhdHRyID0gbUF0dHJpYnV0ZXMuaXRlbUF0KGlkeCk7Ci0gICAgICAgICAgICBTdHJpbmc4IGF0dHJOcyhhdHRyLm5zKTsKLSAgICAgICAgICAgIGlmIChhdHRyTnMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgIGF0dHJOcy5hcHBlbmQoIjoiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhdHRyLm5hbWVSZXNJZCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiJXMlcygweCUwOHgpIiwgYXR0ck5zLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGF0dHIubmFtZSkuc3RyaW5nKCksIGF0dHIubmFtZVJlc0lkKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlcyVzIiwgYXR0ck5zLnN0cmluZygpLCBTdHJpbmc4KGF0dHIubmFtZSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCI9JXMiLCBTdHJpbmc4KGF0dHIuc3RyaW5nKS5zdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgIH0gZWxzZSBpZiAoZ2V0VHlwZSgpID09IFRZUEVfTkFNRVNQQUNFKSB7Ci0gICAgICAgIHByaW50ZigiJXMgTjogJXM9JXNcbiIsIHByZWZpeC5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgIGdldE5hbWVzcGFjZVByZWZpeCgpLnNpemUoKSA+IDAKLSAgICAgICAgICAgICAgICAgICAgPyBTdHJpbmc4KGdldE5hbWVzcGFjZVByZWZpeCgpKS5zdHJpbmcoKSA6ICI8REVGPiIsCi0gICAgICAgICAgICAgICBTdHJpbmc4KGdldE5hbWVzcGFjZVVyaSgpKS5zdHJpbmcoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmKCIlcyBDOiBcIiVzXCJcbiIsIHByZWZpeC5zdHJpbmcoKSwgU3RyaW5nOChnZXRDRGF0YSgpKS5zdHJpbmcoKSk7Ci0gICAgfQotICAgIGludCBOID0gbUNoaWxkcmVuLnNpemUoKTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgbUNoaWxkcmVuLml0ZW1BdChpKS0+cHJpbnQoaW5kZW50KzEpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgc3BsaXROYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFN0cmluZzE2KiBvdXROcywgU3RyaW5nMTYqIG91dE5hbWUpCi17Ci0gICAgY29uc3QgY2hhciogcCA9IG5hbWU7Ci0gICAgd2hpbGUgKCpwICE9IDAgJiYgKnAgIT0gMSkgewotICAgICAgICBwKys7Ci0gICAgfQotICAgIGlmICgqcCA9PSAwKSB7Ci0gICAgICAgICpvdXROcyA9IFN0cmluZzE2KCk7Ci0gICAgICAgICpvdXROYW1lID0gU3RyaW5nMTYobmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgKm91dE5zID0gU3RyaW5nMTYobmFtZSwgKHAtbmFtZSkpOwotICAgICAgICAqb3V0TmFtZSA9IFN0cmluZzE2KHArMSk7Ci0gICAgfQotfQotCi12b2lkIFhNTENBTEwKLVhNTE5vZGU6OnN0YXJ0TmFtZXNwYWNlKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnVyaSkKLXsKLSAgICBOT0lTWV9QQVJTRShwcmludGYoIlN0YXJ0IE5hbWVzcGFjZTogJXMgJXNcbiIsIHByZWZpeCwgdXJpKSk7Ci0gICAgUGFyc2VTdGF0ZSogc3QgPSAoUGFyc2VTdGF0ZSopdXNlckRhdGE7Ci0gICAgc3A8WE1MTm9kZT4gbm9kZSA9IFhNTE5vZGU6Om5ld05hbWVzcGFjZShzdC0+ZmlsZW5hbWUsIAotICAgICAgICAgICAgU3RyaW5nMTYocHJlZml4ICE9IE5VTEwgPyBwcmVmaXggOiAiIiksIFN0cmluZzE2KHVyaSkpOwotICAgIG5vZGUtPnNldFN0YXJ0TGluZU51bWJlcihYTUxfR2V0Q3VycmVudExpbmVOdW1iZXIoc3QtPnBhcnNlcikpOwotICAgIGlmIChzdC0+c3RhY2suc2l6ZSgpID4gMCkgewotICAgICAgICBzdC0+c3RhY2suaXRlbUF0KHN0LT5zdGFjay5zaXplKCktMSktPmFkZENoaWxkKG5vZGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0LT5yb290ID0gbm9kZTsKLSAgICB9Ci0gICAgc3QtPnN0YWNrLnB1c2gobm9kZSk7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MTm9kZTo6c3RhcnRFbGVtZW50KHZvaWQgKnVzZXJEYXRhLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICoqYXR0cykKLXsKLSAgICBOT0lTWV9QQVJTRShwcmludGYoIlN0YXJ0IEVsZW1lbnQ6ICVzXG4iLCBuYW1lKSk7Ci0gICAgUGFyc2VTdGF0ZSogc3QgPSAoUGFyc2VTdGF0ZSopdXNlckRhdGE7Ci0gICAgU3RyaW5nMTYgbnMxNiwgbmFtZTE2OwotICAgIHNwbGl0TmFtZShuYW1lLCAmbnMxNiwgJm5hbWUxNik7Ci0gICAgc3A8WE1MTm9kZT4gbm9kZSA9IFhNTE5vZGU6Om5ld0VsZW1lbnQoc3QtPmZpbGVuYW1lLCBuczE2LCBuYW1lMTYpOwotICAgIG5vZGUtPnNldFN0YXJ0TGluZU51bWJlcihYTUxfR2V0Q3VycmVudExpbmVOdW1iZXIoc3QtPnBhcnNlcikpOwotICAgIGlmIChzdC0+cGVuZGluZ0NvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICBub2RlLT5hcHBlbmRDb21tZW50KHN0LT5wZW5kaW5nQ29tbWVudCk7Ci0gICAgICAgIHN0LT5wZW5kaW5nQ29tbWVudCA9IFN0cmluZzE2KCk7Ci0gICAgfQotICAgIGlmIChzdC0+c3RhY2suc2l6ZSgpID4gMCkgewotICAgICAgICBzdC0+c3RhY2suaXRlbUF0KHN0LT5zdGFjay5zaXplKCktMSktPmFkZENoaWxkKG5vZGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0LT5yb290ID0gbm9kZTsKLSAgICB9Ci0gICAgc3QtPnN0YWNrLnB1c2gobm9kZSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgYXR0c1tpXTsgaSArPSAyKSB7Ci0gICAgICAgIHNwbGl0TmFtZShhdHRzW2ldLCAmbnMxNiwgJm5hbWUxNik7Ci0gICAgICAgIG5vZGUtPmFkZEF0dHJpYnV0ZShuczE2LCBuYW1lMTYsIFN0cmluZzE2KGF0dHNbaSsxXSkpOwotICAgIH0KLX0KLQotdm9pZCBYTUxDQUxMCi1YTUxOb2RlOjpjaGFyYWN0ZXJEYXRhKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBYTUxfQ2hhciAqcywgaW50IGxlbikKLXsKLSAgICBOT0lTWV9QQVJTRShwcmludGYoIkNEQVRBOiBcIiVzXCJcbiIsIFN0cmluZzgocywgbGVuKS5zdHJpbmcoKSkpOwotICAgIFBhcnNlU3RhdGUqIHN0ID0gKFBhcnNlU3RhdGUqKXVzZXJEYXRhOwotICAgIHNwPFhNTE5vZGU+IG5vZGUgPSBOVUxMOwotICAgIGlmIChzdC0+c3RhY2suc2l6ZSgpID09IDApIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzcDxYTUxOb2RlPiBwYXJlbnQgPSBzdC0+c3RhY2suaXRlbUF0KHN0LT5zdGFjay5zaXplKCktMSk7Ci0gICAgaWYgKHBhcmVudCAhPSBOVUxMICYmIHBhcmVudC0+Z2V0Q2hpbGRyZW4oKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgIG5vZGUgPSBwYXJlbnQtPmdldENoaWxkcmVuKClbcGFyZW50LT5nZXRDaGlsZHJlbigpLnNpemUoKS0xXTsKLSAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKSAhPSBUWVBFX0NEQVRBKSB7Ci0gICAgICAgICAgICAvLyBMYXN0IG5vZGUgaXMgbm90IENEQVRBLCBuZWVkIHRvIG1ha2UgYSBuZXcgbm9kZS4KLSAgICAgICAgICAgIG5vZGUgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG5vZGUgPT0gTlVMTCkgewotICAgICAgICBub2RlID0gWE1MTm9kZTo6bmV3Q0RhdGEoc3QtPmZpbGVuYW1lKTsKLSAgICAgICAgbm9kZS0+c2V0U3RhcnRMaW5lTnVtYmVyKFhNTF9HZXRDdXJyZW50TGluZU51bWJlcihzdC0+cGFyc2VyKSk7Ci0gICAgICAgIHBhcmVudC0+YWRkQ2hpbGQobm9kZSk7Ci0gICAgfQotCi0gICAgbm9kZS0+YXBwZW5kQ2hhcnMoU3RyaW5nMTYocywgbGVuKSk7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MTm9kZTo6ZW5kRWxlbWVudCh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBOT0lTWV9QQVJTRShwcmludGYoIkVuZCBFbGVtZW50OiAlc1xuIiwgbmFtZSkpOwotICAgIFBhcnNlU3RhdGUqIHN0ID0gKFBhcnNlU3RhdGUqKXVzZXJEYXRhOwotICAgIHNwPFhNTE5vZGU+IG5vZGUgPSBzdC0+c3RhY2suaXRlbUF0KHN0LT5zdGFjay5zaXplKCktMSk7Ci0gICAgbm9kZS0+c2V0RW5kTGluZU51bWJlcihYTUxfR2V0Q3VycmVudExpbmVOdW1iZXIoc3QtPnBhcnNlcikpOwotICAgIGlmIChzdC0+cGVuZGluZ0NvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICBub2RlLT5hcHBlbmRDb21tZW50KHN0LT5wZW5kaW5nQ29tbWVudCk7Ci0gICAgICAgIHN0LT5wZW5kaW5nQ29tbWVudCA9IFN0cmluZzE2KCk7Ci0gICAgfQotICAgIFN0cmluZzE2IG5zMTYsIG5hbWUxNjsKLSAgICBzcGxpdE5hbWUobmFtZSwgJm5zMTYsICZuYW1lMTYpOwotICAgIExPR19BTFdBWVNfRkFUQUxfSUYobm9kZS0+Z2V0RWxlbWVudE5hbWVzcGFjZSgpICE9IG5zMTYKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPmdldEVsZW1lbnROYW1lKCkgIT0gbmFtZTE2LAotICAgICAgICAgICAgICAgICAgICAgICAgIkJhZCBlbmQgZWxlbWVudCAlcyIsIG5hbWUpOwotICAgIHN0LT5zdGFjay5wb3AoKTsKLX0KLQotdm9pZCBYTUxDQUxMCi1YTUxOb2RlOjplbmROYW1lc3BhY2Uodm9pZCAqdXNlckRhdGEsIGNvbnN0IGNoYXIgKnByZWZpeCkKLXsKLSAgICBjb25zdCBjaGFyKiBub25OdWxsUHJlZml4ID0gcHJlZml4ICE9IE5VTEwgPyBwcmVmaXggOiAiIjsKLSAgICBOT0lTWV9QQVJTRShwcmludGYoIkVuZCBOYW1lc3BhY2U6ICVzXG4iLCBwcmVmaXgpKTsKLSAgICBQYXJzZVN0YXRlKiBzdCA9IChQYXJzZVN0YXRlKil1c2VyRGF0YTsKLSAgICBzcDxYTUxOb2RlPiBub2RlID0gc3QtPnN0YWNrLml0ZW1BdChzdC0+c3RhY2suc2l6ZSgpLTEpOwotICAgIG5vZGUtPnNldEVuZExpbmVOdW1iZXIoWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyKHN0LT5wYXJzZXIpKTsKLSAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKG5vZGUtPmdldE5hbWVzcGFjZVByZWZpeCgpICE9IFN0cmluZzE2KG5vbk51bGxQcmVmaXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIkJhZCBlbmQgbmFtZXNwYWNlICVzIiwgcHJlZml4KTsKLSAgICBzdC0+c3RhY2sucG9wKCk7Ci19Ci0KLXZvaWQgWE1MQ0FMTAotWE1MTm9kZTo6Y29tbWVudERhdGEodm9pZCAqdXNlckRhdGEsIGNvbnN0IGNoYXIgKmNvbW1lbnQpCi17Ci0gICAgTk9JU1lfUEFSU0UocHJpbnRmKCJDb21tZW50OiAlc1xuIiwgY29tbWVudCkpOwotICAgIFBhcnNlU3RhdGUqIHN0ID0gKFBhcnNlU3RhdGUqKXVzZXJEYXRhOwotICAgIGlmIChzdC0+cGVuZGluZ0NvbW1lbnQuc2l6ZSgpID4gMCkgewotICAgICAgICBzdC0+cGVuZGluZ0NvbW1lbnQuYXBwZW5kKFN0cmluZzE2KCJcbiIpKTsKLSAgICB9Ci0gICAgc3QtPnBlbmRpbmdDb21tZW50LmFwcGVuZChTdHJpbmcxNihjb21tZW50KSk7Ci19Ci0KLXN0YXR1c190IFhNTE5vZGU6OmNvbGxlY3Rfc3RyaW5ncyhTdHJpbmdQb29sKiBkZXN0LCBWZWN0b3I8dWludDMyX3Q+KiBvdXRSZXNJZHMsCi0gICAgICAgIGJvb2wgc3RyaXBDb21tZW50cywgYm9vbCBzdHJpcFJhd1ZhbHVlcykgY29uc3QKLXsKLSAgICBjb2xsZWN0X2F0dHJfc3RyaW5ncyhkZXN0LCBvdXRSZXNJZHMsIHRydWUpOwotICAgIAotICAgIGludCBpOwotICAgIGlmIChSRVNPVVJDRVNfVE9PTFNfTkFNRVNQQUNFICE9IG1OYW1lc3BhY2VVcmkpIHsKLSAgICAgICAgaWYgKG1OYW1lc3BhY2VQcmVmaXguc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgZGVzdC0+YWRkKG1OYW1lc3BhY2VQcmVmaXgsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtTmFtZXNwYWNlVXJpLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGRlc3QtPmFkZChtTmFtZXNwYWNlVXJpLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobUVsZW1lbnROYW1lLnNpemUoKSA+IDApIHsKLSAgICAgICAgZGVzdC0+YWRkKG1FbGVtZW50TmFtZSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYgKCFzdHJpcENvbW1lbnRzICYmIG1Db21tZW50LnNpemUoKSA+IDApIHsKLSAgICAgICAgZGVzdC0+YWRkKG1Db21tZW50LCB0cnVlKTsKLSAgICB9Ci0KLSAgICBjb25zdCBpbnQgTkEgPSBtQXR0cmlidXRlcy5zaXplKCk7Ci0KLSAgICBmb3IgKGk9MDsgaTxOQTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IGF0dHJpYnV0ZV9lbnRyeSYgYWUgPSBtQXR0cmlidXRlcy5pdGVtQXQoaSk7Ci0gICAgICAgIGlmIChhZS5ucy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBkZXN0LT5hZGQoYWUubnMsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghc3RyaXBSYXdWYWx1ZXMgfHwgYWUubmVlZFN0cmluZ1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIGRlc3QtPmFkZChhZS5zdHJpbmcsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIC8qCi0gICAgICAgIGlmIChhZS52YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfTlVMTAotICAgICAgICAgICAgICAgIHx8IGFlLnZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9TVFJJTkcpIHsKLSAgICAgICAgICAgIGRlc3QtPmFkZChhZS5zdHJpbmcsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgICovCi0gICAgfQotCi0gICAgaWYgKG1FbGVtZW50TmFtZS5zaXplKCkgPT0gMCkgewotICAgICAgICAvLyBJZiBub3QgYW4gZWxlbWVudCwgaW5jbHVkZSB0aGUgQ0RBVEEsIGV2ZW4gaWYgaXQgaXMgZW1wdHkuCi0gICAgICAgIGRlc3QtPmFkZChtQ2hhcnMsIHRydWUpOwotICAgIH0KLQotICAgIGNvbnN0IGludCBOQyA9IG1DaGlsZHJlbi5zaXplKCk7Ci0KLSAgICBmb3IgKGk9MDsgaTxOQzsgaSsrKSB7Ci0gICAgICAgIG1DaGlsZHJlbi5pdGVtQXQoaSktPmNvbGxlY3Rfc3RyaW5ncyhkZXN0LCBvdXRSZXNJZHMsCi0gICAgICAgICAgICAgICAgc3RyaXBDb21tZW50cywgc3RyaXBSYXdWYWx1ZXMpOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgWE1MTm9kZTo6Y29sbGVjdF9hdHRyX3N0cmluZ3MoU3RyaW5nUG9vbCogb3V0UG9vbCwKLSAgICAgICAgVmVjdG9yPHVpbnQzMl90Piogb3V0UmVzSWRzLCBib29sIGFsbEF0dHJzKSBjb25zdCB7Ci0gICAgY29uc3QgaW50IE5BID0gbUF0dHJpYnV0ZXMuc2l6ZSgpOwotCi0gICAgZm9yIChpbnQgaT0wOyBpPE5BOyBpKyspIHsKLSAgICAgICAgY29uc3QgYXR0cmlidXRlX2VudHJ5JiBhdHRyID0gbUF0dHJpYnV0ZXMuaXRlbUF0KGkpOwotICAgICAgICB1aW50MzJfdCBpZCA9IGF0dHIubmFtZVJlc0lkOwotICAgICAgICBpZiAoaWQgfHwgYWxsQXR0cnMpIHsKLSAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGFscmVhZHkgYXNzaWduZWQgdGhpcyByZXNvdXJjZSBJRCB0byBhIHBvb2xlZAotICAgICAgICAgICAgLy8gc3RyaW5nLi4uCi0gICAgICAgICAgICBjb25zdCBWZWN0b3I8c2l6ZV90PiogaW5kaWNlcyA9IG91dFBvb2wtPm9mZnNldHNGb3JTdHJpbmcoYXR0ci5uYW1lKTsKLSAgICAgICAgICAgIHNzaXplX3QgaWR4ID0gLTE7Ci0gICAgICAgICAgICBpZiAoaW5kaWNlcyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50IE5KID0gaW5kaWNlcy0+c2l6ZSgpOwotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBOUiA9IG91dFJlc0lkcy0+c2l6ZSgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajxOSjsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJJZHggPSBpbmRpY2VzLT5pdGVtQXQoaik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJJZHggPj0gTlIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBhc3NpZ24gYSByZXNvdXJjZSBJRCBmb3IgdGhpcyBvbmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gc3RySWR4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBpZ25vcmUgc3RyaW5ncyB0aGF0IGFyZSBvdXQgb2YgcmFuZ2Ugb2YKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50bHkgYXNzaWduZWQgcmVzb3VyY2UgSURzLi4uICB3ZSBhZGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmluZ3MgYXMgd2UgYXNzaWduIHRoZSBmaXJzdCBJRC4KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvdXRSZXNJZHMtPml0ZW1BdChzdHJJZHgpID09IGlkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZHggPSBzdHJJZHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpZHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWR4ID0gb3V0UG9vbC0+YWRkKGF0dHIubmFtZSk7Ci0gICAgICAgICAgICAgICAgTk9JU1kocHJpbnRmKCJBZGRpbmcgYXR0ciAlcyAocmVzaWQgMHglMDh4KSB0byBwb29sOiBpZHg9JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGF0dHIubmFtZSkuc3RyaW5nKCksIGlkLCBpZHgpKTsKLSAgICAgICAgICAgICAgICBpZiAoaWQgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHNzaXplX3Qpb3V0UmVzSWRzLT5zaXplKCkgPD0gaWR4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRSZXNJZHMtPmFkZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBvdXRSZXNJZHMtPnJlcGxhY2VBdChpZCwgaWR4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdHRyLm5hbWVQb29sSWR4ID0gaWR4OwotICAgICAgICAgICAgTk9JU1kocHJpbnRmKCJTdHJpbmcgJXMgb2Zmc2V0PTB4JTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KGF0dHIubmFtZSkuc3RyaW5nKCksIGlkeCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBYTUxOb2RlOjpjb2xsZWN0X3Jlc2lkX3N0cmluZ3MoU3RyaW5nUG9vbCogb3V0UG9vbCwKLSAgICAgICAgVmVjdG9yPHVpbnQzMl90Piogb3V0UmVzSWRzKSBjb25zdAotewotICAgIGNvbGxlY3RfYXR0cl9zdHJpbmdzKG91dFBvb2wsIG91dFJlc0lkcywgZmFsc2UpOwotCi0gICAgY29uc3QgaW50IE5DID0gbUNoaWxkcmVuLnNpemUoKTsKLQotICAgIGZvciAoaW50IGk9MDsgaTxOQzsgaSsrKSB7Ci0gICAgICAgIG1DaGlsZHJlbi5pdGVtQXQoaSktPmNvbGxlY3RfcmVzaWRfc3RyaW5ncyhvdXRQb29sLCBvdXRSZXNJZHMpOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgWE1MTm9kZTo6ZmxhdHRlbl9ub2RlKGNvbnN0IFN0cmluZ1Bvb2wmIHN0cmluZ3MsIGNvbnN0IHNwPEFhcHRGaWxlPiYgZGVzdCwKLSAgICAgICAgYm9vbCBzdHJpcENvbW1lbnRzLCBib29sIHN0cmlwUmF3VmFsdWVzKSBjb25zdAotewotICAgIFJlc1hNTFRyZWVfbm9kZSBub2RlOwotICAgIFJlc1hNTFRyZWVfY2RhdGFFeHQgY2RhdGFFeHQ7Ci0gICAgUmVzWE1MVHJlZV9uYW1lc3BhY2VFeHQgbmFtZXNwYWNlRXh0OwotICAgIFJlc1hNTFRyZWVfYXR0ckV4dCBhdHRyRXh0OwotICAgIGNvbnN0IHZvaWQqIGV4dERhdGEgPSBOVUxMOwotICAgIHNpemVfdCBleHRTaXplID0gMDsKLSAgICBSZXNYTUxUcmVlX2F0dHJpYnV0ZSBhdHRyOwotICAgIGJvb2wgd3JpdGVDdXJyZW50Tm9kZSA9IHRydWU7Ci0KLSAgICBjb25zdCBzaXplX3QgTkEgPSBtQXR0cmlidXRlcy5zaXplKCk7Ci0gICAgY29uc3Qgc2l6ZV90IE5DID0gbUNoaWxkcmVuLnNpemUoKTsKLSAgICBzaXplX3QgaTsKLQotICAgIExPR19BTFdBWVNfRkFUQUxfSUYoTkEgIT0gbUF0dHJpYnV0ZU9yZGVyLnNpemUoKSwgIkF0dHJpYnV0ZXMgbWVzc2VkIHVwISIpOwotCi0gICAgY29uc3QgU3RyaW5nMTYgaWQxNigiaWQiKTsKLSAgICBjb25zdCBTdHJpbmcxNiBjbGFzczE2KCJjbGFzcyIpOwotICAgIGNvbnN0IFN0cmluZzE2IHN0eWxlMTYoInN0eWxlIik7Ci0KLSAgICBjb25zdCB0eXBlIHR5cGUgPSBnZXRUeXBlKCk7Ci0KLSAgICBtZW1zZXQoJm5vZGUsIDAsIHNpemVvZihub2RlKSk7Ci0gICAgbWVtc2V0KCZhdHRyLCAwLCBzaXplb2YoYXR0cikpOwotICAgIG5vZGUuaGVhZGVyLmhlYWRlclNpemUgPSBodG9kcyhzaXplb2Yobm9kZSkpOwotICAgIG5vZGUubGluZU51bWJlciA9IGh0b2RsKGdldFN0YXJ0TGluZU51bWJlcigpKTsKLSAgICBpZiAoIXN0cmlwQ29tbWVudHMpIHsKLSAgICAgICAgbm9kZS5jb21tZW50LmluZGV4ID0gaHRvZGwoCi0gICAgICAgICAgICBtQ29tbWVudC5zaXplKCkgPiAwID8gc3RyaW5ncy5vZmZzZXRGb3JTdHJpbmcobUNvbW1lbnQpIDogLTEpOwotICAgICAgICAvL2lmIChtQ29tbWVudC5zaXplKCkgPiAwKSB7Ci0gICAgICAgIC8vICBwcmludGYoIkZsYXR0ZW5pbmcgY29tbWVudDogJXNcbiIsIFN0cmluZzgobUNvbW1lbnQpLnN0cmluZygpKTsKLSAgICAgICAgLy99Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbm9kZS5jb21tZW50LmluZGV4ID0gaHRvZGwoKHVpbnQzMl90KS0xKTsKLSAgICB9Ci0gICAgaWYgKHR5cGUgPT0gVFlQRV9FTEVNRU5UKSB7Ci0gICAgICAgIG5vZGUuaGVhZGVyLnR5cGUgPSBodG9kcyhSRVNfWE1MX1NUQVJUX0VMRU1FTlRfVFlQRSk7Ci0gICAgICAgIGV4dERhdGEgPSAmYXR0ckV4dDsKLSAgICAgICAgZXh0U2l6ZSA9IHNpemVvZihhdHRyRXh0KTsKLSAgICAgICAgbWVtc2V0KCZhdHRyRXh0LCAwLCBzaXplb2YoYXR0ckV4dCkpOwotICAgICAgICBpZiAobU5hbWVzcGFjZVVyaS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBhdHRyRXh0Lm5zLmluZGV4ID0gaHRvZGwoc3RyaW5ncy5vZmZzZXRGb3JTdHJpbmcobU5hbWVzcGFjZVVyaSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXR0ckV4dC5ucy5pbmRleCA9IGh0b2RsKCh1aW50MzJfdCktMSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXR0ckV4dC5uYW1lLmluZGV4ID0gaHRvZGwoc3RyaW5ncy5vZmZzZXRGb3JTdHJpbmcobUVsZW1lbnROYW1lKSk7Ci0gICAgICAgIGF0dHJFeHQuYXR0cmlidXRlU3RhcnQgPSBodG9kcyhzaXplb2YoYXR0ckV4dCkpOwotICAgICAgICBhdHRyRXh0LmF0dHJpYnV0ZVNpemUgPSBodG9kcyhzaXplb2YoYXR0cikpOwotICAgICAgICBhdHRyRXh0LmF0dHJpYnV0ZUNvdW50ID0gaHRvZHMoTkEpOwotICAgICAgICBhdHRyRXh0LmlkSW5kZXggPSBodG9kcygwKTsKLSAgICAgICAgYXR0ckV4dC5jbGFzc0luZGV4ID0gaHRvZHMoMCk7Ci0gICAgICAgIGF0dHJFeHQuc3R5bGVJbmRleCA9IGh0b2RzKDApOwotICAgICAgICBmb3IgKGk9MDsgaTxOQTsgaSsrKSB7Ci0gICAgICAgICAgICBzc2l6ZV90IGlkeCA9IG1BdHRyaWJ1dGVPcmRlci52YWx1ZUF0KGkpOwotICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlX2VudHJ5JiBhZSA9IG1BdHRyaWJ1dGVzLml0ZW1BdChpZHgpOwotICAgICAgICAgICAgaWYgKGFlLm5zLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFlLm5hbWUgPT0gaWQxNikgewotICAgICAgICAgICAgICAgICAgICBhdHRyRXh0LmlkSW5kZXggPSBodG9kcyhpKzEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWUubmFtZSA9PSBjbGFzczE2KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF0dHJFeHQuY2xhc3NJbmRleCA9IGh0b2RzKGkrMSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhZS5uYW1lID09IHN0eWxlMTYpIHsKLSAgICAgICAgICAgICAgICAgICAgYXR0ckV4dC5zdHlsZUluZGV4ID0gaHRvZHMoaSsxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gVFlQRV9OQU1FU1BBQ0UpIHsKLSAgICAgICAgaWYgKG1OYW1lc3BhY2VVcmkgPT0gUkVTT1VSQ0VTX1RPT0xTX05BTUVTUEFDRSkgewotICAgICAgICAgICAgd3JpdGVDdXJyZW50Tm9kZSA9IGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbm9kZS5oZWFkZXIudHlwZSA9IGh0b2RzKFJFU19YTUxfU1RBUlRfTkFNRVNQQUNFX1RZUEUpOwotICAgICAgICAgICAgZXh0RGF0YSA9ICZuYW1lc3BhY2VFeHQ7Ci0gICAgICAgICAgICBleHRTaXplID0gc2l6ZW9mKG5hbWVzcGFjZUV4dCk7Ci0gICAgICAgICAgICBtZW1zZXQoJm5hbWVzcGFjZUV4dCwgMCwgc2l6ZW9mKG5hbWVzcGFjZUV4dCkpOwotICAgICAgICAgICAgaWYgKG1OYW1lc3BhY2VQcmVmaXguc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgIG5hbWVzcGFjZUV4dC5wcmVmaXguaW5kZXggPSBodG9kbChzdHJpbmdzLm9mZnNldEZvclN0cmluZyhtTmFtZXNwYWNlUHJlZml4KSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5hbWVzcGFjZUV4dC5wcmVmaXguaW5kZXggPSBodG9kbCgodWludDMyX3QpLTEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbmFtZXNwYWNlRXh0LnByZWZpeC5pbmRleCA9IGh0b2RsKHN0cmluZ3Mub2Zmc2V0Rm9yU3RyaW5nKG1OYW1lc3BhY2VQcmVmaXgpKTsKLSAgICAgICAgICAgIG5hbWVzcGFjZUV4dC51cmkuaW5kZXggPSBodG9kbChzdHJpbmdzLm9mZnNldEZvclN0cmluZyhtTmFtZXNwYWNlVXJpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihOQSAhPSAwLCAiTmFtZXNwYWNlIG5vZGVzIGNhbid0IGhhdmUgYXR0cmlidXRlcyEiKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gVFlQRV9DREFUQSkgewotICAgICAgICBub2RlLmhlYWRlci50eXBlID0gaHRvZHMoUkVTX1hNTF9DREFUQV9UWVBFKTsKLSAgICAgICAgZXh0RGF0YSA9ICZjZGF0YUV4dDsKLSAgICAgICAgZXh0U2l6ZSA9IHNpemVvZihjZGF0YUV4dCk7Ci0gICAgICAgIG1lbXNldCgmY2RhdGFFeHQsIDAsIHNpemVvZihjZGF0YUV4dCkpOwotICAgICAgICBjZGF0YUV4dC5kYXRhLmluZGV4ID0gaHRvZGwoc3RyaW5ncy5vZmZzZXRGb3JTdHJpbmcobUNoYXJzKSk7Ci0gICAgICAgIGNkYXRhRXh0LnR5cGVkRGF0YS5zaXplID0gaHRvZHMoc2l6ZW9mKGNkYXRhRXh0LnR5cGVkRGF0YSkpOwotICAgICAgICBjZGF0YUV4dC50eXBlZERhdGEucmVzMCA9IDA7Ci0gICAgICAgIGNkYXRhRXh0LnR5cGVkRGF0YS5kYXRhVHlwZSA9IG1DaGFyc1ZhbHVlLmRhdGFUeXBlOwotICAgICAgICBjZGF0YUV4dC50eXBlZERhdGEuZGF0YSA9IGh0b2RsKG1DaGFyc1ZhbHVlLmRhdGEpOwotICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKE5BICE9IDAsICJDREFUQSBub2RlcyBjYW4ndCBoYXZlIGF0dHJpYnV0ZXMhIik7Ci0gICAgfQotCi0gICAgbm9kZS5oZWFkZXIuc2l6ZSA9IGh0b2RsKHNpemVvZihub2RlKSArIGV4dFNpemUgKyAoc2l6ZW9mKGF0dHIpKk5BKSk7Ci0KLSAgICBpZiAod3JpdGVDdXJyZW50Tm9kZSkgewotICAgICAgICBkZXN0LT53cml0ZURhdGEoJm5vZGUsIHNpemVvZihub2RlKSk7Ci0gICAgICAgIGlmIChleHRTaXplID4gMCkgewotICAgICAgICAgICAgZGVzdC0+d3JpdGVEYXRhKGV4dERhdGEsIGV4dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpPTA7IGk8TkE7IGkrKykgewotICAgICAgICBzc2l6ZV90IGlkeCA9IG1BdHRyaWJ1dGVPcmRlci52YWx1ZUF0KGkpOwotICAgICAgICBjb25zdCBhdHRyaWJ1dGVfZW50cnkmIGFlID0gbUF0dHJpYnV0ZXMuaXRlbUF0KGlkeCk7Ci0gICAgICAgIGlmIChhZS5ucy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBhdHRyLm5zLmluZGV4ID0gaHRvZGwoc3RyaW5ncy5vZmZzZXRGb3JTdHJpbmcoYWUubnMpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF0dHIubnMuaW5kZXggPSBodG9kbCgodWludDMyX3QpLTEpOwotICAgICAgICB9Ci0gICAgICAgIGF0dHIubmFtZS5pbmRleCA9IGh0b2RsKGFlLm5hbWVQb29sSWR4KTsKLQotICAgICAgICBpZiAoIXN0cmlwUmF3VmFsdWVzIHx8IGFlLm5lZWRTdHJpbmdWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBhdHRyLnJhd1ZhbHVlLmluZGV4ID0gaHRvZGwoc3RyaW5ncy5vZmZzZXRGb3JTdHJpbmcoYWUuc3RyaW5nKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdHRyLnJhd1ZhbHVlLmluZGV4ID0gaHRvZGwoKHVpbnQzMl90KS0xKTsKLSAgICAgICAgfQotICAgICAgICBhdHRyLnR5cGVkVmFsdWUuc2l6ZSA9IGh0b2RzKHNpemVvZihhdHRyLnR5cGVkVmFsdWUpKTsKLSAgICAgICAgaWYgKGFlLnZhbHVlLmRhdGFUeXBlID09IFJlc192YWx1ZTo6VFlQRV9OVUxMCi0gICAgICAgICAgICAgICAgfHwgYWUudmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX1NUUklORykgewotICAgICAgICAgICAgYXR0ci50eXBlZFZhbHVlLnJlczAgPSAwOwotICAgICAgICAgICAgYXR0ci50eXBlZFZhbHVlLmRhdGFUeXBlID0gUmVzX3ZhbHVlOjpUWVBFX1NUUklORzsKLSAgICAgICAgICAgIGF0dHIudHlwZWRWYWx1ZS5kYXRhID0gaHRvZGwoc3RyaW5ncy5vZmZzZXRGb3JTdHJpbmcoYWUuc3RyaW5nKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdHRyLnR5cGVkVmFsdWUucmVzMCA9IDA7Ci0gICAgICAgICAgICBhdHRyLnR5cGVkVmFsdWUuZGF0YVR5cGUgPSBhZS52YWx1ZS5kYXRhVHlwZTsKLSAgICAgICAgICAgIGF0dHIudHlwZWRWYWx1ZS5kYXRhID0gaHRvZGwoYWUudmFsdWUuZGF0YSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdC0+d3JpdGVEYXRhKCZhdHRyLCBzaXplb2YoYXR0cikpOwotICAgIH0KLQotICAgIGZvciAoaT0wOyBpPE5DOyBpKyspIHsKLSAgICAgICAgc3RhdHVzX3QgZXJyID0gbUNoaWxkcmVuLml0ZW1BdChpKS0+ZmxhdHRlbl9ub2RlKHN0cmluZ3MsIGRlc3QsCi0gICAgICAgICAgICAgICAgc3RyaXBDb21tZW50cywgc3RyaXBSYXdWYWx1ZXMpOwotICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gVFlQRV9FTEVNRU5UKSB7Ci0gICAgICAgIFJlc1hNTFRyZWVfZW5kRWxlbWVudEV4dCBlbmRFbGVtZW50RXh0OwotICAgICAgICBtZW1zZXQoJmVuZEVsZW1lbnRFeHQsIDAsIHNpemVvZihlbmRFbGVtZW50RXh0KSk7Ci0gICAgICAgIG5vZGUuaGVhZGVyLnR5cGUgPSBodG9kcyhSRVNfWE1MX0VORF9FTEVNRU5UX1RZUEUpOwotICAgICAgICBub2RlLmhlYWRlci5zaXplID0gaHRvZGwoc2l6ZW9mKG5vZGUpK3NpemVvZihlbmRFbGVtZW50RXh0KSk7Ci0gICAgICAgIG5vZGUubGluZU51bWJlciA9IGh0b2RsKGdldEVuZExpbmVOdW1iZXIoKSk7Ci0gICAgICAgIG5vZGUuY29tbWVudC5pbmRleCA9IGh0b2RsKCh1aW50MzJfdCktMSk7Ci0gICAgICAgIGVuZEVsZW1lbnRFeHQubnMuaW5kZXggPSBhdHRyRXh0Lm5zLmluZGV4OwotICAgICAgICBlbmRFbGVtZW50RXh0Lm5hbWUuaW5kZXggPSBhdHRyRXh0Lm5hbWUuaW5kZXg7Ci0gICAgICAgIGRlc3QtPndyaXRlRGF0YSgmbm9kZSwgc2l6ZW9mKG5vZGUpKTsKLSAgICAgICAgZGVzdC0+d3JpdGVEYXRhKCZlbmRFbGVtZW50RXh0LCBzaXplb2YoZW5kRWxlbWVudEV4dCkpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBUWVBFX05BTUVTUEFDRSkgewotICAgICAgICBpZiAod3JpdGVDdXJyZW50Tm9kZSkgewotICAgICAgICAgICAgbm9kZS5oZWFkZXIudHlwZSA9IGh0b2RzKFJFU19YTUxfRU5EX05BTUVTUEFDRV9UWVBFKTsKLSAgICAgICAgICAgIG5vZGUubGluZU51bWJlciA9IGh0b2RsKGdldEVuZExpbmVOdW1iZXIoKSk7Ci0gICAgICAgICAgICBub2RlLmNvbW1lbnQuaW5kZXggPSBodG9kbCgodWludDMyX3QpLTEpOwotICAgICAgICAgICAgbm9kZS5oZWFkZXIuc2l6ZSA9IGh0b2RsKHNpemVvZihub2RlKStleHRTaXplKTsKLSAgICAgICAgICAgIGRlc3QtPndyaXRlRGF0YSgmbm9kZSwgc2l6ZW9mKG5vZGUpKTsKLSAgICAgICAgICAgIGRlc3QtPndyaXRlRGF0YShleHREYXRhLCBleHRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvWE1MTm9kZS5oIGIvdG9vbHMvYWFwdC9YTUxOb2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NjI0YjcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9YTUxOb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBCdWlsZCByZXNvdXJjZSBmaWxlcyBmcm9tIHJhdyBhc3NldHMuCi0vLwotCi0jaWZuZGVmIFhNTF9OT0RFX0gKLSNkZWZpbmUgWE1MX05PREVfSAotCi0jaW5jbHVkZSAiU3RyaW5nUG9vbC5oIgotI2luY2x1ZGUgIlJlc291cmNlVGFibGUuaCIKLQotY2xhc3MgWE1MTm9kZTsKLQotZXh0ZXJuIGNvbnN0IGNoYXIqIGNvbnN0IFJFU09VUkNFU19ST09UX05BTUVTUEFDRTsKLWV4dGVybiBjb25zdCBjaGFyKiBjb25zdCBSRVNPVVJDRVNfQU5EUk9JRF9OQU1FU1BBQ0U7Ci0KLWJvb2wgaXNXaGl0ZXNwYWNlKGNvbnN0IGNoYXIxNl90KiBzdHIpOwotCi1TdHJpbmcxNiBnZXROYW1lc3BhY2VSZXNvdXJjZVBhY2thZ2UoU3RyaW5nMTYgbmFtZXNwYWNlVXJpLCBib29sKiBvdXRJc1B1YmxpYyA9IE5VTEwpOwotCi1zdGF0dXNfdCBwYXJzZVN0eWxlZFN0cmluZyhCdW5kbGUqIGJ1bmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzWE1MVHJlZSogaW5YbWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcxNiYgZW5kVGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nMTYqIG91dFN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmdQb29sOjplbnRyeV9zdHlsZV9zcGFuPiogb3V0U3BhbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzRm9ybWF0dGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1BzZXVkb2xvY2FsaXphYmxlKTsKLQotdm9pZCBwcmludFhNTEJsb2NrKFJlc1hNTFRyZWUqIGJsb2NrKTsKLQotc3RhdHVzX3QgcGFyc2VYTUxSZXNvdXJjZShjb25zdCBzcDxBYXB0RmlsZT4mIGZpbGUsIFJlc1hNTFRyZWUqIG91dFRyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaXBBbGw9dHJ1ZSwgYm9vbCBrZWVwQ29tbWVudHM9ZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBjRGF0YVRhZ3M9TlVMTCk7Ci0KLWNsYXNzIFhNTE5vZGUgOiBwdWJsaWMgUmVmQmFzZQotewotcHVibGljOgotICAgIHN0YXRpYyBzcDxYTUxOb2RlPiBwYXJzZShjb25zdCBzcDxBYXB0RmlsZT4mIGZpbGUpOwotCi0gICAgc3RhdGljIGlubGluZQotICAgIHNwPFhNTE5vZGU+IG5ld05hbWVzcGFjZShjb25zdCBTdHJpbmc4JiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nMTYmIHByZWZpeCwgY29uc3QgU3RyaW5nMTYmIHVyaSkgewotICAgICAgICByZXR1cm4gbmV3IFhNTE5vZGUoZmlsZW5hbWUsIHByZWZpeCwgdXJpLCB0cnVlKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGlubGluZQotICAgIHNwPFhNTE5vZGU+IG5ld0VsZW1lbnQoY29uc3QgU3RyaW5nOCYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZzE2JiBucywgY29uc3QgU3RyaW5nMTYmIG5hbWUpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBYTUxOb2RlKGZpbGVuYW1lLCBucywgbmFtZSwgZmFsc2UpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgaW5saW5lCi0gICAgc3A8WE1MTm9kZT4gbmV3Q0RhdGEoY29uc3QgU3RyaW5nOCYgZmlsZW5hbWUpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBYTUxOb2RlKGZpbGVuYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgZW51bSB0eXBlIHsKLSAgICAgICAgVFlQRV9OQU1FU1BBQ0UsCi0gICAgICAgIFRZUEVfRUxFTUVOVCwKLSAgICAgICAgVFlQRV9DREFUQQotICAgIH07Ci0gICAgCi0gICAgdHlwZSBnZXRUeXBlKCkgY29uc3Q7Ci0gICAgCi0gICAgY29uc3QgU3RyaW5nMTYmIGdldE5hbWVzcGFjZVByZWZpeCgpIGNvbnN0OwotICAgIGNvbnN0IFN0cmluZzE2JiBnZXROYW1lc3BhY2VVcmkoKSBjb25zdDsKLSAgICAKLSAgICBjb25zdCBTdHJpbmcxNiYgZ2V0RWxlbWVudE5hbWVzcGFjZSgpIGNvbnN0OwotICAgIGNvbnN0IFN0cmluZzE2JiBnZXRFbGVtZW50TmFtZSgpIGNvbnN0OwotICAgIGNvbnN0IFZlY3RvcjxzcDxYTUxOb2RlPiA+JiBnZXRDaGlsZHJlbigpIGNvbnN0OwotCi0gICAgY29uc3QgU3RyaW5nOCYgZ2V0RmlsZW5hbWUoKSBjb25zdDsKLSAgICAKLSAgICBzdHJ1Y3QgYXR0cmlidXRlX2VudHJ5IHsKLSAgICAgICAgYXR0cmlidXRlX2VudHJ5KCkgOiBpbmRleCh+KHVpbnQzMl90KTApLCBuYW1lUmVzSWQoMCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFsdWUuZGF0YVR5cGUgPSBSZXNfdmFsdWU6OlRZUEVfTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgbmVlZFN0cmluZ1ZhbHVlKCkgY29uc3QgewotICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNJZCA9PSAwCi0gICAgICAgICAgICAgICAgfHwgdmFsdWUuZGF0YVR5cGUgPT0gUmVzX3ZhbHVlOjpUWVBFX05VTEwKLSAgICAgICAgICAgICAgICB8fCB2YWx1ZS5kYXRhVHlwZSA9PSBSZXNfdmFsdWU6OlRZUEVfU1RSSU5HOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcxNiBuczsKLSAgICAgICAgU3RyaW5nMTYgbmFtZTsKLSAgICAgICAgU3RyaW5nMTYgc3RyaW5nOwotICAgICAgICBSZXNfdmFsdWUgdmFsdWU7Ci0gICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICB1aW50MzJfdCBuYW1lUmVzSWQ7Ci0gICAgICAgIG11dGFibGUgdWludDMyX3QgbmFtZVBvb2xJZHg7Ci0gICAgfTsKLQotICAgIGNvbnN0IFZlY3RvcjxhdHRyaWJ1dGVfZW50cnk+JiBnZXRBdHRyaWJ1dGVzKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBhdHRyaWJ1dGVfZW50cnkqIGdldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcxNiYgbnMsIGNvbnN0IFN0cmluZzE2JiBuYW1lKSBjb25zdDsKLSAgICAKLSAgICBhdHRyaWJ1dGVfZW50cnkqIGVkaXRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nMTYmIG5zLCBjb25zdCBTdHJpbmcxNiYgbmFtZSk7Ci0KLSAgICBjb25zdCBTdHJpbmcxNiYgZ2V0Q0RhdGEoKSBjb25zdDsKLQotICAgIGNvbnN0IFN0cmluZzE2JiBnZXRDb21tZW50KCkgY29uc3Q7Ci0KLSAgICBpbnQzMl90IGdldFN0YXJ0TGluZU51bWJlcigpIGNvbnN0OwotICAgIGludDMyX3QgZ2V0RW5kTGluZU51bWJlcigpIGNvbnN0OwotCi0gICAgc3A8WE1MTm9kZT4gc2VhcmNoRWxlbWVudChjb25zdCBTdHJpbmcxNiYgdGFnTmFtZXNwYWNlLCBjb25zdCBTdHJpbmcxNiYgdGFnTmFtZSk7Ci0gICAgCi0gICAgc3A8WE1MTm9kZT4gZ2V0Q2hpbGRFbGVtZW50KGNvbnN0IFN0cmluZzE2JiB0YWdOYW1lc3BhY2UsIGNvbnN0IFN0cmluZzE2JiB0YWdOYW1lKTsKLSAgICAKLSAgICBzdGF0dXNfdCBhZGRDaGlsZChjb25zdCBzcDxYTUxOb2RlPiYgY2hpbGQpOwotCi0gICAgc3RhdHVzX3QgaW5zZXJ0Q2hpbGRBdChjb25zdCBzcDxYTUxOb2RlPiYgY2hpbGQsIHNpemVfdCBpbmRleCk7Ci0KLSAgICBzdGF0dXNfdCBhZGRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nMTYmIG5zLCBjb25zdCBTdHJpbmcxNiYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nMTYmIHZhbHVlKTsKLQotICAgIHZvaWQgc2V0QXR0cmlidXRlUmVzSUQoc2l6ZV90IGF0dHJJZHgsIHVpbnQzMl90IHJlc0lkKTsKLQotICAgIHN0YXR1c190IGFwcGVuZENoYXJzKGNvbnN0IFN0cmluZzE2JiBjaGFycyk7Ci0KLSAgICBzdGF0dXNfdCBhcHBlbmRDb21tZW50KGNvbnN0IFN0cmluZzE2JiBjb21tZW50KTsKLQotICAgIHZvaWQgc2V0U3RhcnRMaW5lTnVtYmVyKGludDMyX3QgbGluZSk7Ci0gICAgdm9pZCBzZXRFbmRMaW5lTnVtYmVyKGludDMyX3QgbGluZSk7Ci0KLSAgICB2b2lkIHJlbW92ZVdoaXRlc3BhY2UoYm9vbCBzdHJpcEFsbD10cnVlLCBjb25zdCBjaGFyKiogY0RhdGFUYWdzPU5VTEwpOwotCi0gICAgdm9pZCBzZXRVVEY4KGJvb2wgdmFsKSB7IG1VVEY4ID0gdmFsOyB9Ci0KLSAgICBzdGF0dXNfdCBwYXJzZVZhbHVlcyhjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLCBSZXNvdXJjZVRhYmxlKiB0YWJsZSk7Ci0KLSAgICBzdGF0dXNfdCBhc3NpZ25SZXNvdXJjZUlkcyhjb25zdCBzcDxBYXB0QXNzZXRzPiYgYXNzZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlVGFibGUqIHRhYmxlID0gTlVMTCk7Ci0KLSAgICBzdGF0dXNfdCBmbGF0dGVuKGNvbnN0IHNwPEFhcHRGaWxlPiYgZGVzdCwgYm9vbCBzdHJpcENvbW1lbnRzLAotICAgICAgICAgICAgYm9vbCBzdHJpcFJhd1ZhbHVlcykgY29uc3Q7Ci0KLSAgICB2b2lkIHByaW50KGludCBpbmRlbnQ9MCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IFBhcnNlU3RhdGUKLSAgICB7Ci0gICAgICAgIFN0cmluZzggZmlsZW5hbWU7Ci0gICAgICAgIFhNTF9QYXJzZXIgcGFyc2VyOwotICAgICAgICBzcDxYTUxOb2RlPiByb290OwotICAgICAgICBWZWN0b3I8c3A8WE1MTm9kZT4gPiBzdGFjazsKLSAgICAgICAgU3RyaW5nMTYgcGVuZGluZ0NvbW1lbnQ7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIFhNTENBTEwKLSAgICBzdGFydE5hbWVzcGFjZSh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICp1cmkpOwotICAgIHN0YXRpYyB2b2lkIFhNTENBTEwKLSAgICBzdGFydEVsZW1lbnQodm9pZCAqdXNlckRhdGEsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiphdHRzKTsKLSAgICBzdGF0aWMgdm9pZCBYTUxDQUxMCi0gICAgY2hhcmFjdGVyRGF0YSh2b2lkICp1c2VyRGF0YSwgY29uc3QgWE1MX0NoYXIgKnMsIGludCBsZW4pOwotICAgIHN0YXRpYyB2b2lkIFhNTENBTEwKLSAgICBlbmRFbGVtZW50KHZvaWQgKnVzZXJEYXRhLCBjb25zdCBjaGFyICpuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBYTUxDQUxMCi0gICAgZW5kTmFtZXNwYWNlKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBjaGFyICpwcmVmaXgpOwotICAgIAotICAgIHN0YXRpYyB2b2lkIFhNTENBTEwKLSAgICBjb21tZW50RGF0YSh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqY29tbWVudCk7Ci0gICAgCi0gICAgLy8gQ3JlYXRpbmcgYW4gZWxlbWVudCBub2RlLgotICAgIFhNTE5vZGUoY29uc3QgU3RyaW5nOCYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZzE2JiBzMSwgY29uc3QgU3RyaW5nMTYmIHMyLCBib29sIGlzTmFtZXNwYWNlKTsKLSAgICAKLSAgICAvLyBDcmVhdGluZyBhIENEQVRBIG5vZGUuCi0gICAgWE1MTm9kZShjb25zdCBTdHJpbmc4JiBmaWxlbmFtZSk7Ci0gICAgCi0gICAgc3RhdHVzX3QgY29sbGVjdF9zdHJpbmdzKFN0cmluZ1Bvb2wqIGRlc3QsIFZlY3Rvcjx1aW50MzJfdD4qIG91dFJlc0lkcywKLSAgICAgICAgICAgIGJvb2wgc3RyaXBDb21tZW50cywgYm9vbCBzdHJpcFJhd1ZhbHVlcykgY29uc3Q7Ci0KLSAgICBzdGF0dXNfdCBjb2xsZWN0X2F0dHJfc3RyaW5ncyhTdHJpbmdQb29sKiBvdXRQb29sLAotICAgICAgICBWZWN0b3I8dWludDMyX3Q+KiBvdXRSZXNJZHMsIGJvb2wgYWxsQXR0cnMpIGNvbnN0OwotICAgICAgICAKLSAgICBzdGF0dXNfdCBjb2xsZWN0X3Jlc2lkX3N0cmluZ3MoU3RyaW5nUG9vbCogb3V0UG9vbCwKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50MzJfdD4qIG91dFJlc0lkcykgY29uc3Q7Ci0KLSAgICBzdGF0dXNfdCBmbGF0dGVuX25vZGUoY29uc3QgU3RyaW5nUG9vbCYgc3RyaW5ncywgY29uc3Qgc3A8QWFwdEZpbGU+JiBkZXN0LAotICAgICAgICAgICAgYm9vbCBzdHJpcENvbW1lbnRzLCBib29sIHN0cmlwUmF3VmFsdWVzKSBjb25zdDsKLQotICAgIFN0cmluZzE2IG1OYW1lc3BhY2VQcmVmaXg7Ci0gICAgU3RyaW5nMTYgbU5hbWVzcGFjZVVyaTsKLSAgICBTdHJpbmcxNiBtRWxlbWVudE5hbWU7Ci0gICAgVmVjdG9yPHNwPFhNTE5vZGU+ID4gbUNoaWxkcmVuOwotICAgIFZlY3RvcjxhdHRyaWJ1dGVfZW50cnk+IG1BdHRyaWJ1dGVzOwotICAgIEtleWVkVmVjdG9yPHVpbnQzMl90LCB1aW50MzJfdD4gbUF0dHJpYnV0ZU9yZGVyOwotICAgIHVpbnQzMl90IG1OZXh0QXR0cmlidXRlSW5kZXg7Ci0gICAgU3RyaW5nMTYgbUNoYXJzOwotICAgIFJlc192YWx1ZSBtQ2hhcnNWYWx1ZTsKLSAgICBTdHJpbmcxNiBtQ29tbWVudDsKLSAgICBTdHJpbmc4IG1GaWxlbmFtZTsKLSAgICBpbnQzMl90IG1TdGFydExpbmVOdW1iZXI7Ci0gICAgaW50MzJfdCBtRW5kTGluZU51bWJlcjsKLQotICAgIC8vIEVuY29kZSBjb21waWxlZCBYTUwgd2l0aCBVVEYtOCBTdHJpbmdQb29scz8KLSAgICBib29sIG1VVEY4OwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9hYXB0L1ppcEVudHJ5LmNwcCBiL3Rvb2xzL2FhcHQvWmlwRW50cnkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTc1OTg4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvWmlwRW50cnkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLwotLy8gQWNjZXNzIHRvIGVudHJpZXMgaW4gYSBaaXAgYXJjaGl2ZS4KLS8vCi0KLSNkZWZpbmUgTE9HX1RBRyAiemlwIgotCi0jaW5jbHVkZSAiWmlwRW50cnkuaCIKLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi0vKgotICogSW5pdGlhbGl6ZSBhIG5ldyBaaXBFbnRyeSBzdHJ1Y3R1cmUgZnJvbSBhIEZJTEUqIHBvc2l0aW9uZWQgYXQgYQotICogQ2VudHJhbERpcmVjdG9yeUVudHJ5LgotICoKLSAqIE9uIGV4aXQsIHRoZSBmaWxlIHBvaW50ZXIgd2lsbCBiZSBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgQ0RFIG9yCi0gKiBhdCB0aGUgRU9DRC4KLSAqLwotc3RhdHVzX3QgWmlwRW50cnk6OmluaXRGcm9tQ0RFKEZJTEUqIGZwKQotewotICAgIHN0YXR1c190IHJlc3VsdDsKLSAgICBsb25nIHBvc247Ci0gICAgYm9vbCBoYXNERDsKLQotICAgIC8vQUxPR1YoImluaXRGcm9tQ0RFIC0tLVxuIik7Ci0KLSAgICAvKiByZWFkIHRoZSBDREUgKi8KLSAgICByZXN1bHQgPSBtQ0RFLnJlYWQoZnApOwotICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgQUxPR0QoIm1DREUucmVhZCBmYWlsZWRcbiIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8vbUNERS5kdW1wKCk7Ci0KLSAgICAvKiB1c2luZyB0aGUgaW5mbyBpbiB0aGUgQ0RFLCBnbyBsb2FkIHVwIHRoZSBMRkggKi8KLSAgICBwb3NuID0gZnRlbGwoZnApOwotICAgIGlmIChmc2VlayhmcCwgbUNERS5tTG9jYWxIZWFkZXJSZWxPZmZzZXQsIFNFRUtfU0VUKSAhPSAwKSB7Ci0gICAgICAgIEFMT0dEKCJsb2NhbCBoZWFkZXIgc2VlayBmYWlsZWQgKCVsZClcbiIsCi0gICAgICAgICAgICBtQ0RFLm1Mb2NhbEhlYWRlclJlbE9mZnNldCk7Ci0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIHJlc3VsdCA9IG1MRkgucmVhZChmcCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HRCgibUxGSC5yZWFkIGZhaWxlZFxuIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgaWYgKGZzZWVrKGZwLCBwb3NuLCBTRUVLX1NFVCkgIT0gMCkKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0KLSAgICAvL21MRkguZHVtcCgpOwotCi0gICAgLyoKLSAgICAgKiBXZSAqbWlnaHQqIG5lZWQgdG8gcmVhZCB0aGUgRGF0YSBEZXNjcmlwdG9yIGF0IHRoaXMgcG9pbnQgYW5kCi0gICAgICogaW50ZWdyYXRlIGl0IGludG8gdGhlIExGSC4gIElmIHRoaXMgYml0IGlzIHNldCwgdGhlIENSQy0zMiwKLSAgICAgKiBjb21wcmVzc2VkIHNpemUsIGFuZCB1bmNvbXByZXNzZWQgc2l6ZSB3aWxsIGJlIHplcm8uICBJbiBwcmFjdGljZQotICAgICAqIHRoZXNlIHNlZW0gdG8gYmUgcmFyZS4KLSAgICAgKi8KLSAgICBoYXNERCA9IChtTEZILm1HUEJpdEZsYWcgJiBrVXNlc0RhdGFEZXNjcikgIT0gMDsKLSAgICBpZiAoaGFzREQpIHsKLSAgICAgICAgLy8gZG8gc29tZXRoaW5nIGNsZXZlcgotICAgICAgICAvL0FMT0dEKCIrKysgaGFzIGRhdGEgZGVzY3JpcHRvclxuIik7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBTYW5pdHktY2hlY2sgdGhlIExGSC4gIE5vdGUgdGhhdCB0aGlzIHdpbGwgZmFpbCBpZiB0aGUgImtVc2VzRGF0YURlc2NyIgotICAgICAqIGZsYWcgaXMgc2V0LCBiZWNhdXNlIHRoZSBMRkggaXMgaW5jb21wbGV0ZS4gIChOb3QgYSBwcm9ibGVtLCBzaW5jZSB3ZQotICAgICAqIHByZWZlciB0aGUgQ0RFIHZhbHVlcy4pCi0gICAgICovCi0gICAgaWYgKCFoYXNERCAmJiAhY29tcGFyZUhlYWRlcnMoKSkgewotICAgICAgICBBTE9HVygid2FybmluZzogaGVhZGVyIG1pc21hdGNoXG4iKTsKLSAgICAgICAgLy8ga2VlcCBnb2luZz8KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIElmIHRoZSBtVmVyc2lvblRvRXh0cmFjdCBpcyBncmVhdGVyIHRoYW4gMjAsIHdlIG1heSBoYXZlIGFuCi0gICAgICogaXNzdWUgdW5wYWNraW5nIHRoZSByZWNvcmQgLS0gY291bGQgYmUgZW5jcnlwdGVkLCBjb21wcmVzc2VkCi0gICAgICogd2l0aCBzb21ldGhpbmcgd2UgZG9uJ3Qgc3VwcG9ydCwgb3IgdXNlIFppcDY0IGV4dGVuc2lvbnMuICBXZQotICAgICAqIGNhbiBkZWZlciB3b3JyeWluZyBhYm91dCB0aGF0IHRvIHdoZW4gd2UncmUgZXh0cmFjdGluZyBkYXRhLgotICAgICAqLwotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBhIG5ldyBlbnRyeS4gIFBhc3MgaW4gdGhlIGZpbGUgbmFtZSBhbmQgYW4gb3B0aW9uYWwgY29tbWVudC4KLSAqCi0gKiBJbml0aWFsaXplcyB0aGUgQ0RFIGFuZCB0aGUgTEZILgotICovCi12b2lkIFppcEVudHJ5Ojppbml0TmV3KGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBjb25zdCBjaGFyKiBjb21tZW50KQotewotICAgIGFzc2VydChmaWxlTmFtZSAhPSBOVUxMICYmICpmaWxlTmFtZSAhPSAnXDAnKTsgIC8vIG5hbWUgcmVxdWlyZWQKLQotICAgIC8qIG1vc3QgZmllbGRzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBieSBjb25zdHJ1Y3RvciAqLwotICAgIG1DREUubVZlcnNpb25NYWRlQnkgPSBrRGVmYXVsdE1hZGVCeTsKLSAgICBtQ0RFLm1WZXJzaW9uVG9FeHRyYWN0ID0ga0RlZmF1bHRWZXJzaW9uOwotICAgIG1DREUubUNvbXByZXNzaW9uTWV0aG9kID0ga0NvbXByZXNzU3RvcmVkOwotICAgIG1DREUubUZpbGVOYW1lTGVuZ3RoID0gc3RybGVuKGZpbGVOYW1lKTsKLSAgICBpZiAoY29tbWVudCAhPSBOVUxMKQotICAgICAgICBtQ0RFLm1GaWxlQ29tbWVudExlbmd0aCA9IHN0cmxlbihjb21tZW50KTsKLSAgICBtQ0RFLm1FeHRlcm5hbEF0dHJzID0gMHg4MWI2MDAyMDsgICAvLyBtYXRjaGVzIHdoYXQgV2luWmlwIGRvZXMKLQotICAgIGlmIChtQ0RFLm1GaWxlTmFtZUxlbmd0aCA+IDApIHsKLSAgICAgICAgbUNERS5tRmlsZU5hbWUgPSBuZXcgdW5zaWduZWQgY2hhclttQ0RFLm1GaWxlTmFtZUxlbmd0aCsxXTsKLSAgICAgICAgc3RyY3B5KChjaGFyKikgbUNERS5tRmlsZU5hbWUsIGZpbGVOYW1lKTsKLSAgICB9Ci0gICAgaWYgKG1DREUubUZpbGVDb21tZW50TGVuZ3RoID4gMCkgewotICAgICAgICAvKiBUT0RPOiBzdG9wIGFzc3VtaW5nIG51bGwtdGVybWluYXRlZCBBU0NJSSBoZXJlPyAqLwotICAgICAgICBtQ0RFLm1GaWxlQ29tbWVudCA9IG5ldyB1bnNpZ25lZCBjaGFyW21DREUubUZpbGVDb21tZW50TGVuZ3RoKzFdOwotICAgICAgICBzdHJjcHkoKGNoYXIqKSBtQ0RFLm1GaWxlQ29tbWVudCwgY29tbWVudCk7Ci0gICAgfQotCi0gICAgY29weUNERXRvTEZIKCk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIGEgbmV3IGVudHJ5LCBzdGFydGluZyB3aXRoIHRoZSBaaXBFbnRyeSBmcm9tIGEgZGlmZmVyZW50Ci0gKiBhcmNoaXZlLgotICoKLSAqIEluaXRpYWxpemVzIHRoZSBDREUgYW5kIHRoZSBMRkguCi0gKi8KLXN0YXR1c190IFppcEVudHJ5Ojppbml0RnJvbUV4dGVybmFsKGNvbnN0IFppcEZpbGUqIHBaaXBGaWxlLAotICAgIGNvbnN0IFppcEVudHJ5KiBwRW50cnkpCi17Ci0gICAgLyoKLSAgICAgKiBDb3B5IGV2ZXJ5dGhpbmcgaW4gdGhlIENERSBvdmVyLCB0aGVuIGZpeCB1cCB0aGUgaGFpcnkgYml0cy4KLSAgICAgKi8KLSAgICBtZW1jcHkoJm1DREUsICZwRW50cnktPm1DREUsIHNpemVvZihtQ0RFKSk7Ci0KLSAgICBpZiAobUNERS5tRmlsZU5hbWVMZW5ndGggPiAwKSB7Ci0gICAgICAgIG1DREUubUZpbGVOYW1lID0gbmV3IHVuc2lnbmVkIGNoYXJbbUNERS5tRmlsZU5hbWVMZW5ndGgrMV07Ci0gICAgICAgIGlmIChtQ0RFLm1GaWxlTmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICAgICAgc3RyY3B5KChjaGFyKikgbUNERS5tRmlsZU5hbWUsIChjaGFyKilwRW50cnktPm1DREUubUZpbGVOYW1lKTsKLSAgICB9Ci0gICAgaWYgKG1DREUubUZpbGVDb21tZW50TGVuZ3RoID4gMCkgewotICAgICAgICBtQ0RFLm1GaWxlQ29tbWVudCA9IG5ldyB1bnNpZ25lZCBjaGFyW21DREUubUZpbGVDb21tZW50TGVuZ3RoKzFdOwotICAgICAgICBpZiAobUNERS5tRmlsZUNvbW1lbnQgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIHN0cmNweSgoY2hhciopIG1DREUubUZpbGVDb21tZW50LCAoY2hhciopcEVudHJ5LT5tQ0RFLm1GaWxlQ29tbWVudCk7Ci0gICAgfQotICAgIGlmIChtQ0RFLm1FeHRyYUZpZWxkTGVuZ3RoID4gMCkgewotICAgICAgICAvKiB3ZSBudWxsLXRlcm1pbmF0ZSB0aGlzLCB0aG91Z2ggaXQgbWF5IG5vdCBiZSBhIHN0cmluZyAqLwotICAgICAgICBtQ0RFLm1FeHRyYUZpZWxkID0gbmV3IHVuc2lnbmVkIGNoYXJbbUNERS5tRXh0cmFGaWVsZExlbmd0aCsxXTsKLSAgICAgICAgaWYgKG1DREUubUV4dHJhRmllbGQgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOT19NRU1PUlk7Ci0gICAgICAgIG1lbWNweShtQ0RFLm1FeHRyYUZpZWxkLCBwRW50cnktPm1DREUubUV4dHJhRmllbGQsCi0gICAgICAgICAgICBtQ0RFLm1FeHRyYUZpZWxkTGVuZ3RoKzEpOwotICAgIH0KLQotICAgIC8qIGNvbnN0cnVjdCB0aGUgTEZIIGZyb20gdGhlIENERSAqLwotICAgIGNvcHlDREV0b0xGSCgpOwotCi0gICAgLyoKLSAgICAgKiBUaGUgTEZIICJleHRyYSIgZmllbGQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIENERSAiZXh0cmEiLCBzbyB3ZQotICAgICAqIGhhbmRsZSBpdCBoZXJlLgotICAgICAqLwotICAgIGFzc2VydChtTEZILm1FeHRyYUZpZWxkID09IE5VTEwpOwotICAgIG1MRkgubUV4dHJhRmllbGRMZW5ndGggPSBwRW50cnktPm1MRkgubUV4dHJhRmllbGRMZW5ndGg7Ci0gICAgaWYgKG1MRkgubUV4dHJhRmllbGRMZW5ndGggPiAwKSB7Ci0gICAgICAgIG1MRkgubUV4dHJhRmllbGQgPSBuZXcgdW5zaWduZWQgY2hhclttTEZILm1FeHRyYUZpZWxkTGVuZ3RoKzFdOwotICAgICAgICBpZiAobUxGSC5tRXh0cmFGaWVsZCA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICAgICAgbWVtY3B5KG1MRkgubUV4dHJhRmllbGQsIHBFbnRyeS0+bUxGSC5tRXh0cmFGaWVsZCwKLSAgICAgICAgICAgIG1MRkgubUV4dHJhRmllbGRMZW5ndGgrMSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgotICogSW5zZXJ0IHBhZCBieXRlcyBpbiB0aGUgTEZIIGJ5IHR3ZWFraW5nIHRoZSAiZXh0cmEiIGZpZWxkLiAgVGhpcyB3aWxsCi0gKiBwb3RlbnRpYWxseSBjb25mdXNlIHNvbWV0aGluZyB0aGF0IHB1dCAiZXh0cmEiIGRhdGEgaW4gaGVyZSBlYXJsaWVyLAotICogYnV0IEkgY2FuJ3QgZmluZCBhbiBhY3R1YWwgcHJvYmxlbS4KLSAqLwotc3RhdHVzX3QgWmlwRW50cnk6OmFkZFBhZGRpbmcoaW50IHBhZGRpbmcpCi17Ci0gICAgaWYgKHBhZGRpbmcgPD0gMCkKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotCi0gICAgLy9BTE9HSSgiSEVZOiBhZGRpbmcgJWQgcGFkIGJ5dGVzIHRvIGV4aXN0aW5nICVkIGluICVzXG4iLAotICAgIC8vICAgIHBhZGRpbmcsIG1MRkgubUV4dHJhRmllbGRMZW5ndGgsIG1DREUubUZpbGVOYW1lKTsKLQotICAgIGlmIChtTEZILm1FeHRyYUZpZWxkTGVuZ3RoID4gMCkgewotICAgICAgICAvKiBleHRlbmQgZXhpc3RpbmcgZmllbGQgKi8KLSAgICAgICAgdW5zaWduZWQgY2hhciogbmV3RXh0cmE7Ci0KLSAgICAgICAgbmV3RXh0cmEgPSBuZXcgdW5zaWduZWQgY2hhclttTEZILm1FeHRyYUZpZWxkTGVuZ3RoICsgcGFkZGluZ107Ci0gICAgICAgIGlmIChuZXdFeHRyYSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5PX01FTU9SWTsKLSAgICAgICAgbWVtc2V0KG5ld0V4dHJhICsgbUxGSC5tRXh0cmFGaWVsZExlbmd0aCwgMCwgcGFkZGluZyk7Ci0gICAgICAgIG1lbWNweShuZXdFeHRyYSwgbUxGSC5tRXh0cmFGaWVsZCwgbUxGSC5tRXh0cmFGaWVsZExlbmd0aCk7Ci0KLSAgICAgICAgZGVsZXRlW10gbUxGSC5tRXh0cmFGaWVsZDsKLSAgICAgICAgbUxGSC5tRXh0cmFGaWVsZCA9IG5ld0V4dHJhOwotICAgICAgICBtTEZILm1FeHRyYUZpZWxkTGVuZ3RoICs9IHBhZGRpbmc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogY3JlYXRlIG5ldyBmaWVsZCAqLwotICAgICAgICBtTEZILm1FeHRyYUZpZWxkID0gbmV3IHVuc2lnbmVkIGNoYXJbcGFkZGluZ107Ci0gICAgICAgIG1lbXNldChtTEZILm1FeHRyYUZpZWxkLCAwLCBwYWRkaW5nKTsKLSAgICAgICAgbUxGSC5tRXh0cmFGaWVsZExlbmd0aCA9IHBhZGRpbmc7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgotICogU2V0IHRoZSBmaWVsZHMgaW4gdGhlIExGSCBlcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgaW4gdGhlIENERS4KLSAqCi0gKiBUaGlzIGRvZXMgbm90IHRvdWNoIHRoZSBMRkggImV4dHJhIiBmaWVsZC4KLSAqLwotdm9pZCBaaXBFbnRyeTo6Y29weUNERXRvTEZIKHZvaWQpCi17Ci0gICAgbUxGSC5tVmVyc2lvblRvRXh0cmFjdCAgPSBtQ0RFLm1WZXJzaW9uVG9FeHRyYWN0OwotICAgIG1MRkgubUdQQml0RmxhZyAgICAgICAgID0gbUNERS5tR1BCaXRGbGFnOwotICAgIG1MRkgubUNvbXByZXNzaW9uTWV0aG9kID0gbUNERS5tQ29tcHJlc3Npb25NZXRob2Q7Ci0gICAgbUxGSC5tTGFzdE1vZEZpbGVUaW1lICAgPSBtQ0RFLm1MYXN0TW9kRmlsZVRpbWU7Ci0gICAgbUxGSC5tTGFzdE1vZEZpbGVEYXRlICAgPSBtQ0RFLm1MYXN0TW9kRmlsZURhdGU7Ci0gICAgbUxGSC5tQ1JDMzIgICAgICAgICAgICAgPSBtQ0RFLm1DUkMzMjsKLSAgICBtTEZILm1Db21wcmVzc2VkU2l6ZSAgICA9IG1DREUubUNvbXByZXNzZWRTaXplOwotICAgIG1MRkgubVVuY29tcHJlc3NlZFNpemUgID0gbUNERS5tVW5jb21wcmVzc2VkU2l6ZTsKLSAgICBtTEZILm1GaWxlTmFtZUxlbmd0aCAgICA9IG1DREUubUZpbGVOYW1lTGVuZ3RoOwotICAgIC8vIHRoZSAiZXh0cmEgZmllbGQiIGlzIGluZGVwZW5kZW50Ci0KLSAgICBkZWxldGVbXSBtTEZILm1GaWxlTmFtZTsKLSAgICBpZiAobUxGSC5tRmlsZU5hbWVMZW5ndGggPiAwKSB7Ci0gICAgICAgIG1MRkgubUZpbGVOYW1lID0gbmV3IHVuc2lnbmVkIGNoYXJbbUxGSC5tRmlsZU5hbWVMZW5ndGgrMV07Ci0gICAgICAgIHN0cmNweSgoY2hhciopIG1MRkgubUZpbGVOYW1lLCAoY29uc3QgY2hhciopIG1DREUubUZpbGVOYW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtTEZILm1GaWxlTmFtZSA9IE5VTEw7Ci0gICAgfQotfQotCi0vKgotICogU2V0IHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlIGFmdGVyIHdlIGFkZCBpdC4KLSAqLwotdm9pZCBaaXBFbnRyeTo6c2V0RGF0YUluZm8obG9uZyB1bmNvbXBMZW4sIGxvbmcgY29tcExlbiwgdW5zaWduZWQgbG9uZyBjcmMzMiwKLSAgICBpbnQgY29tcHJlc3Npb25NZXRob2QpCi17Ci0gICAgbUNERS5tQ29tcHJlc3Npb25NZXRob2QgPSBjb21wcmVzc2lvbk1ldGhvZDsKLSAgICBtQ0RFLm1DUkMzMiA9IGNyYzMyOwotICAgIG1DREUubUNvbXByZXNzZWRTaXplID0gY29tcExlbjsKLSAgICBtQ0RFLm1VbmNvbXByZXNzZWRTaXplID0gdW5jb21wTGVuOwotICAgIG1DREUubUNvbXByZXNzaW9uTWV0aG9kID0gY29tcHJlc3Npb25NZXRob2Q7Ci0gICAgaWYgKGNvbXByZXNzaW9uTWV0aG9kID09IGtDb21wcmVzc0RlZmxhdGVkKSB7Ci0gICAgICAgIG1DREUubUdQQml0RmxhZyB8PSAweDAwMDI7ICAgICAgLy8gaW5kaWNhdGVzIG1heGltdW0gY29tcHJlc3Npb24gdXNlZAotICAgIH0KLSAgICBjb3B5Q0RFdG9MRkgoKTsKLX0KLQotLyoKLSAqIFNlZSBpZiB0aGUgZGF0YSBpbiBtQ0RFIGFuZCBtTEZIIG1hdGNoIHVwLiAgVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGZvcgotICogZGVidWdnaW5nIHRoZXNlIGNsYXNzZXMsIGJ1dCBpdCBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSBkYW1hZ2VkCi0gKiBhcmNoaXZlcy4KLSAqCi0gKiBSZXR1cm5zICJmYWxzZSIgaWYgdGhleSBkaWZmZXIuCi0gKi8KLWJvb2wgWmlwRW50cnk6OmNvbXBhcmVIZWFkZXJzKHZvaWQpIGNvbnN0Ci17Ci0gICAgaWYgKG1DREUubVZlcnNpb25Ub0V4dHJhY3QgIT0gbUxGSC5tVmVyc2lvblRvRXh0cmFjdCkgewotICAgICAgICBBTE9HVigiY21wOiBWZXJzaW9uVG9FeHRyYWN0XG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAobUNERS5tR1BCaXRGbGFnICE9IG1MRkgubUdQQml0RmxhZykgewotICAgICAgICBBTE9HVigiY21wOiBHUEJpdEZsYWdcbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChtQ0RFLm1Db21wcmVzc2lvbk1ldGhvZCAhPSBtTEZILm1Db21wcmVzc2lvbk1ldGhvZCkgewotICAgICAgICBBTE9HVigiY21wOiBDb21wcmVzc2lvbk1ldGhvZFxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG1DREUubUxhc3RNb2RGaWxlVGltZSAhPSBtTEZILm1MYXN0TW9kRmlsZVRpbWUpIHsKLSAgICAgICAgQUxPR1YoImNtcDogTGFzdE1vZEZpbGVUaW1lXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAobUNERS5tTGFzdE1vZEZpbGVEYXRlICE9IG1MRkgubUxhc3RNb2RGaWxlRGF0ZSkgewotICAgICAgICBBTE9HVigiY21wOiBMYXN0TW9kRmlsZURhdGVcbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChtQ0RFLm1DUkMzMiAhPSBtTEZILm1DUkMzMikgewotICAgICAgICBBTE9HVigiY21wOiBDUkMzMlxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG1DREUubUNvbXByZXNzZWRTaXplICE9IG1MRkgubUNvbXByZXNzZWRTaXplKSB7Ci0gICAgICAgIEFMT0dWKCJjbXA6IENvbXByZXNzZWRTaXplXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAobUNERS5tVW5jb21wcmVzc2VkU2l6ZSAhPSBtTEZILm1VbmNvbXByZXNzZWRTaXplKSB7Ci0gICAgICAgIEFMT0dWKCJjbXA6IFVuY29tcHJlc3NlZFNpemVcbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChtQ0RFLm1GaWxlTmFtZUxlbmd0aCAhPSBtTEZILm1GaWxlTmFtZUxlbmd0aCkgewotICAgICAgICBBTE9HVigiY21wOiBGaWxlTmFtZUxlbmd0aFxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0jaWYgMCAgICAgICAvLyB0aGlzIHNlZW1zIHRvIGJlIHVzZWQgZm9yIHBhZGRpbmcsIG5vdCByZWFsIGRhdGEKLSAgICBpZiAobUNERS5tRXh0cmFGaWVsZExlbmd0aCAhPSBtTEZILm1FeHRyYUZpZWxkTGVuZ3RoKSB7Ci0gICAgICAgIEFMT0dWKCJjbXA6IEV4dHJhRmllbGRMZW5ndGhcbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKG1DREUubUZpbGVOYW1lICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKHN0cmNtcCgoY2hhciopIG1DREUubUZpbGVOYW1lLCAoY2hhciopIG1MRkgubUZpbGVOYW1lKSAhPSAwKSB7Ci0gICAgICAgICAgICBBTE9HVigiY21wOiBGaWxlTmFtZVxuIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi0vKgotICogQ29udmVydCB0aGUgRE9TIGRhdGUvdGltZSBzdGFtcCBpbnRvIGEgVU5JWCB0aW1lIHN0YW1wLgotICovCi10aW1lX3QgWmlwRW50cnk6OmdldE1vZFdoZW4odm9pZCkgY29uc3QKLXsKLSAgICBzdHJ1Y3QgdG0gcGFydHM7Ci0KLSAgICBwYXJ0cy50bV9zZWMgPSAobUNERS5tTGFzdE1vZEZpbGVUaW1lICYgMHgwMDFmKSA8PCAxOwotICAgIHBhcnRzLnRtX21pbiA9IChtQ0RFLm1MYXN0TW9kRmlsZVRpbWUgJiAweDA3ZTApID4+IDU7Ci0gICAgcGFydHMudG1faG91ciA9IChtQ0RFLm1MYXN0TW9kRmlsZVRpbWUgJiAweGY4MDApID4+IDExOwotICAgIHBhcnRzLnRtX21kYXkgPSAobUNERS5tTGFzdE1vZEZpbGVEYXRlICYgMHgwMDFmKTsKLSAgICBwYXJ0cy50bV9tb24gPSAoKG1DREUubUxhc3RNb2RGaWxlRGF0ZSAmIDB4MDFlMCkgPj4gNSkgLTE7Ci0gICAgcGFydHMudG1feWVhciA9ICgobUNERS5tTGFzdE1vZEZpbGVEYXRlICYgMHhmZTAwKSA+PiA5KSArIDgwOwotICAgIHBhcnRzLnRtX3dkYXkgPSBwYXJ0cy50bV95ZGF5ID0gMDsKLSAgICBwYXJ0cy50bV9pc2RzdCA9IC0xOyAgICAgICAgLy8gRFNUIGluZm8gIm5vdCBhdmFpbGFibGUiCi0KLSAgICByZXR1cm4gbWt0aW1lKCZwYXJ0cyk7Ci19Ci0KLS8qCi0gKiBTZXQgdGhlIENERS9MRkggdGltZXN0YW1wIGZyb20gVU5JWCB0aW1lLgotICovCi12b2lkIFppcEVudHJ5OjpzZXRNb2RXaGVuKHRpbWVfdCB3aGVuKQotewotI2lmZGVmIEhBVkVfTE9DQUxUSU1FX1IKLSAgICBzdHJ1Y3QgdG0gdG1SZXN1bHQ7Ci0jZW5kaWYKLSAgICB0aW1lX3QgZXZlbjsKLSAgICB1bnNpZ25lZCBzaG9ydCB6ZGF0ZSwgenRpbWU7Ci0KLSAgICBzdHJ1Y3QgdG0qIHB0bTsKLQotICAgIC8qIHJvdW5kIHVwIHRvIGFuIGV2ZW4gbnVtYmVyIG9mIHNlY29uZHMgKi8KLSAgICBldmVuID0gKHRpbWVfdCkoKCh1bnNpZ25lZCBsb25nKSh3aGVuKSArIDEpICYgKH4xKSk7Ci0KLSAgICAvKiBleHBhbmQgKi8KLSNpZmRlZiBIQVZFX0xPQ0FMVElNRV9SCi0gICAgcHRtID0gbG9jYWx0aW1lX3IoJmV2ZW4sICZ0bVJlc3VsdCk7Ci0jZWxzZQotICAgIHB0bSA9IGxvY2FsdGltZSgmZXZlbik7Ci0jZW5kaWYKLQotICAgIGludCB5ZWFyOwotICAgIHllYXIgPSBwdG0tPnRtX3llYXI7Ci0gICAgaWYgKHllYXIgPCA4MCkKLSAgICAgICAgeWVhciA9IDgwOwotCi0gICAgemRhdGUgPSAoeWVhciAtIDgwKSA8PCA5IHwgKHB0bS0+dG1fbW9uKzEpIDw8IDUgfCBwdG0tPnRtX21kYXk7Ci0gICAgenRpbWUgPSBwdG0tPnRtX2hvdXIgPDwgMTEgfCBwdG0tPnRtX21pbiA8PCA1IHwgcHRtLT50bV9zZWMgPj4gMTsKLQotICAgIG1DREUubUxhc3RNb2RGaWxlVGltZSA9IG1MRkgubUxhc3RNb2RGaWxlVGltZSA9IHp0aW1lOwotICAgIG1DREUubUxhc3RNb2RGaWxlRGF0ZSA9IG1MRkgubUxhc3RNb2RGaWxlRGF0ZSA9IHpkYXRlOwotfQotCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgWmlwRW50cnk6OkxvY2FsRmlsZUhlYWRlcgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotLyoKLSAqIFJlYWQgYSBsb2NhbCBmaWxlIGhlYWRlci4KLSAqCi0gKiBPbiBlbnRyeSwgImZwIiBwb2ludHMgdG8gdGhlIHNpZ25hdHVyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlci4KLSAqIE9uIGV4aXQsICJmcCIgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiBkYXRhLgotICovCi1zdGF0dXNfdCBaaXBFbnRyeTo6TG9jYWxGaWxlSGVhZGVyOjpyZWFkKEZJTEUqIGZwKQotewotICAgIHN0YXR1c190IHJlc3VsdCA9IE5PX0VSUk9SOwotICAgIHVuc2lnbmVkIGNoYXIgYnVmW2tMRkhMZW5dOwotCi0gICAgYXNzZXJ0KG1GaWxlTmFtZSA9PSBOVUxMKTsKLSAgICBhc3NlcnQobUV4dHJhRmllbGQgPT0gTlVMTCk7Ci0KLSAgICBpZiAoZnJlYWQoYnVmLCAxLCBrTEZITGVuLCBmcCkgIT0ga0xGSExlbikgewotICAgICAgICByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgaWYgKFppcEVudHJ5OjpnZXRMb25nTEUoJmJ1ZlsweDAwXSkgIT0ga1NpZ25hdHVyZSkgewotICAgICAgICBBTE9HRCgid2hvb3BzOiBkaWRuJ3QgZmluZCBleHBlY3RlZCBzaWduYXR1cmVcbiIpOwotICAgICAgICByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgbVZlcnNpb25Ub0V4dHJhY3QgPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MDRdKTsKLSAgICBtR1BCaXRGbGFnID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDA2XSk7Ci0gICAgbUNvbXByZXNzaW9uTWV0aG9kID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDA4XSk7Ci0gICAgbUxhc3RNb2RGaWxlVGltZSA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgwYV0pOwotICAgIG1MYXN0TW9kRmlsZURhdGUgPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MGNdKTsKLSAgICBtQ1JDMzIgPSBaaXBFbnRyeTo6Z2V0TG9uZ0xFKCZidWZbMHgwZV0pOwotICAgIG1Db21wcmVzc2VkU2l6ZSA9IFppcEVudHJ5OjpnZXRMb25nTEUoJmJ1ZlsweDEyXSk7Ci0gICAgbVVuY29tcHJlc3NlZFNpemUgPSBaaXBFbnRyeTo6Z2V0TG9uZ0xFKCZidWZbMHgxNl0pOwotICAgIG1GaWxlTmFtZUxlbmd0aCA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgxYV0pOwotICAgIG1FeHRyYUZpZWxkTGVuZ3RoID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDFjXSk7Ci0KLSAgICAvLyBUT0RPOiB2YWxpZGF0ZSBzaXplcwotCi0gICAgLyogZ3JhYiBmaWxlbmFtZSAqLwotICAgIGlmIChtRmlsZU5hbWVMZW5ndGggIT0gMCkgewotICAgICAgICBtRmlsZU5hbWUgPSBuZXcgdW5zaWduZWQgY2hhclttRmlsZU5hbWVMZW5ndGgrMV07Ci0gICAgICAgIGlmIChtRmlsZU5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgcmVzdWx0ID0gTk9fTUVNT1JZOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmcmVhZChtRmlsZU5hbWUsIDEsIG1GaWxlTmFtZUxlbmd0aCwgZnApICE9IG1GaWxlTmFtZUxlbmd0aCkgewotICAgICAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBtRmlsZU5hbWVbbUZpbGVOYW1lTGVuZ3RoXSA9ICdcMCc7Ci0gICAgfQotCi0gICAgLyogZ3JhYiBleHRyYSBmaWVsZCAqLwotICAgIGlmIChtRXh0cmFGaWVsZExlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG1FeHRyYUZpZWxkID0gbmV3IHVuc2lnbmVkIGNoYXJbbUV4dHJhRmllbGRMZW5ndGgrMV07Ci0gICAgICAgIGlmIChtRXh0cmFGaWVsZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBOT19NRU1PUlk7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZyZWFkKG1FeHRyYUZpZWxkLCAxLCBtRXh0cmFGaWVsZExlbmd0aCwgZnApICE9IG1FeHRyYUZpZWxkTGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIG1FeHRyYUZpZWxkW21FeHRyYUZpZWxkTGVuZ3RoXSA9ICdcMCc7Ci0gICAgfQotCi1iYWlsOgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBXcml0ZSBhIGxvY2FsIGZpbGUgaGVhZGVyLgotICovCi1zdGF0dXNfdCBaaXBFbnRyeTo6TG9jYWxGaWxlSGVhZGVyOjp3cml0ZShGSUxFKiBmcCkKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZltrTEZITGVuXTsKLQotICAgIFppcEVudHJ5OjpwdXRMb25nTEUoJmJ1ZlsweDAwXSwga1NpZ25hdHVyZSk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDA0XSwgbVZlcnNpb25Ub0V4dHJhY3QpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgwNl0sIG1HUEJpdEZsYWcpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgwOF0sIG1Db21wcmVzc2lvbk1ldGhvZCk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDBhXSwgbUxhc3RNb2RGaWxlVGltZSk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDBjXSwgbUxhc3RNb2RGaWxlRGF0ZSk7Ci0gICAgWmlwRW50cnk6OnB1dExvbmdMRSgmYnVmWzB4MGVdLCBtQ1JDMzIpOwotICAgIFppcEVudHJ5OjpwdXRMb25nTEUoJmJ1ZlsweDEyXSwgbUNvbXByZXNzZWRTaXplKTsKLSAgICBaaXBFbnRyeTo6cHV0TG9uZ0xFKCZidWZbMHgxNl0sIG1VbmNvbXByZXNzZWRTaXplKTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MWFdLCBtRmlsZU5hbWVMZW5ndGgpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgxY10sIG1FeHRyYUZpZWxkTGVuZ3RoKTsKLQotICAgIGlmIChmd3JpdGUoYnVmLCAxLCBrTEZITGVuLCBmcCkgIT0ga0xGSExlbikKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0KLSAgICAvKiB3cml0ZSBmaWxlbmFtZSAqLwotICAgIGlmIChtRmlsZU5hbWVMZW5ndGggIT0gMCkgewotICAgICAgICBpZiAoZndyaXRlKG1GaWxlTmFtZSwgMSwgbUZpbGVOYW1lTGVuZ3RoLCBmcCkgIT0gbUZpbGVOYW1lTGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgfQotCi0gICAgLyogd3JpdGUgImV4dHJhIGZpZWxkIiAqLwotICAgIGlmIChtRXh0cmFGaWVsZExlbmd0aCAhPSAwKSB7Ci0gICAgICAgIGlmIChmd3JpdGUobUV4dHJhRmllbGQsIDEsIG1FeHRyYUZpZWxkTGVuZ3RoLCBmcCkgIT0gbUV4dHJhRmllbGRMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLQotLyoKLSAqIER1bXAgdGhlIGNvbnRlbnRzIG9mIGEgTG9jYWxGaWxlSGVhZGVyIG9iamVjdC4KLSAqLwotdm9pZCBaaXBFbnRyeTo6TG9jYWxGaWxlSGVhZGVyOjpkdW1wKHZvaWQpIGNvbnN0Ci17Ci0gICAgQUxPR0QoIiBMb2NhbEZpbGVIZWFkZXIgY29udGVudHM6XG4iKTsKLSAgICBBTE9HRCgiICB2ZXJzVG9FeHQ9JXUgZ3BCaXRzPTB4JTA0eCBjb21wcmVzc2lvbj0ldVxuIiwKLSAgICAgICAgbVZlcnNpb25Ub0V4dHJhY3QsIG1HUEJpdEZsYWcsIG1Db21wcmVzc2lvbk1ldGhvZCk7Ci0gICAgQUxPR0QoIiAgbW9kVGltZT0weCUwNHggbW9kRGF0ZT0weCUwNHggY3JjMzI9MHglMDhseFxuIiwKLSAgICAgICAgbUxhc3RNb2RGaWxlVGltZSwgbUxhc3RNb2RGaWxlRGF0ZSwgbUNSQzMyKTsKLSAgICBBTE9HRCgiICBjb21wcmVzc2VkU2l6ZT0lbHUgdW5jb21wcmVzc2VkU2l6ZT0lbHVcbiIsCi0gICAgICAgIG1Db21wcmVzc2VkU2l6ZSwgbVVuY29tcHJlc3NlZFNpemUpOwotICAgIEFMT0dEKCIgIGZpbGVuYW1lTGVuPSV1IGV4dHJhTGVuPSV1XG4iLAotICAgICAgICBtRmlsZU5hbWVMZW5ndGgsIG1FeHRyYUZpZWxkTGVuZ3RoKTsKLSAgICBpZiAobUZpbGVOYW1lICE9IE5VTEwpCi0gICAgICAgIEFMT0dEKCIgIGZpbGVuYW1lOiAnJXMnXG4iLCBtRmlsZU5hbWUpOwotfQotCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgWmlwRW50cnk6OkNlbnRyYWxEaXJFbnRyeQotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotLyoKLSAqIFJlYWQgdGhlIGNlbnRyYWwgZGlyIGVudHJ5IHRoYXQgYXBwZWFycyBuZXh0IGluIHRoZSBmaWxlLgotICoKLSAqIE9uIGVudHJ5LCAiZnAiIHNob3VsZCBiZSBwb3NpdGlvbmVkIG9uIHRoZSBzaWduYXR1cmUgYnl0ZXMgZm9yIHRoZQotICogZW50cnkuICBPbiBleGl0LCAiZnAiIHdpbGwgcG9pbnQgYXQgdGhlIHNpZ25hdHVyZSB3b3JkIGZvciB0aGUgbmV4dAotICogZW50cnkgb3IgZm9yIHRoZSBFT0NELgotICovCi1zdGF0dXNfdCBaaXBFbnRyeTo6Q2VudHJhbERpckVudHJ5OjpyZWFkKEZJTEUqIGZwKQotewotICAgIHN0YXR1c190IHJlc3VsdCA9IE5PX0VSUk9SOwotICAgIHVuc2lnbmVkIGNoYXIgYnVmW2tDREVMZW5dOwotCi0gICAgLyogbm8gcmUtdXNlICovCi0gICAgYXNzZXJ0KG1GaWxlTmFtZSA9PSBOVUxMKTsKLSAgICBhc3NlcnQobUV4dHJhRmllbGQgPT0gTlVMTCk7Ci0gICAgYXNzZXJ0KG1GaWxlQ29tbWVudCA9PSBOVUxMKTsKLQotICAgIGlmIChmcmVhZChidWYsIDEsIGtDREVMZW4sIGZwKSAhPSBrQ0RFTGVuKSB7Ci0gICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBpZiAoWmlwRW50cnk6OmdldExvbmdMRSgmYnVmWzB4MDBdKSAhPSBrU2lnbmF0dXJlKSB7Ci0gICAgICAgIEFMT0dEKCJXaG9vcHM6IGRpZG4ndCBmaW5kIGV4cGVjdGVkIHNpZ25hdHVyZVxuIik7Ci0gICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBtVmVyc2lvbk1hZGVCeSA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgwNF0pOwotICAgIG1WZXJzaW9uVG9FeHRyYWN0ID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDA2XSk7Ci0gICAgbUdQQml0RmxhZyA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgwOF0pOwotICAgIG1Db21wcmVzc2lvbk1ldGhvZCA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgwYV0pOwotICAgIG1MYXN0TW9kRmlsZVRpbWUgPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MGNdKTsKLSAgICBtTGFzdE1vZEZpbGVEYXRlID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDBlXSk7Ci0gICAgbUNSQzMyID0gWmlwRW50cnk6OmdldExvbmdMRSgmYnVmWzB4MTBdKTsKLSAgICBtQ29tcHJlc3NlZFNpemUgPSBaaXBFbnRyeTo6Z2V0TG9uZ0xFKCZidWZbMHgxNF0pOwotICAgIG1VbmNvbXByZXNzZWRTaXplID0gWmlwRW50cnk6OmdldExvbmdMRSgmYnVmWzB4MThdKTsKLSAgICBtRmlsZU5hbWVMZW5ndGggPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MWNdKTsKLSAgICBtRXh0cmFGaWVsZExlbmd0aCA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgxZV0pOwotICAgIG1GaWxlQ29tbWVudExlbmd0aCA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgyMF0pOwotICAgIG1EaXNrTnVtYmVyU3RhcnQgPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MjJdKTsKLSAgICBtSW50ZXJuYWxBdHRycyA9IFppcEVudHJ5OjpnZXRTaG9ydExFKCZidWZbMHgyNF0pOwotICAgIG1FeHRlcm5hbEF0dHJzID0gWmlwRW50cnk6OmdldExvbmdMRSgmYnVmWzB4MjZdKTsKLSAgICBtTG9jYWxIZWFkZXJSZWxPZmZzZXQgPSBaaXBFbnRyeTo6Z2V0TG9uZ0xFKCZidWZbMHgyYV0pOwotCi0gICAgLy8gVE9ETzogdmFsaWRhdGUgc2l6ZXMgYW5kIG9mZnNldHMKLQotICAgIC8qIGdyYWIgZmlsZW5hbWUgKi8KLSAgICBpZiAobUZpbGVOYW1lTGVuZ3RoICE9IDApIHsKLSAgICAgICAgbUZpbGVOYW1lID0gbmV3IHVuc2lnbmVkIGNoYXJbbUZpbGVOYW1lTGVuZ3RoKzFdOwotICAgICAgICBpZiAobUZpbGVOYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IE5PX01FTU9SWTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoZnJlYWQobUZpbGVOYW1lLCAxLCBtRmlsZU5hbWVMZW5ndGgsIGZwKSAhPSBtRmlsZU5hbWVMZW5ndGgpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgbUZpbGVOYW1lW21GaWxlTmFtZUxlbmd0aF0gPSAnXDAnOwotICAgIH0KLQotICAgIC8qIHJlYWQgImV4dHJhIGZpZWxkIiAqLwotICAgIGlmIChtRXh0cmFGaWVsZExlbmd0aCAhPSAwKSB7Ci0gICAgICAgIG1FeHRyYUZpZWxkID0gbmV3IHVuc2lnbmVkIGNoYXJbbUV4dHJhRmllbGRMZW5ndGgrMV07Ci0gICAgICAgIGlmIChtRXh0cmFGaWVsZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBOT19NRU1PUlk7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZyZWFkKG1FeHRyYUZpZWxkLCAxLCBtRXh0cmFGaWVsZExlbmd0aCwgZnApICE9IG1FeHRyYUZpZWxkTGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIG1FeHRyYUZpZWxkW21FeHRyYUZpZWxkTGVuZ3RoXSA9ICdcMCc7Ci0gICAgfQotCi0KLSAgICAvKiBncmFiIGNvbW1lbnQsIGlmIGFueSAqLwotICAgIGlmIChtRmlsZUNvbW1lbnRMZW5ndGggIT0gMCkgewotICAgICAgICBtRmlsZUNvbW1lbnQgPSBuZXcgdW5zaWduZWQgY2hhclttRmlsZUNvbW1lbnRMZW5ndGgrMV07Ci0gICAgICAgIGlmIChtRmlsZUNvbW1lbnQgPT0gTlVMTCkgewotICAgICAgICAgICAgcmVzdWx0ID0gTk9fTUVNT1JZOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmcmVhZChtRmlsZUNvbW1lbnQsIDEsIG1GaWxlQ29tbWVudExlbmd0aCwgZnApICE9IG1GaWxlQ29tbWVudExlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBtRmlsZUNvbW1lbnRbbUZpbGVDb21tZW50TGVuZ3RoXSA9ICdcMCc7Ci0gICAgfQotCi1iYWlsOgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBXcml0ZSBhIGNlbnRyYWwgZGlyIGVudHJ5LgotICovCi1zdGF0dXNfdCBaaXBFbnRyeTo6Q2VudHJhbERpckVudHJ5Ojp3cml0ZShGSUxFKiBmcCkKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZltrQ0RFTGVuXTsKLQotICAgIFppcEVudHJ5OjpwdXRMb25nTEUoJmJ1ZlsweDAwXSwga1NpZ25hdHVyZSk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDA0XSwgbVZlcnNpb25NYWRlQnkpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgwNl0sIG1WZXJzaW9uVG9FeHRyYWN0KTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MDhdLCBtR1BCaXRGbGFnKTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MGFdLCBtQ29tcHJlc3Npb25NZXRob2QpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgwY10sIG1MYXN0TW9kRmlsZVRpbWUpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgwZV0sIG1MYXN0TW9kRmlsZURhdGUpOwotICAgIFppcEVudHJ5OjpwdXRMb25nTEUoJmJ1ZlsweDEwXSwgbUNSQzMyKTsKLSAgICBaaXBFbnRyeTo6cHV0TG9uZ0xFKCZidWZbMHgxNF0sIG1Db21wcmVzc2VkU2l6ZSk7Ci0gICAgWmlwRW50cnk6OnB1dExvbmdMRSgmYnVmWzB4MThdLCBtVW5jb21wcmVzc2VkU2l6ZSk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDFjXSwgbUZpbGVOYW1lTGVuZ3RoKTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MWVdLCBtRXh0cmFGaWVsZExlbmd0aCk7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDIwXSwgbUZpbGVDb21tZW50TGVuZ3RoKTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MjJdLCBtRGlza051bWJlclN0YXJ0KTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MjRdLCBtSW50ZXJuYWxBdHRycyk7Ci0gICAgWmlwRW50cnk6OnB1dExvbmdMRSgmYnVmWzB4MjZdLCBtRXh0ZXJuYWxBdHRycyk7Ci0gICAgWmlwRW50cnk6OnB1dExvbmdMRSgmYnVmWzB4MmFdLCBtTG9jYWxIZWFkZXJSZWxPZmZzZXQpOwotCi0gICAgaWYgKGZ3cml0ZShidWYsIDEsIGtDREVMZW4sIGZwKSAhPSBrQ0RFTGVuKQotICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLQotICAgIC8qIHdyaXRlIGZpbGVuYW1lICovCi0gICAgaWYgKG1GaWxlTmFtZUxlbmd0aCAhPSAwKSB7Ci0gICAgICAgIGlmIChmd3JpdGUobUZpbGVOYW1lLCAxLCBtRmlsZU5hbWVMZW5ndGgsIGZwKSAhPSBtRmlsZU5hbWVMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICAvKiB3cml0ZSAiZXh0cmEgZmllbGQiICovCi0gICAgaWYgKG1FeHRyYUZpZWxkTGVuZ3RoICE9IDApIHsKLSAgICAgICAgaWYgKGZ3cml0ZShtRXh0cmFGaWVsZCwgMSwgbUV4dHJhRmllbGRMZW5ndGgsIGZwKSAhPSBtRXh0cmFGaWVsZExlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIC8qIHdyaXRlIGNvbW1lbnQgKi8KLSAgICBpZiAobUZpbGVDb21tZW50TGVuZ3RoICE9IDApIHsKLSAgICAgICAgaWYgKGZ3cml0ZShtRmlsZUNvbW1lbnQsIDEsIG1GaWxlQ29tbWVudExlbmd0aCwgZnApICE9IG1GaWxlQ29tbWVudExlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotLyoKLSAqIER1bXAgdGhlIGNvbnRlbnRzIG9mIGEgQ2VudHJhbERpckVudHJ5IG9iamVjdC4KLSAqLwotdm9pZCBaaXBFbnRyeTo6Q2VudHJhbERpckVudHJ5OjpkdW1wKHZvaWQpIGNvbnN0Ci17Ci0gICAgQUxPR0QoIiBDZW50cmFsRGlyRW50cnkgY29udGVudHM6XG4iKTsKLSAgICBBTE9HRCgiICB2ZXJzTWFkZUJ5PSV1IHZlcnNUb0V4dD0ldSBncEJpdHM9MHglMDR4IGNvbXByZXNzaW9uPSV1XG4iLAotICAgICAgICBtVmVyc2lvbk1hZGVCeSwgbVZlcnNpb25Ub0V4dHJhY3QsIG1HUEJpdEZsYWcsIG1Db21wcmVzc2lvbk1ldGhvZCk7Ci0gICAgQUxPR0QoIiAgbW9kVGltZT0weCUwNHggbW9kRGF0ZT0weCUwNHggY3JjMzI9MHglMDhseFxuIiwKLSAgICAgICAgbUxhc3RNb2RGaWxlVGltZSwgbUxhc3RNb2RGaWxlRGF0ZSwgbUNSQzMyKTsKLSAgICBBTE9HRCgiICBjb21wcmVzc2VkU2l6ZT0lbHUgdW5jb21wcmVzc2VkU2l6ZT0lbHVcbiIsCi0gICAgICAgIG1Db21wcmVzc2VkU2l6ZSwgbVVuY29tcHJlc3NlZFNpemUpOwotICAgIEFMT0dEKCIgIGZpbGVuYW1lTGVuPSV1IGV4dHJhTGVuPSV1IGNvbW1lbnRMZW49JXVcbiIsCi0gICAgICAgIG1GaWxlTmFtZUxlbmd0aCwgbUV4dHJhRmllbGRMZW5ndGgsIG1GaWxlQ29tbWVudExlbmd0aCk7Ci0gICAgQUxPR0QoIiAgZGlza051bVN0YXJ0PSV1IGludEF0dHI9MHglMDR4IGV4dEF0dHI9MHglMDhseCByZWxPZmZzZXQ9JWx1XG4iLAotICAgICAgICBtRGlza051bWJlclN0YXJ0LCBtSW50ZXJuYWxBdHRycywgbUV4dGVybmFsQXR0cnMsCi0gICAgICAgIG1Mb2NhbEhlYWRlclJlbE9mZnNldCk7Ci0KLSAgICBpZiAobUZpbGVOYW1lICE9IE5VTEwpCi0gICAgICAgIEFMT0dEKCIgIGZpbGVuYW1lOiAnJXMnXG4iLCBtRmlsZU5hbWUpOwotICAgIGlmIChtRmlsZUNvbW1lbnQgIT0gTlVMTCkKLSAgICAgICAgQUxPR0QoIiAgY29tbWVudDogJyVzJ1xuIiwgbUZpbGVDb21tZW50KTsKLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9aaXBFbnRyeS5oIGIvdG9vbHMvYWFwdC9aaXBFbnRyeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmYzMjI3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvWmlwRW50cnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8KLS8vIFppcCBhcmNoaXZlIGVudHJpZXMuCi0vLwotLy8gVGhlIFppcEVudHJ5IGNsYXNzIGlzIHRpZ2h0bHkgbWVzaGVkIHdpdGggdGhlIFppcEZpbGUgY2xhc3MuCi0vLwotI2lmbmRlZiBfX0xJQlNfWklQRU5UUllfSAotI2RlZmluZSBfX0xJQlNfWklQRU5UUllfSAotCi0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWNsYXNzIFppcEZpbGU7Ci0KLS8qCi0gKiBaaXBFbnRyeSBvYmplY3RzIHJlcHJlc2VudCBhIHNpbmdsZSBlbnRyeSBpbiBhIFppcCBhcmNoaXZlLgotICoKLSAqIFlvdSBjYW4gdXNlIG9uZSBvZiB0aGVzZSB0byBnZXQgb3Igc2V0IGluZm9ybWF0aW9uIGFib3V0IGFuIGVudHJ5LCBidXQKLSAqIHRoZXJlIGFyZSBubyBmdW5jdGlvbnMgaGVyZSBmb3IgYWNjZXNzaW5nIHRoZSBkYXRhIGl0c2VsZi4gIChXZSBjb3VsZAotICogdHVjayBhIHBvaW50ZXIgdG8gdGhlIFppcEZpbGUgaW4gaGVyZSBmb3IgY29udmVuaWVuY2UsIGJ1dCB0aGF0IHJhaXNlcwotICogdGhlIGxpa2VsaWhvb2Qgb2YgdXNpbmcgWmlwRW50cnkgb2JqZWN0cyBhZnRlciBkaXNjYXJkaW5nIHRoZSBaaXBGaWxlLikKLSAqCi0gKiBGaWxlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiB0d28gcGxhY2VzOiBuZXh0IHRvIHRoZSBmaWxlIGRhdGEgKHRoZSBMb2NhbAotICogRmlsZSBIZWFkZXIsIGFuZCBwb3NzaWJseSBhIERhdGEgRGVzY3JpcHRvciksIGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCi0gKiAodGhlIENlbnRyYWwgRGlyZWN0b3J5IEVudHJ5KS4gIFRoZSB0d28gbXVzdCBiZSBrZXB0IGluIHN5bmMuCi0gKi8KLWNsYXNzIFppcEVudHJ5IHsKLXB1YmxpYzoKLSAgICBmcmllbmQgY2xhc3MgWmlwRmlsZTsKLQotICAgIFppcEVudHJ5KHZvaWQpCi0gICAgICAgIDogbURlbGV0ZWQoZmFsc2UpLCBtTWFya2VkKGZhbHNlKQotICAgICAgICB7fQotICAgIH5aaXBFbnRyeSh2b2lkKSB7fQotCi0gICAgLyoKLSAgICAgKiBSZXR1cm5zICJ0cnVlIiBpZiB0aGUgZGF0YSBpcyBjb21wcmVzc2VkLgotICAgICAqLwotICAgIGJvb2wgaXNDb21wcmVzc2VkKHZvaWQpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1DREUubUNvbXByZXNzaW9uTWV0aG9kICE9IGtDb21wcmVzc1N0b3JlZDsKLSAgICB9Ci0gICAgaW50IGdldENvbXByZXNzaW9uTWV0aG9kKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1DREUubUNvbXByZXNzaW9uTWV0aG9kOyB9Ci0KLSAgICAvKgotICAgICAqIFJldHVybiB0aGUgdW5jb21wcmVzc2VkIGxlbmd0aC4KLSAgICAgKi8KLSAgICBvZmZfdCBnZXRVbmNvbXByZXNzZWRMZW4odm9pZCkgY29uc3QgeyByZXR1cm4gbUNERS5tVW5jb21wcmVzc2VkU2l6ZTsgfQotCi0gICAgLyoKLSAgICAgKiBSZXR1cm4gdGhlIGNvbXByZXNzZWQgbGVuZ3RoLiAgRm9yIHVuY29tcHJlc3NlZCBkYXRhLCB0aGlzIHJldHVybnMKLSAgICAgKiB0aGUgc2FtZSB0aGluZyBhcyBnZXRVbmNvbXByZXNlc2RMZW4oKS4KLSAgICAgKi8KLSAgICBvZmZfdCBnZXRDb21wcmVzc2VkTGVuKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1DREUubUNvbXByZXNzZWRTaXplOyB9Ci0KLSAgICAvKgotICAgICAqIFJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBsb2NhbCBmaWxlIGhlYWRlci4KLSAgICAgKi8KLSAgICBvZmZfdCBnZXRMRkhPZmZzZXQodm9pZCkgY29uc3QgeyByZXR1cm4gbUNERS5tTG9jYWxIZWFkZXJSZWxPZmZzZXQ7IH0KLQotICAgIC8qCi0gICAgICogUmV0dXJuIHRoZSBhYnNvbHV0ZSBmaWxlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdGhlIGNvbXByZXNzZWQgb3IKLSAgICAgKiB1bmNvbXByZXNzZWQgZGF0YS4KLSAgICAgKi8KLSAgICBvZmZfdCBnZXRGaWxlT2Zmc2V0KHZvaWQpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1DREUubUxvY2FsSGVhZGVyUmVsT2Zmc2V0ICsKLSAgICAgICAgICAgICAgICBMb2NhbEZpbGVIZWFkZXI6OmtMRkhMZW4gKwotICAgICAgICAgICAgICAgIG1MRkgubUZpbGVOYW1lTGVuZ3RoICsKLSAgICAgICAgICAgICAgICBtTEZILm1FeHRyYUZpZWxkTGVuZ3RoOwotICAgIH0KLQotICAgIC8qCi0gICAgICogUmV0dXJuIHRoZSBkYXRhIENSQy4KLSAgICAgKi8KLSAgICB1bnNpZ25lZCBsb25nIGdldENSQzMyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1DREUubUNSQzMyOyB9Ci0KLSAgICAvKgotICAgICAqIFJldHVybiBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGluIFVOSVggc2Vjb25kcy1zaW5jZS1lcG9jaC4KLSAgICAgKi8KLSAgICB0aW1lX3QgZ2V0TW9kV2hlbih2b2lkKSBjb25zdDsKLQotICAgIC8qCi0gICAgICogUmV0dXJuIHRoZSBhcmNoaXZlZCBmaWxlIG5hbWUuCi0gICAgICovCi0gICAgY29uc3QgY2hhciogZ2V0RmlsZU5hbWUodm9pZCkgY29uc3QgeyByZXR1cm4gKGNvbnN0IGNoYXIqKSBtQ0RFLm1GaWxlTmFtZTsgfQotCi0gICAgLyoKLSAgICAgKiBBcHBsaWNhdGlvbi1kZWZpbmVkICJtYXJrIi4gIENhbiBiZSB1c2VmdWwgd2hlbiBzeW5jaHJvbml6aW5nIHRoZQotICAgICAqIGNvbnRlbnRzIG9mIGFuIGFyY2hpdmUgd2l0aCBjb250ZW50cyBvbiBkaXNrLgotICAgICAqLwotICAgIGJvb2wgZ2V0TWFya2VkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1NYXJrZWQ7IH0KLSAgICB2b2lkIHNldE1hcmtlZChib29sIHZhbCkgeyBtTWFya2VkID0gdmFsOyB9Ci0KLSAgICAvKgotICAgICAqIFNvbWUgYmFzaWMgZnVuY3Rpb25zIGZvciByYXcgZGF0YSBtYW5pcHVsYXRpb24uICAiTEUiIG1lYW5zCi0gICAgICogTGl0dGxlIEVuZGlhbi4KLSAgICAgKi8KLSAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGdldFNob3J0TEUoY29uc3QgdW5zaWduZWQgY2hhciogYnVmKSB7Ci0gICAgICAgIHJldHVybiBidWZbMF0gfCAoYnVmWzFdIDw8IDgpOwotICAgIH0KLSAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0TG9uZ0xFKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZikgewotICAgICAgICByZXR1cm4gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KSB8IChidWZbMl0gPDwgMTYpIHwgKGJ1ZlszXSA8PCAyNCk7Ci0gICAgfQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRTaG9ydExFKHVuc2lnbmVkIGNoYXIqIGJ1Ziwgc2hvcnQgdmFsKSB7Ci0gICAgICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSB2YWw7Ci0gICAgICAgIGJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAodmFsID4+IDgpOwotICAgIH0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgcHV0TG9uZ0xFKHVuc2lnbmVkIGNoYXIqIGJ1ZiwgbG9uZyB2YWwpIHsKLSAgICAgICAgYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpIHZhbDsKLSAgICAgICAgYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICh2YWwgPj4gOCk7Ci0gICAgICAgIGJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAodmFsID4+IDE2KTsKLSAgICAgICAgYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICh2YWwgPj4gMjQpOwotICAgIH0KLQotICAgIC8qIGRlZmluZWQgZm9yIFppcCBhcmNoaXZlcyAqLwotICAgIGVudW0gewotICAgICAgICBrQ29tcHJlc3NTdG9yZWQgICAgID0gMCwgICAgICAgIC8vIG5vIGNvbXByZXNzaW9uCi0gICAgICAgIC8vIHNocnVuayAgICAgICAgICAgPSAxLAotICAgICAgICAvLyByZWR1Y2VkIDEgICAgICAgID0gMiwKLSAgICAgICAgLy8gcmVkdWNlZCAyICAgICAgICA9IDMsCi0gICAgICAgIC8vIHJlZHVjZWQgMyAgICAgICAgPSA0LAotICAgICAgICAvLyByZWR1Y2VkIDQgICAgICAgID0gNSwKLSAgICAgICAgLy8gaW1wbG9kZWQgICAgICAgICA9IDYsCi0gICAgICAgIC8vIHRva2VuaXplZCAgICAgICAgPSA3LAotICAgICAgICBrQ29tcHJlc3NEZWZsYXRlZCAgID0gOCwgICAgICAgIC8vIHN0YW5kYXJkIGRlZmxhdGUKLSAgICAgICAgLy8gRGVmbGF0ZTY0ICAgICAgICA9IDksCi0gICAgICAgIC8vIGxpYiBpbXBsb2RlZCAgICAgPSAxMCwKLSAgICAgICAgLy8gcmVzZXJ2ZWQgICAgICAgICA9IDExLAotICAgICAgICAvLyBiemlwMiAgICAgICAgICAgID0gMTIsCi0gICAgfTsKLQotICAgIC8qCi0gICAgICogRGVsZXRpb24gZmxhZy4gIElmIHNldCwgdGhlIGVudHJ5IHdpbGwgYmUgcmVtb3ZlZCBvbiB0aGUgbmV4dAotICAgICAqIGNhbGwgdG8gImZsdXNoIi4KLSAgICAgKi8KLSAgICBib29sIGdldERlbGV0ZWQodm9pZCkgY29uc3QgeyByZXR1cm4gbURlbGV0ZWQ7IH0KLQotcHJvdGVjdGVkOgotICAgIC8qCi0gICAgICogSW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlIGZyb20gdGhlIGZpbGUsIHdoaWNoIGlzIHBvaW50aW5nIGF0Ci0gICAgICogb3VyIENlbnRyYWwgRGlyZWN0b3J5IGVudHJ5LgotICAgICAqLwotICAgIHN0YXR1c190IGluaXRGcm9tQ0RFKEZJTEUqIGZwKTsKLQotICAgIC8qCi0gICAgICogSW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlIGZvciBhIG5ldyBmaWxlLiAgV2UgbmVlZCB0aGUgZmlsZW5hbWUKLSAgICAgKiBhbmQgY29tbWVudCBzbyB0aGF0IHdlIGNhbiBwcm9wZXJseSBzaXplIHRoZSBMRkggYXJlYS4gIFRoZQotICAgICAqIGZpbGVuYW1lIGlzIG1hbmRhdG9yeSwgdGhlIGNvbW1lbnQgaXMgb3B0aW9uYWwuCi0gICAgICovCi0gICAgdm9pZCBpbml0TmV3KGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBjb25zdCBjaGFyKiBjb21tZW50KTsKLQotICAgIC8qCi0gICAgICogSW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlIHdpdGggdGhlIGNvbnRlbnRzIG9mIGEgWmlwRW50cnkgZnJvbQotICAgICAqIGFub3RoZXIgZmlsZS4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBpbml0RnJvbUV4dGVybmFsKGNvbnN0IFppcEZpbGUqIHBaaXBGaWxlLCBjb25zdCBaaXBFbnRyeSogcEVudHJ5KTsKLQotICAgIC8qCi0gICAgICogQWRkIHNvbWUgcGFkIGJ5dGVzIHRvIHRoZSBMRkguICBXZSBkbyB0aGlzIGJ5IGFkZGluZyBvciByZXNpemluZwotICAgICAqIHRoZSAiZXh0cmEiIGZpZWxkLgotICAgICAqLwotICAgIHN0YXR1c190IGFkZFBhZGRpbmcoaW50IHBhZGRpbmcpOwotCi0gICAgLyoKLSAgICAgKiBTZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRhdGEgZm9yIHRoaXMgZW50cnkuCi0gICAgICovCi0gICAgdm9pZCBzZXREYXRhSW5mbyhsb25nIHVuY29tcExlbiwgbG9uZyBjb21wTGVuLCB1bnNpZ25lZCBsb25nIGNyYzMyLAotICAgICAgICBpbnQgY29tcHJlc3Npb25NZXRob2QpOwotCi0gICAgLyoKLSAgICAgKiBTZXQgdGhlIG1vZGlmaWNhdGlvbiBkYXRlLgotICAgICAqLwotICAgIHZvaWQgc2V0TW9kV2hlbih0aW1lX3Qgd2hlbik7Ci0KLSAgICAvKgotICAgICAqIFNldCB0aGUgb2Zmc2V0IG9mIHRoZSBsb2NhbCBmaWxlIGhlYWRlciwgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mCi0gICAgICogdGhlIGN1cnJlbnQgZmlsZS4KLSAgICAgKi8KLSAgICB2b2lkIHNldExGSE9mZnNldChvZmZfdCBvZmZzZXQpIHsKLSAgICAgICAgbUNERS5tTG9jYWxIZWFkZXJSZWxPZmZzZXQgPSAobG9uZykgb2Zmc2V0OwotICAgIH0KLQotICAgIC8qIG1hcmsgZm9yIGRlbGV0aW9uOyB1c2VkIGJ5IFppcEZpbGU6OnJlbW92ZSgpICovCi0gICAgdm9pZCBzZXREZWxldGVkKHZvaWQpIHsgbURlbGV0ZWQgPSB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgLyogdGhlc2UgYXJlIHByaXZhdGUgYW5kIG5vdCBkZWZpbmVkICovCi0gICAgWmlwRW50cnkoY29uc3QgWmlwRW50cnkmIHNyYyk7Ci0gICAgWmlwRW50cnkmIG9wZXJhdG9yPShjb25zdCBaaXBFbnRyeSYgc3JjKTsKLQotICAgIC8qIHJldHVybnMgInRydWUiIGlmIHRoZSBDREUgYW5kIHRoZSBMRkggYWdyZWUgKi8KLSAgICBib29sIGNvbXBhcmVIZWFkZXJzKHZvaWQpIGNvbnN0OwotICAgIHZvaWQgY29weUNERXRvTEZIKHZvaWQpOwotCi0gICAgYm9vbCAgICAgICAgbURlbGV0ZWQ7ICAgICAgIC8vIHNldCBpZiBlbnRyeSBpcyBwZW5kaW5nIGRlbGV0aW9uCi0gICAgYm9vbCAgICAgICAgbU1hcmtlZDsgICAgICAgIC8vIGFwcC1kZWZpbmVkIG1hcmtlcgotCi0gICAgLyoKLSAgICAgKiBFdmVyeSBlbnRyeSBpbiB0aGUgWmlwIGFyY2hpdmUgc3RhcnRzIG9mZiB3aXRoIG9uZSBvZiB0aGVzZS4KLSAgICAgKi8KLSAgICBjbGFzcyBMb2NhbEZpbGVIZWFkZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgTG9jYWxGaWxlSGVhZGVyKHZvaWQpIDoKLSAgICAgICAgICAgIG1WZXJzaW9uVG9FeHRyYWN0KDApLAotICAgICAgICAgICAgbUdQQml0RmxhZygwKSwKLSAgICAgICAgICAgIG1Db21wcmVzc2lvbk1ldGhvZCgwKSwKLSAgICAgICAgICAgIG1MYXN0TW9kRmlsZVRpbWUoMCksCi0gICAgICAgICAgICBtTGFzdE1vZEZpbGVEYXRlKDApLAotICAgICAgICAgICAgbUNSQzMyKDApLAotICAgICAgICAgICAgbUNvbXByZXNzZWRTaXplKDApLAotICAgICAgICAgICAgbVVuY29tcHJlc3NlZFNpemUoMCksCi0gICAgICAgICAgICBtRmlsZU5hbWVMZW5ndGgoMCksCi0gICAgICAgICAgICBtRXh0cmFGaWVsZExlbmd0aCgwKSwKLSAgICAgICAgICAgIG1GaWxlTmFtZShOVUxMKSwKLSAgICAgICAgICAgIG1FeHRyYUZpZWxkKE5VTEwpCi0gICAgICAgIHt9Ci0gICAgICAgIHZpcnR1YWwgfkxvY2FsRmlsZUhlYWRlcih2b2lkKSB7Ci0gICAgICAgICAgICBkZWxldGVbXSBtRmlsZU5hbWU7Ci0gICAgICAgICAgICBkZWxldGVbXSBtRXh0cmFGaWVsZDsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXR1c190IHJlYWQoRklMRSogZnApOwotICAgICAgICBzdGF0dXNfdCB3cml0ZShGSUxFKiBmcCk7Ci0KLSAgICAgICAgLy8gdW5zaWduZWQgbG9uZyBtU2lnbmF0dXJlOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbVZlcnNpb25Ub0V4dHJhY3Q7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtR1BCaXRGbGFnOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbUNvbXByZXNzaW9uTWV0aG9kOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbUxhc3RNb2RGaWxlVGltZTsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1MYXN0TW9kRmlsZURhdGU7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgICBtQ1JDMzI7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgICBtQ29tcHJlc3NlZFNpemU7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgICBtVW5jb21wcmVzc2VkU2l6ZTsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1GaWxlTmFtZUxlbmd0aDsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1FeHRyYUZpZWxkTGVuZ3RoOwotICAgICAgICB1bnNpZ25lZCBjaGFyKiAgbUZpbGVOYW1lOwotICAgICAgICB1bnNpZ25lZCBjaGFyKiAgbUV4dHJhRmllbGQ7Ci0KLSAgICAgICAgZW51bSB7Ci0gICAgICAgICAgICBrU2lnbmF0dXJlICAgICAgPSAweDA0MDM0YjUwLAotICAgICAgICAgICAga0xGSExlbiAgICAgICAgID0gMzAsICAgICAgIC8vIExvY2FsRmlsZUhkciBsZW4sIGV4Y2wuIHZhciBmaWVsZHMKLSAgICAgICAgfTsKLQotICAgICAgICB2b2lkIGR1bXAodm9pZCkgY29uc3Q7Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogRXZlcnkgZW50cnkgaW4gdGhlIFppcCBhcmNoaXZlIGhhcyBvbmUgb2YgdGhlc2UgaW4gdGhlICJjZW50cmFsCi0gICAgICogZGlyZWN0b3J5IiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgotICAgICAqLwotICAgIGNsYXNzIENlbnRyYWxEaXJFbnRyeSB7Ci0gICAgcHVibGljOgotICAgICAgICBDZW50cmFsRGlyRW50cnkodm9pZCkgOgotICAgICAgICAgICAgbVZlcnNpb25NYWRlQnkoMCksCi0gICAgICAgICAgICBtVmVyc2lvblRvRXh0cmFjdCgwKSwKLSAgICAgICAgICAgIG1HUEJpdEZsYWcoMCksCi0gICAgICAgICAgICBtQ29tcHJlc3Npb25NZXRob2QoMCksCi0gICAgICAgICAgICBtTGFzdE1vZEZpbGVUaW1lKDApLAotICAgICAgICAgICAgbUxhc3RNb2RGaWxlRGF0ZSgwKSwKLSAgICAgICAgICAgIG1DUkMzMigwKSwKLSAgICAgICAgICAgIG1Db21wcmVzc2VkU2l6ZSgwKSwKLSAgICAgICAgICAgIG1VbmNvbXByZXNzZWRTaXplKDApLAotICAgICAgICAgICAgbUZpbGVOYW1lTGVuZ3RoKDApLAotICAgICAgICAgICAgbUV4dHJhRmllbGRMZW5ndGgoMCksCi0gICAgICAgICAgICBtRmlsZUNvbW1lbnRMZW5ndGgoMCksCi0gICAgICAgICAgICBtRGlza051bWJlclN0YXJ0KDApLAotICAgICAgICAgICAgbUludGVybmFsQXR0cnMoMCksCi0gICAgICAgICAgICBtRXh0ZXJuYWxBdHRycygwKSwKLSAgICAgICAgICAgIG1Mb2NhbEhlYWRlclJlbE9mZnNldCgwKSwKLSAgICAgICAgICAgIG1GaWxlTmFtZShOVUxMKSwKLSAgICAgICAgICAgIG1FeHRyYUZpZWxkKE5VTEwpLAotICAgICAgICAgICAgbUZpbGVDb21tZW50KE5VTEwpCi0gICAgICAgIHt9Ci0gICAgICAgIHZpcnR1YWwgfkNlbnRyYWxEaXJFbnRyeSh2b2lkKSB7Ci0gICAgICAgICAgICBkZWxldGVbXSBtRmlsZU5hbWU7Ci0gICAgICAgICAgICBkZWxldGVbXSBtRXh0cmFGaWVsZDsKLSAgICAgICAgICAgIGRlbGV0ZVtdIG1GaWxlQ29tbWVudDsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXR1c190IHJlYWQoRklMRSogZnApOwotICAgICAgICBzdGF0dXNfdCB3cml0ZShGSUxFKiBmcCk7Ci0KLSAgICAgICAgLy8gdW5zaWduZWQgbG9uZyBtU2lnbmF0dXJlOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbVZlcnNpb25NYWRlQnk7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtVmVyc2lvblRvRXh0cmFjdDsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1HUEJpdEZsYWc7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtQ29tcHJlc3Npb25NZXRob2Q7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtTGFzdE1vZEZpbGVUaW1lOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbUxhc3RNb2RGaWxlRGF0ZTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyAgIG1DUkMzMjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyAgIG1Db21wcmVzc2VkU2l6ZTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyAgIG1VbmNvbXByZXNzZWRTaXplOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbUZpbGVOYW1lTGVuZ3RoOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbUV4dHJhRmllbGRMZW5ndGg7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtRmlsZUNvbW1lbnRMZW5ndGg7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtRGlza051bWJlclN0YXJ0OwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgbUludGVybmFsQXR0cnM7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgICBtRXh0ZXJuYWxBdHRyczsKLSAgICAgICAgdW5zaWduZWQgbG9uZyAgIG1Mb2NhbEhlYWRlclJlbE9mZnNldDsKLSAgICAgICAgdW5zaWduZWQgY2hhciogIG1GaWxlTmFtZTsKLSAgICAgICAgdW5zaWduZWQgY2hhciogIG1FeHRyYUZpZWxkOwotICAgICAgICB1bnNpZ25lZCBjaGFyKiAgbUZpbGVDb21tZW50OwotCi0gICAgICAgIHZvaWQgZHVtcCh2b2lkKSBjb25zdDsKLQotICAgICAgICBlbnVtIHsKLSAgICAgICAgICAgIGtTaWduYXR1cmUgICAgICA9IDB4MDIwMTRiNTAsCi0gICAgICAgICAgICBrQ0RFTGVuICAgICAgICAgPSA0NiwgICAgICAgLy8gQ2VudHJhbERpckVudCBsZW4sIGV4Y2wuIHZhciBmaWVsZHMKLSAgICAgICAgfTsKLSAgICB9OwotCi0gICAgZW51bSB7Ci0gICAgICAgIC8va0RhdGFEZXNjcmlwdG9yU2lnbmF0dXJlICA9IDB4MDgwNzRiNTAsICAgLy8gY3VycmVudGx5IHVudXNlZAotICAgICAgICBrRGF0YURlc2NyaXB0b3JMZW4gID0gMTYsICAgICAgICAgICAvLyBmb3VyIDMyLWJpdCBmaWVsZHMKLQotICAgICAgICBrRGVmYXVsdFZlcnNpb24gICAgID0gMjAsICAgICAgICAgICAvLyBuZWVkIGRlZmxhdGUsIG5vdGhpbmcgbXVjaCBlbHNlCi0gICAgICAgIGtEZWZhdWx0TWFkZUJ5ICAgICAgPSAweDAzMTcsICAgICAgIC8vIDAzPVVOSVgsIDE3PXNwZWMgdjIuMwotICAgICAgICBrVXNlc0RhdGFEZXNjciAgICAgID0gMHgwMDA4LCAgICAgICAvLyBHUEJpdEZsYWcgYml0IDMKLSAgICB9OwotCi0gICAgTG9jYWxGaWxlSGVhZGVyICAgICBtTEZIOwotICAgIENlbnRyYWxEaXJFbnRyeSAgICAgbUNERTsKLX07Ci0KLX07IC8vIG5hbWVzcGFjZSBhbmRyb2lkCi0KLSNlbmRpZiAvLyBfX0xJQlNfWklQRU5UUllfSApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9aaXBGaWxlLmNwcCBiL3Rvb2xzL2FhcHQvWmlwRmlsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNTcwNjguLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9aaXBGaWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8vCi0vLyBBY2Nlc3MgdG8gWmlwIGFyY2hpdmVzLgotLy8KLQotI2RlZmluZSBMT0dfVEFHICJ6aXAiCi0KLSNpbmNsdWRlIDxhbmRyb2lkZncvWmlwVXRpbHMuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotI2luY2x1ZGUgIlppcEZpbGUuaCIKLQotI2luY2x1ZGUgPHpsaWIuaD4KLSNkZWZpbmUgREVGX01FTV9MRVZFTCA4ICAgICAgICAgICAgICAgIC8vIG5vcm1hbGx5IGluIHp1dGlsLmg/Ci0KLSNpbmNsdWRlIDxtZW1vcnkuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi0vKgotICogU29tZSBlbnZpcm9ubWVudHMgcmVxdWlyZSB0aGUgImIiLCBzb21lIGNob2tlIG9uIGl0LgotICovCi0jZGVmaW5lIEZJTEVfT1BFTl9STyAgICAgICAgInJiIgotI2RlZmluZSBGSUxFX09QRU5fUlcgICAgICAgICJyK2IiCi0jZGVmaW5lIEZJTEVfT1BFTl9SV19DUkVBVEUgIncrYiIKLQotLyogc2hvdWxkIGxpdmUgc29tZXdoZXJlIGVsc2U/ICovCi1zdGF0aWMgc3RhdHVzX3QgZXJybm9Ub1N0YXR1cyhpbnQgZXJyKQotewotICAgIGlmIChlcnIgPT0gRU5PRU5UKQotICAgICAgICByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7Ci0gICAgZWxzZSBpZiAoZXJyID09IEVBQ0NFUykKLSAgICAgICAgcmV0dXJuIFBFUk1JU1NJT05fREVOSUVEOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci19Ci0KLS8qCi0gKiBPcGVuIGEgZmlsZSBhbmQgcGFyc2UgaXRzIGd1dHMuCi0gKi8KLXN0YXR1c190IFppcEZpbGU6Om9wZW4oY29uc3QgY2hhciogemlwRmlsZU5hbWUsIGludCBmbGFncykKLXsKLSAgICBib29sIG5ld0FyY2hpdmUgPSBmYWxzZTsKLQotICAgIGFzc2VydChtWmlwRnAgPT0gTlVMTCk7ICAgICAvLyBubyByZW9wZW4KLQotICAgIGlmICgoZmxhZ3MgJiBrT3BlblRydW5jYXRlKSkKLSAgICAgICAgZmxhZ3MgfD0ga09wZW5DcmVhdGU7ICAgICAgICAgICAvLyB0cnVuYyBpbXBsaWVzIGNyZWF0ZQotCi0gICAgaWYgKChmbGFncyAmIGtPcGVuUmVhZE9ubHkpICYmIChmbGFncyAmIGtPcGVuUmVhZFdyaXRlKSkKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOyAgICAgICAvLyBub3QgYm90aAotICAgIGlmICghKChmbGFncyAmIGtPcGVuUmVhZE9ubHkpIHx8IChmbGFncyAmIGtPcGVuUmVhZFdyaXRlKSkpCi0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsgICAgICAgLy8gbm90IG5laXRoZXIKLSAgICBpZiAoKGZsYWdzICYga09wZW5DcmVhdGUpICYmICEoZmxhZ3MgJiBrT3BlblJlYWRXcml0ZSkpCi0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsgICAgICAgLy8gY3JlYXRlIHJlcXVpcmVzIHdyaXRlCi0KLSAgICBpZiAoZmxhZ3MgJiBrT3BlblRydW5jYXRlKSB7Ci0gICAgICAgIG5ld0FyY2hpdmUgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ld0FyY2hpdmUgPSAoYWNjZXNzKHppcEZpbGVOYW1lLCBGX09LKSAhPSAwKTsKLSAgICAgICAgaWYgKCEoZmxhZ3MgJiBrT3BlbkNyZWF0ZSkgJiYgbmV3QXJjaGl2ZSkgewotICAgICAgICAgICAgLyogbm90IGNyZWF0aW5nLCBtdXN0IGFscmVhZHkgZXhpc3QgKi8KLSAgICAgICAgICAgIEFMT0dEKCJGaWxlICVzIGRvZXMgbm90IGV4aXN0IiwgemlwRmlsZU5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIE5BTUVfTk9UX0ZPVU5EOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogb3BlbiB0aGUgZmlsZSAqLwotICAgIGNvbnN0IGNoYXIqIG9wZW5mbGFnczsKLSAgICBpZiAoZmxhZ3MgJiBrT3BlblJlYWRXcml0ZSkgewotICAgICAgICBpZiAobmV3QXJjaGl2ZSkKLSAgICAgICAgICAgIG9wZW5mbGFncyA9IEZJTEVfT1BFTl9SV19DUkVBVEU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wZW5mbGFncyA9IEZJTEVfT1BFTl9SVzsKLSAgICB9IGVsc2UgewotICAgICAgICBvcGVuZmxhZ3MgPSBGSUxFX09QRU5fUk87Ci0gICAgfQotICAgIG1aaXBGcCA9IGZvcGVuKHppcEZpbGVOYW1lLCBvcGVuZmxhZ3MpOwotICAgIGlmIChtWmlwRnAgPT0gTlVMTCkgewotICAgICAgICBpbnQgZXJyID0gZXJybm87Ci0gICAgICAgIEFMT0dEKCJmb3BlbiBmYWlsZWQ6ICVkXG4iLCBlcnIpOwotICAgICAgICByZXR1cm4gZXJybm9Ub1N0YXR1cyhlcnIpOwotICAgIH0KLQotICAgIHN0YXR1c190IHJlc3VsdDsKLSAgICBpZiAoIW5ld0FyY2hpdmUpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogTG9hZCB0aGUgY2VudHJhbCBkaXJlY3RvcnkuICBJZiB0aGF0IGZhaWxzLCB0aGVuIHRoaXMgcHJvYmFibHkKLSAgICAgICAgICogaXNuJ3QgYSBaaXAgYXJjaGl2ZS4KLSAgICAgICAgICovCi0gICAgICAgIHJlc3VsdCA9IHJlYWRDZW50cmFsRGlyKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogTmV3bHktY3JlYXRlZC4gIFRoZSBFbmRPZkNlbnRyYWxEaXIgY29uc3RydWN0b3IgYWN0dWFsbHkKLSAgICAgICAgICogc2V0cyBldmVyeXRoaW5nIHRvIGJlIHRoZSB3YXkgd2Ugd2FudCBpdCAoYWxsIHplcm9lcykuICBXZQotICAgICAgICAgKiBzZXQgbU5lZWRDRFJld3JpdGUgc28gdGhhdCB3ZSBjcmVhdGUgKnNvbWV0aGluZyogaWYgdGhlCi0gICAgICAgICAqIGNhbGxlciBkb2Vzbid0IGFkZCBhbnkgZmlsZXMuICAoV2UgY291bGQgYWxzbyBqdXN0IHVubGluawotICAgICAgICAgKiB0aGUgZmlsZSBpZiBpdCdzIGJyYW5kIG5ldyBhbmQgbm90aGluZyB3YXMgYWRkZWQsIGJ1dCB0aGF0J3MKLSAgICAgICAgICogcHJvYmFibHkgZG9pbmcgbW9yZSB0aGFuIHdlIHJlYWxseSBzaG91bGQgLS0gdGhlIHVzZXIgbWlnaHQKLSAgICAgICAgICogaGF2ZSBhIG5lZWQgZm9yIGVtcHR5IHppcCBmaWxlcy4pCi0gICAgICAgICAqLwotICAgICAgICBtTmVlZENEUmV3cml0ZSA9IHRydWU7Ci0gICAgICAgIHJlc3VsdCA9IE5PX0VSUk9SOwotICAgIH0KLQotICAgIGlmIChmbGFncyAmIGtPcGVuUmVhZE9ubHkpCi0gICAgICAgIG1SZWFkT25seSA9IHRydWU7Ci0gICAgZWxzZQotICAgICAgICBhc3NlcnQoIW1SZWFkT25seSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogUmV0dXJuIHRoZSBOdGggZW50cnkgaW4gdGhlIGFyY2hpdmUuCi0gKi8KLVppcEVudHJ5KiBaaXBGaWxlOjpnZXRFbnRyeUJ5SW5kZXgoaW50IGlkeCkgY29uc3QKLXsKLSAgICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gKGludCkgbUVudHJpZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJldHVybiBtRW50cmllc1tpZHhdOwotfQotCi0vKgotICogRmluZCBhbiBlbnRyeSBieSBuYW1lLgotICovCi1aaXBFbnRyeSogWmlwRmlsZTo6Z2V0RW50cnlCeU5hbWUoY29uc3QgY2hhciogZmlsZU5hbWUpIGNvbnN0Ci17Ci0gICAgLyoKLSAgICAgKiBEbyBhIHN0dXBpZCBsaW5lYXIgc3RyaW5nLWNvbXBhcmUgc2VhcmNoLgotICAgICAqCi0gICAgICogVGhlcmUgYXJlIHZhcmlvdXMgd2F5cyB0byBzcGVlZCB0aGlzIHVwLCBlc3BlY2lhbGx5IHNpbmNlIGl0J3MgcmFyZQotICAgICAqIHRvIGludGVybWluZ2xlIGNoYW5nZXMgdG8gdGhlIGFyY2hpdmUgd2l0aCAiZ2V0IGJ5IG5hbWUiIGNhbGxzLiAgV2UKLSAgICAgKiBkb24ndCB3YW50IHRvIHNvcnQgdGhlIG1FbnRyaWVzIHZlY3RvciBpdHNlbGYsIGhvd2V2ZXIsIGJlY2F1c2UKLSAgICAgKiBpdCdzIHVzZWQgdG8gcmVjcmVhdGUgdGhlIENlbnRyYWwgRGlyZWN0b3J5LgotICAgICAqCi0gICAgICogKEhhc2ggdGFibGUgd29ya3MsIHBhcmFsbGVsIGxpc3Qgb2YgcG9pbnRlcnMgaW4gc29ydGVkIG9yZGVyIGlzIGdvb2QuKQotICAgICAqLwotICAgIGludCBpZHg7Ci0KLSAgICBmb3IgKGlkeCA9IG1FbnRyaWVzLnNpemUoKS0xOyBpZHggPj0gMDsgaWR4LS0pIHsKLSAgICAgICAgWmlwRW50cnkqIHBFbnRyeSA9IG1FbnRyaWVzW2lkeF07Ci0gICAgICAgIGlmICghcEVudHJ5LT5nZXREZWxldGVkKCkgJiYKLSAgICAgICAgICAgIHN0cmNtcChmaWxlTmFtZSwgcEVudHJ5LT5nZXRGaWxlTmFtZSgpKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcEVudHJ5OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBFbXB0eSB0aGUgbUVudHJpZXMgdmVjdG9yLgotICovCi12b2lkIFppcEZpbGU6OmRpc2NhcmRFbnRyaWVzKHZvaWQpCi17Ci0gICAgaW50IGNvdW50ID0gbUVudHJpZXMuc2l6ZSgpOwotCi0gICAgd2hpbGUgKC0tY291bnQgPj0gMCkKLSAgICAgICAgZGVsZXRlIG1FbnRyaWVzW2NvdW50XTsKLQotICAgIG1FbnRyaWVzLmNsZWFyKCk7Ci19Ci0KLQotLyoKLSAqIEZpbmQgdGhlIGNlbnRyYWwgZGlyZWN0b3J5IGFuZCByZWFkIHRoZSBjb250ZW50cy4KLSAqCi0gKiBUaGUgZnVuIHRoaW5nIGFib3V0IFpJUCBhcmNoaXZlcyBpcyB0aGF0IHRoZXkgbWF5IG9yIG1heSBub3QgYmUKLSAqIHJlYWRhYmxlIGZyb20gc3RhcnQgdG8gZW5kLiAgSW4gc29tZSBjYXNlcywgbm90YWJseSBmb3IgYXJjaGl2ZXMKLSAqIHRoYXQgd2VyZSB3cml0dGVuIHRvIHN0ZG91dCwgdGhlIG9ubHkgbGVuZ3RoIGluZm9ybWF0aW9uIGlzIGluIHRoZQotICogY2VudHJhbCBkaXJlY3RvcnkgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4KLSAqCi0gKiBPZiBjb3Vyc2UsIHRoZSBjZW50cmFsIGRpcmVjdG9yeSBjYW4gYmUgZm9sbG93ZWQgYnkgYSB2YXJpYWJsZS1sZW5ndGgKLSAqIGNvbW1lbnQgZmllbGQsIHNvIHdlIGhhdmUgdG8gc2NhbiB0aHJvdWdoIGl0IGJhY2t3YXJkcy4gIFRoZSBjb21tZW50Ci0gKiBpcyBhdCBtb3N0IDY0SywgcGx1cyB3ZSBoYXZlIDE4IGJ5dGVzIGZvciB0aGUgZW5kLW9mLWNlbnRyYWwtZGlyIHN0dWZmCi0gKiBpdHNlbGYsIHBsdXMgYXBwYXJlbnRseSBzb21ldGltZXMgcGVvcGxlIHRocm93IHJhbmRvbSBqdW5rIG9uIHRoZSBlbmQKLSAqIGp1c3QgZm9yIHRoZSBmdW4gb2YgaXQuCi0gKgotICogVGhpcyBpcyBhbGwgYSBsaXR0bGUgd29iYmx5LiAgSWYgdGhlIHdyb25nIHZhbHVlIGVuZHMgdXAgaW4gdGhlIEVPQ0QKLSAqIGFyZWEsIHdlJ3JlIGhvc2VkLiAgVGhpcyBhcHBlYXJzIHRvIGJlIHRoZSB3YXkgdGhhdCBldmVyYm9keSBoYW5kbGVzCi0gKiBpdCB0aG91Z2gsIHNvIHdlJ3JlIGluIHByZXR0eSBnb29kIGNvbXBhbnkgaWYgdGhpcyBmYWlscy4KLSAqLwotc3RhdHVzX3QgWmlwRmlsZTo6cmVhZENlbnRyYWxEaXIodm9pZCkKLXsKLSAgICBzdGF0dXNfdCByZXN1bHQgPSBOT19FUlJPUjsKLSAgICB1bnNpZ25lZCBjaGFyKiBidWYgPSBOVUxMOwotICAgIG9mZl90IGZpbGVMZW5ndGgsIHNlZWtTdGFydDsKLSAgICBsb25nIHJlYWRBbW91bnQ7Ci0gICAgaW50IGk7Ci0KLSAgICBmc2VlayhtWmlwRnAsIDAsIFNFRUtfRU5EKTsKLSAgICBmaWxlTGVuZ3RoID0gZnRlbGwobVppcEZwKTsKLSAgICByZXdpbmQobVppcEZwKTsKLQotICAgIC8qIHRvbyBzbWFsbCB0byBiZSBhIFpJUCBhcmNoaXZlPyAqLwotICAgIGlmIChmaWxlTGVuZ3RoIDwgRW5kT2ZDZW50cmFsRGlyOjprRU9DRExlbikgewotICAgICAgICBBTE9HRCgiTGVuZ3RoIGlzICVsZCAtLSB0b28gc21hbGxcbiIsIChsb25nKWZpbGVMZW5ndGgpOwotICAgICAgICByZXN1bHQgPSBJTlZBTElEX09QRVJBVElPTjsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGJ1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW0VuZE9mQ2VudHJhbERpcjo6a01heEVPQ0RTZWFyY2hdOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICBBTE9HRCgiRmFpbHVyZSBhbGxvY2F0aW5nICVkIGJ5dGVzIGZvciBFT0NEIHNlYXJjaCIsCi0gICAgICAgICAgICAgRW5kT2ZDZW50cmFsRGlyOjprTWF4RU9DRFNlYXJjaCk7Ci0gICAgICAgIHJlc3VsdCA9IE5PX01FTU9SWTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGlmIChmaWxlTGVuZ3RoID4gRW5kT2ZDZW50cmFsRGlyOjprTWF4RU9DRFNlYXJjaCkgewotICAgICAgICBzZWVrU3RhcnQgPSBmaWxlTGVuZ3RoIC0gRW5kT2ZDZW50cmFsRGlyOjprTWF4RU9DRFNlYXJjaDsKLSAgICAgICAgcmVhZEFtb3VudCA9IEVuZE9mQ2VudHJhbERpcjo6a01heEVPQ0RTZWFyY2g7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2Vla1N0YXJ0ID0gMDsKLSAgICAgICAgcmVhZEFtb3VudCA9IChsb25nKSBmaWxlTGVuZ3RoOwotICAgIH0KLSAgICBpZiAoZnNlZWsobVppcEZwLCBzZWVrU3RhcnQsIFNFRUtfU0VUKSAhPSAwKSB7Ci0gICAgICAgIEFMT0dEKCJGYWlsdXJlIHNlZWtpbmcgdG8gZW5kIG9mIHppcCBhdCAlbGQiLCAobG9uZykgc2Vla1N0YXJ0KTsKLSAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8qIHJlYWQgdGhlIGxhc3QgcGFydCBvZiB0aGUgZmlsZSBpbnRvIHRoZSBidWZmZXIgKi8KLSAgICBpZiAoZnJlYWQoYnVmLCAxLCByZWFkQW1vdW50LCBtWmlwRnApICE9IChzaXplX3QpIHJlYWRBbW91bnQpIHsKLSAgICAgICAgQUxPR0QoInNob3J0IGZpbGU/IHdhbnRlZCAlbGRcbiIsIHJlYWRBbW91bnQpOwotICAgICAgICByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgLyogZmluZCB0aGUgZW5kLW9mLWNlbnRyYWwtZGlyIG1hZ2ljICovCi0gICAgZm9yIChpID0gcmVhZEFtb3VudCAtIDQ7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIGlmIChidWZbaV0gPT0gMHg1MCAmJgotICAgICAgICAgICAgWmlwRW50cnk6OmdldExvbmdMRSgmYnVmW2ldKSA9PSBFbmRPZkNlbnRyYWxEaXI6OmtTaWduYXR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFMT0dWKCIrKysgRm91bmQgRU9DRCBhdCBidWYrJWRcbiIsIGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGkgPCAwKSB7Ci0gICAgICAgIEFMT0dEKCJFT0NEIG5vdCBmb3VuZCwgbm90IFppcFxuIik7Ci0gICAgICAgIHJlc3VsdCA9IElOVkFMSURfT1BFUkFUSU9OOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgLyogZXh0cmFjdCBlb2NkIHZhbHVlcyAqLwotICAgIHJlc3VsdCA9IG1FT0NELnJlYWRCdWYoYnVmICsgaSwgcmVhZEFtb3VudCAtIGkpOwotICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgQUxPR0QoIkZhaWx1cmUgcmVhZGluZyAlbGQgYnl0ZXMgb2YgRU9DRCB2YWx1ZXMiLCByZWFkQW1vdW50IC0gaSk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0gICAgLy9tRU9DRC5kdW1wKCk7Ci0KLSAgICBpZiAobUVPQ0QubURpc2tOdW1iZXIgIT0gMCB8fCBtRU9DRC5tRGlza1dpdGhDZW50cmFsRGlyICE9IDAgfHwKLSAgICAgICAgbUVPQ0QubU51bUVudHJpZXMgIT0gbUVPQ0QubVRvdGFsTnVtRW50cmllcykKLSAgICB7Ci0gICAgICAgIEFMT0dEKCJBcmNoaXZlIHNwYW5uaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwotICAgICAgICByZXN1bHQgPSBJTlZBTElEX09QRVJBVElPTjsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8qCi0gICAgICogU28gZmFyIHNvIGdvb2QuICAibUNlbnRyYWxEaXJTaXplIiBpcyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUKLSAgICAgKiBjZW50cmFsIGRpcmVjdG9yeSwgc28gd2UgY2FuIGp1c3Qgc2VlayBiYWNrIHRoYXQgZmFyIHRvIGZpbmQgaXQuCi0gICAgICogV2UgY2FuIGFsc28gc2VlayBmb3J3YXJkIG1DZW50cmFsRGlyT2Zmc2V0IGJ5dGVzIGZyb20gdGhlCi0gICAgICogc3RhcnQgb2YgdGhlIGZpbGUuCi0gICAgICoKLSAgICAgKiBXZSdyZSBub3QgZ3VhcmFudGVlZCB0byBoYXZlIHRoZSByZXN0IG9mIHRoZSBjZW50cmFsIGRpciBpbiB0aGUKLSAgICAgKiBidWZmZXIsIG5vciBhcmUgd2UgZ3VhcmFudGVlZCB0aGF0IHRoZSBjZW50cmFsIGRpciB3aWxsIGhhdmUgYW55Ci0gICAgICogc29ydCBvZiBjb252ZW5pZW50IHNpemUuICBXZSBuZWVkIHRvIHNraXAgdG8gdGhlIHN0YXJ0IG9mIGl0IGFuZAotICAgICAqIHJlYWQgdGhlIGhlYWRlciwgdGhlbiB0aGUgb3RoZXIgZ29vZGllcy4KLSAgICAgKgotICAgICAqIFRoZSBvbmx5IHRoaW5nIHdlIHJlYWxseSBuZWVkIHJpZ2h0IG5vdyBpcyB0aGUgZmlsZSBjb21tZW50LCB3aGljaAotICAgICAqIHdlJ3JlIGhvcGluZyB0byBwcmVzZXJ2ZS4KLSAgICAgKi8KLSAgICBpZiAoZnNlZWsobVppcEZwLCBtRU9DRC5tQ2VudHJhbERpck9mZnNldCwgU0VFS19TRVQpICE9IDApIHsKLSAgICAgICAgQUxPR0QoIkZhaWx1cmUgc2Vla2luZyB0byBjZW50cmFsIGRpciBvZmZzZXQgJWxkXG4iLAotICAgICAgICAgICAgIG1FT0NELm1DZW50cmFsRGlyT2Zmc2V0KTsKLSAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8qCi0gICAgICogTG9vcCB0aHJvdWdoIGFuZCByZWFkIHRoZSBjZW50cmFsIGRpciBlbnRyaWVzLgotICAgICAqLwotICAgIEFMT0dWKCJTY2FubmluZyAlZCBlbnRyaWVzLi4uXG4iLCBtRU9DRC5tVG90YWxOdW1FbnRyaWVzKTsKLSAgICBpbnQgZW50cnk7Ci0gICAgZm9yIChlbnRyeSA9IDA7IGVudHJ5IDwgbUVPQ0QubVRvdGFsTnVtRW50cmllczsgZW50cnkrKykgewotICAgICAgICBaaXBFbnRyeSogcEVudHJ5ID0gbmV3IFppcEVudHJ5OwotCi0gICAgICAgIHJlc3VsdCA9IHBFbnRyeS0+aW5pdEZyb21DREUobVppcEZwKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgQUxPR0QoImluaXRGcm9tQ0RFIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICBkZWxldGUgcEVudHJ5OwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0KLSAgICAgICAgbUVudHJpZXMuYWRkKHBFbnRyeSk7Ci0gICAgfQotCi0KLSAgICAvKgotICAgICAqIElmIGFsbCB3ZW50IHdlbGwsIHdlIHNob3VsZCBub3cgYmUgYmFjayBhdCB0aGUgRU9DRC4KLSAgICAgKi8KLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tCdWZbNF07Ci0gICAgICAgIGlmIChmcmVhZChjaGVja0J1ZiwgMSwgNCwgbVppcEZwKSAhPSA0KSB7Ci0gICAgICAgICAgICBBTE9HRCgiRU9DRCBjaGVjayByZWFkIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICByZXN1bHQgPSBJTlZBTElEX09QRVJBVElPTjsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoWmlwRW50cnk6OmdldExvbmdMRShjaGVja0J1ZikgIT0gRW5kT2ZDZW50cmFsRGlyOjprU2lnbmF0dXJlKSB7Ci0gICAgICAgICAgICBBTE9HRCgiRU9DRCByZWFkIGNoZWNrIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgICAgIEFMT0dWKCIrKysgRU9DRCByZWFkIGNoZWNrIHBhc3NlZFxuIik7Ci0gICAgfQotCi1iYWlsOgotICAgIGRlbGV0ZVtdIGJ1ZjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLS8qCi0gKiBBZGQgYSBuZXcgZmlsZSB0byB0aGUgYXJjaGl2ZS4KLSAqCi0gKiBUaGlzIHJlcXVpcmVzIGNyZWF0aW5nIGFuZCBwb3B1bGF0aW5nIGEgWmlwRW50cnkgc3RydWN0dXJlLCBhbmQgY29weWluZwotICogdGhlIGRhdGEgaW50byB0aGUgZmlsZSBhdCB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb24uICBUaGUgImFwcHJvcHJpYXRlCi0gKiBwb3NpdGlvbiIgaXMgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2YgdGhlIGNlbnRyYWwgZGlyZWN0b3J5LCB3aGljaCB3ZQotICogY2FzdWFsbHkgb3ZlcndyaXRlICh3ZSBjYW4gcHV0IGl0IGJhY2sgbGF0ZXIpLgotICoKLSAqIElmIHdlIHdlcmUgY29uY2VybmVkIGFib3V0IHNhZmV0eSwgd2Ugd291bGQgd2FudCB0byBtYWtlIGFsbCBjaGFuZ2VzCi0gKiBpbiBhIHRlbXAgZmlsZSBhbmQgdGhlbiBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsIGFmdGVyIGV2ZXJ5dGhpbmcgd2FzCi0gKiBzYWZlbHkgd3JpdHRlbi4gIE5vdCByZWFsbHkgYSBjb25jZXJuIGZvciB1cy4KLSAqLwotc3RhdHVzX3QgWmlwRmlsZTo6YWRkQ29tbW9uKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwKLSAgICBjb25zdCBjaGFyKiBzdG9yYWdlTmFtZSwgaW50IHNvdXJjZVR5cGUsIGludCBjb21wcmVzc2lvbk1ldGhvZCwKLSAgICBaaXBFbnRyeSoqIHBwRW50cnkpCi17Ci0gICAgWmlwRW50cnkqIHBFbnRyeSA9IE5VTEw7Ci0gICAgc3RhdHVzX3QgcmVzdWx0ID0gTk9fRVJST1I7Ci0gICAgbG9uZyBsZmhQb3NuLCBzdGFydFBvc24sIGVuZFBvc24sIHVuY29tcHJlc3NlZExlbjsKLSAgICBGSUxFKiBpbnB1dEZwID0gTlVMTDsKLSAgICB1bnNpZ25lZCBsb25nIGNyYzsKLSAgICB0aW1lX3QgbW9kV2hlbjsKLQotICAgIGlmIChtUmVhZE9ubHkpCi0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLQotICAgIGFzc2VydChjb21wcmVzc2lvbk1ldGhvZCA9PSBaaXBFbnRyeTo6a0NvbXByZXNzRGVmbGF0ZWQgfHwKLSAgICAgICAgICAgY29tcHJlc3Npb25NZXRob2QgPT0gWmlwRW50cnk6OmtDb21wcmVzc1N0b3JlZCk7Ci0KLSAgICAvKiBtYWtlIHN1cmUgd2UncmUgaW4gYSByZWFzb25hYmxlIHN0YXRlICovCi0gICAgYXNzZXJ0KG1aaXBGcCAhPSBOVUxMKTsKLSAgICBhc3NlcnQobUVudHJpZXMuc2l6ZSgpID09IG1FT0NELm1Ub3RhbE51bUVudHJpZXMpOwotCi0gICAgLyogbWFrZSBzdXJlIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCAqLwotICAgIGlmIChnZXRFbnRyeUJ5TmFtZShzdG9yYWdlTmFtZSkgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIEFMUkVBRFlfRVhJU1RTOwotCi0gICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIGlucHV0RnAgPSBmb3BlbihmaWxlTmFtZSwgRklMRV9PUEVOX1JPKTsKLSAgICAgICAgaWYgKGlucHV0RnAgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBlcnJub1RvU3RhdHVzKGVycm5vKTsKLSAgICB9Ci0KLSAgICBpZiAoZnNlZWsobVppcEZwLCBtRU9DRC5tQ2VudHJhbERpck9mZnNldCwgU0VFS19TRVQpICE9IDApIHsKLSAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIHBFbnRyeSA9IG5ldyBaaXBFbnRyeTsKLSAgICBwRW50cnktPmluaXROZXcoc3RvcmFnZU5hbWUsIE5VTEwpOwotCi0gICAgLyoKLSAgICAgKiBGcm9tIGhlcmUgb24gb3V0LCBmYWlsdXJlcyBhcmUgbW9yZSBpbnRlcmVzdGluZy4KLSAgICAgKi8KLSAgICBtTmVlZENEUmV3cml0ZSA9IHRydWU7Ci0KLSAgICAvKgotICAgICAqIFdyaXRlIHRoZSBMRkgsIGV2ZW4gdGhvdWdoIGl0J3Mgc3RpbGwgbW9zdGx5IGJsYW5rLiAgV2UgbmVlZCBpdAotICAgICAqIGFzIGEgcGxhY2UtaG9sZGVyLiAgSW4gdGhlb3J5IHRoZSBMRkggaXNuJ3QgbmVjZXNzYXJ5LCBidXQgaW4KLSAgICAgKiBwcmFjdGljZSBzb21lIHV0aWxpdGllcyBkZW1hbmQgaXQuCi0gICAgICovCi0gICAgbGZoUG9zbiA9IGZ0ZWxsKG1aaXBGcCk7Ci0gICAgcEVudHJ5LT5tTEZILndyaXRlKG1aaXBGcCk7Ci0gICAgc3RhcnRQb3NuID0gZnRlbGwobVppcEZwKTsKLQotICAgIC8qCi0gICAgICogQ29weSB0aGUgZGF0YSBpbiwgcG9zc2libHkgY29tcHJlc3NpbmcgaXQgYXMgd2UgZ28uCi0gICAgICovCi0gICAgaWYgKHNvdXJjZVR5cGUgPT0gWmlwRW50cnk6OmtDb21wcmVzc1N0b3JlZCkgewotICAgICAgICBpZiAoY29tcHJlc3Npb25NZXRob2QgPT0gWmlwRW50cnk6OmtDb21wcmVzc0RlZmxhdGVkKSB7Ci0gICAgICAgICAgICBib29sIGZhaWxlZCA9IGZhbHNlOwotICAgICAgICAgICAgcmVzdWx0ID0gY29tcHJlc3NGcFRvRnAobVppcEZwLCBpbnB1dEZwLCBkYXRhLCBzaXplLCAmY3JjKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBBTE9HRCgiY29tcHJlc3Npb24gZmFpbGVkLCBzdG9yaW5nXG4iKTsKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIE1ha2Ugc3VyZSBpdCBoYXMgY29tcHJlc3NlZCAiZW5vdWdoIi4gIFRoaXMgcHJvYmFibHkgb3VnaHQKLSAgICAgICAgICAgICAgICAgKiB0byBiZSBzZXQgdGhyb3VnaCBhbiBBUEkgY2FsbCwgYnV0IEkgZG9uJ3QgZXhwZWN0IG91cgotICAgICAgICAgICAgICAgICAqIGNyaXRlcmlhIHRvIGNoYW5nZSBvdmVyIHRpbWUuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgbG9uZyBzcmMgPSBpbnB1dEZwID8gZnRlbGwoaW5wdXRGcCkgOiBzaXplOwotICAgICAgICAgICAgICAgIGxvbmcgZHN0ID0gZnRlbGwobVppcEZwKSAtIHN0YXJ0UG9zbjsKLSAgICAgICAgICAgICAgICBpZiAoZHN0ICsgKGRzdCAvIDEwKSA+IHNyYykgewotICAgICAgICAgICAgICAgICAgICBBTE9HRCgiaW5zdWZmaWNpZW50IGNvbXByZXNzaW9uIChzcmM9JWxkIGRzdD0lbGQpLCBzdG9yaW5nXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QpOwotICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZhaWxlZCkgewotICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uTWV0aG9kID0gWmlwRW50cnk6OmtDb21wcmVzc1N0b3JlZDsKLSAgICAgICAgICAgICAgICBpZiAoaW5wdXRGcCkgcmV3aW5kKGlucHV0RnApOwotICAgICAgICAgICAgICAgIGZzZWVrKG1aaXBGcCwgc3RhcnRQb3NuLCBTRUVLX1NFVCk7Ci0gICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoIHRvIGtDb21wcmVzc1N0b3JlZCBjYXNlICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLyogaGFuZGxlICJubyBjb21wcmVzc2lvbiIgcmVxdWVzdCwgb3IgZmFpbGVkIGNvbXByZXNzaW9uIGZyb20gYWJvdmUgKi8KLSAgICAgICAgaWYgKGNvbXByZXNzaW9uTWV0aG9kID09IFppcEVudHJ5OjprQ29tcHJlc3NTdG9yZWQpIHsKLSAgICAgICAgICAgIGlmIChpbnB1dEZwKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29weUZwVG9GcChtWmlwRnAsIGlucHV0RnAsICZjcmMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3B5RGF0YVRvRnAobVppcEZwLCBkYXRhLCBzaXplLCAmY3JjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAvLyBkb24ndCBuZWVkIHRvIHRydW5jYXRlOyBoYXBwZW5zIGluIENERSByZXdyaXRlCi0gICAgICAgICAgICAgICAgQUxPR0QoImZhaWxlZCBjb3B5aW5nIGRhdGEgaW5cbiIpOwotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGN1cnJlbnRseSBzZWVrZWQgdG8gZW5kIG9mIGZpbGUKLSAgICAgICAgdW5jb21wcmVzc2VkTGVuID0gaW5wdXRGcCA/IGZ0ZWxsKGlucHV0RnApIDogc2l6ZTsKLSAgICB9IGVsc2UgaWYgKHNvdXJjZVR5cGUgPT0gWmlwRW50cnk6OmtDb21wcmVzc0RlZmxhdGVkKSB7Ci0gICAgICAgIC8qIHdlIHNob3VsZCBzdXBwb3J0IHVuY29tcHJlc3NlZC1mcm9tLWNvbXByZXNzZWQsIGJ1dCBpdCdzIG5vdAotICAgICAgICAgKiBpbXBvcnRhbnQgcmlnaHQgbm93ICovCi0gICAgICAgIGFzc2VydChjb21wcmVzc2lvbk1ldGhvZCA9PSBaaXBFbnRyeTo6a0NvbXByZXNzRGVmbGF0ZWQpOwotCi0gICAgICAgIGJvb2wgc2NhblJlc3VsdDsKLSAgICAgICAgaW50IG1ldGhvZDsKLSAgICAgICAgbG9uZyBjb21wcmVzc2VkTGVuOwotCi0gICAgICAgIHNjYW5SZXN1bHQgPSBaaXBVdGlsczo6ZXhhbWluZUd6aXAoaW5wdXRGcCwgJm1ldGhvZCwgJnVuY29tcHJlc3NlZExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICZjb21wcmVzc2VkTGVuLCAmY3JjKTsKLSAgICAgICAgaWYgKCFzY2FuUmVzdWx0IHx8IG1ldGhvZCAhPSBaaXBFbnRyeTo6a0NvbXByZXNzRGVmbGF0ZWQpIHsKLSAgICAgICAgICAgIEFMT0dEKCJ0aGlzIGlzbid0IGEgZGVmbGF0ZWQgZ3ppcCBmaWxlPyIpOwotICAgICAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdCA9IGNvcHlQYXJ0aWFsRnBUb0ZwKG1aaXBGcCwgaW5wdXRGcCwgY29tcHJlc3NlZExlbiwgTlVMTCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIEFMT0dEKCJmYWlsZWQgY29weWluZyBnemlwIGRhdGEgaW5cbiIpOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIC8qCi0gICAgICogV2UgY291bGQgd3JpdGUgdGhlICJEYXRhIERlc2NyaXB0b3IiLCBidXQgdGhlcmUgZG9lc24ndCBzZWVtIHRvCi0gICAgICogYmUgYW55IHBvaW50IHNpbmNlIHdlJ3JlIGdvaW5nIHRvIGdvIGJhY2sgYW5kIHdyaXRlIHRoZSBMRkguCi0gICAgICoKLSAgICAgKiBVcGRhdGUgZmlsZSBvZmZzZXRzLgotICAgICAqLwotICAgIGVuZFBvc24gPSBmdGVsbChtWmlwRnApOyAgICAgICAgICAgIC8vIHNlZWtlZCB0byBlbmQgb2YgY29tcHJlc3NlZCBkYXRhCi0KLSAgICAvKgotICAgICAqIFN1Y2Nlc3MhICBGaWxsIG91dCBuZXcgdmFsdWVzLgotICAgICAqLwotICAgIHBFbnRyeS0+c2V0RGF0YUluZm8odW5jb21wcmVzc2VkTGVuLCBlbmRQb3NuIC0gc3RhcnRQb3NuLCBjcmMsCi0gICAgICAgIGNvbXByZXNzaW9uTWV0aG9kKTsKLSAgICBtb2RXaGVuID0gZ2V0TW9kVGltZShpbnB1dEZwID8gZmlsZW5vKGlucHV0RnApIDogZmlsZW5vKG1aaXBGcCkpOwotICAgIHBFbnRyeS0+c2V0TW9kV2hlbihtb2RXaGVuKTsKLSAgICBwRW50cnktPnNldExGSE9mZnNldChsZmhQb3NuKTsKLSAgICBtRU9DRC5tTnVtRW50cmllcysrOwotICAgIG1FT0NELm1Ub3RhbE51bUVudHJpZXMrKzsKLSAgICBtRU9DRC5tQ2VudHJhbERpclNpemUgPSAwOyAgICAgIC8vIG1hcmsgaW52YWxpZDsgc2V0IGJ5IGZsdXNoKCkKLSAgICBtRU9DRC5tQ2VudHJhbERpck9mZnNldCA9IGVuZFBvc247Ci0KLSAgICAvKgotICAgICAqIEdvIGJhY2sgYW5kIHdyaXRlIHRoZSBMRkguCi0gICAgICovCi0gICAgaWYgKGZzZWVrKG1aaXBGcCwgbGZoUG9zbiwgU0VFS19TRVQpICE9IDApIHsKLSAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLSAgICBwRW50cnktPm1MRkgud3JpdGUobVppcEZwKTsKLQotICAgIC8qCi0gICAgICogQWRkIHBFbnRyeSB0byB0aGUgbGlzdC4KLSAgICAgKi8KLSAgICBtRW50cmllcy5hZGQocEVudHJ5KTsKLSAgICBpZiAocHBFbnRyeSAhPSBOVUxMKQotICAgICAgICAqcHBFbnRyeSA9IHBFbnRyeTsKLSAgICBwRW50cnkgPSBOVUxMOwotCi1iYWlsOgotICAgIGlmIChpbnB1dEZwICE9IE5VTEwpCi0gICAgICAgIGZjbG9zZShpbnB1dEZwKTsKLSAgICBkZWxldGUgcEVudHJ5OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBBZGQgYW4gZW50cnkgYnkgY29weWluZyBpdCBmcm9tIGFub3RoZXIgemlwIGZpbGUuICBJZiAicGFkZGluZyIgaXMKLSAqIG5vbnplcm8sIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlICJleHRyYSIKLSAqIGZpZWxkIGluIHRoZSBoZWFkZXIuCi0gKgotICogSWYgInBwRW50cnkiIGlzIG5vbi1OVUxMLCBhIHBvaW50ZXIgdG8gdGhlIG5ldyBlbnRyeSB3aWxsIGJlIHJldHVybmVkLgotICovCi1zdGF0dXNfdCBaaXBGaWxlOjphZGQoY29uc3QgWmlwRmlsZSogcFNvdXJjZVppcCwgY29uc3QgWmlwRW50cnkqIHBTb3VyY2VFbnRyeSwKLSAgICBpbnQgcGFkZGluZywgWmlwRW50cnkqKiBwcEVudHJ5KQotewotICAgIFppcEVudHJ5KiBwRW50cnkgPSBOVUxMOwotICAgIHN0YXR1c190IHJlc3VsdDsKLSAgICBsb25nIGxmaFBvc24sIGVuZFBvc247Ci0KLSAgICBpZiAobVJlYWRPbmx5KQotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0KLSAgICAvKiBtYWtlIHN1cmUgd2UncmUgaW4gYSByZWFzb25hYmxlIHN0YXRlICovCi0gICAgYXNzZXJ0KG1aaXBGcCAhPSBOVUxMKTsKLSAgICBhc3NlcnQobUVudHJpZXMuc2l6ZSgpID09IG1FT0NELm1Ub3RhbE51bUVudHJpZXMpOwotCi0gICAgaWYgKGZzZWVrKG1aaXBGcCwgbUVPQ0QubUNlbnRyYWxEaXJPZmZzZXQsIFNFRUtfU0VUKSAhPSAwKSB7Ci0gICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBwRW50cnkgPSBuZXcgWmlwRW50cnk7Ci0gICAgaWYgKHBFbnRyeSA9PSBOVUxMKSB7Ci0gICAgICAgIHJlc3VsdCA9IE5PX01FTU9SWTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIHJlc3VsdCA9IHBFbnRyeS0+aW5pdEZyb21FeHRlcm5hbChwU291cmNlWmlwLCBwU291cmNlRW50cnkpOwotICAgIGlmIChyZXN1bHQgIT0gTk9fRVJST1IpCi0gICAgICAgIGdvdG8gYmFpbDsKLSAgICBpZiAocGFkZGluZyAhPSAwKSB7Ci0gICAgICAgIHJlc3VsdCA9IHBFbnRyeS0+YWRkUGFkZGluZyhwYWRkaW5nKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIEZyb20gaGVyZSBvbiBvdXQsIGZhaWx1cmVzIGFyZSBtb3JlIGludGVyZXN0aW5nLgotICAgICAqLwotICAgIG1OZWVkQ0RSZXdyaXRlID0gdHJ1ZTsKLQotICAgIC8qCi0gICAgICogV3JpdGUgdGhlIExGSC4gIFNpbmNlIHdlJ3JlIG5vdCByZWNvbXByZXNzaW5nIHRoZSBkYXRhLCB3ZSBhbHJlYWR5Ci0gICAgICogaGF2ZSBhbGwgb2YgdGhlIGZpZWxkcyBmaWxsZWQgb3V0LgotICAgICAqLwotICAgIGxmaFBvc24gPSBmdGVsbChtWmlwRnApOwotICAgIHBFbnRyeS0+bUxGSC53cml0ZShtWmlwRnApOwotCi0gICAgLyoKLSAgICAgKiBDb3B5IHRoZSBkYXRhIG92ZXIuCi0gICAgICoKLSAgICAgKiBJZiB0aGUgImhhcyBkYXRhIGRlc2NyaXB0b3IiIGZsYWcgaXMgc2V0LCB3ZSB3YW50IHRvIGNvcHkgdGhlIERECi0gICAgICogZmllbGRzIGFzIHdlbGwuICBUaGlzIGlzIGEgZml4ZWQtc2l6ZSBhcmVhIGltbWVkaWF0ZWx5IGZvbGxvd2luZwotICAgICAqIHRoZSBkYXRhLgotICAgICAqLwotICAgIGlmIChmc2VlayhwU291cmNlWmlwLT5tWmlwRnAsIHBTb3VyY2VFbnRyeS0+Z2V0RmlsZU9mZnNldCgpLCBTRUVLX1NFVCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IFVOS05PV05fRVJST1I7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBvZmZfdCBjb3B5TGVuOwotICAgIGNvcHlMZW4gPSBwU291cmNlRW50cnktPmdldENvbXByZXNzZWRMZW4oKTsKLSAgICBpZiAoKHBTb3VyY2VFbnRyeS0+bUxGSC5tR1BCaXRGbGFnICYgWmlwRW50cnk6OmtVc2VzRGF0YURlc2NyKSAhPSAwKQotICAgICAgICBjb3B5TGVuICs9IFppcEVudHJ5OjprRGF0YURlc2NyaXB0b3JMZW47Ci0KLSAgICBpZiAoY29weVBhcnRpYWxGcFRvRnAobVppcEZwLCBwU291cmNlWmlwLT5tWmlwRnAsIGNvcHlMZW4sIE5VTEwpCi0gICAgICAgICE9IE5PX0VSUk9SKQotICAgIHsKLSAgICAgICAgQUxPR1coImNvcHkgb2YgJyVzJyBmYWlsZWRcbiIsIHBFbnRyeS0+bUNERS5tRmlsZU5hbWUpOwotICAgICAgICByZXN1bHQgPSBVTktOT1dOX0VSUk9SOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBVcGRhdGUgZmlsZSBvZmZzZXRzLgotICAgICAqLwotICAgIGVuZFBvc24gPSBmdGVsbChtWmlwRnApOwotCi0gICAgLyoKLSAgICAgKiBTdWNjZXNzISAgRmlsbCBvdXQgbmV3IHZhbHVlcy4KLSAgICAgKi8KLSAgICBwRW50cnktPnNldExGSE9mZnNldChsZmhQb3NuKTsgICAgICAvLyBzZXRzIG1DREUubUxvY2FsSGVhZGVyUmVsT2Zmc2V0Ci0gICAgbUVPQ0QubU51bUVudHJpZXMrKzsKLSAgICBtRU9DRC5tVG90YWxOdW1FbnRyaWVzKys7Ci0gICAgbUVPQ0QubUNlbnRyYWxEaXJTaXplID0gMDsgICAgICAvLyBtYXJrIGludmFsaWQ7IHNldCBieSBmbHVzaCgpCi0gICAgbUVPQ0QubUNlbnRyYWxEaXJPZmZzZXQgPSBlbmRQb3NuOwotCi0gICAgLyoKLSAgICAgKiBBZGQgcEVudHJ5IHRvIHRoZSBsaXN0LgotICAgICAqLwotICAgIG1FbnRyaWVzLmFkZChwRW50cnkpOwotICAgIGlmIChwcEVudHJ5ICE9IE5VTEwpCi0gICAgICAgICpwcEVudHJ5ID0gcEVudHJ5OwotICAgIHBFbnRyeSA9IE5VTEw7Ci0KLSAgICByZXN1bHQgPSBOT19FUlJPUjsKLQotYmFpbDoKLSAgICBkZWxldGUgcEVudHJ5OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBDb3B5IGFsbCBvZiB0aGUgYnl0ZXMgaW4gInNyYyIgdG8gImRzdCIuCi0gKgotICogT24gZXhpdCwgInNyY0ZwIiB3aWxsIGJlIHNlZWtlZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLCBhbmQgImRzdEZwIgotICogd2lsbCBiZSBzZWVrZWQgaW1tZWRpYXRlbHkgcGFzdCB0aGUgZGF0YS4KLSAqLwotc3RhdHVzX3QgWmlwRmlsZTo6Y29weUZwVG9GcChGSUxFKiBkc3RGcCwgRklMRSogc3JjRnAsIHVuc2lnbmVkIGxvbmcqIHBDUkMzMikKLXsKLSAgICB1bnNpZ25lZCBjaGFyIHRtcEJ1ZlszMjc2OF07Ci0gICAgc2l6ZV90IGNvdW50OwotCi0gICAgKnBDUkMzMiA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgY291bnQgPSBmcmVhZCh0bXBCdWYsIDEsIHNpemVvZih0bXBCdWYpLCBzcmNGcCk7Ci0gICAgICAgIGlmIChmZXJyb3Ioc3JjRnApIHx8IGZlcnJvcihkc3RGcCkpCi0gICAgICAgICAgICByZXR1cm4gZXJybm9Ub1N0YXR1cyhlcnJubyk7Ci0gICAgICAgIGlmIChjb3VudCA9PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgKnBDUkMzMiA9IGNyYzMyKCpwQ1JDMzIsIHRtcEJ1ZiwgY291bnQpOwotCi0gICAgICAgIGlmIChmd3JpdGUodG1wQnVmLCAxLCBjb3VudCwgZHN0RnApICE9IGNvdW50KSB7Ci0gICAgICAgICAgICBBTE9HRCgiZndyaXRlICVkIGJ5dGVzIGZhaWxlZFxuIiwgKGludCkgY291bnQpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLS8qCi0gKiBDb3B5IGFsbCBvZiB0aGUgYnl0ZXMgaW4gInNyYyIgdG8gImRzdCIuCi0gKgotICogT24gZXhpdCwgImRzdEZwIiB3aWxsIGJlIHNlZWtlZCBpbW1lZGlhdGVseSBwYXN0IHRoZSBkYXRhLgotICovCi1zdGF0dXNfdCBaaXBGaWxlOjpjb3B5RGF0YVRvRnAoRklMRSogZHN0RnAsCi0gICAgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcqIHBDUkMzMikKLXsKLSAgICBzaXplX3QgY291bnQ7Ci0KLSAgICAqcENSQzMyID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgaWYgKHNpemUgPiAwKSB7Ci0gICAgICAgICpwQ1JDMzIgPSBjcmMzMigqcENSQzMyLCAoY29uc3QgdW5zaWduZWQgY2hhciopZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmIChmd3JpdGUoZGF0YSwgMSwgc2l6ZSwgZHN0RnApICE9IHNpemUpIHsKLSAgICAgICAgICAgIEFMT0dEKCJmd3JpdGUgJWQgYnl0ZXMgZmFpbGVkXG4iLCAoaW50KSBzaXplKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgotICogQ29weSBzb21lIG9mIHRoZSBieXRlcyBpbiAic3JjIiB0byAiZHN0Ii4KLSAqCi0gKiBJZiAicENSQzMyIiBpcyBOVUxMLCB0aGUgQ1JDIHdpbGwgbm90IGJlIGNvbXB1dGVkLgotICoKLSAqIE9uIGV4aXQsICJzcmNGcCIgd2lsbCBiZSBzZWVrZWQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSwgYW5kICJkc3RGcCIKLSAqIHdpbGwgYmUgc2Vla2VkIGltbWVkaWF0ZWx5IHBhc3QgdGhlIGRhdGEganVzdCB3cml0dGVuLgotICovCi1zdGF0dXNfdCBaaXBGaWxlOjpjb3B5UGFydGlhbEZwVG9GcChGSUxFKiBkc3RGcCwgRklMRSogc3JjRnAsIGxvbmcgbGVuZ3RoLAotICAgIHVuc2lnbmVkIGxvbmcqIHBDUkMzMikKLXsKLSAgICB1bnNpZ25lZCBjaGFyIHRtcEJ1ZlszMjc2OF07Ci0gICAgc2l6ZV90IGNvdW50OwotCi0gICAgaWYgKHBDUkMzMiAhPSBOVUxMKQotICAgICAgICAqcENSQzMyID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0KLSAgICB3aGlsZSAobGVuZ3RoKSB7Ci0gICAgICAgIGxvbmcgcmVhZFNpemU7Ci0gICAgICAgIAotICAgICAgICByZWFkU2l6ZSA9IHNpemVvZih0bXBCdWYpOwotICAgICAgICBpZiAocmVhZFNpemUgPiBsZW5ndGgpCi0gICAgICAgICAgICByZWFkU2l6ZSA9IGxlbmd0aDsKLQotICAgICAgICBjb3VudCA9IGZyZWFkKHRtcEJ1ZiwgMSwgcmVhZFNpemUsIHNyY0ZwKTsKLSAgICAgICAgaWYgKChsb25nKSBjb3VudCAhPSByZWFkU2l6ZSkgeyAgICAgLy8gZXJyb3Igb3IgdW5leHBlY3RlZCBFT0YKLSAgICAgICAgICAgIEFMT0dEKCJmcmVhZCAlZCBieXRlcyBmYWlsZWRcbiIsIChpbnQpIHJlYWRTaXplKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBDUkMzMiAhPSBOVUxMKQotICAgICAgICAgICAgKnBDUkMzMiA9IGNyYzMyKCpwQ1JDMzIsIHRtcEJ1ZiwgY291bnQpOwotCi0gICAgICAgIGlmIChmd3JpdGUodG1wQnVmLCAxLCBjb3VudCwgZHN0RnApICE9IGNvdW50KSB7Ci0gICAgICAgICAgICBBTE9HRCgiZndyaXRlICVkIGJ5dGVzIGZhaWxlZFxuIiwgKGludCkgY291bnQpOwotICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBsZW5ndGggLT0gcmVhZFNpemU7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgotICogQ29tcHJlc3MgYWxsIG9mIHRoZSBkYXRhIGluICJzcmNGcCIgYW5kIHdyaXRlIGl0IHRvICJkc3RGcCIuCi0gKgotICogT24gZXhpdCwgInNyY0ZwIiB3aWxsIGJlIHNlZWtlZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLCBhbmQgImRzdEZwIgotICogd2lsbCBiZSBzZWVrZWQgaW1tZWRpYXRlbHkgcGFzdCB0aGUgY29tcHJlc3NlZCBkYXRhLgotICovCi1zdGF0dXNfdCBaaXBGaWxlOjpjb21wcmVzc0ZwVG9GcChGSUxFKiBkc3RGcCwgRklMRSogc3JjRnAsCi0gICAgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcqIHBDUkMzMikKLXsKLSAgICBzdGF0dXNfdCByZXN1bHQgPSBOT19FUlJPUjsKLSAgICBjb25zdCBzaXplX3Qga0J1ZlNpemUgPSAzMjc2ODsKLSAgICB1bnNpZ25lZCBjaGFyKiBpbkJ1ZiA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciogb3V0QnVmID0gTlVMTDsKLSAgICB6X3N0cmVhbSB6c3RyZWFtOwotICAgIGJvb2wgYXRFb2YgPSBmYWxzZTsgICAgIC8vIG5vIGZlb2YoKSBhdmlhaWxhYmxlIHlldAotICAgIHVuc2lnbmVkIGxvbmcgY3JjOwotICAgIGludCB6ZXJyOwotCi0gICAgLyoKLSAgICAgKiBDcmVhdGUgYW4gaW5wdXQgYnVmZmVyIGFuZCBhbiBvdXRwdXQgYnVmZmVyLgotICAgICAqLwotICAgIGluQnVmID0gbmV3IHVuc2lnbmVkIGNoYXJba0J1ZlNpemVdOwotICAgIG91dEJ1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW2tCdWZTaXplXTsKLSAgICBpZiAoaW5CdWYgPT0gTlVMTCB8fCBvdXRCdWYgPT0gTlVMTCkgewotICAgICAgICByZXN1bHQgPSBOT19NRU1PUlk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIEluaXRpYWxpemUgdGhlIHpsaWIgc3RyZWFtLgotICAgICAqLwotICAgIG1lbXNldCgmenN0cmVhbSwgMCwgc2l6ZW9mKHpzdHJlYW0pKTsKLSAgICB6c3RyZWFtLnphbGxvYyA9IFpfTlVMTDsKLSAgICB6c3RyZWFtLnpmcmVlID0gWl9OVUxMOwotICAgIHpzdHJlYW0ub3BhcXVlID0gWl9OVUxMOwotICAgIHpzdHJlYW0ubmV4dF9pbiA9IE5VTEw7Ci0gICAgenN0cmVhbS5hdmFpbF9pbiA9IDA7Ci0gICAgenN0cmVhbS5uZXh0X291dCA9IG91dEJ1ZjsKLSAgICB6c3RyZWFtLmF2YWlsX291dCA9IGtCdWZTaXplOwotICAgIHpzdHJlYW0uZGF0YV90eXBlID0gWl9VTktOT1dOOwotCi0gICAgemVyciA9IGRlZmxhdGVJbml0MigmenN0cmVhbSwgWl9CRVNUX0NPTVBSRVNTSU9OLAotICAgICAgICBaX0RFRkxBVEVELCAtTUFYX1dCSVRTLCBERUZfTUVNX0xFVkVMLCBaX0RFRkFVTFRfU1RSQVRFR1kpOwotICAgIGlmICh6ZXJyICE9IFpfT0spIHsKLSAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgaWYgKHplcnIgPT0gWl9WRVJTSU9OX0VSUk9SKSB7Ci0gICAgICAgICAgICBBTE9HRSgiSW5zdGFsbGVkIHpsaWIgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBsaW5rZWQgdmVyc2lvbiAoJXMpXG4iLAotICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HRCgiQ2FsbCB0byBkZWZsYXRlSW5pdDIgZmFpbGVkICh6ZXJyPSVkKVxuIiwgemVycik7Ci0gICAgICAgIH0KLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQotICAgIGNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotCi0gICAgLyoKLSAgICAgKiBMb29wIHdoaWxlIHdlIGhhdmUgZGF0YS4KLSAgICAgKi8KLSAgICBkbyB7Ci0gICAgICAgIHNpemVfdCBnZXRTaXplOwotICAgICAgICBpbnQgZmx1c2g7Ci0KLSAgICAgICAgLyogb25seSByZWFkIGlmIHRoZSBpbnB1dCBidWZmZXIgaXMgZW1wdHkgKi8KLSAgICAgICAgaWYgKHpzdHJlYW0uYXZhaWxfaW4gPT0gMCAmJiAhYXRFb2YpIHsKLSAgICAgICAgICAgIEFMT0dWKCIrKysgcmVhZGluZyAlZCBieXRlc1xuIiwgKGludClrQnVmU2l6ZSk7Ci0gICAgICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgICAgIGdldFNpemUgPSBzaXplID4ga0J1ZlNpemUgPyBrQnVmU2l6ZSA6IHNpemU7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGluQnVmLCBkYXRhLCBnZXRTaXplKTsKLSAgICAgICAgICAgICAgICBkYXRhID0gKChjb25zdCBjaGFyKilkYXRhKSArIGdldFNpemU7Ci0gICAgICAgICAgICAgICAgc2l6ZSAtPSBnZXRTaXplOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBnZXRTaXplID0gZnJlYWQoaW5CdWYsIDEsIGtCdWZTaXplLCBzcmNGcCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZlcnJvcihzcmNGcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR0QoImRlZmxhdGUgcmVhZCBmYWlsZWQgKGVycm5vPSVkKVxuIiwgZXJybm8pOwotICAgICAgICAgICAgICAgICAgICBnb3RvIHpfYmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZ2V0U2l6ZSA8IGtCdWZTaXplKSB7Ci0gICAgICAgICAgICAgICAgQUxPR1YoIisrKyAgZ290ICVkIGJ5dGVzLCBFT0YgcmVhY2hlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKGludClnZXRTaXplKTsKLSAgICAgICAgICAgICAgICBhdEVvZiA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNyYyA9IGNyYzMyKGNyYywgaW5CdWYsIGdldFNpemUpOwotCi0gICAgICAgICAgICB6c3RyZWFtLm5leHRfaW4gPSBpbkJ1ZjsKLSAgICAgICAgICAgIHpzdHJlYW0uYXZhaWxfaW4gPSBnZXRTaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF0RW9mKQotICAgICAgICAgICAgZmx1c2ggPSBaX0ZJTklTSDsgICAgICAgLyogdGVsbCB6bGliIHRoYXQgd2UncmUgZG9uZSAqLwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmbHVzaCA9IFpfTk9fRkxVU0g7ICAgICAvKiBtb3JlIHRvIGNvbWUhICovCi0KLSAgICAgICAgemVyciA9IGRlZmxhdGUoJnpzdHJlYW0sIGZsdXNoKTsKLSAgICAgICAgaWYgKHplcnIgIT0gWl9PSyAmJiB6ZXJyICE9IFpfU1RSRUFNX0VORCkgewotICAgICAgICAgICAgQUxPR0QoInpsaWIgZGVmbGF0ZSBjYWxsIGZhaWxlZCAoemVycj0lZClcbiIsIHplcnIpOwotICAgICAgICAgICAgcmVzdWx0ID0gVU5LTk9XTl9FUlJPUjsKLSAgICAgICAgICAgIGdvdG8gel9iYWlsOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogd3JpdGUgd2hlbiB3ZSdyZSBmdWxsIG9yIHdoZW4gd2UncmUgZG9uZSAqLwotICAgICAgICBpZiAoenN0cmVhbS5hdmFpbF9vdXQgPT0gMCB8fAotICAgICAgICAgICAgKHplcnIgPT0gWl9TVFJFQU1fRU5EICYmIHpzdHJlYW0uYXZhaWxfb3V0ICE9ICh1SW50KSBrQnVmU2l6ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFMT0dWKCIrKysgd3JpdGluZyAlZCBieXRlc1xuIiwgKGludCkgKHpzdHJlYW0ubmV4dF9vdXQgLSBvdXRCdWYpKTsKLSAgICAgICAgICAgIGlmIChmd3JpdGUob3V0QnVmLCAxLCB6c3RyZWFtLm5leHRfb3V0IC0gb3V0QnVmLCBkc3RGcCkgIT0KLSAgICAgICAgICAgICAgICAoc2l6ZV90KSh6c3RyZWFtLm5leHRfb3V0IC0gb3V0QnVmKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBTE9HRCgid3JpdGUgJWQgZmFpbGVkIGluIGRlZmxhdGVcbiIsCi0gICAgICAgICAgICAgICAgICAgIChpbnQpICh6c3RyZWFtLm5leHRfb3V0IC0gb3V0QnVmKSk7Ci0gICAgICAgICAgICAgICAgZ290byB6X2JhaWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHpzdHJlYW0ubmV4dF9vdXQgPSBvdXRCdWY7Ci0gICAgICAgICAgICB6c3RyZWFtLmF2YWlsX291dCA9IGtCdWZTaXplOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoemVyciA9PSBaX09LKTsKLQotICAgIGFzc2VydCh6ZXJyID09IFpfU1RSRUFNX0VORCk7ICAgICAgIC8qIG90aGVyIGVycm9ycyBzaG91bGQndmUgYmVlbiBjYXVnaHQgKi8KLQotICAgICpwQ1JDMzIgPSBjcmM7Ci0KLXpfYmFpbDoKLSAgICBkZWZsYXRlRW5kKCZ6c3RyZWFtKTsgICAgICAgIC8qIGZyZWUgdXAgYW55IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzICovCi0KLWJhaWw6Ci0gICAgZGVsZXRlW10gaW5CdWY7Ci0gICAgZGVsZXRlW10gb3V0QnVmOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIE1hcmsgYW4gZW50cnkgYXMgZGVsZXRlZC4KLSAqCi0gKiBXZSB3aWxsIGV2ZW50dWFsbHkgbmVlZCB0byBjcnVuY2ggdGhlIGZpbGUgZG93biwgYnV0IGlmIHNldmVyYWwgZmlsZXMKLSAqIGFyZSBiZWluZyByZW1vdmVkIChwZXJoYXBzIGFzIHBhcnQgb2YgYW4gInVwZGF0ZSIgcHJvY2Vzcykgd2UgY2FuIG1ha2UKLSAqIHRoaW5ncyBjb25zaWRlcmFibHkgZmFzdGVyIGJ5IGRlZmVycmluZyB0aGUgcmVtb3ZhbCB0byAiZmx1c2giIHRpbWUuCi0gKi8KLXN0YXR1c190IFppcEZpbGU6OnJlbW92ZShaaXBFbnRyeSogcEVudHJ5KQotewotICAgIC8qCi0gICAgICogU2hvdWxkIHZlcmlmeSB0aGF0IHBFbnRyeSBpcyBhY3R1YWxseSBwYXJ0IG9mIHRoaXMgYXJjaGl2ZSwgYW5kCi0gICAgICogbm90IHNvbWUgc3RyYXkgWmlwRW50cnkgZnJvbSBhIGRpZmZlcmVudCBmaWxlLgotICAgICAqLwotCi0gICAgLyogbWFyayBlbnRyeSBhcyBkZWxldGVkLCBhbmQgbWFyayBhcmNoaXZlIGFzIGRpcnR5ICovCi0gICAgcEVudHJ5LT5zZXREZWxldGVkKCk7Ci0gICAgbU5lZWRDRFJld3JpdGUgPSB0cnVlOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotLyoKLSAqIEZsdXNoIGFueSBwZW5kaW5nIHdyaXRlcy4KLSAqCi0gKiBJbiBwYXJ0aWN1bGFyLCB0aGlzIHdpbGwgY3J1bmNoIG91dCBkZWxldGVkIGVudHJpZXMsIGFuZCB3cml0ZSB0aGUKLSAqIENlbnRyYWwgRGlyZWN0b3J5IGFuZCBFT0NEIGlmIHdlIGhhdmUgc3RvbXBlZCBvbiB0aGVtLgotICovCi1zdGF0dXNfdCBaaXBGaWxlOjpmbHVzaCh2b2lkKQotewotICAgIHN0YXR1c190IHJlc3VsdCA9IE5PX0VSUk9SOwotICAgIGxvbmcgZW9jZFBvc247Ci0gICAgaW50IGksIGNvdW50OwotCi0gICAgaWYgKG1SZWFkT25seSkKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIGlmICghbU5lZWRDRFJld3JpdGUpCi0gICAgICAgIHJldHVybiBOT19FUlJPUjsKLQotICAgIGFzc2VydChtWmlwRnAgIT0gTlVMTCk7Ci0KLSAgICByZXN1bHQgPSBjcnVuY2hBcmNoaXZlKCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGlmIChmc2VlayhtWmlwRnAsIG1FT0NELm1DZW50cmFsRGlyT2Zmc2V0LCBTRUVLX1NFVCkgIT0gMCkKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0KLSAgICBjb3VudCA9IG1FbnRyaWVzLnNpemUoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBaaXBFbnRyeSogcEVudHJ5ID0gbUVudHJpZXNbaV07Ci0gICAgICAgIHBFbnRyeS0+bUNERS53cml0ZShtWmlwRnApOwotICAgIH0KLQotICAgIGVvY2RQb3NuID0gZnRlbGwobVppcEZwKTsKLSAgICBtRU9DRC5tQ2VudHJhbERpclNpemUgPSBlb2NkUG9zbiAtIG1FT0NELm1DZW50cmFsRGlyT2Zmc2V0OwotCi0gICAgbUVPQ0Qud3JpdGUobVppcEZwKTsKLQotICAgIC8qCi0gICAgICogSWYgd2UgaGFkIHNvbWUgc3R1ZmYgYmxvYXQgdXAgZHVyaW5nIGNvbXByZXNzaW9uIGFuZCBnZXQgcmVwbGFjZWQKLSAgICAgKiB3aXRoIHBsYWluIGZpbGVzLCBvciBpZiB3ZSBkZWxldGVkIHNvbWUgZW50cmllcywgdGhlcmUncyBhIGxvdAotICAgICAqIG9mIHdhc3RlZCBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiAgUmVtb3ZlIGl0IG5vdy4KLSAgICAgKi8KLSAgICBpZiAoZnRydW5jYXRlKGZpbGVubyhtWmlwRnApLCBmdGVsbChtWmlwRnApKSAhPSAwKSB7Ci0gICAgICAgIEFMT0dXKCJmdHJ1bmNhdGUgZmFpbGVkICVsZDogJXNcbiIsIGZ0ZWxsKG1aaXBGcCksIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIC8vIG5vdCBmYXRhbAotICAgIH0KLQotICAgIC8qIHNob3VsZCB3ZSBjbGVhciB0aGUgIm5ld2x5IGFkZGVkIiBmbGFnIGluIGFsbCBlbnRyaWVzIG5vdz8gKi8KLQotICAgIG1OZWVkQ0RSZXdyaXRlID0gZmFsc2U7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgotICogQ3J1bmNoIGRlbGV0ZWQgZmlsZXMgb3V0IG9mIGFuIGFyY2hpdmUgYnkgc2hpZnRpbmcgdGhlIGxhdGVyIGZpbGVzIGRvd24uCi0gKgotICogQmVjYXVzZSB3ZSdyZSBub3QgdXNpbmcgYSB0ZW1wIGZpbGUsIHdlIGRvIHRoZSBvcGVyYXRpb24gaW5zaWRlIHRoZQotICogY3VycmVudCBmaWxlLgotICovCi1zdGF0dXNfdCBaaXBGaWxlOjpjcnVuY2hBcmNoaXZlKHZvaWQpCi17Ci0gICAgc3RhdHVzX3QgcmVzdWx0ID0gTk9fRVJST1I7Ci0gICAgaW50IGksIGNvdW50OwotICAgIGxvbmcgZGVsQ291bnQsIGFkanVzdDsKLQotI2lmIDAKLSAgICBwcmludGYoIkNPTlRFTlRTOlxuIik7Ci0gICAgZm9yIChpID0gMDsgaSA8IChpbnQpIG1FbnRyaWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiICVkOiBsZmhPZmY9JWxkIGRlbD0lZFxuIiwKLSAgICAgICAgICAgIGksIG1FbnRyaWVzW2ldLT5nZXRMRkhPZmZzZXQoKSwgbUVudHJpZXNbaV0tPmdldERlbGV0ZWQoKSk7Ci0gICAgfQotICAgIHByaW50ZigiICBFTkQgaXMgJWxkXG4iLCAobG9uZykgbUVPQ0QubUNlbnRyYWxEaXJPZmZzZXQpOwotI2VuZGlmCi0KLSAgICAvKgotICAgICAqIFJvbGwgdGhyb3VnaCB0aGUgc2V0IG9mIGZpbGVzLCBzaGlmdGluZyB0aGVtIGFzIGFwcHJvcHJpYXRlLiAgV2UKLSAgICAgKiBjb3VsZCBwcm9iYWJseSBnZXQgYSBzbGlnaHQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgYnkgc2xpZGluZwotICAgICAqIG11bHRpcGxlIGZpbGVzIGRvd24gYXQgb25jZSAoYmVjYXVzZSB3ZSBjb3VsZCB1c2UgbGFyZ2VyIHJlYWRzCi0gICAgICogd2hlbiBvcGVyYXRpbmcgb24gYmF0Y2hlcyBvZiBzbWFsbCBmaWxlcyksIGJ1dCBpdCdzIG5vdCB0aGF0IHVzZWZ1bC4KLSAgICAgKi8KLSAgICBjb3VudCA9IG1FbnRyaWVzLnNpemUoKTsKLSAgICBkZWxDb3VudCA9IGFkanVzdCA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgWmlwRW50cnkqIHBFbnRyeSA9IG1FbnRyaWVzW2ldOwotICAgICAgICBsb25nIHNwYW47Ci0KLSAgICAgICAgaWYgKHBFbnRyeS0+Z2V0TEZIT2Zmc2V0KCkgIT0gMCkgewotICAgICAgICAgICAgbG9uZyBuZXh0T2Zmc2V0OwotCi0gICAgICAgICAgICAvKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGlzIGVudHJ5IGJ5IGZpbmRpbmcgdGhlIG9mZnNldAotICAgICAgICAgICAgICogb2YgdGhlIG5leHQgZW50cnkuICBEaXJlY3RvcnkgZW50cmllcyBkb24ndCBoYXZlCi0gICAgICAgICAgICAgKiBmaWxlIG9mZnNldHMsIHNvIHdlIG5lZWQgdG8gZmluZCB0aGUgbmV4dCBub24tZGlyZWN0b3J5Ci0gICAgICAgICAgICAgKiBlbnRyeS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbmV4dE9mZnNldCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpaSA9IGkrMTsgbmV4dE9mZnNldCA9PSAwICYmIGlpIDwgY291bnQ7IGlpKyspCi0gICAgICAgICAgICAgICAgbmV4dE9mZnNldCA9IG1FbnRyaWVzW2lpXS0+Z2V0TEZIT2Zmc2V0KCk7Ci0gICAgICAgICAgICBpZiAobmV4dE9mZnNldCA9PSAwKQotICAgICAgICAgICAgICAgIG5leHRPZmZzZXQgPSBtRU9DRC5tQ2VudHJhbERpck9mZnNldDsKLSAgICAgICAgICAgIHNwYW4gPSBuZXh0T2Zmc2V0IC0gcEVudHJ5LT5nZXRMRkhPZmZzZXQoKTsKLQotICAgICAgICAgICAgYXNzZXJ0KHNwYW4gPj0gWmlwRW50cnk6OkxvY2FsRmlsZUhlYWRlcjo6a0xGSExlbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBUaGlzIGlzIGEgZGlyZWN0b3J5IGVudHJ5LiAgSXQgZG9lc24ndCBoYXZlCi0gICAgICAgICAgICAgKiBhbnkgYWN0dWFsIGZpbGUgY29udGVudHMsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0bwotICAgICAgICAgICAgICogbW92ZSBhbnl0aGluZy4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc3BhbiA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvL3ByaW50ZigiKysrICVkOiBvZmY9JWxkIHNwYW49JWxkIGRlbD0lZCBbY291bnQ9JWRdXG4iLAotICAgICAgICAvLyAgICBpLCBwRW50cnktPmdldExGSE9mZnNldCgpLCBzcGFuLCBwRW50cnktPmdldERlbGV0ZWQoKSwgY291bnQpOwotCi0gICAgICAgIGlmIChwRW50cnktPmdldERlbGV0ZWQoKSkgewotICAgICAgICAgICAgYWRqdXN0ICs9IHNwYW47Ci0gICAgICAgICAgICBkZWxDb3VudCsrOwotCi0gICAgICAgICAgICBkZWxldGUgcEVudHJ5OwotICAgICAgICAgICAgbUVudHJpZXMucmVtb3ZlQXQoaSk7Ci0KLSAgICAgICAgICAgIC8qIGFkanVzdCBsb29wIGNvbnRyb2wgKi8KLSAgICAgICAgICAgIGNvdW50LS07Ci0gICAgICAgICAgICBpLS07Ci0gICAgICAgIH0gZWxzZSBpZiAoc3BhbiAhPSAwICYmIGFkanVzdCA+IDApIHsKLSAgICAgICAgICAgIC8qIHNodWZmbGUgdGhpcyBlbnRyeSBiYWNrICovCi0gICAgICAgICAgICAvL3ByaW50ZigiKysrIFNodWZmbGluZyAnJXMnIGJhY2sgJWxkXG4iLAotICAgICAgICAgICAgLy8gICAgcEVudHJ5LT5nZXRGaWxlTmFtZSgpLCBhZGp1c3QpOwotICAgICAgICAgICAgcmVzdWx0ID0gZmlsZW1vdmUobVppcEZwLCBwRW50cnktPmdldExGSE9mZnNldCgpIC0gYWRqdXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgcEVudHJ5LT5nZXRMRkhPZmZzZXQoKSwgc3Bhbik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgLyogdGhpcyBpcyB3aHkgeW91IHVzZSBhIHRlbXAgZmlsZSAqLwotICAgICAgICAgICAgICAgIEFMT0dFKCJlcnJvciBkdXJpbmcgY3J1bmNoIC0gYXJjaGl2ZSBpcyB0b2FzdFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcEVudHJ5LT5zZXRMRkhPZmZzZXQocEVudHJ5LT5nZXRMRkhPZmZzZXQoKSAtIGFkanVzdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIEZpeCBFT0NEIGluZm8uICBXZSBoYXZlIHRvIHdhaXQgdW50aWwgdGhlIGVuZCB0byBkbyBzb21lIG9mIHRoaXMKLSAgICAgKiBiZWNhdXNlIHdlIHVzZSBtQ2VudHJhbERpck9mZnNldCB0byBkZXRlcm1pbmUgInNwYW4iIGZvciB0aGUKLSAgICAgKiBsYXN0IGVudHJ5LgotICAgICAqLwotICAgIG1FT0NELm1DZW50cmFsRGlyT2Zmc2V0IC09IGFkanVzdDsKLSAgICBtRU9DRC5tTnVtRW50cmllcyAtPSBkZWxDb3VudDsKLSAgICBtRU9DRC5tVG90YWxOdW1FbnRyaWVzIC09IGRlbENvdW50OwotICAgIG1FT0NELm1DZW50cmFsRGlyU2l6ZSA9IDA7ICAvLyBtYXJrIGludmFsaWQ7IHNldCBieSBmbHVzaCgpCi0KLSAgICBhc3NlcnQobUVPQ0QubU51bUVudHJpZXMgPT0gbUVPQ0QubVRvdGFsTnVtRW50cmllcyk7Ci0gICAgYXNzZXJ0KG1FT0NELm1OdW1FbnRyaWVzID09IGNvdW50KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBXb3JrcyBsaWtlIG1lbW1vdmUoKSwgYnV0IG9uIHBpZWNlcyBvZiBhIGZpbGUuCi0gKi8KLXN0YXR1c190IFppcEZpbGU6OmZpbGVtb3ZlKEZJTEUqIGZwLCBvZmZfdCBkc3QsIG9mZl90IHNyYywgc2l6ZV90IG4pCi17Ci0gICAgaWYgKGRzdCA9PSBzcmMgfHwgbiA8PSAwKQotICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0KLSAgICB1bnNpZ25lZCBjaGFyIHJlYWRCdWZbMzI3NjhdOwotCi0gICAgaWYgKGRzdCA8IHNyYykgewotICAgICAgICAvKiBzaGlmdCBzdHVmZiB0b3dhcmQgc3RhcnQgb2YgZmlsZTsgbXVzdCByZWFkIGZyb20gc3RhcnQgKi8KLSAgICAgICAgd2hpbGUgKG4gIT0gMCkgewotICAgICAgICAgICAgc2l6ZV90IGdldFNpemUgPSBzaXplb2YocmVhZEJ1Zik7Ci0gICAgICAgICAgICBpZiAoZ2V0U2l6ZSA+IG4pCi0gICAgICAgICAgICAgICAgZ2V0U2l6ZSA9IG47Ci0KLSAgICAgICAgICAgIGlmIChmc2VlayhmcCwgKGxvbmcpIHNyYywgU0VFS19TRVQpICE9IDApIHsKLSAgICAgICAgICAgICAgICBBTE9HRCgiZmlsZW1vdmUgc3JjIHNlZWsgJWxkIGZhaWxlZFxuIiwgKGxvbmcpIHNyYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmcmVhZChyZWFkQnVmLCAxLCBnZXRTaXplLCBmcCkgIT0gZ2V0U2l6ZSkgewotICAgICAgICAgICAgICAgIEFMT0dEKCJmaWxlbW92ZSByZWFkICVsZCBvZmY9JWxkIGZhaWxlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGdldFNpemUsIChsb25nKSBzcmMpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZnNlZWsoZnAsIChsb25nKSBkc3QsIFNFRUtfU0VUKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgQUxPR0QoImZpbGVtb3ZlIGRzdCBzZWVrICVsZCBmYWlsZWRcbiIsIChsb25nKSBkc3QpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZndyaXRlKHJlYWRCdWYsIDEsIGdldFNpemUsIGZwKSAhPSBnZXRTaXplKSB7Ci0gICAgICAgICAgICAgICAgQUxPR0QoImZpbGVtb3ZlIHdyaXRlICVsZCBvZmY9JWxkIGZhaWxlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGdldFNpemUsIChsb25nKSBkc3QpOwotICAgICAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzcmMgKz0gZ2V0U2l6ZTsKLSAgICAgICAgICAgIGRzdCArPSBnZXRTaXplOwotICAgICAgICAgICAgbiAtPSBnZXRTaXplOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogc2hpZnQgc3R1ZmYgdG93YXJkIGVuZCBvZiBmaWxlOyBtdXN0IHJlYWQgZnJvbSBlbmQgKi8KLSAgICAgICAgYXNzZXJ0KGZhbHNlKTsgICAgICAvLyB3cml0ZSB0aGlzIHNvbWVkYXksIG1heWJlCi0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgIH0KLQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotCi0vKgotICogR2V0IHRoZSBtb2RpZmljYXRpb24gdGltZSBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yLgotICovCi10aW1lX3QgWmlwRmlsZTo6Z2V0TW9kVGltZShpbnQgZmQpCi17Ci0gICAgc3RydWN0IHN0YXQgc2I7Ci0KLSAgICBpZiAoZnN0YXQoZmQsICZzYikgPCAwKSB7Ci0gICAgICAgIEFMT0dEKCJIRVk6IGZzdGF0IG9uIGZkICVkIGZhaWxlZFxuIiwgZmQpOwotICAgICAgICByZXR1cm4gKHRpbWVfdCkgLTE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNiLnN0X210aW1lOwotfQotCi0KLSNpZiAwICAgICAgIC8qIHRoaXMgaXMgYSBiYWQgaWRlYSAqLwotLyoKLSAqIEdldCBhIGNvcHkgb2YgdGhlIFppcCBmaWxlIGRlc2NyaXB0b3IuCi0gKgotICogV2UgZG9uJ3QgYWxsb3cgdGhpcyBpZiB0aGUgZmlsZSB3YXMgb3BlbmVkIHJlYWQtd3JpdGUgYmVjYXVzZSB3ZSB0ZW5kCi0gKiB0byBsZWF2ZSB0aGUgZmlsZSBjb250ZW50cyBpbiBhbiB1bmNlcnRhaW4gc3RhdGUgYmV0d2VlbiBjYWxscyB0bwotICogZmx1c2goKS4gIFRoZSBkdXBsaWNhdGVkIGZpbGUgZGVzY3JpcHRvciBzaG91bGQgb25seSBiZSB2YWxpZCBmb3IgcmVhZHMuCi0gKi8KLWludCBaaXBGaWxlOjpnZXRaaXBGZCh2b2lkKSBjb25zdAotewotICAgIGlmICghbVJlYWRPbmx5KQotICAgICAgICByZXR1cm4gSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgYXNzZXJ0KG1aaXBGcCAhPSBOVUxMKTsKLQotICAgIGludCBmZDsKLSAgICBmZCA9IGR1cChmaWxlbm8obVppcEZwKSk7Ci0gICAgaWYgKGZkIDwgMCkgewotICAgICAgICBBTE9HRCgiZGlkbid0IHdvcmssIGVycm5vPSVkXG4iLCBlcnJubyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZkOwotfQotI2VuZGlmCi0KLQotI2lmIDAKLS8qCi0gKiBFeHBhbmQgZGF0YS4KLSAqLwotYm9vbCBaaXBGaWxlOjp1bmNvbXByZXNzKGNvbnN0IFppcEVudHJ5KiBwRW50cnksIHZvaWQqIGJ1ZikgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotLy8gZnJlZSB0aGUgbWVtb3J5IHdoZW4geW91J3JlIGRvbmUKLXZvaWQqIFppcEZpbGU6OnVuY29tcHJlc3MoY29uc3QgWmlwRW50cnkqIGVudHJ5KQotewotICAgIHNpemVfdCB1bmxlbiA9IGVudHJ5LT5nZXRVbmNvbXByZXNzZWRMZW4oKTsKLSAgICBzaXplX3QgY2xlbiA9IGVudHJ5LT5nZXRDb21wcmVzc2VkTGVuKCk7Ci0KLSAgICB2b2lkKiBidWYgPSBtYWxsb2ModW5sZW4pOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBmc2VlayhtWmlwRnAsIDAsIFNFRUtfU0VUKTsKLQotICAgIG9mZl90IG9mZnNldCA9IGVudHJ5LT5nZXRGaWxlT2Zmc2V0KCk7Ci0gICAgaWYgKGZzZWVrKG1aaXBGcCwgb2Zmc2V0LCBTRUVLX1NFVCkgIT0gMCkgewotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgc3dpdGNoIChlbnRyeS0+Z2V0Q29tcHJlc3Npb25NZXRob2QoKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgWmlwRW50cnk6OmtDb21wcmVzc1N0b3JlZDogewotICAgICAgICAgICAgc3NpemVfdCBhbXQgPSBmcmVhZChidWYsIDEsIHVubGVuLCBtWmlwRnApOwotICAgICAgICAgICAgaWYgKGFtdCAhPSAoc3NpemVfdCl1bmxlbikgewotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSNpZiAwCi0gICAgICAgICAgICBwcmludGYoImRhdGEuLi5cbiIpOwotICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcCA9ICh1bnNpZ25lZCBjaGFyKilidWY7Ci0gICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBlbmQgPSBwK3VubGVuOwotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPDMyICYmIHAgPCBlbmQ7IGkrKykgewotICAgICAgICAgICAgICAgIHByaW50ZigiMHglMDh4ICIsIChpbnQpKG9mZnNldCsoaSoweDEwKSkpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajwweDEwICYmIHAgPCBlbmQ7IGorKykgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAlMDJ4IiwgKnApOwotICAgICAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBaaXBFbnRyeTo6a0NvbXByZXNzRGVmbGF0ZWQ6IHsKLSAgICAgICAgICAgIGlmICghWmlwVXRpbHM6OmluZmxhdGVUb0J1ZmZlcihtWmlwRnAsIGJ1ZiwgdW5sZW4sIGNsZW4pKSB7Ci0gICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotICAgIHJldHVybiBidWY7Ci0KLWJhaWw6Ci0gICAgZnJlZShidWYpOwotICAgIHJldHVybiBOVUxMOwotfQotCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgWmlwRmlsZTo6RW5kT2ZDZW50cmFsRGlyCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0vKgotICogUmVhZCB0aGUgZW5kLW9mLWNlbnRyYWwtZGlyIGZpZWxkcy4KLSAqCi0gKiAiYnVmIiBzaG91bGQgYmUgcG9zaXRpb25lZCBhdCB0aGUgRU9DRCBzaWduYXR1cmUsIGFuZCBzaG91bGQgY29udGFpbgotICogdGhlIGVudGlyZSBFT0NEIGFyZWEgaW5jbHVkaW5nIHRoZSBjb21tZW50LgotICovCi1zdGF0dXNfdCBaaXBGaWxlOjpFbmRPZkNlbnRyYWxEaXI6OnJlYWRCdWYoY29uc3QgdW5zaWduZWQgY2hhciogYnVmLCBpbnQgbGVuKQotewotICAgIC8qIGRvbid0IGFsbG93IHJlLXVzZSAqLwotICAgIGFzc2VydChtQ29tbWVudCA9PSBOVUxMKTsKLQotICAgIGlmIChsZW4gPCBrRU9DRExlbikgewotICAgICAgICAvKiBsb29rcyBsaWtlIFpJUCBmaWxlIGdvdCB0cnVuY2F0ZWQgKi8KLSAgICAgICAgQUxPR0QoIiBaaXAgRU9DRDogZXhwZWN0ZWQgPj0gJWQgYnl0ZXMsIGZvdW5kICVkXG4iLAotICAgICAgICAgICAga0VPQ0RMZW4sIGxlbik7Ci0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICAvKiB0aGlzIHNob3VsZCBwcm9iYWJseSBiZSBhbiBhc3NlcnQoKSAqLwotICAgIGlmIChaaXBFbnRyeTo6Z2V0TG9uZ0xFKCZidWZbMHgwMF0pICE9IGtTaWduYXR1cmUpCi0gICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotCi0gICAgbURpc2tOdW1iZXIgPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MDRdKTsKLSAgICBtRGlza1dpdGhDZW50cmFsRGlyID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDA2XSk7Ci0gICAgbU51bUVudHJpZXMgPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MDhdKTsKLSAgICBtVG90YWxOdW1FbnRyaWVzID0gWmlwRW50cnk6OmdldFNob3J0TEUoJmJ1ZlsweDBhXSk7Ci0gICAgbUNlbnRyYWxEaXJTaXplID0gWmlwRW50cnk6OmdldExvbmdMRSgmYnVmWzB4MGNdKTsKLSAgICBtQ2VudHJhbERpck9mZnNldCA9IFppcEVudHJ5OjpnZXRMb25nTEUoJmJ1ZlsweDEwXSk7Ci0gICAgbUNvbW1lbnRMZW4gPSBaaXBFbnRyeTo6Z2V0U2hvcnRMRSgmYnVmWzB4MTRdKTsKLQotICAgIC8vIFRPRE86IHZhbGlkYXRlIG1DZW50cmFsRGlyT2Zmc2V0Ci0KLSAgICBpZiAobUNvbW1lbnRMZW4gPiAwKSB7Ci0gICAgICAgIGlmIChrRU9DRExlbiArIG1Db21tZW50TGVuID4gbGVuKSB7Ci0gICAgICAgICAgICBBTE9HRCgiRU9DRCglZCkgKyBjb21tZW50KCVkKSBleGNlZWRzIGxlbiAoJWQpXG4iLAotICAgICAgICAgICAgICAgIGtFT0NETGVuLCBtQ29tbWVudExlbiwgbGVuKTsKLSAgICAgICAgICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIG1Db21tZW50ID0gbmV3IHVuc2lnbmVkIGNoYXJbbUNvbW1lbnRMZW5dOwotICAgICAgICBtZW1jcHkobUNvbW1lbnQsIGJ1ZiArIGtFT0NETGVuLCBtQ29tbWVudExlbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi0vKgotICogV3JpdGUgYW4gZW5kLW9mLWNlbnRyYWwtZGlyZWN0b3J5IHNlY3Rpb24uCi0gKi8KLXN0YXR1c190IFppcEZpbGU6OkVuZE9mQ2VudHJhbERpcjo6d3JpdGUoRklMRSogZnApCi17Ci0gICAgdW5zaWduZWQgY2hhciBidWZba0VPQ0RMZW5dOwotCi0gICAgWmlwRW50cnk6OnB1dExvbmdMRSgmYnVmWzB4MDBdLCBrU2lnbmF0dXJlKTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MDRdLCBtRGlza051bWJlcik7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDA2XSwgbURpc2tXaXRoQ2VudHJhbERpcik7Ci0gICAgWmlwRW50cnk6OnB1dFNob3J0TEUoJmJ1ZlsweDA4XSwgbU51bUVudHJpZXMpOwotICAgIFppcEVudHJ5OjpwdXRTaG9ydExFKCZidWZbMHgwYV0sIG1Ub3RhbE51bUVudHJpZXMpOwotICAgIFppcEVudHJ5OjpwdXRMb25nTEUoJmJ1ZlsweDBjXSwgbUNlbnRyYWxEaXJTaXplKTsKLSAgICBaaXBFbnRyeTo6cHV0TG9uZ0xFKCZidWZbMHgxMF0sIG1DZW50cmFsRGlyT2Zmc2V0KTsKLSAgICBaaXBFbnRyeTo6cHV0U2hvcnRMRSgmYnVmWzB4MTRdLCBtQ29tbWVudExlbik7Ci0KLSAgICBpZiAoZndyaXRlKGJ1ZiwgMSwga0VPQ0RMZW4sIGZwKSAhPSBrRU9DRExlbikKLSAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7Ci0gICAgaWYgKG1Db21tZW50TGVuID4gMCkgewotICAgICAgICBhc3NlcnQobUNvbW1lbnQgIT0gTlVMTCk7Ci0gICAgICAgIGlmIChmd3JpdGUobUNvbW1lbnQsIG1Db21tZW50TGVuLCAxLCBmcCkgIT0gbUNvbW1lbnRMZW4pCi0gICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKLSAgICB9Ci0KLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLS8qCi0gKiBEdW1wIHRoZSBjb250ZW50cyBvZiBhbiBFbmRPZkNlbnRyYWxEaXIgb2JqZWN0LgotICovCi12b2lkIFppcEZpbGU6OkVuZE9mQ2VudHJhbERpcjo6ZHVtcCh2b2lkKSBjb25zdAotewotICAgIEFMT0dEKCIgRW5kT2ZDZW50cmFsRGlyIGNvbnRlbnRzOlxuIik7Ci0gICAgQUxPR0QoIiAgZGlza051bT0ldSBkaXNrV0NEPSV1IG51bUVudD0ldSB0b3RhbE51bUVudD0ldVxuIiwKLSAgICAgICAgbURpc2tOdW1iZXIsIG1EaXNrV2l0aENlbnRyYWxEaXIsIG1OdW1FbnRyaWVzLCBtVG90YWxOdW1FbnRyaWVzKTsKLSAgICBBTE9HRCgiICBjZW50RGlyU2l6ZT0lbHUgY2VudERpck9mZj0lbHUgY29tbWVudExlbj0ldVxuIiwKLSAgICAgICAgbUNlbnRyYWxEaXJTaXplLCBtQ2VudHJhbERpck9mZnNldCwgbUNvbW1lbnRMZW4pOwotfQotCmRpZmYgLS1naXQgYS90b29scy9hYXB0L1ppcEZpbGUuaCBiL3Rvb2xzL2FhcHQvWmlwRmlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODc3NTUwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvWmlwRmlsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLwotLy8gR2VuZXJhbC1wdXJwb3NlIFppcCBhcmNoaXZlIGFjY2Vzcy4gIFRoaXMgY2xhc3MgYWxsb3dzIGJvdGggcmVhZGluZyBhbmQKLS8vIHdyaXRpbmcgdG8gWmlwIGFyY2hpdmVzLCBpbmNsdWRpbmcgZGVsZXRpb24gb2YgZXhpc3RpbmcgZW50cmllcy4KLS8vCi0jaWZuZGVmIF9fTElCU19aSVBGSUxFX0gKLSNkZWZpbmUgX19MSUJTX1pJUEZJTEVfSAotCi0jaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgIlppcEVudHJ5LmgiCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotLyoKLSAqIE1hbmlwdWxhdGUgYSBaaXAgYXJjaGl2ZS4KLSAqCi0gKiBTb21lIGNoYW5nZXMgd2lsbCBub3QgYmUgdmlzaWJsZSBpbiB0aGUgdW50aWwgdW50aWwgImZsdXNoIiBpcyBjYWxsZWQuCi0gKgotICogVGhlIGNvcnJlY3Qgd2F5IHRvIHVwZGF0ZSBhIGZpbGUgYXJjaGl2ZSBpcyB0byBtYWtlIGFsbCBjaGFuZ2VzIHRvIGEKLSAqIGNvcHkgb2YgdGhlIGFyY2hpdmUgaW4gYSB0ZW1wb3JhcnkgZmlsZSwgYW5kIHRoZW4gdW5saW5rL3JlbmFtZSBvdmVyCi0gKiB0aGUgb3JpZ2luYWwgYWZ0ZXIgZXZlcnl0aGluZyBjb21wbGV0ZXMuICBCZWNhdXNlIHdlJ3JlIG9ubHkgaW50ZXJlc3RlZAotICogaW4gdXNpbmcgdGhpcyBmb3IgcGFja2FnaW5nLCB3ZSBkb24ndCB3b3JyeSBhYm91dCBzdWNoIHRoaW5ncy4gIENyYXNoaW5nCi0gKiBhZnRlciBtYWtpbmcgY2hhbmdlcyBhbmQgYmVmb3JlIGZsdXNoKCkgY29tcGxldGVzIGNvdWxkIGxlYXZlIHVzIHdpdGgKLSAqIGFuIHVudXNhYmxlIFppcCBhcmNoaXZlLgotICovCi1jbGFzcyBaaXBGaWxlIHsKLXB1YmxpYzoKLSAgICBaaXBGaWxlKHZvaWQpCi0gICAgICA6IG1aaXBGcChOVUxMKSwgbVJlYWRPbmx5KGZhbHNlKSwgbU5lZWRDRFJld3JpdGUoZmFsc2UpCi0gICAgICB7fQotICAgIH5aaXBGaWxlKHZvaWQpIHsKLSAgICAgICAgaWYgKCFtUmVhZE9ubHkpCi0gICAgICAgICAgICBmbHVzaCgpOwotICAgICAgICBpZiAobVppcEZwICE9IE5VTEwpCi0gICAgICAgICAgICBmY2xvc2UobVppcEZwKTsKLSAgICAgICAgZGlzY2FyZEVudHJpZXMoKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIE9wZW4gYSBuZXcgb3IgZXhpc3RpbmcgYXJjaGl2ZS4KLSAgICAgKi8KLSAgICBlbnVtIHsKLSAgICAgICAga09wZW5SZWFkT25seSAgID0gMHgwMSwKLSAgICAgICAga09wZW5SZWFkV3JpdGUgID0gMHgwMiwKLSAgICAgICAga09wZW5DcmVhdGUgICAgID0gMHgwNCwgICAgIC8vIGNyZWF0ZSBpZiBpdCBkb2Vzbid0IGV4aXN0Ci0gICAgICAgIGtPcGVuVHJ1bmNhdGUgICA9IDB4MDgsICAgICAvLyBpZiBpdCBleGlzdHMsIGVtcHR5IGl0Ci0gICAgfTsKLSAgICBzdGF0dXNfdCBvcGVuKGNvbnN0IGNoYXIqIHppcEZpbGVOYW1lLCBpbnQgZmxhZ3MpOwotCi0gICAgLyoKLSAgICAgKiBBZGQgYSBmaWxlIHRvIHRoZSBlbmQgb2YgdGhlIGFyY2hpdmUuICBTcGVjaWZ5IHdoZXRoZXIgeW91IHdhbnQgdGhlCi0gICAgICogbGlicmFyeSB0byB0cnkgdG8gc3RvcmUgaXQgY29tcHJlc3NlZC4KLSAgICAgKgotICAgICAqIElmICJzdG9yYWdlTmFtZSIgaXMgc3BlY2lmaWVkLCB0aGUgYXJjaGl2ZSB3aWxsIHVzZSB0aGF0IGluc3RlYWQKLSAgICAgKiBvZiAiZmlsZU5hbWUiLgotICAgICAqCi0gICAgICogSWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBlbnRyeSB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoZSBjYWxsIGZhaWxzLgotICAgICAqIEV4aXN0aW5nIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBuYW1lIG11c3QgYmUgcmVtb3ZlZCBmaXJzdC4KLSAgICAgKgotICAgICAqIElmICJwcEVudHJ5IiBpcyBub24tTlVMTCwgYSBwb2ludGVyIHRvIHRoZSBuZXcgZW50cnkgd2lsbCBiZSByZXR1cm5lZC4KLSAgICAgKi8KLSAgICBzdGF0dXNfdCBhZGQoY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBjb21wcmVzc2lvbk1ldGhvZCwKLSAgICAgICAgWmlwRW50cnkqKiBwcEVudHJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZChmaWxlTmFtZSwgZmlsZU5hbWUsIGNvbXByZXNzaW9uTWV0aG9kLCBwcEVudHJ5KTsKLSAgICB9Ci0gICAgc3RhdHVzX3QgYWRkKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBjb25zdCBjaGFyKiBzdG9yYWdlTmFtZSwKLSAgICAgICAgaW50IGNvbXByZXNzaW9uTWV0aG9kLCBaaXBFbnRyeSoqIHBwRW50cnkpCi0gICAgewotICAgICAgICByZXR1cm4gYWRkQ29tbW9uKGZpbGVOYW1lLCBOVUxMLCAwLCBzdG9yYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBaaXBFbnRyeTo6a0NvbXByZXNzU3RvcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uTWV0aG9kLCBwcEVudHJ5KTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIEFkZCBhIGZpbGUgdGhhdCBpcyBhbHJlYWR5IGNvbXByZXNzZWQgd2l0aCBnemlwLgotICAgICAqCi0gICAgICogSWYgInBwRW50cnkiIGlzIG5vbi1OVUxMLCBhIHBvaW50ZXIgdG8gdGhlIG5ldyBlbnRyeSB3aWxsIGJlIHJldHVybmVkLgotICAgICAqLwotICAgIHN0YXR1c190IGFkZEd6aXAoY29uc3QgY2hhciogZmlsZU5hbWUsIGNvbnN0IGNoYXIqIHN0b3JhZ2VOYW1lLAotICAgICAgICBaaXBFbnRyeSoqIHBwRW50cnkpCi0gICAgewotICAgICAgICByZXR1cm4gYWRkQ29tbW9uKGZpbGVOYW1lLCBOVUxMLCAwLCBzdG9yYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBaaXBFbnRyeTo6a0NvbXByZXNzRGVmbGF0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgWmlwRW50cnk6OmtDb21wcmVzc0RlZmxhdGVkLCBwcEVudHJ5KTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIEFkZCBhIGZpbGUgZnJvbSBhbiBpbi1tZW1vcnkgZGF0YSBidWZmZXIuCi0gICAgICoKLSAgICAgKiBJZiAicHBFbnRyeSIgaXMgbm9uLU5VTEwsIGEgcG9pbnRlciB0byB0aGUgbmV3IGVudHJ5IHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgICovCi0gICAgc3RhdHVzX3QgYWRkKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBzdG9yYWdlTmFtZSwKLSAgICAgICAgaW50IGNvbXByZXNzaW9uTWV0aG9kLCBaaXBFbnRyeSoqIHBwRW50cnkpCi0gICAgewotICAgICAgICByZXR1cm4gYWRkQ29tbW9uKE5VTEwsIGRhdGEsIHNpemUsIHN0b3JhZ2VOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIFppcEVudHJ5OjprQ29tcHJlc3NTdG9yZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb25NZXRob2QsIHBwRW50cnkpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogQWRkIGFuIGVudHJ5IGJ5IGNvcHlpbmcgaXQgZnJvbSBhbm90aGVyIHppcCBmaWxlLiAgSWYgInBhZGRpbmciIGlzCi0gICAgICogbm9uemVybywgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgImV4dHJhIgotICAgICAqIGZpZWxkIGluIHRoZSBoZWFkZXIuCi0gICAgICoKLSAgICAgKiBJZiAicHBFbnRyeSIgaXMgbm9uLU5VTEwsIGEgcG9pbnRlciB0byB0aGUgbmV3IGVudHJ5IHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgICovCi0gICAgc3RhdHVzX3QgYWRkKGNvbnN0IFppcEZpbGUqIHBTb3VyY2VaaXAsIGNvbnN0IFppcEVudHJ5KiBwU291cmNlRW50cnksCi0gICAgICAgIGludCBwYWRkaW5nLCBaaXBFbnRyeSoqIHBwRW50cnkpOwotCi0gICAgLyoKLSAgICAgKiBNYXJrIGFuIGVudHJ5IGFzIGhhdmluZyBiZWVuIHJlbW92ZWQuICBJdCBpcyBub3QgYWN0dWFsbHkgZGVsZXRlZAotICAgICAqIGZyb20gdGhlIGFyY2hpdmUgb3Igb3VyIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB1bnRpbCBmbHVzaCgpIGlzCi0gICAgICogY2FsbGVkLgotICAgICAqLwotICAgIHN0YXR1c190IHJlbW92ZShaaXBFbnRyeSogcEVudHJ5KTsKLQotICAgIC8qCi0gICAgICogRmx1c2ggY2hhbmdlcy4gIElmIG1OZWVkQ0RSZXdyaXRlIGlzIHNldCwgdGhpcyB3cml0ZXMgdGhlIGNlbnRyYWwgZGlyLgotICAgICAqLwotICAgIHN0YXR1c190IGZsdXNoKHZvaWQpOwotCi0gICAgLyoKLSAgICAgKiBFeHBhbmQgdGhlIGRhdGEgaW50byB0aGUgYnVmZmVyIHByb3ZpZGVkLiAgVGhlIGJ1ZmZlciBtdXN0IGhvbGQKLSAgICAgKiBhdCBsZWFzdCA8dW5jb21wcmVzc2VkIGxlbj4gYnl0ZXMuICBWYXJpYXRpb24gZXhwYW5kcyBkaXJlY3RseQotICAgICAqIHRvIGEgZmlsZS4KLSAgICAgKgotICAgICAqIFJldHVybnMgImZhbHNlIiBpZiBhbiBlcnJvciB3YXMgZW5jb3VudGVyZWQgaW4gdGhlIGNvbXByZXNzZWQgZGF0YS4KLSAgICAgKi8KLSAgICAvL2Jvb2wgdW5jb21wcmVzcyhjb25zdCBaaXBFbnRyeSogcEVudHJ5LCB2b2lkKiBidWYpIGNvbnN0OwotICAgIC8vYm9vbCB1bmNvbXByZXNzKGNvbnN0IFppcEVudHJ5KiBwRW50cnksIEZJTEUqIGZwKSBjb25zdDsKLSAgICB2b2lkKiB1bmNvbXByZXNzKGNvbnN0IFppcEVudHJ5KiBwRW50cnkpOwotCi0gICAgLyoKLSAgICAgKiBHZXQgYW4gZW50cnksIGJ5IG5hbWUuICBSZXR1cm5zIE5VTEwgaWYgbm90IGZvdW5kLgotICAgICAqCi0gICAgICogRG9lcyBub3QgcmV0dXJuIGVudHJpZXMgcGVuZGluZyBkZWxldGlvbi4KLSAgICAgKi8KLSAgICBaaXBFbnRyeSogZ2V0RW50cnlCeU5hbWUoY29uc3QgY2hhciogZmlsZU5hbWUpIGNvbnN0OwotCi0gICAgLyoKLSAgICAgKiBHZXQgdGhlIE50aCBlbnRyeSBpbiB0aGUgYXJjaGl2ZS4KLSAgICAgKgotICAgICAqIFRoaXMgd2lsbCByZXR1cm4gYW4gZW50cnkgdGhhdCBpcyBwZW5kaW5nIGRlbGV0aW9uLgotICAgICAqLwotICAgIGludCBnZXROdW1FbnRyaWVzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1FbnRyaWVzLnNpemUoKTsgfQotICAgIFppcEVudHJ5KiBnZXRFbnRyeUJ5SW5kZXgoaW50IGlkeCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgLyogdGhlc2UgYXJlIHByaXZhdGUgYW5kIG5vdCBkZWZpbmVkICovCi0gICAgWmlwRmlsZShjb25zdCBaaXBGaWxlJiBzcmMpOwotICAgIFppcEZpbGUmIG9wZXJhdG9yPShjb25zdCBaaXBGaWxlJiBzcmMpOwotCi0gICAgY2xhc3MgRW5kT2ZDZW50cmFsRGlyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEVuZE9mQ2VudHJhbERpcih2b2lkKSA6Ci0gICAgICAgICAgICBtRGlza051bWJlcigwKSwKLSAgICAgICAgICAgIG1EaXNrV2l0aENlbnRyYWxEaXIoMCksCi0gICAgICAgICAgICBtTnVtRW50cmllcygwKSwKLSAgICAgICAgICAgIG1Ub3RhbE51bUVudHJpZXMoMCksCi0gICAgICAgICAgICBtQ2VudHJhbERpclNpemUoMCksCi0gICAgICAgICAgICBtQ2VudHJhbERpck9mZnNldCgwKSwKLSAgICAgICAgICAgIG1Db21tZW50TGVuKDApLAotICAgICAgICAgICAgbUNvbW1lbnQoTlVMTCkKLSAgICAgICAgICAgIHt9Ci0gICAgICAgIHZpcnR1YWwgfkVuZE9mQ2VudHJhbERpcih2b2lkKSB7Ci0gICAgICAgICAgICBkZWxldGVbXSBtQ29tbWVudDsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXR1c190IHJlYWRCdWYoY29uc3QgdW5zaWduZWQgY2hhciogYnVmLCBpbnQgbGVuKTsKLSAgICAgICAgc3RhdHVzX3Qgd3JpdGUoRklMRSogZnApOwotCi0gICAgICAgIC8vdW5zaWduZWQgbG9uZyAgIG1TaWduYXR1cmU7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtRGlza051bWJlcjsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1EaXNrV2l0aENlbnRyYWxEaXI7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtTnVtRW50cmllczsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG1Ub3RhbE51bUVudHJpZXM7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgICBtQ2VudHJhbERpclNpemU7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgICBtQ2VudHJhbERpck9mZnNldDsgICAgICAvLyBvZmZzZXQgZnJvbSBmaXJzdCBkaXNrCi0gICAgICAgIHVuc2lnbmVkIHNob3J0ICBtQ29tbWVudExlbjsKLSAgICAgICAgdW5zaWduZWQgY2hhciogIG1Db21tZW50OwotCi0gICAgICAgIGVudW0gewotICAgICAgICAgICAga1NpZ25hdHVyZSAgICAgID0gMHgwNjA1NGI1MCwKLSAgICAgICAgICAgIGtFT0NETGVuICAgICAgICA9IDIyLCAgICAgICAvLyBFbmRPZkNlbnRyYWxEaXIgbGVuLCBleGNsLiBjb21tZW50Ci0KLSAgICAgICAgICAgIGtNYXhDb21tZW50TGVuICA9IDY1NTM1LCAgICAvLyBsb25nZXN0IHBvc3NpYmxlIGluIHVzaG9ydAotICAgICAgICAgICAga01heEVPQ0RTZWFyY2ggID0ga01heENvbW1lbnRMZW4gKyBFbmRPZkNlbnRyYWxEaXI6OmtFT0NETGVuLAotCi0gICAgICAgIH07Ci0KLSAgICAgICAgdm9pZCBkdW1wKHZvaWQpIGNvbnN0OwotICAgIH07Ci0KLQotICAgIC8qIHJlYWQgYWxsIGVudHJpZXMgaW4gdGhlIGNlbnRyYWwgZGlyICovCi0gICAgc3RhdHVzX3QgcmVhZENlbnRyYWxEaXIodm9pZCk7Ci0KLSAgICAvKiBjcnVuY2ggZGVsZXRlZCBlbnRyaWVzIG91dCAqLwotICAgIHN0YXR1c190IGNydW5jaEFyY2hpdmUodm9pZCk7Ci0KLSAgICAvKiBjbGVhbiB1cCBtRW50cmllcyAqLwotICAgIHZvaWQgZGlzY2FyZEVudHJpZXModm9pZCk7Ci0KLSAgICAvKiBjb21tb24gaGFuZGxlciBmb3IgYWxsICJhZGQiIGZ1bmN0aW9ucyAqLwotICAgIHN0YXR1c190IGFkZENvbW1vbihjb25zdCBjaGFyKiBmaWxlTmFtZSwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsCi0gICAgICAgIGNvbnN0IGNoYXIqIHN0b3JhZ2VOYW1lLCBpbnQgc291cmNlVHlwZSwgaW50IGNvbXByZXNzaW9uTWV0aG9kLAotICAgICAgICBaaXBFbnRyeSoqIHBwRW50cnkpOwotCi0gICAgLyogY29weSBhbGwgb2YgInNyY0ZwIiBpbnRvICJkc3RGcCIgKi8KLSAgICBzdGF0dXNfdCBjb3B5RnBUb0ZwKEZJTEUqIGRzdEZwLCBGSUxFKiBzcmNGcCwgdW5zaWduZWQgbG9uZyogcENSQzMyKTsKLSAgICAvKiBjb3B5IGFsbCBvZiAiZGF0YSIgaW50byAiZHN0RnAiICovCi0gICAgc3RhdHVzX3QgY29weURhdGFUb0ZwKEZJTEUqIGRzdEZwLAotICAgICAgICBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyogcENSQzMyKTsKLSAgICAvKiBjb3B5IHNvbWUgb2YgInNyY0ZwIiBpbnRvICJkc3RGcCIgKi8KLSAgICBzdGF0dXNfdCBjb3B5UGFydGlhbEZwVG9GcChGSUxFKiBkc3RGcCwgRklMRSogc3JjRnAsIGxvbmcgbGVuZ3RoLAotICAgICAgICB1bnNpZ25lZCBsb25nKiBwQ1JDMzIpOwotICAgIC8qIGxpa2UgbWVtbW92ZSgpLCBidXQgb24gcGFydHMgb2YgYSBzaW5nbGUgZmlsZSAqLwotICAgIHN0YXR1c190IGZpbGVtb3ZlKEZJTEUqIGZwLCBvZmZfdCBkZXN0LCBvZmZfdCBzcmMsIHNpemVfdCBuKTsKLSAgICAvKiBjb21wcmVzcyBhbGwgb2YgInNyY0ZwIiBpbnRvICJkc3RGcCIsIHVzaW5nIERlZmxhdGUgKi8KLSAgICBzdGF0dXNfdCBjb21wcmVzc0ZwVG9GcChGSUxFKiBkc3RGcCwgRklMRSogc3JjRnAsCi0gICAgICAgIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nKiBwQ1JDMzIpOwotCi0gICAgLyogZ2V0IG1vZGlmaWNhdGlvbiBkYXRlIGZyb20gYSBmaWxlIGRlc2NyaXB0b3IgKi8KLSAgICB0aW1lX3QgZ2V0TW9kVGltZShpbnQgZmQpOwotCi0gICAgLyoKLSAgICAgKiBXZSB1c2Ugc3RkaW8gRklMRSosIHdoaWNoIGdpdmVzIHVzIGJ1ZmZlcmluZyBidXQgbWFrZXMgZGVhbGluZwotICAgICAqIHdpdGggZmlsZXMgPjJHQiBhd2t3YXJkLiAgVW50aWwgd2Ugc3VwcG9ydCBaaXA2NCwgd2UncmUgZmluZS4KLSAgICAgKi8KLSAgICBGSUxFKiAgICAgICAgICAgbVppcEZwOyAgICAgICAgICAgICAvLyBaaXAgZmlsZSBwb2ludGVyCi0KLSAgICAvKiBvbmUgb2YgdGhlc2UgcGVyIGZpbGUgKi8KLSAgICBFbmRPZkNlbnRyYWxEaXIgbUVPQ0Q7Ci0KLSAgICAvKiBkaWQgd2Ugb3BlbiB0aGlzIHJlYWQtb25seT8gKi8KLSAgICBib29sICAgICAgICAgICAgbVJlYWRPbmx5OwotCi0gICAgLyogc2V0IHRoaXMgd2hlbiB3ZSB0cmFzaCB0aGUgY2VudHJhbCBkaXIgKi8KLSAgICBib29sICAgICAgICAgICAgbU5lZWRDRFJld3JpdGU7Ci0KLSAgICAvKgotICAgICAqIE9uZSBaaXBFbnRyeSBwZXIgZW50cnkgaW4gdGhlIHppcCBmaWxlLiAgSSdtIHVzaW5nIHBvaW50ZXJzIGluc3RlYWQKLSAgICAgKiBvZiBvYmplY3RzIGJlY2F1c2UgaXQncyBlYXNpZXIgdGhhbiBtYWtpbmcgb3BlcmF0b3I9IHdvcmsgZm9yIHRoZQotICAgICAqIGNsYXNzZXMgYW5kIHN1Yi1jbGFzc2VzLgotICAgICAqLwotICAgIFZlY3RvcjxaaXBFbnRyeSo+ICAgbUVudHJpZXM7Ci19OwotCi19OyAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gX19MSUJTX1pJUEZJTEVfSApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9wcmludGFway5jcHAgYi90b29scy9hYXB0L3ByaW50YXBrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNmNzNkOC4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L3ByaW50YXBrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0jaW5jbHVkZSA8dXRpbHMvUmVzb3VyY2VUeXBlcy5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmcxNi5oPgotI2luY2x1ZGUgPHppcGZpbGUvemlwZmlsZS5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLXN0YXRpYyBpbnQKLXVzYWdlKCkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICJ1c2FnZTogYXBrIEFQS0ZJTEVcbiIKLSAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICJBUEtGSUxFICAgYW4gYW5kcm9pZCBwYWNrZ2UgZmlsZSBwcm9kdWNlZCBieSBhYXB0LlxuIgotICAgICAgICAgICAgKTsKLSAgICByZXR1cm4gMTsKLX0KLQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lOwotICAgIGludCBmZDsKLSAgICBzc2l6ZV90IGFtdDsKLSAgICBvZmZfdCBzaXplOwotICAgIHZvaWQqIGJ1ZjsKLSAgICB6aXBmaWxlX3QgemlwOwotICAgIHppcGVudHJ5X3QgZW50cnk7Ci0gICAgdm9pZCogY29va2llOwotICAgIHZvaWQqIHJlc2ZpbGU7Ci0gICAgaW50IGJ1ZnNpemU7Ci0gICAgaW50IGVycjsKLQotICAgIGlmIChhcmdjICE9IDIpIHsKLSAgICAgICAgcmV0dXJuIHVzYWdlKCk7Ci0gICAgfQotCi0gICAgZmlsZW5hbWUgPSBhcmd2WzFdOwotICAgIGZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFwazogY291bGRuJ3Qgb3BlbiBmaWxlIGZvciByZWFkOiAlc1xuIiwgZmlsZW5hbWUpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBzaXplID0gbHNlZWsoZmQsIDAsIFNFRUtfRU5EKTsKLSAgICBhbXQgPSBsc2VlayhmZCwgMCwgU0VFS19TRVQpOwotCi0gICAgaWYgKHNpemUgPCAwIHx8IGFtdCA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJhcGs6IGVycm9yIGRldGVybWluaW5nIGZpbGUgc2l6ZTogJXNcbiIsIGZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgYnVmID0gbWFsbG9jKHNpemUpOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFwazogZmlsZSB0b28gYmlnOiAlc1xuIiwgZmlsZW5hbWUpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBhbXQgPSByZWFkKGZkLCBidWYsIHNpemUpOwotICAgIGlmIChhbXQgIT0gc2l6ZSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFwazogZXJyb3IgcmVhZGluZyBmaWxlOiAlc1xuIiwgZmlsZW5hbWUpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBjbG9zZShmZCk7Ci0KLSAgICB6aXAgPSBpbml0X3ppcGZpbGUoYnVmLCBzaXplKTsKLSAgICBpZiAoemlwID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJhcGs6IGZpbGUgZG9lc24ndCBzZWVtIHRvIGJlIGEgemlwIGZpbGU6ICVzXG4iLAotICAgICAgICAgICAgICAgIGZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgcHJpbnRmKCJmaWxlczpcbiIpOwotICAgIGNvb2tpZSA9IE5VTEw7Ci0gICAgd2hpbGUgKChlbnRyeSA9IGl0ZXJhdGVfemlwZmlsZSh6aXAsICZjb29raWUpKSkgewotICAgICAgICBjaGFyKiBuYW1lID0gZ2V0X3ppcGVudHJ5X25hbWUoZW50cnkpOwotICAgICAgICBwcmludGYoIiAgJXNcbiIsIG5hbWUpOwotICAgICAgICBmcmVlKG5hbWUpOwotICAgIH0KLQotICAgIGVudHJ5ID0gbG9va3VwX3ppcGVudHJ5KHppcCwgInJlc291cmNlcy5hcnNjIik7Ci0gICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKLSAgICAgICAgc2l6ZSA9IGdldF96aXBlbnRyeV9zaXplKGVudHJ5KTsKLSAgICAgICAgYnVmc2l6ZSA9IHNpemUgKyAoc2l6ZSAvIDEwMDApICsgMTsKLSAgICAgICAgcmVzZmlsZSA9IG1hbGxvYyhidWZzaXplKTsKLQotICAgICAgICBlcnIgPSBkZWNvbXByZXNzX3ppcGVudHJ5KGVudHJ5LCByZXNmaWxlLCBidWZzaXplKTsKLSAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFwazogZXJyb3IgZGVjb21wcmVzc2luZyByZXNvdXJjZXMuYXJzYyIpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLQotICAgICAgICBSZXNUYWJsZSByZXMocmVzZmlsZSwgc2l6ZSwgcmVzZmlsZSk7Ci0gICAgICAgIHJlcy5wcmludCgpOwotI2lmIDAKLSAgICAgICAgc2l6ZV90IHRhYmxlQ291bnQgPSByZXMuZ2V0VGFibGVDb3VudCgpOwotICAgICAgICBwcmludGYoIlRhYmxlczogJWRcbiIsIChpbnQpdGFibGVDb3VudCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IHRhYmxlSW5kZXg9MDsgdGFibGVJbmRleDx0YWJsZUNvdW50OyB0YWJsZUluZGV4KyspIHsKLSAgICAgICAgICAgIGNvbnN0IFJlc1N0cmluZ1Bvb2wqIHN0cmluZ3MgPSByZXMuZ2V0VGFibGVTdHJpbmdCbG9jayh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIHNpemVfdCBzdHJpbmdDb3VudCA9IHN0cmluZ3MtPnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IHN0cmluZ0luZGV4PTA7IHN0cmluZ0luZGV4PHN0cmluZ0NvdW50OyBzdHJpbmdJbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGxlbjsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogY2ggPSBzdHJpbmdzLT5zdHJpbmdBdChzdHJpbmdJbmRleCwgJmxlbik7Ci0gICAgICAgICAgICAgICAgU3RyaW5nOCBzKFN0cmluZzE2KGNoLCBsZW4pKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiAgWyUzZF0gJXNcbiIsIChpbnQpc3RyaW5nSW5kZXgsIHMuc3RyaW5nKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZV90IGJhc2VQYWNrYWdlQ291bnQgPSByZXMuZ2V0QmFzZVBhY2thZ2VDb3VudCgpOwotICAgICAgICBwcmludGYoIkJhc2UgUGFja2FnZXM6ICVkXG4iLCAoaW50KWJhc2VQYWNrYWdlQ291bnQpOwotICAgICAgICBmb3IgKHNpemVfdCBicEluZGV4PTA7IGJwSW5kZXg8YmFzZVBhY2thZ2VDb3VudDsgYnBJbmRleCsrKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogY2ggPSByZXMuZ2V0QmFzZVBhY2thZ2VOYW1lKGJwSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nOCBzID0gU3RyaW5nOChTdHJpbmcxNihjaCkpOwotICAgICAgICAgICAgcHJpbnRmKCIgIFslM2RdICVzXG4iLCAoaW50KWJwSW5kZXgsIHMuc3RyaW5nKCkpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLQotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9wc2V1ZG9sb2NhbGl6ZS5jcHAgYi90b29scy9hYXB0L3BzZXVkb2xvY2FsaXplLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU1MGM1YS4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L3BzZXVkb2xvY2FsaXplLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0jaW5jbHVkZSAicHNldWRvbG9jYWxpemUuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotc3RhdGljIGNvbnN0IGNoYXIqCi1wc2V1ZG9sb2NhbGl6ZV9jaGFyKGNoYXIgYykKLXsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgY2FzZSAnYSc6ICAgcmV0dXJuICJceGM0XHg4MyI7Ci0gICAgICAgIGNhc2UgJ2InOiAgIHJldHVybiAiXHhjZlx4ODQiOwotICAgICAgICBjYXNlICdjJzogICByZXR1cm4gIlx4YzRceDhiIjsKLSAgICAgICAgY2FzZSAnZCc6ICAgcmV0dXJuICJceGM0XHg4ZiI7Ci0gICAgICAgIGNhc2UgJ2UnOiAgIHJldHVybiAiXHhjNFx4OTkiOwotICAgICAgICBjYXNlICdmJzogICByZXR1cm4gIlx4YzZceDkyIjsKLSAgICAgICAgY2FzZSAnZyc6ICAgcmV0dXJuICJceGM0XHg5ZCI7Ci0gICAgICAgIGNhc2UgJ2gnOiAgIHJldHVybiAiXHhkMVx4OWIiOwotICAgICAgICBjYXNlICdpJzogICByZXR1cm4gIlx4Y2ZceDhhIjsKLSAgICAgICAgY2FzZSAnaic6ICAgcmV0dXJuICJceGM0XHhiNSI7Ci0gICAgICAgIGNhc2UgJ2snOiAgIHJldHVybiAiXHhjNFx4YjgiOwotICAgICAgICBjYXNlICdsJzogICByZXR1cm4gIlx4YzRceGJhIjsKLSAgICAgICAgY2FzZSAnbSc6ICAgcmV0dXJuICJceGUxXHhiOFx4YmYiOwotICAgICAgICBjYXNlICduJzogICByZXR1cm4gIlx4ZDBceGI4IjsKLSAgICAgICAgY2FzZSAnbyc6ICAgcmV0dXJuICJceGNmXHg4YyI7Ci0gICAgICAgIGNhc2UgJ3AnOiAgIHJldHVybiAiXHhjZlx4ODEiOwotICAgICAgICBjYXNlICdxJzogICByZXR1cm4gIlx4NTEiOwotICAgICAgICBjYXNlICdyJzogICByZXR1cm4gIlx4ZDJceDkxIjsKLSAgICAgICAgY2FzZSAncyc6ICAgcmV0dXJuICJceGM1XHhhMSI7Ci0gICAgICAgIGNhc2UgJ3QnOiAgIHJldHVybiAiXHhkMVx4ODIiOwotICAgICAgICBjYXNlICd1JzogICByZXR1cm4gIlx4Y2VceGIwIjsKLSAgICAgICAgY2FzZSAndic6ICAgcmV0dXJuICJceDU2IjsKLSAgICAgICAgY2FzZSAndyc6ICAgcmV0dXJuICJceGUxXHhiYVx4ODUiOwotICAgICAgICBjYXNlICd4JzogICByZXR1cm4gIlx4ZDFceDg1IjsKLSAgICAgICAgY2FzZSAneSc6ICAgcmV0dXJuICJceGUxXHhiYlx4YjMiOwotICAgICAgICBjYXNlICd6JzogICByZXR1cm4gIlx4YzVceGJhIjsKLSAgICAgICAgY2FzZSAnQSc6ICAgcmV0dXJuICJceGMzXHg4NSI7Ci0gICAgICAgIGNhc2UgJ0InOiAgIHJldHVybiAiXHhjZVx4YjIiOwotICAgICAgICBjYXNlICdDJzogICByZXR1cm4gIlx4YzRceDg4IjsKLSAgICAgICAgY2FzZSAnRCc6ICAgcmV0dXJuICJceGM0XHg5MCI7Ci0gICAgICAgIGNhc2UgJ0UnOiAgIHJldHVybiAiXHhkMFx4ODQiOwotICAgICAgICBjYXNlICdGJzogICByZXR1cm4gIlx4Y2VceDkzIjsKLSAgICAgICAgY2FzZSAnRyc6ICAgcmV0dXJuICJceGM0XHg5ZSI7Ci0gICAgICAgIGNhc2UgJ0gnOiAgIHJldHVybiAiXHhjNFx4YTYiOwotICAgICAgICBjYXNlICdJJzogICByZXR1cm4gIlx4ZDBceDg3IjsKLSAgICAgICAgY2FzZSAnSic6ICAgcmV0dXJuICJceGM0XHhiNSI7Ci0gICAgICAgIGNhc2UgJ0snOiAgIHJldHVybiAiXHhjNFx4YjYiOwotICAgICAgICBjYXNlICdMJzogICByZXR1cm4gIlx4YzVceDgxIjsKLSAgICAgICAgY2FzZSAnTSc6ICAgcmV0dXJuICJceGUxXHhiOFx4YmUiOwotICAgICAgICBjYXNlICdOJzogICByZXR1cm4gIlx4YzVceDgzIjsKLSAgICAgICAgY2FzZSAnTyc6ICAgcmV0dXJuICJceGNlXHg5OCI7Ci0gICAgICAgIGNhc2UgJ1AnOiAgIHJldHVybiAiXHhjZlx4ODEiOwotICAgICAgICBjYXNlICdRJzogICByZXR1cm4gIlx4NzEiOwotICAgICAgICBjYXNlICdSJzogICByZXR1cm4gIlx4ZDBceGFmIjsKLSAgICAgICAgY2FzZSAnUyc6ICAgcmV0dXJuICJceGM4XHg5OCI7Ci0gICAgICAgIGNhc2UgJ1QnOiAgIHJldHVybiAiXHhjNVx4YTYiOwotICAgICAgICBjYXNlICdVJzogICByZXR1cm4gIlx4YzVceGE4IjsKLSAgICAgICAgY2FzZSAnVic6ICAgcmV0dXJuICJceGNlXHhiZCI7Ci0gICAgICAgIGNhc2UgJ1cnOiAgIHJldHVybiAiXHhlMVx4YmFceDg0IjsKLSAgICAgICAgY2FzZSAnWCc6ICAgcmV0dXJuICJceGMzXHg5NyI7Ci0gICAgICAgIGNhc2UgJ1knOiAgIHJldHVybiAiXHhjMlx4YTUiOwotICAgICAgICBjYXNlICdaJzogICByZXR1cm4gIlx4YzVceGJkIjsKLSAgICAgICAgZGVmYXVsdDogICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi0vKioKLSAqIENvbnZlcnRzIGNoYXJhY3RlcnMgc28gdGhleSBsb29rIGxpa2UgdGhleSd2ZSBiZWVuIGxvY2FsaXplZC4KLSAqCi0gKiBOb3RlOiBUaGlzIGxlYXZlcyBlc2NhcGUgc2VxdWVuY2VzIHVudG91Y2hlZCBzbyB0aGV5IGNhbiBsYXRlciBiZQotICogcHJvY2Vzc2VkIGJ5IFJlc1RhYmxlOjpjb2xsZWN0U3RyaW5nIGluIHRoZSBub3JtYWwgd2F5LgotICovCi1zdHJpbmcKLXBzZXVkb2xvY2FsaXplX3N0cmluZyhjb25zdCBzdHJpbmcmIHNvdXJjZSkKLXsKLSAgICBjb25zdCBjaGFyKiBzID0gc291cmNlLmNfc3RyKCk7Ci0gICAgc3RyaW5nIHJlc3VsdDsKLSAgICBjb25zdCBzaXplX3QgSSA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8STsgaSsrKSB7Ci0gICAgICAgIGNoYXIgYyA9IHNbaV07Ci0gICAgICAgIGlmIChjID09ICdcXCcpIHsKLSAgICAgICAgICAgIGlmIChpPEktMSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFwnOwotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICBjID0gc1tpXTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIG9uZSB0YWtlcyB1cCA1IGNoYXJzCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nKHMraSwgNSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgotICAgICAgICAgICAgICAgICAgICBjYXNlICcjJzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnQCc6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJz8nOgotICAgICAgICAgICAgICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnXCcnOgotICAgICAgICAgICAgICAgICAgICBjYXNlICdcXCc6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBwID0gcHNldWRvbG9jYWxpemVfY2hhcihjKTsKLSAgICAgICAgICAgIGlmIChwICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gcDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvL3ByaW50ZigicmVzdWx0PVwnJXNcJ1xuIiwgcmVzdWx0LmNfc3RyKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9wc2V1ZG9sb2NhbGl6ZS5oIGIvdG9vbHMvYWFwdC9wc2V1ZG9sb2NhbGl6ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGNiMDM0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvcHNldWRvbG9jYWxpemUuaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI2lmbmRlZiBIT1NUX1BTRVVET0xPQ0FMSVpFX0gKLSNkZWZpbmUgSE9TVF9QU0VVRE9MT0NBTElaRV9ICi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLXN0ZDo6c3RyaW5nIHBzZXVkb2xvY2FsaXplX3N0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlKTsKLQotI2VuZGlmIC8vIEhPU1RfUFNFVURPTE9DQUxJWkVfSAotCmRpZmYgLS1naXQgYS90b29scy9hYXB0L3Fzb3J0X3JfY29tcGF0LmMgYi90b29scy9hYXB0L3Fzb3J0X3JfY29tcGF0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhOGRiZTguLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC9xc29ydF9yX2NvbXBhdC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJxc29ydF9yX2NvbXBhdC5oIgotCi0vKgotICogTm90ZTogVGhpcyBjb2RlIGlzIG9ubHkgdXNlZCBvbiB0aGUgaG9zdCwgYW5kIGlzIHByaW1hcmlseSBoZXJlIGZvcgotICogTWFjIE9TIGNvbXBhdGliaWxpdHkuIEFwcGFyZW50bHksIGdsaWJjIGFuZCBBcHBsZSdzIGxpYmMgZGlzYWdyZWUgb24KLSAqIHRoZSBwYXJhbWV0ZXIgb3JkZXIgZm9yIHFzb3J0X3IuCi0gKi8KLQotI2lmIEhBVkVfQlNEX1FTT1JUX1IKLQotLyoKLSAqIEJTRCBxc29ydF9yIHBhcmFtZXRlciBvcmRlciBpcyBhcyB3ZSBoYXZlIGRlZmluZWQgaGVyZS4KLSAqLwotCi12b2lkIHFzb3J0X3JfY29tcGF0KHZvaWQqIGJhc2UsIHNpemVfdCBuZWwsIHNpemVfdCB3aWR0aCwgdm9pZCogdGh1bmssCi0gICAgICAgIGludCAoKmNvbXBhcikodm9pZCosIGNvbnN0IHZvaWQqICwgY29uc3Qgdm9pZCopKSB7Ci0gICAgcXNvcnRfcihiYXNlLCBuZWwsIHdpZHRoLCB0aHVuaywgY29tcGFyKTsKLX0KLQotI2VsaWYgSEFWRV9HTlVfUVNPUlRfUgotCi0vKgotICogR05VIHFzb3J0X3IgcGFyYW1ldGVyIG9yZGVyIHBsYWNlcyB0aGUgdGh1bmsgcGFyYW1ldGVyIGxhc3QuCi0gKi8KLQotc3RydWN0IGNvbXBhcl9kYXRhIHsKLSAgICB2b2lkKiB0aHVuazsKLSAgICBpbnQgKCpjb21wYXIpKHZvaWQqLCBjb25zdCB2b2lkKiAsIGNvbnN0IHZvaWQqKTsKLX07Ci0KLXN0YXRpYyBpbnQgY29tcGFyX3dyYXBwZXIoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYiwgdm9pZCogZGF0YSkgewotICAgIHN0cnVjdCBjb21wYXJfZGF0YSogY29tcGFyX2RhdGEgPSAoc3RydWN0IGNvbXBhcl9kYXRhKilkYXRhOwotICAgIHJldHVybiBjb21wYXJfZGF0YS0+Y29tcGFyKGNvbXBhcl9kYXRhLT50aHVuaywgYSwgYik7Ci19Ci0KLXZvaWQgcXNvcnRfcl9jb21wYXQodm9pZCogYmFzZSwgc2l6ZV90IG5lbCwgc2l6ZV90IHdpZHRoLCB2b2lkKiB0aHVuaywKLSAgICAgICAgaW50ICgqY29tcGFyKSh2b2lkKiwgY29uc3Qgdm9pZCogLCBjb25zdCB2b2lkKikpIHsKLSAgICBzdHJ1Y3QgY29tcGFyX2RhdGEgY29tcGFyX2RhdGE7Ci0gICAgY29tcGFyX2RhdGEudGh1bmsgPSB0aHVuazsKLSAgICBjb21wYXJfZGF0YS5jb21wYXIgPSBjb21wYXI7Ci0gICAgcXNvcnRfcihiYXNlLCBuZWwsIHdpZHRoLCBjb21wYXJfd3JhcHBlciwgJmNvbXBhcl9kYXRhKTsKLX0KLQotI2Vsc2UKLQotLyoKLSAqIEVtdWxhdGUgcXNvcnRfciB1c2luZyB0aHJlYWQgbG9jYWwgc3RvcmFnZSB0byBhY2Nlc3MgdGhlIHRodW5rIGRhdGEuCi0gKi8KLQotI2luY2x1ZGUgPGN1dGlscy90aHJlYWRzLmg+Ci0KLXN0YXRpYyB0aHJlYWRfc3RvcmVfdCBjb21wYXJfZGF0YV9rZXkgPSBUSFJFQURfU1RPUkVfSU5JVElBTElaRVI7Ci0KLXN0cnVjdCBjb21wYXJfZGF0YSB7Ci0gICAgdm9pZCogdGh1bms7Ci0gICAgaW50ICgqY29tcGFyKSh2b2lkKiwgY29uc3Qgdm9pZCogLCBjb25zdCB2b2lkKik7Ci19OwotCi1zdGF0aWMgaW50IGNvbXBhcl93cmFwcGVyKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpIHsKLSAgICBzdHJ1Y3QgY29tcGFyX2RhdGEqIGNvbXBhcl9kYXRhID0gKHN0cnVjdCBjb21wYXJfZGF0YSopdGhyZWFkX3N0b3JlX2dldCgmY29tcGFyX2RhdGFfa2V5KTsKLSAgICByZXR1cm4gY29tcGFyX2RhdGEtPmNvbXBhcihjb21wYXJfZGF0YS0+dGh1bmssIGEsIGIpOwotfQotCi12b2lkIHFzb3J0X3JfY29tcGF0KHZvaWQqIGJhc2UsIHNpemVfdCBuZWwsIHNpemVfdCB3aWR0aCwgdm9pZCogdGh1bmssCi0gICAgICAgIGludCAoKmNvbXBhcikodm9pZCosIGNvbnN0IHZvaWQqICwgY29uc3Qgdm9pZCopKSB7Ci0gICAgc3RydWN0IGNvbXBhcl9kYXRhIGNvbXBhcl9kYXRhOwotICAgIGNvbXBhcl9kYXRhLnRodW5rID0gdGh1bms7Ci0gICAgY29tcGFyX2RhdGEuY29tcGFyID0gY29tcGFyOwotICAgIHRocmVhZF9zdG9yZV9zZXQoJmNvbXBhcl9kYXRhX2tleSwgJmNvbXBhcl9kYXRhLCBOVUxMKTsKLSAgICBxc29ydChiYXNlLCBuZWwsIHdpZHRoLCBjb21wYXJfd3JhcHBlcik7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9xc29ydF9yX2NvbXBhdC5oIGIvdG9vbHMvYWFwdC9xc29ydF9yX2NvbXBhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTRmOTk5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvcXNvcnRfcl9jb21wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKgotICogUHJvdmlkZXMgYSBwb3J0YWJsZSB2ZXJzaW9uIG9mIHFzb3J0X3IsIGNhbGxlZCBxc29ydF9yX2NvbXBhdCwgd2hpY2ggaXMgYQotICogcmVlbnRyYW50IHZhcmlhbnQgb2YgcXNvcnQgdGhhdCBwYXNzZXMgYSB1c2VyIGRhdGEgcG9pbnRlciB0byBpdHMgY29tcGFyYXRvci4KLSAqIFRoaXMgaW1wbGVtZW50YXRpb24gZm9sbG93cyB0aGUgQlNEIHBhcmFtZXRlciBjb252ZW50aW9uLgotICovCi0KLSNpZm5kZWYgX19fUVNPUlRfUl9DT01QQVRfSAotI2RlZmluZSBfX19RU09SVF9SX0NPTVBBVF9ICi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi12b2lkIHFzb3J0X3JfY29tcGF0KHZvaWQqIGJhc2UsIHNpemVfdCBuZWwsIHNpemVfdCB3aWR0aCwgdm9pZCogdGh1bmssCi0gICAgICAgIGludCAoKmNvbXBhcikodm9pZCosIGNvbnN0IHZvaWQqICwgY29uc3Qgdm9pZCogKSk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZiAvLyBfX19RU09SVF9SX0NPTVBBVF9ICmRpZmYgLS1naXQgYS90b29scy9hYXB0L3Rlc3RzL0NydW5jaENhY2hlX3Rlc3QuY3BwIGIvdG9vbHMvYWFwdC90ZXN0cy9DcnVuY2hDYWNoZV90ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBiNTAyMi4uMDAwMDAwMAotLS0gYS90b29scy9hYXB0L3Rlc3RzL0NydW5jaENhY2hlX3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpbmNsdWRlICJDcnVuY2hDYWNoZS5oIgotI2luY2x1ZGUgIkZpbGVGaW5kZXIuaCIKLSNpbmNsdWRlICJNb2NrRmlsZUZpbmRlci5oIgotI2luY2x1ZGUgIkNhY2hlVXBkYXRlci5oIgotI2luY2x1ZGUgIk1vY2tDYWNoZVVwZGF0ZXIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci11c2luZyBzdGQ6OmNvdXQ7Ci11c2luZyBzdGQ6OmVuZGw7Ci0KLXZvaWQgZXhwZWN0RXF1YWwoaW50IGdvdCwgaW50IGV4cGVjdGVkLCBjb25zdCBjaGFyKiBkZXNjKSB7Ci0gICAgY291dCA8PCAiQ2hlY2tpbmcgIiA8PCBkZXNjIDw8ICI6ICI7Ci0gICAgY291dCA8PCAiR290ICIgPDwgZ290IDw8ICIsIGV4cGVjdGVkICIgPDwgZXhwZWN0ZWQgPDwgIi4uLiI7Ci0gICAgY291dCA8PCAoIChnb3QgPT0gZXhwZWN0ZWQpID8gIlBBU1NFRCIgOiAiRkFJTEVEIikgPDwgZW5kbDsKLSAgICBlcnJubyArPSAoKGdvdCA9PSBleHBlY3RlZCkgPyAwIDogMSk7Ci19Ci0KLWludCBtYWluKCkgewotCi0gICAgZXJybm8gPSAwOwotCi0gICAgU3RyaW5nOCBzb3VyY2UoInJlcyIpOwotICAgIFN0cmluZzggZGVzdCgicmVzMiIpOwotCi0gICAgLy8gQ3JlYXRlIGRhdGEgZm9yIE1vY2tGaWxlRmluZGVyIHRvIGZlZWQgdG8gdGhlIGNhY2hlCi0gICAgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgdGltZV90PiBzb3VyY2VEYXRhOwotICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIHVwZGF0ZWQKLSAgICBzb3VyY2VEYXRhLmFkZChTdHJpbmc4KCJyZXMvZHJhd2FibGUvaGVsbG8ucG5nIiksMyk7Ci0gICAgLy8gVGhpcyBzaG91bGQgYmUgdXBkYXRlZAotICAgIHNvdXJjZURhdGEuYWRkKFN0cmluZzgoInJlcy9kcmF3YWJsZS93b3JsZC5wbmciKSw1KTsKLSAgICAvLyBUaGlzIHNob3VsZCBjYXVzZSBtYWtlIGRpcmVjdG9yeSB0byBiZSBjYWxsZWQKLSAgICBzb3VyY2VEYXRhLmFkZChTdHJpbmc4KCJyZXMvZHJhd2FibGUtY29vbC9oZWxsby5wbmciKSwzKTsKLQotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIHRpbWVfdD4gZGVzdERhdGE7Ci0gICAgZGVzdERhdGEuYWRkKFN0cmluZzgoInJlczIvZHJhd2FibGUvaGVsbG8ucG5nIiksMyk7Ci0gICAgZGVzdERhdGEuYWRkKFN0cmluZzgoInJlczIvZHJhd2FibGUvd29ybGQucG5nIiksMyk7Ci0gICAgLy8gdGhpcyBzaG91bGQgY2FsbCBkZWxldGUKLSAgICBkZXN0RGF0YS5hZGQoU3RyaW5nOCgicmVzMi9kcmF3YWJsZS9kZWFkLnBuZyIpLDMpOwotCi0gICAgLy8gUGFja2FnZSB1cCBkYXRhIGFuZCBjcmVhdGUgbW9jayBmaWxlIGZpbmRlcgotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIEtleWVkVmVjdG9yPFN0cmluZzgsdGltZV90PiA+IGRhdGE7Ci0gICAgZGF0YS5hZGQoc291cmNlLHNvdXJjZURhdGEpOwotICAgIGRhdGEuYWRkKGRlc3QsZGVzdERhdGEpOwotICAgIEZpbGVGaW5kZXIqIGZmID0gbmV3IE1vY2tGaWxlRmluZGVyKGRhdGEpOwotICAgIENydW5jaENhY2hlIGNjKHNvdXJjZSxkZXN0LGZmKTsKLQotICAgIE1vY2tDYWNoZVVwZGF0ZXIqIG1jdSA9IG5ldyBNb2NrQ2FjaGVVcGRhdGVyKCk7Ci0gICAgQ2FjaGVVcGRhdGVyKiBjdShtY3UpOwotCi0gICAgY291dCA8PCAiUnVubmluZyBDcnVuY2guLi4iOwotICAgIGludCByZXN1bHQgPSBjYy5jcnVuY2goY3UpOwotICAgIGNvdXQgPDwgKChyZXN1bHQgPiAwKSA/ICJQQVNTRUQiIDogIkZBSUxFRCIpIDw8IGVuZGw7Ci0gICAgZXJybm8gKz0gKChyZXN1bHQgPiAwKSA/IDAgOiAxKTsKLQotICAgIGNvbnN0IGludCBFWFBFQ1RFRF9SRVNVTFQgPSAyOwotICAgIGV4cGVjdEVxdWFsKHJlc3VsdCwgRVhQRUNURURfUkVTVUxULCAibnVtYmVyIG9mIGZpbGVzIHRvdWNoZWQiKTsKLQotICAgIGNvdXQgPDwgIkNoZWNraW5nIGNhbGxzIHRvIGRlbGV0ZUZpbGUgYW5kIHByb2Nlc3NJbWFnZToiIDw8IGVuZGw7Ci0gICAgY29uc3QgaW50IEVYUEVDVEVEX0RFTEVURVMgPSAxOwotICAgIGNvbnN0IGludCBFWFBFQ1RFRF9QUk9DRVNTRUQgPSAyOwotICAgIC8vIERlbGV0ZXMKLSAgICBleHBlY3RFcXVhbChtY3UtPmRlbGV0ZUNvdW50LCBFWFBFQ1RFRF9ERUxFVEVTLCAiZGVsZXRlRmlsZSIpOwotICAgIC8vIHByb2Nlc3NJbWFnZQotICAgIGV4cGVjdEVxdWFsKG1jdS0+cHJvY2Vzc0NvdW50LCBFWFBFQ1RFRF9QUk9DRVNTRUQsICJwcm9jZXNzSW1hZ2UiKTsKLQotICAgIGNvbnN0IGludCBFWFBFQ1RFRF9PVkVSV1JJVEVTID0gMzsKLSAgICByZXN1bHQgPSBjYy5jcnVuY2goY3UsIHRydWUpOwotICAgIGV4cGVjdEVxdWFsKHJlc3VsdCwgRVhQRUNURURfT1ZFUldSSVRFUywgIm51bWJlciBvZiBmaWxlcyB0b3VjaGVkIHdpdGggb3ZlcndyaXRlIik7Ci0gICAgXAotCi0gICAgaWYgKGVycm5vID09IDApCi0gICAgICAgIGNvdXQgPDwgIkFMTCBURVNUUyBQQVNTRUQhIiA8PCBlbmRsOwotICAgIGVsc2UKLSAgICAgICAgY291dCA8PCBlcnJubyA8PCAiIFRFU1RTIEZBSUxFRCIgPDwgZW5kbDsKLQotICAgIGRlbGV0ZSBmZjsKLSAgICBkZWxldGUgY3U7Ci0KLSAgICAvLyBURVNUUyBCRUxPVyBXSUxMIEdPIEFXQVkgU09PTgotCi0gICAgU3RyaW5nOCBzb3VyY2UyKCJBcGlEZW1vcy9yZXMiKTsKLSAgICBTdHJpbmc4IGRlc3QyKCJBcGlEZW1vcy9yZXMyIik7Ci0KLSAgICBGaWxlRmluZGVyKiBzZmYgPSBuZXcgU3lzdGVtRmlsZUZpbmRlcigpOwotICAgIENhY2hlVXBkYXRlciogc2N1ID0gbmV3IFN5c3RlbUNhY2hlVXBkYXRlcigpOwotCi0gICAgQ3J1bmNoQ2FjaGUgc2NjKHNvdXJjZTIsZGVzdDIsc2ZmKTsKLQotICAgIHNjYy5jcnVuY2goc2N1KTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9hYXB0L3Rlc3RzL0ZpbGVGaW5kZXJfdGVzdC5jcHAgYi90b29scy9hYXB0L3Rlc3RzL0ZpbGVGaW5kZXJfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YmQ2NjUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC90ZXN0cy9GaWxlRmluZGVyX3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotI2luY2x1ZGUgPHV0aWxzL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL0tleWVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgIkRpcmVjdG9yeVdhbGtlci5oIgotI2luY2x1ZGUgIk1vY2tEaXJlY3RvcnlXYWxrZXIuaCIKLSNpbmNsdWRlICJGaWxlRmluZGVyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi11c2luZyBzdGQ6OnBhaXI7Ci11c2luZyBzdGQ6OmNvdXQ7Ci11c2luZyBzdGQ6OmVuZGw7Ci0KLQotCi1pbnQgbWFpbigpCi17Ci0KLSAgICBjb3V0IDw8ICJcblxuIFNUQVJUSU5HIEZJTEUgRklOREVSIFRFU1RTIiA8PCBlbmRsOwotICAgIFN0cmluZzggcGF0aCgiQXBpRGVtb3MiKTsKLQotICAgIC8vIFN0b3JhZ2UgdG8gcGFzcyB0byBmaW5kRmlsZXMoKQotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsdGltZV90PiB0ZXN0U3RvcmFnZTsKLQotICAgIC8vIE1vY2sgRGlyZWN0b3J5IFdhbGtlciBpbml0aWFsaXphdGlvbi4gRmlyc3QgZGF0YSwgdGhlbiBzZHcKLSAgICBWZWN0b3I8IHBhaXI8U3RyaW5nOCx0aW1lX3Q+ID4gZGF0YTsKLSAgICBkYXRhLnB1c2goIHBhaXI8U3RyaW5nOCx0aW1lX3Q+KFN0cmluZzgoImhlbGxvLnBuZyIpLDMpICk7Ci0gICAgZGF0YS5wdXNoKCBwYWlyPFN0cmluZzgsdGltZV90PihTdHJpbmc4KCJ3b3JsZC5QTkciKSwzKSApOwotICAgIGRhdGEucHVzaCggcGFpcjxTdHJpbmc4LHRpbWVfdD4oU3RyaW5nOCgiZm9vLnBOZyIpLDMpICk7Ci0gICAgLy8gTmVpdGhlciBvZiB0aGVzZSBzaG91bGQgYmUgZm91bmQKLSAgICBkYXRhLnB1c2goIHBhaXI8U3RyaW5nOCx0aW1lX3Q+KFN0cmluZzgoImhlbGxvLmpwZyIpLDMpICk7Ci0gICAgZGF0YS5wdXNoKCBwYWlyPFN0cmluZzgsdGltZV90PihTdHJpbmc4KCIuaGlkZGVuLnBuZyIpLDMpKTsKLQotICAgIERpcmVjdG9yeVdhbGtlciogc2R3ID0gbmV3IFN0cmluZ0RpcmVjdG9yeVdhbGtlcihwYXRoLGRhdGEpOwotCi0gICAgLy8gRXh0ZW5zaW9ucyB0byBsb29rIGZvcgotICAgIFZlY3RvcjxTdHJpbmc4PiBleHRzOwotICAgIGV4dHMucHVzaChTdHJpbmc4KCIucG5nIikpOwotCi0gICAgZXJybm8gPSAwOwotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGdldCBhIHZhbGlkIG1vY2sgZGlyZWN0b3J5IHdhbGtlcgotICAgIC8vIE1ha2Ugc3VyZSB3ZSBmaW5pc2ggd2l0aG91dCBlcnJvcnMKLSAgICBjb3V0IDw8ICJDaGVja2luZyBEaXJlY3RvcnlXYWxrZXIuLi4iOwotICAgIGFzc2VydChzZHcgIT0gTlVMTCk7Ci0gICAgY291dCA8PCAiUEFTU0VEIiA8PCBlbmRsOwotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGZpbmlzaCB3aXRob3V0IGVycm9ycwotICAgIGNvdXQgPDwgIlJ1bm5pbmcgZmluZEZpbGVzKCkuLi4iOwotICAgIGJvb2wgZmluZFN0YXR1cyA9IEZpbGVGaW5kZXI6OmZpbmRGaWxlcyhwYXRoLGV4dHMsIHRlc3RTdG9yYWdlLCBzZHcpOwotICAgIGFzc2VydChmaW5kU3RhdHVzKTsKLSAgICBjb3V0IDw8ICJQQVNTRUQiIDw8IGVuZGw7Ci0KLSAgICBjb25zdCBzaXplX3QgU0laRV9FWFBFQ1RFRCA9IDM7Ci0gICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiB0aGluZ3MgaW4gb3VyIHN0b3JhZ2UKLSAgICBjb3V0IDw8ICJSdW5uaW5nIHNpemUgY29tcGFyaXNvbjogU2l6ZSBpcyAiIDw8IHRlc3RTdG9yYWdlLnNpemUoKSA8PCAiLCAiOwotICAgIGNvdXQgPDwgIkV4cGVjdGVkICIgPDwgU0laRV9FWFBFQ1RFRCA8PCAiLi4uIjsKLSAgICBpZih0ZXN0U3RvcmFnZS5zaXplKCkgPT0gU0laRV9FWFBFQ1RFRCkKLSAgICAgICAgY291dCA8PCAiUEFTU0VEIiA8PCBlbmRsOwotICAgIGVsc2UgewotICAgICAgICBjb3V0IDw8ICJGQUlMRUQiIDw8IGVuZGw7Ci0gICAgICAgIGVycm5vKys7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgZWFjaCBvZiBvdXIgZm91bmQgaXRlbXMgaGFzIHRoZSByaWdodCBleHRlbnNpb24KLSAgICBjb3V0IDw8ICJDaGVja2luZyBSZXR1cm5lZCBFeHRlbnNpb25zLi4uIjsKLSAgICBib29sIGV4dHNPa2F5ID0gdHJ1ZTsKLSAgICBTdHJpbmc4IHdyb25nRXh0czsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFNJWkVfRVhQRUNURUQ7ICsraSkgewotICAgICAgICBTdHJpbmc4IHRlc3RFeHQodGVzdFN0b3JhZ2Uua2V5QXQoaSkuZ2V0UGF0aEV4dGVuc2lvbigpKTsKLSAgICAgICAgdGVzdEV4dC50b0xvd2VyKCk7Ci0gICAgICAgIGlmICh0ZXN0RXh0ICE9ICIucG5nIikgewotICAgICAgICAgICAgd3JvbmdFeHRzICs9IHRlc3RTdG9yYWdlLmtleUF0KGkpOwotICAgICAgICAgICAgd3JvbmdFeHRzICs9ICJcbiI7Ci0gICAgICAgICAgICBleHRzT2theSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChleHRzT2theSkKLSAgICAgICAgY291dCA8PCAiUEFTU0VEIiA8PCBlbmRsOwotICAgIGVsc2UgewotICAgICAgICBjb3V0IDw8ICJGQUlMRUQiIDw8IGVuZGw7Ci0gICAgICAgIGNvdXQgPDwgIlRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9ucyBkaWRuJ3QgY2hlY2sgb3V0IiA8PCBlbmRsIDw8IHdyb25nRXh0czsKLSAgICB9Ci0KLSAgICAvLyBDbGVhbiB1cAotICAgIGRlbGV0ZSBzZHc7Ci0KLSAgICBpZihlcnJubyA9PSAwKSB7Ci0gICAgICAgIGNvdXQgPDwgIkFMTCBURVNUUyBQQVNTRUQiIDw8IGVuZGw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY291dCA8PCBlcnJubyA8PCAiIFRFU1RTIEZBSUxFRCIgPDwgZW5kbDsKLSAgICB9Ci0gICAgcmV0dXJuIGVycm5vOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvdGVzdHMvTW9ja0NhY2hlVXBkYXRlci5oIGIvdG9vbHMvYWFwdC90ZXN0cy9Nb2NrQ2FjaGVVcGRhdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZjRiZDcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC90ZXN0cy9Nb2NrQ2FjaGVVcGRhdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLSNpZm5kZWYgTU9DS0NBQ0hFVVBEQVRFUl9ICi0jZGVmaW5lIE1PQ0tDQUNIRVVQREFURVJfSAotCi0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotI2luY2x1ZGUgIkNhY2hlVXBkYXRlci5oIgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotY2xhc3MgTW9ja0NhY2hlVXBkYXRlciA6IHB1YmxpYyBDYWNoZVVwZGF0ZXIgewotcHVibGljOgotCi0gICAgTW9ja0NhY2hlVXBkYXRlcigpCi0gICAgICAgIDogZGVsZXRlQ291bnQoMCksIHByb2Nlc3NDb3VudCgwKSB7IH07Ci0KLSAgICAvLyBNYWtlIHN1cmUgYWxsIHRoZSBkaXJlY3RvcmllcyBhbG9uZyB0aGlzIHBhdGggZXhpc3QKLSAgICB2aXJ0dWFsIHZvaWQgZW5zdXJlRGlyZWN0b3JpZXNFeGlzdChTdHJpbmc4IHBhdGgpCi0gICAgewotICAgICAgICAvLyBOb3RoaW5nIHRvIGRvCi0gICAgfTsKLQotICAgIC8vIERlbGV0ZSBhIGZpbGUKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRmlsZShTdHJpbmc4IHBhdGgpIHsKLSAgICAgICAgZGVsZXRlQ291bnQrKzsKLSAgICB9OwotCi0gICAgLy8gUHJvY2VzcyBhbiBpbWFnZSBmcm9tIHNvdXJjZSBvdXQgdG8gZGVzdAotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzSW1hZ2UoU3RyaW5nOCBzb3VyY2UsIFN0cmluZzggZGVzdCkgewotICAgICAgICBwcm9jZXNzQ291bnQrKzsKLSAgICB9OwotCi0gICAgLy8gREFUQSBNRU1CRVJTCi0gICAgaW50IGRlbGV0ZUNvdW50OwotICAgIGludCBwcm9jZXNzQ291bnQ7Ci1wcml2YXRlOgotfTsKLQotI2VuZGlmIC8vIE1PQ0tDQUNIRVVQREFURVJfSApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQvdGVzdHMvTW9ja0RpcmVjdG9yeVdhbGtlci5oIGIvdG9vbHMvYWFwdC90ZXN0cy9Nb2NrRGlyZWN0b3J5V2Fsa2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MDBjZjMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC90ZXN0cy9Nb2NrRGlyZWN0b3J5V2Fsa2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLSNpZm5kZWYgTU9DS0RJUkVDVE9SWVdBTEtFUl9ICi0jZGVmaW5lIE1PQ0tESVJFQ1RPUllXQUxLRVJfSAotCi0jaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSAiRGlyZWN0b3J5V2Fsa2VyLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotdXNpbmcgc3RkOjpwYWlyOwotCi0vLyBTdHJpbmc4IERpcmVjdG9yeSBXYWxrZXIKLS8vIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIERpcmVjdG9yeSBXYWxrZXIgYWJzdHJhY3Rpb24gdGhhdCBpcyBidWlsdAotLy8gZm9yIHRlc3RpbmcuCi0vLyBJbnN0ZWFkIG9mIHN5c3RlbSBjYWxscyBpdCBxdWVyaWVzIGEgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIGRpcmVjdG9yeQotLy8gZW50cmllcy4gSXQgdGFrZXMgYSBwYXRoIGFuZCBhIG1hcCBvZiBmaWxlbmFtZXMgYW5kIHRoZWlyIG1vZGlmaWNhdGlvbiB0aW1lcy4KLS8vIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCBzaW5jZSB0aGV5IGFyZSBzaG9ydCBhbmQgc2ltcGxlCi0KLWNsYXNzIFN0cmluZ0RpcmVjdG9yeVdhbGtlciA6IHB1YmxpYyBEaXJlY3RvcnlXYWxrZXIgewotcHVibGljOgotICAgIFN0cmluZ0RpcmVjdG9yeVdhbGtlcihTdHJpbmc4JiBwYXRoLCBWZWN0b3I8IHBhaXI8U3RyaW5nOCx0aW1lX3Q+ID4mIGRhdGEpCi0gICAgICAgIDogIG1Qb3MoMCksIG1CYXNlUGF0aChwYXRoKSwgbURhdGEoZGF0YSkgewotICAgICAgICAvL2ZwcmludGYoc3Rkb3V0LCJTdHJpbmdEVyBidWlsdCB0byBtaW1pYyAlcyB3aXRoICVkIGZpbGVzXG4iLAotICAgICAgICAvLyAgICAgICBtQmFzZVBhdGguc3RyaW5nKCkpOwotICAgIH07Ci0gICAgLy8gRGVmYXVsdCBjb3B5IGNvbnN0cnVjdG9yLCBhbmQgZGVzdHJ1Y3RvciBhcmUgZmluZQotCi0gICAgdmlydHVhbCBib29sIG9wZW5EaXIoU3RyaW5nOCBwYXRoKSB7Ci0gICAgICAgIC8vIElmIHRoZSB1c2VyIGlzIHRyeWluZyB0byBxdWVyeSB0aGUgImRpcmVjdG9yeSIgdGhhdCB0aGlzCi0gICAgICAgIC8vIHdhbGtlciB3YXMgaW5pdGlhbGl6ZWQgd2l0aCwgdGhlbiByZXR1cm4gc3VjY2Vzcy4gRWxzZSBmYWlsLgotICAgICAgICByZXR1cm4gcGF0aCA9PSBtQmFzZVBhdGg7Ci0gICAgfTsKLSAgICB2aXJ0dWFsIGJvb2wgb3BlbkRpcihjb25zdCBjaGFyKiBwYXRoKSB7Ci0gICAgICAgIFN0cmluZzggcChwYXRoKTsKLSAgICAgICAgb3BlbkRpcihwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfTsKLSAgICAvLyBBZHZhbmNlIHRvIG5leHQgZW50cnkgaW4gdGhlIFZlY3RvcgotICAgIHZpcnR1YWwgc3RydWN0IGRpcmVudCogbmV4dEVudHJ5KCkgewotICAgICAgICAvLyBBZHZhbmNlIHBvc2l0aW9uIGFuZCBjaGVjayB0byBzZWUgaWYgd2UncmUgZG9uZQotICAgICAgICBpZiAobVBvcyA+PSBtRGF0YS5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICAvLyBQbGFjZSBkYXRhIGluIHRoZSBlbnRyeSBkZXNjcmlwdG9yLiBUaGlzIGNsYXNzIG9ubHkgcmV0dXJucyBmaWxlcy4KLSAgICAgICAgbUVudHJ5LmRfdHlwZSA9IERUX1JFRzsKLSAgICAgICAgbUVudHJ5LmRfaW5vID0gbVBvczsKLSAgICAgICAgLy8gQ29weSBjaGFycyBmcm9tIHRoZSBzdHJpbmcgbmFtZSB0byB0aGUgZW50cnkgbmFtZQotICAgICAgICBzaXplX3QgaSA9IDA7Ci0gICAgICAgIGZvciAoaTsgaSA8IG1EYXRhW21Qb3NdLmZpcnN0LnNpemUoKTsgKytpKQotICAgICAgICAgICAgbUVudHJ5LmRfbmFtZVtpXSA9IG1EYXRhW21Qb3NdLmZpcnN0W2ldOwotICAgICAgICBtRW50cnkuZF9uYW1lW2ldID0gJ1wwJzsKLQotICAgICAgICAvLyBQbGFjZSBkYXRhIGluIHN0YXRzCi0gICAgICAgIG1TdGF0cy5zdF9pbm8gPSBtUG9zOwotICAgICAgICBtU3RhdHMuc3RfbXRpbWUgPSBtRGF0YVttUG9zXS5zZWNvbmQ7Ci0KLSAgICAgICAgLy8gR2V0IHJlYWR5IHRvIG1vdmUgdG8gdGhlIG5leHQgZW50cnkKLSAgICAgICAgbVBvcysrOwotCi0gICAgICAgIHJldHVybiAmbUVudHJ5OwotICAgIH07Ci0gICAgLy8gR2V0IHRoZSBzdGF0cyBmb3IgdGhlIGN1cnJlbnQgZW50cnkKLSAgICB2aXJ0dWFsIHN0cnVjdCBzdGF0KiAgIGVudHJ5U3RhdHMoKSB7Ci0gICAgICAgIHJldHVybiAmbVN0YXRzOwotICAgIH07Ci0gICAgLy8gTm90aGluZyB0byBkbyBpbiBjbGVhbiB1cAotICAgIHZpcnR1YWwgdm9pZCBjbG9zZURpcigpIHsKLSAgICAgICAgLy8gTm90aGluZyB0byBkbwotICAgIH07Ci0gICAgdmlydHVhbCBEaXJlY3RvcnlXYWxrZXIqIGNsb25lKCkgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0RpcmVjdG9yeVdhbGtlcigqdGhpcyk7Ci0gICAgfTsKLXByaXZhdGU6Ci0gICAgLy8gQ3VycmVudCBwb3NpdGlvbiBpbiB0aGUgVmVjdG9yCi0gICAgc2l6ZV90IG1Qb3M7Ci0gICAgLy8gQmFzZSBwYXRoCi0gICAgU3RyaW5nOCBtQmFzZVBhdGg7Ci0gICAgLy8gRGF0YSB0byBzaW11bGF0ZSBhIGRpcmVjdG9yeSBmdWxsIG9mIGZpbGVzLgotICAgIFZlY3RvcjwgcGFpcjxTdHJpbmc4LHRpbWVfdD4gPiBtRGF0YTsKLX07Ci0KLSNlbmRpZiAvLyBNT0NLRElSRUNUT1JZV0FMS0VSX0gKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9hYXB0L3Rlc3RzL01vY2tGaWxlRmluZGVyLmggYi90b29scy9hYXB0L3Rlc3RzL01vY2tGaWxlRmluZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNWVhNGYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC90ZXN0cy9Nb2NrRmlsZUZpbmRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0KLSNpZm5kZWYgTU9DS0ZJTEVGSU5ERVJfSAotI2RlZmluZSBNT0NLRklMRUZJTkRFUl9ICi0KLSNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9LZXllZFZlY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KLQotI2luY2x1ZGUgIkRpcmVjdG9yeVdhbGtlci5oIgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotY2xhc3MgTW9ja0ZpbGVGaW5kZXIgOiBwdWJsaWMgRmlsZUZpbmRlciB7Ci1wdWJsaWM6Ci0gICAgTW9ja0ZpbGVGaW5kZXIgKEtleWVkVmVjdG9yPFN0cmluZzgsIEtleWVkVmVjdG9yPFN0cmluZzgsdGltZV90PiA+JiBmaWxlcykKLSAgICAgICAgOiBtRmlsZXMoZmlsZXMpCi0gICAgewotICAgICAgICAvLyBOb3RoaW5nIGxlZnQgdG8gZG8KLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogZmluZEZpbGVzIGltcGxlbWVudGF0aW9uIGZvciB0aGUgYWJzdHJhY3Rpb24uCi0gICAgICogUFJFQ09ORElUSU9OUzoKLSAgICAgKiAgTm8gY2hlY2tpbmcgaXMgZG9uZSwgc28gdGhlcmUgTVVTVCBiZSBhbiBlbnRyeSBpbiBtRmlsZXMgd2l0aAotICAgICAqICBwYXRoIG1hdGNoaW5nIGJhc2VQYXRoLgotICAgICAqCi0gICAgICogUE9TVENPTkRJVElPTlM6Ci0gICAgICogIGZpbGVTdG9yZSBpcyBmaWxsZWQgd2l0aCBhIGNvcHkgb2YgdGhlIGRhdGEgaW4gbUZpbGVzIGNvcnJlc3BvbmRpbmcKLSAgICAgKiAgdG8gdGhlIGJhc2VQYXRoLgotICAgICAqLwotCi0gICAgdmlydHVhbCBib29sIGZpbmRGaWxlcyhTdHJpbmc4IGJhc2VQYXRoLCBWZWN0b3I8U3RyaW5nOD4mIGV4dGVuc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBLZXllZFZlY3RvcjxTdHJpbmc4LHRpbWVfdD4mIGZpbGVTdG9yZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeVdhbGtlciogZHcpCi0gICAgewotICAgICAgICBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LHRpbWVfdD4qIHBheWxvYWQoJm1GaWxlcy52YWx1ZUZvcihiYXNlUGF0aCkpOwotICAgICAgICAvLyBTaW5jZSBLZXllZFZlY3RvciBkb2Vzbid0IGltcGxlbWVudCBzd2FwCi0gICAgICAgIC8vICh3aG8gZG9lc24ndCB1c2Ugc3dhcD8/KSB3ZSBsb29wIGFuZCBhZGQgb25lIGF0IGEgdGltZS4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXlsb2FkLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgZmlsZVN0b3JlLmFkZChwYXlsb2FkLT5rZXlBdChpKSxwYXlsb2FkLT52YWx1ZUF0KGkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gVmlydHVhbCBtYXBwaW5nIGJldHdlZW4gImRpcmVjdG9yaWVzIiBhbmQgdGhlICJmaWxlcyIgY29udGFpbmVkCi0gICAgLy8gaW4gdGhlbQotICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIEtleWVkVmVjdG9yPFN0cmluZzgsdGltZV90PiA+IG1GaWxlczsKLX07Ci0KLQotI2VuZGlmIC8vIE1PQ0tGSUxFRklOREVSX0gKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9hYXB0L3Rlc3RzL3BsdXJhbHMvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3Rvb2xzL2FhcHQvdGVzdHMvcGx1cmFscy9BbmRyb2lkTWFuaWZlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzIxZGVlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvdGVzdHMvcGx1cmFscy9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5hYXB0LnRlc3QucGx1cmFscyI+Ci0KLTwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS90b29scy9hYXB0L3Rlc3RzL3BsdXJhbHMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3Rvb2xzL2FhcHQvdGVzdHMvcGx1cmFscy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzFmYzE5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FhcHQvdGVzdHMvcGx1cmFscy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08cmVzb3VyY2VzIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c3RyaW5nIG5hbWU9Im9rIj5PSzwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImFfcGx1cmFsIj4KLSAgICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+QSBkb2c8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+U29tZSBkb2dzPC9pdGVtPgotICAgIDwvcGx1cmFscz4KLTwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC90ZXN0cy9wbHVyYWxzL3J1bi5zaCBiL3Rvb2xzL2FhcHQvdGVzdHMvcGx1cmFscy9ydW4uc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDRkMzllMTAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWFwdC90ZXN0cy9wbHVyYWxzL3J1bi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVRFU1RfRElSPXRvb2xzL2FhcHQvdGVzdHMvcGx1cmFscwotVEVTVF9PVVRfRElSPW91dC9wbHVyYWxzX3Rlc3QKLQotcm0gLXJmICRURVNUX09VVF9ESVIKLW1rZGlyIC1wICRURVNUX09VVF9ESVIKLW1rZGlyIC1wICRURVNUX09VVF9ESVIvamF2YQotCi0jZ2RiIC0tYXJncyBcCi1hYXB0IHBhY2thZ2UgLXYgLXggLW0gLXogIC1KICRURVNUX09VVF9ESVIvamF2YSAtTSAkVEVTVF9ESVIvQW5kcm9pZE1hbmlmZXN0LnhtbCBcCi0gICAgICAgICAgICAgLUkgb3V0L3RhcmdldC9jb21tb24vb2JqL0FQUFMvZnJhbWV3b3JrLXJlc19pbnRlcm1lZGlhdGVzL3BhY2thZ2UtZXhwb3J0LmFwayBcCi0gICAgICAgICAgICAgLVAgJFRFU1RfT1VUX0RJUi9wdWJsaWNfcmVzb3VyY2VzLnhtbCBcCi0gICAgICAgICAgICAgLVMgJFRFU1RfRElSL3JlcwotCi1lY2hvCi1lY2hvICI9PT09PT09PT09PT09PT09PT09PSBGSUxFUyBDUkVBVEVEID09PT09PT09PT09PT09PT09PT09ICIKLWZpbmQgJFRFU1RfT1VUX0RJUiAtdHlwZSBmCmRpZmYgLS1naXQgYS90b29scy9haWRsL0FTVC5jcHAgYi90b29scy9haWRsL0FTVC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYTY3NjUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9BU1QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTEyICswLDAgQEAKLSNpbmNsdWRlICJBU1QuaCIKLSNpbmNsdWRlICJUeXBlLmgiCi0KLXZvaWQKLVdyaXRlTW9kaWZpZXJzKEZJTEUqIHRvLCBpbnQgbW9kLCBpbnQgbWFzaykKLXsKLSAgICBpbnQgbSA9IG1vZCAmIG1hc2s7Ci0KLSAgICBpZiAobSAmIE9WRVJSSURFKSB7Ci0gICAgICAgIGZwcmludGYodG8sICJAT3ZlcnJpZGUgIik7Ci0gICAgfQotCi0gICAgaWYgKChtICYgU0NPUEVfTUFTSykgPT0gUFVCTElDKSB7Ci0gICAgICAgIGZwcmludGYodG8sICJwdWJsaWMgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKChtICYgU0NPUEVfTUFTSykgPT0gUFJJVkFURSkgewotICAgICAgICBmcHJpbnRmKHRvLCAicHJpdmF0ZSAiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKG0gJiBTQ09QRV9NQVNLKSA9PSBQUk9URUNURUQpIHsKLSAgICAgICAgZnByaW50Zih0bywgInByb3RlY3RlZCAiKTsKLSAgICB9Ci0KLSAgICBpZiAobSAmIFNUQVRJQykgewotICAgICAgICBmcHJpbnRmKHRvLCAic3RhdGljICIpOwotICAgIH0KLSAgICAKLSAgICBpZiAobSAmIEZJTkFMKSB7Ci0gICAgICAgIGZwcmludGYodG8sICJmaW5hbCAiKTsKLSAgICB9Ci0KLSAgICBpZiAobSAmIEFCU1RSQUNUKSB7Ci0gICAgICAgIGZwcmludGYodG8sICJhYnN0cmFjdCAiKTsKLSAgICB9Ci19Ci0KLXZvaWQKLVdyaXRlQXJndW1lbnRMaXN0KEZJTEUqIHRvLCBjb25zdCB2ZWN0b3I8RXhwcmVzc2lvbio+JiBhcmd1bWVudHMpCi17Ci0gICAgc2l6ZV90IE4gPSBhcmd1bWVudHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgYXJndW1lbnRzW2ldLT5Xcml0ZSh0byk7Ci0gICAgICAgIGlmIChpICE9IE4tMSkgewotICAgICAgICAgICAgZnByaW50Zih0bywgIiwgIik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUNsYXNzRWxlbWVudDo6Q2xhc3NFbGVtZW50KCkKLXsKLX0KLQotQ2xhc3NFbGVtZW50Ojp+Q2xhc3NFbGVtZW50KCkKLXsKLX0KLQotRmllbGQ6OkZpZWxkKCkKLSAgICA6Q2xhc3NFbGVtZW50KCksCi0gICAgIG1vZGlmaWVycygwKSwKLSAgICAgdmFyaWFibGUoTlVMTCkKLXsKLX0KLQotRmllbGQ6OkZpZWxkKGludCBtLCBWYXJpYWJsZSogdikKLSAgICA6Q2xhc3NFbGVtZW50KCksCi0gICAgIG1vZGlmaWVycyhtKSwKLSAgICAgdmFyaWFibGUodikKLXsKLX0KLQotRmllbGQ6On5GaWVsZCgpCi17Ci19Ci0KLXZvaWQKLUZpZWxkOjpHYXRoZXJUeXBlcyhzZXQ8VHlwZSo+KiB0eXBlcykgY29uc3QKLXsKLSAgICB0eXBlcy0+aW5zZXJ0KHRoaXMtPnZhcmlhYmxlLT50eXBlKTsKLX0KLQotdm9pZAotRmllbGQ6OldyaXRlKEZJTEUqIHRvKQotewotICAgIGlmICh0aGlzLT5jb21tZW50Lmxlbmd0aCgpICE9IDApIHsKLSAgICAgICAgZnByaW50Zih0bywgIiVzXG4iLCB0aGlzLT5jb21tZW50LmNfc3RyKCkpOwotICAgIH0KLSAgICBXcml0ZU1vZGlmaWVycyh0bywgdGhpcy0+bW9kaWZpZXJzLCBTQ09QRV9NQVNLIHwgU1RBVElDIHwgRklOQUwgfCBPVkVSUklERSk7Ci0gICAgZnByaW50Zih0bywgIiVzICVzIiwgdGhpcy0+dmFyaWFibGUtPnR5cGUtPlF1YWxpZmllZE5hbWUoKS5jX3N0cigpLAotICAgICAgICAgICAgdGhpcy0+dmFyaWFibGUtPm5hbWUuY19zdHIoKSk7Ci0gICAgaWYgKHRoaXMtPnZhbHVlLmxlbmd0aCgpICE9IDApIHsKLSAgICAgICAgZnByaW50Zih0bywgIiA9ICVzIiwgdGhpcy0+dmFsdWUuY19zdHIoKSk7Ci0gICAgfQotICAgIGZwcmludGYodG8sICI7XG4iKTsKLX0KLQotRXhwcmVzc2lvbjo6fkV4cHJlc3Npb24oKQotewotfQotCi1MaXRlcmFsRXhwcmVzc2lvbjo6TGl0ZXJhbEV4cHJlc3Npb24oY29uc3Qgc3RyaW5nJiB2KQotICAgIDp2YWx1ZSh2KQotewotfQotCi1MaXRlcmFsRXhwcmVzc2lvbjo6fkxpdGVyYWxFeHByZXNzaW9uKCkKLXsKLX0KLQotdm9pZAotTGl0ZXJhbEV4cHJlc3Npb246OldyaXRlKEZJTEUqIHRvKQotewotICAgIGZwcmludGYodG8sICIlcyIsIHRoaXMtPnZhbHVlLmNfc3RyKCkpOwotfQotCi1TdHJpbmdMaXRlcmFsRXhwcmVzc2lvbjo6U3RyaW5nTGl0ZXJhbEV4cHJlc3Npb24oY29uc3Qgc3RyaW5nJiB2KQotICAgIDp2YWx1ZSh2KQotewotfQotCi1TdHJpbmdMaXRlcmFsRXhwcmVzc2lvbjo6flN0cmluZ0xpdGVyYWxFeHByZXNzaW9uKCkKLXsKLX0KLQotdm9pZAotU3RyaW5nTGl0ZXJhbEV4cHJlc3Npb246OldyaXRlKEZJTEUqIHRvKQotewotICAgIGZwcmludGYodG8sICJcIiVzXCIiLCB0aGlzLT52YWx1ZS5jX3N0cigpKTsKLX0KLQotVmFyaWFibGU6OlZhcmlhYmxlKCkKLSAgICA6dHlwZShOVUxMKSwKLSAgICAgbmFtZSgpLAotICAgICBkaW1lbnNpb24oMCkKLXsKLX0KLQotVmFyaWFibGU6OlZhcmlhYmxlKFR5cGUqIHQsIGNvbnN0IHN0cmluZyYgbikKLSAgICA6dHlwZSh0KSwKLSAgICAgbmFtZShuKSwKLSAgICAgZGltZW5zaW9uKDApCi17Ci19Ci0KLVZhcmlhYmxlOjpWYXJpYWJsZShUeXBlKiB0LCBjb25zdCBzdHJpbmcmIG4sIGludCBkKQotICAgIDp0eXBlKHQpLAotICAgICBuYW1lKG4pLAotICAgICBkaW1lbnNpb24oZCkKLXsKLX0KLQotVmFyaWFibGU6On5WYXJpYWJsZSgpCi17Ci19Ci0KLXZvaWQKLVZhcmlhYmxlOjpHYXRoZXJUeXBlcyhzZXQ8VHlwZSo+KiB0eXBlcykgY29uc3QKLXsKLSAgICB0eXBlcy0+aW5zZXJ0KHRoaXMtPnR5cGUpOwotfQotCi12b2lkCi1WYXJpYWJsZTo6V3JpdGVEZWNsYXJhdGlvbihGSUxFKiB0bykKLXsKLSAgICBzdHJpbmcgZGltOwotICAgIGZvciAoaW50IGk9MDsgaTx0aGlzLT5kaW1lbnNpb247IGkrKykgewotICAgICAgICBkaW0gKz0gIltdIjsKLSAgICB9Ci0gICAgZnByaW50Zih0bywgIiVzJXMgJXMiLCB0aGlzLT50eXBlLT5RdWFsaWZpZWROYW1lKCkuY19zdHIoKSwgZGltLmNfc3RyKCksCi0gICAgICAgICAgICB0aGlzLT5uYW1lLmNfc3RyKCkpOwotfQotCi12b2lkCi1WYXJpYWJsZTo6V3JpdGUoRklMRSogdG8pCi17Ci0gICAgZnByaW50Zih0bywgIiVzIiwgbmFtZS5jX3N0cigpKTsKLX0KLQotRmllbGRWYXJpYWJsZTo6RmllbGRWYXJpYWJsZShFeHByZXNzaW9uKiBvLCBjb25zdCBzdHJpbmcmIG4pCi0gICAgOm9iamVjdChvKSwKLSAgICAgY2xhenooTlVMTCksCi0gICAgIG5hbWUobikKLXsKLX0KLQotRmllbGRWYXJpYWJsZTo6RmllbGRWYXJpYWJsZShUeXBlKiBjLCBjb25zdCBzdHJpbmcmIG4pCi0gICAgOm9iamVjdChOVUxMKSwKLSAgICAgY2xhenooYyksCi0gICAgIG5hbWUobikKLXsKLX0KLQotRmllbGRWYXJpYWJsZTo6fkZpZWxkVmFyaWFibGUoKQotewotfQotCi12b2lkCi1GaWVsZFZhcmlhYmxlOjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBpZiAodGhpcy0+b2JqZWN0ICE9IE5VTEwpIHsKLSAgICAgICAgdGhpcy0+b2JqZWN0LT5Xcml0ZSh0byk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRoaXMtPmNsYXp6ICE9IE5VTEwpIHsKLSAgICAgICAgZnByaW50Zih0bywgIiVzIiwgdGhpcy0+Y2xhenotPlF1YWxpZmllZE5hbWUoKS5jX3N0cigpKTsKLSAgICB9Ci0gICAgZnByaW50Zih0bywgIi4lcyIsIG5hbWUuY19zdHIoKSk7Ci19Ci0KLQotU3RhdGVtZW50Ojp+U3RhdGVtZW50KCkKLXsKLX0KLQotU3RhdGVtZW50QmxvY2s6OlN0YXRlbWVudEJsb2NrKCkKLXsKLX0KLQotU3RhdGVtZW50QmxvY2s6On5TdGF0ZW1lbnRCbG9jaygpCi17Ci19Ci0KLXZvaWQKLVN0YXRlbWVudEJsb2NrOjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBmcHJpbnRmKHRvLCAie1xuIik7Ci0gICAgaW50IE4gPSB0aGlzLT5zdGF0ZW1lbnRzLnNpemUoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHRoaXMtPnN0YXRlbWVudHNbaV0tPldyaXRlKHRvKTsKLSAgICB9Ci0gICAgZnByaW50Zih0bywgIn1cbiIpOwotfQotCi12b2lkCi1TdGF0ZW1lbnRCbG9jazo6QWRkKFN0YXRlbWVudCogc3RhdGVtZW50KQotewotICAgIHRoaXMtPnN0YXRlbWVudHMucHVzaF9iYWNrKHN0YXRlbWVudCk7Ci19Ci0KLXZvaWQKLVN0YXRlbWVudEJsb2NrOjpBZGQoRXhwcmVzc2lvbiogZXhwcmVzc2lvbikKLXsKLSAgICB0aGlzLT5zdGF0ZW1lbnRzLnB1c2hfYmFjayhuZXcgRXhwcmVzc2lvblN0YXRlbWVudChleHByZXNzaW9uKSk7Ci19Ci0KLUV4cHJlc3Npb25TdGF0ZW1lbnQ6OkV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvbiogZSkKLSAgICA6ZXhwcmVzc2lvbihlKQotewotfQotCi1FeHByZXNzaW9uU3RhdGVtZW50Ojp+RXhwcmVzc2lvblN0YXRlbWVudCgpCi17Ci19Ci0KLXZvaWQKLUV4cHJlc3Npb25TdGF0ZW1lbnQ6OldyaXRlKEZJTEUqIHRvKQotewotICAgIHRoaXMtPmV4cHJlc3Npb24tPldyaXRlKHRvKTsKLSAgICBmcHJpbnRmKHRvLCAiO1xuIik7Ci19Ci0KLUFzc2lnbm1lbnQ6OkFzc2lnbm1lbnQoVmFyaWFibGUqIGwsIEV4cHJlc3Npb24qIHIpCi0gICAgOmx2YWx1ZShsKSwKLSAgICAgcnZhbHVlKHIpLAotICAgICBjYXN0KE5VTEwpCi17Ci19Ci0KLUFzc2lnbm1lbnQ6OkFzc2lnbm1lbnQoVmFyaWFibGUqIGwsIEV4cHJlc3Npb24qIHIsIFR5cGUqIGMpCi0gICAgOmx2YWx1ZShsKSwKLSAgICAgcnZhbHVlKHIpLAotICAgICBjYXN0KGMpCi17Ci19Ci0KLUFzc2lnbm1lbnQ6On5Bc3NpZ25tZW50KCkKLXsKLX0KLQotdm9pZAotQXNzaWdubWVudDo6V3JpdGUoRklMRSogdG8pCi17Ci0gICAgdGhpcy0+bHZhbHVlLT5Xcml0ZSh0byk7Ci0gICAgZnByaW50Zih0bywgIiA9ICIpOwotICAgIGlmICh0aGlzLT5jYXN0ICE9IE5VTEwpIHsKLSAgICAgICAgZnByaW50Zih0bywgIiglcykiLCB0aGlzLT5jYXN0LT5RdWFsaWZpZWROYW1lKCkuY19zdHIoKSk7Ci0gICAgfQotICAgIHRoaXMtPnJ2YWx1ZS0+V3JpdGUodG8pOwotfQotCi1NZXRob2RDYWxsOjpNZXRob2RDYWxsKGNvbnN0IHN0cmluZyYgbikKLSAgICA6b2JqKE5VTEwpLAotICAgICBjbGF6eihOVUxMKSwKLSAgICAgbmFtZShuKQotewotfQotCi1NZXRob2RDYWxsOjpNZXRob2RDYWxsKGNvbnN0IHN0cmluZyYgbiwgaW50IGFyZ2MgPSAwLCAuLi4pCi0gICAgOm9iaihOVUxMKSwKLSAgICAgY2xhenooTlVMTCksCi0gICAgIG5hbWUobikKLXsKLSAgdmFfbGlzdCBhcmdzOwotICB2YV9zdGFydChhcmdzLCBhcmdjKTsKLSAgaW5pdChhcmdjLCBhcmdzKTsKLSAgdmFfZW5kKGFyZ3MpOwotfQotCi1NZXRob2RDYWxsOjpNZXRob2RDYWxsKEV4cHJlc3Npb24qIG8sIGNvbnN0IHN0cmluZyYgbikKLSAgICA6b2JqKG8pLAotICAgICBjbGF6eihOVUxMKSwKLSAgICAgbmFtZShuKQotewotfQotCi1NZXRob2RDYWxsOjpNZXRob2RDYWxsKFR5cGUqIHQsIGNvbnN0IHN0cmluZyYgbikKLSAgICA6b2JqKE5VTEwpLAotICAgICBjbGF6eih0KSwKLSAgICAgbmFtZShuKQotewotfQotCi1NZXRob2RDYWxsOjpNZXRob2RDYWxsKEV4cHJlc3Npb24qIG8sIGNvbnN0IHN0cmluZyYgbiwgaW50IGFyZ2MgPSAwLCAuLi4pCi0gICAgOm9iaihvKSwKLSAgICAgY2xhenooTlVMTCksCi0gICAgIG5hbWUobikKLXsKLSAgdmFfbGlzdCBhcmdzOwotICB2YV9zdGFydChhcmdzLCBhcmdjKTsKLSAgaW5pdChhcmdjLCBhcmdzKTsKLSAgdmFfZW5kKGFyZ3MpOwotfQotCi1NZXRob2RDYWxsOjpNZXRob2RDYWxsKFR5cGUqIHQsIGNvbnN0IHN0cmluZyYgbiwgaW50IGFyZ2MgPSAwLCAuLi4pCi0gICAgOm9iaihOVUxMKSwKLSAgICAgY2xhenoodCksCi0gICAgIG5hbWUobikKLXsKLSAgdmFfbGlzdCBhcmdzOwotICB2YV9zdGFydChhcmdzLCBhcmdjKTsKLSAgaW5pdChhcmdjLCBhcmdzKTsKLSAgdmFfZW5kKGFyZ3MpOwotfQotCi1NZXRob2RDYWxsOjp+TWV0aG9kQ2FsbCgpCi17Ci19Ci0KLXZvaWQKLU1ldGhvZENhbGw6OmluaXQoaW50IG4sIHZhX2xpc3QgYXJncykKLXsKLSAgICBmb3IgKGludCBpPTA7IGk8bjsgaSsrKSB7Ci0gICAgICAgIEV4cHJlc3Npb24qIGV4cHJlc3Npb24gPSAoRXhwcmVzc2lvbiopdmFfYXJnKGFyZ3MsIHZvaWQqKTsKLSAgICAgICAgdGhpcy0+YXJndW1lbnRzLnB1c2hfYmFjayhleHByZXNzaW9uKTsKLSAgICB9Ci19Ci0KLXZvaWQKLU1ldGhvZENhbGw6OldyaXRlKEZJTEUqIHRvKQotewotICAgIGlmICh0aGlzLT5vYmogIT0gTlVMTCkgewotICAgICAgICB0aGlzLT5vYmotPldyaXRlKHRvKTsKLSAgICAgICAgZnByaW50Zih0bywgIi4iKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodGhpcy0+Y2xhenogIT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHRvLCAiJXMuIiwgdGhpcy0+Y2xhenotPlF1YWxpZmllZE5hbWUoKS5jX3N0cigpKTsKLSAgICB9Ci0gICAgZnByaW50Zih0bywgIiVzKCIsIHRoaXMtPm5hbWUuY19zdHIoKSk7Ci0gICAgV3JpdGVBcmd1bWVudExpc3QodG8sIHRoaXMtPmFyZ3VtZW50cyk7Ci0gICAgZnByaW50Zih0bywgIikiKTsKLX0KLQotQ29tcGFyaXNvbjo6Q29tcGFyaXNvbihFeHByZXNzaW9uKiBsLCBjb25zdCBzdHJpbmcmIG8sIEV4cHJlc3Npb24qIHIpCi0gICAgOmx2YWx1ZShsKSwKLSAgICAgb3AobyksCi0gICAgIHJ2YWx1ZShyKQotewotfQotCi1Db21wYXJpc29uOjp+Q29tcGFyaXNvbigpCi17Ci19Ci0KLXZvaWQKLUNvbXBhcmlzb246OldyaXRlKEZJTEUqIHRvKQotewotICAgIGZwcmludGYodG8sICIoIik7Ci0gICAgdGhpcy0+bHZhbHVlLT5Xcml0ZSh0byk7Ci0gICAgZnByaW50Zih0bywgIiVzIiwgdGhpcy0+b3AuY19zdHIoKSk7Ci0gICAgdGhpcy0+cnZhbHVlLT5Xcml0ZSh0byk7Ci0gICAgZnByaW50Zih0bywgIikiKTsKLX0KLQotTmV3RXhwcmVzc2lvbjo6TmV3RXhwcmVzc2lvbihUeXBlKiB0KQotICAgIDp0eXBlKHQpCi17Ci19Ci0KLU5ld0V4cHJlc3Npb246Ok5ld0V4cHJlc3Npb24oVHlwZSogdCwgaW50IGFyZ2MgPSAwLCAuLi4pCi0gICAgOnR5cGUodCkKLXsKLSAgdmFfbGlzdCBhcmdzOwotICB2YV9zdGFydChhcmdzLCBhcmdjKTsKLSAgaW5pdChhcmdjLCBhcmdzKTsKLSAgdmFfZW5kKGFyZ3MpOwotfQotCi1OZXdFeHByZXNzaW9uOjp+TmV3RXhwcmVzc2lvbigpCi17Ci19Ci0KLXZvaWQKLU5ld0V4cHJlc3Npb246OmluaXQoaW50IG4sIHZhX2xpc3QgYXJncykKLXsKLSAgICBmb3IgKGludCBpPTA7IGk8bjsgaSsrKSB7Ci0gICAgICAgIEV4cHJlc3Npb24qIGV4cHJlc3Npb24gPSAoRXhwcmVzc2lvbiopdmFfYXJnKGFyZ3MsIHZvaWQqKTsKLSAgICAgICAgdGhpcy0+YXJndW1lbnRzLnB1c2hfYmFjayhleHByZXNzaW9uKTsKLSAgICB9Ci19Ci0KLXZvaWQKLU5ld0V4cHJlc3Npb246OldyaXRlKEZJTEUqIHRvKQotewotICAgIGZwcmludGYodG8sICJuZXcgJXMoIiwgdGhpcy0+dHlwZS0+SW5zdGFudGlhYmxlTmFtZSgpLmNfc3RyKCkpOwotICAgIFdyaXRlQXJndW1lbnRMaXN0KHRvLCB0aGlzLT5hcmd1bWVudHMpOwotICAgIGZwcmludGYodG8sICIpIik7Ci19Ci0KLU5ld0FycmF5RXhwcmVzc2lvbjo6TmV3QXJyYXlFeHByZXNzaW9uKFR5cGUqIHQsIEV4cHJlc3Npb24qIHMpCi0gICAgOnR5cGUodCksCi0gICAgIHNpemUocykKLXsKLX0KLQotTmV3QXJyYXlFeHByZXNzaW9uOjp+TmV3QXJyYXlFeHByZXNzaW9uKCkKLXsKLX0KLQotdm9pZAotTmV3QXJyYXlFeHByZXNzaW9uOjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBmcHJpbnRmKHRvLCAibmV3ICVzWyIsIHRoaXMtPnR5cGUtPlF1YWxpZmllZE5hbWUoKS5jX3N0cigpKTsKLSAgICBzaXplLT5Xcml0ZSh0byk7Ci0gICAgZnByaW50Zih0bywgIl0iKTsKLX0KLQotVGVybmFyeTo6VGVybmFyeSgpCi0gICAgOmNvbmRpdGlvbihOVUxMKSwKLSAgICAgaWZwYXJ0KE5VTEwpLAotICAgICBlbHNlcGFydChOVUxMKQotewotfQotCi1UZXJuYXJ5OjpUZXJuYXJ5KEV4cHJlc3Npb24qIGEsIEV4cHJlc3Npb24qIGIsIEV4cHJlc3Npb24qIGMpCi0gICAgOmNvbmRpdGlvbihhKSwKLSAgICAgaWZwYXJ0KGIpLAotICAgICBlbHNlcGFydChjKQotewotfQotCi1UZXJuYXJ5Ojp+VGVybmFyeSgpCi17Ci19Ci0KLXZvaWQKLVRlcm5hcnk6OldyaXRlKEZJTEUqIHRvKQotewotICAgIGZwcmludGYodG8sICIoKCIpOwotICAgIHRoaXMtPmNvbmRpdGlvbi0+V3JpdGUodG8pOwotICAgIGZwcmludGYodG8sICIpPygiKTsKLSAgICB0aGlzLT5pZnBhcnQtPldyaXRlKHRvKTsKLSAgICBmcHJpbnRmKHRvLCAiKTooIik7Ci0gICAgdGhpcy0+ZWxzZXBhcnQtPldyaXRlKHRvKTsKLSAgICBmcHJpbnRmKHRvLCAiKSkiKTsKLX0KLQotQ2FzdDo6Q2FzdCgpCi0gICAgOnR5cGUoTlVMTCksCi0gICAgIGV4cHJlc3Npb24oTlVMTCkKLXsKLX0KLQotQ2FzdDo6Q2FzdChUeXBlKiB0LCBFeHByZXNzaW9uKiBlKQotICAgIDp0eXBlKHQpLAotICAgICBleHByZXNzaW9uKGUpCi17Ci19Ci0KLUNhc3Q6On5DYXN0KCkKLXsKLX0KLQotdm9pZAotQ2FzdDo6V3JpdGUoRklMRSogdG8pCi17Ci0gICAgZnByaW50Zih0bywgIigoJXMpIiwgdGhpcy0+dHlwZS0+UXVhbGlmaWVkTmFtZSgpLmNfc3RyKCkpOwotICAgIGV4cHJlc3Npb24tPldyaXRlKHRvKTsKLSAgICBmcHJpbnRmKHRvLCAiKSIpOwotfQotCi1WYXJpYWJsZURlY2xhcmF0aW9uOjpWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlKiBsLCBFeHByZXNzaW9uKiByLCBUeXBlKiBjKQotICAgIDpsdmFsdWUobCksCi0gICAgIGNhc3QoYyksCi0gICAgIHJ2YWx1ZShyKQotewotfQotCi1WYXJpYWJsZURlY2xhcmF0aW9uOjpWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlKiBsKQotICAgIDpsdmFsdWUobCksCi0gICAgIGNhc3QoTlVMTCksCi0gICAgIHJ2YWx1ZShOVUxMKQotewotfQotCi1WYXJpYWJsZURlY2xhcmF0aW9uOjp+VmFyaWFibGVEZWNsYXJhdGlvbigpCi17Ci19Ci0KLXZvaWQKLVZhcmlhYmxlRGVjbGFyYXRpb246OldyaXRlKEZJTEUqIHRvKQotewotICAgIHRoaXMtPmx2YWx1ZS0+V3JpdGVEZWNsYXJhdGlvbih0byk7Ci0gICAgaWYgKHRoaXMtPnJ2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYodG8sICIgPSAiKTsKLSAgICAgICAgaWYgKHRoaXMtPmNhc3QgIT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50Zih0bywgIiglcykiLCB0aGlzLT5jYXN0LT5RdWFsaWZpZWROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+cnZhbHVlLT5Xcml0ZSh0byk7Ci0gICAgfQotICAgIGZwcmludGYodG8sICI7XG4iKTsKLX0KLQotSWZTdGF0ZW1lbnQ6OklmU3RhdGVtZW50KCkKLSAgICA6ZXhwcmVzc2lvbihOVUxMKSwKLSAgICAgc3RhdGVtZW50cyhuZXcgU3RhdGVtZW50QmxvY2spLAotICAgICBlbHNlaWYoTlVMTCkKLXsKLX0KLQotSWZTdGF0ZW1lbnQ6On5JZlN0YXRlbWVudCgpCi17Ci19Ci0KLXZvaWQKLUlmU3RhdGVtZW50OjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBpZiAodGhpcy0+ZXhwcmVzc2lvbiAhPSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYodG8sICJpZiAoIik7Ci0gICAgICAgIHRoaXMtPmV4cHJlc3Npb24tPldyaXRlKHRvKTsKLSAgICAgICAgZnByaW50Zih0bywgIikgIik7Ci0gICAgfQotICAgIHRoaXMtPnN0YXRlbWVudHMtPldyaXRlKHRvKTsKLSAgICBpZiAodGhpcy0+ZWxzZWlmICE9IE5VTEwpIHsKLSAgICAgICAgZnByaW50Zih0bywgImVsc2UgIik7Ci0gICAgICAgIHRoaXMtPmVsc2VpZi0+V3JpdGUodG8pOwotICAgIH0KLX0KLQotUmV0dXJuU3RhdGVtZW50OjpSZXR1cm5TdGF0ZW1lbnQoRXhwcmVzc2lvbiogZSkKLSAgICA6ZXhwcmVzc2lvbihlKQotewotfQotCi1SZXR1cm5TdGF0ZW1lbnQ6On5SZXR1cm5TdGF0ZW1lbnQoKQotewotfQotCi12b2lkCi1SZXR1cm5TdGF0ZW1lbnQ6OldyaXRlKEZJTEUqIHRvKQotewotICAgIGZwcmludGYodG8sICJyZXR1cm4gIik7Ci0gICAgdGhpcy0+ZXhwcmVzc2lvbi0+V3JpdGUodG8pOwotICAgIGZwcmludGYodG8sICI7XG4iKTsKLX0KLQotVHJ5U3RhdGVtZW50OjpUcnlTdGF0ZW1lbnQoKQotICAgIDpzdGF0ZW1lbnRzKG5ldyBTdGF0ZW1lbnRCbG9jaykKLXsKLX0KLQotVHJ5U3RhdGVtZW50Ojp+VHJ5U3RhdGVtZW50KCkKLXsKLX0KLQotdm9pZAotVHJ5U3RhdGVtZW50OjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBmcHJpbnRmKHRvLCAidHJ5ICIpOwotICAgIHRoaXMtPnN0YXRlbWVudHMtPldyaXRlKHRvKTsKLX0KLQotQ2F0Y2hTdGF0ZW1lbnQ6OkNhdGNoU3RhdGVtZW50KFZhcmlhYmxlKiBlKQotICAgIDpzdGF0ZW1lbnRzKG5ldyBTdGF0ZW1lbnRCbG9jayksCi0gICAgIGV4Y2VwdGlvbihlKQotewotfQotCi1DYXRjaFN0YXRlbWVudDo6fkNhdGNoU3RhdGVtZW50KCkKLXsKLX0KLQotdm9pZAotQ2F0Y2hTdGF0ZW1lbnQ6OldyaXRlKEZJTEUqIHRvKQotewotICAgIGZwcmludGYodG8sICJjYXRjaCAiKTsKLSAgICBpZiAodGhpcy0+ZXhjZXB0aW9uICE9IE5VTEwpIHsKLSAgICAgICAgZnByaW50Zih0bywgIigiKTsKLSAgICAgICAgdGhpcy0+ZXhjZXB0aW9uLT5Xcml0ZURlY2xhcmF0aW9uKHRvKTsKLSAgICAgICAgZnByaW50Zih0bywgIikgIik7Ci0gICAgfQotICAgIHRoaXMtPnN0YXRlbWVudHMtPldyaXRlKHRvKTsKLX0KLQotRmluYWxseVN0YXRlbWVudDo6RmluYWxseVN0YXRlbWVudCgpCi0gICAgOnN0YXRlbWVudHMobmV3IFN0YXRlbWVudEJsb2NrKQotewotfQotCi1GaW5hbGx5U3RhdGVtZW50Ojp+RmluYWxseVN0YXRlbWVudCgpCi17Ci19Ci0KLXZvaWQKLUZpbmFsbHlTdGF0ZW1lbnQ6OldyaXRlKEZJTEUqIHRvKQotewotICAgIGZwcmludGYodG8sICJmaW5hbGx5ICIpOwotICAgIHRoaXMtPnN0YXRlbWVudHMtPldyaXRlKHRvKTsKLX0KLQotQ2FzZTo6Q2FzZSgpCi0gICAgOnN0YXRlbWVudHMobmV3IFN0YXRlbWVudEJsb2NrKQotewotfQotCi1DYXNlOjpDYXNlKGNvbnN0IHN0cmluZyYgYykKLSAgICA6c3RhdGVtZW50cyhuZXcgU3RhdGVtZW50QmxvY2spCi17Ci0gICAgY2FzZXMucHVzaF9iYWNrKGMpOwotfQotCi1DYXNlOjp+Q2FzZSgpCi17Ci19Ci0KLXZvaWQKLUNhc2U6OldyaXRlKEZJTEUqIHRvKQotewotICAgIGludCBOID0gdGhpcy0+Y2FzZXMuc2l6ZSgpOwotICAgIGlmIChOID4gMCkgewotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBzdHJpbmcgcyA9IHRoaXMtPmNhc2VzW2ldOwotICAgICAgICAgICAgaWYgKHMubGVuZ3RoKCkgIT0gMCkgewotICAgICAgICAgICAgICAgIGZwcmludGYodG8sICJjYXNlICVzOlxuIiwgcy5jX3N0cigpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZnByaW50Zih0bywgImRlZmF1bHQ6XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZwcmludGYodG8sICJkZWZhdWx0OlxuIik7Ci0gICAgfQotICAgIHN0YXRlbWVudHMtPldyaXRlKHRvKTsKLX0KLQotU3dpdGNoU3RhdGVtZW50OjpTd2l0Y2hTdGF0ZW1lbnQoRXhwcmVzc2lvbiogZSkKLSAgICA6ZXhwcmVzc2lvbihlKQotewotfQotCi1Td2l0Y2hTdGF0ZW1lbnQ6On5Td2l0Y2hTdGF0ZW1lbnQoKQotewotfQotCi12b2lkCi1Td2l0Y2hTdGF0ZW1lbnQ6OldyaXRlKEZJTEUqIHRvKQotewotICAgIGZwcmludGYodG8sICJzd2l0Y2ggKCIpOwotICAgIHRoaXMtPmV4cHJlc3Npb24tPldyaXRlKHRvKTsKLSAgICBmcHJpbnRmKHRvLCAiKVxue1xuIik7Ci0gICAgaW50IE4gPSB0aGlzLT5jYXNlcy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICB0aGlzLT5jYXNlc1tpXS0+V3JpdGUodG8pOwotICAgIH0KLSAgICBmcHJpbnRmKHRvLCAifVxuIik7Ci19Ci0KLUJyZWFrOjpCcmVhaygpCi17Ci19Ci0KLUJyZWFrOjp+QnJlYWsoKQotewotfQotCi12b2lkCi1CcmVhazo6V3JpdGUoRklMRSogdG8pCi17Ci0gICAgZnByaW50Zih0bywgImJyZWFrO1xuIik7Ci19Ci0KLU1ldGhvZDo6TWV0aG9kKCkKLSAgICA6Q2xhc3NFbGVtZW50KCksCi0gICAgIG1vZGlmaWVycygwKSwKLSAgICAgcmV0dXJuVHlwZShOVUxMKSwgLy8gKE5VTEwgbWVhbnMgY29uc3RydWN0b3IpCi0gICAgIHJldHVyblR5cGVEaW1lbnNpb24oMCksCi0gICAgIHN0YXRlbWVudHMoTlVMTCkKLXsKLX0KLQotTWV0aG9kOjp+TWV0aG9kKCkKLXsKLX0KLQotdm9pZAotTWV0aG9kOjpHYXRoZXJUeXBlcyhzZXQ8VHlwZSo+KiB0eXBlcykgY29uc3QKLXsKLSAgICBzaXplX3QgTiwgaTsKLQotICAgIGlmICh0aGlzLT5yZXR1cm5UeXBlKSB7Ci0gICAgICAgIHR5cGVzLT5pbnNlcnQodGhpcy0+cmV0dXJuVHlwZSk7Ci0gICAgfQotCi0gICAgTiA9IHRoaXMtPnBhcmFtZXRlcnMuc2l6ZSgpOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICB0aGlzLT5wYXJhbWV0ZXJzW2ldLT5HYXRoZXJUeXBlcyh0eXBlcyk7Ci0gICAgfQotCi0gICAgTiA9IHRoaXMtPmV4Y2VwdGlvbnMuc2l6ZSgpOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICB0eXBlcy0+aW5zZXJ0KHRoaXMtPmV4Y2VwdGlvbnNbaV0pOwotICAgIH0KLX0KLQotdm9pZAotTWV0aG9kOjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBzaXplX3QgTiwgaTsKLQotICAgIGlmICh0aGlzLT5jb21tZW50Lmxlbmd0aCgpICE9IDApIHsKLSAgICAgICAgZnByaW50Zih0bywgIiVzXG4iLCB0aGlzLT5jb21tZW50LmNfc3RyKCkpOwotICAgIH0KLQotICAgIFdyaXRlTW9kaWZpZXJzKHRvLCB0aGlzLT5tb2RpZmllcnMsIFNDT1BFX01BU0sgfCBTVEFUSUMgfCBBQlNUUkFDVCB8IEZJTkFMIHwgT1ZFUlJJREUpOwotCi0gICAgaWYgKHRoaXMtPnJldHVyblR5cGUgIT0gTlVMTCkgewotICAgICAgICBzdHJpbmcgZGltOwotICAgICAgICBmb3IgKGk9MDsgaTx0aGlzLT5yZXR1cm5UeXBlRGltZW5zaW9uOyBpKyspIHsKLSAgICAgICAgICAgIGRpbSArPSAiW10iOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYodG8sICIlcyVzICIsIHRoaXMtPnJldHVyblR5cGUtPlF1YWxpZmllZE5hbWUoKS5jX3N0cigpLAotICAgICAgICAgICAgICAgIGRpbS5jX3N0cigpKTsKLSAgICB9Ci0gICAKLSAgICBmcHJpbnRmKHRvLCAiJXMoIiwgdGhpcy0+bmFtZS5jX3N0cigpKTsKLQotICAgIE4gPSB0aGlzLT5wYXJhbWV0ZXJzLnNpemUoKTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgdGhpcy0+cGFyYW1ldGVyc1tpXS0+V3JpdGVEZWNsYXJhdGlvbih0byk7Ci0gICAgICAgIGlmIChpICE9IE4tMSkgewotICAgICAgICAgICAgZnByaW50Zih0bywgIiwgIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmcHJpbnRmKHRvLCAiKSIpOwotCi0gICAgTiA9IHRoaXMtPmV4Y2VwdGlvbnMuc2l6ZSgpOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHRvLCAiIHRocm93cyAiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYodG8sICIsICIpOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYodG8sICIlcyIsIHRoaXMtPmV4Y2VwdGlvbnNbaV0tPlF1YWxpZmllZE5hbWUoKS5jX3N0cigpKTsKLSAgICB9Ci0KLSAgICBpZiAodGhpcy0+c3RhdGVtZW50cyA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYodG8sICI7XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmcHJpbnRmKHRvLCAiXG4iKTsKLSAgICAgICAgdGhpcy0+c3RhdGVtZW50cy0+V3JpdGUodG8pOwotICAgIH0KLX0KLQotQ2xhc3M6OkNsYXNzKCkKLSAgICA6bW9kaWZpZXJzKDApLAotICAgICB3aGF0KENMQVNTKSwKLSAgICAgdHlwZShOVUxMKSwKLSAgICAgZXh0ZW5kcyhOVUxMKQotewotfQotCi1DbGFzczo6fkNsYXNzKCkKLXsKLX0KLQotdm9pZAotQ2xhc3M6OkdhdGhlclR5cGVzKHNldDxUeXBlKj4qIHR5cGVzKSBjb25zdAotewotICAgIGludCBOLCBpOwotCi0gICAgdHlwZXMtPmluc2VydCh0aGlzLT50eXBlKTsKLSAgICBpZiAodGhpcy0+ZXh0ZW5kcyAhPSBOVUxMKSB7Ci0gICAgICAgIHR5cGVzLT5pbnNlcnQodGhpcy0+ZXh0ZW5kcyk7Ci0gICAgfQotCi0gICAgTiA9IHRoaXMtPmludGVyZmFjZXMuc2l6ZSgpOwotICAgIGZvciAoaT0wOyBpPE47IGkrKykgewotICAgICAgICB0eXBlcy0+aW5zZXJ0KHRoaXMtPmludGVyZmFjZXNbaV0pOwotICAgIH0KLQotICAgIE4gPSB0aGlzLT5lbGVtZW50cy5zaXplKCk7Ci0gICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIHRoaXMtPmVsZW1lbnRzW2ldLT5HYXRoZXJUeXBlcyh0eXBlcyk7Ci0gICAgfQotfQotCi12b2lkCi1DbGFzczo6V3JpdGUoRklMRSogdG8pCi17Ci0gICAgc2l6ZV90IE4sIGk7Ci0KLSAgICBpZiAodGhpcy0+Y29tbWVudC5sZW5ndGgoKSAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYodG8sICIlc1xuIiwgdGhpcy0+Y29tbWVudC5jX3N0cigpKTsKLSAgICB9Ci0KLSAgICBXcml0ZU1vZGlmaWVycyh0bywgdGhpcy0+bW9kaWZpZXJzLCBBTExfTU9ESUZJRVJTKTsKLQotICAgIGlmICh0aGlzLT53aGF0ID09IENsYXNzOjpDTEFTUykgewotICAgICAgICBmcHJpbnRmKHRvLCAiY2xhc3MgIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnByaW50Zih0bywgImludGVyZmFjZSAiKTsKLSAgICB9Ci0KLSAgICBzdHJpbmcgbmFtZSA9IHRoaXMtPnR5cGUtPk5hbWUoKTsKLSAgICBzaXplX3QgcG9zID0gbmFtZS5yZmluZCgnLicpOwotICAgIGlmIChwb3MgIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIG5hbWUgPSBuYW1lLmNfc3RyKCkgKyBwb3MgKyAxOwotICAgIH0KLQotICAgIGZwcmludGYodG8sICIlcyIsIG5hbWUuY19zdHIoKSk7Ci0KLSAgICBpZiAodGhpcy0+ZXh0ZW5kcyAhPSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYodG8sICIgZXh0ZW5kcyAlcyIsIHRoaXMtPmV4dGVuZHMtPlF1YWxpZmllZE5hbWUoKS5jX3N0cigpKTsKLSAgICB9Ci0KLSAgICBOID0gdGhpcy0+aW50ZXJmYWNlcy5zaXplKCk7Ci0gICAgaWYgKE4gIT0gMCkgewotICAgICAgICBpZiAodGhpcy0+d2hhdCA9PSBDbGFzczo6Q0xBU1MpIHsKLSAgICAgICAgICAgIGZwcmludGYodG8sICIgaW1wbGVtZW50cyIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZnByaW50Zih0bywgIiBleHRlbmRzIik7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHRvLCAiICVzIiwgdGhpcy0+aW50ZXJmYWNlc1tpXS0+UXVhbGlmaWVkTmFtZSgpLmNfc3RyKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnByaW50Zih0bywgIlxuIik7Ci0gICAgZnByaW50Zih0bywgIntcbiIpOwotCi0gICAgTiA9IHRoaXMtPmVsZW1lbnRzLnNpemUoKTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgdGhpcy0+ZWxlbWVudHNbaV0tPldyaXRlKHRvKTsKLSAgICB9Ci0KLSAgICBmcHJpbnRmKHRvLCAifVxuIik7Ci0KLX0KLQotRG9jdW1lbnQ6OkRvY3VtZW50KCkKLXsKLX0KLQotRG9jdW1lbnQ6On5Eb2N1bWVudCgpCi17Ci19Ci0KLXN0YXRpYyBzdHJpbmcKLWVzY2FwZV9iYWNrc2xhc2hlcyhjb25zdCBzdHJpbmcmIHN0cikKLXsKLSAgICBzdHJpbmcgcmVzdWx0OwotICAgIGNvbnN0IHNpemVfdCBJPXN0ci5sZW5ndGgoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8STsgaSsrKSB7Ci0gICAgICAgIGNoYXIgYyA9IHN0cltpXTsKLSAgICAgICAgaWYgKGMgPT0gJ1xcJykgewotICAgICAgICAgICAgcmVzdWx0ICs9ICJcXFxcIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlc3VsdCArPSBjOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQKLURvY3VtZW50OjpXcml0ZShGSUxFKiB0bykKLXsKLSAgICBzaXplX3QgTiwgaTsKLQotICAgIGlmICh0aGlzLT5jb21tZW50Lmxlbmd0aCgpICE9IDApIHsKLSAgICAgICAgZnByaW50Zih0bywgIiVzXG4iLCB0aGlzLT5jb21tZW50LmNfc3RyKCkpOwotICAgIH0KLSAgICBmcHJpbnRmKHRvLCAiLypcbiIKLSAgICAgICAgICAgICAgICAiICogVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkLiAgRE8gTk9UIE1PRElGWS5cbiIKLSAgICAgICAgICAgICAgICAiICogT3JpZ2luYWwgZmlsZTogJXNcbiIKLSAgICAgICAgICAgICAgICAiICovXG4iLCBlc2NhcGVfYmFja3NsYXNoZXModGhpcy0+b3JpZ2luYWxTcmMpLmNfc3RyKCkpOwotICAgIGlmICh0aGlzLT5wYWNrYWdlLmxlbmd0aCgpICE9IDApIHsKLSAgICAgICAgZnByaW50Zih0bywgInBhY2thZ2UgJXM7XG4iLCB0aGlzLT5wYWNrYWdlLmNfc3RyKCkpOwotICAgIH0KLQotICAgIE4gPSB0aGlzLT5jbGFzc2VzLnNpemUoKTsKLSAgICBmb3IgKGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgQ2xhc3MqIGMgPSB0aGlzLT5jbGFzc2VzW2ldOwotICAgICAgICBjLT5Xcml0ZSh0byk7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS90b29scy9haWRsL0FTVC5oIGIvdG9vbHMvYWlkbC9BU1QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFkNWU3YS4uMDAwMDAwMAotLS0gYS90b29scy9haWRsL0FTVC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzcxICswLDAgQEAKLSNpZm5kZWYgQUlETF9BU1RfSAotI2RlZmluZSBBSURMX0FTVF9ICi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1jbGFzcyBUeXBlOwotCi1lbnVtIHsKLSAgICBQQUNLQUdFX1BSSVZBVEUgPSAweDAwMDAwMDAwLAotICAgIFBVQkxJQyAgICAgICAgICA9IDB4MDAwMDAwMDEsCi0gICAgUFJJVkFURSAgICAgICAgID0gMHgwMDAwMDAwMiwKLSAgICBQUk9URUNURUQgICAgICAgPSAweDAwMDAwMDAzLAotICAgIFNDT1BFX01BU0sgICAgICA9IDB4MDAwMDAwMDMsCi0KLSAgICBTVEFUSUMgICAgICAgICAgPSAweDAwMDAwMDEwLAotICAgIEZJTkFMICAgICAgICAgICA9IDB4MDAwMDAwMjAsCi0gICAgQUJTVFJBQ1QgICAgICAgID0gMHgwMDAwMDA0MCwKLQotICAgIE9WRVJSSURFICAgICAgICA9IDB4MDAwMDAxMDAsCi0KLSAgICBBTExfTU9ESUZJRVJTICAgPSAweGZmZmZmZmZmCi19OwotCi0vLyBXcml0ZSB0aGUgbW9kaWZpZXJzIHRoYXQgYXJlIHNldCBpbiBib3RoIG1vZCBhbmQgbWFzawotdm9pZCBXcml0ZU1vZGlmaWVycyhGSUxFKiB0bywgaW50IG1vZCwgaW50IG1hc2spOwotCi1zdHJ1Y3QgQ2xhc3NFbGVtZW50Ci17Ci0gICAgQ2xhc3NFbGVtZW50KCk7Ci0gICAgdmlydHVhbCB+Q2xhc3NFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgR2F0aGVyVHlwZXMoc2V0PFR5cGUqPiogdHlwZXMpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pID0gMDsKLX07Ci0KLXN0cnVjdCBFeHByZXNzaW9uCi17Ci0gICAgdmlydHVhbCB+RXhwcmVzc2lvbigpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0bykgPSAwOwotfTsKLQotc3RydWN0IExpdGVyYWxFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24KLXsKLSAgICBzdHJpbmcgdmFsdWU7Ci0KLSAgICBMaXRlcmFsRXhwcmVzc2lvbihjb25zdCBzdHJpbmcmIHZhbHVlKTsKLSAgICB2aXJ0dWFsIH5MaXRlcmFsRXhwcmVzc2lvbigpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi0vLyBUT0RPOiBhbHNvIGVzY2FwZSB0aGUgY29udGVudHMuICBub3QgbmVlZGVkIGZvciBub3cKLXN0cnVjdCBTdHJpbmdMaXRlcmFsRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci0gICAgc3RyaW5nIHZhbHVlOwotCi0gICAgU3RyaW5nTGl0ZXJhbEV4cHJlc3Npb24oY29uc3Qgc3RyaW5nJiB2YWx1ZSk7Ci0gICAgdmlydHVhbCB+U3RyaW5nTGl0ZXJhbEV4cHJlc3Npb24oKTsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotc3RydWN0IFZhcmlhYmxlIDogcHVibGljIEV4cHJlc3Npb24KLXsKLSAgICBUeXBlKiB0eXBlOwotICAgIHN0cmluZyBuYW1lOwotICAgIGludCBkaW1lbnNpb247Ci0KLSAgICBWYXJpYWJsZSgpOwotICAgIFZhcmlhYmxlKFR5cGUqIHR5cGUsIGNvbnN0IHN0cmluZyYgbmFtZSk7Ci0gICAgVmFyaWFibGUoVHlwZSogdHlwZSwgY29uc3Qgc3RyaW5nJiBuYW1lLCBpbnQgZGltZW5zaW9uKTsKLSAgICB2aXJ0dWFsIH5WYXJpYWJsZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIEdhdGhlclR5cGVzKHNldDxUeXBlKj4qIHR5cGVzKSBjb25zdDsKLSAgICB2b2lkIFdyaXRlRGVjbGFyYXRpb24oRklMRSogdG8pOwotICAgIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotc3RydWN0IEZpZWxkVmFyaWFibGUgOiBwdWJsaWMgRXhwcmVzc2lvbgotewotICAgIEV4cHJlc3Npb24qIG9iamVjdDsKLSAgICBUeXBlKiBjbGF6ejsKLSAgICBzdHJpbmcgbmFtZTsKLQotICAgIEZpZWxkVmFyaWFibGUoRXhwcmVzc2lvbiogb2JqZWN0LCBjb25zdCBzdHJpbmcmIG5hbWUpOwotICAgIEZpZWxkVmFyaWFibGUoVHlwZSogY2xhenosIGNvbnN0IHN0cmluZyYgbmFtZSk7Ci0gICAgdmlydHVhbCB+RmllbGRWYXJpYWJsZSgpOwotCi0gICAgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgRmllbGQgOiBwdWJsaWMgQ2xhc3NFbGVtZW50Ci17Ci0gICAgc3RyaW5nIGNvbW1lbnQ7Ci0gICAgaW50IG1vZGlmaWVyczsKLSAgICBWYXJpYWJsZSAqdmFyaWFibGU7Ci0gICAgc3RyaW5nIHZhbHVlOwotCi0gICAgRmllbGQoKTsKLSAgICBGaWVsZChpbnQgbW9kaWZpZXJzLCBWYXJpYWJsZSogdmFyaWFibGUpOwotICAgIHZpcnR1YWwgfkZpZWxkKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgR2F0aGVyVHlwZXMoc2V0PFR5cGUqPiogdHlwZXMpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgU3RhdGVtZW50Ci17Ci0gICAgdmlydHVhbCB+U3RhdGVtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKSA9IDA7Ci19OwotCi1zdHJ1Y3QgU3RhdGVtZW50QmxvY2sgOiBwdWJsaWMgU3RhdGVtZW50Ci17Ci0gICAgdmVjdG9yPFN0YXRlbWVudCo+IHN0YXRlbWVudHM7Ci0KLSAgICBTdGF0ZW1lbnRCbG9jaygpOwotICAgIHZpcnR1YWwgflN0YXRlbWVudEJsb2NrKCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLQotICAgIHZvaWQgQWRkKFN0YXRlbWVudCogc3RhdGVtZW50KTsKLSAgICB2b2lkIEFkZChFeHByZXNzaW9uKiBleHByZXNzaW9uKTsKLX07Ci0KLXN0cnVjdCBFeHByZXNzaW9uU3RhdGVtZW50IDogcHVibGljIFN0YXRlbWVudAotewotICAgIEV4cHJlc3Npb24qIGV4cHJlc3Npb247Ci0KLSAgICBFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb24qIGV4cHJlc3Npb24pOwotICAgIHZpcnR1YWwgfkV4cHJlc3Npb25TdGF0ZW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotc3RydWN0IEFzc2lnbm1lbnQgOiBwdWJsaWMgRXhwcmVzc2lvbgotewotICAgIFZhcmlhYmxlKiBsdmFsdWU7Ci0gICAgRXhwcmVzc2lvbiogcnZhbHVlOwotICAgIFR5cGUqIGNhc3Q7Ci0KLSAgICBBc3NpZ25tZW50KFZhcmlhYmxlKiBsdmFsdWUsIEV4cHJlc3Npb24qIHJ2YWx1ZSk7Ci0gICAgQXNzaWdubWVudChWYXJpYWJsZSogbHZhbHVlLCBFeHByZXNzaW9uKiBydmFsdWUsIFR5cGUqIGNhc3QpOwotICAgIHZpcnR1YWwgfkFzc2lnbm1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotc3RydWN0IE1ldGhvZENhbGwgOiBwdWJsaWMgRXhwcmVzc2lvbgotewotICAgIEV4cHJlc3Npb24qIG9iajsKLSAgICBUeXBlKiBjbGF6ejsKLSAgICBzdHJpbmcgbmFtZTsKLSAgICB2ZWN0b3I8RXhwcmVzc2lvbio+IGFyZ3VtZW50czsKLSAgICB2ZWN0b3I8c3RyaW5nPiBleGNlcHRpb25zOwotCi0gICAgTWV0aG9kQ2FsbChjb25zdCBzdHJpbmcmIG5hbWUpOwotICAgIE1ldGhvZENhbGwoY29uc3Qgc3RyaW5nJiBuYW1lLCBpbnQgYXJnYywgLi4uKTsKLSAgICBNZXRob2RDYWxsKEV4cHJlc3Npb24qIG9iaiwgY29uc3Qgc3RyaW5nJiBuYW1lKTsKLSAgICBNZXRob2RDYWxsKFR5cGUqIGNsYXp6LCBjb25zdCBzdHJpbmcmIG5hbWUpOwotICAgIE1ldGhvZENhbGwoRXhwcmVzc2lvbiogb2JqLCBjb25zdCBzdHJpbmcmIG5hbWUsIGludCBhcmdjLCAuLi4pOwotICAgIE1ldGhvZENhbGwoVHlwZSogY2xhenosIGNvbnN0IHN0cmluZyYgbmFtZSwgaW50IGFyZ2MsIC4uLik7Ci0gICAgdmlydHVhbCB+TWV0aG9kQ2FsbCgpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBpbml0KGludCBuLCB2YV9saXN0IGFyZ3MpOwotfTsKLQotc3RydWN0IENvbXBhcmlzb24gOiBwdWJsaWMgRXhwcmVzc2lvbgotewotICAgIEV4cHJlc3Npb24qIGx2YWx1ZTsKLSAgICBzdHJpbmcgb3A7Ci0gICAgRXhwcmVzc2lvbiogcnZhbHVlOwotCi0gICAgQ29tcGFyaXNvbihFeHByZXNzaW9uKiBsdmFsdWUsIGNvbnN0IHN0cmluZyYgb3AsIEV4cHJlc3Npb24qIHJ2YWx1ZSk7Ci0gICAgdmlydHVhbCB+Q29tcGFyaXNvbigpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgTmV3RXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uCi17Ci0gICAgVHlwZSogdHlwZTsKLSAgICB2ZWN0b3I8RXhwcmVzc2lvbio+IGFyZ3VtZW50czsKLQotICAgIE5ld0V4cHJlc3Npb24oVHlwZSogdHlwZSk7Ci0gICAgTmV3RXhwcmVzc2lvbihUeXBlKiB0eXBlLCBpbnQgYXJnYywgLi4uKTsKLSAgICB2aXJ0dWFsIH5OZXdFeHByZXNzaW9uKCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGluaXQoaW50IG4sIHZhX2xpc3QgYXJncyk7Ci19OwotCi1zdHJ1Y3QgTmV3QXJyYXlFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24KLXsKLSAgICBUeXBlKiB0eXBlOwotICAgIEV4cHJlc3Npb24qIHNpemU7Ci0KLSAgICBOZXdBcnJheUV4cHJlc3Npb24oVHlwZSogdHlwZSwgRXhwcmVzc2lvbiogc2l6ZSk7Ci0gICAgdmlydHVhbCB+TmV3QXJyYXlFeHByZXNzaW9uKCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBUZXJuYXJ5IDogcHVibGljIEV4cHJlc3Npb24KLXsKLSAgICBFeHByZXNzaW9uKiBjb25kaXRpb247Ci0gICAgRXhwcmVzc2lvbiogaWZwYXJ0OwotICAgIEV4cHJlc3Npb24qIGVsc2VwYXJ0OwotCi0gICAgVGVybmFyeSgpOwotICAgIFRlcm5hcnkoRXhwcmVzc2lvbiogY29uZGl0aW9uLCBFeHByZXNzaW9uKiBpZnBhcnQsIEV4cHJlc3Npb24qIGVsc2VwYXJ0KTsKLSAgICB2aXJ0dWFsIH5UZXJuYXJ5KCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBDYXN0IDogcHVibGljIEV4cHJlc3Npb24KLXsKLSAgICBUeXBlKiB0eXBlOwotICAgIEV4cHJlc3Npb24qIGV4cHJlc3Npb247Ci0KLSAgICBDYXN0KCk7Ci0gICAgQ2FzdChUeXBlKiB0eXBlLCBFeHByZXNzaW9uKiBleHByZXNzaW9uKTsKLSAgICB2aXJ0dWFsIH5DYXN0KCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBWYXJpYWJsZURlY2xhcmF0aW9uIDogcHVibGljIFN0YXRlbWVudAotewotICAgIFZhcmlhYmxlKiBsdmFsdWU7Ci0gICAgVHlwZSogY2FzdDsKLSAgICBFeHByZXNzaW9uKiBydmFsdWU7Ci0KLSAgICBWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlKiBsdmFsdWUpOwotICAgIFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGUqIGx2YWx1ZSwgRXhwcmVzc2lvbiogcnZhbHVlLCBUeXBlKiBjYXN0ID0gTlVMTCk7Ci0gICAgdmlydHVhbCB+VmFyaWFibGVEZWNsYXJhdGlvbigpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgSWZTdGF0ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50Ci17Ci0gICAgRXhwcmVzc2lvbiogZXhwcmVzc2lvbjsKLSAgICBTdGF0ZW1lbnRCbG9jayogc3RhdGVtZW50czsKLSAgICBJZlN0YXRlbWVudCogZWxzZWlmOwotCi0gICAgSWZTdGF0ZW1lbnQoKTsKLSAgICB2aXJ0dWFsIH5JZlN0YXRlbWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgUmV0dXJuU3RhdGVtZW50IDogcHVibGljIFN0YXRlbWVudAotewotICAgIEV4cHJlc3Npb24qIGV4cHJlc3Npb247Ci0KLSAgICBSZXR1cm5TdGF0ZW1lbnQoRXhwcmVzc2lvbiogZXhwcmVzc2lvbik7Ci0gICAgdmlydHVhbCB+UmV0dXJuU3RhdGVtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBUcnlTdGF0ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50Ci17Ci0gICAgU3RhdGVtZW50QmxvY2sqIHN0YXRlbWVudHM7Ci0KLSAgICBUcnlTdGF0ZW1lbnQoKTsKLSAgICB2aXJ0dWFsIH5UcnlTdGF0ZW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotc3RydWN0IENhdGNoU3RhdGVtZW50IDogcHVibGljIFN0YXRlbWVudAotewotICAgIFN0YXRlbWVudEJsb2NrKiBzdGF0ZW1lbnRzOwotICAgIFZhcmlhYmxlKiBleGNlcHRpb247Ci0KLSAgICBDYXRjaFN0YXRlbWVudChWYXJpYWJsZSogZXhjZXB0aW9uKTsKLSAgICB2aXJ0dWFsIH5DYXRjaFN0YXRlbWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgRmluYWxseVN0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQKLXsKLSAgICBTdGF0ZW1lbnRCbG9jayogc3RhdGVtZW50czsKLQotICAgIEZpbmFsbHlTdGF0ZW1lbnQoKTsKLSAgICB2aXJ0dWFsIH5GaW5hbGx5U3RhdGVtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBDYXNlCi17Ci0gICAgdmVjdG9yPHN0cmluZz4gY2FzZXM7Ci0gICAgU3RhdGVtZW50QmxvY2sqIHN0YXRlbWVudHM7Ci0KLSAgICBDYXNlKCk7Ci0gICAgQ2FzZShjb25zdCBzdHJpbmcmIGMpOwotICAgIHZpcnR1YWwgfkNhc2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgV3JpdGUoRklMRSogdG8pOwotfTsKLQotc3RydWN0IFN3aXRjaFN0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQKLXsKLSAgICBFeHByZXNzaW9uKiBleHByZXNzaW9uOwotICAgIHZlY3RvcjxDYXNlKj4gY2FzZXM7Ci0KLSAgICBTd2l0Y2hTdGF0ZW1lbnQoRXhwcmVzc2lvbiogZXhwcmVzc2lvbik7Ci0gICAgdmlydHVhbCB+U3dpdGNoU3RhdGVtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBCcmVhayA6IHB1YmxpYyBTdGF0ZW1lbnQKLXsKLSAgICBCcmVhaygpOwotICAgIHZpcnR1YWwgfkJyZWFrKCk7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBNZXRob2QgOiBwdWJsaWMgQ2xhc3NFbGVtZW50Ci17Ci0gICAgc3RyaW5nIGNvbW1lbnQ7Ci0gICAgaW50IG1vZGlmaWVyczsKLSAgICBUeXBlKiByZXR1cm5UeXBlOwotICAgIHNpemVfdCByZXR1cm5UeXBlRGltZW5zaW9uOwotICAgIHN0cmluZyBuYW1lOwotICAgIHZlY3RvcjxWYXJpYWJsZSo+IHBhcmFtZXRlcnM7Ci0gICAgdmVjdG9yPFR5cGUqPiBleGNlcHRpb25zOwotICAgIFN0YXRlbWVudEJsb2NrKiBzdGF0ZW1lbnRzOwotCi0gICAgTWV0aG9kKCk7Ci0gICAgdmlydHVhbCB+TWV0aG9kKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgR2F0aGVyVHlwZXMoc2V0PFR5cGUqPiogdHlwZXMpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi1zdHJ1Y3QgQ2xhc3MgOiBwdWJsaWMgQ2xhc3NFbGVtZW50Ci17Ci0gICAgZW51bSB7Ci0gICAgICAgIENMQVNTLAotICAgICAgICBJTlRFUkZBQ0UKLSAgICB9OwotCi0gICAgc3RyaW5nIGNvbW1lbnQ7Ci0gICAgaW50IG1vZGlmaWVyczsKLSAgICBpbnQgd2hhdDsgICAgICAgICAgICAgICAvLyBDTEFTUyBvciBJTlRFUkZBQ0UKLSAgICBUeXBlKiB0eXBlOwotICAgIFR5cGUqIGV4dGVuZHM7Ci0gICAgdmVjdG9yPFR5cGUqPiBpbnRlcmZhY2VzOwotICAgIHZlY3RvcjxDbGFzc0VsZW1lbnQqPiBlbGVtZW50czsKLQotICAgIENsYXNzKCk7Ci0gICAgdmlydHVhbCB+Q2xhc3MoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBHYXRoZXJUeXBlcyhzZXQ8VHlwZSo+KiB0eXBlcykgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIFdyaXRlKEZJTEUqIHRvKTsKLX07Ci0KLXN0cnVjdCBEb2N1bWVudAotewotICAgIHN0cmluZyBjb21tZW50OwotICAgIHN0cmluZyBwYWNrYWdlOwotICAgIHN0cmluZyBvcmlnaW5hbFNyYzsKLSAgICBzZXQ8VHlwZSo+IGltcG9ydHM7Ci0gICAgdmVjdG9yPENsYXNzKj4gY2xhc3NlczsKLQotICAgIERvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB+RG9jdW1lbnQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBXcml0ZShGSUxFKiB0byk7Ci19OwotCi0jZW5kaWYgLy8gQUlETF9BU1RfSApkaWZmIC0tZ2l0IGEvdG9vbHMvYWlkbC9BbmRyb2lkLm1rIGIvdG9vbHMvYWlkbC9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2Q0NmFiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FpZGwvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBDb3BpZXMgZmlsZXMgaW50byB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBkZXNjcmliZWQgYnkgYSBtYW5pZmVzdAotCi0jIFRoaXMgdG9vbCBpcyBwcmVidWlsdCBpZiB3ZSdyZSBkb2luZyBhbiBhcHAtb25seSBidWlsZC4KLWlmZXEgKCQoVEFSR0VUX0JVSUxEX0FQUFMpLCkKLQotTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTIDo9IFwKLQlhaWRsX2xhbmd1YWdlX2wubCBcCi0JYWlkbF9sYW5ndWFnZV95LnkgXAotCWFpZGwuY3BwIFwKLQlhaWRsX2xhbmd1YWdlLmNwcCBcCi0Jb3B0aW9ucy5jcHAgXAotCXNlYXJjaF9wYXRoLmNwcCBcCi0JQVNULmNwcCBcCi0JVHlwZS5jcHAgXAotCWdlbmVyYXRlX2phdmEuY3BwIFwKLQlnZW5lcmF0ZV9qYXZhX2JpbmRlci5jcHAgXAotCWdlbmVyYXRlX2phdmFfcnBjLmNwcAotCi1MT0NBTF9DRkxBR1MgOj0gLWcKLUxPQ0FMX01PRFVMRSA6PSBhaWRsCi0KLWluY2x1ZGUgJChCVUlMRF9IT1NUX0VYRUNVVEFCTEUpCi0KLWVuZGlmICMgVEFSR0VUX0JVSUxEX0FQUFMKZGlmZiAtLWdpdCBhL3Rvb2xzL2FpZGwvTk9USUNFIGIvdG9vbHMvYWlkbC9OT1RJQ0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YjFlZmEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9OT1RJQ0UKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotCi0gICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLQotICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKLSAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KLQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCi0KLSAgIDEuIERlZmluaXRpb25zLgotCi0gICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAotICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCi0KLSAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5Ci0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKLSAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KLSAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCi0gICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKLSAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCi0gICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKLSAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCi0KLSAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCi0KLSAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAotICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgotICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLQotICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKLSAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKLSAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKLSAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KLQotICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKLSAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKLSAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawotICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KLQotICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAotICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQotICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucwotICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKLSAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgotICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAotICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KLQotICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKLSAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQotICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgotICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCi0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKLSAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKLSAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCi0gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAotICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKLSAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAotICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKLSAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgotCi0gICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCi0gICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KLQotICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCi0gICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKLSAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCi0KLSAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAotICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCi0gICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQotICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKLSAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKLSAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91Ci0gICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQotICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawotICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKLSAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKLSAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQotICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgotCi0gICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0Ci0gICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQotICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLSAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCi0gICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKLQotICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAotCi0gICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKLSAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKLSAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCi0gICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAotCi0gICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKLSAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0Ci0gICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCi0gICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90Ci0gICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCi0gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKLSAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCi0gICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAotICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwotICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKLSAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgotICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCi0gICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCi0gICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCi0gICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKLSAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKLSAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAotICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCi0gICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgotCi0gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCi0gICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKLSAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KLSAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKLSAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCi0gICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCi0KLSAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKLSAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKLSAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQotICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCi0KLSAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgotICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAotICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKLSAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCi0gICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCi0gICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKLSAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQotICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgotCi0gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKLSAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAotICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKLSAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCi0gICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCi0gICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKLSAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKLSAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKLSAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCi0gICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCi0gICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCi0KLSAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKLSAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCi0gICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAotICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKLSAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5Ci0gICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgotICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAotICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5Ci0gICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCi0gICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KLQotICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FpZGwvVHlwZS5jcHAgYi90b29scy9haWRsL1R5cGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTcyYWY2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FpZGwvVHlwZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQwICswLDAgQEAKLSNpbmNsdWRlICJUeXBlLmgiCi0KLU5hbWVzcGFjZSBOQU1FUzsKLQotVHlwZSogVk9JRF9UWVBFOwotVHlwZSogQk9PTEVBTl9UWVBFOwotVHlwZSogQllURV9UWVBFOwotVHlwZSogQ0hBUl9UWVBFOwotVHlwZSogSU5UX1RZUEU7Ci1UeXBlKiBMT05HX1RZUEU7Ci1UeXBlKiBGTE9BVF9UWVBFOwotVHlwZSogRE9VQkxFX1RZUEU7Ci1UeXBlKiBTVFJJTkdfVFlQRTsKLVR5cGUqIE9CSkVDVF9UWVBFOwotVHlwZSogQ0hBUl9TRVFVRU5DRV9UWVBFOwotVHlwZSogVEVYVF9VVElMU19UWVBFOwotVHlwZSogUkVNT1RFX0VYQ0VQVElPTl9UWVBFOwotVHlwZSogUlVOVElNRV9FWENFUFRJT05fVFlQRTsKLVR5cGUqIElCSU5ERVJfVFlQRTsKLVR5cGUqIElJTlRFUkZBQ0VfVFlQRTsKLVR5cGUqIEJJTkRFUl9OQVRJVkVfVFlQRTsKLVR5cGUqIEJJTkRFUl9QUk9YWV9UWVBFOwotVHlwZSogUEFSQ0VMX1RZUEU7Ci1UeXBlKiBQQVJDRUxBQkxFX0lOVEVSRkFDRV9UWVBFOwotVHlwZSogQ09OVEVYVF9UWVBFOwotVHlwZSogTUFQX1RZUEU7Ci1UeXBlKiBMSVNUX1RZUEU7Ci1UeXBlKiBDTEFTU0xPQURFUl9UWVBFOwotVHlwZSogUlBDX0RBVEFfVFlQRTsKLVR5cGUqIFJQQ19FUlJPUl9UWVBFOwotVHlwZSogRVZFTlRfRkFLRV9UWVBFOwotCi1FeHByZXNzaW9uKiBOVUxMX1ZBTFVFOwotRXhwcmVzc2lvbiogVEhJU19WQUxVRTsKLUV4cHJlc3Npb24qIFNVUEVSX1ZBTFVFOwotRXhwcmVzc2lvbiogVFJVRV9WQUxVRTsKLUV4cHJlc3Npb24qIEZBTFNFX1ZBTFVFOwotCi12b2lkCi1yZWdpc3Rlcl9iYXNlX3R5cGVzKCkKLXsKLSAgICBWT0lEX1RZUEUgPSBuZXcgQmFzaWNUeXBlKCJ2b2lkIiwKLSAgICAgICAgICAgICJYWFgiLCAiWFhYIiwgIlhYWCIsICJYWFgiLCAiWFhYIiwKLSAgICAgICAgICAgICJYWFgiLCAiWFhYIiwgIlhYWCIsICJYWFgiLCAiWFhYIik7Ci0gICAgTkFNRVMuQWRkKFZPSURfVFlQRSk7Ci0KLSAgICBCT09MRUFOX1RZUEUgPSBuZXcgQm9vbGVhblR5cGUoKTsKLSAgICBOQU1FUy5BZGQoQk9PTEVBTl9UWVBFKTsKLQotICAgIEJZVEVfVFlQRSA9IG5ldyBCYXNpY1R5cGUoImJ5dGUiLAotICAgICAgICAgICAgIndyaXRlQnl0ZSIsICJyZWFkQnl0ZSIsICJ3cml0ZUJ5dGVBcnJheSIsICJjcmVhdGVCeXRlQXJyYXkiLCAicmVhZEJ5dGVBcnJheSIsCi0gICAgICAgICAgICAicHV0Qnl0ZSIsICJnZXRCeXRlIiwgInB1dEJ5dGVBcnJheSIsICJjcmVhdGVCeXRlQXJyYXkiLCAiZ2V0Qnl0ZUFycmF5Iik7Ci0gICAgTkFNRVMuQWRkKEJZVEVfVFlQRSk7Ci0KLSAgICBDSEFSX1RZUEUgPSBuZXcgQ2hhclR5cGUoKTsKLSAgICBOQU1FUy5BZGQoQ0hBUl9UWVBFKTsKLQotICAgIElOVF9UWVBFID0gbmV3IEJhc2ljVHlwZSgiaW50IiwKLSAgICAgICAgICAgICJ3cml0ZUludCIsICJyZWFkSW50IiwgIndyaXRlSW50QXJyYXkiLCAiY3JlYXRlSW50QXJyYXkiLCAicmVhZEludEFycmF5IiwKLSAgICAgICAgICAgICJwdXRJbnRlZ2VyIiwgImdldEludGVnZXIiLCAicHV0SW50ZWdlckFycmF5IiwgImNyZWF0ZUludGVnZXJBcnJheSIsICJnZXRJbnRlZ2VyQXJyYXkiKTsKLSAgICBOQU1FUy5BZGQoSU5UX1RZUEUpOwotCi0gICAgTE9OR19UWVBFID0gbmV3IEJhc2ljVHlwZSgibG9uZyIsCi0gICAgICAgICAgICAid3JpdGVMb25nIiwgInJlYWRMb25nIiwgIndyaXRlTG9uZ0FycmF5IiwgImNyZWF0ZUxvbmdBcnJheSIsICJyZWFkTG9uZ0FycmF5IiwKLSAgICAgICAgICAgICJwdXRMb25nIiwgImdldExvbmciLCAicHV0TG9uZ0FycmF5IiwgImNyZWF0ZUxvbmdBcnJheSIsICJnZXRMb25nQXJyYXkiKTsKLSAgICBOQU1FUy5BZGQoTE9OR19UWVBFKTsKLQotICAgIEZMT0FUX1RZUEUgPSBuZXcgQmFzaWNUeXBlKCJmbG9hdCIsCi0gICAgICAgICAgICAid3JpdGVGbG9hdCIsICJyZWFkRmxvYXQiLCAid3JpdGVGbG9hdEFycmF5IiwgImNyZWF0ZUZsb2F0QXJyYXkiLCAicmVhZEZsb2F0QXJyYXkiLAotICAgICAgICAgICAgInB1dEZsb2F0IiwgImdldEZsb2F0IiwgInB1dEZsb2F0QXJyYXkiLCAiY3JlYXRlRmxvYXRBcnJheSIsICJnZXRGbG9hdEFycmF5Iik7Ci0gICAgTkFNRVMuQWRkKEZMT0FUX1RZUEUpOwotCi0gICAgRE9VQkxFX1RZUEUgPSBuZXcgQmFzaWNUeXBlKCJkb3VibGUiLAotICAgICAgICAgICAgIndyaXRlRG91YmxlIiwgInJlYWREb3VibGUiLCAid3JpdGVEb3VibGVBcnJheSIsICJjcmVhdGVEb3VibGVBcnJheSIsICJyZWFkRG91YmxlQXJyYXkiLAotICAgICAgICAgICAgInB1dERvdWJsZSIsICJnZXREb3VibGUiLCAicHV0RG91YmxlQXJyYXkiLCAiY3JlYXRlRG91YmxlQXJyYXkiLCAiZ2V0RG91YmxlQXJyYXkiKTsKLSAgICBOQU1FUy5BZGQoRE9VQkxFX1RZUEUpOwotCi0gICAgU1RSSU5HX1RZUEUgPSBuZXcgU3RyaW5nVHlwZSgpOwotICAgIE5BTUVTLkFkZChTVFJJTkdfVFlQRSk7Ci0KLSAgICBPQkpFQ1RfVFlQRSA9IG5ldyBUeXBlKCJqYXZhLmxhbmciLCAiT2JqZWN0IiwgVHlwZTo6QlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotICAgIE5BTUVTLkFkZChPQkpFQ1RfVFlQRSk7Ci0KLSAgICBDSEFSX1NFUVVFTkNFX1RZUEUgPSBuZXcgQ2hhclNlcXVlbmNlVHlwZSgpOwotICAgIE5BTUVTLkFkZChDSEFSX1NFUVVFTkNFX1RZUEUpOwotCi0gICAgTUFQX1RZUEUgPSBuZXcgTWFwVHlwZSgpOwotICAgIE5BTUVTLkFkZChNQVBfVFlQRSk7Ci0KLSAgICBMSVNUX1RZUEUgPSBuZXcgTGlzdFR5cGUoKTsKLSAgICBOQU1FUy5BZGQoTElTVF9UWVBFKTsKLQotICAgIFRFWFRfVVRJTFNfVFlQRSA9IG5ldyBUeXBlKCJhbmRyb2lkLnRleHQiLCAiVGV4dFV0aWxzIiwgVHlwZTo6QlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotICAgIE5BTUVTLkFkZChURVhUX1VUSUxTX1RZUEUpOwotCi0gICAgUkVNT1RFX0VYQ0VQVElPTl9UWVBFID0gbmV3IFJlbW90ZUV4Y2VwdGlvblR5cGUoKTsKLSAgICBOQU1FUy5BZGQoUkVNT1RFX0VYQ0VQVElPTl9UWVBFKTsKLQotICAgIFJVTlRJTUVfRVhDRVBUSU9OX1RZUEUgPSBuZXcgUnVudGltZUV4Y2VwdGlvblR5cGUoKTsKLSAgICBOQU1FUy5BZGQoUlVOVElNRV9FWENFUFRJT05fVFlQRSk7Ci0KLSAgICBJQklOREVSX1RZUEUgPSBuZXcgSUJpbmRlclR5cGUoKTsKLSAgICBOQU1FUy5BZGQoSUJJTkRFUl9UWVBFKTsKLQotICAgIElJTlRFUkZBQ0VfVFlQRSA9IG5ldyBJSW50ZXJmYWNlVHlwZSgpOwotICAgIE5BTUVTLkFkZChJSU5URVJGQUNFX1RZUEUpOwotCi0gICAgQklOREVSX05BVElWRV9UWVBFID0gbmV3IEJpbmRlclR5cGUoKTsKLSAgICBOQU1FUy5BZGQoQklOREVSX05BVElWRV9UWVBFKTsKLQotICAgIEJJTkRFUl9QUk9YWV9UWVBFID0gbmV3IEJpbmRlclByb3h5VHlwZSgpOwotICAgIE5BTUVTLkFkZChCSU5ERVJfUFJPWFlfVFlQRSk7Ci0KLSAgICBQQVJDRUxfVFlQRSA9IG5ldyBQYXJjZWxUeXBlKCk7Ci0gICAgTkFNRVMuQWRkKFBBUkNFTF9UWVBFKTsKLQotICAgIFBBUkNFTEFCTEVfSU5URVJGQUNFX1RZUEUgPSBuZXcgUGFyY2VsYWJsZUludGVyZmFjZVR5cGUoKTsKLSAgICBOQU1FUy5BZGQoUEFSQ0VMQUJMRV9JTlRFUkZBQ0VfVFlQRSk7Ci0KLSAgICBDT05URVhUX1RZUEUgPSBuZXcgVHlwZSgiYW5kcm9pZC5jb250ZW50IiwgIkNvbnRleHQiLCBUeXBlOjpCVUlMVF9JTiwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0gICAgTkFNRVMuQWRkKENPTlRFWFRfVFlQRSk7Ci0KLSAgICBSUENfREFUQV9UWVBFID0gbmV3IFJwY0RhdGFUeXBlKCk7Ci0gICAgTkFNRVMuQWRkKFJQQ19EQVRBX1RZUEUpOwotCi0gICAgUlBDX0VSUk9SX1RZUEUgPSBuZXcgVXNlckRhdGFUeXBlKCJhbmRyb2lkLnN1cHBvcnQucGxhY2UucnBjIiwgIlJwY0Vycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgTkFNRVMuQWRkKFJQQ19FUlJPUl9UWVBFKTsKLQotICAgIEVWRU5UX0ZBS0VfVFlQRSA9IG5ldyBUeXBlKCJldmVudCIsIFR5cGU6OkJVSUxUX0lOLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLSAgICBOQU1FUy5BZGQoRVZFTlRfRkFLRV9UWVBFKTsKLQotICAgIENMQVNTTE9BREVSX1RZUEUgPSBuZXcgQ2xhc3NMb2FkZXJUeXBlKCk7Ci0gICAgTkFNRVMuQWRkKENMQVNTTE9BREVSX1RZUEUpOwotCi0gICAgTlVMTF9WQUxVRSA9IG5ldyBMaXRlcmFsRXhwcmVzc2lvbigibnVsbCIpOwotICAgIFRISVNfVkFMVUUgPSBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oInRoaXMiKTsKLSAgICBTVVBFUl9WQUxVRSA9IG5ldyBMaXRlcmFsRXhwcmVzc2lvbigic3VwZXIiKTsKLSAgICBUUlVFX1ZBTFVFID0gbmV3IExpdGVyYWxFeHByZXNzaW9uKCJ0cnVlIik7Ci0gICAgRkFMU0VfVkFMVUUgPSBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oImZhbHNlIik7Ci0KLSAgICBOQU1FUy5BZGRHZW5lcmljVHlwZSgiamF2YS51dGlsIiwgIkxpc3QiLCAxKTsKLSAgICBOQU1FUy5BZGRHZW5lcmljVHlwZSgiamF2YS51dGlsIiwgIk1hcCIsIDIpOwotfQotCi1zdGF0aWMgVHlwZSoKLW1ha2VfZ2VuZXJpY190eXBlKGNvbnN0IHN0cmluZyYgcGFja2FnZSwgY29uc3Qgc3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3I8VHlwZSo+JiBhcmdzKQotewotICAgIGlmIChwYWNrYWdlID09ICJqYXZhLnV0aWwiICYmIG5hbWUgPT0gIkxpc3QiKSB7Ci0gICAgICAgIHJldHVybiBuZXcgR2VuZXJpY0xpc3RUeXBlKCJqYXZhLnV0aWwiLCAiTGlzdCIsIGFyZ3MpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLSAgICAvL3JldHVybiBuZXcgR2VuZXJpY1R5cGUocGFja2FnZSwgbmFtZSwgYXJncyk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVHlwZTo6VHlwZShjb25zdCBzdHJpbmcmIG5hbWUsIGludCBraW5kLCBib29sIGNhbldyaXRlVG9QYXJjZWwsIGJvb2wgY2FuV3JpdGVUb1JwY0RhdGEsCi0gICAgICAgIGJvb2wgY2FuQmVPdXQpCi0gICAgOm1fcGFja2FnZSgpLAotICAgICBtX25hbWUobmFtZSksCi0gICAgIG1fZGVjbEZpbGUoIiIpLAotICAgICBtX2RlY2xMaW5lKC0xKSwKLSAgICAgbV9raW5kKGtpbmQpLAotICAgICBtX2NhbldyaXRlVG9QYXJjZWwoY2FuV3JpdGVUb1BhcmNlbCksCi0gICAgIG1fY2FuV3JpdGVUb1JwY0RhdGEoY2FuV3JpdGVUb1JwY0RhdGEpLAotICAgICBtX2NhbkJlT3V0KGNhbkJlT3V0KQotewotICAgIG1fcXVhbGlmaWVkTmFtZSA9IG5hbWU7Ci19Ci0KLVR5cGU6OlR5cGUoY29uc3Qgc3RyaW5nJiBwYWNrYWdlLCBjb25zdCBzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICBpbnQga2luZCwgYm9vbCBjYW5Xcml0ZVRvUGFyY2VsLCBib29sIGNhbldyaXRlVG9ScGNEYXRhLAotICAgICAgICAgICAgYm9vbCBjYW5CZU91dCwgY29uc3Qgc3RyaW5nJiBkZWNsRmlsZSwgaW50IGRlY2xMaW5lKQotICAgIDptX3BhY2thZ2UocGFja2FnZSksCi0gICAgIG1fbmFtZShuYW1lKSwKLSAgICAgbV9kZWNsRmlsZShkZWNsRmlsZSksCi0gICAgIG1fZGVjbExpbmUoZGVjbExpbmUpLAotICAgICBtX2tpbmQoa2luZCksCi0gICAgIG1fY2FuV3JpdGVUb1BhcmNlbChjYW5Xcml0ZVRvUGFyY2VsKSwKLSAgICAgbV9jYW5Xcml0ZVRvUnBjRGF0YShjYW5Xcml0ZVRvUnBjRGF0YSksCi0gICAgIG1fY2FuQmVPdXQoY2FuQmVPdXQpCi17Ci0gICAgaWYgKHBhY2thZ2UubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIG1fcXVhbGlmaWVkTmFtZSA9IHBhY2thZ2U7Ci0gICAgICAgIG1fcXVhbGlmaWVkTmFtZSArPSAnLic7Ci0gICAgfQotICAgIG1fcXVhbGlmaWVkTmFtZSArPSBuYW1lOwotfQotCi1UeXBlOjp+VHlwZSgpCi17Ci19Ci0KLWJvb2wKLVR5cGU6OkNhbkJlQXJyYXkoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RyaW5nCi1UeXBlOjpJbXBvcnRUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9xdWFsaWZpZWROYW1lOwotfQotCi1zdHJpbmcKLVR5cGU6OkNyZWF0b3JOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIiI7Ci19Ci0KLXN0cmluZwotVHlwZTo6UnBjQ3JlYXRvck5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiIjsKLX0KLQotc3RyaW5nCi1UeXBlOjpJbnN0YW50aWFibGVOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUXVhbGlmaWVkTmFtZSgpOwotfQotCi0KLXZvaWQKLVR5cGU6OldyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZCBxdWFsaWZpZWROYW1lPSVzbiIsCi0gICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIG1fcXVhbGlmaWVkTmFtZS5jX3N0cigpKTsKLSAgICBhZGRUby0+QWRkKG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiLyogV3JpdGVUb1BhcmNlbCBlcnJvciAiCi0gICAgICAgICAgICAgICAgKyBtX3F1YWxpZmllZE5hbWUgKyAiICovIikpOwotfQotCi12b2lkCi1UeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOmludGVybmFsIGVycm9yICVzOiVkIHF1YWxpZmllZE5hbWU9JXNcbiIsCi0gICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIG1fcXVhbGlmaWVkTmFtZS5jX3N0cigpKTsKLSAgICBhZGRUby0+QWRkKG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiLyogQ3JlYXRlRnJvbVBhcmNlbCBlcnJvciAiCi0gICAgICAgICAgICAgICAgKyBtX3F1YWxpZmllZE5hbWUgKyAiICovIikpOwotfQotCi12b2lkCi1UeXBlOjpSZWFkRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZCBxdWFsaWZpZWROYW1lPSVzXG4iLAotICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBtX3F1YWxpZmllZE5hbWUuY19zdHIoKSk7Ci0gICAgYWRkVG8tPkFkZChuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIi8qIFJlYWRGcm9tUGFyY2VsIGVycm9yICIKLSAgICAgICAgICAgICAgICArIG1fcXVhbGlmaWVkTmFtZSArICIgKi8iKSk7Ci19Ci0KLXZvaWQKLVR5cGU6OldyaXRlQXJyYXlUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOmludGVybmFsIGVycm9yICVzOiVkIHF1YWxpZmllZE5hbWU9JXNcbiIsCi0gICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIG1fcXVhbGlmaWVkTmFtZS5jX3N0cigpKTsKLSAgICBhZGRUby0+QWRkKG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiLyogV3JpdGVBcnJheVRvUGFyY2VsIGVycm9yICIKLSAgICAgICAgICAgICAgICArIG1fcXVhbGlmaWVkTmFtZSArICIgKi8iKSk7Ci19Ci0KLXZvaWQKLVR5cGU6OkNyZWF0ZUFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOmludGVybmFsIGVycm9yICVzOiVkIHF1YWxpZmllZE5hbWU9JXNcbiIsCi0gICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIG1fcXVhbGlmaWVkTmFtZS5jX3N0cigpKTsKLSAgICBhZGRUby0+QWRkKG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiLyogQ3JlYXRlQXJyYXlGcm9tUGFyY2VsIGVycm9yICIKLSAgICAgICAgICAgICAgICArIG1fcXVhbGlmaWVkTmFtZSArICIgKi8iKSk7Ci19Ci0KLXZvaWQKLVR5cGU6OlJlYWRBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWQgcXVhbGlmaWVkTmFtZT0lc1xuIiwKLSAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgbV9xdWFsaWZpZWROYW1lLmNfc3RyKCkpOwotICAgIGFkZFRvLT5BZGQobmV3IExpdGVyYWxFeHByZXNzaW9uKCIvKiBSZWFkQXJyYXlGcm9tUGFyY2VsIGVycm9yICIKLSAgICAgICAgICAgICAgICArIG1fcXVhbGlmaWVkTmFtZSArICIgKi8iKSk7Ci19Ci0KLXZvaWQKLVR5cGU6OldyaXRlVG9ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgIFZhcmlhYmxlKiBkYXRhLCBpbnQgZmxhZ3MpCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOmludGVybmFsIGVycm9yICVzOiVkIHF1YWxpZmllZE5hbWU9JXNcbiIsCi0gICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIG1fcXVhbGlmaWVkTmFtZS5jX3N0cigpKTsKLSAgICBhZGRUby0+QWRkKG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiLyogV3JpdGVUb1JwY0RhdGEgZXJyb3IgIgotICAgICAgICAgICAgICAgICsgbV9xdWFsaWZpZWROYW1lICsgIiAqLyIpKTsKLX0KLQotdm9pZAotVHlwZTo6Q3JlYXRlRnJvbVJwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIGRhdGEsCi0gICAgICAgIFZhcmlhYmxlKiogY2wpCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOmludGVybmFsIGVycm9yICVzOiVkIHF1YWxpZmllZE5hbWU9JXNcbiIsCi0gICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIG1fcXVhbGlmaWVkTmFtZS5jX3N0cigpKTsKLSAgICBhZGRUby0+QWRkKG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiLyogUmVhZEZyb21ScGNEYXRhIGVycm9yICIKLSAgICAgICAgICAgICAgICArIG1fcXVhbGlmaWVkTmFtZSArICIgKi8iKSk7Ci19Ci0KLXZvaWQKLVR5cGU6OlNldFF1YWxpZmllZE5hbWUoY29uc3Qgc3RyaW5nJiBxdWFsaWZpZWQpCi17Ci0gICAgbV9xdWFsaWZpZWROYW1lID0gcXVhbGlmaWVkOwotfQotCi1FeHByZXNzaW9uKgotVHlwZTo6QnVpbGRXcml0ZVRvUGFyY2VsRmxhZ3MoaW50IGZsYWdzKQotewotICAgIGlmIChmbGFncyA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIjAiKTsKLSAgICB9Ci0gICAgaWYgKChmbGFncyZQQVJDRUxBQkxFX1dSSVRFX1JFVFVSTl9WQUxVRSkgIT0gMCkgewotICAgICAgICByZXR1cm4gbmV3IEZpZWxkVmFyaWFibGUoUEFSQ0VMQUJMRV9JTlRFUkZBQ0VfVFlQRSwKLSAgICAgICAgICAgICAgICAiUEFSQ0VMQUJMRV9XUklURV9SRVRVUk5fVkFMVUUiKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiMCIpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUJhc2ljVHlwZTo6QmFzaWNUeXBlKGNvbnN0IHN0cmluZyYgbmFtZSwgY29uc3Qgc3RyaW5nJiBtYXJzaGFsbFBhcmNlbCwKLSAgICAgICAgICBjb25zdCBzdHJpbmcmIHVubWFyc2hhbGxQYXJjZWwsIGNvbnN0IHN0cmluZyYgd3JpdGVBcnJheVBhcmNlbCwKLSAgICAgICAgICBjb25zdCBzdHJpbmcmIGNyZWF0ZUFycmF5UGFyY2VsLCBjb25zdCBzdHJpbmcmIHJlYWRBcnJheVBhcmNlbCwKLSAgICAgICAgICBjb25zdCBzdHJpbmcmIG1hcnNoYWxsUnBjLCBjb25zdCBzdHJpbmcmIHVubWFyc2hhbGxScGMsCi0gICAgICAgICAgY29uc3Qgc3RyaW5nJiB3cml0ZUFycmF5UnBjLCBjb25zdCBzdHJpbmcmIGNyZWF0ZUFycmF5UnBjLCBjb25zdCBzdHJpbmcmIHJlYWRBcnJheVJwYykKLSAgICA6VHlwZShuYW1lLCBCVUlMVF9JTiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpLAotICAgICBtX21hcnNoYWxsUGFyY2VsKG1hcnNoYWxsUGFyY2VsKSwKLSAgICAgbV91bm1hcnNoYWxsUGFyY2VsKHVubWFyc2hhbGxQYXJjZWwpLAotICAgICBtX3dyaXRlQXJyYXlQYXJjZWwod3JpdGVBcnJheVBhcmNlbCksCi0gICAgIG1fY3JlYXRlQXJyYXlQYXJjZWwoY3JlYXRlQXJyYXlQYXJjZWwpLAotICAgICBtX3JlYWRBcnJheVBhcmNlbChyZWFkQXJyYXlQYXJjZWwpLAotICAgICBtX21hcnNoYWxsUnBjKG1hcnNoYWxsUnBjKSwKLSAgICAgbV91bm1hcnNoYWxsUnBjKHVubWFyc2hhbGxScGMpLAotICAgICBtX3dyaXRlQXJyYXlScGMod3JpdGVBcnJheVJwYyksCi0gICAgIG1fY3JlYXRlQXJyYXlScGMoY3JlYXRlQXJyYXlScGMpLAotICAgICBtX3JlYWRBcnJheVJwYyhyZWFkQXJyYXlScGMpCi17Ci19Ci0KLXZvaWQKLUJhc2ljVHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsIG1fbWFyc2hhbGxQYXJjZWwsIDEsIHYpKTsKLX0KLQotdm9pZAotQmFzaWNUeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LCBuZXcgTWV0aG9kQ2FsbChwYXJjZWwsIG1fdW5tYXJzaGFsbFBhcmNlbCkpKTsKLX0KLQotYm9vbAotQmFzaWNUeXBlOjpDYW5CZUFycmF5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZAotQmFzaWNUeXBlOjpXcml0ZUFycmF5VG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCBtX3dyaXRlQXJyYXlQYXJjZWwsIDEsIHYpKTsKLX0KLQotdm9pZAotQmFzaWNUeXBlOjpDcmVhdGVBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwocGFyY2VsLCBtX2NyZWF0ZUFycmF5UGFyY2VsKSkpOwotfQotCi12b2lkCi1CYXNpY1R5cGU6OlJlYWRBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgbV9yZWFkQXJyYXlQYXJjZWwsIDEsIHYpKTsKLX0KLQotdm9pZAotQmFzaWNUeXBlOjpXcml0ZVRvUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICBWYXJpYWJsZSogZGF0YSwgaW50IGZsYWdzKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwoZGF0YSwgbV9tYXJzaGFsbFJwYywgMiwgaywgdikpOwotfQotCi12b2lkCi1CYXNpY1R5cGU6OkNyZWF0ZUZyb21ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBkYXRhLAotICAgICAgICBWYXJpYWJsZSoqIGNsKQotewotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwoZGF0YSwgbV91bm1hcnNoYWxsUnBjLCAxLCBrKSkpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUJvb2xlYW5UeXBlOjpCb29sZWFuVHlwZSgpCi0gICAgOlR5cGUoImJvb2xlYW4iLCBCVUlMVF9JTiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpCi17Ci19Ci0KLXZvaWQKLUJvb2xlYW5UeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlSW50IiwgMSwgCi0gICAgICAgICAgICAgICAgbmV3IFRlcm5hcnkodiwgbmV3IExpdGVyYWxFeHByZXNzaW9uKCIxIiksCi0gICAgICAgICAgICAgICAgICAgIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiMCIpKSkpOwotfQotCi12b2lkCi1Cb29sZWFuVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IENvbXBhcmlzb24obmV3IExpdGVyYWxFeHByZXNzaW9uKCIwIiksCi0gICAgICAgICAgICAgICAgICAgICIhPSIsIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgInJlYWRJbnQiKSkpKTsKLX0KLQotYm9vbAotQm9vbGVhblR5cGU6OkNhbkJlQXJyYXkoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkCi1Cb29sZWFuVHlwZTo6V3JpdGVBcnJheVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlQm9vbGVhbkFycmF5IiwgMSwgdikpOwotfQotCi12b2lkCi1Cb29sZWFuVHlwZTo6Q3JlYXRlQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgImNyZWF0ZUJvb2xlYW5BcnJheSIpKSk7Ci19Ci0KLXZvaWQKLUJvb2xlYW5UeXBlOjpSZWFkQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkQm9vbGVhbkFycmF5IiwgMSwgdikpOwotfQotCi12b2lkCi1Cb29sZWFuVHlwZTo6V3JpdGVUb1JwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgVmFyaWFibGUqIGRhdGEsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKGRhdGEsICJwdXRCb29sZWFuIiwgMiwgaywgdikpOwotfQotCi12b2lkCi1Cb29sZWFuVHlwZTo6Q3JlYXRlRnJvbVJwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIGRhdGEsCi0gICAgICAgIFZhcmlhYmxlKiogY2wpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LCBuZXcgTWV0aG9kQ2FsbChkYXRhLCAiZ2V0Qm9vbGVhbiIsIDEsIGspKSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQ2hhclR5cGU6OkNoYXJUeXBlKCkKLSAgICA6VHlwZSgiY2hhciIsIEJVSUxUX0lOLCB0cnVlLCB0cnVlLCBmYWxzZSkKLXsKLX0KLQotdm9pZAotQ2hhclR5cGU6OldyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAid3JpdGVJbnQiLCAxLCAKLSAgICAgICAgICAgICAgICAgICAgbmV3IENhc3QoSU5UX1RZUEUsIHYpKSk7Ci19Ci0KLXZvaWQKLUNoYXJUeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LCBuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkSW50IiksIHRoaXMpKTsKLX0KLQotYm9vbAotQ2hhclR5cGU6OkNhbkJlQXJyYXkoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkCi1DaGFyVHlwZTo6V3JpdGVBcnJheVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlQ2hhckFycmF5IiwgMSwgdikpOwotfQotCi12b2lkCi1DaGFyVHlwZTo6Q3JlYXRlQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgImNyZWF0ZUNoYXJBcnJheSIpKSk7Ci19Ci0KLXZvaWQKLUNoYXJUeXBlOjpSZWFkQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkQ2hhckFycmF5IiwgMSwgdikpOwotfQotCi12b2lkCi1DaGFyVHlwZTo6V3JpdGVUb1JwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgVmFyaWFibGUqIGRhdGEsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKGRhdGEsICJwdXRDaGFyIiwgMiwgaywgdikpOwotfQotCi12b2lkCi1DaGFyVHlwZTo6Q3JlYXRlRnJvbVJwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIGRhdGEsCi0gICAgICAgIFZhcmlhYmxlKiogY2wpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LCBuZXcgTWV0aG9kQ2FsbChkYXRhLCAiZ2V0Q2hhciIsIDEsIGspKSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotU3RyaW5nVHlwZTo6U3RyaW5nVHlwZSgpCi0gICAgOlR5cGUoImphdmEubGFuZyIsICJTdHJpbmciLCBCVUlMVF9JTiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpCi17Ci19Ci0KLXN0cmluZwotU3RyaW5nVHlwZTo6Q3JlYXRvck5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiYW5kcm9pZC5vcy5QYXJjZWwuU1RSSU5HX0NSRUFUT1IiOwotfQotCi12b2lkCi1TdHJpbmdUeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlU3RyaW5nIiwgMSwgdikpOwotfQotCi12b2lkCi1TdHJpbmdUeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LCBuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkU3RyaW5nIikpKTsKLX0KLQotYm9vbAotU3RyaW5nVHlwZTo6Q2FuQmVBcnJheSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQKLVN0cmluZ1R5cGU6OldyaXRlQXJyYXlUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZVN0cmluZ0FycmF5IiwgMSwgdikpOwotfQotCi12b2lkCi1TdHJpbmdUeXBlOjpDcmVhdGVBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwocGFyY2VsLCAiY3JlYXRlU3RyaW5nQXJyYXkiKSkpOwotfQotCi12b2lkCi1TdHJpbmdUeXBlOjpSZWFkQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkU3RyaW5nQXJyYXkiLCAxLCB2KSk7Ci19Ci0KLXZvaWQKLVN0cmluZ1R5cGU6OldyaXRlVG9ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgIFZhcmlhYmxlKiBkYXRhLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChkYXRhLCAicHV0U3RyaW5nIiwgMiwgaywgdikpOwotfQotCi12b2lkCi1TdHJpbmdUeXBlOjpDcmVhdGVGcm9tUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICBWYXJpYWJsZSogZGF0YSwgVmFyaWFibGUqKikKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKGRhdGEsICJnZXRTdHJpbmciLCAxLCBrKSkpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUNoYXJTZXF1ZW5jZVR5cGU6OkNoYXJTZXF1ZW5jZVR5cGUoKQotICAgIDpUeXBlKCJqYXZhLmxhbmciLCAiQ2hhclNlcXVlbmNlIiwgQlVJTFRfSU4sIHRydWUsIHRydWUsIGZhbHNlKQotewotfQotCi1zdHJpbmcKLUNoYXJTZXF1ZW5jZVR5cGU6OkNyZWF0b3JOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gImFuZHJvaWQub3MuUGFyY2VsLlNUUklOR19DUkVBVE9SIjsKLX0KLQotdm9pZAotQ2hhclNlcXVlbmNlVHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgLy8gaWYgKHYgIT0gbnVsbCkgewotICAgIC8vICAgICBwYXJjZWwud3JpdGVJbnQoMSk7Ci0gICAgLy8gICAgIHYud3JpdGVUb1BhcmNlbChwYXJjZWwpOwotICAgIC8vIH0gZWxzZSB7Ci0gICAgLy8gICAgIHBhcmNlbC53cml0ZUludCgwKTsKLSAgICAvLyB9Ci0gICAgSWZTdGF0ZW1lbnQqIGVsc2VwYXJ0ID0gbmV3IElmU3RhdGVtZW50KCk7Ci0gICAgZWxzZXBhcnQtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZUludCIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiMCIpKSk7Ci0gICAgSWZTdGF0ZW1lbnQqIGlmcGFydCA9IG5ldyBJZlN0YXRlbWVudDsKLSAgICBpZnBhcnQtPmV4cHJlc3Npb24gPSBuZXcgQ29tcGFyaXNvbih2LCAiIT0iLCBOVUxMX1ZBTFVFKTsKLSAgICBpZnBhcnQtPmVsc2VpZiA9IGVsc2VwYXJ0OwotICAgIGlmcGFydC0+c3RhdGVtZW50cy0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlSW50IiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpdGVyYWxFeHByZXNzaW9uKCIxIikpKTsKLSAgICBpZnBhcnQtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbChURVhUX1VUSUxTX1RZUEUsICJ3cml0ZVRvUGFyY2VsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMywgdiwgcGFyY2VsLCBCdWlsZFdyaXRlVG9QYXJjZWxGbGFncyhmbGFncykpKTsKLQotICAgIGFkZFRvLT5BZGQoaWZwYXJ0KTsKLX0KLQotdm9pZAotQ2hhclNlcXVlbmNlVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIC8vIGlmICgwICE9IHBhcmNlbC5yZWFkSW50KCkpIHsKLSAgICAvLyAgICAgdiA9IFRleHRVdGlscy5jcmVhdGVGcm9tUGFyY2VsKHBhcmNlbCkKLSAgICAvLyB9IGVsc2UgewotICAgIC8vICAgICB2ID0gbnVsbDsKLSAgICAvLyB9Ci0gICAgSWZTdGF0ZW1lbnQqIGVsc2VwYXJ0ID0gbmV3IElmU3RhdGVtZW50KCk7Ci0gICAgZWxzZXBhcnQtPnN0YXRlbWVudHMtPkFkZChuZXcgQXNzaWdubWVudCh2LCBOVUxMX1ZBTFVFKSk7Ci0KLSAgICBJZlN0YXRlbWVudCogaWZwYXJ0ID0gbmV3IElmU3RhdGVtZW50KCk7Ci0gICAgaWZwYXJ0LT5leHByZXNzaW9uID0gbmV3IENvbXBhcmlzb24obmV3IExpdGVyYWxFeHByZXNzaW9uKCIwIiksICIhPSIsCi0gICAgICAgICAgICAgICAgbmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZEludCIpKTsKLSAgICBpZnBhcnQtPmVsc2VpZiA9IGVsc2VwYXJ0OwotICAgIGlmcGFydC0+c3RhdGVtZW50cy0+QWRkKG5ldyBBc3NpZ25tZW50KHYsCi0gICAgICAgICAgICAgICAgbmV3IE1ldGhvZENhbGwoVEVYVF9VVElMU19UWVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNIQVJfU0VRVUVOQ0VfQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsIiwgMSwgcGFyY2VsKSkpOwotCi0gICAgYWRkVG8tPkFkZChpZnBhcnQpOwotfQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUmVtb3RlRXhjZXB0aW9uVHlwZTo6UmVtb3RlRXhjZXB0aW9uVHlwZSgpCi0gICAgOlR5cGUoImFuZHJvaWQub3MiLCAiUmVtb3RlRXhjZXB0aW9uIiwgQlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi17Ci19Ci0KLXZvaWQKLVJlbW90ZUV4Y2VwdGlvblR5cGU6OldyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLX0KLQotdm9pZAotUmVtb3RlRXhjZXB0aW9uVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1SdW50aW1lRXhjZXB0aW9uVHlwZTo6UnVudGltZUV4Y2VwdGlvblR5cGUoKQotICAgIDpUeXBlKCJqYXZhLmxhbmciLCAiUnVudGltZUV4Y2VwdGlvbiIsIEJVSUxUX0lOLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotewotfQotCi12b2lkCi1SdW50aW1lRXhjZXB0aW9uVHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOmludGVybmFsIGVycm9yICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotfQotCi12b2lkCi1SdW50aW1lRXhjZXB0aW9uVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLX0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUlCaW5kZXJUeXBlOjpJQmluZGVyVHlwZSgpCi0gICAgOlR5cGUoImFuZHJvaWQub3MiLCAiSUJpbmRlciIsIEJVSUxUX0lOLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi17Ci19Ci0KLXZvaWQKLUlCaW5kZXJUeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlU3Ryb25nQmluZGVyIiwgMSwgdikpOwotfQotCi12b2lkCi1JQmluZGVyVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZFN0cm9uZ0JpbmRlciIpKSk7Ci19Ci0KLXZvaWQKLUlCaW5kZXJUeXBlOjpXcml0ZUFycmF5VG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAid3JpdGVCaW5kZXJBcnJheSIsIDEsIHYpKTsKLX0KLQotdm9pZAotSUJpbmRlclR5cGU6OkNyZWF0ZUFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LCBuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJjcmVhdGVCaW5kZXJBcnJheSIpKSk7Ci19Ci0KLXZvaWQKLUlCaW5kZXJUeXBlOjpSZWFkQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkQmluZGVyQXJyYXkiLCAxLCB2KSk7Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1JSW50ZXJmYWNlVHlwZTo6SUludGVyZmFjZVR5cGUoKQotICAgIDpUeXBlKCJhbmRyb2lkLm9zIiwgIklJbnRlcmZhY2UiLCBCVUlMVF9JTiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLXsKLX0KLQotdm9pZAotSUludGVyZmFjZVR5cGU6OldyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLX0KLQotdm9pZAotSUludGVyZmFjZVR5cGU6OkNyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1CaW5kZXJUeXBlOjpCaW5kZXJUeXBlKCkKLSAgICA6VHlwZSgiYW5kcm9pZC5vcyIsICJCaW5kZXIiLCBCVUlMVF9JTiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLXsKLX0KLQotdm9pZAotQmluZGVyVHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOmludGVybmFsIGVycm9yICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotfQotCi12b2lkCi1CaW5kZXJUeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLX0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUJpbmRlclByb3h5VHlwZTo6QmluZGVyUHJveHlUeXBlKCkKLSAgICA6VHlwZSgiYW5kcm9pZC5vcyIsICJCaW5kZXJQcm94eSIsIEJVSUxUX0lOLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotewotfQotCi12b2lkCi1CaW5kZXJQcm94eVR5cGU6OldyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLX0KLQotdm9pZAotQmluZGVyUHJveHlUeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLX0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVBhcmNlbFR5cGU6OlBhcmNlbFR5cGUoKQotICAgIDpUeXBlKCJhbmRyb2lkLm9zIiwgIlBhcmNlbCIsIEJVSUxUX0lOLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotewotfQotCi12b2lkCi1QYXJjZWxUeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci19Ci0KLXZvaWQKLVBhcmNlbFR5cGU6OkNyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUGFyY2VsYWJsZUludGVyZmFjZVR5cGU6OlBhcmNlbGFibGVJbnRlcmZhY2VUeXBlKCkKLSAgICA6VHlwZSgiYW5kcm9pZC5vcyIsICJQYXJjZWxhYmxlIiwgQlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi17Ci19Ci0KLXZvaWQKLVBhcmNlbGFibGVJbnRlcmZhY2VUeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6aW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci19Ci0KLXZvaWQKLVBhcmNlbGFibGVJbnRlcmZhY2VUeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJhaWRsOmludGVybmFsIGVycm9yICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLU1hcFR5cGU6Ok1hcFR5cGUoKQotICAgIDpUeXBlKCJqYXZhLnV0aWwiLCAiTWFwIiwgQlVJTFRfSU4sIHRydWUsIGZhbHNlLCB0cnVlKQotewotfQotCi12b2lkCi1NYXBUeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlTWFwIiwgMSwgdikpOwotfQotCi1zdGF0aWMgdm9pZCBFbnN1cmVDbGFzc0xvYWRlcihTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiogY2wpCi17Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBsb29rIHVwIHRoZSBjbGFzcyBsb2FkZXIgb25jZSBmb3IgZXZlcnkKLSAgICAvLyBjb2xsZWN0aW9uIGFyZ3VtZW50LCBzbyBlbnN1cmUgd2UgZG8gaXQgYXQgbW9zdCBvbmNlIHBlciBtZXRob2QuCi0gICAgaWYgKCpjbCA9PSBOVUxMKSB7Ci0gICAgICAgICpjbCA9IG5ldyBWYXJpYWJsZShDTEFTU0xPQURFUl9UWVBFLCAiY2wiKTsKLSAgICAgICAgYWRkVG8tPkFkZChuZXcgVmFyaWFibGVEZWNsYXJhdGlvbigqY2wsCi0gICAgICAgICAgICAgICAgbmV3IExpdGVyYWxFeHByZXNzaW9uKCJ0aGlzLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSIpLAotICAgICAgICAgICAgICAgIENMQVNTTE9BREVSX1RZUEUpKTsKLSAgICB9Ci19Ci0KLXZvaWQKLU1hcFR5cGU6OkNyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCkKLXsKLSAgICBFbnN1cmVDbGFzc0xvYWRlcihhZGRUbywgY2wpOwotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZEhhc2hNYXAiLCAxLCAqY2wpKSk7Ci19Ci0KLXZvaWQKLU1hcFR5cGU6OlJlYWRGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpCi17Ci0gICAgRW5zdXJlQ2xhc3NMb2FkZXIoYWRkVG8sIGNsKTsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgInJlYWRNYXAiLCAyLCB2LCAqY2wpKTsKLX0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUxpc3RUeXBlOjpMaXN0VHlwZSgpCi0gICAgOlR5cGUoImphdmEudXRpbCIsICJMaXN0IiwgQlVJTFRfSU4sIHRydWUsIHRydWUsIHRydWUpCi17Ci19Ci0KLXN0cmluZwotTGlzdFR5cGU6Okluc3RhbnRpYWJsZU5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiamF2YS51dGlsLkFycmF5TGlzdCI7Ci19Ci0KLXZvaWQKLUxpc3RUeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlTGlzdCIsIDEsIHYpKTsKLX0KLQotdm9pZAotTGlzdFR5cGU6OkNyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCkKLXsKLSAgICBFbnN1cmVDbGFzc0xvYWRlcihhZGRUbywgY2wpOwotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZEFycmF5TGlzdCIsIDEsICpjbCkpKTsKLX0KLQotdm9pZAotTGlzdFR5cGU6OlJlYWRGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpCi17Ci0gICAgRW5zdXJlQ2xhc3NMb2FkZXIoYWRkVG8sIGNsKTsKLSAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgInJlYWRMaXN0IiwgMiwgdiwgKmNsKSk7Ci19Ci0KLXZvaWQKLUxpc3RUeXBlOjpXcml0ZVRvUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICBWYXJpYWJsZSogZGF0YSwgaW50IGZsYWdzKQotewotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwoZGF0YSwgInB1dExpc3QiLCAyLCBrLCB2KSk7Ci19Ci0KLXZvaWQKLUxpc3RUeXBlOjpDcmVhdGVGcm9tUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogZGF0YSwKLSAgICAgICAgVmFyaWFibGUqKiBjbCkKLXsKLSAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBNZXRob2RDYWxsKGRhdGEsICJnZXRMaXN0IiwgMSwgaykpKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1Vc2VyRGF0YVR5cGU6OlVzZXJEYXRhVHlwZShjb25zdCBzdHJpbmcmIHBhY2thZ2UsIGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYnVpbHRJbiwgYm9vbCBjYW5Xcml0ZVRvUGFyY2VsLCBib29sIGNhbldyaXRlVG9ScGNEYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBkZWNsRmlsZSwgaW50IGRlY2xMaW5lKQotICAgIDpUeXBlKHBhY2thZ2UsIG5hbWUsIGJ1aWx0SW4gPyBCVUlMVF9JTiA6IFVTRVJEQVRBLCBjYW5Xcml0ZVRvUGFyY2VsLCBjYW5Xcml0ZVRvUnBjRGF0YSwKLSAgICAgICAgICAgIHRydWUsIGRlY2xGaWxlLCBkZWNsTGluZSkKLXsKLX0KLQotc3RyaW5nCi1Vc2VyRGF0YVR5cGU6OkNyZWF0b3JOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUXVhbGlmaWVkTmFtZSgpICsgIi5DUkVBVE9SIjsKLX0KLQotc3RyaW5nCi1Vc2VyRGF0YVR5cGU6OlJwY0NyZWF0b3JOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUXVhbGlmaWVkTmFtZSgpICsgIi5SUENfQ1JFQVRPUiI7Ci19Ci0KLXZvaWQKLVVzZXJEYXRhVHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgLy8gaWYgKHYgIT0gbnVsbCkgewotICAgIC8vICAgICBwYXJjZWwud3JpdGVJbnQoMSk7Ci0gICAgLy8gICAgIHYud3JpdGVUb1BhcmNlbChwYXJjZWwpOwotICAgIC8vIH0gZWxzZSB7Ci0gICAgLy8gICAgIHBhcmNlbC53cml0ZUludCgwKTsKLSAgICAvLyB9Ci0gICAgSWZTdGF0ZW1lbnQqIGVsc2VwYXJ0ID0gbmV3IElmU3RhdGVtZW50KCk7Ci0gICAgZWxzZXBhcnQtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZUludCIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiMCIpKSk7Ci0gICAgSWZTdGF0ZW1lbnQqIGlmcGFydCA9IG5ldyBJZlN0YXRlbWVudDsKLSAgICBpZnBhcnQtPmV4cHJlc3Npb24gPSBuZXcgQ29tcGFyaXNvbih2LCAiIT0iLCBOVUxMX1ZBTFVFKTsKLSAgICBpZnBhcnQtPmVsc2VpZiA9IGVsc2VwYXJ0OwotICAgIGlmcGFydC0+c3RhdGVtZW50cy0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlSW50IiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpdGVyYWxFeHByZXNzaW9uKCIxIikpKTsKLSAgICBpZnBhcnQtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbCh2LCAid3JpdGVUb1BhcmNlbCIsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmNlbCwgQnVpbGRXcml0ZVRvUGFyY2VsRmxhZ3MoZmxhZ3MpKSk7Ci0KLSAgICBhZGRUby0+QWRkKGlmcGFydCk7Ci19Ci0KLXZvaWQKLVVzZXJEYXRhVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqKQotewotICAgIC8vIGlmICgwICE9IHBhcmNlbC5yZWFkSW50KCkpIHsKLSAgICAvLyAgICAgdiA9IENMQVNTLkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChwYXJjZWwpCi0gICAgLy8gfSBlbHNlIHsKLSAgICAvLyAgICAgdiA9IG51bGw7Ci0gICAgLy8gfQotICAgIElmU3RhdGVtZW50KiBlbHNlcGFydCA9IG5ldyBJZlN0YXRlbWVudCgpOwotICAgIGVsc2VwYXJ0LT5zdGF0ZW1lbnRzLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgTlVMTF9WQUxVRSkpOwotCi0gICAgSWZTdGF0ZW1lbnQqIGlmcGFydCA9IG5ldyBJZlN0YXRlbWVudCgpOwotICAgIGlmcGFydC0+ZXhwcmVzc2lvbiA9IG5ldyBDb21wYXJpc29uKG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiMCIpLCAiIT0iLAotICAgICAgICAgICAgICAgIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgInJlYWRJbnQiKSk7Ci0gICAgaWZwYXJ0LT5lbHNlaWYgPSBlbHNlcGFydDsKLSAgICBpZnBhcnQtPnN0YXRlbWVudHMtPkFkZChuZXcgQXNzaWdubWVudCh2LAotICAgICAgICAgICAgICAgIG5ldyBNZXRob2RDYWxsKHYtPnR5cGUsICJDUkVBVE9SLmNyZWF0ZUZyb21QYXJjZWwiLCAxLCBwYXJjZWwpKSk7Ci0KLSAgICBhZGRUby0+QWRkKGlmcGFydCk7Ci19Ci0KLXZvaWQKLVVzZXJEYXRhVHlwZTo6UmVhZEZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICAvLyBUT0RPOiByZWFsbHksIHdlIGRvbid0IG5lZWQgdG8gaGF2ZSB0aGlzIGV4dHJhIGNoZWNrLCBidXQgd2UKLSAgICAvLyBkb24ndCBoYXZlIHR3byBzZXBhcmF0ZSBtYXJzaGFsbGluZyBjb2RlIHBhdGhzCi0gICAgLy8gaWYgKDAgIT0gcGFyY2VsLnJlYWRJbnQoKSkgewotICAgIC8vICAgICB2LnJlYWRGcm9tUGFyY2VsKHBhcmNlbCkKLSAgICAvLyB9Ci0gICAgSWZTdGF0ZW1lbnQqIGlmcGFydCA9IG5ldyBJZlN0YXRlbWVudCgpOwotICAgIGlmcGFydC0+ZXhwcmVzc2lvbiA9IG5ldyBDb21wYXJpc29uKG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiMCIpLCAiIT0iLAotICAgICAgICAgICAgICAgIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgInJlYWRJbnQiKSk7Ci0gICAgaWZwYXJ0LT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwodiwgInJlYWRGcm9tUGFyY2VsIiwgMSwgcGFyY2VsKSk7Ci0gICAgYWRkVG8tPkFkZChpZnBhcnQpOwotfQotCi1ib29sCi1Vc2VyRGF0YVR5cGU6OkNhbkJlQXJyYXkoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkCi1Vc2VyRGF0YVR5cGU6OldyaXRlQXJyYXlUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJ3cml0ZVR5cGVkQXJyYXkiLCAyLCB2LAotICAgICAgICAgICAgICAgIEJ1aWxkV3JpdGVUb1BhcmNlbEZsYWdzKGZsYWdzKSkpOwotfQotCi12b2lkCi1Vc2VyRGF0YVR5cGU6OkNyZWF0ZUFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgc3RyaW5nIGNyZWF0b3IgPSB2LT50eXBlLT5RdWFsaWZpZWROYW1lKCkgKyAiLkNSRUFUT1IiOwotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwocGFyY2VsLAotICAgICAgICAgICAgICAgICJjcmVhdGVUeXBlZEFycmF5IiwgMSwgbmV3IExpdGVyYWxFeHByZXNzaW9uKGNyZWF0b3IpKSkpOwotfQotCi12b2lkCi1Vc2VyRGF0YVR5cGU6OlJlYWRBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBzdHJpbmcgY3JlYXRvciA9IHYtPnR5cGUtPlF1YWxpZmllZE5hbWUoKSArICIuQ1JFQVRPUiI7Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkVHlwZWRBcnJheSIsIDIsCi0gICAgICAgICAgICAgICAgICAgIHYsIG5ldyBMaXRlcmFsRXhwcmVzc2lvbihjcmVhdG9yKSkpOwotfQotCi12b2lkCi1Vc2VyRGF0YVR5cGU6OldyaXRlVG9ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogZGF0YSwgaW50IGZsYWdzKQotewotICAgIC8vIGRhdGEucHV0RmxhdHRlbmFibGUoaywgdik7Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChkYXRhLCAicHV0RmxhdHRlbmFibGUiLCAyLCBrLCB2KSk7Ci19Ci0KLXZvaWQKLVVzZXJEYXRhVHlwZTo6Q3JlYXRlRnJvbVJwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBWYXJpYWJsZSoqIGNsKQotewotICAgIC8vIGRhdGEuZ2V0RmxhdHRlbmFibGUoaywgQ0xBU1MuUlBDX0NSRUFUT1IpOwotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwoZGF0YSwgImdldEZsYXR0ZW5hYmxlIiwgMiwgaywKLSAgICAgICAgICAgICAgICBuZXcgRmllbGRWYXJpYWJsZSh2LT50eXBlLCAiUlBDX0NSRUFUT1IiKSkpKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1JbnRlcmZhY2VUeXBlOjpJbnRlcmZhY2VUeXBlKGNvbnN0IHN0cmluZyYgcGFja2FnZSwgY29uc3Qgc3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBidWlsdEluLCBib29sIG9uZXdheSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgZGVjbEZpbGUsIGludCBkZWNsTGluZSkKLSAgICA6VHlwZShwYWNrYWdlLCBuYW1lLCBidWlsdEluID8gQlVJTFRfSU4gOiBJTlRFUkZBQ0UsIHRydWUsIGZhbHNlLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xGaWxlLCBkZWNsTGluZSkKLSAgICAsbV9vbmV3YXkob25ld2F5KQotewotfQotCi1ib29sCi1JbnRlcmZhY2VUeXBlOjpPbmVXYXkoKSBjb25zdAotewotICAgIHJldHVybiBtX29uZXdheTsKLX0KLQotdm9pZAotSW50ZXJmYWNlVHlwZTo6V3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgLy8gcGFyY2VsLndyaXRlU3Ryb25nQmluZGVyKHYgIT0gbnVsbCA/IHYuYXNCaW5kZXIoKSA6IG51bGwpOwotICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAid3JpdGVTdHJvbmdCaW5kZXIiLCAxLCAKLSAgICAgICAgICAgICAgICBuZXcgVGVybmFyeSgKLSAgICAgICAgICAgICAgICAgICAgbmV3IENvbXBhcmlzb24odiwgIiE9IiwgTlVMTF9WQUxVRSksCi0gICAgICAgICAgICAgICAgICAgIG5ldyBNZXRob2RDYWxsKHYsICJhc0JpbmRlciIpLAotICAgICAgICAgICAgICAgICAgICBOVUxMX1ZBTFVFKSkpOwotfQotCi12b2lkCi1JbnRlcmZhY2VUeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgLy8gdiA9IEludGVyZmFjZS5hc0ludGVyZmFjZShwYXJjZWwucmVhZFN0cm9uZ0JpbmRlcigpKTsKLSAgICBzdHJpbmcgdHlwZSA9IHYtPnR5cGUtPlF1YWxpZmllZE5hbWUoKTsKLSAgICB0eXBlICs9ICIuU3R1YiI7Ci0gICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LAotICAgICAgICAgICAgICAgIG5ldyBNZXRob2RDYWxsKCBOQU1FUy5GaW5kKHR5cGUpLCAiYXNJbnRlcmZhY2UiLCAxLAotICAgICAgICAgICAgICAgICAgICBuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJyZWFkU3Ryb25nQmluZGVyIikpKSk7Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1HZW5lcmljVHlwZTo6R2VuZXJpY1R5cGUoY29uc3Qgc3RyaW5nJiBwYWNrYWdlLCBjb25zdCBzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yPFR5cGUqPiYgYXJncykKLSAgICA6VHlwZShwYWNrYWdlLCBuYW1lLCBCVUlMVF9JTiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkKLXsKLSAgICBtX2FyZ3MgPSBhcmdzOwotCi0gICAgbV9pbXBvcnROYW1lID0gcGFja2FnZSArICcuJyArIG5hbWU7Ci0KLSAgICBzdHJpbmcgZ2VuID0gIjwiOwotICAgIGludCBOID0gYXJncy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICBUeXBlKiB0ID0gYXJnc1tpXTsKLSAgICAgICAgZ2VuICs9IHQtPlF1YWxpZmllZE5hbWUoKTsKLSAgICAgICAgaWYgKGkgIT0gTi0xKSB7Ci0gICAgICAgICAgICBnZW4gKz0gJywnOwotICAgICAgICB9Ci0gICAgfQotICAgIGdlbiArPSAnPic7Ci0gICAgbV9nZW5lcmljQXJndW1lbnRzID0gZ2VuOwotICAgIFNldFF1YWxpZmllZE5hbWUobV9pbXBvcnROYW1lICsgZ2VuKTsKLX0KLQotY29uc3QgdmVjdG9yPFR5cGUqPiYKLUdlbmVyaWNUeXBlOjpHZW5lcmljQXJndW1lbnRUeXBlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYXJnczsKLX0KLQotc3RyaW5nCi1HZW5lcmljVHlwZTo6R2VuZXJpY0FyZ3VtZW50cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2VuZXJpY0FyZ3VtZW50czsKLX0KLQotc3RyaW5nCi1HZW5lcmljVHlwZTo6SW1wb3J0VHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wb3J0TmFtZTsKLX0KLQotdm9pZAotR2VuZXJpY1R5cGU6OldyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiaW1wbGVtZW50IEdlbmVyaWNUeXBlOjpXcml0ZVRvUGFyY2VsXG4iKTsKLX0KLQotdm9pZAotR2VuZXJpY1R5cGU6OkNyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImltcGxlbWVudCBHZW5lcmljVHlwZTo6Q3JlYXRlRnJvbVBhcmNlbFxuIik7Ci19Ci0KLXZvaWQKLUdlbmVyaWNUeXBlOjpSZWFkRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJpbXBsZW1lbnQgR2VuZXJpY1R5cGU6OlJlYWRGcm9tUGFyY2VsXG4iKTsKLX0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUdlbmVyaWNMaXN0VHlwZTo6R2VuZXJpY0xpc3RUeXBlKGNvbnN0IHN0cmluZyYgcGFja2FnZSwgY29uc3Qgc3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvcjxUeXBlKj4mIGFyZ3MpCi0gICAgOkdlbmVyaWNUeXBlKHBhY2thZ2UsIG5hbWUsIGFyZ3MpLAotICAgICBtX2NyZWF0b3IoYXJnc1swXS0+Q3JlYXRvck5hbWUoKSkKLXsKLX0KLQotc3RyaW5nCi1HZW5lcmljTGlzdFR5cGU6OkNyZWF0b3JOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gImFuZHJvaWQub3MuUGFyY2VsLmFycmF5TGlzdENyZWF0b3IiOwotfQotCi1zdHJpbmcKLUdlbmVyaWNMaXN0VHlwZTo6SW5zdGFudGlhYmxlTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJqYXZhLnV0aWwuQXJyYXlMaXN0IiArIEdlbmVyaWNBcmd1bWVudHMoKTsKLX0KLQotdm9pZAotR2VuZXJpY0xpc3RUeXBlOjpXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncykKLXsKLSAgICBpZiAobV9jcmVhdG9yID09IFNUUklOR19UWVBFLT5DcmVhdG9yTmFtZSgpKSB7Ci0gICAgICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAid3JpdGVTdHJpbmdMaXN0IiwgMSwgdikpOwotICAgIH0gZWxzZSBpZiAobV9jcmVhdG9yID09IElCSU5ERVJfVFlQRS0+Q3JlYXRvck5hbWUoKSkgewotICAgICAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlQmluZGVyTGlzdCIsIDEsIHYpKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBwYXJjZWwud3JpdGVUeXBlZExpc3RYWChhcmcpOwotICAgICAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgIndyaXRlVHlwZWRMaXN0IiwgMSwgdikpOwotICAgIH0KLX0KLQotdm9pZAotR2VuZXJpY0xpc3RUeXBlOjpDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiopCi17Ci0gICAgaWYgKG1fY3JlYXRvciA9PSBTVFJJTkdfVFlQRS0+Q3JlYXRvck5hbWUoKSkgewotICAgICAgICBhZGRUby0+QWRkKG5ldyBBc3NpZ25tZW50KHYsCi0gICAgICAgICAgICAgICAgICAgbmV3IE1ldGhvZENhbGwocGFyY2VsLCAiY3JlYXRlU3RyaW5nQXJyYXlMaXN0IiwgMCkpKTsKLSAgICB9IGVsc2UgaWYgKG1fY3JlYXRvciA9PSBJQklOREVSX1RZUEUtPkNyZWF0b3JOYW1lKCkpIHsKLSAgICAgICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LAotICAgICAgICAgICAgICAgICAgIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgImNyZWF0ZUJpbmRlckFycmF5TGlzdCIsIDApKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gdiA9IF9kYXRhLnJlYWRUeXBlZEFycmF5TGlzdChYWFguY3JlYXRvcik7Ci0gICAgICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwKLSAgICAgICAgICAgICAgICAgICBuZXcgTWV0aG9kQ2FsbChwYXJjZWwsICJjcmVhdGVUeXBlZEFycmF5TGlzdCIsIDEsCi0gICAgICAgICAgICAgICAgICAgbmV3IExpdGVyYWxFeHByZXNzaW9uKG1fY3JlYXRvcikpKSk7Ci0gICAgfQotfQotCi12b2lkCi1HZW5lcmljTGlzdFR5cGU6OlJlYWRGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKikKLXsKLSAgICBpZiAobV9jcmVhdG9yID09IFNUUklOR19UWVBFLT5DcmVhdG9yTmFtZSgpKSB7Ci0gICAgICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZFN0cmluZ0xpc3QiLCAxLCB2KSk7Ci0gICAgfSBlbHNlIGlmIChtX2NyZWF0b3IgPT0gSUJJTkRFUl9UWVBFLT5DcmVhdG9yTmFtZSgpKSB7Ci0gICAgICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwocGFyY2VsLCAicmVhZEJpbmRlckxpc3QiLCAxLCB2KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gdiA9IF9kYXRhLnJlYWRUeXBlZExpc3QodiwgWFhYLmNyZWF0b3IpOwotICAgICAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgInJlYWRUeXBlZExpc3QiLCAyLAotICAgICAgICAgICAgICAgICAgICAgICB2LAotICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGl0ZXJhbEV4cHJlc3Npb24obV9jcmVhdG9yKSkpOwotICAgIH0KLX0KLQotdm9pZAotR2VuZXJpY0xpc3RUeXBlOjpXcml0ZVRvUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICBWYXJpYWJsZSogZGF0YSwgaW50IGZsYWdzKQotewotICAgIFR5cGUqIGdlbmVyaWMgPSBHZW5lcmljQXJndW1lbnRUeXBlcygpWzBdOwotICAgIGlmIChnZW5lcmljID09IFJQQ19EQVRBX1RZUEUpIHsKLSAgICAgICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChkYXRhLCAicHV0UnBjRGF0YUxpc3QiLCAyLCBrLCB2KSk7Ci0gICAgfSBlbHNlIGlmIChnZW5lcmljLT5ScGNDcmVhdG9yTmFtZSgpICE9ICIiKSB7Ci0gICAgICAgIGFkZFRvLT5BZGQobmV3IE1ldGhvZENhbGwoZGF0YSwgInB1dEZsYXR0ZW5hYmxlTGlzdCIsIDIsIGssIHYpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBhZGRUby0+QWRkKG5ldyBNZXRob2RDYWxsKGRhdGEsICJwdXRMaXN0IiwgMiwgaywgdikpOwotICAgIH0KLX0KLQotdm9pZAotR2VuZXJpY0xpc3RUeXBlOjpDcmVhdGVGcm9tUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICBWYXJpYWJsZSogZGF0YSwgVmFyaWFibGUqKiBjbCkKLXsKLSAgICBUeXBlKiBnZW5lcmljID0gR2VuZXJpY0FyZ3VtZW50VHlwZXMoKVswXTsKLSAgICBpZiAoZ2VuZXJpYyA9PSBSUENfREFUQV9UWVBFKSB7Ci0gICAgICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwoZGF0YSwgImdldFJwY0RhdGFMaXN0IiwgMiwgaykpKTsKLSAgICB9IGVsc2UgaWYgKGdlbmVyaWMtPlJwY0NyZWF0b3JOYW1lKCkgIT0gIiIpIHsKLSAgICAgICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LCBuZXcgTWV0aG9kQ2FsbChkYXRhLCAiZ2V0RmxhdHRlbmFibGVMaXN0IiwgMiwgaywgCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oZ2VuZXJpYy0+UnBjQ3JlYXRvck5hbWUoKSkpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RyaW5nIGNsYXNzQXJnID0gR2VuZXJpY0FyZ3VtZW50VHlwZXMoKVswXS0+UXVhbGlmaWVkTmFtZSgpOwotICAgICAgICBjbGFzc0FyZyArPSAiLmNsYXNzIjsKLSAgICAgICAgYWRkVG8tPkFkZChuZXcgQXNzaWdubWVudCh2LCBuZXcgTWV0aG9kQ2FsbChkYXRhLCAiZ2V0TGlzdCIsIDIsIGssCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oY2xhc3NBcmcpKSkpOwotICAgIH0KLX0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVJwY0RhdGFUeXBlOjpScGNEYXRhVHlwZSgpCi0gICAgOlVzZXJEYXRhVHlwZSgiYW5kcm9pZC5zdXBwb3J0LnBsYWNlLnJwYyIsICJScGNEYXRhIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkKLXsKLX0KLQotdm9pZAotUnBjRGF0YVR5cGU6OldyaXRlVG9ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgIFZhcmlhYmxlKiBkYXRhLCBpbnQgZmxhZ3MpCi17Ci0gICAgYWRkVG8tPkFkZChuZXcgTWV0aG9kQ2FsbChkYXRhLCAicHV0UnBjRGF0YSIsIDIsIGssIHYpKTsKLX0KLQotdm9pZAotUnBjRGF0YVR5cGU6OkNyZWF0ZUZyb21ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBkYXRhLAotICAgICAgICBWYXJpYWJsZSoqIGNsKQotewotICAgIGFkZFRvLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE1ldGhvZENhbGwoZGF0YSwgImdldFJwY0RhdGEiLCAxLCBrKSkpOwotfQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQ2xhc3NMb2FkZXJUeXBlOjpDbGFzc0xvYWRlclR5cGUoKQotICAgIDpUeXBlKCJqYXZhLmxhbmciLCAiQ2xhc3NMb2FkZXIiLCBCVUlMVF9JTiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLXsKLX0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLU5hbWVzcGFjZTo6TmFtZXNwYWNlKCkKLXsKLX0KLQotTmFtZXNwYWNlOjp+TmFtZXNwYWNlKCkKLXsKLSAgICBpbnQgTiA9IG1fdHlwZXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgZGVsZXRlIG1fdHlwZXNbaV07Ci0gICAgfQotfQotCi12b2lkCi1OYW1lc3BhY2U6OkFkZChUeXBlKiB0eXBlKQotewotICAgIFR5cGUqIHQgPSBGaW5kKHR5cGUtPlF1YWxpZmllZE5hbWUoKSk7Ci0gICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICBtX3R5cGVzLnB1c2hfYmFjayh0eXBlKTsKLSAgICB9Ci19Ci0KLXZvaWQKLU5hbWVzcGFjZTo6QWRkR2VuZXJpY1R5cGUoY29uc3Qgc3RyaW5nJiBwYWNrYWdlLCBjb25zdCBzdHJpbmcmIG5hbWUsIGludCBhcmdzKQotewotICAgIEdlbmVyaWMgZzsKLSAgICAgICAgZy5wYWNrYWdlID0gcGFja2FnZTsKLSAgICAgICAgZy5uYW1lID0gbmFtZTsKLSAgICAgICAgZy5xdWFsaWZpZWQgPSBwYWNrYWdlICsgJy4nICsgbmFtZTsKLSAgICAgICAgZy5hcmdzID0gYXJnczsKLSAgICBtX2dlbmVyaWNzLnB1c2hfYmFjayhnKTsKLX0KLQotVHlwZSoKLU5hbWVzcGFjZTo6RmluZChjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAgaW50IE4gPSBtX3R5cGVzLnNpemUoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGlmIChtX3R5cGVzW2ldLT5RdWFsaWZpZWROYW1lKCkgPT0gbmFtZSkgewotICAgICAgICAgICAgcmV0dXJuIG1fdHlwZXNbaV07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLVR5cGUqCi1OYW1lc3BhY2U6OkZpbmQoY29uc3QgY2hhciogcGFja2FnZSwgY29uc3QgY2hhciogbmFtZSkgY29uc3QKLXsKLSAgICBzdHJpbmcgczsKLSAgICBpZiAocGFja2FnZSAhPSBOVUxMKSB7Ci0gICAgICAgIHMgKz0gcGFja2FnZTsKLSAgICAgICAgcyArPSAnLic7Ci0gICAgfQotICAgIHMgKz0gbmFtZTsKLSAgICByZXR1cm4gRmluZChzKTsKLX0KLQotc3RhdGljIHN0cmluZwotbm9ybWFsaXplX2dlbmVyaWMoY29uc3Qgc3RyaW5nJiBzKQotewotICAgIHN0cmluZyByOwotICAgIGludCBOID0gcy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICBjaGFyIGMgPSBzW2ldOwotICAgICAgICBpZiAoIWlzc3BhY2UoYykpIHsKLSAgICAgICAgICAgIHIgKz0gYzsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcjsKLX0KLQotVHlwZSoKLU5hbWVzcGFjZTo6U2VhcmNoKGNvbnN0IHN0cmluZyYgbmFtZSkKLXsKLSAgICAvLyBhbiBleGFjdCBtYXRjaCB3aW5zCi0gICAgVHlwZSogcmVzdWx0ID0gRmluZChuYW1lKTsKLSAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvLyB0cnkgdGhlIGNsYXNzIG5hbWVzCi0gICAgLy8gb3VyIGxhbmd1YWdlIGRvZXNuJ3QgYWxsb3cgeW91IHRvIG5vdCBzcGVjaWZ5IG91dGVyIGNsYXNzZXMKLSAgICAvLyB3aGVuIHJlZmVyZW5jaW5nIGFuIGlubmVyIGNsYXNzLiAgdGhhdCBjb3VsZCBiZSBjaGFuZ2VkLCBhbmQgdGhpcwotICAgIC8vIHdvdWxkIGJlIHRoZSBwbGFjZSB0byBkbyBpdCwgYnV0IEkgZG9uJ3QgdGhpbmsgdGhlIGNvbXBsZXhpdHkgaW4KLSAgICAvLyBzY29waW5nIHJ1bGVzIGlzIHdvcnRoIGl0LgotICAgIGludCBOID0gbV90eXBlcy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICBpZiAobV90eXBlc1tpXS0+TmFtZSgpID09IG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBtX3R5cGVzW2ldOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gd2UgZ290IHRvIGhlcmUgYW5kIGl0J3Mgbm90IGEgZ2VuZXJpYywgZ2l2ZSB1cAotICAgIGlmIChuYW1lLmZpbmQoJzwnKSA9PSBuYW1lLm5wb3MpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLy8gcmVtb3ZlIGFueSB3aGl0ZXNwYWNlCi0gICAgc3RyaW5nIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVfZ2VuZXJpYyhuYW1lKTsKLQotICAgIC8vIGZpbmQgdGhlIHBhcnQgYmVmb3JlIHRoZSAnPCcsIGZpbmQgYSBnZW5lcmljIGZvciBpdAotICAgIHNzaXplX3QgYmFzZUluZGV4ID0gbm9ybWFsaXplZC5maW5kKCc8Jyk7Ci0gICAgc3RyaW5nIGJhc2Uobm9ybWFsaXplZC5jX3N0cigpLCBiYXNlSW5kZXgpOwotICAgIGNvbnN0IEdlbmVyaWMqIGcgPSBzZWFyY2hfZ2VuZXJpYyhiYXNlKTsKLSAgICBpZiAoZyA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8vIEZvciBlYWNoIG9mIHRoZSBhcmdzLCBkbyBhIHJlY3Vyc2l2ZSBzZWFyY2ggb24gaXQuICBXZSBkb24ndCBhbGxvdwotICAgIC8vIGdlbmVyaWNzIHdpdGhpbiBnZW5lcmljcyBsaWtlIEphdmEgZG9lcywgYmVjYXVzZSB3ZSdyZSByZWFsbHkgbGltaXRpbmcKLSAgICAvLyB0aGVtIHRvIGp1c3QgYnVpbHQtaW4gY29udGFpbmVyIGNsYXNzZXMsIGF0IGxlYXN0IGZvciBub3cuICBPdXIgc3ludGF4Ci0gICAgLy8gZW5zdXJlcyB0aGlzIHJpZ2h0IG5vdyBhcyB3ZWxsLgotICAgIHZlY3RvcjxUeXBlKj4gYXJnczsKLSAgICBzaXplX3Qgc3RhcnQgPSBiYXNlSW5kZXggKyAxOwotICAgIHNpemVfdCBlbmQgPSBzdGFydDsKLSAgICB3aGlsZSAobm9ybWFsaXplZFtzdGFydF0gIT0gJ1wwJykgewotICAgICAgICBlbmQgPSBub3JtYWxpemVkLmZpbmQoJywnLCBzdGFydCk7Ci0gICAgICAgIGlmIChlbmQgPT0gbm9ybWFsaXplZC5ucG9zKSB7Ci0gICAgICAgICAgICBlbmQgPSBub3JtYWxpemVkLmZpbmQoJz4nLCBzdGFydCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RyaW5nIHMobm9ybWFsaXplZC5jX3N0cigpK3N0YXJ0LCBlbmQtc3RhcnQpOwotICAgICAgICBUeXBlKiB0ID0gdGhpcy0+U2VhcmNoKHMpOwotICAgICAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgcHJpbnQgYSB3YXJuaW5nIGhlcmU/Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBhcmdzLnB1c2hfYmFjayh0KTsKLSAgICAgICAgc3RhcnQgPSBlbmQrMTsKLSAgICB9Ci0KLSAgICAvLyBjb25zdHJ1Y3QgYSBHZW5lcmljVHlwZSwgYWRkIGl0IHRvIG91ciBuYW1lIHNldCBzbyB0aGV5IGFsd2F5cyBnZXQKLSAgICAvLyB0aGUgc2FtZSBvYmplY3QsIGFuZCByZXR1cm4gaXQuCi0gICAgcmVzdWx0ID0gbWFrZV9nZW5lcmljX3R5cGUoZy0+cGFja2FnZSwgZy0+bmFtZSwgYXJncyk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHRoaXMtPkFkZChyZXN1bHQpOwotICAgIHJldHVybiB0aGlzLT5GaW5kKHJlc3VsdC0+UXVhbGlmaWVkTmFtZSgpKTsKLX0KLQotY29uc3QgTmFtZXNwYWNlOjpHZW5lcmljKgotTmFtZXNwYWNlOjpzZWFyY2hfZ2VuZXJpYyhjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAgaW50IE4gPSBtX2dlbmVyaWNzLnNpemUoKTsKLQotICAgIC8vIGZpcnN0IGV4YWN0IG1hdGNoCi0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICBjb25zdCBHZW5lcmljJiBnID0gbV9nZW5lcmljc1tpXTsKLSAgICAgICAgaWYgKGcucXVhbGlmaWVkID09IG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiAmZzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIHRoZW4gbmFtZSBtYXRjaAotICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgY29uc3QgR2VuZXJpYyYgZyA9IG1fZ2VuZXJpY3NbaV07Ci0gICAgICAgIGlmIChnLm5hbWUgPT0gbmFtZSkgewotICAgICAgICAgICAgcmV0dXJuICZnOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQKLU5hbWVzcGFjZTo6RHVtcCgpIGNvbnN0Ci17Ci0gICAgaW50IG4gPSBtX3R5cGVzLnNpemUoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8bjsgaSsrKSB7Ci0gICAgICAgIFR5cGUqIHQgPSBtX3R5cGVzW2ldOwotICAgICAgICBwcmludGYoInR5cGU6IHBhY2thZ2U9JXMgbmFtZT0lcyBxdWFsaWZpZWROYW1lPSVzXG4iLAotICAgICAgICAgICAgICAgIHQtPlBhY2thZ2UoKS5jX3N0cigpLCB0LT5OYW1lKCkuY19zdHIoKSwKLSAgICAgICAgICAgICAgICB0LT5RdWFsaWZpZWROYW1lKCkuY19zdHIoKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWlkbC9UeXBlLmggYi90b29scy9haWRsL1R5cGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUxMjcyMC4uMDAwMDAwMAotLS0gYS90b29scy9haWRsL1R5cGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0MiArMCwwIEBACi0jaWZuZGVmIEFJRExfVFlQRV9ICi0jZGVmaW5lIEFJRExfVFlQRV9ICi0KLSNpbmNsdWRlICJBU1QuaCIKLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1jbGFzcyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgLy8ga2luZHMKLSAgICBlbnVtIHsKLSAgICAgICAgQlVJTFRfSU4sCi0gICAgICAgIFVTRVJEQVRBLAotICAgICAgICBJTlRFUkZBQ0UsCi0gICAgICAgIEdFTkVSQVRFRAotICAgIH07Ci0gICAgCi0gICAgLy8gV3JpdGVUb1BhcmNlbCBmbGFncwotICAgIGVudW0gewotICAgICAgICBQQVJDRUxBQkxFX1dSSVRFX1JFVFVSTl9WQUxVRSA9IDB4MDAwMQotICAgIH07Ci0KLSAgICAgICAgICAgICAgICAgICAgVHlwZShjb25zdCBzdHJpbmcmIG5hbWUsIGludCBraW5kLCBib29sIGNhbldyaXRlVG9QYXJjZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5Xcml0ZVRvUnBjRGF0YSwgYm9vbCBjYW5CZU91dCk7Ci0gICAgICAgICAgICAgICAgICAgIFR5cGUoY29uc3Qgc3RyaW5nJiBwYWNrYWdlLCBjb25zdCBzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtpbmQsIGJvb2wgY2FuV3JpdGVUb1BhcmNlbCwgYm9vbCBjYW5Xcml0ZVRvUnBjRGF0YSwgYm9vbCBjYW5CZU91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGRlY2xGaWxlID0gIiIsIGludCBkZWNsTGluZSA9IC0xKTsKLSAgICB2aXJ0dWFsICAgICAgICAgflR5cGUoKTsKLQotICAgIGlubGluZSBzdHJpbmcgICBQYWNrYWdlKCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gbV9wYWNrYWdlOyB9Ci0gICAgaW5saW5lIHN0cmluZyAgIE5hbWUoKSBjb25zdCAgICAgICAgICAgICAgICB7IHJldHVybiBtX25hbWU7IH0KLSAgICBpbmxpbmUgc3RyaW5nICAgUXVhbGlmaWVkTmFtZSgpIGNvbnN0ICAgICAgIHsgcmV0dXJuIG1fcXVhbGlmaWVkTmFtZTsgfQotICAgIGlubGluZSBpbnQgICAgICBLaW5kKCkgY29uc3QgICAgICAgICAgICAgICAgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgaW5saW5lIHN0cmluZyAgIERlY2xGaWxlKCkgY29uc3QgICAgICAgICAgICB7IHJldHVybiBtX2RlY2xGaWxlOyB9Ci0gICAgaW5saW5lIGludCAgICAgIERlY2xMaW5lKCkgY29uc3QgICAgICAgICAgICB7IHJldHVybiBtX2RlY2xMaW5lOyB9Ci0gICAgaW5saW5lIGJvb2wgICAgIENhbldyaXRlVG9QYXJjZWwoKSBjb25zdCAgICB7IHJldHVybiBtX2NhbldyaXRlVG9QYXJjZWw7IH0KLSAgICBpbmxpbmUgYm9vbCAgICAgQ2FuV3JpdGVUb1JwY0RhdGEoKSBjb25zdCAgIHsgcmV0dXJuIG1fY2FuV3JpdGVUb1JwY0RhdGE7IH0KLSAgICBpbmxpbmUgYm9vbCAgICAgQ2FuQmVPdXRQYXJhbWV0ZXIoKSBjb25zdCAgIHsgcmV0dXJuIG1fY2FuQmVPdXQ7IH0KLSAgICAKLSAgICB2aXJ0dWFsIHN0cmluZyAgSW1wb3J0VHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgc3RyaW5nICBDcmVhdG9yTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgc3RyaW5nICBScGNDcmVhdG9yTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgc3RyaW5nICBJbnN0YW50aWFibGVOYW1lKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0gICAgdmlydHVhbCB2b2lkICAgIFJlYWRGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLQotICAgIHZpcnR1YWwgYm9vbCAgICBDYW5CZUFycmF5KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVBcnJheVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotICAgIHZpcnR1YWwgdm9pZCAgICBSZWFkQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogZGF0YSwgVmFyaWFibGUqKiBjbCk7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIFNldFF1YWxpZmllZE5hbWUoY29uc3Qgc3RyaW5nJiBxdWFsaWZpZWQpOwotICAgIEV4cHJlc3Npb24qIEJ1aWxkV3JpdGVUb1BhcmNlbEZsYWdzKGludCBmbGFncyk7Ci0KLXByaXZhdGU6Ci0gICAgVHlwZSgpOwotICAgIFR5cGUoY29uc3QgVHlwZSYpOwotCi0gICAgc3RyaW5nIG1fcGFja2FnZTsKLSAgICBzdHJpbmcgbV9uYW1lOwotICAgIHN0cmluZyBtX3F1YWxpZmllZE5hbWU7Ci0gICAgc3RyaW5nIG1fZGVjbEZpbGU7Ci0gICAgaW50IG1fZGVjbExpbmU7Ci0gICAgaW50IG1fa2luZDsKLSAgICBib29sIG1fY2FuV3JpdGVUb1BhcmNlbDsKLSAgICBib29sIG1fY2FuV3JpdGVUb1JwY0RhdGE7Ci0gICAgYm9vbCBtX2NhbkJlT3V0OwotfTsKLQotY2xhc3MgQmFzaWNUeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgQmFzaWNUeXBlKGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgbWFyc2hhbGxQYXJjZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHVubWFyc2hhbGxQYXJjZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIHdyaXRlQXJyYXlQYXJjZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGNyZWF0ZUFycmF5UGFyY2VsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiByZWFkQXJyYXlQYXJjZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIG1hcnNoYWxsUnBjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiB1bm1hcnNoYWxsUnBjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiB3cml0ZUFycmF5UnBjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBjcmVhdGVBcnJheVJwYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgcmVhZEFycmF5UnBjKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLQotICAgIHZpcnR1YWwgYm9vbCAgICBDYW5CZUFycmF5KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVBcnJheVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotICAgIHZpcnR1YWwgdm9pZCAgICBSZWFkQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogZGF0YSwgVmFyaWFibGUqKiBjbCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RyaW5nIG1fbWFyc2hhbGxQYXJjZWw7Ci0gICAgc3RyaW5nIG1fdW5tYXJzaGFsbFBhcmNlbDsKLSAgICBzdHJpbmcgbV93cml0ZUFycmF5UGFyY2VsOwotICAgIHN0cmluZyBtX2NyZWF0ZUFycmF5UGFyY2VsOwotICAgIHN0cmluZyBtX3JlYWRBcnJheVBhcmNlbDsKLSAgICBzdHJpbmcgbV9tYXJzaGFsbFJwYzsKLSAgICBzdHJpbmcgbV91bm1hcnNoYWxsUnBjOwotICAgIHN0cmluZyBtX3dyaXRlQXJyYXlScGM7Ci0gICAgc3RyaW5nIG1fY3JlYXRlQXJyYXlScGM7Ci0gICAgc3RyaW5nIG1fcmVhZEFycmF5UnBjOwotfTsKLQotY2xhc3MgQm9vbGVhblR5cGUgOiBwdWJsaWMgVHlwZQotewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICBCb29sZWFuVHlwZSgpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotCi0gICAgdmlydHVhbCBib29sICAgIENhbkJlQXJyYXkoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZUFycmF5VG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0gICAgdmlydHVhbCB2b2lkICAgIFJlYWRBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogZGF0YSwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVJwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBWYXJpYWJsZSoqIGNsKTsKLX07Ci0KLWNsYXNzIENoYXJUeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgQ2hhclR5cGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLQotICAgIHZpcnR1YWwgYm9vbCAgICBDYW5CZUFycmF5KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVBcnJheVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotICAgIHZpcnR1YWwgdm9pZCAgICBSZWFkQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogZGF0YSwgVmFyaWFibGUqKiBjbCk7Ci19OwotCi0KLWNsYXNzIFN0cmluZ1R5cGUgOiBwdWJsaWMgVHlwZQotewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICBTdHJpbmdUeXBlKCk7Ci0KLSAgICB2aXJ0dWFsIHN0cmluZyAgQ3JlYXRvck5hbWUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLQotICAgIHZpcnR1YWwgYm9vbCAgICBDYW5CZUFycmF5KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVBcnJheVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVBcnJheUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotICAgIHZpcnR1YWwgdm9pZCAgICBSZWFkQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogZGF0YSwgVmFyaWFibGUqKiBjbCk7Ci19OwotCi1jbGFzcyBDaGFyU2VxdWVuY2VUeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgQ2hhclNlcXVlbmNlVHlwZSgpOwotCi0gICAgdmlydHVhbCBzdHJpbmcgIENyZWF0b3JOYW1lKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci19OwotCi1jbGFzcyBSZW1vdGVFeGNlcHRpb25UeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgUmVtb3RlRXhjZXB0aW9uVHlwZSgpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotY2xhc3MgUnVudGltZUV4Y2VwdGlvblR5cGUgOiBwdWJsaWMgVHlwZQotewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICBSdW50aW1lRXhjZXB0aW9uVHlwZSgpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotY2xhc3MgSUJpbmRlclR5cGUgOiBwdWJsaWMgVHlwZQotewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICBJQmluZGVyVHlwZSgpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlQXJyYXlUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgUmVhZEFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci19OwotCi1jbGFzcyBJSW50ZXJmYWNlVHlwZSA6IHB1YmxpYyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIElJbnRlcmZhY2VUeXBlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci19OwotCi1jbGFzcyBCaW5kZXJUeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgQmluZGVyVHlwZSgpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotY2xhc3MgQmluZGVyUHJveHlUeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgQmluZGVyUHJveHlUeXBlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci19OwotCi1jbGFzcyBQYXJjZWxUeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgUGFyY2VsVHlwZSgpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotY2xhc3MgUGFyY2VsYWJsZUludGVyZmFjZVR5cGUgOiBwdWJsaWMgVHlwZQotewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICBQYXJjZWxhYmxlSW50ZXJmYWNlVHlwZSgpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotY2xhc3MgTWFwVHlwZSA6IHB1YmxpYyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIE1hcFR5cGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgUmVhZEZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotY2xhc3MgTGlzdFR5cGUgOiBwdWJsaWMgVHlwZQotewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICBMaXN0VHlwZSgpOwotCi0gICAgdmlydHVhbCBzdHJpbmcgIEluc3RhbnRpYWJsZU5hbWUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgUmVhZEZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9ScGNEYXRhKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgRXhwcmVzc2lvbiogaywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogZGF0YSwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlRnJvbVJwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBWYXJpYWJsZSoqIGNsKTsKLX07Ci0KLWNsYXNzIFVzZXJEYXRhVHlwZSA6IHB1YmxpYyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIFVzZXJEYXRhVHlwZShjb25zdCBzdHJpbmcmIHBhY2thZ2UsIGNvbnN0IHN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJ1aWx0SW4sIGJvb2wgY2FuV3JpdGVUb1BhcmNlbCwgYm9vbCBjYW5Xcml0ZVRvUnBjRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGRlY2xGaWxlID0gIiIsIGludCBkZWNsTGluZSA9IC0xKTsKLQotICAgIHZpcnR1YWwgc3RyaW5nICBDcmVhdG9yTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgc3RyaW5nICBScGNDcmVhdG9yTmFtZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotICAgIHZpcnR1YWwgdm9pZCAgICBSZWFkRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgICAgQ2FuQmVBcnJheSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlQXJyYXlUb1BhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgaW50IGZsYWdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgQ3JlYXRlQXJyYXlGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLSAgICB2aXJ0dWFsIHZvaWQgICAgUmVhZEFycmF5RnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1JwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotY2xhc3MgSW50ZXJmYWNlVHlwZSA6IHB1YmxpYyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVR5cGUoY29uc3Qgc3RyaW5nJiBwYWNrYWdlLCBjb25zdCBzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBidWlsdEluLCBib29sIG9uZXdheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcmIGRlY2xGaWxlLCBpbnQgZGVjbExpbmUpOwotCi0gICAgYm9vbCAgICAgICAgICAgIE9uZVdheSgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgdm9pZCAgICBXcml0ZVRvUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUGFyY2VsKFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotcHJpdmF0ZToKLSAgICBib29sIG1fb25ld2F5OwotfTsKLQotCi1jbGFzcyBHZW5lcmljVHlwZSA6IHB1YmxpYyBUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIEdlbmVyaWNUeXBlKGNvbnN0IHN0cmluZyYgcGFja2FnZSwgY29uc3Qgc3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yPFR5cGUqPiYgYXJncyk7Ci0KLSAgICBjb25zdCB2ZWN0b3I8VHlwZSo+JiBHZW5lcmljQXJndW1lbnRUeXBlcygpIGNvbnN0OwotICAgIHN0cmluZyAgICAgICAgICBHZW5lcmljQXJndW1lbnRzKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHN0cmluZyAgSW1wb3J0VHlwZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotICAgIHZpcnR1YWwgdm9pZCAgICBSZWFkRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RyaW5nIG1fZ2VuZXJpY0FyZ3VtZW50czsKLSAgICBzdHJpbmcgbV9pbXBvcnROYW1lOwotICAgIHZlY3RvcjxUeXBlKj4gbV9hcmdzOwotfTsKLQotY2xhc3MgUnBjRGF0YVR5cGUgOiBwdWJsaWMgVXNlckRhdGFUeXBlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICAgICAgICAgIFJwY0RhdGFUeXBlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1JwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIFZhcmlhYmxlKiogY2wpOwotfTsKLQotY2xhc3MgQ2xhc3NMb2FkZXJUeXBlIDogcHVibGljIFR5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3NMb2FkZXJUeXBlKCk7Ci19OwotCi1jbGFzcyBHZW5lcmljTGlzdFR5cGUgOiBwdWJsaWMgR2VuZXJpY1R5cGUKLXsKLXB1YmxpYzoKLSAgICAgICAgICAgICAgICAgICAgR2VuZXJpY0xpc3RUeXBlKGNvbnN0IHN0cmluZyYgcGFja2FnZSwgY29uc3Qgc3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yPFR5cGUqPiYgYXJncyk7Ci0KLSAgICB2aXJ0dWFsIHN0cmluZyAgQ3JlYXRvck5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHN0cmluZyAgSW5zdGFudGlhYmxlTmFtZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkICAgIFdyaXRlVG9QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIGludCBmbGFncyk7Ci0gICAgdmlydHVhbCB2b2lkICAgIENyZWF0ZUZyb21QYXJjZWwoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpOwotICAgIHZpcnR1YWwgdm9pZCAgICBSZWFkRnJvbVBhcmNlbChTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHBhcmNlbCwgVmFyaWFibGUqKiBjbCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgICAgV3JpdGVUb1JwY0RhdGEoU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBkYXRhLCBpbnQgZmxhZ3MpOwotICAgIHZpcnR1YWwgdm9pZCAgICBDcmVhdGVGcm9tUnBjRGF0YShTdGF0ZW1lbnRCbG9jayogYWRkVG8sIEV4cHJlc3Npb24qIGssIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIFZhcmlhYmxlKiogY2wpOwotICAgIAotcHJpdmF0ZToKLSAgICBzdHJpbmcgbV9jcmVhdG9yOwotfTsKLQotY2xhc3MgTmFtZXNwYWNlCi17Ci1wdWJsaWM6Ci0gICAgICAgICAgICBOYW1lc3BhY2UoKTsKLSAgICAgICAgICAgIH5OYW1lc3BhY2UoKTsKLSAgICB2b2lkICAgIEFkZChUeXBlKiB0eXBlKTsKLQotICAgIC8vIGFyZ3MgaXMgdGhlIG51bWJlciBvZiB0ZW1wbGF0ZSB0eXBlcyAod2hhdCBpcyB0aGlzIGNhbGxlZD8pCi0gICAgdm9pZCAgICBBZGRHZW5lcmljVHlwZShjb25zdCBzdHJpbmcmIHBhY2thZ2UsIGNvbnN0IHN0cmluZyYgbmFtZSwgaW50IGFyZ3MpOwotCi0gICAgLy8gbG9va3VwIGEgc3BlY2lmaWMgY2xhc3MgbmFtZQotICAgIFR5cGUqICAgRmluZChjb25zdCBzdHJpbmcmIG5hbWUpIGNvbnN0OwotICAgIFR5cGUqICAgRmluZChjb25zdCBjaGFyKiBwYWNrYWdlLCBjb25zdCBjaGFyKiBuYW1lKSBjb25zdDsKLSAgICAKLSAgICAvLyB0cnkgdG8gc2VhcmNoIGJ5IGVpdGhlciBhIGZ1bGwgbmFtZSBvciBhIHBhcnRpYWwgbmFtZQotICAgIFR5cGUqICAgU2VhcmNoKGNvbnN0IHN0cmluZyYgbmFtZSk7Ci0KLSAgICB2b2lkICAgIER1bXAoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgR2VuZXJpYyB7Ci0gICAgICAgIHN0cmluZyBwYWNrYWdlOwotICAgICAgICBzdHJpbmcgbmFtZTsKLSAgICAgICAgc3RyaW5nIHF1YWxpZmllZDsKLSAgICAgICAgaW50IGFyZ3M7Ci0gICAgfTsKLQotICAgIGNvbnN0IEdlbmVyaWMqIHNlYXJjaF9nZW5lcmljKGNvbnN0IHN0cmluZyYgbmFtZSkgY29uc3Q7Ci0KLSAgICB2ZWN0b3I8VHlwZSo+IG1fdHlwZXM7Ci0gICAgdmVjdG9yPEdlbmVyaWM+IG1fZ2VuZXJpY3M7Ci19OwotCi1leHRlcm4gTmFtZXNwYWNlIE5BTUVTOwotCi1leHRlcm4gVHlwZSogVk9JRF9UWVBFOwotZXh0ZXJuIFR5cGUqIEJPT0xFQU5fVFlQRTsKLWV4dGVybiBUeXBlKiBCWVRFX1RZUEU7Ci1leHRlcm4gVHlwZSogQ0hBUl9UWVBFOwotZXh0ZXJuIFR5cGUqIElOVF9UWVBFOwotZXh0ZXJuIFR5cGUqIExPTkdfVFlQRTsKLWV4dGVybiBUeXBlKiBGTE9BVF9UWVBFOwotZXh0ZXJuIFR5cGUqIERPVUJMRV9UWVBFOwotZXh0ZXJuIFR5cGUqIE9CSkVDVF9UWVBFOwotZXh0ZXJuIFR5cGUqIFNUUklOR19UWVBFOwotZXh0ZXJuIFR5cGUqIENIQVJfU0VRVUVOQ0VfVFlQRTsKLWV4dGVybiBUeXBlKiBURVhUX1VUSUxTX1RZUEU7Ci1leHRlcm4gVHlwZSogUkVNT1RFX0VYQ0VQVElPTl9UWVBFOwotZXh0ZXJuIFR5cGUqIFJVTlRJTUVfRVhDRVBUSU9OX1RZUEU7Ci1leHRlcm4gVHlwZSogSUJJTkRFUl9UWVBFOwotZXh0ZXJuIFR5cGUqIElJTlRFUkZBQ0VfVFlQRTsKLWV4dGVybiBUeXBlKiBCSU5ERVJfTkFUSVZFX1RZUEU7Ci1leHRlcm4gVHlwZSogQklOREVSX1BST1hZX1RZUEU7Ci1leHRlcm4gVHlwZSogUEFSQ0VMX1RZUEU7Ci1leHRlcm4gVHlwZSogUEFSQ0VMQUJMRV9JTlRFUkZBQ0VfVFlQRTsKLQotZXh0ZXJuIFR5cGUqIENPTlRFWFRfVFlQRTsKLQotZXh0ZXJuIFR5cGUqIFJQQ19EQVRBX1RZUEU7Ci1leHRlcm4gVHlwZSogUlBDX0VSUk9SX1RZUEU7Ci1leHRlcm4gVHlwZSogUlBDX0NPTlRFWFRfVFlQRTsKLWV4dGVybiBUeXBlKiBFVkVOVF9GQUtFX1RZUEU7Ci0KLWV4dGVybiBFeHByZXNzaW9uKiBOVUxMX1ZBTFVFOwotZXh0ZXJuIEV4cHJlc3Npb24qIFRISVNfVkFMVUU7Ci1leHRlcm4gRXhwcmVzc2lvbiogU1VQRVJfVkFMVUU7Ci1leHRlcm4gRXhwcmVzc2lvbiogVFJVRV9WQUxVRTsKLWV4dGVybiBFeHByZXNzaW9uKiBGQUxTRV9WQUxVRTsKLQotdm9pZCByZWdpc3Rlcl9iYXNlX3R5cGVzKCk7Ci0KLSNlbmRpZiAvLyBBSURMX1RZUEVfSApkaWZmIC0tZ2l0IGEvdG9vbHMvYWlkbC9haWRsLmNwcCBiL3Rvb2xzL2FpZGwvYWlkbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NGQ3NDMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9haWRsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNTYgKzAsMCBAQAotCi0jaW5jbHVkZSAiYWlkbF9sYW5ndWFnZS5oIgotI2luY2x1ZGUgIm9wdGlvbnMuaCIKLSNpbmNsdWRlICJzZWFyY2hfcGF0aC5oIgotI2luY2x1ZGUgIlR5cGUuaCIKLSNpbmNsdWRlICJnZW5lcmF0ZV9qYXZhLmgiCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtYXA+Ci0KLSNpZmRlZiBIQVZFX01TX0NfUlVOVElNRQotI2luY2x1ZGUgPGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotCi0jaWZuZGVmIE9fQklOQVJZCi0jICBkZWZpbmUgT19CSU5BUlkgIDAKLSNlbmRpZgotCi0vLyBUaGUgZm9sbG93aW5nIGFyZSBnb3R0ZW4gYXMgdGhlIG9mZnNldCBmcm9tIHRoZSBhbGxvd2FibGUgaWQncyBiZXR3ZWVuCi0vLyBhbmRyb2lkLm9zLklCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTj0xIGFuZAotLy8gYW5kcm9pZC5vcy5JQmluZGVyLkxBU1RfQ0FMTF9UUkFOU0FDVElPTj0xNjc3NzIxNQotI2RlZmluZSBNSU5fVVNFUl9TRVRfTUVUSE9EX0lEICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFYX1VTRVJfU0VUX01FVEhPRF9JRCAgICAgICAgICAgICAgICAxNjc3NzIxNAotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1zdGF0aWMgdm9pZAotdGVzdF9kb2N1bWVudChkb2N1bWVudF9pdGVtX3R5cGUqIGQpCi17Ci0gICAgd2hpbGUgKGQpIHsKLSAgICAgICAgaWYgKGQtPml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9CSU5ERVIpIHsKLSAgICAgICAgICAgIGludGVyZmFjZV90eXBlKiBjID0gKGludGVyZmFjZV90eXBlKilkOwotICAgICAgICAgICAgcHJpbnRmKCJpbnRlcmZhY2UgJXMgJXMge1xuIiwgYy0+cGFja2FnZSwgYy0+bmFtZS5kYXRhKTsKLSAgICAgICAgICAgIGludGVyZmFjZV9pdGVtX3R5cGUgKnEgPSAoaW50ZXJmYWNlX2l0ZW1fdHlwZSopYy0+aW50ZXJmYWNlX2l0ZW1zOwotICAgICAgICAgICAgd2hpbGUgKHEpIHsKLSAgICAgICAgICAgICAgICBpZiAocS0+aXRlbV90eXBlID09IE1FVEhPRF9UWVBFKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZF90eXBlICptID0gKG1ldGhvZF90eXBlKilxOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgJXMgJXMoIiwgbS0+dHlwZS50eXBlLmRhdGEsIG0tPm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ190eXBlICpwID0gbS0+YXJnczsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMgJXMiLHAtPnR5cGUudHlwZS5kYXRhLHAtPm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocC0+bmV4dCkgcHJpbnRmKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcD1wLT5uZXh0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiKSIpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoIjtcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBxPXEtPm5leHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIn1cbiIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGQtPml0ZW1fdHlwZSA9PSBVU0VSX0RBVEFfVFlQRSkgewotICAgICAgICAgICAgdXNlcl9kYXRhX3R5cGUqIGIgPSAodXNlcl9kYXRhX3R5cGUqKWQ7Ci0gICAgICAgICAgICBpZiAoKGItPmZsYXR0ZW5pbmdfbWV0aG9kcyAmIFBBUkNFTEFCTEVfREFUQSkgIT0gMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigicGFyY2VsYWJsZSAlcyAlcztcbiIsIGItPnBhY2thZ2UsIGItPm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGItPmZsYXR0ZW5pbmdfbWV0aG9kcyAmIFJQQ19EQVRBKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJmbGF0dGVuYWJsZSAlcyAlcztcbiIsIGItPnBhY2thZ2UsIGItPm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwcmludGYoIlVOS05PV04gZD0weCUwOGx4IGQtPml0ZW1fdHlwZT0lZFxuIiwgKGxvbmcpZCwgZC0+aXRlbV90eXBlKTsKLSAgICAgICAgfQotICAgICAgICBkID0gZC0+bmV4dDsKLSAgICB9Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWludAotY29udmVydF9kaXJlY3Rpb24oY29uc3QgY2hhciogZGlyZWN0aW9uKQotewotICAgIGlmIChkaXJlY3Rpb24gPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gSU5fUEFSQU1FVEVSOwotICAgIH0KLSAgICBpZiAoMCA9PSBzdHJjbXAoZGlyZWN0aW9uLCAiaW4iKSkgewotICAgICAgICByZXR1cm4gSU5fUEFSQU1FVEVSOwotICAgIH0KLSAgICBpZiAoMCA9PSBzdHJjbXAoZGlyZWN0aW9uLCAib3V0IikpIHsKLSAgICAgICAgcmV0dXJuIE9VVF9QQVJBTUVURVI7Ci0gICAgfQotICAgIHJldHVybiBJTk9VVF9QQVJBTUVURVI7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0cnVjdCBpbXBvcnRfaW5mbyB7Ci0gICAgY29uc3QgY2hhciogZnJvbTsKLSAgICBjb25zdCBjaGFyKiBmaWxlbmFtZTsKLSAgICBidWZmZXJfdHlwZSBzdGF0ZW1lbnQ7Ci0gICAgY29uc3QgY2hhciogbmVlZGVkQ2xhc3M7Ci0gICAgZG9jdW1lbnRfaXRlbV90eXBlKiBkb2M7Ci0gICAgc3RydWN0IGltcG9ydF9pbmZvKiBuZXh0OwotfTsKLQotZG9jdW1lbnRfaXRlbV90eXBlKiBnX2RvY3VtZW50ID0gTlVMTDsKLWltcG9ydF9pbmZvKiBnX2ltcG9ydHMgPSBOVUxMOwotCi1zdGF0aWMgdm9pZAotbWFpbl9kb2N1bWVudF9wYXJzZWQoZG9jdW1lbnRfaXRlbV90eXBlKiBkKQotewotICAgIGdfZG9jdW1lbnQgPSBkOwotfQotCi1zdGF0aWMgdm9pZAotbWFpbl9pbXBvcnRfcGFyc2VkKGJ1ZmZlcl90eXBlKiBzdGF0ZW1lbnQpCi17Ci0gICAgaW1wb3J0X2luZm8qIGltcG9ydCA9IChpbXBvcnRfaW5mbyopbWFsbG9jKHNpemVvZihpbXBvcnRfaW5mbykpOwotICAgIG1lbXNldChpbXBvcnQsIDAsIHNpemVvZihpbXBvcnRfaW5mbykpOwotICAgIGltcG9ydC0+ZnJvbSA9IHN0cmR1cChnX2N1cnJlbnRGaWxlbmFtZSk7Ci0gICAgaW1wb3J0LT5zdGF0ZW1lbnQubGluZW5vID0gc3RhdGVtZW50LT5saW5lbm87Ci0gICAgaW1wb3J0LT5zdGF0ZW1lbnQuZGF0YSA9IHN0cmR1cChzdGF0ZW1lbnQtPmRhdGEpOwotICAgIGltcG9ydC0+c3RhdGVtZW50LmV4dHJhID0gTlVMTDsKLSAgICBpbXBvcnQtPm5leHQgPSBnX2ltcG9ydHM7Ci0gICAgaW1wb3J0LT5uZWVkZWRDbGFzcyA9IHBhcnNlX2ltcG9ydF9zdGF0ZW1lbnQoc3RhdGVtZW50LT5kYXRhKTsKLSAgICBnX2ltcG9ydHMgPSBpbXBvcnQ7Ci19Ci0KLXN0YXRpYyBQYXJzZXJDYWxsYmFja3MgZ19tYWluQ2FsbGJhY2tzID0gewotICAgICZtYWluX2RvY3VtZW50X3BhcnNlZCwKLSAgICAmbWFpbl9pbXBvcnRfcGFyc2VkCi19OwotCi1jaGFyKgotcGFyc2VfaW1wb3J0X3N0YXRlbWVudChjb25zdCBjaGFyKiB0ZXh0KQotewotICAgIGNvbnN0IGNoYXIqIGVuZDsKLSAgICBpbnQgbGVuOwotCi0gICAgd2hpbGUgKGlzc3BhY2UoKnRleHQpKSB7Ci0gICAgICAgIHRleHQrKzsKLSAgICB9Ci0gICAgd2hpbGUgKCFpc3NwYWNlKCp0ZXh0KSkgewotICAgICAgICB0ZXh0Kys7Ci0gICAgfQotICAgIHdoaWxlIChpc3NwYWNlKCp0ZXh0KSkgewotICAgICAgICB0ZXh0Kys7Ci0gICAgfQotICAgIGVuZCA9IHRleHQ7Ci0gICAgd2hpbGUgKCFpc3NwYWNlKCplbmQpICYmICplbmQgIT0gJzsnKSB7Ci0gICAgICAgIGVuZCsrOwotICAgIH0KLSAgICBsZW4gPSBlbmQtdGV4dDsKLQotICAgIGNoYXIqIHJ2ID0gKGNoYXIqKW1hbGxvYyhsZW4rMSk7Ci0gICAgbWVtY3B5KHJ2LCB0ZXh0LCBsZW4pOwotICAgIHJ2W2xlbl0gPSAnXDAnOwotCi0gICAgcmV0dXJuIHJ2OwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgdm9pZAotaW1wb3J0X2ltcG9ydF9wYXJzZWQoYnVmZmVyX3R5cGUqIHN0YXRlbWVudCkKLXsKLX0KLQotc3RhdGljIFBhcnNlckNhbGxiYWNrcyBnX2ltcG9ydENhbGxiYWNrcyA9IHsKLSAgICAmbWFpbl9kb2N1bWVudF9wYXJzZWQsCi0gICAgJmltcG9ydF9pbXBvcnRfcGFyc2VkCi19OwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW50Ci1jaGVja19maWxlbmFtZShjb25zdCBjaGFyKiBmaWxlbmFtZSwgY29uc3QgY2hhciogcGFja2FnZSwgYnVmZmVyX3R5cGUqIG5hbWUpCi17Ci0gICAgY29uc3QgY2hhciogcDsKLSAgICBzdHJpbmcgZXhwZWN0ZWQ7Ci0gICAgc3RyaW5nIGZuOwotICAgIHNpemVfdCBsZW47Ci0gICAgY2hhciBjd2RbTUFYUEFUSExFTl07Ci0gICAgYm9vbCB2YWxpZCA9IGZhbHNlOwotCi0jaWZkZWYgSEFWRV9XSU5ET1dTX1BBVEhTCi0gICAgaWYgKGlzYWxwaGEoZmlsZW5hbWVbMF0pICYmIGZpbGVuYW1lWzFdID09ICc6JwotICAgICAgICAmJiBmaWxlbmFtZVsyXSA9PSBPU19QQVRIX1NFUEFSQVRPUikgewotI2Vsc2UKLSAgICBpZiAoZmlsZW5hbWVbMF0gPT0gT1NfUEFUSF9TRVBBUkFUT1IpIHsKLSNlbmRpZgotICAgICAgICBmbiA9IGZpbGVuYW1lOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZuID0gZ2V0Y3dkKGN3ZCwgc2l6ZW9mKGN3ZCkpOwotICAgICAgICBsZW4gPSBmbi5sZW5ndGgoKTsKLSAgICAgICAgaWYgKGZuW2xlbi0xXSAhPSBPU19QQVRIX1NFUEFSQVRPUikgewotICAgICAgICAgICAgZm4gKz0gT1NfUEFUSF9TRVBBUkFUT1I7Ci0gICAgICAgIH0KLSAgICAgICAgZm4gKz0gZmlsZW5hbWU7Ci0gICAgfQotCi0gICAgaWYgKHBhY2thZ2UpIHsKLSAgICAgICAgZXhwZWN0ZWQgPSBwYWNrYWdlOwotICAgICAgICBleHBlY3RlZCArPSAnLic7Ci0gICAgfQotCi0gICAgbGVuID0gZXhwZWN0ZWQubGVuZ3RoKCk7Ci0gICAgZm9yIChzaXplX3QgaT0wOyBpPGxlbjsgaSsrKSB7Ci0gICAgICAgIGlmIChleHBlY3RlZFtpXSA9PSAnLicpIHsKLSAgICAgICAgICAgIGV4cGVjdGVkW2ldID0gT1NfUEFUSF9TRVBBUkFUT1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwID0gc3RyY2hyKG5hbWUtPmRhdGEsICcuJyk7Ci0gICAgbGVuID0gcCA/IHAtbmFtZS0+ZGF0YSA6IHN0cmxlbihuYW1lLT5kYXRhKTsKLSAgICBleHBlY3RlZC5hcHBlbmQobmFtZS0+ZGF0YSwgbGVuKTsKLQotICAgIGV4cGVjdGVkICs9ICIuYWlkbCI7Ci0KLSAgICBsZW4gPSBmbi5sZW5ndGgoKTsKLSAgICB2YWxpZCA9IChsZW4gPj0gZXhwZWN0ZWQubGVuZ3RoKCkpOwotCi0gICAgaWYgKHZhbGlkKSB7Ci0gICAgICAgIHAgPSBmbi5jX3N0cigpICsgKGxlbiAtIGV4cGVjdGVkLmxlbmd0aCgpKTsKLQotI2lmZGVmIEhBVkVfV0lORE9XU19QQVRIUwotICAgICAgICBpZiAoT1NfUEFUSF9TRVBBUkFUT1IgIT0gJy8nKSB7Ci0gICAgICAgICAgICAvLyBJbnB1dCBmaWxlbmFtZSB1bmRlciBjeWd3aW4gbW9zdCBsaWtlbHkgaGFzIC8gc2VwYXJhdG9ycwotICAgICAgICAgICAgLy8gd2hlcmVhcyB0aGUgZXhwZWN0ZWQgc3RyaW5nIHVzZXMgXFwgc2VwYXJhdG9ycy4gQWRqdXN0Ci0gICAgICAgICAgICAvLyB0aGVtIGFjY29yZGluZ2x5LgotICAgICAgICAgIGZvciAoY2hhciAqYyA9IGNvbnN0X2Nhc3Q8Y2hhciAqPihwKTsgKmM7ICsrYykgewotICAgICAgICAgICAgICAgIGlmICgqYyA9PSAnLycpICpjID0gT1NfUEFUSF9TRVBBUkFUT1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgotCi0jaWZkZWYgT1NfQ0FTRV9TRU5TSVRJVkUKLSAgICAgICAgdmFsaWQgPSAoZXhwZWN0ZWQgPT0gcCk7Ci0jZWxzZQotICAgICAgICB2YWxpZCA9ICFzdHJjYXNlY21wKGV4cGVjdGVkLmNfc3RyKCksIHApOwotI2VuZGlmCi0gICAgfQotCi0gICAgaWYgKCF2YWxpZCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIGludGVyZmFjZSAlcyBzaG91bGQgYmUgZGVjbGFyZWQgaW4gYSBmaWxlIgotICAgICAgICAgICAgICAgICIgY2FsbGVkICVzLlxuIiwKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbmFtZS0+bGluZW5vLCBuYW1lLT5kYXRhLCBleHBlY3RlZC5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWNoZWNrX2ZpbGVuYW1lcyhjb25zdCBjaGFyKiBmaWxlbmFtZSwgZG9jdW1lbnRfaXRlbV90eXBlKiBpdGVtcykKLXsKLSAgICBpbnQgZXJyID0gMDsKLSAgICB3aGlsZSAoaXRlbXMpIHsKLSAgICAgICAgaWYgKGl0ZW1zLT5pdGVtX3R5cGUgPT0gVVNFUl9EQVRBX1RZUEUpIHsKLSAgICAgICAgICAgIHVzZXJfZGF0YV90eXBlKiBwID0gKHVzZXJfZGF0YV90eXBlKilpdGVtczsKLSAgICAgICAgICAgIGVyciB8PSBjaGVja19maWxlbmFtZShmaWxlbmFtZSwgcC0+cGFja2FnZSwgJnAtPm5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGl0ZW1zLT5pdGVtX3R5cGUgPT0gSU5URVJGQUNFX1RZUEVfQklOREVSCi0gICAgICAgICAgICAgICAgfHwgaXRlbXMtPml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9SUEMpIHsKLSAgICAgICAgICAgIGludGVyZmFjZV90eXBlKiBjID0gKGludGVyZmFjZV90eXBlKilpdGVtczsKLSAgICAgICAgICAgIGVyciB8PSBjaGVja19maWxlbmFtZShmaWxlbmFtZSwgYy0+cGFja2FnZSwgJmMtPm5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJhaWRsOiBpbnRlcm5hbCBlcnJvciB1bmtvd24gZG9jdW1lbnQgdHlwZSAlZC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy0+aXRlbV90eXBlKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICAgIGl0ZW1zID0gaXRlbXMtPm5leHQ7Ci0gICAgfQotICAgIHJldHVybiBlcnI7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBjb25zdCBjaGFyKgota2luZF90b19zdHJpbmcoaW50IGtpbmQpCi17Ci0gICAgc3dpdGNoIChraW5kKQotICAgIHsKLSAgICAgICAgY2FzZSBUeXBlOjpJTlRFUkZBQ0U6Ci0gICAgICAgICAgICByZXR1cm4gImFuIGludGVyZmFjZSI7Ci0gICAgICAgIGNhc2UgVHlwZTo6VVNFUkRBVEE6Ci0gICAgICAgICAgICByZXR1cm4gImEgdXNlciBkYXRhIjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAiRVJST1IiOwotICAgIH0KLX0KLQotc3RhdGljIGNoYXIqCi1yZmluZChjaGFyKiBzdHIsIGNoYXIgYykKLXsKLSAgICBjaGFyKiBwID0gc3RyICsgc3RybGVuKHN0cikgLSAxOwotICAgIHdoaWxlIChwID49IHN0cikgewotICAgICAgICBpZiAoKnAgPT0gYykgewotICAgICAgICAgICAgcmV0dXJuIHA7Ci0gICAgICAgIH0KLSAgICAgICAgcC0tOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGludAotZ2F0aGVyX3R5cGVzKGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBkb2N1bWVudF9pdGVtX3R5cGUqIGl0ZW1zKQotewotICAgIGludCBlcnIgPSAwOwotICAgIHdoaWxlIChpdGVtcykgewotICAgICAgICBUeXBlKiB0eXBlOwotICAgICAgICBpZiAoaXRlbXMtPml0ZW1fdHlwZSA9PSBVU0VSX0RBVEFfVFlQRSkgewotICAgICAgICAgICAgdXNlcl9kYXRhX3R5cGUqIHAgPSAodXNlcl9kYXRhX3R5cGUqKWl0ZW1zOwotICAgICAgICAgICAgdHlwZSA9IG5ldyBVc2VyRGF0YVR5cGUocC0+cGFja2FnZSA/IHAtPnBhY2thZ2UgOiAiIiwgcC0+bmFtZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICBmYWxzZSwgKChwLT5mbGF0dGVuaW5nX21ldGhvZHMgJiBQQVJDRUxBQkxFX0RBVEEpICE9IDApLAotICAgICAgICAgICAgICAgICAgICAoKHAtPmZsYXR0ZW5pbmdfbWV0aG9kcyAmIFJQQ19EQVRBKSAhPSAwKSwgZmlsZW5hbWUsIHAtPm5hbWUubGluZW5vKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpdGVtcy0+aXRlbV90eXBlID09IElOVEVSRkFDRV9UWVBFX0JJTkRFUgotICAgICAgICAgICAgICAgIHx8IGl0ZW1zLT5pdGVtX3R5cGUgPT0gSU5URVJGQUNFX1RZUEVfUlBDKSB7Ci0gICAgICAgICAgICBpbnRlcmZhY2VfdHlwZSogYyA9IChpbnRlcmZhY2VfdHlwZSopaXRlbXM7Ci0gICAgICAgICAgICB0eXBlID0gbmV3IEludGVyZmFjZVR5cGUoYy0+cGFja2FnZSA/IGMtPnBhY2thZ2UgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5uYW1lLmRhdGEsIGZhbHNlLCBjLT5vbmV3YXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGMtPm5hbWUubGluZW5vKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDogaW50ZXJuYWwgZXJyb3IgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotCi0gICAgICAgIFR5cGUqIG9sZCA9IE5BTUVTLkZpbmQodHlwZS0+UXVhbGlmaWVkTmFtZSgpKTsKLSAgICAgICAgaWYgKG9sZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBOQU1FUy5BZGQodHlwZSk7Ci0KLSAgICAgICAgICAgIGlmIChpdGVtcy0+aXRlbV90eXBlID09IElOVEVSRkFDRV9UWVBFX0JJTkRFUikgewotICAgICAgICAgICAgICAgIC8vIGZvciBpbnRlcmZhY2VzLCBhbHNvIGFkZCB0aGUgc3R1YiBhbmQgcHJveHkgdHlwZXMsIHdlIGRvbid0Ci0gICAgICAgICAgICAgICAgLy8gYm90aGVyIGNoZWNraW5nIHRoZXNlIGZvciBkdXBsaWNhdGVzLCBiZWNhdXNlIHRoZSBwYXJzZXIKLSAgICAgICAgICAgICAgICAvLyB3b24ndCBsZXQgdXMgZG8gaXQuCi0gICAgICAgICAgICAgICAgaW50ZXJmYWNlX3R5cGUqIGMgPSAoaW50ZXJmYWNlX3R5cGUqKWl0ZW1zOwotCi0gICAgICAgICAgICAgICAgc3RyaW5nIG5hbWUgPSBjLT5uYW1lLmRhdGE7Ci0gICAgICAgICAgICAgICAgbmFtZSArPSAiLlN0dWIiOwotICAgICAgICAgICAgICAgIFR5cGUqIHN0dWIgPSBuZXcgVHlwZShjLT5wYWNrYWdlID8gYy0+cGFja2FnZSA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIFR5cGU6OkdFTkVSQVRFRCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgYy0+bmFtZS5saW5lbm8pOwotICAgICAgICAgICAgICAgIE5BTUVTLkFkZChzdHViKTsKLQotICAgICAgICAgICAgICAgIG5hbWUgPSBjLT5uYW1lLmRhdGE7Ci0gICAgICAgICAgICAgICAgbmFtZSArPSAiLlN0dWIuUHJveHkiOwotICAgICAgICAgICAgICAgIFR5cGUqIHByb3h5ID0gbmV3IFR5cGUoYy0+cGFja2FnZSA/IGMtPnBhY2thZ2UgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBUeXBlOjpHRU5FUkFURUQsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGMtPm5hbWUubGluZW5vKTsKLSAgICAgICAgICAgICAgICBOQU1FUy5BZGQocHJveHkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoaXRlbXMtPml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9SUEMpIHsKLSAgICAgICAgICAgICAgICAvLyBmb3IgaW50ZXJmYWNlcywgYWxzbyBhZGQgdGhlIHNlcnZpY2UgYmFzZSB0eXBlLCB3ZSBkb24ndAotICAgICAgICAgICAgICAgIC8vIGJvdGhlciBjaGVja2luZyB0aGVzZSBmb3IgZHVwbGljYXRlcywgYmVjYXVzZSB0aGUgcGFyc2VyCi0gICAgICAgICAgICAgICAgLy8gd29uJ3QgbGV0IHVzIGRvIGl0LgotICAgICAgICAgICAgICAgIGludGVyZmFjZV90eXBlKiBjID0gKGludGVyZmFjZV90eXBlKilpdGVtczsKLQotICAgICAgICAgICAgICAgIHN0cmluZyBuYW1lID0gYy0+bmFtZS5kYXRhOwotICAgICAgICAgICAgICAgIG5hbWUgKz0gIi5TZXJ2aWNlQmFzZSI7Ci0gICAgICAgICAgICAgICAgVHlwZSogYmFzZSA9IG5ldyBUeXBlKGMtPnBhY2thZ2UgPyBjLT5wYWNrYWdlIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgVHlwZTo6R0VORVJBVEVELCBmYWxzZSwgZmFsc2UsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBjLT5uYW1lLmxpbmVubyk7Ci0gICAgICAgICAgICAgICAgTkFNRVMuQWRkKGJhc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG9sZC0+S2luZCgpID09IFR5cGU6OkJVSUxUX0lOKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBhdHRlbXB0IHRvIHJlZGVmaW5lIGJ1aWx0IGluIGNsYXNzICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCB0eXBlLT5EZWNsTGluZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtPlF1YWxpZmllZE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICBlcnIgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodHlwZS0+S2luZCgpICE9IG9sZC0+S2luZCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogb2xkS2luZCA9IGtpbmRfdG9fc3RyaW5nKG9sZC0+S2luZCgpKTsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuZXdLaW5kID0ga2luZF90b19zdHJpbmcodHlwZS0+S2luZCgpKTsKLQotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgYXR0ZW1wdCB0byByZWRlZmluZSAlcyBhcyAlcyxcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIHR5cGUtPkRlY2xMaW5lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS0+UXVhbGlmaWVkTmFtZSgpLmNfc3RyKCksIG5ld0tpbmQpOwotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgICAgcHJldmlvdXNseSBkZWZpbmVkIGhlcmUgYXMgJXMuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZC0+RGVjbEZpbGUoKS5jX3N0cigpLCBvbGQtPkRlY2xMaW5lKCksIG9sZEtpbmQpOwotICAgICAgICAgICAgICAgIGVyciA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpdGVtcyA9IGl0ZW1zLT5uZXh0OwotICAgIH0KLSAgICByZXR1cm4gZXJyOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgYm9vbAotbWF0Y2hlc19rZXl3b3JkKGNvbnN0IGNoYXIqIHN0cikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogS0VZV09SRFNbXSA9IHsgImFic3RyYWN0IiwgImFzc2VydCIsICJib29sZWFuIiwgImJyZWFrIiwKLSAgICAgICAgImJ5dGUiLCAiY2FzZSIsICJjYXRjaCIsICJjaGFyIiwgImNsYXNzIiwgImNvbnN0IiwgImNvbnRpbnVlIiwKLSAgICAgICAgImRlZmF1bHQiLCAiZG8iLCAiZG91YmxlIiwgImVsc2UiLCAiZW51bSIsICJleHRlbmRzIiwgImZpbmFsIiwKLSAgICAgICAgImZpbmFsbHkiLCAiZmxvYXQiLCAiZm9yIiwgImdvdG8iLCAiaWYiLCAiaW1wbGVtZW50cyIsICJpbXBvcnQiLAotICAgICAgICAiaW5zdGFuY2VvZiIsICJpbnQiLCAiaW50ZXJmYWNlIiwgImxvbmciLCAibmF0aXZlIiwgIm5ldyIsICJwYWNrYWdlIiwKLSAgICAgICAgInByaXZhdGUiLCAicHJvdGVjdGVkIiwgInB1YmxpYyIsICJyZXR1cm4iLCAic2hvcnQiLCAic3RhdGljIiwKLSAgICAgICAgInN0cmljdGZwIiwgInN1cGVyIiwgInN3aXRjaCIsICJzeW5jaHJvbml6ZWQiLCAidGhpcyIsICJ0aHJvdyIsCi0gICAgICAgICJ0aHJvd3MiLCAidHJhbnNpZW50IiwgInRyeSIsICJ2b2lkIiwgInZvbGF0aWxlIiwgIndoaWxlIiwKLSAgICAgICAgInRydWUiLCAiZmFsc2UiLCAibnVsbCIsCi0gICAgICAgIE5VTEwKLSAgICB9OwotICAgIGNvbnN0IGNoYXIqKiBrID0gS0VZV09SRFM7Ci0gICAgd2hpbGUgKCprKSB7Ci0gICAgICAgIGlmICgwID09IHN0cmNtcChzdHIsICprKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaysrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbnQKLWNoZWNrX21ldGhvZChjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGtpbmQsIG1ldGhvZF90eXBlKiBtKQotewotICAgIGludCBlcnIgPSAwOwotCi0gICAgLy8gcmV0dXJuIHR5cGUKLSAgICBUeXBlKiByZXR1cm5UeXBlID0gTkFNRVMuU2VhcmNoKG0tPnR5cGUudHlwZS5kYXRhKTsKLSAgICBpZiAocmV0dXJuVHlwZSA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgdW5rbm93biByZXR1cm4gdHlwZSAlc1xuIiwgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgIG0tPnR5cGUudHlwZS5saW5lbm8sIG0tPnR5cGUudHlwZS5kYXRhKTsKLSAgICAgICAgZXJyID0gMTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBpZiAocmV0dXJuVHlwZSA9PSBFVkVOVF9GQUtFX1RZUEUpIHsKLSAgICAgICAgaWYgKGtpbmQgIT0gSU5URVJGQUNFX1RZUEVfUlBDKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIGV2ZW50IG1ldGhvZHMgb25seSBzdXBwb3J0ZWQgZm9yIHJwYyBpbnRlcmZhY2VzXG4iLAotICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbS0+dHlwZS50eXBlLmxpbmVubyk7Ci0gICAgICAgICAgICBlcnIgPSAxOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCEoa2luZCA9PSBJTlRFUkZBQ0VfVFlQRV9CSU5ERVIgPyByZXR1cm5UeXBlLT5DYW5Xcml0ZVRvUGFyY2VsKCkKLSAgICAgICAgICAgICAgICAgICAgOiByZXR1cm5UeXBlLT5DYW5Xcml0ZVRvUnBjRGF0YSgpKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCByZXR1cm4gdHlwZSAlcyBjYW4ndCBiZSBtYXJzaGFsbGVkLlxuIiwgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBtLT50eXBlLnR5cGUubGluZW5vLCBtLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgICAgICBlcnIgPSAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG0tPnR5cGUuZGltZW5zaW9uID4gMCAmJiAhcmV0dXJuVHlwZS0+Q2FuQmVBcnJheSgpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgcmV0dXJuIHR5cGUgJXMlcyBjYW4ndCBiZSBhbiBhcnJheS5cbiIsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgIG0tPnR5cGUuYXJyYXlfdG9rZW4ubGluZW5vLCBtLT50eXBlLnR5cGUuZGF0YSwKLSAgICAgICAgICAgICAgICBtLT50eXBlLmFycmF5X3Rva2VuLmRhdGEpOwotICAgICAgICBlcnIgPSAxOwotICAgIH0KLQotICAgIGlmIChtLT50eXBlLmRpbWVuc2lvbiA+IDEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCByZXR1cm4gdHlwZSAlcyVzIG9ubHkgb25lIgotICAgICAgICAgICAgICAgICIgZGltZW5zaW9uYWwgYXJyYXlzIGFyZSBzdXBwb3J0ZWRcbiIsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgIG0tPnR5cGUuYXJyYXlfdG9rZW4ubGluZW5vLCBtLT50eXBlLnR5cGUuZGF0YSwKLSAgICAgICAgICAgICAgICBtLT50eXBlLmFycmF5X3Rva2VuLmRhdGEpOwotICAgICAgICBlcnIgPSAxOwotICAgIH0KLQotICAgIGludCBpbmRleCA9IDE7Ci0KLSAgICBhcmdfdHlwZSogYXJnID0gbS0+YXJnczsKLSAgICB3aGlsZSAoYXJnKSB7Ci0gICAgICAgIFR5cGUqIHQgPSBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSk7Ci0KLSAgICAgICAgLy8gY2hlY2sgdGhlIGFyZyB0eXBlCi0gICAgICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgcGFyYW1ldGVyICVzICglZCkgdW5rbm93biB0eXBlICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbS0+dHlwZS50eXBlLmxpbmVubywgYXJnLT5uYW1lLmRhdGEsIGluZGV4LAotICAgICAgICAgICAgICAgICAgICBhcmctPnR5cGUudHlwZS5kYXRhKTsKLSAgICAgICAgICAgIGVyciA9IDE7Ci0gICAgICAgICAgICBnb3RvIG5leHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodCA9PSBFVkVOVF9GQUtFX1RZUEUpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgcGFyYW1ldGVyICVzICglZCkgZXZlbnQgY2FuIG5vdCBiZSB1c2VkIGFzIGEgcGFyYW1ldGVyICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbS0+dHlwZS50eXBlLmxpbmVubywgYXJnLT5uYW1lLmRhdGEsIGluZGV4LAotICAgICAgICAgICAgICAgICAgICBhcmctPnR5cGUudHlwZS5kYXRhKTsKLSAgICAgICAgICAgIGVyciA9IDE7Ci0gICAgICAgICAgICBnb3RvIG5leHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIShraW5kID09IElOVEVSRkFDRV9UWVBFX0JJTkRFUiA/IHQtPkNhbldyaXRlVG9QYXJjZWwoKSA6IHQtPkNhbldyaXRlVG9ScGNEYXRhKCkpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIHBhcmFtZXRlciAlZDogJyVzICVzJyBjYW4ndCBiZSBtYXJzaGFsbGVkLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBtLT50eXBlLnR5cGUubGluZW5vLCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZy0+dHlwZS50eXBlLmRhdGEsIGFyZy0+bmFtZS5kYXRhKTsKLSAgICAgICAgICAgIGVyciA9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmV0dXJuVHlwZSA9PSBFVkVOVF9GQUtFX1RZUEUKLSAgICAgICAgICAgICAgICAmJiBjb252ZXJ0X2RpcmVjdGlvbihhcmctPmRpcmVjdGlvbi5kYXRhKSAhPSBJTl9QQVJBTUVURVIpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgcGFyYW1ldGVyICVkOiAnJXMgJXMnIEFsbCBwYXJlbWV0ZXJzIG9uIGV2ZW50cyBtdXN0IGJlICdpbicuXG4iLAotICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbS0+dHlwZS50eXBlLmxpbmVubywgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgIGFyZy0+dHlwZS50eXBlLmRhdGEsIGFyZy0+bmFtZS5kYXRhKTsKLSAgICAgICAgICAgIGVyciA9IDE7Ci0gICAgICAgICAgICBnb3RvIG5leHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXJnLT5kaXJlY3Rpb24uZGF0YSA9PSBOVUxMCi0gICAgICAgICAgICAgICAgJiYgKGFyZy0+dHlwZS5kaW1lbnNpb24gIT0gMCB8fCB0LT5DYW5CZU91dFBhcmFtZXRlcigpKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBwYXJhbWV0ZXIgJWQ6ICclcyAlcycgY2FuIGJlIGFuIG91dCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwYXJhbWV0ZXIsIHNvIHlvdSBtdXN0IGRlY2xhcmUgaXQgYXMgaW4sIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG91dCBvciBpbm91dC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbS0+dHlwZS50eXBlLmxpbmVubywgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmctPnR5cGUudHlwZS5kYXRhLCBhcmctPm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICBlcnIgPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbnZlcnRfZGlyZWN0aW9uKGFyZy0+ZGlyZWN0aW9uLmRhdGEpICE9IElOX1BBUkFNRVRFUgotICAgICAgICAgICAgICAgICYmICF0LT5DYW5CZU91dFBhcmFtZXRlcigpCi0gICAgICAgICAgICAgICAgJiYgYXJnLT50eXBlLmRpbWVuc2lvbiA9PSAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIHBhcmFtZXRlciAlZDogJyVzICVzICVzJyBjYW4gb25seSBiZSBhbiBpbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHBhcmFtZXRlci5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbS0+dHlwZS50eXBlLmxpbmVubywgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmctPmRpcmVjdGlvbi5kYXRhLCBhcmctPnR5cGUudHlwZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgYXJnLT5uYW1lLmRhdGEpOwotICAgICAgICAgICAgZXJyID0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhcmctPnR5cGUuZGltZW5zaW9uID4gMCAmJiAhdC0+Q2FuQmVBcnJheSgpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIHBhcmFtZXRlciAlZDogJyVzICVzJXMgJXMnIGNhbid0IGJlIGFuIgotICAgICAgICAgICAgICAgICAgICAiIGFycmF5LlxuIiwgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgIG0tPnR5cGUuYXJyYXlfdG9rZW4ubGluZW5vLCBpbmRleCwgYXJnLT5kaXJlY3Rpb24uZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgYXJnLT50eXBlLnR5cGUuZGF0YSwgYXJnLT50eXBlLmFycmF5X3Rva2VuLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgIGFyZy0+bmFtZS5kYXRhKTsKLSAgICAgICAgICAgIGVyciA9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXJnLT50eXBlLmRpbWVuc2lvbiA+IDEpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgcGFyYW1ldGVyICVkOiAnJXMgJXMlcyAlcycgb25seSBvbmUiCi0gICAgICAgICAgICAgICAgICAgICIgZGltZW5zaW9uYWwgYXJyYXlzIGFyZSBzdXBwb3J0ZWRcbiIsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICBtLT50eXBlLmFycmF5X3Rva2VuLmxpbmVubywgaW5kZXgsIGFyZy0+ZGlyZWN0aW9uLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgIGFyZy0+dHlwZS50eXBlLmRhdGEsIGFyZy0+dHlwZS5hcnJheV90b2tlbi5kYXRhLAotICAgICAgICAgICAgICAgICAgICBhcmctPm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICBlcnIgPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgbmFtZSBkb2Vzbid0IG1hdGNoIGEga2V5d29yZAotICAgICAgICBpZiAobWF0Y2hlc19rZXl3b3JkKGFyZy0+bmFtZS5kYXRhKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBwYXJhbWV0ZXIgJWQgJXMgaXMgbmFtZWQgdGhlIHNhbWUgYXMgYSIKLSAgICAgICAgICAgICAgICAgICAgIiBKYXZhIG9yIGFpZGwga2V5d29yZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIG0tPm5hbWUubGluZW5vLCBpbmRleCwgYXJnLT5uYW1lLmRhdGEpOwotICAgICAgICAgICAgZXJyID0gMTsKLSAgICAgICAgfQotCi1uZXh0OgotICAgICAgICBpbmRleCsrOwotICAgICAgICBhcmcgPSBhcmctPm5leHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludAotY2hlY2tfdHlwZXMoY29uc3QgY2hhciogZmlsZW5hbWUsIGRvY3VtZW50X2l0ZW1fdHlwZSogaXRlbXMpCi17Ci0gICAgaW50IGVyciA9IDA7Ci0gICAgd2hpbGUgKGl0ZW1zKSB7Ci0gICAgICAgIC8vIChub3RoaW5nIHRvIGNoZWNrIGZvciBVU0VSX0RBVEFfVFlQRSkKLSAgICAgICAgaWYgKGl0ZW1zLT5pdGVtX3R5cGUgPT0gSU5URVJGQUNFX1RZUEVfQklOREVSCi0gICAgICAgICAgICAgICAgfHwgaXRlbXMtPml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9SUEMpIHsKLSAgICAgICAgICAgIG1hcDxzdHJpbmcsbWV0aG9kX3R5cGUqPiBtZXRob2ROYW1lczsKLSAgICAgICAgICAgIGludGVyZmFjZV90eXBlKiBjID0gKGludGVyZmFjZV90eXBlKilpdGVtczsKLQotICAgICAgICAgICAgaW50ZXJmYWNlX2l0ZW1fdHlwZSogbWVtYmVyID0gYy0+aW50ZXJmYWNlX2l0ZW1zOwotICAgICAgICAgICAgd2hpbGUgKG1lbWJlcikgewotICAgICAgICAgICAgICAgIGlmIChtZW1iZXItPml0ZW1fdHlwZSA9PSBNRVRIT0RfVFlQRSkgewotICAgICAgICAgICAgICAgICAgICBtZXRob2RfdHlwZSogbSA9IChtZXRob2RfdHlwZSopbWVtYmVyOwotCi0gICAgICAgICAgICAgICAgICAgIGVyciB8PSBjaGVja19tZXRob2QoZmlsZW5hbWUsIGl0ZW1zLT5pdGVtX3R5cGUsIG0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZHVwbGljYXRlIG1ldGhvZHMKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZE5hbWVzLmZpbmQobS0+bmFtZS5kYXRhKSA9PSBtZXRob2ROYW1lcy5lbmQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZXNbbS0+bmFtZS5kYXRhXSA9IG07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiJXM6JWQgYXR0ZW1wdCB0byByZWRlZmluZSBtZXRob2QgJXMsXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbS0+bmFtZS5saW5lbm8sIG0tPm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfdHlwZSogb2xkID0gbWV0aG9kTmFtZXNbbS0+bmFtZS5kYXRhXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgICAgcHJldmlvdXNseSBkZWZpbmVkIGhlcmUuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgb2xkLT5uYW1lLmxpbmVubyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWJlciA9IG1lbWJlci0+bmV4dDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGl0ZW1zID0gaXRlbXMtPm5leHQ7Ci0gICAgfQotICAgIHJldHVybiBlcnI7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbnQKLWV4YWN0bHlfb25lX2ludGVyZmFjZShjb25zdCBjaGFyKiBmaWxlbmFtZSwgY29uc3QgZG9jdW1lbnRfaXRlbV90eXBlKiBpdGVtcywgY29uc3QgT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICBib29sKiBvbmx5UGFyY2VsYWJsZSkKLXsKLSAgICBpZiAoaXRlbXMgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGludGVyZmFjZXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBjb25zdCBkb2N1bWVudF9pdGVtX3R5cGUqIG5leHQgPSBpdGVtcy0+bmV4dDsKLSAgICAvLyBBbGxvdyBwYXJjZWxhYmxlcyB0byBza2lwIHRoZSAib25lLW9ubHkiIHJ1bGUuCi0gICAgaWYgKGl0ZW1zLT5uZXh0ICE9IE5VTEwgJiYgbmV4dC0+aXRlbV90eXBlICE9IFVTRVJfREFUQV9UWVBFKSB7Ci0gICAgICAgIGludCBsaW5lbm8gPSAtMTsKLSAgICAgICAgaWYgKG5leHQtPml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9CSU5ERVIpIHsKLSAgICAgICAgICAgIGxpbmVubyA9ICgoaW50ZXJmYWNlX3R5cGUqKW5leHQpLT5pbnRlcmZhY2VfdG9rZW4ubGluZW5vOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG5leHQtPml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9SUEMpIHsKLSAgICAgICAgICAgIGxpbmVubyA9ICgoaW50ZXJmYWNlX3R5cGUqKW5leHQpLT5pbnRlcmZhY2VfdG9rZW4ubGluZW5vOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgYWlkbCBjYW4gb25seSBoYW5kbGUgb25lIGludGVyZmFjZSBwZXIgZmlsZVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbGluZW5vKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgaWYgKGl0ZW1zLT5pdGVtX3R5cGUgPT0gVVNFUl9EQVRBX1RZUEUpIHsKLSAgICAgICAgKm9ubHlQYXJjZWxhYmxlID0gdHJ1ZTsKLSAgICAgICAgaWYgKG9wdGlvbnMuZmFpbE9uUGFyY2VsYWJsZSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBhaWRsIGNhbiBvbmx5IGdlbmVyYXRlIGNvZGUgZm9yIGludGVyZmFjZXMsIG5vdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHBhcmNlbGFibGVzIG9yIGZsYXR0ZW5hYmxlcyxcbiIsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodXNlcl9kYXRhX3R5cGUqKWl0ZW1zKS0+a2V5d29yZF90b2tlbi5saW5lbm8pOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCAuYWlkbCBmaWxlcyB0aGF0IG9ubHkgZGVjbGFyZSBwYXJjZWxhYmxlcyBvciBmbGF0dGVuYWJsZXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heSBub3QgZ28gaW4gdGhlIE1ha2VmaWxlLlxuIiwgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1c2VyX2RhdGFfdHlwZSopaXRlbXMpLT5rZXl3b3JkX3Rva2VuLmxpbmVubyk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgICpvbmx5UGFyY2VsYWJsZSA9IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkCi1nZW5lcmF0ZV9kZXBfZmlsZShjb25zdCBPcHRpb25zJiBvcHRpb25zLCBjb25zdCBkb2N1bWVudF9pdGVtX3R5cGUqIGl0ZW1zKQotewotICAgIC8qIHdlIG9wZW4gdGhlIGZpbGUgaW4gYmluYXJ5IG1vZGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNhbWUgb3V0cHV0IGlzCi0gICAgICogZ2VuZXJhdGVkIG9uIGFsbCBwbGF0Zm9ybXMgISEKLSAgICAgKi8KLSAgICBGSUxFKiB0byA9IE5VTEw7Ci0gICAgaWYgKG9wdGlvbnMuYXV0b0RlcEZpbGUpIHsKLSAgICAgICAgc3RyaW5nIGZpbGVOYW1lID0gb3B0aW9ucy5vdXRwdXRGaWxlTmFtZSArICIuZCI7Ci0gICAgICAgIHRvID0gZm9wZW4oZmlsZU5hbWUuY19zdHIoKSwgIndiIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdG8gPSBmb3BlbihvcHRpb25zLmRlcEZpbGVOYW1lLmNfc3RyKCksICJ3YiIpOwotICAgIH0KLQotICAgIGlmICh0byA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBzbGFzaCA9ICJcXCI7Ci0gICAgaW1wb3J0X2luZm8qIGltcG9ydCA9IGdfaW1wb3J0czsKLSAgICBpZiAoaW1wb3J0ID09IE5VTEwpIHsKLSAgICAgICAgc2xhc2ggPSAiIjsKLSAgICB9Ci0KLSAgICBpZiAoaXRlbXMtPml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9CSU5ERVIgfHwgaXRlbXMtPml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9SUEMpIHsKLSAgICAgICAgZnByaW50Zih0bywgIiVzOiBcXFxuIiwgb3B0aW9ucy5vdXRwdXRGaWxlTmFtZS5jX3N0cigpKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBwYXJjZWxhYmxlOiB0aGVyZSdzIG5vIG91dHB1dCBmaWxlLgotICAgICAgICBmcHJpbnRmKHRvLCAiIDogXFxcbiIpOwotICAgIH0KLSAgICBmcHJpbnRmKHRvLCAiICAlcyAlc1xuIiwgb3B0aW9ucy5pbnB1dEZpbGVOYW1lLmNfc3RyKCksIHNsYXNoKTsKLQotICAgIHdoaWxlIChpbXBvcnQpIHsKLSAgICAgICAgaWYgKGltcG9ydC0+bmV4dCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzbGFzaCA9ICIiOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbXBvcnQtPmZpbGVuYW1lKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHRvLCAiICAlcyAlc1xuIiwgaW1wb3J0LT5maWxlbmFtZSwgc2xhc2gpOwotICAgICAgICB9Ci0gICAgICAgIGltcG9ydCA9IGltcG9ydC0+bmV4dDsKLSAgICB9Ci0KLSAgICBmcHJpbnRmKHRvLCAiXG4iKTsKLQotICAgIC8vIE91dHB1dCAiPGltcG9ydGVkX2ZpbGU+OiAiIHNvIG1ha2Ugd29uJ3QgZmFpbCBpZiB0aGUgaW1wb3J0ZWQgZmlsZSBoYXMKLSAgICAvLyBiZWVuIGRlbGV0ZWQsIG1vdmVkIG9yIHJlbmFtZWQgaW4gaW5jcmVtZW50YWwgYnVpbGQuCi0gICAgaW1wb3J0ID0gZ19pbXBvcnRzOwotICAgIHdoaWxlIChpbXBvcnQpIHsKLSAgICAgICAgaWYgKGltcG9ydC0+ZmlsZW5hbWUpIHsKLSAgICAgICAgICAgIGZwcmludGYodG8sICIlcyA6XG4iLCBpbXBvcnQtPmZpbGVuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBpbXBvcnQgPSBpbXBvcnQtPm5leHQ7Ci0gICAgfQotCi0gICAgZmNsb3NlKHRvKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIHN0cmluZwotZ2VuZXJhdGVfb3V0cHV0RmlsZU5hbWUyKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IGJ1ZmZlcl90eXBlJiBuYW1lLCBjb25zdCBjaGFyKiBwYWNrYWdlKQotewotICAgIHN0cmluZyByZXN1bHQ7Ci0KLSAgICAvLyBjcmVhdGUgdGhlIHBhdGggdG8gdGhlIGRlc3RpbmF0aW9uIGZvbGRlciBiYXNlZCBvbiB0aGUKLSAgICAvLyBpbnRlcmZhY2UgcGFja2FnZSBuYW1lCi0gICAgcmVzdWx0ID0gb3B0aW9ucy5vdXRwdXRCYXNlRm9sZGVyOwotICAgIHJlc3VsdCArPSBPU19QQVRIX1NFUEFSQVRPUjsKLQotICAgIHN0cmluZyBwYWNrYWdlU3RyID0gcGFja2FnZTsKLSAgICBzaXplX3QgbGVuID0gcGFja2FnZVN0ci5sZW5ndGgoKTsKLSAgICBmb3IgKHNpemVfdCBpPTA7IGk8bGVuOyBpKyspIHsKLSAgICAgICAgaWYgKHBhY2thZ2VTdHJbaV0gPT0gJy4nKSB7Ci0gICAgICAgICAgICBwYWNrYWdlU3RyW2ldID0gT1NfUEFUSF9TRVBBUkFUT1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXN1bHQgKz0gcGFja2FnZVN0cjsKLQotICAgIC8vIGFkZCB0aGUgZmlsZW5hbWUgYnkgcmVwbGFjaW5nIHRoZSAuYWlkbCBleHRlbnNpb24gdG8gLmphdmEKLSAgICBjb25zdCBjaGFyKiBwID0gc3RyY2hyKG5hbWUuZGF0YSwgJy4nKTsKLSAgICBsZW4gPSBwID8gcC1uYW1lLmRhdGEgOiBzdHJsZW4obmFtZS5kYXRhKTsKLQotICAgIHJlc3VsdCArPSBPU19QQVRIX1NFUEFSQVRPUjsKLSAgICByZXN1bHQuYXBwZW5kKG5hbWUuZGF0YSwgbGVuKTsKLSAgICByZXN1bHQgKz0gIi5qYXZhIjsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBzdHJpbmcKLWdlbmVyYXRlX291dHB1dEZpbGVOYW1lKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IGRvY3VtZW50X2l0ZW1fdHlwZSogaXRlbXMpCi17Ci0gICAgLy8gaXRlbXMgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkIHRvIGhhdmUgb25seSBvbmUgaW50ZXJmYWNlLgotICAgIGlmIChpdGVtcy0+aXRlbV90eXBlID09IElOVEVSRkFDRV9UWVBFX0JJTkRFUiB8fCBpdGVtcy0+aXRlbV90eXBlID09IElOVEVSRkFDRV9UWVBFX1JQQykgewotICAgICAgICBpbnRlcmZhY2VfdHlwZSogdHlwZSA9IChpbnRlcmZhY2VfdHlwZSopaXRlbXM7Ci0KLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlX291dHB1dEZpbGVOYW1lMihvcHRpb25zLCB0eXBlLT5uYW1lLCB0eXBlLT5wYWNrYWdlKTsKLSAgICB9IGVsc2UgaWYgKGl0ZW1zLT5pdGVtX3R5cGUgPT0gVVNFUl9EQVRBX1RZUEUpIHsKLSAgICAgICAgdXNlcl9kYXRhX3R5cGUqIHR5cGUgPSAodXNlcl9kYXRhX3R5cGUqKWl0ZW1zOwotICAgICAgICByZXR1cm4gZ2VuZXJhdGVfb3V0cHV0RmlsZU5hbWUyKG9wdGlvbnMsIHR5cGUtPm5hbWUsIHR5cGUtPnBhY2thZ2UpOwotICAgIH0KLQotICAgIC8vIEkgZG9uJ3QgdGhpbmsgd2UgY2FuIGNvbWUgaGVyZSwgYnV0IHNhZmVyIHRoYW4gcmV0dXJuaW5nIE5VTEwuCi0gICAgc3RyaW5nIHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIHZvaWQKLWNoZWNrX291dHB1dEZpbGVQYXRoKGNvbnN0IHN0cmluZyYgcGF0aCkgewotICAgIHNpemVfdCBsZW4gPSBwYXRoLmxlbmd0aCgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxsZW4gOyBpKyspIHsKLSAgICAgICAgaWYgKHBhdGhbaV0gPT0gT1NfUEFUSF9TRVBBUkFUT1IpIHsKLSAgICAgICAgICAgIHN0cmluZyBwID0gcGF0aC5zdWJzdHIoMCwgaSk7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzKHBhdGguZGF0YSgpLCBGX09LKSAhPSAwKSB7Ci0jaWZkZWYgSEFWRV9NU19DX1JVTlRJTUUKLSAgICAgICAgICAgICAgICBfbWtkaXIocC5kYXRhKCkpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBta2RpcihwLmRhdGEoKSwgU19JUlVTUnxTX0lXVVNSfFNfSVhVU1J8U19JUkdSUHxTX0lYR1JQKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBpbnQKLXBhcnNlX3ByZXByb2Nlc3NlZF9maWxlKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpCi17Ci0gICAgaW50IGVycjsKLQotICAgIEZJTEUqIGYgPSBmb3BlbihmaWxlbmFtZS5jX3N0cigpLCAicmIiKTsKLSAgICBpZiAoZiA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDogY2FuJ3Qgb3BlbiBwcmVwcm9jZXNzZWQgZmlsZTogJXNcbiIsCi0gICAgICAgICAgICAgICAgZmlsZW5hbWUuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGludCBsaW5lbm8gPSAxOwotICAgIGNoYXIgbGluZVsxMDI0XTsKLSAgICBjaGFyIHR5cGVbMTAyNF07Ci0gICAgY2hhciBmdWxsbmFtZVsxMDI0XTsKLSAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkgewotICAgICAgICAvLyBza2lwIGNvbW1lbnRzIGFuZCBlbXB0eSBsaW5lcwotICAgICAgICBpZiAoIWxpbmVbMF0gfHwgc3RybmNtcChsaW5lLCAiLy8iLCAyKSA9PSAwKSB7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBzc2NhbmYobGluZSwgIiVzICVbXjsgXHJcblx0XTsiLCB0eXBlLCBmdWxsbmFtZSk7Ci0KLSAgICAgICAgY2hhciogcGFja2FnZW5hbWU7Ci0gICAgICAgIGNoYXIqIGNsYXNzbmFtZSA9IHJmaW5kKGZ1bGxuYW1lLCAnLicpOwotICAgICAgICBpZiAoY2xhc3NuYW1lICE9IE5VTEwpIHsKLSAgICAgICAgICAgICpjbGFzc25hbWUgPSAnXDAnOwotICAgICAgICAgICAgY2xhc3NuYW1lKys7Ci0gICAgICAgICAgICBwYWNrYWdlbmFtZSA9IGZ1bGxuYW1lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2xhc3NuYW1lID0gZnVsbG5hbWU7Ci0gICAgICAgICAgICBwYWNrYWdlbmFtZSA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAvL3ByaW50ZigiJXM6JWQ6Li4uJXMuLi4lcy4uLiVzLi4uXG4iLCBmaWxlbmFtZS5jX3N0cigpLCBsaW5lbm8sCi0gICAgICAgIC8vICAgICAgICB0eXBlLCBwYWNrYWdlbmFtZSwgY2xhc3NuYW1lKTsKLSAgICAgICAgZG9jdW1lbnRfaXRlbV90eXBlKiBkb2M7Ci0KLSAgICAgICAgaWYgKDAgPT0gc3RyY21wKCJwYXJjZWxhYmxlIiwgdHlwZSkpIHsKLSAgICAgICAgICAgIHVzZXJfZGF0YV90eXBlKiBwYXJjbCA9ICh1c2VyX2RhdGFfdHlwZSopbWFsbG9jKAotICAgICAgICAgICAgICAgICAgICBzaXplb2YodXNlcl9kYXRhX3R5cGUpKTsKLSAgICAgICAgICAgIG1lbXNldChwYXJjbCwgMCwgc2l6ZW9mKHVzZXJfZGF0YV90eXBlKSk7Ci0gICAgICAgICAgICBwYXJjbC0+ZG9jdW1lbnRfaXRlbS5pdGVtX3R5cGUgPSBVU0VSX0RBVEFfVFlQRTsKLSAgICAgICAgICAgIHBhcmNsLT5rZXl3b3JkX3Rva2VuLmxpbmVubyA9IGxpbmVubzsKLSAgICAgICAgICAgIHBhcmNsLT5rZXl3b3JkX3Rva2VuLmRhdGEgPSBzdHJkdXAodHlwZSk7Ci0gICAgICAgICAgICBwYXJjbC0+cGFja2FnZSA9IHBhY2thZ2VuYW1lID8gc3RyZHVwKHBhY2thZ2VuYW1lKSA6IE5VTEw7Ci0gICAgICAgICAgICBwYXJjbC0+bmFtZS5saW5lbm8gPSBsaW5lbm87Ci0gICAgICAgICAgICBwYXJjbC0+bmFtZS5kYXRhID0gc3RyZHVwKGNsYXNzbmFtZSk7Ci0gICAgICAgICAgICBwYXJjbC0+c2VtaWNvbG9uX3Rva2VuLmxpbmVubyA9IGxpbmVubzsKLSAgICAgICAgICAgIHBhcmNsLT5zZW1pY29sb25fdG9rZW4uZGF0YSA9IHN0cmR1cCgiOyIpOwotICAgICAgICAgICAgcGFyY2wtPmZsYXR0ZW5pbmdfbWV0aG9kcyA9IFBBUkNFTEFCTEVfREFUQTsKLSAgICAgICAgICAgIGRvYyA9IChkb2N1bWVudF9pdGVtX3R5cGUqKXBhcmNsOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKDAgPT0gc3RyY21wKCJmbGF0dGVuYWJsZSIsIHR5cGUpKSB7Ci0gICAgICAgICAgICB1c2VyX2RhdGFfdHlwZSogcGFyY2wgPSAodXNlcl9kYXRhX3R5cGUqKW1hbGxvYygKLSAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVzZXJfZGF0YV90eXBlKSk7Ci0gICAgICAgICAgICBtZW1zZXQocGFyY2wsIDAsIHNpemVvZih1c2VyX2RhdGFfdHlwZSkpOwotICAgICAgICAgICAgcGFyY2wtPmRvY3VtZW50X2l0ZW0uaXRlbV90eXBlID0gVVNFUl9EQVRBX1RZUEU7Ci0gICAgICAgICAgICBwYXJjbC0+a2V5d29yZF90b2tlbi5saW5lbm8gPSBsaW5lbm87Ci0gICAgICAgICAgICBwYXJjbC0+a2V5d29yZF90b2tlbi5kYXRhID0gc3RyZHVwKHR5cGUpOwotICAgICAgICAgICAgcGFyY2wtPnBhY2thZ2UgPSBwYWNrYWdlbmFtZSA/IHN0cmR1cChwYWNrYWdlbmFtZSkgOiBOVUxMOwotICAgICAgICAgICAgcGFyY2wtPm5hbWUubGluZW5vID0gbGluZW5vOwotICAgICAgICAgICAgcGFyY2wtPm5hbWUuZGF0YSA9IHN0cmR1cChjbGFzc25hbWUpOwotICAgICAgICAgICAgcGFyY2wtPnNlbWljb2xvbl90b2tlbi5saW5lbm8gPSBsaW5lbm87Ci0gICAgICAgICAgICBwYXJjbC0+c2VtaWNvbG9uX3Rva2VuLmRhdGEgPSBzdHJkdXAoIjsiKTsKLSAgICAgICAgICAgIHBhcmNsLT5mbGF0dGVuaW5nX21ldGhvZHMgPSBSUENfREFUQTsKLSAgICAgICAgICAgIGRvYyA9IChkb2N1bWVudF9pdGVtX3R5cGUqKXBhcmNsOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKDAgPT0gc3RyY21wKCJpbnRlcmZhY2UiLCB0eXBlKSkgewotICAgICAgICAgICAgaW50ZXJmYWNlX3R5cGUqIGlmYWNlID0gKGludGVyZmFjZV90eXBlKiltYWxsb2MoCi0gICAgICAgICAgICAgICAgICAgIHNpemVvZihpbnRlcmZhY2VfdHlwZSkpOwotICAgICAgICAgICAgbWVtc2V0KGlmYWNlLCAwLCBzaXplb2YoaW50ZXJmYWNlX3R5cGUpKTsKLSAgICAgICAgICAgIGlmYWNlLT5kb2N1bWVudF9pdGVtLml0ZW1fdHlwZSA9IElOVEVSRkFDRV9UWVBFX0JJTkRFUjsKLSAgICAgICAgICAgIGlmYWNlLT5pbnRlcmZhY2VfdG9rZW4ubGluZW5vID0gbGluZW5vOwotICAgICAgICAgICAgaWZhY2UtPmludGVyZmFjZV90b2tlbi5kYXRhID0gc3RyZHVwKHR5cGUpOwotICAgICAgICAgICAgaWZhY2UtPnBhY2thZ2UgPSBwYWNrYWdlbmFtZSA/IHN0cmR1cChwYWNrYWdlbmFtZSkgOiBOVUxMOwotICAgICAgICAgICAgaWZhY2UtPm5hbWUubGluZW5vID0gbGluZW5vOwotICAgICAgICAgICAgaWZhY2UtPm5hbWUuZGF0YSA9IHN0cmR1cChjbGFzc25hbWUpOwotICAgICAgICAgICAgaWZhY2UtPm9wZW5fYnJhY2VfdG9rZW4ubGluZW5vID0gbGluZW5vOwotICAgICAgICAgICAgaWZhY2UtPm9wZW5fYnJhY2VfdG9rZW4uZGF0YSA9IHN0cmR1cCgieyIpOwotICAgICAgICAgICAgaWZhY2UtPmNsb3NlX2JyYWNlX3Rva2VuLmxpbmVubyA9IGxpbmVubzsKLSAgICAgICAgICAgIGlmYWNlLT5jbG9zZV9icmFjZV90b2tlbi5kYXRhID0gc3RyZHVwKCJ9Iik7Ci0gICAgICAgICAgICBkb2MgPSAoZG9jdW1lbnRfaXRlbV90eXBlKilpZmFjZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGJhZCB0eXBlIGluIGxpbmU6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZS5jX3N0cigpLCBsaW5lbm8sIGxpbmUpOwotICAgICAgICAgICAgZmNsb3NlKGYpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgZXJyID0gZ2F0aGVyX3R5cGVzKGZpbGVuYW1lLmNfc3RyKCksIGRvYyk7Ci0gICAgICAgIGxpbmVubysrOwotICAgIH0KLQotICAgIGlmICghZmVvZihmKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBlcnJvciByZWFkaW5nIGZpbGUsIGxpbmUgdG8gbG9uZy5cbiIsCi0gICAgICAgICAgICAgICAgZmlsZW5hbWUuY19zdHIoKSwgbGluZW5vKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgZmNsb3NlKGYpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1jaGVja19hbmRfYXNzaWduX21ldGhvZF9pZHMoY29uc3QgY2hhciAqIGZpbGVuYW1lLCBpbnRlcmZhY2VfaXRlbV90eXBlKiBmaXJzdF9pdGVtKQotewotICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBtZXRob2RzIHdpdGggbWFudWFsbHkgYXNzaWduZWQgaWQncyBhbmQgYW55IHRoYXQgYXJlIG5vdC4KLSAgICAvLyBFaXRoZXIgYWxsIG1ldGhvZCBpZCdzIG11c3QgYmUgbWFudWFsbHkgYXNzaWduZWQgb3IgYWxsIG9mIHRoZW0gbXVzdCBub3QuCi0gICAgLy8gQWxzbywgY2hlY2sgZm9yIGR1cGxpY2F0ZXMgb2YgdXNlciBzZXQgaWQncyBhbmQgdGhhdCB0aGUgaWQncyBhcmUgd2l0aGluIHRoZSBwcm9wZXIgYm91bmRzLgotICAgIHNldDxpbnQ+IHVzZWRJZHM7Ci0gICAgaW50ZXJmYWNlX2l0ZW1fdHlwZSogaXRlbSA9IGZpcnN0X2l0ZW07Ci0gICAgYm9vbCBoYXNVbmFzc2lnbmVkSWRzID0gZmFsc2U7Ci0gICAgYm9vbCBoYXNBc3NpZ25lZElkcyA9IGZhbHNlOwotICAgIHdoaWxlIChpdGVtICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKGl0ZW0tPml0ZW1fdHlwZSA9PSBNRVRIT0RfVFlQRSkgewotICAgICAgICAgICAgbWV0aG9kX3R5cGUqIG1ldGhvZF9pdGVtID0gKG1ldGhvZF90eXBlKilpdGVtOwotICAgICAgICAgICAgaWYgKG1ldGhvZF9pdGVtLT5oYXNJZCkgewotICAgICAgICAgICAgICAgIGhhc0Fzc2lnbmVkSWRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBtZXRob2RfaXRlbS0+YXNzaWduZWRfaWQgPSBhdG9pKG1ldGhvZF9pdGVtLT5pZC5kYXRhKTsKLSAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgdXNlciBzZXQgaWQgaXMgbm90IGR1cGxpY2F0ZWQuCi0gICAgICAgICAgICAgICAgaWYgKHVzZWRJZHMuZmluZChtZXRob2RfaXRlbS0+YXNzaWduZWRfaWQpICE9IHVzZWRJZHMuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBkdXBsaWNhdGUgaWQsIHNvIHRocm93IGFuIGVycm9yLgotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6JWQgRm91bmQgZHVwbGljYXRlIG1ldGhvZCBpZCAoJWQpIGZvciBtZXRob2Q6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBtZXRob2RfaXRlbS0+aWQubGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9pdGVtLT5hc3NpZ25lZF9pZCwgbWV0aG9kX2l0ZW0tPm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgdXNlciBzZXQgaWQgaXMgd2l0aGluIHRoZSBhcHByb3ByaWF0ZSBsaW1pdHMKLSAgICAgICAgICAgICAgICBpZiAobWV0aG9kX2l0ZW0tPmFzc2lnbmVkX2lkIDwgTUlOX1VTRVJfU0VUX01FVEhPRF9JRCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2l0ZW0tPmFzc2lnbmVkX2lkID4gTUFYX1VTRVJfU0VUX01FVEhPRF9JRCkgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIEZvdW5kIG91dCBvZiBib3VuZHMgaWQgKCVkKSBmb3IgbWV0aG9kOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbWV0aG9kX2l0ZW0tPmlkLmxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfaXRlbS0+YXNzaWduZWRfaWQsIG1ldGhvZF9pdGVtLT5uYW1lLmRhdGEpOwotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICBWYWx1ZSBmb3IgaWQgbXVzdCBiZSBiZXR3ZWVuICVkIGFuZCAlZCBpbmNsdXNpdmUuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTl9VU0VSX1NFVF9NRVRIT0RfSUQsIE1BWF9VU0VSX1NFVF9NRVRIT0RfSUQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdXNlZElkcy5pbnNlcnQobWV0aG9kX2l0ZW0tPmFzc2lnbmVkX2lkKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGFzVW5hc3NpZ25lZElkcyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzQXNzaWduZWRJZHMgJiYgaGFzVW5hc3NpZ25lZElkcykgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBZb3UgbXVzdCBlaXRoZXIgYXNzaWduIGlkJ3MgdG8gYWxsIG1ldGhvZHMgb3IgdG8gbm9uZSBvZiB0aGVtLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpdGVtID0gaXRlbS0+bmV4dDsKLSAgICB9Ci0KLSAgICAvLyBJbiB0aGUgY2FzZSB0aGF0IGFsbCBtZXRob2RzIGhhdmUgdW5hc3NpZ25lZCBpZCdzLCBzZXQgYSB1bmlxdWUgaWQgZm9yIHRoZW0uCi0gICAgaWYgKGhhc1VuYXNzaWduZWRJZHMpIHsKLSAgICAgICAgaW50IG5ld0lkID0gMDsKLSAgICAgICAgaXRlbSA9IGZpcnN0X2l0ZW07Ci0gICAgICAgIHdoaWxlIChpdGVtICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChpdGVtLT5pdGVtX3R5cGUgPT0gTUVUSE9EX1RZUEUpIHsKLSAgICAgICAgICAgICAgICBtZXRob2RfdHlwZSogbWV0aG9kX2l0ZW0gPSAobWV0aG9kX3R5cGUqKWl0ZW07Ci0gICAgICAgICAgICAgICAgbWV0aG9kX2l0ZW0tPmFzc2lnbmVkX2lkID0gbmV3SWQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGl0ZW0gPSBpdGVtLT5uZXh0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gc3VjY2VzcwotICAgIHJldHVybiAwOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgaW50Ci1jb21waWxlX2FpZGwoT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbnQgZXJyID0gMCwgTjsKLQotICAgIHNldF9pbXBvcnRfcGF0aHMob3B0aW9ucy5pbXBvcnRQYXRocyk7Ci0KLSAgICByZWdpc3Rlcl9iYXNlX3R5cGVzKCk7Ci0KLSAgICAvLyBpbXBvcnQgdGhlIHByZXByb2Nlc3NlZCBmaWxlCi0gICAgTiA9IG9wdGlvbnMucHJlcHJvY2Vzc2VkRmlsZXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgY29uc3Qgc3RyaW5nJiBzID0gb3B0aW9ucy5wcmVwcm9jZXNzZWRGaWxlc1tpXTsKLSAgICAgICAgZXJyIHw9IHBhcnNlX3ByZXByb2Nlc3NlZF9maWxlKHMpOwotICAgIH0KLSAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICAvLyBwYXJzZSB0aGUgbWFpbiBmaWxlCi0gICAgZ19jYWxsYmFja3MgPSAmZ19tYWluQ2FsbGJhY2tzOwotICAgIGVyciA9IHBhcnNlX2FpZGwob3B0aW9ucy5pbnB1dEZpbGVOYW1lLmNfc3RyKCkpOwotICAgIGRvY3VtZW50X2l0ZW1fdHlwZSogbWFpbkRvYyA9IGdfZG9jdW1lbnQ7Ci0gICAgZ19kb2N1bWVudCA9IE5VTEw7Ci0KLSAgICAvLyBwYXJzZSB0aGUgaW1wb3J0cwotICAgIGdfY2FsbGJhY2tzID0gJmdfbWFpbkNhbGxiYWNrczsKLSAgICBpbXBvcnRfaW5mbyogaW1wb3J0ID0gZ19pbXBvcnRzOwotICAgIHdoaWxlIChpbXBvcnQpIHsKLSAgICAgICAgaWYgKE5BTUVTLkZpbmQoaW1wb3J0LT5uZWVkZWRDbGFzcykgPT0gTlVMTCkgewotICAgICAgICAgICAgaW1wb3J0LT5maWxlbmFtZSA9IGZpbmRfaW1wb3J0X2ZpbGUoaW1wb3J0LT5uZWVkZWRDbGFzcyk7Ci0gICAgICAgICAgICBpZiAoIWltcG9ydC0+ZmlsZW5hbWUpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBjb3VsZG4ndCBmaW5kIGltcG9ydCBmb3IgY2xhc3MgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQtPmZyb20sIGltcG9ydC0+c3RhdGVtZW50LmxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydC0+bmVlZGVkQ2xhc3MpOwotICAgICAgICAgICAgICAgIGVyciB8PSAxOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlcnIgfD0gcGFyc2VfYWlkbChpbXBvcnQtPmZpbGVuYW1lKTsKLSAgICAgICAgICAgICAgICBpbXBvcnQtPmRvYyA9IGdfZG9jdW1lbnQ7Ci0gICAgICAgICAgICAgICAgaWYgKGltcG9ydC0+ZG9jID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZXJyIHw9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGltcG9ydCA9IGltcG9ydC0+bmV4dDsKLSAgICB9Ci0gICAgLy8gYmFpbCBvdXQgbm93IGlmIHBhcnNpbmcgd2Fzbid0IHN1Y2Nlc3NmdWwKLSAgICBpZiAoZXJyICE9IDAgfHwgbWFpbkRvYyA9PSBOVUxMKSB7Ci0gICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJhaWRsOiBwYXJzaW5nIGZhaWxlZCwgc3RvcHBpbmcuXG4iKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgLy8gY29tcGxhaW4gYWJvdXQgb25lcyB0aGF0IGFyZW4ndCBpbiB0aGUgcmlnaHQgZmlsZXMKLSAgICBlcnIgfD0gY2hlY2tfZmlsZW5hbWVzKG9wdGlvbnMuaW5wdXRGaWxlTmFtZS5jX3N0cigpLCBtYWluRG9jKTsKLSAgICBpbXBvcnQgPSBnX2ltcG9ydHM7Ci0gICAgd2hpbGUgKGltcG9ydCkgewotICAgICAgICBlcnIgfD0gY2hlY2tfZmlsZW5hbWVzKGltcG9ydC0+ZmlsZW5hbWUsIGltcG9ydC0+ZG9jKTsKLSAgICAgICAgaW1wb3J0ID0gaW1wb3J0LT5uZXh0OwotICAgIH0KLQotICAgIC8vIGdhdGhlciB0aGUgdHlwZXMgdGhhdCBoYXZlIGJlZW4gZGVjbGFyZWQKLSAgICBlcnIgfD0gZ2F0aGVyX3R5cGVzKG9wdGlvbnMuaW5wdXRGaWxlTmFtZS5jX3N0cigpLCBtYWluRG9jKTsKLSAgICBpbXBvcnQgPSBnX2ltcG9ydHM7Ci0gICAgd2hpbGUgKGltcG9ydCkgewotICAgICAgICBlcnIgfD0gZ2F0aGVyX3R5cGVzKGltcG9ydC0+ZmlsZW5hbWUsIGltcG9ydC0+ZG9jKTsKLSAgICAgICAgaW1wb3J0ID0gaW1wb3J0LT5uZXh0OwotICAgIH0KLQotI2lmIDAKLSAgICBwcmludGYoIi0tLS0gbWFpbiBkb2MgLS0tLVxuIik7Ci0gICAgdGVzdF9kb2N1bWVudChtYWluRG9jKTsKLQotICAgIGltcG9ydCA9IGdfaW1wb3J0czsKLSAgICB3aGlsZSAoaW1wb3J0KSB7Ci0gICAgICAgIHByaW50ZigiLS0tLSBpbXBvcnQgZG9jIC0tLS1cbiIpOwotICAgICAgICB0ZXN0X2RvY3VtZW50KGltcG9ydC0+ZG9jKTsKLSAgICAgICAgaW1wb3J0ID0gaW1wb3J0LT5uZXh0OwotICAgIH0KLSAgICBOQU1FUy5EdW1wKCk7Ci0jZW5kaWYKLQotICAgIC8vIGNoZWNrIHRoZSByZWZlcmVuY2VkIHR5cGVzIGluIG1haW5Eb2MgdG8gbWFrZSBzdXJlIHdlJ3ZlIGltcG9ydGVkIHRoZW0KLSAgICBlcnIgfD0gY2hlY2tfdHlwZXMob3B0aW9ucy5pbnB1dEZpbGVOYW1lLmNfc3RyKCksIG1haW5Eb2MpOwotCi0gICAgLy8gZmluYWxseSwgdGhlcmUgcmVhbGx5IG9ubHkgbmVlZHMgdG8gYmUgb25lIHRoaW5nIGluIG1haW5Eb2MsIGFuZCBpdAotICAgIC8vIG5lZWRzIHRvIGJlIGFuIGludGVyZmFjZS4KLSAgICBib29sIG9ubHlQYXJjZWxhYmxlID0gZmFsc2U7Ci0gICAgZXJyIHw9IGV4YWN0bHlfb25lX2ludGVyZmFjZShvcHRpb25zLmlucHV0RmlsZU5hbWUuY19zdHIoKSwgbWFpbkRvYywgb3B0aW9ucywgJm9ubHlQYXJjZWxhYmxlKTsKLQotICAgIC8vIElmIHRoaXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIGRlZmluaXRpb24sIHRoZW4gYXNzaWduIG1ldGhvZCBpZHMgYW5kIHZhbGlkYXRlLgotICAgIGlmICghb25seVBhcmNlbGFibGUpIHsKLSAgICAgICAgZXJyIHw9IGNoZWNrX2FuZF9hc3NpZ25fbWV0aG9kX2lkcyhvcHRpb25zLmlucHV0RmlsZU5hbWUuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAoKGludGVyZmFjZV90eXBlKiltYWluRG9jKS0+aW50ZXJmYWNlX2l0ZW1zKTsKLSAgICB9Ci0KLSAgICAvLyBhZnRlciB0aGlzLCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IG1vcmUgZXJyb3JzIGJlY2F1c2Ugb2YgdGhlCi0gICAgLy8gaW5wdXQuCi0gICAgaWYgKGVyciAhPSAwIHx8IG1haW5Eb2MgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvLyBpZiBuZWVkZWQsIGdlbmVyYXRlIHRoZSBvdXRwdXRGaWxlTmFtZSBmcm9tIHRoZSBvdXRwdXRCYXNlRm9sZGVyCi0gICAgaWYgKG9wdGlvbnMub3V0cHV0RmlsZU5hbWUubGVuZ3RoKCkgPT0gMCAmJgotICAgICAgICAgICAgb3B0aW9ucy5vdXRwdXRCYXNlRm9sZGVyLmxlbmd0aCgpID4gMCkgewotICAgICAgICBvcHRpb25zLm91dHB1dEZpbGVOYW1lID0gZ2VuZXJhdGVfb3V0cHV0RmlsZU5hbWUob3B0aW9ucywgbWFpbkRvYyk7Ci0gICAgfQotCi0gICAgLy8gaWYgd2Ugd2VyZSBhc2tlZCB0bywgZ2VuZXJhdGUgYSBtYWtlIGRlcGVuZGVuY3kgZmlsZQotICAgIC8vIHVubGVzcyBpdCdzIGEgcGFyY2VsYWJsZSAqYW5kKiBpdCdzIHN1cHBvc2VkIHRvIGZhaWwgb24gcGFyY2VsYWJsZQotICAgIGlmICgob3B0aW9ucy5hdXRvRGVwRmlsZSB8fCBvcHRpb25zLmRlcEZpbGVOYW1lICE9ICIiKSAmJgotICAgICAgICAgICAgIShvbmx5UGFyY2VsYWJsZSAmJiBvcHRpb25zLmZhaWxPblBhcmNlbGFibGUpKSB7Ci0gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgZm9sZGVycyBvZiB0aGUgb3V0cHV0IGZpbGUgYWxsIGV4aXN0cwotICAgICAgICBjaGVja19vdXRwdXRGaWxlUGF0aChvcHRpb25zLm91dHB1dEZpbGVOYW1lKTsKLSAgICAgICAgZ2VuZXJhdGVfZGVwX2ZpbGUob3B0aW9ucywgbWFpbkRvYyk7Ci0gICAgfQotCi0gICAgLy8gdGhleSBkaWRuJ3QgYXNrIHRvIGZhaWwgb24gcGFyY2VsYWJsZXMsIHNvIGp1c3QgZXhpdCBxdWlldGx5LgotICAgIGlmIChvbmx5UGFyY2VsYWJsZSAmJiAhb3B0aW9ucy5mYWlsT25QYXJjZWxhYmxlKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIG1ha2Ugc3VyZSB0aGUgZm9sZGVycyBvZiB0aGUgb3V0cHV0IGZpbGUgYWxsIGV4aXN0cwotICAgIGNoZWNrX291dHB1dEZpbGVQYXRoKG9wdGlvbnMub3V0cHV0RmlsZU5hbWUpOwotCi0gICAgZXJyID0gZ2VuZXJhdGVfamF2YShvcHRpb25zLm91dHB1dEZpbGVOYW1lLCBvcHRpb25zLmlucHV0RmlsZU5hbWUuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChpbnRlcmZhY2VfdHlwZSopbWFpbkRvYyk7Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50Ci1wcmVwcm9jZXNzX2FpZGwoY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICB2ZWN0b3I8c3RyaW5nPiBsaW5lczsKLSAgICBpbnQgZXJyOwotCi0gICAgLy8gcmVhZCBmaWxlcwotICAgIGludCBOID0gb3B0aW9ucy5maWxlc1RvUHJlcHJvY2Vzcy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICBnX2NhbGxiYWNrcyA9ICZnX21haW5DYWxsYmFja3M7Ci0gICAgICAgIGVyciA9IHBhcnNlX2FpZGwob3B0aW9ucy5maWxlc1RvUHJlcHJvY2Vzc1tpXS5jX3N0cigpKTsKLSAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgICAgIGRvY3VtZW50X2l0ZW1fdHlwZSogZG9jID0gZ19kb2N1bWVudDsKLSAgICAgICAgc3RyaW5nIGxpbmU7Ci0gICAgICAgIGlmIChkb2MtPml0ZW1fdHlwZSA9PSBVU0VSX0RBVEFfVFlQRSkgewotICAgICAgICAgICAgdXNlcl9kYXRhX3R5cGUqIHBhcmNlbGFibGUgPSAodXNlcl9kYXRhX3R5cGUqKWRvYzsKLSAgICAgICAgICAgIGlmICgocGFyY2VsYWJsZS0+ZmxhdHRlbmluZ19tZXRob2RzICYgUEFSQ0VMQUJMRV9EQVRBKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgbGluZSA9ICJwYXJjZWxhYmxlICI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHBhcmNlbGFibGUtPmZsYXR0ZW5pbmdfbWV0aG9kcyAmIFJQQ19EQVRBKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgbGluZSA9ICJmbGF0dGVuYWJsZSAiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBhcmNlbGFibGUtPnBhY2thZ2UpIHsKLSAgICAgICAgICAgICAgICBsaW5lICs9IHBhcmNlbGFibGUtPnBhY2thZ2U7Ci0gICAgICAgICAgICAgICAgbGluZSArPSAnLic7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lICs9IHBhcmNlbGFibGUtPm5hbWUuZGF0YTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxpbmUgPSAiaW50ZXJmYWNlICI7Ci0gICAgICAgICAgICBpbnRlcmZhY2VfdHlwZSogaWZhY2UgPSAoaW50ZXJmYWNlX3R5cGUqKWRvYzsKLSAgICAgICAgICAgIGlmIChpZmFjZS0+cGFja2FnZSkgewotICAgICAgICAgICAgICAgIGxpbmUgKz0gaWZhY2UtPnBhY2thZ2U7Ci0gICAgICAgICAgICAgICAgbGluZSArPSAnLic7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lICs9IGlmYWNlLT5uYW1lLmRhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgbGluZSArPSAiO1xuIjsKLSAgICAgICAgbGluZXMucHVzaF9iYWNrKGxpbmUpOwotICAgIH0KLQotICAgIC8vIHdyaXRlIHByZXByb2Nlc3NlZCBmaWxlCi0gICAgaW50IGZkID0gb3Blbiggb3B0aW9ucy5vdXRwdXRGaWxlTmFtZS5jX3N0cigpLAotICAgICAgICAgICAgICAgICAgIE9fUkRXUnxPX0NSRUFUfE9fVFJVTkN8T19CSU5BUlksCi0jaWZkZWYgSEFWRV9NU19DX1JVTlRJTUUKLSAgICAgICAgICAgICAgICAgICBfU19JUkVBRHxfU19JV1JJVEUpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICBTX0lSVVNSfFNfSVdVU1J8U19JUkdSUCk7Ci0jZW5kaWYKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJhaWRsOiBjb3VsZCBub3Qgb3BlbiBmaWxlIGZvciB3cml0ZTogJXNcbiIsCi0gICAgICAgICAgICAgICAgb3B0aW9ucy5vdXRwdXRGaWxlTmFtZS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgTiA9IGxpbmVzLnNpemUoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IHN0cmluZyYgcyA9IGxpbmVzW2ldOwotICAgICAgICBpbnQgbGVuID0gcy5sZW5ndGgoKTsKLSAgICAgICAgaWYgKGxlbiAhPSB3cml0ZShmZCwgcy5jX3N0cigpLCBsZW4pKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6IGVycm9yIHdyaXRpbmcgdG8gZmlsZSAlc1xuIiwKLSAgICAgICAgICAgICAgICBvcHRpb25zLm91dHB1dEZpbGVOYW1lLmNfc3RyKCkpOwotICAgICAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICAgICAgdW5saW5rKG9wdGlvbnMub3V0cHV0RmlsZU5hbWUuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsb3NlKGZkKTsKLSAgICByZXR1cm4gMDsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotaW50Ci1tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKLXsKLSAgICBPcHRpb25zIG9wdGlvbnM7Ci0gICAgaW50IHJlc3VsdCA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgJm9wdGlvbnMpOwotICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG9wdGlvbnMudGFzaykKLSAgICB7Ci0gICAgICAgIGNhc2UgQ09NUElMRV9BSURMOgotICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVfYWlkbChvcHRpb25zKTsKLSAgICAgICAgY2FzZSBQUkVQUk9DRVNTX0FJREw6Ci0gICAgICAgICAgICByZXR1cm4gcHJlcHJvY2Vzc19haWRsKG9wdGlvbnMpOwotICAgIH0KLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6IGludGVybmFsIGVycm9yXG4iKTsKLSAgICByZXR1cm4gMTsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FpZGwvYWlkbF9sYW5ndWFnZS5jcHAgYi90b29scy9haWRsL2FpZGxfbGFuZ3VhZ2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDZhM2JkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FpZGwvYWlkbF9sYW5ndWFnZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jaW5jbHVkZSAiYWlkbF9sYW5ndWFnZS5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpZmRlZiBIQVZFX01TX0NfUlVOVElNRQotaW50IGlzYXR0eShpbnQgIGZkKQotewotICAgIHJldHVybiAoZmQgPT0gMCk7Ci19Ci0jZW5kaWYKLQotI2lmIDAKLVBhcnNlckNhbGxiYWNrcyBrX3BhcnNlckNhbGxiYWNrcyA9IHsKLSAgICBOVUxMCi19OwotI2VuZGlmCi0KLVBhcnNlckNhbGxiYWNrcyogZ19jYWxsYmFja3MgPSBOVUxMOyAvLyAma19wYXJzZXJDYWxsYmFja3M7Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FpZGwvYWlkbF9sYW5ndWFnZS5oIGIvdG9vbHMvYWlkbC9haWRsX2xhbmd1YWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMTM3MGMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9haWRsX2xhbmd1YWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotI2lmbmRlZiBERVZJQ0VfVE9PTFNfQUlETF9BSURMX0xBTkdVQUdFX0gKLSNkZWZpbmUgREVWSUNFX1RPT0xTX0FJRExfQUlETF9MQU5HVUFHRV9ICi0KLQotdHlwZWRlZiBlbnVtIHsKLSAgICBOT19FWFRSQV9URVhUID0gMCwKLSAgICBTSE9SVF9DT01NRU5ULAotICAgIExPTkdfQ09NTUVOVCwKLSAgICBDT1BZX1RFWFQsCi0gICAgV0hJVEVTUEFDRQotfSB3aGljaF9leHRyYV90ZXh0OwotCi10eXBlZGVmIHN0cnVjdCBleHRyYV90ZXh0X3R5cGUgewotICAgIHVuc2lnbmVkIGxpbmVubzsKLSAgICB3aGljaF9leHRyYV90ZXh0IHdoaWNoOwotICAgIGNoYXIqIGRhdGE7IAotICAgIHVuc2lnbmVkIGxlbjsKLSAgICBzdHJ1Y3QgZXh0cmFfdGV4dF90eXBlKiBuZXh0OwotfSBleHRyYV90ZXh0X3R5cGU7Ci0KLXR5cGVkZWYgc3RydWN0IGJ1ZmZlcl90eXBlIHsKLSAgICB1bnNpZ25lZCBsaW5lbm87Ci0gICAgdW5zaWduZWQgdG9rZW47Ci0gICAgY2hhciAqZGF0YTsKLSAgICBleHRyYV90ZXh0X3R5cGUqIGV4dHJhOwotfSBidWZmZXJfdHlwZTsKLQotdHlwZWRlZiBzdHJ1Y3QgdHlwZV90eXBlIHsKLSAgICBidWZmZXJfdHlwZSB0eXBlOwotICAgIGJ1ZmZlcl90eXBlIGFycmF5X3Rva2VuOwotICAgIGludCBkaW1lbnNpb247Ci19IHR5cGVfdHlwZTsKLQotdHlwZWRlZiBzdHJ1Y3QgYXJnX3R5cGUgewotICAgIGJ1ZmZlcl90eXBlIGNvbW1hX3Rva2VuOyAvLyBlbXB0eSBpbiB0aGUgZmlyc3Qgb25lIGluIHRoZSBsaXN0Ci0gICAgYnVmZmVyX3R5cGUgZGlyZWN0aW9uOwotICAgIHR5cGVfdHlwZSB0eXBlOwotICAgIGJ1ZmZlcl90eXBlIG5hbWU7Ci0gICAgc3RydWN0IGFyZ190eXBlICpuZXh0OwotfSBhcmdfdHlwZTsKLQotZW51bSB7Ci0gICAgTUVUSE9EX1RZUEUKLX07Ci0KLXR5cGVkZWYgc3RydWN0IGludGVyZmFjZV9pdGVtX3R5cGUgewotICAgIHVuc2lnbmVkIGl0ZW1fdHlwZTsKLSAgICBzdHJ1Y3QgaW50ZXJmYWNlX2l0ZW1fdHlwZSogbmV4dDsKLX0gaW50ZXJmYWNlX2l0ZW1fdHlwZTsKLQotdHlwZWRlZiBzdHJ1Y3QgbWV0aG9kX3R5cGUgewotICAgIGludGVyZmFjZV9pdGVtX3R5cGUgaW50ZXJmYWNlX2l0ZW07Ci0gICAgdHlwZV90eXBlIHR5cGU7Ci0gICAgYm9vbCBvbmV3YXk7Ci0gICAgYnVmZmVyX3R5cGUgb25ld2F5X3Rva2VuOwotICAgIGJ1ZmZlcl90eXBlIG5hbWU7Ci0gICAgYnVmZmVyX3R5cGUgb3Blbl9wYXJlbl90b2tlbjsKLSAgICBhcmdfdHlwZSogYXJnczsKLSAgICBidWZmZXJfdHlwZSBjbG9zZV9wYXJlbl90b2tlbjsKLSAgICBib29sIGhhc0lkOwotICAgIGJ1ZmZlcl90eXBlIGVxdWFsc190b2tlbjsKLSAgICBidWZmZXJfdHlwZSBpZDsKLSAgICAvLyBYWFggbWlzc2luZyBjb21tZW50cy9jb3B5IHRleHQgaGVyZQotICAgIGJ1ZmZlcl90eXBlIHNlbWljb2xvbl90b2tlbjsKLSAgICBidWZmZXJfdHlwZSogY29tbWVudHNfdG9rZW47IC8vIHBvaW50cyBpbnRvIHRoaXMgc3RydWN0dXJlLCBETyBOT1QgREVMRVRFCi0gICAgaW50IGFzc2lnbmVkX2lkOwotfSBtZXRob2RfdHlwZTsKLQotZW51bSB7Ci0gICAgVVNFUl9EQVRBX1RZUEUgPSAxMiwKLSAgICBJTlRFUkZBQ0VfVFlQRV9CSU5ERVIsCi0gICAgSU5URVJGQUNFX1RZUEVfUlBDCi19OwotCi10eXBlZGVmIHN0cnVjdCBkb2N1bWVudF9pdGVtX3R5cGUgewotICAgIHVuc2lnbmVkIGl0ZW1fdHlwZTsKLSAgICBzdHJ1Y3QgZG9jdW1lbnRfaXRlbV90eXBlKiBuZXh0OwotfSBkb2N1bWVudF9pdGVtX3R5cGU7Ci0KLQotLy8gZm9yIHVzZXJfZGF0YV90eXBlLmZsYXR0ZW5pbmdfbWV0aG9kcwotZW51bSB7Ci0gICAgUEFSQ0VMQUJMRV9EQVRBID0gMHgxLAotICAgIFJQQ19EQVRBID0gMHgyCi19OwotCi10eXBlZGVmIHN0cnVjdCB1c2VyX2RhdGFfdHlwZSB7Ci0gICAgZG9jdW1lbnRfaXRlbV90eXBlIGRvY3VtZW50X2l0ZW07Ci0gICAgYnVmZmVyX3R5cGUga2V5d29yZF90b2tlbjsgLy8gb25seSB0aGUgZmlyc3Qgb25lCi0gICAgY2hhciogcGFja2FnZTsKLSAgICBidWZmZXJfdHlwZSBuYW1lOwotICAgIGJ1ZmZlcl90eXBlIHNlbWljb2xvbl90b2tlbjsKLSAgICBpbnQgZmxhdHRlbmluZ19tZXRob2RzOwotfSB1c2VyX2RhdGFfdHlwZTsKLQotdHlwZWRlZiBzdHJ1Y3QgaW50ZXJmYWNlX3R5cGUgewotICAgIGRvY3VtZW50X2l0ZW1fdHlwZSBkb2N1bWVudF9pdGVtOwotICAgIGJ1ZmZlcl90eXBlIGludGVyZmFjZV90b2tlbjsKLSAgICBib29sIG9uZXdheTsKLSAgICBidWZmZXJfdHlwZSBvbmV3YXlfdG9rZW47Ci0gICAgY2hhciogcGFja2FnZTsKLSAgICBidWZmZXJfdHlwZSBuYW1lOwotICAgIGJ1ZmZlcl90eXBlIG9wZW5fYnJhY2VfdG9rZW47Ci0gICAgaW50ZXJmYWNlX2l0ZW1fdHlwZSogaW50ZXJmYWNlX2l0ZW1zOwotICAgIGJ1ZmZlcl90eXBlIGNsb3NlX2JyYWNlX3Rva2VuOwotICAgIGJ1ZmZlcl90eXBlKiBjb21tZW50c190b2tlbjsgLy8gcG9pbnRzIGludG8gdGhpcyBzdHJ1Y3R1cmUsIERPIE5PVCBERUxFVEUKLX0gaW50ZXJmYWNlX3R5cGU7Ci0KLXR5cGVkZWYgdW5pb24gbGV4ZXJfdHlwZSB7Ci0gICAgYnVmZmVyX3R5cGUgYnVmZmVyOwotICAgIHR5cGVfdHlwZSB0eXBlOwotICAgIGFyZ190eXBlICphcmc7Ci0gICAgbWV0aG9kX3R5cGUqIG1ldGhvZDsKLSAgICBpbnRlcmZhY2VfaXRlbV90eXBlKiBpbnRlcmZhY2VfaXRlbTsKLSAgICBpbnRlcmZhY2VfdHlwZSogaW50ZXJmYWNlX29iajsKLSAgICB1c2VyX2RhdGFfdHlwZSogdXNlcl9kYXRhOwotICAgIGRvY3VtZW50X2l0ZW1fdHlwZSogZG9jdW1lbnRfaXRlbTsKLX0gbGV4ZXJfdHlwZTsKLQotCi0jZGVmaW5lIFlZU1RZUEUgbGV4ZXJfdHlwZQotCi0jaWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLWludCBwYXJzZV9haWRsKGNoYXIgY29uc3QgKik7Ci0KLS8vIHN0cmlwcyBvZmYgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSwgdGhlICJpbXBvcnQiIHRleHQKLS8vIGFsc28gcmV0dXJucyB3aGV0aGVyIGl0J3MgYSBsb2NhbCBvciBzeXN0ZW0gaW1wb3J0Ci0vLyB3ZSByZWx5IG9uIHRoZSBpbnB1dCBtYXRjaGluZyB0aGUgaW1wb3J0IHJlZ2V4IGZyb20gYmVsb3cKLWNoYXIqIHBhcnNlX2ltcG9ydF9zdGF0ZW1lbnQoY29uc3QgY2hhciogdGV4dCk7Ci0KLS8vIGluLCBvdXQgb3IgaW5vdXQKLWVudW0gewotICAgIElOX1BBUkFNRVRFUiA9IDEsCi0gICAgT1VUX1BBUkFNRVRFUiA9IDIsCi0gICAgSU5PVVRfUEFSQU1FVEVSID0gMwotfTsKLWludCBjb252ZXJ0X2RpcmVjdGlvbihjb25zdCBjaGFyKiBkaXJlY3Rpb24pOwotCi0vLyBjYWxsYmFja3MgZnJvbSB3aXRoaW4gdGhlIHBhcnNlcgotLy8gdGhlc2UgZnVuY3Rpb25zIGFsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgc3RyaW5ncwotdHlwZWRlZiBzdHJ1Y3QgUGFyc2VyQ2FsbGJhY2tzIHsKLSAgICB2b2lkICgqZG9jdW1lbnQpKGRvY3VtZW50X2l0ZW1fdHlwZSogaXRlbXMpOwotICAgIHZvaWQgKCppbXBvcnQpKGJ1ZmZlcl90eXBlKiBzdGF0ZW1lbnQpOwotfSBQYXJzZXJDYWxsYmFja3M7Ci0KLWV4dGVybiBQYXJzZXJDYWxsYmFja3MqIGdfY2FsbGJhY2tzOwotCi0vLyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBwYXJzaW5nLCBmYWxzZSBvdGhlcndpc2UKLWV4dGVybiBpbnQgZ19lcnJvcjsKLQotLy8gdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2UncmUgY3VycmVudGx5IHBhcnNpbmcKLWV4dGVybiBjaGFyIGNvbnN0KiBnX2N1cnJlbnRGaWxlbmFtZTsKLQotLy8gdGhlIHBhY2thZ2UgbmFtZSBmb3Igb3VyIGN1cnJlbnQgZmlsZQotZXh0ZXJuIGNoYXIgY29uc3QqIGdfY3VycmVudFBhY2thZ2U7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gICAgU1RBVEVNRU5UX0lOU0lERV9JTlRFUkZBQ0UKLX0gZXJyb3JfdHlwZTsKLQotdm9pZCBpbml0X2J1ZmZlcl90eXBlKGJ1ZmZlcl90eXBlKiBidWYsIGludCBsaW5lbm8pOwotCi0KLSNpZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLQotI2VuZGlmIC8vIERFVklDRV9UT09MU19BSURMX0FJRExfTEFOR1VBR0VfSApkaWZmIC0tZ2l0IGEvdG9vbHMvYWlkbC9haWRsX2xhbmd1YWdlX2wubCBiL3Rvb2xzL2FpZGwvYWlkbF9sYW5ndWFnZV9sLmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMzNlN2EuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9haWRsX2xhbmd1YWdlX2wubAorKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi0lewotI2luY2x1ZGUgImFpZGxfbGFuZ3VhZ2UuaCIKLSNpbmNsdWRlICJhaWRsX2xhbmd1YWdlX3kuaCIKLSNpbmNsdWRlICJzZWFyY2hfcGF0aC5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1leHRlcm4gWVlTVFlQRSB5eWx2YWw7Ci0KLS8vIGNvbW1lbnQgYW5kIHdoaXRlc3BhY2UgaGFuZGxpbmcKLS8vIHRoZXNlIGZ1bmN0aW9ucyBzYXZlIGEgY29weSBvZiB0aGUgYnVmZmVyCi1zdGF0aWMgdm9pZCBiZWdpbl9leHRyYV90ZXh0KHVuc2lnbmVkIGxpbmVubywgd2hpY2hfZXh0cmFfdGV4dCB3aGljaCk7Ci1zdGF0aWMgdm9pZCBhcHBlbmRfZXh0cmFfdGV4dChjaGFyKiB0ZXh0KTsKLXN0YXRpYyBleHRyYV90ZXh0X3R5cGUqIGdldF9leHRyYV90ZXh0KHZvaWQpOyAgIC8vIHlvdSBub3cgb3duIHRoZSBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgcmV0dXJucwotc3RhdGljIHZvaWQgZHJvcF9leHRyYV90ZXh0KHZvaWQpOwotCi0vLyBwYWNrYWdlIGhhbmRsaW5nCi1zdGF0aWMgdm9pZCBkb19wYWNrYWdlX3N0YXRlbWVudChjb25zdCBjaGFyKiBpbXBvcnRUZXh0KTsKLQotI2RlZmluZSBTRVRfQlVGRkVSKHQpIFwKLSAgICBkbyB7IFwKLSAgICAgICAgeXlsdmFsLmJ1ZmZlci5saW5lbm8gPSB5eWxpbmVubzsgXAotICAgICAgICB5eWx2YWwuYnVmZmVyLnRva2VuID0gKHQpOyBcCi0gICAgICAgIHl5bHZhbC5idWZmZXIuZGF0YSA9IHN0cmR1cCh5eXRleHQpOyBcCi0gICAgICAgIHl5bHZhbC5idWZmZXIuZXh0cmEgPSBnZXRfZXh0cmFfdGV4dCgpOyBcCi0gICAgfSB3aGlsZSgwKQotCi0lfQotCi0lb3B0aW9uIHl5bGluZW5vCi0lb3B0aW9uIG5veXl3cmFwCi0KLSV4IENPUFlJTkcgTE9OR19DT01NRU5UCi0KLWlkZW50aWZpZXIgIFtfYS16QS1aXVtfYS16QS1aMC05XC5dKgotd2hpdGVzcGFjZSAgKFsgXHRcblxyXSspCi1icmFja2V0cyAgICBcW3t3aGl0ZXNwYWNlfT9cXQotaWR2YWx1ZSAgICAgKDB8WzEtOV1bMC05XSopCi0KLSUlCi0KLQotXCVcJVx7ICAgICAgICAgICAgICB7IGJlZ2luX2V4dHJhX3RleHQoeXlsaW5lbm8sIENPUFlfVEVYVCk7IEJFR0lOKENPUFlJTkcpOyB9Ci08Q09QWUlORz5cfVwlXCUgICAgIHsgQkVHSU4oSU5JVElBTCk7IH0KLTxDT1BZSU5HPi4qXG4gICAgICAgeyBhcHBlbmRfZXh0cmFfdGV4dCh5eXRleHQpOyB9Ci08Q09QWUlORz4uKiAgICAgICAgIHsgYXBwZW5kX2V4dHJhX3RleHQoeXl0ZXh0KTsgfQotPENPUFlJTkc+XG4rICAgICAgICB7IGFwcGVuZF9leHRyYV90ZXh0KHl5dGV4dCk7IH0KLQotCi1cL1wqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYmVnaW5fZXh0cmFfdGV4dCh5eWxpbmVubywgKHdoaWNoX2V4dHJhX3RleHQpTE9OR19DT01NRU5UKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRUdJTihMT05HX0NPTU1FTlQpOyB9Ci08TE9OR19DT01NRU5UPlteKl0qICAgICAgICAgICAgIHsgYXBwZW5kX2V4dHJhX3RleHQoeXl0ZXh0KTsgfQotPExPTkdfQ09NTUVOVD5cKitbXi9dICAgICAgICAgICB7IGFwcGVuZF9leHRyYV90ZXh0KHl5dGV4dCk7IH0KLTxMT05HX0NPTU1FTlQ+XG4gICAgICAgICAgICAgICAgeyBhcHBlbmRfZXh0cmFfdGV4dCh5eXRleHQpOyB9Ci08TE9OR19DT01NRU5UPlwqKlwvICAgICAgICAgICAgIHsgQkVHSU4oSU5JVElBTCk7IH0KLQotXnt3aGl0ZXNwYWNlfT9pbXBvcnR7d2hpdGVzcGFjZX1bXiBcdFxyXG5dK3t3aGl0ZXNwYWNlfT87ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQlVGRkVSKElNUE9SVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU1QT1JUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci1ee3doaXRlc3BhY2V9P3BhY2thZ2V7d2hpdGVzcGFjZX1bXiBcdFxyXG5dK3t3aGl0ZXNwYWNlfT87ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19wYWNrYWdlX3N0YXRlbWVudCh5eXRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JVRkZFUihQQUNLQUdFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQQUNLQUdFOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci08PEVPRj4+ICAgICAgICAgICAgIHsgeXl0ZXJtaW5hdGUoKTsgfQotCi1cL1wvLipcbiAgICAgICAgICAgIHsgYmVnaW5fZXh0cmFfdGV4dCh5eWxpbmVubywgU0hPUlRfQ09NTUVOVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRfZXh0cmFfdGV4dCh5eXRleHQpOyB9Ci0KLXt3aGl0ZXNwYWNlfSAgICB7IC8qIGJlZ2luX2V4dHJhX3RleHQoeXlsaW5lbm8sIFdISVRFU1BBQ0UpOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRfZXh0cmFfdGV4dCh5eXRleHQpOyAqLyB9Ci0KLTsgICAgICAgICAgICAgICB7IFNFVF9CVUZGRVIoJzsnKTsgcmV0dXJuICc7JzsgfQotXHsgICAgICAgICAgICAgIHsgU0VUX0JVRkZFUigneycpOyByZXR1cm4gJ3snOyB9Ci1cfSAgICAgICAgICAgICAgeyBTRVRfQlVGRkVSKCd9Jyk7IHJldHVybiAnfSc7IH0KLVwoICAgICAgICAgICAgICB7IFNFVF9CVUZGRVIoJygnKTsgcmV0dXJuICcoJzsgfQotXCkgICAgICAgICAgICAgIHsgU0VUX0JVRkZFUignKScpOyByZXR1cm4gJyknOyB9Ci0sICAgICAgICAgICAgICAgeyBTRVRfQlVGRkVSKCcsJyk7IHJldHVybiAnLCc7IH0KLT0gICAgICAgICAgICAgICB7IFNFVF9CVUZGRVIoJz0nKTsgcmV0dXJuICc9JzsgfQotCi0gICAgLyoga2V5d29yZHMgKi8KLXBhcmNlbGFibGUgICAgICB7IFNFVF9CVUZGRVIoUEFSQ0VMQUJMRSk7IHJldHVybiBQQVJDRUxBQkxFOyB9Ci1pbnRlcmZhY2UgICAgICAgeyBTRVRfQlVGRkVSKElOVEVSRkFDRSk7IHJldHVybiBJTlRFUkZBQ0U7IH0KLWZsYXR0ZW5hYmxlICAgICB7IFNFVF9CVUZGRVIoRkxBVFRFTkFCTEUpOyByZXR1cm4gRkxBVFRFTkFCTEU7IH0KLXJwYyAgICAgICAgICAgICB7IFNFVF9CVUZGRVIoSU5URVJGQUNFKTsgcmV0dXJuIFJQQzsgfQotaW4gICAgICAgICAgICAgIHsgU0VUX0JVRkZFUihJTik7IHJldHVybiBJTjsgfQotb3V0ICAgICAgICAgICAgIHsgU0VUX0JVRkZFUihPVVQpOyByZXR1cm4gT1VUOyB9Ci1pbm91dCAgICAgICAgICAgeyBTRVRfQlVGRkVSKElOT1VUKTsgcmV0dXJuIElOT1VUOyB9Ci1vbmV3YXkgICAgICAgICAgeyBTRVRfQlVGRkVSKE9ORVdBWSk7IHJldHVybiBPTkVXQVk7IH0KLQote2JyYWNrZXRzfSsgICAgIHsgU0VUX0JVRkZFUihBUlJBWSk7IHJldHVybiBBUlJBWTsgfQote2lkdmFsdWV9ICAgICAgIHsgU0VUX0JVRkZFUihJRFZBTFVFKTsgcmV0dXJuIElEVkFMVUU7IH0KLXtpZGVudGlmaWVyfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFNFVF9CVUZGRVIoSURFTlRJRklFUik7IHJldHVybiBJREVOVElGSUVSOyB9Ci17aWRlbnRpZmllcn1cPHt3aGl0ZXNwYWNlfSp7aWRlbnRpZmllcn0oe3doaXRlc3BhY2V9Kix7d2hpdGVzcGFjZX0qe2lkZW50aWZpZXJ9KSp7d2hpdGVzcGFjZX0qXD4gICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JVRkZFUihHRU5FUklDKTsgcmV0dXJuIEdFTkVSSUM7IH0KLQotICAgIC8qIHN5bnRheCBlcnJvciEgKi8KLS4gICAgICAgICAgICAgICB7IHByaW50ZigiVU5LTk9XTiglcykiLCB5eXRleHQpOwotICAgICAgICAgICAgICAgICAgeXlsdmFsLmJ1ZmZlci5saW5lbm8gPSB5eWxpbmVubzsKLSAgICAgICAgICAgICAgICAgIHl5bHZhbC5idWZmZXIudG9rZW4gPSBJREVOVElGSUVSOwotICAgICAgICAgICAgICAgICAgeXlsdmFsLmJ1ZmZlci5kYXRhID0gc3RyZHVwKHl5dGV4dCk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gSURFTlRJRklFUjsKLSAgICAgICAgICAgICAgICB9Ci0KLSUlCi0KLS8vIGNvbW1lbnQgYW5kIHdoaXRlc3BhY2UgaGFuZGxpbmcKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZXh0cmFfdGV4dF90eXBlKiBnX2V4dHJhVGV4dCA9IE5VTEw7Ci1leHRyYV90ZXh0X3R5cGUqIGdfbmV4dEV4dHJhVGV4dCA9IE5VTEw7Ci0KLXZvaWQgYmVnaW5fZXh0cmFfdGV4dCh1bnNpZ25lZCBsaW5lbm8sIHdoaWNoX2V4dHJhX3RleHQgd2hpY2gpCi17Ci0gICAgZXh0cmFfdGV4dF90eXBlKiB0ZXh0ID0gKGV4dHJhX3RleHRfdHlwZSopbWFsbG9jKHNpemVvZihleHRyYV90ZXh0X3R5cGUpKTsKLSAgICB0ZXh0LT5saW5lbm8gPSBsaW5lbm87Ci0gICAgdGV4dC0+d2hpY2ggPSB3aGljaDsKLSAgICB0ZXh0LT5kYXRhID0gTlVMTDsKLSAgICB0ZXh0LT5sZW4gPSAwOwotICAgIHRleHQtPm5leHQgPSBOVUxMOwotICAgIGlmIChnX25leHRFeHRyYVRleHQgPT0gTlVMTCkgewotICAgICAgICBnX2V4dHJhVGV4dCA9IHRleHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZ19uZXh0RXh0cmFUZXh0LT5uZXh0ID0gdGV4dDsKLSAgICB9Ci0gICAgZ19uZXh0RXh0cmFUZXh0ID0gdGV4dDsKLX0KLQotdm9pZCBhcHBlbmRfZXh0cmFfdGV4dChjaGFyKiB0ZXh0KQotewotICAgIGlmIChnX25leHRFeHRyYVRleHQtPmRhdGEgPT0gTlVMTCkgewotICAgICAgICBnX25leHRFeHRyYVRleHQtPmRhdGEgPSBzdHJkdXAodGV4dCk7Ci0gICAgICAgIGdfbmV4dEV4dHJhVGV4dC0+bGVuID0gc3RybGVuKHRleHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoYXIqIG9yaWcgPSBnX25leHRFeHRyYVRleHQtPmRhdGE7Ci0gICAgICAgIHVuc2lnbmVkIG9sZExlbiA9IGdfbmV4dEV4dHJhVGV4dC0+bGVuOwotICAgICAgICB1bnNpZ25lZCBsZW4gPSBzdHJsZW4odGV4dCk7Ci0gICAgICAgIGdfbmV4dEV4dHJhVGV4dC0+bGVuICs9IGxlbjsKLSAgICAgICAgZ19uZXh0RXh0cmFUZXh0LT5kYXRhID0gKGNoYXIqKW1hbGxvYyhnX25leHRFeHRyYVRleHQtPmxlbisxKTsKLSAgICAgICAgbWVtY3B5KGdfbmV4dEV4dHJhVGV4dC0+ZGF0YSwgb3JpZywgb2xkTGVuKTsKLSAgICAgICAgbWVtY3B5KGdfbmV4dEV4dHJhVGV4dC0+ZGF0YStvbGRMZW4sIHRleHQsIGxlbik7Ci0gICAgICAgIGdfbmV4dEV4dHJhVGV4dC0+ZGF0YVtnX25leHRFeHRyYVRleHQtPmxlbl0gPSAnXDAnOwotICAgICAgICBmcmVlKG9yaWcpOwotICAgIH0KLX0KLQotZXh0cmFfdGV4dF90eXBlKgotZ2V0X2V4dHJhX3RleHQodm9pZCkKLXsKLSAgICBleHRyYV90ZXh0X3R5cGUqIHJlc3VsdCA9IGdfZXh0cmFUZXh0OwotICAgIGdfZXh0cmFUZXh0ID0gTlVMTDsKLSAgICBnX25leHRFeHRyYVRleHQgPSBOVUxMOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgZHJvcF9leHRyYV90ZXh0KHZvaWQpCi17Ci0gICAgZXh0cmFfdGV4dF90eXBlKiBwID0gZ19leHRyYVRleHQ7Ci0gICAgd2hpbGUgKHApIHsKLSAgICAgICAgZXh0cmFfdGV4dF90eXBlKiBuZXh0ID0gcC0+bmV4dDsKLSAgICAgICAgZnJlZShwLT5kYXRhKTsKLSAgICAgICAgZnJlZShwKTsKLSAgICAgICAgZnJlZShuZXh0KTsKLSAgICB9Ci0gICAgZ19leHRyYVRleHQgPSBOVUxMOwotICAgIGdfbmV4dEV4dHJhVGV4dCA9IE5VTEw7Ci19Ci0KLQotLy8gcGFja2FnZSBoYW5kbGluZwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkIGRvX3BhY2thZ2Vfc3RhdGVtZW50KGNvbnN0IGNoYXIqIGltcG9ydFRleHQpCi17Ci0gICAgaWYgKGdfY3VycmVudFBhY2thZ2UpIGZyZWUoKHZvaWQqKWdfY3VycmVudFBhY2thZ2UpOwotICAgIGdfY3VycmVudFBhY2thZ2UgPSBwYXJzZV9pbXBvcnRfc3RhdGVtZW50KGltcG9ydFRleHQpOwotfQotCi0KLS8vIG1haW4gcGFyc2UgZnVuY3Rpb24KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotY2hhciBjb25zdCogZ19jdXJyZW50RmlsZW5hbWUgPSBOVUxMOwotY2hhciBjb25zdCogZ19jdXJyZW50UGFja2FnZSA9IE5VTEw7Ci0KLWludCB5eXBhcnNlKHZvaWQpOwotCi1pbnQgcGFyc2VfYWlkbChjaGFyIGNvbnN0ICpmaWxlbmFtZSkKLXsKLSAgICB5eWluID0gZm9wZW4oZmlsZW5hbWUsICJyIik7Ci0gICAgaWYgKHl5aW4pIHsKLSAgICAgICAgY2hhciBjb25zdCogb2xkRmlsZW5hbWUgPSBnX2N1cnJlbnRGaWxlbmFtZTsKLSAgICAgICAgY2hhciBjb25zdCogb2xkUGFja2FnZSA9IGdfY3VycmVudFBhY2thZ2U7Ci0gICAgICAgIGdfY3VycmVudEZpbGVuYW1lID0gc3RyZHVwKGZpbGVuYW1lKTsKLQotICAgICAgICBnX2Vycm9yID0gMDsKLSAgICAgICAgeXlsaW5lbm8gPSAxOwotICAgICAgICBpbnQgcnYgPSB5eXBhcnNlKCk7Ci0gICAgICAgIGlmIChnX2Vycm9yICE9IDApIHsKLSAgICAgICAgICAgIHJ2ID0gZ19lcnJvcjsKLSAgICAgICAgfQotCi0gICAgICAgIGZyZWUoKHZvaWQqKWdfY3VycmVudEZpbGVuYW1lKTsKLSAgICAgICAgZ19jdXJyZW50RmlsZW5hbWUgPSBvbGRGaWxlbmFtZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChnX2N1cnJlbnRQYWNrYWdlKSBmcmVlKCh2b2lkKilnX2N1cnJlbnRQYWNrYWdlKTsKLSAgICAgICAgZ19jdXJyZW50UGFja2FnZSA9IG9sZFBhY2thZ2U7Ci0KLSAgICAgICAgcmV0dXJuIHJ2OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDogdW5hYmxlIHRvIG9wZW4gZmlsZSBmb3IgcmVhZDogJXNcbiIsIGZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS90b29scy9haWRsL2FpZGxfbGFuZ3VhZ2VfeS55IGIvdG9vbHMvYWlkbC9haWRsX2xhbmd1YWdlX3kueQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI0MGQyOC4uMDAwMDAwMAotLS0gYS90b29scy9haWRsL2FpZGxfbGFuZ3VhZ2VfeS55CisrKyAvZGV2L251bGwKQEAgLTEsMzczICswLDAgQEAKLSV7Ci0jaW5jbHVkZSAiYWlkbF9sYW5ndWFnZS5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLWludCB5eWVycm9yKGNoYXIqIGVycnN0cik7Ci1pbnQgeXlsZXgodm9pZCk7Ci1leHRlcm4gaW50IHl5bGluZW5vOwotCi1zdGF0aWMgaW50IGNvdW50X2JyYWNrZXRzKGNvbnN0IGNoYXIqKTsKLQotJX0KLQotJXRva2VuIElNUE9SVAotJXRva2VuIFBBQ0tBR0UKLSV0b2tlbiBJREVOVElGSUVSCi0ldG9rZW4gSURWQUxVRQotJXRva2VuIEdFTkVSSUMKLSV0b2tlbiBBUlJBWQotJXRva2VuIFBBUkNFTEFCTEUKLSV0b2tlbiBJTlRFUkZBQ0UKLSV0b2tlbiBGTEFUVEVOQUJMRQotJXRva2VuIFJQQwotJXRva2VuIElOCi0ldG9rZW4gT1VUCi0ldG9rZW4gSU5PVVQKLSV0b2tlbiBPTkVXQVkKLQotJSUKLWRvY3VtZW50OgotICAgICAgICBkb2N1bWVudF9pdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnX2NhbGxiYWNrcy0+ZG9jdW1lbnQoJDEuZG9jdW1lbnRfaXRlbSk7IH0KLSAgICB8ICAgaGVhZGVycyBkb2N1bWVudF9pdGVtcyAgICAgICAgICAgICAgICAgIHsgZ19jYWxsYmFja3MtPmRvY3VtZW50KCQyLmRvY3VtZW50X2l0ZW0pOyB9Ci0gICAgOwotCi1oZWFkZXJzOgotICAgICAgICBwYWNrYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB9Ci0gICAgfCAgIGltcG9ydHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IH0KLSAgICB8ICAgcGFja2FnZSBpbXBvcnRzICAgICAgICAgICAgICAgICAgICAgICAgIHsgfQotICAgIDsKLQotcGFja2FnZToKLSAgICAgICAgUEFDS0FHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgfQotICAgIDsKLQotaW1wb3J0czoKLSAgICAgICAgSU1QT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ19jYWxsYmFja3MtPmltcG9ydCgmKCQxLmJ1ZmZlcikpOyB9Ci0gICAgfCAgIElNUE9SVCBpbXBvcnRzICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdfY2FsbGJhY2tzLT5pbXBvcnQoJigkMS5idWZmZXIpKTsgfQotICAgIDsKLQotZG9jdW1lbnRfaXRlbXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkLmRvY3VtZW50X2l0ZW0gPSBOVUxMOyB9Ci0gICAgfCAgIGRvY3VtZW50X2l0ZW1zIGRlY2xhcmF0aW9uICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQyLmRvY3VtZW50X2l0ZW0gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlcnJvciBjYXNlcyBvbmx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRfaXRlbV90eXBlKiBwID0gJDEuZG9jdW1lbnRfaXRlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgJiYgcC0+bmV4dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcD1wLT5uZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5uZXh0ID0gKGRvY3VtZW50X2l0ZW1fdHlwZSopJDIuZG9jdW1lbnRfaXRlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5kb2N1bWVudF9pdGVtID0gKGRvY3VtZW50X2l0ZW1fdHlwZSopJDIuZG9jdW1lbnRfaXRlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB8IGRvY3VtZW50X2l0ZW1zIGVycm9yICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBzeW50YXggZXJyb3IgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggXCIlc1wiXG4iLCBnX2N1cnJlbnRGaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQyLmJ1ZmZlci5saW5lbm8sICQyLmJ1ZmZlci5kYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIDsKLQotZGVjbGFyYXRpb246Ci0gICAgICAgIHBhcmNlbGFibGVfZGVjbCAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkLmRvY3VtZW50X2l0ZW0gPSAoZG9jdW1lbnRfaXRlbV90eXBlKikkMS51c2VyX2RhdGE7IH0KLSAgICB8ICAgaW50ZXJmYWNlX2RlY2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQuZG9jdW1lbnRfaXRlbSA9IChkb2N1bWVudF9pdGVtX3R5cGUqKSQxLmludGVyZmFjZV9pdGVtOyB9Ci0gICAgOwotCi1wYXJjZWxhYmxlX2RlY2w6Ci0gICAgICAgIFBBUkNFTEFCTEUgSURFTlRJRklFUiAnOycgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2RhdGFfdHlwZSogYiA9ICh1c2VyX2RhdGFfdHlwZSopbWFsbG9jKHNpemVvZih1c2VyX2RhdGFfdHlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLT5kb2N1bWVudF9pdGVtLml0ZW1fdHlwZSA9IFVTRVJfREFUQV9UWVBFOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLT5kb2N1bWVudF9pdGVtLm5leHQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLT5rZXl3b3JkX3Rva2VuID0gJDEuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLT5uYW1lID0gJDIuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLT5wYWNrYWdlID0gZ19jdXJyZW50UGFja2FnZSA/IHN0cmR1cChnX2N1cnJlbnRQYWNrYWdlKSA6IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGItPnNlbWljb2xvbl90b2tlbiA9ICQzLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+ZmxhdHRlbmluZ19tZXRob2RzID0gUEFSQ0VMQUJMRV9EQVRBOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC51c2VyX2RhdGEgPSBiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB8ICAgUEFSQ0VMQUJMRSAnOycgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgc3ludGF4IGVycm9yIGluIHBhcmNlbGFibGUgZGVjbGFyYXRpb24uIEV4cGVjdGVkIHR5cGUgbmFtZS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2N1cnJlbnRGaWxlbmFtZSwgJDEuYnVmZmVyLmxpbmVubyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLnVzZXJfZGF0YSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHwgICBQQVJDRUxBQkxFIGVycm9yICc7JyAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBzeW50YXggZXJyb3IgaW4gcGFyY2VsYWJsZSBkZWNsYXJhdGlvbi4gRXhwZWN0ZWQgdHlwZSBuYW1lLCBzYXcgXCIlc1wiLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfY3VycmVudEZpbGVuYW1lLCAkMi5idWZmZXIubGluZW5vLCAkMi5idWZmZXIuZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLnVzZXJfZGF0YSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHwgICBGTEFUVEVOQUJMRSBJREVOVElGSUVSICc7JyAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhX3R5cGUqIGIgPSAodXNlcl9kYXRhX3R5cGUqKW1hbGxvYyhzaXplb2YodXNlcl9kYXRhX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+ZG9jdW1lbnRfaXRlbS5pdGVtX3R5cGUgPSBVU0VSX0RBVEFfVFlQRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+ZG9jdW1lbnRfaXRlbS5uZXh0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+a2V5d29yZF90b2tlbiA9ICQxLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+bmFtZSA9ICQyLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+cGFja2FnZSA9IGdfY3VycmVudFBhY2thZ2UgPyBzdHJkdXAoZ19jdXJyZW50UGFja2FnZSkgOiBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLT5zZW1pY29sb25fdG9rZW4gPSAkMy5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGItPmZsYXR0ZW5pbmdfbWV0aG9kcyA9IFBBUkNFTEFCTEVfREFUQSB8IFJQQ19EQVRBOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC51c2VyX2RhdGEgPSBiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB8ICAgRkxBVFRFTkFCTEUgJzsnICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgc3ludGF4IGVycm9yIGluIGZsYXR0ZW5hYmxlIGRlY2xhcmF0aW9uLiBFeHBlY3RlZCB0eXBlIG5hbWUuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19jdXJyZW50RmlsZW5hbWUsICQxLmJ1ZmZlci5saW5lbm8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC51c2VyX2RhdGEgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB8ICAgRkxBVFRFTkFCTEUgZXJyb3IgJzsnICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgc3ludGF4IGVycm9yIGluIGZsYXR0ZW5hYmxlIGRlY2xhcmF0aW9uLiBFeHBlY3RlZCB0eXBlIG5hbWUsIHNhdyBcIiVzXCIuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19jdXJyZW50RmlsZW5hbWUsICQyLmJ1ZmZlci5saW5lbm8sICQyLmJ1ZmZlci5kYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudXNlcl9kYXRhID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICA7Ci0KLWludGVyZmFjZV9oZWFkZXI6Ci0gICAgICAgIElOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZV90eXBlKiBjID0gKGludGVyZmFjZV90eXBlKiltYWxsb2Moc2l6ZW9mKGludGVyZmFjZV90eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmRvY3VtZW50X2l0ZW0uaXRlbV90eXBlID0gSU5URVJGQUNFX1RZUEVfQklOREVSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5kb2N1bWVudF9pdGVtLm5leHQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5pbnRlcmZhY2VfdG9rZW4gPSAkMS5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPm9uZXdheSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJmMtPm9uZXdheV90b2tlbiwgMCwgc2l6ZW9mKGJ1ZmZlcl90eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNvbW1lbnRzX3Rva2VuID0gJmMtPmludGVyZmFjZV90b2tlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJmYWNlX29iaiA9IGM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgfCAgIE9ORVdBWSBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZV90eXBlKiBjID0gKGludGVyZmFjZV90eXBlKiltYWxsb2Moc2l6ZW9mKGludGVyZmFjZV90eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmRvY3VtZW50X2l0ZW0uaXRlbV90eXBlID0gSU5URVJGQUNFX1RZUEVfQklOREVSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5kb2N1bWVudF9pdGVtLm5leHQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5pbnRlcmZhY2VfdG9rZW4gPSAkMi5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPm9uZXdheSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPm9uZXdheV90b2tlbiA9ICQxLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y29tbWVudHNfdG9rZW4gPSAmYy0+b25ld2F5X3Rva2VuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5pbnRlcmZhY2Vfb2JqID0gYzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB8ICAgUlBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlX3R5cGUqIGMgPSAoaW50ZXJmYWNlX3R5cGUqKW1hbGxvYyhzaXplb2YoaW50ZXJmYWNlX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+ZG9jdW1lbnRfaXRlbS5pdGVtX3R5cGUgPSBJTlRFUkZBQ0VfVFlQRV9SUEM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmRvY3VtZW50X2l0ZW0ubmV4dCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmludGVyZmFjZV90b2tlbiA9ICQxLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+b25ld2F5ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCgmYy0+b25ld2F5X3Rva2VuLCAwLCBzaXplb2YoYnVmZmVyX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y29tbWVudHNfdG9rZW4gPSAmYy0+aW50ZXJmYWNlX3Rva2VuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5pbnRlcmZhY2Vfb2JqID0gYzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICA7Ci0KLWludGVyZmFjZV9rZXl3b3JkczoKLSAgICAgICAgSU5URVJGQUNFCi0gICAgfCAgIFJQQwotICAgIDsKLQotaW50ZXJmYWNlX2RlY2w6Ci0gICAgICAgIGludGVyZmFjZV9oZWFkZXIgSURFTlRJRklFUiAneycgaW50ZXJmYWNlX2l0ZW1zICd9JyB7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VfdHlwZSogYyA9ICQxLmludGVyZmFjZV9vYmo7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPm5hbWUgPSAkMi5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPnBhY2thZ2UgPSBnX2N1cnJlbnRQYWNrYWdlID8gc3RyZHVwKGdfY3VycmVudFBhY2thZ2UpIDogTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+b3Blbl9icmFjZV90b2tlbiA9ICQzLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+aW50ZXJmYWNlX2l0ZW1zID0gJDQuaW50ZXJmYWNlX2l0ZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNsb3NlX2JyYWNlX3Rva2VuID0gJDUuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5pbnRlcmZhY2Vfb2JqID0gYzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgfCAgIGludGVyZmFjZV9rZXl3b3JkcyBlcnJvciAneycgaW50ZXJmYWNlX2l0ZW1zICd9JyAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBzeW50YXggZXJyb3IgaW4gaW50ZXJmYWNlIGRlY2xhcmF0aW9uLiAgRXhwZWN0ZWQgdHlwZSBuYW1lLCBzYXcgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2N1cnJlbnRGaWxlbmFtZSwgJDIuYnVmZmVyLmxpbmVubywgJDIuYnVmZmVyLmRhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5kb2N1bWVudF9pdGVtID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgfCAgIGludGVyZmFjZV9rZXl3b3JkcyBlcnJvciAnfScgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBzeW50YXggZXJyb3IgaW4gaW50ZXJmYWNlIGRlY2xhcmF0aW9uLiAgRXhwZWN0ZWQgdHlwZSBuYW1lLCBzYXcgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2N1cnJlbnRGaWxlbmFtZSwgJDIuYnVmZmVyLmxpbmVubywgJDIuYnVmZmVyLmRhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5kb2N1bWVudF9pdGVtID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICA7Ci0KLWludGVyZmFjZV9pdGVtczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkLmludGVyZmFjZV9pdGVtID0gTlVMTDsgfQotICAgIHwgICBpbnRlcmZhY2VfaXRlbXMgbWV0aG9kX2RlY2wgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlX2l0ZW1fdHlwZSogcD0kMS5pbnRlcmZhY2VfaXRlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgJiYgcC0+bmV4dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcD1wLT5uZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5uZXh0ID0gKGludGVyZmFjZV9pdGVtX3R5cGUqKSQyLm1ldGhvZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5pbnRlcmZhY2VfaXRlbSA9IChpbnRlcmZhY2VfaXRlbV90eXBlKikkMi5tZXRob2Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgfCAgIGludGVyZmFjZV9pdGVtcyBlcnJvciAnOycgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBzeW50YXggZXJyb3IgYmVmb3JlICc7JyAoZXhwZWN0ZWQgbWV0aG9kIGRlY2xhcmF0aW9uKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19jdXJyZW50RmlsZW5hbWUsICQzLmJ1ZmZlci5saW5lbm8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICA7Ci0KLW1ldGhvZF9kZWNsOgotICAgICAgICB0eXBlIElERU5USUZJRVIgJygnIGFyZ19saXN0ICcpJyAnOycgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3R5cGUgKm1ldGhvZCA9IChtZXRob2RfdHlwZSopbWFsbG9jKHNpemVvZihtZXRob2RfdHlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmludGVyZmFjZV9pdGVtLml0ZW1fdHlwZSA9IE1FVEhPRF9UWVBFOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmludGVyZmFjZV9pdGVtLm5leHQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPm9uZXdheSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPnR5cGUgPSAkMS50eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJm1ldGhvZC0+b25ld2F5X3Rva2VuLCAwLCBzaXplb2YoYnVmZmVyX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5uYW1lID0gJDIuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPm9wZW5fcGFyZW5fdG9rZW4gPSAkMy5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+YXJncyA9ICQ0LmFyZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5jbG9zZV9wYXJlbl90b2tlbiA9ICQ1LmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5oYXNJZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJm1ldGhvZC0+ZXF1YWxzX3Rva2VuLCAwLCBzaXplb2YoYnVmZmVyX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZtZXRob2QtPmlkLCAwLCBzaXplb2YoYnVmZmVyX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5zZW1pY29sb25fdG9rZW4gPSAkNi5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+Y29tbWVudHNfdG9rZW4gPSAmbWV0aG9kLT50eXBlLnR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1ldGhvZCA9IG1ldGhvZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgfCAgIE9ORVdBWSB0eXBlIElERU5USUZJRVIgJygnIGFyZ19saXN0ICcpJyAnOycgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3R5cGUgKm1ldGhvZCA9IChtZXRob2RfdHlwZSopbWFsbG9jKHNpemVvZihtZXRob2RfdHlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmludGVyZmFjZV9pdGVtLml0ZW1fdHlwZSA9IE1FVEhPRF9UWVBFOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmludGVyZmFjZV9pdGVtLm5leHQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPm9uZXdheSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+b25ld2F5X3Rva2VuID0gJDEuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPnR5cGUgPSAkMi50eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPm5hbWUgPSAkMy5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+b3Blbl9wYXJlbl90b2tlbiA9ICQ0LmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5hcmdzID0gJDUuYXJnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmNsb3NlX3BhcmVuX3Rva2VuID0gJDYuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmhhc0lkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCgmbWV0aG9kLT5lcXVhbHNfdG9rZW4sIDAsIHNpemVvZihidWZmZXJfdHlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJm1ldGhvZC0+aWQsIDAsIHNpemVvZihidWZmZXJfdHlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPnNlbWljb2xvbl90b2tlbiA9ICQ3LmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5jb21tZW50c190b2tlbiA9ICZtZXRob2QtPm9uZXdheV90b2tlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubWV0aG9kID0gbWV0aG9kOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB8ICAgIHR5cGUgSURFTlRJRklFUiAnKCcgYXJnX2xpc3QgJyknICc9JyBJRFZBTFVFICc7JyAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfdHlwZSAqbWV0aG9kID0gKG1ldGhvZF90eXBlKiltYWxsb2Moc2l6ZW9mKG1ldGhvZF90eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+aW50ZXJmYWNlX2l0ZW0uaXRlbV90eXBlID0gTUVUSE9EX1RZUEU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+aW50ZXJmYWNlX2l0ZW0ubmV4dCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+b25ld2F5ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCgmbWV0aG9kLT5vbmV3YXlfdG9rZW4sIDAsIHNpemVvZihidWZmZXJfdHlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPnR5cGUgPSAkMS50eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPm5hbWUgPSAkMi5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+b3Blbl9wYXJlbl90b2tlbiA9ICQzLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5hcmdzID0gJDQuYXJnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmNsb3NlX3BhcmVuX3Rva2VuID0gJDUuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmhhc0lkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5lcXVhbHNfdG9rZW4gPSAkNi5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+aWQgPSAkNy5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+c2VtaWNvbG9uX3Rva2VuID0gJDguYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmNvbW1lbnRzX3Rva2VuID0gJm1ldGhvZC0+dHlwZS50eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tZXRob2QgPSBtZXRob2Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHwgICBPTkVXQVkgdHlwZSBJREVOVElGSUVSICcoJyBhcmdfbGlzdCAnKScgJz0nIElEVkFMVUUgJzsnICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF90eXBlICptZXRob2QgPSAobWV0aG9kX3R5cGUqKW1hbGxvYyhzaXplb2YobWV0aG9kX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5pbnRlcmZhY2VfaXRlbS5pdGVtX3R5cGUgPSBNRVRIT0RfVFlQRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5pbnRlcmZhY2VfaXRlbS5uZXh0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5vbmV3YXkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPm9uZXdheV90b2tlbiA9ICQxLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT50eXBlID0gJDIudHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5uYW1lID0gJDMuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPm9wZW5fcGFyZW5fdG9rZW4gPSAkNC5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+YXJncyA9ICQ1LmFyZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5jbG9zZV9wYXJlbl90b2tlbiA9ICQ2LmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5oYXNJZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC0+ZXF1YWxzX3Rva2VuID0gJDcuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPmlkID0gJDguYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QtPnNlbWljb2xvbl90b2tlbiA9ICQ5LmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT5jb21tZW50c190b2tlbiA9ICZtZXRob2QtPm9uZXdheV90b2tlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubWV0aG9kID0gbWV0aG9kOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICA7Ci0KLWFyZ19saXN0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkLmFyZyA9IE5VTEw7IH0KLSAgICB8ICAgYXJnICAgICAgICAgICAgICAgICAgICAgeyAkJCA9ICQxOyB9Ci0gICAgfCAgIGFyZ19saXN0ICcsJyBhcmcgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJC5hcmcgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgTlVMTCBvbiBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3R5cGUgKnAgPSAkMS5hcmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgJiYgcC0+bmV4dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwPXAtPm5leHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQzLmFyZy0+Y29tbWFfdG9rZW4gPSAkMi5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+bmV4dCA9ICQzLmFyZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHwgICBlcnJvciAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBzeW50YXggZXJyb3IgaW4gcGFyYW1ldGVyIGxpc3RcbiIsIGdfY3VycmVudEZpbGVuYW1lLCAkMS5idWZmZXIubGluZW5vKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLmFyZyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICA7Ci0KLWFyZzoKLSAgICAgICAgZGlyZWN0aW9uIHR5cGUgSURFTlRJRklFUiAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3R5cGUqIGFyZyA9IChhcmdfdHlwZSopbWFsbG9jKHNpemVvZihhcmdfdHlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZhcmctPmNvbW1hX3Rva2VuLCAwLCBzaXplb2YoYnVmZmVyX3R5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy0+ZGlyZWN0aW9uID0gJDEuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLT50eXBlID0gJDIudHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy0+bmFtZSA9ICQzLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy0+bmV4dCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5hcmcgPSBhcmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICA7Ci0KLXR5cGU6Ci0gICAgICAgIElERU5USUZJRVIgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLnR5cGUudHlwZSA9ICQxLmJ1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfYnVmZmVyX3R5cGUoJiQkLnR5cGUuYXJyYXlfdG9rZW4sIHl5bGluZW5vKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLnR5cGUuZGltZW5zaW9uID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHwgICBJREVOVElGSUVSIEFSUkFZICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC50eXBlLnR5cGUgPSAkMS5idWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC50eXBlLmFycmF5X3Rva2VuID0gJDIuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudHlwZS5kaW1lbnNpb24gPSBjb3VudF9icmFja2V0cygkMi5idWZmZXIuZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB8ICAgR0VORVJJQyAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudHlwZS50eXBlID0gJDEuYnVmZmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9idWZmZXJfdHlwZSgmJCQudHlwZS5hcnJheV90b2tlbiwgeXlsaW5lbm8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudHlwZS5kaW1lbnNpb24gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgOwotCi1kaXJlY3Rpb246Ci0gICAgICAgICAgICAgICAgICAgIHsgaW5pdF9idWZmZXJfdHlwZSgmJCQuYnVmZmVyLCB5eWxpbmVubyk7IH0KLSAgICB8ICAgSU4gICAgICAgICAgeyAkJC5idWZmZXIgPSAkMS5idWZmZXI7IH0KLSAgICB8ICAgT1VUICAgICAgICAgeyAkJC5idWZmZXIgPSAkMS5idWZmZXI7IH0KLSAgICB8ICAgSU5PVVQgICAgICAgeyAkJC5idWZmZXIgPSAkMS5idWZmZXI7IH0KLSAgICA7Ci0KLSUlCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLWludCBnX2Vycm9yID0gMDsKLQotaW50IHl5ZXJyb3IoY2hhciogZXJyc3RyKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzXG4iLCBnX2N1cnJlbnRGaWxlbmFtZSwgeXlsaW5lbm8sIGVycnN0cik7Ci0gICAgZ19lcnJvciA9IDE7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXZvaWQgaW5pdF9idWZmZXJfdHlwZShidWZmZXJfdHlwZSogYnVmLCBpbnQgbGluZW5vKQotewotICAgIGJ1Zi0+bGluZW5vID0gbGluZW5vOwotICAgIGJ1Zi0+dG9rZW4gPSAwOwotICAgIGJ1Zi0+ZGF0YSA9IE5VTEw7Ci0gICAgYnVmLT5leHRyYSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgY291bnRfYnJhY2tldHMoY29uc3QgY2hhciogcykKLXsKLSAgICBpbnQgbj0wOwotICAgIHdoaWxlICgqcykgewotICAgICAgICBpZiAoKnMgPT0gJ1snKSBuKys7Ci0gICAgICAgIHMrKzsKLSAgICB9Ci0gICAgcmV0dXJuIG47Ci19CmRpZmYgLS1naXQgYS90b29scy9haWRsL2dlbmVyYXRlX2phdmEuY3BwIGIvdG9vbHMvYWlkbC9nZW5lcmF0ZV9qYXZhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU1NzQwNy4uMDAwMDAwMAotLS0gYS90b29scy9haWRsL2dlbmVyYXRlX2phdmEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotI2luY2x1ZGUgImdlbmVyYXRlX2phdmEuaCIKLSNpbmNsdWRlICJUeXBlLmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotVmFyaWFibGVGYWN0b3J5OjpWYXJpYWJsZUZhY3RvcnkoY29uc3Qgc3RyaW5nJiBiYXNlKQotICAgIDptX2Jhc2UoYmFzZSksCi0gICAgIG1faW5kZXgoMCkKLXsKLX0KLQotVmFyaWFibGUqCi1WYXJpYWJsZUZhY3Rvcnk6OkdldChUeXBlKiB0eXBlKQotewotICAgIGNoYXIgbmFtZVsxMDBdOwotICAgIHNwcmludGYobmFtZSwgIiVzJWQiLCBtX2Jhc2UuY19zdHIoKSwgbV9pbmRleCk7Ci0gICAgbV9pbmRleCsrOwotICAgIFZhcmlhYmxlKiB2ID0gbmV3IFZhcmlhYmxlKHR5cGUsIG5hbWUpOwotICAgIG1fdmFycy5wdXNoX2JhY2sodik7Ci0gICAgcmV0dXJuIHY7Ci19Ci0KLVZhcmlhYmxlKgotVmFyaWFibGVGYWN0b3J5OjpHZXQoaW50IGluZGV4KQotewotICAgIHJldHVybiBtX3ZhcnNbaW5kZXhdOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdHJpbmcKLWdhdGhlcl9jb21tZW50cyhleHRyYV90ZXh0X3R5cGUqIGV4dHJhKQotewotICAgIHN0cmluZyBzOwotICAgIHdoaWxlIChleHRyYSkgewotICAgICAgICBpZiAoZXh0cmEtPndoaWNoID09IFNIT1JUX0NPTU1FTlQpIHsKLSAgICAgICAgICAgIHMgKz0gZXh0cmEtPmRhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZXh0cmEtPndoaWNoID09IExPTkdfQ09NTUVOVCkgewotICAgICAgICAgICAgcyArPSAiLyoiOwotICAgICAgICAgICAgcyArPSBleHRyYS0+ZGF0YTsKLSAgICAgICAgICAgIHMgKz0gIiovIjsKLSAgICAgICAgfQotICAgICAgICBleHRyYSA9IGV4dHJhLT5uZXh0OwotICAgIH0KLSAgICByZXR1cm4gczsKLX0KLQotc3RyaW5nCi1hcHBlbmQoY29uc3QgY2hhciogYSwgY29uc3QgY2hhciogYikKLXsKLSAgICBzdHJpbmcgcyA9IGE7Ci0gICAgcyArPSBiOwotICAgIHJldHVybiBzOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1pbnQKLWdlbmVyYXRlX2phdmEoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qgc3RyaW5nJiBvcmlnaW5hbFNyYywKLSAgICAgICAgICAgICAgICBpbnRlcmZhY2VfdHlwZSogaWZhY2UpCi17Ci0gICAgQ2xhc3MqIGNsOwotCi0gICAgaWYgKGlmYWNlLT5kb2N1bWVudF9pdGVtLml0ZW1fdHlwZSA9PSBJTlRFUkZBQ0VfVFlQRV9CSU5ERVIpIHsKLSAgICAgICAgY2wgPSBnZW5lcmF0ZV9iaW5kZXJfaW50ZXJmYWNlX2NsYXNzKGlmYWNlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaWZhY2UtPmRvY3VtZW50X2l0ZW0uaXRlbV90eXBlID09IElOVEVSRkFDRV9UWVBFX1JQQykgewotICAgICAgICBjbCA9IGdlbmVyYXRlX3JwY19pbnRlcmZhY2VfY2xhc3MoaWZhY2UpOwotICAgIH0KLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG5ldyBEb2N1bWVudDsKLSAgICAgICAgZG9jdW1lbnQtPmNvbW1lbnQgPSAiIjsKLSAgICAgICAgaWYgKGlmYWNlLT5wYWNrYWdlKSBkb2N1bWVudC0+cGFja2FnZSA9IGlmYWNlLT5wYWNrYWdlOwotICAgICAgICBkb2N1bWVudC0+b3JpZ2luYWxTcmMgPSBvcmlnaW5hbFNyYzsKLSAgICAgICAgZG9jdW1lbnQtPmNsYXNzZXMucHVzaF9iYWNrKGNsKTsKLQotLy8gICAgcHJpbnRmKCJvdXRwdXR0aW5nLi4uIGZpbGVuYW1lPSVzXG4iLCBmaWxlbmFtZS5jX3N0cigpKTsKLSAgICBGSUxFKiB0bzsKLSAgICBpZiAoZmlsZW5hbWUgPT0gIi0iKSB7Ci0gICAgICAgIHRvID0gc3Rkb3V0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgLyogb3BlbiBmaWxlIGluIGJpbmFyeSBtb2RlIHRvIGVuc3VyZSB0aGF0IHRoZSB0b29sIHByb2R1Y2VzIHRoZQotICAgICAgICAqIHNhbWUgb3V0cHV0IG9uIGFsbCBwbGF0Zm9ybXMgISEKLSAgICAgICAgKi8KLSAgICAgICAgdG8gPSBmb3BlbihmaWxlbmFtZS5jX3N0cigpLCAid2IiKTsKLSAgICAgICAgaWYgKHRvID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHdyaXRlXG4iLCBmaWxlbmFtZS5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZG9jdW1lbnQtPldyaXRlKHRvKTsKLQotICAgIGZjbG9zZSh0byk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FpZGwvZ2VuZXJhdGVfamF2YS5oIGIvdG9vbHMvYWlkbC9nZW5lcmF0ZV9qYXZhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZmNmZWIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9nZW5lcmF0ZV9qYXZhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jaWZuZGVmIEdFTkVSQVRFX0pBVkFfSAotI2RlZmluZSBHRU5FUkFURV9KQVZBX0gKLQotI2luY2x1ZGUgImFpZGxfbGFuZ3VhZ2UuaCIKLSNpbmNsdWRlICJBU1QuaCIKLQotI2luY2x1ZGUgPHN0cmluZz4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotaW50IGdlbmVyYXRlX2phdmEoY29uc3Qgc3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qgc3RyaW5nJiBvcmlnaW5hbFNyYywKLSAgICAgICAgICAgICAgICBpbnRlcmZhY2VfdHlwZSogaWZhY2UpOwotCi1DbGFzcyogZ2VuZXJhdGVfYmluZGVyX2ludGVyZmFjZV9jbGFzcyhjb25zdCBpbnRlcmZhY2VfdHlwZSogaWZhY2UpOwotQ2xhc3MqIGdlbmVyYXRlX3JwY19pbnRlcmZhY2VfY2xhc3MoY29uc3QgaW50ZXJmYWNlX3R5cGUqIGlmYWNlKTsKLQotc3RyaW5nIGdhdGhlcl9jb21tZW50cyhleHRyYV90ZXh0X3R5cGUqIGV4dHJhKTsKLXN0cmluZyBhcHBlbmQoY29uc3QgY2hhciogYSwgY29uc3QgY2hhciogYik7Ci0KLWNsYXNzIFZhcmlhYmxlRmFjdG9yeQotewotcHVibGljOgotICAgIFZhcmlhYmxlRmFjdG9yeShjb25zdCBzdHJpbmcmIGJhc2UpOyAvLyBiYXNlIG11c3QgYmUgc2hvcnQKLSAgICBWYXJpYWJsZSogR2V0KFR5cGUqIHR5cGUpOwotICAgIFZhcmlhYmxlKiBHZXQoaW50IGluZGV4KTsKLXByaXZhdGU6Ci0gICAgdmVjdG9yPFZhcmlhYmxlKj4gbV92YXJzOwotICAgIHN0cmluZyBtX2Jhc2U7Ci0gICAgaW50IG1faW5kZXg7Ci19OwotCi0jZW5kaWYgLy8gR0VORVJBVEVfSkFWQV9ICi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FpZGwvZ2VuZXJhdGVfamF2YV9iaW5kZXIuY3BwIGIvdG9vbHMvYWlkbC9nZW5lcmF0ZV9qYXZhX2JpbmRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyOTFjZWIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9nZW5lcmF0ZV9qYXZhX2JpbmRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NjAgKzAsMCBAQAotI2luY2x1ZGUgImdlbmVyYXRlX2phdmEuaCIKLSNpbmNsdWRlICJUeXBlLmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotY2xhc3MgU3R1YkNsYXNzIDogcHVibGljIENsYXNzCi17Ci1wdWJsaWM6Ci0gICAgU3R1YkNsYXNzKFR5cGUqIHR5cGUsIFR5cGUqIGludGVyZmFjZVR5cGUpOwotICAgIHZpcnR1YWwgflN0dWJDbGFzcygpOwotCi0gICAgVmFyaWFibGUqIHRyYW5zYWN0X2NvZGU7Ci0gICAgVmFyaWFibGUqIHRyYW5zYWN0X2RhdGE7Ci0gICAgVmFyaWFibGUqIHRyYW5zYWN0X3JlcGx5OwotICAgIFZhcmlhYmxlKiB0cmFuc2FjdF9mbGFnczsKLSAgICBTd2l0Y2hTdGF0ZW1lbnQqIHRyYW5zYWN0X3N3aXRjaDsKLXByaXZhdGU6Ci0gICAgdm9pZCBtYWtlX2FzX2ludGVyZmFjZShUeXBlKiBpbnRlcmZhY2VUeXBlKTsKLX07Ci0KLVN0dWJDbGFzczo6U3R1YkNsYXNzKFR5cGUqIHR5cGUsIFR5cGUqIGludGVyZmFjZVR5cGUpCi0gICAgOkNsYXNzKCkKLXsKLSAgICB0aGlzLT5jb21tZW50ID0gIi8qKiBMb2NhbC1zaWRlIElQQyBpbXBsZW1lbnRhdGlvbiBzdHViIGNsYXNzLiAqLyI7Ci0gICAgdGhpcy0+bW9kaWZpZXJzID0gUFVCTElDIHwgQUJTVFJBQ1QgfCBTVEFUSUM7Ci0gICAgdGhpcy0+d2hhdCA9IENsYXNzOjpDTEFTUzsKLSAgICB0aGlzLT50eXBlID0gdHlwZTsKLSAgICB0aGlzLT5leHRlbmRzID0gQklOREVSX05BVElWRV9UWVBFOwotICAgIHRoaXMtPmludGVyZmFjZXMucHVzaF9iYWNrKGludGVyZmFjZVR5cGUpOwotCi0gICAgLy8gZGVzY3JpcHRvcgotICAgIEZpZWxkKiBkZXNjcmlwdG9yID0gbmV3IEZpZWxkKFNUQVRJQyB8IEZJTkFMIHwgUFJJVkFURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmFyaWFibGUoU1RSSU5HX1RZUEUsICJERVNDUklQVE9SIikpOwotICAgIGRlc2NyaXB0b3ItPnZhbHVlID0gIlwiIiArIGludGVyZmFjZVR5cGUtPlF1YWxpZmllZE5hbWUoKSArICJcIiI7Ci0gICAgdGhpcy0+ZWxlbWVudHMucHVzaF9iYWNrKGRlc2NyaXB0b3IpOwotCi0gICAgLy8gY3RvcgotICAgIE1ldGhvZCogY3RvciA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIGN0b3ItPm1vZGlmaWVycyA9IFBVQkxJQzsKLSAgICAgICAgY3Rvci0+Y29tbWVudCA9ICIvKiogQ29uc3RydWN0IHRoZSBzdHViIGF0IGF0dGFjaCBpdCB0byB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgImludGVyZmFjZS4gKi8iOwotICAgICAgICBjdG9yLT5uYW1lID0gIlN0dWIiOwotICAgICAgICBjdG9yLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgIE1ldGhvZENhbGwqIGF0dGFjaCA9IG5ldyBNZXRob2RDYWxsKFRISVNfVkFMVUUsICJhdHRhY2hJbnRlcmZhY2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsIFRISVNfVkFMVUUsIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiREVTQ1JJUFRPUiIpKTsKLSAgICBjdG9yLT5zdGF0ZW1lbnRzLT5BZGQoYXR0YWNoKTsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2soY3Rvcik7Ci0KLSAgICAvLyBhc0ludGVyZmFjZQotICAgIG1ha2VfYXNfaW50ZXJmYWNlKGludGVyZmFjZVR5cGUpOwotCi0gICAgLy8gYXNCaW5kZXIKLSAgICBNZXRob2QqIGFzQmluZGVyID0gbmV3IE1ldGhvZDsKLSAgICAgICAgYXNCaW5kZXItPm1vZGlmaWVycyA9IFBVQkxJQyB8IE9WRVJSSURFOwotICAgICAgICBhc0JpbmRlci0+cmV0dXJuVHlwZSA9IElCSU5ERVJfVFlQRTsKLSAgICAgICAgYXNCaW5kZXItPm5hbWUgPSAiYXNCaW5kZXIiOwotICAgICAgICBhc0JpbmRlci0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICBhc0JpbmRlci0+c3RhdGVtZW50cy0+QWRkKG5ldyBSZXR1cm5TdGF0ZW1lbnQoVEhJU19WQUxVRSkpOwotICAgIHRoaXMtPmVsZW1lbnRzLnB1c2hfYmFjayhhc0JpbmRlcik7Ci0KLSAgICAvLyBvblRyYW5zYWN0Ci0gICAgdGhpcy0+dHJhbnNhY3RfY29kZSA9IG5ldyBWYXJpYWJsZShJTlRfVFlQRSwgImNvZGUiKTsKLSAgICB0aGlzLT50cmFuc2FjdF9kYXRhID0gbmV3IFZhcmlhYmxlKFBBUkNFTF9UWVBFLCAiZGF0YSIpOwotICAgIHRoaXMtPnRyYW5zYWN0X3JlcGx5ID0gbmV3IFZhcmlhYmxlKFBBUkNFTF9UWVBFLCAicmVwbHkiKTsKLSAgICB0aGlzLT50cmFuc2FjdF9mbGFncyA9IG5ldyBWYXJpYWJsZShJTlRfVFlQRSwgImZsYWdzIik7Ci0gICAgTWV0aG9kKiBvblRyYW5zYWN0ID0gbmV3IE1ldGhvZDsKLSAgICAgICAgb25UcmFuc2FjdC0+bW9kaWZpZXJzID0gUFVCTElDIHwgT1ZFUlJJREU7Ci0gICAgICAgIG9uVHJhbnNhY3QtPnJldHVyblR5cGUgPSBCT09MRUFOX1RZUEU7Ci0gICAgICAgIG9uVHJhbnNhY3QtPm5hbWUgPSAib25UcmFuc2FjdCI7Ci0gICAgICAgIG9uVHJhbnNhY3QtPnBhcmFtZXRlcnMucHVzaF9iYWNrKHRoaXMtPnRyYW5zYWN0X2NvZGUpOwotICAgICAgICBvblRyYW5zYWN0LT5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0aGlzLT50cmFuc2FjdF9kYXRhKTsKLSAgICAgICAgb25UcmFuc2FjdC0+cGFyYW1ldGVycy5wdXNoX2JhY2sodGhpcy0+dHJhbnNhY3RfcmVwbHkpOwotICAgICAgICBvblRyYW5zYWN0LT5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0aGlzLT50cmFuc2FjdF9mbGFncyk7Ci0gICAgICAgIG9uVHJhbnNhY3QtPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0gICAgICAgIG9uVHJhbnNhY3QtPmV4Y2VwdGlvbnMucHVzaF9iYWNrKFJFTU9URV9FWENFUFRJT05fVFlQRSk7Ci0gICAgdGhpcy0+ZWxlbWVudHMucHVzaF9iYWNrKG9uVHJhbnNhY3QpOwotICAgIHRoaXMtPnRyYW5zYWN0X3N3aXRjaCA9IG5ldyBTd2l0Y2hTdGF0ZW1lbnQodGhpcy0+dHJhbnNhY3RfY29kZSk7Ci0KLSAgICBvblRyYW5zYWN0LT5zdGF0ZW1lbnRzLT5BZGQodGhpcy0+dHJhbnNhY3Rfc3dpdGNoKTsKLSAgICBNZXRob2RDYWxsKiBzdXBlckNhbGwgPSBuZXcgTWV0aG9kQ2FsbChTVVBFUl9WQUxVRSwgIm9uVHJhbnNhY3QiLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+dHJhbnNhY3RfY29kZSwgdGhpcy0+dHJhbnNhY3RfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRyYW5zYWN0X3JlcGx5LCB0aGlzLT50cmFuc2FjdF9mbGFncyk7Ci0gICAgb25UcmFuc2FjdC0+c3RhdGVtZW50cy0+QWRkKG5ldyBSZXR1cm5TdGF0ZW1lbnQoc3VwZXJDYWxsKSk7Ci19Ci0KLVN0dWJDbGFzczo6flN0dWJDbGFzcygpCi17Ci19Ci0KLXZvaWQKLVN0dWJDbGFzczo6bWFrZV9hc19pbnRlcmZhY2UoVHlwZSAqaW50ZXJmYWNlVHlwZSkKLXsKLSAgICBWYXJpYWJsZSogb2JqID0gbmV3IFZhcmlhYmxlKElCSU5ERVJfVFlQRSwgIm9iaiIpOwotCi0gICAgTWV0aG9kKiBtID0gbmV3IE1ldGhvZDsKLSAgICAgICAgbS0+Y29tbWVudCA9ICIvKipcbiAqIENhc3QgYW4gSUJpbmRlciBvYmplY3QgaW50byBhbiAiOwotICAgICAgICBtLT5jb21tZW50ICs9IGludGVyZmFjZVR5cGUtPlF1YWxpZmllZE5hbWUoKTsKLSAgICAgICAgbS0+Y29tbWVudCArPSAiIGludGVyZmFjZSxcbiI7Ci0gICAgICAgIG0tPmNvbW1lbnQgKz0gIiAqIGdlbmVyYXRpbmcgYSBwcm94eSBpZiBuZWVkZWQuXG4gKi8iOwotICAgICAgICBtLT5tb2RpZmllcnMgPSBQVUJMSUMgfCBTVEFUSUM7Ci0gICAgICAgIG0tPnJldHVyblR5cGUgPSBpbnRlcmZhY2VUeXBlOwotICAgICAgICBtLT5uYW1lID0gImFzSW50ZXJmYWNlIjsKLSAgICAgICAgbS0+cGFyYW1ldGVycy5wdXNoX2JhY2sob2JqKTsKLSAgICAgICAgbS0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLQotICAgIElmU3RhdGVtZW50KiBpZnN0YXRlbWVudCA9IG5ldyBJZlN0YXRlbWVudCgpOwotICAgICAgICBpZnN0YXRlbWVudC0+ZXhwcmVzc2lvbiA9IG5ldyBDb21wYXJpc29uKG9iaiwgIj09IiwgTlVMTF9WQUxVRSk7Ci0gICAgICAgIGlmc3RhdGVtZW50LT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgICAgICBpZnN0YXRlbWVudC0+c3RhdGVtZW50cy0+QWRkKG5ldyBSZXR1cm5TdGF0ZW1lbnQoTlVMTF9WQUxVRSkpOwotICAgIG0tPnN0YXRlbWVudHMtPkFkZChpZnN0YXRlbWVudCk7Ci0KLSAgICAvLyBJSW50ZXJmYWNlIGlpbiA9IG9iai5xdWVyeUxvY2FsSW50ZXJmYWNlKERFU0NSSVBUT1IpCi0gICAgTWV0aG9kQ2FsbCogcXVlcnlMb2NhbEludGVyZmFjZSA9IG5ldyBNZXRob2RDYWxsKG9iaiwgInF1ZXJ5TG9jYWxJbnRlcmZhY2UiKTsKLSAgICBxdWVyeUxvY2FsSW50ZXJmYWNlLT5hcmd1bWVudHMucHVzaF9iYWNrKG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiREVTQ1JJUFRPUiIpKTsKLSAgICBJSW50ZXJmYWNlVHlwZSogaWluVHlwZSA9IG5ldyBJSW50ZXJmYWNlVHlwZSgpOwotICAgIFZhcmlhYmxlICppaW4gPSBuZXcgVmFyaWFibGUoaWluVHlwZSwgImlpbiIpOwotICAgIFZhcmlhYmxlRGVjbGFyYXRpb24qIGlpblZkID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oaWluLCBxdWVyeUxvY2FsSW50ZXJmYWNlLCBOVUxMKTsKLSAgICBtLT5zdGF0ZW1lbnRzLT5BZGQoaWluVmQpOwotCi0gICAgLy8gRW5zdXJlIHRoZSBpbnN0YW5jZSB0eXBlIG9mIHRoZSBsb2NhbCBvYmplY3QgaXMgYXMgZXhwZWN0ZWQuCi0gICAgLy8gT25lIHNjZW5hcmlvIHdoZXJlIHRoaXMgaXMgbmVlZGVkIGlzIGlmIGFub3RoZXIgcGFja2FnZSAod2l0aCBhCi0gICAgLy8gZGlmZmVyZW50IGNsYXNzIGxvYWRlcikgcnVucyBpbiB0aGUgc2FtZSBwcm9jZXNzIGFzIHRoZSBzZXJ2aWNlLgotCi0gICAgLy8gaWYgKGlpbiAhPSBudWxsICYmIGlpbiBpbnN0YW5jZW9mIDxpbnRlcmZhY2VUeXBlPikgcmV0dXJuICg8aW50ZXJmYWNlVHlwZT4pIGlpbjsKLSAgICBDb21wYXJpc29uKiBpaW5Ob3ROdWxsID0gbmV3IENvbXBhcmlzb24oaWluLCAiIT0iLCBOVUxMX1ZBTFVFKTsKLSAgICBDb21wYXJpc29uKiBpbnN0T2ZDaGVjayA9IG5ldyBDb21wYXJpc29uKGlpbiwgIiBpbnN0YW5jZW9mICIsCi0gICAgICAgICAgICBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oaW50ZXJmYWNlVHlwZS0+UXVhbGlmaWVkTmFtZSgpKSk7Ci0gICAgSWZTdGF0ZW1lbnQqIGluc3RPZlN0YXRlbWVudCA9IG5ldyBJZlN0YXRlbWVudCgpOwotICAgICAgICBpbnN0T2ZTdGF0ZW1lbnQtPmV4cHJlc3Npb24gPSBuZXcgQ29tcGFyaXNvbihpaW5Ob3ROdWxsLCAiJiYiLCBpbnN0T2ZDaGVjayk7Ci0gICAgICAgIGluc3RPZlN0YXRlbWVudC0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICAgICAgaW5zdE9mU3RhdGVtZW50LT5zdGF0ZW1lbnRzLT5BZGQobmV3IFJldHVyblN0YXRlbWVudChuZXcgQ2FzdChpbnRlcmZhY2VUeXBlLCBpaW4pKSk7Ci0gICAgbS0+c3RhdGVtZW50cy0+QWRkKGluc3RPZlN0YXRlbWVudCk7Ci0KLSAgICBzdHJpbmcgcHJveHlUeXBlID0gaW50ZXJmYWNlVHlwZS0+UXVhbGlmaWVkTmFtZSgpOwotICAgIHByb3h5VHlwZSArPSAiLlN0dWIuUHJveHkiOwotICAgIE5ld0V4cHJlc3Npb24qIG5lID0gbmV3IE5ld0V4cHJlc3Npb24oTkFNRVMuRmluZChwcm94eVR5cGUpKTsKLSAgICBuZS0+YXJndW1lbnRzLnB1c2hfYmFjayhvYmopOwotICAgIG0tPnN0YXRlbWVudHMtPkFkZChuZXcgUmV0dXJuU3RhdGVtZW50KG5lKSk7Ci0KLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2sobSk7Ci19Ci0KLQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1jbGFzcyBQcm94eUNsYXNzIDogcHVibGljIENsYXNzCi17Ci1wdWJsaWM6Ci0gICAgUHJveHlDbGFzcyhUeXBlKiB0eXBlLCBJbnRlcmZhY2VUeXBlKiBpbnRlcmZhY2VUeXBlKTsKLSAgICB2aXJ0dWFsIH5Qcm94eUNsYXNzKCk7Ci0KLSAgICBWYXJpYWJsZSogbVJlbW90ZTsKLSAgICBib29sIG1PbmVXYXk7Ci19OwotCi1Qcm94eUNsYXNzOjpQcm94eUNsYXNzKFR5cGUqIHR5cGUsIEludGVyZmFjZVR5cGUqIGludGVyZmFjZVR5cGUpCi0gICAgOkNsYXNzKCkKLXsKLSAgICB0aGlzLT5tb2RpZmllcnMgPSBQUklWQVRFIHwgU1RBVElDOwotICAgIHRoaXMtPndoYXQgPSBDbGFzczo6Q0xBU1M7Ci0gICAgdGhpcy0+dHlwZSA9IHR5cGU7Ci0gICAgdGhpcy0+aW50ZXJmYWNlcy5wdXNoX2JhY2soaW50ZXJmYWNlVHlwZSk7Ci0KLSAgICBtT25lV2F5ID0gaW50ZXJmYWNlVHlwZS0+T25lV2F5KCk7Ci0KLSAgICAvLyBJQmluZGVyIG1SZW1vdGUKLSAgICBtUmVtb3RlID0gbmV3IFZhcmlhYmxlKElCSU5ERVJfVFlQRSwgIm1SZW1vdGUiKTsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2sobmV3IEZpZWxkKFBSSVZBVEUsIG1SZW1vdGUpKTsKLQotICAgIC8vIFByb3h5KCkKLSAgICBWYXJpYWJsZSogcmVtb3RlID0gbmV3IFZhcmlhYmxlKElCSU5ERVJfVFlQRSwgInJlbW90ZSIpOwotICAgIE1ldGhvZCogY3RvciA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIGN0b3ItPm5hbWUgPSAiUHJveHkiOwotICAgICAgICBjdG9yLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgICAgICBjdG9yLT5wYXJhbWV0ZXJzLnB1c2hfYmFjayhyZW1vdGUpOwotICAgIGN0b3ItPnN0YXRlbWVudHMtPkFkZChuZXcgQXNzaWdubWVudChtUmVtb3RlLCByZW1vdGUpKTsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2soY3Rvcik7Ci0KLSAgICAvLyBJQmluZGVyIGFzQmluZGVyKCkKLSAgICBNZXRob2QqIGFzQmluZGVyID0gbmV3IE1ldGhvZDsKLSAgICAgICAgYXNCaW5kZXItPm1vZGlmaWVycyA9IFBVQkxJQyB8IE9WRVJSSURFOwotICAgICAgICBhc0JpbmRlci0+cmV0dXJuVHlwZSA9IElCSU5ERVJfVFlQRTsKLSAgICAgICAgYXNCaW5kZXItPm5hbWUgPSAiYXNCaW5kZXIiOwotICAgICAgICBhc0JpbmRlci0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICBhc0JpbmRlci0+c3RhdGVtZW50cy0+QWRkKG5ldyBSZXR1cm5TdGF0ZW1lbnQobVJlbW90ZSkpOwotICAgIHRoaXMtPmVsZW1lbnRzLnB1c2hfYmFjayhhc0JpbmRlcik7Ci19Ci0KLVByb3h5Q2xhc3M6On5Qcm94eUNsYXNzKCkKLXsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIHZvaWQKLWdlbmVyYXRlX25ld19hcnJheShUeXBlKiB0LCBTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwpCi17Ci0gICAgVmFyaWFibGUqIGxlbiA9IG5ldyBWYXJpYWJsZShJTlRfVFlQRSwgdi0+bmFtZSArICJfbGVuZ3RoIik7Ci0gICAgYWRkVG8tPkFkZChuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihsZW4sIG5ldyBNZXRob2RDYWxsKHBhcmNlbCwgInJlYWRJbnQiKSkpOwotICAgIElmU3RhdGVtZW50KiBsZW5jaGVjayA9IG5ldyBJZlN0YXRlbWVudCgpOwotICAgIGxlbmNoZWNrLT5leHByZXNzaW9uID0gbmV3IENvbXBhcmlzb24obGVuLCAiPCIsIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiMCIpKTsKLSAgICBsZW5jaGVjay0+c3RhdGVtZW50cy0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIE5VTExfVkFMVUUpKTsKLSAgICBsZW5jaGVjay0+ZWxzZWlmID0gbmV3IElmU3RhdGVtZW50KCk7Ci0gICAgbGVuY2hlY2stPmVsc2VpZi0+c3RhdGVtZW50cy0+QWRkKG5ldyBBc3NpZ25tZW50KHYsCi0gICAgICAgICAgICAgICAgbmV3IE5ld0FycmF5RXhwcmVzc2lvbih0LCBsZW4pKSk7Ci0gICAgYWRkVG8tPkFkZChsZW5jaGVjayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW5lcmF0ZV93cml0ZV90b19wYXJjZWwoVHlwZSogdCwgU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBpbnQgZmxhZ3MpCi17Ci0gICAgaWYgKHYtPmRpbWVuc2lvbiA9PSAwKSB7Ci0gICAgICAgIHQtPldyaXRlVG9QYXJjZWwoYWRkVG8sIHYsIHBhcmNlbCwgZmxhZ3MpOwotICAgIH0KLSAgICBpZiAodi0+ZGltZW5zaW9uID09IDEpIHsKLSAgICAgICAgdC0+V3JpdGVBcnJheVRvUGFyY2VsKGFkZFRvLCB2LCBwYXJjZWwsIGZsYWdzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW5lcmF0ZV9jcmVhdGVfZnJvbV9wYXJjZWwoVHlwZSogdCwgU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBWYXJpYWJsZSogdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSogcGFyY2VsLCBWYXJpYWJsZSoqIGNsKQotewotICAgIGlmICh2LT5kaW1lbnNpb24gPT0gMCkgewotICAgICAgICB0LT5DcmVhdGVGcm9tUGFyY2VsKGFkZFRvLCB2LCBwYXJjZWwsIGNsKTsKLSAgICB9Ci0gICAgaWYgKHYtPmRpbWVuc2lvbiA9PSAxKSB7Ci0gICAgICAgIHQtPkNyZWF0ZUFycmF5RnJvbVBhcmNlbChhZGRUbywgdiwgcGFyY2VsLCBjbCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVfcmVhZF9mcm9tX3BhcmNlbChUeXBlKiB0LCBTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlKiBwYXJjZWwsIFZhcmlhYmxlKiogY2wpCi17Ci0gICAgaWYgKHYtPmRpbWVuc2lvbiA9PSAwKSB7Ci0gICAgICAgIHQtPlJlYWRGcm9tUGFyY2VsKGFkZFRvLCB2LCBwYXJjZWwsIGNsKTsKLSAgICB9Ci0gICAgaWYgKHYtPmRpbWVuc2lvbiA9PSAxKSB7Ci0gICAgICAgIHQtPlJlYWRBcnJheUZyb21QYXJjZWwoYWRkVG8sIHYsIHBhcmNlbCwgY2wpOwotICAgIH0KLX0KLQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVfbWV0aG9kKGNvbnN0IG1ldGhvZF90eXBlKiBtZXRob2QsIENsYXNzKiBpbnRlcmZhY2UsCi0gICAgICAgICAgICAgICAgICAgIFN0dWJDbGFzcyogc3R1YkNsYXNzLCBQcm94eUNsYXNzKiBwcm94eUNsYXNzLCBpbnQgaW5kZXgpCi17Ci0gICAgYXJnX3R5cGUqIGFyZzsKLSAgICBpbnQgaTsKLSAgICBib29sIGhhc091dFBhcmFtcyA9IGZhbHNlOwotCi0gICAgY29uc3QgYm9vbCBvbmV3YXkgPSBwcm94eUNsYXNzLT5tT25lV2F5IHx8IG1ldGhvZC0+b25ld2F5OwotCi0gICAgLy8gPT0gdGhlIFRSQU5TQUNUXyBjb25zdGFudCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBzdHJpbmcgdHJhbnNhY3RDb2RlTmFtZSA9ICJUUkFOU0FDVElPTl8iOwotICAgIHRyYW5zYWN0Q29kZU5hbWUgKz0gbWV0aG9kLT5uYW1lLmRhdGE7Ci0KLSAgICBjaGFyIHRyYW5zYWN0Q29kZVZhbHVlWzYwXTsKLSAgICBzcHJpbnRmKHRyYW5zYWN0Q29kZVZhbHVlLCAiKGFuZHJvaWQub3MuSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgJWQpIiwgaW5kZXgpOwotCi0gICAgRmllbGQqIHRyYW5zYWN0Q29kZSA9IG5ldyBGaWVsZChTVEFUSUMgfCBGSU5BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmFyaWFibGUoSU5UX1RZUEUsIHRyYW5zYWN0Q29kZU5hbWUpKTsKLSAgICB0cmFuc2FjdENvZGUtPnZhbHVlID0gdHJhbnNhY3RDb2RlVmFsdWU7Ci0gICAgc3R1YkNsYXNzLT5lbGVtZW50cy5wdXNoX2JhY2sodHJhbnNhY3RDb2RlKTsKLQotICAgIC8vID09IHRoZSBkZWNsYXJhdGlvbiBpbiB0aGUgaW50ZXJmYWNlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgTWV0aG9kKiBkZWNsID0gbmV3IE1ldGhvZDsKLSAgICAgICAgZGVjbC0+Y29tbWVudCA9IGdhdGhlcl9jb21tZW50cyhtZXRob2QtPmNvbW1lbnRzX3Rva2VuLT5leHRyYSk7Ci0gICAgICAgIGRlY2wtPm1vZGlmaWVycyA9IFBVQkxJQzsKLSAgICAgICAgZGVjbC0+cmV0dXJuVHlwZSA9IE5BTUVTLlNlYXJjaChtZXRob2QtPnR5cGUudHlwZS5kYXRhKTsKLSAgICAgICAgZGVjbC0+cmV0dXJuVHlwZURpbWVuc2lvbiA9IG1ldGhvZC0+dHlwZS5kaW1lbnNpb247Ci0gICAgICAgIGRlY2wtPm5hbWUgPSBtZXRob2QtPm5hbWUuZGF0YTsKLQotICAgIGFyZyA9IG1ldGhvZC0+YXJnczsKLSAgICB3aGlsZSAoYXJnICE9IE5VTEwpIHsKLSAgICAgICAgZGVjbC0+cGFyYW1ldGVycy5wdXNoX2JhY2sobmV3IFZhcmlhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTLlNlYXJjaChhcmctPnR5cGUudHlwZS5kYXRhKSwgYXJnLT5uYW1lLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLT50eXBlLmRpbWVuc2lvbikpOwotICAgICAgICBhcmcgPSBhcmctPm5leHQ7Ci0gICAgfQotCi0gICAgZGVjbC0+ZXhjZXB0aW9ucy5wdXNoX2JhY2soUkVNT1RFX0VYQ0VQVElPTl9UWVBFKTsKLQotICAgIGludGVyZmFjZS0+ZWxlbWVudHMucHVzaF9iYWNrKGRlY2wpOwotCi0gICAgLy8gPT0gdGhlIHN0dWIgbWV0aG9kID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIENhc2UqIGMgPSBuZXcgQ2FzZSh0cmFuc2FjdENvZGVOYW1lKTsKLQotICAgIE1ldGhvZENhbGwqIHJlYWxDYWxsID0gbmV3IE1ldGhvZENhbGwoVEhJU19WQUxVRSwgbWV0aG9kLT5uYW1lLmRhdGEpOwotCi0gICAgLy8gaW50ZXJmYWNlIHRva2VuIHZhbGlkYXRpb24gaXMgdGhlIHZlcnkgZmlyc3QgdGhpbmcgd2UgZG8KLSAgICBjLT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwoc3R1YkNsYXNzLT50cmFuc2FjdF9kYXRhLAotICAgICAgICAgICAgImVuZm9yY2VJbnRlcmZhY2UiLCAxLCBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIkRFU0NSSVBUT1IiKSkpOwotCi0gICAgLy8gYXJncwotICAgIFZhcmlhYmxlKiBjbCA9IE5VTEw7Ci0gICAgVmFyaWFibGVGYWN0b3J5IHN0dWJBcmdzKCJfYXJnIik7Ci0gICAgYXJnID0gbWV0aG9kLT5hcmdzOwotICAgIHdoaWxlIChhcmcgIT0gTlVMTCkgewotICAgICAgICBUeXBlKiB0ID0gTkFNRVMuU2VhcmNoKGFyZy0+dHlwZS50eXBlLmRhdGEpOwotICAgICAgICBWYXJpYWJsZSogdiA9IHN0dWJBcmdzLkdldCh0KTsKLSAgICAgICAgdi0+ZGltZW5zaW9uID0gYXJnLT50eXBlLmRpbWVuc2lvbjsKLQotICAgICAgICBjLT5zdGF0ZW1lbnRzLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24odikpOwotCi0gICAgICAgIGlmIChjb252ZXJ0X2RpcmVjdGlvbihhcmctPmRpcmVjdGlvbi5kYXRhKSAmIElOX1BBUkFNRVRFUikgewotICAgICAgICAgICAgZ2VuZXJhdGVfY3JlYXRlX2Zyb21fcGFyY2VsKHQsIGMtPnN0YXRlbWVudHMsIHYsCi0gICAgICAgICAgICAgICAgICAgIHN0dWJDbGFzcy0+dHJhbnNhY3RfZGF0YSwgJmNsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhcmctPnR5cGUuZGltZW5zaW9uID09IDApIHsKLSAgICAgICAgICAgICAgICBjLT5zdGF0ZW1lbnRzLT5BZGQobmV3IEFzc2lnbm1lbnQodiwgbmV3IE5ld0V4cHJlc3Npb24odi0+dHlwZSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGFyZy0+dHlwZS5kaW1lbnNpb24gPT0gMSkgewotICAgICAgICAgICAgICAgIGdlbmVyYXRlX25ld19hcnJheSh2LT50eXBlLCBjLT5zdGF0ZW1lbnRzLCB2LAotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkNsYXNzLT50cmFuc2FjdF9kYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZFxuIiwgX19GSUxFX18sCi0gICAgICAgICAgICAgICAgICAgICAgICBfX0xJTkVfXyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZWFsQ2FsbC0+YXJndW1lbnRzLnB1c2hfYmFjayh2KTsKLQotICAgICAgICBhcmcgPSBhcmctPm5leHQ7Ci0gICAgfQotCi0gICAgLy8gdGhlIHJlYWwgY2FsbAotICAgIFZhcmlhYmxlKiBfcmVzdWx0ID0gTlVMTDsKLSAgICBpZiAoMCA9PSBzdHJjbXAobWV0aG9kLT50eXBlLnR5cGUuZGF0YSwgInZvaWQiKSkgewotICAgICAgICBjLT5zdGF0ZW1lbnRzLT5BZGQocmVhbENhbGwpOwotCi0gICAgICAgIGlmICghb25ld2F5KSB7Ci0gICAgICAgICAgICAvLyByZXBvcnQgdGhhdCB0aGVyZSB3ZXJlIG5vIGV4Y2VwdGlvbnMKLSAgICAgICAgICAgIE1ldGhvZENhbGwqIGV4ID0gbmV3IE1ldGhvZENhbGwoc3R1YkNsYXNzLT50cmFuc2FjdF9yZXBseSwKLSAgICAgICAgICAgICAgICAgICAgIndyaXRlTm9FeGNlcHRpb24iLCAwKTsKLSAgICAgICAgICAgIGMtPnN0YXRlbWVudHMtPkFkZChleCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBfcmVzdWx0ID0gbmV3IFZhcmlhYmxlKGRlY2wtPnJldHVyblR5cGUsICJfcmVzdWx0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbC0+cmV0dXJuVHlwZURpbWVuc2lvbik7Ci0gICAgICAgIGMtPnN0YXRlbWVudHMtPkFkZChuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihfcmVzdWx0LCByZWFsQ2FsbCkpOwotCi0gICAgICAgIGlmICghb25ld2F5KSB7Ci0gICAgICAgICAgICAvLyByZXBvcnQgdGhhdCB0aGVyZSB3ZXJlIG5vIGV4Y2VwdGlvbnMKLSAgICAgICAgICAgIE1ldGhvZENhbGwqIGV4ID0gbmV3IE1ldGhvZENhbGwoc3R1YkNsYXNzLT50cmFuc2FjdF9yZXBseSwKLSAgICAgICAgICAgICAgICAgICAgIndyaXRlTm9FeGNlcHRpb24iLCAwKTsKLSAgICAgICAgICAgIGMtPnN0YXRlbWVudHMtPkFkZChleCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtYXJzaGFsbCB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIGdlbmVyYXRlX3dyaXRlX3RvX3BhcmNlbChkZWNsLT5yZXR1cm5UeXBlLCBjLT5zdGF0ZW1lbnRzLCBfcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkNsYXNzLT50cmFuc2FjdF9yZXBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU6OlBBUkNFTEFCTEVfV1JJVEVfUkVUVVJOX1ZBTFVFKTsKLSAgICB9Ci0KLSAgICAvLyBvdXQgcGFyYW1ldGVycwotICAgIGkgPSAwOwotICAgIGFyZyA9IG1ldGhvZC0+YXJnczsKLSAgICB3aGlsZSAoYXJnICE9IE5VTEwpIHsKLSAgICAgICAgVHlwZSogdCA9IE5BTUVTLlNlYXJjaChhcmctPnR5cGUudHlwZS5kYXRhKTsKLSAgICAgICAgVmFyaWFibGUqIHYgPSBzdHViQXJncy5HZXQoaSsrKTsKLQotICAgICAgICBpZiAoY29udmVydF9kaXJlY3Rpb24oYXJnLT5kaXJlY3Rpb24uZGF0YSkgJiBPVVRfUEFSQU1FVEVSKSB7Ci0gICAgICAgICAgICBnZW5lcmF0ZV93cml0ZV90b19wYXJjZWwodCwgYy0+c3RhdGVtZW50cywgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkNsYXNzLT50cmFuc2FjdF9yZXBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZTo6UEFSQ0VMQUJMRV9XUklURV9SRVRVUk5fVkFMVUUpOwotICAgICAgICAgICAgaGFzT3V0UGFyYW1zID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGFyZyA9IGFyZy0+bmV4dDsKLSAgICB9Ci0KLSAgICAvLyByZXR1cm4gdHJ1ZQotICAgIGMtPnN0YXRlbWVudHMtPkFkZChuZXcgUmV0dXJuU3RhdGVtZW50KFRSVUVfVkFMVUUpKTsKLSAgICBzdHViQ2xhc3MtPnRyYW5zYWN0X3N3aXRjaC0+Y2FzZXMucHVzaF9iYWNrKGMpOwotCi0gICAgLy8gPT0gdGhlIHByb3h5IG1ldGhvZCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBNZXRob2QqIHByb3h5ID0gbmV3IE1ldGhvZDsKLSAgICAgICAgcHJveHktPmNvbW1lbnQgPSBnYXRoZXJfY29tbWVudHMobWV0aG9kLT5jb21tZW50c190b2tlbi0+ZXh0cmEpOwotICAgICAgICBwcm94eS0+bW9kaWZpZXJzID0gUFVCTElDIHwgT1ZFUlJJREU7Ci0gICAgICAgIHByb3h5LT5yZXR1cm5UeXBlID0gTkFNRVMuU2VhcmNoKG1ldGhvZC0+dHlwZS50eXBlLmRhdGEpOwotICAgICAgICBwcm94eS0+cmV0dXJuVHlwZURpbWVuc2lvbiA9IG1ldGhvZC0+dHlwZS5kaW1lbnNpb247Ci0gICAgICAgIHByb3h5LT5uYW1lID0gbWV0aG9kLT5uYW1lLmRhdGE7Ci0gICAgICAgIHByb3h5LT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgICAgICBhcmcgPSBtZXRob2QtPmFyZ3M7Ci0gICAgICAgIHdoaWxlIChhcmcgIT0gTlVMTCkgewotICAgICAgICAgICAgcHJveHktPnBhcmFtZXRlcnMucHVzaF9iYWNrKG5ldyBWYXJpYWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSksIGFyZy0+bmFtZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy0+dHlwZS5kaW1lbnNpb24pKTsKLSAgICAgICAgICAgIGFyZyA9IGFyZy0+bmV4dDsKLSAgICAgICAgfQotICAgICAgICBwcm94eS0+ZXhjZXB0aW9ucy5wdXNoX2JhY2soUkVNT1RFX0VYQ0VQVElPTl9UWVBFKTsKLSAgICBwcm94eUNsYXNzLT5lbGVtZW50cy5wdXNoX2JhY2socHJveHkpOwotCi0gICAgLy8gdGhlIHBhcmNlbHMKLSAgICBWYXJpYWJsZSogX2RhdGEgPSBuZXcgVmFyaWFibGUoUEFSQ0VMX1RZUEUsICJfZGF0YSIpOwotICAgIHByb3h5LT5zdGF0ZW1lbnRzLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBNZXRob2RDYWxsKFBBUkNFTF9UWVBFLCAib2J0YWluIikpKTsKLSAgICBWYXJpYWJsZSogX3JlcGx5ID0gTlVMTDsKLSAgICBpZiAoIW9uZXdheSkgewotICAgICAgICBfcmVwbHkgPSBuZXcgVmFyaWFibGUoUEFSQ0VMX1RZUEUsICJfcmVwbHkiKTsKLSAgICAgICAgcHJveHktPnN0YXRlbWVudHMtPkFkZChuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihfcmVwbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTWV0aG9kQ2FsbChQQVJDRUxfVFlQRSwgIm9idGFpbiIpKSk7Ci0gICAgfQotCi0gICAgLy8gdGhlIHJldHVybiB2YWx1ZQotICAgIF9yZXN1bHQgPSBOVUxMOwotICAgIGlmICgwICE9IHN0cmNtcChtZXRob2QtPnR5cGUudHlwZS5kYXRhLCAidm9pZCIpKSB7Ci0gICAgICAgIF9yZXN1bHQgPSBuZXcgVmFyaWFibGUocHJveHktPnJldHVyblR5cGUsICJfcmVzdWx0IiwKLSAgICAgICAgICAgICAgICBtZXRob2QtPnR5cGUuZGltZW5zaW9uKTsKLSAgICAgICAgcHJveHktPnN0YXRlbWVudHMtPkFkZChuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihfcmVzdWx0KSk7Ci0gICAgfQotCi0gICAgLy8gdHJ5IGFuZCBmaW5hbGx5Ci0gICAgVHJ5U3RhdGVtZW50KiB0cnlTdGF0ZW1lbnQgPSBuZXcgVHJ5U3RhdGVtZW50KCk7Ci0gICAgcHJveHktPnN0YXRlbWVudHMtPkFkZCh0cnlTdGF0ZW1lbnQpOwotICAgIEZpbmFsbHlTdGF0ZW1lbnQqIGZpbmFsbHlTdGF0ZW1lbnQgPSBuZXcgRmluYWxseVN0YXRlbWVudCgpOwotICAgIHByb3h5LT5zdGF0ZW1lbnRzLT5BZGQoZmluYWxseVN0YXRlbWVudCk7Ci0KLSAgICAvLyB0aGUgaW50ZXJmYWNlIGlkZW50aWZpZXIgdG9rZW46IHRoZSBERVNDUklQVE9SIGNvbnN0YW50LCBtYXJzaGFsbGVkIGFzIGEgc3RyaW5nCi0gICAgdHJ5U3RhdGVtZW50LT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwoX2RhdGEsICJ3cml0ZUludGVyZmFjZVRva2VuIiwKLSAgICAgICAgICAgIDEsIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiREVTQ1JJUFRPUiIpKSk7Ci0KLSAgICAvLyB0aGUgcGFyYW1ldGVycwotICAgIGFyZyA9IG1ldGhvZC0+YXJnczsKLSAgICB3aGlsZSAoYXJnICE9IE5VTEwpIHsKLSAgICAgICAgVHlwZSogdCA9IE5BTUVTLlNlYXJjaChhcmctPnR5cGUudHlwZS5kYXRhKTsKLSAgICAgICAgVmFyaWFibGUqIHYgPSBuZXcgVmFyaWFibGUodCwgYXJnLT5uYW1lLmRhdGEsIGFyZy0+dHlwZS5kaW1lbnNpb24pOwotICAgICAgICBpbnQgZGlyID0gY29udmVydF9kaXJlY3Rpb24oYXJnLT5kaXJlY3Rpb24uZGF0YSk7Ci0gICAgICAgIGlmIChkaXIgPT0gT1VUX1BBUkFNRVRFUiAmJiBhcmctPnR5cGUuZGltZW5zaW9uICE9IDApIHsKLSAgICAgICAgICAgIElmU3RhdGVtZW50KiBjaGVja2xlbiA9IG5ldyBJZlN0YXRlbWVudCgpOwotICAgICAgICAgICAgY2hlY2tsZW4tPmV4cHJlc3Npb24gPSBuZXcgQ29tcGFyaXNvbih2LCAiPT0iLCBOVUxMX1ZBTFVFKTsKLSAgICAgICAgICAgIGNoZWNrbGVuLT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwoX2RhdGEsICJ3cml0ZUludCIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGl0ZXJhbEV4cHJlc3Npb24oIi0xIikpKTsKLSAgICAgICAgICAgIGNoZWNrbGVuLT5lbHNlaWYgPSBuZXcgSWZTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIGNoZWNrbGVuLT5lbHNlaWYtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbChfZGF0YSwgIndyaXRlSW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDEsIG5ldyBGaWVsZFZhcmlhYmxlKHYsICJsZW5ndGgiKSkpOwotICAgICAgICAgICAgdHJ5U3RhdGVtZW50LT5zdGF0ZW1lbnRzLT5BZGQoY2hlY2tsZW4pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGRpciAmIElOX1BBUkFNRVRFUikgewotICAgICAgICAgICAgZ2VuZXJhdGVfd3JpdGVfdG9fcGFyY2VsKHQsIHRyeVN0YXRlbWVudC0+c3RhdGVtZW50cywgdiwgX2RhdGEsIDApOwotICAgICAgICB9Ci0gICAgICAgIGFyZyA9IGFyZy0+bmV4dDsKLSAgICB9Ci0KLSAgICAvLyB0aGUgdHJhbnNhY3QgY2FsbAotICAgIE1ldGhvZENhbGwqIGNhbGwgPSBuZXcgTWV0aG9kQ2FsbChwcm94eUNsYXNzLT5tUmVtb3RlLCAidHJhbnNhY3QiLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiU3R1Yi4iICsgdHJhbnNhY3RDb2RlTmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RhdGEsIF9yZXBseSA/IF9yZXBseSA6IE5VTExfVkFMVUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpdGVyYWxFeHByZXNzaW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmV3YXkgPyAiYW5kcm9pZC5vcy5JQmluZGVyLkZMQUdfT05FV0FZIiA6ICIwIikpOwotICAgIHRyeVN0YXRlbWVudC0+c3RhdGVtZW50cy0+QWRkKGNhbGwpOwotCi0gICAgLy8gdGhyb3cgYmFjayBleGNlcHRpb25zLgotICAgIGlmIChfcmVwbHkpIHsKLSAgICAgICAgTWV0aG9kQ2FsbCogZXggPSBuZXcgTWV0aG9kQ2FsbChfcmVwbHksICJyZWFkRXhjZXB0aW9uIiwgMCk7Ci0gICAgICAgIHRyeVN0YXRlbWVudC0+c3RhdGVtZW50cy0+QWRkKGV4KTsKLSAgICB9Ci0KLSAgICAvLyByZXR1cm5pbmcgYW5kIGNsZWFudXAKLSAgICBpZiAoX3JlcGx5ICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKF9yZXN1bHQgIT0gTlVMTCkgewotICAgICAgICAgICAgZ2VuZXJhdGVfY3JlYXRlX2Zyb21fcGFyY2VsKHByb3h5LT5yZXR1cm5UeXBlLAotICAgICAgICAgICAgICAgICAgICB0cnlTdGF0ZW1lbnQtPnN0YXRlbWVudHMsIF9yZXN1bHQsIF9yZXBseSwgJmNsKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoZSBvdXQvaW5vdXQgcGFyYW1ldGVycwotICAgICAgICBhcmcgPSBtZXRob2QtPmFyZ3M7Ci0gICAgICAgIHdoaWxlIChhcmcgIT0gTlVMTCkgewotICAgICAgICAgICAgVHlwZSogdCA9IE5BTUVTLlNlYXJjaChhcmctPnR5cGUudHlwZS5kYXRhKTsKLSAgICAgICAgICAgIFZhcmlhYmxlKiB2ID0gbmV3IFZhcmlhYmxlKHQsIGFyZy0+bmFtZS5kYXRhLCBhcmctPnR5cGUuZGltZW5zaW9uKTsKLSAgICAgICAgICAgIGlmIChjb252ZXJ0X2RpcmVjdGlvbihhcmctPmRpcmVjdGlvbi5kYXRhKSAmIE9VVF9QQVJBTUVURVIpIHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZV9yZWFkX2Zyb21fcGFyY2VsKHQsIHRyeVN0YXRlbWVudC0+c3RhdGVtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiwgX3JlcGx5LCAmY2wpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJnID0gYXJnLT5uZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWxseVN0YXRlbWVudC0+c3RhdGVtZW50cy0+QWRkKG5ldyBNZXRob2RDYWxsKF9yZXBseSwgInJlY3ljbGUiKSk7Ci0gICAgfQotICAgIGZpbmFsbHlTdGF0ZW1lbnQtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbChfZGF0YSwgInJlY3ljbGUiKSk7Ci0KLSAgICBpZiAoX3Jlc3VsdCAhPSBOVUxMKSB7Ci0gICAgICAgIHByb3h5LT5zdGF0ZW1lbnRzLT5BZGQobmV3IFJldHVyblN0YXRlbWVudChfcmVzdWx0KSk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVfaW50ZXJmYWNlX2Rlc2NyaXB0b3JzKFN0dWJDbGFzcyogc3R1YiwgUHJveHlDbGFzcyogcHJveHkpCi17Ci0gICAgLy8gdGhlIGludGVyZmFjZSBkZXNjcmlwdG9yIHRyYW5zYWN0aW9uIGhhbmRsZXIKLSAgICBDYXNlKiBjID0gbmV3IENhc2UoIklOVEVSRkFDRV9UUkFOU0FDVElPTiIpOwotICAgIGMtPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbChzdHViLT50cmFuc2FjdF9yZXBseSwgIndyaXRlU3RyaW5nIiwKLSAgICAgICAgICAgIDEsIG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiREVTQ1JJUFRPUiIpKSk7Ci0gICAgYy0+c3RhdGVtZW50cy0+QWRkKG5ldyBSZXR1cm5TdGF0ZW1lbnQoVFJVRV9WQUxVRSkpOwotICAgIHN0dWItPnRyYW5zYWN0X3N3aXRjaC0+Y2FzZXMucHVzaF9iYWNrKGMpOwotCi0gICAgLy8gYW5kIHRoZSBwcm94eS1zaWRlIG1ldGhvZCByZXR1cm5pbmcgdGhlIGRlc2NyaXB0b3IgZGlyZWN0bHkKLSAgICBNZXRob2QqIGdldERlc2MgPSBuZXcgTWV0aG9kOwotICAgIGdldERlc2MtPm1vZGlmaWVycyA9IFBVQkxJQzsKLSAgICBnZXREZXNjLT5yZXR1cm5UeXBlID0gU1RSSU5HX1RZUEU7Ci0gICAgZ2V0RGVzYy0+cmV0dXJuVHlwZURpbWVuc2lvbiA9IDA7Ci0gICAgZ2V0RGVzYy0+bmFtZSA9ICJnZXRJbnRlcmZhY2VEZXNjcmlwdG9yIjsKLSAgICBnZXREZXNjLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgIGdldERlc2MtPnN0YXRlbWVudHMtPkFkZChuZXcgUmV0dXJuU3RhdGVtZW50KG5ldyBMaXRlcmFsRXhwcmVzc2lvbigiREVTQ1JJUFRPUiIpKSk7Ci0gICAgcHJveHktPmVsZW1lbnRzLnB1c2hfYmFjayhnZXREZXNjKTsKLX0KLQotQ2xhc3MqCi1nZW5lcmF0ZV9iaW5kZXJfaW50ZXJmYWNlX2NsYXNzKGNvbnN0IGludGVyZmFjZV90eXBlKiBpZmFjZSkKLXsKLSAgICBJbnRlcmZhY2VUeXBlKiBpbnRlcmZhY2VUeXBlID0gc3RhdGljX2Nhc3Q8SW50ZXJmYWNlVHlwZSo+KAotICAgICAgICBOQU1FUy5GaW5kKGlmYWNlLT5wYWNrYWdlLCBpZmFjZS0+bmFtZS5kYXRhKSk7Ci0KLSAgICAvLyB0aGUgaW50ZXJmYWNlIGNsYXNzCi0gICAgQ2xhc3MqIGludGVyZmFjZSA9IG5ldyBDbGFzczsKLSAgICAgICAgaW50ZXJmYWNlLT5jb21tZW50ID0gZ2F0aGVyX2NvbW1lbnRzKGlmYWNlLT5jb21tZW50c190b2tlbi0+ZXh0cmEpOwotICAgICAgICBpbnRlcmZhY2UtPm1vZGlmaWVycyA9IFBVQkxJQzsKLSAgICAgICAgaW50ZXJmYWNlLT53aGF0ID0gQ2xhc3M6OklOVEVSRkFDRTsKLSAgICAgICAgaW50ZXJmYWNlLT50eXBlID0gaW50ZXJmYWNlVHlwZTsKLSAgICAgICAgaW50ZXJmYWNlLT5pbnRlcmZhY2VzLnB1c2hfYmFjayhJSU5URVJGQUNFX1RZUEUpOwotCi0gICAgLy8gdGhlIHN0dWIgaW5uZXIgY2xhc3MKLSAgICBTdHViQ2xhc3MqIHN0dWIgPSBuZXcgU3R1YkNsYXNzKAotICAgICAgICBOQU1FUy5GaW5kKGlmYWNlLT5wYWNrYWdlLCBhcHBlbmQoaWZhY2UtPm5hbWUuZGF0YSwgIi5TdHViIikuY19zdHIoKSksCi0gICAgICAgIGludGVyZmFjZVR5cGUpOwotICAgIGludGVyZmFjZS0+ZWxlbWVudHMucHVzaF9iYWNrKHN0dWIpOwotCi0gICAgLy8gdGhlIHByb3h5IGlubmVyIGNsYXNzCi0gICAgUHJveHlDbGFzcyogcHJveHkgPSBuZXcgUHJveHlDbGFzcygKLSAgICAgICAgTkFNRVMuRmluZChpZmFjZS0+cGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQoaWZhY2UtPm5hbWUuZGF0YSwgIi5TdHViLlByb3h5IikuY19zdHIoKSksCi0gICAgICAgIGludGVyZmFjZVR5cGUpOwotICAgIHN0dWItPmVsZW1lbnRzLnB1c2hfYmFjayhwcm94eSk7Ci0KLSAgICAvLyBzdHViIGFuZCBwcm94eSBzdXBwb3J0IGZvciBnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkKLSAgICBnZW5lcmF0ZV9pbnRlcmZhY2VfZGVzY3JpcHRvcnMoc3R1YiwgcHJveHkpOwotCi0gICAgLy8gYWxsIHRoZSBkZWNsYXJlZCBtZXRob2RzIG9mIHRoZSBpbnRlcmZhY2UKLSAgICBpbnQgaW5kZXggPSAwOwotICAgIGludGVyZmFjZV9pdGVtX3R5cGUqIGl0ZW0gPSBpZmFjZS0+aW50ZXJmYWNlX2l0ZW1zOwotICAgIHdoaWxlIChpdGVtICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKGl0ZW0tPml0ZW1fdHlwZSA9PSBNRVRIT0RfVFlQRSkgewotICAgICAgICAgICAgbWV0aG9kX3R5cGUgKiBtZXRob2RfaXRlbSA9IChtZXRob2RfdHlwZSopIGl0ZW07Ci0gICAgICAgICAgICBnZW5lcmF0ZV9tZXRob2QobWV0aG9kX2l0ZW0sIGludGVyZmFjZSwgc3R1YiwgcHJveHksIG1ldGhvZF9pdGVtLT5hc3NpZ25lZF9pZCk7Ci0gICAgICAgIH0KLSAgICAgICAgaXRlbSA9IGl0ZW0tPm5leHQ7Ci0gICAgICAgIGluZGV4Kys7Ci0gICAgfQotCi0gICAgcmV0dXJuIGludGVyZmFjZTsKLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWlkbC9nZW5lcmF0ZV9qYXZhX3JwYy5jcHAgYi90b29scy9haWRsL2dlbmVyYXRlX2phdmFfcnBjLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU0ZGFjYy4uMDAwMDAwMAotLS0gYS90b29scy9haWRsL2dlbmVyYXRlX2phdmFfcnBjLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMDEgKzAsMCBAQAotI2luY2x1ZGUgImdlbmVyYXRlX2phdmEuaCIKLSNpbmNsdWRlICJUeXBlLmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotVHlwZSogU0VSVklDRV9DT05URVhUX1RZUEUgPSBuZXcgVHlwZSgiYW5kcm9pZC5jb250ZW50IiwKLSAgICAgICAgIkNvbnRleHQiLCBUeXBlOjpCVUlMVF9JTiwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci1UeXBlKiBQUkVTRU5URVJfQkFTRV9UWVBFID0gbmV3IFR5cGUoImFuZHJvaWQuc3VwcG9ydC5wbGFjZS5jb25uZWN0b3IiLAotICAgICAgICAiRXZlbnRMaXN0ZW5lciIsIFR5cGU6OkJVSUxUX0lOLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLVR5cGUqIFBSRVNFTlRFUl9MSVNURU5FUl9CQVNFX1RZUEUgPSBuZXcgVHlwZSgiYW5kcm9pZC5zdXBwb3J0LnBsYWNlLmNvbm5lY3RvciIsCi0gICAgICAgICJFdmVudExpc3RlbmVyLkxpc3RlbmVyIiwgVHlwZTo6QlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotVHlwZSogUlBDX0JST0tFUl9UWVBFID0gbmV3IFR5cGUoImFuZHJvaWQuc3VwcG9ydC5wbGFjZS5jb25uZWN0b3IiLCAiQnJva2VyIiwKLSAgICAgICAgVHlwZTo6QlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotVHlwZSogUlBDX0NPTlRBSU5FUl9UWVBFID0gbmV3IFR5cGUoImNvbS5hbmRyb2lkLmF0aG9tZS5jb25uZWN0b3IiLCAiQ29ubmVjdG9yQ29udGFpbmVyIiwKLSAgICAgICAgVHlwZTo6QlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotVHlwZSogUExBQ0VfSU5GT19UWVBFID0gbmV3IFR5cGUoImFuZHJvaWQuc3VwcG9ydC5wbGFjZS5jb25uZWN0b3IiLCAiUGxhY2VJbmZvIiwKLSAgICAgICAgVHlwZTo6QlVJTFRfSU4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotLy8gVE9ETzogSnVzdCB1c2UgRW5kcG9pbnQsIHNvIHRoaXMgd29ya3MgZm9yIGFsbCBlbmRwb2ludHMuCi1UeXBlKiBSUENfQ09OTkVDVE9SX1RZUEUgPSBuZXcgVHlwZSgiYW5kcm9pZC5zdXBwb3J0LnBsYWNlLmNvbm5lY3RvciIsICJDb25uZWN0b3IiLAotICAgICAgICBUeXBlOjpCVUlMVF9JTiwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci1UeXBlKiBSUENfRU5EUE9JTlRfSU5GT19UWVBFID0gbmV3IFVzZXJEYXRhVHlwZSgiYW5kcm9pZC5zdXBwb3J0LnBsYWNlLnJwYyIsCi0gICAgICAgICJFbmRwb2ludEluZm8iLCB0cnVlLCBfX0ZJTEVfXywgX19MSU5FX18pOwotVHlwZSogUlBDX1JFU1VMVF9IQU5ETEVSX1RZUEUgPSBuZXcgVXNlckRhdGFUeXBlKCJhbmRyb2lkLnN1cHBvcnQucGxhY2UucnBjIiwgIlJwY1Jlc3VsdEhhbmRsZXIiLAotICAgICAgICB0cnVlLCBfX0ZJTEVfXywgX19MSU5FX18pOwotVHlwZSogUlBDX0VSUk9SX0xJU1RFTkVSX1RZUEUgPSBuZXcgVHlwZSgiYW5kcm9pZC5zdXBwb3J0LnBsYWNlLnJwYyIsICJScGNFcnJvckhhbmRsZXIiLAotICAgICAgICBUeXBlOjpCVUlMVF9JTiwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci1UeXBlKiBSUENfQ09OVEVYVF9UWVBFID0gbmV3IFVzZXJEYXRhVHlwZSgiYW5kcm9pZC5zdXBwb3J0LnBsYWNlLnJwYyIsICJScGNDb250ZXh0IiwgdHJ1ZSwKLSAgICAgICAgX19GSUxFX18sIF9fTElORV9fKTsKLQotc3RhdGljIHZvaWQgZ2VuZXJhdGVfY3JlYXRlX2Zyb21fZGF0YShUeXBlKiB0LCBTdGF0ZW1lbnRCbG9jayogYWRkVG8sIGNvbnN0IHN0cmluZyYga2V5LAotICAgICAgICBWYXJpYWJsZSogdiwgVmFyaWFibGUqIGRhdGEsIFZhcmlhYmxlKiogY2wpOwotc3RhdGljIHZvaWQgZ2VuZXJhdGVfbmV3X2FycmF5KFR5cGUqIHQsIFN0YXRlbWVudEJsb2NrKiBhZGRUbywgVmFyaWFibGUqIHYsIFZhcmlhYmxlKiBmcm9tKTsKLXN0YXRpYyB2b2lkIGdlbmVyYXRlX3dyaXRlX3RvX2RhdGEoVHlwZSogdCwgU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwKLSAgICAgICAgVmFyaWFibGUqIGRhdGEpOwotCi1zdGF0aWMgc3RyaW5nCi1mb3JtYXRfaW50KGludCBuKQotewotICAgIGNoYXIgc3RyWzIwXTsKLSAgICBzcHJpbnRmKHN0ciwgIiVkIiwgbik7Ci0gICAgcmV0dXJuIHN0cmluZyhzdHIpOwotfQotCi1zdGF0aWMgc3RyaW5nCi1jbGFzc19uYW1lX2xlYWYoY29uc3Qgc3RyaW5nJiBzdHIpCi17Ci0gICAgc3RyaW5nOjpzaXplX3R5cGUgcG9zID0gc3RyLnJmaW5kKCcuJyk7Ci0gICAgaWYgKHBvcyA9PSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcmV0dXJuIHN0cjsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gc3RyaW5nKHN0ciwgcG9zKzEpOwotICAgIH0KLX0KLQotc3RhdGljIHN0cmluZwotcmVzdWx0c19jbGFzc19uYW1lKGNvbnN0IHN0cmluZyYgbikKLXsKLSAgICBzdHJpbmcgc3RyID0gbjsKLSAgICBzdHJbMF0gPSB0b3VwcGVyKHN0clswXSk7Ci0gICAgc3RyLmluc2VydCgwLCAiT24iKTsKLSAgICByZXR1cm4gc3RyOwotfQotCi1zdGF0aWMgc3RyaW5nCi1yZXN1bHRzX21ldGhvZF9uYW1lKGNvbnN0IHN0cmluZyYgbikKLXsKLSAgICBzdHJpbmcgc3RyID0gbjsKLSAgICBzdHJbMF0gPSB0b3VwcGVyKHN0clswXSk7Ci0gICAgc3RyLmluc2VydCgwLCAib24iKTsKLSAgICByZXR1cm4gc3RyOwotfQotCi1zdGF0aWMgc3RyaW5nCi1wdXNoX21ldGhvZF9uYW1lKGNvbnN0IHN0cmluZyYgbikKLXsKLSAgICBzdHJpbmcgc3RyID0gbjsKLSAgICBzdHJbMF0gPSB0b3VwcGVyKHN0clswXSk7Ci0gICAgc3RyLmluc2VydCgwLCAicHVzaCIpOwotICAgIHJldHVybiBzdHI7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWNsYXNzIERpc3BhdGNoZXJDbGFzcyA6IHB1YmxpYyBDbGFzcwotewotcHVibGljOgotICAgIERpc3BhdGNoZXJDbGFzcyhjb25zdCBpbnRlcmZhY2VfdHlwZSogaWZhY2UsIEV4cHJlc3Npb24qIHRhcmdldCk7Ci0gICAgdmlydHVhbCB+RGlzcGF0Y2hlckNsYXNzKCk7Ci0KLSAgICB2b2lkIEFkZE1ldGhvZChjb25zdCBtZXRob2RfdHlwZSogbWV0aG9kKTsKLSAgICB2b2lkIERvbmVXaXRoTWV0aG9kcygpOwotCi0gICAgTWV0aG9kKiBwcm9jZXNzTWV0aG9kOwotICAgIFZhcmlhYmxlKiBhY3Rpb25QYXJhbTsKLSAgICBWYXJpYWJsZSogcmVxdWVzdFBhcmFtOwotICAgIFZhcmlhYmxlKiBycGNDb250ZXh0UGFyYW07Ci0gICAgVmFyaWFibGUqIGVycm9yUGFyYW07Ci0gICAgVmFyaWFibGUqIHJlcXVlc3REYXRhOwotICAgIFZhcmlhYmxlKiByZXN1bHREYXRhOwotICAgIElmU3RhdGVtZW50KiBkaXNwYXRjaElmU3RhdGVtZW50OwotICAgIEV4cHJlc3Npb24qIHRhcmdldEV4cHJlc3Npb247Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBnZW5lcmF0ZV9wcm9jZXNzKCk7Ci19OwotCi1EaXNwYXRjaGVyQ2xhc3M6OkRpc3BhdGNoZXJDbGFzcyhjb25zdCBpbnRlcmZhY2VfdHlwZSogaWZhY2UsIEV4cHJlc3Npb24qIHRhcmdldCkKLSAgICA6Q2xhc3MoKSwKLSAgICAgZGlzcGF0Y2hJZlN0YXRlbWVudChOVUxMKSwKLSAgICAgdGFyZ2V0RXhwcmVzc2lvbih0YXJnZXQpCi17Ci0gICAgZ2VuZXJhdGVfcHJvY2VzcygpOwotfQotCi1EaXNwYXRjaGVyQ2xhc3M6On5EaXNwYXRjaGVyQ2xhc3MoKQotewotfQotCi12b2lkCi1EaXNwYXRjaGVyQ2xhc3M6OmdlbmVyYXRlX3Byb2Nlc3MoKQotewotICAgIC8vIGJ5dGVbXSBwcm9jZXNzKFN0cmluZyBhY3Rpb24sIGJ5dGVbXSBwYXJhbXMsIFJwY0NvbnRleHQgY29udGV4dCwgUnBjRXJyb3Igc3RhdHVzKQotICAgIHRoaXMtPnByb2Nlc3NNZXRob2QgPSBuZXcgTWV0aG9kOwotICAgICAgICB0aGlzLT5wcm9jZXNzTWV0aG9kLT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgICAgIHRoaXMtPnByb2Nlc3NNZXRob2QtPnJldHVyblR5cGUgPSBCWVRFX1RZUEU7Ci0gICAgICAgIHRoaXMtPnByb2Nlc3NNZXRob2QtPnJldHVyblR5cGVEaW1lbnNpb24gPSAxOwotICAgICAgICB0aGlzLT5wcm9jZXNzTWV0aG9kLT5uYW1lID0gInByb2Nlc3MiOwotICAgICAgICB0aGlzLT5wcm9jZXNzTWV0aG9kLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotCi0gICAgdGhpcy0+YWN0aW9uUGFyYW0gPSBuZXcgVmFyaWFibGUoU1RSSU5HX1RZUEUsICJhY3Rpb24iKTsKLSAgICB0aGlzLT5wcm9jZXNzTWV0aG9kLT5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0aGlzLT5hY3Rpb25QYXJhbSk7Ci0KLSAgICB0aGlzLT5yZXF1ZXN0UGFyYW0gPSBuZXcgVmFyaWFibGUoQllURV9UWVBFLCAicmVxdWVzdFBhcmFtIiwgMSk7Ci0gICAgdGhpcy0+cHJvY2Vzc01ldGhvZC0+cGFyYW1ldGVycy5wdXNoX2JhY2sodGhpcy0+cmVxdWVzdFBhcmFtKTsKLQotICAgIHRoaXMtPnJwY0NvbnRleHRQYXJhbSA9IG5ldyBWYXJpYWJsZShSUENfQ09OVEVYVF9UWVBFLCAiY29udGV4dCIsIDApOwotICAgIHRoaXMtPnByb2Nlc3NNZXRob2QtPnBhcmFtZXRlcnMucHVzaF9iYWNrKHRoaXMtPnJwY0NvbnRleHRQYXJhbSk7ICAgIAotCi0gICAgdGhpcy0+ZXJyb3JQYXJhbSA9IG5ldyBWYXJpYWJsZShSUENfRVJST1JfVFlQRSwgImVycm9yUGFyYW0iLCAwKTsKLSAgICB0aGlzLT5wcm9jZXNzTWV0aG9kLT5wYXJhbWV0ZXJzLnB1c2hfYmFjayh0aGlzLT5lcnJvclBhcmFtKTsKLQotICAgIHRoaXMtPnJlcXVlc3REYXRhID0gbmV3IFZhcmlhYmxlKFJQQ19EQVRBX1RZUEUsICJyZXF1ZXN0Iik7Ci0gICAgdGhpcy0+cHJvY2Vzc01ldGhvZC0+c3RhdGVtZW50cy0+QWRkKG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKHJlcXVlc3REYXRhLAotICAgICAgICAgICAgICAgIG5ldyBOZXdFeHByZXNzaW9uKFJQQ19EQVRBX1RZUEUsIDEsIHRoaXMtPnJlcXVlc3RQYXJhbSkpKTsKLQotICAgIHRoaXMtPnJlc3VsdERhdGEgPSBuZXcgVmFyaWFibGUoUlBDX0RBVEFfVFlQRSwgInJlc3VsdERhdGEiKTsKLSAgICB0aGlzLT5wcm9jZXNzTWV0aG9kLT5zdGF0ZW1lbnRzLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24odGhpcy0+cmVzdWx0RGF0YSwKLSAgICAgICAgICAgICAgICBOVUxMX1ZBTFVFKSk7Ci19Ci0KLXZvaWQKLURpc3BhdGNoZXJDbGFzczo6QWRkTWV0aG9kKGNvbnN0IG1ldGhvZF90eXBlKiBtZXRob2QpCi17Ci0gICAgYXJnX3R5cGUqIGFyZzsKLQotICAgIC8vIFRoZSBpZi9zd2l0Y2ggc3RhdGVtZW50Ci0gICAgSWZTdGF0ZW1lbnQqIGlmcyA9IG5ldyBJZlN0YXRlbWVudCgpOwotICAgICAgICBpZnMtPmV4cHJlc3Npb24gPSBuZXcgTWV0aG9kQ2FsbChuZXcgU3RyaW5nTGl0ZXJhbEV4cHJlc3Npb24obWV0aG9kLT5uYW1lLmRhdGEpLCAiZXF1YWxzIiwKLSAgICAgICAgICAgICAgICAxLCB0aGlzLT5hY3Rpb25QYXJhbSk7Ci0gICAgU3RhdGVtZW50QmxvY2sqIGJsb2NrID0gaWZzLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgIGlmICh0aGlzLT5kaXNwYXRjaElmU3RhdGVtZW50ID09IE5VTEwpIHsKLSAgICAgICAgdGhpcy0+ZGlzcGF0Y2hJZlN0YXRlbWVudCA9IGlmczsKLSAgICAgICAgdGhpcy0+cHJvY2Vzc01ldGhvZC0+c3RhdGVtZW50cy0+QWRkKGRpc3BhdGNoSWZTdGF0ZW1lbnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMtPmRpc3BhdGNoSWZTdGF0ZW1lbnQtPmVsc2VpZiA9IGlmczsKLSAgICAgICAgdGhpcy0+ZGlzcGF0Y2hJZlN0YXRlbWVudCA9IGlmczsKLSAgICB9Ci0gICAgCi0gICAgLy8gVGhlIGNhbGwgdG8gZGVjbCAoZnJvbSBhYm92ZSkKLSAgICBNZXRob2RDYWxsKiByZWFsQ2FsbCA9IG5ldyBNZXRob2RDYWxsKHRoaXMtPnRhcmdldEV4cHJlc3Npb24sIG1ldGhvZC0+bmFtZS5kYXRhKTsKLQotICAgIC8vIGFyZ3MKLSAgICBWYXJpYWJsZSogY2xhc3NMb2FkZXIgPSBOVUxMOwotICAgIFZhcmlhYmxlRmFjdG9yeSBzdHViQXJncygiX2FyZyIpOwotICAgIGFyZyA9IG1ldGhvZC0+YXJnczsKLSAgICB3aGlsZSAoYXJnICE9IE5VTEwpIHsKLSAgICAgICAgVHlwZSogdCA9IE5BTUVTLlNlYXJjaChhcmctPnR5cGUudHlwZS5kYXRhKTsKLSAgICAgICAgVmFyaWFibGUqIHYgPSBzdHViQXJncy5HZXQodCk7Ci0gICAgICAgIHYtPmRpbWVuc2lvbiA9IGFyZy0+dHlwZS5kaW1lbnNpb247Ci0KLSAgICAgICAgLy8gVW5tYXJzaGFsbCB0aGUgcGFyYW1ldGVyCi0gICAgICAgIGJsb2NrLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24odikpOwotICAgICAgICBpZiAoY29udmVydF9kaXJlY3Rpb24oYXJnLT5kaXJlY3Rpb24uZGF0YSkgJiBJTl9QQVJBTUVURVIpIHsKLSAgICAgICAgICAgIGdlbmVyYXRlX2NyZWF0ZV9mcm9tX2RhdGEodCwgYmxvY2ssIGFyZy0+bmFtZS5kYXRhLCB2LAotICAgICAgICAgICAgICAgICAgICB0aGlzLT5yZXF1ZXN0RGF0YSwgJmNsYXNzTG9hZGVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhcmctPnR5cGUuZGltZW5zaW9uID09IDApIHsKLSAgICAgICAgICAgICAgICBibG9jay0+QWRkKG5ldyBBc3NpZ25tZW50KHYsIG5ldyBOZXdFeHByZXNzaW9uKHYtPnR5cGUpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChhcmctPnR5cGUuZGltZW5zaW9uID09IDEpIHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZV9uZXdfYXJyYXkodi0+dHlwZSwgYmxvY2ssIHYsIHRoaXMtPnJlcXVlc3REYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYWlkbDppbnRlcm5hbCBlcnJvciAlczolZFxuIiwgX19GSUxFX18sCi0gICAgICAgICAgICAgICAgICAgICAgICBfX0xJTkVfXyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBZGQgdGhhdCBwYXJhbWV0ZXIgdG8gdGhlIG1ldGhvZCBjYWxsCi0gICAgICAgIHJlYWxDYWxsLT5hcmd1bWVudHMucHVzaF9iYWNrKHYpOwotCi0gICAgICAgIGFyZyA9IGFyZy0+bmV4dDsKLSAgICB9Ci0KLSAgICAvLyBBZGQgYSBmaW5hbCBwYXJhbWV0ZXI6IFJwY0NvbnRleHQuIENvbnRhaW5zIGRhdGEgYWJvdXQKLSAgICAvLyBpbmNvbWluZyByZXF1ZXN0IChlLmcuLCBjZXJ0aWZpY2F0ZSkKLSAgICByZWFsQ2FsbC0+YXJndW1lbnRzLnB1c2hfYmFjayhuZXcgVmFyaWFibGUoUlBDX0NPTlRFWFRfVFlQRSwgImNvbnRleHQiLCAwKSk7Ci0KLSAgICBUeXBlKiByZXR1cm5UeXBlID0gTkFNRVMuU2VhcmNoKG1ldGhvZC0+dHlwZS50eXBlLmRhdGEpOwotICAgIGlmIChyZXR1cm5UeXBlID09IEVWRU5UX0ZBS0VfVFlQRSkgewotICAgICAgICByZXR1cm5UeXBlID0gVk9JRF9UWVBFOwotICAgIH0KLSAgICAKLSAgICAvLyB0aGUgcmVhbCBjYWxsCi0gICAgYm9vbCBmaXJzdCA9IHRydWU7Ci0gICAgVmFyaWFibGUqIF9yZXN1bHQgPSBOVUxMOwotICAgIGlmIChyZXR1cm5UeXBlID09IFZPSURfVFlQRSkgewotICAgICAgICBibG9jay0+QWRkKHJlYWxDYWxsKTsKLSAgICB9IGVsc2UgewotICAgICAgICBfcmVzdWx0ID0gbmV3IFZhcmlhYmxlKHJldHVyblR5cGUsICJfcmVzdWx0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLT50eXBlLmRpbWVuc2lvbik7Ci0gICAgICAgIGJsb2NrLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oX3Jlc3VsdCwgcmVhbENhbGwpKTsKLQotICAgICAgICAvLyBuZWVkIHRoZSByZXN1bHQgUnBjRGF0YQotICAgICAgICBpZiAoZmlyc3QpIHsKLSAgICAgICAgICAgIGJsb2NrLT5BZGQobmV3IEFzc2lnbm1lbnQodGhpcy0+cmVzdWx0RGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOZXdFeHByZXNzaW9uKFJQQ19EQVRBX1RZUEUpKSk7Ci0gICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbWFyc2hhbGwgdGhlIHJldHVybiB2YWx1ZQotICAgICAgICBnZW5lcmF0ZV93cml0ZV90b19kYXRhKHJldHVyblR5cGUsIGJsb2NrLAotICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdMaXRlcmFsRXhwcmVzc2lvbigiX3Jlc3VsdCIpLCBfcmVzdWx0LCB0aGlzLT5yZXN1bHREYXRhKTsKLSAgICB9Ci0KLSAgICAvLyBvdXQgcGFyYW1ldGVycwotICAgIGludCBpID0gMDsKLSAgICBhcmcgPSBtZXRob2QtPmFyZ3M7Ci0gICAgd2hpbGUgKGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgIFR5cGUqIHQgPSBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgIFZhcmlhYmxlKiB2ID0gc3R1YkFyZ3MuR2V0KGkrKyk7Ci0KLSAgICAgICAgaWYgKGNvbnZlcnRfZGlyZWN0aW9uKGFyZy0+ZGlyZWN0aW9uLmRhdGEpICYgT1VUX1BBUkFNRVRFUikgewotICAgICAgICAgICAgLy8gbmVlZCB0aGUgcmVzdWx0IFJwY0RhdGEKLSAgICAgICAgICAgIGlmIChmaXJzdCkgewotICAgICAgICAgICAgICAgIGJsb2NrLT5BZGQobmV3IEFzc2lnbm1lbnQodGhpcy0+cmVzdWx0RGF0YSwgbmV3IE5ld0V4cHJlc3Npb24oUlBDX0RBVEFfVFlQRSkpKTsKLSAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnZW5lcmF0ZV93cml0ZV90b19kYXRhKHQsIGJsb2NrLCBuZXcgU3RyaW5nTGl0ZXJhbEV4cHJlc3Npb24oYXJnLT5uYW1lLmRhdGEpLAotICAgICAgICAgICAgICAgICAgICB2LCB0aGlzLT5yZXN1bHREYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFyZyA9IGFyZy0+bmV4dDsKLSAgICB9Ci19Ci0KLXZvaWQKLURpc3BhdGNoZXJDbGFzczo6RG9uZVdpdGhNZXRob2RzKCkKLXsKLSAgICBpZiAodGhpcy0+ZGlzcGF0Y2hJZlN0YXRlbWVudCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2sodGhpcy0+cHJvY2Vzc01ldGhvZCk7Ci0KLSAgICBJZlN0YXRlbWVudCogZmFsbHRocm91Z2ggPSBuZXcgSWZTdGF0ZW1lbnQoKTsKLSAgICAgICAgZmFsbHRocm91Z2gtPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0gICAgICAgIGZhbGx0aHJvdWdoLT5zdGF0ZW1lbnRzLT5BZGQobmV3IFJldHVyblN0YXRlbWVudCgKLSAgICAgICAgICAgICAgICAgICAgbmV3IE1ldGhvZENhbGwoU1VQRVJfVkFMVUUsICJwcm9jZXNzIiwgNCwgCi0gICAgICAgICAgICAgICAgICAgIHRoaXMtPmFjdGlvblBhcmFtLCB0aGlzLT5yZXF1ZXN0UGFyYW0sIAotICAgICAgICAgICAgICAgICAgICB0aGlzLT5ycGNDb250ZXh0UGFyYW0sCi0gICAgICAgICAgICAgICAgICAgIHRoaXMtPmVycm9yUGFyYW0pKSk7Ci0gICAgdGhpcy0+ZGlzcGF0Y2hJZlN0YXRlbWVudC0+ZWxzZWlmID0gZmFsbHRocm91Z2g7Ci0gICAgSWZTdGF0ZW1lbnQqIHMgPSBuZXcgSWZTdGF0ZW1lbnQ7Ci0gICAgICAgIHMtPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0gICAgdGhpcy0+cHJvY2Vzc01ldGhvZC0+c3RhdGVtZW50cy0+QWRkKHMpOwotICAgIHMtPmV4cHJlc3Npb24gPSBuZXcgQ29tcGFyaXNvbih0aGlzLT5yZXN1bHREYXRhLCAiIT0iLCBOVUxMX1ZBTFVFKTsKLSAgICBzLT5zdGF0ZW1lbnRzLT5BZGQobmV3IFJldHVyblN0YXRlbWVudChuZXcgTWV0aG9kQ2FsbCh0aGlzLT5yZXN1bHREYXRhLCAic2VyaWFsaXplIikpKTsKLSAgICBzLT5lbHNlaWYgPSBuZXcgSWZTdGF0ZW1lbnQ7Ci0gICAgcyA9IHMtPmVsc2VpZjsKLSAgICBzLT5zdGF0ZW1lbnRzLT5BZGQobmV3IFJldHVyblN0YXRlbWVudChOVUxMX1ZBTFVFKSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWNsYXNzIFJwY1Byb3h5Q2xhc3MgOiBwdWJsaWMgQ2xhc3MKLXsKLXB1YmxpYzoKLSAgICBScGNQcm94eUNsYXNzKGNvbnN0IGludGVyZmFjZV90eXBlKiBpZmFjZSwgSW50ZXJmYWNlVHlwZSogaW50ZXJmYWNlVHlwZSk7Ci0gICAgdmlydHVhbCB+UnBjUHJveHlDbGFzcygpOwotCi0gICAgVmFyaWFibGUqIGVuZHBvaW50OwotICAgIFZhcmlhYmxlKiBicm9rZXI7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBnZW5lcmF0ZV9jdG9yKCk7Ci0gICAgdm9pZCBnZW5lcmF0ZV9nZXRfZW5kcG9pbnRfaW5mbygpOwotfTsKLQotUnBjUHJveHlDbGFzczo6UnBjUHJveHlDbGFzcyhjb25zdCBpbnRlcmZhY2VfdHlwZSogaWZhY2UsIEludGVyZmFjZVR5cGUqIGludGVyZmFjZVR5cGUpCi0gICAgOkNsYXNzKCkKLXsKLSAgICB0aGlzLT5jb21tZW50ID0gZ2F0aGVyX2NvbW1lbnRzKGlmYWNlLT5jb21tZW50c190b2tlbi0+ZXh0cmEpOwotICAgIHRoaXMtPm1vZGlmaWVycyA9IFBVQkxJQzsKLSAgICB0aGlzLT53aGF0ID0gQ2xhc3M6OkNMQVNTOwotICAgIHRoaXMtPnR5cGUgPSBpbnRlcmZhY2VUeXBlOwotCi0gICAgLy8gYnJva2VyCi0gICAgdGhpcy0+YnJva2VyID0gbmV3IFZhcmlhYmxlKFJQQ19CUk9LRVJfVFlQRSwgIl9icm9rZXIiKTsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2sobmV3IEZpZWxkKFBSSVZBVEUsIHRoaXMtPmJyb2tlcikpOwotICAgIC8vIGVuZHBvaW50Ci0gICAgdGhpcy0+ZW5kcG9pbnQgPSBuZXcgVmFyaWFibGUoUlBDX0VORFBPSU5UX0lORk9fVFlQRSwgIl9lbmRwb2ludCIpOwotICAgIHRoaXMtPmVsZW1lbnRzLnB1c2hfYmFjayhuZXcgRmllbGQoUFJJVkFURSwgdGhpcy0+ZW5kcG9pbnQpKTsKLQotICAgIC8vIG1ldGhvZHMKLSAgICBnZW5lcmF0ZV9jdG9yKCk7Ci0gICAgZ2VuZXJhdGVfZ2V0X2VuZHBvaW50X2luZm8oKTsKLX0KLQotUnBjUHJveHlDbGFzczo6flJwY1Byb3h5Q2xhc3MoKQotewotfQotCi12b2lkCi1ScGNQcm94eUNsYXNzOjpnZW5lcmF0ZV9jdG9yKCkKLXsKLSAgICBWYXJpYWJsZSogYnJva2VyID0gbmV3IFZhcmlhYmxlKFJQQ19CUk9LRVJfVFlQRSwgImJyb2tlciIpOwotICAgIFZhcmlhYmxlKiBlbmRwb2ludCA9IG5ldyBWYXJpYWJsZShSUENfRU5EUE9JTlRfSU5GT19UWVBFLCAiZW5kcG9pbnQiKTsKLSAgICBNZXRob2QqIGN0b3IgPSBuZXcgTWV0aG9kOwotICAgICAgICBjdG9yLT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgICAgIGN0b3ItPm5hbWUgPSBjbGFzc19uYW1lX2xlYWYodGhpcy0+dHlwZS0+TmFtZSgpKTsKLSAgICAgICAgY3Rvci0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICAgICAgY3Rvci0+cGFyYW1ldGVycy5wdXNoX2JhY2soYnJva2VyKTsKLSAgICAgICAgY3Rvci0+cGFyYW1ldGVycy5wdXNoX2JhY2soZW5kcG9pbnQpOwotICAgIHRoaXMtPmVsZW1lbnRzLnB1c2hfYmFjayhjdG9yKTsKLQotICAgIGN0b3ItPnN0YXRlbWVudHMtPkFkZChuZXcgQXNzaWdubWVudCh0aGlzLT5icm9rZXIsIGJyb2tlcikpOwotICAgIGN0b3ItPnN0YXRlbWVudHMtPkFkZChuZXcgQXNzaWdubWVudCh0aGlzLT5lbmRwb2ludCwgZW5kcG9pbnQpKTsKLX0KLQotdm9pZAotUnBjUHJveHlDbGFzczo6Z2VuZXJhdGVfZ2V0X2VuZHBvaW50X2luZm8oKQotewotICAgIE1ldGhvZCogZ2V0ID0gbmV3IE1ldGhvZDsKLSAgICBnZXQtPm1vZGlmaWVycyA9IFBVQkxJQzsKLSAgICBnZXQtPnJldHVyblR5cGUgPSBSUENfRU5EUE9JTlRfSU5GT19UWVBFOwotICAgIGdldC0+bmFtZSA9ICJnZXRFbmRwb2ludEluZm8iOwotICAgIGdldC0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2soZ2V0KTsKLQotICAgIGdldC0+c3RhdGVtZW50cy0+QWRkKG5ldyBSZXR1cm5TdGF0ZW1lbnQodGhpcy0+ZW5kcG9pbnQpKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotY2xhc3MgRXZlbnRMaXN0ZW5lckNsYXNzIDogcHVibGljIERpc3BhdGNoZXJDbGFzcwotewotcHVibGljOgotICAgIEV2ZW50TGlzdGVuZXJDbGFzcyhjb25zdCBpbnRlcmZhY2VfdHlwZSogaWZhY2UsIFR5cGUqIGxpc3RlbmVyVHlwZSk7Ci0gICAgdmlydHVhbCB+RXZlbnRMaXN0ZW5lckNsYXNzKCk7Ci0KLSAgICBWYXJpYWJsZSogX2xpc3RlbmVyOwotCi1wcml2YXRlOgotICAgIHZvaWQgZ2VuZXJhdGVfY3RvcigpOwotfTsKLQotRXhwcmVzc2lvbioKLWdlbmVyYXRlX2dldF9saXN0ZW5lcl9leHByZXNzaW9uKFR5cGUqIGNhc3QpCi17Ci0gICAgcmV0dXJuIG5ldyBDYXN0KGNhc3QsIG5ldyBNZXRob2RDYWxsKFRISVNfVkFMVUUsICJnZXRWaWV3IikpOwotfQotCi1FdmVudExpc3RlbmVyQ2xhc3M6OkV2ZW50TGlzdGVuZXJDbGFzcyhjb25zdCBpbnRlcmZhY2VfdHlwZSogaWZhY2UsIFR5cGUqIGxpc3RlbmVyVHlwZSkKLSAgICA6RGlzcGF0Y2hlckNsYXNzKGlmYWNlLCBuZXcgRmllbGRWYXJpYWJsZShUSElTX1ZBTFVFLCAiX2xpc3RlbmVyIikpCi17Ci0gICAgdGhpcy0+bW9kaWZpZXJzID0gUFJJVkFURTsKLSAgICB0aGlzLT53aGF0ID0gQ2xhc3M6OkNMQVNTOwotICAgIHRoaXMtPnR5cGUgPSBuZXcgVHlwZShpZmFjZS0+cGFja2FnZSA/IGlmYWNlLT5wYWNrYWdlIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQoaWZhY2UtPm5hbWUuZGF0YSwgIi5QcmVzZW50ZXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU6OkdFTkVSQVRFRCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0gICAgdGhpcy0+ZXh0ZW5kcyA9IFBSRVNFTlRFUl9CQVNFX1RZUEU7Ci0KLSAgICB0aGlzLT5fbGlzdGVuZXIgPSBuZXcgVmFyaWFibGUobGlzdGVuZXJUeXBlLCAiX2xpc3RlbmVyIik7Ci0gICAgdGhpcy0+ZWxlbWVudHMucHVzaF9iYWNrKG5ldyBGaWVsZChQUklWQVRFLCB0aGlzLT5fbGlzdGVuZXIpKTsKLQotICAgIC8vIG1ldGhvZHMKLSAgICBnZW5lcmF0ZV9jdG9yKCk7Ci19Ci0KLUV2ZW50TGlzdGVuZXJDbGFzczo6fkV2ZW50TGlzdGVuZXJDbGFzcygpCi17Ci19Ci0KLXZvaWQKLUV2ZW50TGlzdGVuZXJDbGFzczo6Z2VuZXJhdGVfY3RvcigpCi17Ci0gICAgVmFyaWFibGUqIGJyb2tlciA9IG5ldyBWYXJpYWJsZShSUENfQlJPS0VSX1RZUEUsICJicm9rZXIiKTsKLSAgICBWYXJpYWJsZSogbGlzdGVuZXIgPSBuZXcgVmFyaWFibGUodGhpcy0+X2xpc3RlbmVyLT50eXBlLCAibGlzdGVuZXIiKTsKLSAgICBNZXRob2QqIGN0b3IgPSBuZXcgTWV0aG9kOwotICAgICAgICBjdG9yLT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgICAgIGN0b3ItPm5hbWUgPSBjbGFzc19uYW1lX2xlYWYodGhpcy0+dHlwZS0+TmFtZSgpKTsKLSAgICAgICAgY3Rvci0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICAgICAgY3Rvci0+cGFyYW1ldGVycy5wdXNoX2JhY2soYnJva2VyKTsKLSAgICAgICAgY3Rvci0+cGFyYW1ldGVycy5wdXNoX2JhY2sobGlzdGVuZXIpOwotICAgIHRoaXMtPmVsZW1lbnRzLnB1c2hfYmFjayhjdG9yKTsKLQotICAgIGN0b3ItPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbCgic3VwZXIiLCAyLCBicm9rZXIsIGxpc3RlbmVyKSk7Ci0gICAgY3Rvci0+c3RhdGVtZW50cy0+QWRkKG5ldyBBc3NpZ25tZW50KHRoaXMtPl9saXN0ZW5lciwgbGlzdGVuZXIpKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotY2xhc3MgTGlzdGVuZXJDbGFzcyA6IHB1YmxpYyBDbGFzcwotewotcHVibGljOgotICAgIExpc3RlbmVyQ2xhc3MoY29uc3QgaW50ZXJmYWNlX3R5cGUqIGlmYWNlKTsKLSAgICB2aXJ0dWFsIH5MaXN0ZW5lckNsYXNzKCk7Ci0KLSAgICBib29sIG5lZWRlZDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGdlbmVyYXRlX2N0b3IoKTsKLX07Ci0KLUxpc3RlbmVyQ2xhc3M6Okxpc3RlbmVyQ2xhc3MoY29uc3QgaW50ZXJmYWNlX3R5cGUqIGlmYWNlKQotICAgIDpDbGFzcygpLAotICAgICBuZWVkZWQoZmFsc2UpCi17Ci0gICAgdGhpcy0+Y29tbWVudCA9ICIvKiogRXh0ZW5kIHRoaXMgdG8gbGlzdGVuIHRvIHRoZSBldmVudHMgZnJvbSB0aGlzIGNsYXNzLiAqLyI7Ci0gICAgdGhpcy0+bW9kaWZpZXJzID0gU1RBVElDIHwgUFVCTElDIDsKLSAgICB0aGlzLT53aGF0ID0gQ2xhc3M6OkNMQVNTOwotICAgIHRoaXMtPnR5cGUgPSBuZXcgVHlwZShpZmFjZS0+cGFja2FnZSA/IGlmYWNlLT5wYWNrYWdlIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQoaWZhY2UtPm5hbWUuZGF0YSwgIi5MaXN0ZW5lciIpLAotICAgICAgICAgICAgICAgICAgICAgICAgVHlwZTo6R0VORVJBVEVELCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLSAgICB0aGlzLT5leHRlbmRzID0gUFJFU0VOVEVSX0xJU1RFTkVSX0JBU0VfVFlQRTsKLX0KLQotTGlzdGVuZXJDbGFzczo6fkxpc3RlbmVyQ2xhc3MoKQotewotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1jbGFzcyBFbmRwb2ludEJhc2VDbGFzcyA6IHB1YmxpYyBEaXNwYXRjaGVyQ2xhc3MKLXsKLXB1YmxpYzoKLSAgICBFbmRwb2ludEJhc2VDbGFzcyhjb25zdCBpbnRlcmZhY2VfdHlwZSogaWZhY2UpOwotICAgIHZpcnR1YWwgfkVuZHBvaW50QmFzZUNsYXNzKCk7Ci0KLSAgICBib29sIG5lZWRlZDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGdlbmVyYXRlX2N0b3IoKTsKLX07Ci0KLUVuZHBvaW50QmFzZUNsYXNzOjpFbmRwb2ludEJhc2VDbGFzcyhjb25zdCBpbnRlcmZhY2VfdHlwZSogaWZhY2UpCi0gICAgOkRpc3BhdGNoZXJDbGFzcyhpZmFjZSwgVEhJU19WQUxVRSksCi0gICAgIG5lZWRlZChmYWxzZSkKLXsKLSAgICB0aGlzLT5jb21tZW50ID0gIi8qKiBFeHRlbmQgdGhpcyB0byBpbXBsZW1lbnQgYSBsaW5rIHNlcnZpY2UuICovIjsKLSAgICB0aGlzLT5tb2RpZmllcnMgPSBTVEFUSUMgfCBQVUJMSUMgfCBBQlNUUkFDVDsKLSAgICB0aGlzLT53aGF0ID0gQ2xhc3M6OkNMQVNTOwotICAgIHRoaXMtPnR5cGUgPSBuZXcgVHlwZShpZmFjZS0+cGFja2FnZSA/IGlmYWNlLT5wYWNrYWdlIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQoaWZhY2UtPm5hbWUuZGF0YSwgIi5FbmRwb2ludEJhc2UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFR5cGU6OkdFTkVSQVRFRCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0gICAgdGhpcy0+ZXh0ZW5kcyA9IFJQQ19DT05ORUNUT1JfVFlQRTsKLQotICAgIC8vIG1ldGhvZHMKLSAgICBnZW5lcmF0ZV9jdG9yKCk7Ci19Ci0KLUVuZHBvaW50QmFzZUNsYXNzOjp+RW5kcG9pbnRCYXNlQ2xhc3MoKQotewotfQotCi12b2lkCi1FbmRwb2ludEJhc2VDbGFzczo6Z2VuZXJhdGVfY3RvcigpCi17Ci0gICAgVmFyaWFibGUqIGNvbnRhaW5lciA9IG5ldyBWYXJpYWJsZShSUENfQ09OVEFJTkVSX1RZUEUsICJjb250YWluZXIiKTsKLSAgICBWYXJpYWJsZSogYnJva2VyID0gbmV3IFZhcmlhYmxlKFJQQ19CUk9LRVJfVFlQRSwgImJyb2tlciIpOwotCVZhcmlhYmxlKiBwbGFjZSA9IG5ldyBWYXJpYWJsZShQTEFDRV9JTkZPX1RZUEUsICJwbGFjZUluZm8iKTsKLSAgICBNZXRob2QqIGN0b3IgPSBuZXcgTWV0aG9kOwotICAgICAgICBjdG9yLT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgICAgIGN0b3ItPm5hbWUgPSBjbGFzc19uYW1lX2xlYWYodGhpcy0+dHlwZS0+TmFtZSgpKTsKLSAgICAgICAgY3Rvci0+c3RhdGVtZW50cyA9IG5ldyBTdGF0ZW1lbnRCbG9jazsKLSAgICAgICAgY3Rvci0+cGFyYW1ldGVycy5wdXNoX2JhY2soY29udGFpbmVyKTsKLSAgICAgICAgY3Rvci0+cGFyYW1ldGVycy5wdXNoX2JhY2soYnJva2VyKTsKLSAgICAgICAgY3Rvci0+cGFyYW1ldGVycy5wdXNoX2JhY2socGxhY2UpOwotICAgIHRoaXMtPmVsZW1lbnRzLnB1c2hfYmFjayhjdG9yKTsKLQotICAgIGN0b3ItPnN0YXRlbWVudHMtPkFkZChuZXcgTWV0aG9kQ2FsbCgic3VwZXIiLCAzLCBjb250YWluZXIsIGJyb2tlciwgcGxhY2UpKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotY2xhc3MgUmVzdWx0RGlzcGF0Y2hlckNsYXNzIDogcHVibGljIENsYXNzCi17Ci1wdWJsaWM6Ci0gICAgUmVzdWx0RGlzcGF0Y2hlckNsYXNzKCk7Ci0gICAgdmlydHVhbCB+UmVzdWx0RGlzcGF0Y2hlckNsYXNzKCk7Ci0KLSAgICB2b2lkIEFkZE1ldGhvZChpbnQgaW5kZXgsIGNvbnN0IHN0cmluZyYgbmFtZSwgTWV0aG9kKiogbWV0aG9kLCBWYXJpYWJsZSoqIHBhcmFtKTsKLQotICAgIGJvb2wgbmVlZGVkOwotICAgIFZhcmlhYmxlKiBtZXRob2RJZDsKLSAgICBWYXJpYWJsZSogY2FsbGJhY2s7Ci0gICAgTWV0aG9kKiBvblJlc3VsdE1ldGhvZDsKLSAgICBWYXJpYWJsZSogcmVzdWx0UGFyYW07Ci0gICAgU3dpdGNoU3RhdGVtZW50KiBtZXRob2RTd2l0Y2g7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBnZW5lcmF0ZV9jdG9yKCk7Ci0gICAgdm9pZCBnZW5lcmF0ZV9vblJlc3VsdCgpOwotfTsKLQotUmVzdWx0RGlzcGF0Y2hlckNsYXNzOjpSZXN1bHREaXNwYXRjaGVyQ2xhc3MoKQotICAgIDpDbGFzcygpLAotICAgICBuZWVkZWQoZmFsc2UpCi17Ci0gICAgdGhpcy0+bW9kaWZpZXJzID0gUFJJVkFURSB8IEZJTkFMOwotICAgIHRoaXMtPndoYXQgPSBDbGFzczo6Q0xBU1M7Ci0gICAgdGhpcy0+dHlwZSA9IG5ldyBUeXBlKCJfUmVzdWx0RGlzcGF0Y2hlciIsIFR5cGU6OkdFTkVSQVRFRCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0gICAgdGhpcy0+aW50ZXJmYWNlcy5wdXNoX2JhY2soUlBDX1JFU1VMVF9IQU5ETEVSX1RZUEUpOwotCi0gICAgLy8gbWV0aG9kSWQKLSAgICB0aGlzLT5tZXRob2RJZCA9IG5ldyBWYXJpYWJsZShJTlRfVFlQRSwgIm1ldGhvZElkIik7Ci0gICAgdGhpcy0+ZWxlbWVudHMucHVzaF9iYWNrKG5ldyBGaWVsZChQUklWQVRFLCB0aGlzLT5tZXRob2RJZCkpOwotICAgIHRoaXMtPmNhbGxiYWNrID0gbmV3IFZhcmlhYmxlKE9CSkVDVF9UWVBFLCAiY2FsbGJhY2siKTsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2sobmV3IEZpZWxkKFBSSVZBVEUsIHRoaXMtPmNhbGxiYWNrKSk7Ci0KLSAgICAvLyBtZXRob2RzCi0gICAgZ2VuZXJhdGVfY3RvcigpOwotICAgIGdlbmVyYXRlX29uUmVzdWx0KCk7Ci19Ci0KLVJlc3VsdERpc3BhdGNoZXJDbGFzczo6flJlc3VsdERpc3BhdGNoZXJDbGFzcygpCi17Ci19Ci0KLXZvaWQKLVJlc3VsdERpc3BhdGNoZXJDbGFzczo6Z2VuZXJhdGVfY3RvcigpCi17Ci0gICAgVmFyaWFibGUqIG1ldGhvZElkUGFyYW0gPSBuZXcgVmFyaWFibGUoSU5UX1RZUEUsICJtZXRoSWQiKTsKLSAgICBWYXJpYWJsZSogY2FsbGJhY2tQYXJhbSA9IG5ldyBWYXJpYWJsZShPQkpFQ1RfVFlQRSwgImNiT2JqIik7Ci0gICAgTWV0aG9kKiBjdG9yID0gbmV3IE1ldGhvZDsKLSAgICAgICAgY3Rvci0+bW9kaWZpZXJzID0gUFVCTElDOwotICAgICAgICBjdG9yLT5uYW1lID0gY2xhc3NfbmFtZV9sZWFmKHRoaXMtPnR5cGUtPk5hbWUoKSk7Ci0gICAgICAgIGN0b3ItPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0gICAgICAgIGN0b3ItPnBhcmFtZXRlcnMucHVzaF9iYWNrKG1ldGhvZElkUGFyYW0pOwotICAgICAgICBjdG9yLT5wYXJhbWV0ZXJzLnB1c2hfYmFjayhjYWxsYmFja1BhcmFtKTsKLSAgICB0aGlzLT5lbGVtZW50cy5wdXNoX2JhY2soY3Rvcik7Ci0KLSAgICBjdG9yLT5zdGF0ZW1lbnRzLT5BZGQobmV3IEFzc2lnbm1lbnQodGhpcy0+bWV0aG9kSWQsIG1ldGhvZElkUGFyYW0pKTsKLSAgICBjdG9yLT5zdGF0ZW1lbnRzLT5BZGQobmV3IEFzc2lnbm1lbnQodGhpcy0+Y2FsbGJhY2ssIGNhbGxiYWNrUGFyYW0pKTsKLX0KLQotdm9pZAotUmVzdWx0RGlzcGF0Y2hlckNsYXNzOjpnZW5lcmF0ZV9vblJlc3VsdCgpCi17Ci0gICAgdGhpcy0+b25SZXN1bHRNZXRob2QgPSBuZXcgTWV0aG9kOwotICAgICAgICB0aGlzLT5vblJlc3VsdE1ldGhvZC0+bW9kaWZpZXJzID0gUFVCTElDOwotICAgICAgICB0aGlzLT5vblJlc3VsdE1ldGhvZC0+cmV0dXJuVHlwZSA9IFZPSURfVFlQRTsKLSAgICAgICAgdGhpcy0+b25SZXN1bHRNZXRob2QtPnJldHVyblR5cGVEaW1lbnNpb24gPSAwOwotICAgICAgICB0aGlzLT5vblJlc3VsdE1ldGhvZC0+bmFtZSA9ICJvblJlc3VsdCI7Ci0gICAgICAgIHRoaXMtPm9uUmVzdWx0TWV0aG9kLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgIHRoaXMtPmVsZW1lbnRzLnB1c2hfYmFjayh0aGlzLT5vblJlc3VsdE1ldGhvZCk7Ci0KLSAgICB0aGlzLT5yZXN1bHRQYXJhbSA9IG5ldyBWYXJpYWJsZShCWVRFX1RZUEUsICJyZXN1bHQiLCAxKTsKLSAgICB0aGlzLT5vblJlc3VsdE1ldGhvZC0+cGFyYW1ldGVycy5wdXNoX2JhY2sodGhpcy0+cmVzdWx0UGFyYW0pOwotCi0gICAgdGhpcy0+bWV0aG9kU3dpdGNoID0gbmV3IFN3aXRjaFN0YXRlbWVudCh0aGlzLT5tZXRob2RJZCk7Ci0gICAgdGhpcy0+b25SZXN1bHRNZXRob2QtPnN0YXRlbWVudHMtPkFkZCh0aGlzLT5tZXRob2RTd2l0Y2gpOwotfQotCi12b2lkCi1SZXN1bHREaXNwYXRjaGVyQ2xhc3M6OkFkZE1ldGhvZChpbnQgaW5kZXgsIGNvbnN0IHN0cmluZyYgbmFtZSwgTWV0aG9kKiogbWV0aG9kLCBWYXJpYWJsZSoqIHBhcmFtKQotewotICAgIE1ldGhvZCogbSA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIG0tPm1vZGlmaWVycyA9IFBVQkxJQzsKLSAgICAgICAgbS0+cmV0dXJuVHlwZSA9IFZPSURfVFlQRTsKLSAgICAgICAgbS0+cmV0dXJuVHlwZURpbWVuc2lvbiA9IDA7Ci0gICAgICAgIG0tPm5hbWUgPSBuYW1lOwotICAgICAgICBtLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgICpwYXJhbSA9IG5ldyBWYXJpYWJsZShCWVRFX1RZUEUsICJyZXN1bHQiLCAxKTsKLSAgICBtLT5wYXJhbWV0ZXJzLnB1c2hfYmFjaygqcGFyYW0pOwotICAgIHRoaXMtPmVsZW1lbnRzLnB1c2hfYmFjayhtKTsKLSAgICAqbWV0aG9kID0gbTsKLQotICAgIENhc2UqIGMgPSBuZXcgQ2FzZShmb3JtYXRfaW50KGluZGV4KSk7Ci0gICAgYy0+c3RhdGVtZW50cy0+QWRkKG5ldyBNZXRob2RDYWxsKG5ldyBMaXRlcmFsRXhwcmVzc2lvbigidGhpcyIpLCBuYW1lLCAxLCB0aGlzLT5yZXN1bHRQYXJhbSkpOwotICAgIGMtPnN0YXRlbWVudHMtPkFkZChuZXcgQnJlYWsoKSk7Ci0KLSAgICB0aGlzLT5tZXRob2RTd2l0Y2gtPmNhc2VzLnB1c2hfYmFjayhjKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIHZvaWQKLWdlbmVyYXRlX25ld19hcnJheShUeXBlKiB0LCBTdGF0ZW1lbnRCbG9jayogYWRkVG8sIFZhcmlhYmxlKiB2LCBWYXJpYWJsZSogZnJvbSkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6IGltcGxlbWVudCBnZW5lcmF0ZV9uZXdfYXJyYXkgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgZXhpdCgxKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbmVyYXRlX2NyZWF0ZV9mcm9tX2RhdGEoVHlwZSogdCwgU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBjb25zdCBzdHJpbmcmIGtleSwgVmFyaWFibGUqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUqIGRhdGEsIFZhcmlhYmxlKiogY2wpCi17Ci0gICAgRXhwcmVzc2lvbiogayA9IG5ldyBTdHJpbmdMaXRlcmFsRXhwcmVzc2lvbihrZXkpOwotICAgIGlmICh2LT5kaW1lbnNpb24gPT0gMCkgewotICAgICAgICB0LT5DcmVhdGVGcm9tUnBjRGF0YShhZGRUbywgaywgdiwgZGF0YSwgY2wpOwotICAgIH0KLSAgICBpZiAodi0+ZGltZW5zaW9uID09IDEpIHsKLSAgICAgICAgLy90LT5SZWFkQXJyYXlGcm9tUnBjRGF0YShhZGRUbywgdiwgZGF0YSwgY2wpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFpZGw6IGltcGxlbWVudCBnZW5lcmF0ZV9jcmVhdGVfZnJvbV9kYXRhIGZvciBhcnJheXMlczolZFxuIiwKLSAgICAgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLWdlbmVyYXRlX3dyaXRlX3RvX2RhdGEoVHlwZSogdCwgU3RhdGVtZW50QmxvY2sqIGFkZFRvLCBFeHByZXNzaW9uKiBrLCBWYXJpYWJsZSogdiwgVmFyaWFibGUqIGRhdGEpCi17Ci0gICAgaWYgKHYtPmRpbWVuc2lvbiA9PSAwKSB7Ci0gICAgICAgIHQtPldyaXRlVG9ScGNEYXRhKGFkZFRvLCBrLCB2LCBkYXRhLCAwKTsKLSAgICB9Ci0gICAgaWYgKHYtPmRpbWVuc2lvbiA9PSAxKSB7Ci0gICAgICAgIC8vdC0+V3JpdGVBcnJheVRvUGFyY2VsKGFkZFRvLCB2LCBkYXRhKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJhaWRsOiBpbXBsZW1lbnQgZ2VuZXJhdGVfd3JpdGVfdG9fZGF0YSBmb3IgYXJyYXlzJXM6JWRcbiIsCi0gICAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fKTsKLSAgICB9Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUeXBlKgotZ2VuZXJhdGVfcmVzdWx0c19tZXRob2QoY29uc3QgbWV0aG9kX3R5cGUqIG1ldGhvZCwgUnBjUHJveHlDbGFzcyogcHJveHlDbGFzcykKLXsKLSAgICBhcmdfdHlwZSogYXJnOwotCi0gICAgc3RyaW5nIHJlc3VsdHNNZXRob2ROYW1lID0gcmVzdWx0c19tZXRob2RfbmFtZShtZXRob2QtPm5hbWUuZGF0YSk7Ci0gICAgVHlwZSogcmVzdWx0c0ludGVyZmFjZVR5cGUgPSBuZXcgVHlwZShyZXN1bHRzX2NsYXNzX25hbWUobWV0aG9kLT5uYW1lLmRhdGEpLAotICAgICAgICAgICAgVHlwZTo6R0VORVJBVEVELCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLQotICAgIGlmICghbWV0aG9kLT5vbmV3YXkpIHsKLSAgICAgICAgQ2xhc3MqIHJlc3VsdHNDbGFzcyA9IG5ldyBDbGFzczsKLSAgICAgICAgICAgIHJlc3VsdHNDbGFzcy0+bW9kaWZpZXJzID0gU1RBVElDIHwgUFVCTElDOwotICAgICAgICAgICAgcmVzdWx0c0NsYXNzLT53aGF0ID0gQ2xhc3M6OklOVEVSRkFDRTsKLSAgICAgICAgICAgIHJlc3VsdHNDbGFzcy0+dHlwZSA9IHJlc3VsdHNJbnRlcmZhY2VUeXBlOwotCi0gICAgICAgIE1ldGhvZCogcmVzdWx0TWV0aG9kID0gbmV3IE1ldGhvZDsKLSAgICAgICAgICAgIHJlc3VsdE1ldGhvZC0+Y29tbWVudCA9IGdhdGhlcl9jb21tZW50cyhtZXRob2QtPmNvbW1lbnRzX3Rva2VuLT5leHRyYSk7Ci0gICAgICAgICAgICByZXN1bHRNZXRob2QtPm1vZGlmaWVycyA9IFBVQkxJQzsKLSAgICAgICAgICAgIHJlc3VsdE1ldGhvZC0+cmV0dXJuVHlwZSA9IFZPSURfVFlQRTsKLSAgICAgICAgICAgIHJlc3VsdE1ldGhvZC0+cmV0dXJuVHlwZURpbWVuc2lvbiA9IDA7Ci0gICAgICAgICAgICByZXN1bHRNZXRob2QtPm5hbWUgPSByZXN1bHRzTWV0aG9kTmFtZTsKLSAgICAgICAgaWYgKDAgIT0gc3RyY21wKCJ2b2lkIiwgbWV0aG9kLT50eXBlLnR5cGUuZGF0YSkpIHsKLSAgICAgICAgICAgIHJlc3VsdE1ldGhvZC0+cGFyYW1ldGVycy5wdXNoX2JhY2sobmV3IFZhcmlhYmxlKE5BTUVTLlNlYXJjaChtZXRob2QtPnR5cGUudHlwZS5kYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJfcmVzdWx0IiwgbWV0aG9kLT50eXBlLmRpbWVuc2lvbikpOwotICAgICAgICB9Ci0gICAgICAgIGFyZyA9IG1ldGhvZC0+YXJnczsKLSAgICAgICAgd2hpbGUgKGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoY29udmVydF9kaXJlY3Rpb24oYXJnLT5kaXJlY3Rpb24uZGF0YSkgJiBPVVRfUEFSQU1FVEVSKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0TWV0aG9kLT5wYXJhbWV0ZXJzLnB1c2hfYmFjayhuZXcgVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSksIGFyZy0+bmFtZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLT50eXBlLmRpbWVuc2lvbikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJnID0gYXJnLT5uZXh0OwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdHNDbGFzcy0+ZWxlbWVudHMucHVzaF9iYWNrKHJlc3VsdE1ldGhvZCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdE1ldGhvZC0+cGFyYW1ldGVycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBwcm94eUNsYXNzLT5lbGVtZW50cy5wdXNoX2JhY2socmVzdWx0c0NsYXNzKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHRzSW50ZXJmYWNlVHlwZTsKLSAgICAgICAgfSAKLSAgICB9Ci0gICAgLy9kZWxldGUgcmVzdWx0c0ludGVyZmFjZVR5cGU7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW5lcmF0ZV9wcm94eV9tZXRob2QoY29uc3QgbWV0aG9kX3R5cGUqIG1ldGhvZCwgUnBjUHJveHlDbGFzcyogcHJveHlDbGFzcywKLSAgICAgICAgUmVzdWx0RGlzcGF0Y2hlckNsYXNzKiByZXN1bHRzRGlzcGF0Y2hlckNsYXNzLCBUeXBlKiByZXN1bHRzSW50ZXJmYWNlVHlwZSwgaW50IGluZGV4KQotewotICAgIGFyZ190eXBlKiBhcmc7Ci0gICAgTWV0aG9kKiBwcm94eU1ldGhvZCA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIHByb3h5TWV0aG9kLT5jb21tZW50ID0gZ2F0aGVyX2NvbW1lbnRzKG1ldGhvZC0+Y29tbWVudHNfdG9rZW4tPmV4dHJhKTsKLSAgICAgICAgcHJveHlNZXRob2QtPm1vZGlmaWVycyA9IFBVQkxJQzsKLSAgICAgICAgcHJveHlNZXRob2QtPnJldHVyblR5cGUgPSBWT0lEX1RZUEU7Ci0gICAgICAgIHByb3h5TWV0aG9kLT5yZXR1cm5UeXBlRGltZW5zaW9uID0gMDsKLSAgICAgICAgcHJveHlNZXRob2QtPm5hbWUgPSBtZXRob2QtPm5hbWUuZGF0YTsKLSAgICAgICAgcHJveHlNZXRob2QtPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0gICAgcHJveHlDbGFzcy0+ZWxlbWVudHMucHVzaF9iYWNrKHByb3h5TWV0aG9kKTsKLQotICAgIC8vIFRoZSBsb2NhbCB2YXJpYWJsZXMKLSAgICBWYXJpYWJsZSogX2RhdGEgPSBuZXcgVmFyaWFibGUoUlBDX0RBVEFfVFlQRSwgIl9kYXRhIik7Ci0gICAgcHJveHlNZXRob2QtPnN0YXRlbWVudHMtPkFkZChuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihfZGF0YSwgbmV3IE5ld0V4cHJlc3Npb24oUlBDX0RBVEFfVFlQRSkpKTsKLQotICAgIC8vIEFkZCB0aGUgYXJndW1lbnRzCi0gICAgYXJnID0gbWV0aG9kLT5hcmdzOwotICAgIHdoaWxlIChhcmcgIT0gTlVMTCkgewotICAgICAgICBpZiAoY29udmVydF9kaXJlY3Rpb24oYXJnLT5kaXJlY3Rpb24uZGF0YSkgJiBJTl9QQVJBTUVURVIpIHsKLSAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHNpZ25hdHVyZQotICAgICAgICAgICAgVHlwZSogdCA9IE5BTUVTLlNlYXJjaChhcmctPnR5cGUudHlwZS5kYXRhKTsKLSAgICAgICAgICAgIFZhcmlhYmxlKiB2ID0gbmV3IFZhcmlhYmxlKHQsIGFyZy0+bmFtZS5kYXRhLCBhcmctPnR5cGUuZGltZW5zaW9uKTsKLSAgICAgICAgICAgIHByb3h5TWV0aG9kLT5wYXJhbWV0ZXJzLnB1c2hfYmFjayh2KTsKLQotICAgICAgICAgICAgLy8gSW5wdXQgcGFyYW1ldGVyIG1hcnNoYWxsaW5nCi0gICAgICAgICAgICBnZW5lcmF0ZV93cml0ZV90b19kYXRhKHQsIHByb3h5TWV0aG9kLT5zdGF0ZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nTGl0ZXJhbEV4cHJlc3Npb24oYXJnLT5uYW1lLmRhdGEpLCB2LCBfZGF0YSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXJnID0gYXJnLT5uZXh0OwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlzIGEgcmVzdWx0cyBpbnRlcmZhY2UgZm9yIHRoaXMgY2xhc3MKLSAgICBFeHByZXNzaW9uKiByZXN1bHRQYXJhbWV0ZXI7Ci0gICAgaWYgKHJlc3VsdHNJbnRlcmZhY2VUeXBlICE9IE5VTEwpIHsKLSAgICAgICAgLy8gUmVzdWx0IGludGVyZmFjZSBwYXJhbWV0ZXIKLSAgICAgICAgVmFyaWFibGUqIHJlc3VsdExpc3RlbmVyID0gbmV3IFZhcmlhYmxlKHJlc3VsdHNJbnRlcmZhY2VUeXBlLCAiX3Jlc3VsdCIpOwotICAgICAgICBwcm94eU1ldGhvZC0+cGFyYW1ldGVycy5wdXNoX2JhY2socmVzdWx0TGlzdGVuZXIpOwotCi0gICAgICAgIC8vIEFkZCB0aGUgcmVzdWx0cyBkaXNwYXRjaGVyIGNhbGxiYWNrCi0gICAgICAgIHJlc3VsdHNEaXNwYXRjaGVyQ2xhc3MtPm5lZWRlZCA9IHRydWU7Ci0gICAgICAgIHJlc3VsdFBhcmFtZXRlciA9IG5ldyBOZXdFeHByZXNzaW9uKHJlc3VsdHNEaXNwYXRjaGVyQ2xhc3MtPnR5cGUsIDIsCi0gICAgICAgICAgICAgICAgbmV3IExpdGVyYWxFeHByZXNzaW9uKGZvcm1hdF9pbnQoaW5kZXgpKSwgcmVzdWx0TGlzdGVuZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdFBhcmFtZXRlciA9IE5VTExfVkFMVUU7Ci0gICAgfQotCi0gICAgLy8gQWxsIHByb3h5IG1ldGhvZHMgdGFrZSBhbiBlcnJvciBwYXJhbWV0ZXIKLSAgICBWYXJpYWJsZSogZXJyb3JMaXN0ZW5lciA9IG5ldyBWYXJpYWJsZShSUENfRVJST1JfTElTVEVORVJfVFlQRSwgIl9lcnJvcnMiKTsKLSAgICBwcm94eU1ldGhvZC0+cGFyYW1ldGVycy5wdXNoX2JhY2soZXJyb3JMaXN0ZW5lcik7Ci0KLSAgICAvLyBDYWxsIHRoZSBicm9rZXIKLSAgICBwcm94eU1ldGhvZC0+c3RhdGVtZW50cy0+QWRkKG5ldyBNZXRob2RDYWxsKG5ldyBGaWVsZFZhcmlhYmxlKFRISVNfVkFMVUUsICJfYnJva2VyIiksCi0gICAgICAgICAgICAgICAgInNlbmRScGMiLCA1LAotICAgICAgICAgICAgICAgIHByb3h5Q2xhc3MtPmVuZHBvaW50LAotICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdMaXRlcmFsRXhwcmVzc2lvbihtZXRob2QtPm5hbWUuZGF0YSksCi0gICAgICAgICAgICAgICAgbmV3IE1ldGhvZENhbGwoX2RhdGEsICJzZXJpYWxpemUiKSwKLSAgICAgICAgICAgICAgICByZXN1bHRQYXJhbWV0ZXIsCi0gICAgICAgICAgICAgICAgZXJyb3JMaXN0ZW5lcikpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVfcmVzdWx0X2Rpc3BhdGNoZXJfbWV0aG9kKGNvbnN0IG1ldGhvZF90eXBlKiBtZXRob2QsCi0gICAgICAgIFJlc3VsdERpc3BhdGNoZXJDbGFzcyogcmVzdWx0c0Rpc3BhdGNoZXJDbGFzcywgVHlwZSogcmVzdWx0c0ludGVyZmFjZVR5cGUsIGludCBpbmRleCkKLXsKLSAgICBhcmdfdHlwZSogYXJnOwotICAgIE1ldGhvZCogZGlzcGF0Y2hNZXRob2Q7Ci0gICAgVmFyaWFibGUqIGRpc3BhdGNoUGFyYW07Ci0gICAgcmVzdWx0c0Rpc3BhdGNoZXJDbGFzcy0+QWRkTWV0aG9kKGluZGV4LCBtZXRob2QtPm5hbWUuZGF0YSwgJmRpc3BhdGNoTWV0aG9kLCAmZGlzcGF0Y2hQYXJhbSk7Ci0KLSAgICBWYXJpYWJsZSogY2xhc3NMb2FkZXIgPSBOVUxMOwotICAgIFZhcmlhYmxlKiByZXN1bHREYXRhID0gbmV3IFZhcmlhYmxlKFJQQ19EQVRBX1RZUEUsICJyZXN1bHREYXRhIik7Ci0gICAgZGlzcGF0Y2hNZXRob2QtPnN0YXRlbWVudHMtPkFkZChuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihyZXN1bHREYXRhLAotICAgICAgICAgICAgICAgIG5ldyBOZXdFeHByZXNzaW9uKFJQQ19EQVRBX1RZUEUsIDEsIGRpc3BhdGNoUGFyYW0pKSk7Ci0KLSAgICAvLyBUaGUgY2FsbGJhY2sgbWV0aG9kIGl0c2VsZgotICAgIE1ldGhvZENhbGwqIHJlYWxDYWxsID0gbmV3IE1ldGhvZENhbGwoCi0gICAgICAgICAgICBuZXcgQ2FzdChyZXN1bHRzSW50ZXJmYWNlVHlwZSwgbmV3IEZpZWxkVmFyaWFibGUoVEhJU19WQUxVRSwgImNhbGxiYWNrIikpLAotICAgICAgICAgICAgcmVzdWx0c19tZXRob2RfbmFtZShtZXRob2QtPm5hbWUuZGF0YSkpOwotCi0gICAgLy8gVGhlIHJldHVybiB2YWx1ZQotICAgIHsKLSAgICAgICAgVHlwZSogdCA9IE5BTUVTLlNlYXJjaChtZXRob2QtPnR5cGUudHlwZS5kYXRhKTsKLSAgICAgICAgaWYgKHQgIT0gVk9JRF9UWVBFKSB7Ci0gICAgICAgICAgICBWYXJpYWJsZSogcnYgPSBuZXcgVmFyaWFibGUodCwgInJ2Iik7Ci0gICAgICAgICAgICBkaXNwYXRjaE1ldGhvZC0+c3RhdGVtZW50cy0+QWRkKG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKHJ2KSk7Ci0gICAgICAgICAgICBnZW5lcmF0ZV9jcmVhdGVfZnJvbV9kYXRhKHQsIGRpc3BhdGNoTWV0aG9kLT5zdGF0ZW1lbnRzLCAiX3Jlc3VsdCIsIHJ2LAotICAgICAgICAgICAgICAgICAgICByZXN1bHREYXRhLCAmY2xhc3NMb2FkZXIpOwotICAgICAgICAgICAgcmVhbENhbGwtPmFyZ3VtZW50cy5wdXNoX2JhY2socnYpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgVmFyaWFibGVGYWN0b3J5IHN0dWJBcmdzKCJhcmciKTsKLSAgICBhcmcgPSBtZXRob2QtPmFyZ3M7Ci0gICAgd2hpbGUgKGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChjb252ZXJ0X2RpcmVjdGlvbihhcmctPmRpcmVjdGlvbi5kYXRhKSAmIE9VVF9QQVJBTUVURVIpIHsKLSAgICAgICAgICAgIC8vIFVubWFyc2hhbGwgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgIFR5cGUqIHQgPSBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgICAgICBWYXJpYWJsZSogdiA9IHN0dWJBcmdzLkdldCh0KTsKLSAgICAgICAgICAgIGRpc3BhdGNoTWV0aG9kLT5zdGF0ZW1lbnRzLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24odikpOwotCi0gICAgICAgICAgICBnZW5lcmF0ZV9jcmVhdGVfZnJvbV9kYXRhKHQsIGRpc3BhdGNoTWV0aG9kLT5zdGF0ZW1lbnRzLCBhcmctPm5hbWUuZGF0YSwgdiwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0RGF0YSwgJmNsYXNzTG9hZGVyKTsKLQotICAgICAgICAgICAgLy8gQWRkIHRoZSBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2sKLSAgICAgICAgICAgIHJlYWxDYWxsLT5hcmd1bWVudHMucHVzaF9iYWNrKHYpOwotICAgICAgICB9Ci0gICAgICAgIGFyZyA9IGFyZy0+bmV4dDsKLSAgICB9Ci0KLSAgICAvLyBDYWxsIHRoZSBjYWxsYmFjayBtZXRob2QKLSAgICBJZlN0YXRlbWVudCogaWZzdCA9IG5ldyBJZlN0YXRlbWVudDsKLSAgICAgICAgaWZzdC0+ZXhwcmVzc2lvbiA9IG5ldyBDb21wYXJpc29uKG5ldyBGaWVsZFZhcmlhYmxlKFRISVNfVkFMVUUsICJjYWxsYmFjayIpLCAiIT0iLCBOVUxMX1ZBTFVFKTsKLSAgICBkaXNwYXRjaE1ldGhvZC0+c3RhdGVtZW50cy0+QWRkKGlmc3QpOwotICAgIGlmc3QtPnN0YXRlbWVudHMtPkFkZChyZWFsQ2FsbCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW5lcmF0ZV9yZWd1bGFyX21ldGhvZChjb25zdCBtZXRob2RfdHlwZSogbWV0aG9kLCBScGNQcm94eUNsYXNzKiBwcm94eUNsYXNzLAotICAgICAgICBFbmRwb2ludEJhc2VDbGFzcyogc2VydmljZUJhc2VDbGFzcywgUmVzdWx0RGlzcGF0Y2hlckNsYXNzKiByZXN1bHRzRGlzcGF0Y2hlckNsYXNzLAotICAgICAgICBpbnQgaW5kZXgpCi17Ci0gICAgYXJnX3R5cGUqIGFyZzsKLQotICAgIC8vID09IHRoZSBjYWxsYmFjayBpbnRlcmZhY2UgZm9yIHJlc3VsdHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAvLyB0aGUgc2VydmljZSBiYXNlIGNsYXNzCi0gICAgVHlwZSogcmVzdWx0c0ludGVyZmFjZVR5cGUgPSBnZW5lcmF0ZV9yZXN1bHRzX21ldGhvZChtZXRob2QsIHByb3h5Q2xhc3MpOwotICAgIAotICAgIC8vID09IHRoZSBtZXRob2QgaW4gdGhlIHByb3h5IGNsYXNzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBnZW5lcmF0ZV9wcm94eV9tZXRob2QobWV0aG9kLCBwcm94eUNsYXNzLCByZXN1bHRzRGlzcGF0Y2hlckNsYXNzLCByZXN1bHRzSW50ZXJmYWNlVHlwZSwgaW5kZXgpOwotCi0gICAgLy8gPT0gdGhlIG1ldGhvZCBpbiB0aGUgcmVzdWx0IGRpc3BhdGNoZXIgY2xhc3MgPT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIGlmIChyZXN1bHRzSW50ZXJmYWNlVHlwZSAhPSBOVUxMKSB7Ci0gICAgICAgIGdlbmVyYXRlX3Jlc3VsdF9kaXNwYXRjaGVyX21ldGhvZChtZXRob2QsIHJlc3VsdHNEaXNwYXRjaGVyQ2xhc3MsIHJlc3VsdHNJbnRlcmZhY2VUeXBlLAotICAgICAgICAgICAgICAgIGluZGV4KTsKLSAgICB9Ci0KLSAgICAvLyA9PSBUaGUgYWJzdHJhY3QgbWV0aG9kIHRoYXQgdGhlIHNlcnZpY2UgZGV2ZWxvcGVycyBpbXBsZW1lbnQgPT09PT09PT09PQotICAgIE1ldGhvZCogZGVjbCA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIGRlY2wtPmNvbW1lbnQgPSBnYXRoZXJfY29tbWVudHMobWV0aG9kLT5jb21tZW50c190b2tlbi0+ZXh0cmEpOwotICAgICAgICBkZWNsLT5tb2RpZmllcnMgPSBQVUJMSUMgfCBBQlNUUkFDVDsKLSAgICAgICAgZGVjbC0+cmV0dXJuVHlwZSA9IE5BTUVTLlNlYXJjaChtZXRob2QtPnR5cGUudHlwZS5kYXRhKTsKLSAgICAgICAgZGVjbC0+cmV0dXJuVHlwZURpbWVuc2lvbiA9IG1ldGhvZC0+dHlwZS5kaW1lbnNpb247Ci0gICAgICAgIGRlY2wtPm5hbWUgPSBtZXRob2QtPm5hbWUuZGF0YTsKLSAgICBhcmcgPSBtZXRob2QtPmFyZ3M7Ci0gICAgd2hpbGUgKGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgIGRlY2wtPnBhcmFtZXRlcnMucHVzaF9iYWNrKG5ldyBWYXJpYWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSksIGFyZy0+bmFtZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy0+dHlwZS5kaW1lbnNpb24pKTsKLSAgICAgICAgYXJnID0gYXJnLT5uZXh0OwotICAgIH0KLQotICAgIC8vIEFkZCB0aGUgZGVmYXVsdCBScGNDb250ZXh0IHBhcmFtIHRvIGFsbCBtZXRob2RzCi0gICAgZGVjbC0+cGFyYW1ldGVycy5wdXNoX2JhY2sobmV3IFZhcmlhYmxlKFJQQ19DT05URVhUX1RZUEUsICJjb250ZXh0IiwgMCkpOwotCQotICAgIHNlcnZpY2VCYXNlQ2xhc3MtPmVsZW1lbnRzLnB1c2hfYmFjayhkZWNsKTsKLSAgICAKLQotICAgIC8vID09IHRoZSBkaXNwYXRjaCBtZXRob2QgaW4gdGhlIHNlcnZpY2UgYmFzZSBjbGFzcyA9PT09PT09PT09PT09PT09PT09PT09Ci0gICAgc2VydmljZUJhc2VDbGFzcy0+QWRkTWV0aG9kKG1ldGhvZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW5lcmF0ZV9ldmVudF9tZXRob2QoY29uc3QgbWV0aG9kX3R5cGUqIG1ldGhvZCwgUnBjUHJveHlDbGFzcyogcHJveHlDbGFzcywKLSAgICAgICAgRW5kcG9pbnRCYXNlQ2xhc3MqIHNlcnZpY2VCYXNlQ2xhc3MsIExpc3RlbmVyQ2xhc3MqIGxpc3RlbmVyQ2xhc3MsCi0gICAgICAgIEV2ZW50TGlzdGVuZXJDbGFzcyogcHJlc2VudGVyQ2xhc3MsIGludCBpbmRleCkKLXsKLSAgICBhcmdfdHlwZSogYXJnOwotICAgIGxpc3RlbmVyQ2xhc3MtPm5lZWRlZCA9IHRydWU7Ci0KLSAgICAvLyA9PSB0aGUgcHVzaCBtZXRob2QgaW4gdGhlIHNlcnZpY2UgYmFzZSBjbGFzcyA9PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgTWV0aG9kKiBwdXNoID0gbmV3IE1ldGhvZDsKLSAgICAgICAgcHVzaC0+bW9kaWZpZXJzID0gUFVCTElDOwotICAgICAgICBwdXNoLT5uYW1lID0gcHVzaF9tZXRob2RfbmFtZShtZXRob2QtPm5hbWUuZGF0YSk7Ci0gICAgICAgIHB1c2gtPnN0YXRlbWVudHMgPSBuZXcgU3RhdGVtZW50QmxvY2s7Ci0gICAgICAgIHB1c2gtPnJldHVyblR5cGUgPSBWT0lEX1RZUEU7Ci0gICAgc2VydmljZUJhc2VDbGFzcy0+ZWxlbWVudHMucHVzaF9iYWNrKHB1c2gpOwotCi0gICAgLy8gVGhlIGxvY2FsIHZhcmlhYmxlcwotICAgIFZhcmlhYmxlKiBfZGF0YSA9IG5ldyBWYXJpYWJsZShSUENfREFUQV9UWVBFLCAiX2RhdGEiKTsKLSAgICBwdXNoLT5zdGF0ZW1lbnRzLT5BZGQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oX2RhdGEsIG5ldyBOZXdFeHByZXNzaW9uKFJQQ19EQVRBX1RZUEUpKSk7Ci0KLSAgICAvLyBBZGQgdGhlIGFyZ3VtZW50cwotICAgIGFyZyA9IG1ldGhvZC0+YXJnczsKLSAgICB3aGlsZSAoYXJnICE9IE5VTEwpIHsKLSAgICAgICAgLy8gRnVuY3Rpb24gc2lnbmF0dXJlCi0gICAgICAgIFR5cGUqIHQgPSBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSk7Ci0gICAgICAgIFZhcmlhYmxlKiB2ID0gbmV3IFZhcmlhYmxlKHQsIGFyZy0+bmFtZS5kYXRhLCBhcmctPnR5cGUuZGltZW5zaW9uKTsKLSAgICAgICAgcHVzaC0+cGFyYW1ldGVycy5wdXNoX2JhY2sodik7Ci0KLSAgICAgICAgLy8gSW5wdXQgcGFyYW1ldGVyIG1hcnNoYWxsaW5nCi0gICAgICAgIGdlbmVyYXRlX3dyaXRlX3RvX2RhdGEodCwgcHVzaC0+c3RhdGVtZW50cywKLSAgICAgICAgICAgICAgICBuZXcgU3RyaW5nTGl0ZXJhbEV4cHJlc3Npb24oYXJnLT5uYW1lLmRhdGEpLCB2LCBfZGF0YSk7Ci0KLSAgICAgICAgYXJnID0gYXJnLT5uZXh0OwotICAgIH0KLQotICAgIC8vIFNlbmQgdGhlIG5vdGlmaWNhdGlvbnMKLSAgICBwdXNoLT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwoInB1c2hFdmVudCIsIDIsCi0gICAgICAgICAgICAgICAgbmV3IFN0cmluZ0xpdGVyYWxFeHByZXNzaW9uKG1ldGhvZC0+bmFtZS5kYXRhKSwKLSAgICAgICAgICAgICAgICBuZXcgTWV0aG9kQ2FsbChfZGF0YSwgInNlcmlhbGl6ZSIpKSk7Ci0KLSAgICAvLyA9PSB0aGUgZXZlbnQgY2FsbGJhY2sgZGlzcGF0Y2hlciBtZXRob2QgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIHByZXNlbnRlckNsYXNzLT5BZGRNZXRob2QobWV0aG9kKTsKLQotICAgIC8vID09IHRoZSBldmVudCBtZXRob2QgaW4gdGhlIGxpc3RlbmVyIGJhc2UgY2xhc3MgPT09PT09PT09PT09PT09PT09PT09Ci0gICAgTWV0aG9kKiBldmVudCA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIGV2ZW50LT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgICAgIGV2ZW50LT5uYW1lID0gbWV0aG9kLT5uYW1lLmRhdGE7Ci0gICAgICAgIGV2ZW50LT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgICAgICBldmVudC0+cmV0dXJuVHlwZSA9IFZPSURfVFlQRTsKLSAgICBsaXN0ZW5lckNsYXNzLT5lbGVtZW50cy5wdXNoX2JhY2soZXZlbnQpOwotICAgIGFyZyA9IG1ldGhvZC0+YXJnczsKLSAgICB3aGlsZSAoYXJnICE9IE5VTEwpIHsKLSAgICAgICAgZXZlbnQtPnBhcmFtZXRlcnMucHVzaF9iYWNrKG5ldyBWYXJpYWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUy5TZWFyY2goYXJnLT50eXBlLnR5cGUuZGF0YSksIGFyZy0+bmFtZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy0+dHlwZS5kaW1lbnNpb24pKTsKLSAgICAgICAgYXJnID0gYXJnLT5uZXh0OwotICAgIH0KLQotICAgIC8vIEFkZCBhIGZpbmFsIHBhcmFtZXRlcjogUnBjQ29udGV4dC4gQ29udGFpbnMgZGF0YSBhYm91dAotICAgIC8vIGluY29taW5nIHJlcXVlc3QgKGUuZy4sIGNlcnRpZmljYXRlKQotICAgIGV2ZW50LT5wYXJhbWV0ZXJzLnB1c2hfYmFjayhuZXcgVmFyaWFibGUoUlBDX0NPTlRFWFRfVFlQRSwgImNvbnRleHQiLCAwKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW5lcmF0ZV9saXN0ZW5lcl9tZXRob2RzKFJwY1Byb3h5Q2xhc3MqIHByb3h5Q2xhc3MsIFR5cGUqIHByZXNlbnRlclR5cGUsIFR5cGUqIGxpc3RlbmVyVHlwZSkKLXsKLSAgICAvLyBBbmRyb2lkQXRIb21lUHJlc2VudGVyIF9wcmVzZW50ZXI7Ci0gICAgLy8gdm9pZCBzdGFydExpc3RlbmluZyhMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgIC8vICAgICBzdG9wTGlzdGVuaW5nKCk7Ci0gICAgLy8gICAgIF9wcmVzZW50ZXIgPSBuZXcgUHJlc2VudGVyKF9icm9rZXIsIGxpc3RlbmVyKTsKLSAgICAvLyAgICAgX3ByZXNlbnRlci5zdGFydExpc3RlbmluZyhfZW5kcG9pbnQpOwotICAgIC8vIH0KLSAgICAvLyB2b2lkIHN0b3BMaXN0ZW5pbmcoKSB7Ci0gICAgLy8gICAgIGlmIChfcHJlc2VudGVyICE9IG51bGwpIHsKLSAgICAvLyAgICAgICAgIF9wcmVzZW50ZXIuc3RvcExpc3RlbmluZygpOwotICAgIC8vICAgICB9Ci0gICAgLy8gfQotCi0gICAgVmFyaWFibGUqIF9wcmVzZW50ZXIgPSBuZXcgVmFyaWFibGUocHJlc2VudGVyVHlwZSwgIl9wcmVzZW50ZXIiKTsKLSAgICBwcm94eUNsYXNzLT5lbGVtZW50cy5wdXNoX2JhY2sobmV3IEZpZWxkKFBSSVZBVEUsIF9wcmVzZW50ZXIpKTsKLQotICAgIFZhcmlhYmxlKiBsaXN0ZW5lciA9IG5ldyBWYXJpYWJsZShsaXN0ZW5lclR5cGUsICJsaXN0ZW5lciIpOwotCi0gICAgTWV0aG9kKiBzdGFydExpc3RlbmluZ01ldGhvZCA9IG5ldyBNZXRob2Q7Ci0gICAgICAgIHN0YXJ0TGlzdGVuaW5nTWV0aG9kLT5tb2RpZmllcnMgPSBQVUJMSUM7Ci0gICAgICAgIHN0YXJ0TGlzdGVuaW5nTWV0aG9kLT5yZXR1cm5UeXBlID0gVk9JRF9UWVBFOwotICAgICAgICBzdGFydExpc3RlbmluZ01ldGhvZC0+bmFtZSA9ICJzdGFydExpc3RlbmluZyI7Ci0gICAgICAgIHN0YXJ0TGlzdGVuaW5nTWV0aG9kLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgICAgICBzdGFydExpc3RlbmluZ01ldGhvZC0+cGFyYW1ldGVycy5wdXNoX2JhY2sobGlzdGVuZXIpOwotICAgIHByb3h5Q2xhc3MtPmVsZW1lbnRzLnB1c2hfYmFjayhzdGFydExpc3RlbmluZ01ldGhvZCk7Ci0KLSAgICBzdGFydExpc3RlbmluZ01ldGhvZC0+c3RhdGVtZW50cy0+QWRkKG5ldyBNZXRob2RDYWxsKFRISVNfVkFMVUUsICJzdG9wTGlzdGVuaW5nIikpOwotICAgIHN0YXJ0TGlzdGVuaW5nTWV0aG9kLT5zdGF0ZW1lbnRzLT5BZGQobmV3IEFzc2lnbm1lbnQoX3ByZXNlbnRlciwKLSAgICAgICAgICAgICAgICBuZXcgTmV3RXhwcmVzc2lvbihwcmVzZW50ZXJUeXBlLCAyLCBwcm94eUNsYXNzLT5icm9rZXIsIGxpc3RlbmVyKSkpOwotICAgIHN0YXJ0TGlzdGVuaW5nTWV0aG9kLT5zdGF0ZW1lbnRzLT5BZGQobmV3IE1ldGhvZENhbGwoX3ByZXNlbnRlciwKLSAgICAgICAgICAgICAgICAic3RhcnRMaXN0ZW5pbmciLCAxLCBwcm94eUNsYXNzLT5lbmRwb2ludCkpOwotCi0gICAgTWV0aG9kKiBzdG9wTGlzdGVuaW5nTWV0aG9kID0gbmV3IE1ldGhvZDsKLSAgICAgICAgc3RvcExpc3RlbmluZ01ldGhvZC0+bW9kaWZpZXJzID0gUFVCTElDOwotICAgICAgICBzdG9wTGlzdGVuaW5nTWV0aG9kLT5yZXR1cm5UeXBlID0gVk9JRF9UWVBFOwotICAgICAgICBzdG9wTGlzdGVuaW5nTWV0aG9kLT5uYW1lID0gInN0b3BMaXN0ZW5pbmciOwotICAgICAgICBzdG9wTGlzdGVuaW5nTWV0aG9kLT5zdGF0ZW1lbnRzID0gbmV3IFN0YXRlbWVudEJsb2NrOwotICAgIHByb3h5Q2xhc3MtPmVsZW1lbnRzLnB1c2hfYmFjayhzdG9wTGlzdGVuaW5nTWV0aG9kKTsKLQotICAgIElmU3RhdGVtZW50KiBpZnN0ID0gbmV3IElmU3RhdGVtZW50OwotICAgICAgICBpZnN0LT5leHByZXNzaW9uID0gbmV3IENvbXBhcmlzb24oX3ByZXNlbnRlciwgIiE9IiwgTlVMTF9WQUxVRSk7Ci0gICAgc3RvcExpc3RlbmluZ01ldGhvZC0+c3RhdGVtZW50cy0+QWRkKGlmc3QpOwotCi0gICAgaWZzdC0+c3RhdGVtZW50cy0+QWRkKG5ldyBNZXRob2RDYWxsKF9wcmVzZW50ZXIsICJzdG9wTGlzdGVuaW5nIikpOwotICAgIGlmc3QtPnN0YXRlbWVudHMtPkFkZChuZXcgQXNzaWdubWVudChfcHJlc2VudGVyLCBOVUxMX1ZBTFVFKSk7Ci19Ci0KLUNsYXNzKgotZ2VuZXJhdGVfcnBjX2ludGVyZmFjZV9jbGFzcyhjb25zdCBpbnRlcmZhY2VfdHlwZSogaWZhY2UpCi17Ci0gICAgLy8gdGhlIHByb3h5IGNsYXNzCi0gICAgSW50ZXJmYWNlVHlwZSogaW50ZXJmYWNlVHlwZSA9IHN0YXRpY19jYXN0PEludGVyZmFjZVR5cGUqPigKLSAgICAgICAgTkFNRVMuRmluZChpZmFjZS0+cGFja2FnZSwgaWZhY2UtPm5hbWUuZGF0YSkpOwotICAgIFJwY1Byb3h5Q2xhc3MqIHByb3h5ID0gbmV3IFJwY1Byb3h5Q2xhc3MoaWZhY2UsIGludGVyZmFjZVR5cGUpOwotCi0gICAgLy8gdGhlIGxpc3RlbmVyIGNsYXNzCi0gICAgTGlzdGVuZXJDbGFzcyogbGlzdGVuZXIgPSBuZXcgTGlzdGVuZXJDbGFzcyhpZmFjZSk7Ci0KLSAgICAvLyB0aGUgcHJlc2VudGVyIGNsYXNzCi0gICAgRXZlbnRMaXN0ZW5lckNsYXNzKiBwcmVzZW50ZXIgPSBuZXcgRXZlbnRMaXN0ZW5lckNsYXNzKGlmYWNlLCBsaXN0ZW5lci0+dHlwZSk7Ci0KLSAgICAvLyB0aGUgc2VydmljZSBiYXNlIGNsYXNzCi0gICAgRW5kcG9pbnRCYXNlQ2xhc3MqIGJhc2UgPSBuZXcgRW5kcG9pbnRCYXNlQ2xhc3MoaWZhY2UpOwotICAgIHByb3h5LT5lbGVtZW50cy5wdXNoX2JhY2soYmFzZSk7Ci0KLSAgICAvLyB0aGUgcmVzdWx0IGRpc3BhdGNoZXIKLSAgICBSZXN1bHREaXNwYXRjaGVyQ2xhc3MqIHJlc3VsdHMgPSBuZXcgUmVzdWx0RGlzcGF0Y2hlckNsYXNzKCk7Ci0KLSAgICAvLyBhbGwgdGhlIGRlY2xhcmVkIG1ldGhvZHMgb2YgdGhlIHByb3h5Ci0gICAgaW50IGluZGV4ID0gMDsKLSAgICBpbnRlcmZhY2VfaXRlbV90eXBlKiBpdGVtID0gaWZhY2UtPmludGVyZmFjZV9pdGVtczsKLSAgICB3aGlsZSAoaXRlbSAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChpdGVtLT5pdGVtX3R5cGUgPT0gTUVUSE9EX1RZUEUpIHsKLSAgICAgICAgICAgIGlmIChOQU1FUy5TZWFyY2goKChtZXRob2RfdHlwZSopaXRlbSktPnR5cGUudHlwZS5kYXRhKSA9PSBFVkVOVF9GQUtFX1RZUEUpIHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZV9ldmVudF9tZXRob2QoKG1ldGhvZF90eXBlKilpdGVtLCBwcm94eSwgYmFzZSwgbGlzdGVuZXIsIHByZXNlbnRlciwgaW5kZXgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZV9yZWd1bGFyX21ldGhvZCgobWV0aG9kX3R5cGUqKWl0ZW0sIHByb3h5LCBiYXNlLCByZXN1bHRzLCBpbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaXRlbSA9IGl0ZW0tPm5leHQ7Ci0gICAgICAgIGluZGV4Kys7Ci0gICAgfQotICAgIHByZXNlbnRlci0+RG9uZVdpdGhNZXRob2RzKCk7Ci0gICAgYmFzZS0+RG9uZVdpdGhNZXRob2RzKCk7Ci0KLSAgICAvLyBvbmx5IGFkZCB0aGlzIGlmIHRoZXJlIGFyZSBtZXRob2RzIHdpdGggcmVzdWx0cyAvIG91dCBwYXJhbWV0ZXJzCi0gICAgaWYgKHJlc3VsdHMtPm5lZWRlZCkgewotICAgICAgICBwcm94eS0+ZWxlbWVudHMucHVzaF9iYWNrKHJlc3VsdHMpOwotICAgIH0KLSAgICBpZiAobGlzdGVuZXItPm5lZWRlZCkgewotICAgICAgICBwcm94eS0+ZWxlbWVudHMucHVzaF9iYWNrKGxpc3RlbmVyKTsKLSAgICAgICAgcHJveHktPmVsZW1lbnRzLnB1c2hfYmFjayhwcmVzZW50ZXIpOwotICAgICAgICBnZW5lcmF0ZV9saXN0ZW5lcl9tZXRob2RzKHByb3h5LCBwcmVzZW50ZXItPnR5cGUsIGxpc3RlbmVyLT50eXBlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcHJveHk7Ci19CmRpZmYgLS1naXQgYS90b29scy9haWRsL29wdGlvbnMuY3BwIGIvdG9vbHMvYWlkbC9vcHRpb25zLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IyZGFlYi4uMDAwMDAwMAotLS0gYS90b29scy9haWRsL29wdGlvbnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLQotI2luY2x1ZGUgIm9wdGlvbnMuaCIKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXN0YXRpYyBpbnQKLXVzYWdlKCkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICJ1c2FnZTogYWlkbCBPUFRJT05TIElOUFVUIFtPVVRQVVRdXG4iCi0gICAgICAgICAgICAiICAgICAgIGFpZGwgLS1wcmVwcm9jZXNzIE9VVFBVVCBJTlBVVC4uLlxuIgotICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgIk9QVElPTlM6XG4iCi0gICAgICAgICAgICAiICAgLUk8RElSPiAgICBzZWFyY2ggcGF0aCBmb3IgaW1wb3J0IHN0YXRlbWVudHMuXG4iCi0gICAgICAgICAgICAiICAgLWQ8RklMRT4gICBnZW5lcmF0ZSBkZXBlbmRlbmN5IGZpbGUuXG4iCi0gICAgICAgICAgICAiICAgLWEgICAgICAgICBnZW5lcmF0ZSBkZXBlbmRlbmN5IGZpbGUgbmV4dCB0byB0aGUgb3V0cHV0IGZpbGUgd2l0aCB0aGUgbmFtZSBiYXNlZCBvbiB0aGUgaW5wdXQgZmlsZS5cbiIKLSAgICAgICAgICAgICIgICAtcDxGSUxFPiAgIGZpbGUgY3JlYXRlZCBieSAtLXByZXByb2Nlc3MgdG8gaW1wb3J0LlxuIgotICAgICAgICAgICAgIiAgIC1vPEZPTERFUj4gYmFzZSBvdXRwdXQgZm9sZGVyIGZvciBnZW5lcmF0ZWQgZmlsZXMuXG4iCi0gICAgICAgICAgICAiICAgLWIgICAgICAgICBmYWlsIHdoZW4gdHJ5aW5nIHRvIGNvbXBpbGUgYSBwYXJjZWxhYmxlLlxuIgotICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgIklOUFVUOlxuIgotICAgICAgICAgICAgIiAgIEFuIGFpZGwgaW50ZXJmYWNlIGZpbGUuXG4iCi0gICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAiT1VUUFVUOlxuIgotICAgICAgICAgICAgIiAgIFRoZSBnZW5lcmF0ZWQgaW50ZXJmYWNlIGZpbGVzLlxuIgotICAgICAgICAgICAgIiAgIElmIG9taXR0ZWQgYW5kIHRoZSAtbyBvcHRpb24gaXMgbm90IHVzZWQsIHRoZSBpbnB1dCBmaWxlbmFtZSBpcyB1c2VkLCB3aXRoIHRoZSAuYWlkbCBleHRlbnNpb24gY2hhbmdlZCB0byBhIC5qYXZhIGV4dGVuc2lvbi5cbiIKLSAgICAgICAgICAgICIgICBJZiB0aGUgLW8gb3B0aW9uIGlzIHVzZWQsIHRoZSBnZW5lcmF0ZWQgZmlsZXMgd2lsbCBiZSBwbGFjZWQgaW4gdGhlIGJhc2Ugb3V0cHV0IGZvbGRlciwgdW5kZXIgdGhlaXIgcGFja2FnZSBmb2xkZXJcbiIKLSAgICAgICAgICAgKTsKLSAgICByZXR1cm4gMTsKLX0KLQotaW50Ci1wYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyKiBjb25zdCogYXJndiwgT3B0aW9ucyAqb3B0aW9ucykKLXsKLSAgICBpbnQgaSA9IDE7Ci0KLSAgICBpZiAoYXJnYyA+PSAyICYmIDAgPT0gc3RyY21wKGFyZ3ZbMV0sICItLXByZXByb2Nlc3MiKSkgewotICAgICAgICBpZiAoYXJnYyA8IDQpIHsKLSAgICAgICAgICAgIHJldHVybiB1c2FnZSgpOwotICAgICAgICB9Ci0gICAgICAgIG9wdGlvbnMtPm91dHB1dEZpbGVOYW1lID0gYXJndlsyXTsKLSAgICAgICAgZm9yIChpbnQgaT0zOyBpPGFyZ2M7IGkrKykgewotICAgICAgICAgICAgb3B0aW9ucy0+ZmlsZXNUb1ByZXByb2Nlc3MucHVzaF9iYWNrKGFyZ3ZbaV0pOwotICAgICAgICB9Ci0gICAgICAgIG9wdGlvbnMtPnRhc2sgPSBQUkVQUk9DRVNTX0FJREw7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIG9wdGlvbnMtPnRhc2sgPSBDT01QSUxFX0FJREw7Ci0gICAgb3B0aW9ucy0+ZmFpbE9uUGFyY2VsYWJsZSA9IGZhbHNlOwotICAgIG9wdGlvbnMtPmF1dG9EZXBGaWxlID0gZmFsc2U7Ci0KLSAgICAvLyBPUFRJT05TCi0gICAgd2hpbGUgKGkgPCBhcmdjKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHMgPSBhcmd2W2ldOwotICAgICAgICBpbnQgbGVuID0gc3RybGVuKHMpOwotICAgICAgICBpZiAoc1swXSA9PSAnLScpIHsKLSAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7Ci0gICAgICAgICAgICAgICAgLy8gLUk8c3lzdGVtLWltcG9ydC1wYXRoPgotICAgICAgICAgICAgICAgIGlmIChzWzFdID09ICdJJykgewotICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy0+aW1wb3J0UGF0aHMucHVzaF9iYWNrKHMrMik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi1JIG9wdGlvbiAoJWQpIHJlcXVpcmVzIGEgcGF0aC5cbiIsIGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzYWdlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc1sxXSA9PSAnZCcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMtPmRlcEZpbGVOYW1lID0gcysyOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICItZCBvcHRpb24gKCVkKSByZXF1aXJlcyBhIGZpbGUuXG4iLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2FnZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNbMV0gPT0gJ2EnKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMtPmF1dG9EZXBGaWxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc1sxXSA9PSAncCcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMtPnByZXByb2Nlc3NlZEZpbGVzLnB1c2hfYmFjayhzKzIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICItcCBvcHRpb24gKCVkKSByZXF1aXJlcyBhIGZpbGUuXG4iLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2FnZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNbMV0gPT0gJ28nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLT5vdXRwdXRCYXNlRm9sZGVyID0gcysyOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICItbyBvcHRpb24gKCVkKSByZXF1aXJlcyBhIHBhdGguXG4iLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2FnZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxlbiA9PSAyICYmIHNbMV0gPT0gJ2InKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMtPmZhaWxPblBhcmNlbGFibGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gc1sxXSBpcyBub3Qga25vd24KLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmtub3duIG9wdGlvbiAoJWQpOiAlc1xuIiwgaSwgcyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2FnZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gbGVuIDw9IDEKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVua25vd24gb3B0aW9uICglZCk6ICVzXG4iLCBpLCBzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdXNhZ2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHNbMF0gIT0gJy0nCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpKys7Ci0gICAgfQotCi0gICAgLy8gSU5QVVQKLSAgICBpZiAoaSA8IGFyZ2MpIHsKLSAgICAgICAgb3B0aW9ucy0+aW5wdXRGaWxlTmFtZSA9IGFyZ3ZbaV07Ci0gICAgICAgIGkrKzsKLSAgICB9IGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIklOUFVUIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgcmV0dXJuIHVzYWdlKCk7Ci0gICAgfQotCi0gICAgLy8gT1VUUFVUCi0gICAgaWYgKGkgPCBhcmdjKSB7Ci0gICAgICAgIG9wdGlvbnMtPm91dHB1dEZpbGVOYW1lID0gYXJndltpXTsKLSAgICAgICAgaSsrOwotICAgIH0gZWxzZSBpZiAob3B0aW9ucy0+b3V0cHV0QmFzZUZvbGRlci5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICAgIC8vIGNvcHkgaW5wdXQgaW50byBvdXRwdXQgYW5kIGNoYW5nZSB0aGUgZXh0ZW5zaW9uIGZyb20gLmFpZGwgdG8gLmphdmEKLSAgICAgICAgb3B0aW9ucy0+b3V0cHV0RmlsZU5hbWUgPSBvcHRpb25zLT5pbnB1dEZpbGVOYW1lOwotICAgICAgICBzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSBvcHRpb25zLT5vdXRwdXRGaWxlTmFtZS5zaXplKCktNTsKLSAgICAgICAgaWYgKG9wdGlvbnMtPm91dHB1dEZpbGVOYW1lLmNvbXBhcmUocG9zLCA1LCAiLmFpZGwiKSA9PSAwKSB7ICAvLyA1ID0gc3RybGVuKCIuYWlkbCIpCi0gICAgICAgICAgICBvcHRpb25zLT5vdXRwdXRGaWxlTmFtZS5yZXBsYWNlKHBvcywgNSwgIi5qYXZhIik7IC8vIDUgPSBzdHJsZW4oIi5haWRsIikKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSU5QVVQgaXMgbm90IGFuIC5haWRsIGZpbGUuXG4iKTsKLSAgICAgICAgICAgIHJldHVybiB1c2FnZSgpOwotICAgICAgICB9Ci0gICAgIH0KLQotICAgIC8vIGFueXRoaW5nIHJlbWFpbmluZz8KLSAgICBpZiAoaSAhPSBhcmdjKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5rbm93biBvcHRpb24lczoiLCAoaT09YXJnYy0xPyhjb25zdCBjaGFyKikiIjooY29uc3QgY2hhciopInMiKSk7Ci0gICAgICAgIGZvciAoOyBpPGFyZ2MtMTsgaSsrKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIGFyZ3ZbaV0pOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKLSAgICAgICAgcmV0dXJuIHVzYWdlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FpZGwvb3B0aW9ucy5oIGIvdG9vbHMvYWlkbC9vcHRpb25zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4N2UzN2QuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9vcHRpb25zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jaWZuZGVmIERFVklDRV9UT09MU19BSURMX0gKLSNkZWZpbmUgREVWSUNFX1RPT0xTX0FJRExfSAotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotZW51bSB7Ci0gICAgQ09NUElMRV9BSURMLAotICAgIFBSRVBST0NFU1NfQUlETAotfTsKLQotLy8gVGhpcyBzdHJ1Y3QgaXMgdGhlIHBhcnNlZCB2ZXJzaW9uIG9mIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucwotc3RydWN0IE9wdGlvbnMKLXsKLSAgICBpbnQgdGFzazsKLSAgICBib29sIGZhaWxPblBhcmNlbGFibGU7Ci0gICAgdmVjdG9yPHN0cmluZz4gaW1wb3J0UGF0aHM7Ci0gICAgdmVjdG9yPHN0cmluZz4gcHJlcHJvY2Vzc2VkRmlsZXM7Ci0gICAgc3RyaW5nIGlucHV0RmlsZU5hbWU7Ci0gICAgc3RyaW5nIG91dHB1dEZpbGVOYW1lOwotICAgIHN0cmluZyBvdXRwdXRCYXNlRm9sZGVyOwotICAgIHN0cmluZyBkZXBGaWxlTmFtZTsKLSAgICBib29sIGF1dG9EZXBGaWxlOwotCi0gICAgdmVjdG9yPHN0cmluZz4gZmlsZXNUb1ByZXByb2Nlc3M7Ci19OwotCi0vLyB0YWtlcyB0aGUgaW5wdXRzIGZyb20gdGhlIGNvbW1hbmQgbGluZSBhbmQgZmlsbHMgaW4gdGhlIE9wdGlvbnMgc3RydWN0Ci0vLyBSZXR1cm5zIDAgb24gc3VjY2VzcywgYW5kIG5vbnplcm8gb24gZmFpbHVyZS4KLS8vIEl0IGFsc28gcHJpbnRzIHRoZSB1c2FnZSBzdGF0ZW1lbnQgb24gZmFpbHVyZS4KLWludCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyKiBjb25zdCogYXJndiwgT3B0aW9ucyAqb3B0aW9ucyk7Ci0KLSNlbmRpZiAvLyBERVZJQ0VfVE9PTFNfQUlETF9ICmRpZmYgLS1naXQgYS90b29scy9haWRsL29wdGlvbnNfdGVzdC5jcHAgYi90b29scy9haWRsL29wdGlvbnNfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMTA2Y2UuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWlkbC9vcHRpb25zX3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkxICswLDAgQEAKLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlICJvcHRpb25zLmgiCi0KLWNvbnN0IGJvb2wgVkVSQk9TRSA9IGZhbHNlOwotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1zdHJ1Y3QgQW5zd2VyIHsKLSAgICBjb25zdCBjaGFyKiBhcmd2WzhdOwotICAgIGludCByZXN1bHQ7Ci0gICAgY29uc3QgY2hhciogc3lzdGVtU2VhcmNoUGF0aFs4XTsKLSAgICBjb25zdCBjaGFyKiBsb2NhbFNlYXJjaFBhdGhbOF07Ci0gICAgY29uc3QgY2hhciogaW5wdXRGaWxlTmFtZTsKLSAgICBsYW5ndWFnZV90IG5hdGl2ZUxhbmd1YWdlOwotICAgIGNvbnN0IGNoYXIqIG91dHB1dEg7Ci0gICAgY29uc3QgY2hhciogb3V0cHV0Q1BQOwotICAgIGNvbnN0IGNoYXIqIG91dHB1dEphdmE7Ci19OwotCi1ib29sCi1tYXRjaF9hcnJheXMoY29uc3QgY2hhciogY29uc3QqZXhwZWN0ZWQsIGNvbnN0IHZlY3RvcjxzdHJpbmc+ICZnb3QpCi17Ci0gICAgaW50IGNvdW50ID0gMDsKLSAgICB3aGlsZSAoZXhwZWN0ZWRbY291bnRdICE9IE5VTEwpIHsKLSAgICAgICAgY291bnQrKzsKLSAgICB9Ci0gICAgaWYgKGdvdC5zaXplKCkgIT0gY291bnQpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBmb3IgKGludCBpPTA7IGk8Y291bnQ7IGkrKykgewotICAgICAgICBpZiAoZ290W2ldICE9IGV4cGVjdGVkW2ldKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQKLXByaW50X2FycmF5KGNvbnN0IGNoYXIqIHByZWZpeCwgY29uc3QgY2hhciogY29uc3QqZXhwZWN0ZWQpCi17Ci0gICAgd2hpbGUgKCpleHBlY3RlZCkgewotICAgICAgICBjb3V0IDw8IHByZWZpeCA8PCAqZXhwZWN0ZWQgPDwgZW5kbDsKLSAgICAgICAgZXhwZWN0ZWQrKzsKLSAgICB9Ci19Ci0KLXZvaWQKLXByaW50X2FycmF5KGNvbnN0IGNoYXIqIHByZWZpeCwgY29uc3QgdmVjdG9yPHN0cmluZz4gJmdvdCkKLXsKLSAgICBzaXplX3QgY291bnQgPSBnb3Quc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxjb3VudDsgaSsrKSB7Ci0gICAgICAgIGNvdXQgPDwgcHJlZml4IDw8IGdvdFtpXSA8PCBlbmRsOwotICAgIH0KLX0KLQotc3RhdGljIGludAotdGVzdChjb25zdCBBbnN3ZXImIGFuc3dlcikKLXsKLSAgICBpbnQgYXJnYyA9IDA7Ci0gICAgd2hpbGUgKGFuc3dlci5hcmd2W2FyZ2NdKSB7Ci0gICAgICAgIGFyZ2MrKzsKLSAgICB9Ci0KLSAgICBpbnQgZXJyID0gMDsKLQotICAgIE9wdGlvbnMgb3B0aW9uczsKLSAgICBpbnQgcmVzdWx0ID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhbnN3ZXIuYXJndiwgJm9wdGlvbnMpOwotCi0gICAgLy8gcmVzdWx0Ci0gICAgaWYgKCgoYm9vbClyZXN1bHQpICE9ICgoYm9vbClhbnN3ZXIucmVzdWx0KSkgewotICAgICAgICBjb3V0IDw8ICJtaXNtYXRjaDogcmVzdWx0OiBnb3QgIiA8PCByZXN1bHQgPDwgIiBleHBlY3RlZCAiIDw8Ci0gICAgICAgICAgICBhbnN3ZXIucmVzdWx0IDw8IGVuZGw7Ci0gICAgICAgIGVyciA9IDE7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCAhPSAwKSB7Ci0gICAgICAgIC8vIGlmIGl0IGZhaWxlZCwgZXZlcnl0aGluZyBpcyBpbnZhbGlkCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgLy8gc3lzdGVtU2VhcmNoUGF0aAotICAgIGlmICghbWF0Y2hfYXJyYXlzKGFuc3dlci5zeXN0ZW1TZWFyY2hQYXRoLCBvcHRpb25zLnN5c3RlbVNlYXJjaFBhdGgpKSB7Ci0gICAgICAgIGNvdXQgPDwgIm1pc21hdGNoOiBzeXN0ZW1TZWFyY2hQYXRoOiBnb3QiIDw8IGVuZGw7Ci0gICAgICAgIHByaW50X2FycmF5KCIgICAgICAgICIsIG9wdGlvbnMuc3lzdGVtU2VhcmNoUGF0aCk7Ci0gICAgICAgIGNvdXQgPDwgIiAgICBleHBlY3RlZCIgPDwgZW5kbDsKLSAgICAgICAgcHJpbnRfYXJyYXkoIiAgICAgICAgIiwgYW5zd2VyLnN5c3RlbVNlYXJjaFBhdGgpOwotICAgICAgICBlcnIgPSAxOwotICAgIH0KLQotICAgIC8vIGxvY2FsU2VhcmNoUGF0aAotICAgIGlmICghbWF0Y2hfYXJyYXlzKGFuc3dlci5sb2NhbFNlYXJjaFBhdGgsIG9wdGlvbnMubG9jYWxTZWFyY2hQYXRoKSkgewotICAgICAgICBjb3V0IDw8ICJtaXNtYXRjaDogbG9jYWxTZWFyY2hQYXRoOiBnb3QiIDw8IGVuZGw7Ci0gICAgICAgIHByaW50X2FycmF5KCIgICAgICAgICIsIG9wdGlvbnMubG9jYWxTZWFyY2hQYXRoKTsKLSAgICAgICAgY291dCA8PCAiICAgIGV4cGVjdGVkIiA8PCBlbmRsOwotICAgICAgICBwcmludF9hcnJheSgiICAgICAgICAiLCBhbnN3ZXIubG9jYWxTZWFyY2hQYXRoKTsKLSAgICAgICAgZXJyID0gMTsKLSAgICB9Ci0KLSAgICAvLyBpbnB1dEZpbGVOYW1lCi0gICAgaWYgKGFuc3dlci5pbnB1dEZpbGVOYW1lICE9IG9wdGlvbnMuaW5wdXRGaWxlTmFtZSkgewotICAgICAgICBjb3V0IDw8ICJtaXNtYXRjaDogaW5wdXRGaWxlTmFtZTogZ290ICIgPDwgb3B0aW9ucy5pbnB1dEZpbGVOYW1lCi0gICAgICAgICAgICA8PCAiIGV4cGVjdGVkICIgPDwgYW5zd2VyLmlucHV0RmlsZU5hbWUgPDwgZW5kbDsKLSAgICAgICAgZXJyID0gMTsKLSAgICB9Ci0KLSAgICAvLyBuYXRpdmVMYW5ndWFnZQotICAgIGlmIChhbnN3ZXIubmF0aXZlTGFuZ3VhZ2UgIT0gb3B0aW9ucy5uYXRpdmVMYW5ndWFnZSkgewotICAgICAgICBjb3V0IDw8ICJtaXNtYXRjaDogbmF0aXZlTGFuZ3VhZ2U6IGdvdCAiIDw8IG9wdGlvbnMubmF0aXZlTGFuZ3VhZ2UKLSAgICAgICAgICAgIDw8ICIgZXhwZWN0ZWQgIiA8PCBhbnN3ZXIubmF0aXZlTGFuZ3VhZ2UgPDwgZW5kbDsKLSAgICAgICAgZXJyID0gMTsKLSAgICB9Ci0KLSAgICAvLyBvdXRwdXRICi0gICAgaWYgKGFuc3dlci5vdXRwdXRIICE9IG9wdGlvbnMub3V0cHV0SCkgewotICAgICAgICBjb3V0IDw8ICJtaXNtYXRjaDogb3V0cHV0SDogZ290ICIgPDwgb3B0aW9ucy5vdXRwdXRICi0gICAgICAgICAgICA8PCAiIGV4cGVjdGVkICIgPDwgYW5zd2VyLm91dHB1dEggPDwgZW5kbDsKLSAgICAgICAgZXJyID0gMTsKLSAgICB9Ci0KLSAgICAvLyBvdXRwdXRDUFAKLSAgICBpZiAoYW5zd2VyLm91dHB1dENQUCAhPSBvcHRpb25zLm91dHB1dENQUCkgewotICAgICAgICBjb3V0IDw8ICJtaXNtYXRjaDogb3V0cHV0Q1BQOiBnb3QgIiA8PCBvcHRpb25zLm91dHB1dENQUAotICAgICAgICAgICAgPDwgIiBleHBlY3RlZCAiIDw8IGFuc3dlci5vdXRwdXRDUFAgPDwgZW5kbDsKLSAgICAgICAgZXJyID0gMTsKLSAgICB9Ci0KLSAgICAvLyBvdXRwdXRKYXZhCi0gICAgaWYgKGFuc3dlci5vdXRwdXRKYXZhICE9IG9wdGlvbnMub3V0cHV0SmF2YSkgewotICAgICAgICBjb3V0IDw8ICJtaXNtYXRjaDogb3V0cHV0SmF2YTogZ290ICIgPDwgb3B0aW9ucy5vdXRwdXRKYXZhCi0gICAgICAgICAgICA8PCAiIGV4cGVjdGVkICIgPDwgYW5zd2VyLm91dHB1dEphdmEgPDwgZW5kbDsKLSAgICAgICAgZXJyID0gMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1jb25zdCBBbnN3ZXIgZ190ZXN0c1tdID0gewotCi0gICAgewotICAgICAgICAvKiBhcmd2ICovICAgICAgICAgICAgICB7ICJ0ZXN0IiwgIi1pL21vb2YiLCAiLUkvYmxhaCIsICItSWJsZWgiLCAiLWltb28iLCAiaW5wdXRGaWxlTmFtZS5haWRsX2NwcCIsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogcmVzdWx0ICovICAgICAgICAgICAgMCwKLSAgICAgICAgLyogc3lzdGVtU2VhcmNoUGF0aCAqLyAgeyAiL2JsYWgiLCAiYmxlaCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogbG9jYWxTZWFyY2hQYXRoICovICAgeyAiL21vb2YiLCAibW9vIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiBpbnB1dEZpbGVOYW1lICovICAgICAiaW5wdXRGaWxlTmFtZS5haWRsX2NwcCIsCi0gICAgICAgIC8qIG5hdGl2ZUxhbmd1YWdlICovICAgIENQUCwKLSAgICAgICAgLyogb3V0cHV0SCAqLyAgICAgICAgICAgIiIsCi0gICAgICAgIC8qIG91dHB1dENQUCAqLyAgICAgICAgICIiLAotICAgICAgICAvKiBvdXRwdXRKYXZhICovICAgICAgICAiIgotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgIC8qIGFyZ3YgKi8gICAgICAgICAgICAgIHsgInRlc3QiLCAiaW5wdXRGaWxlTmFtZS5haWRsX2NwcCIsICItb2giLCAib3V0cHV0SCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogcmVzdWx0ICovICAgICAgICAgICAgMCwKLSAgICAgICAgLyogc3lzdGVtU2VhcmNoUGF0aCAqLyAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIGxvY2FsU2VhcmNoUGF0aCAqLyAgIHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiBpbnB1dEZpbGVOYW1lICovICAgICAiaW5wdXRGaWxlTmFtZS5haWRsX2NwcCIsCi0gICAgICAgIC8qIG5hdGl2ZUxhbmd1YWdlICovICAgIENQUCwKLSAgICAgICAgLyogb3V0cHV0SCAqLyAgICAgICAgICAgIm91dHB1dEgiLAotICAgICAgICAvKiBvdXRwdXRDUFAgKi8gICAgICAgICAiIiwKLSAgICAgICAgLyogb3V0cHV0SmF2YSAqLyAgICAgICAgIiIKLSAgICB9LAotCi0gICAgewotICAgICAgICAvKiBhcmd2ICovICAgICAgICAgICAgICB7ICJ0ZXN0IiwgImlucHV0RmlsZU5hbWUuYWlkbF9jcHAiLCAiLW9jcHAiLCAib3V0cHV0Q1BQIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiByZXN1bHQgKi8gICAgICAgICAgICAwLAotICAgICAgICAvKiBzeXN0ZW1TZWFyY2hQYXRoICovICB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogbG9jYWxTZWFyY2hQYXRoICovICAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIGlucHV0RmlsZU5hbWUgKi8gICAgICJpbnB1dEZpbGVOYW1lLmFpZGxfY3BwIiwKLSAgICAgICAgLyogbmF0aXZlTGFuZ3VhZ2UgKi8gICAgQ1BQLAotICAgICAgICAvKiBvdXRwdXRIICovICAgICAgICAgICAiIiwKLSAgICAgICAgLyogb3V0cHV0Q1BQICovICAgICAgICAgIm91dHB1dENQUCIsCi0gICAgICAgIC8qIG91dHB1dEphdmEgKi8gICAgICAgICIiCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAgLyogYXJndiAqLyAgICAgICAgICAgICAgeyAidGVzdCIsICJpbnB1dEZpbGVOYW1lLmFpZGxfY3BwIiwgIi1vamF2YSIsICJvdXRwdXRKYXZhIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiByZXN1bHQgKi8gICAgICAgICAgICAwLAotICAgICAgICAvKiBzeXN0ZW1TZWFyY2hQYXRoICovICB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogbG9jYWxTZWFyY2hQYXRoICovICAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIGlucHV0RmlsZU5hbWUgKi8gICAgICJpbnB1dEZpbGVOYW1lLmFpZGxfY3BwIiwKLSAgICAgICAgLyogbmF0aXZlTGFuZ3VhZ2UgKi8gICAgQ1BQLAotICAgICAgICAvKiBvdXRwdXRIICovICAgICAgICAgICAiIiwKLSAgICAgICAgLyogb3V0cHV0Q1BQICovICAgICAgICAgIiIsCi0gICAgICAgIC8qIG91dHB1dEphdmEgKi8gICAgICAgICJvdXRwdXRKYXZhIgotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgIC8qIGFyZ3YgKi8gICAgICAgICAgICAgIHsgInRlc3QiLCAiaW5wdXRGaWxlTmFtZS5haWRsX2NwcCIsICItb2giLCAib3V0cHV0SCIsICItb2NwcCIsICJvdXRwdXRDUFAiLCAiLW9qYXZhIiwgIm91dHB1dEphdmEiIH0sCi0gICAgICAgIC8qIHJlc3VsdCAqLyAgICAgICAgICAgIDAsCi0gICAgICAgIC8qIHN5c3RlbVNlYXJjaFBhdGggKi8gIHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiBsb2NhbFNlYXJjaFBhdGggKi8gICB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogaW5wdXRGaWxlTmFtZSAqLyAgICAgImlucHV0RmlsZU5hbWUuYWlkbF9jcHAiLAotICAgICAgICAvKiBuYXRpdmVMYW5ndWFnZSAqLyAgICBDUFAsCi0gICAgICAgIC8qIG91dHB1dEggKi8gICAgICAgICAgICJvdXRwdXRIIiwKLSAgICAgICAgLyogb3V0cHV0Q1BQICovICAgICAgICAgIm91dHB1dENQUCIsCi0gICAgICAgIC8qIG91dHB1dEphdmEgKi8gICAgICAgICJvdXRwdXRKYXZhIgotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgIC8qIGFyZ3YgKi8gICAgICAgICAgICAgIHsgInRlc3QiLCAiaW5wdXRGaWxlTmFtZS5haWRsX2NwcCIsICItb2giLCAib3V0cHV0SCIsICItb2giLCAib3V0cHV0SDEiLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIHJlc3VsdCAqLyAgICAgICAgICAgIDEsCi0gICAgICAgIC8qIHN5c3RlbVNlYXJjaFBhdGggKi8gIHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiBsb2NhbFNlYXJjaFBhdGggKi8gICB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogaW5wdXRGaWxlTmFtZSAqLyAgICAgIiIsCi0gICAgICAgIC8qIG5hdGl2ZUxhbmd1YWdlICovICAgIENQUCwKLSAgICAgICAgLyogb3V0cHV0SCAqLyAgICAgICAgICAgIiIsCi0gICAgICAgIC8qIG91dHB1dENQUCAqLyAgICAgICAgICIiLAotICAgICAgICAvKiBvdXRwdXRKYXZhICovICAgICAgICAiIgotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgIC8qIGFyZ3YgKi8gICAgICAgICAgICAgIHsgInRlc3QiLCAiaW5wdXRGaWxlTmFtZS5haWRsX2NwcCIsICItb2NwcCIsICJvdXRwdXRDUFAiLCAiLW9jcHAiLCAib3V0cHV0Q1BQMSIsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogcmVzdWx0ICovICAgICAgICAgICAgMSwKLSAgICAgICAgLyogc3lzdGVtU2VhcmNoUGF0aCAqLyAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIGxvY2FsU2VhcmNoUGF0aCAqLyAgIHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiBpbnB1dEZpbGVOYW1lICovICAgICAiIiwKLSAgICAgICAgLyogbmF0aXZlTGFuZ3VhZ2UgKi8gICAgQ1BQLAotICAgICAgICAvKiBvdXRwdXRIICovICAgICAgICAgICAiIiwKLSAgICAgICAgLyogb3V0cHV0Q1BQICovICAgICAgICAgIiIsCi0gICAgICAgIC8qIG91dHB1dEphdmEgKi8gICAgICAgICIiCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAgLyogYXJndiAqLyAgICAgICAgICAgICAgeyAidGVzdCIsICJpbnB1dEZpbGVOYW1lLmFpZGxfY3BwIiwgIi1vamF2YSIsICJvdXRwdXRKYXZhIiwgIi1vamF2YSIsICJvdXRwdXRKYXZhMSIsIE5VTEwsIE5VTEwgfSwKLSAgICAgICAgLyogcmVzdWx0ICovICAgICAgICAgICAgMSwKLSAgICAgICAgLyogc3lzdGVtU2VhcmNoUGF0aCAqLyAgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sCi0gICAgICAgIC8qIGxvY2FsU2VhcmNoUGF0aCAqLyAgIHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAotICAgICAgICAvKiBpbnB1dEZpbGVOYW1lICovICAgICAiIiwKLSAgICAgICAgLyogbmF0aXZlTGFuZ3VhZ2UgKi8gICAgQ1BQLAotICAgICAgICAvKiBvdXRwdXRIICovICAgICAgICAgICAiIiwKLSAgICAgICAgLyogb3V0cHV0Q1BQICovICAgICAgICAgIiIsCi0gICAgICAgIC8qIG91dHB1dEphdmEgKi8gICAgICAgICIiCi0gICAgfSwKLQotfTsKLQotaW50Ci1tYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikKLXsKLSAgICBjb25zdCBpbnQgY291bnQgPSBzaXplb2YoZ190ZXN0cykvc2l6ZW9mKGdfdGVzdHNbMF0pOwotICAgIGludCBtYXRjaGVzW2NvdW50XTsKLQotICAgIGludCByZXN1bHQgPSAwOwotICAgIGZvciAoaW50IGk9MDsgaTxjb3VudDsgaSsrKSB7Ci0gICAgICAgIGlmIChWRVJCT1NFKSB7Ci0gICAgICAgICAgICBjb3V0IDw8IGVuZGw7Ci0gICAgICAgICAgICBjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIDw8IGVuZGw7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCogcCA9IGdfdGVzdHNbaV0uYXJndjsKLSAgICAgICAgICAgIHdoaWxlICgqcCkgewotICAgICAgICAgICAgICAgIGNvdXQgPDwgIiAiIDw8ICpwOwotICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvdXQgPDwgZW5kbDsKLSAgICAgICAgICAgIGNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPDwgZW5kbDsKLSAgICAgICAgfQotICAgICAgICBtYXRjaGVzW2ldID0gdGVzdChnX3Rlc3RzW2ldKTsKLSAgICAgICAgaWYgKFZFUkJPU0UpIHsKLSAgICAgICAgICAgIGlmICgwID09IG1hdGNoZXNbaV0pIHsKLSAgICAgICAgICAgICAgICBjb3V0IDw8ICJwYXNzZWQiIDw8IGVuZGw7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvdXQgPDwgImZhaWxlZCIgPDwgZW5kbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdCB8PSBtYXRjaGVzW2ldOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY291dCA8PCBlbmRsOwotICAgIGNvdXQgPDwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgPDwgZW5kbDsKLSAgICBjb3V0IDw8ICJvcHRpb25zX3Rlc3Qgc3VtbWFyeSIgPDwgZW5kbDsKLSAgICBjb3V0IDw8ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iIDw8IGVuZGw7Ci0KLSAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBjb3V0IDw8ICJwYXNzZWQiIDw8IGVuZGw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY291dCA8PCAiZmFpbGVkIHRoZSBmb2xsb3dpbmcgdGVzdHM6IiA8PCBlbmRsOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8Y291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKG1hdGNoZXNbaV0pIHsKLSAgICAgICAgICAgICAgICBjb3V0IDw8ICIgICAiOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBwID0gZ190ZXN0c1tpXS5hcmd2OwotICAgICAgICAgICAgICAgIHdoaWxlICgqcCkgewotICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICIgIiA8PCAqcDsKLSAgICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb3V0IDw8IGVuZGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCmRpZmYgLS1naXQgYS90b29scy9haWRsL3NlYXJjaF9wYXRoLmNwcCBiL3Rvb2xzL2FpZGwvc2VhcmNoX3BhdGguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmI2Y2IyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2FpZGwvc2VhcmNoX3BhdGguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgInNlYXJjaF9wYXRoLmgiCi0jaW5jbHVkZSAib3B0aW9ucy5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZkZWYgSEFWRV9NU19DX1JVTlRJTUUKLSNpbmNsdWRlIDxpby5oPgotI2VuZGlmCi0KLXN0YXRpYyB2ZWN0b3I8c3RyaW5nPiBnX2ltcG9ydFBhdGhzOwotCi12b2lkCi1zZXRfaW1wb3J0X3BhdGhzKGNvbnN0IHZlY3RvcjxzdHJpbmc+JiBpbXBvcnRQYXRocykKLXsKLSAgICBnX2ltcG9ydFBhdGhzID0gaW1wb3J0UGF0aHM7Ci19Ci0KLWNoYXIqCi1maW5kX2ltcG9ydF9maWxlKGNvbnN0IGNoYXIqIGdpdmVuKQotewotICAgIHN0cmluZyBleHBlY3RlZCA9IGdpdmVuOwotCi0gICAgaW50IE4gPSBleHBlY3RlZC5sZW5ndGgoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgIGNoYXIgYyA9IGV4cGVjdGVkW2ldOwotICAgICAgICBpZiAoYyA9PSAnLicpIHsKLSAgICAgICAgICAgIGV4cGVjdGVkW2ldID0gT1NfUEFUSF9TRVBBUkFUT1I7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZXhwZWN0ZWQgKz0gIi5haWRsIjsKLQotICAgIHZlY3RvcjxzdHJpbmc+JiBwYXRocyA9IGdfaW1wb3J0UGF0aHM7Ci0gICAgZm9yICh2ZWN0b3I8c3RyaW5nPjo6aXRlcmF0b3IgaXQ9cGF0aHMuYmVnaW4oKTsgaXQhPXBhdGhzLmVuZCgpOyBpdCsrKSB7Ci0gICAgICAgIHN0cmluZyBmID0gKml0OwotICAgICAgICBpZiAoZi5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgZiA9ICIuIjsKLSAgICAgICAgICAgIGYgKz0gT1NfUEFUSF9TRVBBUkFUT1I7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZltmLnNpemUoKS0xXSAhPSBPU19QQVRIX1NFUEFSQVRPUikgewotICAgICAgICAgICAgZiArPSBPU19QQVRIX1NFUEFSQVRPUjsKLSAgICAgICAgfQotICAgICAgICBmLmFwcGVuZChleHBlY3RlZCk7Ci0KLSNpZmRlZiBIQVZFX01TX0NfUlVOVElNRQotICAgICAgICAvKiBjaGVjayB0aGF0IHRoZSBmaWxlIGV4aXN0cyBhbmQgaXMgbm90IHdyaXRlLW9ubHkgKi8KLSAgICAgICAgaWYgKDAgPT0gX2FjY2VzcyhmLmNfc3RyKCksIDApICYmICAvKiBtb2RlIDA9ZXhpc3QgKi8KLSAgICAgICAgICAgIDAgPT0gX2FjY2VzcyhmLmNfc3RyKCksIDQpICkgeyAvKiBtb2RlIDQ9cmVhZGFibGUgKi8KLSNlbHNlCi0gICAgICAgIGlmICgwID09IGFjY2VzcyhmLmNfc3RyKCksIFJfT0spKSB7Ci0jZW5kaWYgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIHN0cmR1cChmLmNfc3RyKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2FpZGwvc2VhcmNoX3BhdGguaCBiL3Rvb2xzL2FpZGwvc2VhcmNoX3BhdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJmOTRiMS4uMDAwMDAwMAotLS0gYS90b29scy9haWRsL3NlYXJjaF9wYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jaWZuZGVmIERFVklDRV9UT09MU19BSURMX1NFQVJDSF9QQVRIX0gKLSNkZWZpbmUgREVWSUNFX1RPT0xTX0FJRExfU0VBUkNIX1BBVEhfSAotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2lmIF9fY3BsdXNwbHVzCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHN0cmluZz4KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vLyByZXR1cm5zIGEgRklMRSogYW5kIHRoZSBjaGFyKiBmb3IgdGhlIGZpbGUgdGhhdCBpdCBmb3VuZAotLy8gZ2l2ZW4gaXMgdGhlIGNsYXNzIG5hbWUgd2UncmUgbG9va2luZyBmb3IKLWNoYXIqIGZpbmRfaW1wb3J0X2ZpbGUoY29uc3QgY2hhciogZ2l2ZW4pOwotCi0jaWYgX19jcGx1c3BsdXMKLX07IC8vIGV4dGVybiAiQyIKLXZvaWQgc2V0X2ltcG9ydF9wYXRocyhjb25zdCB2ZWN0b3I8c3RyaW5nPiYgaW1wb3J0UGF0aHMpOwotI2VuZGlmCi0KLSNlbmRpZiAvLyBERVZJQ0VfVE9PTFNfQUlETF9TRUFSQ0hfUEFUSF9ICi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi8uZ2l0aWdub3JlIGIvdG9vbHMvbGF5b3V0bGliLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZTgyZDcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1iaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvQW5kcm9pZC5tayBiL3Rvb2xzL2xheW91dGxpYi9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDQ5N2E1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLUxPQ0FMX1BBVEggOj0gJChteS1kaXIpCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotIwotIyBEZWZpbmUgcnVsZXMgdG8gYnVpbGQgdGVtcF9sYXlvdXRsaWIuamFyLCB3aGljaCBjb250YWlucyBhIHN1YnNldCBvZgotIyB0aGUgY2xhc3NlcyBpbiBmcmFtZXdvcmsuamFyLiAgVGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCBpcyB1c2VkIHRvCi0jIHRyYW5zZm9ybSB0aGUgZnJhbWV3b3JrIGphciBpbnRvIHRoZSB0ZW1wX2xheW91dGxpYiBqYXIuCi0jCi0KLSMgV2UgbmVlZCB0byBwcm9jZXNzIHRoZSBmcmFtZXdvcmsgY2xhc3Nlcy5qYXIgZmlsZSwgYnV0IHdlIGNhbid0Ci0jIGRlcGVuZCBkaXJlY3RseSBvbiBpdCAocHJpdmF0ZSB2YXJzIHdvbid0IGJlIGluaGVyaXRlZCBjb3JyZWN0bHkpLgotIyBTbywgd2UgZGVwZW5kIG9uIGZyYW1ld29yaydzIEJVSUxUIGZpbGUuCi1idWlsdF9mcmFtZXdvcmtfZGVwIDo9ICQoY2FsbCBqYXZhLWxpYi1kZXBzLGZyYW1ld29yay1iYXNlKQotYnVpbHRfZnJhbWV3b3JrX2NsYXNzZXMgOj0gJChjYWxsIGphdmEtbGliLWZpbGVzLGZyYW1ld29yay1iYXNlKQotCi1idWlsdF9jb3JlX2RlcCA6PSAkKGNhbGwgamF2YS1saWItZGVwcyxjb3JlKQotYnVpbHRfY29yZV9jbGFzc2VzIDo9ICQoY2FsbCBqYXZhLWxpYi1maWxlcyxjb3JlKQotCi1idWlsdF9leHRfZGVwIDo9ICQoY2FsbCBqYXZhLWxpYi1kZXBzLGV4dCkKLWJ1aWx0X2V4dF9jbGFzc2VzIDo9ICQoY2FsbCBqYXZhLWxpYi1maWxlcyxleHQpCi0KLWJ1aWx0X2xheW91dGxpYl9jcmVhdGVfamFyIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsIFwKLQkJCUpBVkFfTElCUkFSSUVTLGxheW91dGxpYl9jcmVhdGUsSE9TVCkvamF2YWxpYi5qYXIKLQotIyBUaGlzIGlzIG1vc3RseSBhIGNvcHkgb2YgY29uZmlnL2hvc3RfamF2YV9saWJyYXJ5Lm1rCi1MT0NBTF9NT0RVTEUgOj0gdGVtcF9sYXlvdXRsaWIKLUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBKQVZBX0xJQlJBUklFUwotTE9DQUxfTU9EVUxFX1NVRkZJWCA6PSAkKENPTU1PTl9KQVZBX1BBQ0tBR0VfU1VGRklYKQotTE9DQUxfSVNfSE9TVF9NT0RVTEUgOj0gdHJ1ZQotTE9DQUxfQlVJTFRfTU9EVUxFX1NURU0gOj0gamF2YWxpYi5qYXIKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS9iYXNlX3J1bGVzLm1rCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKGJ1aWx0X2NvcmVfZGVwKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICQoYnVpbHRfZnJhbWV3b3JrX2RlcCkgXAotICAgICAgICAgICAgICAgICAgICAgICAkKGJ1aWx0X2V4dF9kZXApIFwKLSAgICAgICAgICAgICAgICAgICAgICAgJChidWlsdF9sYXlvdXRsaWJfY3JlYXRlX2phcikKLQkkKGhpZGUpIGVjaG8gImhvc3QgbGF5b3V0bGliX2NyZWF0ZTogJEAiCi0JJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkKLQkkKGhpZGUpIHJtIC1mICRACi0JJChoaWRlKSBscyAtbCAkKGJ1aWx0X2ZyYW1ld29ya19jbGFzc2VzKQotCSQoaGlkZSkgamF2YSAtamFyICQoYnVpbHRfbGF5b3V0bGliX2NyZWF0ZV9qYXIpIFwKLQkgICAgICAgICAgICAgJEAgXAotCSAgICAgICAgICAgICAkKGJ1aWx0X2NvcmVfY2xhc3NlcykgXAotCSAgICAgICAgICAgICAkKGJ1aWx0X2ZyYW1ld29ya19jbGFzc2VzKSBcCi0JICAgICAgICAgICAgICQoYnVpbHRfZXh0X2NsYXNzZXMpCi0JJChoaWRlKSBscyAtbCAkKGJ1aWx0X2ZyYW1ld29ya19jbGFzc2VzKQotCi0KLSMKLSMgSW5jbHVkZSB0aGUgc3ViZGlyIG1ha2VmaWxlcy4KLSMKLWluY2x1ZGUgJChjYWxsIGFsbC1tYWtlZmlsZXMtdW5kZXIsJChMT0NBTF9QQVRIKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9SRUFETUUgYi90b29scy9sYXlvdXRsaWIvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmVhOWJkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLUxheW91dGxpYiBpcyBhIGN1c3RvbSB2ZXJzaW9uIG9mIHRoZSBhbmRyb2lkIFZpZXcgZnJhbWV3b3JrIGRlc2lnbmVkIHRvIHJ1biBpbnNpZGUgRWNsaXBzZS4KLVRoZSBnb2FsIG9mIHRoZSBsaWJyYXJ5IGlzIHRvIHByb3ZpZGUgbGF5b3V0IHJlbmRlcmluZyBpbiBFY2xpcHNlIHRoYXQgYXJlIHZlcnkgdmVyeSBjbG9zZSB0byB0aGVpciByZW5kZXJpbmcgb24gZGV2aWNlcy4KLQotTm9uZSBvZiB0aGUgY29tLmFuZHJvaWQuKiBvciBhbmRyb2lkLiogY2xhc3NlcyBpbiBsYXlvdXRsaWIgcnVuIG9uIGRldmljZXMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS8uY2xhc3NwYXRoIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTQyNzRkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBleGNsdWRpbmc9Im9yZy9reG1sMi9pby8iIGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InZhciIgcGF0aD0iQU5EUk9JRF9QTEFUX1NSQy9wcmVidWlsdHMvbWlzYy9jb21tb24vbGF5b3V0bGliX2FwaS9sYXlvdXRsaWJfYXBpLXByZWJ1aWx0LmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJ2YXIiIHBhdGg9IkFORFJPSURfUExBVF9TUkMvcHJlYnVpbHRzL21pc2MvY29tbW9uL2t4bWwyL2t4bWwyLTIuMy4wLmphciIgc291cmNlcGF0aD0iL0FORFJPSURfUExBVF9TUkMvZGFsdmlrL2xpYmNvcmUveG1sL3NyYy9tYWluL2phdmEiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0idmFyIiBwYXRoPSJBTkRST0lEX1BMQVRfU1JDL291dC9ob3N0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvdGVtcF9sYXlvdXRsaWJfaW50ZXJtZWRpYXRlcy9qYXZhbGliLmphciIgc291cmNlcGF0aD0iL0FORFJPSURfUExBVF9TUkMvZnJhbWV3b3Jrcy9iYXNlIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InZhciIgcGF0aD0iQU5EUk9JRF9QTEFUX1NSQy9wcmVidWlsdHMvbWlzYy9jb21tb24vbmluZXBhdGNoL25pbmVwYXRjaC1wcmVidWlsdC5qYXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0idmFyIiBwYXRoPSJBTkRST0lEX1BMQVRfU1JDL3ByZWJ1aWx0cy9taXNjL2NvbW1vbi90b29scy1jb21tb24vdG9vbHMtY29tbW9uLXByZWJ1aWx0LmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJ2YXIiIHBhdGg9IkFORFJPSURfUExBVF9TUkMvcHJlYnVpbHRzL21pc2MvY29tbW9uL2ljdTRqL2ljdTRqLmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlLy5wcm9qZWN0IGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM2ZTcxYi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+bGF5b3V0bGliX2JyaWRnZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlLy5zZXR0aW5ncy9SRUFETUUudHh0IGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS8uc2V0dGluZ3MvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEyMGIyMC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlLy5zZXR0aW5ncy9SRUFETUUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1Db3B5IHRoaXMgaW4gZWNsaXBzZSBwcm9qZWN0IGFzIGEgLnNldHRpbmdzIGZvbGRlciBhdCB0aGUgcm9vdC4KLVRoaXMgZW5zdXJlIHByb3BlciBjb21waWxhdGlvbiBjb21wbGlhbmNlIGFuZCB3YXJuaW5nL2Vycm9yIGxldmVscy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzgxYTBlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubm9ubnVsbD1jb20uYW5kcm9pZC5hbm5vdGF0aW9ucy5Ob25OdWxsCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm5vbm51bGxieWRlZmF1bHQ9Y29tLmFuZHJvaWQuYW5ub3RhdGlvbnMuTm9uTnVsbEJ5RGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5ub25udWxsaXNkZWZhdWx0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm51bGxhYmxlPWNvbS5hbmRyb2lkLmFubm90YXRpb25zLk51bGxhYmxlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm51bGxhbmFseXNpcz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS42Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmNvbXBhcmluZ0lkZW50aWNhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZXhwbGljaXRseUNsb3NlZEF1dG9DbG9zZWFibGU9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jbHVkZU51bGxJbmZvRnJvbUFzc2VydHM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0hhc2hDb2RlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uRm9ySW50ZXJmYWNlTWV0aG9kSW1wbGVtZW50YXRpb249ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxTcGVjSW5zdWZmaWNpZW50SW5mbz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxTcGVjVmlvbGF0aW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbE51bGxTcGVjVmlvbGF0aW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbGx5VW5jbG9zZWRDbG9zZWFibGU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbEFubm90YXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFNwZWNpZmljYXRpb25PZlR5cGVBcmd1bWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFN1cGVyaW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVwb3J0TWV0aG9kQ2FuQmVQb3RlbnRpYWxseVN0YXRpYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVwb3J0TWV0aG9kQ2FuQmVTdGF0aWM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzT3B0aW9uYWxFcnJvcnM9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuYXZvaWRhYmxlR2VuZXJpY1R5cGVQcm9ibGVtcz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jbG9zZWRDbG9zZWFibGU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkT2JqZWN0QWxsb2NhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVySW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9BbmRyb2lkLm1rIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2Q0OGZjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi1MT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtamF2YS1maWxlcy11bmRlcixzcmMpCi1MT0NBTF9KQVZBX1JFU09VUkNFX0RJUlMgOj0gcmVzb3VyY2VzCi0KLQotTE9DQUxfSkFWQV9MSUJSQVJJRVMgOj0gXAotCWt4bWwyLTIuMy4wIFwKLQlpY3U0aiBcCi0JbGF5b3V0bGliX2FwaS1wcmVidWlsdCBcCi0JdG9vbHMtY29tbW9uLXByZWJ1aWx0Ci0KLUxPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUyA6PSBcCi0JdGVtcF9sYXlvdXRsaWIgXAotCW5pbmVwYXRjaC1wcmVidWlsdAotCi1MT0NBTF9NT0RVTEUgOj0gbGF5b3V0bGliCi0KLWluY2x1ZGUgJChCVUlMRF9IT1NUX0pBVkFfTElCUkFSWSkKLQotIyBCdWlsZCBhbGwgc3ViLWRpcmVjdG9yaWVzCi1pbmNsdWRlICQoY2FsbCBhbGwtbWFrZWZpbGVzLXVuZGVyLCQoTE9DQUxfUEFUSCkpCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvYWN0aW9uX2Jhci54bWwgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2FjdGlvbl9iYXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWRjNWFmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvYWN0aW9uX2Jhci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08bWVyZ2UgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KLSAgICA8aW5jbHVkZSBsYXlvdXQ9IkBhbmRyb2lkOmxheW91dC9hY3Rpb25fYmFyX2hvbWUiIC8+Ci0gICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KLTwvbWVyZ2U+CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2hkcGkvaWNfc3lzYmFyX2JhY2sucG5nIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9oZHBpL2ljX3N5c2Jhcl9iYWNrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRlNmJjOC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2hkcGkvaWNfc3lzYmFyX2JhY2sucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9oZHBpL2ljX3N5c2Jhcl9ob21lLnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvaGRwaS9pY19zeXNiYXJfaG9tZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZTRmNDUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9oZHBpL2ljX3N5c2Jhcl9ob21lLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvaGRwaS9pY19zeXNiYXJfcmVjZW50LnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvaGRwaS9pY19zeXNiYXJfcmVjZW50LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY5ZjMwMC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2hkcGkvaWNfc3lzYmFyX3JlY2VudC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2hkcGkvc3RhdF9zeXNfYmF0dGVyeV9jaGFyZ2VfYW5pbTEwMC5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2hkcGkvc3RhdF9zeXNfYmF0dGVyeV9jaGFyZ2VfYW5pbTEwMC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyOTM3OGUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9oZHBpL3N0YXRfc3lzX2JhdHRlcnlfY2hhcmdlX2FuaW0xMDAucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9oZHBpL3N0YXRfc3lzX3dpZmlfc2lnbmFsXzRfZnVsbHkucG5nIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9oZHBpL3N0YXRfc3lzX3dpZmlfc2lnbmFsXzRfZnVsbHkucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzFkYWVkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvaGRwaS9zdGF0X3N5c193aWZpX3NpZ25hbF80X2Z1bGx5LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvaGRwaS9zdGF0dXNfYmFyX2JhY2tncm91bmQuOS5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2hkcGkvc3RhdHVzX2Jhcl9iYWNrZ3JvdW5kLjkucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGJlMjk4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvaGRwaS9zdGF0dXNfYmFyX2JhY2tncm91bmQuOS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2xkcnRsLWhkcGkvaWNfc3lzYmFyX2JhY2sucG5nIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9sZHJ0bC1oZHBpL2ljX3N5c2Jhcl9iYWNrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgyZWJmZS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2xkcnRsLWhkcGkvaWNfc3lzYmFyX2JhY2sucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9sZHJ0bC1oZHBpL2ljX3N5c2Jhcl9yZWNlbnQucG5nIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9sZHJ0bC1oZHBpL2ljX3N5c2Jhcl9yZWNlbnQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzdiNDcxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbGRydGwtaGRwaS9pY19zeXNiYXJfcmVjZW50LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbGRydGwtbWRwaS9pY19zeXNiYXJfYmFjay5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2xkcnRsLW1kcGkvaWNfc3lzYmFyX2JhY2sucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWI4MDYyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbGRydGwtbWRwaS9pY19zeXNiYXJfYmFjay5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2xkcnRsLW1kcGkvaWNfc3lzYmFyX3JlY2VudC5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2xkcnRsLW1kcGkvaWNfc3lzYmFyX3JlY2VudC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZGJlZmUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9sZHJ0bC1tZHBpL2ljX3N5c2Jhcl9yZWNlbnQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9sZHJ0bC14aGRwaS9pY19zeXNiYXJfYmFjay5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2xkcnRsLXhoZHBpL2ljX3N5c2Jhcl9iYWNrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMzZDg2NC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2xkcnRsLXhoZHBpL2ljX3N5c2Jhcl9iYWNrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbGRydGwteGhkcGkvaWNfc3lzYmFyX3JlY2VudC5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL2xkcnRsLXhoZHBpL2ljX3N5c2Jhcl9yZWNlbnQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjY1ZTJhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbGRydGwteGhkcGkvaWNfc3lzYmFyX3JlY2VudC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL21kcGkvaWNfc3lzYmFyX2JhY2sucG5nIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9tZHBpL2ljX3N5c2Jhcl9iYWNrLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAwYmM1Yi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL21kcGkvaWNfc3lzYmFyX2JhY2sucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9tZHBpL2ljX3N5c2Jhcl9ob21lLnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbWRwaS9pY19zeXNiYXJfaG9tZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMzE4M2IuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9tZHBpL2ljX3N5c2Jhcl9ob21lLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbWRwaS9pY19zeXNiYXJfcmVjZW50LnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbWRwaS9pY19zeXNiYXJfcmVjZW50LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA3ZjYxMS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL21kcGkvaWNfc3lzYmFyX3JlY2VudC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL21kcGkvc3RhdF9zeXNfYmF0dGVyeV9jaGFyZ2VfYW5pbTEwMC5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL21kcGkvc3RhdF9zeXNfYmF0dGVyeV9jaGFyZ2VfYW5pbTEwMC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NzNhNzAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9tZHBpL3N0YXRfc3lzX2JhdHRlcnlfY2hhcmdlX2FuaW0xMDAucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9tZHBpL3N0YXRfc3lzX3dpZmlfc2lnbmFsXzRfZnVsbHkucG5nIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9tZHBpL3N0YXRfc3lzX3dpZmlfc2lnbmFsXzRfZnVsbHkucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTFhYzkxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbWRwaS9zdGF0X3N5c193aWZpX3NpZ25hbF80X2Z1bGx5LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbWRwaS9zdGF0dXNfYmFyX2JhY2tncm91bmQuOS5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL21kcGkvc3RhdHVzX2Jhcl9iYWNrZ3JvdW5kLjkucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjdjMWE0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbWRwaS9zdGF0dXNfYmFyX2JhY2tncm91bmQuOS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL25hdmlnYXRpb25fYmFyLnhtbCBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbmF2aWdhdGlvbl9iYXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTljYTA4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMvbmF2aWdhdGlvbl9iYXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxtZXJnZSB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiPgotCTxUZXh0VmlldwotCQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLQkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotCQkJYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIi8+Ci0JPEltYWdlVmlldwotCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50Ii8+Ci0JPEltYWdlVmlldwotCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50Ii8+Ci0JPEltYWdlVmlldwotCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50Ii8+Ci0JPFRleHRWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0JCQlhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KLTwvbWVyZ2U+CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3N0YXR1c19iYXIueG1sIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy9zdGF0dXNfYmFyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFiNDc0ZC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3N0YXR1c19iYXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxtZXJnZSB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiPgotCTxUZXh0VmlldwotCQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLQkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotCQkJYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIi8+Ci0JPEltYWdlVmlldwotCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotCQkJYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSIxZHAiLz4KLQk8SW1hZ2VWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0JCQlhbmRyb2lkOmxheW91dF9tYXJnaW5MZWZ0PSIzZHAiCi0JCQlhbmRyb2lkOmxheW91dF9tYXJnaW5SaWdodD0iNWRwIgotCQkJYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSIxZHAiLz4KLTwvbWVyZ2U+CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3RpdGxlX2Jhci54bWwgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3RpdGxlX2Jhci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ZDc4ZDkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy90aXRsZV9iYXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPG1lcmdlIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCI+Ci0JPFRleHRWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KLTwvbWVyZ2U+CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3hoZHBpL2ljX3N5c2Jhcl9iYWNrLnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMveGhkcGkvaWNfc3lzYmFyX2JhY2sucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDYwY2Q2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMveGhkcGkvaWNfc3lzYmFyX2JhY2sucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy94aGRwaS9pY19zeXNiYXJfaG9tZS5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3hoZHBpL2ljX3N5c2Jhcl9ob21lLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzViYzVjOS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3hoZHBpL2ljX3N5c2Jhcl9ob21lLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMveGhkcGkvaWNfc3lzYmFyX3JlY2VudC5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3hoZHBpL2ljX3N5c2Jhcl9yZWNlbnQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjIxZDljLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMveGhkcGkvaWNfc3lzYmFyX3JlY2VudC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3hoZHBpL3N0YXRfc3lzX2JhdHRlcnlfY2hhcmdlX2FuaW0xMDAucG5nIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy94aGRwaS9zdGF0X3N5c19iYXR0ZXJ5X2NoYXJnZV9hbmltMTAwLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdmZDcxOS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Jlc291cmNlcy9iYXJzL3hoZHBpL3N0YXRfc3lzX2JhdHRlcnlfY2hhcmdlX2FuaW0xMDAucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy94aGRwaS9zdGF0X3N5c193aWZpX3NpZ25hbF80X2Z1bGx5LnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvcmVzb3VyY2VzL2JhcnMveGhkcGkvc3RhdF9zeXNfd2lmaV9zaWduYWxfNF9mdWxseS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNWM2MWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9yZXNvdXJjZXMvYmFycy94aGRwaS9zdGF0X3N5c193aWZpX3NpZ25hbF80X2Z1bGx5LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvYW5pbWF0aW9uL0FuaW1hdGlvblRocmVhZC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0aW9uVGhyZWFkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMGVjOWYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9hbmltYXRpb24vQW5pbWF0aW9uVGhyZWFkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5hbmltYXRpb247Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSUFuaW1hdGlvbkxpc3RlbmVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZW5kZXJTZXNzaW9uOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc3VsdC5TdGF0dXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlJlbmRlclNlc3Npb25JbXBsOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcl9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJfRGVsZWdhdGUuSUhhbmRsZXJDYWxsYmFjazsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuUHJpb3JpdHlRdWV1ZTsKLWltcG9ydCBqYXZhLnV0aWwuUXVldWU7Ci0KLS8qKgotICogQWJzdHJhY3QgYW5pbWF0aW9uIHRocmVhZC4KLSAqIDxwLz4KLSAqIFRoaXMgZG9lcyBub3QgYWN0dWFsbHkgc3RhcnQgYW4gYW5pbWF0aW9uLCBpbnN0ZWFkIGl0IGZha2VzIGEgbG9vcGVyIHRoYXQgd2lsbCBwbGF5IHdoYXRldmVyCi0gKiBhbmltYXRpb24gaXMgc2VuZGluZyBtZXNzYWdlcyB0byBpdHMgb3duIHtAbGluayBIYW5kbGVyfS4KLSAqIDxwLz4KLSAqIENsYXNzZXMgc2hvdWxkIGltcGxlbWVudCB7QGxpbmsgI3ByZUFuaW1hdGlvbigpfSBhbmQge0BsaW5rICNwb3N0QW5pbWF0aW9uKCl9LgotICogPHAvPgotICogSWYge0BsaW5rICNwcmVBbmltYXRpb24oKX0gZG9lcyBub3Qgc3RhcnQgYW4gYW5pbWF0aW9uIHNvbWVob3cgdGhlbiB0aGUgdGhyZWFkIGRvZXNuJ3QgZG8KLSAqIGFueXRoaW5nLgotICoKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFuaW1hdGlvblRocmVhZCBleHRlbmRzIFRocmVhZCB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNZXNzYWdlQnVuZGxlIGltcGxlbWVudHMgQ29tcGFyYWJsZTxNZXNzYWdlQnVuZGxlPiB7Ci0gICAgICAgIGZpbmFsIEhhbmRsZXIgbVRhcmdldDsKLSAgICAgICAgZmluYWwgTWVzc2FnZSBtTWVzc2FnZTsKLSAgICAgICAgZmluYWwgbG9uZyBtVXB0aW1lTWlsbGlzOwotCi0gICAgICAgIE1lc3NhZ2VCdW5kbGUoSGFuZGxlciB0YXJnZXQsIE1lc3NhZ2UgbWVzc2FnZSwgbG9uZyB1cHRpbWVNaWxsaXMpIHsKLSAgICAgICAgICAgIG1UYXJnZXQgPSB0YXJnZXQ7Ci0gICAgICAgICAgICBtTWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgICAgICAgICBtVXB0aW1lTWlsbGlzID0gdXB0aW1lTWlsbGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKE1lc3NhZ2VCdW5kbGUgYnVuZGxlKSB7Ci0gICAgICAgICAgICBpZiAobVVwdGltZU1pbGxpcyA8IGJ1bmRsZS5tVXB0aW1lTWlsbGlzKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIFJlbmRlclNlc3Npb25JbXBsIG1TZXNzaW9uOwotCi0gICAgcHJpdmF0ZSBRdWV1ZTxNZXNzYWdlQnVuZGxlPiBtUXVldWUgPSBuZXcgUHJpb3JpdHlRdWV1ZTxNZXNzYWdlQnVuZGxlPigpOwotICAgIHByaXZhdGUgZmluYWwgSUFuaW1hdGlvbkxpc3RlbmVyIG1MaXN0ZW5lcjsKLQotICAgIHB1YmxpYyBBbmltYXRpb25UaHJlYWQoUmVuZGVyU2Vzc2lvbkltcGwgc2NlbmUsIFN0cmluZyB0aHJlYWROYW1lLAotICAgICAgICAgICAgSUFuaW1hdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIHN1cGVyKHRocmVhZE5hbWUpOwotICAgICAgICBtU2Vzc2lvbiA9IHNjZW5lOwotICAgICAgICBtTGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgUmVzdWx0IHByZUFuaW1hdGlvbigpOwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHBvc3RBbmltYXRpb24oKTsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgQnJpZGdlLnByZXBhcmVUaHJlYWQoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8qIEZJWE1FOiBUaGUgQU5JTUFUSU9OX0ZSQU1FIG1lc3NhZ2Ugbm8gbG9uZ2VyIGV4aXN0cy4gIEluc3RlYWQsIHRoZQotICAgICAgICAgICAgICogYW5pbWF0aW9uIHRpbWluZyBsb29wIGlzIGNvbXBsZXRlbHkgYmFzZWQgb24gYSBDaG9yZW9ncmFwaGVyIG9iamVjdHMKLSAgICAgICAgICAgICAqIHRoYXQgc2NoZWR1bGVzIGFuaW1hdGlvbiBhbmQgZHJhd2luZyBmcmFtZXMuICBUaGUgYW5pbWF0aW9uIGhhbmRsZXIgaXMKLSAgICAgICAgICAgICAqIG5vIGxvbmdlciBldmVuIGEgaGFuZGxlcjsgaXQgaXMganVzdCBhIFJ1bm5hYmxlIGVucXVldWVkIG9uIHRoZSBDaG9yZW9ncmFwaGVyLgotICAgICAgICAgICAgSGFuZGxlcl9EZWxlZ2F0ZS5zZXRDYWxsYmFjayhuZXcgSUhhbmRsZXJDYWxsYmFjaygpIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZUF0VGltZShIYW5kbGVyIGhhbmRsZXIsIE1lc3NhZ2UgbXNnLCBsb25nIHVwdGltZU1pbGxpcykgewotICAgICAgICAgICAgICAgICAgICBpZiAobXNnLndoYXQgPT0gVmFsdWVBbmltYXRvci5BTklNQVRJT05fU1RBUlQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cud2hhdCA9PSBWYWx1ZUFuaW1hdG9yLkFOSU1BVElPTl9GUkFNRSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVF1ZXVlLmFkZChuZXcgTWVzc2FnZUJ1bmRsZShoYW5kbGVyLCBtc2csIHVwdGltZU1pbGxpcykpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBpZ25vcmUuCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIC8vIGNhbGwgb3V0IHRvIHRoZSBwcmUtYW5pbWF0aW9uIHdvcmssIHdoaWNoIHNob3VsZCBzdGFydCBhbiBhbmltYXRpb24gb3IgbW9yZS4KLSAgICAgICAgICAgIFJlc3VsdCByZXN1bHQgPSBwcmVBbmltYXRpb24oKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICBtTGlzdGVuZXIuZG9uZShyZXN1bHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBsb29wIHRoZSBhbmltYXRpb24KLSAgICAgICAgICAgIFJlbmRlclNlc3Npb24gc2Vzc2lvbiA9IG1TZXNzaW9uLmdldFNlc3Npb24oKTsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAvLyBjaGVjayBlYXJseS4KLSAgICAgICAgICAgICAgICBpZiAobUxpc3RlbmVyLmlzQ2FuY2VsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG5leHQgbWVzc2FnZS4KLSAgICAgICAgICAgICAgICBNZXNzYWdlQnVuZGxlIGJ1bmRsZSA9IG1RdWV1ZS5wb2xsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1bmRsZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHNsZWVwIGVub3VnaCBmb3IgdGhpcyBidW5kbGUgdG8gYmUgb24gdGltZQotICAgICAgICAgICAgICAgIGxvbmcgY3VycmVudFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudFRpbWUgPCBidW5kbGUubVVwdGltZU1pbGxpcykgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoYnVuZGxlLm1VcHRpbWVNaWxsaXMgLSBjdXJyZW50VGltZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FIGxvZy9kbyBzb21ldGhpbmcvc2xlZXAgYWdhaW4/Ci0gICAgICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gY2hlY2sgYWZ0ZXIgc2xlZXBpbmcuCi0gICAgICAgICAgICAgICAgaWYgKG1MaXN0ZW5lci5pc0NhbmNlbGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gcmVhZHkgdG8gZG8gdGhlIHdvcmssIGFjcXVpcmUgdGhlIHNjZW5lLgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1TZXNzaW9uLmFjcXVpcmUoMjUwKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1MaXN0ZW5lci5kb25lKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIHRoZSBidW5kbGUuIElmIHRoZSBhbmltYXRpb24gaXMgbm90IGZpbmlzaGVkLCB0aGlzIHdpbGwgZW5xdWV1ZQotICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IG1lc3NhZ2UsIHNvIG1RdWV1ZSB3aWxsIGhhdmUgYW5vdGhlciBvbmUuCi0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgYWZ0ZXIgYWNxdWlyaW5nIGluIGNhc2UgaXQgdG9vayBhIHdoaWxlLgotICAgICAgICAgICAgICAgICAgICBpZiAobUxpc3RlbmVyLmlzQ2FuY2VsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBidW5kbGUubVRhcmdldC5oYW5kbGVNZXNzYWdlKGJ1bmRsZS5tTWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtU2Vzc2lvbi5yZW5kZXIoZmFsc2UgLypmcmVzaFJlbmRlciovKS5pc1N1Y2Nlc3MoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbUxpc3RlbmVyLm9uTmV3RnJhbWUoc2Vzc2lvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICBtU2Vzc2lvbi5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSB3aGlsZSAobUxpc3RlbmVyLmlzQ2FuY2VsZWQoKSA9PSBmYWxzZSAmJiBtUXVldWUuc2l6ZSgpID4gMCk7Ci0KLSAgICAgICAgICAgIG1MaXN0ZW5lci5kb25lKFN0YXR1cy5TVUNDRVNTLmNyZWF0ZVJlc3VsdCgpKTsKLQotICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGhyb3dhYmxlKSB7Ci0gICAgICAgICAgICAvLyBjYW4ndCB1c2UgQnJpZGdlLmdldExvZygpIGFzIHRoZSBleGNlcHRpb24gbWlnaHQgYmUgdGhyb3duIG91dHNpZGUKLSAgICAgICAgICAgIC8vIG9mIGFuIGFjcXVpcmUvcmVsZWFzZSBibG9jay4KLSAgICAgICAgICAgIG1MaXN0ZW5lci5kb25lKFN0YXR1cy5FUlJPUl9VTktOT1dOLmNyZWF0ZVJlc3VsdCgiRXJyb3IgcGxheWluZyBhbmltYXRpb24iLCB0aHJvd2FibGUpKTsKLQotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgcG9zdEFuaW1hdGlvbigpOwotICAgICAgICAgICAgSGFuZGxlcl9EZWxlZ2F0ZS5zZXRDYWxsYmFjayhudWxsKTsKLSAgICAgICAgICAgIEJyaWRnZS5jbGVhbnVwVGhyZWFkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2FuaW1hdGlvbi9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9hbmltYXRpb24vUHJvcGVydHlWYWx1ZXNIb2xkZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I0NDRhYS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2FuaW1hdGlvbi9Qcm9wZXJ0eVZhbHVlc0hvbGRlcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5hbmltYXRpb247Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuYW5pbWF0aW9uLlByb3BlcnR5VmFsdWVzSG9sZGVyCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgUHJvcGVydHlWYWx1ZXNIb2xkZXIgaGF2ZSBiZWVuCi0gKiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIGl0J3MgYSBzdGF0ZWxlc3MgY2xhc3MgdG8gc3RhcnQgd2l0aCwgdGhlcmUncyBubyBuZWVkIHRvIGtlZXAgYSB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfQotICogYXJvdW5kIHRvIG1hcCBpbnQgdG8gaW5zdGFuY2Ugb2YgdGhlIGRlbGVnYXRlLgotICoKLSAqIFRoZSBtYWluIGdvYWwgb2YgdGhpcyBjbGFzcycgbWV0aG9kcyBhcmUgdG8gcHJvdmlkZSBhIG5hdGl2ZSB3YXkgdG8gYWNjZXNzIHNldHRlcnMgYW5kIGdldHRlcnMKLSAqIG9uIHNvbWUgb2JqZWN0LiBJbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBkZWZhdWx0IHRvIHVzaW5nIEphdmEgcmVmbGVjdGlvbiBpbnN0ZWFkIHNvIHRoZSBuYXRpdmUKLSAqIG1ldGhvZHMgZG8gbm90aGluZy4KLSAqCi0gKi8KLS8qcGFja2FnZSovIGNsYXNzIFByb3BlcnR5VmFsdWVzSG9sZGVyX0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbkdldEludE1ldGhvZChDbGFzczw/PiB0YXJnZXRDbGFzcywgU3RyaW5nIG1ldGhvZE5hbWUpIHsKLSAgICAgICAgLy8gcmV0dXJuIDAgdG8gZm9yY2UgUHJvcGVydHlWYWx1ZXNIb2xkZXIgdG8gdXNlIEphdmEgcmVmbGVjdGlvbi4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuR2V0RmxvYXRNZXRob2QoQ2xhc3M8Pz4gdGFyZ2V0Q2xhc3MsIFN0cmluZyBtZXRob2ROYW1lKSB7Ci0gICAgICAgIC8vIHJldHVybiAwIHRvIGZvcmNlIFByb3BlcnR5VmFsdWVzSG9sZGVyIHRvIHVzZSBKYXZhIHJlZmxlY3Rpb24uCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5DYWxsSW50TWV0aG9kKE9iamVjdCB0YXJnZXQsIGludCBtZXRob2RJRCwgaW50IGFyZykgewotICAgICAgICAvLyBkbyBub3RoaW5nCi0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbkNhbGxGbG9hdE1ldGhvZChPYmplY3QgdGFyZ2V0LCBpbnQgbWV0aG9kSUQsIGZsb2F0IGFyZykgewotICAgICAgICAvLyBkbyBub3RoaW5nCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9hcHAvRnJhZ21lbnRfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvYXBwL0ZyYWdtZW50X0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYmQzZjEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9hcHAvRnJhZ21lbnRfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmFwcDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5JUHJvamVjdENhbGxiYWNrOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotCi0vKioKLSAqIERlbGVnYXRlIHVzZWQgdG8gcHJvdmlkZSBuZXcgaW1wbGVtZW50YXRpb24gb2YgYSBzZWxlY3QgZmV3IG1ldGhvZHMgb2Yge0BsaW5rIEZyYWdtZW50fQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIEZyYWdtZW50IGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhlIG1ldGhvZHMgYmVpbmcgcmUtaW1wbGVtZW50ZWQgYXJlIHRoZSBvbmVzIHJlc3BvbnNpYmxlIGZvciBpbnN0YW50aWF0aW5nIEZyYWdtZW50IG9iamVjdHMuCi0gKiBCZWNhdXNlIHRoZSBjbGFzc2VzIG9mIHRoZXNlIG9iamVjdHMgYXJlIGZvdW5kIGluIHRoZSBwcm9qZWN0LCB0aGVzZSBtZXRob2RzIG5lZWQgYWNjZXNzIHRvCi0gKiB7QGxpbmsgSVByb2plY3RDYWxsYmFja30gb2JqZWN0LiBUaGV5IGFyZSBob3dldmVyIHN0YXRpYyBtZXRob2RzLCBzbyB0aGUgY2FsbGJhY2sgaXMgc2V0Ci0gKiBiZWZvcmUgdGhlIGluZmxhdGlvbiB0aHJvdWdoIHtAbGluayAjc2V0UHJvamVjdENhbGxiYWNrKElQcm9qZWN0Q2FsbGJhY2spfS4KLSAqLwotcHVibGljIGNsYXNzIEZyYWdtZW50X0RlbGVnYXRlIHsKLQotICAgIHByaXZhdGUgc3RhdGljIElQcm9qZWN0Q2FsbGJhY2sgc1Byb2plY3RDYWxsYmFjazsKLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIGN1cnJlbnQge0BsaW5rIElQcm9qZWN0Q2FsbGJhY2t9IHRvIGJlIHVzZWQgdG8gaW5zdGFudGlhdGUgY2xhc3NlcyBjb21pbmcKLSAgICAgKiBmcm9tIHRoZSBwcm9qZWN0IGJlaW5nIHJlbmRlcmVkLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRQcm9qZWN0Q2FsbGJhY2soSVByb2plY3RDYWxsYmFjayBwcm9qZWN0Q2FsbGJhY2spIHsKLSAgICAgICAgc1Byb2plY3RDYWxsYmFjayA9IHByb2plY3RDYWxsYmFjazsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBMaWtlIHtAbGluayAjaW5zdGFudGlhdGUoQ29udGV4dCwgU3RyaW5nLCBCdW5kbGUpfSBidXQgd2l0aCBhIG51bGwKLSAgICAgKiBhcmd1bWVudCBCdW5kbGUuCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIEZyYWdtZW50IGluc3RhbnRpYXRlKENvbnRleHQgY29udGV4dCwgU3RyaW5nIGZuYW1lKSB7Ci0gICAgICAgIHJldHVybiBpbnN0YW50aWF0ZShjb250ZXh0LCBmbmFtZSwgbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgRnJhZ21lbnQgd2l0aCB0aGUgZ2l2ZW4gY2xhc3MgbmFtZS4gIFRoaXMgaXMKLSAgICAgKiB0aGUgc2FtZSBhcyBjYWxsaW5nIGl0cyBlbXB0eSBjb25zdHJ1Y3Rvci4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBjYWxsaW5nIGNvbnRleHQgYmVpbmcgdXNlZCB0byBpbnN0YW50aWF0ZSB0aGUgZnJhZ21lbnQuCi0gICAgICogVGhpcyBpcyBjdXJyZW50bHkganVzdCB1c2VkIHRvIGdldCBpdHMgQ2xhc3NMb2FkZXIuCi0gICAgICogQHBhcmFtIGZuYW1lIFRoZSBjbGFzcyBuYW1lIG9mIHRoZSBmcmFnbWVudCB0byBpbnN0YW50aWF0ZS4KLSAgICAgKiBAcGFyYW0gYXJncyBCdW5kbGUgb2YgYXJndW1lbnRzIHRvIHN1cHBseSB0byB0aGUgZnJhZ21lbnQsIHdoaWNoIGl0Ci0gICAgICogY2FuIHJldHJpZXZlIHdpdGgge0BsaW5rICNnZXRBcmd1bWVudHMoKX0uICBNYXkgYmUgbnVsbC4KLSAgICAgKiBAcmV0dXJuIFJldHVybnMgYSBuZXcgZnJhZ21lbnQgaW5zdGFuY2UuCi0gICAgICogQHRocm93cyBJbnN0YW50aWF0aW9uRXhjZXB0aW9uIElmIHRoZXJlIGlzIGEgZmFpbHVyZSBpbiBpbnN0YW50aWF0aW5nCi0gICAgICogdGhlIGdpdmVuIGZyYWdtZW50IGNsYXNzLiAgVGhpcyBpcyBhIHJ1bnRpbWUgZXhjZXB0aW9uOyBpdCBpcyBub3QKLSAgICAgKiBub3JtYWxseSBleHBlY3RlZCB0byBoYXBwZW4uCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIEZyYWdtZW50IGluc3RhbnRpYXRlKENvbnRleHQgY29udGV4dCwgU3RyaW5nIGZuYW1lLCBCdW5kbGUgYXJncykgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKHNQcm9qZWN0Q2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIEZyYWdtZW50IGYgPSAoRnJhZ21lbnQpIHNQcm9qZWN0Q2FsbGJhY2subG9hZFZpZXcoZm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ2xhc3NbMF0sIG5ldyBPYmplY3RbMF0pOwotCi0gICAgICAgICAgICAgICAgaWYgKGFyZ3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBhcmdzLnNldENsYXNzTG9hZGVyKGYuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgZi5tQXJndW1lbnRzID0gYXJnczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGY7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBGcmFnbWVudC5JbnN0YW50aWF0aW9uRXhjZXB0aW9uKCJVbmFibGUgdG8gaW5zdGFudGlhdGUgZnJhZ21lbnQgIiArIGZuYW1lCi0gICAgICAgICAgICAgICAgICAgICsgIjogbWFrZSBzdXJlIGNsYXNzIG5hbWUgZXhpc3RzLCBpcyBwdWJsaWMsIGFuZCBoYXMgYW4iCi0gICAgICAgICAgICAgICAgICAgICsgIiBlbXB0eSBjb25zdHJ1Y3RvciB0aGF0IGlzIHB1YmxpYyIsIGUpOwotICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRnJhZ21lbnQuSW5zdGFudGlhdGlvbkV4Y2VwdGlvbigiVW5hYmxlIHRvIGluc3RhbnRpYXRlIGZyYWdtZW50ICIgKyBmbmFtZQotICAgICAgICAgICAgICAgICAgICArICI6IG1ha2Ugc3VyZSBjbGFzcyBuYW1lIGV4aXN0cywgaXMgcHVibGljLCBhbmQgaGFzIGFuIgotICAgICAgICAgICAgICAgICAgICArICIgZW1wdHkgY29uc3RydWN0b3IgdGhhdCBpcyBwdWJsaWMiLCBlKTsKLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRnJhZ21lbnQuSW5zdGFudGlhdGlvbkV4Y2VwdGlvbigiVW5hYmxlIHRvIGluc3RhbnRpYXRlIGZyYWdtZW50ICIgKyBmbmFtZQotICAgICAgICAgICAgICAgICAgICArICI6IG1ha2Ugc3VyZSBjbGFzcyBuYW1lIGV4aXN0cywgaXMgcHVibGljLCBhbmQgaGFzIGFuIgotICAgICAgICAgICAgICAgICAgICArICIgZW1wdHkgY29uc3RydWN0b3IgdGhhdCBpcyBwdWJsaWMiLCBlKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBGcmFnbWVudC5JbnN0YW50aWF0aW9uRXhjZXB0aW9uKCJVbmFibGUgdG8gaW5zdGFudGlhdGUgZnJhZ21lbnQgIiArIGZuYW1lCi0gICAgICAgICAgICAgICAgICAgICsgIjogbWFrZSBzdXJlIGNsYXNzIG5hbWUgZXhpc3RzLCBpcyBwdWJsaWMsIGFuZCBoYXMgYW4iCi0gICAgICAgICAgICAgICAgICAgICsgIiBlbXB0eSBjb25zdHJ1Y3RvciB0aGF0IGlzIHB1YmxpYyIsIGUpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9jb250ZW50L3Jlcy9CcmlkZ2VBc3NldE1hbmFnZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvY29udGVudC9yZXMvQnJpZGdlQXNzZXRNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NTM5MTguLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9jb250ZW50L3Jlcy9CcmlkZ2VBc3NldE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuY29udGVudC5yZXM7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRNYW5hZ2VyOwotCi1wdWJsaWMgY2xhc3MgQnJpZGdlQXNzZXRNYW5hZ2VyIGV4dGVuZHMgQXNzZXRNYW5hZ2VyIHsKLQotICAgIC8qKgotICAgICAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIHN0YXRpYyBmaWVsZCB7QGxpbmsgQXNzZXRNYW5hZ2VyI21TeXN0ZW19IHdoaWNoIGlzIHVzZWQKLSAgICAgKiBieSBtZXRob2RzIHdobyBnZXQgYSBnbG9iYWwgYXNzZXQgbWFuYWdlciB1c2luZyB7QGxpbmsgQXNzZXRNYW5hZ2VyI2dldFN5c3RlbSgpfS4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhleSB3aWxsIGVuZCB1cCB1c2luZyBvdXIgYnJpZGdlIGFzc2V0IG1hbmFnZXIuCi0gICAgICogPHAvPgotICAgICAqIHtAbGluayBCcmlkZ2V9IGNhbGxzIHRoaXMgbWV0aG9kIGFmdGVyIHNldHRpbmcgdXAgYSBuZXcgYnJpZGdlLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQXNzZXRNYW5hZ2VyIGluaXRTeXN0ZW0oKSB7Ci0gICAgICAgIGlmICghKEFzc2V0TWFuYWdlci5zU3lzdGVtIGluc3RhbmNlb2YgQnJpZGdlQXNzZXRNYW5hZ2VyKSkgewotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IEFzc2V0TWFuYWdlcigpIGNyZWF0ZXMgYSBzeXN0ZW0gQXNzZXRNYW5hZ2VyIGFuZCB3ZSBvdmVycmlkZSBpdAotICAgICAgICAgICAgLy8gd2l0aCBvdXIgQnJpZGdlQXNzZXRNYW5hZ2VyLgotICAgICAgICAgICAgQXNzZXRNYW5hZ2VyLnNTeXN0ZW0gPSBuZXcgQnJpZGdlQXNzZXRNYW5hZ2VyKCk7Ci0gICAgICAgICAgICBBc3NldE1hbmFnZXIuc1N5c3RlbS5tYWtlU3RyaW5nQmxvY2tzKGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQXNzZXRNYW5hZ2VyLnNTeXN0ZW07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2xlYXJzIHRoZSBzdGF0aWMge0BsaW5rIEFzc2V0TWFuYWdlciNzU3lzdGVtfSB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgbGVhdmUgb2JqZWN0cwotICAgICAqIGFyb3VuZCB0aGF0IHdvdWxkIHByZXZlbnQgdXMgZnJvbSB1bmxvYWRpbmcgdGhlIGxpYnJhcnkuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGNsZWFyU3lzdGVtKCkgewotICAgICAgICBBc3NldE1hbmFnZXIuc1N5c3RlbSA9IG51bGw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBCcmlkZ2VBc3NldE1hbmFnZXIoKSB7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9jb250ZW50L3Jlcy9CcmlkZ2VSZXNvdXJjZXMuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvY29udGVudC9yZXMvQnJpZGdlUmVzb3VyY2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OTQ0NTIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9jb250ZW50L3Jlcy9CcmlkZ2VSZXNvdXJjZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmNvbnRlbnQucmVzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklQcm9qZWN0Q2FsbGJhY2s7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzb3VyY2VWYWx1ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZUNvbnN0YW50czsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQuQnJpZGdlQ29udGV4dDsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQuQnJpZGdlWG1sQmxvY2tQYXJzZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlBhcnNlckZhY3Rvcnk7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlJlc291cmNlSGVscGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLm5pbmVwYXRjaC5OaW5lUGF0Y2g7Ci1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLlJlc291cmNlVHlwZTsKLWltcG9ydCBjb20uYW5kcm9pZC51dGlsLlBhaXI7Ci0KLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyOwotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXAuTGF5b3V0UGFyYW1zOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLS8qKgotICoKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEJyaWRnZVJlc291cmNlcyBleHRlbmRzIFJlc291cmNlcyB7Ci0KLSAgICBwcml2YXRlIEJyaWRnZUNvbnRleHQgbUNvbnRleHQ7Ci0gICAgcHJpdmF0ZSBJUHJvamVjdENhbGxiYWNrIG1Qcm9qZWN0Q2FsbGJhY2s7Ci0gICAgcHJpdmF0ZSBib29sZWFuW10gbVBsYXRmb3JtUmVzb3VyY2VGbGFnID0gbmV3IGJvb2xlYW5bMV07Ci0KLSAgICAvKioKLSAgICAgKiBTaW1wbGVyIHdyYXBwZXIgYXJvdW5kIEZpbGVJbnB1dFN0cmVhbS4gVGhpcyBpcyB1c2VkIHdoZW4gdGhlIGlucHV0IHN0cmVhbSByZXByZXNlbnQKLSAgICAgKiBub3QgYSBub3JtYWwgYml0bWFwIGJ1dCBhIG5pbmUgcGF0Y2guCi0gICAgICogVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgSW5wdXRTdHJlYW0gaXMgY3JlYXRlZCBpbiBhIG1ldGhvZCBidXQgdXNlZCBpbiBhbm90aGVyIHRoYXQgbmVlZHMKLSAgICAgKiB0byBrbm93IHdoZXRoZXIgdGhpcyBpcyA5LXBhdGNoIG9yIG5vdCwgc3VjaCBhcyBCaXRtYXBGYWN0b3J5LgotICAgICAqLwotICAgIHB1YmxpYyBjbGFzcyBOaW5lUGF0Y2hJbnB1dFN0cmVhbSBleHRlbmRzIEZpbGVJbnB1dFN0cmVhbSB7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBtRmFrZU1hcmtTdXBwb3J0ID0gdHJ1ZTsKLSAgICAgICAgcHVibGljIE5pbmVQYXRjaElucHV0U3RyZWFtKEZpbGUgZmlsZSkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBzdXBlcihmaWxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBtYXJrU3VwcG9ydGVkKCkgewotICAgICAgICAgICAgaWYgKG1GYWtlTWFya1N1cHBvcnQpIHsKLSAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIG5lZWRlZCBzbyB0aGF0IEJpdG1hcEZhY3RvcnkgZG9lc24ndCB3cmFwIHRoaXMgaW4gYSBCdWZmZXJlZElucHV0U3RyZWFtLgotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gc3VwZXIubWFya1N1cHBvcnRlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgZGlzYWJsZUZha2VNYXJrU3VwcG9ydCgpIHsKLSAgICAgICAgICAgIC8vIGRpc2FibGUgZmFrZSBtYXJrIHN1cHBvcnQgc28gdGhhdCBpbiBjYXNlIGNvZGVjIGFjdHVhbGx5IHRyeSB0byB1c2UgdGhlbQotICAgICAgICAgICAgLy8gd2UgZG9uJ3QgbGllIHRvIHRoZW0uCi0gICAgICAgICAgICBtRmFrZU1hcmtTdXBwb3J0ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGluaXRpYWxpemVzIHRoZSBzdGF0aWMgZmllbGQge0BsaW5rIFJlc291cmNlcyNtU3lzdGVtfSB3aGljaCBpcyB1c2VkCi0gICAgICogYnkgbWV0aG9kcyB3aG8gZ2V0IGdsb2JhbCByZXNvdXJjZXMgdXNpbmcge0BsaW5rIFJlc291cmNlcyNnZXRTeXN0ZW0oKX0uCi0gICAgICogPHAvPgotICAgICAqIFRoZXkgd2lsbCBlbmQgdXAgdXNpbmcgb3VyIGJyaWRnZSByZXNvdXJjZXMuCi0gICAgICogPHAvPgotICAgICAqIHtAbGluayBCcmlkZ2V9IGNhbGxzIHRoaXMgbWV0aG9kIGFmdGVyIHNldHRpbmcgdXAgYSBuZXcgYnJpZGdlLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUmVzb3VyY2VzIGluaXRTeXN0ZW0oQnJpZGdlQ29udGV4dCBjb250ZXh0LAotICAgICAgICAgICAgQXNzZXRNYW5hZ2VyIGFzc2V0cywKLSAgICAgICAgICAgIERpc3BsYXlNZXRyaWNzIG1ldHJpY3MsCi0gICAgICAgICAgICBDb25maWd1cmF0aW9uIGNvbmZpZywKLSAgICAgICAgICAgIElQcm9qZWN0Q2FsbGJhY2sgcHJvamVjdENhbGxiYWNrKSB7Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZXMubVN5c3RlbSA9IG5ldyBCcmlkZ2VSZXNvdXJjZXMoY29udGV4dCwKLSAgICAgICAgICAgICAgICBhc3NldHMsCi0gICAgICAgICAgICAgICAgbWV0cmljcywKLSAgICAgICAgICAgICAgICBjb25maWcsCi0gICAgICAgICAgICAgICAgcHJvamVjdENhbGxiYWNrKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEaXNwb3NlcyB0aGUgc3RhdGljIHtAbGluayBSZXNvdXJjZXMjbVN5c3RlbX0gdG8gbWFrZSBzdXJlIHdlIGRvbid0IGxlYXZlIG9iamVjdHMKLSAgICAgKiBhcm91bmQgdGhhdCB3b3VsZCBwcmV2ZW50IHVzIGZyb20gdW5sb2FkaW5nIHRoZSBsaWJyYXJ5LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBkaXNwb3NlU3lzdGVtKCkgewotICAgICAgICBpZiAoUmVzb3VyY2VzLm1TeXN0ZW0gaW5zdGFuY2VvZiBCcmlkZ2VSZXNvdXJjZXMpIHsKLSAgICAgICAgICAgICgoQnJpZGdlUmVzb3VyY2VzKShSZXNvdXJjZXMubVN5c3RlbSkpLm1Db250ZXh0ID0gbnVsbDsKLSAgICAgICAgICAgICgoQnJpZGdlUmVzb3VyY2VzKShSZXNvdXJjZXMubVN5c3RlbSkpLm1Qcm9qZWN0Q2FsbGJhY2sgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIFJlc291cmNlcy5tU3lzdGVtID0gbnVsbDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEJyaWRnZVJlc291cmNlcyhCcmlkZ2VDb250ZXh0IGNvbnRleHQsIEFzc2V0TWFuYWdlciBhc3NldHMsIERpc3BsYXlNZXRyaWNzIG1ldHJpY3MsCi0gICAgICAgICAgICBDb25maWd1cmF0aW9uIGNvbmZpZywgSVByb2plY3RDYWxsYmFjayBwcm9qZWN0Q2FsbGJhY2spIHsKLSAgICAgICAgc3VwZXIoYXNzZXRzLCBtZXRyaWNzLCBjb25maWcpOwotICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIG1Qcm9qZWN0Q2FsbGJhY2sgPSBwcm9qZWN0Q2FsbGJhY2s7Ci0gICAgfQotCi0gICAgcHVibGljIEJyaWRnZVR5cGVkQXJyYXkgbmV3VHlwZUFycmF5KGludCBudW1FbnRyaWVzLCBib29sZWFuIHBsYXRmb3JtRmlsZSkgewotICAgICAgICByZXR1cm4gbmV3IEJyaWRnZVR5cGVkQXJyYXkodGhpcywgbUNvbnRleHQsIG51bUVudHJpZXMsIHBsYXRmb3JtRmlsZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBQYWlyPFN0cmluZywgUmVzb3VyY2VWYWx1ZT4gZ2V0UmVzb3VyY2VWYWx1ZShpbnQgaWQsIGJvb2xlYW5bXSBwbGF0Zm9ybVJlc0ZsYWdfb3V0KSB7Ci0gICAgICAgIC8vIGZpcnN0IGdldCB0aGUgU3RyaW5nIHJlbGF0ZWQgdG8gdGhpcyBpZCBpbiB0aGUgZnJhbWV3b3JrCi0gICAgICAgIFBhaXI8UmVzb3VyY2VUeXBlLCBTdHJpbmc+IHJlc291cmNlSW5mbyA9IEJyaWRnZS5yZXNvbHZlUmVzb3VyY2VJZChpZCk7Ci0KLSAgICAgICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBwbGF0Zm9ybVJlc0ZsYWdfb3V0WzBdID0gdHJ1ZTsKLSAgICAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gcmVzb3VyY2VJbmZvLmdldFNlY29uZCgpOwotCi0gICAgICAgICAgICByZXR1cm4gUGFpci5vZihhdHRyaWJ1dGVOYW1lLCBtQ29udGV4dC5nZXRSZW5kZXJSZXNvdXJjZXMoKS5nZXRGcmFtZXdvcmtSZXNvdXJjZSgKLSAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VJbmZvLmdldEZpcnN0KCksIGF0dHJpYnV0ZU5hbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGRpZG4ndCBmaW5kIGEgbWF0Y2ggaW4gdGhlIGZyYW1ld29yaz8gbG9vayBpbiB0aGUgcHJvamVjdC4KLSAgICAgICAgaWYgKG1Qcm9qZWN0Q2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgcmVzb3VyY2VJbmZvID0gbVByb2plY3RDYWxsYmFjay5yZXNvbHZlUmVzb3VyY2VJZChpZCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHBsYXRmb3JtUmVzRmxhZ19vdXRbMF0gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IHJlc291cmNlSW5mby5nZXRTZWNvbmQoKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBQYWlyLm9mKGF0dHJpYnV0ZU5hbWUsIG1Db250ZXh0LmdldFJlbmRlclJlc291cmNlcygpLmdldFByb2plY3RSZXNvdXJjZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlSW5mby5nZXRGaXJzdCgpLCBhdHRyaWJ1dGVOYW1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRHJhd2FibGUgZ2V0RHJhd2FibGUoaW50IGlkKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBQYWlyPFN0cmluZywgUmVzb3VyY2VWYWx1ZT4gdmFsdWUgPSBnZXRSZXNvdXJjZVZhbHVlKGlkLCBtUGxhdGZvcm1SZXNvdXJjZUZsYWcpOwotCi0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VIZWxwZXIuZ2V0RHJhd2FibGUodmFsdWUuZ2V0U2Vjb25kKCksIG1Db250ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlkIHdhcyBub3QgZm91bmQgb3Igbm90IHJlc29sdmVkLiBUaHJvdyBhIE5vdEZvdW5kRXhjZXB0aW9uLgotICAgICAgICB0aHJvd0V4Y2VwdGlvbihpZCk7Ci0KLSAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZCBzaW5jZSB0aGUgbWV0aG9kIGFib3ZlIGFsd2F5cyB0aHJvd3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRDb2xvcihpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhaXI8U3RyaW5nLCBSZXNvdXJjZVZhbHVlPiB2YWx1ZSA9IGdldFJlc291cmNlVmFsdWUoaWQsIG1QbGF0Zm9ybVJlc291cmNlRmxhZyk7Ci0KLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlSGVscGVyLmdldENvbG9yKHZhbHVlLmdldFNlY29uZCgpLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfRk9STUFULCBlLmdldE1lc3NhZ2UoKSwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWQgd2FzIG5vdCBmb3VuZCBvciBub3QgcmVzb2x2ZWQuIFRocm93IGEgTm90Rm91bmRFeGNlcHRpb24uCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGlkKTsKLQotICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkIHNpbmNlIHRoZSBtZXRob2QgYWJvdmUgYWx3YXlzIHRocm93cwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29sb3JTdGF0ZUxpc3QgZ2V0Q29sb3JTdGF0ZUxpc3QoaW50IGlkKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBQYWlyPFN0cmluZywgUmVzb3VyY2VWYWx1ZT4gcmVzVmFsdWUgPSBnZXRSZXNvdXJjZVZhbHVlKGlkLCBtUGxhdGZvcm1SZXNvdXJjZUZsYWcpOwotCi0gICAgICAgIGlmIChyZXNWYWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBDb2xvclN0YXRlTGlzdCBzdGF0ZUxpc3QgPSBSZXNvdXJjZUhlbHBlci5nZXRDb2xvclN0YXRlTGlzdChyZXNWYWx1ZS5nZXRTZWNvbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQpOwotICAgICAgICAgICAgaWYgKHN0YXRlTGlzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlTGlzdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlkIHdhcyBub3QgZm91bmQgb3Igbm90IHJlc29sdmVkLiBUaHJvdyBhIE5vdEZvdW5kRXhjZXB0aW9uLgotICAgICAgICB0aHJvd0V4Y2VwdGlvbihpZCk7Ci0KLSAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZCBzaW5jZSB0aGUgbWV0aG9kIGFib3ZlIGFsd2F5cyB0aHJvd3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENoYXJTZXF1ZW5jZSBnZXRUZXh0KGludCBpZCkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgUGFpcjxTdHJpbmcsIFJlc291cmNlVmFsdWU+IHZhbHVlID0gZ2V0UmVzb3VyY2VWYWx1ZShpZCwgbVBsYXRmb3JtUmVzb3VyY2VGbGFnKTsKLQotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSByZXNWYWx1ZSA9IHZhbHVlLmdldFNlY29uZCgpOwotCi0gICAgICAgICAgICBhc3NlcnQgcmVzVmFsdWUgIT0gbnVsbDsKLSAgICAgICAgICAgIGlmIChyZXNWYWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHYgPSByZXNWYWx1ZS5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICh2ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWQgd2FzIG5vdCBmb3VuZCBvciBub3QgcmVzb2x2ZWQuIFRocm93IGEgTm90Rm91bmRFeGNlcHRpb24uCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGlkKTsKLQotICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkIHNpbmNlIHRoZSBtZXRob2QgYWJvdmUgYWx3YXlzIHRocm93cwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgWG1sUmVzb3VyY2VQYXJzZXIgZ2V0TGF5b3V0KGludCBpZCkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgUGFpcjxTdHJpbmcsIFJlc291cmNlVmFsdWU+IHYgPSBnZXRSZXNvdXJjZVZhbHVlKGlkLCBtUGxhdGZvcm1SZXNvdXJjZUZsYWcpOwotCi0gICAgICAgIGlmICh2ICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSB2LmdldFNlY29uZCgpOwotICAgICAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXIgPSBudWxsOwotCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBjdXJyZW50IHBhcnNlciBjYW4gcHJvdmlkZSB1cyB3aXRoIGEgY3VzdG9tIHBhcnNlci4KLSAgICAgICAgICAgICAgICBpZiAobVBsYXRmb3JtUmVzb3VyY2VGbGFnWzBdID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlciA9IG1Qcm9qZWN0Q2FsbGJhY2suZ2V0UGFyc2VyKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYSBuZXcgb25lIG1hbnVhbGx5IGlmIG5lZWRlZC4KLSAgICAgICAgICAgICAgICBpZiAocGFyc2VyID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgRmlsZSB4bWwgPSBuZXcgRmlsZSh2YWx1ZS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHhtbC5pc0ZpbGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBjcmVhdGUgYSBwdWxsIHBhcnNlciBhcm91bmQgdGhlIGxheW91dCBYTUwgZmlsZSwgYW5kIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdpdmUgdGhhdCB0byBvdXIgWG1sQmxvY2tQYXJzZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlciA9IFBhcnNlckZhY3RvcnkuY3JlYXRlKHhtbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocGFyc2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCcmlkZ2VYbWxCbG9ja1BhcnNlcihwYXJzZXIsIG1Db250ZXh0LCBtUGxhdGZvcm1SZXNvdXJjZUZsYWdbMF0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY29uZmlndXJlIHBhcnNlciBmb3IgIiArIHZhbHVlLmdldFZhbHVlKCksIGUsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgIC8vIHdlJ2xsIHJldHVybiBudWxsIGJlbG93LgotICAgICAgICAgICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyB0aGlzIHNob3VsZG4ndCBoYXBwZW4gc2luY2Ugd2UgY2hlY2sgYWJvdmUuCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlkIHdhcyBub3QgZm91bmQgb3Igbm90IHJlc29sdmVkLiBUaHJvdyBhIE5vdEZvdW5kRXhjZXB0aW9uLgotICAgICAgICB0aHJvd0V4Y2VwdGlvbihpZCk7Ci0KLSAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZCBzaW5jZSB0aGUgbWV0aG9kIGFib3ZlIGFsd2F5cyB0aHJvd3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFhtbFJlc291cmNlUGFyc2VyIGdldEFuaW1hdGlvbihpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhaXI8U3RyaW5nLCBSZXNvdXJjZVZhbHVlPiB2ID0gZ2V0UmVzb3VyY2VWYWx1ZShpZCwgbVBsYXRmb3JtUmVzb3VyY2VGbGFnKTsKLQotICAgICAgICBpZiAodiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHZhbHVlID0gdi5nZXRTZWNvbmQoKTsKLSAgICAgICAgICAgIFhtbFB1bGxQYXJzZXIgcGFyc2VyID0gbnVsbDsKLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBGaWxlIHhtbCA9IG5ldyBGaWxlKHZhbHVlLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGlmICh4bWwuaXNGaWxlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBjcmVhdGUgYSBwdWxsIHBhcnNlciBhcm91bmQgdGhlIGxheW91dCBYTUwgZmlsZSwgYW5kIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgLy8gZ2l2ZSB0aGF0IHRvIG91ciBYbWxCbG9ja1BhcnNlcgotICAgICAgICAgICAgICAgICAgICBwYXJzZXIgPSBQYXJzZXJGYWN0b3J5LmNyZWF0ZSh4bWwpOwotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnJpZGdlWG1sQmxvY2tQYXJzZXIocGFyc2VyLCBtQ29udGV4dCwgbVBsYXRmb3JtUmVzb3VyY2VGbGFnWzBdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19CUk9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBwYXJzZXIgZm9yICIgKyB2YWx1ZS5nZXRWYWx1ZSgpLCBlLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICAvLyB3ZSdsbCByZXR1cm4gbnVsbCBiZWxvdy4KLSAgICAgICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIHdlIGNoZWNrIGFib3ZlLgotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQotICAgICAgICAvLyBpZCB3YXMgbm90IGZvdW5kIG9yIG5vdCByZXNvbHZlZC4gVGhyb3cgYSBOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICAgICAgdGhyb3dFeGNlcHRpb24oaWQpOwotCi0gICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWQgc2luY2UgdGhlIG1ldGhvZCBhYm92ZSBhbHdheXMgdGhyb3dzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBUeXBlZEFycmF5IG9idGFpbkF0dHJpYnV0ZXMoQXR0cmlidXRlU2V0IHNldCwgaW50W10gYXR0cnMpIHsKLSAgICAgICAgcmV0dXJuIG1Db250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoc2V0LCBhdHRycyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFR5cGVkQXJyYXkgb2J0YWluVHlwZWRBcnJheShpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldERpbWVuc2lvbihpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhaXI8U3RyaW5nLCBSZXNvdXJjZVZhbHVlPiB2YWx1ZSA9IGdldFJlc291cmNlVmFsdWUoaWQsIG1QbGF0Zm9ybVJlc291cmNlRmxhZyk7Ci0KLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgcmVzVmFsdWUgPSB2YWx1ZS5nZXRTZWNvbmQoKTsKLQotICAgICAgICAgICAgYXNzZXJ0IHJlc1ZhbHVlICE9IG51bGw7Ci0gICAgICAgICAgICBpZiAocmVzVmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFN0cmluZyB2ID0gcmVzVmFsdWUuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAodiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2LmVxdWFscyhCcmlkZ2VDb25zdGFudHMuTUFUQ0hfUEFSRU5UKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuZXF1YWxzKEJyaWRnZUNvbnN0YW50cy5GSUxMX1BBUkVOVCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHYuZXF1YWxzKEJyaWRnZUNvbnN0YW50cy5XUkFQX0NPTlRFTlQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChSZXNvdXJjZUhlbHBlci5wYXJzZUZsb2F0QXR0cmlidXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmdldEZpcnN0KCksIHYsIG1UbXBWYWx1ZSwgdHJ1ZSAvKnJlcXVpcmVVbml0Ki8pICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRtcFZhbHVlLnR5cGUgPT0gVHlwZWRWYWx1ZS5UWVBFX0RJTUVOU0lPTikgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1UbXBWYWx1ZS5nZXREaW1lbnNpb24oZ2V0RGlzcGxheU1ldHJpY3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBpZCB3YXMgbm90IGZvdW5kIG9yIG5vdCByZXNvbHZlZC4gVGhyb3cgYSBOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICAgICAgdGhyb3dFeGNlcHRpb24oaWQpOwotCi0gICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWQgc2luY2UgdGhlIG1ldGhvZCBhYm92ZSBhbHdheXMgdGhyb3dzCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0RGltZW5zaW9uUGl4ZWxPZmZzZXQoaW50IGlkKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBQYWlyPFN0cmluZywgUmVzb3VyY2VWYWx1ZT4gdmFsdWUgPSBnZXRSZXNvdXJjZVZhbHVlKGlkLCBtUGxhdGZvcm1SZXNvdXJjZUZsYWcpOwotCi0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHJlc1ZhbHVlID0gdmFsdWUuZ2V0U2Vjb25kKCk7Ci0KLSAgICAgICAgICAgIGFzc2VydCByZXNWYWx1ZSAhPSBudWxsOwotICAgICAgICAgICAgaWYgKHJlc1ZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdiA9IHJlc1ZhbHVlLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoUmVzb3VyY2VIZWxwZXIucGFyc2VGbG9hdEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5nZXRGaXJzdCgpLCB2LCBtVG1wVmFsdWUsIHRydWUgLypyZXF1aXJlVW5pdCovKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UbXBWYWx1ZS50eXBlID09IFR5cGVkVmFsdWUuVFlQRV9ESU1FTlNJT04pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlZFZhbHVlLmNvbXBsZXhUb0RpbWVuc2lvblBpeGVsT2Zmc2V0KG1UbXBWYWx1ZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREaXNwbGF5TWV0cmljcygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlkIHdhcyBub3QgZm91bmQgb3Igbm90IHJlc29sdmVkLiBUaHJvdyBhIE5vdEZvdW5kRXhjZXB0aW9uLgotICAgICAgICB0aHJvd0V4Y2VwdGlvbihpZCk7Ci0KLSAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZCBzaW5jZSB0aGUgbWV0aG9kIGFib3ZlIGFsd2F5cyB0aHJvd3MKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXREaW1lbnNpb25QaXhlbFNpemUoaW50IGlkKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBQYWlyPFN0cmluZywgUmVzb3VyY2VWYWx1ZT4gdmFsdWUgPSBnZXRSZXNvdXJjZVZhbHVlKGlkLCBtUGxhdGZvcm1SZXNvdXJjZUZsYWcpOwotCi0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHJlc1ZhbHVlID0gdmFsdWUuZ2V0U2Vjb25kKCk7Ci0KLSAgICAgICAgICAgIGFzc2VydCByZXNWYWx1ZSAhPSBudWxsOwotICAgICAgICAgICAgaWYgKHJlc1ZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdiA9IHJlc1ZhbHVlLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoUmVzb3VyY2VIZWxwZXIucGFyc2VGbG9hdEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5nZXRGaXJzdCgpLCB2LCBtVG1wVmFsdWUsIHRydWUgLypyZXF1aXJlVW5pdCovKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UbXBWYWx1ZS50eXBlID09IFR5cGVkVmFsdWUuVFlQRV9ESU1FTlNJT04pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlZFZhbHVlLmNvbXBsZXhUb0RpbWVuc2lvblBpeGVsU2l6ZShtVG1wVmFsdWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RGlzcGxheU1ldHJpY3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBpZCB3YXMgbm90IGZvdW5kIG9yIG5vdCByZXNvbHZlZC4gVGhyb3cgYSBOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICAgICAgdGhyb3dFeGNlcHRpb24oaWQpOwotCi0gICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWQgc2luY2UgdGhlIG1ldGhvZCBhYm92ZSBhbHdheXMgdGhyb3dzCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0SW50ZWdlcihpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhaXI8U3RyaW5nLCBSZXNvdXJjZVZhbHVlPiB2YWx1ZSA9IGdldFJlc291cmNlVmFsdWUoaWQsIG1QbGF0Zm9ybVJlc291cmNlRmxhZyk7Ci0KLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgcmVzVmFsdWUgPSB2YWx1ZS5nZXRTZWNvbmQoKTsKLQotICAgICAgICAgICAgYXNzZXJ0IHJlc1ZhbHVlICE9IG51bGw7Ci0gICAgICAgICAgICBpZiAocmVzVmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFN0cmluZyB2ID0gcmVzVmFsdWUuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAodiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByYWRpeCA9IDEwOwotICAgICAgICAgICAgICAgICAgICBpZiAodi5zdGFydHNXaXRoKCIweCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ID0gdi5zdWJzdHJpbmcoMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWRpeCA9IDE2OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludCh2LCByYWRpeCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gZXhjZXB0aW9uIGJlbG93Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBpZCB3YXMgbm90IGZvdW5kIG9yIG5vdCByZXNvbHZlZC4gVGhyb3cgYSBOb3RGb3VuZEV4Y2VwdGlvbi4KLSAgICAgICAgdGhyb3dFeGNlcHRpb24oaWQpOwotCi0gICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWQgc2luY2UgdGhlIG1ldGhvZCBhYm92ZSBhbHdheXMgdGhyb3dzCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGdldEJvb2xlYW4oaW50IGlkKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBQYWlyPFN0cmluZywgUmVzb3VyY2VWYWx1ZT4gdmFsdWUgPSBnZXRSZXNvdXJjZVZhbHVlKGlkLCBtUGxhdGZvcm1SZXNvdXJjZUZsYWcpOwotCi0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHJlc1ZhbHVlID0gdmFsdWUuZ2V0U2Vjb25kKCk7Ci0KLSAgICAgICAgICAgIGFzc2VydCByZXNWYWx1ZSAhPSBudWxsOwotICAgICAgICAgICAgaWYgKHJlc1ZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdiA9IHJlc1ZhbHVlLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbi5wYXJzZUJvb2xlYW4odik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWQgd2FzIG5vdCBmb3VuZCBvciBub3QgcmVzb2x2ZWQuIFRocm93IGEgTm90Rm91bmRFeGNlcHRpb24uCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGlkKTsKLQotICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkIHNpbmNlIHRoZSBtZXRob2QgYWJvdmUgYWx3YXlzIHRocm93cwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRSZXNvdXJjZUVudHJ5TmFtZShpbnQgcmVzaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmVzb3VyY2VOYW1lKGludCByZXNpZCkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRSZXNvdXJjZVR5cGVOYW1lKGludCByZXNpZCkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoaW50IGlkLCBPYmplY3QuLi4gZm9ybWF0QXJncykgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgU3RyaW5nIHMgPSBnZXRTdHJpbmcoaWQpOwotICAgICAgICBpZiAocyAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdChzLCBmb3JtYXRBcmdzKTsKLQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWQgd2FzIG5vdCBmb3VuZCBvciBub3QgcmVzb2x2ZWQuIFRocm93IGEgTm90Rm91bmRFeGNlcHRpb24uCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGlkKTsKLQotICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkIHNpbmNlIHRoZSBtZXRob2QgYWJvdmUgYWx3YXlzIHRocm93cwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN0cmluZyhpbnQgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhaXI8U3RyaW5nLCBSZXNvdXJjZVZhbHVlPiB2YWx1ZSA9IGdldFJlc291cmNlVmFsdWUoaWQsIG1QbGF0Zm9ybVJlc291cmNlRmxhZyk7Ci0KLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUuZ2V0U2Vjb25kKCkuZ2V0VmFsdWUoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUuZ2V0U2Vjb25kKCkuZ2V0VmFsdWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlkIHdhcyBub3QgZm91bmQgb3Igbm90IHJlc29sdmVkLiBUaHJvdyBhIE5vdEZvdW5kRXhjZXB0aW9uLgotICAgICAgICB0aHJvd0V4Y2VwdGlvbihpZCk7Ci0KLSAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZCBzaW5jZSB0aGUgbWV0aG9kIGFib3ZlIGFsd2F5cyB0aHJvd3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0VmFsdWUoaW50IGlkLCBUeXBlZFZhbHVlIG91dFZhbHVlLCBib29sZWFuIHJlc29sdmVSZWZzKQotICAgICAgICAgICAgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgUGFpcjxTdHJpbmcsIFJlc291cmNlVmFsdWU+IHZhbHVlID0gZ2V0UmVzb3VyY2VWYWx1ZShpZCwgbVBsYXRmb3JtUmVzb3VyY2VGbGFnKTsKLQotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgU3RyaW5nIHYgPSB2YWx1ZS5nZXRTZWNvbmQoKS5nZXRWYWx1ZSgpOwotCi0gICAgICAgICAgICBpZiAodiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFJlc291cmNlSGVscGVyLnBhcnNlRmxvYXRBdHRyaWJ1dGUodmFsdWUuZ2V0Rmlyc3QoKSwgdiwgb3V0VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKnJlcXVpcmVVbml0Ki8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBlbHNlIGl0J3MgYSBzdHJpbmcKLSAgICAgICAgICAgICAgICBvdXRWYWx1ZS50eXBlID0gVHlwZWRWYWx1ZS5UWVBFX1NUUklORzsKLSAgICAgICAgICAgICAgICBvdXRWYWx1ZS5zdHJpbmcgPSB2OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlkIHdhcyBub3QgZm91bmQgb3Igbm90IHJlc29sdmVkLiBUaHJvdyBhIE5vdEZvdW5kRXhjZXB0aW9uLgotICAgICAgICB0aHJvd0V4Y2VwdGlvbihpZCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0VmFsdWUoU3RyaW5nIG5hbWUsIFR5cGVkVmFsdWUgb3V0VmFsdWUsIGJvb2xlYW4gcmVzb2x2ZVJlZnMpCi0gICAgICAgICAgICB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgWG1sUmVzb3VyY2VQYXJzZXIgZ2V0WG1sKGludCBpZCkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgUGFpcjxTdHJpbmcsIFJlc291cmNlVmFsdWU+IHZhbHVlID0gZ2V0UmVzb3VyY2VWYWx1ZShpZCwgbVBsYXRmb3JtUmVzb3VyY2VGbGFnKTsKLQotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgU3RyaW5nIHYgPSB2YWx1ZS5nZXRTZWNvbmQoKS5nZXRWYWx1ZSgpOwotCi0gICAgICAgICAgICBpZiAodiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhpcyBpcyBhIGZpbGUKLSAgICAgICAgICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZSh2KTsKLSAgICAgICAgICAgICAgICBpZiAoZi5pc0ZpbGUoKSkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXIgPSBQYXJzZXJGYWN0b3J5LmNyZWF0ZShmKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCcmlkZ2VYbWxCbG9ja1BhcnNlcihwYXJzZXIsIG1Db250ZXh0LCBtUGxhdGZvcm1SZXNvdXJjZUZsYWdbMF0pOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vdEZvdW5kRXhjZXB0aW9uIG5ld0UgPSBuZXcgTm90Rm91bmRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0UuaW5pdENhdXNlKGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3RTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vdEZvdW5kRXhjZXB0aW9uIG5ld0UgPSBuZXcgTm90Rm91bmRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0UuaW5pdENhdXNlKGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3RTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlkIHdhcyBub3QgZm91bmQgb3Igbm90IHJlc29sdmVkLiBUaHJvdyBhIE5vdEZvdW5kRXhjZXB0aW9uLgotICAgICAgICB0aHJvd0V4Y2VwdGlvbihpZCk7Ci0KLSAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZCBzaW5jZSB0aGUgbWV0aG9kIGFib3ZlIGFsd2F5cyB0aHJvd3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFhtbFJlc291cmNlUGFyc2VyIGxvYWRYbWxSZXNvdXJjZVBhcnNlcihTdHJpbmcgZmlsZSwgaW50IGlkLAotICAgICAgICAgICAgaW50IGFzc2V0Q29va2llLCBTdHJpbmcgdHlwZSkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gZXZlbiB0aG91Z2ggd2Uga25vdyB0aGUgWE1MIGZpbGUgdG8gbG9hZCBkaXJlY3RseSwgd2Ugc3RpbGwgbmVlZCB0byByZXNvbHZlIHRoZQotICAgICAgICAvLyBpZCBzbyB0aGF0IHdlIGNhbiBrbm93IGlmIGl0J3MgYSBwbGF0Zm9ybSBvciBwcm9qZWN0IHJlc291cmNlLgotICAgICAgICAvLyAobVBsYXRmb3JtUmVzb3VjZUZsYWcgd2lsbCBnZXQgdGhlIHJlc3VsdCBhbmQgd2lsbCBiZSB1c2VkIGxhdGVyKS4KLSAgICAgICAgZ2V0UmVzb3VyY2VWYWx1ZShpZCwgbVBsYXRmb3JtUmVzb3VyY2VGbGFnKTsKLQotICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZShmaWxlKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFhtbFB1bGxQYXJzZXIgcGFyc2VyID0gUGFyc2VyRmFjdG9yeS5jcmVhdGUoZik7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgQnJpZGdlWG1sQmxvY2tQYXJzZXIocGFyc2VyLCBtQ29udGV4dCwgbVBsYXRmb3JtUmVzb3VyY2VGbGFnWzBdKTsKLSAgICAgICAgfSBjYXRjaCAoWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBOb3RGb3VuZEV4Y2VwdGlvbiBuZXdFID0gbmV3IE5vdEZvdW5kRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICBuZXdFLmluaXRDYXVzZShlKTsKLSAgICAgICAgICAgIHRocm93IG5ld0U7Ci0gICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBOb3RGb3VuZEV4Y2VwdGlvbiBuZXdFID0gbmV3IE5vdEZvdW5kRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICBuZXdFLmluaXRDYXVzZShlKTsKLSAgICAgICAgICAgIHRocm93IG5ld0U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJbnB1dFN0cmVhbSBvcGVuUmF3UmVzb3VyY2UoaW50IGlkKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBQYWlyPFN0cmluZywgUmVzb3VyY2VWYWx1ZT4gdmFsdWUgPSBnZXRSZXNvdXJjZVZhbHVlKGlkLCBtUGxhdGZvcm1SZXNvdXJjZUZsYWcpOwotCi0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcGF0aCA9IHZhbHVlLmdldFNlY29uZCgpLmdldFZhbHVlKCk7Ci0KLSAgICAgICAgICAgIGlmIChwYXRoICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBjaGVjayB0aGlzIGlzIGEgZmlsZQotICAgICAgICAgICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKHBhdGgpOwotICAgICAgICAgICAgICAgIGlmIChmLmlzRmlsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIGEgbmluZS1wYXRjaCByZXR1cm4gYSBjdXN0b20gaW5wdXQgc3RyZWFtIHNvIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyIG1ldGhvZHMgKG1haW5seSBiaXRtYXAgZmFjdG9yeSkgY2FuIGRldGVjdCBpdCdzIGEgOS1wYXRjaAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGFjdHVhbGx5IGxvYWQgaXQgYXMgYSA5LXBhdGNoIGluc3RlYWQgb2YgYSBub3JtYWwgYml0bWFwCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF0aC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKE5pbmVQYXRjaC5FWFRFTlNJT05fOVBBVENIKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmluZVBhdGNoSW5wdXRTdHJlYW0oZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVJbnB1dFN0cmVhbShmKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vdEZvdW5kRXhjZXB0aW9uIG5ld0UgPSBuZXcgTm90Rm91bmRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0UuaW5pdENhdXNlKGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3RTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlkIHdhcyBub3QgZm91bmQgb3Igbm90IHJlc29sdmVkLiBUaHJvdyBhIE5vdEZvdW5kRXhjZXB0aW9uLgotICAgICAgICB0aHJvd0V4Y2VwdGlvbihpZCk7Ci0KLSAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZCBzaW5jZSB0aGUgbWV0aG9kIGFib3ZlIGFsd2F5cyB0aHJvd3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElucHV0U3RyZWFtIG9wZW5SYXdSZXNvdXJjZShpbnQgaWQsIFR5cGVkVmFsdWUgdmFsdWUpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIGdldFZhbHVlKGlkLCB2YWx1ZSwgdHJ1ZSk7Ci0KLSAgICAgICAgU3RyaW5nIHBhdGggPSB2YWx1ZS5zdHJpbmcudG9TdHJpbmcoKTsKLQotICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZShwYXRoKTsKLSAgICAgICAgaWYgKGYuaXNGaWxlKCkpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgLy8gaWYgaXQncyBhIG5pbmUtcGF0Y2ggcmV0dXJuIGEgY3VzdG9tIGlucHV0IHN0cmVhbSBzbyB0aGF0Ci0gICAgICAgICAgICAgICAgLy8gb3RoZXIgbWV0aG9kcyAobWFpbmx5IGJpdG1hcCBmYWN0b3J5KSBjYW4gZGV0ZWN0IGl0J3MgYSA5LXBhdGNoCi0gICAgICAgICAgICAgICAgLy8gYW5kIGFjdHVhbGx5IGxvYWQgaXQgYXMgYSA5LXBhdGNoIGluc3RlYWQgb2YgYSBub3JtYWwgYml0bWFwCi0gICAgICAgICAgICAgICAgaWYgKHBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChOaW5lUGF0Y2guRVhURU5TSU9OXzlQQVRDSCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOaW5lUGF0Y2hJbnB1dFN0cmVhbShmKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlSW5wdXRTdHJlYW0oZik7Ci0gICAgICAgICAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIE5vdEZvdW5kRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbi5pbml0Q2F1c2UoZSk7Ci0gICAgICAgICAgICAgICAgdGhyb3cgZXhjZXB0aW9uOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEFzc2V0RmlsZURlc2NyaXB0b3Igb3BlblJhd1Jlc291cmNlRmQoaW50IGlkKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBCdWlsZHMgYW5kIHRocm93cyBhIHtAbGluayBSZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb259IGJhc2VkIG9uIGEgcmVzb3VyY2UgaWQgYW5kIGEgcmVzb3VyY2UgdHlwZS4KLSAgICAgKiBAcGFyYW0gaWQgdGhlIGlkIG9mIHRoZSByZXNvdXJjZQotICAgICAqIEB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgdGhyb3dFeGNlcHRpb24oaW50IGlkKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICAvLyBmaXJzdCBnZXQgdGhlIFN0cmluZyByZWxhdGVkIHRvIHRoaXMgaWQgaW4gdGhlIGZyYW1ld29yawotICAgICAgICBQYWlyPFJlc291cmNlVHlwZSwgU3RyaW5nPiByZXNvdXJjZUluZm8gPSBCcmlkZ2UucmVzb2x2ZVJlc291cmNlSWQoaWQpOwotCi0gICAgICAgIC8vIGlmIHRoZSBuYW1lIGlzIHVua25vd24gaW4gdGhlIGZyYW1ld29yaywgZ2V0IGl0IGZyb20gdGhlIGN1c3RvbSB2aWV3IGxvYWRlci4KLSAgICAgICAgaWYgKHJlc291cmNlSW5mbyA9PSBudWxsICYmIG1Qcm9qZWN0Q2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgcmVzb3VyY2VJbmZvID0gbVByb2plY3RDYWxsYmFjay5yZXNvbHZlUmVzb3VyY2VJZChpZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IG51bGw7Ci0gICAgICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgbWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZmluZCAlMSRzIHJlc291cmNlIG1hdGNoaW5nIHZhbHVlIDB4JTIkWCAocmVzb2x2ZWQgbmFtZTogJTMkcykgaW4gY3VycmVudCBjb25maWd1cmF0aW9uLiIsCi0gICAgICAgICAgICAgICAgICAgIHJlc291cmNlSW5mby5nZXRGaXJzdCgpLCBpZCwgcmVzb3VyY2VJbmZvLmdldFNlY29uZCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1lc3NhZ2UgPSBTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IHJlc29sdmUgcmVzb3VyY2UgdmFsdWU6IDB4JTEkWC4iLCBpZCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24obWVzc2FnZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9jb250ZW50L3Jlcy9CcmlkZ2VUeXBlZEFycmF5LmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL0JyaWRnZVR5cGVkQXJyYXkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ2ZDEzOS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL0JyaWRnZVR5cGVkQXJyYXkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmNvbnRlbnQucmVzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkF0dHJSZXNvdXJjZVZhbHVlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlbmRlclJlc291cmNlczsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzb3VyY2VWYWx1ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuU3R5bGVSZXNvdXJjZVZhbHVlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuWG1sVXRpbHM7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2VDb25zdGFudHM7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUNvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZVhtbEJsb2NrUGFyc2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5QYXJzZXJGYWN0b3J5OwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5SZXNvdXJjZUhlbHBlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotCi1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyX0RlbGVnYXRlOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXAuTGF5b3V0UGFyYW1zOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBDdXN0b20gaW1wbGVtZW50YXRpb24gb2YgVHlwZWRBcnJheSB0byBoYW5kbGUgbm9uIGNvbXBpbGVkIHJlc291cmNlcy4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEJyaWRnZVR5cGVkQXJyYXkgZXh0ZW5kcyBUeXBlZEFycmF5IHsKLQotICAgIHByaXZhdGUgZmluYWwgQnJpZGdlUmVzb3VyY2VzIG1CcmlkZ2VSZXNvdXJjZXM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBCcmlkZ2VDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtUGxhdGZvcm1GaWxlOwotCi0gICAgcHJpdmF0ZSBSZXNvdXJjZVZhbHVlW10gbVJlc291cmNlRGF0YTsKLSAgICBwcml2YXRlIFN0cmluZ1tdIG1OYW1lczsKLSAgICBwcml2YXRlIGJvb2xlYW5bXSBtSXNGcmFtZXdvcms7Ci0KLSAgICBwdWJsaWMgQnJpZGdlVHlwZWRBcnJheShCcmlkZ2VSZXNvdXJjZXMgcmVzb3VyY2VzLCBCcmlkZ2VDb250ZXh0IGNvbnRleHQsIGludCBsZW4sCi0gICAgICAgICAgICBib29sZWFuIHBsYXRmb3JtRmlsZSkgewotICAgICAgICBzdXBlcihudWxsLCBudWxsLCBudWxsLCAwKTsKLSAgICAgICAgbUJyaWRnZVJlc291cmNlcyA9IHJlc291cmNlczsKLSAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtUGxhdGZvcm1GaWxlID0gcGxhdGZvcm1GaWxlOwotICAgICAgICBtUmVzb3VyY2VEYXRhID0gbmV3IFJlc291cmNlVmFsdWVbbGVuXTsKLSAgICAgICAgbU5hbWVzID0gbmV3IFN0cmluZ1tsZW5dOwotICAgICAgICBtSXNGcmFtZXdvcmsgPSBuZXcgYm9vbGVhbltsZW5dOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEEgYnJpZGdlLXNwZWNpZmljIG1ldGhvZCB0aGF0IHNldHMgYSB2YWx1ZSBpbiB0aGUgdHlwZSBhcnJheQotICAgICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIHZhbHVlIGluIHRoZSBUeXBlZEFycmF5Ci0gICAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQotICAgICAqIEBwYXJhbSBpc0ZyYW1ld29yayB3aGV0aGVyIHRoZSBhdHRyaWJ1dGUgaXMgaW4gdGhlIGFuZHJvaWQgbmFtZXNwYWNlLgotICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGJyaWRnZVNldFZhbHVlKGludCBpbmRleCwgU3RyaW5nIG5hbWUsIGJvb2xlYW4gaXNGcmFtZXdvcmssIFJlc291cmNlVmFsdWUgdmFsdWUpIHsKLSAgICAgICAgbVJlc291cmNlRGF0YVtpbmRleF0gPSB2YWx1ZTsKLSAgICAgICAgbU5hbWVzW2luZGV4XSA9IG5hbWU7Ci0gICAgICAgIG1Jc0ZyYW1ld29ya1tpbmRleF0gPSBpc0ZyYW1ld29yazsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZWFscyB0aGUgYXJyYXkgYWZ0ZXIgYWxsIGNhbGxzIHRvIHtAbGluayAjYnJpZGdlU2V0VmFsdWUoaW50LCBTdHJpbmcsIFJlc291cmNlVmFsdWUpfSBoYXZlCi0gICAgICogYmVlbiBkb25lLgotICAgICAqIDxwLz5UaGlzIGFsbG93cyB0byBjb21wdXRlIHRoZSBsaXN0IG9mIG5vbiBkZWZhdWx0IHZhbHVlcywgcGVybWl0dGluZwotICAgICAqIHtAbGluayAjZ2V0SW5kZXhDb3VudCgpfSB0byByZXR1cm4gdGhlIHByb3BlciB2YWx1ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZWFsQXJyYXkoKSB7Ci0gICAgICAgIC8vIGZpbGxzIFR5cGVkQXJyYXkubUluZGljZXMgd2hpY2ggaXMgdXNlZCB0byBpbXBsZW1lbnQgZ2V0SW5kZXhDb3VudC9nZXRJbmRleEF0Ci0gICAgICAgIC8vIGZpcnN0IGNvdW50IHRoZSBhcnJheSBzaXplCi0gICAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICAgIGZvciAoUmVzb3VyY2VWYWx1ZSBkYXRhIDogbVJlc291cmNlRGF0YSkgewotICAgICAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBhbGxvY2F0ZSB0aGUgdGFibGUgd2l0aCBhbiBleHRyYSB0byBzdG9yZSB0aGUgc2l6ZQotICAgICAgICBtSW5kaWNlcyA9IG5ldyBpbnRbY291bnQrMV07Ci0gICAgICAgIG1JbmRpY2VzWzBdID0gY291bnQ7Ci0KLSAgICAgICAgLy8gZmlsbCB0aGUgYXJyYXkgd2l0aCB0aGUgaW5kaWNlcy4KLSAgICAgICAgaW50IGluZGV4ID0gMTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbVJlc291cmNlRGF0YS5sZW5ndGggOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChtUmVzb3VyY2VEYXRhW2ldICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtSW5kaWNlc1tpbmRleCsrXSA9IGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiB2YWx1ZXMgaW4gdGhpcyBhcnJheS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGxlbmd0aCgpIHsKLSAgICAgICAgcmV0dXJuIG1SZXNvdXJjZURhdGEubGVuZ3RoOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiB0aGUgUmVzb3VyY2VzIG9iamVjdCB0aGlzIGFycmF5IHdhcyBsb2FkZWQgZnJvbS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzb3VyY2VzIGdldFJlc291cmNlcygpIHsKLSAgICAgICAgcmV0dXJuIG1CcmlkZ2VSZXNvdXJjZXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIHN0eWxlZCBzdHJpbmcgdmFsdWUgZm9yIHRoZSBhdHRyaWJ1dGUgYXQgPHZhcj5pbmRleDwvdmFyPi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIENoYXJTZXF1ZW5jZSBob2xkaW5nIHN0cmluZyBkYXRhLiAgTWF5IGJlIHN0eWxlZC4gIFJldHVybnMKLSAgICAgKiAgICAgICAgIG51bGwgaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIGdldFRleHQoaW50IGluZGV4KSB7Ci0gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbVJlc291cmNlRGF0YS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1SZXNvdXJjZURhdGFbaW5kZXhdICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgc3R5bGVkIHN0cmluZ3MhCi0gICAgICAgICAgICByZXR1cm4gbVJlc291cmNlRGF0YVtpbmRleF0uZ2V0VmFsdWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSBzdHJpbmcgdmFsdWUgZm9yIHRoZSBhdHRyaWJ1dGUgYXQgPHZhcj5pbmRleDwvdmFyPi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFN0cmluZyBob2xkaW5nIHN0cmluZyBkYXRhLiAgQW55IHN0eWxpbmcgaW5mb3JtYXRpb24gaXMKLSAgICAgKiByZW1vdmVkLiAgUmV0dXJucyBudWxsIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGRlZmluZWQuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoaW50IGluZGV4KSB7Ci0gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbVJlc291cmNlRGF0YS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1SZXNvdXJjZURhdGFbaW5kZXhdICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtUmVzb3VyY2VEYXRhW2luZGV4XS5nZXRWYWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIGJvb2xlYW4gdmFsdWUgZm9yIHRoZSBhdHRyaWJ1dGUgYXQgPHZhcj5pbmRleDwvdmFyPi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICogQHBhcmFtIGRlZlZhbHVlIFZhbHVlIHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkLgotICAgICAqCi0gICAgICogQHJldHVybiBBdHRyaWJ1dGUgYm9vbGVhbiB2YWx1ZSwgb3IgZGVmVmFsdWUgaWYgbm90IGRlZmluZWQuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbihpbnQgaW5kZXgsIGJvb2xlYW4gZGVmVmFsdWUpIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtUmVzb3VyY2VEYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1SZXNvdXJjZURhdGFbaW5kZXhdID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBzID0gbVJlc291cmNlRGF0YVtpbmRleF0uZ2V0VmFsdWUoKTsKLSAgICAgICAgaWYgKHMgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIFhtbFV0aWxzLmNvbnZlcnRWYWx1ZVRvQm9vbGVhbihzLCBkZWZWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIGludGVnZXIgdmFsdWUgZm9yIHRoZSBhdHRyaWJ1dGUgYXQgPHZhcj5pbmRleDwvdmFyPi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICogQHBhcmFtIGRlZlZhbHVlIFZhbHVlIHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkLgotICAgICAqCi0gICAgICogQHJldHVybiBBdHRyaWJ1dGUgaW50IHZhbHVlLCBvciBkZWZWYWx1ZSBpZiBub3QgZGVmaW5lZC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEludChpbnQgaW5kZXgsIGludCBkZWZWYWx1ZSkgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1SZXNvdXJjZURhdGEubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVJlc291cmNlRGF0YVtpbmRleF0gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHMgPSBtUmVzb3VyY2VEYXRhW2luZGV4XS5nZXRWYWx1ZSgpOwotCi0gICAgICAgIGlmIChSZW5kZXJSZXNvdXJjZXMuUkVGRVJFTkNFX05VTEwuZXF1YWxzKHMpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocyA9PSBudWxsIHx8IHMubGVuZ3RoKCkgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBYbWxVdGlscy5jb252ZXJ0VmFsdWVUb0ludChzLCBkZWZWYWx1ZSk7Ci0gICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgIH0KLQotICAgICAgICAvLyBGaWVsZCBpcyBub3QgbnVsbCBhbmQgaXMgbm90IGFuIGludGVnZXIuCi0gICAgICAgIC8vIENoZWNrIGZvciBwb3NzaWJsZSBjb25zdGFudHMgYW5kIHRyeSB0byBmaW5kIHRoZW0uCi0gICAgICAgIC8vIEdldCB0aGUgbWFwIG9mIGF0dHJpYnV0ZS1jb25zdGFudCAtPiBJbnRlZ2VyVmFsdWUKLSAgICAgICAgTWFwPFN0cmluZywgSW50ZWdlcj4gbWFwID0gbnVsbDsKLSAgICAgICAgaWYgKG1Jc0ZyYW1ld29ya1tpbmRleF0pIHsKLSAgICAgICAgICAgIG1hcCA9IEJyaWRnZS5nZXRFbnVtVmFsdWVzKG1OYW1lc1tpbmRleF0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gZ2V0IHRoZSBzdHlsZWFibGUgbWF0Y2hpbmcgdGhlIHJlc29sdmVkIG5hbWUKLSAgICAgICAgICAgIFJlbmRlclJlc291cmNlcyByZXMgPSBtQ29udGV4dC5nZXRSZW5kZXJSZXNvdXJjZXMoKTsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgYXR0ciA9IHJlcy5nZXRQcm9qZWN0UmVzb3VyY2UoUmVzb3VyY2VUeXBlLkFUVFIsIG1OYW1lc1tpbmRleF0pOwotICAgICAgICAgICAgaWYgKGF0dHIgaW5zdGFuY2VvZiBBdHRyUmVzb3VyY2VWYWx1ZSkgewotICAgICAgICAgICAgICAgIG1hcCA9ICgoQXR0clJlc291cmNlVmFsdWUpIGF0dHIpLmdldEF0dHJpYnV0ZVZhbHVlcygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBhY2N1bXVsYXRvciB0byBzdG9yZSB0aGUgdmFsdWUgb2YgdGhlIDErIGNvbnN0YW50cy4KLSAgICAgICAgICAgIGludCByZXN1bHQgPSAwOwotCi0gICAgICAgICAgICAvLyBzcGxpdCB0aGUgdmFsdWUgaW4gY2FzZSB0aGlzIGlzIGEgbWl4IG9mIHNldmVyYWwgZmxhZ3MuCi0gICAgICAgICAgICBTdHJpbmdbXSBrZXl3b3JkcyA9IHMuc3BsaXQoIlxcfCIpOwotICAgICAgICAgICAgZm9yIChTdHJpbmcga2V5d29yZCA6IGtleXdvcmRzKSB7Ci0gICAgICAgICAgICAgICAgSW50ZWdlciBpID0gbWFwLmdldChrZXl3b3JkLnRyaW0oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gaS5pbnRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS53YXJuaW5nKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX0ZPUk1BVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIlc1wiIGluIGF0dHJpYnV0ZSBcIiUyJHNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQsIG1OYW1lc1tpbmRleF0pLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSBmbG9hdCB2YWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+LgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIGF0dHJpYnV0ZSB0byByZXRyaWV2ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gQXR0cmlidXRlIGZsb2F0IHZhbHVlLCBvciBkZWZWYWx1ZSBpZiBub3QgZGVmaW5lZC4uCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldEZsb2F0KGludCBpbmRleCwgZmxvYXQgZGVmVmFsdWUpIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtUmVzb3VyY2VEYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1SZXNvdXJjZURhdGFbaW5kZXhdID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBzID0gbVJlc291cmNlRGF0YVtpbmRleF0uZ2V0VmFsdWUoKTsKLQotICAgICAgICBpZiAocyAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJldHVybiBGbG9hdC5wYXJzZUZsb2F0KHMpOwotICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkud2FybmluZyhMYXlvdXRMb2cuVEFHX1JFU09VUkNFU19GT1JNQVQsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiVzXCIgaW4gYXR0cmlidXRlIFwiJTIkc1wiIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gZmxvYXQuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLCBtTmFtZXNbaW5kZXhdKSwgbnVsbCAvKmRhdGEqLyk7Ci0KLSAgICAgICAgICAgICAgICAvLyB3ZSdsbCByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUgYmVsb3cuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSBjb2xvciB2YWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+LiAgSWYKLSAgICAgKiB0aGUgYXR0cmlidXRlIHJlZmVyZW5jZXMgYSBjb2xvciByZXNvdXJjZSBob2xkaW5nIGEgY29tcGxleAotICAgICAqIHtAbGluayBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0fSwgdGhlbiB0aGUgZGVmYXVsdCBjb2xvciBmcm9tCi0gICAgICogdGhlIHNldCBpcyByZXR1cm5lZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICogQHBhcmFtIGRlZlZhbHVlIFZhbHVlIHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkIG9yCi0gICAgICogICAgICAgICAgICAgICAgIG5vdCBhIHJlc291cmNlLgotICAgICAqCi0gICAgICogQHJldHVybiBBdHRyaWJ1dGUgY29sb3IgdmFsdWUsIG9yIGRlZlZhbHVlIGlmIG5vdCBkZWZpbmVkLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0Q29sb3IoaW50IGluZGV4LCBpbnQgZGVmVmFsdWUpIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtUmVzb3VyY2VEYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1SZXNvdXJjZURhdGFbaW5kZXhdID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIENvbG9yU3RhdGVMaXN0IGNvbG9yU3RhdGVMaXN0ID0gUmVzb3VyY2VIZWxwZXIuZ2V0Q29sb3JTdGF0ZUxpc3QoCi0gICAgICAgICAgICAgICAgbVJlc291cmNlRGF0YVtpbmRleF0sIG1Db250ZXh0KTsKLSAgICAgICAgaWYgKGNvbG9yU3RhdGVMaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBjb2xvclN0YXRlTGlzdC5nZXREZWZhdWx0Q29sb3IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSB0aGUgQ29sb3JTdGF0ZUxpc3QgZm9yIHRoZSBhdHRyaWJ1dGUgYXQgPHZhcj5pbmRleDwvdmFyPi4KLSAgICAgKiBUaGUgdmFsdWUgbWF5IGJlIGVpdGhlciBhIHNpbmdsZSBzb2xpZCBjb2xvciBvciBhIHJlZmVyZW5jZSB0bwotICAgICAqIGEgY29sb3Igb3IgY29tcGxleCB7QGxpbmsgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdH0gZGVzY3JpcHRpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgYXR0cmlidXRlIHRvIHJldHJpZXZlLgotICAgICAqCi0gICAgICogQHJldHVybiBDb2xvclN0YXRlTGlzdCBmb3IgdGhlIGF0dHJpYnV0ZSwgb3IgbnVsbCBpZiBub3QgZGVmaW5lZC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29sb3JTdGF0ZUxpc3QgZ2V0Q29sb3JTdGF0ZUxpc3QoaW50IGluZGV4KSB7Ci0gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbVJlc291cmNlRGF0YS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1SZXNvdXJjZURhdGFbaW5kZXhdID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVzb3VyY2VWYWx1ZSByZXNWYWx1ZSA9IG1SZXNvdXJjZURhdGFbaW5kZXhdOwotICAgICAgICBTdHJpbmcgdmFsdWUgPSByZXNWYWx1ZS5nZXRWYWx1ZSgpOwotCi0gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChSZW5kZXJSZXNvdXJjZXMuUkVGRVJFTkNFX05VTEwuZXF1YWxzKHZhbHVlKSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBsZXQgdGhlIGZyYW1ld29yayBpbmZsYXRlIHRoZSBDb2xvclN0YXRlTGlzdCBmcm9tIHRoZSBYTUwgZmlsZS4KLSAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUodmFsdWUpOwotICAgICAgICBpZiAoZi5pc0ZpbGUoKSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBYbWxQdWxsUGFyc2VyIHBhcnNlciA9IFBhcnNlckZhY3RvcnkuY3JlYXRlKGYpOwotCi0gICAgICAgICAgICAgICAgQnJpZGdlWG1sQmxvY2tQYXJzZXIgYmxvY2tQYXJzZXIgPSBuZXcgQnJpZGdlWG1sQmxvY2tQYXJzZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIsIG1Db250ZXh0LCByZXNWYWx1ZS5pc0ZyYW1ld29yaygpKTsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3JTdGF0ZUxpc3QuY3JlYXRlRnJvbVhtbChtQ29udGV4dC5nZXRSZXNvdXJjZXMoKSwgYmxvY2tQYXJzZXIpOwotICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrUGFyc2VyLmVuc3VyZVBvcHBlZCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY29uZmlndXJlIHBhcnNlciBmb3IgIiArIHZhbHVlLCBlLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhbiBlcnJvciBhbmQgbm90IHdhcm5pbmcgc2luY2UgdGhlIGZpbGUgZXhpc3RlbmNlIGlzIGNoZWNrZWQgYmVmb3JlCi0gICAgICAgICAgICAgICAgLy8gYXR0ZW1wdGluZyB0byBwYXJzZSBpdC4KLSAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfUkVBRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcGFyc2UgZmlsZSAiICsgdmFsdWUsIGUsIG51bGwgLypkYXRhKi8pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgaW50IGNvbG9yID0gUmVzb3VyY2VIZWxwZXIuZ2V0Q29sb3IodmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIENvbG9yU3RhdGVMaXN0LnZhbHVlT2YoY29sb3IpOwotICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX0ZPUk1BVCwgZS5nZXRNZXNzYWdlKCksIGUsIG51bGwgLypkYXRhKi8pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIGludGVnZXIgdmFsdWUgZm9yIHRoZSBhdHRyaWJ1dGUgYXQgPHZhcj5pbmRleDwvdmFyPi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICogQHBhcmFtIGRlZlZhbHVlIFZhbHVlIHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkIG9yCi0gICAgICogICAgICAgICAgICAgICAgIG5vdCBhIHJlc291cmNlLgotICAgICAqCi0gICAgICogQHJldHVybiBBdHRyaWJ1dGUgaW50ZWdlciB2YWx1ZSwgb3IgZGVmVmFsdWUgaWYgbm90IGRlZmluZWQuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRJbnRlZ2VyKGludCBpbmRleCwgaW50IGRlZlZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBnZXRJbnQoaW5kZXgsIGRlZlZhbHVlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSBhIGRpbWVuc2lvbmFsIHVuaXQgYXR0cmlidXRlIGF0IDx2YXI+aW5kZXg8L3Zhcj4uICBVbml0Ci0gICAgICogY29udmVyc2lvbnMgYXJlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHtAbGluayBEaXNwbGF5TWV0cmljc30KLSAgICAgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlcyB0aGlzIHtAbGluayBUeXBlZEFycmF5fSBvYmplY3QKLSAgICAgKiBjYW1lIGZyb20uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgYXR0cmlidXRlIHRvIHJldHJpZXZlLgotICAgICAqIEBwYXJhbSBkZWZWYWx1ZSBWYWx1ZSB0byByZXR1cm4gaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZCBvcgotICAgICAqICAgICAgICAgICAgICAgICBub3QgYSByZXNvdXJjZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gQXR0cmlidXRlIGRpbWVuc2lvbiB2YWx1ZSBtdWx0aXBsaWVkIGJ5IHRoZSBhcHByb3ByaWF0ZQotICAgICAqIG1ldHJpYywgb3IgZGVmVmFsdWUgaWYgbm90IGRlZmluZWQuCi0gICAgICoKLSAgICAgKiBAc2VlICNnZXREaW1lbnNpb25QaXhlbE9mZnNldAotICAgICAqIEBzZWUgI2dldERpbWVuc2lvblBpeGVsU2l6ZQotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmbG9hdCBnZXREaW1lbnNpb24oaW50IGluZGV4LCBmbG9hdCBkZWZWYWx1ZSkgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1SZXNvdXJjZURhdGEubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVJlc291cmNlRGF0YVtpbmRleF0gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHMgPSBtUmVzb3VyY2VEYXRhW2luZGV4XS5nZXRWYWx1ZSgpOwotCi0gICAgICAgIGlmIChzID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChzLmVxdWFscyhCcmlkZ2VDb25zdGFudHMuTUFUQ0hfUEFSRU5UKSB8fAotICAgICAgICAgICAgICAgIHMuZXF1YWxzKEJyaWRnZUNvbnN0YW50cy5GSUxMX1BBUkVOVCkpIHsKLSAgICAgICAgICAgIHJldHVybiBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UOwotICAgICAgICB9IGVsc2UgaWYgKHMuZXF1YWxzKEJyaWRnZUNvbnN0YW50cy5XUkFQX0NPTlRFTlQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVDsKLSAgICAgICAgfSBlbHNlIGlmIChSZW5kZXJSZXNvdXJjZXMuUkVGRVJFTkNFX05VTEwuZXF1YWxzKHMpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoUmVzb3VyY2VIZWxwZXIucGFyc2VGbG9hdEF0dHJpYnV0ZShtTmFtZXNbaW5kZXhdLCBzLCBtVmFsdWUsIHRydWUgLypyZXF1aXJlVW5pdCovKSkgewotICAgICAgICAgICAgcmV0dXJuIG1WYWx1ZS5nZXREaW1lbnNpb24obUJyaWRnZVJlc291cmNlcy5nZXREaXNwbGF5TWV0cmljcygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGxvb2tzIGxpa2Ugd2Ugd2VyZSB1bmFibGUgdG8gcmVzb2x2ZSB0aGUgZGltZW5zaW9uIHZhbHVlCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS53YXJuaW5nKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX0ZPUk1BVCwKLSAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAiXCIlMSRzXCIgaW4gYXR0cmlidXRlIFwiJTIkc1wiIGlzIG5vdCBhIHZhbGlkIGZvcm1hdC4iLAotICAgICAgICAgICAgICAgICAgICBzLCBtTmFtZXNbaW5kZXhdKSwgbnVsbCAvKmRhdGEqLyk7Ci0KLSAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIGEgZGltZW5zaW9uYWwgdW5pdCBhdHRyaWJ1dGUgYXQgPHZhcj5pbmRleDwvdmFyPiBmb3IgdXNlCi0gICAgICogYXMgYW4gb2Zmc2V0IGluIHJhdyBwaXhlbHMuICBUaGlzIGlzIHRoZSBzYW1lIGFzCi0gICAgICoge0BsaW5rICNnZXREaW1lbnNpb259LCBleGNlcHQgdGhlIHJldHVybmVkIHZhbHVlIGlzIGNvbnZlcnRlZCB0bwotICAgICAqIGludGVnZXIgcGl4ZWxzIGZvciB5b3UuICBBbiBvZmZzZXQgY29udmVyc2lvbiBpbnZvbHZlcyBzaW1wbHkKLSAgICAgKiB0cnVuY2F0aW5nIHRoZSBiYXNlIHZhbHVlIHRvIGFuIGludGVnZXIuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgYXR0cmlidXRlIHRvIHJldHJpZXZlLgotICAgICAqIEBwYXJhbSBkZWZWYWx1ZSBWYWx1ZSB0byByZXR1cm4gaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZCBvcgotICAgICAqICAgICAgICAgICAgICAgICBub3QgYSByZXNvdXJjZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gQXR0cmlidXRlIGRpbWVuc2lvbiB2YWx1ZSBtdWx0aXBsaWVkIGJ5IHRoZSBhcHByb3ByaWF0ZQotICAgICAqIG1ldHJpYyBhbmQgdHJ1bmNhdGVkIHRvIGludGVnZXIgcGl4ZWxzLCBvciBkZWZWYWx1ZSBpZiBub3QgZGVmaW5lZC4KLSAgICAgKgotICAgICAqIEBzZWUgI2dldERpbWVuc2lvbgotICAgICAqIEBzZWUgI2dldERpbWVuc2lvblBpeGVsU2l6ZQotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0RGltZW5zaW9uUGl4ZWxPZmZzZXQoaW50IGluZGV4LCBpbnQgZGVmVmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIChpbnQpIGdldERpbWVuc2lvbihpbmRleCwgZGVmVmFsdWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIGEgZGltZW5zaW9uYWwgdW5pdCBhdHRyaWJ1dGUgYXQgPHZhcj5pbmRleDwvdmFyPiBmb3IgdXNlCi0gICAgICogYXMgYSBzaXplIGluIHJhdyBwaXhlbHMuICBUaGlzIGlzIHRoZSBzYW1lIGFzCi0gICAgICoge0BsaW5rICNnZXREaW1lbnNpb259LCBleGNlcHQgdGhlIHJldHVybmVkIHZhbHVlIGlzIGNvbnZlcnRlZCB0bwotICAgICAqIGludGVnZXIgcGl4ZWxzIGZvciB1c2UgYXMgYSBzaXplLiAgQSBzaXplIGNvbnZlcnNpb24gaW52b2x2ZXMKLSAgICAgKiByb3VuZGluZyB0aGUgYmFzZSB2YWx1ZSwgYW5kIGVuc3VyaW5nIHRoYXQgYSBub24temVybyBiYXNlIHZhbHVlCi0gICAgICogaXMgYXQgbGVhc3Qgb25lIHBpeGVsIGluIHNpemUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgYXR0cmlidXRlIHRvIHJldHJpZXZlLgotICAgICAqIEBwYXJhbSBkZWZWYWx1ZSBWYWx1ZSB0byByZXR1cm4gaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZCBvcgotICAgICAqICAgICAgICAgICAgICAgICBub3QgYSByZXNvdXJjZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gQXR0cmlidXRlIGRpbWVuc2lvbiB2YWx1ZSBtdWx0aXBsaWVkIGJ5IHRoZSBhcHByb3ByaWF0ZQotICAgICAqIG1ldHJpYyBhbmQgdHJ1bmNhdGVkIHRvIGludGVnZXIgcGl4ZWxzLCBvciBkZWZWYWx1ZSBpZiBub3QgZGVmaW5lZC4KLSAgICAgKgotICAgICAqIEBzZWUgI2dldERpbWVuc2lvbgotICAgICAqIEBzZWUgI2dldERpbWVuc2lvblBpeGVsT2Zmc2V0Ci0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXREaW1lbnNpb25QaXhlbFNpemUoaW50IGluZGV4LCBpbnQgZGVmVmFsdWUpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBnZXREaW1lbnNpb24oaW5kZXgpOwotICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGlmIChtUmVzb3VyY2VEYXRhW2luZGV4XSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHMgPSBtUmVzb3VyY2VEYXRhW2luZGV4XS5nZXRWYWx1ZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBsb29rcyBsaWtlIHdlIHdlcmUgdW5hYmxlIHRvIHJlc29sdmUgdGhlIGRpbWVuc2lvbiB2YWx1ZQotICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkud2FybmluZyhMYXlvdXRMb2cuVEFHX1JFU09VUkNFU19GT1JNQVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiJTEkc1wiIGluIGF0dHJpYnV0ZSBcIiUyJHNcIiBpcyBub3QgYSB2YWxpZCBmb3JtYXQuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcywgbU5hbWVzW2luZGV4XSksIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3BlY2lhbCB2ZXJzaW9uIG9mIHtAbGluayAjZ2V0RGltZW5zaW9uUGl4ZWxTaXplfSBmb3IgcmV0cmlldmluZwotICAgICAqIHtAbGluayBhbmRyb2lkLnZpZXcuVmlld0dyb3VwfSdzIGxheW91dF93aWR0aCBhbmQgbGF5b3V0X2hlaWdodAotICAgICAqIGF0dHJpYnV0ZXMuICBUaGlzIGlzIG9ubHkgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczsgYXBwbGljYXRpb25zCi0gICAgICogc2hvdWxkIHVzZSB7QGxpbmsgI2dldERpbWVuc2lvblBpeGVsU2l6ZX0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgdGhlIGF0dHJpYnV0ZSB0byByZXRyaWV2ZS4KLSAgICAgKiBAcGFyYW0gbmFtZSBUZXh0dWFsIG5hbWUgb2YgYXR0cmlidXRlIGZvciBlcnJvciByZXBvcnRpbmcuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEF0dHJpYnV0ZSBkaW1lbnNpb24gdmFsdWUgbXVsdGlwbGllZCBieSB0aGUgYXBwcm9wcmlhdGUKLSAgICAgKiBtZXRyaWMgYW5kIHRydW5jYXRlZCB0byBpbnRlZ2VyIHBpeGVscy4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldExheW91dERpbWVuc2lvbihpbnQgaW5kZXgsIFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyB0aGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgICAgICAgICByZXR1cm4gZ2V0RGltZW5zaW9uKGluZGV4KTsKLSAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0KLSAgICAgICAgICAgIGlmIChMYXlvdXRJbmZsYXRlcl9EZWxlZ2F0ZS5zSXNJbkluY2x1ZGUpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkud2FybmluZyhMYXlvdXRMb2cuVEFHX1JFU09VUkNFU19GT1JNQVQsCi0gICAgICAgICAgICAgICAgICAgICJZb3UgbXVzdCBzdXBwbHkgYSAiICsgbmFtZSArICIgYXR0cmlidXRlLiIsIG51bGwpOwotCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0TGF5b3V0RGltZW5zaW9uKGludCBpbmRleCwgaW50IGRlZlZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBnZXREaW1lbnNpb25QaXhlbFNpemUoaW5kZXgsIGRlZlZhbHVlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBnZXREaW1lbnNpb24oaW50IGluZGV4KSB7Ci0gICAgICAgIGlmIChtUmVzb3VyY2VEYXRhW2luZGV4XSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHMgPSBtUmVzb3VyY2VEYXRhW2luZGV4XS5nZXRWYWx1ZSgpOwotCi0gICAgICAgIGlmIChzID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocy5lcXVhbHMoQnJpZGdlQ29uc3RhbnRzLk1BVENIX1BBUkVOVCkgfHwKLSAgICAgICAgICAgICAgICBzLmVxdWFscyhCcmlkZ2VDb25zdGFudHMuRklMTF9QQVJFTlQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVDsKLSAgICAgICAgfSBlbHNlIGlmIChzLmVxdWFscyhCcmlkZ2VDb25zdGFudHMuV1JBUF9DT05URU5UKSkgewotICAgICAgICAgICAgcmV0dXJuIExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoUmVuZGVyUmVzb3VyY2VzLlJFRkVSRU5DRV9OVUxMLmVxdWFscyhzKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChSZXNvdXJjZUhlbHBlci5wYXJzZUZsb2F0QXR0cmlidXRlKG1OYW1lc1tpbmRleF0sIHMsIG1WYWx1ZSwgdHJ1ZSAvKnJlcXVpcmVVbml0Ki8pKSB7Ci0gICAgICAgICAgICBmbG9hdCBmID0gbVZhbHVlLmdldERpbWVuc2lvbihtQnJpZGdlUmVzb3VyY2VzLmdldERpc3BsYXlNZXRyaWNzKCkpOwotCi0gICAgICAgICAgICBmaW5hbCBpbnQgcmVzID0gKGludCkoZiswLjVmKTsKLSAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgcmV0dXJuIHJlczsKLSAgICAgICAgICAgIGlmIChmID09IDApIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKGYgPiAwKSByZXR1cm4gMTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgYSBmcmFjdGlvbmFsIHVuaXQgYXR0cmlidXRlIGF0IDx2YXI+aW5kZXg8L3Zhcj4uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgYXR0cmlidXRlIHRvIHJldHJpZXZlLgotICAgICAqIEBwYXJhbSBiYXNlIFRoZSBiYXNlIHZhbHVlIG9mIHRoaXMgZnJhY3Rpb24uICBJbiBvdGhlciB3b3JkcywgYQotICAgICAqICAgICAgICAgICAgIHN0YW5kYXJkIGZyYWN0aW9uIGlzIG11bHRpcGxpZWQgYnkgdGhpcyB2YWx1ZS4KLSAgICAgKiBAcGFyYW0gcGJhc2UgVGhlIHBhcmVudCBiYXNlIHZhbHVlIG9mIHRoaXMgZnJhY3Rpb24uICBJbiBvdGhlcgotICAgICAqICAgICAgICAgICAgIHdvcmRzLCBhIHBhcmVudCBmcmFjdGlvbiAobm4lcCkgaXMgbXVsdGlwbGllZCBieSB0aGlzCi0gICAgICogICAgICAgICAgICAgdmFsdWUuCi0gICAgICogQHBhcmFtIGRlZlZhbHVlIFZhbHVlIHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkIG9yCi0gICAgICogICAgICAgICAgICAgICAgIG5vdCBhIHJlc291cmNlLgotICAgICAqCi0gICAgICogQHJldHVybiBBdHRyaWJ1dGUgZnJhY3Rpb25hbCB2YWx1ZSBtdWx0aXBsaWVkIGJ5IHRoZSBhcHByb3ByaWF0ZQotICAgICAqIGJhc2UgdmFsdWUsIG9yIGRlZlZhbHVlIGlmIG5vdCBkZWZpbmVkLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmbG9hdCBnZXRGcmFjdGlvbihpbnQgaW5kZXgsIGludCBiYXNlLCBpbnQgcGJhc2UsIGZsb2F0IGRlZlZhbHVlKSB7Ci0gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbVJlc291cmNlRGF0YS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtUmVzb3VyY2VEYXRhW2luZGV4XSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgdmFsdWUgPSBtUmVzb3VyY2VEYXRhW2luZGV4XS5nZXRWYWx1ZSgpOwotICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFJlc291cmNlSGVscGVyLnBhcnNlRmxvYXRBdHRyaWJ1dGUobU5hbWVzW2luZGV4XSwgdmFsdWUsIG1WYWx1ZSwKLSAgICAgICAgICAgICAgICBmYWxzZSAvKnJlcXVpcmVVbml0Ki8pKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVZhbHVlLmdldEZyYWN0aW9uKGJhc2UsIHBiYXNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGxvb2tzIGxpa2Ugd2Ugd2VyZSB1bmFibGUgdG8gcmVzb2x2ZSB0aGUgZnJhY3Rpb24gdmFsdWUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLndhcm5pbmcoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfRk9STUFULAotICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICJcIiUxJHNcIiBpbiBhdHRyaWJ1dGUgXCIlMiRzXCIgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIGZyYWN0aW9uLiIsCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlLCBtTmFtZXNbaW5kZXhdKSwgbnVsbCAvKmRhdGEqLyk7Ci0KLSAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSByZXNvdXJjZSBpZGVudGlmaWVyIGZvciB0aGUgYXR0cmlidXRlIGF0Ci0gICAgICogPHZhcj5pbmRleDwvdmFyPi4gIE5vdGUgdGhhdCBhdHRyaWJ1dGUgcmVzb3VyY2UgYXMgcmVzb2x2ZWQgd2hlbgotICAgICAqIHRoZSBvdmVyYWxsIHtAbGluayBUeXBlZEFycmF5fSBvYmplY3QgaXMgcmV0cmlldmVkLiAgQXMgYQotICAgICAqIHJlc3VsdCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgcmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGUKLSAgICAgKiBmaW5hbCByZXNvdXJjZSB2YWx1ZSB0aGF0IHdhcyBmb3VuZCwgPGVtPm5vdDwvZW0+IG5lY2Vzc2FyaWx5IHRoZQotICAgICAqIG9yaWdpbmFsIHJlc291cmNlIHRoYXQgd2FzIHNwZWNpZmllZCBieSB0aGUgYXR0cmlidXRlLgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIGF0dHJpYnV0ZSB0byByZXRyaWV2ZS4KLSAgICAgKiBAcGFyYW0gZGVmVmFsdWUgVmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGRlZmluZWQgb3IKLSAgICAgKiAgICAgICAgICAgICAgICAgbm90IGEgcmVzb3VyY2UuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEF0dHJpYnV0ZSByZXNvdXJjZSBpZGVudGlmaWVyLCBvciBkZWZWYWx1ZSBpZiBub3QgZGVmaW5lZC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFJlc291cmNlSWQoaW50IGluZGV4LCBpbnQgZGVmVmFsdWUpIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtUmVzb3VyY2VEYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBSZXNvdXJjZSBmb3IgdGhpcyBpbmRleAotICAgICAgICBSZXNvdXJjZVZhbHVlIHJlc1ZhbHVlID0gbVJlc291cmNlRGF0YVtpbmRleF07Ci0KLSAgICAgICAgLy8gbm8gZGF0YSwgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLgotICAgICAgICBpZiAocmVzVmFsdWUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHN0eWxlIHJlc291cmNlCi0gICAgICAgIGlmIChyZXNWYWx1ZSBpbnN0YW5jZW9mIFN0eWxlUmVzb3VyY2VWYWx1ZSkgewotICAgICAgICAgICAgLy8gZ2V0IHRoZSBpZCB0aGF0IHdpbGwgcmVwcmVzZW50IHRoaXMgc3R5bGUuCi0gICAgICAgICAgICByZXR1cm4gbUNvbnRleHQuZ2V0RHluYW1pY0lkQnlTdHlsZSgoU3R5bGVSZXNvdXJjZVZhbHVlKXJlc1ZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChSZW5kZXJSZXNvdXJjZXMuUkVGRVJFTkNFX05VTEwuZXF1YWxzKHJlc1ZhbHVlLmdldFZhbHVlKCkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBpZiB0aGUgYXR0cmlidXRlIHdhcyBhIHJlZmVyZW5jZSB0byBhIHJlc291cmNlLCBhbmQgbm90IGEgZGVjbGFyYXRpb24gb2YgYW4gaWQgKEAraWQpLAotICAgICAgICAvLyB0aGVuIHRoZSB4bWwgYXR0cmlidXRlIHZhbHVlIHdhcyAicmVzb2x2ZWQiIHdoaWNoIGxlYWRzIHVzIHRvIGEgUmVzb3VyY2VWYWx1ZSB3aXRoIGEKLSAgICAgICAgLy8gdmFsaWQgZ2V0VHlwZSgpIGFuZCBnZXROYW1lKCkgcmV0dXJuaW5nIGEgcmVzb3VyY2UgbmFtZS4KLSAgICAgICAgLy8gKGFuZCBnZXRWYWx1ZSgpIHJldHVybmluZyBudWxsISkuIFdlIG5lZWQgdG8gaGFuZGxlIHRoaXMhCi0gICAgICAgIGlmIChyZXNWYWx1ZS5nZXRSZXNvdXJjZVR5cGUoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgZnJhbWV3b3JrIGlkCi0gICAgICAgICAgICBpZiAobVBsYXRmb3JtRmlsZSB8fCByZXNWYWx1ZS5pc0ZyYW1ld29yaygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gbG9vayBmb3IgaWROYW1lIGluIHRoZSBhbmRyb2lkIFIgY2xhc3NlcwotICAgICAgICAgICAgICAgIHJldHVybiBtQ29udGV4dC5nZXRGcmFtZXdvcmtSZXNvdXJjZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzVmFsdWUuZ2V0UmVzb3VyY2VUeXBlKCksIHJlc1ZhbHVlLmdldE5hbWUoKSwgZGVmVmFsdWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBsb29rIGZvciBpZE5hbWUgaW4gdGhlIHByb2plY3QgUiBjbGFzcy4KLSAgICAgICAgICAgIHJldHVybiBtQ29udGV4dC5nZXRQcm9qZWN0UmVzb3VyY2VWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgcmVzVmFsdWUuZ2V0UmVzb3VyY2VUeXBlKCksIHJlc1ZhbHVlLmdldE5hbWUoKSwgZGVmVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZWxzZSwgdHJ5IHRvIGdldCB0aGUgdmFsdWUsIGFuZCByZXNvbHZlIGl0IHNvbWVob3cuCi0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHJlc1ZhbHVlLmdldFZhbHVlKCk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBpZiB0aGUgdmFsdWUgaXMganVzdCBhbiBpbnRlZ2VyLCByZXR1cm4gaXQuCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbnQgaSA9IEludGVnZXIucGFyc2VJbnQodmFsdWUpOwotICAgICAgICAgICAgaWYgKEludGVnZXIudG9TdHJpbmcoaSkuZXF1YWxzKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSGFuZGxlIHRoZSBAaWQvPG5hbWU+LCBAK2lkLzxuYW1lPiBhbmQgQGFuZHJvaWQ6aWQvPG5hbWU+Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBleGFjdCB2YWx1ZSB0aGF0IHdhcyBjb21waWxlZCAoZnJvbSB0aGUgdmFyaW91cyBSIGNsYXNzZXMpLAotICAgICAgICAvLyBhcyB0aGVzZSB2YWx1ZXMgY2FuIGJlIHJldXNlZCBpbnRlcm5hbGx5IHdpdGggY2FsbHMgdG8gZmluZFZpZXdCeUlkKCkuCi0gICAgICAgIC8vIFRoZXJlJ3MgYSB0cmljayB3aXRoIHBsYXRmb3JtIGxheW91dHMgdGhhdCBub3QgdXNlICJhbmRyb2lkOiIgYnV0IHRoZWlyIElEcyBhcmUgaW4KLSAgICAgICAgLy8gZmFjdCBpbiB0aGUgYW5kcm9pZC5SIGFuZCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SIGNsYXNzZXMuCi0gICAgICAgIC8vIFRoZSBmaWVsZCBtUGxhdGZvcm1GaWxlIHdpbGwgaW5kaWNhdGUgdGhhdCBhbGwgSURzIGFyZSB0byBiZSBsb29rZWQgdXAgaW4gdGhlIGFuZHJvaWQgUgotICAgICAgICAvLyBjbGFzc2VzIGV4Y2x1c2l2ZWx5LgotCi0gICAgICAgIC8vIGlmIHRoaXMgaXMgYSByZWZlcmVuY2UgdG8gYW4gaWQsIGZpbmQgaXQuCi0gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCJAaWQvIikgfHwgdmFsdWUuc3RhcnRzV2l0aCgiQCsiKSB8fAotICAgICAgICAgICAgICAgIHZhbHVlLnN0YXJ0c1dpdGgoIkBhbmRyb2lkOmlkLyIpKSB7Ci0KLSAgICAgICAgICAgIGludCBwb3MgPSB2YWx1ZS5pbmRleE9mKCcvJyk7Ci0gICAgICAgICAgICBTdHJpbmcgaWROYW1lID0gdmFsdWUuc3Vic3RyaW5nKHBvcyArIDEpOwotCi0gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgZnJhbWV3b3JrIGlkCi0gICAgICAgICAgICBpZiAobVBsYXRmb3JtRmlsZSB8fCB2YWx1ZS5zdGFydHNXaXRoKCJAYW5kcm9pZCIpIHx8IHZhbHVlLnN0YXJ0c1dpdGgoIkArYW5kcm9pZCIpKSB7Ci0gICAgICAgICAgICAgICAgLy8gbG9vayBmb3IgaWROYW1lIGluIHRoZSBhbmRyb2lkIFIgY2xhc3NlcwotICAgICAgICAgICAgICAgIHJldHVybiBtQ29udGV4dC5nZXRGcmFtZXdvcmtSZXNvdXJjZVZhbHVlKFJlc291cmNlVHlwZS5JRCwgaWROYW1lLCBkZWZWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGxvb2sgZm9yIGlkTmFtZSBpbiB0aGUgcHJvamVjdCBSIGNsYXNzLgotICAgICAgICAgICAgcmV0dXJuIG1Db250ZXh0LmdldFByb2plY3RSZXNvdXJjZVZhbHVlKFJlc291cmNlVHlwZS5JRCwgaWROYW1lLCBkZWZWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBub3QgYSBkaXJlY3QgaWQgdmFsaWQgcmVmZXJlbmNlPyByZXNvbHZlIGl0Ci0gICAgICAgIEludGVnZXIgaWRWYWx1ZSA9IG51bGw7Ci0KLSAgICAgICAgaWYgKHJlc1ZhbHVlLmlzRnJhbWV3b3JrKCkpIHsKLSAgICAgICAgICAgIGlkVmFsdWUgPSBCcmlkZ2UuZ2V0UmVzb3VyY2VJZChyZXNWYWx1ZS5nZXRSZXNvdXJjZVR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgcmVzVmFsdWUuZ2V0TmFtZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlkVmFsdWUgPSBtQ29udGV4dC5nZXRQcm9qZWN0Q2FsbGJhY2soKS5nZXRSZXNvdXJjZUlkKAotICAgICAgICAgICAgICAgICAgICByZXNWYWx1ZS5nZXRSZXNvdXJjZVR5cGUoKSwgcmVzVmFsdWUuZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpZFZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBpZFZhbHVlLmludFZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkud2FybmluZyhMYXlvdXRMb2cuVEFHX1JFU09VUkNFU19SRVNPTFZFLAotICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gcmVzb2x2ZSBpZCBcIiUxJHNcIiBmb3IgYXR0cmlidXRlIFwiJTIkc1wiIiwgdmFsdWUsIG1OYW1lc1tpbmRleF0pLAotICAgICAgICAgICAgICAgICAgICByZXNWYWx1ZSk7Ci0KLSAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSBEcmF3YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+LiAgVGhpcwotICAgICAqIGdldHMgdGhlIHJlc291cmNlIElEIG9mIHRoZSBzZWxlY3RlZCBhdHRyaWJ1dGUsIGFuZCB1c2VzCi0gICAgICoge0BsaW5rIFJlc291cmNlcyNnZXREcmF3YWJsZSBSZXNvdXJjZXMuZ2V0RHJhd2FibGV9IG9mIHRoZSBvd25pbmcKLSAgICAgKiBSZXNvdXJjZXMgb2JqZWN0IHRvIHJldHJpZXZlIGl0cyBEcmF3YWJsZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIERyYXdhYmxlIGZvciB0aGUgYXR0cmlidXRlLCBvciBudWxsIGlmIG5vdCBkZWZpbmVkLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBEcmF3YWJsZSBnZXREcmF3YWJsZShpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtUmVzb3VyY2VEYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVJlc291cmNlRGF0YVtpbmRleF0gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBSZXNvdXJjZVZhbHVlIHZhbHVlID0gbVJlc291cmNlRGF0YVtpbmRleF07Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLmdldFZhbHVlKCk7Ci0gICAgICAgIGlmIChzdHJpbmdWYWx1ZSA9PSBudWxsIHx8IFJlbmRlclJlc291cmNlcy5SRUZFUkVOQ0VfTlVMTC5lcXVhbHMoc3RyaW5nVmFsdWUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBSZXNvdXJjZUhlbHBlci5nZXREcmF3YWJsZSh2YWx1ZSwgbUNvbnRleHQpOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIENoYXJTZXF1ZW5jZVtdIGZvciB0aGUgYXR0cmlidXRlIGF0IDx2YXI+aW5kZXg8L3Zhcj4uCi0gICAgICogVGhpcyBnZXRzIHRoZSByZXNvdXJjZSBJRCBvZiB0aGUgc2VsZWN0ZWQgYXR0cmlidXRlLCBhbmQgdXNlcwotICAgICAqIHtAbGluayBSZXNvdXJjZXMjZ2V0VGV4dEFycmF5IFJlc291cmNlcy5nZXRUZXh0QXJyYXl9IG9mIHRoZSBvd25pbmcKLSAgICAgKiBSZXNvdXJjZXMgb2JqZWN0IHRvIHJldHJpZXZlIGl0cyBTdHJpbmdbXS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIENoYXJTZXF1ZW5jZVtdIGZvciB0aGUgYXR0cmlidXRlLCBvciBudWxsIGlmIG5vdCBkZWZpbmVkLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDaGFyU2VxdWVuY2VbXSBnZXRUZXh0QXJyYXkoaW50IGluZGV4KSB7Ci0gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbVJlc291cmNlRGF0YS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1SZXNvdXJjZURhdGFbaW5kZXhdID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHZhbHVlID0gbVJlc291cmNlRGF0YVtpbmRleF0uZ2V0VmFsdWUoKTsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJSZXNvdXJjZXMuUkVGRVJFTkNFX05VTEwuZXF1YWxzKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbmV3IENoYXJTZXF1ZW5jZVtdIHsgdmFsdWUgfTsKLSAgICAgICAgfQotCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS53YXJuaW5nKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX0ZPUk1BVCwKLSAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJVbmtub3duIHZhbHVlIGZvciBnZXRUZXh0QXJyYXkoJWQpID0+ICVzIiwgLy9ERUJVRwotICAgICAgICAgICAgICAgICAgICBpbmRleCwgbVJlc291cmNlRGF0YVtpbmRleF0uZ2V0TmFtZSgpKSksIG51bGwgLypkYXRhKi8pOwotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIHRoZSByYXcgVHlwZWRWYWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZSBhdCA8dmFyPmluZGV4PC92YXI+LgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIGF0dHJpYnV0ZSB0byByZXRyaWV2ZS4KLSAgICAgKiBAcGFyYW0gb3V0VmFsdWUgVHlwZWRWYWx1ZSBvYmplY3QgaW4gd2hpY2ggdG8gcGxhY2UgdGhlIGF0dHJpYnV0ZSdzCi0gICAgICogICAgICAgICAgICAgICAgIGRhdGEuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgd2FzIHJldHJpZXZlZCwgZWxzZSBmYWxzZS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRWYWx1ZShpbnQgaW5kZXgsIFR5cGVkVmFsdWUgb3V0VmFsdWUpIHsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtUmVzb3VyY2VEYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1SZXNvdXJjZURhdGFbaW5kZXhdID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBzID0gbVJlc291cmNlRGF0YVtpbmRleF0uZ2V0VmFsdWUoKTsKLQotICAgICAgICByZXR1cm4gUmVzb3VyY2VIZWxwZXIucGFyc2VGbG9hdEF0dHJpYnV0ZShtTmFtZXNbaW5kZXhdLCBzLCBvdXRWYWx1ZSwKLSAgICAgICAgICAgICAgICBmYWxzZSAvKnJlcXVpcmVVbml0Ki8pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGVyZSBpcyBhbiBhdHRyaWJ1dGUgYXQgPHZhcj5pbmRleDwvdmFyPi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBhdHRyaWJ1dGUgdG8gcmV0cmlldmUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGF0dHJpYnV0ZSBoYXMgYSB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGhhc1ZhbHVlKGludCBpbmRleCkgewotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1SZXNvdXJjZURhdGEubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbVJlc291cmNlRGF0YVtpbmRleF0gIT0gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSB0aGUgcmF3IFR5cGVkVmFsdWUgZm9yIHRoZSBhdHRyaWJ1dGUgYXQgPHZhcj5pbmRleDwvdmFyPgotICAgICAqIGFuZCByZXR1cm4gYSB0ZW1wb3Jhcnkgb2JqZWN0IGhvbGRpbmcgaXRzIGRhdGEuICBUaGlzIG9iamVjdCBpcyBvbmx5Ci0gICAgICogdmFsaWQgdW50aWwgdGhlIG5leHQgY2FsbCBvbiB0byB7QGxpbmsgVHlwZWRBcnJheX0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgYXR0cmlidXRlIHRvIHJldHJpZXZlLgotICAgICAqCi0gICAgICogQHJldHVybiBSZXR1cm5zIGEgVHlwZWRWYWx1ZSBvYmplY3QgaWYgdGhlIGF0dHJpYnV0ZSBpcyBkZWZpbmVkLAotICAgICAqICAgICAgICAgY29udGFpbmluZyBpdHMgZGF0YTsgb3RoZXJ3aXNlIHJldHVybnMgbnVsbC4gIChZb3Ugd2lsbCBub3QKLSAgICAgKiAgICAgICAgIHJlY2VpdmUgYSBUeXBlZFZhbHVlIHdob3NlIHR5cGUgaXMgVFlQRV9OVUxMLikKLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVHlwZWRWYWx1ZSBwZWVrVmFsdWUoaW50IGluZGV4KSB7Ci0gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbVJlc291cmNlRGF0YS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGdldFZhbHVlKGluZGV4LCBtVmFsdWUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIG1lc3NhZ2UgYWJvdXQgdGhlIHBhcnNlciBzdGF0ZSBzdWl0YWJsZSBmb3IgcHJpbnRpbmcgZXJyb3IgbWVzc2FnZXMuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQb3NpdGlvbkRlc2NyaXB0aW9uKCkgewotICAgICAgICByZXR1cm4gIjxpbnRlcm5hbCAtLSBzdHViIGlmIG5lZWRlZD4iOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdpdmUgYmFjayBhIHByZXZpb3VzbHkgcmV0cmlldmVkIFR5cGVkQXJyYXksIGZvciBsYXRlciByZS11c2UuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVjeWNsZSgpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBBcnJheXMudG9TdHJpbmcobVJlc291cmNlRGF0YSk7Ci0gICAgfQotIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzX1RoZW1lX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlc19UaGVtZV9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWQ2MTVjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzX1RoZW1lX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmNvbnRlbnQucmVzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlJlbmRlclNlc3Npb25JbXBsOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLlRoZW1lOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7Ci0KLS8qKgotICogRGVsZWdhdGUgdXNlZCB0byBwcm92aWRlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBhIHNlbGVjdCBmZXcgbWV0aG9kcyBvZiB7QGxpbmsgUmVzb3VyY2VzJFRoZW1lfQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIFRoZW1lIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUmVzb3VyY2VzX1RoZW1lX0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBUeXBlZEFycmF5IG9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICBSZXNvdXJjZXMgdGhpc1Jlc291cmNlcywgVGhlbWUgdGhpc1RoZW1lLAotICAgICAgICAgICAgaW50W10gYXR0cnMpIHsKLSAgICAgICAgcmV0dXJuIFJlbmRlclNlc3Npb25JbXBsLmdldEN1cnJlbnRDb250ZXh0KCkub2J0YWluU3R5bGVkQXR0cmlidXRlcyhhdHRycyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFR5cGVkQXJyYXkgb2J0YWluU3R5bGVkQXR0cmlidXRlcygKLSAgICAgICAgICAgIFJlc291cmNlcyB0aGlzUmVzb3VyY2VzLCBUaGVtZSB0aGlzVGhlbWUsCi0gICAgICAgICAgICBpbnQgcmVzaWQsIGludFtdIGF0dHJzKQotICAgICAgICAgICAgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIFJlbmRlclNlc3Npb25JbXBsLmdldEN1cnJlbnRDb250ZXh0KCkub2J0YWluU3R5bGVkQXR0cmlidXRlcyhyZXNpZCwgYXR0cnMpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBUeXBlZEFycmF5IG9idGFpblN0eWxlZEF0dHJpYnV0ZXMoCi0gICAgICAgICAgICBSZXNvdXJjZXMgdGhpc1Jlc291cmNlcywgVGhlbWUgdGhpc1RoZW1lLAotICAgICAgICAgICAgQXR0cmlidXRlU2V0IHNldCwgaW50W10gYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgewotICAgICAgICByZXR1cm4gUmVuZGVyU2Vzc2lvbkltcGwuZ2V0Q3VycmVudENvbnRleHQoKS5vYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKAotICAgICAgICAgICAgICAgIHNldCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIHJlc29sdmVBdHRyaWJ1dGUoCi0gICAgICAgICAgICBSZXNvdXJjZXMgdGhpc1Jlc291cmNlcywgVGhlbWUgdGhpc1RoZW1lLAotICAgICAgICAgICAgaW50IHJlc2lkLCBUeXBlZFZhbHVlIG91dFZhbHVlLAotICAgICAgICAgICAgYm9vbGVhbiByZXNvbHZlUmVmcykgewotICAgICAgICByZXR1cm4gUmVuZGVyU2Vzc2lvbkltcGwuZ2V0Q3VycmVudENvbnRleHQoKS5yZXNvbHZlVGhlbWVBdHRyaWJ1dGUoCi0gICAgICAgICAgICAgICAgcmVzaWQsIG91dFZhbHVlLCByZXNvbHZlUmVmcyk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9jb250ZW50L3Jlcy9UeXBlZEFycmF5X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL1R5cGVkQXJyYXlfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE3ODk5YS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL1R5cGVkQXJyYXlfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuY29udGVudC5yZXM7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKLQotcHVibGljIGNsYXNzIFR5cGVkQXJyYXlfRGVsZWdhdGUgewotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGdldFZhbHVlQXQoVHlwZWRBcnJheSB0aGVUeXBlZEFycmF5LCBpbnQgaW5kZXgsIFR5cGVkVmFsdWUgb3V0VmFsdWUpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Bdm9pZFhmZXJtb2RlX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0F2b2lkWGZlcm1vZGVfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUwYTJiZC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0F2b2lkWGZlcm1vZGVfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGphdmEuYXd0LkNvbXBvc2l0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuQXZvaWRYZmVybW9kZQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIEF2b2lkWGZlcm1vZGUgaGF2ZSBiZWVuCi0gKiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgQXZvaWRYZmVybW9kZSBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIHRoaXMgZXh0ZW5kcyB7QGxpbmsgWGZlcm1vZGVfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEKLSAqIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LCBhcyBhbGwgdGhlIFBhdGhFZmZlY3QgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyIG93bmVkIGJ5Ci0gKiB7QGxpbmsgWGZlcm1vZGVfRGVsZWdhdGV9LgotICoKLSAqLwotcHVibGljIGNsYXNzIEF2b2lkWGZlcm1vZGVfRGVsZWdhdGUgZXh0ZW5kcyBYZmVybW9kZV9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbXBvc2l0ZSBnZXRDb21wb3NpdGUoaW50IGFscGhhKSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU3VwcG9ydGVkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpIHsKLSAgICAgICAgcmV0dXJuICJBdm9pZCBYZmVybW9kZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTGF5b3V0IFByZXZpZXcgbW9kZS4iOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUoaW50IG9wQ29sb3IsIGludCB0b2xlcmFuY2UsIGludCBuYXRpdmVNb2RlKSB7Ci0gICAgICAgIEF2b2lkWGZlcm1vZGVfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgQXZvaWRYZmVybW9kZV9EZWxlZ2F0ZSgpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0JpZGlSZW5kZXJlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9CaWRpUmVuZGVyZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJkMGEwZC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0JpZGlSZW5kZXJlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBqYXZhLmF3dC5Gb250OwotaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzMkQ7Ci1pbXBvcnQgamF2YS5hd3QuZm9udC5Gb250UmVuZGVyQ29udGV4dDsKLWltcG9ydCBqYXZhLmF3dC5mb250LkdseXBoVmVjdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgY29tLmlibS5pY3UubGFuZy5VU2NyaXB0OwotaW1wb3J0IGNvbS5pYm0uaWN1LmxhbmcuVVNjcmlwdFJ1bjsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnRfRGVsZWdhdGUuRm9udEluZm87Ci0KLS8qKgotICogUmVuZGVyIHRoZSB0ZXh0IGJ5IGJyZWFraW5nIGl0IGludG8gdmFyaW91cyBzY3JpcHRzIGFuZCB1c2luZyB0aGUgcmlnaHQgZm9udCBmb3IgZWFjaCBzY3JpcHQuCi0gKiBDYW4gYmUgdXNlZCB0byBtZWFzdXJlIHRoZSB0ZXh0IHdpdGhvdXQgYWN0dWFsbHkgZHJhd2luZyBpdC4KLSAqLwotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLXB1YmxpYyBjbGFzcyBCaWRpUmVuZGVyZXIgewotCi0gICAgLyogcGFja2FnZSAqLyBzdGF0aWMgY2xhc3MgU2NyaXB0UnVuIHsKLSAgICAgICAgaW50IHN0YXJ0OwotICAgICAgICBpbnQgbGltaXQ7Ci0gICAgICAgIGJvb2xlYW4gaXNSdGw7Ci0gICAgICAgIGludCBzY3JpcHRDb2RlOwotICAgICAgICBGb250SW5mbyBmb250OwotCi0gICAgICAgIHB1YmxpYyBTY3JpcHRSdW4oaW50IHN0YXJ0LCBpbnQgbGltaXQsIGJvb2xlYW4gaXNSdGwpIHsKLSAgICAgICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydDsKLSAgICAgICAgICAgIHRoaXMubGltaXQgPSBsaW1pdDsKLSAgICAgICAgICAgIHRoaXMuaXNSdGwgPSBpc1J0bDsKLSAgICAgICAgICAgIHRoaXMuc2NyaXB0Q29kZSA9IFVTY3JpcHQuSU5WQUxJRF9DT0RFOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogcGFja2FnZSAqLyBHcmFwaGljczJEIGdyYXBoaWNzOwotICAgIC8qIHBhY2thZ2UgKi8gUGFpbnRfRGVsZWdhdGUgcGFpbnQ7Ci0gICAgLyogcGFja2FnZSAqLyBjaGFyW10gdGV4dDsKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBncmFwaGljcyBNYXkgYmUgbnVsbC4KLSAgICAgKiBAcGFyYW0gcGFpbnQgVGhlIFBhaW50IHRvIHVzZSB0byBnZXQgdGhlIGZvbnRzLiBTaG91bGQgbm90IGJlIG51bGwuCi0gICAgICogQHBhcmFtIHRleHQgVW5pZGlyZWN0aW9uYWwgdGV4dC4gU2hvdWxkIG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIC8qIHBhY2thZ2UgKi8gQmlkaVJlbmRlcmVyKEdyYXBoaWNzMkQgZ3JhcGhpY3MsIFBhaW50X0RlbGVnYXRlIHBhaW50LCBjaGFyW10gdGV4dCkgewotICAgICAgICBhc3NlcnQgKHBhaW50ICE9IG51bGwpOwotICAgICAgICB0aGlzLmdyYXBoaWNzID0gZ3JhcGhpY3M7Ci0gICAgICAgIHRoaXMucGFpbnQgPSBwYWludDsKLSAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW5kZXIgdW5pZGlyZWN0aW9uYWwgdGV4dC4KLSAgICAgKgotICAgICAqIFRoaXMgbWV0aG9kIGNhbiBhbHNvIGJlIHVzZWQgdG8gbWVhc3VyZSB0aGUgd2lkdGggb2YgdGhlIHRleHQgd2l0aG91dCBhY3R1YWxseSBkcmF3aW5nIGl0LgotICAgICAqCi0gICAgICogQHBhcmFtIHN0YXJ0IGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIKLSAgICAgKiBAcGFyYW0gbGltaXQgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0IHNob3VsZCBub3QgYmUgcmVuZGVyZWQuCi0gICAgICogQHBhcmFtIGlzUnRsIGlzIHRoZSB0ZXh0IHJpZ2h0LXRvLWxlZnQKLSAgICAgKiBAcGFyYW0gYWR2YW5jZXMgSWYgbm90IG51bGwsIHRoZW4gYWR2YW5jZXMgZm9yIGVhY2ggY2hhcmFjdGVyIHRvIGJlIHJlbmRlcmVkIGFyZSByZXR1cm5lZAotICAgICAqICAgICAgICAgICAgaGVyZS4KLSAgICAgKiBAcGFyYW0gYWR2YW5jZXNJbmRleCBpbmRleCBpbnRvIGFkdmFuY2VzIGZyb20gd2hlcmUgdGhlIGFkdmFuY2VzIG5lZWQgdG8gYmUgZmlsbGVkLgotICAgICAqIEBwYXJhbSBkcmF3IElmIHRydWUgYW5kIHtAbGluayBncmFwaGljc30gaXMgbm90IG51bGwsIGRyYXcgdGhlIHJlbmRlcmVkIHRleHQgb24gdGhlIGdyYXBoaWNzCi0gICAgICogICAgICAgICAgICBhdCB0aGUgZ2l2ZW4gY28tb3JkaW5hdGVzCi0gICAgICogQHBhcmFtIHggVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbGVmdCBlZGdlIG9mIHdoZXJlIHRoZSB0ZXh0IHNob3VsZCBiZSBkcmF3biBvbiB0aGUgZ2l2ZW4KLSAgICAgKiAgICAgICAgICAgIGdyYXBoaWNzLgotICAgICAqIEBwYXJhbSB5IFRoZSB5LWNvb3JkaW5hdGUgYXQgd2hpY2ggdG8gZHJhdyB0aGUgdGV4dCBvbiB0aGUgZ2l2ZW4gZ3JhcGhpY3MuCi0gICAgICogQHJldHVybiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSByaWdodCBlZGdlIG9mIHRoZSBkcmF3biB0ZXh0LiBJbiBvdGhlciB3b3JkcywKLSAgICAgKiAgICAgICAgICAgIHggKyB0aGUgd2lkdGggb2YgdGhlIHRleHQuCi0gICAgICovCi0gICAgLyogcGFja2FnZSAqLyBmbG9hdCByZW5kZXJUZXh0KGludCBzdGFydCwgaW50IGxpbWl0LCBib29sZWFuIGlzUnRsLCBmbG9hdCBhZHZhbmNlc1tdLAotICAgICAgICAgICAgaW50IGFkdmFuY2VzSW5kZXgsIGJvb2xlYW4gZHJhdywgZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICAvLyBXZSBicmVhayB0aGUgdGV4dCBpbnRvIHNjcmlwdHMgYW5kIHRoZW4gc2VsZWN0IGZvbnQgYmFzZWQgb24gaXQgYW5kIHRoZW4gcmVuZGVyIGVhY2ggb2YKLSAgICAgICAgLy8gdGhlIHNjcmlwdCBydW5zLgotICAgICAgICBmb3IgKFNjcmlwdFJ1biBydW4gOiBnZXRTY3JpcHRSdW5zKHRleHQsIHN0YXJ0LCBsaW1pdCwgaXNSdGwsIHBhaW50LmdldEZvbnRzKCkpKSB7Ci0gICAgICAgICAgICBpbnQgZmxhZyA9IEZvbnQuTEFZT1VUX05PX0xJTUlUX0NPTlRFWFQgfCBGb250LkxBWU9VVF9OT19TVEFSVF9DT05URVhUOwotICAgICAgICAgICAgZmxhZyB8PSBpc1J0bCA/IEZvbnQuTEFZT1VUX1JJR0hUX1RPX0xFRlQgOiBGb250LkxBWU9VVF9MRUZUX1RPX1JJR0hUOwotICAgICAgICAgICAgeCA9IHJlbmRlclNjcmlwdChydW4uc3RhcnQsIHJ1bi5saW1pdCwgcnVuLmZvbnQsIGZsYWcsIGFkdmFuY2VzLCBhZHZhbmNlc0luZGV4LCBkcmF3LAotICAgICAgICAgICAgICAgICAgICB4LCB5KTsKLSAgICAgICAgICAgIGFkdmFuY2VzSW5kZXggKz0gcnVuLmxpbWl0IC0gcnVuLnN0YXJ0OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB4OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbmRlciBhIHNjcmlwdCBydW4uIFVzZSB0aGUgcHJlZmVycmVkIGZvbnQgdG8gcmVuZGVyIGFzIG11Y2ggYXMgcG9zc2libGUuIFRoaXMgYWxzbwotICAgICAqIGltcGxlbWVudHMgYSBmYWxsYmFjayBtZWNoYW5pc20gdG8gcmVuZGVyIGNoYXJhY3RlcnMgdGhhdCBjYW5ub3QgYmUgZHJhd24gdXNpbmcgdGhlCi0gICAgICogcHJlZmVycmVkIGZvbnQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHggKyB3aWR0aCBvZiB0aGUgdGV4dCBkcmF3bi4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZsb2F0IHJlbmRlclNjcmlwdChpbnQgc3RhcnQsIGludCBsaW1pdCwgRm9udEluZm8gcHJlZmVycmVkRm9udCwgaW50IGZsYWcsCi0gICAgICAgICAgICBmbG9hdCBhZHZhbmNlc1tdLCBpbnQgYWR2YW5jZXNJbmRleCwgYm9vbGVhbiBkcmF3LCBmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIExpc3Q8Rm9udEluZm8+IGZvbnRzID0gcGFpbnQuZ2V0Rm9udHMoKTsKLSAgICAgICAgaWYgKGZvbnRzID09IG51bGwgfHwgcHJlZmVycmVkRm9udCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlIChzdGFydCA8IGxpbWl0KSB7Ci0gICAgICAgICAgICBib29sZWFuIGZvdW5kRm9udCA9IGZhbHNlOwotICAgICAgICAgICAgaW50IGNhbkRpc3BsYXlVcFRvID0gcHJlZmVycmVkRm9udC5tRm9udC5jYW5EaXNwbGF5VXBUbyh0ZXh0LCBzdGFydCwgbGltaXQpOwotICAgICAgICAgICAgaWYgKGNhbkRpc3BsYXlVcFRvID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihzdGFydCwgbGltaXQsIHByZWZlcnJlZEZvbnQsIGZsYWcsIGFkdmFuY2VzLCBhZHZhbmNlc0luZGV4LCBkcmF3LAotICAgICAgICAgICAgICAgICAgICAgICAgeCwgeSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNhbkRpc3BsYXlVcFRvID4gc3RhcnQpIHsgLy8gY2FuIGRyYXcgc29tZXRoaW5nCi0gICAgICAgICAgICAgICAgeCA9IHJlbmRlcihzdGFydCwgY2FuRGlzcGxheVVwVG8sIHByZWZlcnJlZEZvbnQsIGZsYWcsIGFkdmFuY2VzLCBhZHZhbmNlc0luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgZHJhdywgeCwgeSk7Ci0gICAgICAgICAgICAgICAgYWR2YW5jZXNJbmRleCArPSBjYW5EaXNwbGF5VXBUbyAtIHN0YXJ0OwotICAgICAgICAgICAgICAgIHN0YXJ0ID0gY2FuRGlzcGxheVVwVG87Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBjaGFyQ291bnQgPSBDaGFyYWN0ZXIuaXNIaWdoU3Vycm9nYXRlKHRleHRbc3RhcnRdKSA/IDIgOiAxOwotICAgICAgICAgICAgZm9yIChGb250SW5mbyBmb250IDogZm9udHMpIHsKLSAgICAgICAgICAgICAgICBjYW5EaXNwbGF5VXBUbyA9IGZvbnQubUZvbnQuY2FuRGlzcGxheVVwVG8odGV4dCwgc3RhcnQsIHN0YXJ0ICsgY2hhckNvdW50KTsKLSAgICAgICAgICAgICAgICBpZiAoY2FuRGlzcGxheVVwVG8gPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IHJlbmRlcihzdGFydCwgc3RhcnQrY2hhckNvdW50LCBmb250LCBmbGFnLCBhZHZhbmNlcywgYWR2YW5jZXNJbmRleCwgZHJhdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCB5KTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQgKz0gY2hhckNvdW50OwotICAgICAgICAgICAgICAgICAgICBhZHZhbmNlc0luZGV4ICs9IGNoYXJDb3VudDsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRGb250ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFmb3VuZEZvbnQpIHsKLSAgICAgICAgICAgICAgICAvLyBObyBmb250IGNhbiBkaXNwbGF5IHRoaXMgY2hhci4gVXNlIHRoZSBwcmVmZXJyZWQgZm9udC4gVGhlIGNoYXIgd2lsbCBtb3N0Ci0gICAgICAgICAgICAgICAgLy8gcHJvYmFibHkgYXBwZWFyIGFzIGEgYm94IG9yIGEgYmxhbmsgc3BhY2UuIFdlIGNvdWxkLCBwcm9iYWJseSwgdXNlIHNvbWUKLSAgICAgICAgICAgICAgICAvLyBoZXVyaXN0aWNzIGFuZCBicmVhayB0aGUgY2hhcmFjdGVyIGludG8gdGhlIGJhc2UgY2hhcmFjdGVyIGFuZCBkaWFjcml0aWNzIGFuZAotICAgICAgICAgICAgICAgIC8vIHRoZW4gZHJhdyBpdCwgYnV0IGl0J3MgcHJvYmFibHkgbm90IHdvcnRoIHRoZSBlZmZvcnQuCi0gICAgICAgICAgICAgICAgeCA9IHJlbmRlcihzdGFydCwgc3RhcnQgKyBjaGFyQ291bnQsIHByZWZlcnJlZEZvbnQsIGZsYWcsIGFkdmFuY2VzLCBhZHZhbmNlc0luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgZHJhdywgeCwgeSk7Ci0gICAgICAgICAgICAgICAgc3RhcnQgKz0gY2hhckNvdW50OwotICAgICAgICAgICAgICAgIGFkdmFuY2VzSW5kZXggKz0gY2hhckNvdW50OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB4OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbmRlciB0aGUgdGV4dCB3aXRoIHRoZSBnaXZlbiBmb250LgotICAgICAqLwotICAgIHByaXZhdGUgZmxvYXQgcmVuZGVyKGludCBzdGFydCwgaW50IGxpbWl0LCBGb250SW5mbyBmb250LCBpbnQgZmxhZywgZmxvYXQgYWR2YW5jZXNbXSwKLSAgICAgICAgICAgIGludCBhZHZhbmNlc0luZGV4LCBib29sZWFuIGRyYXcsIGZsb2F0IHgsIGZsb2F0IHkpIHsKLQotICAgICAgICBmbG9hdCB0b3RhbEFkdmFuY2UgPSAwOwotICAgICAgICAvLyBTaW5jZSB0aGUgbWV0cmljcyBkb24ndCBoYXZlIGFudGktYWxpYXNpbmcgc2V0LCB3ZSBjcmVhdGUgYSBuZXcgRm9udFJlbmRlckNvbnRleHQgd2l0aAotICAgICAgICAvLyB0aGUgYW50aS1hbGlhc2luZyBzZXQuCi0gICAgICAgIEZvbnRSZW5kZXJDb250ZXh0IGYgPSBmb250Lm1NZXRyaWNzLmdldEZvbnRSZW5kZXJDb250ZXh0KCk7Ci0gICAgICAgIEZvbnRSZW5kZXJDb250ZXh0IGZyYyA9IG5ldyBGb250UmVuZGVyQ29udGV4dChmLmdldFRyYW5zZm9ybSgpLCBwYWludC5pc0FudGlBbGlhc2VkKCksCi0gICAgICAgICAgICAgICAgZi51c2VzRnJhY3Rpb25hbE1ldHJpY3MoKSk7Ci0gICAgICAgIEdseXBoVmVjdG9yIGd2ID0gZm9udC5tRm9udC5sYXlvdXRHbHlwaFZlY3RvcihmcmMsIHRleHQsIHN0YXJ0LCBsaW1pdCwgZmxhZyk7Ci0gICAgICAgIGludCBuZyA9IGd2LmdldE51bUdseXBocygpOwotICAgICAgICBpbnRbXSBjaSA9IGd2LmdldEdseXBoQ2hhckluZGljZXMoMCwgbmcsIG51bGwpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5nOyBpKyspIHsKLSAgICAgICAgICAgIGZsb2F0IGFkdiA9IGd2LmdldEdseXBoTWV0cmljcyhpKS5nZXRBZHZhbmNlWCgpOwotICAgICAgICAgICAgaWYgKGFkdmFuY2VzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpbnQgYWR2X2lkeCA9IGFkdmFuY2VzSW5kZXggKyBjaVtpXTsKLSAgICAgICAgICAgICAgICBhZHZhbmNlc1thZHZfaWR4XSArPSBhZHY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0b3RhbEFkdmFuY2UgKz0gYWR2OwotICAgICAgICB9Ci0gICAgICAgIGlmIChkcmF3ICYmIGdyYXBoaWNzICE9IG51bGwpIHsKLSAgICAgICAgICAgIGdyYXBoaWNzLmRyYXdHbHlwaFZlY3RvcihndiwgeCwgeSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHggKyB0b3RhbEFkdmFuY2U7Ci0gICAgfQotCi0gICAgLy8gLS0tIFN0YXRpYyBoZWxwZXIgbWV0aG9kcyAtLS0KLQotICAgIC8qIHBhY2thZ2UgKi8gIHN0YXRpYyBMaXN0PFNjcmlwdFJ1bj4gZ2V0U2NyaXB0UnVucyhjaGFyW10gdGV4dCwgaW50IHN0YXJ0LCBpbnQgbGltaXQsCi0gICAgICAgICAgICBib29sZWFuIGlzUnRsLCBMaXN0PEZvbnRJbmZvPiBmb250cykgewotICAgICAgICBMaW5rZWRMaXN0PFNjcmlwdFJ1bj4gc2NyaXB0UnVucyA9IG5ldyBMaW5rZWRMaXN0PFNjcmlwdFJ1bj4oKTsKLQotICAgICAgICBpbnQgY291bnQgPSBsaW1pdCAtIHN0YXJ0OwotICAgICAgICBVU2NyaXB0UnVuIHVTY3JpcHRSdW4gPSBuZXcgVVNjcmlwdFJ1bih0ZXh0LCBzdGFydCwgY291bnQpOwotICAgICAgICB3aGlsZSAodVNjcmlwdFJ1bi5uZXh0KCkpIHsKLSAgICAgICAgICAgIGludCBzY3JpcHRTdGFydCA9IHVTY3JpcHRSdW4uZ2V0U2NyaXB0U3RhcnQoKTsKLSAgICAgICAgICAgIGludCBzY3JpcHRMaW1pdCA9IHVTY3JpcHRSdW4uZ2V0U2NyaXB0TGltaXQoKTsKLSAgICAgICAgICAgIFNjcmlwdFJ1biBydW4gPSBuZXcgU2NyaXB0UnVuKHNjcmlwdFN0YXJ0LCBzY3JpcHRMaW1pdCwgaXNSdGwpOwotICAgICAgICAgICAgcnVuLnNjcmlwdENvZGUgPSB1U2NyaXB0UnVuLmdldFNjcmlwdENvZGUoKTsKLSAgICAgICAgICAgIHNldFNjcmlwdEZvbnQodGV4dCwgcnVuLCBmb250cyk7Ci0gICAgICAgICAgICBzY3JpcHRSdW5zLmFkZChydW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNjcmlwdFJ1bnM7Ci0gICAgfQotCi0gICAgLy8gVE9ETzogUmVwbGFjZSB0aGlzIG1ldGhvZCB3aXRoIG9uZSB3aGljaCByZXR1cm5zIHRoZSBmb250IGJhc2VkIG9uIHRoZSBzY3JpcHRDb2RlLgotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc2V0U2NyaXB0Rm9udChjaGFyW10gdGV4dCwgU2NyaXB0UnVuIHJ1biwKLSAgICAgICAgICAgIExpc3Q8Rm9udEluZm8+IGZvbnRzKSB7Ci0gICAgICAgIGZvciAoRm9udEluZm8gZm9udEluZm8gOiBmb250cykgewotICAgICAgICAgICAgaWYgKGZvbnRJbmZvLm1Gb250LmNhbkRpc3BsYXlVcFRvKHRleHQsIHJ1bi5zdGFydCwgcnVuLmxpbWl0KSA9PSAtMSkgewotICAgICAgICAgICAgICAgIHJ1bi5mb250ID0gZm9udEluZm87Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJ1bi5mb250ID0gZm9udHMuZ2V0KDApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeV9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5X0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4NWMzZDEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5X0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQubmluZXBhdGNoLk5pbmVQYXRjaENodW5rOwotaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5EZW5zaXR5OwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQnJpZGdlUmVzb3VyY2VzLk5pbmVQYXRjaElucHV0U3RyZWFtOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeS5PcHRpb25zOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwX0RlbGVnYXRlLkJpdG1hcENyZWF0ZUZsYWdzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkVudW1TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIEJpdG1hcEZhY3RvcnkgaGF2ZSBiZWVuCi0gKiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIGl0J3MgYSBzdGF0ZWxlc3MgY2xhc3MgdG8gc3RhcnQgd2l0aCwgdGhlcmUncyBubyBuZWVkIHRvIGtlZXAgYSB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfQotICogYXJvdW5kIHRvIG1hcCBpbnQgdG8gaW5zdGFuY2Ugb2YgdGhlIGRlbGVnYXRlLgotICoKLSAqLwotLypwYWNrYWdlKi8gY2xhc3MgQml0bWFwRmFjdG9yeV9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tLS0gTmF0aXZlIERlbGVnYXRlcyAtLS0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBCaXRtYXAgbmF0aXZlRGVjb2RlU3RyZWFtKElucHV0U3RyZWFtIGlzLCBieXRlW10gc3RvcmFnZSwKLSAgICAgICAgICAgIFJlY3QgcGFkZGluZywgT3B0aW9ucyBvcHRzKSB7Ci0gICAgICAgIEJpdG1hcCBibSA9IG51bGw7Ci0KLSAgICAgICAgRGVuc2l0eSBkZW5zaXR5ID0gRGVuc2l0eS5NRURJVU07Ci0gICAgICAgIFNldDxCaXRtYXBDcmVhdGVGbGFncz4gYml0bWFwQ3JlYXRlRmxhZ3MgPSBFbnVtU2V0Lm9mKEJpdG1hcENyZWF0ZUZsYWdzLk1VVEFCTEUpOwotICAgICAgICBpZiAob3B0cyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBkZW5zaXR5ID0gRGVuc2l0eS5nZXRFbnVtKG9wdHMuaW5EZW5zaXR5KTsKLSAgICAgICAgICAgIGlmIChvcHRzLmluUHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGJpdG1hcENyZWF0ZUZsYWdzLmFkZChCaXRtYXBDcmVhdGVGbGFncy5QUkVNVUxUSVBMSUVEKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAoaXMgaW5zdGFuY2VvZiBOaW5lUGF0Y2hJbnB1dFN0cmVhbSkgewotICAgICAgICAgICAgICAgIE5pbmVQYXRjaElucHV0U3RyZWFtIG5waXMgPSAoTmluZVBhdGNoSW5wdXRTdHJlYW0pIGlzOwotICAgICAgICAgICAgICAgIG5waXMuZGlzYWJsZUZha2VNYXJrU3VwcG9ydCgpOwotCi0gICAgICAgICAgICAgICAgLy8gbG9hZCB0aGUgYml0bWFwIGFzIGEgbmluZSBwYXRjaAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLm5pbmVwYXRjaC5OaW5lUGF0Y2ggbmluZVBhdGNoID0gY29tLmFuZHJvaWQubmluZXBhdGNoLk5pbmVQYXRjaC5sb2FkKAotICAgICAgICAgICAgICAgICAgICAgICAgbnBpcywgdHJ1ZSAvKmlzOVBhdGNoKi8sIGZhbHNlIC8qY29udmVydCovKTsKLQotICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgYml0bWFwIGFuZCBjaHVuayBvYmplY3RzLgotICAgICAgICAgICAgICAgIGJtID0gQml0bWFwX0RlbGVnYXRlLmNyZWF0ZUJpdG1hcChuaW5lUGF0Y2guZ2V0SW1hZ2UoKSwgYml0bWFwQ3JlYXRlRmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZW5zaXR5KTsKLSAgICAgICAgICAgICAgICBOaW5lUGF0Y2hDaHVuayBjaHVuayA9IG5pbmVQYXRjaC5nZXRDaHVuaygpOwotCi0gICAgICAgICAgICAgICAgLy8gcHV0IHRoZSBjaHVuayBpbiB0aGUgYml0bWFwCi0gICAgICAgICAgICAgICAgYm0uc2V0TmluZVBhdGNoQ2h1bmsoTmluZVBhdGNoX0RlbGVnYXRlLnNlcmlhbGl6ZShjaHVuaykpOwotCi0gICAgICAgICAgICAgICAgLy8gcmVhZCB0aGUgcGFkZGluZwotICAgICAgICAgICAgICAgIGludFtdIHBhZGRpbmdhcnJheSA9IGNodW5rLmdldFBhZGRpbmcoKTsKLSAgICAgICAgICAgICAgICBwYWRkaW5nLmxlZnQgPSBwYWRkaW5nYXJyYXlbMF07Ci0gICAgICAgICAgICAgICAgcGFkZGluZy50b3AgPSBwYWRkaW5nYXJyYXlbMV07Ci0gICAgICAgICAgICAgICAgcGFkZGluZy5yaWdodCA9IHBhZGRpbmdhcnJheVsyXTsKLSAgICAgICAgICAgICAgICBwYWRkaW5nLmJvdHRvbSA9IHBhZGRpbmdhcnJheVszXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gbG9hZCB0aGUgYml0bWFwIGRpcmVjdGx5LgotICAgICAgICAgICAgICAgIGJtID0gQml0bWFwX0RlbGVnYXRlLmNyZWF0ZUJpdG1hcChpcywgYml0bWFwQ3JlYXRlRmxhZ3MsIGRlbnNpdHkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IobnVsbCwiRmFpbGVkIHRvIGxvYWQgaW1hZ2UiICwgZSwgbnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYm07Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIEJpdG1hcCBuYXRpdmVEZWNvZGVGaWxlRGVzY3JpcHRvcihGaWxlRGVzY3JpcHRvciBmZCwKLSAgICAgICAgICAgIFJlY3QgcGFkZGluZywgT3B0aW9ucyBvcHRzKSB7Ci0gICAgICAgIG9wdHMuaW5CaXRtYXAgPSBudWxsOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgQml0bWFwIG5hdGl2ZURlY29kZUFzc2V0KGludCBhc3NldCwgUmVjdCBwYWRkaW5nLCBPcHRpb25zIG9wdHMpIHsKLSAgICAgICAgb3B0cy5pbkJpdG1hcCA9IG51bGw7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBCaXRtYXAgbmF0aXZlRGVjb2RlQnl0ZUFycmF5KGJ5dGVbXSBkYXRhLCBpbnQgb2Zmc2V0LAotICAgICAgICAgICAgaW50IGxlbmd0aCwgT3B0aW9ucyBvcHRzKSB7Ci0gICAgICAgIG9wdHMuaW5CaXRtYXAgPSBudWxsOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVJc1NlZWthYmxlKEZpbGVEZXNjcmlwdG9yIGZkKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwU2hhZGVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcFNoYWRlcl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWE3NWIwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwU2hhZGVyX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlNoYWRlci5UaWxlTW9kZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwU2hhZGVyCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgQml0bWFwU2hhZGVyIGhhdmUgYmVlbgotICogcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIEJpdG1hcFNoYWRlciBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIHRoaXMgZXh0ZW5kcyB7QGxpbmsgU2hhZGVyX0RlbGVnYXRlfSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LAotICogYXMgYWxsIHRoZSBTaGFkZXIgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyIG93bmVkIGJ5IHtAbGluayBTaGFkZXJfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgU2hhZGVyX0RlbGVnYXRlCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQml0bWFwU2hhZGVyX0RlbGVnYXRlIGV4dGVuZHMgU2hhZGVyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0gICAgcHJpdmF0ZSBqYXZhLmF3dC5QYWludCBtSmF2YVBhaW50OwotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGphdmEuYXd0LlBhaW50IGdldEphdmFQYWludCgpIHsKLSAgICAgICAgcmV0dXJuIG1KYXZhUGFpbnQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKSB7Ci0gICAgICAgIC8vIG5vIG1lc3NhZ2Ugc2luY2UgaXNTdXBwb3J0ZWQgcmV0dXJucyB0cnVlOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ3JlYXRlKGludCBuYXRpdmVfYml0bWFwLCBpbnQgc2hhZGVyVGlsZU1vZGVYLAotICAgICAgICAgICAgaW50IHNoYWRlclRpbGVNb2RlWSkgewotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgYml0bWFwID0gQml0bWFwX0RlbGVnYXRlLmdldERlbGVnYXRlKG5hdGl2ZV9iaXRtYXApOwotICAgICAgICBpZiAoYml0bWFwID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgQml0bWFwU2hhZGVyX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IEJpdG1hcFNoYWRlcl9EZWxlZ2F0ZSgKLSAgICAgICAgICAgICAgICBiaXRtYXAuZ2V0SW1hZ2UoKSwKLSAgICAgICAgICAgICAgICBTaGFkZXJfRGVsZWdhdGUuZ2V0VGlsZU1vZGUoc2hhZGVyVGlsZU1vZGVYKSwKLSAgICAgICAgICAgICAgICBTaGFkZXJfRGVsZWdhdGUuZ2V0VGlsZU1vZGUoc2hhZGVyVGlsZU1vZGVZKSk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVQb3N0Q3JlYXRlKGludCBuYXRpdmVfc2hhZGVyLCBpbnQgbmF0aXZlX2JpdG1hcCwKLSAgICAgICAgICAgIGludCBzaGFkZXJUaWxlTW9kZVgsIGludCBzaGFkZXJUaWxlTW9kZVkpIHsKLSAgICAgICAgLy8gcGFzcywgbm90IG5lZWRlZC4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIHByaXZhdGUgQml0bWFwU2hhZGVyX0RlbGVnYXRlKGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UgaW1hZ2UsCi0gICAgICAgICAgICBUaWxlTW9kZSB0aWxlTW9kZVgsIFRpbGVNb2RlIHRpbGVNb2RlWSkgewotICAgICAgICBtSmF2YVBhaW50ID0gbmV3IEJpdG1hcFNoYWRlclBhaW50KGltYWdlLCB0aWxlTW9kZVgsIHRpbGVNb2RlWSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBCaXRtYXBTaGFkZXJQYWludCBpbXBsZW1lbnRzIGphdmEuYXd0LlBhaW50IHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlIG1JbWFnZTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBUaWxlTW9kZSBtVGlsZU1vZGVYOwotICAgICAgICBwcml2YXRlIGZpbmFsIFRpbGVNb2RlIG1UaWxlTW9kZVk7Ci0KLSAgICAgICAgQml0bWFwU2hhZGVyUGFpbnQoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSBpbWFnZSwKLSAgICAgICAgICAgICAgICBUaWxlTW9kZSB0aWxlTW9kZVgsIFRpbGVNb2RlIHRpbGVNb2RlWSkgewotICAgICAgICAgICAgbUltYWdlID0gaW1hZ2U7Ci0gICAgICAgICAgICBtVGlsZU1vZGVYID0gdGlsZU1vZGVYOwotICAgICAgICAgICAgbVRpbGVNb2RlWSA9IHRpbGVNb2RlWTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgamF2YS5hd3QuUGFpbnRDb250ZXh0IGNyZWF0ZUNvbnRleHQoCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuaW1hZ2UuQ29sb3JNb2RlbCAgICAgIGNvbG9yTW9kZWwsCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuUmVjdGFuZ2xlICAgICAgICAgICAgIGRldmljZUJvdW5kcywKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5nZW9tLlJlY3RhbmdsZTJEICAgICAgdXNlckJvdW5kcywKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSAgeGZvcm0sCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuUmVuZGVyaW5nSGludHMgICAgICAgIGhpbnRzKSB7Ci0KLSAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGNhbnZhc01hdHJpeDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY2FudmFzTWF0cml4ID0geGZvcm0uY3JlYXRlSW52ZXJzZSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5hd3QuZ2VvbS5Ob25pbnZlcnRpYmxlVHJhbnNmb3JtRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfTUFUUklYX0lOVkVSU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGludmVyc2UgbWF0cml4IGluIEJpdG1hcFNoYWRlciIsIGUsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgIGNhbnZhc01hdHJpeCA9IG5ldyBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBsb2NhbE1hdHJpeCA9IGdldExvY2FsTWF0cml4KCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGxvY2FsTWF0cml4ID0gbG9jYWxNYXRyaXguY3JlYXRlSW52ZXJzZSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5hd3QuZ2VvbS5Ob25pbnZlcnRpYmxlVHJhbnNmb3JtRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfTUFUUklYX0lOVkVSU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGludmVyc2UgbWF0cml4IGluIEJpdG1hcFNoYWRlciIsIGUsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgIGxvY2FsTWF0cml4ID0gbmV3IGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgQml0bWFwU2hhZGVyQ29udGV4dChjYW52YXNNYXRyaXgsIGxvY2FsTWF0cml4LCBjb2xvck1vZGVsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgY2xhc3MgQml0bWFwU2hhZGVyQ29udGV4dCBpbXBsZW1lbnRzIGphdmEuYXd0LlBhaW50Q29udGV4dCB7Ci0KLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gbUNhbnZhc01hdHJpeDsKLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gbUxvY2FsTWF0cml4OwotICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsIG1Db2xvck1vZGVsOwotCi0gICAgICAgICAgICBwdWJsaWMgQml0bWFwU2hhZGVyQ29udGV4dCgKLSAgICAgICAgICAgICAgICAgICAgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gY2FudmFzTWF0cml4LAotICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBsb2NhbE1hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgamF2YS5hd3QuaW1hZ2UuQ29sb3JNb2RlbCBjb2xvck1vZGVsKSB7Ci0gICAgICAgICAgICAgICAgbUNhbnZhc01hdHJpeCA9IGNhbnZhc01hdHJpeDsKLSAgICAgICAgICAgICAgICBtTG9jYWxNYXRyaXggPSBsb2NhbE1hdHJpeDsKLSAgICAgICAgICAgICAgICBtQ29sb3JNb2RlbCA9IGNvbG9yTW9kZWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgamF2YS5hd3QuaW1hZ2UuQ29sb3JNb2RlbCBnZXRDb2xvck1vZGVsKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtQ29sb3JNb2RlbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgamF2YS5hd3QuaW1hZ2UuUmFzdGVyIGdldFJhc3RlcihpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkgewotICAgICAgICAgICAgICAgIGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UgaW1hZ2UgPSBuZXcgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSh3LCBoLAotICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCKTsKLQotICAgICAgICAgICAgICAgIGludFtdIGRhdGEgPSBuZXcgaW50W3cqaF07Ci0KLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICAgICAgICAgIGZsb2F0W10gcHQxID0gbmV3IGZsb2F0WzJdOwotICAgICAgICAgICAgICAgIGZsb2F0W10gcHQyID0gbmV3IGZsb2F0WzJdOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGl5ID0gMCA7IGl5IDwgaCA7IGl5KyspIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaXggPSAwIDsgaXggPCB3IDsgaXgrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRoZSBjYW52YXMgdHJhbnNmb3JtCi0gICAgICAgICAgICAgICAgICAgICAgICBwdDFbMF0gPSB4ICsgaXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdDFbMV0gPSB5ICsgaXk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQ2FudmFzTWF0cml4LnRyYW5zZm9ybShwdDEsIDAsIHB0MiwgMCwgMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSB0aGUgbG9jYWwgbWF0cml4LgotICAgICAgICAgICAgICAgICAgICAgICAgcHQxWzBdID0gcHQyWzBdOwotICAgICAgICAgICAgICAgICAgICAgICAgcHQxWzFdID0gcHQyWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgbUxvY2FsTWF0cml4LnRyYW5zZm9ybShwdDEsIDAsIHB0MiwgMCwgMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaW5kZXgrK10gPSBnZXRDb2xvcihwdDJbMF0sIHB0MlsxXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpbWFnZS5zZXRSR0IoMCAvKnN0YXJ0WCovLCAwIC8qc3RhcnRZKi8sIHcsIGgsIGRhdGEsIDAgLypvZmZzZXQqLywgdyAvKnNjYW5zaXplKi8pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlLmdldFJhc3RlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgYSBjb2xvciBmb3IgYW4gYXJiaXRyYXJ5IHBvaW50LgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBpbnQgZ2V0Q29sb3IoZmxvYXQgZngsIGZsb2F0IGZ5KSB7Ci0gICAgICAgICAgICBpbnQgeCA9IGdldENvb3JkaW5hdGUoTWF0aC5yb3VuZChmeCksIG1JbWFnZS5nZXRXaWR0aCgpLCBtVGlsZU1vZGVYKTsKLSAgICAgICAgICAgIGludCB5ID0gZ2V0Q29vcmRpbmF0ZShNYXRoLnJvdW5kKGZ5KSwgbUltYWdlLmdldEhlaWdodCgpLCBtVGlsZU1vZGVZKTsKLQotICAgICAgICAgICAgcmV0dXJuIG1JbWFnZS5nZXRSR0IoeCwgeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGludCBnZXRDb29yZGluYXRlKGludCBpLCBpbnQgc2l6ZSwgVGlsZU1vZGUgbW9kZSkgewotICAgICAgICAgICAgaWYgKGkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ0xBTVA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFJFUEVBVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBzaXplIC0gMSAtICgtaSAlIHNpemUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTUlSUk9SOgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgcG9zaXRpdmUgc2lkZSwganVzdCBtYWtlIHRoZSB2YWx1ZSBwb3NpdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QuCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gLWk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSBpIC8gc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICUgc2l6ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjb3VudCAlIDIpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gc2l6ZSAtIDEgLSBpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChpID49IHNpemUpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDTEFNUDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBzaXplIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFJFUEVBVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICUgc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIE1JUlJPUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCA9IGkgLyBzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgJSBzaXplOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNvdW50ICUgMikgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBzaXplIC0gMSAtIGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBnZXRUcmFuc3BhcmVuY3koKSB7Ci0gICAgICAgICAgICByZXR1cm4gamF2YS5hd3QuUGFpbnQuVFJBTlNMVUNFTlQ7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNkMmJhMS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLkRlbnNpdHk7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAuQ29uZmlnOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwotCi1pbXBvcnQgamF2YS5hd3QuR3JhcGhpY3MyRDsKLWltcG9ydCBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uaW8uQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LmltYWdlaW8uSW1hZ2VJTzsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgQml0bWFwIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIEJpdG1hcCBjbGFzcy4KLSAqCi0gKiBAc2VlIERlbGVnYXRlTWFuYWdlcgotICoKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEJpdG1hcF9EZWxlZ2F0ZSB7Ci0KLSAgICBwdWJsaWMgZW51bSBCaXRtYXBDcmVhdGVGbGFncyB7Ci0gICAgICAgIFBSRU1VTFRJUExJRUQsIE1VVEFCTEUKLSAgICB9Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIG1hbmFnZXIgLS0tLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIERlbGVnYXRlTWFuYWdlcjxCaXRtYXBfRGVsZWdhdGU+IHNNYW5hZ2VyID0KLSAgICAgICAgICAgIG5ldyBEZWxlZ2F0ZU1hbmFnZXI8Qml0bWFwX0RlbGVnYXRlPihCaXRtYXBfRGVsZWdhdGUuY2xhc3MpOwotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBoZWxwZXIgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotICAgIHByaXZhdGUgZmluYWwgQ29uZmlnIG1Db25maWc7Ci0gICAgcHJpdmF0ZSBCdWZmZXJlZEltYWdlIG1JbWFnZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbUhhc0FscGhhID0gdHJ1ZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbUhhc01pcE1hcCA9IGZhbHNlOyAgICAgIC8vIFRPRE86IGNoZWNrIHRoZSBkZWZhdWx0LgotICAgIHByaXZhdGUgaW50IG1HZW5lcmF0aW9uSWQgPSAwOwotCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBuYXRpdmUgZGVsZWdhdGUgYXNzb2NpYXRlZCB0byBhIGdpdmVuIHtAbGluayBCaXRtYXBfRGVsZWdhdGV9IG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEJpdG1hcF9EZWxlZ2F0ZSBnZXREZWxlZ2F0ZShCaXRtYXAgYml0bWFwKSB7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5nZXREZWxlZ2F0ZShiaXRtYXAubU5hdGl2ZUJpdG1hcCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbmF0aXZlIGRlbGVnYXRlIGFzc29jaWF0ZWQgdG8gYSBnaXZlbiBhbiBpbnQgcmVmZXJlbmNpbmcgYSB7QGxpbmsgQml0bWFwfSBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCaXRtYXBfRGVsZWdhdGUgZ2V0RGVsZWdhdGUoaW50IG5hdGl2ZV9iaXRtYXApIHsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9iaXRtYXApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSB7QGxpbmsgQml0bWFwfSBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiBmaWxlIGNvbnRlbnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5wdXQgdGhlIGZpbGUgZnJvbSB3aGljaCB0byByZWFkIHRoZSBiaXRtYXAgY29udGVudAotICAgICAqIEBwYXJhbSBpc011dGFibGUgd2hldGhlciB0aGUgYml0bWFwIGlzIG11dGFibGUKLSAgICAgKiBAcGFyYW0gZGVuc2l0eSB0aGUgZGVuc2l0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGJpdG1hcAotICAgICAqCi0gICAgICogQHNlZSBCaXRtYXAjaXNNdXRhYmxlKCkKLSAgICAgKiBAc2VlIEJpdG1hcCNnZXREZW5zaXR5KCkKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEJpdG1hcCBjcmVhdGVCaXRtYXAoRmlsZSBpbnB1dCwgYm9vbGVhbiBpc011dGFibGUsIERlbnNpdHkgZGVuc2l0eSkKLSAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVCaXRtYXAoaW5wdXQsIGdldFByZW11bHRpcGxpZWRCaXRtYXBDcmVhdGVGbGFncyhpc011dGFibGUpLCBkZW5zaXR5KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEge0BsaW5rIEJpdG1hcH0gaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gZmlsZSBjb250ZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIGlucHV0IHRoZSBmaWxlIGZyb20gd2hpY2ggdG8gcmVhZCB0aGUgYml0bWFwIGNvbnRlbnQKLSAgICAgKiBAcGFyYW0gZGVuc2l0eSB0aGUgZGVuc2l0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGJpdG1hcAotICAgICAqCi0gICAgICogQHNlZSBCaXRtYXAjaXNQcmVtdWx0aXBsaWVkKCkKLSAgICAgKiBAc2VlIEJpdG1hcCNpc011dGFibGUoKQotICAgICAqIEBzZWUgQml0bWFwI2dldERlbnNpdHkoKQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQml0bWFwIGNyZWF0ZUJpdG1hcChGaWxlIGlucHV0LCBTZXQ8Qml0bWFwQ3JlYXRlRmxhZ3M+IGNyZWF0ZUZsYWdzLAotICAgICAgICAgICAgRGVuc2l0eSBkZW5zaXR5KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAvLyBjcmVhdGUgYSBkZWxlZ2F0ZSB3aXRoIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlLgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBuZXcgQml0bWFwX0RlbGVnYXRlKEltYWdlSU8ucmVhZChpbnB1dCksIENvbmZpZy5BUkdCXzg4ODgpOwotCi0gICAgICAgIHJldHVybiBjcmVhdGVCaXRtYXAoZGVsZWdhdGUsIGNyZWF0ZUZsYWdzLCBkZW5zaXR5LmdldERwaVZhbHVlKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSB7QGxpbmsgQml0bWFwfSBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiBzdHJlYW0gY29udGVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbnB1dCB0aGUgc3RyZWFtIGZyb20gd2hpY2ggdG8gcmVhZCB0aGUgYml0bWFwIGNvbnRlbnQKLSAgICAgKiBAcGFyYW0gaXNNdXRhYmxlIHdoZXRoZXIgdGhlIGJpdG1hcCBpcyBtdXRhYmxlCi0gICAgICogQHBhcmFtIGRlbnNpdHkgdGhlIGRlbnNpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBiaXRtYXAKLSAgICAgKgotICAgICAqIEBzZWUgQml0bWFwI2lzTXV0YWJsZSgpCi0gICAgICogQHNlZSBCaXRtYXAjZ2V0RGVuc2l0eSgpCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCaXRtYXAgY3JlYXRlQml0bWFwKElucHV0U3RyZWFtIGlucHV0LCBib29sZWFuIGlzTXV0YWJsZSwgRGVuc2l0eSBkZW5zaXR5KQotICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcChpbnB1dCwgZ2V0UHJlbXVsdGlwbGllZEJpdG1hcENyZWF0ZUZsYWdzKGlzTXV0YWJsZSksIGRlbnNpdHkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSB7QGxpbmsgQml0bWFwfSBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiBzdHJlYW0gY29udGVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbnB1dCB0aGUgc3RyZWFtIGZyb20gd2hpY2ggdG8gcmVhZCB0aGUgYml0bWFwIGNvbnRlbnQKLSAgICAgKiBAcGFyYW0gY3JlYXRlRmxhZ3MKLSAgICAgKiBAcGFyYW0gZGVuc2l0eSB0aGUgZGVuc2l0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGJpdG1hcAotICAgICAqCi0gICAgICogQHNlZSBCaXRtYXAjaXNQcmVtdWx0aXBsaWVkKCkKLSAgICAgKiBAc2VlIEJpdG1hcCNpc011dGFibGUoKQotICAgICAqIEBzZWUgQml0bWFwI2dldERlbnNpdHkoKQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQml0bWFwIGNyZWF0ZUJpdG1hcChJbnB1dFN0cmVhbSBpbnB1dCwgU2V0PEJpdG1hcENyZWF0ZUZsYWdzPiBjcmVhdGVGbGFncywKLSAgICAgICAgICAgIERlbnNpdHkgZGVuc2l0eSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gY3JlYXRlIGEgZGVsZWdhdGUgd2l0aCB0aGUgY29udGVudCBvZiB0aGUgc3RyZWFtLgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBuZXcgQml0bWFwX0RlbGVnYXRlKEltYWdlSU8ucmVhZChpbnB1dCksIENvbmZpZy5BUkdCXzg4ODgpOwotCi0gICAgICAgIHJldHVybiBjcmVhdGVCaXRtYXAoZGVsZWdhdGUsIGNyZWF0ZUZsYWdzLCBkZW5zaXR5LmdldERwaVZhbHVlKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSB7QGxpbmsgQml0bWFwfSBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB7QGxpbmsgQnVmZmVyZWRJbWFnZX0KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbWFnZSB0aGUgYml0bWFwIGNvbnRlbnQKLSAgICAgKiBAcGFyYW0gaXNNdXRhYmxlIHdoZXRoZXIgdGhlIGJpdG1hcCBpcyBtdXRhYmxlCi0gICAgICogQHBhcmFtIGRlbnNpdHkgdGhlIGRlbnNpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBiaXRtYXAKLSAgICAgKgotICAgICAqIEBzZWUgQml0bWFwI2lzTXV0YWJsZSgpCi0gICAgICogQHNlZSBCaXRtYXAjZ2V0RGVuc2l0eSgpCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCaXRtYXAgY3JlYXRlQml0bWFwKEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UsIGJvb2xlYW4gaXNNdXRhYmxlLAotICAgICAgICAgICAgRGVuc2l0eSBkZW5zaXR5KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICByZXR1cm4gY3JlYXRlQml0bWFwKGltYWdlLCBnZXRQcmVtdWx0aXBsaWVkQml0bWFwQ3JlYXRlRmxhZ3MoaXNNdXRhYmxlKSwgZGVuc2l0eSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHtAbGluayBCaXRtYXB9IGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHtAbGluayBCdWZmZXJlZEltYWdlfQotICAgICAqCi0gICAgICogQHBhcmFtIGltYWdlIHRoZSBiaXRtYXAgY29udGVudAotICAgICAqIEBwYXJhbSBjcmVhdGVGbGFncwotICAgICAqIEBwYXJhbSBkZW5zaXR5IHRoZSBkZW5zaXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYml0bWFwCi0gICAgICoKLSAgICAgKiBAc2VlIEJpdG1hcCNpc1ByZW11bHRpcGxpZWQoKQotICAgICAqIEBzZWUgQml0bWFwI2lzTXV0YWJsZSgpCi0gICAgICogQHNlZSBCaXRtYXAjZ2V0RGVuc2l0eSgpCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCaXRtYXAgY3JlYXRlQml0bWFwKEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UsIFNldDxCaXRtYXBDcmVhdGVGbGFncz4gY3JlYXRlRmxhZ3MsCi0gICAgICAgICAgICBEZW5zaXR5IGRlbnNpdHkpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIGNyZWF0ZSBhIGRlbGVnYXRlIHdpdGggdGhlIGdpdmVuIGltYWdlLgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBuZXcgQml0bWFwX0RlbGVnYXRlKGltYWdlLCBDb25maWcuQVJHQl84ODg4KTsKLQotICAgICAgICByZXR1cm4gY3JlYXRlQml0bWFwKGRlbGVnYXRlLCBjcmVhdGVGbGFncywgZGVuc2l0eS5nZXREcGlWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgQnVmZmVyZWRJbWFnZX0gdXNlZCBieSB0aGUgZGVsZWdhdGUgb2YgdGhlIGdpdmVuIHtAbGluayBCaXRtYXB9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQnVmZmVyZWRJbWFnZSBnZXRJbWFnZShCaXRtYXAgYml0bWFwKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoYml0bWFwLm1OYXRpdmVCaXRtYXApOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubUltYWdlOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldEJ1ZmZlcmVkSW1hZ2VUeXBlKGludCBuYXRpdmVCaXRtYXBDb25maWcpIHsKLSAgICAgICAgc3dpdGNoIChDb25maWcubmF0aXZlVG9Db25maWcobmF0aXZlQml0bWFwQ29uZmlnKSkgewotICAgICAgICAgICAgY2FzZSBBTFBIQV84OgotICAgICAgICAgICAgICAgIHJldHVybiBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0I7Ci0gICAgICAgICAgICBjYXNlIFJHQl81NjU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQjsKLSAgICAgICAgICAgIGNhc2UgQVJHQl80NDQ0OgotICAgICAgICAgICAgICAgIHJldHVybiBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0I7Ci0gICAgICAgICAgICBjYXNlIEFSR0JfODg4ODoKLSAgICAgICAgICAgICAgICByZXR1cm4gQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgQnVmZmVyZWRJbWFnZX0gdXNlZCBieSB0aGUgZGVsZWdhdGUgb2YgdGhlIGdpdmVuIHtAbGluayBCaXRtYXB9LgotICAgICAqLwotICAgIHB1YmxpYyBCdWZmZXJlZEltYWdlIGdldEltYWdlKCkgewotICAgICAgICByZXR1cm4gbUltYWdlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIEFuZHJvaWQgYml0bWFwIGNvbmZpZy4gTm90ZSB0aGF0IHRoaXMgbm90IHRoZSBjb25maWcgb2YgdGhlIHVuZGVybHlpbmcKLSAgICAgKiBKYXZhMkQgYml0bWFwLgotICAgICAqLwotICAgIHB1YmxpYyBDb25maWcgZ2V0Q29uZmlnKCkgewotICAgICAgICByZXR1cm4gbUNvbmZpZzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBoYXNBbHBoYSByZW5kZXJpbmcgaGludAotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgYml0bWFwIGFscGhhIHNob3VsZCBiZSB1c2VkIGF0IHJlbmRlciB0aW1lCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaGFzQWxwaGEoKSB7Ci0gICAgICAgIHJldHVybiBtSGFzQWxwaGEgJiYgbUNvbmZpZyAhPSBDb25maWcuUkdCXzU2NTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNNaXBNYXAoKSB7Ci0gICAgICAgIC8vIFRPRE86IGNoZWNrIGlmIG1vcmUgY2hlY2tzIGFyZSByZXF1aXJlZCBhcyBpbiBoYXNBbHBoYS4KLSAgICAgICAgcmV0dXJuIG1IYXNNaXBNYXA7Ci0gICAgfQotICAgIC8qKgotICAgICAqIFVwZGF0ZSB0aGUgZ2VuZXJhdGlvbklkLgotICAgICAqCi0gICAgICogQHNlZSBCaXRtYXAjZ2V0R2VuZXJhdGlvbklkKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjaGFuZ2UoKSB7Ci0gICAgICAgIG1HZW5lcmF0aW9uSWQrKzsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBCaXRtYXAgbmF0aXZlQ3JlYXRlKGludFtdIGNvbG9ycywgaW50IG9mZnNldCwgaW50IHN0cmlkZSwgaW50IHdpZHRoLAotICAgICAgICAgICAgaW50IGhlaWdodCwgaW50IG5hdGl2ZUNvbmZpZywgYm9vbGVhbiBpc011dGFibGUpIHsKLSAgICAgICAgaW50IGltYWdlVHlwZSA9IGdldEJ1ZmZlcmVkSW1hZ2VUeXBlKG5hdGl2ZUNvbmZpZyk7Ci0KLSAgICAgICAgLy8gY3JlYXRlIHRoZSBpbWFnZQotICAgICAgICBCdWZmZXJlZEltYWdlIGltYWdlID0gbmV3IEJ1ZmZlcmVkSW1hZ2Uod2lkdGgsIGhlaWdodCwgaW1hZ2VUeXBlKTsKLQotICAgICAgICBpZiAoY29sb3JzICE9IG51bGwpIHsKLSAgICAgICAgICAgIGltYWdlLnNldFJHQigwLCAwLCB3aWR0aCwgaGVpZ2h0LCBjb2xvcnMsIG9mZnNldCwgc3RyaWRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNyZWF0ZSBhIGRlbGVnYXRlIHdpdGggdGhlIGNvbnRlbnQgb2YgdGhlIHN0cmVhbS4KLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlID0gbmV3IEJpdG1hcF9EZWxlZ2F0ZShpbWFnZSwgQ29uZmlnLm5hdGl2ZVRvQ29uZmlnKG5hdGl2ZUNvbmZpZykpOwotCi0gICAgICAgIHJldHVybiBjcmVhdGVCaXRtYXAoZGVsZWdhdGUsIGdldFByZW11bHRpcGxpZWRCaXRtYXBDcmVhdGVGbGFncyhpc011dGFibGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcC5nZXREZWZhdWx0RGVuc2l0eSgpKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgQml0bWFwIG5hdGl2ZUNvcHkoaW50IHNyY0JpdG1hcCwgaW50IG5hdGl2ZUNvbmZpZywgYm9vbGVhbiBpc011dGFibGUpIHsKLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIHNyY0JtcERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoc3JjQml0bWFwKTsKLSAgICAgICAgaWYgKHNyY0JtcERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVmZmVyZWRJbWFnZSBzcmNJbWFnZSA9IHNyY0JtcERlbGVnYXRlLmdldEltYWdlKCk7Ci0KLSAgICAgICAgaW50IHdpZHRoID0gc3JjSW1hZ2UuZ2V0V2lkdGgoKTsKLSAgICAgICAgaW50IGhlaWdodCA9IHNyY0ltYWdlLmdldEhlaWdodCgpOwotCi0gICAgICAgIGludCBpbWFnZVR5cGUgPSBnZXRCdWZmZXJlZEltYWdlVHlwZShuYXRpdmVDb25maWcpOwotCi0gICAgICAgIC8vIGNyZWF0ZSB0aGUgaW1hZ2UKLSAgICAgICAgQnVmZmVyZWRJbWFnZSBpbWFnZSA9IG5ldyBCdWZmZXJlZEltYWdlKHdpZHRoLCBoZWlnaHQsIGltYWdlVHlwZSk7Ci0KLSAgICAgICAgLy8gY29weSB0aGUgc291cmNlIGltYWdlIGludG8gdGhlIGltYWdlLgotICAgICAgICBpbnRbXSBhcmdiID0gbmV3IGludFt3aWR0aCAqIGhlaWdodF07Ci0gICAgICAgIHNyY0ltYWdlLmdldFJHQigwLCAwLCB3aWR0aCwgaGVpZ2h0LCBhcmdiLCAwLCB3aWR0aCk7Ci0gICAgICAgIGltYWdlLnNldFJHQigwLCAwLCB3aWR0aCwgaGVpZ2h0LCBhcmdiLCAwLCB3aWR0aCk7Ci0KLSAgICAgICAgLy8gY3JlYXRlIGEgZGVsZWdhdGUgd2l0aCB0aGUgY29udGVudCBvZiB0aGUgc3RyZWFtLgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBuZXcgQml0bWFwX0RlbGVnYXRlKGltYWdlLCBDb25maWcubmF0aXZlVG9Db25maWcobmF0aXZlQ29uZmlnKSk7Ci0KLSAgICAgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcChkZWxlZ2F0ZSwgZ2V0UHJlbXVsdGlwbGllZEJpdG1hcENyZWF0ZUZsYWdzKGlzTXV0YWJsZSksCi0gICAgICAgICAgICAgICAgQml0bWFwLmdldERlZmF1bHREZW5zaXR5KCkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZURlc3RydWN0b3IoaW50IG5hdGl2ZUJpdG1hcCkgewotICAgICAgICBzTWFuYWdlci5yZW1vdmVKYXZhUmVmZXJlbmNlRm9yKG5hdGl2ZUJpdG1hcCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlUmVjeWNsZShpbnQgbmF0aXZlQml0bWFwKSB7Ci0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IobmF0aXZlQml0bWFwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlUmVjb25maWd1cmUoaW50IG5hdGl2ZUJpdG1hcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICAgICAgaW50IGNvbmZpZywgaW50IGFsbG9jU2l6ZSkgewotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiQml0bWFwLnJlY29uZmlndXJlKCkgaXMgbm90IHN1cHBvcnRlZCIsIG51bGwgLypkYXRhKi8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZUNvbXByZXNzKGludCBuYXRpdmVCaXRtYXAsIGludCBmb3JtYXQsIGludCBxdWFsaXR5LAotICAgICAgICAgICAgT3V0cHV0U3RyZWFtIHN0cmVhbSwgYnl0ZVtdIHRlbXBTdG9yYWdlKSB7Ci0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJCaXRtYXAuY29tcHJlc3MoKSBpcyBub3Qgc3VwcG9ydGVkIiwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZUVyYXNlKGludCBuYXRpdmVCaXRtYXAsIGludCBjb2xvcikgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZUJpdG1hcCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBCdWZmZXJlZEltYWdlIGltYWdlID0gZGVsZWdhdGUubUltYWdlOwotCi0gICAgICAgIEdyYXBoaWNzMkQgZyA9IGltYWdlLmNyZWF0ZUdyYXBoaWNzKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBnLnNldENvbG9yKG5ldyBqYXZhLmF3dC5Db2xvcihjb2xvciwgdHJ1ZSkpOwotCi0gICAgICAgICAgICBnLmZpbGxSZWN0KDAsIDAsIGltYWdlLmdldFdpZHRoKCksIGltYWdlLmdldEhlaWdodCgpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGcuZGlzcG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVSb3dCeXRlcyhpbnQgbmF0aXZlQml0bWFwKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQml0bWFwKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1JbWFnZS5nZXRXaWR0aCgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ29uZmlnKGludCBuYXRpdmVCaXRtYXApIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVCaXRtYXApOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubUNvbmZpZy5uYXRpdmVJbnQ7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlSGFzQWxwaGEoaW50IG5hdGl2ZUJpdG1hcCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZUJpdG1hcCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tSGFzQWxwaGE7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlSGFzTWlwTWFwKGludCBuYXRpdmVCaXRtYXApIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVCaXRtYXApOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubUhhc01pcE1hcDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUdldFBpeGVsKGludCBuYXRpdmVCaXRtYXAsIGludCB4LCBpbnQgeSwKLSAgICAgICAgICAgIGJvb2xlYW4gaXNQcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQml0bWFwKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVE9ETzogU3VwcG9ydCBpc1ByZW11bHRpcGxpZWQuCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tSW1hZ2UuZ2V0UkdCKHgsIHkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZUdldFBpeGVscyhpbnQgbmF0aXZlQml0bWFwLCBpbnRbXSBwaXhlbHMsIGludCBvZmZzZXQsCi0gICAgICAgICAgICBpbnQgc3RyaWRlLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbGVhbiBpc1ByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQml0bWFwKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLmdldEltYWdlKCkuZ2V0UkdCKHgsIHksIHdpZHRoLCBoZWlnaHQsIHBpeGVscywgb2Zmc2V0LCBzdHJpZGUpOwotICAgIH0KLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlU2V0UGl4ZWwoaW50IG5hdGl2ZUJpdG1hcCwgaW50IHgsIGludCB5LCBpbnQgY29sb3IsCi0gICAgICAgICAgICBib29sZWFuIGlzUHJlbXVsdGlwbGllZCkgewotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVCaXRtYXApOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUuZ2V0SW1hZ2UoKS5zZXRSR0IoeCwgeSwgY29sb3IpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZVNldFBpeGVscyhpbnQgbmF0aXZlQml0bWFwLCBpbnRbXSBjb2xvcnMsIGludCBvZmZzZXQsCi0gICAgICAgICAgICBpbnQgc3RyaWRlLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbGVhbiBpc1ByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQml0bWFwKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLmdldEltYWdlKCkuc2V0UkdCKHgsIHksIHdpZHRoLCBoZWlnaHQsIGNvbG9ycywgb2Zmc2V0LCBzdHJpZGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZUNvcHlQaXhlbHNUb0J1ZmZlcihpbnQgbmF0aXZlQml0bWFwLCBCdWZmZXIgZHN0KSB7Ci0gICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBuYXRpdmUgZGVsZWdhdGUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJCaXRtYXAuY29weVBpeGVsc1RvQnVmZmVyIGlzIG5vdCBzdXBwb3J0ZWQuIiwgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlQ29weVBpeGVsc0Zyb21CdWZmZXIoaW50IG5iLCBCdWZmZXIgc3JjKSB7Ci0gICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBuYXRpdmUgZGVsZWdhdGUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJCaXRtYXAuY29weVBpeGVsc0Zyb21CdWZmZXIgaXMgbm90IHN1cHBvcnRlZC4iLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUdlbmVyYXRpb25JZChpbnQgbmF0aXZlQml0bWFwKSB7Ci0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZUJpdG1hcCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tR2VuZXJhdGlvbklkOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBCaXRtYXAgbmF0aXZlQ3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgcCkgewotICAgICAgICAvLyBUaGlzIGlzIG9ubHkgY2FsbGVkIGJ5IEJpdG1hcC5DUkVBVE9SIChQYXJjZWxhYmxlLkNyZWF0b3I8Qml0bWFwPiksIHdoaWNoIGlzIG9ubHkKLSAgICAgICAgLy8gdXNlZCBkdXJpbmcgYWlkbCBjYWxsIHNvIHJlYWxseSB0aGlzIHNob3VsZCBub3QgYmUgY2FsbGVkLgotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiQUlETCBpcyBub3Qgc3VwcG9yZWQsIGFuZCB0aGVyZWZvcmUgQml0bWFwcyBjYW5ub3QgYmUgY3JlYXRlZCBmcm9tIHBhcmNlbHMuIiwKLSAgICAgICAgICAgICAgICBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlV3JpdGVUb1BhcmNlbChpbnQgbmF0aXZlQml0bWFwLCBib29sZWFuIGlzTXV0YWJsZSwKLSAgICAgICAgICAgIGludCBkZW5zaXR5LCBQYXJjZWwgcCkgewotICAgICAgICAvLyBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gc2VuZGluZyBhIGJpdG1hcCB0aHJvdWdoIGFpZGwsIHNvIHJlYWxseSB0aGlzIHNob3VsZCBub3QKLSAgICAgICAgLy8gYmUgY2FsbGVkLgotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiQUlETCBpcyBub3Qgc3VwcG9yZWQsIGFuZCB0aGVyZWZvcmUgQml0bWFwcyBjYW5ub3QgYmUgd3JpdHRlbiB0byBwYXJjZWxzLiIsCi0gICAgICAgICAgICAgICAgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgQml0bWFwIG5hdGl2ZUV4dHJhY3RBbHBoYShpbnQgbmF0aXZlQml0bWFwLCBpbnQgbmF0aXZlUGFpbnQsCi0gICAgICAgICAgICBpbnRbXSBvZmZzZXRYWSkgewotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgYml0bWFwID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQml0bWFwKTsKLSAgICAgICAgaWYgKGJpdG1hcCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgcGFpbnQgd2hpY2ggY2FuIGJlIG51bGwgaWYgbmF0aXZlUGFpbnQgaXMgMC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgcGFpbnQgPSBQYWludF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShuYXRpdmVQYWludCk7Ci0KLSAgICAgICAgaWYgKHBhaW50ICE9IG51bGwgJiYgcGFpbnQuZ2V0TWFza0ZpbHRlcigpICE9IG51bGwpIHsKLSAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19NQVNLRklMVEVSLAotICAgICAgICAgICAgICAgICAgICAiTWFza0ZpbHRlciBub3Qgc3VwcG9ydGVkIGluIEJpdG1hcC5leHRyYWN0QWxwaGEiLAotICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBhbHBoYSA9IHBhaW50ICE9IG51bGwgPyBwYWludC5nZXRBbHBoYSgpIDogMHhGRjsKLSAgICAgICAgQnVmZmVyZWRJbWFnZSBpbWFnZSA9IGNyZWF0ZUNvcHkoYml0bWFwLmdldEltYWdlKCksIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQiwgYWxwaGEpOwotCi0gICAgICAgIC8vIGNyZWF0ZSB0aGUgZGVsZWdhdGUuIFRoZSBhY3R1YWwgQml0bWFwIGNvbmZpZyBpcyBvbmx5IGFuIGFscGhhIGNoYW5uZWwKLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlID0gbmV3IEJpdG1hcF9EZWxlZ2F0ZShpbWFnZSwgQ29uZmlnLkFMUEhBXzgpOwotCi0gICAgICAgIC8vIHRoZSBkZW5zaXR5IGRvZXNuJ3QgbWF0dGVyLCBpdCdzIHNldCBieSB0aGUgSmF2YSBtZXRob2QuCi0gICAgICAgIHJldHVybiBjcmVhdGVCaXRtYXAoZGVsZWdhdGUsIEVudW1TZXQub2YoQml0bWFwQ3JlYXRlRmxhZ3MuTVVUQUJMRSksCi0gICAgICAgICAgICAgICAgRGVuc2l0eS5ERUZBVUxUX0RFTlNJVFkgLypkZW5zaXR5Ki8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZVByZXBhcmVUb0RyYXcoaW50IG5hdGl2ZUJpdG1hcCkgewotICAgICAgICAvLyBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVTZXRIYXNBbHBoYShpbnQgbmF0aXZlQml0bWFwLCBib29sZWFuIGhhc0FscGhhKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQml0bWFwKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLm1IYXNBbHBoYSA9IGhhc0FscGhhOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZVNldEhhc01pcE1hcChpbnQgbmF0aXZlQml0bWFwLCBib29sZWFuIGhhc01pcE1hcCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZUJpdG1hcCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tSGFzTWlwTWFwID0gaGFzTWlwTWFwOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZVNhbWVBcyhpbnQgbmIwLCBpbnQgbmIxKSB7Ci0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBkZWxlZ2F0ZTEgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYjApOwotICAgICAgICBpZiAoZGVsZWdhdGUxID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBkZWxlZ2F0ZTIgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYjEpOwotICAgICAgICBpZiAoZGVsZWdhdGUyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UxID0gZGVsZWdhdGUxLmdldEltYWdlKCk7Ci0gICAgICAgIEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UyID0gZGVsZWdhdGUyLmdldEltYWdlKCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZTEubUNvbmZpZyAhPSBkZWxlZ2F0ZTIubUNvbmZpZyB8fAotICAgICAgICAgICAgICAgIGltYWdlMS5nZXRXaWR0aCgpICE9IGltYWdlMi5nZXRXaWR0aCgpIHx8Ci0gICAgICAgICAgICAgICAgaW1hZ2UxLmdldEhlaWdodCgpICE9IGltYWdlMi5nZXRIZWlnaHQoKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBpbnRlcm5hbCBkYXRhCi0gICAgICAgIGludCB3ID0gaW1hZ2UxLmdldFdpZHRoKCk7Ci0gICAgICAgIGludCBoID0gaW1hZ2UyLmdldEhlaWdodCgpOwotICAgICAgICBpbnRbXSBhcmdiMSA9IG5ldyBpbnRbdypoXTsKLSAgICAgICAgaW50W10gYXJnYjIgPSBuZXcgaW50W3cqaF07Ci0KLSAgICAgICAgaW1hZ2UxLmdldFJHQigwLCAwLCB3LCBoLCBhcmdiMSwgMCwgdyk7Ci0gICAgICAgIGltYWdlMi5nZXRSR0IoMCwgMCwgdywgaCwgYXJnYjIsIDAsIHcpOwotCi0gICAgICAgIC8vIGNvbXBhcmVzCi0gICAgICAgIGlmIChkZWxlZ2F0ZTEubUNvbmZpZyA9PSBDb25maWcuQUxQSEFfOCkgewotICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcGFyZSB0aGUgYWxwaGEgY2hhbm5lbCBhcyB0aGUgcmVzdCBpcyBnYXJiYWdlLgotICAgICAgICAgICAgZmluYWwgaW50IGxlbmd0aCA9IHcqaDsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGxlbmd0aCA7IGkrKykgewotICAgICAgICAgICAgICAgIGlmICgoYXJnYjFbaV0gJiAweEZGMDAwMDAwKSAhPSAoYXJnYjJbaV0gJiAweEZGMDAwMDAwKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gQXJyYXlzLmVxdWFscyhhcmdiMSwgYXJnYjIpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwcml2YXRlIEJpdG1hcF9EZWxlZ2F0ZShCdWZmZXJlZEltYWdlIGltYWdlLCBDb25maWcgY29uZmlnKSB7Ci0gICAgICAgIG1JbWFnZSA9IGltYWdlOwotICAgICAgICBtQ29uZmlnID0gY29uZmlnOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIEJpdG1hcCBjcmVhdGVCaXRtYXAoQml0bWFwX0RlbGVnYXRlIGRlbGVnYXRlLAotICAgICAgICAgICAgU2V0PEJpdG1hcENyZWF0ZUZsYWdzPiBjcmVhdGVGbGFncywgaW50IGRlbnNpdHkpIHsKLSAgICAgICAgLy8gZ2V0IGl0cyBuYXRpdmVfaW50Ci0gICAgICAgIGludCBuYXRpdmVJbnQgPSBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShkZWxlZ2F0ZSk7Ci0KLSAgICAgICAgaW50IHdpZHRoID0gZGVsZWdhdGUubUltYWdlLmdldFdpZHRoKCk7Ci0gICAgICAgIGludCBoZWlnaHQgPSBkZWxlZ2F0ZS5tSW1hZ2UuZ2V0SGVpZ2h0KCk7Ci0gICAgICAgIGJvb2xlYW4gaXNNdXRhYmxlID0gY3JlYXRlRmxhZ3MuY29udGFpbnMoQml0bWFwQ3JlYXRlRmxhZ3MuTVVUQUJMRSk7Ci0gICAgICAgIGJvb2xlYW4gaXNQcmVtdWx0aXBsaWVkID0gY3JlYXRlRmxhZ3MuY29udGFpbnMoQml0bWFwQ3JlYXRlRmxhZ3MuUFJFTVVMVElQTElFRCk7Ci0KLSAgICAgICAgLy8gYW5kIGNyZWF0ZS9yZXR1cm4gYSBuZXcgQml0bWFwIHdpdGggaXQKLSAgICAgICAgcmV0dXJuIG5ldyBCaXRtYXAobmF0aXZlSW50LCBudWxsIC8qIGJ1ZmZlciAqLywgd2lkdGgsIGhlaWdodCwgZGVuc2l0eSwgaXNNdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ByZW11bHRpcGxpZWQsIG51bGwgLypuaW5lUGF0Y2hDaHVuayovLCBudWxsIC8qIGxheW91dEJvdW5kcyAqLyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2V0PEJpdG1hcENyZWF0ZUZsYWdzPiBnZXRQcmVtdWx0aXBsaWVkQml0bWFwQ3JlYXRlRmxhZ3MoYm9vbGVhbiBpc011dGFibGUpIHsKLSAgICAgICAgU2V0PEJpdG1hcENyZWF0ZUZsYWdzPiBjcmVhdGVGbGFncyA9IEVudW1TZXQub2YoQml0bWFwQ3JlYXRlRmxhZ3MuUFJFTVVMVElQTElFRCk7Ci0gICAgICAgIGlmIChpc011dGFibGUpIHsKLSAgICAgICAgICAgIGNyZWF0ZUZsYWdzLmFkZChCaXRtYXBDcmVhdGVGbGFncy5NVVRBQkxFKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY3JlYXRlRmxhZ3M7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIGNvcHkgb2YgYSBnaXZlbiBCdWZmZXJlZEltYWdlLgotICAgICAqIDxwLz4KLSAgICAgKiBpZiBhbHBoYSBpcyBkaWZmZXJlbnQgdGhhbiAyNTUsIHRoZW4gaXQgaXMgYXBwbGllZCB0byB0aGUgYWxwaGEgY2hhbm5lbCBvZiBlYWNoIHBpeGVsLgotICAgICAqCi0gICAgICogQHBhcmFtIGltYWdlIHRoZSBpbWFnZSB0byBjb3B5Ci0gICAgICogQHBhcmFtIGltYWdlVHlwZSB0aGUgdHlwZSBvZiB0aGUgbmV3IGltYWdlCi0gICAgICogQHBhcmFtIGFscGhhIGFuIG9wdGlvbmFsIGFscGhhIG1vZGlmaWVyCi0gICAgICogQHJldHVybiBhIG5ldyBCdWZmZXJlZEltYWdlCi0gICAgICovCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIEJ1ZmZlcmVkSW1hZ2UgY3JlYXRlQ29weShCdWZmZXJlZEltYWdlIGltYWdlLCBpbnQgaW1hZ2VUeXBlLCBpbnQgYWxwaGEpIHsKLSAgICAgICAgaW50IHcgPSBpbWFnZS5nZXRXaWR0aCgpOwotICAgICAgICBpbnQgaCA9IGltYWdlLmdldEhlaWdodCgpOwotCi0gICAgICAgIEJ1ZmZlcmVkSW1hZ2UgcmVzdWx0ID0gbmV3IEJ1ZmZlcmVkSW1hZ2UodywgaCwgaW1hZ2VUeXBlKTsKLQotICAgICAgICBpbnRbXSBhcmdiID0gbmV3IGludFt3ICogaF07Ci0gICAgICAgIGltYWdlLmdldFJHQigwLCAwLCBpbWFnZS5nZXRXaWR0aCgpLCBpbWFnZS5nZXRIZWlnaHQoKSwgYXJnYiwgMCwgaW1hZ2UuZ2V0V2lkdGgoKSk7Ci0KLSAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgZmluYWwgaW50IGxlbmd0aCA9IGFyZ2IubGVuZ3RoOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYSA9IChhcmdiW2ldID4+PiAyNCAqIGFscGhhKSAvIDI1NTsKLSAgICAgICAgICAgICAgICBhcmdiW2ldID0gKGEgPDwgMjQpIHwgKGFyZ2JbaV0gJiAweDAwRkZGRkZGKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdC5zZXRSR0IoMCwgMCwgdywgaCwgYXJnYiwgMCwgdyk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQmx1ck1hc2tGaWx0ZXJfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQmx1ck1hc2tGaWx0ZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJlY2JhMS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0JsdXJNYXNrRmlsdGVyX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLkJsdXJNYXNrRmlsdGVyCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgQmx1ck1hc2tGaWx0ZXIgaGF2ZQotICogYmVlbiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgQmx1ck1hc2tGaWx0ZXIgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIE1hc2tGaWx0ZXJfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEKLSAqIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LCBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIKLSAqIG93bmVkIGJ5IHtAbGluayBNYXNrRmlsdGVyX0RlbGVnYXRlfS4KLSAqCi0gKiBAc2VlIE1hc2tGaWx0ZXJfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBCbHVyTWFza0ZpbHRlcl9EZWxlZ2F0ZSBleHRlbmRzIE1hc2tGaWx0ZXJfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU3VwcG9ydGVkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpIHsKLSAgICAgICAgcmV0dXJuICJCbHVyIE1hc2sgRmlsdGVycyBhcmUgbm90IHN1cHBvcnRlZC4iOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDb25zdHJ1Y3RvcihmbG9hdCByYWRpdXMsIGludCBzdHlsZSkgewotICAgICAgICBCbHVyTWFza0ZpbHRlcl9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBCbHVyTWFza0ZpbHRlcl9EZWxlZ2F0ZSgpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0NhbnZhc19EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9DYW52YXNfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJiNDdiZC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0NhbnZhc19EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5HY1NuYXBzaG90OwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwLkNvbmZpZzsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotCi1pbXBvcnQgamF2YS5hd3QuQ29sb3I7Ci1pbXBvcnQgamF2YS5hd3QuQ29tcG9zaXRlOwotaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzMkQ7Ci1pbXBvcnQgamF2YS5hd3QuUmVjdGFuZ2xlOwotaW1wb3J0IGphdmEuYXd0LlJlbmRlcmluZ0hpbnRzOwotaW1wb3J0IGphdmEuYXd0LlNoYXBlOwotaW1wb3J0IGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtOwotaW1wb3J0IGphdmEuYXd0Lmdlb20uQXJjMkQ7Ci1pbXBvcnQgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZTsKLQotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5DYW52YXMKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBDYW52YXMgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgQ2FudmFzIGNsYXNzLgotICoKLSAqIEBzZWUgRGVsZWdhdGVNYW5hZ2VyCi0gKgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQ2FudmFzX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPENhbnZhc19EZWxlZ2F0ZT4gc01hbmFnZXIgPQotICAgICAgICAgICAgbmV3IERlbGVnYXRlTWFuYWdlcjxDYW52YXNfRGVsZWdhdGU+KENhbnZhc19EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGhlbHBlciBkYXRhIC0tLS0KLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGJvb2xlYW5bXSBzQm9vbE91dCA9IG5ldyBib29sZWFuWzFdOwotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLSAgICBwcml2YXRlIEJpdG1hcF9EZWxlZ2F0ZSBtQml0bWFwOwotICAgIHByaXZhdGUgR2NTbmFwc2hvdCBtU25hcHNob3Q7Ci0KLSAgICBwcml2YXRlIERyYXdGaWx0ZXJfRGVsZWdhdGUgbURyYXdGaWx0ZXIgPSBudWxsOwotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbmF0aXZlIGRlbGVnYXRlIGFzc29jaWF0ZWQgdG8gYSBnaXZlbiB7QGxpbmsgQ2FudmFzfSBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBDYW52YXNfRGVsZWdhdGUgZ2V0RGVsZWdhdGUoQ2FudmFzIGNhbnZhcykgewotICAgICAgICByZXR1cm4gc01hbmFnZXIuZ2V0RGVsZWdhdGUoY2FudmFzLm1OYXRpdmVDYW52YXMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG5hdGl2ZSBkZWxlZ2F0ZSBhc3NvY2lhdGVkIHRvIGEgZ2l2ZW4gYW4gaW50IHJlZmVyZW5jaW5nIGEge0BsaW5rIENhbnZhc30gb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ2FudmFzX0RlbGVnYXRlIGdldERlbGVnYXRlKGludCBuYXRpdmVfY2FudmFzKSB7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfY2FudmFzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHtAbGluayBHcmFwaGljczJEfSB1c2VkIHRvIGRyYXcuCi0gICAgICovCi0gICAgcHVibGljIEdjU25hcHNob3QgZ2V0U25hcHNob3QoKSB7Ci0gICAgICAgIHJldHVybiBtU25hcHNob3Q7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUge0BsaW5rIERyYXdGaWx0ZXJ9IGRlbGVnYXRlIG9yIG51bGwgaWYgbm9uZSBoYXZlIGJlZW4gc2V0LgotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgZGVsZWdhdGUgb3IgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgRHJhd0ZpbHRlcl9EZWxlZ2F0ZSBnZXREcmF3RmlsdGVyKCkgewotICAgICAgICByZXR1cm4gbURyYXdGaWx0ZXI7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBpc09wYXF1ZShDYW52YXMgdGhpc0NhbnZhcykgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNDYW52YXMubU5hdGl2ZUNhbnZhcyk7Ci0gICAgICAgIGlmIChjYW52YXNEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2FudmFzRGVsZWdhdGUubUJpdG1hcC5nZXRDb25maWcoKSA9PSBDb25maWcuUkdCXzU2NTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IGdldFdpZHRoKENhbnZhcyB0aGlzQ2FudmFzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc0NhbnZhcy5tTmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNhbnZhc0RlbGVnYXRlLm1CaXRtYXAuZ2V0SW1hZ2UoKS5nZXRXaWR0aCgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgZ2V0SGVpZ2h0KENhbnZhcyB0aGlzQ2FudmFzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc0NhbnZhcy5tTmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNhbnZhc0RlbGVnYXRlLm1CaXRtYXAuZ2V0SW1hZ2UoKS5nZXRIZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShDYW52YXMgdGhpc0NhbnZhcywgZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc0NhbnZhcy5tTmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhbnZhc0RlbGVnYXRlLmdldFNuYXBzaG90KCkudHJhbnNsYXRlKGR4LCBkeSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgcm90YXRlKENhbnZhcyB0aGlzQ2FudmFzLCBmbG9hdCBkZWdyZWVzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc0NhbnZhcy5tTmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhbnZhc0RlbGVnYXRlLmdldFNuYXBzaG90KCkucm90YXRlKE1hdGgudG9SYWRpYW5zKGRlZ3JlZXMpKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHNjYWxlKENhbnZhcyB0aGlzQ2FudmFzLCBmbG9hdCBzeCwgZmxvYXQgc3kpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzQ2FudmFzLm1OYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FudmFzRGVsZWdhdGUuZ2V0U25hcHNob3QoKS5zY2FsZShzeCwgc3kpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2tldyhDYW52YXMgdGhpc0NhbnZhcywgZmxvYXQga3gsIGZsb2F0IGt5KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc0NhbnZhcy5tTmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgY3VycmVudCB0b3AgZ3JhcGhpY3MyRCBvYmplY3QuCi0gICAgICAgIEdjU25hcHNob3QgZyA9IGNhbnZhc0RlbGVnYXRlLmdldFNuYXBzaG90KCk7Ci0KLSAgICAgICAgLy8gZ2V0IGl0cyBjdXJyZW50IG1hdHJpeAotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3VycmVudFR4ID0gZy5nZXRUcmFuc2Zvcm0oKTsKLSAgICAgICAgLy8gZ2V0IHRoZSBBZmZpbmVUcmFuc2Zvcm0gZm9yIHRoZSBnaXZlbiBza2V3LgotICAgICAgICBmbG9hdFtdIG10eCA9IE1hdHJpeF9EZWxlZ2F0ZS5nZXRTa2V3KGt4LCBreSk7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXhUeCA9IE1hdHJpeF9EZWxlZ2F0ZS5nZXRBZmZpbmVUcmFuc2Zvcm0obXR4KTsKLQotICAgICAgICAvLyBjb21iaW5lIHRoZW0gc28gdGhhdCB0aGUgZ2l2ZW4gbWF0cml4IGlzIGFwcGxpZWQgYWZ0ZXIuCi0gICAgICAgIGN1cnJlbnRUeC5wcmVDb25jYXRlbmF0ZShtYXRyaXhUeCk7Ci0KLSAgICAgICAgLy8gZ2l2ZSBpdCB0byB0aGUgZ3JhcGhpY3MyRCBhcyBhIG5ldyBtYXRyaXggcmVwbGFjaW5nIGFsbCBwcmV2aW91cyB0cmFuc2Zvcm0KLSAgICAgICAgZy5zZXRUcmFuc2Zvcm0oY3VycmVudFR4KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBjbGlwUmVjdChDYW52YXMgdGhpc0NhbnZhcywgUmVjdEYgcmVjdCkgewotICAgICAgICByZXR1cm4gY2xpcFJlY3QodGhpc0NhbnZhcywgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGNsaXBSZWN0KENhbnZhcyB0aGlzQ2FudmFzLCBSZWN0IHJlY3QpIHsKLSAgICAgICAgcmV0dXJuIGNsaXBSZWN0KHRoaXNDYW52YXMsIChmbG9hdCkgcmVjdC5sZWZ0LCAoZmxvYXQpIHJlY3QudG9wLAotICAgICAgICAgICAgICAgIChmbG9hdCkgcmVjdC5yaWdodCwgKGZsb2F0KSByZWN0LmJvdHRvbSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gY2xpcFJlY3QoQ2FudmFzIHRoaXNDYW52YXMsIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsCi0gICAgICAgICAgICBmbG9hdCBib3R0b20pIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzQ2FudmFzLm1OYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNhbnZhc0RlbGVnYXRlLmNsaXBSZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgUmVnaW9uLk9wLklOVEVSU0VDVC5uYXRpdmVJbnQpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGNsaXBSZWN0KENhbnZhcyB0aGlzQ2FudmFzLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LAotICAgICAgICAgICAgaW50IGJvdHRvbSkgewotCi0gICAgICAgIHJldHVybiBjbGlwUmVjdCh0aGlzQ2FudmFzLCAoZmxvYXQpIGxlZnQsIChmbG9hdCkgdG9wLCAoZmxvYXQpIHJpZ2h0LCAoZmxvYXQpIGJvdHRvbSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBzYXZlKENhbnZhcyB0aGlzQ2FudmFzKSB7Ci0gICAgICAgIHJldHVybiBzYXZlKHRoaXNDYW52YXMsIENhbnZhcy5NQVRSSVhfU0FWRV9GTEFHIHwgQ2FudmFzLkNMSVBfU0FWRV9GTEFHKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IHNhdmUoQ2FudmFzIHRoaXNDYW52YXMsIGludCBzYXZlRmxhZ3MpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzQ2FudmFzLm1OYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2FudmFzRGVsZWdhdGUuc2F2ZShzYXZlRmxhZ3MpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHJlc3RvcmUoQ2FudmFzIHRoaXNDYW52YXMpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzQ2FudmFzLm1OYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FudmFzRGVsZWdhdGUucmVzdG9yZSgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgZ2V0U2F2ZUNvdW50KENhbnZhcyB0aGlzQ2FudmFzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc0NhbnZhcy5tTmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNhbnZhc0RlbGVnYXRlLmdldFNuYXBzaG90KCkuc2l6ZSgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHJlc3RvcmVUb0NvdW50KENhbnZhcyB0aGlzQ2FudmFzLCBpbnQgc2F2ZUNvdW50KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc0NhbnZhcy5tTmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhbnZhc0RlbGVnYXRlLnJlc3RvcmVUbyhzYXZlQ291bnQpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIGRyYXdQb2ludHMoQ2FudmFzIHRoaXNDYW52YXMsIGZsb2F0W10gcHRzLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQsCi0gICAgICAgICAgICBQYWludCBwYWludCkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIkNhbnZhcy5kcmF3UG9pbnQgaXMgbm90IHN1cHBvcnRlZC4iLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBkcmF3UG9pbnQoQ2FudmFzIHRoaXNDYW52YXMsIGZsb2F0IHgsIGZsb2F0IHksIFBhaW50IHBhaW50KSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiQ2FudmFzLmRyYXdQb2ludCBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIGRyYXdMaW5lcyhDYW52YXMgdGhpc0NhbnZhcywKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0W10gcHRzLCBmaW5hbCBpbnQgb2Zmc2V0LCBmaW5hbCBpbnQgY291bnQsCi0gICAgICAgICAgICBQYWludCBwYWludCkgewotICAgICAgICBkcmF3KHRoaXNDYW52YXMubU5hdGl2ZUNhbnZhcywgcGFpbnQubU5hdGl2ZVBhaW50LCBmYWxzZSAvKmNvbXBvc2l0ZU9ubHkqLywKLSAgICAgICAgICAgICAgICBmYWxzZSAvKmZvcmNlU3JjTW9kZSovLCBuZXcgR2NTbmFwc2hvdC5EcmF3YWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRyYXcoR3JhcGhpY3MyRCBncmFwaGljcywgUGFpbnRfRGVsZWdhdGUgcGFpbnREZWxlZ2F0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgY291bnQgOyBpICs9IDQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5kcmF3TGluZSgoaW50KXB0c1tpICsgb2Zmc2V0XSwgKGludClwdHNbaSArIG9mZnNldCArIDFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClwdHNbaSArIG9mZnNldCArIDJdLCAoaW50KXB0c1tpICsgb2Zmc2V0ICsgM10pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgZnJlZUNhY2hlcygpIHsKLSAgICAgICAgLy8gbm90aGluZyB0byBiZSBkb25lIGhlcmUuCi0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgZnJlZVRleHRMYXlvdXRDYWNoZXMoKSB7Ci0gICAgICAgIC8vIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlIHlldC4KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IGluaXRSYXN0ZXIoaW50IG5hdGl2ZUJpdG1hcE9yWmVybykgewotICAgICAgICBpZiAobmF0aXZlQml0bWFwT3JaZXJvID4gMCkgewotICAgICAgICAgICAgLy8gZ2V0IHRoZSBCaXRtYXAgZnJvbSB0aGUgaW50Ci0gICAgICAgICAgICBCaXRtYXBfRGVsZWdhdGUgYml0bWFwRGVsZWdhdGUgPSBCaXRtYXBfRGVsZWdhdGUuZ2V0RGVsZWdhdGUobmF0aXZlQml0bWFwT3JaZXJvKTsKLQotICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IENhbnZhc19EZWxlZ2F0ZSB3aXRoIHRoZSBnaXZlbiBiaXRtYXAgYW5kIHJldHVybiBpdHMgbmV3IG5hdGl2ZSBpbnQuCi0gICAgICAgICAgICBDYW52YXNfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgQ2FudmFzX0RlbGVnYXRlKGJpdG1hcERlbGVnYXRlKTsKLQotICAgICAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBDYW52YXNfRGVsZWdhdGUgYW5kIHJldHVybiBpdHMgbmV3IG5hdGl2ZSBpbnQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBDYW52YXNfRGVsZWdhdGUoKTsKLQotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIGNvcHlOYXRpdmVDYW52YXNTdGF0ZShpbnQgc3JjQ2FudmFzLCBpbnQgZHN0Q2FudmFzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIHNyY0NhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoc3JjQ2FudmFzKTsKLSAgICAgICAgaWYgKHNyY0NhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGRzdENhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoZHN0Q2FudmFzKTsKLSAgICAgICAgaWYgKGRzdENhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBUT0RPOiBhY3R1YWxseSBjb3B5IHRoZSBjYW52YXMgc3RhdGUuCi0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfc2F2ZUxheWVyKGludCBuYXRpdmVDYW52YXMsIFJlY3RGIGJvdW5kcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhaW50LCBpbnQgbGF5ZXJGbGFncykgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZUNhbnZhcyk7Ci0gICAgICAgIGlmIChjYW52YXNEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIHBhaW50RGVsZWdhdGUgPSBQYWludF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShwYWludCk7Ci0gICAgICAgIGlmIChwYWludERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNhbnZhc0RlbGVnYXRlLnNhdmVMYXllcihib3VuZHMsIHBhaW50RGVsZWdhdGUsIGxheWVyRmxhZ3MpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX3NhdmVMYXllcihpbnQgbmF0aXZlQ2FudmFzLCBmbG9hdCBsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB0LCBmbG9hdCByLCBmbG9hdCBiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFpbnQsIGludCBsYXllckZsYWdzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgcGFpbnREZWxlZ2F0ZSA9IFBhaW50X0RlbGVnYXRlLmdldERlbGVnYXRlKHBhaW50KTsKLSAgICAgICAgaWYgKHBhaW50RGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2FudmFzRGVsZWdhdGUuc2F2ZUxheWVyKG5ldyBSZWN0RihsLCB0LCByLCBiKSwKLSAgICAgICAgICAgICAgICBwYWludERlbGVnYXRlLCBsYXllckZsYWdzKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9zYXZlTGF5ZXJBbHBoYShpbnQgbmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY3RGIGJvdW5kcywgaW50IGFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYXllckZsYWdzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNhbnZhc0RlbGVnYXRlLnNhdmVMYXllckFscGhhKGJvdW5kcywgYWxwaGEsIGxheWVyRmxhZ3MpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX3NhdmVMYXllckFscGhhKGludCBuYXRpdmVDYW52YXMsIGZsb2F0IGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdCwgZmxvYXQgciwgZmxvYXQgYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGEsIGludCBsYXllckZsYWdzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNhbnZhc0RlbGVnYXRlLnNhdmVMYXllckFscGhhKG5ldyBSZWN0RihsLCB0LCByLCBiKSwgYWxwaGEsIGxheWVyRmxhZ3MpOwotICAgIH0KLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2NvbmNhdChpbnQgbkNhbnZhcywgaW50IG5NYXRyaXgpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBtYXRyaXhEZWxlZ2F0ZSA9IE1hdHJpeF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShuTWF0cml4KTsKLSAgICAgICAgaWYgKG1hdHJpeERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgY3VycmVudCB0b3AgZ3JhcGhpY3MyRCBvYmplY3QuCi0gICAgICAgIEdjU25hcHNob3Qgc25hcHNob3QgPSBjYW52YXNEZWxlZ2F0ZS5nZXRTbmFwc2hvdCgpOwotCi0gICAgICAgIC8vIGdldCBpdHMgY3VycmVudCBtYXRyaXgKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN1cnJlbnRUeCA9IHNuYXBzaG90LmdldFRyYW5zZm9ybSgpOwotICAgICAgICAvLyBnZXQgdGhlIEFmZmluZVRyYW5zZm9ybSBvZiB0aGUgZ2l2ZW4gbWF0cml4Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXhUeCA9IG1hdHJpeERlbGVnYXRlLmdldEFmZmluZVRyYW5zZm9ybSgpOwotCi0gICAgICAgIC8vIGNvbWJpbmUgdGhlbSBzbyB0aGF0IHRoZSBnaXZlbiBtYXRyaXggaXMgYXBwbGllZCBhZnRlci4KLSAgICAgICAgY3VycmVudFR4LmNvbmNhdGVuYXRlKG1hdHJpeFR4KTsKLQotICAgICAgICAvLyBnaXZlIGl0IHRvIHRoZSBncmFwaGljczJEIGFzIGEgbmV3IG1hdHJpeCByZXBsYWNpbmcgYWxsIHByZXZpb3VzIHRyYW5zZm9ybQotICAgICAgICBzbmFwc2hvdC5zZXRUcmFuc2Zvcm0oY3VycmVudFR4KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0TWF0cml4KGludCBuQ2FudmFzLCBpbnQgbk1hdHJpeCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5DYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIG1hdHJpeERlbGVnYXRlID0gTWF0cml4X0RlbGVnYXRlLmdldERlbGVnYXRlKG5NYXRyaXgpOwotICAgICAgICBpZiAobWF0cml4RGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IHRvcCBncmFwaGljczJEIG9iamVjdC4KLSAgICAgICAgR2NTbmFwc2hvdCBzbmFwc2hvdCA9IGNhbnZhc0RlbGVnYXRlLmdldFNuYXBzaG90KCk7Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBBZmZpbmVUcmFuc2Zvcm0gb2YgdGhlIGdpdmVuIG1hdHJpeAotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4VHggPSBtYXRyaXhEZWxlZ2F0ZS5nZXRBZmZpbmVUcmFuc2Zvcm0oKTsKLQotICAgICAgICAvLyBnaXZlIGl0IHRvIHRoZSBncmFwaGljczJEIGFzIGEgbmV3IG1hdHJpeCByZXBsYWNpbmcgYWxsIHByZXZpb3VzIHRyYW5zZm9ybQotICAgICAgICBzbmFwc2hvdC5zZXRUcmFuc2Zvcm0obWF0cml4VHgpOwotCi0gICAgICAgIGlmIChtYXRyaXhEZWxlZ2F0ZS5oYXNQZXJzcGVjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBhc3NlcnQgZmFsc2U7Ci0gICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfTUFUUklYX0FGRklORSwKLSAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzI3NldE1hdHJpeChhbmRyb2lkLmdyYXBoaWNzLk1hdHJpeCkgb25seSAiICsKLSAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRzIGFmZmluZSB0cmFuc2Zvcm1hdGlvbnMuIiwgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfY2xpcFJlY3QoaW50IG5DYW52YXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlZ2lvbk9wKSB7Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjYW52YXNEZWxlZ2F0ZS5jbGlwUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHJlZ2lvbk9wKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfY2xpcFBhdGgoaW50IG5hdGl2ZUNhbnZhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hdGl2ZVBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWdpb25PcCkgewotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IFBhdGhfRGVsZWdhdGUuZ2V0RGVsZWdhdGUobmF0aXZlUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2FudmFzRGVsZWdhdGUubVNuYXBzaG90LmNsaXAocGF0aERlbGVnYXRlLmdldEphdmFTaGFwZSgpLCByZWdpb25PcCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX2NsaXBSZWdpb24oaW50IG5hdGl2ZUNhbnZhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmF0aXZlUmVnaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWdpb25PcCkgewotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVDYW52YXMpOwotICAgICAgICBpZiAoY2FudmFzRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uID0gUmVnaW9uX0RlbGVnYXRlLmdldERlbGVnYXRlKG5hdGl2ZVJlZ2lvbik7Ci0gICAgICAgIGlmIChyZWdpb24gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2FudmFzRGVsZWdhdGUubVNuYXBzaG90LmNsaXAocmVnaW9uLmdldEphdmFBcmVhKCksIHJlZ2lvbk9wKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVTZXREcmF3RmlsdGVyKGludCBuYXRpdmVDYW52YXMsIGludCBuYXRpdmVGaWx0ZXIpIHsKLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhbnZhc0RlbGVnYXRlLm1EcmF3RmlsdGVyID0gRHJhd0ZpbHRlcl9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShuYXRpdmVGaWx0ZXIpOwotCi0gICAgICAgIGlmIChjYW52YXNEZWxlZ2F0ZS5tRHJhd0ZpbHRlciAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgY2FudmFzRGVsZWdhdGUubURyYXdGaWx0ZXIuaXNTdXBwb3J0ZWQoKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX0RSQVdGSUxURVIsCi0gICAgICAgICAgICAgICAgICAgIGNhbnZhc0RlbGVnYXRlLm1EcmF3RmlsdGVyLmdldFN1cHBvcnRNZXNzYWdlKCksIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX2dldENsaXBCb3VuZHMoaW50IG5hdGl2ZUNhbnZhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWN0IGJvdW5kcykgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZUNhbnZhcyk7Ci0gICAgICAgIGlmIChjYW52YXNEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWN0YW5nbGUgcmVjdCA9IGNhbnZhc0RlbGVnYXRlLmdldFNuYXBzaG90KCkuZ2V0Q2xpcCgpLmdldEJvdW5kcygpOwotICAgICAgICBpZiAocmVjdCAhPSBudWxsICYmIHJlY3QuaXNFbXB0eSgpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICBib3VuZHMubGVmdCA9IHJlY3QueDsKLSAgICAgICAgICAgIGJvdW5kcy50b3AgPSByZWN0Lnk7Ci0gICAgICAgICAgICBib3VuZHMucmlnaHQgPSByZWN0LnggKyByZWN0LndpZHRoOwotICAgICAgICAgICAgYm91bmRzLmJvdHRvbSA9IHJlY3QueSArIHJlY3QuaGVpZ2h0OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2dldENUTShpbnQgY2FudmFzLCBpbnQgbWF0cml4KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoY2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBtYXRyaXhEZWxlZ2F0ZSA9IE1hdHJpeF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShtYXRyaXgpOwotICAgICAgICBpZiAobWF0cml4RGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGNhbnZhc0RlbGVnYXRlLmdldFNuYXBzaG90KCkuZ2V0VHJhbnNmb3JtKCk7Ci0gICAgICAgIG1hdHJpeERlbGVnYXRlLnNldChNYXRyaXhfRGVsZWdhdGUubWFrZVZhbHVlcyh0cmFuc2Zvcm0pKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcXVpY2tSZWplY3QoaW50IG5hdGl2ZUNhbnZhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjdEYgcmVjdCkgewotICAgICAgICAvLyBGSVhNRSBwcm9wZXJseSBpbXBsZW1lbnQgcXVpY2tSZWplY3QKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9xdWlja1JlamVjdChpbnQgbmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGF0aCkgewotICAgICAgICAvLyBGSVhNRSBwcm9wZXJseSBpbXBsZW1lbnQgcXVpY2tSZWplY3QKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9xdWlja1JlamVjdChpbnQgbmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20pIHsKLSAgICAgICAgLy8gRklYTUUgcHJvcGVybHkgaW1wbGVtZW50IHF1aWNrUmVqZWN0Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd1JHQihpbnQgbmF0aXZlQ2FudmFzLCBpbnQgciwgaW50IGcsIGludCBiKSB7Ci0gICAgICAgIG5hdGl2ZV9kcmF3Q29sb3IobmF0aXZlQ2FudmFzLCAweEZGMDAwMDAwIHwgciA8PCAxNiB8IChnJjB4RkYpIDw8IDggfCAoYiYweEZGKSwKLSAgICAgICAgICAgICAgICBQb3J0ZXJEdWZmLk1vZGUuU1JDX09WRVIubmF0aXZlSW50KTsKLQotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3QVJHQihpbnQgbmF0aXZlQ2FudmFzLCBpbnQgYSwgaW50IHIsIGludCBnLCBpbnQgYikgewotICAgICAgICBuYXRpdmVfZHJhd0NvbG9yKG5hdGl2ZUNhbnZhcywgYSA8PCAyNCB8IChyJjB4RkYpIDw8IDE2IHwgKGcmMHhGRikgPDwgOCB8IChiJjB4RkYpLAotICAgICAgICAgICAgICAgIFBvcnRlckR1ZmYuTW9kZS5TUkNfT1ZFUi5uYXRpdmVJbnQpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3Q29sb3IoaW50IG5hdGl2ZUNhbnZhcywgaW50IGNvbG9yKSB7Ci0gICAgICAgIG5hdGl2ZV9kcmF3Q29sb3IobmF0aXZlQ2FudmFzLCBjb2xvciwgUG9ydGVyRHVmZi5Nb2RlLlNSQ19PVkVSLm5hdGl2ZUludCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdDb2xvcihpbnQgbmF0aXZlQ2FudmFzLCBmaW5hbCBpbnQgY29sb3IsIGZpbmFsIGludCBtb2RlKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIGludCB3ID0gY2FudmFzRGVsZWdhdGUubUJpdG1hcC5nZXRJbWFnZSgpLmdldFdpZHRoKCk7Ci0gICAgICAgIGZpbmFsIGludCBoID0gY2FudmFzRGVsZWdhdGUubUJpdG1hcC5nZXRJbWFnZSgpLmdldEhlaWdodCgpOwotICAgICAgICBkcmF3KG5hdGl2ZUNhbnZhcywgbmV3IEdjU25hcHNob3QuRHJhd2FibGUoKSB7Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgZHJhdyhHcmFwaGljczJEIGdyYXBoaWNzLCBQYWludF9EZWxlZ2F0ZSBwYWludCkgewotICAgICAgICAgICAgICAgIC8vIHJlc2V0IGl0cyB0cmFuc2Zvcm0ganVzdCBpbiBjYXNlCi0gICAgICAgICAgICAgICAgZ3JhcGhpY3Muc2V0VHJhbnNmb3JtKG5ldyBBZmZpbmVUcmFuc2Zvcm0oKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBzZXQgdGhlIGNvbG9yCi0gICAgICAgICAgICAgICAgZ3JhcGhpY3Muc2V0Q29sb3IobmV3IENvbG9yKGNvbG9yLCB0cnVlIC8qYWxwaGEqLykpOwotCi0gICAgICAgICAgICAgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IFBvcnRlckR1ZmZYZmVybW9kZV9EZWxlZ2F0ZS5nZXRDb21wb3NpdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBQb3J0ZXJEdWZmWGZlcm1vZGVfRGVsZWdhdGUuZ2V0UG9ydGVyRHVmZk1vZGUobW9kZSksIDB4RkYpOwotICAgICAgICAgICAgICAgIGlmIChjb21wb3NpdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5zZXRDb21wb3NpdGUoY29tcG9zaXRlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBncmFwaGljcy5maWxsUmVjdCgwLCAwLCB3LCBoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdQYWludChpbnQgbmF0aXZlQ2FudmFzLCBpbnQgcGFpbnQpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJDYW52YXMuZHJhd1BhaW50IGlzIG5vdCBzdXBwb3J0ZWQuIiwgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdMaW5lKGludCBuYXRpdmVDYW52YXMsCi0gICAgICAgICAgICBmaW5hbCBmbG9hdCBzdGFydFgsIGZpbmFsIGZsb2F0IHN0YXJ0WSwgZmluYWwgZmxvYXQgc3RvcFgsIGZpbmFsIGZsb2F0IHN0b3BZLAotICAgICAgICAgICAgaW50IHBhaW50KSB7Ci0KLSAgICAgICAgZHJhdyhuYXRpdmVDYW52YXMsIHBhaW50LCBmYWxzZSAvKmNvbXBvc2l0ZU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLywKLSAgICAgICAgICAgICAgICBuZXcgR2NTbmFwc2hvdC5EcmF3YWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRyYXcoR3JhcGhpY3MyRCBncmFwaGljcywgUGFpbnRfRGVsZWdhdGUgcGFpbnREZWxlZ2F0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZHJhd0xpbmUoKGludClzdGFydFgsIChpbnQpc3RhcnRZLCAoaW50KXN0b3BYLCAoaW50KXN0b3BZKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd1JlY3QoaW50IG5hdGl2ZUNhbnZhcywgUmVjdEYgcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhaW50KSB7Ci0gICAgICAgIG5hdGl2ZV9kcmF3UmVjdChuYXRpdmVDYW52YXMsIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tLCBwYWludCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdSZWN0KGludCBuYXRpdmVDYW52YXMsCi0gICAgICAgICAgICBmaW5hbCBmbG9hdCBsZWZ0LCBmaW5hbCBmbG9hdCB0b3AsIGZpbmFsIGZsb2F0IHJpZ2h0LCBmaW5hbCBmbG9hdCBib3R0b20sIGludCBwYWludCkgewotCi0gICAgICAgIGRyYXcobmF0aXZlQ2FudmFzLCBwYWludCwgZmFsc2UgLypjb21wb3NpdGVPbmx5Ki8sIGZhbHNlIC8qZm9yY2VTcmNNb2RlKi8sCi0gICAgICAgICAgICAgICAgbmV3IEdjU25hcHNob3QuRHJhd2FibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KEdyYXBoaWNzMkQgZ3JhcGhpY3MsIFBhaW50X0RlbGVnYXRlIHBhaW50RGVsZWdhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHlsZSA9IHBhaW50RGVsZWdhdGUuZ2V0U3R5bGUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlID09IFBhaW50LlN0eWxlLkZJTEwubmF0aXZlSW50IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID09IFBhaW50LlN0eWxlLkZJTExfQU5EX1NUUk9LRS5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5maWxsUmVjdCgoaW50KWxlZnQsIChpbnQpdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkocmlnaHQtbGVmdCksIChpbnQpKGJvdHRvbS10b3ApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlID09IFBhaW50LlN0eWxlLlNUUk9LRS5uYXRpdmVJbnQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPT0gUGFpbnQuU3R5bGUuRklMTF9BTkRfU1RST0tFLm5hdGl2ZUludCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmRyYXdSZWN0KChpbnQpbGVmdCwgKGludCl0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShyaWdodC1sZWZ0KSwgKGludCkoYm90dG9tLXRvcCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3T3ZhbChpbnQgbmF0aXZlQ2FudmFzLCBmaW5hbCBSZWN0RiBvdmFsLCBpbnQgcGFpbnQpIHsKLSAgICAgICAgaWYgKG92YWwucmlnaHQgPiBvdmFsLmxlZnQgJiYgb3ZhbC5ib3R0b20gPiBvdmFsLnRvcCkgewotICAgICAgICAgICAgZHJhdyhuYXRpdmVDYW52YXMsIHBhaW50LCBmYWxzZSAvKmNvbXBvc2l0ZU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLywKLSAgICAgICAgICAgICAgICAgICAgbmV3IEdjU25hcHNob3QuRHJhd2FibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRyYXcoR3JhcGhpY3MyRCBncmFwaGljcywgUGFpbnRfRGVsZWdhdGUgcGFpbnREZWxlZ2F0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHlsZSA9IHBhaW50RGVsZWdhdGUuZ2V0U3R5bGUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgPT0gUGFpbnQuU3R5bGUuRklMTC5uYXRpdmVJbnQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID09IFBhaW50LlN0eWxlLkZJTExfQU5EX1NUUk9LRS5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZmlsbE92YWwoKGludClvdmFsLmxlZnQsIChpbnQpb3ZhbC50b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClvdmFsLndpZHRoKCksIChpbnQpb3ZhbC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlID09IFBhaW50LlN0eWxlLlNUUk9LRS5uYXRpdmVJbnQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID09IFBhaW50LlN0eWxlLkZJTExfQU5EX1NUUk9LRS5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZHJhd092YWwoKGludClvdmFsLmxlZnQsIChpbnQpb3ZhbC50b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClvdmFsLndpZHRoKCksIChpbnQpb3ZhbC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd0NpcmNsZShpbnQgbmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgZmxvYXQgY3gsIGZsb2F0IGN5LCBmbG9hdCByYWRpdXMsIGludCBwYWludCkgewotICAgICAgICBuYXRpdmVfZHJhd092YWwobmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgICAgIG5ldyBSZWN0RihjeCAtIHJhZGl1cywgY3kgLSByYWRpdXMsIGN4ICsgcmFkaXVzLCBjeSArIHJhZGl1cyksCi0gICAgICAgICAgICAgICAgcGFpbnQpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3QXJjKGludCBuYXRpdmVDYW52YXMsCi0gICAgICAgICAgICBmaW5hbCBSZWN0RiBvdmFsLCBmaW5hbCBmbG9hdCBzdGFydEFuZ2xlLCBmaW5hbCBmbG9hdCBzd2VlcCwKLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdXNlQ2VudGVyLCBpbnQgcGFpbnQpIHsKLSAgICAgICAgaWYgKG92YWwucmlnaHQgPiBvdmFsLmxlZnQgJiYgb3ZhbC5ib3R0b20gPiBvdmFsLnRvcCkgewotICAgICAgICAgICAgZHJhdyhuYXRpdmVDYW52YXMsIHBhaW50LCBmYWxzZSAvKmNvbXBvc2l0ZU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLywKLSAgICAgICAgICAgICAgICAgICAgbmV3IEdjU25hcHNob3QuRHJhd2FibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRyYXcoR3JhcGhpY3MyRCBncmFwaGljcywgUGFpbnRfRGVsZWdhdGUgcGFpbnREZWxlZ2F0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHlsZSA9IHBhaW50RGVsZWdhdGUuZ2V0U3R5bGUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyYzJELkZsb2F0IGFyYyA9IG5ldyBBcmMyRC5GbG9hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92YWwubGVmdCwgb3ZhbC50b3AsIG92YWwud2lkdGgoKSwgb3ZhbC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGFydEFuZ2xlLCAtc3dlZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VDZW50ZXIgPyBBcmMyRC5QSUUgOiBBcmMyRC5PUEVOKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRyYXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgPT0gUGFpbnQuU3R5bGUuRklMTC5uYXRpdmVJbnQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID09IFBhaW50LlN0eWxlLkZJTExfQU5EX1NUUk9LRS5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZmlsbChhcmMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBQYWludC5TdHlsZS5TVFJPS0UubmF0aXZlSW50IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9PSBQYWludC5TdHlsZS5GSUxMX0FORF9TVFJPS0UubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmRyYXcoYXJjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3Um91bmRSZWN0KGludCBuYXRpdmVDYW52YXMsCi0gICAgICAgICAgICBmaW5hbCBSZWN0RiByZWN0LCBmaW5hbCBmbG9hdCByeCwgZmluYWwgZmxvYXQgcnksIGludCBwYWludCkgewotCi0gICAgICAgIGRyYXcobmF0aXZlQ2FudmFzLCBwYWludCwgZmFsc2UgLypjb21wb3NpdGVPbmx5Ki8sIGZhbHNlIC8qZm9yY2VTcmNNb2RlKi8sCi0gICAgICAgICAgICAgICAgbmV3IEdjU25hcHNob3QuRHJhd2FibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KEdyYXBoaWNzMkQgZ3JhcGhpY3MsIFBhaW50X0RlbGVnYXRlIHBhaW50RGVsZWdhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHlsZSA9IHBhaW50RGVsZWdhdGUuZ2V0U3R5bGUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlID09IFBhaW50LlN0eWxlLkZJTEwubmF0aXZlSW50IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID09IFBhaW50LlN0eWxlLkZJTExfQU5EX1NUUk9LRS5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5maWxsUm91bmRSZWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClyZWN0LmxlZnQsIChpbnQpcmVjdC50b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXJlY3Qud2lkdGgoKSwgKGludClyZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClyeCwgKGludClyeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBQYWludC5TdHlsZS5TVFJPS0UubmF0aXZlSW50IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID09IFBhaW50LlN0eWxlLkZJTExfQU5EX1NUUk9LRS5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5kcmF3Um91bmRSZWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClyZWN0LmxlZnQsIChpbnQpcmVjdC50b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXJlY3Qud2lkdGgoKSwgKGludClyZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClyeCwgKGludClyeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdQYXRoKGludCBuYXRpdmVDYW52YXMsIGludCBwYXRoLCBpbnQgcGFpbnQpIHsKLSAgICAgICAgZmluYWwgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBQYXRoX0RlbGVnYXRlLmdldERlbGVnYXRlKHBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRyYXcobmF0aXZlQ2FudmFzLCBwYWludCwgZmFsc2UgLypjb21wb3NpdGVPbmx5Ki8sIGZhbHNlIC8qZm9yY2VTcmNNb2RlKi8sCi0gICAgICAgICAgICAgICAgbmV3IEdjU25hcHNob3QuRHJhd2FibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KEdyYXBoaWNzMkQgZ3JhcGhpY3MsIFBhaW50X0RlbGVnYXRlIHBhaW50RGVsZWdhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNoYXBlIHNoYXBlID0gcGF0aERlbGVnYXRlLmdldEphdmFTaGFwZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0eWxlID0gcGFpbnREZWxlZ2F0ZS5nZXRTdHlsZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgPT0gUGFpbnQuU3R5bGUuRklMTC5uYXRpdmVJbnQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPT0gUGFpbnQuU3R5bGUuRklMTF9BTkRfU1RST0tFLm5hdGl2ZUludCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmZpbGwoc2hhcGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgPT0gUGFpbnQuU3R5bGUuU1RST0tFLm5hdGl2ZUludCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9PSBQYWludC5TdHlsZS5GSUxMX0FORF9TVFJPS0UubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZHJhdyhzaGFwZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdCaXRtYXAoQ2FudmFzIHRoaXNDYW52YXMsIGludCBuYXRpdmVDYW52YXMsIGludCBiaXRtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbGVmdCwgZmxvYXQgdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYXRpdmVQYWludE9yWmVybywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2FudmFzRGVuc2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuRGVuc2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0bWFwRGVuc2l0eSkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXBEZWxlZ2F0ZSA9IEJpdG1hcF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShiaXRtYXApOwotICAgICAgICBpZiAoYml0bWFwRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVmZmVyZWRJbWFnZSBpbWFnZSA9IGJpdG1hcERlbGVnYXRlLmdldEltYWdlKCk7Ci0gICAgICAgIGZsb2F0IHJpZ2h0ID0gbGVmdCArIGltYWdlLmdldFdpZHRoKCk7Ci0gICAgICAgIGZsb2F0IGJvdHRvbSA9IHRvcCArIGltYWdlLmdldEhlaWdodCgpOwotCi0gICAgICAgIGRyYXdCaXRtYXAobmF0aXZlQ2FudmFzLCBiaXRtYXBEZWxlZ2F0ZSwgbmF0aXZlUGFpbnRPclplcm8sCi0gICAgICAgICAgICAgICAgMCwgMCwgaW1hZ2UuZ2V0V2lkdGgoKSwgaW1hZ2UuZ2V0SGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgKGludClsZWZ0LCAoaW50KXRvcCwgKGludClyaWdodCwgKGludClib3R0b20pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3Qml0bWFwKENhbnZhcyB0aGlzQ2FudmFzLCBpbnQgbmF0aXZlQ2FudmFzLCBpbnQgYml0bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY3Qgc3JjLCBSZWN0RiBkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hdGl2ZVBhaW50T3JaZXJvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5EZW5zaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRtYXBEZW5zaXR5KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQml0bWFwX0RlbGVnYXRlIGJpdG1hcERlbGVnYXRlID0gQml0bWFwX0RlbGVnYXRlLmdldERlbGVnYXRlKGJpdG1hcCk7Ci0gICAgICAgIGlmIChiaXRtYXBEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBCdWZmZXJlZEltYWdlIGltYWdlID0gYml0bWFwRGVsZWdhdGUuZ2V0SW1hZ2UoKTsKLQotICAgICAgICBpZiAoc3JjID09IG51bGwpIHsKLSAgICAgICAgICAgIGRyYXdCaXRtYXAobmF0aXZlQ2FudmFzLCBiaXRtYXBEZWxlZ2F0ZSwgbmF0aXZlUGFpbnRPclplcm8sCi0gICAgICAgICAgICAgICAgICAgIDAsIDAsIGltYWdlLmdldFdpZHRoKCksIGltYWdlLmdldEhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAoaW50KWRzdC5sZWZ0LCAoaW50KWRzdC50b3AsIChpbnQpZHN0LnJpZ2h0LCAoaW50KWRzdC5ib3R0b20pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZHJhd0JpdG1hcChuYXRpdmVDYW52YXMsIGJpdG1hcERlbGVnYXRlLCBuYXRpdmVQYWludE9yWmVybywKLSAgICAgICAgICAgICAgICAgICAgc3JjLmxlZnQsIHNyYy50b3AsIHNyYy53aWR0aCgpLCBzcmMuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgIChpbnQpZHN0LmxlZnQsIChpbnQpZHN0LnRvcCwgKGludClkc3QucmlnaHQsIChpbnQpZHN0LmJvdHRvbSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd0JpdG1hcChpbnQgbmF0aXZlQ2FudmFzLCBpbnQgYml0bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY3Qgc3JjLCBSZWN0IGRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmF0aXZlUGFpbnRPclplcm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbkRlbnNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdG1hcERlbnNpdHkpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgYml0bWFwRGVsZWdhdGUgPSBCaXRtYXBfRGVsZWdhdGUuZ2V0RGVsZWdhdGUoYml0bWFwKTsKLSAgICAgICAgaWYgKGJpdG1hcERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UgPSBiaXRtYXBEZWxlZ2F0ZS5nZXRJbWFnZSgpOwotCi0gICAgICAgIGlmIChzcmMgPT0gbnVsbCkgewotICAgICAgICAgICAgZHJhd0JpdG1hcChuYXRpdmVDYW52YXMsIGJpdG1hcERlbGVnYXRlLCBuYXRpdmVQYWludE9yWmVybywKLSAgICAgICAgICAgICAgICAgICAgMCwgMCwgaW1hZ2UuZ2V0V2lkdGgoKSwgaW1hZ2UuZ2V0SGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgIGRzdC5sZWZ0LCBkc3QudG9wLCBkc3QucmlnaHQsIGRzdC5ib3R0b20pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZHJhd0JpdG1hcChuYXRpdmVDYW52YXMsIGJpdG1hcERlbGVnYXRlLCBuYXRpdmVQYWludE9yWmVybywKLSAgICAgICAgICAgICAgICAgICAgc3JjLmxlZnQsIHNyYy50b3AsIHNyYy53aWR0aCgpLCBzcmMuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgIGRzdC5sZWZ0LCBkc3QudG9wLCBkc3QucmlnaHQsIGRzdC5ib3R0b20pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdCaXRtYXAoaW50IG5hdGl2ZUNhbnZhcywgaW50W10gY29sb3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwgaW50IHN0cmlkZSwgZmluYWwgZmxvYXQgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBoYXNBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmF0aXZlUGFpbnRPclplcm8pIHsKLQotICAgICAgICAvLyBjcmVhdGUgYSB0ZW1wIEJ1ZmZlcmVkSW1hZ2UgY29udGFpbmluZyB0aGUgY29udGVudC4KLSAgICAgICAgZmluYWwgQnVmZmVyZWRJbWFnZSBpbWFnZSA9IG5ldyBCdWZmZXJlZEltYWdlKHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgaGFzQWxwaGEgPyBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0IgOiBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX1JHQik7Ci0gICAgICAgIGltYWdlLnNldFJHQigwLCAwLCB3aWR0aCwgaGVpZ2h0LCBjb2xvcnMsIG9mZnNldCwgc3RyaWRlKTsKLQotICAgICAgICBkcmF3KG5hdGl2ZUNhbnZhcywgbmF0aXZlUGFpbnRPclplcm8sIHRydWUgLypjb21wb3NpdGVPbmx5Ki8sIGZhbHNlIC8qZm9yY2VTcmNNb2RlKi8sCi0gICAgICAgICAgICAgICAgbmV3IEdjU25hcHNob3QuRHJhd2FibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KEdyYXBoaWNzMkQgZ3JhcGhpY3MsIFBhaW50X0RlbGVnYXRlIHBhaW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpbnQgIT0gbnVsbCAmJiBwYWludC5pc0ZpbHRlckJpdG1hcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3Muc2V0UmVuZGVyaW5nSGludChSZW5kZXJpbmdIaW50cy5LRVlfSU5URVJQT0xBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlcmluZ0hpbnRzLlZBTFVFX0lOVEVSUE9MQVRJT05fQklMSU5FQVIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5kcmF3SW1hZ2UoaW1hZ2UsIChpbnQpIHgsIChpbnQpIHksIG51bGwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZURyYXdCaXRtYXBNYXRyaXgoaW50IG5DYW52YXMsIGludCBuQml0bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5NYXRyaXgsIGludCBuUGFpbnQpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludCwgd2hpY2ggY2FuIGJlIG51bGwKLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgcGFpbnREZWxlZ2F0ZSA9IFBhaW50X0RlbGVnYXRlLmdldERlbGVnYXRlKG5QYWludCk7Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBCaXRtYXBfRGVsZWdhdGUgYml0bWFwRGVsZWdhdGUgPSBCaXRtYXBfRGVsZWdhdGUuZ2V0RGVsZWdhdGUobkJpdG1hcCk7Ci0gICAgICAgIGlmIChiaXRtYXBEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBCdWZmZXJlZEltYWdlIGltYWdlID0gZ2V0SW1hZ2VUb0RyYXcoYml0bWFwRGVsZWdhdGUsIHBhaW50RGVsZWdhdGUsIHNCb29sT3V0KTsKLQotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgbWF0cml4RGVsZWdhdGUgPSBNYXRyaXhfRGVsZWdhdGUuZ2V0RGVsZWdhdGUobk1hdHJpeCk7Ci0gICAgICAgIGlmIChtYXRyaXhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBBZmZpbmVUcmFuc2Zvcm0gbXR4ID0gbWF0cml4RGVsZWdhdGUuZ2V0QWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICAgICAgY2FudmFzRGVsZWdhdGUuZ2V0U25hcHNob3QoKS5kcmF3KG5ldyBHY1NuYXBzaG90LkRyYXdhYmxlKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRyYXcoR3JhcGhpY3MyRCBncmFwaGljcywgUGFpbnRfRGVsZWdhdGUgcGFpbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhaW50ICE9IG51bGwgJiYgcGFpbnQuaXNGaWx0ZXJCaXRtYXAoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3Muc2V0UmVuZGVyaW5nSGludChSZW5kZXJpbmdIaW50cy5LRVlfSU5URVJQT0xBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyaW5nSGludHMuVkFMVUVfSU5URVJQT0xBVElPTl9CSUxJTkVBUik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvL0ZJWE1FIGFkZCBzdXBwb3J0IGZvciBjYW52YXMsIHNjcmVlbiBhbmQgYml0bWFwIGRlbnNpdGllcy4KLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZHJhd0ltYWdlKGltYWdlLCBtdHgsIG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwgcGFpbnREZWxlZ2F0ZSwgdHJ1ZSAvKmNvbXBvc2l0ZU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlRHJhd0JpdG1hcE1lc2goaW50IG5DYW52YXMsIGludCBuQml0bWFwLAotICAgICAgICAgICAgaW50IG1lc2hXaWR0aCwgaW50IG1lc2hIZWlnaHQsIGZsb2F0W10gdmVydHMsIGludCB2ZXJ0T2Zmc2V0LCBpbnRbXSBjb2xvcnMsCi0gICAgICAgICAgICBpbnQgY29sb3JPZmZzZXQsIGludCBuUGFpbnQpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJDYW52YXMuZHJhd0JpdG1hcE1lc2ggaXMgbm90IHN1cHBvcnRlZC4iLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVEcmF3VmVydGljZXMoaW50IG5DYW52YXMsIGludCBtb2RlLCBpbnQgbiwKLSAgICAgICAgICAgIGZsb2F0W10gdmVydHMsIGludCB2ZXJ0T2Zmc2V0LAotICAgICAgICAgICAgZmxvYXRbXSB0ZXhzLCBpbnQgdGV4T2Zmc2V0LAotICAgICAgICAgICAgaW50W10gY29sb3JzLCBpbnQgY29sb3JPZmZzZXQsCi0gICAgICAgICAgICBzaG9ydFtdIGluZGljZXMsIGludCBpbmRleE9mZnNldCwKLSAgICAgICAgICAgIGludCBpbmRleENvdW50LCBpbnQgblBhaW50KSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiQ2FudmFzLmRyYXdWZXJ0aWNlcyBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3VGV4dChpbnQgbmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgZmluYWwgY2hhcltdIHRleHQsIGZpbmFsIGludCBpbmRleCwgZmluYWwgaW50IGNvdW50LAotICAgICAgICAgICAgZmluYWwgZmxvYXQgc3RhcnRYLCBmaW5hbCBmbG9hdCBzdGFydFksIGZpbmFsIGludCBmbGFncywgaW50IHBhaW50KSB7Ci0KLSAgICAgICAgZHJhdyhuYXRpdmVDYW52YXMsIHBhaW50LCBmYWxzZSAvKmNvbXBvc2l0ZU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLywKLSAgICAgICAgICAgICAgICBuZXcgR2NTbmFwc2hvdC5EcmF3YWJsZSgpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgZHJhdyhHcmFwaGljczJEIGdyYXBoaWNzLCBQYWludF9EZWxlZ2F0ZSBwYWludERlbGVnYXRlKSB7Ci0gICAgICAgICAgICAgICAgLy8gV0FSTklORzogdGhlIGxvZ2ljIGluIHRoaXMgbWV0aG9kIGlzIHNpbWlsYXIgdG8gUGFpbnRfRGVsZWdhdGUubWVhc3VyZVRleHQuCi0gICAgICAgICAgICAgICAgLy8gQW55IGNoYW5nZSB0byB0aGlzIG1ldGhvZCBzaG91bGQgYmUgcmVmbGVjdGVkIGluIFBhaW50Lm1lYXN1cmVUZXh0Ci0gICAgICAgICAgICAgICAgLy8gUGFpbnQuVGV4dEFsaWduIGluZGljYXRlcyBob3cgdGhlIHRleHQgaXMgcG9zaXRpb25lZCByZWxhdGl2ZSB0byBYLgotICAgICAgICAgICAgICAgIC8vIExFRlQgaXMgdGhlIGRlZmF1bHQgYW5kIHRoZXJlJ3Mgbm90aGluZyB0byBkby4KLSAgICAgICAgICAgICAgICBmbG9hdCB4ID0gc3RhcnRYOwotICAgICAgICAgICAgICAgIGludCBsaW1pdCA9IGluZGV4ICsgY291bnQ7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBpc1J0bCA9IGZsYWdzID09IENhbnZhcy5ESVJFQ1RJT05fUlRMOwotICAgICAgICAgICAgICAgIGlmIChwYWludERlbGVnYXRlLmdldFRleHRBbGlnbigpICE9IFBhaW50LkFsaWduLkxFRlQubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IG0gPSBwYWludERlbGVnYXRlLm1lYXN1cmVUZXh0KHRleHQsIGluZGV4LCBjb3VudCwgaXNSdGwpOwotICAgICAgICAgICAgICAgICAgICBpZiAocGFpbnREZWxlZ2F0ZS5nZXRUZXh0QWxpZ24oKSA9PSBQYWludC5BbGlnbi5DRU5URVIubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4IC09IG0gLyAyOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhaW50RGVsZWdhdGUuZ2V0VGV4dEFsaWduKCkgPT0gUGFpbnQuQWxpZ24uUklHSFQubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4IC09IG07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXcgQmlkaVJlbmRlcmVyKGdyYXBoaWNzLCBwYWludERlbGVnYXRlLCB0ZXh0KS5yZW5kZXJUZXh0KAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIGxpbWl0LCBpc1J0bCwgbnVsbCwgMCwgdHJ1ZSwgeCwgc3RhcnRZKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdUZXh0KGludCBuYXRpdmVDYW52YXMsIFN0cmluZyB0ZXh0LAotICAgICAgICAgICAgaW50IHN0YXJ0LCBpbnQgZW5kLCBmbG9hdCB4LCBmbG9hdCB5LCBmaW5hbCBpbnQgZmxhZ3MsIGludCBwYWludCkgewotICAgICAgICBpbnQgY291bnQgPSBlbmQgLSBzdGFydDsKLSAgICAgICAgY2hhcltdIGJ1ZmZlciA9IFRlbXBvcmFyeUJ1ZmZlci5vYnRhaW4oY291bnQpOwotICAgICAgICBUZXh0VXRpbHMuZ2V0Q2hhcnModGV4dCwgc3RhcnQsIGVuZCwgYnVmZmVyLCAwKTsKLQotICAgICAgICBuYXRpdmVfZHJhd1RleHQobmF0aXZlQ2FudmFzLCBidWZmZXIsIDAsIGNvdW50LCB4LCB5LCBmbGFncywgcGFpbnQpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3VGV4dFJ1bihpbnQgbmF0aXZlQ2FudmFzLCBTdHJpbmcgdGV4dCwKLSAgICAgICAgICAgIGludCBzdGFydCwgaW50IGVuZCwgaW50IGNvbnRleHRTdGFydCwgaW50IGNvbnRleHRFbmQsCi0gICAgICAgICAgICBmbG9hdCB4LCBmbG9hdCB5LCBpbnQgZmxhZ3MsIGludCBwYWludCkgewotICAgICAgICBpbnQgY291bnQgPSBlbmQgLSBzdGFydDsKLSAgICAgICAgY2hhcltdIGJ1ZmZlciA9IFRlbXBvcmFyeUJ1ZmZlci5vYnRhaW4oY291bnQpOwotICAgICAgICBUZXh0VXRpbHMuZ2V0Q2hhcnModGV4dCwgc3RhcnQsIGVuZCwgYnVmZmVyLCAwKTsKLQotICAgICAgICBuYXRpdmVfZHJhd1RleHQobmF0aXZlQ2FudmFzLCBidWZmZXIsIDAsIGNvdW50LCB4LCB5LCBmbGFncywgcGFpbnQpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3VGV4dFJ1bihpbnQgbmF0aXZlQ2FudmFzLCBjaGFyW10gdGV4dCwKLSAgICAgICAgICAgIGludCBzdGFydCwgaW50IGNvdW50LCBpbnQgY29udGV4dFN0YXJ0LCBpbnQgY29udGV4dENvdW50LAotICAgICAgICAgICAgZmxvYXQgeCwgZmxvYXQgeSwgaW50IGZsYWdzLCBpbnQgcGFpbnQpIHsKLSAgICAgICAgbmF0aXZlX2RyYXdUZXh0KG5hdGl2ZUNhbnZhcywgdGV4dCwgc3RhcnQsIGNvdW50LCB4LCB5LCBmbGFncywgcGFpbnQpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9kcmF3UG9zVGV4dChpbnQgbmF0aXZlQ2FudmFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyW10gdGV4dCwgaW50IGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIGZsb2F0W10gcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFpbnQpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJDYW52YXMuZHJhd1Bvc1RleHQgaXMgbm90IHN1cHBvcnRlZC4iLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd1Bvc1RleHQoaW50IG5hdGl2ZUNhbnZhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRleHQsIGZsb2F0W10gcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFpbnQpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJDYW52YXMuZHJhd1Bvc1RleHQgaXMgbm90IHN1cHBvcnRlZC4iLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfZHJhd1RleHRPblBhdGgoaW50IG5hdGl2ZUNhbnZhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIHRleHQsIGludCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgaE9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdk9mZnNldCwgaW50IGJpZGlGbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhaW50KSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiQ2FudmFzLmRyYXdUZXh0T25QYXRoIGlzIG5vdCBzdXBwb3J0ZWQuIiwgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2RyYXdUZXh0T25QYXRoKGludCBuYXRpdmVDYW52YXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0LCBpbnQgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgaE9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdk9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLCBpbnQgcGFpbnQpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJDYW52YXMuZHJhd1RleHRPblBhdGggaXMgbm90IHN1cHBvcnRlZC4iLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBmaW5hbGl6ZXIoaW50IG5hdGl2ZUNhbnZhcykgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQgc28gdGhhdCBpdCBjYW4gYmUgZGlzcG9zZWQuCi0gICAgICAgIENhbnZhc19EZWxlZ2F0ZSBjYW52YXNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZUNhbnZhcyk7Ci0gICAgICAgIGlmIChjYW52YXNEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYW52YXNEZWxlZ2F0ZS5kaXNwb3NlKCk7Ci0KLSAgICAgICAgLy8gcmVtb3ZlIGl0IGZyb20gdGhlIG1hbmFnZXIuCi0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IobmF0aXZlQ2FudmFzKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgLyoqCi0gICAgICogRXhlY3V0ZXMgYSB7QGxpbmsgR2NTbmFwc2hvdC5EcmF3YWJsZX0gd2l0aCBhIGdpdmVuIGNhbnZhcyBhbmQgcGFpbnQuCi0gICAgICogPHA+Tm90ZSB0aGF0IHRoZSBkcmF3YWJsZSBtYXkgYWN0dWFsbHkgYmUgZXhlY3V0ZWQgc2V2ZXJhbCB0aW1lcyBpZiB0aGVyZSBhcmUKLSAgICAgKiBsYXllcnMgaW52b2x2ZWQgKHNlZSB7QGxpbmsgI3NhdmVMYXllcihSZWN0RiwgaW50LCBpbnQpfS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRyYXcoaW50IG5DYW52YXMsIGludCBuUGFpbnQsIGJvb2xlYW4gY29tcG9zaXRlT25seSwgYm9vbGVhbiBmb3JjZVNyY01vZGUsCi0gICAgICAgICAgICBHY1NuYXBzaG90LkRyYXdhYmxlIGRyYXdhYmxlKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobkNhbnZhcyk7Ci0gICAgICAgIGlmIChjYW52YXNEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBnZXQgdGhlIHBhaW50IHdoaWNoIGNhbiBiZSBudWxsIGlmIG5QYWludCBpcyAwOwotICAgICAgICBQYWludF9EZWxlZ2F0ZSBwYWludERlbGVnYXRlID0gUGFpbnRfRGVsZWdhdGUuZ2V0RGVsZWdhdGUoblBhaW50KTsKLQotICAgICAgICBjYW52YXNEZWxlZ2F0ZS5nZXRTbmFwc2hvdCgpLmRyYXcoZHJhd2FibGUsIHBhaW50RGVsZWdhdGUsIGNvbXBvc2l0ZU9ubHksIGZvcmNlU3JjTW9kZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXhlY3V0ZXMgYSB7QGxpbmsgR2NTbmFwc2hvdC5EcmF3YWJsZX0gd2l0aCBhIGdpdmVuIGNhbnZhcy4gTm8gcGFpbnQgb2JqZWN0IHdpbGwgYmUgcHJvdmlkZWQKLSAgICAgKiB0byB7QGxpbmsgR2NTbmFwc2hvdC5EcmF3YWJsZSNkcmF3KEdyYXBoaWNzMkQsIFBhaW50X0RlbGVnYXRlKX0uCi0gICAgICogPHA+Tm90ZSB0aGF0IHRoZSBkcmF3YWJsZSBtYXkgYWN0dWFsbHkgYmUgZXhlY3V0ZWQgc2V2ZXJhbCB0aW1lcyBpZiB0aGVyZSBhcmUKLSAgICAgKiBsYXllcnMgaW52b2x2ZWQgKHNlZSB7QGxpbmsgI3NhdmVMYXllcihSZWN0RiwgaW50LCBpbnQpfS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRyYXcoaW50IG5DYW52YXMsIEdjU25hcHNob3QuRHJhd2FibGUgZHJhd2FibGUpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBDYW52YXNfRGVsZWdhdGUgY2FudmFzRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhbnZhc0RlbGVnYXRlLm1TbmFwc2hvdC5kcmF3KGRyYXdhYmxlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIENhbnZhc19EZWxlZ2F0ZShCaXRtYXBfRGVsZWdhdGUgYml0bWFwKSB7Ci0gICAgICAgIG1TbmFwc2hvdCA9IEdjU25hcHNob3QuY3JlYXRlRGVmYXVsdFNuYXBzaG90KG1CaXRtYXAgPSBiaXRtYXApOwotICAgIH0KLQotICAgIHByaXZhdGUgQ2FudmFzX0RlbGVnYXRlKCkgewotICAgICAgICBtU25hcHNob3QgPSBHY1NuYXBzaG90LmNyZWF0ZURlZmF1bHRTbmFwc2hvdChudWxsIC8qaW1hZ2UqLyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGlzcG9zZXMgb2YgdGhlIHtAbGluayBHcmFwaGljczJEfSBzdGFjay4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgZGlzcG9zZSgpIHsKLSAgICAgICAgbVNuYXBzaG90LmRpc3Bvc2UoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBzYXZlKGludCBzYXZlRmxhZ3MpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBjdXJyZW50IHNhdmUgY291bnQKLSAgICAgICAgaW50IGNvdW50ID0gbVNuYXBzaG90LnNpemUoKTsKLQotICAgICAgICBtU25hcHNob3QgPSBtU25hcHNob3Quc2F2ZShzYXZlRmxhZ3MpOwotCi0gICAgICAgIC8vIHJldHVybiB0aGUgb2xkIHNhdmUgY291bnQKLSAgICAgICAgcmV0dXJuIGNvdW50OwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IHNhdmVMYXllckFscGhhKFJlY3RGIHJlY3QsIGludCBhbHBoYSwgaW50IHNhdmVGbGFncykgewotICAgICAgICBQYWludF9EZWxlZ2F0ZSBwYWludCA9IG5ldyBQYWludF9EZWxlZ2F0ZSgpOwotICAgICAgICBwYWludC5zZXRBbHBoYShhbHBoYSk7Ci0gICAgICAgIHJldHVybiBzYXZlTGF5ZXIocmVjdCwgcGFpbnQsIHNhdmVGbGFncyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgc2F2ZUxheWVyKFJlY3RGIHJlY3QsIFBhaW50X0RlbGVnYXRlIHBhaW50LCBpbnQgc2F2ZUZsYWdzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgY3VycmVudCBzYXZlIGNvdW50Ci0gICAgICAgIGludCBjb3VudCA9IG1TbmFwc2hvdC5zaXplKCk7Ci0KLSAgICAgICAgbVNuYXBzaG90ID0gbVNuYXBzaG90LnNhdmVMYXllcihyZWN0LCBwYWludCwgc2F2ZUZsYWdzKTsKLQotICAgICAgICAvLyByZXR1cm4gdGhlIG9sZCBzYXZlIGNvdW50Ci0gICAgICAgIHJldHVybiBjb3VudDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXN0b3JlcyB0aGUge0BsaW5rIEdjU25hcHNob3R9IHRvIDx2YXI+c2F2ZUNvdW50PC92YXI+Ci0gICAgICogQHBhcmFtIHNhdmVDb3VudCB0aGUgc2F2ZUNvdW50Ci0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHJlc3RvcmVUbyhpbnQgc2F2ZUNvdW50KSB7Ci0gICAgICAgIG1TbmFwc2hvdCA9IG1TbmFwc2hvdC5yZXN0b3JlVG8oc2F2ZUNvdW50KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXN0b3JlcyB0aGUge0BsaW5rIEdjU25hcHNob3R9IHRvIDx2YXI+c2F2ZUNvdW50PC92YXI+Ci0gICAgICogQHBhcmFtIHNhdmVDb3VudCB0aGUgc2F2ZUNvdW50Ci0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHJlc3RvcmUoKSB7Ci0gICAgICAgIG1TbmFwc2hvdCA9IG1TbmFwc2hvdC5yZXN0b3JlKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGNsaXBSZWN0KGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgaW50IHJlZ2lvbk9wKSB7Ci0gICAgICAgIHJldHVybiBtU25hcHNob3QuY2xpcFJlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCByZWdpb25PcCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldEJpdG1hcChCaXRtYXBfRGVsZWdhdGUgYml0bWFwKSB7Ci0gICAgICAgIG1CaXRtYXAgPSBiaXRtYXA7Ci0gICAgICAgIGFzc2VydCBtU25hcHNob3Quc2l6ZSgpID09IDE7Ci0gICAgICAgIG1TbmFwc2hvdC5zZXRCaXRtYXAobUJpdG1hcCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkcmF3Qml0bWFwKAotICAgICAgICAgICAgaW50IG5hdGl2ZUNhbnZhcywKLSAgICAgICAgICAgIEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXAsCi0gICAgICAgICAgICBpbnQgbmF0aXZlUGFpbnRPclplcm8sCi0gICAgICAgICAgICBmaW5hbCBpbnQgc2xlZnQsIGZpbmFsIGludCBzdG9wLCBmaW5hbCBpbnQgc3JpZ2h0LCBmaW5hbCBpbnQgc2JvdHRvbSwKLSAgICAgICAgICAgIGZpbmFsIGludCBkbGVmdCwgZmluYWwgaW50IGR0b3AsIGZpbmFsIGludCBkcmlnaHQsIGZpbmFsIGludCBkYm90dG9tKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc0RlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlQ2FudmFzKTsKLSAgICAgICAgaWYgKGNhbnZhc0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgcGFpbnQsIHdoaWNoIGNvdWxkIGJlIG51bGwgaWYgdGhlIGludCBpcyAwCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIHBhaW50RGVsZWdhdGUgPSBQYWludF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShuYXRpdmVQYWludE9yWmVybyk7Ci0KLSAgICAgICAgZmluYWwgQnVmZmVyZWRJbWFnZSBpbWFnZSA9IGdldEltYWdlVG9EcmF3KGJpdG1hcCwgcGFpbnREZWxlZ2F0ZSwgc0Jvb2xPdXQpOwotCi0gICAgICAgIGRyYXcobmF0aXZlQ2FudmFzLCBuYXRpdmVQYWludE9yWmVybywgdHJ1ZSAvKmNvbXBvc2l0ZU9ubHkqLywgc0Jvb2xPdXRbMF0sCi0gICAgICAgICAgICAgICAgbmV3IEdjU25hcHNob3QuRHJhd2FibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KEdyYXBoaWNzMkQgZ3JhcGhpY3MsIFBhaW50X0RlbGVnYXRlIHBhaW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpbnQgIT0gbnVsbCAmJiBwYWludC5pc0ZpbHRlckJpdG1hcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3Muc2V0UmVuZGVyaW5nSGludChSZW5kZXJpbmdIaW50cy5LRVlfSU5URVJQT0xBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlcmluZ0hpbnRzLlZBTFVFX0lOVEVSUE9MQVRJT05fQklMSU5FQVIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL0ZJWE1FIGFkZCBzdXBwb3J0IGZvciBjYW52YXMsIHNjcmVlbiBhbmQgYml0bWFwIGRlbnNpdGllcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmRyYXdJbWFnZShpbWFnZSwgZGxlZnQsIGR0b3AsIGRyaWdodCwgZGJvdHRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZnQsIHN0b3AsIHNyaWdodCwgc2JvdHRvbSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgQnVmZmVyZWRJbWFnZSByZWFkeSBmb3IgZHJhd2luZywgYmFzZWQgb24gdGhlIGJpdG1hcCBhbmQgcGFpbnQgZGVsZWdhdGUuCi0gICAgICogVGhlIGltYWdlIHJldHVybnMsIHRocm91Z2ggYSAxLXNpemUgYm9vbGVhbiBhcnJheSwgd2hldGhlciB0aGUgZHJhd2luZyBjb2RlIHNob3VsZAotICAgICAqIHVzZSBhIFNSQyBjb21wb3NpdGUgbm8gbWF0dGVyIHdoYXQgdGhlIHBhaW50IHNheXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYml0bWFwIHRoZSBiaXRtYXAKLSAgICAgKiBAcGFyYW0gcGFpbnQgdGhlIHBhaW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRyYXcKLSAgICAgKiBAcGFyYW0gZm9yY2VTcmNNb2RlIHdoZXRoZXIgdGhlIGNvbXBvc2l0ZSB3aWxsIGhhdmUgdG8gYmUgU1JDCi0gICAgICogQHJldHVybiB0aGUgaW1hZ2UgdG8gZHJhdwotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIEJ1ZmZlcmVkSW1hZ2UgZ2V0SW1hZ2VUb0RyYXcoQml0bWFwX0RlbGVnYXRlIGJpdG1hcCwgUGFpbnRfRGVsZWdhdGUgcGFpbnQsCi0gICAgICAgICAgICBib29sZWFuW10gZm9yY2VTcmNNb2RlKSB7Ci0gICAgICAgIEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UgPSBiaXRtYXAuZ2V0SW1hZ2UoKTsKLSAgICAgICAgZm9yY2VTcmNNb2RlWzBdID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gaWYgdGhlIGJpdG1hcCBjb25maWcgaXMgYWxwaGFfOCwgdGhlbiB3ZSBlcmFzZSBhbGwgY29sb3IgdmFsdWUgZnJvbSBpdAotICAgICAgICAvLyBiZWZvcmUgZHJhd2luZyBpdC4KLSAgICAgICAgaWYgKGJpdG1hcC5nZXRDb25maWcoKSA9PSBCaXRtYXAuQ29uZmlnLkFMUEhBXzgpIHsKLSAgICAgICAgICAgIGZpeEFscGhhOEJpdG1hcChpbWFnZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYml0bWFwLmhhc0FscGhhKCkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIC8vIGhhc0FscGhhIGlzIG1lcmVseSBhIHJlbmRlcmluZyBoaW50LiBUaGVyZSBjYW4gaW4gZmFjdCBiZSBhbHBoYSB2YWx1ZXMKLSAgICAgICAgICAgIC8vIGluIHRoZSBiaXRtYXAgYnV0IGl0IHNob3VsZCBiZSBpZ25vcmVkIGF0IGRyYXdpbmcgdGltZS4KLSAgICAgICAgICAgIC8vIFRoZXJlIGlzIHR3byB3YXlzIHRvIGRvIHRoaXM6Ci0gICAgICAgICAgICAvLyAtIG92ZXJyaWRlIHRoZSBjb21wb3NpdGUgdG8gYmUgU1JDLiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaWYgdGhlIGNvbXBvc2l0ZQotICAgICAgICAgICAgLy8gICB3YXMgZ29pbmcgdG8gYmUgU1JDIG9yIFNSQ19PVkVSIGluIHRoZSBmaXJzdCBwbGFjZQotICAgICAgICAgICAgLy8gLSBDcmVhdGUgYSBkaWZmZXJlbnQgYml0bWFwIHRvIGRyYXcgaW4gd2hpY2ggYWxsIHRoZSBhbHBoYSBjaGFubmVsIHZhbHVlcyBpcyBzZXQKLSAgICAgICAgICAgIC8vICAgdG8gMHhGRi4KLSAgICAgICAgICAgIGlmIChwYWludCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgWGZlcm1vZGVfRGVsZWdhdGUgeGZlcm1vZGVEZWxlZ2F0ZSA9IHBhaW50LmdldFhmZXJtb2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHhmZXJtb2RlRGVsZWdhdGUgaW5zdGFuY2VvZiBQb3J0ZXJEdWZmWGZlcm1vZGVfRGVsZWdhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgUG9ydGVyRHVmZi5Nb2RlIG1vZGUgPQotICAgICAgICAgICAgICAgICAgICAgICAgKChQb3J0ZXJEdWZmWGZlcm1vZGVfRGVsZWdhdGUpeGZlcm1vZGVEZWxlZ2F0ZSkuZ2V0TW9kZSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvcmNlU3JjTW9kZVswXSA9IG1vZGUgPT0gUG9ydGVyRHVmZi5Nb2RlLlNSQ19PVkVSIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9PSBQb3J0ZXJEdWZmLk1vZGUuU1JDOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaWYgd2UgY2FuJ3QgZm9yY2UgU1JDIG1vZGUsIHRoZW4gY3JlYXRlIGEgdGVtcCBiaXRtYXAgb2YgVFlQRV9SR0IKLSAgICAgICAgICAgIGlmIChmb3JjZVNyY01vZGVbMF0gPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICBpbWFnZSA9IEJpdG1hcF9EZWxlZ2F0ZS5jcmVhdGVDb3B5KGltYWdlLCBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX1JHQiwgMHhGRik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gaW1hZ2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBmaXhBbHBoYThCaXRtYXAoZmluYWwgQnVmZmVyZWRJbWFnZSBpbWFnZSkgewotICAgICAgICBpbnQgdyA9IGltYWdlLmdldFdpZHRoKCk7Ci0gICAgICAgIGludCBoID0gaW1hZ2UuZ2V0SGVpZ2h0KCk7Ci0gICAgICAgIGludFtdIGFyZ2IgPSBuZXcgaW50W3cgKiBoXTsKLSAgICAgICAgaW1hZ2UuZ2V0UkdCKDAsIDAsIGltYWdlLmdldFdpZHRoKCksIGltYWdlLmdldEhlaWdodCgpLCBhcmdiLCAwLCBpbWFnZS5nZXRXaWR0aCgpKTsKLQotICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gYXJnYi5sZW5ndGg7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBhcmdiW2ldICY9IDB4RkYwMDAwMDA7Ci0gICAgICAgIH0KLSAgICAgICAgaW1hZ2Uuc2V0UkdCKDAsIDAsIHcsIGgsIGFyZ2IsIDAsIHcpOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlcl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlcl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWE3YWI2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JGaWx0ZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JGaWx0ZXIKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBDb2xvckZpbHRlciBoYXZlIGJlZW4gcmVwbGFjZWQKLSAqIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBDb2xvckZpbHRlciBjbGFzcy4KLSAqCi0gKiBUaGlzIGFsc28gc2VydmUgYXMgYSBiYXNlIGNsYXNzIGZvciBhbGwgQ29sb3JGaWx0ZXIgZGVsZWdhdGUgY2xhc3Nlcy4KLSAqCi0gKiBAc2VlIERlbGVnYXRlTWFuYWdlcgotICoKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIENvbG9yRmlsdGVyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBEZWxlZ2F0ZU1hbmFnZXI8Q29sb3JGaWx0ZXJfRGVsZWdhdGU+IHNNYW5hZ2VyID0KLSAgICAgICAgICAgIG5ldyBEZWxlZ2F0ZU1hbmFnZXI8Q29sb3JGaWx0ZXJfRGVsZWdhdGU+KENvbG9yRmlsdGVyX0RlbGVnYXRlLmNsYXNzKTsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgaGVscGVyIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIHB1YmxpYyBzdGF0aWMgQ29sb3JGaWx0ZXJfRGVsZWdhdGUgZ2V0RGVsZWdhdGUoaW50IG5hdGl2ZVNoYWRlcikgewotICAgICAgICByZXR1cm4gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlU2hhZGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1N1cHBvcnRlZCgpOwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKTsKLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgZmluYWxpemVyKGludCBuYXRpdmVfaW5zdGFuY2UsIGludCBuYXRpdmVDb2xvckZpbHRlcikgewotICAgICAgICBzTWFuYWdlci5yZW1vdmVKYXZhUmVmZXJlbmNlRm9yKG5hdGl2ZV9pbnN0YW5jZSk7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQ29sb3JNYXRyaXhDb2xvckZpbHRlcl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Db2xvck1hdHJpeENvbG9yRmlsdGVyX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZTM0NGIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Db2xvck1hdHJpeENvbG9yRmlsdGVyX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yTWF0cml4Q29sb3JGaWx0ZXIKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBDb2xvck1hdHJpeENvbG9yRmlsdGVyIGhhdmUKLSAqIGJlZW4gcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIENvbG9yTWF0cml4Q29sb3JGaWx0ZXIgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIENvbG9yRmlsdGVyX0RlbGVnYXRlfSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhCi0gKiB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfSwgYXMgYWxsIHRoZSBTaGFkZXIgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyCi0gKiBvd25lZCBieSB7QGxpbmsgQ29sb3JGaWx0ZXJfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgQ29sb3JGaWx0ZXJfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBDb2xvck1hdHJpeENvbG9yRmlsdGVyX0RlbGVnYXRlIGV4dGVuZHMgQ29sb3JGaWx0ZXJfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU3VwcG9ydGVkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpIHsKLSAgICAgICAgcmV0dXJuICJDb2xvck1hdHJpeCBDb2xvciBGaWx0ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiI7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNvbG9yTWF0cml4RmlsdGVyKGZsb2F0W10gYXJyYXkpIHsKLSAgICAgICAgQ29sb3JNYXRyaXhDb2xvckZpbHRlcl9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBDb2xvck1hdHJpeENvbG9yRmlsdGVyX0RlbGVnYXRlKCk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuQ29sb3JNYXRyaXhGaWx0ZXIoaW50IG5hdGl2ZUZpbHRlciwgZmxvYXRbXSBhcnJheSkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0NvbXBvc2VQYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0NvbXBvc2VQYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMDRhODcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Db21wb3NlUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgamF2YS5hd3QuU3Ryb2tlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5Db21wb3NlUGF0aEVmZmVjdAotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIENvbXBvc2VQYXRoRWZmZWN0IGhhdmUgYmVlbgotICogcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIENvbXBvc2VQYXRoRWZmZWN0IGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBQYXRoRWZmZWN0X0RlbGVnYXRlfSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LAotICogYXMgYWxsIHRoZSBTaGFkZXIgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyIG93bmVkIGJ5IHtAbGluayBQYXRoRWZmZWN0X0RlbGVnYXRlfS4KLSAqCi0gKiBAc2VlIFBhdGhFZmZlY3RfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21wb3NlUGF0aEVmZmVjdF9EZWxlZ2F0ZSBleHRlbmRzIFBhdGhFZmZlY3RfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJva2UgZ2V0U3Ryb2tlKFBhaW50X0RlbGVnYXRlIHBhaW50KSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU3VwcG9ydGVkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpIHsKLSAgICAgICAgcmV0dXJuICJDb21wb3NlIFBhdGggRWZmZWN0cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBMYXlvdXQgUHJldmlldyBtb2RlLiI7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNyZWF0ZShpbnQgb3V0ZXJwZSwgaW50IGlubmVycGUpIHsKLSAgICAgICAgQ29tcG9zZVBhdGhFZmZlY3RfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgQ29tcG9zZVBhdGhFZmZlY3RfRGVsZWdhdGUoKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Db21wb3NlU2hhZGVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0NvbXBvc2VTaGFkZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZlMWQwMC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0NvbXBvc2VTaGFkZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGphdmEuYXd0LlBhaW50OwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5Db21wb3NlU2hhZGVyCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgQ29tcG9zZVNoYWRlciBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBDb21wb3NlU2hhZGVyIGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBTaGFkZXJfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sCi0gKiBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIgb3duZWQgYnkge0BsaW5rIFNoYWRlcl9EZWxlZ2F0ZX0uCi0gKgotICogQHNlZSBTaGFkZXJfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21wb3NlU2hhZGVyX0RlbGVnYXRlIGV4dGVuZHMgU2hhZGVyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUGFpbnQgZ2V0SmF2YVBhaW50KCkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiQ29tcG9zZSBTaGFkZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIExheW91dCBQcmV2aWV3IG1vZGUuIjsKLSAgICB9Ci0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUxKGludCBuYXRpdmVfc2hhZGVyQSwgaW50IG5hdGl2ZV9zaGFkZXJCLAotICAgICAgICAgICAgaW50IG5hdGl2ZV9tb2RlKSB7Ci0gICAgICAgIC8vIEZJWE1FIG5vdCBzdXBwb3J0ZWQgeWV0LgotICAgICAgICBDb21wb3NlU2hhZGVyX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IENvbXBvc2VTaGFkZXJfRGVsZWdhdGUoKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNyZWF0ZTIoaW50IG5hdGl2ZV9zaGFkZXJBLCBpbnQgbmF0aXZlX3NoYWRlckIsCi0gICAgICAgICAgICBpbnQgcG9ydGVyRHVmZk1vZGUpIHsKLSAgICAgICAgLy8gRklYTUUgbm90IHN1cHBvcnRlZCB5ZXQuCi0gICAgICAgIENvbXBvc2VTaGFkZXJfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgQ29tcG9zZVNoYWRlcl9EZWxlZ2F0ZSgpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlUG9zdENyZWF0ZTEoaW50IG5hdGl2ZV9zaGFkZXIsIGludCBuYXRpdmVfc2tpYVNoYWRlckEsCi0gICAgICAgICAgICBpbnQgbmF0aXZlX3NraWFTaGFkZXJCLCBpbnQgbmF0aXZlX21vZGUpIHsKLSAgICAgICAgLy8gcGFzcywgbm90IG5lZWRlZC4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVQb3N0Q3JlYXRlMihpbnQgbmF0aXZlX3NoYWRlciwgaW50IG5hdGl2ZV9za2lhU2hhZGVyQSwKLSAgICAgICAgICAgIGludCBuYXRpdmVfc2tpYVNoYWRlckIsIGludCBwb3J0ZXJEdWZmTW9kZSkgewotICAgICAgICAvLyBwYXNzLCBub3QgbmVlZGVkLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0Nvcm5lclBhdGhFZmZlY3RfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQ29ybmVyUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGY4MTY4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQ29ybmVyUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgamF2YS5hd3QuU3Ryb2tlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5Db3JuZXJQYXRoRWZmZWN0Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgQ29ybmVyUGF0aEVmZmVjdCBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBDb3JuZXJQYXRoRWZmZWN0IGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBQYXRoRWZmZWN0X0RlbGVnYXRlfSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LAotICogYXMgYWxsIHRoZSBTaGFkZXIgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyIG93bmVkIGJ5IHtAbGluayBQYXRoRWZmZWN0X0RlbGVnYXRlfS4KLSAqCi0gKiBAc2VlIFBhdGhFZmZlY3RfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBDb3JuZXJQYXRoRWZmZWN0X0RlbGVnYXRlIGV4dGVuZHMgUGF0aEVmZmVjdF9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cm9rZSBnZXRTdHJva2UoUGFpbnRfRGVsZWdhdGUgcGFpbnQpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gIkNvcm5lciBQYXRoIEVmZmVjdHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTGF5b3V0IFByZXZpZXcgbW9kZS4iOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUoZmxvYXQgcmFkaXVzKSB7Ci0gICAgICAgIENvcm5lclBhdGhFZmZlY3RfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgQ29ybmVyUGF0aEVmZmVjdF9EZWxlZ2F0ZSgpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0Rhc2hQYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0Rhc2hQYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5N2MyZWMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9EYXNoUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgamF2YS5hd3QuQmFzaWNTdHJva2U7Ci1pbXBvcnQgamF2YS5hd3QuU3Ryb2tlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5EYXNoUGF0aEVmZmVjdAotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIERhc2hQYXRoRWZmZWN0IGhhdmUgYmVlbgotICogcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIERhc2hQYXRoRWZmZWN0IGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBQYXRoRWZmZWN0X0RlbGVnYXRlfSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhCi0gKiB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfSwgYXMgYWxsIHRoZSBQYXRoRWZmZWN0IGNsYXNzZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuYWdlciBvd25lZCBieQotICoge0BsaW5rIFBhdGhFZmZlY3RfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgUGF0aEVmZmVjdF9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIERhc2hQYXRoRWZmZWN0X0RlbGVnYXRlIGV4dGVuZHMgUGF0aEVmZmVjdF9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgcHJpdmF0ZSBmaW5hbCBmbG9hdFtdIG1JbnRlcnZhbHM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBmbG9hdCBtUGhhc2U7Ci0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3Ryb2tlIGdldFN0cm9rZShQYWludF9EZWxlZ2F0ZSBwYWludCkgewotICAgICAgICByZXR1cm4gbmV3IEJhc2ljU3Ryb2tlKAotICAgICAgICAgICAgICAgIHBhaW50LmdldFN0cm9rZVdpZHRoKCksCi0gICAgICAgICAgICAgICAgcGFpbnQuZ2V0SmF2YUNhcCgpLAotICAgICAgICAgICAgICAgIHBhaW50LmdldEphdmFKb2luKCksCi0gICAgICAgICAgICAgICAgcGFpbnQuZ2V0SmF2YVN0cm9rZU1pdGVyKCksCi0gICAgICAgICAgICAgICAgbUludGVydmFscywKLSAgICAgICAgICAgICAgICBtUGhhc2UpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU3VwcG9ydGVkKCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICAvLyBubyBtZXNzYWdlIHNpbmNlIGlzU3VwcG9ydGVkIHJldHVybnMgdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNyZWF0ZShmbG9hdCBpbnRlcnZhbHNbXSwgZmxvYXQgcGhhc2UpIHsKLSAgICAgICAgRGFzaFBhdGhFZmZlY3RfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgRGFzaFBhdGhFZmZlY3RfRGVsZWdhdGUoaW50ZXJ2YWxzLCBwaGFzZSk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIHByaXZhdGUgRGFzaFBhdGhFZmZlY3RfRGVsZWdhdGUoZmxvYXQgaW50ZXJ2YWxzW10sIGZsb2F0IHBoYXNlKSB7Ci0gICAgICAgIG1JbnRlcnZhbHMgPSBuZXcgZmxvYXRbaW50ZXJ2YWxzLmxlbmd0aF07Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoaW50ZXJ2YWxzLCAwLCBtSW50ZXJ2YWxzLCAwLCBpbnRlcnZhbHMubGVuZ3RoKTsKLSAgICAgICAgbVBoYXNlID0gcGhhc2U7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0Rpc2NyZXRlUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9EaXNjcmV0ZVBhdGhFZmZlY3RfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM0YTgxMC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0Rpc2NyZXRlUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgamF2YS5hd3QuU3Ryb2tlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5EaXNjcmV0ZVBhdGhFZmZlY3QKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBEaXNjcmV0ZVBhdGhFZmZlY3QgaGF2ZSBiZWVuCi0gKiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgRGlzY3JldGVQYXRoRWZmZWN0IGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBQYXRoRWZmZWN0X0RlbGVnYXRlfSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LAotICogYXMgYWxsIHRoZSBTaGFkZXIgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyIG93bmVkIGJ5IHtAbGluayBQYXRoRWZmZWN0X0RlbGVnYXRlfS4KLSAqCi0gKiBAc2VlIFBhdGhFZmZlY3RfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBEaXNjcmV0ZVBhdGhFZmZlY3RfRGVsZWdhdGUgZXh0ZW5kcyBQYXRoRWZmZWN0X0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3Ryb2tlIGdldFN0cm9rZShQYWludF9EZWxlZ2F0ZSBwYWludCkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiRGlzY3JldGUgUGF0aCBFZmZlY3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIExheW91dCBQcmV2aWV3IG1vZGUuIjsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ3JlYXRlKGZsb2F0IGxlbmd0aCwgZmxvYXQgZGV2aWF0aW9uKSB7Ci0gICAgICAgIERpc2NyZXRlUGF0aEVmZmVjdF9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBEaXNjcmV0ZVBhdGhFZmZlY3RfRGVsZWdhdGUoKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9EcmF3RmlsdGVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0RyYXdGaWx0ZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcwYzQ2Yi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0RyYXdGaWx0ZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuRHJhd0ZpbHRlcgotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIERyYXdGaWx0ZXIgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgRHJhd0ZpbHRlciBjbGFzcy4KLSAqCi0gKiBUaGlzIGFsc28gc2VydmUgYXMgYSBiYXNlIGNsYXNzIGZvciBhbGwgRHJhd0ZpbHRlciBkZWxlZ2F0ZSBjbGFzc2VzLgotICoKLSAqIEBzZWUgRGVsZWdhdGVNYW5hZ2VyCi0gKgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRHJhd0ZpbHRlcl9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIG1hbmFnZXIgLS0tLQotICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPERyYXdGaWx0ZXJfRGVsZWdhdGU+IHNNYW5hZ2VyID0KLSAgICAgICAgICAgIG5ldyBEZWxlZ2F0ZU1hbmFnZXI8RHJhd0ZpbHRlcl9EZWxlZ2F0ZT4oRHJhd0ZpbHRlcl9EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGhlbHBlciBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwdWJsaWMgc3RhdGljIERyYXdGaWx0ZXJfRGVsZWdhdGUgZ2V0RGVsZWdhdGUoaW50IG5hdGl2ZURyYXdGaWx0ZXIpIHsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZURyYXdGaWx0ZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzU3VwcG9ydGVkKCk7Ci0gICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpOwotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVEZXN0cnVjdG9yKGludCBuYXRpdmVEcmF3RmlsdGVyKSB7Ci0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IobmF0aXZlRHJhd0ZpbHRlcik7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvRW1ib3NzTWFza0ZpbHRlcl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9FbWJvc3NNYXNrRmlsdGVyX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYzFjMWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9FbWJvc3NNYXNrRmlsdGVyX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLkVtYm9zc01hc2tGaWx0ZXIKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBFbWJvc3NNYXNrRmlsdGVyIGhhdmUKLSAqIGJlZW4gcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIEVtYm9zc01hc2tGaWx0ZXIgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIE1hc2tGaWx0ZXJfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEKLSAqIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LCBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIKLSAqIG93bmVkIGJ5IHtAbGluayBNYXNrRmlsdGVyX0RlbGVnYXRlfS4KLSAqCi0gKiBAc2VlIE1hc2tGaWx0ZXJfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBFbWJvc3NNYXNrRmlsdGVyX0RlbGVnYXRlIGV4dGVuZHMgTWFza0ZpbHRlcl9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gIkVtYm9zcyBNYXNrIEZpbHRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIjsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ29uc3RydWN0b3IoZmxvYXRbXSBkaXJlY3Rpb24sIGZsb2F0IGFtYmllbnQsCi0gICAgICAgICAgICBmbG9hdCBzcGVjdWxhciwgZmxvYXQgYmx1clJhZGl1cykgewotICAgICAgICBFbWJvc3NNYXNrRmlsdGVyX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IEVtYm9zc01hc2tGaWx0ZXJfRGVsZWdhdGUoKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9HcmFkaWVudF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9HcmFkaWVudF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDc1YzIyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvR3JhZGllbnRfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TaGFkZXIuVGlsZU1vZGU7Ci0KLS8qKgotICogQmFzZSBjbGFzcyBmb3IgdHJ1ZSBHcmFkaWVudCBzaGFkZXIgZGVsZWdhdGUuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBHcmFkaWVudF9EZWxlZ2F0ZSBleHRlbmRzIFNoYWRlcl9EZWxlZ2F0ZSB7Ci0KLSAgICBwcm90ZWN0ZWQgZmluYWwgaW50W10gbUNvbG9yczsKLSAgICBwcm90ZWN0ZWQgZmluYWwgZmxvYXRbXSBtUG9zaXRpb25zOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIC8vIGFsbCBncmFkaWVudCBzaGFkZXJzIGFyZSBzdXBwb3J0ZWQuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKSB7Ci0gICAgICAgIC8vIGFsbCBncmFkaWVudCBzaGFkZXJzIGFyZSBzdXBwb3J0ZWQsIG5vIG5lZWQgZm9yIGEgZ3JhZGllbnQgc3VwcG9ydAotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIHRoZSBiYXNlIHNoYWRlciBhbmQgZG8gc29tZSBiYXNpYyB0ZXN0IG9uIHRoZSBwYXJhbWV0ZXJzLgotICAgICAqCi0gICAgICogQHBhcmFtIGNvbG9ycyBUaGUgY29sb3JzIHRvIGJlIGRpc3RyaWJ1dGVkIGFsb25nIHRoZSBncmFkaWVudCBsaW5lCi0gICAgICogQHBhcmFtIHBvc2l0aW9ucyBNYXkgYmUgbnVsbC4gVGhlIHJlbGF0aXZlIHBvc2l0aW9ucyBbMC4uMV0gb2YgZWFjaAotICAgICAqICAgICAgICAgICAgY29ycmVzcG9uZGluZyBjb2xvciBpbiB0aGUgY29sb3JzIGFycmF5LiBJZiB0aGlzIGlzIG51bGwsIHRoZQotICAgICAqICAgICAgICAgICAgdGhlIGNvbG9ycyBhcmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFsb25nIHRoZSBncmFkaWVudCBsaW5lLgotICAgICAqLwotICAgIHByb3RlY3RlZCBHcmFkaWVudF9EZWxlZ2F0ZShpbnQgY29sb3JzW10sIGZsb2F0IHBvc2l0aW9uc1tdKSB7Ci0gICAgICAgIGlmIChjb2xvcnMubGVuZ3RoIDwgMikgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibmVlZHMgPj0gMiBudW1iZXIgb2YgY29sb3JzIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBvc2l0aW9ucyAhPSBudWxsICYmIGNvbG9ycy5sZW5ndGggIT0gcG9zaXRpb25zLmxlbmd0aCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiY29sb3IgYW5kIHBvc2l0aW9uIGFycmF5cyBtdXN0IGJlIG9mIGVxdWFsIGxlbmd0aCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBvc2l0aW9ucyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBmbG9hdCBzcGFjaW5nID0gMS5mIC8gKGNvbG9ycy5sZW5ndGggLSAxKTsKLSAgICAgICAgICAgIHBvc2l0aW9ucyA9IG5ldyBmbG9hdFtjb2xvcnMubGVuZ3RoXTsKLSAgICAgICAgICAgIHBvc2l0aW9uc1swXSA9IDAuZjsKLSAgICAgICAgICAgIHBvc2l0aW9uc1tjb2xvcnMubGVuZ3RoLTFdID0gMS5mOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBjb2xvcnMubGVuZ3RoIC0gMSA7IGkrKykgewotICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tpXSA9IHNwYWNpbmcgKiBpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbUNvbG9ycyA9IGNvbG9yczsKLSAgICAgICAgbVBvc2l0aW9ucyA9IHBvc2l0aW9uczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBCYXNlIGNsYXNzIGZvciAoSmF2YSkgR3JhZGllbnQgUGFpbnRzLiBUaGlzIGhhbmRsZXMgY29tcHV0aW5nIHRoZSBncmFkaWVudCBjb2xvcnMgYmFzZWQKLSAgICAgKiBvbiB0aGUgY29sb3IgYW5kIHBvc2l0aW9uIGxpc3RzLCBhcyB3ZWxsIGFzIHRoZSB7QGxpbmsgVGlsZU1vZGV9Ci0gICAgICoKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIEdyYWRpZW50UGFpbnQgaW1wbGVtZW50cyBqYXZhLmF3dC5QYWludCB7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBHUkFESUVOVF9TSVpFID0gMTAwOwotCi0gICAgICAgIHByaXZhdGUgZmluYWwgaW50W10gbUNvbG9yczsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBmbG9hdFtdIG1Qb3NpdGlvbnM7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgVGlsZU1vZGUgbVRpbGVNb2RlOwotICAgICAgICBwcml2YXRlIGludFtdIG1HcmFkaWVudDsKLQotICAgICAgICBwcm90ZWN0ZWQgR3JhZGllbnRQYWludChpbnRbXSBjb2xvcnMsIGZsb2F0W10gcG9zaXRpb25zLCBUaWxlTW9kZSB0aWxlTW9kZSkgewotICAgICAgICAgICAgbUNvbG9ycyA9IGNvbG9yczsKLSAgICAgICAgICAgIG1Qb3NpdGlvbnMgPSBwb3NpdGlvbnM7Ci0gICAgICAgICAgICBtVGlsZU1vZGUgPSB0aWxlTW9kZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IGdldFRyYW5zcGFyZW5jeSgpIHsKLSAgICAgICAgICAgIHJldHVybiBqYXZhLmF3dC5QYWludC5UUkFOU0xVQ0VOVDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBQcmUtY29tcHV0ZXMgdGhlIGNvbG9ycyBmb3IgdGhlIGdyYWRpZW50LiBUaGlzIG11c3QgYmUgY2FsbGVkIG9uY2UgYmVmb3JlIGFueSBjYWxsCi0gICAgICAgICAqIHRvIHtAbGluayAjZ2V0R3JhZGllbnRDb2xvcihmbG9hdCl9Ci0gICAgICAgICAqLwotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBwcmVjb21wdXRlR3JhZGllbnRDb2xvcnMoKSB7Ci0gICAgICAgICAgICBpZiAobUdyYWRpZW50ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBhY3R1YWxseSBjcmVhdGUgYW4gYXJyYXkgd2l0aCBhbiBleHRyYSBzaXplLCBzbyB0aGF0IHdlIGNhbiByZWFsbHkgZ28KLSAgICAgICAgICAgICAgICAvLyBmcm9tIDAgdG8gU0laRSAoMTAwJSksIG9yIGN1cnJlbnRQb3MgaW4gdGhlIGxvb3AgYmVsb3cgd2lsbCBuZXZlciBlcXVhbCAxLjAKLSAgICAgICAgICAgICAgICBtR3JhZGllbnQgPSBuZXcgaW50W0dSQURJRU5UX1NJWkUrMV07Ci0KLSAgICAgICAgICAgICAgICBpbnQgcHJldlBvcyA9IDA7Ci0gICAgICAgICAgICAgICAgaW50IG5leHRQb3MgPSAxOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgID0gMCA7IGkgPD0gR1JBRElFTlRfU0laRSA7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGN1cnJlbnQgcG9zaXRpb24KLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3VycmVudFBvcyA9IChmbG9hdClpL0dSQURJRU5UX1NJWkU7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50UG9zID4gbVBvc2l0aW9uc1tuZXh0UG9zXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJldlBvcyA9IG5leHRQb3MrKzsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGZsb2F0IHBlcmNlbnQgPSAoY3VycmVudFBvcyAtIG1Qb3NpdGlvbnNbcHJldlBvc10pIC8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVBvc2l0aW9uc1tuZXh0UG9zXSAtIG1Qb3NpdGlvbnNbcHJldlBvc10pOwotCi0gICAgICAgICAgICAgICAgICAgIG1HcmFkaWVudFtpXSA9IGNvbXB1dGVDb2xvcihtQ29sb3JzW3ByZXZQb3NdLCBtQ29sb3JzW25leHRQb3NdLCBwZXJjZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0aGUgY29sb3IgYmFzZWQgb24gdGhlIHBvc2l0aW9uIGluIHRoZSBncmFkaWVudC4KLSAgICAgICAgICogPHZhcj5wb3M8L3Zhcj4gY2FuIGJlIGFueXRoaW5nLCBldmVuICZsdDsgMCBvciAmZ3Q7ID4gMSwgYXMgdGhlIGdyYWRpZW50Ci0gICAgICAgICAqIHdpbGwgdXNlIHtAbGluayBUaWxlTW9kZX0gdmFsdWUgdG8gY29udmVydCBpdCBpbnRvIGEgWzAsMV0gdmFsdWUuCi0gICAgICAgICAqLwotICAgICAgICBwcm90ZWN0ZWQgaW50IGdldEdyYWRpZW50Q29sb3IoZmxvYXQgcG9zKSB7Ci0gICAgICAgICAgICBpZiAocG9zIDwgMC5mKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1UaWxlTW9kZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobVRpbGVNb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENMQU1QOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDAuZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUkVQRUFUOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgaW50ZWdlciBwYXJ0IHRvIHN0YXkgaW4gdGhlIFswLDFdIHJhbmdlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGFsc28gbmVlZCB0byBpbnZlcnQgdGhlIHZhbHVlIGZyb20gWy0xLDBdIHRvIFswLCAxXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IHBvcyAtIChmbG9hdClNYXRoLmZsb29yKHBvcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE1JUlJPUjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBwb3NpdGl2ZSBzaWRlLCBqdXN0IG1ha2UgdGhlIHZhbHVlIHBvc2l0aXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gTWF0aC5hYnMocG9zKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgaW50ZWdlciBhbmQgdGhlIGRlY2ltYWwgcGFydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnRQYXJ0ID0gKGludClNYXRoLmZsb29yKHBvcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gcG9zIC0gaW50UGFydDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIC0+IDEgOiBub3JtYWwgb3JkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxIC0+IDI6IG1pcnJvcmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXRjLi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIG1lYW5zIGlmIHRoZSBpbnRwYXJ0IGlzIG9kZCB3ZSBpbnZlcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGludFBhcnQgJSAyKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDEuZiAtIHBvczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwb3MgPSAwLjBmOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zID4gMWYpIHsKLSAgICAgICAgICAgICAgICBpZiAobVRpbGVNb2RlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtVGlsZU1vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ0xBTVA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gMS5mOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSRVBFQVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBpbnRlZ2VyIHBhcnQgdG8gc3RheSBpbiB0aGUgWzAsMV0gcmFuZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBwb3MgLSAoZmxvYXQpTWF0aC5mbG9vcihwb3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBNSVJST1I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBpbnRlZ2VyIGFuZCB0aGUgZGVjaW1hbCBwYXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGludFBhcnQgPSAoaW50KU1hdGguZmxvb3IocG9zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBwb3MgLSBpbnRQYXJ0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgLT4gMSA6IG5vcm1hbCBvcmRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgLT4gMjogbWlycm9yZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBldGMuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgaWYgdGhlIGludHBhcnQgaXMgb2RkIHdlIGludmVydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaW50UGFydCAlIDIpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gMS5mIC0gcG9zOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBvcyA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQgaW5kZXggPSAoaW50KSgocG9zICogR1JBRElFTlRfU0laRSkgKyAuNSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBtR3JhZGllbnRbaW5kZXhdOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgdGhlIGNvbG9yIGJldHdlZW4gYzEsIGFuZCBjMiwgYmFzZWQgb24gdGhlIHBlcmNlbnQgb2YgdGhlIGRpc3RhbmNlCi0gICAgICAgICAqIGJldHdlZW4gYzEgYW5kIGMyLgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBpbnQgY29tcHV0ZUNvbG9yKGludCBjMSwgaW50IGMyLCBmbG9hdCBwZXJjZW50KSB7Ci0gICAgICAgICAgICBpbnQgYSA9IGNvbXB1dGVDaGFubmVsKChjMSA+PiAyNCkgJiAweEZGLCAoYzIgPj4gMjQpICYgMHhGRiwgcGVyY2VudCk7Ci0gICAgICAgICAgICBpbnQgciA9IGNvbXB1dGVDaGFubmVsKChjMSA+PiAxNikgJiAweEZGLCAoYzIgPj4gMTYpICYgMHhGRiwgcGVyY2VudCk7Ci0gICAgICAgICAgICBpbnQgZyA9IGNvbXB1dGVDaGFubmVsKChjMSA+PiAgOCkgJiAweEZGLCAoYzIgPj4gIDgpICYgMHhGRiwgcGVyY2VudCk7Ci0gICAgICAgICAgICBpbnQgYiA9IGNvbXB1dGVDaGFubmVsKChjMSAgICAgICkgJiAweEZGLCAoYzIgICAgICApICYgMHhGRiwgcGVyY2VudCk7Ci0gICAgICAgICAgICByZXR1cm4gYSA8PCAyNCB8IHIgPDwgMTYgfCBnIDw8IDggfCBiOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgdGhlIGNoYW5uZWwgdmFsdWUgYmV0d2VlbiAyIHZhbHVlcyBiYXNlZCBvbiB0aGUgcGVyY2VudCBvZiB0aGUgZGlzdGFuY2UgYmV0d2VlbgotICAgICAgICAgKiB0aGUgMiB2YWx1ZXMuLgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBpbnQgY29tcHV0ZUNoYW5uZWwoaW50IGMxLCBpbnQgYzIsIGZsb2F0IHBlcmNlbnQpIHsKLSAgICAgICAgICAgIHJldHVybiBjMSArIChpbnQpKChwZXJjZW50ICogKGMyLWMxKSkgKyAuNSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0xheWVyUmFzdGVyaXplcl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9MYXllclJhc3Rlcml6ZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFlMDU3Ni4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0xheWVyUmFzdGVyaXplcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5MYXllclJhc3Rlcml6ZXIKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBMYXllclJhc3Rlcml6ZXIgaGF2ZQotICogYmVlbiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgTGF5ZXJSYXN0ZXJpemVyIGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBSYXN0ZXJpemVyX0RlbGVnYXRlfSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhCi0gKiB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfSwgYXMgYWxsIHRoZSBTaGFkZXIgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyCi0gKiBvd25lZCBieSB7QGxpbmsgUmFzdGVyaXplcl9EZWxlZ2F0ZX0uCi0gKgotICogQHNlZSBSYXN0ZXJpemVyX0RlbGVnYXRlCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTGF5ZXJSYXN0ZXJpemVyX0RlbGVnYXRlIGV4dGVuZHMgUmFzdGVyaXplcl9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gIkxheWVyIFJhc3Rlcml6ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiI7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNvbnN0cnVjdG9yKCkgewotICAgICAgICBMYXllclJhc3Rlcml6ZXJfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgTGF5ZXJSYXN0ZXJpemVyX0RlbGVnYXRlKCk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlQWRkTGF5ZXIoaW50IG5hdGl2ZV9sYXllciwgaW50IG5hdGl2ZV9wYWludCwgZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0KLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9MaWdodGluZ0NvbG9yRmlsdGVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0xpZ2h0aW5nQ29sb3JGaWx0ZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVlODgzZC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0xpZ2h0aW5nQ29sb3JGaWx0ZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuTGlnaHRpbmdDb2xvckZpbHRlcgotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIExpZ2h0aW5nQ29sb3JGaWx0ZXIgaGF2ZQotICogYmVlbiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgTGlnaHRpbmdDb2xvckZpbHRlciBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIHRoaXMgZXh0ZW5kcyB7QGxpbmsgQ29sb3JGaWx0ZXJfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEKLSAqIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LCBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIKLSAqIG93bmVkIGJ5IHtAbGluayBDb2xvckZpbHRlcl9EZWxlZ2F0ZX0uCi0gKgotICogQHNlZSBDb2xvckZpbHRlcl9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGNsYXNzIExpZ2h0aW5nQ29sb3JGaWx0ZXJfRGVsZWdhdGUgZXh0ZW5kcyBDb2xvckZpbHRlcl9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gIkxpZ2h0aW5nIENvbG9yIEZpbHRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIjsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX0NyZWF0ZUxpZ2h0aW5nRmlsdGVyKGludCBtdWwsIGludCBhZGQpIHsKLSAgICAgICAgTGlnaHRpbmdDb2xvckZpbHRlcl9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBMaWdodGluZ0NvbG9yRmlsdGVyX0RlbGVnYXRlKCk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuQ3JlYXRlTGlnaHRpbmdGaWx0ZXIoaW50IG5hdGl2ZUZpbHRlciwgaW50IG11bCwgaW50IGFkZCkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0xpbmVhckdyYWRpZW50X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL0xpbmVhckdyYWRpZW50X0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMTdmY2EuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9MaW5lYXJHcmFkaWVudF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TaGFkZXIuVGlsZU1vZGU7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLkxpbmVhckdyYWRpZW50Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgTGluZWFyR3JhZGllbnQgaGF2ZSBiZWVuCi0gKiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgTGluZWFyR3JhZGllbnQgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIFNoYWRlcl9EZWxlZ2F0ZX0sIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYSB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfSwKLSAqIGFzIGFsbCB0aGUgU2hhZGVyIGNsYXNzZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuYWdlciBvd25lZCBieSB7QGxpbmsgU2hhZGVyX0RlbGVnYXRlfS4KLSAqCi0gKiBAc2VlIFNoYWRlcl9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIExpbmVhckdyYWRpZW50X0RlbGVnYXRlIGV4dGVuZHMgR3JhZGllbnRfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLSAgICBwcml2YXRlIGphdmEuYXd0LlBhaW50IG1KYXZhUGFpbnQ7Ci0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgamF2YS5hd3QuUGFpbnQgZ2V0SmF2YVBhaW50KCkgewotICAgICAgICByZXR1cm4gbUphdmFQYWludDsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ3JlYXRlMShMaW5lYXJHcmFkaWVudCB0aGlzR3JhZGllbnQsCi0gICAgICAgICAgICBmbG9hdCB4MCwgZmxvYXQgeTAsIGZsb2F0IHgxLCBmbG9hdCB5MSwKLSAgICAgICAgICAgIGludCBjb2xvcnNbXSwgZmxvYXQgcG9zaXRpb25zW10sIGludCB0aWxlTW9kZSkgewotICAgICAgICBMaW5lYXJHcmFkaWVudF9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBMaW5lYXJHcmFkaWVudF9EZWxlZ2F0ZSh4MCwgeTAsIHgxLCB5MSwKLSAgICAgICAgICAgICAgICBjb2xvcnMsIHBvc2l0aW9ucywgU2hhZGVyX0RlbGVnYXRlLmdldFRpbGVNb2RlKHRpbGVNb2RlKSk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUyKExpbmVhckdyYWRpZW50IHRoaXNHcmFkaWVudCwKLSAgICAgICAgICAgIGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgeDEsIGZsb2F0IHkxLAotICAgICAgICAgICAgaW50IGNvbG9yMCwgaW50IGNvbG9yMSwgaW50IHRpbGVNb2RlKSB7Ci0gICAgICAgIHJldHVybiBuYXRpdmVDcmVhdGUxKHRoaXNHcmFkaWVudCwKLSAgICAgICAgICAgICAgICB4MCwgeTAsIHgxLCB5MSwgbmV3IGludFtdIHsgY29sb3IwLCBjb2xvcjF9LCBudWxsIC8qcG9zaXRpb25zKi8sCi0gICAgICAgICAgICAgICAgdGlsZU1vZGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlUG9zdENyZWF0ZTEoTGluZWFyR3JhZGllbnQgdGhpc0dyYWRpZW50LAotICAgICAgICAgICAgaW50IG5hdGl2ZV9zaGFkZXIsIGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgeDEsIGZsb2F0IHkxLAotICAgICAgICAgICAgaW50IGNvbG9yc1tdLCBmbG9hdCBwb3NpdGlvbnNbXSwgaW50IHRpbGVNb2RlKSB7Ci0gICAgICAgIC8vIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZVBvc3RDcmVhdGUyKExpbmVhckdyYWRpZW50IHRoaXNHcmFkaWVudCwKLSAgICAgICAgICAgIGludCBuYXRpdmVfc2hhZGVyLCBmbG9hdCB4MCwgZmxvYXQgeTAsIGZsb2F0IHgxLCBmbG9hdCB5MSwKLSAgICAgICAgICAgIGludCBjb2xvcjAsIGludCBjb2xvcjEsIGludCB0aWxlTW9kZSkgewotICAgICAgICAvLyBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhIHNoYWRlciB0aGF0IGRyYXdzIGEgbGluZWFyIGdyYWRpZW50IGFsb25nIGEgbGluZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSB4MCBUaGUgeC1jb29yZGluYXRlIGZvciB0aGUgc3RhcnQgb2YgdGhlIGdyYWRpZW50IGxpbmUKLSAgICAgKiBAcGFyYW0geTAgVGhlIHktY29vcmRpbmF0ZSBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBncmFkaWVudCBsaW5lCi0gICAgICogQHBhcmFtIHgxIFRoZSB4LWNvb3JkaW5hdGUgZm9yIHRoZSBlbmQgb2YgdGhlIGdyYWRpZW50IGxpbmUKLSAgICAgKiBAcGFyYW0geTEgVGhlIHktY29vcmRpbmF0ZSBmb3IgdGhlIGVuZCBvZiB0aGUgZ3JhZGllbnQgbGluZQotICAgICAqIEBwYXJhbSBjb2xvcnMgVGhlIGNvbG9ycyB0byBiZSBkaXN0cmlidXRlZCBhbG9uZyB0aGUgZ3JhZGllbnQgbGluZQotICAgICAqIEBwYXJhbSBwb3NpdGlvbnMgTWF5IGJlIG51bGwuIFRoZSByZWxhdGl2ZSBwb3NpdGlvbnMgWzAuLjFdIG9mIGVhY2gKLSAgICAgKiAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgY29sb3IgaW4gdGhlIGNvbG9ycyBhcnJheS4gSWYgdGhpcyBpcyBudWxsLCB0aGUKLSAgICAgKiAgICAgICAgICAgIHRoZSBjb2xvcnMgYXJlIGRpc3RyaWJ1dGVkIGV2ZW5seSBhbG9uZyB0aGUgZ3JhZGllbnQgbGluZS4KLSAgICAgKiBAcGFyYW0gdGlsZSBUaGUgU2hhZGVyIHRpbGluZyBtb2RlCi0gICAgICovCi0gICAgcHJpdmF0ZSBMaW5lYXJHcmFkaWVudF9EZWxlZ2F0ZShmbG9hdCB4MCwgZmxvYXQgeTAsIGZsb2F0IHgxLCBmbG9hdCB5MSwKLSAgICAgICAgICAgIGludCBjb2xvcnNbXSwgZmxvYXQgcG9zaXRpb25zW10sIFRpbGVNb2RlIHRpbGUpIHsKLSAgICAgICAgc3VwZXIoY29sb3JzLCBwb3NpdGlvbnMpOwotICAgICAgICBtSmF2YVBhaW50ID0gbmV3IExpbmVhckdyYWRpZW50UGFpbnQoeDAsIHkwLCB4MSwgeTEsIG1Db2xvcnMsIG1Qb3NpdGlvbnMsIHRpbGUpOwotICAgIH0KLQotICAgIC8vIC0tLS0gQ3VzdG9tIEphdmEgUGFpbnQgLS0tLQotICAgIC8qKgotICAgICAqIExpbmVhciBHcmFkaWVudCAoSmF2YSkgUGFpbnQgYWJsZSB0byBoYW5kbGUgbW9yZSB0aGFuIDIgcG9pbnRzLCBhcwotICAgICAqIHtAbGluayBqYXZhLmF3dC5HcmFkaWVudFBhaW50fSBvbmx5IHN1cHBvcnRzIDIgcG9pbnRzIGFuZCBkb2VzIG5vdCBzdXBwb3J0IEFuZHJvaWQncyB0aWxlCi0gICAgICogbW9kZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBjbGFzcyBMaW5lYXJHcmFkaWVudFBhaW50IGV4dGVuZHMgR3JhZGllbnRQYWludCB7Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBmbG9hdCBtWDA7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgZmxvYXQgbVkwOwotICAgICAgICBwcml2YXRlIGZpbmFsIGZsb2F0IG1EeDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBmbG9hdCBtRHk7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgZmxvYXQgbURTaXplMjsKLQotICAgICAgICBwdWJsaWMgTGluZWFyR3JhZGllbnRQYWludChmbG9hdCB4MCwgZmxvYXQgeTAsIGZsb2F0IHgxLCBmbG9hdCB5MSwgaW50IGNvbG9yc1tdLAotICAgICAgICAgICAgICAgIGZsb2F0IHBvc2l0aW9uc1tdLCBUaWxlTW9kZSB0aWxlKSB7Ci0gICAgICAgICAgICBzdXBlcihjb2xvcnMsIHBvc2l0aW9ucywgdGlsZSk7Ci0gICAgICAgICAgICBtWDAgPSB4MDsKLSAgICAgICAgICAgIG1ZMCA9IHkwOwotICAgICAgICAgICAgbUR4ID0geDEgLSB4MDsKLSAgICAgICAgICAgIG1EeSA9IHkxIC0geTA7Ci0gICAgICAgICAgICBtRFNpemUyID0gbUR4ICogbUR4ICsgbUR5ICogbUR5OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBqYXZhLmF3dC5QYWludENvbnRleHQgY3JlYXRlQ29udGV4dCgKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsICAgICAgY29sb3JNb2RlbCwKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5SZWN0YW5nbGUgICAgICAgICAgICAgZGV2aWNlQm91bmRzLAotICAgICAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uUmVjdGFuZ2xlMkQgICAgICB1c2VyQm91bmRzLAotICAgICAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtICB4Zm9ybSwKLSAgICAgICAgICAgICAgICBqYXZhLmF3dC5SZW5kZXJpbmdIaW50cyAgICAgICAgaGludHMpIHsKLSAgICAgICAgICAgIHByZWNvbXB1dGVHcmFkaWVudENvbG9ycygpOwotCi0gICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBjYW52YXNNYXRyaXg7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNhbnZhc01hdHJpeCA9IHhmb3JtLmNyZWF0ZUludmVyc2UoKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGphdmEuYXd0Lmdlb20uTm9uaW52ZXJ0aWJsZVRyYW5zZm9ybUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX01BVFJJWF9JTlZFUlNFLAotICAgICAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBpbnZlcnNlIG1hdHJpeCBpbiBMaW5lYXJHcmFkaWVudCIsIGUsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgIGNhbnZhc01hdHJpeCA9IG5ldyBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBsb2NhbE1hdHJpeCA9IGdldExvY2FsTWF0cml4KCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGxvY2FsTWF0cml4ID0gbG9jYWxNYXRyaXguY3JlYXRlSW52ZXJzZSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5hd3QuZ2VvbS5Ob25pbnZlcnRpYmxlVHJhbnNmb3JtRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfTUFUUklYX0lOVkVSU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGludmVyc2UgbWF0cml4IGluIExpbmVhckdyYWRpZW50IiwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgbG9jYWxNYXRyaXggPSBuZXcgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBMaW5lYXJHcmFkaWVudFBhaW50Q29udGV4dChjYW52YXNNYXRyaXgsIGxvY2FsTWF0cml4LCBjb2xvck1vZGVsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgY2xhc3MgTGluZWFyR3JhZGllbnRQYWludENvbnRleHQgaW1wbGVtZW50cyBqYXZhLmF3dC5QYWludENvbnRleHQgewotCi0gICAgICAgICAgICBwcml2YXRlIGZpbmFsIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIG1DYW52YXNNYXRyaXg7Ci0gICAgICAgICAgICBwcml2YXRlIGZpbmFsIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIG1Mb2NhbE1hdHJpeDsKLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgamF2YS5hd3QuaW1hZ2UuQ29sb3JNb2RlbCBtQ29sb3JNb2RlbDsKLQotICAgICAgICAgICAgcHJpdmF0ZSBMaW5lYXJHcmFkaWVudFBhaW50Q29udGV4dCgKLSAgICAgICAgICAgICAgICAgICAgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gY2FudmFzTWF0cml4LAotICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBsb2NhbE1hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgamF2YS5hd3QuaW1hZ2UuQ29sb3JNb2RlbCBjb2xvck1vZGVsKSB7Ci0gICAgICAgICAgICAgICAgbUNhbnZhc01hdHJpeCA9IGNhbnZhc01hdHJpeDsKLSAgICAgICAgICAgICAgICBtTG9jYWxNYXRyaXggPSBsb2NhbE1hdHJpeDsKLSAgICAgICAgICAgICAgICBtQ29sb3JNb2RlbCA9IGNvbG9yTW9kZWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgamF2YS5hd3QuaW1hZ2UuQ29sb3JNb2RlbCBnZXRDb2xvck1vZGVsKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtQ29sb3JNb2RlbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgamF2YS5hd3QuaW1hZ2UuUmFzdGVyIGdldFJhc3RlcihpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkgewotICAgICAgICAgICAgICAgIGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UgaW1hZ2UgPSBuZXcgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSh3LCBoLAotICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCKTsKLQotICAgICAgICAgICAgICAgIGludFtdIGRhdGEgPSBuZXcgaW50W3cqaF07Ci0KLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICAgICAgICAgIGZsb2F0W10gcHQxID0gbmV3IGZsb2F0WzJdOwotICAgICAgICAgICAgICAgIGZsb2F0W10gcHQyID0gbmV3IGZsb2F0WzJdOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGl5ID0gMCA7IGl5IDwgaCA7IGl5KyspIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaXggPSAwIDsgaXggPCB3IDsgaXgrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRoZSBjYW52YXMgdHJhbnNmb3JtCi0gICAgICAgICAgICAgICAgICAgICAgICBwdDFbMF0gPSB4ICsgaXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdDFbMV0gPSB5ICsgaXk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQ2FudmFzTWF0cml4LnRyYW5zZm9ybShwdDEsIDAsIHB0MiwgMCwgMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSB0aGUgbG9jYWwgbWF0cml4LgotICAgICAgICAgICAgICAgICAgICAgICAgcHQxWzBdID0gcHQyWzBdOwotICAgICAgICAgICAgICAgICAgICAgICAgcHQxWzFdID0gcHQyWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgbUxvY2FsTWF0cml4LnRyYW5zZm9ybShwdDEsIDAsIHB0MiwgMCwgMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaW5kZXgrK10gPSBnZXRDb2xvcihwdDJbMF0sIHB0MlsxXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpbWFnZS5zZXRSR0IoMCAvKnN0YXJ0WCovLCAwIC8qc3RhcnRZKi8sIHcsIGgsIGRhdGEsIDAgLypvZmZzZXQqLywgdyAvKnNjYW5zaXplKi8pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlLmdldFJhc3RlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgYSBjb2xvciBmb3IgYW4gYXJiaXRyYXJ5IHBvaW50LgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBpbnQgZ2V0Q29sb3IoZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICAgICAgZmxvYXQgcG9zOwotICAgICAgICAgICAgaWYgKG1EeCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcG9zID0gKHkgLSBtWTApIC8gbUR5OwotICAgICAgICAgICAgfSBlbHNlIGlmIChtRHkgPT0gMCkgewotICAgICAgICAgICAgICAgIHBvcyA9ICh4IC0gbVgwKSAvIG1EeDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgeCBwb3NpdGlvbiBvbiB0aGUgZ3JhZGllbnQgdmVjdG9yLgotICAgICAgICAgICAgICAgIGZsb2F0IF94ID0gKG1EeCptRHkqKHktbVkwKSArIG1EeSptRHkqbVgwICsgbUR4Km1EeCp4KSAvIG1EU2l6ZTI7Ci0gICAgICAgICAgICAgICAgLy8gZnJvbSBpdCBnZXQgdGhlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSB2ZWN0b3IKLSAgICAgICAgICAgICAgICBwb3MgPSAoX3ggLSBtWDApIC8gbUR4OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZ2V0R3JhZGllbnRDb2xvcihwb3MpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9NYXNrRmlsdGVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL01hc2tGaWx0ZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJmMjdlNC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL01hc2tGaWx0ZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuTWFza0ZpbHRlcgotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIE1hc2tGaWx0ZXIgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgTWFza0ZpbHRlciBjbGFzcy4KLSAqCi0gKiBUaGlzIGFsc28gc2VydmUgYXMgYSBiYXNlIGNsYXNzIGZvciBhbGwgTWFza0ZpbHRlciBkZWxlZ2F0ZSBjbGFzc2VzLgotICoKLSAqIEBzZWUgRGVsZWdhdGVNYW5hZ2VyCi0gKgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFza0ZpbHRlcl9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIG1hbmFnZXIgLS0tLQotICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPE1hc2tGaWx0ZXJfRGVsZWdhdGU+IHNNYW5hZ2VyID0KLSAgICAgICAgICAgIG5ldyBEZWxlZ2F0ZU1hbmFnZXI8TWFza0ZpbHRlcl9EZWxlZ2F0ZT4oTWFza0ZpbHRlcl9EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGhlbHBlciBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwdWJsaWMgc3RhdGljIE1hc2tGaWx0ZXJfRGVsZWdhdGUgZ2V0RGVsZWdhdGUoaW50IG5hdGl2ZVNoYWRlcikgewotICAgICAgICByZXR1cm4gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlU2hhZGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1N1cHBvcnRlZCgpOwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U3VwcG9ydE1lc3NhZ2UoKTsKLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlRGVzdHJ1Y3RvcihpbnQgbmF0aXZlX2ZpbHRlcikgewotICAgICAgICBzTWFuYWdlci5yZW1vdmVKYXZhUmVmZXJlbmNlRm9yKG5hdGl2ZV9maWx0ZXIpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL01hdHJpeF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9NYXRyaXhfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRmMmEyMS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL01hdHJpeF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXguU2NhbGVUb0ZpdDsKLQotaW1wb3J0IGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtOwotaW1wb3J0IGphdmEuYXd0Lmdlb20uTm9uaW52ZXJ0aWJsZVRyYW5zZm9ybUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuTWF0cml4Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgTWF0cml4IGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIE1hdHJpeCBjbGFzcy4KLSAqCi0gKiBAc2VlIERlbGVnYXRlTWFuYWdlcgotICoKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIE1hdHJpeF9EZWxlZ2F0ZSB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgTUFUUklYX1NJWkUgPSA5OwotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBtYW5hZ2VyIC0tLS0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBEZWxlZ2F0ZU1hbmFnZXI8TWF0cml4X0RlbGVnYXRlPiBzTWFuYWdlciA9Ci0gICAgICAgICAgICBuZXcgRGVsZWdhdGVNYW5hZ2VyPE1hdHJpeF9EZWxlZ2F0ZT4oTWF0cml4X0RlbGVnYXRlLmNsYXNzKTsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0gICAgcHJpdmF0ZSBmbG9hdCBtVmFsdWVzW10gPSBuZXcgZmxvYXRbTUFUUklYX1NJWkVdOwotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHVibGljIHN0YXRpYyBNYXRyaXhfRGVsZWdhdGUgZ2V0RGVsZWdhdGUoaW50IG5hdGl2ZV9pbnN0YW5jZSkgewotICAgICAgICByZXR1cm4gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX2luc3RhbmNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIHtAbGluayBBZmZpbmVUcmFuc2Zvcm19IG1hdGNoaW5nIHRoZSBnaXZlbiBNYXRyaXguCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gZ2V0QWZmaW5lVHJhbnNmb3JtKE1hdHJpeCBtKSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG0ubmF0aXZlX2luc3RhbmNlKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmdldEFmZmluZVRyYW5zZm9ybSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBoYXNQZXJzcGVjdGl2ZShNYXRyaXggbSkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShtLm5hdGl2ZV9pbnN0YW5jZSk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUuaGFzUGVyc3BlY3RpdmUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBjb250ZW50IG9mIHRoZSBtYXRyaXggd2l0aCB0aGUgY29udGVudCBvZiBhbm90aGVyIG1hdHJpeC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXQoTWF0cml4X0RlbGVnYXRlIG1hdHJpeCkgewotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1hdHJpeC5tVmFsdWVzLCAwLCBtVmFsdWVzLCAwLCBNQVRSSVhfU0laRSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgY29udGVudCBvZiB0aGUgbWF0cml4IHdpdGggdGhlIGNvbnRlbnQgb2YgYW5vdGhlciBtYXRyaXggcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkKLSAgICAgKiBvZiB2YWx1ZXMuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0KGZsb2F0W10gdmFsdWVzKSB7Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkodmFsdWVzLCAwLCBtVmFsdWVzLCAwLCBNQVRSSVhfU0laRSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVzZXRzIHRoZSBtYXRyaXggdG8gYmUgdGhlIGlkZW50aXR5IG1hdHJpeC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZXNldCgpIHsKLSAgICAgICAgcmVzZXQobVZhbHVlcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cml4IGlzIGlkZW50aXR5LgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzSWRlbnRpdHkoKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwLCBrID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzOyBqKyssIGsrKykgewotICAgICAgICAgICAgICAgIGlmIChtVmFsdWVzW2tdICE9ICgoaT09aikgPyAxIDogMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmxvYXRbXSBtYWtlVmFsdWVzKEFmZmluZVRyYW5zZm9ybSBtYXRyaXgpIHsKLSAgICAgICAgZmxvYXRbXSB2YWx1ZXMgPSBuZXcgZmxvYXRbTUFUUklYX1NJWkVdOwotICAgICAgICB2YWx1ZXNbMF0gPSAoZmxvYXQpIG1hdHJpeC5nZXRTY2FsZVgoKTsKLSAgICAgICAgdmFsdWVzWzFdID0gKGZsb2F0KSBtYXRyaXguZ2V0U2hlYXJYKCk7Ci0gICAgICAgIHZhbHVlc1syXSA9IChmbG9hdCkgbWF0cml4LmdldFRyYW5zbGF0ZVgoKTsKLSAgICAgICAgdmFsdWVzWzNdID0gKGZsb2F0KSBtYXRyaXguZ2V0U2hlYXJZKCk7Ci0gICAgICAgIHZhbHVlc1s0XSA9IChmbG9hdCkgbWF0cml4LmdldFNjYWxlWSgpOwotICAgICAgICB2YWx1ZXNbNV0gPSAoZmxvYXQpIG1hdHJpeC5nZXRUcmFuc2xhdGVZKCk7Ci0gICAgICAgIHZhbHVlc1s2XSA9IDAuZjsKLSAgICAgICAgdmFsdWVzWzddID0gMC5mOwotICAgICAgICB2YWx1ZXNbOF0gPSAxLmY7Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIE1hdHJpeF9EZWxlZ2F0ZSBtYWtlKEFmZmluZVRyYW5zZm9ybSBtYXRyaXgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXhfRGVsZWdhdGUobWFrZVZhbHVlcyhtYXRyaXgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBtYXBSZWN0KFJlY3RGIGRzdCwgUmVjdEYgc3JjKSB7Ci0gICAgICAgIC8vIGFycmF5IHdpdGggNCBjb3JuZXJzCi0gICAgICAgIGZsb2F0W10gY29ybmVycyA9IG5ldyBmbG9hdFtdIHsKLSAgICAgICAgICAgICAgICBzcmMubGVmdCwgc3JjLnRvcCwKLSAgICAgICAgICAgICAgICBzcmMucmlnaHQsIHNyYy50b3AsCi0gICAgICAgICAgICAgICAgc3JjLnJpZ2h0LCBzcmMuYm90dG9tLAotICAgICAgICAgICAgICAgIHNyYy5sZWZ0LCBzcmMuYm90dG9tLAotICAgICAgICB9OwotCi0gICAgICAgIC8vIGFwcGx5IHRoZSB0cmFuc2Zvcm0gdG8gdGhlbS4KLSAgICAgICAgbWFwUG9pbnRzKGNvcm5lcnMpOwotCi0gICAgICAgIC8vIG5vdyBwdXQgdGhlIHJlc3VsdCBpbiB0aGUgcmVjdC4gV2UgdGFrZSB0aGUgbWluL21heCBvZiBYcyBhbmQgbWluL21heCBvZiBZcwotICAgICAgICBkc3QubGVmdCA9IE1hdGgubWluKE1hdGgubWluKGNvcm5lcnNbMF0sIGNvcm5lcnNbMl0pLCBNYXRoLm1pbihjb3JuZXJzWzRdLCBjb3JuZXJzWzZdKSk7Ci0gICAgICAgIGRzdC5yaWdodCA9IE1hdGgubWF4KE1hdGgubWF4KGNvcm5lcnNbMF0sIGNvcm5lcnNbMl0pLCBNYXRoLm1heChjb3JuZXJzWzRdLCBjb3JuZXJzWzZdKSk7Ci0KLSAgICAgICAgZHN0LnRvcCA9IE1hdGgubWluKE1hdGgubWluKGNvcm5lcnNbMV0sIGNvcm5lcnNbM10pLCBNYXRoLm1pbihjb3JuZXJzWzVdLCBjb3JuZXJzWzddKSk7Ci0gICAgICAgIGRzdC5ib3R0b20gPSBNYXRoLm1heChNYXRoLm1heChjb3JuZXJzWzFdLCBjb3JuZXJzWzNdKSwgTWF0aC5tYXgoY29ybmVyc1s1XSwgY29ybmVyc1s3XSkpOwotCi0KLSAgICAgICAgcmV0dXJuIChjb21wdXRlVHlwZU1hc2soKSAmIGtSZWN0U3RheXNSZWN0X01hc2spICE9IDA7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIHtAbGluayBBZmZpbmVUcmFuc2Zvcm19IG1hdGNoaW5nIHRoZSBtYXRyaXguCi0gICAgICovCi0gICAgcHVibGljIEFmZmluZVRyYW5zZm9ybSBnZXRBZmZpbmVUcmFuc2Zvcm0oKSB7Ci0gICAgICAgIHJldHVybiBnZXRBZmZpbmVUcmFuc2Zvcm0obVZhbHVlcyk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzUGVyc3BlY3RpdmUoKSB7Ci0gICAgICAgIHJldHVybiAobVZhbHVlc1s2XSAhPSAwIHx8IG1WYWx1ZXNbN10gIT0gMCB8fCBtVmFsdWVzWzhdICE9IDEpOwotICAgIH0KLQotCi0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX2NyZWF0ZShpbnQgbmF0aXZlX3NyY19vcl96ZXJvKSB7Ci0gICAgICAgIC8vIGNyZWF0ZSB0aGUgZGVsZWdhdGUKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IE1hdHJpeF9EZWxlZ2F0ZSgpOwotCi0gICAgICAgIC8vIGNvcHkgZnJvbSB2YWx1ZXMgaWYgbmVlZGVkLgotICAgICAgICBpZiAobmF0aXZlX3NyY19vcl96ZXJvID4gMCkgewotICAgICAgICAgICAgTWF0cml4X0RlbGVnYXRlIG9sZERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX3NyY19vcl96ZXJvKTsKLSAgICAgICAgICAgIGlmIChvbGREZWxlZ2F0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG9sZERlbGVnYXRlLm1WYWx1ZXMsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdEZWxlZ2F0ZS5tVmFsdWVzLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgTUFUUklYX1NJWkUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfaXNJZGVudGl0eShpbnQgbmF0aXZlX29iamVjdCkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZC5pc0lkZW50aXR5KCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3JlY3RTdGF5c1JlY3QoaW50IG5hdGl2ZV9vYmplY3QpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKGQuY29tcHV0ZVR5cGVNYXNrKCkgJiBrUmVjdFN0YXlzUmVjdF9NYXNrKSAhPSAwOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9yZXNldChpbnQgbmF0aXZlX29iamVjdCkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICByZXNldChkLm1WYWx1ZXMpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXQoaW50IG5hdGl2ZV9vYmplY3QsIGludCBvdGhlcikgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgc3JjID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUob3RoZXIpOwotICAgICAgICBpZiAoc3JjID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoc3JjLm1WYWx1ZXMsIDAsIGQubVZhbHVlcywgMCwgTUFUUklYX1NJWkUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXRUcmFuc2xhdGUoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IGR4LCBmbG9hdCBkeSkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzZXRUcmFuc2xhdGUoZC5tVmFsdWVzLCBkeCwgZHkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXRTY2FsZShpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQgc3gsIGZsb2F0IHN5LAotICAgICAgICAgICAgZmxvYXQgcHgsIGZsb2F0IHB5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGQubVZhbHVlcyA9IGdldFNjYWxlKHN4LCBzeSwgcHgsIHB5KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0U2NhbGUoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IHN4LCBmbG9hdCBzeSkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkLm1WYWx1ZXNbMF0gPSBzeDsKLSAgICAgICAgZC5tVmFsdWVzWzFdID0gMDsKLSAgICAgICAgZC5tVmFsdWVzWzJdID0gMDsKLSAgICAgICAgZC5tVmFsdWVzWzNdID0gMDsKLSAgICAgICAgZC5tVmFsdWVzWzRdID0gc3k7Ci0gICAgICAgIGQubVZhbHVlc1s1XSA9IDA7Ci0gICAgICAgIGQubVZhbHVlc1s2XSA9IDA7Ci0gICAgICAgIGQubVZhbHVlc1s3XSA9IDA7Ci0gICAgICAgIGQubVZhbHVlc1s4XSA9IDE7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3NldFJvdGF0ZShpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQgZGVncmVlcywgZmxvYXQgcHgsIGZsb2F0IHB5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGQubVZhbHVlcyA9IGdldFJvdGF0ZShkZWdyZWVzLCBweCwgcHkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXRSb3RhdGUoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IGRlZ3JlZXMpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc2V0Um90YXRlKGQubVZhbHVlcywgZGVncmVlcyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3NldFNpbkNvcyhpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQgc2luVmFsdWUsIGZsb2F0IGNvc1ZhbHVlLAotICAgICAgICAgICAgZmxvYXQgcHgsIGZsb2F0IHB5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRPRE86IGRvIGl0IGluIG9uZSBwYXNzCi0KLSAgICAgICAgLy8gdHJhbnNsYXRlIHNvIHRoYXQgdGhlIHBpdm90IGlzIGluIDAsMAotICAgICAgICBzZXRUcmFuc2xhdGUoZC5tVmFsdWVzLCAtcHgsIC1weSk7Ci0KLSAgICAgICAgLy8gc2NhbGUKLSAgICAgICAgZC5wb3N0VHJhbnNmb3JtKGdldFJvdGF0ZShzaW5WYWx1ZSwgY29zVmFsdWUpKTsKLSAgICAgICAgLy8gdHJhbnNsYXRlIGJhY2sgdGhlIHBpdm90Ci0gICAgICAgIGQucG9zdFRyYW5zZm9ybShnZXRUcmFuc2xhdGUocHgsIHB5KSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3NldFNpbkNvcyhpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQgc2luVmFsdWUsIGZsb2F0IGNvc1ZhbHVlKSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHNldFJvdGF0ZShkLm1WYWx1ZXMsIHNpblZhbHVlLCBjb3NWYWx1ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3NldFNrZXcoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IGt4LCBmbG9hdCBreSwKLSAgICAgICAgICAgIGZsb2F0IHB4LCBmbG9hdCBweSkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkLm1WYWx1ZXMgPSBnZXRTa2V3KGt4LCBreSwgcHgsIHB5KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0U2tldyhpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQga3gsIGZsb2F0IGt5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGQubVZhbHVlc1swXSA9IDE7Ci0gICAgICAgIGQubVZhbHVlc1sxXSA9IGt4OwotICAgICAgICBkLm1WYWx1ZXNbMl0gPSAtMDsKLSAgICAgICAgZC5tVmFsdWVzWzNdID0ga3k7Ci0gICAgICAgIGQubVZhbHVlc1s0XSA9IDE7Ci0gICAgICAgIGQubVZhbHVlc1s1XSA9IDA7Ci0gICAgICAgIGQubVZhbHVlc1s2XSA9IDA7Ci0gICAgICAgIGQubVZhbHVlc1s3XSA9IDA7Ci0gICAgICAgIGQubVZhbHVlc1s4XSA9IDE7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3NldENvbmNhdChpbnQgbmF0aXZlX29iamVjdCwgaW50IGEsIGludCBiKSB7Ci0gICAgICAgIGlmIChhID09IG5hdGl2ZV9vYmplY3QpIHsKLSAgICAgICAgICAgIHJldHVybiBuYXRpdmVfcHJlQ29uY2F0KG5hdGl2ZV9vYmplY3QsIGIpOwotICAgICAgICB9IGVsc2UgaWYgKGIgPT0gbmF0aXZlX29iamVjdCkgewotICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZV9wb3N0Q29uY2F0KG5hdGl2ZV9vYmplY3QsIGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGFfbXR4ID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoYSk7Ci0gICAgICAgIGlmIChhX210eCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgYl9tdHggPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShiKTsKLSAgICAgICAgaWYgKGJfbXR4ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG11bHRpcGx5KGQubVZhbHVlcywgYV9tdHgubVZhbHVlcywgYl9tdHgubVZhbHVlcyk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3ByZVRyYW5zbGF0ZShpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGQucHJlVHJhbnNmb3JtKGdldFRyYW5zbGF0ZShkeCwgZHkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3ByZVNjYWxlKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCBzeCwgZmxvYXQgc3ksCi0gICAgICAgICAgICBmbG9hdCBweCwgZmxvYXQgcHkpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZC5wcmVUcmFuc2Zvcm0oZ2V0U2NhbGUoc3gsIHN5LCBweCwgcHkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3ByZVNjYWxlKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCBzeCwgZmxvYXQgc3kpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZC5wcmVUcmFuc2Zvcm0oZ2V0U2NhbGUoc3gsIHN5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9wcmVSb3RhdGUoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IGRlZ3JlZXMsCi0gICAgICAgICAgICBmbG9hdCBweCwgZmxvYXQgcHkpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZC5wcmVUcmFuc2Zvcm0oZ2V0Um90YXRlKGRlZ3JlZXMsIHB4LCBweSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcHJlUm90YXRlKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCBkZWdyZWVzKSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGRvdWJsZSByYWQgPSBNYXRoLnRvUmFkaWFucyhkZWdyZWVzKTsKLSAgICAgICAgZmxvYXQgc2luID0gKGZsb2F0KU1hdGguc2luKHJhZCk7Ci0gICAgICAgIGZsb2F0IGNvcyA9IChmbG9hdClNYXRoLmNvcyhyYWQpOwotCi0gICAgICAgIGQucHJlVHJhbnNmb3JtKGdldFJvdGF0ZShzaW4sIGNvcykpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcHJlU2tldyhpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQga3gsIGZsb2F0IGt5LAotICAgICAgICAgICAgZmxvYXQgcHgsIGZsb2F0IHB5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGQucHJlVHJhbnNmb3JtKGdldFNrZXcoa3gsIGt5LCBweCwgcHkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3ByZVNrZXcoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IGt4LCBmbG9hdCBreSkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBkLnByZVRyYW5zZm9ybShnZXRTa2V3KGt4LCBreSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcHJlQ29uY2F0KGludCBuYXRpdmVfb2JqZWN0LCBpbnQgb3RoZXJfbWF0cml4KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBvdGhlciA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG90aGVyX21hdHJpeCk7Ci0gICAgICAgIGlmIChvdGhlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBkLnByZVRyYW5zZm9ybShvdGhlci5tVmFsdWVzKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3Bvc3RUcmFuc2xhdGUoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IGR4LCBmbG9hdCBkeSkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBkLnBvc3RUcmFuc2Zvcm0oZ2V0VHJhbnNsYXRlKGR4LCBkeSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcG9zdFNjYWxlKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCBzeCwgZmxvYXQgc3ksCi0gICAgICAgICAgICBmbG9hdCBweCwgZmxvYXQgcHkpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZC5wb3N0VHJhbnNmb3JtKGdldFNjYWxlKHN4LCBzeSwgcHgsIHB5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9wb3N0U2NhbGUoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IHN4LCBmbG9hdCBzeSkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBkLnBvc3RUcmFuc2Zvcm0oZ2V0U2NhbGUoc3gsIHN5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9wb3N0Um90YXRlKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCBkZWdyZWVzLAotICAgICAgICAgICAgZmxvYXQgcHgsIGZsb2F0IHB5KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGQucG9zdFRyYW5zZm9ybShnZXRSb3RhdGUoZGVncmVlcywgcHgsIHB5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9wb3N0Um90YXRlKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdCBkZWdyZWVzKSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGQucG9zdFRyYW5zZm9ybShnZXRSb3RhdGUoZGVncmVlcykpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcG9zdFNrZXcoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IGt4LCBmbG9hdCBreSwKLSAgICAgICAgICAgIGZsb2F0IHB4LCBmbG9hdCBweSkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBkLnBvc3RUcmFuc2Zvcm0oZ2V0U2tldyhreCwga3ksIHB4LCBweSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfcG9zdFNrZXcoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0IGt4LCBmbG9hdCBreSkgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBkLnBvc3RUcmFuc2Zvcm0oZ2V0U2tldyhreCwga3kpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3Bvc3RDb25jYXQoaW50IG5hdGl2ZV9vYmplY3QsIGludCBvdGhlcl9tYXRyaXgpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIG90aGVyID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUob3RoZXJfbWF0cml4KTsKLSAgICAgICAgaWYgKG90aGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGQucG9zdFRyYW5zZm9ybShvdGhlci5tVmFsdWVzKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3NldFJlY3RUb1JlY3QoaW50IG5hdGl2ZV9vYmplY3QsIFJlY3RGIHNyYywKLSAgICAgICAgICAgIFJlY3RGIGRzdCwgaW50IHN0ZikgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3JjLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmVzZXQoZC5tVmFsdWVzKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBkLm1WYWx1ZXNbMF0gPSBkLm1WYWx1ZXNbMV0gPSBkLm1WYWx1ZXNbMl0gPSBkLm1WYWx1ZXNbM10gPSBkLm1WYWx1ZXNbNF0gPSBkLm1WYWx1ZXNbNV0KLSAgICAgICAgICAgICAgID0gZC5tVmFsdWVzWzZdID0gZC5tVmFsdWVzWzddID0gMDsKLSAgICAgICAgICAgIGQubVZhbHVlc1s4XSA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmbG9hdCAgICB0eCwgc3ggPSBkc3Qud2lkdGgoKSAvIHNyYy53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgICAgdHksIHN5ID0gZHN0LmhlaWdodCgpIC8gc3JjLmhlaWdodCgpOwotICAgICAgICAgICAgYm9vbGVhbiAgeExhcmdlciA9IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoc3RmICE9IFNjYWxlVG9GaXQuRklMTC5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3ggPiBzeSkgewotICAgICAgICAgICAgICAgICAgICB4TGFyZ2VyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgc3ggPSBzeTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzeSA9IHN4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHggPSBkc3QubGVmdCAtIHNyYy5sZWZ0ICogc3g7Ci0gICAgICAgICAgICB0eSA9IGRzdC50b3AgLSBzcmMudG9wICogc3k7Ci0gICAgICAgICAgICBpZiAoc3RmID09IFNjYWxlVG9GaXQuQ0VOVEVSLm5hdGl2ZUludCB8fCBzdGYgPT0gU2NhbGVUb0ZpdC5FTkQubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgZGlmZjsKLQotICAgICAgICAgICAgICAgIGlmICh4TGFyZ2VyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRpZmYgPSBkc3Qud2lkdGgoKSAtIHNyYy53aWR0aCgpICogc3k7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGlmZiA9IGRzdC5oZWlnaHQoKSAtIHNyYy5oZWlnaHQoKSAqIHN5OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChzdGYgPT0gU2NhbGVUb0ZpdC5DRU5URVIubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRpZmYgPSBkaWZmIC8gMjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoeExhcmdlcikgewotICAgICAgICAgICAgICAgICAgICB0eCArPSBkaWZmOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHR5ICs9IGRpZmY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkLm1WYWx1ZXNbMF0gPSBzeDsKLSAgICAgICAgICAgIGQubVZhbHVlc1s0XSA9IHN5OwotICAgICAgICAgICAgZC5tVmFsdWVzWzJdID0gdHg7Ci0gICAgICAgICAgICBkLm1WYWx1ZXNbNV0gPSB0eTsKLSAgICAgICAgICAgIGQubVZhbHVlc1sxXSAgPSBkLm1WYWx1ZXNbM10gPSBkLm1WYWx1ZXNbNl0gPSBkLm1WYWx1ZXNbN10gPSAwOwotCi0gICAgICAgIH0KLSAgICAgICAgLy8gc2hhcmVkIGNsZWFudXAKLSAgICAgICAgZC5tVmFsdWVzWzhdID0gMTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX3NldFBvbHlUb1BvbHkoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0W10gc3JjLCBpbnQgc3JjSW5kZXgsCi0gICAgICAgICAgICBmbG9hdFtdIGRzdCwgaW50IGRzdEluZGV4LCBpbnQgcG9pbnRDb3VudCkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIk1hdHJpeC5zZXRQb2x5VG9Qb2x5IGlzIG5vdCBzdXBwb3J0ZWQuIiwKLSAgICAgICAgICAgICAgICBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9pbnZlcnQoaW50IG5hdGl2ZV9vYmplY3QsIGludCBpbnZlcnNlKSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBpbnZfbXR4ID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoaW52ZXJzZSk7Ci0gICAgICAgIGlmIChpbnZfbXR4ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lVHJhbnNmb3JtID0gZC5nZXRBZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBpbnZlcnNlVHJhbnNmb3JtID0gYWZmaW5lVHJhbnNmb3JtLmNyZWF0ZUludmVyc2UoKTsKLSAgICAgICAgICAgIGludl9tdHgubVZhbHVlc1swXSA9IChmbG9hdClpbnZlcnNlVHJhbnNmb3JtLmdldFNjYWxlWCgpOwotICAgICAgICAgICAgaW52X210eC5tVmFsdWVzWzFdID0gKGZsb2F0KWludmVyc2VUcmFuc2Zvcm0uZ2V0U2hlYXJYKCk7Ci0gICAgICAgICAgICBpbnZfbXR4Lm1WYWx1ZXNbMl0gPSAoZmxvYXQpaW52ZXJzZVRyYW5zZm9ybS5nZXRUcmFuc2xhdGVYKCk7Ci0gICAgICAgICAgICBpbnZfbXR4Lm1WYWx1ZXNbM10gPSAoZmxvYXQpaW52ZXJzZVRyYW5zZm9ybS5nZXRTY2FsZVgoKTsKLSAgICAgICAgICAgIGludl9tdHgubVZhbHVlc1s0XSA9IChmbG9hdClpbnZlcnNlVHJhbnNmb3JtLmdldFNoZWFyWSgpOwotICAgICAgICAgICAgaW52X210eC5tVmFsdWVzWzVdID0gKGZsb2F0KWludmVyc2VUcmFuc2Zvcm0uZ2V0VHJhbnNsYXRlWSgpOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBjYXRjaCAoTm9uaW52ZXJ0aWJsZVRyYW5zZm9ybUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfbWFwUG9pbnRzKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdFtdIGRzdCwgaW50IGRzdEluZGV4LAotICAgICAgICAgICAgZmxvYXRbXSBzcmMsIGludCBzcmNJbmRleCwgaW50IHB0Q291bnQsIGJvb2xlYW4gaXNQdHMpIHsKLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGQgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzUHRzKSB7Ci0gICAgICAgICAgICBkLm1hcFBvaW50cyhkc3QsIGRzdEluZGV4LCBzcmMsIHNyY0luZGV4LCBwdENvdW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGQubWFwVmVjdG9ycyhkc3QsIGRzdEluZGV4LCBzcmMsIHNyY0luZGV4LCBwdENvdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9tYXBSZWN0KGludCBuYXRpdmVfb2JqZWN0LCBSZWN0RiBkc3QsIFJlY3RGIHNyYykgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZC5tYXBSZWN0KGRzdCwgc3JjKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXQgbmF0aXZlX21hcFJhZGl1cyhpbnQgbmF0aXZlX29iamVjdCwgZmxvYXQgcmFkaXVzKSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwLmY7Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdFtdIHNyYyA9IG5ldyBmbG9hdFtdIHsgcmFkaXVzLCAwLmYsIDAuZiwgcmFkaXVzIH07Ci0gICAgICAgIGQubWFwVmVjdG9ycyhzcmMsIDAsIHNyYywgMCwgMik7Ci0KLSAgICAgICAgZmxvYXQgbDEgPSBnZXRQb2ludExlbmd0aChzcmMsIDApOwotICAgICAgICBmbG9hdCBsMiA9IGdldFBvaW50TGVuZ3RoKHNyYywgMik7Ci0KLSAgICAgICAgcmV0dXJuIChmbG9hdCkgTWF0aC5zcXJ0KGwxICogbDIpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9nZXRWYWx1ZXMoaW50IG5hdGl2ZV9vYmplY3QsIGZsb2F0W10gdmFsdWVzKSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBkID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoZC5tVmFsdWVzLCAwLCBkLm1WYWx1ZXMsIDAsIE1BVFJJWF9TSVpFKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0VmFsdWVzKGludCBuYXRpdmVfb2JqZWN0LCBmbG9hdFtdIHZhbHVlcykgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgZCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHZhbHVlcywgMCwgZC5tVmFsdWVzLCAwLCBNQVRSSVhfU0laRSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlX2VxdWFscyhpbnQgbmF0aXZlX2EsIGludCBuYXRpdmVfYikgewotICAgICAgICBNYXRyaXhfRGVsZWdhdGUgYSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9hKTsKLSAgICAgICAgaWYgKGEgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIGIgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfYik7Ci0gICAgICAgIGlmIChiID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IE1BVFJJWF9TSVpFIDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoYS5tVmFsdWVzW2ldICE9IGIubVZhbHVlc1tpXSkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIGZpbmFsaXplcihpbnQgbmF0aXZlX2luc3RhbmNlKSB7Ci0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IobmF0aXZlX2luc3RhbmNlKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgaGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIEFmZmluZVRyYW5zZm9ybSBnZXRBZmZpbmVUcmFuc2Zvcm0oZmxvYXRbXSBtYXRyaXgpIHsKLSAgICAgICAgLy8gdGhlIEFmZmluZVRyYW5zZm9ybSBjb25zdHJ1Y3RvciB0YWtlcyB0aGUgdmFsdWUgaW4gYSBkaWZmZXJlbnQgb3JkZXIKLSAgICAgICAgLy8gZm9yIGEgbWF0cml4IFsgMCAxIDIgXQotICAgICAgICAvLyAgICAgICAgICAgICAgWyAzIDQgNSBdCi0gICAgICAgIC8vIHRoZSBvcmRlciBpcyAwLCAzLCAxLCA0LCAyLCA1Li4uCi0gICAgICAgIHJldHVybiBuZXcgQWZmaW5lVHJhbnNmb3JtKAotICAgICAgICAgICAgICAgIG1hdHJpeFswXSwgbWF0cml4WzNdLCBtYXRyaXhbMV0sCi0gICAgICAgICAgICAgICAgbWF0cml4WzRdLCBtYXRyaXhbMl0sIG1hdHJpeFs1XSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVzZXQgYSBtYXRyaXggdG8gdGhlIGlkZW50aXR5Ci0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCByZXNldChmbG9hdFtdIG10eCkgewotICAgICAgICBmb3IgKGludCBpID0gMCwgayA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrLCBrKyspIHsKLSAgICAgICAgICAgICAgICBtdHhba10gPSAoKGk9PWopID8gMSA6IDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IGtJZGVudGl0eV9NYXNrICAgICAgPSAwOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBrVHJhbnNsYXRlX01hc2sgICAgID0gMHgwMTsgIC8vITwgc2V0IGlmIHRoZSBtYXRyaXggaGFzIHRyYW5zbGF0aW9uCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IGtTY2FsZV9NYXNrICAgICAgICAgPSAweDAyOyAgLy8hPCBzZXQgaWYgdGhlIG1hdHJpeCBoYXMgWCBvciBZIHNjYWxlCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IGtBZmZpbmVfTWFzayAgICAgICAgPSAweDA0OyAgLy8hPCBzZXQgaWYgdGhlIG1hdHJpeCBza2V3cyBvciByb3RhdGVzCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IGtQZXJzcGVjdGl2ZV9NYXNrICAgPSAweDA4OyAgLy8hPCBzZXQgaWYgdGhlIG1hdHJpeCBpcyBpbiBwZXJzcGVjdGl2ZQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBrUmVjdFN0YXlzUmVjdF9NYXNrID0gMHgxMDsKLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQga1Vua25vd25fTWFzayAgICAgICA9IDB4ODA7Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQga0FsbE1hc2tzICAgICAgICAgICA9IGtUcmFuc2xhdGVfTWFzayB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2NhbGVfTWFzayB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQWZmaW5lX01hc2sgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1BlcnNwZWN0aXZlX01hc2sgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1JlY3RTdGF5c1JlY3RfTWFzazsKLQotICAgIC8vIHRoZXNlIGd1eXMgYWxpZ24gd2l0aCB0aGUgbWFza3MsIHNvIHdlIGNhbiBjb21wdXRlIGEgbWFzayBmcm9tIGEgdmFyaWFibGUgMC8xCi0gICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IGtUcmFuc2xhdGVfU2hpZnQgPSAwOwotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBrU2NhbGVfU2hpZnQgPSAxOwotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBrQWZmaW5lX1NoaWZ0ID0gMjsKLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQga1BlcnNwZWN0aXZlX1NoaWZ0ID0gMzsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQga1JlY3RTdGF5c1JlY3RfU2hpZnQgPSA0OwotCi0gICAgcHJpdmF0ZSBpbnQgY29tcHV0ZVR5cGVNYXNrKCkgewotICAgICAgICBpbnQgbWFzayA9IDA7Ci0KLSAgICAgICAgaWYgKG1WYWx1ZXNbNl0gIT0gMC4gfHwgbVZhbHVlc1s3XSAhPSAwLiB8fCBtVmFsdWVzWzhdICE9IDEuKSB7Ci0gICAgICAgICAgICBtYXNrIHw9IGtQZXJzcGVjdGl2ZV9NYXNrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1WYWx1ZXNbMl0gIT0gMC4gfHwgbVZhbHVlc1s1XSAhPSAwLikgewotICAgICAgICAgICAgbWFzayB8PSBrVHJhbnNsYXRlX01hc2s7Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBtMDAgPSBtVmFsdWVzWzBdOwotICAgICAgICBmbG9hdCBtMDEgPSBtVmFsdWVzWzFdOwotICAgICAgICBmbG9hdCBtMTAgPSBtVmFsdWVzWzNdOwotICAgICAgICBmbG9hdCBtMTEgPSBtVmFsdWVzWzRdOwotCi0gICAgICAgIGlmIChtMDEgIT0gMC4gfHwgbTEwICE9IDAuKSB7Ci0gICAgICAgICAgICBtYXNrIHw9IGtBZmZpbmVfTWFzazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtMDAgIT0gMS4gfHwgbTExICE9IDEuKSB7Ci0gICAgICAgICAgICBtYXNrIHw9IGtTY2FsZV9NYXNrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChtYXNrICYga1BlcnNwZWN0aXZlX01hc2spID09IDApIHsKLSAgICAgICAgICAgIC8vIG1hcCBub24temVybyB0byAxCi0gICAgICAgICAgICBpbnQgaW0wMCA9IG0wMCAhPSAwID8gMSA6IDA7Ci0gICAgICAgICAgICBpbnQgaW0wMSA9IG0wMSAhPSAwID8gMSA6IDA7Ci0gICAgICAgICAgICBpbnQgaW0xMCA9IG0xMCAhPSAwID8gMSA6IDA7Ci0gICAgICAgICAgICBpbnQgaW0xMSA9IG0xMSAhPSAwID8gMSA6IDA7Ci0KLSAgICAgICAgICAgIC8vIHJlY29yZCBpZiB0aGUgKHApcmltYXJ5IGFuZCAocyllY29uZGFyeSBkaWFnb25hbHMgYXJlIGFsbCAwIG9yCi0gICAgICAgICAgICAvLyBhbGwgbm9uLXplcm8gKGFuc3dlciBpcyAwIG9yIDEpCi0gICAgICAgICAgICBpbnQgZHAwID0gKGltMDAgfCBpbTExKSBeIDE7ICAvLyB0cnVlIGlmIGJvdGggYXJlIDAKLSAgICAgICAgICAgIGludCBkcDEgPSBpbTAwICYgaW0xMTsgICAgICAgIC8vIHRydWUgaWYgYm90aCBhcmUgMQotICAgICAgICAgICAgaW50IGRzMCA9IChpbTAxIHwgaW0xMCkgXiAxOyAgLy8gdHJ1ZSBpZiBib3RoIGFyZSAwCi0gICAgICAgICAgICBpbnQgZHMxID0gaW0wMSAmIGltMTA7ICAgICAgICAvLyB0cnVlIGlmIGJvdGggYXJlIDEKLQotICAgICAgICAgICAgLy8gcmV0dXJuIDEgaWYgcHJpbWFyeSBpcyAxIGFuZCBzZWNvbmRhcnkgaXMgMCBvcgotICAgICAgICAgICAgLy8gcHJpbWFyeSBpcyAwIGFuZCBzZWNvbmRhcnkgaXMgMQotICAgICAgICAgICAgbWFzayB8PSAoKGRwMCAmIGRzMSkgfCAoZHAxICYgZHMwKSkgPDwga1JlY3RTdGF5c1JlY3RfU2hpZnQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbWFzazsKLSAgICB9Ci0KLSAgICBwcml2YXRlIE1hdHJpeF9EZWxlZ2F0ZSgpIHsKLSAgICAgICAgcmVzZXQoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIE1hdHJpeF9EZWxlZ2F0ZShmbG9hdFtdIHZhbHVlcykgewotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHZhbHVlcywgMCwgbVZhbHVlcywgMCwgTUFUUklYX1NJWkUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZHMgdGhlIGdpdmVuIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBjdXJyZW50IE1hdHJpeAotICAgICAqIDxwLz5UaGlzIGluIGVmZmVjdCBkb2VzIHRoaXMgPSB0aGlzKm1hdHJpeAotICAgICAqIEBwYXJhbSBtYXRyaXgKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcG9zdFRyYW5zZm9ybShmbG9hdFtdIG1hdHJpeCkgewotICAgICAgICBmbG9hdFtdIHRtcCA9IG5ldyBmbG9hdFs5XTsKLSAgICAgICAgbXVsdGlwbHkodG1wLCBtVmFsdWVzLCBtYXRyaXgpOwotICAgICAgICBtVmFsdWVzID0gdG1wOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZHMgdGhlIGdpdmVuIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBjdXJyZW50IE1hdHJpeAotICAgICAqIDxwLz5UaGlzIGluIGVmZmVjdCBkb2VzIHRoaXMgPSBtYXRyaXgqdGhpcwotICAgICAqIEBwYXJhbSBtYXRyaXgKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcHJlVHJhbnNmb3JtKGZsb2F0W10gbWF0cml4KSB7Ci0gICAgICAgIGZsb2F0W10gdG1wID0gbmV3IGZsb2F0WzldOwotICAgICAgICBtdWx0aXBseSh0bXAsIG1hdHJpeCwgbVZhbHVlcyk7Ci0gICAgICAgIG1WYWx1ZXMgPSB0bXA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQXBwbHkgdGhpcyBtYXRyaXggdG8gdGhlIGFycmF5IG9mIDJEIHBvaW50cyBzcGVjaWZpZWQgYnkgc3JjLCBhbmQgd3JpdGUKLSAgICAgICogdGhlIHRyYW5zZm9ybWVkIHBvaW50cyBpbnRvIHRoZSBhcnJheSBvZiBwb2ludHMgc3BlY2lmaWVkIGJ5IGRzdC4gVGhlCi0gICAgICAqIHR3byBhcnJheXMgcmVwcmVzZW50IHRoZWlyICJwb2ludHMiIGFzIHBhaXJzIG9mIGZsb2F0cyBbeCwgeV0uCi0gICAgICAqCi0gICAgICAqIEBwYXJhbSBkc3QgICBUaGUgYXJyYXkgb2YgZHN0IHBvaW50cyAoeCx5IHBhaXJzKQotICAgICAgKiBAcGFyYW0gZHN0SW5kZXggVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBbeCx5XSBwYWlyIG9mIGRzdCBmbG9hdHMKLSAgICAgICogQHBhcmFtIHNyYyAgIFRoZSBhcnJheSBvZiBzcmMgcG9pbnRzICh4LHkgcGFpcnMpCi0gICAgICAqIEBwYXJhbSBzcmNJbmRleCBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IFt4LHldIHBhaXIgb2Ygc3JjIGZsb2F0cwotICAgICAgKiBAcGFyYW0gcG9pbnRDb3VudCBUaGUgbnVtYmVyIG9mIHBvaW50cyAoeCx5IHBhaXJzKSB0byB0cmFuc2Zvcm0KLSAgICAgICovCi0KLSAgICAgcHJpdmF0ZSB2b2lkIG1hcFBvaW50cyhmbG9hdFtdIGRzdCwgaW50IGRzdEluZGV4LCBmbG9hdFtdIHNyYywgaW50IHNyY0luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvaW50Q291bnQpIHsKLSAgICAgICAgIGZpbmFsIGludCBjb3VudCA9IHBvaW50Q291bnQgKiAyOwotCi0gICAgICAgICBmbG9hdFtdIHRtcERlc3QgPSBkc3Q7Ci0gICAgICAgICBib29sZWFuIGluUGxhY2UgPSBkc3QgPT0gc3JjOwotICAgICAgICAgaWYgKGluUGxhY2UpIHsKLSAgICAgICAgICAgICB0bXBEZXN0ID0gbmV3IGZsb2F0W2RzdEluZGV4ICsgY291bnRdOwotICAgICAgICAgfQotCi0gICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBjb3VudCA7IGkgKz0gMikgewotICAgICAgICAgICAgIC8vIGp1c3QgaW4gY2FzZSB3ZSBhcmUgZG9pbmcgaW4gcGxhY2UsIHdlIGJldHRlciBwdXQgdGhpcyBpbiB0ZW1wIHZhcnMKLSAgICAgICAgICAgICBmbG9hdCB4ID0gbVZhbHVlc1swXSAqIHNyY1tpICsgc3JjSW5kZXhdICsKLSAgICAgICAgICAgICAgICAgICAgICAgbVZhbHVlc1sxXSAqIHNyY1tpICsgc3JjSW5kZXggKyAxXSArCi0gICAgICAgICAgICAgICAgICAgICAgIG1WYWx1ZXNbMl07Ci0gICAgICAgICAgICAgZmxvYXQgeSA9IG1WYWx1ZXNbM10gKiBzcmNbaSArIHNyY0luZGV4XSArCi0gICAgICAgICAgICAgICAgICAgICAgIG1WYWx1ZXNbNF0gKiBzcmNbaSArIHNyY0luZGV4ICsgMV0gKwotICAgICAgICAgICAgICAgICAgICAgICBtVmFsdWVzWzVdOwotCi0gICAgICAgICAgICAgdG1wRGVzdFtpICsgZHN0SW5kZXhdICAgICA9IHg7Ci0gICAgICAgICAgICAgdG1wRGVzdFtpICsgZHN0SW5kZXggKyAxXSA9IHk7Ci0gICAgICAgICB9Ci0KLSAgICAgICAgIGlmIChpblBsYWNlKSB7Ci0gICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSh0bXBEZXN0LCBkc3RJbmRleCwgZHN0LCBkc3RJbmRleCwgY291bnQpOwotICAgICAgICAgfQotICAgICB9Ci0KLSAgICAgLyoqCi0gICAgICAqIEFwcGx5IHRoaXMgbWF0cml4IHRvIHRoZSBhcnJheSBvZiAyRCBwb2ludHMsIGFuZCB3cml0ZSB0aGUgdHJhbnNmb3JtZWQKLSAgICAgICogcG9pbnRzIGJhY2sgaW50byB0aGUgYXJyYXkKLSAgICAgICoKLSAgICAgICogQHBhcmFtIHB0cyBUaGUgYXJyYXkgW3gwLCB5MCwgeDEsIHkxLCAuLi5dIG9mIHBvaW50cyB0byB0cmFuc2Zvcm0uCi0gICAgICAqLwotCi0gICAgIHByaXZhdGUgdm9pZCBtYXBQb2ludHMoZmxvYXRbXSBwdHMpIHsKLSAgICAgICAgIG1hcFBvaW50cyhwdHMsIDAsIHB0cywgMCwgcHRzLmxlbmd0aCA+PiAxKTsKLSAgICAgfQotCi0gICAgIHByaXZhdGUgdm9pZCBtYXBWZWN0b3JzKGZsb2F0W10gZHN0LCBpbnQgZHN0SW5kZXgsIGZsb2F0W10gc3JjLCBpbnQgc3JjSW5kZXgsIGludCBwdENvdW50KSB7Ci0gICAgICAgICBpZiAoaGFzUGVyc3BlY3RpdmUoKSkgewotICAgICAgICAgICAgIC8vIHRyYW5zZm9ybSB0aGUgKDAsMCkgcG9pbnQKLSAgICAgICAgICAgICBmbG9hdFtdIG9yaWdpbiA9IG5ldyBmbG9hdFtdIHsgMC5mLCAwLmZ9OwotICAgICAgICAgICAgIG1hcFBvaW50cyhvcmlnaW4pOwotCi0gICAgICAgICAgICAgLy8gdHJhbnNsYXRlIHRoZSB2ZWN0b3IgZGF0YSBhcyBwb2ludHMKLSAgICAgICAgICAgICBtYXBQb2ludHMoZHN0LCBkc3RJbmRleCwgc3JjLCBzcmNJbmRleCwgcHRDb3VudCk7Ci0KLSAgICAgICAgICAgICAvLyB0aGVuIHN1YnN0cmFjdCB0aGUgdHJhbnNmb3JtZWQgb3JpZ2luLgotICAgICAgICAgICAgIGZpbmFsIGludCBjb3VudCA9IHB0Q291bnQgKiAyOwotICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGNvdW50IDsgaSArPSAyKSB7Ci0gICAgICAgICAgICAgICAgIGRzdFtkc3RJbmRleCArIGldID0gZHN0W2RzdEluZGV4ICsgaV0gLSBvcmlnaW5bMF07Ci0gICAgICAgICAgICAgICAgIGRzdFtkc3RJbmRleCArIGkgKyAxXSA9IGRzdFtkc3RJbmRleCArIGkgKyAxXSAtIG9yaWdpblsxXTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgIC8vIG1ha2UgYSBjb3B5IG9mIHRoZSBtYXRyaXgKLSAgICAgICAgICAgICBNYXRyaXhfRGVsZWdhdGUgY29weSA9IG5ldyBNYXRyaXhfRGVsZWdhdGUobVZhbHVlcyk7Ci0KLSAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHRyYW5zbGF0aW9uCi0gICAgICAgICAgICAgc2V0VHJhbnNsYXRlKGNvcHkubVZhbHVlcywgMCwgMCk7Ci0KLSAgICAgICAgICAgICAvLyBtYXAgdGhlIGNvbnRlbnQgYXMgcG9pbnRzLgotICAgICAgICAgICAgIGNvcHkubWFwUG9pbnRzKGRzdCwgZHN0SW5kZXgsIHNyYywgc3JjSW5kZXgsIHB0Q291bnQpOwotICAgICAgICAgfQotICAgICB9Ci0KLSAgICAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgZ2V0UG9pbnRMZW5ndGgoZmxvYXRbXSBzcmMsIGludCBpbmRleCkgewotICAgICAgICAgcmV0dXJuIChmbG9hdCkgTWF0aC5zcXJ0KHNyY1tpbmRleF0gKiBzcmNbaW5kZXhdICsgc3JjW2luZGV4ICsgMV0gKiBzcmNbaW5kZXggKyAxXSk7Ci0gICAgIH0KLQotICAgIC8qKgotICAgICAqIG11bHRpcGx5IHR3byBtYXRyaWNlcyBhbmQgc3RvcmUgdGhlbSBpbiBhIDNyZC4KLSAgICAgKiA8cC8+VGhpcyBpbiBlZmZlY3QgZG9lcyBkZXN0ID0gYSpiCi0gICAgICogZGVzdCBjYW5ub3QgYmUgdGhlIHNhbWUgYXMgYSBvciBiLgotICAgICAqLwotICAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBtdWx0aXBseShmbG9hdCBkZXN0W10sIGZsb2F0W10gYSwgZmxvYXRbXSBiKSB7Ci0gICAgICAgIC8vIGZpcnN0IHJvdwotICAgICAgICBkZXN0WzBdID0gYlswXSAqIGFbMF0gKyBiWzFdICogYVszXSArIGJbMl0gKiBhWzZdOwotICAgICAgICBkZXN0WzFdID0gYlswXSAqIGFbMV0gKyBiWzFdICogYVs0XSArIGJbMl0gKiBhWzddOwotICAgICAgICBkZXN0WzJdID0gYlswXSAqIGFbMl0gKyBiWzFdICogYVs1XSArIGJbMl0gKiBhWzhdOwotCi0gICAgICAgIC8vIDJuZCByb3cKLSAgICAgICAgZGVzdFszXSA9IGJbM10gKiBhWzBdICsgYls0XSAqIGFbM10gKyBiWzVdICogYVs2XTsKLSAgICAgICAgZGVzdFs0XSA9IGJbM10gKiBhWzFdICsgYls0XSAqIGFbNF0gKyBiWzVdICogYVs3XTsKLSAgICAgICAgZGVzdFs1XSA9IGJbM10gKiBhWzJdICsgYls0XSAqIGFbNV0gKyBiWzVdICogYVs4XTsKLQotICAgICAgICAvLyAzcmQgcm93Ci0gICAgICAgIGRlc3RbNl0gPSBiWzZdICogYVswXSArIGJbN10gKiBhWzNdICsgYls4XSAqIGFbNl07Ci0gICAgICAgIGRlc3RbN10gPSBiWzZdICogYVsxXSArIGJbN10gKiBhWzRdICsgYls4XSAqIGFbN107Ci0gICAgICAgIGRlc3RbOF0gPSBiWzZdICogYVsyXSArIGJbN10gKiBhWzVdICsgYls4XSAqIGFbOF07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIG1hdHJpeCB0aGF0IHJlcHJlc2VudHMgYSBnaXZlbiB0cmFuc2xhdGUKLSAgICAgKiBAcGFyYW0gZHgKLSAgICAgKiBAcGFyYW0gZHkKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0W10gZ2V0VHJhbnNsYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSkgewotICAgICAgICByZXR1cm4gc2V0VHJhbnNsYXRlKG5ldyBmbG9hdFs5XSwgZHgsIGR5KTsKLSAgICB9Ci0KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXRbXSBzZXRUcmFuc2xhdGUoZmxvYXRbXSBkZXN0LCBmbG9hdCBkeCwgZmxvYXQgZHkpIHsKLSAgICAgICAgZGVzdFswXSA9IDE7Ci0gICAgICAgIGRlc3RbMV0gPSAwOwotICAgICAgICBkZXN0WzJdID0gZHg7Ci0gICAgICAgIGRlc3RbM10gPSAwOwotICAgICAgICBkZXN0WzRdID0gMTsKLSAgICAgICAgZGVzdFs1XSA9IGR5OwotICAgICAgICBkZXN0WzZdID0gMDsKLSAgICAgICAgZGVzdFs3XSA9IDA7Ci0gICAgICAgIGRlc3RbOF0gPSAxOwotICAgICAgICByZXR1cm4gZGVzdDsKLSAgICB9Ci0KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXRbXSBnZXRTY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBmbG9hdFtdIHsgc3gsIDAsIDAsIDAsIHN5LCAwLCAwLCAwLCAxIH07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIG1hdHJpeCB0aGF0IHJlcHJlc2VudHMgdGhlIGdpdmVuIHNjYWxlIGluZm8uCi0gICAgICogQHBhcmFtIHN4Ci0gICAgICogQHBhcmFtIHN5Ci0gICAgICogQHBhcmFtIHB4Ci0gICAgICogQHBhcmFtIHB5Ci0gICAgICovCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0W10gZ2V0U2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBweCwgZmxvYXQgcHkpIHsKLSAgICAgICAgZmxvYXRbXSB0bXAgPSBuZXcgZmxvYXRbOV07Ci0gICAgICAgIGZsb2F0W10gdG1wMiA9IG5ldyBmbG9hdFs5XTsKLQotICAgICAgICAvLyBUT0RPOiBkbyBpdCBpbiBvbmUgcGFzcwotCi0gICAgICAgIC8vIHRyYW5zbGF0ZSB0bXAgc28gdGhhdCB0aGUgcGl2b3QgaXMgaW4gMCwwCi0gICAgICAgIHNldFRyYW5zbGF0ZSh0bXAsIC1weCwgLXB5KTsKLQotICAgICAgICAvLyBzY2FsZSBpbnRvIHRtcDIKLSAgICAgICAgbXVsdGlwbHkodG1wMiwgdG1wLCBnZXRTY2FsZShzeCwgc3kpKTsKLQotICAgICAgICAvLyB0cmFuc2xhdGUgYmFjayB0aGUgcGl2b3QgYmFjayBpbnRvIHRtcAotICAgICAgICBtdWx0aXBseSh0bXAsIHRtcDIsIGdldFRyYW5zbGF0ZShweCwgcHkpKTsKLQotICAgICAgICByZXR1cm4gdG1wOwotICAgIH0KLQotCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0W10gZ2V0Um90YXRlKGZsb2F0IGRlZ3JlZXMpIHsKLSAgICAgICAgZG91YmxlIHJhZCA9IE1hdGgudG9SYWRpYW5zKGRlZ3JlZXMpOwotICAgICAgICBmbG9hdCBzaW4gPSAoZmxvYXQpTWF0aC5zaW4ocmFkKTsKLSAgICAgICAgZmxvYXQgY29zID0gKGZsb2F0KU1hdGguY29zKHJhZCk7Ci0KLSAgICAgICAgcmV0dXJuIGdldFJvdGF0ZShzaW4sIGNvcyk7Ci0gICAgfQotCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0W10gZ2V0Um90YXRlKGZsb2F0IHNpbiwgZmxvYXQgY29zKSB7Ci0gICAgICAgIHJldHVybiBzZXRSb3RhdGUobmV3IGZsb2F0WzldLCBzaW4sIGNvcyk7Ci0gICAgfQotCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0W10gc2V0Um90YXRlKGZsb2F0W10gZGVzdCwgZmxvYXQgZGVncmVlcykgewotICAgICAgICBkb3VibGUgcmFkID0gTWF0aC50b1JhZGlhbnMoZGVncmVlcyk7Ci0gICAgICAgIGZsb2F0IHNpbiA9IChmbG9hdClNYXRoLnNpbihyYWQpOwotICAgICAgICBmbG9hdCBjb3MgPSAoZmxvYXQpTWF0aC5jb3MocmFkKTsKLQotICAgICAgICByZXR1cm4gc2V0Um90YXRlKGRlc3QsIHNpbiwgY29zKTsKLSAgICB9Ci0KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXRbXSBzZXRSb3RhdGUoZmxvYXRbXSBkZXN0LCBmbG9hdCBzaW4sIGZsb2F0IGNvcykgewotICAgICAgICBkZXN0WzBdID0gY29zOwotICAgICAgICBkZXN0WzFdID0gLXNpbjsKLSAgICAgICAgZGVzdFsyXSA9IDA7Ci0gICAgICAgIGRlc3RbM10gPSBzaW47Ci0gICAgICAgIGRlc3RbNF0gPSBjb3M7Ci0gICAgICAgIGRlc3RbNV0gPSAwOwotICAgICAgICBkZXN0WzZdID0gMDsKLSAgICAgICAgZGVzdFs3XSA9IDA7Ci0gICAgICAgIGRlc3RbOF0gPSAxOwotICAgICAgICByZXR1cm4gZGVzdDsKLSAgICB9Ci0KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXRbXSBnZXRSb3RhdGUoZmxvYXQgZGVncmVlcywgZmxvYXQgcHgsIGZsb2F0IHB5KSB7Ci0gICAgICAgIGZsb2F0W10gdG1wID0gbmV3IGZsb2F0WzldOwotICAgICAgICBmbG9hdFtdIHRtcDIgPSBuZXcgZmxvYXRbOV07Ci0KLSAgICAgICAgLy8gVE9ETzogZG8gaXQgaW4gb25lIHBhc3MKLQotICAgICAgICAvLyB0cmFuc2xhdGUgc28gdGhhdCB0aGUgcGl2b3QgaXMgaW4gMCwwCi0gICAgICAgIHNldFRyYW5zbGF0ZSh0bXAsIC1weCwgLXB5KTsKLQotICAgICAgICAvLyByb3RhdGUgaW50byB0bXAyCi0gICAgICAgIGRvdWJsZSByYWQgPSBNYXRoLnRvUmFkaWFucyhkZWdyZWVzKTsKLSAgICAgICAgZmxvYXQgY29zID0gKGZsb2F0KU1hdGguY29zKHJhZCk7Ci0gICAgICAgIGZsb2F0IHNpbiA9IChmbG9hdClNYXRoLnNpbihyYWQpOwotICAgICAgICBtdWx0aXBseSh0bXAyLCB0bXAsIGdldFJvdGF0ZShzaW4sIGNvcykpOwotCi0gICAgICAgIC8vIHRyYW5zbGF0ZSBiYWNrIHRoZSBwaXZvdCBiYWNrIGludG8gdG1wCi0gICAgICAgIG11bHRpcGx5KHRtcCwgdG1wMiwgZ2V0VHJhbnNsYXRlKHB4LCBweSkpOwotCi0gICAgICAgIHJldHVybiB0bXA7Ci0gICAgfQotCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0W10gZ2V0U2tldyhmbG9hdCBreCwgZmxvYXQga3kpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBmbG9hdFtdIHsgMSwga3gsIDAsIGt5LCAxLCAwLCAwLCAwLCAxIH07Ci0gICAgfQotCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0W10gZ2V0U2tldyhmbG9hdCBreCwgZmxvYXQga3ksIGZsb2F0IHB4LCBmbG9hdCBweSkgewotICAgICAgICBmbG9hdFtdIHRtcCA9IG5ldyBmbG9hdFs5XTsKLSAgICAgICAgZmxvYXRbXSB0bXAyID0gbmV3IGZsb2F0WzldOwotCi0gICAgICAgIC8vIFRPRE86IGRvIGl0IGluIG9uZSBwYXNzCi0KLSAgICAgICAgLy8gdHJhbnNsYXRlIHNvIHRoYXQgdGhlIHBpdm90IGlzIGluIDAsMAotICAgICAgICBzZXRUcmFuc2xhdGUodG1wLCAtcHgsIC1weSk7Ci0KLSAgICAgICAgLy8gc2tldyBpbnRvIHRtcDIKLSAgICAgICAgbXVsdGlwbHkodG1wMiwgdG1wLCBuZXcgZmxvYXRbXSB7IDEsIGt4LCAwLCBreSwgMSwgMCwgMCwgMCwgMSB9KTsKLSAgICAgICAgLy8gdHJhbnNsYXRlIGJhY2sgdGhlIHBpdm90IGJhY2sgaW50byB0bXAKLSAgICAgICAgbXVsdGlwbHkodG1wLCB0bXAyLCBnZXRUcmFuc2xhdGUocHgsIHB5KSk7Ci0KLSAgICAgICAgcmV0dXJuIHRtcDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL05pbmVQYXRjaF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9OaW5lUGF0Y2hfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUxMzQ2MzAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9OaW5lUGF0Y2hfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5HY1NuYXBzaG90OwotaW1wb3J0IGNvbS5hbmRyb2lkLm5pbmVwYXRjaC5OaW5lUGF0Y2hDaHVuazsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLk5pbmVQYXRjaERyYXdhYmxlOwotCi1pbXBvcnQgamF2YS5hd3QuR3JhcGhpY3MyRDsKLWltcG9ydCBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubGFuZy5yZWYuU29mdFJlZmVyZW5jZTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5OaW5lUGF0Y2gKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBOaW5lUGF0Y2ggaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIGl0J3MgYSBzdGF0ZWxlc3MgY2xhc3MgdG8gc3RhcnQgd2l0aCwgdGhlcmUncyBubyBuZWVkIHRvIGtlZXAgYSB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfQotICogYXJvdW5kIHRvIG1hcCBpbnQgdG8gaW5zdGFuY2Ugb2YgdGhlIGRlbGVnYXRlLgotICoKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIE5pbmVQYXRjaF9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIG1hbmFnZXIgLS0tLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIERlbGVnYXRlTWFuYWdlcjxOaW5lUGF0Y2hfRGVsZWdhdGU+IHNNYW5hZ2VyID0KLSAgICAgICAgICAgIG5ldyBEZWxlZ2F0ZU1hbmFnZXI8TmluZVBhdGNoX0RlbGVnYXRlPihOaW5lUGF0Y2hfRGVsZWdhdGUuY2xhc3MpOwotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBoZWxwZXIgZGF0YSAtLS0tCi0gICAgLyoqCi0gICAgICogQ2FjaGUgbWFwIGZvciB7QGxpbmsgTmluZVBhdGNoQ2h1bmt9LgotICAgICAqIFdoZW4gdGhlIGNodW5rcyBhcmUgY3JlYXRlZCB0aGV5IGFyZSBzZXJpYWxpemVkIGludG8gYSBieXRlW10sIGFuZCBib3RoIGFyZSBwdXQKLSAgICAgKiBpbiB0aGUgY2FjaGUsIHVzaW5nIGEge0BsaW5rIFNvZnRSZWZlcmVuY2V9IGZvciB0aGUgY2h1bmsuIFRoZSBkZWZhdWx0IEphdmEgY2xhc3NlcwotICAgICAqIGZvciB7QGxpbmsgTmluZVBhdGNofSBhbmQge0BsaW5rIE5pbmVQYXRjaERyYXdhYmxlfSBvbmx5IHJlZmVyZW5jZSB0byB0aGUgYnl0ZVtdIGRhdGEsIGFuZAotICAgICAqIHByb3ZpZGUgdGhpcyBmb3IgZHJhd2luZy4KLSAgICAgKiBVc2luZyB0aGUgY2FjaGUgbWFwIGFsbG93cyB1cyB0byBub3QgaGF2ZSB0byBkZXNlcmlhbGl6ZSB0aGUgYnl0ZVtdIGJhY2sgaW50byBhCi0gICAgICoge0BsaW5rIE5pbmVQYXRjaENodW5rfSBldmVyeSB0aW1lIGEgcmVuZGVyaW5nIGlzIGRvbmUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgTWFwPGJ5dGVbXSwgU29mdFJlZmVyZW5jZTxOaW5lUGF0Y2hDaHVuaz4+IHNDaHVua0NhY2hlID0KLSAgICAgICAgbmV3IEhhc2hNYXA8Ynl0ZVtdLCBTb2Z0UmVmZXJlbmNlPE5pbmVQYXRjaENodW5rPj4oKTsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0gICAgcHJpdmF0ZSBieXRlW10gY2h1bms7Ci0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIC8qKgotICAgICAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIGNodW5rLgotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgc2VyaWFsaXplZCBkYXRhIGZvciB0aGUgY2h1bmsuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBieXRlW10gc2VyaWFsaXplKE5pbmVQYXRjaENodW5rIGNodW5rKSB7Ci0gICAgICAgIC8vIHNlcmlhbGl6ZSB0aGUgY2h1bmsgdG8gZ2V0IGEgYnl0ZVtdCi0gICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgICAgICBPYmplY3RPdXRwdXRTdHJlYW0gb29zID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG9vcyA9IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0oYmFvcyk7Ci0gICAgICAgICAgICBvb3Mud3JpdGVPYmplY3QoY2h1bmspOwotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IobnVsbCwgIkZhaWxlZCB0byBzZXJpYWxpemUgTmluZVBhdGNoQ2h1bmsuIiwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGlmIChvb3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIG9vcy5jbG9zZSgpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBnZXQgdGhlIGFycmF5IGFuZCBhZGQgaXQgdG8gdGhlIGNhY2hlCi0gICAgICAgIGJ5dGVbXSBhcnJheSA9IGJhb3MudG9CeXRlQXJyYXkoKTsKLSAgICAgICAgc0NodW5rQ2FjaGUucHV0KGFycmF5LCBuZXcgU29mdFJlZmVyZW5jZTxOaW5lUGF0Y2hDaHVuaz4oY2h1bmspKTsKLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSB7QGxpbmsgTmluZVBhdGNoQ2h1bmt9IG9iamVjdCBmb3IgdGhlIGdpdmVuIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24uCi0gICAgICoKLSAgICAgKiBJZiB0aGUgY2h1bmsgaXMgcHJlc2VudCBpbiB0aGUgY2FjaGUgdGhlbiB0aGUgb2JqZWN0IGZyb20gdGhlIGNhY2hlIGlzIHJldHVybmVkLCBvdGhlcndpc2UKLSAgICAgKiB0aGUgYXJyYXkgaXMgZGVzZXJpYWxpemVkIGludG8gYSB7QGxpbmsgTmluZVBhdGNoQ2h1bmt9IG9iamVjdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhcnJheSB0aGUgc2VyaWFsaXplZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2h1bmsuCi0gICAgICogQHJldHVybiB0aGUgTmluZVBhdGNoQ2h1bmsgb3IgbnVsbCBpZiBkZXNlcmlhbGl6YXRpb24gZmFpbGVkLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTmluZVBhdGNoQ2h1bmsgZ2V0Q2h1bmsoYnl0ZVtdIGFycmF5KSB7Ci0gICAgICAgIFNvZnRSZWZlcmVuY2U8TmluZVBhdGNoQ2h1bms+IGNodW5rUmVmID0gc0NodW5rQ2FjaGUuZ2V0KGFycmF5KTsKLSAgICAgICAgTmluZVBhdGNoQ2h1bmsgY2h1bmsgPSBjaHVua1JlZi5nZXQoKTsKLSAgICAgICAgaWYgKGNodW5rID09IG51bGwpIHsKLSAgICAgICAgICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGJhaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYXJyYXkpOwotICAgICAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gb2lzID0gbnVsbDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgb2lzID0gbmV3IE9iamVjdElucHV0U3RyZWFtKGJhaXMpOwotICAgICAgICAgICAgICAgIGNodW5rID0gKE5pbmVQYXRjaENodW5rKSBvaXMucmVhZE9iamVjdCgpOwotCi0gICAgICAgICAgICAgICAgLy8gcHV0IGJhY2sgdGhlIGNodW5rIGluIHRoZSBjYWNoZQotICAgICAgICAgICAgICAgIGlmIChjaHVuayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNDaHVua0NhY2hlLnB1dChhcnJheSwgbmV3IFNvZnRSZWZlcmVuY2U8TmluZVBhdGNoQ2h1bms+KGNodW5rKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gZGVzZXJpYWxpemUgTmluZVBhdGNoQ2h1bmsgY29udGVudC4iLCBlLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gZGVzZXJpYWxpemUgTmluZVBhdGNoQ2h1bmsgY2xhc3MuIiwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIGlmIChvaXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgb2lzLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjaHVuazsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGlzTmluZVBhdGNoQ2h1bmsoYnl0ZVtdIGNodW5rKSB7Ci0gICAgICAgIE5pbmVQYXRjaENodW5rIGNodW5rT2JqZWN0ID0gZ2V0Q2h1bmsoY2h1bmspOwotICAgICAgICBpZiAoY2h1bmtPYmplY3QgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCB2YWxpZGF0ZU5pbmVQYXRjaENodW5rKGludCBiaXRtYXAsIGJ5dGVbXSBjaHVuaykgewotICAgICAgICAvLyB0aGUgZGVmYXVsdCBKTkkgaW1wbGVtZW50YXRpb24gb25seSBjaGVja3MgdGhhdCB0aGUgYnl0ZVtdIGhhcyB0aGUgc2FtZQotICAgICAgICAvLyBzaXplIGFzIHRoZSBDIHN0cnVjdCBpdCByZXByZXNlbnQuIFNpbmNlIHdlIGNhbm5vdCBkbyB0aGUgc2FtZSBjaGVjayAoc2VyaWFsaXphdGlvbgotICAgICAgICAvLyB3aWxsIHJldHVybiBkaWZmZXJlbnQgc2l6ZSBkZXBlbmRpbmcgb24gY29udGVudCksIHdlIGRvIG5vdGhpbmcuCi0gICAgICAgIE5pbmVQYXRjaF9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBOaW5lUGF0Y2hfRGVsZWdhdGUoKTsKLSAgICAgICAgbmV3RGVsZWdhdGUuY2h1bmsgPSBjaHVuazsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVGaW5hbGl6ZShpbnQgY2h1bmspIHsKLSAgICAgICAgc01hbmFnZXIucmVtb3ZlSmF2YVJlZmVyZW5jZUZvcihjaHVuayk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlRHJhdyhpbnQgY2FudmFzX2luc3RhbmNlLCBSZWN0RiBsb2MsIGludCBiaXRtYXBfaW5zdGFuY2UsCi0gICAgICAgICAgICBpbnQgY2h1bmssIGludCBwYWludF9pbnN0YW5jZV9vcl9udWxsLCBpbnQgZGVzdERlbnNpdHksIGludCBzcmNEZW5zaXR5KSB7Ci0gICAgICAgIGRyYXcoY2FudmFzX2luc3RhbmNlLAotICAgICAgICAgICAgICAgIChpbnQpIGxvYy5sZWZ0LCAoaW50KSBsb2MudG9wLCAoaW50KSBsb2Mud2lkdGgoKSwgKGludCkgbG9jLmhlaWdodCgpLAotICAgICAgICAgICAgICAgIGJpdG1hcF9pbnN0YW5jZSwgY2h1bmssIHBhaW50X2luc3RhbmNlX29yX251bGwsCi0gICAgICAgICAgICAgICAgZGVzdERlbnNpdHksIHNyY0RlbnNpdHkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZURyYXcoaW50IGNhbnZhc19pbnN0YW5jZSwgUmVjdCBsb2MsIGludCBiaXRtYXBfaW5zdGFuY2UsCi0gICAgICAgICAgICBpbnQgY2h1bmssIGludCBwYWludF9pbnN0YW5jZV9vcl9udWxsLCBpbnQgZGVzdERlbnNpdHksIGludCBzcmNEZW5zaXR5KSB7Ci0gICAgICAgIGRyYXcoY2FudmFzX2luc3RhbmNlLAotICAgICAgICAgICAgICAgIGxvYy5sZWZ0LCBsb2MudG9wLCBsb2Mud2lkdGgoKSwgbG9jLmhlaWdodCgpLAotICAgICAgICAgICAgICAgIGJpdG1hcF9pbnN0YW5jZSwgY2h1bmssIHBhaW50X2luc3RhbmNlX29yX251bGwsCi0gICAgICAgICAgICAgICAgZGVzdERlbnNpdHksIHNyY0RlbnNpdHkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlR2V0VHJhbnNwYXJlbnRSZWdpb24oaW50IGJpdG1hcCwgaW50IGNodW5rLCBSZWN0IGxvY2F0aW9uKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRyYXcoaW50IGNhbnZhc19pbnN0YW5jZSwKLSAgICAgICAgICAgIGZpbmFsIGludCBsZWZ0LCBmaW5hbCBpbnQgdG9wLCBmaW5hbCBpbnQgcmlnaHQsIGZpbmFsIGludCBib3R0b20sCi0gICAgICAgICAgICBpbnQgYml0bWFwX2luc3RhbmNlLCBpbnQgY2h1bmssIGludCBwYWludF9pbnN0YW5jZV9vcl9udWxsLAotICAgICAgICAgICAgZmluYWwgaW50IGRlc3REZW5zaXR5LCBmaW5hbCBpbnQgc3JjRGVuc2l0eSkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIGZpbmFsIEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXBfZGVsZWdhdGUgPSBCaXRtYXBfRGVsZWdhdGUuZ2V0RGVsZWdhdGUoYml0bWFwX2luc3RhbmNlKTsKLSAgICAgICAgaWYgKGJpdG1hcF9kZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBieXRlW10gYyA9IG51bGw7Ci0gICAgICAgIE5pbmVQYXRjaF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKGNodW5rKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlICE9IG51bGwpIHsKLSAgICAgICAgICAgIGMgPSBkZWxlZ2F0ZS5jaHVuazsKLSAgICAgICAgfQotICAgICAgICBpZiAoYyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBub3QgYSA5LXBhdGNoPwotICAgICAgICAgICAgQnVmZmVyZWRJbWFnZSBpbWFnZSA9IGJpdG1hcF9kZWxlZ2F0ZS5nZXRJbWFnZSgpOwotICAgICAgICAgICAgQ2FudmFzX0RlbGVnYXRlLm5hdGl2ZV9kcmF3Qml0bWFwKGNhbnZhc19pbnN0YW5jZSwgYml0bWFwX2luc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICBuZXcgUmVjdCgwLCAwLCBpbWFnZS5nZXRXaWR0aCgpLCBpbWFnZS5nZXRIZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAgIG5ldyBSZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSksCi0gICAgICAgICAgICAgICAgICAgIHBhaW50X2luc3RhbmNlX29yX251bGwsIGRlc3REZW5zaXR5LCBzcmNEZW5zaXR5KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIE5pbmVQYXRjaENodW5rIGNodW5rT2JqZWN0ID0gZ2V0Q2h1bmsoYyk7Ci0gICAgICAgIGFzc2VydCBjaHVua09iamVjdCAhPSBudWxsOwotICAgICAgICBpZiAoY2h1bmtPYmplY3QgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQ2FudmFzX0RlbGVnYXRlIGNhbnZhc19kZWxlZ2F0ZSA9IENhbnZhc19EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShjYW52YXNfaW5zdGFuY2UpOwotICAgICAgICBpZiAoY2FudmFzX2RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoaXMgb25lIGNhbiBiZSBudWxsCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIHBhaW50X2RlbGVnYXRlID0gUGFpbnRfRGVsZWdhdGUuZ2V0RGVsZWdhdGUocGFpbnRfaW5zdGFuY2Vfb3JfbnVsbCk7Ci0KLSAgICAgICAgY2FudmFzX2RlbGVnYXRlLmdldFNuYXBzaG90KCkuZHJhdyhuZXcgR2NTbmFwc2hvdC5EcmF3YWJsZSgpIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KEdyYXBoaWNzMkQgZ3JhcGhpY3MsIFBhaW50X0RlbGVnYXRlIHBhaW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNodW5rT2JqZWN0LmRyYXcoYml0bWFwX2RlbGVnYXRlLmdldEltYWdlKCksIGdyYXBoaWNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3AsIGRlc3REZW5zaXR5LCBzcmNEZW5zaXR5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LCBwYWludF9kZWxlZ2F0ZSwgdHJ1ZSAvKmNvbXBvc2l0ZU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLyk7Ci0KLSAgICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9QYWludEZsYWdzRHJhd0ZpbHRlcl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9QYWludEZsYWdzRHJhd0ZpbHRlcl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWQzNDZhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUGFpbnRGbGFnc0RyYXdGaWx0ZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnRGbGFnc0RyYXdGaWx0ZXIKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBQYWludEZsYWdzRHJhd0ZpbHRlciBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBQYWludEZsYWdzRHJhd0ZpbHRlciBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIHRoaXMgZXh0ZW5kcyB7QGxpbmsgRHJhd0ZpbHRlcl9EZWxlZ2F0ZX0sIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYQotICoge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sIGFzIGFsbCB0aGUgRHJhd0ZpbHRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIgb3duZWQgYnkKLSAqIHtAbGluayBEcmF3RmlsdGVyX0RlbGVnYXRlfS4KLSAqCi0gKiBAc2VlIERyYXdGaWx0ZXJfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQYWludEZsYWdzRHJhd0ZpbHRlcl9EZWxlZ2F0ZSBleHRlbmRzIERyYXdGaWx0ZXJfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU3VwcG9ydGVkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpIHsKLSAgICAgICAgcmV0dXJuICJQYWludCBGbGFncyBEcmF3IEZpbHRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIjsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ29uc3RydWN0b3IoaW50IGNsZWFyQml0cywgaW50IHNldEJpdHMpIHsKLSAgICAgICAgUGFpbnRGbGFnc0RyYXdGaWx0ZXJfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgUGFpbnRGbGFnc0RyYXdGaWx0ZXJfRGVsZWdhdGUoKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9QYWludF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9QYWludF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTk1M2VkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUGFpbnRfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50LkZvbnRNZXRyaWNzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQuRm9udE1ldHJpY3NJbnQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLQotaW1wb3J0IGphdmEuYXd0LkJhc2ljU3Ryb2tlOwotaW1wb3J0IGphdmEuYXd0LkZvbnQ7Ci1pbXBvcnQgamF2YS5hd3QuU2hhcGU7Ci1pbXBvcnQgamF2YS5hd3QuU3Ryb2tlOwotaW1wb3J0IGphdmEuYXd0LlRvb2xraXQ7Ci1pbXBvcnQgamF2YS5hd3QuZm9udC5Gb250UmVuZGVyQ29udGV4dDsKLWltcG9ydCBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5QYWludAotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFBhaW50IGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIFBhaW50IGNsYXNzLgotICoKLSAqIEBzZWUgRGVsZWdhdGVNYW5hZ2VyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUGFpbnRfRGVsZWdhdGUgewotCi0gICAgLyoqCi0gICAgICogQ2xhc3MgYXNzb2NpYXRpbmcgYSB7QGxpbmsgRm9udH0gYW5kIGl0J3Mge0BsaW5rIGphdmEuYXd0LkZvbnRNZXRyaWNzfS4KLSAgICAgKi8KLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmluYWwgY2xhc3MgRm9udEluZm8gewotICAgICAgICBGb250IG1Gb250OwotICAgICAgICBqYXZhLmF3dC5Gb250TWV0cmljcyBtTWV0cmljczsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIG1hbmFnZXIgLS0tLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIERlbGVnYXRlTWFuYWdlcjxQYWludF9EZWxlZ2F0ZT4gc01hbmFnZXIgPQotICAgICAgICAgICAgbmV3IERlbGVnYXRlTWFuYWdlcjxQYWludF9EZWxlZ2F0ZT4oUGFpbnRfRGVsZWdhdGUuY2xhc3MpOwotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBoZWxwZXIgZGF0YSAtLS0tCi0gICAgcHJpdmF0ZSBMaXN0PEZvbnRJbmZvPiBtRm9udHM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBGb250UmVuZGVyQ29udGV4dCBtRm9udENvbnRleHQgPSBuZXcgRm9udFJlbmRlckNvbnRleHQoCi0gICAgICAgICAgICBuZXcgQWZmaW5lVHJhbnNmb3JtKCksIHRydWUsIHRydWUpOwotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLSAgICBwcml2YXRlIGludCBtRmxhZ3M7Ci0gICAgcHJpdmF0ZSBpbnQgbUNvbG9yOwotICAgIHByaXZhdGUgaW50IG1TdHlsZTsKLSAgICBwcml2YXRlIGludCBtQ2FwOwotICAgIHByaXZhdGUgaW50IG1Kb2luOwotICAgIHByaXZhdGUgaW50IG1UZXh0QWxpZ247Ci0gICAgcHJpdmF0ZSBUeXBlZmFjZV9EZWxlZ2F0ZSBtVHlwZWZhY2U7Ci0gICAgcHJpdmF0ZSBmbG9hdCBtU3Ryb2tlV2lkdGg7Ci0gICAgcHJpdmF0ZSBmbG9hdCBtU3Ryb2tlTWl0ZXI7Ci0gICAgcHJpdmF0ZSBmbG9hdCBtVGV4dFNpemU7Ci0gICAgcHJpdmF0ZSBmbG9hdCBtVGV4dFNjYWxlWDsKLSAgICBwcml2YXRlIGZsb2F0IG1UZXh0U2tld1g7Ci0gICAgcHJpdmF0ZSBpbnQgbUhpbnRpbmdNb2RlID0gUGFpbnQuSElOVElOR19PTjsKLQotICAgIHByaXZhdGUgWGZlcm1vZGVfRGVsZWdhdGUgbVhmZXJtb2RlOwotICAgIHByaXZhdGUgQ29sb3JGaWx0ZXJfRGVsZWdhdGUgbUNvbG9yRmlsdGVyOwotICAgIHByaXZhdGUgU2hhZGVyX0RlbGVnYXRlIG1TaGFkZXI7Ci0gICAgcHJpdmF0ZSBQYXRoRWZmZWN0X0RlbGVnYXRlIG1QYXRoRWZmZWN0OwotICAgIHByaXZhdGUgTWFza0ZpbHRlcl9EZWxlZ2F0ZSBtTWFza0ZpbHRlcjsKLSAgICBwcml2YXRlIFJhc3Rlcml6ZXJfRGVsZWdhdGUgbVJhc3Rlcml6ZXI7Ci0KLSAgICBwcml2YXRlIExvY2FsZSBtTG9jYWxlID0gTG9jYWxlLmdldERlZmF1bHQoKTsKLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHVibGljIHN0YXRpYyBQYWludF9EZWxlZ2F0ZSBnZXREZWxlZ2F0ZShpbnQgbmF0aXZlX3BhaW50KSB7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfcGFpbnQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2Yge0BsaW5rIEZvbnR9IG9iamVjdHMuIFRoZSBmaXJzdCBpdGVtIGlzIHRoZSBtYWluIGZvbnQsIHRoZSByZXN0Ci0gICAgICogYXJlIGZhbGwgYmFja3MgZm9yIGNoYXJhY3RlcnMgbm90IHByZXNlbnQgaW4gdGhlIG1haW4gZm9udC4KLSAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxGb250SW5mbz4gZ2V0Rm9udHMoKSB7Ci0gICAgICAgIHJldHVybiBtRm9udHM7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNBbnRpQWxpYXNlZCgpIHsKLSAgICAgICAgcmV0dXJuIChtRmxhZ3MgJiBQYWludC5BTlRJX0FMSUFTX0ZMQUcpICE9IDA7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNGaWx0ZXJCaXRtYXAoKSB7Ci0gICAgICAgIHJldHVybiAobUZsYWdzICYgUGFpbnQuRklMVEVSX0JJVE1BUF9GTEFHKSAhPSAwOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0U3R5bGUoKSB7Ci0gICAgICAgIHJldHVybiBtU3R5bGU7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRDb2xvcigpIHsKLSAgICAgICAgcmV0dXJuIG1Db2xvcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEFscGhhKCkgewotICAgICAgICByZXR1cm4gbUNvbG9yID4+PiAyNDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRBbHBoYShpbnQgYWxwaGEpIHsKLSAgICAgICAgbUNvbG9yID0gKGFscGhhIDw8IDI0KSB8IChtQ29sb3IgJiAweDAwRkZGRkZGKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldFRleHRBbGlnbigpIHsKLSAgICAgICAgcmV0dXJuIG1UZXh0QWxpZ247Ci0gICAgfQotCi0gICAgcHVibGljIGZsb2F0IGdldFN0cm9rZVdpZHRoKCkgewotICAgICAgICByZXR1cm4gbVN0cm9rZVdpZHRoOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIHJldHVybnMgdGhlIHZhbHVlIG9mIHN0cm9rZSBtaXRlciBuZWVkZWQgYnkgdGhlIGphdmEgYXBpLgotICAgICAqLwotICAgIHB1YmxpYyBmbG9hdCBnZXRKYXZhU3Ryb2tlTWl0ZXIoKSB7Ci0gICAgICAgIGZsb2F0IG1pdGVyID0gbVN0cm9rZU1pdGVyICogbVN0cm9rZVdpZHRoOwotICAgICAgICBpZiAobWl0ZXIgPCAxLmYpIHsKLSAgICAgICAgICAgIG1pdGVyID0gMS5mOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtaXRlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEphdmFDYXAoKSB7Ci0gICAgICAgIHN3aXRjaCAoUGFpbnQuc0NhcEFycmF5W21DYXBdKSB7Ci0gICAgICAgICAgICBjYXNlIEJVVFQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJhc2ljU3Ryb2tlLkNBUF9CVVRUOwotICAgICAgICAgICAgY2FzZSBST1VORDoKLSAgICAgICAgICAgICAgICByZXR1cm4gQmFzaWNTdHJva2UuQ0FQX1JPVU5EOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGNhc2UgU1FVQVJFOgotICAgICAgICAgICAgICAgIHJldHVybiBCYXNpY1N0cm9rZS5DQVBfU1FVQVJFOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRKYXZhSm9pbigpIHsKLSAgICAgICAgc3dpdGNoIChQYWludC5zSm9pbkFycmF5W21Kb2luXSkgewotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGNhc2UgTUlURVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJhc2ljU3Ryb2tlLkpPSU5fTUlURVI7Ci0gICAgICAgICAgICBjYXNlIFJPVU5EOgotICAgICAgICAgICAgICAgIHJldHVybiBCYXNpY1N0cm9rZS5KT0lOX1JPVU5EOwotICAgICAgICAgICAgY2FzZSBCRVZFTDoKLSAgICAgICAgICAgICAgICByZXR1cm4gQmFzaWNTdHJva2UuSk9JTl9CRVZFTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTdHJva2UgZ2V0SmF2YVN0cm9rZSgpIHsKLSAgICAgICAgaWYgKG1QYXRoRWZmZWN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChtUGF0aEVmZmVjdC5pc1N1cHBvcnRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgU3Ryb2tlIHN0cm9rZSA9IG1QYXRoRWZmZWN0LmdldFN0cm9rZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQgc3Ryb2tlICE9IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cm9rZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJva2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfUEFUSEVGRkVDVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1QYXRoRWZmZWN0LmdldFN1cHBvcnRNZXNzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIG5vIGN1c3RvbSBzdHJva2UgYXMgYmVlbiBzZXQsIHNldCB0aGUgZGVmYXVsdCBvbmUuCi0gICAgICAgIHJldHVybiBuZXcgQmFzaWNTdHJva2UoCi0gICAgICAgICAgICAgICAgICAgIGdldFN0cm9rZVdpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgIGdldEphdmFDYXAoKSwKLSAgICAgICAgICAgICAgICAgICAgZ2V0SmF2YUpvaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgZ2V0SmF2YVN0cm9rZU1pdGVyKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHtAbGluayBYZmVybW9kZX0gZGVsZWdhdGUgb3IgbnVsbCBpZiBub25lIGhhdmUgYmVlbiBzZXQKLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIGRlbGVnYXRlIG9yIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIFhmZXJtb2RlX0RlbGVnYXRlIGdldFhmZXJtb2RlKCkgewotICAgICAgICByZXR1cm4gbVhmZXJtb2RlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHtAbGluayBDb2xvckZpbHRlcn0gZGVsZWdhdGUgb3IgbnVsbCBpZiBub25lIGhhdmUgYmVlbiBzZXQKLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIGRlbGVnYXRlIG9yIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIENvbG9yRmlsdGVyX0RlbGVnYXRlIGdldENvbG9yRmlsdGVyKCkgewotICAgICAgICByZXR1cm4gbUNvbG9yRmlsdGVyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHtAbGluayBTaGFkZXJ9IGRlbGVnYXRlIG9yIG51bGwgaWYgbm9uZSBoYXZlIGJlZW4gc2V0Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRoZSBkZWxlZ2F0ZSBvciBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBTaGFkZXJfRGVsZWdhdGUgZ2V0U2hhZGVyKCkgewotICAgICAgICByZXR1cm4gbVNoYWRlcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgTWFza0ZpbHRlcn0gZGVsZWdhdGUgb3IgbnVsbCBpZiBub25lIGhhdmUgYmVlbiBzZXQKLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIGRlbGVnYXRlIG9yIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIE1hc2tGaWx0ZXJfRGVsZWdhdGUgZ2V0TWFza0ZpbHRlcigpIHsKLSAgICAgICAgcmV0dXJuIG1NYXNrRmlsdGVyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHtAbGluayBSYXN0ZXJpemVyfSBkZWxlZ2F0ZSBvciBudWxsIGlmIG5vbmUgaGF2ZSBiZWVuIHNldAotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgZGVsZWdhdGUgb3IgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgUmFzdGVyaXplcl9EZWxlZ2F0ZSBnZXRSYXN0ZXJpemVyKCkgewotICAgICAgICByZXR1cm4gbVJhc3Rlcml6ZXI7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IGdldEZsYWdzKFBhaW50IHRoaXNQYWludCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tRmxhZ3M7Ci0gICAgfQotCi0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHNldEZsYWdzKFBhaW50IHRoaXNQYWludCwgaW50IGZsYWdzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLm1GbGFncyA9IGZsYWdzOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHNldEZpbHRlckJpdG1hcChQYWludCB0aGlzUGFpbnQsIGJvb2xlYW4gZmlsdGVyKSB7Ci0gICAgICAgIHNldEZsYWcodGhpc1BhaW50LCBQYWludC5GSUxURVJfQklUTUFQX0ZMQUcsIGZpbHRlcik7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBnZXRIaW50aW5nKFBhaW50IHRoaXNQYWludCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gUGFpbnQuSElOVElOR19PTjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tSGludGluZ01vZGU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2V0SGludGluZyhQYWludCB0aGlzUGFpbnQsIGludCBtb2RlKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLm1IaW50aW5nTW9kZSA9IG1vZGU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2V0QW50aUFsaWFzKFBhaW50IHRoaXNQYWludCwgYm9vbGVhbiBhYSkgewotICAgICAgICBzZXRGbGFnKHRoaXNQYWludCwgUGFpbnQuQU5USV9BTElBU19GTEFHLCBhYSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2V0U3VicGl4ZWxUZXh0KFBhaW50IHRoaXNQYWludCwgYm9vbGVhbiBzdWJwaXhlbFRleHQpIHsKLSAgICAgICAgc2V0RmxhZyh0aGlzUGFpbnQsIFBhaW50LlNVQlBJWEVMX1RFWFRfRkxBRywgc3VicGl4ZWxUZXh0KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBzZXRVbmRlcmxpbmVUZXh0KFBhaW50IHRoaXNQYWludCwgYm9vbGVhbiB1bmRlcmxpbmVUZXh0KSB7Ci0gICAgICAgIHNldEZsYWcodGhpc1BhaW50LCBQYWludC5VTkRFUkxJTkVfVEVYVF9GTEFHLCB1bmRlcmxpbmVUZXh0KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBzZXRTdHJpa2VUaHJ1VGV4dChQYWludCB0aGlzUGFpbnQsIGJvb2xlYW4gc3RyaWtlVGhydVRleHQpIHsKLSAgICAgICAgc2V0RmxhZyh0aGlzUGFpbnQsIFBhaW50LlNUUklLRV9USFJVX1RFWFRfRkxBRywgc3RyaWtlVGhydVRleHQpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHNldEZha2VCb2xkVGV4dChQYWludCB0aGlzUGFpbnQsIGJvb2xlYW4gZmFrZUJvbGRUZXh0KSB7Ci0gICAgICAgIHNldEZsYWcodGhpc1BhaW50LCBQYWludC5GQUtFX0JPTERfVEVYVF9GTEFHLCBmYWtlQm9sZFRleHQpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHNldERpdGhlcihQYWludCB0aGlzUGFpbnQsIGJvb2xlYW4gZGl0aGVyKSB7Ci0gICAgICAgIHNldEZsYWcodGhpc1BhaW50LCBQYWludC5ESVRIRVJfRkxBRywgZGl0aGVyKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBzZXRMaW5lYXJUZXh0KFBhaW50IHRoaXNQYWludCwgYm9vbGVhbiBsaW5lYXJUZXh0KSB7Ci0gICAgICAgIHNldEZsYWcodGhpc1BhaW50LCBQYWludC5MSU5FQVJfVEVYVF9GTEFHLCBsaW5lYXJUZXh0KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IGdldENvbG9yKFBhaW50IHRoaXNQYWludCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tQ29sb3I7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2V0Q29sb3IoUGFpbnQgdGhpc1BhaW50LCBpbnQgY29sb3IpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubUNvbG9yID0gY29sb3I7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBnZXRBbHBoYShQYWludCB0aGlzUGFpbnQpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUuZ2V0QWxwaGEoKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBzZXRBbHBoYShQYWludCB0aGlzUGFpbnQsIGludCBhKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLnNldEFscGhhKGEpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBnZXRTdHJva2VXaWR0aChQYWludCB0aGlzUGFpbnQpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDEuZjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tU3Ryb2tlV2lkdGg7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2V0U3Ryb2tlV2lkdGgoUGFpbnQgdGhpc1BhaW50LCBmbG9hdCB3aWR0aCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tU3Ryb2tlV2lkdGggPSB3aWR0aDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXQgZ2V0U3Ryb2tlTWl0ZXIoUGFpbnQgdGhpc1BhaW50KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAxLmY7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubVN0cm9rZU1pdGVyOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHNldFN0cm9rZU1pdGVyKFBhaW50IHRoaXNQYWludCwgZmxvYXQgbWl0ZXIpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubVN0cm9rZU1pdGVyID0gbWl0ZXI7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgblNldFNoYWRvd0xheWVyKFBhaW50IHRoaXNQYWludCwgZmxvYXQgcmFkaXVzLCBmbG9hdCBkeCwgZmxvYXQgZHksCi0gICAgICAgICAgICBpbnQgY29sb3IpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJQYWludC5zZXRTaGFkb3dMYXllciBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBnZXRUZXh0U2l6ZShQYWludCB0aGlzUGFpbnQpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDEuZjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tVGV4dFNpemU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2V0VGV4dFNpemUoUGFpbnQgdGhpc1BhaW50LCBmbG9hdCB0ZXh0U2l6ZSkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tVGV4dFNpemUgPSB0ZXh0U2l6ZTsKLSAgICAgICAgZGVsZWdhdGUudXBkYXRlRm9udE9iamVjdCgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBnZXRUZXh0U2NhbGVYKFBhaW50IHRoaXNQYWludCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMS5mOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1UZXh0U2NhbGVYOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHNldFRleHRTY2FsZVgoUGFpbnQgdGhpc1BhaW50LCBmbG9hdCBzY2FsZVgpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubVRleHRTY2FsZVggPSBzY2FsZVg7Ci0gICAgICAgIGRlbGVnYXRlLnVwZGF0ZUZvbnRPYmplY3QoKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXQgZ2V0VGV4dFNrZXdYKFBhaW50IHRoaXNQYWludCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMS5mOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1UZXh0U2tld1g7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgc2V0VGV4dFNrZXdYKFBhaW50IHRoaXNQYWludCwgZmxvYXQgc2tld1gpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubVRleHRTa2V3WCA9IHNrZXdYOwotICAgICAgICBkZWxlZ2F0ZS51cGRhdGVGb250T2JqZWN0KCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IGFzY2VudChQYWludCB0aGlzUGFpbnQpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZQotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHRoaXNQYWludC5tTmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVsZWdhdGUubUZvbnRzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGphdmEuYXd0LkZvbnRNZXRyaWNzIGphdmFNZXRyaWNzID0gZGVsZWdhdGUubUZvbnRzLmdldCgwKS5tTWV0cmljczsKLSAgICAgICAgICAgIC8vIEFuZHJvaWQgZXhwZWN0cyBuZWdhdGl2ZSBhc2NlbnQgc28gd2UgaW52ZXJ0IHRoZSB2YWx1ZSBmcm9tIEphdmEuCi0gICAgICAgICAgICByZXR1cm4gLSBqYXZhTWV0cmljcy5nZXRBc2NlbnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBkZXNjZW50KFBhaW50IHRoaXNQYWludCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZWxlZ2F0ZS5tRm9udHMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgamF2YS5hd3QuRm9udE1ldHJpY3MgamF2YU1ldHJpY3MgPSBkZWxlZ2F0ZS5tRm9udHMuZ2V0KDApLm1NZXRyaWNzOwotICAgICAgICAgICAgcmV0dXJuIGphdmFNZXRyaWNzLmdldERlc2NlbnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IGdldEZvbnRNZXRyaWNzKFBhaW50IHRoaXNQYWludCwgRm9udE1ldHJpY3MgbWV0cmljcykgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5nZXRGb250TWV0cmljcyhtZXRyaWNzKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IGdldEZvbnRNZXRyaWNzSW50KFBhaW50IHRoaXNQYWludCwgRm9udE1ldHJpY3NJbnQgZm1pKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUKLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlbGVnYXRlLm1Gb250cy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBqYXZhLmF3dC5Gb250TWV0cmljcyBqYXZhTWV0cmljcyA9IGRlbGVnYXRlLm1Gb250cy5nZXQoMCkubU1ldHJpY3M7Ci0gICAgICAgICAgICBpZiAoZm1pICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBBbmRyb2lkIGV4cGVjdHMgbmVnYXRpdmUgYXNjZW50IHNvIHdlIGludmVydCB0aGUgdmFsdWUgZnJvbSBKYXZhLgotICAgICAgICAgICAgICAgIGZtaS50b3AgPSAtIGphdmFNZXRyaWNzLmdldE1heEFzY2VudCgpOwotICAgICAgICAgICAgICAgIGZtaS5hc2NlbnQgPSAtIGphdmFNZXRyaWNzLmdldEFzY2VudCgpOwotICAgICAgICAgICAgICAgIGZtaS5kZXNjZW50ID0gamF2YU1ldHJpY3MuZ2V0RGVzY2VudCgpOwotICAgICAgICAgICAgICAgIGZtaS5ib3R0b20gPSBqYXZhTWV0cmljcy5nZXRNYXhEZXNjZW50KCk7Ci0gICAgICAgICAgICAgICAgZm1pLmxlYWRpbmcgPSBqYXZhTWV0cmljcy5nZXRMZWFkaW5nKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBqYXZhTWV0cmljcy5nZXRIZWlnaHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBuYXRpdmVfbWVhc3VyZVRleHQoUGFpbnQgdGhpc1BhaW50LCBjaGFyW10gdGV4dCwgaW50IGluZGV4LAotICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgYmlkaUZsYWdzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUKLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUGFpbnQubU5hdGl2ZVBhaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1lYXN1cmVUZXh0KHRleHQsIGluZGV4LCBjb3VudCwgaXNSdGwoYmlkaUZsYWdzKSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IG5hdGl2ZV9tZWFzdXJlVGV4dChQYWludCB0aGlzUGFpbnQsIFN0cmluZyB0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQsCi0gICAgICAgIGludCBiaWRpRmxhZ3MpIHsKLSAgICAgICAgcmV0dXJuIG5hdGl2ZV9tZWFzdXJlVGV4dCh0aGlzUGFpbnQsIHRleHQudG9DaGFyQXJyYXkoKSwgc3RhcnQsIGVuZCAtIHN0YXJ0LCBiaWRpRmxhZ3MpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBuYXRpdmVfbWVhc3VyZVRleHQoUGFpbnQgdGhpc1BhaW50LCBTdHJpbmcgdGV4dCwgaW50IGJpZGlGbGFncykgewotICAgICAgICByZXR1cm4gbmF0aXZlX21lYXN1cmVUZXh0KHRoaXNQYWludCwgdGV4dC50b0NoYXJBcnJheSgpLCAwLCB0ZXh0Lmxlbmd0aCgpLCBiaWRpRmxhZ3MpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX2JyZWFrVGV4dChQYWludCB0aGlzUGFpbnQsIGNoYXJbXSB0ZXh0LCBpbnQgaW5kZXgsIGludCBjb3VudCwKLSAgICAgICAgICAgIGZsb2F0IG1heFdpZHRoLCBpbnQgYmlkaUZsYWdzLCBmbG9hdFtdIG1lYXN1cmVkV2lkdGgpIHsKLQotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBpbmMgPSBjb3VudCA+IDAgPyAxIDogLTE7Ci0KLSAgICAgICAgaW50IG1lYXN1cmVJbmRleCA9IDA7Ci0gICAgICAgIGZsb2F0IG1lYXN1cmVBY2MgPSAwOwotICAgICAgICBmb3IgKGludCBpID0gaW5kZXg7IGkgIT0gaW5kZXggKyBjb3VudDsgaSArPSBpbmMsIG1lYXN1cmVJbmRleCsrKSB7Ci0gICAgICAgICAgICBpbnQgc3RhcnQsIGVuZDsKLSAgICAgICAgICAgIGlmIChpIDwgaW5kZXgpIHsKLSAgICAgICAgICAgICAgICBzdGFydCA9IGk7Ci0gICAgICAgICAgICAgICAgZW5kID0gaW5kZXg7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0YXJ0ID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgZW5kID0gaTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gbWVhc3VyZSBmcm9tIHN0YXJ0IHRvIGVuZAotICAgICAgICAgICAgZmxvYXQgcmVzID0gZGVsZWdhdGUubWVhc3VyZVRleHQodGV4dCwgc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSwgaXNSdGwoYmlkaUZsYWdzKSk7Ci0KLSAgICAgICAgICAgIGlmIChtZWFzdXJlZFdpZHRoICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoW21lYXN1cmVJbmRleF0gPSByZXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1lYXN1cmVBY2MgKz0gcmVzOwotICAgICAgICAgICAgaWYgKHJlcyA+IG1heFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgLy8gd2Ugc2hvdWxkIG5vdCByZXR1cm4gdGhpcyBjaGFyIGluZGV4LCBidXQgc2luY2UgaXQncyAwLWJhc2VkCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIG5lZWQgdG8gcmV0dXJuIGEgY291bnQsIHdlIHNpbXBseSByZXR1cm4gbWVhc3VyZUluZGV4OwotICAgICAgICAgICAgICAgIHJldHVybiBtZWFzdXJlSW5kZXg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtZWFzdXJlSW5kZXg7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfYnJlYWtUZXh0KFBhaW50IHRoaXNQYWludCwgU3RyaW5nIHRleHQsIGJvb2xlYW4gbWVhc3VyZUZvcndhcmRzLAotICAgICAgICAgICAgZmxvYXQgbWF4V2lkdGgsIGludCBiaWRpRmxhZ3MsIGZsb2F0W10gbWVhc3VyZWRXaWR0aCkgewotICAgICAgICByZXR1cm4gbmF0aXZlX2JyZWFrVGV4dCh0aGlzUGFpbnQsIHRleHQudG9DaGFyQXJyYXkoKSwgMCwgdGV4dC5sZW5ndGgoKSwgbWF4V2lkdGgsCi0gICAgICAgICAgICAgICAgYmlkaUZsYWdzLCBtZWFzdXJlZFdpZHRoKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9pbml0KCkgewotICAgICAgICBQYWludF9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBQYWludF9EZWxlZ2F0ZSgpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX2luaXRXaXRoUGFpbnQoaW50IHBhaW50KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShwYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IFBhaW50X0RlbGVnYXRlKGRlbGVnYXRlKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfcmVzZXQoaW50IG5hdGl2ZV9vYmplY3QpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUucmVzZXQoKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0KGludCBuYXRpdmVfZHN0LCBpbnQgbmF0aXZlX3NyYykgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlX2RzdCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9kc3QpOwotICAgICAgICBpZiAoZGVsZWdhdGVfZHN0ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGVfc3JjID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX3NyYyk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZV9zcmMgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGVfZHN0LnNldChkZWxlZ2F0ZV9zcmMpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX2dldFN0eWxlKGludCBuYXRpdmVfb2JqZWN0KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1TdHlsZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0U3R5bGUoaW50IG5hdGl2ZV9vYmplY3QsIGludCBzdHlsZSkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tU3R5bGUgPSBzdHlsZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9nZXRTdHJva2VDYXAoaW50IG5hdGl2ZV9vYmplY3QpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubUNhcDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0U3Ryb2tlQ2FwKGludCBuYXRpdmVfb2JqZWN0LCBpbnQgY2FwKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLm1DYXAgPSBjYXA7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfZ2V0U3Ryb2tlSm9pbihpbnQgbmF0aXZlX29iamVjdCkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tSm9pbjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0U3Ryb2tlSm9pbihpbnQgbmF0aXZlX29iamVjdCwgaW50IGpvaW4pIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubUpvaW4gPSBqb2luOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZV9nZXRGaWxsUGF0aChpbnQgbmF0aXZlX29iamVjdCwgaW50IHNyYywgaW50IGRzdCkgewotICAgICAgICBQYWludF9EZWxlZ2F0ZSBwYWludCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAocGFpbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBzcmNQYXRoID0gUGF0aF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShzcmMpOwotICAgICAgICBpZiAoc3JjUGF0aCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFBhdGhfRGVsZWdhdGUgZHN0UGF0aCA9IFBhdGhfRGVsZWdhdGUuZ2V0RGVsZWdhdGUoZHN0KTsKLSAgICAgICAgaWYgKGRzdFBhdGggPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJva2Ugc3Ryb2tlID0gcGFpbnQuZ2V0SmF2YVN0cm9rZSgpOwotICAgICAgICBTaGFwZSBzdHJva2VTaGFwZSA9IHN0cm9rZS5jcmVhdGVTdHJva2VkU2hhcGUoc3JjUGF0aC5nZXRKYXZhU2hhcGUoKSk7Ci0KLSAgICAgICAgZHN0UGF0aC5zZXRKYXZhU2hhcGUoc3Ryb2tlU2hhcGUpOwotCi0gICAgICAgIC8vIEZJWE1FIGZpZ3VyZSBvdXQgdGhlIHJldHVybiB2YWx1ZT8KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfc2V0U2hhZGVyKGludCBuYXRpdmVfb2JqZWN0LCBpbnQgc2hhZGVyKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBzaGFkZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tU2hhZGVyID0gU2hhZGVyX0RlbGVnYXRlLmdldERlbGVnYXRlKHNoYWRlcik7Ci0KLSAgICAgICAgcmV0dXJuIHNoYWRlcjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9zZXRDb2xvckZpbHRlcihpbnQgbmF0aXZlX29iamVjdCwgaW50IGZpbHRlcikgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmlsdGVyOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubUNvbG9yRmlsdGVyID0gQ29sb3JGaWx0ZXJfRGVsZWdhdGUuZ2V0RGVsZWdhdGUoZmlsdGVyKTs7Ci0KLSAgICAgICAgLy8gc2luY2Ugbm9uZSBvZiB0aG9zZSBhcmUgc3VwcG9ydGVkLCBkaXNwbGF5IGEgZmlkZWxpdHkgd2FybmluZyByaWdodCBhd2F5Ci0gICAgICAgIGlmIChkZWxlZ2F0ZS5tQ29sb3JGaWx0ZXIgIT0gbnVsbCAmJiBkZWxlZ2F0ZS5tQ29sb3JGaWx0ZXIuaXNTdXBwb3J0ZWQoKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX0NPTE9SRklMVEVSLAotICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5tQ29sb3JGaWx0ZXIuZ2V0U3VwcG9ydE1lc3NhZ2UoKSwgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmlsdGVyOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX3NldFhmZXJtb2RlKGludCBuYXRpdmVfb2JqZWN0LCBpbnQgeGZlcm1vZGUpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHhmZXJtb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubVhmZXJtb2RlID0gWGZlcm1vZGVfRGVsZWdhdGUuZ2V0RGVsZWdhdGUoeGZlcm1vZGUpOwotCi0gICAgICAgIHJldHVybiB4ZmVybW9kZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9zZXRQYXRoRWZmZWN0KGludCBuYXRpdmVfb2JqZWN0LCBpbnQgZWZmZWN0KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBlZmZlY3Q7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5tUGF0aEVmZmVjdCA9IFBhdGhFZmZlY3RfRGVsZWdhdGUuZ2V0RGVsZWdhdGUoZWZmZWN0KTsKLQotICAgICAgICByZXR1cm4gZWZmZWN0OwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX3NldE1hc2tGaWx0ZXIoaW50IG5hdGl2ZV9vYmplY3QsIGludCBtYXNrZmlsdGVyKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtYXNrZmlsdGVyOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubU1hc2tGaWx0ZXIgPSBNYXNrRmlsdGVyX0RlbGVnYXRlLmdldERlbGVnYXRlKG1hc2tmaWx0ZXIpOwotCi0gICAgICAgIC8vIHNpbmNlIG5vbmUgb2YgdGhvc2UgYXJlIHN1cHBvcnRlZCwgZGlzcGxheSBhIGZpZGVsaXR5IHdhcm5pbmcgcmlnaHQgYXdheQotICAgICAgICBpZiAoZGVsZWdhdGUubU1hc2tGaWx0ZXIgIT0gbnVsbCAmJiBkZWxlZ2F0ZS5tTWFza0ZpbHRlci5pc1N1cHBvcnRlZCgpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfTUFTS0ZJTFRFUiwKLSAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGUubU1hc2tGaWx0ZXIuZ2V0U3VwcG9ydE1lc3NhZ2UoKSwgbnVsbCwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbWFza2ZpbHRlcjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9zZXRUeXBlZmFjZShpbnQgbmF0aXZlX29iamVjdCwgaW50IHR5cGVmYWNlKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZWdhdGUubVR5cGVmYWNlID0gVHlwZWZhY2VfRGVsZWdhdGUuZ2V0RGVsZWdhdGUodHlwZWZhY2UpOwotICAgICAgICBkZWxlZ2F0ZS51cGRhdGVGb250T2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiB0eXBlZmFjZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9zZXRSYXN0ZXJpemVyKGludCBuYXRpdmVfb2JqZWN0LCBpbnQgcmFzdGVyaXplcikgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmFzdGVyaXplcjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLm1SYXN0ZXJpemVyID0gUmFzdGVyaXplcl9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShyYXN0ZXJpemVyKTsKLQotICAgICAgICAvLyBzaW5jZSBub25lIG9mIHRob3NlIGFyZSBzdXBwb3J0ZWQsIGRpc3BsYXkgYSBmaWRlbGl0eSB3YXJuaW5nIHJpZ2h0IGF3YXkKLSAgICAgICAgaWYgKGRlbGVnYXRlLm1SYXN0ZXJpemVyICE9IG51bGwgJiYgZGVsZWdhdGUubVJhc3Rlcml6ZXIuaXNTdXBwb3J0ZWQoKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1JBU1RFUklaRVIsCi0gICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlLm1SYXN0ZXJpemVyLmdldFN1cHBvcnRNZXNzYWdlKCksIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJhc3Rlcml6ZXI7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfZ2V0VGV4dEFsaWduKGludCBuYXRpdmVfb2JqZWN0KSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1UZXh0QWxpZ247Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3NldFRleHRBbGlnbihpbnQgbmF0aXZlX29iamVjdCwgaW50IGFsaWduKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgUGFpbnRfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlLm1UZXh0QWxpZ24gPSBhbGlnbjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfc2V0VGV4dExvY2FsZShpbnQgbmF0aXZlX29iamVjdCwgU3RyaW5nIGxvY2FsZSkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZS5zZXRUZXh0TG9jYWxlKGxvY2FsZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfZ2V0VGV4dFdpZHRocyhpbnQgbmF0aXZlX29iamVjdCwgY2hhcltdIHRleHQsIGludCBpbmRleCwKLSAgICAgICAgICAgIGludCBjb3VudCwgaW50IGJpZGlGbGFncywgZmxvYXRbXSB3aWR0aHMpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBuYXRpdmUgaW50LgotICAgICAgICBQYWludF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9vYmplY3QpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVsZWdhdGUubUZvbnRzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgbXVsdGktY2hhciBjaGFyYWN0ZXJzIChzZWUgbWVhc3VyZVRleHQpCi0gICAgICAgICAgICBmbG9hdCB0b3RhbEFkdmFuY2UgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBjID0gdGV4dFtpICsgaW5kZXhdOwotICAgICAgICAgICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmb3IgKEZvbnRJbmZvIGluZm8gOiBkZWxlZ2F0ZS5tRm9udHMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8ubUZvbnQuY2FuRGlzcGxheShjKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWR2ID0gaW5mby5tTWV0cmljcy5jaGFyV2lkdGgoYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEFkdmFuY2UgKz0gYWR2OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRocyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzW2ldID0gYWR2OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBubyBhZHZhbmNlIGZvciB0aGlzIGNoYXIuCi0gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aHMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzW2ldID0gMC5mOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gKGludCkgdG90YWxBZHZhbmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfZ2V0VGV4dFdpZHRocyhpbnQgbmF0aXZlX29iamVjdCwgU3RyaW5nIHRleHQsIGludCBzdGFydCwKLSAgICAgICAgICAgIGludCBlbmQsIGludCBiaWRpRmxhZ3MsIGZsb2F0W10gd2lkdGhzKSB7Ci0gICAgICAgIHJldHVybiBuYXRpdmVfZ2V0VGV4dFdpZHRocyhuYXRpdmVfb2JqZWN0LCB0ZXh0LnRvQ2hhckFycmF5KCksIHN0YXJ0LCBlbmQgLSBzdGFydCwKLSAgICAgICAgICAgICAgICBiaWRpRmxhZ3MsIHdpZHRocyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLyogcGFja2FnZSAqL3N0YXRpYyBpbnQgbmF0aXZlX2dldFRleHRHbHlwaHMoaW50IG5hdGl2ZV9vYmplY3QsIFN0cmluZyB0ZXh0LCBpbnQgc3RhcnQsCi0gICAgICAgICAgICBpbnQgZW5kLCBpbnQgY29udGV4dFN0YXJ0LCBpbnQgY29udGV4dEVuZCwgaW50IGZsYWdzLCBjaGFyW10gZ2x5cGhzKSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBuYXRpdmVfZ2V0VGV4dFJ1bkFkdmFuY2VzKGludCBuYXRpdmVfb2JqZWN0LAotICAgICAgICAgICAgY2hhcltdIHRleHQsIGludCBpbmRleCwgaW50IGNvdW50LCBpbnQgY29udGV4dEluZGV4LCBpbnQgY29udGV4dENvdW50LAotICAgICAgICAgICAgaW50IGZsYWdzLCBmbG9hdFtdIGFkdmFuY2VzLCBpbnQgYWR2YW5jZXNJbmRleCkgewotCi0gICAgICAgIGlmIChhZHZhbmNlcyAhPSBudWxsKQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IGFkdmFuY2VzSW5kZXg7IGk8IGFkdmFuY2VzSW5kZXgrY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICBhZHZhbmNlc1tpXT0wOwotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsIHx8IGRlbGVnYXRlLm1Gb250cyA9PSBudWxsIHx8IGRlbGVnYXRlLm1Gb250cy5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIDAuZjsKLSAgICAgICAgfQotICAgICAgICBib29sZWFuIGlzUnRsID0gaXNSdGwoZmxhZ3MpOwotCi0gICAgICAgIGludCBsaW1pdCA9IGluZGV4ICsgY291bnQ7Ci0gICAgICAgIHJldHVybiBuZXcgQmlkaVJlbmRlcmVyKG51bGwsIGRlbGVnYXRlLCB0ZXh0KS5yZW5kZXJUZXh0KAotICAgICAgICAgICAgICAgIGluZGV4LCBsaW1pdCwgaXNSdGwsIGFkdmFuY2VzLCBhZHZhbmNlc0luZGV4LCBmYWxzZSwgMCwgMCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IG5hdGl2ZV9nZXRUZXh0UnVuQWR2YW5jZXMoaW50IG5hdGl2ZV9vYmplY3QsCi0gICAgICAgICAgICBTdHJpbmcgdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgY29udGV4dFN0YXJ0LCBpbnQgY29udGV4dEVuZCwKLSAgICAgICAgICAgIGludCBmbGFncywgZmxvYXRbXSBhZHZhbmNlcywgaW50IGFkdmFuY2VzSW5kZXgpIHsKLSAgICAgICAgLy8gRklYTUU6IHN1cHBvcnQgY29udGV4dFN0YXJ0IGFuZCBjb250ZXh0RW5kCi0gICAgICAgIGludCBjb3VudCA9IGVuZCAtIHN0YXJ0OwotICAgICAgICBjaGFyW10gYnVmZmVyID0gVGVtcG9yYXJ5QnVmZmVyLm9idGFpbihjb3VudCk7Ci0gICAgICAgIFRleHRVdGlscy5nZXRDaGFycyh0ZXh0LCBzdGFydCwgZW5kLCBidWZmZXIsIDApOwotCi0gICAgICAgIHJldHVybiBuYXRpdmVfZ2V0VGV4dFJ1bkFkdmFuY2VzKG5hdGl2ZV9vYmplY3QsIGJ1ZmZlciwgMCwgY291bnQsIGNvbnRleHRTdGFydCwKLSAgICAgICAgICAgICAgICBjb250ZXh0RW5kIC0gY29udGV4dFN0YXJ0LCBmbGFncywgYWR2YW5jZXMsIGFkdmFuY2VzSW5kZXgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlX2dldFRleHRSdW5DdXJzb3IoUGFpbnQgdGhpc1BhaW50LCBpbnQgbmF0aXZlX29iamVjdCwgY2hhcltdIHRleHQsCi0gICAgICAgICAgICBpbnQgY29udGV4dFN0YXJ0LCBpbnQgY29udGV4dExlbmd0aCwgaW50IGZsYWdzLCBpbnQgb2Zmc2V0LCBpbnQgY3Vyc29yT3B0KSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiUGFpbnQuZ2V0VGV4dFJ1bkN1cnNvciBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9nZXRUZXh0UnVuQ3Vyc29yKFBhaW50IHRoaXNQYWludCwgaW50IG5hdGl2ZV9vYmplY3QsIFN0cmluZyB0ZXh0LAotICAgICAgICAgICAgaW50IGNvbnRleHRTdGFydCwgaW50IGNvbnRleHRFbmQsIGludCBmbGFncywgaW50IG9mZnNldCwgaW50IGN1cnNvck9wdCkgewotICAgICAgICAvLyBGSVhNRQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIlBhaW50LmdldFRleHRSdW5DdXJzb3IgaXMgbm90IHN1cHBvcnRlZC4iLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2dldFRleHRQYXRoKGludCBuYXRpdmVfb2JqZWN0LCBpbnQgYmlkaUZsYWdzLAotICAgICAgICAgICAgICAgIGNoYXJbXSB0ZXh0LCBpbnQgaW5kZXgsIGludCBjb3VudCwgZmxvYXQgeCwgZmxvYXQgeSwgaW50IHBhdGgpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJQYWludC5nZXRUZXh0UGF0aCBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwsIG51bGwgLypkYXRhKi8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9nZXRUZXh0UGF0aChpbnQgbmF0aXZlX29iamVjdCwgaW50IGJpZGlGbGFncywKLSAgICAgICAgICAgIFN0cmluZyB0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQsIGZsb2F0IHgsIGZsb2F0IHksIGludCBwYXRoKSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiUGFpbnQuZ2V0VGV4dFBhdGggaXMgbm90IHN1cHBvcnRlZC4iLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVHZXRTdHJpbmdCb3VuZHMoaW50IG5hdGl2ZVBhaW50LCBTdHJpbmcgdGV4dCwgaW50IHN0YXJ0LAotICAgICAgICAgICAgaW50IGVuZCwgaW50IGJpZGlGbGFncywgUmVjdCBib3VuZHMpIHsKLSAgICAgICAgbmF0aXZlR2V0Q2hhckFycmF5Qm91bmRzKG5hdGl2ZVBhaW50LCB0ZXh0LnRvQ2hhckFycmF5KCksIHN0YXJ0LCBlbmQgLSBzdGFydCwgYmlkaUZsYWdzLAotICAgICAgICAgICAgICAgIGJvdW5kcyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlR2V0Q2hhckFycmF5Qm91bmRzKGludCBuYXRpdmVQYWludCwgY2hhcltdIHRleHQsIGludCBpbmRleCwKLSAgICAgICAgICAgIGludCBjb3VudCwgaW50IGJpZGlGbGFncywgUmVjdCBib3VuZHMpIHsKLQotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlUGFpbnQpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCB8fCBkZWxlZ2F0ZS5tRm9udHMgPT0gbnVsbCB8fCBkZWxlZ2F0ZS5tRm9udHMuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpbnQgdyA9IChpbnQpIGRlbGVnYXRlLm1lYXN1cmVUZXh0KHRleHQsIGluZGV4LCBjb3VudCwgaXNSdGwoYmlkaUZsYWdzKSk7Ci0gICAgICAgIGludCBoPSBkZWxlZ2F0ZS5nZXRGb250cygpLmdldCgwKS5tTWV0cmljcy5nZXRIZWlnaHQoKTsKLSAgICAgICAgYm91bmRzLnNldCgwLCAwLCB3LCBoKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBmaW5hbGl6ZXIoaW50IG5hdGl2ZVBhaW50KSB7Ci0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IobmF0aXZlUGFpbnQpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICAvKnBhY2thZ2UqLyBQYWludF9EZWxlZ2F0ZSgpIHsKLSAgICAgICAgcmVzZXQoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFBhaW50X0RlbGVnYXRlKFBhaW50X0RlbGVnYXRlIHBhaW50KSB7Ci0gICAgICAgIHNldChwYWludCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldChQYWludF9EZWxlZ2F0ZSBwYWludCkgewotICAgICAgICBtRmxhZ3MgPSBwYWludC5tRmxhZ3M7Ci0gICAgICAgIG1Db2xvciA9IHBhaW50Lm1Db2xvcjsKLSAgICAgICAgbVN0eWxlID0gcGFpbnQubVN0eWxlOwotICAgICAgICBtQ2FwID0gcGFpbnQubUNhcDsKLSAgICAgICAgbUpvaW4gPSBwYWludC5tSm9pbjsKLSAgICAgICAgbVRleHRBbGlnbiA9IHBhaW50Lm1UZXh0QWxpZ247Ci0gICAgICAgIG1UeXBlZmFjZSA9IHBhaW50Lm1UeXBlZmFjZTsKLSAgICAgICAgbVN0cm9rZVdpZHRoID0gcGFpbnQubVN0cm9rZVdpZHRoOwotICAgICAgICBtU3Ryb2tlTWl0ZXIgPSBwYWludC5tU3Ryb2tlTWl0ZXI7Ci0gICAgICAgIG1UZXh0U2l6ZSA9IHBhaW50Lm1UZXh0U2l6ZTsKLSAgICAgICAgbVRleHRTY2FsZVggPSBwYWludC5tVGV4dFNjYWxlWDsKLSAgICAgICAgbVRleHRTa2V3WCA9IHBhaW50Lm1UZXh0U2tld1g7Ci0gICAgICAgIG1YZmVybW9kZSA9IHBhaW50Lm1YZmVybW9kZTsKLSAgICAgICAgbUNvbG9yRmlsdGVyID0gcGFpbnQubUNvbG9yRmlsdGVyOwotICAgICAgICBtU2hhZGVyID0gcGFpbnQubVNoYWRlcjsKLSAgICAgICAgbVBhdGhFZmZlY3QgPSBwYWludC5tUGF0aEVmZmVjdDsKLSAgICAgICAgbU1hc2tGaWx0ZXIgPSBwYWludC5tTWFza0ZpbHRlcjsKLSAgICAgICAgbVJhc3Rlcml6ZXIgPSBwYWludC5tUmFzdGVyaXplcjsKLSAgICAgICAgbUhpbnRpbmdNb2RlID0gcGFpbnQubUhpbnRpbmdNb2RlOwotICAgICAgICB1cGRhdGVGb250T2JqZWN0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlc2V0KCkgewotICAgICAgICBtRmxhZ3MgPSBQYWludC5ERUZBVUxUX1BBSU5UX0ZMQUdTOwotICAgICAgICBtQ29sb3IgPSAweEZGMDAwMDAwOwotICAgICAgICBtU3R5bGUgPSBQYWludC5TdHlsZS5GSUxMLm5hdGl2ZUludDsKLSAgICAgICAgbUNhcCA9IFBhaW50LkNhcC5CVVRULm5hdGl2ZUludDsKLSAgICAgICAgbUpvaW4gPSBQYWludC5Kb2luLk1JVEVSLm5hdGl2ZUludDsKLSAgICAgICAgbVRleHRBbGlnbiA9IDA7Ci0gICAgICAgIG1UeXBlZmFjZSA9IFR5cGVmYWNlX0RlbGVnYXRlLmdldERlbGVnYXRlKFR5cGVmYWNlLnNEZWZhdWx0c1swXS5uYXRpdmVfaW5zdGFuY2UpOwotICAgICAgICBtU3Ryb2tlV2lkdGggPSAxLmY7Ci0gICAgICAgIG1TdHJva2VNaXRlciA9IDQuZjsKLSAgICAgICAgbVRleHRTaXplID0gMjAuZjsKLSAgICAgICAgbVRleHRTY2FsZVggPSAxLmY7Ci0gICAgICAgIG1UZXh0U2tld1ggPSAwLmY7Ci0gICAgICAgIG1YZmVybW9kZSA9IG51bGw7Ci0gICAgICAgIG1Db2xvckZpbHRlciA9IG51bGw7Ci0gICAgICAgIG1TaGFkZXIgPSBudWxsOwotICAgICAgICBtUGF0aEVmZmVjdCA9IG51bGw7Ci0gICAgICAgIG1NYXNrRmlsdGVyID0gbnVsbDsKLSAgICAgICAgbVJhc3Rlcml6ZXIgPSBudWxsOwotICAgICAgICB1cGRhdGVGb250T2JqZWN0KCk7Ci0gICAgICAgIG1IaW50aW5nTW9kZSA9IFBhaW50LkhJTlRJTkdfT047Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXBkYXRlIHRoZSB7QGxpbmsgRm9udH0gb2JqZWN0IGZyb20gdGhlIHR5cGVmYWNlLCB0ZXh0IHNpemUgYW5kIHNjYWxpbmcKLSAgICAgKi8KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVGb250T2JqZWN0KCkgewotICAgICAgICBpZiAobVR5cGVmYWNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIEdldCB0aGUgZm9udHMgZnJvbSB0aGUgVHlwZUZhY2Ugb2JqZWN0LgotICAgICAgICAgICAgTGlzdDxGb250PiBmb250cyA9IG1UeXBlZmFjZS5nZXRGb250cygpOwotCi0gICAgICAgICAgICAvLyBjcmVhdGUgbmV3IGZvbnQgb2JqZWN0cyBhcyB3ZWxsIGFzIEZvbnRNZXRyaWNzLCBiYXNlZCBvbiB0aGUgY3VycmVudCB0ZXh0IHNpemUKLSAgICAgICAgICAgIC8vIGFuZCBza2V3IGluZm8uCi0gICAgICAgICAgICBBcnJheUxpc3Q8Rm9udEluZm8+IGluZm9MaXN0ID0gbmV3IEFycmF5TGlzdDxGb250SW5mbz4oZm9udHMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoRm9udCBmb250IDogZm9udHMpIHsKLSAgICAgICAgICAgICAgICBGb250SW5mbyBpbmZvID0gbmV3IEZvbnRJbmZvKCk7Ci0gICAgICAgICAgICAgICAgaW5mby5tRm9udCA9IGZvbnQuZGVyaXZlRm9udChtVGV4dFNpemUpOwotICAgICAgICAgICAgICAgIGlmIChtVGV4dFNjYWxlWCAhPSAxLjAgfHwgbVRleHRTa2V3WCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHN1cHBvcnQgc2tldwotICAgICAgICAgICAgICAgICAgICBpbmZvLm1Gb250ID0gaW5mby5tRm9udC5kZXJpdmVGb250KG5ldyBBZmZpbmVUcmFuc2Zvcm0oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRleHRTY2FsZVgsIG1UZXh0U2tld1gsIDAsIDEsIDAsIDApKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG1ldHJpY3MgaGVyZSBkb24ndCBoYXZlIGFudGktYWxpYXNpbmcgc2V0LgotICAgICAgICAgICAgICAgIGluZm8ubU1ldHJpY3MgPSBUb29sa2l0LmdldERlZmF1bHRUb29sa2l0KCkuZ2V0Rm9udE1ldHJpY3MoaW5mby5tRm9udCk7Ci0KLSAgICAgICAgICAgICAgICBpbmZvTGlzdC5hZGQoaW5mbyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1Gb250cyA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoaW5mb0xpc3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLypwYWNrYWdlKi8gZmxvYXQgbWVhc3VyZVRleHQoY2hhcltdIHRleHQsIGludCBpbmRleCwgaW50IGNvdW50LCBib29sZWFuIGlzUnRsKSB7Ci0gICAgICAgIHJldHVybiBuZXcgQmlkaVJlbmRlcmVyKG51bGwsIHRoaXMsIHRleHQpLnJlbmRlclRleHQoCi0gICAgICAgICAgICAgICAgaW5kZXgsIGluZGV4ICsgY291bnQsIGlzUnRsLCBudWxsLCAwLCBmYWxzZSwgMCwgMCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmbG9hdCBnZXRGb250TWV0cmljcyhGb250TWV0cmljcyBtZXRyaWNzKSB7Ci0gICAgICAgIGlmIChtRm9udHMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgamF2YS5hd3QuRm9udE1ldHJpY3MgamF2YU1ldHJpY3MgPSBtRm9udHMuZ2V0KDApLm1NZXRyaWNzOwotICAgICAgICAgICAgaWYgKG1ldHJpY3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIEFuZHJvaWQgZXhwZWN0cyBuZWdhdGl2ZSBhc2NlbnQgc28gd2UgaW52ZXJ0IHRoZSB2YWx1ZSBmcm9tIEphdmEuCi0gICAgICAgICAgICAgICAgbWV0cmljcy50b3AgPSAtIGphdmFNZXRyaWNzLmdldE1heEFzY2VudCgpOwotICAgICAgICAgICAgICAgIG1ldHJpY3MuYXNjZW50ID0gLSBqYXZhTWV0cmljcy5nZXRBc2NlbnQoKTsKLSAgICAgICAgICAgICAgICBtZXRyaWNzLmRlc2NlbnQgPSBqYXZhTWV0cmljcy5nZXREZXNjZW50KCk7Ci0gICAgICAgICAgICAgICAgbWV0cmljcy5ib3R0b20gPSBqYXZhTWV0cmljcy5nZXRNYXhEZXNjZW50KCk7Ci0gICAgICAgICAgICAgICAgbWV0cmljcy5sZWFkaW5nID0gamF2YU1ldHJpY3MuZ2V0TGVhZGluZygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gamF2YU1ldHJpY3MuZ2V0SGVpZ2h0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0VGV4dExvY2FsZShTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIG1Mb2NhbGUgPSBuZXcgTG9jYWxlKGxvY2FsZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRGbGFnKFBhaW50IHRoaXNQYWludCwgaW50IGZsYWdNYXNrLCBib29sZWFuIGZsYWdWYWx1ZSkgewotICAgICAgICAvLyBnZXQgdGhlIGRlbGVnYXRlIGZyb20gdGhlIG5hdGl2ZSBpbnQuCi0gICAgICAgIFBhaW50X0RlbGVnYXRlIGRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1BhaW50Lm1OYXRpdmVQYWludCk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZmxhZ1ZhbHVlKSB7Ci0gICAgICAgICAgICBkZWxlZ2F0ZS5tRmxhZ3MgfD0gZmxhZ01hc2s7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWxlZ2F0ZS5tRmxhZ3MgJj0gfmZsYWdNYXNrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1J0bChpbnQgZmxhZykgewotICAgICAgICBzd2l0Y2goZmxhZykgewotICAgICAgICBjYXNlIFBhaW50LkJJRElfUlRMOgotICAgICAgICBjYXNlIFBhaW50LkJJRElfRk9SQ0VfUlRMOgotICAgICAgICBjYXNlIFBhaW50LkJJRElfREVGQVVMVF9SVEw6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aERhc2hQYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BhdGhEYXNoUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDQ4ZjBlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUGF0aERhc2hQYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBqYXZhLmF3dC5TdHJva2U7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLlBhdGhEYXNoUGF0aEVmZmVjdAotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFBhdGhEYXNoUGF0aEVmZmVjdCBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBQYXRoRGFzaFBhdGhFZmZlY3QgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIFBhdGhFZmZlY3RfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sCi0gKiBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIgb3duZWQgYnkge0BsaW5rIFBhdGhFZmZlY3RfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgUGF0aEVmZmVjdF9EZWxlZ2F0ZQotICoKLSAqLwotcHVibGljIGNsYXNzIFBhdGhEYXNoUGF0aEVmZmVjdF9EZWxlZ2F0ZSBleHRlbmRzIFBhdGhFZmZlY3RfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJva2UgZ2V0U3Ryb2tlKFBhaW50X0RlbGVnYXRlIHBhaW50KSB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU3VwcG9ydGVkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpIHsKLSAgICAgICAgcmV0dXJuICJQYXRoIERhc2ggUGF0aCBFZmZlY3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIExheW91dCBQcmV2aWV3IG1vZGUuIjsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ3JlYXRlKGludCBuYXRpdmVfcGF0aCwgZmxvYXQgYWR2YW5jZSwgZmxvYXQgcGhhc2UsCi0gICAgICAgICAgICBpbnQgbmF0aXZlX3N0eWxlKSB7Ci0gICAgICAgIFBhdGhEYXNoUGF0aEVmZmVjdF9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBQYXRoRGFzaFBhdGhFZmZlY3RfRGVsZWdhdGUoKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9QYXRoRWZmZWN0X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BhdGhFZmZlY3RfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQyYjZkZS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BhdGhFZmZlY3RfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGphdmEuYXd0LlN0cm9rZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aEVmZmVjdAotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFBhdGhFZmZlY3QgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgUGF0aEVmZmVjdCBjbGFzcy4KLSAqCi0gKiBUaGlzIGFsc28gc2VydmUgYXMgYSBiYXNlIGNsYXNzIGZvciBhbGwgUGF0aEVmZmVjdCBkZWxlZ2F0ZSBjbGFzc2VzLgotICoKLSAqIEBzZWUgRGVsZWdhdGVNYW5hZ2VyCi0gKgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUGF0aEVmZmVjdF9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIG1hbmFnZXIgLS0tLQotICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPFBhdGhFZmZlY3RfRGVsZWdhdGU+IHNNYW5hZ2VyID0KLSAgICAgICAgICAgIG5ldyBEZWxlZ2F0ZU1hbmFnZXI8UGF0aEVmZmVjdF9EZWxlZ2F0ZT4oUGF0aEVmZmVjdF9EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGhlbHBlciBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwdWJsaWMgc3RhdGljIFBhdGhFZmZlY3RfRGVsZWdhdGUgZ2V0RGVsZWdhdGUoaW50IG5hdGl2ZVNoYWRlcikgewotICAgICAgICByZXR1cm4gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlU2hhZGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgU3Ryb2tlIGdldFN0cm9rZShQYWludF9EZWxlZ2F0ZSBwYWludCk7Ci0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNTdXBwb3J0ZWQoKTsKLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCk7Ci0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlRGVzdHJ1Y3RvcihpbnQgbmF0aXZlX3BhdGhlZmZlY3QpIHsKLSAgICAgICAgc01hbmFnZXIucmVtb3ZlSmF2YVJlZmVyZW5jZUZvcihuYXRpdmVfcGF0aGVmZmVjdCk7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9QYXRoX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BhdGhfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ4MGJlOS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BhdGhfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGF0aC5EaXJlY3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYXRoLkZpbGxUeXBlOwotCi1pbXBvcnQgamF2YS5hd3QuU2hhcGU7Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm07Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5BcmMyRDsKLWltcG9ydCBqYXZhLmF3dC5nZW9tLkFyZWE7Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5FbGxpcHNlMkQ7Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5HZW5lcmFsUGF0aDsKLWltcG9ydCBqYXZhLmF3dC5nZW9tLlBhdGhJdGVyYXRvcjsKLWltcG9ydCBqYXZhLmF3dC5nZW9tLlBvaW50MkQ7Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5SZWN0YW5nbGUyRDsKLWltcG9ydCBqYXZhLmF3dC5nZW9tLlJvdW5kUmVjdGFuZ2xlMkQ7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLlBhdGgKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBQYXRoIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIFBhdGggY2xhc3MuCi0gKgotICogQHNlZSBEZWxlZ2F0ZU1hbmFnZXIKLSAqCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBQYXRoX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPFBhdGhfRGVsZWdhdGU+IHNNYW5hZ2VyID0KLSAgICAgICAgICAgIG5ldyBEZWxlZ2F0ZU1hbmFnZXI8UGF0aF9EZWxlZ2F0ZT4oUGF0aF9EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotICAgIHByaXZhdGUgRmlsbFR5cGUgbUZpbGxUeXBlID0gRmlsbFR5cGUuV0lORElORzsKLSAgICBwcml2YXRlIEdlbmVyYWxQYXRoIG1QYXRoID0gbmV3IEdlbmVyYWxQYXRoKCk7Ci0KLSAgICBwcml2YXRlIGZsb2F0IG1MYXN0WCA9IDA7Ci0gICAgcHJpdmF0ZSBmbG9hdCBtTGFzdFkgPSAwOwotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHVibGljIHN0YXRpYyBQYXRoX0RlbGVnYXRlIGdldERlbGVnYXRlKGludCBuUGF0aCkgewotICAgICAgICByZXR1cm4gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgIH0KLQotICAgIHB1YmxpYyBTaGFwZSBnZXRKYXZhU2hhcGUoKSB7Ci0gICAgICAgIHJldHVybiBtUGF0aDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRKYXZhU2hhcGUoU2hhcGUgc2hhcGUpIHsKLSAgICAgICAgbVBhdGgucmVzZXQoKTsKLSAgICAgICAgbVBhdGguYXBwZW5kKHNoYXBlLCBmYWxzZSAvKmNvbm5lY3QqLyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVzZXQoKSB7Ci0gICAgICAgIG1QYXRoLnJlc2V0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UGF0aEl0ZXJhdG9yKFBhdGhJdGVyYXRvciBpdGVyYXRvcikgewotICAgICAgICBtUGF0aC5yZXNldCgpOwotICAgICAgICBtUGF0aC5hcHBlbmQoaXRlcmF0b3IsIGZhbHNlIC8qY29ubmVjdCovKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgaW5pdDEoKSB7Ci0gICAgICAgIC8vIGNyZWF0ZSB0aGUgZGVsZWdhdGUKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBQYXRoX0RlbGVnYXRlKCk7Ci0KLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IGluaXQyKGludCBuUGF0aCkgewotICAgICAgICAvLyBjcmVhdGUgdGhlIGRlbGVnYXRlCi0gICAgICAgIFBhdGhfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgUGF0aF9EZWxlZ2F0ZSgpOwotCi0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgdG8gY29weSwgd2hpY2ggY291bGQgYmUgbnVsbCBpZiBuUGF0aCBpcyAwCi0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlICE9IG51bGwpIHsKLSAgICAgICAgICAgIG5ld0RlbGVnYXRlLnNldChwYXRoRGVsZWdhdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfcmVzZXQoaW50IG5QYXRoKSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5tUGF0aC5yZXNldCgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9yZXdpbmQoaW50IG5QYXRoKSB7Ci0gICAgICAgIC8vIGNhbGwgb3V0IHRvIHJlc2V0IHNpbmNlIHRoZXJlJ3Mgbm90aGluZyB0byBvcHRpbWl6ZSBpbgotICAgICAgICAvLyB0ZXJtcyBvZiBkYXRhIHN0cnVjdHMuCi0gICAgICAgIG5hdGl2ZV9yZXNldChuUGF0aCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3NldChpbnQgbmF0aXZlX2RzdCwgaW50IG5hdGl2ZV9zcmMpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRHN0RGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfZHN0KTsKLSAgICAgICAgaWYgKHBhdGhEc3REZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhTcmNEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9zcmMpOwotICAgICAgICBpZiAocGF0aFNyY0RlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEc3REZWxlZ2F0ZS5zZXQocGF0aFNyY0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZV9nZXRGaWxsVHlwZShpbnQgblBhdGgpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcGF0aERlbGVnYXRlLm1GaWxsVHlwZS5uYXRpdmVJbnQ7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3NldEZpbGxUeXBlKGludCBuUGF0aCwgaW50IGZ0KSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5tRmlsbFR5cGUgPSBQYXRoLnNGaWxsVHlwZUFycmF5W2Z0XTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfaXNFbXB0eShpbnQgblBhdGgpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcGF0aERlbGVnYXRlLmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfaXNSZWN0KGludCBuUGF0aCwgUmVjdEYgcmVjdCkgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjcmVhdGUgYW4gQXJlYSB0aGF0IGNhbiB0ZXN0IGlmIHRoZSBwYXRoIGlzIGEgcmVjdAotICAgICAgICBBcmVhIGFyZWEgPSBuZXcgQXJlYShwYXRoRGVsZWdhdGUubVBhdGgpOwotICAgICAgICBpZiAoYXJlYS5pc1JlY3Rhbmd1bGFyKCkpIHsKLSAgICAgICAgICAgIGlmIChyZWN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBwYXRoRGVsZWdhdGUuZmlsbEJvdW5kcyhyZWN0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2NvbXB1dGVCb3VuZHMoaW50IG5QYXRoLCBSZWN0RiBib3VuZHMpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aERlbGVnYXRlLmZpbGxCb3VuZHMoYm91bmRzKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfaW5jUmVzZXJ2ZShpbnQgblBhdGgsIGludCBleHRyYVB0Q291bnQpIHsKLSAgICAgICAgLy8gc2luY2Ugd2UgdXNlIGEgamF2YTJEIHBhdGgsIHRoZXJlJ3Mgbm8gd2F5IHRvIHByZS1hbGxvY2F0ZSBuZXcgcG9pbnRzLAotICAgICAgICAvLyBzbyB3ZSBkbyBub3RoaW5nLgotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9tb3ZlVG8oaW50IG5QYXRoLCBmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5tb3ZlVG8oeCwgeSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3JNb3ZlVG8oaW50IG5QYXRoLCBmbG9hdCBkeCwgZmxvYXQgZHkpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aERlbGVnYXRlLnJNb3ZlVG8oZHgsIGR5KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfbGluZVRvKGludCBuUGF0aCwgZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBwYXRoRGVsZWdhdGUubGluZVRvKHgsIHkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9yTGluZVRvKGludCBuUGF0aCwgZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5yTGluZVRvKGR4LCBkeSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3F1YWRUbyhpbnQgblBhdGgsIGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQgeDIsIGZsb2F0IHkyKSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5xdWFkVG8oeDEsIHkxLCB4MiwgeTIpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9yUXVhZFRvKGludCBuUGF0aCwgZmxvYXQgZHgxLCBmbG9hdCBkeTEsIGZsb2F0IGR4MiwgZmxvYXQgZHkyKSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5yUXVhZFRvKGR4MSwgZHkxLCBkeDIsIGR5Mik7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2N1YmljVG8oaW50IG5QYXRoLCBmbG9hdCB4MSwgZmxvYXQgeTEsCi0gICAgICAgICAgICBmbG9hdCB4MiwgZmxvYXQgeTIsIGZsb2F0IHgzLCBmbG9hdCB5MykgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBwYXRoRGVsZWdhdGUuY3ViaWNUbyh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfckN1YmljVG8oaW50IG5QYXRoLCBmbG9hdCB4MSwgZmxvYXQgeTEsCi0gICAgICAgICAgICBmbG9hdCB4MiwgZmxvYXQgeTIsIGZsb2F0IHgzLCBmbG9hdCB5MykgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBwYXRoRGVsZWdhdGUuckN1YmljVG8oeDEsIHkxLCB4MiwgeTIsIHgzLCB5Myk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2FyY1RvKGludCBuUGF0aCwgUmVjdEYgb3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgc3dlZXBBbmdsZSwgYm9vbGVhbiBmb3JjZU1vdmVUbykgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBwYXRoRGVsZWdhdGUuYXJjVG8ob3ZhbCwgc3RhcnRBbmdsZSwgc3dlZXBBbmdsZSwgZm9yY2VNb3ZlVG8pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9jbG9zZShpbnQgblBhdGgpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aERlbGVnYXRlLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2FkZFJlY3QoaW50IG5QYXRoLCBSZWN0RiByZWN0LCBpbnQgZGlyKSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5hZGRSZWN0KHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tLCBkaXIpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9hZGRSZWN0KGludCBuUGF0aCwKLSAgICAgICAgICAgIGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgaW50IGRpcikgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBwYXRoRGVsZWdhdGUuYWRkUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIGRpcik7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2FkZE92YWwoaW50IG5QYXRoLCBSZWN0RiBvdmFsLCBpbnQgZGlyKSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5tUGF0aC5hcHBlbmQobmV3IEVsbGlwc2UyRC5GbG9hdCgKLSAgICAgICAgICAgICAgICBvdmFsLmxlZnQsIG92YWwudG9wLCBvdmFsLndpZHRoKCksIG92YWwuaGVpZ2h0KCkpLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2FkZENpcmNsZShpbnQgblBhdGgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1cywgaW50IGRpcikgewotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBiZWNhdXNlIHgveSBpcyB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGUsIG5lZWQgdG8gb2Zmc2V0IHRoaXMgYnkgdGhlIHJhZGl1cwotICAgICAgICBwYXRoRGVsZWdhdGUubVBhdGguYXBwZW5kKG5ldyBFbGxpcHNlMkQuRmxvYXQoCi0gICAgICAgICAgICAgICAgeCAtIHJhZGl1cywgeSAtIHJhZGl1cywgcmFkaXVzICogMiwgcmFkaXVzICogMiksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfYWRkQXJjKGludCBuUGF0aCwgUmVjdEYgb3ZhbCwKLSAgICAgICAgICAgIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IHN3ZWVwQW5nbGUpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYmVjYXVzZSB4L3kgaXMgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlLCBuZWVkIHRvIG9mZnNldCB0aGlzIGJ5IHRoZSByYWRpdXMKLSAgICAgICAgcGF0aERlbGVnYXRlLm1QYXRoLmFwcGVuZChuZXcgQXJjMkQuRmxvYXQoCi0gICAgICAgICAgICAgICAgb3ZhbC5sZWZ0LCBvdmFsLnRvcCwgb3ZhbC53aWR0aCgpLCBvdmFsLmhlaWdodCgpLAotICAgICAgICAgICAgICAgIC1zdGFydEFuZ2xlLCAtc3dlZXBBbmdsZSwgQXJjMkQuT1BFTiksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVfYWRkUm91bmRSZWN0KAotICAgICAgICAgICAgaW50IG5QYXRoLCBSZWN0RiByZWN0LCBmbG9hdCByeCwgZmxvYXQgcnksIGludCBkaXIpIHsKLQotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5QYXRoKTsKLSAgICAgICAgaWYgKHBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBwYXRoRGVsZWdhdGUubVBhdGguYXBwZW5kKG5ldyBSb3VuZFJlY3RhbmdsZTJELkZsb2F0KAotICAgICAgICAgICAgICAgIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgcnggKiAyLCByeSAqIDIpLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2FkZFJvdW5kUmVjdChpbnQgblBhdGgsIFJlY3RGIHJlY3QsIGZsb2F0W10gcmFkaWksIGludCBkaXIpIHsKLSAgICAgICAgLy8gSmF2YTJEIGRvZXNuJ3Qgc3VwcG9ydCBkaWZmZXJlbnQgcm91bmRlZCBjb3JuZXJzIGluIGVhY2ggY29ybmVyLCBzbyBqdXN0IHVzZSB0aGUKLSAgICAgICAgLy8gZmlyc3QgdmFsdWUuCi0gICAgICAgIG5hdGl2ZV9hZGRSb3VuZFJlY3QoblBhdGgsIHJlY3QsIHJhZGlpWzBdLCByYWRpaVsxXSwgZGlyKTsKLQotICAgICAgICAvLyB0aGVyZSBjYW4gYmUgYSBjYXNlIHdoZXJlIHRoaXMgQVBJIGlzIHVzZWQgYnV0IHdpdGggc2ltaWxhciB2YWx1ZXMgZm9yIGFsbCBjb3JuZXJzLCBzbwotICAgICAgICAvLyBpbiB0aGF0IGNhc2Ugd2UgZG9uJ3Qgd2Fybi4KLSAgICAgICAgLy8gd2Ugb25seSBjYXJlIGlmIDIgY29ybmVycyBhcmUgZGlmZmVyZW50IHNvIGp1c3QgY29tcGFyZSB0byB0aGUgbmV4dCBvbmUuCi0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IDMgOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChyYWRpaVtpICogMl0gIT0gcmFkaWlbKGkgKyAxKSAqIDJdIHx8IHJhZGlpW2kgKiAyICsgMV0gIT0gcmFkaWlbKGkgKyAxKSAqIDIgKyAxXSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJEaWZmZXJlbnQgY29ybmVyIHNpemVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIFBhdGguYWRkUm91bmRSZWN0LiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9hZGRQYXRoKGludCBuUGF0aCwgaW50IHNyYywgZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0gICAgICAgIGFkZFBhdGgoblBhdGgsIHNyYywgQWZmaW5lVHJhbnNmb3JtLmdldFRyYW5zbGF0ZUluc3RhbmNlKGR4LCBkeSkpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9hZGRQYXRoKGludCBuUGF0aCwgaW50IHNyYykgewotICAgICAgICBhZGRQYXRoKG5QYXRoLCBzcmMsIG51bGwgLyp0cmFuc2Zvcm0qLyk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX2FkZFBhdGgoaW50IG5QYXRoLCBpbnQgc3JjLCBpbnQgbWF0cml4KSB7Ci0gICAgICAgIE1hdHJpeF9EZWxlZ2F0ZSBtYXRyaXhEZWxlZ2F0ZSA9IE1hdHJpeF9EZWxlZ2F0ZS5nZXREZWxlZ2F0ZShtYXRyaXgpOwotICAgICAgICBpZiAobWF0cml4RGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgYWRkUGF0aChuUGF0aCwgc3JjLCBtYXRyaXhEZWxlZ2F0ZS5nZXRBZmZpbmVUcmFuc2Zvcm0oKSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX29mZnNldChpbnQgblBhdGgsIGZsb2F0IGR4LCBmbG9hdCBkeSwgaW50IGRzdF9wYXRoKSB7Ci0gICAgICAgIFBhdGhfRGVsZWdhdGUgcGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoblBhdGgpOwotICAgICAgICBpZiAocGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNvdWxkIGJlIG51bGwgaWYgdGhlIGludCBpcyAwOwotICAgICAgICBQYXRoX0RlbGVnYXRlIGRzdERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoZHN0X3BhdGgpOwotCi0gICAgICAgIHBhdGhEZWxlZ2F0ZS5vZmZzZXQoZHgsIGR5LCBkc3REZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX29mZnNldChpbnQgblBhdGgsIGZsb2F0IGR4LCBmbG9hdCBkeSkgewotICAgICAgICBuYXRpdmVfb2Zmc2V0KG5QYXRoLCBkeCwgZHksIDApOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZV9zZXRMYXN0UG9pbnQoaW50IG5QYXRoLCBmbG9hdCBkeCwgZmxvYXQgZHkpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aERlbGVnYXRlLm1MYXN0WCA9IGR4OwotICAgICAgICBwYXRoRGVsZWdhdGUubUxhc3RZID0gZHk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3RyYW5zZm9ybShpbnQgblBhdGgsIGludCBtYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0X3BhdGgpIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBwYXRoRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuUGF0aCk7Ci0gICAgICAgIGlmIChwYXRoRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgTWF0cml4X0RlbGVnYXRlIG1hdHJpeERlbGVnYXRlID0gTWF0cml4X0RlbGVnYXRlLmdldERlbGVnYXRlKG1hdHJpeCk7Ci0gICAgICAgIGlmIChtYXRyaXhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB0aGlzIGNhbiBiZSBudWxsIGlmIGRzdF9wYXRoIGlzIDAKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBkc3REZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKGRzdF9wYXRoKTsKLQotICAgICAgICBwYXRoRGVsZWdhdGUudHJhbnNmb3JtKG1hdHJpeERlbGVnYXRlLCBkc3REZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlX3RyYW5zZm9ybShpbnQgblBhdGgsIGludCBtYXRyaXgpIHsKLSAgICAgICAgbmF0aXZlX3RyYW5zZm9ybShuUGF0aCwgbWF0cml4LCAwKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVfb3AoaW50IG5QYXRoMSwgaW50IG5QYXRoMiwgaW50IG9wLCBpbnQgcmVzdWx0KSB7Ci0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELCAiUGF0aC5vcCgpIG5vdCBzdXBwb3J0ZWQiLCBudWxsKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIGZpbmFsaXplcihpbnQgblBhdGgpIHsKLSAgICAgICAgc01hbmFnZXIucmVtb3ZlSmF2YVJlZmVyZW5jZUZvcihuUGF0aCk7Ci0gICAgfQotCi0KLSAgICAvLyAtLS0tIFByaXZhdGUgaGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldChQYXRoX0RlbGVnYXRlIGRlbGVnYXRlKSB7Ci0gICAgICAgIG1QYXRoLnJlc2V0KCk7Ci0gICAgICAgIHNldEZpbGxUeXBlKGRlbGVnYXRlLm1GaWxsVHlwZSk7Ci0gICAgICAgIG1QYXRoLmFwcGVuZChkZWxlZ2F0ZS5tUGF0aCwgZmFsc2UgLypjb25uZWN0Ki8pOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXRGaWxsVHlwZShGaWxsVHlwZSBmaWxsVHlwZSkgewotICAgICAgICBtRmlsbFR5cGUgPSBmaWxsVHlwZTsKLSAgICAgICAgbVBhdGguc2V0V2luZGluZ1J1bGUoZ2V0V2luZGluZ1J1bGUoZmlsbFR5cGUpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBKYXZhMkQgd2luZGluZyBydWxlcyBtYXRjaGluZyBhIGdpdmVuIEFuZHJvaWQge0BsaW5rIEZpbGxUeXBlfS4KLSAgICAgKiBAcGFyYW0gdHlwZSB0aGUgYW5kcm9pZCBmaWxsIHR5cGUKLSAgICAgKiBAcmV0dXJuIHRoZSBtYXRjaGluZyBqYXZhMmQgd2luZGluZyBydWxlLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRXaW5kaW5nUnVsZShGaWxsVHlwZSB0eXBlKSB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAgY2FzZSBXSU5ESU5HOgotICAgICAgICAgICAgY2FzZSBJTlZFUlNFX1dJTkRJTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyYWxQYXRoLldJTkRfTk9OX1pFUk87Ci0gICAgICAgICAgICBjYXNlIEVWRU5fT0REOgotICAgICAgICAgICAgY2FzZSBJTlZFUlNFX0VWRU5fT0REOgotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmFsUGF0aC5XSU5EX0VWRU5fT0REOwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0IGZhbHNlOwotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgRGlyZWN0aW9uIGdldERpcmVjdGlvbihpbnQgZGlyZWN0aW9uKSB7Ci0gICAgICAgIGZvciAoRGlyZWN0aW9uIGQgOiBEaXJlY3Rpb24udmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gZC5uYXRpdmVJbnQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGFzc2VydCBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRQYXRoKGludCBkZXN0UGF0aCwgaW50IHNyY1BhdGgsIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0pIHsKLSAgICAgICAgUGF0aF9EZWxlZ2F0ZSBkZXN0UGF0aERlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoZGVzdFBhdGgpOwotICAgICAgICBpZiAoZGVzdFBhdGhEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBQYXRoX0RlbGVnYXRlIHNyY1BhdGhEZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHNyY1BhdGgpOwotICAgICAgICBpZiAoc3JjUGF0aERlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0cmFuc2Zvcm0gIT0gbnVsbCkgewotICAgICAgICAgICAgZGVzdFBhdGhEZWxlZ2F0ZS5tUGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIHNyY1BhdGhEZWxlZ2F0ZS5tUGF0aC5nZXRQYXRoSXRlcmF0b3IodHJhbnNmb3JtKSwgZmFsc2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVzdFBhdGhEZWxlZ2F0ZS5tUGF0aC5hcHBlbmQoc3JjUGF0aERlbGVnYXRlLm1QYXRoLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcGF0aCBpcyBlbXB0eS4KLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBhdGggaXMgZW1wdHkuCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzRW1wdHkoKSB7Ci0gICAgICAgIHJldHVybiBtUGF0aC5nZXRDdXJyZW50UG9pbnQoKSA9PSBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZpbGxzIHRoZSBnaXZlbiB7QGxpbmsgUmVjdEZ9IHdpdGggdGhlIHBhdGggYm91bmRzLgotICAgICAqIEBwYXJhbSBib3VuZHMgdGhlIFJlY3RGIHRvIGJlIGZpbGxlZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgZmlsbEJvdW5kcyhSZWN0RiBib3VuZHMpIHsKLSAgICAgICAgUmVjdGFuZ2xlMkQgcmVjdCA9IG1QYXRoLmdldEJvdW5kczJEKCk7Ci0gICAgICAgIGJvdW5kcy5sZWZ0ID0gKGZsb2F0KXJlY3QuZ2V0TWluWCgpOwotICAgICAgICBib3VuZHMucmlnaHQgPSAoZmxvYXQpcmVjdC5nZXRNYXhYKCk7Ci0gICAgICAgIGJvdW5kcy50b3AgPSAoZmxvYXQpcmVjdC5nZXRNaW5ZKCk7Ci0gICAgICAgIGJvdW5kcy5ib3R0b20gPSAoZmxvYXQpcmVjdC5nZXRNYXhZKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgY29udG91ciB0byB0aGUgcG9pbnQgKHgseSkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0geCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBzdGFydCBvZiBhIG5ldyBjb250b3VyCi0gICAgICogQHBhcmFtIHkgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgc3RhcnQgb2YgYSBuZXcgY29udG91cgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBtb3ZlVG8oZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICBtUGF0aC5tb3ZlVG8obUxhc3RYID0geCwgbUxhc3RZID0geSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgY29udG91ciByZWxhdGl2ZSB0byB0aGUgbGFzdCBwb2ludCBvbiB0aGUKLSAgICAgKiBwcmV2aW91cyBjb250b3VyLiBJZiB0aGVyZSBpcyBubyBwcmV2aW91cyBjb250b3VyLCB0aGlzIGlzIHRyZWF0ZWQgdGhlCi0gICAgICogc2FtZSBhcyBtb3ZlVG8oKS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkeCBUaGUgYW1vdW50IHRvIGFkZCB0byB0aGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlCi0gICAgICogICAgICAgICAgIHByZXZpb3VzIGNvbnRvdXIsIHRvIHNwZWNpZnkgdGhlIHN0YXJ0IG9mIGEgbmV3IGNvbnRvdXIKLSAgICAgKiBAcGFyYW0gZHkgVGhlIGFtb3VudCB0byBhZGQgdG8gdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZQotICAgICAqICAgICAgICAgICBwcmV2aW91cyBjb250b3VyLCB0byBzcGVjaWZ5IHRoZSBzdGFydCBvZiBhIG5ldyBjb250b3VyCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHJNb3ZlVG8oZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0gICAgICAgIGR4ICs9IG1MYXN0WDsKLSAgICAgICAgZHkgKz0gbUxhc3RZOwotICAgICAgICBtUGF0aC5tb3ZlVG8obUxhc3RYID0gZHgsIG1MYXN0WSA9IGR5KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBZGQgYSBsaW5lIGZyb20gdGhlIGxhc3QgcG9pbnQgdG8gdGhlIHNwZWNpZmllZCBwb2ludCAoeCx5KS4KLSAgICAgKiBJZiBubyBtb3ZlVG8oKSBjYWxsIGhhcyBiZWVuIG1hZGUgZm9yIHRoaXMgY29udG91ciwgdGhlIGZpcnN0IHBvaW50IGlzCi0gICAgICogYXV0b21hdGljYWxseSBzZXQgdG8gKDAsMCkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0geCBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgYSBsaW5lCi0gICAgICogQHBhcmFtIHkgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIGEgbGluZQotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBsaW5lVG8oZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICBtUGF0aC5saW5lVG8obUxhc3RYID0geCwgbUxhc3RZID0geSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2FtZSBhcyBsaW5lVG8sIGJ1dCB0aGUgY29vcmRpbmF0ZXMgYXJlIGNvbnNpZGVyZWQgcmVsYXRpdmUgdG8gdGhlIGxhc3QKLSAgICAgKiBwb2ludCBvbiB0aGlzIGNvbnRvdXIuIElmIHRoZXJlIGlzIG5vIHByZXZpb3VzIHBvaW50LCB0aGVuIGEgbW92ZVRvKDAsMCkKLSAgICAgKiBpcyBpbnNlcnRlZCBhdXRvbWF0aWNhbGx5LgotICAgICAqCi0gICAgICogQHBhcmFtIGR4IFRoZSBhbW91bnQgdG8gYWRkIHRvIHRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHByZXZpb3VzIHBvaW50IG9uCi0gICAgICogICAgICAgICAgIHRoaXMgY29udG91ciwgdG8gc3BlY2lmeSBhIGxpbmUKLSAgICAgKiBAcGFyYW0gZHkgVGhlIGFtb3VudCB0byBhZGQgdG8gdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcHJldmlvdXMgcG9pbnQgb24KLSAgICAgKiAgICAgICAgICAgdGhpcyBjb250b3VyLCB0byBzcGVjaWZ5IGEgbGluZQotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCByTGluZVRvKGZsb2F0IGR4LCBmbG9hdCBkeSkgewotICAgICAgICBpZiAoaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtUGF0aC5tb3ZlVG8obUxhc3RYID0gMCwgbUxhc3RZID0gMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZHggKz0gbUxhc3RYOwotICAgICAgICBkeSArPSBtTGFzdFk7Ci0gICAgICAgIG1QYXRoLmxpbmVUbyhtTGFzdFggPSBkeCwgbUxhc3RZID0gZHkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZCBhIHF1YWRyYXRpYyBiZXppZXIgZnJvbSB0aGUgbGFzdCBwb2ludCwgYXBwcm9hY2hpbmcgY29udHJvbCBwb2ludAotICAgICAqICh4MSx5MSksIGFuZCBlbmRpbmcgYXQgKHgyLHkyKS4gSWYgbm8gbW92ZVRvKCkgY2FsbCBoYXMgYmVlbiBtYWRlIGZvcgotICAgICAqIHRoaXMgY29udG91ciwgdGhlIGZpcnN0IHBvaW50IGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvICgwLDApLgotICAgICAqCi0gICAgICogQHBhcmFtIHgxIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGNvbnRyb2wgcG9pbnQgb24gYSBxdWFkcmF0aWMgY3VydmUKLSAgICAgKiBAcGFyYW0geTEgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY29udHJvbCBwb2ludCBvbiBhIHF1YWRyYXRpYyBjdXJ2ZQotICAgICAqIEBwYXJhbSB4MiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBlbmQgcG9pbnQgb24gYSBxdWFkcmF0aWMgY3VydmUKLSAgICAgKiBAcGFyYW0geTIgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgZW5kIHBvaW50IG9uIGEgcXVhZHJhdGljIGN1cnZlCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHF1YWRUbyhmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5MikgewotICAgICAgICBtUGF0aC5xdWFkVG8oeDEsIHkxLCBtTGFzdFggPSB4MiwgbUxhc3RZID0geTIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNhbWUgYXMgcXVhZFRvLCBidXQgdGhlIGNvb3JkaW5hdGVzIGFyZSBjb25zaWRlcmVkIHJlbGF0aXZlIHRvIHRoZSBsYXN0Ci0gICAgICogcG9pbnQgb24gdGhpcyBjb250b3VyLiBJZiB0aGVyZSBpcyBubyBwcmV2aW91cyBwb2ludCwgdGhlbiBhIG1vdmVUbygwLDApCi0gICAgICogaXMgaW5zZXJ0ZWQgYXV0b21hdGljYWxseS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkeDEgVGhlIGFtb3VudCB0byBhZGQgdG8gdGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbGFzdCBwb2ludCBvbgotICAgICAqICAgICAgICAgICAgdGhpcyBjb250b3VyLCBmb3IgdGhlIGNvbnRyb2wgcG9pbnQgb2YgYSBxdWFkcmF0aWMgY3VydmUKLSAgICAgKiBAcGFyYW0gZHkxIFRoZSBhbW91bnQgdG8gYWRkIHRvIHRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGxhc3QgcG9pbnQgb24KLSAgICAgKiAgICAgICAgICAgIHRoaXMgY29udG91ciwgZm9yIHRoZSBjb250cm9sIHBvaW50IG9mIGEgcXVhZHJhdGljIGN1cnZlCi0gICAgICogQHBhcmFtIGR4MiBUaGUgYW1vdW50IHRvIGFkZCB0byB0aGUgeC1jb29yZGluYXRlIG9mIHRoZSBsYXN0IHBvaW50IG9uCi0gICAgICogICAgICAgICAgICB0aGlzIGNvbnRvdXIsIGZvciB0aGUgZW5kIHBvaW50IG9mIGEgcXVhZHJhdGljIGN1cnZlCi0gICAgICogQHBhcmFtIGR5MiBUaGUgYW1vdW50IHRvIGFkZCB0byB0aGUgeS1jb29yZGluYXRlIG9mIHRoZSBsYXN0IHBvaW50IG9uCi0gICAgICogICAgICAgICAgICB0aGlzIGNvbnRvdXIsIGZvciB0aGUgZW5kIHBvaW50IG9mIGEgcXVhZHJhdGljIGN1cnZlCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHJRdWFkVG8oZmxvYXQgZHgxLCBmbG9hdCBkeTEsIGZsb2F0IGR4MiwgZmxvYXQgZHkyKSB7Ci0gICAgICAgIGlmIChpc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1QYXRoLm1vdmVUbyhtTGFzdFggPSAwLCBtTGFzdFkgPSAwKTsKLSAgICAgICAgfQotICAgICAgICBkeDEgKz0gbUxhc3RYOwotICAgICAgICBkeTEgKz0gbUxhc3RZOwotICAgICAgICBkeDIgKz0gbUxhc3RYOwotICAgICAgICBkeTIgKz0gbUxhc3RZOwotICAgICAgICBtUGF0aC5xdWFkVG8oZHgxLCBkeTEsIG1MYXN0WCA9IGR4MiwgbUxhc3RZID0gZHkyKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBZGQgYSBjdWJpYyBiZXppZXIgZnJvbSB0aGUgbGFzdCBwb2ludCwgYXBwcm9hY2hpbmcgY29udHJvbCBwb2ludHMKLSAgICAgKiAoeDEseTEpIGFuZCAoeDIseTIpLCBhbmQgZW5kaW5nIGF0ICh4Myx5MykuIElmIG5vIG1vdmVUbygpIGNhbGwgaGFzIGJlZW4KLSAgICAgKiBtYWRlIGZvciB0aGlzIGNvbnRvdXIsIHRoZSBmaXJzdCBwb2ludCBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byAoMCwwKS4KLSAgICAgKgotICAgICAqIEBwYXJhbSB4MSBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSAxc3QgY29udHJvbCBwb2ludCBvbiBhIGN1YmljIGN1cnZlCi0gICAgICogQHBhcmFtIHkxIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIDFzdCBjb250cm9sIHBvaW50IG9uIGEgY3ViaWMgY3VydmUKLSAgICAgKiBAcGFyYW0geDIgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgMm5kIGNvbnRyb2wgcG9pbnQgb24gYSBjdWJpYyBjdXJ2ZQotICAgICAqIEBwYXJhbSB5MiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSAybmQgY29udHJvbCBwb2ludCBvbiBhIGN1YmljIGN1cnZlCi0gICAgICogQHBhcmFtIHgzIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBwb2ludCBvbiBhIGN1YmljIGN1cnZlCi0gICAgICogQHBhcmFtIHkzIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGVuZCBwb2ludCBvbiBhIGN1YmljIGN1cnZlCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGN1YmljVG8oZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIsCi0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4MywgZmxvYXQgeTMpIHsKLSAgICAgICAgbVBhdGguY3VydmVUbyh4MSwgeTEsIHgyLCB5MiwgbUxhc3RYID0geDMsIG1MYXN0WSA9IHkzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIGN1YmljVG8sIGJ1dCB0aGUgY29vcmRpbmF0ZXMgYXJlIGNvbnNpZGVyZWQgcmVsYXRpdmUgdG8gdGhlCi0gICAgICogY3VycmVudCBwb2ludCBvbiB0aGlzIGNvbnRvdXIuIElmIHRoZXJlIGlzIG5vIHByZXZpb3VzIHBvaW50LCB0aGVuIGEKLSAgICAgKiBtb3ZlVG8oMCwwKSBpcyBpbnNlcnRlZCBhdXRvbWF0aWNhbGx5LgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCByQ3ViaWNUbyhmbG9hdCBkeDEsIGZsb2F0IGR5MSwgZmxvYXQgZHgyLCBmbG9hdCBkeTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZHgzLCBmbG9hdCBkeTMpIHsKLSAgICAgICAgaWYgKGlzRW1wdHkoKSkgewotICAgICAgICAgICAgbVBhdGgubW92ZVRvKG1MYXN0WCA9IDAsIG1MYXN0WSA9IDApOwotICAgICAgICB9Ci0gICAgICAgIGR4MSArPSBtTGFzdFg7Ci0gICAgICAgIGR5MSArPSBtTGFzdFk7Ci0gICAgICAgIGR4MiArPSBtTGFzdFg7Ci0gICAgICAgIGR5MiArPSBtTGFzdFk7Ci0gICAgICAgIGR4MyArPSBtTGFzdFg7Ci0gICAgICAgIGR5MyArPSBtTGFzdFk7Ci0gICAgICAgIG1QYXRoLmN1cnZlVG8oZHgxLCBkeTEsIGR4MiwgZHkyLCBtTGFzdFggPSBkeDMsIG1MYXN0WSA9IGR5Myk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQXBwZW5kIHRoZSBzcGVjaWZpZWQgYXJjIHRvIHRoZSBwYXRoIGFzIGEgbmV3IGNvbnRvdXIuIElmIHRoZSBzdGFydCBvZgotICAgICAqIHRoZSBwYXRoIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwYXRoJ3MgY3VycmVudCBsYXN0IHBvaW50LCB0aGVuIGFuCi0gICAgICogYXV0b21hdGljIGxpbmVUbygpIGlzIGFkZGVkIHRvIGNvbm5lY3QgdGhlIGN1cnJlbnQgY29udG91ciB0byB0aGUKLSAgICAgKiBzdGFydCBvZiB0aGUgYXJjLiBIb3dldmVyLCBpZiB0aGUgcGF0aCBpcyBlbXB0eSwgdGhlbiB3ZSBjYWxsIG1vdmVUbygpCi0gICAgICogd2l0aCB0aGUgZmlyc3QgcG9pbnQgb2YgdGhlIGFyYy4gVGhlIHN3ZWVwIGFuZ2xlIGlzIHRyZWFkIG1vZCAzNjAuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gb3ZhbCAgICAgICAgVGhlIGJvdW5kcyBvZiBvdmFsIGRlZmluaW5nIHNoYXBlIGFuZCBzaXplIG9mIHRoZSBhcmMKLSAgICAgKiBAcGFyYW0gc3RhcnRBbmdsZSAgU3RhcnRpbmcgYW5nbGUgKGluIGRlZ3JlZXMpIHdoZXJlIHRoZSBhcmMgYmVnaW5zCi0gICAgICogQHBhcmFtIHN3ZWVwQW5nbGUgIFN3ZWVwIGFuZ2xlIChpbiBkZWdyZWVzKSBtZWFzdXJlZCBjbG9ja3dpc2UsIHRyZWF0ZWQKLSAgICAgKiAgICAgICAgICAgICAgICAgICAgbW9kIDM2MC4KLSAgICAgKiBAcGFyYW0gZm9yY2VNb3ZlVG8gSWYgdHJ1ZSwgYWx3YXlzIGJlZ2luIGEgbmV3IGNvbnRvdXIgd2l0aCB0aGUgYXJjCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGFyY1RvKFJlY3RGIG92YWwsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IHN3ZWVwQW5nbGUsIGJvb2xlYW4gZm9yY2VNb3ZlVG8pIHsKLSAgICAgICAgQXJjMkQgYXJjID0gbmV3IEFyYzJELkZsb2F0KG92YWwubGVmdCwgb3ZhbC50b3AsIG92YWwud2lkdGgoKSwgb3ZhbC5oZWlnaHQoKSwgLXN0YXJ0QW5nbGUsCi0gICAgICAgICAgICAgICAgLXN3ZWVwQW5nbGUsIEFyYzJELk9QRU4pOwotICAgICAgICBtUGF0aC5hcHBlbmQoYXJjLCB0cnVlIC8qY29ubmVjdCovKTsKLQotICAgICAgICByZXNldExhc3RQb2ludEZyb21QYXRoKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2xvc2UgdGhlIGN1cnJlbnQgY29udG91ci4gSWYgdGhlIGN1cnJlbnQgcG9pbnQgaXMgbm90IGVxdWFsIHRvIHRoZQotICAgICAqIGZpcnN0IHBvaW50IG9mIHRoZSBjb250b3VyLCBhIGxpbmUgc2VnbWVudCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBjbG9zZSgpIHsKLSAgICAgICAgbVBhdGguY2xvc2VQYXRoKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlc2V0TGFzdFBvaW50RnJvbVBhdGgoKSB7Ci0gICAgICAgIFBvaW50MkQgbGFzdCA9IG1QYXRoLmdldEN1cnJlbnRQb2ludCgpOwotICAgICAgICBtTGFzdFggPSAoZmxvYXQpIGxhc3QuZ2V0WCgpOwotICAgICAgICBtTGFzdFkgPSAoZmxvYXQpIGxhc3QuZ2V0WSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZCBhIGNsb3NlZCByZWN0YW5nbGUgY29udG91ciB0byB0aGUgcGF0aAotICAgICAqCi0gICAgICogQHBhcmFtIGxlZnQgICBUaGUgbGVmdCBzaWRlIG9mIGEgcmVjdGFuZ2xlIHRvIGFkZCB0byB0aGUgcGF0aAotICAgICAqIEBwYXJhbSB0b3AgICAgVGhlIHRvcCBvZiBhIHJlY3RhbmdsZSB0byBhZGQgdG8gdGhlIHBhdGgKLSAgICAgKiBAcGFyYW0gcmlnaHQgIFRoZSByaWdodCBzaWRlIG9mIGEgcmVjdGFuZ2xlIHRvIGFkZCB0byB0aGUgcGF0aAotICAgICAqIEBwYXJhbSBib3R0b20gVGhlIGJvdHRvbSBvZiBhIHJlY3RhbmdsZSB0byBhZGQgdG8gdGhlIHBhdGgKLSAgICAgKiBAcGFyYW0gZGlyICAgIFRoZSBkaXJlY3Rpb24gdG8gd2luZCB0aGUgcmVjdGFuZ2xlJ3MgY29udG91cgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBhZGRSZWN0KGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXIpIHsKLSAgICAgICAgbW92ZVRvKGxlZnQsIHRvcCk7Ci0KLSAgICAgICAgRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGdldERpcmVjdGlvbihkaXIpOwotCi0gICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICBjYXNlIENXOgotICAgICAgICAgICAgICAgIGxpbmVUbyhyaWdodCwgdG9wKTsKLSAgICAgICAgICAgICAgICBsaW5lVG8ocmlnaHQsIGJvdHRvbSk7Ci0gICAgICAgICAgICAgICAgbGluZVRvKGxlZnQsIGJvdHRvbSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENDVzoKLSAgICAgICAgICAgICAgICBsaW5lVG8obGVmdCwgYm90dG9tKTsKLSAgICAgICAgICAgICAgICBsaW5lVG8ocmlnaHQsIGJvdHRvbSk7Ci0gICAgICAgICAgICAgICAgbGluZVRvKHJpZ2h0LCB0b3ApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2xvc2UoKTsKLQotICAgICAgICByZXNldExhc3RQb2ludEZyb21QYXRoKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT2Zmc2V0IHRoZSBwYXRoIGJ5IChkeCxkeSksIHJldHVybmluZyB0cnVlIG9uIHN1Y2Nlc3MKLSAgICAgKgotICAgICAqIEBwYXJhbSBkeCAgVGhlIGFtb3VudCBpbiB0aGUgWCBkaXJlY3Rpb24gdG8gb2Zmc2V0IHRoZSBlbnRpcmUgcGF0aAotICAgICAqIEBwYXJhbSBkeSAgVGhlIGFtb3VudCBpbiB0aGUgWSBkaXJlY3Rpb24gdG8gb2Zmc2V0IHRoZSBlbnRpcmUgcGF0aAotICAgICAqIEBwYXJhbSBkc3QgVGhlIHRyYW5zbGF0ZWQgcGF0aCBpcyB3cml0dGVuIGhlcmUuIElmIHRoaXMgaXMgbnVsbCwgdGhlbgotICAgICAqICAgICAgICAgICAgdGhlIG9yaWdpbmFsIHBhdGggaXMgbW9kaWZpZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgb2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSwgUGF0aF9EZWxlZ2F0ZSBkc3QpIHsKLSAgICAgICAgR2VuZXJhbFBhdGggbmV3UGF0aCA9IG5ldyBHZW5lcmFsUGF0aCgpOwotCi0gICAgICAgIFBhdGhJdGVyYXRvciBpdGVyYXRvciA9IG1QYXRoLmdldFBhdGhJdGVyYXRvcihuZXcgQWZmaW5lVHJhbnNmb3JtKDAsIDAsIGR4LCAwLCAwLCBkeSkpOwotCi0gICAgICAgIG5ld1BhdGguYXBwZW5kKGl0ZXJhdG9yLCBmYWxzZSAvKmNvbm5lY3QqLyk7Ci0KLSAgICAgICAgaWYgKGRzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBkc3QubVBhdGggPSBuZXdQYXRoOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVBhdGggPSBuZXdQYXRoOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJhbnNmb3JtIHRoZSBwb2ludHMgaW4gdGhpcyBwYXRoIGJ5IG1hdHJpeCwgYW5kIHdyaXRlIHRoZSBhbnN3ZXIKLSAgICAgKiBpbnRvIGRzdC4gSWYgZHN0IGlzIG51bGwsIHRoZW4gdGhlIHRoZSBvcmlnaW5hbCBwYXRoIGlzIG1vZGlmaWVkLgotICAgICAqCi0gICAgICogQHBhcmFtIG1hdHJpeCBUaGUgbWF0cml4IHRvIGFwcGx5IHRvIHRoZSBwYXRoCi0gICAgICogQHBhcmFtIGRzdCAgICBUaGUgdHJhbnNmb3JtZWQgcGF0aCBpcyB3cml0dGVuIGhlcmUuIElmIGRzdCBpcyBudWxsLAotICAgICAqICAgICAgICAgICAgICAgdGhlbiB0aGUgdGhlIG9yaWdpbmFsIHBhdGggaXMgbW9kaWZpZWQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB0cmFuc2Zvcm0oTWF0cml4X0RlbGVnYXRlIG1hdHJpeCwgUGF0aF9EZWxlZ2F0ZSBkc3QpIHsKLSAgICAgICAgaWYgKG1hdHJpeC5oYXNQZXJzcGVjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBhc3NlcnQgZmFsc2U7Ci0gICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfTUFUUklYX0FGRklORSwKLSAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuUGF0aCN0cmFuc2Zvcm0oKSBvbmx5ICIgKwotICAgICAgICAgICAgICAgICAgICAic3VwcG9ydHMgYWZmaW5lIHRyYW5zZm9ybWF0aW9ucy4iLCBudWxsLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdlbmVyYWxQYXRoIG5ld1BhdGggPSBuZXcgR2VuZXJhbFBhdGgoKTsKLQotICAgICAgICBQYXRoSXRlcmF0b3IgaXRlcmF0b3IgPSBtUGF0aC5nZXRQYXRoSXRlcmF0b3IobWF0cml4LmdldEFmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgICAgICBuZXdQYXRoLmFwcGVuZChpdGVyYXRvciwgZmFsc2UgLypjb25uZWN0Ki8pOwotCi0gICAgICAgIGlmIChkc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgZHN0Lm1QYXRoID0gbmV3UGF0aDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1QYXRoID0gbmV3UGF0aDsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUGl4ZWxYb3JYZmVybW9kZV9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9QaXhlbFhvclhmZXJtb2RlX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYjA0NGIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9QaXhlbFhvclhmZXJtb2RlX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBqYXZhLmF3dC5Db21wb3NpdGU7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLlBpeGVsWG9yWGZlcm1vZGUKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBQaXhlbFhvclhmZXJtb2RlIGhhdmUgYmVlbgotICogcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIFBpeGVsWG9yWGZlcm1vZGUgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIFhmZXJtb2RlX0RlbGVnYXRlfSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhCi0gKiB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfSwgYXMgYWxsIHRoZSBQYXRoRWZmZWN0IGNsYXNzZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuYWdlciBvd25lZCBieQotICoge0BsaW5rIFhmZXJtb2RlX0RlbGVnYXRlfS4KLSAqCi0gKiBAc2VlIFhmZXJtb2RlX0RlbGVnYXRlCi0gKi8KLXB1YmxpYyBjbGFzcyBQaXhlbFhvclhmZXJtb2RlX0RlbGVnYXRlIGV4dGVuZHMgWGZlcm1vZGVfRGVsZWdhdGUgewotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29tcG9zaXRlIGdldENvbXBvc2l0ZShpbnQgYWxwaGEpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gIlBpeGVsIFhPUiBYZmVybW9kZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTGF5b3V0IFByZXZpZXcgbW9kZS4iOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUoaW50IG9wQ29sb3IpIHsKLSAgICAgICAgUGl4ZWxYb3JYZmVybW9kZV9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBQaXhlbFhvclhmZXJtb2RlX0RlbGVnYXRlKCk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZkNvbG9yRmlsdGVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1BvcnRlckR1ZmZDb2xvckZpbHRlcl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDVkYmFhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZkNvbG9yRmlsdGVyX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmZDb2xvckZpbHRlcgotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFBvcnRlckR1ZmZDb2xvckZpbHRlciBoYXZlCi0gKiBiZWVuIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBQb3J0ZXJEdWZmQ29sb3JGaWx0ZXIgY2xhc3MuCi0gKgotICogQmVjYXVzZSB0aGlzIGV4dGVuZHMge0BsaW5rIENvbG9yRmlsdGVyX0RlbGVnYXRlfSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhCi0gKiB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfSwgYXMgYWxsIHRoZSBTaGFkZXIgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyCi0gKiBvd25lZCBieSB7QGxpbmsgQ29sb3JGaWx0ZXJfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgQ29sb3JGaWx0ZXJfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQb3J0ZXJEdWZmQ29sb3JGaWx0ZXJfRGVsZWdhdGUgZXh0ZW5kcyBDb2xvckZpbHRlcl9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gIlBvcnRlckR1ZmYgQ29sb3IgRmlsdGVycyBhcmUgbm90IHN1cHBvcnRlZC4iOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVfQ3JlYXRlUG9ydGVyRHVmZkZpbHRlcihpbnQgc3JjQ29sb3IsIGludCBwb3J0ZXJEdWZmTW9kZSkgewotICAgICAgICBQb3J0ZXJEdWZmQ29sb3JGaWx0ZXJfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgUG9ydGVyRHVmZkNvbG9yRmlsdGVyX0RlbGVnYXRlKCk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuQ3JlYXRlUG9ydGVyRHVmZkZpbHRlcihpbnQgbmF0aXZlRmlsdGVyLCBpbnQgc3JjQ29sb3IsCi0gICAgICAgICAgICBpbnQgcG9ydGVyRHVmZk1vZGUpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmWGZlcm1vZGVfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUG9ydGVyRHVmZlhmZXJtb2RlX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMDFjMWEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9Qb3J0ZXJEdWZmWGZlcm1vZGVfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGphdmEuYXd0LkFscGhhQ29tcG9zaXRlOwotaW1wb3J0IGphdmEuYXd0LkNvbXBvc2l0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZlhmZXJtb2RlCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgUG9ydGVyRHVmZlhmZXJtb2RlIGhhdmUgYmVlbgotICogcmVwbGFjZWQgYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIFBvcnRlckR1ZmZYZmVybW9kZSBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIHRoaXMgZXh0ZW5kcyB7QGxpbmsgWGZlcm1vZGVfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEKLSAqIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LCBhcyBhbGwgdGhlIFBhdGhFZmZlY3QgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyIG93bmVkIGJ5Ci0gKiB7QGxpbmsgWGZlcm1vZGVfRGVsZWdhdGV9LgotICoKLSAqLwotcHVibGljIGNsYXNzIFBvcnRlckR1ZmZYZmVybW9kZV9EZWxlZ2F0ZSBleHRlbmRzIFhmZXJtb2RlX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0KLSAgICBwcml2YXRlIGZpbmFsIGludCBtTW9kZTsKLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIHB1YmxpYyBQb3J0ZXJEdWZmLk1vZGUgZ2V0TW9kZSgpIHsKLSAgICAgICAgcmV0dXJuIGdldFBvcnRlckR1ZmZNb2RlKG1Nb2RlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29tcG9zaXRlIGdldENvbXBvc2l0ZShpbnQgYWxwaGEpIHsKLSAgICAgICAgcmV0dXJuIGdldENvbXBvc2l0ZShnZXRQb3J0ZXJEdWZmTW9kZShtTW9kZSksIGFscGhhKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTdXBwb3J0TWVzc2FnZSgpIHsKLSAgICAgICAgLy8gbm8gbWVzc2FnZSBzaW5jZSBpc1N1cHBvcnRlZCByZXR1cm5zIHRydWU7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgUG9ydGVyRHVmZi5Nb2RlIGdldFBvcnRlckR1ZmZNb2RlKGludCBtb2RlKSB7Ci0gICAgICAgIGZvciAoUG9ydGVyRHVmZi5Nb2RlIG0gOiBQb3J0ZXJEdWZmLk1vZGUudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChtLm5hdGl2ZUludCA9PSBtb2RlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19CUk9LRU4sCi0gICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiVW5rbm93biBQb3J0ZXJEdWZmLk1vZGU6ICVkIiwgbW9kZSksIG51bGwgLypkYXRhKi8pOwotICAgICAgICBhc3NlcnQgZmFsc2U7Ci0gICAgICAgIHJldHVybiBQb3J0ZXJEdWZmLk1vZGUuU1JDX09WRVI7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBDb21wb3NpdGUgZ2V0Q29tcG9zaXRlKFBvcnRlckR1ZmYuTW9kZSBtb2RlLCBpbnQgYWxwaGEpIHsKLSAgICAgICAgZmxvYXQgZmFscGhhID0gYWxwaGEgIT0gMHhGRiA/IChmbG9hdClhbHBoYSAvIDI1NS5mIDogMS5mOwotICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICAgICAgICAgIGNhc2UgQ0xFQVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFscGhhQ29tcG9zaXRlLmdldEluc3RhbmNlKEFscGhhQ29tcG9zaXRlLkNMRUFSLCBmYWxwaGEpOwotICAgICAgICAgICAgY2FzZSBEQVJLRU46Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERTVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gQWxwaGFDb21wb3NpdGUuZ2V0SW5zdGFuY2UoQWxwaGFDb21wb3NpdGUuRFNULCBmYWxwaGEpOwotICAgICAgICAgICAgY2FzZSBEU1RfQVRPUDoKLSAgICAgICAgICAgICAgICByZXR1cm4gQWxwaGFDb21wb3NpdGUuZ2V0SW5zdGFuY2UoQWxwaGFDb21wb3NpdGUuRFNUX0FUT1AsIGZhbHBoYSk7Ci0gICAgICAgICAgICBjYXNlIERTVF9JTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gQWxwaGFDb21wb3NpdGUuZ2V0SW5zdGFuY2UoQWxwaGFDb21wb3NpdGUuRFNUX0lOLCBmYWxwaGEpOwotICAgICAgICAgICAgY2FzZSBEU1RfT1VUOgotICAgICAgICAgICAgICAgIHJldHVybiBBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZShBbHBoYUNvbXBvc2l0ZS5EU1RfT1VULCBmYWxwaGEpOwotICAgICAgICAgICAgY2FzZSBEU1RfT1ZFUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gQWxwaGFDb21wb3NpdGUuZ2V0SW5zdGFuY2UoQWxwaGFDb21wb3NpdGUuRFNUX09WRVIsIGZhbHBoYSk7Ci0gICAgICAgICAgICBjYXNlIExJR0hURU46Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE1VTFRJUExZOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTQ1JFRU46Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNSQzoKLSAgICAgICAgICAgICAgICByZXR1cm4gQWxwaGFDb21wb3NpdGUuZ2V0SW5zdGFuY2UoQWxwaGFDb21wb3NpdGUuU1JDLCBmYWxwaGEpOwotICAgICAgICAgICAgY2FzZSBTUkNfQVRPUDoKLSAgICAgICAgICAgICAgICByZXR1cm4gQWxwaGFDb21wb3NpdGUuZ2V0SW5zdGFuY2UoQWxwaGFDb21wb3NpdGUuU1JDX0FUT1AsIGZhbHBoYSk7Ci0gICAgICAgICAgICBjYXNlIFNSQ19JTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gQWxwaGFDb21wb3NpdGUuZ2V0SW5zdGFuY2UoQWxwaGFDb21wb3NpdGUuU1JDX0lOLCBmYWxwaGEpOwotICAgICAgICAgICAgY2FzZSBTUkNfT1VUOgotICAgICAgICAgICAgICAgIHJldHVybiBBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZShBbHBoYUNvbXBvc2l0ZS5TUkNfT1VULCBmYWxwaGEpOwotICAgICAgICAgICAgY2FzZSBTUkNfT1ZFUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gQWxwaGFDb21wb3NpdGUuZ2V0SW5zdGFuY2UoQWxwaGFDb21wb3NpdGUuU1JDX09WRVIsIGZhbHBoYSk7Ci0gICAgICAgICAgICBjYXNlIFhPUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gQWxwaGFDb21wb3NpdGUuZ2V0SW5zdGFuY2UoQWxwaGFDb21wb3NpdGUuWE9SLCBmYWxwaGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJVbnN1cHBvcnRlZCBQb3J0ZXJEdWZmIE1vZGU6ICVzIiwgbW9kZS5uYW1lKCkpLAotICAgICAgICAgICAgICAgIG51bGwsIG51bGwgLypkYXRhKi8pOwotCi0gICAgICAgIHJldHVybiBBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZShBbHBoYUNvbXBvc2l0ZS5TUkNfT1ZFUiwgZmFscGhhKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ3JlYXRlWGZlcm1vZGUoaW50IG1vZGUpIHsKLSAgICAgICAgUG9ydGVyRHVmZlhmZXJtb2RlX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IFBvcnRlckR1ZmZYZmVybW9kZV9EZWxlZ2F0ZShtb2RlKTsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHJpdmF0ZSBQb3J0ZXJEdWZmWGZlcm1vZGVfRGVsZWdhdGUoaW50IG1vZGUpIHsKLSAgICAgICAgbU1vZGUgPSBtb2RlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUmFkaWFsR3JhZGllbnRfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUmFkaWFsR3JhZGllbnRfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZlNDVmYS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1JhZGlhbEdyYWRpZW50X0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlNoYWRlci5UaWxlTW9kZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQuZ3JhcGhpY3MuUmFkaWFsR3JhZGllbnQKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBSYWRpYWxHcmFkaWVudCBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBSYWRpYWxHcmFkaWVudCBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIHRoaXMgZXh0ZW5kcyB7QGxpbmsgU2hhZGVyX0RlbGVnYXRlfSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LAotICogYXMgYWxsIHRoZSBTaGFkZXIgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyIG93bmVkIGJ5IHtAbGluayBTaGFkZXJfRGVsZWdhdGV9LgotICoKLSAqIEBzZWUgU2hhZGVyX0RlbGVnYXRlCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUmFkaWFsR3JhZGllbnRfRGVsZWdhdGUgZXh0ZW5kcyBHcmFkaWVudF9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotICAgIHByaXZhdGUgamF2YS5hd3QuUGFpbnQgbUphdmFQYWludDsKLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBqYXZhLmF3dC5QYWludCBnZXRKYXZhUGFpbnQoKSB7Ci0gICAgICAgIHJldHVybiBtSmF2YVBhaW50OwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUxKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1cywKLSAgICAgICAgICAgIGludCBjb2xvcnNbXSwgZmxvYXQgcG9zaXRpb25zW10sIGludCB0aWxlTW9kZSkgewotICAgICAgICBSYWRpYWxHcmFkaWVudF9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBSYWRpYWxHcmFkaWVudF9EZWxlZ2F0ZSh4LCB5LCByYWRpdXMsCi0gICAgICAgICAgICAgICAgY29sb3JzLCBwb3NpdGlvbnMsIFNoYWRlcl9EZWxlZ2F0ZS5nZXRUaWxlTW9kZSh0aWxlTW9kZSkpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ3JlYXRlMihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCByYWRpdXMsCi0gICAgICAgICAgICBpbnQgY29sb3IwLCBpbnQgY29sb3IxLCBpbnQgdGlsZU1vZGUpIHsKLSAgICAgICAgcmV0dXJuIG5hdGl2ZUNyZWF0ZTEoeCwgeSwgcmFkaXVzLCBuZXcgaW50W10geyBjb2xvcjAsIGNvbG9yMSB9LCBudWxsIC8qcG9zaXRpb25zKi8sCi0gICAgICAgICAgICAgICAgdGlsZU1vZGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlUG9zdENyZWF0ZTEoaW50IG5hdGl2ZV9zaGFkZXIsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1cywKLSAgICAgICAgICAgIGludCBjb2xvcnNbXSwgZmxvYXQgcG9zaXRpb25zW10sIGludCB0aWxlTW9kZSkgewotICAgICAgICAvLyBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVQb3N0Q3JlYXRlMihpbnQgbmF0aXZlX3NoYWRlciwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgcmFkaXVzLAotICAgICAgICAgICAgaW50IGNvbG9yMCwgaW50IGNvbG9yMSwgaW50IHRpbGVNb2RlKSB7Ci0gICAgICAgIC8vIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGEgc2hhZGVyIHRoYXQgZHJhd3MgYSByYWRpYWwgZ3JhZGllbnQgZ2l2ZW4gdGhlIGNlbnRlciBhbmQgcmFkaXVzLgotICAgICAqCi0gICAgICogQHBhcmFtIHggVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSByYWRpdXMKLSAgICAgKiBAcGFyYW0geSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIHJhZGl1cwotICAgICAqIEBwYXJhbSByYWRpdXMgTXVzdCBiZSBwb3NpdGl2ZS4gVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlIGZvciB0aGlzCi0gICAgICogICAgICAgICAgICBncmFkaWVudAotICAgICAqIEBwYXJhbSBjb2xvcnMgVGhlIGNvbG9ycyB0byBiZSBkaXN0cmlidXRlZCBiZXR3ZWVuIHRoZSBjZW50ZXIgYW5kIGVkZ2Ugb2YKLSAgICAgKiAgICAgICAgICAgIHRoZSBjaXJjbGUKLSAgICAgKiBAcGFyYW0gcG9zaXRpb25zIE1heSBiZSBOVUxMLiBUaGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgZWFjaCBjb3JyZXNwb25kaW5nCi0gICAgICogICAgICAgICAgICBjb2xvciBpbiB0aGUgY29sb3JzIGFycmF5LiBJZiB0aGlzIGlzIE5VTEwsIHRoZSB0aGUgY29sb3JzIGFyZQotICAgICAqICAgICAgICAgICAgZGlzdHJpYnV0ZWQgZXZlbmx5IGJldHdlZW4gdGhlIGNlbnRlciBhbmQgZWRnZSBvZiB0aGUgY2lyY2xlLgotICAgICAqIEBwYXJhbSB0aWxlIFRoZSBTaGFkZXIgdGlsaW5nIG1vZGUKLSAgICAgKi8KLSAgICBwcml2YXRlIFJhZGlhbEdyYWRpZW50X0RlbGVnYXRlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1cywgaW50IGNvbG9yc1tdLCBmbG9hdCBwb3NpdGlvbnNbXSwKLSAgICAgICAgICAgIFRpbGVNb2RlIHRpbGUpIHsKLSAgICAgICAgc3VwZXIoY29sb3JzLCBwb3NpdGlvbnMpOwotICAgICAgICBtSmF2YVBhaW50ID0gbmV3IFJhZGlhbEdyYWRpZW50UGFpbnQoeCwgeSwgcmFkaXVzLCBtQ29sb3JzLCBtUG9zaXRpb25zLCB0aWxlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIFJhZGlhbEdyYWRpZW50UGFpbnQgZXh0ZW5kcyBHcmFkaWVudFBhaW50IHsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIGZsb2F0IG1YOwotICAgICAgICBwcml2YXRlIGZpbmFsIGZsb2F0IG1ZOwotICAgICAgICBwcml2YXRlIGZpbmFsIGZsb2F0IG1SYWRpdXM7Ci0KLSAgICAgICAgcHVibGljIFJhZGlhbEdyYWRpZW50UGFpbnQoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgcmFkaXVzLAotICAgICAgICAgICAgICAgIGludFtdIGNvbG9ycywgZmxvYXRbXSBwb3NpdGlvbnMsIFRpbGVNb2RlIG1vZGUpIHsKLSAgICAgICAgICAgIHN1cGVyKGNvbG9ycywgcG9zaXRpb25zLCBtb2RlKTsKLSAgICAgICAgICAgIG1YID0geDsKLSAgICAgICAgICAgIG1ZID0geTsKLSAgICAgICAgICAgIG1SYWRpdXMgPSByYWRpdXM7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGphdmEuYXd0LlBhaW50Q29udGV4dCBjcmVhdGVDb250ZXh0KAotICAgICAgICAgICAgICAgIGphdmEuYXd0LmltYWdlLkNvbG9yTW9kZWwgICAgIGNvbG9yTW9kZWwsCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuUmVjdGFuZ2xlICAgICAgICAgICAgZGV2aWNlQm91bmRzLAotICAgICAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uUmVjdGFuZ2xlMkQgICAgIHVzZXJCb3VuZHMsCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0geGZvcm0sCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuUmVuZGVyaW5nSGludHMgICAgICAgaGludHMpIHsKLSAgICAgICAgICAgIHByZWNvbXB1dGVHcmFkaWVudENvbG9ycygpOwotCi0gICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBjYW52YXNNYXRyaXg7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNhbnZhc01hdHJpeCA9IHhmb3JtLmNyZWF0ZUludmVyc2UoKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGphdmEuYXd0Lmdlb20uTm9uaW52ZXJ0aWJsZVRyYW5zZm9ybUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX01BVFJJWF9JTlZFUlNFLAotICAgICAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBpbnZlcnNlIG1hdHJpeCBpbiBSYWRpYWxHcmFkaWVudCIsIGUsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgIGNhbnZhc01hdHJpeCA9IG5ldyBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBsb2NhbE1hdHJpeCA9IGdldExvY2FsTWF0cml4KCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGxvY2FsTWF0cml4ID0gbG9jYWxNYXRyaXguY3JlYXRlSW52ZXJzZSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5hd3QuZ2VvbS5Ob25pbnZlcnRpYmxlVHJhbnNmb3JtRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfTUFUUklYX0lOVkVSU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGludmVyc2UgbWF0cml4IGluIFJhZGlhbEdyYWRpZW50IiwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgbG9jYWxNYXRyaXggPSBuZXcgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWRpYWxHcmFkaWVudFBhaW50Q29udGV4dChjYW52YXNNYXRyaXgsIGxvY2FsTWF0cml4LCBjb2xvck1vZGVsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgY2xhc3MgUmFkaWFsR3JhZGllbnRQYWludENvbnRleHQgaW1wbGVtZW50cyBqYXZhLmF3dC5QYWludENvbnRleHQgewotCi0gICAgICAgICAgICBwcml2YXRlIGZpbmFsIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIG1DYW52YXNNYXRyaXg7Ci0gICAgICAgICAgICBwcml2YXRlIGZpbmFsIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIG1Mb2NhbE1hdHJpeDsKLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgamF2YS5hd3QuaW1hZ2UuQ29sb3JNb2RlbCBtQ29sb3JNb2RlbDsKLQotICAgICAgICAgICAgcHVibGljIFJhZGlhbEdyYWRpZW50UGFpbnRDb250ZXh0KAotICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBjYW52YXNNYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGxvY2FsTWF0cml4LAotICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsIGNvbG9yTW9kZWwpIHsKLSAgICAgICAgICAgICAgICBtQ2FudmFzTWF0cml4ID0gY2FudmFzTWF0cml4OwotICAgICAgICAgICAgICAgIG1Mb2NhbE1hdHJpeCA9IGxvY2FsTWF0cml4OwotICAgICAgICAgICAgICAgIG1Db2xvck1vZGVsID0gY29sb3JNb2RlbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsIGdldENvbG9yTW9kZWwoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1Db2xvck1vZGVsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBqYXZhLmF3dC5pbWFnZS5SYXN0ZXIgZ2V0UmFzdGVyKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSB7Ci0gICAgICAgICAgICAgICAgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSBpbWFnZSA9IG5ldyBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlKHcsIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0IpOwotCi0gICAgICAgICAgICAgICAgaW50W10gZGF0YSA9IG5ldyBpbnRbdypoXTsKLQotICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgZGlzdGFuY2UgZnJvbSBlYWNoIHBvaW50IHRvIHRoZSBjZW50ZXIsIGFuZCBmaWd1cmUgb3V0IHRoZSBkaXN0YW5jZSBmcm9tCi0gICAgICAgICAgICAgICAgLy8gaXQuCi0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICBmbG9hdFtdIHB0MSA9IG5ldyBmbG9hdFsyXTsKLSAgICAgICAgICAgICAgICBmbG9hdFtdIHB0MiA9IG5ldyBmbG9hdFsyXTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpeSA9IDAgOyBpeSA8IGggOyBpeSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGl4ID0gMCA7IGl4IDwgdyA7IGl4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSB0aGUgY2FudmFzIHRyYW5zZm9ybQotICAgICAgICAgICAgICAgICAgICAgICAgcHQxWzBdID0geCArIGl4OwotICAgICAgICAgICAgICAgICAgICAgICAgcHQxWzFdID0geSArIGl5OwotICAgICAgICAgICAgICAgICAgICAgICAgbUNhbnZhc01hdHJpeC50cmFuc2Zvcm0ocHQxLCAwLCBwdDIsIDAsIDEpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgdGhlIGxvY2FsIG1hdHJpeAotICAgICAgICAgICAgICAgICAgICAgICAgcHQxWzBdID0gcHQyWzBdIC0gbVg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdDFbMV0gPSBwdDJbMV0gLSBtWTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Mb2NhbE1hdHJpeC50cmFuc2Zvcm0ocHQxLCAwLCBwdDIsIDAsIDEpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBfeCA9IHB0MlswXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IF95ID0gcHQyWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGlzdGFuY2UgPSAoZmxvYXQpIE1hdGguc3FydChfeCAqIF94ICsgX3kgKiBfeSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaW5kZXgrK10gPSBnZXRHcmFkaWVudENvbG9yKGRpc3RhbmNlIC8gbVJhZGl1cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpbWFnZS5zZXRSR0IoMCAvKnN0YXJ0WCovLCAwIC8qc3RhcnRZKi8sIHcsIGgsIGRhdGEsIDAgLypvZmZzZXQqLywgdyAvKnNjYW5zaXplKi8pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlLmdldFJhc3RlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUmFzdGVyaXplcl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9SYXN0ZXJpemVyX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MTJiNmIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9SYXN0ZXJpemVyX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLlJhc3Rlcml6ZXIKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBSYXN0ZXJpemVyIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIFJhc3Rlcml6ZXIgY2xhc3MuCi0gKgotICogVGhpcyBhbHNvIHNlcnZlIGFzIGEgYmFzZSBjbGFzcyBmb3IgYWxsIFJhc3Rlcml6ZXIgZGVsZWdhdGUgY2xhc3Nlcy4KLSAqCi0gKiBAc2VlIERlbGVnYXRlTWFuYWdlcgotICoKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFJhc3Rlcml6ZXJfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBtYW5hZ2VyIC0tLS0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIERlbGVnYXRlTWFuYWdlcjxSYXN0ZXJpemVyX0RlbGVnYXRlPiBzTWFuYWdlciA9Ci0gICAgICAgICAgICBuZXcgRGVsZWdhdGVNYW5hZ2VyPFJhc3Rlcml6ZXJfRGVsZWdhdGU+KFJhc3Rlcml6ZXJfRGVsZWdhdGUuY2xhc3MpOwotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBoZWxwZXIgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHVibGljIHN0YXRpYyBSYXN0ZXJpemVyX0RlbGVnYXRlIGdldERlbGVnYXRlKGludCBuYXRpdmVTaGFkZXIpIHsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZVNoYWRlcik7Ci0gICAgfQotCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNTdXBwb3J0ZWQoKTsKLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCk7Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIGZpbmFsaXplcihpbnQgbmF0aXZlX2luc3RhbmNlKSB7Ci0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IobmF0aXZlX2luc3RhbmNlKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9SZWdpb25fRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvUmVnaW9uX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMzFiOGYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9SZWdpb25fRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwotCi1pbXBvcnQgamF2YS5hd3QuUmVjdGFuZ2xlOwotaW1wb3J0IGphdmEuYXd0LlNoYXBlOwotaW1wb3J0IGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtOwotaW1wb3J0IGphdmEuYXd0Lmdlb20uQXJlYTsKLWltcG9ydCBqYXZhLmF3dC5nZW9tLlJlY3RhbmdsZTJEOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5SZWdpb24KLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBSZWdpb24gaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgUmVnaW9uIGNsYXNzLgotICoKLSAqIFRoaXMgYWxzbyBzZXJ2ZSBhcyBhIGJhc2UgY2xhc3MgZm9yIGFsbCBSZWdpb24gZGVsZWdhdGUgY2xhc3Nlcy4KLSAqCi0gKiBAc2VlIERlbGVnYXRlTWFuYWdlcgotICoKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lvbl9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIG1hbmFnZXIgLS0tLQotICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPFJlZ2lvbl9EZWxlZ2F0ZT4gc01hbmFnZXIgPQotICAgICAgICAgICAgbmV3IERlbGVnYXRlTWFuYWdlcjxSZWdpb25fRGVsZWdhdGU+KFJlZ2lvbl9EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGhlbHBlciBkYXRhIC0tLS0KLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgZGF0YSAtLS0tCi0gICAgcHJpdmF0ZSBBcmVhIG1BcmVhID0gbmV3IEFyZWEoKTsKLQotICAgIC8vIC0tLS0gUHVibGljIEhlbHBlciBtZXRob2RzIC0tLS0KLQotICAgIHB1YmxpYyBzdGF0aWMgUmVnaW9uX0RlbGVnYXRlIGdldERlbGVnYXRlKGludCBuYXRpdmVTaGFkZXIpIHsKLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZVNoYWRlcik7Ci0gICAgfQotCi0gICAgcHVibGljIEFyZWEgZ2V0SmF2YUFyZWEoKSB7Ci0gICAgICAgIHJldHVybiBtQXJlYTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb21iaW5lcyB0d28ge0BsaW5rIFNoYXBlfSBpbnRvIGFub3RoZXIgb25lIChhY3R1YWxseSBhbiB7QGxpbmsgQXJlYX0pLCBhY2NvcmRpbmcKLSAgICAgKiB0byB0aGUgZ2l2ZW4ge0BsaW5rIFJlZ2lvbi5PcH0uCi0gICAgICoKLSAgICAgKiBJZiB0aGUgT3AgaXMgbm90IG9uZSB0aGF0IGNvbWJpbmVzIHR3byBzaGFwZXMsIHRoZW4gdGhpcyByZXR1cm4gbnVsbAotICAgICAqCi0gICAgICogQHBhcmFtIHNoYXBlMSB0aGUgZmlydCBzaGFwZSB0byBjb21iaW5lIHdoaWNoIGNhbiBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gb3JpZ2luYWwgY2xpcC4KLSAgICAgKiBAcGFyYW0gc2hhcGUyIHRoZSAybmQgc2hhcGUgdG8gY29tYmluZQotICAgICAqIEBwYXJhbSByZWdpb25PcCB0aGUgb3BlcmFuZGUgZm9yIHRoZSBjb21iaW5lCi0gICAgICogQHJldHVybiBhIG5ldyBhcmVhIG9yIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBBcmVhIGNvbWJpbmVTaGFwZXMoU2hhcGUgc2hhcGUxLCBTaGFwZSBzaGFwZTIsIGludCByZWdpb25PcCkgewotICAgICAgICBpZiAocmVnaW9uT3AgPT0gUmVnaW9uLk9wLkRJRkZFUkVOQ0UubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAvLyBpZiBzaGFwZTEgaXMgbnVsbCAoZW1wdHkpLCB0aGVuIHRoZSByZXN1bHQgaXMgbnVsbC4KLSAgICAgICAgICAgIGlmIChzaGFwZTEgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyByZXN1bHQgaXMgYWx3YXlzIGEgbmV3IGFyZWEuCi0gICAgICAgICAgICBBcmVhIHJlc3VsdCA9IG5ldyBBcmVhKHNoYXBlMSk7Ci0gICAgICAgICAgICByZXN1bHQuc3VidHJhY3Qoc2hhcGUyIGluc3RhbmNlb2YgQXJlYSA/IChBcmVhKSBzaGFwZTIgOiBuZXcgQXJlYShzaGFwZTIpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgfSBlbHNlIGlmIChyZWdpb25PcCA9PSBSZWdpb24uT3AuSU5URVJTRUNULm5hdGl2ZUludCkgewotICAgICAgICAgICAgLy8gaWYgc2hhcGUxIGlzIG51bGwsIHRoZW4gdGhlIHJlc3VsdCBpcyBzaW1wbHkgc2hhcGUyLgotICAgICAgICAgICAgaWYgKHNoYXBlMSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcmVhKHNoYXBlMik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHJlc3VsdCBpcyBhbHdheXMgYSBuZXcgYXJlYS4KLSAgICAgICAgICAgIEFyZWEgcmVzdWx0ID0gbmV3IEFyZWEoc2hhcGUxKTsKLSAgICAgICAgICAgIHJlc3VsdC5pbnRlcnNlY3Qoc2hhcGUyIGluc3RhbmNlb2YgQXJlYSA/IChBcmVhKSBzaGFwZTIgOiBuZXcgQXJlYShzaGFwZTIpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgfSBlbHNlIGlmIChyZWdpb25PcCA9PSBSZWdpb24uT3AuVU5JT04ubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAvLyBpZiBzaGFwZTEgaXMgbnVsbCwgdGhlbiB0aGUgcmVzdWx0IGlzIHNpbXBseSBzaGFwZTIuCi0gICAgICAgICAgICBpZiAoc2hhcGUxID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFyZWEoc2hhcGUyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gcmVzdWx0IGlzIGFsd2F5cyBhIG5ldyBhcmVhLgotICAgICAgICAgICAgQXJlYSByZXN1bHQgPSBuZXcgQXJlYShzaGFwZTEpOwotICAgICAgICAgICAgcmVzdWx0LmFkZChzaGFwZTIgaW5zdGFuY2VvZiBBcmVhID8gKEFyZWEpIHNoYXBlMiA6IG5ldyBBcmVhKHNoYXBlMikpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICB9IGVsc2UgaWYgKHJlZ2lvbk9wID09IFJlZ2lvbi5PcC5YT1IubmF0aXZlSW50KSB7Ci0gICAgICAgICAgICAvLyBpZiBzaGFwZTEgaXMgbnVsbCwgdGhlbiB0aGUgcmVzdWx0IGlzIHNpbXBseSBzaGFwZTIKLSAgICAgICAgICAgIGlmIChzaGFwZTEgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJlYShzaGFwZTIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyByZXN1bHQgaXMgYWx3YXlzIGEgbmV3IGFyZWEuCi0gICAgICAgICAgICBBcmVhIHJlc3VsdCA9IG5ldyBBcmVhKHNoYXBlMSk7Ci0gICAgICAgICAgICByZXN1bHQuZXhjbHVzaXZlT3Ioc2hhcGUyIGluc3RhbmNlb2YgQXJlYSA/IChBcmVhKSBzaGFwZTIgOiBuZXcgQXJlYShzaGFwZTIpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgfSBlbHNlIGlmIChyZWdpb25PcCA9PSBSZWdpb24uT3AuUkVWRVJTRV9ESUZGRVJFTkNFLm5hdGl2ZUludCkgewotICAgICAgICAgICAgLy8gcmVzdWx0IGlzIGFsd2F5cyBhIG5ldyBhcmVhLgotICAgICAgICAgICAgQXJlYSByZXN1bHQgPSBuZXcgQXJlYShzaGFwZTIpOwotCi0gICAgICAgICAgICBpZiAoc2hhcGUxICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuc3VidHJhY3Qoc2hhcGUxIGluc3RhbmNlb2YgQXJlYSA/IChBcmVhKSBzaGFwZTEgOiBuZXcgQXJlYShzaGFwZTEpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gaXNFbXB0eShSZWdpb24gdGhpc1JlZ2lvbikgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUmVnaW9uLm1OYXRpdmVSZWdpb24pOwotICAgICAgICBpZiAocmVnaW9uRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVnaW9uRGVsZWdhdGUubUFyZWEuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGlzUmVjdChSZWdpb24gdGhpc1JlZ2lvbikgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUmVnaW9uLm1OYXRpdmVSZWdpb24pOwotICAgICAgICBpZiAocmVnaW9uRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVnaW9uRGVsZWdhdGUubUFyZWEuaXNSZWN0YW5ndWxhcigpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGlzQ29tcGxleChSZWdpb24gdGhpc1JlZ2lvbikgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUmVnaW9uLm1OYXRpdmVSZWdpb24pOwotICAgICAgICBpZiAocmVnaW9uRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVnaW9uRGVsZWdhdGUubUFyZWEuaXNTaW5ndWxhcigpID09IGZhbHNlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGNvbnRhaW5zKFJlZ2lvbiB0aGlzUmVnaW9uLCBpbnQgeCwgaW50IHkpIHsKLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHJlZ2lvbkRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1JlZ2lvbi5tTmF0aXZlUmVnaW9uKTsKLSAgICAgICAgaWYgKHJlZ2lvbkRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZWdpb25EZWxlZ2F0ZS5tQXJlYS5jb250YWlucyh4LCB5KTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBxdWlja0NvbnRhaW5zKFJlZ2lvbiB0aGlzUmVnaW9uLAotICAgICAgICAgICAgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUmVnaW9uLm1OYXRpdmVSZWdpb24pOwotICAgICAgICBpZiAocmVnaW9uRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlZ2lvbkRlbGVnYXRlLm1BcmVhLmlzUmVjdGFuZ3VsYXIoKSAmJgotICAgICAgICAgICAgICAgIHJlZ2lvbkRlbGVnYXRlLm1BcmVhLmNvbnRhaW5zKGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIHF1aWNrUmVqZWN0KFJlZ2lvbiB0aGlzUmVnaW9uLAotICAgICAgICAgICAgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUmVnaW9uLm1OYXRpdmVSZWdpb24pOwotICAgICAgICBpZiAocmVnaW9uRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlZ2lvbkRlbGVnYXRlLm1BcmVhLmlzRW1wdHkoKSB8fAotICAgICAgICAgICAgICAgIHJlZ2lvbkRlbGVnYXRlLm1BcmVhLmludGVyc2VjdHMobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCkgPT0gZmFsc2U7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gcXVpY2tSZWplY3QoUmVnaW9uIHRoaXNSZWdpb24sIFJlZ2lvbiByZ24pIHsKLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHJlZ2lvbkRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1JlZ2lvbi5tTmF0aXZlUmVnaW9uKTsKLSAgICAgICAgaWYgKHJlZ2lvbkRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSB0YXJnZXRSZWdpb25EZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKHJnbi5tTmF0aXZlUmVnaW9uKTsKLSAgICAgICAgaWYgKHRhcmdldFJlZ2lvbkRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZWdpb25EZWxlZ2F0ZS5tQXJlYS5pc0VtcHR5KCkgfHwKLSAgICAgICAgICAgICAgICByZWdpb25EZWxlZ2F0ZS5tQXJlYS5nZXRCb3VuZHMoKS5pbnRlcnNlY3RzKAotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UmVnaW9uRGVsZWdhdGUubUFyZWEuZ2V0Qm91bmRzKCkpID09IGZhbHNlOwotCi0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFJlZ2lvbiB0aGlzUmVnaW9uLCBpbnQgZHgsIGludCBkeSwgUmVnaW9uIGRzdCkgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uRGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZSh0aGlzUmVnaW9uLm1OYXRpdmVSZWdpb24pOwotICAgICAgICBpZiAocmVnaW9uRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHRhcmdldFJlZ2lvbkRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUoZHN0Lm1OYXRpdmVSZWdpb24pOwotICAgICAgICBpZiAodGFyZ2V0UmVnaW9uRGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlZ2lvbkRlbGVnYXRlLm1BcmVhLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgdGFyZ2V0UmVnaW9uRGVsZWdhdGUubUFyZWEgPSBuZXcgQXJlYSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGFyZ2V0UmVnaW9uRGVsZWdhdGUubUFyZWEgPSBuZXcgQXJlYShyZWdpb25EZWxlZ2F0ZS5tQXJlYSk7Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbXR4ID0gbmV3IEFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgbXR4LnRyYW5zbGF0ZShkeCwgZHkpOwotICAgICAgICAgICAgdGFyZ2V0UmVnaW9uRGVsZWdhdGUubUFyZWEudHJhbnNmb3JtKG10eCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBzY2FsZShSZWdpb24gdGhpc1JlZ2lvbiwgZmxvYXQgc2NhbGUsIFJlZ2lvbiBkc3QpIHsKLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHJlZ2lvbkRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUodGhpc1JlZ2lvbi5tTmF0aXZlUmVnaW9uKTsKLSAgICAgICAgaWYgKHJlZ2lvbkRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSB0YXJnZXRSZWdpb25EZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKGRzdC5tTmF0aXZlUmVnaW9uKTsKLSAgICAgICAgaWYgKHRhcmdldFJlZ2lvbkRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWdpb25EZWxlZ2F0ZS5tQXJlYS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHRhcmdldFJlZ2lvbkRlbGVnYXRlLm1BcmVhID0gbmV3IEFyZWEoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRhcmdldFJlZ2lvbkRlbGVnYXRlLm1BcmVhID0gbmV3IEFyZWEocmVnaW9uRGVsZWdhdGUubUFyZWEpOwotICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG10eCA9IG5ldyBBZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIG10eC5zY2FsZShzY2FsZSwgc2NhbGUpOwotICAgICAgICAgICAgdGFyZ2V0UmVnaW9uRGVsZWdhdGUubUFyZWEudHJhbnNmb3JtKG10eCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUNvbnN0cnVjdG9yKCkgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgUmVnaW9uX0RlbGVnYXRlKCk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgbmF0aXZlRGVzdHJ1Y3RvcihpbnQgbmF0aXZlX3JlZ2lvbikgewotICAgICAgICBzTWFuYWdlci5yZW1vdmVKYXZhUmVmZXJlbmNlRm9yKG5hdGl2ZV9yZWdpb24pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZVNldFJlZ2lvbihpbnQgbmF0aXZlX2RzdCwgaW50IG5hdGl2ZV9zcmMpIHsKLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIGRzdFJlZ2lvbiA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9kc3QpOwotICAgICAgICBpZiAoZHN0UmVnaW9uID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHNyY1JlZ2lvbiA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9zcmMpOwotICAgICAgICBpZiAoc3JjUmVnaW9uID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZHN0UmVnaW9uLm1BcmVhLnJlc2V0KCk7Ci0gICAgICAgIGRzdFJlZ2lvbi5tQXJlYS5hZGQoc3JjUmVnaW9uLm1BcmVhKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVTZXRSZWN0KGludCBuYXRpdmVfZHN0LAotICAgICAgICAgICAgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgZHN0UmVnaW9uID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX2RzdCk7Ci0gICAgICAgIGlmIChkc3RSZWdpb24gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBkc3RSZWdpb24ubUFyZWEgPSBuZXcgQXJlYShuZXcgUmVjdGFuZ2xlMkQuRmxvYXQobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCkpOwotICAgICAgICByZXR1cm4gZHN0UmVnaW9uLm1BcmVhLmdldEJvdW5kcygpLmlzRW1wdHkoKSA9PSBmYWxzZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVTZXRQYXRoKGludCBuYXRpdmVfZHN0LCBpbnQgbmF0aXZlX3BhdGgsIGludCBuYXRpdmVfY2xpcCkgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgZHN0UmVnaW9uID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX2RzdCk7Ci0gICAgICAgIGlmIChkc3RSZWdpb24gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGggPSBQYXRoX0RlbGVnYXRlLmdldERlbGVnYXRlKG5hdGl2ZV9wYXRoKTsKLSAgICAgICAgaWYgKHBhdGggPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBkc3RSZWdpb24ubUFyZWEgPSBuZXcgQXJlYShwYXRoLmdldEphdmFTaGFwZSgpKTsKLQotICAgICAgICBSZWdpb25fRGVsZWdhdGUgY2xpcCA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9jbGlwKTsKLSAgICAgICAgaWYgKGNsaXAgIT0gbnVsbCkgewotICAgICAgICAgICAgZHN0UmVnaW9uLm1BcmVhLnN1YnRyYWN0KGNsaXAuZ2V0SmF2YUFyZWEoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZHN0UmVnaW9uLm1BcmVhLmdldEJvdW5kcygpLmlzRW1wdHkoKSA9PSBmYWxzZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVHZXRCb3VuZHMoaW50IG5hdGl2ZV9yZWdpb24sIFJlY3QgcmVjdCkgewotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX3JlZ2lvbik7Ci0gICAgICAgIGlmIChyZWdpb24gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWN0YW5nbGUgYm91bmRzID0gcmVnaW9uLm1BcmVhLmdldEJvdW5kcygpOwotICAgICAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmVjdC5sZWZ0ID0gcmVjdC50b3AgPSByZWN0LnJpZ2h0ID0gcmVjdC5ib3R0b20gPSAwOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVjdC5sZWZ0ID0gYm91bmRzLng7Ci0gICAgICAgIHJlY3QudG9wID0gYm91bmRzLnk7Ci0gICAgICAgIHJlY3QucmlnaHQgPSBib3VuZHMueCArIGJvdW5kcy53aWR0aDsKLSAgICAgICAgcmVjdC5ib3R0b20gPSBib3VuZHMueSArIGJvdW5kcy5oZWlnaHQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZUdldEJvdW5kYXJ5UGF0aChpbnQgbmF0aXZlX3JlZ2lvbiwgaW50IG5hdGl2ZV9wYXRoKSB7Ci0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSByZWdpb24gPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfcmVnaW9uKTsKLSAgICAgICAgaWYgKHJlZ2lvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBQYXRoX0RlbGVnYXRlIHBhdGggPSBQYXRoX0RlbGVnYXRlLmdldERlbGVnYXRlKG5hdGl2ZV9wYXRoKTsKLSAgICAgICAgaWYgKHBhdGggPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlZ2lvbi5tQXJlYS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHBhdGgucmVzZXQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhdGguc2V0UGF0aEl0ZXJhdG9yKHJlZ2lvbi5tQXJlYS5nZXRQYXRoSXRlcmF0b3IobmV3IEFmZmluZVRyYW5zZm9ybSgpKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZU9wKGludCBuYXRpdmVfZHN0LAotICAgICAgICAgICAgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSwgaW50IG9wKSB7Ci0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSByZWdpb24gPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfZHN0KTsKLSAgICAgICAgaWYgKHJlZ2lvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZWdpb24ubUFyZWEgPSBjb21iaW5lU2hhcGVzKHJlZ2lvbi5tQXJlYSwKLSAgICAgICAgICAgICAgICBuZXcgUmVjdGFuZ2xlMkQuRmxvYXQobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCksIG9wKTsKLQotICAgICAgICBhc3NlcnQgcmVnaW9uLm1BcmVhICE9IG51bGw7Ci0gICAgICAgIGlmIChyZWdpb24ubUFyZWEgIT0gbnVsbCkgewotICAgICAgICAgICAgcmVnaW9uLm1BcmVhID0gbmV3IEFyZWEoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZWdpb24ubUFyZWEuZ2V0Qm91bmRzKCkuaXNFbXB0eSgpID09IGZhbHNlOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIG5hdGl2ZU9wKGludCBuYXRpdmVfZHN0LCBSZWN0IHJlY3QsIGludCBuYXRpdmVfcmVnaW9uLCBpbnQgb3ApIHsKLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHJlZ2lvbiA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9kc3QpOwotICAgICAgICBpZiAocmVnaW9uID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlZ2lvbi5tQXJlYSA9IGNvbWJpbmVTaGFwZXMocmVnaW9uLm1BcmVhLAotICAgICAgICAgICAgICAgIG5ldyBSZWN0YW5nbGUyRC5GbG9hdChyZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpLCBvcCk7Ci0KLSAgICAgICAgYXNzZXJ0IHJlZ2lvbi5tQXJlYSAhPSBudWxsOwotICAgICAgICBpZiAocmVnaW9uLm1BcmVhICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJlZ2lvbi5tQXJlYSA9IG5ldyBBcmVhKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVnaW9uLm1BcmVhLmdldEJvdW5kcygpLmlzRW1wdHkoKSA9PSBmYWxzZTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVPcChpbnQgbmF0aXZlX2RzdCwKLSAgICAgICAgICAgIGludCBuYXRpdmVfcmVnaW9uMSwgaW50IG5hdGl2ZV9yZWdpb24yLCBpbnQgb3ApIHsKLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIGRzdFJlZ2lvbiA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9kc3QpOwotICAgICAgICBpZiAoZHN0UmVnaW9uID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHJlZ2lvbjEgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfcmVnaW9uMSk7Ci0gICAgICAgIGlmIChyZWdpb24xID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSByZWdpb24yID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX3JlZ2lvbjIpOwotICAgICAgICBpZiAocmVnaW9uMiA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBkc3RSZWdpb24ubUFyZWEgPSBjb21iaW5lU2hhcGVzKHJlZ2lvbjEubUFyZWEsIHJlZ2lvbjIubUFyZWEsIG9wKTsKLQotICAgICAgICBhc3NlcnQgZHN0UmVnaW9uLm1BcmVhICE9IG51bGw7Ci0gICAgICAgIGlmIChkc3RSZWdpb24ubUFyZWEgIT0gbnVsbCkgewotICAgICAgICAgICAgZHN0UmVnaW9uLm1BcmVhID0gbmV3IEFyZWEoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkc3RSZWdpb24ubUFyZWEuZ2V0Qm91bmRzKCkuaXNFbXB0eSgpID09IGZhbHNlOwotCi0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBwKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgb25seSBjYWxsZWQgYnkgUmVnaW9uLkNSRUFUT1IgKFBhcmNlbGFibGUuQ3JlYXRvcjxSZWdpb24+KSwgd2hpY2ggaXMgb25seQotICAgICAgICAvLyB1c2VkIGR1cmluZyBhaWRsIGNhbGwgc28gcmVhbGx5IHRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQuCi0gICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJBSURMIGlzIG5vdCBzdXBwb3JlZCwgYW5kIHRoZXJlZm9yZSBSZWdpb25zIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gcGFyY2Vscy4iLAotICAgICAgICAgICAgICAgIG51bGwgLypkYXRhKi8pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVXcml0ZVRvUGFyY2VsKGludCBuYXRpdmVfcmVnaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyY2VsIHApIHsKLSAgICAgICAgLy8gVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIHNlbmRpbmcgYSByZWdpb24gdGhyb3VnaCBhaWRsLCBzbyByZWFsbHkgdGhpcyBzaG91bGQgbm90Ci0gICAgICAgIC8vIGJlIGNhbGxlZC4KLSAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgIkFJREwgaXMgbm90IHN1cHBvcmVkLCBhbmQgdGhlcmVmb3JlIFJlZ2lvbnMgY2Fubm90IGJlIHdyaXR0ZW4gdG8gcGFyY2Vscy4iLAotICAgICAgICAgICAgICAgIG51bGwgLypkYXRhKi8pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGJvb2xlYW4gbmF0aXZlRXF1YWxzKGludCBuYXRpdmVfcjEsIGludCBuYXRpdmVfcjIpIHsKLSAgICAgICAgUmVnaW9uX0RlbGVnYXRlIHJlZ2lvbjEgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfcjEpOwotICAgICAgICBpZiAocmVnaW9uMSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWdpb25fRGVsZWdhdGUgcmVnaW9uMiA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9yMik7Ci0gICAgICAgIGlmIChyZWdpb24yID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZWdpb24xLm1BcmVhLmVxdWFscyhyZWdpb24yLm1BcmVhKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIG5hdGl2ZVRvU3RyaW5nKGludCBuYXRpdmVfcmVnaW9uKSB7Ci0gICAgICAgIFJlZ2lvbl9EZWxlZ2F0ZSByZWdpb24gPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfcmVnaW9uKTsKLSAgICAgICAgaWYgKHJlZ2lvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gIm5vdCBmb3VuZCI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVnaW9uLm1BcmVhLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBQcml2YXRlIGRlbGVnYXRlL2hlbHBlciBtZXRob2RzIC0tLS0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9TaGFkZXJfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2OGMwMzg0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TaGFkZXIuVGlsZU1vZGU7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLlNoYWRlcgotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFNoYWRlciBoYXZlIGJlZW4gcmVwbGFjZWQKLSAqIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBTaGFkZXIgY2xhc3MuCi0gKgotICogVGhpcyBhbHNvIHNlcnZlIGFzIGEgYmFzZSBjbGFzcyBmb3IgYWxsIFNoYWRlciBkZWxlZ2F0ZSBjbGFzc2VzLgotICoKLSAqIEBzZWUgRGVsZWdhdGVNYW5hZ2VyCi0gKgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2hhZGVyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBEZWxlZ2F0ZU1hbmFnZXI8U2hhZGVyX0RlbGVnYXRlPiBzTWFuYWdlciA9Ci0gICAgICAgICAgICBuZXcgRGVsZWdhdGVNYW5hZ2VyPFNoYWRlcl9EZWxlZ2F0ZT4oU2hhZGVyX0RlbGVnYXRlLmNsYXNzKTsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgaGVscGVyIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLSAgICBwcml2YXRlIE1hdHJpeF9EZWxlZ2F0ZSBtTG9jYWxNYXRyaXggPSBudWxsOwotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHVibGljIHN0YXRpYyBTaGFkZXJfRGVsZWdhdGUgZ2V0RGVsZWdhdGUoaW50IG5hdGl2ZVNoYWRlcikgewotICAgICAgICByZXR1cm4gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlU2hhZGVyKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgVGlsZU1vZGV9IG1hdGNoaW5nIHRoZSBnaXZlbiBpbnQuCi0gICAgICogQHBhcmFtIHRpbGVNb2RlIHRoZSB0aWxlIG1vZGUgaW50IHZhbHVlCi0gICAgICogQHJldHVybiB0aGUgVGlsZU1vZGUgZW51bS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFRpbGVNb2RlIGdldFRpbGVNb2RlKGludCB0aWxlTW9kZSkgewotICAgICAgICBmb3IgKFRpbGVNb2RlIHRtIDogVGlsZU1vZGUudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0bS5uYXRpdmVJbnQgPT0gdGlsZU1vZGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBhc3NlcnQgZmFsc2U7Ci0gICAgICAgIHJldHVybiBUaWxlTW9kZS5DTEFNUDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgamF2YS5hd3QuUGFpbnQgZ2V0SmF2YVBhaW50KCk7Ci0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNTdXBwb3J0ZWQoKTsKLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCk7Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZURlc3RydWN0b3IoaW50IG5hdGl2ZV9zaGFkZXIsIGludCBuYXRpdmVfc2tpYVNoYWRlcikgewotICAgICAgICBzTWFuYWdlci5yZW1vdmVKYXZhUmVmZXJlbmNlRm9yKG5hdGl2ZV9zaGFkZXIpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIG5hdGl2ZVNldExvY2FsTWF0cml4KGludCBuYXRpdmVfc2hhZGVyLCBpbnQgbmF0aXZlX3NraWFTaGFkZXIsCi0gICAgICAgICAgICBpbnQgbWF0cml4X2luc3RhbmNlKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZGVsZWdhdGUgZnJvbSB0aGUgbmF0aXZlIGludC4KLSAgICAgICAgU2hhZGVyX0RlbGVnYXRlIHNoYWRlckRlbGVnYXRlID0gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlX3NoYWRlcik7Ci0gICAgICAgIGlmIChzaGFkZXJEZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzaGFkZXJEZWxlZ2F0ZS5tTG9jYWxNYXRyaXggPSBNYXRyaXhfRGVsZWdhdGUuZ2V0RGVsZWdhdGUobWF0cml4X2luc3RhbmNlKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHJvdGVjdGVkIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGdldExvY2FsTWF0cml4KCkgewotICAgICAgICBpZiAobUxvY2FsTWF0cml4ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtTG9jYWxNYXRyaXguZ2V0QWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbmV3IGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1N1bVBhdGhFZmZlY3RfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvU3VtUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTBkZjBjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvU3VtUGF0aEVmZmVjdF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgamF2YS5hd3QuU3Ryb2tlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5TdW1QYXRoRWZmZWN0Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgU3VtUGF0aEVmZmVjdCBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBTdW1QYXRoRWZmZWN0IGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBQYXRoRWZmZWN0X0RlbGVnYXRlfSwgdGhlcmUncyBubyBuZWVkIHRvIHVzZSBhIHtAbGluayBEZWxlZ2F0ZU1hbmFnZXJ9LAotICogYXMgYWxsIHRoZSBTaGFkZXIgY2xhc3NlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYW5hZ2VyIG93bmVkIGJ5IHtAbGluayBQYXRoRWZmZWN0X0RlbGVnYXRlfS4KLSAqCi0gKiBAc2VlIFBhdGhFZmZlY3RfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTdW1QYXRoRWZmZWN0X0RlbGVnYXRlIGV4dGVuZHMgUGF0aEVmZmVjdF9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cm9rZSBnZXRTdHJva2UoUGFpbnRfRGVsZWdhdGUgcGFpbnQpIHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gIlN1bSBQYXRoIEVmZmVjdHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTGF5b3V0IFByZXZpZXcgbW9kZS4iOwotICAgIH0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUoaW50IGZpcnN0LCBpbnQgc2Vjb25kKSB7Ci0gICAgICAgIFN1bVBhdGhFZmZlY3RfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgU3VtUGF0aEVmZmVjdF9EZWxlZ2F0ZSgpOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1N3ZWVwR3JhZGllbnRfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvU3dlZXBHcmFkaWVudF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2FlMTJlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvU3dlZXBHcmFkaWVudF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5Td2VlcEdyYWRpZW50Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgU3dlZXBHcmFkaWVudCBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqIFRoaXMgY2xhc3MgYmVoYXZlcyBsaWtlIHRoZSBvcmlnaW5hbCBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiBKYXZhLCBrZWVwaW5nIHByZXZpb3VzbHkKLSAqIG5hdGl2ZSBkYXRhIGludG8gaXRzIG93biBvYmplY3RzIGFuZCBtYXBwaW5nIHRoZW0gdG8gaW50IHRoYXQgYXJlIHNlbnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbgotICogaXQgYW5kIHRoZSBvcmlnaW5hbCBTd2VlcEdyYWRpZW50IGNsYXNzLgotICoKLSAqIEJlY2F1c2UgdGhpcyBleHRlbmRzIHtAbGluayBTaGFkZXJfRGVsZWdhdGV9LCB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGEge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0sCi0gKiBhcyBhbGwgdGhlIFNoYWRlciBjbGFzc2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmFnZXIgb3duZWQgYnkge0BsaW5rIFNoYWRlcl9EZWxlZ2F0ZX0uCi0gKgotICogQHNlZSBTaGFkZXJfRGVsZWdhdGUKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTd2VlcEdyYWRpZW50X0RlbGVnYXRlIGV4dGVuZHMgR3JhZGllbnRfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBkYXRhIC0tLS0KLSAgICBwcml2YXRlIGphdmEuYXd0LlBhaW50IG1KYXZhUGFpbnQ7Ci0KLSAgICAvLyAtLS0tIFB1YmxpYyBIZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgamF2YS5hd3QuUGFpbnQgZ2V0SmF2YVBhaW50KCkgewotICAgICAgICByZXR1cm4gbUphdmFQYWludDsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIG5hdGl2ZSBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBpbnQgbmF0aXZlQ3JlYXRlMShmbG9hdCB4LCBmbG9hdCB5LCBpbnQgY29sb3JzW10sIGZsb2F0IHBvc2l0aW9uc1tdKSB7Ci0gICAgICAgIFN3ZWVwR3JhZGllbnRfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgU3dlZXBHcmFkaWVudF9EZWxlZ2F0ZSh4LCB5LCBjb2xvcnMsIHBvc2l0aW9ucyk7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGludCBuYXRpdmVDcmVhdGUyKGZsb2F0IHgsIGZsb2F0IHksIGludCBjb2xvcjAsIGludCBjb2xvcjEpIHsKLSAgICAgICAgcmV0dXJuIG5hdGl2ZUNyZWF0ZTEoeCwgeSwgbmV3IGludFtdIHsgY29sb3IwLCBjb2xvcjEgfSwgbnVsbCAvKnBvc2l0aW9ucyovKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZVBvc3RDcmVhdGUxKGludCBuYXRpdmVfc2hhZGVyLCBmbG9hdCBjeCwgZmxvYXQgY3ksCi0gICAgICAgICAgICBpbnRbXSBjb2xvcnMsIGZsb2F0W10gcG9zaXRpb25zKSB7Ci0gICAgICAgIC8vIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZVBvc3RDcmVhdGUyKGludCBuYXRpdmVfc2hhZGVyLCBmbG9hdCBjeCwgZmxvYXQgY3ksCi0gICAgICAgICAgICBpbnQgY29sb3IwLCBpbnQgY29sb3IxKSB7Ci0gICAgICAgIC8vIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIFByaXZhdGUgZGVsZWdhdGUvaGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgLyoqCi0gICAgICogQSBzdWJjbGFzcyBvZiBTaGFkZXIgdGhhdCBkcmF3cyBhIHN3ZWVwIGdyYWRpZW50IGFyb3VuZCBhIGNlbnRlciBwb2ludC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjeCAgICAgICBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBjZW50ZXIKLSAgICAgKiBAcGFyYW0gY3kgICAgICAgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyCi0gICAgICogQHBhcmFtIGNvbG9ycyAgIFRoZSBjb2xvcnMgdG8gYmUgZGlzdHJpYnV0ZWQgYmV0d2VlbiBhcm91bmQgdGhlIGNlbnRlci4KLSAgICAgKiAgICAgICAgICAgICAgICAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCAyIGNvbG9ycyBpbiB0aGUgYXJyYXkuCi0gICAgICogQHBhcmFtIHBvc2l0aW9ucyBNYXkgYmUgTlVMTC4gVGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mCi0gICAgICogICAgICAgICAgICAgICAgIGVhY2ggY29ycmVzcG9uZGluZyBjb2xvciBpbiB0aGUgY29sb3JzIGFycmF5LCBiZWdpbm5pbmcKLSAgICAgKiAgICAgICAgICAgICAgICAgd2l0aCAwIGFuZCBlbmRpbmcgd2l0aCAxLjAuIElmIHRoZSB2YWx1ZXMgYXJlIG5vdAotICAgICAqICAgICAgICAgICAgICAgICBtb25vdG9uaWMsIHRoZSBkcmF3aW5nIG1heSBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy4KLSAgICAgKiAgICAgICAgICAgICAgICAgSWYgcG9zaXRpb25zIGlzIE5VTEwsIHRoZW4gdGhlIGNvbG9ycyBhcmUgYXV0b21hdGljYWxseQotICAgICAqICAgICAgICAgICAgICAgICBzcGFjZWQgZXZlbmx5LgotICAgICAqLwotICAgIHByaXZhdGUgU3dlZXBHcmFkaWVudF9EZWxlZ2F0ZShmbG9hdCBjeCwgZmxvYXQgY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbG9yc1tdLCBmbG9hdCBwb3NpdGlvbnNbXSkgewotICAgICAgICBzdXBlcihjb2xvcnMsIHBvc2l0aW9ucyk7Ci0gICAgICAgIG1KYXZhUGFpbnQgPSBuZXcgU3dlZXBHcmFkaWVudFBhaW50KGN4LCBjeSwgbUNvbG9ycywgbVBvc2l0aW9ucyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBTd2VlcEdyYWRpZW50UGFpbnQgZXh0ZW5kcyBHcmFkaWVudFBhaW50IHsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIGZsb2F0IG1DeDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBmbG9hdCBtQ3k7Ci0KLSAgICAgICAgcHVibGljIFN3ZWVwR3JhZGllbnRQYWludChmbG9hdCBjeCwgZmxvYXQgY3ksIGludFtdIGNvbG9ycywKLSAgICAgICAgICAgICAgICBmbG9hdFtdIHBvc2l0aW9ucykgewotICAgICAgICAgICAgc3VwZXIoY29sb3JzLCBwb3NpdGlvbnMsIG51bGwgLyp0aWxlTW9kZSovKTsKLSAgICAgICAgICAgIG1DeCA9IGN4OwotICAgICAgICAgICAgbUN5ID0gY3k7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGphdmEuYXd0LlBhaW50Q29udGV4dCBjcmVhdGVDb250ZXh0KAotICAgICAgICAgICAgICAgIGphdmEuYXd0LmltYWdlLkNvbG9yTW9kZWwgICAgIGNvbG9yTW9kZWwsCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuUmVjdGFuZ2xlICAgICAgICAgICAgZGV2aWNlQm91bmRzLAotICAgICAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uUmVjdGFuZ2xlMkQgICAgIHVzZXJCb3VuZHMsCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0geGZvcm0sCi0gICAgICAgICAgICAgICAgamF2YS5hd3QuUmVuZGVyaW5nSGludHMgICAgICAgaGludHMpIHsKLSAgICAgICAgICAgIHByZWNvbXB1dGVHcmFkaWVudENvbG9ycygpOwotCi0gICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBjYW52YXNNYXRyaXg7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNhbnZhc01hdHJpeCA9IHhmb3JtLmNyZWF0ZUludmVyc2UoKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGphdmEuYXd0Lmdlb20uTm9uaW52ZXJ0aWJsZVRyYW5zZm9ybUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX01BVFJJWF9JTlZFUlNFLAotICAgICAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBpbnZlcnNlIG1hdHJpeCBpbiBTd2VlcEdyYWRpZW50IiwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgY2FudmFzTWF0cml4ID0gbmV3IGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtIGxvY2FsTWF0cml4ID0gZ2V0TG9jYWxNYXRyaXgoKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbG9jYWxNYXRyaXggPSBsb2NhbE1hdHJpeC5jcmVhdGVJbnZlcnNlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChqYXZhLmF3dC5nZW9tLk5vbmludmVydGlibGVUcmFuc2Zvcm1FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19NQVRSSVhfSU5WRVJTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gaW52ZXJzZSBtYXRyaXggaW4gU3dlZXBHcmFkaWVudCIsIGUsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgIGxvY2FsTWF0cml4ID0gbmV3IGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgU3dlZXBHcmFkaWVudFBhaW50Q29udGV4dChjYW52YXNNYXRyaXgsIGxvY2FsTWF0cml4LCBjb2xvck1vZGVsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgY2xhc3MgU3dlZXBHcmFkaWVudFBhaW50Q29udGV4dCBpbXBsZW1lbnRzIGphdmEuYXd0LlBhaW50Q29udGV4dCB7Ci0KLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gbUNhbnZhc01hdHJpeDsKLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gbUxvY2FsTWF0cml4OwotICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBqYXZhLmF3dC5pbWFnZS5Db2xvck1vZGVsIG1Db2xvck1vZGVsOwotCi0gICAgICAgICAgICBwdWJsaWMgU3dlZXBHcmFkaWVudFBhaW50Q29udGV4dCgKLSAgICAgICAgICAgICAgICAgICAgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm0gY2FudmFzTWF0cml4LAotICAgICAgICAgICAgICAgICAgICBqYXZhLmF3dC5nZW9tLkFmZmluZVRyYW5zZm9ybSBsb2NhbE1hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgamF2YS5hd3QuaW1hZ2UuQ29sb3JNb2RlbCBjb2xvck1vZGVsKSB7Ci0gICAgICAgICAgICAgICAgbUNhbnZhc01hdHJpeCA9IGNhbnZhc01hdHJpeDsKLSAgICAgICAgICAgICAgICBtTG9jYWxNYXRyaXggPSBsb2NhbE1hdHJpeDsKLSAgICAgICAgICAgICAgICBtQ29sb3JNb2RlbCA9IGNvbG9yTW9kZWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgamF2YS5hd3QuaW1hZ2UuQ29sb3JNb2RlbCBnZXRDb2xvck1vZGVsKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtQ29sb3JNb2RlbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgamF2YS5hd3QuaW1hZ2UuUmFzdGVyIGdldFJhc3RlcihpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkgewotICAgICAgICAgICAgICAgIGphdmEuYXd0LmltYWdlLkJ1ZmZlcmVkSW1hZ2UgaW1hZ2UgPSBuZXcgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSh3LCBoLAotICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCKTsKLQotICAgICAgICAgICAgICAgIGludFtdIGRhdGEgPSBuZXcgaW50W3cqaF07Ci0KLSAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGFuZ2xlIGZyb20gZWFjaCBwb2ludCB0byB0aGUgY2VudGVyLCBhbmQgZmlndXJlIG91dCB0aGUgZGlzdGFuY2UgZnJvbQotICAgICAgICAgICAgICAgIC8vIGl0LgotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgZmxvYXRbXSBwdDEgPSBuZXcgZmxvYXRbMl07Ci0gICAgICAgICAgICAgICAgZmxvYXRbXSBwdDIgPSBuZXcgZmxvYXRbMl07Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaXkgPSAwIDsgaXkgPCBoIDsgaXkrKykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpeCA9IDAgOyBpeCA8IHcgOyBpeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgdGhlIGNhbnZhcyB0cmFuc2Zvcm0KLSAgICAgICAgICAgICAgICAgICAgICAgIHB0MVswXSA9IHggKyBpeDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0MVsxXSA9IHkgKyBpeTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1DYW52YXNNYXRyaXgudHJhbnNmb3JtKHB0MSwgMCwgcHQyLCAwLCAxKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRoZSBsb2NhbCBtYXRyaXgKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0MVswXSA9IHB0MlswXSAtIG1DeDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0MVsxXSA9IHB0MlsxXSAtIG1DeTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Mb2NhbE1hdHJpeC50cmFuc2Zvcm0ocHQxLCAwLCBwdDIsIDAsIDEpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkeCA9IHB0MlswXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGR5ID0gcHQyWzFdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbmdsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkeCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSAoZmxvYXQpIChkeSA8IDAgPyAzICogTWF0aC5QSSAvIDIgOiBNYXRoLlBJIC8gMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGR5ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IChmbG9hdCkgKGR4IDwgMCA/IE1hdGguUEkgOiAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSAoZmxvYXQpIE1hdGguYXRhbihkeSAvIGR4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkeSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlICs9IE1hdGguUEkgKiAyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgKz0gTWF0aC5QSTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gMC0xLiB2YWx1ZSBhbmQgZ2V0IGNvbG9yCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2luZGV4KytdID0gZ2V0R3JhZGllbnRDb2xvcigoZmxvYXQpIChhbmdsZSAvICgyICogTWF0aC5QSSkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGltYWdlLnNldFJHQigwIC8qc3RhcnRYKi8sIDAgLypzdGFydFkqLywgdywgaCwgZGF0YSwgMCAvKm9mZnNldCovLCB3IC8qc2NhbnNpemUqLyk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2UuZ2V0UmFzdGVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2VfQWNjZXNzb3IuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2VfQWNjZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRhZDJhYy4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlX0FjY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi0vKioKLSAqIENsYXNzIGFsbG93aW5nIGFjY2VzcyB0byBwYWNrYWdlLXByb3RlY3RlZCBtZXRob2RzL2ZpZWxkcy4KLSAqLwotcHVibGljIGNsYXNzIFR5cGVmYWNlX0FjY2Vzc29yIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZXNldERlZmF1bHRzKCkgewotICAgICAgICBUeXBlZmFjZS5zRGVmYXVsdHMgPSBudWxsOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2VfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2VfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcwMWNjOC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1R5cGVmYWNlX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRm9udExvYWRlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0TWFuYWdlcjsKLQotaW1wb3J0IGphdmEuYXd0LkZvbnQ7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogRGVsZWdhdGUgaW1wbGVtZW50aW5nIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiBhbmRyb2lkLmdyYXBoaWNzLlR5cGVmYWNlCi0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgbmF0aXZlIG1ldGhvZHMgb2YgVHlwZWZhY2UgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBUaGlzIGNsYXNzIGJlaGF2ZXMgbGlrZSB0aGUgb3JpZ2luYWwgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgaW4gSmF2YSwga2VlcGluZyBwcmV2aW91c2x5Ci0gKiBuYXRpdmUgZGF0YSBpbnRvIGl0cyBvd24gb2JqZWN0cyBhbmQgbWFwcGluZyB0aGVtIHRvIGludCB0aGF0IGFyZSBzZW50IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KLSAqIGl0IGFuZCB0aGUgb3JpZ2luYWwgVHlwZWZhY2UgY2xhc3MuCi0gKgotICogQHNlZSBEZWxlZ2F0ZU1hbmFnZXIKLSAqCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBUeXBlZmFjZV9EZWxlZ2F0ZSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lTVEVNX0ZPTlRTID0gIi9zeXN0ZW0vZm9udHMvIjsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPFR5cGVmYWNlX0RlbGVnYXRlPiBzTWFuYWdlciA9Ci0gICAgICAgICAgICBuZXcgRGVsZWdhdGVNYW5hZ2VyPFR5cGVmYWNlX0RlbGVnYXRlPihUeXBlZmFjZV9EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGhlbHBlciBkYXRhIC0tLS0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9GQU1JTFkgPSAic2Fucy1zZXJpZiI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBGb250TG9hZGVyIHNGb250TG9hZGVyOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3Q8VHlwZWZhY2VfRGVsZWdhdGU+IHNQb3N0SW5pdERlbGVnYXRlID0KLSAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8VHlwZWZhY2VfRGVsZWdhdGU+KCk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUZhbWlseTsKLSAgICBwcml2YXRlIGludCBtU3R5bGU7Ci0gICAgcHJpdmF0ZSBMaXN0PEZvbnQ+IG1Gb250czsKLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBpbml0KEZvbnRMb2FkZXIgZm9udExvYWRlcikgewotICAgICAgICBzRm9udExvYWRlciA9IGZvbnRMb2FkZXI7Ci0KLSAgICAgICAgZm9yIChUeXBlZmFjZV9EZWxlZ2F0ZSBkZWxlZ2F0ZSA6IHNQb3N0SW5pdERlbGVnYXRlKSB7Ci0gICAgICAgICAgICBkZWxlZ2F0ZS5pbml0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgc1Bvc3RJbml0RGVsZWdhdGUuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFR5cGVmYWNlX0RlbGVnYXRlIGdldERlbGVnYXRlKGludCBuYXRpdmVUeXBlZmFjZSkgewotICAgICAgICByZXR1cm4gc01hbmFnZXIuZ2V0RGVsZWdhdGUobmF0aXZlVHlwZWZhY2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxGb250PiBnZXRGb250cyhUeXBlZmFjZSB0eXBlZmFjZSkgewotICAgICAgICByZXR1cm4gZ2V0Rm9udHModHlwZWZhY2UubmF0aXZlX2luc3RhbmNlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIExpc3Q8Rm9udD4gZ2V0Rm9udHMoaW50IG5hdGl2ZV9pbnQpIHsKLSAgICAgICAgVHlwZWZhY2VfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfaW50KTsKLSAgICAgICAgaWYgKGRlbGVnYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmdldEZvbnRzKCk7Ci0gICAgfQotCi0gICAgcHVibGljIExpc3Q8Rm9udD4gZ2V0Rm9udHMoKSB7Ci0gICAgICAgIHJldHVybiBtRm9udHM7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBuYXRpdmUgbWV0aG9kcyAtLS0tCi0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgc3luY2hyb25pemVkIGludCBuYXRpdmVDcmVhdGUoU3RyaW5nIGZhbWlseU5hbWUsIGludCBzdHlsZSkgewotICAgICAgICBpZiAoZmFtaWx5TmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBmYW1pbHlOYW1lID0gREVGQVVMVF9GQU1JTFk7Ci0gICAgICAgIH0KLQotICAgICAgICBUeXBlZmFjZV9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBUeXBlZmFjZV9EZWxlZ2F0ZShmYW1pbHlOYW1lLCBzdHlsZSk7Ci0gICAgICAgIGlmIChzRm9udExvYWRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBuZXdEZWxlZ2F0ZS5pbml0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBmb250IGxvYWRlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCBhZGQgdGhlIGRlbGVnYXRlIHRvIGEgbGlzdCBvZiBkZWxlZ2F0ZXMKLSAgICAgICAgICAgIC8vIHRvIGluaXQgd2hlbiB0aGUgZm9udCBsb2FkZXIgaXMgaW5pdGlhbGl6ZWQuCi0gICAgICAgICAgICAvLyBUaGVyZSB3b24ndCBiZSBhbnkgcmVuZGVyaW5nIGJlZm9yZSB0aGlzIGhhcHBlbnMgYW55d2F5LgotICAgICAgICAgICAgc1Bvc3RJbml0RGVsZWdhdGUuYWRkKG5ld0RlbGVnYXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzTWFuYWdlci5hZGROZXdEZWxlZ2F0ZShuZXdEZWxlZ2F0ZSk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHN5bmNocm9uaXplZCBpbnQgbmF0aXZlQ3JlYXRlRnJvbVR5cGVmYWNlKGludCBuYXRpdmVfaW5zdGFuY2UsIGludCBzdHlsZSkgewotICAgICAgICBUeXBlZmFjZV9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKG5hdGl2ZV9pbnN0YW5jZSk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIFR5cGVmYWNlX0RlbGVnYXRlIG5ld0RlbGVnYXRlID0gbmV3IFR5cGVmYWNlX0RlbGVnYXRlKGRlbGVnYXRlLm1GYW1pbHksIHN0eWxlKTsKLSAgICAgICAgaWYgKHNGb250TG9hZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG5ld0RlbGVnYXRlLmluaXQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGZvbnQgbG9hZGVyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQsIGFkZCB0aGUgZGVsZWdhdGUgdG8gYSBsaXN0IG9mIGRlbGVnYXRlcwotICAgICAgICAgICAgLy8gdG8gaW5pdCB3aGVuIHRoZSBmb250IGxvYWRlciBpcyBpbml0aWFsaXplZC4KLSAgICAgICAgICAgIC8vIFRoZXJlIHdvbid0IGJlIGFueSByZW5kZXJpbmcgYmVmb3JlIHRoaXMgaGFwcGVucyBhbnl3YXkuCi0gICAgICAgICAgICBzUG9zdEluaXREZWxlZ2F0ZS5hZGQobmV3RGVsZWdhdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgc3luY2hyb25pemVkIGludCBuYXRpdmVDcmVhdGVGcm9tQXNzZXQoQXNzZXRNYW5hZ2VyIG1nciwgU3RyaW5nIHBhdGgpIHsKLSAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1VOU1VQUE9SVEVELAotICAgICAgICAgICAgICAgICJUeXBlZmFjZS5jcmVhdGVGcm9tQXNzZXQoKSBpcyBub3Qgc3VwcG9ydGVkLiIsIG51bGwgLyp0aHJvd2FibGUqLywgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBzeW5jaHJvbml6ZWQgaW50IG5hdGl2ZUNyZWF0ZUZyb21GaWxlKFN0cmluZyBwYXRoKSB7Ci0gICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoU1lTVEVNX0ZPTlRTKSApIHsKLSAgICAgICAgICAgIFN0cmluZyByZWxhdGl2ZVBhdGggPSBwYXRoLnN1YnN0cmluZyhTWVNURU1fRk9OVFMubGVuZ3RoKCkpOwotICAgICAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUoc0ZvbnRMb2FkZXIuZ2V0T3NGb250c0xvY2F0aW9uKCksIHJlbGF0aXZlUGF0aCk7Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgRm9udCBmb250ID0gRm9udC5jcmVhdGVGb250KEZvbnQuVFJVRVRZUEVfRk9OVCwgZik7Ci0gICAgICAgICAgICAgICAgaWYgKGZvbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBUeXBlZmFjZV9EZWxlZ2F0ZSBuZXdEZWxlZ2F0ZSA9IG5ldyBUeXBlZmFjZV9EZWxlZ2F0ZShmb250KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNNYW5hZ2VyLmFkZE5ld0RlbGVnYXRlKG5ld0RlbGVnYXRlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19CUk9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJVbmFibGUgdG8gbG9hZCBmb250ICUxJHMiLCByZWxhdGl2ZVBhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLyp0aHJvd2FibGUqLywgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfVU5TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgICAgICJUeXBlZmFjZS5jcmVhdGVGcm9tRmlsZSgpIGNhbiBvbmx5IHdvcmsgd2l0aCBwbGF0Zm9ybSBmb250cyBsb2NhdGVkIGluICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgU1lTVEVNX0ZPTlRTLAotICAgICAgICAgICAgICAgICAgICBudWxsIC8qdGhyb3dhYmxlKi8sIG51bGwgLypkYXRhKi8pOwotICAgICAgICB9Ci0KLQotICAgICAgICAvLyByZXR1cm4gYSBjb3B5IG9mIHRoZSBiYXNlIGZvbnQKLSAgICAgICAgcmV0dXJuIG5hdGl2ZUNyZWF0ZShudWxsLCAwKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgdm9pZCBuYXRpdmVVbnJlZihpbnQgbmF0aXZlX2luc3RhbmNlKSB7Ci0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IobmF0aXZlX2luc3RhbmNlKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IG5hdGl2ZUdldFN0eWxlKGludCBuYXRpdmVfaW5zdGFuY2UpIHsKLSAgICAgICAgVHlwZWZhY2VfRGVsZWdhdGUgZGVsZWdhdGUgPSBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfaW5zdGFuY2UpOwotICAgICAgICBpZiAoZGVsZWdhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubVN0eWxlOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi0KLSAgICBwcml2YXRlIFR5cGVmYWNlX0RlbGVnYXRlKFN0cmluZyBmYW1pbHksIGludCBzdHlsZSkgewotICAgICAgICBtRmFtaWx5ID0gZmFtaWx5OwotICAgICAgICBtU3R5bGUgPSBzdHlsZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFR5cGVmYWNlX0RlbGVnYXRlKEZvbnQgZm9udCkgewotICAgICAgICBtRmFtaWx5ID0gZm9udC5nZXRGYW1pbHkoKTsKLSAgICAgICAgbVN0eWxlID0gVHlwZWZhY2UuTk9STUFMOwotCi0gICAgICAgIG1Gb250cyA9IHNGb250TG9hZGVyLmdldEZhbGxiYWNrRm9udHMobVN0eWxlKTsKLQotICAgICAgICAvLyBpbnNlcnQgdGhlIGZvbnQgZ2x5cGggZmlyc3QuCi0gICAgICAgIG1Gb250cy5hZGQoMCwgZm9udCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0gICAgICAgIG1Gb250cyA9IHNGb250TG9hZGVyLmdldEZvbnQobUZhbWlseSwgbVN0eWxlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1hmZXJtb2RlX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2dyYXBoaWNzL1hmZXJtb2RlX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MmQ2OWMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9YZmVybW9kZV9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5ncmFwaGljczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgamF2YS5hd3QuQ29tcG9zaXRlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5ncmFwaGljcy5YZmVybW9kZQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFhmZXJtb2RlIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogVGhpcyBjbGFzcyBiZWhhdmVzIGxpa2UgdGhlIG9yaWdpbmFsIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGluIEphdmEsIGtlZXBpbmcgcHJldmlvdXNseQotICogbmF0aXZlIGRhdGEgaW50byBpdHMgb3duIG9iamVjdHMgYW5kIG1hcHBpbmcgdGhlbSB0byBpbnQgdGhhdCBhcmUgc2VudCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuCi0gKiBpdCBhbmQgdGhlIG9yaWdpbmFsIFhmZXJtb2RlIGNsYXNzLgotICoKLSAqIFRoaXMgYWxzbyBzZXJ2ZSBhcyBhIGJhc2UgY2xhc3MgZm9yIGFsbCBYZmVybW9kZSBkZWxlZ2F0ZSBjbGFzc2VzLgotICoKLSAqIEBzZWUgRGVsZWdhdGVNYW5hZ2VyCi0gKgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWGZlcm1vZGVfRGVsZWdhdGUgewotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBtYW5hZ2VyIC0tLS0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIERlbGVnYXRlTWFuYWdlcjxYZmVybW9kZV9EZWxlZ2F0ZT4gc01hbmFnZXIgPQotICAgICAgICAgICAgbmV3IERlbGVnYXRlTWFuYWdlcjxYZmVybW9kZV9EZWxlZ2F0ZT4oWGZlcm1vZGVfRGVsZWdhdGUuY2xhc3MpOwotCi0gICAgLy8gLS0tLSBkZWxlZ2F0ZSBoZWxwZXIgZGF0YSAtLS0tCi0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotCi0gICAgLy8gLS0tLSBQdWJsaWMgSGVscGVyIG1ldGhvZHMgLS0tLQotCi0gICAgcHVibGljIHN0YXRpYyBYZmVybW9kZV9EZWxlZ2F0ZSBnZXREZWxlZ2F0ZShpbnQgbmF0aXZlX2luc3RhbmNlKSB7Ci0gICAgICAgIHJldHVybiBzTWFuYWdlci5nZXREZWxlZ2F0ZShuYXRpdmVfaW5zdGFuY2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBDb21wb3NpdGUgZ2V0Q29tcG9zaXRlKGludCBhbHBoYSk7Ci0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNTdXBwb3J0ZWQoKTsKLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN1cHBvcnRNZXNzYWdlKCk7Ci0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgZmluYWxpemVyKGludCBuYXRpdmVfaW5zdGFuY2UpIHsKLSAgICAgICAgc01hbmFnZXIucmVtb3ZlSmF2YVJlZmVyZW5jZUZvcihuYXRpdmVfaW5zdGFuY2UpOwotICAgIH0KLQotICAgIC8vIC0tLS0gUHJpdmF0ZSBkZWxlZ2F0ZS9oZWxwZXIgbWV0aG9kcyAtLS0tCi0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvQnVpbGRfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvQnVpbGRfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY4MmE1ZS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL29zL0J1aWxkX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLm9zOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLkRlbGVnYXRlTWFuYWdlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5vcy5CdWlsZAotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIEJ1aWxkIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogQmVjYXVzZSBpdCdzIGEgc3RhdGVsZXNzIGNsYXNzIHRvIHN0YXJ0IHdpdGgsIHRoZXJlJ3Mgbm8gbmVlZCB0byBrZWVwIGEge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0KLSAqIGFyb3VuZCB0byBtYXAgaW50IHRvIGluc3RhbmNlIG9mIHRoZSBkZWxlZ2F0ZS4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBCdWlsZF9EZWxlZ2F0ZSB7Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcgcHJvcGVydHkpIHsKLSAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBwcm9wZXJ0aWVzID0gQnJpZGdlLmdldFBsYXRmb3JtUHJvcGVydGllcygpOwotICAgICAgICBTdHJpbmcgdmFsdWUgPSBwcm9wZXJ0aWVzLmdldChwcm9wZXJ0eSk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gQnVpbGQuVU5LTk9XTjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvSGFuZGxlclRocmVhZF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9vcy9IYW5kbGVyVGhyZWFkX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYmU5N2MuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9vcy9IYW5kbGVyVGhyZWFkX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLm9zOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUNvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlJlbmRlckFjdGlvbjsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogRGVsZWdhdGUgb3ZlcnJpZGluZyBzZWxlY3RlZCBtZXRob2RzIG9mIGFuZHJvaWQub3MuSGFuZGxlclRocmVhZAotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgc2VsZWN0ZWQgbWV0aG9kcyBvZiBIYW5kbGVyIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICoKLSAqLwotcHVibGljIGNsYXNzIEhhbmRsZXJUaHJlYWRfRGVsZWdhdGUgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwPEJyaWRnZUNvbnRleHQsIExpc3Q8SGFuZGxlclRocmVhZD4+IHNUaHJlYWRzID0KLSAgICAgICAgICAgIG5ldyBIYXNoTWFwPEJyaWRnZUNvbnRleHQsIExpc3Q8SGFuZGxlclRocmVhZD4+KCk7Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2xlYW5VcChCcmlkZ2VDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgTGlzdDxIYW5kbGVyVGhyZWFkPiBsaXN0ID0gc1RocmVhZHMuZ2V0KGNvbnRleHQpOwotICAgICAgICBpZiAobGlzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmb3IgKEhhbmRsZXJUaHJlYWQgdGhyZWFkIDogbGlzdCkgewotICAgICAgICAgICAgICAgIHRocmVhZC5xdWl0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxpc3QuY2xlYXIoKTsKLSAgICAgICAgICAgIHNUaHJlYWRzLnJlbW92ZShjb250ZXh0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tIERlbGVnYXRlIG1ldGhvZHMKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHJ1bihIYW5kbGVyVGhyZWFkIHRoZVRocmVhZCkgewotICAgICAgICAvLyByZWNvcmQgdGhlIHRocmVhZCBzbyB0aGF0IGl0IGNhbiBiZSBxdWl0KCkgb24gY2xlYW4gdXAuCi0gICAgICAgIEJyaWRnZUNvbnRleHQgY29udGV4dCA9IFJlbmRlckFjdGlvbi5nZXRDdXJyZW50Q29udGV4dCgpOwotICAgICAgICBMaXN0PEhhbmRsZXJUaHJlYWQ+IGxpc3QgPSBzVGhyZWFkcy5nZXQoY29udGV4dCk7Ci0gICAgICAgIGlmIChsaXN0ID09IG51bGwpIHsKLSAgICAgICAgICAgIGxpc3QgPSBuZXcgQXJyYXlMaXN0PEhhbmRsZXJUaHJlYWQ+KCk7Ci0gICAgICAgICAgICBzVGhyZWFkcy5wdXQoY29udGV4dCwgbGlzdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBsaXN0LmFkZCh0aGVUaHJlYWQpOwotCi0gICAgICAgIC8vIC0tLS0gU1RBUlQgREVGQVVMVCBJTVBMRU1FTlRBVElPTi4KLQotICAgICAgICB0aGVUaHJlYWQubVRpZCA9IFByb2Nlc3MubXlUaWQoKTsKLSAgICAgICAgTG9vcGVyLnByZXBhcmUoKTsKLSAgICAgICAgc3luY2hyb25pemVkICh0aGVUaHJlYWQpIHsKLSAgICAgICAgICAgIHRoZVRocmVhZC5tTG9vcGVyID0gTG9vcGVyLm15TG9vcGVyKCk7Ci0gICAgICAgICAgICB0aGVUaHJlYWQubm90aWZ5QWxsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgUHJvY2Vzcy5zZXRUaHJlYWRQcmlvcml0eSh0aGVUaHJlYWQubVByaW9yaXR5KTsKLSAgICAgICAgdGhlVGhyZWFkLm9uTG9vcGVyUHJlcGFyZWQoKTsKLSAgICAgICAgTG9vcGVyLmxvb3AoKTsKLSAgICAgICAgdGhlVGhyZWFkLm1UaWQgPSAtMTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL29zL0hhbmRsZXJfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvSGFuZGxlcl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTUyYzhhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvSGFuZGxlcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5vczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotCi0vKioKLSAqIERlbGVnYXRlIG92ZXJyaWRpbmcgc2VsZWN0ZWQgbWV0aG9kcyBvZiBhbmRyb2lkLm9zLkhhbmRsZXIKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHNlbGVjdGVkIG1ldGhvZHMgb2YgSGFuZGxlciBoYXZlIGJlZW4gcmVwbGFjZWQKLSAqIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBIYW5kbGVyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0tLS0tIERlbGVnYXRlIG1ldGhvZHMKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIHNlbmRNZXNzYWdlQXRUaW1lKEhhbmRsZXIgaGFuZGxlciwgTWVzc2FnZSBtc2csIGxvbmcgdXB0aW1lTWlsbGlzKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgY2FsbGJhY2sKLSAgICAgICAgSUhhbmRsZXJDYWxsYmFjayBjYWxsYmFjayA9IHNDYWxsYmFja3MuZ2V0KCk7Ci0gICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICBjYWxsYmFjay5zZW5kTWVzc2FnZUF0VGltZShoYW5kbGVyLCBtc2csIHVwdGltZU1pbGxpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0gRGVsZWdhdGUgaW1wbGVtZW50YXRpb24KLQotICAgIHB1YmxpYyBpbnRlcmZhY2UgSUhhbmRsZXJDYWxsYmFjayB7Ci0gICAgICAgIHZvaWQgc2VuZE1lc3NhZ2VBdFRpbWUoSGFuZGxlciBoYW5kbGVyLCBNZXNzYWdlIG1zZywgbG9uZyB1cHRpbWVNaWxsaXMpOwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFRocmVhZExvY2FsPElIYW5kbGVyQ2FsbGJhY2s+IHNDYWxsYmFja3MgPQotICAgICAgICBuZXcgVGhyZWFkTG9jYWw8SUhhbmRsZXJDYWxsYmFjaz4oKTsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRDYWxsYmFjayhJSGFuZGxlckNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIHNDYWxsYmFja3Muc2V0KGNhbGxiYWNrKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvTG9vcGVyX0FjY2Vzc29yLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL29zL0xvb3Blcl9BY2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWYzZTQ3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvTG9vcGVyX0FjY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2UgYW5kcm9pZC5vczsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotCi0vKioKLSAqIENsYXNzIGFsbG93aW5nIGFjY2VzcyB0byBwYWNrYWdlLXByb3RlY3RlZCBtZXRob2RzL2ZpZWxkcy4KLSAqLwotcHVibGljIGNsYXNzIExvb3Blcl9BY2Nlc3NvciB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2xlYW51cFRocmVhZCgpIHsKLSAgICAgICAgLy8gY2xlYW4gdXAgdGhlIGxvb3BlcgotICAgICAgICBMb29wZXIuc1RocmVhZExvY2FsLnJlbW92ZSgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgRmllbGQgc01haW5Mb29wZXIgPSBMb29wZXIuY2xhc3MuZ2V0RGVjbGFyZWRGaWVsZCgic01haW5Mb29wZXIiKTsKLSAgICAgICAgICAgIHNNYWluTG9vcGVyLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0gICAgICAgICAgICBzTWFpbkxvb3Blci5zZXQobnVsbCwgbnVsbCk7Ci0gICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGNhdGNoUmVmbGVjdGlvbkV4Y2VwdGlvbigpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgY2F0Y2hSZWZsZWN0aW9uRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0gY2F0Y2ggKE5vU3VjaEZpZWxkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGNhdGNoUmVmbGVjdGlvbkV4Y2VwdGlvbigpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGNhdGNoUmVmbGVjdGlvbkV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNhdGNoUmVmbGVjdGlvbkV4Y2VwdGlvbigpIHsKLSAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL29zL1NlcnZpY2VNYW5hZ2VyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL29zL1NlcnZpY2VNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNjhlZTIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9vcy9TZXJ2aWNlTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5vczsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBTZXJ2aWNlTWFuYWdlciB7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIGEgc2VydmljZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgotICAgICAqCi0gICAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gZ2V0Ci0gICAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgc2VydmljZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgdGhlIHNlcnZpY2UgZG9lc24ndCBleGlzdAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgSUJpbmRlciBnZXRTZXJ2aWNlKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBsYWNlIGEgbmV3IEBhIHNlcnZpY2UgY2FsbGVkIEBhIG5hbWUgaW50byB0aGUgc2VydmljZQotICAgICAqIG1hbmFnZXIuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgbmV3IHNlcnZpY2UKLSAgICAgKiBAcGFyYW0gc2VydmljZSB0aGUgc2VydmljZSBvYmplY3QKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkU2VydmljZShTdHJpbmcgbmFtZSwgSUJpbmRlciBzZXJ2aWNlKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSBhbiBleGlzdGluZyBzZXJ2aWNlIGNhbGxlZCBAYSBuYW1lIGZyb20gdGhlCi0gICAgICogc2VydmljZSBtYW5hZ2VyLiAgTm9uLWJsb2NraW5nLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgSUJpbmRlciBjaGVja1NlcnZpY2UoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIGEgbGlzdCBvZiBhbGwgY3VycmVudGx5IHJ1bm5pbmcgc2VydmljZXMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBsaXN0U2VydmljZXMoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gYWN0dWFsIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzb21ldGltZXMsIHNvIGl0J3Mgb2sKLSAgICAgICAgLy8gdG8gcmV0dXJuIG51bGwgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGlzIG9ubHkgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHByb2Nlc3MgaXMgZmlyc3QgYmVpbmcgYnJvdWdodAotICAgICAqIHVwIGFuZCBib3VuZCBieSB0aGUgYWN0aXZpdHkgbWFuYWdlci4gVGhlcmUgaXMgb25seSBvbmUgdGhyZWFkIGluIHRoZSBwcm9jZXNzCi0gICAgICogYXQgdGhhdCB0aW1lLCBzbyBubyBsb2NraW5nIGlzIGRvbmUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY2FjaGUgdGhlIGNhY2hlIG9mIHNlcnZpY2UgcmVmZXJlbmNlcwotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGluaXRTZXJ2aWNlQ2FjaGUoTWFwPFN0cmluZywgSUJpbmRlcj4gY2FjaGUpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvU3lzdGVtQ2xvY2tfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvU3lzdGVtQ2xvY2tfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1OTRmNy4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL29zL1N5c3RlbUNsb2NrX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5vczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi0vKioKLSAqIERlbGVnYXRlIGltcGxlbWVudGluZyB0aGUgbmF0aXZlIG1ldGhvZHMgb2YgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jawotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIFN5c3RlbUNsb2NrIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICogQmVjYXVzZSBpdCdzIGEgc3RhdGVsZXNzIGNsYXNzIHRvIHN0YXJ0IHdpdGgsIHRoZXJlJ3Mgbm8gbmVlZCB0byBrZWVwIGEge0BsaW5rIERlbGVnYXRlTWFuYWdlcn0KLSAqIGFyb3VuZCB0byBtYXAgaW50IHRvIGluc3RhbmNlIG9mIHRoZSBkZWxlZ2F0ZS4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTeXN0ZW1DbG9ja19EZWxlZ2F0ZSB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyBzQm9vdFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICBwcml2YXRlIHN0YXRpYyBsb25nIHNCb290VGltZU5hbm8gPSBTeXN0ZW0ubmFub1RpbWUoKTsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIHNldEN1cnJlbnRUaW1lTWlsbGlzKGxvbmcgbWlsbGlzKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgbWlsbGlzZWNvbmRzIHNpbmNlIGJvb3QsIG5vdCBjb3VudGluZyB0aW1lIHNwZW50IGluIGRlZXAgc2xlZXAuCi0gICAgICogPGI+Tm90ZTo8L2I+IFRoaXMgdmFsdWUgbWF5IGdldCByZXNldCBvY2Nhc2lvbmFsbHkgKGJlZm9yZSBpdCB3b3VsZAotICAgICAqIG90aGVyd2lzZSB3cmFwIGFyb3VuZCkuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIG1pbGxpc2Vjb25kcyBvZiBub24tc2xlZXAgdXB0aW1lIHNpbmNlIGJvb3QuCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGxvbmcgdXB0aW1lTWlsbGlzKCkgewotICAgICAgICByZXR1cm4gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzQm9vdFRpbWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBtaWxsaXNlY29uZHMgc2luY2UgYm9vdCwgaW5jbHVkaW5nIHRpbWUgc3BlbnQgaW4gc2xlZXAuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIGVsYXBzZWQgbWlsbGlzZWNvbmRzIHNpbmNlIGJvb3QuCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGxvbmcgZWxhcHNlZFJlYWx0aW1lKCkgewotICAgICAgICByZXR1cm4gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzQm9vdFRpbWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBuYW5vc2Vjb25kcyBzaW5jZSBib290LCBpbmNsdWRpbmcgdGltZSBzcGVudCBpbiBzbGVlcC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gZWxhcHNlZCBuYW5vc2Vjb25kcyBzaW5jZSBib290LgotICAgICAqLwotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBsb25nIGVsYXBzZWRSZWFsdGltZU5hbm9zKCkgewotICAgICAgICByZXR1cm4gU3lzdGVtLm5hbm9UaW1lKCkgLSBzQm9vdFRpbWVOYW5vOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgbWlsbGlzZWNvbmRzIHJ1bm5pbmcgaW4gdGhlIGN1cnJlbnQgdGhyZWFkLgotICAgICAqCi0gICAgICogQHJldHVybiBlbGFwc2VkIG1pbGxpc2Vjb25kcyBpbiB0aGUgdGhyZWFkCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGxvbmcgY3VycmVudFRocmVhZFRpbWVNaWxsaXMoKSB7Ci0gICAgICAgIHJldHVybiBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIG1pY3Jvc2Vjb25kcyBydW5uaW5nIGluIHRoZSBjdXJyZW50IHRocmVhZC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gZWxhcHNlZCBtaWNyb3NlY29uZHMgaW4gdGhlIHRocmVhZAotICAgICAqCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgbG9uZyBjdXJyZW50VGhyZWFkVGltZU1pY3JvKCkgewotICAgICAgICByZXR1cm4gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKiAxMDAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgY3VycmVudCB3YWxsIHRpbWUgaW4gIG1pY3Jvc2Vjb25kcy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gZWxhcHNlZCBtaWNyb3NlY29uZHMgaW4gd2FsbCB0aW1lCi0gICAgICoKLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBsb25nIGN1cnJlbnRUaW1lTWljcm8oKSB7Ci0gICAgICAgIHJldHVybiBlbGFwc2VkUmVhbHRpbWUoKSAqIDEwMDA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC90ZXh0L0FuZHJvaWRCaWRpX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3RleHQvQW5kcm9pZEJpZGlfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTczZmEwZS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3RleHQvQW5kcm9pZEJpZGlfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudGV4dDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuQmlkaTsKLQotCi0vKioKLSAqIERlbGVnYXRlIHVzZWQgdG8gcHJvdmlkZSBuZXcgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBuYXRpdmUgbWV0aG9kcyBvZiB7QGxpbmsgQW5kcm9pZEJpZGl9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgIG1ldGhvZHMgb2YgQW5kcm9pZEJpZGkgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBBbmRyb2lkQmlkaV9EZWxlZ2F0ZSB7Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IHJ1bkJpZGkoaW50IGRpciwgY2hhcltdIGNoYXJzLCBieXRlW10gY2hhckluZm8sIGludCBjb3VudCwKLSAgICAgICAgICAgIGJvb2xlYW4gaGF2ZUluZm8pIHsKLQotICAgICAgICBzd2l0Y2ggKGRpcikgewotICAgICAgICBjYXNlIDA6IC8vIExheW91dC5ESVJfUkVRVUVTVF9MVFIKLSAgICAgICAgY2FzZSAxOiAvLyBMYXlvdXQuRElSX1JFUVVFU1RfUlRMCi0gICAgICAgICAgICBicmVhazsgIC8vIE5vIGNoYW5nZS4KLSAgICAgICAgY2FzZSAtMToKLSAgICAgICAgICAgIGRpciA9IEJpZGkuTEVWRUxfREVGQVVMVF9MVFI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAtMjoKLSAgICAgICAgICAgIGRpciA9IEJpZGkuTEVWRUxfREVGQVVMVF9SVEw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIEludmFsaWQgY29kZS4gTG9nIGVycm9yLCBhc3N1bWUgTEVWRUxfREVGQVVMVF9MVFIgYW5kIGNvbnRpbnVlLgotICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfQlJPS0VOLCAiSW52YWxpZCBkaXJlY3Rpb24gZmxhZyIsIG51bGwpOwotICAgICAgICAgICAgZGlyID0gQmlkaS5MRVZFTF9ERUZBVUxUX0xUUjsKLSAgICAgICAgfQotICAgICAgICBCaWRpIGJpZGkgPSBuZXcgQmlkaShjaGFycywgMCwgbnVsbCwgMCwgY291bnQsIGRpcik7Ci0gICAgICAgIGlmIChjaGFySW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICBjaGFySW5mb1tpXSA9IGJpZGkuZ2V0TGV2ZWxBdChpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYmlkaS5nZXRQYXJhTGV2ZWwoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3RleHQvZm9ybWF0L0RhdGVGb3JtYXRfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdGV4dC9mb3JtYXQvRGF0ZUZvcm1hdF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2QxYTY5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdGV4dC9mb3JtYXQvRGF0ZUZvcm1hdF9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC50ZXh0LmZvcm1hdDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotCi0KLS8qKgotICogRGVsZWdhdGUgdXNlZCB0byBwcm92aWRlIG5ldyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIHtAbGluayBEYXRlRm9ybWF0fQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIERhdGVGb3JtYXQgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBEYXRlRm9ybWF0X0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGlzMjRIb3VyRm9ybWF0KENvbnRleHQgY29udGV4dCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC90ZXh0L2Zvcm1hdC9UaW1lX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3RleHQvZm9ybWF0L1RpbWVfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVjZDY4Ny4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3RleHQvZm9ybWF0L1RpbWVfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudGV4dC5mb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLlVua25vd25Gb3JtYXRDb252ZXJzaW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLS8qKgotICogRGVsZWdhdGUgdXNlZCB0byBwcm92aWRlIG5ldyBpbXBsZW1lbnRhdGlvbiBmb3IgbmF0aXZlIG1ldGhvZHMgb2Yge0BsaW5rIFRpbWV9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCBzb21lIG5hdGl2ZSBtZXRob2RzIG9mIFRpbWUgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGNhbGxzIHRvCi0gKiBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFRpbWVfRGVsZWdhdGUgewotCi0gICAgLy8gUmVnZXggdG8gbWF0Y2ggb2RkIG51bWJlciBvZiAnJScuCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKCIoPzwhJSkoJSUpKiUoPyElKSIpOwotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZyBmb3JtYXQxKFRpbWUgdGhpc1RpbWUsIFN0cmluZyBmb3JtYXQpIHsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gQ2hhbmdlIHRoZSBmb3JtYXQgYnkgYWRkaW5nIGNoYW5naW5nICclJyB0byAiJTEkdCIuIFRoaXMgaXMgcmVxdWlyZWQgdG8gdGVsbCB0aGUKLSAgICAgICAgICAgIC8vIGZvcm1hdHRlciB3aGljaCBhcmd1bWVudCB0byB1c2UgZnJvbSB0aGUgYXJndW1lbnQgbGlzdC4gJyUlJyBpcyBsZWZ0IGFzIGlzLiBJbiB0aGUKLSAgICAgICAgICAgIC8vIHJlcGxhY2VtZW50IHN0cmluZywgJDAgcmVmZXJzIHRvIG1hdGNoZWQgcGF0dGVybi4gXFwxIG1lYW5zICcxJywgd3JpdHRlbiB0aGlzIHdheSB0bwotICAgICAgICAgICAgLy8gc2VwYXJhdGUgaXQgZnJvbSAwLiBcXCQgbWVhbnMgJyQnLCB3cml0dGVuIHRoaXMgd2F5IHRvIHN1cHByZXNzIHRoZSBzcGVjaWFsIG1lYW5pbmcKLSAgICAgICAgICAgIC8vIG9mICQuCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgcC5tYXRjaGVyKGZvcm1hdCkucmVwbGFjZUFsbCgiJDBcXDFcXCR0IiksCi0gICAgICAgICAgICAgICAgICAgIHRpbWVUb0NhbGVuZGFyKHRoaXNUaW1lLCBDYWxlbmRhci5nZXRJbnN0YW5jZSgpKSk7Ci0gICAgICAgIH0gY2F0Y2ggKFVua25vd25Gb3JtYXRDb252ZXJzaW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5maWRlbGl0eVdhcm5pbmcoTGF5b3V0TG9nLlRBR19TVFJGVElNRSwgIlVucmVjb2duaXplZCBmb3JtYXQiLCBlLCBmb3JtYXQpOwotICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIENhbGVuZGFyIHRpbWVUb0NhbGVuZGFyKFRpbWUgdGltZSwgQ2FsZW5kYXIgY2FsZW5kYXIpIHsKLSAgICAgICAgY2FsZW5kYXIuc2V0KHRpbWUueWVhciwgdGltZS5tb250aCwgdGltZS5tb250aERheSwgdGltZS5ob3VyLCB0aW1lLm1pbnV0ZSwgdGltZS5zZWNvbmQpOwotICAgICAgICByZXR1cm4gY2FsZW5kYXI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3V0aWwvQnJpZGdlWG1sUHVsbEF0dHJpYnV0ZXMuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdXRpbC9CcmlkZ2VYbWxQdWxsQXR0cmlidXRlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWM1YjAyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdXRpbC9CcmlkZ2VYbWxQdWxsQXR0cmlidXRlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudXRpbDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZW5kZXJSZXNvdXJjZXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlVmFsdWU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5YbWxVdGlsczsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZUNvbnN0YW50czsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQuQnJpZGdlQ29udGV4dDsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotCi1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKLQotLyoqCi0gKiBBIGNvcnJlY3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBBdHRyaWJ1dGVTZXR9IGludGVyZmFjZSBvbiB0b3Agb2YgYSBYbWxQdWxsUGFyc2VyCi0gKi8KLXB1YmxpYyBjbGFzcyBCcmlkZ2VYbWxQdWxsQXR0cmlidXRlcyBleHRlbmRzIFhtbFB1bGxBdHRyaWJ1dGVzIHsKLQotICAgIHByaXZhdGUgZmluYWwgQnJpZGdlQ29udGV4dCBtQ29udGV4dDsKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVBsYXRmb3JtRmlsZTsKLQotICAgIHB1YmxpYyBCcmlkZ2VYbWxQdWxsQXR0cmlidXRlcyhYbWxQdWxsUGFyc2VyIHBhcnNlciwgQnJpZGdlQ29udGV4dCBjb250ZXh0LAotICAgICAgICAgICAgYm9vbGVhbiBwbGF0Zm9ybUZpbGUpIHsKLSAgICAgICAgc3VwZXIocGFyc2VyKTsKLSAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtUGxhdGZvcm1GaWxlID0gcGxhdGZvcm1GaWxlOwotICAgIH0KLQotICAgIC8qCi0gICAgICogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgYW5kcm9pZC51dGlsLlhtbFB1bGxBdHRyaWJ1dGVzI2dldEF0dHJpYnV0ZU5hbWVSZXNvdXJjZShpbnQpCi0gICAgICoKLSAgICAgKiBUaGlzIG1ldGhvZHMgbXVzdCByZXR1cm4gY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLjxuYW1lPiBtYXRjaGluZwotICAgICAqIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuCi0gICAgICogSXQgcmV0dXJucyAwIGlmIGl0IGRvZXNuJ3QgZmluZCBhbnl0aGluZy4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZU5hbWVSZXNvdXJjZShpbnQgaW5kZXgpIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBhdHRyaWJ1dGUgbmFtZS4KLSAgICAgICAgU3RyaW5nIG5hbWUgPSBnZXRBdHRyaWJ1dGVOYW1lKGluZGV4KTsKLQotICAgICAgICAvLyBnZXQgdGhlIGF0dHJpYnV0ZSBuYW1lc3BhY2UKLSAgICAgICAgU3RyaW5nIG5zID0gbVBhcnNlci5nZXRBdHRyaWJ1dGVOYW1lc3BhY2UoaW5kZXgpOwotCi0gICAgICAgIGlmIChCcmlkZ2VDb25zdGFudHMuTlNfUkVTT1VSQ0VTLmVxdWFscyhucykpIHsKLSAgICAgICAgICAgIEludGVnZXIgdiA9IEJyaWRnZS5nZXRSZXNvdXJjZUlkKFJlc291cmNlVHlwZS5BVFRSLCBuYW1lKTsKLSAgICAgICAgICAgIGlmICh2ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdi5pbnRWYWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoaXMgaXMgbm90IGFuIGF0dHJpYnV0ZSBpbiB0aGUgYW5kcm9pZCBuYW1lc3BhY2UsIHdlIHF1ZXJ5IHRoZSBjdXN0b212aWV3bG9hZGVyLCBpZgotICAgICAgICAvLyB0aGUgbmFtZXNwYWNlcyBtYXRjaC4KLSAgICAgICAgaWYgKG1Db250ZXh0LmdldFByb2plY3RDYWxsYmFjaygpLmdldE5hbWVzcGFjZSgpLmVxdWFscyhucykpIHsKLSAgICAgICAgICAgIEludGVnZXIgdiA9IG1Db250ZXh0LmdldFByb2plY3RDYWxsYmFjaygpLmdldFJlc291cmNlSWQoUmVzb3VyY2VUeXBlLkFUVFIsIG5hbWUpOwotICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiB2LmludFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZUxpc3RWYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLAotICAgICAgICAgICAgU3RyaW5nW10gb3B0aW9ucywgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShuYW1lc3BhY2UsIGF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHIgPSBnZXRSZXNvdXJjZVZhbHVlKHZhbHVlKTsKLQotICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gci5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gWG1sVXRpbHMuY29udmVydFZhbHVlVG9MaXN0KHZhbHVlLCBvcHRpb25zLCBkZWZhdWx0VmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRBdHRyaWJ1dGVCb29sZWFuVmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwKLSAgICAgICAgICAgIGJvb2xlYW4gZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IGdldEF0dHJpYnV0ZVZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlKTsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgciA9IGdldFJlc291cmNlVmFsdWUodmFsdWUpOwotCi0gICAgICAgICAgICBpZiAociAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSByLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBYbWxVdGlscy5jb252ZXJ0VmFsdWVUb0Jvb2xlYW4odmFsdWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlUmVzb3VyY2VWYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IGdldEF0dHJpYnV0ZVZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlKTsKLQotICAgICAgICByZXR1cm4gcmVzb2x2ZVJlc291cmNlVmFsdWUodmFsdWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVJbnRWYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLAotICAgICAgICAgICAgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShuYW1lc3BhY2UsIGF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHIgPSBnZXRSZXNvdXJjZVZhbHVlKHZhbHVlKTsKLQotICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gci5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gWG1sVXRpbHMuY29udmVydFZhbHVlVG9JbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlVW5zaWduZWRJbnRWYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLAotICAgICAgICAgICAgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShuYW1lc3BhY2UsIGF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHIgPSBnZXRSZXNvdXJjZVZhbHVlKHZhbHVlKTsKLQotICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gci5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gWG1sVXRpbHMuY29udmVydFZhbHVlVG9VbnNpZ25lZEludCh2YWx1ZSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldEF0dHJpYnV0ZUZsb2F0VmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwKLSAgICAgICAgICAgIGZsb2F0IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICBTdHJpbmcgcyA9IGdldEF0dHJpYnV0ZVZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlKTsKLSAgICAgICAgaWYgKHMgIT0gbnVsbCkgewotICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSByID0gZ2V0UmVzb3VyY2VWYWx1ZShzKTsKLQotICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHMgPSByLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBGbG9hdC5wYXJzZUZsb2F0KHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZUxpc3RWYWx1ZShpbnQgaW5kZXgsCi0gICAgICAgICAgICBTdHJpbmdbXSBvcHRpb25zLCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBYbWxVdGlscy5jb252ZXJ0VmFsdWVUb0xpc3QoCi0gICAgICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZShpbmRleCksIG9wdGlvbnMsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0QXR0cmlidXRlQm9vbGVhblZhbHVlKGludCBpbmRleCwgYm9vbGVhbiBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gZ2V0QXR0cmlidXRlVmFsdWUoaW5kZXgpOwotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSByID0gZ2V0UmVzb3VyY2VWYWx1ZSh2YWx1ZSk7Ci0KLSAgICAgICAgICAgIGlmIChyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHIuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIFhtbFV0aWxzLmNvbnZlcnRWYWx1ZVRvQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVSZXNvdXJjZVZhbHVlKGludCBpbmRleCwgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShpbmRleCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc29sdmVSZXNvdXJjZVZhbHVlKHZhbHVlLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlSW50VmFsdWUoaW50IGluZGV4LCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IGdldEF0dHJpYnV0ZVZhbHVlKGluZGV4KTsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgciA9IGdldFJlc291cmNlVmFsdWUodmFsdWUpOwotCi0gICAgICAgICAgICBpZiAociAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSByLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBYbWxVdGlscy5jb252ZXJ0VmFsdWVUb0ludCh2YWx1ZSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVVbnNpZ25lZEludFZhbHVlKGludCBpbmRleCwgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShpbmRleCk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHIgPSBnZXRSZXNvdXJjZVZhbHVlKHZhbHVlKTsKLQotICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gci5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gWG1sVXRpbHMuY29udmVydFZhbHVlVG9VbnNpZ25lZEludCh2YWx1ZSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldEF0dHJpYnV0ZUZsb2F0VmFsdWUoaW50IGluZGV4LCBmbG9hdCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgU3RyaW5nIHMgPSBnZXRBdHRyaWJ1dGVWYWx1ZShpbmRleCk7Ci0gICAgICAgIGlmIChzICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgciA9IGdldFJlc291cmNlVmFsdWUocyk7Ci0KLSAgICAgICAgICAgIGlmIChyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzID0gci5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gRmxvYXQucGFyc2VGbG9hdChzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgLy8gLS0gcHJpdmF0ZSBoZWxwZXIgbWV0aG9kcwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHJlc29sdmVkIHtAbGluayBSZXNvdXJjZVZhbHVlfSBmcm9tIGEgZ2l2ZW4gdmFsdWUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBSZXNvdXJjZVZhbHVlIGdldFJlc291cmNlVmFsdWUoU3RyaW5nIHZhbHVlKSB7Ci0gICAgICAgIC8vIG5vdyBsb29rIGZvciB0aGlzIHBhcnRpY3VsYXIgdmFsdWUKLSAgICAgICAgUmVuZGVyUmVzb3VyY2VzIHJlc291cmNlcyA9IG1Db250ZXh0LmdldFJlbmRlclJlc291cmNlcygpOwotICAgICAgICByZXR1cm4gcmVzb3VyY2VzLnJlc29sdmVSZXNWYWx1ZShyZXNvdXJjZXMuZmluZFJlc1ZhbHVlKHZhbHVlLCBtUGxhdGZvcm1GaWxlKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVzb2x2ZXMgYW5kIHJldHVybiBhIHZhbHVlIHRvIGl0cyBhc3NvY2lhdGVkIGludGVnZXIuCi0gICAgICovCi0gICAgcHJpdmF0ZSBpbnQgcmVzb2x2ZVJlc291cmNlVmFsdWUoU3RyaW5nIHZhbHVlLCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIFJlc291cmNlVmFsdWUgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgaWYgKHJlc291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIEludGVnZXIgaWQgPSBudWxsOwotICAgICAgICAgICAgaWYgKG1QbGF0Zm9ybUZpbGUgfHwgcmVzb3VyY2UuaXNGcmFtZXdvcmsoKSkgewotICAgICAgICAgICAgICAgIGlkID0gQnJpZGdlLmdldFJlc291cmNlSWQocmVzb3VyY2UuZ2V0UmVzb3VyY2VUeXBlKCksIHJlc291cmNlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlkID0gbUNvbnRleHQuZ2V0UHJvamVjdENhbGxiYWNrKCkuZ2V0UmVzb3VyY2VJZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmdldFJlc291cmNlVHlwZSgpLCByZXNvdXJjZS5nZXROYW1lKCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBpZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC91dGlsL0Zsb2F0TWF0aF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC91dGlsL0Zsb2F0TWF0aF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjRjNjBiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdXRpbC9GbG9hdE1hdGhfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnV0aWw7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuRGVsZWdhdGVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGFuZHJvaWQudXRpbC5GbG9hdE1hdGgKLSAqCi0gKiBUaHJvdWdoIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wsIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kcyBvZiBGbG9hdE1hdGggaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKiBCZWNhdXNlIGl0J3MgYSBzdGF0ZWxlc3MgY2xhc3MgdG8gc3RhcnQgd2l0aCwgdGhlcmUncyBubyBuZWVkIHRvIGtlZXAgYSB7QGxpbmsgRGVsZWdhdGVNYW5hZ2VyfQotICogYXJvdW5kIHRvIG1hcCBpbnQgdG8gaW5zdGFuY2Ugb2YgdGhlIGRlbGVnYXRlLgotICoKLSAqLwotLypwYWNrYWdlKi8gZmluYWwgY2xhc3MgRmxvYXRNYXRoX0RlbGVnYXRlIHsKLQotICAgIC8qKiBQcmV2ZW50cyBpbnN0YW50aWF0aW9uLiAqLwotICAgIHByaXZhdGUgRmxvYXRNYXRoX0RlbGVnYXRlKCkge30KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGZsb2F0IGNvbnZlcnNpb24gb2YgdGhlIG1vc3QgcG9zaXRpdmUgKGkuZS4gY2xvc2VzdCB0bwotICAgICAqIHBvc2l0aXZlIGluZmluaXR5KSBpbnRlZ2VyIHZhbHVlIHdoaWNoIGlzIGxlc3MgdGhhbiB0aGUgYXJndW1lbnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUgdG8gYmUgY29udmVydGVkCi0gICAgICogQHJldHVybiB0aGUgZmxvb3Igb2YgdmFsdWUKLSAgICAgKi8KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXQgZmxvb3IoZmxvYXQgdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIChmbG9hdClNYXRoLmZsb29yKHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBmbG9hdCBjb252ZXJzaW9uIG9mIHRoZSBtb3N0IG5lZ2F0aXZlIChpLmUuIGNsb3Nlc3QgdG8KLSAgICAgKiBuZWdhdGl2ZSBpbmZpbml0eSkgaW50ZWdlciB2YWx1ZSB3aGljaCBpcyBncmVhdGVyIHRoYW4gdGhlIGFyZ3VtZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlIHRvIGJlIGNvbnZlcnRlZAotICAgICAqIEByZXR1cm4gdGhlIGNlaWxpbmcgb2YgdmFsdWUKLSAgICAgKi8KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmxvYXQgY2VpbChmbG9hdCB2YWx1ZSkgewotICAgICAgICByZXR1cm4gKGZsb2F0KU1hdGguY2VpbCh2YWx1ZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY2xvc2VzdCBmbG9hdCBhcHByb3hpbWF0aW9uIG9mIHRoZSBzaW5lIG9mIHRoZSBhcmd1bWVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhbmdsZSB0byBjb21wdXRlIHRoZSBjb3NpbmUgb2YsIGluIHJhZGlhbnMKLSAgICAgKiBAcmV0dXJuIHRoZSBzaW5lIG9mIGFuZ2xlCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljICBmbG9hdCBzaW4oZmxvYXQgYW5nbGUpIHsKLSAgICAgICAgcmV0dXJuIChmbG9hdClNYXRoLnNpbihhbmdsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY2xvc2VzdCBmbG9hdCBhcHByb3hpbWF0aW9uIG9mIHRoZSBjb3NpbmUgb2YgdGhlIGFyZ3VtZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIGFuZ2xlIHRvIGNvbXB1dGUgdGhlIGNvc2luZSBvZiwgaW4gcmFkaWFucwotICAgICAqIEByZXR1cm4gdGhlIGNvc2luZSBvZiBhbmdsZQotICAgICAqLwotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBjb3MoZmxvYXQgYW5nbGUpIHsKLSAgICAgICAgcmV0dXJuIChmbG9hdClNYXRoLmNvcyhhbmdsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY2xvc2VzdCBmbG9hdCBhcHByb3hpbWF0aW9uIG9mIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUKLSAgICAgKiBhcmd1bWVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZSB0byBjb21wdXRlIHNxcnQgb2YKLSAgICAgKiBAcmV0dXJuIHRoZSBzcXVhcmUgcm9vdCBvZiB2YWx1ZQotICAgICAqLwotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBmbG9hdCBzcXJ0KGZsb2F0IHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiAoZmxvYXQpTWF0aC5zcXJ0KHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGZsb2F0IGFwcHJveGltYXRpb24gb2YgdGhlIHJhaXNpbmcgImUiIHRvIHRoZSBwb3dlcgotICAgICAqIG9mIHRoZSBhcmd1bWVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB2YWx1ZSB0byBjb21wdXRlIHRoZSBleHBvbmVudGlhbCBvZgotICAgICAqIEByZXR1cm4gdGhlIGV4cG9uZW50aWFsIG9mIHZhbHVlCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IGV4cChmbG9hdCB2YWx1ZSkgewotICAgICAgICByZXR1cm4gKGZsb2F0KU1hdGguZXhwKHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGZsb2F0IGFwcHJveGltYXRpb24gb2YgdGhlIHJlc3VsdCBvZiByYWlzaW5nIHtAY29kZQotICAgICAqIHh9IHRvIHRoZSBwb3dlciBvZiB7QGNvZGUgeX0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0geCB0aGUgYmFzZSBvZiB0aGUgb3BlcmF0aW9uLgotICAgICAqIEBwYXJhbSB5IHRoZSBleHBvbmVudCBvZiB0aGUgb3BlcmF0aW9uLgotICAgICAqIEByZXR1cm4ge0Bjb2RlIHh9IHRvIHRoZSBwb3dlciBvZiB7QGNvZGUgeX0uCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IHBvdyhmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIHJldHVybiAoZmxvYXQpTWF0aC5wb3coeCwgeSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB7QGNvZGUgc3FydCh9PGk+e0Bjb2RlIHh9PC9pPjxzdXA+e0Bjb2RlIDJ9PC9zdXA+e0Bjb2RlICt9IDxpPgotICAgICAqIHtAY29kZSB5fTwvaT48c3VwPntAY29kZSAyfTwvc3VwPntAY29kZSApfS4KLSAgICAgKgotICAgICAqIEBwYXJhbSB4IGEgZmxvYXQgbnVtYmVyCi0gICAgICogQHBhcmFtIHkgYSBmbG9hdCBudW1iZXIKLSAgICAgKiBAcmV0dXJuIHRoZSBoeXBvdGVudXNlCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIGZsb2F0IGh5cG90KGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgcmV0dXJuIChmbG9hdClNYXRoLnNxcnQoeCp4ICsgeSp5KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3V0aWwvTG9nX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3V0aWwvTG9nX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDMyYWIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC91dGlsL0xvZ19EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC51dGlsOwotCi1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1jbGFzcyBMb2dfRGVsZWdhdGUgewotICAgIC8vIHRvIHJlcGxpY2F0ZSBwcmVmaXggdmlzaWJsZSB3aGVuIHVzaW5nICdhZGIgbG9nY2F0JwotICAgIHByaXZhdGUgc3RhdGljIGNoYXIgcHJpb3JpdHlDaGFyKGludCBwcmlvcml0eSkgewotICAgICAgICBzd2l0Y2ggKHByaW9yaXR5KSB7Ci0gICAgICAgICAgICBjYXNlIExvZy5WRVJCT1NFOgotICAgICAgICAgICAgICAgIHJldHVybiAnVic7Ci0gICAgICAgICAgICBjYXNlIExvZy5ERUJVRzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0QnOwotICAgICAgICAgICAgY2FzZSBMb2cuSU5GTzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0knOwotICAgICAgICAgICAgY2FzZSBMb2cuV0FSTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1cnOwotICAgICAgICAgICAgY2FzZSBMb2cuRVJST1I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdFJzsKLSAgICAgICAgICAgIGNhc2UgTG9nLkFTU0VSVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0EnOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJz8nOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgc3RhdGljIGludCBwcmludGxuX25hdGl2ZShpbnQgYnVmSUQsIGludCBwcmlvcml0eSwgU3RyaW5nIHRhZywgU3RyaW5nIG1zZ3MpIHsKLSAgICAgICAgU3RyaW5nIHByZWZpeCA9IHByaW9yaXR5Q2hhcihwcmlvcml0eSkgKyAiLyIgKyB0YWcgKyAiOiAiOwotICAgICAgICBmb3IgKFN0cmluZyBtc2c6IG1zZ3Muc3BsaXQoIlxuIikpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwcmVmaXggKyBtc2cpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC91dGlsL0xydUNhY2hlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3V0aWwvTHJ1Q2FjaGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIwODYwNi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3V0aWwvTHJ1Q2FjaGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEJFR0lOIExBWU9VVExJQiBDSEFOR0UKLSAqIFRoaXMgaXMgYSBjdXN0b20gdmVyc2lvbiB0aGF0IGRvZXNuJ3QgdXNlIHRoZSBub24gc3RhbmRhcmQgTGlua2VkSGFzaE1hcCNlbGRlc3QuCi0gKiBFTkQgTEFZT1VUTElCIENIQU5HRQotICoKLSAqIEEgY2FjaGUgdGhhdCBob2xkcyBzdHJvbmcgcmVmZXJlbmNlcyB0byBhIGxpbWl0ZWQgbnVtYmVyIG9mIHZhbHVlcy4gRWFjaCB0aW1lCi0gKiBhIHZhbHVlIGlzIGFjY2Vzc2VkLCBpdCBpcyBtb3ZlZCB0byB0aGUgaGVhZCBvZiBhIHF1ZXVlLiBXaGVuIGEgdmFsdWUgaXMKLSAqIGFkZGVkIHRvIGEgZnVsbCBjYWNoZSwgdGhlIHZhbHVlIGF0IHRoZSBlbmQgb2YgdGhhdCBxdWV1ZSBpcyBldmljdGVkIGFuZCBtYXkKLSAqIGJlY29tZSBlbGlnaWJsZSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uLgotICoKLSAqIDxwPklmIHlvdXIgY2FjaGVkIHZhbHVlcyBob2xkIHJlc291cmNlcyB0aGF0IG5lZWQgdG8gYmUgZXhwbGljaXRseSByZWxlYXNlZCwKLSAqIG92ZXJyaWRlIHtAbGluayAjZW50cnlSZW1vdmVkfS4KLSAqCi0gKiA8cD5JZiBhIGNhY2hlIG1pc3Mgc2hvdWxkIGJlIGNvbXB1dGVkIG9uIGRlbWFuZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcga2V5cywKLSAqIG92ZXJyaWRlIHtAbGluayAjY3JlYXRlfS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBjYWxsaW5nIGNvZGUsIGFsbG93aW5nIGl0IHRvCi0gKiBhc3N1bWUgYSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSByZXR1cm5lZCwgZXZlbiB3aGVuIHRoZXJlJ3MgYSBjYWNoZSBtaXNzLgotICoKLSAqIDxwPkJ5IGRlZmF1bHQsIHRoZSBjYWNoZSBzaXplIGlzIG1lYXN1cmVkIGluIHRoZSBudW1iZXIgb2YgZW50cmllcy4gT3ZlcnJpZGUKLSAqIHtAbGluayAjc2l6ZU9mfSB0byBzaXplIHRoZSBjYWNoZSBpbiBkaWZmZXJlbnQgdW5pdHMuIEZvciBleGFtcGxlLCB0aGlzIGNhY2hlCi0gKiBpcyBsaW1pdGVkIHRvIDRNaUIgb2YgYml0bWFwczoKLSAqIDxwcmU+ICAge0Bjb2RlCi0gKiAgIGludCBjYWNoZVNpemUgPSA0ICogMTAyNCAqIDEwMjQ7IC8vIDRNaUIKLSAqICAgTHJ1Q2FjaGU8U3RyaW5nLCBCaXRtYXA+IGJpdG1hcENhY2hlID0gbmV3IExydUNhY2hlPFN0cmluZywgQml0bWFwPihjYWNoZVNpemUpIHsKLSAqICAgICAgIHByb3RlY3RlZCBpbnQgc2l6ZU9mKFN0cmluZyBrZXksIEJpdG1hcCB2YWx1ZSkgewotICogICAgICAgICAgIHJldHVybiB2YWx1ZS5nZXRCeXRlQ291bnQoKTsKLSAqICAgICAgIH0KLSAqICAgfX08L3ByZT4KLSAqCi0gKiA8cD5UaGlzIGNsYXNzIGlzIHRocmVhZC1zYWZlLiBQZXJmb3JtIG11bHRpcGxlIGNhY2hlIG9wZXJhdGlvbnMgYXRvbWljYWxseSBieQotICogc3luY2hyb25pemluZyBvbiB0aGUgY2FjaGU6IDxwcmU+ICAge0Bjb2RlCi0gKiAgIHN5bmNocm9uaXplZCAoY2FjaGUpIHsKLSAqICAgICBpZiAoY2FjaGUuZ2V0KGtleSkgPT0gbnVsbCkgewotICogICAgICAgICBjYWNoZS5wdXQoa2V5LCB2YWx1ZSk7Ci0gKiAgICAgfQotICogICB9fTwvcHJlPgotICoKLSAqIDxwPlRoaXMgY2xhc3MgZG9lcyBub3QgYWxsb3cgbnVsbCB0byBiZSB1c2VkIGFzIGEga2V5IG9yIHZhbHVlLiBBIHJldHVybgotICogdmFsdWUgb2YgbnVsbCBmcm9tIHtAbGluayAjZ2V0fSwge0BsaW5rICNwdXR9IG9yIHtAbGluayAjcmVtb3ZlfSBpcwotICogdW5hbWJpZ3VvdXM6IHRoZSBrZXkgd2FzIG5vdCBpbiB0aGUgY2FjaGUuCi0gKgotICogPHA+VGhpcyBjbGFzcyBhcHBlYXJlZCBpbiBBbmRyb2lkIDMuMSAoSG9uZXljb21iIE1SMSk7IGl0J3MgYXZhaWxhYmxlIGFzIHBhcnQKLSAqIG9mIDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc2RrL2NvbXBhdGliaWxpdHktbGlicmFyeS5odG1sIj5BbmRyb2lkJ3MKLSAqIFN1cHBvcnQgUGFja2FnZTwvYT4gZm9yIGVhcmxpZXIgcmVsZWFzZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBMcnVDYWNoZTxLLCBWPiB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMaW5rZWRIYXNoTWFwPEssIFY+IG1hcDsKLQotICAgIC8qKiBTaXplIG9mIHRoaXMgY2FjaGUgaW4gdW5pdHMuIE5vdCBuZWNlc3NhcmlseSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLiAqLwotICAgIHByaXZhdGUgaW50IHNpemU7Ci0gICAgcHJpdmF0ZSBpbnQgbWF4U2l6ZTsKLQotICAgIHByaXZhdGUgaW50IHB1dENvdW50OwotICAgIHByaXZhdGUgaW50IGNyZWF0ZUNvdW50OwotICAgIHByaXZhdGUgaW50IGV2aWN0aW9uQ291bnQ7Ci0gICAgcHJpdmF0ZSBpbnQgaGl0Q291bnQ7Ci0gICAgcHJpdmF0ZSBpbnQgbWlzc0NvdW50OwotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIG1heFNpemUgZm9yIGNhY2hlcyB0aGF0IGRvIG5vdCBvdmVycmlkZSB7QGxpbmsgI3NpemVPZn0sIHRoaXMgaXMKLSAgICAgKiAgICAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNhY2hlLiBGb3IgYWxsIG90aGVyIGNhY2hlcywKLSAgICAgKiAgICAgdGhpcyBpcyB0aGUgbWF4aW11bSBzdW0gb2YgdGhlIHNpemVzIG9mIHRoZSBlbnRyaWVzIGluIHRoaXMgY2FjaGUuCi0gICAgICovCi0gICAgcHVibGljIExydUNhY2hlKGludCBtYXhTaXplKSB7Ci0gICAgICAgIGlmIChtYXhTaXplIDw9IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm1heFNpemUgPD0gMCIpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMubWF4U2l6ZSA9IG1heFNpemU7Ci0gICAgICAgIHRoaXMubWFwID0gbmV3IExpbmtlZEhhc2hNYXA8SywgVj4oMCwgMC43NWYsIHRydWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHNpemUgb2YgdGhlIGNhY2hlLgotICAgICAqIEBwYXJhbSBtYXhTaXplIFRoZSBuZXcgbWF4aW11bSBzaXplLgotICAgICAqCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZXNpemUoaW50IG1heFNpemUpIHsKLSAgICAgICAgaWYgKG1heFNpemUgPD0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibWF4U2l6ZSA8PSAwIik7Ci0gICAgICAgIH0KLQotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgIHRoaXMubWF4U2l6ZSA9IG1heFNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgdHJpbVRvU2l6ZShtYXhTaXplKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3Ige0Bjb2RlIGtleX0gaWYgaXQgZXhpc3RzIGluIHRoZSBjYWNoZSBvciBjYW4gYmUKLSAgICAgKiBjcmVhdGVkIGJ5IHtAY29kZSAjY3JlYXRlfS4gSWYgYSB2YWx1ZSB3YXMgcmV0dXJuZWQsIGl0IGlzIG1vdmVkIHRvIHRoZQotICAgICAqIGhlYWQgb2YgdGhlIHF1ZXVlLiBUaGlzIHJldHVybnMgbnVsbCBpZiBhIHZhbHVlIGlzIG5vdCBjYWNoZWQgYW5kIGNhbm5vdAotICAgICAqIGJlIGNyZWF0ZWQuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIFYgZ2V0KEsga2V5KSB7Ci0gICAgICAgIGlmIChrZXkgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCJrZXkgPT0gbnVsbCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgViBtYXBWYWx1ZTsKLSAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgICAgICBtYXBWYWx1ZSA9IG1hcC5nZXQoa2V5KTsKLSAgICAgICAgICAgIGlmIChtYXBWYWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaGl0Q291bnQrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFwVmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtaXNzQ291bnQrKzsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEF0dGVtcHQgdG8gY3JlYXRlIGEgdmFsdWUuIFRoaXMgbWF5IHRha2UgYSBsb25nIHRpbWUsIGFuZCB0aGUgbWFwCi0gICAgICAgICAqIG1heSBiZSBkaWZmZXJlbnQgd2hlbiBjcmVhdGUoKSByZXR1cm5zLiBJZiBhIGNvbmZsaWN0aW5nIHZhbHVlIHdhcwotICAgICAgICAgKiBhZGRlZCB0byB0aGUgbWFwIHdoaWxlIGNyZWF0ZSgpIHdhcyB3b3JraW5nLCB3ZSBsZWF2ZSB0aGF0IHZhbHVlIGluCi0gICAgICAgICAqIHRoZSBtYXAgYW5kIHJlbGVhc2UgdGhlIGNyZWF0ZWQgdmFsdWUuCi0gICAgICAgICAqLwotCi0gICAgICAgIFYgY3JlYXRlZFZhbHVlID0gY3JlYXRlKGtleSk7Ci0gICAgICAgIGlmIChjcmVhdGVkVmFsdWUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgIGNyZWF0ZUNvdW50Kys7Ci0gICAgICAgICAgICBtYXBWYWx1ZSA9IG1hcC5wdXQoa2V5LCBjcmVhdGVkVmFsdWUpOwotCi0gICAgICAgICAgICBpZiAobWFwVmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIFRoZXJlIHdhcyBhIGNvbmZsaWN0IHNvIHVuZG8gdGhhdCBsYXN0IHB1dAotICAgICAgICAgICAgICAgIG1hcC5wdXQoa2V5LCBtYXBWYWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNpemUgKz0gc2FmZVNpemVPZihrZXksIGNyZWF0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWFwVmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgZW50cnlSZW1vdmVkKGZhbHNlLCBrZXksIGNyZWF0ZWRWYWx1ZSwgbWFwVmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdHJpbVRvU2l6ZShtYXhTaXplKTsKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVkVmFsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWNoZXMge0Bjb2RlIHZhbHVlfSBmb3Ige0Bjb2RlIGtleX0uIFRoZSB2YWx1ZSBpcyBtb3ZlZCB0byB0aGUgaGVhZCBvZgotICAgICAqIHRoZSBxdWV1ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIHByZXZpb3VzIHZhbHVlIG1hcHBlZCBieSB7QGNvZGUga2V5fS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgViBwdXQoSyBrZXksIFYgdmFsdWUpIHsKLSAgICAgICAgaWYgKGtleSA9PSBudWxsIHx8IHZhbHVlID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigia2V5ID09IG51bGwgfHwgdmFsdWUgPT0gbnVsbCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgViBwcmV2aW91czsKLSAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgICAgICBwdXRDb3VudCsrOwotICAgICAgICAgICAgc2l6ZSArPSBzYWZlU2l6ZU9mKGtleSwgdmFsdWUpOwotICAgICAgICAgICAgcHJldmlvdXMgPSBtYXAucHV0KGtleSwgdmFsdWUpOwotICAgICAgICAgICAgaWYgKHByZXZpb3VzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzaXplIC09IHNhZmVTaXplT2Yoa2V5LCBwcmV2aW91cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocHJldmlvdXMgIT0gbnVsbCkgewotICAgICAgICAgICAgZW50cnlSZW1vdmVkKGZhbHNlLCBrZXksIHByZXZpb3VzLCB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0cmltVG9TaXplKG1heFNpemUpOwotICAgICAgICByZXR1cm4gcHJldmlvdXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIG1heFNpemUgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgY2FjaGUgYmVmb3JlIHJldHVybmluZy4gTWF5IGJlIC0xCi0gICAgICogICAgIHRvIGV2aWN0IGV2ZW4gMC1zaXplZCBlbGVtZW50cy4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgdHJpbVRvU2l6ZShpbnQgbWF4U2l6ZSkgewotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgSyBrZXk7Ci0gICAgICAgICAgICBWIHZhbHVlOwotICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNpemUgPCAwIHx8IChtYXAuaXNFbXB0eSgpICYmIHNpemUgIT0gMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihnZXRDbGFzcygpLmdldE5hbWUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi5zaXplT2YoKSBpcyByZXBvcnRpbmcgaW5jb25zaXN0ZW50IHJlc3VsdHMhIik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHNpemUgPD0gbWF4U2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBCRUdJTiBMQVlPVVRMSUIgQ0hBTkdFCi0gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGxpbmtlZCBsaXN0LgotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGVmZmljaWVudCwgdGhlIGdvYWwgaGVyZSBpcyB0byBtaW5pbWl6ZSB0aGUgY2hhbmdlcwotICAgICAgICAgICAgICAgIC8vIGNvbXBhcmVkIHRvIHRoZSBwbGF0Zm9ybSB2ZXJzaW9uLgotICAgICAgICAgICAgICAgIE1hcC5FbnRyeTxLLCBWPiB0b0V2aWN0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICBmb3IgKE1hcC5FbnRyeTxLLCBWPiBlbnRyeSA6IG1hcC5lbnRyeVNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvRXZpY3QgPSBlbnRyeTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gRU5EIExBWU9VVExJQiBDSEFOR0UKLQotICAgICAgICAgICAgICAgIGlmICh0b0V2aWN0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAga2V5ID0gdG9FdmljdC5nZXRLZXkoKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvRXZpY3QuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBtYXAucmVtb3ZlKGtleSk7Ci0gICAgICAgICAgICAgICAgc2l6ZSAtPSBzYWZlU2l6ZU9mKGtleSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGV2aWN0aW9uQ291bnQrKzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZW50cnlSZW1vdmVkKHRydWUsIGtleSwgdmFsdWUsIG51bGwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlcyB0aGUgZW50cnkgZm9yIHtAY29kZSBrZXl9IGlmIGl0IGV4aXN0cy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIHByZXZpb3VzIHZhbHVlIG1hcHBlZCBieSB7QGNvZGUga2V5fS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgViByZW1vdmUoSyBrZXkpIHsKLSAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImtleSA9PSBudWxsIik7Ci0gICAgICAgIH0KLQotICAgICAgICBWIHByZXZpb3VzOwotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgIHByZXZpb3VzID0gbWFwLnJlbW92ZShrZXkpOwotICAgICAgICAgICAgaWYgKHByZXZpb3VzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzaXplIC09IHNhZmVTaXplT2Yoa2V5LCBwcmV2aW91cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocHJldmlvdXMgIT0gbnVsbCkgewotICAgICAgICAgICAgZW50cnlSZW1vdmVkKGZhbHNlLCBrZXksIHByZXZpb3VzLCBudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBwcmV2aW91czsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsZWQgZm9yIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gZXZpY3RlZCBvciByZW1vdmVkLiBUaGlzIG1ldGhvZCBpcwotICAgICAqIGludm9rZWQgd2hlbiBhIHZhbHVlIGlzIGV2aWN0ZWQgdG8gbWFrZSBzcGFjZSwgcmVtb3ZlZCBieSBhIGNhbGwgdG8KLSAgICAgKiB7QGxpbmsgI3JlbW92ZX0sIG9yIHJlcGxhY2VkIGJ5IGEgY2FsbCB0byB7QGxpbmsgI3B1dH0uIFRoZSBkZWZhdWx0Ci0gICAgICogaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLgotICAgICAqCi0gICAgICogPHA+VGhlIG1ldGhvZCBpcyBjYWxsZWQgd2l0aG91dCBzeW5jaHJvbml6YXRpb246IG90aGVyIHRocmVhZHMgbWF5Ci0gICAgICogYWNjZXNzIHRoZSBjYWNoZSB3aGlsZSB0aGlzIG1ldGhvZCBpcyBleGVjdXRpbmcuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZXZpY3RlZCB0cnVlIGlmIHRoZSBlbnRyeSBpcyBiZWluZyByZW1vdmVkIHRvIG1ha2Ugc3BhY2UsIGZhbHNlCi0gICAgICogICAgIGlmIHRoZSByZW1vdmFsIHdhcyBjYXVzZWQgYnkgYSB7QGxpbmsgI3B1dH0gb3Ige0BsaW5rICNyZW1vdmV9LgotICAgICAqIEBwYXJhbSBuZXdWYWx1ZSB0aGUgbmV3IHZhbHVlIGZvciB7QGNvZGUga2V5fSwgaWYgaXQgZXhpc3RzLiBJZiBub24tbnVsbCwKLSAgICAgKiAgICAgdGhpcyByZW1vdmFsIHdhcyBjYXVzZWQgYnkgYSB7QGxpbmsgI3B1dH0uIE90aGVyd2lzZSBpdCB3YXMgY2F1c2VkIGJ5Ci0gICAgICogICAgIGFuIGV2aWN0aW9uIG9yIGEge0BsaW5rICNyZW1vdmV9LgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGVudHJ5UmVtb3ZlZChib29sZWFuIGV2aWN0ZWQsIEsga2V5LCBWIG9sZFZhbHVlLCBWIG5ld1ZhbHVlKSB7fQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIGFmdGVyIGEgY2FjaGUgbWlzcyB0byBjb21wdXRlIGEgdmFsdWUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGtleS4KLSAgICAgKiBSZXR1cm5zIHRoZSBjb21wdXRlZCB2YWx1ZSBvciBudWxsIGlmIG5vIHZhbHVlIGNhbiBiZSBjb21wdXRlZC4gVGhlCi0gICAgICogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCi0gICAgICoKLSAgICAgKiA8cD5UaGUgbWV0aG9kIGlzIGNhbGxlZCB3aXRob3V0IHN5bmNocm9uaXphdGlvbjogb3RoZXIgdGhyZWFkcyBtYXkKLSAgICAgKiBhY2Nlc3MgdGhlIGNhY2hlIHdoaWxlIHRoaXMgbWV0aG9kIGlzIGV4ZWN1dGluZy4KLSAgICAgKgotICAgICAqIDxwPklmIGEgdmFsdWUgZm9yIHtAY29kZSBrZXl9IGV4aXN0cyBpbiB0aGUgY2FjaGUgd2hlbiB0aGlzIG1ldGhvZAotICAgICAqIHJldHVybnMsIHRoZSBjcmVhdGVkIHZhbHVlIHdpbGwgYmUgcmVsZWFzZWQgd2l0aCB7QGxpbmsgI2VudHJ5UmVtb3ZlZH0KLSAgICAgKiBhbmQgZGlzY2FyZGVkLiBUaGlzIGNhbiBvY2N1ciB3aGVuIG11bHRpcGxlIHRocmVhZHMgcmVxdWVzdCB0aGUgc2FtZSBrZXkKLSAgICAgKiBhdCB0aGUgc2FtZSB0aW1lIChjYXVzaW5nIG11bHRpcGxlIHZhbHVlcyB0byBiZSBjcmVhdGVkKSwgb3Igd2hlbiBvbmUKLSAgICAgKiB0aHJlYWQgY2FsbHMge0BsaW5rICNwdXR9IHdoaWxlIGFub3RoZXIgaXMgY3JlYXRpbmcgYSB2YWx1ZSBmb3IgdGhlIHNhbWUKLSAgICAgKiBrZXkuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIFYgY3JlYXRlKEsga2V5KSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IHNhZmVTaXplT2YoSyBrZXksIFYgdmFsdWUpIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IHNpemVPZihrZXksIHZhbHVlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk5lZ2F0aXZlIHNpemU6ICIgKyBrZXkgKyAiPSIgKyB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBlbnRyeSBmb3Ige0Bjb2RlIGtleX0gYW5kIHtAY29kZSB2YWx1ZX0gaW4KLSAgICAgKiB1c2VyLWRlZmluZWQgdW5pdHMuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDEgc28gdGhhdCBzaXplCi0gICAgICogaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGFuZCBtYXggc2l6ZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcy4KLSAgICAgKgotICAgICAqIDxwPkFuIGVudHJ5J3Mgc2l6ZSBtdXN0IG5vdCBjaGFuZ2Ugd2hpbGUgaXQgaXMgaW4gdGhlIGNhY2hlLgotICAgICAqLwotICAgIHByb3RlY3RlZCBpbnQgc2l6ZU9mKEsga2V5LCBWIHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENsZWFyIHRoZSBjYWNoZSwgY2FsbGluZyB7QGxpbmsgI2VudHJ5UmVtb3ZlZH0gb24gZWFjaCByZW1vdmVkIGVudHJ5LgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCB2b2lkIGV2aWN0QWxsKCkgewotICAgICAgICB0cmltVG9TaXplKC0xKTsgLy8gLTEgd2lsbCBldmljdCAwLXNpemVkIGVsZW1lbnRzCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogRm9yIGNhY2hlcyB0aGF0IGRvIG5vdCBvdmVycmlkZSB7QGxpbmsgI3NpemVPZn0sIHRoaXMgcmV0dXJucyB0aGUgbnVtYmVyCi0gICAgICogb2YgZW50cmllcyBpbiB0aGUgY2FjaGUuIEZvciBhbGwgb3RoZXIgY2FjaGVzLCB0aGlzIHJldHVybnMgdGhlIHN1bSBvZgotICAgICAqIHRoZSBzaXplcyBvZiB0aGUgZW50cmllcyBpbiB0aGlzIGNhY2hlLgotICAgICAqLwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgZmluYWwgaW50IHNpemUoKSB7Ci0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvciBjYWNoZXMgdGhhdCBkbyBub3Qgb3ZlcnJpZGUge0BsaW5rICNzaXplT2Z9LCB0aGlzIHJldHVybnMgdGhlIG1heGltdW0KLSAgICAgKiBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2FjaGUuIEZvciBhbGwgb3RoZXIgY2FjaGVzLCB0aGlzIHJldHVybnMgdGhlCi0gICAgICogbWF4aW11bSBzdW0gb2YgdGhlIHNpemVzIG9mIHRoZSBlbnRyaWVzIGluIHRoaXMgY2FjaGUuCi0gICAgICovCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBmaW5hbCBpbnQgbWF4U2l6ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1heFNpemU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRpbWVzIHtAbGluayAjZ2V0fSByZXR1cm5lZCBhIHZhbHVlIHRoYXQgd2FzCi0gICAgICogYWxyZWFkeSBwcmVzZW50IGluIHRoZSBjYWNoZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIGZpbmFsIGludCBoaXRDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIGhpdENvdW50OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lcyB7QGxpbmsgI2dldH0gcmV0dXJuZWQgbnVsbCBvciByZXF1aXJlZCBhIG5ldwotICAgICAqIHZhbHVlIHRvIGJlIGNyZWF0ZWQuCi0gICAgICovCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBmaW5hbCBpbnQgbWlzc0NvdW50KCkgewotICAgICAgICByZXR1cm4gbWlzc0NvdW50OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lcyB7QGxpbmsgI2NyZWF0ZShPYmplY3QpfSByZXR1cm5lZCBhIHZhbHVlLgotICAgICAqLwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgZmluYWwgaW50IGNyZWF0ZUNvdW50KCkgewotICAgICAgICByZXR1cm4gY3JlYXRlQ291bnQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRpbWVzIHtAbGluayAjcHV0fSB3YXMgY2FsbGVkLgotICAgICAqLwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgZmluYWwgaW50IHB1dENvdW50KCkgewotICAgICAgICByZXR1cm4gcHV0Q291bnQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHZhbHVlcyB0aGF0IGhhdmUgYmVlbiBldmljdGVkLgotICAgICAqLwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgZmluYWwgaW50IGV2aWN0aW9uQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBldmljdGlvbkNvdW50OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBjYWNoZSwgb3JkZXJlZCBmcm9tIGxlYXN0Ci0gICAgICogcmVjZW50bHkgYWNjZXNzZWQgdG8gbW9zdCByZWNlbnRseSBhY2Nlc3NlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIGZpbmFsIE1hcDxLLCBWPiBzbmFwc2hvdCgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBMaW5rZWRIYXNoTWFwPEssIFY+KG1hcCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlIHB1YmxpYyBzeW5jaHJvbml6ZWQgZmluYWwgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICBpbnQgYWNjZXNzZXMgPSBoaXRDb3VudCArIG1pc3NDb3VudDsKLSAgICAgICAgaW50IGhpdFBlcmNlbnQgPSBhY2Nlc3NlcyAhPSAwID8gKDEwMCAqIGhpdENvdW50IC8gYWNjZXNzZXMpIDogMDsKLSAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIkxydUNhY2hlW21heFNpemU9JWQsaGl0cz0lZCxtaXNzZXM9JWQsaGl0UmF0ZT0lZCUlXSIsCi0gICAgICAgICAgICAgICAgbWF4U2l6ZSwgaGl0Q291bnQsIG1pc3NDb3VudCwgaGl0UGVyY2VudCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L0F0dGFjaEluZm9fQWNjZXNzb3IuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9BdHRhY2hJbmZvX0FjY2Vzc29yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MDFmNzIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L0F0dGFjaEluZm9fQWNjZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZC5CcmlkZ2VXaW5kb3c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZVdpbmRvd1Nlc3Npb247Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuQXR0YWNoSW5mbzsKLQotLyoqCi0gKiBDbGFzcyBhbGxvd2luZyBhY2Nlc3MgdG8gcGFja2FnZS1wcm90ZWN0ZWQgbWV0aG9kcy9maWVsZHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBdHRhY2hJbmZvX0FjY2Vzc29yIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRBdHRhY2hJbmZvKFZpZXcgdmlldykgewotICAgICAgICBDb250ZXh0IGNvbnRleHQgPSB2aWV3LmdldENvbnRleHQoKTsKLSAgICAgICAgV2luZG93TWFuYWdlciB3bSA9IChXaW5kb3dNYW5hZ2VyKWNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJTkRPV19TRVJWSUNFKTsKLSAgICAgICAgRGlzcGxheSBkaXNwbGF5ID0gd20uZ2V0RGVmYXVsdERpc3BsYXkoKTsKLSAgICAgICAgVmlld1Jvb3RJbXBsIHJvb3QgPSBuZXcgVmlld1Jvb3RJbXBsKGNvbnRleHQsIGRpc3BsYXkpOwotICAgICAgICBBdHRhY2hJbmZvIGluZm8gPSBuZXcgQXR0YWNoSW5mbyhuZXcgQnJpZGdlV2luZG93U2Vzc2lvbigpLCBuZXcgQnJpZGdlV2luZG93KCksCi0gICAgICAgICAgICAgICAgZGlzcGxheSwgcm9vdCwgbmV3IEhhbmRsZXIoKSwgbnVsbCk7Ci0gICAgICAgIGluZm8ubUhhc1dpbmRvd0ZvY3VzID0gdHJ1ZTsKLSAgICAgICAgaW5mby5tV2luZG93VmlzaWJpbGl0eSA9IFZpZXcuVklTSUJMRTsKLSAgICAgICAgaW5mby5tSW5Ub3VjaE1vZGUgPSBmYWxzZTsgLy8gdGhpcyBpcyBzbyB0aGF0IHdlIGNhbiBkaXNwbGF5IHNlbGVjdGlvbnMuCi0gICAgICAgIGluZm8ubUhhcmR3YXJlQWNjZWxlcmF0ZWQgPSBmYWxzZTsKLSAgICAgICAgdmlldy5kaXNwYXRjaEF0dGFjaGVkVG9XaW5kb3coaW5mbywgMCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGRpc3BhdGNoT25QcmVEcmF3KFZpZXcgdmlldykgewotICAgICAgICB2aWV3Lm1BdHRhY2hJbmZvLm1UcmVlT2JzZXJ2ZXIuZGlzcGF0Y2hPblByZURyYXcoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvQnJpZGdlSW5mbGF0ZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9CcmlkZ2VJbmZsYXRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDFmMWNlNi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvQnJpZGdlSW5mbGF0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnZpZXc7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSVByb2plY3RDYWxsYmFjazsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5NZXJnZUNvb2tpZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzb3VyY2VSZWZlcmVuY2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlVmFsdWU7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUNvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZVhtbEJsb2NrUGFyc2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5QYXJzZXJGYWN0b3J5OwotaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5SZXNvdXJjZVR5cGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQudXRpbC5QYWlyOwotCi1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkluZmxhdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLS8qKgotICogQ3VzdG9tIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBMYXlvdXRJbmZsYXRlcn0gdG8gaGFuZGxlIGN1c3RvbSB2aWV3cy4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEJyaWRnZUluZmxhdGVyIGV4dGVuZHMgTGF5b3V0SW5mbGF0ZXIgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdENhbGxiYWNrIG1Qcm9qZWN0Q2FsbGJhY2s7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Jc0luTWVyZ2UgPSBmYWxzZTsKLSAgICBwcml2YXRlIFJlc291cmNlUmVmZXJlbmNlIG1SZXNvdXJjZVJlZmVyZW5jZTsKLQotICAgIC8qKgotICAgICAqIExpc3Qgb2YgY2xhc3MgcHJlZml4ZXMgd2hpY2ggYXJlIHRyaWVkIGZpcnN0IGJ5IGRlZmF1bHQuCi0gICAgICogPHAvPgotICAgICAqIFRoaXMgc2hvdWxkIG1hdGNoIHRoZSBsaXN0IGluIGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeS5pbXBsLlBob25lTGF5b3V0SW5mbGF0ZXIuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gc0NsYXNzUHJlZml4TGlzdCA9IHsKLSAgICAgICAgImFuZHJvaWQud2lkZ2V0LiIsCi0gICAgICAgICJhbmRyb2lkLndlYmtpdC4iCi0gICAgfTsKLQotICAgIHByb3RlY3RlZCBCcmlkZ2VJbmZsYXRlcihMYXlvdXRJbmZsYXRlciBvcmlnaW5hbCwgQ29udGV4dCBuZXdDb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKG9yaWdpbmFsLCBuZXdDb250ZXh0KTsKLSAgICAgICAgbVByb2plY3RDYWxsYmFjayA9IG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5zdGFudGlhdGUgYSBuZXcgQnJpZGdlSW5mbGF0ZXIgd2l0aCBhbiB7QGxpbmsgSVByb2plY3RDYWxsYmFja30gb2JqZWN0LgotICAgICAqCi0gICAgICogQHBhcmFtIGNvbnRleHQgVGhlIEFuZHJvaWQgYXBwbGljYXRpb24gY29udGV4dC4KLSAgICAgKiBAcGFyYW0gcHJvamVjdENhbGxiYWNrIHRoZSB7QGxpbmsgSVByb2plY3RDYWxsYmFja30gb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBCcmlkZ2VJbmZsYXRlcihDb250ZXh0IGNvbnRleHQsIElQcm9qZWN0Q2FsbGJhY2sgcHJvamVjdENhbGxiYWNrKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgICAgICBtUHJvamVjdENhbGxiYWNrID0gcHJvamVjdENhbGxiYWNrOwotICAgICAgICBtQ29uc3RydWN0b3JBcmdzWzBdID0gY29udGV4dDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVmlldyBvbkNyZWF0ZVZpZXcoU3RyaW5nIG5hbWUsIEF0dHJpYnV0ZVNldCBhdHRycykgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBWaWV3IHZpZXcgPSBudWxsOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBGaXJzdCB0cnkgdG8gZmluZCBhIGNsYXNzIHVzaW5nIHRoZSBkZWZhdWx0IEFuZHJvaWQgcHJlZml4ZXMKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIHByZWZpeCA6IHNDbGFzc1ByZWZpeExpc3QpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICB2aWV3ID0gY3JlYXRlVmlldyhuYW1lLCBwcmVmaXgsIGF0dHJzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlLiBXZSdsbCB0cnkgYWdhaW4gdXNpbmcgdGhlIGJhc2UgY2xhc3MgYmVsb3cuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBOZXh0IHRyeSB1c2luZyB0aGUgcGFyZW50IGxvYWRlci4gVGhpcyB3aWxsIG1vc3QgbGlrZWx5IG9ubHkgd29yayBmb3IKLSAgICAgICAgICAgIC8vIGZ1bGx5LXF1YWxpZmllZCBjbGFzcyBuYW1lcy4KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZpZXcgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB2aWV3ID0gc3VwZXIub25DcmVhdGVWaWV3KG5hbWUsIGF0dHJzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBJZ25vcmUuIFdlJ2xsIHRyeSBhZ2FpbiB1c2luZyB0aGUgY3VzdG9tIHZpZXcgbG9hZGVyIGJlbG93LgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBGaW5hbGx5IHRyeSBhZ2FpbiB1c2luZyB0aGUgY3VzdG9tIHZpZXcgbG9hZGVyCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGlmICh2aWV3ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdmlldyA9IGxvYWRDdXN0b21WaWV3KG5hbWUsIGF0dHJzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2xhc3Mgd2FzIG5vdCBmb3VuZCwgd2UgdGhyb3cgdGhlIGV4Y2VwdGlvbiBkaXJlY3RseSwgYmVjYXVzZSB0aGlzCi0gICAgICAgICAgICAgICAgLy8gbWV0aG9kIGlzIGFscmVhZHkgZXhwZWN0ZWQgdG8gdGhyb3cgaXQuCi0gICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8vIFdyYXAgdGhlIHJlYWwgZXhjZXB0aW9uIGluIGEgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgc28gdGhhdCB0aGUgY2FsbGluZyBtZXRob2QKLSAgICAgICAgICAgIC8vIGNhbiBkZWFsIHdpdGggaXQuCi0gICAgICAgICAgICBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCJvbkNyZWF0ZVZpZXciLCBlKTsKLSAgICAgICAgICAgIHRocm93IGV4Y2VwdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIHNldHVwVmlld0luQ29udGV4dCh2aWV3LCBhdHRycyk7Ci0KLSAgICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZpZXcgY3JlYXRlVmlld0Zyb21UYWcoVmlldyBwYXJlbnQsIFN0cmluZyBuYW1lLCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgVmlldyB2aWV3ID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZpZXcgPSBzdXBlci5jcmVhdGVWaWV3RnJvbVRhZyhwYXJlbnQsIG5hbWUsIGF0dHJzKTsKLSAgICAgICAgfSBjYXRjaCAoSW5mbGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyB0cnkgdG8gbG9hZCB0aGUgY2xhc3MgZnJvbSB1c2luZyB0aGUgY3VzdG9tIHZpZXcgbG9hZGVyCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHZpZXcgPSBsb2FkQ3VzdG9tVmlldyhuYW1lLCBhdHRycyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTIpIHsKLSAgICAgICAgICAgICAgICAvLyBXcmFwIHRoZSByZWFsIGV4Y2VwdGlvbiBpbiBhbiBJbmZsYXRlRXhjZXB0aW9uIHNvIHRoYXQgdGhlIGNhbGxpbmcKLSAgICAgICAgICAgICAgICAvLyBtZXRob2QgY2FuIGRlYWwgd2l0aCBpdC4KLSAgICAgICAgICAgICAgICBJbmZsYXRlRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG5ldyBJbmZsYXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGUyLmdldENsYXNzKCkuZXF1YWxzKENsYXNzTm90Rm91bmRFeGNlcHRpb24uY2xhc3MpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbi5pbml0Q2F1c2UoZTIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbi5pbml0Q2F1c2UoZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRocm93IGV4Y2VwdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHNldHVwVmlld0luQ29udGV4dCh2aWV3LCBhdHRycyk7Ci0KLSAgICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZpZXcgaW5mbGF0ZShpbnQgcmVzb3VyY2UsIFZpZXdHcm91cCByb290KSB7Ci0gICAgICAgIENvbnRleHQgY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICAgICAgaWYgKGNvbnRleHQgaW5zdGFuY2VvZiBCcmlkZ2VDb250ZXh0KSB7Ci0gICAgICAgICAgICBCcmlkZ2VDb250ZXh0IGJyaWRnZUNvbnRleHQgPSAoQnJpZGdlQ29udGV4dCljb250ZXh0OwotCi0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHZhbHVlID0gbnVsbDsKLQotICAgICAgICAgICAgUGFpcjxSZXNvdXJjZVR5cGUsIFN0cmluZz4gbGF5b3V0SW5mbyA9IEJyaWRnZS5yZXNvbHZlUmVzb3VyY2VJZChyZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAobGF5b3V0SW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBicmlkZ2VDb250ZXh0LmdldFJlbmRlclJlc291cmNlcygpLmdldEZyYW1ld29ya1Jlc291cmNlKAotICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUeXBlLkxBWU9VVCwgbGF5b3V0SW5mby5nZXRTZWNvbmQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGxheW91dEluZm8gPSBtUHJvamVjdENhbGxiYWNrLnJlc29sdmVSZXNvdXJjZUlkKHJlc291cmNlKTsKLQotICAgICAgICAgICAgICAgIGlmIChsYXlvdXRJbmZvICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBicmlkZ2VDb250ZXh0LmdldFJlbmRlclJlc291cmNlcygpLmdldFByb2plY3RSZXNvdXJjZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVR5cGUuTEFZT1VULCBsYXlvdXRJbmZvLmdldFNlY29uZCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUodmFsdWUuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGYuaXNGaWxlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFhtbFB1bGxQYXJzZXIgcGFyc2VyID0gUGFyc2VyRmFjdG9yeS5jcmVhdGUoZik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEJyaWRnZVhtbEJsb2NrUGFyc2VyIGJyaWRnZVBhcnNlciA9IG5ldyBCcmlkZ2VYbWxCbG9ja1BhcnNlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLCBicmlkZ2VDb250ZXh0LCBmYWxzZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmZsYXRlKGJyaWRnZVBhcnNlciwgcm9vdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfUkVBRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBwYXJzZSBmaWxlICIgKyBmLmdldEFic29sdXRlUGF0aCgpLCBlLCBudWxsIC8qZGF0YSovKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBWaWV3IGxvYWRDdXN0b21WaWV3KFN0cmluZyBuYW1lLCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLAotICAgICAgICAgICAgRXhjZXB0aW9uewotICAgICAgICBpZiAobVByb2plY3RDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBmaXJzdCBnZXQgdGhlIGNsYXNzbmFtZSBpbiBjYXNlIGl0J3Mgbm90IHRoZSBub2RlIG5hbWUKLSAgICAgICAgICAgIGlmIChuYW1lLmVxdWFscygidmlldyIpKSB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJzLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJjbGFzcyIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtQ29uc3RydWN0b3JBcmdzWzFdID0gYXR0cnM7Ci0KLSAgICAgICAgICAgIE9iamVjdCBjdXN0b21WaWV3ID0gbVByb2plY3RDYWxsYmFjay5sb2FkVmlldyhuYW1lLCBtQ29uc3RydWN0b3JTaWduYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgIG1Db25zdHJ1Y3RvckFyZ3MpOwotCi0gICAgICAgICAgICBpZiAoY3VzdG9tVmlldyBpbnN0YW5jZW9mIFZpZXcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKFZpZXcpY3VzdG9tVmlldzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXR1cFZpZXdJbkNvbnRleHQoVmlldyB2aWV3LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgaWYgKGdldENvbnRleHQoKSBpbnN0YW5jZW9mIEJyaWRnZUNvbnRleHQpIHsKLSAgICAgICAgICAgIEJyaWRnZUNvbnRleHQgYmMgPSAoQnJpZGdlQ29udGV4dCkgZ2V0Q29udGV4dCgpOwotICAgICAgICAgICAgaWYgKGF0dHJzIGluc3RhbmNlb2YgQnJpZGdlWG1sQmxvY2tQYXJzZXIpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2VYbWxCbG9ja1BhcnNlciBwYXJzZXIgPSAoQnJpZGdlWG1sQmxvY2tQYXJzZXIpIGF0dHJzOwotCi0gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSB2aWV3IGtleQotICAgICAgICAgICAgICAgIE9iamVjdCB2aWV3S2V5ID0gcGFyc2VyLmdldFZpZXdDb29raWUoKTsKLQotICAgICAgICAgICAgICAgIGlmICh2aWV3S2V5ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGN1cnJlbnREZXB0aCA9IHBhcnNlci5nZXREZXB0aCgpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHRlc3Qgd2hldGhlciB3ZSBhcmUgaW4gYW4gaW5jbHVkZWQgZmlsZSBvciBpbiBhIGFkYXB0ZXIgYmluZGluZyB2aWV3LgotICAgICAgICAgICAgICAgICAgICBCcmlkZ2VYbWxCbG9ja1BhcnNlciBwcmV2aW91c1BhcnNlciA9IGJjLmdldFByZXZpb3VzUGFyc2VyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1BhcnNlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb29rcyBsaWtlIHdlIGluc2lkZSBhbiBlbWJlZGRlZCBsYXlvdXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGFwcGx5IHRoZSBjb29raWUgb2YgdGhlIGNhbGxpbmcgbm9kZSAoPGluY2x1ZGU+KSBpZiB3ZSBhcmUgYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0b3AgbGV2ZWwgb2YgdGhlIGVtYmVkZGVkIGxheW91dC4gSWYgdGhlcmUgaXMgYSBtZXJnZSB0YWcsIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgaXQgYW5kIGxvb2sgZm9yIHRoZSAybmQgbGV2ZWwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0ZXN0RGVwdGggPSBtSXNJbk1lcmdlID8gMiA6IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudERlcHRoID09IHRlc3REZXB0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdLZXkgPSBwcmV2aW91c1BhcnNlci5nZXRWaWV3Q29va2llKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGluIGEgbWVyZ2UsIHdyYXAgdGhlIGNvb2tpZSBpbiBhIE1lcmdlQ29va2llLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3S2V5ICE9IG51bGwgJiYgbUlzSW5NZXJnZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3S2V5ID0gbmV3IE1lcmdlQ29va2llKHZpZXdLZXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtUmVzb3VyY2VSZWZlcmVuY2UgIT0gbnVsbCAmJiBjdXJyZW50RGVwdGggPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSBpZiB0aGVyZSdzIGEgcmVzb3VyY2UgcmVmZXJlbmNlLCB0aGlzIG1lYW5zIHdlIGFyZSBpbiBhbiBhZGFwdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBiaW5kaW5nIGNhc2UuIFNldCB0aGUgcmVzb3VyY2UgcmVmIGFzIHRoZSB2aWV3IGNvb2tpZSBvbmx5IGZvciB0aGUgdG9wCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXZlbCB2aWV3LgotICAgICAgICAgICAgICAgICAgICAgICAgdmlld0tleSA9IG1SZXNvdXJjZVJlZmVyZW5jZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh2aWV3S2V5ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgYmMuYWRkVmlld0tleSh2aWV3LCB2aWV3S2V5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJc0luTWVyZ2UoYm9vbGVhbiBpc0luTWVyZ2UpIHsKLSAgICAgICAgbUlzSW5NZXJnZSA9IGlzSW5NZXJnZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZVJlZmVyZW5jZShSZXNvdXJjZVJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLSAgICAgICAgbVJlc291cmNlUmVmZXJlbmNlID0gcmVmZXJlbmNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMYXlvdXRJbmZsYXRlciBjbG9uZUluQ29udGV4dChDb250ZXh0IG5ld0NvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBCcmlkZ2VJbmZsYXRlcih0aGlzLCBuZXdDb250ZXh0KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvQ2hvcmVvZ3JhcGhlcl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L0Nob3Jlb2dyYXBoZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc1ZWU1MC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvQ2hvcmVvZ3JhcGhlcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSB1c2VkIHRvIHByb3ZpZGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIGEgc2VsZWN0IGZldyBtZXRob2RzIG9mIHtAbGluayBDaG9yZW9ncmFwaGVyfQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIENob3Jlb2dyYXBoZXIgaGF2ZSBiZWVuCi0gKiByZXBsYWNlZCBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBDaG9yZW9ncmFwaGVyX0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIHB1YmxpYyBzdGF0aWMgZmxvYXQgZ2V0UmVmcmVzaFJhdGUoKSB7Ci0gICAgICAgIHJldHVybiA2MC5mOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9EaXNwbGF5X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvRGlzcGxheV9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2RjODIxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9EaXNwbGF5X0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnZpZXc7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLQotLyoqCi0gKiBEZWxlZ2F0ZSB1c2VkIHRvIHByb3ZpZGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIGEgc2VsZWN0IGZldyBtZXRob2RzIG9mIHtAbGluayBEaXNwbGF5fQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIERpc3BsYXkgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBEaXNwbGF5X0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZURpc3BsYXlJbmZvTG9ja2VkKERpc3BsYXkgdGhlRGlzcGxheSkgewotICAgICAgICAvLyBkbyBub3RoaW5nCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvSVdpbmRvd01hbmFnZXJJbXBsLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvSVdpbmRvd01hbmFnZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMmNiYzEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L0lXaW5kb3dNYW5hZ2VySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5JSW5wdXRDb250ZXh0OwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcuSUlucHV0TWV0aG9kQ2xpZW50OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db21wYXRpYmlsaXR5SW5mbzsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklSZW1vdGVDYWxsYmFjazsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklBcHBsaWNhdGlvblRva2VuOwotaW1wb3J0IGFuZHJvaWQudmlldy5JSW5wdXRGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklPbktleWd1YXJkRXhpdFJlc3VsdDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSVJvdGF0aW9uV2F0Y2hlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSVdpbmRvd01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dTZXNzaW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogQmFzaWMgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIElXaW5kb3dNYW5hZ2VyfSBzbyB0aGF0IHtAbGluayBEaXNwbGF5fSAoYW5kCi0gKiB7QGxpbmsgRGlzcGxheV9EZWxlZ2F0ZX0pIGNhbiByZXR1cm4gYSB2YWxpZCBpbnN0YW5jZS4KLSAqLwotcHVibGljIGNsYXNzIElXaW5kb3dNYW5hZ2VySW1wbCBpbXBsZW1lbnRzIElXaW5kb3dNYW5hZ2VyIHsKLQotICAgIHByaXZhdGUgZmluYWwgQ29uZmlndXJhdGlvbiBtQ29uZmlnOwotICAgIHByaXZhdGUgZmluYWwgRGlzcGxheU1ldHJpY3MgbU1ldHJpY3M7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVJvdGF0aW9uOwotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtSGFzTmF2aWdhdGlvbkJhcjsKLQotICAgIHB1YmxpYyBJV2luZG93TWFuYWdlckltcGwoQ29uZmlndXJhdGlvbiBjb25maWcsIERpc3BsYXlNZXRyaWNzIG1ldHJpY3MsIGludCByb3RhdGlvbiwKLSAgICAgICAgICAgIGJvb2xlYW4gaGFzTmF2aWdhdGlvbkJhcikgewotICAgICAgICBtQ29uZmlnID0gY29uZmlnOwotICAgICAgICBtTWV0cmljcyA9IG1ldHJpY3M7Ci0gICAgICAgIG1Sb3RhdGlvbiA9IHJvdGF0aW9uOwotICAgICAgICBtSGFzTmF2aWdhdGlvbkJhciA9IGhhc05hdmlnYXRpb25CYXI7Ci0gICAgfQotCi0gICAgLy8gY3VzdG9tIEFQSS4KLQotICAgIHB1YmxpYyBEaXNwbGF5TWV0cmljcyBnZXRNZXRyaWNzKCkgewotICAgICAgICByZXR1cm4gbU1ldHJpY3M7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBpbXBsZW1lbnRhdGlvbiBvZiBJV2luZG93TWFuYWdlciB0aGF0IHdlIGNhcmUgYWJvdXQgLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRSb3RhdGlvbigpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbVJvdGF0aW9uOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGhhc05hdmlnYXRpb25CYXIoKSB7Ci0gICAgICAgIHJldHVybiBtSGFzTmF2aWdhdGlvbkJhcjsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIHVudXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBJV2luZG93TWFuYWdlciAtLS0tCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBhZGRBcHBUb2tlbihpbnQgYXJnMCwgSUFwcGxpY2F0aW9uVG9rZW4gYXJnMSwgaW50IGFyZzIsIGludCBhcmczLCBpbnQgYXJnNCwKLSAgICAgICAgICAgIGJvb2xlYW4gYXJnNSwgYm9vbGVhbiBhcmc2LCBpbnQgYXJnNywgaW50IGFyZzgpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWRkV2luZG93VG9rZW4oSUJpbmRlciBhcmcwLCBpbnQgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNsZWFyRm9yY2VkRGlzcGxheVNpemUoaW50IGRpc3BsYXlJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjbGVhckZvcmNlZERpc3BsYXlEZW5zaXR5KGludCBkaXNwbGF5SWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0T3ZlcnNjYW4oaW50IGRpc3BsYXlJZCwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xvc2VTeXN0ZW1EaWFsb2dzKFN0cmluZyBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3RhcnRGcmVlemluZ1NjcmVlbihpbnQgZXhpdEFuaW0sIGludCBlbnRlckFuaW0pIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHN0b3BGcmVlemluZ1NjcmVlbigpIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRpc2FibGVLZXlndWFyZChJQmluZGVyIGFyZzAsIFN0cmluZyBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZXhlY3V0ZUFwcFRyYW5zaXRpb24oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZXhpdEtleWd1YXJkU2VjdXJlbHkoSU9uS2V5Z3VhcmRFeGl0UmVzdWx0IGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBmcmVlemVSb3RhdGlvbihpbnQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmbG9hdCBnZXRBbmltYXRpb25TY2FsZShpbnQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0W10gZ2V0QW5pbWF0aW9uU2NhbGVzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBcHBPcmllbnRhdGlvbihJQXBwbGljYXRpb25Ub2tlbiBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFBlbmRpbmdBcHBUcmFuc2l0aW9uKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaW5LZXlndWFyZFJlc3RyaWN0ZWRJbnB1dE1vZGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaW5wdXRNZXRob2RDbGllbnRIYXNGb2N1cyhJSW5wdXRNZXRob2RDbGllbnQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzS2V5Z3VhcmRMb2NrZWQoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNLZXlndWFyZFNlY3VyZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ZpZXdTZXJ2ZXJSdW5uaW5nKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJV2luZG93U2Vzc2lvbiBvcGVuU2Vzc2lvbihJSW5wdXRNZXRob2RDbGllbnQgYXJnMCwgSUlucHV0Q29udGV4dCBhcmcxKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb3ZlcnJpZGVQZW5kaW5nQXBwVHJhbnNpdGlvbihTdHJpbmcgYXJnMCwgaW50IGFyZzEsIGludCBhcmcyLAotICAgICAgICAgICAgSVJlbW90ZUNhbGxiYWNrIHN0YXJ0ZWRDYWxsYmFjaykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG92ZXJyaWRlUGVuZGluZ0FwcFRyYW5zaXRpb25TY2FsZVVwKGludCBzdGFydFgsIGludCBzdGFydFksIGludCBzdGFydFdpZHRoLAotICAgICAgICAgICAgaW50IHN0YXJ0SGVpZ2h0KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG92ZXJyaWRlUGVuZGluZ0FwcFRyYW5zaXRpb25UaHVtYihCaXRtYXAgc3JjVGh1bWIsIGludCBzdGFydFgsIGludCBzdGFydFksCi0gICAgICAgICAgICBJUmVtb3RlQ2FsbGJhY2sgc3RhcnRlZENhbGxiYWNrLCBib29sZWFuIHNjYWxlVXApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcGF1c2VLZXlEaXNwYXRjaGluZyhJQmluZGVyIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBwcmVwYXJlQXBwVHJhbnNpdGlvbihpbnQgYXJnMCwgYm9vbGVhbiBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVlbmFibGVLZXlndWFyZChJQmluZGVyIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVBcHBUb2tlbihJQmluZGVyIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVXaW5kb3dUb2tlbihJQmluZGVyIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZXN1bWVLZXlEaXNwYXRjaGluZyhJQmluZGVyIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQml0bWFwIHNjcmVlbnNob3RBcHBsaWNhdGlvbnMoSUJpbmRlciBhcmcwLCBpbnQgZGlzcGxheUlkLCBpbnQgYXJnMSwKLSAgICAgICAgICAgIGludCBhcmcyLCBib29sZWFuIGFyZzMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFuaW1hdGlvblNjYWxlKGludCBhcmcwLCBmbG9hdCBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0QW5pbWF0aW9uU2NhbGVzKGZsb2F0W10gYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFwcEdyb3VwSWQoSUJpbmRlciBhcmcwLCBpbnQgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFwcE9yaWVudGF0aW9uKElBcHBsaWNhdGlvblRva2VuIGFyZzAsIGludCBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFwcFN0YXJ0aW5nV2luZG93KElCaW5kZXIgYXJnMCwgU3RyaW5nIGFyZzEsIGludCBhcmcyLCBDb21wYXRpYmlsaXR5SW5mbyBhcmczLAotICAgICAgICAgICAgQ2hhclNlcXVlbmNlIGFyZzQsIGludCBhcmc1LCBpbnQgYXJnNiwgaW50IGFyZzcsIGludCBhcmc4LCBJQmluZGVyIGFyZzksIGJvb2xlYW4gYXJnMTApCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFwcFZpc2liaWxpdHkoSUJpbmRlciBhcmcwLCBib29sZWFuIGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRBcHBXaWxsQmVIaWRkZW4oSUJpbmRlciBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEV2ZW50RGlzcGF0Y2hpbmcoYm9vbGVhbiBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEZvY3VzZWRBcHAoSUJpbmRlciBhcmcwLCBib29sZWFuIGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0SW5pdGlhbERpc3BsYXlTaXplKGludCBkaXNwbGF5SWQsIFBvaW50IHNpemUpIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGdldEJhc2VEaXNwbGF5U2l6ZShpbnQgZGlzcGxheUlkLCBQb2ludCBzaXplKSB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRGb3JjZWREaXNwbGF5U2l6ZShpbnQgZGlzcGxheUlkLCBpbnQgYXJnMCwgaW50IGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRJbml0aWFsRGlzcGxheURlbnNpdHkoaW50IGRpc3BsYXlJZCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRCYXNlRGlzcGxheURlbnNpdHkoaW50IGRpc3BsYXlJZCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0Rm9yY2VkRGlzcGxheURlbnNpdHkoaW50IGRpc3BsYXlJZCwgaW50IGRlbnNpdHkpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0SW5Ub3VjaE1vZGUoYm9vbGVhbiBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldE5ld0NvbmZpZ3VyYXRpb24oQ29uZmlndXJhdGlvbiBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVJvdGF0aW9uKGJvb2xlYW4gYXJnMCwgYm9vbGVhbiBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFN0cmljdE1vZGVWaXN1YWxJbmRpY2F0b3JQcmVmZXJlbmNlKFN0cmluZyBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNob3dTdHJpY3RNb2RlVmlvbGF0aW9uKGJvb2xlYW4gYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdGFydEFwcEZyZWV6aW5nU2NyZWVuKElCaW5kZXIgYXJnMCwgaW50IGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc3RhcnRWaWV3U2VydmVyKGludCBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3RhdHVzQmFyVmlzaWJpbGl0eUNoYW5nZWQoaW50IGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3RvcEFwcEZyZWV6aW5nU2NyZWVuKElCaW5kZXIgYXJnMCwgYm9vbGVhbiBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHN0b3BWaWV3U2VydmVyKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHRoYXdSb3RhdGlvbigpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbmZpZ3VyYXRpb24gdXBkYXRlT3JpZW50YXRpb25Gcm9tQXBwVG9rZW5zKENvbmZpZ3VyYXRpb24gYXJnMCwgSUJpbmRlciBhcmcxKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCB3YXRjaFJvdGF0aW9uKElSb3RhdGlvbldhdGNoZXIgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUm90YXRpb25XYXRjaGVyKElSb3RhdGlvbldhdGNoZXIgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gd2FpdEZvcldpbmRvd0RyYXduKElCaW5kZXIgdG9rZW4sIElSZW1vdGVDYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElCaW5kZXIgYXNCaW5kZXIoKSB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRQcmVmZXJyZWRPcHRpb25zUGFuZWxHcmF2aXR5KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBHcmF2aXR5LkNFTlRFUl9IT1JJWk9OVEFMIHwgR3Jhdml0eS5CT1RUT007Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGlzbWlzc0tleWd1YXJkKCkgewotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGxvY2tOb3coQnVuZGxlIG9wdGlvbnMpIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU2FmZU1vZGVFbmFibGVkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElCaW5kZXIgZ2V0Rm9jdXNlZFdpbmRvd1Rva2VuKCkgewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldElucHV0RmlsdGVyKElJbnB1dEZpbHRlciBmaWx0ZXIpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0V2luZG93RnJhbWUoSUJpbmRlciB0b2tlbiwgUmVjdCBvdXRGcmFtZSkgewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0TWFnbmlmaWNhdGlvbkNhbGxiYWNrcyhJTWFnbmlmaWNhdGlvbkNhbGxiYWNrcyBjYWxsYmFja3MpIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldE1hZ25pZmljYXRpb25TcGVjKE1hZ25pZmljYXRpb25TcGVjIHNwZWMpIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNYWduaWZpY2F0aW9uU3BlYyBnZXRDb21wYXRpYmxlTWFnbmlmaWNhdGlvblNwZWNGb3JXaW5kb3coSUJpbmRlciB3aW5kb3dUb2tlbikgewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzUm90YXRpb25Gcm96ZW4oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0VG91Y2hFeHBsb3JhdGlvbkVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXJfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiM2ExYi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnZpZXc7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyOwotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5YbWxSZXNvdXJjZVBhcnNlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5YbWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi0vKioKLSAqIERlbGVnYXRlIHVzZWQgdG8gcHJvdmlkZSBuZXcgaW1wbGVtZW50YXRpb24gb2YgYSBzZWxlY3QgZmV3IG1ldGhvZHMgb2Yge0BsaW5rIExheW91dEluZmxhdGVyfQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIExheW91dEluZmxhdGVyIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTGF5b3V0SW5mbGF0ZXJfRGVsZWdhdGUgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19NRVJHRSA9ICJtZXJnZSI7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gc0lzSW5JbmNsdWRlID0gZmFsc2U7Ci0KLSAgICAvKioKLSAgICAgKiBSZWN1cnNpdmUgbWV0aG9kIHVzZWQgdG8gZGVzY2VuZCBkb3duIHRoZSB4bWwgaGllcmFyY2h5IGFuZCBpbnN0YW50aWF0ZQotICAgICAqIHZpZXdzLCBpbnN0YW50aWF0ZSB0aGVpciBjaGlsZHJlbiwgYW5kIHRoZW4gY2FsbCBvbkZpbmlzaEluZmxhdGUoKS4KLSAgICAgKgotICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24ganVzdCByZWNvcmRzIHRoZSBtZXJnZSBzdGF0dXMgYmVmb3JlIGNhbGxpbmcgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCi0gICAgICovCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIHZvaWQgckluZmxhdGUoTGF5b3V0SW5mbGF0ZXIgdGhpc0luZmxhdGVyLAotICAgICAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXIsIFZpZXcgcGFyZW50LCBmaW5hbCBBdHRyaWJ1dGVTZXQgYXR0cnMsCi0gICAgICAgICAgICBib29sZWFuIGZpbmlzaEluZmxhdGUpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0KLSAgICAgICAgaWYgKGZpbmlzaEluZmxhdGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBtZXJnZSBySW5mbGF0ZSEKLSAgICAgICAgICAgIGlmICh0aGlzSW5mbGF0ZXIgaW5zdGFuY2VvZiBCcmlkZ2VJbmZsYXRlcikgewotICAgICAgICAgICAgICAgICgoQnJpZGdlSW5mbGF0ZXIpIHRoaXNJbmZsYXRlcikuc2V0SXNJbk1lcmdlKHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gLS0tLSBTVEFSVCBERUZBVUxUIElNUExFTUVOVEFUSU9OLgotCi0gICAgICAgIHRoaXNJbmZsYXRlci5ySW5mbGF0ZV9PcmlnaW5hbChwYXJzZXIsIHBhcmVudCwgYXR0cnMsIGZpbmlzaEluZmxhdGUpOwotCi0gICAgICAgIC8vIC0tLS0gRU5EIERFRkFVTFQgSU1QTEVNRU5UQVRJT04uCi0KLSAgICAgICAgaWYgKGZpbmlzaEluZmxhdGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBtZXJnZSBySW5mbGF0ZSEKLSAgICAgICAgICAgIGlmICh0aGlzSW5mbGF0ZXIgaW5zdGFuY2VvZiBCcmlkZ2VJbmZsYXRlcikgewotICAgICAgICAgICAgICAgICgoQnJpZGdlSW5mbGF0ZXIpIHRoaXNJbmZsYXRlcikuc2V0SXNJbk1lcmdlKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwYXJzZUluY2x1ZGUoCi0gICAgICAgICAgICBMYXlvdXRJbmZsYXRlciB0aGlzSW5mbGF0ZXIsCi0gICAgICAgICAgICBYbWxQdWxsUGFyc2VyIHBhcnNlciwgVmlldyBwYXJlbnQsIEF0dHJpYnV0ZVNldCBhdHRycykKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0KLSAgICAgICAgaW50IHR5cGU7Ci0KLSAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFZpZXdHcm91cCkgewotICAgICAgICAgICAgZmluYWwgaW50IGxheW91dCA9IGF0dHJzLmdldEF0dHJpYnV0ZVJlc291cmNlVmFsdWUobnVsbCwgImxheW91dCIsIDApOwotICAgICAgICAgICAgaWYgKGxheW91dCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHZhbHVlID0gYXR0cnMuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImxheW91dCIpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbmZsYXRlRXhjZXB0aW9uKCJZb3UgbXVzdCBzcGVjaWZpeSBhIGxheW91dCBpbiB0aGUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGluY2x1ZGUgdGFnOiA8aW5jbHVkZSBsYXlvdXQ9XCJAbGF5b3V0L2xheW91dElEXCIgLz4iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW5mbGF0ZUV4Y2VwdGlvbigiWW91IG11c3Qgc3BlY2lmaXkgYSB2YWxpZCBsYXlvdXQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgInJlZmVyZW5jZS4gVGhlIGxheW91dCBJRCAiICsgdmFsdWUgKyAiIGlzIG5vdCB2YWxpZC4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZpbmFsIFhtbFJlc291cmNlUGFyc2VyIGNoaWxkUGFyc2VyID0KLSAgICAgICAgICAgICAgICAgICAgdGhpc0luZmxhdGVyLmdldENvbnRleHQoKS5nZXRSZXNvdXJjZXMoKS5nZXRMYXlvdXQobGF5b3V0KTsKLQotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIEF0dHJpYnV0ZVNldCBjaGlsZEF0dHJzID0gWG1sLmFzQXR0cmlidXRlU2V0KGNoaWxkUGFyc2VyKTsKLQotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHR5cGUgPSBjaGlsZFBhcnNlci5uZXh0KCkpICE9IFhtbFB1bGxQYXJzZXIuU1RBUlRfVEFHICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAhPSBYbWxQdWxsUGFyc2VyLkVORF9ET0NVTUVOVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1wdHkuCi0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSBYbWxQdWxsUGFyc2VyLlNUQVJUX1RBRykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEluZmxhdGVFeGNlcHRpb24oY2hpbGRQYXJzZXIuZ2V0UG9zaXRpb25EZXNjcmlwdGlvbigpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogTm8gc3RhcnQgdGFnIGZvdW5kISIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNoaWxkTmFtZSA9IGNoaWxkUGFyc2VyLmdldE5hbWUoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoVEFHX01FUkdFLmVxdWFscyhjaGlsZE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmZsYXRlIGFsbCBjaGlsZHJlbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNJbmZsYXRlci5ySW5mbGF0ZShjaGlsZFBhcnNlciwgcGFyZW50LCBjaGlsZEF0dHJzLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IHZpZXcgPSB0aGlzSW5mbGF0ZXIuY3JlYXRlVmlld0Zyb21UYWcocGFyZW50LCBjaGlsZE5hbWUsIGNoaWxkQXR0cnMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVmlld0dyb3VwIGdyb3VwID0gKFZpZXdHcm91cCkgcGFyZW50OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB0cnkgdG8gbG9hZCB0aGUgbGF5b3V0IHBhcmFtcyBzZXQgaW4gdGhlIDxpbmNsdWRlIC8+IHRhZy4gSWYKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXkgZG9uJ3QgZXhpc3QsIHdlIHdpbGwgcmVseSBvbiB0aGUgbGF5b3V0IHBhcmFtcyBzZXQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlZCBYTUwgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIER1cmluZyBhIGxheW91dHBhcmFtcyBnZW5lcmF0aW9uLCBhIHJ1bnRpbWUgZXhjZXB0aW9uIGlzIHRocm93bgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgZWl0aGVyIGxheW91dF93aWR0aCBvciBsYXlvdXRfaGVpZ2h0IGlzIG1pc3NpbmcuIFdlIGNhdGNoCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGV4Y2VwdGlvbiBhbmQgc2V0IGxvY2FsUGFyYW1zIGFjY29yZGluZ2x5OiB0cnVlIG1lYW5zIHdlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWNjZXNzZnVsbHkgbG9hZGVkIGxheW91dCBwYXJhbXMgZnJvbSB0aGUgPGluY2x1ZGUgLz4gdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmFsc2UgbWVhbnMgd2UgbmVlZCB0byByZWx5IG9uIHRoZSBpbmNsdWRlZCBsYXlvdXQgcGFyYW1zLgotICAgICAgICAgICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcyBwYXJhbXMgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtLS0tIFNUQVJUIENIQU5HRVMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzSXNJbkluY2x1ZGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tLS0gRU5EIENIQU5HRVMKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IGdyb3VwLmdlbmVyYXRlTGF5b3V0UGFyYW1zKGF0dHJzKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0tLSBTVEFSVCBDSEFOR0VTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc0lzSW5JbmNsdWRlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0tLSBFTkQgQ0hBTkdFUwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0gZ3JvdXAuZ2VuZXJhdGVMYXlvdXRQYXJhbXMoY2hpbGRBdHRycyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tLS0gU1RBUlQgQ0hBTkdFUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNJc0luSW5jbHVkZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tLS0gRU5EIENIQU5HRVMKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LnNldExheW91dFBhcmFtcyhwYXJhbXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5mbGF0ZSBhbGwgY2hpbGRyZW4uCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzSW5mbGF0ZXIuckluZmxhdGUoY2hpbGRQYXJzZXIsIHZpZXcsIGNoaWxkQXR0cnMsIHRydWUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG92ZXJyaWRlIHRoZSBpbmNsdWRlZCBsYXlvdXQncyBhbmRyb2lkOmlkIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmUgc2V0IG9uIHRoZSA8aW5jbHVkZSAvPiB0YWcgaXRzZWxmLgotICAgICAgICAgICAgICAgICAgICAgICAgVHlwZWRBcnJheSBhID0gdGhpc0luZmxhdGVyLm1Db250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVmlldywgMCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWQgPSBhLmdldFJlc291cmNlSWQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVmlld19pZCwgVmlldy5OT19JRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGlsZSB3ZSdyZSBhdCBpdCwgbGV0J3MgdHJ5IHRvIG92ZXJyaWRlIGFuZHJvaWQ6dmlzaWJpbGl0eS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB2aXNpYmlsaXR5ID0gYS5nZXRJbnQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuVmlld192aXNpYmlsaXR5LCAtMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhLnJlY3ljbGUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkICE9IFZpZXcuTk9fSUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LnNldElkKGlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2aXNpYmlsaXR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuYWRkVmlldyh2aWV3KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkUGFyc2VyLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhyb3cgbmV3IEluZmxhdGVFeGNlcHRpb24oIjxpbmNsdWRlIC8+IGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgVmlld0dyb3VwIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBpbnQgY3VycmVudERlcHRoID0gcGFyc2VyLmdldERlcHRoKCk7Ci0gICAgICAgIHdoaWxlICgoKHR5cGUgPSBwYXJzZXIubmV4dCgpKSAhPSBYbWxQdWxsUGFyc2VyLkVORF9UQUcgfHwKLSAgICAgICAgICAgICAgICBwYXJzZXIuZ2V0RGVwdGgoKSA+IGN1cnJlbnREZXB0aCkgJiYgdHlwZSAhPSBYbWxQdWxsUGFyc2VyLkVORF9ET0NVTUVOVCkgewotICAgICAgICAgICAgLy8gRW1wdHkKLSAgICAgICAgfQotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvU3VyZmFjZVZpZXcuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9TdXJmYWNlVmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWE0YjNiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9TdXJmYWNlVmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuTW9ja1ZpZXc7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLQotLyoqCi0gKiBNb2NrIHZlcnNpb24gb2YgdGhlIFN1cmZhY2VWaWV3LgotICogT25seSBub24gb3ZlcnJpZGUgcHVibGljIG1ldGhvZHMgZnJvbSB0aGUgcmVhbCBTdXJmYWNlVmlldyBoYXZlIGJlZW4gYWRkZWQgaW4gdGhlcmUuCi0gKiBNZXRob2RzIHRoYXQgdGFrZSBhbiB1bmtub3duIGNsYXNzIGFzIHBhcmFtZXRlciBvciBhcyByZXR1cm4gb2JqZWN0LCBoYXZlIGJlZW4gcmVtb3ZlZCBmb3Igbm93LgotICoKLSAqIFRPRE86IGdlbmVyYXRlIGF1dG9tYXRpY2FsbHkuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU3VyZmFjZVZpZXcgZXh0ZW5kcyBNb2NrVmlldyB7Ci0KLSAgICBwdWJsaWMgU3VyZmFjZVZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN1cmZhY2VWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMgLCAwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3VyZmFjZVZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdXJmYWNlSG9sZGVyIGdldEhvbGRlcigpIHsKLSAgICAgICAgcmV0dXJuIG1TdXJmYWNlSG9sZGVyOwotICAgIH0KLQotICAgIHByaXZhdGUgU3VyZmFjZUhvbGRlciBtU3VyZmFjZUhvbGRlciA9IG5ldyBTdXJmYWNlSG9sZGVyKCkgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NyZWF0aW5nKCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGFkZENhbGxiYWNrKENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ2FsbGJhY2soQ2FsbGJhY2sgY2FsbGJhY2spIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRGaXhlZFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0U2l6ZUZyb21MYXlvdXQoKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0Rm9ybWF0KGludCBmb3JtYXQpIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRUeXBlKGludCB0eXBlKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0S2VlcFNjcmVlbk9uKGJvb2xlYW4gc2NyZWVuT24pIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQ2FudmFzIGxvY2tDYW52YXMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQ2FudmFzIGxvY2tDYW52YXMoUmVjdCBkaXJ0eSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdW5sb2NrQ2FudmFzQW5kUG9zdChDYW52YXMgY2FudmFzKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFN1cmZhY2UgZ2V0U3VyZmFjZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBSZWN0IGdldFN1cmZhY2VGcmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L1ZpZXdDb25maWd1cmF0aW9uX0FjY2Vzc29yLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvVmlld0NvbmZpZ3VyYXRpb25fQWNjZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM1MzNlMC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvVmlld0NvbmZpZ3VyYXRpb25fQWNjZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotLyoqCi0gKiBDbGFzcyBhbGxvd2luZyBhY2Nlc3MgdG8gcGFja2FnZS1wcm90ZWN0ZWQgbWV0aG9kcy9maWVsZHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBWaWV3Q29uZmlndXJhdGlvbl9BY2Nlc3NvciB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2xlYXJDb25maWd1cmF0aW9ucygpIHsKLSAgICAgICAgLy8gY2xlYXIgdGhlIHN0b3JlZCBWaWV3Q29uZmlndXJhdGlvbiBzaW5jZSB0aGUgbWFwIGlzIHBlciBkZW5zaXR5IGFuZCBub3QgcGVyIGNvbnRleHQuCi0gICAgICAgIFZpZXdDb25maWd1cmF0aW9uLnNDb25maWd1cmF0aW9ucy5jbGVhcigpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L1ZpZXdSb290SW1wbF9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L1ZpZXdSb290SW1wbF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGI4NGVmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9WaWV3Um9vdEltcGxfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSB1c2VkIHRvIHByb3ZpZGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIGEgc2VsZWN0IGZldyBtZXRob2RzIG9mIHtAbGluayBWaWV3Um9vdEltcGx9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgIG1ldGhvZHMgb2YgVmlld1Jvb3RJbXBsIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVmlld1Jvb3RJbXBsX0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGlzSW5Ub3VjaE1vZGUoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gdGhpcyBhbGxvd3MgZGlzcGxheWluZyBzZWxlY3Rpb24uCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L1ZpZXdfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9WaWV3X0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMTVmN2MuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L1ZpZXdfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSB1c2VkIHRvIHByb3ZpZGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIGEgc2VsZWN0IGZldyBtZXRob2RzIG9mIHtAbGluayBWaWV3fQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIFZpZXcgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBWaWV3X0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGlzSW5FZGl0TW9kZShWaWV3IHRoaXNWaWV3KSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyR2xvYmFsX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlckdsb2JhbF9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjA2ZTU1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VyR2xvYmFsX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnZpZXc7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLS8qKgotICogRGVsZWdhdGUgdXNlZCB0byBwcm92aWRlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBhIHNlbGVjdCBmZXcgbWV0aG9kcyBvZgotICoge0BsaW5rIFdpbmRvd01hbmFnZXJHbG9iYWx9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgIG1ldGhvZHMgb2YgV2luZG93TWFuYWdlckdsb2JhbCBoYXZlIGJlZW4KLSAqIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqLwotcHVibGljIGNsYXNzIFdpbmRvd01hbmFnZXJHbG9iYWxfRGVsZWdhdGUgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgSVdpbmRvd01hbmFnZXIgc1NlcnZpY2U7Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICBwdWJsaWMgc3RhdGljIElXaW5kb3dNYW5hZ2VyIGdldFdpbmRvd01hbmFnZXJTZXJ2aWNlKCkgewotICAgICAgICByZXR1cm4gc1NlcnZpY2U7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBzdHVmZiAtLS0tCi0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0V2luZG93TWFuYWdlclNlcnZpY2UoSVdpbmRvd01hbmFnZXIgc2VydmljZSkgewotICAgICAgICBzU2VydmljZSA9IHNlcnZpY2U7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZDc4MzYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eTsKLQotaW1wb3J0IGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2VJbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5TZXJ2aWNlSW5mbzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSVdpbmRvdzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBTeXN0ZW0gbGV2ZWwgc2VydmljZSB0aGF0IHNlcnZlcyBhcyBhbiBldmVudCBkaXNwYXRjaCBmb3Ige0BsaW5rIEFjY2Vzc2liaWxpdHlFdmVudH1zLgotICogU3VjaCBldmVudHMgYXJlIGdlbmVyYXRlZCB3aGVuIHNvbWV0aGluZyBub3RhYmxlIGhhcHBlbnMgaW4gdGhlIHVzZXIgaW50ZXJmYWNlLAotICogZm9yIGV4YW1wbGUgYW4ge0BsaW5rIGFuZHJvaWQuYXBwLkFjdGl2aXR5fSBzdGFydHMsIHRoZSBmb2N1cyBvciBzZWxlY3Rpb24gb2YgYQotICoge0BsaW5rIGFuZHJvaWQudmlldy5WaWV3fSBjaGFuZ2VzIGV0Yy4gUGFydGllcyBpbnRlcmVzdGVkIGluIGhhbmRsaW5nIGFjY2Vzc2liaWxpdHkKLSAqIGV2ZW50cyBpbXBsZW1lbnQgYW5kIHJlZ2lzdGVyIGFuIGFjY2Vzc2liaWxpdHkgc2VydmljZSB3aGljaCBleHRlbmRzCi0gKiB7QGxpbmsgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5BY2Nlc3NpYmlsaXR5U2VydmljZX0uCi0gKgotICogQHNlZSBBY2Nlc3NpYmlsaXR5RXZlbnQKLSAqIEBzZWUgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5BY2Nlc3NpYmlsaXR5U2VydmljZQotICogQHNlZSBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCNnZXRTeXN0ZW1TZXJ2aWNlCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBBY2Nlc3NpYmlsaXR5TWFuYWdlciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgQWNjZXNzaWJpbGl0eU1hbmFnZXIgc0luc3RhbmNlID0gbmV3IEFjY2Vzc2liaWxpdHlNYW5hZ2VyKCk7Ci0KLSAgICAvKioKLSAgICAgKiBMaXN0ZW5lciBmb3IgdGhlIGFjY2Vzc2liaWxpdHkgc3RhdGUuCi0gICAgICovCi0gICAgcHVibGljIGludGVyZmFjZSBBY2Nlc3NpYmlsaXR5U3RhdGVDaGFuZ2VMaXN0ZW5lciB7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGxlZCBiYWNrIG9uIGNoYW5nZSBpbiB0aGUgYWNjZXNzaWJpbGl0eSBzdGF0ZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGVuYWJsZWQgV2hldGhlciBhY2Nlc3NpYmlsaXR5IGlzIGVuYWJsZWQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBvbkFjY2Vzc2liaWxpdHlTdGF0ZUNoYW5nZWQoYm9vbGVhbiBlbmFibGVkKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYW4gQWNjZXNzaWJpbGl0eU1hbmFnZXIgaW5zdGFuY2UgKGNyZWF0ZSBvbmUgaWYgbmVjZXNzYXJ5KS4KLSAgICAgKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBBY2Nlc3NpYmlsaXR5TWFuYWdlciBnZXRJbnN0YW5jZShDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIHNJbnN0YW5jZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYW4gaW5zdGFuY2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY29udGV4dCBBIHtAbGluayBDb250ZXh0fS4KLSAgICAgKi8KLSAgICBwcml2YXRlIEFjY2Vzc2liaWxpdHlNYW5hZ2VyKCkgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgaWYgdGhlIHtAbGluayBBY2Nlc3NpYmlsaXR5TWFuYWdlcn0gaXMgZW5hYmxlZC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIHtAbGluayBBY2Nlc3NpYmlsaXR5TWFuYWdlcn0gaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlbmRzIGFuIHtAbGluayBBY2Nlc3NpYmlsaXR5RXZlbnR9LiBJZiB0aGlzIHtAbGluayBBY2Nlc3NpYmlsaXR5TWFuYWdlcn0gaXMgbm90Ci0gICAgICogZW5hYmxlZCB0aGUgY2FsbCBpcyBhIE5PT1AuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIHtAbGluayBBY2Nlc3NpYmlsaXR5RXZlbnR9LgotICAgICAqCi0gICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgYSBjbGllbnQgdHJpZXMgdG8gc2VuZCBhbiB7QGxpbmsgQWNjZXNzaWJpbGl0eUV2ZW50fQotICAgICAqICAgICAgICAgd2hpbGUgYWNjZXNzaWJpbGl0eSBpcyBub3QgZW5hYmxlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZW5kQWNjZXNzaWJpbGl0eUV2ZW50KEFjY2Vzc2liaWxpdHlFdmVudCBldmVudCkgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlcXVlc3RzIGludGVycnVwdGlvbiBvZiB0aGUgYWNjZXNzaWJpbGl0eSBmZWVkYmFjayBmcm9tIGFsbCBhY2Nlc3NpYmlsaXR5IHNlcnZpY2VzLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGludGVycnVwdCgpIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgU2VydmljZUluZm99cyBvZiB0aGUgaW5zdGFsbGVkIGFjY2Vzc2liaWxpdHkgc2VydmljZXMuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEFuIHVubW9kaWZpYWJsZSBsaXN0IHdpdGgge0BsaW5rIFNlcnZpY2VJbmZvfXMuCi0gICAgICovCi0gICAgcHVibGljIExpc3Q8U2VydmljZUluZm8+IGdldEFjY2Vzc2liaWxpdHlTZXJ2aWNlTGlzdCgpIHsKLSAgICAgICAgLy8gbm9ybWFsIGltcGxlbWVudGF0aW9uIGRvZXMgdGhpcyBpbiBzb21lIGNhc2UsIHNvIGxldCdzIGRvIHRoZSBzYW1lCi0gICAgICAgIC8vICh1bm1vZGlmaWFibGVMaXN0IHdyYXBwZWQgYXJvdW5kIG51bGwpLgotICAgICAgICBMaXN0PFNlcnZpY2VJbmZvPiBzZXJ2aWNlcyA9IG51bGw7Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KHNlcnZpY2VzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdDxBY2Nlc3NpYmlsaXR5U2VydmljZUluZm8+IGdldEluc3RhbGxlZEFjY2Vzc2liaWxpdHlTZXJ2aWNlTGlzdCgpIHsKLSAgICAgICAgLy8gbm9ybWFsIGltcGxlbWVudGF0aW9uIGRvZXMgdGhpcyBpbiBzb21lIGNhc2UsIHNvIGxldCdzIGRvIHRoZSBzYW1lCi0gICAgICAgIC8vICh1bm1vZGlmaWFibGVMaXN0IHdyYXBwZWQgYXJvdW5kIG51bGwpLgotICAgICAgICBMaXN0PEFjY2Vzc2liaWxpdHlTZXJ2aWNlSW5mbz4gc2VydmljZXMgPSBudWxsOwotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChzZXJ2aWNlcyk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gYWRkQWNjZXNzaWJpbGl0eVN0YXRlQ2hhbmdlTGlzdGVuZXIoCi0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5U3RhdGVDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBY2Nlc3NpYmlsaXR5U3RhdGVDaGFuZ2VMaXN0ZW5lcigKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlTdGF0ZUNoYW5nZUxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgYWRkQWNjZXNzaWJpbGl0eUludGVyYWN0aW9uQ29ubmVjdGlvbihJV2luZG93IHdpbmRvd1Rva2VuLAotICAgICAgICAgICAgSUFjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNvbm5lY3Rpb24gY29ubmVjdGlvbikgewotICAgICAgICByZXR1cm4gVmlldy5OT19JRDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVBY2Nlc3NpYmlsaXR5SW50ZXJhY3Rpb25Db25uZWN0aW9uKElXaW5kb3cgd2luZG93VG9rZW4pIHsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZE1hbmFnZXJfQWNjZXNzb3IuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZE1hbmFnZXJfQWNjZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM0ZjljOC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RNYW5hZ2VyX0FjY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2Q7Ci0KLS8qKgotICogQ2xhc3MgYWxsb3dpbmcgYWNjZXNzIHRvIHBhY2thZ2UtcHJvdGVjdGVkIG1ldGhvZHMvZmllbGRzLgotICovCi1wdWJsaWMgY2xhc3MgSW5wdXRNZXRob2RNYW5hZ2VyX0FjY2Vzc29yIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZXNldEluc3RhbmNlKCkgewotICAgICAgICBJbnB1dE1ldGhvZE1hbmFnZXIuc0luc3RhbmNlID0gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RNYW5hZ2VyX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RNYW5hZ2VyX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOTg4NDcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kTWFuYWdlcl9EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUlJbnB1dE1ldGhvZE1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci0KLQotLyoqCi0gKiBEZWxlZ2F0ZSB1c2VkIHRvIHByb3ZpZGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIGEgc2VsZWN0IGZldyBtZXRob2RzIG9mIHtAbGluayBJbnB1dE1ldGhvZE1hbmFnZXJ9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgIG1ldGhvZHMgb2YgSW5wdXRNZXRob2RNYW5hZ2VyIGhhdmUgYmVlbiByZXBsYWNlZAotICogYnkgY2FsbHMgdG8gbWV0aG9kcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoaXMgZGVsZWdhdGUgY2xhc3MuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgSW5wdXRNZXRob2RNYW5hZ2VyX0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gT3ZlcnJpZGRlbiBtZXRob2RzIC0tLS0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBJbnB1dE1ldGhvZE1hbmFnZXIgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoSW5wdXRNZXRob2RNYW5hZ2VyLmNsYXNzKSB7Ci0gICAgICAgICAgICBJbnB1dE1ldGhvZE1hbmFnZXIgaW1tID0gSW5wdXRNZXRob2RNYW5hZ2VyLnBlZWtJbnN0YW5jZSgpOwotICAgICAgICAgICAgaWYgKGltbSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaW1tID0gbmV3IElucHV0TWV0aG9kTWFuYWdlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCcmlkZ2VJSW5wdXRNZXRob2RNYW5hZ2VyKCksIExvb3Blci5nZXRNYWluTG9vcGVyKCkpOwotICAgICAgICAgICAgICAgIElucHV0TWV0aG9kTWFuYWdlci5zSW5zdGFuY2UgPSBpbW07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gaW1tOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC93ZWJraXQvV2ViVmlldy5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC93ZWJraXQvV2ViVmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDJmMjA0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvd2Via2l0L1dlYlZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLndlYmtpdDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuTW9ja1ZpZXc7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBpY3R1cmU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci0KLS8qKgotICogTW9jayB2ZXJzaW9uIG9mIHRoZSBXZWJWaWV3LgotICogT25seSBub24gb3ZlcnJpZGUgcHVibGljIG1ldGhvZHMgZnJvbSB0aGUgcmVhbCBXZWJWaWV3IGhhdmUgYmVlbiBhZGRlZCBpbiB0aGVyZS4KLSAqIE1ldGhvZHMgdGhhdCB0YWtlIGFuIHVua25vd24gY2xhc3MgYXMgcGFyYW1ldGVyIG9yIGFzIHJldHVybiBvYmplY3QsIGhhdmUgYmVlbiByZW1vdmVkIGZvciBub3cuCi0gKiAKLSAqIFRPRE86IGdlbmVyYXRlIGF1dG9tYXRpY2FsbHkuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgV2ViVmlldyBleHRlbmRzIE1vY2tWaWV3IHsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIG5ldyBXZWJWaWV3IHdpdGggYSBDb250ZXh0IG9iamVjdC4KLSAgICAgKiBAcGFyYW0gY29udGV4dCBBIENvbnRleHQgb2JqZWN0IHVzZWQgdG8gYWNjZXNzIGFwcGxpY2F0aW9uIGFzc2V0cy4KLSAgICAgKi8KLSAgICBwdWJsaWMgV2ViVmlldyhDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgV2ViVmlldyB3aXRoIGxheW91dCBwYXJhbWV0ZXJzLgotICAgICAqIEBwYXJhbSBjb250ZXh0IEEgQ29udGV4dCBvYmplY3QgdXNlZCB0byBhY2Nlc3MgYXBwbGljYXRpb24gYXNzZXRzLgotICAgICAqIEBwYXJhbSBhdHRycyBBbiBBdHRyaWJ1dGVTZXQgcGFzc2VkIHRvIG91ciBwYXJlbnQuCi0gICAgICovCi0gICAgcHVibGljIFdlYlZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLndlYlZpZXdTdHlsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0IGEgbmV3IFdlYlZpZXcgd2l0aCBsYXlvdXQgcGFyYW1ldGVycyBhbmQgYSBkZWZhdWx0IHN0eWxlLgotICAgICAqIEBwYXJhbSBjb250ZXh0IEEgQ29udGV4dCBvYmplY3QgdXNlZCB0byBhY2Nlc3MgYXBwbGljYXRpb24gYXNzZXRzLgotICAgICAqIEBwYXJhbSBhdHRycyBBbiBBdHRyaWJ1dGVTZXQgcGFzc2VkIHRvIG91ciBwYXJlbnQuCi0gICAgICogQHBhcmFtIGRlZlN0eWxlIFRoZSBkZWZhdWx0IHN0eWxlIHJlc291cmNlIElELgotICAgICAqLwotICAgIHB1YmxpYyBXZWJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gU1RBUlQgRkFLRSBQVUJMSUMgTUVUSE9EUwotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldEhvcml6b250YWxTY3JvbGxiYXJPdmVybGF5KGJvb2xlYW4gb3ZlcmxheSkgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFZlcnRpY2FsU2Nyb2xsYmFyT3ZlcmxheShib29sZWFuIG92ZXJsYXkpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBvdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhcigpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIG92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcigpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmVQYXNzd29yZChTdHJpbmcgaG9zdCwgU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRIdHRwQXV0aFVzZXJuYW1lUGFzc3dvcmQoU3RyaW5nIGhvc3QsIFN0cmluZyByZWFsbSwKLSAgICAgICAgICAgIFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZ1tdIGdldEh0dHBBdXRoVXNlcm5hbWVQYXNzd29yZChTdHJpbmcgaG9zdCwgU3RyaW5nIHJlYWxtKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGVuYWJsZVBsYXRmb3JtTm90aWZpY2F0aW9ucygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZVBsYXRmb3JtTm90aWZpY2F0aW9ucygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsb2FkVXJsKFN0cmluZyB1cmwpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsb2FkRGF0YShTdHJpbmcgZGF0YSwgU3RyaW5nIG1pbWVUeXBlLCBTdHJpbmcgZW5jb2RpbmcpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsb2FkRGF0YVdpdGhCYXNlVVJMKFN0cmluZyBiYXNlVXJsLCBTdHJpbmcgZGF0YSwKLSAgICAgICAgICAgIFN0cmluZyBtaW1lVHlwZSwgU3RyaW5nIGVuY29kaW5nLCBTdHJpbmcgZmFpbFVybCkgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN0b3BMb2FkaW5nKCkgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlbG9hZCgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBjYW5Hb0JhY2soKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBnb0JhY2soKSB7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gY2FuR29Gb3J3YXJkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZ29Gb3J3YXJkKCkgewotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGNhbkdvQmFja09yRm9yd2FyZChpbnQgc3RlcHMpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGdvQmFja09yRm9yd2FyZChpbnQgc3RlcHMpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwYWdlVXAoYm9vbGVhbiB0b3ApIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBwYWdlRG93bihib29sZWFuIGJvdHRvbSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2xlYXJWaWV3KCkgewotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgUGljdHVyZSBjYXB0dXJlUGljdHVyZSgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIGZsb2F0IGdldFNjYWxlKCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJbml0aWFsU2NhbGUoaW50IHNjYWxlSW5QZXJjZW50KSB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW52b2tlWm9vbVBpY2tlcigpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXF1ZXN0Rm9jdXNOb2RlSHJlZihNZXNzYWdlIGhyZWZNc2cpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXF1ZXN0SW1hZ2VSZWYoTWVzc2FnZSBtc2cpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFVybCgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIEJpdG1hcCBnZXRGYXZpY29uKCkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldFByb2dyZXNzKCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGludCBnZXRDb250ZW50SGVpZ2h0KCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBwYXVzZVRpbWVycygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXN1bWVUaW1lcnMoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2xlYXJDYWNoZSgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjbGVhckZvcm1EYXRhKCkgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNsZWFySGlzdG9yeSgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjbGVhclNzbFByZWZlcmVuY2VzKCkgewotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZpbmRBZGRyZXNzKFN0cmluZyBhZGRyKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRvY3VtZW50SGFzSW1hZ2VzKE1lc3NhZ2UgcmVzcG9uc2UpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRXZWJWaWV3Q2xpZW50KFdlYlZpZXdDbGllbnQgY2xpZW50KSB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RG93bmxvYWRMaXN0ZW5lcihEb3dubG9hZExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0V2ViQ2hyb21lQ2xpZW50KFdlYkNocm9tZUNsaWVudCBjbGllbnQpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRKYXZhc2NyaXB0SW50ZXJmYWNlKE9iamVjdCBvYmosIFN0cmluZyBpbnRlcmZhY2VOYW1lKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFZpZXcgZ2V0Wm9vbUNvbnRyb2xzKCkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB6b29tSW4oKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB6b29tT3V0KCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L1BvbGljeU1hbmFnZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9Qb2xpY3lNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMDBkYzUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L1BvbGljeU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeTsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlJlbmRlckFjdGlvbjsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQudmlldy5CcmlkZ2VJbmZsYXRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuRmFsbGJhY2tFdmVudEhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyUG9saWN5OwotCi0vKioKLSAqIEN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvZiBQb2xpY3lNYW5hZ2VyIHRoYXQgZG9lcyBub3RoaW5nIHRvIHJ1biBpbiBMYXlvdXRMaWIuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUG9saWN5TWFuYWdlciB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIFdpbmRvdyBtYWtlTmV3V2luZG93KENvbnRleHQgY29udGV4dCkgewotICAgICAgICAvLyB0aGlzIHdpbGwgbGlrZWx5IGNyYXNoIHNvbWV3aGVyZSBiZXlvbmQgc28gd2UgbG9nIGl0LgotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiQ2FsbCB0byBQb2xpY3lNYW5hZ2VyLm1ha2VOZXdXaW5kb3cgaXMgbm90IHN1cHBvcnRlZCIsIG51bGwpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIExheW91dEluZmxhdGVyIG1ha2VOZXdMYXlvdXRJbmZsYXRlcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBCcmlkZ2VJbmZsYXRlcihjb250ZXh0LCBSZW5kZXJBY3Rpb24uZ2V0Q3VycmVudENvbnRleHQoKS5nZXRQcm9qZWN0Q2FsbGJhY2soKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBXaW5kb3dNYW5hZ2VyUG9saWN5IG1ha2VOZXdXaW5kb3dNYW5hZ2VyKCkgewotICAgICAgICAvLyB0aGlzIHdpbGwgbGlrZWx5IGNyYXNoIHNvbWV3aGVyZSBiZXlvbmQgc28gd2UgbG9nIGl0LgotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwKLSAgICAgICAgICAgICAgICAiQ2FsbCB0byBQb2xpY3lNYW5hZ2VyLm1ha2VOZXdXaW5kb3dNYW5hZ2VyIGlzIG5vdCBzdXBwb3J0ZWQiLCBudWxsKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBGYWxsYmFja0V2ZW50SGFuZGxlciBtYWtlTmV3RmFsbGJhY2tFdmVudEhhbmRsZXIoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHJldHVybiBuZXcgRmFsbGJhY2tFdmVudEhhbmRsZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldFZpZXcoVmlldyB2KSB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgcHJlRGlzcGF0Y2hLZXlFdmVudChLZXlFdmVudCBldmVudCkgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoS2V5RXZlbnQoS2V5RXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGV4dHNlcnZpY2UvSVRleHRTZXJ2aWNlc01hbmFnZXJfU3R1Yl9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGV4dHNlcnZpY2UvSVRleHRTZXJ2aWNlc01hbmFnZXJfU3R1Yl9EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDE3MjkyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3RleHRzZXJ2aWNlL0lUZXh0U2VydmljZXNNYW5hZ2VyX1N0dWJfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZXh0c2VydmljZTsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5MYXlvdXRsaWJEZWxlZ2F0ZTsKLQotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLnZpZXcudGV4dHNlcnZpY2UuU3BlbGxDaGVja2VySW5mbzsKLWltcG9ydCBhbmRyb2lkLnZpZXcudGV4dHNlcnZpY2UuU3BlbGxDaGVja2VyU3VidHlwZTsKLQotCi0vKioKLSAqIERlbGVnYXRlIHVzZWQgdG8gcHJvdmlkZSBuZXcgaW1wbGVtZW50YXRpb24gb2YgYSBzZWxlY3QgZmV3IG1ldGhvZHMgb2YKLSAqIHtAbGluayBJVGV4dFNlcnZpY2VzTWFuYWdlciRTdHVifQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsICBtZXRob2RzIG9mIFN0dWIgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBJVGV4dFNlcnZpY2VzTWFuYWdlcl9TdHViX0RlbGVnYXRlIHsKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIHB1YmxpYyBzdGF0aWMgSVRleHRTZXJ2aWNlc01hbmFnZXIgYXNJbnRlcmZhY2UoSUJpbmRlciBvYmopIHsKLSAgICAgICAgLy8gaWdub3JlIHRoZSBvYmogYW5kIHJldHVybiBhIGZha2UgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uCi0gICAgICAgIHJldHVybiBuZXcgRmFrZVRleHRTZXJ2aWNlc01hbmFnZXIoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBGYWtlVGV4dFNlcnZpY2VzTWFuYWdlciBpbXBsZW1lbnRzIElUZXh0U2VydmljZXNNYW5hZ2VyIHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZmluaXNoU3BlbGxDaGVja2VyU2VydmljZShJU3BlbGxDaGVja2VyU2Vzc2lvbkxpc3RlbmVyIGFyZzApCi0gICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3BlbGxDaGVja2VySW5mbyBnZXRDdXJyZW50U3BlbGxDaGVja2VyKFN0cmluZyBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTcGVsbENoZWNrZXJTdWJ0eXBlIGdldEN1cnJlbnRTcGVsbENoZWNrZXJTdWJ0eXBlKFN0cmluZyBhcmcwLCBib29sZWFuIGFyZzEpCi0gICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3BlbGxDaGVja2VySW5mb1tdIGdldEVuYWJsZWRTcGVsbENoZWNrZXJzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBnZXRTcGVsbENoZWNrZXJTZXJ2aWNlKFN0cmluZyBhcmcwLCBTdHJpbmcgYXJnMSwKLSAgICAgICAgICAgICAgICBJVGV4dFNlcnZpY2VzU2Vzc2lvbkxpc3RlbmVyIGFyZzIsIElTcGVsbENoZWNrZXJTZXNzaW9uTGlzdGVuZXIgYXJnMywgQnVuZGxlIGFyZzQpCi0gICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1NwZWxsQ2hlY2tlckVuYWJsZWQoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50U3BlbGxDaGVja2VyKFN0cmluZyBhcmcwLCBTdHJpbmcgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRDdXJyZW50U3BlbGxDaGVja2VyU3VidHlwZShTdHJpbmcgYXJnMCwgaW50IGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2V0U3BlbGxDaGVja2VyRW5hYmxlZChib29sZWFuIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIElCaW5kZXIgYXNCaW5kZXIoKSB7Ci0gICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgfQotIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3V0aWwvWG1sVXRpbHNfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3V0aWwvWG1sVXRpbHNfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY5OThiOC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL1htbFV0aWxzX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotCi0KLS8qKgotICogRGVsZWdhdGUgdXNlZCB0byBwcm92aWRlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBhIHNlbGVjdCBmZXcgbWV0aG9kcyBvZiB7QGxpbmsgWG1sVXRpbHN9Ci0gKgotICogVGhyb3VnaCB0aGUgbGF5b3V0bGliX2NyZWF0ZSB0b29sLCB0aGUgb3JpZ2luYWwgIG1ldGhvZHMgb2YgWG1sVXRpbHMgaGF2ZSBiZWVuIHJlcGxhY2VkCi0gKiBieSBjYWxscyB0byBtZXRob2RzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdGhpcyBkZWxlZ2F0ZSBjbGFzcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBYbWxVdGlsc19EZWxlZ2F0ZSB7Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgZmluYWwgaW50IGNvbnZlcnRWYWx1ZVRvSW50KENoYXJTZXF1ZW5jZSBjaGFyU2VxLCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIGlmIChudWxsID09IGNoYXJTZXEpCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotCi0gICAgICAgIFN0cmluZyBubSA9IGNoYXJTZXEudG9TdHJpbmcoKTsKLQotICAgICAgICAvLyBUaGlzIGNvZGUgaXMgY29waWVkIGZyb20gdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLiBUaGUgaXNzdWUgaXMgdGhhdAotICAgICAgICAvLyBUaGUgRGFsdmlrIGxpYnJhcmllcyBhcmUgYWJsZSB0byBoYW5kbGUgSW50ZWdlci5wYXJzZSgiWFhYWFhYWFgiLCAxNikgd2hlcmUgWFhYWFhYWAotICAgICAgICAvLyBpcyA+IDgwMDAwMDAwIGJ1dCB0aGUgSmF2YSBWTSBjYW5ub3QuCi0KLSAgICAgICAgaW50IHNpZ24gPSAxOwotICAgICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICBpbnQgbGVuID0gbm0ubGVuZ3RoKCk7Ci0gICAgICAgIGludCBiYXNlID0gMTA7Ci0KLSAgICAgICAgaWYgKCctJyA9PSBubS5jaGFyQXQoMCkpIHsKLSAgICAgICAgICAgIHNpZ24gPSAtMTsKLSAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoJzAnID09IG5tLmNoYXJBdChpbmRleCkpIHsKLSAgICAgICAgICAgIC8vICBRdWljayBjaGVjayBmb3IgYSB6ZXJvIGJ5IGl0c2VsZgotICAgICAgICAgICAgaWYgKGluZGV4ID09IChsZW4gLSAxKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAgY2hhciBjID0gbm0uY2hhckF0KGluZGV4ICsgMSk7Ci0KLSAgICAgICAgICAgIGlmICgneCcgPT0gYyB8fCAnWCcgPT0gYykgewotICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgYmFzZSA9IDE2OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgICAgICAgIGJhc2UgPSA4OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCcjJyA9PSBubS5jaGFyQXQoaW5kZXgpKSB7Ci0gICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgICAgYmFzZSA9IDE2OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICgoaW50KUxvbmcucGFyc2VMb25nKG5tLnN1YnN0cmluZyhpbmRleCksIGJhc2UpKSAqIHNpZ247Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9CcmlkZ2UuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvQnJpZGdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNGJlNzEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9CcmlkZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlOwotCi1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLkVSUk9SX1VOS05PV047Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLlNVQ0NFU1M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuQ2FwYWJpbGl0eTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuRHJhd2FibGVQYXJhbXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVuZGVyU2Vzc2lvbjsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0OwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5TZXNzaW9uUGFyYW1zOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5Gb250TG9hZGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5SZW5kZXJEcmF3YWJsZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuUmVuZGVyU2Vzc2lvbkltcGw7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS51dGlsLkR5bmFtaWNJZE1hcDsKLWltcG9ydCBjb20uYW5kcm9pZC5uaW5lcGF0Y2guTmluZVBhdGNoQ2h1bms7Ci1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLlJlc291cmNlVHlwZTsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLk1ldGhvZEFkYXB0ZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5PdmVycmlkZU1ldGhvZDsKLWltcG9ydCBjb20uYW5kcm9pZC51dGlsLlBhaXI7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5VTG9jYWxlOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5CcmlkZ2VBc3NldE1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5UeXBlZmFjZV9BY2Nlc3NvcjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlR5cGVmYWNlX0RlbGVnYXRlOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyX0FjY2Vzc29yOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdQYXJlbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZi5Tb2Z0UmVmZXJlbmNlOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1NYXA7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrOwotCi0vKioKLSAqIE1haW4gZW50cnkgcG9pbnQgb2YgdGhlIExheW91dExpYiBCcmlkZ2UuCi0gKiA8cC8+VG8gdXNlIHRoaXMgYnJpZGdlLCBzaW1wbHkgaW5zdGFudGlhdGUgYW4gb2JqZWN0IG9mIHR5cGUge0BsaW5rIEJyaWRnZX0gYW5kIGNhbGwKLSAqIHtAbGluayAjY3JlYXRlU2NlbmUoU2NlbmVQYXJhbXMpfQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQnJpZGdlIGV4dGVuZHMgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkJyaWRnZSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUNVX0xPQ0FMRV9ESVJFQ1RJT05fUlRMID0gInJpZ2h0LXRvLWxlZnQiOwotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGF0aWNNZXRob2ROb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24gewotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotICAgICAgICBwdWJsaWMgU3RhdGljTWV0aG9kTm90SW1wbGVtZW50ZWRFeGNlcHRpb24oU3RyaW5nIG1zZykgewotICAgICAgICAgICAgc3VwZXIobXNnKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIExvY2sgdG8gZW5zdXJlIG9ubHkgb25lIHJlbmRlcmluZy9pbmZsYXRpbmcgaGFwcGVucyBhdCBhIHRpbWUuCi0gICAgICogVGhpcyBpcyBkdWUgdG8gc29tZSBzaW5nbGV0b24gaW4gdGhlIEFuZHJvaWQgZnJhbWV3b3JrLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFJlZW50cmFudExvY2sgc0xvY2sgPSBuZXcgUmVlbnRyYW50TG9jaygpOwotCi0gICAgLyoqCi0gICAgICogTWFwcyBmcm9tIGlkIHRvIHJlc291cmNlIHR5cGUvbmFtZS4gVGhpcyBpcyBmb3IgY29tLmFuZHJvaWQuaW50ZXJuYWwuUgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIE1hcDxJbnRlZ2VyLCBQYWlyPFJlc291cmNlVHlwZSwgU3RyaW5nPj4gc1JNYXAgPQotICAgICAgICBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBQYWlyPFJlc291cmNlVHlwZSwgU3RyaW5nPj4oKTsKLQotICAgIC8qKgotICAgICAqIFNhbWUgYXMgc1JNYXAgZXhjZXB0IGZvciBpbnRbXSBpbnN0ZWFkIG9mIGludCByZXNvdXJjZXMuIFRoaXMgaXMgZm9yIGFuZHJvaWQuUiBvbmx5LgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIE1hcDxJbnRBcnJheSwgU3RyaW5nPiBzUkFycmF5TWFwID0gbmV3IEhhc2hNYXA8SW50QXJyYXksIFN0cmluZz4oKTsKLSAgICAvKioKLSAgICAgKiBSZXZlcnNlIG1hcCBjb21wYXJlZCB0byBzUk1hcCwgcmVzb3VyY2UgdHlwZSAtPiAocmVzb3VyY2UgbmFtZSAtPiBpZCkuCi0gICAgICogVGhpcyBpcyBmb3IgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8UmVzb3VyY2VUeXBlLCBNYXA8U3RyaW5nLCBJbnRlZ2VyPj4gc1JldlJNYXAgPQotICAgICAgICBuZXcgRW51bU1hcDxSZXNvdXJjZVR5cGUsIE1hcDxTdHJpbmcsSW50ZWdlcj4+KFJlc291cmNlVHlwZS5jbGFzcyk7Ci0KLSAgICAvLyBmcmFtZXdvcmsgcmVzb3VyY2VzIGFyZSBkZWZpbmVkIGFzIDB4MDFYWCMjIyMgd2hlcmUgWFggaXMgdGhlIHJlc291cmNlIHR5cGUgKGxheW91dCwKLSAgICAvLyBkcmF3YWJsZSwgZXRjLi4uKS4gVXNpbmcgRkYgYXMgdGhlIHR5cGUgYWxsb3dzIGZvciAyNTUgcmVzb3VyY2UgdHlwZXMgYmVmb3JlIHdlIGdldCBhCi0gICAgLy8gY29sbGlzaW9uIHdoaWNoIHNob3VsZCBiZSBmaW5lLgotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBEWU5BTUlDX0lEX1NFRURfU1RBUlQgPSAweDAxZmYwMDAwOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIER5bmFtaWNJZE1hcCBzRHluYW1pY0lkcyA9IG5ldyBEeW5hbWljSWRNYXAoRFlOQU1JQ19JRF9TRUVEX1NUQVJUKTsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIE1hcDxPYmplY3QsIE1hcDxTdHJpbmcsIFNvZnRSZWZlcmVuY2U8Qml0bWFwPj4+IHNQcm9qZWN0Qml0bWFwQ2FjaGUgPQotICAgICAgICBuZXcgSGFzaE1hcDxPYmplY3QsIE1hcDxTdHJpbmcsIFNvZnRSZWZlcmVuY2U8Qml0bWFwPj4+KCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgTWFwPE9iamVjdCwgTWFwPFN0cmluZywgU29mdFJlZmVyZW5jZTxOaW5lUGF0Y2hDaHVuaz4+PiBzUHJvamVjdDlQYXRjaENhY2hlID0KLSAgICAgICAgbmV3IEhhc2hNYXA8T2JqZWN0LCBNYXA8U3RyaW5nLCBTb2Z0UmVmZXJlbmNlPE5pbmVQYXRjaENodW5rPj4+KCk7Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8U3RyaW5nLCBTb2Z0UmVmZXJlbmNlPEJpdG1hcD4+IHNGcmFtZXdvcmtCaXRtYXBDYWNoZSA9Ci0gICAgICAgIG5ldyBIYXNoTWFwPFN0cmluZywgU29mdFJlZmVyZW5jZTxCaXRtYXA+PigpOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIE1hcDxTdHJpbmcsIFNvZnRSZWZlcmVuY2U8TmluZVBhdGNoQ2h1bms+PiBzRnJhbWV3b3JrOVBhdGNoQ2FjaGUgPQotICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsIFNvZnRSZWZlcmVuY2U8TmluZVBhdGNoQ2h1bms+PigpOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgTWFwPFN0cmluZywgSW50ZWdlcj4+IHNFbnVtVmFsdWVNYXA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBzUGxhdGZvcm1Qcm9wZXJ0aWVzOwotCi0gICAgLyoqCi0gICAgICogaW50W10gd3JhcHBlciB0byB1c2UgYXMga2V5cyBpbiBtYXBzLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGNsYXNzIEludEFycmF5IHsKLSAgICAgICAgcHJpdmF0ZSBpbnRbXSBtQXJyYXk7Ci0KLSAgICAgICAgcHJpdmF0ZSBJbnRBcnJheSgpIHsKLSAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgSW50QXJyYXkoaW50W10gYSkgewotICAgICAgICAgICAgbUFycmF5ID0gYTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBzZXQoaW50W10gYSkgewotICAgICAgICAgICAgbUFycmF5ID0gYTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgICAgICAgcmV0dXJuIEFycmF5cy5oYXNoQ29kZShtQXJyYXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgICAgICAgICBpZiAodGhpcyA9PSBvYmopIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoZ2V0Q2xhc3MoKSAhPSBvYmouZ2V0Q2xhc3MoKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBJbnRBcnJheSBvdGhlciA9IChJbnRBcnJheSkgb2JqOwotICAgICAgICAgICAgaWYgKCFBcnJheXMuZXF1YWxzKG1BcnJheSwgb3RoZXIubUFycmF5KSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogSW5zdGFuY2Ugb2YgSW50QXJyYXlXcmFwcGVyIHRvIGJlIHJldXNlZCBpbiB7QGxpbmsgI3Jlc29sdmVSZXNvdXJjZUlkKGludFtdKX0uICovCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgSW50QXJyYXkgc0ludEFycmF5V3JhcHBlciA9IG5ldyBJbnRBcnJheSgpOwotCi0gICAgLyoqCi0gICAgICogQSBkZWZhdWx0IGxvZyB0aGFuIHByaW50cyB0byBzdGRvdXQvc3RkZXJyLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIExheW91dExvZyBzRGVmYXVsdExvZyA9IG5ldyBMYXlvdXRMb2coKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlcnJvcihTdHJpbmcgdGFnLCBTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IGRhdGEpIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlcnJvcihTdHJpbmcgdGFnLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIHRocm93YWJsZSwgT2JqZWN0IGRhdGEpIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB3YXJuaW5nKFN0cmluZyB0YWcsIFN0cmluZyBtZXNzYWdlLCBPYmplY3QgZGF0YSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIEN1cnJlbnQgbG9nLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIExheW91dExvZyBzQ3VycmVudExvZyA9IHNEZWZhdWx0TG9nOwotCi0gICAgcHJpdmF0ZSBFbnVtU2V0PENhcGFiaWxpdHk+IG1DYXBhYmlsaXRpZXM7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEFwaUxldmVsKCkgewotICAgICAgICByZXR1cm4gY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkJyaWRnZS5BUElfQ1VSUkVOVDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRW51bVNldDxDYXBhYmlsaXR5PiBnZXRDYXBhYmlsaXRpZXMoKSB7Ci0gICAgICAgIHJldHVybiBtQ2FwYWJpbGl0aWVzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGluaXQoTWFwPFN0cmluZyxTdHJpbmc+IHBsYXRmb3JtUHJvcGVydGllcywKLSAgICAgICAgICAgIEZpbGUgZm9udExvY2F0aW9uLAotICAgICAgICAgICAgTWFwPFN0cmluZywgTWFwPFN0cmluZywgSW50ZWdlcj4+IGVudW1WYWx1ZU1hcCwKLSAgICAgICAgICAgIExheW91dExvZyBsb2cpIHsKLSAgICAgICAgc1BsYXRmb3JtUHJvcGVydGllcyA9IHBsYXRmb3JtUHJvcGVydGllczsKLSAgICAgICAgc0VudW1WYWx1ZU1hcCA9IGVudW1WYWx1ZU1hcDsKLQotICAgICAgICAvLyBkb24ndCB1c2UgRW51bVNldC5hbGxPZigpLCBiZWNhdXNlIHRoZSBicmlkZ2UgZG9lc24ndCBjb21lIHdpdGggaXRzIHNwZWNpZmljIHZlcnNpb24KLSAgICAgICAgLy8gb2YgbGF5b3V0bGliX2FwaS4gSXQgaXMgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCB3aGljaCBjb3VsZCBoYXZlIGEgbW9yZSByZWNlbnQgdmVyc2lvbgotICAgICAgICAvLyB3aXRoIG5ld2VyLCB1bnN1cHBvcnRlZCBjYXBhYmlsaXRpZXMuCi0gICAgICAgIG1DYXBhYmlsaXRpZXMgPSBFbnVtU2V0Lm9mKAotICAgICAgICAgICAgICAgIENhcGFiaWxpdHkuVU5CT1VORF9SRU5ERVJJTkcsCi0gICAgICAgICAgICAgICAgQ2FwYWJpbGl0eS5DVVNUT01fQkFDS0dST1VORF9DT0xPUiwKLSAgICAgICAgICAgICAgICBDYXBhYmlsaXR5LlJFTkRFUiwKLSAgICAgICAgICAgICAgICBDYXBhYmlsaXR5LkxBWU9VVF9PTkxZLAotICAgICAgICAgICAgICAgIENhcGFiaWxpdHkuRU1CRURERURfTEFZT1VULAotICAgICAgICAgICAgICAgIENhcGFiaWxpdHkuVklFV19NQU5JUFVMQVRJT04sCi0gICAgICAgICAgICAgICAgQ2FwYWJpbGl0eS5QTEFZX0FOSU1BVElPTiwKLSAgICAgICAgICAgICAgICBDYXBhYmlsaXR5LkFOSU1BVEVEX1ZJRVdfTUFOSVBVTEFUSU9OLAotICAgICAgICAgICAgICAgIENhcGFiaWxpdHkuQURBUFRFUl9CSU5ESU5HLAotICAgICAgICAgICAgICAgIENhcGFiaWxpdHkuRVhURU5ERURfVklFV0lORk8sCi0gICAgICAgICAgICAgICAgQ2FwYWJpbGl0eS5GSVhFRF9TQ0FMQUJMRV9OSU5FX1BBVENILAotICAgICAgICAgICAgICAgIENhcGFiaWxpdHkuUlRMKTsKLQotCi0gICAgICAgIEJyaWRnZUFzc2V0TWFuYWdlci5pbml0U3lzdGVtKCk7Ci0KLSAgICAgICAgLy8gV2hlbiBERUJVR19MQVlPVVQgaXMgc2V0IGFuZCBpcyBub3QgMCBvciBmYWxzZSwgc2V0dXAgYSBkZWZhdWx0IGxpc3RlbmVyCi0gICAgICAgIC8vIG9uIHN0YXRpYyAobmF0aXZlKSBtZXRob2RzIHdoaWNoIHByaW50cyB0aGUgc2lnbmF0dXJlIG9uIHRoZSBjb25zb2xlIGFuZAotICAgICAgICAvLyB0aHJvd3MgYW4gZXhjZXB0aW9uLgotICAgICAgICAvLyBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRlc3RpbmcgdGhlIHJlbmRlcmluZyBpbiBBRFQgdG8gaWRlbnRpZnkgc3RhdGljIG5hdGl2ZQotICAgICAgICAvLyBtZXRob2RzIHRoYXQgYXJlIGlnbm9yZWQgLS0gbGF5b3V0bGliX2NyZWF0ZSBtYWtlcyB0aGVtIHJldHVybnMgMC9mYWxzZS9udWxsCi0gICAgICAgIC8vIHdoaWNoIGlzIGdlbmVyYWxseSBPSyB5ZXQgbWlnaHQgYmUgYSBwcm9ibGVtLCBzbyB0aGlzIGlzIGhvdyB5b3UnZCBmaW5kIG91dC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gQ3VycmVudGx5IGxheW91dGxpYl9jcmVhdGUgb25seSBvdmVycmlkZXMgc3RhdGljIG5hdGl2ZSBtZXRob2QuCi0gICAgICAgIC8vIFN0YXRpYyBub24tbmF0aXZlcyBhcmUgbm90IG92ZXJyaWRkZW4gYW5kIHRodXMgZG8gbm90IGdldCBoZXJlLgotICAgICAgICBmaW5hbCBTdHJpbmcgZGVidWcgPSBTeXN0ZW0uZ2V0ZW52KCJERUJVR19MQVlPVVQiKTsKLSAgICAgICAgaWYgKGRlYnVnICE9IG51bGwgJiYgIWRlYnVnLmVxdWFscygiMCIpICYmICFkZWJ1Zy5lcXVhbHMoImZhbHNlIikpIHsKLQotICAgICAgICAgICAgT3ZlcnJpZGVNZXRob2Quc2V0RGVmYXVsdExpc3RlbmVyKG5ldyBNZXRob2RBZGFwdGVyKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSW52b2tlVihTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNEZWZhdWx0TG9nLmVycm9yKG51bGwsICJNaXNzaW5nIFN0dWI6ICIgKyBzaWduYXR1cmUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc05hdGl2ZSA/ICIgKG5hdGl2ZSkiIDogIiIpLCBudWxsIC8qZGF0YSovKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWcuZXF1YWxzSWdub3JlQ2FzZSgidGhyb3ciKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3dpbmcgdGhpcyBleGNlcHRpb24gZG9lc24ndCBzZWVtIHRoYXQgdXNlZnVsLiBJdCBicmVha3MKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsYXlvdXQgZWRpdG9yIHlldCBkb2Vzbid0IGRpc3BsYXkgYW55dGhpbmcgbWVhbmluZ2Z1bCB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZXIuIEhhdmluZyB0aGUgZXJyb3IgaW4gdGhlIGNvbnNvbGUgaXMganVzdCBhcyB1c2VmdWwuIFdlJ2xsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBpdCBvbmx5IGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyAidGhyb3ciIG9yICJUSFJPVyIuCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3RhdGljTWV0aG9kTm90SW1wbGVtZW50ZWRFeGNlcHRpb24oc2lnbmF0dXJlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbG9hZCB0aGUgZm9udHMuCi0gICAgICAgIEZvbnRMb2FkZXIgZm9udExvYWRlciA9IEZvbnRMb2FkZXIuY3JlYXRlKGZvbnRMb2NhdGlvbi5nZXRBYnNvbHV0ZVBhdGgoKSk7Ci0gICAgICAgIGlmIChmb250TG9hZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIFR5cGVmYWNlX0RlbGVnYXRlLmluaXQoZm9udExvYWRlcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2cuZXJyb3IoTGF5b3V0TG9nLlRBR19CUk9LRU4sCi0gICAgICAgICAgICAgICAgICAgICJGYWlsZWQgY3JlYXRlIEZvbnRMb2FkZXIgaW4gbGF5b3V0IGxpYi4iLCBudWxsKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG5vdyBwYXJzZSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SIChhbmQgb25seSB0aGlzIG9uZSBhcyBhbmRyb2lkLlIgaXMgYSBzdWJzZXQgb2YKLSAgICAgICAgLy8gdGhlIGludGVybmFsIHZlcnNpb24pLCBhbmQgcHV0IHRoZSBjb250ZW50IGluIHRoZSBtYXBzLgotICAgICAgICB0cnkgewotICAgICAgICAgICAgQ2xhc3M8Pz4gciA9IGNvbS5hbmRyb2lkLmludGVybmFsLlIuY2xhc3M7Ci0KLSAgICAgICAgICAgIGZvciAoQ2xhc3M8Pz4gaW5uZXIgOiByLmdldERlY2xhcmVkQ2xhc3NlcygpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHJlc1R5cGVOYW1lID0gaW5uZXIuZ2V0U2ltcGxlTmFtZSgpOwotICAgICAgICAgICAgICAgIFJlc291cmNlVHlwZSByZXNUeXBlID0gUmVzb3VyY2VUeXBlLmdldEVudW0ocmVzVHlwZU5hbWUpOwotICAgICAgICAgICAgICAgIGlmIChyZXNUeXBlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgSW50ZWdlcj4gZnVsbE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKLSAgICAgICAgICAgICAgICAgICAgc1JldlJNYXAucHV0KHJlc1R5cGUsIGZ1bGxNYXApOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoRmllbGQgZiA6IGlubmVyLmdldERlY2xhcmVkRmllbGRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgcHJvY2VzcyBzdGF0aWMgZmluYWwgZmllbGRzLiBTaW5jZSB0aGUgZmluYWwgYXR0cmlidXRlIG1heSBoYXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWVuIGFsdGVyZWQgYnkgbGF5b3V0bGliX2NyZWF0ZSwgd2Ugb25seSBjaGVjayBzdGF0aWMKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RpZmllcnMgPSBmLmdldE1vZGlmaWVycygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1vZGlmaWVyLmlzU3RhdGljKG1vZGlmaWVycykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzczw/PiB0eXBlID0gZi5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpICYmIHR5cGUuZ2V0Q29tcG9uZW50VHlwZSgpID09IGludC5jbGFzcykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgb2JqZWN0IGlzIGFuIGludFtdIHdlIHB1dCBpdCBpbiBzUkFycmF5TWFwIHVzaW5nIGFuIEludEFycmF5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyYXBwZXIgdGhhdCBwcm9wZXJseSBpbXBsZW1lbnRzIGVxdWFscyBhbmQgaGFzaGNvZGUgZm9yIHRoZSBhcnJheQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvYmplY3RzLCBhcyByZXF1aXJlZCBieSB0aGUgbWFwIGNvbnRyYWN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzUkFycmF5TWFwLnB1dChuZXcgSW50QXJyYXkoKGludFtdKSBmLmdldChudWxsKSksIGYuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gaW50LmNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgdmFsdWUgPSAoSW50ZWdlcikgZi5nZXQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNSTWFwLnB1dCh2YWx1ZSwgUGFpci5vZihyZXNUeXBlLCBmLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsTWFwLnB1dChmLmdldE5hbWUoKSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aHJvd2FibGUpIHsKLSAgICAgICAgICAgIGlmIChsb2cgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGxvZy5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gbG9hZCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SIGZyb20gdGhlIGxheW91dCBsaWJyYXJ5IGphciIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZGlzcG9zZSgpIHsKLSAgICAgICAgQnJpZGdlQXNzZXRNYW5hZ2VyLmNsZWFyU3lzdGVtKCk7Ci0KLSAgICAgICAgLy8gZGlzcG9zZSBvZiB0aGUgZGVmYXVsdCB0eXBlZmFjZS4KLSAgICAgICAgVHlwZWZhY2VfQWNjZXNzb3IucmVzZXREZWZhdWx0cygpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0YXJ0cyBhIGxheW91dCBzZXNzaW9uIGJ5IGluZmxhdGluZyBhbmQgcmVuZGVyaW5nIGl0LiBUaGUgbWV0aG9kIHJldHVybnMgYQotICAgICAqIHtAbGluayBSZW5kZXJTZXNzaW9ufSBvbiB3aGljaCBmdXJ0aGVyIGFjdGlvbnMgY2FuIGJlIHRha2VuLgotICAgICAqCi0gICAgICogQHBhcmFtIHBhcmFtcyB0aGUge0BsaW5rIFNlc3Npb25QYXJhbXN9IG9iamVjdCB3aXRoIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvIGNyZWF0ZQotICAgICAqICAgICAgICAgICB0aGUgc2NlbmUuCi0gICAgICogQHJldHVybiBhIG5ldyB7QGxpbmsgUmVuZGVyU2Vzc2lvbn0gb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHJlc3VsdCBvZiB0aGUgbGF5b3V0LgotICAgICAqIEBzaW5jZSA1Ci0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlbmRlclNlc3Npb24gY3JlYXRlU2Vzc2lvbihTZXNzaW9uUGFyYW1zIHBhcmFtcykgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgUmVzdWx0IGxhc3RSZXN1bHQgPSBTVUNDRVNTLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICAgICAgUmVuZGVyU2Vzc2lvbkltcGwgc2NlbmUgPSBuZXcgUmVuZGVyU2Vzc2lvbkltcGwocGFyYW1zKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcHJlcGFyZVRocmVhZCgpOwotICAgICAgICAgICAgICAgIGxhc3RSZXN1bHQgPSBzY2VuZS5pbml0KHBhcmFtcy5nZXRUaW1lb3V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChsYXN0UmVzdWx0LmlzU3VjY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RSZXN1bHQgPSBzY2VuZS5pbmZsYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0UmVzdWx0LmlzU3VjY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0UmVzdWx0ID0gc2NlbmUucmVuZGVyKHRydWUgLypmcmVzaFJlbmRlciovKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgc2NlbmUucmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIGNsZWFudXBUaHJlYWQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBCcmlkZ2VSZW5kZXJTZXNzaW9uKHNjZW5lLCBsYXN0UmVzdWx0KTsKLSAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLSAgICAgICAgICAgIC8vIGdldCB0aGUgcmVhbCBjYXVzZSBvZiB0aGUgZXhjZXB0aW9uLgotICAgICAgICAgICAgVGhyb3dhYmxlIHQyID0gdDsKLSAgICAgICAgICAgIHdoaWxlICh0Mi5nZXRDYXVzZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0MiA9IHQuZ2V0Q2F1c2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBuZXcgQnJpZGdlUmVuZGVyU2Vzc2lvbihudWxsLAotICAgICAgICAgICAgICAgICAgICBFUlJPUl9VTktOT1dOLmNyZWF0ZVJlc3VsdCh0Mi5nZXRNZXNzYWdlKCksIHQpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXN1bHQgcmVuZGVyRHJhd2FibGUoRHJhd2FibGVQYXJhbXMgcGFyYW1zKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBSZXN1bHQgbGFzdFJlc3VsdCA9IFNVQ0NFU1MuY3JlYXRlUmVzdWx0KCk7Ci0gICAgICAgICAgICBSZW5kZXJEcmF3YWJsZSBhY3Rpb24gPSBuZXcgUmVuZGVyRHJhd2FibGUocGFyYW1zKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcHJlcGFyZVRocmVhZCgpOwotICAgICAgICAgICAgICAgIGxhc3RSZXN1bHQgPSBhY3Rpb24uaW5pdChwYXJhbXMuZ2V0VGltZW91dCgpKTsKLSAgICAgICAgICAgICAgICBpZiAobGFzdFJlc3VsdC5pc1N1Y2Nlc3MoKSkgewotICAgICAgICAgICAgICAgICAgICBsYXN0UmVzdWx0ID0gYWN0aW9uLnJlbmRlcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgYWN0aW9uLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBjbGVhbnVwVGhyZWFkKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBsYXN0UmVzdWx0OwotICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgICAgICAgLy8gZ2V0IHRoZSByZWFsIGNhdXNlIG9mIHRoZSBleGNlcHRpb24uCi0gICAgICAgICAgICBUaHJvd2FibGUgdDIgPSB0OwotICAgICAgICAgICAgd2hpbGUgKHQyLmdldENhdXNlKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHQyID0gdC5nZXRDYXVzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1VOS05PV04uY3JlYXRlUmVzdWx0KHQyLmdldE1lc3NhZ2UoKSwgdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjbGVhckNhY2hlcyhPYmplY3QgcHJvamVjdEtleSkgewotICAgICAgICBpZiAocHJvamVjdEtleSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzUHJvamVjdEJpdG1hcENhY2hlLnJlbW92ZShwcm9qZWN0S2V5KTsKLSAgICAgICAgICAgIHNQcm9qZWN0OVBhdGNoQ2FjaGUucmVtb3ZlKHByb2plY3RLZXkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3VsdCBnZXRWaWV3UGFyZW50KE9iamVjdCB2aWV3T2JqZWN0KSB7Ci0gICAgICAgIGlmICh2aWV3T2JqZWN0IGluc3RhbmNlb2YgVmlldykgewotICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5TVUNDRVNTLmNyZWF0ZVJlc3VsdCgoKFZpZXcpdmlld09iamVjdCkuZ2V0UGFyZW50KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidmlld09iamVjdCBpcyBub3QgYSBWaWV3Iik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3VsdCBnZXRWaWV3SW5kZXgoT2JqZWN0IHZpZXdPYmplY3QpIHsKLSAgICAgICAgaWYgKHZpZXdPYmplY3QgaW5zdGFuY2VvZiBWaWV3KSB7Ci0gICAgICAgICAgICBWaWV3IHZpZXcgPSAoVmlldykgdmlld09iamVjdDsKLSAgICAgICAgICAgIFZpZXdQYXJlbnQgcGFyZW50VmlldyA9IHZpZXcuZ2V0UGFyZW50KCk7Ci0KLSAgICAgICAgICAgIGlmIChwYXJlbnRWaWV3IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7Ci0gICAgICAgICAgICAgICAgU3RhdHVzLlNVQ0NFU1MuY3JlYXRlUmVzdWx0KCgoVmlld0dyb3VwKSBwYXJlbnRWaWV3KS5pbmRleE9mQ2hpbGQodmlldykpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gU3RhdHVzLlNVQ0NFU1MuY3JlYXRlUmVzdWx0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ2aWV3T2JqZWN0IGlzIG5vdCBhIFZpZXciKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1J0bChTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIHJldHVybiBpc0xvY2FsZVJ0bChsb2NhbGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0xvY2FsZVJ0bChTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIGlmIChsb2NhbGUgPT0gbnVsbCkgewotICAgICAgICAgICAgbG9jYWxlID0gIiI7Ci0gICAgICAgIH0KLSAgICAgICAgVUxvY2FsZSB1TG9jYWxlID0gbmV3IFVMb2NhbGUobG9jYWxlKTsKLSAgICAgICAgcmV0dXJuIHVMb2NhbGUuZ2V0Q2hhcmFjdGVyT3JpZW50YXRpb24oKS5lcXVhbHMoSUNVX0xPQ0FMRV9ESVJFQ1RJT05fUlRMKSA/Ci0gICAgICAgICAgICAgICAgdHJ1ZSA6IGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxvY2sgZm9yIHRoZSBicmlkZ2UKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFJlZW50cmFudExvY2sgZ2V0TG9jaygpIHsKLSAgICAgICAgcmV0dXJuIHNMb2NrOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByZXBhcmVzIHRoZSBjdXJyZW50IHRocmVhZCBmb3IgcmVuZGVyaW5nLgotICAgICAqCi0gICAgICogTm90ZSB0aGF0IHdoaWxlIHRoaXMgY2FuIGJlIGNhbGxlZCBzZXZlcmFsIHRpbWUsIHRoZSBmaXJzdCBjYWxsIHRvIHtAbGluayAjY2xlYW51cFRocmVhZCgpfQotICAgICAqIHdpbGwgZG8gdGhlIGNsZWFuLXVwLCBhbmQgbWFrZSB0aGUgdGhyZWFkIHVuYWJsZSB0byBkbyBmdXJ0aGVyIHNjZW5lIGFjdGlvbnMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHByZXBhcmVUaHJlYWQoKSB7Ci0gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBMb29wZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZm9yIHRoaXMgdGhyZWFkLgotICAgICAgICAvLyB0aGlzIGlzIHJlcXVpcmVkIGZvciBWaWV3IHRoYXQgY3JlYXRlcyBIYW5kbGVyIG9iamVjdHMuCi0gICAgICAgIGlmIChMb29wZXIubXlMb29wZXIoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBMb29wZXIucHJlcGFyZU1haW5Mb29wZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENsZWFucyB1cCB0aHJlYWQtc3BlY2lmaWMgZGF0YS4gQWZ0ZXIgdGhpcywgdGhlIHRocmVhZCBjYW5ub3QgYmUgdXNlZCBmb3Igc2NlbmUgYWN0aW9ucy4KLSAgICAgKiA8cD4KLSAgICAgKiBOb3RlIHRoYXQgaXQgZG9lc24ndCBtYXR0ZXIgaG93IG1hbnkgdGltZXMge0BsaW5rICNwcmVwYXJlVGhyZWFkKCl9IHdhcyBjYWxsZWQsIGEgc2luZ2xlCi0gICAgICogY2FsbCB0byB0aGlzIHdpbGwgcHJldmVudCB0aGUgdGhyZWFkIGZyb20gZG9pbmcgZnVydGhlciBzY2VuZSBhY3Rpb25zCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGNsZWFudXBUaHJlYWQoKSB7Ci0gICAgICAgIC8vIGNsZWFuIHVwIHRoZSBsb29wZXIKLSAgICAgICAgTG9vcGVyX0FjY2Vzc29yLmNsZWFudXBUaHJlYWQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIExheW91dExvZyBnZXRMb2coKSB7Ci0gICAgICAgIHJldHVybiBzQ3VycmVudExvZzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0TG9nKExheW91dExvZyBsb2cpIHsKLSAgICAgICAgLy8gY2hlY2sgb25seSB0aGUgdGhyZWFkIGN1cnJlbnRseSBvd25pbmcgdGhlIGxvY2sgY2FuIGRvIHRoaXMuCi0gICAgICAgIGlmIChzTG9jay5pc0hlbGRCeUN1cnJlbnRUaHJlYWQoKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigic2NlbmUgbXVzdCBiZSBhY3F1aXJlZCBmaXJzdC4gc2VlICNhY3F1aXJlKGxvbmcpIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9nICE9IG51bGwpIHsKLSAgICAgICAgICAgIHNDdXJyZW50TG9nID0gbG9nOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc0N1cnJlbnRMb2cgPSBzRGVmYXVsdExvZzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgZGV0YWlscyBvZiBhIGZyYW1ld29yayByZXNvdXJjZSBmcm9tIGl0cyBpbnRlZ2VyIHZhbHVlLgotICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgaW50ZWdlciB2YWx1ZQotICAgICAqIEByZXR1cm4gYSBQYWlyIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlIHR5cGUgYW5kIG5hbWUsIG9yIG51bGwgaWYgdGhlIGlkCi0gICAgICogICAgIGRvZXMgbm90IG1hdGNoIGFueSByZXNvdXJjZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFBhaXI8UmVzb3VyY2VUeXBlLCBTdHJpbmc+IHJlc29sdmVSZXNvdXJjZUlkKGludCB2YWx1ZSkgewotICAgICAgICBQYWlyPFJlc291cmNlVHlwZSwgU3RyaW5nPiBwYWlyID0gc1JNYXAuZ2V0KHZhbHVlKTsKLSAgICAgICAgaWYgKHBhaXIgPT0gbnVsbCkgewotICAgICAgICAgICAgcGFpciA9IHNEeW5hbWljSWRzLnJlc29sdmVJZCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocGFpciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oU3RyaW5nLmZvcm1hdCgiTWlzc2luZyBpZDogJTEkMDhYICglMSRkKSIsIHZhbHVlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBhaXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIGZyYW1ld29yayByZXNvdXJjZSB3aG9zZSB2YWx1ZSBpcyBhbiBpbnQgYXJyYXkuCi0gICAgICogQHBhcmFtIGFycmF5Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgcmVzb2x2ZVJlc291cmNlSWQoaW50W10gYXJyYXkpIHsKLSAgICAgICAgc0ludEFycmF5V3JhcHBlci5zZXQoYXJyYXkpOwotICAgICAgICByZXR1cm4gc1JBcnJheU1hcC5nZXQoc0ludEFycmF5V3JhcHBlcik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgaW50ZWdlciBpZCBvZiBhIGZyYW1ld29yayByZXNvdXJjZSwgZnJvbSBhIGdpdmVuIHJlc291cmNlIHR5cGUgYW5kIHJlc291cmNlIG5hbWUuCi0gICAgICogQHBhcmFtIHR5cGUgdGhlIHR5cGUgb2YgdGhlIHJlc291cmNlCi0gICAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIHJlc291cmNlLgotICAgICAqIEByZXR1cm4gYW4ge0BsaW5rIEludGVnZXJ9IGNvbnRhaW5pbmcgdGhlIHJlc291cmNlIGlkLCBvciBudWxsIGlmIG5vIHJlc291cmNlIHdlcmUgZm91bmQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBJbnRlZ2VyIGdldFJlc291cmNlSWQoUmVzb3VyY2VUeXBlIHR5cGUsIFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIEludGVnZXI+IG1hcCA9IHNSZXZSTWFwLmdldCh0eXBlKTsKLSAgICAgICAgSW50ZWdlciB2YWx1ZSA9IG51bGw7Ci0gICAgICAgIGlmIChtYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgdmFsdWUgPSBtYXAuZ2V0KG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKLSAgICAgICAgICAgIHZhbHVlID0gc0R5bmFtaWNJZHMuZ2V0SWQodHlwZSwgbmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBwb3NzaWJsZSBlbnVtcyBmb3IgYSBnaXZlbiBhdHRyaWJ1dGUgbmFtZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIE1hcDxTdHJpbmcsIEludGVnZXI+IGdldEVudW1WYWx1ZXMoU3RyaW5nIGF0dHJpYnV0ZU5hbWUpIHsKLSAgICAgICAgaWYgKHNFbnVtVmFsdWVNYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHNFbnVtVmFsdWVNYXAuZ2V0KGF0dHJpYnV0ZU5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgcGxhdGZvcm0gYnVpbGQgcHJvcGVydGllcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0UGxhdGZvcm1Qcm9wZXJ0aWVzKCkgewotICAgICAgICByZXR1cm4gc1BsYXRmb3JtUHJvcGVydGllczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBiaXRtYXAgZm9yIGEgc3BlY2lmaWMgcGF0aCwgZnJvbSBhIHNwZWNpZmljIHByb2plY3QgY2FjaGUsIG9yIGZyb20gdGhlCi0gICAgICogZnJhbWV3b3JrIGNhY2hlLgotICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgcGF0aCBvZiB0aGUgYml0bWFwCi0gICAgICogQHBhcmFtIHByb2plY3RLZXkgdGhlIGtleSBvZiB0aGUgcHJvamVjdCwgb3IgbnVsbCB0byBxdWVyeSB0aGUgZnJhbWV3b3JrIGNhY2hlLgotICAgICAqIEByZXR1cm4gdGhlIGNhY2hlZCBCaXRtYXAgb3IgbnVsbCBpZiBub3QgZm91bmQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCaXRtYXAgZ2V0Q2FjaGVkQml0bWFwKFN0cmluZyB2YWx1ZSwgT2JqZWN0IHByb2plY3RLZXkpIHsKLSAgICAgICAgaWYgKHByb2plY3RLZXkgIT0gbnVsbCkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgU29mdFJlZmVyZW5jZTxCaXRtYXA+PiBtYXAgPSBzUHJvamVjdEJpdG1hcENhY2hlLmdldChwcm9qZWN0S2V5KTsKLSAgICAgICAgICAgIGlmIChtYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFNvZnRSZWZlcmVuY2U8Qml0bWFwPiByZWYgPSBtYXAuZ2V0KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVmICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZi5nZXQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTb2Z0UmVmZXJlbmNlPEJpdG1hcD4gcmVmID0gc0ZyYW1ld29ya0JpdG1hcENhY2hlLmdldCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocmVmICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVmLmdldCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyBhIGJpdG1hcCBpbiBhIHByb2plY3QgY2FjaGUgb3IgaW4gdGhlIGZyYW1ld29yayBjYWNoZS4KLSAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHBhdGggb2YgdGhlIGJpdG1hcAotICAgICAqIEBwYXJhbSBibXAgdGhlIEJpdG1hcCBvYmplY3QKLSAgICAgKiBAcGFyYW0gcHJvamVjdEtleSB0aGUga2V5IG9mIHRoZSBwcm9qZWN0LCBvciBudWxsIHRvIHB1dCB0aGUgYml0bWFwIGluIHRoZSBmcmFtZXdvcmsgY2FjaGUuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNldENhY2hlZEJpdG1hcChTdHJpbmcgdmFsdWUsIEJpdG1hcCBibXAsIE9iamVjdCBwcm9qZWN0S2V5KSB7Ci0gICAgICAgIGlmIChwcm9qZWN0S2V5ICE9IG51bGwpIHsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIFNvZnRSZWZlcmVuY2U8Qml0bWFwPj4gbWFwID0gc1Byb2plY3RCaXRtYXBDYWNoZS5nZXQocHJvamVjdEtleSk7Ci0KLSAgICAgICAgICAgIGlmIChtYXAgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU29mdFJlZmVyZW5jZTxCaXRtYXA+PigpOwotICAgICAgICAgICAgICAgIHNQcm9qZWN0Qml0bWFwQ2FjaGUucHV0KHByb2plY3RLZXksIG1hcCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1hcC5wdXQodmFsdWUsIG5ldyBTb2Z0UmVmZXJlbmNlPEJpdG1hcD4oYm1wKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzRnJhbWV3b3JrQml0bWFwQ2FjaGUucHV0KHZhbHVlLCBuZXcgU29mdFJlZmVyZW5jZTxCaXRtYXA+KGJtcCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgOSBwYXRjaCBjaHVuayBmb3IgYSBzcGVjaWZpYyBwYXRoLCBmcm9tIGEgc3BlY2lmaWMgcHJvamVjdCBjYWNoZSwgb3IgZnJvbSB0aGUKLSAgICAgKiBmcmFtZXdvcmsgY2FjaGUuCi0gICAgICogQHBhcmFtIHZhbHVlIHRoZSBwYXRoIG9mIHRoZSA5IHBhdGNoCi0gICAgICogQHBhcmFtIHByb2plY3RLZXkgdGhlIGtleSBvZiB0aGUgcHJvamVjdCwgb3IgbnVsbCB0byBxdWVyeSB0aGUgZnJhbWV3b3JrIGNhY2hlLgotICAgICAqIEByZXR1cm4gdGhlIGNhY2hlZCA5IHBhdGNoIG9yIG51bGwgaWYgbm90IGZvdW5kLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTmluZVBhdGNoQ2h1bmsgZ2V0Q2FjaGVkOVBhdGNoKFN0cmluZyB2YWx1ZSwgT2JqZWN0IHByb2plY3RLZXkpIHsKLSAgICAgICAgaWYgKHByb2plY3RLZXkgIT0gbnVsbCkgewotICAgICAgICAgICAgTWFwPFN0cmluZywgU29mdFJlZmVyZW5jZTxOaW5lUGF0Y2hDaHVuaz4+IG1hcCA9IHNQcm9qZWN0OVBhdGNoQ2FjaGUuZ2V0KHByb2plY3RLZXkpOwotCi0gICAgICAgICAgICBpZiAobWFwICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTb2Z0UmVmZXJlbmNlPE5pbmVQYXRjaENodW5rPiByZWYgPSBtYXAuZ2V0KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVmICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZi5nZXQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTb2Z0UmVmZXJlbmNlPE5pbmVQYXRjaENodW5rPiByZWYgPSBzRnJhbWV3b3JrOVBhdGNoQ2FjaGUuZ2V0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChyZWYgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiByZWYuZ2V0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIGEgOSBwYXRjaCBjaHVuayBpbiBhIHByb2plY3QgY2FjaGUgb3IgaW4gdGhlIGZyYW1ld29yayBjYWNoZS4KLSAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHBhdGggb2YgdGhlIDkgcGF0Y2gKLSAgICAgKiBAcGFyYW0gbmluZVBhdGNoIHRoZSA5IHBhdGNoIG9iamVjdAotICAgICAqIEBwYXJhbSBwcm9qZWN0S2V5IHRoZSBrZXkgb2YgdGhlIHByb2plY3QsIG9yIG51bGwgdG8gcHV0IHRoZSBiaXRtYXAgaW4gdGhlIGZyYW1ld29yayBjYWNoZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q2FjaGVkOVBhdGNoKFN0cmluZyB2YWx1ZSwgTmluZVBhdGNoQ2h1bmsgbmluZVBhdGNoLCBPYmplY3QgcHJvamVjdEtleSkgewotICAgICAgICBpZiAocHJvamVjdEtleSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBNYXA8U3RyaW5nLCBTb2Z0UmVmZXJlbmNlPE5pbmVQYXRjaENodW5rPj4gbWFwID0gc1Byb2plY3Q5UGF0Y2hDYWNoZS5nZXQocHJvamVjdEtleSk7Ci0KLSAgICAgICAgICAgIGlmIChtYXAgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU29mdFJlZmVyZW5jZTxOaW5lUGF0Y2hDaHVuaz4+KCk7Ci0gICAgICAgICAgICAgICAgc1Byb2plY3Q5UGF0Y2hDYWNoZS5wdXQocHJvamVjdEtleSwgbWFwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWFwLnB1dCh2YWx1ZSwgbmV3IFNvZnRSZWZlcmVuY2U8TmluZVBhdGNoQ2h1bms+KG5pbmVQYXRjaCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc0ZyYW1ld29yazlQYXRjaENhY2hlLnB1dCh2YWx1ZSwgbmV3IFNvZnRSZWZlcmVuY2U8TmluZVBhdGNoQ2h1bms+KG5pbmVQYXRjaCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9CcmlkZ2VDb25zdGFudHMuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvQnJpZGdlQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViOWU3ZjEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9CcmlkZ2VDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2U7Ci0KLS8qKgotICogQ29uc3RhbnQgZGVmaW5pdGlvbiBjbGFzcy48YnI+Ci0gKiA8YnI+Ci0gKiBNb3N0IGNvbnN0YW50cyBoYXZlIGEgcHJlZml4IGRlZmluaW5nIHRoZSBjb250ZW50LgotICogPHVsPgotICogPGxpPjxjb2RlPldTXzwvY29kZT4gV29ya3NwYWNlIHBhdGggY29uc3RhbnQuIFRob3NlIGFyZSBhYnNvbHV0ZSBwYXRocywKLSAqIGZyb20gdGhlIHByb2plY3Qgcm9vdC48L2xpPgotICogPGxpPjxjb2RlPk9TXzwvY29kZT4gT1MgcGF0aCBjb25zdGFudC4gVGhlc2UgcGF0aHMgYXJlIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLjwvbGk+Ci0gKiA8bGk+PGNvZGU+Rk5fPC9jb2RlPiBGaWxlIG5hbWUgY29uc3RhbnQuPC9saT4KLSAqIDxsaT48Y29kZT5GRF88L2NvZGU+IEZvbGRlciBuYW1lIGNvbnN0YW50LjwvbGk+Ci0gKiA8bGk+PGNvZGU+RVhUXzwvY29kZT4gRmlsZSBleHRlbnNpb24gY29uc3RhbnQuIFRoaXMgZG9lcyBOT1QgaW5jbHVkZSBhIGRvdC48L2xpPgotICogPGxpPjxjb2RlPkRPVF88L2NvZGU+IEZpbGUgZXh0ZW5zaW9uIGNvbnN0YW50LiBUaGlzIHN0YXJ0IHdpdGggYSBkb3QuPC9saT4KLSAqIDxsaT48Y29kZT5SRV88L2NvZGU+IFJlZ2V4cCBjb25zdGFudC48L2xpPgotICogPGxpPjxjb2RlPk5TXzwvY29kZT4gTmFtZXNwYWNlIGNvbnN0YW50LjwvbGk+Ci0gKiA8bGk+PGNvZGU+Q0xBU1NfPC9jb2RlPiBGdWxseSBxdWFsaWZpZWQgY2xhc3MgbmFtZS48L2xpPgotICogPC91bD4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBCcmlkZ2VDb25zdGFudHMgewotCi0gICAgLyoqIE5hbWVzcGFjZSBmb3IgdGhlIHJlc291cmNlIFhNTCAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX1JFU09VUkNFUyA9ICJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiOwotCi0gICAgLyoqIEFwcCBhdXRvIG5hbWVzcGFjZSAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5TX0FQUF9SRVNfQVVUTyA9ICJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzLWF1dG8iOwotCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUiA9ICJjb20uYW5kcm9pZC5pbnRlcm5hbC5SIjsKLQotCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTUFUQ0hfUEFSRU5UID0gIm1hdGNoX3BhcmVudCI7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgRklMTF9QQVJFTlQgPSAiZmlsbF9wYXJlbnQiOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFdSQVBfQ09OVEVOVCA9ICJ3cmFwX2NvbnRlbnQiOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9CcmlkZ2VSZW5kZXJTZXNzaW9uLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL0JyaWRnZVJlbmRlclNlc3Npb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlmNGIzYS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL0JyaWRnZVJlbmRlclNlc3Npb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklBbmltYXRpb25MaXN0ZW5lcjsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSUxheW91dFB1bGxQYXJzZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlbmRlclBhcmFtczsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVuZGVyU2Vzc2lvbjsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0OwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5WaWV3SW5mbzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuUmVuZGVyU2Vzc2lvbkltcGw7Ci0KLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotCi1pbXBvcnQgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBSZW5kZXJTZXNzaW9ufS4KLSAqCi0gKiBUaGlzIGlzIGEgcHJldHR5IGJhc2ljIGNsYXNzIHRoYXQgZG9lcyBhbG1vc3Qgbm90aGluZy4gQWxsIG9mIHRoZSB3b3JrIGlzIGRvbmUgaW4KLSAqIHtAbGluayBSZW5kZXJTZXNzaW9uSW1wbH0uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQnJpZGdlUmVuZGVyU2Vzc2lvbiBleHRlbmRzIFJlbmRlclNlc3Npb24gewotCi0gICAgcHJpdmF0ZSBmaW5hbCBSZW5kZXJTZXNzaW9uSW1wbCBtU2Vzc2lvbjsKLSAgICBwcml2YXRlIFJlc3VsdCBtTGFzdFJlc3VsdDsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXN1bHQgZ2V0UmVzdWx0KCkgewotICAgICAgICByZXR1cm4gbUxhc3RSZXN1bHQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1ZmZlcmVkSW1hZ2UgZ2V0SW1hZ2UoKSB7Ci0gICAgICAgIHJldHVybiBtU2Vzc2lvbi5nZXRJbWFnZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzQWxwaGFDaGFubmVsSW1hZ2UoKSB7Ci0gICAgICAgIHJldHVybiBtU2Vzc2lvbi5pc0FscGhhQ2hhbm5lbEltYWdlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3Q8Vmlld0luZm8+IGdldFJvb3RWaWV3cygpIHsKLSAgICAgICAgcmV0dXJuIG1TZXNzaW9uLmdldFZpZXdJbmZvcygpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldERlZmF1bHRQcm9wZXJ0aWVzKE9iamVjdCB2aWV3T2JqZWN0KSB7Ci0gICAgICAgIHJldHVybiBtU2Vzc2lvbi5nZXREZWZhdWx0UHJvcGVydGllcyh2aWV3T2JqZWN0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzdWx0IGdldFByb3BlcnR5KE9iamVjdCBvYmplY3RWaWV3LCBTdHJpbmcgcHJvcGVydHlOYW1lKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIHN1cGVyLmdldFByb3BlcnR5KG9iamVjdFZpZXcsIHByb3BlcnR5TmFtZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3VsdCBzZXRQcm9wZXJ0eShPYmplY3Qgb2JqZWN0VmlldywgU3RyaW5nIHByb3BlcnR5TmFtZSwgU3RyaW5nIHByb3BlcnR5VmFsdWUpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gc3VwZXIuc2V0UHJvcGVydHkob2JqZWN0VmlldywgcHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzdWx0IHJlbmRlcihsb25nIHRpbWVvdXQpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEJyaWRnZS5wcmVwYXJlVGhyZWFkKCk7Ci0gICAgICAgICAgICBtTGFzdFJlc3VsdCA9IG1TZXNzaW9uLmFjcXVpcmUodGltZW91dCk7Ci0gICAgICAgICAgICBpZiAobUxhc3RSZXN1bHQuaXNTdWNjZXNzKCkpIHsKLSAgICAgICAgICAgICAgICBtTGFzdFJlc3VsdCA9IG1TZXNzaW9uLnJlbmRlcihmYWxzZSAvKmZyZXNoUmVuZGVyKi8pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgbVNlc3Npb24ucmVsZWFzZSgpOwotICAgICAgICAgICAgQnJpZGdlLmNsZWFudXBUaHJlYWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtTGFzdFJlc3VsdDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzdWx0IGFuaW1hdGUoT2JqZWN0IHRhcmdldE9iamVjdCwgU3RyaW5nIGFuaW1hdGlvbk5hbWUsCi0gICAgICAgICAgICBib29sZWFuIGlzRnJhbWV3b3JrQW5pbWF0aW9uLCBJQW5pbWF0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEJyaWRnZS5wcmVwYXJlVGhyZWFkKCk7Ci0gICAgICAgICAgICBtTGFzdFJlc3VsdCA9IG1TZXNzaW9uLmFjcXVpcmUoUmVuZGVyUGFyYW1zLkRFRkFVTFRfVElNRU9VVCk7Ci0gICAgICAgICAgICBpZiAobUxhc3RSZXN1bHQuaXNTdWNjZXNzKCkpIHsKLSAgICAgICAgICAgICAgICBtTGFzdFJlc3VsdCA9IG1TZXNzaW9uLmFuaW1hdGUodGFyZ2V0T2JqZWN0LCBhbmltYXRpb25OYW1lLCBpc0ZyYW1ld29ya0FuaW1hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIG1TZXNzaW9uLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIEJyaWRnZS5jbGVhbnVwVGhyZWFkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbUxhc3RSZXN1bHQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3VsdCBpbnNlcnRDaGlsZChPYmplY3QgcGFyZW50VmlldywgSUxheW91dFB1bGxQYXJzZXIgY2hpbGRYbWwsIGludCBpbmRleCwKLSAgICAgICAgICAgIElBbmltYXRpb25MaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICBpZiAocGFyZW50VmlldyBpbnN0YW5jZW9mIFZpZXdHcm91cCA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicGFyZW50VmlldyBpcyBub3QgYSBWaWV3R3JvdXAiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBCcmlkZ2UucHJlcGFyZVRocmVhZCgpOwotICAgICAgICAgICAgbUxhc3RSZXN1bHQgPSBtU2Vzc2lvbi5hY3F1aXJlKFJlbmRlclBhcmFtcy5ERUZBVUxUX1RJTUVPVVQpOwotICAgICAgICAgICAgaWYgKG1MYXN0UmVzdWx0LmlzU3VjY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgbUxhc3RSZXN1bHQgPSBtU2Vzc2lvbi5pbnNlcnRDaGlsZCgoVmlld0dyb3VwKSBwYXJlbnRWaWV3LCBjaGlsZFhtbCwgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBtU2Vzc2lvbi5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBCcmlkZ2UuY2xlYW51cFRocmVhZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1MYXN0UmVzdWx0OwotICAgIH0KLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3VsdCBtb3ZlQ2hpbGQoT2JqZWN0IHBhcmVudFZpZXcsIE9iamVjdCBjaGlsZFZpZXcsIGludCBpbmRleCwKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbGF5b3V0UGFyYW1zLCBJQW5pbWF0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgaWYgKHBhcmVudFZpZXcgaW5zdGFuY2VvZiBWaWV3R3JvdXAgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInBhcmVudFZpZXcgaXMgbm90IGEgVmlld0dyb3VwIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNoaWxkVmlldyBpbnN0YW5jZW9mIFZpZXcgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNoaWxkVmlldyBpcyBub3QgYSBWaWV3Iik7Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgQnJpZGdlLnByZXBhcmVUaHJlYWQoKTsKLSAgICAgICAgICAgIG1MYXN0UmVzdWx0ID0gbVNlc3Npb24uYWNxdWlyZShSZW5kZXJQYXJhbXMuREVGQVVMVF9USU1FT1VUKTsKLSAgICAgICAgICAgIGlmIChtTGFzdFJlc3VsdC5pc1N1Y2Nlc3MoKSkgewotICAgICAgICAgICAgICAgIG1MYXN0UmVzdWx0ID0gbVNlc3Npb24ubW92ZUNoaWxkKChWaWV3R3JvdXApIHBhcmVudFZpZXcsIChWaWV3KSBjaGlsZFZpZXcsIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLCBsaXN0ZW5lcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBtU2Vzc2lvbi5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBCcmlkZ2UuY2xlYW51cFRocmVhZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1MYXN0UmVzdWx0OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXN1bHQgcmVtb3ZlQ2hpbGQoT2JqZWN0IGNoaWxkVmlldywgSUFuaW1hdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIGlmIChjaGlsZFZpZXcgaW5zdGFuY2VvZiBWaWV3ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjaGlsZFZpZXcgaXMgbm90IGEgVmlldyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEJyaWRnZS5wcmVwYXJlVGhyZWFkKCk7Ci0gICAgICAgICAgICBtTGFzdFJlc3VsdCA9IG1TZXNzaW9uLmFjcXVpcmUoUmVuZGVyUGFyYW1zLkRFRkFVTFRfVElNRU9VVCk7Ci0gICAgICAgICAgICBpZiAobUxhc3RSZXN1bHQuaXNTdWNjZXNzKCkpIHsKLSAgICAgICAgICAgICAgICBtTGFzdFJlc3VsdCA9IG1TZXNzaW9uLnJlbW92ZUNoaWxkKChWaWV3KSBjaGlsZFZpZXcsIGxpc3RlbmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIG1TZXNzaW9uLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIEJyaWRnZS5jbGVhbnVwVGhyZWFkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbUxhc3RSZXN1bHQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICB9Ci0KLSAgICAvKnBhY2thZ2UqLyBCcmlkZ2VSZW5kZXJTZXNzaW9uKFJlbmRlclNlc3Npb25JbXBsIHNjZW5lLCBSZXN1bHQgbGFzdFJlc3VsdCkgewotICAgICAgICBtU2Vzc2lvbiA9IHNjZW5lOwotICAgICAgICBpZiAoc2NlbmUgIT0gbnVsbCkgewotICAgICAgICAgICAgbVNlc3Npb24uc2V0U2NlbmUodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgbUxhc3RSZXN1bHQgPSBsYXN0UmVzdWx0OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvTW9ja1ZpZXcuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvTW9ja1ZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q1MGIyYS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL01vY2tWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuR3Jhdml0eTsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKLQotLyoqCi0gKiBCYXNlIGNsYXNzIGZvciBtb2NrZWQgdmlld3MuCi0gKgotICogVE9ETzogaW1wbGVtZW50IG9uRHJhdyBhbmQgZHJhdyBhIHJlY3RhbmdsZSBpbiBhIHJhbmRvbSBjb2xvciB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotICogKG9yIGJldHRlciB0aGUgaWQgb2YgdGhlIHZpZXcpLgotICovCi1wdWJsaWMgY2xhc3MgTW9ja1ZpZXcgZXh0ZW5kcyBUZXh0VmlldyB7Ci0KLSAgICBwdWJsaWMgTW9ja1ZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZSkgewotICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwotCi0gICAgICAgIHNldFRleHQodGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7Ci0gICAgICAgIHNldFRleHRDb2xvcigweEZGMDAwMDAwKTsKLSAgICAgICAgc2V0R3Jhdml0eShHcmF2aXR5LkNFTlRFUik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKLSAgICAgICAgY2FudmFzLmRyYXdBUkdCKDB4RkYsIDB4N0YsIDB4N0YsIDB4N0YpOwotCi0gICAgICAgIHN1cGVyLm9uRHJhdyhjYW52YXMpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VDb250ZW50UHJvdmlkZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VDb250ZW50UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3NDBiMS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlQ29udGVudFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlck9wZXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyUmVzdWx0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5PcGVyYXRpb25BcHBsaWNhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0RmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklDYW5jZWxsYXRpb25TaWduYWw7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLS8qKgotICogTW9jayBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgSUNvbnRlbnRQcm92aWRlcn0uCi0gKgotICogVE9ETzogbmV2ZXIgcmV0dXJuIG51bGwgd2hlbiB0aGUgbWV0aG9kIGlzIG5vdCBzdXBwb3NlZCB0by4gUmV0dXJuIGZha2UgZGF0YSBpbnN0ZWFkLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQnJpZGdlQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSUNvbnRlbnRQcm92aWRlciB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRlbnRQcm92aWRlclJlc3VsdFtdIGFwcGx5QmF0Y2goU3RyaW5nIGNhbGxpbmdQYWNrYWdlLAotICAgICAgICAgICAgQXJyYXlMaXN0PENvbnRlbnRQcm92aWRlck9wZXJhdGlvbj4gYXJnMCkKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIE9wZXJhdGlvbkFwcGxpY2F0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGJ1bGtJbnNlcnQoU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBVcmkgYXJnMCwgQ29udGVudFZhbHVlc1tdIGFyZzEpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVuZGxlIGNhbGwoU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBTdHJpbmcgYXJnMCwgU3RyaW5nIGFyZzEsIEJ1bmRsZSBhcmcyKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBkZWxldGUoU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBVcmkgYXJnMCwgU3RyaW5nIGFyZzEsIFN0cmluZ1tdIGFyZzIpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoVXJpIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBVcmkgaW5zZXJ0KFN0cmluZyBjYWxsaW5nUGFja2FnZSwgVXJpIGFyZzAsIENvbnRlbnRWYWx1ZXMgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEFzc2V0RmlsZURlc2NyaXB0b3Igb3BlbkFzc2V0RmlsZSgKLSAgICAgICAgICAgIFN0cmluZyBjYWxsaW5nUGFja2FnZSwgVXJpIGFyZzAsIFN0cmluZyBhcmcxLCBJQ2FuY2VsbGF0aW9uU2lnbmFsIHNpZ25hbCkKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFBhcmNlbEZpbGVEZXNjcmlwdG9yIG9wZW5GaWxlKAotICAgICAgICAgICAgU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBVcmkgYXJnMCwgU3RyaW5nIGFyZzEsIElDYW5jZWxsYXRpb25TaWduYWwgc2lnbmFsKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ3Vyc29yIHF1ZXJ5KFN0cmluZyBjYWxsaW5nUGFja2FnZSwgVXJpIGFyZzAsIFN0cmluZ1tdIGFyZzEsIFN0cmluZyBhcmcyLCBTdHJpbmdbXSBhcmczLAotICAgICAgICAgICAgU3RyaW5nIGFyZzQsIElDYW5jZWxsYXRpb25TaWduYWwgYXJnNSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCB1cGRhdGUoU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBVcmkgYXJnMCwgQ29udGVudFZhbHVlcyBhcmcxLCBTdHJpbmcgYXJnMiwKLSAgICAgICAgICAgIFN0cmluZ1tdIGFyZzMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJQmluZGVyIGFzQmluZGVyKCkgewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRTdHJlYW1UeXBlcyhVcmkgYXJnMCwgU3RyaW5nIGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBBc3NldEZpbGVEZXNjcmlwdG9yIG9wZW5UeXBlZEFzc2V0RmlsZShTdHJpbmcgY2FsbGluZ1BhY2thZ2UsIFVyaSBhcmcwLCBTdHJpbmcgYXJnMSwKLSAgICAgICAgICAgIEJ1bmRsZSBhcmcyLCBJQ2FuY2VsbGF0aW9uU2lnbmFsIHNpZ25hbCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSUNhbmNlbGxhdGlvblNpZ25hbCBjcmVhdGVDYW5jZWxsYXRpb25TaWduYWwoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVXJpIGNhbm9uaWNhbGl6ZShTdHJpbmcgY2FsbGluZ1BrZywgVXJpIHVyaSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBVcmkgdW5jYW5vbmljYWxpemUoU3RyaW5nIGNhbGxpbmdQa2csIFVyaSB1cmkpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlQ29udGVudFJlc29sdmVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlQ29udGVudFJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMjU5ZDcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZUNvbnRlbnRSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LklDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5Db250ZW50T2JzZXJ2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotCi0vKioKLSAqIEEgbW9jayBjb250ZW50IHJlc29sdmVyIGZvciB0aGUgTGF5b3V0TGliIEJyaWRnZS4KLSAqIDxwLz4KLSAqIEl0IHdvbid0IHNlcnZlIGFueSBhY3R1YWwgZGF0YSBidXQgaXQncyBnb29kIGVub3VnaCBmb3IgYWxsCi0gKiB0aGUgd2lkZ2V0cyB3aGljaCBleHBlY3QgdG8gaGF2ZSBhIGNvbnRlbnQgcmVzb2x2ZXIgYXZhaWxhYmxlIHZpYQotICoge0BsaW5rIEJyaWRnZUNvbnRleHQjZ2V0Q29udGVudFJlc29sdmVyKCl9LgotICovCi1wdWJsaWMgY2xhc3MgQnJpZGdlQ29udGVudFJlc29sdmVyIGV4dGVuZHMgQ29udGVudFJlc29sdmVyIHsKLQotICAgIHByaXZhdGUgQnJpZGdlQ29udGVudFByb3ZpZGVyIG1Qcm92aWRlciA9IG51bGw7Ci0KLSAgICBwdWJsaWMgQnJpZGdlQ29udGVudFJlc29sdmVyKENvbnRleHQgY29udGV4dCkgewotICAgICAgICBzdXBlcihjb250ZXh0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSUNvbnRlbnRQcm92aWRlciBhY3F1aXJlUHJvdmlkZXIoQ29udGV4dCBjLCBTdHJpbmcgbmFtZSkgewotICAgICAgICBpZiAobVByb3ZpZGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIG1Qcm92aWRlciA9IG5ldyBCcmlkZ2VDb250ZW50UHJvdmlkZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtUHJvdmlkZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElDb250ZW50UHJvdmlkZXIgYWNxdWlyZUV4aXN0aW5nUHJvdmlkZXIoQ29udGV4dCBjLCBTdHJpbmcgbmFtZSkgewotICAgICAgICBpZiAobVByb3ZpZGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIG1Qcm92aWRlciA9IG5ldyBCcmlkZ2VDb250ZW50UHJvdmlkZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtUHJvdmlkZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gcmVsZWFzZVByb3ZpZGVyKElDb250ZW50UHJvdmlkZXIgaWNwKSB7Ci0gICAgICAgIC8vIGlnbm9yZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIElDb250ZW50UHJvdmlkZXIgYWNxdWlyZVVuc3RhYmxlUHJvdmlkZXIoQ29udGV4dCBjLCBTdHJpbmcgbmFtZSkgewotICAgICAgICByZXR1cm4gYWNxdWlyZVByb3ZpZGVyKGMsIG5hbWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHJlbGVhc2VVbnN0YWJsZVByb3ZpZGVyKElDb250ZW50UHJvdmlkZXIgaWNwKSB7Ci0gICAgICAgIHJldHVybiByZWxlYXNlUHJvdmlkZXIoaWNwKTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1bnN0YWJsZVByb3ZpZGVyRGllZChJQ29udGVudFByb3ZpZGVyIGljcCkgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0dWIgZm9yIHRoZSBsYXlvdXRsaWIgYnJpZGdlIGNvbnRlbnQgcmVzb2x2ZXIuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoVXJpIHVyaSwgYm9vbGVhbiBub3RpZnlGb3JEZXNjZW5kZW50cywKLSAgICAgICAgICAgIENvbnRlbnRPYnNlcnZlciBvYnNlcnZlcikgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3R1YiBmb3IgdGhlIGxheW91dGxpYiBicmlkZ2UgY29udGVudCByZXNvbHZlci4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKENvbnRlbnRPYnNlcnZlciBvYnNlcnZlcikgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3R1YiBmb3IgdGhlIGxheW91dGxpYiBicmlkZ2UgY29udGVudCByZXNvbHZlci4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2UoVXJpIHVyaSwgQ29udGVudE9ic2VydmVyIG9ic2VydmVyLCBib29sZWFuIHN5bmNUb05ldHdvcmspIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0dWIgZm9yIHRoZSBsYXlvdXRsaWIgYnJpZGdlIGNvbnRlbnQgcmVzb2x2ZXIuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3RhcnRTeW5jKFVyaSB1cmksIEJ1bmRsZSBleHRyYXMpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0dWIgZm9yIHRoZSBsYXlvdXRsaWIgYnJpZGdlIGNvbnRlbnQgcmVzb2x2ZXIuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2FuY2VsU3luYyhVcmkgdXJpKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlQ29udGV4dC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZUNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkyOTRhYi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQ7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSUxheW91dFB1bGxQYXJzZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklQcm9qZWN0Q2FsbGJhY2s7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVuZGVyUmVzb3VyY2VzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXNvdXJjZVJlZmVyZW5jZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzb3VyY2VWYWx1ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuU3R5bGVSZXNvdXJjZVZhbHVlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJJbXBsOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5QYXJzZXJGYWN0b3J5OwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5TdGFjazsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnV0aWwuUGFpcjsKLQotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7Ci1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50U2VuZGVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5jZXM7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldE1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5CcmlkZ2VSZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5CcmlkZ2VUeXBlZEFycmF5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcy5UaGVtZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5EYXRhYmFzZUVycm9ySGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZTsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZS5DdXJzb3JGYWN0b3J5OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkJyaWRnZUluZmxhdGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwotaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5QWRqdXN0bWVudHM7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcudGV4dHNlcnZpY2UuVGV4dFNlcnZpY2VzTWFuYWdlcjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLklkZW50aXR5SGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEN1c3RvbSBpbXBsZW1lbnRhdGlvbiBvZiBDb250ZXh0L0FjdGl2aXR5IHRvIGhhbmRsZSBub24gY29tcGlsZWQgcmVzb3VyY2VzLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQnJpZGdlQ29udGV4dCBleHRlbmRzIENvbnRleHQgewotCi0gICAgcHJpdmF0ZSBSZXNvdXJjZXMgbVN5c3RlbVJlc291cmNlczsKLSAgICBwcml2YXRlIGZpbmFsIEhhc2hNYXA8VmlldywgT2JqZWN0PiBtVmlld0tleU1hcCA9IG5ldyBIYXNoTWFwPFZpZXcsIE9iamVjdD4oKTsKLSAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBtUHJvamVjdEtleTsKLSAgICBwcml2YXRlIGZpbmFsIERpc3BsYXlNZXRyaWNzIG1NZXRyaWNzOwotICAgIHByaXZhdGUgZmluYWwgUmVuZGVyUmVzb3VyY2VzIG1SZW5kZXJSZXNvdXJjZXM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBDb25maWd1cmF0aW9uIG1Db25maWc7Ci0gICAgcHJpdmF0ZSBmaW5hbCBBcHBsaWNhdGlvbkluZm8gbUFwcGxpY2F0aW9uSW5mbzsKLSAgICBwcml2YXRlIGZpbmFsIElQcm9qZWN0Q2FsbGJhY2sgbVByb2plY3RDYWxsYmFjazsKLSAgICBwcml2YXRlIGZpbmFsIFdpbmRvd01hbmFnZXIgbVdpbmRvd01hbmFnZXI7Ci0KLSAgICBwcml2YXRlIFJlc291cmNlcy5UaGVtZSBtVGhlbWU7Ci0KLSAgICBwcml2YXRlIGZpbmFsIE1hcDxPYmplY3QsIE1hcDxTdHJpbmcsIFN0cmluZz4+IG1EZWZhdWx0UHJvcE1hcHMgPQotICAgICAgICBuZXcgSWRlbnRpdHlIYXNoTWFwPE9iamVjdCwgTWFwPFN0cmluZyxTdHJpbmc+PigpOwotCi0gICAgLy8gbWFwcyBmb3IgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGlkIHJlcHJlc2VudGluZyBzdHlsZSBvYmplY3RzIChTdHlsZVJlc291cmNlVmFsdWUpCi0gICAgcHJpdmF0ZSBNYXA8SW50ZWdlciwgU3R5bGVSZXNvdXJjZVZhbHVlPiBtRHluYW1pY0lkVG9TdHlsZU1hcDsKLSAgICBwcml2YXRlIE1hcDxTdHlsZVJlc291cmNlVmFsdWUsIEludGVnZXI+IG1TdHlsZVRvRHluYW1pY0lkTWFwOwotICAgIHByaXZhdGUgaW50IG1EeW5hbWljSWRHZW5lcmF0b3IgPSAweDAxMDMwMDAwOyAvLyBCYXNlIGlkIGZvciBmcmFtZXdvcmsgUi5zdHlsZQotCi0gICAgLy8gY2FjaGUgZm9yIFR5cGVkQXJyYXkgZ2VuZXJhdGVkIGZyb20gSVN0eWxlUmVzb3VyY2VWYWx1ZSBvYmplY3QKLSAgICBwcml2YXRlIE1hcDxpbnRbXSwgTWFwPEludGVnZXIsIFR5cGVkQXJyYXk+PiBtVHlwZWRBcnJheUNhY2hlOwotICAgIHByaXZhdGUgQnJpZGdlSW5mbGF0ZXIgbUJyaWRnZUluZmxhdGVyOwotCi0gICAgcHJpdmF0ZSBCcmlkZ2VDb250ZW50UmVzb2x2ZXIgbUNvbnRlbnRSZXNvbHZlcjsKLQotICAgIHByaXZhdGUgZmluYWwgU3RhY2s8QnJpZGdlWG1sQmxvY2tQYXJzZXI+IG1QYXJzZXJTdGFjayA9IG5ldyBTdGFjazxCcmlkZ2VYbWxCbG9ja1BhcnNlcj4oKTsKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBwcm9qZWN0S2V5IEFuIE9iamVjdCBpZGVudGlmeWluZyB0aGUgcHJvamVjdC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgY2FjaGUgbWVjaGFuaXNtLgotICAgICAqIEBwYXJhbSBtZXRyaWNzIHRoZSB7QGxpbmsgRGlzcGxheU1ldHJpY3N9LgotICAgICAqIEBwYXJhbSByZW5kZXJSZXNvdXJjZXMgdGhlIGNvbmZpZ3VyZWQgcmVzb3VyY2VzIChib3RoIGZyYW1ld29yayBhbmQgcHJvamVjdHMpIGZvciB0aGlzCi0gICAgICogcmVuZGVyLgotICAgICAqIEBwYXJhbSBwcm9qZWN0Q2FsbGJhY2sKLSAgICAgKiBAcGFyYW0gY29uZmlnIHRoZSBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhpcyByZW5kZXIuCi0gICAgICogQHBhcmFtIHRhcmdldFNka1ZlcnNpb24gdGhlIHRhcmdldFNka1ZlcnNpb24gb2YgdGhlIGFwcGxpY2F0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBCcmlkZ2VDb250ZXh0KE9iamVjdCBwcm9qZWN0S2V5LCBEaXNwbGF5TWV0cmljcyBtZXRyaWNzLAotICAgICAgICAgICAgUmVuZGVyUmVzb3VyY2VzIHJlbmRlclJlc291cmNlcywKLSAgICAgICAgICAgIElQcm9qZWN0Q2FsbGJhY2sgcHJvamVjdENhbGxiYWNrLAotICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBjb25maWcsCi0gICAgICAgICAgICBpbnQgdGFyZ2V0U2RrVmVyc2lvbiwKLSAgICAgICAgICAgIGJvb2xlYW4gaGFzUnRsU3VwcG9ydCkgewotICAgICAgICBtUHJvamVjdEtleSA9IHByb2plY3RLZXk7Ci0gICAgICAgIG1NZXRyaWNzID0gbWV0cmljczsKLSAgICAgICAgbVByb2plY3RDYWxsYmFjayA9IHByb2plY3RDYWxsYmFjazsKLQotICAgICAgICBtUmVuZGVyUmVzb3VyY2VzID0gcmVuZGVyUmVzb3VyY2VzOwotICAgICAgICBtQ29uZmlnID0gY29uZmlnOwotCi0gICAgICAgIG1BcHBsaWNhdGlvbkluZm8gPSBuZXcgQXBwbGljYXRpb25JbmZvKCk7Ci0gICAgICAgIG1BcHBsaWNhdGlvbkluZm8udGFyZ2V0U2RrVmVyc2lvbiA9IHRhcmdldFNka1ZlcnNpb247Ci0gICAgICAgIGlmIChoYXNSdGxTdXBwb3J0KSB7Ci0gICAgICAgICAgICBtQXBwbGljYXRpb25JbmZvLmZsYWdzID0gbUFwcGxpY2F0aW9uSW5mby5mbGFncyB8IEFwcGxpY2F0aW9uSW5mby5GTEFHX1NVUFBPUlRTX1JUTDsKLSAgICAgICAgfQotCi0gICAgICAgIG1XaW5kb3dNYW5hZ2VyID0gbmV3IFdpbmRvd01hbmFnZXJJbXBsKG1NZXRyaWNzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbml0aWFsaXplcyB0aGUge0BsaW5rIFJlc291cmNlc30gc2luZ2xldG9uIHRvIGJlIGxpbmtlZCB0byB0aGlzIHtAbGluayBDb250ZXh0fSwgaXRzCi0gICAgICoge0BsaW5rIERpc3BsYXlNZXRyaWNzfSwge0BsaW5rIENvbmZpZ3VyYXRpb259LCBhbmQge0BsaW5rIElQcm9qZWN0Q2FsbGJhY2t9LgotICAgICAqCi0gICAgICogQHNlZSAjZGlzcG9zZVJlc291cmNlcygpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgaW5pdFJlc291cmNlcygpIHsKLSAgICAgICAgQXNzZXRNYW5hZ2VyIGFzc2V0TWFuYWdlciA9IEFzc2V0TWFuYWdlci5nZXRTeXN0ZW0oKTsKLQotICAgICAgICBtU3lzdGVtUmVzb3VyY2VzID0gQnJpZGdlUmVzb3VyY2VzLmluaXRTeXN0ZW0oCi0gICAgICAgICAgICAgICAgdGhpcywKLSAgICAgICAgICAgICAgICBhc3NldE1hbmFnZXIsCi0gICAgICAgICAgICAgICAgbU1ldHJpY3MsCi0gICAgICAgICAgICAgICAgbUNvbmZpZywKLSAgICAgICAgICAgICAgICBtUHJvamVjdENhbGxiYWNrKTsKLSAgICAgICAgbVRoZW1lID0gbVN5c3RlbVJlc291cmNlcy5uZXdUaGVtZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERpc3Bvc2VzIHRoZSB7QGxpbmsgUmVzb3VyY2VzfSBzaW5nbGV0b24uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGlzcG9zZVJlc291cmNlcygpIHsKLSAgICAgICAgQnJpZGdlUmVzb3VyY2VzLmRpc3Bvc2VTeXN0ZW0oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRCcmlkZ2VJbmZsYXRlcihCcmlkZ2VJbmZsYXRlciBpbmZsYXRlcikgewotICAgICAgICBtQnJpZGdlSW5mbGF0ZXIgPSBpbmZsYXRlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRWaWV3S2V5KFZpZXcgdmlldywgT2JqZWN0IHZpZXdLZXkpIHsKLSAgICAgICAgbVZpZXdLZXlNYXAucHV0KHZpZXcsIHZpZXdLZXkpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0Vmlld0tleShWaWV3IHZpZXcpIHsKLSAgICAgICAgcmV0dXJuIG1WaWV3S2V5TWFwLmdldCh2aWV3KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IGdldFByb2plY3RLZXkoKSB7Ci0gICAgICAgIHJldHVybiBtUHJvamVjdEtleTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGlzcGxheU1ldHJpY3MgZ2V0TWV0cmljcygpIHsKLSAgICAgICAgcmV0dXJuIG1NZXRyaWNzOwotICAgIH0KLQotICAgIHB1YmxpYyBJUHJvamVjdENhbGxiYWNrIGdldFByb2plY3RDYWxsYmFjaygpIHsKLSAgICAgICAgcmV0dXJuIG1Qcm9qZWN0Q2FsbGJhY2s7Ci0gICAgfQotCi0gICAgcHVibGljIFJlbmRlclJlc291cmNlcyBnZXRSZW5kZXJSZXNvdXJjZXMoKSB7Ci0gICAgICAgIHJldHVybiBtUmVuZGVyUmVzb3VyY2VzOwotICAgIH0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldERlZmF1bHRQcm9wTWFwKE9iamVjdCBrZXkpIHsKLSAgICAgICAgcmV0dXJuIG1EZWZhdWx0UHJvcE1hcHMuZ2V0KGtleSk7Ci0gICAgfQotCi0gICAgcHVibGljIENvbmZpZ3VyYXRpb24gZ2V0Q29uZmlndXJhdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIG1Db25maWc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkcyBhIHBhcnNlciB0byB0aGUgc3RhY2suCi0gICAgICogQHBhcmFtIHBhcnNlciB0aGUgcGFyc2VyIHRvIGFkZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBwdXNoUGFyc2VyKEJyaWRnZVhtbEJsb2NrUGFyc2VyIHBhcnNlcikgewotICAgICAgICBpZiAoUGFyc2VyRmFjdG9yeS5MT0dfUEFSU0VSKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBVU0ggIiArIHBhcnNlci5nZXRQYXJzZXIoKS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBtUGFyc2VyU3RhY2sucHVzaChwYXJzZXIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgdGhlIHBhcnNlciBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjawotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHBvcFBhcnNlcigpIHsKLSAgICAgICAgQnJpZGdlWG1sQmxvY2tQYXJzZXIgcGFyc2VyID0gbVBhcnNlclN0YWNrLnBvcCgpOwotICAgICAgICBpZiAoUGFyc2VyRmFjdG9yeS5MT0dfUEFSU0VSKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBPUEQgIiArIHBhcnNlci5nZXRQYXJzZXIoKS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGFyc2VyIGF0IHRoZSB0b3AgdGhlIG9mIHRoZSBzdGFjay4KLSAgICAgKiBAcmV0dXJuIGEgcGFyc2VyIG9yIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIEJyaWRnZVhtbEJsb2NrUGFyc2VyIGdldEN1cnJlbnRQYXJzZXIoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyc2VyU3RhY2sucGVlaygpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIHBhcnNlci4KLSAgICAgKiBAcmV0dXJuIGEgcGFyc2VyIG9yIG51bGwgaWYgdGhlcmUgaXNuJ3QgYW55IHByZXZpb3VzIHBhcnNlcgotICAgICAqLwotICAgIHB1YmxpYyBCcmlkZ2VYbWxCbG9ja1BhcnNlciBnZXRQcmV2aW91c1BhcnNlcigpIHsKLSAgICAgICAgaWYgKG1QYXJzZXJTdGFjay5zaXplKCkgPCAyKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbVBhcnNlclN0YWNrLmdldChtUGFyc2VyU3RhY2suc2l6ZSgpIC0gMik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcmVzb2x2ZVRoZW1lQXR0cmlidXRlKGludCByZXNpZCwgVHlwZWRWYWx1ZSBvdXRWYWx1ZSwgYm9vbGVhbiByZXNvbHZlUmVmcykgewotICAgICAgICBQYWlyPFJlc291cmNlVHlwZSwgU3RyaW5nPiByZXNvdXJjZUluZm8gPSBCcmlkZ2UucmVzb2x2ZVJlc291cmNlSWQocmVzaWQpOwotICAgICAgICBib29sZWFuIGlzRnJhbWV3b3JrUmVzID0gdHJ1ZTsKLSAgICAgICAgaWYgKHJlc291cmNlSW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXNvdXJjZUluZm8gPSBtUHJvamVjdENhbGxiYWNrLnJlc29sdmVSZXNvdXJjZUlkKHJlc2lkKTsKLSAgICAgICAgICAgIGlzRnJhbWV3b3JrUmVzID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVzb3VyY2VJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSBtUmVuZGVyUmVzb3VyY2VzLmZpbmRJdGVtSW5UaGVtZShyZXNvdXJjZUluZm8uZ2V0U2Vjb25kKCksCi0gICAgICAgICAgICAgICAgaXNGcmFtZXdvcmtSZXMpOwotICAgICAgICBpZiAocmVzb2x2ZVJlZnMpIHsKLSAgICAgICAgICAgIHZhbHVlID0gbVJlbmRlclJlc291cmNlcy5yZXNvbHZlUmVzVmFsdWUodmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHN0eWxlIHJlc291cmNlCi0gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0eWxlUmVzb3VyY2VWYWx1ZSkgewotICAgICAgICAgICAgLy8gZ2V0IHRoZSBpZCB0aGF0IHdpbGwgcmVwcmVzZW50IHRoaXMgc3R5bGUuCi0gICAgICAgICAgICBvdXRWYWx1ZS5yZXNvdXJjZUlkID0gZ2V0RHluYW1pY0lkQnlTdHlsZSgoU3R5bGVSZXNvdXJjZVZhbHVlKXZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLQotICAgICAgICBpbnQgYTsKLSAgICAgICAgLy8gaWYgdGhpcyBpcyBhIGZyYW1ld29yayB2YWx1ZS4KLSAgICAgICAgaWYgKHZhbHVlLmlzRnJhbWV3b3JrKCkpIHsKLSAgICAgICAgICAgIC8vIGxvb2sgZm9yIGlkTmFtZSBpbiB0aGUgYW5kcm9pZCBSIGNsYXNzZXMuCi0gICAgICAgICAgICAvLyB1c2UgMCBhIGRlZmF1bHQgcmVzIHZhbHVlIGFzIGl0J3Mgbm90IGEgdmFsaWQgaWQgdmFsdWUuCi0gICAgICAgICAgICBhID0gZ2V0RnJhbWV3b3JrUmVzb3VyY2VWYWx1ZSh2YWx1ZS5nZXRSZXNvdXJjZVR5cGUoKSwgdmFsdWUuZ2V0TmFtZSgpLCAwIC8qZGVmVmFsdWUqLyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBsb29rIGZvciBpZE5hbWUgaW4gdGhlIHByb2plY3QgUiBjbGFzcy4KLSAgICAgICAgICAgIC8vIHVzZSAwIGEgZGVmYXVsdCByZXMgdmFsdWUgYXMgaXQncyBub3QgYSB2YWxpZCBpZCB2YWx1ZS4KLSAgICAgICAgICAgIGEgPSBnZXRQcm9qZWN0UmVzb3VyY2VWYWx1ZSh2YWx1ZS5nZXRSZXNvdXJjZVR5cGUoKSwgdmFsdWUuZ2V0TmFtZSgpLCAwIC8qZGVmVmFsdWUqLyk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYSAhPSAwKSB7Ci0gICAgICAgICAgICBvdXRWYWx1ZS5yZXNvdXJjZUlkID0gYTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotCi0gICAgcHVibGljIFJlc291cmNlUmVmZXJlbmNlIHJlc29sdmVJZChpbnQgaWQpIHsKLSAgICAgICAgLy8gZmlyc3QgZ2V0IHRoZSBTdHJpbmcgcmVsYXRlZCB0byB0aGlzIGlkIGluIHRoZSBmcmFtZXdvcmsKLSAgICAgICAgUGFpcjxSZXNvdXJjZVR5cGUsIFN0cmluZz4gcmVzb3VyY2VJbmZvID0gQnJpZGdlLnJlc29sdmVSZXNvdXJjZUlkKGlkKTsKLQotICAgICAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUmVzb3VyY2VSZWZlcmVuY2UocmVzb3VyY2VJbmZvLmdldFNlY29uZCgpLCB0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGRpZG4ndCBmaW5kIGEgbWF0Y2ggaW4gdGhlIGZyYW1ld29yaz8gbG9vayBpbiB0aGUgcHJvamVjdC4KLSAgICAgICAgaWYgKG1Qcm9qZWN0Q2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgcmVzb3VyY2VJbmZvID0gbVByb2plY3RDYWxsYmFjay5yZXNvbHZlUmVzb3VyY2VJZChpZCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVzb3VyY2VSZWZlcmVuY2UocmVzb3VyY2VJbmZvLmdldFNlY29uZCgpLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUGFpcjxWaWV3LCBCb29sZWFuPiBpbmZsYXRlVmlldyhSZXNvdXJjZVJlZmVyZW5jZSByZXNvdXJjZSwgVmlld0dyb3VwIHBhcmVudCwKLSAgICAgICAgICAgIGJvb2xlYW4gYXR0YWNoVG9Sb290LCBib29sZWFuIHNraXBDYWxsYmFja1BhcnNlcikgewotICAgICAgICBib29sZWFuIGlzUGxhdGZvcm1MYXlvdXQgPSByZXNvdXJjZS5pc0ZyYW1ld29yaygpOwotCi0gICAgICAgIGlmIChpc1BsYXRmb3JtTGF5b3V0ID09IGZhbHNlICYmIHNraXBDYWxsYmFja1BhcnNlciA9PSBmYWxzZSkgewotICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIHByb2plY3QgY2FsbGJhY2sgY2FuIHByb3ZpZGUgdXMgd2l0aCBhIGN1c3RvbSBwYXJzZXIuCi0gICAgICAgICAgICBJTGF5b3V0UHVsbFBhcnNlciBwYXJzZXIgPSBnZXRQYXJzZXIocmVzb3VyY2UpOwotCi0gICAgICAgICAgICBpZiAocGFyc2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2VYbWxCbG9ja1BhcnNlciBibG9ja1BhcnNlciA9IG5ldyBCcmlkZ2VYbWxCbG9ja1BhcnNlcihwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCByZXNvdXJjZS5pc0ZyYW1ld29yaygpKTsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBwdXNoUGFyc2VyKGJsb2NrUGFyc2VyKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhaXIub2YoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUJyaWRnZUluZmxhdGVyLmluZmxhdGUoYmxvY2tQYXJzZXIsIHBhcmVudCwgYXR0YWNoVG9Sb290KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICBwb3BQYXJzZXIoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBSZXNvdXJjZVZhbHVlIHJlc1ZhbHVlOwotICAgICAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBSZXNvdXJjZVZhbHVlKSB7Ci0gICAgICAgICAgICByZXNWYWx1ZSA9IChSZXNvdXJjZVZhbHVlKSByZXNvdXJjZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc1BsYXRmb3JtTGF5b3V0KSB7Ci0gICAgICAgICAgICAgICAgcmVzVmFsdWUgPSBtUmVuZGVyUmVzb3VyY2VzLmdldEZyYW1ld29ya1Jlc291cmNlKFJlc291cmNlVHlwZS5MQVlPVVQsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5nZXROYW1lKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXNWYWx1ZSA9IG1SZW5kZXJSZXNvdXJjZXMuZ2V0UHJvamVjdFJlc291cmNlKFJlc291cmNlVHlwZS5MQVlPVVQsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5nZXROYW1lKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc1ZhbHVlICE9IG51bGwpIHsKLQotICAgICAgICAgICAgRmlsZSB4bWwgPSBuZXcgRmlsZShyZXNWYWx1ZS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGlmICh4bWwuaXNGaWxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHB1bGwgcGFyc2VyIGFyb3VuZCB0aGUgbGF5b3V0IFhNTCBmaWxlLCBhbmQgdGhlbgotICAgICAgICAgICAgICAgIC8vIGdpdmUgdGhhdCB0byBvdXIgWG1sQmxvY2tQYXJzZXIKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBYbWxQdWxsUGFyc2VyIHBhcnNlciA9IFBhcnNlckZhY3RvcnkuY3JlYXRlKHhtbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHRoZSByZXNvdXJjZSByZWYgdG8gaGF2ZSBjb3JyZWN0IHZpZXcgY29va2llcwotICAgICAgICAgICAgICAgICAgICBtQnJpZGdlSW5mbGF0ZXIuc2V0UmVzb3VyY2VSZWZlcmVuY2UocmVzb3VyY2UpOwotCi0gICAgICAgICAgICAgICAgICAgIEJyaWRnZVhtbEJsb2NrUGFyc2VyIGJsb2NrUGFyc2VyID0gbmV3IEJyaWRnZVhtbEJsb2NrUGFyc2VyKHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCByZXNvdXJjZS5pc0ZyYW1ld29yaygpKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hQYXJzZXIoYmxvY2tQYXJzZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhaXIub2YoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1CcmlkZ2VJbmZsYXRlci5pbmZsYXRlKGJsb2NrUGFyc2VyLCBwYXJlbnQsIGF0dGFjaFRvUm9vdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvcFBhcnNlcigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBwYXJzZXIgZm9yICIgKyB4bWwsIGUsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgICAgICAvLyB3ZSdsbCByZXR1cm4gbnVsbCBiZWxvdy4KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHNob3VsZG4ndCBoYXBwZW4gc2luY2Ugd2UgY2hlY2sgYWJvdmUuCi0gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgbUJyaWRnZUluZmxhdGVyLnNldFJlc291cmNlUmVmZXJlbmNlKG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfQlJPS0VOLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiRmlsZSAlcyBpcyBtaXNzaW5nISIsIHhtbCksIG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfQlJPS0VOLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJMYXlvdXQgJXMlcyBkb2VzIG5vdCBleGlzdC4iLCBpc1BsYXRmb3JtTGF5b3V0ID8gImFuZHJvaWQ6IiA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLmdldE5hbWUoKSksIG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFBhaXIub2YobnVsbCwgZmFsc2UpOwotICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi0gICAgcHJpdmF0ZSBJTGF5b3V0UHVsbFBhcnNlciBnZXRQYXJzZXIoUmVzb3VyY2VSZWZlcmVuY2UgcmVzb3VyY2UpIHsKLSAgICAgICAgSUxheW91dFB1bGxQYXJzZXIgcGFyc2VyOwotICAgICAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBSZXNvdXJjZVZhbHVlKSB7Ci0gICAgICAgICAgICBwYXJzZXIgPSBtUHJvamVjdENhbGxiYWNrLmdldFBhcnNlcigoUmVzb3VyY2VWYWx1ZSkgcmVzb3VyY2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFyc2VyID0gbVByb2plY3RDYWxsYmFjay5nZXRQYXJzZXIocmVzb3VyY2UuZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcGFyc2VyOwotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tLS0tLSBDb250ZXh0IG1ldGhvZHMKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXNvdXJjZXMgZ2V0UmVzb3VyY2VzKCkgewotICAgICAgICByZXR1cm4gbVN5c3RlbVJlc291cmNlczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVGhlbWUgZ2V0VGhlbWUoKSB7Ci0gICAgICAgIHJldHVybiBtVGhlbWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENsYXNzTG9hZGVyIGdldENsYXNzTG9hZGVyKCkgewotICAgICAgICByZXR1cm4gdGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBnZXRTeXN0ZW1TZXJ2aWNlKFN0cmluZyBzZXJ2aWNlKSB7Ci0gICAgICAgIGlmIChMQVlPVVRfSU5GTEFURVJfU0VSVklDRS5lcXVhbHMoc2VydmljZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBtQnJpZGdlSW5mbGF0ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoVEVYVF9TRVJWSUNFU19NQU5BR0VSX1NFUlZJQ0UuZXF1YWxzKHNlcnZpY2UpKSB7Ci0gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHJldHVybiBhIHZhbGlkIHNlcnZpY2UgdG8gYXZvaWQgTlBFCi0gICAgICAgICAgICByZXR1cm4gVGV4dFNlcnZpY2VzTWFuYWdlci5nZXRJbnN0YW5jZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFdJTkRPV19TRVJWSUNFLmVxdWFscyhzZXJ2aWNlKSkgewotICAgICAgICAgICAgcmV0dXJuIG1XaW5kb3dNYW5hZ2VyOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbmVlZGVkIGJ5IFNlYXJjaFZpZXcKLSAgICAgICAgaWYgKElOUFVUX01FVEhPRF9TRVJWSUNFLmVxdWFscyhzZXJ2aWNlKSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoUE9XRVJfU0VSVklDRS5lcXVhbHMoc2VydmljZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUG93ZXJNYW5hZ2VyKHRoaXMsIG5ldyBCcmlkZ2VQb3dlck1hbmFnZXIoKSwgbmV3IEhhbmRsZXIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlVuc3VwcG9ydGVkIFNlcnZpY2U6ICIgKyBzZXJ2aWNlKTsKLSAgICB9Ci0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmaW5hbCBUeXBlZEFycmF5IG9idGFpblN0eWxlZEF0dHJpYnV0ZXMoaW50W10gYXR0cnMpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVN0eWxlQmFzZWRUeXBlZEFycmF5KG1SZW5kZXJSZXNvdXJjZXMuZ2V0Q3VycmVudFRoZW1lKCksIGF0dHJzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgVHlwZWRBcnJheSBvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGludCByZXNpZCwgaW50W10gYXR0cnMpCi0gICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gZ2V0IHRoZSBTdHlsZVJlc291cmNlVmFsdWUgYmFzZWQgb24gdGhlIHJlc0lkOwotICAgICAgICBTdHlsZVJlc291cmNlVmFsdWUgc3R5bGUgPSBnZXRTdHlsZUJ5RHluYW1pY0lkKHJlc2lkKTsKLQotICAgICAgICBpZiAoc3R5bGUgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1UeXBlZEFycmF5Q2FjaGUgPT0gbnVsbCkgewotICAgICAgICAgICAgbVR5cGVkQXJyYXlDYWNoZSA9IG5ldyBIYXNoTWFwPGludFtdLCBNYXA8SW50ZWdlcixUeXBlZEFycmF5Pj4oKTsKLQotICAgICAgICAgICAgTWFwPEludGVnZXIsIFR5cGVkQXJyYXk+IG1hcCA9IG5ldyBIYXNoTWFwPEludGVnZXIsIFR5cGVkQXJyYXk+KCk7Ci0gICAgICAgICAgICBtVHlwZWRBcnJheUNhY2hlLnB1dChhdHRycywgbWFwKTsKLQotICAgICAgICAgICAgQnJpZGdlVHlwZWRBcnJheSB0YSA9IGNyZWF0ZVN0eWxlQmFzZWRUeXBlZEFycmF5KHN0eWxlLCBhdHRycyk7Ci0gICAgICAgICAgICBtYXAucHV0KHJlc2lkLCB0YSk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0YTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgMm5kIG1hcAotICAgICAgICBNYXA8SW50ZWdlciwgVHlwZWRBcnJheT4gbWFwID0gbVR5cGVkQXJyYXlDYWNoZS5nZXQoYXR0cnMpOwotICAgICAgICBpZiAobWFwID09IG51bGwpIHsKLSAgICAgICAgICAgIG1hcCA9IG5ldyBIYXNoTWFwPEludGVnZXIsIFR5cGVkQXJyYXk+KCk7Ci0gICAgICAgICAgICBtVHlwZWRBcnJheUNhY2hlLnB1dChhdHRycywgbWFwKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgYXJyYXkgZnJvbSB0aGUgMm5kIG1hcAotICAgICAgICBUeXBlZEFycmF5IHRhID0gbWFwLmdldChyZXNpZCk7Ci0KLSAgICAgICAgaWYgKHRhID09IG51bGwpIHsKLSAgICAgICAgICAgIHRhID0gY3JlYXRlU3R5bGVCYXNlZFR5cGVkQXJyYXkoc3R5bGUsIGF0dHJzKTsKLSAgICAgICAgICAgIG1hcC5wdXQocmVzaWQsIHRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0YTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmluYWwgVHlwZWRBcnJheSBvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKEF0dHJpYnV0ZVNldCBzZXQsIGludFtdIGF0dHJzKSB7Ci0gICAgICAgIHJldHVybiBvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKHNldCwgYXR0cnMsIDAsIDApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBUeXBlZEFycmF5IG9idGFpblN0eWxlZEF0dHJpYnV0ZXMoQXR0cmlidXRlU2V0IHNldCwgaW50W10gYXR0cnMsCi0gICAgICAgICAgICBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKLQotICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGRlZmF1bHRQcm9wTWFwID0gbnVsbDsKLSAgICAgICAgYm9vbGVhbiBpc1BsYXRmb3JtRmlsZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gSGludDogZm9yIFhtbFB1bGxQYXJzZXIsIGF0dGFjaCBzb3VyY2UgLy9ERVZJQ0VfU1JDL2RhbHZpay9saWJjb3JlL3htbC9zcmMvamF2YQotICAgICAgICBpZiAoc2V0IGluc3RhbmNlb2YgQnJpZGdlWG1sQmxvY2tQYXJzZXIpIHsKLSAgICAgICAgICAgIEJyaWRnZVhtbEJsb2NrUGFyc2VyIHBhcnNlciA9IG51bGw7Ci0gICAgICAgICAgICBwYXJzZXIgPSAoQnJpZGdlWG1sQmxvY2tQYXJzZXIpc2V0OwotCi0gICAgICAgICAgICBpc1BsYXRmb3JtRmlsZSA9IHBhcnNlci5pc1BsYXRmb3JtRmlsZSgpOwotCi0gICAgICAgICAgICBPYmplY3Qga2V5ID0gcGFyc2VyLmdldFZpZXdDb29raWUoKTsKLSAgICAgICAgICAgIGlmIChrZXkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGRlZmF1bHRQcm9wTWFwID0gbURlZmF1bHRQcm9wTWFwcy5nZXQoa2V5KTsKLSAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFByb3BNYXAgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UHJvcE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotICAgICAgICAgICAgICAgICAgICBtRGVmYXVsdFByb3BNYXBzLnB1dChrZXksIGRlZmF1bHRQcm9wTWFwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIGlmIChzZXQgaW5zdGFuY2VvZiBCcmlkZ2VMYXlvdXRQYXJhbXNNYXBBdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICAvLyB0aGlzIGlzIG9ubHkgZm9yIHRlbXAgbGF5b3V0IHBhcmFtcyBnZW5lcmF0ZWQgZHluYW1pY2FsbHksIHNvIHRoaXMgaXMgbmV2ZXIKLSAgICAgICAgICAgIC8vIHBsYXRmb3JtIGNvbnRlbnQuCi0gICAgICAgICAgICBpc1BsYXRmb3JtRmlsZSA9IGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKHNldCAhPSBudWxsKSB7IC8vIG51bGwgcGFyc2VyIGlzIG9rCi0gICAgICAgICAgICAvLyByZWFsbHkgdGhpcyBzaG91bGQgbm90IGJlIGhhcHBlbmluZyBzaW5jZSBpdHMgaW5zdGFudGlhdGVkIGluIEJyaWRnZQotICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfQlJPS0VOLAotICAgICAgICAgICAgICAgICAgICAiUGFyc2VyIGlzIG5vdCBhIEJyaWRnZVhtbEJsb2NrUGFyc2VyISIsIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBMaXN0PFBhaXI8U3RyaW5nLCBCb29sZWFuPj4gYXR0cmlidXRlTGlzdCA9IHNlYXJjaEF0dHJzKGF0dHJzKTsKLQotICAgICAgICBCcmlkZ2VUeXBlZEFycmF5IHRhID0gKChCcmlkZ2VSZXNvdXJjZXMpIG1TeXN0ZW1SZXNvdXJjZXMpLm5ld1R5cGVBcnJheShhdHRycy5sZW5ndGgsCi0gICAgICAgICAgICAgICAgaXNQbGF0Zm9ybUZpbGUpOwotCi0gICAgICAgIC8vIGxvb2sgZm9yIGEgY3VzdG9tIHN0eWxlLgotICAgICAgICBTdHJpbmcgY3VzdG9tU3R5bGUgPSBudWxsOwotICAgICAgICBpZiAoc2V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGN1c3RvbVN0eWxlID0gc2V0LmdldEF0dHJpYnV0ZVZhbHVlKG51bGwgLyogbmFtZXNwYWNlKi8sICJzdHlsZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3R5bGVSZXNvdXJjZVZhbHVlIGN1c3RvbVN0eWxlVmFsdWVzID0gbnVsbDsKLSAgICAgICAgaWYgKGN1c3RvbVN0eWxlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgaXRlbSA9IG1SZW5kZXJSZXNvdXJjZXMuZmluZFJlc1ZhbHVlKGN1c3RvbVN0eWxlLAotICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKmZvcmNlRnJhbWV3b3JrT25seSovKTsKLQotICAgICAgICAgICAgLy8gcmVzb2x2ZSBpdCBpbiBjYXNlIGl0IGxpbmtzIHRvIHNvbWV0aGluZyBlbHNlCi0gICAgICAgICAgICBpdGVtID0gbVJlbmRlclJlc291cmNlcy5yZXNvbHZlUmVzVmFsdWUoaXRlbSk7Ci0KLSAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgU3R5bGVSZXNvdXJjZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgY3VzdG9tU3R5bGVWYWx1ZXMgPSAoU3R5bGVSZXNvdXJjZVZhbHVlKWl0ZW07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyByZXNvbHZlIHRoZSBkZWZTdHlsZUF0dHIgdmFsdWUgaW50byBhIElTdHlsZVJlc291cmNlVmFsdWUKLSAgICAgICAgU3R5bGVSZXNvdXJjZVZhbHVlIGRlZlN0eWxlVmFsdWVzID0gbnVsbDsKLQotICAgICAgICBpZiAoZGVmU3R5bGVBdHRyICE9IDApIHsKLSAgICAgICAgICAgIC8vIGdldCB0aGUgbmFtZSBmcm9tIHRoZSBpbnQuCi0gICAgICAgICAgICBQYWlyPFN0cmluZywgQm9vbGVhbj4gZGVmU3R5bGVBdHRyaWJ1dGUgPSBzZWFyY2hBdHRyKGRlZlN0eWxlQXR0cik7Ci0KLSAgICAgICAgICAgIGlmIChkZWZhdWx0UHJvcE1hcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGRlZlN0eWxlTmFtZSA9IGRlZlN0eWxlQXR0cmlidXRlLmdldEZpcnN0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlZlN0eWxlQXR0cmlidXRlLmdldFNlY29uZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZlN0eWxlTmFtZSA9ICJhbmRyb2lkOiIgKyBkZWZTdHlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHRQcm9wTWFwLnB1dCgic3R5bGUiLCBkZWZTdHlsZU5hbWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBsb29rIGZvciB0aGUgc3R5bGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUsIGFuZCBpdHMgcGFyZW50OgotICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSBpdGVtID0gbVJlbmRlclJlc291cmNlcy5maW5kSXRlbUluVGhlbWUoZGVmU3R5bGVBdHRyaWJ1dGUuZ2V0Rmlyc3QoKSwKLSAgICAgICAgICAgICAgICAgICAgZGVmU3R5bGVBdHRyaWJ1dGUuZ2V0U2Vjb25kKCkpOwotCi0gICAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gaXRlbSBpcyBhIHJlZmVyZW5jZSB0byBhIHN0eWxlIGVudHJ5LiBTZWFyY2ggZm9yIGl0LgotICAgICAgICAgICAgICAgIGl0ZW0gPSBtUmVuZGVyUmVzb3VyY2VzLmZpbmRSZXNWYWx1ZShpdGVtLmdldFZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKmZvcmNlRnJhbWV3b3JrT25seSovKTsKLQotICAgICAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgU3R5bGVSZXNvdXJjZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZlN0eWxlVmFsdWVzID0gKFN0eWxlUmVzb3VyY2VWYWx1ZSlpdGVtOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX1JFU09MVkVfVEhFTUVfQVRUUiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gZmluZCBzdHlsZSAnJXMnIGluIGN1cnJlbnQgdGhlbWUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZTdHlsZUF0dHJpYnV0ZS5nZXRGaXJzdCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGRlZlN0eWxlUmVzICE9IDApIHsKLSAgICAgICAgICAgIGJvb2xlYW4gaXNGcmFtZXdvcmtSZXMgPSB0cnVlOwotICAgICAgICAgICAgUGFpcjxSZXNvdXJjZVR5cGUsIFN0cmluZz4gdmFsdWUgPSBCcmlkZ2UucmVzb2x2ZVJlc291cmNlSWQoZGVmU3R5bGVSZXMpOwotICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG1Qcm9qZWN0Q2FsbGJhY2sucmVzb2x2ZVJlc291cmNlSWQoZGVmU3R5bGVSZXMpOwotICAgICAgICAgICAgICAgIGlzRnJhbWV3b3JrUmVzID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmdldEZpcnN0KCkgPT0gUmVzb3VyY2VUeXBlLlNUWUxFKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgZm9yIHRoZSBzdHlsZSBpbiB0aGUgY3VycmVudCB0aGVtZSwgYW5kIGl0cyBwYXJlbnQ6Ci0gICAgICAgICAgICAgICAgICAgIFJlc291cmNlVmFsdWUgaXRlbSA9IG1SZW5kZXJSZXNvdXJjZXMuZmluZEl0ZW1JblRoZW1lKHZhbHVlLmdldFNlY29uZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRnJhbWV3b3JrUmVzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBTdHlsZVJlc291cmNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFByb3BNYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UHJvcE1hcC5wdXQoInN0eWxlIiwgaXRlbS5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZlN0eWxlVmFsdWVzID0gKFN0eWxlUmVzb3VyY2VWYWx1ZSlpdGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0eWxlIHdpdGggaWQgMHgleCAocmVzb2x2ZWQgdG8gJyVzJykgZG9lcyBub3QgZXhpc3QuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZTdHlsZVJlcywgdmFsdWUuZ2V0U2Vjb25kKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVzb3VjZSBpZCAweCV4IGlzIG5vdCBvZiB0eXBlIFNUWUxFIChpbnN0ZWFkICVzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZTdHlsZVJlcywgdmFsdWUuZ2V0Rmlyc3QoKS50b1N0cmluZygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBmaW5kIHN0eWxlIHdpdGggaWQgMHgleCBpbiBjdXJyZW50IHRoZW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmU3R5bGVSZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgYXBwTmFtZXNwYWNlID0gbVByb2plY3RDYWxsYmFjay5nZXROYW1lc3BhY2UoKTsKLQotICAgICAgICBpZiAoYXR0cmlidXRlTGlzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDAgOyBpbmRleCA8IGF0dHJpYnV0ZUxpc3Quc2l6ZSgpIDsgaW5kZXgrKykgewotICAgICAgICAgICAgICAgIFBhaXI8U3RyaW5nLCBCb29sZWFuPiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVMaXN0LmdldChpbmRleCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3RyaW5nIGF0dHJOYW1lID0gYXR0cmlidXRlLmdldEZpcnN0KCk7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBmcmFtZXdvcmtBdHRyID0gYXR0cmlidXRlLmdldFNlY29uZCgpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKHNldCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2V0LmdldEF0dHJpYnV0ZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1ld29ya0F0dHIgPyBCcmlkZ2VDb25zdGFudHMuTlNfUkVTT1VSQ0VTIDogYXBwTmFtZXNwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ck5hbWUpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYW4gYXBwIGF0dHJpYnV0ZSwgYW5kIHRoZSBmaXJzdCBnZXQgZmFpbHMsIHRyeSB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBuZXcgcmVzLWF1dG8gbmFtZXNwYWNlIGFzIHdlbGwKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1ld29ya0F0dHIgPT0gZmFsc2UgJiYgdmFsdWUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZXQuZ2V0QXR0cmlidXRlVmFsdWUoQnJpZGdlQ29uc3RhbnRzLk5TX0FQUF9SRVNfQVVUTywgYXR0ck5hbWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUncyBubyBkaXJlY3QgdmFsdWUgZm9yIHRoaXMgYXR0cmlidXRlIGluIHRoZSBYTUwsIHdlIGxvb2sgZm9yIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgaW4gdGhlIHdpZGdldCBkZWZTdHlsZSwgYW5kIHRoZW4gaW4gdGhlIHRoZW1lLgotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlc291cmNlVmFsdWUgcmVzVmFsdWUgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgZm9yIHRoZSB2YWx1ZSBpbiB0aGUgY3VzdG9tIHN0eWxlIGZpcnN0IChhbmQgaXRzIHBhcmVudCBpZiBuZWVkZWQpCi0gICAgICAgICAgICAgICAgICAgIGlmIChjdXN0b21TdHlsZVZhbHVlcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNWYWx1ZSA9IG1SZW5kZXJSZXNvdXJjZXMuZmluZEl0ZW1JblN0eWxlKGN1c3RvbVN0eWxlVmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZSwgZnJhbWV3b3JrQXR0cik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIGxvb2sgZm9yIHRoZSB2YWx1ZSBpbiB0aGUgZGVmYXVsdCBTdHlsZSAoYW5kIGl0cyBwYXJlbnQgaWYgbmVlZGVkKQotICAgICAgICAgICAgICAgICAgICBpZiAocmVzVmFsdWUgPT0gbnVsbCAmJiBkZWZTdHlsZVZhbHVlcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNWYWx1ZSA9IG1SZW5kZXJSZXNvdXJjZXMuZmluZEl0ZW1JblN0eWxlKGRlZlN0eWxlVmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZSwgZnJhbWV3b3JrQXR0cik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgaXRlbSBpcyBub3QgcHJlc2VudCBpbiB0aGUgZGVmU3R5bGUsIHdlIGxvb2sgaW4gdGhlIG1haW4gdGhlbWUgKGFuZAotICAgICAgICAgICAgICAgICAgICAvLyBpdHMgcGFyZW50IHRoZW1lcykKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc1ZhbHVlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc1ZhbHVlID0gbVJlbmRlclJlc291cmNlcy5maW5kSXRlbUluVGhlbWUoYXR0ck5hbWUsIGZyYW1ld29ya0F0dHIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgZm91bmQgYSB2YWx1ZSwgd2UgbWFrZSBzdXJlIHRoaXMgZG9lc24ndCByZWZlcmVuY2UgYW5vdGhlciB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gU28gd2UgcmVzb2x2ZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc1ZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHB1dCB0aGUgZmlyc3QgZGVmYXVsdCB2YWx1ZSwgYmVmb3JlIHRoZSByZXNvbHV0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRQcm9wTWFwICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UHJvcE1hcC5wdXQoYXR0ck5hbWUsIHJlc1ZhbHVlLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNWYWx1ZSA9IG1SZW5kZXJSZXNvdXJjZXMucmVzb2x2ZVJlc1ZhbHVlKHJlc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHRhLmJyaWRnZVNldFZhbHVlKGluZGV4LCBhdHRyTmFtZSwgZnJhbWV3b3JrQXR0ciwgcmVzVmFsdWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIGEgdmFsdWUgaW4gdGhlIFhNTCwgYnV0IHdlIG5lZWQgdG8gcmVzb2x2ZSBpdCBpbiBjYXNlIGl0J3MKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNpbmcgYW5vdGhlciByZXNvdXJjZSBvciBhIHRoZW1lIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICB0YS5icmlkZ2VTZXRWYWx1ZShpbmRleCwgYXR0ck5hbWUsIGZyYW1ld29ya0F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlclJlc291cmNlcy5yZXNvbHZlVmFsdWUobnVsbCwgYXR0ck5hbWUsIHZhbHVlLCBpc1BsYXRmb3JtRmlsZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRhLnNlYWxBcnJheSgpOwotCi0gICAgICAgIHJldHVybiB0YTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTG9vcGVyIGdldE1haW5Mb29wZXIoKSB7Ci0gICAgICAgIHJldHVybiBMb29wZXIubXlMb29wZXIoKTsKLSAgICB9Ci0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0gcHJpdmF0ZSBuZXcgbWV0aG9kcwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIHtAbGluayBCcmlkZ2VUeXBlZEFycmF5fSBieSBmaWxsaW5nIHRoZSB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgaW50W10gd2l0aCB0aGUKLSAgICAgKiB2YWx1ZXMgZm91bmQgaW4gdGhlIGdpdmVuIHN0eWxlLgotICAgICAqIEBzZWUgI29idGFpblN0eWxlZEF0dHJpYnV0ZXMoaW50LCBpbnRbXSkKLSAgICAgKi8KLSAgICBwcml2YXRlIEJyaWRnZVR5cGVkQXJyYXkgY3JlYXRlU3R5bGVCYXNlZFR5cGVkQXJyYXkoU3R5bGVSZXNvdXJjZVZhbHVlIHN0eWxlLCBpbnRbXSBhdHRycykKLSAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb24gewotCi0gICAgICAgIExpc3Q8UGFpcjxTdHJpbmcsIEJvb2xlYW4+PiBhdHRyaWJ1dGVzID0gc2VhcmNoQXR0cnMoYXR0cnMpOwotCi0gICAgICAgIEJyaWRnZVR5cGVkQXJyYXkgdGEgPSAoKEJyaWRnZVJlc291cmNlcykgbVN5c3RlbVJlc291cmNlcykubmV3VHlwZUFycmF5KGF0dHJzLmxlbmd0aCwKLSAgICAgICAgICAgICAgICBmYWxzZSk7Ci0KLSAgICAgICAgLy8gZm9yIGVhY2ggYXR0cmlidXRlLCBnZXQgaXRzIG5hbWUgc28gdGhhdCB3ZSBjYW4gc2VhcmNoIGl0IGluIHRoZSBzdHlsZQotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBhdHRycy5sZW5ndGggOyBpKyspIHsKLSAgICAgICAgICAgIFBhaXI8U3RyaW5nLCBCb29sZWFuPiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLmdldChpKTsKLQotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gbG9vayBmb3IgdGhlIHZhbHVlIGluIHRoZSBnaXZlbiBzdHlsZQotICAgICAgICAgICAgICAgIFJlc291cmNlVmFsdWUgcmVzVmFsdWUgPSBtUmVuZGVyUmVzb3VyY2VzLmZpbmRJdGVtSW5TdHlsZShzdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZS5nZXRGaXJzdCgpLCBhdHRyaWJ1dGUuZ2V0U2Vjb25kKCkpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlc1ZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSBpdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHJlZmVyZW5jZXMgbGVmdC4KLSAgICAgICAgICAgICAgICAgICAgdGEuYnJpZGdlU2V0VmFsdWUoaSwgYXR0cmlidXRlLmdldEZpcnN0KCksIGF0dHJpYnV0ZS5nZXRTZWNvbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyUmVzb3VyY2VzLnJlc29sdmVSZXNWYWx1ZShyZXNWYWx1ZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRhLnNlYWxBcnJheSgpOwotCi0gICAgICAgIHJldHVybiB0YTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFRoZSBpbnB1dCBpbnRbXSBhdHRycyBpcyBhIGxpc3Qgb2YgYXR0cmlidXRlcy4gVGhlIHJldHVybnMgYSBsaXN0IG9mIGluZm9ybWF0aW9uIGFib3V0Ci0gICAgICogZWFjaCBhdHRyaWJ1dGVzLiBUaGUgaW5mb3JtYXRpb24gaXMgKG5hbWUsIGlzRnJhbWV3b3JrKQotICAgICAqIDxwLz4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhdHRycyBBbiBhdHRyaWJ1dGUgYXJyYXkgcmVmZXJlbmNlIGdpdmVuIHRvIG9idGFpblN0eWxlZEF0dHJpYnV0ZXMuCi0gICAgICogQHJldHVybiBMaXN0IG9mIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbi4KLSAgICAgKi8KLSAgICBwcml2YXRlIExpc3Q8UGFpcjxTdHJpbmcsIEJvb2xlYW4+PiBzZWFyY2hBdHRycyhpbnRbXSBhdHRycykgewotICAgICAgICBMaXN0PFBhaXI8U3RyaW5nLCBCb29sZWFuPj4gcmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8UGFpcjxTdHJpbmcsIEJvb2xlYW4+PihhdHRycy5sZW5ndGgpOwotCi0gICAgICAgIC8vIGZvciBlYWNoIGF0dHJpYnV0ZSwgZ2V0IGl0cyBuYW1lIHNvIHRoYXQgd2UgY2FuIHNlYXJjaCBpdCBpbiB0aGUgc3R5bGUKLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgYXR0cnMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgICAgICAgICBQYWlyPFJlc291cmNlVHlwZSwgU3RyaW5nPiByZXNvbHZlZFJlc291cmNlID0gQnJpZGdlLnJlc29sdmVSZXNvdXJjZUlkKGF0dHJzW2ldKTsKLSAgICAgICAgICAgIGJvb2xlYW4gaXNGcmFtZXdvcmsgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChyZXNvbHZlZFJlc291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpc0ZyYW1ld29yayA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlc29sdmVkUmVzb3VyY2UgPSBtUHJvamVjdENhbGxiYWNrLnJlc29sdmVSZXNvdXJjZUlkKGF0dHJzW2ldKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHJlc29sdmVkUmVzb3VyY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlc3VsdHMuYWRkKFBhaXIub2YocmVzb2x2ZWRSZXNvdXJjZS5nZXRTZWNvbmQoKSwgaXNGcmFtZXdvcmspKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hZGQobnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZWFyY2hlcyBmb3IgdGhlIGF0dHJpYnV0ZSByZWZlcmVuY2VkIGJ5IGl0cyBpbnRlcm5hbCBpZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhdHRyIEFuIGF0dHJpYnV0ZSByZWZlcmVuY2UgZ2l2ZW4gdG8gb2J0YWluU3R5bGVkQXR0cmlidXRlcyBzdWNoIGFzIGRlZlN0eWxlLgotICAgICAqIEByZXR1cm4gQSAobmFtZSwgaXNGcmFtZXdvcmspIHBhaXIgZGVzY3JpYmluZyB0aGUgYXR0cmlidXRlIGlmIGZvdW5kLiBSZXR1cm5zIG51bGwKLSAgICAgKiAgICAgICAgIGlmIG5vdGhpbmcgaXMgZm91bmQuCi0gICAgICovCi0gICAgcHVibGljIFBhaXI8U3RyaW5nLCBCb29sZWFuPiBzZWFyY2hBdHRyKGludCBhdHRyKSB7Ci0gICAgICAgIFBhaXI8UmVzb3VyY2VUeXBlLCBTdHJpbmc+IGluZm8gPSBCcmlkZ2UucmVzb2x2ZVJlc291cmNlSWQoYXR0cik7Ci0gICAgICAgIGlmIChpbmZvICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBQYWlyLm9mKGluZm8uZ2V0U2Vjb25kKCksIEJvb2xlYW4uVFJVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmZvID0gbVByb2plY3RDYWxsYmFjay5yZXNvbHZlUmVzb3VyY2VJZChhdHRyKTsKLSAgICAgICAgaWYgKGluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIFBhaXIub2YoaW5mby5nZXRTZWNvbmQoKSwgQm9vbGVhbi5GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldER5bmFtaWNJZEJ5U3R5bGUoU3R5bGVSZXNvdXJjZVZhbHVlIHJlc1ZhbHVlKSB7Ci0gICAgICAgIGlmIChtRHluYW1pY0lkVG9TdHlsZU1hcCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgdGhlIG1hcHMuCi0gICAgICAgICAgICBtRHluYW1pY0lkVG9TdHlsZU1hcCA9IG5ldyBIYXNoTWFwPEludGVnZXIsIFN0eWxlUmVzb3VyY2VWYWx1ZT4oKTsKLSAgICAgICAgICAgIG1TdHlsZVRvRHluYW1pY0lkTWFwID0gbmV3IEhhc2hNYXA8U3R5bGVSZXNvdXJjZVZhbHVlLCBJbnRlZ2VyPigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbG9vayBmb3IgYW4gZXhpc3RpbmcgaWQKLSAgICAgICAgSW50ZWdlciBpZCA9IG1TdHlsZVRvRHluYW1pY0lkTWFwLmdldChyZXNWYWx1ZSk7Ci0KLSAgICAgICAgaWYgKGlkID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vIGdlbmVyYXRlIGEgbmV3IGlkCi0gICAgICAgICAgICBpZCA9IEludGVnZXIudmFsdWVPZigrK21EeW5hbWljSWRHZW5lcmF0b3IpOwotCi0gICAgICAgICAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBtYXBzLgotICAgICAgICAgICAgbUR5bmFtaWNJZFRvU3R5bGVNYXAucHV0KGlkLCByZXNWYWx1ZSk7Ci0gICAgICAgICAgICBtU3R5bGVUb0R5bmFtaWNJZE1hcC5wdXQocmVzVmFsdWUsIGlkKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBpZDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0eWxlUmVzb3VyY2VWYWx1ZSBnZXRTdHlsZUJ5RHluYW1pY0lkKGludCBpKSB7Ci0gICAgICAgIGlmIChtRHluYW1pY0lkVG9TdHlsZU1hcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUR5bmFtaWNJZFRvU3R5bGVNYXAuZ2V0KGkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRGcmFtZXdvcmtSZXNvdXJjZVZhbHVlKFJlc291cmNlVHlwZSByZXNUeXBlLCBTdHJpbmcgcmVzTmFtZSwgaW50IGRlZlZhbHVlKSB7Ci0gICAgICAgIEludGVnZXIgdmFsdWUgPSBCcmlkZ2UuZ2V0UmVzb3VyY2VJZChyZXNUeXBlLCByZXNOYW1lKTsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pbnRWYWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlZlZhbHVlOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0UHJvamVjdFJlc291cmNlVmFsdWUoUmVzb3VyY2VUeXBlIHJlc1R5cGUsIFN0cmluZyByZXNOYW1lLCBpbnQgZGVmVmFsdWUpIHsKLSAgICAgICAgaWYgKG1Qcm9qZWN0Q2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgSW50ZWdlciB2YWx1ZSA9IG1Qcm9qZWN0Q2FsbGJhY2suZ2V0UmVzb3VyY2VJZChyZXNUeXBlLCByZXNOYW1lKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmludFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgfQotCi0gICAgLy8tLS0tLS0tLS0tLS0gTk9UIE9WRVJSSURFTiAtLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gYmluZFNlcnZpY2UoSW50ZW50IGFyZzAsIFNlcnZpY2VDb25uZWN0aW9uIGFyZzEsIGludCBhcmcyKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgY2hlY2tDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihTdHJpbmcgYXJnMCkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgY2hlY2tDYWxsaW5nT3JTZWxmVXJpUGVybWlzc2lvbihVcmkgYXJnMCwgaW50IGFyZzEpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oU3RyaW5nIGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGNoZWNrQ2FsbGluZ1VyaVBlcm1pc3Npb24oVXJpIGFyZzAsIGludCBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBjaGVja1Blcm1pc3Npb24oU3RyaW5nIGFyZzAsIGludCBhcmcxLCBpbnQgYXJnMikgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgY2hlY2tVcmlQZXJtaXNzaW9uKFVyaSBhcmcwLCBpbnQgYXJnMSwgaW50IGFyZzIsIGludCBhcmczKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBjaGVja1VyaVBlcm1pc3Npb24oVXJpIGFyZzAsIFN0cmluZyBhcmcxLCBTdHJpbmcgYXJnMiwgaW50IGFyZzMsCi0gICAgICAgICAgICBpbnQgYXJnNCwgaW50IGFyZzUpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjbGVhcldhbGxwYXBlcigpIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRleHQgY3JlYXRlUGFja2FnZUNvbnRleHQoU3RyaW5nIGFyZzAsIGludCBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRleHQgY3JlYXRlUGFja2FnZUNvbnRleHRBc1VzZXIoU3RyaW5nIGFyZzAsIGludCBhcmcxLCBVc2VySGFuZGxlIHVzZXIpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29udGV4dCBjcmVhdGVDb25maWd1cmF0aW9uQ29udGV4dChDb25maWd1cmF0aW9uIG92ZXJyaWRlQ29uZmlndXJhdGlvbikgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb250ZXh0IGNyZWF0ZURpc3BsYXlDb250ZXh0KERpc3BsYXkgZGlzcGxheSkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBkYXRhYmFzZUxpc3QoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZGVsZXRlRGF0YWJhc2UoU3RyaW5nIGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZGVsZXRlRmlsZShTdHJpbmcgYXJnMCkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBlbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oU3RyaW5nIGFyZzAsIFN0cmluZyBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGVuZm9yY2VDYWxsaW5nT3JTZWxmVXJpUGVybWlzc2lvbihVcmkgYXJnMCwgaW50IGFyZzEsCi0gICAgICAgICAgICBTdHJpbmcgYXJnMikgewotICAgICAgICAvLyBwYXNzCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oU3RyaW5nIGFyZzAsIFN0cmluZyBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGVuZm9yY2VDYWxsaW5nVXJpUGVybWlzc2lvbihVcmkgYXJnMCwgaW50IGFyZzEsIFN0cmluZyBhcmcyKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGVuZm9yY2VQZXJtaXNzaW9uKFN0cmluZyBhcmcwLCBpbnQgYXJnMSwgaW50IGFyZzIsIFN0cmluZyBhcmczKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGVuZm9yY2VVcmlQZXJtaXNzaW9uKFVyaSBhcmcwLCBpbnQgYXJnMSwgaW50IGFyZzIsIGludCBhcmczLAotICAgICAgICAgICAgU3RyaW5nIGFyZzQpIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZW5mb3JjZVVyaVBlcm1pc3Npb24oVXJpIGFyZzAsIFN0cmluZyBhcmcxLCBTdHJpbmcgYXJnMiwKLSAgICAgICAgICAgIGludCBhcmczLCBpbnQgYXJnNCwgaW50IGFyZzUsIFN0cmluZyBhcmc2KSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBmaWxlTGlzdCgpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQXNzZXRNYW5hZ2VyIGdldEFzc2V0cygpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZSBnZXRDYWNoZURpcigpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZSBnZXRFeHRlcm5hbENhY2hlRGlyKCkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb250ZW50UmVzb2x2ZXIgZ2V0Q29udGVudFJlc29sdmVyKCkgewotICAgICAgICBpZiAobUNvbnRlbnRSZXNvbHZlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtQ29udGVudFJlc29sdmVyID0gbmV3IEJyaWRnZUNvbnRlbnRSZXNvbHZlcih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbUNvbnRlbnRSZXNvbHZlcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZSBnZXREYXRhYmFzZVBhdGgoU3RyaW5nIGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZSBnZXREaXIoU3RyaW5nIGFyZzAsIGludCBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZpbGUgZ2V0RmlsZVN0cmVhbVBhdGgoU3RyaW5nIGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZSBnZXRGaWxlc0RpcigpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZSBnZXRFeHRlcm5hbEZpbGVzRGlyKFN0cmluZyB0eXBlKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQYWNrYWdlQ29kZVBhdGgoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFBhY2thZ2VNYW5hZ2VyIGdldFBhY2thZ2VNYW5hZ2VyKCkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRCYXNlUGFja2FnZU5hbWUoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRPcFBhY2thZ2VOYW1lKCkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBBcHBsaWNhdGlvbkluZm8gZ2V0QXBwbGljYXRpb25JbmZvKCkgewotICAgICAgICByZXR1cm4gbUFwcGxpY2F0aW9uSW5mbzsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFBhY2thZ2VSZXNvdXJjZVBhdGgoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZpbGUgZ2V0U2hhcmVkUHJlZnNGaWxlKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNoYXJlZFByZWZlcmVuY2VzIGdldFNoYXJlZFByZWZlcmVuY2VzKFN0cmluZyBhcmcwLCBpbnQgYXJnMSkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBEcmF3YWJsZSBnZXRXYWxscGFwZXIoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRXYWxscGFwZXJEZXNpcmVkTWluaW11bVdpZHRoKCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRXYWxscGFwZXJEZXNpcmVkTWluaW11bUhlaWdodCgpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGdyYW50VXJpUGVybWlzc2lvbihTdHJpbmcgYXJnMCwgVXJpIGFyZzEsIGludCBhcmcyKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBGaWxlSW5wdXRTdHJlYW0gb3BlbkZpbGVJbnB1dChTdHJpbmcgYXJnMCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZpbGVPdXRwdXRTdHJlYW0gb3BlbkZpbGVPdXRwdXQoU3RyaW5nIGFyZzAsIGludCBhcmcxKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU1FMaXRlRGF0YWJhc2Ugb3Blbk9yQ3JlYXRlRGF0YWJhc2UoU3RyaW5nIGFyZzAsIGludCBhcmcxLCBDdXJzb3JGYWN0b3J5IGFyZzIpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU1FMaXRlRGF0YWJhc2Ugb3Blbk9yQ3JlYXRlRGF0YWJhc2UoU3RyaW5nIGFyZzAsIGludCBhcmcxLAotICAgICAgICAgICAgQ3Vyc29yRmFjdG9yeSBhcmcyLCBEYXRhYmFzZUVycm9ySGFuZGxlciBhcmczKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIERyYXdhYmxlIHBlZWtXYWxscGFwZXIoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEludGVudCByZWdpc3RlclJlY2VpdmVyKEJyb2FkY2FzdFJlY2VpdmVyIGFyZzAsIEludGVudEZpbHRlciBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEludGVudCByZWdpc3RlclJlY2VpdmVyKEJyb2FkY2FzdFJlY2VpdmVyIGFyZzAsIEludGVudEZpbHRlciBhcmcxLAotICAgICAgICAgICAgU3RyaW5nIGFyZzIsIEhhbmRsZXIgYXJnMykgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJbnRlbnQgcmVnaXN0ZXJSZWNlaXZlckFzVXNlcihCcm9hZGNhc3RSZWNlaXZlciBhcmcwLCBVc2VySGFuZGxlIGFyZzBwNSwKLSAgICAgICAgICAgIEludGVudEZpbHRlciBhcmcxLCBTdHJpbmcgYXJnMiwgSGFuZGxlciBhcmczKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlU3RpY2t5QnJvYWRjYXN0KEludGVudCBhcmcwKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJldm9rZVVyaVBlcm1pc3Npb24oVXJpIGFyZzAsIGludCBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlbmRCcm9hZGNhc3QoSW50ZW50IGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VuZEJyb2FkY2FzdChJbnRlbnQgYXJnMCwgU3RyaW5nIGFyZzEpIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VuZEJyb2FkY2FzdChJbnRlbnQgaW50ZW50LCBTdHJpbmcgcmVjZWl2ZXJQZXJtaXNzaW9uLCBpbnQgYXBwT3ApIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlbmRPcmRlcmVkQnJvYWRjYXN0KEludGVudCBhcmcwLCBTdHJpbmcgYXJnMSkgewotICAgICAgICAvLyBwYXNzCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZW5kT3JkZXJlZEJyb2FkY2FzdChJbnRlbnQgYXJnMCwgU3RyaW5nIGFyZzEsCi0gICAgICAgICAgICBCcm9hZGNhc3RSZWNlaXZlciBhcmcyLCBIYW5kbGVyIGFyZzMsIGludCBhcmc0LCBTdHJpbmcgYXJnNSwKLSAgICAgICAgICAgIEJ1bmRsZSBhcmc2KSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlbmRPcmRlcmVkQnJvYWRjYXN0KEludGVudCBpbnRlbnQsIFN0cmluZyByZWNlaXZlclBlcm1pc3Npb24sIGludCBhcHBPcCwKLSAgICAgICAgICAgIEJyb2FkY2FzdFJlY2VpdmVyIHJlc3VsdFJlY2VpdmVyLCBIYW5kbGVyIHNjaGVkdWxlciwgaW50IGluaXRpYWxDb2RlLAotICAgICAgICAgICAgU3RyaW5nIGluaXRpYWxEYXRhLCBCdW5kbGUgaW5pdGlhbEV4dHJhcykgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VuZEJyb2FkY2FzdEFzVXNlcihJbnRlbnQgaW50ZW50LCBVc2VySGFuZGxlIHVzZXIpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlbmRCcm9hZGNhc3RBc1VzZXIoSW50ZW50IGludGVudCwgVXNlckhhbmRsZSB1c2VyLAotICAgICAgICAgICAgU3RyaW5nIHJlY2VpdmVyUGVybWlzc2lvbikgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VuZE9yZGVyZWRCcm9hZGNhc3RBc1VzZXIoSW50ZW50IGludGVudCwgVXNlckhhbmRsZSB1c2VyLAotICAgICAgICAgICAgU3RyaW5nIHJlY2VpdmVyUGVybWlzc2lvbiwgQnJvYWRjYXN0UmVjZWl2ZXIgcmVzdWx0UmVjZWl2ZXIsIEhhbmRsZXIgc2NoZWR1bGVyLAotICAgICAgICAgICAgaW50IGluaXRpYWxDb2RlLCBTdHJpbmcgaW5pdGlhbERhdGEsIEJ1bmRsZSBpbml0aWFsRXh0cmFzKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZW5kU3RpY2t5QnJvYWRjYXN0KEludGVudCBhcmcwKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlbmRTdGlja3lPcmRlcmVkQnJvYWRjYXN0KEludGVudCBpbnRlbnQsCi0gICAgICAgICAgICBCcm9hZGNhc3RSZWNlaXZlciByZXN1bHRSZWNlaXZlciwgSGFuZGxlciBzY2hlZHVsZXIsIGludCBpbml0aWFsQ29kZSwgU3RyaW5nIGluaXRpYWxEYXRhLAotICAgICAgICAgICBCdW5kbGUgaW5pdGlhbEV4dHJhcykgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihJbnRlbnQgaW50ZW50LCBVc2VySGFuZGxlIHVzZXIpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNlbmRTdGlja3lPcmRlcmVkQnJvYWRjYXN0QXNVc2VyKEludGVudCBpbnRlbnQsCi0gICAgICAgICAgICBVc2VySGFuZGxlIHVzZXIsIEJyb2FkY2FzdFJlY2VpdmVyIHJlc3VsdFJlY2VpdmVyLAotICAgICAgICAgICAgSGFuZGxlciBzY2hlZHVsZXIsIGludCBpbml0aWFsQ29kZSwgU3RyaW5nIGluaXRpYWxEYXRhLAotICAgICAgICAgICAgQnVuZGxlIGluaXRpYWxFeHRyYXMpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVN0aWNreUJyb2FkY2FzdEFzVXNlcihJbnRlbnQgaW50ZW50LCBVc2VySGFuZGxlIHVzZXIpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFRoZW1lKGludCBhcmcwKSB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFdhbGxwYXBlcihCaXRtYXAgYXJnMCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0V2FsbHBhcGVyKElucHV0U3RyZWFtIGFyZzApIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHkoSW50ZW50IGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHkoSW50ZW50IGFyZzAsIEJ1bmRsZSBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdGFydEludGVudFNlbmRlcihJbnRlbnRTZW5kZXIgaW50ZW50LAotICAgICAgICAgICAgSW50ZW50IGZpbGxJbkludGVudCwgaW50IGZsYWdzTWFzaywgaW50IGZsYWdzVmFsdWVzLCBpbnQgZXh0cmFGbGFncykKLSAgICAgICAgICAgIHRocm93cyBJbnRlbnRTZW5kZXIuU2VuZEludGVudEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdGFydEludGVudFNlbmRlcihJbnRlbnRTZW5kZXIgaW50ZW50LAotICAgICAgICAgICAgSW50ZW50IGZpbGxJbkludGVudCwgaW50IGZsYWdzTWFzaywgaW50IGZsYWdzVmFsdWVzLCBpbnQgZXh0cmFGbGFncywKLSAgICAgICAgICAgIEJ1bmRsZSBvcHRpb25zKSB0aHJvd3MgSW50ZW50U2VuZGVyLlNlbmRJbnRlbnRFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc3RhcnRJbnN0cnVtZW50YXRpb24oQ29tcG9uZW50TmFtZSBhcmcwLCBTdHJpbmcgYXJnMSwKLSAgICAgICAgICAgIEJ1bmRsZSBhcmcyKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb21wb25lbnROYW1lIHN0YXJ0U2VydmljZShJbnRlbnQgYXJnMCkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHN0b3BTZXJ2aWNlKEludGVudCBhcmcwKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb21wb25lbnROYW1lIHN0YXJ0U2VydmljZUFzVXNlcihJbnRlbnQgYXJnMCwgVXNlckhhbmRsZSBhcmcxKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc3RvcFNlcnZpY2VBc1VzZXIoSW50ZW50IGFyZzAsIFVzZXJIYW5kbGUgYXJnMSkgewotICAgICAgICAvLyBwYXNzCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1bmJpbmRTZXJ2aWNlKFNlcnZpY2VDb25uZWN0aW9uIGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdW5yZWdpc3RlclJlY2VpdmVyKEJyb2FkY2FzdFJlY2VpdmVyIGFyZzApIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRleHQgZ2V0QXBwbGljYXRpb25Db250ZXh0KCkgewotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXRpZXMoSW50ZW50W10gYXJnMCkgewotICAgICAgICAvLyBwYXNzCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXRpZXMoSW50ZW50W10gYXJnMCwgQnVuZGxlIGFyZzEpIHsKLSAgICAgICAgLy8gcGFzcwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNSZXN0cmljdGVkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZpbGUgZ2V0T2JiRGlyKCkgewotICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19VTlNVUFBPUlRFRCwgIk9CQiBub3Qgc3VwcG9ydGVkIiwgbnVsbCk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBEaXNwbGF5QWRqdXN0bWVudHMgZ2V0RGlzcGxheUFkanVzdG1lbnRzKGludCBkaXNwbGF5SWQpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0VXNlcklkKCkgewotICAgICAgICByZXR1cm4gMDsgLy8gbm90IHVzZWQKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmlsZVtdIGdldEV4dGVybmFsRmlsZXNEaXJzKFN0cmluZyB0eXBlKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG5ldyBGaWxlWzBdOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBGaWxlW10gZ2V0T2JiRGlycygpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbmV3IEZpbGVbMF07Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEZpbGVbXSBnZXRFeHRlcm5hbENhY2hlRGlycygpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbmV3IEZpbGVbMF07Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZUlJbnB1dE1ldGhvZE1hbmFnZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VJSW5wdXRNZXRob2RNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZjVlZDUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZUlJbnB1dE1ldGhvZE1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQ7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3LklJbnB1dENvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5JSW5wdXRNZXRob2RDbGllbnQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5JSW5wdXRNZXRob2RNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcuSW5wdXRCaW5kUmVzdWx0OwotCi1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuUmVzdWx0UmVjZWl2ZXI7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLlN1Z2dlc3Rpb25TcGFuOwotaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5FZGl0b3JJbmZvOwotaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZEluZm87Ci1pbXBvcnQgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEJhc2ljIGltcGxlbWVudGF0aW9uIG9mIElJbnB1dE1ldGhvZE1hbmFnZXIgdGhhdCBkb2VzIG5vdGhpbmcuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQnJpZGdlSUlucHV0TWV0aG9kTWFuYWdlciBpbXBsZW1lbnRzIElJbnB1dE1ldGhvZE1hbmFnZXIgewotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWRkQ2xpZW50KElJbnB1dE1ldGhvZENsaWVudCBhcmcwLCBJSW5wdXRDb250ZXh0IGFyZzEsIGludCBhcmcyLCBpbnQgYXJnMykKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBmaW5pc2hJbnB1dChJSW5wdXRNZXRob2RDbGllbnQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJbnB1dE1ldGhvZFN1YnR5cGUgZ2V0Q3VycmVudElucHV0TWV0aG9kU3VidHlwZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PElucHV0TWV0aG9kSW5mbz4gZ2V0RW5hYmxlZElucHV0TWV0aG9kTGlzdCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4gZ2V0RW5hYmxlZElucHV0TWV0aG9kU3VidHlwZUxpc3QoU3RyaW5nIGFyZzAsCi0gICAgICAgICAgICBib29sZWFuIGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PElucHV0TWV0aG9kSW5mbz4gZ2V0SW5wdXRNZXRob2RMaXN0KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElucHV0TWV0aG9kU3VidHlwZSBnZXRMYXN0SW5wdXRNZXRob2RTdWJ0eXBlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3QgZ2V0U2hvcnRjdXRJbnB1dE1ldGhvZHNBbmRTdWJ0eXBlcygpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGhpZGVNeVNvZnRJbnB1dChJQmluZGVyIGFyZzAsIGludCBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaGlkZVNvZnRJbnB1dChJSW5wdXRNZXRob2RDbGllbnQgYXJnMCwgaW50IGFyZzEsIFJlc3VsdFJlY2VpdmVyIGFyZzIpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gbm90aWZ5U3VnZ2VzdGlvblBpY2tlZChTdWdnZXN0aW9uU3BhbiBhcmcwLCBTdHJpbmcgYXJnMSwgaW50IGFyZzIpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVnaXN0ZXJTdWdnZXN0aW9uU3BhbnNGb3JOb3RpZmljYXRpb24oU3VnZ2VzdGlvblNwYW5bXSBhcmcwKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUNsaWVudChJSW5wdXRNZXRob2RDbGllbnQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFkZGl0aW9uYWxJbnB1dE1ldGhvZFN1YnR5cGVzKFN0cmluZyBhcmcwLCBJbnB1dE1ldGhvZFN1YnR5cGVbXSBhcmcxKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRDdXJyZW50SW5wdXRNZXRob2RTdWJ0eXBlKElucHV0TWV0aG9kU3VidHlwZSBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0SW1lV2luZG93U3RhdHVzKElCaW5kZXIgYXJnMCwgaW50IGFyZzEsIGludCBhcmcyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0SW5wdXRNZXRob2QoSUJpbmRlciBhcmcwLCBTdHJpbmcgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldElucHV0TWV0aG9kQW5kU3VidHlwZShJQmluZGVyIGFyZzAsIFN0cmluZyBhcmcxLCBJbnB1dE1ldGhvZFN1YnR5cGUgYXJnMikKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRJbnB1dE1ldGhvZEVuYWJsZWQoU3RyaW5nIGFyZzAsIGJvb2xlYW4gYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNob3dJbnB1dE1ldGhvZEFuZFN1YnR5cGVFbmFibGVyRnJvbUNsaWVudChJSW5wdXRNZXRob2RDbGllbnQgYXJnMCwgU3RyaW5nIGFyZzEpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2hvd0lucHV0TWV0aG9kUGlja2VyRnJvbUNsaWVudChJSW5wdXRNZXRob2RDbGllbnQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNob3dNeVNvZnRJbnB1dChJQmluZGVyIGFyZzAsIGludCBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc2hvd1NvZnRJbnB1dChJSW5wdXRNZXRob2RDbGllbnQgYXJnMCwgaW50IGFyZzEsIFJlc3VsdFJlY2VpdmVyIGFyZzIpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElucHV0QmluZFJlc3VsdCBzdGFydElucHV0KElJbnB1dE1ldGhvZENsaWVudCBjbGllbnQsIElJbnB1dENvbnRleHQgaW5wdXRDb250ZXh0LAotICAgICAgICAgICAgRWRpdG9ySW5mbyBhdHRyaWJ1dGUsIGludCBjb250cm9sRmxhZ3MpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHN3aXRjaFRvTGFzdElucHV0TWV0aG9kKElCaW5kZXIgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBzd2l0Y2hUb05leHRJbnB1dE1ldGhvZChJQmluZGVyIGFyZzAsIGJvb2xlYW4gYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBzaG91bGRPZmZlclN3aXRjaGluZ1RvTmV4dElucHV0TWV0aG9kKElCaW5kZXIgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVN0YXR1c0ljb24oSUJpbmRlciBhcmcwLCBTdHJpbmcgYXJnMSwgaW50IGFyZzIpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSW5wdXRCaW5kUmVzdWx0IHdpbmRvd0dhaW5lZEZvY3VzKElJbnB1dE1ldGhvZENsaWVudCBjbGllbnQsIElCaW5kZXIgd2luZG93VG9rZW4sCi0gICAgICAgICAgICBpbnQgY29udHJvbEZsYWdzLCBpbnQgc29mdElucHV0TW9kZSwgaW50IHdpbmRvd0ZsYWdzLCBFZGl0b3JJbmZvIGF0dHJpYnV0ZSwKLSAgICAgICAgICAgIElJbnB1dENvbnRleHQgaW5wdXRDb250ZXh0KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSUJpbmRlciBhc0JpbmRlcigpIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlTGF5b3V0UGFyYW1zTWFwQXR0cmlidXRlcy5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZUxheW91dFBhcmFtc01hcEF0dHJpYnV0ZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU5MTJlNy4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlTGF5b3V0UGFyYW1zTWFwQXR0cmlidXRlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlQ29uc3RhbnRzOwotCi1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBBdHRyaWJ1dGVTZXR9IGludGVyZmFjZSBvbiB0b3Agb2YgYSBtYXAgb2YgYXR0cmlidXRlIGluIHRoZSBmb3JtCi0gKiBvZiAobmFtZSwgdmFsdWUpLgotICoKLSAqIFRoaXMgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIG9ubHkgZnJvbSB7QGxpbmsgQnJpZGdlQ29udGV4dCNvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKEF0dHJpYnV0ZVNldCwgaW50W10sIGludCwgaW50KX0KLSAqIGluIHRoZSBjYXNlIG9mIExheW91dFBhcmFtcyBhbmQgdGhlcmVmb3JlIGlzbid0IGEgZnVsbCBpbXBsZW1lbnRhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEJyaWRnZUxheW91dFBhcmFtc01hcEF0dHJpYnV0ZXMgaW1wbGVtZW50cyBBdHRyaWJ1dGVTZXQgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IG1BdHRyaWJ1dGVzOwotCi0gICAgcHVibGljIEJyaWRnZUxheW91dFBhcmFtc01hcEF0dHJpYnV0ZXMoTWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJ1dGVzKSB7Ci0gICAgICAgIG1BdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldEF0dHJpYnV0ZVZhbHVlKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIGlmIChCcmlkZ2VDb25zdGFudHMuTlNfUkVTT1VSQ0VTLmVxdWFscyhuYW1lc3BhY2UpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUF0dHJpYnV0ZXMuZ2V0KG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLy8gLS0tLSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIG5vdCBjYWxsZWQgZnJvbQotICAgIC8vIEJyaWRnZUNvbnRleHQjb2J0YWluU3R5bGVkQXR0cmlidXRlcyhBdHRyaWJ1dGVTZXQsIGludFtdLCBpbnQsIGludCkKLSAgICAvLyBTaG91bGQgdGhleSBldmVyIGJlIGNhbGxlZCwgd2UnbGwganVzdCBpbXBsZW1lbnQgdGhlbSBvbiBhIG5lZWQgYmFzaXMuCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZUNvdW50KCkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldEF0dHJpYnV0ZU5hbWUoaW50IGluZGV4KSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVmFsdWUoaW50IGluZGV4KSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9zaXRpb25EZXNjcmlwdGlvbigpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVOYW1lUmVzb3VyY2UoaW50IGluZGV4KSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlTGlzdFZhbHVlKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBhdHRyaWJ1dGUsCi0gICAgICAgICAgICBTdHJpbmdbXSBvcHRpb25zLCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGdldEF0dHJpYnV0ZUJvb2xlYW5WYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLAotICAgICAgICAgICAgYm9vbGVhbiBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVSZXNvdXJjZVZhbHVlKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBhdHRyaWJ1dGUsCi0gICAgICAgICAgICBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlSW50VmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwKLSAgICAgICAgICAgIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVVbnNpZ25lZEludFZhbHVlKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBhdHRyaWJ1dGUsCi0gICAgICAgICAgICBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmbG9hdCBnZXRBdHRyaWJ1dGVGbG9hdFZhbHVlKFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBhdHRyaWJ1dGUsCi0gICAgICAgICAgICBmbG9hdCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVMaXN0VmFsdWUoaW50IGluZGV4LAotICAgICAgICAgICAgU3RyaW5nW10gb3B0aW9ucywgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRBdHRyaWJ1dGVCb29sZWFuVmFsdWUoaW50IGluZGV4LCBib29sZWFuIGRlZmF1bHRWYWx1ZSkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZVJlc291cmNlVmFsdWUoaW50IGluZGV4LCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlSW50VmFsdWUoaW50IGluZGV4LCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlVW5zaWduZWRJbnRWYWx1ZShpbnQgaW5kZXgsIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldEF0dHJpYnV0ZUZsb2F0VmFsdWUoaW50IGluZGV4LCBmbG9hdCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRJZEF0dHJpYnV0ZSgpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRDbGFzc0F0dHJpYnV0ZSgpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRJZEF0dHJpYnV0ZVJlc291cmNlVmFsdWUoaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFN0eWxlQXR0cmlidXRlKCkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlUG93ZXJNYW5hZ2VyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlUG93ZXJNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MTMzN2MuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZVBvd2VyTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZDsKLQotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklQb3dlck1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5Xb3JrU291cmNlOwotCi0vKioKLSAqIEZha2UgaW1wbGVtZW50YXRpb24gb2YgSVBvd2VyTWFuYWdlci4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBCcmlkZ2VQb3dlck1hbmFnZXIgaW1wbGVtZW50cyBJUG93ZXJNYW5hZ2VyIHsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU2NyZWVuT24oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElCaW5kZXIgYXNCaW5kZXIoKSB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWNxdWlyZVdha2VMb2NrKElCaW5kZXIgYXJnMCwgaW50IGFyZzEsIFN0cmluZyBhcmcyLCBTdHJpbmcgYXJnMl81LCBXb3JrU291cmNlIGFyZzMpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGFjcXVpcmVXYWtlTG9ja1dpdGhVaWQoSUJpbmRlciBhcmcwLCBpbnQgYXJnMSwgU3RyaW5nIGFyZzIsIFN0cmluZyBhcmcyXzUsIGludCBhcmczKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjcmFzaChTdHJpbmcgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBnb1RvU2xlZXAobG9uZyBhcmcwLCBpbnQgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBuYXAobG9uZyBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlYm9vdChib29sZWFuIGNvbmZpcm0sIFN0cmluZyByZWFzb24sIGJvb2xlYW4gd2FpdCkgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2h1dGRvd24oYm9vbGVhbiBjb25maXJtLCBib29sZWFuIHdhaXQpIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VXYWtlTG9jayhJQmluZGVyIGFyZzAsIGludCBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVdha2VMb2NrVWlkcyhJQmluZGVyIGFyZzAsIGludFtdIGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0QXR0ZW50aW9uTGlnaHQoYm9vbGVhbiBhcmcwLCBpbnQgYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRUZW1wb3JhcnlTY3JlZW5BdXRvQnJpZ2h0bmVzc0FkanVzdG1lbnRTZXR0aW5nT3ZlcnJpZGUoZmxvYXQgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRUZW1wb3JhcnlTY3JlZW5CcmlnaHRuZXNzU2V0dGluZ092ZXJyaWRlKGludCBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldE1heGltdW1TY3JlZW5PZmZUaW1lb3V0RnJvbURldmljZUFkbWluKGludCBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFN0YXlPblNldHRpbmcoaW50IGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdXBkYXRlV2FrZUxvY2tXb3JrU291cmNlKElCaW5kZXIgYXJnMCwgV29ya1NvdXJjZSBhcmcxKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzV2FrZUxvY2tMZXZlbFN1cHBvcnRlZChpbnQgbGV2ZWwpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHVzZXJBY3Rpdml0eShsb25nIHRpbWUsIGludCBldmVudCwgaW50IGZsYWdzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdha2VVcChsb25nIHRpbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZVdpbmRvdy5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZVdpbmRvdy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjU3NmQyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VXaW5kb3cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQ7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQudmlldy5EcmFnRXZlbnQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3c7Ci0KLS8qKgotICogSW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIElXaW5kb3d9IHRvIHBhc3MgdG8gdGhlIEF0dGFjaEluZm8uCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBCcmlkZ2VXaW5kb3cgaW1wbGVtZW50cyBJV2luZG93IHsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoQXBwVmlzaWJpbGl0eShib29sZWFuIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGlzcGF0Y2hHZXROZXdTdXJmYWNlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBleGVjdXRlQ29tbWFuZChTdHJpbmcgYXJnMCwgU3RyaW5nIGFyZzEsIFBhcmNlbEZpbGVEZXNjcmlwdG9yIGFyZzIpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlc2l6ZWQoUmVjdCBhcmcxLCBSZWN0IGFyZzFwNSwgUmVjdCBhcmcyLCBSZWN0IGFyZzMsCi0gICAgICAgICAgICBib29sZWFuIGFyZzQsIENvbmZpZ3VyYXRpb24gYXJnNSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBtb3ZlZChpbnQgYXJnMCwgaW50IGFyZzEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGlzcGF0Y2hTY3JlZW5TdGF0ZShib29sZWFuIG9uKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdlZChib29sZWFuIGFyZzAsIGJvb2xlYW4gYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaFdhbGxwYXBlck9mZnNldHMoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeFN0ZXAsIGZsb2F0IHlTdGVwLAotICAgICAgICAgICAgYm9vbGVhbiBzeW5jKSB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaFdhbGxwYXBlckNvbW1hbmQoU3RyaW5nIGFjdGlvbiwgaW50IHgsIGludCB5LAotICAgICAgICAgICAgaW50IHosIEJ1bmRsZSBleHRyYXMsIGJvb2xlYW4gc3luYykgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xvc2VTeXN0ZW1EaWFsb2dzKFN0cmluZyByZWFzb24pIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoRHJhZ0V2ZW50KERyYWdFdmVudCBldmVudCkgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGlzcGF0Y2hTeXN0ZW1VaVZpc2liaWxpdHlDaGFuZ2VkKGludCBzZXEsIGludCBnbG9iYWxVaSwKLSAgICAgICAgICAgIGludCBsb2NhbFZhbHVlLCBpbnQgbG9jYWxDaGFuZ2VzKSB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBkb25lQW5pbWF0aW5nKCkgewotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJQmluZGVyIGFzQmluZGVyKCkgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VXaW5kb3dTZXNzaW9uLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlV2luZG93U2Vzc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWU2ODc4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VXaW5kb3dTZXNzaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNsaXBEYXRhOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWdpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQudmlldy5JV2luZG93OwotaW1wb3J0IGFuZHJvaWQudmlldy5JV2luZG93SWQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dTZXNzaW9uOwotaW1wb3J0IGFuZHJvaWQudmlldy5JbnB1dENoYW5uZWw7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VWaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtczsKLQotLyoqCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgSVdpbmRvd1Nlc3Npb259IHNvIHRoYXQgbVNlc3Npb24gaXMgbm90IG51bGwgaW4KLSAqIHRoZSB7QGxpbmsgU3VyZmFjZVZpZXd9LgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQnJpZGdlV2luZG93U2Vzc2lvbiBpbXBsZW1lbnRzIElXaW5kb3dTZXNzaW9uIHsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgYWRkKElXaW5kb3cgYXJnMCwgaW50IHNlcSwgTGF5b3V0UGFyYW1zIGFyZzEsIGludCBhcmcyLCBSZWN0IGFyZzMsCi0gICAgICAgICAgICBJbnB1dENoYW5uZWwgb3V0SW5wdXRjaGFubmVsKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBhZGRUb0Rpc3BsYXkoSVdpbmRvdyBhcmcwLCBpbnQgc2VxLCBMYXlvdXRQYXJhbXMgYXJnMSwgaW50IGFyZzIsIGludCBkaXNwbGF5SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjdCBhcmczLCBJbnB1dENoYW5uZWwgb3V0SW5wdXRjaGFubmVsKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBhZGRXaXRob3V0SW5wdXRDaGFubmVsKElXaW5kb3cgYXJnMCwgaW50IHNlcSwgTGF5b3V0UGFyYW1zIGFyZzEsIGludCBhcmcyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWN0IGFyZzMpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGFkZFRvRGlzcGxheVdpdGhvdXRJbnB1dENoYW5uZWwoSVdpbmRvdyBhcmcwLCBpbnQgc2VxLCBMYXlvdXRQYXJhbXMgYXJnMSwgaW50IGFyZzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXNwbGF5SWQsIFJlY3QgYXJnMykKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGZpbmlzaERyYXdpbmcoSVdpbmRvdyBhcmcwKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGdldEluVG91Y2hNb2RlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHBlcmZvcm1IYXB0aWNGZWVkYmFjayhJV2luZG93IHdpbmRvdywgaW50IGVmZmVjdElkLCBib29sZWFuIGFsd2F5cykgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCByZWxheW91dChJV2luZG93IGFyZzAsIGludCBzZXEsIExheW91dFBhcmFtcyBhcmcxLCBpbnQgYXJnMiwgaW50IGFyZzMsIGludCBhcmc0LAotICAgICAgICAgICAgaW50IGFyZzRfNSwgUmVjdCBhcmc1WiwgUmVjdCBhcmc1LCBSZWN0IGFyZzYsIFJlY3QgYXJnNywgQ29uZmlndXJhdGlvbiBhcmc3YiwKLSAgICAgICAgICAgIFN1cmZhY2UgYXJnOCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcGVyZm9ybURlZmVycmVkRGVzdHJveShJV2luZG93IHdpbmRvdykgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gb3V0T2ZNZW1vcnkoSVdpbmRvdyB3aW5kb3cpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0RGlzcGxheUZyYW1lKElXaW5kb3cgd2luZG93LCBSZWN0IG91dERpc3BsYXlGcmFtZSkgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlKElXaW5kb3cgYXJnMCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRJblRvdWNoTW9kZShib29sZWFuIGFyZzApIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0VHJhbnNwYXJlbnRSZWdpb24oSVdpbmRvdyBhcmcwLCBSZWdpb24gYXJnMSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRJbnNldHMoSVdpbmRvdyB3aW5kb3csIGludCB0b3VjaGFibGUsIFJlY3QgY29udGVudEluc2V0cywKLSAgICAgICAgICAgIFJlY3QgdmlzaWJsZUluc2V0cywgUmVnaW9uIHRvdWNoYWJsZVJlZ2lvbikgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElCaW5kZXIgcHJlcGFyZURyYWcoSVdpbmRvdyB3aW5kb3csIGludCBmbGFncywKLSAgICAgICAgICAgIGludCB0aHVtYm5haWxXaWR0aCwgaW50IHRodW1ibmFpbEhlaWdodCwgU3VyZmFjZSBvdXRTdXJmYWNlKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRHJhZyhJV2luZG93IHdpbmRvdywgSUJpbmRlciBkcmFnVG9rZW4sCi0gICAgICAgICAgICBmbG9hdCB0b3VjaFgsIGZsb2F0IHRvdWNoWSwgZmxvYXQgdGh1bWJDZW50ZXJYLCBmbG9hdCB0aHVtYkNlbnRlclksCi0gICAgICAgICAgICBDbGlwRGF0YSBkYXRhKQotICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVwb3J0RHJvcFJlc3VsdChJV2luZG93IHdpbmRvdywgYm9vbGVhbiBjb25zdW1lZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRyYWdSZWNpcGllbnRFbnRlcmVkKElXaW5kb3cgd2luZG93KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZHJhZ1JlY2lwaWVudEV4aXRlZChJV2luZG93IHdpbmRvdykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFdhbGxwYXBlclBvc2l0aW9uKElCaW5kZXIgd2luZG93LCBmbG9hdCB4LCBmbG9hdCB5LAotICAgICAgICBmbG9hdCB4U3RlcCwgZmxvYXQgeVN0ZXApIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdhbGxwYXBlck9mZnNldHNDb21wbGV0ZShJQmluZGVyIHdpbmRvdykgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ1bmRsZSBzZW5kV2FsbHBhcGVyQ29tbWFuZChJQmluZGVyIHdpbmRvdywgU3RyaW5nIGFjdGlvbiwgaW50IHgsIGludCB5LAotICAgICAgICAgICAgaW50IHosIEJ1bmRsZSBleHRyYXMsIGJvb2xlYW4gc3luYykgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdhbGxwYXBlckNvbW1hbmRDb21wbGV0ZShJQmluZGVyIHdpbmRvdywgQnVuZGxlIHJlc3VsdCkgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0VW5pdmVyc2VUcmFuc2Zvcm0oSUJpbmRlciB3aW5kb3csIGZsb2F0IGFscGhhLCBmbG9hdCBvZmZ4LCBmbG9hdCBvZmZ5LAotICAgICAgICAgICAgZmxvYXQgZHNkeCwgZmxvYXQgZHRkeCwgZmxvYXQgZHNkeSwgZmxvYXQgZHRkeSkgewotICAgICAgICAvLyBwYXNzIGZvciBub3cuCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElCaW5kZXIgYXNCaW5kZXIoKSB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25SZWN0YW5nbGVPblNjcmVlblJlcXVlc3RlZChJQmluZGVyIHdpbmRvdywgUmVjdCByZWN0YW5nbGUsIGJvb2xlYW4gaW1tZWRpYXRlKSB7Ci0gICAgICAgIC8vIHBhc3MgZm9yIG5vdy4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSVdpbmRvd0lkIGdldFdpbmRvd0lkKElCaW5kZXIgd2luZG93KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gcGFzcyBmb3Igbm93LgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlWG1sQmxvY2tQYXJzZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VYbWxCbG9ja1BhcnNlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzg3MTJlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VYbWxCbG9ja1BhcnNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZDsKLQotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklMYXlvdXRQdWxsUGFyc2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5QYXJzZXJGYWN0b3J5OwotCi1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5YbWxSZXNvdXJjZVBhcnNlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5CcmlkZ2VYbWxQdWxsQXR0cmlidXRlczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLQotLyoqCi0gKiB7QGxpbmsgQnJpZGdlWG1sQmxvY2tQYXJzZXJ9IHJlaW1wbGVtZW50cyBtb3N0IG9mIGFuZHJvaWQueG1sLlhtbEJsb2NrLlBhcnNlci4KLSAqIEl0IGRlbGVnYXRlcyB0byBib3RoIGFuIGluc3RhbmNlIG9mIHtAbGluayBYbWxQdWxsUGFyc2VyfSBhbmQgYW4gaW5zdGFuY2Ugb2YKLSAqIFhtbFB1bGxBdHRyaWJ1dGVzIChmb3IgdGhlIHtAbGluayBBdHRyaWJ1dGVTZXR9IHBhcnQpLgotICovCi1wdWJsaWMgY2xhc3MgQnJpZGdlWG1sQmxvY2tQYXJzZXIgaW1wbGVtZW50cyBYbWxSZXNvdXJjZVBhcnNlciB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFhtbFB1bGxQYXJzZXIgbVBhcnNlcjsKLSAgICBwcml2YXRlIGZpbmFsIEJyaWRnZVhtbFB1bGxBdHRyaWJ1dGVzIG1BdHRyaWI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBCcmlkZ2VDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtUGxhdGZvcm1GaWxlOwotCi0gICAgcHJpdmF0ZSBib29sZWFuIG1TdGFydGVkID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSBpbnQgbUV2ZW50VHlwZSA9IFNUQVJUX0RPQ1VNRU5UOwotCi0gICAgcHJpdmF0ZSBib29sZWFuIG1Qb3BwZWQgPSB0cnVlOyAvLyBkZWZhdWx0IHRvIHRydWUgaW4gY2FzZSBpdCdzIG5vdCBwdXNoZWQuCi0KLSAgICAvKioKLSAgICAgKiBCdWlsZHMgYSB7QGxpbmsgQnJpZGdlWG1sQmxvY2tQYXJzZXJ9LgotICAgICAqIEBwYXJhbSBwYXJzZXIgVGhlIFhtbFB1bGxQYXJzZXIgdG8gZ2V0IHRoZSBjb250ZW50IGZyb20uCi0gICAgICogQHBhcmFtIGNvbnRleHQgdGhlIENvbnRleHQuCi0gICAgICogQHBhcmFtIHBsYXRmb3JtRmlsZSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGhlIGZpbGUgaXMgYSBwbGF0Zm9ybSBmaWxlIG9yIG5vdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQnJpZGdlWG1sQmxvY2tQYXJzZXIoWG1sUHVsbFBhcnNlciBwYXJzZXIsIEJyaWRnZUNvbnRleHQgY29udGV4dCwgYm9vbGVhbiBwbGF0Zm9ybUZpbGUpIHsKLSAgICAgICAgaWYgKFBhcnNlckZhY3RvcnkuTE9HX1BBUlNFUikgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDUlRFICIgKyBwYXJzZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtUGFyc2VyID0gcGFyc2VyOwotICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIG1QbGF0Zm9ybUZpbGUgPSBwbGF0Zm9ybUZpbGU7Ci0gICAgICAgIG1BdHRyaWIgPSBuZXcgQnJpZGdlWG1sUHVsbEF0dHJpYnV0ZXMocGFyc2VyLCBjb250ZXh0LCBtUGxhdGZvcm1GaWxlKTsKLQotICAgICAgICBpZiAobUNvbnRleHQgIT0gbnVsbCkgewotICAgICAgICAgICAgbUNvbnRleHQucHVzaFBhcnNlcih0aGlzKTsKLSAgICAgICAgICAgIG1Qb3BwZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBYbWxQdWxsUGFyc2VyIGdldFBhcnNlcigpIHsKLSAgICAgICAgcmV0dXJuIG1QYXJzZXI7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNQbGF0Zm9ybUZpbGUoKSB7Ci0gICAgICAgIHJldHVybiBtUGxhdGZvcm1GaWxlOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0Vmlld0Nvb2tpZSgpIHsKLSAgICAgICAgaWYgKG1QYXJzZXIgaW5zdGFuY2VvZiBJTGF5b3V0UHVsbFBhcnNlcikgewotICAgICAgICAgICAgcmV0dXJuICgoSUxheW91dFB1bGxQYXJzZXIpbVBhcnNlcikuZ2V0Vmlld0Nvb2tpZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZW5zdXJlUG9wcGVkKCkgewotICAgICAgICBpZiAobUNvbnRleHQgIT0gbnVsbCAmJiBtUG9wcGVkID09IGZhbHNlKSB7Ci0gICAgICAgICAgICBtQ29udGV4dC5wb3BQYXJzZXIoKTsKLSAgICAgICAgICAgIG1Qb3BwZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLSBYbWxSZXNvdXJjZVBhcnNlciBpbXBsZW1lbnRhdGlvbgotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0RmVhdHVyZShTdHJpbmcgbmFtZSwgYm9vbGVhbiBzdGF0ZSkKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKEZFQVRVUkVfUFJPQ0VTU19OQU1FU1BBQ0VTLmVxdWFscyhuYW1lKSAmJiBzdGF0ZSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChGRUFUVVJFX1JFUE9SVF9OQU1FU1BBQ0VfQVRUUklCVVRFUy5lcXVhbHMobmFtZSkgJiYgc3RhdGUpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgZmVhdHVyZTogIiArIG5hbWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGdldEZlYXR1cmUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgaWYgKEZFQVRVUkVfUFJPQ0VTU19OQU1FU1BBQ0VTLmVxdWFscyhuYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKEZFQVRVUkVfUkVQT1JUX05BTUVTUEFDRV9BVFRSSUJVVEVTLmVxdWFscyhuYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5KFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oInNldFByb3BlcnR5KCkgbm90IHN1cHBvcnRlZCIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHkoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0SW5wdXQoUmVhZGVyIGluKSB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiB7Ci0gICAgICAgIG1QYXJzZXIuc2V0SW5wdXQoaW4pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldElucHV0KElucHV0U3RyZWFtIGlucHV0U3RyZWFtLCBTdHJpbmcgaW5wdXRFbmNvZGluZykKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgbVBhcnNlci5zZXRJbnB1dChpbnB1dFN0cmVhbSwgaW5wdXRFbmNvZGluZyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGVmaW5lRW50aXR5UmVwbGFjZW1lbnRUZXh0KFN0cmluZyBlbnRpdHlOYW1lLAotICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VtZW50VGV4dCkgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBuZXcgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiZGVmaW5lRW50aXR5UmVwbGFjZW1lbnRUZXh0KCkgbm90IHN1cHBvcnRlZCIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlUHJlZml4KGludCBwb3MpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oImdldE5hbWVzcGFjZVByZWZpeCgpIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldElucHV0RW5jb2RpbmcoKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlKFN0cmluZyBwcmVmaXgpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImdldE5hbWVzcGFjZSgpIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldE5hbWVzcGFjZUNvdW50KGludCBkZXB0aCkgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBuZXcgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbigiZ2V0TmFtZXNwYWNlQ291bnQoKSBub3Qgc3VwcG9ydGVkIik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQb3NpdGlvbkRlc2NyaXB0aW9uKCkgewotICAgICAgICByZXR1cm4gIkJpbmFyeSBYTUwgZmlsZSBsaW5lICMiICsgZ2V0TGluZU51bWJlcigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVXJpKGludCBwb3MpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oImdldE5hbWVzcGFjZVVyaSgpIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldENvbHVtbk51bWJlcigpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0RGVwdGgoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyc2VyLmdldERlcHRoKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotICAgICAgICByZXR1cm4gbVBhcnNlci5nZXRUZXh0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkgewotICAgICAgICByZXR1cm4gbVBhcnNlci5nZXRMaW5lTnVtYmVyKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRFdmVudFR5cGUoKSB7Ci0gICAgICAgIHJldHVybiBtRXZlbnRUeXBlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzV2hpdGVzcGFjZSgpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gT3JpZ2luYWwgY29tbWVudDogd2hpdGVzcGFjZSB3YXMgc3RyaXBwZWQgYnkgYWFwdC4KLSAgICAgICAgcmV0dXJuIG1QYXJzZXIuaXNXaGl0ZXNwYWNlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQcmVmaXgoKSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJnZXRQcmVmaXggbm90IHN1cHBvcnRlZCIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBjaGFyW10gZ2V0VGV4dENoYXJhY3RlcnMoaW50W10gaG9sZGVyRm9yU3RhcnRBbmRMZW5ndGgpIHsKLSAgICAgICAgU3RyaW5nIHR4dCA9IGdldFRleHQoKTsKLSAgICAgICAgY2hhcltdIGNoYXJzID0gbnVsbDsKLSAgICAgICAgaWYgKHR4dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBob2xkZXJGb3JTdGFydEFuZExlbmd0aFswXSA9IDA7Ci0gICAgICAgICAgICBob2xkZXJGb3JTdGFydEFuZExlbmd0aFsxXSA9IHR4dC5sZW5ndGgoKTsKLSAgICAgICAgICAgIGNoYXJzID0gbmV3IGNoYXJbdHh0Lmxlbmd0aCgpXTsKLSAgICAgICAgICAgIHR4dC5nZXRDaGFycygwLCB0eHQubGVuZ3RoKCksIGNoYXJzLCAwKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY2hhcnM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyc2VyLmdldE5hbWVzcGFjZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIG1QYXJzZXIuZ2V0TmFtZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlTmFtZXNwYWNlKGludCBpbmRleCkgewotICAgICAgICByZXR1cm4gbVBhcnNlci5nZXRBdHRyaWJ1dGVOYW1lc3BhY2UoaW5kZXgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlTmFtZShpbnQgaW5kZXgpIHsKLSAgICAgICAgcmV0dXJuIG1QYXJzZXIuZ2V0QXR0cmlidXRlTmFtZShpbmRleCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRBdHRyaWJ1dGVQcmVmaXgoaW50IGluZGV4KSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJnZXRBdHRyaWJ1dGVQcmVmaXggbm90IHN1cHBvcnRlZCIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzRW1wdHlFbGVtZW50VGFnKCkgewotICAgICAgICAvLyBYWFggTmVlZCB0byBkZXRlY3QgdGhpcy4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyc2VyLmdldEF0dHJpYnV0ZUNvdW50KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRBdHRyaWJ1dGVWYWx1ZShpbnQgaW5kZXgpIHsKLSAgICAgICAgcmV0dXJuIG1QYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUoaW5kZXgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVHlwZShpbnQgaW5kZXgpIHsKLSAgICAgICAgcmV0dXJuICJDREFUQSI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNBdHRyaWJ1dGVEZWZhdWx0KGludCBpbmRleCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBuZXh0VG9rZW4oKSB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbmV4dCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgcmV0dXJuIG1QYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobmFtZXNwYWNlLCBuYW1lKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IG5leHQoKSB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICBpZiAoIW1TdGFydGVkKSB7Ci0gICAgICAgICAgICBtU3RhcnRlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGlmIChQYXJzZXJGYWN0b3J5LkxPR19QQVJTRVIpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNUUlQgIiArIG1QYXJzZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBTVEFSVF9ET0NVTUVOVDsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBldiA9IG1QYXJzZXIubmV4dCgpOwotCi0gICAgICAgIGlmIChQYXJzZXJGYWN0b3J5LkxPR19QQVJTRVIpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTkVYVCAiICsgbVBhcnNlci50b1N0cmluZygpICsgIiAiICsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlVG9TdHJpbmcobUV2ZW50VHlwZSkgKyAiIC0+ICIgKyBldmVudFR5cGVUb1N0cmluZyhldikpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV2ID09IEVORF9UQUcgJiYgbVBhcnNlci5nZXREZXB0aCgpID09IDEpIHsKLSAgICAgICAgICAgIC8vIGRvbmUgd2l0aCBwYXJzZXIgcmVtb3ZlIGl0IGZyb20gdGhlIGNvbnRleHQgc3RhY2suCi0gICAgICAgICAgICBlbnN1cmVQb3BwZWQoKTsKLQotICAgICAgICAgICAgaWYgKFBhcnNlckZhY3RvcnkuTE9HX1BBUlNFUikgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtRXZlbnRUeXBlID0gZXY7Ci0gICAgICAgIHJldHVybiBldjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBldmVudFR5cGVUb1N0cmluZyhpbnQgZXZlbnRUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFNUQVJUX0RPQ1VNRU5UOgotICAgICAgICAgICAgICAgIHJldHVybiAiU1RBUlRfRE9DIjsKLSAgICAgICAgICAgIGNhc2UgRU5EX0RPQ1VNRU5UOgotICAgICAgICAgICAgICAgIHJldHVybiAiRU5EX0RPQyI7Ci0gICAgICAgICAgICBjYXNlIFNUQVJUX1RBRzoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlNUQVJUX1RBRyI7Ci0gICAgICAgICAgICBjYXNlIEVORF9UQUc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFTkRfVEFHIjsKLSAgICAgICAgICAgIGNhc2UgVEVYVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlRFWFQiOwotICAgICAgICAgICAgY2FzZSBDRFNFQ1Q6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJDRFNFQ1QiOwotICAgICAgICAgICAgY2FzZSBFTlRJVFlfUkVGOgotICAgICAgICAgICAgICAgIHJldHVybiAiRU5USVRZX1JFRiI7Ci0gICAgICAgICAgICBjYXNlIElHTk9SQUJMRV9XSElURVNQQUNFOgotICAgICAgICAgICAgICAgIHJldHVybiAiSUdOT1JBQkxFX1dISVRFU1BBQ0UiOwotICAgICAgICAgICAgY2FzZSBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OOgotICAgICAgICAgICAgICAgIHJldHVybiAiUFJPQ0VTU0lOR19JTlNUUlVDVElPTiI7Ci0gICAgICAgICAgICBjYXNlIENPTU1FTlQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJDT01NRU5UIjsKLSAgICAgICAgICAgIGNhc2UgRE9DREVDTDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkRPQ0RFQ0wiOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICI/Pz8/IjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZXF1aXJlKGludCB0eXBlLCBTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgbmFtZSkKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHR5cGUgIT0gZ2V0RXZlbnRUeXBlKCkKLSAgICAgICAgICAgICAgICB8fCAobmFtZXNwYWNlICE9IG51bGwgJiYgIW5hbWVzcGFjZS5lcXVhbHMoZ2V0TmFtZXNwYWNlKCkpKQotICAgICAgICAgICAgICAgIHx8IChuYW1lICE9IG51bGwgJiYgIW5hbWUuZXF1YWxzKGdldE5hbWUoKSkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oImV4cGVjdGVkICIgKyBUWVBFU1t0eXBlXQotICAgICAgICAgICAgICAgICAgICArIGdldFBvc2l0aW9uRGVzY3JpcHRpb24oKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBuZXh0VGV4dCgpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChnZXRFdmVudFR5cGUoKSAhPSBTVEFSVF9UQUcpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uKGdldFBvc2l0aW9uRGVzY3JpcHRpb24oKQotICAgICAgICAgICAgICAgICAgICArICI6IHBhcnNlciBtdXN0IGJlIG9uIFNUQVJUX1RBRyB0byByZWFkIG5leHQgdGV4dCIsIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgIG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIGludCBldmVudFR5cGUgPSBuZXh0KCk7Ci0gICAgICAgIGlmIChldmVudFR5cGUgPT0gVEVYVCkgewotICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGdldFRleHQoKTsKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9IG5leHQoKTsKLSAgICAgICAgICAgIGlmIChldmVudFR5cGUgIT0gRU5EX1RBRykgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UG9zaXRpb25EZXNjcmlwdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIjogZXZlbnQgVEVYVCBpdCBtdXN0IGJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IEVORF9UQUciLAotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywgbnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBFTkRfVEFHKSB7Ci0gICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbihnZXRQb3NpdGlvbkRlc2NyaXB0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgKyAiOiBwYXJzZXIgbXVzdCBiZSBvbiBTVEFSVF9UQUcgb3IgVEVYVCB0byByZWFkIHRleHQiLAotICAgICAgICAgICAgICAgICAgICB0aGlzLCBudWxsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgbmV4dFRhZygpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGludCBldmVudFR5cGUgPSBuZXh0KCk7Ci0gICAgICAgIGlmIChldmVudFR5cGUgPT0gVEVYVCAmJiBpc1doaXRlc3BhY2UoKSkgeyAvLyBza2lwIHdoaXRlc3BhY2UKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9IG5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnRUeXBlICE9IFNUQVJUX1RBRyAmJiBldmVudFR5cGUgIT0gRU5EX1RBRykgewotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oZ2V0UG9zaXRpb25EZXNjcmlwdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICsgIjogZXhwZWN0ZWQgc3RhcnQgb3IgZW5kIHRhZyIsIHRoaXMsIG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBldmVudFR5cGU7Ci0gICAgfQotCi0gICAgLy8gQXR0cmlidXRlU2V0IGltcGxlbWVudGF0aW9uCi0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0QXR0cmlidXRlQm9vbGVhblZhbHVlKGludCBpbmRleCwgYm9vbGVhbiBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0QXR0cmlidXRlQm9vbGVhblZhbHVlKGluZGV4LCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGdldEF0dHJpYnV0ZUJvb2xlYW5WYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLAotICAgICAgICAgICAgYm9vbGVhbiBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0QXR0cmlidXRlQm9vbGVhblZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBmbG9hdCBnZXRBdHRyaWJ1dGVGbG9hdFZhbHVlKGludCBpbmRleCwgZmxvYXQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBtQXR0cmliLmdldEF0dHJpYnV0ZUZsb2F0VmFsdWUoaW5kZXgsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZsb2F0IGdldEF0dHJpYnV0ZUZsb2F0VmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwgZmxvYXQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBtQXR0cmliLmdldEF0dHJpYnV0ZUZsb2F0VmFsdWUobmFtZXNwYWNlLCBhdHRyaWJ1dGUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVJbnRWYWx1ZShpbnQgaW5kZXgsIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0QXR0cmlidXRlSW50VmFsdWUoaW5kZXgsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVJbnRWYWx1ZShTdHJpbmcgbmFtZXNwYWNlLCBTdHJpbmcgYXR0cmlidXRlLCBpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBtQXR0cmliLmdldEF0dHJpYnV0ZUludFZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlTGlzdFZhbHVlKGludCBpbmRleCwgU3RyaW5nW10gb3B0aW9ucywgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICByZXR1cm4gbUF0dHJpYi5nZXRBdHRyaWJ1dGVMaXN0VmFsdWUoaW5kZXgsIG9wdGlvbnMsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVMaXN0VmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwKLSAgICAgICAgICAgIFN0cmluZ1tdIG9wdGlvbnMsIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0QXR0cmlidXRlTGlzdFZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlLCBvcHRpb25zLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlTmFtZVJlc291cmNlKGludCBpbmRleCkgewotICAgICAgICByZXR1cm4gbUF0dHJpYi5nZXRBdHRyaWJ1dGVOYW1lUmVzb3VyY2UoaW5kZXgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlUmVzb3VyY2VWYWx1ZShpbnQgaW5kZXgsIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0QXR0cmlidXRlUmVzb3VyY2VWYWx1ZShpbmRleCwgZGVmYXVsdFZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZVJlc291cmNlVmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICByZXR1cm4gbUF0dHJpYi5nZXRBdHRyaWJ1dGVSZXNvdXJjZVZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0QXR0cmlidXRlVW5zaWduZWRJbnRWYWx1ZShpbnQgaW5kZXgsIGludCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0QXR0cmlidXRlVW5zaWduZWRJbnRWYWx1ZShpbmRleCwgZGVmYXVsdFZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZVVuc2lnbmVkSW50VmFsdWUoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGF0dHJpYnV0ZSwgaW50IGRlZmF1bHRWYWx1ZSkgewotICAgICAgICByZXR1cm4gbUF0dHJpYi5nZXRBdHRyaWJ1dGVVbnNpZ25lZEludFZhbHVlKG5hbWVzcGFjZSwgYXR0cmlidXRlLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NBdHRyaWJ1dGUoKSB7Ci0gICAgICAgIHJldHVybiBtQXR0cmliLmdldENsYXNzQXR0cmlidXRlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRJZEF0dHJpYnV0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1BdHRyaWIuZ2V0SWRBdHRyaWJ1dGUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldElkQXR0cmlidXRlUmVzb3VyY2VWYWx1ZShpbnQgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBtQXR0cmliLmdldElkQXR0cmlidXRlUmVzb3VyY2VWYWx1ZShkZWZhdWx0VmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0U3R5bGVBdHRyaWJ1dGUoKSB7Ci0gICAgICAgIHJldHVybiBtQXR0cmliLmdldFN0eWxlQXR0cmlidXRlKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlckltcGwuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNWFlOGQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQudmlldzsKLQotaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKLWltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheUFkanVzdG1lbnRzOwotaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5SW5mbzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFdpbmRvd01hbmFnZXJJbXBsIGltcGxlbWVudHMgV2luZG93TWFuYWdlciB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIERpc3BsYXlNZXRyaWNzIG1NZXRyaWNzOwotICAgIHByaXZhdGUgZmluYWwgRGlzcGxheSBtRGlzcGxheTsKLQotICAgIHB1YmxpYyBXaW5kb3dNYW5hZ2VySW1wbChEaXNwbGF5TWV0cmljcyBtZXRyaWNzKSB7Ci0gICAgICAgIG1NZXRyaWNzID0gbWV0cmljczsKLQotICAgICAgICBEaXNwbGF5SW5mbyBpbmZvID0gbmV3IERpc3BsYXlJbmZvKCk7Ci0gICAgICAgIGluZm8ubG9naWNhbEhlaWdodCA9IG1NZXRyaWNzLmhlaWdodFBpeGVsczsKLSAgICAgICAgaW5mby5sb2dpY2FsV2lkdGggPSBtTWV0cmljcy53aWR0aFBpeGVsczsKLSAgICAgICAgbURpc3BsYXkgPSBuZXcgRGlzcGxheShudWxsLCBEaXNwbGF5LkRFRkFVTFRfRElTUExBWSwgaW5mbywKLSAgICAgICAgICAgICAgICBEaXNwbGF5QWRqdXN0bWVudHMuREVGQVVMVF9ESVNQTEFZX0FESlVTVE1FTlRTKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRGlzcGxheSBnZXREZWZhdWx0RGlzcGxheSgpIHsKLSAgICAgICAgcmV0dXJuIG1EaXNwbGF5OwotICAgIH0KLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWRkVmlldyhWaWV3IGFyZzAsIGFuZHJvaWQudmlldy5WaWV3R3JvdXAuTGF5b3V0UGFyYW1zIGFyZzEpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVZpZXcoVmlldyBhcmcwKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1cGRhdGVWaWV3TGF5b3V0KFZpZXcgYXJnMCwgYW5kcm9pZC52aWV3LlZpZXdHcm91cC5MYXlvdXRQYXJhbXMgYXJnMSkgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVWaWV3SW1tZWRpYXRlKFZpZXcgYXJnMCkgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL0N1c3RvbUJhci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL0N1c3RvbUJhci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2QwOGViNC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvQ3VzdG9tQmFyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5iYXJzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlbmRlclJlc291cmNlczsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzb3VyY2VWYWx1ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuU3R5bGVSZXNvdXJjZVZhbHVlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZC5CcmlkZ2VDb250ZXh0OwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYW5kcm9pZC5CcmlkZ2VYbWxCbG9ja1BhcnNlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuUGFyc2VyRmFjdG9yeTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGwuUmVzb3VyY2VIZWxwZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLkRlbnNpdHk7Ci1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLkxheW91dERpcmVjdGlvbjsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotCi1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkJpdG1hcERyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLS8qKgotICogQmFzZSAiYmFyIiBjbGFzcyBmb3IgdGhlIHdpbmRvdyBkZWNvciBhcm91bmQgdGhlIHRoZSBlZGl0ZWQgbGF5b3V0LgotICogVGhpcyBpcyBiYXNpY2FsbHkgYW4gaG9yaXpvbnRhbCBsYXlvdXQgdGhhdCBsb2FkcyBhIGdpdmVuIGxheW91dCBvbiBjcmVhdGlvbiAoaXQgaXMgcmVhZAotICogdGhyb3VnaCB7QGxpbmsgQ2xhc3MjZ2V0UmVzb3VyY2VBc1N0cmVhbShTdHJpbmcpfSkuCi0gKgotICogVGhlIGdpdmVuIGxheW91dCBzaG91bGQgYmUgYSBtZXJnZSBsYXlvdXQgc28gdGhhdCBhbGwgdGhlIGNoaWxkcmVuIGJlbG9uZyB0byB0aGlzIGNsYXNzIGRpcmVjdGx5LgotICoKLSAqIEl0IGFsc28gcHJvdmlkZXMgYSBmZXcgdXRpbGl0eSBtZXRob2RzIHRvIGNvbmZpZ3VyZSB0aGUgY29udGVudCBvZiB0aGUgbGF5b3V0LgotICovCi1hYnN0cmFjdCBjbGFzcyBDdXN0b21CYXIgZXh0ZW5kcyBMaW5lYXJMYXlvdXQgewotCi0gICAgcHJvdGVjdGVkIGFic3RyYWN0IFRleHRWaWV3IGdldFN0eWxlYWJsZVRleHRWaWV3KCk7Ci0KLSAgICBwcm90ZWN0ZWQgQ3VzdG9tQmFyKENvbnRleHQgY29udGV4dCwgRGVuc2l0eSBkZW5zaXR5LCBpbnQgb3JpZW50YXRpb24sIFN0cmluZyBsYXlvdXRQYXRoLAotICAgICAgICAgICAgU3RyaW5nIG5hbWUpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0gICAgICAgIHNldE9yaWVudGF0aW9uKG9yaWVudGF0aW9uKTsKLSAgICAgICAgaWYgKG9yaWVudGF0aW9uID09IExpbmVhckxheW91dC5IT1JJWk9OVEFMKSB7Ci0gICAgICAgICAgICBzZXRHcmF2aXR5KEdyYXZpdHkuQ0VOVEVSX1ZFUlRJQ0FMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldEdyYXZpdHkoR3Jhdml0eS5DRU5URVJfSE9SSVpPTlRBTCk7Ci0gICAgICAgIH0KLQotICAgICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IChMYXlvdXRJbmZsYXRlcikgZ2V0Q29udGV4dCgpLmdldFN5c3RlbVNlcnZpY2UoCi0gICAgICAgICAgICAgICAgQ29udGV4dC5MQVlPVVRfSU5GTEFURVJfU0VSVklDRSk7Ci0KLSAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXIgPSBQYXJzZXJGYWN0b3J5LmNyZWF0ZShnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0obGF5b3V0UGF0aCksCi0gICAgICAgICAgICAgICAgbmFtZSk7Ci0KLSAgICAgICAgQnJpZGdlWG1sQmxvY2tQYXJzZXIgYnJpZGdlUGFyc2VyID0gbmV3IEJyaWRnZVhtbEJsb2NrUGFyc2VyKAotICAgICAgICAgICAgICAgIHBhcnNlciwgKEJyaWRnZUNvbnRleHQpIGNvbnRleHQsIGZhbHNlIC8qcGxhdGZvcm1GaWxlKi8pOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbmZsYXRlci5pbmZsYXRlKGJyaWRnZVBhcnNlciwgdGhpcywgdHJ1ZSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBicmlkZ2VQYXJzZXIuZW5zdXJlUG9wcGVkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIElucHV0U3RyZWFtIGdldEljb24oU3RyaW5nIGljb25OYW1lLCBEZW5zaXR5W10gZGVuc2l0eUluT3V0LCBMYXlvdXREaXJlY3Rpb24gZGlyZWN0aW9uLCAKLSAgICAgICAgICAgIFN0cmluZ1tdIHBhdGhPdXQsIGJvb2xlYW4gdHJ5T3RoZXJEZW5zaXRpZXMpIHsKLSAgICAgICAgLy8gY3VycmVudCBkZW5zaXR5Ci0gICAgICAgIERlbnNpdHkgZGVuc2l0eSA9IGRlbnNpdHlJbk91dFswXTsKLQotICAgICAgICAvLyBiaXRtYXAgdXJsIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MKLSAgICAgICAgaWYgKGRpcmVjdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBwYXRoT3V0WzBdID0gIi9iYXJzLyIgKyBkaXJlY3Rpb24uZ2V0UmVzb3VyY2VWYWx1ZSgpICsgIi0iICsgZGVuc2l0eS5nZXRSZXNvdXJjZVZhbHVlKCkKLSAgICAgICAgICAgICAgICAgICAgKyAiLyIgKyBpY29uTmFtZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhdGhPdXRbMF0gPSAiL2JhcnMvIiArIGRlbnNpdHkuZ2V0UmVzb3VyY2VWYWx1ZSgpICsgIi8iICsgaWNvbk5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICBJbnB1dFN0cmVhbSBzdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0ocGF0aE91dFswXSk7Ci0gICAgICAgIGlmIChzdHJlYW0gPT0gbnVsbCAmJiB0cnlPdGhlckRlbnNpdGllcykgewotICAgICAgICAgICAgZm9yIChEZW5zaXR5IGQgOiBEZW5zaXR5LnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGQgIT0gZGVuc2l0eSkgewotICAgICAgICAgICAgICAgICAgICBkZW5zaXR5SW5PdXRbMF0gPSBkOwotICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBnZXRJY29uKGljb25OYW1lLCBkZW5zaXR5SW5PdXQsIGRpcmVjdGlvbiwgcGF0aE91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKnRyeU90aGVyRGVuc2l0aWVzKi8pOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBjb3VsZG4ndCBmaW5kIHJlc291cmNlIHdpdGggZGlyZWN0aW9uIHF1YWxpZmllci4gdHJ5IHdpdGhvdXQuCi0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SWNvbihpY29uTmFtZSwgZGVuc2l0eUluT3V0LCBudWxsLCBwYXRoT3V0LCB0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzdHJlYW07Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgbG9hZEljb24oaW50IGluZGV4LCBTdHJpbmcgaWNvbk5hbWUsIERlbnNpdHkgZGVuc2l0eSkgewotICAgICAgICBsb2FkSWNvbihpbmRleCwgaWNvbk5hbWUsIGRlbnNpdHksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBsb2FkSWNvbihpbnQgaW5kZXgsIFN0cmluZyBpY29uTmFtZSwgRGVuc2l0eSBkZW5zaXR5LCBib29sZWFuIGlzUnRsKSB7Ci0gICAgICAgIFZpZXcgY2hpbGQgPSBnZXRDaGlsZEF0KGluZGV4KTsKLSAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgSW1hZ2VWaWV3KSB7Ci0gICAgICAgICAgICBJbWFnZVZpZXcgaW1hZ2VWaWV3ID0gKEltYWdlVmlldykgY2hpbGQ7Ci0KLSAgICAgICAgICAgIFN0cmluZ1tdIHBhdGhPdXQgPSBuZXcgU3RyaW5nWzFdOwotICAgICAgICAgICAgRGVuc2l0eVtdIGRlbnNpdHlJbk91dCA9IG5ldyBEZW5zaXR5W10geyBkZW5zaXR5IH07Ci0gICAgICAgICAgICBMYXlvdXREaXJlY3Rpb24gZGlyID0gaXNSdGwgPyBMYXlvdXREaXJlY3Rpb24uUlRMIDogTGF5b3V0RGlyZWN0aW9uLkxUUjsKLSAgICAgICAgICAgIElucHV0U3RyZWFtIHN0cmVhbSA9IGdldEljb24oaWNvbk5hbWUsIGRlbnNpdHlJbk91dCwgZGlyLCBwYXRoT3V0LAotICAgICAgICAgICAgICAgICAgICB0cnVlIC8qdHJ5T3RoZXJEZW5zaXRpZXMqLyk7Ci0gICAgICAgICAgICBkZW5zaXR5ID0gZGVuc2l0eUluT3V0WzBdOwotCi0gICAgICAgICAgICBpZiAoc3RyZWFtICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBsb29rIGZvciBhIGNhY2hlZCBiaXRtYXAKLSAgICAgICAgICAgICAgICBCaXRtYXAgYml0bWFwID0gQnJpZGdlLmdldENhY2hlZEJpdG1hcChwYXRoT3V0WzBdLCB0cnVlIC8qaXNGcmFtZXdvcmsqLyk7Ci0gICAgICAgICAgICAgICAgaWYgKGJpdG1hcCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgPSBCaXRtYXBfRGVsZWdhdGUuY3JlYXRlQml0bWFwKHN0cmVhbSwgZmFsc2UgLyppc011dGFibGUqLywgZGVuc2l0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2Uuc2V0Q2FjaGVkQml0bWFwKHBhdGhPdXRbMF0sIGJpdG1hcCwgdHJ1ZSAvKmlzRnJhbWV3b3JrKi8pOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYml0bWFwICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgQml0bWFwRHJhd2FibGUgZHJhd2FibGUgPSBuZXcgQml0bWFwRHJhd2FibGUoZ2V0Q29udGV4dCgpLmdldFJlc291cmNlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCk7Ci0gICAgICAgICAgICAgICAgICAgIGltYWdlVmlldy5zZXRJbWFnZURyYXdhYmxlKGRyYXdhYmxlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBsb2FkSWNvbihpbnQgaW5kZXgsIFN0cmluZyBpY29uUmVmZXJlbmNlKSB7Ci0gICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSBnZXRSZXNvdXJjZVZhbHVlKGljb25SZWZlcmVuY2UpOwotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgbG9hZEljb24oaW5kZXgsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGxvYWRJY29uQnlJZChpbnQgaWQsIFN0cmluZyBpY29uUmVmZXJlbmNlKSB7Ci0gICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSBnZXRSZXNvdXJjZVZhbHVlKGljb25SZWZlcmVuY2UpOwotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgbG9hZEljb25CeUlkKGlkLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIHByb3RlY3RlZCBEcmF3YWJsZSBsb2FkSWNvbihpbnQgaW5kZXgsIFJlc291cmNlVHlwZSB0eXBlLCBTdHJpbmcgbmFtZSkgewotICAgICAgICBCcmlkZ2VDb250ZXh0IGJyaWRnZUNvbnRleHQgPSAoQnJpZGdlQ29udGV4dCkgbUNvbnRleHQ7Ci0gICAgICAgIFJlbmRlclJlc291cmNlcyByZXMgPSBicmlkZ2VDb250ZXh0LmdldFJlbmRlclJlc291cmNlcygpOwotCi0gICAgICAgIC8vIGZpbmQgdGhlIHJlc291cmNlCi0gICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSByZXMuZ2V0RnJhbWV3b3JrUmVzb3VyY2UodHlwZSwgbmFtZSk7Ci0KLSAgICAgICAgLy8gcmVzb2x2ZSBpdCBpZiBuZWVkZWQKLSAgICAgICAgdmFsdWUgPSByZXMucmVzb2x2ZVJlc1ZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGxvYWRJY29uKGluZGV4LCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBEcmF3YWJsZSBsb2FkSWNvbihpbnQgaW5kZXgsIFJlc291cmNlVmFsdWUgdmFsdWUpIHsKLSAgICAgICAgVmlldyBjaGlsZCA9IGdldENoaWxkQXQoaW5kZXgpOwotICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBJbWFnZVZpZXcpIHsKLSAgICAgICAgICAgIEltYWdlVmlldyBpbWFnZVZpZXcgPSAoSW1hZ2VWaWV3KSBjaGlsZDsKLQotICAgICAgICAgICAgcmV0dXJuIGxvYWRJY29uKGltYWdlVmlldywgdmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBEcmF3YWJsZSBsb2FkSWNvbkJ5SWQoaW50IGlkLCBSZXNvdXJjZVZhbHVlIHZhbHVlKSB7Ci0gICAgICAgIFZpZXcgY2hpbGQgPSBmaW5kVmlld0J5SWQoaWQpOwotICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBJbWFnZVZpZXcpIHsKLSAgICAgICAgICAgIEltYWdlVmlldyBpbWFnZVZpZXcgPSAoSW1hZ2VWaWV3KSBjaGlsZDsKLQotICAgICAgICAgICAgcmV0dXJuIGxvYWRJY29uKGltYWdlVmlldywgdmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0KLSAgICBwcml2YXRlIERyYXdhYmxlIGxvYWRJY29uKEltYWdlVmlldyBpbWFnZVZpZXcsIFJlc291cmNlVmFsdWUgdmFsdWUpIHsKLSAgICAgICAgRHJhd2FibGUgZHJhd2FibGUgPSBSZXNvdXJjZUhlbHBlci5nZXREcmF3YWJsZSh2YWx1ZSwgKEJyaWRnZUNvbnRleHQpIG1Db250ZXh0KTsKLSAgICAgICAgaWYgKGRyYXdhYmxlICE9IG51bGwpIHsKLSAgICAgICAgICAgIGltYWdlVmlldy5zZXRJbWFnZURyYXdhYmxlKGRyYXdhYmxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkcmF3YWJsZTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgVGV4dFZpZXcgc2V0VGV4dChpbnQgaW5kZXgsIFN0cmluZyBzdHJpbmdSZWZlcmVuY2UpIHsKLSAgICAgICAgVmlldyBjaGlsZCA9IGdldENoaWxkQXQoaW5kZXgpOwotICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBUZXh0VmlldykgewotICAgICAgICAgICAgVGV4dFZpZXcgdGV4dFZpZXcgPSAoVGV4dFZpZXcpIGNoaWxkOwotICAgICAgICAgICAgc2V0VGV4dCh0ZXh0Vmlldywgc3RyaW5nUmVmZXJlbmNlKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0VmlldzsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBUZXh0VmlldyBzZXRUZXh0QnlJZChpbnQgaWQsIFN0cmluZyBzdHJpbmdSZWZlcmVuY2UpIHsKLSAgICAgICAgVmlldyBjaGlsZCA9IGZpbmRWaWV3QnlJZChpZCk7Ci0gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFRleHRWaWV3KSB7Ci0gICAgICAgICAgICBUZXh0VmlldyB0ZXh0VmlldyA9IChUZXh0VmlldykgY2hpbGQ7Ci0gICAgICAgICAgICBzZXRUZXh0KHRleHRWaWV3LCBzdHJpbmdSZWZlcmVuY2UpOwotICAgICAgICAgICAgcmV0dXJuIHRleHRWaWV3OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldFRleHQoVGV4dFZpZXcgdGV4dFZpZXcsIFN0cmluZyBzdHJpbmdSZWZlcmVuY2UpIHsKLSAgICAgICAgUmVzb3VyY2VWYWx1ZSB2YWx1ZSA9IGdldFJlc291cmNlVmFsdWUoc3RyaW5nUmVmZXJlbmNlKTsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRleHRWaWV3LnNldFRleHQodmFsdWUuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0ZXh0Vmlldy5zZXRUZXh0KHN0cmluZ1JlZmVyZW5jZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRTdHlsZShTdHJpbmcgdGhlbWVFbnRyeU5hbWUpIHsKLQotICAgICAgICBCcmlkZ2VDb250ZXh0IGJyaWRnZUNvbnRleHQgPSAoQnJpZGdlQ29udGV4dCkgbUNvbnRleHQ7Ci0gICAgICAgIFJlbmRlclJlc291cmNlcyByZXMgPSBicmlkZ2VDb250ZXh0LmdldFJlbmRlclJlc291cmNlcygpOwotCi0gICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSByZXMuZmluZEl0ZW1JblRoZW1lKHRoZW1lRW50cnlOYW1lLCB0cnVlIC8qaXNGcmFtZXdvcmtBdHRyKi8pOwotICAgICAgICB2YWx1ZSA9IHJlcy5yZXNvbHZlUmVzVmFsdWUodmFsdWUpOwotCi0gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0eWxlUmVzb3VyY2VWYWx1ZSA9PSBmYWxzZSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3R5bGVSZXNvdXJjZVZhbHVlIHN0eWxlID0gKFN0eWxlUmVzb3VyY2VWYWx1ZSkgdmFsdWU7Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBiYWNrZ3JvdW5kCi0gICAgICAgIFJlc291cmNlVmFsdWUgYmFja2dyb3VuZFZhbHVlID0gcmVzLmZpbmRJdGVtSW5TdHlsZShzdHlsZSwgImJhY2tncm91bmQiLAotICAgICAgICAgICAgICAgIHRydWUgLyppc0ZyYW1ld29ya0F0dHIqLyk7Ci0gICAgICAgIGJhY2tncm91bmRWYWx1ZSA9IHJlcy5yZXNvbHZlUmVzVmFsdWUoYmFja2dyb3VuZFZhbHVlKTsKLSAgICAgICAgaWYgKGJhY2tncm91bmRWYWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBEcmF3YWJsZSBkID0gUmVzb3VyY2VIZWxwZXIuZ2V0RHJhd2FibGUoYmFja2dyb3VuZFZhbHVlLCBicmlkZ2VDb250ZXh0KTsKLSAgICAgICAgICAgIGlmIChkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzZXRCYWNrZ3JvdW5kKGQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgVGV4dFZpZXcgdGV4dFZpZXcgPSBnZXRTdHlsZWFibGVUZXh0VmlldygpOwotICAgICAgICBpZiAodGV4dFZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gZ2V0IHRoZSB0ZXh0IHN0eWxlCi0gICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHRleHRTdHlsZVZhbHVlID0gcmVzLmZpbmRJdGVtSW5TdHlsZShzdHlsZSwgInRpdGxlVGV4dFN0eWxlIiwKLSAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKmlzRnJhbWV3b3JrQXR0ciovKTsKLSAgICAgICAgICAgIHRleHRTdHlsZVZhbHVlID0gcmVzLnJlc29sdmVSZXNWYWx1ZSh0ZXh0U3R5bGVWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAodGV4dFN0eWxlVmFsdWUgaW5zdGFuY2VvZiBTdHlsZVJlc291cmNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBTdHlsZVJlc291cmNlVmFsdWUgdGV4dFN0eWxlID0gKFN0eWxlUmVzb3VyY2VWYWx1ZSkgdGV4dFN0eWxlVmFsdWU7Ci0KLSAgICAgICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHRleHRTaXplID0gcmVzLmZpbmRJdGVtSW5TdHlsZSh0ZXh0U3R5bGUsICJ0ZXh0U2l6ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qaXNGcmFtZXdvcmtBdHRyKi8pOwotICAgICAgICAgICAgICAgIHRleHRTaXplID0gcmVzLnJlc29sdmVSZXNWYWx1ZSh0ZXh0U2l6ZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dFNpemUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBUeXBlZFZhbHVlIG91dCA9IG5ldyBUeXBlZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChSZXNvdXJjZUhlbHBlci5wYXJzZUZsb2F0QXR0cmlidXRlKCJ0ZXh0U2l6ZSIsIHRleHRTaXplLmdldFZhbHVlKCksIG91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qcmVxdWlyZVVuaXQqLykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHRWaWV3LnNldFRleHRTaXplKFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX1BYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQuZ2V0RGltZW5zaW9uKGJyaWRnZUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGlzcGxheU1ldHJpY3MoKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgICAgICBSZXNvdXJjZVZhbHVlIHRleHRDb2xvciA9IHJlcy5maW5kSXRlbUluU3R5bGUodGV4dFN0eWxlLCAidGV4dENvbG9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyppc0ZyYW1ld29ya0F0dHIqLyk7Ci0gICAgICAgICAgICAgICAgdGV4dENvbG9yID0gcmVzLnJlc29sdmVSZXNWYWx1ZSh0ZXh0Q29sb3IpOwotICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29sb3IgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBDb2xvclN0YXRlTGlzdCBzdGF0ZUxpc3QgPSBSZXNvdXJjZUhlbHBlci5nZXRDb2xvclN0YXRlTGlzdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29sb3IsIGJyaWRnZUNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVMaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHRWaWV3LnNldFRleHRDb2xvcihzdGF0ZUxpc3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBSZXNvdXJjZVZhbHVlIGdldFJlc291cmNlVmFsdWUoU3RyaW5nIHJlZmVyZW5jZSkgewotICAgICAgICBCcmlkZ2VDb250ZXh0IGJyaWRnZUNvbnRleHQgPSAoQnJpZGdlQ29udGV4dCkgbUNvbnRleHQ7Ci0gICAgICAgIFJlbmRlclJlc291cmNlcyByZXMgPSBicmlkZ2VDb250ZXh0LmdldFJlbmRlclJlc291cmNlcygpOwotCi0gICAgICAgIC8vIGZpbmQgdGhlIHJlc291cmNlCi0gICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSByZXMuZmluZFJlc1ZhbHVlKHJlZmVyZW5jZSwgZmFsc2UgLyppc0ZyYW1ld29yayovKTsKLQotICAgICAgICAvLyByZXNvbHZlIGl0IGlmIG5lZWRlZAotICAgICAgICByZXR1cm4gcmVzLnJlc29sdmVSZXNWYWx1ZSh2YWx1ZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL0Zha2VBY3Rpb25CYXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9GYWtlQWN0aW9uQmFyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjY0OWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL0Zha2VBY3Rpb25CYXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYmFyczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5EZW5zaXR5OwotCi1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKLQotcHVibGljIGNsYXNzIEZha2VBY3Rpb25CYXIgZXh0ZW5kcyBDdXN0b21CYXIgewotCi0gICAgcHJpdmF0ZSBUZXh0VmlldyBtVGV4dFZpZXc7Ci0KLSAgICBwdWJsaWMgRmFrZUFjdGlvbkJhcihDb250ZXh0IGNvbnRleHQsIERlbnNpdHkgZGVuc2l0eSwgU3RyaW5nIGxhYmVsLCBTdHJpbmcgaWNvbikKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgZGVuc2l0eSwgTGluZWFyTGF5b3V0LkhPUklaT05UQUwsICIvYmFycy9hY3Rpb25fYmFyLnhtbCIsICJhY3Rpb25fYmFyLnhtbCIpOwotCi0gICAgICAgIC8vIENhbm5vdCBhY2Nlc3MgdGhlIGluc2lkZSBpdGVtcyB0aHJvdWdoIGlkIGJlY2F1c2Ugbm8gUi5pZCB2YWx1ZXMgaGF2ZSBiZWVuCi0gICAgICAgIC8vIGNyZWF0ZWQgZm9yIHRoZW0uCi0gICAgICAgIC8vIFdlIGRvIGtub3cgdGhlIG9yZGVyIHRob3VnaC4KLSAgICAgICAgbG9hZEljb25CeUlkKGFuZHJvaWQuUi5pZC5ob21lLCBpY29uKTsKLSAgICAgICAgbVRleHRWaWV3ID0gc2V0VGV4dCgxLCBsYWJlbCk7Ci0KLSAgICAgICAgc2V0U3R5bGUoImFjdGlvbkJhclN0eWxlIik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFRleHRWaWV3IGdldFN0eWxlYWJsZVRleHRWaWV3KCkgewotICAgICAgICByZXR1cm4gbVRleHRWaWV3OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9OYXZpZ2F0aW9uQmFyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvTmF2aWdhdGlvbkJhci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGU2NzZlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9OYXZpZ2F0aW9uQmFyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmJhcnM7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuRGVuc2l0eTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLQotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7Ci0KLXB1YmxpYyBjbGFzcyBOYXZpZ2F0aW9uQmFyIGV4dGVuZHMgQ3VzdG9tQmFyIHsKLQotICAgIHB1YmxpYyBOYXZpZ2F0aW9uQmFyKENvbnRleHQgY29udGV4dCwgRGVuc2l0eSBkZW5zaXR5LCBpbnQgb3JpZW50YXRpb24sIGJvb2xlYW4gaXNSdGwsCi0gICAgICAgICAgICBib29sZWFuIHJ0bEVuYWJsZWQpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgZGVuc2l0eSwgb3JpZW50YXRpb24sICIvYmFycy9uYXZpZ2F0aW9uX2Jhci54bWwiLCAibmF2aWdhdGlvbl9iYXIueG1sIik7Ci0KLSAgICAgICAgc2V0QmFja2dyb3VuZENvbG9yKDB4RkYwMDAwMDApOwotCi0gICAgICAgIC8vIENhbm5vdCBhY2Nlc3MgdGhlIGluc2lkZSBpdGVtcyB0aHJvdWdoIGlkIGJlY2F1c2Ugbm8gUi5pZCB2YWx1ZXMgaGF2ZSBiZWVuCi0gICAgICAgIC8vIGNyZWF0ZWQgZm9yIHRoZW0uCi0gICAgICAgIC8vIFdlIGRvIGtub3cgdGhlIG9yZGVyIHRob3VnaC4KLSAgICAgICAgLy8gMCBpcyBhIHNwYWNlci4KLSAgICAgICAgaW50IGJhY2sgPSAxOwotICAgICAgICBpbnQgcmVjZW50ID0gMzsKLSAgICAgICAgaWYgKG9yaWVudGF0aW9uID09IExpbmVhckxheW91dC5WRVJUSUNBTCB8fCAoaXNSdGwgJiYgIXJ0bEVuYWJsZWQpKSB7Ci0gICAgICAgICAgICAvLyBJZiBSVEwgaXMgZW5hYmxlZCwgdGhlbiBsYXlvdXRsaWIgbWlycm9ycyB0aGUgbGF5b3V0IGZvciB1cy4KLSAgICAgICAgICAgIGJhY2sgPSAzOwotICAgICAgICAgICAgcmVjZW50ID0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGxvYWRJY29uKGJhY2ssICAgImljX3N5c2Jhcl9iYWNrLnBuZyIsICAgZGVuc2l0eSwgaXNSdGwpOwotICAgICAgICBsb2FkSWNvbigyLCAgICAgICJpY19zeXNiYXJfaG9tZS5wbmciLCAgIGRlbnNpdHksIGlzUnRsKTsKLSAgICAgICAgbG9hZEljb24ocmVjZW50LCAiaWNfc3lzYmFyX3JlY2VudC5wbmciLCBkZW5zaXR5LCBpc1J0bCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFRleHRWaWV3IGdldFN0eWxlYWJsZVRleHRWaWV3KCkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvU3RhdHVzQmFyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvU3RhdHVzQmFyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2OTJkOTYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL1N0YXR1c0Jhci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5iYXJzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLkRlbnNpdHk7Ci1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLlJlc291cmNlVHlwZTsKLQotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuTGV2ZWxMaXN0RHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotCi1wdWJsaWMgY2xhc3MgU3RhdHVzQmFyIGV4dGVuZHMgQ3VzdG9tQmFyIHsKLQotICAgIHB1YmxpYyBTdGF0dXNCYXIoQ29udGV4dCBjb250ZXh0LCBEZW5zaXR5IGRlbnNpdHksIGludCBkaXJlY3Rpb24sIGJvb2xlYW4gUnRsRW5hYmxlZCkKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gRklYTUU6IGlmIGRpcmVjdGlvbiBpcyBSVEwgYnV0IGl0J3Mgbm90IGVuYWJsZWQgaW4gYXBwbGljYXRpb24gbWFuaWZlc3QsIG1pcnJvciB0aGlzIGJhci4KLQotICAgICAgICBzdXBlcihjb250ZXh0LCBkZW5zaXR5LCBMaW5lYXJMYXlvdXQuSE9SSVpPTlRBTCwgIi9iYXJzL3N0YXR1c19iYXIueG1sIiwgInN0YXR1c19iYXIueG1sIik7Ci0KLSAgICAgICAgLy8gRklYTUU6IHVzZSBGSUxMX0g/Ci0gICAgICAgIHNldEdyYXZpdHkoR3Jhdml0eS5TVEFSVCB8IEdyYXZpdHkuVE9QIHwgR3Jhdml0eS5SSUdIVCk7Ci0gICAgICAgIHNldEJhY2tncm91bmRDb2xvcigweEZGMDAwMDAwKTsKLQotICAgICAgICAvLyBDYW5ub3QgYWNjZXNzIHRoZSBpbnNpZGUgaXRlbXMgdGhyb3VnaCBpZCBiZWNhdXNlIG5vIFIuaWQgdmFsdWVzIGhhdmUgYmVlbgotICAgICAgICAvLyBjcmVhdGVkIGZvciB0aGVtLgotICAgICAgICAvLyBXZSBkbyBrbm93IHRoZSBvcmRlciB0aG91Z2guCi0gICAgICAgIC8vIDAgaXMgdGhlIHNwYWNlcgotICAgICAgICBsb2FkSWNvbigxLCAic3RhdF9zeXNfd2lmaV9zaWduYWxfNF9mdWxseS5wbmciLCBkZW5zaXR5KTsKLSAgICAgICAgbG9hZEljb24oMiwgInN0YXRfc3lzX2JhdHRlcnlfY2hhcmdlX2FuaW0xMDAucG5nIiwgZGVuc2l0eSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFRleHRWaWV3IGdldFN0eWxlYWJsZVRleHRWaWV3KCkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvVGl0bGVCYXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9UaXRsZUJhci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjc4NTlmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9UaXRsZUJhci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5iYXJzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLkRlbnNpdHk7Ci0KLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotCi1wdWJsaWMgY2xhc3MgVGl0bGVCYXIgZXh0ZW5kcyBDdXN0b21CYXIgewotCi0gICAgcHJpdmF0ZSBUZXh0VmlldyBtVGV4dFZpZXc7Ci0KLSAgICBwdWJsaWMgVGl0bGVCYXIoQ29udGV4dCBjb250ZXh0LCBEZW5zaXR5IGRlbnNpdHksIFN0cmluZyBsYWJlbCkKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgZGVuc2l0eSwgTGluZWFyTGF5b3V0LkhPUklaT05UQUwsICIvYmFycy90aXRsZV9iYXIueG1sIiwgInRpdGxlX2Jhci54bWwiKTsKLQotICAgICAgICAvLyBDYW5ub3QgYWNjZXNzIHRoZSBpbnNpZGUgaXRlbXMgdGhyb3VnaCBpZCBiZWNhdXNlIG5vIFIuaWQgdmFsdWVzIGhhdmUgYmVlbgotICAgICAgICAvLyBjcmVhdGVkIGZvciB0aGVtLgotICAgICAgICAvLyBXZSBkbyBrbm93IHRoZSBvcmRlciB0aG91Z2guCi0gICAgICAgIG1UZXh0VmlldyA9IHNldFRleHQoMCwgbGFiZWwpOwotCi0gICAgICAgIHNldFN0eWxlKCJ3aW5kb3dUaXRsZUJhY2tncm91bmRTdHlsZSIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBUZXh0VmlldyBnZXRTdHlsZWFibGVUZXh0VmlldygpIHsKLSAgICAgICAgcmV0dXJuIG1UZXh0VmlldzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvRGVsZWdhdGVNYW5hZ2VyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvRGVsZWdhdGVNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMTIxN2QuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL0RlbGVnYXRlTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UudXRpbC5EZWJ1ZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLnV0aWwuU3BhcnNlV2Vha0FycmF5OwotCi1pbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogTWFuYWdlcyBuYXRpdmUgZGVsZWdhdGVzLgotICoKLSAqIFRoaXMgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGxheW91YmxpYl9jcmVhdGU6IGNlcnRhaW4gQW5kcm9pZCBqYXZhIGNsYXNzZXMgYXJlIG1lcmUKLSAqIHdyYXBwZXJzIGFyb3VuZCBhIGhlYXZpbHkgbmF0aXZlIGJhc2VkIGltcGxlbWVudGF0aW9uLCBhbmQgd2UgbmVlZCBhIHdheSB0byBydW4gdGhlc2UgY2xhc3NlcwotICogaW4gb3VyIEVjbGlwc2UgcmVuZGVyaW5nIGZyYW1ld29yayB3aXRob3V0IGJyaW5naW5nIGFsbCB0aGUgbmF0aXZlIGNvZGUgZnJvbSB0aGUgQW5kcm9pZAotICogcGxhdGZvcm0uCi0gKgotICogVGh1cyB3ZSBpbnN0cnVjdCBsYXlvdXRsaWJfY3JlYXRlIHRvIG1vZGlmeSB0aGUgYnl0ZWNvZGUgb2YgdGhlc2UgY2xhc3NlcyB0byByZXBsYWNlIHRoZWlyCi0gKiBuYXRpdmUgbWV0aG9kcyBieSAiZGVsZWdhdGUgY2FsbHMiLgotICoKLSAqIEZvciBleGFtcGxlLCBhIG5hdGl2ZSBtZXRob2QgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXguaW5pdCguLi4pIHdpbGwgYWN0dWFsbHkgYmVjb21lCi0gKiBhIGNhbGwgdG8gYW5kcm9pZC5ncmFwaGljcy5NYXRyaXhfRGVsZWdhdGUuaW5pdCguLi4pLgotICoKLSAqIFRoZSBBbmRyb2lkIGphdmEgY2xhc3NlcyB0aGF0IHVzZSBuYXRpdmUgY29kZSB1c2VzIGFuIGludCAoSmF2YSBzaWRlKSB0byByZWZlcmVuY2UgbmF0aXZlCi0gKiBvYmplY3RzLiBUaGlzIGludCBpcyBnZW5lcmFsbHkgZGlyZWN0bHkgdGhlIHBvaW50ZXIgdG8gdGhlIEMgc3RydWN0dXJlIGNvdW50ZXJwYXJ0LgotICogVHlwaWNhbGx5IGEgY3JlYXRpb24gbWV0aG9kIHdpbGwgcmV0dXJuIHN1Y2ggYW4gaW50LCBhbmQgdGhlbiB0aGlzIGludCB3aWxsIGJlIHBhc3NlZCBsYXRlcgotICogdG8gYSBKYXZhIG1ldGhvZCB0byBpZGVudGlmeSB0aGUgQyBvYmplY3QgdG8gbWFuaXB1bGF0ZS4KLSAqCi0gKiBTaW5jZSB3ZSBjYW5ub3QgdXNlIHRoZSBKYXZhIG9iamVjdCByZWZlcmVuY2UgYXMgdGhlIGludCBkaXJlY3RseSwgRGVsZWdhdGVNYW5hZ2VyIG1hbmFnZXMgdGhlCi0gKiBpbnQgLT4gRGVsZWdhdGUgY2xhc3MgbGluay4KLSAqCi0gKiBOYXRpdmUgbWV0aG9kcyB1c3VhbGx5IGFsd2F5cyBoYXZlIHRoZSBpbnQgYXMgcGFyYW1ldGVycy4gVGhlIGZpcnN0IHRoaW5nIHRoZSBkZWxlZ2F0ZSBtZXRob2QKLSAqIHdpbGwgZG8gaXMgY2FsbCB7QGxpbmsgI2dldERlbGVnYXRlKGludCl9IHRvIGdldCB0aGUgSmF2YSBvYmplY3QgbWF0Y2hpbmcgdGhlIGludC4KLSAqCi0gKiBUeXBpY2FsIG5hdGl2ZSBpbml0IG1ldGhvZHMgYXJlIHJldHVybmluZyBhIG5ldyBpbnQgYmFjayB0byB0aGUgSmF2YSBjbGFzcywgc28KLSAqIHtAbGluayAjYWRkTmV3RGVsZWdhdGUoT2JqZWN0KX0gZG9lcyB0aGUgc2FtZS4KLSAqCi0gKiBUaGUgSk5JIHJlZmVyZW5jZXMgYXJlIGNvdW50ZWQsIHNvIHdlIGRvIHRoZSBzYW1lIHRocm91Z2ggYSB7QGxpbmsgV2Vha1JlZmVyZW5jZX0uIEJlY2F1c2UKLSAqIHRoZSBKYXZhIG9iamVjdCBuZWVkcyB0byBjb3VudCBhcyBhIHJlZmVyZW5jZSAoZXZlbiB0aG91Z2ggaXQgb25seSBob2xkcyBhbiBpbnQpLCB3ZSB1c2UgdGhlCi0gKiBmb2xsb3dpbmcgbWVjaGFuaXNtOgotICoKLSAqIC0ge0BsaW5rICNhZGROZXdEZWxlZ2F0ZShPYmplY3QpfSBhbmQge0BsaW5rICNyZW1vdmVKYXZhUmVmZXJlbmNlRm9yKGludCl9IGFkZHMgYW5kIHJlbW92ZXMKLSAqICAgdGhlIGRlbGVnYXRlIHRvL2Zyb20gYSBsaXN0LiBUaGlzIGxpc3QgaG9sZCB0aGUgcmVmZXJlbmNlIGFuZCBwcmV2ZW50cyB0aGUgR0MgZnJvbSByZWNsYWltaW5nCi0gKiAgIHRoZSBkZWxlZ2F0ZS4KLSAqCi0gKiAtIHtAbGluayAjYWRkTmV3RGVsZWdhdGUoT2JqZWN0KX0gYWxzbyBhZGRzIHRoZSBkZWxlZ2F0ZSB0byBhIHtAbGluayBTcGFyc2VBcnJheX0gdGhhdCBob2xkcyBhCi0gKiAgIHtAbGluayBXZWFrUmVmZXJlbmNlfSB0byB0aGUgZGVsZWdhdGUuIFRoaXMgYWxsb3dzIHRoZSBkZWxlZ2F0ZSB0byBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkKLSAqICAgd2hlbiBub3RoaW5nIHJlZmVyZW5jZXMgaXQuIFRoaXMgbWVhbnMgdGhhdCBhbnkgY2xhc3MgdGhhdCBob2xkcyBhIGRlbGVnYXRlIChleGNlcHQgZm9yIHRoZQotICogICBKYXZhIG1haW4gY2xhc3MpIG11c3Qgbm90IHVzZSB0aGUgaW50IGJ1dCB0aGUgRGVsZWdhdGUgY2xhc3MgaW5zdGVhZC4gVGhlIGludGVnZXJzIG11c3QKLSAqICAgb25seSBiZSB1c2VkIGluIHRoZSBBUEkgYmV0d2VlbiB0aGUgbWFpbiBKYXZhIGNsYXNzIGFuZCB0aGUgRGVsZWdhdGUuCi0gKgotICogQHBhcmFtIDxUPiB0aGUgZGVsZWdhdGUgY2xhc3MgdG8gbWFuYWdlCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBEZWxlZ2F0ZU1hbmFnZXI8VD4gewotICAgIHByaXZhdGUgZmluYWwgQ2xhc3M8VD4gbUNsYXNzOwotICAgIHByaXZhdGUgZmluYWwgU3BhcnNlV2Vha0FycmF5PFQ+IG1EZWxlZ2F0ZXMgPSBuZXcgU3BhcnNlV2Vha0FycmF5PFQ+KCk7Ci0gICAgLyoqIGxpc3QgdXNlZCB0byBzdG9yZSBkZWxlZ2F0ZXMgd2hlbiB0aGVpciBtYWluIG9iamVjdCBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGVtLgotICAgICAqIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIFdlYWtSZWZlcmVuY2UgaW4gdGhlIFNwYXJzZVdlYWtBcnJheSBkb2Vzbid0IGdldCBHQydlZAotICAgICAqIEBzZWUgI2FkZE5ld0RlbGVnYXRlKE9iamVjdCkKLSAgICAgKiBAc2VlICNyZW1vdmVKYXZhUmVmZXJlbmNlRm9yKGludCkKLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIExpc3Q8VD4gbUphdmFSZWZlcmVuY2VzID0gbmV3IEFycmF5TGlzdDxUPigpOwotICAgIHByaXZhdGUgaW50IG1EZWxlZ2F0ZUNvdW50ZXIgPSAwOwotCi0gICAgcHVibGljIERlbGVnYXRlTWFuYWdlcihDbGFzczxUPiB0aGVDbGFzcykgewotICAgICAgICBtQ2xhc3MgPSB0aGVDbGFzczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBkZWxlZ2F0ZSBmcm9tIHRoZSBnaXZlbiBuYXRpdmUgaW50LgotICAgICAqIDxwPgotICAgICAqIElmIHRoZSBpbnQgaXMgemVybywgdGhlbiB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiBudWxsLgotICAgICAqIDxwPgotICAgICAqIElmIHRoZSBpbnQgaXMgbm9uIHplcm8gYW5kIHRoZSBkZWxlZ2F0ZSBpcyBub3QgZm91bmQsIHRoaXMgd2lsbCB0aHJvdyBhbiBhc3NlcnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmF0aXZlX29iamVjdCB0aGUgbmF0aXZlIGludC4KLSAgICAgKiBAcmV0dXJuIHRoZSBkZWxlZ2F0ZSBvciBudWxsIGlmIG5vdCBmb3VuZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgVCBnZXREZWxlZ2F0ZShpbnQgbmF0aXZlX29iamVjdCkgewotICAgICAgICBpZiAobmF0aXZlX29iamVjdCA+IDApIHsKLSAgICAgICAgICAgIFQgZGVsZWdhdGUgPSAgbURlbGVnYXRlcy5nZXQobmF0aXZlX29iamVjdCk7Ci0KLSAgICAgICAgICAgIGlmIChEZWJ1Zy5ERUJVRykgewotICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5rbm93biAiICsgbUNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIgd2l0aCBpbnQgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX29iamVjdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhc3NlcnQgZGVsZWdhdGUgIT0gbnVsbDsKLSAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBZGRzIGEgZGVsZWdhdGUgdG8gdGhlIG1hbmFnZXIgYW5kIHJldHVybnMgdGhlIG5hdGl2ZSBpbnQgdXNlZCB0byBpZGVudGlmeSBpdC4KLSAgICAgKiBAcGFyYW0gbmV3RGVsZWdhdGUgdGhlIGRlbGVnYXRlIHRvIGFkZAotICAgICAqIEByZXR1cm4gYSB1bmlxdWUgbmF0aXZlIGludCB0byBpZGVudGlmeSB0aGUgZGVsZWdhdGUKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGFkZE5ld0RlbGVnYXRlKFQgbmV3RGVsZWdhdGUpIHsKLSAgICAgICAgaW50IG5hdGl2ZV9vYmplY3QgPSArK21EZWxlZ2F0ZUNvdW50ZXI7Ci0gICAgICAgIG1EZWxlZ2F0ZXMucHV0KG5hdGl2ZV9vYmplY3QsIG5ld0RlbGVnYXRlKTsKLSAgICAgICAgYXNzZXJ0ICFtSmF2YVJlZmVyZW5jZXMuY29udGFpbnMobmV3RGVsZWdhdGUpOwotICAgICAgICBtSmF2YVJlZmVyZW5jZXMuYWRkKG5ld0RlbGVnYXRlKTsKLQotICAgICAgICBpZiAoRGVidWcuREVCVUcpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTmV3ICIgKyBtQ2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIiB3aXRoIGludCAiICsgbmF0aXZlX29iamVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbmF0aXZlX29iamVjdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdmVzIHRoZSBtYWluIHJlZmVyZW5jZSBvbiB0aGUgZ2l2ZW4gZGVsZWdhdGUuCi0gICAgICogQHBhcmFtIG5hdGl2ZV9vYmplY3QgdGhlIG5hdGl2ZSBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgZGVsZWdhdGUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlSmF2YVJlZmVyZW5jZUZvcihpbnQgbmF0aXZlX29iamVjdCkgewotICAgICAgICBUIGRlbGVnYXRlID0gZ2V0RGVsZWdhdGUobmF0aXZlX29iamVjdCk7Ci0KLSAgICAgICAgaWYgKERlYnVnLkRFQlVHKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbW92aW5nIG1haW4gSmF2YSByZWYgb24gIiArIG1DbGFzcy5nZXRTaW1wbGVOYW1lKCkgKwotICAgICAgICAgICAgICAgICAgICAiIHdpdGggaW50ICIgKyBuYXRpdmVfb2JqZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1KYXZhUmVmZXJlbmNlcy5yZW1vdmUoZGVsZWdhdGUpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9Gb250TG9hZGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvRm9udExvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDhiNjUxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9Gb250TG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsOwotCi1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuVHlwZWZhY2U7Ci0KLWltcG9ydCBqYXZhLmF3dC5Gb250OwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk7Ci0KLS8qKgotICogUHJvdmlkZXMge0BsaW5rIEZvbnR9IG9iamVjdCB0byB0aGUgbGF5b3V0IGxpYi4KLSAqIDxwLz4KLSAqIFRoZSBmb250cyBhcmUgbG9hZGVkIGZyb20gdGhlIFNESyBkaXJlY3RvcnkuIEZhbWlseS9zdHlsZSBtYXBwaW5nIGlzIGRvbmUgYnkgcGFyc2luZyB0aGUKLSAqIGZvbnRzLnhtbCBmaWxlIGxvY2F0ZWQgYWxvbmdzaWRlIHRoZSB0dGYgZmlsZXMuCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBGb250TG9hZGVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9OVFNfU1lTVEVNID0gInN5c3RlbV9mb250cy54bWwiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGT05UU19WRU5ET1IgPSAidmVuZG9yX2ZvbnRzLnhtbCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTlRTX0ZBTExCQUNLID0gImZhbGxiYWNrX2ZvbnRzLnhtbCI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERV9GQU1JTFlTRVQgPSAiZmFtaWx5c2V0IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERV9GQU1JTFkgPSAiZmFtaWx5IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERV9OQU1FID0gIm5hbWUiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT0RFX0ZJTEUgPSAiZmlsZSI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUklCVVRFX1ZBUklBTlQgPSAidmFyaWFudCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJJQlVURV9WQUxVRV9FTEVHQU5UID0gImVsZWdhbnQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGT05UX1NVRkZJWF9OT05FID0gIi50dGYiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGT05UX1NVRkZJWF9SRUdVTEFSID0gIi1SZWd1bGFyLnR0ZiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTlRfU1VGRklYX0JPTEQgPSAiLUJvbGQudHRmIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9OVF9TVUZGSVhfSVRBTElDID0gIi1JdGFsaWMudHRmIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9OVF9TVUZGSVhfQk9MRElUQUxJQyA9ICItQm9sZEl0YWxpYy50dGYiOwotCi0gICAgLy8gVGhpcyBtdXN0IG1hdGNoIHRoZSB2YWx1ZXMgb2YgVHlwZWZhY2Ugc3R5bGVzIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGZvciBpbmRpY2VzIGluIHRoaXMKLSAgICAvLyBhcnJheS4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBBV1RfU1RZTEVTID0gbmV3IGludFtdIHsKLSAgICAgICAgRm9udC5QTEFJTiwKLSAgICAgICAgRm9udC5CT0xELAotICAgICAgICBGb250LklUQUxJQywKLSAgICAgICAgRm9udC5CT0xEIHwgRm9udC5JVEFMSUMKLSAgICB9OwotICAgIHByaXZhdGUgc3RhdGljIGludFtdIERFUklWRV9CT0xEX0lUQUxJQyA9IG5ldyBpbnRbXSB7Ci0gICAgICAgIFR5cGVmYWNlLklUQUxJQywgVHlwZWZhY2UuQk9MRCwgVHlwZWZhY2UuTk9STUFMCi0gICAgfTsKLSAgICBwcml2YXRlIHN0YXRpYyBpbnRbXSBERVJJVkVfSVRBTElDID0gbmV3IGludFtdIHsgVHlwZWZhY2UuTk9STUFMIH07Ci0gICAgcHJpdmF0ZSBzdGF0aWMgaW50W10gREVSSVZFX0JPTEQgPSBuZXcgaW50W10geyBUeXBlZmFjZS5OT1JNQUwgfTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3Q8Rm9udEluZm8+IG1NYWluRm9udHMgPSBuZXcgQXJyYXlMaXN0PEZvbnRJbmZvPigpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3Q8Rm9udEluZm8+IG1GYWxsYmFja0ZvbnRzID0gbmV3IEFycmF5TGlzdDxGb250SW5mbz4oKTsKLQotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Pc0ZvbnRzTG9jYXRpb247Ci0KLSAgICBwdWJsaWMgc3RhdGljIEZvbnRMb2FkZXIgY3JlYXRlKFN0cmluZyBmb250T3NMb2NhdGlvbikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgU0FYUGFyc2VyRmFjdG9yeSBwYXJzZXJGYWN0b3J5ID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICAgICAgICAgIHBhcnNlckZhY3Rvcnkuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0KLSAgICAgICAgICAgIC8vIHBhcnNlIHRoZSBzeXN0ZW0gZm9udHMKLSAgICAgICAgICAgIEZvbnRIYW5kbGVyIGhhbmRsZXIgPSBwYXJzZUZvbnRGaWxlKHBhcnNlckZhY3RvcnksIGZvbnRPc0xvY2F0aW9uLCBGT05UU19TWVNURU0pOwotICAgICAgICAgICAgTGlzdDxGb250SW5mbz4gc3lzdGVtRm9udHMgPSBoYW5kbGVyLmdldEZvbnRMaXN0KCk7Ci0KLQotICAgICAgICAgICAgLy8gcGFyc2UgdGhlIGZhbGxiYWNrIGZvbnRzCi0gICAgICAgICAgICBoYW5kbGVyID0gcGFyc2VGb250RmlsZShwYXJzZXJGYWN0b3J5LCBmb250T3NMb2NhdGlvbiwgRk9OVFNfRkFMTEJBQ0spOwotICAgICAgICAgICAgTGlzdDxGb250SW5mbz4gZmFsbGJhY2tGb250cyA9IGhhbmRsZXIuZ2V0Rm9udExpc3QoKTsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBGb250TG9hZGVyKGZvbnRPc0xvY2F0aW9uLCBzeXN0ZW1Gb250cywgZmFsbGJhY2tGb250cyk7Ci0gICAgICAgIH0gY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gcmV0dXJuIG51bGwgYmVsb3cKLSAgICAgICAgfSBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8vIHJldHVybiBudWxsIGJlbG93Ci0gICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyByZXR1cm4gbnVsbCBiZWxvdwotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyByZXR1cm4gbnVsbCBiZWxvdwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgRm9udEhhbmRsZXIgcGFyc2VGb250RmlsZShTQVhQYXJzZXJGYWN0b3J5IHBhcnNlckZhY3RvcnksCi0gICAgICAgICAgICBTdHJpbmcgZm9udE9zTG9jYXRpb24sIFN0cmluZyBmb250RmlsZU5hbWUpCi0gICAgICAgICAgICB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLQotICAgICAgICBTQVhQYXJzZXIgcGFyc2VyID0gcGFyc2VyRmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLSAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUoZm9udE9zTG9jYXRpb24sIGZvbnRGaWxlTmFtZSk7Ci0KLSAgICAgICAgRm9udEhhbmRsZXIgZGVmaW5pdGlvblBhcnNlciA9IG5ldyBGb250SGFuZGxlcigKLSAgICAgICAgICAgICAgICBmb250T3NMb2NhdGlvbiArIEZpbGUuc2VwYXJhdG9yKTsKLSAgICAgICAgcGFyc2VyLnBhcnNlKG5ldyBGaWxlSW5wdXRTdHJlYW0oZiksIGRlZmluaXRpb25QYXJzZXIpOwotICAgICAgICByZXR1cm4gZGVmaW5pdGlvblBhcnNlcjsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEZvbnRMb2FkZXIoU3RyaW5nIGZvbnRPc0xvY2F0aW9uLAotICAgICAgICAgICAgTGlzdDxGb250SW5mbz4gZm9udExpc3QsIExpc3Q8Rm9udEluZm8+IGZhbGxCYWNrTGlzdCkgewotICAgICAgICBtT3NGb250c0xvY2F0aW9uID0gZm9udE9zTG9jYXRpb247Ci0gICAgICAgIG1NYWluRm9udHMuYWRkQWxsKGZvbnRMaXN0KTsKLSAgICAgICAgbUZhbGxiYWNrRm9udHMuYWRkQWxsKGZhbGxCYWNrTGlzdCk7Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE9zRm9udHNMb2NhdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIG1Pc0ZvbnRzTG9jYXRpb247Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHtAbGluayBGb250fSBvYmplY3QgZ2l2ZW4gYSBmYW1pbHkgbmFtZSBhbmQgYSBzdHlsZSB2YWx1ZSAoY29uc3RhbnQgaW4KLSAgICAgKiB7QGxpbmsgVHlwZWZhY2V9KS4KLSAgICAgKiBAcGFyYW0gZmFtaWx5IHRoZSBmYW1pbHkgbmFtZQotICAgICAqIEBwYXJhbSBzdHlsZSBhIDEtaXRlbSBhcnJheSBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgc3R5bGUuIEJhc2VkIG9uIHRoZSBmb250IGJlaW5nIHJlYWQKLSAgICAgKiAgICAgICAgICAgICAgdGhlIGFjdHVhbCBzdHlsZSBtYXkgYmUgZGlmZmVyZW50LiBUaGUgYXJyYXkgY29udGFpbnMgdGhlIGFjdHVhbCBzdHlsZSBhZnRlcgotICAgICAqICAgICAgICAgICAgICB0aGUgbWV0aG9kIHJldHVybnMuCi0gICAgICogQHJldHVybiB0aGUgZm9udCBvYmplY3Qgb3IgbnVsbCBpZiBubyBtYXRjaCBjb3VsZCBiZSBmb3VuZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIExpc3Q8Rm9udD4gZ2V0Rm9udChTdHJpbmcgZmFtaWx5LCBpbnQgc3R5bGUpIHsKLSAgICAgICAgTGlzdDxGb250PiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PEZvbnQ+KCk7Ci0KLSAgICAgICAgaWYgKGZhbWlseSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLQotICAgICAgICAvLyBnZXQgdGhlIGZvbnQgb2JqZWN0cyBmcm9tIHRoZSBtYWluIGxpc3QgYmFzZWQgb24gZmFtaWx5LgotICAgICAgICBmb3IgKEZvbnRJbmZvIGluZm8gOiBtTWFpbkZvbnRzKSB7Ci0gICAgICAgICAgICBpZiAoaW5mby5mYW1pbGllcy5jb250YWlucyhmYW1pbHkpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChpbmZvLmZvbnRbc3R5bGVdKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGFkZCBhbGwgdGhlIGZhbGxiYWNrIGZvbnRzIGZvciB0aGUgZ2l2ZW4gc3R5bGUKLSAgICAgICAgZm9yIChGb250SW5mbyBpbmZvIDogbUZhbGxiYWNrRm9udHMpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hZGQoaW5mby5mb250W3N0eWxlXSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBMaXN0PEZvbnQ+IGdldEZhbGxiYWNrRm9udHMoaW50IHN0eWxlKSB7Ci0gICAgICAgIExpc3Q8Rm9udD4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxGb250PigpOwotICAgICAgICAvLyBhZGQgYWxsIHRoZSBmYWxsYmFjayBmb250cwotICAgICAgICBmb3IgKEZvbnRJbmZvIGluZm8gOiBtRmFsbGJhY2tGb250cykgewotICAgICAgICAgICAgcmVzdWx0LmFkZChpbmZvLmZvbnRbc3R5bGVdKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgY2xhc3MgRm9udEluZm8gewotICAgICAgICBmaW5hbCBGb250W10gZm9udCA9IG5ldyBGb250WzRdOyAvLyBNYXRjaGVzIHRoZSA0IHR5cGUtZmFjZSBzdHlsZXMuCi0gICAgICAgIGZpbmFsIFNldDxTdHJpbmc+IGZhbWlsaWVzOwotCi0gICAgICAgIEZvbnRJbmZvKCkgewotICAgICAgICAgICAgZmFtaWxpZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBjbGFzcyBGb250SGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU9zRm9udHNMb2NhdGlvbjsKLQotICAgICAgICBwcml2YXRlIEZvbnRJbmZvIG1Gb250SW5mbyA9IG51bGw7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nQnVpbGRlciBtQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICAgIHByaXZhdGUgTGlzdDxGb250SW5mbz4gbUZvbnRMaXN0ID0gbmV3IEFycmF5TGlzdDxGb250SW5mbz4oKTsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ29tcGFjdEZvbnQgPSB0cnVlOwotCi0gICAgICAgIHByaXZhdGUgRm9udEhhbmRsZXIoU3RyaW5nIG9zRm9udHNMb2NhdGlvbikgewotICAgICAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgICAgIG1Pc0ZvbnRzTG9jYXRpb24gPSBvc0ZvbnRzTG9jYXRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgTGlzdDxGb250SW5mbz4gZ2V0Rm9udExpc3QoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUZvbnRMaXN0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAgICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjc3RhcnRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIG9yZy54bWwuc2F4LkF0dHJpYnV0ZXMpCi0gICAgICAgICAqLwotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBuYW1lLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBpZiAoTk9ERV9GQU1JTFlTRVQuZXF1YWxzKGxvY2FsTmFtZSkpIHsKLSAgICAgICAgICAgICAgICBtRm9udExpc3QgPSBuZXcgQXJyYXlMaXN0PEZvbnRJbmZvPigpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChOT0RFX0ZBTUlMWS5lcXVhbHMobG9jYWxOYW1lKSkgewotICAgICAgICAgICAgICAgIGlmIChtRm9udExpc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtRm9udEluZm8gPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoTk9ERV9OQU1FLmVxdWFscyhsb2NhbE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Gb250TGlzdCAhPSBudWxsICYmIG1Gb250SW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Gb250SW5mbyA9IG5ldyBGb250SW5mbygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoTk9ERV9GSUxFLmVxdWFscyhsb2NhbE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Gb250TGlzdCAhPSBudWxsICYmIG1Gb250SW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Gb250SW5mbyA9IG5ldyBGb250SW5mbygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoQVRUUklCVVRFX1ZBTFVFX0VMRUdBTlQuZXF1YWxzKGF0dHJpYnV0ZXMuZ2V0VmFsdWUoQVRUUklCVVRFX1ZBUklBTlQpKSkgewotICAgICAgICAgICAgICAgICAgICBpc0NvbXBhY3RGb250ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaXNDb21wYWN0Rm9udCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtQnVpbGRlci5zZXRMZW5ndGgoMCk7Ci0KLSAgICAgICAgICAgIHN1cGVyLnN0YXJ0RWxlbWVudCh1cmksIGxvY2FsTmFtZSwgbmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiAobm9uLUphdmFkb2MpCi0gICAgICAgICAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNjaGFyYWN0ZXJzKGNoYXJbXSwgaW50LCBpbnQpCi0gICAgICAgICAqLwotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgY2hhcmFjdGVycyhjaGFyW10gY2gsIGludCBzdGFydCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBpZiAoaXNDb21wYWN0Rm9udCkgewotICAgICAgICAgICAgICBtQnVpbGRlci5hcHBlbmQoY2gsIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAgICAgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjZW5kRWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotICAgICAgICAgKi8KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIG5hbWUpIHRocm93cyBTQVhFeGNlcHRpb24gewotICAgICAgICAgICAgaWYgKE5PREVfRkFNSUxZLmVxdWFscyhsb2NhbE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Gb250SW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlmIGhhcyBhIG5vcm1hbCBmb250IGZpbGUsIGFkZCB0byB0aGUgbGlzdAotICAgICAgICAgICAgICAgICAgICBpZiAobUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuTk9STUFMXSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRm9udExpc3QuYWRkKG1Gb250SW5mbyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBtaXNzaW5nIGZvbnQgc3R5bGVzLCBvcmRlciBpcyBpbXBvcnRhbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuQk9MRF9JVEFMSUNdID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlRGVyaXZlZEZvbnQoVHlwZWZhY2UuQk9MRF9JVEFMSUMsIERFUklWRV9CT0xEX0lUQUxJQyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuSVRBTElDXSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZURlcml2ZWRGb250KFR5cGVmYWNlLklUQUxJQywgREVSSVZFX0lUQUxJQyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuQk9MRF0gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVEZXJpdmVkRm9udChUeXBlZmFjZS5CT0xELCBERVJJVkVfQk9MRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBtRm9udEluZm8gPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoTk9ERV9OQU1FLmVxdWFscyhsb2NhbE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gaGFuZGxlIGEgbmV3IG5hbWUgZm9yIGFuIGV4aXN0aW5nIEZvbnQgSW5mbwotICAgICAgICAgICAgICAgIGlmIChtRm9udEluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZmFtaWx5ID0gdHJpbVhtbFdoaXRlc3BhY2VzKG1CdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBtRm9udEluZm8uZmFtaWxpZXMuYWRkKGZhbWlseSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChOT0RFX0ZJTEUuZXF1YWxzKGxvY2FsTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBoYW5kbGUgYSBuZXcgZmlsZSBmb3IgYW4gZXhpc3RpbmcgRm9udCBJbmZvCi0gICAgICAgICAgICAgICAgaWYgKGlzQ29tcGFjdEZvbnQgJiYgbUZvbnRJbmZvICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gdHJpbVhtbFdoaXRlc3BhY2VzKG1CdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBGb250IGZvbnQgPSBnZXRGb250KGZpbGVOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKEZPTlRfU1VGRklYX1JFR1VMQVIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuTk9STUFMXSA9IGZvbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKEZPTlRfU1VGRklYX0JPTEQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuQk9MRF0gPSBmb250OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxlTmFtZS5lbmRzV2l0aChGT05UX1NVRkZJWF9JVEFMSUMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuSVRBTElDXSA9IGZvbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKEZPTlRfU1VGRklYX0JPTERJVEFMSUMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZvbnRJbmZvLmZvbnRbVHlwZWZhY2UuQk9MRF9JVEFMSUNdID0gZm9udDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsZU5hbWUuZW5kc1dpdGgoRk9OVF9TVUZGSVhfTk9ORSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRm9udEluZm8uZm9udFtUeXBlZmFjZS5OT1JNQUxdID0gZm9udDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgRm9udCBnZXRGb250KFN0cmluZyBmaWxlTmFtZSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShtT3NGb250c0xvY2F0aW9uLCBmaWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpbGUuZXhpc3RzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZvbnQuY3JlYXRlRm9udChGb250LlRSVUVUWVBFX0ZPTlQsIGZpbGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgY29tcHV0ZURlcml2ZWRGb250KCBpbnQgdG9Db21wdXRlLCBpbnRbXSBiYXNlZE9uTGlzdCkgewotICAgICAgICAgICAgZm9yIChpbnQgYmFzZWRPbiA6IGJhc2VkT25MaXN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Gb250SW5mby5mb250W2Jhc2VkT25dICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbUZvbnRJbmZvLmZvbnRbdG9Db21wdXRlXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRm9udEluZm8uZm9udFtiYXNlZE9uXS5kZXJpdmVGb250KEFXVF9TVFlMRVNbdG9Db21wdXRlXSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHdlIHJlYWxseSBzaG91bGRuJ3Qgc3RvcCB0aGVyZS4gVGhpcyBtZWFucyB3ZSBkb24ndCBoYXZlIGEgTk9STUFMIGZvbnQuLi4KLSAgICAgICAgICAgIGFzc2VydCBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIHRyaW1YbWxXaGl0ZXNwYWNlcyhTdHJpbmcgdmFsdWUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGxvb2sgZm9yIGNhcnJpYWdlIHJldHVybiBhbmQgcmVwbGFjZSBhbGwgd2hpdGVzcGFjZSBhcm91bmQgaXQgYnkganVzdCAxIHNwYWNlLgotICAgICAgICAgICAgaW50IGluZGV4OwotCi0gICAgICAgICAgICB3aGlsZSAoKGluZGV4ID0gdmFsdWUuaW5kZXhPZignXG4nKSkgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBsb29rIGZvciB3aGl0ZXNwYWNlIG9uIGVhY2ggc2lkZQotICAgICAgICAgICAgICAgIGludCBsZWZ0ID0gaW5kZXggLSAxOwotICAgICAgICAgICAgICAgIHdoaWxlIChsZWZ0ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKENoYXJhY3Rlci5pc1doaXRlc3BhY2UodmFsdWUuY2hhckF0KGxlZnQpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC0tOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpbnQgcmlnaHQgPSBpbmRleCArIDE7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0gdmFsdWUubGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHJpZ2h0IDwgY291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKENoYXJhY3Rlci5pc1doaXRlc3BhY2UodmFsdWUuY2hhckF0KHJpZ2h0KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0Kys7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgYmV0d2VlbiBsZWZ0IGFuZCByaWdodCAobm9uIGluY2x1c2l2ZSkgYW5kIHJlcGxhY2UgYnkgYSBzaW5nbGUgc3BhY2UuCi0gICAgICAgICAgICAgICAgU3RyaW5nIGxlZnRTdHJpbmcgPSBudWxsOwotICAgICAgICAgICAgICAgIGlmIChsZWZ0ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbGVmdFN0cmluZyA9IHZhbHVlLnN1YnN0cmluZygwLCBsZWZ0ICsgMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFN0cmluZyByaWdodFN0cmluZyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0IDwgY291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmlnaHRTdHJpbmcgPSB2YWx1ZS5zdWJzdHJpbmcocmlnaHQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChsZWZ0U3RyaW5nICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsZWZ0U3RyaW5nOwotICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRTdHJpbmcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gIiAiICsgcmlnaHRTdHJpbmc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJpZ2h0U3RyaW5nICE9IG51bGwgPyByaWdodFN0cmluZyA6ICIiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gbm93IHdlIHVuLWVzY2FwZSB0aGUgc3RyaW5nCi0gICAgICAgICAgICBpbnQgbGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7Ci0gICAgICAgICAgICBjaGFyW10gYnVmZmVyID0gdmFsdWUudG9DaGFyQXJyYXkoKTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbGVuZ3RoIDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJbaSsxXSA9PSAnbicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgdGhlIGNoYXIgd2l0aCBcbgotICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2krMV0gPSAnXG4nOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0IHRoZSByZXN0IG9mIHRoZSBidWZmZXIgc2luY2Ugd2UgZ28gZnJvbSAyIHRvIDEgY2hhcgotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1ZmZlciwgaSsxLCBidWZmZXIsIGksIGxlbmd0aCAtIGkgLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLS07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhidWZmZXIsIDAsIGxlbmd0aCk7Ci0gICAgICAgIH0KLQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9HY1NuYXBzaG90LmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvR2NTbmFwc2hvdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWQ2YjFhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9HY1NuYXBzaG90LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwX0RlbGVnYXRlOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0RjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlZ2lvbjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlZ2lvbl9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlNoYWRlcl9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlhmZXJtb2RlX0RlbGVnYXRlOwotCi1pbXBvcnQgamF2YS5hd3QuQWxwaGFDb21wb3NpdGU7Ci1pbXBvcnQgamF2YS5hd3QuQ29sb3I7Ci1pbXBvcnQgamF2YS5hd3QuQ29tcG9zaXRlOwotaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzMkQ7Ci1pbXBvcnQgamF2YS5hd3QuUmVuZGVyaW5nSGludHM7Ci1pbXBvcnQgamF2YS5hd3QuU2hhcGU7Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5BZmZpbmVUcmFuc2Zvcm07Ci1pbXBvcnQgamF2YS5hd3QuZ2VvbS5BcmVhOwotaW1wb3J0IGphdmEuYXd0Lmdlb20uUmVjdGFuZ2xlMkQ7Ci1pbXBvcnQgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi0vKioKLSAqIENsYXNzIHJlcHJlc2VudGluZyBhIGdyYXBoaWNzIGNvbnRleHQgc25hcHNob3QsIGFzIHdlbGwgYXMgYSBjb250ZXh0IHN0YWNrIGFzIGEgbGlua2VkIGxpc3QuCi0gKiA8cD4KLSAqIFRoaXMgaXMgYmFzZWQgb24gdG9wIG9mIHtAbGluayBHcmFwaGljczJEfSBidXQgY2FuIG9wZXJhdGUgaW5kZXBlbmRlbnRseSBpZiBub25lIGFyZSBhdmFpbGFibGUKLSAqIHlldCB3aGVuIHNldHRpbmcgdHJhbnNmb3JtcyBhbmQgY2xpcCBpbmZvcm1hdGlvbi4KLSAqIDxwPgotICogVGhpcyBhbGxvd3MgZm9yIGRyYXdpbmcgdGhyb3VnaCB7QGxpbmsgI2RyYXcoRHJhd2FibGUsIFBhaW50X0RlbGVnYXRlKX0gYW5kCi0gKiB7QGxpbmsgI2RyYXcoRHJhd2FibGUsIFBhaW50X0RlbGVnYXRlKX0KLSAqCi0gKiBIYW5kbGluZyBvZiBsYXllcnMgKGNyZWF0ZWQgd2l0aCB7QGxpbmsgQ2FudmFzI3NhdmVMYXllcihSZWN0RiwgUGFpbnQsIGludCl9KSBpcyBoYW5kbGVkIHRocm91Z2gKLSAqIGEgbGlzdCBvZiBHcmFwaGljczJEIGZvciBlYWNoIGxheWVycy4gVGhlIGNsYXNzIGFjdHVhbGx5IG1haW50YWlucyBhIGxpc3Qgb2Yge0BsaW5rIExheWVyfQotICogZm9yIGVhY2ggbGF5ZXIuIERvaW5nIGEgc2F2ZSgpIHdpbGwgZHVwbGljYXRlIHRoaXMgbGlzdCBzbyB0aGF0IGVhY2ggZ3JhcGhpY3MyRCBvYmplY3QKLSAqICh7QGxpbmsgTGF5ZXIjZ2V0R3JhcGhpY3MoKX0pIGlzIGNvbmZpZ3VyZWQgb25seSBmb3IgdGhlIG5ldyBzbmFwc2hvdC4KLSAqLwotcHVibGljIGNsYXNzIEdjU25hcHNob3QgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBHY1NuYXBzaG90IG1QcmV2aW91czsKLSAgICBwcml2YXRlIGZpbmFsIGludCBtRmxhZ3M7Ci0KLSAgICAvKiogbGlzdCBvZiBsYXllcnMuIFRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0IGlzIGFsd2F5cyB0aGUgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8TGF5ZXI+IG1MYXllcnMgPSBuZXcgQXJyYXlMaXN0PExheWVyPigpOwotCi0gICAgLyoqIHRlbXAgdHJhbnNmb3JtIGluIGNhc2UgdHJhbnNmb3JtYXRpb24gYXJlIHNldCBiZWZvcmUgYSBHcmFwaGljczJEIGV4aXN0cyAqLwotICAgIHByaXZhdGUgQWZmaW5lVHJhbnNmb3JtIG1UcmFuc2Zvcm0gPSBudWxsOwotICAgIC8qKiB0ZW1wIGNsaXAgaW4gY2FzZSBjbGlwcGluZyBpcyBzZXQgYmVmb3JlIGEgR3JhcGhpY3MyRCBleGlzdHMgKi8KLSAgICBwcml2YXRlIEFyZWEgbUNsaXAgPSBudWxsOwotCi0gICAgLy8gbG9jYWwgbGF5ZXIgZGF0YQotICAgIC8qKiBhIGxvY2FsIGxheWVyIGNyZWF0ZWQgd2l0aCB7QGxpbmsgQ2FudmFzI3NhdmVMYXllcihSZWN0RiwgUGFpbnQsIGludCl9LgotICAgICAqIElmIHRoaXMgaXMgbnVsbCwgdGhpcyBkb2VzIG5vdCBtZWFuIHRoZXJlJ3Mgbm8gbGF5ZXIsIGp1c3QgdGhhdCB0aGUgc25hcHNob3QgaXMgbm90IHRoZQotICAgICAqIG9uZSB0aGF0IGNyZWF0ZWQgdGhlIGxheWVyLgotICAgICAqIEBzZWUgI2dldExheWVyU25hcHNob3QoKQotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgTGF5ZXIgbUxvY2FsTGF5ZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBQYWludF9EZWxlZ2F0ZSBtTG9jYWxMYXllclBhaW50OwotICAgIHByaXZhdGUgZmluYWwgUmVjdCBtTGF5ZXJCb3VuZHM7Ci0KLSAgICBwdWJsaWMgaW50ZXJmYWNlIERyYXdhYmxlIHsKLSAgICAgICAgdm9pZCBkcmF3KEdyYXBoaWNzMkQgZ3JhcGhpY3MsIFBhaW50X0RlbGVnYXRlIHBhaW50KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDbGFzcyBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGEgbGF5ZXIuCi0gICAgICoKLSAgICAgKiBUaGlzIGNvbnRhaW5zIGdyYXBoaWNzLCBiaXRtYXAgYW5kIGxheWVyIGluZm9ybWF0aW9uLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIExheWVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBHcmFwaGljczJEIG1HcmFwaGljczsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBCaXRtYXBfRGVsZWdhdGUgbUJpdG1hcDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBCdWZmZXJlZEltYWdlIG1JbWFnZTsKLSAgICAgICAgLyoqIHRoZSBmbGFncyB0aGF0IHdlcmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGxheWVyLiBUaGlzIGlzIG5ldmVyIGNoYW5nZWQsIGFuZCBwYXNzZWQKLSAgICAgICAgICogYXMgaXMgd2hlbiB7QGxpbmsgI21ha2VDb3B5KCl9IGlzIGNhbGxlZCAqLwotICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtRmxhZ3M7Ci0gICAgICAgIC8qKiB0aGUgb3JpZ2luYWwgY29udGVudCBvZiB0aGUgbGF5ZXIgd2hlbiB0aGUgbmV4dCBvYmplY3Qgd2FzIGNyZWF0ZWQuIFRoaXMgaXMgbm90Ci0gICAgICAgICAqIHBhc3NlZCBpbiB7QGxpbmsgI21ha2VDb3B5KCl9IGFuZCBpbnN0ZWFkIGlzIHJlY3JlYXRlZCB3aGVuIGEgbmV3IGxheWVyIGlzIGFkZGVkCi0gICAgICAgICAqIChkZXBlbmRpbmcgb24gaXRzIGZsYWdzKSAqLwotICAgICAgICBwcml2YXRlIEJ1ZmZlcmVkSW1hZ2UgbU9yaWdpbmFsQ29weTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIGxheWVyIHdpdGggYSBncmFwaGljcyBhbmQgYSBiaXRtYXAuIFRoaXMgaXMgb25seSB1c2VkIHRvIGNyZWF0ZQotICAgICAgICAgKiB0aGUgYmFzZSBsYXllci4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGdyYXBoaWNzIHRoZSBncmFwaGljcwotICAgICAgICAgKiBAcGFyYW0gYml0bWFwIHRoZSBiaXRtYXAKLSAgICAgICAgICovCi0gICAgICAgIExheWVyKEdyYXBoaWNzMkQgZ3JhcGhpY3MsIEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXApIHsKLSAgICAgICAgICAgIG1HcmFwaGljcyA9IGdyYXBoaWNzOwotICAgICAgICAgICAgbUJpdG1hcCA9IGJpdG1hcDsKLSAgICAgICAgICAgIG1JbWFnZSA9IG1CaXRtYXAuZ2V0SW1hZ2UoKTsKLSAgICAgICAgICAgIG1GbGFncyA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIGxheWVyIHdpdGggYSBncmFwaGljcyBhbmQgYW4gaW1hZ2UuIElmIHRoZSBpbWFnZSBiZWxvbmdzIHRvIGEKLSAgICAgICAgICoge0BsaW5rIEJpdG1hcF9EZWxlZ2F0ZX0gKGNhc2Ugb2YgdGhlIGJhc2UgbGF5ZXIpLCB0aGVuCi0gICAgICAgICAqIHtAbGluayBMYXllciNMYXllcihHcmFwaGljczJELCBCaXRtYXBfRGVsZWdhdGUpfSBzaG91bGQgYmUgdXNlZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGdyYXBoaWNzIHRoZSBncmFwaGljcyB0aGUgbmV3IGdyYXBoaWNzIGZvciB0aGlzIGxheWVyCi0gICAgICAgICAqIEBwYXJhbSBpbWFnZSB0aGUgaW1hZ2UgdGhlIGltYWdlIGZyb20gd2hpY2ggdGhlIGdyYXBoaWNzIGNhbWUKLSAgICAgICAgICogQHBhcmFtIGZsYWdzIHRoZSBmbGFncyB0aGF0IHdlcmUgdXNlZCB0byBzYXZlIHRoaXMgbGF5ZXIKLSAgICAgICAgICovCi0gICAgICAgIExheWVyKEdyYXBoaWNzMkQgZ3JhcGhpY3MsIEJ1ZmZlcmVkSW1hZ2UgaW1hZ2UsIGludCBmbGFncykgewotICAgICAgICAgICAgbUdyYXBoaWNzID0gZ3JhcGhpY3M7Ci0gICAgICAgICAgICBtQml0bWFwID0gbnVsbDsKLSAgICAgICAgICAgIG1JbWFnZSA9IGltYWdlOwotICAgICAgICAgICAgbUZsYWdzID0gZmxhZ3M7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiogVGhlIEdyYXBoaWNzMkQsIGd1YXJhbnRlZWQgdG8gYmUgbm9uIG51bGwgKi8KLSAgICAgICAgR3JhcGhpY3MyRCBnZXRHcmFwaGljcygpIHsKLSAgICAgICAgICAgIHJldHVybiBtR3JhcGhpY3M7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiogVGhlIEJ1ZmZlcmVkSW1hZ2UsIGd1YXJhbnRlZWQgdG8gYmUgbm9uIG51bGwgKi8KLSAgICAgICAgQnVmZmVyZWRJbWFnZSBnZXRJbWFnZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtSW1hZ2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiogUmV0dXJucyB0aGUgbGF5ZXIgc2F2ZSBmbGFncy4gVGhpcyBpcyBvbmx5IHZhbGlkIGZvciBhZGRpdGlvbmFsIGxheWVycy4KLSAgICAgICAgICogRm9yIHRoZSBiYXNlIGxheWVyIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIDA7Ci0gICAgICAgICAqIEZvciBhIGdpdmVuIGxheWVyLCBhbGwgZnVydGhlciBjb3BpZXMgb2YgdGhpcyB7QGxpbmsgTGF5ZXJ9IG9iamVjdCBpbiBuZXcgc25hcHNob3RzCi0gICAgICAgICAqIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgc2FtZSB2YWx1ZS4KLSAgICAgICAgICovCi0gICAgICAgIGludCBnZXRGbGFncygpIHsKLSAgICAgICAgICAgIHJldHVybiBtRmxhZ3M7Ci0gICAgICAgIH0KLQotICAgICAgICBMYXllciBtYWtlQ29weSgpIHsKLSAgICAgICAgICAgIGlmIChtQml0bWFwICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExheWVyKChHcmFwaGljczJEKSBtR3JhcGhpY3MuY3JlYXRlKCksIG1CaXRtYXApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbmV3IExheWVyKChHcmFwaGljczJEKSBtR3JhcGhpY3MuY3JlYXRlKCksIG1JbWFnZSwgbUZsYWdzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKiBzZXRzIGFuIG9wdGlvbmFsIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGNvbnRlbnQgdG8gYmUgdXNlZCBkdXJpbmcgcmVzdG9yZSAqLwotICAgICAgICB2b2lkIHNldE9yaWdpbmFsQ29weShCdWZmZXJlZEltYWdlIGltYWdlKSB7Ci0gICAgICAgICAgICBtT3JpZ2luYWxDb3B5ID0gaW1hZ2U7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWZmZXJlZEltYWdlIGdldE9yaWdpbmFsQ29weSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtT3JpZ2luYWxDb3B5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjaGFuZ2UoKSB7Ci0gICAgICAgICAgICBpZiAobUJpdG1hcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUJpdG1hcC5jaGFuZ2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSBjbGlwIGZvciB0aGUgZ3JhcGhpY3MyRCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXllci4KLSAgICAgICAgICogVGhpcyBzaG91bGQgYmUgdXNlZCBvdmVyIHRoZSBub3JtYWwgR3JhcGhpY3MyRCBzZXRDbGlwIG1ldGhvZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGNsaXBTaGFwZSB0aGUgc2hhcGUgdG8gdXNlIGEgdGhlIGNsaXAgc2hhcGUuCi0gICAgICAgICAqLwotICAgICAgICB2b2lkIHNldENsaXAoU2hhcGUgY2xpcFNoYXBlKSB7Ci0gICAgICAgICAgICAvLyBiZWNhdXNlIHNldENsaXAgaXMgb25seSBndWFyYW50ZWVkIHRvIHdvcmsgd2l0aCByZWN0YW5nbGUgc2hhcGUsCi0gICAgICAgICAgICAvLyBmaXJzdCByZXNldCB0aGUgY2xpcCB0byBtYXggYW5kIHRoZW4gaW50ZXJzZWN0IHRoZSBjdXJyZW50IChlbXB0eSkKLSAgICAgICAgICAgIC8vIGNsaXAgd2l0aCB0aGUgc2hhcC4KLSAgICAgICAgICAgIG1HcmFwaGljcy5zZXRDbGlwKG51bGwpOwotICAgICAgICAgICAgbUdyYXBoaWNzLmNsaXAoY2xpcFNoYXBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDbGlwcyB0aGUgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gc2hhcGUuIFRoaXMgcGVyZm9ybXMgYW4gaW50ZXJzZWN0IGJldHdlZW4gdGhlIGN1cnJlbnQKLSAgICAgICAgICogY2xpcCBzaGFwZSBhbmQgdGhlIGdpdmVuIHNoYXBlLgotICAgICAgICAgKiBAcGFyYW0gc2hhcGUgdGhlIG5ldyBjbGlwIHNoYXBlLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgY2xpcChTaGFwZSBzaGFwZSkgewotICAgICAgICAgICAgbUdyYXBoaWNzLmNsaXAoc2hhcGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyB0aGUgcm9vdCBzbmFwc2hvdCBhc3NvY2lhdGluZyBpdCB3aXRoIGEgZ2l2ZW4gYml0bWFwLgotICAgICAqIDxwPgotICAgICAqIElmIDx2YXI+Yml0bWFwPC92YXI+IGlzIG51bGwsIHRoZW4ge0BsaW5rIEdjU25hcHNob3Qjc2V0Qml0bWFwKEJpdG1hcF9EZWxlZ2F0ZSl9IG11c3QgYmUKLSAgICAgKiBjYWxsZWQgYmVmb3JlIHRoZSBzbmFwc2hvdCBjYW4gYmUgdXNlZCB0byBkcmF3LiBUcmFuc2Zvcm0gYW5kIGNsaXAgb3BlcmF0aW9ucyBhcmUgcGVybWl0dGVkCi0gICAgICogYmVmb3JlLgotICAgICAqCi0gICAgICogQHBhcmFtIGltYWdlIHRoZSBpbWFnZSB0byBhc3NvY2lhdGUgdG8gdGhlIHNuYXBzaG90IG9yIG51bGwuCi0gICAgICogQHJldHVybiB0aGUgcm9vdCBzbmFwc2hvdAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgR2NTbmFwc2hvdCBjcmVhdGVEZWZhdWx0U25hcHNob3QoQml0bWFwX0RlbGVnYXRlIGJpdG1hcCkgewotICAgICAgICBHY1NuYXBzaG90IHNuYXBzaG90ID0gbmV3IEdjU25hcHNob3QoKTsKLSAgICAgICAgaWYgKGJpdG1hcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzbmFwc2hvdC5zZXRCaXRtYXAoYml0bWFwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzbmFwc2hvdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTYXZlcyB0aGUgY3VycmVudCBzdGF0ZSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZsYWdzIGFuZCByZXR1cm5zIHRoZSBuZXcgY3VycmVudCBzbmFwc2hvdC4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB7QGxpbmsgQ2FudmFzI3NhdmUoaW50KX0KLSAgICAgKgotICAgICAqIEBwYXJhbSBmbGFncyB0aGUgc2F2ZSBmbGFncy4KLSAgICAgKiBAcmV0dXJuIHRoZSBuZXcgc25hcHNob3QKLSAgICAgKgotICAgICAqIEBzZWUgQ2FudmFzI3NhdmUoaW50KQotICAgICAqLwotICAgIHB1YmxpYyBHY1NuYXBzaG90IHNhdmUoaW50IGZsYWdzKSB7Ci0gICAgICAgIHJldHVybiBuZXcgR2NTbmFwc2hvdCh0aGlzLCBudWxsIC8qbGF5ZXJib3VuZHMqLywgbnVsbCAvKnBhaW50Ki8sIGZsYWdzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTYXZlcyB0aGUgY3VycmVudCBzdGF0ZSBhbmQgY3JlYXRlcyBhIG5ldyBsYXllciwgYW5kIHJldHVybnMgdGhlIG5ldyBjdXJyZW50IHNuYXBzaG90LgotICAgICAqIDxwLz4KLSAgICAgKiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHtAbGluayBDYW52YXMjc2F2ZUxheWVyKFJlY3RGLCBQYWludCwgaW50KX0KLSAgICAgKgotICAgICAqIEBwYXJhbSBsYXllckJvdW5kcyB0aGUgbGF5ZXIgYm91bmRzCi0gICAgICogQHBhcmFtIHBhaW50IHRoZSBQYWludCBpbmZvcm1hdGlvbiB1c2VkIHRvIGJsaXQgdGhlIGxheWVyIGJhY2sgaW50byB0aGUgbGF5ZXJzIHVuZGVybmVhdGgKLSAgICAgKiAgICAgICAgICB1cG9uIHJlc3RvcmUKLSAgICAgKiBAcGFyYW0gZmxhZ3MgdGhlIHNhdmUgZmxhZ3MuCi0gICAgICogQHJldHVybiB0aGUgbmV3IHNuYXBzaG90Ci0gICAgICoKLSAgICAgKiBAc2VlIENhbnZhcyNzYXZlTGF5ZXIoUmVjdEYsIFBhaW50LCBpbnQpCi0gICAgICovCi0gICAgcHVibGljIEdjU25hcHNob3Qgc2F2ZUxheWVyKFJlY3RGIGxheWVyQm91bmRzLCBQYWludF9EZWxlZ2F0ZSBwYWludCwgaW50IGZsYWdzKSB7Ci0gICAgICAgIHJldHVybiBuZXcgR2NTbmFwc2hvdCh0aGlzLCBsYXllckJvdW5kcywgcGFpbnQsIGZsYWdzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIHRoZSByb290IHNuYXBzaG90LgotICAgICAqIHtAbGluayAjc2V0R3JhcGhpY3MyRChHcmFwaGljczJEKX0gd2lsbCBoYXZlIHRvIGJlIGNhbGxlZCBvbiBpdCB3aGVuIHBvc3NpYmxlLgotICAgICAqLwotICAgIHByaXZhdGUgR2NTbmFwc2hvdCgpIHsKLSAgICAgICAgbVByZXZpb3VzID0gbnVsbDsKLSAgICAgICAgbUZsYWdzID0gMDsKLSAgICAgICAgbUxvY2FsTGF5ZXIgPSBudWxsOwotICAgICAgICBtTG9jYWxMYXllclBhaW50ID0gbnVsbDsKLSAgICAgICAgbUxheWVyQm91bmRzID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBHY1NuYXBzaG90fSBvbiB0b3Agb2YgYW5vdGhlciBvbmUsIHdpdGggYSBsYXllciBkYXRhIHRvIGJlIHJlc3RvcmVkCi0gICAgICogaW50byB0aGUgbWFpbiBncmFwaGljcyB3aGVuIHtAbGluayAjcmVzdG9yZSgpfSBpcyBjYWxsZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJldmlvdXMgdGhlIHByZXZpb3VzIHNuYXBzaG90IGhlYWQuCi0gICAgICogQHBhcmFtIGxheWVyQm91bmRzIHRoZSByZWdpb24gb2YgdGhlIGxheWVyLiBPcHRpb25hbCwgaWYgbnVsbCwgdGhpcyBpcyBhIG5vcm1hbCBzYXZlKCkKLSAgICAgKiBAcGFyYW0gcGFpbnQgdGhlIFBhaW50IGluZm9ybWF0aW9uIHVzZWQgdG8gYmxpdCB0aGUgbGF5ZXIgYmFjayBpbnRvIHRoZSBsYXllcnMgdW5kZXJuZWF0aAotICAgICAqICAgICAgICAgIHVwb24gcmVzdG9yZQotICAgICAqIEBwYXJhbSBmbGFncyB0aGUgZmxhZ3MgcmVnYXJkaW5nIHdoYXQgc2hvdWxkIGJlIHNhdmVkLgotICAgICAqLwotICAgIHByaXZhdGUgR2NTbmFwc2hvdChHY1NuYXBzaG90IHByZXZpb3VzLCBSZWN0RiBsYXllckJvdW5kcywgUGFpbnRfRGVsZWdhdGUgcGFpbnQsIGludCBmbGFncykgewotICAgICAgICBhc3NlcnQgcHJldmlvdXMgIT0gbnVsbDsKLSAgICAgICAgbVByZXZpb3VzID0gcHJldmlvdXM7Ci0gICAgICAgIG1GbGFncyA9IGZsYWdzOwotCi0gICAgICAgIC8vIG1ha2UgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGxheWVycyBiZWZvcmUgYWRkaW5nIHRoZSBuZXcgb25lLgotICAgICAgICAvLyBUaGlzIGtlZXBzIHRoZSBzYW1lIEJ1ZmZlcmVkSW1hZ2UgcmVmZXJlbmNlIGJ1dCBjcmVhdGVzIG5ldyBHcmFwaGljczJEIGZvciB0aGlzCi0gICAgICAgIC8vIHNuYXBzaG90LgotICAgICAgICAvLyBJdCBkb2VzIG5vdCBjb3B5IHdoYXRldmVyIG9yaWdpbmFsIGNvcHkgdGhlIGxheWVycyBoYXZlLCBhcyB0aGV5IHdpbGwgYmUgZG9uZQotICAgICAgICAvLyBvbmx5IGlmIHRoZSBuZXcgbGF5ZXIgZG9lc24ndCBjbGlwIGRyYXdpbmcgdG8gaXRzZWxmLgotICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbVByZXZpb3VzLm1MYXllcnMpIHsKLSAgICAgICAgICAgIG1MYXllcnMuYWRkKGxheWVyLm1ha2VDb3B5KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxheWVyQm91bmRzICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIGdldCB0aGUgY3VycmVudCB0cmFuc2Zvcm0KLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBtTGF5ZXJzLmdldCgwKS5nZXRHcmFwaGljcygpLmdldFRyYW5zZm9ybSgpOwotCi0gICAgICAgICAgICAvLyB0cmFuc2Zvcm0gdGhlIGxheWVyQm91bmRzIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNmb3JtIGFuZCBzdG9yZXMgaXQgaW50byBhIGludCByZWN0Ci0gICAgICAgICAgICBSZWN0RiByZWN0MiA9IG5ldyBSZWN0RigpOwotICAgICAgICAgICAgbWFwUmVjdChtYXRyaXgsIHJlY3QyLCBsYXllckJvdW5kcyk7Ci0gICAgICAgICAgICBtTGF5ZXJCb3VuZHMgPSBuZXcgUmVjdCgpOwotICAgICAgICAgICAgcmVjdDIucm91bmQobUxheWVyQm91bmRzKTsKLQotICAgICAgICAgICAgLy8gZ2V0IHRoZSBiYXNlIGxheWVyIChhbHdheXMgYXQgaW5kZXggMCkKLSAgICAgICAgICAgIExheWVyIGJhc2VMYXllciA9IG1MYXllcnMuZ2V0KDApOwotCi0gICAgICAgICAgICAvLyBjcmVhdGUgdGhlIGltYWdlIGZvciB0aGUgbGF5ZXIKLSAgICAgICAgICAgIEJ1ZmZlcmVkSW1hZ2UgbGF5ZXJJbWFnZSA9IG5ldyBCdWZmZXJlZEltYWdlKAotICAgICAgICAgICAgICAgICAgICBiYXNlTGF5ZXIuZ2V0SW1hZ2UoKS5nZXRXaWR0aCgpLAotICAgICAgICAgICAgICAgICAgICBiYXNlTGF5ZXIuZ2V0SW1hZ2UoKS5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgKG1GbGFncyAmIENhbnZhcy5IQVNfQUxQSEFfTEFZRVJfU0FWRV9GTEFHKSAhPSAwID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0IgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX1JHQik7Ci0KLSAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGdyYXBoaWNzIGZvciBpdCBzbyB0aGF0IGRyYXdpbmcgY2FuIGJlIGRvbmUuCi0gICAgICAgICAgICBHcmFwaGljczJEIGxheWVyR3JhcGhpY3MgPSBsYXllckltYWdlLmNyZWF0ZUdyYXBoaWNzKCk7Ci0KLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBsYXllciBpbmhlcml0cyB0aGUgY3VycmVudCBjb250ZXh0IGZvciB0cmFuc2Zvcm0gYW5kIGNsaXAsCi0gICAgICAgICAgICAvLyBzZXQgdGhlbSB0byBvbmUgZnJvbSB0aGUgYmFzZSBsYXllci4KLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdXJyZW50TXR4ID0gYmFzZUxheWVyLmdldEdyYXBoaWNzKCkuZ2V0VHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICBsYXllckdyYXBoaWNzLnNldFRyYW5zZm9ybShjdXJyZW50TXR4KTsKLQotICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGxheWVyIGZvciB0aGlzIG5ldyBsYXllciBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IGF0IHRoZSBlbmQuCi0gICAgICAgICAgICBtTGF5ZXJzLmFkZChtTG9jYWxMYXllciA9IG5ldyBMYXllcihsYXllckdyYXBoaWNzLCBsYXllckltYWdlLCBmbGFncykpOwotCi0gICAgICAgICAgICAvLyBzZXQgdGhlIGNsaXAgb24gaXQuCi0gICAgICAgICAgICBTaGFwZSBjdXJyZW50Q2xpcCA9IGJhc2VMYXllci5nZXRHcmFwaGljcygpLmdldENsaXAoKTsKLSAgICAgICAgICAgIG1Mb2NhbExheWVyLnNldENsaXAoY3VycmVudENsaXApOwotCi0gICAgICAgICAgICAvLyBpZiB0aGUgZHJhd2luZyBpcyBub3QgY2xpcHBlZCB0byB0aGUgbG9jYWwgbGF5ZXIgb25seSwgd2Ugc2F2ZSB0aGUgY3VycmVudCBjb250ZW50Ci0gICAgICAgICAgICAvLyBvZiBhbGwgb3RoZXIgbGF5ZXJzLiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBwYXJ0IHRoYXQgd2lsbCBhY3R1YWxseQotICAgICAgICAgICAgLy8gYmUgZHJhd24sIHNvIHdlIGNyZWF0ZSBhcyBzbWFsbCBiaXRtYXBzIGFzIHdlIGNhbi4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gZXJhc2UgdGhlIGRyYXdpbmcgdGhhdCBnb2VzIGluIHRoZSBsYXllcnMgYmVsb3cgdGhhdCB3aWxsCi0gICAgICAgICAgICAvLyBiZSBjb21pbmcgZnJvbSB0aGUgbGF5ZXIgaXRzZWxmLgotICAgICAgICAgICAgaWYgKChtRmxhZ3MgJiBDYW52YXMuQ0xJUF9UT19MQVlFUl9TQVZFX0ZMQUcpID09IDApIHsKLSAgICAgICAgICAgICAgICBpbnQgdyA9IG1MYXllckJvdW5kcy53aWR0aCgpOwotICAgICAgICAgICAgICAgIGludCBoID0gbUxheWVyQm91bmRzLmhlaWdodCgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG1MYXllcnMuc2l6ZSgpIC0gMSA7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBMYXllciBsYXllciA9IG1MYXllcnMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICBCdWZmZXJlZEltYWdlIGltYWdlID0gbmV3IEJ1ZmZlcmVkSW1hZ2UodywgaCwgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCKTsKLSAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3MyRCBncmFwaGljcyA9IGltYWdlLmNyZWF0ZUdyYXBoaWNzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmRyYXdJbWFnZShsYXllci5nZXRJbWFnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHcsIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxheWVyQm91bmRzLmxlZnQsIG1MYXllckJvdW5kcy50b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGF5ZXJCb3VuZHMucmlnaHQsIG1MYXllckJvdW5kcy5ib3R0b20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0T3JpZ2luYWxDb3B5KGltYWdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtTG9jYWxMYXllciA9IG51bGw7Ci0gICAgICAgICAgICBtTGF5ZXJCb3VuZHMgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgbUxvY2FsTGF5ZXJQYWludCAgPSBwYWludDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbUxheWVycykgewotICAgICAgICAgICAgbGF5ZXIuZ2V0R3JhcGhpY3MoKS5kaXNwb3NlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVByZXZpb3VzICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1QcmV2aW91cy5kaXNwb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXN0b3JlcyB0aGUgdG9wIHtAbGluayBHY1NuYXBzaG90fSwgYW5kIHJldHVybnMgdGhlIG5leHQgb25lLgotICAgICAqLwotICAgIHB1YmxpYyBHY1NuYXBzaG90IHJlc3RvcmUoKSB7Ci0gICAgICAgIHJldHVybiBkb1Jlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXN0b3JlcyB0aGUge0BsaW5rIEdjU25hcHNob3R9IHRvIDx2YXI+c2F2ZUNvdW50PC92YXI+LgotICAgICAqIEBwYXJhbSBzYXZlQ291bnQgdGhlIHNhdmVDb3VudCBvciAtMSB0byBvbmx5IHJlc3RvcmUgMS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIG5ldyBoZWFkIG9mIHRoZSBHYyBzbmFwc2hvdCBzdGFjay4KLSAgICAgKi8KLSAgICBwdWJsaWMgR2NTbmFwc2hvdCByZXN0b3JlVG8oaW50IHNhdmVDb3VudCkgewotICAgICAgICByZXR1cm4gZG9SZXN0b3JlVG8oc2l6ZSgpLCBzYXZlQ291bnQpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgc2l6ZSgpIHsKLSAgICAgICAgaWYgKG1QcmV2aW91cyAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVByZXZpb3VzLnNpemUoKSArIDE7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBMaW5rIHRoZSBzbmFwc2hvdCB0byBhIEJpdG1hcF9EZWxlZ2F0ZS4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhpcyBpcyBvbmx5IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgc25hcHNob3Qgd2FzIGNyZWF0ZWQgd2l0aCBhIG51bGwgaW1hZ2Ugd2hlbiBjYWxsaW5nCi0gICAgICoge0BsaW5rICNjcmVhdGVEZWZhdWx0U25hcHNob3QoQml0bWFwX0RlbGVnYXRlKX0sIGFuZCBpcyB0aGVyZWZvcmUgbm90IHlldCBsaW5rZWQgdG8KLSAgICAgKiBhIHByZXZpb3VzIHNuYXBzaG90LgotICAgICAqIDxwLz4KLSAgICAgKiBJZiBhbnkgdHJhbnNmb3JtIG9yIGNsaXAgaW5mb3JtYXRpb24gd2FzIHNldCBiZWZvcmUsIHRoZXkgYXJlIHB1dCBpbnRvIHRoZSBHcmFwaGljcyBvYmplY3QuCi0gICAgICogQHBhcmFtIGJpdG1hcCB0aGUgYml0bWFwIHRvIGxpbmsgdG8uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Qml0bWFwKEJpdG1hcF9EZWxlZ2F0ZSBiaXRtYXApIHsKLSAgICAgICAgLy8gY3JlYXRlIGEgbmV3IExheWVyIGZvciB0aGUgYml0bWFwLiBUaGlzIHdpbGwgYmUgdGhlIGJhc2UgbGF5ZXIuCi0gICAgICAgIEdyYXBoaWNzMkQgZ3JhcGhpY3MyRCA9IGJpdG1hcC5nZXRJbWFnZSgpLmNyZWF0ZUdyYXBoaWNzKCk7Ci0gICAgICAgIExheWVyIGJhc2VMYXllciA9IG5ldyBMYXllcihncmFwaGljczJELCBiaXRtYXApOwotCi0gICAgICAgIC8vIFNldCB0aGUgY3VycmVudCB0cmFuc2Zvcm0gYW5kIGNsaXAgd2hpY2ggY2FuIGVpdGhlciBjb21lIGZyb20gbVRyYW5zZm9ybS9tQ2xpcCBpZiB0aGV5Ci0gICAgICAgIC8vIHdlcmUgc2V0IHdoZW4gdGhlcmUgd2FzIG5vIGJpdG1hcC9sYXllcnMgb3IgZnJvbSB0aGUgY3VycmVudCBiYXNlIGxheWVycyBpZiB0aGVyZSBpcwotICAgICAgICAvLyBvbmUgYWxyZWFkeS4KLQotICAgICAgICBncmFwaGljczJELnNldFRyYW5zZm9ybShnZXRUcmFuc2Zvcm0oKSk7Ci0gICAgICAgIC8vIHJlc2V0IG1UcmFuc2Zvcm0gaW4gY2FzZSB0aGVyZSB3YXMgb25lLgotICAgICAgICBtVHJhbnNmb3JtID0gbnVsbDsKLQotICAgICAgICBiYXNlTGF5ZXIuc2V0Q2xpcChnZXRDbGlwKCkpOwotICAgICAgICAvLyByZXNldCBtQ2xpcCBpbiBjYXNlIHRoZXJlIHdhcyBvbmUuCi0gICAgICAgIG1DbGlwID0gbnVsbDsKLQotICAgICAgICAvLyByZXBsYWNlIHdoYXRldmVyIGN1cnJlbnQgbGF5ZXJzIHdlIGhhdmUgd2l0aCB0aGlzLgotICAgICAgICBtTGF5ZXJzLmNsZWFyKCk7Ci0gICAgICAgIG1MYXllcnMuYWRkKGJhc2VMYXllcik7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0cmFuc2xhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KSB7Ci0gICAgICAgIGlmIChtTGF5ZXJzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGZvciAoTGF5ZXIgbGF5ZXIgOiBtTGF5ZXJzKSB7Ci0gICAgICAgICAgICAgICAgbGF5ZXIuZ2V0R3JhcGhpY3MoKS50cmFuc2xhdGUoZHgsIGR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtVHJhbnNmb3JtID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtVHJhbnNmb3JtID0gbmV3IEFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVRyYW5zZm9ybS50cmFuc2xhdGUoZHgsIGR5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJvdGF0ZShkb3VibGUgcmFkaWFucykgewotICAgICAgICBpZiAobUxheWVycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbUxheWVycykgewotICAgICAgICAgICAgICAgIGxheWVyLmdldEdyYXBoaWNzKCkucm90YXRlKHJhZGlhbnMpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1UcmFuc2Zvcm0gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm0gPSBuZXcgQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtVHJhbnNmb3JtLnJvdGF0ZShyYWRpYW5zKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkgewotICAgICAgICBpZiAobUxheWVycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbUxheWVycykgewotICAgICAgICAgICAgICAgIGxheWVyLmdldEdyYXBoaWNzKCkuc2NhbGUoc3gsIHN5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtVHJhbnNmb3JtID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtVHJhbnNmb3JtID0gbmV3IEFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVRyYW5zZm9ybS5zY2FsZShzeCwgc3kpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIEFmZmluZVRyYW5zZm9ybSBnZXRUcmFuc2Zvcm0oKSB7Ci0gICAgICAgIGlmIChtTGF5ZXJzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIC8vIGFsbCBncmFwaGljczJEIGluIHRoZSBsaXN0IGhhdmUgdGhlIHNhbWUgdHJhbnNmb3JtCi0gICAgICAgICAgICByZXR1cm4gbUxheWVycy5nZXQoMCkuZ2V0R3JhcGhpY3MoKS5nZXRUcmFuc2Zvcm0oKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtVHJhbnNmb3JtID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtVHJhbnNmb3JtID0gbmV3IEFmZmluZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1UcmFuc2Zvcm07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSkgewotICAgICAgICBpZiAobUxheWVycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbUxheWVycykgewotICAgICAgICAgICAgICAgIGxheWVyLmdldEdyYXBoaWNzKCkuc2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobVRyYW5zZm9ybSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVRyYW5zZm9ybSA9IG5ldyBBZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1UcmFuc2Zvcm0uc2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBjbGlwKFNoYXBlIHNoYXBlLCBpbnQgcmVnaW9uT3ApIHsKLSAgICAgICAgLy8gU2ltcGxlIGNhc2Ugb2YgaW50ZXJzZWN0IHdpdGggZXhpc3RpbmcgbGF5ZXJzLgotICAgICAgICAvLyBCZWNhdXNlIEdyYXBoaWNzMkQjc2V0Q2xpcCB3b3JrcyBhIGJpdCBwZWN1bGlhcmx5LCB3ZSBvcHRpbWl6ZQotICAgICAgICAvLyB0aGUgY2FzZSBvZiBjbGlwcGluZyBieSBpbnRlcnNlY3Rpb24sIGFzIGl0J3Mgc3VwcG9ydGVkIG5hdGl2ZWx5LgotICAgICAgICBpZiAocmVnaW9uT3AgPT0gUmVnaW9uLk9wLklOVEVSU0VDVC5uYXRpdmVJbnQgJiYgbUxheWVycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbUxheWVycykgewotICAgICAgICAgICAgICAgIGxheWVyLmNsaXAoc2hhcGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTaGFwZSBjdXJyZW50Q2xpcCA9IGdldENsaXAoKTsKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50Q2xpcCAhPSBudWxsICYmIGN1cnJlbnRDbGlwLmdldEJvdW5kcygpLmlzRW1wdHkoKSA9PSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEFyZWEgYXJlYSA9IG51bGw7Ci0KLSAgICAgICAgaWYgKHJlZ2lvbk9wID09IFJlZ2lvbi5PcC5SRVBMQUNFLm5hdGl2ZUludCkgewotICAgICAgICAgICAgYXJlYSA9IG5ldyBBcmVhKHNoYXBlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFyZWEgPSBSZWdpb25fRGVsZWdhdGUuY29tYmluZVNoYXBlcyhnZXRDbGlwKCksIHNoYXBlLCByZWdpb25PcCk7Ci0gICAgICAgIH0KLQotICAgICAgICBhc3NlcnQgYXJlYSAhPSBudWxsOwotCi0gICAgICAgIGlmIChtTGF5ZXJzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGlmIChhcmVhICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKExheWVyIGxheWVyIDogbUxheWVycykgewotICAgICAgICAgICAgICAgICAgICBsYXllci5zZXRDbGlwKGFyZWEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU2hhcGUgY3VycmVudENsaXAgPSBnZXRDbGlwKCk7Ci0gICAgICAgICAgICByZXR1cm4gY3VycmVudENsaXAgIT0gbnVsbCAmJiBjdXJyZW50Q2xpcC5nZXRCb3VuZHMoKS5pc0VtcHR5KCkgPT0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYXJlYSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUNsaXAgPSBhcmVhOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtQ2xpcCA9IG5ldyBBcmVhKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBtQ2xpcC5nZXRCb3VuZHMoKS5pc0VtcHR5KCkgPT0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBjbGlwUmVjdChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGludCByZWdpb25PcCkgewotICAgICAgICByZXR1cm4gY2xpcChuZXcgUmVjdGFuZ2xlMkQuRmxvYXQobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCksIHJlZ2lvbk9wKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGNsaXAsIG9yIG51bGwgaWYgbm9uZSBoYXZlIGJlZW4gc2V0dXAuCi0gICAgICovCi0gICAgcHVibGljIFNoYXBlIGdldENsaXAoKSB7Ci0gICAgICAgIGlmIChtTGF5ZXJzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIC8vIHRoZXkgYWxsIGhhdmUgdGhlIHNhbWUgY2xpcAotICAgICAgICAgICAgcmV0dXJuIG1MYXllcnMuZ2V0KDApLmdldEdyYXBoaWNzKCkuZ2V0Q2xpcCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG1DbGlwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBHY1NuYXBzaG90IGRvUmVzdG9yZVRvKGludCBzaXplLCBpbnQgc2F2ZUNvdW50KSB7Ci0gICAgICAgIGlmIChzaXplIDw9IHNhdmVDb3VudCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyByZXN0b3JlIHRoZSBjdXJyZW50IG9uZSBmaXJzdC4KLSAgICAgICAgR2NTbmFwc2hvdCBwcmV2aW91cyA9IGRvUmVzdG9yZSgpOwotCi0gICAgICAgIGlmIChzaXplID09IHNhdmVDb3VudCArIDEpIHsgLy8gdGhpcyB3YXMgdGhlIG9ubHkgb25lIHRoYXQgbmVlZGVkIHJlc3RvcmUuCi0gICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gcHJldmlvdXMuZG9SZXN0b3JlVG8oc2l6ZSAtIDEsIHNhdmVDb3VudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFeGVjdXRlcyB0aGUgRHJhd2FibGUncyBkcmF3IG1ldGhvZCwgd2l0aCBhIG51bGwgcGFpbnQgZGVsZWdhdGUuCi0gICAgICogPHAvPgotICAgICAqIE5vdGUgdGhhdCB0aGUgbWV0aG9kIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBhY3RpdmUgbGF5ZXIuCi0gICAgICogQHBhcmFtIGRyYXdhYmxlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZHJhdyhEcmF3YWJsZSBkcmF3YWJsZSkgewotICAgICAgICBkcmF3KGRyYXdhYmxlLCBudWxsLCBmYWxzZSAvKmNvbXBvc2l0ZU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXhlY3V0ZXMgdGhlIERyYXdhYmxlJ3MgZHJhdyBtZXRob2QuCi0gICAgICogPHAvPgotICAgICAqIE5vdGUgdGhhdCB0aGUgbWV0aG9kIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBhY3RpdmUgbGF5ZXIuCi0gICAgICogQHBhcmFtIGRyYXdhYmxlCi0gICAgICogQHBhcmFtIHBhaW50Ci0gICAgICogQHBhcmFtIGNvbXBvc2l0ZU9ubHkgd2hldGhlciB0aGUgcGFpbnQgaXMgdXNlZCBmb3IgY29tcG9zaXRlIG9ubHkuIFRoaXMgaXMgdHlwaWNhbGx5Ci0gICAgICogICAgICAgICAgdGhlIGNhc2UgZm9yIGJpdG1hcHMuCi0gICAgICogQHBhcmFtIGZvcmNlU3JjTW9kZSBpZiB0cnVlLCB0aGlzIG92ZXJyaWRlcyB0aGUgY29tcG9zaXRlIHRvIGJlIFNSQwotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGRyYXcoRHJhd2FibGUgZHJhd2FibGUsIFBhaW50X0RlbGVnYXRlIHBhaW50LCBib29sZWFuIGNvbXBvc2l0ZU9ubHksCi0gICAgICAgICAgICBib29sZWFuIGZvcmNlU3JjTW9kZSkgewotICAgICAgICAvLyB0aGUgY3VycmVudCBzbmFwc2hvdCBtYXkgbm90IGhhdmUgYSBtTG9jYWxMYXllciAoaWUgaXQgd2FzIGNyZWF0ZWQgb24gc2F2ZSgpIGluc3RlYWQKLSAgICAgICAgLy8gb2Ygc2F2ZUxheWVyKCksIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGVyZSdzIG5vIGxheWVyLgotICAgICAgICAvLyBtTGF5ZXJzIGhvd2V2ZXIgc2F2ZXMgYWxsIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIChmbGFncykuCi0gICAgICAgIGlmIChtTGF5ZXJzLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAvLyBubyBsYXllciwgb25seSBiYXNlIGxheWVyLiBlYXN5IGNhc2UuCi0gICAgICAgICAgICBkcmF3SW5MYXllcihtTGF5ZXJzLmdldCgwKSwgZHJhd2FibGUsIHBhaW50LCBjb21wb3NpdGVPbmx5LCBmb3JjZVNyY01vZGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gZHJhdyBpbiBhbGwgdGhlIGxheWVycyB1bnRpbCB0aGUgbGF5ZXIgc2F2ZSBmbGFncyB0ZWxscyB1cyB0byBzdG9wIChpZSBkcmF3aW5nCi0gICAgICAgICAgICAvLyBpbiB0aGF0IGxheWVyIGlzIGxpbWl0ZWQgdG8gdGhlIGxheWVyIGl0c2VsZi4KLSAgICAgICAgICAgIGludCBmbGFnczsKLSAgICAgICAgICAgIGludCBpID0gbUxheWVycy5zaXplKCkgLSAxOwotCi0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgTGF5ZXIgbGF5ZXIgPSBtTGF5ZXJzLmdldChpKTsKLQotICAgICAgICAgICAgICAgIGRyYXdJbkxheWVyKGxheWVyLCBkcmF3YWJsZSwgcGFpbnQsIGNvbXBvc2l0ZU9ubHksIGZvcmNlU3JjTW9kZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyB0aGVuIGdvIHRvIHByZXZpb3VzIGxheWVyLCBvbmx5IGlmIHRoZXJlIGFyZSBhbnkgbGVmdCwgYW5kIGl0cyBmbGFncwotICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3QgcmVzdHJpY3QgZHJhd2luZyB0byB0aGUgbGF5ZXIgaXRzZWxmLgotICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgICAgICBmbGFncyA9IGxheWVyLmdldEZsYWdzKCk7Ci0gICAgICAgICAgICB9IHdoaWxlIChpID49IDAgJiYgKGZsYWdzICYgQ2FudmFzLkNMSVBfVE9fTEFZRVJfU0FWRV9GTEFHKSA9PSAwKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBkcmF3SW5MYXllcihMYXllciBsYXllciwgRHJhd2FibGUgZHJhd2FibGUsIFBhaW50X0RlbGVnYXRlIHBhaW50LAotICAgICAgICAgICAgYm9vbGVhbiBjb21wb3NpdGVPbmx5LCBib29sZWFuIGZvcmNlU3JjTW9kZSkgewotICAgICAgICBHcmFwaGljczJEIG9yaWdpbmFsR3JhcGhpY3MgPSBsYXllci5nZXRHcmFwaGljcygpOwotICAgICAgICAvLyBnZXQgYSBHcmFwaGljczJEIG9iamVjdCBjb25maWd1cmVkIHdpdGggdGhlIGRyYXdpbmcgcGFyYW1ldGVycy4KLSAgICAgICAgR3JhcGhpY3MyRCBjb25maWd1cmVkR3JhcGhpY3MyRCA9Ci0gICAgICAgICAgICBwYWludCAhPSBudWxsID8KLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ3VzdG9tR3JhcGhpY3Mob3JpZ2luYWxHcmFwaGljcywgcGFpbnQsIGNvbXBvc2l0ZU9ubHksIGZvcmNlU3JjTW9kZSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgKEdyYXBoaWNzMkQpIG9yaWdpbmFsR3JhcGhpY3MuY3JlYXRlKCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGRyYXdhYmxlLmRyYXcoY29uZmlndXJlZEdyYXBoaWNzMkQsIHBhaW50KTsKLSAgICAgICAgICAgIGxheWVyLmNoYW5nZSgpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgLy8gZGlzcG9zZSBHcmFwaGljczJEIG9iamVjdAotICAgICAgICAgICAgY29uZmlndXJlZEdyYXBoaWNzMkQuZGlzcG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBHY1NuYXBzaG90IGRvUmVzdG9yZSgpIHsKLSAgICAgICAgaWYgKG1QcmV2aW91cyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAobUxvY2FsTGF5ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdG8gYmxpdCB0aGUgbGF5ZXJzIGluIHdoaWNoIHdlIGhhdmUgZHJhdywgaW4gdGhlIGxheWVyIGJlbmVhdGgKLSAgICAgICAgICAgICAgICAvLyB0aGVtLCBzdGFydGluZyB3aXRoIHRoZSB0b3Agb25lICh3aGljaCBpcyB0aGUgY3VycmVudCBsb2NhbCBsYXllcikuCi0gICAgICAgICAgICAgICAgaW50IGkgPSBtTGF5ZXJzLnNpemUoKSAtIDE7Ci0gICAgICAgICAgICAgICAgaW50IGZsYWdzOwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5ZXIgZHN0TGF5ZXIgPSBtTGF5ZXJzLmdldChpIC0gMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdG9yZUxheWVyKGRzdExheWVyKTsKLQotICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGRzdExheWVyLmdldEZsYWdzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlIChpID4gMCAmJiAoZmxhZ3MgJiBDYW52YXMuQ0xJUF9UT19MQVlFUl9TQVZFX0ZMQUcpID09IDApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpZiB0aGlzIHNuYXBzaG90IGRvZXMgbm90IHNhdmUgZXZlcnl0aGluZywgdGhlbiBzZXQgdGhlIHByZXZpb3VzIHNuYXBzaG90Ci0gICAgICAgICAgICAvLyB0byB0aGlzIHNuYXBzaG90IGNvbnRlbnQKLQotICAgICAgICAgICAgLy8gZGlkbid0IHNhdmUgdGhlIG1hdHJpeD8gc2V0IHRoZSBjdXJyZW50IG1hdHJpeCBvbiB0aGUgcHJldmlvdXMgc25hcHNob3QKLSAgICAgICAgICAgIGlmICgobUZsYWdzICYgQ2FudmFzLk1BVFJJWF9TQVZFX0ZMQUcpID09IDApIHsKLSAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbXR4ID0gZ2V0VHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChMYXllciBsYXllciA6IG1QcmV2aW91cy5tTGF5ZXJzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyLmdldEdyYXBoaWNzKCkuc2V0VHJhbnNmb3JtKG10eCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBkaWRuJ3Qgc2F2ZSB0aGUgY2xpcD8gc2V0IHRoZSBjdXJyZW50IGNsaXAgb24gdGhlIHByZXZpb3VzIHNuYXBzaG90Ci0gICAgICAgICAgICBpZiAoKG1GbGFncyAmIENhbnZhcy5DTElQX1NBVkVfRkxBRykgPT0gMCkgewotICAgICAgICAgICAgICAgIFNoYXBlIGNsaXAgPSBnZXRDbGlwKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChMYXllciBsYXllciA6IG1QcmV2aW91cy5tTGF5ZXJzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxheWVyLnNldENsaXAoY2xpcCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChMYXllciBsYXllciA6IG1MYXllcnMpIHsKLSAgICAgICAgICAgIGxheWVyLmdldEdyYXBoaWNzKCkuZGlzcG9zZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1QcmV2aW91czsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVzdG9yZUxheWVyKExheWVyIGRzdExheWVyKSB7Ci0KLSAgICAgICAgR3JhcGhpY3MyRCBiYXNlR2Z4ID0gZHN0TGF5ZXIuZ2V0SW1hZ2UoKS5jcmVhdGVHcmFwaGljcygpOwotCi0gICAgICAgIC8vIGlmIHRoZSBsYXllciBjb250YWlucyBhbiBvcmlnaW5hbCBjb3B5IHRoaXMgbWVhbnMgdGhlIGZsYWdzCi0gICAgICAgIC8vIGRpZG4ndCByZXN0cmljdCBkcmF3aW5nIHRvIHRoZSBsb2NhbCBsYXllciBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlCi0gICAgICAgIC8vIGxheWVyIGJvdW5kcyBpbiB0aGUgbGF5ZXIgYmVuZWF0aCBkaWRuJ3QgcmVjZWl2ZSBhbnkgZHJhd2luZy4KLSAgICAgICAgLy8gc28gd2UgdXNlIHRoZSBvcmlnaW5hbENvcHkgdG8gZXJhc2UgdGhlIG5ldyBkcmF3aW5ncyBpbiB0aGVyZS4KLSAgICAgICAgQnVmZmVyZWRJbWFnZSBvcmlnaW5hbENvcHkgPSBkc3RMYXllci5nZXRPcmlnaW5hbENvcHkoKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsQ29weSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBHcmFwaGljczJEIGcgPSAoR3JhcGhpY3MyRCkgYmFzZUdmeC5jcmVhdGUoKTsKLSAgICAgICAgICAgIGcuc2V0Q29tcG9zaXRlKEFscGhhQ29tcG9zaXRlLlNyYyk7Ci0KLSAgICAgICAgICAgIGcuZHJhd0ltYWdlKG9yaWdpbmFsQ29weSwKLSAgICAgICAgICAgICAgICAgICAgbUxheWVyQm91bmRzLmxlZnQsIG1MYXllckJvdW5kcy50b3AsIG1MYXllckJvdW5kcy5yaWdodCwgbUxheWVyQm91bmRzLmJvdHRvbSwKLSAgICAgICAgICAgICAgICAgICAgMCwgMCwgbUxheWVyQm91bmRzLndpZHRoKCksIG1MYXllckJvdW5kcy5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgbnVsbCk7Ci0gICAgICAgICAgICBnLmRpc3Bvc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG5vdyBkcmF3IHB1dCB0aGUgY29udGVudCBvZiB0aGUgbG9jYWwgbGF5ZXIgb250byB0aGUgbGF5ZXIsCi0gICAgICAgIC8vIHVzaW5nIHRoZSBwYWludCBpbmZvcm1hdGlvbgotICAgICAgICBHcmFwaGljczJEIGcgPSBjcmVhdGVDdXN0b21HcmFwaGljcyhiYXNlR2Z4LCBtTG9jYWxMYXllclBhaW50LAotICAgICAgICAgICAgICAgIHRydWUgLyphbHBoYU9ubHkqLywgZmFsc2UgLypmb3JjZVNyY01vZGUqLyk7Ci0KLSAgICAgICAgZy5kcmF3SW1hZ2UobUxvY2FsTGF5ZXIuZ2V0SW1hZ2UoKSwKLSAgICAgICAgICAgICAgICBtTGF5ZXJCb3VuZHMubGVmdCwgbUxheWVyQm91bmRzLnRvcCwgbUxheWVyQm91bmRzLnJpZ2h0LCBtTGF5ZXJCb3VuZHMuYm90dG9tLAotICAgICAgICAgICAgICAgIG1MYXllckJvdW5kcy5sZWZ0LCBtTGF5ZXJCb3VuZHMudG9wLCBtTGF5ZXJCb3VuZHMucmlnaHQsIG1MYXllckJvdW5kcy5ib3R0b20sCi0gICAgICAgICAgICAgICAgbnVsbCk7Ci0gICAgICAgIGcuZGlzcG9zZSgpOwotCi0gICAgICAgIGJhc2VHZnguZGlzcG9zZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIEdyYXBoaWNzMkR9IGJhc2VkIG9uIHRoZSB7QGxpbmsgUGFpbnR9IHBhcmFtZXRlcnMuCi0gICAgICogPHAvPlRoZSBvYmplY3QgbXVzdCBiZSBkaXNwb3NlZCAoe0BsaW5rIEdyYXBoaWNzMkQjZGlzcG9zZSgpfSkgYWZ0ZXIgYmVpbmcgdXNlZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIEdyYXBoaWNzMkQgY3JlYXRlQ3VzdG9tR3JhcGhpY3MoR3JhcGhpY3MyRCBvcmlnaW5hbCwgUGFpbnRfRGVsZWdhdGUgcGFpbnQsCi0gICAgICAgICAgICBib29sZWFuIGNvbXBvc2l0ZU9ubHksIGJvb2xlYW4gZm9yY2VTcmNNb2RlKSB7Ci0gICAgICAgIC8vIG1ha2UgbmV3IG9uZSBncmFwaGljcwotICAgICAgICBHcmFwaGljczJEIGcgPSAoR3JhcGhpY3MyRCkgb3JpZ2luYWwuY3JlYXRlKCk7Ci0KLSAgICAgICAgLy8gY29uZmlndXJlIGl0Ci0KLSAgICAgICAgaWYgKHBhaW50LmlzQW50aUFsaWFzZWQoKSkgewotICAgICAgICAgICAgZy5zZXRSZW5kZXJpbmdIaW50KAotICAgICAgICAgICAgICAgICAgICBSZW5kZXJpbmdIaW50cy5LRVlfQU5USUFMSUFTSU5HLCBSZW5kZXJpbmdIaW50cy5WQUxVRV9BTlRJQUxJQVNfT04pOwotICAgICAgICAgICAgZy5zZXRSZW5kZXJpbmdIaW50KAotICAgICAgICAgICAgICAgICAgICBSZW5kZXJpbmdIaW50cy5LRVlfVEVYVF9BTlRJQUxJQVNJTkcsIFJlbmRlcmluZ0hpbnRzLlZBTFVFX1RFWFRfQU5USUFMSUFTX09OKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gY3VzdG9tU2hhZGVyID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSBzaGFkZXIgZmlyc3QsIGFzIGl0J2xsIHJlcGxhY2UgdGhlIGNvbG9yIGlmIGl0IGNhbiBiZSB1c2VkIGl0LgotICAgICAgICBpZiAoY29tcG9zaXRlT25seSA9PSBmYWxzZSkgewotICAgICAgICAgICAgU2hhZGVyX0RlbGVnYXRlIHNoYWRlckRlbGVnYXRlID0gcGFpbnQuZ2V0U2hhZGVyKCk7Ci0gICAgICAgICAgICBpZiAoc2hhZGVyRGVsZWdhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmIChzaGFkZXJEZWxlZ2F0ZS5pc1N1cHBvcnRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGphdmEuYXd0LlBhaW50IHNoYWRlclBhaW50ID0gc2hhZGVyRGVsZWdhdGUuZ2V0SmF2YVBhaW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBzaGFkZXJQYWludCAhPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZGVyUGFpbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZy5zZXRQYWludChzaGFkZXJQYWludCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21TaGFkZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmZpZGVsaXR5V2FybmluZyhMYXlvdXRMb2cuVEFHX1NIQURFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJEZWxlZ2F0ZS5nZXRTdXBwb3J0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLyp0aHJvd2FibGUqLywgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpZiBubyBzaGFkZXIsIHVzZSB0aGUgcGFpbnQgY29sb3IKLSAgICAgICAgICAgIGlmIChjdXN0b21TaGFkZXIgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICBnLnNldENvbG9yKG5ldyBDb2xvcihwYWludC5nZXRDb2xvcigpLCB0cnVlIC8qaGFzQWxwaGEqLykpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBzZXQgdGhlIHN0cm9rZQotICAgICAgICAgICAgZy5zZXRTdHJva2UocGFpbnQuZ2V0SmF2YVN0cm9rZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoZSBhbHBoYSBmb3IgdGhlIGNvbXBvc2l0ZS4gQWx3YXlzIG9wYXF1ZSBpZiB0aGUgbm9ybWFsIHBhaW50IGNvbG9yIGlzIHVzZWQgc2luY2UKLSAgICAgICAgLy8gaXQgY29udGFpbnMgdGhlIGFscGhhCi0gICAgICAgIGludCBhbHBoYSA9IChjb21wb3NpdGVPbmx5IHx8IGN1c3RvbVNoYWRlcikgPyBwYWludC5nZXRBbHBoYSgpIDogMHhGRjsKLQotICAgICAgICBpZiAoZm9yY2VTcmNNb2RlKSB7Ci0gICAgICAgICAgICBnLnNldENvbXBvc2l0ZShBbHBoYUNvbXBvc2l0ZS5nZXRJbnN0YW5jZSgKLSAgICAgICAgICAgICAgICAgICAgQWxwaGFDb21wb3NpdGUuU1JDLCAoZmxvYXQpIGFscGhhIC8gMjU1LmYpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJvb2xlYW4gY3VzdG9tWGZlcm1vZGUgPSBmYWxzZTsKLSAgICAgICAgICAgIFhmZXJtb2RlX0RlbGVnYXRlIHhmZXJtb2RlRGVsZWdhdGUgPSBwYWludC5nZXRYZmVybW9kZSgpOwotICAgICAgICAgICAgaWYgKHhmZXJtb2RlRGVsZWdhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmICh4ZmVybW9kZURlbGVnYXRlLmlzU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IHhmZXJtb2RlRGVsZWdhdGUuZ2V0Q29tcG9zaXRlKGFscGhhKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGNvbXBvc2l0ZSAhPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9zaXRlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGcuc2V0Q29tcG9zaXRlKGNvbXBvc2l0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21YZmVybW9kZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZmlkZWxpdHlXYXJuaW5nKExheW91dExvZy5UQUdfWEZFUk1PREUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGZlcm1vZGVEZWxlZ2F0ZS5nZXRTdXBwb3J0TWVzc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLyp0aHJvd2FibGUqLywgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgbm8gY3VzdG9tIHhmZXJtb2RlLCBidXQgd2UgaGF2ZSBhbHBoYSAoZHVlIHRvIGEgc2hhZGVyIGFuZCBhIG5vbgotICAgICAgICAgICAgLy8gb3BhcXVlIGFscGhhIGNoYW5uZWwgaW4gdGhlIHBhaW50IGNvbG9yKSwgdGhlbiB3ZSBjcmVhdGUgYW4gQWxwaGFDb21wb3NpdGUgYW55d2F5Ci0gICAgICAgICAgICAvLyB0aGF0IHdpbGwgaGFuZGxlIHRoZSBhbHBoYS4KLSAgICAgICAgICAgIGlmIChjdXN0b21YZmVybW9kZSA9PSBmYWxzZSAmJiBhbHBoYSAhPSAweEZGKSB7Ci0gICAgICAgICAgICAgICAgZy5zZXRDb21wb3NpdGUoQWxwaGFDb21wb3NpdGUuZ2V0SW5zdGFuY2UoCi0gICAgICAgICAgICAgICAgICAgICAgICBBbHBoYUNvbXBvc2l0ZS5TUkNfT1ZFUiwgKGZsb2F0KSBhbHBoYSAvIDI1NS5mKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZzsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbWFwUmVjdChBZmZpbmVUcmFuc2Zvcm0gbWF0cml4LCBSZWN0RiBkc3QsIFJlY3RGIHNyYykgewotICAgICAgICAvLyBhcnJheSB3aXRoIDQgY29ybmVycwotICAgICAgICBmbG9hdFtdIGNvcm5lcnMgPSBuZXcgZmxvYXRbXSB7Ci0gICAgICAgICAgICAgICAgc3JjLmxlZnQsIHNyYy50b3AsCi0gICAgICAgICAgICAgICAgc3JjLnJpZ2h0LCBzcmMudG9wLAotICAgICAgICAgICAgICAgIHNyYy5yaWdodCwgc3JjLmJvdHRvbSwKLSAgICAgICAgICAgICAgICBzcmMubGVmdCwgc3JjLmJvdHRvbSwKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBhcHBseSB0aGUgdHJhbnNmb3JtIHRvIHRoZW0uCi0gICAgICAgIG1hdHJpeC50cmFuc2Zvcm0oY29ybmVycywgMCwgY29ybmVycywgMCwgNCk7Ci0KLSAgICAgICAgLy8gbm93IHB1dCB0aGUgcmVzdWx0IGluIHRoZSByZWN0LiBXZSB0YWtlIHRoZSBtaW4vbWF4IG9mIFhzIGFuZCBtaW4vbWF4IG9mIFlzCi0gICAgICAgIGRzdC5sZWZ0ID0gTWF0aC5taW4oTWF0aC5taW4oY29ybmVyc1swXSwgY29ybmVyc1syXSksIE1hdGgubWluKGNvcm5lcnNbNF0sIGNvcm5lcnNbNl0pKTsKLSAgICAgICAgZHN0LnJpZ2h0ID0gTWF0aC5tYXgoTWF0aC5tYXgoY29ybmVyc1swXSwgY29ybmVyc1syXSksIE1hdGgubWF4KGNvcm5lcnNbNF0sIGNvcm5lcnNbNl0pKTsKLQotICAgICAgICBkc3QudG9wID0gTWF0aC5taW4oTWF0aC5taW4oY29ybmVyc1sxXSwgY29ybmVyc1szXSksIE1hdGgubWluKGNvcm5lcnNbNV0sIGNvcm5lcnNbN10pKTsKLSAgICAgICAgZHN0LmJvdHRvbSA9IE1hdGgubWF4KE1hdGgubWF4KGNvcm5lcnNbMV0sIGNvcm5lcnNbM10pLCBNYXRoLm1heChjb3JuZXJzWzVdLCBjb3JuZXJzWzddKSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUGFyc2VyRmFjdG9yeS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1BhcnNlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAzODQ5Zi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUGFyc2VyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbDsKLQotCi1pbXBvcnQgb3JnLmt4bWwyLmlvLktYbWxQYXJzZXI7Ci1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotLyoqCi0gKiBBIGZhY3RvcnkgZm9yIHtAbGluayBYbWxQdWxsUGFyc2VyfS4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQYXJzZXJGYWN0b3J5IHsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBFTkNPRElORyA9ICJVVEYtOCI7IC8vJE5PTi1OTFMtMSQKLQotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYm9vbGVhbiBMT0dfUEFSU0VSID0gZmFsc2U7Ci0KLSAgICBwdWJsaWMgc3RhdGljIFhtbFB1bGxQYXJzZXIgY3JlYXRlKEZpbGUgZikKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBJbnB1dFN0cmVhbSBzdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGYpOwotICAgICAgICByZXR1cm4gY3JlYXRlKHN0cmVhbSwgZi5nZXROYW1lKCksIGYubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgWG1sUHVsbFBhcnNlciBjcmVhdGUoSW5wdXRTdHJlYW0gc3RyZWFtLCBTdHJpbmcgbmFtZSkKLSAgICAgICAgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gY3JlYXRlKHN0cmVhbSwgbmFtZSwgLTEpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFhtbFB1bGxQYXJzZXIgY3JlYXRlKElucHV0U3RyZWFtIHN0cmVhbSwgU3RyaW5nIG5hbWUsIGxvbmcgc2l6ZSkKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgS1htbFBhcnNlciBwYXJzZXIgPSBpbnN0YW50aWF0ZVBhcnNlcihuYW1lKTsKLQotICAgICAgICBzdHJlYW0gPSByZWFkQW5kQ2xvc2Uoc3RyZWFtLCBuYW1lLCBzaXplKTsKLQotICAgICAgICBwYXJzZXIuc2V0SW5wdXQoc3RyZWFtLCBFTkNPRElORyk7Ci0gICAgICAgIHJldHVybiBwYXJzZXI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgS1htbFBhcnNlciBpbnN0YW50aWF0ZVBhcnNlcihTdHJpbmcgbmFtZSkgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gewotICAgICAgICBLWG1sUGFyc2VyIHBhcnNlcjsKLSAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgcGFyc2VyID0gbmV3IEN1c3RvbVBhcnNlcihuYW1lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcnNlciA9IG5ldyBLWG1sUGFyc2VyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcGFyc2VyLnNldEZlYXR1cmUoWG1sUHVsbFBhcnNlci5GRUFUVVJFX1BST0NFU1NfTkFNRVNQQUNFUywgdHJ1ZSk7Ci0gICAgICAgIHJldHVybiBwYXJzZXI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgSW5wdXRTdHJlYW0gcmVhZEFuZENsb3NlKElucHV0U3RyZWFtIHN0cmVhbSwgU3RyaW5nIG5hbWUsIGxvbmcgc2l6ZSkKLSAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKLSAgICAgICAgLy8ganVzdCBhIHNhbml0eSBjaGVjay4gSXQncyBkb3VidGZ1bCB3ZSdsbCBoYXZlIHN1Y2ggYmlnIGZpbGVzIQotICAgICAgICBpZiAoc2l6ZSA+IEludGVnZXIuTUFYX1ZBTFVFKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbigiRmlsZSAiICsgbmFtZSArICIgaXMgdG9vIGJpZyB0byBiZSBwYXJzZWQiKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgaW50U2l6ZSA9IChpbnQpIHNpemU7Ci0KLSAgICAgICAgLy8gY3JlYXRlIGEgYnVmZmVyZWQgcmVhZGVyIHRvIGZhY2lsaXRhdGUgcmVhZGluZy4KLSAgICAgICAgQnVmZmVyZWRJbnB1dFN0cmVhbSBidWZmZXJlZFN0cmVhbSA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbnQgYXZhaWw7Ci0gICAgICAgICAgICBpZiAoaW50U2l6ZSAhPSAtMSkgewotICAgICAgICAgICAgICAgIGF2YWlsID0gaW50U2l6ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBzaXplIHRvIHJlYWQuCi0gICAgICAgICAgICAgICAgYXZhaWwgPSBidWZmZXJlZFN0cmVhbS5hdmFpbGFibGUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSBpbml0aWFsIGJ1ZmZlciBhbmQgcmVhZCBpdC4KLSAgICAgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVthdmFpbF07Ci0gICAgICAgICAgICBpbnQgcmVhZCA9IHN0cmVhbS5yZWFkKGJ1ZmZlcik7Ci0KLSAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGVhc3kgY2FzZS4KLSAgICAgICAgICAgIGlmIChyZWFkID09IGludFNpemUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIG1vcmUgdG8gcmVhZCAocmVhZCgpIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlYWQgYWxsIHRoYXQKLSAgICAgICAgICAgIC8vIGF2YWlsYWJsZSgpIHJldHVybmVkISkKLSAgICAgICAgICAgIHdoaWxlICgoYXZhaWwgPSBidWZmZXJlZFN0cmVhbS5hdmFpbGFibGUoKSkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWQgKyBhdmFpbCA+IGJ1ZmZlci5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBhbGxvY2F0ZSB3aGF0IGlzIG5lZWRlZC4gV2UncmUgbW9zdGx5IHJlYWRpbmcgc21hbGwgZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgLy8gc28gaXQgc2hvdWxkbid0IGJlIHRvbyBwcm9ibGVtYXRpYy4KLSAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIG1vcmVCdWZmZXIgPSBuZXcgYnl0ZVtyZWFkICsgYXZhaWxdOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1ZmZlciwgMCwgbW9yZUJ1ZmZlciwgMCwgcmVhZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG1vcmVCdWZmZXI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmVhZCArPSBzdHJlYW0ucmVhZChidWZmZXIsIHJlYWQsIGF2YWlsKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gcmV0dXJuIGEgbmV3IHN0cmVhbSBlbmNhcHN1bGF0aW5nIHRoaXMgYnVmZmVyLgotICAgICAgICAgICAgcmV0dXJuIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShidWZmZXIpOwotCi0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uKCJGYWlsZWQgdG8gcmVhZCAiICsgbmFtZSwgbnVsbCwgZSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGJ1ZmZlcmVkU3RyZWFtLmNsb3NlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDdXN0b21QYXJzZXIgZXh0ZW5kcyBLWG1sUGFyc2VyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU5hbWU7Ci0KLSAgICAgICAgQ3VzdG9tUGFyc2VyKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICBzdXBlcigpOwotICAgICAgICAgICAgbU5hbWUgPSBuYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU5hbWU7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUGxheUFuaW1hdGlvblRocmVhZC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1BsYXlBbmltYXRpb25UaHJlYWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I3MDE4MC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUGxheUFuaW1hdGlvblRocmVhZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklBbmltYXRpb25MaXN0ZW5lcjsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0OwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzOwotCi1pbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0aW9uVGhyZWFkOwotaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yOwotCi1wdWJsaWMgY2xhc3MgUGxheUFuaW1hdGlvblRocmVhZCBleHRlbmRzIEFuaW1hdGlvblRocmVhZCB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEFuaW1hdG9yIG1BbmltYXRvcjsKLQotICAgIHB1YmxpYyBQbGF5QW5pbWF0aW9uVGhyZWFkKEFuaW1hdG9yIGFuaW1hdG9yLCBSZW5kZXJTZXNzaW9uSW1wbCBzY2VuZSwgU3RyaW5nIGFuaW1OYW1lLAotICAgICAgICAgICAgSUFuaW1hdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIHN1cGVyKHNjZW5lLCBhbmltTmFtZSwgbGlzdGVuZXIpOwotICAgICAgICBtQW5pbWF0b3IgPSBhbmltYXRvcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzdWx0IHByZUFuaW1hdGlvbigpIHsKLSAgICAgICAgLy8gc3RhcnQgdGhlIGFuaW1hdGlvbi4gVGhpcyB3aWxsIHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBoYW5kbGVyIHJpZ2h0IGF3YXksIHNvCi0gICAgICAgIC8vIHRoZSBxdWV1ZSBpcyBmaWxsZWQgd2hlbiB0aGlzIG1ldGhvZCByZXR1cm5zLgotICAgICAgICBtQW5pbWF0b3Iuc3RhcnQoKTsKLQotICAgICAgICByZXR1cm4gU3RhdHVzLlNVQ0NFU1MuY3JlYXRlUmVzdWx0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcG9zdEFuaW1hdGlvbigpIHsKLSAgICAgICAgLy8gbm90aGluZyB0byBiZSBkb25lLgotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9SZW5kZXJBY3Rpb24uamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9SZW5kZXJBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBmNTMzMS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUmVuZGVyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsOwotCi1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLkVSUk9SX0xPQ0tfSU5URVJSVVBURUQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLkVSUk9SX1RJTUVPVVQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLlNVQ0NFU1M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSGFyZHdhcmVDb25maWc7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkxheW91dExvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVuZGVyUGFyYW1zOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZW5kZXJSZXNvdXJjZXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlbmRlclJlc291cmNlcy5GcmFtZXdvcmtSZXNvdXJjZUlkUHJvdmlkZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc3VsdDsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLkJyaWRnZTsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQuQnJpZGdlQ29udGV4dDsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuRGVuc2l0eTsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5TY3JlZW5PcmllbnRhdGlvbjsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuU2NyZWVuU2l6ZTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWRfRGVsZWdhdGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbl9BY2Nlc3NvcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZE1hbmFnZXJfQWNjZXNzb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrOwotCi0vKioKLSAqIEJhc2UgY2xhc3MgZm9yIHJlbmRlcmluZyBhY3Rpb24uCi0gKgotICogSXQgcHJvdmlkZXMgbGlmZS1jeWNsZSBtZXRob2RzIHRvIGluaXQgYW5kIHN0b3AgdGhlIHJlbmRlcmluZy4KLSAqIFRoZSBtb3N0IGltcG9ydGFudCBtZXRob2RzIGFyZToKLSAqIHtAbGluayAjaW5pdChsb25nKX0gYW5kIHtAbGluayAjYWNxdWlyZShsb25nKX0gdG8gc3RhcnQgYSByZW5kZXJpbmcgYW5kIHtAbGluayAjcmVsZWFzZSgpfQotICogYWZ0ZXIgdGhlIHJlbmRlcmluZy4KLSAqCi0gKgotICogQHBhcmFtIDxUPiB0aGUge0BsaW5rIFJlbmRlclBhcmFtc30gaW1wbGVtZW50YXRpb24KLSAqCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZW5kZXJBY3Rpb248VCBleHRlbmRzIFJlbmRlclBhcmFtcz4gZXh0ZW5kcyBGcmFtZXdvcmtSZXNvdXJjZUlkUHJvdmlkZXIgewotCi0gICAgLyoqCi0gICAgICogVGhlIGN1cnJlbnQgY29udGV4dCBiZWluZyByZW5kZXJlZC4gVGhpcyBpcyBzZXQgdGhyb3VnaCB7QGxpbmsgI2FjcXVpcmUobG9uZyl9IGFuZAotICAgICAqIHtAbGluayAjaW5pdChsb25nKX0sIGFuZCB1bnNldCBpbiB7QGxpbmsgI3JlbGVhc2UoKX0uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgQnJpZGdlQ29udGV4dCBzQ3VycmVudENvbnRleHQgPSBudWxsOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBUIG1QYXJhbXM7Ci0KLSAgICBwcml2YXRlIEJyaWRnZUNvbnRleHQgbUNvbnRleHQ7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgcmVuZGVyQWN0aW9uLgotICAgICAqIDxwPgotICAgICAqIFRoaXMgPGI+bXVzdDwvYj4gYmUgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIHtAbGluayBSZW5kZXJBY3Rpb24jaW5pdCgpfSwgd2hpY2ggYWN0IGFzIGEKLSAgICAgKiBjYWxsIHRvIHtAbGluayBSZW5kZXJBY3Rpb24jYWNxdWlyZShsb25nKX0KLSAgICAgKgotICAgICAqIEBwYXJhbSBwYXJhbXMgdGhlIFJlbmRlclBhcmFtcy4gVGhpcyBtdXN0IGJlIGEgY29weSB0aGF0IHRoZSBhY3Rpb24gY2FuIGtlZXAKLSAgICAgKgotICAgICAqLwotICAgIHByb3RlY3RlZCBSZW5kZXJBY3Rpb24oVCBwYXJhbXMpIHsKLSAgICAgICAgbVBhcmFtcyA9IHBhcmFtczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbml0aWFsaXplcyBhbmQgYWNxdWlyZXMgdGhlIHNjZW5lLCBjcmVhdGluZyB2YXJpb3VzIEFuZHJvaWQgb2JqZWN0cyBzdWNoIGFzIGNvbnRleHQsCi0gICAgICogaW5mbGF0ZXIsIGFuZCBwYXJzZXIuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdGltZW91dCB0aGUgdGltZSB0byB3YWl0IGlmIGFub3RoZXIgcmVuZGVyaW5nIGlzIGhhcHBlbmluZy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgc2NlbmUgd2FzIHByZXBhcmVkCi0gICAgICoKLSAgICAgKiBAc2VlICNhY3F1aXJlKGxvbmcpCi0gICAgICogQHNlZSAjcmVsZWFzZSgpCi0gICAgICovCi0gICAgcHVibGljIFJlc3VsdCBpbml0KGxvbmcgdGltZW91dCkgewotICAgICAgICAvLyBhY3F1aXJlIHRoZSBsb2NrLiBpZiB0aGUgcmVzdWx0IGlzIG51bGwsIGxvY2sgd2FzIGp1c3QgYWNxdWlyZWQsIG90aGVyd2lzZSwgcmV0dXJuCi0gICAgICAgIC8vIHRoZSByZXN1bHQuCi0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBhY3F1aXJlTG9jayh0aW1lb3V0KTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgSGFyZHdhcmVDb25maWcgaGFyZHdhcmVDb25maWcgPSBtUGFyYW1zLmdldEhhcmR3YXJlQ29uZmlnKCk7Ci0KLSAgICAgICAgLy8gc2V0dXAgdGhlIGRpc3BsYXkgTWV0cmljcy4KLSAgICAgICAgRGlzcGxheU1ldHJpY3MgbWV0cmljcyA9IG5ldyBEaXNwbGF5TWV0cmljcygpOwotICAgICAgICBtZXRyaWNzLmRlbnNpdHlEcGkgPSBtZXRyaWNzLm5vbmNvbXBhdERlbnNpdHlEcGkgPQotICAgICAgICAgICAgICAgIGhhcmR3YXJlQ29uZmlnLmdldERlbnNpdHkoKS5nZXREcGlWYWx1ZSgpOwotCi0gICAgICAgIG1ldHJpY3MuZGVuc2l0eSA9IG1ldHJpY3Mubm9uY29tcGF0RGVuc2l0eSA9Ci0gICAgICAgICAgICAgICAgbWV0cmljcy5kZW5zaXR5RHBpIC8gKGZsb2F0KSBEaXNwbGF5TWV0cmljcy5ERU5TSVRZX0RFRkFVTFQ7Ci0KLSAgICAgICAgbWV0cmljcy5zY2FsZWREZW5zaXR5ID0gbWV0cmljcy5ub25jb21wYXRTY2FsZWREZW5zaXR5ID0gbWV0cmljcy5kZW5zaXR5OwotCi0gICAgICAgIG1ldHJpY3Mud2lkdGhQaXhlbHMgPSBtZXRyaWNzLm5vbmNvbXBhdFdpZHRoUGl4ZWxzID0gaGFyZHdhcmVDb25maWcuZ2V0U2NyZWVuV2lkdGgoKTsKLSAgICAgICAgbWV0cmljcy5oZWlnaHRQaXhlbHMgPSBtZXRyaWNzLm5vbmNvbXBhdEhlaWdodFBpeGVscyA9IGhhcmR3YXJlQ29uZmlnLmdldFNjcmVlbkhlaWdodCgpOwotICAgICAgICBtZXRyaWNzLnhkcGkgPSBtZXRyaWNzLm5vbmNvbXBhdFhkcGkgPSBoYXJkd2FyZUNvbmZpZy5nZXRYZHBpKCk7Ci0gICAgICAgIG1ldHJpY3MueWRwaSA9IG1ldHJpY3Mubm9uY29tcGF0WWRwaSA9IGhhcmR3YXJlQ29uZmlnLmdldFlkcGkoKTsKLQotICAgICAgICBSZW5kZXJSZXNvdXJjZXMgcmVzb3VyY2VzID0gbVBhcmFtcy5nZXRSZXNvdXJjZXMoKTsKLQotICAgICAgICAvLyBidWlsZCB0aGUgY29udGV4dAotICAgICAgICBtQ29udGV4dCA9IG5ldyBCcmlkZ2VDb250ZXh0KG1QYXJhbXMuZ2V0UHJvamVjdEtleSgpLCBtZXRyaWNzLCByZXNvdXJjZXMsCi0gICAgICAgICAgICAgICAgbVBhcmFtcy5nZXRQcm9qZWN0Q2FsbGJhY2soKSwgZ2V0Q29uZmlndXJhdGlvbigpLCBtUGFyYW1zLmdldFRhcmdldFNka1ZlcnNpb24oKSwKLSAgICAgICAgICAgICAgICBtUGFyYW1zLmlzUnRsU3VwcG9ydGVkKCkpOwotCi0gICAgICAgIHNldFVwKCk7Ci0KLSAgICAgICAgcmV0dXJuIFNVQ0NFU1MuY3JlYXRlUmVzdWx0KCk7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBQcmVwYXJlcyB0aGUgc2NlbmUgZm9yIGFjdGlvbi4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGNhbGwgaXMgYmxvY2tpbmcgaWYgYW5vdGhlciByZW5kZXJpbmcvaW5mbGF0aW5nIGlzIGN1cnJlbnRseSBoYXBwZW5pbmcsIGFuZCB3aWxsIHJldHVybgotICAgICAqIHdoZXRoZXIgdGhlIHByZXBhcmF0aW9uIHdvcmtlZC4KLSAgICAgKgotICAgICAqIFRoZSBwcmVwYXJhdGlvbiBjYW4gZmFpbCBpZiBhbm90aGVyIHJlbmRlcmluZyB0b29rIHRvbyBsb25nIGFuZCB0aGUgdGltZW91dCB3YXMgZWxhcHNlZC4KLSAgICAgKgotICAgICAqIE1vcmUgdGhhbiBvbmUgY2FsbCB0byB0aGlzIGZyb20gdGhlIHNhbWUgdGhyZWFkIHdpbGwgaGF2ZSBubyBlZmZlY3QgYW5kIHdpbGwgcmV0dXJuCi0gICAgICoge0BsaW5rIFJlc3VsdCNTVUNDRVNTfS4KLSAgICAgKgotICAgICAqIEFmdGVyIHNjZW5lIGFjdGlvbnMgaGF2ZSB0YWtlbiBwbGFjZSwgb25seSBvbmUgY2FsbCB0byB7QGxpbmsgI3JlbGVhc2UoKX0gbXVzdCBiZQotICAgICAqIGRvbmUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdGltZW91dCB0aGUgdGltZSB0byB3YWl0IGlmIGFub3RoZXIgcmVuZGVyaW5nIGlzIGhhcHBlbmluZy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgc2NlbmUgd2FzIHByZXBhcmVkCi0gICAgICoKLSAgICAgKiBAc2VlICNyZWxlYXNlKCkKLSAgICAgKgotICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHtAbGluayAjaW5pdChsb25nKX0gd2FzIG5ldmVyIGNhbGxlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgUmVzdWx0IGFjcXVpcmUobG9uZyB0aW1lb3V0KSB7Ci0gICAgICAgIGlmIChtQ29udGV4dCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJBZnRlciBzY2VuZSBjcmVhdGlvbiwgI2luaXQoKSBtdXN0IGJlIGNhbGxlZCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYWNxdWlyZSB0aGUgbG9jay4gaWYgdGhlIHJlc3VsdCBpcyBudWxsLCBsb2NrIHdhcyBqdXN0IGFjcXVpcmVkLCBvdGhlcndpc2UsIHJldHVybgotICAgICAgICAvLyB0aGUgcmVzdWx0LgotICAgICAgICBSZXN1bHQgcmVzdWx0ID0gYWNxdWlyZUxvY2sodGltZW91dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHNldFVwKCk7Ci0KLSAgICAgICAgcmV0dXJuIFNVQ0NFU1MuY3JlYXRlUmVzdWx0KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWNxdWlyZSB0aGUgbG9jayBzbyB0aGF0IHRoZSBzY2VuZSBjYW4gYmUgYWN0ZWQgdXBvbi4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIHJldHVybnMgbnVsbCBpZiB0aGUgbG9jayB3YXMganVzdCBhY3F1aXJlZCwgb3RoZXJ3aXNlIGl0IHJldHVybnMKLSAgICAgKiB7QGxpbmsgUmVzdWx0I1NVQ0NFU1N9IGlmIHRoZSBsb2NrIGFscmVhZHkgYmVsb25nZWQgdG8gdGhhdCB0aHJlYWQsIG9yIGFub3RoZXIKLSAgICAgKiBpbnN0YW5jZSAoc2VlIHtAbGluayBSZXN1bHQjZ2V0U3RhdHVzKCl9KSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB0aW1lb3V0IHRoZSB0aW1lIHRvIHdhaXQgaWYgYW5vdGhlciByZW5kZXJpbmcgaXMgaGFwcGVuaW5nLgotICAgICAqIEByZXR1cm4gbnVsbCBpZiB0aGUgbG9jayB3YXMganVzdCBhY3F1aXJlIG9yIGFub3RoZXIgcmVzdWx0IGRlcGVuZGluZyBvbiB0aGUgc3RhdGUuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgb3duZWQgYnkKLSAgICAgKiAgICAgIHRoZSBzY2VuZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIFJlc3VsdCBhY3F1aXJlTG9jayhsb25nIHRpbWVvdXQpIHsKLSAgICAgICAgUmVlbnRyYW50TG9jayBsb2NrID0gQnJpZGdlLmdldExvY2soKTsKLSAgICAgICAgaWYgKGxvY2suaXNIZWxkQnlDdXJyZW50VGhyZWFkKCkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBhY3F1aXJlZCA9IGxvY2sudHJ5TG9jayh0aW1lb3V0LCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotCi0gICAgICAgICAgICAgICAgaWYgKGFjcXVpcmVkID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9USU1FT1VULmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfTE9DS19JTlRFUlJVUFRFRC5jcmVhdGVSZXN1bHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMgdGhyZWFkIGhvbGRzIHRoZSBsb2NrIGFscmVhZHkuIENoZWNrcyB0aGF0IHRoaXMgd2Fzbid0IGZvciBhIGRpZmZlcmVudCBjb250ZXh0LgotICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBjYWxsZWQgYnkgaW5pdCwgbUNvbnRleHQgd2lsbCBiZSBudWxsIGFuZCBzbyBzaG91bGQgc0N1cnJlbnRDb250ZXh0Ci0gICAgICAgICAgICAvLyBhbnl3YXkKLSAgICAgICAgICAgIGlmIChtQ29udGV4dCAhPSBzQ3VycmVudENvbnRleHQpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJBY3F1aXJpbmcgZGlmZmVyZW50IHNjZW5lcyBmcm9tIHNhbWUgdGhyZWFkIHdpdGhvdXQgcmVsZWFzZXMiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBTVUNDRVNTLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2xlYW5zIHVwIHRoZSBzY2VuZSBhZnRlciBhbiBhY3Rpb24uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICAgICAgUmVlbnRyYW50TG9jayBsb2NrID0gQnJpZGdlLmdldExvY2soKTsKLQotICAgICAgICAvLyB3aXRoIHRoZSB1c2Ugb2YgZmluYWxseSBibG9ja3MsIGl0IGlzIHBvc3NpYmxlIHRvIGZpbmQgb3Vyc2VsZiBjYWxsaW5nIHRoaXMKLSAgICAgICAgLy8gd2l0aG91dCBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBwcmVwYXJlU2NlbmUuIFRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgdW5sb2NrKCkgd2lsbAotICAgICAgICAvLyBub3QgdGhyb3cgSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbi4KLSAgICAgICAgaWYgKGxvY2suaXNIZWxkQnlDdXJyZW50VGhyZWFkKCkpIHsKLSAgICAgICAgICAgIHRlYXJEb3duKCk7Ci0gICAgICAgICAgICBsb2NrLnVubG9jaygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB1cCB0aGUgc2Vzc2lvbiBmb3IgcmVuZGVyaW5nLgotICAgICAqIDxwLz4KLSAgICAgKiBUaGUgY291bnRlcnBhcnQgaXMge0BsaW5rICN0ZWFyRG93bigpfS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2V0VXAoKSB7Ci0gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgUmVzb3VyY2VzIG9iamVjdCByZWZlcmVuY2VzIHRoZSBjb250ZXh0IChhbmQgb3RoZXIgb2JqZWN0cykgZm9yIHRoaXMKLSAgICAgICAgLy8gc2NlbmUKLSAgICAgICAgbUNvbnRleHQuaW5pdFJlc291cmNlcygpOwotICAgICAgICBzQ3VycmVudENvbnRleHQgPSBtQ29udGV4dDsKLQotICAgICAgICAvLyBjcmVhdGUgYW4gSW5wdXRNZXRob2RNYW5hZ2VyCi0gICAgICAgIElucHV0TWV0aG9kTWFuYWdlci5nZXRJbnN0YW5jZSgpOwotCi0gICAgICAgIExheW91dExvZyBjdXJyZW50TG9nID0gbVBhcmFtcy5nZXRMb2coKTsKLSAgICAgICAgQnJpZGdlLnNldExvZyhjdXJyZW50TG9nKTsKLSAgICAgICAgbUNvbnRleHQuZ2V0UmVuZGVyUmVzb3VyY2VzKCkuc2V0RnJhbWV3b3JrUmVzb3VyY2VJZFByb3ZpZGVyKHRoaXMpOwotICAgICAgICBtQ29udGV4dC5nZXRSZW5kZXJSZXNvdXJjZXMoKS5zZXRMb2dnZXIoY3VycmVudExvZyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVhciBkb3duIHRoZSBzZXNzaW9uIGFmdGVyIHJlbmRlcmluZy4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhlIGNvdW50ZXJwYXJ0IGlzIHtAbGluayAjc2V0VXAoKX0uCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHRlYXJEb3duKCkgewotICAgICAgICAvLyBUaGUgY29udGV4dCBtYXkgYmUgbnVsbCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBpbml0KCkuCi0gICAgICAgIGlmIChtQ29udGV4dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gcmVtb3ZlIHN0YXRpYyByZWZlcmVuY2VzLCBvdGhlcndpc2Ugd2UgY291bGQgbm90IHVubG9hZCB0aGUgbGliCi0gICAgICAgICAgICBtQ29udGV4dC5kaXNwb3NlUmVzb3VyY2VzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc0N1cnJlbnRDb250ZXh0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIHF1aXQgSGFuZGxlclRocmVhZCBjcmVhdGVkIGR1cmluZyB0aGlzIHNlc3Npb24uCi0gICAgICAgICAgICBIYW5kbGVyVGhyZWFkX0RlbGVnYXRlLmNsZWFuVXAoc0N1cnJlbnRDb250ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNsZWFyIHRoZSBzdG9yZWQgVmlld0NvbmZpZ3VyYXRpb24gc2luY2UgdGhlIG1hcCBpcyBwZXIgZGVuc2l0eSBhbmQgbm90IHBlciBjb250ZXh0LgotICAgICAgICBWaWV3Q29uZmlndXJhdGlvbl9BY2Nlc3Nvci5jbGVhckNvbmZpZ3VyYXRpb25zKCk7Ci0KLSAgICAgICAgLy8gcmVtb3ZlIHRoZSBJbnB1dE1ldGhvZE1hbmFnZXIKLSAgICAgICAgSW5wdXRNZXRob2RNYW5hZ2VyX0FjY2Vzc29yLnJlc2V0SW5zdGFuY2UoKTsKLQotICAgICAgICBzQ3VycmVudENvbnRleHQgPSBudWxsOwotCi0gICAgICAgIEJyaWRnZS5zZXRMb2cobnVsbCk7Ci0gICAgICAgIGlmIChtQ29udGV4dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQ29udGV4dC5nZXRSZW5kZXJSZXNvdXJjZXMoKS5zZXRGcmFtZXdvcmtSZXNvdXJjZUlkUHJvdmlkZXIobnVsbCk7Ci0gICAgICAgICAgICBtQ29udGV4dC5nZXRSZW5kZXJSZXNvdXJjZXMoKS5zZXRMb2dnZXIobnVsbCk7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQnJpZGdlQ29udGV4dCBnZXRDdXJyZW50Q29udGV4dCgpIHsKLSAgICAgICAgcmV0dXJuIHNDdXJyZW50Q29udGV4dDsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgVCBnZXRQYXJhbXMoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyYW1zOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBCcmlkZ2VDb250ZXh0IGdldENvbnRleHQoKSB7Ci0gICAgICAgIHJldHVybiBtQ29udGV4dDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsb2cgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXNzaW9uLgotICAgICAqIEByZXR1cm4gdGhlIGxvZyBvciBudWxsIGlmIHRoZXJlIGFyZSBub25lLgotICAgICAqLwotICAgIHB1YmxpYyBMYXlvdXRMb2cgZ2V0TG9nKCkgewotICAgICAgICBpZiAobVBhcmFtcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVBhcmFtcy5nZXRMb2coKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyB0aGF0IHRoZSBsb2NrIGlzIG93bmVkIGJ5IHRoZSBjdXJyZW50IHRocmVhZCBhbmQgdGhhdCB0aGUgY3VycmVudCBjb250ZXh0IGlzIHRoZSBvbmUKLSAgICAgKiBmcm9tIHRoaXMgc2NlbmUuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgb3duZWQgYnkKLSAgICAgKiAgICAgIHRoZSBzY2VuZSwgb3IgaWYge0BsaW5rICNhY3F1aXJlKGxvbmcpfSB3YXMgbm90IGNhbGxlZC4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBjaGVja0xvY2soKSB7Ci0gICAgICAgIFJlZW50cmFudExvY2sgbG9jayA9IEJyaWRnZS5nZXRMb2NrKCk7Ci0gICAgICAgIGlmIChsb2NrLmlzSGVsZEJ5Q3VycmVudFRocmVhZCgpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJzY2VuZSBtdXN0IGJlIGFjcXVpcmVkIGZpcnN0LiBzZWUgI2FjcXVpcmUobG9uZykiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc0N1cnJlbnRDb250ZXh0ICE9IG1Db250ZXh0KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUaHJlYWQgYWNxdWlyZWQgYSBzY2VuZSBidXQgaXMgcmVuZGVyaW5nIGEgZGlmZmVyZW50IG9uZSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBDb25maWd1cmF0aW9uIGdldENvbmZpZ3VyYXRpb24oKSB7Ci0gICAgICAgIENvbmZpZ3VyYXRpb24gY29uZmlnID0gbmV3IENvbmZpZ3VyYXRpb24oKTsKLQotICAgICAgICBIYXJkd2FyZUNvbmZpZyBoYXJkd2FyZUNvbmZpZyA9IG1QYXJhbXMuZ2V0SGFyZHdhcmVDb25maWcoKTsKLQotICAgICAgICBTY3JlZW5TaXplIHNjcmVlblNpemUgPSBoYXJkd2FyZUNvbmZpZy5nZXRTY3JlZW5TaXplKCk7Ci0gICAgICAgIGlmIChzY3JlZW5TaXplICE9IG51bGwpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc2NyZWVuU2l6ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgU01BTEw6Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zY3JlZW5MYXlvdXQgfD0gQ29uZmlndXJhdGlvbi5TQ1JFRU5MQVlPVVRfU0laRV9TTUFMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBOT1JNQUw6Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zY3JlZW5MYXlvdXQgfD0gQ29uZmlndXJhdGlvbi5TQ1JFRU5MQVlPVVRfU0laRV9OT1JNQUw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgTEFSR0U6Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zY3JlZW5MYXlvdXQgfD0gQ29uZmlndXJhdGlvbi5TQ1JFRU5MQVlPVVRfU0laRV9MQVJHRTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBYTEFSR0U6Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zY3JlZW5MYXlvdXQgfD0gQ29uZmlndXJhdGlvbi5TQ1JFRU5MQVlPVVRfU0laRV9YTEFSR0U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgRGVuc2l0eSBkZW5zaXR5ID0gaGFyZHdhcmVDb25maWcuZ2V0RGVuc2l0eSgpOwotICAgICAgICBpZiAoZGVuc2l0eSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBkZW5zaXR5ID0gRGVuc2l0eS5NRURJVU07Ci0gICAgICAgIH0KLQotICAgICAgICBjb25maWcuc2NyZWVuV2lkdGhEcCA9IGhhcmR3YXJlQ29uZmlnLmdldFNjcmVlbldpZHRoKCkgLyBkZW5zaXR5LmdldERwaVZhbHVlKCk7Ci0gICAgICAgIGNvbmZpZy5zY3JlZW5IZWlnaHREcCA9IGhhcmR3YXJlQ29uZmlnLmdldFNjcmVlbkhlaWdodCgpIC8gZGVuc2l0eS5nZXREcGlWYWx1ZSgpOwotICAgICAgICBpZiAoY29uZmlnLnNjcmVlbkhlaWdodERwIDwgY29uZmlnLnNjcmVlbldpZHRoRHApIHsKLSAgICAgICAgICAgIGNvbmZpZy5zbWFsbGVzdFNjcmVlbldpZHRoRHAgPSBjb25maWcuc2NyZWVuSGVpZ2h0RHA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25maWcuc21hbGxlc3RTY3JlZW5XaWR0aERwID0gY29uZmlnLnNjcmVlbldpZHRoRHA7Ci0gICAgICAgIH0KLSAgICAgICAgY29uZmlnLmRlbnNpdHlEcGkgPSBkZW5zaXR5LmdldERwaVZhbHVlKCk7Ci0KLSAgICAgICAgLy8gbmV2ZXIgcnVuIGluIGNvbXBhdCBtb2RlOgotICAgICAgICBjb25maWcuY29tcGF0U2NyZWVuV2lkdGhEcCA9IGNvbmZpZy5zY3JlZW5XaWR0aERwOwotICAgICAgICBjb25maWcuY29tcGF0U2NyZWVuSGVpZ2h0RHAgPSBjb25maWcuc2NyZWVuSGVpZ2h0RHA7Ci0KLSAgICAgICAgU2NyZWVuT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBoYXJkd2FyZUNvbmZpZy5nZXRPcmllbnRhdGlvbigpOwotICAgICAgICBpZiAob3JpZW50YXRpb24gIT0gbnVsbCkgewotICAgICAgICAgICAgc3dpdGNoIChvcmllbnRhdGlvbikgewotICAgICAgICAgICAgY2FzZSBQT1JUUkFJVDoKLSAgICAgICAgICAgICAgICBjb25maWcub3JpZW50YXRpb24gPSBDb25maWd1cmF0aW9uLk9SSUVOVEFUSU9OX1BPUlRSQUlUOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMQU5EU0NBUEU6Ci0gICAgICAgICAgICAgICAgY29uZmlnLm9yaWVudGF0aW9uID0gQ29uZmlndXJhdGlvbi5PUklFTlRBVElPTl9MQU5EU0NBUEU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNRVUFSRToKLSAgICAgICAgICAgICAgICBjb25maWcub3JpZW50YXRpb24gPSBDb25maWd1cmF0aW9uLk9SSUVOVEFUSU9OX1NRVUFSRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbmZpZy5vcmllbnRhdGlvbiA9IENvbmZpZ3VyYXRpb24uT1JJRU5UQVRJT05fVU5ERUZJTkVEOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVE9ETzogZmlsbCBpbiBtb3JlIGNvbmZpZyBpbmZvLgotCi0gICAgICAgIHJldHVybiBjb25maWc7Ci0gICAgfQotCi0KLSAgICAvLyAtLS0gRnJhbWV3b3JrUmVzb3VyY2VJZFByb3ZpZGVyIG1ldGhvZHMKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJbnRlZ2VyIGdldElkKFJlc291cmNlVHlwZSByZXNUeXBlLCBTdHJpbmcgcmVzTmFtZSkgewotICAgICAgICByZXR1cm4gQnJpZGdlLmdldFJlc291cmNlSWQocmVzVHlwZSwgcmVzTmFtZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1JlbmRlckRyYXdhYmxlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUmVuZGVyRHJhd2FibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY3NzEzMS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUmVuZGVyRHJhd2FibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGw7Ci0KLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc3VsdC5TdGF0dXMuRVJST1JfVU5LTk9XTjsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5EcmF3YWJsZVBhcmFtczsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSGFyZHdhcmVDb25maWc7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlVmFsdWU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc3VsdDsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0LlN0YXR1czsKLWltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQuQnJpZGdlQ29udGV4dDsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBfRGVsZWdhdGU7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuQXR0YWNoSW5mb19BY2Nlc3NvcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5NZWFzdXJlU3BlYzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKLQotaW1wb3J0IGphdmEuYXd0LkFscGhhQ29tcG9zaXRlOwotaW1wb3J0IGphdmEuYXd0LkNvbG9yOwotaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzMkQ7Ci1pbXBvcnQgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi0vKioKLSAqIEFjdGlvbiB0byByZW5kZXIgYSBnaXZlbiBEcmF3YWJsZSBwcm92aWRlZCB0aHJvdWdoIHtAbGluayBEcmF3YWJsZVBhcmFtcyNnZXREcmF3YWJsZSgpfS4KLSAqCi0gKiBUaGUgY2xhc3Mgb25seSBwcm92aWRlcyBhIHNpbXBsZSB7QGxpbmsgI3JlbmRlcigpfSBtZXRob2QsIGJ1dCB0aGUgZnVsbCBsaWZlLWN5Y2xlIG9mIHRoZQotICogYWN0aW9uIG11c3QgYmUgcmVzcGVjdGVkLgotICoKLSAqIEBzZWUgUmVuZGVyQWN0aW9uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUmVuZGVyRHJhd2FibGUgZXh0ZW5kcyBSZW5kZXJBY3Rpb248RHJhd2FibGVQYXJhbXM+IHsKLQotICAgIHB1YmxpYyBSZW5kZXJEcmF3YWJsZShEcmF3YWJsZVBhcmFtcyBwYXJhbXMpIHsKLSAgICAgICAgc3VwZXIobmV3IERyYXdhYmxlUGFyYW1zKHBhcmFtcykpOwotICAgIH0KLQotICAgIHB1YmxpYyBSZXN1bHQgcmVuZGVyKCkgewotICAgICAgICBjaGVja0xvY2soKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIGdldCB0aGUgZHJhd2FibGUgcmVzb3VyY2UgdmFsdWUKLSAgICAgICAgICAgIERyYXdhYmxlUGFyYW1zIHBhcmFtcyA9IGdldFBhcmFtcygpOwotICAgICAgICAgICAgSGFyZHdhcmVDb25maWcgaGFyZHdhcmVDb25maWcgPSBwYXJhbXMuZ2V0SGFyZHdhcmVDb25maWcoKTsKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgZHJhd2FibGVSZXNvdXJjZSA9IHBhcmFtcy5nZXREcmF3YWJsZSgpOwotCi0gICAgICAgICAgICAvLyByZXNvbHZlIGl0Ci0gICAgICAgICAgICBCcmlkZ2VDb250ZXh0IGNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAgICAgICAgICBkcmF3YWJsZVJlc291cmNlID0gY29udGV4dC5nZXRSZW5kZXJSZXNvdXJjZXMoKS5yZXNvbHZlUmVzVmFsdWUoZHJhd2FibGVSZXNvdXJjZSk7Ci0KLSAgICAgICAgICAgIGlmIChkcmF3YWJsZVJlc291cmNlID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICAgICAgZHJhd2FibGVSZXNvdXJjZS5nZXRSZXNvdXJjZVR5cGUoKSAhPSBSZXNvdXJjZVR5cGUuRFJBV0FCTEUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzLkVSUk9SX05PVF9BX0RSQVdBQkxFLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBjcmVhdGUgYSBzaW1wbGUgRnJhbWVMYXlvdXQKLSAgICAgICAgICAgIEZyYW1lTGF5b3V0IGNvbnRlbnQgPSBuZXcgRnJhbWVMYXlvdXQoY29udGV4dCk7Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgYWN0dWFsIERyYXdhYmxlIG9iamVjdCB0byBkcmF3Ci0gICAgICAgICAgICBEcmF3YWJsZSBkID0gUmVzb3VyY2VIZWxwZXIuZ2V0RHJhd2FibGUoZHJhd2FibGVSZXNvdXJjZSwgY29udGV4dCk7Ci0gICAgICAgICAgICBjb250ZW50LnNldEJhY2tncm91bmQoZCk7Ci0KLSAgICAgICAgICAgIC8vIHNldCB0aGUgQXR0YWNoSW5mbyBvbiB0aGUgcm9vdCB2aWV3LgotICAgICAgICAgICAgQXR0YWNoSW5mb19BY2Nlc3Nvci5zZXRBdHRhY2hJbmZvKGNvbnRlbnQpOwotCi0KLSAgICAgICAgICAgIC8vIG1lYXN1cmUKLSAgICAgICAgICAgIGludCB3ID0gaGFyZHdhcmVDb25maWcuZ2V0U2NyZWVuV2lkdGgoKTsKLSAgICAgICAgICAgIGludCBoID0gaGFyZHdhcmVDb25maWcuZ2V0U2NyZWVuSGVpZ2h0KCk7Ci0gICAgICAgICAgICBpbnQgd19zcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKHcsIE1lYXN1cmVTcGVjLkVYQUNUTFkpOwotICAgICAgICAgICAgaW50IGhfc3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhoLCBNZWFzdXJlU3BlYy5FWEFDVExZKTsKLSAgICAgICAgICAgIGNvbnRlbnQubWVhc3VyZSh3X3NwZWMsIGhfc3BlYyk7Ci0KLSAgICAgICAgICAgIC8vIG5vdyBkbyB0aGUgbGF5b3V0LgotICAgICAgICAgICAgY29udGVudC5sYXlvdXQoMCwgMCwgdywgaCk7Ci0KLSAgICAgICAgICAgIC8vIHByZURyYXcgc2V0dXAKLSAgICAgICAgICAgIEF0dGFjaEluZm9fQWNjZXNzb3IuZGlzcGF0Y2hPblByZURyYXcoY29udGVudCk7Ci0KLSAgICAgICAgICAgIC8vIGRyYXcgaW50byBhIG5ldyBpbWFnZQotICAgICAgICAgICAgQnVmZmVyZWRJbWFnZSBpbWFnZSA9IGdldEltYWdlKHcsIGgpOwotCi0gICAgICAgICAgICAvLyBjcmVhdGUgYW4gQW5kcm9pZCBiaXRtYXAgYXJvdW5kIHRoZSBCdWZmZXJlZEltYWdlCi0gICAgICAgICAgICBCaXRtYXAgYml0bWFwID0gQml0bWFwX0RlbGVnYXRlLmNyZWF0ZUJpdG1hcChpbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKmlzTXV0YWJsZSovLCBoYXJkd2FyZUNvbmZpZy5nZXREZW5zaXR5KCkpOwotCi0gICAgICAgICAgICAvLyBjcmVhdGUgYSBDYW52YXMgYXJvdW5kIHRoZSBBbmRyb2lkIGJpdG1hcAotICAgICAgICAgICAgQ2FudmFzIGNhbnZhcyA9IG5ldyBDYW52YXMoYml0bWFwKTsKLSAgICAgICAgICAgIGNhbnZhcy5zZXREZW5zaXR5KGhhcmR3YXJlQ29uZmlnLmdldERlbnNpdHkoKS5nZXREcGlWYWx1ZSgpKTsKLQotICAgICAgICAgICAgLy8gYW5kIGRyYXcKLSAgICAgICAgICAgIGNvbnRlbnQuZHJhdyhjYW52YXMpOwotCi0gICAgICAgICAgICByZXR1cm4gU3RhdHVzLlNVQ0NFU1MuY3JlYXRlUmVzdWx0KGltYWdlKTsKLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1VOS05PV04uY3JlYXRlUmVzdWx0KGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCBCdWZmZXJlZEltYWdlIGdldEltYWdlKGludCB3LCBpbnQgaCkgewotICAgICAgICBCdWZmZXJlZEltYWdlIGltYWdlID0gbmV3IEJ1ZmZlcmVkSW1hZ2UodywgaCwgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCKTsKLSAgICAgICAgR3JhcGhpY3MyRCBnYyA9IGltYWdlLmNyZWF0ZUdyYXBoaWNzKCk7Ci0gICAgICAgIGdjLnNldENvbXBvc2l0ZShBbHBoYUNvbXBvc2l0ZS5TcmMpOwotCi0gICAgICAgIGdjLnNldENvbG9yKG5ldyBDb2xvcigweDAwMDAwMDAwLCB0cnVlKSk7Ci0gICAgICAgIGdjLmZpbGxSZWN0KDAsIDAsIHcsIGgpOwotCi0gICAgICAgIC8vIGRvbmUKLSAgICAgICAgZ2MuZGlzcG9zZSgpOwotCi0gICAgICAgIHJldHVybiBpbWFnZTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9SZW5kZXJTZXNzaW9uSW1wbC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1JlbmRlclNlc3Npb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzcxZTMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1JlbmRlclNlc3Npb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbDsKLQotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0LlN0YXR1cy5FUlJPUl9BTklNX05PVF9GT1VORDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc3VsdC5TdGF0dXMuRVJST1JfSU5GTEFUSU9OOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0LlN0YXR1cy5FUlJPUl9OT1RfSU5GTEFURUQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLkVSUk9SX1VOS05PV047Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzLkVSUk9SX1ZJRVdHUk9VUF9OT19DSElMRFJFTjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc3VsdC5TdGF0dXMuU1VDQ0VTUzsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5BZGFwdGVyQmluZGluZzsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSGFyZHdhcmVDb25maWc7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklBbmltYXRpb25MaXN0ZW5lcjsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuSUxheW91dFB1bGxQYXJzZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklQcm9qZWN0Q2FsbGJhY2s7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlbmRlclBhcmFtczsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVuZGVyUmVzb3VyY2VzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZW5kZXJTZXNzaW9uOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXNvdXJjZVJlZmVyZW5jZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzb3VyY2VWYWx1ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuUmVzdWx0OwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZXN1bHQuU3RhdHVzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5TZXNzaW9uUGFyYW1zOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5TZXNzaW9uUGFyYW1zLlJlbmRlcmluZ01vZGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlZpZXdJbmZvOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuWG1sVXRpbHM7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUNvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUxheW91dFBhcmFtc01hcEF0dHJpYnV0ZXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZVhtbEJsb2NrUGFyc2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYmFycy5GYWtlQWN0aW9uQmFyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYmFycy5OYXZpZ2F0aW9uQmFyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuYmFycy5TdGF0dXNCYXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5iYXJzLlRpdGxlQmFyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5iaW5kaW5nLkZha2VBZGFwdGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5iaW5kaW5nLkZha2VFeHBhbmRhYmxlQWRhcHRlcjsKLWltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuUmVzb3VyY2VUeXBlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5TY3JlZW5PcmllbnRhdGlvbjsKLWltcG9ydCBjb20uYW5kcm9pZC51dGlsLlBhaXI7Ci0KLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0aW9uVGhyZWFkOwotaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yOwotaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9ySW5mbGF0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uTGF5b3V0VHJhbnNpdGlvbjsKLWltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5MYXlvdXRUcmFuc2l0aW9uLlRyYW5zaXRpb25MaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLmFwcC5GcmFnbWVudF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuQXR0YWNoSW5mb19BY2Nlc3NvcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuQnJpZGdlSW5mbGF0ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQudmlldy5JV2luZG93TWFuYWdlckltcGw7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuTWVhc3VyZVNwZWM7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLkxheW91dFBhcmFtczsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLk1hcmdpbkxheW91dFBhcmFtczsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlckdsb2JhbF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5BYnNMaXN0VmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5BYnNTcGlubmVyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkV4cGFuZGFibGVMaXN0VmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdFZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuUXVpY2tDb250YWN0QmFkZ2U7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGFiSG9zdDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UYWJIb3N0LlRhYlNwZWM7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGFiV2lkZ2V0OwotCi1pbXBvcnQgamF2YS5hd3QuQWxwaGFDb21wb3NpdGU7Ci1pbXBvcnQgamF2YS5hd3QuQ29sb3I7Ci1pbXBvcnQgamF2YS5hd3QuR3JhcGhpY3MyRDsKLWltcG9ydCBqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBDbGFzcyBpbXBsZW1lbnRpbmcgdGhlIHJlbmRlciBzZXNzaW9uLgotICoKLSAqIEEgc2Vzc2lvbiBpcyBhIHN0YXRlZnVsIHJlcHJlc2VudGF0aW9uIG9mIGEgbGF5b3V0IGZpbGUuIEl0IGlzIGluaXRpYWxpemVkIHdpdGggZGF0YSBjb21pbmcKLSAqIHRocm91Z2ggdGhlIHtAbGluayBCcmlkZ2V9IEFQSSB0byBpbmZsYXRlIHRoZSBsYXlvdXQuIEZ1cnRoZXIgYWN0aW9ucyBhbmQgcmVuZGVyaW5nIGNhbiB0aGVuCi0gKiBiZSBkb25lIG9uIHRoZSBsYXlvdXQuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUmVuZGVyU2Vzc2lvbkltcGwgZXh0ZW5kcyBSZW5kZXJBY3Rpb248U2Vzc2lvblBhcmFtcz4gewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfVElUTEVfQkFSX0hFSUdIVCA9IDI1OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NUQVRVU19CQVJfSEVJR0hUID0gMjU7Ci0KLSAgICAvLyBzY2VuZSBzdGF0ZQotICAgIHByaXZhdGUgUmVuZGVyU2Vzc2lvbiBtU2NlbmU7Ci0gICAgcHJpdmF0ZSBCcmlkZ2VYbWxCbG9ja1BhcnNlciBtQmxvY2tQYXJzZXI7Ci0gICAgcHJpdmF0ZSBCcmlkZ2VJbmZsYXRlciBtSW5mbGF0ZXI7Ci0gICAgcHJpdmF0ZSBSZXNvdXJjZVZhbHVlIG1XaW5kb3dCYWNrZ3JvdW5kOwotICAgIHByaXZhdGUgVmlld0dyb3VwIG1WaWV3Um9vdDsKLSAgICBwcml2YXRlIEZyYW1lTGF5b3V0IG1Db250ZW50Um9vdDsKLSAgICBwcml2YXRlIENhbnZhcyBtQ2FudmFzOwotICAgIHByaXZhdGUgaW50IG1NZWFzdXJlZFNjcmVlbldpZHRoID0gLTE7Ci0gICAgcHJpdmF0ZSBpbnQgbU1lYXN1cmVkU2NyZWVuSGVpZ2h0ID0gLTE7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Jc0FscGhhQ2hhbm5lbEltYWdlOwotICAgIHByaXZhdGUgYm9vbGVhbiBtV2luZG93SXNGbG9hdGluZzsKLQotICAgIHByaXZhdGUgaW50IG1TdGF0dXNCYXJTaXplOwotICAgIHByaXZhdGUgaW50IG1OYXZpZ2F0aW9uQmFyU2l6ZTsKLSAgICBwcml2YXRlIGludCBtTmF2aWdhdGlvbkJhck9yaWVudGF0aW9uID0gTGluZWFyTGF5b3V0LkhPUklaT05UQUw7Ci0gICAgcHJpdmF0ZSBpbnQgbVRpdGxlQmFyU2l6ZTsKLSAgICBwcml2YXRlIGludCBtQWN0aW9uQmFyU2l6ZTsKLQotCi0gICAgLy8gaW5mb3JtYXRpb24gYmVpbmcgcmV0dXJuZWQgdGhyb3VnaCB0aGUgQVBJCi0gICAgcHJpdmF0ZSBCdWZmZXJlZEltYWdlIG1JbWFnZTsKLSAgICBwcml2YXRlIExpc3Q8Vmlld0luZm8+IG1WaWV3SW5mb0xpc3Q7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBQb3N0SW5mbGF0ZUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gICAgICAgIHB1YmxpYyBQb3N0SW5mbGF0ZUV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkgewotICAgICAgICAgICAgc3VwZXIobWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbGF5b3V0IHNjZW5lIHdpdGggYWxsIHRoZSBpbmZvcm1hdGlvbiBjb21pbmcgZnJvbSB0aGUgbGF5b3V0IGJyaWRnZSBBUEkuCi0gICAgICogPHA+Ci0gICAgICogVGhpcyA8Yj5tdXN0PC9iPiBiZSBmb2xsb3dlZCBieSBhIGNhbGwgdG8ge0BsaW5rIFJlbmRlclNlc3Npb25JbXBsI2luaXQoKX0sIHdoaWNoIGFjdCBhcyBhCi0gICAgICogY2FsbCB0byB7QGxpbmsgUmVuZGVyU2Vzc2lvbkltcGwjYWNxdWlyZShsb25nKX0KLSAgICAgKgotICAgICAqIEBzZWUgTGF5b3V0QnJpZGdlI2NyZWF0ZVNjZW5lKGNvbS5hbmRyb2lkLmxheW91dGxpYi5hcGkuU2NlbmVQYXJhbXMpCi0gICAgICovCi0gICAgcHVibGljIFJlbmRlclNlc3Npb25JbXBsKFNlc3Npb25QYXJhbXMgcGFyYW1zKSB7Ci0gICAgICAgIHN1cGVyKG5ldyBTZXNzaW9uUGFyYW1zKHBhcmFtcykpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluaXRpYWxpemVzIGFuZCBhY3F1aXJlcyB0aGUgc2NlbmUsIGNyZWF0aW5nIHZhcmlvdXMgQW5kcm9pZCBvYmplY3RzIHN1Y2ggYXMgY29udGV4dCwKLSAgICAgKiBpbmZsYXRlciwgYW5kIHBhcnNlci4KLSAgICAgKgotICAgICAqIEBwYXJhbSB0aW1lb3V0IHRoZSB0aW1lIHRvIHdhaXQgaWYgYW5vdGhlciByZW5kZXJpbmcgaXMgaGFwcGVuaW5nLgotICAgICAqCi0gICAgICogQHJldHVybiB3aGV0aGVyIHRoZSBzY2VuZSB3YXMgcHJlcGFyZWQKLSAgICAgKgotICAgICAqIEBzZWUgI2FjcXVpcmUobG9uZykKLSAgICAgKiBAc2VlICNyZWxlYXNlKCkKLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzdWx0IGluaXQobG9uZyB0aW1lb3V0KSB7Ci0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBzdXBlci5pbml0KHRpbWVvdXQpOwotICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgU2Vzc2lvblBhcmFtcyBwYXJhbXMgPSBnZXRQYXJhbXMoKTsKLSAgICAgICAgQnJpZGdlQ29udGV4dCBjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotCi0gICAgICAgIFJlbmRlclJlc291cmNlcyByZXNvdXJjZXMgPSBnZXRQYXJhbXMoKS5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgRGlzcGxheU1ldHJpY3MgbWV0cmljcyA9IGdldENvbnRleHQoKS5nZXRNZXRyaWNzKCk7Ci0KLSAgICAgICAgLy8gdXNlIGRlZmF1bHQgb2YgdHJ1ZSBpbiBjYXNlIGl0J3Mgbm90IGZvdW5kIHRvIHVzZSBhbHBoYSBieSBkZWZhdWx0Ci0gICAgICAgIG1Jc0FscGhhQ2hhbm5lbEltYWdlICA9IGdldEJvb2xlYW5UaGVtZVZhbHVlKHJlc291cmNlcywKLSAgICAgICAgICAgICAgICAid2luZG93SXNGbG9hdGluZyIsIHRydWUgLypkZWZhdWx0VmFsdWUqLyk7Ci0KLSAgICAgICAgbVdpbmRvd0lzRmxvYXRpbmcgPSBnZXRCb29sZWFuVGhlbWVWYWx1ZShyZXNvdXJjZXMsICJ3aW5kb3dJc0Zsb2F0aW5nIiwKLSAgICAgICAgICAgICAgICB0cnVlIC8qZGVmYXVsdFZhbHVlKi8pOwotCi0gICAgICAgIGZpbmRCYWNrZ3JvdW5kKHJlc291cmNlcyk7Ci0gICAgICAgIGZpbmRTdGF0dXNCYXIocmVzb3VyY2VzLCBtZXRyaWNzKTsKLSAgICAgICAgZmluZEFjdGlvbkJhcihyZXNvdXJjZXMsIG1ldHJpY3MpOwotICAgICAgICBmaW5kTmF2aWdhdGlvbkJhcihyZXNvdXJjZXMsIG1ldHJpY3MpOwotCi0gICAgICAgIC8vIEZJWE1FOiBmaW5kIHRob3NlIG91dCwgYW5kIHBvc3NpYmx5IGFkZCB0aGVtIHRvIHRoZSByZW5kZXIgcGFyYW1zCi0gICAgICAgIGJvb2xlYW4gaGFzTmF2aWdhdGlvbkJhciA9IHRydWU7Ci0gICAgICAgIElXaW5kb3dNYW5hZ2VyIGl3bSA9IG5ldyBJV2luZG93TWFuYWdlckltcGwoZ2V0Q29udGV4dCgpLmdldENvbmZpZ3VyYXRpb24oKSwKLSAgICAgICAgICAgICAgICBtZXRyaWNzLCBTdXJmYWNlLlJPVEFUSU9OXzAsCi0gICAgICAgICAgICAgICAgaGFzTmF2aWdhdGlvbkJhcik7Ci0gICAgICAgIFdpbmRvd01hbmFnZXJHbG9iYWxfRGVsZWdhdGUuc2V0V2luZG93TWFuYWdlclNlcnZpY2UoaXdtKTsKLQotICAgICAgICAvLyBidWlsZCB0aGUgaW5mbGF0ZXIgYW5kIHBhcnNlci4KLSAgICAgICAgbUluZmxhdGVyID0gbmV3IEJyaWRnZUluZmxhdGVyKGNvbnRleHQsIHBhcmFtcy5nZXRQcm9qZWN0Q2FsbGJhY2soKSk7Ci0gICAgICAgIGNvbnRleHQuc2V0QnJpZGdlSW5mbGF0ZXIobUluZmxhdGVyKTsKLQotICAgICAgICBtQmxvY2tQYXJzZXIgPSBuZXcgQnJpZGdlWG1sQmxvY2tQYXJzZXIoCi0gICAgICAgICAgICAgICAgcGFyYW1zLmdldExheW91dERlc2NyaXB0aW9uKCksIGNvbnRleHQsIGZhbHNlIC8qIHBsYXRmb3JtUmVzb3VyY2VGbGFnICovKTsKLQotICAgICAgICByZXR1cm4gU1VDQ0VTUy5jcmVhdGVSZXN1bHQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbmZsYXRlcyB0aGUgbGF5b3V0LgotICAgICAqIDxwPgotICAgICAqIHtAbGluayAjYWNxdWlyZShsb25nKX0gbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZSB0aGlzLgotICAgICAqCi0gICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlIGN1cnJlbnQgY29udGV4dCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgb25lIG93bmVkIGJ5Ci0gICAgICogICAgICB0aGUgc2NlbmUsIG9yIGlmIHtAbGluayAjaW5pdChsb25nKX0gd2FzIG5vdCBjYWxsZWQuCi0gICAgICovCi0gICAgcHVibGljIFJlc3VsdCBpbmZsYXRlKCkgewotICAgICAgICBjaGVja0xvY2soKTsKLQotICAgICAgICB0cnkgewotCi0gICAgICAgICAgICBTZXNzaW9uUGFyYW1zIHBhcmFtcyA9IGdldFBhcmFtcygpOwotICAgICAgICAgICAgSGFyZHdhcmVDb25maWcgaGFyZHdhcmVDb25maWcgPSBwYXJhbXMuZ2V0SGFyZHdhcmVDb25maWcoKTsKLSAgICAgICAgICAgIEJyaWRnZUNvbnRleHQgY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICAgICAgICAgIGJvb2xlYW4gaXNSdGwgPSBCcmlkZ2UuaXNMb2NhbGVSdGwocGFyYW1zLmdldExvY2FsZSgpKTsKLSAgICAgICAgICAgIGludCBkaXJlY3Rpb24gPSBpc1J0bCA/IFZpZXcuTEFZT1VUX0RJUkVDVElPTl9SVEwgOiBWaWV3LkxBWU9VVF9ESVJFQ1RJT05fTFRSOwotCi0gICAgICAgICAgICAvLyB0aGUgdmlldyBncm91cCB0aGF0IHJlY2VpdmVzIHRoZSB3aW5kb3cgYmFja2dyb3VuZC4KLSAgICAgICAgICAgIFZpZXdHcm91cCBiYWNrZ3JvdW5kVmlldyA9IG51bGw7Ci0KLSAgICAgICAgICAgIGlmIChtV2luZG93SXNGbG9hdGluZyB8fCBwYXJhbXMuaXNGb3JjZU5vRGVjb3IoKSkgewotICAgICAgICAgICAgICAgIGJhY2tncm91bmRWaWV3ID0gbVZpZXdSb290ID0gbUNvbnRlbnRSb290ID0gbmV3IEZyYW1lTGF5b3V0KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIG1WaWV3Um9vdC5zZXRMYXlvdXREaXJlY3Rpb24oZGlyZWN0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc1NvZnR3YXJlQnV0dG9ucygpICYmIG1OYXZpZ2F0aW9uQmFyT3JpZW50YXRpb24gPT0gTGluZWFyTGF5b3V0LlZFUlRJQ0FMKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAqIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIG5hdmlnYXRpb24gYmFyIGlzIG9uIHRoZSByaWdodC4KLSAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKwotICAgICAgICAgICAgICAgICAgICAgICB8IFN0YXR1cyBiYXIgKGFsd2F5cykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgfCAoTGF5b3V0IHdpdGggYmFja2dyb3VuZCBkcmF3YWJsZSkgICAgICAgICAgICAgICB8ICAgfAotICAgICAgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgIHwgfCBUaXRsZS9BY3Rpb24gYmFyIChvcHRpb25hbCkgICAgICAgICAgICAgICAgIHwgfCAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8ICAgfAotICAgICAgICAgICAgICAgICAgICAgICB8IHwgQ29udGVudCwgdmVydGljYWwgZXh0ZW5kaW5nICAgICAgICAgICAgICAgICB8IHwgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8ICAgfAotICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0rCi0KLSAgICAgICAgICAgICAgICAgICAgICAgU28gd2UgY3JlYXRlIGEgaG9yaXpvbnRhbCBsYXlvdXQsIHdpdGggdGhlIG5hdiBiYXIgb24gdGhlIHJpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGxlZnQgcGFydCBpcyB0aGUgbm9ybWFsIGxheW91dCBiZWxvdyB3aXRob3V0IHRoZSBuYXYgYmFyIGF0Ci0gICAgICAgICAgICAgICAgICAgICAgIHRoZSBib3R0b20KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIExpbmVhckxheW91dCB0b3BMYXlvdXQgPSBuZXcgTGluZWFyTGF5b3V0KGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICB0b3BMYXlvdXQuc2V0TGF5b3V0RGlyZWN0aW9uKGRpcmVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIG1WaWV3Um9vdCA9IHRvcExheW91dDsKLSAgICAgICAgICAgICAgICAgICAgdG9wTGF5b3V0LnNldE9yaWVudGF0aW9uKExpbmVhckxheW91dC5IT1JJWk9OVEFMKTsKLQotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgTmF2aWdhdGlvbkJhciBuYXZpZ2F0aW9uQmFyID0gbmV3IE5hdmlnYXRpb25CYXIoY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVDb25maWcuZ2V0RGVuc2l0eSgpLCBMaW5lYXJMYXlvdXQuVkVSVElDQUwsIGlzUnRsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaXNSdGxTdXBwb3J0ZWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uQmFyLnNldExheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU5hdmlnYXRpb25CYXJTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvcExheW91dC5hZGRWaWV3KG5hdmlnYXRpb25CYXIpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIGUpIHsKLQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiB3ZSdyZSBjcmVhdGluZyB0aGUgZm9sbG93aW5nIGxheW91dAotICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgfCBTdGF0dXMgYmFyIChhbHdheXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgfCAoTGF5b3V0IHdpdGggYmFja2dyb3VuZCBkcmF3YWJsZSkgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Ci0gICAgICAgICAgICAgICAgICAgfCB8IFRpdGxlL0FjdGlvbiBiYXIgKG9wdGlvbmFsKSAgICAgICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Ci0gICAgICAgICAgICAgICAgICAgfCB8IENvbnRlbnQsIHZlcnRpY2FsIGV4dGVuZGluZyAgICAgICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Ci0gICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgfCBOYXZpZ2F0aW9uIGJhciBmb3Igc29mdCBidXR0b25zLCBtYXliZSBzZWUgYWJvdmV8Ci0gICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KLSAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgIExpbmVhckxheW91dCB0b3BMYXlvdXQgPSBuZXcgTGluZWFyTGF5b3V0KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIHRvcExheW91dC5zZXRPcmllbnRhdGlvbihMaW5lYXJMYXlvdXQuVkVSVElDQUwpOwotICAgICAgICAgICAgICAgIHRvcExheW91dC5zZXRMYXlvdXREaXJlY3Rpb24oZGlyZWN0aW9uKTsKLSAgICAgICAgICAgICAgICAvLyBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYSB2aWV3IHJvb3QgdGhpcyBpcyBpdAotICAgICAgICAgICAgICAgIGlmIChtVmlld1Jvb3QgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtVmlld1Jvb3QgPSB0b3BMYXlvdXQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyBsYXlvdXRQYXJhbXMgPSBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5ULCBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UKTsKLSAgICAgICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLndlaWdodCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHRvcExheW91dC5zZXRMYXlvdXRQYXJhbXMobGF5b3V0UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBjYXNlIG9mIHNvZnQgYnV0dG9ucyArIHZlcnRpY2FsIGJhci4KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0b3AgbGF5b3V0IGlzIHRoZSBmaXJzdCBsYXlvdXQgaW4gdGhlIGhvcml6b250YWwgbGF5b3V0LiBzZWUgYWJvdmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc1J0bCAmJiBwYXJhbXMuaXNSdGxTdXBwb3J0ZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUlRMIGlzIGVuYWJsZWQsIGxheW91dGxpYiB3aWxsIG1pcnJvciB0aGUgbGF5b3V0cy4gU28sIGFkZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvcExheW91dCB0byB0aGUgcmlnaHQgb2YgTmF2aWdhdGlvbiBCYXIgYW5kIGxheW91dGxpYiB3aWxsIGRyYXcgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBsZWZ0LgotICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXdSb290LmFkZFZpZXcodG9wTGF5b3V0KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgdG9wIGxheW91dCB0byB0aGUgbGVmdCBvZiB0aGUgTmF2aWdhdGlvbiBCYXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBtVmlld1Jvb3QuYWRkVmlldyh0b3BMYXlvdXQsIDApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1TdGF0dXNCYXJTaXplID4gMCkgewotICAgICAgICAgICAgICAgICAgICAvLyBzeXN0ZW0gYmFyCi0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNCYXIgc3lzdGVtQmFyID0gbmV3IFN0YXR1c0Jhcihjb250ZXh0LCBoYXJkd2FyZUNvbmZpZy5nZXREZW5zaXR5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiwgcGFyYW1zLmlzUnRsU3VwcG9ydGVkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtQmFyLnNldExheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwgbVN0YXR1c0JhclNpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvcExheW91dC5hZGRWaWV3KHN5c3RlbUJhcik7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSkgewotCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQgYmFja2dyb3VuZExheW91dCA9IG5ldyBMaW5lYXJMYXlvdXQoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgYmFja2dyb3VuZFZpZXcgPSBiYWNrZ3JvdW5kTGF5b3V0OwotICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXlvdXQuc2V0T3JpZW50YXRpb24oTGluZWFyTGF5b3V0LlZFUlRJQ0FMKTsKLSAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zIGxheW91dFBhcmFtcyA9IG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCk7Ci0gICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLndlaWdodCA9IDE7Ci0gICAgICAgICAgICAgICAgYmFja2dyb3VuZExheW91dC5zZXRMYXlvdXRQYXJhbXMobGF5b3V0UGFyYW1zKTsKLSAgICAgICAgICAgICAgICB0b3BMYXlvdXQuYWRkVmlldyhiYWNrZ3JvdW5kTGF5b3V0KTsKLQotCi0gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRoZW1lIHNheXMgbm8gdGl0bGUvYWN0aW9uIGJhciwgdGhlbiB0aGUgc2l6ZSB3aWxsIGJlIDAKLSAgICAgICAgICAgICAgICBpZiAobUFjdGlvbkJhclNpemUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBGYWtlQWN0aW9uQmFyIGFjdGlvbkJhciA9IG5ldyBGYWtlQWN0aW9uQmFyKGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlQ29uZmlnLmdldERlbnNpdHkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmdldEFwcExhYmVsKCksIHBhcmFtcy5nZXRBcHBJY29uKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uQmFyLnNldExheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwgbUFjdGlvbkJhclNpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXlvdXQuYWRkVmlldyhhY3Rpb25CYXIpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIGUpIHsKLQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtVGl0bGVCYXJTaXplID4gMCkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGVCYXIgdGl0bGVCYXIgPSBuZXcgVGl0bGVCYXIoY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVDb25maWcuZ2V0RGVuc2l0eSgpLCBwYXJhbXMuZ2V0QXBwTGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUJhci5zZXRMYXlvdXRQYXJhbXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsIG1UaXRsZUJhclNpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXlvdXQuYWRkVmlldyh0aXRsZUJhcik7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSkgewotCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBjb250ZW50IGZyYW1lCi0gICAgICAgICAgICAgICAgbUNvbnRlbnRSb290ID0gbmV3IEZyYW1lTGF5b3V0KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIGxheW91dFBhcmFtcyA9IG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCk7Ci0gICAgICAgICAgICAgICAgbGF5b3V0UGFyYW1zLndlaWdodCA9IDE7Ci0gICAgICAgICAgICAgICAgbUNvbnRlbnRSb290LnNldExheW91dFBhcmFtcyhsYXlvdXRQYXJhbXMpOwotICAgICAgICAgICAgICAgIGJhY2tncm91bmRMYXlvdXQuYWRkVmlldyhtQ29udGVudFJvb3QpOwotCi0gICAgICAgICAgICAgICAgaWYgKG1OYXZpZ2F0aW9uQmFyT3JpZW50YXRpb24gPT0gTGluZWFyTGF5b3V0LkhPUklaT05UQUwgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIG1OYXZpZ2F0aW9uQmFyU2l6ZSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gc3lzdGVtIGJhcgotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgTmF2aWdhdGlvbkJhciBuYXZpZ2F0aW9uQmFyID0gbmV3IE5hdmlnYXRpb25CYXIoY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVDb25maWcuZ2V0RGVuc2l0eSgpLCBMaW5lYXJMYXlvdXQuSE9SSVpPTlRBTCwgaXNSdGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pc1J0bFN1cHBvcnRlZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25CYXIuc2V0TGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULCBtTmF2aWdhdGlvbkJhclNpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvcExheW91dC5hZGRWaWV3KG5hdmlnYXRpb25CYXIpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIGUpIHsKLQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgIC8vIFNldHMgdGhlIHByb2plY3QgY2FsbGJhY2sgKGN1c3RvbSB2aWV3IGxvYWRlcikgdG8gdGhlIGZyYWdtZW50IGRlbGVnYXRlIHNvIHRoYXQKLSAgICAgICAgICAgIC8vIGl0IGNhbiBpbnN0YW50aWF0ZSB0aGUgY3VzdG9tIEZyYWdtZW50LgotICAgICAgICAgICAgRnJhZ21lbnRfRGVsZWdhdGUuc2V0UHJvamVjdENhbGxiYWNrKHBhcmFtcy5nZXRQcm9qZWN0Q2FsbGJhY2soKSk7Ci0KLSAgICAgICAgICAgIFZpZXcgdmlldyA9IG1JbmZsYXRlci5pbmZsYXRlKG1CbG9ja1BhcnNlciwgbUNvbnRlbnRSb290KTsKLQotICAgICAgICAgICAgLy8gZG9uZSB3aXRoIHRoZSBwYXJzZXIsIHBvcCBpdC4KLSAgICAgICAgICAgIGNvbnRleHQucG9wUGFyc2VyKCk7Ci0KLSAgICAgICAgICAgIEZyYWdtZW50X0RlbGVnYXRlLnNldFByb2plY3RDYWxsYmFjayhudWxsKTsKLQotICAgICAgICAgICAgLy8gc2V0IHRoZSBBdHRhY2hJbmZvIG9uIHRoZSByb290IHZpZXcuCi0gICAgICAgICAgICBBdHRhY2hJbmZvX0FjY2Vzc29yLnNldEF0dGFjaEluZm8obVZpZXdSb290KTsKLQotICAgICAgICAgICAgLy8gcG9zdC1pbmZsYXRlIHByb2Nlc3MuIEZvciBub3cgdGhpcyBzdXBwb3J0cyBUYWJIb3N0L1RhYldpZGdldAotICAgICAgICAgICAgcG9zdEluZmxhdGVQcm9jZXNzKHZpZXcsIHBhcmFtcy5nZXRQcm9qZWN0Q2FsbGJhY2soKSk7Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgYmFja2dyb3VuZCBkcmF3YWJsZQotICAgICAgICAgICAgaWYgKG1XaW5kb3dCYWNrZ3JvdW5kICE9IG51bGwgJiYgYmFja2dyb3VuZFZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIERyYXdhYmxlIGQgPSBSZXNvdXJjZUhlbHBlci5nZXREcmF3YWJsZShtV2luZG93QmFja2dyb3VuZCwgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgYmFja2dyb3VuZFZpZXcuc2V0QmFja2dyb3VuZChkKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIFNVQ0NFU1MuY3JlYXRlUmVzdWx0KCk7Ci0gICAgICAgIH0gY2F0Y2ggKFBvc3RJbmZsYXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHJldHVybiBFUlJPUl9JTkZMQVRJT04uY3JlYXRlUmVzdWx0KGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKLSAgICAgICAgICAgIC8vIGdldCB0aGUgcmVhbCBjYXVzZSBvZiB0aGUgZXhjZXB0aW9uLgotICAgICAgICAgICAgVGhyb3dhYmxlIHQgPSBlOwotICAgICAgICAgICAgd2hpbGUgKHQuZ2V0Q2F1c2UoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdCA9IHQuZ2V0Q2F1c2UoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lORkxBVElPTi5jcmVhdGVSZXN1bHQodC5nZXRNZXNzYWdlKCksIHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVuZGVycyB0aGUgc2NlbmUuCi0gICAgICogPHA+Ci0gICAgICoge0BsaW5rICNhY3F1aXJlKGxvbmcpfSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlIHRoaXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZnJlc2hSZW5kZXIgd2hldGhlciB0aGUgcmVuZGVyIGlzIGEgbmV3IG9uZSBhbmQgc2hvdWxkIGVyYXNlIHRoZSBleGlzdGluZyBiaXRtYXAgKGluCi0gICAgICogICAgICB0aGUgY2FzZSB3aGVyZSBiaXRtYXBzIGFyZSByZXVzZWQpLiBUaGlzIGlzIHR5cGljYWxseSBuZWVkZWQgd2hlbiBub3QgcGxheWluZwotICAgICAqICAgICAgYW5pbWF0aW9ucy4pCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgb3duZWQgYnkKLSAgICAgKiAgICAgIHRoZSBzY2VuZSwgb3IgaWYge0BsaW5rICNhY3F1aXJlKGxvbmcpfSB3YXMgbm90IGNhbGxlZC4KLSAgICAgKgotICAgICAqIEBzZWUgUmVuZGVyUGFyYW1zI2dldFJlbmRlcmluZ01vZGUoKQotICAgICAqIEBzZWUgUmVuZGVyU2Vzc2lvbiNyZW5kZXIobG9uZykKLSAgICAgKi8KLSAgICBwdWJsaWMgUmVzdWx0IHJlbmRlcihib29sZWFuIGZyZXNoUmVuZGVyKSB7Ci0gICAgICAgIGNoZWNrTG9jaygpOwotCi0gICAgICAgIFNlc3Npb25QYXJhbXMgcGFyYW1zID0gZ2V0UGFyYW1zKCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChtVmlld1Jvb3QgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9OT1RfSU5GTEFURUQuY3JlYXRlUmVzdWx0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHBhcmFtcy5nZXRSZW5kZXJpbmdNb2RlKCk7Ci0gICAgICAgICAgICBIYXJkd2FyZUNvbmZpZyBoYXJkd2FyZUNvbmZpZyA9IHBhcmFtcy5nZXRIYXJkd2FyZUNvbmZpZygpOwotCi0gICAgICAgICAgICAvLyBvbmx5IGRvIHRoZSBzY3JlZW4gbWVhc3VyZSB3aGVuIG5lZWRlZC4KLSAgICAgICAgICAgIGJvb2xlYW4gbmV3UmVuZGVyU2l6ZSA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKG1NZWFzdXJlZFNjcmVlbldpZHRoID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgbmV3UmVuZGVyU2l6ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbU1lYXN1cmVkU2NyZWVuV2lkdGggPSBoYXJkd2FyZUNvbmZpZy5nZXRTY3JlZW5XaWR0aCgpOwotICAgICAgICAgICAgICAgIG1NZWFzdXJlZFNjcmVlbkhlaWdodCA9IGhhcmR3YXJlQ29uZmlnLmdldFNjcmVlbkhlaWdodCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZS5OT1JNQUwpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoTWVhc3VyZVNwZWNNb2RlID0gcmVuZGVyaW5nTW9kZS5pc0hvcml6RXhwYW5kKCkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lYXN1cmVTcGVjLlVOU1BFQ0lGSUVEIC8vIHRoaXMgbGV0cyB1cyBrbm93IHRoZSBhY3R1YWwgbmVlZGVkIHNpemUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE1lYXN1cmVTcGVjLkVYQUNUTFk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHRNZWFzdXJlU3BlY01vZGUgPSByZW5kZXJpbmdNb2RlLmlzVmVydEV4cGFuZCgpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWFzdXJlU3BlYy5VTlNQRUNJRklFRCAvLyB0aGlzIGxldHMgdXMga25vdyB0aGUgYWN0dWFsIG5lZWRlZCBzaXplCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNZWFzdXJlU3BlYy5FWEFDVExZOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHVzZWQgdG8gY29tcGFyZSB0aGUgbWVhc3VyZWQgc2l6ZSBvZiB0aGUgY29udGVudCB0byB0aGUgc2NyZWVuIHNpemUgYnV0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgZG9lcyBub3Qgd29yayBhbnltb3JlIGR1ZSB0byB0aGUgMiBmb2xsb3dpbmcgaXNzdWVzOgotICAgICAgICAgICAgICAgICAgICAvLyAtIElmIHRoZSBjb250ZW50IGlzIGluIGEgZGVjb3IgKHN5c3RlbSBiYXIsIHRpdGxlL2FjdGlvbiBiYXIpLCB0aGUgcm9vdCB2aWV3Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgd2lsbCBub3QgcmVzaXplIGV2ZW4gd2l0aCB0aGUgVU5TUEVDSUZJRUQgYmVjYXVzZSBvZiB0aGUgZW1iZWRkZWQgbGF5b3V0LgotICAgICAgICAgICAgICAgICAgICAvLyAtIElmIHRoZXJlIGlzIG5vIGRlY29yLCBidXQgYSBkaWFsb2cgZnJhbWUsIHRoZW4gdGhlIGRpYWxvZyBwYWRkaW5nIHByZXZlbnRzCi0gICAgICAgICAgICAgICAgICAgIC8vICAgY29tcGFyaW5nIHRoZSBzaXplIG9mIHRoZSBjb250ZW50IHRvIHRoZSBzY3JlZW4gZnJhbWUgKGFzIGl0IHdvdWxkIG5vdAotICAgICAgICAgICAgICAgICAgICAvLyAgIHRha2UgaW50byBhY2NvdW50IHRoZSBkaWFsb2cgcGFkZGluZykuCi0KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHNvbHV0aW9uIGlzIHRvIGZpcnN0IGdldCB0aGUgY29udGVudCBzaXplIGluIGEgbm9ybWFsIHJlbmRlcmluZywgaW5zaWRlCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBkZWNvciBvciB0aGUgZGlhbG9nIHBhZGRpbmcuCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoZW4gbWVhc3VyZSBvbmx5IHRoZSBjb250ZW50IHdpdGggVU5TUEVDSUZJRUQgdG8gc2VlIHRoZSBzaXplIGRpZmZlcmVuY2UKLSAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGFwcGx5IHRoaXMgdG8gdGhlIHNjcmVlbiBzaXplLgotCi0gICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IG1lYXN1cmUgdGhlIGZ1bGwgbGF5b3V0LCB3aXRoIEVYQUNUTFkgdG8gZ2V0IHRoZSBzaXplIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50IGFzIGl0IGlzIGluc2lkZSB0aGUgZGVjb3IvZGlhbG9nCi0gICAgICAgICAgICAgICAgICAgIFBhaXI8SW50ZWdlciwgSW50ZWdlcj4gZXhhY3RNZWFzdXJlID0gbWVhc3VyZVZpZXcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXdSb290LCBtQ29udGVudFJvb3QuZ2V0Q2hpbGRBdCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWVhc3VyZWRTY3JlZW5XaWR0aCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWVhc3VyZWRTY3JlZW5IZWlnaHQsIE1lYXN1cmVTcGVjLkVYQUNUTFkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIG5vdyBtZWFzdXJlIHRoZSBjb250ZW50IG9ubHkgdXNpbmcgVU5TUEVDSUZJRUQgKHdoZXJlIGFwcGxpY2FibGUsIGJhc2VkIG9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSByZW5kZXJpbmcgbW9kZSkuIFRoaXMgd2lsbCBnaXZlIHVzIHRoZSBzaXplIHRoZSBjb250ZW50IG5lZWRzLgotICAgICAgICAgICAgICAgICAgICBQYWlyPEludGVnZXIsIEludGVnZXI+IHJlc3VsdCA9IG1lYXN1cmVWaWV3KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZW50Um9vdCwgbUNvbnRlbnRSb290LmdldENoaWxkQXQoMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1lYXN1cmVkU2NyZWVuV2lkdGgsIHdpZHRoTWVhc3VyZVNwZWNNb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NZWFzdXJlZFNjcmVlbkhlaWdodCwgaGVpZ2h0TWVhc3VyZVNwZWNNb2RlKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBub3cgbG9vayBhdCB0aGUgZGlmZmVyZW5jZSBhbmQgYWRkIHdoYXQgaXMgbmVlZGVkLgotICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyaW5nTW9kZS5pc0hvcml6RXhwYW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZWFzdXJlZFdpZHRoID0gZXhhY3RNZWFzdXJlLmdldEZpcnN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmVlZGVkV2lkdGggPSByZXN1bHQuZ2V0Rmlyc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkZWRXaWR0aCA+IG1lYXN1cmVkV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWVhc3VyZWRTY3JlZW5XaWR0aCArPSBuZWVkZWRXaWR0aCAtIG1lYXN1cmVkV2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyaW5nTW9kZS5pc1ZlcnRFeHBhbmQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lYXN1cmVkSGVpZ2h0ID0gZXhhY3RNZWFzdXJlLmdldFNlY29uZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5lZWRlZEhlaWdodCA9IHJlc3VsdC5nZXRTZWNvbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkZWRIZWlnaHQgPiBtZWFzdXJlZEhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NZWFzdXJlZFNjcmVlbkhlaWdodCArPSBuZWVkZWRIZWlnaHQgLSBtZWFzdXJlZEhlaWdodDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gbWVhc3VyZSBhZ2FpbiB3aXRoIHRoZSBzaXplIHdlIG5lZWQKLSAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBhbHdheXMgYmUgZG9uZSBiZWZvcmUgdGhlIGNhbGwgdG8gbGF5b3V0Ci0gICAgICAgICAgICBtZWFzdXJlVmlldyhtVmlld1Jvb3QsIG51bGwgLyptZWFzdXJlZFZpZXcqLywKLSAgICAgICAgICAgICAgICAgICAgbU1lYXN1cmVkU2NyZWVuV2lkdGgsIE1lYXN1cmVTcGVjLkVYQUNUTFksCi0gICAgICAgICAgICAgICAgICAgIG1NZWFzdXJlZFNjcmVlbkhlaWdodCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSk7Ci0KLSAgICAgICAgICAgIC8vIG5vdyBkbyB0aGUgbGF5b3V0LgotICAgICAgICAgICAgbVZpZXdSb290LmxheW91dCgwLCAwLCBtTWVhc3VyZWRTY3JlZW5XaWR0aCwgbU1lYXN1cmVkU2NyZWVuSGVpZ2h0KTsKLQotICAgICAgICAgICAgaWYgKHBhcmFtcy5pc0xheW91dE9ubHkoKSkgewotICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSB0aGUgY2FudmFzIGFuZCBpbWFnZSB0byByZXNldCB0aGVtIG9uIHRoZSBuZXh0IGZ1bGwgcmVuZGVyaW5nCi0gICAgICAgICAgICAgICAgbUltYWdlID0gbnVsbDsKLSAgICAgICAgICAgICAgICBtQ2FudmFzID0gbnVsbDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQXR0YWNoSW5mb19BY2Nlc3Nvci5kaXNwYXRjaE9uUHJlRHJhdyhtVmlld1Jvb3QpOwotCi0gICAgICAgICAgICAgICAgLy8gZHJhdyB0aGUgdmlld3MKLSAgICAgICAgICAgICAgICAvLyBjcmVhdGUgdGhlIEJ1ZmZlcmVkSW1hZ2UgaW50byB3aGljaCB0aGUgbGF5b3V0IHdpbGwgYmUgcmVuZGVyZWQuCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBuZXdJbWFnZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmIChuZXdSZW5kZXJTaXplIHx8IG1DYW52YXMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmdldEltYWdlRmFjdG9yeSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1JbWFnZSA9IHBhcmFtcy5nZXRJbWFnZUZhY3RvcnkoKS5nZXRJbWFnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1lYXN1cmVkU2NyZWVuV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NZWFzdXJlZFNjcmVlbkhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtSW1hZ2UgPSBuZXcgQnVmZmVyZWRJbWFnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1lYXN1cmVkU2NyZWVuV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NZWFzdXJlZFNjcmVlbkhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ltYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuaXNCZ0NvbG9yT3ZlcnJpZGRlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSBvdmVycmlkZSB0aGUgY29udGVudCwgaXQncyB0aGUgc2FtZSBhcyBpZiBpdCB3YXMgYSBuZXcgaW1hZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdJbWFnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljczJEIGdjID0gbUltYWdlLmNyZWF0ZUdyYXBoaWNzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnYy5zZXRDb2xvcihuZXcgQ29sb3IocGFyYW1zLmdldE92ZXJyaWRlQmdDb2xvcigpLCB0cnVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnYy5zZXRDb21wb3NpdGUoQWxwaGFDb21wb3NpdGUuU3JjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdjLmZpbGxSZWN0KDAsIDAsIG1NZWFzdXJlZFNjcmVlbldpZHRoLCBtTWVhc3VyZWRTY3JlZW5IZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ2MuZGlzcG9zZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIEFuZHJvaWQgYml0bWFwIGFyb3VuZCB0aGUgQnVmZmVyZWRJbWFnZQotICAgICAgICAgICAgICAgICAgICBCaXRtYXAgYml0bWFwID0gQml0bWFwX0RlbGVnYXRlLmNyZWF0ZUJpdG1hcChtSW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKmlzTXV0YWJsZSovLCBoYXJkd2FyZUNvbmZpZy5nZXREZW5zaXR5KCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIENhbnZhcyBhcm91bmQgdGhlIEFuZHJvaWQgYml0bWFwCi0gICAgICAgICAgICAgICAgICAgIG1DYW52YXMgPSBuZXcgQ2FudmFzKGJpdG1hcCk7Ci0gICAgICAgICAgICAgICAgICAgIG1DYW52YXMuc2V0RGVuc2l0eShoYXJkd2FyZUNvbmZpZy5nZXREZW5zaXR5KCkuZ2V0RHBpVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGZyZXNoUmVuZGVyICYmIG5ld0ltYWdlID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzMkQgZ2MgPSBtSW1hZ2UuY3JlYXRlR3JhcGhpY3MoKTsKLSAgICAgICAgICAgICAgICAgICAgZ2Muc2V0Q29tcG9zaXRlKEFscGhhQ29tcG9zaXRlLlNyYyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZ2Muc2V0Q29sb3IobmV3IENvbG9yKDB4MDAwMDAwMDAsIHRydWUpKTsKLSAgICAgICAgICAgICAgICAgICAgZ2MuZmlsbFJlY3QoMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWVhc3VyZWRTY3JlZW5XaWR0aCwgbU1lYXN1cmVkU2NyZWVuSGVpZ2h0KTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBkb25lCi0gICAgICAgICAgICAgICAgICAgIGdjLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtVmlld1Jvb3QuZHJhdyhtQ2FudmFzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVZpZXdJbmZvTGlzdCA9IHN0YXJ0VmlzaXRpbmdWaWV3cyhtVmlld1Jvb3QsIDAsIHBhcmFtcy5nZXRFeHRlbmRlZFZpZXdJbmZvTW9kZSgpKTsKLQotICAgICAgICAgICAgLy8gc3VjY2VzcyEKLSAgICAgICAgICAgIHJldHVybiBTVUNDRVNTLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewotICAgICAgICAgICAgLy8gZ2V0IHRoZSByZWFsIGNhdXNlIG9mIHRoZSBleGNlcHRpb24uCi0gICAgICAgICAgICBUaHJvd2FibGUgdCA9IGU7Ci0gICAgICAgICAgICB3aGlsZSAodC5nZXRDYXVzZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0ID0gdC5nZXRDYXVzZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gRVJST1JfVU5LTk9XTi5jcmVhdGVSZXN1bHQodC5nZXRNZXNzYWdlKCksIHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXhlY3V0ZXMge0BsaW5rIFZpZXcjbWVhc3VyZShpbnQsIGludCl9IG9uIGEgZ2l2ZW4gdmlldyB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzICh1c2VkCi0gICAgICogdG8gY3JlYXRlIG1lYXN1cmUgc3BlY3Mgd2l0aCB7QGxpbmsgTWVhc3VyZVNwZWMjbWFrZU1lYXN1cmVTcGVjKGludCwgaW50KX0uCi0gICAgICoKLSAgICAgKiBpZiA8dmFyPm1lYXN1cmVkVmlldzwvdmFyPiBpcyBub24gbnVsbCwgdGhlIG1ldGhvZCByZXR1cm5zIGEge0BsaW5rIFBhaXJ9IG9mICh3aWR0aCwgaGVpZ2h0KQotICAgICAqIGZvciB0aGUgdmlldyAodXNpbmcge0BsaW5rIFZpZXcjZ2V0TWVhc3VyZWRXaWR0aCgpfSBhbmQge0BsaW5rIFZpZXcjZ2V0TWVhc3VyZWRIZWlnaHQoKX0pLgotICAgICAqCi0gICAgICogQHBhcmFtIHZpZXdUb01lYXN1cmUgdGhlIHZpZXcgb24gd2hpY2ggdG8gZXhlY3V0ZSBtZWFzdXJlKCkuCi0gICAgICogQHBhcmFtIG1lYXN1cmVkVmlldyBpZiBub24gbnVsbCwgdGhlIHZpZXcgdG8gcXVlcnkgZm9yIGl0cyBtZWFzdXJlZCB3aWR0aC9oZWlnaHQuCi0gICAgICogQHBhcmFtIHdpZHRoIHRoZSB3aWR0aCB0byB1c2UgaW4gdGhlIE1lYXN1cmVTcGVjLgotICAgICAqIEBwYXJhbSB3aWR0aE1vZGUgdGhlIE1lYXN1cmVTcGVjIG1vZGUgdG8gdXNlIGZvciB0aGUgd2lkdGguCi0gICAgICogQHBhcmFtIGhlaWdodCB0aGUgaGVpZ2h0IHRvIHVzZSBpbiB0aGUgTWVhc3VyZVNwZWMuCi0gICAgICogQHBhcmFtIGhlaWdodE1vZGUgdGhlIE1lYXN1cmVTcGVjIG1vZGUgdG8gdXNlIGZvciB0aGUgaGVpZ2h0LgotICAgICAqIEByZXR1cm4gdGhlIG1lYXN1cmVkIHdpZHRoL2hlaWdodCBpZiBtZWFzdXJlZFZpZXcgaXMgbm9uLW51bGwsIG51bGwgb3RoZXJ3aXNlLgotICAgICAqLwotICAgIHByaXZhdGUgUGFpcjxJbnRlZ2VyLCBJbnRlZ2VyPiBtZWFzdXJlVmlldyhWaWV3R3JvdXAgdmlld1RvTWVhc3VyZSwgVmlldyBtZWFzdXJlZFZpZXcsCi0gICAgICAgICAgICBpbnQgd2lkdGgsIGludCB3aWR0aE1vZGUsIGludCBoZWlnaHQsIGludCBoZWlnaHRNb2RlKSB7Ci0gICAgICAgIGludCB3X3NwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMod2lkdGgsIHdpZHRoTW9kZSk7Ci0gICAgICAgIGludCBoX3NwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoaGVpZ2h0LCBoZWlnaHRNb2RlKTsKLSAgICAgICAgdmlld1RvTWVhc3VyZS5tZWFzdXJlKHdfc3BlYywgaF9zcGVjKTsKLQotICAgICAgICBpZiAobWVhc3VyZWRWaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBQYWlyLm9mKG1lYXN1cmVkVmlldy5nZXRNZWFzdXJlZFdpZHRoKCksIG1lYXN1cmVkVmlldy5nZXRNZWFzdXJlZEhlaWdodCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFuaW1hdGUgYW4gb2JqZWN0Ci0gICAgICogPHA+Ci0gICAgICoge0BsaW5rICNhY3F1aXJlKGxvbmcpfSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlIHRoaXMuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgb3duZWQgYnkKLSAgICAgKiAgICAgIHRoZSBzY2VuZSwgb3IgaWYge0BsaW5rICNhY3F1aXJlKGxvbmcpfSB3YXMgbm90IGNhbGxlZC4KLSAgICAgKgotICAgICAqIEBzZWUgUmVuZGVyU2Vzc2lvbiNhbmltYXRlKE9iamVjdCwgU3RyaW5nLCBib29sZWFuLCBJQW5pbWF0aW9uTGlzdGVuZXIpCi0gICAgICovCi0gICAgcHVibGljIFJlc3VsdCBhbmltYXRlKE9iamVjdCB0YXJnZXRPYmplY3QsIFN0cmluZyBhbmltYXRpb25OYW1lLAotICAgICAgICAgICAgYm9vbGVhbiBpc0ZyYW1ld29ya0FuaW1hdGlvbiwgSUFuaW1hdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIGNoZWNrTG9jaygpOwotCi0gICAgICAgIEJyaWRnZUNvbnRleHQgY29udGV4dCA9IGdldENvbnRleHQoKTsKLQotICAgICAgICAvLyBmaW5kIHRoZSBhbmltYXRpb24gZmlsZS4KLSAgICAgICAgUmVzb3VyY2VWYWx1ZSBhbmltYXRpb25SZXNvdXJjZSA9IG51bGw7Ci0gICAgICAgIGludCBhbmltYXRpb25JZCA9IDA7Ci0gICAgICAgIGlmIChpc0ZyYW1ld29ya0FuaW1hdGlvbikgewotICAgICAgICAgICAgYW5pbWF0aW9uUmVzb3VyY2UgPSBjb250ZXh0LmdldFJlbmRlclJlc291cmNlcygpLmdldEZyYW1ld29ya1Jlc291cmNlKAotICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVR5cGUuQU5JTUFUT1IsIGFuaW1hdGlvbk5hbWUpOwotICAgICAgICAgICAgaWYgKGFuaW1hdGlvblJlc291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBhbmltYXRpb25JZCA9IEJyaWRnZS5nZXRSZXNvdXJjZUlkKFJlc291cmNlVHlwZS5BTklNQVRPUiwgYW5pbWF0aW9uTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhbmltYXRpb25SZXNvdXJjZSA9IGNvbnRleHQuZ2V0UmVuZGVyUmVzb3VyY2VzKCkuZ2V0UHJvamVjdFJlc291cmNlKAotICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVR5cGUuQU5JTUFUT1IsIGFuaW1hdGlvbk5hbWUpOwotICAgICAgICAgICAgaWYgKGFuaW1hdGlvblJlc291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBhbmltYXRpb25JZCA9IGNvbnRleHQuZ2V0UHJvamVjdENhbGxiYWNrKCkuZ2V0UmVzb3VyY2VJZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVHlwZS5BTklNQVRPUiwgYW5pbWF0aW9uTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYW5pbWF0aW9uUmVzb3VyY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBBbmltYXRvciBhbmltID0gQW5pbWF0b3JJbmZsYXRlci5sb2FkQW5pbWF0b3IoY29udGV4dCwgYW5pbWF0aW9uSWQpOwotICAgICAgICAgICAgICAgIGlmIChhbmltICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgYW5pbS5zZXRUYXJnZXQodGFyZ2V0T2JqZWN0KTsKLQotICAgICAgICAgICAgICAgICAgICBuZXcgUGxheUFuaW1hdGlvblRocmVhZChhbmltLCB0aGlzLCBhbmltYXRpb25OYW1lLCBsaXN0ZW5lcikuc3RhcnQoKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1VDQ0VTUy5jcmVhdGVSZXN1bHQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgcmVhbCBjYXVzZSBvZiB0aGUgZXhjZXB0aW9uLgotICAgICAgICAgICAgICAgIFRocm93YWJsZSB0ID0gZTsKLSAgICAgICAgICAgICAgICB3aGlsZSAodC5nZXRDYXVzZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdCA9IHQuZ2V0Q2F1c2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfVU5LTk9XTi5jcmVhdGVSZXN1bHQodC5nZXRNZXNzYWdlKCksIHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEVSUk9SX0FOSU1fTk9UX0ZPVU5ELmNyZWF0ZVJlc3VsdCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluc2VydCBhIG5ldyBjaGlsZCBpbnRvIGFuIGV4aXN0aW5nIHBhcmVudC4KLSAgICAgKiA8cD4KLSAgICAgKiB7QGxpbmsgI2FjcXVpcmUobG9uZyl9IG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBiZWZvcmUgdGhpcy4KLSAgICAgKgotICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgZGlmZmVyZW50IHRoYW4gdGhlIG9uZSBvd25lZCBieQotICAgICAqICAgICAgdGhlIHNjZW5lLCBvciBpZiB7QGxpbmsgI2FjcXVpcmUobG9uZyl9IHdhcyBub3QgY2FsbGVkLgotICAgICAqCi0gICAgICogQHNlZSBSZW5kZXJTZXNzaW9uI2luc2VydENoaWxkKE9iamVjdCwgSUxheW91dFB1bGxQYXJzZXIsIGludCwgSUFuaW1hdGlvbkxpc3RlbmVyKQotICAgICAqLwotICAgIHB1YmxpYyBSZXN1bHQgaW5zZXJ0Q2hpbGQoZmluYWwgVmlld0dyb3VwIHBhcmVudFZpZXcsIElMYXlvdXRQdWxsUGFyc2VyIGNoaWxkWG1sLAotICAgICAgICAgICAgZmluYWwgaW50IGluZGV4LCBJQW5pbWF0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgY2hlY2tMb2NrKCk7Ci0KLSAgICAgICAgQnJpZGdlQ29udGV4dCBjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotCi0gICAgICAgIC8vIGNyZWF0ZSBhIGJsb2NrIHBhcnNlciBmb3IgdGhlIFhNTAotICAgICAgICBCcmlkZ2VYbWxCbG9ja1BhcnNlciBibG9ja1BhcnNlciA9IG5ldyBCcmlkZ2VYbWxCbG9ja1BhcnNlcigKLSAgICAgICAgICAgICAgICBjaGlsZFhtbCwgY29udGV4dCwgZmFsc2UgLyogcGxhdGZvcm1SZXNvdXJjZUZsYWcgKi8pOwotCi0gICAgICAgIC8vIGluZmxhdGUgdGhlIGNoaWxkIHdpdGhvdXQgYWRkaW5nIGl0IHRvIHRoZSByb290IHNpbmNlIHdlIHdhbnQgdG8gY29udHJvbCB3aGVyZSBpdCdsbAotICAgICAgICAvLyBnZXQgYWRkZWQuIFdlIGRvIHBhc3MgdGhlIHBhcmVudFZpZXcgaG93ZXZlciB0byBlbnN1cmUgdGhhdCB0aGUgbGF5b3V0UGFyYW1zIHdpbGwKLSAgICAgICAgLy8gYmUgY3JlYXRlZCBjb3JyZWN0bHkuCi0gICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBtSW5mbGF0ZXIuaW5mbGF0ZShibG9ja1BhcnNlciwgcGFyZW50VmlldywgZmFsc2UgLyphdHRhY2hUb1Jvb3QqLyk7Ci0gICAgICAgIGJsb2NrUGFyc2VyLmVuc3VyZVBvcHBlZCgpOwotCi0gICAgICAgIGludmFsaWRhdGVSZW5kZXJpbmdTaXplKCk7Ci0KLSAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG5ldyBBbmltYXRpb25UaHJlYWQodGhpcywgImluc2VydENoaWxkIiwgbGlzdGVuZXIpIHsKLQotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyBSZXN1bHQgcHJlQW5pbWF0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBwYXJlbnRWaWV3LnNldExheW91dFRyYW5zaXRpb24obmV3IExheW91dFRyYW5zaXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRWaWV3KHBhcmVudFZpZXcsIGNoaWxkLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcG9zdEFuaW1hdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50Vmlldy5zZXRMYXlvdXRUcmFuc2l0aW9uKG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0uc3RhcnQoKTsKLQotICAgICAgICAgICAgLy8gYWx3YXlzIHJldHVybiBzdWNjZXNzIHNpbmNlIHRoZSByZWFsIHN0YXR1cyB3aWxsIGNvbWUgdGhyb3VnaCB0aGUgbGlzdGVuZXIuCi0gICAgICAgICAgICByZXR1cm4gU1VDQ0VTUy5jcmVhdGVSZXN1bHQoY2hpbGQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYWRkIGl0IHRvIHRoZSBwYXJlbnRWaWV3IGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uCi0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBhZGRWaWV3KHBhcmVudFZpZXcsIGNoaWxkLCBpbmRleCk7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSByZW5kZXIoZmFsc2UgLypmcmVzaFJlbmRlciovKTsKLSAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MoKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmdldENvcHlXaXRoRGF0YShjaGlsZCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZHMgYSBnaXZlbiB2aWV3IHRvIGEgZ2l2ZW4gcGFyZW50IGF0IGEgZ2l2ZW4gaW5kZXguCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcGFyZW50IHRoZSBwYXJlbnQgdG8gcmVjZWl2ZSB0aGUgdmlldwotICAgICAqIEBwYXJhbSB2aWV3IHRoZSB2aWV3IHRvIGFkZCB0byB0aGUgcGFyZW50Ci0gICAgICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCB3aGVyZSB0byBkbyB0aGUgYWRkLgotICAgICAqCi0gICAgICogQHJldHVybiBhIFJlc3VsdCB3aXRoIHtAbGluayBTdGF0dXMjU1VDQ0VTU30gb3IKLSAgICAgKiAgICAge0BsaW5rIFN0YXR1cyNFUlJPUl9WSUVXR1JPVVBfTk9fQ0hJTERSRU59IGlmIHRoZSBnaXZlbiBwYXJlbnQgZG9lc24ndCBzdXBwb3J0Ci0gICAgICogICAgIGFkZGluZyB2aWV3cy4KLSAgICAgKi8KLSAgICBwcml2YXRlIFJlc3VsdCBhZGRWaWV3KFZpZXdHcm91cCBwYXJlbnQsIFZpZXcgdmlldywgaW50IGluZGV4KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBwYXJlbnQuYWRkVmlldyh2aWV3LCBpbmRleCk7Ci0gICAgICAgICAgICByZXR1cm4gU1VDQ0VTUy5jcmVhdGVSZXN1bHQoKTsKLSAgICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gbG9va3MgbGlrZSB0aGlzIGlzIGEgdmlldyBjbGFzcyB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBjaGlsZHJlbiBtYW5pcHVsYXRpb24hCi0gICAgICAgICAgICByZXR1cm4gRVJST1JfVklFV0dST1VQX05PX0NISUxEUkVOLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTW92ZXMgYSB2aWV3IHRvIGEgbmV3IHBhcmVudCBhdCBhIGdpdmVuIGxvY2F0aW9uCi0gICAgICogPHA+Ci0gICAgICoge0BsaW5rICNhY3F1aXJlKGxvbmcpfSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlIHRoaXMuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgb3duZWQgYnkKLSAgICAgKiAgICAgIHRoZSBzY2VuZSwgb3IgaWYge0BsaW5rICNhY3F1aXJlKGxvbmcpfSB3YXMgbm90IGNhbGxlZC4KLSAgICAgKgotICAgICAqIEBzZWUgUmVuZGVyU2Vzc2lvbiNtb3ZlQ2hpbGQoT2JqZWN0LCBPYmplY3QsIGludCwgTWFwLCBJQW5pbWF0aW9uTGlzdGVuZXIpCi0gICAgICovCi0gICAgcHVibGljIFJlc3VsdCBtb3ZlQ2hpbGQoZmluYWwgVmlld0dyb3VwIG5ld1BhcmVudFZpZXcsIGZpbmFsIFZpZXcgY2hpbGRWaWV3LCBmaW5hbCBpbnQgaW5kZXgsCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGxheW91dFBhcmFtc01hcCwgZmluYWwgSUFuaW1hdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIGNoZWNrTG9jaygpOwotCi0gICAgICAgIGludmFsaWRhdGVSZW5kZXJpbmdTaXplKCk7Ci0KLSAgICAgICAgTGF5b3V0UGFyYW1zIGxheW91dFBhcmFtcyA9IG51bGw7Ci0gICAgICAgIGlmIChsYXlvdXRQYXJhbXNNYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gbmVlZCB0byBjcmVhdGUgYSBuZXcgTGF5b3V0UGFyYW1zIG9iamVjdCBmb3IgdGhlIG5ldyBwYXJlbnQuCi0gICAgICAgICAgICBsYXlvdXRQYXJhbXMgPSBuZXdQYXJlbnRWaWV3LmdlbmVyYXRlTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICBuZXcgQnJpZGdlTGF5b3V0UGFyYW1zTWFwQXR0cmlidXRlcyhsYXlvdXRQYXJhbXNNYXApKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdldCB0aGUgY3VycmVudCBwYXJlbnQgb2YgdGhlIHZpZXcgdGhhdCBuZWVkcyB0byBiZSBtb3ZlZC4KLSAgICAgICAgZmluYWwgVmlld0dyb3VwIHByZXZpb3VzUGFyZW50ID0gKFZpZXdHcm91cCkgY2hpbGRWaWV3LmdldFBhcmVudCgpOwotCi0gICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgcGFyYW1zID0gbGF5b3V0UGFyYW1zOwotCi0gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBhbmltYXRpbmcgdmlld3MgYWNyb3NzIGxheW91dHMsIHNvIGluIGNhc2UgdGhlIG5ldyBhbmQgb2xkCi0gICAgICAgICAgICAvLyBwYXJlbnQgdmlld3MgYXJlIGRpZmZlcmVudCB3ZSBmYWtlIHRoZSBhbmltYXRpb24gdGhyb3VnaCBhIG5vIGFuaW1hdGlvbiB0aHJlYWQuCi0gICAgICAgICAgICBpZiAocHJldmlvdXNQYXJlbnQgIT0gbmV3UGFyZW50VmlldykgewotICAgICAgICAgICAgICAgIG5ldyBUaHJlYWQoIm5vdCBhbmltYXRlZCBtb3ZlQ2hpbGQiKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgcmVzdWx0ID0gbW92ZVZpZXcocHJldmlvdXNQYXJlbnQsIG5ld1BhcmVudFZpZXcsIGNoaWxkVmlldywgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuZG9uZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWFkeSB0byBkbyB0aGUgd29yaywgYWNxdWlyZSB0aGUgc2NlbmUuCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhY3F1aXJlKDI1MCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuZG9uZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZW5kZXIoZmFsc2UgLypmcmVzaFJlbmRlciovKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLm9uTmV3RnJhbWUoUmVuZGVyU2Vzc2lvbkltcGwudGhpcy5nZXRTZXNzaW9uKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5kb25lKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LnN0YXJ0KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5ldyBBbmltYXRpb25UaHJlYWQodGhpcywgIm1vdmVDaGlsZCIsIGxpc3RlbmVyKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyBSZXN1bHQgcHJlQW5pbWF0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHVwIHRoZSB0cmFuc2l0aW9uIGZvciB0aGUgcGFyZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VHJhbnNpdGlvbiB0cmFuc2l0aW9uID0gbmV3IExheW91dFRyYW5zaXRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUGFyZW50LnNldExheW91dFRyYW5zaXRpb24odHJhbnNpdGlvbik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHR3ZWFrIHRoZSBhbmltYXRpb24gZHVyYXRpb25zIGFuZCBzdGFydCBkZWxheXMgKHRvIG1hdGNoIHRoZSBkdXJhdGlvbiBvZgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIHBsYXlpbmcganVzdCBiZWZvcmUpLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogQ2Fubm90IHVzZXIgQW5pbWF0aW9uLnNldER1cmF0aW9uKCkgZGlyZWN0bHkuIEhhdmUgdG8gc2V0IGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbiB0aGUgTGF5b3V0VHJhbnNpdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uc2V0RHVyYXRpb24oTGF5b3V0VHJhbnNpdGlvbi5ESVNBUFBFQVJJTkcsIDEwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDSEFOR0VfRElTQVBQRUFSSU5HIHBsYXlzIGFmdGVyIERJU0FQUEVBUklORwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi5zZXRTdGFydERlbGF5KExheW91dFRyYW5zaXRpb24uQ0hBTkdFX0RJU0FQUEVBUklORywgMTAwKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi5zZXREdXJhdGlvbihMYXlvdXRUcmFuc2l0aW9uLkNIQU5HRV9ESVNBUFBFQVJJTkcsIDEwMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uc2V0RHVyYXRpb24oTGF5b3V0VHJhbnNpdGlvbi5DSEFOR0VfQVBQRUFSSU5HLCAxMDApOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0hBTkdFX0FQUEVBUklORyBwbGF5cyBhZnRlciBDSEFOR0VfQVBQRUFSSU5HCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLnNldFN0YXJ0RGVsYXkoTGF5b3V0VHJhbnNpdGlvbi5BUFBFQVJJTkcsIDEwMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uc2V0RHVyYXRpb24oTGF5b3V0VHJhbnNpdGlvbi5BUFBFQVJJTkcsIDEwMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb3ZlVmlldyhwcmV2aW91c1BhcmVudCwgbmV3UGFyZW50VmlldywgY2hpbGRWaWV3LCBpbmRleCwgcGFyYW1zKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBwb3N0QW5pbWF0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNQYXJlbnQuc2V0TGF5b3V0VHJhbnNpdGlvbihudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcmVudFZpZXcuc2V0TGF5b3V0VHJhbnNpdGlvbihudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0uc3RhcnQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gYWx3YXlzIHJldHVybiBzdWNjZXNzIHNpbmNlIHRoZSByZWFsIHN0YXR1cyB3aWxsIGNvbWUgdGhyb3VnaCB0aGUgbGlzdGVuZXIuCi0gICAgICAgICAgICByZXR1cm4gU1VDQ0VTUy5jcmVhdGVSZXN1bHQobGF5b3V0UGFyYW1zKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlc3VsdCByZXN1bHQgPSBtb3ZlVmlldyhwcmV2aW91c1BhcmVudCwgbmV3UGFyZW50VmlldywgY2hpbGRWaWV3LCBpbmRleCwgbGF5b3V0UGFyYW1zKTsKLSAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MoKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdCA9IHJlbmRlcihmYWxzZSAvKmZyZXNoUmVuZGVyKi8pOwotICAgICAgICBpZiAobGF5b3V0UGFyYW1zICE9IG51bGwgJiYgcmVzdWx0LmlzU3VjY2VzcygpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuZ2V0Q29weVdpdGhEYXRhKGxheW91dFBhcmFtcyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE1vdmVzIGEgVmlldyBmcm9tIGl0cyBjdXJyZW50IHBhcmVudCB0byBhIG5ldyBnaXZlbiBwYXJlbnQgYXQgYSBuZXcgZ2l2ZW4gbG9jYXRpb24sIHdpdGgKLSAgICAgKiBhbiBvcHRpb25hbCBuZXcge0BsaW5rIExheW91dFBhcmFtc30gaW5zdGFuY2UKLSAgICAgKgotICAgICAqIEBwYXJhbSBwcmV2aW91c1BhcmVudCB0aGUgcHJldmlvdXMgcGFyZW50LCBzdGlsbCBvd25pbmcgdGhlIGNoaWxkIGF0IHRoZSB0aW1lIG9mIHRoZSBjYWxsLgotICAgICAqIEBwYXJhbSBuZXdQYXJlbnQgdGhlIG5ldyBwYXJlbnQKLSAgICAgKiBAcGFyYW0gbW92ZWRWaWV3IHRoZSB2aWV3IHRvIG1vdmUKLSAgICAgKiBAcGFyYW0gaW5kZXggdGhlIG5ldyBsb2NhdGlvbiBpbiB0aGUgbmV3IHBhcmVudAotICAgICAqIEBwYXJhbSBwYXJhbXMgYW4gb3B0aW9uIChjYW4gYmUgbnVsbCkge0BsaW5rIExheW91dFBhcmFtc30gaW5zdGFuY2UuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIGEgUmVzdWx0IHdpdGgge0BsaW5rIFN0YXR1cyNTVUNDRVNTfSBvcgotICAgICAqICAgICB7QGxpbmsgU3RhdHVzI0VSUk9SX1ZJRVdHUk9VUF9OT19DSElMRFJFTn0gaWYgdGhlIGdpdmVuIHBhcmVudCBkb2Vzbid0IHN1cHBvcnQKLSAgICAgKiAgICAgYWRkaW5nIHZpZXdzLgotICAgICAqLwotICAgIHByaXZhdGUgUmVzdWx0IG1vdmVWaWV3KFZpZXdHcm91cCBwcmV2aW91c1BhcmVudCwgZmluYWwgVmlld0dyb3VwIG5ld1BhcmVudCwKLSAgICAgICAgICAgIGZpbmFsIFZpZXcgbW92ZWRWaWV3LCBmaW5hbCBpbnQgaW5kZXgsIGZpbmFsIExheW91dFBhcmFtcyBwYXJhbXMpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgdHJhbnNpdGlvbiBvbiB0aGUgcHJldmlvdXNQYXJlbnQuCi0gICAgICAgICAgICBMYXlvdXRUcmFuc2l0aW9uIHByZXZpb3VzVHJhbnNpdGlvbiA9IHByZXZpb3VzUGFyZW50LmdldExheW91dFRyYW5zaXRpb24oKTsKLSAgICAgICAgICAgIGlmIChwcmV2aW91c1RyYW5zaXRpb24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB0aGVyZSBpcyBhbiBhbmltYXRpb24uIFRoaXMgbWVhbnMgd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgY2hpbGQncwotICAgICAgICAgICAgICAgIC8vIHBhcmVudCByZWZlcmVuY2UgdG8gYmUgbnVsbCdlZCBvdXQgc28gdGhhdCB3ZSBjYW4gYWRkIGl0IHRvIHRoZSBuZXcgcGFyZW50LgotICAgICAgICAgICAgICAgIC8vIEl0IGlzIHRlY2huaWNhbGx5IHJlbW92ZWQgcmlnaHQgYmVmb3JlIHRoZSBESVNBUFBFQVJJTkcgYW5pbWF0aW9uIGlzIGRvbmUgKGlmCi0gICAgICAgICAgICAgICAgLy8gdGhlIGFuaW1hdGlvbiBvZiB0aGlzIHR5cGUgaXMgbm90IG51bGwsIG90aGVyd2lzZSBpdCdzIGFmdGVyIHdoaWNoIGlzIGltcG9zc2libGUKLSAgICAgICAgICAgICAgICAvLyB0byBoYW5kbGUpLgotICAgICAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhlcmUgaXMgbm8gbW92ZSBhbmltYXRpb24sIGlmIHRoZSBuZXcgcGFyZW50IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQKLSAgICAgICAgICAgICAgICAvLyBwYXJlbnQsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgQ0hBTkdFX0RJU0FQUEVBUklORyBhbmltYXRpb24gaXMgZG9uZSBiZWZvcmUKLSAgICAgICAgICAgICAgICAvLyBhZGRpbmcgdGhlIGNoaWxkIG9yIHRoZSBjaGlsZCB3aWxsIGFwcGVhciBpbiBpdHMgbmV3IGxvY2F0aW9uIGJlZm9yZSB0aGUKLSAgICAgICAgICAgICAgICAvLyBvdGhlciBjaGlsZHJlbiBoYXZlIG1hZGUgcm9vbSBmb3IgaXQuCi0KLSAgICAgICAgICAgICAgICAvLyBhZGQgYSBsaXN0ZW5lciB0byB0aGUgdHJhbnNpdGlvbiB0byBiZSBub3RpZmllZCBvZiB0aGUgYWN0dWFsIHJlbW92YWwuCi0gICAgICAgICAgICAgICAgcHJldmlvdXNUcmFuc2l0aW9uLmFkZFRyYW5zaXRpb25MaXN0ZW5lcihuZXcgVHJhbnNpdGlvbkxpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgICAgICBwcml2YXRlIGludCBtQ2hhbmdlRGlzYXBwZWFyaW5nQ291bnQgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBzdGFydFRyYW5zaXRpb24oTGF5b3V0VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCBWaWV3R3JvdXAgY29udGFpbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgdmlldywgaW50IHRyYW5zaXRpb25UeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNpdGlvblR5cGUgPT0gTGF5b3V0VHJhbnNpdGlvbi5DSEFOR0VfRElTQVBQRUFSSU5HKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNoYW5nZURpc2FwcGVhcmluZ0NvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZW5kVHJhbnNpdGlvbihMYXlvdXRUcmFuc2l0aW9uIHRyYW5zaXRpb24sIFZpZXdHcm91cCBjb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyB2aWV3LCBpbnQgdHJhbnNpdGlvblR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uVHlwZSA9PSBMYXlvdXRUcmFuc2l0aW9uLkNIQU5HRV9ESVNBUFBFQVJJTkcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2hhbmdlRGlzYXBwZWFyaW5nQ291bnQtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25UeXBlID09IExheW91dFRyYW5zaXRpb24uQ0hBTkdFX0RJU0FQUEVBUklORyAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2hhbmdlRGlzYXBwZWFyaW5nQ291bnQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgcGFyZW50VmlldyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJlbnQuYWRkVmlldyhtb3ZlZFZpZXcsIGluZGV4LCBwYXJhbXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcmVudC5hZGRWaWV3KG1vdmVkVmlldywgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSB2aWV3IGZyb20gdGhlIGN1cnJlbnQgcGFyZW50LgotICAgICAgICAgICAgICAgIHByZXZpb3VzUGFyZW50LnJlbW92ZVZpZXcobW92ZWRWaWV3KTsKLQotICAgICAgICAgICAgICAgIC8vIGFuZCByZXR1cm4gc2luY2UgYWRkaW5nIHRoZSB2aWV3IHRvIHRoZSBuZXcgcGFyZW50IGlzIGRvbmUgaW4gdGhlIGxpc3RlbmVyLgotICAgICAgICAgICAgICAgIHJldHVybiBTVUNDRVNTLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBzdGFuZGFyZCBjb2RlIHdpdGggbm8gYW5pbWF0aW9uLiBwcmV0dHkgc2ltcGxlLgotICAgICAgICAgICAgICAgIHByZXZpb3VzUGFyZW50LnJlbW92ZVZpZXcobW92ZWRWaWV3KTsKLQotICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgcGFyZW50VmlldyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbgotICAgICAgICAgICAgICAgIGlmIChwYXJhbXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBuZXdQYXJlbnQuYWRkVmlldyhtb3ZlZFZpZXcsIGluZGV4LCBwYXJhbXMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1BhcmVudC5hZGRWaWV3KG1vdmVkVmlldywgaW5kZXgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBTVUNDRVNTLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyBsb29rcyBsaWtlIHRoaXMgaXMgYSB2aWV3IGNsYXNzIHRoYXQgZG9lc24ndCBzdXBwb3J0IGNoaWxkcmVuIG1hbmlwdWxhdGlvbiEKLSAgICAgICAgICAgIHJldHVybiBFUlJPUl9WSUVXR1JPVVBfTk9fQ0hJTERSRU4uY3JlYXRlUmVzdWx0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdmVzIGEgY2hpbGQgZnJvbSBpdHMgY3VycmVudCBwYXJlbnQuCi0gICAgICogPHA+Ci0gICAgICoge0BsaW5rICNhY3F1aXJlKGxvbmcpfSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlIHRoaXMuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgb3duZWQgYnkKLSAgICAgKiAgICAgIHRoZSBzY2VuZSwgb3IgaWYge0BsaW5rICNhY3F1aXJlKGxvbmcpfSB3YXMgbm90IGNhbGxlZC4KLSAgICAgKgotICAgICAqIEBzZWUgUmVuZGVyU2Vzc2lvbiNyZW1vdmVDaGlsZChPYmplY3QsIElBbmltYXRpb25MaXN0ZW5lcikKLSAgICAgKi8KLSAgICBwdWJsaWMgUmVzdWx0IHJlbW92ZUNoaWxkKGZpbmFsIFZpZXcgY2hpbGRWaWV3LCBJQW5pbWF0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgY2hlY2tMb2NrKCk7Ci0KLSAgICAgICAgaW52YWxpZGF0ZVJlbmRlcmluZ1NpemUoKTsKLQotICAgICAgICBmaW5hbCBWaWV3R3JvdXAgcGFyZW50ID0gKFZpZXdHcm91cCkgY2hpbGRWaWV3LmdldFBhcmVudCgpOwotCi0gICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBuZXcgQW5pbWF0aW9uVGhyZWFkKHRoaXMsICJtb3ZlQ2hpbGQiLCBsaXN0ZW5lcikgewotCi0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIFJlc3VsdCBwcmVBbmltYXRpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudC5zZXRMYXlvdXRUcmFuc2l0aW9uKG5ldyBMYXlvdXRUcmFuc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVtb3ZlVmlldyhwYXJlbnQsIGNoaWxkVmlldyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcG9zdEFuaW1hdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50LnNldExheW91dFRyYW5zaXRpb24obnVsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfS5zdGFydCgpOwotCi0gICAgICAgICAgICAvLyBhbHdheXMgcmV0dXJuIHN1Y2Nlc3Mgc2luY2UgdGhlIHJlYWwgc3RhdHVzIHdpbGwgY29tZSB0aHJvdWdoIHRoZSBsaXN0ZW5lci4KLSAgICAgICAgICAgIHJldHVybiBTVUNDRVNTLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHJlbW92ZVZpZXcocGFyZW50LCBjaGlsZFZpZXcpOwotICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlbmRlcihmYWxzZSAvKmZyZXNoUmVuZGVyKi8pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgYSBnaXZlbiB2aWV3IGZyb20gaXRzIGN1cnJlbnQgcGFyZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIHZpZXcgdGhlIHZpZXcgdG8gcmVtb3ZlIGZyb20gaXRzIHBhcmVudAotICAgICAqCi0gICAgICogQHJldHVybiBhIFJlc3VsdCB3aXRoIHtAbGluayBTdGF0dXMjU1VDQ0VTU30gb3IKLSAgICAgKiAgICAge0BsaW5rIFN0YXR1cyNFUlJPUl9WSUVXR1JPVVBfTk9fQ0hJTERSRU59IGlmIHRoZSBnaXZlbiBwYXJlbnQgZG9lc24ndCBzdXBwb3J0Ci0gICAgICogICAgIGFkZGluZyB2aWV3cy4KLSAgICAgKi8KLSAgICBwcml2YXRlIFJlc3VsdCByZW1vdmVWaWV3KFZpZXdHcm91cCBwYXJlbnQsIFZpZXcgdmlldykgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcGFyZW50LnJlbW92ZVZpZXcodmlldyk7Ci0gICAgICAgICAgICByZXR1cm4gU1VDQ0VTUy5jcmVhdGVSZXN1bHQoKTsKLSAgICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gbG9va3MgbGlrZSB0aGlzIGlzIGEgdmlldyBjbGFzcyB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBjaGlsZHJlbiBtYW5pcHVsYXRpb24hCi0gICAgICAgICAgICByZXR1cm4gRVJST1JfVklFV0dST1VQX05PX0NISUxEUkVOLmNyZWF0ZVJlc3VsdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICBwcml2YXRlIHZvaWQgZmluZEJhY2tncm91bmQoUmVuZGVyUmVzb3VyY2VzIHJlc291cmNlcykgewotICAgICAgICBpZiAoZ2V0UGFyYW1zKCkuaXNCZ0NvbG9yT3ZlcnJpZGRlbigpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICBtV2luZG93QmFja2dyb3VuZCA9IHJlc291cmNlcy5maW5kSXRlbUluVGhlbWUoIndpbmRvd0JhY2tncm91bmQiLAotICAgICAgICAgICAgICAgICAgICB0cnVlIC8qaXNGcmFtZXdvcmtBdHRyKi8pOwotICAgICAgICAgICAgaWYgKG1XaW5kb3dCYWNrZ3JvdW5kICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtV2luZG93QmFja2dyb3VuZCA9IHJlc291cmNlcy5yZXNvbHZlUmVzVmFsdWUobVdpbmRvd0JhY2tncm91bmQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGhhc1NvZnR3YXJlQnV0dG9ucygpIHsKLSAgICAgICAgcmV0dXJuIGdldFBhcmFtcygpLmdldEhhcmR3YXJlQ29uZmlnKCkuaGFzU29mdHdhcmVCdXR0b25zKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGZpbmRTdGF0dXNCYXIoUmVuZGVyUmVzb3VyY2VzIHJlc291cmNlcywgRGlzcGxheU1ldHJpY3MgbWV0cmljcykgewotICAgICAgICBib29sZWFuIHdpbmRvd0Z1bGxzY3JlZW4gPSBnZXRCb29sZWFuVGhlbWVWYWx1ZShyZXNvdXJjZXMsCi0gICAgICAgICAgICAgICAgIndpbmRvd0Z1bGxzY3JlZW4iLCBmYWxzZSAvKmRlZmF1bHRWYWx1ZSovKTsKLQotICAgICAgICBpZiAod2luZG93RnVsbHNjcmVlbiA9PSBmYWxzZSAmJiBtV2luZG93SXNGbG9hdGluZyA9PSBmYWxzZSkgewotICAgICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZQotICAgICAgICAgICAgbVN0YXR1c0JhclNpemUgPSBERUZBVUxUX1NUQVRVU19CQVJfSEVJR0hUOwotCi0gICAgICAgICAgICAvLyBnZXQgdGhlIHJlYWwgdmFsdWUKLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSByZXNvdXJjZXMuZ2V0RnJhbWV3b3JrUmVzb3VyY2UoUmVzb3VyY2VUeXBlLkRJTUVOLAotICAgICAgICAgICAgICAgICAgICAic3RhdHVzX2Jhcl9oZWlnaHQiKTsKLQotICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBUeXBlZFZhbHVlIHR5cGVkVmFsdWUgPSBSZXNvdXJjZUhlbHBlci5nZXRWYWx1ZSgic3RhdHVzX2Jhcl9oZWlnaHQiLAotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZ2V0VmFsdWUoKSwgdHJ1ZSAvKnJlcXVpcmVVbml0Ki8pOwotICAgICAgICAgICAgICAgIGlmICh0eXBlZFZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgcGl4ZWwgdmFsdWUgYmFzZWQgb24gdGhlIGRpc3BsYXkgbWV0cmljcwotICAgICAgICAgICAgICAgICAgICBtU3RhdHVzQmFyU2l6ZSA9IChpbnQpdHlwZWRWYWx1ZS5nZXREaW1lbnNpb24obWV0cmljcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGZpbmRBY3Rpb25CYXIoUmVuZGVyUmVzb3VyY2VzIHJlc291cmNlcywgRGlzcGxheU1ldHJpY3MgbWV0cmljcykgewotICAgICAgICBpZiAobVdpbmRvd0lzRmxvYXRpbmcpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gd2luZG93QWN0aW9uQmFyID0gZ2V0Qm9vbGVhblRoZW1lVmFsdWUocmVzb3VyY2VzLAotICAgICAgICAgICAgICAgICJ3aW5kb3dBY3Rpb25CYXIiLCB0cnVlIC8qZGVmYXVsdFZhbHVlKi8pOwotCi0gICAgICAgIC8vIGlmIHRoZXJlJ3MgYSB2YWx1ZSBhbmQgaXQncyBmYWxzZSAoZGVmYXVsdCBpcyB0cnVlKQotICAgICAgICBpZiAod2luZG93QWN0aW9uQmFyKSB7Ci0KLSAgICAgICAgICAgIC8vIGRlZmF1bHQgc2l6ZSBvZiB0aGUgd2luZG93IHRpdGxlIGJhcgotICAgICAgICAgICAgbUFjdGlvbkJhclNpemUgPSBERUZBVUxUX1RJVExFX0JBUl9IRUlHSFQ7Ci0KLSAgICAgICAgICAgIC8vIGdldCB2YWx1ZSBmcm9tIHRoZSB0aGVtZS4KLSAgICAgICAgICAgIFJlc291cmNlVmFsdWUgdmFsdWUgPSByZXNvdXJjZXMuZmluZEl0ZW1JblRoZW1lKCJhY3Rpb25CYXJTaXplIiwKLSAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKmlzRnJhbWV3b3JrQXR0ciovKTsKLQotICAgICAgICAgICAgLy8gcmVzb2x2ZSBpdAotICAgICAgICAgICAgdmFsdWUgPSByZXNvdXJjZXMucmVzb2x2ZVJlc1ZhbHVlKHZhbHVlKTsKLQotICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG51bWVyaWNhbCB2YWx1ZSwgaWYgYXZhaWxhYmxlCi0gICAgICAgICAgICAgICAgVHlwZWRWYWx1ZSB0eXBlZFZhbHVlID0gUmVzb3VyY2VIZWxwZXIuZ2V0VmFsdWUoImFjdGlvbkJhclNpemUiLCB2YWx1ZS5nZXRWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKnJlcXVpcmVVbml0Ki8pOwotICAgICAgICAgICAgICAgIGlmICh0eXBlZFZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgcGl4ZWwgdmFsdWUgYmFzZWQgb24gdGhlIGRpc3BsYXkgbWV0cmljcwotICAgICAgICAgICAgICAgICAgICBtQWN0aW9uQmFyU2l6ZSA9IChpbnQpdHlwZWRWYWx1ZS5nZXREaW1lbnNpb24obWV0cmljcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gYWN0aW9uIGJhciBvdmVycmlkZXMgdGl0bGUgYmFyIHNvIG9ubHkgbG9vayBmb3IgdGhpcyBvbmUgaWYgYWN0aW9uIGJhciBpcyBoaWRkZW4KLSAgICAgICAgICAgIGJvb2xlYW4gd2luZG93Tm9UaXRsZSA9IGdldEJvb2xlYW5UaGVtZVZhbHVlKHJlc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAgIndpbmRvd05vVGl0bGUiLCBmYWxzZSAvKmRlZmF1bHRWYWx1ZSovKTsKLQotICAgICAgICAgICAgaWYgKHdpbmRvd05vVGl0bGUgPT0gZmFsc2UpIHsKLQotICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgc2l6ZSBvZiB0aGUgd2luZG93IHRpdGxlIGJhcgotICAgICAgICAgICAgICAgIG1UaXRsZUJhclNpemUgPSBERUZBVUxUX1RJVExFX0JBUl9IRUlHSFQ7Ci0KLSAgICAgICAgICAgICAgICAvLyBnZXQgdmFsdWUgZnJvbSB0aGUgdGhlbWUuCi0gICAgICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSB2YWx1ZSA9IHJlc291cmNlcy5maW5kSXRlbUluVGhlbWUoIndpbmRvd1RpdGxlU2l6ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qaXNGcmFtZXdvcmtBdHRyKi8pOwotCi0gICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSBpdAotICAgICAgICAgICAgICAgIHZhbHVlID0gcmVzb3VyY2VzLnJlc29sdmVSZXNWYWx1ZSh2YWx1ZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG51bWVyaWNhbCB2YWx1ZSwgaWYgYXZhaWxhYmxlCi0gICAgICAgICAgICAgICAgICAgIFR5cGVkVmFsdWUgdHlwZWRWYWx1ZSA9IFJlc291cmNlSGVscGVyLmdldFZhbHVlKCJ3aW5kb3dUaXRsZVNpemUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmdldFZhbHVlKCksIHRydWUgLypyZXF1aXJlVW5pdCovKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVkVmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgcGl4ZWwgdmFsdWUgYmFzZWQgb24gdGhlIGRpc3BsYXkgbWV0cmljcwotICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlQmFyU2l6ZSA9IChpbnQpdHlwZWRWYWx1ZS5nZXREaW1lbnNpb24obWV0cmljcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBmaW5kTmF2aWdhdGlvbkJhcihSZW5kZXJSZXNvdXJjZXMgcmVzb3VyY2VzLCBEaXNwbGF5TWV0cmljcyBtZXRyaWNzKSB7Ci0gICAgICAgIGlmIChoYXNTb2Z0d2FyZUJ1dHRvbnMoKSAmJiBtV2luZG93SXNGbG9hdGluZyA9PSBmYWxzZSkgewotCi0gICAgICAgICAgICAvLyBkZWZhdWx0IHZhbHVlCi0gICAgICAgICAgICBtTmF2aWdhdGlvbkJhclNpemUgPSA0ODsgLy8gPz8KLQotICAgICAgICAgICAgSGFyZHdhcmVDb25maWcgaGFyZHdhcmVDb25maWcgPSBnZXRQYXJhbXMoKS5nZXRIYXJkd2FyZUNvbmZpZygpOwotCi0gICAgICAgICAgICBib29sZWFuIGJhck9uQm90dG9tID0gdHJ1ZTsKLQotICAgICAgICAgICAgaWYgKGhhcmR3YXJlQ29uZmlnLmdldE9yaWVudGF0aW9uKCkgPT0gU2NyZWVuT3JpZW50YXRpb24uTEFORFNDQVBFKSB7Ci0gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgZHAgb2YgdGhlIHNjcmVlbi4KLSAgICAgICAgICAgICAgICBpbnQgc2hvcnRTaXplID0gaGFyZHdhcmVDb25maWcuZ2V0U2NyZWVuSGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGluIGRwCi0gICAgICAgICAgICAgICAgaW50IHNob3J0U2l6ZURwID0gc2hvcnRTaXplICogRGlzcGxheU1ldHJpY3MuREVOU0lUWV9ERUZBVUxUIC8gaGFyZHdhcmVDb25maWcuZ2V0RGVuc2l0eSgpLmdldERwaVZhbHVlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2hvcnRTaXplRHAgPCA2MDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gMC01OTlkcDogInBob25lIiBVSSB3aXRoIGJhciBvbiB0aGUgc2lkZQotICAgICAgICAgICAgICAgICAgICBiYXJPbkJvdHRvbSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIDYwMCtkcDogInRhYmxldCIgVUkgd2l0aCBiYXIgb24gdGhlIGJvdHRvbQotICAgICAgICAgICAgICAgICAgICBiYXJPbkJvdHRvbSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoYmFyT25Cb3R0b20pIHsKLSAgICAgICAgICAgICAgICBtTmF2aWdhdGlvbkJhck9yaWVudGF0aW9uID0gTGluZWFyTGF5b3V0LkhPUklaT05UQUw7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1OYXZpZ2F0aW9uQmFyT3JpZW50YXRpb24gPSBMaW5lYXJMYXlvdXQuVkVSVElDQUw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgcmVhbCB2YWx1ZQotICAgICAgICAgICAgUmVzb3VyY2VWYWx1ZSB2YWx1ZSA9IHJlc291cmNlcy5nZXRGcmFtZXdvcmtSZXNvdXJjZShSZXNvdXJjZVR5cGUuRElNRU4sCi0gICAgICAgICAgICAgICAgICAgIGJhck9uQm90dG9tID8gIm5hdmlnYXRpb25fYmFyX2hlaWdodCIgOiAibmF2aWdhdGlvbl9iYXJfd2lkdGgiKTsKLQotICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBUeXBlZFZhbHVlIHR5cGVkVmFsdWUgPSBSZXNvdXJjZUhlbHBlci5nZXRWYWx1ZSgibmF2aWdhdGlvbl9iYXJfaGVpZ2h0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmdldFZhbHVlKCksIHRydWUgLypyZXF1aXJlVW5pdCovKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZWRWYWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgdGhlIHBpeGVsIHZhbHVlIGJhc2VkIG9uIHRoZSBkaXNwbGF5IG1ldHJpY3MKLSAgICAgICAgICAgICAgICAgICAgbU5hdmlnYXRpb25CYXJTaXplID0gKGludCl0eXBlZFZhbHVlLmdldERpbWVuc2lvbihtZXRyaWNzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBMb29rcyBmb3IgYSBhdHRyaWJ1dGUgaW4gdGhlIGN1cnJlbnQgdGhlbWUuIFRoZSBhdHRyaWJ1dGUgaXMgaW4gdGhlIGFuZHJvaWQKLSAgICAgKiBuYW1lc3BhY2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVzb3VyY2VzIHRoZSByZW5kZXIgcmVzb3VyY2VzCi0gICAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQotICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgdGhlIGRlZmF1bHQgdmFsdWUuCi0gICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBvciB0aGUgZGVmYXVsdCBvbmUgaWYgbm90IGZvdW5kLgotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBnZXRCb29sZWFuVGhlbWVWYWx1ZShSZW5kZXJSZXNvdXJjZXMgcmVzb3VyY2VzLAotICAgICAgICAgICAgU3RyaW5nIG5hbWUsIGJvb2xlYW4gZGVmYXVsdFZhbHVlKSB7Ci0KLSAgICAgICAgLy8gZ2V0IHRoZSB0aXRsZSBiYXIgZmxhZyBmcm9tIHRoZSBjdXJyZW50IHRoZW1lLgotICAgICAgICBSZXNvdXJjZVZhbHVlIHZhbHVlID0gcmVzb3VyY2VzLmZpbmRJdGVtSW5UaGVtZShuYW1lLCB0cnVlIC8qaXNGcmFtZXdvcmtBdHRyKi8pOwotCi0gICAgICAgIC8vIGJlY2F1c2UgaXQgbWF5IHJlZmVyZW5jZSBzb21ldGhpbmcgZWxzZSwgd2UgcmVzb2x2ZSBpdC4KLSAgICAgICAgdmFsdWUgPSByZXNvdXJjZXMucmVzb2x2ZVJlc1ZhbHVlKHZhbHVlKTsKLQotICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIHZhbHVlLCByZXR1cm4gdGhlIGRlZmF1bHQuCi0gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmdldFZhbHVlKCkgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBYbWxVdGlscy5jb252ZXJ0VmFsdWVUb0Jvb2xlYW4odmFsdWUuZ2V0VmFsdWUoKSwgZGVmYXVsdFZhbHVlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQb3N0IHByb2Nlc3Mgb24gYSB2aWV3IGhpZXJhY2h5IHRoYXQgd2FzIGp1c3QgaW5mbGF0ZWQuCi0gICAgICogPHAvPkF0IHRoZSBtb21lbnQgdGhpcyBvbmx5IHN1cHBvcnQgVGFiSG9zdDogSWYge0BsaW5rIFRhYkhvc3R9IGlzIGRldGVjdGVkLCBsb29rIGZvciB0aGUKLSAgICAgKiB7QGxpbmsgVGFiV2lkZ2V0fSwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHtAbGluayBGcmFtZUxheW91dH0gYW5kIG1ha2UgbmV3IHRhYnMgYXV0b21hdGljYWxseQotICAgICAqIGJhc2VkIG9uIHRoZSBjb250ZW50IG9mIHRoZSB7QGxpbmsgRnJhbWVMYXlvdXR9LgotICAgICAqIEBwYXJhbSB2aWV3IHRoZSByb290IHZpZXcgdG8gcHJvY2Vzcy4KLSAgICAgKiBAcGFyYW0gcHJvamVjdENhbGxiYWNrIGNhbGxiYWNrIHRvIHRoZSBwcm9qZWN0LgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBwb3N0SW5mbGF0ZVByb2Nlc3MoVmlldyB2aWV3LCBJUHJvamVjdENhbGxiYWNrIHByb2plY3RDYWxsYmFjaykKLSAgICAgICAgICAgIHRocm93cyBQb3N0SW5mbGF0ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgVGFiSG9zdCkgewotICAgICAgICAgICAgc2V0dXBUYWJIb3N0KChUYWJIb3N0KXZpZXcsIHByb2plY3RDYWxsYmFjayk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmlldyBpbnN0YW5jZW9mIFF1aWNrQ29udGFjdEJhZGdlKSB7Ci0gICAgICAgICAgICBRdWlja0NvbnRhY3RCYWRnZSBiYWRnZSA9IChRdWlja0NvbnRhY3RCYWRnZSkgdmlldzsKLSAgICAgICAgICAgIGJhZGdlLnNldEltYWdlVG9EZWZhdWx0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmlldyBpbnN0YW5jZW9mIEFkYXB0ZXJWaWV3PD8+KSB7Ci0gICAgICAgICAgICAvLyBnZXQgdGhlIHZpZXcgSUQuCi0gICAgICAgICAgICBpbnQgaWQgPSB2aWV3LmdldElkKCk7Ci0KLSAgICAgICAgICAgIEJyaWRnZUNvbnRleHQgY29udGV4dCA9IGdldENvbnRleHQoKTsKLQotICAgICAgICAgICAgLy8gZ2V0IGEgUmVzb3VyY2VSZWZlcmVuY2UgZnJvbSB0aGUgaW50ZWdlciBJRC4KLSAgICAgICAgICAgIFJlc291cmNlUmVmZXJlbmNlIGxpc3RSZWYgPSBjb250ZXh0LnJlc29sdmVJZChpZCk7Ci0KLSAgICAgICAgICAgIGlmIChsaXN0UmVmICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTZXNzaW9uUGFyYW1zIHBhcmFtcyA9IGdldFBhcmFtcygpOwotICAgICAgICAgICAgICAgIEFkYXB0ZXJCaW5kaW5nIGJpbmRpbmcgPSBwYXJhbXMuZ2V0QWRhcHRlckJpbmRpbmdzKCkuZ2V0KGxpc3RSZWYpOwotCi0gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIG5vIGFkYXB0ZXIgYmluZGluZywgdHJ5aW5nIHRvIGdldCBpdCBmcm9tIHRoZSBjYWxsIGJhY2suCi0gICAgICAgICAgICAgICAgaWYgKGJpbmRpbmcgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBiaW5kaW5nID0gcGFyYW1zLmdldFByb2plY3RDYWxsYmFjaygpLmdldEFkYXB0ZXJCaW5kaW5nKGxpc3RSZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5nZXRWaWV3S2V5KHZpZXcpLCB2aWV3KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYmluZGluZyAhPSBudWxsKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcgaW5zdGFuY2VvZiBBYnNMaXN0VmlldykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiaW5kaW5nLmdldEZvb3RlckNvdW50KCkgPiAwIHx8IGJpbmRpbmcuZ2V0SGVhZGVyQ291bnQoKSA+IDApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgaW5zdGFuY2VvZiBMaXN0VmlldykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RWaWV3IGxpc3QgPSAoTGlzdFZpZXcpIHZpZXc7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHNraXBDYWxsYmFja1BhcnNlciA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gYmluZGluZy5nZXRIZWFkZXJDb3VudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGNvdW50IDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhaXI8VmlldywgQm9vbGVhbj4gcGFpciA9IGNvbnRleHQuaW5mbGF0ZVZpZXcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5nZXRIZWFkZXJBdChpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LCBmYWxzZSAvKmF0dGFjaFRvUm9vdCovLCBza2lwQ2FsbGJhY2tQYXJzZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpci5nZXRGaXJzdCgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkSGVhZGVyVmlldyhwYWlyLmdldEZpcnN0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcENhbGxiYWNrUGFyc2VyIHw9IHBhaXIuZ2V0U2Vjb25kKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBiaW5kaW5nLmdldEZvb3RlckNvdW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgY291bnQgOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFpcjxWaWV3LCBCb29sZWFuPiBwYWlyID0gY29udGV4dC5pbmZsYXRlVmlldygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmdldEZvb3RlckF0KGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QsIGZhbHNlIC8qYXR0YWNoVG9Sb290Ki8sIHNraXBDYWxsYmFja1BhcnNlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyLmdldEZpcnN0KCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5hZGRGb290ZXJWaWV3KHBhaXIuZ2V0Rmlyc3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ2FsbGJhY2tQYXJzZXIgfD0gcGFpci5nZXRTZWNvbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgRXhwYW5kYWJsZUxpc3RWaWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFeHBhbmRhYmxlTGlzdFZpZXcpIHZpZXcpLnNldEFkYXB0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmFrZUV4cGFuZGFibGVBZGFwdGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0UmVmLCBiaW5kaW5nLCBwYXJhbXMuZ2V0UHJvamVjdENhbGxiYWNrKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBYnNMaXN0Vmlldykgdmlldykuc2V0QWRhcHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGYWtlQWRhcHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFJlZiwgYmluZGluZywgcGFyYW1zLmdldFByb2plY3RDYWxsYmFjaygpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmlldyBpbnN0YW5jZW9mIEFic1NwaW5uZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICgoQWJzU3Bpbm5lcikgdmlldykuc2V0QWRhcHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZha2VBZGFwdGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RSZWYsIGJpbmRpbmcsIHBhcmFtcy5nZXRQcm9qZWN0Q2FsbGJhY2soKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHZpZXcgaW5zdGFuY2VvZiBWaWV3R3JvdXApIHsKLSAgICAgICAgICAgIFZpZXdHcm91cCBncm91cCA9IChWaWV3R3JvdXApdmlldzsKLSAgICAgICAgICAgIGZpbmFsIGludCBjb3VudCA9IGdyb3VwLmdldENoaWxkQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGMgPSAwIDsgYyA8IGNvdW50IDsgYysrKSB7Ci0gICAgICAgICAgICAgICAgVmlldyBjaGlsZCA9IGdyb3VwLmdldENoaWxkQXQoYyk7Ci0gICAgICAgICAgICAgICAgcG9zdEluZmxhdGVQcm9jZXNzKGNoaWxkLCBwcm9qZWN0Q2FsbGJhY2spOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB1cCBhIHtAbGluayBUYWJIb3N0fSBvYmplY3QuCi0gICAgICogQHBhcmFtIHRhYkhvc3QgdGhlIFRhYkhvc3QgdG8gc2V0dXAuCi0gICAgICogQHBhcmFtIHByb2plY3RDYWxsYmFjayBUaGUgcHJvamVjdCBjYWxsYmFjayBvYmplY3QgdG8gYWNjZXNzIHRoZSBwcm9qZWN0IFIgY2xhc3MuCi0gICAgICogQHRocm93cyBQb3N0SW5mbGF0ZUV4Y2VwdGlvbgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZXR1cFRhYkhvc3QoVGFiSG9zdCB0YWJIb3N0LCBJUHJvamVjdENhbGxiYWNrIHByb2plY3RDYWxsYmFjaykKLSAgICAgICAgICAgIHRocm93cyBQb3N0SW5mbGF0ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIGxvb2sgZm9yIHRoZSBUYWJXaWRnZXQsIGFuZCB0aGUgRnJhbWVMYXlvdXQuIFRoZXkgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMgbmFtZXMKLSAgICAgICAgVmlldyB2ID0gdGFiSG9zdC5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLnRhYnMpOwotCi0gICAgICAgIGlmICh2ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBQb3N0SW5mbGF0ZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgIlRhYkhvc3QgcmVxdWlyZXMgYSBUYWJXaWRnZXQgd2l0aCBpZCBcImFuZHJvaWQ6aWQvdGFic1wiLlxuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHYgaW5zdGFuY2VvZiBUYWJXaWRnZXQpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUG9zdEluZmxhdGVFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIlRhYkhvc3QgcmVxdWlyZXMgYSBUYWJXaWRnZXQgd2l0aCBpZCBcImFuZHJvaWQ6aWQvdGFic1wiLlxuIiArCi0gICAgICAgICAgICAgICAgICAgICJWaWV3IGZvdW5kIHdpdGggaWQgJ3RhYnMnIGlzICclcyciLCB2LmdldENsYXNzKCkuZ2V0Q2Fub25pY2FsTmFtZSgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2ID0gdGFiSG9zdC5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLnRhYmNvbnRlbnQpOwotCi0gICAgICAgIGlmICh2ID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vIFRPRE86IHNlZSBpZiB3ZSBjYW4gZmFrZSB0YWJzIGV2ZW4gd2l0aG91dCB0aGUgRnJhbWVMYXlvdXQgKHNhbWUgYmVsb3cgd2hlbiB0aGUgZnJhbWVsYXlvdXQgaXMgZW1wdHkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgUG9zdEluZmxhdGVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICJUYWJIb3N0IHJlcXVpcmVzIGEgRnJhbWVMYXlvdXQgd2l0aCBpZCBcImFuZHJvaWQ6aWQvdGFiY29udGVudFwiLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCh2IGluc3RhbmNlb2YgRnJhbWVMYXlvdXQpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUG9zdEluZmxhdGVFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIlRhYkhvc3QgcmVxdWlyZXMgYSBGcmFtZUxheW91dCB3aXRoIGlkIFwiYW5kcm9pZDppZC90YWJjb250ZW50XCIuXG4iICsKLSAgICAgICAgICAgICAgICAgICAgIlZpZXcgZm91bmQgd2l0aCBpZCAndGFiY29udGVudCcgaXMgJyVzJyIsIHYuZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEZyYW1lTGF5b3V0IGNvbnRlbnQgPSAoRnJhbWVMYXlvdXQpdjsKLQotICAgICAgICAvLyBub3cgcHJvY2VzcyB0aGUgY29udGVudCBvZiB0aGUgZnJhbWVsYXlvdXQgYW5kIGR5bmFtaWNhbGx5IGNyZWF0ZSB0YWJzIGZvciBpdC4KLSAgICAgICAgZmluYWwgaW50IGNvdW50ID0gY29udGVudC5nZXRDaGlsZENvdW50KCk7Ci0KLSAgICAgICAgLy8gdGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYWRkVGFiKCkgc28gdGhhdCB0aGUgVGFiSG9zdCBzZWFyY2hlcyBpdHMgVGFiV2lkZ2V0Ci0gICAgICAgIC8vIGFuZCBGcmFtZUxheW91dC4KLSAgICAgICAgdGFiSG9zdC5zZXR1cCgpOwotCi0gICAgICAgIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICAvLyBDcmVhdGUgYSBkdW1teSBjaGlsZCB0byBnZXQgYSBzaW5nbGUgdGFiCi0gICAgICAgICAgICBUYWJTcGVjIHNwZWMgPSB0YWJIb3N0Lm5ld1RhYlNwZWMoInRhZyIpLnNldEluZGljYXRvcigiVGFiIExhYmVsIiwKLSAgICAgICAgICAgICAgICAgICAgdGFiSG9zdC5nZXRSZXNvdXJjZXMoKS5nZXREcmF3YWJsZShhbmRyb2lkLlIuZHJhd2FibGUuaWNfbWVudV9pbmZvX2RldGFpbHMpKQotICAgICAgICAgICAgICAgICAgICAuc2V0Q29udGVudChuZXcgVGFiSG9zdC5UYWJDb250ZW50RmFjdG9yeSgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFZpZXcgY3JlYXRlVGFiQ29udGVudChTdHJpbmcgdGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaW5lYXJMYXlvdXQoZ2V0Q29udGV4dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB0YWJIb3N0LmFkZFRhYihzcGVjKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGZvciBlYWNoIGNoaWxkIG9mIHRoZSBmcmFtZWxheW91dCwgYWRkIGEgbmV3IFRhYlNwZWMKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGNvdW50IDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgVmlldyBjaGlsZCA9IGNvbnRlbnQuZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdGFiU3BlYyA9IFN0cmluZy5mb3JtYXQoInRhYl9zcGVjJWQiLCBpKzEpOwotICAgICAgICAgICAgICAgIGludCBpZCA9IGNoaWxkLmdldElkKCk7Ci0gICAgICAgICAgICAgICAgUGFpcjxSZXNvdXJjZVR5cGUsIFN0cmluZz4gcmVzb3VyY2UgPSBwcm9qZWN0Q2FsbGJhY2sucmVzb2x2ZVJlc291cmNlSWQoaWQpOwotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUgPSByZXNvdXJjZS5nZXRTZWNvbmQoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBuYW1lID0gU3RyaW5nLmZvcm1hdCgiVGFiICVkIiwgaSsxKTsgLy8gZGVmYXVsdCBuYW1lIGlmIGlkIGlzIHVucmVzb2x2ZWQuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRhYkhvc3QuYWRkVGFiKHRhYkhvc3QubmV3VGFiU3BlYyh0YWJTcGVjKS5zZXRJbmRpY2F0b3IobmFtZSkuc2V0Q29udGVudChpZCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBMaXN0PFZpZXdJbmZvPiBzdGFydFZpc2l0aW5nVmlld3MoVmlldyB2aWV3LCBpbnQgb2Zmc2V0LCBib29sZWFuIHNldEV4dGVuZGVkSW5mbykgewotICAgICAgICBpZiAodmlldyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGFkanVzdCB0aGUgb2Zmc2V0IHRvIHRoaXMgdmlldy4KLSAgICAgICAgb2Zmc2V0ICs9IHZpZXcuZ2V0VG9wKCk7Ci0KLSAgICAgICAgaWYgKHZpZXcgPT0gbUNvbnRlbnRSb290KSB7Ci0gICAgICAgICAgICByZXR1cm4gdmlzaXRBbGxDaGlsZHJlbihtQ29udGVudFJvb3QsIG9mZnNldCwgc2V0RXh0ZW5kZWRJbmZvKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG90aGVyd2lzZSwgbG9vayBmb3IgbUNvbnRlbnRSb290IGluIHRoZSBjaGlsZHJlbgotICAgICAgICBpZiAodmlldyBpbnN0YW5jZW9mIFZpZXdHcm91cCkgewotICAgICAgICAgICAgVmlld0dyb3VwIGdyb3VwID0gKChWaWV3R3JvdXApIHZpZXcpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwLmdldENoaWxkQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgTGlzdDxWaWV3SW5mbz4gbGlzdCA9IHN0YXJ0VmlzaXRpbmdWaWV3cyhncm91cC5nZXRDaGlsZEF0KGkpLCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRFeHRlbmRlZEluZm8pOwotICAgICAgICAgICAgICAgIGlmIChsaXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVmlzaXRzIGEgVmlldyBhbmQgaXRzIGNoaWxkcmVuIGFuZCBnZW5lcmF0ZSBhIHtAbGluayBWaWV3SW5mb30gY29udGFpbmluZyB0aGUKLSAgICAgKiBib3VuZHMgb2YgYWxsIHRoZSB2aWV3cy4KLSAgICAgKiBAcGFyYW0gdmlldyB0aGUgcm9vdCBWaWV3Ci0gICAgICogQHBhcmFtIG9mZnNldCBhbiBvZmZzZXQgZm9yIHRoZSB2aWV3IGJvdW5kcy4KLSAgICAgKiBAcGFyYW0gc2V0RXh0ZW5kZWRJbmZvIHdoZXRoZXIgdG8gc2V0IHRoZSBleHRlbmRlZCB2aWV3IGluZm8gaW4gdGhlIHtAbGluayBWaWV3SW5mb30gb2JqZWN0LgotICAgICAqLwotICAgIHByaXZhdGUgVmlld0luZm8gdmlzaXQoVmlldyB2aWV3LCBpbnQgb2Zmc2V0LCBib29sZWFuIHNldEV4dGVuZGVkSW5mbykgewotICAgICAgICBpZiAodmlldyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIFZpZXdJbmZvIHJlc3VsdCA9IG5ldyBWaWV3SW5mbyh2aWV3LmdldENsYXNzKCkuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgIGdldENvbnRleHQoKS5nZXRWaWV3S2V5KHZpZXcpLAotICAgICAgICAgICAgICAgIHZpZXcuZ2V0TGVmdCgpLCB2aWV3LmdldFRvcCgpICsgb2Zmc2V0LCB2aWV3LmdldFJpZ2h0KCksIHZpZXcuZ2V0Qm90dG9tKCkgKyBvZmZzZXQsCi0gICAgICAgICAgICAgICAgdmlldywgdmlldy5nZXRMYXlvdXRQYXJhbXMoKSk7Ci0KLSAgICAgICAgaWYgKHNldEV4dGVuZGVkSW5mbykgewotICAgICAgICAgICAgTWFyZ2luTGF5b3V0UGFyYW1zIG1hcmdpblBhcmFtcyA9IG51bGw7Ci0gICAgICAgICAgICBMYXlvdXRQYXJhbXMgcGFyYW1zID0gdmlldy5nZXRMYXlvdXRQYXJhbXMoKTsKLSAgICAgICAgICAgIGlmIChwYXJhbXMgaW5zdGFuY2VvZiBNYXJnaW5MYXlvdXRQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBtYXJnaW5QYXJhbXMgPSAoTWFyZ2luTGF5b3V0UGFyYW1zKSBwYXJhbXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQuc2V0RXh0ZW5kZWRJbmZvKHZpZXcuZ2V0QmFzZWxpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luUGFyYW1zICE9IG51bGwgPyBtYXJnaW5QYXJhbXMubGVmdE1hcmdpbiA6IDAsCi0gICAgICAgICAgICAgICAgICAgIG1hcmdpblBhcmFtcyAhPSBudWxsID8gbWFyZ2luUGFyYW1zLnRvcE1hcmdpbiA6IDAsCi0gICAgICAgICAgICAgICAgICAgIG1hcmdpblBhcmFtcyAhPSBudWxsID8gbWFyZ2luUGFyYW1zLnJpZ2h0TWFyZ2luIDogMCwKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luUGFyYW1zICE9IG51bGwgPyBtYXJnaW5QYXJhbXMuYm90dG9tTWFyZ2luIDogMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmlldyBpbnN0YW5jZW9mIFZpZXdHcm91cCkgewotICAgICAgICAgICAgVmlld0dyb3VwIGdyb3VwID0gKChWaWV3R3JvdXApIHZpZXcpOwotICAgICAgICAgICAgcmVzdWx0LnNldENoaWxkcmVuKHZpc2l0QWxsQ2hpbGRyZW4oZ3JvdXAsIDAgLypvZmZzZXQqLywgc2V0RXh0ZW5kZWRJbmZvKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFZpc2l0cyBhbGwgdGhlIGNoaWxkcmVuIG9mIGEgZ2l2ZW4gVmlld0dyb3VwIGdlbmVyYXRlIGEgbGlzdCBvZiB7QGxpbmsgVmlld0luZm99Ci0gICAgICogY29udGFpbmluZyB0aGUgYm91bmRzIG9mIGFsbCB0aGUgdmlld3MuCi0gICAgICogQHBhcmFtIHZpZXcgdGhlIHJvb3QgVmlldwotICAgICAqIEBwYXJhbSBvZmZzZXQgYW4gb2Zmc2V0IGZvciB0aGUgdmlldyBib3VuZHMuCi0gICAgICogQHBhcmFtIHNldEV4dGVuZGVkSW5mbyB3aGV0aGVyIHRvIHNldCB0aGUgZXh0ZW5kZWQgdmlldyBpbmZvIGluIHRoZSB7QGxpbmsgVmlld0luZm99IG9iamVjdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIExpc3Q8Vmlld0luZm8+IHZpc2l0QWxsQ2hpbGRyZW4oVmlld0dyb3VwIHZpZXdHcm91cCwgaW50IG9mZnNldCwKLSAgICAgICAgICAgIGJvb2xlYW4gc2V0RXh0ZW5kZWRJbmZvKSB7Ci0gICAgICAgIGlmICh2aWV3R3JvdXAgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBMaXN0PFZpZXdJbmZvPiBjaGlsZHJlbiA9IG5ldyBBcnJheUxpc3Q8Vmlld0luZm8+KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmlld0dyb3VwLmdldENoaWxkQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBjaGlsZHJlbi5hZGQodmlzaXQodmlld0dyb3VwLmdldENoaWxkQXQoaSksIG9mZnNldCwgc2V0RXh0ZW5kZWRJbmZvKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuOwotICAgIH0KLQotCi0gICAgcHJpdmF0ZSB2b2lkIGludmFsaWRhdGVSZW5kZXJpbmdTaXplKCkgewotICAgICAgICBtTWVhc3VyZWRTY3JlZW5XaWR0aCA9IG1NZWFzdXJlZFNjcmVlbkhlaWdodCA9IC0xOwotICAgIH0KLQotICAgIHB1YmxpYyBCdWZmZXJlZEltYWdlIGdldEltYWdlKCkgewotICAgICAgICByZXR1cm4gbUltYWdlOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzQWxwaGFDaGFubmVsSW1hZ2UoKSB7Ci0gICAgICAgIHJldHVybiBtSXNBbHBoYUNoYW5uZWxJbWFnZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdDxWaWV3SW5mbz4gZ2V0Vmlld0luZm9zKCkgewotICAgICAgICByZXR1cm4gbVZpZXdJbmZvTGlzdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiBnZXREZWZhdWx0UHJvcGVydGllcyhPYmplY3Qgdmlld09iamVjdCkgewotICAgICAgICByZXR1cm4gZ2V0Q29udGV4dCgpLmdldERlZmF1bHRQcm9wTWFwKHZpZXdPYmplY3QpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNjZW5lKFJlbmRlclNlc3Npb24gc2Vzc2lvbikgewotICAgICAgICBtU2NlbmUgPSBzZXNzaW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBSZW5kZXJTZXNzaW9uIGdldFNlc3Npb24oKSB7Ci0gICAgICAgIHJldHVybiBtU2NlbmU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1Jlc291cmNlSGVscGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUmVzb3VyY2VIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRjYjY5My4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUmVzb3VyY2VIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmltcGw7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuRGVuc2l0eUJhc2VkUmVzb3VyY2VWYWx1ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5SZW5kZXJSZXNvdXJjZXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlVmFsdWU7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUNvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZVhtbEJsb2NrUGFyc2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLm5pbmVwYXRjaC5OaW5lUGF0Y2g7Ci1pbXBvcnQgY29tLmFuZHJvaWQubmluZXBhdGNoLk5pbmVQYXRjaENodW5rOwotaW1wb3J0IGNvbS5hbmRyb2lkLnJlc291cmNlcy5EZW5zaXR5OwotCi1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk5pbmVQYXRjaF9EZWxlZ2F0ZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5CaXRtYXBEcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkNvbG9yRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLk5pbmVQYXRjaERyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLS8qKgotICogSGVscGVyIGNsYXNzIHRvIHByb3ZpZGUgdmFyaW91cyBjb252ZXJzaW9uIG1ldGhvZCB1c2VkIGluIGhhbmRsaW5nIGFuZHJvaWQgcmVzb3VyY2VzLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUmVzb3VyY2VIZWxwZXIgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgUGF0dGVybiBzRmxvYXRQYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKCIoLT9bMC05XSsoPzpcXC5bMC05XSspPykoLiopIik7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgZmxvYXRbXSBzRmxvYXRPdXQgPSBuZXcgZmxvYXRbMV07Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBUeXBlZFZhbHVlIG1WYWx1ZSA9IG5ldyBUeXBlZFZhbHVlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjb2xvciB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gc3RyaW5nIHZhbHVlCi0gICAgICogQHBhcmFtIHZhbHVlIHRoZSBjb2xvciB2YWx1ZQotICAgICAqIEByZXR1cm4gdGhlIGNvbG9yIGFzIGFuIGludAotICAgICAqIEB0aHJvdyBOdW1iZXJGb3JtYXRFeGNlcHRpb24gaWYgdGhlIGNvbnZlcnNpb24gZmFpbGVkLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldENvbG9yKFN0cmluZyB2YWx1ZSkgewotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoIiMiKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJDb2xvciB2YWx1ZSAnJXMnIG11c3Qgc3RhcnQgd2l0aCAjIiwgdmFsdWUpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMSk7Ci0KLSAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBpdCdzIG5vdCBsb25nZXIgdGhhbiAzMmJpdAotICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpID4gOCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICJDb2xvciB2YWx1ZSAnJXMnIGlzIHRvbyBsb25nLiBGb3JtYXQgaXMgZWl0aGVyIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiI0FBUlJHR0JCLCAjUlJHR0JCLCAjUkdCLCBvciAjQVJHQiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgPT0gMykgeyAvLyBSR0IgZm9ybWF0Ci0gICAgICAgICAgICAgICAgY2hhcltdIGNvbG9yID0gbmV3IGNoYXJbOF07Ci0gICAgICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXSA9ICdGJzsKLSAgICAgICAgICAgICAgICBjb2xvclsyXSA9IGNvbG9yWzNdID0gdmFsdWUuY2hhckF0KDApOwotICAgICAgICAgICAgICAgIGNvbG9yWzRdID0gY29sb3JbNV0gPSB2YWx1ZS5jaGFyQXQoMSk7Ci0gICAgICAgICAgICAgICAgY29sb3JbNl0gPSBjb2xvcls3XSA9IHZhbHVlLmNoYXJBdCgyKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBTdHJpbmcoY29sb3IpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGgoKSA9PSA0KSB7IC8vIEFSR0IgZm9ybWF0Ci0gICAgICAgICAgICAgICAgY2hhcltdIGNvbG9yID0gbmV3IGNoYXJbOF07Ci0gICAgICAgICAgICAgICAgY29sb3JbMF0gPSBjb2xvclsxXSA9IHZhbHVlLmNoYXJBdCgwKTsKLSAgICAgICAgICAgICAgICBjb2xvclsyXSA9IGNvbG9yWzNdID0gdmFsdWUuY2hhckF0KDEpOwotICAgICAgICAgICAgICAgIGNvbG9yWzRdID0gY29sb3JbNV0gPSB2YWx1ZS5jaGFyQXQoMik7Ci0gICAgICAgICAgICAgICAgY29sb3JbNl0gPSBjb2xvcls3XSA9IHZhbHVlLmNoYXJBdCgzKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBTdHJpbmcoY29sb3IpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGgoKSA9PSA2KSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSAiRkYiICsgdmFsdWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBSUkdHQkIgb3IgQUFSUkdHQkIgdmFsdWUKLQotICAgICAgICAgICAgLy8gSW50ZWdlci5wYXJzZUludCB3aWxsIGZhaWwgdG8gcGFyc2Ugc3RyaW5ncyBsaWtlICJmZjE5MTkxOSIsIHNvIHdlIHVzZQotICAgICAgICAgICAgLy8gYSBMb25nLCBidXQgY2FzdCB0aGUgcmVzdWx0IGJhY2sgaW50byBhbiBpbnQsIHNpbmNlIHdlIGtub3cgdGhhdCB3ZSdyZSBvbmx5Ci0gICAgICAgICAgICAvLyBkZWFsaW5nIHdpdGggMzIgYml0IHZhbHVlcy4KLSAgICAgICAgICAgIHJldHVybiAoaW50KUxvbmcucGFyc2VMb25nKHZhbHVlLCAxNik7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBDb2xvclN0YXRlTGlzdCBnZXRDb2xvclN0YXRlTGlzdChSZXNvdXJjZVZhbHVlIHJlc1ZhbHVlLCBCcmlkZ2VDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gcmVzVmFsdWUuZ2V0VmFsdWUoKTsKLSAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgUmVuZGVyUmVzb3VyY2VzLlJFRkVSRU5DRV9OVUxMLmVxdWFscyh2YWx1ZSkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIC8vIGZpcnN0IGNoZWNrIGlmIHRoZSB2YWx1ZSBpcyBhIGZpbGUgKHhtbCBtb3N0IGxpa2VseSkKLSAgICAgICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChmLmlzRmlsZSgpKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHRoZSBmcmFtZXdvcmsgaW5mbGF0ZSB0aGUgQ29sb3JTdGF0ZUxpc3QgZnJvbSB0aGUgWE1MIGZpbGUsIGJ5Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByb3ZpZGluZyBhbiBYbWxQdWxsUGFyc2VyCi0gICAgICAgICAgICAgICAgICAgIFhtbFB1bGxQYXJzZXIgcGFyc2VyID0gUGFyc2VyRmFjdG9yeS5jcmVhdGUoZik7Ci0KLSAgICAgICAgICAgICAgICAgICAgQnJpZGdlWG1sQmxvY2tQYXJzZXIgYmxvY2tQYXJzZXIgPSBuZXcgQnJpZGdlWG1sQmxvY2tQYXJzZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLCBjb250ZXh0LCByZXNWYWx1ZS5pc0ZyYW1ld29yaygpKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2xvclN0YXRlTGlzdC5jcmVhdGVGcm9tWG1sKGNvbnRleHQuZ2V0UmVzb3VyY2VzKCksIGJsb2NrUGFyc2VyKTsKLSAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrUGFyc2VyLmVuc3VyZVBvcHBlZCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBwYXJzZXIgZm9yICIgKyB2YWx1ZSwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdlJ2xsIHJldHVybiBudWxsIGJlbG93LgotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gZXJyb3IgYW5kIG5vdCB3YXJuaW5nIHNpbmNlIHRoZSBmaWxlIGV4aXN0ZW5jZSBpcwotICAgICAgICAgICAgICAgICAgICAvLyBjaGVja2VkIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHBhcnNlIGl0LgotICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfUkVBRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIGZpbGUgIiArIHZhbHVlLCBlLCBudWxsIC8qZGF0YSovKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHRyeSB0byBsb2FkIHRoZSBjb2xvciBzdGF0ZSBsaXN0IGZyb20gYW4gaW50Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNvbG9yID0gUmVzb3VyY2VIZWxwZXIuZ2V0Q29sb3IodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3JTdGF0ZUxpc3QudmFsdWVPZihjb2xvcik7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX0ZPUk1BVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNvbnZlcnQgIiArIHZhbHVlICsgIiBpbnRvIGEgQ29sb3JTdGF0ZUxpc3QiLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLypkYXRhKi8pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgZHJhd2FibGUgZnJvbSB0aGUgZ2l2ZW4gdmFsdWUuCi0gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0aGF0IGNvbnRhaW5zIGEgcGF0aCB0byBhIDkgcGF0Y2gsIGEgYml0bWFwIG9yIGEgeG1sIGJhc2VkIGRyYXdhYmxlLAotICAgICAqIG9yIGFuIGhleGFkZWNpbWFsIGNvbG9yCi0gICAgICogQHBhcmFtIGNvbnRleHQgdGhlIGN1cnJlbnQgY29udGV4dAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgRHJhd2FibGUgZ2V0RHJhd2FibGUoUmVzb3VyY2VWYWx1ZSB2YWx1ZSwgQnJpZGdlQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLmdldFZhbHVlKCk7Ci0gICAgICAgIGlmIChSZW5kZXJSZXNvdXJjZXMuUkVGRVJFTkNFX05VTEwuZXF1YWxzKHN0cmluZ1ZhbHVlKSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgbG93ZXJDYXNlVmFsdWUgPSBzdHJpbmdWYWx1ZS50b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgIERlbnNpdHkgZGVuc2l0eSA9IERlbnNpdHkuTUVESVVNOwotICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEZW5zaXR5QmFzZWRSZXNvdXJjZVZhbHVlKSB7Ci0gICAgICAgICAgICBkZW5zaXR5ID0KLSAgICAgICAgICAgICAgICAoKERlbnNpdHlCYXNlZFJlc291cmNlVmFsdWUpdmFsdWUpLmdldFJlc291cmNlRGVuc2l0eSgpOwotICAgICAgICB9Ci0KLQotICAgICAgICBpZiAobG93ZXJDYXNlVmFsdWUuZW5kc1dpdGgoTmluZVBhdGNoLkVYVEVOU0lPTl85UEFUQ0gpKSB7Ci0gICAgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShzdHJpbmdWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoZmlsZS5pc0ZpbGUoKSkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXROaW5lUGF0Y2hEcmF3YWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpLCBkZW5zaXR5LCB2YWx1ZS5pc0ZyYW1ld29yaygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1ZhbHVlLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZhaWxlZCB0byByZWFkIHRoZSBmaWxlLCB3ZSdsbCByZXR1cm4gbnVsbCBiZWxvdy4KLSAgICAgICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX1JFQUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCBsb3QgbG9hZCAiICsgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSBlbHNlIGlmIChsb3dlckNhc2VWYWx1ZS5lbmRzV2l0aCgiLnhtbCIpKSB7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgYSBibG9jayBwYXJzZXIgZm9yIHRoZSBmaWxlCi0gICAgICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZShzdHJpbmdWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoZi5pc0ZpbGUoKSkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGxldCB0aGUgZnJhbWV3b3JrIGluZmxhdGUgdGhlIERyYXdhYmxlIGZyb20gdGhlIFhNTCBmaWxlLgotICAgICAgICAgICAgICAgICAgICBYbWxQdWxsUGFyc2VyIHBhcnNlciA9IFBhcnNlckZhY3RvcnkuY3JlYXRlKGYpOwotCi0gICAgICAgICAgICAgICAgICAgIEJyaWRnZVhtbEJsb2NrUGFyc2VyIGJsb2NrUGFyc2VyID0gbmV3IEJyaWRnZVhtbEJsb2NrUGFyc2VyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlciwgY29udGV4dCwgdmFsdWUuaXNGcmFtZXdvcmsoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRHJhd2FibGUuY3JlYXRlRnJvbVhtbChjb250ZXh0LmdldFJlc291cmNlcygpLCBibG9ja1BhcnNlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBibG9ja1BhcnNlci5lbnN1cmVQb3BwZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gZXJyb3IgYW5kIG5vdCB3YXJuaW5nIHNpbmNlIHRoZSBmaWxlIGV4aXN0ZW5jZSBpcyBjaGVja2VkIGJlZm9yZQotICAgICAgICAgICAgICAgICAgICAvLyBhdHRlbXB0aW5nIHRvIHBhcnNlIGl0LgotICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IobnVsbCwgIkZhaWxlZCB0byBwYXJzZSBmaWxlICIgKyBzdHJpbmdWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLCBudWxsIC8qZGF0YSovKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIkZpbGUgJXMgZG9lcyBub3QgZXhpc3QgKG9yIGlzIG5vdCBhIGZpbGUpIiwgc3RyaW5nVmFsdWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgRmlsZSBibXBGaWxlID0gbmV3IEZpbGUoc3RyaW5nVmFsdWUpOwotICAgICAgICAgICAgaWYgKGJtcEZpbGUuaXNGaWxlKCkpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBCaXRtYXAgYml0bWFwID0gQnJpZGdlLmdldENhY2hlZEJpdG1hcChzdHJpbmdWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5pc0ZyYW1ld29yaygpID8gbnVsbCA6IGNvbnRleHQuZ2V0UHJvamVjdEtleSgpKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoYml0bWFwID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCA9IEJpdG1hcF9EZWxlZ2F0ZS5jcmVhdGVCaXRtYXAoYm1wRmlsZSwgZmFsc2UgLyppc011dGFibGUqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVuc2l0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2Uuc2V0Q2FjaGVkQml0bWFwKHN0cmluZ1ZhbHVlLCBiaXRtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmlzRnJhbWV3b3JrKCkgPyBudWxsIDogY29udGV4dC5nZXRQcm9qZWN0S2V5KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCaXRtYXBEcmF3YWJsZShjb250ZXh0LmdldFJlc291cmNlcygpLCBiaXRtYXApOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gd2UnbGwgcmV0dXJuIG51bGwgYmVsb3cKLSAgICAgICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX1JFQUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCBsb3QgbG9hZCAiICsgYm1wRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgZSwgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBhdHRlbXB0IHRvIGdldCBhIGNvbG9yIGZyb20gdGhlIHZhbHVlCi0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNvbG9yID0gZ2V0Q29sb3Ioc3RyaW5nVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yRHJhd2FibGUoY29sb3IpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdlJ2xsIHJldHVybiBudWxsIGJlbG93LgotICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfRk9STUFULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY29udmVydCAiICsgc3RyaW5nVmFsdWUgKyAiIGludG8gYSBkcmF3YWJsZSIsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKmRhdGEqLyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgRHJhd2FibGUgZ2V0TmluZVBhdGNoRHJhd2FibGUoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIERlbnNpdHkgZGVuc2l0eSwKLSAgICAgICAgICAgIGJvb2xlYW4gaXNGcmFtZXdvcmssIFN0cmluZyBjYWNoZUtleSwgQnJpZGdlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAvLyBzZWUgaWYgd2Ugc3RpbGwgaGF2ZSBib3RoIHRoZSBjaHVuayBhbmQgdGhlIGJpdG1hcCBpbiB0aGUgY2FjaGVzCi0gICAgICAgIE5pbmVQYXRjaENodW5rIGNodW5rID0gQnJpZGdlLmdldENhY2hlZDlQYXRjaChjYWNoZUtleSwKLSAgICAgICAgICAgICAgICBpc0ZyYW1ld29yayA/IG51bGwgOiBjb250ZXh0LmdldFByb2plY3RLZXkoKSk7Ci0gICAgICAgIEJpdG1hcCBiaXRtYXAgPSBCcmlkZ2UuZ2V0Q2FjaGVkQml0bWFwKGNhY2hlS2V5LAotICAgICAgICAgICAgICAgIGlzRnJhbWV3b3JrID8gbnVsbCA6IGNvbnRleHQuZ2V0UHJvamVjdEtleSgpKTsKLQotICAgICAgICAvLyBpZiBlaXRoZXIgY2h1bmsgb3IgYml0bWFwIGlzIG51bGwsIHRoZW4gd2UgcmVsb2FkIHRoZSA5LXBhdGNoIGZpbGUuCi0gICAgICAgIGlmIChjaHVuayA9PSBudWxsIHx8IGJpdG1hcCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIE5pbmVQYXRjaCBuaW5lUGF0Y2ggPSBOaW5lUGF0Y2gubG9hZChpbnB1dFN0cmVhbSwgdHJ1ZSAvKmlzOVBhdGNoKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBjb252ZXJ0ICovKTsKLSAgICAgICAgICAgICAgICBpZiAobmluZVBhdGNoICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNodW5rID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gbmluZVBhdGNoLmdldENodW5rKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEJyaWRnZS5zZXRDYWNoZWQ5UGF0Y2goY2FjaGVLZXksIGNodW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZyYW1ld29yayA/IG51bGwgOiBjb250ZXh0LmdldFByb2plY3RLZXkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoYml0bWFwID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCA9IEJpdG1hcF9EZWxlZ2F0ZS5jcmVhdGVCaXRtYXAobmluZVBhdGNoLmdldEltYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qaXNNdXRhYmxlKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbnNpdHkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2Uuc2V0Q2FjaGVkQml0bWFwKGNhY2hlS2V5LCBiaXRtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRnJhbWV3b3JrID8gbnVsbCA6IGNvbnRleHQuZ2V0UHJvamVjdEtleSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVVJMIGlzIHdyb25nLCB3ZSdsbCByZXR1cm4gbnVsbCBiZWxvdwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNodW5rICE9IG51bGwgJiYgYml0bWFwICE9IG51bGwpIHsKLSAgICAgICAgICAgIGludFtdIHBhZGRpbmcgPSBjaHVuay5nZXRQYWRkaW5nKCk7Ci0gICAgICAgICAgICBSZWN0IHBhZGRpbmdSZWN0ID0gbmV3IFJlY3QocGFkZGluZ1swXSwgcGFkZGluZ1sxXSwgcGFkZGluZ1syXSwgcGFkZGluZ1szXSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgTmluZVBhdGNoRHJhd2FibGUoY29udGV4dC5nZXRSZXNvdXJjZXMoKSwgYml0bWFwLAotICAgICAgICAgICAgICAgICAgICBOaW5lUGF0Y2hfRGVsZWdhdGUuc2VyaWFsaXplKGNodW5rKSwKLSAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1JlY3QsIG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLSBUeXBlZFZhbHVlIHN0dWZmCi0gICAgLy8gVGhpcyBpcyB0YWtlbiBmcm9tIC8vZGV2aWNlL2xpYnMvdXRpbHMvUmVzb3VyY2VUeXBlcy5jcHAKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFVuaXRFbnRyeSB7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBpbnQgdHlwZTsKLSAgICAgICAgaW50IHVuaXQ7Ci0gICAgICAgIGZsb2F0IHNjYWxlOwotCi0gICAgICAgIFVuaXRFbnRyeShTdHJpbmcgbmFtZSwgaW50IHR5cGUsIGludCB1bml0LCBmbG9hdCBzY2FsZSkgewotICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gICAgICAgICAgICB0aGlzLnVuaXQgPSB1bml0OwotICAgICAgICAgICAgdGhpcy5zY2FsZSA9IHNjYWxlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgVW5pdEVudHJ5W10gc1VuaXROYW1lcyA9IG5ldyBVbml0RW50cnlbXSB7Ci0gICAgICAgIG5ldyBVbml0RW50cnkoInB4IiwgVHlwZWRWYWx1ZS5UWVBFX0RJTUVOU0lPTiwgVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfUFgsIDEuMGYpLAotICAgICAgICBuZXcgVW5pdEVudHJ5KCJkaXAiLCBUeXBlZFZhbHVlLlRZUEVfRElNRU5TSU9OLCBUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9ESVAsIDEuMGYpLAotICAgICAgICBuZXcgVW5pdEVudHJ5KCJkcCIsIFR5cGVkVmFsdWUuVFlQRV9ESU1FTlNJT04sIFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX0RJUCwgMS4wZiksCi0gICAgICAgIG5ldyBVbml0RW50cnkoInNwIiwgVHlwZWRWYWx1ZS5UWVBFX0RJTUVOU0lPTiwgVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfU1AsIDEuMGYpLAotICAgICAgICBuZXcgVW5pdEVudHJ5KCJwdCIsIFR5cGVkVmFsdWUuVFlQRV9ESU1FTlNJT04sIFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX1BULCAxLjBmKSwKLSAgICAgICAgbmV3IFVuaXRFbnRyeSgiaW4iLCBUeXBlZFZhbHVlLlRZUEVfRElNRU5TSU9OLCBUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9JTiwgMS4wZiksCi0gICAgICAgIG5ldyBVbml0RW50cnkoIm1tIiwgVHlwZWRWYWx1ZS5UWVBFX0RJTUVOU0lPTiwgVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfTU0sIDEuMGYpLAotICAgICAgICBuZXcgVW5pdEVudHJ5KCIlIiwgVHlwZWRWYWx1ZS5UWVBFX0ZSQUNUSU9OLCBUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9GUkFDVElPTiwgMS4wZi8xMDApLAotICAgICAgICBuZXcgVW5pdEVudHJ5KCIlcCIsIFR5cGVkVmFsdWUuVFlQRV9GUkFDVElPTiwgVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfRlJBQ1RJT05fUEFSRU5ULCAxLjBmLzEwMCksCi0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHJhdyB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBhdHRyaWJ1dGUgZmxvYXQtdHlwZSB2YWx1ZSBzdHJpbmcuCi0gICAgICogVGhpcyBvYmplY3QgaXMgb25seSB2YWxpZCB1bnRpbCB0aGUgbmV4dCBjYWxsIG9uIHRvIHtAbGluayBSZXNvdXJjZUhlbHBlcn0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBUeXBlZFZhbHVlIGdldFZhbHVlKFN0cmluZyBhdHRyaWJ1dGUsIFN0cmluZyB2YWx1ZSwgYm9vbGVhbiByZXF1aXJlVW5pdCkgewotICAgICAgICBpZiAocGFyc2VGbG9hdEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlLCBtVmFsdWUsIHJlcXVpcmVVbml0KSkgewotICAgICAgICAgICAgcmV0dXJuIG1WYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBhcnNlIGEgZmxvYXQgYXR0cmlidXRlIGFuZCByZXR1cm4gdGhlIHBhcnNlZCB2YWx1ZSBpbnRvIGEgZ2l2ZW4gVHlwZWRWYWx1ZS4KLSAgICAgKiBAcGFyYW0gYXR0cmlidXRlIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuIENhbiBiZSBudWxsIGlmIDx2YXI+cmVxdWlyZVVuaXQ8L3Zhcj4gaXMgZmFsc2UuCi0gICAgICogQHBhcmFtIHZhbHVlIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZQotICAgICAqIEBwYXJhbSBvdXRWYWx1ZSB0aGUgVHlwZWRWYWx1ZSB0byByZWNlaXZlIHRoZSBwYXJzZWQgdmFsdWUKLSAgICAgKiBAcGFyYW0gcmVxdWlyZVVuaXQgd2hldGhlciB0aGUgdmFsdWUgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhIHVuaXQuCi0gICAgICogQHJldHVybiB0cnVlIGlmIHN1Y2Nlc3MuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIHBhcnNlRmxvYXRBdHRyaWJ1dGUoU3RyaW5nIGF0dHJpYnV0ZSwgU3RyaW5nIHZhbHVlLAotICAgICAgICAgICAgVHlwZWRWYWx1ZSBvdXRWYWx1ZSwgYm9vbGVhbiByZXF1aXJlVW5pdCkgewotICAgICAgICBhc3NlcnQgcmVxdWlyZVVuaXQgPT0gZmFsc2UgfHwgYXR0cmlidXRlICE9IG51bGw7Ci0KLSAgICAgICAgLy8gcmVtb3ZlIHRoZSBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyCi0gICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpOwotICAgICAgICBpbnQgbGVuID0gdmFsdWUubGVuZ3RoKCk7Ci0KLSAgICAgICAgaWYgKGxlbiA8PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayB0aGF0IHRoZXJlJ3Mgbm8gbm9uIGFzY2lpIGNoYXJhY3RlcnMuCi0gICAgICAgIGNoYXJbXSBidWYgPSB2YWx1ZS50b0NoYXJBcnJheSgpOwotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBsZW4gOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChidWZbaV0gPiAyNTUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayB0aGUgZmlyc3QgY2hhcmFjdGVyCi0gICAgICAgIGlmIChidWZbMF0gPCAnMCcgJiYgYnVmWzBdID4gJzknICYmIGJ1ZlswXSAhPSAnLicgJiYgYnVmWzBdICE9ICctJykgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbm93IGxvb2sgZm9yIHRoZSBzdHJpbmcgdGhhdCBpcyBhZnRlciB0aGUgZmxvYXQuLi4KLSAgICAgICAgTWF0Y2hlciBtID0gc0Zsb2F0UGF0dGVybi5tYXRjaGVyKHZhbHVlKTsKLSAgICAgICAgaWYgKG0ubWF0Y2hlcygpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgZl9zdHIgPSBtLmdyb3VwKDEpOwotICAgICAgICAgICAgU3RyaW5nIGVuZCA9IG0uZ3JvdXAoMik7Ci0KLSAgICAgICAgICAgIGZsb2F0IGY7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGYgPSBGbG9hdC5wYXJzZUZsb2F0KGZfc3RyKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGRuJ3QgaGFwcGVuIHdpdGggdGhlIHJlZ2V4cCBhYm92ZS4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChlbmQubGVuZ3RoKCkgPiAwICYmIGVuZC5jaGFyQXQoMCkgIT0gJyAnKSB7Ci0gICAgICAgICAgICAgICAgLy8gTWlnaHQgYmUgYSB1bml0Li4uCi0gICAgICAgICAgICAgICAgaWYgKHBhcnNlVW5pdChlbmQsIG91dFZhbHVlLCBzRmxvYXRPdXQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXB1dGVUeXBlZFZhbHVlKG91dFZhbHVlLCBmLCBzRmxvYXRPdXRbMF0pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBtYWtlIHN1cmUgaXQncyBvbmx5IHNwYWNlcyBhdCB0aGUgZW5kLgotICAgICAgICAgICAgZW5kID0gZW5kLnRyaW0oKTsKLQotICAgICAgICAgICAgaWYgKGVuZC5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG91dFZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVVbml0ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRWYWx1ZS50eXBlID0gVHlwZWRWYWx1ZS5UWVBFX0ZMT0FUOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0VmFsdWUuZGF0YSA9IEZsb2F0LmZsb2F0VG9JbnRCaXRzKGYpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gdW5pdCB3aGVuIHJlcXVpcmVkPyBVc2UgZHAgYW5kIG91dCBhbiBlcnJvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5VW5pdChzVW5pdE5hbWVzWzFdLCBvdXRWYWx1ZSwgc0Zsb2F0T3V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVUeXBlZFZhbHVlKG91dFZhbHVlLCBmLCBzRmxvYXRPdXRbMF0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfUkVTT0xWRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGltZW5zaW9uIFwiJTEkc1wiIGluIGF0dHJpYnV0ZSBcIiUyJHNcIiBpcyBtaXNzaW5nIHVuaXQhIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgYXR0cmlidXRlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgY29tcHV0ZVR5cGVkVmFsdWUoVHlwZWRWYWx1ZSBvdXRWYWx1ZSwgZmxvYXQgdmFsdWUsIGZsb2F0IHNjYWxlKSB7Ci0gICAgICAgIHZhbHVlICo9IHNjYWxlOwotICAgICAgICBib29sZWFuIG5lZyA9IHZhbHVlIDwgMDsKLSAgICAgICAgaWYgKG5lZykgewotICAgICAgICAgICAgdmFsdWUgPSAtdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgbG9uZyBiaXRzID0gKGxvbmcpKHZhbHVlKigxPDwyMykrLjVmKTsKLSAgICAgICAgaW50IHJhZGl4OwotICAgICAgICBpbnQgc2hpZnQ7Ci0gICAgICAgIGlmICgoYml0cyYweDdmZmZmZikgPT0gMCkgewotICAgICAgICAgICAgLy8gQWx3YXlzIHVzZSAyM3AwIGlmIHRoZXJlIGlzIG5vIGZyYWN0aW9uLCBqdXN0IHRvIG1ha2UKLSAgICAgICAgICAgIC8vIHRoaW5ncyBlYXNpZXIgdG8gcmVhZC4KLSAgICAgICAgICAgIHJhZGl4ID0gVHlwZWRWYWx1ZS5DT01QTEVYX1JBRElYXzIzcDA7Ci0gICAgICAgICAgICBzaGlmdCA9IDIzOwotICAgICAgICB9IGVsc2UgaWYgKChiaXRzJjB4ZmZmZmZmZmZmZjgwMDAwMEwpID09IDApIHsKLSAgICAgICAgICAgIC8vIE1hZ25pdHVkZSBpcyB6ZXJvIC0tIGNhbiBmaXQgaW4gMCBiaXRzIG9mIHByZWNpc2lvbi4KLSAgICAgICAgICAgIHJhZGl4ID0gVHlwZWRWYWx1ZS5DT01QTEVYX1JBRElYXzBwMjM7Ci0gICAgICAgICAgICBzaGlmdCA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoKGJpdHMmMHhmZmZmZmZmZjgwMDAwMDAwTCkgPT0gMCkgewotICAgICAgICAgICAgLy8gTWFnbml0dWRlIGNhbiBmaXQgaW4gOCBiaXRzIG9mIHByZWNpc2lvbi4KLSAgICAgICAgICAgIHJhZGl4ID0gVHlwZWRWYWx1ZS5DT01QTEVYX1JBRElYXzhwMTU7Ci0gICAgICAgICAgICBzaGlmdCA9IDg7Ci0gICAgICAgIH0gZWxzZSBpZiAoKGJpdHMmMHhmZmZmZmY4MDAwMDAwMDAwTCkgPT0gMCkgewotICAgICAgICAgICAgLy8gTWFnbml0dWRlIGNhbiBmaXQgaW4gMTYgYml0cyBvZiBwcmVjaXNpb24uCi0gICAgICAgICAgICByYWRpeCA9IFR5cGVkVmFsdWUuQ09NUExFWF9SQURJWF8xNnA3OwotICAgICAgICAgICAgc2hpZnQgPSAxNjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE1hZ25pdHVkZSBuZWVkcyBlbnRpcmUgcmFuZ2UsIHNvIG5vIGZyYWN0aW9uYWwgcGFydC4KLSAgICAgICAgICAgIHJhZGl4ID0gVHlwZWRWYWx1ZS5DT01QTEVYX1JBRElYXzIzcDA7Ci0gICAgICAgICAgICBzaGlmdCA9IDIzOwotICAgICAgICB9Ci0gICAgICAgIGludCBtYW50aXNzYSA9IChpbnQpKAotICAgICAgICAgICAgKGJpdHM+PnNoaWZ0KSAmIFR5cGVkVmFsdWUuQ09NUExFWF9NQU5USVNTQV9NQVNLKTsKLSAgICAgICAgaWYgKG5lZykgewotICAgICAgICAgICAgbWFudGlzc2EgPSAoLW1hbnRpc3NhKSAmIFR5cGVkVmFsdWUuQ09NUExFWF9NQU5USVNTQV9NQVNLOwotICAgICAgICB9Ci0gICAgICAgIG91dFZhbHVlLmRhdGEgfD0KLSAgICAgICAgICAgIChyYWRpeDw8VHlwZWRWYWx1ZS5DT01QTEVYX1JBRElYX1NISUZUKQotICAgICAgICAgICAgfCAobWFudGlzc2E8PFR5cGVkVmFsdWUuQ09NUExFWF9NQU5USVNTQV9TSElGVCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwYXJzZVVuaXQoU3RyaW5nIHN0ciwgVHlwZWRWYWx1ZSBvdXRWYWx1ZSwgZmxvYXRbXSBvdXRTY2FsZSkgewotICAgICAgICBzdHIgPSBzdHIudHJpbSgpOwotCi0gICAgICAgIGZvciAoVW5pdEVudHJ5IHVuaXQgOiBzVW5pdE5hbWVzKSB7Ci0gICAgICAgICAgICBpZiAodW5pdC5uYW1lLmVxdWFscyhzdHIpKSB7Ci0gICAgICAgICAgICAgICAgYXBwbHlVbml0KHVuaXQsIG91dFZhbHVlLCBvdXRTY2FsZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhcHBseVVuaXQoVW5pdEVudHJ5IHVuaXQsIFR5cGVkVmFsdWUgb3V0VmFsdWUsIGZsb2F0W10gb3V0U2NhbGUpIHsKLSAgICAgICAgb3V0VmFsdWUudHlwZSA9IHVuaXQudHlwZTsKLSAgICAgICAgb3V0VmFsdWUuZGF0YSA9IHVuaXQudW5pdCA8PCBUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9TSElGVDsKLSAgICAgICAgb3V0U2NhbGVbMF0gPSB1bml0LnNjYWxlOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1N0YWNrLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvU3RhY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJkMDAxNS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvU3RhY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLS8qKgotICogQ3VzdG9tIFN0YWNrIGltcGxlbWVudGF0aW9uIG9uIHRvcCBvZiBhbiB7QGxpbmsgQXJyYXlMaXN0fSBpbnN0ZWFkIG9mCi0gKiB1c2luZyB7QGxpbmsgamF2YS51dGlsLlN0YWNrfSB3aGljaCBpcyBvbiB0b3Agb2YgYSB2ZWN0b3IuCi0gKgotICogQHBhcmFtIDxUPgotICovCi1wdWJsaWMgY2xhc3MgU3RhY2s8VD4gZXh0ZW5kcyBBcnJheUxpc3Q8VD4gewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgICBwdWJsaWMgU3RhY2soKSB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0YWNrKGludCBzaXplKSB7Ci0gICAgICAgIHN1cGVyKHNpemUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFB1c2hlcyB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBzdGFjawotICAgICAqIEBwYXJhbSBvYmplY3QgdGhlIG9iamVjdCB0byBwdXNoCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcHVzaChUIG9iamVjdCkgewotICAgICAgICBhZGQob2JqZWN0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdmUgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayBhbmQgcmV0dXJucyBpdC4KLSAgICAgKiBAcmV0dXJuIHRoZSByZW1vdmVkIG9iamVjdCBvciBudWxsIGlmIHRoZSBzdGFjayB3YXMgZW1wdHkuCi0gICAgICovCi0gICAgcHVibGljIFQgcG9wKCkgewotICAgICAgICBpZiAoc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgcmV0dXJuIHJlbW92ZShzaXplKCkgLSAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KLSAgICAgKiBAcmV0dXJuIHRoZSBvYmplY3QgYXQgdGhlIHRvcCBvciBudWxsIGlmIHRoZSBzdGFjayBpcyBlbXB0eS4KLSAgICAgKi8KLSAgICBwdWJsaWMgVCBwZWVrKCkgewotICAgICAgICBpZiAoc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgcmV0dXJuIGdldChzaXplKCkgLSAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9iaW5kaW5nL0FkYXB0ZXJIZWxwZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9iaW5kaW5nL0FkYXB0ZXJIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM5OThhZi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvYmluZGluZy9BZGFwdGVySGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLmJpbmRpbmc7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuRGF0YUJpbmRpbmdJdGVtOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5JUHJvamVjdENhbGxiYWNrOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5MYXlvdXRMb2c7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlUmVmZXJlbmNlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5JUHJvamVjdENhbGxiYWNrLlZpZXdBdHRyaWJ1dGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5CcmlkZ2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkLkJyaWRnZUNvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlJlbmRlckFjdGlvbjsKLWltcG9ydCBjb20uYW5kcm9pZC51dGlsLlBhaXI7Ci0KLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkNoZWNrYWJsZTsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7Ci0KLS8qKgotICogQSBIZWxwZXIgY2xhc3MgdG8gZG8gZmFrZSBkYXRhIGJpbmRpbmcgaW4ge0BsaW5rIEFkYXB0ZXJWaWV3fSBvYmplY3RzLgotICovCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotcHVibGljIGNsYXNzIEFkYXB0ZXJIZWxwZXIgewotCi0gICAgc3RhdGljIFBhaXI8VmlldywgQm9vbGVhbj4gZ2V0VmlldyhBZGFwdGVySXRlbSBpdGVtLCBBZGFwdGVySXRlbSBwYXJlbnRJdGVtLCBWaWV3R3JvdXAgcGFyZW50LAotICAgICAgICAgICAgSVByb2plY3RDYWxsYmFjayBjYWxsYmFjaywgUmVzb3VyY2VSZWZlcmVuY2UgYWRhcHRlclJlZiwgYm9vbGVhbiBza2lwQ2FsbGJhY2tQYXJzZXIpIHsKLSAgICAgICAgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCByZWN5Y2xpbmcgaGVyZSBiZWNhdXNlIHdlIG5ldmVyIHNjcm9sbC4KLSAgICAgICAgRGF0YUJpbmRpbmdJdGVtIGRhdGFCaW5kaW5nSXRlbSA9IGl0ZW0uZ2V0RGF0YUJpbmRpbmdJdGVtKCk7Ci0KLSAgICAgICAgQnJpZGdlQ29udGV4dCBjb250ZXh0ID0gUmVuZGVyQWN0aW9uLmdldEN1cnJlbnRDb250ZXh0KCk7Ci0KLSAgICAgICAgUGFpcjxWaWV3LCBCb29sZWFuPiBwYWlyID0gY29udGV4dC5pbmZsYXRlVmlldyhkYXRhQmluZGluZ0l0ZW0uZ2V0Vmlld1JlZmVyZW5jZSgpLAotICAgICAgICAgICAgICAgIHBhcmVudCwgZmFsc2UgLyphdHRhY2hUb1Jvb3QqLywgc2tpcENhbGxiYWNrUGFyc2VyKTsKLQotICAgICAgICBWaWV3IHZpZXcgPSBwYWlyLmdldEZpcnN0KCk7Ci0gICAgICAgIHNraXBDYWxsYmFja1BhcnNlciB8PSBwYWlyLmdldFNlY29uZCgpOwotCi0gICAgICAgIGlmICh2aWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGZpbGxWaWV3KGNvbnRleHQsIHZpZXcsIGl0ZW0sIHBhcmVudEl0ZW0sIGNhbGxiYWNrLCBhZGFwdGVyUmVmKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBhIHRleHQgdmlldyB0byBkaXNwbGF5IGFuIGVycm9yLgotICAgICAgICAgICAgVGV4dFZpZXcgdHYgPSBuZXcgVGV4dFZpZXcoY29udGV4dCk7Ci0gICAgICAgICAgICB0di5zZXRUZXh0KCJVbmFibGUgdG8gZmluZCBsYXlvdXQ6ICIgKyBkYXRhQmluZGluZ0l0ZW0uZ2V0Vmlld1JlZmVyZW5jZSgpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB2aWV3ID0gdHY7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gUGFpci5vZih2aWV3LCBza2lwQ2FsbGJhY2tQYXJzZXIpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZmlsbFZpZXcoQnJpZGdlQ29udGV4dCBjb250ZXh0LCBWaWV3IHZpZXcsIEFkYXB0ZXJJdGVtIGl0ZW0sCi0gICAgICAgICAgICBBZGFwdGVySXRlbSBwYXJlbnRJdGVtLCBJUHJvamVjdENhbGxiYWNrIGNhbGxiYWNrLCBSZXNvdXJjZVJlZmVyZW5jZSBhZGFwdGVyUmVmKSB7Ci0gICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7Ci0gICAgICAgICAgICBWaWV3R3JvdXAgZ3JvdXAgPSAoVmlld0dyb3VwKSB2aWV3OwotICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gZ3JvdXAuZ2V0Q2hpbGRDb3VudCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgY291bnQgOyBpKyspIHsKLSAgICAgICAgICAgICAgICBmaWxsVmlldyhjb250ZXh0LCBncm91cC5nZXRDaGlsZEF0KGkpLCBpdGVtLCBwYXJlbnRJdGVtLCBjYWxsYmFjaywgYWRhcHRlclJlZik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgaWQgPSB2aWV3LmdldElkKCk7Ci0gICAgICAgICAgICBpZiAoaWQgIT0gMCkgewotICAgICAgICAgICAgICAgIFJlc291cmNlUmVmZXJlbmNlIHJlc29sdmVkUmVmID0gY29udGV4dC5yZXNvbHZlSWQoaWQpOwotICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZFJlZiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBmdWxsUG9zaXRpb24gPSBpdGVtLmdldEZ1bGxQb3NpdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBpbnQgcG9zaXRpb25QZXJUeXBlID0gaXRlbS5nZXRQb3NpdGlvblBlclR5cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGZ1bGxQYXJlbnRQb3NpdGlvbiA9IHBhcmVudEl0ZW0gIT0gbnVsbCA/IHBhcmVudEl0ZW0uZ2V0RnVsbFBvc2l0aW9uKCkgOiAwOwotICAgICAgICAgICAgICAgICAgICBpbnQgcGFyZW50UG9zaXRpb25QZXJUeXBlID0gcGFyZW50SXRlbSAhPSBudWxsID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJdGVtLmdldFBvc2l0aW9uUGVyVHlwZSgpIDogMDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodmlldyBpbnN0YW5jZW9mIFRleHRWaWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBUZXh0VmlldyB0diA9IChUZXh0VmlldykgdmlldzsKLSAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGNhbGxiYWNrLmdldEFkYXB0ZXJJdGVtVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXJSZWYsIGNvbnRleHQuZ2V0Vmlld0tleSh2aWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5nZXREYXRhQmluZGluZ0l0ZW0oKS5nZXRWaWV3UmVmZXJlbmNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxQb3NpdGlvbiwgcG9zaXRpb25QZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsUGFyZW50UG9zaXRpb24sIHBhcmVudFBvc2l0aW9uUGVyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRSZWYsIFZpZXdBdHRyaWJ1dGUuVEVYVCwgdHYuZ2V0VGV4dCgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuZ2V0Q2xhc3MoKSAhPSBWaWV3QXR0cmlidXRlLlRFWFQuZ2V0QXR0cmlidXRlQ2xhc3MoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19CUk9LRU4sIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldyb25nIEFkYXB0ZXIgSXRlbSB2YWx1ZSBjbGFzcyBmb3IgVEVYVC4gRXhwZWN0ZWQgU3RyaW5nLCBnb3QgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmdldENsYXNzKCkuZ2V0TmFtZSgpKSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHYuc2V0VGV4dCgoU3RyaW5nKSB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcgaW5zdGFuY2VvZiBDaGVja2FibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrYWJsZSBjYiA9IChDaGVja2FibGUpIHZpZXc7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IGNhbGxiYWNrLmdldEFkYXB0ZXJJdGVtVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXJSZWYsIGNvbnRleHQuZ2V0Vmlld0tleSh2aWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5nZXREYXRhQmluZGluZ0l0ZW0oKS5nZXRWaWV3UmVmZXJlbmNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxQb3NpdGlvbiwgcG9zaXRpb25QZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsUGFyZW50UG9zaXRpb24sIHBhcmVudFBvc2l0aW9uUGVyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRSZWYsIFZpZXdBdHRyaWJ1dGUuSVNfQ0hFQ0tFRCwgY2IuaXNDaGVja2VkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuZ2V0Q2xhc3MoKSAhPSBWaWV3QXR0cmlidXRlLklTX0NIRUNLRUQuZ2V0QXR0cmlidXRlQ2xhc3MoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19CUk9LRU4sIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldyb25nIEFkYXB0ZXIgSXRlbSB2YWx1ZSBjbGFzcyBmb3IgVEVYVC4gRXhwZWN0ZWQgQm9vbGVhbiwgZ290ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5nZXRDbGFzcygpLmdldE5hbWUoKSksIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiLnNldENoZWNrZWQoKEJvb2xlYW4pIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAodmlldyBpbnN0YW5jZW9mIEltYWdlVmlldykgewotICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VWaWV3IGl2ID0gKEltYWdlVmlldykgdmlldzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gY2FsbGJhY2suZ2V0QWRhcHRlckl0ZW1WYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlclJlZiwgY29udGV4dC5nZXRWaWV3S2V5KHZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmdldERhdGFCaW5kaW5nSXRlbSgpLmdldFZpZXdSZWZlcmVuY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFBvc2l0aW9uLCBwb3NpdGlvblBlclR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxQYXJlbnRQb3NpdGlvbiwgcGFyZW50UG9zaXRpb25QZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFJlZiwgVmlld0F0dHJpYnV0ZS5TUkMsIGl2LmdldERyYXdhYmxlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuZ2V0Q2xhc3MoKSAhPSBWaWV3QXR0cmlidXRlLlNSQy5nZXRBdHRyaWJ1dGVDbGFzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV3JvbmcgQWRhcHRlciBJdGVtIHZhbHVlIGNsYXNzIGZvciBURVhULiBFeHBlY3RlZCBCb29sZWFuLCBnb3QgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmdldENsYXNzKCkuZ2V0TmFtZSgpKSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvYmluZGluZy9BZGFwdGVySXRlbS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL2JpbmRpbmcvQWRhcHRlckl0ZW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyOGRiYS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvYmluZGluZy9BZGFwdGVySXRlbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLmJpbmRpbmc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5EYXRhQmluZGluZ0l0ZW07Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgaXRlbXMgcHJvdmlkZWQgYnkgdGhlIGFkYXB0ZXIuIFRoZXkgYXJlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZC4KLSAqLwotZmluYWwgY2xhc3MgQWRhcHRlckl0ZW0gewotICAgIHByaXZhdGUgZmluYWwgRGF0YUJpbmRpbmdJdGVtIG1JdGVtOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1UeXBlOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1GdWxsUG9zaXRpb247Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVBvc2l0aW9uUGVyVHlwZTsKLSAgICBwcml2YXRlIExpc3Q8QWRhcHRlckl0ZW0+IG1DaGlsZHJlbjsKLQotICAgIHByb3RlY3RlZCBBZGFwdGVySXRlbShEYXRhQmluZGluZ0l0ZW0gaXRlbSwgaW50IHR5cGUsIGludCBmdWxsUG9zaXRpb24sCi0gICAgICAgICAgICBpbnQgcG9zaXRpb25QZXJUeXBlKSB7Ci0gICAgICAgIG1JdGVtID0gaXRlbTsKLSAgICAgICAgbVR5cGUgPSB0eXBlOwotICAgICAgICBtRnVsbFBvc2l0aW9uID0gZnVsbFBvc2l0aW9uOwotICAgICAgICBtUG9zaXRpb25QZXJUeXBlID0gcG9zaXRpb25QZXJUeXBlOwotICAgIH0KLQotICAgIHZvaWQgYWRkQ2hpbGQoQWRhcHRlckl0ZW0gY2hpbGQpIHsKLSAgICAgICAgaWYgKG1DaGlsZHJlbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtQ2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0PEFkYXB0ZXJJdGVtPigpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUNoaWxkcmVuLmFkZChjaGlsZCk7Ci0gICAgfQotCi0gICAgTGlzdDxBZGFwdGVySXRlbT4gZ2V0Q2hpbGRyZW4oKSB7Ci0gICAgICAgIGlmIChtQ2hpbGRyZW4gIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1DaGlsZHJlbjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKLSAgICB9Ci0KLSAgICBpbnQgZ2V0VHlwZSgpIHsKLSAgICAgICAgcmV0dXJuIG1UeXBlOwotICAgIH0KLQotICAgIGludCBnZXRGdWxsUG9zaXRpb24oKSB7Ci0gICAgICAgIHJldHVybiBtRnVsbFBvc2l0aW9uOwotICAgIH0KLQotICAgIGludCBnZXRQb3NpdGlvblBlclR5cGUoKSB7Ci0gICAgICAgIHJldHVybiBtUG9zaXRpb25QZXJUeXBlOwotICAgIH0KLQotICAgIERhdGFCaW5kaW5nSXRlbSBnZXREYXRhQmluZGluZ0l0ZW0oKSB7Ci0gICAgICAgIHJldHVybiBtSXRlbTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvYmluZGluZy9GYWtlQWRhcHRlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL2JpbmRpbmcvRmFrZUFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWExM2Y1YS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvYmluZGluZy9GYWtlQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5iaW5kaW5nOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkFkYXB0ZXJCaW5kaW5nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5EYXRhQmluZGluZ0l0ZW07Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklQcm9qZWN0Q2FsbGJhY2s7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlUmVmZXJlbmNlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnV0aWwuUGFpcjsKLQotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQmFzZUFkYXB0ZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdEFkYXB0ZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuU3Bpbm5lckFkYXB0ZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEZha2UgYWRhcHRlciB0byBkbyBmYWtlIGRhdGEgYmluZGluZyBpbiB7QGxpbmsgQWRhcHRlclZpZXd9IG9iamVjdHMgZm9yIHtAbGluayBMaXN0QWRhcHRlcn0KLSAqIGFuZCB7QGxpbmsgU3Bpbm5lckFkYXB0ZXJ9LgotICoKLSAqLwotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLXB1YmxpYyBjbGFzcyBGYWtlQWRhcHRlciBleHRlbmRzIEJhc2VBZGFwdGVyIHsKLQotICAgIC8vIGRvbid0IHVzZSBhIHNldCBiZWNhdXNlIHRoZSBvcmRlciBpcyBpbXBvcnRhbnQuCi0gICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFJlc291cmNlUmVmZXJlbmNlPiBtVHlwZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlUmVmZXJlbmNlPigpOwotICAgIHByaXZhdGUgZmluYWwgSVByb2plY3RDYWxsYmFjayBtQ2FsbGJhY2s7Ci0gICAgcHJpdmF0ZSBmaW5hbCBSZXNvdXJjZVJlZmVyZW5jZSBtQWRhcHRlclJlZjsKLSAgICBwcml2YXRlIGZpbmFsIExpc3Q8QWRhcHRlckl0ZW0+IG1JdGVtcyA9IG5ldyBBcnJheUxpc3Q8QWRhcHRlckl0ZW0+KCk7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Ta2lwQ2FsbGJhY2tQYXJzZXIgPSBmYWxzZTsKLQotICAgIHB1YmxpYyBGYWtlQWRhcHRlcihSZXNvdXJjZVJlZmVyZW5jZSBhZGFwdGVyUmVmLCBBZGFwdGVyQmluZGluZyBiaW5kaW5nLAotICAgICAgICAgICAgSVByb2plY3RDYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICBtQWRhcHRlclJlZiA9IGFkYXB0ZXJSZWY7Ci0gICAgICAgIG1DYWxsYmFjayA9IGNhbGxiYWNrOwotCi0gICAgICAgIGZpbmFsIGludCByZXBlYXRDb3VudCA9IGJpbmRpbmcuZ2V0UmVwZWF0Q291bnQoKTsKLSAgICAgICAgZmluYWwgaW50IGl0ZW1Db3VudCA9IGJpbmRpbmcuZ2V0SXRlbUNvdW50KCk7Ci0KLSAgICAgICAgLy8gTmVlZCBhbiBhcnJheSB0byBjb3VudCBmb3IgZWFjaCB0eXBlLgotICAgICAgICAvLyBUaGlzIGlzIGxpa2VseSB0b28gYmlnLCBidXQgaXMgdGhlIG1heCBpdCBjYW4gYmUuCi0gICAgICAgIGludFtdIHR5cGVDb3VudCA9IG5ldyBpbnRbaXRlbUNvdW50XTsKLQotICAgICAgICAvLyBXZSBwdXQgc2V2ZXJhbCByZXBlYXRpbmcgc2V0cy4KLSAgICAgICAgZm9yIChpbnQgciA9IDAgOyByIDwgcmVwZWF0Q291bnQgOyByKyspIHsKLSAgICAgICAgICAgIC8vIGxvb3Agb24gdGhlIHR5cGUgb2YgbGlzdCBpdGVtcywgYW5kIGFkZCBob3dldmVyIG1hbnkgZm9yIGVhY2ggdHlwZS4KLSAgICAgICAgICAgIGZvciAoRGF0YUJpbmRpbmdJdGVtIGRhdGFCaW5kaW5nSXRlbSA6IGJpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICBSZXNvdXJjZVJlZmVyZW5jZSB2aWV3UmVmID0gZGF0YUJpbmRpbmdJdGVtLmdldFZpZXdSZWZlcmVuY2UoKTsKLSAgICAgICAgICAgICAgICBpbnQgdHlwZUluZGV4ID0gbVR5cGVzLmluZGV4T2Yodmlld1JlZik7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVJbmRleCA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICB0eXBlSW5kZXggPSBtVHlwZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICBtVHlwZXMuYWRkKHZpZXdSZWYpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IGRhdGFCaW5kaW5nSXRlbS5nZXRDb3VudCgpOwotCi0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0gdHlwZUNvdW50W3R5cGVJbmRleF07Ci0gICAgICAgICAgICAgICAgdHlwZUNvdW50W3R5cGVJbmRleF0gKz0gY291bnQ7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMCA7IGsgPCBjb3VudCA7IGsrKykgewotICAgICAgICAgICAgICAgICAgICBtSXRlbXMuYWRkKG5ldyBBZGFwdGVySXRlbShkYXRhQmluZGluZ0l0ZW0sIHR5cGVJbmRleCwgbUl0ZW1zLnNpemUoKSwgaW5kZXgrKykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzRW5hYmxlZChpbnQgcG9zaXRpb24pIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIG1JdGVtcy5zaXplKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBnZXRJdGVtKGludCBwb3NpdGlvbikgewotICAgICAgICByZXR1cm4gbUl0ZW1zLmdldChwb3NpdGlvbik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGxvbmcgZ2V0SXRlbUlkKGludCBwb3NpdGlvbikgewotICAgICAgICByZXR1cm4gcG9zaXRpb247Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRJdGVtVmlld1R5cGUoaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgIHJldHVybiBtSXRlbXMuZ2V0KHBvc2l0aW9uKS5nZXRUeXBlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZpZXcgZ2V0VmlldyhpbnQgcG9zaXRpb24sIFZpZXcgY29udmVydFZpZXcsIFZpZXdHcm91cCBwYXJlbnQpIHsKLSAgICAgICAgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCByZWN5Y2xpbmcgaGVyZSBiZWNhdXNlIHdlIG5ldmVyIHNjcm9sbC4KLSAgICAgICAgQWRhcHRlckl0ZW0gaXRlbSA9IG1JdGVtcy5nZXQocG9zaXRpb24pOwotICAgICAgICBQYWlyPFZpZXcsIEJvb2xlYW4+IHBhaXIgPSBBZGFwdGVySGVscGVyLmdldFZpZXcoaXRlbSwgbnVsbCAvKnBhcmVudEdyb3VwKi8sIHBhcmVudCwKLSAgICAgICAgICAgICAgICBtQ2FsbGJhY2ssIG1BZGFwdGVyUmVmLCBtU2tpcENhbGxiYWNrUGFyc2VyKTsKLSAgICAgICAgbVNraXBDYWxsYmFja1BhcnNlciA9IHBhaXIuZ2V0U2Vjb25kKCk7Ci0gICAgICAgIHJldHVybiBwYWlyLmdldEZpcnN0KCk7Ci0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFZpZXdUeXBlQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtVHlwZXMuc2l6ZSgpOwotICAgIH0KLQotICAgIC8vIC0tLS0gU3Bpbm5lckFkYXB0ZXIKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBWaWV3IGdldERyb3BEb3duVmlldyhpbnQgcG9zaXRpb24sIFZpZXcgY29udmVydFZpZXcsIFZpZXdHcm91cCBwYXJlbnQpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvYmluZGluZy9GYWtlRXhwYW5kYWJsZUFkYXB0ZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9iaW5kaW5nL0Zha2VFeHBhbmRhYmxlQWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTM5NTc5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW1wbC9iaW5kaW5nL0Zha2VFeHBhbmRhYmxlQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5iaW5kaW5nOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLkFkYXB0ZXJCaW5kaW5nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmlkZS5jb21tb24ucmVuZGVyaW5nLmFwaS5EYXRhQmluZGluZ0l0ZW07Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLklQcm9qZWN0Q2FsbGJhY2s7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaWRlLmNvbW1vbi5yZW5kZXJpbmcuYXBpLlJlc291cmNlUmVmZXJlbmNlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnV0aWwuUGFpcjsKLQotaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuRGF0YVNldE9ic2VydmVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuRXhwYW5kYWJsZUxpc3RBZGFwdGVyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkhldGVyb2dlbmVvdXNFeHBhbmRhYmxlTGlzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi1wdWJsaWMgY2xhc3MgRmFrZUV4cGFuZGFibGVBZGFwdGVyIGltcGxlbWVudHMgRXhwYW5kYWJsZUxpc3RBZGFwdGVyLCBIZXRlcm9nZW5lb3VzRXhwYW5kYWJsZUxpc3QgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBJUHJvamVjdENhbGxiYWNrIG1DYWxsYmFjazsKLSAgICBwcml2YXRlIGZpbmFsIFJlc291cmNlUmVmZXJlbmNlIG1BZGFwdGVyUmVmOwotICAgIHByaXZhdGUgYm9vbGVhbiBtU2tpcENhbGxiYWNrUGFyc2VyID0gZmFsc2U7Ci0KLSAgICBwcm90ZWN0ZWQgZmluYWwgTGlzdDxBZGFwdGVySXRlbT4gbUl0ZW1zID0gbmV3IEFycmF5TGlzdDxBZGFwdGVySXRlbT4oKTsKLQotICAgIC8vIGRvbid0IHVzZSBhIHNldCBiZWNhdXNlIHRoZSBvcmRlciBpcyBpbXBvcnRhbnQuCi0gICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFJlc291cmNlUmVmZXJlbmNlPiBtR3JvdXBUeXBlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2VSZWZlcmVuY2U+KCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFJlc291cmNlUmVmZXJlbmNlPiBtQ2hpbGRyZW5UeXBlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2VSZWZlcmVuY2U+KCk7Ci0KLSAgICBwdWJsaWMgRmFrZUV4cGFuZGFibGVBZGFwdGVyKFJlc291cmNlUmVmZXJlbmNlIGFkYXB0ZXJSZWYsIEFkYXB0ZXJCaW5kaW5nIGJpbmRpbmcsCi0gICAgICAgICAgICBJUHJvamVjdENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIG1BZGFwdGVyUmVmID0gYWRhcHRlclJlZjsKLSAgICAgICAgbUNhbGxiYWNrID0gY2FsbGJhY2s7Ci0KLSAgICAgICAgY3JlYXRlSXRlbXMoYmluZGluZywgYmluZGluZy5nZXRJdGVtQ291bnQoKSwgYmluZGluZy5nZXRSZXBlYXRDb3VudCgpLCBtR3JvdXBUeXBlcywgMSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUl0ZW1zKEl0ZXJhYmxlPERhdGFCaW5kaW5nSXRlbT4gaXRlcmFibGUsIGZpbmFsIGludCBpdGVtQ291bnQsCi0gICAgICAgICAgICBmaW5hbCBpbnQgcmVwZWF0Q291bnQsIExpc3Q8UmVzb3VyY2VSZWZlcmVuY2U+IHR5cGVzLCBpbnQgZGVwdGgpIHsKLSAgICAgICAgLy8gTmVlZCBhbiBhcnJheSB0byBjb3VudCBmb3IgZWFjaCB0eXBlLgotICAgICAgICAvLyBUaGlzIGlzIGxpa2VseSB0b28gYmlnLCBidXQgaXMgdGhlIG1heCBpdCBjYW4gYmUuCi0gICAgICAgIGludFtdIHR5cGVDb3VudCA9IG5ldyBpbnRbaXRlbUNvdW50XTsKLQotICAgICAgICAvLyB3ZSBwdXQgc2V2ZXJhbCByZXBlYXRpbmcgc2V0cy4KLSAgICAgICAgZm9yIChpbnQgciA9IDAgOyByIDwgcmVwZWF0Q291bnQgOyByKyspIHsKLSAgICAgICAgICAgIC8vIGxvb3Agb24gdGhlIHR5cGUgb2YgbGlzdCBpdGVtcywgYW5kIGFkZCBob3dldmVyIG1hbnkgZm9yIGVhY2ggdHlwZS4KLSAgICAgICAgICAgIGZvciAoRGF0YUJpbmRpbmdJdGVtIGRhdGFCaW5kaW5nSXRlbSA6IGl0ZXJhYmxlKSB7Ci0gICAgICAgICAgICAgICAgUmVzb3VyY2VSZWZlcmVuY2Ugdmlld1JlZiA9IGRhdGFCaW5kaW5nSXRlbS5nZXRWaWV3UmVmZXJlbmNlKCk7Ci0gICAgICAgICAgICAgICAgaW50IHR5cGVJbmRleCA9IHR5cGVzLmluZGV4T2Yodmlld1JlZik7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVJbmRleCA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICB0eXBlSW5kZXggPSB0eXBlcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVzLmFkZCh2aWV3UmVmKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBMaXN0PERhdGFCaW5kaW5nSXRlbT4gY2hpbGRyZW4gPSBkYXRhQmluZGluZ0l0ZW0uZ2V0Q2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICBpbnQgY291bnQgPSBkYXRhQmluZGluZ0l0ZW0uZ2V0Q291bnQoKTsKLQotICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBjaGlsZHJlbiwgd2UgdXNlIHRoZSBjb3VudCBhcyBhIHJlcGVhdCBjb3VudCBmb3IgdGhlIGNoaWxkcmVuLgotICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSB0eXBlQ291bnRbdHlwZUluZGV4XTsKLSAgICAgICAgICAgICAgICB0eXBlQ291bnRbdHlwZUluZGV4XSArPSBjb3VudDsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwIDsgayA8IGNvdW50IDsgaysrKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJJdGVtIGl0ZW0gPSBuZXcgQWRhcHRlckl0ZW0oZGF0YUJpbmRpbmdJdGVtLCB0eXBlSW5kZXgsIG1JdGVtcy5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAgIG1JdGVtcy5hZGQoaXRlbSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUl0ZW1zKGRhdGFCaW5kaW5nSXRlbSwgZGVwdGggKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVJdGVtcyhEYXRhQmluZGluZ0l0ZW0gaXRlbSwgaW50IGRlcHRoKSB7Ci0gICAgICAgIGlmIChkZXB0aCA9PSAyKSB7Ci0gICAgICAgICAgICBjcmVhdGVJdGVtcyhpdGVtLCBpdGVtLmdldENoaWxkcmVuKCkuc2l6ZSgpLCBpdGVtLmdldENvdW50KCksIG1DaGlsZHJlblR5cGVzLCBkZXB0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIEFkYXB0ZXJJdGVtIGdldENoaWxkSXRlbShpbnQgZ3JvdXBQb3NpdGlvbiwgaW50IGNoaWxkUG9zaXRpb24pIHsKLSAgICAgICAgQWRhcHRlckl0ZW0gaXRlbSA9IG1JdGVtcy5nZXQoZ3JvdXBQb3NpdGlvbik7Ci0KLSAgICAgICAgTGlzdDxBZGFwdGVySXRlbT4gY2hpbGRyZW4gPSBpdGVtLmdldENoaWxkcmVuKCk7Ci0gICAgICAgIHJldHVybiBjaGlsZHJlbi5nZXQoY2hpbGRQb3NpdGlvbik7Ci0gICAgfQotCi0gICAgLy8gLS0tLSBFeHBhbmRhYmxlTGlzdEFkYXB0ZXIKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0R3JvdXBDb3VudCgpIHsKLSAgICAgICAgcmV0dXJuIG1JdGVtcy5zaXplKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRDaGlsZHJlbkNvdW50KGludCBncm91cFBvc2l0aW9uKSB7Ci0gICAgICAgIEFkYXB0ZXJJdGVtIGl0ZW0gPSBtSXRlbXMuZ2V0KGdyb3VwUG9zaXRpb24pOwotICAgICAgICByZXR1cm4gaXRlbS5nZXRDaGlsZHJlbigpLnNpemUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IGdldEdyb3VwKGludCBncm91cFBvc2l0aW9uKSB7Ci0gICAgICAgIHJldHVybiBtSXRlbXMuZ2V0KGdyb3VwUG9zaXRpb24pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgZ2V0Q2hpbGQoaW50IGdyb3VwUG9zaXRpb24sIGludCBjaGlsZFBvc2l0aW9uKSB7Ci0gICAgICAgIHJldHVybiBnZXRDaGlsZEl0ZW0oZ3JvdXBQb3NpdGlvbiwgY2hpbGRQb3NpdGlvbik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZpZXcgZ2V0R3JvdXBWaWV3KGludCBncm91cFBvc2l0aW9uLCBib29sZWFuIGlzRXhwYW5kZWQsIFZpZXcgY29udmVydFZpZXcsCi0gICAgICAgICAgICBWaWV3R3JvdXAgcGFyZW50KSB7Ci0gICAgICAgIC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVjeWNsaW5nIGhlcmUgYmVjYXVzZSB3ZSBuZXZlciBzY3JvbGwuCi0gICAgICAgIEFkYXB0ZXJJdGVtIGl0ZW0gPSBtSXRlbXMuZ2V0KGdyb3VwUG9zaXRpb24pOwotICAgICAgICBQYWlyPFZpZXcsIEJvb2xlYW4+IHBhaXIgPSBBZGFwdGVySGVscGVyLmdldFZpZXcoaXRlbSwgbnVsbCAvKnBhcmVudEl0ZW0qLywgcGFyZW50LAotICAgICAgICAgICAgICAgIG1DYWxsYmFjaywgbUFkYXB0ZXJSZWYsIG1Ta2lwQ2FsbGJhY2tQYXJzZXIpOwotICAgICAgICBtU2tpcENhbGxiYWNrUGFyc2VyID0gcGFpci5nZXRTZWNvbmQoKTsKLSAgICAgICAgcmV0dXJuIHBhaXIuZ2V0Rmlyc3QoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVmlldyBnZXRDaGlsZFZpZXcoaW50IGdyb3VwUG9zaXRpb24sIGludCBjaGlsZFBvc2l0aW9uLCBib29sZWFuIGlzTGFzdENoaWxkLAotICAgICAgICAgICAgVmlldyBjb252ZXJ0VmlldywgVmlld0dyb3VwIHBhcmVudCkgewotICAgICAgICAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IHJlY3ljbGluZyBoZXJlIGJlY2F1c2Ugd2UgbmV2ZXIgc2Nyb2xsLgotICAgICAgICBBZGFwdGVySXRlbSBwYXJlbnRJdGVtID0gbUl0ZW1zLmdldChncm91cFBvc2l0aW9uKTsKLSAgICAgICAgQWRhcHRlckl0ZW0gaXRlbSA9IGdldENoaWxkSXRlbShncm91cFBvc2l0aW9uLCBjaGlsZFBvc2l0aW9uKTsKLSAgICAgICAgUGFpcjxWaWV3LCBCb29sZWFuPiBwYWlyID0gQWRhcHRlckhlbHBlci5nZXRWaWV3KGl0ZW0sIHBhcmVudEl0ZW0sIHBhcmVudCwgbUNhbGxiYWNrLAotICAgICAgICAgICAgICAgIG1BZGFwdGVyUmVmLCBtU2tpcENhbGxiYWNrUGFyc2VyKTsKLSAgICAgICAgbVNraXBDYWxsYmFja1BhcnNlciA9IHBhaXIuZ2V0U2Vjb25kKCk7Ci0gICAgICAgIHJldHVybiBwYWlyLmdldEZpcnN0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGxvbmcgZ2V0R3JvdXBJZChpbnQgZ3JvdXBQb3NpdGlvbikgewotICAgICAgICByZXR1cm4gZ3JvdXBQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBnZXRDaGlsZElkKGludCBncm91cFBvc2l0aW9uLCBpbnQgY2hpbGRQb3NpdGlvbikgewotICAgICAgICByZXR1cm4gY2hpbGRQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBnZXRDb21iaW5lZEdyb3VwSWQobG9uZyBncm91cElkKSB7Ci0gICAgICAgIHJldHVybiBncm91cElkIDw8IDE2IHwgMHgwMDAwRkZGRjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBnZXRDb21iaW5lZENoaWxkSWQobG9uZyBncm91cElkLCBsb25nIGNoaWxkSWQpIHsKLSAgICAgICAgcmV0dXJuIGdyb3VwSWQgPDwgMTYgfCBjaGlsZElkOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzQ2hpbGRTZWxlY3RhYmxlKGludCBncm91cFBvc2l0aW9uLCBpbnQgY2hpbGRQb3NpdGlvbikgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkdyb3VwQ29sbGFwc2VkKGludCBncm91cFBvc2l0aW9uKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkdyb3VwRXhwYW5kZWQoaW50IGdyb3VwUG9zaXRpb24pIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRGF0YVNldE9ic2VydmVyKERhdGFTZXRPYnNlcnZlciBvYnNlcnZlcikgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdW5yZWdpc3RlckRhdGFTZXRPYnNlcnZlcihEYXRhU2V0T2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGhhc1N0YWJsZUlkcygpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gYXJlQWxsSXRlbXNFbmFibGVkKCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkgewotICAgICAgICByZXR1cm4gbUl0ZW1zLmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0tIEhldGVyb2dlbmVvdXNFeHBhbmRhYmxlTGlzdAotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRDaGlsZFR5cGUoaW50IGdyb3VwUG9zaXRpb24sIGludCBjaGlsZFBvc2l0aW9uKSB7Ci0gICAgICAgIHJldHVybiBnZXRDaGlsZEl0ZW0oZ3JvdXBQb3NpdGlvbiwgY2hpbGRQb3NpdGlvbikuZ2V0VHlwZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0Q2hpbGRUeXBlQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtQ2hpbGRyZW5UeXBlcy5zaXplKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRHcm91cFR5cGUoaW50IGdyb3VwUG9zaXRpb24pIHsKLSAgICAgICAgcmV0dXJuIG1JdGVtcy5nZXQoZ3JvdXBQb3NpdGlvbikuZ2V0VHlwZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0R3JvdXBUeXBlQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtR3JvdXBUeXBlcy5zaXplKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS91dGlsL0RlYnVnLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL3V0aWwvRGVidWcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJlYWI4NS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL3V0aWwvRGVidWcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UudXRpbDsKLQotcHVibGljIGNsYXNzIERlYnVnIHsKLQotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL3V0aWwvRHluYW1pY0lkTWFwLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL3V0aWwvRHluYW1pY0lkTWFwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZmFlOTUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS91dGlsL0R5bmFtaWNJZE1hcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS51dGlsOwotCi1pbXBvcnQgY29tLmFuZHJvaWQucmVzb3VyY2VzLlJlc291cmNlVHlwZTsKLWltcG9ydCBjb20uYW5kcm9pZC51dGlsLlBhaXI7Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1wdWJsaWMgY2xhc3MgRHluYW1pY0lkTWFwIHsKLQotICAgIHByaXZhdGUgZmluYWwgTWFwPFBhaXI8UmVzb3VyY2VUeXBlLCBTdHJpbmc+LCBJbnRlZ2VyPiBtRHluYW1pY0lkcyA9IG5ldyBIYXNoTWFwPFBhaXI8UmVzb3VyY2VUeXBlLCBTdHJpbmc+LCBJbnRlZ2VyPigpOwotICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8UGFpcjxSZXNvdXJjZVR5cGUsIFN0cmluZz4+IG1SZXZEeW5hbWljSWRzID0gbmV3IFNwYXJzZUFycmF5PFBhaXI8UmVzb3VyY2VUeXBlLCBTdHJpbmc+PigpOwotICAgIHByaXZhdGUgaW50IG1EeW5hbWljU2VlZDsKLQotICAgIHB1YmxpYyBEeW5hbWljSWRNYXAoaW50IHNlZWQpIHsKLSAgICAgICAgbUR5bmFtaWNTZWVkID0gc2VlZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXNldChpbnQgc2VlZCkgewotICAgICAgICBtRHluYW1pY0lkcy5jbGVhcigpOwotICAgICAgICBtUmV2RHluYW1pY0lkcy5jbGVhcigpOwotICAgICAgICBtRHluYW1pY1NlZWQgPSBzZWVkOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBkeW5hbWljIGludGVnZXIgZm9yIHRoZSBnaXZlbiByZXNvdXJjZSB0eXBlL25hbWUsIGNyZWF0aW5nIGl0IGlmIGl0IGRvZXNuJ3QKLSAgICAgKiBhbHJlYWR5IGV4aXN0LgotICAgICAqCi0gICAgICogQHBhcmFtIHR5cGUgdGhlIHR5cGUgb2YgdGhlIHJlc291cmNlCi0gICAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybiBhbiBpbnRlZ2VyLgotICAgICAqLwotICAgIHB1YmxpYyBJbnRlZ2VyIGdldElkKFJlc291cmNlVHlwZSB0eXBlLCBTdHJpbmcgbmFtZSkgewotICAgICAgICByZXR1cm4gZ2V0SWQoUGFpci5vZih0eXBlLCBuYW1lKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIGR5bmFtaWMgaW50ZWdlciBmb3IgdGhlIGdpdmVuIHJlc291cmNlIHR5cGUvbmFtZSwgY3JlYXRpbmcgaXQgaWYgaXQgZG9lc24ndAotICAgICAqIGFscmVhZHkgZXhpc3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVzb3VyY2UgdGhlIHR5cGUvbmFtZSBvZiB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuIGFuIGludGVnZXIuCi0gICAgICovCi0gICAgcHVibGljIEludGVnZXIgZ2V0SWQoUGFpcjxSZXNvdXJjZVR5cGUsIFN0cmluZz4gcmVzb3VyY2UpIHsKLSAgICAgICAgSW50ZWdlciB2YWx1ZSA9IG1EeW5hbWljSWRzLmdldChyZXNvdXJjZSk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IEludGVnZXIudmFsdWVPZigrK21EeW5hbWljU2VlZCk7Ci0gICAgICAgICAgICBtRHluYW1pY0lkcy5wdXQocmVzb3VyY2UsIHZhbHVlKTsKLSAgICAgICAgICAgIG1SZXZEeW5hbWljSWRzLnB1dCh2YWx1ZSwgcmVzb3VyY2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHB1YmxpYyBQYWlyPFJlc291cmNlVHlwZSwgU3RyaW5nPiByZXNvbHZlSWQoaW50IGlkKSB7Ci0gICAgICAgIHJldHVybiBtUmV2RHluYW1pY0lkcy5nZXQoaWQpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvdXRpbC9TcGFyc2VXZWFrQXJyYXkuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvdXRpbC9TcGFyc2VXZWFrQXJyYXkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQwYzljZS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL3V0aWwvU3BhcnNlV2Vha0FycmF5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS51dGlsOwotCi0KLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFycmF5VXRpbHM7Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7Ci0KLS8qKgotICogVGhpcyBpcyBhIGN1c3RvbSB7QGxpbmsgU3BhcnNlQXJyYXl9IHRoYXQgdXNlcyB7QGxpbmsgV2Vha1JlZmVyZW5jZX0gYXJvdW5kIHRoZSBvYmplY3RzIGFkZGVkCi0gKiB0byBpdC4gV2hlbiB0aGUgYXJyYXkgaXMgY29tcGFjdGVkLCBub3Qgb25seSBkZWxldGVkIGluZGljZXMgYnV0IGFsc28gZW1wdHkgcmVmZXJlbmNlcwotICogYXJlIHJlbW92ZWQsIG1ha2luZyB0aGUgYXJyYXkgZWZmaWNpZW50IGF0IHJlbW92aW5nIHJlZmVyZW5jZXMgdGhhdCB3ZXJlIHJlY2xhaW1lZC4KLSAqCi0gKiBUaGUgY29kZSBpcyB0YWtlbiBmcm9tIHtAbGluayBTcGFyc2VBcnJheX0gZGlyZWN0bHkgYW5kIGFkYXB0ZWQgdG8gdXNlIHdlYWsgcmVmZXJlbmNlcy4KLSAqCi0gKiBCZWNhdXNlIG91ciB1c2FnZSBtZWFucyB0aGF0IHdlIG5ldmVyIGFjdHVhbGx5IGNhbGwge0BsaW5rICNyZW1vdmUoaW50KX0gb3Ige0BsaW5rICNkZWxldGUoaW50KX0sCi0gKiB3ZSBtdXN0IG1hbnVhbGx5IGNoZWNrIGlmIHRoZXJlIGFyZSByZWNsYWltZWQgcmVmZXJlbmNlcyB0byB0cmlnZ2VyIGFuIGludGVybmFsIGNvbXBhY3Qgc3RlcAotICogKHdoaWNoIGlzIG5vcm1hbGx5IG9ubHkgdHJpZ2dlcmVkIHdoZW4gYW4gaXRlbSBpcyBtYW51YWxseSByZW1vdmVkKS4KLSAqCi0gKiBTcGFyc2VBcnJheXMgbWFwIGludGVnZXJzIHRvIE9iamVjdHMuICBVbmxpa2UgYSBub3JtYWwgYXJyYXkgb2YgT2JqZWN0cywKLSAqIHRoZXJlIGNhbiBiZSBnYXBzIGluIHRoZSBpbmRpY2VzLiAgSXQgaXMgaW50ZW5kZWQgdG8gYmUgbW9yZSBlZmZpY2llbnQKLSAqIHRoYW4gdXNpbmcgYSBIYXNoTWFwIHRvIG1hcCBJbnRlZ2VycyB0byBPYmplY3RzLgotICovCi1AU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLXB1YmxpYyBjbGFzcyBTcGFyc2VXZWFrQXJyYXk8RT4gewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0IERFTEVURURfUkVGID0gbmV3IE9iamVjdCgpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFdlYWtSZWZlcmVuY2U8Pz4gREVMRVRFRCA9IG5ldyBXZWFrUmVmZXJlbmNlKERFTEVURURfUkVGKTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbUdhcmJhZ2UgPSBmYWxzZTsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgU3BhcnNlQXJyYXkgY29udGFpbmluZyBubyBtYXBwaW5ncy4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3BhcnNlV2Vha0FycmF5KCkgewotICAgICAgICB0aGlzKDEwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IFNwYXJzZUFycmF5IGNvbnRhaW5pbmcgbm8gbWFwcGluZ3MgdGhhdCB3aWxsIG5vdAotICAgICAqIHJlcXVpcmUgYW55IGFkZGl0aW9uYWwgbWVtb3J5IGFsbG9jYXRpb24gdG8gc3RvcmUgdGhlIHNwZWNpZmllZAotICAgICAqIG51bWJlciBvZiBtYXBwaW5ncy4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3BhcnNlV2Vha0FycmF5KGludCBpbml0aWFsQ2FwYWNpdHkpIHsKLSAgICAgICAgaW5pdGlhbENhcGFjaXR5ID0gQXJyYXlVdGlscy5pZGVhbEludEFycmF5U2l6ZShpbml0aWFsQ2FwYWNpdHkpOwotCi0gICAgICAgIG1LZXlzID0gbmV3IGludFtpbml0aWFsQ2FwYWNpdHldOwotICAgICAgICBtVmFsdWVzID0gbmV3IFdlYWtSZWZlcmVuY2VbaW5pdGlhbENhcGFjaXR5XTsKLSAgICAgICAgbVNpemUgPSAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIE9iamVjdCBtYXBwZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGtleSwgb3IgPGNvZGU+bnVsbDwvY29kZT4KLSAgICAgKiBpZiBubyBzdWNoIG1hcHBpbmcgaGFzIGJlZW4gbWFkZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgRSBnZXQoaW50IGtleSkgewotICAgICAgICByZXR1cm4gZ2V0KGtleSwgbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgT2JqZWN0IG1hcHBlZCBmcm9tIHRoZSBzcGVjaWZpZWQga2V5LCBvciB0aGUgc3BlY2lmaWVkIE9iamVjdAotICAgICAqIGlmIG5vIHN1Y2ggbWFwcGluZyBoYXMgYmVlbiBtYWRlLgotICAgICAqLwotICAgIHB1YmxpYyBFIGdldChpbnQga2V5LCBFIHZhbHVlSWZLZXlOb3RGb3VuZCkgewotICAgICAgICBpbnQgaSA9IGJpbmFyeVNlYXJjaChtS2V5cywgMCwgbVNpemUsIGtleSk7Ci0KLSAgICAgICAgaWYgKGkgPCAwIHx8IG1WYWx1ZXNbaV0gPT0gREVMRVRFRCB8fCBtVmFsdWVzW2ldLmdldCgpID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZUlmS2V5Tm90Rm91bmQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gKEUpIG1WYWx1ZXNbaV0uZ2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdmVzIHRoZSBtYXBwaW5nIGZyb20gdGhlIHNwZWNpZmllZCBrZXksIGlmIHRoZXJlIHdhcyBhbnkuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGVsZXRlKGludCBrZXkpIHsKLSAgICAgICAgaW50IGkgPSBiaW5hcnlTZWFyY2gobUtleXMsIDAsIG1TaXplLCBrZXkpOwotCi0gICAgICAgIGlmIChpID49IDApIHsKLSAgICAgICAgICAgIGlmIChtVmFsdWVzW2ldICE9IERFTEVURUQpIHsKLSAgICAgICAgICAgICAgICBtVmFsdWVzW2ldID0gREVMRVRFRDsKLSAgICAgICAgICAgICAgICBtR2FyYmFnZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBbGlhcyBmb3Ige0BsaW5rICNkZWxldGUoaW50KX0uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlKGludCBrZXkpIHsKLSAgICAgICAgZGVsZXRlKGtleSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlcyB0aGUgbWFwcGluZyBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUF0KGludCBpbmRleCkgewotICAgICAgICBpZiAobVZhbHVlc1tpbmRleF0gIT0gREVMRVRFRCkgewotICAgICAgICAgICAgbVZhbHVlc1tpbmRleF0gPSBERUxFVEVEOwotICAgICAgICAgICAgbUdhcmJhZ2UgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGdjKCkgewotICAgICAgICBpbnQgbiA9IG1TaXplOwotICAgICAgICBpbnQgbyA9IDA7Ci0gICAgICAgIGludFtdIGtleXMgPSBtS2V5czsKLSAgICAgICAgV2Vha1JlZmVyZW5jZTw/PltdIHZhbHVlcyA9IG1WYWx1ZXM7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgICAgIFdlYWtSZWZlcmVuY2U8Pz4gdmFsID0gdmFsdWVzW2ldOwotCi0gICAgICAgICAgICAvLyBEb24ndCBrZWVwIGFueSBub24gREVMRVRFRCB2YWx1ZXMsIGJ1dCBvbmx5IHRoZSBvbmUgdGhhdCBzdGlsbCBoYXZlIGEgdmFsaWQKLSAgICAgICAgICAgIC8vIHJlZmVyZW5jZS4KLSAgICAgICAgICAgIGlmICh2YWwgIT0gREVMRVRFRCAmJiB2YWwuZ2V0KCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmIChpICE9IG8pIHsKLSAgICAgICAgICAgICAgICAgICAga2V5c1tvXSA9IGtleXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1tvXSA9IHZhbDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBvKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtR2FyYmFnZSA9IGZhbHNlOwotICAgICAgICBtU2l6ZSA9IG87Ci0KLSAgICAgICAgaW50IG5ld1NpemUgPSBBcnJheVV0aWxzLmlkZWFsSW50QXJyYXlTaXplKG1TaXplKTsKLSAgICAgICAgaWYgKG5ld1NpemUgPCBtS2V5cy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGludFtdIG5rZXlzID0gbmV3IGludFtuZXdTaXplXTsKLSAgICAgICAgICAgIFdlYWtSZWZlcmVuY2U8Pz5bXSBudmFsdWVzID0gbmV3IFdlYWtSZWZlcmVuY2VbbmV3U2l6ZV07Ci0KLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobUtleXMsIDAsIG5rZXlzLCAwLCBuZXdTaXplKTsKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobVZhbHVlcywgMCwgbnZhbHVlcywgMCwgbmV3U2l6ZSk7Ci0KLSAgICAgICAgICAgIG1LZXlzID0gbmtleXM7Ci0gICAgICAgICAgICBtVmFsdWVzID0gbnZhbHVlczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZHMgYSBtYXBwaW5nIGZyb20gdGhlIHNwZWNpZmllZCBrZXkgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSwKLSAgICAgKiByZXBsYWNpbmcgdGhlIHByZXZpb3VzIG1hcHBpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIGtleSBpZiB0aGVyZQotICAgICAqIHdhcyBvbmUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcHV0KGludCBrZXksIEUgdmFsdWUpIHsKLSAgICAgICAgaW50IGkgPSBiaW5hcnlTZWFyY2gobUtleXMsIDAsIG1TaXplLCBrZXkpOwotCi0gICAgICAgIGlmIChpID49IDApIHsKLSAgICAgICAgICAgIG1WYWx1ZXNbaV0gPSBuZXcgV2Vha1JlZmVyZW5jZSh2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpID0gfmk7Ci0KLSAgICAgICAgICAgIGlmIChpIDwgbVNpemUgJiYgKG1WYWx1ZXNbaV0gPT0gREVMRVRFRCB8fCBtVmFsdWVzW2ldLmdldCgpID09IG51bGwpKSB7Ci0gICAgICAgICAgICAgICAgbUtleXNbaV0gPSBrZXk7Ci0gICAgICAgICAgICAgICAgbVZhbHVlc1tpXSA9IG5ldyBXZWFrUmVmZXJlbmNlKHZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtU2l6ZSA+PSBtS2V5cy5sZW5ndGggJiYgKG1HYXJiYWdlIHx8IGhhc1JlY2xhaW1lZFJlZnMoKSkpIHsKLSAgICAgICAgICAgICAgICBnYygpOwotCi0gICAgICAgICAgICAgICAgLy8gU2VhcmNoIGFnYWluIGJlY2F1c2UgaW5kaWNlcyBtYXkgaGF2ZSBjaGFuZ2VkLgotICAgICAgICAgICAgICAgIGkgPSB+YmluYXJ5U2VhcmNoKG1LZXlzLCAwLCBtU2l6ZSwga2V5KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1TaXplID49IG1LZXlzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIGludCBuID0gQXJyYXlVdGlscy5pZGVhbEludEFycmF5U2l6ZShtU2l6ZSArIDEpOwotCi0gICAgICAgICAgICAgICAgaW50W10gbmtleXMgPSBuZXcgaW50W25dOwotICAgICAgICAgICAgICAgIFdlYWtSZWZlcmVuY2U8Pz5bXSBudmFsdWVzID0gbmV3IFdlYWtSZWZlcmVuY2Vbbl07Ci0KLSAgICAgICAgICAgICAgICAvLyBMb2cuZSgiU3BhcnNlQXJyYXkiLCAiZ3JvdyAiICsgbUtleXMubGVuZ3RoICsgIiB0byAiICsgbik7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtS2V5cywgMCwgbmtleXMsIDAsIG1LZXlzLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtVmFsdWVzLCAwLCBudmFsdWVzLCAwLCBtVmFsdWVzLmxlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICBtS2V5cyA9IG5rZXlzOwotICAgICAgICAgICAgICAgIG1WYWx1ZXMgPSBudmFsdWVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobVNpemUgLSBpICE9IDApIHsKLSAgICAgICAgICAgICAgICAvLyBMb2cuZSgiU3BhcnNlQXJyYXkiLCAibW92ZSAiICsgKG1TaXplIC0gaSkpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobUtleXMsIGksIG1LZXlzLCBpICsgMSwgbVNpemUgLSBpKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1WYWx1ZXMsIGksIG1WYWx1ZXMsIGkgKyAxLCBtU2l6ZSAtIGkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtS2V5c1tpXSA9IGtleTsKLSAgICAgICAgICAgIG1WYWx1ZXNbaV0gPSBuZXcgV2Vha1JlZmVyZW5jZSh2YWx1ZSk7Ci0gICAgICAgICAgICBtU2l6ZSsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGtleS12YWx1ZSBtYXBwaW5ncyB0aGF0IHRoaXMgU3BhcnNlQXJyYXkKLSAgICAgKiBjdXJyZW50bHkgc3RvcmVzLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgc2l6ZSgpIHsKLSAgICAgICAgaWYgKG1HYXJiYWdlKSB7Ci0gICAgICAgICAgICBnYygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1TaXplOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdpdmVuIGFuIGluZGV4IGluIHRoZSByYW5nZSA8Y29kZT4wLi4uc2l6ZSgpLTE8L2NvZGU+LCByZXR1cm5zCi0gICAgICogdGhlIGtleSBmcm9tIHRoZSA8Y29kZT5pbmRleDwvY29kZT50aCBrZXktdmFsdWUgbWFwcGluZyB0aGF0IHRoaXMKLSAgICAgKiBTcGFyc2VBcnJheSBzdG9yZXMuCi0gICAgICovCi0gICAgcHVibGljIGludCBrZXlBdChpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYgKG1HYXJiYWdlKSB7Ci0gICAgICAgICAgICBnYygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1LZXlzW2luZGV4XTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHaXZlbiBhbiBpbmRleCBpbiB0aGUgcmFuZ2UgPGNvZGU+MC4uLnNpemUoKS0xPC9jb2RlPiwgcmV0dXJucwotICAgICAqIHRoZSB2YWx1ZSBmcm9tIHRoZSA8Y29kZT5pbmRleDwvY29kZT50aCBrZXktdmFsdWUgbWFwcGluZyB0aGF0IHRoaXMKLSAgICAgKiBTcGFyc2VBcnJheSBzdG9yZXMuCi0gICAgICovCi0gICAgcHVibGljIEUgdmFsdWVBdChpbnQgaW5kZXgpIHsKLSAgICAgICAgaWYgKG1HYXJiYWdlKSB7Ci0gICAgICAgICAgICBnYygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIChFKSBtVmFsdWVzW2luZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHaXZlbiBhbiBpbmRleCBpbiB0aGUgcmFuZ2UgPGNvZGU+MC4uLnNpemUoKS0xPC9jb2RlPiwgc2V0cyBhIG5ldwotICAgICAqIHZhbHVlIGZvciB0aGUgPGNvZGU+aW5kZXg8L2NvZGU+dGgga2V5LXZhbHVlIG1hcHBpbmcgdGhhdCB0aGlzCi0gICAgICogU3BhcnNlQXJyYXkgc3RvcmVzLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlQXQoaW50IGluZGV4LCBFIHZhbHVlKSB7Ci0gICAgICAgIGlmIChtR2FyYmFnZSkgewotICAgICAgICAgICAgZ2MoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WYWx1ZXNbaW5kZXhdID0gbmV3IFdlYWtSZWZlcmVuY2UodmFsdWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGluZGV4IGZvciB3aGljaCB7QGxpbmsgI2tleUF0fSB3b3VsZCByZXR1cm4gdGhlCi0gICAgICogc3BlY2lmaWVkIGtleSwgb3IgYSBuZWdhdGl2ZSBudW1iZXIgaWYgdGhlIHNwZWNpZmllZAotICAgICAqIGtleSBpcyBub3QgbWFwcGVkLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgaW5kZXhPZktleShpbnQga2V5KSB7Ci0gICAgICAgIGlmIChtR2FyYmFnZSkgewotICAgICAgICAgICAgZ2MoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBiaW5hcnlTZWFyY2gobUtleXMsIDAsIG1TaXplLCBrZXkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gaW5kZXggZm9yIHdoaWNoIHtAbGluayAjdmFsdWVBdH0gd291bGQgcmV0dXJuIHRoZQotICAgICAqIHNwZWNpZmllZCBrZXksIG9yIGEgbmVnYXRpdmUgbnVtYmVyIGlmIG5vIGtleXMgbWFwIHRvIHRoZQotICAgICAqIHNwZWNpZmllZCB2YWx1ZS4KLSAgICAgKiBCZXdhcmUgdGhhdCB0aGlzIGlzIGEgbGluZWFyIHNlYXJjaCwgdW5saWtlIGxvb2t1cHMgYnkga2V5LAotICAgICAqIGFuZCB0aGF0IG11bHRpcGxlIGtleXMgY2FuIG1hcCB0byB0aGUgc2FtZSB2YWx1ZSBhbmQgdGhpcyB3aWxsCi0gICAgICogZmluZCBvbmx5IG9uZSBvZiB0aGVtLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgaW5kZXhPZlZhbHVlKEUgdmFsdWUpIHsKLSAgICAgICAgaWYgKG1HYXJiYWdlKSB7Ci0gICAgICAgICAgICBnYygpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtU2l6ZTsgaSsrKQotICAgICAgICAgICAgaWYgKG1WYWx1ZXNbaV0uZ2V0KCkgPT0gdmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBtYXBwaW5ncyBmcm9tIHRoaXMgU3BhcnNlQXJyYXkuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXIoKSB7Ci0gICAgICAgIGludCBuID0gbVNpemU7Ci0gICAgICAgIFdlYWtSZWZlcmVuY2U8Pz5bXSB2YWx1ZXMgPSBtVmFsdWVzOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgICAgICB2YWx1ZXNbaV0gPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgbVNpemUgPSAwOwotICAgICAgICBtR2FyYmFnZSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFB1dHMgYSBrZXkvdmFsdWUgcGFpciBpbnRvIHRoZSBhcnJheSwgb3B0aW1pemluZyBmb3IgdGhlIGNhc2Ugd2hlcmUKLSAgICAgKiB0aGUga2V5IGlzIGdyZWF0ZXIgdGhhbiBhbGwgZXhpc3Rpbmcga2V5cyBpbiB0aGUgYXJyYXkuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYXBwZW5kKGludCBrZXksIEUgdmFsdWUpIHsKLSAgICAgICAgaWYgKG1TaXplICE9IDAgJiYga2V5IDw9IG1LZXlzW21TaXplIC0gMV0pIHsKLSAgICAgICAgICAgIHB1dChrZXksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtU2l6ZSA+PSBtS2V5cy5sZW5ndGggJiYgKG1HYXJiYWdlIHx8IGhhc1JlY2xhaW1lZFJlZnMoKSkpIHsKLSAgICAgICAgICAgIGdjKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgcG9zID0gbVNpemU7Ci0gICAgICAgIGlmIChwb3MgPj0gbUtleXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBpbnQgbiA9IEFycmF5VXRpbHMuaWRlYWxJbnRBcnJheVNpemUocG9zICsgMSk7Ci0KLSAgICAgICAgICAgIGludFtdIG5rZXlzID0gbmV3IGludFtuXTsKLSAgICAgICAgICAgIFdlYWtSZWZlcmVuY2U8Pz5bXSBudmFsdWVzID0gbmV3IFdlYWtSZWZlcmVuY2Vbbl07Ci0KLSAgICAgICAgICAgIC8vIExvZy5lKCJTcGFyc2VBcnJheSIsICJncm93ICIgKyBtS2V5cy5sZW5ndGggKyAiIHRvICIgKyBuKTsKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobUtleXMsIDAsIG5rZXlzLCAwLCBtS2V5cy5sZW5ndGgpOwotICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShtVmFsdWVzLCAwLCBudmFsdWVzLCAwLCBtVmFsdWVzLmxlbmd0aCk7Ci0KLSAgICAgICAgICAgIG1LZXlzID0gbmtleXM7Ci0gICAgICAgICAgICBtVmFsdWVzID0gbnZhbHVlczsKLSAgICAgICAgfQotCi0gICAgICAgIG1LZXlzW3Bvc10gPSBrZXk7Ci0gICAgICAgIG1WYWx1ZXNbcG9zXSA9IG5ldyBXZWFrUmVmZXJlbmNlKHZhbHVlKTsKLSAgICAgICAgbVNpemUgPSBwb3MgKyAxOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBoYXNSZWNsYWltZWRSZWZzKCkgewotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBtU2l6ZSA7IGkrKykgewotICAgICAgICAgICAgaWYgKG1WYWx1ZXNbaV0uZ2V0KCkgPT0gbnVsbCkgeyAvLyBERUxFVEVELmdldCgpIG5ldmVyIHJldHVybnMgbnVsbC4KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgYmluYXJ5U2VhcmNoKGludFtdIGEsIGludCBzdGFydCwgaW50IGxlbiwgaW50IGtleSkgewotICAgICAgICBpbnQgaGlnaCA9IHN0YXJ0ICsgbGVuLCBsb3cgPSBzdGFydCAtIDEsIGd1ZXNzOwotCi0gICAgICAgIHdoaWxlIChoaWdoIC0gbG93ID4gMSkgewotICAgICAgICAgICAgZ3Vlc3MgPSAoaGlnaCArIGxvdykgLyAyOwotCi0gICAgICAgICAgICBpZiAoYVtndWVzc10gPCBrZXkpCi0gICAgICAgICAgICAgICAgbG93ID0gZ3Vlc3M7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaGlnaCA9IGd1ZXNzOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhpZ2ggPT0gc3RhcnQgKyBsZW4pCi0gICAgICAgICAgICByZXR1cm4gfihzdGFydCArIGxlbik7Ci0gICAgICAgIGVsc2UgaWYgKGFbaGlnaF0gPT0ga2V5KQotICAgICAgICAgICAgcmV0dXJuIGhpZ2g7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiB+aGlnaDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludFtdIG1LZXlzOwotICAgIHByaXZhdGUgV2Vha1JlZmVyZW5jZTw/PltdIG1WYWx1ZXM7Ci0gICAgcHJpdmF0ZSBpbnQgbVNpemU7Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9NYXBWaWV3LmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vZ29vZ2xlL2FuZHJvaWQvbWFwcy9NYXBWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMDEzYmIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2dvb2dsZS9hbmRyb2lkL21hcHMvTWFwVmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5nb29nbGUuYW5kcm9pZC5tYXBzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5Nb2NrVmlldzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci0KLS8qKgotICogTW9jayB2ZXJzaW9uIG9mIHRoZSBNYXBWaWV3LgotICogT25seSBub24gb3ZlcnJpZGUgcHVibGljIG1ldGhvZHMgZnJvbSB0aGUgcmVhbCBNYXBWaWV3IGhhdmUgYmVlbiBhZGRlZCBpbiB0aGVyZS4KLSAqIE1ldGhvZHMgdGhhdCB0YWtlIGFuIHVua25vd24gY2xhc3MgYXMgcGFyYW1ldGVyIG9yIGFzIHJldHVybiBvYmplY3QsIGhhdmUgYmVlbiByZW1vdmVkIGZvciBub3cuCi0gKiAKLSAqIFRPRE86IGdlbmVyYXRlIGF1dG9tYXRpY2FsbHkuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTWFwVmlldyBleHRlbmRzIE1vY2tWaWV3IHsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIG5ldyBXZWJWaWV3IHdpdGggYSBDb250ZXh0IG9iamVjdC4KLSAgICAgKiBAcGFyYW0gY29udGV4dCBBIENvbnRleHQgb2JqZWN0IHVzZWQgdG8gYWNjZXNzIGFwcGxpY2F0aW9uIGFzc2V0cy4KLSAgICAgKi8KLSAgICBwdWJsaWMgTWFwVmlldyhDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgV2ViVmlldyB3aXRoIGxheW91dCBwYXJhbWV0ZXJzLgotICAgICAqIEBwYXJhbSBjb250ZXh0IEEgQ29udGV4dCBvYmplY3QgdXNlZCB0byBhY2Nlc3MgYXBwbGljYXRpb24gYXNzZXRzLgotICAgICAqIEBwYXJhbSBhdHRycyBBbiBBdHRyaWJ1dGVTZXQgcGFzc2VkIHRvIG91ciBwYXJlbnQuCi0gICAgICovCi0gICAgcHVibGljIE1hcFZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgdGhpcyhjb250ZXh0LCBhdHRycywgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hdHRyLm1hcFZpZXdTdHlsZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0IGEgbmV3IFdlYlZpZXcgd2l0aCBsYXlvdXQgcGFyYW1ldGVycyBhbmQgYSBkZWZhdWx0IHN0eWxlLgotICAgICAqIEBwYXJhbSBjb250ZXh0IEEgQ29udGV4dCBvYmplY3QgdXNlZCB0byBhY2Nlc3MgYXBwbGljYXRpb24gYXNzZXRzLgotICAgICAqIEBwYXJhbSBhdHRycyBBbiBBdHRyaWJ1dGVTZXQgcGFzc2VkIHRvIG91ciBwYXJlbnQuCi0gICAgICogQHBhcmFtIGRlZlN0eWxlIFRoZSBkZWZhdWx0IHN0eWxlIHJlc291cmNlIElELgotICAgICAqLwotICAgIHB1YmxpYyBNYXBWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGUpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gU1RBUlQgRkFLRSBQVUJMSUMgTUVUSE9EUwotICAgIAotICAgIHB1YmxpYyB2b2lkIGRpc3BsYXlab29tQ29udHJvbHMoYm9vbGVhbiB0YWtlRm9jdXMpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBjYW5Db3ZlckNlbnRlcigpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHByZUxvYWQoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRab29tTGV2ZWwoKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNhdGVsbGl0ZShib29sZWFuIG9uKSB7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNTYXRlbGxpdGUoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUcmFmZmljKGJvb2xlYW4gb24pIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1RyYWZmaWMoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTdHJlZXRWaWV3KGJvb2xlYW4gb24pIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N0cmVldFZpZXcoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldExhdGl0dWRlU3BhbigpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRMb25naXR1ZGVTcGFuKCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldE1heFpvb21MZXZlbCgpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25TYXZlSW5zdGFuY2VTdGF0ZShCdW5kbGUgc3RhdGUpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBvblJlc3RvcmVJbnN0YW5jZVN0YXRlKEJ1bmRsZSBzdGF0ZSkgewotICAgIH0KLQotICAgIHB1YmxpYyBWaWV3IGdldFpvb21Db250cm9scygpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvbGliY29yZS9pY3UvRGF0ZUludGVydmFsRm9ybWF0X0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9saWJjb3JlL2ljdS9EYXRlSW50ZXJ2YWxGb3JtYXRfRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk0YzIwNS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9saWJjb3JlL2ljdS9EYXRlSW50ZXJ2YWxGb3JtYXRfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGxpYmNvcmUuaWN1OwotCi1pbXBvcnQgamF2YS50ZXh0LkZpZWxkUG9zaXRpb247Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pZGUuY29tbW9uLnJlbmRlcmluZy5hcGkuTGF5b3V0TG9nOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuQnJpZGdlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2UuaW1wbC5EZWxlZ2F0ZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLkxheW91dGxpYkRlbGVnYXRlOwotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUludGVydmFsRm9ybWF0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuRGF0ZUludGVydmFsOwotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVGltZVpvbmU7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5VTG9jYWxlOwotCi1wdWJsaWMgY2xhc3MgRGF0ZUludGVydmFsRm9ybWF0X0RlbGVnYXRlIHsKLQotICAgIC8vIC0tLS0gZGVsZWdhdGUgbWFuYWdlciAtLS0tCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVsZWdhdGVNYW5hZ2VyPERhdGVJbnRlcnZhbEZvcm1hdF9EZWxlZ2F0ZT4gc01hbmFnZXIgPQotICAgICAgICAgICAgbmV3IERlbGVnYXRlTWFuYWdlcjxEYXRlSW50ZXJ2YWxGb3JtYXRfRGVsZWdhdGU+KERhdGVJbnRlcnZhbEZvcm1hdF9EZWxlZ2F0ZS5jbGFzcyk7Ci0KLSAgICAvLyAtLS0tIGRlbGVnYXRlIGRhdGEgLS0tLQotICAgIHByaXZhdGUgRGF0ZUludGVydmFsRm9ybWF0IG1Gb3JtYXQ7Ci0KLQotICAgIC8vIC0tLS0gbmF0aXZlIG1ldGhvZHMgLS0tLQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi9zdGF0aWMgU3RyaW5nIGZvcm1hdERhdGVJbnRlcnZhbChsb25nIGFkZHJlc3MsIGxvbmcgZnJvbURhdGUsIGxvbmcgdG9EYXRlKSB7Ci0gICAgICAgIERhdGVJbnRlcnZhbEZvcm1hdF9EZWxlZ2F0ZSBkZWxlZ2F0ZSA9IHNNYW5hZ2VyLmdldERlbGVnYXRlKChpbnQpYWRkcmVzcyk7Ci0gICAgICAgIGlmIChkZWxlZ2F0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19CUk9LRU4sCi0gICAgICAgICAgICAgICAgICAgICJVbmFibGUgZm9yIGZpbmQgbmF0aXZlIERhdGVJbnRlcnZhbEZvcm1hdCIsIG51bGwpOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgRGF0ZUludGVydmFsIGludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbChmcm9tRGF0ZSwgdG9EYXRlKTsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBGaWVsZFBvc2l0aW9uIHBvcyA9IG5ldyBGaWVsZFBvc2l0aW9uKDApOwotICAgICAgICBkZWxlZ2F0ZS5tRm9ybWF0LmZvcm1hdChpbnRlcnZhbCwgc2IsIHBvcyk7Ci0gICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBsb25nIGNyZWF0ZURhdGVJbnRlcnZhbEZvcm1hdChTdHJpbmcgc2tlbGV0b24sIFN0cmluZyBsb2NhbGVOYW1lLAotICAgICAgICAgICAgU3RyaW5nIHR6TmFtZSkgewotICAgICAgICBUaW1lWm9uZSBwcmV2RGVmYXVsdFR6ID0gVGltZVpvbmUuZ2V0RGVmYXVsdCgpOwotICAgICAgICBUaW1lWm9uZS5zZXREZWZhdWx0KFRpbWVab25lLmdldFRpbWVab25lKHR6TmFtZSkpOwotICAgICAgICBEYXRlSW50ZXJ2YWxGb3JtYXRfRGVsZWdhdGUgbmV3RGVsZWdhdGUgPSBuZXcgRGF0ZUludGVydmFsRm9ybWF0X0RlbGVnYXRlKCk7Ci0gICAgICAgIG5ld0RlbGVnYXRlLm1Gb3JtYXQgPQotICAgICAgICAgICAgICAgIERhdGVJbnRlcnZhbEZvcm1hdC5nZXRJbnN0YW5jZShza2VsZXRvbiwgbmV3IFVMb2NhbGUobG9jYWxlTmFtZSkpOwotICAgICAgICBUaW1lWm9uZS5zZXREZWZhdWx0KHByZXZEZWZhdWx0VHopOwotICAgICAgICByZXR1cm4gc01hbmFnZXIuYWRkTmV3RGVsZWdhdGUobmV3RGVsZWdhdGUpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIGRlc3Ryb3lEYXRlSW50ZXJ2YWxGb3JtYXQobG9uZyBhZGRyZXNzKSB7Ci0gICAgICAgIHNNYW5hZ2VyLnJlbW92ZUphdmFSZWZlcmVuY2VGb3IoKGludClhZGRyZXNzKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2xpYmNvcmUvaWN1L0lDVV9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvbGliY29yZS9pY3UvSUNVX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNDEwM2IuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvbGliY29yZS9pY3UvSUNVX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgbGliY29yZS5pY3U7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5EYXRlVGltZVBhdHRlcm5HZW5lcmF0b3I7Ci1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5VTG9jYWxlOwotCi1pbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKLQotLyoqCi0gKiBEZWxlZ2F0ZSBpbXBsZW1lbnRpbmcgdGhlIG5hdGl2ZSBtZXRob2RzIG9mIGxpYmNvcmUuaWN1LklDVQotICoKLSAqIFRocm91Z2ggdGhlIGxheW91dGxpYl9jcmVhdGUgdG9vbCwgdGhlIG9yaWdpbmFsIG5hdGl2ZSBtZXRob2RzIG9mIElDVSBoYXZlIGJlZW4gcmVwbGFjZWQKLSAqIGJ5IGNhbGxzIHRvIG1ldGhvZHMgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGlzIGRlbGVnYXRlIGNsYXNzLgotICoKLSAqLwotcHVibGljIGNsYXNzIElDVV9EZWxlZ2F0ZSB7Ci0KLSAgICAvLyAtLS0gSmF2YSBkZWxlZ2F0ZXMKLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmcgdG9Mb3dlckNhc2UoU3RyaW5nIHMsIFN0cmluZyBsb2NhbGVOYW1lKSB7Ci0gICAgICAgIHJldHVybiBzLnRvTG93ZXJDYXNlKCk7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZyB0b1VwcGVyQ2FzZShTdHJpbmcgcywgU3RyaW5nIGxvY2FsZU5hbWUpIHsKLSAgICAgICAgcmV0dXJuIHMudG9VcHBlckNhc2UoKTsKLSAgICB9Ci0KLSAgICAvLyAtLS0gTmF0aXZlIG1ldGhvZHMgYWNjZXNzaW5nIElDVSdzIGRhdGFiYXNlLgotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZyBnZXRCZXN0RGF0ZVRpbWVQYXR0ZXJuTmF0aXZlKFN0cmluZyBza2VsZXRvbiwgU3RyaW5nIGxvY2FsZU5hbWUpIHsKLSAgICAgICAgcmV0dXJuIERhdGVUaW1lUGF0dGVybkdlbmVyYXRvci5nZXRJbnN0YW5jZShuZXcgVUxvY2FsZShsb2NhbGVOYW1lKSkKLSAgICAgICAgICAgICAgICAuZ2V0QmVzdFBhdHRlcm4oc2tlbGV0b24pOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmcgZ2V0Q2xkclZlcnNpb24oKSB7Ci0gICAgICAgIHJldHVybiAiMjIuMS4xIjsgICAgICAvLyBUT0RPOiBjaGVjayB3aGF0IHRoZSByaWdodCB2YWx1ZSBzaG91bGQgYmUuCi0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZyBnZXRJY3VWZXJzaW9uKCkgewotICAgICAgICByZXR1cm4gInVua25vd25fbGF5b3V0bGliIjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIGdldFVuaWNvZGVWZXJzaW9uKCkgewotICAgICAgICByZXR1cm4gIjUuMiI7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZ1tdIGdldEF2YWlsYWJsZUJyZWFrSXRlcmF0b3JMb2NhbGVzTmF0aXZlKCkgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nW10gZ2V0QXZhaWxhYmxlQ2FsZW5kYXJMb2NhbGVzTmF0aXZlKCkgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nW10gZ2V0QXZhaWxhYmxlQ29sbGF0b3JMb2NhbGVzTmF0aXZlKCkgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nW10gZ2V0QXZhaWxhYmxlRGF0ZUZvcm1hdExvY2FsZXNOYXRpdmUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmdbXSBnZXRBdmFpbGFibGVMb2NhbGVzTmF0aXZlKCkgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nW10gZ2V0QXZhaWxhYmxlTnVtYmVyRm9ybWF0TG9jYWxlc05hdGl2ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZ1tdIGdldEF2YWlsYWJsZUN1cnJlbmN5Q29kZXMoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmcgZ2V0Q3VycmVuY3lDb2RlKFN0cmluZyBsb2NhbGUpIHsKLSAgICAgICAgcmV0dXJuICIiOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmcgZ2V0Q3VycmVuY3lEaXNwbGF5TmFtZShTdHJpbmcgbG9jYWxlLCBTdHJpbmcgY3VycmVuY3lDb2RlKSB7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgaW50IGdldEN1cnJlbmN5RnJhY3Rpb25EaWdpdHMoU3RyaW5nIGN1cnJlbmN5Q29kZSkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIGdldEN1cnJlbmN5U3ltYm9sKFN0cmluZyBsb2NhbGUsIFN0cmluZyBjdXJyZW5jeUNvZGUpIHsKLSAgICAgICAgcmV0dXJuICIiOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBTdHJpbmcgZ2V0RGlzcGxheUNvdW50cnlOYXRpdmUoU3RyaW5nIGNvdW50cnlDb2RlLCBTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIGdldERpc3BsYXlMYW5ndWFnZU5hdGl2ZShTdHJpbmcgbGFuZ3VhZ2VDb2RlLCBTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIGdldERpc3BsYXlWYXJpYW50TmF0aXZlKFN0cmluZyB2YXJpYW50Q29kZSwgU3RyaW5nIGxvY2FsZSkgewotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZyBnZXRJU08zQ291bnRyeU5hdGl2ZShTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIGdldElTTzNMYW5ndWFnZU5hdGl2ZShTdHJpbmcgbG9jYWxlKSB7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nIGFkZExpa2VseVN1YnRhZ3MoU3RyaW5nIGxvY2FsZSkgewotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZyBnZXRTY3JpcHQoU3RyaW5nIGxvY2FsZSkgewotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgQExheW91dGxpYkRlbGVnYXRlCi0gICAgLypwYWNrYWdlKi8gc3RhdGljIFN0cmluZ1tdIGdldElTT0xhbmd1YWdlc05hdGl2ZSgpIHsKLSAgICAgICAgcmV0dXJuIExvY2FsZS5nZXRJU09MYW5ndWFnZXMoKTsKLSAgICB9Ci0KLSAgICBATGF5b3V0bGliRGVsZWdhdGUKLSAgICAvKnBhY2thZ2UqLyBzdGF0aWMgU3RyaW5nW10gZ2V0SVNPQ291bnRyaWVzTmF0aXZlKCkgewotICAgICAgICByZXR1cm4gTG9jYWxlLmdldElTT0NvdW50cmllcygpOwotICAgIH0KLQotICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQotICAgIC8qcGFja2FnZSovIHN0YXRpYyBib29sZWFuIGluaXRMb2NhbGVEYXRhTmF0aXZlKFN0cmluZyBsb2NhbGUsIExvY2FsZURhdGEgcmVzdWx0KSB7Ci0KLSAgICAgICAgLy8gVXNlZCBieSBDYWxlbmRhci4KLSAgICAgICAgcmVzdWx0LmZpcnN0RGF5T2ZXZWVrID0gSW50ZWdlci52YWx1ZU9mKDEpOwotICAgICAgICByZXN1bHQubWluaW1hbERheXNJbkZpcnN0V2VlayA9IEludGVnZXIudmFsdWVPZigxKTsKLQotICAgICAgICAvLyBVc2VkIGJ5IERhdGVGb3JtYXRTeW1ib2xzLgotICAgICAgICByZXN1bHQuYW1QbSA9IG5ldyBTdHJpbmdbXSB7ICJBTSIsICJQTSIgfTsKLSAgICAgICAgcmVzdWx0LmVyYXMgPSBuZXcgU3RyaW5nW10geyAiQkMiLCAiQUQiIH07Ci0KLSAgICAgICAgcmVzdWx0LmxvbmdNb250aE5hbWVzID0gbmV3IFN0cmluZ1tdIHsgIkphbnVhcnkiLCAiRmVicnVhcnkiLCAiTWFyY2giLCAiQXByaWwiLCAiTWF5IiwKLSAgICAgICAgICAgICAgICAiSnVuZSIsICJKdWx5IiwgIkF1Z3VzdCIsICJTZXB0ZW1iZXIiLCAiT2N0b2JlciIsICJOb3ZlbWJlciIsICJEZWNlbWJlciIgfTsKLSAgICAgICAgcmVzdWx0LnNob3J0TW9udGhOYW1lcyA9IG5ldyBTdHJpbmdbXSB7ICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwKLSAgICAgICAgICAgICAgICAiSnVuIiwgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIiB9OwotICAgICAgICByZXN1bHQubG9uZ1N0YW5kQWxvbmVNb250aE5hbWVzID0gcmVzdWx0LmxvbmdNb250aE5hbWVzOwotICAgICAgICByZXN1bHQuc2hvcnRTdGFuZEFsb25lTW9udGhOYW1lcyA9IHJlc3VsdC5zaG9ydE1vbnRoTmFtZXM7Ci0KLSAgICAgICAgLy8gVGhlIHBsYXRmb3JtIGNvZGUgZXhwZWN0cyB0aGlzIHRvIGJlZ2luIGF0IGluZGV4IDEsIHJhdGhlciB0aGFuIDAuIEl0IG1hcHMgaXQgZGlyZWN0bHkgdG8KLSAgICAgICAgLy8gdGhlIGNvbnN0YW50cyBmcm9tIGphdmEudXRpbC5DYWxlbmRhci48d2Vla2RheT4KLSAgICAgICAgcmVzdWx0LmxvbmdXZWVrZGF5TmFtZXMgPSBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICAgICIiLCAiU3VuZGF5IiwgIk1vbmRheSIgLCJUdWVzZGF5IiwgIldlZG5lc2RheSIsICJUaHVyc2RheSIsICJGcmlkYXkiLCAiU2F0dXJkYXkiIH07Ci0gICAgICAgIHJlc3VsdC5zaG9ydFdlZWtkYXlOYW1lcyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgICAgIiIsICJTdW4iLCAiTW9uIiAsIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiIH07Ci0gICAgICAgIHJlc3VsdC50aW55V2Vla2RheU5hbWVzID0gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAiIiwgIlMiLCAiTSIsICJUIiwgIlciLCAiVCIsICJGIiwgIlMiIH07Ci0KLSAgICAgICAgcmVzdWx0LmxvbmdTdGFuZEFsb25lV2Vla2RheU5hbWVzID0gcmVzdWx0LmxvbmdXZWVrZGF5TmFtZXM7Ci0gICAgICAgIHJlc3VsdC5zaG9ydFN0YW5kQWxvbmVXZWVrZGF5TmFtZXMgPSByZXN1bHQuc2hvcnRXZWVrZGF5TmFtZXM7Ci0gICAgICAgIHJlc3VsdC50aW55U3RhbmRBbG9uZVdlZWtkYXlOYW1lcyA9IHJlc3VsdC50aW55V2Vla2RheU5hbWVzOwotCi0gICAgICAgIHJlc3VsdC5mdWxsVGltZUZvcm1hdCA9ICIiOwotICAgICAgICByZXN1bHQubG9uZ1RpbWVGb3JtYXQgPSAiIjsKLSAgICAgICAgcmVzdWx0Lm1lZGl1bVRpbWVGb3JtYXQgPSAiIjsKLSAgICAgICAgcmVzdWx0LnNob3J0VGltZUZvcm1hdCA9ICIiOwotCi0gICAgICAgIHJlc3VsdC5mdWxsRGF0ZUZvcm1hdCA9ICIiOwotICAgICAgICByZXN1bHQubG9uZ0RhdGVGb3JtYXQgPSAiIjsKLSAgICAgICAgcmVzdWx0Lm1lZGl1bURhdGVGb3JtYXQgPSAiIjsKLSAgICAgICAgcmVzdWx0LnNob3J0RGF0ZUZvcm1hdCA9ICIiOwotCi0gICAgICAgIC8vIFVzZWQgYnkgRGVjaW1hbEZvcm1hdFN5bWJvbHMuCi0gICAgICAgIHJlc3VsdC56ZXJvRGlnaXQgPSAnMCc7Ci0gICAgICAgIHJlc3VsdC5kZWNpbWFsU2VwYXJhdG9yID0gJy4nOwotICAgICAgICByZXN1bHQuZ3JvdXBpbmdTZXBhcmF0b3IgPSAnLCc7Ci0gICAgICAgIHJlc3VsdC5wYXR0ZXJuU2VwYXJhdG9yID0gJyAnOwotICAgICAgICByZXN1bHQucGVyY2VudCA9ICclJzsKLSAgICAgICAgcmVzdWx0LnBlck1pbGwgPSAnXHUyMDMwJzsKLSAgICAgICAgcmVzdWx0Lm1vbmV0YXJ5U2VwYXJhdG9yID0gJyAnOwotICAgICAgICByZXN1bHQubWludXNTaWduID0gJy0nOwotICAgICAgICByZXN1bHQuZXhwb25lbnRTZXBhcmF0b3IgPSAiZSI7Ci0gICAgICAgIHJlc3VsdC5pbmZpbml0eSA9ICJcdTIyMUUiOwotICAgICAgICByZXN1bHQuTmFOID0gIk5hTiI7Ci0gICAgICAgIC8vIEFsc28gdXNlZCBieSBDdXJyZW5jeS4KLSAgICAgICAgcmVzdWx0LmN1cnJlbmN5U3ltYm9sID0gIiQiOwotICAgICAgICByZXN1bHQuaW50ZXJuYXRpb25hbEN1cnJlbmN5U3ltYm9sID0gIlVTRCI7Ci0KLSAgICAgICAgLy8gVXNlZCBieSBEZWNpbWFsRm9ybWF0IGFuZCBOdW1iZXJGb3JtYXQuCi0gICAgICAgIHJlc3VsdC5udW1iZXJQYXR0ZXJuID0gIiVmIjsKLSAgICAgICAgcmVzdWx0LmludGVnZXJQYXR0ZXJuID0gIiVkIjsKLSAgICAgICAgcmVzdWx0LmN1cnJlbmN5UGF0dGVybiA9ICIlcyI7Ci0gICAgICAgIHJlc3VsdC5wZXJjZW50UGF0dGVybiA9ICIlZiI7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy8uY2xhc3NwYXRoIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjMyZTA5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InJlcyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBjb21iaW5lYWNjZXNzcnVsZXM9ImZhbHNlIiBraW5kPSJzcmMiIHBhdGg9Ii9sYXlvdXRsaWJfYnJpZGdlIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InZhciIgcGF0aD0iQU5EUk9JRF9QTEFUX1NSQy9wcmVidWlsdHMvbWlzYy9jb21tb24va3htbDIva3htbDItMi4zLjAuamFyIiBzb3VyY2VwYXRoPSIvQU5EUk9JRF9QTEFUX1NSQy9kYWx2aWsvbGliY29yZS94bWwvc3JjL21haW4vamF2YSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJ2YXIiIHBhdGg9IkFORFJPSURfUExBVF9TUkMvb3V0L2hvc3QvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy90ZW1wX2xheW91dGxpYl9pbnRlcm1lZGlhdGVzL2phdmFsaWIuamFyIiBzb3VyY2VwYXRoPSIvQU5EUk9JRF9QTEFUX1NSQy9mcmFtZXdvcmtzL2Jhc2UiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQuanVuaXQuSlVOSVRfQ09OVEFJTkVSLzMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy8ucHJvamVjdCBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMjVlZWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPmxheW91dGxpYl9icmlkZ2UtdGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9BbmRyb2lkLm1rIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGNhZGU5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLUxPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKLQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLSMgT25seSBjb21waWxlIHNvdXJjZSBqYXZhIGZpbGVzIGluIHRoaXMgbGliLgotTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtamF2YS1maWxlcy11bmRlciwgc3JjKQotCi1MT0NBTF9KQVZBX1JFU09VUkNFX0RJUlMgOj0gcmVzCi0KLUxPQ0FMX01PRFVMRSA6PSBsYXlvdXRsaWItdGVzdHMKLUxPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCi0KLUxPQ0FMX0pBVkFfTElCUkFSSUVTIDo9IGxheW91dGxpYiBreG1sMi0yLjMuMCBqdW5pdAotCi1pbmNsdWRlICQoQlVJTERfSE9TVF9KQVZBX0xJQlJBUlkpCi0KLSMgQnVpbGQgYWxsIHN1Yi1kaXJlY3RvcmllcwotaW5jbHVkZSAkKGNhbGwgYWxsLW1ha2VmaWxlcy11bmRlciwkKExPQ0FMX1BBVEgpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9yZXMvY29tL2FuZHJvaWQvbGF5b3V0bGliL3Rlc3RkYXRhL2xheW91dDEueG1sIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9yZXMvY29tL2FuZHJvaWQvbGF5b3V0bGliL3Rlc3RkYXRhL2xheW91dDEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGZjOTQ3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvcmVzL2NvbS9hbmRyb2lkL2xheW91dGxpYi90ZXN0ZGF0YS9sYXlvdXQxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci0KLTwhLS0KLSBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotCWFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotPgotCTxCdXR0b24KLQkJYW5kcm9pZDppZD0iQCtpZC9ib3V0b24iCi0JICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0JICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotCSAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0JICAgIGFuZHJvaWQ6dGV4dD0iTXkgQnV0dG9uIFRleHQiCi0JICAgID4KLQkgICAgPC9CdXR0b24+Ci0JPFZpZXcKLQkJYW5kcm9pZDppZD0iQCtpZC9zdXJmYWNlIgotCSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotCSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKLQkgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIyIgotCSAgICAvPgotCTxUZXh0VmlldwotCSAgICBhbmRyb2lkOmlkPSJAK2lkL3N0YXR1cyIKLQkgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iMmRpcCIKLQkgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgotCSAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ibGFjayIKLQkgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLQkgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0JICAgIGFuZHJvaWQ6bGluZXM9IjEiCi0JICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsfGNlbnRlcl9ob3Jpem9udGFsIgotCSAgICBhbmRyb2lkOnRleHQ9Ik15IFRleHRWaWV3IFRleHQiCi0JICAgIC8+Ci08L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvTWF0cml4X0RlbGVnYXRlVGVzdC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9zcmMvYW5kcm9pZC9ncmFwaGljcy9NYXRyaXhfRGVsZWdhdGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNGVkYWMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9zcmMvYW5kcm9pZC9ncmFwaGljcy9NYXRyaXhfRGVsZWdhdGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLmdyYXBoaWNzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0vKioKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBNYXRyaXhfRGVsZWdhdGVUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIuc2V0VXAoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBzdXBlci50ZWFyRG93bigpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RJZGVudGl0eSgpIHsKLSAgICAgICAgTWF0cml4IG0xID0gbmV3IE1hdHJpeCgpOwotCi0gICAgICAgIGFzc2VydFRydWUobTEuaXNJZGVudGl0eSgpKTsKLQotICAgICAgICBtMS5zZXRWYWx1ZXMobmV3IGZsb2F0W10geyAxLDAsMCwgMCwxLDAsIDAsMCwxIH0pOwotICAgICAgICBhc3NlcnRUcnVlKG0xLmlzSWRlbnRpdHkoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdENvcHlDb25zdHJ1Y3RvcigpIHsKLSAgICAgICAgTWF0cml4IG0xID0gbmV3IE1hdHJpeCgpOwotICAgICAgICBNYXRyaXggbTIgPSBuZXcgTWF0cml4KG0xKTsKLQotICAgICAgICBmbG9hdFtdIHYxID0gbmV3IGZsb2F0WzldOwotICAgICAgICBmbG9hdFtdIHYyID0gbmV3IGZsb2F0WzldOwotICAgICAgICBtMS5nZXRWYWx1ZXModjEpOwotICAgICAgICBtMi5nZXRWYWx1ZXModjIpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IDk7IGkrKykgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHYxW2ldLCB2MltpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL1Rlc3REZWxlZ2F0ZXMuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvVGVzdERlbGVnYXRlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzIxOGRiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvVGVzdERlbGVnYXRlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmxheW91dGxpYi5icmlkZ2U7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5DcmVhdGVJbmZvOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLS8qKgotICogVGVzdHMgdGhhdCBuYXRpdmUgZGVsZWdhdGUgY2xhc3NlcyBpbXBsZW1lbnQgYWxsIHRoZSByZXF1aXJlZCBtZXRob2RzLgotICoKLSAqIFRoaXMgbG9va3MgYXQge0BsaW5rIENyZWF0ZUluZm8jREVMRUdBVEVfQ0xBU1NfTkFUSVZFU30gdG8gZ2V0IHRoZSBsaXN0IG9mIGNsYXNzZXMgdGhhdAotICogaGF2ZSB0aGVpciBuYXRpdmUgbWV0aG9kcyByZWltcGxlbWVudGVkIHRocm91Z2ggYSBkZWxlZ2F0ZS4KLSAqCi0gKiBTaW5jZSB0aGUgcmVpbXBsZW1lbnRlZCBtZXRob2RzIGFyZSBub3QgbmF0aXZlIGFueW1vcmUsIHdlIGxvb2sgZm9yIHRoZSBhbm5vdGF0aW9uCi0gKiB7QGxpbmsgTGF5b3V0bGliRGVsZWdhdGV9LCBhbmQgbG9vayBmb3IgYSBtYXRjaGluZyBtZXRob2QgaW4gdGhlIGRlbGVnYXRlIChuYW1lZCB0aGUgc2FtZQotICogYXMgdGhlIG1vZGlmaWVkIGNsYXNzIHdpdGggX0RlbGVnYXRlIGFkZGVkIGFzIGEgc3VmZml4KS4KLSAqIElmIHRoZSBvcmlnaW5hbCBuYXRpdmUgbWV0aG9kIGlzIG5vdCBzdGF0aWMsIHRoZW4gd2UgbWFrZSBzdXJlIHRoZSBkZWxlZ2F0ZSBtZXRob2QgYWxzbwotICogaW5jbHVkZSB0aGUgb3JpZ2luYWwgY2xhc3MgYXMgZmlyc3QgcGFyYW1ldGVyICh0byBhY2Nlc3MgInRoaXMiKS4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RGVsZWdhdGVzIGV4dGVuZHMgVGVzdENhc2UgewotCi0gICAgcHVibGljIHZvaWQgdGVzdE5hdGl2ZURlbGVnYXRlcygpIHsKLQotICAgICAgICBmaW5hbCBTdHJpbmdbXSBjbGFzc2VzID0gQ3JlYXRlSW5mby5ERUxFR0FURV9DTEFTU19OQVRJVkVTOwotICAgICAgICBmaW5hbCBpbnQgY291bnQgPSBjbGFzc2VzLmxlbmd0aDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgY291bnQgOyBpKyspIHsKLSAgICAgICAgICAgIGxvYWRBbmRDb21wYXJlQ2xhc3NlcyhjbGFzc2VzW2ldLCBjbGFzc2VzW2ldICsgIl9EZWxlZ2F0ZSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdE1ldGhvZERlbGVnYXRlcygpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nW10gbWV0aG9kcyA9IENyZWF0ZUluZm8uREVMRUdBVEVfTUVUSE9EUzsKLSAgICAgICAgZmluYWwgaW50IGNvdW50ID0gbWV0aG9kcy5sZW5ndGg7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGNvdW50IDsgaSsrKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZHNbaV07Ci0KLSAgICAgICAgICAgIC8vIGV4dHJhY3QgdGhlIGNsYXNzIG5hbWUKLSAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBtZXRob2ROYW1lLnN1YnN0cmluZygwLCBtZXRob2ROYW1lLmluZGV4T2YoJyMnKSk7Ci0gICAgICAgICAgICBTdHJpbmcgdGFyZ2V0Q2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UoJyQnLCAnXycpICsgIl9EZWxlZ2F0ZSI7Ci0KLSAgICAgICAgICAgIGxvYWRBbmRDb21wYXJlQ2xhc3NlcyhjbGFzc05hbWUsIHRhcmdldENsYXNzTmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbG9hZEFuZENvbXBhcmVDbGFzc2VzKFN0cmluZyBvcmlnaW5hbENsYXNzTmFtZSwgU3RyaW5nIGRlbGVnYXRlQ2xhc3NOYW1lKSB7Ci0gICAgICAgIC8vIGxvYWQgdGhlIGNsYXNzZXMKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gVGVzdERlbGVnYXRlcy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpOwotICAgICAgICAgICAgQ2xhc3M8Pz4gb3JpZ2luYWxDbGFzcyA9IGNsYXNzTG9hZGVyLmxvYWRDbGFzcyhvcmlnaW5hbENsYXNzTmFtZSk7Ci0gICAgICAgICAgICBDbGFzczw/PiBkZWxlZ2F0ZUNsYXNzID0gY2xhc3NMb2FkZXIubG9hZENsYXNzKGRlbGVnYXRlQ2xhc3NOYW1lKTsKLQotICAgICAgICAgICAgY29tcGFyZShvcmlnaW5hbENsYXNzLCBkZWxlZ2F0ZUNsYXNzKTsKLSAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgIGZhaWwoIkZhaWxlZCB0byBsb2FkIGNsYXNzOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBmYWlsKCJGYWlsZWQgdG8gbG9hZCBjbGFzczogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjb21wYXJlKENsYXNzPD8+IG9yaWdpbmFsQ2xhc3MsIENsYXNzPD8+IGRlbGVnYXRlQ2xhc3MpIHRocm93cyBTZWN1cml0eUV4Y2VwdGlvbiB7Ci0gICAgICAgIExpc3Q8TWV0aG9kPiBjaGVja2VkRGVsZWdhdGVNZXRob2RzID0gbmV3IEFycmF5TGlzdDxNZXRob2Q+KCk7Ci0KLSAgICAgICAgLy8gbG9vcCBvbiB0aGUgbWV0aG9kcyBvZiB0aGUgb3JpZ2luYWwgY2xhc3MsIGFuZCBmb3IgdGhlIG9uZXMgdGhhdCBhcmUgYW5ub3RhdGVkCi0gICAgICAgIC8vIHdpdGggQExheW91dGxpYkRlbGVnYXRlLCBsb29rIGZvciBhIG1hdGNoaW5nIG1ldGhvZCBpbiB0aGUgZGVsZWdhdGUgY2xhc3MuCi0gICAgICAgIC8vIFRoZSBhbm5vdGF0aW9uIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgYnkgbGF5b3V0bGliX2NyZWF0ZSB3aGVuIGl0IHJlcGxhY2UgYSBtZXRob2QKLSAgICAgICAgLy8gYnkgYSBjYWxsIHRvIGEgZGVsZWdhdGUKLSAgICAgICAgTWV0aG9kW10gb3JpZ2luYWxNZXRob2RzID0gb3JpZ2luYWxDbGFzcy5nZXREZWNsYXJlZE1ldGhvZHMoKTsKLSAgICAgICAgZm9yIChNZXRob2Qgb3JpZ2luYWxNZXRob2QgOiBvcmlnaW5hbE1ldGhvZHMpIHsKLSAgICAgICAgICAgIC8vIGxvb2sgZm9yIG1ldGhvZHMgdGhhdCBhcmUgZGVsZWdhdGVkOiB0aGV5IGhhdmUgdGhlIExheW91dGxpYkRlbGVnYXRlIGFubm90YXRpb24KLSAgICAgICAgICAgIGlmIChvcmlnaW5hbE1ldGhvZC5nZXRBbm5vdGF0aW9uKExheW91dGxpYkRlbGVnYXRlLmNsYXNzKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgc2lnbmF0dXJlLgotICAgICAgICAgICAgQ2xhc3M8Pz5bXSBwYXJhbWV0ZXJzID0gb3JpZ2luYWxNZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQotICAgICAgICAgICAgLy8gaWYgdGhlIG1ldGhvZCBpcyBub3Qgc3RhdGljLCB0aGVuIHRoZSBjbGFzcyBpcyBhZGRlZCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyCi0gICAgICAgICAgICAvLyAoZm9yICJ0aGlzIikKLSAgICAgICAgICAgIGlmICgob3JpZ2luYWxNZXRob2QuZ2V0TW9kaWZpZXJzKCkgJiBNb2RpZmllci5TVEFUSUMpID09IDApIHsKLQotICAgICAgICAgICAgICAgIENsYXNzPD8+W10gbmV3UGFyYW1ldGVycyA9IG5ldyBDbGFzczw/PltwYXJhbWV0ZXJzLmxlbmd0aCArIDFdOwotICAgICAgICAgICAgICAgIG5ld1BhcmFtZXRlcnNbMF0gPSBvcmlnaW5hbENsYXNzOwotICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkocGFyYW1ldGVycywgMCwgbmV3UGFyYW1ldGVycywgMSwgcGFyYW1ldGVycy5sZW5ndGgpOwotICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBuZXdQYXJhbWV0ZXJzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpZiB0aGUgb3JpZ2luYWwgY2xhc3MgaXMgYW4gaW5uZXIgY2xhc3MgdGhhdCdzIG5vdCBzdGF0aWMsIHRoZW4KLSAgICAgICAgICAgIC8vIHdlIGFkZCB0aGlzIG9uIHRoZSBlbmNsb3NpbmcgY2xhc3MgYXQgdGhlIGJlZ2lubmluZwotICAgICAgICAgICAgaWYgKG9yaWdpbmFsQ2xhc3MuZ2V0RW5jbG9zaW5nQ2xhc3MoKSAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgICAgIChvcmlnaW5hbENsYXNzLmdldE1vZGlmaWVycygpICYgTW9kaWZpZXIuU1RBVElDKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgQ2xhc3M8Pz5bXSBuZXdQYXJhbWV0ZXJzID0gbmV3IENsYXNzPD8+W3BhcmFtZXRlcnMubGVuZ3RoICsgMV07Ci0gICAgICAgICAgICAgICAgbmV3UGFyYW1ldGVyc1swXSA9IG9yaWdpbmFsQ2xhc3MuZ2V0RW5jbG9zaW5nQ2xhc3MoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmFtZXRlcnMsIDAsIG5ld1BhcmFtZXRlcnMsIDEsIHBhcmFtZXRlcnMubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gbmV3UGFyYW1ldGVyczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAvLyB0cnkgdG8gbG9hZCB0aGUgbWV0aG9kIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlciB0eXBlcy4KLSAgICAgICAgICAgICAgICBNZXRob2QgZGVsZWdhdGVNZXRob2QgPSBkZWxlZ2F0ZUNsYXNzLmdldERlY2xhcmVkTWV0aG9kKG9yaWdpbmFsTWV0aG9kLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMpOwotCi0gICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgbWV0aG9kIGhhcyB0aGUgYW5ub3RhdGlvbgotICAgICAgICAgICAgICAgIGFzc2VydE5vdE51bGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVsZWdhdGUgbWV0aG9kICUxJHMgZm9yIGNsYXNzICUyJHMgZG9lcyBub3QgaGF2ZSB0aGUgQExheW91dGxpYkRlbGVnYXRlIGFubm90YXRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZU1ldGhvZC5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsQ2xhc3MuZ2V0TmFtZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlTWV0aG9kLmdldEFubm90YXRpb24oTGF5b3V0bGliRGVsZWdhdGUuY2xhc3MpKTsKLQotICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIG1ldGhvZCBpcyBzdGF0aWMKLSAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlbGVnYXRlIG1ldGhvZCAlMSRzIGZvciBjbGFzcyAlMiRzIGlzIG5vdCBzdGF0aWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZU1ldGhvZC5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsQ2xhc3MuZ2V0TmFtZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChkZWxlZ2F0ZU1ldGhvZC5nZXRNb2RpZmllcnMoKSAmIE1vZGlmaWVyLlNUQVRJQykgPT0gTW9kaWZpZXIuU1RBVElDKTsKLQotICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgbWV0aG9kIGFzIGNoZWNrZWQuCi0gICAgICAgICAgICAgICAgY2hlY2tlZERlbGVnYXRlTWV0aG9kcy5hZGQoZGVsZWdhdGVNZXRob2QpOwotICAgICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGdldE1ldGhvZE5hbWUob3JpZ2luYWxNZXRob2QsIHBhcmFtZXRlcnMpOwotICAgICAgICAgICAgICAgIGZhaWwoU3RyaW5nLmZvcm1hdCgiTWlzc2luZyAlMSRzLiUyJHMiLCBkZWxlZ2F0ZUNsYXNzLmdldE5hbWUoKSwgbmFtZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbG9vayBmb3IgZGVhZCAoZGVsZWdhdGUpIGNvZGUuCi0gICAgICAgIC8vIFRoaXMgbG9va3MgZm9yIGFsbCBtZXRob2RzIGluIHRoZSBkZWxlZ2F0ZSBjbGFzcywgYW5kIGlmIHRoZXkgaGF2ZSB0aGUKLSAgICAgICAgLy8gQExheW91dGxpYkRlbGVnYXRlIGFubm90YXRpb24sIG1ha2Ugc3VyZSB0aGV5IGhhdmUgYmVlbiBwcmV2aW91c2x5IGZvdW5kIGFzIGEKLSAgICAgICAgLy8gbWF0Y2ggZm9yIGEgbWV0aG9kIGluIHRoZSBvcmlnaW5hbCBjbGFzcy4KLSAgICAgICAgLy8gSWYgbm90LCB0aGlzIG1lYW5zIHRoZSBtZXRob2QgaXMgYSBkZWxlZ2F0ZSBmb3IgYSBtZXRob2QgdGhhdCBlaXRoZXIgZG9lc24ndCBleGlzdAotICAgICAgICAvLyBhbnltb3JlIG9yIGlzIG5vdCBkZWxlZ2F0ZWQgYW55bW9yZS4KLSAgICAgICAgTWV0aG9kW10gZGVsZWdhdGVNZXRob2RzID0gZGVsZWdhdGVDbGFzcy5nZXREZWNsYXJlZE1ldGhvZHMoKTsKLSAgICAgICAgZm9yIChNZXRob2QgZGVsZWdhdGVNZXRob2QgOiBkZWxlZ2F0ZU1ldGhvZHMpIHsKLSAgICAgICAgICAgIC8vIGxvb2sgZm9yIG1ldGhvZHMgdGhhdCBhcmUgZGVsZWdhdGVzOiB0aGV5IGhhdmUgdGhlIExheW91dGxpYkRlbGVnYXRlIGFubm90YXRpb24KLSAgICAgICAgICAgIGlmIChkZWxlZ2F0ZU1ldGhvZC5nZXRBbm5vdGF0aW9uKExheW91dGxpYkRlbGVnYXRlLmNsYXNzKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFzc2VydFRydWUoCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlbGVnYXRlIG1ldGhvZCAlMSRzLiUyJHMgaXMgbm90IHVzZWQgYW55bW9yZSBhbmQgbXVzdCBiZSByZW1vdmVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZUNsYXNzLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRNZXRob2ROYW1lKGRlbGVnYXRlTWV0aG9kKSksCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrZWREZWxlZ2F0ZU1ldGhvZHMuY29udGFpbnMoZGVsZWdhdGVNZXRob2QpKTsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWV0aG9kTmFtZShNZXRob2QgbWV0aG9kKSB7Ci0gICAgICAgIHJldHVybiBnZXRNZXRob2ROYW1lKG1ldGhvZCwgbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIGdldE1ldGhvZE5hbWUoTWV0aG9kIG1ldGhvZCwgQ2xhc3M8Pz5bXSBwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIC8vIGNvbXB1dGUgYSBmdWxsIGNsYXNzIG5hbWUgdGhhdCdzIGxvbmcgYnV0IG5vdCB0b28gbG9uZy4KLSAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKG1ldGhvZC5nZXROYW1lKCkgKyAiKCIpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhcmFtZXRlcnMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgIENsYXNzPD8+IHRoZUNsYXNzID0gcGFyYW1ldGVyc1tqXTsKLSAgICAgICAgICAgIHNiLmFwcGVuZCh0aGVDbGFzcy5nZXROYW1lKCkpOwotICAgICAgICAgICAgaW50IGRpbWVuc2lvbnMgPSAwOwotICAgICAgICAgICAgd2hpbGUgKHRoZUNsYXNzLmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAgIGRpbWVuc2lvbnMrKzsKLSAgICAgICAgICAgICAgICB0aGVDbGFzcyA9IHRoZUNsYXNzLmdldENvbXBvbmVudFR5cGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGltZW5zaW9uczsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJbXSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGogPCAocGFyYW1ldGVycy5sZW5ndGggLSAxKSkgewotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNiLmFwcGVuZCgiKSIpOwotCi0gICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VYbWxCbG9ja1BhcnNlclRlc3QuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VYbWxCbG9ja1BhcnNlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY1YTAwOC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlWG1sQmxvY2tQYXJzZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5hbmRyb2lkOwotCi1pbXBvcnQgY29tLmFuZHJvaWQubGF5b3V0bGliLmJyaWRnZS5pbXBsLlBhcnNlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBCcmlkZ2VYbWxCbG9ja1BhcnNlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBzdXBlci5zZXRVcCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHN1cGVyLnRlYXJEb3duKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdFhtbEJsb2NrUGFyc2VyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXIgPSBQYXJzZXJGYWN0b3J5LmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oIi9jb20vYW5kcm9pZC9sYXlvdXRsaWIvdGVzdGRhdGEvbGF5b3V0MS54bWwiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJsYXlvdXQxLnhtbCIpOwotCi0gICAgICAgIHBhcnNlciA9IG5ldyBCcmlkZ2VYbWxCbG9ja1BhcnNlcihwYXJzZXIsIG51bGwsIGZhbHNlIC8qIHBsYXRmb3JtUmVzb3VyY2VGbGFnICovKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoWG1sUHVsbFBhcnNlci5TVEFSVF9ET0NVTUVOVCwgcGFyc2VyLm5leHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuU1RBUlRfVEFHLCBwYXJzZXIubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJMaW5lYXJMYXlvdXQiLCBwYXJzZXIuZ2V0TmFtZSgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoWG1sUHVsbFBhcnNlci5URVhULCBwYXJzZXIubmV4dCgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoWG1sUHVsbFBhcnNlci5TVEFSVF9UQUcsIHBhcnNlci5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkJ1dHRvbiIsIHBhcnNlci5nZXROYW1lKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoWG1sUHVsbFBhcnNlci5URVhULCBwYXJzZXIubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuRU5EX1RBRywgcGFyc2VyLm5leHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuVEVYVCwgcGFyc2VyLm5leHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuU1RBUlRfVEFHLCBwYXJzZXIubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJWaWV3IiwgcGFyc2VyLmdldE5hbWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhYbWxQdWxsUGFyc2VyLkVORF9UQUcsIHBhcnNlci5uZXh0KCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscyhYbWxQdWxsUGFyc2VyLlRFWFQsIHBhcnNlci5uZXh0KCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscyhYbWxQdWxsUGFyc2VyLlNUQVJUX1RBRywgcGFyc2VyLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiVGV4dFZpZXciLCBwYXJzZXIuZ2V0TmFtZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuRU5EX1RBRywgcGFyc2VyLm5leHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuVEVYVCwgcGFyc2VyLm5leHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKFhtbFB1bGxQYXJzZXIuRU5EX1RBRywgcGFyc2VyLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhYbWxQdWxsUGFyc2VyLkVORF9ET0NVTUVOVCwgcGFyc2VyLm5leHQoKSk7Ci0gICAgfQotCi0gICAgLy8tLS0tLS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIFF1aWNrJ24nZGlydHkgZGVidWcgaGVscGVyIHRoYXQgZHVtcHMgYW4gWE1MIHN0cnVjdHVyZSB0byBzdGRvdXQuCi0gICAgICovCi0gICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCi0gICAgcHJpdmF0ZSB2b2lkIGR1bXAoTm9kZSBub2RlLCBTdHJpbmcgcHJlZml4KSB7Ci0gICAgICAgIE5vZGUgbjsKLQotICAgICAgICBTdHJpbmdbXSB0eXBlcyA9IHsKLSAgICAgICAgICAgICAgICAidW5rbm93biIsCi0gICAgICAgICAgICAgICAgIkVMRU1FTlRfTk9ERSIsCi0gICAgICAgICAgICAgICAgIkFUVFJJQlVURV9OT0RFIiwKLSAgICAgICAgICAgICAgICAiVEVYVF9OT0RFIiwKLSAgICAgICAgICAgICAgICAiQ0RBVEFfU0VDVElPTl9OT0RFIiwKLSAgICAgICAgICAgICAgICAiRU5USVRZX1JFRkVSRU5DRV9OT0RFIiwKLSAgICAgICAgICAgICAgICAiRU5USVRZX05PREUiLAotICAgICAgICAgICAgICAgICJQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUiLAotICAgICAgICAgICAgICAgICJDT01NRU5UX05PREUiLAotICAgICAgICAgICAgICAgICJET0NVTUVOVF9OT0RFIiwKLSAgICAgICAgICAgICAgICAiRE9DVU1FTlRfVFlQRV9OT0RFIiwKLSAgICAgICAgICAgICAgICAiRE9DVU1FTlRfRlJBR01FTlRfTk9ERSIsCi0gICAgICAgICAgICAgICAgIk5PVEFUSU9OX05PREUiCi0gICAgICAgIH07Ci0KLSAgICAgICAgU3RyaW5nIHMgPSBTdHJpbmcuZm9ybWF0KCIlczwlcz4gJXMgJXMiLAotICAgICAgICAgICAgICAgIHByZWZpeCwKLSAgICAgICAgICAgICAgICB0eXBlc1tub2RlLmdldE5vZGVUeXBlKCldLAotICAgICAgICAgICAgICAgIG5vZGUuZ2V0Tm9kZU5hbWUoKSwKLSAgICAgICAgICAgICAgICBub2RlLmdldE5vZGVWYWx1ZSgpID09IG51bGwgPyAiIiA6IG5vZGUuZ2V0Tm9kZVZhbHVlKCkudHJpbSgpKTsKLQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocyk7Ci0KLSAgICAgICAgbiA9IG5vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotICAgICAgICBpZiAobiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBkdW1wKG4sIHByZWZpeCArICItICIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbiA9IG5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKG4gIT0gbnVsbCkgewotICAgICAgICAgICAgZHVtcChuLCBwcmVmaXgpOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvLmNsYXNzcGF0aCBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q4YmIwZC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBleGNsdWRpbmc9Im1vY2tfZGF0YS8iIGtpbmQ9InNyYyIgcGF0aD0idGVzdHMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQuanVuaXQuSlVOSVRfQ09OVEFJTkVSLzQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0idmFyIiBwYXRoPSJBTkRST0lEX1NSQy9wcmVidWlsdHMvdG9vbHMvY29tbW9uL2FzbS10b29scy9hc20tNC4wLmphciIgc291cmNlcGF0aD0iL0FORFJPSURfUExBVC9wcmVidWlsdHMvdG9vbHMvY29tbW9uL2FzbS10b29scy9zcmMtNC4wLnppcCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlLy5wcm9qZWN0IGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwMGQxNy4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+bGF5b3V0bGliX2NyZWF0ZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlLy5zZXR0aW5ncy9SRUFETUUudHh0IGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS8uc2V0dGluZ3MvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEyMGIyMC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlLy5zZXR0aW5ncy9SRUFETUUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1Db3B5IHRoaXMgaW4gZWNsaXBzZSBwcm9qZWN0IGFzIGEgLnNldHRpbmdzIGZvbGRlciBhdCB0aGUgcm9vdC4KLVRoaXMgZW5zdXJlIHByb3BlciBjb21waWxhdGlvbiBjb21wbGlhbmNlIGFuZCB3YXJuaW5nL2Vycm9yIGxldmVscy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzgxYTBlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubm9ubnVsbD1jb20uYW5kcm9pZC5hbm5vdGF0aW9ucy5Ob25OdWxsCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm5vbm51bGxieWRlZmF1bHQ9Y29tLmFuZHJvaWQuYW5ub3RhdGlvbnMuTm9uTnVsbEJ5RGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5ub25udWxsaXNkZWZhdWx0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm51bGxhYmxlPWNvbS5hbmRyb2lkLmFubm90YXRpb25zLk51bGxhYmxlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm51bGxhbmFseXNpcz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS42Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmNvbXBhcmluZ0lkZW50aWNhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZXhwbGljaXRseUNsb3NlZEF1dG9DbG9zZWFibGU9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jbHVkZU51bGxJbmZvRnJvbUFzc2VydHM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0hhc2hDb2RlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uRm9ySW50ZXJmYWNlTWV0aG9kSW1wbGVtZW50YXRpb249ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxTcGVjSW5zdWZmaWNpZW50SW5mbz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxTcGVjVmlvbGF0aW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbE51bGxTcGVjVmlvbGF0aW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbGx5VW5jbG9zZWRDbG9zZWFibGU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbEFubm90YXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFNwZWNpZmljYXRpb25PZlR5cGVBcmd1bWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFN1cGVyaW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVwb3J0TWV0aG9kQ2FuQmVQb3RlbnRpYWxseVN0YXRpYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVwb3J0TWV0aG9kQ2FuQmVTdGF0aWM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzT3B0aW9uYWxFcnJvcnM9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuYXZvaWRhYmxlR2VuZXJpY1R5cGVQcm9ibGVtcz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jbG9zZWRDbG9zZWFibGU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkT2JqZWN0QWxsb2NhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVySW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9BbmRyb2lkLm1rIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmQ0OGFiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi1MT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtamF2YS1maWxlcy11bmRlcixzcmMpCi0KLUxPQ0FMX0pBUl9NQU5JRkVTVCA6PSBtYW5pZmVzdC50eHQKLUxPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUyA6PSBcCi0JYXNtLTQuMAotCi1MT0NBTF9NT0RVTEUgOj0gbGF5b3V0bGliX2NyZWF0ZQotCi1pbmNsdWRlICQoQlVJTERfSE9TVF9KQVZBX0xJQlJBUlkpCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUkVBRE1FLnR4dCBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYjE4NS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0KLS0gRGVzY3JpcHRpb24gLQotLS0tLS0tLS0tLS0tLS0tCi0KLUxheW91dGxpYl9jcmVhdGUgZ2VuZXJhdGVzIGEgSkFSIGxpYnJhcnkgdXNlZCBieSB0aGUgRWNsaXBzZSBncmFwaGljYWwgbGF5b3V0IGVkaXRvcgotdG8gcGVyZm9ybSBsYXlvdXQuCi0KLQotLSBVc2FnZSAtCi0tLS0tLS0tLS0KLQotIC4vbGF5b3V0bGliX2NyZWF0ZSBwYXRoL3RvL2FuZHJvaWQuamFyIGRlc3RpbmF0aW9uLmphcgotCi0KLS0gRGVzaWduIE92ZXJ2aWV3IC0KLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTGF5b3V0bGliX2NyZWF0ZSB1c2VzIHRoZSAiYW5kcm9pZC5qYXIiIGNvbnRhaW5pbmcgYWxsIHRoZSBKYXZhIGNvZGUgdXNlZCBieSBBbmRyb2lkCi1hcyBnZW5lcmF0ZWQgYnkgdGhlIEFuZHJvaWQgYnVpbGQsIHJpZ2h0IGJlZm9yZSB0aGUgY2xhc3NlcyBhcmUgY29udmVydGVkIHRvIGEgREVYIGZvcm1hdC4KLQotVGhlIEFuZHJvaWQgSkFSIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgaW4gRWNsaXBzZToKLS0gaXQgY29udGFpbnMgcmVmZXJlbmNlcyB0byBuYXRpdmUgY29kZSAod2hpY2ggd2Ugd2FudCB0byBhdm9pZCBpbiBFY2xpcHNlKSwKLS0gc29tZSBjbGFzc2VzIG5lZWQgdG8gYmUgb3ZlcnJpZGRlbiwgZm9yIGV4YW1wbGUgYWxsIHRoZSBkcmF3aW5nIGNvZGUgdGhhdCBpcwotICByZXBsYWNlZCBieSBKYXZhIDJEIGNhbGxzIGluIEVjbGlwc2UuCi0tIHNvbWUgb2YgdGhlIGNsYXNzZXMgdGhhdCBuZWVkIHRvIGJlIGNoYW5nZWQgYXJlIGZpbmFsIGFuZC9vciB3ZSBuZWVkIGFjY2VzcwotICB0byB0aGVpciBwcml2YXRlIGludGVybmFsIHN0YXRlLgotCi1Db25zZXF1ZW50bHkgdGhpcyB0b29sOgotLSBwYXJzZXMgdGhlIGlucHV0IEpBUiwKLS0gbW9kaWZpZXMgc29tZSBvZiB0aGUgY2xhc3NlcyBkaXJlY3RseSB1c2luZyBzb21lIGJ5dGVjb2RlIG1hbmlwdWxhdGlvbiwKLS0gZmlsdGVycyBzb21lIHBhY2thZ2VzIGFuZCByZW1vdmVzIHRob3NlIHdlIGRvbid0IHdhbnQgaW4gdGhlIG91dHB1dCBKQVIsCi0tIGluamVjdHMgc29tZSBuZXcgY2xhc3NlcywKLS0gZ2VuZXJhdGVzIGEgbW9kaWZpZWQgSkFSIGZpbGUgdGhhdCBpcyBzdWl0YWJsZSBmb3IgdGhlIEFuZHJvaWQgcGx1Z2luCi0gIGZvciBFY2xpcHNlIHRvIHBlcmZvcm0gcmVuZGVyaW5nLgotCi1UaGUgQVNNIGxpYnJhcnkgaXMgdXNlZCB0byBkbyB0aGUgYnl0ZWNvZGUgbW9kaWZpY2F0aW9uIHVzaW5nIGl0cyB2aXNpdG9yIHBhdHRlcm4gQVBJLgotCi1UaGUgbGF5b3V0bGliX2NyZWF0ZSBpcyAqTk9UKiBnZW5lcmljLiBUaGVyZSBpcyBubyBjb25maWd1cmF0aW9uIGZpbGUuIEluc3RlYWQgYWxsIHRoZQotY29uZmlndXJhdGlvbiBpcyBkb25lIGluIHRoZSBtYWluKCkgbWV0aG9kIGFuZCB0aGUgQ3JlYXRlSW5mbyBzdHJ1Y3R1cmUgaXMgZXhwZWN0ZWQgdG8KLWNoYW5nZSB3aXRoIHRoZSBBbmRyb2lkIHBsYXRmb3JtIGFzIG5ldyBjbGFzc2VzIGFyZSBhZGRlZCwgY2hhbmdlZCBvciByZW1vdmVkLgotCi1UaGUgcmVzdWx0aW5nIEpBUiBpcyB1c2VkIGJ5IGxheW91dGxpYl9icmlkZ2UgKGEuay5hLiAidGhlIGJyaWRnZSIpLCBhbHNvIHBhcnQgb2YgdGhlCi1wbGF0Zm9ybSwgdGhhdCBwcm92aWRlcyBhbGwgdGhlIG5lY2Vzc2FyeSBtaXNzaW5nIGltcGxlbWVudGF0aW9uIGZvciByZW5kZXJpbmcgZ3JhcGhpY3MKLWluIEVjbGlwc2UuCi0KLQotCi0tIEltcGxlbWVudGF0aW9uIE5vdGVzIC0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgdG9vbCB3b3JrcyBpbiB0d28gcGhhc2VzOgotLSBmaXJzdCBhbmFseXplIHRoZSBpbnB1dCBqYXIgKEFzbUFuYWx5emVyIGNsYXNzKQotLSB0aGVuIGdlbmVyYXRlIHRoZSBvdXRwdXQgamFyIChBc21HZW5lcmF0b3IgY2xhc3MpLAotCi0KLS0gQW5hbHl6ZXIKLS0tLS0tLS0tLS0KLQotVGhlIGdvYWwgb2YgdGhlIGFuYWx5emVyIGlzIHRvIGNyZWF0ZSBhIGdyYXBoIG9mIGFsbCB0aGUgY2xhc3NlcyBmcm9tIHRoZSBpbnB1dCBKQVIKLXdpdGggdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCB0aGVuIG9ubHkga2VlcCB0aGUgb25lcyB3ZSB3YW50LgotCi1UbyBkbyB0aGF0LCB0aGUgYW5hbHl6ZXIgaXMgY3JlYXRlZCB3aXRoIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgdG8ga2VlcCAtLSBldmVyeXRoaW5nCi10aGF0IGRlcml2ZXMgZnJvbSB0aGVzZSBpcyBrZXB0LiBDdXJyZW50bHkgdGhlIG9uZSBzdWNoIGNsYXNzIGlzIGFuZHJvaWQudmlldy5WaWV3Ogotc2luY2Ugd2Ugd2FudCB0byByZW5kZXIgbGF5b3V0cywgYW55dGhpbmcgdGhhdCBpcyBzb3J0IG9mIGEgdmlldyBuZWVkcyB0byBiZSBrZXB0LgotCi1UaGUgYW5hbHl6ZXIgaXMgYWxzbyBnaXZlbiBhIGxpc3Qgb2YgY2xhc3MgbmFtZXMgdG8ga2VlcCBpbiB0aGUgb3V0cHV0LgotVGhpcyBpcyBkb25lIHVzaW5nIHNoZWxsLWxpa2UgZ2xvYiBwYXR0ZXJucyB0aGF0IGZpbHRlciBvbiB0aGUgZnVsbHktcXVhbGlmaWVkCi1jbGFzcyBuYW1lcywgZm9yIGV4YW1wbGUgImFuZHJvaWQuKi5SKioiICgiKiIgZG9lcyBub3QgbWF0Y2hlcyBkb3RzIHdoaWxzdCAiKioiIGRvZXMsCi1hbmQgIi4iIGFuZCAiJCIgYXJlIGludGVycHJldGVkIGFzLWlzKS4KLUluIHByYWN0aWNlIHdlIGFsbW9zdCBidXQgbm90IHF1aXRlIHJlcXVlc3QgdGhlIGluY2x1c2lvbiBvZiBmdWxsIHBhY2thZ2VzLgotCi1UaGUgYW5hbHl6ZXIgaXMgYWxzbyBnaXZlbiBhIGxpc3Qgb2YgY2xhc3NlcyB0byBleGNsdWRlLiBBIGZha2UgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UKLWNsYXNzZXMgaXMgaW5qZWN0ZWQgYnkgdGhlIEdlbmVyYXRvci4KLQotV2l0aCB0aGlzIGluZm9ybWF0aW9uLCB0aGUgYW5hbHl6ZXIgcGFyc2VzIHRoZSBpbnB1dCB6aXAgdG8gZmluZCBhbGwgdGhlIGNsYXNzZXMuCi1BbGwgY2xhc3NlcyBkZXJpdmluZyBmcm9tIHRoZSByZXF1ZXN0ZWQgYmFzZXMgY2xhc3NlcyBhcmUga2VwdC4KLUFsbCBjbGFzc2VzIHdoaWNoIG5hbWUgbWF0Y2hlZCB0aGUgZ2xvYiBwYXR0ZXJuIGFyZSBrZXB0LgotVGhlIGFuYWx5c2lzIHRoZW4gZmluZHMgYWxsIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGNsYXNzZXMgdGhhdCBhcmUgdG8gYmUga2VwdAotdXNpbmcgYW4gQVNNIHZpc2l0b3Igb24gdGhlIGNsYXNzLCB0aGUgZmllbGQgdHlwZXMsIHRoZSBtZXRob2QgdHlwZXMgYW5kIGFubm90YXRpb25zIHR5cGVzLgotQ2xhc3NlcyB0aGF0IGJlbG9uZyB0byB0aGUgY3VycmVudCBKUkUgYXJlIGV4Y2x1ZGVkLgotCi1UaGUgb3V0cHV0IG9mIHRoZSBhbmFseXplciBpcyBhIHNldCBvZiBBU00gQ2xhc3NSZWFkZXIgaW5zdGFuY2VzIHdoaWNoIGFyZSB0aGVuCi1mZWQgdG8gdGhlIGdlbmVyYXRvci4KLQotCi0tIEdlbmVyYXRvcgotLS0tLS0tLS0tLS0KLQotVGhlIGdlbmVyYXRvciBpcyBjb25zdHJ1Y3RlZCBmcm9tIGEgQ3JlYXRlSW5mbyBzdHJ1Y3QgdGhhdCBhY3RzIGFzIGEgY29uZmlnIGZpbGUKLWFuZCBsaXN0czoKLS0gdGhlIGNsYXNzZXMgdG8gaW5qZWN0IGluIHRoZSBvdXRwdXQgSkFSIC0tIHRoZXNlIGNsYXNzZXMgYXJlIGRpcmVjdGx5IGltcGxlbWVudGVkCi0gIGluIGxheW91dGxpYl9jcmVhdGUgYW5kIHdpbGwgYmUgdXNlZCB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgcmVuZGVyZXIgaW4gRWNsaXBzZS4KLS0gc3BlY2lmaWMgbWV0aG9kcyB0byBvdmVycmlkZSAoc2VlIG1ldGhvZCBzdHVicyBkZXRhaWxzIGJlbG93KS4KLS0gc3BlY2lmaWMgbWV0aG9kcyBmb3Igd2hpY2ggdG8gZGVsZWdhdGUgY2FsbHMuCi0tIHNwZWNpZmljIG1ldGhvZHMgdG8gcmVtb3ZlIGJhc2VkIG9uIHRoZWlyIHJldHVybiB0eXBlLgotLSBzcGVjaWZpYyBjbGFzc2VzIHRvIHJlbmFtZS4KLS0gc3BlY2lmaWMgY2xhc3NlcyB0byByZWZhY3Rvci4KLQotRWFjaCBvZiB0aGVzZSBhcmUgc3BlY2lmaWMgc3RyYXRlZ2llcyB3ZSB1c2UgdG8gYmUgYWJsZSB0byBtb2RpZnkgdGhlIEFuZHJvaWQgY29kZQotdG8gZml0IHdpdGhpbiB0aGUgRWNsaXBzZSByZW5kZXJlci4gVGhlc2Ugc3RyYXRlZ2llcyBhcmUgZXhwbGFpbmVkIGJlb3cuCi0KLVRoZSBjb3JlIG1ldGhvZCBvZiB0aGUgZ2VuZXJhdG9yIGlzIHRyYW5zZm9ybSgpOiBpdCB0YWtlcyBhbiBpbnB1dCBBU00gQ2xhc3NSZWFkZXIKLWFuZCBtb2RpZmllcyBpdCB0byBwcm9kdWNlIGEgYnl0ZSBhcnJheSBzdWl0YWJsZSBmb3IgdGhlIGZpbmFsIEpBUiBmaWxlLgotCi1UaGUgZmlyc3Qgc3RlcCBvZiB0aGUgdHJhbnNmb3JtYXRpb24gaXMgdG8gaW1wbGVtZW50IHRoZSBtZXRob2QgZGVsZWdhdGVzLgotCi1UaGUgVHJhbnNmb3JtQ2xhc3NBZGFwdGVyIGlzIHRoZW4gdXNlZCB0byBwcm9jZXNzIHRoZSBwb3RlbnRpYWxseSByZW5hbWVkIGNsYXNzLgotQWxsIHByb3RlY3RlZCBvciBwcml2YXRlIGNsYXNzZXMgYXJlIG1hcmtldCBhcyBwdWJsaWMuCi1BbGwgY2xhc3NlcyBhcmUgbWFkZSBub24tZmluYWwuCi1JbnRlcmZhY2VzIGFyZSBsZWZ0IGFzLWlzLgotCi1JZiBhIG1ldGhvZCBoYXMgYSByZXR1cm4gdHlwZSB0aGF0IG11c3QgYmUgZXJhc2VkLCB0aGUgd2hvbGUgbWV0aG9kIGlzIHNraXBwZWQuCi1NZXRob2RzIGFyZSBhbHNvIGNoYW5nZWQgZnJvbSBwcm90ZWN0ZWQvcHJpdmF0ZSB0byBwdWJsaWMuCi1UaGUgY29kZSBvZiB0aGUgbWV0aG9kcyBpcyB0aGVuIGtlcHQgYXMtaXMsIGV4Y2VwdCBmb3IgbmF0aXZlIG1ldGhvZHMgd2hpY2ggYXJlCi1yZXBsYWNlZCBieSBhIHN0dWIuIE1ldGhvZHMgdGhhdCBhcmUgdG8gYmUgb3ZlcnJpZGRlbiBhcmUgYWxzbyByZXBsYWNlZCBieSBhIHN0dWIuCi0KLUZpbmFsbHkgZmllbGRzIGFyZSBhbHNvIHZpc2l0ZWQgYW5kIGNoYW5nZWQgZnJvbSBwcm90ZWN0ZWQvcHJpdmF0ZSB0byBwdWJsaWMuCi0KLVRoZSBuZXh0IHN0ZXAgb2YgdGhlIHRyYW5zZm9ybWF0aW9uIGlzIGNoYW5naW5nIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBpbiBjYXNlCi13ZSByZXF1ZXN0ZWQgdGhlIGNsYXNzIHRvIGJlIHJlbmFtZWQuIFRoaXMgdXNlcyB0aGUgUmVuYW1lQ2xhc3NBZGFwdGVyIHRvIGFsc28gcmVuYW1lCi1hbGwgaW5uZXIgY2xhc3NlcyBhbmQgcmVmZXJlbmNlcyBpbiBtZXRob2RzIGFuZCB0eXBlcy4gTm90ZSB0aGF0IG90aGVyIGNsYXNzZXMgYXJlCi1ub3QgdHJhbnNmb3JtZWQgYW5kIGtlZXAgcmVmZXJlbmNpbmcgdGhlIG9yaWdpbmFsIG5hbWUuCi0KLVRoZSBjbGFzcyBpcyB0aGVuIGZlZCB0byBSZWZhY3RvckNsYXNzQWRhcHRlciB3aGljaCBpcyBsaWtlIFJlbmFtZUNsYXNzQWRhcHRlciBidXQKLXVwZGF0ZXMgdGhlIHJlZmVyZW5jZXMgaW4gYWxsIGNsYXNzZXMuIFRoaXMgaXMgdXNlZCB0byB1cGRhdGUgdGhlIHJlZmVyZW5jZXMgb2YgY2xhc3NlcwotaW4gdGhlIGphdmEgcGFja2FnZSB0aGF0IHdlcmUgYWRkZWQgaW4gdGhlIERhbHZpayBWTSBidXQgYXJlIG5vdCBhIHBhcnQgb2YgdGhlIHN0YW5kYXJkCi1KVk0uIFRoZSBleGlzdGluZyBjbGFzc2VzIGFyZSBtb2RpZmllZCB0byB1cGRhdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlc2Ugbm9uLXN0YW5kYXJkCi1jbGFzc2VzLiBBbiBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgKGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5qYXZhLiopIGlzCi1pbmplY3RlZC4KLQotVGhlIENsYXNzQWRhcHRlcnMgYXJlIGNoYWluZWQgdG9nZXRoZXIgdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBvdXRwdXQuIChMb29rIGF0IHNlY3Rpb24KLTIuMi43IFRyYW5zZm9ybWF0aW9uIGNoYWlucyBpbiB0aGUgYXNtIHVzZXIgZ3VpZGUsIGxpbmsgaW4gdGhlIFJlZmVyZW5jZXMuKSBUaGUgb3JkZXIgb2YKLWV4ZWN1dGlvbiBvZiB0aGVzZSBpczoKLUNsYXNzUmVhZGVyIC0+IFtEZWxlZ2F0ZUNsYXNzQWRhcHRlcl0gLT4gVHJhbnNmb3JtQ2xhc3NBZGFwdGVyIC0+IFtSZW5hbWVDbGFzc0FkYXB0ZXJdIC0+Ci1SZWZhY3RvckNsYXNzQWRhcHRlciAtPiBDbGFzc1dyaXRlcgotCi0tIE1ldGhvZCBzdHVicwotLS0tLS0tLS0tLS0tLS0KLQotQXMgaW5kaWNhdGVkIGFib3ZlLCBhbGwgbmF0aXZlIGFuZCBvdmVycmlkZGVuIG1ldGhvZHMgYXJlIHJlcGxhY2VkIGJ5IGEgc3R1Yi4KLVdlIGRvbid0IGhhdmUgdGhlIGNvZGUgdG8gcmVwbGFjZSB3aXRoIGluIGxheW91dGxpYl9jcmVhdGUuCi1JbnN0ZWFkIHRoZSBTdHViTWV0aG9kQWRhcHRlciByZXBsYWNlcyB0aGUgY29kZSBvZiB0aGUgbWV0aG9kIGJ5IGEgY2FsbCB0bwotT3ZlcnJpZGVNZXRob2QuaW52b2tlWCgpLiBXaGVuIHVzaW5nIHRoZSBmaW5hbCBKQVIsIHRoZSBicmlkZ2UgY2FuIHJlZ2lzdGVyCi1saXN0ZW5lcnMgZnJvbSB0aGVzZSBvdmVycmlkZGVuIG1ldGhvZCBjYWxscyBiYXNlZCBvbiB0aGUgbWV0aG9kIHNpZ25hdHVyZXMuCi0KLVRoZSBsaXN0ZW5lcnMgYXJlIGN1cnJlbnRseSBwcmV0dHkgYmFzaWM6IHdlIG9ubHkgcGFzcyB0aGUgc2lnbmF0dXJlIG9mIHRoZQotbWV0aG9kIGJlaW5nIGNhbGxlZCwgaXRzIGNhbGxlciBvYmplY3QgYW5kIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlCi1tZXRob2Qgd2FzIG5hdGl2ZS4gV2UgZG8gbm90IGN1cnJlbnRseSBwcm92aWRlIHRoZSBwYXJhbWV0ZXJzLiBUaGUgbGlzdGVuZXIKLWNhbiBob3dldmVyIHNwZWNpZnkgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgb3ZlcnJpZGRlbiBtZXRob2QuCi0KLVRoaXMgc3RyYXRlZ3kgaXMgbm93IG9ic29sZXRlIGFuZCByZXBsYWNlZCBieSB0aGUgbWV0aG9kIGRlbGVnYXRlcy4KLQotCi0tIFN0cmF0ZWdpZXMKLS0tLS0tLS0tLS0tLQotCi1XZSBjdXJyZW50bHkgaGF2ZSA2IHN0cmF0ZWdpZXMgdG8gZGVhbCB3aXRoIG92ZXJyaWRpbmcgdGhlIHJlbmRlcmluZyBjb2RlCi1hbmQgbWFrZSBpdCBydW4gaW4gRWNsaXBzZS4gTW9zdCBvZiB0aGVzZSBzdHJhdGVnaWVzIGFyZSBpbXBsZW1lbnRlZCBoYW5kLWluLWhhbmQKLWJ5IHRoZSBicmlkZ2UgKHdoaWNoIHJ1bnMgaW4gRWNsaXBzZSkgYW5kIHRoZSBnZW5lcmF0b3IuCi0KLQotMS0gQ2xhc3MgSW5qZWN0aW9uCi0KLVRoaXMgaXMgdGhlIGVhc2llc3Q6IHdlIGN1cnJlbnRseSBpbmplY3QgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgotLSBPdmVycmlkZU1ldGhvZCBhbmQgaXRzIGFzc29jaWF0ZWQgTWV0aG9kTGlzdGVuZXIgYW5kIE1ldGhvZEFkYXB0ZXIgYXJlIHVzZWQKLSAgdG8gaW50ZXJjZXB0IGNhbGxzIHRvIHNvbWUgc3BlY2lmaWMgbWV0aG9kcyB0aGF0IGFyZSBzdHViYmVkIG91dCBhbmQgY2hhbmdlCi0gIHRoZWlyIHJldHVybiB2YWx1ZS4KLS0gQ3JlYXRlSW5mbyBjbGFzcywgd2hpY2ggY29uZmlndXJlZCB0aGUgZ2VuZXJhdG9yLiBOb3QgdXNlZCB5ZXQsIGJ1dCBjb3VsZAotICBpbiB0aGVvcnkgaGVscCB1cyB0cmFjayB3aGF0IHRoZSBnZW5lcmF0b3IgY2hhbmdlZC4KLS0gQXV0b0Nsb3NlYWJsZSBhbmQgT2JqZWN0cyBhcmUgcGFydCBvZiBKYXZhIDcuIFRvIGVuYWJsZSB1cyB0byBzdGlsbCBydW4gb24gSmF2YSA2LCBuZXcKLSAgY2xhc3NlcyBhcmUgaW5qZWN0ZWQuIFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlc2UgY2xhc3NlcyBoYXMgYmVlbiB0YWtlbiBmcm9tCi0gIEFuZHJvaWQncyBsaWJjb3JlIChwbGF0Zm9ybS9saWJjb3JlL2x1bmkvc3JjL21haW4vamF2YS9qYXZhLy4uLikuCi0tIENoYXJzZXRzLCBJbnRlZ3JhbFRvU3RyaW5nIGFuZCBVbnNhZmVCeXRlU2VxdWVuY2UgYXJlIG5vdCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBKQVZBIFZNLgotICBUaGV5IGFyZSBhZGRlZCB0byB0aGUgRGFsdmlrIFZNIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBBbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIHZlcnkKLSAgY2xvc2UgdG8gdGhlIG9yaWdpbmFsICh3aGljaCBpcyBhdCBwbGF0Zm9ybS9saWJjb3JlL2x1bmkvc3JjL21haW4vamF2YS8uLi4pIGlzIGluamVjdGVkLgotICBTaW5jZSB0aGVzZSBjbGFzc2VlcyB3ZXJlIGluIHBhcnQgb2YgdGhlIGphdmEgcGFja2FnZSwgd2hlcmUgd2UgY2FuJ3QgaW5qZWN0IGNsYXNzZXMsCi0gIGFsbCByZWZlcmVuY2VzIHRvIHRoZXNlIGhhdmUgYmVlbiB1cGRhdGVkIChTZWUgc3RyYXRlZ3kgNC0gUmVmYWN0b3JpbmcgQ2xhc3NlcykuCi0KLQotMi0gT3ZlcnJpZGluZyBtZXRob2RzCi0KLUFzIGV4cGxhaW5lZCBlYXJsaWVyLCB0aGUgY3JlYXRvciBkb2Vzbid0IGhhdmUgYW55IHJlcGxhY2VtZW50IGNvZGUgZm9yCi1tZXRob2RzIHRvIG92ZXJyaWRlLiBJbnN0ZWFkIGl0IHJlbW92ZXMgdGhlIG9yaWdpbmFsIGNvZGUgYW5kIHJlcGxhY2VzIGl0Ci1ieSBhIGNhbGwgdG8gYSBzcGVjaWZpYyBPdmVyaWRkZU1ldGhvZC5pbnZva2VYKCkuIFRoZSBicmlkZ2UgdGhlbiByZWdpc3RlcnMKLWEgbGlzdGVuZXIgb24gdGhlIG1ldGhvZCBzaWduYXR1cmUgYW5kIGNhbiBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uLgotCi1UaGlzIHN0cmF0ZWd5IGlzIG5vdyBvYnNvbGV0ZSBhbmQgcmVwbGFjZWQgYnkgdGhlIG1ldGhvZCBkZWxlZ2F0ZXMuCi1TZWUgc3RyYXRlZ3kgNSBiZWxvdy4KLQotCi0zLSBSZW5hbWluZyBjbGFzc2VzCi0KLVRoaXMgc2ltcGx5IGNoYW5nZXMgdGhlIG5hbWUgb2YgYSBjbGFzcyBpbiBpdHMgZGVmaW5pdGlvbiwgYXMgd2VsbCBhcyBhbGwgaXRzCi1yZWZlcmVuY2VzIGluIGludGVybmFsIGlubmVyIGNsYXNzZXMgYW5kIG1ldGhvZHMuCi1DYWxscyBmcm9tIG90aGVyIGNsYXNzZXMgYXJlIG5vdCBtb2RpZmllZCAtLSB0aGV5IGtlZXAgcmVmZXJlbmNpbmcgdGhlIG9yaWdpbmFsCi1jbGFzcyBuYW1lLiBUaGlzIGFsbG93cyB0aGUgYnJpZGdlIHRvIGxpdGVyYWxseSByZXBsYWNlIGFuIGltcGxlbWVudGF0aW9uLgotCi1BbiBleGFtcGxlIHdpbGwgbWFrZSB0aGlzIGVhc2llcjogYW5kcm9pZC5ncmFwaGljcy5QYWludCBpcyB0aGUgbWFpbiBkcmF3aW5nCi1jbGFzcyB0aGF0IHdlIG5lZWQgdG8gcmVwbGFjZS4gVG8gZG8gc28sIHRoZSBnZW5lcmF0b3IgcmVuYW1lcyBQYWludCB0byBfb3JpZ2luYWxfUGFpbnQuCi1MYXRlciB0aGUgYnJpZGdlIHByb3ZpZGVzIGl0cyBvd24gcmVwbGFjZW1lbnQgdmVyc2lvbiBvZiBQYWludCB3aGljaCB3aWxsIGJlIHVzZWQKLWJ5IHRoZSByZXN0IG9mIHRoZSBBbmRyb2lkIHN0YWNrLiBUaGUgcmVwbGFjZW1lbnQgdmVyc2lvbiBvZiBQYWludCBjYW4gc3RpbGwgdXNlCi0oZWl0aGVyIGJ5IGluaGVyaXRhbmNlIG9yIGRlbGVnYXRpb24pIGFsbCB0aGUgb3JpZ2luYWwgbm9uLW5hdGl2ZSBjb2RlIG9mIF9vcmlnaW5hbF9QYWludAotaWYgaXQgc28gZGVzaXJlcy4KLQotU29tZSBvZiB0aGUgQW5kcm9pZCBjbGFzc2VzIGFyZSBiYXNpY2FsbHkgd3JhcHBlcnMgb3ZlciBuYXRpdmUgb2JqZWN0cyBhbmQgc2luY2UKLXdlIGRvbid0IGhhdmUgdGhlIG5hdGl2ZSBjb2RlIGluIEVjbGlwc2UsIHdlIG5lZWQgdG8gcHJvdmlkZSBhIGZ1bGwgYWx0ZXJuYXRlCi1pbXBsZW1lbnRhdGlvbi4gU3ViLWNsYXNzaW5nIGRvZXNuJ3Qgd29yayBhcyBzb21lIG5hdGl2ZSBtZXRob2RzIGFyZSBzdGF0aWMgYW5kCi13ZSBkb24ndCBjb250cm9sIG9iamVjdCBjcmVhdGlvbi4KLQotVGhpcyB3b24ndCByZW5hbWUvcmVwbGFjZSB0aGUgaW5uZXIgc3RhdGljIG1ldGhvZHMgb2YgYSBnaXZlbiBjbGFzcy4KLQotCi00LSBSZWZhY3RvcmluZyBjbGFzc2VzCi0KLVRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBSZW5hbWluZyBjbGFzc2VzIGV4Y2VwdCB0aGF0IGl0IGFsc28gdXBkYXRlcyB0aGUgcmVmZXJlbmNlIGluCi1hbGwgY2xhc3Nlcy4gVGhpcyBpcyBkb25lIGZvciBjbGFzc2VzIHdoaWNoIGFyZSBhZGRlZCB0byB0aGUgRGFsdmlrIFZNIGZvciBwZXJmb3JtYW5jZQotcmVhc29ucyBidXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBTdGFuZGFyZCBKYXZhIFZNLiBBbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlc2UgY2xhc3NlcwotaXMgYWxzbyBpbmplY3RlZC4KLQotCi01LSBNZXRob2QgZXJhc3VyZSBiYXNlZCBvbiByZXR1cm4gdHlwZQotCi1UaGlzIGlzIG1vc3RseSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIGJyaWRnZTogaW4gdGhlIFBhaW50IGNsYXNzCi1tZW50aW9uZWQgYWJvdmUsIHNvbWUgaW5uZXIgc3RhdGljIGNsYXNzZXMgYXJlIHVzZWQgdG8gcGFzcyBhcm91bmQKLWF0dHJpYnV0ZXMgKGUuZy4gRm9udE1ldHJpY3MsIG9yIHRoZSBTdHlsZSBlbnVtKSBhbmQgYWxsIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbgotaXMgbmF0aXZlLgotCi1JbiB0aGlzIGNhc2Ugd2UgaGF2ZSBhIHN0cmF0ZWd5IHRoYXQgdGVsbHMgdGhlIGdlbmVyYXRvciB0aGF0IGFueXRoaW5nIHJldHVybmluZywgZm9yCi1leGFtcGxlLCB0aGUgaW5uZXIgY2xhc3MgUGFpbnQkU3R5bGUgaW4gdGhlIFBhaW50IGNsYXNzIHNob3VsZCBiZSBkaXNjYXJkZWQgYW5kIHRoZQotYnJpZGdlIHdpbGwgcHJvdmlkZSBpdHMgb3duIGltcGxlbWVudGF0aW9uLgotCi0KLTYtIE1ldGhvZCBEZWxlZ2F0ZXMKLQotVGhpcyBzdHJhdGVneSBpcyB1c2VkIHRvIG92ZXJyaWRlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMuCi1HaXZlbiBhIG1ldGhvZCBTb21lQ2xhc3MuTWV0aG9kTmFtZSgpLCAxIG9yIDIgbWV0aG9kcyBhcmUgZ2VuZXJhdGVkOgotYS0gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBtZXRob2QgbmFtZWQgU29tZUNsYXNzLk1ldGhvZE5hbWVfT3JpZ2luYWwoKS4KLSAgIFRoZSBjb250ZW50IGlzIHRoZSBvcmlnaW5hbCBtZXRob2QgYXMtaXMgZnJvbSB0aGUgcmVhZGVyLgotICAgVGhpcyBzdGVwIGlzIG9taXR0ZWQgaWYgdGhlIG1ldGhvZCBpcyBuYXRpdmUsIHNpbmNlIGl0IGhhcyBubyBKYXZhIGltcGxlbWVudGF0aW9uLgotYi0gQSBicmFuZCBuZXcgaW1wbGVtZW50YXRpb24gb2YgU29tZUNsYXNzLk1ldGhvZE5hbWUoKSB3aGljaCBjYWxscyB0byBhCi0gICBub24tZXhpc3Rpbmcgc3RhdGljIG1ldGhvZCBuYW1lZCBTb21lQ2xhc3NfRGVsZWdhdGUuTWV0aG9kTmFtZSgpLgotICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgJ2RlbGVnYXRlJyBtZXRob2QgaXMgZG9uZSBpbiBsYXlvdXRsaWJfYnJpZ2RlLgotCi1UaGUgZGVsZWdhdGUgbWV0aG9kIGlzIGEgc3RhdGljIG1ldGhvZC4KLUlmIHRoZSBvcmlnaW5hbCBtZXRob2QgaXMgbm9uLXN0YXRpYywgdGhlIGRlbGVnYXRlIG1ldGhvZCByZWNlaXZlcyB0aGUgb3JpZ2luYWwgJ3RoaXMnCi1hcyBpdHMgZmlyc3QgYXJndW1lbnQuIElmIHRoZSBvcmlnaW5hbCBtZXRob2QgaXMgYW4gaW5uZXIgbm9uLXN0YXRpYyBtZXRob2QsIGl0IGFsc28KLXJlY2VpdmVzIHRoZSBpbm5lciAndGhpcycgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4KLQotCi0KLS0gUmVmZXJlbmNlcyAtCi0tLS0tLS0tLS0tLS0tLQotCi0KLVRoZSBKVk0gU3BlY2lmaWNhdGlvbiAybmQgZWRpdGlvbjoKLSAgaHR0cDovL2phdmEuc3VuLmNvbS9kb2NzL2Jvb2tzL2p2bXMvc2Vjb25kX2VkaXRpb24vaHRtbC9WTVNwZWNUT0MuZG9jLmh0bWwKLQotVW5kZXJzdGFuZGluZyBieXRlY29kZToKLSAgaHR0cDovL3d3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL2libS9saWJyYXJ5L2l0LWhhZ2dhcl9ieXRlY29kZS8KLQotQnl0ZWNvZGUgb3Bjb2RlIGxpc3Q6Ci0gIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmF2YV9ieXRlY29kZV9pbnN0cnVjdGlvbl9saXN0aW5ncwotCi1BU00gdXNlciBndWlkZToKLSAgaHR0cDovL2Rvd25sb2FkLmZvcmdlLm9iamVjdHdlYi5vcmcvYXNtL2FzbTQtZ3VpZGUucGRmCi0KLQotLS0KLWVuZApkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9tYW5pZmVzdC50eHQgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL21hbmlmZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM4ZTdmOS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL21hbmlmZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLU1haW4tQ2xhc3M6IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuTWFpbgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2Fubm90YXRpb25zL0xheW91dGxpYkRlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvYW5ub3RhdGlvbnMvTGF5b3V0bGliRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE0OGVhNi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvYW5ub3RhdGlvbnMvTGF5b3V0bGliRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9uczsKLQotaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKLWltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7Ci0KLS8qKgotICogRGVub3RlcyBhIG1ldGhvZCB0aGF0IGhhcyBiZWVuIGNvbnZlcnRlZCB0byBhIGRlbGVnYXRlIGJ5IGxheW91dGxpYl9jcmVhdGUuCi0gKi8KLUBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUpCi1wdWJsaWMgQGludGVyZmFjZSBMYXlvdXRsaWJEZWxlZ2F0ZSB7Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvYW5ub3RhdGlvbnMvTnVsbGFibGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9hbm5vdGF0aW9ucy9OdWxsYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjg5YzkyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9hbm5vdGF0aW9ucy9OdWxsYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zOwotCi1pbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOwotaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKLQotLyoqCi0gKiBEZW5vdGVzIGEgcGFyYW1ldGVyIG9yIGZpZWxkIGNhbiBiZSBudWxsLgotICogPHAvPgotICogV2hlbiBkZWNvcmF0aW5nIGEgbWV0aG9kIGNhbGwgcGFyYW1ldGVyLCB0aGlzIGRlbm90ZXMgdGhlIHBhcmFtZXRlciBjYW4KLSAqIGxlZ2l0aW1hdGVseSBiZSBudWxsIGFuZCB0aGUgbWV0aG9kIHdpbGwgZ3JhY2VmdWxseSBkZWFsIHdpdGggaXQuIFR5cGljYWxseSB1c2VkCi0gKiBvbiBvcHRpb25hbCBwYXJhbWV0ZXJzLgotICogPHAvPgotICogV2hlbiBkZWNvcmF0aW5nIGEgbWV0aG9kLCB0aGlzIGRlbm90ZXMgdGhlIG1ldGhvZCBtaWdodCBsZWdpdGltYXRlbHkgcmV0dXJuIG51bGwuCi0gKiA8cC8+Ci0gKiBUaGlzIGlzIGEgbWFya2VyIGFubm90YXRpb24gYW5kIGl0IGhhcyBubyBzcGVjaWZpYyBhdHRyaWJ1dGVzLgotICovCi1AUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCi1wdWJsaWMgQGludGVyZmFjZSBOdWxsYWJsZSB7Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvYW5ub3RhdGlvbnMvVmlzaWJsZUZvclRlc3RpbmcuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9hbm5vdGF0aW9ucy9WaXNpYmxlRm9yVGVzdGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGUwMTZiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9hbm5vdGF0aW9ucy9WaXNpYmxlRm9yVGVzdGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zOwotCi1pbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOwotaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKLQotLyoqCi0gKiBEZW5vdGVzIHRoYXQgdGhlIGNsYXNzLCBtZXRob2Qgb3IgZmllbGQgaGFzIGl0cyB2aXNpYmlsaXR5IHJlbGF4ZWQgc28KLSAqIHRoYXQgdW5pdCB0ZXN0cyBjYW4gYWNjZXNzIGl0LgotICogPHAvPgotICogVGhlIDxjb2RlPnZpc2liaWxpdHk8L2NvZGU+IGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIHNwZWNpZmljIHdoYXQgdGhlIG9yaWdpbmFsCi0gKiB2aXNpYmlsaXR5IHNob3VsZCBoYXZlIGJlZW4gaWYgaXQgaGFkIG5vdCBiZWVuIG1hZGUgcHVibGljIG9yIHBhY2thZ2UtcHJpdmF0ZSBmb3IgdGVzdGluZy4KLSAqIFRoZSBkZWZhdWx0IGlzIHRvIGNvbnNpZGVyIHRoZSBlbGVtZW50IHByaXZhdGUuCi0gKi8KLUBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKLXB1YmxpYyBAaW50ZXJmYWNlIFZpc2libGVGb3JUZXN0aW5nIHsKLSAgICAvKioKLSAgICAgKiBJbnRlbmRlZCB2aXNpYmlsaXR5IGlmIHRoZSBlbGVtZW50IGhhZCBub3QgYmVlbiBtYWRlIHB1YmxpYyBvciBwYWNrYWdlLXByaXZhdGUgZm9yCi0gICAgICogdGVzdGluZy4KLSAgICAgKi8KLSAgICBlbnVtIFZpc2liaWxpdHkgewotICAgICAgICAvKiogVGhlIGVsZW1lbnQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcHJvdGVjdGVkLiAqLwotICAgICAgICBQUk9URUNURUQsCi0gICAgICAgIC8qKiBUaGUgZWxlbWVudCBzaG91bGQgYmUgY29uc2lkZXJlZCBwYWNrYWdlLXByaXZhdGUuICovCi0gICAgICAgIFBBQ0tBR0UsCi0gICAgICAgIC8qKiBUaGUgZWxlbWVudCBzaG91bGQgYmUgY29uc2lkZXJlZCBwcml2YXRlLiAqLwotICAgICAgICBQUklWQVRFCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW50ZW5kZWQgdmlzaWJpbGl0eSBpZiB0aGUgZWxlbWVudCBoYWQgbm90IGJlZW4gbWFkZSBwdWJsaWMgb3IgcGFja2FnZS1wcml2YXRlIGZvciB0ZXN0aW5nLgotICAgICAqIElmIG5vdCBzcGVjaWZpZWQsIG9uZSBzaG91bGQgYXNzdW1lIHRoZSBlbGVtZW50IG9yaWdpbmFsbHkgaW50ZW5kZWQgdG8gYmUgcHJpdmF0ZS4KLSAgICAgKi8KLSAgICBWaXNpYmlsaXR5IHZpc2liaWxpdHkoKSBkZWZhdWx0IFZpc2liaWxpdHkuUFJJVkFURTsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQWJzdHJhY3RDbGFzc0FkYXB0ZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQWJzdHJhY3RDbGFzc0FkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJjYWEyNS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0Fic3RyYWN0Q2xhc3NBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkFubm90YXRpb25WaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkNsYXNzVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5GaWVsZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTGFiZWw7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5PcGNvZGVzOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLlR5cGU7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uc2lnbmF0dXJlLlNpZ25hdHVyZVJlYWRlcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5zaWduYXR1cmUuU2lnbmF0dXJlVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5zaWduYXR1cmUuU2lnbmF0dXJlV3JpdGVyOwotCi0vKioKLSAqIFByb3ZpZGVzIHRoZSBjb21tb24gY29kZSBmb3IgUmVuYW1lQ2xhc3NBZGFwdGVyIGFuZCBSZWZhY3RvckNsYXNzQWRhcHRlci4gSXQKLSAqIGdvZXMgdGhyb3VnaCB0aGUgY29tcGxldGUgY2xhc3MgYW5kIGZpbmRzIHJlZmVyZW5jZXMgdG8gb3RoZXIgY2xhc3Nlcy4gSXQKLSAqIHRoZW4gY2FsbHMge0BsaW5rICNyZW5hbWVJbnRlcm5hbFR5cGUoU3RyaW5nKX0gdG8gY29udmVydCB0aGUgY2xhc3NOYW1lIHRvCi0gKiB0aGUgbmV3IHZhbHVlLCBpZiBuZWVkIGJlLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDbGFzc0FkYXB0ZXIgZXh0ZW5kcyBDbGFzc1Zpc2l0b3IgewotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbmV3IEZRQ04gZm9yIHRoZSBjbGFzcywgaWYgdGhlIHJlZmVyZW5jZSB0byB0aGlzIGNsYXNzIG5lZWRzCi0gICAgICogdG8gYmUgdXBkYXRlZC4gRWxzZSwgaXQgcmV0dXJucyB0aGUgc2FtZSBzdHJpbmcuCi0gICAgICogQHBhcmFtIG5hbWUgT2xkIEZRQ04KLSAgICAgKiBAcmV0dXJuIE5ldyBGUUNOIGlmIGl0IG5lZWRzIHRvIGJlIHJlbmFtZWQsIGVsc2UgdGhlIG9sZCBGUUNOCi0gICAgICovCi0gICAgYWJzdHJhY3QgU3RyaW5nIHJlbmFtZUludGVybmFsVHlwZShTdHJpbmcgbmFtZSk7Ci0KLSAgICBwdWJsaWMgQWJzdHJhY3RDbGFzc0FkYXB0ZXIoQ2xhc3NWaXNpdG9yIGN2KSB7Ci0gICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCwgY3YpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbmFtZXMgYSB0eXBlIGRlc2NyaXB0b3IsIGUuZy4gIkxjb20ucGFja2FnZS5NeUNsYXNzOyIKLSAgICAgKiBJZiB0aGUgdHlwZSBkb2Vzbid0IG5lZWQgdG8gYmUgcmVuYW1lZCwgcmV0dXJucyB0aGUgaW5wdXQgc3RyaW5nIGFzLWlzLgotICAgICAqLwotICAgIFN0cmluZyByZW5hbWVUeXBlRGVzYyhTdHJpbmcgZGVzYykgewotICAgICAgICBpZiAoZGVzYyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZW5hbWVUeXBlKFR5cGUuZ2V0VHlwZShkZXNjKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVuYW1lcyBhbiBvYmplY3QgdHlwZSwgZS5nLiAiTGNvbS5wYWNrYWdlLk15Q2xhc3M7IiBvciBhbiBhcnJheSB0eXBlIHRoYXQgaGFzIGFuCi0gICAgICogb2JqZWN0IGVsZW1lbnQsIGUuZy4gIltMY29tLnBhY2thZ2UuTXlDbGFzczsiCi0gICAgICogSWYgdGhlIHR5cGUgZG9lc24ndCBuZWVkIHRvIGJlIHJlbmFtZWQsIHJldHVybnMgdGhlIGludGVybmFsIG5hbWUgb2YgdGhlIGlucHV0IHR5cGUuCi0gICAgICovCi0gICAgU3RyaW5nIHJlbmFtZVR5cGUoVHlwZSB0eXBlKSB7Ci0gICAgICAgIGlmICh0eXBlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5cGUuZ2V0U29ydCgpID09IFR5cGUuT0JKRUNUKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaW4gPSB0eXBlLmdldEludGVybmFsTmFtZSgpOwotICAgICAgICAgICAgcmV0dXJuICJMIiArIHJlbmFtZUludGVybmFsVHlwZShpbikgKyAiOyI7Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZS5nZXRTb3J0KCkgPT0gVHlwZS5BUlJBWSkgewotICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBuID0gdHlwZS5nZXREaW1lbnNpb25zKCk7IG4gPiAwOyBuLS0pIHsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJ1snKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNiLmFwcGVuZChyZW5hbWVUeXBlKHR5cGUuZ2V0RWxlbWVudFR5cGUoKSkpOwotICAgICAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHR5cGUuZ2V0RGVzY3JpcHRvcigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbmFtZXMgYW4gb2JqZWN0IHR5cGUsIGUuZy4gIkxjb20ucGFja2FnZS5NeUNsYXNzOyIgb3IgYW4gYXJyYXkgdHlwZSB0aGF0IGhhcyBhbgotICAgICAqIG9iamVjdCBlbGVtZW50LCBlLmcuICJbTGNvbS5wYWNrYWdlLk15Q2xhc3M7Ii4KLSAgICAgKiBUaGlzIGlzIGxpa2UgcmVuYW1lVHlwZSgpIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgYSBUeXBlIG9iamVjdC4KLSAgICAgKiBJZiB0aGUgdHlwZSBkb2Vzbid0IG5lZWQgdG8gYmUgcmVuYW1lZCwgcmV0dXJucyB0aGUgaW5wdXQgdHlwZSBvYmplY3QuCi0gICAgICovCi0gICAgVHlwZSByZW5hbWVUeXBlQXNUeXBlKFR5cGUgdHlwZSkgewotICAgICAgICBpZiAodHlwZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0eXBlLmdldFNvcnQoKSA9PSBUeXBlLk9CSkVDVCkgewotICAgICAgICAgICAgU3RyaW5nIGluID0gdHlwZS5nZXRJbnRlcm5hbE5hbWUoKTsKLSAgICAgICAgICAgIFN0cmluZyBuZXdJbiA9IHJlbmFtZUludGVybmFsVHlwZShpbik7Ci0gICAgICAgICAgICBpZiAobmV3SW4gIT0gaW4pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gVHlwZS5nZXRUeXBlKCJMIiArIG5ld0luICsgIjsiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh0eXBlLmdldFNvcnQoKSA9PSBUeXBlLkFSUkFZKSB7Ci0gICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgICAgICAgIGZvciAoaW50IG4gPSB0eXBlLmdldERpbWVuc2lvbnMoKTsgbiA+IDA7IG4tLSkgewotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgnWycpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2IuYXBwZW5kKHJlbmFtZVR5cGUodHlwZS5nZXRFbGVtZW50VHlwZSgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gVHlwZS5nZXRUeXBlKHNiLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0eXBlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbmFtZXMgYSBtZXRob2QgZGVzY3JpcHRvciwgaS5lLiBhcHBsaWVzIHJlbmFtZVR5cGUgdG8gYWxsIGFyZ3VtZW50cyBhbmQgdG8gdGhlCi0gICAgICogcmV0dXJuIHZhbHVlLgotICAgICAqLwotICAgIFN0cmluZyByZW5hbWVNZXRob2REZXNjKFN0cmluZyBkZXNjKSB7Ci0gICAgICAgIGlmIChkZXNjID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgVHlwZVtdIGFyZ3MgPSBUeXBlLmdldEFyZ3VtZW50VHlwZXMoZGVzYyk7Ci0KLSAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCIoIik7Ci0gICAgICAgIGZvciAoVHlwZSBhcmcgOiBhcmdzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHJlbmFtZVR5cGUoYXJnKTsKLSAgICAgICAgICAgIHNiLmFwcGVuZChuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBzYi5hcHBlbmQoJyknKTsKLQotICAgICAgICBUeXBlIHJldCA9IFR5cGUuZ2V0UmV0dXJuVHlwZShkZXNjKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSByZW5hbWVUeXBlKHJldCk7Ci0gICAgICAgIHNiLmFwcGVuZChuYW1lKTsKLQotICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFJlbmFtZXMgdGhlIENsYXNzU2lnbmF0dXJlIGhhbmRsZWQgYnkgQ2xhc3NWaXNpdG9yLnZpc2l0Ci0gICAgICogb3IgdGhlIE1ldGhvZFR5cGVTaWduYXR1cmUgaGFuZGxlZCBieSBDbGFzc1Zpc2l0b3IudmlzaXRNZXRob2QuCi0gICAgICovCi0gICAgU3RyaW5nIHJlbmFtZVR5cGVTaWduYXR1cmUoU3RyaW5nIHNpZykgewotICAgICAgICBpZiAoc2lnID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIFNpZ25hdHVyZVJlYWRlciByZWFkZXIgPSBuZXcgU2lnbmF0dXJlUmVhZGVyKHNpZyk7Ci0gICAgICAgIFNpZ25hdHVyZVdyaXRlciB3cml0ZXIgPSBuZXcgU2lnbmF0dXJlV3JpdGVyKCk7Ci0gICAgICAgIHJlYWRlci5hY2NlcHQobmV3IFJlbmFtZVNpZ25hdHVyZUFkYXB0ZXIod3JpdGVyKSk7Ci0gICAgICAgIHNpZyA9IHdyaXRlci50b1N0cmluZygpOwotICAgICAgICByZXR1cm4gc2lnOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogUmVuYW1lcyB0aGUgRmllbGRUeXBlU2lnbmF0dXJlIGhhbmRsZWQgYnkgQ2xhc3NWaXNpdG9yLnZpc2l0RmllbGQKLSAgICAgKiBvciBNZXRob2RWaXNpdG9yLnZpc2l0TG9jYWxWYXJpYWJsZS4KLSAgICAgKi8KLSAgICBTdHJpbmcgcmVuYW1lRmllbGRTaWduYXR1cmUoU3RyaW5nIHNpZykgewotICAgICAgICByZXR1cm4gcmVuYW1lVHlwZVNpZ25hdHVyZShzaWcpOwotICAgIH0KLQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gTWV0aG9kcyBmcm9tIHRoZSBDbGFzc0FkYXB0ZXIKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0KGludCB2ZXJzaW9uLCBpbnQgYWNjZXNzLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNpZ25hdHVyZSwKLSAgICAgICAgICAgIFN0cmluZyBzdXBlck5hbWUsIFN0cmluZ1tdIGludGVyZmFjZXMpIHsKLSAgICAgICAgbmFtZSA9IHJlbmFtZUludGVybmFsVHlwZShuYW1lKTsKLSAgICAgICAgc3VwZXJOYW1lID0gcmVuYW1lSW50ZXJuYWxUeXBlKHN1cGVyTmFtZSk7Ci0gICAgICAgIHNpZ25hdHVyZSA9IHJlbmFtZVR5cGVTaWduYXR1cmUoc2lnbmF0dXJlKTsKLSAgICAgICAgaWYgKGludGVyZmFjZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50ZXJmYWNlc1tpXSA9IHJlbmFtZUludGVybmFsVHlwZShpbnRlcmZhY2VzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHN1cGVyLnZpc2l0KHZlcnNpb24sIGFjY2VzcywgbmFtZSwgc2lnbmF0dXJlLCBzdXBlck5hbWUsIGludGVyZmFjZXMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0SW5uZXJDbGFzcyhTdHJpbmcgbmFtZSwgU3RyaW5nIG91dGVyTmFtZSwgU3RyaW5nIGlubmVyTmFtZSwgaW50IGFjY2VzcykgewotICAgICAgICBuYW1lID0gcmVuYW1lSW50ZXJuYWxUeXBlKG5hbWUpOwotICAgICAgICBvdXRlck5hbWUgPSByZW5hbWVJbnRlcm5hbFR5cGUob3V0ZXJOYW1lKTsKLSAgICAgICAgc3VwZXIudmlzaXRJbm5lckNsYXNzKG5hbWUsIG91dGVyTmFtZSwgaW5uZXJOYW1lLCBhY2Nlc3MpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0T3V0ZXJDbGFzcyhTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICBzdXBlci52aXNpdE91dGVyQ2xhc3MocmVuYW1lSW50ZXJuYWxUeXBlKG93bmVyKSwgbmFtZSwgcmVuYW1lVHlwZURlc2MoZGVzYykpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBNZXRob2RWaXNpdG9yIHZpc2l0TWV0aG9kKGludCBhY2Nlc3MsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmUsIFN0cmluZ1tdIGV4Y2VwdGlvbnMpIHsKLSAgICAgICAgZGVzYyA9IHJlbmFtZU1ldGhvZERlc2MoZGVzYyk7Ci0gICAgICAgIHNpZ25hdHVyZSA9IHJlbmFtZVR5cGVTaWduYXR1cmUoc2lnbmF0dXJlKTsKLSAgICAgICAgTWV0aG9kVmlzaXRvciBtdyA9IHN1cGVyLnZpc2l0TWV0aG9kKGFjY2VzcywgbmFtZSwgZGVzYywgc2lnbmF0dXJlLCBleGNlcHRpb25zKTsKLSAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVNZXRob2RBZGFwdGVyKG13KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBbm5vdGF0aW9uKFN0cmluZyBkZXNjLCBib29sZWFuIHZpc2libGUpIHsKLSAgICAgICAgZGVzYyA9IHJlbmFtZVR5cGVEZXNjKGRlc2MpOwotICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRBbm5vdGF0aW9uKGRlc2MsIHZpc2libGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBGaWVsZFZpc2l0b3IgdmlzaXRGaWVsZChpbnQgYWNjZXNzLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsCi0gICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlLCBPYmplY3QgdmFsdWUpIHsKLSAgICAgICAgZGVzYyA9IHJlbmFtZVR5cGVEZXNjKGRlc2MpOwotICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRGaWVsZChhY2Nlc3MsIG5hbWUsIGRlc2MsIHNpZ25hdHVyZSwgdmFsdWUpOwotICAgIH0KLQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvKioKLSAgICAgKiBBIG1ldGhvZCB2aXNpdG9yIHRoYXQgcmVuYW1lcyBhbGwgcmVmZXJlbmNlcyBmcm9tIGFuIG9sZCBjbGFzcyBuYW1lIHRvIGEgbmV3IGNsYXNzIG5hbWUuCi0gICAgICovCi0gICAgcHVibGljIGNsYXNzIFJlbmFtZU1ldGhvZEFkYXB0ZXIgZXh0ZW5kcyBNZXRob2RWaXNpdG9yIHsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIG1ldGhvZCB2aXNpdG9yIHRoYXQgcmVuYW1lcyBhbGwgcmVmZXJlbmNlcyBmcm9tIGEgZ2l2ZW4gb2xkIG5hbWUgdG8gYSBnaXZlbiBuZXcKLSAgICAgICAgICogbmFtZS4gVGhlIG1ldGhvZCB2aXNpdG9yIHdpbGwgYWxzbyByZW5hbWUgYWxsIGlubmVyIGNsYXNzZXMuCi0gICAgICAgICAqIFRoZSBuYW1lcyBtdXN0IGJlIGZ1bGwgcXVhbGlmaWVkIGludGVybmFsIEFTTSBuYW1lcyAoZS5nLiBjb20vYmxhaC9NeUNsYXNzJElubmVyQ2xhc3MpLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFJlbmFtZU1ldGhvZEFkYXB0ZXIoTWV0aG9kVmlzaXRvciBtdikgewotICAgICAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000LCBtdik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0QW5ub3RhdGlvbihTdHJpbmcgZGVzYywgYm9vbGVhbiB2aXNpYmxlKSB7Ci0gICAgICAgICAgICBkZXNjID0gcmVuYW1lVHlwZURlc2MoZGVzYyk7Ci0KLSAgICAgICAgICAgIHJldHVybiBzdXBlci52aXNpdEFubm90YXRpb24oZGVzYywgdmlzaWJsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0UGFyYW1ldGVyQW5ub3RhdGlvbihpbnQgcGFyYW1ldGVyLCBTdHJpbmcgZGVzYywgYm9vbGVhbiB2aXNpYmxlKSB7Ci0gICAgICAgICAgICBkZXNjID0gcmVuYW1lVHlwZURlc2MoZGVzYyk7Ci0KLSAgICAgICAgICAgIHJldHVybiBzdXBlci52aXNpdFBhcmFtZXRlckFubm90YXRpb24ocGFyYW1ldGVyLCBkZXNjLCB2aXNpYmxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVJbnNuKGludCBvcGNvZGUsIFN0cmluZyB0eXBlKSB7Ci0gICAgICAgICAgICAvLyBUaGUgdHlwZSBzb21ldGltZXMgdHVybnMgb3V0IHRvIGJlIGEgdHlwZSBkZXNjcmlwdG9yLiBXZSB0cnkgdG8gZGV0ZWN0IGl0IGFuZCBmaXguCi0gICAgICAgICAgICBpZiAodHlwZS5pbmRleE9mKCc7JykgPiAwKSB7Ci0gICAgICAgICAgICAgICAgdHlwZSA9IHJlbmFtZVR5cGVEZXNjKHR5cGUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0eXBlID0gcmVuYW1lSW50ZXJuYWxUeXBlKHR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3VwZXIudmlzaXRUeXBlSW5zbihvcGNvZGUsIHR5cGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RmllbGRJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjKSB7Ci0gICAgICAgICAgICBvd25lciA9IHJlbmFtZUludGVybmFsVHlwZShvd25lcik7Ci0gICAgICAgICAgICBkZXNjID0gcmVuYW1lVHlwZURlc2MoZGVzYyk7Ci0KLSAgICAgICAgICAgIHN1cGVyLnZpc2l0RmllbGRJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICAgICAgLy8gVGhlIG93bmVyIHNvbWV0aW1lcyB0dXJucyBvdXQgdG8gYmUgYSB0eXBlIGRlc2NyaXB0b3IuIFdlIHRyeSB0byBkZXRlY3QgaXQgYW5kIGZpeC4KLSAgICAgICAgICAgIGlmIChvd25lci5pbmRleE9mKCc7JykgPiAwKSB7Ci0gICAgICAgICAgICAgICAgb3duZXIgPSByZW5hbWVUeXBlRGVzYyhvd25lcik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG93bmVyID0gcmVuYW1lSW50ZXJuYWxUeXBlKG93bmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc2MgPSByZW5hbWVNZXRob2REZXNjKGRlc2MpOwotCi0gICAgICAgICAgICBzdXBlci52aXNpdE1ldGhvZEluc24ob3Bjb2RlLCBvd25lciwgbmFtZSwgZGVzYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdmlzaXRMZGNJbnNuKE9iamVjdCBjc3QpIHsKLSAgICAgICAgICAgIC8vIElmIGNzdCBpcyBhIFR5cGUsIHRoaXMgbWVhbnMgdGhlIGNvZGUgaXMgdHJ5aW5nIHRvIHB1bGwgdGhlIC5jbGFzcyBjb25zdGFudAotICAgICAgICAgICAgLy8gZm9yIHRoaXMgY2xhc3MsIHNvIGl0IG5lZWRzIHRvIGJlIHJlbmFtZWQgdG9vLgotICAgICAgICAgICAgaWYgKGNzdCBpbnN0YW5jZW9mIFR5cGUpIHsKLSAgICAgICAgICAgICAgICBjc3QgPSByZW5hbWVUeXBlQXNUeXBlKChUeXBlKSBjc3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3VwZXIudmlzaXRMZGNJbnNuKGNzdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdmlzaXRNdWx0aUFOZXdBcnJheUluc24oU3RyaW5nIGRlc2MsIGludCBkaW1zKSB7Ci0gICAgICAgICAgICBkZXNjID0gcmVuYW1lVHlwZURlc2MoZGVzYyk7Ci0KLSAgICAgICAgICAgIHN1cGVyLnZpc2l0TXVsdGlBTmV3QXJyYXlJbnNuKGRlc2MsIGRpbXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0VHJ5Q2F0Y2hCbG9jayhMYWJlbCBzdGFydCwgTGFiZWwgZW5kLCBMYWJlbCBoYW5kbGVyLCBTdHJpbmcgdHlwZSkgewotICAgICAgICAgICAgdHlwZSA9IHJlbmFtZUludGVybmFsVHlwZSh0eXBlKTsKLQotICAgICAgICAgICAgc3VwZXIudmlzaXRUcnlDYXRjaEJsb2NrKHN0YXJ0LCBlbmQsIGhhbmRsZXIsIHR5cGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TG9jYWxWYXJpYWJsZShTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsIFN0cmluZyBzaWduYXR1cmUsCi0gICAgICAgICAgICAgICAgTGFiZWwgc3RhcnQsIExhYmVsIGVuZCwgaW50IGluZGV4KSB7Ci0gICAgICAgICAgICBkZXNjID0gcmVuYW1lVHlwZURlc2MoZGVzYyk7Ci0gICAgICAgICAgICBzaWduYXR1cmUgPSByZW5hbWVGaWVsZFNpZ25hdHVyZShzaWduYXR1cmUpOwotCi0gICAgICAgICAgICBzdXBlci52aXNpdExvY2FsVmFyaWFibGUobmFtZSwgZGVzYywgc2lnbmF0dXJlLCBzdGFydCwgZW5kLCBpbmRleCk7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcHVibGljIGNsYXNzIFJlbmFtZVNpZ25hdHVyZUFkYXB0ZXIgZXh0ZW5kcyBTaWduYXR1cmVWaXNpdG9yIHsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIFNpZ25hdHVyZVZpc2l0b3IgbVN2OwotCi0gICAgICAgIHB1YmxpYyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKFNpZ25hdHVyZVZpc2l0b3Igc3YpIHsKLSAgICAgICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7Ci0gICAgICAgICAgICBtU3YgPSBzdjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdENsYXNzVHlwZShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgbmFtZSA9IHJlbmFtZUludGVybmFsVHlwZShuYW1lKTsKLSAgICAgICAgICAgIG1Tdi52aXNpdENsYXNzVHlwZShuYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdElubmVyQ2xhc3NUeXBlKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICBuYW1lID0gcmVuYW1lSW50ZXJuYWxUeXBlKG5hbWUpOwotICAgICAgICAgICAgbVN2LnZpc2l0SW5uZXJDbGFzc1R5cGUobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFNpZ25hdHVyZVZpc2l0b3IgdmlzaXRBcnJheVR5cGUoKSB7Ci0gICAgICAgICAgICBTaWduYXR1cmVWaXNpdG9yIHN2ID0gbVN2LnZpc2l0QXJyYXlUeXBlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFJlbmFtZVNpZ25hdHVyZUFkYXB0ZXIoc3YpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0QmFzZVR5cGUoY2hhciBkZXNjcmlwdG9yKSB7Ci0gICAgICAgICAgICBtU3YudmlzaXRCYXNlVHlwZShkZXNjcmlwdG9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdENsYXNzQm91bmQoKSB7Ci0gICAgICAgICAgICBTaWduYXR1cmVWaXNpdG9yIHN2ID0gbVN2LnZpc2l0Q2xhc3NCb3VuZCgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKHN2KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEVuZCgpIHsKLSAgICAgICAgICAgIG1Tdi52aXNpdEVuZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0RXhjZXB0aW9uVHlwZSgpIHsKLSAgICAgICAgICAgIFNpZ25hdHVyZVZpc2l0b3Igc3YgPSBtU3YudmlzaXRFeGNlcHRpb25UeXBlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFJlbmFtZVNpZ25hdHVyZUFkYXB0ZXIoc3YpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0Rm9ybWFsVHlwZVBhcmFtZXRlcihTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgbVN2LnZpc2l0Rm9ybWFsVHlwZVBhcmFtZXRlcihuYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdEludGVyZmFjZSgpIHsKLSAgICAgICAgICAgIFNpZ25hdHVyZVZpc2l0b3Igc3YgPSBtU3YudmlzaXRJbnRlcmZhY2UoKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUmVuYW1lU2lnbmF0dXJlQWRhcHRlcihzdik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFNpZ25hdHVyZVZpc2l0b3IgdmlzaXRJbnRlcmZhY2VCb3VuZCgpIHsKLSAgICAgICAgICAgIFNpZ25hdHVyZVZpc2l0b3Igc3YgPSBtU3YudmlzaXRJbnRlcmZhY2VCb3VuZCgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKHN2KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFBhcmFtZXRlclR5cGUoKSB7Ci0gICAgICAgICAgICBTaWduYXR1cmVWaXNpdG9yIHN2ID0gbVN2LnZpc2l0UGFyYW1ldGVyVHlwZSgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKHN2KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFJldHVyblR5cGUoKSB7Ci0gICAgICAgICAgICBTaWduYXR1cmVWaXNpdG9yIHN2ID0gbVN2LnZpc2l0UmV0dXJuVHlwZSgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKHN2KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFN1cGVyY2xhc3MoKSB7Ci0gICAgICAgICAgICBTaWduYXR1cmVWaXNpdG9yIHN2ID0gbVN2LnZpc2l0U3VwZXJjbGFzcygpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKHN2KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVBcmd1bWVudCgpIHsKLSAgICAgICAgICAgIG1Tdi52aXNpdFR5cGVBcmd1bWVudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0VHlwZUFyZ3VtZW50KGNoYXIgd2lsZGNhcmQpIHsKLSAgICAgICAgICAgIFNpZ25hdHVyZVZpc2l0b3Igc3YgPSBtU3YudmlzaXRUeXBlQXJndW1lbnQod2lsZGNhcmQpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKHN2KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVWYXJpYWJsZShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgbVN2LnZpc2l0VHlwZVZhcmlhYmxlKG5hbWUpOwotICAgICAgICB9Ci0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUFuYWx5emVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUFuYWx5emVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NzJhNDAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Bc21BbmFseXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5Bbm5vdGF0aW9uVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5BdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NSZWFkZXI7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkZpZWxkVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5MYWJlbDsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5NZXRob2RWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk9wY29kZXM7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uVHlwZTsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5zaWduYXR1cmUuU2lnbmF0dXJlUmVhZGVyOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLnNpZ25hdHVyZS5TaWduYXR1cmVWaXNpdG9yOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEVudHJ5OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRmlsZTsKLQotLyoqCi0gKiBBbmFseXplcyB0aGUgaW5wdXQgSkFSIHVzaW5nIHRoZSBBU00gamF2YSBieXRlY29kZSBtYW5pcHVsYXRpb24gbGlicmFyeQotICogdG8gbGlzdCB0aGUgZGVzaXJlZCBjbGFzc2VzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBc21BbmFseXplciB7Ci0KLSAgICAvLyBOb3RlOiBhIGJ1bmNoIG9mIHN0dWZmIGhhcyBwYWNrYWdlLWxldmVsIGFjY2VzcyBmb3IgdW5pdCB0ZXN0cy4gQ29uc2lkZXIgaXQgcHJpdmF0ZS4KLQotICAgIC8qKiBPdXRwdXQgbG9nZ2VyLiAqLwotICAgIHByaXZhdGUgZmluYWwgTG9nIG1Mb2c7Ci0gICAgLyoqIFRoZSBpbnB1dCBzb3VyY2UgSkFSIHRvIHBhcnNlLiAqLwotICAgIHByaXZhdGUgZmluYWwgTGlzdDxTdHJpbmc+IG1Pc1NvdXJjZUphcjsKLSAgICAvKiogVGhlIGdlbmVyYXRvciB0byBmaWxsIHdpdGggdGhlIGNsYXNzIGxpc3QgYW5kIGRlcGVuZGVuY3kgbGlzdC4gKi8KLSAgICBwcml2YXRlIGZpbmFsIEFzbUdlbmVyYXRvciBtR2VuOwotICAgIC8qKiBLZWVwIGFsbCBjbGFzc2VzIHRoYXQgZGVyaXZlIGZyb20gdGhlc2Ugb25lICh0aGVzZSBpbmNsdWRlZCkuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBtRGVyaXZlRnJvbTsKLSAgICAvKiogR2xvYiBwYXR0ZXJucyBvZiBjbGFzc2VzIHRvIGtlZXAsIGUuZy4gImNvbS5mb28uKiIgKi8KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZ1tdIG1JbmNsdWRlR2xvYnM7Ci0gICAgLyoqIFRoZSBzZXQgb2YgY2xhc3NlcyB0byBleGNsdWRlLiovCi0gICAgcHJpdmF0ZSBmaW5hbCBTZXQ8U3RyaW5nPiBtRXhjbHVkZWRDbGFzc2VzOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBhbmFseXplci4KLSAgICAgKgotICAgICAqIEBwYXJhbSBsb2cgVGhlIGxvZyBvdXRwdXQuCi0gICAgICogQHBhcmFtIG9zSmFyUGF0aCBUaGUgaW5wdXQgc291cmNlIEpBUnMgdG8gcGFyc2UuCi0gICAgICogQHBhcmFtIGdlbiBUaGUgZ2VuZXJhdG9yIHRvIGZpbGwgd2l0aCB0aGUgY2xhc3MgbGlzdCBhbmQgZGVwZW5kZW5jeSBsaXN0LgotICAgICAqIEBwYXJhbSBkZXJpdmVGcm9tIEtlZXAgYWxsIGNsYXNzZXMgdGhhdCBkZXJpdmUgZnJvbSB0aGVzZSBvbmUgKHRoZXNlIGluY2x1ZGVkKS4KLSAgICAgKiBAcGFyYW0gaW5jbHVkZUdsb2JzIEdsb2IgcGF0dGVybnMgb2YgY2xhc3NlcyB0byBrZWVwLCBlLmcuICJjb20uZm9vLioiCi0gICAgICogICAgICAgICgiKiIgZG9lcyBub3QgbWF0Y2hlcyBkb3RzIHdoaWxzdCAiKioiIGRvZXMsICIuIiBhbmQgIiQiIGFyZSBpbnRlcnByZXRlZCBhcy1pcykKLSAgICAgKi8KLSAgICBwdWJsaWMgQXNtQW5hbHl6ZXIoTG9nIGxvZywgTGlzdDxTdHJpbmc+IG9zSmFyUGF0aCwgQXNtR2VuZXJhdG9yIGdlbiwKLSAgICAgICAgICAgIFN0cmluZ1tdIGRlcml2ZUZyb20sIFN0cmluZ1tdIGluY2x1ZGVHbG9icywgU2V0PFN0cmluZz4gZXhjbHVkZUNsYXNzZXMpIHsKLSAgICAgICAgbUxvZyA9IGxvZzsKLSAgICAgICAgbUdlbiA9IGdlbjsKLSAgICAgICAgbU9zU291cmNlSmFyID0gb3NKYXJQYXRoICE9IG51bGwgPyBvc0phclBhdGggOiBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLSAgICAgICAgbURlcml2ZUZyb20gPSBkZXJpdmVGcm9tICE9IG51bGwgPyBkZXJpdmVGcm9tIDogbmV3IFN0cmluZ1swXTsKLSAgICAgICAgbUluY2x1ZGVHbG9icyA9IGluY2x1ZGVHbG9icyAhPSBudWxsID8gaW5jbHVkZUdsb2JzIDogbmV3IFN0cmluZ1swXTsKLSAgICAgICAgbUV4Y2x1ZGVkQ2xhc3NlcyA9IGV4Y2x1ZGVDbGFzc2VzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0YXJ0cyB0aGUgYW5hbHlzaXMgdXNpbmcgcGFyYW1ldGVycyBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KLSAgICAgKiBGaWxscyB0aGUgZ2VuZXJhdG9yIHdpdGggY2xhc3NlcyAmIGRlcGVuZGVuY2llcyBmb3VuZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhbmFseXplKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBMb2dBYm9ydEV4Y2VwdGlvbiB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzID0gcGFyc2VaaXAobU9zU291cmNlSmFyKTsKLSAgICAgICAgbUxvZy5pbmZvKCJGb3VuZCAlZCBjbGFzc2VzIGluIGlucHV0IEpBUiVzLiIsIHppcENsYXNzZXMuc2l6ZSgpLAotICAgICAgICAgICAgICAgIG1Pc1NvdXJjZUphci5zaXplKCkgPiAxID8gInMiIDogIiIpOwotCi0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBmb3VuZCA9IGZpbmRJbmNsdWRlcyh6aXBDbGFzc2VzKTsKLSAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGRlcHMgPSBmaW5kRGVwcyh6aXBDbGFzc2VzLCBmb3VuZCk7Ci0KLSAgICAgICAgaWYgKG1HZW4gIT0gbnVsbCkgewotICAgICAgICAgICAgbUdlbi5zZXRLZWVwKGZvdW5kKTsKLSAgICAgICAgICAgIG1HZW4uc2V0RGVwcyhkZXBzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBhcnNlcyBhIEpBUiBmaWxlIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgY2xhc3NlcyBmb3VuZHMgdXNpbmcgYSBtYXAKLSAgICAgKiBjbGFzcyBuYW1lID0+IEFTTSBDbGFzc1JlYWRlci4gQ2xhc3MgbmFtZXMgYXJlIGluIHRoZSBmb3JtICJhbmRyb2lkLnZpZXcuVmlldyIuCi0gICAgICovCi0gICAgTWFwPFN0cmluZyxDbGFzc1JlYWRlcj4gcGFyc2VaaXAoTGlzdDxTdHJpbmc+IGphclBhdGhMaXN0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGNsYXNzZXMgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotCi0gICAgICAgIGZvciAoU3RyaW5nIGphclBhdGggOiBqYXJQYXRoTGlzdCkgewotICAgICAgICAgICAgWmlwRmlsZSB6aXAgPSBuZXcgWmlwRmlsZShqYXJQYXRoKTsKLSAgICAgICAgICAgIEVudW1lcmF0aW9uPD8gZXh0ZW5kcyBaaXBFbnRyeT4gZW50cmllcyA9IHppcC5lbnRyaWVzKCk7Ci0gICAgICAgICAgICBaaXBFbnRyeSBlbnRyeTsKLSAgICAgICAgICAgIHdoaWxlIChlbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyaWVzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmdldE5hbWUoKS5lbmRzV2l0aCgiLmNsYXNzIikpIHsKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBuZXcgQ2xhc3NSZWFkZXIoemlwLmdldElucHV0U3RyZWFtKGVudHJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBjbGFzc1JlYWRlclRvQ2xhc3NOYW1lKGNyKTsKLSAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXQoY2xhc3NOYW1lLCBjcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNsYXNzZXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXRpbGl0eSB0aGF0IHJldHVybnMgdGhlIGZ1bGx5IHF1YWxpZmllZCBiaW5hcnkgY2xhc3MgbmFtZSBmb3IgYSBDbGFzc1JlYWRlci4KLSAgICAgKiBFLmcuIGl0IHJldHVybnMgc29tZXRoaW5nIGxpa2UgYW5kcm9pZC52aWV3LlZpZXcuCi0gICAgICovCi0gICAgc3RhdGljIFN0cmluZyBjbGFzc1JlYWRlclRvQ2xhc3NOYW1lKENsYXNzUmVhZGVyIGNsYXNzUmVhZGVyKSB7Ci0gICAgICAgIGlmIChjbGFzc1JlYWRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBjbGFzc1JlYWRlci5nZXRDbGFzc05hbWUoKS5yZXBsYWNlKCcvJywgJy4nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFV0aWxpdHkgdGhhdCByZXR1cm5zIHRoZSBmdWxseSBxdWFsaWZpZWQgYmluYXJ5IGNsYXNzIG5hbWUgZnJvbSBhIHBhdGgtbGlrZSBGUUNOLgotICAgICAqIEUuZy4gaXQgcmV0dXJucyBhbmRyb2lkLnZpZXcuVmlldyBmcm9tIGFuZHJvaWQvdmlldy9WaWV3LgotICAgICAqLwotICAgIHN0YXRpYyBTdHJpbmcgaW50ZXJuYWxUb0JpbmFyeUNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7Ci0gICAgICAgIGlmIChjbGFzc05hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnJlcGxhY2UoJy8nLCAnLicpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJvY2VzcyB0aGUgImluY2x1ZGVzIiBhcnJheXMuCi0gICAgICogPHAvPgotICAgICAqIFRoaXMgdXBkYXRlcyB0aGUgaW5fb3V0X2ZvdW5kIG1hcC4KLSAgICAgKi8KLSAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZmluZEluY2x1ZGVzKE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzKQotICAgICAgICAgICAgdGhyb3dzIExvZ0Fib3J0RXhjZXB0aW9uIHsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBmb3VuZCA9IG5ldyBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+KCk7Ci0KLSAgICAgICAgbUxvZy5kZWJ1ZygiRmluZCBjbGFzc2VzIHRvIGluY2x1ZGUuIik7Ci0KLSAgICAgICAgZm9yIChTdHJpbmcgcyA6IG1JbmNsdWRlR2xvYnMpIHsKLSAgICAgICAgICAgIGZpbmRHbG9icyhzLCB6aXBDbGFzc2VzLCBmb3VuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChTdHJpbmcgcyA6IG1EZXJpdmVGcm9tKSB7Ci0gICAgICAgICAgICBmaW5kQ2xhc3Nlc0Rlcml2aW5nRnJvbShzLCB6aXBDbGFzc2VzLCBmb3VuZCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZm91bmQ7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBVc2VzIEFTTSB0byBmaW5kIHRoZSBjbGFzcyByZWFkZXIgZm9yIHRoZSBnaXZlbiBGUUNOIGNsYXNzIG5hbWUuCi0gICAgICogSWYgZm91bmQsIGluc2VydCBpdCBpbiB0aGUgaW5fb3V0X2ZvdW5kIG1hcC4KLSAgICAgKiBSZXR1cm5zIHRoZSBjbGFzcyByZWFkZXIgb2JqZWN0LgotICAgICAqLwotICAgIENsYXNzUmVhZGVyIGZpbmRDbGFzcyhTdHJpbmcgY2xhc3NOYW1lLCBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gemlwQ2xhc3NlcywKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBpbk91dEZvdW5kKSB0aHJvd3MgTG9nQWJvcnRFeGNlcHRpb24gewotICAgICAgICBDbGFzc1JlYWRlciBjbGFzc1JlYWRlciA9IHppcENsYXNzZXMuZ2V0KGNsYXNzTmFtZSk7Ci0gICAgICAgIGlmIChjbGFzc1JlYWRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgTG9nQWJvcnRFeGNlcHRpb24oIkNsYXNzICVzIG5vdCBmb3VuZCBieSBBU00gaW4gJXMiLAotICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUsIG1Pc1NvdXJjZUphcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbk91dEZvdW5kLnB1dChjbGFzc05hbWUsIGNsYXNzUmVhZGVyKTsKLSAgICAgICAgcmV0dXJuIGNsYXNzUmVhZGVyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluc2VydCBpbiB0aGUgaW5PdXRGb3VuZCBtYXAgYWxsIGNsYXNzZXMgZm91bmQgaW4gemlwQ2xhc3NlcyB0aGF0IG1hdGNoIHRoZQotICAgICAqIGdpdmVuIGdsb2IgcGF0dGVybi4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhlIGdsb2IgcGF0dGVybiBpcyBub3QgYSByZWdleHAuIEl0IG9ubHkgYWNjZXB0cyB0aGUgIioiIGtleXdvcmQgdG8gbWVhbgotICAgICAqICJhbnl0aGluZyBidXQgYSBwZXJpb2QiLiBUaGUgIi4iIGFuZCAiJCIgY2hhcmFjdGVycyBtYXRjaCB0aGVtc2VsdmVzLgotICAgICAqIFRoZSAiKioiIGtleXdvcmQgbWVhbnMgZXZlcnl0aGluZyBpbmNsdWRpbmcgIi4iLgotICAgICAqIDxwLz4KLSAgICAgKiBFeGFtcGxlczoKLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPmNvbS5mb28uKiBtYXRjaGVzIGFsbCBjbGFzc2VzIGluIHRoZSBwYWNrYWdlIGNvbS5mb28gYnV0IE5PVCBzdWItcGFja2FnZXMuCi0gICAgICogPGxpPmNvbS5mb28qLiokRXZlbnQgbWF0Y2hlcyBhbGwgaW50ZXJuYWwgRXZlbnQgY2xhc3NlcyBpbiBhIGNvbS5mb28qLiogY2xhc3MuCi0gICAgICogPC91bD4KLSAgICAgKi8KLSAgICB2b2lkIGZpbmRHbG9icyhTdHJpbmcgZ2xvYlBhdHRlcm4sIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzLAotICAgICAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGluT3V0Rm91bmQpIHRocm93cyBMb2dBYm9ydEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHRyYW5zZm9ybXMgdGhlIGdsb2IgcGF0dGVybiBpbiBhIHJlZ2V4cDoKLSAgICAgICAgLy8gLSBlc2NhcGUgIi4iIHdpdGggIlwuIgotICAgICAgICAvLyAtIHJlcGxhY2UgIioiIGJ5ICJbXi5dKiIKLSAgICAgICAgLy8gLSBlc2NhcGUgIiQiIHdpdGggIlwkIgotICAgICAgICAvLyAtIGFkZCBlbmQtb2YtbGluZSBtYXRjaCAkCi0gICAgICAgIGdsb2JQYXR0ZXJuID0gZ2xvYlBhdHRlcm4ucmVwbGFjZUFsbCgiXFwkIiwgIlxcXFxcXCQiKTsKLSAgICAgICAgZ2xvYlBhdHRlcm4gPSBnbG9iUGF0dGVybi5yZXBsYWNlQWxsKCJcXC4iLCAiXFxcXC4iKTsKLSAgICAgICAgLy8gcHJldmVudCAqKiBmcm9tIGJlaW5nIGFsdGVyZWQgYnkgdGhlIG5leHQgcnVsZSwgdGhlbiBwcm9jZXNzIHRoZSAqIHJ1bGUgYW5kIGZpbmFsbHkKLSAgICAgICAgLy8gdGhlIHJlYWwgKiogcnVsZSAod2hpY2ggaXMgbm93IEApCi0gICAgICAgIGdsb2JQYXR0ZXJuID0gZ2xvYlBhdHRlcm4ucmVwbGFjZUFsbCgiXFwqXFwqIiwgIkAiKTsKLSAgICAgICAgZ2xvYlBhdHRlcm4gPSBnbG9iUGF0dGVybi5yZXBsYWNlQWxsKCJcXCoiLCAiW14uXSoiKTsKLSAgICAgICAgZ2xvYlBhdHRlcm4gPSBnbG9iUGF0dGVybi5yZXBsYWNlQWxsKCJAIiwgIi4qIik7Ci0gICAgICAgIGdsb2JQYXR0ZXJuICs9ICIkIjsKLQotICAgICAgICBQYXR0ZXJuIHJlZ2V4cCA9IFBhdHRlcm4uY29tcGlsZShnbG9iUGF0dGVybik7Ci0KLSAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIENsYXNzUmVhZGVyPiBlbnRyeSA6IHppcENsYXNzZXMuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgU3RyaW5nIGNsYXNzX25hbWUgPSBlbnRyeS5nZXRLZXkoKTsKLSAgICAgICAgICAgIGlmIChyZWdleHAubWF0Y2hlcihjbGFzc19uYW1lKS5tYXRjaGVzKCkpIHsKLSAgICAgICAgICAgICAgICBmaW5kQ2xhc3MoY2xhc3NfbmFtZSwgemlwQ2xhc3NlcywgaW5PdXRGb3VuZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgYWxsIHRoZSBjbGFzc2VzIGRlZmluZWQgaW4gdGhlIEphckNsYXNzTmFtZSBpbnN0YW5jZSBhbmQgdXNlcyBCQ0VMIHRvCi0gICAgICogZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGRlcml2ZWQgZnJvbSB0aGUgZ2l2ZW4gRlFDTiBzdXBlciBjbGFzcyBuYW1lLgotICAgICAqIEluc2VydHMgdGhlIHN1cGVyIGNsYXNzIGFuZCBhbGwgdGhlIGNsYXNzIG9iamVjdHMgZm91bmQgaW4gdGhlIG1hcC4KLSAgICAgKi8KLSAgICB2b2lkIGZpbmRDbGFzc2VzRGVyaXZpbmdGcm9tKFN0cmluZyBzdXBlcl9uYW1lLCBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gemlwQ2xhc3NlcywKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBpbk91dEZvdW5kKSB0aHJvd3MgTG9nQWJvcnRFeGNlcHRpb24gewotICAgICAgICBmaW5kQ2xhc3Moc3VwZXJfbmFtZSwgemlwQ2xhc3NlcywgaW5PdXRGb3VuZCk7Ci0KLSAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIENsYXNzUmVhZGVyPiBlbnRyeSA6IHppcENsYXNzZXMuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGVudHJ5LmdldEtleSgpOwotICAgICAgICAgICAgaWYgKHN1cGVyX25hbWUuZXF1YWxzKGNsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIENsYXNzUmVhZGVyIGNsYXNzUmVhZGVyID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgIENsYXNzUmVhZGVyIHBhcmVudF9jciA9IGNsYXNzUmVhZGVyOwotICAgICAgICAgICAgd2hpbGUgKHBhcmVudF9jciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHBhcmVudF9uYW1lID0gaW50ZXJuYWxUb0JpbmFyeUNsYXNzTmFtZShwYXJlbnRfY3IuZ2V0U3VwZXJOYW1lKCkpOwotICAgICAgICAgICAgICAgIGlmIChwYXJlbnRfbmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG5vdCBmb3VuZAotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1cGVyX25hbWUuZXF1YWxzKHBhcmVudF9uYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBpbk91dEZvdW5kLnB1dChjbGFzc05hbWUsIGNsYXNzUmVhZGVyKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBhcmVudF9jciA9IHppcENsYXNzZXMuZ2V0KHBhcmVudF9uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBEZXBlbmRlbmN5VmlzaXRvci4gVXNlZnVsIGZvciB1bml0IHRlc3RzLgotICAgICAqLwotICAgIERlcGVuZGVuY3lWaXNpdG9yIGdldFZpc2l0b3IoTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHppcENsYXNzZXMsCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gaW5LZWVwLAotICAgICAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG91dEtlZXAsCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gaW5EZXBzLAotICAgICAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG91dERlcHMpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEZXBlbmRlbmN5VmlzaXRvcih6aXBDbGFzc2VzLCBpbktlZXAsIG91dEtlZXAsIGluRGVwcywgb3V0RGVwcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmluZHMgYWxsIGRlcGVuZGVuY2llcyBmb3IgYWxsIGNsYXNzZXMgaW4ga2VlcENsYXNzZXMgd2hpY2ggYXJlIGFsc28KLSAgICAgKiBsaXN0ZWQgaW4gemlwQ2xhc3Nlcy4gUmV0dXJucyBhIG1hcCBvZiBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3VuZC4KLSAgICAgKi8KLSAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZmluZERlcHMoTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHppcENsYXNzZXMsCi0gICAgICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gaW5PdXRLZWVwQ2xhc3NlcykgewotCi0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZGVwcyA9IG5ldyBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+KCk7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gbmV3X2RlcHMgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG5ld19rZWVwID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB0ZW1wID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLQotICAgICAgICBEZXBlbmRlbmN5VmlzaXRvciB2aXNpdG9yID0gZ2V0VmlzaXRvcih6aXBDbGFzc2VzLAotICAgICAgICAgICAgICAgIGluT3V0S2VlcENsYXNzZXMsIG5ld19rZWVwLAotICAgICAgICAgICAgICAgIGRlcHMsIG5ld19kZXBzKTsKLQotICAgICAgICBmb3IgKENsYXNzUmVhZGVyIGNyIDogaW5PdXRLZWVwQ2xhc3Nlcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgY3IuYWNjZXB0KHZpc2l0b3IsIDAgLyogZmxhZ3MgKi8pOwotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKG5ld19kZXBzLnNpemUoKSA+IDAgfHwgbmV3X2tlZXAuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgZGVwcy5wdXRBbGwobmV3X2RlcHMpOwotICAgICAgICAgICAgaW5PdXRLZWVwQ2xhc3Nlcy5wdXRBbGwobmV3X2tlZXApOwotCi0gICAgICAgICAgICB0ZW1wLmNsZWFyKCk7Ci0gICAgICAgICAgICB0ZW1wLnB1dEFsbChuZXdfZGVwcyk7Ci0gICAgICAgICAgICB0ZW1wLnB1dEFsbChuZXdfa2VlcCk7Ci0gICAgICAgICAgICBuZXdfZGVwcy5jbGVhcigpOwotICAgICAgICAgICAgbmV3X2tlZXAuY2xlYXIoKTsKLSAgICAgICAgICAgIG1Mb2cuZGVidWcoIkZvdW5kICUxJGQgdG8ga2VlcCwgJTIkZCBkZXBlbmRlbmNpZXMuIiwKLSAgICAgICAgICAgICAgICAgICAgaW5PdXRLZWVwQ2xhc3Nlcy5zaXplKCksIGRlcHMuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZm9yIChDbGFzc1JlYWRlciBjciA6IHRlbXAudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICBjci5hY2NlcHQodmlzaXRvciwgMCAvKiBmbGFncyAqLyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtTG9nLmluZm8oIkZvdW5kICUxJGQgY2xhc3NlcyB0byBrZWVwLCAlMiRkIGNsYXNzIGRlcGVuZGVuY2llcy4iLAotICAgICAgICAgICAgICAgIGluT3V0S2VlcENsYXNzZXMuc2l6ZSgpLCBkZXBzLnNpemUoKSk7Ci0KLSAgICAgICAgcmV0dXJuIGRlcHM7Ci0gICAgfQotCi0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIFZpc2l0b3IgdG8gY29sbGVjdCBhbGwgdGhlIHR5cGUgZGVwZW5kZW5jaWVzIGZyb20gYSBjbGFzcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgY2xhc3MgRGVwZW5kZW5jeVZpc2l0b3IgZXh0ZW5kcyBDbGFzc1Zpc2l0b3IgewotCi0gICAgICAgIC8qKiBBbGwgY2xhc3NlcyBmb3VuZCBpbiB0aGUgc291cmNlIEpBUi4gKi8KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gbVppcENsYXNzZXM7Ci0gICAgICAgIC8qKiBDbGFzc2VzIGZyb20gd2hpY2ggZGVwZW5kZW5jaWVzIGFyZSB0byBiZSBmb3VuZC4gKi8KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gbUluS2VlcDsKLSAgICAgICAgLyoqIERlcGVuZGVuY2llcyBhbHJlYWR5IGtub3duLiAqLwotICAgICAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBtSW5EZXBzOwotICAgICAgICAvKiogTmV3IGRlcGVuZGVuY2llcyBmb3VuZCBieSB0aGlzIHZpc2l0b3IuICovCi0gICAgICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG1PdXREZXBzOwotICAgICAgICAvKiogTmV3IGNsYXNzZXMgdG8ga2VlcCBhcy1pcyBmb3VuZCBieSB0aGlzIHZpc2l0b3IuICovCi0gICAgICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG1PdXRLZWVwOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IHZpc2l0b3IgdGhhdCB3aWxsIGZpbmQgYWxsIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSB2aXNpdGVkIGNsYXNzLgotICAgICAgICAgKiBUeXBlcyB3aGljaCBhcmUgYWxyZWFkeSBpbiB0aGUgemlwQ2xhc3Nlcywga2VlcENsYXNzZXMgb3IgaW5EZXBzIGFyZSBub3QgbWFya2VkLgotICAgICAgICAgKiBOZXcgZGVwZW5kZW5jaWVzIGFyZSBtYXJrZWQgaW4gb3V0RGVwcy4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHppcENsYXNzZXMgQWxsIGNsYXNzZXMgZm91bmQgaW4gdGhlIHNvdXJjZSBKQVIuCi0gICAgICAgICAqIEBwYXJhbSBpbktlZXAgQ2xhc3NlcyBmcm9tIHdoaWNoIGRlcGVuZGVuY2llcyBhcmUgdG8gYmUgZm91bmQuCi0gICAgICAgICAqIEBwYXJhbSBpbkRlcHMgRGVwZW5kZW5jaWVzIGFscmVhZHkga25vd24uCi0gICAgICAgICAqIEBwYXJhbSBvdXREZXBzIE5ldyBkZXBlbmRlbmNpZXMgZm91bmQgYnkgdGhpcyB2aXNpdG9yLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIERlcGVuZGVuY3lWaXNpdG9yKE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzLAotICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBpbktlZXAsCi0gICAgICAgICAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG91dEtlZXAsCi0gICAgICAgICAgICAgICAgTWFwPFN0cmluZyxDbGFzc1JlYWRlcj4gaW5EZXBzLAotICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsQ2xhc3NSZWFkZXI+IG91dERlcHMpIHsKLSAgICAgICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7Ci0gICAgICAgICAgICBtWmlwQ2xhc3NlcyA9IHppcENsYXNzZXM7Ci0gICAgICAgICAgICBtSW5LZWVwID0gaW5LZWVwOwotICAgICAgICAgICAgbU91dEtlZXAgPSBvdXRLZWVwOwotICAgICAgICAgICAgbUluRGVwcyA9IGluRGVwczsKLSAgICAgICAgICAgIG1PdXREZXBzID0gb3V0RGVwczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDb25zaWRlcnMgdGhlIGdpdmVuIGNsYXNzIG5hbWUgYXMgYSBkZXBlbmRlbmN5LgotICAgICAgICAgKiBJZiBpdCBkb2VzLCBhZGQgdG8gdGhlIG1PdXREZXBzIG1hcC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIGNvbnNpZGVyTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNsYXNzTmFtZSA9IGludGVybmFsVG9CaW5hcnlDbGFzc05hbWUoY2xhc3NOYW1lKTsKLQotICAgICAgICAgICAgLy8gZXhjbHVkZSBjbGFzc2VzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZm91bmQgb3IgYXJlIG1hcmtlZCB0byBiZSBleGNsdWRlZAotICAgICAgICAgICAgaWYgKG1JbktlZXAuY29udGFpbnNLZXkoY2xhc3NOYW1lKSB8fAotICAgICAgICAgICAgICAgICAgICBtT3V0S2VlcC5jb250YWluc0tleShjbGFzc05hbWUpIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1JbkRlcHMuY29udGFpbnNLZXkoY2xhc3NOYW1lKSB8fAotICAgICAgICAgICAgICAgICAgICBtT3V0RGVwcy5jb250YWluc0tleShjbGFzc05hbWUpIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1FeGNsdWRlZENsYXNzZXMuY29udGFpbnMoZ2V0QmFzZU5hbWUoY2xhc3NOYW1lKSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGV4Y2x1ZGUgY2xhc3NlcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgSkFSIGZpbGUgYmVpbmcgZXhhbWluZWQKLSAgICAgICAgICAgIENsYXNzUmVhZGVyIGNyID0gbVppcENsYXNzZXMuZ2V0KGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICBpZiAoY3IgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAvLyBleGNsdWRlIGNsYXNzZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgZGVmYXVsdCBKUkUgKHRoZSBvbmUgZXhlY3V0aW5nIHRoaXMgcHJvZ3JhbSkKLSAgICAgICAgICAgICAgICBpZiAoZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpLmxvYWRDbGFzcyhjbGFzc05hbWUpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIC8vIGlnbm9yZQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBhY2NlcHQgdGhpcyBjbGFzczoKLSAgICAgICAgICAgIC8vIC0gYW5kcm9pZCBjbGFzc2VzIGFyZSBhZGRlZCB0byBkZXBlbmRlbmNpZXMKLSAgICAgICAgICAgIC8vIC0gbm9uLWFuZHJvaWQgY2xhc3NlcyBhcmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgY2xhc3NlcyB0byBrZWVwIGFzLWlzICh0aGV5IGRvbid0IG5lZWQKLSAgICAgICAgICAgIC8vICAgdG8gYmUgc3R1YmJlZCkuCi0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lLmluZGV4T2YoImFuZHJvaWQiKSA+PSAwKSB7ICAvLyBUT0RPIG1ha2UgY29uZmlndXJhYmxlCi0gICAgICAgICAgICAgICAgbU91dERlcHMucHV0KGNsYXNzTmFtZSwgY3IpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtT3V0S2VlcC5wdXQoY2xhc3NOYW1lLCBjcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc2lkZXJzIHRoaXMgYXJyYXkgb2YgbmFtZXMgdXNpbmcgY29uc2lkZXJOYW1lKCkuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBjb25zaWRlck5hbWVzKFN0cmluZ1tdIGNsYXNzTmFtZXMpIHsKLSAgICAgICAgICAgIGlmIChjbGFzc05hbWVzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBjbGFzc05hbWUgOiBjbGFzc05hbWVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZShjbGFzc05hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDb25zaWRlcnMgdGhpcyBzaWduYXR1cmUgb3IgdHlwZSBzaWduYXR1cmUgYnkgaW52b2tpbmcgdGhlIHtAbGluayBTaWduYXR1cmVWaXNpdG9yfQotICAgICAgICAgKiBvbiBpdC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIGNvbnNpZGVyU2lnbmF0dXJlKFN0cmluZyBzaWduYXR1cmUpIHsKLSAgICAgICAgICAgIGlmIChzaWduYXR1cmUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFNpZ25hdHVyZVJlYWRlciBzciA9IG5ldyBTaWduYXR1cmVSZWFkZXIoc2lnbmF0dXJlKTsKLSAgICAgICAgICAgICAgICAvLyBTaWduYXR1cmVSZWFkZXIuYWNjZXB0IHdpbGwgY2FsbCBhY2Nlc3NUeXBlIHNvIHdlIGRvbid0IHJlYWxseSBoYXZlCi0gICAgICAgICAgICAgICAgLy8gdG8gZGlmZmVyZW50aWF0ZSB3aGVyZSB0aGUgc2lnbmF0dXJlIGNvbWVzIGZyb20uCi0gICAgICAgICAgICAgICAgc3IuYWNjZXB0KG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc2lkZXJzIHRoaXMge0BsaW5rIFR5cGV9LiBGb3IgYXJyYXlzLCB0aGUgZWxlbWVudCB0eXBlIGlzIGNvbnNpZGVyZWQuCi0gICAgICAgICAqIElmIHRoZSB0eXBlIGlzIGFuIG9iamVjdCwgaXQncyBpbnRlcm5hbCBuYW1lIGlzIGNvbnNpZGVyZWQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBjb25zaWRlclR5cGUoVHlwZSB0KSB7Ci0gICAgICAgICAgICBpZiAodCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHQuZ2V0U29ydCgpID09IFR5cGUuQVJSQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgdCA9IHQuZ2V0RWxlbWVudFR5cGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHQuZ2V0U29ydCgpID09IFR5cGUuT0JKRUNUKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZSh0LmdldEludGVybmFsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc2lkZXJzIGEgZGVzY3JpcHRvciBzdHJpbmcuIFRoZSBkZXNjcmlwdG9yIGlzIGNvbnZlcnRlZCB0byBhIHtAbGluayBUeXBlfQotICAgICAgICAgKiBhbmQgdGhlbiBjb25zaWRlclR5cGUoKSBpcyBpbnZva2VkLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgY29uc2lkZXJEZXNjKFN0cmluZyBkZXNjKSB7Ci0gICAgICAgICAgICBpZiAoZGVzYyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgVHlwZSB0ID0gVHlwZS5nZXRUeXBlKGRlc2MpOwotICAgICAgICAgICAgICAgICAgICBjb25zaWRlclR5cGUodCk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlLCBub3QgYSB2YWxpZCB0eXBlLgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIGdldEJhc2VOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKLSAgICAgICAgICAgIGludCBwb3MgPSBjbGFzc05hbWUuaW5kZXhPZignJCcpOwotICAgICAgICAgICAgaWYgKHBvcyA+IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnN1YnN0cmluZygwLCBwb3MpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAvLyAtLS0gQ2xhc3NWaXNpdG9yLCBGaWVsZFZpc2l0b3IKLSAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgLy8gVmlzaXRzIGEgY2xhc3MgaGVhZGVyCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdChpbnQgdmVyc2lvbiwgaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsCi0gICAgICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSwgU3RyaW5nIHN1cGVyTmFtZSwgU3RyaW5nW10gaW50ZXJmYWNlcykgewotICAgICAgICAgICAgLy8gc2lnbmF0dXJlIGlzIHRoZSBzaWduYXR1cmUgb2YgdGhpcyBjbGFzcy4gTWF5IGJlIG51bGwgaWYgdGhlIGNsYXNzIGlzIG5vdCBhIGdlbmVyaWMKLSAgICAgICAgICAgIC8vIG9uZSwgYW5kIGRvZXMgbm90IGV4dGVuZCBvciBpbXBsZW1lbnQgZ2VuZXJpYyBjbGFzc2VzIG9yIGludGVyZmFjZXMuCi0KLSAgICAgICAgICAgIGlmIChzaWduYXR1cmUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnNpZGVyU2lnbmF0dXJlKHNpZ25hdHVyZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHN1cGVyTmFtZSBpcyB0aGUgaW50ZXJuYWwgb2YgbmFtZSBvZiB0aGUgc3VwZXIgY2xhc3MgKHNlZSBnZXRJbnRlcm5hbE5hbWUpLgotICAgICAgICAgICAgLy8gRm9yIGludGVyZmFjZXMsIHRoZSBzdXBlciBjbGFzcyBpcyBPYmplY3QuIE1heSBiZSBudWxsIGJ1dCBvbmx5IGZvciB0aGUgT2JqZWN0IGNsYXNzLgotICAgICAgICAgICAgY29uc2lkZXJOYW1lKHN1cGVyTmFtZSk7Ci0KLSAgICAgICAgICAgIC8vIGludGVyZmFjZXMgaXMgdGhlIGludGVybmFsIG5hbWVzIG9mIHRoZSBjbGFzcydzIGludGVyZmFjZXMgKHNlZSBnZXRJbnRlcm5hbE5hbWUpLgotICAgICAgICAgICAgLy8gTWF5IGJlIG51bGwuCi0gICAgICAgICAgICBjb25zaWRlck5hbWVzKGludGVyZmFjZXMpOwotICAgICAgICB9Ci0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0QW5ub3RhdGlvbihTdHJpbmcgZGVzYywgYm9vbGVhbiB2aXNpYmxlKSB7Ci0gICAgICAgICAgICAvLyBkZXNjIGlzIHRoZSBjbGFzcyBkZXNjcmlwdG9yIG9mIHRoZSBhbm5vdGF0aW9uIGNsYXNzLgotICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBNeUFubm90YXRpb25WaXNpdG9yKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdmlzaXRBdHRyaWJ1dGUoQXR0cmlidXRlIGF0dHIpIHsKLSAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFZpc2l0cyB0aGUgZW5kIG9mIGEgY2xhc3MKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RW5kKCkgewotICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBNeUZpZWxkVmlzaXRvciBleHRlbmRzIEZpZWxkVmlzaXRvciB7Ci0KLSAgICAgICAgICAgIHB1YmxpYyBNeUZpZWxkVmlzaXRvcigpIHsKLSAgICAgICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBBbm5vdGF0aW9uVmlzaXRvciB2aXNpdEFubm90YXRpb24oU3RyaW5nIGRlc2MsIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGNsYXNzIGRlc2NyaXB0b3Igb2YgdGhlIGFubm90YXRpb24gY2xhc3MuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXlBbm5vdGF0aW9uVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0QXR0cmlidXRlKEF0dHJpYnV0ZSBhdHRyKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBWaXNpdHMgdGhlIGVuZCBvZiBhIGNsYXNzCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RW5kKCkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgRmllbGRWaXNpdG9yIHZpc2l0RmllbGQoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmUsIE9iamVjdCB2YWx1ZSkgewotICAgICAgICAgICAgLy8gZGVzYyBpcyB0aGUgZmllbGQncyBkZXNjcmlwdG9yIChzZWUgVHlwZSkuCi0gICAgICAgICAgICBjb25zaWRlckRlc2MoZGVzYyk7Ci0KLSAgICAgICAgICAgIC8vIHNpZ25hdHVyZSBpcyB0aGUgZmllbGQncyBzaWduYXR1cmUuIE1heSBiZSBudWxsIGlmIHRoZSBmaWVsZCdzIHR5cGUgZG9lcyBub3QgdXNlCi0gICAgICAgICAgICAvLyBnZW5lcmljIHR5cGVzLgotICAgICAgICAgICAgY29uc2lkZXJTaWduYXR1cmUoc2lnbmF0dXJlKTsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBNeUZpZWxkVmlzaXRvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0SW5uZXJDbGFzcyhTdHJpbmcgbmFtZSwgU3RyaW5nIG91dGVyTmFtZSwgU3RyaW5nIGlubmVyTmFtZSwgaW50IGFjY2VzcykgewotICAgICAgICAgICAgLy8gbmFtZSBpcyB0aGUgaW50ZXJuYWwgbmFtZSBvZiBhbiBpbm5lciBjbGFzcyAoc2VlIGdldEludGVybmFsTmFtZSkuCi0gICAgICAgICAgICBjb25zaWRlck5hbWUobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIE1ldGhvZFZpc2l0b3IgdmlzaXRNZXRob2QoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmUsIFN0cmluZ1tdIGV4Y2VwdGlvbnMpIHsKLSAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIG1ldGhvZCdzIGRlc2NyaXB0b3IgKHNlZSBUeXBlKS4KLSAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgIC8vIHNpZ25hdHVyZSBpcyB0aGUgbWV0aG9kJ3Mgc2lnbmF0dXJlLiBNYXkgYmUgbnVsbCBpZiB0aGUgbWV0aG9kIHBhcmFtZXRlcnMsIHJldHVybgotICAgICAgICAgICAgLy8gdHlwZSBhbmQgZXhjZXB0aW9ucyBkbyBub3QgdXNlIGdlbmVyaWMgdHlwZXMuCi0gICAgICAgICAgICBjb25zaWRlclNpZ25hdHVyZShzaWduYXR1cmUpOwotCi0gICAgICAgICAgICByZXR1cm4gbmV3IE15TWV0aG9kVmlzaXRvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0T3V0ZXJDbGFzcyhTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0U291cmNlKFN0cmluZyBzb3VyY2UsIFN0cmluZyBkZWJ1ZykgewotICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICB9Ci0KLQotICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgLy8gLS0tIE1ldGhvZFZpc2l0b3IKLSAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBNeU1ldGhvZFZpc2l0b3IgZXh0ZW5kcyBNZXRob2RWaXNpdG9yIHsKLQotICAgICAgICAgICAgcHVibGljIE15TWV0aG9kVmlzaXRvcigpIHsKLSAgICAgICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOwotICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0QW5ub3RhdGlvbkRlZmF1bHQoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeUFubm90YXRpb25WaXNpdG9yKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRDb2RlKCkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gZmllbGQgaW5zdHJ1Y3Rpb24KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRGaWVsZEluc24oaW50IG9wY29kZSwgU3RyaW5nIG93bmVyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MpIHsKLSAgICAgICAgICAgICAgICAvLyBuYW1lIGlzIHRoZSBmaWVsZCdzIG5hbWUuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJOYW1lKG5hbWUpOwotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGZpZWxkJ3MgZGVzY3JpcHRvciAoc2VlIFR5cGUpLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEZyYW1lKGludCB0eXBlLCBpbnQgbG9jYWwsIE9iamVjdFtdIGxvY2FsMiwgaW50IHN0YWNrLCBPYmplY3RbXSBzdGFjazIpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRJaW5jSW5zbihpbnQgdmFyLCBpbnQgaW5jcmVtZW50KSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcyAtLSBhbiBJSU5DIGluc3RydWN0aW9uCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRJbnNuKGludCBvcGNvZGUpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzIC0tIGEgemVybyBvcGVyYW5kIGluc3RydWN0aW9uCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRJbnRJbnNuKGludCBvcGNvZGUsIGludCBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcyAtLSBhIHNpbmdsZSBpbnQgb3BlcmFuZCBpbnN0cnVjdGlvbgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0SnVtcEluc24oaW50IG9wY29kZSwgTGFiZWwgbGFiZWwpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzIC0tIGEganVtcCBpbnN0cnVjdGlvbgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TGFiZWwoTGFiZWwgbGFiZWwpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzIC0tIGEgbGFiZWwgdGFyZ2V0Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGluc3RydWN0aW9uIHRvIGxvYWQgYSBjb25zdGFudCBmcm9tIHRoZSBzdGFjawotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdExkY0luc24oT2JqZWN0IGNzdCkgewotICAgICAgICAgICAgICAgIGlmIChjc3QgaW5zdGFuY2VvZiBUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyVHlwZSgoVHlwZSkgY3N0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRMaW5lTnVtYmVyKGludCBsaW5lLCBMYWJlbCBzdGFydCkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdExvY2FsVmFyaWFibGUoU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlLCBMYWJlbCBzdGFydCwgTGFiZWwgZW5kLCBpbnQgaW5kZXgpIHsKLSAgICAgICAgICAgICAgICAvLyBkZXNjIGlzIHRoZSB0eXBlIGRlc2NyaXB0b3Igb2YgdGhpcyBsb2NhbCB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICBjb25zaWRlckRlc2MoZGVzYyk7Ci0gICAgICAgICAgICAgICAgLy8gc2lnbmF0dXJlIGlzIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiB0aGlzIGxvY2FsIHZhcmlhYmxlLiBNYXkgYmUgbnVsbCBpZiB0aGUgbG9jYWwKLSAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZSB0eXBlIGRvZXMgbm90IHVzZSBnZW5lcmljIHR5cGVzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyU2lnbmF0dXJlKHNpZ25hdHVyZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRMb29rdXBTd2l0Y2hJbnNuKExhYmVsIGRmbHQsIGludFtdIGtleXMsIExhYmVsW10gbGFiZWxzKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcyAtLSBhIGxvb2t1cCBzd2l0Y2ggaW5zdHJ1Y3Rpb24KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdE1heHMoaW50IG1heFN0YWNrLCBpbnQgbWF4TG9jYWxzKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpbnN0cnVjdGlvbiB0aGF0IGludm9rZXMgYSBtZXRob2QKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRNZXRob2RJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBvd25lciBpcyB0aGUgaW50ZXJuYWwgbmFtZSBvZiB0aGUgbWV0aG9kJ3Mgb3duZXIgY2xhc3MKLSAgICAgICAgICAgICAgICBjb25zaWRlck5hbWUob3duZXIpOwotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIG1ldGhvZCdzIGRlc2NyaXB0b3IgKHNlZSBUeXBlKS4KLSAgICAgICAgICAgICAgICBjb25zaWRlckRlc2MoZGVzYyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGluc3RydWN0aW9uIG11bHRpYW5ld2FycmF5LCB3aGF0ZXZlciB0aGF0IGlzCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TXVsdGlBTmV3QXJyYXlJbnNuKFN0cmluZyBkZXNjLCBpbnQgZGltcykgewotCi0gICAgICAgICAgICAgICAgLy8gZGVzYyBhbiBhcnJheSB0eXBlIGRlc2NyaXB0b3IuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBBbm5vdGF0aW9uVmlzaXRvciB2aXNpdFBhcmFtZXRlckFubm90YXRpb24oaW50IHBhcmFtZXRlciwgU3RyaW5nIGRlc2MsCi0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGNsYXNzIGRlc2NyaXB0b3Igb2YgdGhlIGFubm90YXRpb24gY2xhc3MuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXlBbm5vdGF0aW9uVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0VGFibGVTd2l0Y2hJbnNuKGludCBtaW4sIGludCBtYXgsIExhYmVsIGRmbHQsIExhYmVsLi4uIGxhYmVscykgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gdGFibGUgc3dpdGNoIGluc3RydWN0aW9uCi0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFRyeUNhdGNoQmxvY2soTGFiZWwgc3RhcnQsIExhYmVsIGVuZCwgTGFiZWwgaGFuZGxlciwgU3RyaW5nIHR5cGUpIHsKLSAgICAgICAgICAgICAgICAvLyB0eXBlIGlzIHRoZSBpbnRlcm5hbCBuYW1lIG9mIHRoZSB0eXBlIG9mIGV4Y2VwdGlvbnMgaGFuZGxlZCBieSB0aGUgaGFuZGxlciwKLSAgICAgICAgICAgICAgICAvLyBvciBudWxsIHRvIGNhdGNoIGFueSBleGNlcHRpb25zIChmb3IgImZpbmFsbHkiIGJsb2NrcykuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJOYW1lKHR5cGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyB0eXBlIGluc3RydWN0aW9uCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0VHlwZUluc24oaW50IG9wY29kZSwgU3RyaW5nIHR5cGUpIHsKLSAgICAgICAgICAgICAgICAvLyB0eXBlIGlzIHRoZSBvcGVyYW5kIG9mIHRoZSBpbnN0cnVjdGlvbiB0byBiZSB2aXNpdGVkLiBUaGlzIG9wZXJhbmQgbXVzdCBiZSB0aGUKLSAgICAgICAgICAgICAgICAvLyBpbnRlcm5hbCBuYW1lIG9mIGFuIG9iamVjdCBvciBhcnJheSBjbGFzcy4KLSAgICAgICAgICAgICAgICBjb25zaWRlck5hbWUodHlwZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRWYXJJbnNuKGludCBvcGNvZGUsIGludCB2YXIpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzIC0tIGxvY2FsIHZhcmlhYmxlIGluc3RydWN0aW9uCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGNsYXNzIE15U2lnbmF0dXJlVmlzaXRvciBleHRlbmRzIFNpZ25hdHVyZVZpc2l0b3IgewotCi0gICAgICAgICAgICBwdWJsaWMgTXlTaWduYXR1cmVWaXNpdG9yKCkgewotICAgICAgICAgICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gLS0tIFNpZ25hdHVyZVZpc2l0b3IKLSAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICBwcml2YXRlIFN0cmluZyBtQ3VycmVudFNpZ25hdHVyZUNsYXNzID0gbnVsbDsKLQotICAgICAgICAgICAgLy8gU3RhcnRzIHRoZSB2aXNpdCBvZiBhIHNpZ25hdHVyZSBjb3JyZXNwb25kaW5nIHRvIGEgY2xhc3Mgb3IgaW50ZXJmYWNlIHR5cGUKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRDbGFzc1R5cGUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgICAgICAgICBtQ3VycmVudFNpZ25hdHVyZUNsYXNzID0gbmFtZTsKLSAgICAgICAgICAgICAgICBjb25zaWRlck5hbWUobmFtZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFZpc2l0cyBhbiBpbm5lciBjbGFzcwotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdElubmVyQ2xhc3NUeXBlKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50U2lnbmF0dXJlQ2xhc3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFNpZ25hdHVyZUNsYXNzICs9ICIkIiArIG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZShtQ3VycmVudFNpZ25hdHVyZUNsYXNzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFNpZ25hdHVyZVZpc2l0b3IgdmlzaXRBcnJheVR5cGUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEJhc2VUeXBlKGNoYXIgZGVzY3JpcHRvcikgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gYSBwcmltaXRpdmUgdHlwZSwgaWdub3JlZAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0Q2xhc3NCb3VuZCgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15U2lnbmF0dXJlVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0RXhjZXB0aW9uVHlwZSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15U2lnbmF0dXJlVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0Rm9ybWFsVHlwZVBhcmFtZXRlcihTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdEludGVyZmFjZSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15U2lnbmF0dXJlVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0SW50ZXJmYWNlQm91bmQoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFBhcmFtZXRlclR5cGUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFJldHVyblR5cGUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFN1cGVyY2xhc3MoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFR5cGVBcmd1bWVudChjaGFyIHdpbGRjYXJkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVWYXJpYWJsZShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVBcmd1bWVudCgpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotCi0gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAvLyAtLS0gQW5ub3RhdGlvblZpc2l0b3IKLSAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBNeUFubm90YXRpb25WaXNpdG9yIGV4dGVuZHMgQW5ub3RhdGlvblZpc2l0b3IgewotCi0gICAgICAgICAgICBwdWJsaWMgTXlBbm5vdGF0aW9uVmlzaXRvcigpIHsKLSAgICAgICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBWaXNpdHMgYSBwcmltaXRpdmUgdmFsdWUgb2YgYW4gYW5ub3RhdGlvbgotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdChTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgdGhlIGFjdHVhbCB2YWx1ZSwgd2hvc2UgdHlwZSBtdXN0IGJlIEJ5dGUsIEJvb2xlYW4sIENoYXJhY3RlciwgU2hvcnQsCi0gICAgICAgICAgICAgICAgLy8gSW50ZWdlciwgTG9uZywgRmxvYXQsIERvdWJsZSwgU3RyaW5nIG9yIFR5cGUKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyVHlwZSgoVHlwZSkgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBbm5vdGF0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGNsYXNzIGRlc2NyaXB0b3Igb2YgdGhlIG5lc3RlZCBhbm5vdGF0aW9uIGNsYXNzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15QW5ub3RhdGlvblZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBcnJheShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXlBbm5vdGF0aW9uVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RW51bShTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsIFN0cmluZyB2YWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGNsYXNzIGRlc2NyaXB0b3Igb2YgdGhlIGVudW1lcmF0aW9uIGNsYXNzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQXNtR2VuZXJhdG9yLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTAyNTYxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQXNtR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkNsYXNzUmVhZGVyOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkNsYXNzVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5DbGFzc1dyaXRlcjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKLWltcG9ydCBqYXZhLnV0aWwuamFyLkphckVudHJ5OwotaW1wb3J0IGphdmEudXRpbC5qYXIuSmFyT3V0cHV0U3RyZWFtOwotCi0vKioKLSAqIENsYXNzIHRoYXQgZ2VuZXJhdGVzIGEgbmV3IEpBUiBmcm9tIGEgbGlzdCBvZiBjbGFzc2VzLCBzb21lIG9mIHdoaWNoIGFyZSB0byBiZSBrZXB0IGFzLWlzCi0gKiBhbmQgc29tZSBvZiB3aGljaCBhcmUgdG8gYmUgc3R1YmJlZCBwYXJ0aWFsbHkgb3IgdG90YWxseS4KLSAqLwotcHVibGljIGNsYXNzIEFzbUdlbmVyYXRvciB7Ci0KLSAgICAvKiogT3V0cHV0IGxvZ2dlci4gKi8KLSAgICBwcml2YXRlIGZpbmFsIExvZyBtTG9nOwotICAgIC8qKiBUaGUgcGF0aCBvZiB0aGUgZGVzdGluYXRpb24gSkFSIHRvIGNyZWF0ZS4gKi8KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtT3NEZXN0SmFyOwotICAgIC8qKiBMaXN0IG9mIGNsYXNzZXMgdG8gaW5qZWN0IGluIHRoZSBmaW5hbCBKQVIgZnJvbSBfdGhpc18gYXJjaGl2ZS4gKi8KLSAgICBwcml2YXRlIGZpbmFsIENsYXNzPD8+W10gbUluamVjdENsYXNzZXM7Ci0gICAgLyoqIFRoZSBzZXQgb2YgbWV0aG9kcyB0byBzdHViIG91dC4gKi8KLSAgICBwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IG1TdHViTWV0aG9kczsKLSAgICAvKiogQWxsIGNsYXNzZXMgdG8gb3V0cHV0IGFzLWlzLCBleGNlcHQgaWYgdGhleSBoYXZlIG5hdGl2ZSBtZXRob2RzLiAqLwotICAgIHByaXZhdGUgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG1LZWVwOwotICAgIC8qKiBBbGwgZGVwZW5kZW5jaWVzIHRoYXQgbXVzdCBiZSBjb21wbGV0ZWx5IHN0dWJiZWQuICovCi0gICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gbURlcHM7Ci0gICAgLyoqIENvdW50ZXIgb2YgbnVtYmVyIG9mIGNsYXNzZXMgcmVuYW1lZCBkdXJpbmcgdHJhbnNmb3JtLiAqLwotICAgIHByaXZhdGUgaW50IG1SZW5hbWVDb3VudDsKLSAgICAvKiogRlFDTiBOYW1lcyBvZiB0aGUgY2xhc3NlcyB0byByZW5hbWU6IG1hcCBvbGQtRlFDTiA9PiBuZXctRlFDTiAqLwotICAgIHByaXZhdGUgZmluYWwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbVJlbmFtZUNsYXNzZXM7Ci0gICAgLyoqIEZRQ04gTmFtZXMgb2YgIm9sZCIgY2xhc3NlcyB0aGF0IHdlcmUgTk9UIHJlbmFtZWQuIFRoaXMgc3RhcnRzIHdpdGggdGhlIGZ1bGwgbGlzdCBvZgotICAgICAqICBvbGQtRlFDTiB0byByZW5hbWUgYW5kIHRoZXkgZ2V0IGVyYXNlZCBhcyB0aGV5IGdldCByZW5hbWVkLiBBdCB0aGUgZW5kLCBjbGFzc2VzIHN0aWxsCi0gICAgICogIGxlZnQgaGVyZSBhcmUgbm90IGluIHRoZSBjb2RlIGJhc2UgYW55bW9yZSBhbmQgdGh1cyB3ZXJlIG5vdCByZW5hbWVkLiAqLwotICAgIHByaXZhdGUgSGFzaFNldDxTdHJpbmc+IG1DbGFzc2VzTm90UmVuYW1lZDsKLSAgICAvKiogQSBtYXAgeyBGUUNOID0+IHNldCB7IGxpc3Qgb2YgcmV0dXJuIHR5cGVzIHRvIGRlbGV0ZSBmcm9tIHRoZSBGUUNOIH0gfS4gKi8KLSAgICBwcml2YXRlIEhhc2hNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gbURlbGV0ZVJldHVybnM7Ci0gICAgLyoqIEEgbWFwIHsgRlFDTiA9PiBzZXQgeyBtZXRob2QgbmFtZXMgfSB9IG9mIG1ldGhvZHMgdG8gcmV3cml0ZSBhcyBkZWxlZ2F0ZXMuCi0gICAgICogIFRoZSBzcGVjaWFsIG5hbWUge0BsaW5rIERlbGVnYXRlQ2xhc3NBZGFwdGVyI0FMTF9OQVRJVkVTfSBjYW4gYmUgdXNlZCBhcyBpbiBpbnRlcm5hbCBzZXQuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IG1EZWxlZ2F0ZU1ldGhvZHM7Ci0gICAgLyoqIEZRQ04gTmFtZXMgb2YgY2xhc3NlcyB0byByZWZhY3Rvci4gQWxsIHJlZmVyZW5jZSB0byBvbGQtRlFDTiB3aWxsIGJlIHVwZGF0ZWQgdG8gbmV3LUZRQ04uCi0gICAgICogbWFwIG9sZC1GUUNOID0+IG5ldy1GUUNOICovCi0gICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtUmVmYWN0b3JDbGFzc2VzOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBnZW5lcmF0b3IgdGhhdCBjYW4gZ2VuZXJhdGUgdGhlIG91dHB1dCBKQVIgd2l0aCB0aGUgc3R1YmJlZCBjbGFzc2VzLgotICAgICAqCi0gICAgICogQHBhcmFtIGxvZyBPdXRwdXQgbG9nZ2VyLgotICAgICAqIEBwYXJhbSBvc0Rlc3RKYXIgVGhlIHBhdGggb2YgdGhlIGRlc3RpbmF0aW9uIEpBUiB0byBjcmVhdGUuCi0gICAgICogQHBhcmFtIGNyZWF0ZUluZm8gQ3JlYXRpb24gcGFyYW1ldGVycy4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQXNtR2VuZXJhdG9yKExvZyBsb2csIFN0cmluZyBvc0Rlc3RKYXIsIElDcmVhdGVJbmZvIGNyZWF0ZUluZm8pIHsKLSAgICAgICAgbUxvZyA9IGxvZzsKLSAgICAgICAgbU9zRGVzdEphciA9IG9zRGVzdEphcjsKLSAgICAgICAgbUluamVjdENsYXNzZXMgPSBjcmVhdGVJbmZvLmdldEluamVjdGVkQ2xhc3NlcygpOwotICAgICAgICBtU3R1Yk1ldGhvZHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KEFycmF5cy5hc0xpc3QoY3JlYXRlSW5mby5nZXRPdmVycmlkZGVuTWV0aG9kcygpKSk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIHRoZSBtYXAvc2V0IG9mIG1ldGhvZHMgdG8gY2hhbmdlIHRvIGRlbGVnYXRlcwotICAgICAgICBtRGVsZWdhdGVNZXRob2RzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4oKTsKLSAgICAgICAgZm9yIChTdHJpbmcgc2lnbmF0dXJlIDogY3JlYXRlSW5mby5nZXREZWxlZ2F0ZU1ldGhvZHMoKSkgewotICAgICAgICAgICAgaW50IHBvcyA9IHNpZ25hdHVyZS5pbmRleE9mKCcjJyk7Ci0gICAgICAgICAgICBpZiAocG9zIDw9IDAgfHwgcG9zID49IHNpZ25hdHVyZS5sZW5ndGgoKSAtIDEpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBiaW5hcnlUb0ludGVybmFsQ2xhc3NOYW1lKHNpZ25hdHVyZS5zdWJzdHJpbmcoMCwgcG9zKSk7Ci0gICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IHNpZ25hdHVyZS5zdWJzdHJpbmcocG9zICsgMSk7Ci0gICAgICAgICAgICBTZXQ8U3RyaW5nPiBtZXRob2RzID0gbURlbGVnYXRlTWV0aG9kcy5nZXQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIGlmIChtZXRob2RzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtZXRob2RzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotICAgICAgICAgICAgICAgIG1EZWxlZ2F0ZU1ldGhvZHMucHV0KGNsYXNzTmFtZSwgbWV0aG9kcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZXRob2RzLmFkZChtZXRob2ROYW1lKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKFN0cmluZyBjbGFzc05hbWUgOiBjcmVhdGVJbmZvLmdldERlbGVnYXRlQ2xhc3NOYXRpdmVzKCkpIHsKLSAgICAgICAgICAgIGNsYXNzTmFtZSA9IGJpbmFyeVRvSW50ZXJuYWxDbGFzc05hbWUoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIFNldDxTdHJpbmc+IG1ldGhvZHMgPSBtRGVsZWdhdGVNZXRob2RzLmdldChjbGFzc05hbWUpOwotICAgICAgICAgICAgaWYgKG1ldGhvZHMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1ldGhvZHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAgICAgICAgICAgbURlbGVnYXRlTWV0aG9kcy5wdXQoY2xhc3NOYW1lLCBtZXRob2RzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1ldGhvZHMuYWRkKERlbGVnYXRlQ2xhc3NBZGFwdGVyLkFMTF9OQVRJVkVTKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENyZWF0ZSB0aGUgbWFwIG9mIGNsYXNzZXMgdG8gcmVuYW1lLgotICAgICAgICBtUmVuYW1lQ2xhc3NlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotICAgICAgICBtQ2xhc3Nlc05vdFJlbmFtZWQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAgIFN0cmluZ1tdIHJlbmFtZUNsYXNzZXMgPSBjcmVhdGVJbmZvLmdldFJlbmFtZWRDbGFzc2VzKCk7Ci0gICAgICAgIGludCBuID0gcmVuYW1lQ2xhc3Nlcy5sZW5ndGg7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSArPSAyKSB7Ci0gICAgICAgICAgICBhc3NlcnQgaSArIDEgPCBuOwotICAgICAgICAgICAgLy8gVGhlIEFTTSBjbGFzcyBuYW1lcyB1c2VzICIvIiBzZXBhcmF0b3JzLCB3aGVyZWFzIHJlZ3VsYXIgRlFDTiB1c2UgIi4iCi0gICAgICAgICAgICBTdHJpbmcgb2xkRnFjbiA9IGJpbmFyeVRvSW50ZXJuYWxDbGFzc05hbWUocmVuYW1lQ2xhc3Nlc1tpXSk7Ci0gICAgICAgICAgICBTdHJpbmcgbmV3RnFjbiA9IGJpbmFyeVRvSW50ZXJuYWxDbGFzc05hbWUocmVuYW1lQ2xhc3Nlc1tpICsgMV0pOwotICAgICAgICAgICAgbVJlbmFtZUNsYXNzZXMucHV0KG9sZEZxY24sIG5ld0ZxY24pOwotICAgICAgICAgICAgbUNsYXNzZXNOb3RSZW5hbWVkLmFkZChvbGRGcWNuKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENyZWF0ZSBhIG1hcCBvZiBjbGFzc2VzIHRvIGJlIHJlZmFjdG9yZWQuCi0gICAgICAgIG1SZWZhY3RvckNsYXNzZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLSAgICAgICAgU3RyaW5nW10gcmVmYWN0b3JDbGFzc2VzID0gY3JlYXRlSW5mby5nZXRKYXZhUGtnQ2xhc3NlcygpOwotICAgICAgICBuID0gcmVmYWN0b3JDbGFzc2VzLmxlbmd0aDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpICs9IDIpIHsKLSAgICAgICAgICAgIGFzc2VydCBpICsgMSA8IG47Ci0gICAgICAgICAgICBTdHJpbmcgb2xkRnFjbiA9IGJpbmFyeVRvSW50ZXJuYWxDbGFzc05hbWUocmVmYWN0b3JDbGFzc2VzW2ldKTsKLSAgICAgICAgICAgIFN0cmluZyBuZXdGcWNuID0gYmluYXJ5VG9JbnRlcm5hbENsYXNzTmFtZShyZWZhY3RvckNsYXNzZXNbaSArIDFdKTsKLSAgICAgICAgICAgIG1SZWZhY3RvckNsYXNzZXMucHV0KG9sZEZxY24sIG5ld0ZxY24pOzsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNyZWF0ZSB0aGUgbWFwIG9mIHJlbmFtZWQgY2xhc3MgLT4gcmV0dXJuIHR5cGUgb2YgbWV0aG9kIHRvIGRlbGV0ZS4KLSAgICAgICAgbURlbGV0ZVJldHVybnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PigpOwotICAgICAgICBTdHJpbmdbXSBkZWxldGVSZXR1cm5zID0gY3JlYXRlSW5mby5nZXREZWxldGVSZXR1cm5zKCk7Ci0gICAgICAgIFNldDxTdHJpbmc+IHJldHVyblR5cGVzID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIHJlbmFtZWRDbGFzcyA9IG51bGw7Ci0gICAgICAgIGZvciAoU3RyaW5nIGNsYXNzTmFtZSA6IGRlbGV0ZVJldHVybnMpIHsKLSAgICAgICAgICAgIC8vIGlmIHdlIHJlYWNoIHRoZSBlbmQgb2YgYSBzZWN0aW9uLCBhZGQgaXQgdG8gdGhlIG1haW4gbWFwCi0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVHlwZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtRGVsZXRlUmV0dXJucy5wdXQocmVuYW1lZENsYXNzLCByZXR1cm5UeXBlcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmVuYW1lZENsYXNzID0gbnVsbDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaWYgdGhlIHJlbmFtZWQgY2xhc3MgaXMgbnVsbCwgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgc2VjdGlvbgotICAgICAgICAgICAgaWYgKHJlbmFtZWRDbGFzcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmVuYW1lZENsYXNzID0gYmluYXJ5VG9JbnRlcm5hbENsYXNzTmFtZShjbGFzc05hbWUpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBqdXN0IGEgc3RhbmRhcmQgcmV0dXJuIHR5cGUsIHdlIGFkZCBpdCB0byB0aGUgbGlzdC4KLSAgICAgICAgICAgIGlmIChyZXR1cm5UeXBlcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVHlwZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm5UeXBlcy5hZGQoYmluYXJ5VG9JbnRlcm5hbENsYXNzTmFtZShjbGFzc05hbWUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IGhhdmUgbm90IGJlZW4gcmVuYW1lZCB5ZXQuCi0gICAgICogPHAvPgotICAgICAqIFRoZSBuYW1lcyBhcmUgImludGVybmFsIGNsYXNzIG5hbWVzIiByYXRoZXIgdGhhbiBGUUNOLCBpLmUuIHRoZXkgdXNlICIvIiBpbnN0ZWFkICIuIgotICAgICAqIGFzIHBhY2thZ2Ugc2VwYXJhdG9ycy4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2V0PFN0cmluZz4gZ2V0Q2xhc3Nlc05vdFJlbmFtZWQoKSB7Ci0gICAgICAgIHJldHVybiBtQ2xhc3Nlc05vdFJlbmFtZWQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXRpbGl0eSB0aGF0IHJldHVybnMgdGhlIGludGVybmFsIEFTTSBjbGFzcyBuYW1lIGZyb20gYSBmdWxseSBxdWFsaWZpZWQgYmluYXJ5IGNsYXNzCi0gICAgICogbmFtZS4gRS5nLiBpdCByZXR1cm5zIGFuZHJvaWQvdmlldy9WaWV3IGZyb20gYW5kcm9pZC52aWV3LlZpZXcuCi0gICAgICovCi0gICAgU3RyaW5nIGJpbmFyeVRvSW50ZXJuYWxDbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewotICAgICAgICBpZiAoY2xhc3NOYW1lID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5yZXBsYWNlKCcuJywgJy8nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiBTZXRzIHRoZSBtYXAgb2YgY2xhc3NlcyB0byBvdXRwdXQgYXMtaXMsIGV4Y2VwdCBpZiB0aGV5IGhhdmUgbmF0aXZlIG1ldGhvZHMgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRLZWVwKE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBrZWVwKSB7Ci0gICAgICAgIG1LZWVwID0ga2VlcDsKLSAgICB9Ci0KLSAgICAvKiogU2V0cyB0aGUgbWFwIG9mIGRlcGVuZGVuY2llcyB0aGF0IG11c3QgYmUgY29tcGxldGVseSBzdHViYmVkICovCi0gICAgcHVibGljIHZvaWQgc2V0RGVwcyhNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZGVwcykgewotICAgICAgICBtRGVwcyA9IGRlcHM7Ci0gICAgfQotCi0gICAgLyoqIEdldHMgdGhlIG1hcCBvZiBjbGFzc2VzIHRvIG91dHB1dCBhcy1pcywgZXhjZXB0IGlmIHRoZXkgaGF2ZSBuYXRpdmUgbWV0aG9kcyAqLwotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZ2V0S2VlcCgpIHsKLSAgICAgICAgcmV0dXJuIG1LZWVwOwotICAgIH0KLQotICAgIC8qKiBHZXRzIHRoZSBtYXAgb2YgZGVwZW5kZW5jaWVzIHRoYXQgbXVzdCBiZSBjb21wbGV0ZWx5IHN0dWJiZWQgKi8KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGdldERlcHMoKSB7Ci0gICAgICAgIHJldHVybiBtRGVwczsKLSAgICB9Ci0KLSAgICAvKiogR2VuZXJhdGVzIHRoZSBmaW5hbCBKQVIgKi8KLSAgICBwdWJsaWMgdm9pZCBnZW5lcmF0ZSgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIGJ5dGVbXT4gYWxsID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBieXRlW10+KCk7Ci0KLSAgICAgICAgZm9yIChDbGFzczw/PiBjbGF6eiA6IG1JbmplY3RDbGFzc2VzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGNsYXNzVG9FbnRyeVBhdGgoY2xhenopOwotICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBDbGFzc0xvYWRlci5nZXRTeXN0ZW1SZXNvdXJjZUFzU3RyZWFtKG5hbWUpOwotICAgICAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBuZXcgQ2xhc3NSZWFkZXIoaXMpOwotICAgICAgICAgICAgYnl0ZVtdIGIgPSB0cmFuc2Zvcm0oY3IsIHRydWUgLyogc3R1Yk5hdGl2ZXNPbmx5ICovKTsKLSAgICAgICAgICAgIG5hbWUgPSBjbGFzc05hbWVUb0VudHJ5UGF0aCh0cmFuc2Zvcm1OYW1lKGNyLmdldENsYXNzTmFtZSgpKSk7Ci0gICAgICAgICAgICBhbGwucHV0KG5hbWUsIGIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIENsYXNzUmVhZGVyPiBlbnRyeSA6IG1EZXBzLmVudHJ5U2V0KCkpIHsKLSAgICAgICAgICAgIENsYXNzUmVhZGVyIGNyID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgIGJ5dGVbXSBiID0gdHJhbnNmb3JtKGNyLCB0cnVlIC8qIHN0dWJOYXRpdmVzT25seSAqLyk7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGNsYXNzTmFtZVRvRW50cnlQYXRoKHRyYW5zZm9ybU5hbWUoY3IuZ2V0Q2xhc3NOYW1lKCkpKTsKLSAgICAgICAgICAgIGFsbC5wdXQobmFtZSwgYik7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgQ2xhc3NSZWFkZXI+IGVudHJ5IDogbUtlZXAuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBlbnRyeS5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgYnl0ZVtdIGIgPSB0cmFuc2Zvcm0oY3IsIHRydWUgLyogc3R1Yk5hdGl2ZXNPbmx5ICovKTsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gY2xhc3NOYW1lVG9FbnRyeVBhdGgodHJhbnNmb3JtTmFtZShjci5nZXRDbGFzc05hbWUoKSkpOwotICAgICAgICAgICAgYWxsLnB1dChuYW1lLCBiKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1Mb2cuaW5mbygiIyBkZXBzIGNsYXNzZXM6ICVkIiwgbURlcHMuc2l6ZSgpKTsKLSAgICAgICAgbUxvZy5pbmZvKCIjIGtlZXAgY2xhc3NlczogJWQiLCBtS2VlcC5zaXplKCkpOwotICAgICAgICBtTG9nLmluZm8oIiMgcmVuYW1lZCAgICAgOiAlZCIsIG1SZW5hbWVDb3VudCk7Ci0KLSAgICAgICAgY3JlYXRlSmFyKG5ldyBGaWxlT3V0cHV0U3RyZWFtKG1Pc0Rlc3RKYXIpLCBhbGwpOwotICAgICAgICBtTG9nLmluZm8oIkNyZWF0ZWQgSkFSIGZpbGUgJXMiLCBtT3NEZXN0SmFyKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXcml0ZXMgdGhlIEpBUiBmaWxlLgotICAgICAqCi0gICAgICogQHBhcmFtIG91dFN0cmVhbSBUaGUgZmlsZSBvdXRwdXQgc3RyZWFtIHdlcmUgdG8gd3JpdGUgdGhlIEpBUi4KLSAgICAgKiBAcGFyYW0gYWxsIFRoZSBtYXAgb2YgYWxsIGNsYXNzZXMgdG8gb3V0cHV0LgotICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgYW4gSS9PIGVycm9yIGhhcyBvY2N1cnJlZAotICAgICAqLwotICAgIHZvaWQgY3JlYXRlSmFyKEZpbGVPdXRwdXRTdHJlYW0gb3V0U3RyZWFtLCBNYXA8U3RyaW5nLGJ5dGVbXT4gYWxsKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBKYXJPdXRwdXRTdHJlYW0gamFyID0gbmV3IEphck91dHB1dFN0cmVhbShvdXRTdHJlYW0pOwotICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgYnl0ZVtdPiBlbnRyeSA6IGFsbC5lbnRyeVNldCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGVudHJ5LmdldEtleSgpOwotICAgICAgICAgICAgSmFyRW50cnkgamFyX2VudHJ5ID0gbmV3IEphckVudHJ5KG5hbWUpOwotICAgICAgICAgICAgamFyLnB1dE5leHRFbnRyeShqYXJfZW50cnkpOwotICAgICAgICAgICAgamFyLndyaXRlKGVudHJ5LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgamFyLmNsb3NlRW50cnkoKTsKLSAgICAgICAgfQotICAgICAgICBqYXIuZmx1c2goKTsKLSAgICAgICAgamFyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXRpbGl0eSBtZXRob2QgdGhhdCBjb252ZXJ0cyBhIGZ1bGx5IHF1YWxpZmllZCBqYXZhIG5hbWUgaW50byBhIEpBUiBlbnRyeSBwYXRoCi0gICAgICogZS5nLiBmb3IgdGhlIGlucHV0ICJhbmRyb2lkLnZpZXcuVmlldyIgaXQgcmV0dXJucyAiYW5kcm9pZC92aWV3L1ZpZXcuY2xhc3MiCi0gICAgICovCi0gICAgU3RyaW5nIGNsYXNzTmFtZVRvRW50cnlQYXRoKFN0cmluZyBjbGFzc05hbWUpIHsKLSAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5yZXBsYWNlQWxsKCJcXC4iLCAiLyIpLmNvbmNhdCgiLmNsYXNzIik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXRpbGl0eSBtZXRob2QgdG8gZ2V0IHRoZSBKQVIgZW50cnkgcGF0aCBmcm9tIGEgQ2xhc3MgbmFtZS4KLSAgICAgKiBlLmcuIGl0IHJldHVybnMgc29tZXRpbmcgbGlrZSAiY29tL2Zvby9PdXRlckNsYXNzJElubmVyQ2xhc3MxJElubmVyQ2xhc3MyLmNsYXNzIgotICAgICAqLwotICAgIHByaXZhdGUgU3RyaW5nIGNsYXNzVG9FbnRyeVBhdGgoQ2xhc3M8Pz4gY2xhenopIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSAiIjsKLSAgICAgICAgQ2xhc3M8Pz4gcGFyZW50OwotICAgICAgICB3aGlsZSAoKHBhcmVudCA9IGNsYXp6LmdldEVuY2xvc2luZ0NsYXNzKCkpICE9IG51bGwpIHsKLSAgICAgICAgICAgIG5hbWUgPSAiJCIgKyBjbGF6ei5nZXRTaW1wbGVOYW1lKCkgKyBuYW1lOwotICAgICAgICAgICAgY2xhenogPSBwYXJlbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNsYXNzTmFtZVRvRW50cnlQYXRoKGNsYXp6LmdldENhbm9uaWNhbE5hbWUoKSArIG5hbWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRyYW5zZm9ybXMgYSBjbGFzcy4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhlcmUgYXJlIDMga2luZCBvZiB0cmFuc2Zvcm1hdGlvbnM6Ci0gICAgICoKLSAgICAgKiAxLSBGb3IgIm1vY2siIGRlcGVuZGVuY2llcyBjbGFzc2VzLCB3ZSB3YW50IHRvIHJlbW92ZSBhbGwgY29kZSBmcm9tIG1ldGhvZHMgYW5kIHJlcGxhY2UKLSAgICAgKiBieSBhIHN0dWIuIE5hdGl2ZSBtZXRob2RzIG11c3QgYmUgaW1wbGVtZW50ZWQgd2l0aCB0aGlzIHN0dWIgdG9vLiBBYnN0cmFjdCBtZXRob2RzIGFyZQotICAgICAqIGxlZnQgaW50YWN0LiBNb2RpZmllZCBjbGFzc2VzIG11c3QgYmUgb3ZlcnJpZGFibGUgKG5vbi1wcml2YXRlLCBub24tZmluYWwpLgotICAgICAqIE5hdGl2ZSBtZXRob2RzIG11c3QgYmUgbWFkZSBub24tZmluYWwsIG5vbi1wcml2YXRlLgotICAgICAqCi0gICAgICogMi0gRm9yICJrZWVwIiBjbGFzc2VzLCB3ZSB3YW50IHRvIHJld3JpdGUgYWxsIG5hdGl2ZSBtZXRob2RzIGFzIGluZGljYXRlZCBhYm92ZS4KLSAgICAgKiBJZiBhIGNsYXNzIGhhcyBuYXRpdmUgbWV0aG9kcywgaXQgbXVzdCBhbHNvIGJlIG1hZGUgbm9uLXByaXZhdGUsIG5vbi1maW5hbC4KLSAgICAgKgotICAgICAqIE5vdGUgdGhhdCB1bmZvcnR1bmF0ZWx5IHN0YXRpYyBtZXRob2RzIGNhbm5vdCBiZSBjaGFuZ2VkIHRvIG5vbi1zdGF0aWMgKHNpbmNlIHN0YXRpYyBhbmQKLSAgICAgKiBub24tc3RhdGljIGFyZSBpbnZva2VkIGRpZmZlcmVudGx5LikKLSAgICAgKi8KLSAgICBieXRlW10gdHJhbnNmb3JtKENsYXNzUmVhZGVyIGNyLCBib29sZWFuIHN0dWJOYXRpdmVzT25seSkgewotCi0gICAgICAgIGJvb2xlYW4gaGFzTmF0aXZlTWV0aG9kcyA9IGhhc05hdGl2ZU1ldGhvZHMoY3IpOwotCi0gICAgICAgIC8vIEdldCB0aGUgY2xhc3MgbmFtZSwgYXMgYW4gaW50ZXJuYWwgbmFtZSAoZS5nLiBjb20vYW5kcm9pZC9Tb21lQ2xhc3MkSW5uZXJDbGFzcykKLSAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGNyLmdldENsYXNzTmFtZSgpOwotCi0gICAgICAgIFN0cmluZyBuZXdOYW1lID0gdHJhbnNmb3JtTmFtZShjbGFzc05hbWUpOwotICAgICAgICAvLyB0cmFuc2Zvcm1OYW1lIHJldHVybnMgaXRzIGlucHV0IGFyZ3VtZW50IGlmIHRoZXJlJ3Mgbm8gbmVlZCB0byByZW5hbWUgdGhlIGNsYXNzCi0gICAgICAgIGlmIChuZXdOYW1lICE9IGNsYXNzTmFtZSkgewotICAgICAgICAgICAgbVJlbmFtZUNvdW50Kys7Ci0gICAgICAgICAgICAvLyBUaGlzIGNsYXNzIGlzIGJlaW5nIHJlbmFtZWQsIHNvIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IG9mIGNsYXNzZXMgbm90IHJlbmFtZWQuCi0gICAgICAgICAgICBtQ2xhc3Nlc05vdFJlbmFtZWQucmVtb3ZlKGNsYXNzTmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtTG9nLmRlYnVnKCJUcmFuc2Zvcm0gJXMlcyVzJXMiLCBjbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgbmV3TmFtZSA9PSBjbGFzc05hbWUgPyAiIiA6ICIgKHJlbmFtZWQgdG8gIiArIG5ld05hbWUgKyAiKSIsCi0gICAgICAgICAgICAgICAgaGFzTmF0aXZlTWV0aG9kcyA/ICIgLS0gaGFzIG5hdGl2ZXMiIDogIiIsCi0gICAgICAgICAgICAgICAgc3R1Yk5hdGl2ZXNPbmx5ID8gIiAtLSBzdHViIG5hdGl2ZXMgb25seSIgOiAiIik7Ci0KLSAgICAgICAgLy8gUmV3cml0ZSB0aGUgbmV3IGNsYXNzIGZyb20gc2NyYXRjaCwgd2l0aG91dCByZXVzaW5nIHRoZSBjb25zdGFudCBwb29sIGZyb20gdGhlCi0gICAgICAgIC8vIG9yaWdpbmFsIGNsYXNzIHJlYWRlci4KLSAgICAgICAgQ2xhc3NXcml0ZXIgY3cgPSBuZXcgQ2xhc3NXcml0ZXIoQ2xhc3NXcml0ZXIuQ09NUFVURV9NQVhTKTsKLQotICAgICAgICBDbGFzc1Zpc2l0b3IgY3YgPSBuZXcgUmVmYWN0b3JDbGFzc0FkYXB0ZXIoY3csIG1SZWZhY3RvckNsYXNzZXMpOwotICAgICAgICBpZiAobmV3TmFtZSAhPSBjbGFzc05hbWUpIHsKLSAgICAgICAgICAgIGN2ID0gbmV3IFJlbmFtZUNsYXNzQWRhcHRlcihjdiwgY2xhc3NOYW1lLCBuZXdOYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIGN2ID0gbmV3IFRyYW5zZm9ybUNsYXNzQWRhcHRlcihtTG9nLCBtU3R1Yk1ldGhvZHMsCi0gICAgICAgICAgICAgICAgbURlbGV0ZVJldHVybnMuZ2V0KGNsYXNzTmFtZSksCi0gICAgICAgICAgICAgICAgbmV3TmFtZSwgY3YsCi0gICAgICAgICAgICAgICAgc3R1Yk5hdGl2ZXNPbmx5LCBzdHViTmF0aXZlc09ubHkgfHwgaGFzTmF0aXZlTWV0aG9kcyk7Ci0KLSAgICAgICAgU2V0PFN0cmluZz4gZGVsZWdhdGVNZXRob2RzID0gbURlbGVnYXRlTWV0aG9kcy5nZXQoY2xhc3NOYW1lKTsKLSAgICAgICAgaWYgKGRlbGVnYXRlTWV0aG9kcyAhPSBudWxsICYmICFkZWxlZ2F0ZU1ldGhvZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBJZiBkZWxlZ2F0ZU1ldGhvZHMgb25seSBjb250YWlucyBvbmUgZW50cnkgQUxMX05BVElWRVMgYW5kIHRoZSBjbGFzcyBpcwotICAgICAgICAgICAgLy8ga25vd24gdG8gaGF2ZSBubyBuYXRpdmUgbWV0aG9kcywganVzdCBza2lwIHRoaXMgc3RlcC4KLSAgICAgICAgICAgIGlmIChoYXNOYXRpdmVNZXRob2RzIHx8Ci0gICAgICAgICAgICAgICAgICAgICEoZGVsZWdhdGVNZXRob2RzLnNpemUoKSA9PSAxICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGVNZXRob2RzLmNvbnRhaW5zKERlbGVnYXRlQ2xhc3NBZGFwdGVyLkFMTF9OQVRJVkVTKSkpIHsKLSAgICAgICAgICAgICAgICBjdiA9IG5ldyBEZWxlZ2F0ZUNsYXNzQWRhcHRlcihtTG9nLCBjdiwgY2xhc3NOYW1lLCBkZWxlZ2F0ZU1ldGhvZHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY3IuYWNjZXB0KGN2LCAwIC8qIGZsYWdzICovKTsKLSAgICAgICAgcmV0dXJuIGN3LnRvQnl0ZUFycmF5KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2hvdWxkIHRoaXMgY2xhc3MgYmUgcmVuYW1lZCwgdGhpcyByZXR1cm5zIHRoZSBuZXcgbmFtZS4gT3RoZXJ3aXNlIGl0IHJldHVybnMgdGhlCi0gICAgICogb3JpZ2luYWwgbmFtZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjbGFzc05hbWUgVGhlIGludGVybmFsIEFTTSBuYW1lIG9mIHRoZSBjbGFzcyB0aGF0IG1heSBoYXZlIHRvIGJlIHJlbmFtZWQKLSAgICAgKiBAcmV0dXJuIEEgbmV3IHRyYW5zZm9ybWVkIG5hbWUgb3IgdGhlIG9yaWdpbmFsIGlucHV0IGFyZ3VtZW50LgotICAgICAqLwotICAgIFN0cmluZyB0cmFuc2Zvcm1OYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKLSAgICAgICAgU3RyaW5nIG5ld05hbWUgPSBtUmVuYW1lQ2xhc3Nlcy5nZXQoY2xhc3NOYW1lKTsKLSAgICAgICAgaWYgKG5ld05hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG5ld05hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHBvcyA9IGNsYXNzTmFtZS5pbmRleE9mKCckJyk7Ci0gICAgICAgIGlmIChwb3MgPiAwKSB7Ci0gICAgICAgICAgICAvLyBJcyB0aGlzIGFuIGlubmVyIGNsYXNzIG9mIGEgcmVuYW1lZCBjbGFzcz8KLSAgICAgICAgICAgIFN0cmluZyBiYXNlID0gY2xhc3NOYW1lLnN1YnN0cmluZygwLCBwb3MpOwotICAgICAgICAgICAgbmV3TmFtZSA9IG1SZW5hbWVDbGFzc2VzLmdldChiYXNlKTsKLSAgICAgICAgICAgIGlmIChuZXdOYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3TmFtZSArIGNsYXNzTmFtZS5zdWJzdHJpbmcocG9zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjbGFzc05hbWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIGEgY2xhc3MgaGFzIGFueSBuYXRpdmUgbWV0aG9kcy4KLSAgICAgKi8KLSAgICBib29sZWFuIGhhc05hdGl2ZU1ldGhvZHMoQ2xhc3NSZWFkZXIgY3IpIHsKLSAgICAgICAgQ2xhc3NIYXNOYXRpdmVWaXNpdG9yIGN2ID0gbmV3IENsYXNzSGFzTmF0aXZlVmlzaXRvcigpOwotICAgICAgICBjci5hY2NlcHQoY3YsIDAgLyogZmxhZ3MgKi8pOwotICAgICAgICByZXR1cm4gY3YuaGFzTmF0aXZlTWV0aG9kcygpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9DbGFzc0hhc05hdGl2ZVZpc2l0b3IuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ2xhc3NIYXNOYXRpdmVWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOTU1ZmQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9DbGFzc0hhc05hdGl2ZVZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLlZpc2libGVGb3JUZXN0aW5nOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5WaXNpYmxlRm9yVGVzdGluZy5WaXNpYmlsaXR5OwotCi1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQW5ub3RhdGlvblZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQXR0cmlidXRlOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkNsYXNzVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5GaWVsZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5PcGNvZGVzOwotCi0vKioKLSAqIEluZGljYXRlcyBpZiBhIGNsYXNzIGNvbnRhaW5zIGFueSBuYXRpdmUgbWV0aG9kcy4KLSAqLwotcHVibGljIGNsYXNzIENsYXNzSGFzTmF0aXZlVmlzaXRvciBleHRlbmRzIENsYXNzVmlzaXRvciB7Ci0gICAgcHVibGljIENsYXNzSGFzTmF0aXZlVmlzaXRvcigpIHsKLSAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbUhhc05hdGl2ZU1ldGhvZHMgPSBmYWxzZTsKLQotICAgIHB1YmxpYyBib29sZWFuIGhhc05hdGl2ZU1ldGhvZHMoKSB7Ci0gICAgICAgIHJldHVybiBtSGFzTmF0aXZlTWV0aG9kczsKLSAgICB9Ci0KLSAgICBAVmlzaWJsZUZvclRlc3RpbmcodmlzaWJpbGl0eT1WaXNpYmlsaXR5LlBSSVZBVEUpCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0SGFzTmF0aXZlTWV0aG9kcyhib29sZWFuIGhhc05hdGl2ZU1ldGhvZHMsIFN0cmluZyBtZXRob2ROYW1lKSB7Ci0gICAgICAgIG1IYXNOYXRpdmVNZXRob2RzID0gaGFzTmF0aXZlTWV0aG9kczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdChpbnQgdmVyc2lvbiwgaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBzaWduYXR1cmUsCi0gICAgICAgICAgICBTdHJpbmcgc3VwZXJOYW1lLCBTdHJpbmdbXSBpbnRlcmZhY2VzKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBbm5vdGF0aW9uKFN0cmluZyBkZXNjLCBib29sZWFuIHZpc2libGUpIHsKLSAgICAgICAgLy8gcGFzcwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdEF0dHJpYnV0ZShBdHRyaWJ1dGUgYXR0cikgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRFbmQoKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmllbGRWaXNpdG9yIHZpc2l0RmllbGQoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIC8vIHBhc3MKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRJbm5lckNsYXNzKFN0cmluZyBuYW1lLCBTdHJpbmcgb3V0ZXJOYW1lLAotICAgICAgICAgICAgU3RyaW5nIGlubmVyTmFtZSwgaW50IGFjY2VzcykgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1ldGhvZFZpc2l0b3IgdmlzaXRNZXRob2QoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSwgU3RyaW5nW10gZXhjZXB0aW9ucykgewotICAgICAgICBpZiAoKGFjY2VzcyAmIE9wY29kZXMuQUNDX05BVElWRSkgIT0gMCkgewotICAgICAgICAgICAgc2V0SGFzTmF0aXZlTWV0aG9kcyh0cnVlLCBuYW1lKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdE91dGVyQ2xhc3MoU3RyaW5nIG93bmVyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MpIHsKLSAgICAgICAgLy8gcGFzcwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0U291cmNlKFN0cmluZyBzb3VyY2UsIFN0cmluZyBkZWJ1ZykgewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0NyZWF0ZUluZm8uamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ3JlYXRlSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjc3OWUzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ3JlYXRlSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmphdmEuQXV0b0Nsb3NlYWJsZTsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuamF2YS5DaGFyc2V0czsKLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuamF2YS5JbnRlZ3JhbFRvU3RyaW5nOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5qYXZhLk9iamVjdHM7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmphdmEuVW5zYWZlQnl0ZVNlcXVlbmNlOwotCi0vKioKLSAqIERlc2NyaWJlcyB0aGUgd29yayB0byBiZSBkb25lIGJ5IHtAbGluayBBc21HZW5lcmF0b3J9LgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQ3JlYXRlSW5mbyBpbXBsZW1lbnRzIElDcmVhdGVJbmZvIHsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY2xhc3MgZnJvbSBsYXlvdXRsaWJfY3JlYXRlIHRvIGluamVjdCBpbiBsYXlvdXRsaWIuCi0gICAgICogVGhlIGxpc3QgY2FuIGJlIGVtcHR5IGJ1dCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDbGFzczw/PltdIGdldEluamVjdGVkQ2xhc3NlcygpIHsKLSAgICAgICAgcmV0dXJuIElOSkVDVEVEX0NMQVNTRVM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBtZXRob2RzIHRvIHJld3JpdGUgYXMgZGVsZWdhdGVzLgotICAgICAqIFRoZSBsaXN0IGNhbiBiZSBlbXB0eSBidXQgbXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZWdhdGVNZXRob2RzKCkgewotICAgICAgICByZXR1cm4gREVMRUdBVEVfTUVUSE9EUzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGNsYXNzZXMgb24gd2hpY2ggdG8gZGVsZWdhdGUgYWxsIG5hdGl2ZSBtZXRob2RzLgotICAgICAqIFRoZSBsaXN0IGNhbiBiZSBlbXB0eSBidXQgbXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZWdhdGVDbGFzc05hdGl2ZXMoKSB7Ci0gICAgICAgIHJldHVybiBERUxFR0FURV9DTEFTU19OQVRJVkVTOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgVGhlIGxpc3Qgb2YgbWV0aG9kcyB0byBzdHViIG91dC4gRWFjaCBlbnRyeSBtdXN0IGJlIGluIHRoZSBmb3JtCi0gICAgICogInBhY2thZ2UucGFja2FnZS5PdXRlckNsYXNzJElubmVyQ2xhc3MjTWV0aG9kTmFtZSIuCi0gICAgICogVGhlIGxpc3QgY2FuIGJlIGVtcHR5IGJ1dCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqIDxwLz4KLSAgICAgKiBUaGlzIHVzYWdlIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbWV0aG9kICdkZWxlZ2F0ZXMnIGluc3RlYWQuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIGdldE92ZXJyaWRkZW5NZXRob2RzKCkgewotICAgICAgICByZXR1cm4gT1ZFUlJJRERFTl9NRVRIT0RTOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY2xhc3NlcyB0byByZW5hbWUsIG11c3QgYmUgYW4gZXZlbiBsaXN0OiB0aGUgYmluYXJ5IEZRQ04KLSAgICAgKiBvZiBjbGFzcyB0byByZXBsYWNlIGZvbGxvd2VkIGJ5IHRoZSBuZXcgRlFDTi4KLSAgICAgKiBUaGUgbGlzdCBjYW4gYmUgZW1wdHkgYnV0IG11c3Qgbm90IGJlIG51bGwuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIGdldFJlbmFtZWRDbGFzc2VzKCkgewotICAgICAgICByZXR1cm4gUkVOQU1FRF9DTEFTU0VTOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY2xhc3NlcyBmb3Igd2hpY2ggdGhlIG1ldGhvZHMgcmV0dXJuaW5nIHRoZW0gc2hvdWxkIGJlIGRlbGV0ZWQuCi0gICAgICogVGhlIGFycmF5IGNvbnRhaW5zIGEgbGlzdCBvZiBudWxsIHRlcm1pbmF0ZWQgc2VjdGlvbiBzdGFydGluZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotICAgICAqIHRvIHJlbmFtZSBpbiB3aGljaCB0aGUgbWV0aG9kcyBhcmUgZGVsZXRlZCwgZm9sbG93ZWQgYnkgYSBsaXN0IG9mIHJldHVybiB0eXBlcyBpZGVudGlmeWluZwotICAgICAqIHRoZSBtZXRob2RzIHRvIGRlbGV0ZS4KLSAgICAgKiBUaGUgbGlzdCBjYW4gYmUgZW1wdHkgYnV0IG11c3Qgbm90IGJlIG51bGwuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIGdldERlbGV0ZVJldHVybnMoKSB7Ci0gICAgICAgIHJldHVybiBERUxFVEVfUkVUVVJOUzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGNsYXNzZXMgdG8gcmVmYWN0b3IsIG11c3QgYmUgYW4gZXZlbiBsaXN0OiB0aGUgYmluYXJ5IEZRQ04gb2YgY2xhc3MgdG8KLSAgICAgKiByZXBsYWNlIGZvbGxvd2VkIGJ5IHRoZSBuZXcgRlFDTi4gQWxsIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCBjbGFzcyBzaG91bGQgYmUgdXBkYXRlZCB0byB0aGUKLSAgICAgKiBuZXcgY2xhc3MuIFRoZSBsaXN0IGNhbiBiZSBlbXB0eSBidXQgbXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0SmF2YVBrZ0NsYXNzZXMoKSB7Ci0gICAgICByZXR1cm4gSkFWQV9QS0dfQ0xBU1NFUzsKLSAgICB9Ci0gICAgLy8tLS0tLQotCi0gICAgLyoqCi0gICAgICogVGhlIGxpc3Qgb2YgY2xhc3MgZnJvbSBsYXlvdXRsaWJfY3JlYXRlIHRvIGluamVjdCBpbiBsYXlvdXRsaWIuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgQ2xhc3M8Pz5bXSBJTkpFQ1RFRF9DTEFTU0VTID0gbmV3IENsYXNzPD8+W10gewotICAgICAgICAgICAgT3ZlcnJpZGVNZXRob2QuY2xhc3MsCi0gICAgICAgICAgICBNZXRob2RMaXN0ZW5lci5jbGFzcywKLSAgICAgICAgICAgIE1ldGhvZEFkYXB0ZXIuY2xhc3MsCi0gICAgICAgICAgICBJQ3JlYXRlSW5mby5jbGFzcywKLSAgICAgICAgICAgIENyZWF0ZUluZm8uY2xhc3MsCi0gICAgICAgICAgICBMYXlvdXRsaWJEZWxlZ2F0ZS5jbGFzcywKLSAgICAgICAgICAgIC8qIEphdmEgcGFja2FnZSBjbGFzc2VzICovCi0gICAgICAgICAgICBBdXRvQ2xvc2VhYmxlLmNsYXNzLAotICAgICAgICAgICAgT2JqZWN0cy5jbGFzcywKLSAgICAgICAgICAgIEludGVncmFsVG9TdHJpbmcuY2xhc3MsCi0gICAgICAgICAgICBVbnNhZmVCeXRlU2VxdWVuY2UuY2xhc3MsCi0gICAgICAgICAgICBDaGFyc2V0cy5jbGFzcywKLSAgICAgICAgfTsKLQotICAgIC8qKgotICAgICAqIFRoZSBsaXN0IG9mIG1ldGhvZHMgdG8gcmV3cml0ZSBhcyBkZWxlZ2F0ZXMuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmdbXSBERUxFR0FURV9NRVRIT0RTID0gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgImFuZHJvaWQuYXBwLkZyYWdtZW50I2luc3RhbnRpYXRlIiwgLy8oTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL0J1bmRsZTspTGFuZHJvaWQvYXBwL0ZyYWdtZW50OyIsCi0gICAgICAgICJhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcyRUaGVtZSNvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzIiwKLSAgICAgICAgImFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzJFRoZW1lI3Jlc29sdmVBdHRyaWJ1dGUiLAotICAgICAgICAiYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5I2dldFZhbHVlQXQiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5I2ZpbmlzaERlY29kZSIsCi0gICAgICAgICJhbmRyb2lkLm9zLkhhbmRsZXIjc2VuZE1lc3NhZ2VBdFRpbWUiLAotICAgICAgICAiYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkI3J1biIsCi0gICAgICAgICJhbmRyb2lkLm9zLkJ1aWxkI2dldFN0cmluZyIsCi0gICAgICAgICJhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVGb3JtYXQjaXMyNEhvdXJGb3JtYXQiLAotICAgICAgICAiYW5kcm9pZC50ZXh0LmZvcm1hdC5UaW1lI2Zvcm1hdDEiLAotICAgICAgICAiYW5kcm9pZC52aWV3LkNob3Jlb2dyYXBoZXIjZ2V0UmVmcmVzaFJhdGUiLAotICAgICAgICAiYW5kcm9pZC52aWV3LkRpc3BsYXkjdXBkYXRlRGlzcGxheUluZm9Mb2NrZWQiLAotICAgICAgICAiYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyI3JJbmZsYXRlIiwKLSAgICAgICAgImFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlciNwYXJzZUluY2x1ZGUiLAotICAgICAgICAiYW5kcm9pZC52aWV3LlZpZXcjaXNJbkVkaXRNb2RlIiwKLSAgICAgICAgImFuZHJvaWQudmlldy5WaWV3Um9vdEltcGwjaXNJblRvdWNoTW9kZSIsCi0gICAgICAgICJhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlckdsb2JhbCNnZXRXaW5kb3dNYW5hZ2VyU2VydmljZSIsCi0gICAgICAgICJhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RNYW5hZ2VyI2dldEluc3RhbmNlIiwKLSAgICAgICAgImNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuWG1sVXRpbHMjY29udmVydFZhbHVlVG9JbnQiLAotICAgICAgICAiY29tLmFuZHJvaWQuaW50ZXJuYWwudGV4dHNlcnZpY2UuSVRleHRTZXJ2aWNlc01hbmFnZXIkU3R1YiNhc0ludGVyZmFjZSIsCi0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFRoZSBsaXN0IG9mIGNsYXNzZXMgb24gd2hpY2ggdG8gZGVsZWdhdGUgYWxsIG5hdGl2ZSBtZXRob2RzLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nW10gREVMRUdBVEVfQ0xBU1NfTkFUSVZFUyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICJhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlciIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLkF2b2lkWGZlcm1vZGUiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5IiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwU2hhZGVyIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuQmx1ck1hc2tGaWx0ZXIiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5DYW52YXMiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5Db2xvckZpbHRlciIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLkNvbG9yTWF0cml4Q29sb3JGaWx0ZXIiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5Db21wb3NlUGF0aEVmZmVjdCIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLkNvbXBvc2VTaGFkZXIiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5Db3JuZXJQYXRoRWZmZWN0IiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuRGFzaFBhdGhFZmZlY3QiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5EaXNjcmV0ZVBhdGhFZmZlY3QiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5EcmF3RmlsdGVyIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuRW1ib3NzTWFza0ZpbHRlciIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLkxheWVyUmFzdGVyaXplciIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLkxpZ2h0aW5nQ29sb3JGaWx0ZXIiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5MaW5lYXJHcmFkaWVudCIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLk1hc2tGaWx0ZXIiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5NYXRyaXgiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5OaW5lUGF0Y2giLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5QYWludCIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLlBhaW50RmxhZ3NEcmF3RmlsdGVyIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuUGF0aCIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLlBhdGhEYXNoUGF0aEVmZmVjdCIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLlBhdGhFZmZlY3QiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5QaXhlbFhvclhmZXJtb2RlIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZkNvbG9yRmlsdGVyIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZlhmZXJtb2RlIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuUmFkaWFsR3JhZGllbnQiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5SYXN0ZXJpemVyIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuUmVnaW9uIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuU2hhZGVyIiwKLSAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuU3VtUGF0aEVmZmVjdCIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLlN3ZWVwR3JhZGllbnQiLAotICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5UeXBlZmFjZSIsCi0gICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLlhmZXJtb2RlIiwKLSAgICAgICAgImFuZHJvaWQub3MuU3lzdGVtQ2xvY2siLAotICAgICAgICAiYW5kcm9pZC50ZXh0LkFuZHJvaWRCaWRpIiwKLSAgICAgICAgImFuZHJvaWQudXRpbC5GbG9hdE1hdGgiLAotICAgICAgICAiYW5kcm9pZC52aWV3LkRpc3BsYXkiLAotICAgICAgICAibGliY29yZS5pY3UuRGF0ZUludGVydmFsRm9ybWF0IiwKLSAgICAgICAgImxpYmNvcmUuaWN1LklDVSIsCi0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFRoZSBsaXN0IG9mIG1ldGhvZHMgdG8gc3R1YiBvdXQuIEVhY2ggZW50cnkgbXVzdCBiZSBpbiB0aGUgZm9ybQotICAgICAqICAicGFja2FnZS5wYWNrYWdlLk91dGVyQ2xhc3MkSW5uZXJDbGFzcyNNZXRob2ROYW1lIi4KLSAgICAgKiAgVGhpcyB1c2FnZSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1ldGhvZCAnZGVsZWdhdGVzJyBpbnN0ZWFkLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZ1tdIE9WRVJSSURERU5fTUVUSE9EUyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqICBUaGUgbGlzdCBvZiBjbGFzc2VzIHRvIHJlbmFtZSwgbXVzdCBiZSBhbiBldmVuIGxpc3Q6IHRoZSBiaW5hcnkgRlFDTgotICAgICAqICBvZiBjbGFzcyB0byByZXBsYWNlIGZvbGxvd2VkIGJ5IHRoZSBuZXcgRlFDTi4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmdbXSBSRU5BTUVEX0NMQVNTRVMgPQotICAgICAgICBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgImFuZHJvaWQub3MuU2VydmljZU1hbmFnZXIiLCAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQub3MuX09yaWdpbmFsX1NlcnZpY2VNYW5hZ2VyIiwKLSAgICAgICAgICAgICJhbmRyb2lkLnV0aWwuTHJ1Q2FjaGUiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnV0aWwuX09yaWdpbmFsX0xydUNhY2hlIiwKLSAgICAgICAgICAgICJhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXciLCAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnZpZXcuX09yaWdpbmFsX1N1cmZhY2VWaWV3IiwKLSAgICAgICAgICAgICJhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5TWFuYWdlciIsICJhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5fT3JpZ2luYWxfQWNjZXNzaWJpbGl0eU1hbmFnZXIiLAotICAgICAgICAgICAgImFuZHJvaWQud2Via2l0LldlYlZpZXciLCAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQud2Via2l0Ll9PcmlnaW5hbF9XZWJWaWV3IiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuUG9saWN5TWFuYWdlciIsICAgICAgICJjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuX09yaWdpbmFsX1BvbGljeU1hbmFnZXIiLAotICAgICAgICB9OwotCi0gICAgLyoqCi0gICAgICogVGhlIGxpc3Qgb2YgY2xhc3MgcmVmZXJlbmNlcyB0byB1cGRhdGUsIG11c3QgYmUgYW4gZXZlbiBsaXN0OiB0aGUgYmluYXJ5Ci0gICAgICogRlFDTiBvZiBjbGFzcyB0byByZXBsYWNlIGZvbGxvd2VkIGJ5IHRoZSBuZXcgRlFDTi4gVGhlIGNsYXNzZXMgdG8KLSAgICAgKiByZXBsYWNlIGFyZSB0byBiZSBleGNsdWRlZCBmcm9tIHRoZSBvdXRwdXQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nW10gSkFWQV9QS0dfQ0xBU1NFUyA9Ci0gICAgICAgIG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAiamF2YS5sYW5nLkF1dG9DbG9zZWFibGUiLCAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmphdmEuQXV0b0Nsb3NlYWJsZSIsCi0gICAgICAgICAgICAiamF2YS51dGlsLk9iamVjdHMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmphdmEuT2JqZWN0cyIsCi0gICAgICAgICAgICAiamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0cyIsICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmphdmEuQ2hhcnNldHMiLAotICAgICAgICAgICAgImphdmEubGFuZy5JbnRlZ3JhbFRvU3RyaW5nIiwgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5qYXZhLkludGVncmFsVG9TdHJpbmciLAotICAgICAgICAgICAgImphdmEubGFuZy5VbnNhZmVCeXRlU2VxdWVuY2UiLCAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5qYXZhLlVuc2FmZUJ5dGVTZXF1ZW5jZSIsCi0gICAgICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBMaXN0IG9mIGNsYXNzZXMgZm9yIHdoaWNoIHRoZSBtZXRob2RzIHJldHVybmluZyB0aGVtIHNob3VsZCBiZSBkZWxldGVkLgotICAgICAqIFRoZSBhcnJheSBjb250YWlucyBhIGxpc3Qgb2YgbnVsbCB0ZXJtaW5hdGVkIHNlY3Rpb24gc3RhcnRpbmcgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLSAgICAgKiB0byByZW5hbWUgaW4gd2hpY2ggdGhlIG1ldGhvZHMgYXJlIGRlbGV0ZWQsIGZvbGxvd2VkIGJ5IGEgbGlzdCBvZiByZXR1cm4gdHlwZXMgaWRlbnRpZnlpbmcKLSAgICAgKiB0aGUgbWV0aG9kcyB0byBkZWxldGUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nW10gREVMRVRFX1JFVFVSTlMgPQotICAgICAgICBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgbnVsbCB9OyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXBhcmF0b3IsIGZvciBuZXh0IGNsYXNzL21ldGhvZHMgbGlzdC4KLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9EZWxlZ2F0ZUNsYXNzQWRhcHRlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9EZWxlZ2F0ZUNsYXNzQWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjdiZTk3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVsZWdhdGVDbGFzc0FkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk1ldGhvZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uT3Bjb2RlczsKLQotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLS8qKgotICogQSB7QGxpbmsgRGVsZWdhdGVDbGFzc0FkYXB0ZXJ9IGNhbiB0cmFuc2Zvcm0gc29tZSBtZXRob2RzIGZyb20gYSBjbGFzcyBpbnRvCi0gKiBkZWxlZ2F0ZXMgdGhhdCBkZWZlciB0aGUgY2FsbCB0byBhbiBhc3NvY2lhdGVkIGRlbGVnYXRlIGNsYXNzLgotICogPHAvPgotICogVGhpcyBpcyB1c2VkIHRvIG92ZXJyaWRlIHNwZWNpZmljIG1ldGhvZHMgYW5kIG9yIGFsbCBuYXRpdmUgbWV0aG9kcyBpbiBjbGFzc2VzLgotICovCi1wdWJsaWMgY2xhc3MgRGVsZWdhdGVDbGFzc0FkYXB0ZXIgZXh0ZW5kcyBDbGFzc1Zpc2l0b3IgewotCi0gICAgLyoqIFN1ZmZpeCBhZGRlZCB0byBvcmlnaW5hbCBtZXRob2RzLiAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPUklHSU5BTF9TVUZGSVggPSAiX09yaWdpbmFsIjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ09OU1RSVUNUT1IgPSAiPGluaXQ+IjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ0xBU1NfSU5JVCA9ICI8Y2xpbml0PiI7Ci0KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBBTExfTkFUSVZFUyA9ICI8PGFsbF9uYXRpdmVzPj4iOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUNsYXNzTmFtZTsKLSAgICBwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IG1EZWxlZ2F0ZU1ldGhvZHM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMb2cgbUxvZzsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIERlbGVnYXRlQ2xhc3NBZGFwdGVyfSB0aGF0IGNhbiB0cmFuc2Zvcm0gc29tZSBtZXRob2RzCi0gICAgICogZnJvbSBhIGNsYXNzIGludG8gZGVsZWdhdGVzIHRoYXQgZGVmZXIgdGhlIGNhbGwgdG8gYW4gYXNzb2NpYXRlZCBkZWxlZ2F0ZSBjbGFzcy4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhpcyBpcyB1c2VkIHRvIG92ZXJyaWRlIHNwZWNpZmljIG1ldGhvZHMgYW5kIG9yIGFsbCBuYXRpdmUgbWV0aG9kcyBpbiBjbGFzc2VzLgotICAgICAqCi0gICAgICogQHBhcmFtIGxvZyBUaGUgbG9nZ2VyIG9iamVjdC4gTXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKiBAcGFyYW0gY3YgdGhlIGNsYXNzIHZpc2l0b3IgdG8gd2hpY2ggdGhpcyBhZGFwdGVyIG11c3QgZGVsZWdhdGUgY2FsbHMuCi0gICAgICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgaW50ZXJuYWwgY2xhc3MgbmFtZSBvZiB0aGUgY2xhc3MgdG8gdmlzaXQsCi0gICAgICogICAgICAgICAgZS5nLiA8Y29kZT5jb20vYW5kcm9pZC9Tb21lQ2xhc3MkSW5uZXJDbGFzczwvY29kZT4uCi0gICAgICogQHBhcmFtIGRlbGVnYXRlTWV0aG9kcyBUaGUgc2V0IG9mIG1ldGhvZCBuYW1lcyB0byBtb2RpZnkgYW5kL29yIHRoZQotICAgICAqICAgICAgICAgIHNwZWNpYWwgY29uc3RhbnQge0BsaW5rICNBTExfTkFUSVZFU30gdG8gY29udmVydCBhbGwgbmF0aXZlIG1ldGhvZHMuCi0gICAgICovCi0gICAgcHVibGljIERlbGVnYXRlQ2xhc3NBZGFwdGVyKExvZyBsb2csCi0gICAgICAgICAgICBDbGFzc1Zpc2l0b3IgY3YsCi0gICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lLAotICAgICAgICAgICAgU2V0PFN0cmluZz4gZGVsZWdhdGVNZXRob2RzKSB7Ci0gICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCwgY3YpOwotICAgICAgICBtTG9nID0gbG9nOwotICAgICAgICBtQ2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAgICAgICBtRGVsZWdhdGVNZXRob2RzID0gZGVsZWdhdGVNZXRob2RzOwotICAgIH0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIE1ldGhvZHMgZnJvbSB0aGUgQ2xhc3NBZGFwdGVyCi0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWV0aG9kVmlzaXRvciB2aXNpdE1ldGhvZChpbnQgYWNjZXNzLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsCi0gICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlLCBTdHJpbmdbXSBleGNlcHRpb25zKSB7Ci0KLSAgICAgICAgYm9vbGVhbiBpc1N0YXRpYyA9IChhY2Nlc3MgJiBPcGNvZGVzLkFDQ19TVEFUSUMpICE9IDA7Ci0gICAgICAgIGJvb2xlYW4gaXNOYXRpdmUgPSAoYWNjZXNzICYgT3Bjb2Rlcy5BQ0NfTkFUSVZFKSAhPSAwOwotCi0gICAgICAgIGJvb2xlYW4gdXNlRGVsZWdhdGUgPSAoaXNOYXRpdmUgJiYgbURlbGVnYXRlTWV0aG9kcy5jb250YWlucyhBTExfTkFUSVZFUykpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGVsZWdhdGVNZXRob2RzLmNvbnRhaW5zKG5hbWUpOwotCi0gICAgICAgIGlmICghdXNlRGVsZWdhdGUpIHsKLSAgICAgICAgICAgIC8vIE5vdCBjcmVhdGluZyBhIGRlbGVnYXRlIGZvciB0aGlzIG1ldGhvZCwgcGFzcyBpdCBhcy1pcyBmcm9tIHRoZSByZWFkZXIKLSAgICAgICAgICAgIC8vIHRvIHRoZSB3cml0ZXIuCi0gICAgICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRNZXRob2QoYWNjZXNzLCBuYW1lLCBkZXNjLCBzaWduYXR1cmUsIGV4Y2VwdGlvbnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHVzZURlbGVnYXRlKSB7Ci0gICAgICAgICAgICBpZiAoQ09OU1RSVUNUT1IuZXF1YWxzKG5hbWUpIHx8IENMQVNTX0lOSVQuZXF1YWxzKG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgZ2VuZXJhdGluZyBkZWxlZ2F0ZXMgZm9yIGNvbnN0cnVjdG9ycy4KLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAiRGVsZWdhdGUgZG9lc24ndCBzdXBwb3J0IG92ZXJyaWRpbmcgY29uc3RydWN0b3IgJTEkczolMiRzKCUzJHMpIiwgIC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgICAgICAgICAgICAgIG1DbGFzc05hbWUsIG5hbWUsIGRlc2MpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc05hdGl2ZSkgewotICAgICAgICAgICAgLy8gUmVtb3ZlIG5hdGl2ZSBmbGFnCi0gICAgICAgICAgICBhY2Nlc3MgPSBhY2Nlc3MgJiB+T3Bjb2Rlcy5BQ0NfTkFUSVZFOwotICAgICAgICAgICAgTWV0aG9kVmlzaXRvciBtd0RlbGVnYXRlID0gc3VwZXIudmlzaXRNZXRob2QoYWNjZXNzLCBuYW1lLCBkZXNjLCBzaWduYXR1cmUsIGV4Y2VwdGlvbnMpOwotCi0gICAgICAgICAgICBEZWxlZ2F0ZU1ldGhvZEFkYXB0ZXIyIGEgPSBuZXcgRGVsZWdhdGVNZXRob2RBZGFwdGVyMigKLSAgICAgICAgICAgICAgICAgICAgbUxvZywgbnVsbCAvKm13T3JpZ2luYWwqLywgbXdEZWxlZ2F0ZSwgbUNsYXNzTmFtZSwgbmFtZSwgZGVzYywgaXNTdGF0aWMpOwotCi0gICAgICAgICAgICAvLyBBIG5hdGl2ZSBoYXMgbm8gY29kZSB0byB2aXNpdCwgc28gd2UgbmVlZCB0byBnZW5lcmF0ZSBpdCBkaXJlY3RseS4KLSAgICAgICAgICAgIGEuZ2VuZXJhdGVEZWxlZ2F0ZUNvZGUoKTsKLQotICAgICAgICAgICAgcmV0dXJuIG13RGVsZWdhdGU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHaXZlbiBhIG5vbi1uYXRpdmUgU29tZUNsYXNzLk1ldGhvZE5hbWUoKSwgd2Ugd2FudCB0byBnZW5lcmF0ZSAyIG1ldGhvZHM6Ci0gICAgICAgIC8vIC0gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBtZXRob2QgbmFtZWQgU29tZUNsYXNzLk1ldGhvZE5hbWVfT3JpZ2luYWwoKS4KLSAgICAgICAgLy8gICBUaGUgY29udGVudCBpcyB0aGUgb3JpZ2luYWwgbWV0aG9kIGFzLWlzIGZyb20gdGhlIHJlYWRlci4KLSAgICAgICAgLy8gLSBBIGJyYW5kIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBTb21lQ2xhc3MuTWV0aG9kTmFtZSgpIHdoaWNoIGNhbGxzIHRvIGEKLSAgICAgICAgLy8gICBub24tZXhpc3RpbmcgbWV0aG9kIG5hbWVkIFNvbWVDbGFzc19EZWxlZ2F0ZS5NZXRob2ROYW1lKCkuCi0gICAgICAgIC8vICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgJ2RlbGVnYXRlJyBtZXRob2QgaXMgZG9uZSBpbiBsYXlvdXRsaWJfYnJpZ2RlLgotCi0gICAgICAgIGludCBhY2Nlc3NEZWxlZ2F0ZSA9IGFjY2VzczsKLSAgICAgICAgLy8gY2hhbmdlIGFjY2VzcyB0byBwdWJsaWMgZm9yIHRoZSBvcmlnaW5hbCBvbmUKLSAgICAgICAgaWYgKE1haW4uc09wdGlvbnMuZ2VuZXJhdGVQdWJsaWNBY2Nlc3MpIHsKLSAgICAgICAgICAgIGFjY2VzcyAmPSB+KE9wY29kZXMuQUNDX1BST1RFQ1RFRCB8IE9wY29kZXMuQUNDX1BSSVZBVEUpOwotICAgICAgICAgICAgYWNjZXNzIHw9IE9wY29kZXMuQUNDX1BVQkxJQzsKLSAgICAgICAgfQotCi0gICAgICAgIE1ldGhvZFZpc2l0b3IgbXdPcmlnaW5hbCA9IHN1cGVyLnZpc2l0TWV0aG9kKGFjY2VzcywgbmFtZSArIE9SSUdJTkFMX1NVRkZJWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYywgc2lnbmF0dXJlLCBleGNlcHRpb25zKTsKLSAgICAgICAgTWV0aG9kVmlzaXRvciBtd0RlbGVnYXRlID0gc3VwZXIudmlzaXRNZXRob2QoYWNjZXNzRGVsZWdhdGUsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MsIHNpZ25hdHVyZSwgZXhjZXB0aW9ucyk7Ci0KLSAgICAgICAgRGVsZWdhdGVNZXRob2RBZGFwdGVyMiBhID0gbmV3IERlbGVnYXRlTWV0aG9kQWRhcHRlcjIoCi0gICAgICAgICAgICAgICAgbUxvZywgbXdPcmlnaW5hbCwgbXdEZWxlZ2F0ZSwgbUNsYXNzTmFtZSwgbmFtZSwgZGVzYywgaXNTdGF0aWMpOwotICAgICAgICByZXR1cm4gYTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0RlbGVnYXRlTWV0aG9kQWRhcHRlcjIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVsZWdhdGVNZXRob2RBZGFwdGVyMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwYjIyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVsZWdhdGVNZXRob2RBZGFwdGVyMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuYW5ub3RhdGlvbnMuTGF5b3V0bGliRGVsZWdhdGU7Ci0KLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5Bbm5vdGF0aW9uVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5BdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NSZWFkZXI7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkxhYmVsOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk1ldGhvZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uT3Bjb2RlczsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5UeXBlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotLyoqCi0gKiBUaGlzIG1ldGhvZCBhZGFwdGVyIGdlbmVyYXRlcyBkZWxlZ2F0ZSBtZXRob2RzLgotICogPHAvPgotICogR2l2ZW4gYSBtZXRob2Qge0Bjb2RlIFNvbWVDbGFzcy5NZXRob2ROYW1lKCl9LCB0aGlzIGdlbmVyYXRlcyAxIG9yIDIgbWV0aG9kczoKLSAqIDx1bD4KLSAqIDxsaT4gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBtZXRob2QgbmFtZWQge0Bjb2RlIFNvbWVDbGFzcy5NZXRob2ROYW1lX09yaWdpbmFsKCl9LgotICogICBUaGUgY29udGVudCBpcyB0aGUgb3JpZ2luYWwgbWV0aG9kIGFzLWlzIGZyb20gdGhlIHJlYWRlci4KLSAqICAgVGhpcyBzdGVwIGlzIG9taXR0ZWQgaWYgdGhlIG1ldGhvZCBpcyBuYXRpdmUsIHNpbmNlIGl0IGhhcyBubyBKYXZhIGltcGxlbWVudGF0aW9uLgotICogPGxpPiBBIGJyYW5kIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiB7QGNvZGUgU29tZUNsYXNzLk1ldGhvZE5hbWUoKX0gd2hpY2ggY2FsbHMgdG8gYQotICogICBub24tZXhpc3RpbmcgbWV0aG9kIG5hbWVkIHtAY29kZSBTb21lQ2xhc3NfRGVsZWdhdGUuTWV0aG9kTmFtZSgpfS4KLSAqICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgJ2RlbGVnYXRlJyBtZXRob2QgaXMgZG9uZSBpbiBsYXlvdXRsaWJfYnJpZ2RlLgotICogPC91bD4KLSAqIEEgbWV0aG9kIHZpc2l0b3IgaXMgZ2VuZXJhbGx5IGNvbnN0cnVjdGVkIHRvIGdlbmVyYXRlIGEgc2luZ2xlIG1ldGhvZDsgaG93ZXZlcgotICogaGVyZSB3ZSBtaWdodCB3YW50IHRvIGdlbmVyYXRlIG9uZSBvciB0d28gZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBUbyBhY2hpZXZlCi0gKiB0aGF0LCB0aGUgdmlzaXRvciBoZXJlIGdlbmVyYXRlcyB0aGUgJ29yaWdpbmFsJyBtZXRob2QgYW5kIGFjdHMgYXMgYSBuby1vcCBpZgotICogbm8gc3VjaCBtZXRob2QgZXhpc3RzIChlLmcuIHdoZW4gdGhlIG9yaWdpbmFsIGlzIGEgbmF0aXZlIG1ldGhvZCkuCi0gKiBUaGUgZGVsZWdhdGUgbWV0aG9kIGlzIGdlbmVyYXRlZCBhZnRlciB0aGUge0Bjb2RlIHZpc2l0RW5kfSBvZiB0aGUgb3JpZ2luYWwgbWV0aG9kCi0gKiBvciBieSBoYXZpbmcgdGhlIGNsYXNzIGFkYXB0ZXIgPGVtPmRpcmVjdGx5PC9lbT4gY2FsbCB7QGxpbmsgI2dlbmVyYXRlRGVsZWdhdGVDb2RlKCl9Ci0gKiBmb3IgbmF0aXZlIG1ldGhvZHMuCi0gKiA8cC8+Ci0gKiBXaGVuIGdlbmVyYXRpbmcgdGhlICdkZWxlZ2F0ZScsIHRoZSBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgYSBjYWxsIHRvIGEgY2xhc3MKLSAqIGNsYXNzIG5hbWVkIDxjb2RlPiZsdDtjbGFzc05hbWUmZ3Q7X0RlbGVnYXRlPC9jb2RlPiB3aXRoIHN0YXRpYyBtZXRob2RzIG1hdGNoaW5nCi0gKiB0aGUgbWV0aG9kcyB0byBiZSBvdmVycmlkZGVuIGhlcmUuIFRoZSBtZXRob2RzIGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUuCi0gKiBUaGUgYXJndW1lbnQgdHlwZSBsaXN0IGlzIHRoZSBzYW1lIGV4Y2VwdCB0aGUgInRoaXMiIHJlZmVyZW5jZSBpcyBwYXNzZWQgZmlyc3QKLSAqIGZvciBub24tc3RhdGljIG1ldGhvZHMuCi0gKiA8cC8+Ci0gKiBBIG5ldyBhbm5vdGF0aW9uIGlzIGFkZGVkIHRvIHRoZXNlICdkZWxlZ2F0ZScgbWV0aG9kcyBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgZmluZCB0aGVtCi0gKiBmb3IgYXV0b21hdGVkIHRlc3RpbmcuCi0gKiA8cC8+Ci0gKiBUaGlzIGNsYXNzIGlzbid0IGludGVuZGVkIHRvIGJlIGdlbmVyaWMgb3IgcmV1c2FibGUuCi0gKiBJdCBpcyBjYWxsZWQgYnkge0BsaW5rIERlbGVnYXRlQ2xhc3NBZGFwdGVyfSwgd2hpY2ggdGFrZXMgY2FyZSBvZiBwcm9wZXJseSBpbml0aWFsaXppbmcKLSAqIHRoZSB0d28gbWV0aG9kIHdyaXRlcnMgZm9yIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGRlbGVnYXRlIGNsYXNzLCBhcyBuZWVkZWQsIHdpdGggdGhlaXIKLSAqIGV4cGVjdGVkIG5hbWVzLgotICogPHAvPgotICogVGhlIGNsYXNzIGFkYXB0ZXIgYWxzbyB0YWtlcyBjYXJlIG9mIGNhbGxpbmcge0BsaW5rICNnZW5lcmF0ZURlbGVnYXRlQ29kZSgpfSBkaXJlY3RseSBmb3IKLSAqIGEgbmF0aXZlIGFuZCB1c2UgdGhlIHZpc2l0b3IgcGF0dGVybiBmb3Igbm9uLW5hdGl2ZXMuCi0gKiBOb3RlIHRoYXQgbmF0aXZlIG1ldGhvZHMgaGF2ZSwgYnkgZGVmaW5pdGlvbiwgbm8gY29kZSBzbyB0aGVyZSdzIG5vdGhpbmcgYSB2aXNpdG9yCi0gKiBjYW4gdmlzaXQuCi0gKiA8cC8+Ci0gKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgbm90IHJlLXVzYWJsZS4KLSAqIFRoZSBjbGFzcyBhZGFwdGVyIGNyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgZm9yIGVhY2ggbWV0aG9kLgotICovCi1jbGFzcyBEZWxlZ2F0ZU1ldGhvZEFkYXB0ZXIyIGV4dGVuZHMgTWV0aG9kVmlzaXRvciB7Ci0KLSAgICAvKiogU3VmZml4IGFkZGVkIHRvIGRlbGVnYXRlIGNsYXNzZXMuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVMRUdBVEVfU1VGRklYID0gIl9EZWxlZ2F0ZSI7Ci0KLSAgICAvKiogVGhlIHBhcmVudCBtZXRob2Qgd3JpdGVyIHRvIGNvcHkgb2YgdGhlIG9yaWdpbmFsIG1ldGhvZC4KLSAgICAgKiAgTnVsbCB3aGVuIGRlYWxpbmcgd2l0aCBhIG5hdGl2ZSBvcmlnaW5hbCBtZXRob2QuICovCi0gICAgcHJpdmF0ZSBNZXRob2RWaXNpdG9yIG1PcmdXcml0ZXI7Ci0gICAgLyoqIFRoZSBwYXJlbnQgbWV0aG9kIHdyaXRlciB0byBnZW5lcmF0ZSB0aGUgZGVsZWdhdGluZyBtZXRob2QuIE5ldmVyIG51bGwuICovCi0gICAgcHJpdmF0ZSBNZXRob2RWaXNpdG9yIG1EZWxXcml0ZXI7Ci0gICAgLyoqIFRoZSBvcmlnaW5hbCBtZXRob2QgZGVzY3JpcHRvciAocmV0dXJuIHR5cGUgKyBhcmd1bWVudCB0eXBlcy4pICovCi0gICAgcHJpdmF0ZSBTdHJpbmcgbURlc2M7Ci0gICAgLyoqIFRydWUgaWYgdGhlIG9yaWdpbmFsIG1ldGhvZCBpcyBzdGF0aWMuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1Jc1N0YXRpYzsKLSAgICAvKiogVGhlIGludGVybmFsIGNsYXNzIG5hbWUgKGUuZy4gPGNvZGU+Y29tL2FuZHJvaWQvU29tZUNsYXNzJElubmVyQ2xhc3M8L2NvZGU+LikgKi8KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtQ2xhc3NOYW1lOwotICAgIC8qKiBUaGUgbWV0aG9kIG5hbWUuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU1ldGhvZE5hbWU7Ci0gICAgLyoqIExvZ2dlciBvYmplY3QuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBMb2cgbUxvZzsKLQotICAgIC8qKiBBcnJheSB1c2VkIHRvIGNhcHR1cmUgdGhlIGZpcnN0IGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIG1ldGhvZAotICAgICAqICBhbmQgZHVwbGljYXRlIGl0IGluIHRoZSBkZWxlZ2F0ZS4gKi8KLSAgICBwcml2YXRlIE9iamVjdFtdIG1EZWxlZ2F0ZUxpbmVOdW1iZXI7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBEZWxlZ2F0ZU1ldGhvZEFkYXB0ZXIyfSB0aGF0IHdpbGwgdHJhbnNmb3JtIHRoaXMgbWV0aG9kCi0gICAgICogaW50byBhIGRlbGVnYXRlIGNhbGwuCi0gICAgICogPHAvPgotICAgICAqIFNlZSB7QGxpbmsgRGVsZWdhdGVNZXRob2RBZGFwdGVyMn0gZm9yIG1vcmUgZGV0YWlscy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBsb2cgVGhlIGxvZ2dlciBvYmplY3QuIE11c3Qgbm90IGJlIG51bGwuCi0gICAgICogQHBhcmFtIG12T3JpZ2luYWwgVGhlIHBhcmVudCBtZXRob2Qgd3JpdGVyIHRvIGNvcHkgb2YgdGhlIG9yaWdpbmFsIG1ldGhvZC4KLSAgICAgKiAgICAgICAgICBNdXN0IGJlIHtAY29kZSBudWxsfSB3aGVuIGRlYWxpbmcgd2l0aCBhIG5hdGl2ZSBvcmlnaW5hbCBtZXRob2QuCi0gICAgICogQHBhcmFtIG12RGVsZWdhdGUgVGhlIHBhcmVudCBtZXRob2Qgd3JpdGVyIHRvIGdlbmVyYXRlIHRoZSBkZWxlZ2F0aW5nIG1ldGhvZC4KLSAgICAgKiAgICAgICAgICBNdXN0IG5ldmVyIGJlIG51bGwuCi0gICAgICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgaW50ZXJuYWwgY2xhc3MgbmFtZSBvZiB0aGUgY2xhc3MgdG8gdmlzaXQsCi0gICAgICogICAgICAgICAgZS5nLiA8Y29kZT5jb20vYW5kcm9pZC9Tb21lQ2xhc3MkSW5uZXJDbGFzczwvY29kZT4uCi0gICAgICogQHBhcmFtIG1ldGhvZE5hbWUgVGhlIHNpbXBsZSBuYW1lIG9mIHRoZSBtZXRob2QuCi0gICAgICogQHBhcmFtIGRlc2MgQSBtZXRob2QgZGVzY3JpcHRvciAoYy5mLiB7QGxpbmsgVHlwZSNnZXRSZXR1cm5UeXBlKFN0cmluZyl9ICsKLSAgICAgKiAgICAgICAgICB7QGxpbmsgVHlwZSNnZXRBcmd1bWVudFR5cGVzKFN0cmluZyl9KQotICAgICAqIEBwYXJhbSBpc1N0YXRpYyBUcnVlIGlmIHRoZSBtZXRob2QgaXMgZGVjbGFyZWQgc3RhdGljLgotICAgICAqLwotICAgIHB1YmxpYyBEZWxlZ2F0ZU1ldGhvZEFkYXB0ZXIyKExvZyBsb2csCi0gICAgICAgICAgICBNZXRob2RWaXNpdG9yIG12T3JpZ2luYWwsCi0gICAgICAgICAgICBNZXRob2RWaXNpdG9yIG12RGVsZWdhdGUsCi0gICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lLAotICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUsCi0gICAgICAgICAgICBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgIGJvb2xlYW4gaXNTdGF0aWMpIHsKLSAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000KTsKLSAgICAgICAgbUxvZyA9IGxvZzsKLSAgICAgICAgbU9yZ1dyaXRlciA9IG12T3JpZ2luYWw7Ci0gICAgICAgIG1EZWxXcml0ZXIgPSBtdkRlbGVnYXRlOwotICAgICAgICBtQ2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAgICAgICBtTWV0aG9kTmFtZSA9IG1ldGhvZE5hbWU7Ci0gICAgICAgIG1EZXNjID0gZGVzYzsKLSAgICAgICAgbUlzU3RhdGljID0gaXNTdGF0aWM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2VuZXJhdGVzIHRoZSBuZXcgY29kZSBmb3IgdGhlIG1ldGhvZC4KLSAgICAgKiA8cC8+Ci0gICAgICogRm9yIG5hdGl2ZSBtZXRob2RzLCB0aGlzIG11c3QgYmUgaW52b2tlZCBkaXJlY3RseSBieSB7QGxpbmsgRGVsZWdhdGVDbGFzc0FkYXB0ZXJ9Ci0gICAgICogKHNpbmNlIHRoZXkgaGF2ZSBubyBjb2RlIHRvIHZpc2l0KS4KLSAgICAgKiA8cC8+Ci0gICAgICogT3RoZXJ3aXNlIGZvciBub24tbmF0aXZlIG1ldGhvZHMgdGhlIHtAbGluayBEZWxlZ2F0ZUNsYXNzQWRhcHRlcn0gc2ltcGx5IG5lZWRzIHRvCi0gICAgICogcmV0dXJuIHRoaXMgaW5zdGFuY2Ugb2Yge0BsaW5rIERlbGVnYXRlTWV0aG9kQWRhcHRlcjJ9IGFuZCBsZXQgdGhlIG5vcm1hbCB2aXNpdG9yIHBhdHRlcm4KLSAgICAgKiBpbnZva2UgaXQgYXMgcGFydCBvZiB0aGUge0BsaW5rIENsYXNzUmVhZGVyI2FjY2VwdChDbGFzc1Zpc2l0b3IsIGludCl9IHdvcmtmbG93IGFuZCB0aGVuCi0gICAgICogdGhpcyBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGZyb20ge0BsaW5rIE1ldGhvZFZpc2l0b3IjdmlzaXRFbmQoKX0uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZ2VuZXJhdGVEZWxlZ2F0ZUNvZGUoKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoZSBnb2FsIGlzIHRvIGdlbmVyYXRlIGEgY2FsbCB0byBhIHN0YXRpYyBkZWxlZ2F0ZSBtZXRob2QuCi0gICAgICAgICAqIElmIHRoaXMgbWV0aG9kIGlzIG5vbi1zdGF0aWMsIHRoZSBmaXJzdCBwYXJhbWV0ZXIgd2lsbCBiZSAndGhpcycuCi0gICAgICAgICAqIEFsbCB0aGUgcGFyYW1ldGVycyBtdXN0IGJlIHBhc3NlZCBhbmQgdGhlbiB0aGUgZXZlbnR1YWwgcmV0dXJuIHR5cGUgcmV0dXJuZWQuCi0gICAgICAgICAqCi0gICAgICAgICAqIEV4YW1wbGUsIGxldCdzIHNheSB3ZSBoYXZlIGEgbWV0aG9kIHN1Y2ggYXMKLSAgICAgICAgICogICBwdWJsaWMgdm9pZCBteU1ldGhvZChpbnQgYSwgT2JqZWN0IGIsIEFycmF5TGlzdDxTdHJpbmc+IGMpIHsgLi4uIH0KLSAgICAgICAgICoKLSAgICAgICAgICogV2UnbGwgd2FudCB0byBjcmVhdGUgYSBib2R5IHRoYXQgY2FsbHMgYSBkZWxlZ2F0ZSBtZXRob2QgbGlrZSB0aGlzOgotICAgICAgICAgKiAgIFRoZUNsYXNzX0RlbGVnYXRlLm15TWV0aG9kKHRoaXMsIGEsIGIsIGMpOwotICAgICAgICAgKgotICAgICAgICAgKiBJZiB0aGUgbWV0aG9kIGlzIG5vbi1zdGF0aWMgYW5kIHRoZSBjbGFzcyBuYW1lIGlzIGFuIGlubmVyIGNsYXNzIChlLmcuIGhhcyAkIGluIGl0cwotICAgICAgICAgKiBsYXN0IHNlZ21lbnQpLCB3ZSB3YW50IHRvIHB1c2ggdGhlICd0aGlzJyBvZiB0aGUgb3V0ZXIgY2xhc3MgZmlyc3Q6Ci0gICAgICAgICAqICAgT3V0ZXJDbGFzc19Jbm5lckNsYXNzX0RlbGVnYXRlLm15TWV0aG9kKAotICAgICAgICAgKiAgICAgT3V0ZXJDbGFzcy50aGlzLAotICAgICAgICAgKiAgICAgT3V0ZXJDbGFzcyRJbm5lckNsYXNzLnRoaXMsCi0gICAgICAgICAqICAgICBhLCBiLCBjKTsKLSAgICAgICAgICoKLSAgICAgICAgICogT25seSBvbmUgbGV2ZWwgb2YgaW5uZXIgY2xhc3MgaXMgc3VwcG9ydGVkIHJpZ2h0IG5vdywgZm9yIHNpbXBsaWNpdHkgYW5kIGJlY2F1c2UKLSAgICAgICAgICogd2UgZG9uJ3QgbmVlZCBtb3JlLgotICAgICAgICAgKgotICAgICAgICAgKiBUaGUgZ2VuZXJhdGVkIGNsYXNzIG5hbWUgaXMgdGhlIGN1cnJlbnQgY2xhc3MgbmFtZSB3aXRoICJfRGVsZWdhdGUiIGFwcGVuZGVkIHRvIGl0LgotICAgICAgICAgKiBPbmUgdGhpbmcgdG8gcmVhbGl6ZSBpcyB0aGF0IHdlIGRvbid0IGNhcmUgYWJvdXQgZ2VuZXJpY3MgLS0gc2luY2UgZ2VuZXJpYyB0eXBlcwotICAgICAgICAgKiBhcmUgZXJhc2VkIGF0IGJ1aWxkIHRpbWUsIHRoZXkgaGF2ZSBubyBpbmZsdWVuY2Ugb24gdGhlIG1ldGhvZCBuYW1lIGJlaW5nIGNhbGxlZC4KLSAgICAgICAgICovCi0KLSAgICAgICAgLy8gQWRkIG91ciBhbm5vdGF0aW9uCi0gICAgICAgIEFubm90YXRpb25WaXNpdG9yIGF3ID0gbURlbFdyaXRlci52aXNpdEFubm90YXRpb24oCi0gICAgICAgICAgICAgICAgVHlwZS5nZXRPYmplY3RUeXBlKFR5cGUuZ2V0SW50ZXJuYWxOYW1lKExheW91dGxpYkRlbGVnYXRlLmNsYXNzKSkudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICB0cnVlKTsgLy8gdmlzaWJsZSBhdCBydW50aW1lCi0gICAgICAgIGlmIChhdyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhdy52aXNpdEVuZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbURlbFdyaXRlci52aXNpdENvZGUoKTsKLQotICAgICAgICBpZiAobURlbGVnYXRlTGluZU51bWJlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBPYmplY3RbXSBwID0gbURlbGVnYXRlTGluZU51bWJlcjsKLSAgICAgICAgICAgIG1EZWxXcml0ZXIudmlzaXRMaW5lTnVtYmVyKChJbnRlZ2VyKSBwWzBdLCAoTGFiZWwpIHBbMV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgQXJyYXlMaXN0PFR5cGU+IHBhcmFtVHlwZXMgPSBuZXcgQXJyYXlMaXN0PFR5cGU+KCk7Ci0gICAgICAgIFN0cmluZyBkZWxlZ2F0ZUNsYXNzTmFtZSA9IG1DbGFzc05hbWUgKyBERUxFR0FURV9TVUZGSVg7Ci0gICAgICAgIGJvb2xlYW4gcHVzaGVkQXJnMCA9IGZhbHNlOwotICAgICAgICBpbnQgbWF4U3RhY2sgPSAwOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0IHNlZ21lbnQgb2YgdGhlIGNsYXNzIG5hbWUgaGFzIGlubmVyIGFuIGNsYXNzLgotICAgICAgICAvLyBSaWdodCBub3cgd2Ugb25seSBzdXBwb3J0IG9uZSBsZXZlbCBvZiBpbm5lciBjbGFzc2VzLgotICAgICAgICBUeXBlIG91dGVyVHlwZSA9IG51bGw7Ci0gICAgICAgIGludCBzbGFzaCA9IG1DbGFzc05hbWUubGFzdEluZGV4T2YoJy8nKTsKLSAgICAgICAgaW50IGRvbCA9IG1DbGFzc05hbWUubGFzdEluZGV4T2YoJyQnKTsKLSAgICAgICAgaWYgKGRvbCAhPSAtMSAmJiBkb2wgPiBzbGFzaCAmJiBkb2wgPT0gbUNsYXNzTmFtZS5pbmRleE9mKCckJykpIHsKLSAgICAgICAgICAgIFN0cmluZyBvdXRlckNsYXNzID0gbUNsYXNzTmFtZS5zdWJzdHJpbmcoMCwgZG9sKTsKLSAgICAgICAgICAgIG91dGVyVHlwZSA9IFR5cGUuZ2V0T2JqZWN0VHlwZShvdXRlckNsYXNzKTsKLQotICAgICAgICAgICAgLy8gQ2hhbmdlIGEgZGVsZWdhdGUgY2xhc3MgbmFtZSB0byAiY29tL2Zvby9PdXRlcl9Jbm5lcl9EZWxlZ2F0ZSIKLSAgICAgICAgICAgIGRlbGVnYXRlQ2xhc3NOYW1lID0gZGVsZWdhdGVDbGFzc05hbWUucmVwbGFjZSgnJCcsICdfJyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGb3IgYW4gaW5zdGFuY2UgbWV0aG9kIChlLmcuIG5vbi1zdGF0aWMpLCBwdXNoIHRoZSAndGhpcycgcHJlY2VkZWQKLSAgICAgICAgLy8gYnkgdGhlICd0aGlzJyBvZiBhbnkgb3V0ZXIgY2xhc3MsIGlmIGFueS4KLSAgICAgICAgaWYgKCFtSXNTdGF0aWMpIHsKLQotICAgICAgICAgICAgaWYgKG91dGVyVHlwZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0LWxldmVsIGlubmVyIGNsYXNzIGhhcyBhIHBhY2thZ2UtcHJvdGVjdGVkIG1lbWJlciBjYWxsZWQgJ3RoaXMkMCcKLSAgICAgICAgICAgICAgICAvLyB0aGF0IHBvaW50cyB0byB0aGUgb3V0ZXIgY2xhc3MuCi0KLSAgICAgICAgICAgICAgICAvLyBQdXNoIHRoaXMuZ2V0RmllbGQoInRoaXMkMCIpIG9uIHRoZSBjYWxsIHN0YWNrLgotICAgICAgICAgICAgICAgIG1EZWxXcml0ZXIudmlzaXRWYXJJbnNuKE9wY29kZXMuQUxPQUQsIDApOyAvLyB2YXIgMCA9IHRoaXMKLSAgICAgICAgICAgICAgICBtRGVsV3JpdGVyLnZpc2l0RmllbGRJbnNuKE9wY29kZXMuR0VURklFTEQsCi0gICAgICAgICAgICAgICAgICAgICAgICBtQ2xhc3NOYW1lLCAgICAgICAgICAgICAgICAgLy8gY2xhc3Mgd2hlcmUgdGhlIGZpZWxkIGlzIGRlZmluZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlzJDAiLCAgICAgICAgICAgICAgICAgICAvLyBmaWVsZCBuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRlclR5cGUuZ2V0RGVzY3JpcHRvcigpKTsgLy8gdHlwZSBvZiB0aGUgZmllbGQKLSAgICAgICAgICAgICAgICBtYXhTdGFjaysrOwotICAgICAgICAgICAgICAgIHBhcmFtVHlwZXMuYWRkKG91dGVyVHlwZSk7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gUHVzaCAidGhpcyIgZm9yIHRoZSBpbnN0YW5jZSBtZXRob2QsIHdoaWNoIGlzIGFsd2F5cyBBTE9BRCAwCi0gICAgICAgICAgICBtRGVsV3JpdGVyLnZpc2l0VmFySW5zbihPcGNvZGVzLkFMT0FELCAwKTsKLSAgICAgICAgICAgIG1heFN0YWNrKys7Ci0gICAgICAgICAgICBwdXNoZWRBcmcwID0gdHJ1ZTsKLSAgICAgICAgICAgIHBhcmFtVHlwZXMuYWRkKFR5cGUuZ2V0T2JqZWN0VHlwZShtQ2xhc3NOYW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQdXNoIGFsbCBvdGhlciBhcmd1bWVudHMuIFN0YXJ0IGF0IGFyZyAxIGlmIHdlIGFscmVhZHkgcHVzaGVkICd0aGlzJyBhYm92ZS4KLSAgICAgICAgVHlwZVtdIGFyZ1R5cGVzID0gVHlwZS5nZXRBcmd1bWVudFR5cGVzKG1EZXNjKTsKLSAgICAgICAgaW50IG1heExvY2FscyA9IHB1c2hlZEFyZzAgPyAxIDogMDsKLSAgICAgICAgZm9yIChUeXBlIHQgOiBhcmdUeXBlcykgewotICAgICAgICAgICAgaW50IHNpemUgPSB0LmdldFNpemUoKTsKLSAgICAgICAgICAgIG1EZWxXcml0ZXIudmlzaXRWYXJJbnNuKHQuZ2V0T3Bjb2RlKE9wY29kZXMuSUxPQUQpLCBtYXhMb2NhbHMpOwotICAgICAgICAgICAgbWF4TG9jYWxzICs9IHNpemU7Ci0gICAgICAgICAgICBtYXhTdGFjayArPSBzaXplOwotICAgICAgICAgICAgcGFyYW1UeXBlcy5hZGQodCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIGRlc2NyaXB0b3Igb2YgdGhlIGRlbGVnYXRlIGJhc2VkIG9uIHRoZSBwYXJhbWV0ZXJzCi0gICAgICAgIC8vIHdlIHB1c2hlZCBvbiB0aGUgY2FsbCBzdGFjay4gVGhlIHJldHVybiB0eXBlIHJlbWFpbnMgdW5jaGFuZ2VkLgotICAgICAgICBTdHJpbmcgZGVzYyA9IFR5cGUuZ2V0TWV0aG9kRGVzY3JpcHRvcigKLSAgICAgICAgICAgICAgICBUeXBlLmdldFJldHVyblR5cGUobURlc2MpLAotICAgICAgICAgICAgICAgIHBhcmFtVHlwZXMudG9BcnJheShuZXcgVHlwZVtwYXJhbVR5cGVzLnNpemUoKV0pKTsKLQotICAgICAgICAvLyBJbnZva2UgdGhlIHN0YXRpYyBkZWxlZ2F0ZQotICAgICAgICBtRGVsV3JpdGVyLnZpc2l0TWV0aG9kSW5zbihPcGNvZGVzLklOVk9LRVNUQVRJQywKLSAgICAgICAgICAgICAgICBkZWxlZ2F0ZUNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICBtTWV0aG9kTmFtZSwKLSAgICAgICAgICAgICAgICBkZXNjKTsKLQotICAgICAgICBUeXBlIHJldHVyblR5cGUgPSBUeXBlLmdldFJldHVyblR5cGUobURlc2MpOwotICAgICAgICBtRGVsV3JpdGVyLnZpc2l0SW5zbihyZXR1cm5UeXBlLmdldE9wY29kZShPcGNvZGVzLklSRVRVUk4pKTsKLQotICAgICAgICBtRGVsV3JpdGVyLnZpc2l0TWF4cyhtYXhTdGFjaywgbWF4TG9jYWxzKTsKLSAgICAgICAgbURlbFdyaXRlci52aXNpdEVuZCgpOwotCi0gICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgbm93LiBNYXliZSB3ZSBzaG91bGQgY29sbGVjdCB0aGVzZSBhbmQgc3RvcmUgdGhlbSBpbgotICAgICAgICAvLyBhIHRleHQgZmlsZSBmb3IgaGVscGluZyBjcmVhdGUgdGhlIGRlbGVnYXRlcy4gV2UgY291bGQgYWxzbyBjb21wYXJlCi0gICAgICAgIC8vIHRoZSB0ZXh0IGZpbGUgdG8gYSBnb2xkZW4gYW5kIGJyZWFrIHRoZSBidWlsZCBvbiB1bnN1cHBvcnRlZCBjaGFuZ2VzCi0gICAgICAgIC8vIG9yIHJlZ3Jlc3Npb25zLiBFdmVuIGJldHRlciB3ZSBjb3VsZCBmYW5jeS1wcmludCBzb21ldGhpbmcgdGhhdCBsb29rcwotICAgICAgICAvLyBsaWtlIHRoZSBleHBlY3RlZCBKYXZhIG1ldGhvZCBkZWNsYXJhdGlvbi4KLSAgICAgICAgbUxvZy5kZWJ1ZygiRGVsZWdhdGU6ICUxJHMgIyAlMiRzICUzJHMiLCBkZWxlZ2F0ZUNsYXNzTmFtZSwgbU1ldGhvZE5hbWUsIGRlc2MpOwotICAgIH0KLQotICAgIC8qIFBhc3MgZG93biB0byB2aXNpdG9yIHdyaXRlci4gSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgZWl0aGVyIGRvIG5vdGhpbmcuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRDb2RlKCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0Q29kZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiB2aXNpdE1heHMgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHZpc2l0RW5kIGlmIHRoZXJlIHdhcyBhbnkgY29kZSB0byByZXdyaXRlLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0TWF4cyhpbnQgbWF4U3RhY2ssIGludCBtYXhMb2NhbHMpIHsKLSAgICAgICAgaWYgKG1PcmdXcml0ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbU9yZ1dyaXRlci52aXNpdE1heHMobWF4U3RhY2ssIG1heExvY2Fscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogRW5kIG9mIHZpc2l0aW5nLiBHZW5lcmF0ZSB0aGUgZGVsZWdhdGluZyBjb2RlLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0RW5kKCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0RW5kKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZ2VuZXJhdGVEZWxlZ2F0ZUNvZGUoKTsKLSAgICB9Ci0KLSAgICAvKiBXcml0ZXMgYWxsIGFubm90YXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgbWV0aG9kLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBBbm5vdGF0aW9uVmlzaXRvciB2aXNpdEFubm90YXRpb24oU3RyaW5nIGRlc2MsIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU9yZ1dyaXRlci52aXNpdEFubm90YXRpb24oZGVzYywgdmlzaWJsZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFdyaXRlcyBhbGwgYW5ub3RhdGlvbiBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBvcmlnaW5hbCBtZXRob2QuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0QW5ub3RhdGlvbkRlZmF1bHQoKSB7Ci0gICAgICAgIGlmIChtT3JnV3JpdGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtT3JnV3JpdGVyLnZpc2l0QW5ub3RhdGlvbkRlZmF1bHQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0UGFyYW1ldGVyQW5ub3RhdGlvbihpbnQgcGFyYW1ldGVyLCBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU9yZ1dyaXRlci52aXNpdFBhcmFtZXRlckFubm90YXRpb24ocGFyYW1ldGVyLCBkZXNjLCB2aXNpYmxlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogV3JpdGVzIGFsbCBhdHRyaWJ1dGVzIGZyb20gdGhlIG9yaWdpbmFsIG1ldGhvZC4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdEF0dHJpYnV0ZShBdHRyaWJ1dGUgYXR0cikgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0QXR0cmlidXRlKGF0dHIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBPbmx5IHdyaXRlcyB0aGUgZmlyc3QgbGluZSBudW1iZXIgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgY29kZSBzbyB0aGF0IHNvdXJjZQotICAgICAqIHZpZXdlcnMgY2FuIGRpcmVjdCB0byB0aGUgY29ycmVjdCBtZXRob2QsIGV2ZW4gaWYgdGhlIGNvbnRlbnQgZG9lc24ndCBtYXRjaC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdExpbmVOdW1iZXIoaW50IGxpbmUsIExhYmVsIHN0YXJ0KSB7Ci0gICAgICAgIC8vIENhcHR1cmUgdGhlIGZpcnN0IGxpbmUgdmFsdWVzIGZvciB0aGUgbmV3IGRlbGVnYXRlIG1ldGhvZAotICAgICAgICBpZiAobURlbGVnYXRlTGluZU51bWJlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtRGVsZWdhdGVMaW5lTnVtYmVyID0gbmV3IE9iamVjdFtdIHsgbGluZSwgc3RhcnQgfTsKLSAgICAgICAgfQotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0TGluZU51bWJlcihsaW5lLCBzdGFydCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdEluc24oaW50IG9wY29kZSkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0SW5zbihvcGNvZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRMYWJlbChMYWJlbCBsYWJlbCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0TGFiZWwobGFiZWwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRUcnlDYXRjaEJsb2NrKExhYmVsIHN0YXJ0LCBMYWJlbCBlbmQsIExhYmVsIGhhbmRsZXIsIFN0cmluZyB0eXBlKSB7Ci0gICAgICAgIGlmIChtT3JnV3JpdGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1PcmdXcml0ZXIudmlzaXRUcnlDYXRjaEJsb2NrKHN0YXJ0LCBlbmQsIGhhbmRsZXIsIHR5cGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRNZXRob2RJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjKSB7Ci0gICAgICAgIGlmIChtT3JnV3JpdGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1PcmdXcml0ZXIudmlzaXRNZXRob2RJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRGaWVsZEluc24oaW50IG9wY29kZSwgU3RyaW5nIG93bmVyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MpIHsKLSAgICAgICAgaWYgKG1PcmdXcml0ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbU9yZ1dyaXRlci52aXNpdEZpZWxkSW5zbihvcGNvZGUsIG93bmVyLCBuYW1lLCBkZXNjKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0RnJhbWUoaW50IHR5cGUsIGludCBuTG9jYWwsIE9iamVjdFtdIGxvY2FsLCBpbnQgblN0YWNrLCBPYmplY3RbXSBzdGFjaykgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0RnJhbWUodHlwZSwgbkxvY2FsLCBsb2NhbCwgblN0YWNrLCBzdGFjayk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdElpbmNJbnNuKGludCB2YXIsIGludCBpbmNyZW1lbnQpIHsKLSAgICAgICAgaWYgKG1PcmdXcml0ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbU9yZ1dyaXRlci52aXNpdElpbmNJbnNuKHZhciwgaW5jcmVtZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0SW50SW5zbihpbnQgb3Bjb2RlLCBpbnQgb3BlcmFuZCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0SW50SW5zbihvcGNvZGUsIG9wZXJhbmQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRKdW1wSW5zbihpbnQgb3Bjb2RlLCBMYWJlbCBsYWJlbCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0SnVtcEluc24ob3Bjb2RlLCBsYWJlbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdExkY0luc24oT2JqZWN0IGNzdCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0TGRjSW5zbihjc3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRMb2NhbFZhcmlhYmxlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYywgU3RyaW5nIHNpZ25hdHVyZSwKLSAgICAgICAgICAgIExhYmVsIHN0YXJ0LCBMYWJlbCBlbmQsIGludCBpbmRleCkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0TG9jYWxWYXJpYWJsZShuYW1lLCBkZXNjLCBzaWduYXR1cmUsIHN0YXJ0LCBlbmQsIGluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0TG9va3VwU3dpdGNoSW5zbihMYWJlbCBkZmx0LCBpbnRbXSBrZXlzLCBMYWJlbFtdIGxhYmVscykgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0TG9va3VwU3dpdGNoSW5zbihkZmx0LCBrZXlzLCBsYWJlbHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRNdWx0aUFOZXdBcnJheUluc24oU3RyaW5nIGRlc2MsIGludCBkaW1zKSB7Ci0gICAgICAgIGlmIChtT3JnV3JpdGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1PcmdXcml0ZXIudmlzaXRNdWx0aUFOZXdBcnJheUluc24oZGVzYywgZGltcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdFRhYmxlU3dpdGNoSW5zbihpbnQgbWluLCBpbnQgbWF4LCBMYWJlbCBkZmx0LCBMYWJlbFtdIGxhYmVscykgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0VGFibGVTd2l0Y2hJbnNuKG1pbiwgbWF4LCBkZmx0LCBsYWJlbHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRUeXBlSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgdHlwZSkgewotICAgICAgICBpZiAobU9yZ1dyaXRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0VHlwZUluc24ob3Bjb2RlLCB0eXBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0VmFySW5zbihpbnQgb3Bjb2RlLCBpbnQgdmFyKSB7Ci0gICAgICAgIGlmIChtT3JnV3JpdGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1PcmdXcml0ZXIudmlzaXRWYXJJbnNuKG9wY29kZSwgdmFyKTsKLSAgICAgICAgfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9EZXBlbmRlbmN5RmluZGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0RlcGVuZGVuY3lGaW5kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk4OGM3MC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0RlcGVuZGVuY3lGaW5kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmFubm90YXRpb25zLlZpc2libGVGb3JUZXN0aW5nOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5hbm5vdGF0aW9ucy5WaXNpYmxlRm9yVGVzdGluZy5WaXNpYmlsaXR5OwotCi1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQW5ub3RhdGlvblZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQXR0cmlidXRlOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkNsYXNzUmVhZGVyOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkNsYXNzVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5GaWVsZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTGFiZWw7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5PcGNvZGVzOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLlR5cGU7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uc2lnbmF0dXJlLlNpZ25hdHVyZVJlYWRlcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5zaWduYXR1cmUuU2lnbmF0dXJlVmlzaXRvcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEZpbGU7Ci0KLS8qKgotICogQW5hbHl6ZXMgdGhlIGlucHV0IEpBUiB1c2luZyB0aGUgQVNNIGphdmEgYnl0ZWNvZGUgbWFuaXB1bGF0aW9uIGxpYnJhcnkKLSAqIHRvIGxpc3QgdGhlIGNsYXNzZXMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gQSAiZGVwZW5kZW5jeSIgaXMgYSBjbGFzcwotICogdXNlZCBieSBhbm90aGVyIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgRGVwZW5kZW5jeUZpbmRlciB7Ci0KLSAgICAvLyBOb3RlOiBhIGJ1bmNoIG9mIHN0dWZmIGhhcyBwYWNrYWdlLWxldmVsIGFjY2VzcyBmb3IgdW5pdCB0ZXN0cy4gQ29uc2lkZXIgaXQgcHJpdmF0ZS4KLQotICAgIC8qKiBPdXRwdXQgbG9nZ2VyLiAqLwotICAgIHByaXZhdGUgZmluYWwgTG9nIG1Mb2c7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IGFuYWx5emVyLgotICAgICAqCi0gICAgICogQHBhcmFtIGxvZyBUaGUgbG9nIG91dHB1dC4KLSAgICAgKi8KLSAgICBwdWJsaWMgRGVwZW5kZW5jeUZpbmRlcihMb2cgbG9nKSB7Ci0gICAgICAgIG1Mb2cgPSBsb2c7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RhcnRzIHRoZSBhbmFseXNpcyB1c2luZyBwYXJhbWV0ZXJzIGZyb20gdGhlIGNvbnN0cnVjdG9yLgotICAgICAqCi0gICAgICogQHBhcmFtIG9zSmFyUGF0aCBUaGUgaW5wdXQgc291cmNlIEpBUnMgdG8gcGFyc2UuCi0gICAgICogQHJldHVybiBBIHBhaXI6IFswXTogbWFwIHsgY2xhc3MgRlFDTiA9PiBzZXQgb2YgRlFDTiBjbGFzcyBkZXBlbmRlbmNpZXMgfS4KLSAgICAgKiAgICAgICAgICAgICAgICAgWzFdOiBtYXAgeyBtaXNzaW5nIGNsYXNzIEZRQ04gPT4gc2V0IG9mIEZRQ04gY2xhc3MgdGhhdCB1c2VzIGl0LiB9Ci0gICAgICovCi0gICAgcHVibGljIExpc3Q8TWFwPFN0cmluZywgU2V0PFN0cmluZz4+PiBmaW5kRGVwcyhMaXN0PFN0cmluZz4gb3NKYXJQYXRoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzID0gcGFyc2VaaXAob3NKYXJQYXRoKTsKLSAgICAgICAgbUxvZy5pbmZvKCJGb3VuZCAlZCBjbGFzc2VzIGluIGlucHV0IEpBUiVzLiIsCi0gICAgICAgICAgICAgICAgemlwQ2xhc3Nlcy5zaXplKCksCi0gICAgICAgICAgICAgICAgb3NKYXJQYXRoLnNpemUoKSA+IDEgPyAicyIgOiAiIik7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IGRlcHMgPSBmaW5kQ2xhc3Nlc0RlcHMoemlwQ2xhc3Nlcyk7Ci0KLSAgICAgICAgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IG1pc3NpbmcgPSBmaW5kTWlzc2luZ0NsYXNzZXMoZGVwcywgemlwQ2xhc3Nlcy5rZXlTZXQoKSk7Ci0KLSAgICAgICAgTGlzdDxNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8TWFwPFN0cmluZyxTZXQ8U3RyaW5nPj4+KDIpOwotICAgICAgICByZXN1bHQuYWRkKGRlcHMpOwotICAgICAgICByZXN1bHQuYWRkKG1pc3NpbmcpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByaW50cyBkZXBlbmRlbmNpZXMgdG8gdGhlIGN1cnJlbnQgbG9nZ2VyLCBmb3VuZCBzdHVmZiBhbmQgbWlzc2luZyBzdHVmZi4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBwcmludEFsbERlcHMoTGlzdDxNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4+IHJlc3VsdCkgewotICAgICAgICBhc3NlcnQgcmVzdWx0LnNpemUoKSA9PSAyOwotICAgICAgICBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gZGVwcyA9IHJlc3VsdC5nZXQoMCk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PiBtaXNzaW5nID0gcmVzdWx0LmdldCgxKTsKLQotICAgICAgICAvLyBQcmludCBhbGwgZGVwZW5kZW5jZXMgZm91bmQgaW4gdGhlIGZvcm1hdDoKLSAgICAgICAgLy8gK0ZvdW5kOiA8RlFDTiBmcm9tIHppcD4KLSAgICAgICAgLy8gICAgIHVzZXM6IEZRQ04KLQotICAgICAgICBtTG9nLmluZm8oIisrKysrKyAlZCBFbnRyaWVzIGZvdW5kIGluIHNvdXJjZSBKQVJzIiwgZGVwcy5zaXplKCkpOwotICAgICAgICBtTG9nLmluZm8oIiIpOwotCi0gICAgICAgIGZvciAoRW50cnk8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gZW50cnkgOiBkZXBzLmVudHJ5U2V0KCkpIHsKLSAgICAgICAgICAgIG1Mb2cuaW5mbyggICAgIitGb3VuZCAgOiAlcyIsIGVudHJ5LmdldEtleSgpKTsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIGRlcCA6IGVudHJ5LmdldFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICBtTG9nLmluZm8oIiAgICB1c2VzOiAlcyIsIGRlcCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1Mb2cuaW5mbygiIik7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIC8vIE5vdyBwcmludCBhbGwgbWlzc2luZyBkZXBlbmRlbmNlcyBpbiB0aGUgZm9ybWF0OgotICAgICAgICAvLyAtTWlzc2luZyA8RlFDTj46Ci0gICAgICAgIC8vICAgICB1c2VkIGJ5OiA8RlFDTj4KLQotICAgICAgICBtTG9nLmluZm8oIiIpOwotICAgICAgICBtTG9nLmluZm8oIi0tLS0tLSAlZCBFbnRyaWVzIG1pc3NpbmcgZnJvbSBzb3VyY2UgSkFScyIsIG1pc3Npbmcuc2l6ZSgpKTsKLSAgICAgICAgbUxvZy5pbmZvKCIiKTsKLQotICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgU2V0PFN0cmluZz4+IGVudHJ5IDogbWlzc2luZy5lbnRyeVNldCgpKSB7Ci0gICAgICAgICAgICBtTG9nLmluZm8oICAgICItTWlzc2luZyAgOiAlcyIsIGVudHJ5LmdldEtleSgpKTsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIGRlcCA6IGVudHJ5LmdldFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICBtTG9nLmluZm8oIiAgIHVzZWQgYnk6ICVzIiwgZGVwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUxvZy5pbmZvKCIiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByaW50cyBvbmx5IGEgc3VtbWFyeSBvZiB0aGUgbWlzc2luZyBkZXBlbmRlbmNpZXMgdG8gdGhlIGN1cnJlbnQgbG9nZ2VyLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHByaW50TWlzc2luZ0RlcHMoTGlzdDxNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4+IHJlc3VsdCkgewotICAgICAgICBhc3NlcnQgcmVzdWx0LnNpemUoKSA9PSAyOwotICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IGRlcHMgPSByZXN1bHQuZ2V0KDApOwotICAgICAgICBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gbWlzc2luZyA9IHJlc3VsdC5nZXQoMSk7Ci0KLSAgICAgICAgZm9yIChTdHJpbmcgZnFjbiA6IG1pc3Npbmcua2V5U2V0KCkpIHsKLSAgICAgICAgICAgIG1Mb2cuaW5mbygiJXMiLCBmcWNuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIFBhcnNlcyBhIEpBUiBmaWxlIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgY2xhc3NlcyBmb3VuZHMgdXNpbmcgYSBtYXAKLSAgICAgKiBjbGFzcyBuYW1lID0+IEFTTSBDbGFzc1JlYWRlci4gQ2xhc3MgbmFtZXMgYXJlIGluIHRoZSBmb3JtICJhbmRyb2lkLnZpZXcuVmlldyIuCi0gICAgICovCi0gICAgTWFwPFN0cmluZyxDbGFzc1JlYWRlcj4gcGFyc2VaaXAoTGlzdDxTdHJpbmc+IGphclBhdGhMaXN0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGNsYXNzZXMgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotCi0gICAgICAgIGZvciAoU3RyaW5nIGphclBhdGggOiBqYXJQYXRoTGlzdCkgewotICAgICAgICAgICAgWmlwRmlsZSB6aXAgPSBuZXcgWmlwRmlsZShqYXJQYXRoKTsKLSAgICAgICAgICAgIEVudW1lcmF0aW9uPD8gZXh0ZW5kcyBaaXBFbnRyeT4gZW50cmllcyA9IHppcC5lbnRyaWVzKCk7Ci0gICAgICAgICAgICBaaXBFbnRyeSBlbnRyeTsKLSAgICAgICAgICAgIHdoaWxlIChlbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyaWVzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmdldE5hbWUoKS5lbmRzV2l0aCgiLmNsYXNzIikpIHsKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBuZXcgQ2xhc3NSZWFkZXIoemlwLmdldElucHV0U3RyZWFtKGVudHJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBjbGFzc1JlYWRlclRvQ2xhc3NOYW1lKGNyKTsKLSAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXQoY2xhc3NOYW1lLCBjcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNsYXNzZXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXRpbGl0eSB0aGF0IHJldHVybnMgdGhlIGZ1bGx5IHF1YWxpZmllZCBiaW5hcnkgY2xhc3MgbmFtZSBmb3IgYSBDbGFzc1JlYWRlci4KLSAgICAgKiBFLmcuIGl0IHJldHVybnMgc29tZXRoaW5nIGxpa2UgYW5kcm9pZC52aWV3LlZpZXcuCi0gICAgICovCi0gICAgc3RhdGljIFN0cmluZyBjbGFzc1JlYWRlclRvQ2xhc3NOYW1lKENsYXNzUmVhZGVyIGNsYXNzUmVhZGVyKSB7Ci0gICAgICAgIGlmIChjbGFzc1JlYWRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBjbGFzc1JlYWRlci5nZXRDbGFzc05hbWUoKS5yZXBsYWNlKCcvJywgJy4nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFV0aWxpdHkgdGhhdCByZXR1cm5zIHRoZSBmdWxseSBxdWFsaWZpZWQgYmluYXJ5IGNsYXNzIG5hbWUgZnJvbSBhIHBhdGgtbGlrZSBGUUNOLgotICAgICAqIEUuZy4gaXQgcmV0dXJucyBhbmRyb2lkLnZpZXcuVmlldyBmcm9tIGFuZHJvaWQvdmlldy9WaWV3LgotICAgICAqLwotICAgIHN0YXRpYyBTdHJpbmcgaW50ZXJuYWxUb0JpbmFyeUNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7Ci0gICAgICAgIGlmIChjbGFzc05hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnJlcGxhY2UoJy8nLCAnLicpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmluZHMgYWxsIGRlcGVuZGVuY2llcyBmb3IgYWxsIGNsYXNzZXMgaW4ga2VlcENsYXNzZXMgd2hpY2ggYXJlIGFsc28KLSAgICAgKiBsaXN0ZWQgaW4gemlwQ2xhc3Nlcy4gUmV0dXJucyBhIG1hcCBvZiBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3VuZC4KLSAgICAgKi8KLSAgICBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gZmluZENsYXNzZXNEZXBzKE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzKSB7Ci0KLSAgICAgICAgLy8gVGhlIGRlcGVuZGVuY2llcyB0aGF0IHdlJ2xsIGNvbGxlY3QuCi0gICAgICAgIC8vIEl0J3MgYSBtYXAgQ2xhc3MgbmFtZSA9PiB1c2VzIGNsYXNzIG5hbWVzLgotICAgICAgICBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gZGVwZW5kZW5jeU1hcCA9IG5ldyBUcmVlTWFwPFN0cmluZywgU2V0PFN0cmluZz4+KCk7Ci0KLSAgICAgICAgRGVwZW5kZW5jeVZpc2l0b3IgdmlzaXRvciA9IGdldFZpc2l0b3IoKTsKLQotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIENsYXNzUmVhZGVyPiBlbnRyeSA6IHppcENsYXNzZXMuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZW50cnkuZ2V0S2V5KCk7Ci0KLSAgICAgICAgICAgICAgICBUcmVlU2V0PFN0cmluZz4gc2V0ID0gbmV3IFRyZWVTZXQ8U3RyaW5nPigpOwotICAgICAgICAgICAgICAgIGRlcGVuZGVuY3lNYXAucHV0KG5hbWUsIHNldCk7Ci0gICAgICAgICAgICAgICAgdmlzaXRvci5zZXREZXBlbmRlbmN5U2V0KHNldCk7Ci0KLSAgICAgICAgICAgICAgICBDbGFzc1JlYWRlciBjciA9IGVudHJ5LmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgY3IuYWNjZXB0KHZpc2l0b3IsIDAgLyogZmxhZ3MgKi8pOwotCi0gICAgICAgICAgICAgICAgdmlzaXRvci5zZXREZXBlbmRlbmN5U2V0KG51bGwpOwotCi0gICAgICAgICAgICAgICAgbUxvZy5kZWJ1Z05vbG4oIlZpc2l0ZWQgJWQgY2xhc3Nlc1xyIiwgKytjb3VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBtTG9nLmRlYnVnTm9sbigiXG4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZXBlbmRlbmN5TWFwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXB1dGVzIHdoaWNoIGNsYXNzZXMgRlFDTiB3ZXJlIGZvdW5kIGFzIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBOT1QgbGlzdGVkCi0gICAgICogaW4gdGhlIG9yaWdpbmFsIEpBUiBjbGFzc2VzLgotICAgICAqCi0gICAgICogQHBhcmFtIGRlcHMgVGhlIG1hcCB7IEZRQ04gPT4gZGVwZW5kZW5jaWVzW10gfSByZXR1cm5lZCBieSB7QGxpbmsgI2ZpbmRDbGFzc2VzRGVwcyhNYXApfS4KLSAgICAgKiBAcGFyYW0gemlwQ2xhc3NlcyBUaGUgc2V0IG9mIGFsbCBjbGFzc2VzIEZRQ04gZm91bmQgaW4gdGhlIEpBUiBmaWxlcy4KLSAgICAgKiBAcmV0dXJuIEEgbWFwIHsgRlFDTiBub3QgZm91bmQgaW4gdGhlIHppcENsYXNzZXMgPT4gY2xhc3NlcyB1c2luZyBpdCB9Ci0gICAgICovCi0gICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gZmluZE1pc3NpbmdDbGFzc2VzKAotICAgICAgICAgICAgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IGRlcHMsCi0gICAgICAgICAgICBTZXQ8U3RyaW5nPiB6aXBDbGFzc2VzKSB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PiBtaXNzaW5nID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4oKTsKLQotICAgICAgICBmb3IgKEVudHJ5PFN0cmluZywgU2V0PFN0cmluZz4+IGVudHJ5IDogZGVwcy5lbnRyeVNldCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGVudHJ5LmdldEtleSgpOwotCi0gICAgICAgICAgICBmb3IgKFN0cmluZyBkZXAgOiBlbnRyeS5nZXRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF6aXBDbGFzc2VzLmNvbnRhaW5zKGRlcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBkZXBlbmRlbmN5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHppcCBjbGFzc2VzLgotICAgICAgICAgICAgICAgICAgICBTZXQ8U3RyaW5nPiBzZXQgPSBtaXNzaW5nLmdldChkZXApOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2V0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcucHV0KGRlcCwgc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZXQuYWRkKG5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1pc3Npbmc7Ci0gICAgfQotCi0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvKioKLSAgICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgRGVwZW5kZW5jeVZpc2l0b3IuIFVzZWZ1bCBmb3IgdW5pdCB0ZXN0cy4KLSAgICAgKi8KLSAgICBAVmlzaWJsZUZvclRlc3RpbmcodmlzaWJpbGl0eT1WaXNpYmlsaXR5LlBSSVZBVEUpCi0gICAgRGVwZW5kZW5jeVZpc2l0b3IgZ2V0VmlzaXRvcigpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEZXBlbmRlbmN5VmlzaXRvcigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFZpc2l0b3IgdG8gY29sbGVjdCBhbGwgdGhlIHR5cGUgZGVwZW5kZW5jaWVzIGZyb20gYSBjbGFzcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgY2xhc3MgRGVwZW5kZW5jeVZpc2l0b3IgZXh0ZW5kcyBDbGFzc1Zpc2l0b3IgewotCi0gICAgICAgIHByaXZhdGUgU2V0PFN0cmluZz4gbUN1cnJlbnREZXBTZXQ7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENyZWF0ZXMgYSBuZXcgdmlzaXRvciB0aGF0IHdpbGwgZmluZCBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIHZpc2l0ZWQgY2xhc3MuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgRGVwZW5kZW5jeVZpc2l0b3IoKSB7Ci0gICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldHMgdGhlIHtAbGluayBTZXR9IHdoZXJlIHRvIHJlY29yZCBkaXJlY3QgZGVwZW5kZW5jaWVzIGZvciB0aGlzIGNsYXNzLgotICAgICAgICAgKiBUaGlzIHdpbGwgY2hhbmdlIGJlZm9yZSBlYWNoIHtAbGluayBDbGFzc1JlYWRlciNhY2NlcHQoQ2xhc3NWaXNpdG9yLCBpbnQpfSBjYWxsLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgc2V0RGVwZW5kZW5jeVNldChTZXQ8U3RyaW5nPiBzZXQpIHsKLSAgICAgICAgICAgIG1DdXJyZW50RGVwU2V0ID0gc2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnNpZGVycyB0aGUgZ2l2ZW4gY2xhc3MgbmFtZSBhcyBhIGRlcGVuZGVuY3kuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBjb25zaWRlck5hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjbGFzc05hbWUgPSBpbnRlcm5hbFRvQmluYXJ5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgLy8gZXhjbHVkZSBjbGFzc2VzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGRlZmF1bHQgSlJFICh0aGUgb25lIGV4ZWN1dGluZyB0aGlzIHByb2dyYW0pCi0gICAgICAgICAgICAgICAgaWYgKGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5sb2FkQ2xhc3MoY2xhc3NOYW1lKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBpZ25vcmUKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIGl0IHRvIHRoZSBkZXBlbmRlbmN5IHNldCBmb3IgdGhlIGN1cnJlbnRseSB2aXNpdGVkIGNsYXNzLCBhcyBuZWVkZWQuCi0gICAgICAgICAgICBhc3NlcnQgbUN1cnJlbnREZXBTZXQgIT0gbnVsbDsKLSAgICAgICAgICAgIGlmIChtQ3VycmVudERlcFNldCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUN1cnJlbnREZXBTZXQuYWRkKGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc2lkZXJzIHRoaXMgYXJyYXkgb2YgbmFtZXMgdXNpbmcgY29uc2lkZXJOYW1lKCkuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBjb25zaWRlck5hbWVzKFN0cmluZ1tdIGNsYXNzTmFtZXMpIHsKLSAgICAgICAgICAgIGlmIChjbGFzc05hbWVzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBjbGFzc05hbWUgOiBjbGFzc05hbWVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZShjbGFzc05hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDb25zaWRlcnMgdGhpcyBzaWduYXR1cmUgb3IgdHlwZSBzaWduYXR1cmUgYnkgaW52b2tpbmcgdGhlIHtAbGluayBTaWduYXR1cmVWaXNpdG9yfQotICAgICAgICAgKiBvbiBpdC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIGNvbnNpZGVyU2lnbmF0dXJlKFN0cmluZyBzaWduYXR1cmUpIHsKLSAgICAgICAgICAgIGlmIChzaWduYXR1cmUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFNpZ25hdHVyZVJlYWRlciBzciA9IG5ldyBTaWduYXR1cmVSZWFkZXIoc2lnbmF0dXJlKTsKLSAgICAgICAgICAgICAgICAvLyBTaWduYXR1cmVSZWFkZXIuYWNjZXB0IHdpbGwgY2FsbCBhY2Nlc3NUeXBlIHNvIHdlIGRvbid0IHJlYWxseSBoYXZlCi0gICAgICAgICAgICAgICAgLy8gdG8gZGlmZmVyZW50aWF0ZSB3aGVyZSB0aGUgc2lnbmF0dXJlIGNvbWVzIGZyb20uCi0gICAgICAgICAgICAgICAgc3IuYWNjZXB0KG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc2lkZXJzIHRoaXMge0BsaW5rIFR5cGV9LiBGb3IgYXJyYXlzLCB0aGUgZWxlbWVudCB0eXBlIGlzIGNvbnNpZGVyZWQuCi0gICAgICAgICAqIElmIHRoZSB0eXBlIGlzIGFuIG9iamVjdCwgaXQncyBpbnRlcm5hbCBuYW1lIGlzIGNvbnNpZGVyZWQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBjb25zaWRlclR5cGUoVHlwZSB0KSB7Ci0gICAgICAgICAgICBpZiAodCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHQuZ2V0U29ydCgpID09IFR5cGUuQVJSQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgdCA9IHQuZ2V0RWxlbWVudFR5cGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHQuZ2V0U29ydCgpID09IFR5cGUuT0JKRUNUKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZSh0LmdldEludGVybmFsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc2lkZXJzIGEgZGVzY3JpcHRvciBzdHJpbmcuIFRoZSBkZXNjcmlwdG9yIGlzIGNvbnZlcnRlZCB0byBhIHtAbGluayBUeXBlfQotICAgICAgICAgKiBhbmQgdGhlbiBjb25zaWRlclR5cGUoKSBpcyBpbnZva2VkLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGJvb2xlYW4gY29uc2lkZXJEZXNjKFN0cmluZyBkZXNjKSB7Ci0gICAgICAgICAgICBpZiAoZGVzYyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2MubGVuZ3RoKCkgPiAwICYmIGRlc2MuY2hhckF0KDApID09ICcoJykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG1ldGhvZCBkZXNjcmlwdG9yIHdpdGggYXJndW1lbnRzIGFuZCBhIHJldHVybiB0eXBlLgotICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSB0ID0gVHlwZS5nZXRSZXR1cm5UeXBlKGRlc2MpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc2lkZXJUeXBlKHQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFR5cGUgYXJnIDogVHlwZS5nZXRBcmd1bWVudFR5cGVzKGRlc2MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2lkZXJUeXBlKGFyZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgdCA9IFR5cGUuZ2V0VHlwZShkZXNjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyVHlwZSh0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUsIG5vdCBhIHZhbGlkIHR5cGUuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLQotICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgLy8gLS0tIENsYXNzVmlzaXRvciwgRmllbGRWaXNpdG9yCi0gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgIC8vIFZpc2l0cyBhIGNsYXNzIGhlYWRlcgotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdmlzaXQoaW50IHZlcnNpb24sIGludCBhY2Nlc3MsIFN0cmluZyBuYW1lLAotICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmUsIFN0cmluZyBzdXBlck5hbWUsIFN0cmluZ1tdIGludGVyZmFjZXMpIHsKLSAgICAgICAgICAgIC8vIHNpZ25hdHVyZSBpcyB0aGUgc2lnbmF0dXJlIG9mIHRoaXMgY2xhc3MuIE1heSBiZSBudWxsIGlmIHRoZSBjbGFzcyBpcyBub3QgYSBnZW5lcmljCi0gICAgICAgICAgICAvLyBvbmUsIGFuZCBkb2VzIG5vdCBleHRlbmQgb3IgaW1wbGVtZW50IGdlbmVyaWMgY2xhc3NlcyBvciBpbnRlcmZhY2VzLgotCi0gICAgICAgICAgICBpZiAoc2lnbmF0dXJlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjb25zaWRlclNpZ25hdHVyZShzaWduYXR1cmUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBzdXBlck5hbWUgaXMgdGhlIGludGVybmFsIG9mIG5hbWUgb2YgdGhlIHN1cGVyIGNsYXNzIChzZWUgZ2V0SW50ZXJuYWxOYW1lKS4KLSAgICAgICAgICAgIC8vIEZvciBpbnRlcmZhY2VzLCB0aGUgc3VwZXIgY2xhc3MgaXMgT2JqZWN0LiBNYXkgYmUgbnVsbCBidXQgb25seSBmb3IgdGhlIE9iamVjdCBjbGFzcy4KLSAgICAgICAgICAgIGNvbnNpZGVyTmFtZShzdXBlck5hbWUpOwotCi0gICAgICAgICAgICAvLyBpbnRlcmZhY2VzIGlzIHRoZSBpbnRlcm5hbCBuYW1lcyBvZiB0aGUgY2xhc3MncyBpbnRlcmZhY2VzIChzZWUgZ2V0SW50ZXJuYWxOYW1lKS4KLSAgICAgICAgICAgIC8vIE1heSBiZSBudWxsLgotICAgICAgICAgICAgY29uc2lkZXJOYW1lcyhpbnRlcmZhY2VzKTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBBbm5vdGF0aW9uVmlzaXRvciB2aXNpdEFubm90YXRpb24oU3RyaW5nIGRlc2MsIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICAgICAgLy8gZGVzYyBpcyB0aGUgY2xhc3MgZGVzY3JpcHRvciBvZiB0aGUgYW5ub3RhdGlvbiBjbGFzcy4KLSAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTXlBbm5vdGF0aW9uVmlzaXRvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0QXR0cmlidXRlKEF0dHJpYnV0ZSBhdHRyKSB7Ci0gICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgIH0KLQotICAgICAgICAvLyBWaXNpdHMgdGhlIGVuZCBvZiBhIGNsYXNzCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEVuZCgpIHsKLSAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgY2xhc3MgTXlGaWVsZFZpc2l0b3IgZXh0ZW5kcyBGaWVsZFZpc2l0b3IgewotCi0gICAgICAgICAgICBwdWJsaWMgTXlGaWVsZFZpc2l0b3IoKSB7Ci0gICAgICAgICAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBbm5vdGF0aW9uKFN0cmluZyBkZXNjLCBib29sZWFuIHZpc2libGUpIHsKLSAgICAgICAgICAgICAgICAvLyBkZXNjIGlzIHRoZSBjbGFzcyBkZXNjcmlwdG9yIG9mIHRoZSBhbm5vdGF0aW9uIGNsYXNzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15QW5ub3RhdGlvblZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEF0dHJpYnV0ZShBdHRyaWJ1dGUgYXR0cikgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVmlzaXRzIHRoZSBlbmQgb2YgYSBjbGFzcwotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEVuZCgpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEZpZWxkVmlzaXRvciB2aXNpdEZpZWxkKGludCBhY2Nlc3MsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlLCBPYmplY3QgdmFsdWUpIHsKLSAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGZpZWxkJ3MgZGVzY3JpcHRvciAoc2VlIFR5cGUpLgotICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotCi0gICAgICAgICAgICAvLyBzaWduYXR1cmUgaXMgdGhlIGZpZWxkJ3Mgc2lnbmF0dXJlLiBNYXkgYmUgbnVsbCBpZiB0aGUgZmllbGQncyB0eXBlIGRvZXMgbm90IHVzZQotICAgICAgICAgICAgLy8gZ2VuZXJpYyB0eXBlcy4KLSAgICAgICAgICAgIGNvbnNpZGVyU2lnbmF0dXJlKHNpZ25hdHVyZSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgTXlGaWVsZFZpc2l0b3IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdElubmVyQ2xhc3MoU3RyaW5nIG5hbWUsIFN0cmluZyBvdXRlck5hbWUsIFN0cmluZyBpbm5lck5hbWUsIGludCBhY2Nlc3MpIHsKLSAgICAgICAgICAgIC8vIG5hbWUgaXMgdGhlIGludGVybmFsIG5hbWUgb2YgYW4gaW5uZXIgY2xhc3MgKHNlZSBnZXRJbnRlcm5hbE5hbWUpLgotICAgICAgICAgICAgLy8gTm90ZTogb3V0ZXJOYW1lL2lubmVyTmFtZSBzZWVtcyB0byBiZSBudWxsIHdoZW4gd2UncmUgcmVhZGluZyB0aGUKLSAgICAgICAgICAgIC8vIF9PcmlnaW5hbF9DbGFzc05hbWUgY2xhc3NlcyBnZW5lcmF0ZWQgYnkgbGF5b3V0bGliX2NyZWF0ZS4KLSAgICAgICAgICAgIGlmIChvdXRlck5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZShuYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgTWV0aG9kVmlzaXRvciB2aXNpdE1ldGhvZChpbnQgYWNjZXNzLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsCi0gICAgICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSwgU3RyaW5nW10gZXhjZXB0aW9ucykgewotICAgICAgICAgICAgLy8gZGVzYyBpcyB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRvciAoc2VlIFR5cGUpLgotICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgLy8gc2lnbmF0dXJlIGlzIHRoZSBtZXRob2QncyBzaWduYXR1cmUuIE1heSBiZSBudWxsIGlmIHRoZSBtZXRob2QgcGFyYW1ldGVycywgcmV0dXJuCi0gICAgICAgICAgICAvLyB0eXBlIGFuZCBleGNlcHRpb25zIGRvIG5vdCB1c2UgZ2VuZXJpYyB0eXBlcy4KLSAgICAgICAgICAgIGNvbnNpZGVyU2lnbmF0dXJlKHNpZ25hdHVyZSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgTXlNZXRob2RWaXNpdG9yKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdmlzaXRPdXRlckNsYXNzKFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjKSB7Ci0gICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdmlzaXRTb3VyY2UoU3RyaW5nIHNvdXJjZSwgU3RyaW5nIGRlYnVnKSB7Ci0gICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgIH0KLQotCi0gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAvLyAtLS0gTWV0aG9kVmlzaXRvcgotICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgICAgICBwcml2YXRlIGNsYXNzIE15TWV0aG9kVmlzaXRvciBleHRlbmRzIE1ldGhvZFZpc2l0b3IgewotCi0gICAgICAgICAgICBwdWJsaWMgTXlNZXRob2RWaXNpdG9yKCkgewotICAgICAgICAgICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7Ci0gICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBbm5vdGF0aW9uRGVmYXVsdCgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15QW5ub3RhdGlvblZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdENvZGUoKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBmaWVsZCBpbnN0cnVjdGlvbgotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEZpZWxkSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICAgICAgICAgIC8vIG5hbWUgaXMgdGhlIGZpZWxkJ3MgbmFtZS4KLSAgICAgICAgICAgICAgICAvLyBkZXNjIGlzIHRoZSBmaWVsZCdzIGRlc2NyaXB0b3IgKHNlZSBUeXBlKS4KLSAgICAgICAgICAgICAgICBjb25zaWRlckRlc2MoZGVzYyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRGcmFtZShpbnQgdHlwZSwgaW50IGxvY2FsLCBPYmplY3RbXSBsb2NhbDIsIGludCBzdGFjaywgT2JqZWN0W10gc3RhY2syKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0SWluY0luc24oaW50IHZhciwgaW50IGluY3JlbWVudCkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gYW4gSUlOQyBpbnN0cnVjdGlvbgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0SW5zbihpbnQgb3Bjb2RlKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcyAtLSBhIHplcm8gb3BlcmFuZCBpbnN0cnVjdGlvbgotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0SW50SW5zbihpbnQgb3Bjb2RlLCBpbnQgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gYSBzaW5nbGUgaW50IG9wZXJhbmQgaW5zdHJ1Y3Rpb24KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEp1bXBJbnNuKGludCBvcGNvZGUsIExhYmVsIGxhYmVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcyAtLSBhIGp1bXAgaW5zdHJ1Y3Rpb24KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdExhYmVsKExhYmVsIGxhYmVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGFzcyAtLSBhIGxhYmVsIHRhcmdldAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpbnN0cnVjdGlvbiB0byBsb2FkIGEgY29uc3RhbnQgZnJvbSB0aGUgc3RhY2sKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRMZGNJbnNuKE9iamVjdCBjc3QpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3N0IGluc3RhbmNlb2YgVHlwZSkgewotICAgICAgICAgICAgICAgICAgICBjb25zaWRlclR5cGUoKFR5cGUpIGNzdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TGluZU51bWJlcihpbnQgbGluZSwgTGFiZWwgc3RhcnQpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRMb2NhbFZhcmlhYmxlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSwgTGFiZWwgc3RhcnQsIExhYmVsIGVuZCwgaW50IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgLy8gZGVzYyBpcyB0aGUgdHlwZSBkZXNjcmlwdG9yIG9mIHRoaXMgbG9jYWwgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgICAgIC8vIHNpZ25hdHVyZSBpcyB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhpcyBsb2NhbCB2YXJpYWJsZS4gTWF5IGJlIG51bGwgaWYgdGhlIGxvY2FsCi0gICAgICAgICAgICAgICAgLy8gdmFyaWFibGUgdHlwZSBkb2VzIG5vdCB1c2UgZ2VuZXJpYyB0eXBlcy4KLSAgICAgICAgICAgICAgICBjb25zaWRlclNpZ25hdHVyZShzaWduYXR1cmUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TG9va3VwU3dpdGNoSW5zbihMYWJlbCBkZmx0LCBpbnRbXSBrZXlzLCBMYWJlbFtdIGxhYmVscykgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gYSBsb29rdXAgc3dpdGNoIGluc3RydWN0aW9uCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRNYXhzKGludCBtYXhTdGFjaywgaW50IG1heExvY2FscykgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaW5zdHJ1Y3Rpb24gdGhhdCBpbnZva2VzIGEgbWV0aG9kCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotCi0gICAgICAgICAgICAgICAgLy8gb3duZXIgaXMgdGhlIGludGVybmFsIG5hbWUgb2YgdGhlIG1ldGhvZCdzIG93bmVyIGNsYXNzCi0gICAgICAgICAgICAgICAgaWYgKCFjb25zaWRlckRlc2Mob3duZXIpICYmIG93bmVyLmluZGV4T2YoJy8nKSAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICBjb25zaWRlck5hbWUob3duZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBkZXNjIGlzIHRoZSBtZXRob2QncyBkZXNjcmlwdG9yIChzZWUgVHlwZSkuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJEZXNjKGRlc2MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpbnN0cnVjdGlvbiBtdWx0aWFuZXdhcnJheSwgd2hhdGV2ZXIgdGhhdCBpcwotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdE11bHRpQU5ld0FycmF5SW5zbihTdHJpbmcgZGVzYywgaW50IGRpbXMpIHsKLQotICAgICAgICAgICAgICAgIC8vIGRlc2MgYW4gYXJyYXkgdHlwZSBkZXNjcmlwdG9yLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRQYXJhbWV0ZXJBbm5vdGF0aW9uKGludCBwYXJhbWV0ZXIsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgICAgICAgICBib29sZWFuIHZpc2libGUpIHsKLSAgICAgICAgICAgICAgICAvLyBkZXNjIGlzIHRoZSBjbGFzcyBkZXNjcmlwdG9yIG9mIHRoZSBhbm5vdGF0aW9uIGNsYXNzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15QW5ub3RhdGlvblZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFRhYmxlU3dpdGNoSW5zbihpbnQgbWluLCBpbnQgbWF4LCBMYWJlbCBkZmx0LCBMYWJlbFtdIGxhYmVscykgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gdGFibGUgc3dpdGNoIGluc3RydWN0aW9uCi0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFRyeUNhdGNoQmxvY2soTGFiZWwgc3RhcnQsIExhYmVsIGVuZCwgTGFiZWwgaGFuZGxlciwgU3RyaW5nIHR5cGUpIHsKLSAgICAgICAgICAgICAgICAvLyB0eXBlIGlzIHRoZSBpbnRlcm5hbCBuYW1lIG9mIHRoZSB0eXBlIG9mIGV4Y2VwdGlvbnMgaGFuZGxlZCBieSB0aGUgaGFuZGxlciwKLSAgICAgICAgICAgICAgICAvLyBvciBudWxsIHRvIGNhdGNoIGFueSBleGNlcHRpb25zIChmb3IgImZpbmFsbHkiIGJsb2NrcykuCi0gICAgICAgICAgICAgICAgY29uc2lkZXJOYW1lKHR5cGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyB0eXBlIGluc3RydWN0aW9uCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0VHlwZUluc24oaW50IG9wY29kZSwgU3RyaW5nIHR5cGUpIHsKLSAgICAgICAgICAgICAgICAvLyB0eXBlIGlzIHRoZSBvcGVyYW5kIG9mIHRoZSBpbnN0cnVjdGlvbiB0byBiZSB2aXNpdGVkLiBUaGlzIG9wZXJhbmQgbXVzdCBiZSB0aGUKLSAgICAgICAgICAgICAgICAvLyBpbnRlcm5hbCBuYW1lIG9mIGFuIG9iamVjdCBvciBhcnJheSBjbGFzcy4KLSAgICAgICAgICAgICAgICBjb25zaWRlck5hbWUodHlwZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRWYXJJbnNuKGludCBvcGNvZGUsIGludCB2YXIpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzIC0tIGxvY2FsIHZhcmlhYmxlIGluc3RydWN0aW9uCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGNsYXNzIE15U2lnbmF0dXJlVmlzaXRvciBleHRlbmRzIFNpZ25hdHVyZVZpc2l0b3IgewotCi0gICAgICAgICAgICBwdWJsaWMgTXlTaWduYXR1cmVWaXNpdG9yKCkgewotICAgICAgICAgICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gLS0tIFNpZ25hdHVyZVZpc2l0b3IKLSAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICBwcml2YXRlIFN0cmluZyBtQ3VycmVudFNpZ25hdHVyZUNsYXNzID0gbnVsbDsKLQotICAgICAgICAgICAgLy8gU3RhcnRzIHRoZSB2aXNpdCBvZiBhIHNpZ25hdHVyZSBjb3JyZXNwb25kaW5nIHRvIGEgY2xhc3Mgb3IgaW50ZXJmYWNlIHR5cGUKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRDbGFzc1R5cGUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgICAgICAgICBtQ3VycmVudFNpZ25hdHVyZUNsYXNzID0gbmFtZTsKLSAgICAgICAgICAgICAgICBjb25zaWRlck5hbWUobmFtZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFZpc2l0cyBhbiBpbm5lciBjbGFzcwotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdElubmVyQ2xhc3NUeXBlKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50U2lnbmF0dXJlQ2xhc3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFNpZ25hdHVyZUNsYXNzICs9ICIkIiArIG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyTmFtZShtQ3VycmVudFNpZ25hdHVyZUNsYXNzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFNpZ25hdHVyZVZpc2l0b3IgdmlzaXRBcnJheVR5cGUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEJhc2VUeXBlKGNoYXIgZGVzY3JpcHRvcikgewotICAgICAgICAgICAgICAgIC8vIHBhc3MgLS0gYSBwcmltaXRpdmUgdHlwZSwgaWdub3JlZAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0Q2xhc3NCb3VuZCgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15U2lnbmF0dXJlVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0RXhjZXB0aW9uVHlwZSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15U2lnbmF0dXJlVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0Rm9ybWFsVHlwZVBhcmFtZXRlcihTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdEludGVyZmFjZSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15U2lnbmF0dXJlVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTaWduYXR1cmVWaXNpdG9yIHZpc2l0SW50ZXJmYWNlQm91bmQoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFBhcmFtZXRlclR5cGUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFJldHVyblR5cGUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFN1cGVyY2xhc3MoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2lnbmF0dXJlVmlzaXRvciB2aXNpdFR5cGVBcmd1bWVudChjaGFyIHdpbGRjYXJkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNeVNpZ25hdHVyZVZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVWYXJpYWJsZShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgICAgIC8vIHBhc3MKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVBcmd1bWVudCgpIHsKLSAgICAgICAgICAgICAgICAvLyBwYXNzCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotCi0gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAvLyAtLS0gQW5ub3RhdGlvblZpc2l0b3IKLSAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBNeUFubm90YXRpb25WaXNpdG9yIGV4dGVuZHMgQW5ub3RhdGlvblZpc2l0b3IgewotCi0gICAgICAgICAgICBwdWJsaWMgTXlBbm5vdGF0aW9uVmlzaXRvcigpIHsKLSAgICAgICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBWaXNpdHMgYSBwcmltaXRpdmUgdmFsdWUgb2YgYW4gYW5ub3RhdGlvbgotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdChTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgdGhlIGFjdHVhbCB2YWx1ZSwgd2hvc2UgdHlwZSBtdXN0IGJlIEJ5dGUsIEJvb2xlYW4sIENoYXJhY3RlciwgU2hvcnQsCi0gICAgICAgICAgICAgICAgLy8gSW50ZWdlciwgTG9uZywgRmxvYXQsIERvdWJsZSwgU3RyaW5nIG9yIFR5cGUKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyVHlwZSgoVHlwZSkgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBbm5vdGF0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGNsYXNzIGRlc2NyaXB0b3Igb2YgdGhlIG5lc3RlZCBhbm5vdGF0aW9uIGNsYXNzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE15QW5ub3RhdGlvblZpc2l0b3IoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQW5ub3RhdGlvblZpc2l0b3IgdmlzaXRBcnJheShTdHJpbmcgbmFtZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXlBbm5vdGF0aW9uVmlzaXRvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RW51bShTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsIFN0cmluZyB2YWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIGRlc2MgaXMgdGhlIGNsYXNzIGRlc2NyaXB0b3Igb2YgdGhlIGVudW1lcmF0aW9uIGNsYXNzLgotICAgICAgICAgICAgICAgIGNvbnNpZGVyRGVzYyhkZXNjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvSUNyZWF0ZUluZm8uamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvSUNyZWF0ZUluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4NzgxNC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0lDcmVhdGVJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi0vKioKLSAqIEludGVyZmFjZSBkZXNjcmliaW5nIHRoZSB3b3JrIHRvIGJlIGRvbmUgYnkge0BsaW5rIEFzbUdlbmVyYXRvcn0uCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUNyZWF0ZUluZm8gewotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBjbGFzcyBmcm9tIGxheW91dGxpYl9jcmVhdGUgdG8gaW5qZWN0IGluIGxheW91dGxpYi4KLSAgICAgKiBUaGUgbGlzdCBjYW4gYmUgZW1wdHkgYnV0IG11c3Qgbm90IGJlIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IENsYXNzPD8+W10gZ2V0SW5qZWN0ZWRDbGFzc2VzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIG1ldGhvZHMgdG8gcmV3cml0ZSBhcyBkZWxlZ2F0ZXMuCi0gICAgICogVGhlIGxpc3QgY2FuIGJlIGVtcHR5IGJ1dCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmdbXSBnZXREZWxlZ2F0ZU1ldGhvZHMoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY2xhc3NlcyBvbiB3aGljaCB0byBkZWxlZ2F0ZSBhbGwgbmF0aXZlIG1ldGhvZHMuCi0gICAgICogVGhlIGxpc3QgY2FuIGJlIGVtcHR5IGJ1dCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmdbXSBnZXREZWxlZ2F0ZUNsYXNzTmF0aXZlcygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBUaGUgbGlzdCBvZiBtZXRob2RzIHRvIHN0dWIgb3V0LiBFYWNoIGVudHJ5IG11c3QgYmUgaW4gdGhlIGZvcm0KLSAgICAgKiAicGFja2FnZS5wYWNrYWdlLk91dGVyQ2xhc3MkSW5uZXJDbGFzcyNNZXRob2ROYW1lIi4KLSAgICAgKiBUaGUgbGlzdCBjYW4gYmUgZW1wdHkgYnV0IG11c3Qgbm90IGJlIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFN0cmluZ1tdIGdldE92ZXJyaWRkZW5NZXRob2RzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGNsYXNzZXMgdG8gcmVuYW1lLCBtdXN0IGJlIGFuIGV2ZW4gbGlzdDogdGhlIGJpbmFyeSBGUUNOCi0gICAgICogb2YgY2xhc3MgdG8gcmVwbGFjZSBmb2xsb3dlZCBieSB0aGUgbmV3IEZRQ04uCi0gICAgICogVGhlIGxpc3QgY2FuIGJlIGVtcHR5IGJ1dCBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmdbXSBnZXRSZW5hbWVkQ2xhc3NlcygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBjbGFzc2VzIGZvciB3aGljaCB0aGUgbWV0aG9kcyByZXR1cm5pbmcgdGhlbSBzaG91bGQgYmUgZGVsZXRlZC4KLSAgICAgKiBUaGUgYXJyYXkgY29udGFpbnMgYSBsaXN0IG9mIG51bGwgdGVybWluYXRlZCBzZWN0aW9uIHN0YXJ0aW5nIHdpdGggdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0gICAgICogdG8gcmVuYW1lIGluIHdoaWNoIHRoZSBtZXRob2RzIGFyZSBkZWxldGVkLCBmb2xsb3dlZCBieSBhIGxpc3Qgb2YgcmV0dXJuIHR5cGVzIGlkZW50aWZ5aW5nCi0gICAgICogdGhlIG1ldGhvZHMgdG8gZGVsZXRlLgotICAgICAqIFRoZSBsaXN0IGNhbiBiZSBlbXB0eSBidXQgbXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nW10gZ2V0RGVsZXRlUmV0dXJucygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBjbGFzc2VzIHRvIHJlZmFjdG9yLCBtdXN0IGJlIGFuIGV2ZW4gbGlzdDogdGhlCi0gICAgICogYmluYXJ5IEZRQ04gb2YgY2xhc3MgdG8gcmVwbGFjZSBmb2xsb3dlZCBieSB0aGUgbmV3IEZRQ04uIEFsbCByZWZlcmVuY2VzCi0gICAgICogdG8gdGhlIG9sZCBjbGFzcyBzaG91bGQgYmUgdXBkYXRlZCB0byB0aGUgbmV3IGNsYXNzLgotICAgICAqIFRoZSBsaXN0IGNhbiBiZSBlbXB0eSBidXQgbXVzdCBub3QgYmUgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nW10gZ2V0SmF2YVBrZ0NsYXNzZXMoKTsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTG9nLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0xvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2JhNTkxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLQotcHVibGljIGNsYXNzIExvZyB7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbVZlcmJvc2UgPSBmYWxzZTsKLQotICAgIHB1YmxpYyB2b2lkIHNldFZlcmJvc2UoYm9vbGVhbiB2ZXJib3NlKSB7Ci0gICAgICAgIG1WZXJib3NlID0gdmVyYm9zZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkZWJ1ZyhTdHJpbmcgZm9ybWF0LCBPYmplY3QuLi4gYXJncykgewotICAgICAgICBpZiAobVZlcmJvc2UpIHsKLSAgICAgICAgICAgIGluZm8oZm9ybWF0LCBhcmdzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiBTaW1pbGFyIHRvIGRlYnVnKCkgYnV0IGRvZXNuJ3QgZG8gYSBcbiBhdXRvbWF0aWNhbGx5LiAqLwotICAgIHB1YmxpYyB2b2lkIGRlYnVnTm9sbihTdHJpbmcgZm9ybWF0LCBPYmplY3QuLi4gYXJncykgewotICAgICAgICBpZiAobVZlcmJvc2UpIHsKLSAgICAgICAgICAgIFN0cmluZyBzID0gU3RyaW5nLmZvcm1hdChmb3JtYXQsIGFyZ3MpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluZm8oU3RyaW5nIGZvcm1hdCwgT2JqZWN0Li4uIGFyZ3MpIHsKLSAgICAgICAgU3RyaW5nIHMgPSBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgYXJncyk7Ci0gICAgICAgIG91dFByaW50bG4ocyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZXJyb3IoU3RyaW5nIGZvcm1hdCwgT2JqZWN0Li4uIGFyZ3MpIHsKLSAgICAgICAgU3RyaW5nIHMgPSBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgYXJncyk7Ci0gICAgICAgIGVyclByaW50bG4ocyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZXhjZXB0aW9uKFRocm93YWJsZSB0LCBTdHJpbmcgZm9ybWF0LCBPYmplY3QuLi4gYXJncykgewotICAgICAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLSAgICAgICAgdC5wcmludFN0YWNrVHJhY2UocHcpOwotICAgICAgICBwdy5mbHVzaCgpOwotICAgICAgICBlcnJvcihmb3JtYXQgKyAiXG4iICsgc3cudG9TdHJpbmcoKSwgYXJncyk7Ci0gICAgfQotCi0gICAgLyoqIGZvciB1bml0IHRlc3RpbmcgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBlcnJQcmludGxuKFN0cmluZyBtc2cpIHsKLSAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKG1zZyk7Ci0gICAgfQotCi0gICAgLyoqIGZvciB1bml0IHRlc3RpbmcgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBvdXRQcmludGxuKFN0cmluZyBtc2cpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1zZyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0xvZ0Fib3J0RXhjZXB0aW9uLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0xvZ0Fib3J0RXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNGI0YTcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Mb2dBYm9ydEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotcHVibGljIGNsYXNzIExvZ0Fib3J0RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKLQotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Gb3JtYXQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBPYmplY3RbXSBtQXJnczsKLQotICAgIHB1YmxpYyBMb2dBYm9ydEV4Y2VwdGlvbihTdHJpbmcgZm9ybWF0LCBPYmplY3QuLi4gYXJncykgewotICAgICAgICBtRm9ybWF0ID0gZm9ybWF0OwotICAgICAgICBtQXJncyA9IGFyZ3M7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGVycm9yKExvZyBsb2cpIHsKLSAgICAgICAgbG9nLmVycm9yKG1Gb3JtYXQsIG1BcmdzKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL01haW4uamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWFpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTUwMWQyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWFpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi0KLS8qKgotICogRW50cnkgcG9pbnQgZm9yIHRoZSBsYXlvdXRsaWJfY3JlYXRlIHRvb2wuCi0gKiA8cC8+Ci0gKiBUaGUgdG9vbCBkb2VzIG5vdCBjdXJyZW50bHkgcmVseSBvbiBhbnkgZXh0ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlLgotICogSW5zdGVhZCB0aGUgY29uZmlndXJhdGlvbiBpcyBtb3N0bHkgZG9uZSB2aWEgdGhlIHtAbGluayBDcmVhdGVJbmZvfSBjbGFzcy4KLSAqIDxwLz4KLSAqIEZvciBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSB0b29sIGFuZCBpdHMgaW1wbGVtZW50YXRpb24sIHBsZWFzZSByZWZlciB0bwotICogdGhlICJSRUFETUUudHh0IiBmaWxlIGF0IHRoZSByb290IG9mIHRoaXMgcHJvamVjdC4KLSAqIDxwLz4KLSAqIEZvciBhIHF1aWNrIHRlc3QsIGludm9rZSB0aGlzIGFzIGZvbGxvd3M6Ci0gKiA8cHJlPgotICogJCBtYWtlIGxheW91dGxpYgotICogPC9wcmU+Ci0gKiB3aGljaCBkb2VzOgotICogPHByZT4KLSAqICQgbWFrZSBsYXlvdXRsaWJfY3JlYXRlICZsdDtidW5jaCBvZiBmcmFtZXdvcmsgamFycyZndDsKLSAqICQgamF2YSAtamFyIG91dC9ob3N0L2xpbnV4LXg4Ni9mcmFtZXdvcmsvbGF5b3V0bGliX2NyZWF0ZS5qYXIgXAotICogICAgICAgIG91dC9ob3N0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvdGVtcF9sYXlvdXRsaWJfaW50ZXJtZWRpYXRlcy9qYXZhbGliLmphciBcCi0gKiAgICAgICAgb3V0L3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2NvcmVfaW50ZXJtZWRpYXRlcy9jbGFzc2VzLmphciBcCi0gKiAgICAgICAgb3V0L3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2ZyYW1ld29ya19pbnRlcm1lZGlhdGVzL2NsYXNzZXMuamFyCi0gKiA8L3ByZT4KLSAqLwotcHVibGljIGNsYXNzIE1haW4gewotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBPcHRpb25zIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gZ2VuZXJhdGVQdWJsaWNBY2Nlc3MgPSB0cnVlOwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBsaXN0QWxsRGVwcyA9IGZhbHNlOwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBsaXN0T25seU1pc3NpbmdEZXBzID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBPcHRpb25zIHNPcHRpb25zID0gbmV3IE9wdGlvbnMoKTsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQotICAgICAgICBMb2cgbG9nID0gbmV3IExvZygpOwotCi0gICAgICAgIEFycmF5TGlzdDxTdHJpbmc+IG9zSmFyUGF0aCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgICAgICBTdHJpbmdbXSBvc0Rlc3RKYXIgPSB7IG51bGwgfTsKLQotICAgICAgICBpZiAoIXByb2Nlc3NBcmdzKGxvZywgYXJncywgb3NKYXJQYXRoLCBvc0Rlc3RKYXIpKSB7Ci0gICAgICAgICAgICBsb2cuZXJyb3IoIlVzYWdlOiBsYXlvdXRsaWJfY3JlYXRlIFstdl0gWy1wXSBvdXRwdXQuamFyIGlucHV0LmphciAuLi4iKTsKLSAgICAgICAgICAgIGxvZy5lcnJvcigiVXNhZ2U6IGxheW91dGxpYl9jcmVhdGUgWy12XSBbLS1saXN0LWRlcHN8LS1taXNzaW5nLWRlcHNdIGlucHV0LmphciAuLi4iKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNPcHRpb25zLmxpc3RBbGxEZXBzIHx8IHNPcHRpb25zLmxpc3RPbmx5TWlzc2luZ0RlcHMpIHsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KGxpc3REZXBzKG9zSmFyUGF0aCwgbG9nKSk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KGNyZWF0ZUxheW91dExpYihvc0Rlc3RKYXJbMF0sIG9zSmFyUGF0aCwgbG9nKSk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGludCBjcmVhdGVMYXlvdXRMaWIoU3RyaW5nIG9zRGVzdEphciwgQXJyYXlMaXN0PFN0cmluZz4gb3NKYXJQYXRoLCBMb2cgbG9nKSB7Ci0gICAgICAgIGxvZy5pbmZvKCJPdXRwdXQ6ICUxJHMiLCBvc0Rlc3RKYXIpOwotICAgICAgICBmb3IgKFN0cmluZyBwYXRoIDogb3NKYXJQYXRoKSB7Ci0gICAgICAgICAgICBsb2cuaW5mbygiSW5wdXQgOiAgICAgICUxJHMiLCBwYXRoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBDcmVhdGVJbmZvIGluZm8gPSBuZXcgQ3JlYXRlSW5mbygpOwotICAgICAgICAgICAgU2V0PFN0cmluZz4gZXhjbHVkZUNsYXNzZXMgPSBnZXRFeGNsdWRlZENsYXNzZXMoaW5mbyk7Ci0gICAgICAgICAgICBBc21HZW5lcmF0b3IgYWdlbiA9IG5ldyBBc21HZW5lcmF0b3IobG9nLCBvc0Rlc3RKYXIsIGluZm8pOwotCi0gICAgICAgICAgICBBc21BbmFseXplciBhYSA9IG5ldyBBc21BbmFseXplcihsb2csIG9zSmFyUGF0aCwgYWdlbiwKLSAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlcml2ZWQgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQudmlldy5WaWV3IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLmFwcC5GcmFnbWVudCIKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgY2xhc3NlcwotICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuKiIsIC8vIGZvciBhbmRyb2lkLlIKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnV0aWwuKiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC4qIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnZpZXcuKiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC53aWRnZXQuKiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuaW50ZXJuYWwud2lkZ2V0LioiLAotICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQudGV4dC4qKiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy4qIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLioiLAotICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuY29udGVudC4qIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLmNvbnRlbnQucmVzLioiLAotICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5hcGFjaGUuaGFybW9ueS54bWwuKiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuaW50ZXJuYWwuUioqIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnBpbS4qIiwgLy8gZm9yIGRhdGVwaWNrZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLm9zLioiLCAgLy8gZm9yIGFuZHJvaWQub3MuSGFuZGxlcgotICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuZGF0YWJhc2UuQ29udGVudE9ic2VydmVyIiwgLy8gZm9yIERpZ2l0YWwgY2xvY2sKLSAgICAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5pMThuLnBob25lbnVtYmVycy4qIiwgIC8vIGZvciBUZXh0VmlldyB3aXRoIGF1dG9saW5rIGF0dHJpYnV0ZQotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBleGNsdWRlQ2xhc3Nlcyk7Ci0gICAgICAgICAgICBhYS5hbmFseXplKCk7Ci0gICAgICAgICAgICBhZ2VuLmdlbmVyYXRlKCk7Ci0KLSAgICAgICAgICAgIC8vIFRocm93IGFuIGVycm9yIGlmIGFueSBjbGFzcyBmYWlsZWQgdG8gZ2V0IHJlbmFtZWQgYnkgdGhlIGdlbmVyYXRvcgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIElNUE9SVEFOVDogaWYgeW91J3JlIGJ1aWxkaW5nIHRoZSBwbGF0Zm9ybSBhbmQgeW91IGdldCB0aGlzIGVycm9yIG1lc3NhZ2UsCi0gICAgICAgICAgICAvLyBpdCBtZWFucyB0aGUgcmVuYW1lQ2xhc3Nlc1tdIGFycmF5IGluIEFzbUdlbmVyYXRvciBuZWVkcyB0byBiZSB1cGRhdGVkOiBzb21lCi0gICAgICAgICAgICAvLyBjbGFzcyBzaG91bGQgaGF2ZSBiZWVuIHJlbmFtZWQgYnV0IGl0IHdhcyBub3QgZm91bmQgaW4gdGhlIGlucHV0IEpBUiBmaWxlcy4KLSAgICAgICAgICAgIFNldDxTdHJpbmc+IG5vdFJlbmFtZWQgPSBhZ2VuLmdldENsYXNzZXNOb3RSZW5hbWVkKCk7Ci0gICAgICAgICAgICBpZiAobm90UmVuYW1lZC5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gKDgwLWNvbHVtbiBndWlkZSBiZWxvdyBmb3IgZXJyb3IgZm9ybWF0dGluZykKLSAgICAgICAgICAgICAgICAvLyAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQotICAgICAgICAgICAgICAgIGxvZy5lcnJvcigKLSAgICAgICAgICAgICAgICAgICJFUlJPUiB3aGVuIHJ1bm5pbmcgbGF5b3V0bGliX2NyZWF0ZTogdGhlIGZvbGxvd2luZyBjbGFzc2VzIGFyZSByZWZlcmVuY2VkXG4iICsKLSAgICAgICAgICAgICAgICAgICJieSB0b29scy9sYXlvdXRsaWIvY3JlYXRlIGJ1dCB3ZXJlIG5vdCBhY3R1YWxseSBmb3VuZCBpbiB0aGUgaW5wdXQgSkFSIGZpbGVzLlxuIiArCi0gICAgICAgICAgICAgICAgICAiVGhpcyBtYXkgYmUgZHVlIHRvIHNvbWUgcGxhdGZvcm0gY2xhc3NlcyBoYXZpbmcgYmVlbiByZW5hbWVkLiIpOwotICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIGZxY24gOiBub3RSZW5hbWVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcigiLSBDbGFzcyBub3QgZm91bmQ6ICVzIiwgZnFjbi5yZXBsYWNlKCcvJywgJy4nKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIHBhdGggOiBvc0phclBhdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIi0gSW5wdXQgSkFSIDogJTEkcyIsIHBhdGgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGxvZy5leGNlcHRpb24oZSwgIkZhaWxlZCB0byBsb2FkIGphciIpOwotICAgICAgICB9IGNhdGNoIChMb2dBYm9ydEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBlLmVycm9yKGxvZyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTZXQ8U3RyaW5nPiBnZXRFeGNsdWRlZENsYXNzZXMoQ3JlYXRlSW5mbyBpbmZvKSB7Ci0gICAgICAgIFN0cmluZ1tdIHJlZmFjdG9yZWRDbGFzc2VzID0gaW5mby5nZXRKYXZhUGtnQ2xhc3NlcygpOwotICAgICAgICBTZXQ8U3RyaW5nPiBleGNsdWRlZENsYXNzZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KHJlZmFjdG9yZWRDbGFzc2VzLmxlbmd0aCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVmYWN0b3JlZENsYXNzZXMubGVuZ3RoOyBpKz0yKSB7Ci0gICAgICAgICAgICBleGNsdWRlZENsYXNzZXMuYWRkKHJlZmFjdG9yZWRDbGFzc2VzW2ldKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZXhjbHVkZWRDbGFzc2VzOwotCi0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGxpc3REZXBzKEFycmF5TGlzdDxTdHJpbmc+IG9zSmFyUGF0aCwgTG9nIGxvZykgewotICAgICAgICBEZXBlbmRlbmN5RmluZGVyIGRmID0gbmV3IERlcGVuZGVuY3lGaW5kZXIobG9nKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIExpc3Q8TWFwPFN0cmluZywgU2V0PFN0cmluZz4+PiByZXN1bHQgPSBkZi5maW5kRGVwcyhvc0phclBhdGgpOwotICAgICAgICAgICAgaWYgKHNPcHRpb25zLmxpc3RBbGxEZXBzKSB7Ci0gICAgICAgICAgICAgICAgZGYucHJpbnRBbGxEZXBzKHJlc3VsdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNPcHRpb25zLmxpc3RPbmx5TWlzc2luZ0RlcHMpIHsKLSAgICAgICAgICAgICAgICBkZi5wcmludE1pc3NpbmdEZXBzKHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGxvZy5leGNlcHRpb24oZSwgIkZhaWxlZCB0byBsb2FkIGphciIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIGFyZ3Mgd2hlcmUgcHJvcGVybHkgcGFyc2VkLgotICAgICAqIFJldHVybnMgZmFsc2UgaWYgcHJvZ3JhbSBzaG91bGQgZXhpdCB3aXRoIGNvbW1hbmQtbGluZSB1c2FnZS4KLSAgICAgKiA8cC8+Ci0gICAgICogTm90ZTogdGhlIFN0cmluZ1swXSBpcyBhbiBvdXRwdXQgcGFyYW1ldGVyIHdyYXBwZWQgaW4gYW4gYXJyYXksIHNpbmNlIHRoZXJlIGlzIG5vCi0gICAgICogIm91dCIgcGFyYW1ldGVyIHN1cHBvcnQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwcm9jZXNzQXJncyhMb2cgbG9nLCBTdHJpbmdbXSBhcmdzLAotICAgICAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gb3NKYXJQYXRoLCBTdHJpbmdbXSBvc0Rlc3RKYXIpIHsKLSAgICAgICAgYm9vbGVhbiBuZWVkc19kZXN0ID0gdHJ1ZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcyA9IGFyZ3NbaV07Ci0gICAgICAgICAgICBpZiAocy5lcXVhbHMoIi12IikpIHsKLSAgICAgICAgICAgICAgICBsb2cuc2V0VmVyYm9zZSh0cnVlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocy5lcXVhbHMoIi1wIikpIHsKLSAgICAgICAgICAgICAgICBzT3B0aW9ucy5nZW5lcmF0ZVB1YmxpY0FjY2VzcyA9IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzLmVxdWFscygiLS1saXN0LWRlcHMiKSkgewotICAgICAgICAgICAgICAgIHNPcHRpb25zLmxpc3RBbGxEZXBzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBuZWVkc19kZXN0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHMuZXF1YWxzKCItLW1pc3NpbmctZGVwcyIpKSB7Ci0gICAgICAgICAgICAgICAgc09wdGlvbnMubGlzdE9ubHlNaXNzaW5nRGVwcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbmVlZHNfZGVzdCA9IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIGlmICghcy5zdGFydHNXaXRoKCItIikpIHsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNfZGVzdCAmJiBvc0Rlc3RKYXJbMF0gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBvc0Rlc3RKYXJbMF0gPSBzOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9zSmFyUGF0aC5hZGQocyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIlVua25vdyBhcmd1bWVudDogJXMiLCBzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob3NKYXJQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbG9nLmVycm9yKCJNaXNzaW5nIHBhcmFtZXRlcjogcGF0aCB0byBpbnB1dCBqYXIiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobmVlZHNfZGVzdCAmJiBvc0Rlc3RKYXJbMF0gPT0gbnVsbCkgewotICAgICAgICAgICAgbG9nLmVycm9yKCJNaXNzaW5nIHBhcmFtZXRlcjogcGF0aCB0byBvdXRwdXQgamFyIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBzT3B0aW9ucy5nZW5lcmF0ZVB1YmxpY0FjY2VzcyA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWV0aG9kQWRhcHRlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9NZXRob2RBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMWU0Y2YuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9NZXRob2RBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi0KLS8qKgotICogQW4gYWRhcHRlciB0byBtYWtlIGl0IGVhc2llciB0byB1c2Uge0BsaW5rIE1ldGhvZExpc3RlbmVyfS4KLSAqIDxwLz4KLSAqIFRoZSBhZGFwdGVyIGNhbGxzIHRoZSB2b2lkIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gbGlzdGVuZXIKLSAqIGZvciBhbGwgdHlwZXMgKEksIEwsIEYsIEQgYW5kIEEpLCByZXR1cm5pbmcgMCBvciBudWxsIGFzIGFwcHJvcHJpYXRlLgotICovCi1wdWJsaWMgY2xhc3MgTWV0aG9kQWRhcHRlciBpbXBsZW1lbnRzIE1ldGhvZExpc3RlbmVyIHsKLSAgICAvKioKLSAgICAgKiBBIHN0dWIgbWV0aG9kIGlzIGJlaW5nIGludm9rZWQuCi0gICAgICogPHAvPgotICAgICAqIEtub3duIGxpbWl0YXRpb246IGNhbGxlciBhcmd1bWVudHMgYXJlIG5vdCBhdmFpbGFibGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc2lnbmF0dXJlIFRoZSBzaWduYXR1cmUgb2YgdGhlIG1ldGhvZCBiZWluZyBpbnZva2VkLCBjb21wb3NlZCBvZiB0aGUKLSAgICAgKiAgICAgICAgICAgICAgICAgIGJpbmFyeSBjbGFzcyBuYW1lIGZvbGxvd2VkIGJ5IHRoZSBtZXRob2QgZGVzY3JpcHRvciAoYWthIGFyZ3VtZW50Ci0gICAgICogICAgICAgICAgICAgICAgICB0eXBlcykuIEV4YW1wbGU6ICJjb20vZm9vL015Q2xhc3MvSW5uZXJDbGFzcy9wcmludEludChJKVYiLgotICAgICAqIEBwYXJhbSBpc05hdGl2ZSBUcnVlIGlmIHRoZSBtZXRob2Qgd2FzIGEgbmF0aXZlIG1ldGhvZC4KLSAgICAgKiBAcGFyYW0gY2FsbGVyIFRoZSBjYWxsaW5nIG9iamVjdC4gTnVsbCBmb3Igc3RhdGljIG1ldGhvZHMsICJ0aGlzIiBmb3IgaW5zdGFuY2UgbWV0aG9kcy4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkludm9rZVYoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcikgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNhbWUgYXMge0BsaW5rICNvbkludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpfSBidXQgcmV0dXJucyBhbiBpbnRlZ2VyIG9yIHNpbWlsYXIuCi0gICAgICogQHNlZSAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQotICAgICAqIEByZXR1cm4gYW4gaW50ZWdlciwgb3IgYSBib29sZWFuLCBvciBhIHNob3J0IG9yIGEgYnl0ZS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IG9uSW52b2tlSShTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKSB7Ci0gICAgICAgIG9uSW52b2tlVihzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYSBsb25nLgotICAgICAqIEBzZWUgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCkKLSAgICAgKiBAcmV0dXJuIGEgbG9uZy4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBvbkludm9rZUwoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcikgewotICAgICAgICBvbkludm9rZVYoc2lnbmF0dXJlLCBpc05hdGl2ZSwgY2FsbGVyKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2FtZSBhcyB7QGxpbmsgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCl9IGJ1dCByZXR1cm5zIGEgZmxvYXQuCi0gICAgICogQHNlZSAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQotICAgICAqIEByZXR1cm4gYSBmbG9hdC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgb25JbnZva2VGKFN0cmluZyBzaWduYXR1cmUsIGJvb2xlYW4gaXNOYXRpdmUsIE9iamVjdCBjYWxsZXIpIHsKLSAgICAgICAgb25JbnZva2VWKHNpZ25hdHVyZSwgaXNOYXRpdmUsIGNhbGxlcik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNhbWUgYXMge0BsaW5rICNvbkludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpfSBidXQgcmV0dXJucyBhIGRvdWJsZS4KLSAgICAgKiBAc2VlICNvbkludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpCi0gICAgICogQHJldHVybiBhIGRvdWJsZS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZG91YmxlIG9uSW52b2tlRChTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKSB7Ci0gICAgICAgIG9uSW52b2tlVihzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYW4gb2JqZWN0LgotICAgICAqIEBzZWUgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCkKLSAgICAgKiBAcmV0dXJuIGFuIG9iamVjdC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IG9uSW52b2tlQShTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKSB7Ci0gICAgICAgIG9uSW52b2tlVihzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWV0aG9kTGlzdGVuZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWV0aG9kTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZjMmIyNC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL01ldGhvZExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi0KLS8qKgotICogSW50ZXJmYWNlIHRvIGFsbG93IGEgbWV0aG9kIGludm9jYXRpb24gdG8gYmUgbGlzdGVuZWQgdXBvbi4KLSAqIDxwLz4KLSAqIFRoaXMgaXMgdXNlZCBieSB7QGxpbmsgT3ZlcnJpZGVNZXRob2R9IHRvIHJlZ2lzdGVyIGEgbGlzdGVuZXIgZm9yIG1ldGhvZHMgdGhhdAotICogaGF2ZSBiZWVuIHN0dWJiZWQgYnkgdGhlIHtAbGluayBBc21HZW5lcmF0b3J9LiBBdCBydW50aW1lIHRoZSBzdHViIHdpbGwgY2FsbCBlaXRoZXIgYQotICogZGVmYXVsdCBnbG9iYWwgbGlzdGVuZXIgb3IgYSBzcGVjaWZpYyBsaXN0ZW5lciBiYXNlZCBvbiB0aGUgbWV0aG9kIHNpZ25hdHVyZS4KLSAqLwotcHVibGljIGludGVyZmFjZSBNZXRob2RMaXN0ZW5lciB7Ci0gICAgLyoqCi0gICAgICogQSBzdHViIG1ldGhvZCBpcyBiZWluZyBpbnZva2VkLgotICAgICAqIDxwLz4KLSAgICAgKiBLbm93biBsaW1pdGF0aW9uOiBjYWxsZXIgYXJndW1lbnRzIGFyZSBub3QgYXZhaWxhYmxlLgotICAgICAqICAKLSAgICAgKiBAcGFyYW0gc2lnbmF0dXJlIFRoZSBzaWduYXR1cmUgb2YgdGhlIG1ldGhvZCBiZWluZyBpbnZva2VkLCBjb21wb3NlZCBvZiB0aGUKLSAgICAgKiAgICAgICAgICAgICAgICAgIGJpbmFyeSBjbGFzcyBuYW1lIGZvbGxvd2VkIGJ5IHRoZSBtZXRob2QgZGVzY3JpcHRvciAoYWthIGFyZ3VtZW50Ci0gICAgICogICAgICAgICAgICAgICAgICB0eXBlcykuIEV4YW1wbGU6ICJjb20vZm9vL015Q2xhc3MvSW5uZXJDbGFzcy9wcmludEludChJKVYiLgotICAgICAqIEBwYXJhbSBpc05hdGl2ZSBUcnVlIGlmIHRoZSBtZXRob2Qgd2FzIGEgbmF0aXZlIG1ldGhvZC4KLSAgICAgKiBAcGFyYW0gY2FsbGVyIFRoZSBjYWxsaW5nIG9iamVjdC4gTnVsbCBmb3Igc3RhdGljIG1ldGhvZHMsICJ0aGlzIiBmb3IgaW5zdGFuY2UgbWV0aG9kcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvbkludm9rZVYoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYW4gaW50ZWdlciBvciBzaW1pbGFyLgotICAgICAqIEBzZWUgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCkKLSAgICAgKiBAcmV0dXJuIGFuIGludGVnZXIsIG9yIGEgYm9vbGVhbiwgb3IgYSBzaG9ydCBvciBhIGJ5dGUuCi0gICAgICovCi0gICAgcHVibGljIGludCBvbkludm9rZUkoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYSBsb25nLgotICAgICAqIEBzZWUgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCkKLSAgICAgKiBAcmV0dXJuIGEgbG9uZy4KLSAgICAgKi8KLSAgICBwdWJsaWMgbG9uZyBvbkludm9rZUwoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYSBmbG9hdC4KLSAgICAgKiBAc2VlICNvbkludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpCi0gICAgICogQHJldHVybiBhIGZsb2F0LgotICAgICAqLwotICAgIHB1YmxpYyBmbG9hdCBvbkludm9rZUYoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYSBkb3VibGUuCi0gICAgICogQHNlZSAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQotICAgICAqIEByZXR1cm4gYSBkb3VibGUuCi0gICAgICovCi0gICAgcHVibGljIGRvdWJsZSBvbkludm9rZUQoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7Ci0KLSAgICAvKioKLSAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYW4gb2JqZWN0LgotICAgICAqIEBzZWUgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCkKLSAgICAgKiBAcmV0dXJuIGFuIG9iamVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IG9uSW52b2tlQShTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKTsKLX0KLSAgICAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvT3ZlcnJpZGVNZXRob2QuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvT3ZlcnJpZGVNZXRob2QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZhZmY5OS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL092ZXJyaWRlTWV0aG9kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi0vKioKLSAqIEFsbG93cyBzdHViIG1ldGhvZHMgZnJvbSBMYXlvdXRMaWIgdG8gYmUgb3ZlcnJpZGVuIGF0IHJ1bnRpbWUuCi0gKiA8cC8+Ci0gKiBJbXBsZW1lbnRhdGlvbiBub3RlOiBhbGwgdHlwZXMgcmVxdWlyZWQgYnkgdGhpcyBjbGFzcyhpbm5lci9vdXRlciBjbGFzc2VzICYgaW50ZXJmYWNlcykKLSAqIG11c3QgYmUgcmVmZXJlbmNlZCBieSB0aGUgaW5qZWN0Q2xhc3MgYXJndW1lbnQgdG8ge0BsaW5rIEFzbUdlbmVyYXRvcn0gaW4gTWFpbi5qYXZhOwotICogT3RoZXJ3aXNlIHRoZXkgd29uJ3QgYmUgYWNjZXNzaWJsZSBpbiBsYXlvdXRsaWIuamFyIGF0IHJ1bnRpbWUuCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBPdmVycmlkZU1ldGhvZCB7Ci0KLSAgICAvKiogTWFwIG9mIG1ldGhvZCBvdmVycmlkZGVuLiAqLwotICAgIHByaXZhdGUgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBNZXRob2RMaXN0ZW5lcj4gc01ldGhvZHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE1ldGhvZExpc3RlbmVyPigpOwotICAgIC8qKiBEZWZhdWx0IGxpc3RlbmVyIGZvciBhbGwgbWV0aG9kIG5vdCBsaXN0ZWQgaW4gc01ldGhvZHMuIE5vdGhpbmcgaWYgbnVsbC4gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBNZXRob2RMaXN0ZW5lciBzRGVmYXVsdExpc3RlbmVyID0gbnVsbDsKLSAgICAKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IGxpc3RlbmVyIGZvciBhbGwgbWV0aG9kcyBub3Qgc3BlY2lmaWNhbGx5IGhhbmRsZWQuCi0gICAgICogTnVsbCBtZWFucyB0byBkbyBub3RoaW5nLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXREZWZhdWx0TGlzdGVuZXIoTWV0aG9kTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgc0RlZmF1bHRMaXN0ZW5lciA9IGxpc3RlbmVyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERlZmluZXMgb3IgcmVzZXQgYSBsaXN0ZW5lciBmb3IgdGhlIGdpdmVuIG1ldGhvZCBzaWduYXR1cmUuCi0gICAgICogCi0gICAgICogQHBhcmFtIHNpZ25hdHVyZSBUaGUgc2lnbmF0dXJlIG9mIHRoZSBtZXRob2QgYmVpbmcgaW52b2tlZCwgY29tcG9zZWQgb2YgdGhlCi0gICAgICogICAgICAgICAgICAgICAgICBiaW5hcnkgY2xhc3MgbmFtZSBmb2xsb3dlZCBieSB0aGUgbWV0aG9kIGRlc2NyaXB0b3IgKGFrYSBhcmd1bWVudAotICAgICAqICAgICAgICAgICAgICAgICAgdHlwZXMpLiBFeGFtcGxlOiAiY29tL2Zvby9NeUNsYXNzL0lubmVyQ2xhc3MvcHJpbnRJbnQoSSlWIgotICAgICAqIEBwYXJhbSBsaXN0ZW5lciBUaGUgbmV3IGxpc3RlbmVyLiBSZW1vdmVzIGl0IGlmIG51bGwuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNldE1ldGhvZExpc3RlbmVyKFN0cmluZyBzaWduYXR1cmUsIE1ldGhvZExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIGlmIChsaXN0ZW5lciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzTWV0aG9kcy5yZW1vdmUoc2lnbmF0dXJlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNNZXRob2RzLnB1dChzaWduYXR1cmUsIGxpc3RlbmVyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBJbnZva2VzIHRoZSBzcGVjaWZpYyBsaXN0ZW5lciBmb3IgdGhlIGdpdmVuIHNpZ25hdHVyZSBvciB0aGUgZGVmYXVsdCBvbmUgaWYgZGVmaW5lZC4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhpcyB2ZXJzaW9uIGludm9rZXMgdGhlIG1ldGhvZCBsaXN0ZW5lciBmb3IgdGhlIHZvaWQgcmV0dXJuIHR5cGUuIAotICAgICAqIDxwLz4KLSAgICAgKiBOb3RlOiB0aGlzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IHRoZSBMYXlvdXRMaWIgQnJpZGdlLiBJdCBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQKLSAgICAgKiBieSB0aGUgc3R1YmJlZCBtZXRob2RzIGdlbmVyYXRlZCBieSB0aGUgTGF5b3V0TGliX2NyZWF0ZSB0b29sLgotICAgICAqIAotICAgICAqIEBwYXJhbSBzaWduYXR1cmUgVGhlIHNpZ25hdHVyZSBvZiB0aGUgbWV0aG9kIGJlaW5nIGludm9rZWQsIGNvbXBvc2VkIG9mIHRoZQotICAgICAqICAgICAgICAgICAgICAgICAgYmluYXJ5IGNsYXNzIG5hbWUgZm9sbG93ZWQgYnkgdGhlIG1ldGhvZCBkZXNjcmlwdG9yIChha2EgYXJndW1lbnQKLSAgICAgKiAgICAgICAgICAgICAgICAgIHR5cGVzKS4gRXhhbXBsZTogImNvbS9mb28vTXlDbGFzcy9Jbm5lckNsYXNzL3ByaW50SW50KEkpViIuCi0gICAgICogQHBhcmFtIGlzTmF0aXZlIFRydWUgaWYgdGhlIG1ldGhvZCB3YXMgYSBuYXRpdmUgbWV0aG9kLgotICAgICAqIEBwYXJhbSBjYWxsZXIgVGhlIGNhbGxpbmcgb2JqZWN0LiBOdWxsIGZvciBzdGF0aWMgbWV0aG9kcywgInRoaXMiIGZvciBpbnN0YW5jZSBtZXRob2RzLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbnZva2VWKFN0cmluZyBzaWduYXR1cmUsIGJvb2xlYW4gaXNOYXRpdmUsIE9iamVjdCBjYWxsZXIpIHsKLSAgICAgICAgTWV0aG9kTGlzdGVuZXIgaSA9IHNNZXRob2RzLmdldChzaWduYXR1cmUpOwotICAgICAgICBpZiAoaSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpLm9uSW52b2tlVihzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICB9IGVsc2UgaWYgKHNEZWZhdWx0TGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgc0RlZmF1bHRMaXN0ZW5lci5vbkludm9rZVYoc2lnbmF0dXJlLCBpc05hdGl2ZSwgY2FsbGVyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBJbnZva2VzIHRoZSBzcGVjaWZpYyBsaXN0ZW5lciBmb3IgdGhlIGludCByZXR1cm4gdHlwZS4KLSAgICAgKiBAc2VlICNpbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgaW50IGludm9rZUkoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcikgewotICAgICAgICBNZXRob2RMaXN0ZW5lciBpID0gc01ldGhvZHMuZ2V0KHNpZ25hdHVyZSk7Ci0gICAgICAgIGlmIChpICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBpLm9uSW52b2tlSShzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICB9IGVsc2UgaWYgKHNEZWZhdWx0TGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHNEZWZhdWx0TGlzdGVuZXIub25JbnZva2VJKHNpZ25hdHVyZSwgaXNOYXRpdmUsIGNhbGxlcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEludm9rZXMgdGhlIHNwZWNpZmljIGxpc3RlbmVyIGZvciB0aGUgbG9uZyByZXR1cm4gdHlwZS4KLSAgICAgKiBAc2VlICNpbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgbG9uZyBpbnZva2VMKFN0cmluZyBzaWduYXR1cmUsIGJvb2xlYW4gaXNOYXRpdmUsIE9iamVjdCBjYWxsZXIpIHsKLSAgICAgICAgTWV0aG9kTGlzdGVuZXIgaSA9IHNNZXRob2RzLmdldChzaWduYXR1cmUpOwotICAgICAgICBpZiAoaSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gaS5vbkludm9rZUwoc2lnbmF0dXJlLCBpc05hdGl2ZSwgY2FsbGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChzRGVmYXVsdExpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBzRGVmYXVsdExpc3RlbmVyLm9uSW52b2tlTChzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBJbnZva2VzIHRoZSBzcGVjaWZpYyBsaXN0ZW5lciBmb3IgdGhlIGZsb2F0IHJldHVybiB0eXBlLgotICAgICAqIEBzZWUgI2ludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmbG9hdCBpbnZva2VGKFN0cmluZyBzaWduYXR1cmUsIGJvb2xlYW4gaXNOYXRpdmUsIE9iamVjdCBjYWxsZXIpIHsKLSAgICAgICAgTWV0aG9kTGlzdGVuZXIgaSA9IHNNZXRob2RzLmdldChzaWduYXR1cmUpOwotICAgICAgICBpZiAoaSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gaS5vbkludm9rZUYoc2lnbmF0dXJlLCBpc05hdGl2ZSwgY2FsbGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChzRGVmYXVsdExpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBzRGVmYXVsdExpc3RlbmVyLm9uSW52b2tlRihzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBJbnZva2VzIHRoZSBzcGVjaWZpYyBsaXN0ZW5lciBmb3IgdGhlIGRvdWJsZSByZXR1cm4gdHlwZS4KLSAgICAgKiBAc2VlICNpbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZG91YmxlIGludm9rZUQoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcikgewotICAgICAgICBNZXRob2RMaXN0ZW5lciBpID0gc01ldGhvZHMuZ2V0KHNpZ25hdHVyZSk7Ci0gICAgICAgIGlmIChpICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBpLm9uSW52b2tlRChzaWduYXR1cmUsIGlzTmF0aXZlLCBjYWxsZXIpOwotICAgICAgICB9IGVsc2UgaWYgKHNEZWZhdWx0TGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHNEZWZhdWx0TGlzdGVuZXIub25JbnZva2VEKHNpZ25hdHVyZSwgaXNOYXRpdmUsIGNhbGxlcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEludm9rZXMgdGhlIHNwZWNpZmljIGxpc3RlbmVyIGZvciB0aGUgb2JqZWN0IHJldHVybiB0eXBlLgotICAgICAqIEBzZWUgI2ludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBPYmplY3QgaW52b2tlQShTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKSB7Ci0gICAgICAgIE1ldGhvZExpc3RlbmVyIGkgPSBzTWV0aG9kcy5nZXQoc2lnbmF0dXJlKTsKLSAgICAgICAgaWYgKGkgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGkub25JbnZva2VBKHNpZ25hdHVyZSwgaXNOYXRpdmUsIGNhbGxlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoc0RlZmF1bHRMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gc0RlZmF1bHRMaXN0ZW5lci5vbkludm9rZUEoc2lnbmF0dXJlLCBpc05hdGl2ZSwgY2FsbGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1JlZmFjdG9yQ2xhc3NBZGFwdGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1JlZmFjdG9yQ2xhc3NBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMTYxZjUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9SZWZhY3RvckNsYXNzQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotCi1wdWJsaWMgY2xhc3MgUmVmYWN0b3JDbGFzc0FkYXB0ZXIgZXh0ZW5kcyBBYnN0cmFjdENsYXNzQWRhcHRlciB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1SZWZhY3RvckNsYXNzZXM7Ci0KLSAgICBSZWZhY3RvckNsYXNzQWRhcHRlcihDbGFzc1Zpc2l0b3IgY3YsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHJlZmFjdG9yQ2xhc3NlcykgewotICAgICAgICBzdXBlcihjdik7Ci0gICAgICAgIG1SZWZhY3RvckNsYXNzZXMgPSByZWZhY3RvckNsYXNzZXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFN0cmluZyByZW5hbWVJbnRlcm5hbFR5cGUoU3RyaW5nIG9sZENsYXNzTmFtZSkgewotICAgICAgICBpZiAob2xkQ2xhc3NOYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgIFN0cmluZyBuZXdOYW1lID0gbVJlZmFjdG9yQ2xhc3Nlcy5nZXQob2xkQ2xhc3NOYW1lKTsKLSAgICAgICAgICAgIGlmIChuZXdOYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3TmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBwb3MgPSBvbGRDbGFzc05hbWUuaW5kZXhPZignJCcpOwotICAgICAgICAgICAgaWYgKHBvcyA+IDApIHsKLSAgICAgICAgICAgICAgICBuZXdOYW1lID0gbVJlZmFjdG9yQ2xhc3Nlcy5nZXQob2xkQ2xhc3NOYW1lLnN1YnN0cmluZygwLCBwb3MpKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3TmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdOYW1lICsgb2xkQ2xhc3NOYW1lLnN1YnN0cmluZyhwb3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gb2xkQ2xhc3NOYW1lOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUmVuYW1lQ2xhc3NBZGFwdGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1JlbmFtZUNsYXNzQWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjEwNzRjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUmVuYW1lQ2xhc3NBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgdmlzaXRvciByZW5hbWVzIGEgY2xhc3MgZnJvbSBhIGdpdmVuIG9sZCBuYW1lIHRvIGEgZ2l2ZW4gbmV3IG5hbWUuCi0gKiBUaGUgY2xhc3MgdmlzaXRvciB3aWxsIGFsc28gcmVuYW1lIGFsbCBpbm5lciBjbGFzc2VzIGFuZCByZWZlcmVuY2VzIGluIHRoZSBtZXRob2RzLgotICogPHAvPgotICoKLSAqIEZvciBpbm5lciBjbGFzc2VzLCB0aGlzIGhhbmRsZXMgb25seSB0aGUgY2FzZSB3aGVyZSB0aGUgb3V0ZXIgY2xhc3MgbmFtZSBjaGFuZ2VzLgotICogVGhlIGlubmVyIGNsYXNzIG5hbWUgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZS4KLSAqLwotcHVibGljIGNsYXNzIFJlbmFtZUNsYXNzQWRhcHRlciBleHRlbmRzIEFic3RyYWN0Q2xhc3NBZGFwdGVyIHsKLQotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU9sZE5hbWU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU5ld05hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbU9sZEJhc2U7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbU5ld0Jhc2U7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgY2xhc3MgdmlzaXRvciB0aGF0IHJlbmFtZXMgYSBjbGFzcyBmcm9tIGEgZ2l2ZW4gb2xkIG5hbWUgdG8gYSBnaXZlbiBuZXcgbmFtZS4KLSAgICAgKiBUaGUgY2xhc3MgdmlzaXRvciB3aWxsIGFsc28gcmVuYW1lIGFsbCBpbm5lciBjbGFzc2VzIGFuZCByZWZlcmVuY2VzIGluIHRoZSBtZXRob2RzLgotICAgICAqIFRoZSBuYW1lcyBtdXN0IGJlIGZ1bGwgcXVhbGlmaWVkIGludGVybmFsIEFTTSBuYW1lcyAoZS5nLiBjb20vYmxhaC9NeUNsYXNzJElubmVyQ2xhc3MpLgotICAgICAqLwotICAgIHB1YmxpYyBSZW5hbWVDbGFzc0FkYXB0ZXIoQ2xhc3NWaXNpdG9yIGN2LCBTdHJpbmcgb2xkTmFtZSwgU3RyaW5nIG5ld05hbWUpIHsKLSAgICAgICAgc3VwZXIoY3YpOwotICAgICAgICBtT2xkQmFzZSA9IG1PbGROYW1lID0gb2xkTmFtZTsKLSAgICAgICAgbU5ld0Jhc2UgPSBtTmV3TmFtZSA9IG5ld05hbWU7Ci0KLSAgICAgICAgaW50IHBvcyA9IG1PbGROYW1lLmluZGV4T2YoJyQnKTsKLSAgICAgICAgaWYgKHBvcyA+IDApIHsKLSAgICAgICAgICAgIG1PbGRCYXNlID0gbU9sZE5hbWUuc3Vic3RyaW5nKDAsIHBvcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcG9zID0gbU5ld05hbWUuaW5kZXhPZignJCcpOwotICAgICAgICBpZiAocG9zID4gMCkgewotICAgICAgICAgICAgbU5ld0Jhc2UgPSBtTmV3TmFtZS5zdWJzdHJpbmcoMCwgcG9zKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFzc2VydCAobU9sZEJhc2UgPT0gbnVsbCAmJiBtTmV3QmFzZSA9PSBudWxsKSB8fCAobU9sZEJhc2UgIT0gbnVsbCAmJiBtTmV3QmFzZSAhPSBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW5hbWVzIGFuIGludGVybmFsIHR5cGUgbmFtZSwgZS5nLiAiY29tLnBhY2thZ2UuTXlDbGFzcyIuCi0gICAgICogSWYgdGhlIHR5cGUgZG9lc24ndCBuZWVkIHRvIGJlIHJlbmFtZWQsIHJldHVybnMgdGhlIGlucHV0IHN0cmluZyBhcy1pcy4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhlIGludGVybmFsIHR5cGUgb2Ygc29tZSBvZiB0aGUgTWV0aG9kVmlzaXRvciB0dXJucyBvdXQgdG8gYmUgYSB0eXBlCi0gICAgICAgZGVzY3JpcHRvciBzb21ldGltZXMgc28gZGVzY3JpcHRvcnMgYXJlIHJlbmFtZWQgdG9vLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBTdHJpbmcgcmVuYW1lSW50ZXJuYWxUeXBlKFN0cmluZyB0eXBlKSB7Ci0gICAgICAgIGlmICh0eXBlID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5cGUuZXF1YWxzKG1PbGROYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIG1OZXdOYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1PbGRCYXNlICE9IG1PbGROYW1lICYmIHR5cGUuZXF1YWxzKG1PbGRCYXNlKSkgewotICAgICAgICAgICAgcmV0dXJuIG1OZXdCYXNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHBvcyA9IHR5cGUuaW5kZXhPZignJCcpOwotICAgICAgICBpZiAocG9zID09IG1PbGRCYXNlLmxlbmd0aCgpICYmIHR5cGUuc3RhcnRzV2l0aChtT2xkQmFzZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBtTmV3QmFzZSArIHR5cGUuc3Vic3RyaW5nKHBvcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHR5cGU7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1N0dWJNZXRob2RBZGFwdGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1N0dWJNZXRob2RBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZTc1MzUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9TdHViTWV0aG9kQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5Bbm5vdGF0aW9uVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5BdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTGFiZWw7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uTWV0aG9kVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5PcGNvZGVzOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLlR5cGU7Ci0KLS8qKgotICogVGhpcyBtZXRob2QgYWRhcHRlciByZXdyaXRlcyBhIG1ldGhvZCBieSBkaXNjYXJkaW5nIHRoZSBvcmlnaW5hbCBjb2RlIGFuZCBnZW5lcmF0aW5nCi0gKiBhIHN0dWIgZGVwZW5kaW5nIG9uIHRoZSByZXR1cm4gdHlwZS4gT3JpZ2luYWwgYW5ub3RhdGlvbnMgYXJlIHBhc3NlZCBhbG9uZyB1bmNoYW5nZWQuCi0gKi8KLWNsYXNzIFN0dWJNZXRob2RBZGFwdGVyIGV4dGVuZHMgTWV0aG9kVmlzaXRvciB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ09OU1RSVUNUT1IgPSAiPGluaXQ+IjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ0xBU1NfSU5JVCA9ICI8Y2xpbml0PiI7Ci0KLSAgICAvKiogVGhlIHBhcmVudCBtZXRob2Qgd3JpdGVyICovCi0gICAgcHJpdmF0ZSBNZXRob2RWaXNpdG9yIG1QYXJlbnRWaXNpdG9yOwotICAgIC8qKiBUaGUgbWV0aG9kIHJldHVybiB0eXBlLiBDYW4gYmUgbnVsbC4gKi8KLSAgICBwcml2YXRlIFR5cGUgbVJldHVyblR5cGU7Ci0gICAgLyoqIE1lc3NhZ2UgdG8gYmUgcHJpbnRlZCBieSBzdHViIG1ldGhvZHMuICovCi0gICAgcHJpdmF0ZSBTdHJpbmcgbUludm9rZVNpZ25hdHVyZTsKLSAgICAvKiogRmxhZyB0byBvdXRwdXQgdGhlIGZpcnN0IGxpbmUgbnVtYmVyLiAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtT3V0cHV0Rmlyc3RMaW5lTnVtYmVyID0gdHJ1ZTsKLSAgICAvKiogRmxhZyB0aGF0IGlzIHRydWUgd2hlbiBpbXBsZW1lbnRpbmcgYSBjb25zdHJ1Y3RvciwgdG8gYWNjZXB0IGFsbCBvcmlnaW5hbAotICAgICAqICBjb2RlIGNhbGxpbmcgdGhlIG9yaWdpbmFsIHN1cGVyIGNvbnN0cnVjdG9yLiAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNJbml0TWV0aG9kID0gZmFsc2U7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbU1lc3NhZ2VHZW5lcmF0ZWQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1Jc1N0YXRpYzsKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbUlzTmF0aXZlOwotCi0gICAgcHVibGljIFN0dWJNZXRob2RBZGFwdGVyKE1ldGhvZFZpc2l0b3IgbXYsIFN0cmluZyBtZXRob2ROYW1lLCBUeXBlIHJldHVyblR5cGUsCi0gICAgICAgICAgICBTdHJpbmcgaW52b2tlU2lnbmF0dXJlLCBib29sZWFuIGlzU3RhdGljLCBib29sZWFuIGlzTmF0aXZlKSB7Ci0gICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7Ci0gICAgICAgIG1QYXJlbnRWaXNpdG9yID0gbXY7Ci0gICAgICAgIG1SZXR1cm5UeXBlID0gcmV0dXJuVHlwZTsKLSAgICAgICAgbUludm9rZVNpZ25hdHVyZSA9IGludm9rZVNpZ25hdHVyZTsKLSAgICAgICAgbUlzU3RhdGljID0gaXNTdGF0aWM7Ci0gICAgICAgIG1Jc05hdGl2ZSA9IGlzTmF0aXZlOwotCi0gICAgICAgIGlmIChDT05TVFJVQ1RPUi5lcXVhbHMobWV0aG9kTmFtZSkgfHwgQ0xBU1NfSU5JVC5lcXVhbHMobWV0aG9kTmFtZSkpIHsKLSAgICAgICAgICAgIG1Jc0luaXRNZXRob2QgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGdlbmVyYXRlSW52b2tlKCkgewotICAgICAgICAvKiBHZW5lcmF0ZXMgdGhlIGNvZGU6Ci0gICAgICAgICAqICBPdmVycmlkZU1ldGhvZC5pbnZva2UoInNpZ25hdHVyZSIsIG1Jc05hdGl2ZSA/IHRydWUgOiBmYWxzZSwgbnVsbCBvciB0aGlzKTsKLSAgICAgICAgICovCi0gICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0TGRjSW5zbihtSW52b2tlU2lnbmF0dXJlKTsKLSAgICAgICAgLy8gcHVzaCB0cnVlIG9yIGZhbHNlCi0gICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihtSXNOYXRpdmUgPyBPcGNvZGVzLklDT05TVF8xIDogT3Bjb2Rlcy5JQ09OU1RfMCk7Ci0gICAgICAgIC8vIHB1c2ggbnVsbCBvciB0aGlzCi0gICAgICAgIGlmIChtSXNTdGF0aWMpIHsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLkFDT05TVF9OVUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0VmFySW5zbihPcGNvZGVzLkFMT0FELCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzb3J0ID0gbVJldHVyblR5cGUgIT0gbnVsbCA/IG1SZXR1cm5UeXBlLmdldFNvcnQoKSA6IFR5cGUuVk9JRDsKLSAgICAgICAgc3dpdGNoKHNvcnQpIHsKLSAgICAgICAgY2FzZSBUeXBlLlZPSUQ6Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdE1ldGhvZEluc24oT3Bjb2Rlcy5JTlZPS0VTVEFUSUMsCi0gICAgICAgICAgICAgICAgICAgICJjb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL092ZXJyaWRlTWV0aG9kIiwKLSAgICAgICAgICAgICAgICAgICAgImludm9rZVYiLAotICAgICAgICAgICAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO1pMamF2YS9sYW5nL09iamVjdDspViIpOwotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuUkVUVVJOKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGUuQk9PTEVBTjoKLSAgICAgICAgY2FzZSBUeXBlLkNIQVI6Ci0gICAgICAgIGNhc2UgVHlwZS5CWVRFOgotICAgICAgICBjYXNlIFR5cGUuU0hPUlQ6Ci0gICAgICAgIGNhc2UgVHlwZS5JTlQ6Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdE1ldGhvZEluc24oT3Bjb2Rlcy5JTlZPS0VTVEFUSUMsCi0gICAgICAgICAgICAgICAgICAgICJjb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL092ZXJyaWRlTWV0aG9kIiwKLSAgICAgICAgICAgICAgICAgICAgImludm9rZUkiLAotICAgICAgICAgICAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO1pMamF2YS9sYW5nL09iamVjdDspSSIpOwotICAgICAgICAgICAgc3dpdGNoKHNvcnQpIHsKLSAgICAgICAgICAgIGNhc2UgVHlwZS5CT09MRUFOOgotICAgICAgICAgICAgICAgIExhYmVsIGwxID0gbmV3IExhYmVsKCk7Ci0gICAgICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRKdW1wSW5zbihPcGNvZGVzLklGRVEsIGwxKTsKLSAgICAgICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdEluc24oT3Bjb2Rlcy5JQ09OU1RfMSk7Ci0gICAgICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuSVJFVFVSTik7Ci0gICAgICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRMYWJlbChsMSk7Ci0gICAgICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuSUNPTlNUXzApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlLkNIQVI6Ci0gICAgICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuSTJDKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZS5CWVRFOgotICAgICAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLkkyQik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGUuU0hPUlQ6Ci0gICAgICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuSTJTKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLklSRVRVUk4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZS5MT05HOgotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNZXRob2RJbnNuKE9wY29kZXMuSU5WT0tFU1RBVElDLAotICAgICAgICAgICAgICAgICAgICAiY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9PdmVycmlkZU1ldGhvZCIsCi0gICAgICAgICAgICAgICAgICAgICJpbnZva2VMIiwKLSAgICAgICAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztaTGphdmEvbGFuZy9PYmplY3Q7KUoiKTsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLkxSRVRVUk4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZS5GTE9BVDoKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0TWV0aG9kSW5zbihPcGNvZGVzLklOVk9LRVNUQVRJQywKLSAgICAgICAgICAgICAgICAgICAgImNvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvT3ZlcnJpZGVNZXRob2QiLAotICAgICAgICAgICAgICAgICAgICAiaW52b2tlRiIsCi0gICAgICAgICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WkxqYXZhL2xhbmcvT2JqZWN0OylGIik7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdEluc24oT3Bjb2Rlcy5GUkVUVVJOKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGUuRE9VQkxFOgotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNZXRob2RJbnNuKE9wY29kZXMuSU5WT0tFU1RBVElDLAotICAgICAgICAgICAgICAgICAgICAiY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9PdmVycmlkZU1ldGhvZCIsCi0gICAgICAgICAgICAgICAgICAgICJpbnZva2VEIiwKLSAgICAgICAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztaTGphdmEvbGFuZy9PYmplY3Q7KUQiKTsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLkRSRVRVUk4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHlwZS5BUlJBWToKLSAgICAgICAgY2FzZSBUeXBlLk9CSkVDVDoKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0TWV0aG9kSW5zbihPcGNvZGVzLklOVk9LRVNUQVRJQywKLSAgICAgICAgICAgICAgICAgICAgImNvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvT3ZlcnJpZGVNZXRob2QiLAotICAgICAgICAgICAgICAgICAgICAiaW52b2tlQSIsCi0gICAgICAgICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WkxqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiKTsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0VHlwZUluc24oT3Bjb2Rlcy5DSEVDS0NBU1QsIG1SZXR1cm5UeXBlLmdldEludGVybmFsTmFtZSgpKTsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLkFSRVRVUk4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBnZW5lcmF0ZVBvcCgpIHsKLSAgICAgICAgLyogUG9wcyB0aGUgc3RhY2ssIGRlcGVuZGluZyBvbiB0aGUgcmV0dXJuIHR5cGUuCi0gICAgICAgICAqLwotICAgICAgICBzd2l0Y2gobVJldHVyblR5cGUgIT0gbnVsbCA/IG1SZXR1cm5UeXBlLmdldFNvcnQoKSA6IFR5cGUuVk9JRCkgewotICAgICAgICBjYXNlIFR5cGUuVk9JRDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGUuQk9PTEVBTjoKLSAgICAgICAgY2FzZSBUeXBlLkNIQVI6Ci0gICAgICAgIGNhc2UgVHlwZS5CWVRFOgotICAgICAgICBjYXNlIFR5cGUuU0hPUlQ6Ci0gICAgICAgIGNhc2UgVHlwZS5JTlQ6Ci0gICAgICAgIGNhc2UgVHlwZS5GTE9BVDoKLSAgICAgICAgY2FzZSBUeXBlLkFSUkFZOgotICAgICAgICBjYXNlIFR5cGUuT0JKRUNUOgotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuUE9QKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5cGUuTE9ORzoKLSAgICAgICAgY2FzZSBUeXBlLkRPVUJMRToKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLlBPUDIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBQYXNzIGRvd24gdG8gdmlzaXRvciB3cml0ZXIuIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIGVpdGhlciBkbyBub3RoaW5nLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0Q29kZSgpIHsKLSAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRDb2RlKCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiB2aXNpdE1heHMgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHZpc2l0RW5kIGlmIHRoZXJlIHdhcyBhbnkgY29kZSB0byByZXdyaXRlLgotICAgICAqIEZvciBub24tY29uc3RydWN0b3IsIGdlbmVyYXRlIHRoZSBtZXNzYWdpbmcgY29kZSBhbmQgdGhlIHJldHVybiBzdGF0ZW1lbnQKLSAgICAgKiBpZiBpdCBoYXNuJ3QgYmVlbiBkb25lIGJlZm9yZS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdE1heHMoaW50IG1heFN0YWNrLCBpbnQgbWF4TG9jYWxzKSB7Ci0gICAgICAgIGlmICghbUlzSW5pdE1ldGhvZCAmJiAhbU1lc3NhZ2VHZW5lcmF0ZWQpIHsKLSAgICAgICAgICAgIGdlbmVyYXRlSW52b2tlKCk7Ci0gICAgICAgICAgICBtTWVzc2FnZUdlbmVyYXRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNYXhzKG1heFN0YWNrLCBtYXhMb2NhbHMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVuZCBvZiB2aXNpdGluZy4KLSAgICAgKiBGb3Igbm9uLWNvbnN0cnVjdG9yLCBnZW5lcmF0ZSB0aGUgbWVzc2FnaW5nIGNvZGUgYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50Ci0gICAgICogaWYgaXQgaGFzbid0IGJlZW4gZG9uZSBiZWZvcmUuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRFbmQoKSB7Ci0gICAgICAgIGlmICghbUlzSW5pdE1ldGhvZCAmJiAhbU1lc3NhZ2VHZW5lcmF0ZWQpIHsKLSAgICAgICAgICAgIGdlbmVyYXRlSW52b2tlKCk7Ci0gICAgICAgICAgICBtTWVzc2FnZUdlbmVyYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdE1heHMoMSwgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRFbmQoKTsKLSAgICB9Ci0KLSAgICAvKiBXcml0ZXMgYWxsIGFubm90YXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgbWV0aG9kLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBBbm5vdGF0aW9uVmlzaXRvciB2aXNpdEFubm90YXRpb24oU3RyaW5nIGRlc2MsIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICByZXR1cm4gbVBhcmVudFZpc2l0b3IudmlzaXRBbm5vdGF0aW9uKGRlc2MsIHZpc2libGUpOwotICAgIH0KLQotICAgIC8qIFdyaXRlcyBhbGwgYW5ub3RhdGlvbiBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBvcmlnaW5hbCBtZXRob2QuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0QW5ub3RhdGlvbkRlZmF1bHQoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyZW50VmlzaXRvci52aXNpdEFubm90YXRpb25EZWZhdWx0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEFubm90YXRpb25WaXNpdG9yIHZpc2l0UGFyYW1ldGVyQW5ub3RhdGlvbihpbnQgcGFyYW1ldGVyLCBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgIGJvb2xlYW4gdmlzaWJsZSkgewotICAgICAgICByZXR1cm4gbVBhcmVudFZpc2l0b3IudmlzaXRQYXJhbWV0ZXJBbm5vdGF0aW9uKHBhcmFtZXRlciwgZGVzYywgdmlzaWJsZSk7Ci0gICAgfQotCi0gICAgLyogV3JpdGVzIGFsbCBhdHRyaWJ1dGVzIGZyb20gdGhlIG9yaWdpbmFsIG1ldGhvZC4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdEF0dHJpYnV0ZShBdHRyaWJ1dGUgYXR0cikgewotICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdEF0dHJpYnV0ZShhdHRyKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIE9ubHkgd3JpdGVzIHRoZSBmaXJzdCBsaW5lIG51bWJlciBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCBjb2RlIHNvIHRoYXQgc291cmNlCi0gICAgICogdmlld2VycyBjYW4gZGlyZWN0IHRvIHRoZSBjb3JyZWN0IG1ldGhvZCwgZXZlbiBpZiB0aGUgY29udGVudCBkb2Vzbid0IG1hdGNoLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0TGluZU51bWJlcihpbnQgbGluZSwgTGFiZWwgc3RhcnQpIHsKLSAgICAgICAgaWYgKG1Jc0luaXRNZXRob2QgfHwgbU91dHB1dEZpcnN0TGluZU51bWJlcikgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRMaW5lTnVtYmVyKGxpbmUsIHN0YXJ0KTsKLSAgICAgICAgICAgIG1PdXRwdXRGaXJzdExpbmVOdW1iZXIgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvciBub24tY29uc3RydWN0b3IsIHJld3JpdGUgZXhpc3RpbmcgInJldHVybiIgaW5zdHJ1Y3Rpb25zIHRvIHdyaXRlIHRoZSBtZXNzYWdlLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0SW5zbihpbnQgb3Bjb2RlKSB7Ci0gICAgICAgIGlmIChtSXNJbml0TWV0aG9kKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgewotICAgICAgICAgICAgY2FzZSBPcGNvZGVzLlJFVFVSTjoKLSAgICAgICAgICAgIGNhc2UgT3Bjb2Rlcy5BUkVUVVJOOgotICAgICAgICAgICAgY2FzZSBPcGNvZGVzLkRSRVRVUk46Ci0gICAgICAgICAgICBjYXNlIE9wY29kZXMuRlJFVFVSTjoKLSAgICAgICAgICAgIGNhc2UgT3Bjb2Rlcy5JUkVUVVJOOgotICAgICAgICAgICAgY2FzZSBPcGNvZGVzLkxSRVRVUk46Ci0gICAgICAgICAgICAgICAgLy8gUG9wIHRoZSBsYXN0IHdvcmQgZnJvbSB0aGUgc3RhY2sgc2luY2UgaW52b2tlIHdpbGwgZ2VuZXJhdGUgaXRzIG93biByZXR1cm4uCi0gICAgICAgICAgICAgICAgZ2VuZXJhdGVQb3AoKTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZUludm9rZSgpOwotICAgICAgICAgICAgICAgIG1NZXNzYWdlR2VuZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAvLyRGQUxMLVRIUk9VR0gkCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihvcGNvZGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRMYWJlbChMYWJlbCBsYWJlbCkgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRMYWJlbChsYWJlbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdFRyeUNhdGNoQmxvY2soTGFiZWwgc3RhcnQsIExhYmVsIGVuZCwgTGFiZWwgaGFuZGxlciwgU3RyaW5nIHR5cGUpIHsKLSAgICAgICAgaWYgKG1Jc0luaXRNZXRob2QpIHsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0VHJ5Q2F0Y2hCbG9jayhzdGFydCwgZW5kLCBoYW5kbGVyLCB0eXBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNZXRob2RJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRGaWVsZEluc24oaW50IG9wY29kZSwgU3RyaW5nIG93bmVyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MpIHsKLSAgICAgICAgaWYgKG1Jc0luaXRNZXRob2QpIHsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0RmllbGRJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRGcmFtZShpbnQgdHlwZSwgaW50IG5Mb2NhbCwgT2JqZWN0W10gbG9jYWwsIGludCBuU3RhY2ssIE9iamVjdFtdIHN0YWNrKSB7Ci0gICAgICAgIGlmIChtSXNJbml0TWV0aG9kKSB7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdEZyYW1lKHR5cGUsIG5Mb2NhbCwgbG9jYWwsIG5TdGFjaywgc3RhY2spOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRJaW5jSW5zbihpbnQgdmFyLCBpbnQgaW5jcmVtZW50KSB7Ci0gICAgICAgIGlmIChtSXNJbml0TWV0aG9kKSB7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdElpbmNJbnNuKHZhciwgaW5jcmVtZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0SW50SW5zbihpbnQgb3Bjb2RlLCBpbnQgb3BlcmFuZCkgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnRJbnNuKG9wY29kZSwgb3BlcmFuZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdEp1bXBJbnNuKGludCBvcGNvZGUsIExhYmVsIGxhYmVsKSB7Ci0gICAgICAgIGlmIChtSXNJbml0TWV0aG9kKSB7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdEp1bXBJbnNuKG9wY29kZSwgbGFiZWwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRMZGNJbnNuKE9iamVjdCBjc3QpIHsKLSAgICAgICAgaWYgKG1Jc0luaXRNZXRob2QpIHsKLSAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0TGRjSW5zbihjc3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRMb2NhbFZhcmlhYmxlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYywgU3RyaW5nIHNpZ25hdHVyZSwKLSAgICAgICAgICAgIExhYmVsIHN0YXJ0LCBMYWJlbCBlbmQsIGludCBpbmRleCkgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRMb2NhbFZhcmlhYmxlKG5hbWUsIGRlc2MsIHNpZ25hdHVyZSwgc3RhcnQsIGVuZCwgaW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRMb29rdXBTd2l0Y2hJbnNuKExhYmVsIGRmbHQsIGludFtdIGtleXMsIExhYmVsW10gbGFiZWxzKSB7Ci0gICAgICAgIGlmIChtSXNJbml0TWV0aG9kKSB7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdExvb2t1cFN3aXRjaEluc24oZGZsdCwga2V5cywgbGFiZWxzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0TXVsdGlBTmV3QXJyYXlJbnNuKFN0cmluZyBkZXNjLCBpbnQgZGltcykgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNdWx0aUFOZXdBcnJheUluc24oZGVzYywgZGltcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdFRhYmxlU3dpdGNoSW5zbihpbnQgbWluLCBpbnQgbWF4LCBMYWJlbCBkZmx0LCBMYWJlbFtdIGxhYmVscykgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRUYWJsZVN3aXRjaEluc24obWluLCBtYXgsIGRmbHQsIGxhYmVscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdFR5cGVJbnNuKGludCBvcGNvZGUsIFN0cmluZyB0eXBlKSB7Ci0gICAgICAgIGlmIChtSXNJbml0TWV0aG9kKSB7Ci0gICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdFR5cGVJbnNuKG9wY29kZSwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB2aXNpdFZhckluc24oaW50IG9wY29kZSwgaW50IHZhcikgewotICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRWYXJJbnNuKG9wY29kZSwgdmFyKTsKLSAgICAgICAgfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9UcmFuc2Zvcm1DbGFzc0FkYXB0ZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvVHJhbnNmb3JtQ2xhc3NBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NWExODMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9UcmFuc2Zvcm1DbGFzc0FkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkZpZWxkVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5NZXRob2RWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk9wY29kZXM7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uVHlwZTsKLQotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLS8qKgotICogQ2xhc3MgYWRhcHRlciB0aGF0IGNhbiBzdHViIHNvbWUgb3IgYWxsIG9mIHRoZSBtZXRob2RzIG9mIHRoZSBjbGFzcy4KLSAqLwotY2xhc3MgVHJhbnNmb3JtQ2xhc3NBZGFwdGVyIGV4dGVuZHMgQ2xhc3NWaXNpdG9yIHsKLQotICAgIC8qKiBUcnVlIGlmIGFsbCBtZXRob2RzIHNob3VsZCBiZSBzdHViYmVkLCBmYWxzZSBpZiBvbmx5IG5hdGl2ZSBvbmVzIG11c3QgYmUgc3R1YmJlZC4gKi8KLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVN0dWJBbGw7Ci0gICAgLyoqIFRydWUgaWYgdGhlIGNsYXNzIGlzIGFuIGludGVyZmFjZS4gKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbUlzSW50ZXJmYWNlOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1DbGFzc05hbWU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMb2cgbUxvZzsKLSAgICBwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IG1TdHViTWV0aG9kczsKLSAgICBwcml2YXRlIFNldDxTdHJpbmc+IG1EZWxldGVSZXR1cm5zOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjbGFzcyBhZGFwdGVyIHRoYXQgd2lsbCBzdHViIHNvbWUgb3IgYWxsIG1ldGhvZHMuCi0gICAgICogQHBhcmFtIGxvZ2dlcgotICAgICAqIEBwYXJhbSBzdHViTWV0aG9kcyAgbGlzdCBvZiBtZXRob2Qgc2lnbmF0dXJlcyB0byBhbHdheXMgc3R1YiBvdXQKLSAgICAgKiBAcGFyYW0gZGVsZXRlUmV0dXJucyBsaXN0IG9mIHR5cGVzIHRoYXQgdHJpZ2dlciB0aGUgZGVsZXRpb24gb2YgbWV0aG9kcyByZXR1cm5pbmcgdGhlbS4KLSAgICAgKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBiZWluZyBtb2RpZmllZAotICAgICAqIEBwYXJhbSBjdiBUaGUgcGFyZW50IGNsYXNzIHdyaXRlciB2aXNpdG9yCi0gICAgICogQHBhcmFtIHN0dWJOYXRpdmVzT25seSBUcnVlIGlmIG9ubHkgbmF0aXZlIG1ldGhvZHMgc2hvdWxkIGJlIHN0dWJiZWQuIEZhbHNlIGlmIGFsbAotICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyBzaG91bGQgYmUgc3R1YmJlZC4KLSAgICAgKiBAcGFyYW0gaGFzTmF0aXZlIFRydWUgaWYgdGhlIG1ldGhvZCBoYXMgbmF0aXZlcywgaW4gd2hpY2ggY2FzZSBpdHMgYWNjZXNzIHNob3VsZCBiZQotICAgICAqICAgICAgICAgICAgICAgICAgY2hhbmdlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgVHJhbnNmb3JtQ2xhc3NBZGFwdGVyKExvZyBsb2dnZXIsIFNldDxTdHJpbmc+IHN0dWJNZXRob2RzLAotICAgICAgICAgICAgU2V0PFN0cmluZz4gZGVsZXRlUmV0dXJucywgU3RyaW5nIGNsYXNzTmFtZSwgQ2xhc3NWaXNpdG9yIGN2LAotICAgICAgICAgICAgYm9vbGVhbiBzdHViTmF0aXZlc09ubHksIGJvb2xlYW4gaGFzTmF0aXZlKSB7Ci0gICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCwgY3YpOwotICAgICAgICBtTG9nID0gbG9nZ2VyOwotICAgICAgICBtU3R1Yk1ldGhvZHMgPSBzdHViTWV0aG9kczsKLSAgICAgICAgbUNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgICAgICAgbVN0dWJBbGwgPSAhc3R1Yk5hdGl2ZXNPbmx5OwotICAgICAgICBtSXNJbnRlcmZhY2UgPSBmYWxzZTsKLSAgICAgICAgbURlbGV0ZVJldHVybnMgPSBkZWxldGVSZXR1cm5zOwotICAgIH0KLQotICAgIC8qIFZpc2l0cyB0aGUgY2xhc3MgaGVhZGVyLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0KGludCB2ZXJzaW9uLCBpbnQgYWNjZXNzLCBTdHJpbmcgbmFtZSwKLSAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmUsIFN0cmluZyBzdXBlck5hbWUsIFN0cmluZ1tdIGludGVyZmFjZXMpIHsKLQotICAgICAgICAvLyBUaGlzIGNsYXNzIG1pZ2h0IGJlIGJlaW5nIHJlbmFtZWQuCi0gICAgICAgIG5hbWUgPSBtQ2xhc3NOYW1lOwotCi0gICAgICAgIC8vIHJlbW92ZSBwcm90ZWN0ZWQgb3IgcHJpdmF0ZSBhbmQgc2V0IGFzIHB1YmxpYwotICAgICAgICBpZiAoTWFpbi5zT3B0aW9ucy5nZW5lcmF0ZVB1YmxpY0FjY2VzcykgewotICAgICAgICAgICAgYWNjZXNzID0gYWNjZXNzICYgfihPcGNvZGVzLkFDQ19QUklWQVRFIHwgT3Bjb2Rlcy5BQ0NfUFJPVEVDVEVEKTsKLSAgICAgICAgICAgIGFjY2VzcyB8PSBPcGNvZGVzLkFDQ19QVUJMSUM7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gcmVtb3ZlIGZpbmFsCi0gICAgICAgIGFjY2VzcyA9IGFjY2VzcyAmIH5PcGNvZGVzLkFDQ19GSU5BTDsKLSAgICAgICAgLy8gbm90ZTogbGVhdmUgYWJzdHJhY3QgY2xhc3NlcyBhcyBzdWNoCi0gICAgICAgIC8vIGRvbid0IHRyeSB0byBpbXBsZW1lbnQgc3R1YiBmb3IgaW50ZXJmYWNlcwotCi0gICAgICAgIG1Jc0ludGVyZmFjZSA9ICgoYWNjZXNzICYgT3Bjb2Rlcy5BQ0NfSU5URVJGQUNFKSAhPSAwKTsKLSAgICAgICAgc3VwZXIudmlzaXQodmVyc2lvbiwgYWNjZXNzLCBuYW1lLCBzaWduYXR1cmUsIHN1cGVyTmFtZSwgaW50ZXJmYWNlcyk7Ci0gICAgfQotCi0gICAgLyogVmlzaXRzIHRoZSBoZWFkZXIgb2YgYW4gaW5uZXIgY2xhc3MuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRJbm5lckNsYXNzKFN0cmluZyBuYW1lLCBTdHJpbmcgb3V0ZXJOYW1lLCBTdHJpbmcgaW5uZXJOYW1lLCBpbnQgYWNjZXNzKSB7Ci0gICAgICAgIC8vIHJlbW92ZSBwcm90ZWN0ZWQgb3IgcHJpdmF0ZSBhbmQgc2V0IGFzIHB1YmxpYwotICAgICAgICBpZiAoTWFpbi5zT3B0aW9ucy5nZW5lcmF0ZVB1YmxpY0FjY2VzcykgewotICAgICAgICAgICAgYWNjZXNzID0gYWNjZXNzICYgfihPcGNvZGVzLkFDQ19QUklWQVRFIHwgT3Bjb2Rlcy5BQ0NfUFJPVEVDVEVEKTsKLSAgICAgICAgICAgIGFjY2VzcyB8PSBPcGNvZGVzLkFDQ19QVUJMSUM7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gcmVtb3ZlIGZpbmFsCi0gICAgICAgIGFjY2VzcyA9IGFjY2VzcyAmIH5PcGNvZGVzLkFDQ19GSU5BTDsKLSAgICAgICAgLy8gbm90ZTogbGVhdmUgYWJzdHJhY3QgY2xhc3NlcyBhcyBzdWNoCi0gICAgICAgIC8vIGRvbid0IHRyeSB0byBpbXBsZW1lbnQgc3R1YiBmb3IgaW50ZXJmYWNlcwotCi0gICAgICAgIHN1cGVyLnZpc2l0SW5uZXJDbGFzcyhuYW1lLCBvdXRlck5hbWUsIGlubmVyTmFtZSwgYWNjZXNzKTsKLSAgICB9Ci0KLSAgICAvKiBWaXNpdHMgYSBtZXRob2QuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1ldGhvZFZpc2l0b3IgdmlzaXRNZXRob2QoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSwgU3RyaW5nW10gZXhjZXB0aW9ucykgewotCi0gICAgICAgIGlmIChtRGVsZXRlUmV0dXJucyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBUeXBlIHQgPSBUeXBlLmdldFJldHVyblR5cGUoZGVzYyk7Ci0gICAgICAgICAgICBpZiAodC5nZXRTb3J0KCkgPT0gVHlwZS5PQkpFQ1QpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcmV0dXJuVHlwZSA9IHQuZ2V0SW50ZXJuYWxOYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHVyblR5cGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobURlbGV0ZVJldHVybnMuY29udGFpbnMocmV0dXJuVHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIG1ldGhvZFNpZ25hdHVyZSA9IG1DbGFzc05hbWUucmVwbGFjZSgnLycsICcuJykgKyAiIyIgKyBuYW1lOwotCi0gICAgICAgIC8vIGNoYW5nZSBhY2Nlc3MgdG8gcHVibGljCi0gICAgICAgIGlmIChNYWluLnNPcHRpb25zLmdlbmVyYXRlUHVibGljQWNjZXNzKSB7Ci0gICAgICAgICAgICBhY2Nlc3MgJj0gfihPcGNvZGVzLkFDQ19QUk9URUNURUQgfCBPcGNvZGVzLkFDQ19QUklWQVRFKTsKLSAgICAgICAgICAgIGFjY2VzcyB8PSBPcGNvZGVzLkFDQ19QVUJMSUM7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyByZW1vdmUgZmluYWwKLSAgICAgICAgYWNjZXNzID0gYWNjZXNzICYgfk9wY29kZXMuQUNDX0ZJTkFMOwotCi0gICAgICAgIC8vIHN0dWIgdGhpcyBtZXRob2QgaWYgdGhleSBhcmUgYWxsIHRvIGJlIHN0dWJiZWQgb3IgaWYgaXQgaXMgYSBuYXRpdmUgbWV0aG9kCi0gICAgICAgIC8vIGFuZCBkb24ndCB0cnkgdG8gc3R1YiBpbnRlcmZhY2VzIG5vciBhYnN0cmFjdCBub24tbmF0aXZlIG1ldGhvZHMuCi0gICAgICAgIGlmICghbUlzSW50ZXJmYWNlICYmCi0gICAgICAgICAgICAoKGFjY2VzcyAmIChPcGNvZGVzLkFDQ19BQlNUUkFDVCB8IE9wY29kZXMuQUNDX05BVElWRSkpICE9IE9wY29kZXMuQUNDX0FCU1RSQUNUKSAmJgotICAgICAgICAgICAgKG1TdHViQWxsIHx8Ci0gICAgICAgICAgICAgKGFjY2VzcyAmIE9wY29kZXMuQUNDX05BVElWRSkgIT0gMCkgfHwKLSAgICAgICAgICAgICBtU3R1Yk1ldGhvZHMuY29udGFpbnMobWV0aG9kU2lnbmF0dXJlKSkgewotCi0gICAgICAgICAgICBib29sZWFuIGlzU3RhdGljID0gKGFjY2VzcyAmIE9wY29kZXMuQUNDX1NUQVRJQykgIT0gMDsKLSAgICAgICAgICAgIGJvb2xlYW4gaXNOYXRpdmUgPSAoYWNjZXNzICYgT3Bjb2Rlcy5BQ0NfTkFUSVZFKSAhPSAwOwotCi0gICAgICAgICAgICAvLyByZW1vdmUgYWJzdHJhY3QsIGZpbmFsIGFuZCBuYXRpdmUKLSAgICAgICAgICAgIGFjY2VzcyA9IGFjY2VzcyAmIH4oT3Bjb2Rlcy5BQ0NfQUJTVFJBQ1QgfCBPcGNvZGVzLkFDQ19GSU5BTCB8IE9wY29kZXMuQUNDX05BVElWRSk7Ci0KLSAgICAgICAgICAgIFN0cmluZyBpbnZva2VTaWduYXR1cmUgPSBtZXRob2RTaWduYXR1cmUgKyBkZXNjOwotICAgICAgICAgICAgbUxvZy5kZWJ1ZygiICBTdHViOiAlcyAoJXMpIiwgaW52b2tlU2lnbmF0dXJlLCBpc05hdGl2ZSA/ICJuYXRpdmUiIDogIiIpOwotCi0gICAgICAgICAgICBNZXRob2RWaXNpdG9yIG13ID0gc3VwZXIudmlzaXRNZXRob2QoYWNjZXNzLCBuYW1lLCBkZXNjLCBzaWduYXR1cmUsIGV4Y2VwdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHViTWV0aG9kQWRhcHRlcihtdywgbmFtZSwgcmV0dXJuVHlwZShkZXNjKSwgaW52b2tlU2lnbmF0dXJlLAotICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYywgaXNOYXRpdmUpOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtTG9nLmRlYnVnKCIgIEtlZXA6ICVzICVzIiwgbmFtZSwgZGVzYyk7Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIudmlzaXRNZXRob2QoYWNjZXNzLCBuYW1lLCBkZXNjLCBzaWduYXR1cmUsIGV4Y2VwdGlvbnMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogVmlzaXRzIGEgZmllbGQuIE1ha2VzIGl0IHB1YmxpYy4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRmllbGRWaXNpdG9yIHZpc2l0RmllbGQoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLCBTdHJpbmcgc2lnbmF0dXJlLAotICAgICAgICAgICAgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIC8vIGNoYW5nZSBhY2Nlc3MgdG8gcHVibGljCi0gICAgICAgIGlmIChNYWluLnNPcHRpb25zLmdlbmVyYXRlUHVibGljQWNjZXNzKSB7Ci0gICAgICAgICAgICBhY2Nlc3MgJj0gfihPcGNvZGVzLkFDQ19QUk9URUNURUQgfCBPcGNvZGVzLkFDQ19QUklWQVRFKTsKLSAgICAgICAgICAgIGFjY2VzcyB8PSBPcGNvZGVzLkFDQ19QVUJMSUM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0RmllbGQoYWNjZXNzLCBuYW1lLCBkZXNjLCBzaWduYXR1cmUsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFeHRyYWN0cyB0aGUgcmV0dXJuIHtAbGluayBUeXBlfSBvZiB0aGlzIGRlc2NyaXB0b3IuCi0gICAgICovCi0gICAgVHlwZSByZXR1cm5UeXBlKFN0cmluZyBkZXNjKSB7Ci0gICAgICAgIGlmIChkZXNjICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFR5cGUuZ2V0UmV0dXJuVHlwZShkZXNjKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gaWdub3JlLCBub3QgYSB2YWxpZCB0eXBlLgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL0F1dG9DbG9zZWFibGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL0F1dG9DbG9zZWFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQyYzEyOC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvamF2YS9BdXRvQ2xvc2VhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuamF2YTsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBzYW1lIGludGVyZmFjZSBhcyB0aGUgamF2YS5sYW5nLkF1dG9DbG9zZWFibGUgd2hpY2ggd2FzIGFkZGVkIGluCi0gKiBKYXZhIDcuIFRoaXMgaGFjayBtYWtlcyBpdCBwb3NzaWJsZSB0byBydW4gdGhlIEFuZHJvaWQgY29kZSB3aGljaCB1c2VzIEphdmEgNwotICogZmVhdHVyZXMgKEFQSSAxOCBhbmQgYmV5b25kKSB0byBydW4gb24gSmF2YSA2LgotICogPHAvPgotICogRXh0cmFjdGVkIGZyb20gQVBJIGxldmVsIDE4LCBmaWxlOgotICogcGxhdGZvcm0vbGliY29yZS9sdW5pL3NyYy9tYWluL2phdmEvamF2YS9sYW5nL0F1dG9DbG9zZWFibGUuamF2YQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEF1dG9DbG9zZWFibGUgewotICAgIC8qKgotICAgICAqIENsb3NlcyB0aGUgb2JqZWN0IGFuZCByZWxlYXNlIGFueSBzeXN0ZW0gcmVzb3VyY2VzIGl0IGhvbGRzLgotICAgICAqLwotICAgIHZvaWQgY2xvc2UoKSB0aHJvd3MgRXhjZXB0aW9uOyB9CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvamF2YS9DaGFyc2V0cy5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2phdmEvQ2hhcnNldHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczYjA2Yi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvamF2YS9DaGFyc2V0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5qYXZhOwotCi1pbXBvcnQgamF2YS5uaW8uQ2hhckJ1ZmZlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUgc2FtZSBjbGFzcyBhcyB0aGUgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0cyB3aGljaCB3YXMgYWRkZWQgaW4KLSAqIERhbHZpayBWTS4gVGhpcyBoYWNrLCBwcm92aWRlcyBhIHJlcGxhY2VtZW50IGZvciB0aGF0IGNsYXNzIHdoaWNoIGNhbid0IGJlCi0gKiBsb2FkZWQgaW4gdGhlIHN0YW5kYXJkIEpWTSBzaW5jZSBpdCdzIGluIHRoZSBqYXZhIHBhY2thZ2UgYW5kIHN0YW5kYXJkIEpWTQotICogZG9lc24ndCBoYXZlIGl0LiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmF0aXZlIG1ldGhvZHMgaW4gdGhlIG9yaWdpbmFsCi0gKiBjbGFzcyBoYXMgYmVlbiBhZGRlZC4KLSAqIDxwLz4KLSAqIEV4dHJhY3RlZCBmcm9tIEFQSSBsZXZlbCAxOCwgZmlsZToKLSAqIHBsYXRmb3JtL2xpYmNvcmUvbHVuaS9zcmMvbWFpbi9qYXZhL2phdmEvbmlvL2NoYXJzZXQvQ2hhcnNldHMKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIENoYXJzZXRzIHsKLSAgICAvKioKLSAgICAgKiBBIGNoZWFwIGFuZCB0eXBlLXNhZmUgY29uc3RhbnQgZm9yIHRoZSBJU08tODg1OS0xIENoYXJzZXQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBDaGFyc2V0IElTT184ODU5XzEgPSBDaGFyc2V0LmZvck5hbWUoIklTTy04ODU5LTEiKTsKLQotICAgIC8qKgotICAgICAqIEEgY2hlYXAgYW5kIHR5cGUtc2FmZSBjb25zdGFudCBmb3IgdGhlIFVTLUFTQ0lJIENoYXJzZXQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBDaGFyc2V0IFVTX0FTQ0lJID0gQ2hhcnNldC5mb3JOYW1lKCJVUy1BU0NJSSIpOwotCi0gICAgLyoqCi0gICAgICogQSBjaGVhcCBhbmQgdHlwZS1zYWZlIGNvbnN0YW50IGZvciB0aGUgVVRGLTggQ2hhcnNldC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENoYXJzZXQgVVRGXzggPSBDaGFyc2V0LmZvck5hbWUoIlVURi04Iik7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbmV3IGJ5dGUgYXJyYXkgY29udGFpbmluZyB0aGUgYnl0ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gY2hhcmFjdGVycywKLSAgICAgKiBlbmNvZGVkIGluIFVTLUFTQ0lJLiBVbnJlcHJlc2VudGFibGUgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgYnkgKGJ5dGUpICc/Jy4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJ5dGVbXSB0b0FzY2lpQnl0ZXMoY2hhcltdIGNoYXJzLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7Ci0gICAgICAgIENoYXJCdWZmZXIgY2IgPSBDaGFyQnVmZmVyLmFsbG9jYXRlKGxlbmd0aCk7Ci0gICAgICAgIGNiLnB1dChjaGFycywgb2Zmc2V0LCBsZW5ndGgpOwotICAgICAgICByZXR1cm4gVVNfQVNDSUkuZW5jb2RlKGNiKS5hcnJheSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBuZXcgYnl0ZSBhcnJheSBjb250YWluaW5nIHRoZSBieXRlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBjaGFyYWN0ZXJzLAotICAgICAqIGVuY29kZWQgaW4gSVNPLTg4NTktMS4gVW5yZXByZXNlbnRhYmxlIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkIGJ5IChieXRlKSAnPycuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBieXRlW10gdG9Jc29MYXRpbjFCeXRlcyhjaGFyW10gY2hhcnMsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKLSAgICAgICAgQ2hhckJ1ZmZlciBjYiA9IENoYXJCdWZmZXIuYWxsb2NhdGUobGVuZ3RoKTsKLSAgICAgICAgY2IucHV0KGNoYXJzLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBJU09fODg1OV8xLmVuY29kZShjYikuYXJyYXkoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbmV3IGJ5dGUgYXJyYXkgY29udGFpbmluZyB0aGUgYnl0ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gY2hhcmFjdGVycywKLSAgICAgKiBlbmNvZGVkIGluIFVURi04LiBBbGwgY2hhcmFjdGVycyBhcmUgcmVwcmVzZW50YWJsZSBpbiBVVEYtOC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJ5dGVbXSB0b1V0ZjhCeXRlcyhjaGFyW10gY2hhcnMsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKLSAgICAgICAgQ2hhckJ1ZmZlciBjYiA9IENoYXJCdWZmZXIuYWxsb2NhdGUobGVuZ3RoKTsKLSAgICAgICAgY2IucHV0KGNoYXJzLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBVVEZfOC5lbmNvZGUoY2IpLmFycmF5KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIG5ldyBieXRlIGFycmF5IGNvbnRhaW5pbmcgdGhlIGJ5dGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGNoYXJhY3RlcnMsCi0gICAgICogZW5jb2RlZCBpbiBVVEYtMTZCRS4gQWxsIGNoYXJhY3RlcnMgYXJlIHJlcHJlc2VudGFibGUgaW4gVVRGLTE2QkUuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBieXRlW10gdG9CaWdFbmRpYW5VdGYxNkJ5dGVzKGNoYXJbXSBjaGFycywgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgewotICAgICAgICBieXRlW10gcmVzdWx0ID0gbmV3IGJ5dGVbbGVuZ3RoICogMl07Ci0gICAgICAgIGludCBlbmQgPSBvZmZzZXQgKyBsZW5ndGg7Ci0gICAgICAgIGludCByZXN1bHRJbmRleCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSBvZmZzZXQ7IGkgPCBlbmQ7ICsraSkgewotICAgICAgICAgICAgY2hhciBjaCA9IGNoYXJzW2ldOwotICAgICAgICAgICAgcmVzdWx0W3Jlc3VsdEluZGV4KytdID0gKGJ5dGUpIChjaCA+PiA4KTsKLSAgICAgICAgICAgIHJlc3VsdFtyZXN1bHRJbmRleCsrXSA9IChieXRlKSBjaDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERlY29kZXMgdGhlIGdpdmVuIFVTLUFTQ0lJIGJ5dGVzIGludG8gdGhlIGdpdmVuIGNoYXJbXS4gRXF1aXZhbGVudCB0byBidXQgZmFzdGVyIHRoYW46Ci0gICAgICoKLSAgICAgKiBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgKiAgICAgY2hhciBjaCA9IChjaGFyKSAoZGF0YVtzdGFydCsrXSAmIDB4ZmYpOwotICAgICAqICAgICB2YWx1ZVtpXSA9IChjaCA8PSAweDdmKSA/IGNoIDogUkVQTEFDRU1FTlRfQ0hBUjsKLSAgICAgKiB9Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGFzY2lpQnl0ZXNUb0NoYXJzKGJ5dGVbXSBieXRlcywgaW50IG9mZnNldCwgaW50IGxlbmd0aCwgY2hhcltdIGNoYXJzKSB7Ci0gICAgICAgIGlmIChieXRlcyA9PSBudWxsIHx8IGNoYXJzID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBjaGFyIFJFUExBQ0VNRU5UX0NIQVIgPSAoY2hhcikweGZmZDsKLSAgICAgICAgaW50IHN0YXJ0ID0gb2Zmc2V0OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBjaGFyIGNoID0gKGNoYXIpIChieXRlc1tzdGFydCsrXSAmIDB4ZmYpOwotICAgICAgICAgICAgY2hhcnNbaV0gPSAoY2ggPD0gMHg3ZikgPyBjaCA6IFJFUExBQ0VNRU5UX0NIQVI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZWNvZGVzIHRoZSBnaXZlbiBJU08tODg1OS0xIGJ5dGVzIGludG8gdGhlIGdpdmVuIGNoYXJbXS4gRXF1aXZhbGVudCB0byBidXQgZmFzdGVyIHRoYW46Ci0gICAgICoKLSAgICAgKiBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgKiAgICAgdmFsdWVbaV0gPSAoY2hhcikgKGRhdGFbc3RhcnQrK10gJiAweGZmKTsKLSAgICAgKiB9Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGlzb0xhdGluMUJ5dGVzVG9DaGFycyhieXRlW10gYnl0ZXMsIGludCBvZmZzZXQsIGludCBsZW5ndGgsIGNoYXJbXSBjaGFycykgewotICAgICAgICBpZiAoYnl0ZXMgPT0gbnVsbCB8fCBjaGFycyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHN0YXJ0ID0gb2Zmc2V0OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBjaGFyc1tpXSA9IChjaGFyKSAoYnl0ZXNbc3RhcnQrK10gJiAweGZmKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgQ2hhcnNldHMoKSB7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2phdmEvSW50ZWdyYWxUb1N0cmluZy5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2phdmEvSW50ZWdyYWxUb1N0cmluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmRkMDBhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL0ludGVncmFsVG9TdHJpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuamF2YTsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBzYW1lIGNsYXNzIGFzIHRoZSBqYXZhLmxhbmcuSW50ZWdyYWxUb1N0cmluZyB3aGljaCB3YXMgYWRkZWQgaW4KLSAqIERhbHZpayBWTS4gVGhpcyBoYWNrLCBwcm92aWRlcyBhIHJlcGxhY2VtZW50IGZvciB0aGF0IGNsYXNzIHdoaWNoIGNhbid0IGJlCi0gKiBsb2FkZWQgaW4gdGhlIHN0YW5kYXJkIEpWTSBzaW5jZSBpdCdzIGluIHRoZSBqYXZhIHBhY2thZ2UgYW5kIHN0YW5kYXJkIEpWTQotICogZG9lc24ndCBoYXZlIGl0LiBTaW5jZSBpdCdzIG5vIGxvbmdlciBpbiBqYXZhLmxhbmcsIGFjY2VzcyB0byBwYWNrYWdlCi0gKiBwcml2YXRlIG1ldGhvZHMgYW5kIGNsYXNzZXMgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIGNsb3NlcyBtYXRjaGluZyBwdWJsaWMKLSAqIGltcGxlbWVudGF0aW9uLgotICogPHAvPgotICogRXh0cmFjdGVkIGZyb20gQVBJIGxldmVsIDE4LCBmaWxlOgotICogcGxhdGZvcm0vbGliY29yZS9sdW5pL3NyYy9tYWluL2phdmEvamF2YS9sYW5nL0ludGVncmFsVG9TdHJpbmcuamF2YQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgSW50ZWdyYWxUb1N0cmluZyB7Ci0gICAgLyoqCi0gICAgICogV2hlbiBhcHBlbmRpbmcgdG8gYW4gQWJzdHJhY3RTdHJpbmdCdWlsZGVyLCB0aGlzIHRocmVhZC1sb2NhbCBjaGFyW10gbGV0cyB1cyBhdm9pZAotICAgICAqIGFsbG9jYXRpb24gb2YgYSB0ZW1wb3JhcnkgYXJyYXkuIChXZSBjYW4ndCB3cml0ZSBzdHJhaWdodCBpbnRvIHRoZSBBYnN0cmFjdFN0cmluZ0J1aWxkZXIKLSAgICAgKiBiZWNhdXNlIGl0J3MgYWxtb3N0IGFzIGV4cGVuc2l2ZSB0byB3b3JrIG91dCB0aGUgZXhhY3QgbGVuZ3RoIG9mIHRoZSByZXN1bHQgYXMgaXQgaXMgdG8KLSAgICAgKiBkbyB0aGUgZm9ybWF0dGluZy4gV2UgY291bGQgdHJ5IGJlaW5nIGNvbnNlcnZhdGl2ZSBhbmQgImRlbGV0ZSItaW5nIHRoZSB1bnVzZWQgc3BhY2UKLSAgICAgKiBhZnRlcndhcmRzLCBidXQgdGhlbiB3ZSdkIG5lZWQgdG8gZHVwbGljYXRlIGNvbnZlcnRJbnQgYW5kIGNvbnZlcnRMb25nIHJhdGhlciB0aGFuIHNoYXJlCi0gICAgICogdGhlIGNvZGUuKQotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRocmVhZExvY2FsPGNoYXJbXT4gQlVGRkVSID0gbmV3IFRocmVhZExvY2FsPGNoYXJbXT4oKSB7Ci0gICAgICAgIEBPdmVycmlkZSBwcm90ZWN0ZWQgY2hhcltdIGluaXRpYWxWYWx1ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgY2hhclsyMF07IC8vIE1heGltdW0gbGVuZ3RoIG9mIGEgYmFzZS0xMCBsb25nLgotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFRoZXNlIHRhYmxlcyBhcmUgdXNlZCB0byBzcGVjaWFsLWNhc2UgdG9TdHJpbmcgY29tcHV0YXRpb24gZm9yCi0gICAgICogc21hbGwgdmFsdWVzLiAgVGhpcyBzZXJ2ZXMgdGhyZWUgcHVycG9zZXM6IGl0IHJlZHVjZXMgbWVtb3J5IHVzYWdlOwotICAgICAqIGl0IGluY3JlYXNlcyBwZXJmb3JtYW5jZSBmb3Igc21hbGwgdmFsdWVzOyBhbmQgaXQgZGVjcmVhc2VzIHRoZQotICAgICAqIG51bWJlciBvZiBjb21wYXJpc29ucyByZXF1aXJlZCB0byBkbyB0aGUgbGVuZ3RoIGNvbXB1dGF0aW9uLgotICAgICAqIEVsZW1lbnRzIG9mIHRoaXMgdGFibGUgYXJlIGxhemlseSBpbml0aWFsaXplZCBvbiBmaXJzdCB1c2UuCi0gICAgICogTm8gbG9ja2luZyBpcyBuZWNlc3NhcnksIGkuZS4sIHdlIHVzZSB0aGUgbm9uLXZvbGF0aWxlLCByYWN5Ci0gICAgICogc2luZ2xlLWNoZWNrIGlkaW9tLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFNNQUxMX05PTk5FR0FUSVZFX1ZBTFVFUyA9IG5ldyBTdHJpbmdbMTAwXTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBTTUFMTF9ORUdBVElWRV9WQUxVRVMgPSBuZXcgU3RyaW5nWzEwMF07Ci0KLSAgICAvKiogVEVOU1tpXSBjb250YWlucyB0aGUgdGVucyBkaWdpdCBvZiB0aGUgbnVtYmVyIGksIDAgPD0gaSA8PSA5OS4gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gVEVOUyA9IHsKLSAgICAgICAgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcwJywgJzAnLAotICAgICAgICAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsCi0gICAgICAgICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywKLSAgICAgICAgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLAotICAgICAgICAnNCcsICc0JywgJzQnLCAnNCcsICc0JywgJzQnLCAnNCcsICc0JywgJzQnLCAnNCcsCi0gICAgICAgICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywKLSAgICAgICAgJzYnLCAnNicsICc2JywgJzYnLCAnNicsICc2JywgJzYnLCAnNicsICc2JywgJzYnLAotICAgICAgICAnNycsICc3JywgJzcnLCAnNycsICc3JywgJzcnLCAnNycsICc3JywgJzcnLCAnNycsCi0gICAgICAgICc4JywgJzgnLCAnOCcsICc4JywgJzgnLCAnOCcsICc4JywgJzgnLCAnOCcsICc4JywKLSAgICAgICAgJzknLCAnOScsICc5JywgJzknLCAnOScsICc5JywgJzknLCAnOScsICc5JywgJzknCi0gICAgfTsKLQotICAgIC8qKiBPbmVzIFtpXSBjb250YWlucyB0aGUgdGVucyBkaWdpdCBvZiB0aGUgbnVtYmVyIGksIDAgPD0gaSA8PSA5OS4gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gT05FUyA9IHsKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBUYWJsZSBmb3IgTU9EIC8gRElWIDEwIGNvbXB1dGF0aW9uIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEwLTIxCi0gICAgICogb2YgSGFuayBXYXJyZW4ncyAiSGFja2VyJ3MgRGVsaWdodCIgb25saW5lIGFkZGVuZHVtLgotICAgICAqIGh0dHA6Ly93d3cuaGFja2Vyc2RlbGlnaHQub3JnL2RpdmNNb3JlLnBkZgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBNT0RfMTBfVEFCTEUgPSB7Ci0gICAgICAgIDAsIDEsIDIsIDIsIDMsIDMsIDQsIDUsIDUsIDYsIDcsIDcsIDgsIDgsIDksIDAKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogVGhlIGRpZ2l0cyBmb3IgZXZlcnkgc3VwcG9ydGVkIHJhZGl4LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBESUdJVFMgPSB7Ci0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKLSAgICAgICAgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLAotICAgICAgICAnaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsCi0gICAgICAgICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicKLSAgICB9OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIFVQUEVSX0NBU0VfRElHSVRTID0gewotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCi0gICAgICAgICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsICdHJywgJ0gnLCAnSScsICdKJywKLSAgICAgICAgJ0snLCAnTCcsICdNJywgJ04nLCAnTycsICdQJywgJ1EnLCAnUicsICdTJywgJ1QnLAotICAgICAgICAnVScsICdWJywgJ1cnLCAnWCcsICdZJywgJ1onCi0gICAgfTsKLQotICAgIHByaXZhdGUgSW50ZWdyYWxUb1N0cmluZygpIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFcXVpdmFsZW50IHRvIEludGVnZXIudG9TdHJpbmcoaSwgcmFkaXgpLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGludFRvU3RyaW5nKGludCBpLCBpbnQgcmFkaXgpIHsKLSAgICAgICAgaWYgKHJhZGl4IDwgQ2hhcmFjdGVyLk1JTl9SQURJWCB8fCByYWRpeCA+IENoYXJhY3Rlci5NQVhfUkFESVgpIHsKLSAgICAgICAgICAgIHJhZGl4ID0gMTA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJhZGl4ID09IDEwKSB7Ci0gICAgICAgICAgICByZXR1cm4gaW50VG9TdHJpbmcoaSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBJZiBpIGlzIHBvc2l0aXZlLCBuZWdhdGUgaXQuIFRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mIHdoYXQgb25lIG1pZ2h0Ci0gICAgICAgICAqIGV4cGVjdC4gSXQgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIHJhbmdlIG9mIHRoZSBuZWdhdGl2ZSB2YWx1ZXMgaXMKLSAgICAgICAgICogc3RyaWN0bHkgbGFyZ2VyIHRoYW4gdGhhdCBvZiB0aGUgcG9zaXRpdmUgdmFsdWVzOiB0aGVyZSBpcyBubwotICAgICAgICAgKiBwb3NpdGl2ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIEludGVnZXIuTUlOX1ZBTFVFLgotICAgICAgICAgKi8KLSAgICAgICAgYm9vbGVhbiBuZWdhdGl2ZSA9IGZhbHNlOwotICAgICAgICBpZiAoaSA8IDApIHsKLSAgICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGkgPSAtaTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBidWZMZW4gPSByYWRpeCA8IDggPyAzMyA6IDEyOyAgLy8gTWF4IGNoYXJzIGluIHJlc3VsdCAoY29uc2VydmF0aXZlKQotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbYnVmTGVuXTsKLSAgICAgICAgaW50IGN1cnNvciA9IGJ1ZkxlbjsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpbnQgcSA9IGkgLyByYWRpeDsKLSAgICAgICAgICAgIGJ1ZlstLWN1cnNvcl0gPSBESUdJVFNbcmFkaXggKiBxIC0gaV07Ci0gICAgICAgICAgICBpID0gcTsKLSAgICAgICAgfSB3aGlsZSAoaSAhPSAwKTsKLQotICAgICAgICBpZiAobmVnYXRpdmUpIHsKLSAgICAgICAgICAgIGJ1ZlstLWN1cnNvcl0gPSAnLSc7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhidWYsIGN1cnNvciwgYnVmTGVuIC0gY3Vyc29yKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFcXVpdmFsZW50IHRvIEludGVnZXIudG9TdHJpbmcoaSkuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgaW50VG9TdHJpbmcoaW50IGkpIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRJbnQobnVsbCwgaSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXF1aXZhbGVudCB0byBzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhpKSkuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGFwcGVuZEludChTdHJpbmdCdWlsZGVyIHNiLCBpbnQgaSkgewotICAgICAgICBjb252ZXJ0SW50KHNiLCBpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaSBhbmQgbGVhdmVzIHNiIGFsb25lIGlmIHNiIGlzIG51bGwuCi0gICAgICogUmV0dXJucyBudWxsIGFuZCBhcHBlbmRzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaSB0byBzYiBpZiBzYiBpcyBub24tbnVsbC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29udmVydEludChTdHJpbmdCdWlsZGVyIHNiLCBpbnQgaSkgewotICAgICAgICBib29sZWFuIG5lZ2F0aXZlID0gZmFsc2U7Ci0gICAgICAgIFN0cmluZyBxdWlja1Jlc3VsdCA9IG51bGw7Ci0gICAgICAgIGlmIChpIDwgMCkgewotICAgICAgICAgICAgbmVnYXRpdmUgPSB0cnVlOwotICAgICAgICAgICAgaSA9IC1pOwotICAgICAgICAgICAgaWYgKGkgPCAxMDApIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgLW4gaXMgc3RpbGwgbmVnYXRpdmUsIG4gaXMgSW50ZWdlci5NSU5fVkFMVUUKLSAgICAgICAgICAgICAgICAgICAgcXVpY2tSZXN1bHQgPSAiLTIxNDc0ODM2NDgiOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHF1aWNrUmVzdWx0ID0gU01BTExfTkVHQVRJVkVfVkFMVUVTW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAocXVpY2tSZXN1bHQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgU01BTExfTkVHQVRJVkVfVkFMVUVTW2ldID0gcXVpY2tSZXN1bHQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpIDwgMTAgPyBzdHJpbmdPZignLScsIE9ORVNbaV0pIDogc3RyaW5nT2YoJy0nLCBURU5TW2ldLCBPTkVTW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpIDwgMTAwKSB7Ci0gICAgICAgICAgICAgICAgcXVpY2tSZXN1bHQgPSBTTUFMTF9OT05ORUdBVElWRV9WQUxVRVNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHF1aWNrUmVzdWx0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgU01BTExfTk9OTkVHQVRJVkVfVkFMVUVTW2ldID0gcXVpY2tSZXN1bHQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPCAxMCA/IHN0cmluZ09mKE9ORVNbaV0pIDogc3RyaW5nT2YoVEVOU1tpXSwgT05FU1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChxdWlja1Jlc3VsdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoc2IgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHNiLmFwcGVuZChxdWlja1Jlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcXVpY2tSZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgYnVmTGVuID0gMTE7IC8vIE1heCBudW1iZXIgb2YgY2hhcnMgaW4gcmVzdWx0Ci0gICAgICAgIGNoYXJbXSBidWYgPSAoc2IgIT0gbnVsbCkgPyBCVUZGRVIuZ2V0KCkgOiBuZXcgY2hhcltidWZMZW5dOwotICAgICAgICBpbnQgY3Vyc29yID0gYnVmTGVuOwotCi0gICAgICAgIC8vIENhbGN1bGF0ZSBkaWdpdHMgdHdvLWF0LWEtdGltZSB0aWxsIHJlbWFpbmluZyBkaWdpdHMgZml0IGluIDE2IGJpdHMKLSAgICAgICAgd2hpbGUgKGkgPj0gKDEgPDwgMTYpKSB7Ci0gICAgICAgICAgICAvLyBDb21wdXRlIHEgPSBuLzEwMCBhbmQgciA9IG4gJSAxMDAgYXMgcGVyICJIYWNrZXIncyBEZWxpZ2h0IiAxMC04Ci0gICAgICAgICAgICBpbnQgcSA9IChpbnQpICgoMHg1MUVCODUxRkwgKiBpKSA+Pj4gMzcpOwotICAgICAgICAgICAgaW50IHIgPSBpIC0gMTAwKnE7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gT05FU1tyXTsKLSAgICAgICAgICAgIGJ1ZlstLWN1cnNvcl0gPSBURU5TW3JdOwotICAgICAgICAgICAgaSA9IHE7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDYWxjdWxhdGUgcmVtYWluaW5nIGRpZ2l0cyBvbmUtYXQtYS10aW1lIGZvciBwZXJmb3JtYW5jZQotICAgICAgICB3aGlsZSAoaSAhPSAwKSB7Ci0gICAgICAgICAgICAvLyBDb21wdXRlIHEgPSBuLzEwIGFuZCByID0gbiAlIDEwIGFzIHBlciAiSGFja2VyJ3MgRGVsaWdodCIgMTAtOAotICAgICAgICAgICAgaW50IHEgPSAoMHhDQ0NEICogaSkgPj4+IDE5OwotICAgICAgICAgICAgaW50IHIgPSBpIC0gMTAqcTsKLSAgICAgICAgICAgIGJ1ZlstLWN1cnNvcl0gPSBESUdJVFNbcl07Ci0gICAgICAgICAgICBpID0gcTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZWdhdGl2ZSkgewotICAgICAgICAgICAgYnVmWy0tY3Vyc29yXSA9ICctJzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzYiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoYnVmLCBjdXJzb3IsIGJ1ZkxlbiAtIGN1cnNvcik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGJ1ZiwgY3Vyc29yLCBidWZMZW4gLSBjdXJzb3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXF1aXZhbGVudCB0byBMb25nLnRvU3RyaW5nKHYsIHJhZGl4KS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBsb25nVG9TdHJpbmcobG9uZyB2LCBpbnQgcmFkaXgpIHsKLSAgICAgICAgaW50IGkgPSAoaW50KSB2OwotICAgICAgICBpZiAoaSA9PSB2KSB7Ci0gICAgICAgICAgICByZXR1cm4gaW50VG9TdHJpbmcoaSwgcmFkaXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJhZGl4IDwgQ2hhcmFjdGVyLk1JTl9SQURJWCB8fCByYWRpeCA+IENoYXJhY3Rlci5NQVhfUkFESVgpIHsKLSAgICAgICAgICAgIHJhZGl4ID0gMTA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJhZGl4ID09IDEwKSB7Ci0gICAgICAgICAgICByZXR1cm4gbG9uZ1RvU3RyaW5nKHYpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogSWYgdiBpcyBwb3NpdGl2ZSwgbmVnYXRlIGl0LiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiB3aGF0IG9uZSBtaWdodAotICAgICAgICAgKiBleHBlY3QuIEl0IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSByYW5nZSBvZiB0aGUgbmVnYXRpdmUgdmFsdWVzIGlzCi0gICAgICAgICAqIHN0cmljdGx5IGxhcmdlciB0aGFuIHRoYXQgb2YgdGhlIHBvc2l0aXZlIHZhbHVlczogdGhlcmUgaXMgbm8KLSAgICAgICAgICogcG9zaXRpdmUgdmFsdWUgY29ycmVzcG9uZGluZyB0byBJbnRlZ2VyLk1JTl9WQUxVRS4KLSAgICAgICAgICovCi0gICAgICAgIGJvb2xlYW4gbmVnYXRpdmUgPSBmYWxzZTsKLSAgICAgICAgaWYgKHYgPCAwKSB7Ci0gICAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2ID0gLXY7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgYnVmTGVuID0gcmFkaXggPCA4ID8gNjUgOiAyMzsgIC8vIE1heCBjaGFycyBpbiByZXN1bHQgKGNvbnNlcnZhdGl2ZSkKLSAgICAgICAgY2hhcltdIGJ1ZiA9IG5ldyBjaGFyW2J1Zkxlbl07Ci0gICAgICAgIGludCBjdXJzb3IgPSBidWZMZW47Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgbG9uZyBxID0gdiAvIHJhZGl4OwotICAgICAgICAgICAgYnVmWy0tY3Vyc29yXSA9IERJR0lUU1soaW50KSAocmFkaXggKiBxIC0gdildOwotICAgICAgICAgICAgdiA9IHE7Ci0gICAgICAgIH0gd2hpbGUgKHYgIT0gMCk7Ci0KLSAgICAgICAgaWYgKG5lZ2F0aXZlKSB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gJy0nOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmLCBjdXJzb3IsIGJ1ZkxlbiAtIGN1cnNvcik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXF1aXZhbGVudCB0byBMb25nLnRvU3RyaW5nKGwpLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGxvbmdUb1N0cmluZyhsb25nIGwpIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRMb25nKG51bGwsIGwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVxdWl2YWxlbnQgdG8gc2IuYXBwZW5kKExvbmcudG9TdHJpbmcobCkpLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhcHBlbmRMb25nKFN0cmluZ0J1aWxkZXIgc2IsIGxvbmcgbCkgewotICAgICAgICBjb252ZXJ0TG9uZyhzYiwgbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIG4gYW5kIGxlYXZlcyBzYiBhbG9uZSBpZiBzYiBpcyBudWxsLgotICAgICAqIFJldHVybnMgbnVsbCBhbmQgYXBwZW5kcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIG4gdG8gc2IgaWYgc2IgaXMgbm9uLW51bGwuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvbnZlcnRMb25nKFN0cmluZ0J1aWxkZXIgc2IsIGxvbmcgbikgewotICAgICAgICBpbnQgaSA9IChpbnQpIG47Ci0gICAgICAgIGlmIChpID09IG4pIHsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0SW50KHNiLCBpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gbmVnYXRpdmUgPSAobiA8IDApOwotICAgICAgICBpZiAobmVnYXRpdmUpIHsKLSAgICAgICAgICAgIG4gPSAtbjsKLSAgICAgICAgICAgIGlmIChuIDwgMCkgewotICAgICAgICAgICAgICAgIC8vIElmIC1uIGlzIHN0aWxsIG5lZ2F0aXZlLCBuIGlzIExvbmcuTUlOX1ZBTFVFCi0gICAgICAgICAgICAgICAgU3RyaW5nIHF1aWNrUmVzdWx0ID0gIi05MjIzMzcyMDM2ODU0Nzc1ODA4IjsKLSAgICAgICAgICAgICAgICBpZiAoc2IgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQocXVpY2tSZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHF1aWNrUmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGJ1ZkxlbiA9IDIwOyAvLyBNYXhpbXVtIG51bWJlciBvZiBjaGFycyBpbiByZXN1bHQKLSAgICAgICAgY2hhcltdIGJ1ZiA9IChzYiAhPSBudWxsKSA/IEJVRkZFUi5nZXQoKSA6IG5ldyBjaGFyW2J1Zkxlbl07Ci0KLSAgICAgICAgaW50IGxvdyA9IChpbnQpIChuICUgMTAwMDAwMDAwMCk7IC8vIEV4dHJhY3QgbG93LW9yZGVyIDkgZGlnaXRzCi0gICAgICAgIGludCBjdXJzb3IgPSBpbnRJbnRvQ2hhckFycmF5KGJ1ZiwgYnVmTGVuLCBsb3cpOwotCi0gICAgICAgIC8vIFplcm8tcGFkIExvdyBvcmRlciBwYXJ0IHRvIDkgZGlnaXRzCi0gICAgICAgIHdoaWxlIChjdXJzb3IgIT0gKGJ1ZkxlbiAtIDkpKSB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gJzAnOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhlIHJlbWFpbmluZyBkaWdpdHMgYXJlIChuIC0gbG93KSAvIDEsMDAwLDAwMCwwMDAuICBUaGlzCi0gICAgICAgICAqICJleGFjdCBkaXZpc2lvbiIgaXMgZG9uZSBhcyBwZXIgdGhlIG9ubGluZSBhZGRlbmR1bSB0byBIYW5rIFdhcnJlbidzCi0gICAgICAgICAqICJIYWNrZXIncyBEZWxpZ2h0IiAxMC0yMCwgaHR0cDovL3d3dy5oYWNrZXJzZGVsaWdodC5vcmcvZGl2Y01vcmUucGRmCi0gICAgICAgICAqLwotICAgICAgICBuID0gKChuIC0gbG93KSA+Pj4gOSkgKiAweDhFNDdDRTQyM0EyRTlDNkRMOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIElmIHRoZSByZW1haW5pbmcgZGlnaXRzIGZpdCBpbiBhbiBpbnQsIGVtaXQgdGhlbSB1c2luZyBhCi0gICAgICAgICAqIHNpbmdsZSBjYWxsIHRvIGludEludG9DaGFyQXJyYXkuIE90aGVyd2lzZSwgc3RyaXAgb2ZmIHRoZQotICAgICAgICAgKiBsb3ctb3JkZXIgZGlnaXQsIHB1dCBpdCBpbiBidWYsIGFuZCB0aGVuIGNhbGwgaW50SW50b0NoYXJBcnJheQotICAgICAgICAgKiBvbiB0aGUgcmVtYWluaW5nIGRpZ2l0cyAod2hpY2ggbm93IGZpdCBpbiBhbiBpbnQpLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKChuICYgKC0xTCA8PCAzMikpID09IDApIHsKLSAgICAgICAgICAgIGN1cnNvciA9IGludEludG9DaGFyQXJyYXkoYnVmLCBjdXJzb3IsIChpbnQpIG4pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFNldCBtaWREaWdpdCB0byBuICUgMTAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW50IGxvMzIgPSAoaW50KSBuOwotICAgICAgICAgICAgaW50IGhpMzIgPSAoaW50KSAobiA+Pj4gMzIpOwotCi0gICAgICAgICAgICAvLyBtaWREaWdpdCA9ICgodW5zaWduZWQpIGxvdzMyKSAlIDEwLCBwZXIgIkhhY2tlcidzIERlbGlnaHQiIDEwLTIxCi0gICAgICAgICAgICBpbnQgbWlkRGlnaXQgPSBNT0RfMTBfVEFCTEVbKDB4MTk5OTk5OTkgKiBsbzMyICsgKGxvMzIgPj4+IDEpICsgKGxvMzIgPj4+IDMpKSA+Pj4gMjhdOwotCi0gICAgICAgICAgICAvLyBBZGp1c3QgbWlkRGlnaXQgZm9yIGhpMzIuIChhc3NlcnQgaGkzMiA9PSAxIHx8IGhpMzIgPT0gMikKLSAgICAgICAgICAgIG1pZERpZ2l0IC09IGhpMzIgPDwgMjsgIC8vIDFMIDw8IDMyID09IC00IE1PRCAxMAotICAgICAgICAgICAgaWYgKG1pZERpZ2l0IDwgMCkgewotICAgICAgICAgICAgICAgIG1pZERpZ2l0ICs9IDEwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnVmWy0tY3Vyc29yXSA9IERJR0lUU1ttaWREaWdpdF07Ci0KLSAgICAgICAgICAgIC8vIEV4YWN0IGRpdmlzaW9uIGFzIHBlciBXYXJyZW4gMTAtMjAKLSAgICAgICAgICAgIGludCByZXN0ID0gKChpbnQpICgobiAtIG1pZERpZ2l0KSA+Pj4gMSkpICogMHhDQ0NDQ0NDRDsKLSAgICAgICAgICAgIGN1cnNvciA9IGludEludG9DaGFyQXJyYXkoYnVmLCBjdXJzb3IsIHJlc3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5lZ2F0aXZlKSB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gJy0nOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzYiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoYnVmLCBjdXJzb3IsIGJ1ZkxlbiAtIGN1cnNvcik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGJ1ZiwgY3Vyc29yLCBidWZMZW4gLSBjdXJzb3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5zZXJ0cyB0aGUgdW5zaWduZWQgZGVjaW1hbCBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IG4gaW50byB0aGUgc3BlY2lmaWVkCi0gICAgICogY2hhcmFjdGVyIGFycmF5IHN0YXJ0aW5nIGF0IHBvc2l0aW9uIGN1cnNvci4gIFJldHVybnMgdGhlIGluZGV4IGFmdGVyCi0gICAgICogdGhlIGxhc3QgY2hhcmFjdGVyIGluc2VydGVkIChpLmUuLCB0aGUgdmFsdWUgdG8gcGFzcyBpbiBhcyBjdXJzb3IgdGhlCi0gICAgICogbmV4dCB0aW1lIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCkuIE5vdGUgdGhhdCBuIGlzIGludGVycHJldGVkIGFzIGEgbGFyZ2UKLSAgICAgKiBwb3NpdGl2ZSBpbnRlZ2VyIChub3QgYSBuZWdhdGl2ZSBpbnRlZ2VyKSBpZiBpdHMgc2lnbiBiaXQgaXMgc2V0LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGludCBpbnRJbnRvQ2hhckFycmF5KGNoYXJbXSBidWYsIGludCBjdXJzb3IsIGludCBuKSB7Ci0gICAgICAgIC8vIENhbGN1bGF0ZSBkaWdpdHMgdHdvLWF0LWEtdGltZSB0aWxsIHJlbWFpbmluZyBkaWdpdHMgZml0IGluIDE2IGJpdHMKLSAgICAgICAgd2hpbGUgKChuICYgMHhmZmZmMDAwMCkgIT0gMCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIENvbXB1dGUgcSA9IG4vMTAwIGFuZCByID0gbiAlIDEwMCBhcyBwZXIgIkhhY2tlcidzIERlbGlnaHQiIDEwLTguCi0gICAgICAgICAgICAgKiBUaGlzIGNvbXB1dGF0aW9uIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICAgICAgICAgKiBjb21wdXRhdGlvbiBpbiBpbnRUb1N0cmluZzogdGhlIHNoaWZ0cyBiZWZvcmUgYW5kIGFmdGVyCi0gICAgICAgICAgICAgKiBtdWx0aXBseSBjYW4ndCBiZSBjb21iaW5lZCwgYXMgdGhhdCB3b3VsZCB5aWVsZCB0aGUgd3JvbmcgcmVzdWx0Ci0gICAgICAgICAgICAgKiBpZiBuJ3Mgc2lnbiBiaXQgd2VyZSBzZXQuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGludCBxID0gKGludCkgKCgweDUxRUI4NTFGTCAqIChuID4+PiAyKSkgPj4+IDM1KTsKLSAgICAgICAgICAgIGludCByID0gbiAtIDEwMCpxOwotICAgICAgICAgICAgYnVmWy0tY3Vyc29yXSA9IE9ORVNbcl07Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gVEVOU1tyXTsKLSAgICAgICAgICAgIG4gPSBxOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2FsY3VsYXRlIHJlbWFpbmluZyBkaWdpdHMgb25lLWF0LWEtdGltZSBmb3IgcGVyZm9ybWFuY2UKLSAgICAgICAgd2hpbGUgKG4gIT0gMCkgewotICAgICAgICAgICAgLy8gQ29tcHV0ZSBxID0gbiAvIDEwIGFuZCByID0gbiAlIDEwIGFzIHBlciAiSGFja2VyJ3MgRGVsaWdodCIgMTAtOAotICAgICAgICAgICAgaW50IHEgPSAoMHhDQ0NEICogbikgPj4+IDE5OwotICAgICAgICAgICAgaW50IHIgPSBuIC0gMTAqcTsKLSAgICAgICAgICAgIGJ1ZlstLWN1cnNvcl0gPSBESUdJVFNbcl07Ci0gICAgICAgICAgICBuID0gcTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY3Vyc29yOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGludFRvQmluYXJ5U3RyaW5nKGludCBpKSB7Ci0gICAgICAgIGludCBidWZMZW4gPSAzMjsgIC8vIE1heCBudW1iZXIgb2YgYmluYXJ5IGRpZ2l0cyBpbiBhbiBpbnQKLSAgICAgICAgY2hhcltdIGJ1ZiA9IG5ldyBjaGFyW2J1Zkxlbl07Ci0gICAgICAgIGludCBjdXJzb3IgPSBidWZMZW47Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgYnVmWy0tY3Vyc29yXSA9IERJR0lUU1tpICYgMV07Ci0gICAgICAgIH0gIHdoaWxlICgoaSA+Pj49IDEpICE9IDApOwotCi0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGJ1ZiwgY3Vyc29yLCBidWZMZW4gLSBjdXJzb3IpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGxvbmdUb0JpbmFyeVN0cmluZyhsb25nIHYpIHsKLSAgICAgICAgaW50IGkgPSAoaW50KSB2OwotICAgICAgICBpZiAodiA+PSAwICYmIGkgPT0gdikgewotICAgICAgICAgICAgcmV0dXJuIGludFRvQmluYXJ5U3RyaW5nKGkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGJ1ZkxlbiA9IDY0OyAgLy8gTWF4IG51bWJlciBvZiBiaW5hcnkgZGlnaXRzIGluIGEgbG9uZwotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbYnVmTGVuXTsKLSAgICAgICAgaW50IGN1cnNvciA9IGJ1ZkxlbjsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gRElHSVRTWygoaW50KSB2KSAmIDFdOwotICAgICAgICB9ICB3aGlsZSAoKHYgPj4+PSAxKSAhPSAwKTsKLQotICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhidWYsIGN1cnNvciwgYnVmTGVuIC0gY3Vyc29yKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZ0J1aWxkZXIgYXBwZW5kQnl0ZUFzSGV4KFN0cmluZ0J1aWxkZXIgc2IsIGJ5dGUgYiwgYm9vbGVhbiB1cHBlckNhc2UpIHsKLSAgICAgICAgY2hhcltdIGRpZ2l0cyA9IHVwcGVyQ2FzZSA/IFVQUEVSX0NBU0VfRElHSVRTIDogRElHSVRTOwotICAgICAgICBzYi5hcHBlbmQoZGlnaXRzWyhiID4+IDQpICYgMHhmXSk7Ci0gICAgICAgIHNiLmFwcGVuZChkaWdpdHNbYiAmIDB4Zl0pOwotICAgICAgICByZXR1cm4gc2I7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnl0ZVRvSGV4U3RyaW5nKGJ5dGUgYiwgYm9vbGVhbiB1cHBlckNhc2UpIHsKLSAgICAgICAgY2hhcltdIGRpZ2l0cyA9IHVwcGVyQ2FzZSA/IFVQUEVSX0NBU0VfRElHSVRTIDogRElHSVRTOwotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbMl07IC8vIFdlIGFsd2F5cyB3YW50IHR3byBkaWdpdHMuCi0gICAgICAgIGJ1ZlswXSA9IGRpZ2l0c1soYiA+PiA0KSAmIDB4Zl07Ci0gICAgICAgIGJ1ZlsxXSA9IGRpZ2l0c1tiICYgMHhmXTsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmLCAwLCAyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBieXRlc1RvSGV4U3RyaW5nKGJ5dGVbXSBieXRlcywgYm9vbGVhbiB1cHBlckNhc2UpIHsKLSAgICAgICAgY2hhcltdIGRpZ2l0cyA9IHVwcGVyQ2FzZSA/IFVQUEVSX0NBU0VfRElHSVRTIDogRElHSVRTOwotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbYnl0ZXMubGVuZ3RoICogMl07Ci0gICAgICAgIGludCBjID0gMDsKLSAgICAgICAgZm9yIChieXRlIGIgOiBieXRlcykgewotICAgICAgICAgICAgYnVmW2MrK10gPSBkaWdpdHNbKGIgPj4gNCkgJiAweGZdOwotICAgICAgICAgICAgYnVmW2MrK10gPSBkaWdpdHNbYiAmIDB4Zl07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBpbnRUb0hleFN0cmluZyhpbnQgaSwgYm9vbGVhbiB1cHBlckNhc2UsIGludCBtaW5XaWR0aCkgewotICAgICAgICBpbnQgYnVmTGVuID0gODsgIC8vIE1heCBudW1iZXIgb2YgaGV4IGRpZ2l0cyBpbiBhbiBpbnQKLSAgICAgICAgY2hhcltdIGJ1ZiA9IG5ldyBjaGFyW2J1Zkxlbl07Ci0gICAgICAgIGludCBjdXJzb3IgPSBidWZMZW47Ci0KLSAgICAgICAgY2hhcltdIGRpZ2l0cyA9IHVwcGVyQ2FzZSA/IFVQUEVSX0NBU0VfRElHSVRTIDogRElHSVRTOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gZGlnaXRzW2kgJiAweGZdOwotICAgICAgICB9IHdoaWxlICgoaSA+Pj49IDQpICE9IDAgfHwgKGJ1ZkxlbiAtIGN1cnNvciA8IG1pbldpZHRoKSk7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmLCBjdXJzb3IsIGJ1ZkxlbiAtIGN1cnNvcik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgbG9uZ1RvSGV4U3RyaW5nKGxvbmcgdikgewotICAgICAgICBpbnQgaSA9IChpbnQpIHY7Ci0gICAgICAgIGlmICh2ID49IDAgJiYgaSA9PSB2KSB7Ci0gICAgICAgICAgICByZXR1cm4gaW50VG9IZXhTdHJpbmcoaSwgZmFsc2UsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGJ1ZkxlbiA9IDE2OyAgLy8gTWF4IG51bWJlciBvZiBoZXggZGlnaXRzIGluIGEgbG9uZwotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbYnVmTGVuXTsKLSAgICAgICAgaW50IGN1cnNvciA9IGJ1ZkxlbjsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gRElHSVRTWygoaW50KSB2KSAmIDB4Rl07Ci0gICAgICAgIH0gd2hpbGUgKCh2ID4+Pj0gNCkgIT0gMCk7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmLCBjdXJzb3IsIGJ1ZkxlbiAtIGN1cnNvcik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgaW50VG9PY3RhbFN0cmluZyhpbnQgaSkgewotICAgICAgICBpbnQgYnVmTGVuID0gMTE7ICAvLyBNYXggbnVtYmVyIG9mIG9jdGFsIGRpZ2l0cyBpbiBhbiBpbnQKLSAgICAgICAgY2hhcltdIGJ1ZiA9IG5ldyBjaGFyW2J1Zkxlbl07Ci0gICAgICAgIGludCBjdXJzb3IgPSBidWZMZW47Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgYnVmWy0tY3Vyc29yXSA9IERJR0lUU1tpICYgN107Ci0gICAgICAgIH0gd2hpbGUgKChpID4+Pj0gMykgIT0gMCk7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmLCBjdXJzb3IsIGJ1ZkxlbiAtIGN1cnNvcik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgbG9uZ1RvT2N0YWxTdHJpbmcobG9uZyB2KSB7Ci0gICAgICAgIGludCBpID0gKGludCkgdjsKLSAgICAgICAgaWYgKHYgPj0gMCAmJiBpID09IHYpIHsKLSAgICAgICAgICAgIHJldHVybiBpbnRUb09jdGFsU3RyaW5nKGkpOwotICAgICAgICB9Ci0gICAgICAgIGludCBidWZMZW4gPSAyMjsgIC8vIE1heCBudW1iZXIgb2Ygb2N0YWwgZGlnaXRzIGluIGEgbG9uZwotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbYnVmTGVuXTsKLSAgICAgICAgaW50IGN1cnNvciA9IGJ1ZkxlbjsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBidWZbLS1jdXJzb3JdID0gRElHSVRTWygoaW50KSB2KSAmIDddOwotICAgICAgICB9IHdoaWxlICgodiA+Pj49IDMpICE9IDApOwotCi0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGJ1ZiwgY3Vyc29yLCBidWZMZW4gLSBjdXJzb3IpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBzdHJpbmdPZihjaGFyLi4uIGFyZ3MpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYXJncywgMCwgYXJncy5sZW5ndGgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL09iamVjdHMuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL09iamVjdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIxZWY3Mi4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvamF2YS9PYmplY3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmphdmE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotCi0vKioKLSAqIERlZmluZXMgdGhlIHNhbWUgY2xhc3MgYXMgdGhlIGphdmEudXRpbC5PYmplY3RzIHdoaWNoIGlzIGFkZGVkIGluIEphdmEgNy4KLSAqIFRoaXMgaGFjayBtYWtlcyBpdCBwb3NzaWJsZSB0byBydW4gdGhlIEFuZHJvaWQgY29kZSB3aGljaCB1c2VzIEphdmEgNyBmZWF0dXJlcwotICogKEFQSSAxOCBhbmQgYmV5b25kKSB0byBydW4gb24gSmF2YSA2LgotICogPHAvPgotICogRXh0cmFjdGVkIGZyb20gQVBJIGxldmVsIDE5LCBmaWxlOgotICogcGxhdGZvcm0vbGliY29yZS9sdW5pL3NyYy9tYWluL2phdmEvamF2YS91dGlsL09iamVjdHMuamF2YQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgT2JqZWN0cyB7Ci0gIHByaXZhdGUgT2JqZWN0cygpIHt9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgMCBpZiB7QGNvZGUgYSA9PSBifSwgb3Ige0Bjb2RlIGMuY29tcGFyZShhLCBiKX0gb3RoZXJ3aXNlLgotICAgKiBUaGF0IGlzLCB0aGlzIG1ha2VzIHtAY29kZSBjfSBudWxsLXNhZmUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIDxUPiBpbnQgY29tcGFyZShUIGEsIFQgYiwgQ29tcGFyYXRvcjw/IHN1cGVyIFQ+IGMpIHsKLSAgICBpZiAoYSA9PSBiKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIGMuY29tcGFyZShhLCBiKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgYm90aCBhcmd1bWVudHMgYXJlIG51bGwsCi0gICAqIHRoZSByZXN1bHQgb2Yge0BsaW5rIEFycmF5cyNlcXVhbHN9IGlmIGJvdGggYXJndW1lbnRzIGFyZSBwcmltaXRpdmUgYXJyYXlzLAotICAgKiB0aGUgcmVzdWx0IG9mIHtAbGluayBBcnJheXMjZGVlcEVxdWFsc30gaWYgYm90aCBhcmd1bWVudHMgYXJlIGFycmF5cyBvZiByZWZlcmVuY2UgdHlwZXMsCi0gICAqIGFuZCB0aGUgcmVzdWx0IG9mIHtAbGluayAjZXF1YWxzfSBvdGhlcndpc2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGVlcEVxdWFscyhPYmplY3QgYSwgT2JqZWN0IGIpIHsKLSAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgewotICAgICAgcmV0dXJuIGEgPT0gYjsKLSAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBPYmplY3RbXSAmJiBiIGluc3RhbmNlb2YgT2JqZWN0W10pIHsKLSAgICAgIHJldHVybiBBcnJheXMuZGVlcEVxdWFscygoT2JqZWN0W10pIGEsIChPYmplY3RbXSkgYik7Ci0gICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgYm9vbGVhbltdICYmIGIgaW5zdGFuY2VvZiBib29sZWFuW10pIHsKLSAgICAgIHJldHVybiBBcnJheXMuZXF1YWxzKChib29sZWFuW10pIGEsIChib29sZWFuW10pIGIpOwotICAgIH0gZWxzZSBpZiAoYSBpbnN0YW5jZW9mIGJ5dGVbXSAmJiBiIGluc3RhbmNlb2YgYnl0ZVtdKSB7Ci0gICAgICByZXR1cm4gQXJyYXlzLmVxdWFscygoYnl0ZVtdKSBhLCAoYnl0ZVtdKSBiKTsKLSAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBjaGFyW10gJiYgYiBpbnN0YW5jZW9mIGNoYXJbXSkgewotICAgICAgcmV0dXJuIEFycmF5cy5lcXVhbHMoKGNoYXJbXSkgYSwgKGNoYXJbXSkgYik7Ci0gICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgZG91YmxlW10gJiYgYiBpbnN0YW5jZW9mIGRvdWJsZVtdKSB7Ci0gICAgICByZXR1cm4gQXJyYXlzLmVxdWFscygoZG91YmxlW10pIGEsIChkb3VibGVbXSkgYik7Ci0gICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgZmxvYXRbXSAmJiBiIGluc3RhbmNlb2YgZmxvYXRbXSkgewotICAgICAgcmV0dXJuIEFycmF5cy5lcXVhbHMoKGZsb2F0W10pIGEsIChmbG9hdFtdKSBiKTsKLSAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBpbnRbXSAmJiBiIGluc3RhbmNlb2YgaW50W10pIHsKLSAgICAgIHJldHVybiBBcnJheXMuZXF1YWxzKChpbnRbXSkgYSwgKGludFtdKSBiKTsKLSAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBsb25nW10gJiYgYiBpbnN0YW5jZW9mIGxvbmdbXSkgewotICAgICAgcmV0dXJuIEFycmF5cy5lcXVhbHMoKGxvbmdbXSkgYSwgKGxvbmdbXSkgYik7Ci0gICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2Ygc2hvcnRbXSAmJiBiIGluc3RhbmNlb2Ygc2hvcnRbXSkgewotICAgICAgcmV0dXJuIEFycmF5cy5lcXVhbHMoKHNob3J0W10pIGEsIChzaG9ydFtdKSBiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGEuZXF1YWxzKGIpOwotICB9Ci0KLSAgLyoqCi0gICAqIE51bGwtc2FmZSBlcXVpdmFsZW50IG9mIHtAY29kZSBhLmVxdWFscyhiKX0uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBhLCBPYmplY3QgYikgewotICAgIHJldHVybiAoYSA9PSBudWxsKSA/IChiID09IG51bGwpIDogYS5lcXVhbHMoYik7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3Ige0BsaW5rIEFycmF5cyNoYXNoQ29kZX0sIGFkZGluZyB2YXJhcmdzLgotICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbXB1dGUgYSBoYXNoIGNvZGUgZm9yIGFuIG9iamVjdCdzIGZpZWxkcyBhcyBmb2xsb3dzOgotICAgKiB7QGNvZGUgT2JqZWN0cy5oYXNoKGEsIGIsIGMpfS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50IGhhc2goT2JqZWN0Li4uIHZhbHVlcykgewotICAgIHJldHVybiBBcnJheXMuaGFzaENvZGUodmFsdWVzKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIDAgZm9yIG51bGwgb3Ige0Bjb2RlIG8uaGFzaENvZGUoKX0uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBoYXNoQ29kZShPYmplY3QgbykgewotICAgIHJldHVybiAobyA9PSBudWxsKSA/IDAgOiBvLmhhc2hDb2RlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB7QGNvZGUgb30gaWYgbm9uLW51bGwsIG9yIHRocm93cyB7QGNvZGUgTnVsbFBvaW50ZXJFeGNlcHRpb259LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyA8VD4gVCByZXF1aXJlTm9uTnVsbChUIG8pIHsKLSAgICBpZiAobyA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLSAgICB9Ci0gICAgcmV0dXJuIG87Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB7QGNvZGUgb30gaWYgbm9uLW51bGwsIG9yIHRocm93cyB7QGNvZGUgTnVsbFBvaW50ZXJFeGNlcHRpb259Ci0gICAqIHdpdGggdGhlIGdpdmVuIGRldGFpbCBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyA8VD4gVCByZXF1aXJlTm9uTnVsbChUIG8sIFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgaWYgKG8gPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKG1lc3NhZ2UpOwotICAgIH0KLSAgICByZXR1cm4gbzsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zICJudWxsIiBmb3IgbnVsbCBvciB7QGNvZGUgby50b1N0cmluZygpfS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKE9iamVjdCBvKSB7Ci0gICAgcmV0dXJuIChvID09IG51bGwpID8gIm51bGwiIDogby50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMge0Bjb2RlIG51bGxTdHJpbmd9IGZvciBudWxsIG9yIHtAY29kZSBvLnRvU3RyaW5nKCl9LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoT2JqZWN0IG8sIFN0cmluZyBudWxsU3RyaW5nKSB7Ci0gICAgcmV0dXJuIChvID09IG51bGwpID8gbnVsbFN0cmluZyA6IG8udG9TdHJpbmcoKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL1Vuc2FmZUJ5dGVTZXF1ZW5jZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2phdmEvVW5zYWZlQnl0ZVNlcXVlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMDkwODAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2phdmEvVW5zYWZlQnl0ZVNlcXVlbmNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuamF2YTsKLQotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLQotLyoqCi0gKiBEZWZpbmVzIHRoZSBzYW1lIGNsYXNzIGFzIHRoZSBqYXZhLmxhbmcuVW5zYWZlQnl0ZVNlcXVlbmNlIHdoaWNoIHdhcyBhZGRlZCBpbgotICogRGFsdmlrIFZNLiBUaGlzIGhhY2ssIHByb3ZpZGVzIGEgcmVwbGFjZW1lbnQgZm9yIHRoYXQgY2xhc3Mgd2hpY2ggY2FuJ3QgYmUKLSAqIGxvYWRlZCBpbiB0aGUgc3RhbmRhcmQgSlZNIHNpbmNlIGl0J3MgaW4gdGhlIGphdmEgcGFja2FnZSBhbmQgc3RhbmRhcmQgSlZNCi0gKiBkb2Vzbid0IGhhdmUgaXQuCi0gKiA8cC8+Ci0gKiBFeHRyYWN0ZWQgZnJvbSBBUEkgbGV2ZWwgMTgsIGZpbGU6Ci0gKiBwbGF0Zm9ybS9saWJjb3JlL2x1bmkvc3JjL21haW4vamF2YS9qYXZhL2xhbmcvVW5zYWZlQnl0ZVNlcXVlbmNlLmphdmEKLSAqLwotcHVibGljIGNsYXNzIFVuc2FmZUJ5dGVTZXF1ZW5jZSB7Ci0gICAgcHJpdmF0ZSBieXRlW10gYnl0ZXM7Ci0gICAgcHJpdmF0ZSBpbnQgY291bnQ7Ci0KLSAgICBwdWJsaWMgVW5zYWZlQnl0ZVNlcXVlbmNlKGludCBpbml0aWFsQ2FwYWNpdHkpIHsKLSAgICAgICAgdGhpcy5ieXRlcyA9IG5ldyBieXRlW2luaXRpYWxDYXBhY2l0eV07Ci0gICAgfQotCi0gICAgcHVibGljIGludCBzaXplKCkgewotICAgICAgICByZXR1cm4gY291bnQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIHdyaXRlIHBvaW50ZXIgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5jZSwKLSAgICAgKiBidXQgd2l0aG91dCByZXNpemluZyBvciByZWFsbG9jYXRpbmcgdGhlIGJ1ZmZlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZXdpbmQoKSB7Ci0gICAgICAgIGNvdW50ID0gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB3cml0ZShieXRlW10gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7Ci0gICAgICAgIGlmIChjb3VudCArIGxlbmd0aCA+PSBieXRlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGJ5dGVbXSBuZXdCeXRlcyA9IG5ldyBieXRlWyhjb3VudCArIGxlbmd0aCkgKiAyXTsKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYnl0ZXMsIDAsIG5ld0J5dGVzLCAwLCBjb3VudCk7Ci0gICAgICAgICAgICBieXRlcyA9IG5ld0J5dGVzOwotICAgICAgICB9Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYnVmZmVyLCBvZmZzZXQsIGJ5dGVzLCBjb3VudCwgbGVuZ3RoKTsKLSAgICAgICAgY291bnQgKz0gbGVuZ3RoOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdyaXRlKGludCBiKSB7Ci0gICAgICAgIGlmIChjb3VudCA9PSBieXRlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGJ5dGVbXSBuZXdCeXRlcyA9IG5ldyBieXRlW2NvdW50ICogMl07Ci0gICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ5dGVzLCAwLCBuZXdCeXRlcywgMCwgY291bnQpOwotICAgICAgICAgICAgYnl0ZXMgPSBuZXdCeXRlczsKLSAgICAgICAgfQotICAgICAgICBieXRlc1tjb3VudCsrXSA9IChieXRlKSBiOwotICAgIH0KLQotICAgIHB1YmxpYyBieXRlW10gdG9CeXRlQXJyYXkoKSB7Ci0gICAgICAgIGlmIChjb3VudCA9PSBieXRlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBieXRlczsKLSAgICAgICAgfQotICAgICAgICBieXRlW10gcmVzdWx0ID0gbmV3IGJ5dGVbY291bnRdOwotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ5dGVzLCAwLCByZXN1bHQsIDAsIGNvdW50KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKENoYXJzZXQgY3MpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnl0ZXMsIDAsIGNvdW50LCBjcyk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUFuYWx5emVyVGVzdC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUFuYWx5emVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDVmYzlkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Bc21BbmFseXplclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRBcnJheUVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuQXNtQW5hbHl6ZXIuRGVwZW5kZW5jeVZpc2l0b3I7Ci0KLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5DbGFzc1JlYWRlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOwotCi0vKioKLSAqIFVuaXQgdGVzdHMgZm9yIHNvbWUgbWV0aG9kcyBvZiB7QGxpbmsgQXNtQW5hbHl6ZXJ9LgotICovCi1wdWJsaWMgY2xhc3MgQXNtQW5hbHl6ZXJUZXN0IHsKLQotICAgIHByaXZhdGUgTW9ja0xvZyBtTG9nOwotICAgIHByaXZhdGUgQXJyYXlMaXN0PFN0cmluZz4gbU9zSmFyUGF0aDsKLSAgICBwcml2YXRlIEFzbUFuYWx5emVyIG1BYTsKLQotICAgIEBCZWZvcmUKLSAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBtTG9nID0gbmV3IE1vY2tMb2coKTsKLSAgICAgICAgVVJMIHVybCA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlKCJkYXRhL21vY2tfYW5kcm9pZC5qYXIiKTsKLQotICAgICAgICBtT3NKYXJQYXRoID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgIG1Pc0phclBhdGguYWRkKHVybC5nZXRGaWxlKCkpOwotCi0gICAgICAgIFNldDxTdHJpbmc+IGV4Y2x1ZGVDbGFzc2VzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigxKTsKLSAgICAgICAgZXhjbHVkZUNsYXNzZXMuYWRkKCJqYXZhLmxhbmcuSmF2YUNsYXNzIik7Ci0gICAgICAgIG1BYSA9IG5ldyBBc21BbmFseXplcihtTG9nLCBtT3NKYXJQYXRoLCBudWxsIC8qIGdlbiAqLywKLSAgICAgICAgICAgICAgICBudWxsIC8qIGRlcml2ZUZyb20gKi8sIG51bGwgLyogaW5jbHVkZUdsb2JzICovLCBleGNsdWRlQ2xhc3Nlcyk7Ci0gICAgfQotCi0gICAgQEFmdGVyCi0gICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RQYXJzZVppcCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBtYXAgPSBtQWEucGFyc2VaaXAobU9zSmFyUGF0aCk7Ci0KLSAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAiamF2YS5sYW5nLkphdmFDbGFzcyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC5kdW1teS5Jbm5lclRlc3QiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQuZHVtbXkuSW5uZXJUZXN0JERlcml2aW5nQ2xhc3MiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQuZHVtbXkuSW5uZXJUZXN0JE15R2VuZXJpY3MxIiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLmR1bW15LklubmVyVGVzdCRNeUludEVudW0iLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQuZHVtbXkuSW5uZXJUZXN0JE15U3RhdGljSW5uZXJDbGFzcyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC5kdW1teS5Jbm5lclRlc3QkTm90U3RhdGljSW5uZXIxIiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLmR1bW15LklubmVyVGVzdCROb3RTdGF0aWNJbm5lcjIiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3IiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwIiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwJExheW91dFBhcmFtcyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC52aWV3LlZpZXdHcm91cCRNYXJnaW5MYXlvdXRQYXJhbXMiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dCIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0JExheW91dFBhcmFtcyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC53aWRnZXQuVGFibGVMYXlvdXQiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQud2lkZ2V0LlRhYmxlTGF5b3V0JExheW91dFBhcmFtcyIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBtYXAua2V5U2V0KCkudG9BcnJheSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kQ2xhc3MoKSB0aHJvd3MgSU9FeGNlcHRpb24sIExvZ0Fib3J0RXhjZXB0aW9uIHsKLSAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHppcENsYXNzZXMgPSBtQWEucGFyc2VaaXAobU9zSmFyUGF0aCk7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZm91bmQgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotCi0gICAgICAgIENsYXNzUmVhZGVyIGNyID0gbUFhLmZpbmRDbGFzcygibW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwJExheW91dFBhcmFtcyIsCi0gICAgICAgICAgICAgICAgemlwQ2xhc3NlcywgZm91bmQpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoY3IpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1vY2tfYW5kcm9pZC92aWV3L1ZpZXdHcm91cCRMYXlvdXRQYXJhbXMiLCBjci5nZXRDbGFzc05hbWUoKSk7Ci0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbXSB7ICJtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAkTGF5b3V0UGFyYW1zIiB9LAotICAgICAgICAgICAgICAgIGZvdW5kLmtleVNldCgpLnRvQXJyYXkoKSk7Ci0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBDbGFzc1JlYWRlcltdIHsgY3IgfSwgZm91bmQudmFsdWVzKCkudG9BcnJheSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kR2xvYnMoKSB0aHJvd3MgSU9FeGNlcHRpb24sIExvZ0Fib3J0RXhjZXB0aW9uIHsKLSAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHppcENsYXNzZXMgPSBtQWEucGFyc2VaaXAobU9zSmFyUGF0aCk7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZm91bmQgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotCi0gICAgICAgIC8vIHRoaXMgbWF0Y2hlcyBjbGFzc2VzLCBhIHBhY2thZ2UgbWF0Y2ggcmV0dXJucyBub3RoaW5nCi0gICAgICAgIGZvdW5kLmNsZWFyKCk7Ci0gICAgICAgIG1BYS5maW5kR2xvYnMoIm1vY2tfYW5kcm9pZC52aWV3IiwgemlwQ2xhc3NlcywgZm91bmQpOwotCi0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbXSB7IH0sCi0gICAgICAgICAgICBmb3VuZC5rZXlTZXQoKS50b0FycmF5KCkpOwotCi0gICAgICAgIC8vIGEgY29tcGxleCBnbG9iIHNlYXJjaC4gKiBpcyBhIHNlYXJjaCBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBuYW1lcywgbm90IGRvdHMKLSAgICAgICAgbUFhLmZpbmRHbG9icygibW9ja19hbmRyb2lkLiouKkdyb3VwJCpMYXlvdXQqIiwgemlwQ2xhc3NlcywgZm91bmQpOwotCi0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC52aWV3LlZpZXdHcm91cCRMYXlvdXRQYXJhbXMiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAkTWFyZ2luTGF5b3V0UGFyYW1zIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGZvdW5kLmtleVNldCgpLnRvQXJyYXkoKSk7Ci0KLSAgICAgICAgLy8gYSBjb21wbGV4IGdsb2Igc2VhcmNoLiAqKiBpcyBhIHNlYXJjaCBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBuYW1lcyBpbmNsdWRpbmcgZG90cwotICAgICAgICBtQWEuZmluZEdsb2JzKCJtb2NrX2FuZHJvaWQuKipHcm91cCoiLCB6aXBDbGFzc2VzLCBmb3VuZCk7Ci0KLSAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwIiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwJExheW91dFBhcmFtcyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC52aWV3LlZpZXdHcm91cCRNYXJnaW5MYXlvdXRQYXJhbXMiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZm91bmQua2V5U2V0KCkudG9BcnJheSgpKTsKLQotICAgICAgICAvLyBtYXRjaGVzIGEgc2luZ2xlIGNsYXNzCi0gICAgICAgIGZvdW5kLmNsZWFyKCk7Ci0gICAgICAgIG1BYS5maW5kR2xvYnMoIm1vY2tfYW5kcm9pZC52aWV3LlZpZXciLCB6aXBDbGFzc2VzLCBmb3VuZCk7Ci0KLSAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlldyIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBmb3VuZC5rZXlTZXQoKS50b0FycmF5KCkpOwotCi0gICAgICAgIC8vIG1hdGNoZXMgZXZlcnl0aW5nIGluc2lkZSB0aGUgZ2l2ZW4gcGFja2FnZSBidXQgbm90IHN1Yi1wYWNrYWdlcwotICAgICAgICBmb3VuZC5jbGVhcigpOwotICAgICAgICBtQWEuZmluZEdsb2JzKCJtb2NrX2FuZHJvaWQudmlldy4qIiwgemlwQ2xhc3NlcywgZm91bmQpOwotCi0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC52aWV3LlZpZXciLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAkTGF5b3V0UGFyYW1zIiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwJE1hcmdpbkxheW91dFBhcmFtcyIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBmb3VuZC5rZXlTZXQoKS50b0FycmF5KCkpOwotCi0gICAgICAgIGZvciAoU3RyaW5nIGtleSA6IGZvdW5kLmtleVNldCgpKSB7Ci0gICAgICAgICAgICBDbGFzc1JlYWRlciB2YWx1ZSA9IGZvdW5kLmdldChrZXkpOwotICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbCgiTm8gdmFsdWUgZm9yICIgKyBrZXksIHZhbHVlKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhrZXksIEFzbUFuYWx5emVyLmNsYXNzUmVhZGVyVG9DbGFzc05hbWUodmFsdWUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdEZpbmRDbGFzc2VzRGVyaXZpbmdGcm9tKCkgdGhyb3dzIExvZ0Fib3J0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzID0gbUFhLnBhcnNlWmlwKG1Pc0phclBhdGgpOwotICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGZvdW5kID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLQotICAgICAgICBtQWEuZmluZENsYXNzZXNEZXJpdmluZ0Zyb20oIm1vY2tfYW5kcm9pZC52aWV3LlZpZXciLCB6aXBDbGFzc2VzLCBmb3VuZCk7Ci0KLSAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlldyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC52aWV3LlZpZXdHcm91cCIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0IiwKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLndpZGdldC5UYWJsZUxheW91dCIsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZm91bmQua2V5U2V0KCkudG9BcnJheSgpKTsKLQotICAgICAgICBmb3IgKFN0cmluZyBrZXkgOiBmb3VuZC5rZXlTZXQoKSkgewotICAgICAgICAgICAgQ2xhc3NSZWFkZXIgdmFsdWUgPSBmb3VuZC5nZXQoa2V5KTsKLSAgICAgICAgICAgIGFzc2VydE5vdE51bGwoIk5vIHZhbHVlIGZvciAiICsga2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoa2V5LCBBc21BbmFseXplci5jbGFzc1JlYWRlclRvQ2xhc3NOYW1lKHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3REZXBlbmRlbmN5VmlzaXRvcigpIHRocm93cyBJT0V4Y2VwdGlvbiwgTG9nQWJvcnRFeGNlcHRpb24gewotICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gemlwQ2xhc3NlcyA9IG1BYS5wYXJzZVppcChtT3NKYXJQYXRoKTsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBrZWVwID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBuZXdfa2VlcCA9IG5ldyBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+KCk7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gaW5fZGVwcyA9IG5ldyBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+KCk7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gb3V0X2RlcHMgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotCi0gICAgICAgIENsYXNzUmVhZGVyIGNyID0gbUFhLmZpbmRDbGFzcygibW9ja19hbmRyb2lkLndpZGdldC5UYWJsZUxheW91dCIsIHppcENsYXNzZXMsIGtlZXApOwotICAgICAgICBEZXBlbmRlbmN5VmlzaXRvciB2aXNpdG9yID0gbUFhLmdldFZpc2l0b3IoemlwQ2xhc3Nlcywga2VlcCwgbmV3X2tlZXAsIGluX2RlcHMsIG91dF9kZXBzKTsKLQotICAgICAgICAvLyBnZXQgZmlyc3QgbGV2ZWwgZGVwZW5kZW5jaWVzCi0gICAgICAgIGNyLmFjY2VwdCh2aXNpdG9yLCAwIC8qIGZsYWdzICovKTsKLQotICAgICAgICBhc3NlcnRBcnJheUVxdWFscyhuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQud2lkZ2V0LlRhYmxlTGF5b3V0JExheW91dFBhcmFtcyIsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgb3V0X2RlcHMua2V5U2V0KCkudG9BcnJheSgpKTsKLQotICAgICAgICBpbl9kZXBzLnB1dEFsbChvdXRfZGVwcyk7Ci0gICAgICAgIG91dF9kZXBzLmNsZWFyKCk7Ci0KLSAgICAgICAgLy8gZ2V0IHNlY29uZCBsZXZlbCBkZXBlbmRlbmNpZXMKLSAgICAgICAgZm9yIChDbGFzc1JlYWRlciBjcjIgOiBpbl9kZXBzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBjcjIuYWNjZXB0KHZpc2l0b3IsIDAgLyogZmxhZ3MgKi8pOwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkLnZpZXcuVmlldyIsCi0gICAgICAgICAgICAgICAgIm1vY2tfYW5kcm9pZC52aWV3LlZpZXdHcm91cCRMYXlvdXRQYXJhbXMiLAotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAkTWFyZ2luTGF5b3V0UGFyYW1zIiwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBvdXRfZGVwcy5rZXlTZXQoKS50b0FycmF5KCkpOwotCi0gICAgICAgIGluX2RlcHMucHV0QWxsKG91dF9kZXBzKTsKLSAgICAgICAgb3V0X2RlcHMuY2xlYXIoKTsKLQotICAgICAgICAvLyBnZXQgdGhpcmQgbGV2ZWwgZGVwZW5kZW5jaWVzICh0aGVyZSBhcmUgbm9uZSkKLSAgICAgICAgZm9yIChDbGFzc1JlYWRlciBjcjIgOiBpbl9kZXBzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBjcjIuYWNjZXB0KHZpc2l0b3IsIDAgLyogZmxhZ3MgKi8pOwotICAgICAgICB9Ci0gICAgICAgIGtlZXAucHV0QWxsKG5ld19rZWVwKTsKLQotICAgICAgICBhc3NlcnRBcnJheUVxdWFscyhuZXcgU3RyaW5nW10geyB9LCBvdXRfZGVwcy5rZXlTZXQoKS50b0FycmF5KCkpOwotICAgICAgICBhc3NlcnRBcnJheUVxdWFscyhuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQud2lkZ2V0LlRhYmxlTGF5b3V0IiwKLSAgICAgICAgfSwga2VlcC5rZXlTZXQoKS50b0FycmF5KCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Bc21HZW5lcmF0b3JUZXN0LmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQXNtR2VuZXJhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTI3MTczLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Bc21HZW5lcmF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRBcnJheUVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotCi1pbXBvcnQgb3JnLmp1bml0LkFmdGVyOwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NSZWFkZXI7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkZpZWxkVmlzaXRvcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5NZXRob2RWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk9wY29kZXM7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uVHlwZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEZpbGU7Ci0KLS8qKgotICogVW5pdCB0ZXN0cyBmb3Igc29tZSBtZXRob2RzIG9mIHtAbGluayBBc21HZW5lcmF0b3J9LgotICovCi1wdWJsaWMgY2xhc3MgQXNtR2VuZXJhdG9yVGVzdCB7Ci0KLSAgICBwcml2YXRlIE1vY2tMb2cgbUxvZzsKLSAgICBwcml2YXRlIEFycmF5TGlzdDxTdHJpbmc+IG1Pc0phclBhdGg7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbU9zRGVzdEphcjsKLSAgICBwcml2YXRlIEZpbGUgbVRlbXBGaWxlOwotCi0gICAgLy8gQVNNIGludGVybmFsIG5hbWUgZm9yIHRoZSB0aGUgY2xhc3MgaW4gamF2YSBwYWNrYWdlIHRoYXQgc2hvdWxkIGJlIHJlZmFjdG9yZWQuCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpBVkFfQ0xBU1NfTkFNRSA9ICJqYXZhL2xhbmcvSmF2YUNsYXNzIjsKLQotICAgIEBCZWZvcmUKLSAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBtTG9nID0gbmV3IE1vY2tMb2coKTsKLSAgICAgICAgVVJMIHVybCA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlKCJkYXRhL21vY2tfYW5kcm9pZC5qYXIiKTsKLQotICAgICAgICBtT3NKYXJQYXRoID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgIG1Pc0phclBhdGguYWRkKHVybC5nZXRGaWxlKCkpOwotCi0gICAgICAgIG1UZW1wRmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoIm1vY2siLCAiLmphciIpOwotICAgICAgICBtT3NEZXN0SmFyID0gbVRlbXBGaWxlLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgICBtVGVtcEZpbGUuZGVsZXRlT25FeGl0KCk7Ci0gICAgfQotCi0gICAgQEFmdGVyCi0gICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKG1UZW1wRmlsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtVGVtcEZpbGUuZGVsZXRlKCk7Ci0gICAgICAgICAgICBtVGVtcEZpbGUgPSBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NSZW5hbWluZygpIHRocm93cyBJT0V4Y2VwdGlvbiwgTG9nQWJvcnRFeGNlcHRpb24gewotCi0gICAgICAgIElDcmVhdGVJbmZvIGNpID0gbmV3IElDcmVhdGVJbmZvKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQ2xhc3M8Pz5bXSBnZXRJbmplY3RlZENsYXNzZXMoKSB7Ci0gICAgICAgICAgICAgICAgLy8gY2xhc3NlcyB0byBpbmplY3QgaW4gdGhlIGZpbmFsIEpBUgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2xhc3M8Pz5bMF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldERlbGVnYXRlTWV0aG9kcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZWdhdGVDbGFzc05hdGl2ZXMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldE92ZXJyaWRkZW5NZXRob2RzKCkgewotICAgICAgICAgICAgICAgIC8vIG1ldGhvZHMgdG8gZm9yY2Ugb3ZlcnJpZGUKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0UmVuYW1lZENsYXNzZXMoKSB7Ci0gICAgICAgICAgICAgICAgLy8gY2xhc3NlcyB0byByZW5hbWUgKHNvIHRoYXQgd2UgY2FuIHJlcGxhY2UgdGhlbSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb2NrX2FuZHJvaWQudmlldy5WaWV3IiwgIm1vY2tfYW5kcm9pZC52aWV3Ll9PcmlnaW5hbF9WaWV3IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJub3QuYW4uYWN0dWFsLkNsYXNzTmFtZSIsICJhbm90ZXIuZmFrZS5OZXdDbGFzc05hbWUiLAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldEphdmFQa2dDbGFzc2VzKCkgewotICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZXRlUmV0dXJucygpIHsKLSAgICAgICAgICAgICAgICAgLy8gbWV0aG9kcyBkZWxldGVkIGZyb20gdGhlaXIgcmV0dXJuIHR5cGUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgQXNtR2VuZXJhdG9yIGFnZW4gPSBuZXcgQXNtR2VuZXJhdG9yKG1Mb2csIG1Pc0Rlc3RKYXIsIGNpKTsKLQotICAgICAgICBBc21BbmFseXplciBhYSA9IG5ldyBBc21BbmFseXplcihtTG9nLCBtT3NKYXJQYXRoLCBhZ2VuLAotICAgICAgICAgICAgICAgIG51bGwsICAgICAgICAgICAgICAgICAvLyBkZXJpdmVkIGZyb20KLSAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAgICAgICAgLy8gaW5jbHVkZSBjbGFzc2VzCi0gICAgICAgICAgICAgICAgICAgICIqKiIKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIG5ldyBIYXNoU2V0PFN0cmluZz4oMCkgLyogZXhjbHVkZWQgY2xhc3NlcyAqLyk7Ci0gICAgICAgIGFhLmFuYWx5emUoKTsKLSAgICAgICAgYWdlbi5nZW5lcmF0ZSgpOwotCi0gICAgICAgIFNldDxTdHJpbmc+IG5vdFJlbmFtZWQgPSBhZ2VuLmdldENsYXNzZXNOb3RSZW5hbWVkKCk7Ci0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbXSB7ICJub3QvYW4vYWN0dWFsL0NsYXNzTmFtZSIgfSwgbm90UmVuYW1lZC50b0FycmF5KCkpOwotCi0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q2xhc3NSZWZhY3RvcmluZygpIHRocm93cyBJT0V4Y2VwdGlvbiwgTG9nQWJvcnRFeGNlcHRpb24gewotICAgICAgICBJQ3JlYXRlSW5mbyBjaSA9IG5ldyBJQ3JlYXRlSW5mbygpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIENsYXNzPD8+W10gZ2V0SW5qZWN0ZWRDbGFzc2VzKCkgewotICAgICAgICAgICAgICAgIC8vIGNsYXNzZXMgdG8gaW5qZWN0IGluIHRoZSBmaW5hbCBKQVIKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsYXNzPD8+W10gewotICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5kYXRhY2xhc3MuSmF2YUNsYXNzLmNsYXNzCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZWdhdGVNZXRob2RzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXREZWxlZ2F0ZUNsYXNzTmF0aXZlcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0T3ZlcnJpZGRlbk1ldGhvZHMoKSB7Ci0gICAgICAgICAgICAgICAgLy8gbWV0aG9kcyB0byBmb3JjZSBvdmVycmlkZQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRSZW5hbWVkQ2xhc3NlcygpIHsKLSAgICAgICAgICAgICAgICAvLyBjbGFzc2VzIHRvIHJlbmFtZSAoc28gdGhhdCB3ZSBjYW4gcmVwbGFjZSB0aGVtKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRKYXZhUGtnQ2xhc3NlcygpIHsKLSAgICAgICAgICAgICAvLyBjbGFzc2VzIHRvIHJlZmFjdG9yIChzbyB0aGF0IHdlIGNhbiByZXBsYWNlIHRoZW0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAiamF2YS5sYW5nLkphdmFDbGFzcyIsICJjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLmRhdGFjbGFzcy5KYXZhQ2xhc3MiLAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldERlbGV0ZVJldHVybnMoKSB7Ci0gICAgICAgICAgICAgICAgIC8vIG1ldGhvZHMgZGVsZXRlZCBmcm9tIHRoZWlyIHJldHVybiB0eXBlLgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIEFzbUdlbmVyYXRvciBhZ2VuID0gbmV3IEFzbUdlbmVyYXRvcihtTG9nLCBtT3NEZXN0SmFyLCBjaSk7Ci0KLSAgICAgICAgQXNtQW5hbHl6ZXIgYWEgPSBuZXcgQXNtQW5hbHl6ZXIobUxvZywgbU9zSmFyUGF0aCwgYWdlbiwKLSAgICAgICAgICAgICAgICBudWxsLCAgICAgICAgICAgICAgICAgLy8gZGVyaXZlZCBmcm9tCi0gICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgICAgICAgIC8vIGluY2x1ZGUgY2xhc3NlcwotICAgICAgICAgICAgICAgICAgICAiKioiCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBuZXcgSGFzaFNldDxTdHJpbmc+KDEpKTsKLSAgICAgICAgYWEuYW5hbHl6ZSgpOwotICAgICAgICBhZ2VuLmdlbmVyYXRlKCk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBvdXRwdXQgPSBwYXJzZVppcChtT3NEZXN0SmFyKTsKLSAgICAgICAgYm9vbGVhbiBpbmplY3RlZENsYXNzRm91bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChDbGFzc1JlYWRlciBjcjogb3V0cHV0LnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBUZXN0Q2xhc3NWaXNpdG9yIGN2ID0gbmV3IFRlc3RDbGFzc1Zpc2l0b3IoKTsKLSAgICAgICAgICAgIGNyLmFjY2VwdChjdiwgMCk7Ci0gICAgICAgICAgICBpbmplY3RlZENsYXNzRm91bmQgfD0gY3YubUluamVjdGVkQ2xhc3NGb3VuZDsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRUcnVlKGluamVjdGVkQ2xhc3NGb3VuZCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBNYXA8U3RyaW5nLENsYXNzUmVhZGVyPiBwYXJzZVppcChTdHJpbmcgamFyUGF0aCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBjbGFzc2VzID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLQotICAgICAgICAgICAgWmlwRmlsZSB6aXAgPSBuZXcgWmlwRmlsZShqYXJQYXRoKTsKLSAgICAgICAgICAgIEVudW1lcmF0aW9uPD8gZXh0ZW5kcyBaaXBFbnRyeT4gZW50cmllcyA9IHppcC5lbnRyaWVzKCk7Ci0gICAgICAgICAgICBaaXBFbnRyeSBlbnRyeTsKLSAgICAgICAgICAgIHdoaWxlIChlbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyaWVzLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmdldE5hbWUoKS5lbmRzV2l0aCgiLmNsYXNzIikpIHsKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBuZXcgQ2xhc3NSZWFkZXIoemlwLmdldElucHV0U3RyZWFtKGVudHJ5KSk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBjbGFzc1JlYWRlclRvQ2xhc3NOYW1lKGNyKTsKLSAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXQoY2xhc3NOYW1lLCBjcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjbGFzc2VzOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIGNsYXNzUmVhZGVyVG9DbGFzc05hbWUoQ2xhc3NSZWFkZXIgY2xhc3NSZWFkZXIpIHsKLSAgICAgICAgaWYgKGNsYXNzUmVhZGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGNsYXNzUmVhZGVyLmdldENsYXNzTmFtZSgpLnJlcGxhY2UoJy8nLCAnLicpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBUZXN0Q2xhc3NWaXNpdG9yIGV4dGVuZHMgQ2xhc3NWaXNpdG9yIHsKLQotICAgICAgICBib29sZWFuIG1JbmplY3RlZENsYXNzRm91bmQgPSBmYWxzZTsKLQotICAgICAgICBUZXN0Q2xhc3NWaXNpdG9yKCkgewotICAgICAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdChpbnQgdmVyc2lvbiwgaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBzaWduYXR1cmUsCi0gICAgICAgICAgICAgICAgU3RyaW5nIHN1cGVyTmFtZSwgU3RyaW5nW10gaW50ZXJmYWNlcykgewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSghZ2V0QmFzZShuYW1lKS5lcXVhbHMoSkFWQV9DTEFTU19OQU1FKSk7Ci0gICAgICAgICAgICBpZiAobmFtZS5lcXVhbHMoImNvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvZGF0YWNsYXNzL0phdmFDbGFzcyIpKSB7Ci0gICAgICAgICAgICAgICAgbUluamVjdGVkQ2xhc3NGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdXBlci52aXNpdCh2ZXJzaW9uLCBhY2Nlc3MsIG5hbWUsIHNpZ25hdHVyZSwgc3VwZXJOYW1lLCBpbnRlcmZhY2VzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgRmllbGRWaXNpdG9yIHZpc2l0RmllbGQoaW50IGFjY2VzcywgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAotICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmUsIE9iamVjdCB2YWx1ZSkgewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0VHlwZShUeXBlLmdldFR5cGUoZGVzYykpKTsKLSAgICAgICAgICAgIHJldHVybiBzdXBlci52aXNpdEZpZWxkKGFjY2VzcywgbmFtZSwgZGVzYywgc2lnbmF0dXJlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygiaGlkaW5nIikKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBNZXRob2RWaXNpdG9yIHZpc2l0TWV0aG9kKGludCBhY2Nlc3MsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYywKLSAgICAgICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlLCBTdHJpbmdbXSBleGNlcHRpb25zKSB7Ci0gICAgICAgICAgICBNZXRob2RWaXNpdG9yIG12ID0gc3VwZXIudmlzaXRNZXRob2QoYWNjZXNzLCBuYW1lLCBkZXNjLCBzaWduYXR1cmUsIGV4Y2VwdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBNZXRob2RWaXNpdG9yKE9wY29kZXMuQVNNNCwgbXYpIHsKLQotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RmllbGRJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGVzYykgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKCFnZXRCYXNlKG93bmVyKS5lcXVhbHMoSkFWQV9DTEFTU19OQU1FKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydFRydWUodGVzdFR5cGUoVHlwZS5nZXRUeXBlKGRlc2MpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN1cGVyLnZpc2l0RmllbGRJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TGRjSW5zbihPYmplY3QgY3N0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjc3QgaW5zdGFuY2VvZiBUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHRlc3RUeXBlKChUeXBlKWNzdCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHN1cGVyLnZpc2l0TGRjSW5zbihjc3QpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0VHlwZUluc24oaW50IG9wY29kZSwgU3RyaW5nIHR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZSghZ2V0QmFzZSh0eXBlKS5lcXVhbHMoSkFWQV9DTEFTU19OQU1FKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN1cGVyLnZpc2l0VHlwZUluc24ob3Bjb2RlLCB0eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdE1ldGhvZEluc24oaW50IG9wY29kZSwgU3RyaW5nIG93bmVyLCBTdHJpbmcgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZXNjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydFRydWUoIWdldEJhc2Uob3duZXIpLmVxdWFscyhKQVZBX0NMQVNTX05BTUUpKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0VHlwZShUeXBlLmdldFR5cGUoZGVzYykpKTsKLSAgICAgICAgICAgICAgICAgICAgc3VwZXIudmlzaXRNZXRob2RJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0VHlwZShUeXBlIHR5cGUpIHsKLSAgICAgICAgICAgIGludCBzb3J0ID0gdHlwZS5nZXRTb3J0KCk7Ci0gICAgICAgICAgICBpZiAoc29ydCA9PSBUeXBlLk9CSkVDVCkgewotICAgICAgICAgICAgICAgIGFzc2VydFRydWUoIWdldEJhc2UodHlwZS5nZXRJbnRlcm5hbE5hbWUoKSkuZXF1YWxzKEpBVkFfQ0xBU1NfTkFNRSkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzb3J0ID09IFR5cGUuQVJSQVkpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKCFnZXRCYXNlKHR5cGUuZ2V0RWxlbWVudFR5cGUoKS5nZXRJbnRlcm5hbE5hbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5lcXVhbHMoSkFWQV9DTEFTU19OQU1FKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNvcnQgPT0gVHlwZS5NRVRIT0QpIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIHIgPSB0cnVlOwotICAgICAgICAgICAgICAgIGZvciAoVHlwZSB0IDogdHlwZS5nZXRBcmd1bWVudFR5cGVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgciAmPSB0ZXN0VHlwZSh0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHIgJiB0ZXN0VHlwZSh0eXBlLmdldFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIGdldEJhc2UoU3RyaW5nIGNsYXNzTmFtZSkgewotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgcG9zID0gY2xhc3NOYW1lLmluZGV4T2YoJyQnKTsKLSAgICAgICAgICAgIGlmIChwb3MgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5zdWJzdHJpbmcoMCwgcG9zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ2xhc3NIYXNOYXRpdmVWaXNpdG9yVGVzdC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0NsYXNzSGFzTmF0aXZlVmlzaXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEzNWM0MC4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ2xhc3NIYXNOYXRpdmVWaXNpdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC4qOwotCi1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NSZWFkZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLQotLyoqCi0gKiBUZXN0cyB7QGxpbmsgQ2xhc3NIYXNOYXRpdmVWaXNpdG9yfS4KLSAqLwotcHVibGljIGNsYXNzIENsYXNzSGFzTmF0aXZlVmlzaXRvclRlc3QgewotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0SGFzTmF0aXZlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgTW9ja0NsYXNzSGFzTmF0aXZlVmlzaXRvciBjdiA9IG5ldyBNb2NrQ2xhc3NIYXNOYXRpdmVWaXNpdG9yKCk7Ci0gICAgICAgIFN0cmluZyBjbGFzc05hbWUgPQotICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCkgKyAiJCIgKyBDbGFzc1dpdGhOYXRpdmUuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpOwotICAgICAgICBDbGFzc1JlYWRlciBjciA9IG5ldyBDbGFzc1JlYWRlcihjbGFzc05hbWUpOwotCi0gICAgICAgIGNyLmFjY2VwdChjdiwgMCAvKiBmbGFncyAqLyk7Ci0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbXSB7ICJuYXRpdmVfbWV0aG9kIiB9LCBjdi5nZXRNZXRob2RzRm91bmQoKSk7Ci0gICAgICAgIGFzc2VydFRydWUoY3YuaGFzTmF0aXZlTWV0aG9kcygpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RIYXNOb05hdGl2ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIE1vY2tDbGFzc0hhc05hdGl2ZVZpc2l0b3IgY3YgPSBuZXcgTW9ja0NsYXNzSGFzTmF0aXZlVmlzaXRvcigpOwotICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0KLSAgICAgICAgICAgIHRoaXMuZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCkgKyAiJCIgKyBDbGFzc1dpdGhvdXROYXRpdmUuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpOwotICAgICAgICBDbGFzc1JlYWRlciBjciA9IG5ldyBDbGFzc1JlYWRlcihjbGFzc05hbWUpOwotCi0gICAgICAgIGNyLmFjY2VwdChjdiwgMCAvKiBmbGFncyAqLyk7Ci0gICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBTdHJpbmdbMF0sIGN2LmdldE1ldGhvZHNGb3VuZCgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UoY3YuaGFzTmF0aXZlTWV0aG9kcygpKTsKLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIE92ZXJyaWRlcyB7QGxpbmsgQ2xhc3NIYXNOYXRpdmVWaXNpdG9yfSB0byBjb2xsZWMgdGhlIG5hbWUgb2YgdGhlIG5hdGl2ZSBtZXRob2RzIGZvdW5kLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE1vY2tDbGFzc0hhc05hdGl2ZVZpc2l0b3IgZXh0ZW5kcyBDbGFzc0hhc05hdGl2ZVZpc2l0b3IgewotICAgICAgICBwcml2YXRlIEFycmF5TGlzdDxTdHJpbmc+IG1NZXRob2RzRm91bmQgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQotICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0TWV0aG9kc0ZvdW5kKCkgewotICAgICAgICAgICAgcmV0dXJuIG1NZXRob2RzRm91bmQudG9BcnJheShuZXcgU3RyaW5nW21NZXRob2RzRm91bmQuc2l6ZSgpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgc2V0SGFzTmF0aXZlTWV0aG9kcyhib29sZWFuIGhhc05hdGl2ZU1ldGhvZHMsIFN0cmluZyBtZXRob2ROYW1lKSB7Ci0gICAgICAgICAgICBpZiAoaGFzTmF0aXZlTWV0aG9kcykgewotICAgICAgICAgICAgICAgIG1NZXRob2RzRm91bmQuYWRkKG1ldGhvZE5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3VwZXIuc2V0SGFzTmF0aXZlTWV0aG9kcyhoYXNOYXRpdmVNZXRob2RzLCBtZXRob2ROYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIER1bW15IHRlc3QgY2xhc3Mgd2l0aCBhIG5hdGl2ZSBtZXRob2QuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBDbGFzc1dpdGhOYXRpdmUgewotICAgICAgICBwdWJsaWMgQ2xhc3NXaXRoTmF0aXZlKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgY2FsbFRoZU5hdGl2ZU1ldGhvZCgpIHsKLSAgICAgICAgICAgIG5hdGl2ZV9tZXRob2QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlX21ldGhvZCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIER1bW15IHRlc3QgY2xhc3Mgd2l0aCBubyBuYXRpdmUgbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2xhc3NXaXRob3V0TmF0aXZlIHsKLSAgICAgICAgcHVibGljIENsYXNzV2l0aG91dE5hdGl2ZSgpIHsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNvbWVNZXRob2QoKSB7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0LmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMTIwY2UuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0RlbGVnYXRlQ2xhc3NBZGFwdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7Ci0KLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFNhbWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwotCi1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5kYXRhY2xhc3MuQ2xhc3NXaXRoTmF0aXZlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuZGF0YWNsYXNzLk91dGVyQ2xhc3M7Ci1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5kYXRhY2xhc3MuT3V0ZXJDbGFzcy5Jbm5lckNsYXNzOwotCi1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5DbGFzc1JlYWRlcjsKLWltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5DbGFzc1Zpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NXcml0ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotcHVibGljIGNsYXNzIERlbGVnYXRlQ2xhc3NBZGFwdGVyVGVzdCB7Ci0KLSAgICBwcml2YXRlIE1vY2tMb2cgbUxvZzsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQVRJVkVfQ0xBU1NfTkFNRSA9IENsYXNzV2l0aE5hdGl2ZS5jbGFzcy5nZXRDYW5vbmljYWxOYW1lKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE9VVEVSX0NMQVNTX05BTUUgPSBPdXRlckNsYXNzLmNsYXNzLmdldENhbm9uaWNhbE5hbWUoKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ORVJfQ0xBU1NfTkFNRSA9IE91dGVyQ2xhc3MuY2xhc3MuZ2V0Q2Fub25pY2FsTmFtZSgpICsgIiQiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubmVyQ2xhc3MuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpOwotCi0gICAgQEJlZm9yZQotICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIG1Mb2cgPSBuZXcgTW9ja0xvZygpOwotICAgICAgICBtTG9nLnNldFZlcmJvc2UodHJ1ZSk7IC8vIGNhcHR1cmUgZGVidWcgZXJyb3IgdG9vCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVzdHMgdGhhdCBhIGNsYXNzIG5vdCBiZWluZyBtb2RpZmllZCBzdGlsbCB3b3Jrcy4KLSAgICAgKi8KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3ROb09wKCkgdGhyb3dzIFRocm93YWJsZSB7Ci0gICAgICAgIC8vIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgdGhhdCB3aWxsIGJlIG1vZGlmaWVkCi0gICAgICAgIC8vIChsb2FkIHRoZSBjbGFzcyBpbiBhIGRpc3RpbmN0IGNsYXNzIGxvYWRlciBzbyB0aGF0IHdlIGNhbiB0cmFzaCBpdHMgZGVmaW5pdGlvbiBsYXRlcikKLSAgICAgICAgQ2xhc3NMb2FkZXIgY2wxID0gbmV3IENsYXNzTG9hZGVyKHRoaXMuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKSB7IH07Ci0gICAgICAgIENsYXNzPENsYXNzV2l0aE5hdGl2ZT4gY2xhenoxID0gKENsYXNzPENsYXNzV2l0aE5hdGl2ZT4pIGNsMS5sb2FkQ2xhc3MoTkFUSVZFX0NMQVNTX05BTUUpOwotICAgICAgICBDbGFzc1dpdGhOYXRpdmUgaW5zdGFuY2UxID0gY2xhenoxLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0MiwgaW5zdGFuY2UxLmFkZCgyMCwgMjIpKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGluc3RhbmNlMS5jYWxsTmF0aXZlSW5zdGFuY2UoMTAsIDMuMTQxNSwgbmV3IE9iamVjdFswXSApOwotICAgICAgICAgICAgZmFpbCgiVGVzdCBzaG91bGQgaGF2ZSBmYWlsZWQgdG8gaW52b2tlIGNhbGxUaGVOYXRpdmVNZXRob2QgWzFdIik7Ci0gICAgICAgIH0gY2F0Y2ggKFVuc2F0aXNmaWVkTGlua0Vycm9yIGUpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgdG8gZmFpbCBzaW5jZSB0aGUgbmF0aXZlIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuCi0gICAgICAgIH0KLQotICAgICAgICAvLyBOb3cgcHJvY2VzcyBpdCBidXQgdGVsbCB0aGUgZGVsZWdhdGUgdG8gbm90IG1vZGlmeSBhbnkgbWV0aG9kCi0gICAgICAgIENsYXNzV3JpdGVyIGN3ID0gbmV3IENsYXNzV3JpdGVyKDAgLypmbGFncyovKTsKLQotICAgICAgICBIYXNoU2V0PFN0cmluZz4gZGVsZWdhdGVNZXRob2RzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotICAgICAgICBTdHJpbmcgaW50ZXJuYWxDbGFzc05hbWUgPSBOQVRJVkVfQ0xBU1NfTkFNRS5yZXBsYWNlKCcuJywgJy8nKTsKLSAgICAgICAgRGVsZWdhdGVDbGFzc0FkYXB0ZXIgY3YgPSBuZXcgRGVsZWdhdGVDbGFzc0FkYXB0ZXIoCi0gICAgICAgICAgICAgICAgbUxvZywgY3csIGludGVybmFsQ2xhc3NOYW1lLCBkZWxlZ2F0ZU1ldGhvZHMpOwotCi0gICAgICAgIENsYXNzUmVhZGVyIGNyID0gbmV3IENsYXNzUmVhZGVyKE5BVElWRV9DTEFTU19OQU1FKTsKLSAgICAgICAgY3IuYWNjZXB0KGN2LCAwIC8qIGZsYWdzICovKTsKLQotICAgICAgICAvLyBMb2FkIHRoZSBnZW5lcmF0ZWQgY2xhc3MgaW4gYSBkaWZmZXJlbnQgY2xhc3MgbG9hZGVyIGFuZCB0cnkgaXQgYWdhaW4KLQotICAgICAgICBDbGFzc0xvYWRlcjIgY2wyID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsMiA9IG5ldyBDbGFzc0xvYWRlcjIoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgdGVzdE1vZGlmaWVkSW5zdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gY2xhenoyID0gbG9hZENsYXNzKE5BVElWRV9DTEFTU19OQU1FKTsKLSAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGkyID0gY2xhenoyLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydE5vdE51bGwoaTIpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDIsIGNhbGxBZGQoaTIsIDIwLCAyMikpOwotCi0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsQ2FsbE5hdGl2ZUluc3RhbmNlKGkyLCAxMCwgMy4xNDE1LCBuZXcgT2JqZWN0WzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoIlRlc3Qgc2hvdWxkIGhhdmUgZmFpbGVkIHRvIGludm9rZSBjYWxsVGhlTmF0aXZlTWV0aG9kIFsyXSIpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgdG8gZmFpbCBzaW5jZSB0aGUgbmF0aXZlIG1ldGhvZCBoYXMgTk9UIGJlZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRkZW4gaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhVbnNhdGlzZmllZExpbmtFcnJvci5jbGFzcywgZS5nZXRDYXVzZSgpLmdldENsYXNzKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbmF0aXZlIG1ldGhvZCBkb2VzIE5PVCBoYXZlIHRoZSBuZXcgYW5ub3RhdGlvbgotICAgICAgICAgICAgICAgICAgICBNZXRob2RbXSBtID0gY2xhenoyLmdldERlY2xhcmVkTWV0aG9kcygpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5hdGl2ZV9pbnN0YW5jZSIsIG1bMl0uZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShNb2RpZmllci5pc05hdGl2ZShtWzJdLmdldE1vZGlmaWVycygpKSk7Ci0gICAgICAgICAgICAgICAgICAgIEFubm90YXRpb25bXSBhID0gbVsyXS5nZXRBbm5vdGF0aW9ucygpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgYS5sZW5ndGgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBjbDIuYWRkKE5BVElWRV9DTEFTU19OQU1FLCBjdyk7Ci0gICAgICAgICAgICBjbDIudGVzdE1vZGlmaWVkSW5zdGFuY2UoKTsKLSAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLSAgICAgICAgICAgIHRocm93IGR1bXBHZW5lcmF0ZWRDbGFzcyh0LCBjbDIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoge0BsaW5rIERlbGVnYXRlTWV0aG9kQWRhcHRlcjJ9IGRvZXMgbm90IHN1cHBvcnQgb3ZlcnJpZGluZyBjb25zdHJ1Y3RvcnMgeWV0LAotICAgICAqIHNvIHRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiB7QGxpbmsgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb259LgotICAgICAqCi0gICAgICogQWx0aG91Z2ggbm90IHRlc3RlZCBoZXJlLCB0aGUgbWVzc2FnZSBvZiB0aGUgZXhjZXB0aW9uIHNob3VsZCBjb250YWluIHRoZQotICAgICAqIGNvbnN0cnVjdG9yIHNpZ25hdHVyZS4KLSAgICAgKi8KLSAgICBAVGVzdChleHBlY3RlZD1VbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbi5jbGFzcykKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q29uc3RydWN0b3JzTm90U3VwcG9ydGVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgQ2xhc3NXcml0ZXIgY3cgPSBuZXcgQ2xhc3NXcml0ZXIoMCAvKmZsYWdzKi8pOwotCi0gICAgICAgIFN0cmluZyBpbnRlcm5hbENsYXNzTmFtZSA9IE5BVElWRV9DTEFTU19OQU1FLnJlcGxhY2UoJy4nLCAnLycpOwotCi0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBkZWxlZ2F0ZU1ldGhvZHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAgIGRlbGVnYXRlTWV0aG9kcy5hZGQoIjxpbml0PiIpOwotICAgICAgICBEZWxlZ2F0ZUNsYXNzQWRhcHRlciBjdiA9IG5ldyBEZWxlZ2F0ZUNsYXNzQWRhcHRlcigKLSAgICAgICAgICAgICAgICBtTG9nLCBjdywgaW50ZXJuYWxDbGFzc05hbWUsIGRlbGVnYXRlTWV0aG9kcyk7Ci0KLSAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBuZXcgQ2xhc3NSZWFkZXIoTkFUSVZFX0NMQVNTX05BTUUpOwotICAgICAgICBjci5hY2NlcHQoY3YsIDAgLyogZmxhZ3MgKi8pOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdERlbGVnYXRlTmF0aXZlKCkgdGhyb3dzIFRocm93YWJsZSB7Ci0gICAgICAgIENsYXNzV3JpdGVyIGN3ID0gbmV3IENsYXNzV3JpdGVyKDAgLypmbGFncyovKTsKLSAgICAgICAgU3RyaW5nIGludGVybmFsQ2xhc3NOYW1lID0gTkFUSVZFX0NMQVNTX05BTUUucmVwbGFjZSgnLicsICcvJyk7Ci0KLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IGRlbGVnYXRlTWV0aG9kcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLSAgICAgICAgZGVsZWdhdGVNZXRob2RzLmFkZChEZWxlZ2F0ZUNsYXNzQWRhcHRlci5BTExfTkFUSVZFUyk7Ci0gICAgICAgIERlbGVnYXRlQ2xhc3NBZGFwdGVyIGN2ID0gbmV3IERlbGVnYXRlQ2xhc3NBZGFwdGVyKAotICAgICAgICAgICAgICAgIG1Mb2csIGN3LCBpbnRlcm5hbENsYXNzTmFtZSwgZGVsZWdhdGVNZXRob2RzKTsKLQotICAgICAgICBDbGFzc1JlYWRlciBjciA9IG5ldyBDbGFzc1JlYWRlcihOQVRJVkVfQ0xBU1NfTkFNRSk7Ci0gICAgICAgIGNyLmFjY2VwdChjdiwgMCAvKiBmbGFncyAqLyk7Ci0KLSAgICAgICAgLy8gTG9hZCB0aGUgZ2VuZXJhdGVkIGNsYXNzIGluIGEgZGlmZmVyZW50IGNsYXNzIGxvYWRlciBhbmQgdHJ5IGl0Ci0gICAgICAgIENsYXNzTG9hZGVyMiBjbDIgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2wyID0gbmV3IENsYXNzTG9hZGVyMigpIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCB0ZXN0TW9kaWZpZWRJbnN0YW5jZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICBDbGFzczw/PiBjbGF6ejIgPSBsb2FkQ2xhc3MoTkFUSVZFX0NMQVNTX05BTUUpOwotICAgICAgICAgICAgICAgICAgICBPYmplY3QgaTIgPSBjbGF6ejIubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbChpMik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHJlZmxlY3Rpb24gdG8gYWNjZXNzIGlubmVyIG1ldGhvZHMKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQyLCBjYWxsQWRkKGkyLCAyMCwgMjIpKTsKLQotICAgICAgICAgICAgICAgICAgICAgT2JqZWN0W10gb2JqUmVzdWx0ID0gbmV3IE9iamVjdFtdIHsgbnVsbCB9OwotICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IGNhbGxDYWxsTmF0aXZlSW5zdGFuY2UoaTIsIDEwLCAzLjE0MTUsIG9ialJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoKGludCkoMTAgKyAzLjE0MTUpLCByZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0U2FtZShpMiwgb2JqUmVzdWx0WzBdKTsKLQotICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbmF0aXZlIG1ldGhvZCBub3cgaGFzIHRoZSBuZXcgYW5ub3RhdGlvbiBhbmQgaXMgbm90IG5hdGl2ZQotICAgICAgICAgICAgICAgICAgICAgTWV0aG9kW10gbSA9IGNsYXp6Mi5nZXREZWNsYXJlZE1ldGhvZHMoKTsKLSAgICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygibmF0aXZlX2luc3RhbmNlIiwgbVsyXS5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RmFsc2UoTW9kaWZpZXIuaXNOYXRpdmUobVsyXS5nZXRNb2RpZmllcnMoKSkpOwotICAgICAgICAgICAgICAgICAgICAgQW5ub3RhdGlvbltdIGEgPSBtWzJdLmdldEFubm90YXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkxheW91dGxpYkRlbGVnYXRlIiwgYVswXS5hbm5vdGF0aW9uVHlwZSgpLmdldFNpbXBsZU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGNsMi5hZGQoTkFUSVZFX0NMQVNTX05BTUUsIGN3KTsKLSAgICAgICAgICAgIGNsMi50ZXN0TW9kaWZpZWRJbnN0YW5jZSgpOwotICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgICAgICAgdGhyb3cgZHVtcEdlbmVyYXRlZENsYXNzKHQsIGNsMik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3REZWxlZ2F0ZUlubmVyKCkgdGhyb3dzIFRocm93YWJsZSB7Ci0gICAgICAgIC8vIFdlJ2xsIGRlbGVnYXRlIHRoZSAiZ2V0IiBtZXRob2Qgb2YgYm90aCB0aGUgaW5uZXIgYW5kIG91dGVyIGNsYXNzLgotICAgICAgICBIYXNoU2V0PFN0cmluZz4gZGVsZWdhdGVNZXRob2RzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotICAgICAgICBkZWxlZ2F0ZU1ldGhvZHMuYWRkKCJnZXQiKTsKLSAgICAgICAgZGVsZWdhdGVNZXRob2RzLmFkZCgicHJpdmF0ZU1ldGhvZCIpOwotCi0gICAgICAgIC8vIEdlbmVyYXRlIHRoZSBkZWxlZ2F0ZSBmb3IgdGhlIG91dGVyIGNsYXNzLgotICAgICAgICBDbGFzc1dyaXRlciBjd091dGVyID0gbmV3IENsYXNzV3JpdGVyKDAgLypmbGFncyovKTsKLSAgICAgICAgU3RyaW5nIG91dGVyQ2xhc3NOYW1lID0gT1VURVJfQ0xBU1NfTkFNRS5yZXBsYWNlKCcuJywgJy8nKTsKLSAgICAgICAgRGVsZWdhdGVDbGFzc0FkYXB0ZXIgY3ZPdXRlciA9IG5ldyBEZWxlZ2F0ZUNsYXNzQWRhcHRlcigKLSAgICAgICAgICAgICAgICBtTG9nLCBjd091dGVyLCBvdXRlckNsYXNzTmFtZSwgZGVsZWdhdGVNZXRob2RzKTsKLSAgICAgICAgQ2xhc3NSZWFkZXIgY3IgPSBuZXcgQ2xhc3NSZWFkZXIoT1VURVJfQ0xBU1NfTkFNRSk7Ci0gICAgICAgIGNyLmFjY2VwdChjdk91dGVyLCAwIC8qIGZsYWdzICovKTsKLQotICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgZGVsZWdhdGUgZm9yIHRoZSBpbm5lciBjbGFzcy4KLSAgICAgICAgQ2xhc3NXcml0ZXIgY3dJbm5lciA9IG5ldyBDbGFzc1dyaXRlcigwIC8qZmxhZ3MqLyk7Ci0gICAgICAgIFN0cmluZyBpbm5lckNsYXNzTmFtZSA9IElOTkVSX0NMQVNTX05BTUUucmVwbGFjZSgnLicsICcvJyk7Ci0gICAgICAgIERlbGVnYXRlQ2xhc3NBZGFwdGVyIGN2SW5uZXIgPSBuZXcgRGVsZWdhdGVDbGFzc0FkYXB0ZXIoCi0gICAgICAgICAgICAgICAgbUxvZywgY3dJbm5lciwgaW5uZXJDbGFzc05hbWUsIGRlbGVnYXRlTWV0aG9kcyk7Ci0gICAgICAgIGNyID0gbmV3IENsYXNzUmVhZGVyKElOTkVSX0NMQVNTX05BTUUpOwotICAgICAgICBjci5hY2NlcHQoY3ZJbm5lciwgMCAvKiBmbGFncyAqLyk7Ci0KLSAgICAgICAgLy8gTG9hZCB0aGUgZ2VuZXJhdGVkIGNsYXNzZXMgaW4gYSBkaWZmZXJlbnQgY2xhc3MgbG9hZGVyIGFuZCB0cnkgdGhlbQotICAgICAgICBDbGFzc0xvYWRlcjIgY2wyID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsMiA9IG5ldyBDbGFzc0xvYWRlcjIoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgdGVzdE1vZGlmaWVkSW5zdGFuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGUgb3V0ZXIgY2xhc3MKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gb3V0ZXJDbGF6ejIgPSBsb2FkQ2xhc3MoT1VURVJfQ0xBU1NfTkFNRSk7Ci0gICAgICAgICAgICAgICAgICAgIE9iamVjdCBvMiA9IG91dGVyQ2xhenoyLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydE5vdE51bGwobzIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCBPdXRlci5nZXQgcmV0dXJucyAxKzEwKzIwLAotICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhlIGRlbGVnYXRlIG1ha2VzIGl0IHJldHVybiA0KzEwKzIwCi0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyg0KzEwKzIwLCBjYWxsR2V0KG8yLCAxMCwgMjApKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDErMTArMjAsIGNhbGxHZXRfT3JpZ2luYWwobzIsIDEwLCAyMCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCBPdXRlciBoYXMgYSBwcml2YXRlIG1ldGhvZCB0aGF0IGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIGRlbGVnYXRlZC4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gY2FsbCBib3RoIHRoZSBkZWxlZ2F0ZQotICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIG9yaWdpbmFsICh3aGljaCBpcyBub3cgcHVibGljKS4KLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJvdXRlclByaXZhdGVNZXRob2QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbE1ldGhvZChvMiwgInByaXZhdGVNZXRob2RfT3JpZ2luYWwiLCBmYWxzZSAvKm1ha2VQdWJsaWMqLykpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCBtZXRob2QgaXMgcHJpdmF0ZSwgc28gYnkgZGVmYXVsdCB3ZSBjYW4ndCBhY2Nlc3MgaXQKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBnb3RJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY2FsbE1ldGhvZChvMiwgInByaXZhdGVNZXRob2QiLCBmYWxzZSAvKm1ha2VQdWJsaWMqLyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKGdvdElsbGVnYWxBY2Nlc3NFeGNlcHRpb24pOwotICAgICAgICAgICAgICAgICAgICAvLyBUcnkgYWdhaW4sIGJ1dCBub3cgbWFraW5nIGl0IGFjY2Vzc2libGUKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJvdXRlclByaXZhdGVfRGVsZWdhdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxNZXRob2QobzIsICJwcml2YXRlTWV0aG9kIiwgdHJ1ZSAvKm1ha2VQdWJsaWMqLykpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBpbm5lciBjbGFzcy4gU2luY2UgaXQncyBub3QgYSBzdGF0aWMgaW5uZXIgY2xhc3MsIHdlIG5lZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gdXNlIHRoZSBoaWRkZW4gY29uc3RydWN0b3IgdGhhdCB0YWtlcyB0aGUgb3V0ZXIgY2xhc3MgYXMgZmlyc3QgcGFyYW1ldGVyLgotICAgICAgICAgICAgICAgICAgICBDbGFzczw/PiBpbm5lckNsYXp6MiA9IGxvYWRDbGFzcyhJTk5FUl9DTEFTU19OQU1FKTsKLSAgICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3I8Pz4gaW5uZXJDb25zID0gaW5uZXJDbGF6ejIuZ2V0Q29uc3RydWN0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENsYXNzPD8+W10geyBvdXRlckNsYXp6MiB9KTsKLSAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGkyID0gaW5uZXJDb25zLm5ld0luc3RhbmNlKG5ldyBPYmplY3RbXSB7IG8yIH0pOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnROb3ROdWxsKGkyKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgSW5uZXIuZ2V0IHJldHVybnMgMysxMCsyMCwKLSAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHRoZSBkZWxlZ2F0ZSBtYWtlcyBpdCByZXR1cm4gNisxMCsyMAotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNisxMCsyMCwgY2FsbEdldChpMiwgMTAsIDIwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzKzEwKzIwLCBjYWxsR2V0X09yaWdpbmFsKGkyLCAxMCwgMjApKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgY2wyLmFkZChPVVRFUl9DTEFTU19OQU1FLCBjd091dGVyLnRvQnl0ZUFycmF5KCkpOwotICAgICAgICAgICAgY2wyLmFkZChJTk5FUl9DTEFTU19OQU1FLCBjd0lubmVyLnRvQnl0ZUFycmF5KCkpOwotICAgICAgICAgICAgY2wyLnRlc3RNb2RpZmllZEluc3RhbmNlKCk7Ci0gICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0gICAgICAgICAgICB0aHJvdyBkdW1wR2VuZXJhdGVkQ2xhc3ModCwgY2wyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vLS0tLS0tLQotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyBsb2FkZXIgdGhhbiBjYW4gZGVmaW5lIGFuZCBpbnN0YW50aWF0ZSBvdXIgbW9kaWZpZWQgY2xhc3Nlcy4KLSAgICAgKiA8cC8+Ci0gICAgICogVGhlIHRyaWNrIGhlcmUgaXMgdGhhdCB0aGlzIGNsYXNzIGxvYWRlciB3aWxsIHRlc3Qgb3VyIDxlbT5tb2RpZmllZDwvZW0+IHZlcnNpb24KLSAgICAgKiBvZiB0aGUgY2xhc3NlcywgdGhlIG9uZSB3aXRoIHRoZSBkZWxlZ2F0ZSBjYWxscy4KLSAgICAgKiA8cC8+Ci0gICAgICogVHJ5aW5nIHRvIGRvIHNvIGluIHRoZSBvcmlnaW5hbCBjbGFzcyBsb2FkZXIgZ2VuZXJhdGVzIGFsbCBzb3J0IG9mIGxpbmsgaXNzdWVzIGJlY2F1c2UKLSAgICAgKiB0aGVyZSBhcmUgMiBkaWZmZXJlbnQgZGVmaW5pdGlvbnMgb2YgdGhlIHNhbWUgY2xhc3MgbmFtZS4gVGhpcyBjbGFzcyBsb2FkZXIgd2lsbAotICAgICAqIGRlZmluZSBhbmQgbG9hZCB0aGUgY2xhc3Mgd2hlbiByZXF1ZXN0ZWQgYnkgbmFtZSBhbmQgcHJvdmlkZSBoZWxwZXJzIHRvIGFjY2VzcyB0aGUKLSAgICAgKiBpbnN0YW5jZSBtZXRob2RzIHZpYSByZWZsZWN0aW9uLgotICAgICAqLwotICAgIHByaXZhdGUgYWJzdHJhY3QgY2xhc3MgQ2xhc3NMb2FkZXIyIGV4dGVuZHMgQ2xhc3NMb2FkZXIgewotCi0gICAgICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgYnl0ZVtdPiBtQ2xhc3NEZWZzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBieXRlW10+KCk7Ci0KLSAgICAgICAgcHVibGljIENsYXNzTG9hZGVyMigpIHsKLSAgICAgICAgICAgIHN1cGVyKG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIENsYXNzTG9hZGVyMiBhZGQoU3RyaW5nIGNsYXNzTmFtZSwgYnl0ZVtdIGRlZmluaXRpb24pIHsKLSAgICAgICAgICAgIG1DbGFzc0RlZnMucHV0KGNsYXNzTmFtZSwgZGVmaW5pdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBDbGFzc0xvYWRlcjIgYWRkKFN0cmluZyBjbGFzc05hbWUsIENsYXNzV3JpdGVyIHJld3JpdHRlbkNsYXNzKSB7Ci0gICAgICAgICAgICBtQ2xhc3NEZWZzLnB1dChjbGFzc05hbWUsIHJld3JpdHRlbkNsYXNzLnRvQnl0ZUFycmF5KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFNldDxFbnRyeTxTdHJpbmcsIGJ5dGVbXT4+IGdldEJ5dGVDb2RlKCkgewotICAgICAgICAgICAgcmV0dXJuIG1DbGFzc0RlZnMuZW50cnlTZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIENsYXNzPD8+IGZpbmRDbGFzcyhTdHJpbmcgbmFtZSkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuZmluZENsYXNzKG5hbWUpOwotICAgICAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0KLSAgICAgICAgICAgICAgICBieXRlW10gZGVmID0gbUNsYXNzRGVmcy5nZXQobmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlZiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIExvYWQgdGhlIG1vZGlmaWVkIENsYXNzV2l0aE5hdGl2ZSBmcm9tIGl0cyBieXRlcyByZXByZXNlbnRhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZUNsYXNzKG5hbWUsIGRlZiwgMCwgZGVmLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCBldmVyeXRoaW5nIGVsc2UgZnJvbSB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbiBpbnRvIHRoZSBuZXcgY2xhc3MgbG9hZGVyLgotICAgICAgICAgICAgICAgICAgICBDbGFzc1JlYWRlciBjciA9IG5ldyBDbGFzc1JlYWRlcihuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3NXcml0ZXIgY3cgPSBuZXcgQ2xhc3NXcml0ZXIoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGNyLmFjY2VwdChjdywgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9IGN3LnRvQnl0ZUFycmF5KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVDbGFzcyhuYW1lLCBieXRlcywgMCwgYnl0ZXMubGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihpb2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBY2Nlc3NlcyB7QGxpbmsgT3V0ZXJDbGFzcyNnZXR9IG9yIHtAbGluayBJbm5lckNsYXNzI2dldH12aWEgcmVmbGVjdGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgY2FsbEdldChPYmplY3QgaW5zdGFuY2UsIGludCBhLCBsb25nIGIpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgTWV0aG9kIG0gPSBpbnN0YW5jZS5nZXRDbGFzcygpLmdldE1ldGhvZCgiZ2V0IiwKLSAgICAgICAgICAgICAgICAgICAgbmV3IENsYXNzPD8+W10geyBpbnQuY2xhc3MsIGxvbmcuY2xhc3MgfSApOwotCi0gICAgICAgICAgICBPYmplY3QgcmVzdWx0ID0gbS5pbnZva2UoaW5zdGFuY2UsIG5ldyBPYmplY3RbXSB7IGEsIGIgfSk7Ci0gICAgICAgICAgICByZXR1cm4gKChJbnRlZ2VyKSByZXN1bHQpLmludFZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQWNjZXNzZXMgdGhlICJfT3JpZ2luYWwiIG1ldGhvZHMgZm9yIHtAbGluayBPdXRlckNsYXNzI2dldH0KLSAgICAgICAgICogb3Ige0BsaW5rIElubmVyQ2xhc3MjZ2V0fXZpYSByZWZsZWN0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBjYWxsR2V0X09yaWdpbmFsKE9iamVjdCBpbnN0YW5jZSwgaW50IGEsIGxvbmcgYikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBNZXRob2QgbSA9IGluc3RhbmNlLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJnZXRfT3JpZ2luYWwiLAotICAgICAgICAgICAgICAgICAgICBuZXcgQ2xhc3M8Pz5bXSB7IGludC5jbGFzcywgbG9uZy5jbGFzcyB9ICk7Ci0KLSAgICAgICAgICAgIE9iamVjdCByZXN1bHQgPSBtLmludm9rZShpbnN0YW5jZSwgbmV3IE9iamVjdFtdIHsgYSwgYiB9KTsKLSAgICAgICAgICAgIHJldHVybiAoKEludGVnZXIpIHJlc3VsdCkuaW50VmFsdWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBY2Nlc3NlcyB0aGUgYW55IGRlY2xhcmVkIG1ldGhvZCB0aGF0IHRha2VzIG5vIHBhcmFtZXRlciB2aWEgcmVmbGVjdGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICAgICAgICBwdWJsaWMgPFQ+IFQgY2FsbE1ldGhvZChPYmplY3QgaW5zdGFuY2UsIFN0cmluZyBtZXRob2ROYW1lLCBib29sZWFuIG1ha2VQdWJsaWMpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgTWV0aG9kIG0gPSBpbnN0YW5jZS5nZXRDbGFzcygpLmdldERlY2xhcmVkTWV0aG9kKG1ldGhvZE5hbWUsIChDbGFzczw/PltdKW51bGwpOwotCi0gICAgICAgICAgICBib29sZWFuIHdhc0FjY2Vzc2libGUgPSBtLmlzQWNjZXNzaWJsZSgpOwotICAgICAgICAgICAgaWYgKG1ha2VQdWJsaWMgJiYgIXdhc0FjY2Vzc2libGUpIHsKLSAgICAgICAgICAgICAgICBtLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE9iamVjdCByZXN1bHQgPSBtLmludm9rZShpbnN0YW5jZSwgKE9iamVjdFtdKW51bGwpOwotCi0gICAgICAgICAgICBpZiAobWFrZVB1YmxpYyAmJiAhd2FzQWNjZXNzaWJsZSkgewotICAgICAgICAgICAgICAgIG0uc2V0QWNjZXNzaWJsZShmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiAoVCkgcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEFjY2Vzc2VzIHtAbGluayBDbGFzc1dpdGhOYXRpdmUjYWRkKGludCwgaW50KX0gdmlhIHJlZmxlY3Rpb24uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGNhbGxBZGQoT2JqZWN0IGluc3RhbmNlLCBpbnQgYSwgaW50IGIpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgTWV0aG9kIG0gPSBpbnN0YW5jZS5nZXRDbGFzcygpLmdldE1ldGhvZCgiYWRkIiwKLSAgICAgICAgICAgICAgICAgICAgbmV3IENsYXNzPD8+W10geyBpbnQuY2xhc3MsIGludC5jbGFzcyB9KTsKLQotICAgICAgICAgICAgT2JqZWN0IHJlc3VsdCA9IG0uaW52b2tlKGluc3RhbmNlLCBuZXcgT2JqZWN0W10geyBhLCBiIH0pOwotICAgICAgICAgICAgcmV0dXJuICgoSW50ZWdlcikgcmVzdWx0KS5pbnRWYWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEFjY2Vzc2VzIHtAbGluayBDbGFzc1dpdGhOYXRpdmUjY2FsbE5hdGl2ZUluc3RhbmNlKGludCwgZG91YmxlLCBPYmplY3RbXSl9Ci0gICAgICAgICAqIHZpYSByZWZsZWN0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBjYWxsQ2FsbE5hdGl2ZUluc3RhbmNlKE9iamVjdCBpbnN0YW5jZSwgaW50IGEsIGRvdWJsZSBkLCBPYmplY3RbXSBvKQotICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgTWV0aG9kIG0gPSBpbnN0YW5jZS5nZXRDbGFzcygpLmdldE1ldGhvZCgiY2FsbE5hdGl2ZUluc3RhbmNlIiwKLSAgICAgICAgICAgICAgICAgICAgbmV3IENsYXNzPD8+W10geyBpbnQuY2xhc3MsIGRvdWJsZS5jbGFzcywgT2JqZWN0W10uY2xhc3MgfSk7Ci0KLSAgICAgICAgICAgIE9iamVjdCByZXN1bHQgPSBtLmludm9rZShpbnN0YW5jZSwgbmV3IE9iamVjdFtdIHsgYSwgZCwgbyB9KTsKLSAgICAgICAgICAgIHJldHVybiAoKEludGVnZXIpIHJlc3VsdCkuaW50VmFsdWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHRlc3RNb2RpZmllZEluc3RhbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgZGVidWdnaW5nLCBpdCdzIHVzZWZ1bCB0byBkdW1wIHRoZSBjb250ZW50IG9mIHRoZSBnZW5lcmF0ZWQgY2xhc3NlcwotICAgICAqIGFsb25nIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHdhcyBnZW5lcmF0ZWQuCi0gICAgICoKLSAgICAgKiBIb3dldmVyIHRvIG1ha2UgaXQgd29yayB5b3UgbmVlZCB0byBwdWxsIGluIHRoZSBvcmcub2JqZWN0d2ViLmFzbS51dGlsLlRyYWNlQ2xhc3NWaXNpdG9yCi0gICAgICogY2xhc3MgYW5kIGFzc29jaWF0ZWQgdXRpbGl0aWVzIHdoaWNoIGFyZSBmb3VuZCBpbiB0aGUgQVNNIHNvdXJjZSBqYXIuIFNpbmNlIHdlIGRvbid0Ci0gICAgICogd2FudCB0aGF0IGRlcGVuZGVuY3kgaW4gdGhlIHNvdXJjZSBjb2RlLCB3ZSBvbmx5IHB1dCBpdCBtYW51YWxseSBmb3IgZGV2ZWxvcG1lbnQgYW5kCi0gICAgICogYWNjZXNzIHRoZSBUcmFjZUNsYXNzVmlzaXRvciB2aWEgcmVmbGVjdGlvbiBpZiBwcmVzZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIHQgVGhlIGV4Y2VwdGlvbiB0aHJvd24gYnkge0BsaW5rIENsYXNzTG9hZGVyMiN0ZXN0TW9kaWZpZWRJbnN0YW5jZSgpfQotICAgICAqIEBwYXJhbSBjbDIgVGhlIHtAbGluayBDbGFzc0xvYWRlcjJ9IGluc3RhbmNlIHdpdGggdGhlIGdlbmVyYXRlZCBieXRlY29kZS4KLSAgICAgKiBAcmV0dXJuIEVpdGhlciBvcmlnaW5hbCB7QGNvZGUgdH0gb3IgYSBuZXcgd3JhcHBlciB7QGxpbmsgVGhyb3dhYmxlfQotICAgICAqLwotICAgIHByaXZhdGUgVGhyb3dhYmxlIGR1bXBHZW5lcmF0ZWRDbGFzcyhUaHJvd2FibGUgdCwgQ2xhc3NMb2FkZXIyIGNsMikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gRm9yIGRlYnVnZ2luZywgZHVtcCB0aGUgYnl0ZWNvZGUgb2YgdGhlIGNsYXNzIGluIGNhc2Ugb2YgdW5leHBlY3RlZCBlcnJvcgotICAgICAgICAgICAgLy8gaWYgd2UgY2FuIGZpbmQgdGhlIFRyYWNlQ2xhc3NWaXNpdG9yIGNsYXNzLgotICAgICAgICAgICAgQ2xhc3M8Pz4gdGN2Q2xhc3MgPSBDbGFzcy5mb3JOYW1lKCJvcmcub2JqZWN0d2ViLmFzbS51dGlsLlRyYWNlQ2xhc3NWaXNpdG9yIik7Ci0KLSAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgICAgICAgc2IuYXBwZW5kKCdcbicpLmFwcGVuZCh0LmdldENsYXNzKCkuZ2V0Q2Fub25pY2FsTmFtZSgpKTsKLSAgICAgICAgICAgIGlmICh0LmdldE1lc3NhZ2UoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCI6ICIpLmFwcGVuZCh0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIGJ5dGVbXT4gZW50cnkgOiBjbDIuZ2V0Qnl0ZUNvZGUoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBlbnRyeS5nZXRLZXkoKTsKLSAgICAgICAgICAgICAgICBieXRlW10gYnl0ZXMgPSBlbnRyeS5nZXRWYWx1ZSgpOwotCi0gICAgICAgICAgICAgICAgU3RyaW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgICAgICAgICAgICAgIFByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKLSAgICAgICAgICAgICAgICAvLyBuZXh0IDIgbGluZXMgZG86IFRyYWNlQ2xhc3NWaXNpdG9yIHRjdiA9IG5ldyBUcmFjZUNsYXNzVmlzaXRvcihwdyk7Ci0gICAgICAgICAgICAgICAgQ29uc3RydWN0b3I8Pz4gY29ucyA9IHRjdkNsYXNzLmdldENvbnN0cnVjdG9yKG5ldyBDbGFzczw/PltdIHsgcHcuZ2V0Q2xhc3MoKSB9KTsKLSAgICAgICAgICAgICAgICBPYmplY3QgdGN2ID0gY29ucy5uZXdJbnN0YW5jZShuZXcgT2JqZWN0W10geyBwdyB9KTsKLSAgICAgICAgICAgICAgICBDbGFzc1JlYWRlciBjcjIgPSBuZXcgQ2xhc3NSZWFkZXIoYnl0ZXMpOwotICAgICAgICAgICAgICAgIGNyMi5hY2NlcHQoKENsYXNzVmlzaXRvcikgdGN2LCAwIC8qIGZsYWdzICovKTsKLQotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiXG5CeXRlY29kZSBkdW1wOiA8IikuYXBwZW5kKGNsYXNzTmFtZSkuYXBwZW5kKCI+OlxuIikKLSAgICAgICAgICAgICAgICAgIC5hcHBlbmQoc3cudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFJlLXRocm93IGV4Y2VwdGlvbiB3aXRoIG5ldyBtZXNzYWdlCi0gICAgICAgICAgICBSdW50aW1lRXhjZXB0aW9uIGV4ID0gbmV3IFJ1bnRpbWVFeGNlcHRpb24oc2IudG9TdHJpbmcoKSwgdCk7Ci0gICAgICAgICAgICByZXR1cm4gZXg7Ci0gICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBpZ25vcmUpIHsKLSAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgcHJvYmxlbSwganVzdCB0aHJvdyB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uIGFzLWlzLgotICAgICAgICAgICAgcmV0dXJuIHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Mb2dUZXN0LmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTG9nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTVmNjUzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Mb2dUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwotCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuKjsKLQotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1wdWJsaWMgY2xhc3MgTG9nVGVzdCB7Ci0KLSAgICBwcml2YXRlIE1vY2tMb2cgbUxvZzsKLQotICAgIEBCZWZvcmUKLSAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBtTG9nID0gbmV3IE1vY2tMb2coKTsKLSAgICB9Ci0KLSAgICBAQWZ0ZXIKLSAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBwYXNzCi0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0RGVidWcoKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscygiIiwgbUxvZy5nZXRPdXQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiIiwgbUxvZy5nZXRFcnIoKSk7Ci0KLSAgICAgICAgbUxvZy5zZXRWZXJib3NlKGZhbHNlKTsKLSAgICAgICAgbUxvZy5kZWJ1ZygiVGVzdCAlZCIsIDQyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIiLCBtTG9nLmdldE91dCgpKTsKLQotICAgICAgICBtTG9nLnNldFZlcmJvc2UodHJ1ZSk7Ci0gICAgICAgIG1Mb2cuZGVidWcoIlRlc3QgJWQiLCA0Mik7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJUZXN0IDQyXG4iLCBtTG9nLmdldE91dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIiLCBtTG9nLmdldEVycigpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RJbmZvKCkgewotICAgICAgICBhc3NlcnRFcXVhbHMoIiIsIG1Mb2cuZ2V0T3V0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIiIsIG1Mb2cuZ2V0RXJyKCkpOwotCi0gICAgICAgIG1Mb2cuaW5mbygiVGVzdCAlZCIsIDQzKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoIlRlc3QgNDNcbiIsIG1Mb2cuZ2V0T3V0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIiIsIG1Mb2cuZ2V0RXJyKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdEVycm9yKCkgewotICAgICAgICBhc3NlcnRFcXVhbHMoIiIsIG1Mb2cuZ2V0T3V0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIiIsIG1Mb2cuZ2V0RXJyKCkpOwotCi0gICAgICAgIG1Mb2cuZXJyb3IoIlRlc3QgJWQiLCA0NCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIiLCBtTG9nLmdldE91dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJUZXN0IDQ0XG4iLCBtTG9nLmdldEVycigpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RFeGNlcHRpb24oKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscygiIiwgbUxvZy5nZXRPdXQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiIiwgbUxvZy5nZXRFcnIoKSk7Ci0KLSAgICAgICAgRXhjZXB0aW9uIGUgPSBuZXcgRXhjZXB0aW9uKCJNeSBFeGNlcHRpb24iKTsKLSAgICAgICAgbUxvZy5leGNlcHRpb24oZSwgIlRlc3QgJWQiLCA0NCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIiLCBtTG9nLmdldE91dCgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtTG9nLmdldEVycigpLnN0YXJ0c1dpdGgoIlRlc3QgNDRcbmphdmEubGFuZy5FeGNlcHRpb246IE15IEV4Y2VwdGlvbiIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTW9ja0xvZy5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL01vY2tMb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU3NTBhMy4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTW9ja0xvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotCi1wdWJsaWMgY2xhc3MgTW9ja0xvZyBleHRlbmRzIExvZyB7Ci0gICAgU3RyaW5nQnVpbGRlciBtT3V0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBTdHJpbmdCdWlsZGVyIG1FcnIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotCi0gICAgcHVibGljIFN0cmluZyBnZXRPdXQoKSB7Ci0gICAgICAgIHJldHVybiBtT3V0LnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRFcnIoKSB7Ci0gICAgICAgIHJldHVybiBtRXJyLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb3V0UHJpbnRsbihTdHJpbmcgbXNnKSB7Ci0gICAgICAgIG1PdXQuYXBwZW5kKG1zZyk7Ci0gICAgICAgIG1PdXQuYXBwZW5kKCdcbicpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGVyclByaW50bG4oU3RyaW5nIG1zZykgewotICAgICAgICBtRXJyLmFwcGVuZChtc2cpOwotICAgICAgICBtRXJyLmFwcGVuZCgnXG4nKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUmVuYW1lQ2xhc3NBZGFwdGVyVGVzdC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1JlbmFtZUNsYXNzQWRhcHRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIxMWU3My4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUmVuYW1lQ2xhc3NBZGFwdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0Lio7Ci0KLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotLyoqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUmVuYW1lQ2xhc3NBZGFwdGVyVGVzdCB7Ci0KLSAgICBwcml2YXRlIFJlbmFtZUNsYXNzQWRhcHRlciBtT3V0ZXI7Ci0gICAgcHJpdmF0ZSBSZW5hbWVDbGFzc0FkYXB0ZXIgbUlubmVyOwotCi0gICAgQEJlZm9yZQotICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIG1PdXRlciA9IG5ldyBSZW5hbWVDbGFzc0FkYXB0ZXIobnVsbCwgLy8gY3YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5wYWNrLk9sZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuYmxhaC5OZXciKTsKLQotICAgICAgICBtSW5uZXIgPSBuZXcgUmVuYW1lQ2xhc3NBZGFwdGVyKG51bGwsIC8vIGN2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20ucGFjay5PbGQkSW5uZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JnLmJsYWguTmV3JElubmVyIik7Ci0gICAgfQotCi0gICAgQEFmdGVyCi0gICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW5hbWVzIGEgdHlwZSwgZS5nLiAiTGNvbS5wYWNrYWdlLk15OyIKLSAgICAgKiBJZiB0aGUgdHlwZSBkb2Vzbid0IG5lZWQgdG8gYmUgcmVuYW1lZCwgcmV0dXJucyB0aGUgaW5wdXQgc3RyaW5nIGFzLWlzLgotICAgICAqLwotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdFJlbmFtZVR5cGVEZXNjKCkgewotCi0gICAgICAgIC8vIHByaW1pdGl2ZSB0eXBlcyBhcmUgbGVmdCB1bnRvdWNoZWQKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJJIiwgbU91dGVyLnJlbmFtZVR5cGVEZXNjKCJJIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkQiLCBtT3V0ZXIucmVuYW1lVHlwZURlc2MoIkQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiViIsIG1PdXRlci5yZW5hbWVUeXBlRGVzYygiViIpKTsKLQotICAgICAgICAvLyBvYmplY3QgdHlwZXMgdGhhdCBuZWVkIG5vIHJlbmFtaW5nIGFyZSBsZWZ0IHVudG91Y2hlZAotICAgICAgICBhc3NlcnRFcXVhbHMoIkxjb20ucGFja2FnZS5NeUNsYXNzOyIsIG1PdXRlci5yZW5hbWVUeXBlRGVzYygiTGNvbS5wYWNrYWdlLk15Q2xhc3M7IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkxjb20ucGFja2FnZS5NeUNsYXNzOyIsIG1Jbm5lci5yZW5hbWVUeXBlRGVzYygiTGNvbS5wYWNrYWdlLk15Q2xhc3M7IikpOwotCi0gICAgICAgIC8vIG9iamVjdCB0eXBlcyB0aGF0IG1hdGNoIHRoZSByZXF1aXJlbWVudHMKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJMb3JnLmJsYWguTmV3OyIsIG1PdXRlci5yZW5hbWVUeXBlRGVzYygiTGNvbS5wYWNrLk9sZDsiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiTG9yZy5ibGFoLk5ldyRJbm5lcjsiLCBtSW5uZXIucmVuYW1lVHlwZURlc2MoIkxjb20ucGFjay5PbGQkSW5uZXI7IikpOwotICAgICAgICAvLyBpbm5lciBjbGFzc2VzIG1hdGNoIHRoZSBiYXNlIHR5cGUgd2hpY2ggaXMgYmVpbmcgcmVuYW1lZAotICAgICAgICBhc3NlcnRFcXVhbHMoIkxvcmcuYmxhaC5OZXckT3RoZXI7IiwgbU91dGVyLnJlbmFtZVR5cGVEZXNjKCJMY29tLnBhY2suT2xkJE90aGVyOyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJMb3JnLmJsYWguTmV3JE90aGVyOyIsIG1Jbm5lci5yZW5hbWVUeXBlRGVzYygiTGNvbS5wYWNrLk9sZCRPdGhlcjsiKSk7Ci0KLSAgICAgICAgLy8gYXJyYXlzCi0gICAgICAgIGFzc2VydEVxdWFscygiW0xvcmcuYmxhaC5OZXc7IiwgIG1PdXRlci5yZW5hbWVUeXBlRGVzYygiW0xjb20ucGFjay5PbGQ7IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIltbTG9yZy5ibGFoLk5ldzsiLCBtT3V0ZXIucmVuYW1lVHlwZURlc2MoIltbTGNvbS5wYWNrLk9sZDsiKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJbTG9yZy5ibGFoLk5ldzsiLCAgbUlubmVyLnJlbmFtZVR5cGVEZXNjKCJbTGNvbS5wYWNrLk9sZDsiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiW1tMb3JnLmJsYWguTmV3OyIsIG1Jbm5lci5yZW5hbWVUeXBlRGVzYygiW1tMY29tLnBhY2suT2xkOyIpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW5hbWVzIGFuIG9iamVjdCB0eXBlLCBlLmcuICJMY29tLnBhY2thZ2UuTXlDbGFzczsiIG9yIGFuIGFycmF5IHR5cGUgdGhhdCBoYXMgYW4KLSAgICAgKiBvYmplY3QgZWxlbWVudCwgZS5nLiAiW0xjb20ucGFja2FnZS5NeUNsYXNzOyIKLSAgICAgKiBJZiB0aGUgdHlwZSBkb2Vzbid0IG5lZWQgdG8gYmUgcmVuYW1lZCwgcmV0dXJucyB0aGUgaW50ZXJuYWwgbmFtZSBvZiB0aGUgaW5wdXQgdHlwZS4KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RSZW5hbWVUeXBlKCkgewotICAgICAgICAvLyBTa2lwLiBUaGlzIGlzIGFjdHVhbGx5IHRlc3RlZCBieSB0ZXN0UmVuYW1lVHlwZURlc2MgYWJvdmUuCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVuYW1lcyBhbiBpbnRlcm5hbCB0eXBlIG5hbWUsIGUuZy4gImNvbS5wYWNrYWdlLk15Q2xhc3MiLgotICAgICAqIElmIHRoZSB0eXBlIGRvZXNuJ3QgbmVlZCB0byBiZSByZW5hbWVkLCByZXR1cm5zIHRoZSBpbnB1dCBzdHJpbmcgYXMtaXMuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0UmVuYW1lSW50ZXJuYWxUeXBlKCkgewotICAgICAgICAvLyBhbiBhY3R1YWwgRlFDTgotICAgICAgICBhc3NlcnRFcXVhbHMoIm9yZy5ibGFoLk5ldyIsIG1PdXRlci5yZW5hbWVJbnRlcm5hbFR5cGUoImNvbS5wYWNrLk9sZCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJvcmcuYmxhaC5OZXckSW5uZXIiLCBtT3V0ZXIucmVuYW1lSW50ZXJuYWxUeXBlKCJjb20ucGFjay5PbGQkSW5uZXIiKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJvcmcuYmxhaC5OZXckT3RoZXIiLCBtSW5uZXIucmVuYW1lSW50ZXJuYWxUeXBlKCJjb20ucGFjay5PbGQkT3RoZXIiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygib3JnLmJsYWguTmV3JE90aGVyIiwgbUlubmVyLnJlbmFtZUludGVybmFsVHlwZSgiY29tLnBhY2suT2xkJE90aGVyIikpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbmFtZXMgYSBtZXRob2QgZGVzY3JpcHRvciwgaS5lLiBhcHBsaWVzIHJlbmFtZVR5cGUgdG8gYWxsIGFyZ3VtZW50cyBhbmQgdG8gdGhlCi0gICAgICogcmV0dXJuIHZhbHVlLgotICAgICAqLwotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdFJlbmFtZU1ldGhvZERlc2MoKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscygiKElETG9yZy5ibGFoLk5ldztbTG9yZy5ibGFoLk5ldyRJbm5lcjspTG9yZy5ibGFoLk5ldyRPdGhlcjsiLAotICAgICAgICAgICAgICAgbU91dGVyLnJlbmFtZU1ldGhvZERlc2MoIihJRExjb20ucGFjay5PbGQ7W0xjb20ucGFjay5PbGQkSW5uZXI7KUxjb20ucGFjay5PbGQkT3RoZXI7IikpOwotICAgIH0KLQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvQ2xhc3NXaXRoTmF0aXZlLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvZGF0YWNsYXNzL0NsYXNzV2l0aE5hdGl2ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzE0ODUzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvQ2xhc3NXaXRoTmF0aXZlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLmRhdGFjbGFzczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0OwotCi0vKioKLSAqIER1bW15IHRlc3QgY2xhc3Mgd2l0aCBhIG5hdGl2ZSBtZXRob2QuCi0gKiBUaGUgbmF0aXZlIG1ldGhvZCBpcyBub3QgZGVmaW5lZCBhbmQgYW55IGF0dGVtcHQgdG8gaW52b2tlIGl0IHdpbGwKLSAqIHRocm93IGFuIHtAbGluayBVbnNhdGlzZmllZExpbmtFcnJvcn0uCi0gKgotICogVXNlZCBieSB7QGxpbmsgRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0fS4KLSAqLwotcHVibGljIGNsYXNzIENsYXNzV2l0aE5hdGl2ZSB7Ci0gICAgcHVibGljIENsYXNzV2l0aE5hdGl2ZSgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGFkZChpbnQgYSwgaW50IGIpIHsKLSAgICAgICAgcmV0dXJuIGEgKyBiOwotICAgIH0KLQotICAgIC8vIE5vdGU6IGl0J3MgZ29vZCB0byBoYXZlIGEgbG9uZyBvciBkb3VibGUgZm9yIHRlc3RpbmcgcGFyYW1ldGVycyBzaW5jZSB0aGV5IHRha2UKLSAgICAvLyAyIHNsb3RzIGluIHRoZSBzdGFjay9sb2NhbHMgbWFwcy4KLQotICAgIHB1YmxpYyBpbnQgY2FsbE5hdGl2ZUluc3RhbmNlKGludCBhLCBkb3VibGUgZCwgT2JqZWN0W10gbykgewotICAgICAgICByZXR1cm4gbmF0aXZlX2luc3RhbmNlKGEsIGQsIG8pOwotICAgIH0KLQotICAgIHByaXZhdGUgbmF0aXZlIGludCBuYXRpdmVfaW5zdGFuY2UoaW50IGEsIGRvdWJsZSBkLCBPYmplY3RbXSBvKTsKLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL2RhdGFjbGFzcy9DbGFzc1dpdGhOYXRpdmVfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvQ2xhc3NXaXRoTmF0aXZlX0RlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZDRkYzYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL2RhdGFjbGFzcy9DbGFzc1dpdGhOYXRpdmVfRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuZGF0YWNsYXNzOwotCi1pbXBvcnQgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5EZWxlZ2F0ZUNsYXNzQWRhcHRlclRlc3Q7Ci0KLS8qKgotICogVGhlIGRlbGVnYXRlIHRoYXQgcmVjZWl2ZXMgdGhlIGNhbGwgdG8ge0BsaW5rIENsYXNzV2l0aE5hdGl2ZV9EZWxlZ2F0ZX0ncyBvdmVycmlkZGVuIG1ldGhvZHMuCi0gKgotICogVXNlZCBieSB7QGxpbmsgRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0fS4KLSAqLwotcHVibGljIGNsYXNzIENsYXNzV2l0aE5hdGl2ZV9EZWxlZ2F0ZSB7Ci0gICAgcHVibGljIHN0YXRpYyBpbnQgbmF0aXZlX2luc3RhbmNlKENsYXNzV2l0aE5hdGl2ZSBpbnN0YW5jZSwgaW50IGEsIGRvdWJsZSBkLCBPYmplY3RbXSBvKSB7Ci0gICAgICAgIGlmIChvICE9IG51bGwgJiYgby5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICBvWzBdID0gaW5zdGFuY2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIChpbnQpKGEgKyBkKTsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvSmF2YUNsYXNzLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvZGF0YWNsYXNzL0phdmFDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjVhOTE4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvSmF2YUNsYXNzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuZGF0YWNsYXNzOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgSmF2YUNsYXNzIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHRlc3QgPSAidGVzdCI7Ci19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvZGF0YWNsYXNzL091dGVyQ2xhc3MuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvT3V0ZXJDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDgzZTc2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvT3V0ZXJDbGFzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5kYXRhY2xhc3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLkRlbGVnYXRlQ2xhc3NBZGFwdGVyVGVzdDsKLQotLyoqCi0gKiBUZXN0IGNsYXNzIHdpdGggYW4gaW5uZXIgY2xhc3MuCi0gKgotICogVXNlZCBieSB7QGxpbmsgRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0fS4KLSAqLwotcHVibGljIGNsYXNzIE91dGVyQ2xhc3MgewotICAgIHByaXZhdGUgaW50IG1PdXRlclZhbHVlID0gMTsKLSAgICBwdWJsaWMgT3V0ZXJDbGFzcygpIHsKLSAgICB9Ci0KLSAgICAvLyBPdXRlci5nZXQgcmV0dXJucyAxICsgYSArIGIKLSAgICAvLyBOb3RlOiBpdCdzIGdvb2QgdG8gaGF2ZSBhIGxvbmcgb3IgZG91YmxlIGZvciB0ZXN0aW5nIHBhcmFtZXRlcnMgc2luY2UgdGhleSB0YWtlCi0gICAgLy8gMiBzbG90cyBpbiB0aGUgc3RhY2svbG9jYWxzIG1hcHMuCi0gICAgcHVibGljIGludCBnZXQoaW50IGEsIGxvbmcgYikgewotICAgICAgICByZXR1cm4gbU91dGVyVmFsdWUgKyBhICsgKGludCkgYjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgY2xhc3MgSW5uZXJDbGFzcyB7Ci0gICAgICAgIHB1YmxpYyBJbm5lckNsYXNzKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSW5uZXIuZ2V0IHJldHVybnMgMiArIDEgKyBhICsgYgotICAgICAgICBwdWJsaWMgaW50IGdldChpbnQgYSwgbG9uZyBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gMiArIG1PdXRlclZhbHVlICsgYSArIChpbnQpIGI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKLSAgICBwcml2YXRlIFN0cmluZyBwcml2YXRlTWV0aG9kKCkgewotICAgICAgICByZXR1cm4gIm91dGVyUHJpdmF0ZU1ldGhvZCI7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvZGF0YWNsYXNzL091dGVyQ2xhc3NfRGVsZWdhdGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvT3V0ZXJDbGFzc19EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzRiZThlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvT3V0ZXJDbGFzc19EZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZS5kYXRhY2xhc3M7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLkRlbGVnYXRlQ2xhc3NBZGFwdGVyVGVzdDsKLQotLyoqCi0gKiBVc2VkIGJ5IHtAbGluayBEZWxlZ2F0ZUNsYXNzQWRhcHRlclRlc3R9LgotICovCi1wdWJsaWMgY2xhc3MgT3V0ZXJDbGFzc19EZWxlZ2F0ZSB7Ci0gICAgLy8gVGhlIGRlbGVnYXRlIG92ZXJyaWRlIG9mIE91dGVyLmdldCByZXR1cm5zIDQgKyBhICsgYgotICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldChPdXRlckNsYXNzIGluc3RhbmNlLCBpbnQgYSwgbG9uZyBiKSB7Ci0gICAgICAgIHJldHVybiA0ICsgYSArIChpbnQpIGI7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgcHJpdmF0ZU1ldGhvZChPdXRlckNsYXNzIGluc3RhbmNlKSB7Ci0gICAgICAgIHJldHVybiAib3V0ZXJQcml2YXRlX0RlbGVnYXRlIjsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvT3V0ZXJDbGFzc19Jbm5lckNsYXNzX0RlbGVnYXRlLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvZGF0YWNsYXNzL091dGVyQ2xhc3NfSW5uZXJDbGFzc19EZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDcyMjIwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9kYXRhY2xhc3MvT3V0ZXJDbGFzc19Jbm5lckNsYXNzX0RlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLmRhdGFjbGFzczsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0OwotaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGUuZGF0YWNsYXNzLk91dGVyQ2xhc3MuSW5uZXJDbGFzczsKLQotLyoqCi0gKiBVc2VkIGJ5IHtAbGluayBEZWxlZ2F0ZUNsYXNzQWRhcHRlclRlc3R9LgotICovCi1wdWJsaWMgY2xhc3MgT3V0ZXJDbGFzc19Jbm5lckNsYXNzX0RlbGVnYXRlIHsKLSAgICAvLyBUaGUgZGVsZWdhdGUgb3ZlcnJpZGUgb2YgSW5uZXIuZ2V0IHJldHVybiA2ICsgYSArIGIKLSAgICBwdWJsaWMgc3RhdGljIGludCBnZXQoT3V0ZXJDbGFzcyBvdXRlciwgSW5uZXJDbGFzcyBpbm5lciwgaW50IGEsIGxvbmcgYikgewotICAgICAgICByZXR1cm4gNiArIGEgKyAoaW50KSBiOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvZGF0YS9tb2NrX2FuZHJvaWQuamFyIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9kYXRhL21vY2tfYW5kcm9pZC5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZDhlZmIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9kYXRhL21vY2tfYW5kcm9pZC5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL21vY2tfZGF0YS9qYXZhL2xhbmcvSmF2YUNsYXNzLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL21vY2tfZGF0YS9qYXZhL2xhbmcvSmF2YUNsYXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NjEyZTkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9tb2NrX2RhdGEvamF2YS9sYW5nL0phdmFDbGFzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMS4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBqYXZhLmxhbmc7Ci0KLXB1YmxpYyBjbGFzcyBKYXZhQ2xhc3MgewotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdGVzdCA9ICJ0ZXN0IjsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvbW9ja19kYXRhL21vY2tfYW5kcm9pZC9kdW1teS9Jbm5lclRlc3QuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvbW9ja19kYXRhL21vY2tfYW5kcm9pZC9kdW1teS9Jbm5lclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNhMWQwNS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL21vY2tfZGF0YS9tb2NrX2FuZHJvaWQvZHVtbXkvSW5uZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG1vY2tfYW5kcm9pZC5kdW1teTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgY2xhc3MgSW5uZXJUZXN0IHsKLQotICAgIHByaXZhdGUgaW50IG1Tb21lRmllbGQ7Ci0gICAgcHJpdmF0ZSBNeVN0YXRpY0lubmVyQ2xhc3MgbUlubmVySW5zdGFuY2U7Ci0gICAgcHJpdmF0ZSBNeUludEVudW0gbVRoZUludEVudW07Ci0gICAgcHJpdmF0ZSBNeUdlbmVyaWNzMTxpbnRbXVtdLCBJbm5lclRlc3QsIE15SW50RW51bSwgZmxvYXRbXT4gbUdlbmVyaWMxOwotCi0gICAgcHVibGljIGNsYXNzIE5vdFN0YXRpY0lubmVyMiBleHRlbmRzIE5vdFN0YXRpY0lubmVyMSB7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgY2xhc3MgTm90U3RhdGljSW5uZXIxIHsKLQotICAgICAgICBwdWJsaWMgdm9pZCBzb21lVGhpbmcoKSB7Ci0gICAgICAgICAgICBtU29tZUZpZWxkID0gMjsKLSAgICAgICAgICAgIG1Jbm5lckluc3RhbmNlID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlTdGF0aWNJbm5lckNsYXNzIHsKLQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEZXJpdmluZ0NsYXNzIGV4dGVuZHMgSW5uZXJUZXN0IHsKLSAgICAgICAgCi0gICAgfQotICAgIAotICAgIC8vIGVudW1zIGFyZSBhIGtpbmQgb2YgaW5uZXIgc3RhdGljIGNsYXNzCi0gICAgcHVibGljIGVudW0gTXlJbnRFbnVtIHsKLSAgICAgICAgVkFMVUUwKDApLAotICAgICAgICBWQUxVRTEoMSksCi0gICAgICAgIFZBTFVFMigyKTsKLQotICAgICAgICBNeUludEVudW0oaW50IG15SW50KSB7Ci0gICAgICAgICAgICB0aGlzLm15SW50ID0gbXlJbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgaW50IG15SW50OwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIE15R2VuZXJpY3MxPFQsIFUsIFYsIFc+IHsKLSAgICAgICAgcHVibGljIE15R2VuZXJpY3MxKCkgewotICAgICAgICAgICAgaW50IGEgPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyA8WD4gdm9pZCBnZW5lcmljTWV0aG9kMShYIGEsIFhbXSBiKSB7Ci0gICAgfQotCi0gICAgcHVibGljIDxYLCBZPiB2b2lkIGdlbmVyaWNNZXRob2QyKFggYSwgTGlzdDxZPiBiKSB7Ci0gICAgfQotCi0gICAgcHVibGljIDxYLCBZIGV4dGVuZHMgSW5uZXJUZXN0PiB2b2lkIGdlbmVyaWNNZXRob2QzKFggYSwgTGlzdDxZPiBiKSB7Ci0gICAgfQotCi0gICAgcHVibGljIDxUIGV4dGVuZHMgSW5uZXJUZXN0PiB2b2lkIGdlbmVyaWNNZXRob2Q0KFRbXSBhLCBDb2xsZWN0aW9uPFQ+IGIsIENvbGxlY3Rpb248Pz4gYykgewotICAgICAgICBJdGVyYXRvcjxUPiBpID0gYi5pdGVyYXRvcigpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNvbWVNZXRob2QoSW5uZXJUZXN0IHNlbGYpIHsKLSAgICAgICAgbVNvbWVGaWVsZCA9IHNlbGYubVNvbWVGaWVsZDsKLSAgICAgICAgTXlTdGF0aWNJbm5lckNsYXNzIG0gPSBuZXcgTXlTdGF0aWNJbm5lckNsYXNzKCk7Ci0gICAgICAgIG1Jbm5lckluc3RhbmNlID0gbTsKLSAgICAgICAgbVRoZUludEVudW0gPSBudWxsOwotICAgICAgICBtR2VuZXJpYzEgPSBuZXcgTXlHZW5lcmljczEoKTsKLSAgICAgICAgZ2VuZXJpY01ldGhvZDQobmV3IERlcml2aW5nQ2xhc3NbMF0sIG5ldyBBcnJheUxpc3Q8RGVyaXZpbmdDbGFzcz4oKSwgbmV3IEFycmF5TGlzdDxJbm5lclRlc3Q+KCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvbW9ja19kYXRhL21vY2tfYW5kcm9pZC92aWV3L1ZpZXcuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvbW9ja19kYXRhL21vY2tfYW5kcm9pZC92aWV3L1ZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRlYzhhOS4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL21vY2tfZGF0YS9tb2NrX2FuZHJvaWQvdmlldy9WaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG1vY2tfYW5kcm9pZC52aWV3OwotCi1pbXBvcnQgamF2YS5sYW5nLkphdmFDbGFzczsKLQotcHVibGljIGNsYXNzIFZpZXcgewotCi0gICAgICAgIFN0cmluZyB4ID0gSmF2YUNsYXNzLnRlc3Q7Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvbW9ja19kYXRhL21vY2tfYW5kcm9pZC92aWV3L1ZpZXdHcm91cC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9tb2NrX2RhdGEvbW9ja19hbmRyb2lkL3ZpZXcvVmlld0dyb3VwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NjQ3MGYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9tb2NrX2RhdGEvbW9ja19hbmRyb2lkL3ZpZXcvVmlld0dyb3VwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG1vY2tfYW5kcm9pZC52aWV3OwotCi1wdWJsaWMgY2xhc3MgVmlld0dyb3VwIGV4dGVuZHMgVmlldyB7Ci0KLSAgICBwdWJsaWMgY2xhc3MgTWFyZ2luTGF5b3V0UGFyYW1zIGV4dGVuZHMgTGF5b3V0UGFyYW1zIHsKLQotICAgIH0KLQotICAgIHB1YmxpYyBjbGFzcyBMYXlvdXRQYXJhbXMgewotCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL21vY2tfZGF0YS9tb2NrX2FuZHJvaWQvd2lkZ2V0L0xpbmVhckxheW91dC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9tb2NrX2RhdGEvbW9ja19hbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg3MGE2My4uMDAwMDAwMAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL21vY2tfZGF0YS9tb2NrX2FuZHJvaWQvd2lkZ2V0L0xpbmVhckxheW91dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMS4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBtb2NrX2FuZHJvaWQud2lkZ2V0OwotCi1pbXBvcnQgbW9ja19hbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotCi1wdWJsaWMgY2xhc3MgTGluZWFyTGF5b3V0IGV4dGVuZHMgVmlld0dyb3VwIHsKLQotICAgIHB1YmxpYyBjbGFzcyBMYXlvdXRQYXJhbXMgZXh0ZW5kcyBtb2NrX2FuZHJvaWQudmlldy5WaWV3R3JvdXAuTGF5b3V0UGFyYW1zIHsKLQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9tb2NrX2RhdGEvbW9ja19hbmRyb2lkL3dpZGdldC9UYWJsZUxheW91dC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9tb2NrX2RhdGEvbW9ja19hbmRyb2lkL3dpZGdldC9UYWJsZUxheW91dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDU1ZTdkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvbW9ja19kYXRhL21vY2tfYW5kcm9pZC93aWRnZXQvVGFibGVMYXlvdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDEuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgbW9ja19hbmRyb2lkLndpZGdldDsKLQotaW1wb3J0IG1vY2tfYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLQotcHVibGljIGNsYXNzIFRhYmxlTGF5b3V0IGV4dGVuZHMgVmlld0dyb3VwIHsKLQotICAgIHB1YmxpYyBjbGFzcyBMYXlvdXRQYXJhbXMgZXh0ZW5kcyBNYXJnaW5MYXlvdXRQYXJhbXMgewotCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS90b29scy9vYmJ0b29sL0FuZHJvaWQubWsgYi90b29scy9vYmJ0b29sL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZjU2ZDYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvb2JidG9vbC9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIE9wYXF1ZSBCaW5hcnkgQmxvYiAoT0JCKSBUb29sCi0jCi0KLSMgVGhpcyB0b29sIGlzIHByZWJ1aWx0IGlmIHdlJ3JlIGRvaW5nIGFuIGFwcC1vbmx5IGJ1aWxkLgotaWZlcSAoJChUQVJHRVRfQlVJTERfQVBQUyksKQotCi1MT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVMgOj0gXAotCU1haW4uY3BwCi0KLUxPQ0FMX0NGTEFHUyA6PSAtV2FsbCAtV2Vycm9yCi0KLSNMT0NBTF9DX0lOQ0xVREVTICs9Ci0KLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gXAotCWxpYmFuZHJvaWRmdyBcCi0JbGlidXRpbHMgXAotCWxpYmN1dGlscyBcCi0JbGlibG9nCi0KLWlmZXEgKCQoSE9TVF9PUyksbGludXgpCi1MT0NBTF9MRExJQlMgKz0gLWxkbCAtbHB0aHJlYWQKLWVuZGlmCi0KLUxPQ0FMX01PRFVMRSA6PSBvYmJ0b29sCi0KLWluY2x1ZGUgJChCVUlMRF9IT1NUX0VYRUNVVEFCTEUpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IHBia2RmMmdlbgotTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKLUxPQ0FMX0NGTEFHUyA6PSAtV2FsbCAtV2Vycm9yCi1MT0NBTF9TUkNfRklMRVMgOj0gcGJrZGYyZ2VuLmNwcAotTE9DQUxfTERMSUJTICs9IC1sZGwKLUxPQ0FMX0NfSU5DTFVERVMgOj0gZXh0ZXJuYWwvb3BlbnNzbC9pbmNsdWRlICQoTE9DQUxfQ19JTkNMVURFUykKLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY3J5cHRvX3N0YXRpYwotCi1pbmNsdWRlICQoQlVJTERfSE9TVF9FWEVDVVRBQkxFKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1lbmRpZiAjIFRBUkdFVF9CVUlMRF9BUFBTCmRpZmYgLS1naXQgYS90b29scy9vYmJ0b29sL01haW4uY3BwIGIvdG9vbHMvb2JidG9vbC9NYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIxNTJlOC4uMDAwMDAwMAotLS0gYS90b29scy9vYmJ0b29sL01haW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8YW5kcm9pZGZ3L09iYkZpbGUuaD4KLSNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+Ci0KLSNpbmNsdWRlIDxnZXRvcHQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGdQcm9nTmFtZSA9ICJvYmJ0b29sIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBnUHJvZ1ZlcnNpb24gPSAiMS4wIjsKLQotc3RhdGljIGludCB3YW50VXNhZ2UgPSAwOwotc3RhdGljIGludCB3YW50VmVyc2lvbiA9IDA7Ci0KLSNkZWZpbmUgU0FMVF9MRU4gOAotCi0jZGVmaW5lIEFERF9PUFRTICJuOnY6b3M6Igotc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbG9uZ29wdHNbXSA9IHsKLSAgICB7ImhlbHAiLCAgICAgICBub19hcmd1bWVudCwgJndhbnRVc2FnZSwgICAxfSwKLSAgICB7InZlcnNpb24iLCAgICBub19hcmd1bWVudCwgJndhbnRWZXJzaW9uLCAxfSwKLQotICAgIC8qIEFyZ3MgZm9yICJhZGQiICovCi0gICAgeyJuYW1lIiwgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICduJ30sCi0gICAgeyJ2ZXJzaW9uIiwgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICd2J30sCi0gICAgeyJvdmVybGF5IiwgICAgb3B0aW9uYWxfYXJndW1lbnQsIE5VTEwsICdvJ30sCi0gICAgeyJzYWx0IiwgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdzJ30sCi0KLSAgICB7TlVMTCwgMCwgTlVMTCwgJ1wwJ30KLX07Ci0KLWNsYXNzIFBhY2thZ2VJbmZvIHsKLXB1YmxpYzoKLSAgICBQYWNrYWdlSW5mbygpCi0gICAgICAgICAgICA6IHBhY2thZ2VOYW1lKE5VTEwpCi0gICAgICAgICAgICAsIHBhY2thZ2VWZXJzaW9uKC0xKQotICAgICAgICAgICAgLCBvdmVybGF5KGZhbHNlKQotICAgICAgICAgICAgLCBzYWx0ZWQoZmFsc2UpCi0gICAgewotICAgICAgICBtZW1zZXQoJnNhbHQsIDAsIHNpemVvZihzYWx0KSk7Ci0gICAgfQotCi0gICAgY2hhciogcGFja2FnZU5hbWU7Ci0gICAgaW50IHBhY2thZ2VWZXJzaW9uOwotICAgIGJvb2wgb3ZlcmxheTsKLSAgICBib29sIHNhbHRlZDsKLSAgICB1bnNpZ25lZCBjaGFyIHNhbHRbU0FMVF9MRU5dOwotfTsKLQotLyoKLSAqIFByaW50IHVzYWdlIGluZm8uCi0gKi8KLXZvaWQgdXNhZ2Uodm9pZCkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIk9wYXF1ZSBCaW5hcnkgQmxvYiAoT0JCKSBUb29sXG5cbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6XG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyBhW2RkXSBbIE9QVElPTlMgXSBGSUxFTkFNRVxuIgotICAgICAgICAiICAgQWRkcyBhbiBPQkIgc2lnbmF0dXJlIHRvIHRoZSBmaWxlLlxuXG4iLCBnUHJvZ05hbWUpOwotICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAiICAgT3B0aW9uczpcbiIKLSAgICAgICAgIiAgICAgLW4gPHBhY2thZ2UgbmFtZT4gICAgICBzZXRzIHRoZSBPQkIgcGFja2FnZSBuYW1lIChyZXF1aXJlZClcbiIKLSAgICAgICAgIiAgICAgLXYgPE9CQiB2ZXJzaW9uPiAgICAgICBzZXRzIHRoZSBPQkIgdmVyc2lvbiAocmVxdWlyZWQpXG4iCi0gICAgICAgICIgICAgIC1vICAgICAgICAgICAgICAgICAgICAgc2V0cyB0aGUgT0JCIG92ZXJsYXkgZmxhZ1xuIgotICAgICAgICAiICAgICAtcyA8OCBieXRlIGhleCBzYWx0PiAgIHNldHMgdGhlIGNyeXB0byBrZXkgc2FsdCAoaWYgZW5jcnlwdGVkKVxuIgotICAgICAgICAiXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyByW2Vtb3ZlXSBGSUxFTkFNRVxuIgotICAgICAgICAiICAgUmVtb3ZlcyB0aGUgT0JCIHNpZ25hdHVyZSBmcm9tIHRoZSBmaWxlLlxuXG4iLCBnUHJvZ05hbWUpOwotICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAiICVzIGlbbmZvXSBGSUxFTkFNRVxuIgotICAgICAgICAiICAgUHJpbnRzIHRoZSBPQkIgc2lnbmF0dXJlIGluZm9ybWF0aW9uIG9mIGEgZmlsZS5cblxuIiwgZ1Byb2dOYW1lKTsKLX0KLQotdm9pZCBkb0FkZChjb25zdCBjaGFyKiBmaWxlbmFtZSwgc3RydWN0IFBhY2thZ2VJbmZvKiBpbmZvKSB7Ci0gICAgT2JiRmlsZSAqb2JiID0gbmV3IE9iYkZpbGUoKTsKLSAgICBpZiAob2JiLT5yZWFkRnJvbShmaWxlbmFtZSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJXM6IE9CQiBzaWduYXR1cmUgYWxyZWFkeSBwcmVzZW50XG4iLCBmaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBvYmItPnNldFBhY2thZ2VOYW1lKFN0cmluZzgoaW5mby0+cGFja2FnZU5hbWUpKTsKLSAgICBvYmItPnNldFZlcnNpb24oaW5mby0+cGFja2FnZVZlcnNpb24pOwotICAgIG9iYi0+c2V0T3ZlcmxheShpbmZvLT5vdmVybGF5KTsKLSAgICBpZiAoaW5mby0+c2FsdGVkKSB7Ci0gICAgICAgIG9iYi0+c2V0U2FsdChpbmZvLT5zYWx0LCBTQUxUX0xFTik7Ci0gICAgfQotCi0gICAgaWYgKCFvYmItPndyaXRlVG8oZmlsZW5hbWUpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICVzOiBjb3VsZG4ndCB3cml0ZSBPQkIgc2lnbmF0dXJlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZwcmludGYoc3RkZXJyLCAiT0JCIHNpZ25hdHVyZSBzdWNjZXNzZnVsbHkgd3JpdHRlblxuIik7Ci19Ci0KLXZvaWQgZG9SZW1vdmUoY29uc3QgY2hhciogZmlsZW5hbWUpIHsKLSAgICBPYmJGaWxlICpvYmIgPSBuZXcgT2JiRmlsZSgpOwotICAgIGlmICghb2JiLT5yZWFkRnJvbShmaWxlbmFtZSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJXM6IG5vIE9CQiBzaWduYXR1cmUgcHJlc2VudFxuIiwgZmlsZW5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFvYmItPnJlbW92ZUZyb20oZmlsZW5hbWUpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICVzOiBjb3VsZG4ndCByZW1vdmUgT0JCIHNpZ25hdHVyZVxuIiwgZmlsZW5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZnByaW50ZihzdGRlcnIsICJPQkIgc2lnbmF0dXJlIHN1Y2Nlc3NmdWxseSByZW1vdmVkXG4iKTsKLX0KLQotdm9pZCBkb0luZm8oY29uc3QgY2hhciogZmlsZW5hbWUpIHsKLSAgICBPYmJGaWxlICpvYmIgPSBuZXcgT2JiRmlsZSgpOwotICAgIGlmICghb2JiLT5yZWFkRnJvbShmaWxlbmFtZSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJXM6IGNvdWxkbid0IHJlYWQgT0JCIHNpZ25hdHVyZVxuIiwgZmlsZW5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJpbnRmKCJPQkIgaW5mbyBmb3IgJyVzJzpcbiIsIGZpbGVuYW1lKTsKLSAgICBwcmludGYoIlBhY2thZ2UgbmFtZTogJXNcbiIsIG9iYi0+Z2V0UGFja2FnZU5hbWUoKS5zdHJpbmcoKSk7Ci0gICAgcHJpbnRmKCIgICAgIFZlcnNpb246ICVkXG4iLCBvYmItPmdldFZlcnNpb24oKSk7Ci0gICAgcHJpbnRmKCIgICAgICAgRmxhZ3M6IDB4JTA4eFxuIiwgb2JiLT5nZXRGbGFncygpKTsKLSAgICBwcmludGYoIiAgICAgT3ZlcmxheTogJXNcbiIsIG9iYi0+aXNPdmVybGF5KCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICBwcmludGYoIiAgICAgICAgU2FsdDogIik7Ci0KLSAgICBzaXplX3Qgc2FsdExlbjsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzYWx0ID0gb2JiLT5nZXRTYWx0KCZzYWx0TGVuKTsKLSAgICBpZiAoc2FsdCAhPSBOVUxMKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0FMVF9MRU47IGkrKykgewotICAgICAgICAgICAgcHJpbnRmKCIlMDJ4Iiwgc2FsdFtpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50ZigiPGVtcHR5PlxuIik7Ci0gICAgfQotfQotCi1ib29sIGZyb21IZXgoY2hhciBoLCB1bnNpZ25lZCBjaGFyICpiKSB7Ci0gICAgaWYgKGggPj0gJzAnICYmIGggPD0gJzknKSB7Ci0gICAgICAgICpiID0gaCAtICcwJzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChoID49ICdhJyAmJiBoIDw9ICdmJykgewotICAgICAgICAqYiA9IGggLSAnYScgKyAxMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChoID49ICdBJyAmJiBoIDw9ICdGJykgewotICAgICAgICAqYiA9IGggLSAnQScgKyAxMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBoZXhUb0J5dGUoY2hhciBoMSwgY2hhciBoMiwgdW5zaWduZWQgY2hhciogYikgewotICAgIHVuc2lnbmVkIGNoYXIgZmlyc3QsIHNlY29uZDsKLSAgICBpZiAoIWZyb21IZXgoaDEsICZmaXJzdCkpIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWZyb21IZXgoaDIsICZzZWNvbmQpKSByZXR1cm4gZmFsc2U7Ci0gICAgKmIgPSAoZmlyc3QgPDwgNCkgfCBzZWNvbmQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBQYXJzZSBhcmdzLgotICovCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciogY29uc3QgYXJndltdKQotewotICAgIGludCBvcHQ7Ci0gICAgaW50IG9wdGlvbl9pbmRleCA9IDA7Ci0gICAgc3RydWN0IFBhY2thZ2VJbmZvIHBhY2thZ2VfaW5mbzsKLQotICAgIGludCByZXN1bHQgPSAxOyAgICAvLyBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIGFuIGVycm9yLgotCi0gICAgaWYgKGFyZ2MgPCAyKSB7Ci0gICAgICAgIHdhbnRVc2FnZSA9IDE7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICB3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIEFERF9PUFRTLCBsb25nb3B0cywgJm9wdGlvbl9pbmRleCkpICE9IC0xKSB7Ci0gICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIGlmIChsb25nb3B0c1tvcHRpb25faW5kZXhdLmZsYWcpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiclcycgcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIsIGxvbmdvcHRzW29wdGlvbl9pbmRleF0ubmFtZSk7Ci0gICAgICAgICAgICB3YW50VXNhZ2UgPSAxOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICBjYXNlICduJzoKLSAgICAgICAgICAgIHBhY2thZ2VfaW5mby5wYWNrYWdlTmFtZSA9IG9wdGFyZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd2JzogewotICAgICAgICAgICAgY2hhciogZW5kOwotICAgICAgICAgICAgcGFja2FnZV9pbmZvLnBhY2thZ2VWZXJzaW9uID0gc3RydG9sKG9wdGFyZywgJmVuZCwgMTApOwotICAgICAgICAgICAgaWYgKCpvcHRhcmcgPT0gJ1wwJyB8fCAqZW5kICE9ICdcMCcpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBpbnZhbGlkIHZlcnNpb247IHNob3VsZCBiZSBpbnRlZ2VyIVxuXG4iKTsKLSAgICAgICAgICAgICAgICB3YW50VXNhZ2UgPSAxOwotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgJ28nOgotICAgICAgICAgICAgcGFja2FnZV9pbmZvLm92ZXJsYXkgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgaWYgKHN0cmxlbihvcHRhcmcpICE9IFNBTFRfTEVOICogMikgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHNhbHQgbXVzdCBiZSA4IGJ5dGVzIGluIGhleCAoZS5nLiwgQUJDRDY1MDMxMzM3RDAwRClcblxuIik7Ci0gICAgICAgICAgICAgICAgd2FudFVzYWdlID0gMTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhY2thZ2VfaW5mby5zYWx0ZWQgPSB0cnVlOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGI7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMCwgaiA9IDA7IGkgPCBTQUxUX0xFTjsgaSsrLCBqKz0yKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFoZXhUb0J5dGUob3B0YXJnW2pdLCBvcHRhcmdbaisxXSwgJmIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHNhbHQgbXVzdCBiZSBpbiBoZXggKGUuZy4sIEFCQ0Q2NTAzMTMzN0QwMEQpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2FudFVzYWdlID0gMTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYWNrYWdlX2luZm8uc2FsdFtpXSA9IGI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnPyc6Ci0gICAgICAgICAgICB3YW50VXNhZ2UgPSAxOwotICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHdhbnRWZXJzaW9uKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgJXNcbiIsIGdQcm9nTmFtZSwgZ1Byb2dWZXJzaW9uKTsKLSAgICB9Ci0KLSAgICBpZiAod2FudFVzYWdlKSB7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSNkZWZpbmUgQ0hFQ0tfT1AobmFtZSkgXAotICAgIGlmIChzdHJuY21wKG9wLCBuYW1lLCBvcHNpemUpKSB7IFwKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogdW5rbm93biBmdW5jdGlvbiAnJXMnIVxuXG4iLCBvcCk7IFwKLSAgICAgICAgd2FudFVzYWdlID0gMTsgXAotICAgICAgICBnb3RvIGJhaWw7IFwKLSAgICB9Ci0KLSAgICBpZiAob3B0aW5kIDwgYXJnYykgewotICAgICAgICBjb25zdCBjaGFyKiBvcCA9IGFyZ3Zbb3B0aW5kKytdOwotICAgICAgICBjb25zdCBpbnQgb3BzaXplID0gc3RybGVuKG9wKTsKLQotICAgICAgICBpZiAob3B0aW5kID49IGFyZ2MpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGZpbGVuYW1lIHJlcXVpcmVkIVxuXG4iKTsKLSAgICAgICAgICAgIHdhbnRVc2FnZSA9IDE7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9IGFyZ3Zbb3B0aW5kKytdOwotCi0gICAgICAgIHN3aXRjaCAob3BbMF0pIHsKLSAgICAgICAgY2FzZSAnYSc6Ci0gICAgICAgICAgICBDSEVDS19PUCgiYWRkIik7Ci0gICAgICAgICAgICBpZiAocGFja2FnZV9pbmZvLnBhY2thZ2VOYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBhcmd1bWVudHMgcmVxdWlyZWQgJ3BhY2thZ2VOYW1lJyBhbmQgJ3ZlcnNpb24nXG4iKTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkb0FkZChmaWxlbmFtZSwgJnBhY2thZ2VfaW5mbyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAncic6Ci0gICAgICAgICAgICBDSEVDS19PUCgicmVtb3ZlIik7Ci0gICAgICAgICAgICBkb1JlbW92ZShmaWxlbmFtZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICBDSEVDS19PUCgiaW5mbyIpOwotICAgICAgICAgICAgZG9JbmZvKGZpbGVuYW1lKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogdW5rbm93biBjb21tYW5kICclcychXG5cbiIsIG9wKTsKLSAgICAgICAgICAgIHdhbnRVc2FnZSA9IDE7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLWJhaWw6Ci0gICAgaWYgKHdhbnRVc2FnZSkgewotICAgICAgICB1c2FnZSgpOwotICAgICAgICByZXN1bHQgPSAyOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19CmRpZmYgLS1naXQgYS90b29scy9vYmJ0b29sL21rb2JiLnNoIGIvdG9vbHMvb2JidG9vbC9ta29iYi5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNzI1MjUwZC4uMDAwMDAwMAotLS0gYS90b29scy9vYmJ0b29sL21rb2JiLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMjgxICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jCi0jIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jIAotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIyAKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLQotIyBta29iYi5zaCAtIENyZWF0ZXMgT0JCIGZpbGVzIG9uIExpbnV4IG1hY2hpbmVzCi0KLSMgRGlyZWN0b3J5IHdoZXJlIHdlIHNob3VsZCB0ZW1wb3JhcmlseSBtb3VudCB0aGUgT0JCIGxvb3BiYWNrIHRvIGNvcHkgZmlsZXMKLU1PVU5URElSPS90bXAKLQotIyBQcmVzZXRzLiBDaGFuZ2luZyB0aGVzZSB3aWxsIHByb2JhYmx5IGJyZWFrIHlvdXIgT0JCIG9uIHRoZSBkZXZpY2UKLUNSWVBUTz10d29maXNoCi1GUz12ZmF0Ci1NS0ZTPW1rZnMudmZhdAotTE9TRVRVUD1sb3NldHVwCi1CTE9DS19TSVpFPTUxMgotU0xPUD01MTIgIyBBbW91bnQgb2YgZmlsZXN5c3RlbSBzbG9wIGluICR7QkxPQ0tfU0laRX0gYmxvY2tzCi0KLWZpbmRfYmluYXJpZXMoKSB7Ci0gICAgTUtGU0JJTj1gd2hpY2ggJHtNS0ZTfWAKLSAgICBMT1NFVFVQQklOPWB3aGljaCAke0xPU0VUVVB9YAotICAgIE1PVU5UQklOPWB3aGljaCBtb3VudGAKLSAgICBVTU9VTlRCSU49YHdoaWNoIHVtb3VudGAKLSAgICBEREJJTj1gd2hpY2ggZGRgCi0gICAgUlNZTkNCSU49YHdoaWNoIHJzeW5jYAotICAgIFBCS0RGMkdFTj1gd2hpY2ggcGJrZGYyZ2VuYAotfQotCi1jaGVja19wcmVyZXFzKCkgewotICAgIGlmIFsgImB1bmFtZSAtc2B4IiAhPSAiTGludXh4IiBdOyB0aGVuIFwKLSAgICAgICAgZWNobyAiRVJST1I6IFRoaXMgc2NyaXB0IG9ubHkgd29ya3Mgb24gTGludXghIgotICAgICAgICBleGl0IDEKLSAgICBmaQotCi0gICAgaWYgISBlZ3JlcCAtcSAiXmNyeXB0b2xvb3AgIiAvcHJvYy9tb2R1bGVzOyB0aGVuIFwKLSAgICAgICAgZWNobyAiRVJST1I6IENvdWxkIG5vdCBmaW5kIGNyeXB0b2xvb3AgaW4gdGhlIGtlcm5lbC4iCi0gICAgICAgIGVjaG8gIlBlcmhhcHMgeW91IG5lZWQgdG86IG1vZHByb2JlIGNyeXB0b2xvb3AiCi0gICAgICAgIGV4aXQgMQotICAgIGZpCi0KLSAgICBpZiAhIGVncmVwIC1xICJuYW1lXHMqOlxzKiR7Q1JZUFRPfSQiIC9wcm9jL2NyeXB0bzsgdGhlbiBcCi0gICAgICAgIGVjaG8gIkVSUk9SOiBDb3VsZCBub3QgZmluZCBjcnlwdG8gXGAke0NSWVBUT30nIGluIHRoZSBrZXJuZWwuIgotICAgICAgICBlY2hvICJQZXJoYXBzIHlvdSBuZWVkIHRvOiBtb2Rwcm9iZSAke0NSWVBUT30iCi0gICAgICAgIGV4aXQgMQotICAgIGZpCi0KLSAgICBpZiAhIGVncmVwIC1xICJeXHMqJHtGU30kIiAvcHJvYy9maWxlc3lzdGVtczsgdGhlbiBcCi0gICAgICAgIGVjaG8gIkVSUk9SOiBDb3VsZCBub3QgZmluZCBmaWxlc3lzdGVtIFxgJHtGU30nIGluIHRoZSBrZXJuZWwuIgotICAgICAgICBlY2hvICJQZXJoYXBzIHlvdSBuZWVkIHRvOiBtb2Rwcm9iZSAke0ZTfSIKLSAgICAgICAgZXhpdCAxCi0gICAgZmkKLQotICAgIGlmIFsgIiR7TUtGU0JJTn14IiA9ICJ4IiBdOyB0aGVuIFwKLSAgICAgICAgZWNobyAiRVJST1I6IENvdWxkIG5vdCBmaW5kICR7TUtGU30gaW4geW91ciBwYXRoISIKLSAgICAgICAgZXhpdCAxCi0gICAgZWxpZiBbICEgLXggIiR7TUtGU0JJTn0iIF07IHRoZW4gXAotICAgICAgICBlY2hvICJFUlJPUjogJHtNS0ZTQklOfSBpcyBub3QgZXhlY3V0YWJsZSEiCi0gICAgICAgIGV4aXQgMQotICAgIGZpCi0KLSAgICBpZiBbICIke0xPU0VUVVBCSU59eCIgPSAieCIgXTsgdGhlbiBcCi0gICAgICAgIGVjaG8gIkVSUk9SOiBDb3VsZCBub3QgZmluZCAke0xPU0VUVVB9IGluIHlvdXIgcGF0aCEiCi0gICAgICAgIGV4aXQgMQotICAgIGVsaWYgWyAhIC14ICIke0xPU0VUVVBCSU59IiBdOyB0aGVuIFwKLSAgICAgICAgZWNobyAiRVJST1I6ICR7TE9TRVRVUEJJTn0gaXMgbm90IGV4ZWN1dGFibGUhIgotICAgICAgICBleGl0IDEKLSAgICBmaQotCi0gICAgaWYgWyAiJHtQQktERjJHRU59eCIgPSAieCIgXTsgdGhlbiBcCi0gICAgICAgIGVjaG8gIkVSUk9SOiBDb3VsZCBub3QgZmluZCBwYmtkZjJnZW4gaW4geW91ciBwYXRoISIKLSAgICAgICAgZXhpdCAxCi0gICAgZmkKLX0KLQotY2xlYW51cCgpIHsKLSAgICBpZiBbICIke2xvb3BkZXZ9eCIgIT0gIngiIF07IHRoZW4gXAotICAgICAgICAke0xPU0VUVVBCSU59IC1kICR7bG9vcGRldn0KLSAgICBmaQotfQotCi1oaWRkZW5fcHJvbXB0KCkgewotICAgIHVuc2V0IG91dHB1dAotICAgIHByb21wdD0iJDEiCi0gICAgb3V0dmFyPSIkMiIKLSAgICB3aGlsZSByZWFkIC1zIC1uIDEgLXAgIiRwcm9tcHQiIGM7IGRvIFwKLSAgICAgICAgaWYgWyAieCRjIiA9ICJ4IiBdOyB0aGVuIFwKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGZpCi0gICAgICAgIHByb21wdD0nKicKLSAgICAgICAgb3V0cHV0PSIke291dHB1dH0ke2N9IgotICAgIGRvbmUKLSAgICBlY2hvCi0gICAgZXZhbCAkb3V0dmFyPSIkb3V0cHV0IgotICAgIHVuc2V0IG91dHB1dAotfQotCi1yZWFkX2tleSgpIHsKLSAgICBoaWRkZW5fcHJvbXB0ICIgICAgICAgIEVuY3J5cHRpb24ga2V5OiAiIGtleQotCi0gICAgaWYgWyAiJHtrZXl9eCIgPSAieCIgXTsgdGhlbiBcCi0gICAgICAgIGVjaG8gIkVSUk9SOiBBbiBlbXB0eSBrZXkgaXMgbm90IGFsbG93ZWQhIgotICAgICAgICBleGl0IDEKLSAgICBmaQotCi0gICAgaGlkZGVuX3Byb21wdCAiRW5jcnlwdGlvbiBrZXkgKGFnYWluKTogIiBrZXkyCi0KLSAgICBpZiBbICIke2tleX14IiAhPSAiJHtrZXkyfXgiIF07IHRoZW4gXAotICAgICAgICBlY2hvICJFUlJPUjogRW5jcnlwdGlvbiBrZXlzIGRvIG5vdCBtYXRjaCEiCi0gICAgICAgIGV4aXQgMQotICAgIGZpCi19Ci0KLW9uZXhpdCgpIHsKLSAgICBpZiBbICJ4JHt0ZW1wX21vdW50fSIgIT0gIngiIF07IHRoZW4gXAotICAgICAgICAke1VNT1VOVEJJTn0gJHt0ZW1wX21vdW50fQotICAgICAgICBybWRpciAke3RlbXBfbW91bnR9Ci0gICAgZmkKLSAgICBpZiBbICJ4JHtsb29wX2Rldn0iICE9ICJ4IiBdOyB0aGVuIFwKLSAgICAgICAgaWYgWyAke3VzZV9jcnlwdG99IC1lcSAxIF07IHRoZW4gXAotICAgICAgICAgICAgZG1zZXR1cCByZW1vdmUgLWYgJHtsb29wX2Rldn0KLSAgICAgICAgICAgICR7TE9TRVRVUEJJTn0gLWQgJHtvbGRfbG9vcF9kZXZ9Ci0gICAgICAgIGVsc2UgXAotICAgICAgICAgICAgJHtMT1NFVFVQQklOfSAtZCAke2xvb3BfZGV2fQotICAgICAgICBmaQotICAgIGZpCi0gICAgaWYgWyAieCR7dGVtcGZpbGV9IiAhPSAieCIgLWEgLWYgIiR7dGVtcGZpbGV9IiBdOyB0aGVuIFwKLSAgICAgICAgcm0gLWYgJHt0ZW1wZmlsZX0KLSAgICBmaQotICAgIGlmIFsgIngke2tleWZpbGV9IiAhPSAieCIgLWEgLWYgIiR7a2V5ZmlsZX0iIF07IHRoZW4gXAotICAgICAgICBybSAtZiAke2tleWZpbGV9Ci0gICAgZmkKLSAgICBlY2hvICJGYXRhbCBlcnJvci4iCi0gICAgZXhpdCAxCi19Ci0KLXVzYWdlKCkgewotICAgIGVjaG8gIm1rb2JiLnNoIC0tIENyZWF0ZSBPQkIgZmlsZXMgZm9yIHVzZSBvbiBBbmRyb2lkIgotICAgIGVjaG8gIiIKLSAgICBlY2hvICIgLWQgPGRpcmVjdG9yeT4gVXNlIDxkaXJlY3Rvcnk+IGFzIGlucHV0IGZvciBPQkIgZmlsZXMiCi0gICAgZWNobyAiIC1rIDxrZXk+ICAgICAgIFVzZSA8a2V5PiB0byBlbmNyeXB0IE9CQiBmaWxlIgotICAgIGVjaG8gIiAtSyAgICAgICAgICAgICBQcm9tcHQgZm9yIGtleSB0byBlbmNyeXB0IE9CQiBmaWxlIgotICAgIGVjaG8gIiAtbyA8ZmlsZW5hbWU+ICBXcml0ZSBPQkIgZmlsZSBvdXQgdG8gPGZpbGVuYW1lPiIKLSAgICBlY2hvICIgLXYgICAgICAgICAgICAgVmVyYm9zZSBtb2RlIgotICAgIGVjaG8gIiAtaCAgICAgICAgICAgICBIZWxwOyB0aGlzIHVzYWdlIHNjcmVlbiIKLX0KLQotZmluZF9iaW5hcmllcwotY2hlY2tfcHJlcmVxcwotCi11c2VfY3J5cHRvPTAKLQotYXJncz1gZ2V0b3B0IC1vIGQ6aGs6S286diAtLSAiJEAiYAotZXZhbCBzZXQgLS0gIiRhcmdzIgotCi13aGlsZSB0cnVlOyBkbyBcCi0gICAgY2FzZSAiJDEiIGluCi0gICAgICAgIC1kKSBkaXJlY3Rvcnk9JDI7IHNoaWZ0IDI7OwotICAgICAgICAtaCkgdXNhZ2U7IGV4aXQgMTs7Ci0gICAgICAgIC1rKSBrZXk9JDI7IHVzZV9jcnlwdG89MTsgc2hpZnQgMjs7Ci0gICAgICAgIC1LKSBwcm9tcHRfa2V5PTE7IHVzZV9jcnlwdG89MTsgc2hpZnQ7OwotICAgICAgICAtdikgdmVyYm9zZT0xOyBzaGlmdDs7Ci0gICAgICAgIC1vKSBmaWxlbmFtZT0kMjsgc2hpZnQgMjs7Ci0gICAgICAgIC0tKSBzaGlmdDsgYnJlYWs7OwotICAgICAgICAqKSBlY2hvICJFUlJPUjogSW52YWxpZCBhcmd1bWVudCBpbiBvcHRpb24gcGFyc2luZyEgQ2Fubm90IHJlY292ZXIuIEV2ZXIuIjsgZXhpdCAxOzsKLSAgICBlc2FjCi1kb25lCi0KLWlmIFsgIiR7ZGlyZWN0b3J5fXgiID0gIngiIC1vICEgLWQgIiR7ZGlyZWN0b3J5fSIgXTsgdGhlbiBcCi0gICAgZWNobyAiRVJST1I6IE11c3Qgc3BlY2lmeSB2YWxpZCBpbnB1dCBkaXJlY3RvcnkiCi0gICAgZWNobyAiIgotICAgIHVzYWdlCi0gICAgZXhpdCAxOwotZmkKLQotaWYgWyAiJHtmaWxlbmFtZX14IiA9ICJ4IiBdOyB0aGVuIFwKLSAgICBlY2hvICJFUlJPUjogTXVzdCBzcGVjaWZ5IGZpbGVuYW1lIgotICAgIGVjaG8gIiIKLSAgICB1c2FnZQotICAgIGV4aXQgMTsKLWZpCi0KLWlmIFsgJHt1c2VfY3J5cHRvfSAtZXEgMSAtYSAiJHtrZXl9eCIgPSAieCIgLWEgMCR7cHJvbXB0X2tleX0gLWVxIDAgXTsgdGhlbiBcCi0gICAgZWNobyAiRVJST1I6IENyeXB0byBkZXNpcmVkLCBidXQgbm8ga2V5IHN1cHBsaWVkIG9yIHJlcXVlc3RlZCB0byBwcm9tcHQgZm9yLiIKLSAgICBleGl0IDEKLWZpCi0KLWlmIFsgMCR7cHJvbXB0X2tleX0gLWVxIDEgXTsgdGhlbiBcCi0gICAgcmVhZF9rZXkKLWZpCi0KLW91dGRpcj1gZGlybmFtZSAke2ZpbGVuYW1lfWAKLWlmIFsgISAtZCAiJHtvdXRkaXJ9IiBdOyB0aGVuIFwKLSAgICBlY2hvICJFUlJPUjogT3V0cHV0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdDogJHtvdXRkaXJ9IgotICAgIGV4aXQgMQotZmkKLQotIyBNYWtlIHN1cmUgd2UgY2xlYW4gdXAgYW55IHN0dWZmIHdlIGNyZWF0ZSBmcm9tIGhlcmUgb24gZHVyaW5nIGVycm9yIGNvbmRpdGlvbnMKLXRyYXAgb25leGl0IEVSUgotCi10ZW1wZmlsZT0kKHRlbXBmaWxlIC1kICR7b3V0ZGlyfSkgfHwgKCBlY2hvICJFUlJPUjogY291bGRuJ3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlIGluICR7b3V0ZGlyfSI7IGV4aXQgMSApCi0KLWJsb2NrX2NvdW50PWBkdSAtcyAtLWFwcGFyZW50LXNpemUgLS1ibG9jay1zaXplPTUxMiAke2RpcmVjdG9yeX0gfCBhd2sgJ3sgcHJpbnQgJDE7IH0nYAotaWYgWyAkPyAtbmUgMCBdOyB0aGVuIFwKLSAgICBlY2hvICJFUlJPUjogQ291bGRuJ3QgcmVhZCBzaXplIG9mIGlucHV0IGRpcmVjdG9yeSAke2RpcmVjdG9yeX0iCi0gICAgZXhpdCAxCi1maQotCi1lY2hvICJDcmVhdGluZyB0ZW1wb3JhcnkgZmlsZS4uLiIKLSR7RERCSU59IGlmPS9kZXYvemVybyBvZj0ke3RlbXBmaWxlfSBicz0ke0JMT0NLX1NJWkV9IGNvdW50PSQoKCR7YmxvY2tfY291bnR9ICsgJHtTTE9QfSkpID4gL2Rldi9udWxsIDI+JjEKLWlmIFsgJD8gLW5lIDAgXTsgdGhlbiBcCi0gICAgZWNobyAiRVJST1I6IGNyZWF0aW5nIHRlbXBvcmFyeSBmaWxlOiAkPyIKLWZpCi0KLWxvb3BfZGV2PSQoJHtMT1NFVFVQQklOfSAtZikgfHwgKCBlY2hvICJFUlJPUjogbG9zZXR1cCB3b3VsZG4ndCB0ZWxsIHVzIHRoZSBuZXh0IHVudXNlZCBkZXZpY2UiOyBleGl0IDEgKQotCi0ke0xPU0VUVVBCSU59ICR7bG9vcF9kZXZ9ICR7dGVtcGZpbGV9IHx8ICggZWNobyAiRVJST1I6IGNvdWxkbid0IGNyZWF0ZSBsb29wYmFjayBkZXZpY2UiOyBleGl0IDEgKQotCi1pZiBbICR7dXNlX2NyeXB0b30gLWVxIDEgXTsgdGhlbiBcCi0gICAgZXZhbCBgJHtQQktERjJHRU59ICR7a2V5fWAKLSAgICB1bmlxdWVfZG1fbmFtZT1gYmFzZW5hbWUgJHt0ZW1wZmlsZX1gCi0gICAgZWNobyAiMCBgYmxvY2tkZXYgLS1nZXRzaXplICR7bG9vcF9kZXZ9YCBjcnlwdCAke0NSWVBUT30gJHtrZXl9IDAgJHtsb29wX2Rldn0gMCIgfCBkbXNldHVwIGNyZWF0ZSAke3VuaXF1ZV9kbV9uYW1lfQotICAgIG9sZF9sb29wX2Rldj0ke2xvb3BfZGV2fQotICAgIGxvb3BfZGV2PS9kZXYvbWFwcGVyLyR7dW5pcXVlX2RtX25hbWV9Ci1maQotCi0jCi0jIENyZWF0ZSB0aGUgZmlsZXN5c3RlbQotIwotZWNobyAiIgotJHtNS0ZTQklOfSAtSSAke2xvb3BfZGV2fQotZWNobyAiIgotCi0jCi0jIE1ha2UgdGhlIHRlbXBvcmFyeSBtb3VudCBwb2ludCBhbmQgbW91bnQgaXQKLSMKLXRlbXBfbW91bnQ9IiR7TU9VTlRESVJ9LyR7UkFORE9NfSIKLW1rZGlyICR7dGVtcF9tb3VudH0KLSR7TU9VTlRCSU59IC10ICR7RlN9IC1vIGxvb3AgJHtsb29wX2Rldn0gJHt0ZW1wX21vdW50fQotCi0jCi0jIHJzeW5jIHRoZSBmaWxlcyEKLSMKLWVjaG8gIkNvcHlpbmcgZmlsZXM6IgotJHtSU1lOQ0JJTn0gLWF2IC0tbm8tb3duZXIgLS1uby1ncm91cCAke2RpcmVjdG9yeX0vICR7dGVtcF9tb3VudH0vCi1lY2hvICIiCi0KLWVjaG8gIlN1Y2Nlc3NmdWxseSBjcmVhdGVkIFxgJHtmaWxlbmFtZX0nIgotCi1pZiBbICR7dXNlX2NyeXB0b30gLWVxIDEgXTsgdGhlbiBcCi0gICAgZWNobyAic2FsdCBmb3IgdXNlIHdpdGggb2JidG9vbCBpczoiCi0gICAgZWNobyAiJHtzYWx0fSIKLWZpCi0KLSMKLSMgVW5kbyBhbGwgdGhlIHRlbXBvcmFyaWVzCi0jCi11bW91bnQgJHt0ZW1wX21vdW50fQotcm1kaXIgJHt0ZW1wX21vdW50fQotaWYgWyAke3VzZV9jcnlwdG99IC1lcSAxIF07IHRoZW4gXAotICAgIGRtc2V0dXAgcmVtb3ZlIC1mICR7bG9vcF9kZXZ9Ci0gICAgJHtMT1NFVFVQQklOfSAtZCAke29sZF9sb29wX2Rldn0KLWVsc2UgXAotICAgICR7TE9TRVRVUEJJTn0gLWQgJHtsb29wX2Rldn0KLWZpCi1tdiAke3RlbXBmaWxlfSAke2ZpbGVuYW1lfQotCi10cmFwIC0gRVJSCi0KLWV4aXQgMApkaWZmIC0tZ2l0IGEvdG9vbHMvb2JidG9vbC9wYmtkZjJnZW4uY3BwIGIvdG9vbHMvb2JidG9vbC9wYmtkZjJnZW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGQ2N2MwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL29iYnRvb2wvcGJrZGYyZ2VuLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0vKioKLSAqIFNpbXBsZSBwcm9ncmFtIHRvIGdlbmVyYXRlIGEga2V5IGJhc2VkIG9uIFBCS0RGMiB3aXRoIHByZXNldCBpbnB1dHMuCi0gKgotICogV2lsbCBwcmludCBvdXQgdGhlIHNhbHQgYW5kIGtleSBpbiBoZXguCi0gKi8KLQotI2RlZmluZSBTQUxUX0xFTiA4Ci0jZGVmaW5lIFJPVU5EUyAxMDI0Ci0jZGVmaW5lIEtFWV9CSVRTIDEyOAotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQotewotICAgIGlmIChhcmdjICE9IDIpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgPHBhc3N3b3JkPlxuIiwgYXJndlswXSk7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgaW50IGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOwotICAgIGlmIChmZCA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiAvZGV2L3VyYW5kb206ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciBzYWx0W1NBTFRfTEVOXTsKLQotICAgIGlmIChyZWFkKGZkLCAmc2FsdCwgU0FMVF9MRU4pICE9IFNBTFRfTEVOKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IHJlYWQgc2FsdCBmcm9tIC9kZXYvdXJhbmRvbTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgY2xvc2UoZmQpOwotCi0gICAgdW5zaWduZWQgY2hhciByYXdLZXlbS0VZX0JJVFNdOwotCi0gICAgaWYgKFBLQ1M1X1BCS0RGMl9ITUFDX1NIQTEoYXJndlsxXSwgc3RybGVuKGFyZ3ZbMV0pLCBzYWx0LCBTQUxUX0xFTiwKLSAgICAgICAgICAgIFJPVU5EUywgS0VZX0JJVFMsIHJhd0tleSkgIT0gMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBnZW5lcmF0ZSBQQktERjIgb3V0cHV0OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBwcmludGYoInNhbHQ9Iik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTQUxUX0xFTjsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiJTAyeCIsIHNhbHRbaV0pOwotICAgIH0KLSAgICBwcmludGYoIlxuIik7Ci0KLSAgICBwcmludGYoImtleT0iKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IChLRVlfQklUUyAvIDgpOyBpKyspIHsKLSAgICAgICAgcHJpbnRmKCIlMDJ4IiwgcmF3S2V5W2ldKTsKLSAgICB9Ci0gICAgcHJpbnRmKCJcbiIpOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvb3JpZW50YXRpb25wbG90L1JFQURNRS50eHQgYi90b29scy9vcmllbnRhdGlvbnBsb3QvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUzZjY1ZS4uMDAwMDAwMAotLS0gYS90b29scy9vcmllbnRhdGlvbnBsb3QvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGEgc2ltcGxlIHB5dGhvbiBzY3JpcHQgZm9yIHZpc3VhbGl6aW5nCi10aGUgYmVoYXZpb3Igb2YgdGhlIFdpbmRvd09yaWVudGF0aW9uTGlzdGVuZXIuCi0KLQotUFJFUkVRVUlTSVRFUwotLS0tLS0tLS0tLS0tLQotCi0xLiBQeXRob24gMi42Ci0yLiBudW1weQotMy4gbWF0cGxvdGxpYgotCi0KLVVTQUdFCi0tLS0tLQotCi1UaGUgdG9vbCB3b3JrcyBieSBzY2FwaW5nIHRoZSBkZWJ1ZyBsb2cgb3V0cHV0IGZyb20gV2luZG93T3JpZW50YXRpb25MaXN0ZW5lcgotZm9yIGludGVyZXN0aW5nIGRhdGEgYW5kIHRoZW4gcGxvdHRpbmcgaXQuCi0KLTEuIFBsdWcgaW4gdGhlIGRldmljZS4gIEVuc3VyZSB0aGF0IGl0IGlzIHRoZSBvbmx5IGRldmljZSBwbHVnZ2VkIGluCi0gICBzaW5jZSB0aGlzIHNjcmlwdCBpcyBvZiB2ZXJ5IGxpdHRsZSBicmFpbiBhbmQgd2lsbCBnZXQgY29uZnVzZWQgb3RoZXJ3aXNlLgotCi0yLiBFbmFibGUgdGhlIFdpbmRvdyBPcmllbnRhdGlvbiBMaXN0ZW5lciBkZWJ1Z2dpbmcgZGF0YSBsb2cuCi0gICBhZGIgc2hlbGwgc2V0cHJvcCBkZWJ1Zy5vcmllbnRhdGlvbi5sb2cgdHJ1ZQotICAgYWRiIHNoZWxsIHN0b3AKLSAgIGFkYiBzaGVsbCBzdGFydAotCi0zLiBSdW4gIm9yaWVudGF0aW9ucGxvdC5weSIuCi0KLQotV0hBVCBJVCBBTEwgTUVBTlMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSB0b29sIGRpc3BsYXlzIHNldmVyYWwgdGltZSBzZXJpZXMgZ3JhcGhzIHRoYXQgcGxvdCB0aGUgb3V0cHV0IG9mIHRoZQotV2luZG93T3JpZW50YXRpb25MaXN0ZW5lci4gIEhlcmUgeW91IGNhbiBzZWUgdGhlIHJhdyBhY2NlbGVyb21ldGVyIGRhdGEsCi1maWx0ZXJlZCBhY2NlbGVyb21ldGVyIGRhdGEsIG1lYXN1cmVkIHRpbHQgYW5kIG9yaWVudGF0aW9uIGFuZ2xlLCBjb25maWRlbmNlCi1pbnRlcnZhbHMgZm9yIHRoZSBwcm9wb3NlZCBvcmllbnRhdGlvbiBhbmQgYWNjZWxlcm9tZXRlciBsYXRlbmN5LgotCi1UaGluZ3MgdG8gbG9vayBmb3I6Ci0KLTEuIEVuc3VyZSB0aGUgZmlsdGVyaW5nIGlzIG5vdCB0b28gYWdncmVzc2l2ZS4gIElmIHRoZSBmaWx0ZXIgY3V0LW9mZiBmcmVxdWVuY3kgaXMKLSAgIGxlc3MgdGhhbiBhYm91dCAxSHosIHRoZW4gdGhlIGZpbHRlcmVkIGFjY2Vsb3JvbWV0ZXIgZGF0YSBiZWNvbWVzIHRvbyBzbW9vdGgKLSAgIGFuZCB0aGUgbGF0ZW5jeSBmb3Igb3JpZW50YXRpb24gZGV0ZWN0aW9uIGdvZXMgdXAuICBPbmUgd2F5IHRvIG9ic2VydmUgdGhpcwotICAgaXMgYnkgaG9sZGluZyB0aGUgZGV2aWNlIHZlcnRpY2FsbHkgaW4gb25lIG9yaWVudGF0aW9uIHRoZW4gc2hhcnBseSB0dXJuaW5nCi0gICBpdCA5MCBkZWdyZWVzIHRvIGEgZGlmZmVyZW50IG9yaWVudGF0aW9uLiAgQ29tcGFyZWQgdGhlIHJhcGlkIGNoYW5nZXMgaW4gdGhlCi0gICByYXcgYWNjZWxlcm9tZXRlciBkYXRhIHdpdGggdGhlIHNtb290aGVkIG91dCBmaWx0ZXJlZCBkYXRhLiAgSWYgdGhlIGZpbHRlcmluZwotICAgaXMgdG9vIGFnZ3Jlc3NpdmUsIHRoZSBmaWx0ZXIgcmVzcG9uc2UgbWF5IGxhZyBieSBodW5kcmVkcyBvZiBtaWxsaXNlY29uZHMuCi0KLTIuIEVuc3VyZSB0aGF0IHRoZXJlIGlzIGFuIGFwcHJvcHJpYXRlIGdhcCBiZXR3ZWVuIGFkamFjZW50IG9yaWVudGF0aW9uIGFuZ2xlcwotICAgZm9yIGh5c3RlcmVzaXMuICBUcnkgaG9sZGluZyB0aGUgZGV2aWNlIGluIG9uZSBvcmllbnRhdGlvbiBhbmQgc2xvd2x5IHR1cm5pbmcKLSAgIGl0IDkwIGRlZ3JlZXMuICBOb3RlIHRoYXQgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIHdpbGwgYWxsIGRyb3AgdG8gMCBhdCBzb21lCi0gICBwb2ludCBpbiBiZXR3ZWVuIHRoZSB0d28gb3JpZW50YXRpb25zOyB0aGF0IGlzIHRoZSBnYXAuICBUaGUgZ2FwIHNob3VsZCBiZQotICAgb2JzZXJ2ZWQgYmV0d2VlbiBhbGwgYWRqYWNlbnQgcGFpcnMgb2Ygb3JpZW50YXRpb25zIHdoZW4gdHVybmluZyB0aGUgZGV2aWNlCi0gICBpbiBlaXRoZXIgZGlyZWN0aW9uLgotCi0gICBOZXh0IHRyeSBob2xkaW5nIHRoZSBkZXZpY2UgaW4gb25lIG9yaWVudGF0aW9uIGFuZCByYXBpZGx5IHR1cm5pbmcgaXQgZW5kCi0gICBvdmVyIGVuZCB0byBhIG1pZHBvaW50IGFib3V0IDQ1IGRlZ3JlZXMgYmV0d2VlbiB0d28gb3Bwb3Npbmcgb3JpZW50YXRpb25zLgotICAgVGhlcmUgc2hvdWxkIGJlIG5vIGdhcCBvYnNlcnZlZCBpbml0aWFsbHkuICBUaGUgYWxnb3JpdGhtIHNob3VsZCBwaWNrIG9uZQotICAgb2YgdGhlIG9yaWVudGF0aW9ucyBhbmQgc2V0dGxlIGludG8gaXQgKHNpbmNlIGl0IGlzIG9idmlvdXNseSBxdWl0ZQotICAgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIG9yaWVudGF0aW9uIG9mIHRoZSBkZXZpY2UpLiAgSG93ZXZlciwgb25jZSBpdAotICAgc2V0dGxlcywgdGhlIGNvbmZpZGVuY2UgdmFsdWVzIHNob3VsZCBzdGFydCB0cmVuZGluZyB0byAwIGFnYWluIGJlY2F1c2UKLSAgIHRoZSBtZWFzdXJlZCBvcmllbnRhdGlvbiBhbmdsZSBpcyBub3cgd2l0aGluIHRoZSBnYXAgYmV0d2VlbiB0aGUgbmV3Ci0gICBvcmllbnRhdGlvbiBhbmQgdGhlIGFkamFjZW50IG9yaWVudGF0aW9uLgotCi0gICBJbiBvdGhlciB3b3JkcywgdGhlIGh5c3RlcmVzaXMgZ2FwIGFwcGxpZXMgb25seSB3aGVuIHRoZSBtZWFzdXJlZCBvcmllbnRhdGlvbgotICAgYW5nbGUgKHNheSwgNDUgZGVncmVlcykgaXMgYmV0d2VlbiB0aGUgY3VycmVudCBvcmllbnRhdGlvbidzIGlkZWFsIGFuZ2xlCi0gICAoc2F5LCAwIGRlZ3JlZXMpIGFuZCBhbiBhZGphY2VudCBvcmllbnRhdGlvbidzIGlkZWFsIGFuZ2xlIChzYXksIDkwIGRlZ3JlZXMpLgotCi0zLiBBY2NlbGVyb21ldGVyIGppdHRlci4gIFRoZSBhY2NlbGVyb21ldGVyIGxhdGVuY3kgZ3JhcGggZGlzcGxheXMgdGhlIGludGVydmFsCi0gICBiZXR3ZWVuIHNlbnNvciBldmVudHMgYXMgcmVwb3J0ZWQgYnkgdGhlIFNlbnNvckV2ZW50LnRpbWVzdGFtcCBmaWVsZC4gIEl0Ci0gICBzaG91bGQgYmUgYSBmYWlybHkgY29uc3RhbnQgNjBtcy4gIElmIHRoZSBsYXRlbmN5IGp1bXBzIGFyb3VuZCB3aWxkbHkgb3IKLSAgIGdyZWF0bHkgZXhjZWVkcyA2MG1zIHRoZW4gdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIGFjY2VsZXJvbWV0ZXIgb3IgdGhlCi0gICBzZW5zb3IgbWFuYWdlci4KLQotNC4gVGhlIG9yaWVudGF0aW9uIGFuZ2xlIGlzIG5vdCBtZWFzdXJlZCB3aGVuIHRoZSB0aWx0IGlzIHRvbyBjbG9zZSB0byA5MCBvciAtOTAKLSAgIGRlZ3JlZXMgKHJlZmVyIHRvIE1BWF9USUxUIGNvbnN0YW50KS4gIENvbnNlcXVlbnRseSwgeW91IHNob3VsZCBleHBlY3QgdGhlcmUKLSAgIHRvIGJlIG5vIGRhdGEuICBMaWtld2lzZSwgYWxsIGRlcGVuZGVudCBjYWxjdWxhdGlvbnMgYXJlIHN1cHByZXNzZWQgaW4gdGhpcyBjYXNlCi0gICBzbyB0aGVyZSB3aWxsIGJlIG5vIG9yaWVudGF0aW9uIHByb3Bvc2FsIGVpdGhlci4KLQotNS4gRWFjaCBvcmllbnRhdGlvbiBoYXMgaXRzIG93biBib3VuZCBvbiBhbGxvd2FibGUgdGlsdCBhbmdsZXMuICBJdCdzIGEgZ29vZCBpZGVhIHRvCi0gICB2ZXJpZnkgdGhhdCB0aGVzZSBsaW1pdHMgYXJlIGJlaW5nIGVuZm9yY2VkIGJ5IGdyYWR1YWxseSB2YXJ5aW5nIHRoZSB0aWx0IG9mCi0gICB0aGUgZGV2aWNlIHVudGlsIGl0IGlzIGluc2lkZS9vdXRzaWRlIHRoZSBsaW1pdCBmb3IgZWFjaCBvcmllbnRhdGlvbi4KLQotNi4gT3JpZW50YXRpb24gY2hhbmdlcyBzaG91bGQgYmUgc2lnbmlmaWNhbnRseSBoYXJkZXIgd2hlbiB0aGUgZGV2aWNlIGlzIGhlbGQKLSAgIG92ZXJoZWFkLiAgUGVvcGxlIHJlYWRpbmcgb24gdGFibGV0cyBpbiBiZWQgb2Z0ZW4gaGF2ZSB0aGVpciBoZWFkIHR1cm5lZAotICAgYSBsaXR0bGUgdG8gdGhlIHNpZGUsIG9yIHRoZXkgaG9sZCB0aGUgZGV2aWNlIGxvb3NlbHkgc28gaXRzIG9yaWVudGF0aW9uCi0gICBjYW4gYmUgYSBiaXQgdW51c3VhbC4gIFRoZSB0aWx0IGlzIGEgZ29vZCBpbmRpY2F0b3Igb2Ygd2hldGhlciB0aGUgZGV2aWNlIGlzCi0gICBvdmVyaGVhZC4KZGlmZiAtLWdpdCBhL3Rvb2xzL29yaWVudGF0aW9ucGxvdC9vcmllbnRhdGlvbnBsb3QucHkgYi90b29scy9vcmllbnRhdGlvbnBsb3Qvb3JpZW50YXRpb25wbG90LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2ZmMzOTIyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL29yaWVudGF0aW9ucGxvdC9vcmllbnRhdGlvbnBsb3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NTcgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMi42Ci0jCi0jIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotCi0jCi0jIFBsb3RzIGRlYnVnIGxvZyBvdXRwdXQgZnJvbSBXaW5kb3dPcmllbnRhdGlvbkxpc3RlbmVyLgotIyBTZWUgUkVBRE1FLnR4dCBmb3IgZGV0YWlscy4KLSMKLQotaW1wb3J0IG51bXB5IGFzIG5wCi1pbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGxvdAotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCByZQotaW1wb3J0IGZjbnRsCi1pbXBvcnQgb3MKLWltcG9ydCBlcnJubwotaW1wb3J0IGJpc2VjdAotZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQotCi0jIFBhcmFtZXRlcnMuCi10aW1lc3BhbiA9IDE1ICMgc2Vjb25kcyB0b3RhbCBzcGFuIHNob3duCi1zY3JvbGxqdW1wID0gNSAjIHNlY29uZHMganVtcCB3aGVuIHNjcm9sbGluZwotdGltZXRpY2tzID0gMSAjIHNlY29uZHMgYmV0d2VlbiBlYWNoIHRpbWUgdGljawotCi0jIE5vbi1ibG9ja2luZyBzdHJlYW0gd3JhcHBlci4KLWNsYXNzIE5vbkJsb2NraW5nU3RyZWFtOgotICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtKToKLSAgICBmY250bC5mY250bChzdHJlYW0sIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCi0gICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KLSAgICBzZWxmLmJ1ZmZlciA9ICcnCi0gICAgc2VsZi5wb3MgPSAwCi0KLSAgZGVmIHJlYWRsaW5lKHNlbGYpOgotICAgIHdoaWxlIFRydWU6Ci0gICAgICBpbmRleCA9IHNlbGYuYnVmZmVyLmZpbmQoJ1xuJywgc2VsZi5wb3MpCi0gICAgICBpZiBpbmRleCAhPSAtMToKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5idWZmZXJbc2VsZi5wb3M6aW5kZXhdCi0gICAgICAgIHNlbGYucG9zID0gaW5kZXggKyAxCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgICAgc2VsZi5idWZmZXIgPSBzZWxmLmJ1ZmZlcltzZWxmLnBvczpdCi0gICAgICBzZWxmLnBvcyA9IDAKLSAgICAgIHRyeToKLSAgICAgICAgY2h1bmsgPSBvcy5yZWFkKHNlbGYuc3RyZWFtLmZpbGVubygpLCA0MDk2KQotICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUFHQUlOOgotICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJhaXNlIGUKLSAgICAgIGlmIGxlbihjaHVuaykgPT0gMDoKLSAgICAgICAgaWYgbGVuKHNlbGYuYnVmZmVyKSA9PSAwOgotICAgICAgICAgIHJhaXNlKEVPRkVycm9yKQotICAgICAgICBlbHNlOgotICAgICAgICAgIHJlc3VsdCA9IHNlbGYuYnVmZmVyCi0gICAgICAgICAgc2VsZi5idWZmZXIgPSAnJwotICAgICAgICAgIHNlbGYucG9zID0gMAotICAgICAgICAgIHJldHVybiByZXN1bHQKLSAgICAgIHNlbGYuYnVmZmVyICs9IGNodW5rCi0KLSMgUGxvdHRlcgotY2xhc3MgUGxvdHRlcjoKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGFkYm91dCk6Ci0gICAgc2VsZi5hZGJvdXQgPSBhZGJvdXQKLQotICAgIHNlbGYuZmlnID0gcGxvdC5maWd1cmUoMSkKLSAgICBzZWxmLmZpZy5zdXB0aXRsZSgnV2luZG93IE9yaWVudGF0aW9uIExpc3RlbmVyJywgZm9udHNpemU9MTIpCi0gICAgc2VsZi5maWcuc2V0X2RwaSg5NikKLSAgICBzZWxmLmZpZy5zZXRfc2l6ZV9pbmNoZXMoMTYsIDEyLCBmb3J3YXJkPVRydWUpCi0KLSAgICBzZWxmLnJhd19hY2NlbGVyYXRpb25feCA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi5yYXdfYWNjZWxlcmF0aW9uX3kgPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYucmF3X2FjY2VsZXJhdGlvbl96ID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnJhd19hY2NlbGVyYXRpb25fbWFnbml0dWRlID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnJhd19hY2NlbGVyYXRpb25fYXhlcyA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2F4ZXMoCi0gICAgICAgIDEsICdSYXcgQWNjZWxlcmF0aW9uJywgJ20vc14yJywgWy0yMCwgMjBdLAotICAgICAgICB5dGlja3M9cmFuZ2UoLTE1LCAxNiwgNSkpCi0gICAgc2VsZi5yYXdfYWNjZWxlcmF0aW9uX2xpbmVfeCA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYucmF3X2FjY2VsZXJhdGlvbl9heGVzLCAneCcsICdyZWQnKQotICAgIHNlbGYucmF3X2FjY2VsZXJhdGlvbl9saW5lX3kgPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLnJhd19hY2NlbGVyYXRpb25fYXhlcywgJ3knLCAnZ3JlZW4nKQotICAgIHNlbGYucmF3X2FjY2VsZXJhdGlvbl9saW5lX3ogPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLnJhd19hY2NlbGVyYXRpb25fYXhlcywgJ3onLCAnYmx1ZScpCi0gICAgc2VsZi5yYXdfYWNjZWxlcmF0aW9uX2xpbmVfbWFnbml0dWRlID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5yYXdfYWNjZWxlcmF0aW9uX2F4ZXMsICdtYWduaXR1ZGUnLCAnb3JhbmdlJywgbGluZXdpZHRoPTIpCi0gICAgc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGVnZW5kKHNlbGYucmF3X2FjY2VsZXJhdGlvbl9heGVzKQotCi0gICAgc2hhcmVkX2F4aXMgPSBzZWxmLnJhd19hY2NlbGVyYXRpb25fYXhlcwotCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25feCA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25feSA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25feiA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fbWFnbml0dWRlID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl9heGVzID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfYXhlcygKLSAgICAgICAgMiwgJ0ZpbHRlcmVkIEFjY2VsZXJhdGlvbicsICdtL3NeMicsIFstMjAsIDIwXSwKLSAgICAgICAgc2hhcmV4PXNoYXJlZF9heGlzLAotICAgICAgICB5dGlja3M9cmFuZ2UoLTE1LCAxNiwgNSkpCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fbGluZV94ID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fYXhlcywgJ3gnLCAncmVkJykKLSAgICBzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl9saW5lX3kgPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl9heGVzLCAneScsICdncmVlbicpCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fbGluZV96ID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fYXhlcywgJ3onLCAnYmx1ZScpCi0gICAgc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fbGluZV9tYWduaXR1ZGUgPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl9heGVzLCAnbWFnbml0dWRlJywgJ29yYW5nZScsIGxpbmV3aWR0aD0yKQotICAgIHNlbGYuX2FkZF90aW1lc2VyaWVzX2xlZ2VuZChzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl9heGVzKQotCi0gICAgc2VsZi50aWx0X2FuZ2xlID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnRpbHRfYW5nbGVfYXhlcyA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2F4ZXMoCi0gICAgICAgIDMsICdUaWx0IEFuZ2xlJywgJ2RlZ3JlZXMnLCBbLTEwNSwgMTA1XSwKLSAgICAgICAgc2hhcmV4PXNoYXJlZF9heGlzLAotICAgICAgICB5dGlja3M9cmFuZ2UoLTkwLCA5MSwgMzApKQotICAgIHNlbGYudGlsdF9hbmdsZV9saW5lID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi50aWx0X2FuZ2xlX2F4ZXMsICd0aWx0JywgJ2JsYWNrJykKLSAgICBzZWxmLl9hZGRfdGltZXNlcmllc19sZWdlbmQoc2VsZi50aWx0X2FuZ2xlX2F4ZXMpCi0KLSAgICBzZWxmLm9yaWVudGF0aW9uX2FuZ2xlID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLm9yaWVudGF0aW9uX2FuZ2xlX2F4ZXMgPSBzZWxmLl9hZGRfdGltZXNlcmllc19heGVzKAotICAgICAgICA0LCAnT3JpZW50YXRpb24gQW5nbGUnLCAnZGVncmVlcycsIFstMjUsIDM3NV0sCi0gICAgICAgIHNoYXJleD1zaGFyZWRfYXhpcywKLSAgICAgICAgeXRpY2tzPXJhbmdlKDAsIDM2MSwgNDUpKQotICAgIHNlbGYub3JpZW50YXRpb25fYW5nbGVfbGluZSA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYub3JpZW50YXRpb25fYW5nbGVfYXhlcywgJ29yaWVudGF0aW9uJywgJ2JsYWNrJykKLSAgICBzZWxmLl9hZGRfdGltZXNlcmllc19sZWdlbmQoc2VsZi5vcmllbnRhdGlvbl9hbmdsZV9heGVzKQotCi0gICAgc2VsZi5jdXJyZW50X3JvdGF0aW9uID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnByb3Bvc2VkX3JvdGF0aW9uID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnByZWRpY3RlZF9yb3RhdGlvbiA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi5vcmllbnRhdGlvbl9heGVzID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfYXhlcygKLSAgICAgICAgNSwgJ0N1cnJlbnQgLyBQcm9wb3NlZCBPcmllbnRhdGlvbicsICdyb3RhdGlvbicsIFstMSwgNF0sCi0gICAgICAgIHNoYXJleD1zaGFyZWRfYXhpcywKLSAgICAgICAgeXRpY2tzPXJhbmdlKDAsIDQpKQotICAgIHNlbGYuY3VycmVudF9yb3RhdGlvbl9saW5lID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5vcmllbnRhdGlvbl9heGVzLCAnY3VycmVudCcsICdibGFjaycsIGxpbmV3aWR0aD0yKQotICAgIHNlbGYucHJlZGljdGVkX3JvdGF0aW9uX2xpbmUgPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLm9yaWVudGF0aW9uX2F4ZXMsICdwcmVkaWN0ZWQnLCAncHVycGxlJywgbGluZXdpZHRoPTMpCi0gICAgc2VsZi5wcm9wb3NlZF9yb3RhdGlvbl9saW5lID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5vcmllbnRhdGlvbl9heGVzLCAncHJvcG9zZWQnLCAnZ3JlZW4nLCBsaW5ld2lkdGg9MykKLSAgICBzZWxmLl9hZGRfdGltZXNlcmllc19sZWdlbmQoc2VsZi5vcmllbnRhdGlvbl9heGVzKQotCi0gICAgc2VsZi50aW1lX3VudGlsX3NldHRsZWQgPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYudGltZV91bnRpbF9mbGF0X2RlbGF5X2V4cGlyZWQgPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYudGltZV91bnRpbF9zd2luZ19kZWxheV9leHBpcmVkID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnRpbWVfdW50aWxfYWNjZWxlcmF0aW9uX2RlbGF5X2V4cGlyZWQgPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYuc3RhYmlsaXR5X2F4ZXMgPSBzZWxmLl9hZGRfdGltZXNlcmllc19heGVzKAotICAgICAgICA2LCAnUHJvcG9zYWwgU3RhYmlsaXR5JywgJ21zJywgWy0xMCwgNjAwXSwKLSAgICAgICAgc2hhcmV4PXNoYXJlZF9heGlzLAotICAgICAgICB5dGlja3M9cmFuZ2UoMCwgNjAwLCAxMDApKQotICAgIHNlbGYudGltZV91bnRpbF9zZXR0bGVkX2xpbmUgPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLnN0YWJpbGl0eV9heGVzLCAndGltZSB1bnRpbCBzZXR0bGVkJywgJ2JsYWNrJywgbGluZXdpZHRoPTIpCi0gICAgc2VsZi50aW1lX3VudGlsX2ZsYXRfZGVsYXlfZXhwaXJlZF9saW5lID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5zdGFiaWxpdHlfYXhlcywgJ3RpbWUgdW50aWwgZmxhdCBkZWxheSBleHBpcmVkJywgJ2dyZWVuJykKLSAgICBzZWxmLnRpbWVfdW50aWxfc3dpbmdfZGVsYXlfZXhwaXJlZF9saW5lID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5zdGFiaWxpdHlfYXhlcywgJ3RpbWUgdW50aWwgc3dpbmcgZGVsYXkgZXhwaXJlZCcsICdibHVlJykKLSAgICBzZWxmLnRpbWVfdW50aWxfYWNjZWxlcmF0aW9uX2RlbGF5X2V4cGlyZWRfbGluZSA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYuc3RhYmlsaXR5X2F4ZXMsICd0aW1lIHVudGlsIGFjY2VsZXJhdGlvbiBkZWxheSBleHBpcmVkJywgJ3JlZCcpCi0gICAgc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGVnZW5kKHNlbGYuc3RhYmlsaXR5X2F4ZXMpCi0KLSAgICBzZWxmLnNhbXBsZV9sYXRlbmN5ID0gc2VsZi5fbWFrZV90aW1lc2VyaWVzKCkKLSAgICBzZWxmLnNhbXBsZV9sYXRlbmN5X2F4ZXMgPSBzZWxmLl9hZGRfdGltZXNlcmllc19heGVzKAotICAgICAgICA3LCAnQWNjZWxlcm9tZXRlciBTYW1wbGluZyBMYXRlbmN5JywgJ21zJywgWy0xMCwgNTAwXSwKLSAgICAgICAgc2hhcmV4PXNoYXJlZF9heGlzLAotICAgICAgICB5dGlja3M9cmFuZ2UoMCwgNTAwLCAxMDApKQotICAgIHNlbGYuc2FtcGxlX2xhdGVuY3lfbGluZSA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYuc2FtcGxlX2xhdGVuY3lfYXhlcywgJ2xhdGVuY3knLCAnYmxhY2snKQotICAgIHNlbGYuX2FkZF90aW1lc2VyaWVzX2xlZ2VuZChzZWxmLnNhbXBsZV9sYXRlbmN5X2F4ZXMpCi0KLSAgICBzZWxmLmZpZy5jYW52YXMubXBsX2Nvbm5lY3QoJ2J1dHRvbl9wcmVzc19ldmVudCcsIHNlbGYuX29uX2NsaWNrKQotICAgIHNlbGYucGF1c2VkID0gRmFsc2UKLQotICAgIHNlbGYudGltZXIgPSBzZWxmLmZpZy5jYW52YXMubmV3X3RpbWVyKGludGVydmFsPTEwMCkKLSAgICBzZWxmLnRpbWVyLmFkZF9jYWxsYmFjayhsYW1iZGE6IHNlbGYudXBkYXRlKCkpCi0gICAgc2VsZi50aW1lci5zdGFydCgpCi0KLSAgICBzZWxmLnRpbWViYXNlID0gTm9uZQotICAgIHNlbGYuX3Jlc2V0X3BhcnNlX3N0YXRlKCkKLQotICAjIEhhbmRsZSBhIGNsaWNrIGV2ZW50IHRvIHBhdXNlIG9yIHJlc3RhcnQgdGhlIHRpbWVyLgotICBkZWYgX29uX2NsaWNrKHNlbGYsIGV2KToKLSAgICBpZiBub3Qgc2VsZi5wYXVzZWQ6Ci0gICAgICBzZWxmLnBhdXNlZCA9IFRydWUKLSAgICAgIHNlbGYudGltZXIuc3RvcCgpCi0gICAgZWxzZToKLSAgICAgIHNlbGYucGF1c2VkID0gRmFsc2UKLSAgICAgIHNlbGYudGltZXIuc3RhcnQoKQotCi0gICMgSW5pdGlhbGl6ZSBhIHRpbWUgc2VyaWVzLgotICBkZWYgX21ha2VfdGltZXNlcmllcyhzZWxmKToKLSAgICByZXR1cm4gW1tdLCBbXV0KLQotICAjIEFkZCBhIHN1YnBsb3QgdG8gdGhlIGZpZ3VyZSBmb3IgYSB0aW1lIHNlcmllcy4KLSAgZGVmIF9hZGRfdGltZXNlcmllc19heGVzKHNlbGYsIGluZGV4LCB0aXRsZSwgeWxhYmVsLCB5bGltLCB5dGlja3MsIHNoYXJleD1Ob25lKToKLSAgICBudW1fZ3JhcGhzID0gNwotICAgIGhlaWdodCA9IDAuOSAvIG51bV9ncmFwaHMKLSAgICB0b3AgPSAwLjk1IC0gaGVpZ2h0ICogaW5kZXgKLSAgICBheGVzID0gc2VsZi5maWcuYWRkX2F4ZXMoWzAuMSwgdG9wLCAwLjgsIGhlaWdodF0sCi0gICAgICAgIHhzY2FsZT0nbGluZWFyJywKLSAgICAgICAgeGxpbT1bMCwgdGltZXNwYW5dLAotICAgICAgICB5bGFiZWw9eWxhYmVsLAotICAgICAgICB5c2NhbGU9J2xpbmVhcicsCi0gICAgICAgIHlsaW09eWxpbSwKLSAgICAgICAgc2hhcmV4PXNoYXJleCkKLSAgICBheGVzLnRleHQoMC4wMiwgMC4wMiwgdGl0bGUsIHRyYW5zZm9ybT1heGVzLnRyYW5zQXhlcywgZm9udHNpemU9MTAsIGZvbnR3ZWlnaHQ9J2JvbGQnKQotICAgIGF4ZXMuc2V0X3hsYWJlbCgndGltZSAocyknLCBmb250c2l6ZT0xMCwgZm9udHdlaWdodD0nYm9sZCcpCi0gICAgYXhlcy5zZXRfeWxhYmVsKHlsYWJlbCwgZm9udHNpemU9MTAsIGZvbnR3ZWlnaHQ9J2JvbGQnKQotICAgIGF4ZXMuc2V0X3h0aWNrcyhyYW5nZSgwLCB0aW1lc3BhbiArIDEsIHRpbWV0aWNrcykpCi0gICAgYXhlcy5zZXRfeXRpY2tzKHl0aWNrcykKLSAgICBheGVzLmdyaWQoVHJ1ZSkKLQotICAgIGZvciBsYWJlbCBpbiBheGVzLmdldF94dGlja2xhYmVscygpOgotICAgICAgbGFiZWwuc2V0X2ZvbnRzaXplKDkpCi0gICAgZm9yIGxhYmVsIGluIGF4ZXMuZ2V0X3l0aWNrbGFiZWxzKCk6Ci0gICAgICBsYWJlbC5zZXRfZm9udHNpemUoOSkKLQotICAgIHJldHVybiBheGVzCi0KLSAgIyBBZGQgYSBsaW5lIHRvIHRoZSBheGVzIGZvciBhIHRpbWUgc2VyaWVzLgotICBkZWYgX2FkZF90aW1lc2VyaWVzX2xpbmUoc2VsZiwgYXhlcywgbGFiZWwsIGNvbG9yLCBsaW5ld2lkdGg9MSk6Ci0gICAgcmV0dXJuIGF4ZXMucGxvdChbXSwgbGFiZWw9bGFiZWwsIGNvbG9yPWNvbG9yLCBsaW5ld2lkdGg9bGluZXdpZHRoKVswXQotCi0gICMgQWRkIGEgbGVnZW5kIHRvIGEgdGltZSBzZXJpZXMuCi0gIGRlZiBfYWRkX3RpbWVzZXJpZXNfbGVnZW5kKHNlbGYsIGF4ZXMpOgotICAgIGF4ZXMubGVnZW5kKAotICAgICAgICBsb2M9J3VwcGVyIGxlZnQnLAotICAgICAgICBiYm94X3RvX2FuY2hvcj0oMS4wMSwgMSksCi0gICAgICAgIGJvcmRlcnBhZD0wLjEsCi0gICAgICAgIGJvcmRlcmF4ZXNwYWQ9MC4xLAotICAgICAgICBwcm9wPXsnc2l6ZSc6IDEwfSkKLQotICAjIFJlc2V0cyB0aGUgcGFyc2Ugc3RhdGUuCi0gIGRlZiBfcmVzZXRfcGFyc2Vfc3RhdGUoc2VsZik6Ci0gICAgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX3ggPSBOb25lCi0gICAgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX3kgPSBOb25lCi0gICAgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX3ogPSBOb25lCi0gICAgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX21hZ25pdHVkZSA9IE5vbmUKLSAgICBzZWxmLnBhcnNlX2ZpbHRlcmVkX2FjY2VsZXJhdGlvbl94ID0gTm9uZQotICAgIHNlbGYucGFyc2VfZmlsdGVyZWRfYWNjZWxlcmF0aW9uX3kgPSBOb25lCi0gICAgc2VsZi5wYXJzZV9maWx0ZXJlZF9hY2NlbGVyYXRpb25feiA9IE5vbmUKLSAgICBzZWxmLnBhcnNlX2ZpbHRlcmVkX2FjY2VsZXJhdGlvbl9tYWduaXR1ZGUgPSBOb25lCi0gICAgc2VsZi5wYXJzZV90aWx0X2FuZ2xlID0gTm9uZQotICAgIHNlbGYucGFyc2Vfb3JpZW50YXRpb25fYW5nbGUgPSBOb25lCi0gICAgc2VsZi5wYXJzZV9jdXJyZW50X3JvdGF0aW9uID0gTm9uZQotICAgIHNlbGYucGFyc2VfcHJvcG9zZWRfcm90YXRpb24gPSBOb25lCi0gICAgc2VsZi5wYXJzZV9wcmVkaWN0ZWRfcm90YXRpb24gPSBOb25lCi0gICAgc2VsZi5wYXJzZV90aW1lX3VudGlsX3NldHRsZWQgPSBOb25lCi0gICAgc2VsZi5wYXJzZV90aW1lX3VudGlsX2ZsYXRfZGVsYXlfZXhwaXJlZCA9IE5vbmUKLSAgICBzZWxmLnBhcnNlX3RpbWVfdW50aWxfc3dpbmdfZGVsYXlfZXhwaXJlZCA9IE5vbmUKLSAgICBzZWxmLnBhcnNlX3RpbWVfdW50aWxfYWNjZWxlcmF0aW9uX2RlbGF5X2V4cGlyZWQgPSBOb25lCi0gICAgc2VsZi5wYXJzZV9zYW1wbGVfbGF0ZW5jeSA9IE5vbmUKLQotICAjIFVwZGF0ZSBzYW1wbGVzLgotICBkZWYgdXBkYXRlKHNlbGYpOgotICAgIHRpbWVpbmRleCA9IDAKLSAgICB3aGlsZSBUcnVlOgotICAgICAgdHJ5OgotICAgICAgICBsaW5lID0gc2VsZi5hZGJvdXQucmVhZGxpbmUoKQotICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICBwbG90LmNsb3NlKCkKLSAgICAgICAgcmV0dXJuCi0gICAgICBpZiBsaW5lIGlzIE5vbmU6Ci0gICAgICAgIGJyZWFrCi0gICAgICBwcmludCBsaW5lCi0KLSAgICAgIHRyeToKLSAgICAgICAgdGltZXN0YW1wID0gc2VsZi5fcGFyc2VfdGltZXN0YW1wKGxpbmUpCi0gICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgY29udGludWUKLSAgICAgIGlmIHNlbGYudGltZWJhc2UgaXMgTm9uZToKLSAgICAgICAgc2VsZi50aW1lYmFzZSA9IHRpbWVzdGFtcAotICAgICAgZGVsdGEgPSB0aW1lc3RhbXAgLSBzZWxmLnRpbWViYXNlCi0gICAgICB0aW1laW5kZXggPSBkZWx0YS5zZWNvbmRzICsgZGVsdGEubWljcm9zZWNvbmRzICogMC4wMDAwMDEKLQotICAgICAgaWYgbGluZS5maW5kKCdSYXcgYWNjZWxlcmF0aW9uIHZlY3RvcjonKSAhPSAtMToKLSAgICAgICAgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX3ggPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAneD0nKQotICAgICAgICBzZWxmLnBhcnNlX3Jhd19hY2NlbGVyYXRpb25feSA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICd5PScpCi0gICAgICAgIHNlbGYucGFyc2VfcmF3X2FjY2VsZXJhdGlvbl96ID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3o9JykKLSAgICAgICAgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX21hZ25pdHVkZSA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICdtYWduaXR1ZGU9JykKLQotICAgICAgaWYgbGluZS5maW5kKCdGaWx0ZXJlZCBhY2NlbGVyYXRpb24gdmVjdG9yOicpICE9IC0xOgotICAgICAgICBzZWxmLnBhcnNlX2ZpbHRlcmVkX2FjY2VsZXJhdGlvbl94ID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3g9JykKLSAgICAgICAgc2VsZi5wYXJzZV9maWx0ZXJlZF9hY2NlbGVyYXRpb25feSA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICd5PScpCi0gICAgICAgIHNlbGYucGFyc2VfZmlsdGVyZWRfYWNjZWxlcmF0aW9uX3ogPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAnej0nKQotICAgICAgICBzZWxmLnBhcnNlX2ZpbHRlcmVkX2FjY2VsZXJhdGlvbl9tYWduaXR1ZGUgPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAnbWFnbml0dWRlPScpCi0KLSAgICAgIGlmIGxpbmUuZmluZCgndGlsdEFuZ2xlPScpICE9IC0xOgotICAgICAgICBzZWxmLnBhcnNlX3RpbHRfYW5nbGUgPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAndGlsdEFuZ2xlPScpCi0KLSAgICAgIGlmIGxpbmUuZmluZCgnb3JpZW50YXRpb25BbmdsZT0nKSAhPSAtMToKLSAgICAgICAgc2VsZi5wYXJzZV9vcmllbnRhdGlvbl9hbmdsZSA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICdvcmllbnRhdGlvbkFuZ2xlPScpCi0KLSAgICAgIGlmIGxpbmUuZmluZCgnUmVzdWx0OicpICE9IC0xOgotICAgICAgICBzZWxmLnBhcnNlX2N1cnJlbnRfcm90YXRpb24gPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAnY3VycmVudFJvdGF0aW9uPScpCi0gICAgICAgIHNlbGYucGFyc2VfcHJvcG9zZWRfcm90YXRpb24gPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAncHJvcG9zZWRSb3RhdGlvbj0nKQotICAgICAgICBzZWxmLnBhcnNlX3ByZWRpY3RlZF9yb3RhdGlvbiA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICdwcmVkaWN0ZWRSb3RhdGlvbj0nKQotICAgICAgICBzZWxmLnBhcnNlX3NhbXBsZV9sYXRlbmN5ID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3RpbWVEZWx0YU1TPScpCi0gICAgICAgIHNlbGYucGFyc2VfdGltZV91bnRpbF9zZXR0bGVkID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3RpbWVVbnRpbFNldHRsZWRNUz0nKQotICAgICAgICBzZWxmLnBhcnNlX3RpbWVfdW50aWxfZmxhdF9kZWxheV9leHBpcmVkID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3RpbWVVbnRpbEZsYXREZWxheUV4cGlyZWRNUz0nKQotICAgICAgICBzZWxmLnBhcnNlX3RpbWVfdW50aWxfc3dpbmdfZGVsYXlfZXhwaXJlZCA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICd0aW1lVW50aWxTd2luZ0RlbGF5RXhwaXJlZE1TPScpCi0gICAgICAgIHNlbGYucGFyc2VfdGltZV91bnRpbF9hY2NlbGVyYXRpb25fZGVsYXlfZXhwaXJlZCA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICd0aW1lVW50aWxBY2NlbGVyYXRpb25EZWxheUV4cGlyZWRNUz0nKQotCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnJhd19hY2NlbGVyYXRpb25feCwgdGltZWluZGV4LCBzZWxmLnBhcnNlX3Jhd19hY2NlbGVyYXRpb25feCkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYucmF3X2FjY2VsZXJhdGlvbl95LCB0aW1laW5kZXgsIHNlbGYucGFyc2VfcmF3X2FjY2VsZXJhdGlvbl95KQotICAgICAgICBzZWxmLl9hcHBlbmQoc2VsZi5yYXdfYWNjZWxlcmF0aW9uX3osIHRpbWVpbmRleCwgc2VsZi5wYXJzZV9yYXdfYWNjZWxlcmF0aW9uX3opCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnJhd19hY2NlbGVyYXRpb25fbWFnbml0dWRlLCB0aW1laW5kZXgsIHNlbGYucGFyc2VfcmF3X2FjY2VsZXJhdGlvbl9tYWduaXR1ZGUpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl94LCB0aW1laW5kZXgsIHNlbGYucGFyc2VfZmlsdGVyZWRfYWNjZWxlcmF0aW9uX3gpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl95LCB0aW1laW5kZXgsIHNlbGYucGFyc2VfZmlsdGVyZWRfYWNjZWxlcmF0aW9uX3kpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl96LCB0aW1laW5kZXgsIHNlbGYucGFyc2VfZmlsdGVyZWRfYWNjZWxlcmF0aW9uX3opCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl9tYWduaXR1ZGUsIHRpbWVpbmRleCwgc2VsZi5wYXJzZV9maWx0ZXJlZF9hY2NlbGVyYXRpb25fbWFnbml0dWRlKQotICAgICAgICBzZWxmLl9hcHBlbmQoc2VsZi50aWx0X2FuZ2xlLCB0aW1laW5kZXgsIHNlbGYucGFyc2VfdGlsdF9hbmdsZSkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYub3JpZW50YXRpb25fYW5nbGUsIHRpbWVpbmRleCwgc2VsZi5wYXJzZV9vcmllbnRhdGlvbl9hbmdsZSkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYuY3VycmVudF9yb3RhdGlvbiwgdGltZWluZGV4LCBzZWxmLnBhcnNlX2N1cnJlbnRfcm90YXRpb24pCi0gICAgICAgIGlmIHNlbGYucGFyc2VfcHJvcG9zZWRfcm90YXRpb24gPj0gMDoKLSAgICAgICAgICBzZWxmLl9hcHBlbmQoc2VsZi5wcm9wb3NlZF9yb3RhdGlvbiwgdGltZWluZGV4LCBzZWxmLnBhcnNlX3Byb3Bvc2VkX3JvdGF0aW9uKQotICAgICAgICBlbHNlOgotICAgICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnByb3Bvc2VkX3JvdGF0aW9uLCB0aW1laW5kZXgsIE5vbmUpCi0gICAgICAgIGlmIHNlbGYucGFyc2VfcHJlZGljdGVkX3JvdGF0aW9uID49IDA6Ci0gICAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYucHJlZGljdGVkX3JvdGF0aW9uLCB0aW1laW5kZXgsIHNlbGYucGFyc2VfcHJlZGljdGVkX3JvdGF0aW9uKQotICAgICAgICBlbHNlOgotICAgICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnByZWRpY3RlZF9yb3RhdGlvbiwgdGltZWluZGV4LCBOb25lKQotICAgICAgICBzZWxmLl9hcHBlbmQoc2VsZi50aW1lX3VudGlsX3NldHRsZWQsIHRpbWVpbmRleCwgc2VsZi5wYXJzZV90aW1lX3VudGlsX3NldHRsZWQpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnRpbWVfdW50aWxfZmxhdF9kZWxheV9leHBpcmVkLCB0aW1laW5kZXgsIHNlbGYucGFyc2VfdGltZV91bnRpbF9mbGF0X2RlbGF5X2V4cGlyZWQpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnRpbWVfdW50aWxfc3dpbmdfZGVsYXlfZXhwaXJlZCwgdGltZWluZGV4LCBzZWxmLnBhcnNlX3RpbWVfdW50aWxfc3dpbmdfZGVsYXlfZXhwaXJlZCkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYudGltZV91bnRpbF9hY2NlbGVyYXRpb25fZGVsYXlfZXhwaXJlZCwgdGltZWluZGV4LCBzZWxmLnBhcnNlX3RpbWVfdW50aWxfYWNjZWxlcmF0aW9uX2RlbGF5X2V4cGlyZWQpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnNhbXBsZV9sYXRlbmN5LCB0aW1laW5kZXgsIHNlbGYucGFyc2Vfc2FtcGxlX2xhdGVuY3kpCi0gICAgICAgIHNlbGYuX3Jlc2V0X3BhcnNlX3N0YXRlKCkKLQotICAgICMgU2Nyb2xsIHRoZSBwbG90cy4KLSAgICBpZiB0aW1laW5kZXggPiB0aW1lc3BhbjoKLSAgICAgIGJvdHRvbSA9IGludCh0aW1laW5kZXgpIC0gdGltZXNwYW4gKyBzY3JvbGxqdW1wCi0gICAgICBzZWxmLnRpbWViYXNlICs9IHRpbWVkZWx0YShzZWNvbmRzPWJvdHRvbSkKLSAgICAgIHNlbGYuX3Njcm9sbChzZWxmLnJhd19hY2NlbGVyYXRpb25feCwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYucmF3X2FjY2VsZXJhdGlvbl95LCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi5yYXdfYWNjZWxlcmF0aW9uX3osIGJvdHRvbSkKLSAgICAgIHNlbGYuX3Njcm9sbChzZWxmLnJhd19hY2NlbGVyYXRpb25fbWFnbml0dWRlLCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25feCwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYuZmlsdGVyZWRfYWNjZWxlcmF0aW9uX3ksIGJvdHRvbSkKLSAgICAgIHNlbGYuX3Njcm9sbChzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl96LCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi5maWx0ZXJlZF9hY2NlbGVyYXRpb25fbWFnbml0dWRlLCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi50aWx0X2FuZ2xlLCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi5vcmllbnRhdGlvbl9hbmdsZSwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYuY3VycmVudF9yb3RhdGlvbiwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYucHJvcG9zZWRfcm90YXRpb24sIGJvdHRvbSkKLSAgICAgIHNlbGYuX3Njcm9sbChzZWxmLnByZWRpY3RlZF9yb3RhdGlvbiwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYudGltZV91bnRpbF9zZXR0bGVkLCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi50aW1lX3VudGlsX2ZsYXRfZGVsYXlfZXhwaXJlZCwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYudGltZV91bnRpbF9zd2luZ19kZWxheV9leHBpcmVkLCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi50aW1lX3VudGlsX2FjY2VsZXJhdGlvbl9kZWxheV9leHBpcmVkLCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi5zYW1wbGVfbGF0ZW5jeSwgYm90dG9tKQotCi0gICAgIyBSZWRyYXcgdGhlIHBsb3RzLgotICAgIHNlbGYucmF3X2FjY2VsZXJhdGlvbl9saW5lX3guc2V0X2RhdGEoc2VsZi5yYXdfYWNjZWxlcmF0aW9uX3gpCi0gICAgc2VsZi5yYXdfYWNjZWxlcmF0aW9uX2xpbmVfeS5zZXRfZGF0YShzZWxmLnJhd19hY2NlbGVyYXRpb25feSkKLSAgICBzZWxmLnJhd19hY2NlbGVyYXRpb25fbGluZV96LnNldF9kYXRhKHNlbGYucmF3X2FjY2VsZXJhdGlvbl96KQotICAgIHNlbGYucmF3X2FjY2VsZXJhdGlvbl9saW5lX21hZ25pdHVkZS5zZXRfZGF0YShzZWxmLnJhd19hY2NlbGVyYXRpb25fbWFnbml0dWRlKQotICAgIHNlbGYuZmlsdGVyZWRfYWNjZWxlcmF0aW9uX2xpbmVfeC5zZXRfZGF0YShzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl94KQotICAgIHNlbGYuZmlsdGVyZWRfYWNjZWxlcmF0aW9uX2xpbmVfeS5zZXRfZGF0YShzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl95KQotICAgIHNlbGYuZmlsdGVyZWRfYWNjZWxlcmF0aW9uX2xpbmVfei5zZXRfZGF0YShzZWxmLmZpbHRlcmVkX2FjY2VsZXJhdGlvbl96KQotICAgIHNlbGYuZmlsdGVyZWRfYWNjZWxlcmF0aW9uX2xpbmVfbWFnbml0dWRlLnNldF9kYXRhKHNlbGYuZmlsdGVyZWRfYWNjZWxlcmF0aW9uX21hZ25pdHVkZSkKLSAgICBzZWxmLnRpbHRfYW5nbGVfbGluZS5zZXRfZGF0YShzZWxmLnRpbHRfYW5nbGUpCi0gICAgc2VsZi5vcmllbnRhdGlvbl9hbmdsZV9saW5lLnNldF9kYXRhKHNlbGYub3JpZW50YXRpb25fYW5nbGUpCi0gICAgc2VsZi5jdXJyZW50X3JvdGF0aW9uX2xpbmUuc2V0X2RhdGEoc2VsZi5jdXJyZW50X3JvdGF0aW9uKQotICAgIHNlbGYucHJvcG9zZWRfcm90YXRpb25fbGluZS5zZXRfZGF0YShzZWxmLnByb3Bvc2VkX3JvdGF0aW9uKQotICAgIHNlbGYucHJlZGljdGVkX3JvdGF0aW9uX2xpbmUuc2V0X2RhdGEoc2VsZi5wcmVkaWN0ZWRfcm90YXRpb24pCi0gICAgc2VsZi50aW1lX3VudGlsX3NldHRsZWRfbGluZS5zZXRfZGF0YShzZWxmLnRpbWVfdW50aWxfc2V0dGxlZCkKLSAgICBzZWxmLnRpbWVfdW50aWxfZmxhdF9kZWxheV9leHBpcmVkX2xpbmUuc2V0X2RhdGEoc2VsZi50aW1lX3VudGlsX2ZsYXRfZGVsYXlfZXhwaXJlZCkKLSAgICBzZWxmLnRpbWVfdW50aWxfc3dpbmdfZGVsYXlfZXhwaXJlZF9saW5lLnNldF9kYXRhKHNlbGYudGltZV91bnRpbF9zd2luZ19kZWxheV9leHBpcmVkKQotICAgIHNlbGYudGltZV91bnRpbF9hY2NlbGVyYXRpb25fZGVsYXlfZXhwaXJlZF9saW5lLnNldF9kYXRhKHNlbGYudGltZV91bnRpbF9hY2NlbGVyYXRpb25fZGVsYXlfZXhwaXJlZCkKLSAgICBzZWxmLnNhbXBsZV9sYXRlbmN5X2xpbmUuc2V0X2RhdGEoc2VsZi5zYW1wbGVfbGF0ZW5jeSkKLQotICAgIHNlbGYuZmlnLmNhbnZhcy5kcmF3X2lkbGUoKQotCi0gICMgU2Nyb2xsIGEgdGltZSBzZXJpZXMuCi0gIGRlZiBfc2Nyb2xsKHNlbGYsIHRpbWVzZXJpZXMsIGJvdHRvbSk6Ci0gICAgYm90dG9tX2luZGV4ID0gYmlzZWN0LmJpc2VjdF9sZWZ0KHRpbWVzZXJpZXNbMF0sIGJvdHRvbSkKLSAgICBkZWwgdGltZXNlcmllc1swXVs6Ym90dG9tX2luZGV4XQotICAgIGRlbCB0aW1lc2VyaWVzWzFdWzpib3R0b21faW5kZXhdCi0gICAgZm9yIGksIHRpbWVpbmRleCBpbiBlbnVtZXJhdGUodGltZXNlcmllc1swXSk6Ci0gICAgICB0aW1lc2VyaWVzWzBdW2ldID0gdGltZWluZGV4IC0gYm90dG9tCi0KLSAgIyBFeHRyYWN0IGEgd29yZCBmb2xsb3dpbmcgdGhlIHNwZWNpZmllZCBwcmVmaXguCi0gIGRlZiBfZ2V0X2ZvbGxvd2luZ193b3JkKHNlbGYsIGxpbmUsIHByZWZpeCk6Ci0gICAgcHJlZml4X2luZGV4ID0gbGluZS5maW5kKHByZWZpeCkKLSAgICBpZiBwcmVmaXhfaW5kZXggPT0gLTE6Ci0gICAgICByZXR1cm4gTm9uZQotICAgIHN0YXJ0X2luZGV4ID0gcHJlZml4X2luZGV4ICsgbGVuKHByZWZpeCkKLSAgICBkZWxpbV9pbmRleCA9IGxpbmUuZmluZCgnLCcsIHN0YXJ0X2luZGV4KQotICAgIGlmIGRlbGltX2luZGV4ID09IC0xOgotICAgICAgcmV0dXJuIGxpbmVbc3RhcnRfaW5kZXg6XQotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gbGluZVtzdGFydF9pbmRleDpkZWxpbV9pbmRleF0KLQotICAjIEV4dHJhY3QgYSBudW1iZXIgZm9sbG93aW5nIHRoZSBzcGVjaWZpZWQgcHJlZml4LgotICBkZWYgX2dldF9mb2xsb3dpbmdfbnVtYmVyKHNlbGYsIGxpbmUsIHByZWZpeCk6Ci0gICAgd29yZCA9IHNlbGYuX2dldF9mb2xsb3dpbmdfd29yZChsaW5lLCBwcmVmaXgpCi0gICAgaWYgd29yZCBpcyBOb25lOgotICAgICAgcmV0dXJuIE5vbmUKLSAgICByZXR1cm4gZmxvYXQod29yZCkKLQotICAjIEV4dHJhY3QgYW4gYXJyYXkgb2YgbnVtYmVycyBmb2xsb3dpbmcgdGhlIHNwZWNpZmllZCBwcmVmaXguCi0gIGRlZiBfZ2V0X2ZvbGxvd2luZ19hcnJheV9vZl9udW1iZXJzKHNlbGYsIGxpbmUsIHByZWZpeCk6Ci0gICAgcHJlZml4X2luZGV4ID0gbGluZS5maW5kKHByZWZpeCArICdbJykKLSAgICBpZiBwcmVmaXhfaW5kZXggPT0gLTE6Ci0gICAgICByZXR1cm4gTm9uZQotICAgIHN0YXJ0X2luZGV4ID0gcHJlZml4X2luZGV4ICsgbGVuKHByZWZpeCkgKyAxCi0gICAgZGVsaW1faW5kZXggPSBsaW5lLmZpbmQoJ10nLCBzdGFydF9pbmRleCkKLSAgICBpZiBkZWxpbV9pbmRleCA9PSAtMToKLSAgICAgIHJldHVybiBOb25lCi0KLSAgICByZXN1bHQgPSBbXQotICAgIHdoaWxlIHN0YXJ0X2luZGV4IDwgZGVsaW1faW5kZXg6Ci0gICAgICBjb21tYV9pbmRleCA9IGxpbmUuZmluZCgnLCAnLCBzdGFydF9pbmRleCwgZGVsaW1faW5kZXgpCi0gICAgICBpZiBjb21tYV9pbmRleCA9PSAtMToKLSAgICAgICAgcmVzdWx0LmFwcGVuZChmbG9hdChsaW5lW3N0YXJ0X2luZGV4OmRlbGltX2luZGV4XSkpCi0gICAgICAgIGJyZWFrOwotICAgICAgcmVzdWx0LmFwcGVuZChmbG9hdChsaW5lW3N0YXJ0X2luZGV4OmNvbW1hX2luZGV4XSkpCi0gICAgICBzdGFydF9pbmRleCA9IGNvbW1hX2luZGV4ICsgMgotICAgIHJldHVybiByZXN1bHQKLQotICAjIEFkZCBhIHZhbHVlIHRvIGEgdGltZSBzZXJpZXMuCi0gIGRlZiBfYXBwZW5kKHNlbGYsIHRpbWVzZXJpZXMsIHRpbWVpbmRleCwgbnVtYmVyKToKLSAgICB0aW1lc2VyaWVzWzBdLmFwcGVuZCh0aW1laW5kZXgpCi0gICAgdGltZXNlcmllc1sxXS5hcHBlbmQobnVtYmVyKQotCi0gICMgUGFyc2UgdGhlIGxvZ2NhdCB0aW1lc3RhbXAuCi0gICMgVGltZXN0YW1wIGhhcyB0aGUgZm9ybSAnMDEtMjEgMjA6NDI6NDIuOTMwJwotICBkZWYgX3BhcnNlX3RpbWVzdGFtcChzZWxmLCBsaW5lKToKLSAgICByZXR1cm4gZGF0ZXRpbWUuc3RycHRpbWUobGluZVswOjE4XSwgJyVtLSVkICVIOiVNOiVTLiVmJykKLQotIyBOb3RpY2UKLXByaW50ICJXaW5kb3cgT3JpZW50YXRpb24gTGlzdGVuZXIgcGxvdHRpbmcgdG9vbCIKLXByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgotcHJpbnQgIlBsZWFzZSB0dXJuIG9uIHRoZSBXaW5kb3cgT3JpZW50YXRpb24gTGlzdGVuZXIgbG9nZ2luZyBpbiBEZXZlbG9wbWVudCBTZXR0aW5ncy4iCi0KLSMgU3RhcnQgYWRiLgotcHJpbnQgIlN0YXJ0aW5nIGFkYiBsb2djYXQuXG4iCi0KLWFkYiA9IHN1YnByb2Nlc3MuUG9wZW4oWydhZGInLCAnbG9nY2F0JywgJy1zJywgJy12JywgJ3RpbWUnLCAnV2luZG93T3JpZW50YXRpb25MaXN0ZW5lcjpWJ10sCi0gICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLWFkYm91dCA9IE5vbkJsb2NraW5nU3RyZWFtKGFkYi5zdGRvdXQpCi0KLSMgUHJlcGFyZSBwbG90dGVyLgotcGxvdHRlciA9IFBsb3R0ZXIoYWRib3V0KQotcGxvdHRlci51cGRhdGUoKQotCi0jIE1haW4gbG9vcC4KLXBsb3Quc2hvdygpCmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkLzIwMDgwNTIyLmNvbXBpbGVkIGIvdG9vbHMvcHJlbG9hZC8yMDA4MDUyMi5jb21waWxlZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJhZjQyMi4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkLzIwMDgwNTIyLmNvbXBpbGVkCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZC8yMDA5MDgxMS5jb21waWxlZCBiL3Rvb2xzL3ByZWxvYWQvMjAwOTA4MTEuY29tcGlsZWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYmVjYTAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcHJlbG9hZC8yMDA5MDgxMS5jb21waWxlZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvMjAxMDAyMjMuY29tcGlsZWQgYi90b29scy9wcmVsb2FkLzIwMTAwMjIzLmNvbXBpbGVkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDU2Mzg4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvMjAxMDAyMjMuY29tcGlsZWQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL0FuZHJvaWQubWsgYi90b29scy9wcmVsb2FkL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMjU4NzAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcHJlbG9hZC9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVMgOj0gXAotCUNvbXBpbGUuamF2YSAgXAotCUxvYWRlZENsYXNzLmphdmEgXAotCU1lbW9yeVVzYWdlLmphdmEgXAotCU9wZXJhdGlvbi5qYXZhIFwKLQlQb2xpY3kuamF2YSBcCi0JUHJpbnRDc3YuamF2YSBcCi0JUHJpbnRIdG1sRGlmZi5qYXZhIFwKLQlQcmludFBzVHJlZS5qYXZhIFwKLQlQcm9jLmphdmEgXAotCVJlY29yZC5qYXZhIFwKLQlSb290LmphdmEgXAotCVdyaXRlUHJlbG9hZGVkQ2xhc3NGaWxlLmphdmEKLQotTE9DQUxfTU9EVUxFOj0gcHJlbG9hZAotCi1pbmNsdWRlICQoQlVJTERfSE9TVF9KQVZBX0xJQlJBUlkpCi0KLWluY2x1ZGUgJChjYWxsIGFsbC1zdWJkaXItbWFrZWZpbGVzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZC9Db21waWxlLmphdmEgYi90b29scy9wcmVsb2FkL0NvbXBpbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcyNThlZi4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkL0NvbXBpbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBQYXJzZXMgYW5kIGFuYWx5emVzIGEgbG9nLCBwdWxsaW5nIG91ciBQUkVMT0FEIGluZm9ybWF0aW9uLiBJZiB5b3UgaGF2ZQotICogYW4gZW11bGF0b3Igb3IgZGV2aWNlIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQsIHRoaXMgY2xhc3Mgd2lsbCB1c2UgaXQKLSAqIHRvIG1lYXN1cmUgYW5kIHJlY29yZCB0aGUgbWVtb3J5IHVzYWdlIG9mIGVhY2ggY2xhc3MuCi0gKiAKLSAqIFRPRE86IFNob3VsZCBhbmFseXplIGxpbmVzIGFuZCBzZWxlY3Qgc3Vic3RyaW5nIGR5bmFtaWNhbGx5IChpbnN0ZWFkIG9mIGhhcmRjb2RlZCAxOSkKLSAqLwotcHVibGljIGNsYXNzIENvbXBpbGUgewotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9IDIpIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IENvbXBpbGUgW2xvZyBmaWxlXSBbb3V0cHV0IGZpbGVdIik7Ci0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJvb3Qgcm9vdCA9IG5ldyBSb290KCk7Ci0KLSAgICAgICAgTGlzdDxSZWNvcmQ+IHJlY29yZHMgPSBuZXcgQXJyYXlMaXN0PFJlY29yZD4oKTsKLQotICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCi0gICAgICAgICAgICAgICAgbmV3IEZpbGVJbnB1dFN0cmVhbShhcmdzWzBdKSkpOwotCi0gICAgICAgIFN0cmluZyBsaW5lOwotICAgICAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgICAgIHdoaWxlICgobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLSAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKLSAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoIkkvUFJFTE9BRCIpKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNsaXBwZWQgPSBsaW5lLnN1YnN0cmluZygxOSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlY29yZHMuYWRkKG5ldyBSZWNvcmQoY2xpcHBlZCwgbGluZU51bWJlcikpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhjZXB0aW9uIHdoaWxlIHJlY29yZGluZyBsaW5lICIgKyBsaW5lTnVtYmVyICsgIjogIiArIGxpbmUsIGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoUmVjb3JkIHJlY29yZCA6IHJlY29yZHMpIHsKLSAgICAgICAgICAgIHJvb3QuaW5kZXhQcm9jZXNzKHJlY29yZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKFJlY29yZCByZWNvcmQgOiByZWNvcmRzKSB7Ci0gICAgICAgICAgICByb290LmluZGV4Q2xhc3NPcGVyYXRpb24ocmVjb3JkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGluLmNsb3NlKCk7Ci0KLSAgICAgICAgcm9vdC50b0ZpbGUoYXJnc1sxXSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZC9Mb2FkZWRDbGFzcy5qYXZhIGIvdG9vbHMvcHJlbG9hZC9Mb2FkZWRDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmU1ZGZjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvTG9hZGVkQ2xhc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEudXRpbC4qOwotCi0vKioKLSAqIEEgbG9hZGVkIGNsYXNzLgotICovCi1jbGFzcyBMb2FkZWRDbGFzcyBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSwgQ29tcGFyYWJsZTxMb2FkZWRDbGFzcz4gewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMDsKLQotICAgIC8qKiBDbGFzcyBuYW1lLiAqLwotICAgIGZpbmFsIFN0cmluZyBuYW1lOwotCi0gICAgLyoqIExvYWQgb3BlcmF0aW9ucy4gKi8KLSAgICBmaW5hbCBMaXN0PE9wZXJhdGlvbj4gbG9hZHMgPSBuZXcgQXJyYXlMaXN0PE9wZXJhdGlvbj4oKTsKLQotICAgIC8qKiBTdGF0aWMgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucy4gKi8KLSAgICBmaW5hbCBMaXN0PE9wZXJhdGlvbj4gaW5pdGlhbGl6YXRpb25zID0gbmV3IEFycmF5TGlzdDxPcGVyYXRpb24+KCk7Ci0KLSAgICAvKiogTWVtb3J5IHVzYWdlIGdhdGhlcmVkIGJ5IGxvYWRpbmcgb25seSB0aGlzIGNsYXNzIGluIGl0cyBvd24gVk0uICovCi0gICAgTWVtb3J5VXNhZ2UgbWVtb3J5VXNhZ2UgPSBNZW1vcnlVc2FnZS5OT1RfQVZBSUxBQkxFOwotCi0gICAgLyoqCi0gICAgICogV2hldGhlciBvciBub3QgdGhpcyBjbGFzcyB3YXMgbG9hZGVkIGluIHRoZSBzeXN0ZW0gY2xhc3MgbG9hZGVyLgotICAgICAqLwotICAgIGZpbmFsIGJvb2xlYW4gc3lzdGVtQ2xhc3M7Ci0KLSAgICAvKiogV2hldGhlciBvciBub3QgdGhpcyBjbGFzcyB3aWxsIGJlIHByZWxvYWRlZC4gKi8KLSAgICBib29sZWFuIHByZWxvYWRlZDsKLQotICAgIC8qKiBDb25zdHJ1Y3RzIGEgbmV3IGNsYXNzLiAqLwotICAgIExvYWRlZENsYXNzKFN0cmluZyBuYW1lLCBib29sZWFuIHN5c3RlbUNsYXNzKSB7Ci0gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICAgIHRoaXMuc3lzdGVtQ2xhc3MgPSBzeXN0ZW1DbGFzczsKLSAgICB9Ci0KLSAgICB2b2lkIG1lYXN1cmVNZW1vcnlVc2FnZSgpIHsKLSAgICAgICAgdGhpcy5tZW1vcnlVc2FnZSA9IE1lbW9yeVVzYWdlLmZvckNsYXNzKG5hbWUpOwotICAgIH0KLQotICAgIGludCBtbHQgPSAtMTsKLQotICAgIC8qKiBNZWRpYW4gdGltZSB0byBsb2FkIHRoaXMgY2xhc3MuICovCi0gICAgaW50IG1lZGlhbkxvYWRUaW1lTWljcm9zKCkgewotICAgICAgICBpZiAobWx0ICE9IC0xKSB7Ci0gICAgICAgICAgICByZXR1cm4gbWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1sdCA9IGNhbGN1bGF0ZU1lZGlhbihsb2Fkcyk7Ci0gICAgfQotCi0gICAgaW50IG1pdCA9IC0xOwotCi0gICAgLyoqIE1lZGlhbiB0aW1lIHRvIGluaXRpYWxpemUgdGhpcyBjbGFzcy4gKi8KLSAgICBpbnQgbWVkaWFuSW5pdFRpbWVNaWNyb3MoKSB7Ci0gICAgICAgIGlmIChtaXQgIT0gLTEpIHsKLSAgICAgICAgICAgIHJldHVybiBtaXQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbWl0ID0gY2FsY3VsYXRlTWVkaWFuKGluaXRpYWxpemF0aW9ucyk7Ci0gICAgfQotCi0gICAgaW50IG1lZGlhblRpbWVNaWNyb3MoKSB7Ci0gICAgICAgIHJldHVybiBtZWRpYW5Jbml0VGltZU1pY3JvcygpICsgbWVkaWFuTG9hZFRpbWVNaWNyb3MoKTsKLSAgICB9Ci0KLSAgICAvKiogQ2FsY3VsYXRlcyB0aGUgbWVkaWFuIGR1cmF0aW9uIGZvciBhIGxpc3Qgb2Ygb3BlcmF0aW9ucy4gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgY2FsY3VsYXRlTWVkaWFuKExpc3Q8T3BlcmF0aW9uPiBvcGVyYXRpb25zKSB7Ci0gICAgICAgIGludCBzaXplID0gb3BlcmF0aW9ucy5zaXplKCk7Ci0gICAgICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50W10gdGltZXMgPSBuZXcgaW50W3NpemVdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgdGltZXNbaV0gPSBvcGVyYXRpb25zLmdldChpKS5leGNsdXNpdmVUaW1lTWljcm9zKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBBcnJheXMuc29ydCh0aW1lcyk7Ci0gICAgICAgIGludCBtaWRkbGUgPSBzaXplIC8gMjsKLSAgICAgICAgaWYgKHNpemUgJSAyID09IDEpIHsKLSAgICAgICAgICAgIC8vIE9kZAotICAgICAgICAgICAgcmV0dXJuIHRpbWVzW21pZGRsZV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBFdmVuIC0tIGF2ZXJhZ2UgdGhlIHR3by4KLSAgICAgICAgICAgIHJldHVybiAodGltZXNbbWlkZGxlIC0gMV0gKyB0aW1lc1ttaWRkbGVdKSAvIDI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogUmV0dXJucyBuYW1lcyBvZiBwcm9jZXNzZXMgdGhhdCBsb2FkZWQgdGhpcyBjbGFzcy4gKi8KLSAgICBTZXQ8U3RyaW5nPiBwcm9jZXNzTmFtZXMoKSB7Ci0gICAgICAgIFNldDxTdHJpbmc+IG5hbWVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotICAgICAgICBhZGRQcm9jZXNzTmFtZXMobG9hZHMsIG5hbWVzKTsKLSAgICAgICAgYWRkUHJvY2Vzc05hbWVzKGluaXRpYWxpemF0aW9ucywgbmFtZXMpOwotICAgICAgICByZXR1cm4gbmFtZXM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFkZFByb2Nlc3NOYW1lcyhMaXN0PE9wZXJhdGlvbj4gb3BzLCBTZXQ8U3RyaW5nPiBuYW1lcykgewotICAgICAgICBmb3IgKE9wZXJhdGlvbiBvcGVyYXRpb24gOiBvcHMpIHsKLSAgICAgICAgICAgIGlmIChvcGVyYXRpb24ucHJvY2Vzcy5mcm9tWnlnb3RlKCkpIHsKLSAgICAgICAgICAgICAgICBuYW1lcy5hZGQob3BlcmF0aW9uLnByb2Nlc3MubmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGNvbXBhcmVUbyhMb2FkZWRDbGFzcyBvKSB7Ci0gICAgICAgIHJldHVybiBuYW1lLmNvbXBhcmVUbyhvLm5hbWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvTWVtb3J5VXNhZ2UuamF2YSBiL3Rvb2xzL3ByZWxvYWQvTWVtb3J5VXNhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhmOTVmNC4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkL01lbW9yeVVzYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotLyoqCi0gKiBNZW1vcnkgdXNhZ2UgaW5mb3JtYXRpb24uCi0gKi8KLWNsYXNzIE1lbW9yeVVzYWdlIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDA7Ci0KLSAgICBzdGF0aWMgZmluYWwgTWVtb3J5VXNhZ2UgTk9UX0FWQUlMQUJMRSA9IG5ldyBNZW1vcnlVc2FnZSgpOwotICAgIAotICAgIHN0YXRpYyBpbnQgZXJyb3JDb3VudCA9IDA7Ci0KLSAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGluIDFrQiBpbmNyZW1lbnRzIChub3QgNGtCIGxpa2UgeW91J2QgZXhwZWN0KS4KLSAgICBmaW5hbCBpbnQgbmF0aXZlU2hhcmVkUGFnZXM7Ci0gICAgZmluYWwgaW50IGphdmFTaGFyZWRQYWdlczsKLSAgICBmaW5hbCBpbnQgb3RoZXJTaGFyZWRQYWdlczsKLSAgICBmaW5hbCBpbnQgbmF0aXZlUHJpdmF0ZVBhZ2VzOwotICAgIGZpbmFsIGludCBqYXZhUHJpdmF0ZVBhZ2VzOwotICAgIGZpbmFsIGludCBvdGhlclByaXZhdGVQYWdlczsKLQotICAgIGZpbmFsIGludCBhbGxvY0NvdW50OwotICAgIGZpbmFsIGludCBhbGxvY1NpemU7Ci0gICAgZmluYWwgaW50IGZyZWVkQ291bnQ7Ci0gICAgZmluYWwgaW50IGZyZWVkU2l6ZTsKLSAgICBmaW5hbCBsb25nIG5hdGl2ZUhlYXBTaXplOwotCi0gICAgcHVibGljIE1lbW9yeVVzYWdlKFN0cmluZyBsaW5lKSB7Ci0gICAgICAgIFN0cmluZ1tdIHBhcnNlZCA9IGxpbmUuc3BsaXQoIiwiKTsKLQotICAgICAgICBuYXRpdmVTaGFyZWRQYWdlcyA9IEludGVnZXIucGFyc2VJbnQocGFyc2VkWzFdKTsKLSAgICAgICAgamF2YVNoYXJlZFBhZ2VzID0gSW50ZWdlci5wYXJzZUludChwYXJzZWRbMl0pOwotICAgICAgICBvdGhlclNoYXJlZFBhZ2VzID0gSW50ZWdlci5wYXJzZUludChwYXJzZWRbM10pOwotICAgICAgICBuYXRpdmVQcml2YXRlUGFnZXMgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnNlZFs0XSk7Ci0gICAgICAgIGphdmFQcml2YXRlUGFnZXMgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnNlZFs1XSk7Ci0gICAgICAgIG90aGVyUHJpdmF0ZVBhZ2VzID0gSW50ZWdlci5wYXJzZUludChwYXJzZWRbNl0pOwotICAgICAgICBhbGxvY0NvdW50ID0gSW50ZWdlci5wYXJzZUludChwYXJzZWRbN10pOwotICAgICAgICBhbGxvY1NpemUgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnNlZFs4XSk7Ci0gICAgICAgIGZyZWVkQ291bnQgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnNlZFs5XSk7Ci0gICAgICAgIGZyZWVkU2l6ZSA9IEludGVnZXIucGFyc2VJbnQocGFyc2VkWzEwXSk7Ci0gICAgICAgIG5hdGl2ZUhlYXBTaXplID0gTG9uZy5wYXJzZUxvbmcocGFyc2VkWzExXSk7Ci0gICAgfQotCi0gICAgTWVtb3J5VXNhZ2UoKSB7Ci0gICAgICAgIG5hdGl2ZVNoYXJlZFBhZ2VzID0gLTE7Ci0gICAgICAgIGphdmFTaGFyZWRQYWdlcyA9IC0xOwotICAgICAgICBvdGhlclNoYXJlZFBhZ2VzID0gLTE7Ci0gICAgICAgIG5hdGl2ZVByaXZhdGVQYWdlcyA9IC0xOwotICAgICAgICBqYXZhUHJpdmF0ZVBhZ2VzID0gLTE7Ci0gICAgICAgIG90aGVyUHJpdmF0ZVBhZ2VzID0gLTE7Ci0KLSAgICAgICAgYWxsb2NDb3VudCA9IC0xOwotICAgICAgICBhbGxvY1NpemUgPSAtMTsKLSAgICAgICAgZnJlZWRDb3VudCA9IC0xOwotICAgICAgICBmcmVlZFNpemUgPSAtMTsKLSAgICAgICAgbmF0aXZlSGVhcFNpemUgPSAtMTsKLSAgICB9Ci0KLSAgICBNZW1vcnlVc2FnZShpbnQgbmF0aXZlU2hhcmVkUGFnZXMsCi0gICAgICAgICAgICBpbnQgamF2YVNoYXJlZFBhZ2VzLAotICAgICAgICAgICAgaW50IG90aGVyU2hhcmVkUGFnZXMsCi0gICAgICAgICAgICBpbnQgbmF0aXZlUHJpdmF0ZVBhZ2VzLAotICAgICAgICAgICAgaW50IGphdmFQcml2YXRlUGFnZXMsCi0gICAgICAgICAgICBpbnQgb3RoZXJQcml2YXRlUGFnZXMsCi0gICAgICAgICAgICBpbnQgYWxsb2NDb3VudCwKLSAgICAgICAgICAgIGludCBhbGxvY1NpemUsCi0gICAgICAgICAgICBpbnQgZnJlZWRDb3VudCwKLSAgICAgICAgICAgIGludCBmcmVlZFNpemUsCi0gICAgICAgICAgICBsb25nIG5hdGl2ZUhlYXBTaXplKSB7Ci0gICAgICAgIHRoaXMubmF0aXZlU2hhcmVkUGFnZXMgPSBuYXRpdmVTaGFyZWRQYWdlczsKLSAgICAgICAgdGhpcy5qYXZhU2hhcmVkUGFnZXMgPSBqYXZhU2hhcmVkUGFnZXM7Ci0gICAgICAgIHRoaXMub3RoZXJTaGFyZWRQYWdlcyA9IG90aGVyU2hhcmVkUGFnZXM7Ci0gICAgICAgIHRoaXMubmF0aXZlUHJpdmF0ZVBhZ2VzID0gbmF0aXZlUHJpdmF0ZVBhZ2VzOwotICAgICAgICB0aGlzLmphdmFQcml2YXRlUGFnZXMgPSBqYXZhUHJpdmF0ZVBhZ2VzOwotICAgICAgICB0aGlzLm90aGVyUHJpdmF0ZVBhZ2VzID0gb3RoZXJQcml2YXRlUGFnZXM7Ci0gICAgICAgIHRoaXMuYWxsb2NDb3VudCA9IGFsbG9jQ291bnQ7Ci0gICAgICAgIHRoaXMuYWxsb2NTaXplID0gYWxsb2NTaXplOwotICAgICAgICB0aGlzLmZyZWVkQ291bnQgPSBmcmVlZENvdW50OwotICAgICAgICB0aGlzLmZyZWVkU2l6ZSA9IGZyZWVkU2l6ZTsKLSAgICAgICAgdGhpcy5uYXRpdmVIZWFwU2l6ZSA9IG5hdGl2ZUhlYXBTaXplOwotICAgIH0KLQotICAgIE1lbW9yeVVzYWdlIHN1YnRyYWN0KE1lbW9yeVVzYWdlIGJhc2VsaW5lKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTWVtb3J5VXNhZ2UoCi0gICAgICAgICAgICAgICAgbmF0aXZlU2hhcmVkUGFnZXMgLSBiYXNlbGluZS5uYXRpdmVTaGFyZWRQYWdlcywKLSAgICAgICAgICAgICAgICBqYXZhU2hhcmVkUGFnZXMgLSBiYXNlbGluZS5qYXZhU2hhcmVkUGFnZXMsCi0gICAgICAgICAgICAgICAgb3RoZXJTaGFyZWRQYWdlcyAtIGJhc2VsaW5lLm90aGVyU2hhcmVkUGFnZXMsCi0gICAgICAgICAgICAgICAgbmF0aXZlUHJpdmF0ZVBhZ2VzIC0gYmFzZWxpbmUubmF0aXZlUHJpdmF0ZVBhZ2VzLAotICAgICAgICAgICAgICAgIGphdmFQcml2YXRlUGFnZXMgLSBiYXNlbGluZS5qYXZhUHJpdmF0ZVBhZ2VzLAotICAgICAgICAgICAgICAgIG90aGVyUHJpdmF0ZVBhZ2VzIC0gYmFzZWxpbmUub3RoZXJQcml2YXRlUGFnZXMsCi0gICAgICAgICAgICAgICAgYWxsb2NDb3VudCAtIGJhc2VsaW5lLmFsbG9jQ291bnQsCi0gICAgICAgICAgICAgICAgYWxsb2NTaXplIC0gYmFzZWxpbmUuYWxsb2NTaXplLAotICAgICAgICAgICAgICAgIGZyZWVkQ291bnQgLSBiYXNlbGluZS5mcmVlZENvdW50LAotICAgICAgICAgICAgICAgIGZyZWVkU2l6ZSAtIGJhc2VsaW5lLmZyZWVkU2l6ZSwKLSAgICAgICAgICAgICAgICBuYXRpdmVIZWFwU2l6ZSAtIGJhc2VsaW5lLm5hdGl2ZUhlYXBTaXplKTsKLSAgICB9Ci0KLSAgICBpbnQgamF2YUhlYXBTaXplKCkgewotICAgICAgICByZXR1cm4gYWxsb2NTaXplIC0gZnJlZWRTaXplOwotICAgIH0KLQotICAgIGludCB0b3RhbEhlYXAoKSB7Ci0gICAgICAgIHJldHVybiBqYXZhSGVhcFNpemUoKSArIChpbnQpIG5hdGl2ZUhlYXBTaXplOwotICAgIH0KLQotICAgIGludCBqYXZhUGFnZXNJbksoKSB7Ci0gICAgICAgIHJldHVybiBqYXZhU2hhcmVkUGFnZXMgKyBqYXZhUHJpdmF0ZVBhZ2VzOwotICAgIH0KLQotICAgIGludCBuYXRpdmVQYWdlc0luSygpIHsKLSAgICAgICAgcmV0dXJuIG5hdGl2ZVNoYXJlZFBhZ2VzICsgbmF0aXZlUHJpdmF0ZVBhZ2VzOwotICAgIH0KLSAgICBpbnQgb3RoZXJQYWdlc0luSygpIHsKLSAgICAgICAgcmV0dXJuIG90aGVyU2hhcmVkUGFnZXMgKyBvdGhlclByaXZhdGVQYWdlczsKLSAgICB9Ci0KLSAgICBpbnQgdG90YWxQYWdlcygpIHsKLSAgICAgICAgcmV0dXJuIGphdmFTaGFyZWRQYWdlcyArIGphdmFQcml2YXRlUGFnZXMgKyBuYXRpdmVTaGFyZWRQYWdlcyArCi0gICAgICAgICAgICAgICAgbmF0aXZlUHJpdmF0ZVBhZ2VzICsgb3RoZXJTaGFyZWRQYWdlcyArIG90aGVyUHJpdmF0ZVBhZ2VzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdhcyB0aGlzIGluZm9ybWF0aW9uIGF2YWlsYWJsZT8KLSAgICAgKi8KLSAgICBib29sZWFuIGlzQXZhaWxhYmxlKCkgewotICAgICAgICByZXR1cm4gbmF0aXZlU2hhcmVkUGFnZXMgIT0gLTE7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTWVhc3VyZXMgYmFzZWxpbmUgbWVtb3J5IHVzYWdlLgotICAgICAqLwotICAgIHN0YXRpYyBNZW1vcnlVc2FnZSBiYXNlbGluZSgpIHsKLSAgICAgICAgcmV0dXJuIGZvckNsYXNzKG51bGwpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDTEFTU19QQVRIID0gIi1YYm9vdGNsYXNzcGF0aCIKLSAgICAgICAgICAgICsgIjovc3lzdGVtL2ZyYW1ld29yay9jb3JlLmphciIKLSAgICAgICAgICAgICsgIjovc3lzdGVtL2ZyYW1ld29yay9leHQuamFyIgotICAgICAgICAgICAgKyAiOi9zeXN0ZW0vZnJhbWV3b3JrL2ZyYW1ld29yay5qYXIiCi0gICAgICAgICAgICArICI6L3N5c3RlbS9mcmFtZXdvcmsvZnJhbWV3b3JrLXRlc3RzLmphciIKLSAgICAgICAgICAgICsgIjovc3lzdGVtL2ZyYW1ld29yay9zZXJ2aWNlcy5qYXIiCi0gICAgICAgICAgICArICI6L3N5c3RlbS9mcmFtZXdvcmsvbG9hZGNsYXNzLmphciI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBHRVRfRElSVFlfUEFHRVMgPSB7Ci0gICAgICAgICJhZGIiLCAic2hlbGwiLCAiZGFsdmlrdm0iLCBDTEFTU19QQVRILCAiTG9hZENsYXNzIiB9OwotCi0gICAgLyoqCi0gICAgICogTWVhc3VyZXMgbWVtb3J5IHVzYWdlIGZvciB0aGUgZ2l2ZW4gY2xhc3MuCi0gICAgICovCi0gICAgc3RhdGljIE1lbW9yeVVzYWdlIGZvckNsYXNzKFN0cmluZyBjbGFzc05hbWUpIHsKLSAgICAgICAgTWVhc3VyZVdpdGhUaW1lb3V0IG1lYXN1cmVyID0gbmV3IE1lYXN1cmVXaXRoVGltZW91dChjbGFzc05hbWUpOwotCi0gICAgICAgIG5ldyBUaHJlYWQobWVhc3VyZXIpLnN0YXJ0KCk7Ci0KLSAgICAgICAgc3luY2hyb25pemVkIChtZWFzdXJlcikgewotICAgICAgICAgICAgaWYgKG1lYXN1cmVyLm1lbW9yeVVzYWdlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBXYWl0IHVwIHRvIDEwcy4KLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBtZWFzdXJlci53YWl0KDMwMDAwKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSW50ZXJydXB0ZWQgd2FpdGluZyBmb3IgbWVhc3VyZW1lbnQuIik7Ci0gICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfQVZBSUxBQkxFOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIElmIGl0J3Mgc3RpbGwgbnVsbC4KLSAgICAgICAgICAgICAgICBpZiAobWVhc3VyZXIubWVtb3J5VXNhZ2UgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlRpbWVkIG91dCB3aGlsZSBtZWFzdXJpbmcgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY2xhc3NOYW1lICsgIi4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9BVkFJTEFCTEU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCBtZW1vcnkgdXNhZ2UgZm9yICIgKyBjbGFzc05hbWUgKyAiLiIpOwotICAgICAgICAgICAgcmV0dXJuIG1lYXN1cmVyLm1lbW9yeVVzYWdlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNsYXNzIE1lYXN1cmVXaXRoVGltZW91dCBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgY2xhc3NOYW1lOwotICAgICAgICBNZW1vcnlVc2FnZSBtZW1vcnlVc2FnZSA9IG51bGw7Ci0KLSAgICAgICAgTWVhc3VyZVdpdGhUaW1lb3V0KFN0cmluZyBjbGFzc05hbWUpIHsKLSAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgTWVtb3J5VXNhZ2UgbWVhc3VyZWQgPSBtZWFzdXJlKCk7Ci0KLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgICAgIG1lbW9yeVVzYWdlID0gbWVhc3VyZWQ7Ci0gICAgICAgICAgICAgICAgbm90aWZ5QWxsKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIE1lbW9yeVVzYWdlIG1lYXN1cmUoKSB7Ci0gICAgICAgICAgICBTdHJpbmdbXSBjb21tYW5kcyA9IEdFVF9ESVJUWV9QQUdFUzsKLSAgICAgICAgICAgIGlmIChjbGFzc05hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIExpc3Q8U3RyaW5nPiBjb21tYW5kTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigKLSAgICAgICAgICAgICAgICAgICAgICAgIEdFVF9ESVJUWV9QQUdFUy5sZW5ndGggKyAxKTsKLSAgICAgICAgICAgICAgICBjb21tYW5kTGlzdC5hZGRBbGwoQXJyYXlzLmFzTGlzdChjb21tYW5kcykpOwotICAgICAgICAgICAgICAgIGNvbW1hbmRMaXN0LmFkZChjbGFzc05hbWUpOwotICAgICAgICAgICAgICAgIGNvbW1hbmRzID0gY29tbWFuZExpc3QudG9BcnJheShuZXcgU3RyaW5nW2NvbW1hbmRMaXN0LnNpemUoKV0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGZpbmFsIFByb2Nlc3MgcHJvY2VzcyA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoY29tbWFuZHMpOwotCi0gICAgICAgICAgICAgICAgZmluYWwgSW5wdXRTdHJlYW0gZXJyID0gcHJvY2Vzcy5nZXRFcnJvclN0cmVhbSgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2VuZCBlcnJvciBvdXRwdXQgdG8gc3RkZXJyLgotICAgICAgICAgICAgICAgIFRocmVhZCBlcnJUaHJlYWQgPSBuZXcgVGhyZWFkKCkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29weShlcnIsIFN5c3RlbS5lcnIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICBlcnJUaHJlYWQuc2V0RGFlbW9uKHRydWUpOwotICAgICAgICAgICAgICAgIGVyclRocmVhZC5zdGFydCgpOwotCi0gICAgICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgSW5wdXRTdHJlYW1SZWFkZXIocHJvY2Vzcy5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbi5yZWFkTGluZSgpOwotICAgICAgICAgICAgICAgIGlmIChsaW5lID09IG51bGwgfHwgIWxpbmUuc3RhcnRzV2l0aCgiREVDQUZCQUQsIikpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgYmFkIHJlc3BvbnNlIGZvciAiICsgY2xhc3NOYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiOiAiICsgbGluZSArICI7IGNvbW1hbmQgd2FzICIgKyBBcnJheXMudG9TdHJpbmcoY29tbWFuZHMpKTsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JDb3VudCArPSAxOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0FWQUlMQUJMRTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpbi5jbG9zZSgpOwotICAgICAgICAgICAgICAgIGVyci5jbG9zZSgpOwotICAgICAgICAgICAgICAgIHByb2Nlc3MuZGVzdHJveSgpOyAgICAgICAgICAgICAgICAKLQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWVtb3J5VXNhZ2UobGluZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciBnZXR0aW5nIHN0YXRzIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIGNsYXNzTmFtZSArICIuIik7ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9BVkFJTEFCTEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcGllcyBmcm9tIG9uZSBzdHJlYW0gdG8gYW5vdGhlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNvcHkoSW5wdXRTdHJlYW0gaW4sIE91dHB1dFN0cmVhbSBvdXQpIHsKLSAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjRdOwotICAgICAgICBpbnQgcmVhZDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHdoaWxlICgocmVhZCA9IGluLnJlYWQoYnVmZmVyKSkgPiAtMSkgewotICAgICAgICAgICAgICAgIG91dC53cml0ZShidWZmZXIsIDAsIHJlYWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIE1lYXN1cmVzIG1lbW9yeSB1c2FnZSBpbmZvcm1hdGlvbiBhbmQgc3RvcmVzIGl0IGluIHRoZSBtb2RlbC4gKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24sCi0gICAgICAgICAgICBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgUm9vdCByb290ID0gUm9vdC5mcm9tRmlsZShhcmdzWzBdKTsKLSAgICAgICAgcm9vdC5iYXNlbGluZSA9IGJhc2VsaW5lKCk7Ci0gICAgICAgIGZvciAoTG9hZGVkQ2xhc3MgbG9hZGVkQ2xhc3MgOiByb290LmxvYWRlZENsYXNzZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChsb2FkZWRDbGFzcy5zeXN0ZW1DbGFzcykgewotICAgICAgICAgICAgICAgIGxvYWRlZENsYXNzLm1lYXN1cmVNZW1vcnlVc2FnZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJvb3QudG9GaWxlKGFyZ3NbMF0pOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvT3BlcmF0aW9uLmphdmEgYi90b29scy9wcmVsb2FkL09wZXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjE5MzhlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvT3BlcmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotCi0vKioKLSAqIEFuIG9wZXJhdGlvbiB3aXRoIGEgZHVyYXRpb24uIENvdWxkIHJlcHJlc2VudCBhIGNsYXNzIGxvYWQgb3IgaW5pdGlhbGl6YXRpb24uCi0gKi8KLWNsYXNzIE9wZXJhdGlvbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAwOwotICAgIAotICAgIC8qKgotICAgICAqIFR5cGUgb2Ygb3BlcmF0aW9uLgotICAgICAqLwotICAgIGVudW0gVHlwZSB7Ci0gICAgICAgIExPQUQsIElOSVQKLSAgICB9Ci0KLSAgICAvKiogUHJvY2VzcyB0aGlzIG9wZXJhdGlvbiBvY2N1cnJlZCBpbi4gKi8KLSAgICBmaW5hbCBQcm9jIHByb2Nlc3M7Ci0KLSAgICAvKiogU3RhcnQgdGltZSBmb3IgdGhpcyBvcGVyYXRpb24uICovCi0gICAgZmluYWwgbG9uZyBzdGFydFRpbWVOYW5vczsKLQotICAgIC8qKiBJbmRleCBvZiB0aGlzIG9wZXJhdGlvbiByZWxhdGl2ZSB0byBpdHMgcHJvY2Vzcy4gKi8KLSAgICBmaW5hbCBpbnQgaW5kZXg7Ci0KLSAgICAvKiogVHlwZSBvZiBvcGVyYXRpb24uICovCi0gICAgZmluYWwgVHlwZSB0eXBlOwotCi0gICAgLyoqIEVuZCB0aW1lIGZvciB0aGlzIG9wZXJhdGlvbi4gKi8KLSAgICBsb25nIGVuZFRpbWVOYW5vcyA9IC0xOwotCi0gICAgLyoqIFRoZSBjbGFzcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGxvYWRlZCBvciBpbml0aWFsaXplZC4gKi8KLSAgICBmaW5hbCBMb2FkZWRDbGFzcyBsb2FkZWRDbGFzczsKLQotICAgIC8qKiBPdGhlciBvcGVyYXRpb25zIHRoYXQgb2NjdXJyZWQgZHVyaW5nIHRoaXMgb25lLiAqLwotICAgIGZpbmFsIExpc3Q8T3BlcmF0aW9uPiBzdWJvcHMgPSBuZXcgQXJyYXlMaXN0PE9wZXJhdGlvbj4oKTsKLQotICAgIC8qKiBDb25zdHJ1Y3RzIGEgbmV3IG9wZXJhdGlvbi4gKi8KLSAgICBPcGVyYXRpb24oUHJvYyBwcm9jZXNzLCBMb2FkZWRDbGFzcyBsb2FkZWRDbGFzcywgbG9uZyBzdGFydFRpbWVOYW5vcywKLSAgICAgICAgICAgIGludCBpbmRleCwgVHlwZSB0eXBlKSB7Ci0gICAgICAgIHRoaXMucHJvY2VzcyA9IHByb2Nlc3M7Ci0gICAgICAgIHRoaXMubG9hZGVkQ2xhc3MgPSBsb2FkZWRDbGFzczsKLSAgICAgICAgdGhpcy5zdGFydFRpbWVOYW5vcyA9IHN0YXJ0VGltZU5hbm9zOwotICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7Ci0gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBob3cgbG9uZyB0aGlzIGNsYXNzIGluaXRpYWxpemF0aW9uIGFuZCBhbGwgdGhlIG5lc3RlZCBjbGFzcwotICAgICAqIGluaXRpYWxpemF0aW9ucyB0b29rLgotICAgICAqLwotICAgIHByaXZhdGUgbG9uZyBpbmNsdXNpdmVUaW1lTmFub3MoKSB7Ci0gICAgICAgIGlmIChlbmRUaW1lTmFub3MgPT0gLTEpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkVuZCB0aW1lIGhhc24ndCBiZWVuIHNldCB5ZXQ6ICIKLSAgICAgICAgICAgICAgICAgICAgKyBsb2FkZWRDbGFzcy5uYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBlbmRUaW1lTmFub3MgLSBzdGFydFRpbWVOYW5vczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGhvdyBsb25nIHRoaXMgY2xhc3MgaW5pdGlhbGl6YXRpb24gdG9vay4KLSAgICAgKi8KLSAgICBpbnQgZXhjbHVzaXZlVGltZU1pY3JvcygpIHsKLSAgICAgICAgbG9uZyBleGNsdXNpdmUgPSBpbmNsdXNpdmVUaW1lTmFub3MoKTsKLQotICAgICAgICBmb3IgKE9wZXJhdGlvbiBjaGlsZCA6IHN1Ym9wcykgewotICAgICAgICAgICAgZXhjbHVzaXZlIC09IGNoaWxkLmluY2x1c2l2ZVRpbWVOYW5vcygpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV4Y2x1c2l2ZSA8IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihsb2FkZWRDbGFzcy5uYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBuYW5vc1RvTWljcm9zKGV4Y2x1c2l2ZSk7Ci0gICAgfQotCi0gICAgLyoqIEdldHMgdGhlIG1lZGlhbiB0aW1lIHRoYXQgdGhpcyBvcGVyYXRpb24gdG9vayBhY3Jvc3MgYWxsIHByb2Nlc3Nlcy4gKi8KLSAgICBpbnQgbWVkaWFuRXhjbHVzaXZlVGltZU1pY3JvcygpIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIExPQUQ6IHJldHVybiBsb2FkZWRDbGFzcy5tZWRpYW5Mb2FkVGltZU1pY3JvcygpOwotICAgICAgICAgICAgY2FzZSBJTklUOiByZXR1cm4gbG9hZGVkQ2xhc3MubWVkaWFuSW5pdFRpbWVNaWNyb3MoKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gbWljcm9zZWNvbmRzLgotICAgICAqCi0gICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIG92ZXJmbG93IG9jY3VycwotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGludCBuYW5vc1RvTWljcm9zKGxvbmcgbmFub3MpIHsKLSAgICAgICAgbG9uZyBtaWNyb3MgPSBuYW5vcyAvIDEwMDA7Ci0gICAgICAgIGludCBtaWNyb3NJbnQgPSAoaW50KSBtaWNyb3M7Ci0gICAgICAgIGlmIChtaWNyb3NJbnQgIT0gbWljcm9zKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW50ZWdlciBvdmVyZmxvdzogIiArIG5hbm9zKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbWljcm9zSW50OwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBQcmltYXJpbHkgZm9yIGRlYnVnZ2VyIHN1cHBvcnQKLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgICAgc2IuYXBwZW5kKHR5cGUudG9TdHJpbmcoKSk7Ci0gICAgICAgIHNiLmFwcGVuZCgnICcpOwotICAgICAgICBzYi5hcHBlbmQobG9hZGVkQ2xhc3MudG9TdHJpbmcoKSk7Ci0gICAgICAgIGlmIChzdWJvcHMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgc2IuYXBwZW5kKCIgKCIpOwotICAgICAgICAgICAgc2IuYXBwZW5kKHN1Ym9wcy5zaXplKCkpOwotICAgICAgICAgICAgc2IuYXBwZW5kKCIgc3ViIG9wcykiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvUG9saWN5LmphdmEgYi90b29scy9wcmVsb2FkL1BvbGljeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjQ2ODIwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvUG9saWN5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBQb2xpY3kgdGhhdCBnb3Zlcm5zIHdoaWNoIGNsYXNzZXMgYXJlIHByZWxvYWRlZC4KLSAqLwotcHVibGljIGNsYXNzIFBvbGljeSB7Ci0KLSAgICAvKioKLSAgICAgKiBObyBjb25zdHJ1Y3RvciAtIHVzZSBzdGF0aWMgbWV0aG9kcyBvbmx5Ci0gICAgICovCi0gICAgcHJpdmF0ZSBQb2xpY3koKSB7fQotCi0gICAgLyoqCi0gICAgICogVGhpcyBsb2NhdGlvbiAoaW4gdGhlIGJ1aWxkIHN5c3RlbSkgb2YgdGhlIHByZWxvYWRlZC1jbGFzc2VzIGZpbGUuCi0gICAgICovCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVMT0FERURfQ0xBU1NfRklMRQotICAgICAgICAgICAgPSAiZnJhbWV3b3Jrcy9iYXNlL3ByZWxvYWRlZC1jbGFzc2VzIjsKLQotICAgIC8qKgotICAgICAqIExvbmcgcnVubmluZyBzZXJ2aWNlcy4gVGhlc2UgYXJlIHJlc3RyaWN0ZWQgaW4gdGhlaXIgY29udHJpYnV0aW9uIHRvIHRoZSAKLSAgICAgKiBwcmVsb2FkZXIgYmVjYXVzZSB0aGVpciBsYXVuY2ggdGltZSBpcyBsZXNzIGNyaXRpY2FsLgotICAgICAqLwotICAgIC8vIFRPRE86IEdlbmVyYXRlIHRoaXMgYXV0b21hdGljYWxseSBmcm9tIHBhY2thZ2UgbWFuYWdlci4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTZXQ8U3RyaW5nPiBTRVJWSUNFUyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgInN5c3RlbV9zZXJ2ZXIiLAotICAgICAgICAiY29tLmdvb2dsZS5wcm9jZXNzLmNvbnRlbnQiLAotICAgICAgICAiYW5kcm9pZC5wcm9jZXNzLm1lZGlhIiwKLSAgICAgICAgImNvbS5hbmRyb2lkLmJsdWV0b290aCIsCi0gICAgICAgICJjb20uYW5kcm9pZC5jYWxlbmRhciIsCi0gICAgICAgICJjb20uYW5kcm9pZC5pbnB1dG1ldGhvZC5sYXRpbiIsCi0gICAgICAgICJjb20uYW5kcm9pZC5waG9uZSIsCi0gICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzLkZyaWVuZFNlcnZpY2UiLCAvLyBwcmUgZnJveW8KLSAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5hcHBzLm1hcHM6RnJpZW5kU2VydmljZSIsIC8vIGZyb3lvCi0gICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzLkxvY2F0aW9uRnJpZW5kU2VydmljZSIsCi0gICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuZGVza2Nsb2NrIiwKLSAgICAgICAgImNvbS5nb29nbGUucHJvY2Vzcy5nYXBwcyIsCi0gICAgICAgICJhbmRyb2lkLnR0cyIKLSAgICApKTsKLQotICAgIC8qKgotICAgICAqIENsYXNzZXMgd2hpY2ggd2Ugc2hvdWxkbid0IGxvYWQgZnJvbSB0aGUgWnlnb3RlLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNldDxTdHJpbmc+IEVYQ0xVREVEX0NMQVNTRVMKLSAgICAgICAgICAgID0gbmV3IEhhc2hTZXQ8U3RyaW5nPihBcnJheXMuYXNMaXN0KAotICAgICAgICAvLyBCaW5kZXJzCi0gICAgICAgICJhbmRyb2lkLmFwcC5BbGFybU1hbmFnZXIiLAotICAgICAgICAiYW5kcm9pZC5hcHAuU2VhcmNoTWFuYWdlciIsCi0gICAgICAgICJhbmRyb2lkLm9zLkZpbGVPYnNlcnZlciIsCi0gICAgICAgICJjb20uYW5kcm9pZC5zZXJ2ZXIuUGFja2FnZU1hbmFnZXJTZXJ2aWNlJEFwcERpck9ic2VydmVyIiwKLQotICAgICAgICAvLyBUaHJlYWRzCi0gICAgICAgICJhbmRyb2lkLm9zLkFzeW5jVGFzayIsCi0gICAgICAgICJhbmRyb2lkLnBpbS5Db250YWN0c0FzeW5jSGVscGVyIiwKLSAgICAgICAgImFuZHJvaWQud2Via2l0LldlYlZpZXdDbGFzc2ljJDEiLAotICAgICAgICAiamF2YS5sYW5nLlByb2Nlc3NNYW5hZ2VyIgotICAgICkpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwcm9jZXNzIG5hbWUgaXMgYSAibG9uZyBydW5uaW5nIiBwcm9jZXNzIG9yCi0gICAgICogc2VydmljZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTZXJ2aWNlKFN0cmluZyBwcm9jZXNzTmFtZSkgewotICAgICAgICByZXR1cm4gU0VSVklDRVMuY29udGFpbnMocHJvY2Vzc05hbWUpOwotICAgIH0KLQotICAgIC8qKiBSZXBvcnRzIGlmIHRoZSBnaXZlbiBjbGFzcyBzaG91bGQgYmUgcHJlbG9hZGVkLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ByZWxvYWRhYmxlKExvYWRlZENsYXNzIGNsYXp6KSB7Ci0gICAgICAgIHJldHVybiBjbGF6ei5zeXN0ZW1DbGFzcyAmJiAhRVhDTFVERURfQ0xBU1NFUy5jb250YWlucyhjbGF6ei5uYW1lKQotICAgICAgICAgICAgICAgICYmICFjbGF6ei5uYW1lLmVuZHNXaXRoKCIkTm9QcmVsb2FkSG9sZGVyIik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZC9QcmludENzdi5qYXZhIGIvdG9vbHMvcHJlbG9hZC9QcmludENzdi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODIwODMwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvUHJpbnRDc3YuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotLyoqCi0gKiBQcmludHMgcmF3IGluZm9ybWF0aW9uIGluIENTViBmb3JtYXQuCi0gKi8KLXB1YmxpYyBjbGFzcyBQcmludENzdiB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9IDEpIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IFByaW50Q3N2IFtjb21waWxlZCBsb2cgZmlsZV0iKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwotICAgICAgICB9Ci0KLSAgICAgICAgUm9vdCByb290ID0gUm9vdC5mcm9tRmlsZShhcmdzWzBdKTsKLQotICAgICAgICBwcmludEhlYWRlcnMoU3lzdGVtLm91dCk7Ci0KLSAgICAgICAgTWVtb3J5VXNhZ2UgYmFzZWxpbmUgPSBNZW1vcnlVc2FnZS5iYXNlbGluZSgpOwotCi0gICAgICAgIGZvciAoTG9hZGVkQ2xhc3MgbG9hZGVkQ2xhc3MgOiByb290LmxvYWRlZENsYXNzZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICghbG9hZGVkQ2xhc3Muc3lzdGVtQ2xhc3MpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpbnRSb3coU3lzdGVtLm91dCwgYmFzZWxpbmUsIGxvYWRlZENsYXNzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHByaW50SGVhZGVycyhQcmludFN0cmVhbSBvdXQpIHsKLSAgICAgICAgb3V0LnByaW50bG4oIk5hbWUiCi0gICAgICAgICAgICAgICAgKyAiLFByZWxvYWRlZCIKLSAgICAgICAgICAgICAgICArICIsTWVkaWFuIExvYWQgVGltZSAodXMpIgotICAgICAgICAgICAgICAgICsgIixNZWRpYW4gSW5pdCBUaW1lICh1cykiCi0gICAgICAgICAgICAgICAgKyAiLFByb2Nlc3MgTmFtZXMiCi0gICAgICAgICAgICAgICAgKyAiLExvYWQgQ291bnQiCi0gICAgICAgICAgICAgICAgKyAiLEluaXQgQ291bnQiCi0gICAgICAgICAgICAgICAgKyAiLE1hbmFnZWQgSGVhcCAoQikiCi0gICAgICAgICAgICAgICAgKyAiLE5hdGl2ZSBIZWFwIChCKSIKLSAgICAgICAgICAgICAgICArICIsTWFuYWdlZCBQYWdlcyAoa0IpIgotICAgICAgICAgICAgICAgICsgIixOYXRpdmUgUGFnZXMgKGtCKSIKLSAgICAgICAgICAgICAgICArICIsT3RoZXIgUGFnZXMgKGtCKSIpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHByaW50Um93KFByaW50U3RyZWFtIG91dCwgTWVtb3J5VXNhZ2UgYmFzZWxpbmUsCi0gICAgICAgICAgICBMb2FkZWRDbGFzcyBsb2FkZWRDbGFzcykgewotICAgICAgICBvdXQucHJpbnQobG9hZGVkQ2xhc3MubmFtZSk7Ci0gICAgICAgIG91dC5wcmludCgnLCcpOwotICAgICAgICBvdXQucHJpbnQobG9hZGVkQ2xhc3MucHJlbG9hZGVkKTsKLSAgICAgICAgb3V0LnByaW50KCcsJyk7Ci0gICAgICAgIG91dC5wcmludChsb2FkZWRDbGFzcy5tZWRpYW5Mb2FkVGltZU1pY3JvcygpKTsKLSAgICAgICAgb3V0LnByaW50KCcsJyk7Ci0gICAgICAgIG91dC5wcmludChsb2FkZWRDbGFzcy5tZWRpYW5Jbml0VGltZU1pY3JvcygpKTsKLSAgICAgICAgb3V0LnByaW50KCcsJyk7Ci0gICAgICAgIG91dC5wcmludCgnIicpOwotCi0gICAgICAgIFNldDxTdHJpbmc+IHByb2NOYW1lcyA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKLSAgICAgICAgZm9yIChPcGVyYXRpb24gb3AgOiBsb2FkZWRDbGFzcy5sb2FkcykKLSAgICAgICAgICAgIHByb2NOYW1lcy5hZGQob3AucHJvY2Vzcy5uYW1lKTsKLSAgICAgICAgZm9yIChPcGVyYXRpb24gb3AgOiBsb2FkZWRDbGFzcy5pbml0aWFsaXphdGlvbnMpCi0gICAgICAgICAgICBwcm9jTmFtZXMuYWRkKG9wLnByb2Nlc3MubmFtZSk7Ci0KLSAgICAgICAgaWYgKHByb2NOYW1lcy5zaXplKCkgPD0gMykgewotICAgICAgICAgICAgZm9yIChTdHJpbmcgbmFtZSA6IHByb2NOYW1lcykgewotICAgICAgICAgICAgICAgIG91dC5wcmludChuYW1lICsgIlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJdGVyYXRvcjxTdHJpbmc+IGkgPSBwcm9jTmFtZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIG91dC5wcmludChpLm5leHQoKSArICJcbiIpOwotICAgICAgICAgICAgb3V0LnByaW50KGkubmV4dCgpICsgIlxuIik7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIi4uLmFuZCAiICsgKHByb2NOYW1lcy5zaXplKCkgLSAyKQotICAgICAgICAgICAgICAgICAgICArICIgb3RoZXJzLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0LnByaW50KCciJyk7Ci0gICAgICAgIG91dC5wcmludCgnLCcpOwotICAgICAgICBvdXQucHJpbnQobG9hZGVkQ2xhc3MubG9hZHMuc2l6ZSgpKTsKLSAgICAgICAgb3V0LnByaW50KCcsJyk7Ci0gICAgICAgIG91dC5wcmludChsb2FkZWRDbGFzcy5pbml0aWFsaXphdGlvbnMuc2l6ZSgpKTsKLQotICAgICAgICBpZiAobG9hZGVkQ2xhc3MubWVtb3J5VXNhZ2UuaXNBdmFpbGFibGUoKSkgewotICAgICAgICAgICAgTWVtb3J5VXNhZ2Ugc3VidHJhY3RlZAotICAgICAgICAgICAgICAgICAgICA9IGxvYWRlZENsYXNzLm1lbW9yeVVzYWdlLnN1YnRyYWN0KGJhc2VsaW5lKTsKLQotICAgICAgICAgICAgb3V0LnByaW50KCcsJyk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoc3VidHJhY3RlZC5qYXZhSGVhcFNpemUoKSk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoJywnKTsKLSAgICAgICAgICAgIG91dC5wcmludChzdWJ0cmFjdGVkLm5hdGl2ZUhlYXBTaXplKTsKLSAgICAgICAgICAgIG91dC5wcmludCgnLCcpOwotICAgICAgICAgICAgb3V0LnByaW50KHN1YnRyYWN0ZWQuamF2YVBhZ2VzSW5LKCkpOwotICAgICAgICAgICAgb3V0LnByaW50KCcsJyk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoc3VidHJhY3RlZC5uYXRpdmVQYWdlc0luSygpKTsKLSAgICAgICAgICAgIG91dC5wcmludCgnLCcpOwotICAgICAgICAgICAgb3V0LnByaW50KHN1YnRyYWN0ZWQub3RoZXJQYWdlc0luSygpKTsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb3V0LnByaW50KCIsbi9hLG4vYSxuL2Esbi9hLG4vYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0LnByaW50bG4oKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL1ByaW50SHRtbERpZmYuamF2YSBiL3Rvb2xzL3ByZWxvYWQvUHJpbnRIdG1sRGlmZi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTAxYzg1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvUHJpbnRIdG1sRGlmZi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi0vKioKLSAqIFByaW50cyBIVE1MIGNvbnRhaW5pbmcgcmVtb3ZlZCBhbmQgYWRkZWQgZmlsZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBQcmludEh0bWxEaWZmIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPTERfUFJFTE9BREVEX0NMQVNTRVMKLSAgICAgICAgICAgID0gIm9sZC1wcmVsb2FkZWQtY2xhc3NlcyI7Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24sCi0gICAgICAgICAgICBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgUm9vdCByb290ID0gUm9vdC5mcm9tRmlsZShhcmdzWzBdKTsKLQotICAgICAgICBCdWZmZXJlZFJlYWRlciBvbGRDbGFzc2VzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKAotICAgICAgICAgICAgbmV3IEZpbGVSZWFkZXIoT0xEX1BSRUxPQURFRF9DTEFTU0VTKSk7Ci0KLSAgICAgICAgLy8gQ2xhc3NlcyBsb2FkZWQgaW1wbGljaXRseSBieSB0aGUgenlnb3RlLgotICAgICAgICBTZXQ8TG9hZGVkQ2xhc3M+IHp5Z290ZSA9IG5ldyBIYXNoU2V0PExvYWRlZENsYXNzPigpOwotICAgICAgICBmb3IgKFByb2MgcHJvYyA6IHJvb3QucHJvY2Vzc2VzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAocHJvYy5uYW1lLmVxdWFscygienlnb3RlIikpIHsKLSAgICAgICAgICAgICAgICBmb3IgKE9wZXJhdGlvbiBvcCA6IHByb2Mub3BlcmF0aW9ucykgewotICAgICAgICAgICAgICAgICAgICB6eWdvdGUuYWRkKG9wLmxvYWRlZENsYXNzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTZXQ8TG9hZGVkQ2xhc3M+IHJlbW92ZWQgPSBuZXcgVHJlZVNldDxMb2FkZWRDbGFzcz4oKTsKLSAgICAgICAgU2V0PExvYWRlZENsYXNzPiBhZGRlZCA9IG5ldyBUcmVlU2V0PExvYWRlZENsYXNzPigpOwotCi0gICAgICAgIGZvciAoTG9hZGVkQ2xhc3MgbG9hZGVkQ2xhc3MgOiByb290LmxvYWRlZENsYXNzZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChsb2FkZWRDbGFzcy5wcmVsb2FkZWQgJiYgIXp5Z290ZS5jb250YWlucyhsb2FkZWRDbGFzcykpIHsKLSAgICAgICAgICAgICAgICBhZGRlZC5hZGQobG9hZGVkQ2xhc3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGxpbmU7Ci0gICAgICAgIHdoaWxlICgobGluZSA9IG9sZENsYXNzZXMucmVhZExpbmUoKSkgIT0gbnVsbCkgewotICAgICAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpOwotICAgICAgICAgICAgTG9hZGVkQ2xhc3MgY2xhenogPSByb290LmxvYWRlZENsYXNzZXMuZ2V0KGxpbmUpOwotICAgICAgICAgICAgaWYgKGNsYXp6ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBhZGRlZC5yZW1vdmUoY2xhenopOwotICAgICAgICAgICAgICAgIGlmICghY2xhenoucHJlbG9hZGVkKSByZW1vdmVkLmFkZChjbGF6eik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBQcmludFN0cmVhbSBvdXQgPSBTeXN0ZW0ub3V0OwotCi0gICAgICAgIG91dC5wcmludGxuKCI8aHRtbD48Ym9keT4iKTsKLSAgICAgICAgb3V0LnByaW50bG4oIjxzdHlsZT4iKTsKLSAgICAgICAgb3V0LnByaW50bG4oImEsIHRoLCB0ZCwgaDIgeyBmb250LWZhbWlseTogYXJpYWwgfSIpOwotICAgICAgICBvdXQucHJpbnRsbigidGgsIHRkIHsgZm9udC1zaXplOiBzbWFsbCB9Iik7Ci0gICAgICAgIG91dC5wcmludGxuKCI8L3N0eWxlPiIpOwotICAgICAgICBvdXQucHJpbnRsbigiPHNjcmlwdCBzcmM9XCJzb3J0dGFibGUuanNcIj48L3NjcmlwdD4iKTsKLSAgICAgICAgb3V0LnByaW50bG4oIjxwPjxhIGhyZWY9XCIjcmVtb3ZlZFwiPlJlbW92ZWQ8L2E+Iik7Ci0gICAgICAgIG91dC5wcmludGxuKCI8YSBuYW1lPVwiYWRkZWRcIi8+PGgyPkFkZGVkPC9oMj4iKTsKLSAgICAgICAgcHJpbnRUYWJsZShvdXQsIHJvb3QuYmFzZWxpbmUsIGFkZGVkKTsKLSAgICAgICAgb3V0LnByaW50bG4oIjxhIG5hbWU9XCJyZW1vdmVkXCIvPjxoMj5SZW1vdmVkPC9oMj4iKTsKLSAgICAgICAgcHJpbnRUYWJsZShvdXQsIHJvb3QuYmFzZWxpbmUsIHJlbW92ZWQpOwotICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBwcmludFRhYmxlKFByaW50U3RyZWFtIG91dCwgTWVtb3J5VXNhZ2UgYmFzZWxpbmUsCi0gICAgICAgICAgICBJdGVyYWJsZTxMb2FkZWRDbGFzcz4gY2xhc3NlcykgewotICAgICAgICBvdXQucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1cIjVcIiIKLSAgICAgICAgICAgICAgICArICIgY2xhc3M9XCJzb3J0YWJsZVwiPiIpOwotCi0gICAgICAgIG91dC5wcmludGxuKCI8dGhlYWQ+PHRyPiIpOwotICAgICAgICBvdXQucHJpbnRsbigiPHRoPk5hbWU8L3RoPiIpOwotICAgICAgICBvdXQucHJpbnRsbigiPHRoPkxvYWQgVGltZSAodXMpPC90aD4iKTsKLSAgICAgICAgb3V0LnByaW50bG4oIjx0aD5Mb2FkZWQgQnk8L3RoPiIpOwotICAgICAgICBvdXQucHJpbnRsbigiPHRoPkhlYXAgKEIpPC90aD4iKTsKLSAgICAgICAgb3V0LnByaW50bG4oIjx0aD5QYWdlczwvdGg+Iik7Ci0gICAgICAgIG91dC5wcmludGxuKCI8L3RyPjwvdGhlYWQ+Iik7Ci0KLSAgICAgICAgZm9yIChMb2FkZWRDbGFzcyBjbGF6eiA6IGNsYXNzZXMpIHsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8dHI+Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPHRkPiIgKyBjbGF6ei5uYW1lICsgIjwvdGQ+Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPHRkPiIgKyBjbGF6ei5tZWRpYW5UaW1lTWljcm9zKCkgKyAiPC90ZD4iKTsKLQotICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0ZD4iKTsKLSAgICAgICAgICAgIFNldDxTdHJpbmc+IHByb2NOYW1lcyA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKLSAgICAgICAgICAgIGZvciAoT3BlcmF0aW9uIG9wIDogY2xhenoubG9hZHMpIHByb2NOYW1lcy5hZGQob3AucHJvY2Vzcy5uYW1lKTsKLSAgICAgICAgICAgIGZvciAoT3BlcmF0aW9uIG9wIDogY2xhenouaW5pdGlhbGl6YXRpb25zKSB7Ci0gICAgICAgICAgICAgICAgcHJvY05hbWVzLmFkZChvcC5wcm9jZXNzLm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHByb2NOYW1lcy5zaXplKCkgPD0gMykgewotICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIG5hbWUgOiBwcm9jTmFtZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KG5hbWUgKyAiPGJyLz4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gaSA9IHByb2NOYW1lcy5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgIG91dC5wcmludChpLm5leHQoKSArICI8YnIvPiIpOwotICAgICAgICAgICAgICAgIG91dC5wcmludChpLm5leHQoKSArICI8YnIvPiIpOwotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLi4uYW5kICIgKyAocHJvY05hbWVzLnNpemUoKSAtIDIpCi0gICAgICAgICAgICAgICAgICAgICAgICArICIgb3RoZXJzLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvdGQ+Iik7Ci0KLSAgICAgICAgICAgIGlmIChjbGF6ei5tZW1vcnlVc2FnZS5pc0F2YWlsYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgTWVtb3J5VXNhZ2Ugc3VidHJhY3RlZAotICAgICAgICAgICAgICAgICAgICAgICAgPSBjbGF6ei5tZW1vcnlVc2FnZS5zdWJ0cmFjdChiYXNlbGluZSk7Ci0KLSAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRkPiIgKyAoc3VidHJhY3RlZC5qYXZhSGVhcFNpemUoKQotICAgICAgICAgICAgICAgICAgICAgICAgKyBzdWJ0cmFjdGVkLm5hdGl2ZUhlYXBTaXplKSArICI8L3RkPiIpOwotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGQ+IiArIHN1YnRyYWN0ZWQudG90YWxQYWdlcygpICsgIjwvdGQ+Iik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGQ+bi9hPC90ZD4iKTsgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvdHI+Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBvdXQucHJpbnRsbigiPC90YWJsZT4iKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL1ByaW50UHNUcmVlLmphdmEgYi90b29scy9wcmVsb2FkL1ByaW50UHNUcmVlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNzAxZmEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcHJlbG9hZC9QcmludFBzVHJlZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotCi0vKioKLSAqIFByaW50cyByYXcgaW5mb3JtYXRpb24gaW4gQ1NWIGZvcm1hdC4KLSAqLwotcHVibGljIGNsYXNzIFByaW50UHNUcmVlIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBpZiAoYXJncy5sZW5ndGggIT0gMSkgewotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogUHJpbnRDc3YgW2NvbXBpbGVkIGxvZyBmaWxlXSIpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBGaWxlSW5wdXRTdHJlYW0gZmluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShhcmdzWzBdKTsKLSAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gb2luID0gbmV3IE9iamVjdElucHV0U3RyZWFtKAotICAgICAgICAgICAgICAgIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKGZpbikpOwotCi0gICAgICAgIFJvb3Qgcm9vdCA9IChSb290KSBvaW4ucmVhZE9iamVjdCgpOwotCi0gICAgICAgIGZvciAoUHJvYyBwcm9jIDogcm9vdC5wcm9jZXNzZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChwcm9jLnBhcmVudCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcHJvYy5wcmludCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL1Byb2MuamF2YSBiL3Rvb2xzL3ByZWxvYWQvUHJvYy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTA1MDIxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvUHJvYy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotCi0vKioKLSAqIEEgRGFsdmlrIHByb2Nlc3MuCi0gKi8KLWNsYXNzIFByb2MgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMDsKLQotICAgIC8qKiBQYXJlbnQgcHJvY2Vzcy4gKi8KLSAgICBmaW5hbCBQcm9jIHBhcmVudDsKLQotICAgIC8qKiBQcm9jZXNzIElELiAqLwotICAgIGZpbmFsIGludCBpZDsKLQotICAgIC8qKgotICAgICAqIE5hbWUgb2YgdGhpcyBwcm9jZXNzLiBXZSBtYXkgbm90IGhhdmUgdGhlIGNvcnJlY3QgbmFtZSBhdCBmaXJzdCwgaS5lLgotICAgICAqIHNvbWUgY2xhc3NlcyBjb3VsZCBoYXZlIGJlZW4gbG9hZGVkIGJlZm9yZSB0aGUgcHJvY2VzcyBuYW1lIHdhcyBzZXQuCi0gICAgICovCi0gICAgU3RyaW5nIG5hbWU7Ci0KLSAgICAvKiogQ2hpbGQgcHJvY2Vzc2VzLiAqLwotICAgIGZpbmFsIExpc3Q8UHJvYz4gY2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0PFByb2M+KCk7Ci0KLSAgICAvKiogTWFwcyB0aHJlYWQgSUQgdG8gb3BlcmF0aW9uIHN0YWNrLiAqLwotICAgIHRyYW5zaWVudCBmaW5hbCBNYXA8SW50ZWdlciwgTGlua2VkTGlzdDxPcGVyYXRpb24+PiBzdGFja3MKLSAgICAgICAgICAgID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgTGlua2VkTGlzdDxPcGVyYXRpb24+PigpOwotCi0gICAgLyoqIE51bWJlciBvZiBvcGVyYXRpb25zLiAqLwotICAgIGludCBvcGVyYXRpb25Db3VudDsKLQotICAgIC8qKiBTZXF1ZW50aWFsIGxpc3Qgb2Ygb3BlcmF0aW9ucyB0aGF0IGhhcHBlbmVkIGluIHRoaXMgcHJvY2Vzcy4gKi8KLSAgICBmaW5hbCBMaXN0PE9wZXJhdGlvbj4gb3BlcmF0aW9ucyA9IG5ldyBBcnJheUxpc3Q8T3BlcmF0aW9uPigpOwotCi0gICAgLyoqIExpc3Qgb2YgcGFzdCBwcm9jZXNzIG5hbWVzLiAqLwotICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBuYW1lSGlzdG9yeSA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCi0gICAgLyoqIENvbnN0cnVjdHMgYSBuZXcgcHJvY2Vzcy4gKi8KLSAgICBQcm9jKFByb2MgcGFyZW50LCBpbnQgaWQpIHsKLSAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICB9Ci0KLSAgICAvKiogU2V0cyBuYW1lIG9mIHRoaXMgcHJvY2Vzcy4gKi8KLSAgICB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgaWYgKCFuYW1lLmVxdWFscyh0aGlzLm5hbWUpKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5uYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBuYW1lSGlzdG9yeS5hZGQodGhpcy5uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBwcm9jZXNzIGNvbWVzIGZyb20gdGhlIHp5Z290ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBmcm9tWnlnb3RlKCkgewotICAgICAgICByZXR1cm4gcGFyZW50ICE9IG51bGwgJiYgcGFyZW50Lm5hbWUuZXF1YWxzKCJ6eWdvdGUiKQotICAgICAgICAgICAgICAgICYmICFuYW1lLmVxdWFscygiY29tLmFuZHJvaWQuZGV2ZWxvcG1lbnQiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdGFydHMgYW4gb3BlcmF0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIHRocmVhZElkIHRocmVhZCB0aGUgb3BlcmF0aW9uIHN0YXJ0ZWQgaW4KLSAgICAgKiBAcGFyYW0gbG9hZGVkQ2xhc3MgY2xhc3Mgb3BlcmF0aW9uIGhhcHBlbmVkIHRvCi0gICAgICogQHBhcmFtIHRpbWUgdGhlIG9wZXJhdGlvbiBzdGFydGVkCi0gICAgICovCi0gICAgdm9pZCBzdGFydE9wZXJhdGlvbihpbnQgdGhyZWFkSWQsIExvYWRlZENsYXNzIGxvYWRlZENsYXNzLCBsb25nIHRpbWUsCi0gICAgICAgICAgICBPcGVyYXRpb24uVHlwZSB0eXBlKSB7Ci0gICAgICAgIE9wZXJhdGlvbiBvID0gbmV3IE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICB0aGlzLCBsb2FkZWRDbGFzcywgdGltZSwgb3BlcmF0aW9uQ291bnQrKywgdHlwZSk7Ci0gICAgICAgIG9wZXJhdGlvbnMuYWRkKG8pOwotCi0gICAgICAgIExpbmtlZExpc3Q8T3BlcmF0aW9uPiBzdGFjayA9IHN0YWNrcy5nZXQodGhyZWFkSWQpOwotICAgICAgICBpZiAoc3RhY2sgPT0gbnVsbCkgewotICAgICAgICAgICAgc3RhY2sgPSBuZXcgTGlua2VkTGlzdDxPcGVyYXRpb24+KCk7Ci0gICAgICAgICAgICBzdGFja3MucHV0KHRocmVhZElkLCBzdGFjayk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgc3RhY2suZ2V0TGFzdCgpLnN1Ym9wcy5hZGQobyk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGFjay5hZGQobyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRW5kcyBhbiBvcGVyYXRpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdGhyZWFkSWQgdGhyZWFkIHRoZSBvcGVyYXRpb24gZW5kZWQgaW4KLSAgICAgKiBAcGFyYW0gbG9hZGVkQ2xhc3MgY2xhc3Mgb3BlcmF0aW9uIGhhcHBlbmVkIHRvCi0gICAgICogQHBhcmFtIHRpbWUgdGhlIG9wZXJhdGlvbiBlbmRlZAotICAgICAqLwotICAgIE9wZXJhdGlvbiBlbmRPcGVyYXRpb24oaW50IHRocmVhZElkLCBTdHJpbmcgY2xhc3NOYW1lLAotICAgICAgICAgICAgTG9hZGVkQ2xhc3MgbG9hZGVkQ2xhc3MsIGxvbmcgdGltZSkgewotICAgICAgICBMaW5rZWRMaXN0PE9wZXJhdGlvbj4gc3RhY2sgPSBzdGFja3MuZ2V0KHRocmVhZElkKTsKLQotICAgICAgICBpZiAoc3RhY2sgPT0gbnVsbCB8fCBzdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGRpZE5vdFN0YXJ0KGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIE9wZXJhdGlvbiBvID0gc3RhY2suZ2V0TGFzdCgpOwotICAgICAgICBpZiAobG9hZGVkQ2xhc3MgIT0gby5sb2FkZWRDbGFzcykgewotICAgICAgICAgICAgZGlkTm90U3RhcnQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotCi0gICAgICAgIG8uZW5kVGltZU5hbm9zID0gdGltZTsKLSAgICAgICAgcmV0dXJuIG87Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJpbnRzIGFuIGVycm9yIGluZGljYXRpbmcgdGhhdCB3ZSBzYXcgdGhlIGVuZCBvZiBhbiBvcGVyYXRpb24gYnV0IG5vdAotICAgICAqIHRoZSBzdGFydC4gQSBidWcgaW4gdGhlIGxvZ2dpbmcgZnJhbWV3b3JrIHdoaWNoIHJlc3VsdHMgaW4gZHJvcHBlZCBsb2dzCi0gICAgICogY2F1c2VzIHRoaXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkaWROb3RTdGFydChTdHJpbmcgbmFtZSkgewotICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldhcm5pbmc6IEFuIG9wZXJhdGlvbiBlbmRlZCBvbiAiICsgbmFtZQotICAgICAgICAgICAgKyAiIGJ1dCBpdCBuZXZlciBzdGFydGVkISIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByaW50cyB0aGlzIHByb2Nlc3MgdHJlZSB0byBzdGRvdXQuCi0gICAgICovCi0gICAgdm9pZCBwcmludCgpIHsKLSAgICAgICAgcHJpbnQoIiIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByaW50cyBhIGNoaWxkIHByb2MgdG8gc3RhbmRhcmQgb3V0LgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBwcmludChTdHJpbmcgcHJlZml4KSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwcmVmaXggKyAiaWQ9IiArIGlkICsgIiwgbmFtZT0iICsgbmFtZSk7Ci0gICAgICAgIGZvciAoUHJvYyBjaGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgICAgICAgICBjaGlsZC5wcmludChwcmVmaXggKyAiICAgICIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubmFtZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL1JlY29yZC5qYXZhIGIvdG9vbHMvcHJlbG9hZC9SZWNvcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBhMmFmNC4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkL1JlY29yZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIE9uZSBsaW5lIGZyb20gdGhlIGxvYWRlZC1jbGFzc2VzIGZpbGUuCi0gKi8KLWNsYXNzIFJlY29yZCB7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgZGVsaW1pdGVyIGNoYXJhY3RlciB3ZSB1c2UsIHtAY29kZSA6fSwgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlcgotICAgICAqIG5hbWVzLiBJbiB0aGF0IGNhc2UsIG1hbnVhbGx5IHJlcGxhY2UgdGhlIGRlbGltaXRlciB3aXRoIHNvbWV0aGluZyBlbHNlLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFJFUExBQ0VfQ0xBU1NFUyA9IHsKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzOkZyaWVuZFNlcnZpY2UiLAotICAgICAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5hcHBzLm1hcHNcXHUwMDNBRnJpZW5kU2VydmljZSIsCi0gICAgICAgICAgICAiY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMubWFwczpkcml2ZWFib3V0IiwKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzXFx1MDAzQWRyaXZlYWJvdXQiLAotICAgICAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5hcHBzLm1hcHM6R29vZ2xlTG9jYXRpb25TZXJ2aWNlIiwKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzXFx1MDAzQUdvb2dsZUxvY2F0aW9uU2VydmljZSIsCi0gICAgICAgICAgICAiY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMubWFwczpMb2NhdGlvbkZyaWVuZFNlcnZpY2UiLAotICAgICAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5hcHBzLm1hcHNcXHUwMDNBTG9jYXRpb25GcmllbmRTZXJ2aWNlIiwKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzOk1hcHNCYWNrZ3JvdW5kU2VydmljZSIsCi0gICAgICAgICAgICAiY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMubWFwc1xcdTAwM0FNYXBzQmFja2dyb3VuZFNlcnZpY2UiLAotICAgICAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5hcHBzLm1hcHM6TmV0d29ya0xvY2F0aW9uU2VydmljZSIsCi0gICAgICAgICAgICAiY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMubWFwc1xcdTAwM0FOZXR3b3JrTG9jYXRpb25TZXJ2aWNlIiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5jaHJvbWU6c2FuZGJveGVkX3Byb2Nlc3MiLAotICAgICAgICAgICAgImNvbS5hbmRyb2lkLmNocm9tZVxcdTAwM0FzYW5kYm94ZWRfcHJvY2VzcyIsCi0gICAgICAgICAgICAiY29tLmFuZHJvaWQuZmFrZW9lbWZlYXR1cmVzOmJhY2tncm91bmQiLAotICAgICAgICAgICAgImNvbS5hbmRyb2lkLmZha2VvZW1mZWF0dXJlc1xcdTAwM0FiYWNrZ3JvdW5kIiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5mYWtlb2VtZmVhdHVyZXM6Y29yZSIsCi0gICAgICAgICAgICAiY29tLmFuZHJvaWQuZmFrZW9lbWZlYXR1cmVzXFx1MDAzQWNvcmUiLAotICAgICAgICAgICAgImNvbS5hbmRyb2lkLmxhdW5jaGVyOndhbGxwYXBlcl9jaG9vc2VyIiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5sYXVuY2hlclxcdTAwM0F3YWxscGFwZXJfY2hvb3NlciIsCi0gICAgICAgICAgICAiY29tLmFuZHJvaWQubmZjOmhhbmRvdmVyIiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5uZmNcXHUwMDNBaGFuZG92ZXIiLAotICAgICAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5tdXNpYzptYWluIiwKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQubXVzaWNcXHUwMDNBbWFpbiIsCi0gICAgICAgICAgICAiY29tLmdvb2dsZS5hbmRyb2lkLm11c2ljOnVpIiwKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQubXVzaWNcXHUwMDNBdWkiLAotICAgICAgICAgICAgImNvbS5nb29nbGUuYW5kcm9pZC5zZXR1cHdhcmxvY2s6YnJva2VyIiwKLSAgICAgICAgICAgICJjb20uZ29vZ2xlLmFuZHJvaWQuc2V0dXB3YXJsb2NrXFx1MDAzQWJyb2tlciIsCi0gICAgICAgICAgICAibW9iaS5tZ2Vlay5UdW5ueUJyb3dzZXI6RG9scGhpbk5vdGlmaWNhdGlvbiIsCi0gICAgICAgICAgICAibW9iaS5tZ2Vlay5UdW5ueUJyb3dzZXJcXHUwMDNBRG9scGhpbk5vdGlmaWNhdGlvbiIsCi0gICAgICAgICAgICAiY29tLnFvLmFuZHJvaWQuc3Aub2VtOlF1aWNrd29yZCIsCi0gICAgICAgICAgICAiY29tLnFvLmFuZHJvaWQuc3Aub2VtXFx1MDAzQVF1aWNrd29yZCIsCi0gICAgICAgICAgICAiYW5kcm9pZDp1aSIsCi0gICAgICAgICAgICAiYW5kcm9pZFxcdTAwM0F1aSIsCi0gICAgICAgICAgICAic3lzdGVtOnVpIiwKLSAgICAgICAgICAgICJzeXN0ZW1cXHUwMDNBdWkiLAotICAgIH07Ci0KLSAgICBlbnVtIFR5cGUgewotICAgICAgICAvKiogU3RhcnQgb2YgaW5pdGlhbGl6YXRpb24uICovCi0gICAgICAgIFNUQVJUX0xPQUQsCi0KLSAgICAgICAgLyoqIEVuZCBvZiBpbml0aWFsaXphdGlvbi4gKi8KLSAgICAgICAgRU5EX0xPQUQsCi0KLSAgICAgICAgLyoqIFN0YXJ0IG9mIGluaXRpYWxpemF0aW9uLiAqLwotICAgICAgICBTVEFSVF9JTklULAotCi0gICAgICAgIC8qKiBFbmQgb2YgaW5pdGlhbGl6YXRpb24uICovCi0gICAgICAgIEVORF9JTklUCi0gICAgfQotCi0gICAgLyoqIFBhcmVudCBwcm9jZXNzIElELiAqLwotICAgIGZpbmFsIGludCBwcGlkOwotCi0gICAgLyoqIFByb2Nlc3MgSUQuICovCi0gICAgZmluYWwgaW50IHBpZDsKLQotICAgIC8qKiBUaHJlYWQgSUQuICovCi0gICAgZmluYWwgaW50IHRpZDsKLQotICAgIC8qKiBQcm9jZXNzIG5hbWUuICovCi0gICAgZmluYWwgU3RyaW5nIHByb2Nlc3NOYW1lOwotCi0gICAgLyoqIENsYXNzIGxvYWRlciBwb2ludGVyLiAqLwotICAgIGZpbmFsIGludCBjbGFzc0xvYWRlcjsKLQotICAgIC8qKiBUeXBlIG9mIHJlY29yZC4gKi8KLSAgICBmaW5hbCBUeXBlIHR5cGU7Ci0KLSAgICAvKiogTmFtZSBvZiBsb2FkZWQgY2xhc3MuICovCi0gICAgZmluYWwgU3RyaW5nIGNsYXNzTmFtZTsKLQotICAgIC8qKiBSZWNvcmQgdGltZSAobnMpLiAqLwotICAgIGZpbmFsIGxvbmcgdGltZTsKLQotICAgIC8qKiBTb3VyY2UgZmlsZSBsaW5lIyAqLwotICAgIGludCBzb3VyY2VMaW5lTnVtYmVyOwotCi0gICAgLyoqCi0gICAgICogUGFyc2VzIGEgbGluZSBmcm9tIHRoZSBsb2FkZWQtY2xhc3NlcyBmaWxlLgotICAgICAqLwotICAgIFJlY29yZChTdHJpbmcgbGluZSwgaW50IGxpbmVOdW0pIHsKLSAgICAgICAgY2hhciB0eXBlQ2hhciA9IGxpbmUuY2hhckF0KDApOwotICAgICAgICBzd2l0Y2ggKHR5cGVDaGFyKSB7Ci0gICAgICAgICAgICBjYXNlICc+JzogdHlwZSA9IFR5cGUuU1RBUlRfTE9BRDsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICc8JzogdHlwZSA9IFR5cGUuRU5EX0xPQUQ7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnKyc6IHR5cGUgPSBUeXBlLlNUQVJUX0lOSVQ7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnLSc6IHR5cGUgPSBUeXBlLkVORF9JTklUOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiQmFkIGxpbmU6ICIgKyBsaW5lKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNvdXJjZUxpbmVOdW1iZXIgPSBsaW5lTnVtOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUkVQTEFDRV9DTEFTU0VTLmxlbmd0aDsgaSs9IDIpIHsKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoUkVQTEFDRV9DTEFTU0VTW2ldLCBSRVBMQUNFX0NMQVNTRVNbaSsxXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoMSk7Ci0gICAgICAgIFN0cmluZ1tdIHBhcnRzID0gbGluZS5zcGxpdCgiOiIpOwotCi0gICAgICAgIHBwaWQgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnRzWzBdKTsKLSAgICAgICAgcGlkID0gSW50ZWdlci5wYXJzZUludChwYXJ0c1sxXSk7Ci0gICAgICAgIHRpZCA9IEludGVnZXIucGFyc2VJbnQocGFydHNbMl0pOwotCi0gICAgICAgIHByb2Nlc3NOYW1lID0gZGVjb2RlKHBhcnRzWzNdKS5pbnRlcm4oKTsKLQotICAgICAgICBjbGFzc0xvYWRlciA9IEludGVnZXIucGFyc2VJbnQocGFydHNbNF0pOwotICAgICAgICBjbGFzc05hbWUgPSB2bVR5cGVUb0xhbmd1YWdlKGRlY29kZShwYXJ0c1s1XSkpLmludGVybigpOwotCi0gICAgICAgIHRpbWUgPSBMb25nLnBhcnNlTG9uZyhwYXJ0c1s2XSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGVjb2RlIGFueSBlc2NhcGluZyB0aGF0IG1heSBoYXZlIGJlZW4gd3JpdHRlbiB0byB0aGUgbG9nIGxpbmUuCi0gICAgICoKLSAgICAgKiBTdXBwb3J0cyB1bmljb2RlLXN0eWxlIGVzY2FwaW5nOiAgXFx1WFhYWCA9IGNoYXJhY3RlciBpbiBoZXgKLSAgICAgKgotICAgICAqIEBwYXJhbSByYXdGaWVsZCB0aGUgZmllbGQgYXMgaXQgd2FzIHdyaXR0ZW4gaW50byB0aGUgbG9nCi0gICAgICogQHJlc3VsdCB0aGUgc2FtZSBmaWVsZCB3aXRoIGFueSBlc2NhcGVkIGNoYXJhY3RlcnMgcmVwbGFjZWQKLSAgICAgKi8KLSAgICBTdHJpbmcgZGVjb2RlKFN0cmluZyByYXdGaWVsZCkgewotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcmF3RmllbGQ7Ci0gICAgICAgIGludCBvZmZzZXQgPSByZXN1bHQuaW5kZXhPZigiXFx1Iik7Ci0gICAgICAgIHdoaWxlIChvZmZzZXQgPj0gMCkgewotICAgICAgICAgICAgU3RyaW5nIGJlZm9yZSA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIFN0cmluZyBlc2NhcGVkID0gcmVzdWx0LnN1YnN0cmluZyhvZmZzZXQrMiwgb2Zmc2V0KzYpOwotICAgICAgICAgICAgU3RyaW5nIGFmdGVyID0gcmVzdWx0LnN1YnN0cmluZyhvZmZzZXQrNik7Ci0KLSAgICAgICAgICAgIHJlc3VsdCA9IFN0cmluZy5mb3JtYXQoIiVzJWMlcyIsIGJlZm9yZSwgSW50ZWdlci5wYXJzZUludChlc2NhcGVkLCAxNiksIGFmdGVyKTsKLQotICAgICAgICAgICAgLy8gZmluZCBhbm90aGVyIGJ1dCBkb24ndCByZWN1cnNlCi0gICAgICAgICAgICBvZmZzZXQgPSByZXN1bHQuaW5kZXhPZigiXFx1Iiwgb2Zmc2V0ICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb252ZXJ0cyBhIFZNLXN0eWxlIG5hbWUgdG8gYSBsYW5ndWFnZS1zdHlsZSBuYW1lLgotICAgICAqLwotICAgIFN0cmluZyB2bVR5cGVUb0xhbmd1YWdlKFN0cmluZyB0eXBlTmFtZSkgewotICAgICAgICAvLyBpZiB0aGUgdHlwZW5hbWUgaXMgKG51bGwpLCBqdXN0IHJldHVybiBpdCBhcy1pcy4gIFRoaXMgaXMgcHJvYmFibHkgaW4gZGV4b3B0IGFuZAotICAgICAgICAvLyB3aWxsIGJlIGRpc2NhcmRlZCBhbnl3YXkuICBOT1RFOiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBjYXNlIGluIGRhbHZpay92bS9vby9DbGFzcy5jCi0gICAgICAgIC8vIHdoZXJlIGR2bUxpbmtDbGFzcygpIHJldHVybnMgZmFsc2UgYW5kIHdlIGNsZWFuIHVwIGFuZCBleGl0LgotICAgICAgICBpZiAoIihudWxsKSIuZXF1YWxzKHR5cGVOYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIHR5cGVOYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF0eXBlTmFtZS5zdGFydHNXaXRoKCJMIikgfHwgIXR5cGVOYW1lLmVuZHNXaXRoKCI7IikgKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkJhZCBuYW1lOiAiICsgdHlwZU5hbWUgKyAiIGluIGxpbmUgIiArIHNvdXJjZUxpbmVOdW1iZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZS5zdWJzdHJpbmcoMSwgdHlwZU5hbWUubGVuZ3RoKCkgLSAxKTsKLSAgICAgICAgcmV0dXJuIHR5cGVOYW1lLnJlcGxhY2UoIi8iLCAiLiIpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvUm9vdC5qYXZhIGIvdG9vbHMvcHJlbG9hZC9Sb290LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYzI5YmYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcHJlbG9hZC9Sb290LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotCi0vKioKLSAqIFJvb3Qgb2Ygb3VyIGRhdGEgbW9kZWwuCi0gKi8KLXB1YmxpYyBjbGFzcyBSb290IGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDA7Ci0KLSAgICAvKiogcGlkIC0+IFByb2MgKi8KLSAgICBmaW5hbCBNYXA8SW50ZWdlciwgUHJvYz4gcHJvY2Vzc2VzID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgUHJvYz4oKTsKLQotICAgIC8qKiBDbGFzcyBuYW1lIC0+IExvYWRlZENsYXNzICovCi0gICAgZmluYWwgTWFwPFN0cmluZywgTG9hZGVkQ2xhc3M+IGxvYWRlZENsYXNzZXMKLSAgICAgICAgICAgID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMb2FkZWRDbGFzcz4oKTsKLQotICAgIE1lbW9yeVVzYWdlIGJhc2VsaW5lID0gTWVtb3J5VXNhZ2UuYmFzZWxpbmUoKTsKLQotICAgIC8qKgotICAgICAqIFJlY29yZHMgY2xhc3MgbG9hZHMgYW5kIGluaXRpYWxpemF0aW9ucy4KLSAgICAgKi8KLSAgICB2b2lkIGluZGV4Q2xhc3NPcGVyYXRpb24oUmVjb3JkIHJlY29yZCkgewotICAgICAgICBQcm9jIHByb2Nlc3MgPSBwcm9jZXNzZXMuZ2V0KHJlY29yZC5waWQpOwotCi0gICAgICAgIC8vIElnbm9yZSBkZXhvcHQgb3V0cHV0LiBJdCBsb2FkcyBhcHBsaWNhdGlvbnMgY2xhc3NlcyB0aHJvdWdoIHRoZQotICAgICAgICAvLyBzeXN0ZW0gY2xhc3MgbG9hZGVyIGFuZCBtZXNzZXMgdXMgdXAuCi0gICAgICAgIGlmIChyZWNvcmQucHJvY2Vzc05hbWUuZXF1YWxzKCJkZXhvcHQiKSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUgPSByZWNvcmQuY2xhc3NOYW1lOwotICAgICAgICBMb2FkZWRDbGFzcyBsb2FkZWRDbGFzcyA9IGxvYWRlZENsYXNzZXMuZ2V0KG5hbWUpOwotICAgICAgICBPcGVyYXRpb24gbyA9IG51bGw7Ci0KLSAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewotICAgICAgICAgICAgY2FzZSBTVEFSVF9MT0FEOgotICAgICAgICAgICAgY2FzZSBTVEFSVF9JTklUOgotICAgICAgICAgICAgICAgIGlmIChsb2FkZWRDbGFzcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRlZENsYXNzID0gbmV3IExvYWRlZENsYXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHJlY29yZC5jbGFzc0xvYWRlciA9PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRlZENsYXNzLnN5c3RlbUNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IG1lYXN1cmUgbWVtb3J5IGZvciBjbGFzc2VzIGluIHRoZSBib290Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjbGFzc3BhdGguCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRDbGFzcy5tZWFzdXJlTWVtb3J5VXNhZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBsb2FkZWRDbGFzc2VzLnB1dChuYW1lLCBsb2FkZWRDbGFzcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEVORF9MT0FEOgotICAgICAgICAgICAgY2FzZSBFTkRfSU5JVDoKLSAgICAgICAgICAgICAgICBvID0gcHJvY2Vzcy5lbmRPcGVyYXRpb24ocmVjb3JkLnRpZCwgcmVjb3JkLmNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZENsYXNzLCByZWNvcmQudGltZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG8gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewotICAgICAgICAgICAgY2FzZSBTVEFSVF9MT0FEOgotICAgICAgICAgICAgICAgIHByb2Nlc3Muc3RhcnRPcGVyYXRpb24ocmVjb3JkLnRpZCwgbG9hZGVkQ2xhc3MsIHJlY29yZC50aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlR5cGUuTE9BRCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU1RBUlRfSU5JVDoKLSAgICAgICAgICAgICAgICBwcm9jZXNzLnN0YXJ0T3BlcmF0aW9uKHJlY29yZC50aWQsIGxvYWRlZENsYXNzLCByZWNvcmQudGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5UeXBlLklOSVQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEVORF9MT0FEOgotICAgICAgICAgICAgICAgIGxvYWRlZENsYXNzLmxvYWRzLmFkZChvKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBFTkRfSU5JVDoKLSAgICAgICAgICAgICAgICBsb2FkZWRDbGFzcy5pbml0aWFsaXphdGlvbnMuYWRkKG8pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5kZXhlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBnaXZlbiByZWNvcmQuCi0gICAgICovCi0gICAgdm9pZCBpbmRleFByb2Nlc3MoUmVjb3JkIHJlY29yZCkgewotICAgICAgICBQcm9jIHByb2MgPSBwcm9jZXNzZXMuZ2V0KHJlY29yZC5waWQpOwotCi0gICAgICAgIGlmIChwcm9jID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwcm9jZXNzIG9iamVjdC4KLSAgICAgICAgICAgIFByb2MgcGFyZW50ID0gcHJvY2Vzc2VzLmdldChyZWNvcmQucHBpZCk7Ci0gICAgICAgICAgICBwcm9jID0gbmV3IFByb2MocGFyZW50LCByZWNvcmQucGlkKTsKLSAgICAgICAgICAgIHByb2Nlc3Nlcy5wdXQocHJvYy5pZCwgcHJvYyk7Ci0gICAgICAgICAgICBpZiAocGFyZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4uYWRkKHByb2MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJvYy5zZXROYW1lKHJlY29yZC5wcm9jZXNzTmFtZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV3JpdGVzIHRoaXMgZ3JhcGggdG8gYSBmaWxlLgotICAgICAqLwotICAgIHZvaWQgdG9GaWxlKFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlTmFtZSk7Ci0gICAgICAgIE9iamVjdE91dHB1dFN0cmVhbSBvb3V0ID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbSgKLSAgICAgICAgICAgICAgICBuZXcgQnVmZmVyZWRPdXRwdXRTdHJlYW0ob3V0KSk7Ci0KLSAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcml0aW5nIG9iamVjdCBtb2RlbC4uLiIpOwotCi0gICAgICAgIG9vdXQud3JpdGVPYmplY3QodGhpcyk7Ci0KLSAgICAgICAgb291dC5jbG9zZSgpOwotCi0gICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRG9uZSEiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWFkcyBSb290IGZyb20gYSBmaWxlLgotICAgICAqLwotICAgIHN0YXRpYyBSb290IGZyb21GaWxlKFN0cmluZyBmaWxlTmFtZSkKLSAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGVOYW1lKTsKLSAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gb2luID0gbmV3IE9iamVjdElucHV0U3RyZWFtKAotICAgICAgICAgICAgICAgIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKGZpbikpOwotCi0gICAgICAgIFJvb3Qgcm9vdCA9IChSb290KSBvaW4ucmVhZE9iamVjdCgpOwotCi0gICAgICAgIG9pbi5jbG9zZSgpOwotCi0gICAgICAgIHJldHVybiByb290OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvV3JpdGVQcmVsb2FkZWRDbGFzc0ZpbGUuamF2YSBiL3Rvb2xzL3ByZWxvYWQvV3JpdGVQcmVsb2FkZWRDbGFzc0ZpbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA2N2JjMi4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkL1dyaXRlUHJlbG9hZGVkQ2xhc3NGaWxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotCi0vKioKLSAqIFdyaXRlcyAvZnJhbWV3b3Jrcy9iYXNlL3ByZWxvYWRlZC1jbGFzc2VzLiBBbHNvIHVwZGF0ZXMKLSAqIHtAbGluayBMb2FkZWRDbGFzcyNwcmVsb2FkZWR9IGZpZWxkcyBhbmQgd3JpdGVzIG92ZXIgY29tcGlsZWQgbG9nIGZpbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBXcml0ZVByZWxvYWRlZENsYXNzRmlsZSB7Ci0KLSAgICAvKioKLSAgICAgKiBQcmVsb2FkIGFueSBjbGFzcyB0aGF0IHRha2UgbG9uZ2VyIHRvIGxvYWQgdGhhbiBNSU5fTE9BRF9USU1FX01JQ1JPUyB1cy4KLSAgICAgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IE1JTl9MT0FEX1RJTUVfTUlDUk9TID0gMTI1MDsKLQotICAgIC8qKgotICAgICAqIFByZWxvYWQgYW55IGNsYXNzIHRoYXQgd2FzIGxvYWRlZCBieSBhdCBsZWFzdCBNSU5fUFJPQ0VTU0VTIHByb2Nlc3Nlcy4KLSAgICAgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IE1JTl9QUk9DRVNTRVMgPSAxMDsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiwKLSAgICAgICAgICAgIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBpZiAoYXJncy5sZW5ndGggIT0gMSkgewotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogV3JpdGVQcmVsb2FkZWRDbGFzc0ZpbGUgW2NvbXBpbGVkIGxvZ10iKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgcm9vdEZpbGUgPSBhcmdzWzBdOwotICAgICAgICBSb290IHJvb3QgPSBSb290LmZyb21GaWxlKHJvb3RGaWxlKTsKLQotICAgICAgICAvLyBObyBjbGFzc2VzIGFyZSBwcmVsb2FkZWQgdG8gc3RhcnQuCi0gICAgICAgIGZvciAoTG9hZGVkQ2xhc3MgbG9hZGVkQ2xhc3MgOiByb290LmxvYWRlZENsYXNzZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGxvYWRlZENsYXNzLnByZWxvYWRlZCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT3BlbiBwcmVsb2FkZWQtY2xhc3NlcyBmaWxlIGZvciBvdXRwdXQuCi0gICAgICAgIFdyaXRlciBvdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcigKLSAgICAgICAgICAgICAgICBuZXcgRmlsZU91dHB1dFN0cmVhbShQb2xpY3kuUFJFTE9BREVEX0NMQVNTX0ZJTEUpLAotICAgICAgICAgICAgICAgIENoYXJzZXQuZm9yTmFtZSgiVVMtQVNDSUkiKSkpOwotCi0gICAgICAgIG91dC53cml0ZSgiIyBDbGFzc2VzIHdoaWNoIGFyZSBwcmVsb2FkZWQgYnkiCi0gICAgICAgICAgICAgICAgKyAiIGNvbS5hbmRyb2lkLmludGVybmFsLm9zLlp5Z290ZUluaXQuXG4iKTsKLSAgICAgICAgb3V0LndyaXRlKCIjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGZyYW1ld29ya3MvYmFzZS90b29scy9wcmVsb2FkLyIKLSAgICAgICAgICAgICsgV3JpdGVQcmVsb2FkZWRDbGFzc0ZpbGUuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi5qYXZhLlxuIik7Ci0gICAgICAgIG91dC53cml0ZSgiIyBNSU5fTE9BRF9USU1FX01JQ1JPUz0iICsgTUlOX0xPQURfVElNRV9NSUNST1MgKyAiXG4iKTsKLSAgICAgICAgb3V0LndyaXRlKCIjIE1JTl9QUk9DRVNTRVM9IiArIE1JTl9QUk9DRVNTRVMgKyAiXG4iKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGUgc2V0IG9mIGNsYXNzZXMgdG8gcHJlbG9hZC4gV2UgcHJlbG9hZCBhIGNsYXNzIGlmOgotICAgICAgICAgKgotICAgICAgICAgKiAgYSkgaXQncyBsb2FkZWQgaW4gdGhlIGJvb3RjbGFzc3BhdGggKGkuZS4sIGlzIGEgc3lzdGVtIGNsYXNzKQotICAgICAgICAgKiAgYikgaXQgdGFrZXMgPiBNSU5fTE9BRF9USU1FX01JQ1JPUyB1cyB0byBsb2FkLCBhbmQKLSAgICAgICAgICogIGMpIGl0J3MgbG9hZGVkIGJ5IG1vcmUgdGhhbiBvbmUgcHJvY2Vzcywgb3IgaXQncyBsb2FkZWQgYnkgYW4KLSAgICAgICAgICogICAgIGFwcGxpY2F0aW9uIChpLmUuLCBub3QgYSBsb25nIHJ1bm5pbmcgc2VydmljZSkKLSAgICAgICAgICovCi0gICAgICAgIFNldDxMb2FkZWRDbGFzcz4gdG9QcmVsb2FkID0gbmV3IFRyZWVTZXQ8TG9hZGVkQ2xhc3M+KCk7Ci0KLSAgICAgICAgLy8gUHJlbG9hZCBjbGFzc2VzIHRoYXQgd2VyZSBsb2FkZWQgYnkgYXQgbGVhc3QgMiBwcm9jZXNzZXMuIEhvcGVmdWxseSwKLSAgICAgICAgLy8gdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlc2UgY2xhc3NlcyB3aWxsIGJlIHNoYXJlZC4KLSAgICAgICAgZm9yIChMb2FkZWRDbGFzcyBsb2FkZWRDbGFzcyA6IHJvb3QubG9hZGVkQ2xhc3Nlcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgU2V0PFN0cmluZz4gbmFtZXMgPSBsb2FkZWRDbGFzcy5wcm9jZXNzTmFtZXMoKTsKLSAgICAgICAgICAgIGlmICghUG9saWN5LmlzUHJlbG9hZGFibGUobG9hZGVkQ2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChuYW1lcy5zaXplKCkgPj0gTUlOX1BST0NFU1NFUyB8fAotICAgICAgICAgICAgICAgICAgICAobG9hZGVkQ2xhc3MubWVkaWFuVGltZU1pY3JvcygpID4gTUlOX0xPQURfVElNRV9NSUNST1MgJiYgbmFtZXMuc2l6ZSgpID4gMSkpIHsKLSAgICAgICAgICAgICAgICB0b1ByZWxvYWQuYWRkKGxvYWRlZENsYXNzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGludCBpbml0aWFsU2l6ZSA9IHRvUHJlbG9hZC5zaXplKCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbml0aWFsU2l6ZQotICAgICAgICAgICAgICAgICsgIiBjbGFzc3NlcyB3ZXJlIGxvYWRlZCBieSBtb3JlIHRoYW4gb25lIGFwcC4iKTsKLQotICAgICAgICAvLyBQcmVsb2FkIGVsaWdhYmxlIGNsYXNzZXMgZnJvbSBhcHBsaWNhdGlvbnMgKG5vdCBsb25nLXJ1bm5pbmcKLSAgICAgICAgLy8gc2VydmljZXMpLgotICAgICAgICBmb3IgKFByb2MgcHJvYyA6IHJvb3QucHJvY2Vzc2VzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAocHJvYy5mcm9tWnlnb3RlKCkgJiYgIVBvbGljeS5pc1NlcnZpY2UocHJvYy5uYW1lKSkgewotICAgICAgICAgICAgICAgIGZvciAoT3BlcmF0aW9uIG9wZXJhdGlvbiA6IHByb2Mub3BlcmF0aW9ucykgewotICAgICAgICAgICAgICAgICAgICBMb2FkZWRDbGFzcyBsb2FkZWRDbGFzcyA9IG9wZXJhdGlvbi5sb2FkZWRDbGFzczsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFByZWxvYWQobG9hZGVkQ2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b1ByZWxvYWQuYWRkKGxvYWRlZENsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkZWQgIiArICh0b1ByZWxvYWQuc2l6ZSgpIC0gaW5pdGlhbFNpemUpCi0gICAgICAgICAgICAgICAgKyAiIG1vcmUgdG8gc3BlZWQgdXAgYXBwbGljYXRpb25zLiIpOwotCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0b1ByZWxvYWQuc2l6ZSgpCi0gICAgICAgICAgICAgICAgKyAiIHRvdGFsIGNsYXNzZXMgd2lsbCBiZSBwcmVsb2FkZWQuIik7Ci0KLSAgICAgICAgLy8gTWFrZSBjbGFzc2VzIHRoYXQgd2VyZSBpbXBsaWNpdGx5IGxvYWRlZCBieSB0aGUgenlnb3RlIGV4cGxpY2l0LgotICAgICAgICAvLyBUaGlzIGFkZHMgbWluaW1hbCBvdmVyaGVhZCBidXQgYXZvaWQgY29uZnVzaW9uIGFib3V0IGNsYXNzZXMgbm90Ci0gICAgICAgIC8vIGFwcGVhcmluZyBpbiB0aGUgbGlzdC4KLSAgICAgICAgYWRkQWxsQ2xhc3Nlc0Zyb20oInp5Z290ZSIsIHJvb3QsIHRvUHJlbG9hZCk7Ci0KLSAgICAgICAgZm9yIChMb2FkZWRDbGFzcyBsb2FkZWRDbGFzcyA6IHRvUHJlbG9hZCkgewotICAgICAgICAgICAgb3V0LndyaXRlKGxvYWRlZENsYXNzLm5hbWUgKyAiXG4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIG91dC5jbG9zZSgpOwotCi0gICAgICAgIC8vIFVwZGF0ZSBkYXRhIHRvIHJlZmxlY3QgTG9hZGVkQ2xhc3MucHJlbG9hZGVkIGNoYW5nZXMuCi0gICAgICAgIGZvciAoTG9hZGVkQ2xhc3MgbG9hZGVkQ2xhc3MgOiB0b1ByZWxvYWQpIHsKLSAgICAgICAgICAgIGxvYWRlZENsYXNzLnByZWxvYWRlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcm9vdC50b0ZpbGUocm9vdEZpbGUpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgYWRkQWxsQ2xhc3Nlc0Zyb20oU3RyaW5nIHByb2Nlc3NOYW1lLCBSb290IHJvb3QsCi0gICAgICAgICAgICBTZXQ8TG9hZGVkQ2xhc3M+IHRvUHJlbG9hZCkgewotICAgICAgICBmb3IgKFByb2MgcHJvYyA6IHJvb3QucHJvY2Vzc2VzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAocHJvYy5uYW1lLmVxdWFscyhwcm9jZXNzTmFtZSkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKE9wZXJhdGlvbiBvcGVyYXRpb24gOiBwcm9jLm9wZXJhdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBwcmVsb2FkYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gUG9saWN5LmlzUHJlbG9hZGFibGUob3BlcmF0aW9uLmxvYWRlZENsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWxvYWRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b1ByZWxvYWQuYWRkKG9wZXJhdGlvbi5sb2FkZWRDbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNsYXNzIHNob3VsZCBiZSBwcmVsb2FkZWQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBzaG91bGRQcmVsb2FkKExvYWRlZENsYXNzIGNsYXp6KSB7Ci0gICAgICAgIHJldHVybiBQb2xpY3kuaXNQcmVsb2FkYWJsZShjbGF6eikKLSAgICAgICAgICAgICAgICAmJiBjbGF6ei5tZWRpYW5UaW1lTWljcm9zKCkgPiBNSU5fTE9BRF9USU1FX01JQ1JPUzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL2xvYWRjbGFzcy9BbmRyb2lkLm1rIGIvdG9vbHMvcHJlbG9hZC9sb2FkY2xhc3MvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU4MjhiZS4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkL2xvYWRjbGFzcy9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1MT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtc3ViZGlyLWphdmEtZmlsZXMpCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSB0ZXN0cwotCi1MT0NBTF9NT0RVTEUgOj0gbG9hZGNsYXNzCi0KLWluY2x1ZGUgJChCVUlMRF9KQVZBX0xJQlJBUlkpCmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL2xvYWRjbGFzcy9Mb2FkQ2xhc3MuamF2YSBiL3Rvb2xzL3ByZWxvYWQvbG9hZGNsYXNzL0xvYWRDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzFiNmE4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvbG9hZGNsYXNzL0xvYWRDbGFzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQub3MuRGVidWc7Ci0KLS8qKgotICogTG9hZHMgYSBjbGFzcywgcnVucyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IsIGFuZCBwcmludHMgc2hvd21hcCBvdXRwdXQuCi0gKgotICogPHA+VXNhZ2U6IGRhbHZpa3ZtIExvYWRDbGFzcyBbY2xhc3MgbmFtZV0KLSAqLwotY2xhc3MgTG9hZENsYXNzIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgU3lzdGVtLmxvYWRMaWJyYXJ5KCJhbmRyb2lkX3J1bnRpbWUiKTsKLQotICAgICAgICBpZiAocmVnaXN0ZXJOYXRpdmVzKCkgPCAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXJyb3IgcmVnaXN0ZXJpbmcgbmF0aXZlcy4iKTsgICAgCi0gICAgICAgIH0KLQotICAgICAgICBEZWJ1Zy5zdGFydEFsbG9jQ291bnRpbmcoKTsKLQotICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgICAgICBDbGFzcy5mb3JOYW1lKGFyZ3NbMF0pOwotICAgICAgICAgICAgICAgIGxvbmcgZWxhcHNlZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnQ7Ci0gICAgICAgICAgICAgICAgTG9nLmkoIkxvYWRDbGFzcyIsICJMb2FkZWQgIiArIGFyZ3NbMF0gKyAiIGluICIgKyBlbGFwc2VkCi0gICAgICAgICAgICAgICAgICAgICAgICArICJtcy4iKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KCJMb2FkQ2xhc3MiLCBlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTeXN0ZW0uZ2MoKTsKLQotICAgICAgICBpbnQgYWxsb2NDb3VudCA9IERlYnVnLmdldEdsb2JhbEFsbG9jQ291bnQoKTsKLSAgICAgICAgaW50IGFsbG9jU2l6ZSA9IERlYnVnLmdldEdsb2JhbEFsbG9jU2l6ZSgpOwotICAgICAgICBpbnQgZnJlZWRDb3VudCA9IERlYnVnLmdldEdsb2JhbEZyZWVkQ291bnQoKTsKLSAgICAgICAgaW50IGZyZWVkU2l6ZSA9IERlYnVnLmdldEdsb2JhbEZyZWVkU2l6ZSgpOwotICAgICAgICBsb25nIG5hdGl2ZUhlYXBTaXplID0gRGVidWcuZ2V0TmF0aXZlSGVhcFNpemUoKTsKLQotICAgICAgICBEZWJ1Zy5zdG9wQWxsb2NDb3VudGluZygpOwotCi0gICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzcG9uc2UgPSBuZXcgU3RyaW5nQnVpbGRlcigiREVDQUZCQUQiKTsKLQotICAgICAgICBpbnRbXSBwYWdlcyA9IG5ldyBpbnRbNl07Ci0gICAgICAgIERlYnVnLk1lbW9yeUluZm8gbWVtb3J5SW5mbyA9IG5ldyBEZWJ1Zy5NZW1vcnlJbmZvKCk7Ci0gICAgICAgIERlYnVnLmdldE1lbW9yeUluZm8obWVtb3J5SW5mbyk7Ci0gICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnLCcpLmFwcGVuZChtZW1vcnlJbmZvLm5hdGl2ZVNoYXJlZERpcnR5KTsKLSAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCcsJykuYXBwZW5kKG1lbW9yeUluZm8uZGFsdmlrU2hhcmVkRGlydHkpOwotICAgICAgICByZXNwb25zZS5hcHBlbmQoJywnKS5hcHBlbmQobWVtb3J5SW5mby5vdGhlclNoYXJlZERpcnR5KTsKLSAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCcsJykuYXBwZW5kKG1lbW9yeUluZm8ubmF0aXZlUHJpdmF0ZURpcnR5KTsKLSAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCcsJykuYXBwZW5kKG1lbW9yeUluZm8uZGFsdmlrUHJpdmF0ZURpcnR5KTsKLSAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCcsJykuYXBwZW5kKG1lbW9yeUluZm8ub3RoZXJQcml2YXRlRGlydHkpOwotCi0gICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnLCcpLmFwcGVuZChhbGxvY0NvdW50KTsKLSAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCcsJykuYXBwZW5kKGFsbG9jU2l6ZSk7Ci0gICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnLCcpLmFwcGVuZChmcmVlZENvdW50KTsKLSAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCcsJykuYXBwZW5kKGZyZWVkU2l6ZSk7Ci0gICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnLCcpLmFwcGVuZChuYXRpdmVIZWFwU2l6ZSk7Ci0gICAgICAgIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVzcG9uc2UudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVnaXN0ZXJzIG5hdGl2ZSBmdW5jdGlvbnMuIFNlZSBBbmRyb2lkUnVudGltZS5jcHAuCi0gICAgICovCi0gICAgc3RhdGljIG5hdGl2ZSBpbnQgcmVnaXN0ZXJOYXRpdmVzKCk7Ci19CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkL3ByZWxvYWQuaW1sIGIvdG9vbHMvcHJlbG9hZC9wcmVsb2FkLmltbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ4N2M1NS4uMDAwMDAwMAotLS0gYS90b29scy9wcmVsb2FkL3ByZWxvYWQuaW1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxtb2R1bGUgcmVsYXRpdmVQYXRocz0idHJ1ZSIgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgotICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0iZmFsc2UiPgotICAgIDxvdXRwdXQgdXJsPSJmaWxlOi8vL3RtcC9wcmVsb2FkIiAvPgotICAgIDxvdXRwdXQtdGVzdCB1cmw9ImZpbGU6Ly8vdG1wL3ByZWxvYWQiIC8+Ci0gICAgPGV4Y2x1ZGUtb3V0cHV0IC8+Ci0gICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KLSAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIiBpc1Rlc3RTb3VyY2U9ImZhbHNlIiAvPgotICAgIDwvY29udGVudD4KLSAgICA8b3JkZXJFbnRyeSB0eXBlPSJpbmhlcml0ZWRKZGsiIC8+Ci0gICAgPG9yZGVyRW50cnkgdHlwZT0ic291cmNlRm9sZGVyIiBmb3JUZXN0cz0iZmFsc2UiIC8+Ci0gIDwvY29tcG9uZW50PgotPC9tb2R1bGU+Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvcHJlbG9hZC5pcHIgYi90b29scy9wcmVsb2FkL3ByZWxvYWQuaXByCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzk2MjFjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ByZWxvYWQvcHJlbG9hZC5pcHIKKysrIC9kZXYvbnVsbApAQCAtMSw0OTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHJlbGF0aXZlUGF0aHM9ImZhbHNlIiB2ZXJzaW9uPSI0Ij4KLSAgPGNvbXBvbmVudCBuYW1lPSJBbnRDb25maWd1cmF0aW9uIj4KLSAgICA8ZGVmYXVsdEFudCBidW5kbGVkQW50PSJ0cnVlIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJCdWlsZEphclByb2plY3RTZXR0aW5ncyI+Ci0gICAgPG9wdGlvbiBuYW1lPSJCVUlMRF9KQVJTX09OX01BS0UiIHZhbHVlPSJmYWxzZSIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iQ2hhbmdlQnJvd3NlclNldHRpbmdzIj4KLSAgICA8b3B0aW9uIG5hbWU9Ik1BSU5fU1BMSVRURVJfUFJPUE9SVElPTiIgdmFsdWU9IjAuMyIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik1FU1NBR0VTX1NQTElUVEVSX1BST1BPUlRJT04iIHZhbHVlPSIwLjgiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJVU0VfREFURV9CRUZPUkVfRklMVEVSIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJVU0VfREFURV9BRlRFUl9GSUxURVIiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVTRV9DSEFOR0VfQkVGT1JFX0ZJTFRFUiIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVVNFX0NIQU5HRV9BRlRFUl9GSUxURVIiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRBVEVfQkVGT1JFIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iREFURV9BRlRFUiIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkNIQU5HRV9CRUZPUkUiIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJDSEFOR0VfQUZURVIiIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJVU0VfVVNFUl9GSUxURVIiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVTRVIiIHZhbHVlPSIiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IkNvZGVTdHlsZVByb2plY3RQcm9maWxlTWFuZ2VyIj4KLSAgICA8b3B0aW9uIG5hbWU9IlBST0pFQ1RfUFJPRklMRSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVTRV9QUk9KRUNUX0xFVkVMX1NFVFRJTkdTIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IkNvZGVTdHlsZVNldHRpbmdzTWFuYWdlciI+Ci0gICAgPG9wdGlvbiBuYW1lPSJQRVJfUFJPSkVDVF9TRVRUSU5HUyI+Ci0gICAgICA8dmFsdWU+Ci0gICAgICAgIDxBRERJVElPTkFMX0lOREVOVF9PUFRJT05TIGZpbGVUeXBlPSJqYXZhIj4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IklOREVOVF9TSVpFIiB2YWx1ZT0iNCIgLz4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IkNPTlRJTlVBVElPTl9JTkRFTlRfU0laRSIgdmFsdWU9IjgiIC8+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJUQUJfU0laRSIgdmFsdWU9IjQiIC8+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJVU0VfVEFCX0NIQVJBQ1RFUiIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iU01BUlRfVEFCUyIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iTEFCRUxfSU5ERU5UX1NJWkUiIHZhbHVlPSIwIiAvPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iTEFCRUxfSU5ERU5UX0FCU09MVVRFIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICAgIDwvQURESVRJT05BTF9JTkRFTlRfT1BUSU9OUz4KLSAgICAgICAgPEFERElUSU9OQUxfSU5ERU5UX09QVElPTlMgZmlsZVR5cGU9InhtbCI+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJJTkRFTlRfU0laRSIgdmFsdWU9IjQiIC8+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJDT05USU5VQVRJT05fSU5ERU5UX1NJWkUiIHZhbHVlPSI4IiAvPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iVEFCX1NJWkUiIHZhbHVlPSI0IiAvPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iVVNFX1RBQl9DSEFSQUNURVIiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IlNNQVJUX1RBQlMiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IkxBQkVMX0lOREVOVF9TSVpFIiB2YWx1ZT0iMCIgLz4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IkxBQkVMX0lOREVOVF9BQlNPTFVURSIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgICA8L0FERElUSU9OQUxfSU5ERU5UX09QVElPTlM+Ci0gICAgICA8L3ZhbHVlPgotICAgIDwvb3B0aW9uPgotICAgIDxvcHRpb24gbmFtZT0iVVNFX1BFUl9QUk9KRUNUX1NFVFRJTkdTIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IkNvbXBpbGVyQ29uZmlndXJhdGlvbiI+Ci0gICAgPG9wdGlvbiBuYW1lPSJERUZBVUxUX0NPTVBJTEVSIiB2YWx1ZT0iSmF2YWMiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJERVBMT1lfQUZURVJfTUFLRSIgdmFsdWU9IjAiIC8+Ci0gICAgPHJlc291cmNlRXh0ZW5zaW9ucz4KLSAgICAgIDxlbnRyeSBuYW1lPSIuK1wuKHByb3BlcnRpZXN8eG1sfGh0bWx8ZHRkfHRsZCkiIC8+Ci0gICAgICA8ZW50cnkgbmFtZT0iLitcLihnaWZ8cG5nfGpwZWd8anBnKSIgLz4KLSAgICA8L3Jlc291cmNlRXh0ZW5zaW9ucz4KLSAgICA8d2lsZGNhcmRSZXNvdXJjZVBhdHRlcm5zPgotICAgICAgPGVudHJ5IG5hbWU9Ij8qLnByb3BlcnRpZXMiIC8+Ci0gICAgICA8ZW50cnkgbmFtZT0iPyoueG1sIiAvPgotICAgICAgPGVudHJ5IG5hbWU9Ij8qLmdpZiIgLz4KLSAgICAgIDxlbnRyeSBuYW1lPSI/Ki5wbmciIC8+Ci0gICAgICA8ZW50cnkgbmFtZT0iPyouanBlZyIgLz4KLSAgICAgIDxlbnRyeSBuYW1lPSI/Ki5qcGciIC8+Ci0gICAgICA8ZW50cnkgbmFtZT0iPyouaHRtbCIgLz4KLSAgICAgIDxlbnRyeSBuYW1lPSI/Ki5kdGQiIC8+Ci0gICAgICA8ZW50cnkgbmFtZT0iPyoudGxkIiAvPgotICAgIDwvd2lsZGNhcmRSZXNvdXJjZVBhdHRlcm5zPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJDdnMyQ29uZmlndXJhdGlvbiI+Ci0gICAgPG9wdGlvbiBuYW1lPSJQUlVORV9FTVBUWV9ESVJFQ1RPUklFUyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJNRVJHSU5HX01PREUiIHZhbHVlPSIwIiAvPgotICAgIDxvcHRpb24gbmFtZT0iTUVSR0VfV0lUSF9CUkFOQ0gxX05BTUUiIHZhbHVlPSJIRUFEIiAvPgotICAgIDxvcHRpb24gbmFtZT0iTUVSR0VfV0lUSF9CUkFOQ0gyX05BTUUiIHZhbHVlPSJIRUFEIiAvPgotICAgIDxvcHRpb24gbmFtZT0iUkVTRVRfU1RJQ0tZIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJDUkVBVEVfTkVXX0RJUkVDVE9SSUVTIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfVEVYVF9GSUxFX1NVQlNUSVRVVElPTiIgdmFsdWU9Imt2IiAvPgotICAgIDxvcHRpb24gbmFtZT0iUFJPQ0VTU19VTktOT1dOX0ZJTEVTIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJQUk9DRVNTX0RFTEVURURfRklMRVMiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlBST0NFU1NfSUdOT1JFRF9GSUxFUyIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iUkVTRVJWRURfRURJVCIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iQ0hFQ0tPVVRfREFURV9PUl9SRVZJU0lPTl9TRVRUSU5HUyI+Ci0gICAgICA8dmFsdWU+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iQlJBTkNIIiB2YWx1ZT0iIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9IkRBVEUiIHZhbHVlPSIiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iVVNFX0JSQU5DSCIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9IlVTRV9EQVRFIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8L3ZhbHVlPgotICAgIDwvb3B0aW9uPgotICAgIDxvcHRpb24gbmFtZT0iVVBEQVRFX0RBVEVfT1JfUkVWSVNJT05fU0VUVElOR1MiPgotICAgICAgPHZhbHVlPgotICAgICAgICA8b3B0aW9uIG5hbWU9IkJSQU5DSCIgdmFsdWU9IiIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJEQVRFIiB2YWx1ZT0iIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9IlVTRV9CUkFOQ0giIHZhbHVlPSJmYWxzZSIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJVU0VfREFURSIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgPC92YWx1ZT4KLSAgICA8L29wdGlvbj4KLSAgICA8b3B0aW9uIG5hbWU9IlNIT1dfQ0hBTkdFU19SRVZJU0lPTl9TRVRUSU5HUyI+Ci0gICAgICA8dmFsdWU+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iQlJBTkNIIiB2YWx1ZT0iIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9IkRBVEUiIHZhbHVlPSIiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iVVNFX0JSQU5DSCIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9IlVTRV9EQVRFIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8L3ZhbHVlPgotICAgIDwvb3B0aW9uPgotICAgIDxvcHRpb24gbmFtZT0iU0hPV19PVVRQVVQiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkFERF9XQVRDSF9JTkRFWCIgdmFsdWU9IjAiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJSRU1PVkVfV0FUQ0hfSU5ERVgiIHZhbHVlPSIwIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVVBEQVRFX0tFWVdPUkRfU1VCU1RJVFVUSU9OIiAvPgotICAgIDxvcHRpb24gbmFtZT0iTUFLRV9ORVdfRklMRVNfUkVBRE9OTFkiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlNIT1dfQ09SUlVQVEVEX1BST0pFQ1RfRklMRVMiIHZhbHVlPSIwIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVEFHX0FGVEVSX1BST0pFQ1RfQ09NTUlUIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJPVkVSUklERV9FWElTVElOR19UQUdfRk9SX1BST0pFQ1QiIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVEFHX0FGVEVSX1BST0pFQ1RfQ09NTUlUX05BTUUiIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJDTEVBTl9DT1BZIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IkRlcGVuZGVuY2llc0FuYWx5emVNYW5hZ2VyIj4KLSAgICA8b3B0aW9uIG5hbWU9Im15Rm9yd2FyZERpcmVjdGlvbiIgdmFsdWU9ImZhbHNlIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJEZXBlbmRlbmN5VmFsaWRhdGlvbk1hbmFnZXIiPgotICAgIDxvcHRpb24gbmFtZT0iU0tJUF9JTVBPUlRfU1RBVEVNRU5UUyIgdmFsdWU9ImZhbHNlIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJFY2xpcHNlQ29tcGlsZXJTZXR0aW5ncyI+Ci0gICAgPG9wdGlvbiBuYW1lPSJERUJVR0dJTkdfSU5GTyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJHRU5FUkFURV9OT19XQVJOSU5HUyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJERVBSRUNBVElPTiIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iQURESVRJT05BTF9PUFRJT05TX1NUUklORyIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik1BWElNVU1fSEVBUF9TSVpFIiB2YWx1ZT0iMTI4IiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJFY2xpcHNlRW1iZWRkZWRDb21waWxlclNldHRpbmdzIj4KLSAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iTUFYSU1VTV9IRUFQX1NJWkUiIHZhbHVlPSIxMjgiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IkVuY29kaW5nIiB1c2VVVEZHdWVzc2luZz0idHJ1ZSIgbmF0aXZlMkFzY2lpRm9yUHJvcGVydGllc0ZpbGVzPSJmYWxzZSIgLz4KLSAgPGNvbXBvbmVudCBuYW1lPSJFbnRyeVBvaW50c01hbmFnZXIiPgotICAgIDxlbnRyeV9wb2ludHMgdmVyc2lvbj0iMi4wIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJFeHBvcnRUb0hUTUxTZXR0aW5ncyI+Ci0gICAgPG9wdGlvbiBuYW1lPSJQUklOVF9MSU5FX05VTUJFUlMiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik9QRU5fSU5fQlJPV1NFUiIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iT1VUUFVUX0RJUkVDVE9SWSIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iSWRQcm92aWRlciIgSURFdGFsa0lEPSJEMTcxRjk5QjkxNzhDMTY3NTU5M0RDOUE3NkE1Q0M3RSIgLz4KLSAgPGNvbXBvbmVudCBuYW1lPSJJbnNwZWN0aW9uUHJvamVjdFByb2ZpbGVNYW5hZ2VyIj4KLSAgICA8b3B0aW9uIG5hbWU9IlBST0pFQ1RfUFJPRklMRSIgdmFsdWU9IlByb2plY3QgRGVmYXVsdCIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVTRV9QUk9KRUNUX1BST0ZJTEUiIHZhbHVlPSJ0cnVlIiAvPgotICAgIDx2ZXJzaW9uIHZhbHVlPSIxLjAiIC8+Ci0gICAgPHByb2ZpbGVzPgotICAgICAgPHByb2ZpbGUgdmVyc2lvbj0iMS4wIiBpc19sb2NrZWQ9ImZhbHNlIj4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJteU5hbWUiIHZhbHVlPSJQcm9qZWN0IERlZmF1bHQiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0ibXlMb2NhbCIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPSJKYXZhRG9jIiBlbmFibGVkPSJmYWxzZSIgbGV2ZWw9IldBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0iZmFsc2UiPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iVE9QX0xFVkVMX0NMQVNTX09QVElPTlMiPgotICAgICAgICAgICAgPHZhbHVlPgotICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9IkFDQ0VTU19KQVZBRE9DX1JFUVVJUkVEX0ZPUiIgdmFsdWU9Im5vbmUiIC8+Ci0gICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0iUkVRVUlSRURfVEFHUyIgdmFsdWU9IiIgLz4KLSAgICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgICAgPC9vcHRpb24+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJJTk5FUl9DTEFTU19PUFRJT05TIj4KLSAgICAgICAgICAgIDx2YWx1ZT4KLSAgICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJBQ0NFU1NfSkFWQURPQ19SRVFVSVJFRF9GT1IiIHZhbHVlPSJub25lIiAvPgotICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9IlJFUVVJUkVEX1RBR1MiIHZhbHVlPSIiIC8+Ci0gICAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICAgIDwvb3B0aW9uPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iTUVUSE9EX09QVElPTlMiPgotICAgICAgICAgICAgPHZhbHVlPgotICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9IkFDQ0VTU19KQVZBRE9DX1JFUVVJUkVEX0ZPUiIgdmFsdWU9Im5vbmUiIC8+Ci0gICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0iUkVRVUlSRURfVEFHUyIgdmFsdWU9IkByZXR1cm5AcGFyYW1AdGhyb3dzIG9yIEBleGNlcHRpb24iIC8+Ci0gICAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICAgIDwvb3B0aW9uPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0iRklFTERfT1BUSU9OUyI+Ci0gICAgICAgICAgICA8dmFsdWU+Ci0gICAgICAgICAgICAgIDxvcHRpb24gbmFtZT0iQUNDRVNTX0pBVkFET0NfUkVRVUlSRURfRk9SIiB2YWx1ZT0ibm9uZSIgLz4KLSAgICAgICAgICAgICAgPG9wdGlvbiBuYW1lPSJSRVFVSVJFRF9UQUdTIiB2YWx1ZT0iIiAvPgotICAgICAgICAgICAgPC92YWx1ZT4KLSAgICAgICAgICA8L29wdGlvbj4KLSAgICAgICAgICA8b3B0aW9uIG5hbWU9IklHTk9SRV9ERVBSRUNBVEVEIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICAgICAgPG9wdGlvbiBuYW1lPSJJR05PUkVfSkFWQURPQ19QRVJJT0QiIHZhbHVlPSJ0cnVlIiAvPgotICAgICAgICAgIDxvcHRpb24gbmFtZT0ibXlBZGRpdGlvbmFsSmF2YWRvY1RhZ3MiIHZhbHVlPSIiIC8+Ci0gICAgICAgIDwvaW5zcGVjdGlvbl90b29sPgotICAgICAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPSJKYXZhTGFuZ0ltcG9ydCIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSIgLz4KLSAgICAgICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iT25EZW1hbmRJbXBvcnQiIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiIC8+Ci0gICAgICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlJlZHVuZGFudEltcG9ydCIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSIgLz4KLSAgICAgICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iU2FtZVBhY2thZ2VJbXBvcnQiIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiIC8+Ci0gICAgICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlVudXNlZEltcG9ydCIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSIgLz4KLSAgICAgIDwvcHJvZmlsZT4KLSAgICA8L3Byb2ZpbGVzPgotICAgIDxsaXN0IHNpemU9IjQiPgotICAgICAgPGl0ZW0gaW5kZXg9IjAiIGNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nIiBpdGVtdmFsdWU9IldBUk5JTkciIC8+Ci0gICAgICA8aXRlbSBpbmRleD0iMSIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmciIGl0ZW12YWx1ZT0iU0VSVkVSIFBST0JMRU0iIC8+Ci0gICAgICA8aXRlbSBpbmRleD0iMiIgY2xhc3M9ImphdmEubGFuZy5TdHJpbmciIGl0ZW12YWx1ZT0iSU5GTyIgLz4KLSAgICAgIDxpdGVtIGluZGV4PSIzIiBjbGFzcz0iamF2YS5sYW5nLlN0cmluZyIgaXRlbXZhbHVlPSJFUlJPUiIgLz4KLSAgICA8L2xpc3Q+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IkphdmFjU2V0dGluZ3MiPgotICAgIDxvcHRpb24gbmFtZT0iREVCVUdHSU5HX0lORk8iIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfTk9fV0FSTklOR1MiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJNQVhJTVVNX0hFQVBfU0laRSIgdmFsdWU9IjEyOCIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iSmF2YWRvY0dlbmVyYXRpb25NYW5hZ2VyIj4KLSAgICA8b3B0aW9uIG5hbWU9Ik9VVFBVVF9ESVJFQ1RPUlkiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fU0NPUEUiIHZhbHVlPSJwcm90ZWN0ZWQiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fSElFUkFSQ0hZIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9OQVZJR0FUT1IiIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0lOREVYIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9TRVBBUkFURV9JTkRFWCIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJPUFRJT05fRE9DVU1FTlRfVEFHX1VTRSIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19BVVRIT1IiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ET0NVTUVOVF9UQUdfVkVSU0lPTiIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iT1BUSU9OX0RPQ1VNRU5UX1RBR19ERVBSRUNBVEVEIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik9QVElPTl9ERVBSRUNBVEVEX0xJU1QiIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iT1RIRVJfT1BUSU9OUyIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkhFQVBfU0laRSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkxPQ0FMRSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Ik9QRU5fSU5fQlJPV1NFUiIgdmFsdWU9InRydWUiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9Ikppa2VzU2V0dGluZ3MiPgotICAgIDxvcHRpb24gbmFtZT0iSklLRVNfUEFUSCIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRFQlVHR0lOR19JTkZPIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRFUFJFQ0FUSU9OIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX05PX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJJU19FTUFDU19FUlJPUlNfTU9ERSIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJBRERJVElPTkFMX09QVElPTlNfU1RSSU5HIiB2YWx1ZT0iIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJMb2dDb25zb2xlUHJlZmVyZW5jZXMiPgotICAgIDxvcHRpb24gbmFtZT0iRklMVEVSX0VSUk9SUyIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iRklMVEVSX1dBUk5JTkdTIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJGSUxURVJfSU5GTyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJDVVNUT01fRklMVEVSIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJQYWxldHRlMiI+Ci0gICAgPGdyb3VwIG5hbWU9IlN3aW5nIj4KLSAgICAgIDxpdGVtIGNsYXNzPSJjb20uaW50ZWxsaWoudWlEZXNpZ25lci5IU3BhY2VyIiB0b29sdGlwLXRleHQ9Ikhvcml6b250YWwgU3BhY2VyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvaHNwYWNlci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMSIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iY29tLmludGVsbGlqLnVpRGVzaWduZXIuVlNwYWNlciIgdG9vbHRpcC10ZXh0PSJWZXJ0aWNhbCBTcGFjZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy92c3BhY2VyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjEiIGFuY2hvcj0iMCIgZmlsbD0iMiIgLz4KLSAgICAgIDwvaXRlbT4KLSAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUGFuZWwiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9wYW5lbC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMyIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNjcm9sbFBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zY3JvbGxQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjciIGhzaXplLXBvbGljeT0iNyIgYW5jaG9yPSIwIiBmaWxsPSIzIiAvPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpCdXR0b24iIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9idXR0b24ucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+Ci0gICAgICAgIDxpbml0aWFsLXZhbHVlcz4KLSAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IkJ1dHRvbiIgLz4KLSAgICAgICAgPC9pbml0aWFsLXZhbHVlcz4KLSAgICAgIDwvaXRlbT4KLSAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KUmFkaW9CdXR0b24iIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9yYWRpb0J1dHRvbi5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KLSAgICAgICAgPGluaXRpYWwtdmFsdWVzPgotICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iUmFkaW9CdXR0b24iIC8+Ci0gICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkNoZWNrQm94IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvY2hlY2tCb3gucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjgiIGZpbGw9IjAiIC8+Ci0gICAgICAgIDxpbml0aWFsLXZhbHVlcz4KLSAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdmFsdWU9IkNoZWNrQm94IiAvPgotICAgICAgICA8L2luaXRpYWwtdmFsdWVzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpMYWJlbCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2xhYmVsLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjAiIGFuY2hvcj0iOCIgZmlsbD0iMCIgLz4KLSAgICAgICAgPGluaXRpYWwtdmFsdWVzPgotICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB2YWx1ZT0iTGFiZWwiIC8+Ci0gICAgICAgIDwvaW5pdGlhbC12YWx1ZXM+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRleHRGaWVsZCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KLSAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KLSAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpQYXNzd29yZEZpZWxkIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcGFzc3dvcmRGaWVsZC5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIj4KLSAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSItMSIgLz4KLSAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpGb3JtYXR0ZWRUZXh0RmllbGQiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9mb3JtYXR0ZWRUZXh0RmllbGQucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iOCIgZmlsbD0iMSI+Ci0gICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iLTEiIC8+Ci0gICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KLSAgICAgIDwvaXRlbT4KLSAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGV4dEFyZWEiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90ZXh0QXJlYS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KLSAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KLSAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUZXh0UGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3RleHRQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgotICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgotICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkVkaXRvclBhbmUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9lZGl0b3JQYW5lLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0idHJ1ZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiPgotICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgotICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSkNvbWJvQm94IiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvY29tYm9Cb3gucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJ0cnVlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjIiIGFuY2hvcj0iOCIgZmlsbD0iMSIgLz4KLSAgICAgIDwvaXRlbT4KLSAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KVGFibGUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90YWJsZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSI2IiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMyI+Ci0gICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIxNTAiIGhlaWdodD0iNTAiIC8+Ci0gICAgICAgIDwvZGVmYXVsdC1jb25zdHJhaW50cz4KLSAgICAgIDwvaXRlbT4KLSAgICAgIDxpdGVtIGNsYXNzPSJqYXZheC5zd2luZy5KTGlzdCIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL2xpc3QucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSIyIiBhbmNob3I9IjAiIGZpbGw9IjMiPgotICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMTUwIiBoZWlnaHQ9IjUwIiAvPgotICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRyZWUiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90cmVlLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0idHJ1ZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjYiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSIwIiBmaWxsPSIzIj4KLSAgICAgICAgICA8cHJlZmVycmVkLXNpemUgd2lkdGg9IjE1MCIgaGVpZ2h0PSI1MCIgLz4KLSAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUYWJiZWRQYW5lIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvdGFiYmVkUGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIzIiBoc2l6ZS1wb2xpY3k9IjMiIGFuY2hvcj0iMCIgZmlsbD0iMyI+Ci0gICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIiAvPgotICAgICAgICA8L2RlZmF1bHQtY29uc3RyYWludHM+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNwbGl0UGFuZSIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NwbGl0UGFuZS5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMyIgaHNpemUtcG9saWN5PSIzIiBhbmNob3I9IjAiIGZpbGw9IjMiPgotICAgICAgICAgIDxwcmVmZXJyZWQtc2l6ZSB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgLz4KLSAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTcGlubmVyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvc3Bpbm5lci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9InRydWUiIGNhbi1hdHRhY2gtbGFiZWw9InRydWUiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iNiIgYW5jaG9yPSI4IiBmaWxsPSIxIiAvPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTbGlkZXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zbGlkZXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjgiIGZpbGw9IjEiIC8+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlNlcGFyYXRvciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3NlcGFyYXRvci5wbmciIHJlbW92YWJsZT0iZmFsc2UiIGF1dG8tY3JlYXRlLWJpbmRpbmc9ImZhbHNlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjMiIC8+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlByb2dyZXNzQmFyIiBpY29uPSIvY29tL2ludGVsbGlqL3VpRGVzaWduZXIvaWNvbnMvcHJvZ3Jlc3NiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iMCIgaHNpemUtcG9saWN5PSI2IiBhbmNob3I9IjAiIGZpbGw9IjEiIC8+Ci0gICAgICA8L2l0ZW0+Ci0gICAgICA8aXRlbSBjbGFzcz0iamF2YXguc3dpbmcuSlRvb2xCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy90b29sYmFyLnBuZyIgcmVtb3ZhYmxlPSJmYWxzZSIgYXV0by1jcmVhdGUtYmluZGluZz0iZmFsc2UiIGNhbi1hdHRhY2gtbGFiZWw9ImZhbHNlIj4KLSAgICAgICAgPGRlZmF1bHQtY29uc3RyYWludHMgdnNpemUtcG9saWN5PSIwIiBoc2l6ZS1wb2xpY3k9IjYiIGFuY2hvcj0iMCIgZmlsbD0iMSI+Ci0gICAgICAgICAgPHByZWZlcnJlZC1zaXplIHdpZHRoPSItMSIgaGVpZ2h0PSIyMCIgLz4KLSAgICAgICAgPC9kZWZhdWx0LWNvbnN0cmFpbnRzPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpUb29sQmFyJFNlcGFyYXRvciIgaWNvbj0iL2NvbS9pbnRlbGxpai91aURlc2lnbmVyL2ljb25zL3Rvb2xiYXJTZXBhcmF0b3IucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJmYWxzZSIgY2FuLWF0dGFjaC1sYWJlbD0iZmFsc2UiPgotICAgICAgICA8ZGVmYXVsdC1jb25zdHJhaW50cyB2c2l6ZS1wb2xpY3k9IjAiIGhzaXplLXBvbGljeT0iMCIgYW5jaG9yPSIwIiBmaWxsPSIxIiAvPgotICAgICAgPC9pdGVtPgotICAgICAgPGl0ZW0gY2xhc3M9ImphdmF4LnN3aW5nLkpTY3JvbGxCYXIiIGljb249Ii9jb20vaW50ZWxsaWovdWlEZXNpZ25lci9pY29ucy9zY3JvbGxiYXIucG5nIiByZW1vdmFibGU9ImZhbHNlIiBhdXRvLWNyZWF0ZS1iaW5kaW5nPSJ0cnVlIiBjYW4tYXR0YWNoLWxhYmVsPSJmYWxzZSI+Ci0gICAgICAgIDxkZWZhdWx0LWNvbnN0cmFpbnRzIHZzaXplLXBvbGljeT0iNiIgaHNpemUtcG9saWN5PSIwIiBhbmNob3I9IjAiIGZpbGw9IjIiIC8+Ci0gICAgICA8L2l0ZW0+Ci0gICAgPC9ncm91cD4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iUGVyZm9yY2VDaGFuZ2VCcm93c2VyU2V0dGluZ3MiPgotICAgIDxvcHRpb24gbmFtZT0iVVNFX0NMSUVOVF9GSUxURVIiIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iQ0xJRU5UIiB2YWx1ZT0iIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0RGV0YWlscyI+Ci0gICAgPG9wdGlvbiBuYW1lPSJwcm9qZWN0TmFtZSIgdmFsdWU9InByZWxvYWQiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RGaWxlVmVyc2lvbiIgY29udmVydGVkPSJ0cnVlIiAvPgotICA8Y29tcG9uZW50IG5hbWU9IlByb2plY3RLZXkiPgotICAgIDxvcHRpb24gbmFtZT0ic3RhdGUiIHZhbHVlPSJwcm9qZWN0Oi8vL1ZvbHVtZXMvQW5kcm9pZC9kb251dC9mcmFtZXdvcmtzL2Jhc2UvdG9vbHMvcHJlbG9hZC9wcmVsb2FkLmlwciIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iUHJvamVjdE1vZHVsZU1hbmFnZXIiPgotICAgIDxtb2R1bGVzPgotICAgICAgPG1vZHVsZSBmaWxldXJsPSJmaWxlOi8vJFBST0pFQ1RfRElSJC9wcmVsb2FkLmltbCIgZmlsZXBhdGg9IiRQUk9KRUNUX0RJUiQvcHJlbG9hZC5pbWwiIC8+Ci0gICAgPC9tb2R1bGVzPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0Um9vdE1hbmFnZXIiIHZlcnNpb249IjIiIGxhbmd1YWdlTGV2ZWw9IkpES18xXzUiIGFzc2VydC1rZXl3b3JkPSJ0cnVlIiBqZGstMTU9InRydWUiIHByb2plY3QtamRrLW5hbWU9IjEuNSIgcHJvamVjdC1qZGstdHlwZT0iSmF2YVNESyI+Ci0gICAgPG91dHB1dCB1cmw9ImZpbGU6Ly8vdG1wL3ByZWxvYWQiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlJtaWNTZXR0aW5ncyI+Ci0gICAgPG9wdGlvbiBuYW1lPSJJU19FQU5BQkxFRCIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iREVCVUdHSU5HX0lORk8iIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxvcHRpb24gbmFtZT0iR0VORVJBVEVfTk9fV0FSTklOR1MiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkdFTkVSQVRFX0lJT1BfU1RVQlMiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkFERElUSU9OQUxfT1BUSU9OU19TVFJJTkciIHZhbHVlPSIiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlN0YXJ0ZWFtQ29uZmlndXJhdGlvbiI+Ci0gICAgPG9wdGlvbiBuYW1lPSJTRVJWRVIiIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJQT1JUIiB2YWx1ZT0iNDkyMDEiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJVU0VSIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iUEFTU1dPUkQiIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJQUk9KRUNUIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVklFVyIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkFMVEVSTkFUSVZFX1dPUktJTkdfUEFUSCIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkxPQ0tfT05fQ0hFQ0tPVVQiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVOTE9DS19PTl9DSEVDS0lOIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlN0cnV0cyBBc3Npc3RhbnQiPgotICAgIDxvcHRpb24gbmFtZT0ic2hvd0lucHV0cyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJyZXNvdXJjZXMiPgotICAgICAgPHZhbHVlPgotICAgICAgICA8b3B0aW9uIG5hbWU9InN0cnV0c1BhdGgiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0ic3RydXRzSGVscCIgLz4KLSAgICAgIDwvdmFsdWU+Ci0gICAgPC9vcHRpb24+Ci0gICAgPG9wdGlvbiBuYW1lPSJzZWxlY3RlZFRhZ2xpYnMiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJzZWxlY3RlZFRhZ2xpYnMiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJteVN0cnV0c1ZhbGlkYXRpb25FbmFibGVkIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Im15VGlsZXNWYWxpZGF0aW9uRW5hYmxlZCIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJteVZhbGlkYXRvclZhbGlkYXRpb25FbmFibGVkIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Im15UmVwb3J0RXJyb3JzQXNXYXJuaW5ncyIgdmFsdWU9InRydWUiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlN2bkJyYW5jaENvbmZpZ3VyYXRpb25NYW5hZ2VyIj4KLSAgICA8b3B0aW9uIG5hbWU9Im15U3VwcG9ydHNVc2VySW5mb0ZpbHRlciIgdmFsdWU9InRydWUiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9IlN2bkNoYW5nZXNCcm93c2VyU2V0dGluZ3MiPgotICAgIDxvcHRpb24gbmFtZT0iVVNFX0FVVEhPUl9GSUVMRCIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJBVVRIT1IiIHZhbHVlPSIiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJMT0NBVElPTiIgdmFsdWU9IiIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVTRV9QUk9KRUNUX1NFVFRJTkdTIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlVTRV9BTFRFUk5BVEVfTE9DQVRJT04iIHZhbHVlPSJmYWxzZSIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iVkNTLkZpbGVWaWV3Q29uZmlndXJhdGlvbiI+Ci0gICAgPG9wdGlvbiBuYW1lPSJTRUxFQ1RFRF9TVEFUVVNFUyIgdmFsdWU9IkRFRkFVTFQiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJTRUxFQ1RFRF9DT0xVTU5TIiB2YWx1ZT0iREVGQVVMVCIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IlNIT1dfRklMVEVSUyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJDVVNUT01JWkVfVklFVyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJTSE9XX0ZJTEVfSElTVE9SWV9BU19UUkVFIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iVmNzRGlyZWN0b3J5TWFwcGluZ3MiPgotICAgIDxtYXBwaW5nIGRpcmVjdG9yeT0iIiB2Y3M9IlBlcmZvcmNlIiAvPgotICAgIDxtYXBwaW5nIGRpcmVjdG9yeT0iL1ZvbHVtZXMvQW5kcm9pZC9kb251dC9mcmFtZXdvcmtzL2Jhc2UiIHZjcz0iR2l0IiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJWc3NDb25maWd1cmF0aW9uIj4KLSAgICA8b3B0aW9uIG5hbWU9IkNMSUVOVF9QQVRIIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iU1JDU0FGRUlOSV9QQVRIIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVVNFUl9OQU1FIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iUFdEIiB2YWx1ZT0iIiAvPgotICAgIDxvcHRpb24gbmFtZT0iVlNTX0lTX0lOSVRJQUxJWkVEIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPENoZWNrb3V0T3B0aW9ucz4KLSAgICAgIDxvcHRpb24gbmFtZT0iQ09NTUVOVCIgdmFsdWU9IiIgLz4KLSAgICAgIDxvcHRpb24gbmFtZT0iRE9fTk9UX0dFVF9MQVRFU1RfVkVSU0lPTiIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJSRVBMQUNFX1dSSVRBQkxFIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9IlJFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIiAvPgotICAgIDwvQ2hlY2tvdXRPcHRpb25zPgotICAgIDxDaGVja2luT3B0aW9ucz4KLSAgICAgIDxvcHRpb24gbmFtZT0iQ09NTUVOVCIgdmFsdWU9IiIgLz4KLSAgICAgIDxvcHRpb24gbmFtZT0iS0VFUF9DSEVDS0VEX09VVCIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJSRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8L0NoZWNraW5PcHRpb25zPgotICAgIDxBZGRPcHRpb25zPgotICAgICAgPG9wdGlvbiBuYW1lPSJTVE9SRV9PTkxZX0xBVEVTVF9WRVJTSU9OIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9IkNIRUNLX09VVF9JTU1FRElBVEVMWSIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJGSUxFX1RZUEUiIHZhbHVlPSIwIiAvPgotICAgIDwvQWRkT3B0aW9ucz4KLSAgICA8VW5kb2NoZWNrb3V0T3B0aW9ucz4KLSAgICAgIDxvcHRpb24gbmFtZT0iTUFLRV9XUklUQUJMRSIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJSRVBMQUNFX0xPQ0FMX0NPUFkiIHZhbHVlPSIwIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJSRUNVUlNJVkUiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8L1VuZG9jaGVja291dE9wdGlvbnM+Ci0gICAgPEdldE9wdGlvbnM+Ci0gICAgICA8b3B0aW9uIG5hbWU9IlJFUExBQ0VfV1JJVEFCTEUiIHZhbHVlPSIwIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJNQUtFX1dSSVRBQkxFIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9IkFOU1dFUl9ORUdBVElWRUxZIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9IkFOU1dFUl9QT1NJVElWRUxZIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgICA8b3B0aW9uIG5hbWU9IlJFQ1VSU0lWRSIgdmFsdWU9ImZhbHNlIiAvPgotICAgICAgPG9wdGlvbiBuYW1lPSJWRVJTSU9OIiAvPgotICAgIDwvR2V0T3B0aW9ucz4KLSAgICA8VnNzQ29uZmlndXJhYmxlRXhjbHVkZWRGaWxlc1RhZyAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJhbnRXb3Jrc3BhY2VDb25maWd1cmF0aW9uIj4KLSAgICA8b3B0aW9uIG5hbWU9IklTX0FVVE9TQ1JPTExfVE9fU09VUkNFIiB2YWx1ZT0iZmFsc2UiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJGSUxURVJfVEFSR0VUUyIgdmFsdWU9ImZhbHNlIiAvPgotICA8L2NvbXBvbmVudD4KLSAgPGNvbXBvbmVudCBuYW1lPSJjb20uaW50ZWxsaWouaWRlLnV0aWwuc2NvcGVDaG9vc2VyLlNjb3BlQ2hvb3NlckNvbmZpZ3VyYWJsZSIgcHJvcG9ydGlvbnM9IiIgdmVyc2lvbj0iMSI+Ci0gICAgPG9wdGlvbiBuYW1lPSJteUxhc3RFZGl0ZWRDb25maWd1cmFibGUiIC8+Ci0gIDwvY29tcG9uZW50PgotICA8Y29tcG9uZW50IG5hbWU9ImNvbS5pbnRlbGxpai5qc2YuVXNlckRlZmluZWRGYWNlc0NvbmZpZ3MiPgotICAgIDxvcHRpb24gbmFtZT0iVVNFUl9ERUZJTkVEX0NPTkZJR1MiPgotICAgICAgPHZhbHVlPgotICAgICAgICA8bGlzdCBzaXplPSIwIiAvPgotICAgICAgPC92YWx1ZT4KLSAgICA8L29wdGlvbj4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iY29tLmludGVsbGlqLm9wZW5hcGkucm9vdHMudWkuY29uZmlndXJhdGlvbi5wcm9qZWN0Um9vdC5Qcm9qZWN0Um9vdE1hc3RlckRldGFpbHNDb25maWd1cmFibGUiIHByb3BvcnRpb25zPSIiIHZlcnNpb249IjEiPgotICAgIDxvcHRpb24gbmFtZT0ibXlQbGFpbk1vZGUiIHZhbHVlPSJmYWxzZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9Im15TGFzdEVkaXRlZENvbmZpZ3VyYWJsZSIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0iY29tLmludGVsbGlqLnByb2ZpbGUudWkuRXJyb3JPcHRpb25zQ29uZmlndXJhYmxlIiBwcm9wb3J0aW9ucz0iIiB2ZXJzaW9uPSIxIj4KLSAgICA8b3B0aW9uIG5hbWU9Im15TGFzdEVkaXRlZENvbmZpZ3VyYWJsZSIgLz4KLSAgPC9jb21wb25lbnQ+Ci0gIDxjb21wb25lbnQgbmFtZT0idWlkZXNpZ25lci1jb25maWd1cmF0aW9uIj4KLSAgICA8b3B0aW9uIG5hbWU9IklOU1RSVU1FTlRfQ0xBU1NFUyIgdmFsdWU9InRydWUiIC8+Ci0gICAgPG9wdGlvbiBuYW1lPSJDT1BZX0ZPUk1TX1JVTlRJTUVfVE9fT1VUUFVUIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICA8b3B0aW9uIG5hbWU9IkRFRkFVTFRfTEFZT1VUX01BTkFHRVIiIHZhbHVlPSJHcmlkTGF5b3V0TWFuYWdlciIgLz4KLSAgPC9jb21wb25lbnQ+Ci08L3Byb2plY3Q+Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQvc29ydHRhYmxlLmpzIGIvdG9vbHMvcHJlbG9hZC9zb3J0dGFibGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YmNjYjIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcHJlbG9hZC9zb3J0dGFibGUuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0OTMgKzAsMCBAQAotLyoKLSAgU29ydFRhYmxlCi0gIHZlcnNpb24gMgotICA3dGggQXByaWwgMjAwNwotICBTdHVhcnQgTGFuZ3JpZGdlLCBodHRwOi8vd3d3LmtyeW9nZW5peC5vcmcvY29kZS9icm93c2VyL3NvcnR0YWJsZS8KLSAgCi0gIEluc3RydWN0aW9uczoKLSAgRG93bmxvYWQgdGhpcyBmaWxlCi0gIEFkZCA8c2NyaXB0IHNyYz0ic29ydHRhYmxlLmpzIj48L3NjcmlwdD4gdG8geW91ciBIVE1MCi0gIEFkZCBjbGFzcz0ic29ydGFibGUiIHRvIGFueSB0YWJsZSB5b3UnZCBsaWtlIHRvIG1ha2Ugc29ydGFibGUKLSAgQ2xpY2sgb24gdGhlIGhlYWRlcnMgdG8gc29ydAotICAKLSAgVGhhbmtzIHRvIG1hbnksIG1hbnkgcGVvcGxlIGZvciBjb250cmlidXRpb25zIGFuZCBzdWdnZXN0aW9ucy4KLSAgTGljZW5jZWQgYXMgWDExOiBodHRwOi8vd3d3LmtyeW9nZW5peC5vcmcvY29kZS9icm93c2VyL2xpY2VuY2UuaHRtbAotICBUaGlzIGJhc2ljYWxseSBtZWFuczogZG8gd2hhdCB5b3Ugd2FudCB3aXRoIGl0LgotKi8KLQotIAotdmFyIHN0SXNJRSA9IC8qQGNjX29uIUAqL2ZhbHNlOwotCi1zb3J0dGFibGUgPSB7Ci0gIGluaXQ6IGZ1bmN0aW9uKCkgewotICAgIC8vIHF1aXQgaWYgdGhpcyBmdW5jdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZAotICAgIGlmIChhcmd1bWVudHMuY2FsbGVlLmRvbmUpIHJldHVybjsKLSAgICAvLyBmbGFnIHRoaXMgZnVuY3Rpb24gc28gd2UgZG9uJ3QgZG8gdGhlIHNhbWUgdGhpbmcgdHdpY2UKLSAgICBhcmd1bWVudHMuY2FsbGVlLmRvbmUgPSB0cnVlOwotICAgIC8vIGtpbGwgdGhlIHRpbWVyCi0gICAgaWYgKF90aW1lcikgY2xlYXJJbnRlcnZhbChfdGltZXIpOwotICAgIAotICAgIGlmICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpIHJldHVybjsKLSAgICAKLSAgICBzb3J0dGFibGUuREFURV9SRSA9IC9eKFxkXGQ/KVtcL1wuLV0oXGRcZD8pW1wvXC4tXSgoXGRcZCk/XGRcZCkkLzsKLSAgICAKLSAgICBmb3JFYWNoKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0YWJsZScpLCBmdW5jdGlvbih0YWJsZSkgewotICAgICAgaWYgKHRhYmxlLmNsYXNzTmFtZS5zZWFyY2goL1xic29ydGFibGVcYi8pICE9IC0xKSB7Ci0gICAgICAgIHNvcnR0YWJsZS5tYWtlU29ydGFibGUodGFibGUpOwotICAgICAgfQotICAgIH0pOwotICAgIAotICB9LAotICAKLSAgbWFrZVNvcnRhYmxlOiBmdW5jdGlvbih0YWJsZSkgewotICAgIGlmICh0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGhlYWQnKS5sZW5ndGggPT0gMCkgewotICAgICAgLy8gdGFibGUgZG9lc24ndCBoYXZlIGEgdEhlYWQuIFNpbmNlIGl0IHNob3VsZCBoYXZlLCBjcmVhdGUgb25lIGFuZAotICAgICAgLy8gcHV0IHRoZSBmaXJzdCB0YWJsZSByb3cgaW4gaXQuCi0gICAgICB0aGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aGVhZCcpOwotICAgICAgdGhlLmFwcGVuZENoaWxkKHRhYmxlLnJvd3NbMF0pOwotICAgICAgdGFibGUuaW5zZXJ0QmVmb3JlKHRoZSx0YWJsZS5maXJzdENoaWxkKTsKLSAgICB9Ci0gICAgLy8gU2FmYXJpIGRvZXNuJ3Qgc3VwcG9ydCB0YWJsZS50SGVhZCwgc2lnaAotICAgIGlmICh0YWJsZS50SGVhZCA9PSBudWxsKSB0YWJsZS50SGVhZCA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0aGVhZCcpWzBdOwotICAgIAotICAgIGlmICh0YWJsZS50SGVhZC5yb3dzLmxlbmd0aCAhPSAxKSByZXR1cm47IC8vIGNhbid0IGNvcGUgd2l0aCB0d28gaGVhZGVyIHJvd3MKLSAgICAKLSAgICAvLyBTb3J0dGFibGUgdjEgcHV0IHJvd3Mgd2l0aCBhIGNsYXNzIG9mICJzb3J0Ym90dG9tIiBhdCB0aGUgYm90dG9tIChhcwotICAgIC8vICJ0b3RhbCIgcm93cywgZm9yIGV4YW1wbGUpLiBUaGlzIGlzIEImUiwgc2luY2Ugd2hhdCB5b3UncmUgc3VwcG9zZWQKLSAgICAvLyB0byBkbyBpcyBwdXQgdGhlbSBpbiBhIHRmb290LiBTbywgaWYgdGhlcmUgYXJlIHNvcnRib3R0b20gcm93cywKLSAgICAvLyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIG1vdmUgdGhlbSB0byB0Zm9vdCAoY3JlYXRpbmcgaXQgaWYgbmVlZGVkKS4KLSAgICBzb3J0Ym90dG9tcm93cyA9IFtdOwotICAgIGZvciAodmFyIGk9MDsgaTx0YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAodGFibGUucm93c1tpXS5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnRib3R0b21cYi8pICE9IC0xKSB7Ci0gICAgICAgIHNvcnRib3R0b21yb3dzW3NvcnRib3R0b21yb3dzLmxlbmd0aF0gPSB0YWJsZS5yb3dzW2ldOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoc29ydGJvdHRvbXJvd3MpIHsKLSAgICAgIGlmICh0YWJsZS50Rm9vdCA9PSBudWxsKSB7Ci0gICAgICAgIC8vIHRhYmxlIGRvZXNuJ3QgaGF2ZSBhIHRmb290LiBDcmVhdGUgb25lLgotICAgICAgICB0Zm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0Zm9vdCcpOwotICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0Zm8pOwotICAgICAgfQotICAgICAgZm9yICh2YXIgaT0wOyBpPHNvcnRib3R0b21yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHRmby5hcHBlbmRDaGlsZChzb3J0Ym90dG9tcm93c1tpXSk7Ci0gICAgICB9Ci0gICAgICBkZWxldGUgc29ydGJvdHRvbXJvd3M7Ci0gICAgfQotICAgIAotICAgIC8vIHdvcmsgdGhyb3VnaCBlYWNoIGNvbHVtbiBhbmQgY2FsY3VsYXRlIGl0cyB0eXBlCi0gICAgaGVhZHJvdyA9IHRhYmxlLnRIZWFkLnJvd3NbMF0uY2VsbHM7Ci0gICAgZm9yICh2YXIgaT0wOyBpPGhlYWRyb3cubGVuZ3RoOyBpKyspIHsKLSAgICAgIC8vIG1hbnVhbGx5IG92ZXJyaWRlIHRoZSB0eXBlIHdpdGggYSBzb3J0dGFibGVfdHlwZSBhdHRyaWJ1dGUKLSAgICAgIGlmICghaGVhZHJvd1tpXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlX25vc29ydFxiLykpIHsgLy8gc2tpcCB0aGlzIGNvbAotICAgICAgICBtdGNoID0gaGVhZHJvd1tpXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlXyhbYS16MC05XSspXGIvKTsKLSAgICAgICAgaWYgKG10Y2gpIHsgb3ZlcnJpZGUgPSBtdGNoWzFdOyB9Ci0JICAgICAgaWYgKG10Y2ggJiYgdHlwZW9mIHNvcnR0YWJsZVsic29ydF8iK292ZXJyaWRlXSA9PSAnZnVuY3Rpb24nKSB7Ci0JICAgICAgICBoZWFkcm93W2ldLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24gPSBzb3J0dGFibGVbInNvcnRfIitvdmVycmlkZV07Ci0JICAgICAgfSBlbHNlIHsKLQkgICAgICAgIGhlYWRyb3dbaV0uc29ydHRhYmxlX3NvcnRmdW5jdGlvbiA9IHNvcnR0YWJsZS5ndWVzc1R5cGUodGFibGUsaSk7Ci0JICAgICAgfQotCSAgICAgIC8vIG1ha2UgaXQgY2xpY2thYmxlIHRvIHNvcnQKLQkgICAgICBoZWFkcm93W2ldLnNvcnR0YWJsZV9jb2x1bW5pbmRleCA9IGk7Ci0JICAgICAgaGVhZHJvd1tpXS5zb3J0dGFibGVfdGJvZHkgPSB0YWJsZS50Qm9kaWVzWzBdOwotCSAgICAgIGRlYW5fYWRkRXZlbnQoaGVhZHJvd1tpXSwiY2xpY2siLCBmdW5jdGlvbihlKSB7Ci0KLSAgICAgICAgICBpZiAodGhpcy5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnR0YWJsZV9zb3J0ZWRcYi8pICE9IC0xKSB7Ci0gICAgICAgICAgICAvLyBpZiB3ZSdyZSBhbHJlYWR5IHNvcnRlZCBieSB0aGlzIGNvbHVtbiwganVzdCAKLSAgICAgICAgICAgIC8vIHJldmVyc2UgdGhlIHRhYmxlLCB3aGljaCBpcyBxdWlja2VyCi0gICAgICAgICAgICBzb3J0dGFibGUucmV2ZXJzZSh0aGlzLnNvcnR0YWJsZV90Ym9keSk7Ci0gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3J0dGFibGVfc29ydGVkX3JldmVyc2UnKTsKLSAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvcnR0YWJsZV9zb3J0ZndkaW5kJykpOwotICAgICAgICAgICAgc29ydHJldmluZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKLSAgICAgICAgICAgIHNvcnRyZXZpbmQuaWQgPSAic29ydHRhYmxlX3NvcnRyZXZpbmQiOwotICAgICAgICAgICAgc29ydHJldmluZC5pbm5lckhUTUwgPSBzdElzSUUgPyAnJm5ic3A8Zm9udCBmYWNlPSJ3ZWJkaW5ncyI+NTwvZm9udD4nIDogJyZuYnNwOyYjeDI1QjQ7JzsKLSAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoc29ydHJldmluZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICh0aGlzLmNsYXNzTmFtZS5zZWFyY2goL1xic29ydHRhYmxlX3NvcnRlZF9yZXZlcnNlXGIvKSAhPSAtMSkgewotICAgICAgICAgICAgLy8gaWYgd2UncmUgYWxyZWFkeSBzb3J0ZWQgYnkgdGhpcyBjb2x1bW4gaW4gcmV2ZXJzZSwganVzdCAKLSAgICAgICAgICAgIC8vIHJlLXJldmVyc2UgdGhlIHRhYmxlLCB3aGljaCBpcyBxdWlja2VyCi0gICAgICAgICAgICBzb3J0dGFibGUucmV2ZXJzZSh0aGlzLnNvcnR0YWJsZV90Ym9keSk7Ci0gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvcnR0YWJsZV9zb3J0ZWQnKTsKLSAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvcnR0YWJsZV9zb3J0cmV2aW5kJykpOwotICAgICAgICAgICAgc29ydGZ3ZGluZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKLSAgICAgICAgICAgIHNvcnRmd2RpbmQuaWQgPSAic29ydHRhYmxlX3NvcnRmd2RpbmQiOwotICAgICAgICAgICAgc29ydGZ3ZGluZC5pbm5lckhUTUwgPSBzdElzSUUgPyAnJm5ic3A8Zm9udCBmYWNlPSJ3ZWJkaW5ncyI+NjwvZm9udD4nIDogJyZuYnNwOyYjeDI1QkU7JzsKLSAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoc29ydGZ3ZGluZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIC8vIHJlbW92ZSBzb3J0dGFibGVfc29ydGVkIGNsYXNzZXMKLSAgICAgICAgICB0aGVhZHJvdyA9IHRoaXMucGFyZW50Tm9kZTsKLSAgICAgICAgICBmb3JFYWNoKHRoZWFkcm93LmNoaWxkTm9kZXMsIGZ1bmN0aW9uKGNlbGwpIHsKLSAgICAgICAgICAgIGlmIChjZWxsLm5vZGVUeXBlID09IDEpIHsgLy8gYW4gZWxlbWVudAotICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9IGNlbGwuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZScsJycpOwotICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9IGNlbGwuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWQnLCcnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9KTsKLSAgICAgICAgICBzb3J0ZndkaW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvcnR0YWJsZV9zb3J0ZndkaW5kJyk7Ci0gICAgICAgICAgaWYgKHNvcnRmd2RpbmQpIHsgc29ydGZ3ZGluZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNvcnRmd2RpbmQpOyB9Ci0gICAgICAgICAgc29ydHJldmluZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3J0dGFibGVfc29ydHJldmluZCcpOwotICAgICAgICAgIGlmIChzb3J0cmV2aW5kKSB7IHNvcnRyZXZpbmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzb3J0cmV2aW5kKTsgfQotICAgICAgICAgIAotICAgICAgICAgIHRoaXMuY2xhc3NOYW1lICs9ICcgc29ydHRhYmxlX3NvcnRlZCc7Ci0gICAgICAgICAgc29ydGZ3ZGluZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKLSAgICAgICAgICBzb3J0ZndkaW5kLmlkID0gInNvcnR0YWJsZV9zb3J0ZndkaW5kIjsKLSAgICAgICAgICBzb3J0ZndkaW5kLmlubmVySFRNTCA9IHN0SXNJRSA/ICcmbmJzcDxmb250IGZhY2U9IndlYmRpbmdzIj42PC9mb250PicgOiAnJm5ic3A7JiN4MjVCRTsnOwotICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoc29ydGZ3ZGluZCk7Ci0KLQkgICAgICAgIC8vIGJ1aWxkIGFuIGFycmF5IHRvIHNvcnQuIFRoaXMgaXMgYSBTY2h3YXJ0emlhbiB0cmFuc2Zvcm0gdGhpbmcsCi0JICAgICAgICAvLyBpLmUuLCB3ZSAiZGVjb3JhdGUiIGVhY2ggcm93IHdpdGggdGhlIGFjdHVhbCBzb3J0IGtleSwKLQkgICAgICAgIC8vIHNvcnQgYmFzZWQgb24gdGhlIHNvcnQga2V5cywgYW5kIHRoZW4gcHV0IHRoZSByb3dzIGJhY2sgaW4gb3JkZXIKLQkgICAgICAgIC8vIHdoaWNoIGlzIGEgbG90IGZhc3RlciBiZWNhdXNlIHlvdSBvbmx5IGRvIGdldElubmVyVGV4dCBvbmNlIHBlciByb3cKLQkgICAgICAgIHJvd19hcnJheSA9IFtdOwotCSAgICAgICAgY29sID0gdGhpcy5zb3J0dGFibGVfY29sdW1uaW5kZXg7Ci0JICAgICAgICByb3dzID0gdGhpcy5zb3J0dGFibGVfdGJvZHkucm93czsKLQkgICAgICAgIGZvciAodmFyIGo9MDsgajxyb3dzLmxlbmd0aDsgaisrKSB7Ci0JICAgICAgICAgIHJvd19hcnJheVtyb3dfYXJyYXkubGVuZ3RoXSA9IFtzb3J0dGFibGUuZ2V0SW5uZXJUZXh0KHJvd3Nbal0uY2VsbHNbY29sXSksIHJvd3Nbal1dOwotCSAgICAgICAgfQotCSAgICAgICAgLyogSWYgeW91IHdhbnQgYSBzdGFibGUgc29ydCwgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSAqLwotCSAgICAgICAgLy9zb3J0dGFibGUuc2hha2VyX3NvcnQocm93X2FycmF5LCB0aGlzLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24pOwotCSAgICAgICAgLyogYW5kIGNvbW1lbnQgb3V0IHRoaXMgb25lICovCi0JICAgICAgICByb3dfYXJyYXkuc29ydCh0aGlzLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24pOwotCSAgICAgICAgCi0JICAgICAgICB0YiA9IHRoaXMuc29ydHRhYmxlX3Rib2R5OwotCSAgICAgICAgZm9yICh2YXIgaj0wOyBqPHJvd19hcnJheS5sZW5ndGg7IGorKykgewotCSAgICAgICAgICB0Yi5hcHBlbmRDaGlsZChyb3dfYXJyYXlbal1bMV0pOwotCSAgICAgICAgfQotCSAgICAgICAgCi0JICAgICAgICBkZWxldGUgcm93X2FycmF5OwotCSAgICAgIH0pOwotCSAgICB9Ci0gICAgfQotICB9LAotICAKLSAgZ3Vlc3NUeXBlOiBmdW5jdGlvbih0YWJsZSwgY29sdW1uKSB7Ci0gICAgLy8gZ3Vlc3MgdGhlIHR5cGUgb2YgYSBjb2x1bW4gYmFzZWQgb24gaXRzIGZpcnN0IG5vbi1ibGFuayByb3cKLSAgICBzb3J0Zm4gPSBzb3J0dGFibGUuc29ydF9hbHBoYTsKLSAgICBmb3IgKHZhciBpPTA7IGk8dGFibGUudEJvZGllc1swXS5yb3dzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB0ZXh0ID0gc29ydHRhYmxlLmdldElubmVyVGV4dCh0YWJsZS50Qm9kaWVzWzBdLnJvd3NbaV0uY2VsbHNbY29sdW1uXSk7Ci0gICAgICBpZiAodGV4dCAhPSAnJykgewotICAgICAgICBpZiAodGV4dC5tYXRjaCgvXi0/W6MkpF0/W1xkLC5dKyU/JC8pKSB7Ci0gICAgICAgICAgcmV0dXJuIHNvcnR0YWJsZS5zb3J0X251bWVyaWM7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gY2hlY2sgZm9yIGEgZGF0ZTogZGQvbW0veXl5eSBvciBkZC9tbS95eSAKLSAgICAgICAgLy8gY2FuIGhhdmUgLyBvciAuIG9yIC0gYXMgc2VwYXJhdG9yCi0gICAgICAgIC8vIGNhbiBiZSBtbS9kZCBhcyB3ZWxsCi0gICAgICAgIHBvc3NkYXRlID0gdGV4dC5tYXRjaChzb3J0dGFibGUuREFURV9SRSkKLSAgICAgICAgaWYgKHBvc3NkYXRlKSB7Ci0gICAgICAgICAgLy8gbG9va3MgbGlrZSBhIGRhdGUKLSAgICAgICAgICBmaXJzdCA9IHBhcnNlSW50KHBvc3NkYXRlWzFdKTsKLSAgICAgICAgICBzZWNvbmQgPSBwYXJzZUludChwb3NzZGF0ZVsyXSk7Ci0gICAgICAgICAgaWYgKGZpcnN0ID4gMTIpIHsKLSAgICAgICAgICAgIC8vIGRlZmluaXRlbHkgZGQvbW0KLSAgICAgICAgICAgIHJldHVybiBzb3J0dGFibGUuc29ydF9kZG1tOwotICAgICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kID4gMTIpIHsKLSAgICAgICAgICAgIHJldHVybiBzb3J0dGFibGUuc29ydF9tbWRkOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBsb29rcyBsaWtlIGEgZGF0ZSwgYnV0IHdlIGNhbid0IHRlbGwgd2hpY2gsIHNvIGFzc3VtZQotICAgICAgICAgICAgLy8gdGhhdCBpdCdzIGRkL21tIChFbmdsaXNoIGltcGVyaWFsaXNtISkgYW5kIGtlZXAgbG9va2luZwotICAgICAgICAgICAgc29ydGZuID0gc29ydHRhYmxlLnNvcnRfZGRtbTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNvcnRmbjsKLSAgfSwKLSAgCi0gIGdldElubmVyVGV4dDogZnVuY3Rpb24obm9kZSkgewotICAgIC8vIGdldHMgdGhlIHRleHQgd2Ugd2FudCB0byB1c2UgZm9yIHNvcnRpbmcgZm9yIGEgY2VsbC4KLSAgICAvLyBzdHJpcHMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4KLSAgICAvLyB0aGlzIGlzICpub3QqIGEgZ2VuZXJpYyBnZXRJbm5lclRleHQgZnVuY3Rpb247IGl0J3Mgc3BlY2lhbCB0byBzb3J0dGFibGUuCi0gICAgLy8gZm9yIGV4YW1wbGUsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGNlbGwgdGV4dCB3aXRoIGEgY3VzdG9ta2V5IGF0dHJpYnV0ZS4KLSAgICAvLyBpdCBhbHNvIGdldHMgLnZhbHVlIGZvciA8aW5wdXQ+IGZpZWxkcy4KLSAgICAKLSAgICBoYXNJbnB1dHMgPSAodHlwZW9mIG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPT0gJ2Z1bmN0aW9uJykgJiYKLSAgICAgICAgICAgICAgICAgbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKS5sZW5ndGg7Ci0gICAgCi0gICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKCJzb3J0dGFibGVfY3VzdG9ta2V5IikgIT0gbnVsbCkgewotICAgICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKCJzb3J0dGFibGVfY3VzdG9ta2V5Iik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGVvZiBub2RlLnRleHRDb250ZW50ICE9ICd1bmRlZmluZWQnICYmICFoYXNJbnB1dHMpIHsKLSAgICAgIHJldHVybiBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGVvZiBub2RlLmlubmVyVGV4dCAhPSAndW5kZWZpbmVkJyAmJiAhaGFzSW5wdXRzKSB7Ci0gICAgICByZXR1cm4gbm9kZS5pbm5lclRleHQucmVwbGFjZSgvXlxzK3xccyskL2csICcnKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZW9mIG5vZGUudGV4dCAhPSAndW5kZWZpbmVkJyAmJiAhaGFzSW5wdXRzKSB7Ci0gICAgICByZXR1cm4gbm9kZS50ZXh0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09ICdpbnB1dCcpIHsKLSAgICAgICAgICAgIHJldHVybiBub2RlLnZhbHVlLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7Ci0gICAgICAgICAgfQotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgcmV0dXJuIG5vZGUubm9kZVZhbHVlLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgY2FzZSAxMToKLSAgICAgICAgICB2YXIgaW5uZXJUZXh0ID0gJyc7Ci0gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlubmVyVGV4dCArPSBzb3J0dGFibGUuZ2V0SW5uZXJUZXh0KG5vZGUuY2hpbGROb2Rlc1tpXSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBpbm5lclRleHQucmVwbGFjZSgvXlxzK3xccyskL2csICcnKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4gJyc7Ci0gICAgICB9Ci0gICAgfQotICB9LAotICAKLSAgcmV2ZXJzZTogZnVuY3Rpb24odGJvZHkpIHsKLSAgICAvLyByZXZlcnNlIHRoZSByb3dzIGluIGEgdGJvZHkKLSAgICBuZXdyb3dzID0gW107Ci0gICAgZm9yICh2YXIgaT0wOyBpPHRib2R5LnJvd3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIG5ld3Jvd3NbbmV3cm93cy5sZW5ndGhdID0gdGJvZHkucm93c1tpXTsKLSAgICB9Ci0gICAgZm9yICh2YXIgaT1uZXdyb3dzLmxlbmd0aC0xOyBpPj0wOyBpLS0pIHsKLSAgICAgICB0Ym9keS5hcHBlbmRDaGlsZChuZXdyb3dzW2ldKTsKLSAgICB9Ci0gICAgZGVsZXRlIG5ld3Jvd3M7Ci0gIH0sCi0gIAotICAvKiBzb3J0IGZ1bmN0aW9ucwotICAgICBlYWNoIHNvcnQgZnVuY3Rpb24gdGFrZXMgdHdvIHBhcmFtZXRlcnMsIGEgYW5kIGIKLSAgICAgeW91IGFyZSBjb21wYXJpbmcgYVswXSBhbmQgYlswXSAqLwotICBzb3J0X251bWVyaWM6IGZ1bmN0aW9uKGEsYikgewotICAgIGFhID0gcGFyc2VGbG9hdChhWzBdLnJlcGxhY2UoL1teMC05Li1dL2csJycpKTsKLSAgICBpZiAoaXNOYU4oYWEpKSBhYSA9IDA7Ci0gICAgYmIgPSBwYXJzZUZsb2F0KGJbMF0ucmVwbGFjZSgvW14wLTkuLV0vZywnJykpOyAKLSAgICBpZiAoaXNOYU4oYmIpKSBiYiA9IDA7Ci0gICAgcmV0dXJuIGFhLWJiOwotICB9LAotICBzb3J0X2FscGhhOiBmdW5jdGlvbihhLGIpIHsKLSAgICBpZiAoYVswXT09YlswXSkgcmV0dXJuIDA7Ci0gICAgaWYgKGFbMF08YlswXSkgcmV0dXJuIC0xOwotICAgIHJldHVybiAxOwotICB9LAotICBzb3J0X2RkbW06IGZ1bmN0aW9uKGEsYikgewotICAgIG10Y2ggPSBhWzBdLm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKTsKLSAgICB5ID0gbXRjaFszXTsgbSA9IG10Y2hbMl07IGQgPSBtdGNoWzFdOwotICAgIGlmIChtLmxlbmd0aCA9PSAxKSBtID0gJzAnK207Ci0gICAgaWYgKGQubGVuZ3RoID09IDEpIGQgPSAnMCcrZDsKLSAgICBkdDEgPSB5K20rZDsKLSAgICBtdGNoID0gYlswXS5tYXRjaChzb3J0dGFibGUuREFURV9SRSk7Ci0gICAgeSA9IG10Y2hbM107IG0gPSBtdGNoWzJdOyBkID0gbXRjaFsxXTsKLSAgICBpZiAobS5sZW5ndGggPT0gMSkgbSA9ICcwJyttOwotICAgIGlmIChkLmxlbmd0aCA9PSAxKSBkID0gJzAnK2Q7Ci0gICAgZHQyID0geSttK2Q7Ci0gICAgaWYgKGR0MT09ZHQyKSByZXR1cm4gMDsKLSAgICBpZiAoZHQxPGR0MikgcmV0dXJuIC0xOwotICAgIHJldHVybiAxOwotICB9LAotICBzb3J0X21tZGQ6IGZ1bmN0aW9uKGEsYikgewotICAgIG10Y2ggPSBhWzBdLm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKTsKLSAgICB5ID0gbXRjaFszXTsgZCA9IG10Y2hbMl07IG0gPSBtdGNoWzFdOwotICAgIGlmIChtLmxlbmd0aCA9PSAxKSBtID0gJzAnK207Ci0gICAgaWYgKGQubGVuZ3RoID09IDEpIGQgPSAnMCcrZDsKLSAgICBkdDEgPSB5K20rZDsKLSAgICBtdGNoID0gYlswXS5tYXRjaChzb3J0dGFibGUuREFURV9SRSk7Ci0gICAgeSA9IG10Y2hbM107IGQgPSBtdGNoWzJdOyBtID0gbXRjaFsxXTsKLSAgICBpZiAobS5sZW5ndGggPT0gMSkgbSA9ICcwJyttOwotICAgIGlmIChkLmxlbmd0aCA9PSAxKSBkID0gJzAnK2Q7Ci0gICAgZHQyID0geSttK2Q7Ci0gICAgaWYgKGR0MT09ZHQyKSByZXR1cm4gMDsKLSAgICBpZiAoZHQxPGR0MikgcmV0dXJuIC0xOwotICAgIHJldHVybiAxOwotICB9LAotICAKLSAgc2hha2VyX3NvcnQ6IGZ1bmN0aW9uKGxpc3QsIGNvbXBfZnVuYykgewotICAgIC8vIEEgc3RhYmxlIHNvcnQgZnVuY3Rpb24gdG8gYWxsb3cgbXVsdGktbGV2ZWwgc29ydGluZyBvZiBkYXRhCi0gICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvY2t0YWlsX3NvcnQKLSAgICAvLyB0aGFua3MgdG8gSm9zZXBoIE5haG1pYXMKLSAgICB2YXIgYiA9IDA7Ci0gICAgdmFyIHQgPSBsaXN0Lmxlbmd0aCAtIDE7Ci0gICAgdmFyIHN3YXAgPSB0cnVlOwotCi0gICAgd2hpbGUoc3dhcCkgewotICAgICAgICBzd2FwID0gZmFsc2U7Ci0gICAgICAgIGZvcih2YXIgaSA9IGI7IGkgPCB0OyArK2kpIHsKLSAgICAgICAgICAgIGlmICggY29tcF9mdW5jKGxpc3RbaV0sIGxpc3RbaSsxXSkgPiAwICkgewotICAgICAgICAgICAgICAgIHZhciBxID0gbGlzdFtpXTsgbGlzdFtpXSA9IGxpc3RbaSsxXTsgbGlzdFtpKzFdID0gcTsKLSAgICAgICAgICAgICAgICBzd2FwID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAvLyBmb3IKLSAgICAgICAgdC0tOwotCi0gICAgICAgIGlmICghc3dhcCkgYnJlYWs7Ci0KLSAgICAgICAgZm9yKHZhciBpID0gdDsgaSA+IGI7IC0taSkgewotICAgICAgICAgICAgaWYgKCBjb21wX2Z1bmMobGlzdFtpXSwgbGlzdFtpLTFdKSA8IDAgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHEgPSBsaXN0W2ldOyBsaXN0W2ldID0gbGlzdFtpLTFdOyBsaXN0W2ktMV0gPSBxOwotICAgICAgICAgICAgICAgIHN3YXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IC8vIGZvcgotICAgICAgICBiKys7Ci0KLSAgICB9IC8vIHdoaWxlKHN3YXApCi0gIH0gIAotfQotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgIFN1cHBvcnRpbmcgZnVuY3Rpb25zOiBidW5kbGVkIGhlcmUgdG8gYXZvaWQgZGVwZW5kaW5nIG9uIGEgbGlicmFyeQotICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8vIERlYW4gRWR3YXJkcy9NYXR0aGlhcyBNaWxsZXIvSm9obiBSZXNpZwotCi0vKiBmb3IgTW96aWxsYS9PcGVyYTkgKi8KLWlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7Ci0gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIHNvcnR0YWJsZS5pbml0LCBmYWxzZSk7Ci19Ci0KLS8qIGZvciBJbnRlcm5ldCBFeHBsb3JlciAqLwotLypAY2Nfb24gQCovCi0vKkBpZiAoQF93aW4zMikKLSAgICBkb2N1bWVudC53cml0ZSgiPHNjcmlwdCBpZD1fX2llX29ubG9hZCBkZWZlciBzcmM9amF2YXNjcmlwdDp2b2lkKDApPjxcL3NjcmlwdD4iKTsKLSAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIl9faWVfb25sb2FkIik7Ci0gICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09ICJjb21wbGV0ZSIpIHsKLSAgICAgICAgICAgIHNvcnR0YWJsZS5pbml0KCk7IC8vIGNhbGwgdGhlIG9ubG9hZCBoYW5kbGVyCi0gICAgICAgIH0KLSAgICB9OwotLypAZW5kIEAqLwotCi0vKiBmb3IgU2FmYXJpICovCi1pZiAoL1dlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHsgLy8gc25pZmYKLSAgICB2YXIgX3RpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICgvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGRvY3VtZW50LnJlYWR5U3RhdGUpKSB7Ci0gICAgICAgICAgICBzb3J0dGFibGUuaW5pdCgpOyAvLyBjYWxsIHRoZSBvbmxvYWQgaGFuZGxlcgotICAgICAgICB9Ci0gICAgfSwgMTApOwotfQotCi0vKiBmb3Igb3RoZXIgYnJvd3NlcnMgKi8KLXdpbmRvdy5vbmxvYWQgPSBzb3J0dGFibGUuaW5pdDsKLQotLy8gd3JpdHRlbiBieSBEZWFuIEVkd2FyZHMsIDIwMDUKLS8vIHdpdGggaW5wdXQgZnJvbSBUaW5vIFppamRlbCwgTWF0dGhpYXMgTWlsbGVyLCBEaWVnbyBQZXJpbmkKLQotLy8gaHR0cDovL2RlYW4uZWR3YXJkcy5uYW1lL3dlYmxvZy8yMDA1LzEwL2FkZC1ldmVudC8KLQotZnVuY3Rpb24gZGVhbl9hZGRFdmVudChlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7Ci0JaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewotCQllbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpOwotCX0gZWxzZSB7Ci0JCS8vIGFzc2lnbiBlYWNoIGV2ZW50IGhhbmRsZXIgYSB1bmlxdWUgSUQKLQkJaWYgKCFoYW5kbGVyLiQkZ3VpZCkgaGFuZGxlci4kJGd1aWQgPSBkZWFuX2FkZEV2ZW50Lmd1aWQrKzsKLQkJLy8gY3JlYXRlIGEgaGFzaCB0YWJsZSBvZiBldmVudCB0eXBlcyBmb3IgdGhlIGVsZW1lbnQKLQkJaWYgKCFlbGVtZW50LmV2ZW50cykgZWxlbWVudC5ldmVudHMgPSB7fTsKLQkJLy8gY3JlYXRlIGEgaGFzaCB0YWJsZSBvZiBldmVudCBoYW5kbGVycyBmb3IgZWFjaCBlbGVtZW50L2V2ZW50IHBhaXIKLQkJdmFyIGhhbmRsZXJzID0gZWxlbWVudC5ldmVudHNbdHlwZV07Ci0JCWlmICghaGFuZGxlcnMpIHsKLQkJCWhhbmRsZXJzID0gZWxlbWVudC5ldmVudHNbdHlwZV0gPSB7fTsKLQkJCS8vIHN0b3JlIHRoZSBleGlzdGluZyBldmVudCBoYW5kbGVyIChpZiB0aGVyZSBpcyBvbmUpCi0JCQlpZiAoZWxlbWVudFsib24iICsgdHlwZV0pIHsKLQkJCQloYW5kbGVyc1swXSA9IGVsZW1lbnRbIm9uIiArIHR5cGVdOwotCQkJfQotCQl9Ci0JCS8vIHN0b3JlIHRoZSBldmVudCBoYW5kbGVyIGluIHRoZSBoYXNoIHRhYmxlCi0JCWhhbmRsZXJzW2hhbmRsZXIuJCRndWlkXSA9IGhhbmRsZXI7Ci0JCS8vIGFzc2lnbiBhIGdsb2JhbCBldmVudCBoYW5kbGVyIHRvIGRvIGFsbCB0aGUgd29yawotCQllbGVtZW50WyJvbiIgKyB0eXBlXSA9IGhhbmRsZUV2ZW50OwotCX0KLX07Ci0vLyBhIGNvdW50ZXIgdXNlZCB0byBjcmVhdGUgdW5pcXVlIElEcwotZGVhbl9hZGRFdmVudC5ndWlkID0gMTsKLQotZnVuY3Rpb24gcmVtb3ZlRXZlbnQoZWxlbWVudCwgdHlwZSwgaGFuZGxlcikgewotCWlmIChlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHsKLQkJZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTsKLQl9IGVsc2UgewotCQkvLyBkZWxldGUgdGhlIGV2ZW50IGhhbmRsZXIgZnJvbSB0aGUgaGFzaCB0YWJsZQotCQlpZiAoZWxlbWVudC5ldmVudHMgJiYgZWxlbWVudC5ldmVudHNbdHlwZV0pIHsKLQkJCWRlbGV0ZSBlbGVtZW50LmV2ZW50c1t0eXBlXVtoYW5kbGVyLiQkZ3VpZF07Ci0JCX0KLQl9Ci19OwotCi1mdW5jdGlvbiBoYW5kbGVFdmVudChldmVudCkgewotCXZhciByZXR1cm5WYWx1ZSA9IHRydWU7Ci0JLy8gZ3JhYiB0aGUgZXZlbnQgb2JqZWN0IChJRSB1c2VzIGEgZ2xvYmFsIGV2ZW50IG9iamVjdCkKLQlldmVudCA9IGV2ZW50IHx8IGZpeEV2ZW50KCgodGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcykucGFyZW50V2luZG93IHx8IHdpbmRvdykuZXZlbnQpOwotCS8vIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgaGFzaCB0YWJsZSBvZiBldmVudCBoYW5kbGVycwotCXZhciBoYW5kbGVycyA9IHRoaXMuZXZlbnRzW2V2ZW50LnR5cGVdOwotCS8vIGV4ZWN1dGUgZWFjaCBldmVudCBoYW5kbGVyCi0JZm9yICh2YXIgaSBpbiBoYW5kbGVycykgewotCQl0aGlzLiQkaGFuZGxlRXZlbnQgPSBoYW5kbGVyc1tpXTsKLQkJaWYgKHRoaXMuJCRoYW5kbGVFdmVudChldmVudCkgPT09IGZhbHNlKSB7Ci0JCQlyZXR1cm5WYWx1ZSA9IGZhbHNlOwotCQl9Ci0JfQotCXJldHVybiByZXR1cm5WYWx1ZTsKLX07Ci0KLWZ1bmN0aW9uIGZpeEV2ZW50KGV2ZW50KSB7Ci0JLy8gYWRkIFczQyBzdGFuZGFyZCBldmVudCBtZXRob2RzCi0JZXZlbnQucHJldmVudERlZmF1bHQgPSBmaXhFdmVudC5wcmV2ZW50RGVmYXVsdDsKLQlldmVudC5zdG9wUHJvcGFnYXRpb24gPSBmaXhFdmVudC5zdG9wUHJvcGFnYXRpb247Ci0JcmV0dXJuIGV2ZW50OwotfTsKLWZpeEV2ZW50LnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7Ci0JdGhpcy5yZXR1cm5WYWx1ZSA9IGZhbHNlOwotfTsKLWZpeEV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgewotICB0aGlzLmNhbmNlbEJ1YmJsZSA9IHRydWU7Ci19Ci0KLS8vIERlYW4ncyBmb3JFYWNoOiBodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvYmFzZS9mb3JFYWNoLmpzCi0vKgotCWZvckVhY2gsIHZlcnNpb24gMS4wCi0JQ29weXJpZ2h0IDIwMDYsIERlYW4gRWR3YXJkcwotCUxpY2Vuc2U6IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCi0qLwotCi0vLyBhcnJheS1saWtlIGVudW1lcmF0aW9uCi1pZiAoIUFycmF5LmZvckVhY2gpIHsgLy8gbW96aWxsYSBhbHJlYWR5IHN1cHBvcnRzIHRoaXMKLQlBcnJheS5mb3JFYWNoID0gZnVuY3Rpb24oYXJyYXksIGJsb2NrLCBjb250ZXh0KSB7Ci0JCWZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKLQkJCWJsb2NrLmNhbGwoY29udGV4dCwgYXJyYXlbaV0sIGksIGFycmF5KTsKLQkJfQotCX07Ci19Ci0KLS8vIGdlbmVyaWMgZW51bWVyYXRpb24KLUZ1bmN0aW9uLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24ob2JqZWN0LCBibG9jaywgY29udGV4dCkgewotCWZvciAodmFyIGtleSBpbiBvYmplY3QpIHsKLQkJaWYgKHR5cGVvZiB0aGlzLnByb3RvdHlwZVtrZXldID09ICJ1bmRlZmluZWQiKSB7Ci0JCQlibG9jay5jYWxsKGNvbnRleHQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7Ci0JCX0KLQl9Ci19OwotCi0vLyBjaGFyYWN0ZXIgZW51bWVyYXRpb24KLVN0cmluZy5mb3JFYWNoID0gZnVuY3Rpb24oc3RyaW5nLCBibG9jaywgY29udGV4dCkgewotCUFycmF5LmZvckVhY2goc3RyaW5nLnNwbGl0KCIiKSwgZnVuY3Rpb24oY2hyLCBpbmRleCkgewotCQlibG9jay5jYWxsKGNvbnRleHQsIGNociwgaW5kZXgsIHN0cmluZyk7Ci0JfSk7Ci19OwotCi0vLyBnbG9iYWxseSByZXNvbHZlIGZvckVhY2ggZW51bWVyYXRpb24KLXZhciBmb3JFYWNoID0gZnVuY3Rpb24ob2JqZWN0LCBibG9jaywgY29udGV4dCkgewotCWlmIChvYmplY3QpIHsKLQkJdmFyIHJlc29sdmUgPSBPYmplY3Q7IC8vIGRlZmF1bHQKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7Ci0JCQkvLyBmdW5jdGlvbnMgaGF2ZSBhICJsZW5ndGgiIHByb3BlcnR5Ci0JCQlyZXNvbHZlID0gRnVuY3Rpb247Ci0JCX0gZWxzZSBpZiAob2JqZWN0LmZvckVhY2ggaW5zdGFuY2VvZiBGdW5jdGlvbikgewotCQkJLy8gdGhlIG9iamVjdCBpbXBsZW1lbnRzIGEgY3VzdG9tIGZvckVhY2ggbWV0aG9kIHNvIHVzZSB0aGF0Ci0JCQlvYmplY3QuZm9yRWFjaChibG9jaywgY29udGV4dCk7Ci0JCQlyZXR1cm47Ci0JCX0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PSAic3RyaW5nIikgewotCQkJLy8gdGhlIG9iamVjdCBpcyBhIHN0cmluZwotCQkJcmVzb2x2ZSA9IFN0cmluZzsKLQkJfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0Lmxlbmd0aCA9PSAibnVtYmVyIikgewotCQkJLy8gdGhlIG9iamVjdCBpcyBhcnJheS1saWtlCi0JCQlyZXNvbHZlID0gQXJyYXk7Ci0JCX0KLQkJcmVzb2x2ZS5mb3JFYWNoKG9iamVjdCwgYmxvY2ssIGNvbnRleHQpOwotCX0KLX07Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ZhbGlkYXRla2V5bWFwcy9BbmRyb2lkLm1rIGIvdG9vbHMvdmFsaWRhdGVrZXltYXBzL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZjcyMWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdmFsaWRhdGVrZXltYXBzL0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jCi0jIENvcHlyaWdodCAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgS2V5bWFwIHZhbGlkYXRpb24gdG9vbC4KLSMKLQotIyBUaGlzIHRvb2wgaXMgcHJlYnVpbHQgaWYgd2UncmUgZG9pbmcgYW4gYXBwLW9ubHkgYnVpbGQuCi1pZmVxICgkKFRBUkdFVF9CVUlMRF9BUFBTKSwpCi0KLUxPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX1NSQ19GSUxFUyA6PSBcCi0JTWFpbi5jcHAKLQotTE9DQUxfQ0ZMQUdTIDo9IC1XYWxsIC1XZXJyb3IKLQotTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBcCi0JbGliaW5wdXQgXAotCWxpYnV0aWxzIFwKLQlsaWJjdXRpbHMgXAotCWxpYmxvZwotCi1pZmVxICgkKEhPU1RfT1MpLGxpbnV4KQotTE9DQUxfTERMSUJTICs9IC1sZGwgLWxwdGhyZWFkCi1lbmRpZgotCi1MT0NBTF9NT0RVTEUgOj0gdmFsaWRhdGVrZXltYXBzCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAotCi1pbmNsdWRlICQoQlVJTERfSE9TVF9FWEVDVVRBQkxFKQotCi1lbmRpZiAjIFRBUkdFVF9CVUlMRF9BUFBTCmRpZmYgLS1naXQgYS90b29scy92YWxpZGF0ZWtleW1hcHMvTWFpbi5jcHAgYi90b29scy92YWxpZGF0ZWtleW1hcHMvTWFpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNDVjNTUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvdmFsaWRhdGVrZXltYXBzL01haW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8aW5wdXQvS2V5Q2hhcmFjdGVyTWFwLmg+Ci0jaW5jbHVkZSA8aW5wdXQvS2V5TGF5b3V0TWFwLmg+Ci0jaW5jbHVkZSA8aW5wdXQvVmlydHVhbEtleU1hcC5oPgotI2luY2x1ZGUgPHV0aWxzL1Byb3BlcnR5TWFwLmg+Ci0jaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBnUHJvZ05hbWUgPSAidmFsaWRhdGVrZXltYXBzIjsKLQotZW51bSBGaWxlVHlwZSB7Ci0gICAgRklMRVRZUEVfVU5LTk9XTiwKLSAgICBGSUxFVFlQRV9LRVlMQVlPVVQsCi0gICAgRklMRVRZUEVfS0VZQ0hBUkFDVEVSTUFQLAotICAgIEZJTEVUWVBFX1ZJUlRVQUxLRVlERUZJTklUSU9OLAotICAgIEZJTEVUWVBFX0lOUFVUREVWSUNFQ09ORklHVVJBVElPTiwKLX07Ci0KLQotc3RhdGljIHZvaWQgdXNhZ2UoKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJLZXltYXAgVmFsaWRhdGlvbiBUb29sXG5cbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6XG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgIiAlcyBbKi5rbF0gWyoua2NtXSBbKi5pZGNdIFt2aXJ0dWFsa2V5cy4qXSBbLi4uXVxuIgotICAgICAgICAiICAgVmFsaWRhdGVzIHRoZSBzcGVjaWZpZWQga2V5IGxheW91dHMsIGtleSBjaGFyYWN0ZXIgbWFwcywgXG4iCi0gICAgICAgICIgICBpbnB1dCBkZXZpY2UgY29uZmlndXJhdGlvbnMsIG9yIHZpcnR1YWwga2V5IGRlZmluaXRpb25zLlxuXG4iLAotICAgICAgICBnUHJvZ05hbWUpOwotfQotCi1zdGF0aWMgRmlsZVR5cGUgZ2V0RmlsZVR5cGUoY29uc3QgY2hhciogZmlsZW5hbWUpIHsKLSAgICBjb25zdCBjaGFyICpleHRlbnNpb24gPSBzdHJyY2hyKGZpbGVuYW1lLCAnLicpOwotICAgIGlmIChleHRlbnNpb24pIHsKLSAgICAgICAgaWYgKHN0cmNtcChleHRlbnNpb24sICIua2wiKSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gRklMRVRZUEVfS0VZTEFZT1VUOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdHJjbXAoZXh0ZW5zaW9uLCAiLmtjbSIpID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiBGSUxFVFlQRV9LRVlDSEFSQUNURVJNQVA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0cmNtcChleHRlbnNpb24sICIuaWRjIikgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIEZJTEVUWVBFX0lOUFVUREVWSUNFQ09ORklHVVJBVElPTjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzdHJzdHIoZmlsZW5hbWUsICJ2aXJ0dWFsa2V5cy4iKSkgewotICAgICAgICByZXR1cm4gRklMRVRZUEVfVklSVFVBTEtFWURFRklOSVRJT047Ci0gICAgfQotCi0gICAgcmV0dXJuIEZJTEVUWVBFX1VOS05PV047Ci19Ci0KLXN0YXRpYyBib29sIHZhbGlkYXRlRmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSkgewotICAgIGZwcmludGYoc3Rkb3V0LCAiVmFsaWRhdGluZyBmaWxlICclcycuLi5cbiIsIGZpbGVuYW1lKTsKLQotICAgIEZpbGVUeXBlIGZpbGVUeXBlID0gZ2V0RmlsZVR5cGUoZmlsZW5hbWUpOwotICAgIHN3aXRjaCAoZmlsZVR5cGUpIHsKLSAgICBjYXNlIEZJTEVUWVBFX1VOS05PV046Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3VwcG9ydGVkIGZpbGUgdHlwZXM6ICoua2wsICoua2NtLCB2aXJ0dWFsa2V5cy4qXG5cbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjYXNlIEZJTEVUWVBFX0tFWUxBWU9VVDogewotICAgICAgICBzcDxLZXlMYXlvdXRNYXA+IG1hcDsKLSAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gS2V5TGF5b3V0TWFwOjpsb2FkKFN0cmluZzgoZmlsZW5hbWUpLCAmbWFwKTsKLSAgICAgICAgaWYgKHN0YXR1cykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCBwYXJzaW5nIGtleSBsYXlvdXQgZmlsZS5cblxuIiwgc3RhdHVzKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEZJTEVUWVBFX0tFWUNIQVJBQ1RFUk1BUDogewotICAgICAgICBzcDxLZXlDaGFyYWN0ZXJNYXA+IG1hcDsKLSAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gS2V5Q2hhcmFjdGVyTWFwOjpsb2FkKFN0cmluZzgoZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgIEtleUNoYXJhY3Rlck1hcDo6Rk9STUFUX0FOWSwgJm1hcCk7Ci0gICAgICAgIGlmIChzdGF0dXMpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQgcGFyc2luZyBrZXkgY2hhcmFjdGVyIG1hcCBmaWxlLlxuXG4iLCBzdGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgRklMRVRZUEVfSU5QVVRERVZJQ0VDT05GSUdVUkFUSU9OOiB7Ci0gICAgICAgIFByb3BlcnR5TWFwKiBtYXA7Ci0gICAgICAgIHN0YXR1c190IHN0YXR1cyA9IFByb3BlcnR5TWFwOjpsb2FkKFN0cmluZzgoZmlsZW5hbWUpLCAmbWFwKTsKLSAgICAgICAgaWYgKHN0YXR1cykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCBwYXJzaW5nIGlucHV0IGRldmljZSBjb25maWd1cmF0aW9uIGZpbGUuXG5cbiIsIHN0YXR1cyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIG1hcDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGSUxFVFlQRV9WSVJUVUFMS0VZREVGSU5JVElPTjogewotICAgICAgICBWaXJ0dWFsS2V5TWFwKiBtYXA7Ci0gICAgICAgIHN0YXR1c190IHN0YXR1cyA9IFZpcnR1YWxLZXlNYXA6OmxvYWQoU3RyaW5nOChmaWxlbmFtZSksICZtYXApOwotICAgICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVkIHBhcnNpbmcgdmlydHVhbCBrZXkgZGVmaW5pdGlvbiBmaWxlLlxuXG4iLCBzdGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSBtYXA7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICBmcHV0cygiTm8gZXJyb3JzLlxuXG4iLCBzdGRvdXQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpIHsKLSAgICBpZiAoYXJnYyA8IDIpIHsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgaW50IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZUZpbGUoYXJndltpXSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGZwdXRzKCJGYWlsZWQhXG4iLCBzdGRlcnIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZwdXRzKCJTdWNjZXNzLlxuIiwgc3Rkb3V0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ZlbG9jaXR5cGxvdC92ZWxvY2l0eXBsb3QucHkgYi90b29scy92ZWxvY2l0eXBsb3QvdmVsb2NpdHlwbG90LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0MjFiZWQ0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3ZlbG9jaXR5cGxvdC92ZWxvY2l0eXBsb3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyODkgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMi42Ci0jCi0jIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotCi0jCi0jIFBsb3RzIGRlYnVnIGxvZyBvdXRwdXQgZnJvbSBWZWxvY2l0eVRyYWNrZXIuCi0jIEVuYWJsZSBERUJVR19WRUxPQ0lUWSB0byBwcmludCB0aGUgb3V0cHV0LgotIwotIyBUaGlzIGNvZGUgc3VwcG9ydHMgc2lkZS1ieS1zaWRlIGNvbXBhcmlzb24gb2YgdHdvIGFsZ29yaXRobXMuCi0jIFRoZSBvbGQgYWxnb3JpdGhtIHNob3VsZCBiZSBtb2RpZmllZCB0byBlbWl0IGRlYnVnIGxvZyBtZXNzYWdlcyBjb250YWluaW5nCi0jIHRoZSB3b3JkICJPTEQiLgotIwotCi1pbXBvcnQgbnVtcHkgYXMgbnAKLWltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbG90Ci1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHJlCi1pbXBvcnQgZmNudGwKLWltcG9ydCBvcwotaW1wb3J0IGVycm5vCi1pbXBvcnQgYmlzZWN0Ci1mcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhCi0KLSMgUGFyYW1ldGVycy4KLXRpbWVzcGFuID0gMTUgIyBzZWNvbmRzIHRvdGFsIHNwYW4gc2hvd24KLXNjcm9sbGp1bXAgPSA1ICMgc2Vjb25kcyBqdW1wIHdoZW4gc2Nyb2xsaW5nCi10aW1ldGlja3MgPSAxICMgc2Vjb25kcyBiZXR3ZWVuIGVhY2ggdGltZSB0aWNrCi0KLSMgTm9uLWJsb2NraW5nIHN0cmVhbSB3cmFwcGVyLgotY2xhc3MgTm9uQmxvY2tpbmdTdHJlYW06Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0pOgotICAgIGZjbnRsLmZjbnRsKHN0cmVhbSwgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKLSAgICBzZWxmLnN0cmVhbSA9IHN0cmVhbQotICAgIHNlbGYuYnVmZmVyID0gJycKLSAgICBzZWxmLnBvcyA9IDAKLQotICBkZWYgcmVhZGxpbmUoc2VsZik6Ci0gICAgd2hpbGUgVHJ1ZToKLSAgICAgIGluZGV4ID0gc2VsZi5idWZmZXIuZmluZCgnXG4nLCBzZWxmLnBvcykKLSAgICAgIGlmIGluZGV4ICE9IC0xOgotICAgICAgICByZXN1bHQgPSBzZWxmLmJ1ZmZlcltzZWxmLnBvczppbmRleF0KLSAgICAgICAgc2VsZi5wb3MgPSBpbmRleCArIDEKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyW3NlbGYucG9zOl0KLSAgICAgIHNlbGYucG9zID0gMAotICAgICAgdHJ5OgotICAgICAgICBjaHVuayA9IG9zLnJlYWQoc2VsZi5zdHJlYW0uZmlsZW5vKCksIDQwOTYpCi0gICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUdBSU46Ci0gICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmFpc2UgZQotICAgICAgaWYgbGVuKGNodW5rKSA9PSAwOgotICAgICAgICBpZiBsZW4oc2VsZi5idWZmZXIpID09IDA6Ci0gICAgICAgICAgcmFpc2UoRU9GRXJyb3IpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcmVzdWx0ID0gc2VsZi5idWZmZXIKLSAgICAgICAgICBzZWxmLmJ1ZmZlciA9ICcnCi0gICAgICAgICAgc2VsZi5wb3MgPSAwCi0gICAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgICAgc2VsZi5idWZmZXIgKz0gY2h1bmsKLQotIyBQbG90dGVyCi1jbGFzcyBQbG90dGVyOgotICBkZWYgX19pbml0X18oc2VsZiwgYWRib3V0KToKLSAgICBzZWxmLmFkYm91dCA9IGFkYm91dAotCi0gICAgc2VsZi5maWcgPSBwbG90LmZpZ3VyZSgxKQotICAgIHNlbGYuZmlnLnN1cHRpdGxlKCdWZWxvY2l0eSBUcmFja2VyJywgZm9udHNpemU9MTIpCi0gICAgc2VsZi5maWcuc2V0X2RwaSg5NikKLSAgICBzZWxmLmZpZy5zZXRfc2l6ZV9pbmNoZXMoMTYsIDEyLCBmb3J3YXJkPVRydWUpCi0KLSAgICBzZWxmLnZlbG9jaXR5X3ggPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYudmVsb2NpdHlfeSA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi52ZWxvY2l0eV9tYWduaXR1ZGUgPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYudmVsb2NpdHlfYXhlcyA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2F4ZXMoCi0gICAgICAgIDEsICdWZWxvY2l0eScsICdweC9zJywgWy01MDAwLCA1MDAwXSwKLSAgICAgICAgeXRpY2tzPXJhbmdlKC01MDAwLCA1MDAwLCAxMDAwKSkKLSAgICBzZWxmLnZlbG9jaXR5X2xpbmVfeCA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYudmVsb2NpdHlfYXhlcywgJ3Z4JywgJ3JlZCcpCi0gICAgc2VsZi52ZWxvY2l0eV9saW5lX3kgPSBzZWxmLl9hZGRfdGltZXNlcmllc19saW5lKAotICAgICAgICBzZWxmLnZlbG9jaXR5X2F4ZXMsICd2eScsICdncmVlbicpCi0gICAgc2VsZi52ZWxvY2l0eV9saW5lX21hZ25pdHVkZSA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYudmVsb2NpdHlfYXhlcywgJ21hZ25pdHVkZScsICdibHVlJykKLSAgICBzZWxmLl9hZGRfdGltZXNlcmllc19sZWdlbmQoc2VsZi52ZWxvY2l0eV9heGVzKQotCi0gICAgc2hhcmVkX2F4aXMgPSBzZWxmLnZlbG9jaXR5X2F4ZXMKLQotICAgIHNlbGYub2xkX3ZlbG9jaXR5X3ggPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYub2xkX3ZlbG9jaXR5X3kgPSBzZWxmLl9tYWtlX3RpbWVzZXJpZXMoKQotICAgIHNlbGYub2xkX3ZlbG9jaXR5X21hZ25pdHVkZSA9IHNlbGYuX21ha2VfdGltZXNlcmllcygpCi0gICAgc2VsZi5vbGRfdmVsb2NpdHlfYXhlcyA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2F4ZXMoCi0gICAgICAgIDIsICdPbGQgQWxnb3JpdGhtIFZlbG9jaXR5JywgJ3B4L3MnLCBbLTUwMDAsIDUwMDBdLAotICAgICAgICBzaGFyZXg9c2hhcmVkX2F4aXMsCi0gICAgICAgIHl0aWNrcz1yYW5nZSgtNTAwMCwgNTAwMCwgMTAwMCkpCi0gICAgc2VsZi5vbGRfdmVsb2NpdHlfbGluZV94ID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5vbGRfdmVsb2NpdHlfYXhlcywgJ3Z4JywgJ3JlZCcpCi0gICAgc2VsZi5vbGRfdmVsb2NpdHlfbGluZV95ID0gc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGluZSgKLSAgICAgICAgc2VsZi5vbGRfdmVsb2NpdHlfYXhlcywgJ3Z5JywgJ2dyZWVuJykKLSAgICBzZWxmLm9sZF92ZWxvY2l0eV9saW5lX21hZ25pdHVkZSA9IHNlbGYuX2FkZF90aW1lc2VyaWVzX2xpbmUoCi0gICAgICAgIHNlbGYub2xkX3ZlbG9jaXR5X2F4ZXMsICdtYWduaXR1ZGUnLCAnYmx1ZScpCi0gICAgc2VsZi5fYWRkX3RpbWVzZXJpZXNfbGVnZW5kKHNlbGYub2xkX3ZlbG9jaXR5X2F4ZXMpCi0KLSAgICBzZWxmLnRpbWVyID0gc2VsZi5maWcuY2FudmFzLm5ld190aW1lcihpbnRlcnZhbD0xMDApCi0gICAgc2VsZi50aW1lci5hZGRfY2FsbGJhY2sobGFtYmRhOiBzZWxmLnVwZGF0ZSgpKQotICAgIHNlbGYudGltZXIuc3RhcnQoKQotCi0gICAgc2VsZi50aW1lYmFzZSA9IE5vbmUKLSAgICBzZWxmLl9yZXNldF9wYXJzZV9zdGF0ZSgpCi0KLSAgIyBJbml0aWFsaXplIGEgdGltZSBzZXJpZXMuCi0gIGRlZiBfbWFrZV90aW1lc2VyaWVzKHNlbGYpOgotICAgIHJldHVybiBbW10sIFtdXQotCi0gICMgQWRkIGEgc3VicGxvdCB0byB0aGUgZmlndXJlIGZvciBhIHRpbWUgc2VyaWVzLgotICBkZWYgX2FkZF90aW1lc2VyaWVzX2F4ZXMoc2VsZiwgaW5kZXgsIHRpdGxlLCB5bGFiZWwsIHlsaW0sIHl0aWNrcywgc2hhcmV4PU5vbmUpOgotICAgIG51bV9ncmFwaHMgPSAyCi0gICAgaGVpZ2h0ID0gMC45IC8gbnVtX2dyYXBocwotICAgIHRvcCA9IDAuOTUgLSBoZWlnaHQgKiBpbmRleAotICAgIGF4ZXMgPSBzZWxmLmZpZy5hZGRfYXhlcyhbMC4xLCB0b3AsIDAuOCwgaGVpZ2h0XSwKLSAgICAgICAgeHNjYWxlPSdsaW5lYXInLAotICAgICAgICB4bGltPVswLCB0aW1lc3Bhbl0sCi0gICAgICAgIHlsYWJlbD15bGFiZWwsCi0gICAgICAgIHlzY2FsZT0nbGluZWFyJywKLSAgICAgICAgeWxpbT15bGltLAotICAgICAgICBzaGFyZXg9c2hhcmV4KQotICAgIGF4ZXMudGV4dCgwLjAyLCAwLjAyLCB0aXRsZSwgdHJhbnNmb3JtPWF4ZXMudHJhbnNBeGVzLCBmb250c2l6ZT0xMCwgZm9udHdlaWdodD0nYm9sZCcpCi0gICAgYXhlcy5zZXRfeGxhYmVsKCd0aW1lIChzKScsIGZvbnRzaXplPTEwLCBmb250d2VpZ2h0PSdib2xkJykKLSAgICBheGVzLnNldF95bGFiZWwoeWxhYmVsLCBmb250c2l6ZT0xMCwgZm9udHdlaWdodD0nYm9sZCcpCi0gICAgYXhlcy5zZXRfeHRpY2tzKHJhbmdlKDAsIHRpbWVzcGFuICsgMSwgdGltZXRpY2tzKSkKLSAgICBheGVzLnNldF95dGlja3MoeXRpY2tzKQotICAgIGF4ZXMuZ3JpZChUcnVlKQotCi0gICAgZm9yIGxhYmVsIGluIGF4ZXMuZ2V0X3h0aWNrbGFiZWxzKCk6Ci0gICAgICBsYWJlbC5zZXRfZm9udHNpemUoOSkKLSAgICBmb3IgbGFiZWwgaW4gYXhlcy5nZXRfeXRpY2tsYWJlbHMoKToKLSAgICAgIGxhYmVsLnNldF9mb250c2l6ZSg5KQotCi0gICAgcmV0dXJuIGF4ZXMKLQotICAjIEFkZCBhIGxpbmUgdG8gdGhlIGF4ZXMgZm9yIGEgdGltZSBzZXJpZXMuCi0gIGRlZiBfYWRkX3RpbWVzZXJpZXNfbGluZShzZWxmLCBheGVzLCBsYWJlbCwgY29sb3IsIGxpbmV3aWR0aD0xKToKLSAgICByZXR1cm4gYXhlcy5wbG90KFtdLCBsYWJlbD1sYWJlbCwgY29sb3I9Y29sb3IsIGxpbmV3aWR0aD1saW5ld2lkdGgpWzBdCi0KLSAgIyBBZGQgYSBsZWdlbmQgdG8gYSB0aW1lIHNlcmllcy4KLSAgZGVmIF9hZGRfdGltZXNlcmllc19sZWdlbmQoc2VsZiwgYXhlcyk6Ci0gICAgYXhlcy5sZWdlbmQoCi0gICAgICAgIGxvYz0ndXBwZXIgbGVmdCcsCi0gICAgICAgIGJib3hfdG9fYW5jaG9yPSgxLjAxLCAxKSwKLSAgICAgICAgYm9yZGVycGFkPTAuMSwKLSAgICAgICAgYm9yZGVyYXhlc3BhZD0wLjEsCi0gICAgICAgIHByb3A9eydzaXplJzogMTB9KQotCi0gICMgUmVzZXRzIHRoZSBwYXJzZSBzdGF0ZS4KLSAgZGVmIF9yZXNldF9wYXJzZV9zdGF0ZShzZWxmKToKLSAgICBzZWxmLnBhcnNlX3ZlbG9jaXR5X3ggPSBOb25lCi0gICAgc2VsZi5wYXJzZV92ZWxvY2l0eV95ID0gTm9uZQotICAgIHNlbGYucGFyc2VfdmVsb2NpdHlfbWFnbml0dWRlID0gTm9uZQotICAgIHNlbGYucGFyc2Vfb2xkX3ZlbG9jaXR5X3ggPSBOb25lCi0gICAgc2VsZi5wYXJzZV9vbGRfdmVsb2NpdHlfeSA9IE5vbmUKLSAgICBzZWxmLnBhcnNlX29sZF92ZWxvY2l0eV9tYWduaXR1ZGUgPSBOb25lCi0KLSAgIyBVcGRhdGUgc2FtcGxlcy4KLSAgZGVmIHVwZGF0ZShzZWxmKToKLSAgICB0aW1laW5kZXggPSAwCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgIHRyeToKLSAgICAgICAgbGluZSA9IHNlbGYuYWRib3V0LnJlYWRsaW5lKCkKLSAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKLSAgICAgICAgcGxvdC5jbG9zZSgpCi0gICAgICAgIHJldHVybgotICAgICAgaWYgbGluZSBpcyBOb25lOgotICAgICAgICBicmVhawotICAgICAgcHJpbnQgbGluZQotCi0gICAgICB0cnk6Ci0gICAgICAgIHRpbWVzdGFtcCA9IHNlbGYuX3BhcnNlX3RpbWVzdGFtcChsaW5lKQotICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICBpZiBzZWxmLnRpbWViYXNlIGlzIE5vbmU6Ci0gICAgICAgIHNlbGYudGltZWJhc2UgPSB0aW1lc3RhbXAKLSAgICAgIGRlbHRhID0gdGltZXN0YW1wIC0gc2VsZi50aW1lYmFzZQotICAgICAgdGltZWluZGV4ID0gZGVsdGEuc2Vjb25kcyArIGRlbHRhLm1pY3Jvc2Vjb25kcyAqIDAuMDAwMDAxCi0KLSAgICAgIGlmIGxpbmUuZmluZCgnOiBwb3NpdGlvbicpICE9IC0xOgotICAgICAgICBzZWxmLnBhcnNlX3ZlbG9jaXR5X3ggPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAndng9JykKLSAgICAgICAgc2VsZi5wYXJzZV92ZWxvY2l0eV95ID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3Z5PScpCi0gICAgICAgIHNlbGYucGFyc2VfdmVsb2NpdHlfbWFnbml0dWRlID0gc2VsZi5fZ2V0X2ZvbGxvd2luZ19udW1iZXIobGluZSwgJ3NwZWVkPScpCi0gICAgICAgIHNlbGYuX2FwcGVuZChzZWxmLnZlbG9jaXR5X3gsIHRpbWVpbmRleCwgc2VsZi5wYXJzZV92ZWxvY2l0eV94KQotICAgICAgICBzZWxmLl9hcHBlbmQoc2VsZi52ZWxvY2l0eV95LCB0aW1laW5kZXgsIHNlbGYucGFyc2VfdmVsb2NpdHlfeSkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYudmVsb2NpdHlfbWFnbml0dWRlLCB0aW1laW5kZXgsIHNlbGYucGFyc2VfdmVsb2NpdHlfbWFnbml0dWRlKQotCi0gICAgICBpZiBsaW5lLmZpbmQoJzogT0xEJykgIT0gLTE6Ci0gICAgICAgIHNlbGYucGFyc2Vfb2xkX3ZlbG9jaXR5X3ggPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAndng9JykKLSAgICAgICAgc2VsZi5wYXJzZV9vbGRfdmVsb2NpdHlfeSA9IHNlbGYuX2dldF9mb2xsb3dpbmdfbnVtYmVyKGxpbmUsICd2eT0nKQotICAgICAgICBzZWxmLnBhcnNlX29sZF92ZWxvY2l0eV9tYWduaXR1ZGUgPSBzZWxmLl9nZXRfZm9sbG93aW5nX251bWJlcihsaW5lLCAnc3BlZWQ9JykKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYub2xkX3ZlbG9jaXR5X3gsIHRpbWVpbmRleCwgc2VsZi5wYXJzZV9vbGRfdmVsb2NpdHlfeCkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYub2xkX3ZlbG9jaXR5X3ksIHRpbWVpbmRleCwgc2VsZi5wYXJzZV9vbGRfdmVsb2NpdHlfeSkKLSAgICAgICAgc2VsZi5fYXBwZW5kKHNlbGYub2xkX3ZlbG9jaXR5X21hZ25pdHVkZSwgdGltZWluZGV4LCBzZWxmLnBhcnNlX29sZF92ZWxvY2l0eV9tYWduaXR1ZGUpCi0KLSAgICAjIFNjcm9sbCB0aGUgcGxvdHMuCi0gICAgaWYgdGltZWluZGV4ID4gdGltZXNwYW46Ci0gICAgICBib3R0b20gPSBpbnQodGltZWluZGV4KSAtIHRpbWVzcGFuICsgc2Nyb2xsanVtcAotICAgICAgc2VsZi50aW1lYmFzZSArPSB0aW1lZGVsdGEoc2Vjb25kcz1ib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi52ZWxvY2l0eV94LCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi52ZWxvY2l0eV95LCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi52ZWxvY2l0eV9tYWduaXR1ZGUsIGJvdHRvbSkKLSAgICAgIHNlbGYuX3Njcm9sbChzZWxmLm9sZF92ZWxvY2l0eV94LCBib3R0b20pCi0gICAgICBzZWxmLl9zY3JvbGwoc2VsZi5vbGRfdmVsb2NpdHlfeSwgYm90dG9tKQotICAgICAgc2VsZi5fc2Nyb2xsKHNlbGYub2xkX3ZlbG9jaXR5X21hZ25pdHVkZSwgYm90dG9tKQotCi0gICAgIyBSZWRyYXcgdGhlIHBsb3RzLgotICAgIHNlbGYudmVsb2NpdHlfbGluZV94LnNldF9kYXRhKHNlbGYudmVsb2NpdHlfeCkKLSAgICBzZWxmLnZlbG9jaXR5X2xpbmVfeS5zZXRfZGF0YShzZWxmLnZlbG9jaXR5X3kpCi0gICAgc2VsZi52ZWxvY2l0eV9saW5lX21hZ25pdHVkZS5zZXRfZGF0YShzZWxmLnZlbG9jaXR5X21hZ25pdHVkZSkKLSAgICBzZWxmLm9sZF92ZWxvY2l0eV9saW5lX3guc2V0X2RhdGEoc2VsZi5vbGRfdmVsb2NpdHlfeCkKLSAgICBzZWxmLm9sZF92ZWxvY2l0eV9saW5lX3kuc2V0X2RhdGEoc2VsZi5vbGRfdmVsb2NpdHlfeSkKLSAgICBzZWxmLm9sZF92ZWxvY2l0eV9saW5lX21hZ25pdHVkZS5zZXRfZGF0YShzZWxmLm9sZF92ZWxvY2l0eV9tYWduaXR1ZGUpCi0KLSAgICBzZWxmLmZpZy5jYW52YXMuZHJhd19pZGxlKCkKLQotICAjIFNjcm9sbCBhIHRpbWUgc2VyaWVzLgotICBkZWYgX3Njcm9sbChzZWxmLCB0aW1lc2VyaWVzLCBib3R0b20pOgotICAgIGJvdHRvbV9pbmRleCA9IGJpc2VjdC5iaXNlY3RfbGVmdCh0aW1lc2VyaWVzWzBdLCBib3R0b20pCi0gICAgZGVsIHRpbWVzZXJpZXNbMF1bOmJvdHRvbV9pbmRleF0KLSAgICBkZWwgdGltZXNlcmllc1sxXVs6Ym90dG9tX2luZGV4XQotICAgIGZvciBpLCB0aW1laW5kZXggaW4gZW51bWVyYXRlKHRpbWVzZXJpZXNbMF0pOgotICAgICAgdGltZXNlcmllc1swXVtpXSA9IHRpbWVpbmRleCAtIGJvdHRvbQotCi0gICMgRXh0cmFjdCBhIHdvcmQgZm9sbG93aW5nIHRoZSBzcGVjaWZpZWQgcHJlZml4LgotICBkZWYgX2dldF9mb2xsb3dpbmdfd29yZChzZWxmLCBsaW5lLCBwcmVmaXgpOgotICAgIHByZWZpeF9pbmRleCA9IGxpbmUuZmluZChwcmVmaXgpCi0gICAgaWYgcHJlZml4X2luZGV4ID09IC0xOgotICAgICAgcmV0dXJuIE5vbmUKLSAgICBzdGFydF9pbmRleCA9IHByZWZpeF9pbmRleCArIGxlbihwcmVmaXgpCi0gICAgZGVsaW1faW5kZXggPSBsaW5lLmZpbmQoJywnLCBzdGFydF9pbmRleCkKLSAgICBpZiBkZWxpbV9pbmRleCA9PSAtMToKLSAgICAgIHJldHVybiBsaW5lW3N0YXJ0X2luZGV4Ol0KLSAgICBlbHNlOgotICAgICAgcmV0dXJuIGxpbmVbc3RhcnRfaW5kZXg6ZGVsaW1faW5kZXhdCi0KLSAgIyBFeHRyYWN0IGEgbnVtYmVyIGZvbGxvd2luZyB0aGUgc3BlY2lmaWVkIHByZWZpeC4KLSAgZGVmIF9nZXRfZm9sbG93aW5nX251bWJlcihzZWxmLCBsaW5lLCBwcmVmaXgpOgotICAgIHdvcmQgPSBzZWxmLl9nZXRfZm9sbG93aW5nX3dvcmQobGluZSwgcHJlZml4KQotICAgIGlmIHdvcmQgaXMgTm9uZToKLSAgICAgIHJldHVybiBOb25lCi0gICAgcmV0dXJuIGZsb2F0KHdvcmQpCi0KLSAgIyBBZGQgYSB2YWx1ZSB0byBhIHRpbWUgc2VyaWVzLgotICBkZWYgX2FwcGVuZChzZWxmLCB0aW1lc2VyaWVzLCB0aW1laW5kZXgsIG51bWJlcik6Ci0gICAgdGltZXNlcmllc1swXS5hcHBlbmQodGltZWluZGV4KQotICAgIHRpbWVzZXJpZXNbMV0uYXBwZW5kKG51bWJlcikKLQotICAjIFBhcnNlIHRoZSBsb2djYXQgdGltZXN0YW1wLgotICAjIFRpbWVzdGFtcCBoYXMgdGhlIGZvcm0gJzAxLTIxIDIwOjQyOjQyLjkzMCcKLSAgZGVmIF9wYXJzZV90aW1lc3RhbXAoc2VsZiwgbGluZSk6Ci0gICAgcmV0dXJuIGRhdGV0aW1lLnN0cnB0aW1lKGxpbmVbMDoxOF0sICclbS0lZCAlSDolTTolUy4lZicpCi0KLSMgTm90aWNlCi1wcmludCAiVmVsb2NpdHkgVHJhY2tlciBwbG90dGluZyB0b29sIgotcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi1wcmludCAiUGxlYXNlIGVuYWJsZSBkZWJ1ZyBsb2dnaW5nIGFuZCByZWNvbXBpbGUgdGhlIGNvZGUuIgotCi0jIFN0YXJ0IGFkYi4KLXByaW50ICJTdGFydGluZyBhZGIgbG9nY2F0LlxuIgotCi1hZGIgPSBzdWJwcm9jZXNzLlBvcGVuKFsnYWRiJywgJ2xvZ2NhdCcsICctcycsICctdicsICd0aW1lJywgJ0lucHV0OionLCAnVmVsb2NpdHlUcmFja2VyOionXSwKLSAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotYWRib3V0ID0gTm9uQmxvY2tpbmdTdHJlYW0oYWRiLnN0ZG91dCkKLQotIyBQcmVwYXJlIHBsb3R0ZXIuCi1wbG90dGVyID0gUGxvdHRlcihhZGJvdXQpCi1wbG90dGVyLnVwZGF0ZSgpCi0KLSMgTWFpbiBsb29wLgotcGxvdC5zaG93KCkKZGlmZiAtLWdpdCBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL0JhdGNoZWRTY2FuUmVzdWx0LmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9CYXRjaGVkU2NhblJlc3VsdC5qYXZhCmluZGV4IGViNGUwMjc2Li43NTk4YjkyIDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9CYXRjaGVkU2NhblJlc3VsdC5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL0JhdGNoZWRTY2FuUmVzdWx0LmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvSVdpZmlNYW5hZ2VyLmFpZGwgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9JV2lmaU1hbmFnZXIuYWlkbAppbmRleCAxNDliZGE2Li40YTZiMWZmIDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9JV2lmaU1hbmFnZXIuYWlkbAorKysgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9JV2lmaU1hbmFnZXIuYWlkbApAQCAtMTExLDggKzExMSw2IEBACiAKICAgICBTdHJpbmcgZ2V0Q29uZmlnRmlsZSgpOwogCi0gICAgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZSgpOwotCiAgICAgdm9pZCBlbmFibGVUZGxzKFN0cmluZyByZW1vdGVJUEFkZHJlc3MsIGJvb2xlYW4gZW5hYmxlKTsKIAogICAgIHZvaWQgZW5hYmxlVGRsc1dpdGhNYWNBZGRyZXNzKFN0cmluZyByZW1vdGVNYWNBZGRyZXNzLCBib29sZWFuIGVuYWJsZSk7CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9OZXR3b3JrVXBkYXRlUmVzdWx0LmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9OZXR3b3JrVXBkYXRlUmVzdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNGJiZTEuLjAwMDAwMDAKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvTmV0d29ya1VwZGF0ZVJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5uZXQud2lmaTsKLQotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC53aWZpLldpZmlDb25maWd1cmF0aW9uLklOVkFMSURfTkVUV09SS19JRDsKLQotY2xhc3MgTmV0d29ya1VwZGF0ZVJlc3VsdCB7Ci0gICAgaW50IG5ldElkOwotICAgIGJvb2xlYW4gaXBDaGFuZ2VkOwotICAgIGJvb2xlYW4gcHJveHlDaGFuZ2VkOwotICAgIGJvb2xlYW4gaXNOZXdOZXR3b3JrID0gZmFsc2U7Ci0KLSAgICBwdWJsaWMgTmV0d29ya1VwZGF0ZVJlc3VsdChpbnQgaWQpIHsKLSAgICAgICAgbmV0SWQgPSBpZDsKLSAgICAgICAgaXBDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIHByb3h5Q2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyBOZXR3b3JrVXBkYXRlUmVzdWx0KGJvb2xlYW4gaXAsIGJvb2xlYW4gcHJveHkpIHsKLSAgICAgICAgbmV0SWQgPSBJTlZBTElEX05FVFdPUktfSUQ7Ci0gICAgICAgIGlwQ2hhbmdlZCA9IGlwOwotICAgICAgICBwcm94eUNoYW5nZWQgPSBwcm94eTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrSWQoaW50IGlkKSB7Ci0gICAgICAgIG5ldElkID0gaWQ7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXROZXR3b3JrSWQoKSB7Ci0gICAgICAgIHJldHVybiBuZXRJZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJcENoYW5nZWQoYm9vbGVhbiBpcCkgewotICAgICAgICBpcENoYW5nZWQgPSBpcDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNJcENoYW5nZWQoKSB7Ci0gICAgICAgIHJldHVybiBpcENoYW5nZWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UHJveHlDaGFuZ2VkKGJvb2xlYW4gcHJveHkpIHsKLSAgICAgICAgcHJveHlDaGFuZ2VkID0gcHJveHk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzUHJveHlDaGFuZ2VkKCkgewotICAgICAgICByZXR1cm4gcHJveHlDaGFuZ2VkOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzTmV3TmV0d29yaygpIHsKLSAgICAgICAgcmV0dXJuIGlzTmV3TmV0d29yazsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJc05ld05ldHdvcmsoYm9vbGVhbiBpc05ldykgewotICAgICAgICBpc05ld05ldHdvcmsgPSBpc05ldzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9TdGF0ZUNoYW5nZVJlc3VsdC5qYXZhIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvU3RhdGVDaGFuZ2VSZXN1bHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMzNGI5MS4uMDAwMDAwMAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9TdGF0ZUNoYW5nZVJlc3VsdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSBwYWNrYWdlIGFuZHJvaWQubmV0LndpZmk7Ci0KLS8qKgotICogU3RvcmVzIHN1cHBsaWNhbnQgc3RhdGUgY2hhbmdlIGluZm9ybWF0aW9uIHBhc3NlZCBmcm9tIFdpZmlNb25pdG9yIHRvCi0gKiBhIHN0YXRlIG1hY2hpbmUuIFdpZmlTdGF0ZU1hY2hpbmUsIFN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIgYW5kIFdwc1N0YXRlTWFjaGluZQotICogYXJlIGV4YW1wbGUgc3RhdGUgbWFjaGluZXMgdGhhdCBoYW5kbGUgaXQuCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgU3RhdGVDaGFuZ2VSZXN1bHQgewotICAgIFN0YXRlQ2hhbmdlUmVzdWx0KGludCBuZXR3b3JrSWQsIFdpZmlTc2lkIHdpZmlTc2lkLCBTdHJpbmcgQlNTSUQsCi0gICAgICAgICAgICBTdXBwbGljYW50U3RhdGUgc3RhdGUpIHsKLSAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlOwotICAgICAgICB0aGlzLndpZmlTc2lkPSB3aWZpU3NpZDsKLSAgICAgICAgdGhpcy5CU1NJRCA9IEJTU0lEOwotICAgICAgICB0aGlzLm5ldHdvcmtJZCA9IG5ldHdvcmtJZDsKLSAgICB9Ci0KLSAgICBpbnQgbmV0d29ya0lkOwotICAgIFdpZmlTc2lkIHdpZmlTc2lkOwotICAgIFN0cmluZyBCU1NJRDsKLSAgICBTdXBwbGljYW50U3RhdGUgc3RhdGU7Ci19CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9TdXBwbGljYW50U3RhdGUuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1N1cHBsaWNhbnRTdGF0ZS5qYXZhCmluZGV4IDRhMjAzN2QuLjM2OWQzYTggMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1N1cHBsaWNhbnRTdGF0ZS5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1N1cHBsaWNhbnRTdGF0ZS5qYXZhCkBAIC0xOTQsNyArMTk0LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyBib29sZWFuIGlzQ29ubmVjdGluZyhTdXBwbGljYW50U3RhdGUgc3RhdGUpIHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNDb25uZWN0aW5nKFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSkgewogICAgICAgICBzd2l0Y2goc3RhdGUpIHsKICAgICAgICAgICAgIGNhc2UgQVVUSEVOVElDQVRJTkc6CiAgICAgICAgICAgICBjYXNlIEFTU09DSUFUSU5HOgpAQCAtMjE2LDcgKzIxNyw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbGVhbiBpc0RyaXZlckFjdGl2ZShTdXBwbGljYW50U3RhdGUgc3RhdGUpIHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEcml2ZXJBY3RpdmUoU3VwcGxpY2FudFN0YXRlIHN0YXRlKSB7CiAgICAgICAgIHN3aXRjaChzdGF0ZSkgewogICAgICAgICAgICAgY2FzZSBESVNDT05ORUNURUQ6CiAgICAgICAgICAgICBjYXNlIERPUk1BTlQ6CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9TdXBwbGljYW50U3RhdGVUcmFja2VyLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9TdXBwbGljYW50U3RhdGVUcmFja2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NmViMTcuLjAwMDAwMDAKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvU3VwcGxpY2FudFN0YXRlVHJhY2tlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQubmV0LndpZmk7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlN0YXRlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGVNYWNoaW5lOwotCi1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5TdGF0ZUNoYW5nZVJlc3VsdDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotCi0vKioKLSAqIFRyYWNrcyB0aGUgc3RhdGUgY2hhbmdlcyBpbiBzdXBwbGljYW50IGFuZCBwcm92aWRlcyBmdW5jdGlvbmFsaXR5Ci0gKiB0aGF0IGlzIGJhc2VkIG9uIHRoZXNlIHN0YXRlIGNoYW5nZXM6Ci0gKiAtIGRldGVjdCBhIGZhaWxlZCBXUEEgaGFuZHNoYWtlIHRoYXQgbG9vcHMgaW5kZWZpbml0ZWx5Ci0gKiAtIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgaGFuZGxpbmcKLSAqLwotY2xhc3MgU3VwcGxpY2FudFN0YXRlVHJhY2tlciBleHRlbmRzIFN0YXRlTWFjaGluZSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREJHID0gZmFsc2U7Ci0KLSAgICBwcml2YXRlIFdpZmlTdGF0ZU1hY2hpbmUgbVdpZmlTdGF0ZU1hY2hpbmU7Ci0gICAgcHJpdmF0ZSBXaWZpQ29uZmlnU3RvcmUgbVdpZmlDb25maWdTdG9yZTsKLSAgICBwcml2YXRlIGludCBtQXV0aGVudGljYXRpb25GYWlsdXJlc0NvdW50ID0gMDsKLSAgICBwcml2YXRlIGludCBtQXNzb2NpYXRpb25SZWplY3RDb3VudCA9IDA7Ci0gICAgLyogSW5kaWNhdGVzIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgaW4gc3VwcGxpY2FudCBicm9hZGNhc3QuCi0gICAgICogVE9ETzogZW5oYW5jZSBhdXRoIGZhaWx1cmUgcmVwb3J0aW5nIHRvIGluY2x1ZGUgbm90aWZpY2F0aW9uCi0gICAgICogZm9yIGFsbCB0eXBlIG9mIGZhaWx1cmVzOiBFQVAsIFdQUyAmIFdQQSBuZXR3b3JrcyAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtQXV0aEZhaWx1cmVJblN1cHBsaWNhbnRCcm9hZGNhc3QgPSBmYWxzZTsKLQotICAgIC8qIE1heGltdW0gcmV0cmllcyBvbiBhIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgbm90aWZpY2F0aW9uICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9SRVRSSUVTX09OX0FVVEhFTlRJQ0FUSU9OX0ZBSUxVUkUgPSAyOwotCi0gICAgLyogTWF4aW11bSByZXRyaWVzIG9uIGFzc29jIHJlamVjdGlvbiBldmVudHMgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1JFVFJJRVNfT05fQVNTT0NJQVRJT05fUkVKRUNUID0gMTY7Ci0KLSAgICAvKiBUcmFja3MgaWYgbmV0d29ya3MgaGF2ZSBiZWVuIGRpc2FibGVkIGR1cmluZyBhIGNvbm5lY3Rpb24gKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ID0gZmFsc2U7Ci0KLSAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7Ci0KLSAgICBwcml2YXRlIFN0YXRlIG1VbmluaXRpYWxpemVkU3RhdGUgPSBuZXcgVW5pbml0aWFsaXplZFN0YXRlKCk7Ci0gICAgcHJpdmF0ZSBTdGF0ZSBtRGVmYXVsdFN0YXRlID0gbmV3IERlZmF1bHRTdGF0ZSgpOwotICAgIHByaXZhdGUgU3RhdGUgbUluYWN0aXZlU3RhdGUgPSBuZXcgSW5hY3RpdmVTdGF0ZSgpOwotICAgIHByaXZhdGUgU3RhdGUgbURpc2Nvbm5lY3RTdGF0ZSA9IG5ldyBEaXNjb25uZWN0ZWRTdGF0ZSgpOwotICAgIHByaXZhdGUgU3RhdGUgbVNjYW5TdGF0ZSA9IG5ldyBTY2FuU3RhdGUoKTsKLSAgICBwcml2YXRlIFN0YXRlIG1IYW5kc2hha2VTdGF0ZSA9IG5ldyBIYW5kc2hha2VTdGF0ZSgpOwotICAgIHByaXZhdGUgU3RhdGUgbUNvbXBsZXRlZFN0YXRlID0gbmV3IENvbXBsZXRlZFN0YXRlKCk7Ci0gICAgcHJpdmF0ZSBTdGF0ZSBtRG9ybWFudFN0YXRlID0gbmV3IERvcm1hbnRTdGF0ZSgpOwotCi0gICAgcHVibGljIFN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIoQ29udGV4dCBjLCBXaWZpU3RhdGVNYWNoaW5lIHdzbSwgV2lmaUNvbmZpZ1N0b3JlIHdjcywgSGFuZGxlciB0KSB7Ci0gICAgICAgIHN1cGVyKFRBRywgdC5nZXRMb29wZXIoKSk7Ci0KLSAgICAgICAgbUNvbnRleHQgPSBjOwotICAgICAgICBtV2lmaVN0YXRlTWFjaGluZSA9IHdzbTsKLSAgICAgICAgbVdpZmlDb25maWdTdG9yZSA9IHdjczsKLSAgICAgICAgYWRkU3RhdGUobURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICBhZGRTdGF0ZShtVW5pbml0aWFsaXplZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKG1JbmFjdGl2ZVN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKG1EaXNjb25uZWN0U3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgYWRkU3RhdGUobVNjYW5TdGF0ZSwgbURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICBhZGRTdGF0ZShtSGFuZHNoYWtlU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgYWRkU3RhdGUobUNvbXBsZXRlZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKG1Eb3JtYW50U3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotCi0gICAgICAgIHNldEluaXRpYWxTdGF0ZShtVW5pbml0aWFsaXplZFN0YXRlKTsKLSAgICAgICAgc2V0TG9nUmVjU2l6ZSg1MCk7Ci0gICAgICAgIHNldExvZ09ubHlUcmFuc2l0aW9ucyh0cnVlKTsKLSAgICAgICAgLy9zdGFydCB0aGUgc3RhdGUgbWFjaGluZQotICAgICAgICBzdGFydCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBoYW5kbGVOZXR3b3JrQ29ubmVjdGlvbkZhaWx1cmUoaW50IG5ldElkLCBpbnQgZGlzYWJsZVJlYXNvbikgewotICAgICAgICAvKiBJZiBvdGhlciBuZXR3b3JrcyBkaXNhYmxlZCBkdXJpbmcgY29ubmVjdGlvbiwgZW5hYmxlIHRoZW0gKi8KLSAgICAgICAgaWYgKG1OZXR3b3Jrc0Rpc2FibGVkRHVyaW5nQ29ubmVjdCkgewotICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5lbmFibGVBbGxOZXR3b3JrcygpOwotICAgICAgICAgICAgbU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLyogRGlzYWJsZSBmYWlsZWQgbmV0d29yayAqLwotICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmRpc2FibGVOZXR3b3JrKG5ldElkLCBkaXNhYmxlUmVhc29uKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdHJhbnNpdGlvbk9uU3VwcGxpY2FudFN0YXRlQ2hhbmdlKFN0YXRlQ2hhbmdlUmVzdWx0IHN0YXRlQ2hhbmdlUmVzdWx0KSB7Ci0gICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdXBTdGF0ZSA9IChTdXBwbGljYW50U3RhdGUpIHN0YXRlQ2hhbmdlUmVzdWx0LnN0YXRlOwotCi0gICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIlN1cHBsaWNhbnQgc3RhdGU6ICIgKyBzdXBTdGF0ZS50b1N0cmluZygpICsgIlxuIik7Ci0KLSAgICAgICAgc3dpdGNoIChzdXBTdGF0ZSkgewotICAgICAgICAgICBjYXNlIERJU0NPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElOVEVSRkFDRV9ESVNBQkxFRDoKLSAgICAgICAgICAgICAgICAvL3dlIHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgZGlzY29ubmVjdGlvbiBhbHJlYWR5LCBkbyBub3RoaW5nCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNDQU5OSU5HOgotICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtU2NhblN0YXRlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQVVUSEVOVElDQVRJTkc6Ci0gICAgICAgICAgICBjYXNlIEFTU09DSUFUSU5HOgotICAgICAgICAgICAgY2FzZSBBU1NPQ0lBVEVEOgotICAgICAgICAgICAgY2FzZSBGT1VSX1dBWV9IQU5EU0hBS0U6Ci0gICAgICAgICAgICBjYXNlIEdST1VQX0hBTkRTSEFLRToKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUhhbmRzaGFrZVN0YXRlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ09NUExFVEVEOgotICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtQ29tcGxldGVkU3RhdGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBET1JNQU5UOgotICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRG9ybWFudFN0YXRlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSU5BQ1RJVkU6Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5JTklUSUFMSVpFRDoKLSAgICAgICAgICAgIGNhc2UgSU5WQUxJRDoKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVVuaW5pdGlhbGl6ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVua25vd24gc3VwcGxpY2FudCBzdGF0ZSAiICsgc3VwU3RhdGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNlbmRTdXBwbGljYW50U3RhdGVDaGFuZ2VkQnJvYWRjYXN0KFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSwgYm9vbGVhbiBmYWlsZWRBdXRoKSB7Ci0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pOwotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UCi0gICAgICAgICAgICAgICAgfCBJbnRlbnQuRkxBR19SRUNFSVZFUl9SRVBMQUNFX1BFTkRJTkcpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTkVXX1NUQVRFLCAoUGFyY2VsYWJsZSkgc3RhdGUpOwotICAgICAgICBpZiAoZmFpbGVkQXV0aCkgewotICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKAotICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVYVFJBX1NVUFBMSUNBTlRfRVJST1IsCi0gICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuRVJST1JfQVVUSEVOVElDQVRJTkcpOwotICAgICAgICB9Ci0gICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICogSFNNIHN0YXRlcwotICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gICAgY2xhc3MgRGVmYXVsdFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgIlxuIik7Ci0gICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpICsgIlxuIik7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgbUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCsrOwotICAgICAgICAgICAgICAgICAgICBtQXV0aEZhaWx1cmVJblN1cHBsaWNhbnRCcm9hZGNhc3QgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBTdGF0ZUNoYW5nZVJlc3VsdCBzdGF0ZUNoYW5nZVJlc3VsdCA9IChTdGF0ZUNoYW5nZVJlc3VsdCkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSA9IHN0YXRlQ2hhbmdlUmVzdWx0LnN0YXRlOwotICAgICAgICAgICAgICAgICAgICBzZW5kU3VwcGxpY2FudFN0YXRlQ2hhbmdlZEJyb2FkY2FzdChzdGF0ZSwgbUF1dGhGYWlsdXJlSW5TdXBwbGljYW50QnJvYWRjYXN0KTsKLSAgICAgICAgICAgICAgICAgICAgbUF1dGhGYWlsdXJlSW5TdXBwbGljYW50QnJvYWRjYXN0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25PblN1cHBsaWNhbnRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZVJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfUkVTRVRfU1VQUExJQ0FOVF9TVEFURToKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1VbmluaXRpYWxpemVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkNPTk5FQ1RfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgbU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbUFzc29jaWF0aW9uUmVqZWN0Q291bnQgPSAwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLkFTU09DSUFUSU9OX1JFSkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgbUFzc29jaWF0aW9uUmVqZWN0Q291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiSWdub3JpbmcgIiArIG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBzdXBwbGljYW50IHN0YXRlIGFzIHNlZW4KLSAgICAgKiBieSB0aGUgZnJhbWV3b3JrIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQuIFdlIGFyZQotICAgICAqIGluIHRoaXMgc3RhdGUgcmlnaHQgYWZ0ZXIgZXN0YWJsaXNoaW5nIGEgY29udHJvbAotICAgICAqIGNoYW5uZWwgY29ubmVjdGlvbiBiZWZvcmUgYW55IHN1cHBsaWNhbnQgZXZlbnRzCi0gICAgICogb3IgYWZ0ZXIgd2UgaGF2ZSBsb3N0IHRoZSBjb250cm9sIGNoYW5uZWwKLSAgICAgKiBjb25uZWN0aW9uIHRvIHRoZSBzdXBwbGljYW50Ci0gICAgICovCi0gICAgY2xhc3MgVW5pbml0aWFsaXplZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgIlxuIik7Ci0gICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgSW5hY3RpdmVTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsIGdldE5hbWUoKSArICJcbiIpOwotICAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIERpc2Nvbm5lY3RlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgIlxuIik7Ci0gICAgICAgICAgICAgLyogSWYgYSBkaXNjb25uZWN0IGV2ZW50IGhhcHBlbnMgYWZ0ZXIgYXV0aGVudGljYXRpb24gZmFpbHVyZQotICAgICAgICAgICAgICAqIGV4Y2VlZHMgbWF4aW11bSByZXRyaWVzLCBkaXNhYmxlIHRoZSBuZXR3b3JrCi0gICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZ2V0Q3VycmVudE1lc3NhZ2UoKTsKLSAgICAgICAgICAgICBTdGF0ZUNoYW5nZVJlc3VsdCBzdGF0ZUNoYW5nZVJlc3VsdCA9IChTdGF0ZUNoYW5nZVJlc3VsdCkgbWVzc2FnZS5vYmo7Ci0KLSAgICAgICAgICAgICBpZiAobUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCA+PSBNQVhfUkVUUklFU19PTl9BVVRIRU5USUNBVElPTl9GQUlMVVJFKSB7Ci0gICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIkZhaWxlZCB0byBhdXRoZW50aWNhdGUsIGRpc2FibGluZyBuZXR3b3JrICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlUmVzdWx0Lm5ldHdvcmtJZCk7Ci0gICAgICAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtDb25uZWN0aW9uRmFpbHVyZShzdGF0ZUNoYW5nZVJlc3VsdC5uZXR3b3JrSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uRElTQUJMRURfQVVUSF9GQUlMVVJFKTsKLSAgICAgICAgICAgICAgICAgbUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCA9IDA7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIGVsc2UgaWYgKG1Bc3NvY2lhdGlvblJlamVjdENvdW50ID49IE1BWF9SRVRSSUVTX09OX0FTU09DSUFUSU9OX1JFSkVDVCkgewotICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJBc3NvY2lhdGlvbiBnZXR0aW5nIHJlamVjdGVkLCBkaXNhYmxpbmcgbmV0d29yayAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZVJlc3VsdC5uZXR3b3JrSWQpOwotICAgICAgICAgICAgICAgICBoYW5kbGVOZXR3b3JrQ29ubmVjdGlvbkZhaWx1cmUoc3RhdGVDaGFuZ2VSZXN1bHQubmV0d29ya0lkLAotICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLkRJU0FCTEVEX0FTU09DSUFUSU9OX1JFSkVDVCk7Ci0gICAgICAgICAgICAgICAgIG1Bc3NvY2lhdGlvblJlamVjdENvdW50ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBTY2FuU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCBnZXROYW1lKCkgKyAiXG4iKTsKLSAgICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBIYW5kc2hha2VTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSBtYXggbnVtYmVyIG9mIHRoZSBXUEEgc3VwcGxpY2FudCBsb29wIGl0ZXJhdGlvbnMgYmVmb3JlIHdlCi0gICAgICAgICAqIGRlY2lkZSB0aGF0IHRoZSBsb29wIHNob3VsZCBiZSB0ZXJtaW5hdGVkOgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9TVVBQTElDQU5UX0xPT1BfSVRFUkFUSU9OUyA9IDQ7Ci0gICAgICAgIHByaXZhdGUgaW50IG1Mb29wRGV0ZWN0SW5kZXg7Ci0gICAgICAgIHByaXZhdGUgaW50IG1Mb29wRGV0ZWN0Q291bnQ7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsIGdldE5hbWUoKSArICJcbiIpOwotICAgICAgICAgICAgIG1Mb29wRGV0ZWN0SW5kZXggPSAwOwotICAgICAgICAgICAgIG1Mb29wRGV0ZWN0Q291bnQgPSAwOwotICAgICAgICAgfQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsIGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSArICJcbiIpOwotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBTdGF0ZUNoYW5nZVJlc3VsdCBzdGF0ZUNoYW5nZVJlc3VsdCA9IChTdGF0ZUNoYW5nZVJlc3VsdCkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSA9IHN0YXRlQ2hhbmdlUmVzdWx0LnN0YXRlOwotICAgICAgICAgICAgICAgICAgICBpZiAoU3VwcGxpY2FudFN0YXRlLmlzSGFuZHNoYWtlU3RhdGUoc3RhdGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUxvb3BEZXRlY3RJbmRleCA+IHN0YXRlLm9yZGluYWwoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Mb29wRGV0ZWN0Q291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtTG9vcERldGVjdENvdW50ID4gTUFYX1NVUFBMSUNBTlRfTE9PUF9JVEVSQVRJT05TKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiU3VwcGxpY2FudCBsb29wIGRldGVjdGVkLCBkaXNhYmxpbmcgbmV0d29yayAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlUmVzdWx0Lm5ldHdvcmtJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya0Nvbm5lY3Rpb25GYWlsdXJlKHN0YXRlQ2hhbmdlUmVzdWx0Lm5ldHdvcmtJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLkRJU0FCTEVEX0FVVEhfRkFJTFVSRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTG9vcERldGVjdEluZGV4ID0gc3RhdGUub3JkaW5hbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFN1cHBsaWNhbnRTdGF0ZUNoYW5nZWRCcm9hZGNhc3Qoc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BdXRoRmFpbHVyZUluU3VwcGxpY2FudEJyb2FkY2FzdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgdGhlIERlZmF1bHRTdGF0ZSBoYW5kbGUgdGhlIHRyYW5zaXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIENvbXBsZXRlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgIlxuIik7Ci0gICAgICAgICAgICAgLyogUmVzZXQgYXV0aGVudGljYXRpb24gZmFpbHVyZSBjb3VudCAqLwotICAgICAgICAgICAgIG1BdXRoZW50aWNhdGlvbkZhaWx1cmVzQ291bnQgPSAwOwotICAgICAgICAgICAgIG1Bc3NvY2lhdGlvblJlamVjdENvdW50ID0gMDsKLSAgICAgICAgICAgICBpZiAobU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0KSB7Ci0gICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZW5hYmxlQWxsTmV0d29ya3MoKTsKLSAgICAgICAgICAgICAgICAgbU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpICsgIlxuIik7Ci0gICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgU3RhdGVDaGFuZ2VSZXN1bHQgc3RhdGVDaGFuZ2VSZXN1bHQgPSAoU3RhdGVDaGFuZ2VSZXN1bHQpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBTdXBwbGljYW50U3RhdGUgc3RhdGUgPSBzdGF0ZUNoYW5nZVJlc3VsdC5zdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgc2VuZFN1cHBsaWNhbnRTdGF0ZUNoYW5nZWRCcm9hZGNhc3Qoc3RhdGUsIG1BdXRoRmFpbHVyZUluU3VwcGxpY2FudEJyb2FkY2FzdCk7Ci0gICAgICAgICAgICAgICAgICAgIC8qIElnbm9yZSBhbnkgY29ubmVjdGluZyBzdGF0ZSBpbiBjb21wbGV0ZWQgc3RhdGUuIEdyb3VwIHJlLWtleWluZwotICAgICAgICAgICAgICAgICAgICAgKiBldmVudHMgYW5kIG90aGVyIGF1dGggZXZlbnRzIHRoYXQgZG8gbm90IGFmZmVjdCBjb25uZWN0aXZpdHkgYXJlCi0gICAgICAgICAgICAgICAgICAgICAqIGlnbm9yZWQKLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChTdXBwbGljYW50U3RhdGUuaXNDb25uZWN0aW5nKHN0YXRlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbk9uU3VwcGxpY2FudFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlUmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9SRVNFVF9TVVBQTElDQU5UX1NUQVRFOgotICAgICAgICAgICAgICAgICAgICBzZW5kU3VwcGxpY2FudFN0YXRlQ2hhbmdlZEJyb2FkY2FzdChTdXBwbGljYW50U3RhdGUuRElTQ09OTkVDVEVELCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVW5pbml0aWFsaXplZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvL1RPRE86IHJlbW92ZSBhZnRlciBnZXR0aW5nIHJpZCBvZiB0aGUgc3RhdGUgaW4gc3VwcGxpY2FudAotICAgIGNsYXNzIERvcm1hbnRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCBnZXROYW1lKCkgKyAiXG4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGR1bXAoRmlsZURlc2NyaXB0b3IgZmQsIFByaW50V3JpdGVyIHB3LCBTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIHN1cGVyLmR1bXAoZmQsIHB3LCBhcmdzKTsKLSAgICAgICAgcHcucHJpbnRsbigibUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCAiICsgbUF1dGhlbnRpY2F0aW9uRmFpbHVyZXNDb3VudCk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1BdXRoRmFpbHVyZUluU3VwcGxpY2FudEJyb2FkY2FzdCAiICsgbUF1dGhGYWlsdXJlSW5TdXBwbGljYW50QnJvYWRjYXN0KTsKLSAgICAgICAgcHcucHJpbnRsbigibU5ldHdvcmtzRGlzYWJsZWREdXJpbmdDb25uZWN0ICIgKyBtTmV0d29ya3NEaXNhYmxlZER1cmluZ0Nvbm5lY3QpOwotICAgICAgICBwdy5wcmludGxuKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaUFwQ29uZmlnU3RvcmUuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlBcENvbmZpZ1N0b3JlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MzFjYTMuLjAwMDAwMDAKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaUFwQ29uZmlnU3RvcmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLm5ldC53aWZpOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpQ29uZmlndXJhdGlvbi5LZXlNZ210OwotaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NlbmdlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Bc3luY0NoYW5uZWw7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlN0YXRlOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGVNYWNoaW5lOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5EYXRhSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5EYXRhT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi0vKioKLSAqIFByb3ZpZGVzIEFQSSB0byB0aGUgV2lmaVN0YXRlTWFjaGluZSBmb3IgZG9pbmcgcmVhZC93cml0ZSBhY2Nlc3MKLSAqIHRvIHNvZnQgYWNjZXNzIHBvaW50IGNvbmZpZ3VyYXRpb24KLSAqLwotY2xhc3MgV2lmaUFwQ29uZmlnU3RvcmUgZXh0ZW5kcyBTdGF0ZU1hY2hpbmUgewotCi0gICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2lmaUFwQ29uZmlnU3RvcmUiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFQX0NPTkZJR19GSUxFID0gRW52aXJvbm1lbnQuZ2V0RGF0YURpcmVjdG9yeSgpICsKLSAgICAgICAgIi9taXNjL3dpZmkvc29mdGFwLmNvbmYiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFQX0NPTkZJR19GSUxFX1ZFUlNJT04gPSAxOwotCi0gICAgcHJpdmF0ZSBTdGF0ZSBtRGVmYXVsdFN0YXRlID0gbmV3IERlZmF1bHRTdGF0ZSgpOwotICAgIHByaXZhdGUgU3RhdGUgbUluYWN0aXZlU3RhdGUgPSBuZXcgSW5hY3RpdmVTdGF0ZSgpOwotICAgIHByaXZhdGUgU3RhdGUgbUFjdGl2ZVN0YXRlID0gbmV3IEFjdGl2ZVN0YXRlKCk7Ci0KLSAgICBwcml2YXRlIFdpZmlDb25maWd1cmF0aW9uIG1XaWZpQXBDb25maWcgPSBudWxsOwotICAgIHByaXZhdGUgQXN5bmNDaGFubmVsIG1SZXBseUNoYW5uZWwgPSBuZXcgQXN5bmNDaGFubmVsKCk7Ci0KLSAgICBXaWZpQXBDb25maWdTdG9yZShDb250ZXh0IGNvbnRleHQsIEhhbmRsZXIgdGFyZ2V0KSB7Ci0gICAgICAgIHN1cGVyKFRBRywgdGFyZ2V0LmdldExvb3BlcigpKTsKLQotICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIGFkZFN0YXRlKG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgYWRkU3RhdGUobUluYWN0aXZlU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgYWRkU3RhdGUobUFjdGl2ZVN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLQotICAgICAgICBzZXRJbml0aWFsU3RhdGUobUluYWN0aXZlU3RhdGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgV2lmaUFwQ29uZmlnU3RvcmUgbWFrZVdpZmlBcENvbmZpZ1N0b3JlKENvbnRleHQgY29udGV4dCwgSGFuZGxlciB0YXJnZXQpIHsKLSAgICAgICAgV2lmaUFwQ29uZmlnU3RvcmUgcyA9IG5ldyBXaWZpQXBDb25maWdTdG9yZShjb250ZXh0LCB0YXJnZXQpOwotICAgICAgICBzLnN0YXJ0KCk7Ci0gICAgICAgIHJldHVybiBzOwotICAgIH0KLQotICAgIGNsYXNzIERlZmF1bHRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfU0VUX0FQX0NPTkZJRzoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX1NFVF9BUF9DT05GSUdfQ09NUExFVEVEOgotICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJVbmV4cGVjdGVkIG1lc3NhZ2U6ICIgKyBtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9SRVFVRVNUX0FQX0NPTkZJRzoKLSAgICAgICAgICAgICAgICAgICAgbVJlcGx5Q2hhbm5lbC5yZXBseVRvTWVzc2FnZShtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX1JFU1BPTlNFX0FQX0NPTkZJRywgbVdpZmlBcENvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byBoYW5kbGUgIiArIG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgSW5hY3RpdmVTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfU0VUX0FQX0NPTkZJRzoKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlBcENvbmZpZyA9IChXaWZpQ29uZmlndXJhdGlvbikgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtQWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIEFjdGl2ZVN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIG5ldyBUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVBcENvbmZpZ3VyYXRpb24obVdpZmlBcENvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKFdpZmlTdGF0ZU1hY2hpbmUuQ01EX1NFVF9BUF9DT05GSUdfQ09NUExFVEVEKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KS5zdGFydCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIC8vVE9ETzogaGF2ZSBmZWVkYmFjayB0byB0aGUgdXNlciB3aGVuIHdlIGRvIHRoaXMKLSAgICAgICAgICAgICAgICAvL3RvIGluZGljYXRlIHRoZSB3cml0ZSBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX1NFVF9BUF9DT05GSUc6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9TRVRfQVBfQ09ORklHX0NPTVBMRVRFRDoKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGxvYWRBcENvbmZpZ3VyYXRpb24oKSB7Ci0gICAgICAgIERhdGFJbnB1dFN0cmVhbSBpbiA9IG51bGw7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgV2lmaUNvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgICAgIGluID0gbmV3IERhdGFJbnB1dFN0cmVhbShuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQX0NPTkZJR19GSUxFKSkpOwotCi0gICAgICAgICAgICBpbnQgdmVyc2lvbiA9IGluLnJlYWRJbnQoKTsKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uICE9IDEpIHsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJCYWQgdmVyc2lvbiBvbiBob3RzcG90IGNvbmZpZ3VyYXRpb24gZmlsZSwgc2V0IGRlZmF1bHRzIik7Ci0gICAgICAgICAgICAgICAgc2V0RGVmYXVsdEFwQ29uZmlndXJhdGlvbigpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbmZpZy5TU0lEID0gaW4ucmVhZFVURigpOwotICAgICAgICAgICAgaW50IGF1dGhUeXBlID0gaW4ucmVhZEludCgpOwotICAgICAgICAgICAgY29uZmlnLmFsbG93ZWRLZXlNYW5hZ2VtZW50LnNldChhdXRoVHlwZSk7Ci0gICAgICAgICAgICBpZiAoYXV0aFR5cGUgIT0gS2V5TWdtdC5OT05FKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnLnByZVNoYXJlZEtleSA9IGluLnJlYWRVVEYoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1XaWZpQXBDb25maWcgPSBjb25maWc7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlnbm9yZSkgewotICAgICAgICAgICAgc2V0RGVmYXVsdEFwQ29uZmlndXJhdGlvbigpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgaWYgKGluICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBpbi5jbG9zZSgpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBNZXNzZW5nZXIgZ2V0TWVzc2VuZ2VyKCkgewotICAgICAgICByZXR1cm4gbmV3IE1lc3NlbmdlcihnZXRIYW5kbGVyKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB3cml0ZUFwQ29uZmlndXJhdGlvbihmaW5hbCBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXQgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgb3V0ID0gbmV3IERhdGFPdXRwdXRTdHJlYW0obmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGVPdXRwdXRTdHJlYW0oQVBfQ09ORklHX0ZJTEUpKSk7Ci0KLSAgICAgICAgICAgIG91dC53cml0ZUludChBUF9DT05GSUdfRklMRV9WRVJTSU9OKTsKLSAgICAgICAgICAgIG91dC53cml0ZVVURihjb25maWcuU1NJRCk7Ci0gICAgICAgICAgICBpbnQgYXV0aFR5cGUgPSBjb25maWcuZ2V0QXV0aFR5cGUoKTsKLSAgICAgICAgICAgIG91dC53cml0ZUludChhdXRoVHlwZSk7Ci0gICAgICAgICAgICBpZihhdXRoVHlwZSAhPSBLZXlNZ210Lk5PTkUpIHsKLSAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoY29uZmlnLnByZVNoYXJlZEtleSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy5lKFRBRywgIkVycm9yIHdyaXRpbmcgaG90c3BvdCBjb25maWd1cmF0aW9uIiArIGUpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgaWYgKG91dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkge30KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIEdlbmVyYXRlIGEgZGVmYXVsdCBXUEEyIGJhc2VkIGNvbmZpZ3VyYXRpb24gd2l0aCBhIHJhbmRvbSBwYXNzd29yZC4KLSAgICAgICBXZSBhcmUgY2hhbmdpbmcgdGhlIFdpZmkgQXAgY29uZmlndXJhdGlvbiBzdG9yYWdlIGZyb20gc2VjdXJlIHNldHRpbmdzIHRvIGEKLSAgICAgICBmbGF0IGZpbGUgYWNjZXNzaWJsZSBvbmx5IGJ5IHRoZSBzeXN0ZW0uIEEgV1BBMiBiYXNlZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KLSAgICAgICB3aWxsIGtlZXAgdGhlIGRldmljZSBzZWN1cmUgYWZ0ZXIgdGhlIHVwZGF0ZSAqLwotICAgIHByaXZhdGUgdm9pZCBzZXREZWZhdWx0QXBDb25maWd1cmF0aW9uKCkgewotICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgV2lmaUNvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgY29uZmlnLlNTSUQgPSBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcud2lmaV90ZXRoZXJfY29uZmlndXJlX3NzaWRfZGVmYXVsdCk7Ci0gICAgICAgIGNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudC5zZXQoS2V5TWdtdC5XUEEyX1BTSyk7Ci0gICAgICAgIFN0cmluZyByYW5kb21VVUlEID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKTsKLSAgICAgICAgLy9maXJzdCAxMiBjaGFycyBmcm9tIHh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eAotICAgICAgICBjb25maWcucHJlU2hhcmVkS2V5ID0gcmFuZG9tVVVJRC5zdWJzdHJpbmcoMCwgOCkgKyByYW5kb21VVUlELnN1YnN0cmluZyg5LDEzKTsKLSAgICAgICAgc2VuZE1lc3NhZ2UoV2lmaVN0YXRlTWFjaGluZS5DTURfU0VUX0FQX0NPTkZJRywgY29uZmlnKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpQ29uZmlnU3RvcmUuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlDb25maWdTdG9yZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmFlMjE1Li4wMDAwMDAwCi0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlDb25maWdTdG9yZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLm5ldC53aWZpOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLm5ldC5MaW5rQWRkcmVzczsKLWltcG9ydCBhbmRyb2lkLm5ldC5MaW5rUHJvcGVydGllczsKLWltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrVXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZTsKLWltcG9ydCBhbmRyb2lkLm5ldC5Qcm94eVByb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuUm91dGVJbmZvOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaUNvbmZpZ3VyYXRpb24uSXBBc3NpZ25tZW50OwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaUNvbmZpZ3VyYXRpb24uS2V5TWdtdDsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlDb25maWd1cmF0aW9uLlByb3h5U2V0dGluZ3M7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpQ29uZmlndXJhdGlvbi5TdGF0dXM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5OZXR3b3JrVXBkYXRlUmVzdWx0OwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC53aWZpLldpZmlDb25maWd1cmF0aW9uLklOVkFMSURfTkVUV09SS19JRDsKLWltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwotaW1wb3J0IGFuZHJvaWQub3MuRmlsZU9ic2VydmVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwotaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKLWltcG9ydCBhbmRyb2lkLnNlY3VyaXR5LktleVN0b3JlOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvY2FsTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZE91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRGF0YUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRGF0YU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkVPRkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKLWltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnNlY3VyaXR5LlB1YmxpY0tleTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5CaXRTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgdGhlIEFQSSB0byBtYW5hZ2UgY29uZmlndXJlZAotICogd2lmaSBuZXR3b3Jrcy4gVGhlIEFQSSBpcyBub3QgdGhyZWFkIHNhZmUgaXMgYmVpbmcKLSAqIHVzZWQgb25seSBmcm9tIFdpZmlTdGF0ZU1hY2hpbmUuCi0gKgotICogSXQgZGVhbHMgd2l0aCB0aGUgZm9sbG93aW5nCi0gKiAtIEFkZC91cGRhdGUvcmVtb3ZlIGEgV2lmaUNvbmZpZ3VyYXRpb24KLSAqICAgVGhlIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdHdvIHR5cGVzIG9mIGluZm9ybWF0aW9uLgotICogICAgID0gSVAgYW5kIHByb3h5IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBoYW5kbGVkIGJ5IFdpZmlDb25maWdTdG9yZSBhbmQKLSAqICAgICAgIGlzIHNhdmVkIHRvIGRpc2sgb24gYW55IGNoYW5nZS4KLSAqCi0gKiAgICAgICBUaGUgZm9ybWF0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBhcyBmb2xsb3dzOgotICogICAgICAgPHZlcnNpb24+Ci0gKiAgICAgICA8bmV0QV9rZXkxPjxuZXRBX3ZhbHVlMT48bmV0QV9rZXkyPjxuZXRBX3ZhbHVlMj4uLi48RU9TPgotICogICAgICAgPG5ldEJfa2V5MT48bmV0Ql92YWx1ZTE+PG5ldEJfa2V5Mj48bmV0Ql92YWx1ZTI+Li4uPEVPUz4KLSAqICAgICAgIC4uCi0gKgotICogICAgICAgKGtleSwgdmFsdWUpIHBhaXJzIGZvciBhIGdpdmVuIG5ldHdvcmsgYXJlIGdyb3VwZWQgdG9nZXRoZXIgYW5kIGNhbgotICogICAgICAgYmUgaW4gYW55IG9yZGVyLiBBIEVPUyBhdCB0aGUgZW5kIG9mIGEgc2V0IG9mIChrZXksIHZhbHVlKSBwYWlycwotICogICAgICAgaW5kaWNhdGVzIHRoYXQgdGhlIG5leHQgc2V0IG9mIChrZXksIHZhbHVlKSBwYWlycyBhcmUgZm9yIGEgbmV3Ci0gKiAgICAgICBuZXR3b3JrLiBBIG5ldHdvcmsgaXMgaWRlbnRpZmllZCBieSBhIHVuaXF1ZSBJRF9LRVkuIElmIHRoZXJlIGlzIG5vCi0gKiAgICAgICBJRF9LRVkgaW4gdGhlIChrZXksIHZhbHVlKSBwYWlycywgdGhlIGRhdGEgaXMgZGlzY2FyZGVkLgotICoKLSAqICAgICAgIEFuIGludmFsaWQgdmVyc2lvbiBvbiByZWFkIHdvdWxkIHJlc3VsdCBpbiBkaXNjYXJkaW5nIHRoZSBjb250ZW50cyBvZgotICogICAgICAgdGhlIGZpbGUuIE9uIHRoZSBuZXh0IHdyaXRlLCB0aGUgbGF0ZXN0IHZlcnNpb24gaXMgd3JpdHRlbiB0byBmaWxlLgotICoKLSAqICAgICAgIEFueSBmYWlsdXJlcyBkdXJpbmcgcmVhZCBvciB3cml0ZSB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFyZSBpZ25vcmVkCi0gKiAgICAgICB3aXRob3V0IHJlcG9ydGluZyB0byB0aGUgdXNlciBzaW5jZSB0aGUgbGlrZWxpaG9vZCBvZiB0aGVzZSBlcnJvcnMgYXJlCi0gKiAgICAgICBsb3cgYW5kIHRoZSBpbXBhY3Qgb24gY29ubmVjdGl2aXR5IGlzIGxvdy4KLSAqCi0gKiAgICAgPSBTU0lEICYgc2VjdXJpdHkgZGV0YWlscyB0aGF0IGlzIHB1c2hlZCB0byB0aGUgc3VwcGxpY2FudC4KLSAqICAgICAgIHN1cHBsaWNhbnQgc2F2ZXMgdGhlc2UgZGV0YWlscyB0byB0aGUgZGlzayBvbiBjYWxsaW5nCi0gKiAgICAgICBzYXZlQ29uZmlnQ29tbWFuZCgpLgotICoKLSAqICAgICAgIFdlIGhhdmUgdHdvIGtpbmRzIG9mIEFQSXMgZXhwb3NlZDoKLSAqICAgICAgICA+IHB1YmxpYyBBUEkgY2FsbHMgdGhhdCBwcm92aWRlIGZpbmUgZ3JhaW5lZCBjb250cm9sCi0gKiAgICAgICAgICAtIGVuYWJsZU5ldHdvcmssIGRpc2FibGVOZXR3b3JrLCBhZGRPclVwZGF0ZU5ldHdvcmsoKSwKLSAqICAgICAgICAgIHJlbW92ZU5ldHdvcmsoKS4gRm9yIHRoZXNlIGNhbGxzLCB0aGUgY29uZmlnIGlzIG5vdCBwZXJzaXN0ZWQKLSAqICAgICAgICAgIHRvIHRoZSBkaXNrLiAoVE9ETzogZGVwcmVjYXRlIHRoZXNlIGNhbGxzIGluIFdpZmlNYW5hZ2VyKQotICogICAgICAgID4gVGhlIG5ldyBBUEkgY2FsbHMgLSBzZWxlY3ROZXR3b3JrKCksIHNhdmVOZXR3b3JrKCkgJiBmb3JnZXROZXR3b3JrKCkuCi0gKiAgICAgICAgICBUaGVzZSBjYWxscyBwZXJzaXN0IHRoZSBzdXBwbGljYW50IGNvbmZpZyB0byBkaXNrLgotICoKLSAqIC0gTWFpbnRhaW4gYSBsaXN0IG9mIGNvbmZpZ3VyZWQgbmV0d29ya3MgZm9yIHF1aWNrIGFjY2VzcwotICoKLSAqLwotY2xhc3MgV2lmaUNvbmZpZ1N0b3JlIHsKLQotICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldpZmlDb25maWdTdG9yZSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBEQkcgPSB0cnVlOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gVkRCRyA9IGZhbHNlOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNVUFBMSUNBTlRfQ09ORklHX0ZJTEUgPSAiL2RhdGEvbWlzYy93aWZpL3dwYV9zdXBwbGljYW50LmNvbmYiOwotCi0gICAgLyogY29uZmlndXJlZCBuZXR3b3JrcyB3aXRoIG5ldHdvcmsgaWQgYXMgdGhlIGtleSAqLwotICAgIHByaXZhdGUgSGFzaE1hcDxJbnRlZ2VyLCBXaWZpQ29uZmlndXJhdGlvbj4gbUNvbmZpZ3VyZWROZXR3b3JrcyA9Ci0gICAgICAgICAgICBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBXaWZpQ29uZmlndXJhdGlvbj4oKTsKLQotICAgIC8qIEEgbmV0d29yayBpZCBpcyBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBhIG5ldHdvcmsgY29uZmlndXJlZCBpbiB0aGUKLSAgICAgKiBzdXBwbGljYW50LiBOZXR3b3JrIGlkcyBhcmUgZ2VuZXJhdGVkIHdoZW4gdGhlIHN1cHBsaWNhbnQgcmVhZHMKLSAgICAgKiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGF0IHN0YXJ0IGFuZCBjYW4gdGh1cyBjaGFuZ2UgZm9yIG5ldHdvcmtzLgotICAgICAqIFdlIHN0b3JlIHRoZSBJUCBjb25maWd1cmF0aW9uIGZvciBuZXR3b3JrcyBhbG9uZyB3aXRoIGEgdW5pcXVlIGlkCi0gICAgICogdGhhdCBpcyBnZW5lcmF0ZWQgZnJvbSBTU0lEIGFuZCBzZWN1cml0eSB0eXBlIG9mIHRoZSBuZXR3b3JrLiBBIG1hcHBpbmcKLSAgICAgKiBmcm9tIHRoZSBnZW5lcmF0ZWQgdW5pcXVlIGlkIHRvIG5ldHdvcmsgaWQgb2YgdGhlIG5ldHdvcmsgaXMgbmVlZGVkIHRvCi0gICAgICogbWFwIHN1cHBsaWNhbnQgY29uZmlnIHRvIElQIGNvbmZpZ3VyYXRpb24uICovCi0gICAgcHJpdmF0ZSBIYXNoTWFwPEludGVnZXIsIEludGVnZXI+IG1OZXR3b3JrSWRzID0KLSAgICAgICAgICAgIG5ldyBIYXNoTWFwPEludGVnZXIsIEludGVnZXI+KCk7Ci0KLSAgICAvKiBUcmFja3MgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgb2YgY29uZmlndXJlZCBuZXR3b3JrcyAqLwotICAgIHByaXZhdGUgaW50IG1MYXN0UHJpb3JpdHkgPSAtMTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBpcENvbmZpZ0ZpbGUgPSBFbnZpcm9ubWVudC5nZXREYXRhRGlyZWN0b3J5KCkgKwotICAgICAgICAgICAgIi9taXNjL3dpZmkvaXBjb25maWcudHh0IjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJUENPTkZJR19GSUxFX1ZFUlNJT04gPSAyOwotCi0gICAgLyogSVAgYW5kIHByb3h5IGNvbmZpZ3VyYXRpb24ga2V5cyAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9LRVkgPSAiaWQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJUF9BU1NJR05NRU5UX0tFWSA9ICJpcEFzc2lnbm1lbnQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5LX0FERFJFU1NfS0VZID0gImxpbmtBZGRyZXNzIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgR0FURVdBWV9LRVkgPSAiZ2F0ZXdheSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEROU19LRVkgPSAiZG5zIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPWFlfU0VUVElOR1NfS0VZID0gInByb3h5U2V0dGluZ3MiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9YWV9IT1NUX0tFWSA9ICJwcm94eUhvc3QiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9YWV9QT1JUX0tFWSA9ICJwcm94eVBvcnQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9YWV9QQUNfRklMRSA9ICJwcm94eVBhYyI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYQ0xVU0lPTl9MSVNUX0tFWSA9ICJleGNsdXNpb25MaXN0IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU9TID0gImVvcyI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIExvY2FsTG9nIG1Mb2NhbExvZzsKLSAgICBwcml2YXRlIGZpbmFsIFdwYUNvbmZpZ0ZpbGVPYnNlcnZlciBtRmlsZU9ic2VydmVyOwotCi0gICAgcHJpdmF0ZSBXaWZpTmF0aXZlIG1XaWZpTmF0aXZlOwotICAgIHByaXZhdGUgZmluYWwgS2V5U3RvcmUgbUtleVN0b3JlID0gS2V5U3RvcmUuZ2V0SW5zdGFuY2UoKTsKLQotICAgIFdpZmlDb25maWdTdG9yZShDb250ZXh0IGMsIFdpZmlOYXRpdmUgd24pIHsKLSAgICAgICAgbUNvbnRleHQgPSBjOwotICAgICAgICBtV2lmaU5hdGl2ZSA9IHduOwotCi0gICAgICAgIGlmIChWREJHKSB7Ci0gICAgICAgICAgICBtTG9jYWxMb2cgPSBtV2lmaU5hdGl2ZS5nZXRMb2NhbExvZygpOwotICAgICAgICAgICAgbUZpbGVPYnNlcnZlciA9IG5ldyBXcGFDb25maWdGaWxlT2JzZXJ2ZXIoKTsKLSAgICAgICAgICAgIG1GaWxlT2JzZXJ2ZXIuc3RhcnRXYXRjaGluZygpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUxvY2FsTG9nID0gbnVsbDsKLSAgICAgICAgICAgIG1GaWxlT2JzZXJ2ZXIgPSBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgV3BhQ29uZmlnRmlsZU9ic2VydmVyIGV4dGVuZHMgRmlsZU9ic2VydmVyIHsKLQotICAgICAgICBwdWJsaWMgV3BhQ29uZmlnRmlsZU9ic2VydmVyKCkgewotICAgICAgICAgICAgc3VwZXIoU1VQUExJQ0FOVF9DT05GSUdfRklMRSwgQ0xPU0VfV1JJVEUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRXZlbnQoaW50IGV2ZW50LCBTdHJpbmcgcGF0aCkgewotICAgICAgICAgICAgaWYgKGV2ZW50ID09IENMT1NFX1dSSVRFKSB7Ci0gICAgICAgICAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoU1VQUExJQ0FOVF9DT05GSUdfRklMRSk7Ci0gICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJ3cGFfc3VwcGxpY2FudC5jb25mIGNoYW5nZWQ7IG5ldyBzaXplID0gIiArIGZpbGUubGVuZ3RoKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBGZXRjaCB0aGUgbGlzdCBvZiBjb25maWd1cmVkIG5ldHdvcmtzCi0gICAgICogYW5kIGVuYWJsZSBhbGwgc3RvcmVkIG5ldHdvcmtzIGluIHN1cHBsaWNhbnQuCi0gICAgICovCi0gICAgdm9pZCBsb2FkQW5kRW5hYmxlQWxsTmV0d29ya3MoKSB7Ci0gICAgICAgIGlmIChEQkcpIGxvZygiTG9hZGluZyBjb25maWcgYW5kIGVuYWJsaW5nIGFsbCBuZXR3b3JrcyIpOwotICAgICAgICBsb2FkQ29uZmlndXJlZE5ldHdvcmtzKCk7Ci0gICAgICAgIGVuYWJsZUFsbE5ldHdvcmtzKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmV0Y2ggdGhlIGxpc3Qgb2YgY3VycmVudGx5IGNvbmZpZ3VyZWQgbmV0d29ya3MKLSAgICAgKiBAcmV0dXJuIExpc3Qgb2YgbmV0d29ya3MKLSAgICAgKi8KLSAgICBMaXN0PFdpZmlDb25maWd1cmF0aW9uPiBnZXRDb25maWd1cmVkTmV0d29ya3MoKSB7Ci0gICAgICAgIExpc3Q8V2lmaUNvbmZpZ3VyYXRpb24+IG5ldHdvcmtzID0gbmV3IEFycmF5TGlzdDxXaWZpQ29uZmlndXJhdGlvbj4oKTsKLSAgICAgICAgZm9yKFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA6IG1Db25maWd1cmVkTmV0d29ya3MudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtzLmFkZChuZXcgV2lmaUNvbmZpZ3VyYXRpb24oY29uZmlnKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldHdvcmtzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIGVuYWJsZSBhbGwgbmV0d29ya3MgYW5kIHNhdmUgY29uZmlnLiBUaGlzIHdpbGwgYmUgYSBuby1vcCBpZiB0aGUgbGlzdAotICAgICAqIG9mIGNvbmZpZ3VyZWQgbmV0d29ya3MgaW5kaWNhdGVzIGFsbCBuZXR3b3JrcyBhcyBiZWluZyBlbmFibGVkCi0gICAgICovCi0gICAgdm9pZCBlbmFibGVBbGxOZXR3b3JrcygpIHsKLSAgICAgICAgYm9vbGVhbiBuZXR3b3JrRW5hYmxlZFN0YXRlQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBmb3IoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnIDogbUNvbmZpZ3VyZWROZXR3b3Jrcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYoY29uZmlnICE9IG51bGwgJiYgY29uZmlnLnN0YXR1cyA9PSBTdGF0dXMuRElTQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBpZihtV2lmaU5hdGl2ZS5lbmFibGVOZXR3b3JrKGNvbmZpZy5uZXR3b3JrSWQsIGZhbHNlKSkgewotICAgICAgICAgICAgICAgICAgICBuZXR3b3JrRW5hYmxlZFN0YXRlQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zdGF0dXMgPSBTdGF0dXMuRU5BQkxFRDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsb2dlKCJFbmFibGUgbmV0d29yayBmYWlsZWQgb24gIiArIGNvbmZpZy5uZXR3b3JrSWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZXR3b3JrRW5hYmxlZFN0YXRlQ2hhbmdlZCkgewotICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2F2ZUNvbmZpZygpOwotICAgICAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogU2VsZWN0cyB0aGUgc3BlY2lmaWVkIG5ldHdvcmsgZm9yIGNvbm5lY3Rpb24uIFRoaXMgaW52b2x2ZXMKLSAgICAgKiB1cGRhdGluZyB0aGUgcHJpb3JpdHkgb2YgYWxsIHRoZSBuZXR3b3JrcyBhbmQgZW5hYmxpbmcgdGhlIGdpdmVuCi0gICAgICogbmV0d29yayB3aGlsZSBkaXNhYmxpbmcgb3RoZXJzLgotICAgICAqCi0gICAgICogU2VsZWN0aW5nIGEgbmV0d29yayB3aWxsIGxlYXZlIHRoZSBvdGhlciBuZXR3b3JrcyBkaXNhYmxlZCBhbmQKLSAgICAgKiBhIGNhbGwgdG8gZW5hYmxlQWxsTmV0d29ya3MoKSBuZWVkcyB0byBiZSBpc3N1ZWQgdXBvbiBhIGNvbm5lY3Rpb24KLSAgICAgKiBvciBhIGZhaWx1cmUgZXZlbnQgZnJvbSBzdXBwbGljYW50Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayB0byBzZWxlY3QgZm9yIGNvbm5lY3Rpb24KLSAgICAgKiBAcmV0dXJuIGZhbHNlIGlmIHRoZSBuZXR3b3JrIGlkIGlzIGludmFsaWQKLSAgICAgKi8KLSAgICBib29sZWFuIHNlbGVjdE5ldHdvcmsoaW50IG5ldElkKSB7Ci0gICAgICAgIGlmIChWREJHKSBsb2NhbExvZygic2VsZWN0TmV0d29yayIsIG5ldElkKTsKLSAgICAgICAgaWYgKG5ldElkID09IElOVkFMSURfTkVUV09SS19JRCkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFJlc2V0IHRoZSBwcmlvcml0eSBvZiBlYWNoIG5ldHdvcmsgYXQgc3RhcnQgb3IgaWYgaXQgZ29lcyB0b28gaGlnaC4KLSAgICAgICAgaWYgKG1MYXN0UHJpb3JpdHkgPT0gLTEgfHwgbUxhc3RQcmlvcml0eSA+IDEwMDAwMDApIHsKLSAgICAgICAgICAgIGZvcihXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgOiBtQ29uZmlndXJlZE5ldHdvcmtzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5uZXR3b3JrSWQgIT0gSU5WQUxJRF9ORVRXT1JLX0lEKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wcmlvcml0eSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGFkZE9yVXBkYXRlTmV0d29ya05hdGl2ZShjb25maWcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1MYXN0UHJpb3JpdHkgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2V0IHRvIHRoZSBoaWdoZXN0IHByaW9yaXR5IGFuZCBzYXZlIHRoZSBjb25maWd1cmF0aW9uLgotICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgV2lmaUNvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgY29uZmlnLm5ldHdvcmtJZCA9IG5ldElkOwotICAgICAgICBjb25maWcucHJpb3JpdHkgPSArK21MYXN0UHJpb3JpdHk7Ci0KLSAgICAgICAgYWRkT3JVcGRhdGVOZXR3b3JrTmF0aXZlKGNvbmZpZyk7Ci0gICAgICAgIG1XaWZpTmF0aXZlLnNhdmVDb25maWcoKTsKLQotICAgICAgICAvKiBFbmFibGUgdGhlIGdpdmVuIG5ldHdvcmsgd2hpbGUgZGlzYWJsaW5nIGFsbCBvdGhlciBuZXR3b3JrcyAqLwotICAgICAgICBlbmFibGVOZXR3b3JrV2l0aG91dEJyb2FkY2FzdChuZXRJZCwgdHJ1ZSk7Ci0KLSAgICAgICAvKiBBdm9pZCBzYXZpbmcgdGhlIGNvbmZpZyAmIHNlbmRpbmcgYSBicm9hZGNhc3QgdG8gcHJldmVudCBzZXR0aW5ncwotICAgICAgICAqIGZyb20gZGlzcGxheWluZyBhIGRpc2FibGVkIGxpc3Qgb2YgbmV0d29ya3MgKi8KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkL3VwZGF0ZSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gYW5kIHNhdmUgY29uZmlnCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY29uZmlnIFdpZmlDb25maWd1cmF0aW9uIHRvIGJlIHNhdmVkCi0gICAgICogQHJldHVybiBuZXR3b3JrIHVwZGF0ZSByZXN1bHQKLSAgICAgKi8KLSAgICBOZXR3b3JrVXBkYXRlUmVzdWx0IHNhdmVOZXR3b3JrKFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgICAgICBpZiAoVkRCRykgbG9jYWxMb2coInNhdmVOZXR3b3JrIiwgY29uZmlnLm5ldHdvcmtJZCk7Ci0gICAgICAgIC8vIEEgbmV3IG5ldHdvcmsgY2Fubm90IGhhdmUgbnVsbCBTU0lECi0gICAgICAgIGlmIChjb25maWcgPT0gbnVsbCB8fCAoY29uZmlnLm5ldHdvcmtJZCA9PSBJTlZBTElEX05FVFdPUktfSUQgJiYKLSAgICAgICAgICAgICAgICBjb25maWcuU1NJRCA9PSBudWxsKSkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrVXBkYXRlUmVzdWx0KElOVkFMSURfTkVUV09SS19JRCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIG5ld05ldHdvcmsgPSAoY29uZmlnLm5ldHdvcmtJZCA9PSBJTlZBTElEX05FVFdPUktfSUQpOwotICAgICAgICBOZXR3b3JrVXBkYXRlUmVzdWx0IHJlc3VsdCA9IGFkZE9yVXBkYXRlTmV0d29ya05hdGl2ZShjb25maWcpOwotICAgICAgICBpbnQgbmV0SWQgPSByZXN1bHQuZ2V0TmV0d29ya0lkKCk7Ci0gICAgICAgIC8qIGVuYWJsZSBhIG5ldyBuZXR3b3JrICovCi0gICAgICAgIGlmIChuZXdOZXR3b3JrICYmIG5ldElkICE9IElOVkFMSURfTkVUV09SS19JRCkgewotICAgICAgICAgICAgbVdpZmlOYXRpdmUuZW5hYmxlTmV0d29yayhuZXRJZCwgZmFsc2UpOwotICAgICAgICAgICAgbUNvbmZpZ3VyZWROZXR3b3Jrcy5nZXQobmV0SWQpLnN0YXR1cyA9IFN0YXR1cy5FTkFCTEVEOwotICAgICAgICB9Ci0gICAgICAgIG1XaWZpTmF0aXZlLnNhdmVDb25maWcoKTsKLSAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoY29uZmlnLCByZXN1bHQuaXNOZXdOZXR3b3JrKCkgPwotICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkNIQU5HRV9SRUFTT05fQURERUQgOiBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0NPTkZJR19DSEFOR0UpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHZvaWQgdXBkYXRlU3RhdHVzKGludCBuZXRJZCwgRGV0YWlsZWRTdGF0ZSBzdGF0ZSkgewotICAgICAgICBpZiAobmV0SWQgIT0gSU5WQUxJRF9ORVRXT1JLX0lEKSB7Ci0gICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7Ci0gICAgICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHJldHVybjsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLnN0YXR1cyA9IFN0YXR1cy5DVVJSRU5UOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIERJU0NPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgLy9JZiBuZXR3b3JrIGlzIGFscmVhZHkgZGlzYWJsZWQsIGtlZXAgdGhlIHN0YXR1cwotICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnN0YXR1cyA9PSBTdGF0dXMuQ1VSUkVOVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnN0YXR1cyA9IFN0YXR1cy5FTkFCTEVEOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vZG8gbm90aGluZywgcmV0YWluIHRoZSBleGlzdGluZyBzdGF0ZQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvcmdldCB0aGUgc3BlY2lmaWVkIG5ldHdvcmsgYW5kIHNhdmUgY29uZmlnCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayB0byBmb3JnZXQKLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBpdCBzdWNjZWVkcywge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKLSAgICAgKi8KLSAgICBib29sZWFuIGZvcmdldE5ldHdvcmsoaW50IG5ldElkKSB7Ci0gICAgICAgIGlmIChWREJHKSBsb2NhbExvZygiZm9yZ2V0TmV0d29yayIsIG5ldElkKTsKLSAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnJlbW92ZU5ldHdvcmsobmV0SWQpKSB7Ci0gICAgICAgICAgICBtV2lmaU5hdGl2ZS5zYXZlQ29uZmlnKCk7Ci0gICAgICAgICAgICByZW1vdmVDb25maWdBbmRTZW5kQnJvYWRjYXN0SWZOZWVkZWQobmV0SWQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gcmVtb3ZlIG5ldHdvcmsgIiArIG5ldElkKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZC91cGRhdGUgYSBuZXR3b3JrLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gc2F2ZUNvbmZpZyBvcGVyYXRpb24uCi0gICAgICogVGhpcyBmdW5jdGlvbiBpcyByZXRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBwdWJsaWMKLSAgICAgKiBBUEkuIFRoZSBtb3JlIHBvd2VyZnVsIHNhdmVOZXR3b3JrKCkgaXMgdXNlZCBieSB0aGUKLSAgICAgKiBzdGF0ZSBtYWNoaW5lCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY29uZmlnIHdpZmkgY29uZmlndXJhdGlvbiB0byBhZGQvdXBkYXRlCi0gICAgICogQHJldHVybiBuZXR3b3JrIElkCi0gICAgICovCi0gICAgaW50IGFkZE9yVXBkYXRlTmV0d29yayhXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJhZGRPclVwZGF0ZU5ldHdvcmsiLCBjb25maWcubmV0d29ya0lkKTsKLSAgICAgICAgTmV0d29ya1VwZGF0ZVJlc3VsdCByZXN1bHQgPSBhZGRPclVwZGF0ZU5ldHdvcmtOYXRpdmUoY29uZmlnKTsKLSAgICAgICAgaWYgKHJlc3VsdC5nZXROZXR3b3JrSWQoKSAhPSBXaWZpQ29uZmlndXJhdGlvbi5JTlZBTElEX05FVFdPUktfSUQpIHsKLSAgICAgICAgICAgIHNlbmRDb25maWd1cmVkTmV0d29ya3NDaGFuZ2VkQnJvYWRjYXN0KG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KHJlc3VsdC5nZXROZXR3b3JrSWQoKSksCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pc05ld05ldHdvcmsgPyBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0FEREVEIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0NPTkZJR19DSEFOR0UpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQuZ2V0TmV0d29ya0lkKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlIGEgbmV0d29yay4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHNhdmVDb25maWcgb3BlcmF0aW9uLgotICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcHVibGljCi0gICAgICogQVBJLiBUaGUgbW9yZSBwb3dlcmZ1bCBmb3JnZXROZXR3b3JrKCkgaXMgdXNlZCBieSB0aGUKLSAgICAgKiBzdGF0ZSBtYWNoaW5lIGZvciBuZXR3b3JrIHJlbW92YWwKLSAgICAgKgotICAgICAqIEBwYXJhbSBuZXRJZCBuZXR3b3JrIHRvIGJlIHJlbW92ZWQKLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBpdCBzdWNjZWVkcywge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKLSAgICAgKi8KLSAgICBib29sZWFuIHJlbW92ZU5ldHdvcmsoaW50IG5ldElkKSB7Ci0gICAgICAgIGlmIChWREJHKSBsb2NhbExvZygicmVtb3ZlTmV0d29yayIsIG5ldElkKTsKLSAgICAgICAgYm9vbGVhbiByZXQgPSBtV2lmaU5hdGl2ZS5yZW1vdmVOZXR3b3JrKG5ldElkKTsKLSAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgcmVtb3ZlQ29uZmlnQW5kU2VuZEJyb2FkY2FzdElmTmVlZGVkKG5ldElkKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCByZW1vdmVDb25maWdBbmRTZW5kQnJvYWRjYXN0SWZOZWVkZWQoaW50IG5ldElkKSB7Ci0gICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KG5ldElkKTsKLSAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBSZW1vdmUgYW55IGFzc29jaWF0ZWQga2V5cwotICAgICAgICAgICAgaWYgKGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjb25maWcuZW50ZXJwcmlzZUNvbmZpZy5yZW1vdmVLZXlzKG1LZXlTdG9yZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtQ29uZmlndXJlZE5ldHdvcmtzLnJlbW92ZShuZXRJZCk7Ci0gICAgICAgICAgICBtTmV0d29ya0lkcy5yZW1vdmUoY29uZmlnS2V5KGNvbmZpZykpOwotCi0gICAgICAgICAgICB3cml0ZUlwQW5kUHJveHlDb25maWd1cmF0aW9ucygpOwotICAgICAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoY29uZmlnLCBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX1JFTU9WRUQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRW5hYmxlIGEgbmV0d29yay4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHNhdmVDb25maWcgb3BlcmF0aW9uLgotICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcHVibGljCi0gICAgICogQVBJLiBUaGUgbW9yZSBwb3dlcmZ1bCBzZWxlY3ROZXR3b3JrKCkvc2F2ZU5ldHdvcmsoKSBpcyB1c2VkIGJ5IHRoZQotICAgICAqIHN0YXRlIG1hY2hpbmUgZm9yIGNvbm5lY3RpbmcgdG8gYSBuZXR3b3JrCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayB0byBiZSBlbmFibGVkCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgaXQgc3VjY2VlZHMsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCi0gICAgICovCi0gICAgYm9vbGVhbiBlbmFibGVOZXR3b3JrKGludCBuZXRJZCwgYm9vbGVhbiBkaXNhYmxlT3RoZXJzKSB7Ci0gICAgICAgIGJvb2xlYW4gcmV0ID0gZW5hYmxlTmV0d29ya1dpdGhvdXRCcm9hZGNhc3QobmV0SWQsIGRpc2FibGVPdGhlcnMpOwotICAgICAgICBpZiAoZGlzYWJsZU90aGVycykgewotICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJlbmFibGVOZXR3b3JrKGRpc2FibGVPdGhlcnM9dHJ1ZSkgIiwgbmV0SWQpOwotICAgICAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChWREJHKSBsb2NhbExvZygiZW5hYmxlTmV0d29yayhkaXNhYmxlT3RoZXJzPWZhbHNlKSAiLCBuZXRJZCk7Ci0gICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBlbmFibGVkTmV0d29yayA9IG51bGw7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQobUNvbmZpZ3VyZWROZXR3b3JrcykgewotICAgICAgICAgICAgICAgIGVuYWJsZWROZXR3b3JrID0gbUNvbmZpZ3VyZWROZXR3b3Jrcy5nZXQobmV0SWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gY2hlY2sganVzdCBpbiBjYXNlIHRoZSBuZXR3b3JrIHdhcyByZW1vdmVkIGJ5IHNvbWVvbmUgZWxzZS4KLSAgICAgICAgICAgIGlmIChlbmFibGVkTmV0d29yayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoZW5hYmxlZE5ldHdvcmssCi0gICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0NPTkZJR19DSEFOR0UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgYm9vbGVhbiBlbmFibGVOZXR3b3JrV2l0aG91dEJyb2FkY2FzdChpbnQgbmV0SWQsIGJvb2xlYW4gZGlzYWJsZU90aGVycykgewotICAgICAgICBib29sZWFuIHJldCA9IG1XaWZpTmF0aXZlLmVuYWJsZU5ldHdvcmsobmV0SWQsIGRpc2FibGVPdGhlcnMpOwotCi0gICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KG5ldElkKTsKLSAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSBjb25maWcuc3RhdHVzID0gU3RhdHVzLkVOQUJMRUQ7Ci0KLSAgICAgICAgaWYgKGRpc2FibGVPdGhlcnMpIHsKLSAgICAgICAgICAgIG1hcmtBbGxOZXR3b3Jrc0Rpc2FibGVkRXhjZXB0KG5ldElkKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIHZvaWQgZGlzYWJsZUFsbE5ldHdvcmtzKCkgewotICAgICAgICBpZiAoVkRCRykgbG9jYWxMb2coImRpc2FibGVBbGxOZXR3b3JrcyIpOwotICAgICAgICBib29sZWFuIG5ldHdvcmtEaXNhYmxlZCA9IGZhbHNlOwotICAgICAgICBmb3IoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnIDogbUNvbmZpZ3VyZWROZXR3b3Jrcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYoY29uZmlnICE9IG51bGwgJiYgY29uZmlnLnN0YXR1cyAhPSBTdGF0dXMuRElTQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBpZihtV2lmaU5hdGl2ZS5kaXNhYmxlTmV0d29yayhjb25maWcubmV0d29ya0lkKSkgewotICAgICAgICAgICAgICAgICAgICBuZXR3b3JrRGlzYWJsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBjb25maWcuc3RhdHVzID0gU3RhdHVzLkRJU0FCTEVEOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIkRpc2FibGUgbmV0d29yayBmYWlsZWQgb24gIiArIGNvbmZpZy5uZXR3b3JrSWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZXR3b3JrRGlzYWJsZWQpIHsKLSAgICAgICAgICAgIHNlbmRDb25maWd1cmVkTmV0d29ya3NDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyoqCi0gICAgICogRGlzYWJsZSBhIG5ldHdvcmsuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBzYXZlQ29uZmlnIG9wZXJhdGlvbi4KLSAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayB0byBiZSBkaXNhYmxlZAotICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGl0IHN1Y2NlZWRzLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQotICAgICAqLwotICAgIGJvb2xlYW4gZGlzYWJsZU5ldHdvcmsoaW50IG5ldElkKSB7Ci0gICAgICAgIHJldHVybiBkaXNhYmxlTmV0d29yayhuZXRJZCwgV2lmaUNvbmZpZ3VyYXRpb24uRElTQUJMRURfVU5LTk9XTl9SRUFTT04pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERpc2FibGUgYSBuZXR3b3JrLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gc2F2ZUNvbmZpZyBvcGVyYXRpb24uCi0gICAgICogQHBhcmFtIG5ldElkIG5ldHdvcmsgdG8gYmUgZGlzYWJsZWQKLSAgICAgKiBAcGFyYW0gcmVhc29uIHJlYXNvbiBjb2RlIG5ldHdvcmsgd2FzIGRpc2FibGVkCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgaXQgc3VjY2VlZHMsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCi0gICAgICovCi0gICAgYm9vbGVhbiBkaXNhYmxlTmV0d29yayhpbnQgbmV0SWQsIGludCByZWFzb24pIHsKLSAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJkaXNhYmxlTmV0d29yayIsIG5ldElkKTsKLSAgICAgICAgYm9vbGVhbiByZXQgPSBtV2lmaU5hdGl2ZS5kaXNhYmxlTmV0d29yayhuZXRJZCk7Ci0gICAgICAgIFdpZmlDb25maWd1cmF0aW9uIG5ldHdvcmsgPSBudWxsOwotICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7Ci0gICAgICAgIC8qIE9ubHkgY2hhbmdlIHRoZSByZWFzb24gaWYgdGhlIG5ldHdvcmsgd2FzIG5vdCBwcmV2aW91c2x5IGRpc2FibGVkICovCi0gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCAmJiBjb25maWcuc3RhdHVzICE9IFN0YXR1cy5ESVNBQkxFRCkgewotICAgICAgICAgICAgY29uZmlnLnN0YXR1cyA9IFN0YXR1cy5ESVNBQkxFRDsKLSAgICAgICAgICAgIGNvbmZpZy5kaXNhYmxlUmVhc29uID0gcmVhc29uOwotICAgICAgICAgICAgbmV0d29yayA9IGNvbmZpZzsKLSAgICAgICAgfQotICAgICAgICBpZiAobmV0d29yayAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzZW5kQ29uZmlndXJlZE5ldHdvcmtzQ2hhbmdlZEJyb2FkY2FzdChuZXR3b3JrLAotICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0NPTkZJR19DSEFOR0UpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2F2ZSB0aGUgY29uZmlndXJlZCBuZXR3b3JrcyBpbiBzdXBwbGljYW50IHRvIGRpc2sKLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBpdCBzdWNjZWVkcywge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKLSAgICAgKi8KLSAgICBib29sZWFuIHNhdmVDb25maWcoKSB7Ci0gICAgICAgIHJldHVybiBtV2lmaU5hdGl2ZS5zYXZlQ29uZmlnKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RhcnQgV1BTIHBpbiBtZXRob2QgY29uZmlndXJhdGlvbiB3aXRoIHBpbiBvYnRhaW5lZAotICAgICAqIGZyb20gdGhlIGFjY2VzcyBwb2ludAotICAgICAqIEBwYXJhbSBjb25maWcgV1BTIGNvbmZpZ3VyYXRpb24KLSAgICAgKiBAcmV0dXJuIFdwcyByZXN1bHQgY29udGFpbmluZyBzdGF0dXMgYW5kIHBpbgotICAgICAqLwotICAgIFdwc1Jlc3VsdCBzdGFydFdwc1dpdGhQaW5Gcm9tQWNjZXNzUG9pbnQoV3BzSW5mbyBjb25maWcpIHsKLSAgICAgICAgV3BzUmVzdWx0IHJlc3VsdCA9IG5ldyBXcHNSZXN1bHQoKTsKLSAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnN0YXJ0V3BzUmVnaXN0cmFyKGNvbmZpZy5CU1NJRCwgY29uZmlnLnBpbikpIHsKLSAgICAgICAgICAgIC8qIFdQUyBsZWF2ZXMgYWxsIG5ldHdvcmtzIGRpc2FibGVkICovCi0gICAgICAgICAgICBtYXJrQWxsTmV0d29ya3NEaXNhYmxlZCgpOwotICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFdwc1Jlc3VsdC5TdGF0dXMuU1VDQ0VTUzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzdGFydCBXUFMgcGluIG1ldGhvZCBjb25maWd1cmF0aW9uIik7Ci0gICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gV3BzUmVzdWx0LlN0YXR1cy5GQUlMVVJFOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RhcnQgV1BTIHBpbiBtZXRob2QgY29uZmlndXJhdGlvbiB3aXRoIHBpbiBvYnRhaW5lZAotICAgICAqIGZyb20gdGhlIGRldmljZQotICAgICAqIEByZXR1cm4gV3BzUmVzdWx0IGluZGljYXRpbmcgc3RhdHVzIGFuZCBwaW4KLSAgICAgKi8KLSAgICBXcHNSZXN1bHQgc3RhcnRXcHNXaXRoUGluRnJvbURldmljZShXcHNJbmZvIGNvbmZpZykgewotICAgICAgICBXcHNSZXN1bHQgcmVzdWx0ID0gbmV3IFdwc1Jlc3VsdCgpOwotICAgICAgICByZXN1bHQucGluID0gbVdpZmlOYXRpdmUuc3RhcnRXcHNQaW5EaXNwbGF5KGNvbmZpZy5CU1NJRCk7Ci0gICAgICAgIC8qIFdQUyBsZWF2ZXMgYWxsIG5ldHdvcmtzIGRpc2FibGVkICovCi0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkocmVzdWx0LnBpbikpIHsKLSAgICAgICAgICAgIG1hcmtBbGxOZXR3b3Jrc0Rpc2FibGVkKCk7Ci0gICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gV3BzUmVzdWx0LlN0YXR1cy5TVUNDRVNTOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHN0YXJ0IFdQUyBwaW4gbWV0aG9kIGNvbmZpZ3VyYXRpb24iKTsKLSAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBXcHNSZXN1bHQuU3RhdHVzLkZBSUxVUkU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdGFydCBXUFMgcHVzaCBidXR0b24gY29uZmlndXJhdGlvbgotICAgICAqIEBwYXJhbSBjb25maWcgV1BTIGNvbmZpZ3VyYXRpb24KLSAgICAgKiBAcmV0dXJuIFdwc1Jlc3VsdCBpbmRpY2F0aW5nIHN0YXR1cyBhbmQgcGluCi0gICAgICovCi0gICAgV3BzUmVzdWx0IHN0YXJ0V3BzUGJjKFdwc0luZm8gY29uZmlnKSB7Ci0gICAgICAgIFdwc1Jlc3VsdCByZXN1bHQgPSBuZXcgV3BzUmVzdWx0KCk7Ci0gICAgICAgIGlmIChtV2lmaU5hdGl2ZS5zdGFydFdwc1BiYyhjb25maWcuQlNTSUQpKSB7Ci0gICAgICAgICAgICAvKiBXUFMgbGVhdmVzIGFsbCBuZXR3b3JrcyBkaXNhYmxlZCAqLwotICAgICAgICAgICAgbWFya0FsbE5ldHdvcmtzRGlzYWJsZWQoKTsKLSAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBXcHNSZXN1bHQuU3RhdHVzLlNVQ0NFU1M7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc3RhcnQgV1BTIHB1c2ggYnV0dG9uIGNvbmZpZ3VyYXRpb24iKTsKLSAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBXcHNSZXN1bHQuU3RhdHVzLkZBSUxVUkU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGZXRjaCB0aGUgbGluayBwcm9wZXJ0aWVzIGZvciBhIGdpdmVuIG5ldHdvcmsgaWQKLSAgICAgKiBAcmV0dXJuIExpbmtQcm9wZXJ0aWVzIGZvciB0aGUgZ2l2ZW4gbmV0d29yayBpZAotICAgICAqLwotICAgIExpbmtQcm9wZXJ0aWVzIGdldExpbmtQcm9wZXJ0aWVzKGludCBuZXRJZCkgewotICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7Ci0gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkgcmV0dXJuIG5ldyBMaW5rUHJvcGVydGllcyhjb25maWcubGlua1Byb3BlcnRpZXMpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBzZXQgSVAgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBuZXR3b3JrIGlkCi0gICAgICovCi0gICAgdm9pZCBzZXRMaW5rUHJvcGVydGllcyhpbnQgbmV0SWQsIExpbmtQcm9wZXJ0aWVzIGxpbmtQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KG5ldElkKTsKLSAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBhZGQgb2xkIHByb3h5IGRldGFpbHMgLSBUT0RPIC0gaXMgdGhpcyBzdGlsbCBuZWVkZWQ/Ci0gICAgICAgICAgICBpZihjb25maWcubGlua1Byb3BlcnRpZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLnNldEh0dHBQcm94eShjb25maWcubGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uZmlnLmxpbmtQcm9wZXJ0aWVzID0gbGlua1Byb3BlcnRpZXM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBjbGVhciBJUCBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIG5ldHdvcmsgaWQKLSAgICAgKiBAcGFyYW0gbmV0d29yayBpZAotICAgICAqLwotICAgIHZvaWQgY2xlYXJMaW5rUHJvcGVydGllcyhpbnQgbmV0SWQpIHsKLSAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnID0gbUNvbmZpZ3VyZWROZXR3b3Jrcy5nZXQobmV0SWQpOwotICAgICAgICBpZiAoY29uZmlnICE9IG51bGwgJiYgY29uZmlnLmxpbmtQcm9wZXJ0aWVzICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIENsZWFyIGV2ZXJ5dGhpbmcgZXhjZXB0IHByb3h5Ci0gICAgICAgICAgICBQcm94eVByb3BlcnRpZXMgcHJveHkgPSBjb25maWcubGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCk7Ci0gICAgICAgICAgICBjb25maWcubGlua1Byb3BlcnRpZXMuY2xlYXIoKTsKLSAgICAgICAgICAgIGNvbmZpZy5saW5rUHJvcGVydGllcy5zZXRIdHRwUHJveHkocHJveHkpOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBGZXRjaCB0aGUgcHJveHkgcHJvcGVydGllcyBmb3IgYSBnaXZlbiBuZXR3b3JrIGlkCi0gICAgICogQHBhcmFtIG5ldHdvcmsgaWQKLSAgICAgKiBAcmV0dXJuIFByb3h5UHJvcGVydGllcyBmb3IgdGhlIG5ldHdvcmsgaWQKLSAgICAgKi8KLSAgICBQcm94eVByb3BlcnRpZXMgZ2V0UHJveHlQcm9wZXJ0aWVzKGludCBuZXRJZCkgewotICAgICAgICBMaW5rUHJvcGVydGllcyBsaW5rUHJvcGVydGllcyA9IGdldExpbmtQcm9wZXJ0aWVzKG5ldElkKTsKLSAgICAgICAgaWYgKGxpbmtQcm9wZXJ0aWVzICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUHJveHlQcm9wZXJ0aWVzKGxpbmtQcm9wZXJ0aWVzLmdldEh0dHBQcm94eSgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gaWYgdGhlIHNwZWNpZmllZCBuZXR3b3JrIGlzIHVzaW5nIHN0YXRpYyBJUAotICAgICAqIEBwYXJhbSBuZXR3b3JrIGlkCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdXNpbmcgc3RhdGljIGlwIGZvciBuZXRJZAotICAgICAqLwotICAgIGJvb2xlYW4gaXNVc2luZ1N0YXRpY0lwKGludCBuZXRJZCkgewotICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBtQ29uZmlndXJlZE5ldHdvcmtzLmdldChuZXRJZCk7Ci0gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCAmJiBjb25maWcuaXBBc3NpZ25tZW50ID09IElwQXNzaWdubWVudC5TVEFUSUMpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gYSBzaW5nbGUgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIG1hZGUuCi0gICAgICogQHBhcmFtIG5ldHdvcmsgVGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiB0aGF0IGNoYW5nZWQuCi0gICAgICogQHBhcmFtIHJlYXNvbiBUaGUgcmVhc29uIGZvciB0aGUgY2hhbmdlLCBzaG91bGQgYmUgb25lIG9mIFdpZmlNYW5hZ2VyLkNIQU5HRV9SRUFTT05fQURERUQsCi0gICAgICogV2lmaU1hbmFnZXIuQ0hBTkdFX1JFQVNPTl9SRU1PVkVELCBvciBXaWZpTWFuYWdlci5DSEFOR0VfUkVBU09OX0NIQU5HRS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2VuZENvbmZpZ3VyZWROZXR3b3Jrc0NoYW5nZWRCcm9hZGNhc3QoV2lmaUNvbmZpZ3VyYXRpb24gbmV0d29yaywKLSAgICAgICAgICAgIGludCByZWFzb24pIHsKLSAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuQ09ORklHVVJFRF9ORVRXT1JLU19DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTVVMVElQTEVfTkVUV09SS1NfQ0hBTkdFRCwgZmFsc2UpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfV0lGSV9DT05GSUdVUkFUSU9OLCBuZXR3b3JrKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX0NIQU5HRV9SRUFTT04sIHJlYXNvbik7Ci0gICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2hvdWxkIGJlIGNhbGxlZCB3aGVuIG11bHRpcGxlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGFyZSBtYWRlLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZW5kQ29uZmlndXJlZE5ldHdvcmtzQ2hhbmdlZEJyb2FkY2FzdCgpIHsKLSAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuQ09ORklHVVJFRF9ORVRXT1JLU19DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTVVMVElQTEVfTkVUV09SS1NfQ0hBTkdFRCwgdHJ1ZSk7Ci0gICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgdm9pZCBsb2FkQ29uZmlndXJlZE5ldHdvcmtzKCkgewotICAgICAgICBTdHJpbmcgbGlzdFN0ciA9IG1XaWZpTmF0aXZlLmxpc3ROZXR3b3JrcygpOwotICAgICAgICBtTGFzdFByaW9yaXR5ID0gMDsKLQotICAgICAgICBtQ29uZmlndXJlZE5ldHdvcmtzLmNsZWFyKCk7Ci0gICAgICAgIG1OZXR3b3JrSWRzLmNsZWFyKCk7Ci0KLSAgICAgICAgaWYgKGxpc3RTdHIgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBTdHJpbmdbXSBsaW5lcyA9IGxpc3RTdHIuc3BsaXQoIlxuIik7Ci0gICAgICAgIC8vIFNraXAgdGhlIGZpcnN0IGxpbmUsIHdoaWNoIGlzIGEgaGVhZGVyCi0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IGxpbmVzW2ldLnNwbGl0KCJcdCIpOwotICAgICAgICAgICAgLy8gbmV0d29yay1pZCB8IHNzaWQgfCBic3NpZCB8IGZsYWdzCi0gICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgV2lmaUNvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnLm5ldHdvcmtJZCA9IEludGVnZXIucGFyc2VJbnQocmVzdWx0WzBdKTsKLSAgICAgICAgICAgIH0gY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gcmVhZCBuZXR3b3JrLWlkICciICsgcmVzdWx0WzBdICsgIiciKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMykgewotICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbM10uaW5kZXhPZigiW0NVUlJFTlRdIikgIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zdGF0dXMgPSBXaWZpQ29uZmlndXJhdGlvbi5TdGF0dXMuQ1VSUkVOVDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRbM10uaW5kZXhPZigiW0RJU0FCTEVEXSIpICE9IC0xKQotICAgICAgICAgICAgICAgICAgICBjb25maWcuc3RhdHVzID0gV2lmaUNvbmZpZ3VyYXRpb24uU3RhdHVzLkRJU0FCTEVEOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLnN0YXR1cyA9IFdpZmlDb25maWd1cmF0aW9uLlN0YXR1cy5FTkFCTEVEOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25maWcuc3RhdHVzID0gV2lmaUNvbmZpZ3VyYXRpb24uU3RhdHVzLkVOQUJMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZWFkTmV0d29ya1ZhcmlhYmxlcyhjb25maWcpOwotICAgICAgICAgICAgaWYgKGNvbmZpZy5wcmlvcml0eSA+IG1MYXN0UHJpb3JpdHkpIHsKLSAgICAgICAgICAgICAgICBtTGFzdFByaW9yaXR5ID0gY29uZmlnLnByaW9yaXR5OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uZmlnLmlwQXNzaWdubWVudCA9IElwQXNzaWdubWVudC5ESENQOwotICAgICAgICAgICAgY29uZmlnLnByb3h5U2V0dGluZ3MgPSBQcm94eVNldHRpbmdzLk5PTkU7Ci0KLSAgICAgICAgICAgIGlmIChtTmV0d29ya0lkcy5jb250YWluc0tleShjb25maWdLZXkoY29uZmlnKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGF0IFNTSUQgaXMgYWxyZWFkeSBrbm93biwganVzdCBpZ25vcmUgdGhpcyBkdXBsaWNhdGUgZW50cnkKLSAgICAgICAgICAgICAgICBpZiAoVkRCRykgbG9jYWxMb2coImRpc2NhcmRlZCBkdXBsaWNhdGUgbmV0d29yayIsIGNvbmZpZy5uZXR3b3JrSWQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtQ29uZmlndXJlZE5ldHdvcmtzLnB1dChjb25maWcubmV0d29ya0lkLCBjb25maWcpOwotICAgICAgICAgICAgICAgIG1OZXR3b3JrSWRzLnB1dChjb25maWdLZXkoY29uZmlnKSwgY29uZmlnLm5ldHdvcmtJZCk7Ci0gICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJsb2FkZWQgY29uZmlndXJlZCBuZXR3b3JrIiwgY29uZmlnLm5ldHdvcmtJZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZWFkSXBBbmRQcm94eUNvbmZpZ3VyYXRpb25zKCk7Ci0gICAgICAgIHNlbmRDb25maWd1cmVkTmV0d29ya3NDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0KLSAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJsb2FkQ29uZmlndXJlZE5ldHdvcmtzIGxvYWRlZCAiICsgbU5ldHdvcmtJZHMuc2l6ZSgpICsgIiBuZXR3b3JrcyIpOwotCi0gICAgICAgIGlmIChtTmV0d29ya0lkcy5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgLy8gbm8gbmV0d29ya3M/IExldHMgbG9nIGlmIHRoZSB3cGFfc3VwcGxpY2FudC5jb25mIGZpbGUgY29udGVudHMKLSAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihTVVBQTElDQU5UX0NPTkZJR19GSUxFKSk7Ci0gICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCItLS0gQmVnaW4gd3BhX3N1cHBsaWNhbnQuY29uZiBDb250ZW50cyAtLS0iKTsKLSAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7IGxpbmUgIT0gbnVsbDsgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChWREJHKSBsb2NhbExvZyhsaW5lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCItLS0gRW5kIHdwYV9zdXBwbGljYW50LmNvbmYgQ29udGVudHMgLS0tIik7Ci0gICAgICAgICAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGlmIChWREJHKSBsb2NhbExvZygiQ291bGQgbm90IG9wZW4gIiArIFNVUFBMSUNBTlRfQ09ORklHX0ZJTEUgKyAiLCAiICsgZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFZEQkcpIGxvY2FsTG9nKCJDb3VsZCBub3QgcmVhZCAiICsgU1VQUExJQ0FOVF9DT05GSUdfRklMRSArICIsICIgKyBlKTsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBpZ25vcmUgdGhlIGZhY3QgdGhhdCB3ZSBjb3VsZG4ndCBjbG9zZQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIE1hcmsgYWxsIG5ldHdvcmtzIGV4Y2VwdCBzcGVjaWZpZWQgbmV0SWQgYXMgZGlzYWJsZWQgKi8KLSAgICBwcml2YXRlIHZvaWQgbWFya0FsbE5ldHdvcmtzRGlzYWJsZWRFeGNlcHQoaW50IG5ldElkKSB7Ci0gICAgICAgIGZvcihXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgOiBtQ29uZmlndXJlZE5ldHdvcmtzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZihjb25maWcgIT0gbnVsbCAmJiBjb25maWcubmV0d29ya0lkICE9IG5ldElkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5zdGF0dXMgIT0gU3RhdHVzLkRJU0FCTEVEKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zdGF0dXMgPSBTdGF0dXMuRElTQUJMRUQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5kaXNhYmxlUmVhc29uID0gV2lmaUNvbmZpZ3VyYXRpb24uRElTQUJMRURfVU5LTk9XTl9SRUFTT047Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG1hcmtBbGxOZXR3b3Jrc0Rpc2FibGVkKCkgewotICAgICAgICBtYXJrQWxsTmV0d29ya3NEaXNhYmxlZEV4Y2VwdChJTlZBTElEX05FVFdPUktfSUQpOwotICAgIH0KLQotICAgIGJvb2xlYW4gbmVlZHNVbmxvY2tlZEtleVN0b3JlKCkgewotCi0gICAgICAgIC8vIEFueSBuZXR3b3JrIHVzaW5nIGNlcnRpZmljYXRlcyB0byBhdXRoZW50aWNhdGUgYWNjZXNzIHJlcXVpcmVzCi0gICAgICAgIC8vIHVubG9ja2VkIGtleSBzdG9yZTsgdW5sZXNzIHRoZSBjZXJ0aWZpY2F0ZXMgY2FuIGJlIHN0b3JlZCB3aXRoCi0gICAgICAgIC8vIGhhcmR3YXJlIGVuY3J5cHRpb24KLQotICAgICAgICBmb3IoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnIDogbUNvbmZpZ3VyZWROZXR3b3Jrcy52YWx1ZXMoKSkgewotCi0gICAgICAgICAgICBpZiAoY29uZmlnLmFsbG93ZWRLZXlNYW5hZ2VtZW50LmdldChLZXlNZ210LldQQV9FQVApCi0gICAgICAgICAgICAgICAgICAgICYmIGNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudC5nZXQoS2V5TWdtdC5JRUVFODAyMVgpKSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmVudGVycHJpc2VDb25maWcubmVlZHNTb2Z0d2FyZUJhY2tlZEtleVN0b3JlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB3cml0ZUlwQW5kUHJveHlDb25maWd1cmF0aW9ucygpIHsKLQotICAgICAgICAvKiBNYWtlIGEgY29weSAqLwotICAgICAgICBMaXN0PFdpZmlDb25maWd1cmF0aW9uPiBuZXR3b3JrcyA9IG5ldyBBcnJheUxpc3Q8V2lmaUNvbmZpZ3VyYXRpb24+KCk7Ci0gICAgICAgIGZvcihXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgOiBtQ29uZmlndXJlZE5ldHdvcmtzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3Jrcy5hZGQobmV3IFdpZmlDb25maWd1cmF0aW9uKGNvbmZpZykpOwotICAgICAgICB9Ci0KLSAgICAgICAgRGVsYXllZERpc2tXcml0ZS53cml0ZShuZXR3b3Jrcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGVsYXllZERpc2tXcml0ZSB7Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgSGFuZGxlclRocmVhZCBzRGlza1dyaXRlSGFuZGxlclRocmVhZDsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgSGFuZGxlciBzRGlza1dyaXRlSGFuZGxlcjsKLSAgICAgICAgLyogVHJhY2tzIG11bHRpcGxlIHdyaXRlcyBvbiB0aGUgc2FtZSB0aHJlYWQgKi8KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHNXcml0ZVNlcXVlbmNlID0gMDsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJEZWxheWVkRGlza1dyaXRlIjsKLQotICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZSAoZmluYWwgTGlzdDxXaWZpQ29uZmlndXJhdGlvbj4gbmV0d29ya3MpIHsKLQotICAgICAgICAgICAgLyogRG8gYSBkZWxheWVkIHdyaXRlIHRvIGRpc2sgb24gYSBzZXBlcmF0ZSBoYW5kbGVyIHRocmVhZCAqLwotICAgICAgICAgICAgc3luY2hyb25pemVkIChEZWxheWVkRGlza1dyaXRlLmNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCsrc1dyaXRlU2VxdWVuY2UgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBzRGlza1dyaXRlSGFuZGxlclRocmVhZCA9IG5ldyBIYW5kbGVyVGhyZWFkKCJXaWZpQ29uZmlnVGhyZWFkIik7Ci0gICAgICAgICAgICAgICAgICAgIHNEaXNrV3JpdGVIYW5kbGVyVGhyZWFkLnN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHNEaXNrV3JpdGVIYW5kbGVyID0gbmV3IEhhbmRsZXIoc0Rpc2tXcml0ZUhhbmRsZXJUaHJlYWQuZ2V0TG9vcGVyKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc0Rpc2tXcml0ZUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbldyaXRlQ2FsbGVkKG5ldHdvcmtzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBvbldyaXRlQ2FsbGVkKExpc3Q8V2lmaUNvbmZpZ3VyYXRpb24+IG5ldHdvcmtzKSB7Ci0KLSAgICAgICAgICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0ID0gbnVsbDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgb3V0ID0gbmV3IERhdGFPdXRwdXRTdHJlYW0obmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlT3V0cHV0U3RyZWFtKGlwQ29uZmlnRmlsZSkpKTsKLQotICAgICAgICAgICAgICAgIG91dC53cml0ZUludChJUENPTkZJR19GSUxFX1ZFUlNJT04pOwotCi0gICAgICAgICAgICAgICAgZm9yKFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA6IG5ldHdvcmtzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gd3JpdGVUb0ZpbGUgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgTGlua1Byb3BlcnRpZXMgbGlua1Byb3BlcnRpZXMgPSBjb25maWcubGlua1Byb3BlcnRpZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbmZpZy5pcEFzc2lnbm1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNUQVRJQzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKElQX0FTU0lHTk1FTlRfS0VZKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKGNvbmZpZy5pcEFzc2lnbm1lbnQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoTGlua0FkZHJlc3MgbGlua0FkZHIgOiBsaW5rUHJvcGVydGllcy5nZXRMaW5rQWRkcmVzc2VzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihMSU5LX0FERFJFU1NfS0VZKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihsaW5rQWRkci5nZXRBZGRyZXNzKCkuZ2V0SG9zdEFkZHJlc3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQobGlua0FkZHIuZ2V0TmV0d29ya1ByZWZpeExlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJvdXRlSW5mbyByb3V0ZSA6IGxpbmtQcm9wZXJ0aWVzLmdldFJvdXRlcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoR0FURVdBWV9LRVkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua0FkZHJlc3MgZGVzdCA9IHJvdXRlLmdldERlc3RpbmF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihkZXN0LmdldEFkZHJlc3MoKS5nZXRIb3N0QWRkcmVzcygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQoZGVzdC5nZXROZXR3b3JrUHJlZml4TGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm91dGUuZ2V0R2F0ZXdheSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQoMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKHJvdXRlLmdldEdhdGV3YXkoKS5nZXRIb3N0QWRkcmVzcygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoSW5ldEFkZHJlc3MgaW5ldEFkZHIgOiBsaW5rUHJvcGVydGllcy5nZXREbnNlcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoRE5TX0tFWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoaW5ldEFkZHIuZ2V0SG9zdEFkZHJlc3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVUb0ZpbGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIERIQ1A6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihJUF9BU1NJR05NRU5UX0tFWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihjb25maWcuaXBBc3NpZ25tZW50LnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVRvRmlsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVU5BU1NJR05FRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWdub3JlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIklnbm9yZSBpbnZhbGlkIGlwIGFzc2lnbm1lbnQgd2hpbGUgd3JpdGluZyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb25maWcucHJveHlTZXR0aW5ncykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1RBVElDOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm94eVByb3BlcnRpZXMgcHJveHlQcm9wZXJ0aWVzID0gbGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBleGNsdXNpb25MaXN0ID0gcHJveHlQcm9wZXJ0aWVzLmdldEV4Y2x1c2lvbkxpc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKFBST1hZX1NFVFRJTkdTX0tFWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihjb25maWcucHJveHlTZXR0aW5ncy50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKFBST1hZX0hPU1RfS0VZKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKHByb3h5UHJvcGVydGllcy5nZXRIb3N0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoUFJPWFlfUE9SVF9LRVkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQocHJveHlQcm9wZXJ0aWVzLmdldFBvcnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihFWENMVVNJT05fTElTVF9LRVkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVVVEYoZXhjbHVzaW9uTGlzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlVG9GaWxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQQUM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3h5UHJvcGVydGllcyBwcm94eVBhY1Byb3BlcnRpZXMgPSBsaW5rUHJvcGVydGllcy5nZXRIdHRwUHJveHkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKFBST1hZX1NFVFRJTkdTX0tFWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihjb25maWcucHJveHlTZXR0aW5ncy50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKFBST1hZX1BBQ19GSUxFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKHByb3h5UGFjUHJvcGVydGllcy5nZXRQYWNGaWxlVXJsKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVRvRmlsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTk9ORToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKFBST1hZX1NFVFRJTkdTX0tFWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihjb25maWcucHJveHlTZXR0aW5ncy50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVUb0ZpbGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFVOQVNTSUdORUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElnbm9yZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJZ250aGlzb3JlIGludmFsaWQgcHJveHkgc2V0dGluZ3Mgd2hpbGUgd3JpdGluZyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZVRvRmlsZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZVVURihJRF9LRVkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZUludChjb25maWdLZXkoY29uZmlnKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWx1cmUgaW4gd3JpdGluZyAiICsgY29uZmlnLmxpbmtQcm9wZXJ0aWVzICsgZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlVVRGKEVPUyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiRXJyb3Igd3JpdGluZyBkYXRhIGZpbGUiKTsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgaWYgKG91dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy9RdWl0IGlmIG5vIG1vcmUgd3JpdGVzIHNlbnQKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKERlbGF5ZWREaXNrV3JpdGUuY2xhc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKC0tc1dyaXRlU2VxdWVuY2UgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc0Rpc2tXcml0ZUhhbmRsZXIuZ2V0TG9vcGVyKCkucXVpdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc0Rpc2tXcml0ZUhhbmRsZXIgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgc0Rpc2tXcml0ZUhhbmRsZXJUaHJlYWQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBsb2dlKFN0cmluZyBzKSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsIHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlYWRJcEFuZFByb3h5Q29uZmlndXJhdGlvbnMoKSB7Ci0KLSAgICAgICAgRGF0YUlucHV0U3RyZWFtIGluID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGluID0gbmV3IERhdGFJbnB1dFN0cmVhbShuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKAotICAgICAgICAgICAgICAgICAgICBpcENvbmZpZ0ZpbGUpKSk7Ci0KLSAgICAgICAgICAgIGludCB2ZXJzaW9uID0gaW4ucmVhZEludCgpOwotICAgICAgICAgICAgaWYgKHZlcnNpb24gIT0gMiAmJiB2ZXJzaW9uICE9IDEpIHsKLSAgICAgICAgICAgICAgICBsb2dlKCJCYWQgdmVyc2lvbiBvbiBJUCBjb25maWd1cmF0aW9uIGZpbGUsIGlnbm9yZSByZWFkIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgIGludCBpZCA9IC0xOwotICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgaXMgREhDUCB3aXRoIG5vIHByb3h5Ci0gICAgICAgICAgICAgICAgSXBBc3NpZ25tZW50IGlwQXNzaWdubWVudCA9IElwQXNzaWdubWVudC5ESENQOwotICAgICAgICAgICAgICAgIFByb3h5U2V0dGluZ3MgcHJveHlTZXR0aW5ncyA9IFByb3h5U2V0dGluZ3MuTk9ORTsKLSAgICAgICAgICAgICAgICBMaW5rUHJvcGVydGllcyBsaW5rUHJvcGVydGllcyA9IG5ldyBMaW5rUHJvcGVydGllcygpOwotICAgICAgICAgICAgICAgIFN0cmluZyBwcm94eUhvc3QgPSBudWxsOwotICAgICAgICAgICAgICAgIFN0cmluZyBwYWNGaWxlVXJsID0gbnVsbDsKLSAgICAgICAgICAgICAgICBpbnQgcHJveHlQb3J0ID0gLTE7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGV4Y2x1c2lvbkxpc3QgPSBudWxsOwotICAgICAgICAgICAgICAgIFN0cmluZyBrZXk7Ci0KLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IGluLnJlYWRVVEYoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkuZXF1YWxzKElEX0tFWSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGluLnJlYWRJbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LmVxdWFscyhJUF9BU1NJR05NRU5UX0tFWSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFzc2lnbm1lbnQgPSBJcEFzc2lnbm1lbnQudmFsdWVPZihpbi5yZWFkVVRGKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKExJTktfQUREUkVTU19LRVkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua0FkZHJlc3MgbGlua0FkZHIgPSBuZXcgTGlua0FkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrVXRpbHMubnVtZXJpY1RvSW5ldEFkZHJlc3MoaW4ucmVhZFVURigpKSwgaW4ucmVhZEludCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rUHJvcGVydGllcy5hZGRMaW5rQWRkcmVzcyhsaW5rQWRkcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoR0FURVdBWV9LRVkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua0FkZHJlc3MgZGVzdCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5ldEFkZHJlc3MgZ2F0ZXdheSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHN1cHBvcnRlZCBkZWZhdWx0IGdhdGV3YXlzIC0gbGVhdmUgdGhlIGRlc3QvcHJlZml4IGVtcHR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkgPSBOZXR3b3JrVXRpbHMubnVtZXJpY1RvSW5ldEFkZHJlc3MoaW4ucmVhZFVURigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW4ucmVhZEludCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSBuZXcgTGlua0FkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtVdGlscy5udW1lcmljVG9JbmV0QWRkcmVzcyhpbi5yZWFkVVRGKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi5yZWFkSW50KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbi5yZWFkSW50KCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheSA9IE5ldHdvcmtVdGlscy5udW1lcmljVG9JbmV0QWRkcmVzcyhpbi5yZWFkVVRGKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLmFkZFJvdXRlKG5ldyBSb3V0ZUluZm8oZGVzdCwgZ2F0ZXdheSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKEROU19LRVkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMuYWRkRG5zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29ya1V0aWxzLm51bWVyaWNUb0luZXRBZGRyZXNzKGluLnJlYWRVVEYoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKFBST1hZX1NFVFRJTkdTX0tFWSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eVNldHRpbmdzID0gUHJveHlTZXR0aW5ncy52YWx1ZU9mKGluLnJlYWRVVEYoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoUFJPWFlfSE9TVF9LRVkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlIb3N0ID0gaW4ucmVhZFVURigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKFBST1hZX1BPUlRfS0VZKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5UG9ydCA9IGluLnJlYWRJbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LmVxdWFscyhQUk9YWV9QQUNfRklMRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNGaWxlVXJsID0gaW4ucmVhZFVURigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKEVYQ0xVU0lPTl9MSVNUX0tFWSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdXNpb25MaXN0ID0gaW4ucmVhZFVURigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKEVPUykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWdub3JlIHVua25vd24ga2V5ICIgKyBrZXkgKyAid2hpbGUgcmVhZGluZyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWdub3JlIGludmFsaWQgYWRkcmVzcyB3aGlsZSByZWFkaW5nIiArIGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaWQgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnID0gbUNvbmZpZ3VyZWROZXR3b3Jrcy5nZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbU5ldHdvcmtJZHMuZ2V0KGlkKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJjb25maWd1cmF0aW9uIGZvdW5kIGZvciBtaXNzaW5nIG5ldHdvcmssIGlnbm9yZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5saW5rUHJvcGVydGllcyA9IGxpbmtQcm9wZXJ0aWVzOwotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpcEFzc2lnbm1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNUQVRJQzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIERIQ1A6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5pcEFzc2lnbm1lbnQgPSBpcEFzc2lnbm1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVU5BU1NJR05FRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiQlVHOiBGb3VuZCBVTkFTU0lHTkVEIElQIG9uIGZpbGUsIHVzZSBESENQIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5pcEFzc2lnbm1lbnQgPSBJcEFzc2lnbm1lbnQuREhDUDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWdub3JlIGludmFsaWQgaXAgYXNzaWdubWVudCB3aGlsZSByZWFkaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3h5U2V0dGluZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNUQVRJQzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnByb3h5U2V0dGluZ3MgPSBwcm94eVNldHRpbmdzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm94eVByb3BlcnRpZXMgcHJveHlQcm9wZXJ0aWVzID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm94eVByb3BlcnRpZXMocHJveHlIb3N0LCBwcm94eVBvcnQsIGV4Y2x1c2lvbkxpc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rUHJvcGVydGllcy5zZXRIdHRwUHJveHkocHJveHlQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQQUM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wcm94eVNldHRpbmdzID0gcHJveHlTZXR0aW5nczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJveHlQcm9wZXJ0aWVzIHByb3h5UGFjUHJvcGVydGllcyA9IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm94eVByb3BlcnRpZXMocGFjRmlsZVVybCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLnNldEh0dHBQcm94eShwcm94eVBhY1Byb3BlcnRpZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE5PTkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wcm94eVNldHRpbmdzID0gcHJveHlTZXR0aW5nczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBVTkFTU0lHTkVEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJCVUc6IEZvdW5kIFVOQVNTSUdORUQgcHJveHkgb24gZmlsZSwgdXNlIE5PTkUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnByb3h5U2V0dGluZ3MgPSBQcm94eVNldHRpbmdzLk5PTkU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIklnbm9yZSBpbnZhbGlkIHByb3h5IHNldHRpbmdzIHdoaWxlIHJlYWRpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIk1pc3NpbmcgaWQgd2hpbGUgcGFyc2luZyBjb25maWd1cmF0aW9uIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChFT0ZFeGNlcHRpb24gaWdub3JlKSB7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGxvZ2UoIkVycm9yIHBhcnNpbmcgY29uZmlndXJhdGlvbiIgKyBlKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGlmIChpbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaW4uY2xvc2UoKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgTmV0d29ya1VwZGF0ZVJlc3VsdCBhZGRPclVwZGF0ZU5ldHdvcmtOYXRpdmUoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIElmIHRoZSBzdXBwbGllZCBuZXR3b3JrSWQgaXMgSU5WQUxJRF9ORVRXT1JLX0lELCB3ZSBjcmVhdGUgYSBuZXcgZW1wdHkKLSAgICAgICAgICogbmV0d29yayBjb25maWd1cmF0aW9uLiBPdGhlcndpc2UsIHRoZSBuZXR3b3JrSWQgc2hvdWxkCi0gICAgICAgICAqIHJlZmVyIHRvIGFuIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgICAqLwotCi0gICAgICAgIGlmIChWREJHKSBsb2NhbExvZygiYWRkT3JVcGRhdGVOZXR3b3JrTmF0aXZlICIgKyBjb25maWcuZ2V0UHJpbnRhYmxlU3NpZCgpKTsKLQotICAgICAgICBpbnQgbmV0SWQgPSBjb25maWcubmV0d29ya0lkOwotICAgICAgICBib29sZWFuIG5ld05ldHdvcmsgPSBmYWxzZTsKLSAgICAgICAgLy8gbmV0d29ya0lkIG9mIElOVkFMSURfTkVUV09SS19JRCBtZWFucyB3ZSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBuZXR3b3JrCi0gICAgICAgIGlmIChuZXRJZCA9PSBJTlZBTElEX05FVFdPUktfSUQpIHsKLSAgICAgICAgICAgIEludGVnZXIgc2F2ZWROZXRJZCA9IG1OZXR3b3JrSWRzLmdldChjb25maWdLZXkoY29uZmlnKSk7Ci0gICAgICAgICAgICBpZiAoc2F2ZWROZXRJZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbmV0SWQgPSBzYXZlZE5ldElkOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBuZXdOZXR3b3JrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBuZXRJZCA9IG1XaWZpTmF0aXZlLmFkZE5ldHdvcmsoKTsKLSAgICAgICAgICAgICAgICBpZiAobmV0SWQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBhZGQgYSBuZXR3b3JrISIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5ldHdvcmtVcGRhdGVSZXN1bHQoSU5WQUxJRF9ORVRXT1JLX0lEKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIHVwZGF0ZUZhaWxlZCA9IHRydWU7Ci0KLSAgICAgICAgc2V0VmFyaWFibGVzOiB7Ci0KLSAgICAgICAgICAgIGlmIChjb25maWcuU1NJRCAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgICAgICFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLnNzaWRWYXJOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLlNTSUQpKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCBTU0lEOiAiK2NvbmZpZy5TU0lEKTsKLSAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb25maWcuQlNTSUQgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICAhbVdpZmlOYXRpdmUuc2V0TmV0d29ya1ZhcmlhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV0SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi5ic3NpZFZhck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuQlNTSUQpKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCBCU1NJRDogIitjb25maWcuQlNTSUQpOwotICAgICAgICAgICAgICAgIGJyZWFrIHNldFZhcmlhYmxlczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nIGFsbG93ZWRLZXlNYW5hZ2VtZW50U3RyaW5nID0KLSAgICAgICAgICAgICAgICBtYWtlU3RyaW5nKGNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudCwgV2lmaUNvbmZpZ3VyYXRpb24uS2V5TWdtdC5zdHJpbmdzKTsKLSAgICAgICAgICAgIGlmIChjb25maWcuYWxsb3dlZEtleU1hbmFnZW1lbnQuY2FyZGluYWxpdHkoKSAhPSAwICYmCi0gICAgICAgICAgICAgICAgICAgICFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLktleU1nbXQudmFyTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRLZXlNYW5hZ2VtZW50U3RyaW5nKSkgewotICAgICAgICAgICAgICAgIGxvZ2UoImZhaWxlZCB0byBzZXQga2V5X21nbXQ6ICIrCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkS2V5TWFuYWdlbWVudFN0cmluZyk7Ci0gICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcgYWxsb3dlZFByb3RvY29sc1N0cmluZyA9Ci0gICAgICAgICAgICAgICAgbWFrZVN0cmluZyhjb25maWcuYWxsb3dlZFByb3RvY29scywgV2lmaUNvbmZpZ3VyYXRpb24uUHJvdG9jb2wuc3RyaW5ncyk7Ci0gICAgICAgICAgICBpZiAoY29uZmlnLmFsbG93ZWRQcm90b2NvbHMuY2FyZGluYWxpdHkoKSAhPSAwICYmCi0gICAgICAgICAgICAgICAgICAgICFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLlByb3RvY29sLnZhck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUHJvdG9jb2xzU3RyaW5nKSkgewotICAgICAgICAgICAgICAgIGxvZ2UoImZhaWxlZCB0byBzZXQgcHJvdG86ICIrCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUHJvdG9jb2xzU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFN0cmluZyBhbGxvd2VkQXV0aEFsZ29yaXRobXNTdHJpbmcgPQotICAgICAgICAgICAgICAgIG1ha2VTdHJpbmcoY29uZmlnLmFsbG93ZWRBdXRoQWxnb3JpdGhtcywgV2lmaUNvbmZpZ3VyYXRpb24uQXV0aEFsZ29yaXRobS5zdHJpbmdzKTsKLSAgICAgICAgICAgIGlmIChjb25maWcuYWxsb3dlZEF1dGhBbGdvcml0aG1zLmNhcmRpbmFsaXR5KCkgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAhbVdpZmlOYXRpdmUuc2V0TmV0d29ya1ZhcmlhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV0SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi5BdXRoQWxnb3JpdGhtLnZhck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkQXV0aEFsZ29yaXRobXNTdHJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCBhdXRoX2FsZzogIisKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRBdXRoQWxnb3JpdGhtc1N0cmluZyk7Ci0gICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcgYWxsb3dlZFBhaXJ3aXNlQ2lwaGVyc1N0cmluZyA9Ci0gICAgICAgICAgICAgICAgICAgIG1ha2VTdHJpbmcoY29uZmlnLmFsbG93ZWRQYWlyd2lzZUNpcGhlcnMsCi0gICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLlBhaXJ3aXNlQ2lwaGVyLnN0cmluZ3MpOwotICAgICAgICAgICAgaWYgKGNvbmZpZy5hbGxvd2VkUGFpcndpc2VDaXBoZXJzLmNhcmRpbmFsaXR5KCkgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAhbVdpZmlOYXRpdmUuc2V0TmV0d29ya1ZhcmlhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV0SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi5QYWlyd2lzZUNpcGhlci52YXJOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFBhaXJ3aXNlQ2lwaGVyc1N0cmluZykpIHsKLSAgICAgICAgICAgICAgICBsb2dlKCJmYWlsZWQgdG8gc2V0IHBhaXJ3aXNlOiAiKwotICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFBhaXJ3aXNlQ2lwaGVyc1N0cmluZyk7Ci0gICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcgYWxsb3dlZEdyb3VwQ2lwaGVyc1N0cmluZyA9Ci0gICAgICAgICAgICAgICAgbWFrZVN0cmluZyhjb25maWcuYWxsb3dlZEdyb3VwQ2lwaGVycywgV2lmaUNvbmZpZ3VyYXRpb24uR3JvdXBDaXBoZXIuc3RyaW5ncyk7Ci0gICAgICAgICAgICBpZiAoY29uZmlnLmFsbG93ZWRHcm91cENpcGhlcnMuY2FyZGluYWxpdHkoKSAhPSAwICYmCi0gICAgICAgICAgICAgICAgICAgICFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLkdyb3VwQ2lwaGVyLnZhck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JvdXBDaXBoZXJzU3RyaW5nKSkgewotICAgICAgICAgICAgICAgIGxvZ2UoImZhaWxlZCB0byBzZXQgZ3JvdXA6ICIrCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JvdXBDaXBoZXJzU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFByZXZlbnQgY2xpZW50IHNjcmV3LXVwIGJ5IHBhc3NpbmcgaW4gYSBXaWZpQ29uZmlndXJhdGlvbiB3ZSBnYXZlIGl0Ci0gICAgICAgICAgICAvLyBieSBwcmV2ZW50aW5nICIqIiBhcyBhIGtleS4KLSAgICAgICAgICAgIGlmIChjb25maWcucHJlU2hhcmVkS2V5ICE9IG51bGwgJiYgIWNvbmZpZy5wcmVTaGFyZWRLZXkuZXF1YWxzKCIqIikgJiYKLSAgICAgICAgICAgICAgICAgICAgIW1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldElkLAotICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24ucHNrVmFyTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wcmVTaGFyZWRLZXkpKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCBwc2siKTsKLSAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gaGFzU2V0S2V5ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY29uZmlnLndlcEtleXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnLndlcEtleXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCBjbGllbnQgc2NyZXctdXAgYnkgcGFzc2luZyBpbiBhIFdpZmlDb25maWd1cmF0aW9uIHdlIGdhdmUgaXQKLSAgICAgICAgICAgICAgICAgICAgLy8gYnkgcHJldmVudGluZyAiKiIgYXMgYSBrZXkuCi0gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcud2VwS2V5c1tpXSAhPSBudWxsICYmICFjb25maWcud2VwS2V5c1tpXS5lcXVhbHMoIioiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLndlcEtleVZhck5hbWVzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLndlcEtleXNbaV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiZmFpbGVkIHRvIHNldCB3ZXBfa2V5IiArIGkgKyAiOiAiICsgY29uZmlnLndlcEtleXNbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHNldFZhcmlhYmxlczsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc1NldEtleSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChoYXNTZXRLZXkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpQ29uZmlndXJhdGlvbi53ZXBUeEtleUlkeFZhck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b1N0cmluZyhjb25maWcud2VwVHhLZXlJbmRleCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoImZhaWxlZCB0byBzZXQgd2VwX3R4X2tleWlkeDogIiArIGNvbmZpZy53ZXBUeEtleUluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLnByaW9yaXR5VmFyTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9TdHJpbmcoY29uZmlnLnByaW9yaXR5KSkpIHsKLSAgICAgICAgICAgICAgICBsb2dlKGNvbmZpZy5TU0lEICsgIjogZmFpbGVkIHRvIHNldCBwcmlvcml0eTogIgotICAgICAgICAgICAgICAgICAgICAgICAgK2NvbmZpZy5wcmlvcml0eSk7Ci0gICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29uZmlnLmhpZGRlblNTSUQgJiYgIW1XaWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldElkLAotICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uaGlkZGVuU1NJRFZhck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvU3RyaW5nKGNvbmZpZy5oaWRkZW5TU0lEID8gMSA6IDApKSkgewotICAgICAgICAgICAgICAgIGxvZ2UoY29uZmlnLlNTSUQgKyAiOiBmYWlsZWQgdG8gc2V0IGhpZGRlblNTSUQ6ICIrCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuaGlkZGVuU1NJRCk7Ci0gICAgICAgICAgICAgICAgYnJlYWsgc2V0VmFyaWFibGVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29uZmlnLmVudGVycHJpc2VDb25maWcgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICBjb25maWcuZW50ZXJwcmlzZUNvbmZpZy5nZXRFYXBNZXRob2QoKSAhPSBXaWZpRW50ZXJwcmlzZUNvbmZpZy5FYXAuTk9ORSkgewotCi0gICAgICAgICAgICAgICAgV2lmaUVudGVycHJpc2VDb25maWcgZW50ZXJwcmlzZUNvbmZpZyA9IGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnOwotCi0gICAgICAgICAgICAgICAgaWYgKGVudGVycHJpc2VDb25maWcubmVlZHNLZXlTdG9yZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICAgKiBLZXlndWFyZCBzZXR0aW5ncyBtYXkgZXZlbnR1YWxseSBiZSBjb250cm9sbGVkIGJ5IGRldmljZSBwb2xpY3kuCi0gICAgICAgICAgICAgICAgICAgICAqIFdlIGNoZWNrIGhlcmUgaWYga2V5c3RvcmUgaXMgdW5sb2NrZWQgYmVmb3JlIGluc3RhbGxpbmcKLSAgICAgICAgICAgICAgICAgICAgICogY3JlZGVudGlhbHMuCi0gICAgICAgICAgICAgICAgICAgICAqIFRPRE86IERvIHdlIG5lZWQgYSBkaWFsb2cgaGVyZSA/Ci0gICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBpZiAobUtleVN0b3JlLnN0YXRlKCkgIT0gS2V5U3RvcmUuU3RhdGUuVU5MT0NLRUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoY29uZmlnLlNTSUQgKyAiOiBrZXkgc3RvcmUgaXMgbG9ja2VkIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uZmlnIHBhc3NlZCBtYXkgaW5jbHVkZSBvbmx5IGZpZWxkcyBiZWluZyB1cGRhdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICogSW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIGtleSBpZCwgZmV0Y2ggdW5pbml0aWFsaXplZAotICAgICAgICAgICAgICAgICAgICAgICAgICogZmllbGRzIGZyb20gdGhlIGN1cnJlbnRseSB0cmFja2VkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY3VycmVudENvbmZpZyA9IG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KG5ldElkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBrZXlJZCA9IGNvbmZpZy5nZXRLZXlJZEZvckNyZWRlbnRpYWxzKGN1cnJlbnRDb25maWcpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVudGVycHJpc2VDb25maWcuaW5zdGFsbEtleXMobUtleVN0b3JlLCBrZXlJZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKGNvbmZpZy5TU0lEICsgIjogZmFpbGVkIHRvIGluc3RhbGwga2V5cyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHNldFZhcmlhYmxlczsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoY29uZmlnLlNTSUQgKyAiIGludmFsaWQgY29uZmlnIGZvciBrZXkgaW5zdGFsbGF0aW9uIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBlbnRlcnByaXNlRmllbGRzID0gZW50ZXJwcmlzZUNvbmZpZy5nZXRGaWVsZHMoKTsKLSAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBrZXkgOiBlbnRlcnByaXNlRmllbGRzLmtleVNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBlbnRlcnByaXNlRmllbGRzLmdldChrZXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGVycHJpc2VDb25maWcucmVtb3ZlS2V5cyhtS2V5U3RvcmUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoY29uZmlnLlNTSUQgKyAiOiBmYWlsZWQgdG8gc2V0ICIgKyBrZXkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogIiArIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzZXRWYXJpYWJsZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdXBkYXRlRmFpbGVkID0gZmFsc2U7Ci0gICAgICAgIH0gLy9lbmQgb2Ygc2V0VmFyaWFibGVzCi0KLSAgICAgICAgaWYgKHVwZGF0ZUZhaWxlZCkgewotICAgICAgICAgICAgaWYgKG5ld05ldHdvcmspIHsKLSAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5yZW1vdmVOZXR3b3JrKG5ldElkKTsKLSAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IGEgbmV0d29yayB2YXJpYWJsZSwgcmVtb3ZlZCBuZXR3b3JrOiAiICsgbmV0SWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrVXBkYXRlUmVzdWx0KElOVkFMSURfTkVUV09SS19JRCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBBbiB1cGRhdGUgb2YgdGhlIG5ldHdvcmsgdmFyaWFibGVzIHJlcXVpcmVzIHJlYWRpbmcgdGhlbQotICAgICAgICAgKiBiYWNrIGZyb20gdGhlIHN1cHBsaWNhbnQgdG8gdXBkYXRlIG1Db25maWd1cmVkTmV0d29ya3MuCi0gICAgICAgICAqIFRoaXMgaXMgYmVjYXVzZSBzb21lIG9mIHRoZSB2YXJpYWJsZXMgKFNTSUQsIHdlcCBrZXlzICYKLSAgICAgICAgICogcGFzc3BocmFzZXMpIHJlZmxlY3QgZGlmZmVyZW50IHZhbHVlcyB3aGVuIHJlYWQgYmFjayB0aGFuCi0gICAgICAgICAqIHdoZW4gd3JpdHRlbi4gRm9yIGV4YW1wbGUsIHdlcCBrZXkgaXMgc3RvcmVkIGFzICogaXJyZXNwZWN0aXZlCi0gICAgICAgICAqIG9mIHRoZSB2YWx1ZSBzZW50IHRvIHRoZSBzdXBwbGljYW50Ci0gICAgICAgICAqLwotICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjdXJyZW50Q29uZmlnID0gbUNvbmZpZ3VyZWROZXR3b3Jrcy5nZXQobmV0SWQpOwotICAgICAgICBpZiAoY3VycmVudENvbmZpZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBjdXJyZW50Q29uZmlnID0gbmV3IFdpZmlDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgICAgICBjdXJyZW50Q29uZmlnLmlwQXNzaWdubWVudCA9IElwQXNzaWdubWVudC5ESENQOwotICAgICAgICAgICAgY3VycmVudENvbmZpZy5wcm94eVNldHRpbmdzID0gUHJveHlTZXR0aW5ncy5OT05FOwotICAgICAgICAgICAgY3VycmVudENvbmZpZy5uZXR3b3JrSWQgPSBuZXRJZDsKLSAgICAgICAgfQotCi0gICAgICAgIHJlYWROZXR3b3JrVmFyaWFibGVzKGN1cnJlbnRDb25maWcpOwotCi0gICAgICAgIG1Db25maWd1cmVkTmV0d29ya3MucHV0KG5ldElkLCBjdXJyZW50Q29uZmlnKTsKLSAgICAgICAgbU5ldHdvcmtJZHMucHV0KGNvbmZpZ0tleShjdXJyZW50Q29uZmlnKSwgbmV0SWQpOwotCi0gICAgICAgIE5ldHdvcmtVcGRhdGVSZXN1bHQgcmVzdWx0ID0gd3JpdGVJcEFuZFByb3h5Q29uZmlndXJhdGlvbnNPbkNoYW5nZShjdXJyZW50Q29uZmlnLCBjb25maWcpOwotICAgICAgICByZXN1bHQuc2V0SXNOZXdOZXR3b3JrKG5ld05ldHdvcmspOwotICAgICAgICByZXN1bHQuc2V0TmV0d29ya0lkKG5ldElkKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKiBDb21wYXJlIGN1cnJlbnQgYW5kIG5ldyBjb25maWd1cmF0aW9uIGFuZCB3cml0ZSB0byBmaWxlIG9uIGNoYW5nZSAqLwotICAgIHByaXZhdGUgTmV0d29ya1VwZGF0ZVJlc3VsdCB3cml0ZUlwQW5kUHJveHlDb25maWd1cmF0aW9uc09uQ2hhbmdlKAotICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY3VycmVudENvbmZpZywKLSAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIG5ld0NvbmZpZykgewotICAgICAgICBib29sZWFuIGlwQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBib29sZWFuIHByb3h5Q2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBMaW5rUHJvcGVydGllcyBsaW5rUHJvcGVydGllcyA9IG51bGw7Ci0KLSAgICAgICAgc3dpdGNoIChuZXdDb25maWcuaXBBc3NpZ25tZW50KSB7Ci0gICAgICAgICAgICBjYXNlIFNUQVRJQzoKLSAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPExpbmtBZGRyZXNzPiBjdXJyZW50TGlua0FkZHJlc3NlcyA9IGN1cnJlbnRDb25maWcubGlua1Byb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRMaW5rQWRkcmVzc2VzKCk7Ci0gICAgICAgICAgICAgICAgQ29sbGVjdGlvbjxMaW5rQWRkcmVzcz4gbmV3TGlua0FkZHJlc3NlcyA9IG5ld0NvbmZpZy5saW5rUHJvcGVydGllcwotICAgICAgICAgICAgICAgICAgICAgICAgLmdldExpbmtBZGRyZXNzZXMoKTsKLSAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPEluZXRBZGRyZXNzPiBjdXJyZW50RG5zZXMgPSBjdXJyZW50Q29uZmlnLmxpbmtQcm9wZXJ0aWVzLmdldERuc2VzKCk7Ci0gICAgICAgICAgICAgICAgQ29sbGVjdGlvbjxJbmV0QWRkcmVzcz4gbmV3RG5zZXMgPSBuZXdDb25maWcubGlua1Byb3BlcnRpZXMuZ2V0RG5zZXMoKTsKLSAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPFJvdXRlSW5mbz4gY3VycmVudFJvdXRlcyA9IGN1cnJlbnRDb25maWcubGlua1Byb3BlcnRpZXMuZ2V0Um91dGVzKCk7Ci0gICAgICAgICAgICAgICAgQ29sbGVjdGlvbjxSb3V0ZUluZm8+IG5ld1JvdXRlcyA9IG5ld0NvbmZpZy5saW5rUHJvcGVydGllcy5nZXRSb3V0ZXMoKTsKLQotICAgICAgICAgICAgICAgIGJvb2xlYW4gbGlua0FkZHJlc3Nlc0RpZmZlciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudExpbmtBZGRyZXNzZXMuc2l6ZSgpICE9IG5ld0xpbmtBZGRyZXNzZXMuc2l6ZSgpKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIWN1cnJlbnRMaW5rQWRkcmVzc2VzLmNvbnRhaW5zQWxsKG5ld0xpbmtBZGRyZXNzZXMpOwotICAgICAgICAgICAgICAgIGJvb2xlYW4gZG5zZXNEaWZmZXIgPSAoY3VycmVudERuc2VzLnNpemUoKSAhPSBuZXdEbnNlcy5zaXplKCkpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAhY3VycmVudERuc2VzLmNvbnRhaW5zQWxsKG5ld0Ruc2VzKTsKLSAgICAgICAgICAgICAgICBib29sZWFuIHJvdXRlc0RpZmZlciA9IChjdXJyZW50Um91dGVzLnNpemUoKSAhPSBuZXdSb3V0ZXMuc2l6ZSgpKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIWN1cnJlbnRSb3V0ZXMuY29udGFpbnNBbGwobmV3Um91dGVzKTsKLQotICAgICAgICAgICAgICAgIGlmICgoY3VycmVudENvbmZpZy5pcEFzc2lnbm1lbnQgIT0gbmV3Q29uZmlnLmlwQXNzaWdubWVudCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtBZGRyZXNzZXNEaWZmZXIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRuc2VzRGlmZmVyIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXNEaWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaXBDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERIQ1A6Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb25maWcuaXBBc3NpZ25tZW50ICE9IG5ld0NvbmZpZy5pcEFzc2lnbm1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaXBDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOQVNTSUdORUQ6Ci0gICAgICAgICAgICAgICAgLyogSWdub3JlICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGxvZ2UoIklnbm9yZSBpbnZhbGlkIGlwIGFzc2lnbm1lbnQgZHVyaW5nIHdyaXRlIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG5ld0NvbmZpZy5wcm94eVNldHRpbmdzKSB7Ci0gICAgICAgICAgICBjYXNlIFNUQVRJQzoKLSAgICAgICAgICAgIGNhc2UgUEFDOgotICAgICAgICAgICAgICAgIFByb3h5UHJvcGVydGllcyBuZXdIdHRwUHJveHkgPSBuZXdDb25maWcubGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCk7Ci0gICAgICAgICAgICAgICAgUHJveHlQcm9wZXJ0aWVzIGN1cnJlbnRIdHRwUHJveHkgPSBjdXJyZW50Q29uZmlnLmxpbmtQcm9wZXJ0aWVzLmdldEh0dHBQcm94eSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKG5ld0h0dHBQcm94eSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3h5Q2hhbmdlZCA9ICFuZXdIdHRwUHJveHkuZXF1YWxzKGN1cnJlbnRIdHRwUHJveHkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3h5Q2hhbmdlZCA9IChjdXJyZW50SHR0cFByb3h5ICE9IG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTk9ORToKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbmZpZy5wcm94eVNldHRpbmdzICE9IG5ld0NvbmZpZy5wcm94eVNldHRpbmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3h5Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTkFTU0lHTkVEOgotICAgICAgICAgICAgICAgIC8qIElnbm9yZSAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBsb2dlKCJJZ25vcmUgaW52YWxpZCBwcm94eSBjb25maWd1cmF0aW9uIGR1cmluZyB3cml0ZSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpcENoYW5nZWQpIHsKLSAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzID0gY29weUlwU2V0dGluZ3NGcm9tQ29uZmlnKGN1cnJlbnRDb25maWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY3VycmVudENvbmZpZy5pcEFzc2lnbm1lbnQgPSBuZXdDb25maWcuaXBBc3NpZ25tZW50OwotICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMgPSBjb3B5SXBTZXR0aW5nc0Zyb21Db25maWcobmV3Q29uZmlnKTsKLSAgICAgICAgICAgIGxvZygiSVAgY29uZmlnIGNoYW5nZWQgU1NJRCA9ICIgKyBjdXJyZW50Q29uZmlnLlNTSUQgKyAiIGxpbmtQcm9wZXJ0aWVzOiAiICsKLSAgICAgICAgICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIGlmICghcHJveHlDaGFuZ2VkKSB7Ci0gICAgICAgICAgICBsaW5rUHJvcGVydGllcy5zZXRIdHRwUHJveHkoY3VycmVudENvbmZpZy5saW5rUHJvcGVydGllcy5nZXRIdHRwUHJveHkoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjdXJyZW50Q29uZmlnLnByb3h5U2V0dGluZ3MgPSBuZXdDb25maWcucHJveHlTZXR0aW5nczsKLSAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLnNldEh0dHBQcm94eShuZXdDb25maWcubGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCkpOwotICAgICAgICAgICAgbG9nKCJwcm94eSBjaGFuZ2VkIFNTSUQgPSAiICsgY3VycmVudENvbmZpZy5TU0lEKTsKLSAgICAgICAgICAgIGlmIChsaW5rUHJvcGVydGllcy5nZXRIdHRwUHJveHkoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbG9nKCIgcHJveHlQcm9wZXJ0aWVzOiAiICsgbGlua1Byb3BlcnRpZXMuZ2V0SHR0cFByb3h5KCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXBDaGFuZ2VkIHx8IHByb3h5Q2hhbmdlZCkgewotICAgICAgICAgICAgY3VycmVudENvbmZpZy5saW5rUHJvcGVydGllcyA9IGxpbmtQcm9wZXJ0aWVzOwotICAgICAgICAgICAgd3JpdGVJcEFuZFByb3h5Q29uZmlndXJhdGlvbnMoKTsKLSAgICAgICAgICAgIHNlbmRDb25maWd1cmVkTmV0d29ya3NDaGFuZ2VkQnJvYWRjYXN0KGN1cnJlbnRDb25maWcsCi0gICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkNIQU5HRV9SRUFTT05fQ09ORklHX0NIQU5HRSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrVXBkYXRlUmVzdWx0KGlwQ2hhbmdlZCwgcHJveHlDaGFuZ2VkKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIExpbmtQcm9wZXJ0aWVzIGNvcHlJcFNldHRpbmdzRnJvbUNvbmZpZyhXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgTGlua1Byb3BlcnRpZXMgbGlua1Byb3BlcnRpZXMgPSBuZXcgTGlua1Byb3BlcnRpZXMoKTsKLSAgICAgICAgbGlua1Byb3BlcnRpZXMuc2V0SW50ZXJmYWNlTmFtZShjb25maWcubGlua1Byb3BlcnRpZXMuZ2V0SW50ZXJmYWNlTmFtZSgpKTsKLSAgICAgICAgZm9yIChMaW5rQWRkcmVzcyBsaW5rQWRkciA6IGNvbmZpZy5saW5rUHJvcGVydGllcy5nZXRMaW5rQWRkcmVzc2VzKCkpIHsKLSAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLmFkZExpbmtBZGRyZXNzKGxpbmtBZGRyKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKFJvdXRlSW5mbyByb3V0ZSA6IGNvbmZpZy5saW5rUHJvcGVydGllcy5nZXRSb3V0ZXMoKSkgewotICAgICAgICAgICAgbGlua1Byb3BlcnRpZXMuYWRkUm91dGUocm91dGUpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoSW5ldEFkZHJlc3MgZG5zIDogY29uZmlnLmxpbmtQcm9wZXJ0aWVzLmdldERuc2VzKCkpIHsKLSAgICAgICAgICAgIGxpbmtQcm9wZXJ0aWVzLmFkZERucyhkbnMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsaW5rUHJvcGVydGllczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWFkIHRoZSB2YXJpYWJsZXMgZnJvbSB0aGUgc3VwcGxpY2FudCBkYWVtb24gdGhhdCBhcmUgbmVlZGVkIHRvCi0gICAgICogZmlsbCBpbiB0aGUgV2lmaUNvbmZpZ3VyYXRpb24gb2JqZWN0LgotICAgICAqCi0gICAgICogQHBhcmFtIGNvbmZpZyB0aGUge0BsaW5rIFdpZmlDb25maWd1cmF0aW9ufSBvYmplY3QgdG8gYmUgZmlsbGVkIGluLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCByZWFkTmV0d29ya1ZhcmlhYmxlcyhXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLQotICAgICAgICBpbnQgbmV0SWQgPSBjb25maWcubmV0d29ya0lkOwotICAgICAgICBpZiAobmV0SWQgPCAwKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRPRE86IG1heWJlIHNob3VsZCBoYXZlIGEgbmF0aXZlIG1ldGhvZCB0aGF0IHRha2VzIGFuIGFycmF5IG9mCi0gICAgICAgICAqIHZhcmlhYmxlIG5hbWVzIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHZhbHVlcy4gQnV0IHdlJ2Qgc3RpbGwKLSAgICAgICAgICogYmUgZG9pbmcgYSByb3VuZCB0cmlwIHRvIHRoZSBzdXBwbGljYW50IGRhZW1vbiBmb3IgZWFjaCB2YXJpYWJsZS4KLSAgICAgICAgICovCi0gICAgICAgIFN0cmluZyB2YWx1ZTsKLQotICAgICAgICB2YWx1ZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgV2lmaUNvbmZpZ3VyYXRpb24uc3NpZFZhck5hbWUpOwotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHZhbHVlKSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmNoYXJBdCgwKSAhPSAnIicpIHsKLSAgICAgICAgICAgICAgICBjb25maWcuU1NJRCA9ICJcIiIgKyBXaWZpU3NpZC5jcmVhdGVGcm9tSGV4KHZhbHVlKS50b1N0cmluZygpICsgIlwiIjsKLSAgICAgICAgICAgICAgICAvL1RPRE86IGNvbnZlcnQgYSBoZXggc3RyaW5nIHRoYXQgaXMgbm90IFVURi04IGRlY29kYWJsZSB0byBhIFAtZm9ybWF0dGVkCi0gICAgICAgICAgICAgICAgLy9zdXBwbGljYW50IHN0cmluZwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25maWcuU1NJRCA9IHZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uZmlnLlNTSUQgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIFdpZmlDb25maWd1cmF0aW9uLmJzc2lkVmFyTmFtZSk7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICBjb25maWcuQlNTSUQgPSB2YWx1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbmZpZy5CU1NJRCA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICB2YWx1ZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgV2lmaUNvbmZpZ3VyYXRpb24ucHJpb3JpdHlWYXJOYW1lKTsKLSAgICAgICAgY29uZmlnLnByaW9yaXR5ID0gLTE7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNvbmZpZy5wcmlvcml0eSA9IEludGVnZXIucGFyc2VJbnQodmFsdWUpOwotICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGlnbm9yZSkgewotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIFdpZmlDb25maWd1cmF0aW9uLmhpZGRlblNTSURWYXJOYW1lKTsKLSAgICAgICAgY29uZmlnLmhpZGRlblNTSUQgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnLmhpZGRlblNTSUQgPSBJbnRlZ2VyLnBhcnNlSW50KHZhbHVlKSAhPSAwOwotICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGlnbm9yZSkgewotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIFdpZmlDb25maWd1cmF0aW9uLndlcFR4S2V5SWR4VmFyTmFtZSk7Ci0gICAgICAgIGNvbmZpZy53ZXBUeEtleUluZGV4ID0gLTE7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNvbmZpZy53ZXBUeEtleUluZGV4ID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gaWdub3JlKSB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsCi0gICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLndlcEtleVZhck5hbWVzW2ldKTsKLSAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnLndlcEtleXNbaV0gPSB2YWx1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnLndlcEtleXNbaV0gPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIFdpZmlDb25maWd1cmF0aW9uLnBza1Zhck5hbWUpOwotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHZhbHVlKSkgewotICAgICAgICAgICAgY29uZmlnLnByZVNoYXJlZEtleSA9IHZhbHVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uZmlnLnByZVNoYXJlZEtleSA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICB2YWx1ZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShjb25maWcubmV0d29ya0lkLAotICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLlByb3RvY29sLnZhck5hbWUpOwotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHZhbHVlKSkgewotICAgICAgICAgICAgU3RyaW5nIHZhbHNbXSA9IHZhbHVlLnNwbGl0KCIgIik7Ci0gICAgICAgICAgICBmb3IgKFN0cmluZyB2YWwgOiB2YWxzKSB7Ci0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgbG9va3VwU3RyaW5nKHZhbCwgV2lmaUNvbmZpZ3VyYXRpb24uUHJvdG9jb2wuc3RyaW5ncyk7Ci0gICAgICAgICAgICAgICAgaWYgKDAgPD0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFsbG93ZWRQcm90b2NvbHMuc2V0KGluZGV4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2YWx1ZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShjb25maWcubmV0d29ya0lkLAotICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLktleU1nbXQudmFyTmFtZSk7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsc1tdID0gdmFsdWUuc3BsaXQoIiAiKTsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIHZhbCA6IHZhbHMpIHsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPQotICAgICAgICAgICAgICAgICAgICBsb29rdXBTdHJpbmcodmFsLCBXaWZpQ29uZmlndXJhdGlvbi5LZXlNZ210LnN0cmluZ3MpOwotICAgICAgICAgICAgICAgIGlmICgwIDw9IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudC5zZXQoaW5kZXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhbHVlID0gbVdpZmlOYXRpdmUuZ2V0TmV0d29ya1ZhcmlhYmxlKGNvbmZpZy5uZXR3b3JrSWQsCi0gICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uQXV0aEFsZ29yaXRobS52YXJOYW1lKTsKLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKLSAgICAgICAgICAgIFN0cmluZyB2YWxzW10gPSB2YWx1ZS5zcGxpdCgiICIpOwotICAgICAgICAgICAgZm9yIChTdHJpbmcgdmFsIDogdmFscykgewotICAgICAgICAgICAgICAgIGludCBpbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgIGxvb2t1cFN0cmluZyh2YWwsIFdpZmlDb25maWd1cmF0aW9uLkF1dGhBbGdvcml0aG0uc3RyaW5ncyk7Ci0gICAgICAgICAgICAgICAgaWYgKDAgPD0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFsbG93ZWRBdXRoQWxnb3JpdGhtcy5zZXQoaW5kZXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhbHVlID0gbVdpZmlOYXRpdmUuZ2V0TmV0d29ya1ZhcmlhYmxlKGNvbmZpZy5uZXR3b3JrSWQsCi0gICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uUGFpcndpc2VDaXBoZXIudmFyTmFtZSk7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsc1tdID0gdmFsdWUuc3BsaXQoIiAiKTsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIHZhbCA6IHZhbHMpIHsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPQotICAgICAgICAgICAgICAgICAgICBsb29rdXBTdHJpbmcodmFsLCBXaWZpQ29uZmlndXJhdGlvbi5QYWlyd2lzZUNpcGhlci5zdHJpbmdzKTsKLSAgICAgICAgICAgICAgICBpZiAoMCA8PSBpbmRleCkgewotICAgICAgICAgICAgICAgICAgICBjb25maWcuYWxsb3dlZFBhaXJ3aXNlQ2lwaGVycy5zZXQoaW5kZXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhbHVlID0gbVdpZmlOYXRpdmUuZ2V0TmV0d29ya1ZhcmlhYmxlKGNvbmZpZy5uZXR3b3JrSWQsCi0gICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24uR3JvdXBDaXBoZXIudmFyTmFtZSk7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsc1tdID0gdmFsdWUuc3BsaXQoIiAiKTsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIHZhbCA6IHZhbHMpIHsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPQotICAgICAgICAgICAgICAgICAgICBsb29rdXBTdHJpbmcodmFsLCBXaWZpQ29uZmlndXJhdGlvbi5Hcm91cENpcGhlci5zdHJpbmdzKTsKLSAgICAgICAgICAgICAgICBpZiAoMCA8PSBpbmRleCkgewotICAgICAgICAgICAgICAgICAgICBjb25maWcuYWxsb3dlZEdyb3VwQ2lwaGVycy5zZXQoaW5kZXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb25maWcuZW50ZXJwcmlzZUNvbmZpZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBjb25maWcuZW50ZXJwcmlzZUNvbmZpZyA9IG5ldyBXaWZpRW50ZXJwcmlzZUNvbmZpZygpOwotICAgICAgICB9Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGVudGVycHJpc2VGaWVsZHMgPSBjb25maWcuZW50ZXJwcmlzZUNvbmZpZy5nZXRGaWVsZHMoKTsKLSAgICAgICAgZm9yIChTdHJpbmcga2V5IDogV2lmaUVudGVycHJpc2VDb25maWcuZ2V0U3VwcGxpY2FudEtleXMoKSkgewotICAgICAgICAgICAgdmFsdWUgPSBtV2lmaU5hdGl2ZS5nZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIGtleSk7Ci0gICAgICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHZhbHVlKSkgewotICAgICAgICAgICAgICAgIGVudGVycHJpc2VGaWVsZHMucHV0KGtleSwgcmVtb3ZlRG91YmxlUXVvdGVzKHZhbHVlKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGVudGVycHJpc2VGaWVsZHMucHV0KGtleSwgV2lmaUVudGVycHJpc2VDb25maWcuRU1QVFlfVkFMVUUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnLm1pZ3JhdGVPbGRFYXBUbHNOYXRpdmUobVdpZmlOYXRpdmUsIG5ldElkKSkgewotICAgICAgICAgICAgc2F2ZUNvbmZpZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uZmlnLmVudGVycHJpc2VDb25maWcubWlncmF0ZUNlcnRzKG1LZXlTdG9yZSk7Ci0gICAgICAgIGNvbmZpZy5lbnRlcnByaXNlQ29uZmlnLmluaXRpYWxpemVTb2Z0d2FyZUtleXN0b3JlRmxhZyhtS2V5U3RvcmUpOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIHJlbW92ZURvdWJsZVF1b3RlcyhTdHJpbmcgc3RyaW5nKSB7Ci0gICAgICAgIGludCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgICAgIGlmICgobGVuZ3RoID4gMSkgJiYgKHN0cmluZy5jaGFyQXQoMCkgPT0gJyInKQotICAgICAgICAgICAgICAgICYmIChzdHJpbmcuY2hhckF0KGxlbmd0aCAtIDEpID09ICciJykpIHsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDEsIGxlbmd0aCAtIDEpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdHJpbmc7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgY29udmVydFRvUXVvdGVkU3RyaW5nKFN0cmluZyBzdHJpbmcpIHsKLSAgICAgICAgcmV0dXJuICJcIiIgKyBzdHJpbmcgKyAiXCIiOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIG1ha2VTdHJpbmcoQml0U2V0IHNldCwgU3RyaW5nW10gc3RyaW5ncykgewotICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBpbnQgbmV4dFNldEJpdCA9IC0xOwotCi0gICAgICAgIC8qIE1ha2Ugc3VyZSBhbGwgc2V0IGJpdHMgYXJlIGluIFswLCBzdHJpbmdzLmxlbmd0aCkgdG8gYXZvaWQKLSAgICAgICAgICogZ29pbmcgb3V0IG9mIGJvdW5kcyBvbiBzdHJpbmdzLiAgKFNob3VsZG4ndCBoYXBwZW4sIGJ1dC4uLikgKi8KLSAgICAgICAgc2V0ID0gc2V0LmdldCgwLCBzdHJpbmdzLmxlbmd0aCk7Ci0KLSAgICAgICAgd2hpbGUgKChuZXh0U2V0Qml0ID0gc2V0Lm5leHRTZXRCaXQobmV4dFNldEJpdCArIDEpKSAhPSAtMSkgewotICAgICAgICAgICAgYnVmLmFwcGVuZChzdHJpbmdzW25leHRTZXRCaXRdLnJlcGxhY2UoJ18nLCAnLScpKS5hcHBlbmQoJyAnKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyBzcGFjZQotICAgICAgICBpZiAoc2V0LmNhcmRpbmFsaXR5KCkgPiAwKSB7Ci0gICAgICAgICAgICBidWYuc2V0TGVuZ3RoKGJ1Zi5sZW5ndGgoKSAtIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGxvb2t1cFN0cmluZyhTdHJpbmcgc3RyaW5nLCBTdHJpbmdbXSBzdHJpbmdzKSB7Ci0gICAgICAgIGludCBzaXplID0gc3RyaW5ncy5sZW5ndGg7Ci0KLSAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoJy0nLCAnXycpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgaWYgKHN0cmluZy5lcXVhbHMoc3RyaW5nc1tpXSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0KLSAgICAgICAgLy8gaWYgd2UgZXZlciBnZXQgaGVyZSwgd2Ugc2hvdWxkIHByb2JhYmx5IGFkZCB0aGUKLSAgICAgICAgLy8gdmFsdWUgdG8gV2lmaUNvbmZpZ3VyYXRpb24gdG8gcmVmbGVjdCB0aGF0IGl0J3MKLSAgICAgICAgLy8gc3VwcG9ydGVkIGJ5IHRoZSBXUEEgc3VwcGxpY2FudAotICAgICAgICBsb2dlKCJGYWlsZWQgdG8gbG9vay11cCBhIHN0cmluZzogIiArIHN0cmluZyk7Ci0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIC8qIFJldHVybnMgYSB1bmlxdWUgZm9yIGEgZ2l2ZW4gY29uZmlndXJhdGlvbiAqLwotICAgIHByaXZhdGUgc3RhdGljIGludCBjb25maWdLZXkoV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgICAgIFN0cmluZyBrZXk7Ci0KLSAgICAgICAgaWYgKGNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudC5nZXQoS2V5TWdtdC5XUEFfUFNLKSkgewotICAgICAgICAgICAga2V5ID0gY29uZmlnLlNTSUQgKyBLZXlNZ210LnN0cmluZ3NbS2V5TWdtdC5XUEFfUFNLXTsKLSAgICAgICAgfSBlbHNlIGlmIChjb25maWcuYWxsb3dlZEtleU1hbmFnZW1lbnQuZ2V0KEtleU1nbXQuV1BBX0VBUCkgfHwKLSAgICAgICAgICAgICAgICBjb25maWcuYWxsb3dlZEtleU1hbmFnZW1lbnQuZ2V0KEtleU1nbXQuSUVFRTgwMjFYKSkgewotICAgICAgICAgICAga2V5ID0gY29uZmlnLlNTSUQgKyBLZXlNZ210LnN0cmluZ3NbS2V5TWdtdC5XUEFfRUFQXTsKLSAgICAgICAgfSBlbHNlIGlmIChjb25maWcud2VwS2V5c1swXSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBrZXkgPSBjb25maWcuU1NJRCArICJXRVAiOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAga2V5ID0gY29uZmlnLlNTSUQgKyBLZXlNZ210LnN0cmluZ3NbS2V5TWdtdC5OT05FXTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBrZXkuaGFzaENvZGUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXAoRmlsZURlc2NyaXB0b3IgZmQsIFByaW50V3JpdGVyIHB3LCBTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIHB3LnByaW50bG4oIldpZmlDb25maWdTdG9yZSIpOwotICAgICAgICBwdy5wcmludGxuKCJtTGFzdFByaW9yaXR5ICIgKyBtTGFzdFByaW9yaXR5KTsKLSAgICAgICAgcHcucHJpbnRsbigiQ29uZmlndXJlZCBuZXR3b3JrcyIpOwotICAgICAgICBmb3IgKFdpZmlDb25maWd1cmF0aW9uIGNvbmYgOiBnZXRDb25maWd1cmVkTmV0d29ya3MoKSkgewotICAgICAgICAgICAgcHcucHJpbnRsbihjb25mKTsKLSAgICAgICAgfQotICAgICAgICBwdy5wcmludGxuKCk7Ci0KLSAgICAgICAgaWYgKG1Mb2NhbExvZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBwdy5wcmludGxuKCJXaWZpQ29uZmlnU3RvcmUgLSBMb2cgQmVnaW4gLS0tLSIpOwotICAgICAgICAgICAgbUxvY2FsTG9nLmR1bXAoZmQsIHB3LCBhcmdzKTsKLSAgICAgICAgICAgIHB3LnByaW50bG4oIldpZmlDb25maWdTdG9yZSAtIExvZyBFbmQgLS0tLSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRDb25maWdGaWxlKCkgewotICAgICAgICByZXR1cm4gaXBDb25maWdGaWxlOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBsb2dlKFN0cmluZyBzKSB7Ci0gICAgICAgIExvZy5lKFRBRywgcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGxvZyhTdHJpbmcgcykgewotICAgICAgICBMb2cuZChUQUcsIHMpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBsb2NhbExvZyhTdHJpbmcgcykgewotICAgICAgICBpZiAobUxvY2FsTG9nICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1Mb2NhbExvZy5sb2cocyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbG9jYWxMb2coU3RyaW5nIHMsIGludCBuZXRJZCkgewotICAgICAgICBpZiAobUxvY2FsTG9nID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZzsKLSAgICAgICAgc3luY2hyb25pemVkKG1Db25maWd1cmVkTmV0d29ya3MpIHsKLSAgICAgICAgICAgIGNvbmZpZyA9IG1Db25maWd1cmVkTmV0d29ya3MuZ2V0KG5ldElkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkgewotICAgICAgICAgICAgbUxvY2FsTG9nLmxvZyhzICsgIiAiICsgY29uZmlnLmdldFByaW50YWJsZVNzaWQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtTG9jYWxMb2cubG9nKHMgKyAiICIgKyBuZXRJZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlDb25maWd1cmF0aW9uLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpQ29uZmlndXJhdGlvbi5qYXZhCmluZGV4IDg3YWZhODguLjY1NjI0NjIgMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlDb25maWd1cmF0aW9uLmphdmEKKysrIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaUNvbmZpZ3VyYXRpb24uamF2YQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAgICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgY29uZmlnIGlzIGludmFsaWQgZm9yIGtleSBpZCBnZW5lcmF0aW9uCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBTdHJpbmcgZ2V0S2V5SWRGb3JDcmVkZW50aWFscyhXaWZpQ29uZmlndXJhdGlvbiBjdXJyZW50KSB7CisgICAgcHVibGljIFN0cmluZyBnZXRLZXlJZEZvckNyZWRlbnRpYWxzKFdpZmlDb25maWd1cmF0aW9uIGN1cnJlbnQpIHsKICAgICAgICAgU3RyaW5nIGtleU1nbXQgPSBudWxsOwogCiAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpRW50ZXJwcmlzZUNvbmZpZy5qYXZhIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaUVudGVycHJpc2VDb25maWcuamF2YQppbmRleCBjN2ViZWNiLi42OWJlMmNmIDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpRW50ZXJwcmlzZUNvbmZpZy5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlFbnRlcnByaXNlQ29uZmlnLmphdmEKQEAgLTE3LDE5ICsxNywxMyBAQAogCiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLnNlY3VyaXR5LkNyZWRlbnRpYWxzOwotaW1wb3J0IGFuZHJvaWQuc2VjdXJpdHkuS2V5Q2hhaW47Ci1pbXBvcnQgYW5kcm9pZC5zZWN1cml0eS5LZXlTdG9yZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogCiBpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuS2V5RmFjdG9yeTsKIGltcG9ydCBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LlByaXZhdGVLZXk7Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZUVuY29kaW5nRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVGYWN0b3J5OwpAQCAtMzksNjcgKzMzLDcxIEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIAotLyoqIAorLyoqCiAgKiBFbnRlcnByaXNlIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBmb3IgV2ktRmkuIFN0b3JlcyBkZXRhaWxzIGFib3V0IHRoZSBFQVAgbWV0aG9kCiAgKiBhbmQgYW55IGFzc29jaWF0ZWQgY3JlZGVudGlhbHMuCiAgKi8KIHB1YmxpYyBjbGFzcyBXaWZpRW50ZXJwcmlzZUNvbmZpZyBpbXBsZW1lbnRzIFBhcmNlbGFibGUgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2lmaUVudGVycHJpc2VDb25maWciOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREJHID0gZmFsc2U7Ci0gICAgLyoqCi0gICAgICogSW4gb2xkIGNvbmZpZ3VyYXRpb25zLCB0aGUgInByaXZhdGVfa2V5IiBmaWVsZCB3YXMgdXNlZC4gSG93ZXZlciwgbmV3ZXIKLSAgICAgKiBjb25maWd1cmF0aW9ucyB1c2UgdGhlIGtleV9pZCBmaWVsZCB3aXRoIHRoZSBlbmdpbmVfaWQgc2V0IHRvICJrZXlzdG9yZSIuCi0gICAgICogSWYgdGhpcyBmaWVsZCBpcyBmb3VuZCBpbiB0aGUgY29uZmlndXJhdGlvbiwgdGhlIG1pZ3JhdGlvbiBjb2RlIGlzCi0gICAgICogdHJpZ2dlcmVkLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPTERfUFJJVkFURV9LRVlfTkFNRSA9ICJwcml2YXRlX2tleSI7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTVBUWV9WQUxVRSAgICAgICAgID0gIk5VTEwiOworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVBUF9LRVkgICAgICAgICAgICAgPSAiZWFwIjsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQSEFTRTJfS0VZICAgICAgICAgID0gInBoYXNlMiI7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJVFlfS0VZICAgICAgICA9ICJpZGVudGl0eSI7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU5PTl9JREVOVElUWV9LRVkgICA9ICJhbm9ueW1vdXNfaWRlbnRpdHkiOworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBU1NXT1JEX0tFWSAgICAgICAgPSAicGFzc3dvcmQiOworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQkpFQ1RfTUFUQ0hfS0VZICAgPSAic3ViamVjdF9tYXRjaCI7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BQX0tFWV9DQUNISU5HICAgICA9ICJwcm9hY3RpdmVfa2V5X2NhY2hpbmciOwogICAgIC8qKgogICAgICAqIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIGtleXN0b3JlIE9wZW5TU0wgRU5HSU5FJ3MgSUQuCisgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5HSU5FX0lEX0tFWVNUT1JFID0gImtleXN0b3JlIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTkdJTkVfSURfS0VZU1RPUkUgPSAia2V5c3RvcmUiOwogCiAgICAgLyoqCiAgICAgICogU3RyaW5nIHJlcHJlc2VudGluZyB0aGUga2V5c3RvcmUgVVJJIHVzZWQgZm9yIHdwYV9zdXBwbGljYW50LgorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWVNUT1JFX1VSSSA9ICJrZXlzdG9yZTovLyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZU1RPUkVfVVJJID0gImtleXN0b3JlOi8vIjsKIAogICAgIC8qKgogICAgICAqIFN0cmluZyB0byBzZXQgdGhlIGVuZ2luZSB2YWx1ZSB0byB3aGVuIGl0IHNob3VsZCBiZSBlbmFibGVkLgorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVOR0lORV9FTkFCTEUgPSAiMSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5HSU5FX0VOQUJMRSA9ICIxIjsKIAogICAgIC8qKgogICAgICAqIFN0cmluZyB0byBzZXQgdGhlIGVuZ2luZSB2YWx1ZSB0byB3aGVuIGl0IHNob3VsZCBiZSBkaXNhYmxlZC4KKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTkdJTkVfRElTQUJMRSA9ICIwIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTkdJTkVfRElTQUJMRSA9ICIwIjsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDQV9DRVJUX1BSRUZJWCA9IEtFWVNUT1JFX1VSSSArIENyZWRlbnRpYWxzLkNBX0NFUlRJRklDQVRFOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDTElFTlRfQ0VSVF9QUkVGSVggPSBLRVlTVE9SRV9VUkkgKyBDcmVkZW50aWFscy5VU0VSX0NFUlRJRklDQVRFOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVBUF9LRVkgICAgICAgICAgICAgPSAiZWFwIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEhBU0UyX0tFWSAgICAgICAgICA9ICJwaGFzZTIiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJREVOVElUWV9LRVkgICAgICAgID0gImlkZW50aXR5IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU5PTl9JREVOVElUWV9LRVkgICA9ICJhbm9ueW1vdXNfaWRlbnRpdHkiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQVNTV09SRF9LRVkgICAgICAgID0gInBhc3N3b3JkIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0xJRU5UX0NFUlRfS0VZICAgICA9ICJjbGllbnRfY2VydCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENBX0NFUlRfS0VZICAgICAgICAgPSAiY2FfY2VydCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQkpFQ1RfTUFUQ0hfS0VZICAgPSAic3ViamVjdF9tYXRjaCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVOR0lORV9LRVkgICAgICAgICAgPSAiZW5naW5lIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5HSU5FX0lEX0tFWSAgICAgICA9ICJlbmdpbmVfaWQiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUklWQVRFX0tFWV9JRF9LRVkgID0gImtleV9pZCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE9QUF9LRVlfQ0FDSElORyAgICAgPSAicHJvYWN0aXZlX2tleV9jYWNoaW5nIjsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQV9DRVJUX1BSRUZJWCA9IEtFWVNUT1JFX1VSSSArIENyZWRlbnRpYWxzLkNBX0NFUlRJRklDQVRFOworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENMSUVOVF9DRVJUX1BSRUZJWCA9IEtFWVNUT1JFX1VSSSArIENyZWRlbnRpYWxzLlVTRVJfQ0VSVElGSUNBVEU7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0xJRU5UX0NFUlRfS0VZICAgICA9ICJjbGllbnRfY2VydCI7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FfQ0VSVF9LRVkgICAgICAgICA9ICJjYV9jZXJ0IjsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTkdJTkVfS0VZICAgICAgICAgID0gImVuZ2luZSI7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5HSU5FX0lEX0tFWSAgICAgICA9ICJlbmdpbmVfaWQiOworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSSVZBVEVfS0VZX0lEX0tFWSAgPSAia2V5X2lkIjsKIAogICAgIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbUZpZWxkcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwogICAgIHByaXZhdGUgWDUwOUNlcnRpZmljYXRlIG1DYUNlcnQ7CiAgICAgcHJpdmF0ZSBQcml2YXRlS2V5IG1DbGllbnRQcml2YXRlS2V5OwogICAgIHByaXZhdGUgWDUwOUNlcnRpZmljYXRlIG1DbGllbnRDZXJ0aWZpY2F0ZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbU5lZWRzU29mdHdhcmVLZXlzdG9yZSA9IGZhbHNlOwotCi0gICAgLyoqIFRoaXMgcmVwcmVzZW50cyBhbiBlbXB0eSB2YWx1ZSBvZiBhbiBlbnRlcnByaXNlIGZpZWxkLgotICAgICAqIE5VTEwgaXMgdXNlZCBhdCB3cGFfc3VwcGxpY2FudCB0byBpbmRpY2F0ZSBhbiBlbXB0eSB2YWx1ZQotICAgICAqLwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU1QVFlfVkFMVUUgPSAiTlVMTCI7CiAKICAgICBwdWJsaWMgV2lmaUVudGVycHJpc2VDb25maWcoKSB7CiAgICAgICAgIC8vIERvIG5vdCBzZXQgZGVmYXVsdHMgc28gdGhhdCB0aGUgZW50ZXJwcmlzZSBmaWVsZHMgdGhhdCBhcmUgbm90IGNoYW5nZWQKQEAgLTI0NiwyNCArMjQ0LDIwIEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdUQyAgICAgICAgID0gNDsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZJWCA9ICJhdXRoPSI7CiAgICAgICAgIC8qKiBAaGlkZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHN0cmluZ3MgPSB7RU1QVFlfVkFMVUUsICJQQVAiLCAiTVNDSEFQIiwgIk1TQ0hBUFYyIiwgIkdUQyIgfTsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBzdHJpbmdzID0ge0VNUFRZX1ZBTFVFLCAiUEFQIiwgIk1TQ0hBUCIsCisgICAgICAgICAgICAgICAgIk1TQ0hBUFYyIiwgIkdUQyIgfTsKIAogICAgICAgICAvKiogUHJldmVudCBpbml0aWFsaXphdGlvbiAqLwogICAgICAgICBwcml2YXRlIFBoYXNlMigpIHt9CiAgICAgfQogCi0gICAgLyoqIEludGVybmFsIHVzZSBvbmx5ICovCi0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0RmllbGRzKCkgeworICAgIC8qKiBJbnRlcm5hbCB1c2Ugb25seQorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGdldEZpZWxkcygpIHsKICAgICAgICAgcmV0dXJuIG1GaWVsZHM7CiAgICAgfQogCi0gICAgLyoqIEludGVybmFsIHVzZSBvbmx5ICovCi0gICAgc3RhdGljIFN0cmluZ1tdIGdldFN1cHBsaWNhbnRLZXlzKCkgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsgRUFQX0tFWSwgUEhBU0UyX0tFWSwgSURFTlRJVFlfS0VZLCBBTk9OX0lERU5USVRZX0tFWSwgUEFTU1dPUkRfS0VZLAotICAgICAgICAgICAgICAgIENMSUVOVF9DRVJUX0tFWSwgQ0FfQ0VSVF9LRVksIFNVQkpFQ1RfTUFUQ0hfS0VZLCBFTkdJTkVfS0VZLCBFTkdJTkVfSURfS0VZLAotICAgICAgICAgICAgICAgIFBSSVZBVEVfS0VZX0lEX0tFWSB9OwotICAgIH0KLQogICAgIC8qKgogICAgICAqIFNldCB0aGUgRUFQIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4KICAgICAgKiBAcGFyYW0gIGVhcE1ldGhvZCBpcyBvbmUge0BsaW5rIEVhcCNQRUFQfSwge0BsaW5rIEVhcCNUTFN9LCB7QGxpbmsgRWFwI1RUTFN9IG9yCkBAIC00MzEsNyArNDI1LDYgQEAKIAogICAgIC8qKgogICAgICAqIEdldCBDQSBjZXJ0aWZpY2F0ZQotICAgICAqCiAgICAgICogQHJldHVybiBYLjUwOSBDQSBjZXJ0aWZpY2F0ZQogICAgICAqLwogICAgIHB1YmxpYyBYNTA5Q2VydGlmaWNhdGUgZ2V0Q2FDZXJ0aWZpY2F0ZSgpIHsKQEAgLTQzOSw3ICs0MzIsMTMgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTZXQgQ2xpZW50IGNlcnRpZmljYXRlIGFsaWFzLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVzZXRDYUNlcnRpZmljYXRlKCkgeworICAgICAgICBtQ2FDZXJ0ID0gbnVsbDsKKyAgICB9CisKKyAgICAvKiogU2V0IENsaWVudCBjZXJ0aWZpY2F0ZSBhbGlhcy4KICAgICAgKgogICAgICAqIDxwPiBTZWUgdGhlIHtAbGluayBhbmRyb2lkLnNlY3VyaXR5LktleUNoYWlufSBmb3IgZGV0YWlscyBvbiBpbnN0YWxsaW5nIG9yIGNob29zaW5nCiAgICAgICogYSBjZXJ0aWZpY2F0ZQpAQCAtNTA3LDExNiArNTA2LDE5IEBACiAgICAgICAgIHJldHVybiBtQ2xpZW50Q2VydGlmaWNhdGU7CiAgICAgfQogCi0gICAgYm9vbGVhbiBuZWVkc0tleVN0b3JlKCkgewotICAgICAgICAvLyBIYXMgbm8ga2V5cyB0byBiZSBpbnN0YWxsZWQKLSAgICAgICAgaWYgKG1DbGllbnRDZXJ0aWZpY2F0ZSA9PSBudWxsICYmIG1DYUNlcnQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlc2V0Q2xpZW50S2V5RW50cnkoKSB7CisgICAgICAgIG1DbGllbnRQcml2YXRlS2V5ID0gbnVsbDsKKyAgICAgICAgbUNsaWVudENlcnRpZmljYXRlID0gbnVsbDsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbGVhbiBpc0hhcmR3YXJlQmFja2VkS2V5KFByaXZhdGVLZXkga2V5KSB7Ci0gICAgICAgIHJldHVybiBLZXlDaGFpbi5pc0JvdW5kS2V5QWxnb3JpdGhtKGtleS5nZXRBbGdvcml0aG0oKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2xlYW4gaGFzSGFyZHdhcmVCYWNrZWRLZXkoQ2VydGlmaWNhdGUgY2VydGlmaWNhdGUpIHsKLSAgICAgICAgcmV0dXJuIEtleUNoYWluLmlzQm91bmRLZXlBbGdvcml0aG0oY2VydGlmaWNhdGUuZ2V0UHVibGljS2V5KCkuZ2V0QWxnb3JpdGhtKCkpOwotICAgIH0KLQotICAgIGJvb2xlYW4gbmVlZHNTb2Z0d2FyZUJhY2tlZEtleVN0b3JlKCkgewotICAgICAgICByZXR1cm4gbU5lZWRzU29mdHdhcmVLZXlzdG9yZTsKLSAgICB9Ci0KLSAgICBib29sZWFuIGluc3RhbGxLZXlzKGFuZHJvaWQuc2VjdXJpdHkuS2V5U3RvcmUga2V5U3RvcmUsIFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIGJvb2xlYW4gcmV0ID0gdHJ1ZTsKLSAgICAgICAgU3RyaW5nIHByaXZLZXlOYW1lID0gQ3JlZGVudGlhbHMuVVNFUl9QUklWQVRFX0tFWSArIG5hbWU7Ci0gICAgICAgIFN0cmluZyB1c2VyQ2VydE5hbWUgPSBDcmVkZW50aWFscy5VU0VSX0NFUlRJRklDQVRFICsgbmFtZTsKLSAgICAgICAgU3RyaW5nIGNhQ2VydE5hbWUgPSBDcmVkZW50aWFscy5DQV9DRVJUSUZJQ0FURSArIG5hbWU7Ci0gICAgICAgIGlmIChtQ2xpZW50Q2VydGlmaWNhdGUgIT0gbnVsbCkgewotICAgICAgICAgICAgYnl0ZVtdIHByaXZLZXlEYXRhID0gbUNsaWVudFByaXZhdGVLZXkuZ2V0RW5jb2RlZCgpOwotICAgICAgICAgICAgaWYgKGlzSGFyZHdhcmVCYWNrZWRLZXkobUNsaWVudFByaXZhdGVLZXkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSGFyZHdhcmUgYmFja2VkIGtleSBzdG9yZSBpcyBzZWN1cmUgZW5vdWdoIHRvIHN0b3JlIGtleXMgdW4tZW5jcnlwdGVkLCB0aGlzCi0gICAgICAgICAgICAgICAgLy8gcmVtb3ZlcyB0aGUgbmVlZCBmb3IgdXNlciB0byBwdW5jaCBhIFBJTiB0byBnZXQgYWNjZXNzIHRvIHRoZXNlIGtleXMKLSAgICAgICAgICAgICAgICBpZiAoREJHKSBTbG9nLmQoVEFHLCAiaW1wb3J0aW5nIGtleXMgIiArIG5hbWUgKyAiIGluIGhhcmR3YXJlIGJhY2tlZCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJzdG9yZSIpOwotICAgICAgICAgICAgICAgIHJldCA9IGtleVN0b3JlLmltcG9ydEtleShwcml2S2V5TmFtZSwgcHJpdktleURhdGEsIFByb2Nlc3MuV0lGSV9VSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleVN0b3JlLkZMQUdfTk9ORSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFNvZnR3YXJlIGJhY2tlZCBrZXkgc3RvcmUgaXMgTk9UIHNlY3VyZSBlbm91Z2ggdG8gc3RvcmUga2V5cyB1bi1lbmNyeXB0ZWQuCi0gICAgICAgICAgICAgICAgLy8gU2F2ZSBrZXlzIGVuY3J5cHRlZCBzbyB0aGV5IGFyZSBwcm90ZWN0ZWQgd2l0aCB1c2VyJ3MgUElOLiBVc2VyIHdpbGwKLSAgICAgICAgICAgICAgICAvLyBoYXZlIHRvIHVubG9jayBwaG9uZSBiZWZvcmUgYmVpbmcgYWJsZSB0byB1c2UgdGhlc2Uga2V5cyBhbmQgY29ubmVjdCB0bwotICAgICAgICAgICAgICAgIC8vIG5ldHdvcmtzLgotICAgICAgICAgICAgICAgIGlmIChEQkcpIFNsb2cuZChUQUcsICJpbXBvcnRpbmcga2V5cyAiICsgbmFtZSArICIgaW4gc29mdHdhcmUgYmFja2VkIHN0b3JlIik7Ci0gICAgICAgICAgICAgICAgcmV0ID0ga2V5U3RvcmUuaW1wb3J0S2V5KHByaXZLZXlOYW1lLCBwcml2S2V5RGF0YSwgUHJvY2Vzcy5XSUZJX1VJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEtleVN0b3JlLkZMQUdfRU5DUllQVEVEKTsKLSAgICAgICAgICAgICAgICBtTmVlZHNTb2Z0d2FyZUtleXN0b3JlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXQgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXQgPSBwdXRDZXJ0SW5LZXlTdG9yZShrZXlTdG9yZSwgdXNlckNlcnROYW1lLCBtQ2xpZW50Q2VydGlmaWNhdGUpOwotICAgICAgICAgICAgaWYgKHJldCA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBwcml2YXRlIGtleSBpbnN0YWxsZWQKLSAgICAgICAgICAgICAgICBrZXlTdG9yZS5kZWxLZXkocHJpdktleU5hbWUsIFByb2Nlc3MuV0lGSV9VSUQpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUNhQ2VydCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXQgPSBwdXRDZXJ0SW5LZXlTdG9yZShrZXlTdG9yZSwgY2FDZXJ0TmFtZSwgbUNhQ2VydCk7Ci0gICAgICAgICAgICBpZiAocmV0ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1DbGllbnRDZXJ0aWZpY2F0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBjbGllbnQga2V5K2NlcnQKLSAgICAgICAgICAgICAgICAgICAga2V5U3RvcmUuZGVsS2V5KHByaXZLZXlOYW1lLCBQcm9jZXNzLldJRklfVUlEKTsKLSAgICAgICAgICAgICAgICAgICAga2V5U3RvcmUuZGVsZXRlKHVzZXJDZXJ0TmFtZSwgUHJvY2Vzcy5XSUZJX1VJRCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTZXQgYWxpYXMgbmFtZXMKLSAgICAgICAgaWYgKG1DbGllbnRDZXJ0aWZpY2F0ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzZXRDbGllbnRDZXJ0aWZpY2F0ZUFsaWFzKG5hbWUpOwotICAgICAgICAgICAgbUNsaWVudFByaXZhdGVLZXkgPSBudWxsOwotICAgICAgICAgICAgbUNsaWVudENlcnRpZmljYXRlID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtQ2FDZXJ0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHNldENhQ2VydGlmaWNhdGVBbGlhcyhuYW1lKTsKLSAgICAgICAgICAgIG1DYUNlcnQgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gcHV0Q2VydEluS2V5U3RvcmUoYW5kcm9pZC5zZWN1cml0eS5LZXlTdG9yZSBrZXlTdG9yZSwgU3RyaW5nIG5hbWUsCi0gICAgICAgICAgICBDZXJ0aWZpY2F0ZSBjZXJ0KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBieXRlW10gY2VydERhdGEgPSBDcmVkZW50aWFscy5jb252ZXJ0VG9QZW0oY2VydCk7Ci0gICAgICAgICAgICBpZiAoREJHKSBTbG9nLmQoVEFHLCAicHV0dGluZyBjZXJ0aWZpY2F0ZSAiICsgbmFtZSArICIgaW4ga2V5c3RvcmUiKTsKLSAgICAgICAgICAgIHJldHVybiBrZXlTdG9yZS5wdXQobmFtZSwgY2VydERhdGEsIFByb2Nlc3MuV0lGSV9VSUQsIEtleVN0b3JlLkZMQUdfTk9ORSk7Ci0KLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZTEpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBjYXRjaCAoQ2VydGlmaWNhdGVFeGNlcHRpb24gZTIpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgcmVtb3ZlS2V5cyhLZXlTdG9yZSBrZXlTdG9yZSkgewotICAgICAgICBTdHJpbmcgY2xpZW50ID0gZ2V0RmllbGRWYWx1ZShDTElFTlRfQ0VSVF9LRVksIENMSUVOVF9DRVJUX1BSRUZJWCk7Ci0gICAgICAgIC8vIGEgdmFsaWQgY2xpZW50IGNlcnRpZmljYXRlIGlzIGNvbmZpZ3VyZWQKLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShjbGllbnQpKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBTbG9nLmQoVEFHLCAicmVtb3ZpbmcgY2xpZW50IHByaXZhdGUga2V5IGFuZCB1c2VyIGNlcnQiKTsKLSAgICAgICAgICAgIGtleVN0b3JlLmRlbEtleShDcmVkZW50aWFscy5VU0VSX1BSSVZBVEVfS0VZICsgY2xpZW50LCBQcm9jZXNzLldJRklfVUlEKTsKLSAgICAgICAgICAgIGtleVN0b3JlLmRlbGV0ZShDcmVkZW50aWFscy5VU0VSX0NFUlRJRklDQVRFICsgY2xpZW50LCBQcm9jZXNzLldJRklfVUlEKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBjYSA9IGdldEZpZWxkVmFsdWUoQ0FfQ0VSVF9LRVksIENBX0NFUlRfUFJFRklYKTsKLSAgICAgICAgLy8gYSB2YWxpZCBjYSBjZXJ0aWZpY2F0ZSBpcyBjb25maWd1cmVkCi0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkoY2EpKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBTbG9nLmQoVEFHLCAicmVtb3ZpbmcgQ0EgY2VydCIpOwotICAgICAgICAgICAga2V5U3RvcmUuZGVsZXRlKENyZWRlbnRpYWxzLkNBX0NFUlRJRklDQVRFICsgY2EsIFByb2Nlc3MuV0lGSV9VSUQpOwotICAgICAgICB9CisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgUHJpdmF0ZUtleSBnZXRDbGllbnRQcml2YXRlS2V5KCkgeworICAgICAgICByZXR1cm4gbUNsaWVudFByaXZhdGVLZXk7CiAgICAgfQogCiAgICAgLyoqCkBAIC02NTEsMTI5ICs1NTMsNiBAQAogICAgICAgICByZXR1cm4gZWFwICsgIl8iICsgcGhhc2UyOwogICAgIH0KIAotICAgIC8qKiBNaWdyYXRlcyB0aGUgb2xkIHN0eWxlIFRMUyBjb25maWcgdG8gdGhlIG5ldyBjb25maWcgc3R5bGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZAotICAgICAqIHdoZW4gcmVzdG9yaW5nIGFuIG9sZCB3cGFfc3VwcGxpY2FudC5jb25mIG9yIHVwZ3JhZGluZyBmcm9tIGEgcHJldmlvdXMKLSAgICAgKiBwbGF0Zm9ybSB2ZXJzaW9uLgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY29uZmlnIHdhcyB1cGRhdGVkCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICBib29sZWFuIG1pZ3JhdGVPbGRFYXBUbHNOYXRpdmUoV2lmaU5hdGl2ZSB3aWZpTmF0aXZlLCBpbnQgbmV0SWQpIHsKLSAgICAgICAgU3RyaW5nIG9sZFByaXZhdGVLZXkgPSB3aWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgT0xEX1BSSVZBVEVfS0VZX05BTUUpOwotICAgICAgICAvKgotICAgICAgICAgKiBJZiB0aGUgb2xkIGNvbmZpZ3VyYXRpb24gdmFsdWUgaXMgbm90IHByZXNlbnQsIHRoZW4gdGhlcmUgaXMgbm90aGluZwotICAgICAgICAgKiB0byBkby4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShvbGRQcml2YXRlS2V5KSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQWxzbyBpZ25vcmUgaXQgaWYgaXQncyBlbXB0eSBxdW90ZXMuCi0gICAgICAgICAgICBvbGRQcml2YXRlS2V5ID0gcmVtb3ZlRG91YmxlUXVvdGVzKG9sZFByaXZhdGVLZXkpOwotICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG9sZFByaXZhdGVLZXkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbUZpZWxkcy5wdXQoRU5HSU5FX0tFWSwgRU5HSU5FX0VOQUJMRSk7Ci0gICAgICAgIG1GaWVsZHMucHV0KEVOR0lORV9JRF9LRVksIGNvbnZlcnRUb1F1b3RlZFN0cmluZyhFTkdJTkVfSURfS0VZU1RPUkUpKTsKLQotICAgICAgICAvKgotICAgICAgICAqIFRoZSBvbGQga2V5IHN0YXJ0ZWQgd2l0aCB0aGUga2V5c3RvcmU6Ly8gVVJJIHByZWZpeCwgYnV0IHdlIGRvbid0Ci0gICAgICAgICogbmVlZCB0aGF0IGFueW1vcmUuIFRyaW0gaXQgb2ZmIGlmIGl0IGV4aXN0cy4KLSAgICAgICAgKi8KLSAgICAgICAgZmluYWwgU3RyaW5nIGtleU5hbWU7Ci0gICAgICAgIGlmIChvbGRQcml2YXRlS2V5LnN0YXJ0c1dpdGgoS0VZU1RPUkVfVVJJKSkgewotICAgICAgICAgICAga2V5TmFtZSA9IG5ldyBTdHJpbmcob2xkUHJpdmF0ZUtleS5zdWJzdHJpbmcoS0VZU1RPUkVfVVJJLmxlbmd0aCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBrZXlOYW1lID0gb2xkUHJpdmF0ZUtleTsKLSAgICAgICAgfQotICAgICAgICBtRmllbGRzLnB1dChQUklWQVRFX0tFWV9JRF9LRVksIGNvbnZlcnRUb1F1b3RlZFN0cmluZyhrZXlOYW1lKSk7Ci0KLSAgICAgICAgd2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIEVOR0lORV9LRVksIG1GaWVsZHMuZ2V0KEVOR0lORV9LRVkpKTsKLSAgICAgICAgd2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIEVOR0lORV9JRF9LRVksIG1GaWVsZHMuZ2V0KEVOR0lORV9JRF9LRVkpKTsKLSAgICAgICAgd2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUobmV0SWQsIFBSSVZBVEVfS0VZX0lEX0tFWSwgbUZpZWxkcy5nZXQoUFJJVkFURV9LRVlfSURfS0VZKSk7Ci0gICAgICAgIC8vIFJlbW92ZSBvbGQgcHJpdmF0ZV9rZXkgc3RyaW5nIHNvIHdlIGRvbid0IHJ1biB0aGlzIGFnYWluLgotICAgICAgICB3aWZpTmF0aXZlLnNldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgT0xEX1BSSVZBVEVfS0VZX05BTUUsIEVNUFRZX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqIE1pZ3JhdGUgY2VydHMgZnJvbSBnbG9iYWwgcG9vbCB0byB3aWZpIFVJRCBpZiBub3QgYWxyZWFkeSBkb25lICovCi0gICAgdm9pZCBtaWdyYXRlQ2VydHMoYW5kcm9pZC5zZWN1cml0eS5LZXlTdG9yZSBrZXlTdG9yZSkgewotICAgICAgICBTdHJpbmcgY2xpZW50ID0gZ2V0RmllbGRWYWx1ZShDTElFTlRfQ0VSVF9LRVksIENMSUVOVF9DRVJUX1BSRUZJWCk7Ci0gICAgICAgIC8vIGEgdmFsaWQgY2xpZW50IGNlcnRpZmljYXRlIGlzIGNvbmZpZ3VyZWQKLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShjbGllbnQpKSB7Ci0gICAgICAgICAgICBpZiAoIWtleVN0b3JlLmNvbnRhaW5zKENyZWRlbnRpYWxzLlVTRVJfUFJJVkFURV9LRVkgKyBjbGllbnQsIFByb2Nlc3MuV0lGSV9VSUQpKSB7Ci0gICAgICAgICAgICAgICAga2V5U3RvcmUuZHVwbGljYXRlKENyZWRlbnRpYWxzLlVTRVJfUFJJVkFURV9LRVkgKyBjbGllbnQsIC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgQ3JlZGVudGlhbHMuVVNFUl9QUklWQVRFX0tFWSArIGNsaWVudCwgUHJvY2Vzcy5XSUZJX1VJRCk7Ci0gICAgICAgICAgICAgICAga2V5U3RvcmUuZHVwbGljYXRlKENyZWRlbnRpYWxzLlVTRVJfQ0VSVElGSUNBVEUgKyBjbGllbnQsIC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgQ3JlZGVudGlhbHMuVVNFUl9DRVJUSUZJQ0FURSArIGNsaWVudCwgUHJvY2Vzcy5XSUZJX1VJRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgY2EgPSBnZXRGaWVsZFZhbHVlKENBX0NFUlRfS0VZLCBDQV9DRVJUX1BSRUZJWCk7Ci0gICAgICAgIC8vIGEgdmFsaWQgY2EgY2VydGlmaWNhdGUgaXMgY29uZmlndXJlZAotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KGNhKSkgewotICAgICAgICAgICAgaWYgKCFrZXlTdG9yZS5jb250YWlucyhDcmVkZW50aWFscy5DQV9DRVJUSUZJQ0FURSArIGNhLCBQcm9jZXNzLldJRklfVUlEKSkgewotICAgICAgICAgICAgICAgIGtleVN0b3JlLmR1cGxpY2F0ZShDcmVkZW50aWFscy5DQV9DRVJUSUZJQ0FURSArIGNhLCAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIENyZWRlbnRpYWxzLkNBX0NFUlRJRklDQVRFICsgY2EsIFByb2Nlc3MuV0lGSV9VSUQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBpbml0aWFsaXplU29mdHdhcmVLZXlzdG9yZUZsYWcoYW5kcm9pZC5zZWN1cml0eS5LZXlTdG9yZSBrZXlTdG9yZSkgewotICAgICAgICBTdHJpbmcgY2xpZW50ID0gZ2V0RmllbGRWYWx1ZShDTElFTlRfQ0VSVF9LRVksIENMSUVOVF9DRVJUX1BSRUZJWCk7Ci0gICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkoY2xpZW50KSkgewotICAgICAgICAgICAgLy8gYSB2YWxpZCBjbGllbnQgY2VydGlmaWNhdGUgaXMgY29uZmlndXJlZAotCi0gICAgICAgICAgICAvLyBCVUdCVUc6IGtleVN0b3JlLmdldCgpIG5ldmVyIHJldHVybnMgY2VydEJ5dGVzOyBiZWNhdXNlIGl0IGlzIG5vdAotICAgICAgICAgICAgLy8gdGFraW5nIFdJRklfVUlEIGFzIGEgcGFyYW1ldGVyLiBJdCBhbHdheXMgbG9va3MgZm9yIGNlcnRpZmljYXRlCi0gICAgICAgICAgICAvLyB3aXRoIFNZU1RFTV9VSUQsIGFuZCBuZXZlciBmaW5kcyBhbnkgV2lmaSBjZXJ0aWZpY2F0ZXMuIEFzc3VtaW5nIHRoYXQKLSAgICAgICAgICAgIC8vIGFsbCBjZXJ0aWZpY2F0ZXMgbmVlZCBzb2Z0d2FyZSBrZXlzdG9yZSB1bnRpbCB3ZSBnZXQgdGhlIGdldCgpIEFQSQotICAgICAgICAgICAgLy8gZml4ZWQuCi0KLSAgICAgICAgICAgIG1OZWVkc1NvZnR3YXJlS2V5c3RvcmUgPSB0cnVlOwotCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgdHJ5IHsKLQotICAgICAgICAgICAgICAgIGlmIChEQkcpIFNsb2cuZChUQUcsICJMb2FkaW5nIGNsaWVudCBjZXJ0aWZpY2F0ZSAiICsgQ3JlZGVudGlhbHMKLSAgICAgICAgICAgICAgICAgICAgICAgIC5VU0VSX0NFUlRJRklDQVRFICsgY2xpZW50KTsKLQotICAgICAgICAgICAgICAgIENlcnRpZmljYXRlRmFjdG9yeSBmYWN0b3J5ID0gQ2VydGlmaWNhdGVGYWN0b3J5LmdldEluc3RhbmNlKCJYLjUwOSIpOwotICAgICAgICAgICAgICAgIGlmIChmYWN0b3J5ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkVycm9yIGdldHRpbmcgY2VydGlmaWNhdGUgZmFjdG9yeSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYnl0ZVtdIGNlcnRCeXRlcyA9IGtleVN0b3JlLmdldChDcmVkZW50aWFscy5VU0VSX0NFUlRJRklDQVRFICsgY2xpZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoY2VydEJ5dGVzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgQ2VydGlmaWNhdGUgY2VydCA9IChYNTA5Q2VydGlmaWNhdGUpIGZhY3RvcnkuZ2VuZXJhdGVDZXJ0aWZpY2F0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oY2VydEJ5dGVzKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNlcnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbU5lZWRzU29mdHdhcmVLZXlzdG9yZSA9IGhhc0hhcmR3YXJlQmFja2VkS2V5KGNlcnQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBTbG9nLmQoVEFHLCAiTG9hZGVkIGNsaWVudCBjZXJ0aWZpY2F0ZSAiICsgQ3JlZGVudGlhbHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLlVTRVJfQ0VSVElGSUNBVEUgKyBjbGllbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgU2xvZy5kKFRBRywgIkl0ICIgKyAobU5lZWRzU29mdHdhcmVLZXlzdG9yZSA/ICJuZWVkcyIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9lcyBub3QgbmVlZCIgKSArICIgc29mdHdhcmUga2V5IHN0b3JlIik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTbG9nLmQoVEFHLCAiY291bGQgbm90IGdlbmVyYXRlIGNlcnRpZmljYXRlIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiQ291bGQgbm90IGxvYWQgY2xpZW50IGNlcnRpZmljYXRlICIgKyBDcmVkZW50aWFscwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5VU0VSX0NFUlRJRklDQVRFICsgY2xpZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbU5lZWRzU29mdHdhcmVLZXlzdG9yZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9IGNhdGNoKENlcnRpZmljYXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiQ291bGQgbm90IHJlYWQgY2VydGlmaWNhdGVzIik7Ci0gICAgICAgICAgICAgICAgbUNhQ2VydCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgbUNsaWVudENlcnRpZmljYXRlID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICovCi0gICAgICAgIH0KLSAgICB9Ci0KICAgICBwcml2YXRlIFN0cmluZyByZW1vdmVEb3VibGVRdW90ZXMoU3RyaW5nIHN0cmluZykgewogICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoc3RyaW5nKSkgcmV0dXJuICIiOwogICAgICAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwpAQCAtODA2LDggKzU4NSw5IEBACiAgICAgICogQHBhcmFtIGtleSBpbnRvIHRoZSBoYXNoCiAgICAgICogQHBhcmFtIHByZWZpeCBpcyB0aGUgcHJlZml4IHRoYXQgdGhlIHZhbHVlIG1heSBoYXZlCiAgICAgICogQHJldHVybiB2YWx1ZQorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0RmllbGRWYWx1ZShTdHJpbmcga2V5LCBTdHJpbmcgcHJlZml4KSB7CisgICAgcHVibGljIFN0cmluZyBnZXRGaWVsZFZhbHVlKFN0cmluZyBrZXksIFN0cmluZyBwcmVmaXgpIHsKICAgICAgICAgU3RyaW5nIHZhbHVlID0gbUZpZWxkcy5nZXQoa2V5KTsKICAgICAgICAgLy8gVW5pbml0aWFsaXplZCBvciBrbm93biB0byBiZSBlbXB0eSBhZnRlciByZWFkaW5nIGZyb20gc3VwcGxpY2FudAogICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpIHx8IEVNUFRZX1ZBTFVFLmVxdWFscyh2YWx1ZSkpIHJldHVybiAiIjsKQEAgLTgyNCw4ICs2MDQsOSBAQAogICAgICAqIEBwYXJhbSBrZXkgaW50byB0aGUgaGFzaAogICAgICAqIEBwYXJhbSB2YWx1ZSB0byBiZSBzZXQKICAgICAgKiBAcGFyYW0gcHJlZml4IGFuIG9wdGlvbmFsIHZhbHVlIHRvIGJlIHByZWZpeGVkIHRvIGFjdHVhbCB2YWx1ZQorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNldEZpZWxkVmFsdWUoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlLCBTdHJpbmcgcHJlZml4KSB7CisgICAgcHVibGljIHZvaWQgc2V0RmllbGRWYWx1ZShTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUsIFN0cmluZyBwcmVmaXgpIHsKICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHZhbHVlKSkgewogICAgICAgICAgICAgbUZpZWxkcy5wdXQoa2V5LCBFTVBUWV9WQUxVRSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC04MzMsNiArNjE0LDIxIEBACiAgICAgICAgIH0KICAgICB9CiAKKworICAgIC8qKiBTZXQgYSB2YWx1ZSB3aXRoIGFuIG9wdGlvbmFsIHByZWZpeCBhdCBrZXkKKyAgICAgKiBAcGFyYW0ga2V5IGludG8gdGhlIGhhc2gKKyAgICAgKiBAcGFyYW0gdmFsdWUgdG8gYmUgc2V0CisgICAgICogQHBhcmFtIHByZWZpeCBhbiBvcHRpb25hbCB2YWx1ZSB0byBiZSBwcmVmaXhlZCB0byBhY3R1YWwgdmFsdWUKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEZpZWxkVmFsdWUoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7CisgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eSh2YWx1ZSkpIHsKKyAgICAgICAgICAgbUZpZWxkcy5wdXQoa2V5LCBFTVBUWV9WQUxVRSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtRmllbGRzLnB1dChrZXksIGNvbnZlcnRUb1F1b3RlZFN0cmluZyh2YWx1ZSkpOworICAgICAgICB9CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaUluZm8uamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlJbmZvLmphdmEKaW5kZXggNWQxMzBjNi4uNmExMzA2NyAxMDA2NDQKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaUluZm8uamF2YQorKysgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpSW5mby5qYXZhCkBAIC02Miw3ICs2Miw2IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgbUJTU0lEOwogICAgIHByaXZhdGUgV2lmaVNzaWQgbVdpZmlTc2lkOwogICAgIHByaXZhdGUgaW50IG1OZXR3b3JrSWQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1IaWRkZW5TU0lEOwogICAgIC8qKiBSZWNlaXZlZCBTaWduYWwgU3RyZW5ndGggSW5kaWNhdG9yICovCiAgICAgcHJpdmF0ZSBpbnQgbVJzc2k7CiAKQEAgLTc5LDE0ICs3OCwxNCBAQAogICAgICAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBtTWV0ZXJlZEhpbnQ7CiAKLSAgICBXaWZpSW5mbygpIHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgV2lmaUluZm8oKSB7CiAgICAgICAgIG1XaWZpU3NpZCA9IG51bGw7CiAgICAgICAgIG1CU1NJRCA9IG51bGw7CiAgICAgICAgIG1OZXR3b3JrSWQgPSAtMTsKICAgICAgICAgbVN1cHBsaWNhbnRTdGF0ZSA9IFN1cHBsaWNhbnRTdGF0ZS5VTklOSVRJQUxJWkVEOwogICAgICAgICBtUnNzaSA9IC05OTk5OwogICAgICAgICBtTGlua1NwZWVkID0gLTE7Ci0gICAgICAgIG1IaWRkZW5TU0lEID0gZmFsc2U7CiAgICAgfQogCiAgICAgLyoqCkBAIC05OSw3ICs5OCw2IEBACiAgICAgICAgICAgICBtQlNTSUQgPSBzb3VyY2UubUJTU0lEOwogICAgICAgICAgICAgbVdpZmlTc2lkID0gc291cmNlLm1XaWZpU3NpZDsKICAgICAgICAgICAgIG1OZXR3b3JrSWQgPSBzb3VyY2UubU5ldHdvcmtJZDsKLSAgICAgICAgICAgIG1IaWRkZW5TU0lEID0gc291cmNlLm1IaWRkZW5TU0lEOwogICAgICAgICAgICAgbVJzc2kgPSBzb3VyY2UubVJzc2k7CiAgICAgICAgICAgICBtTGlua1NwZWVkID0gc291cmNlLm1MaW5rU3BlZWQ7CiAgICAgICAgICAgICBtSXBBZGRyZXNzID0gc291cmNlLm1JcEFkZHJlc3M7CkBAIC0xMDgsMTAgKzEwNiw5IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHNldFNTSUQoV2lmaVNzaWQgd2lmaVNzaWQpIHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRTU0lEKFdpZmlTc2lkIHdpZmlTc2lkKSB7CiAgICAgICAgIG1XaWZpU3NpZCA9IHdpZmlTc2lkOwotICAgICAgICAvLyBuZXR3b3JrIGlzIGNvbnNpZGVyZWQgbm90IGhpZGRlbiBieSBkZWZhdWx0Ci0gICAgICAgIG1IaWRkZW5TU0lEID0gZmFsc2U7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMzgsNyArMTM1LDggQEAKICAgICAgICAgcmV0dXJuIG1XaWZpU3NpZDsKICAgICB9CiAKLSAgICB2b2lkIHNldEJTU0lEKFN0cmluZyBCU1NJRCkgeworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyB2b2lkIHNldEJTU0lEKFN0cmluZyBCU1NJRCkgewogICAgICAgICBtQlNTSUQgPSBCU1NJRDsKICAgICB9CiAKQEAgLTE2MSw3ICsxNTksOCBAQAogICAgICAgICByZXR1cm4gbVJzc2k7CiAgICAgfQogCi0gICAgdm9pZCBzZXRSc3NpKGludCByc3NpKSB7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHZvaWQgc2V0UnNzaShpbnQgcnNzaSkgewogICAgICAgICBtUnNzaSA9IHJzc2k7CiAgICAgfQogCkBAIC0xNzQsMTUgKzE3MywxNyBAQAogICAgICAgICByZXR1cm4gbUxpbmtTcGVlZDsKICAgICB9CiAKLSAgICB2b2lkIHNldExpbmtTcGVlZChpbnQgbGlua1NwZWVkKSB7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHZvaWQgc2V0TGlua1NwZWVkKGludCBsaW5rU3BlZWQpIHsKICAgICAgICAgdGhpcy5tTGlua1NwZWVkID0gbGlua1NwZWVkOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIFJlY29yZCB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIFdMQU4gaW50ZXJmYWNlCiAgICAgICogQHBhcmFtIG1hY0FkZHJlc3MgdGhlIE1BQyBhZGRyZXNzIGluIHtAY29kZSBYWDpYWDpYWDpYWDpYWDpYWH0gZm9ybQorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgdm9pZCBzZXRNYWNBZGRyZXNzKFN0cmluZyBtYWNBZGRyZXNzKSB7CisgICAgcHVibGljIHZvaWQgc2V0TWFjQWRkcmVzcyhTdHJpbmcgbWFjQWRkcmVzcykgewogICAgICAgICB0aGlzLm1NYWNBZGRyZXNzID0gbWFjQWRkcmVzczsKICAgICB9CiAKQEAgLTIwMCw3ICsyMDEsOCBAQAogICAgICAgICByZXR1cm4gbU1ldGVyZWRIaW50OwogICAgIH0KIAotICAgIHZvaWQgc2V0TmV0d29ya0lkKGludCBpZCkgeworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtJZChpbnQgaWQpIHsKICAgICAgICAgbU5ldHdvcmtJZCA9IGlkOwogICAgIH0KIApAQCAtMjIzLDExICsyMjUsMTMgQEAKICAgICAgICAgcmV0dXJuIG1TdXBwbGljYW50U3RhdGU7CiAgICAgfQogCi0gICAgdm9pZCBzZXRTdXBwbGljYW50U3RhdGUoU3VwcGxpY2FudFN0YXRlIHN0YXRlKSB7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHZvaWQgc2V0U3VwcGxpY2FudFN0YXRlKFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSkgewogICAgICAgICBtU3VwcGxpY2FudFN0YXRlID0gc3RhdGU7CiAgICAgfQogCi0gICAgdm9pZCBzZXRJbmV0QWRkcmVzcyhJbmV0QWRkcmVzcyBhZGRyZXNzKSB7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHZvaWQgc2V0SW5ldEFkZHJlc3MoSW5ldEFkZHJlc3MgYWRkcmVzcykgewogICAgICAgICBtSXBBZGRyZXNzID0gYWRkcmVzczsKICAgICB9CiAKQEAgLTI0NCwxMiArMjQ4LDcgQEAKICAgICAgKiBTU0lELXNwZWNpZmljIHByb2JlIHJlcXVlc3QgbXVzdCBiZSB1c2VkIGZvciBzY2Fucy4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBnZXRIaWRkZW5TU0lEKCkgewotICAgICAgICByZXR1cm4gbUhpZGRlblNTSUQ7Ci0gICAgfQotCi0gICAgLyoqIHtAaGlkZX0gKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRIaWRkZW5TU0lEKGJvb2xlYW4gaGlkZGVuU1NJRCkgewotICAgICAgICBtSGlkZGVuU1NJRCA9IGhpZGRlblNTSUQ7CisgICAgICAgIHJldHVybiBtV2lmaVNzaWQuaXNIaWRkZW4oKTsKICAgICB9CiAKICAgIC8qKgpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaU1hbmFnZXIuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlNYW5hZ2VyLmphdmEKaW5kZXggM2I0N2U2My4uYWFiZTAwNyAxMDA2NDQKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaU1hbmFnZXIuamF2YQorKysgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpTWFuYWdlci5qYXZhCkBAIC0zNSw3ICszNSw2IEBACiBpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7CiAKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuQXN5bmNDaGFubmVsOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJvdG9jb2w7CiAKQEAgLTUyMyw2ICs1MjIsOSBAQAogICAgIC8qKiBAaGlkZSAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFfQUNUSVZJVFlfSU5PVVQgICAgICAgID0gMHgwMzsKIAorICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX1BPT1JfTkVUV09SS19BVk9JREFOQ0VfRU5BQkxFRCA9IGZhbHNlOworCiAgICAgLyogTWF4aW11bSBudW1iZXIgb2YgYWN0aXZlIGxvY2tzIHdlIGFsbG93LgogICAgICAqIFRoaXMgbGltaXQgd2FzIGFkZGVkIHRvIHByZXZlbnQgYXBwcyBmcm9tIGNyZWF0aW5nIGEgcmlkaWN1bG91cyBudW1iZXIKICAgICAgKiBvZiBsb2NrcyBhbmQgY3Jhc2hpbmcgdGhlIHN5c3RlbSBieSBvdmVyZmxvd2luZyB0aGUgZ2xvYmFsIHJlZiB0YWJsZS4KQEAgLTIxNjMsMTMgKzIxNjUsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoqIEBoaWRlICovCi0gICAgcHVibGljIHZvaWQgY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGUoKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtU2VydmljZS5jYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZSgpOwotICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkge30KLSAgICB9Ci0KICAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChzVGhyZWFkUmVmTG9jaykgewpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaU1vbml0b3IuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlNb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MTc3NzcuLjAwMDAwMDAKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaU1vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLm5ldC53aWZpOwotCi1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya0luZm87Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycENvbmZpZzsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5XaWZpUDJwRGV2aWNlOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBHcm91cDsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5XaWZpUDJwU2VydmljZTsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5XaWZpUDJwU2VydmljZS5QMnBTdGF0dXM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycFByb3ZEaXNjRXZlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAubnNkLldpZmlQMnBTZXJ2aWNlUmVzcG9uc2U7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5TdGF0ZUNoYW5nZVJlc3VsdDsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5Qcm90b2NvbDsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlN0YXRlTWFjaGluZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwotCi0vKioKLSAqIExpc3RlbnMgZm9yIGV2ZW50cyBmcm9tIHRoZSB3cGFfc3VwcGxpY2FudCBzZXJ2ZXIsIGFuZCBwYXNzZXMgdGhlbSBvbgotICogdG8gdGhlIHtAbGluayBTdGF0ZU1hY2hpbmV9IGZvciBoYW5kbGluZy4gUnVucyBpbiBpdHMgb3duIHRocmVhZC4KLSAqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgV2lmaU1vbml0b3IgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBEQkcgPSBmYWxzZTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldpZmlNb25pdG9yIjsKLQotICAgIC8qKiBFdmVudHMgd2UgcmVjZWl2ZSBmcm9tIHRoZSBzdXBwbGljYW50IGRhZW1vbiAqLwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RFRCAgICA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERJU0NPTk5FQ1RFRCA9IDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0NIQU5HRSA9IDM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDQU5fUkVTVUxUUyA9IDQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJTktfU1BFRUQgICA9IDU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRFUk1JTkFUSU5HICA9IDY7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERSSVZFUl9TVEFURSA9IDc7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVBUF9GQUlMVVJFICA9IDg7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFTU09DX1JFSkVDVCA9IDk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFVOS05PV04gICAgICA9IDEwOwotCi0gICAgLyoqIEFsbCBldmVudHMgY29taW5nIGZyb20gdGhlIHN1cHBsaWNhbnQgc3RhcnQgd2l0aCB0aGlzIHByZWZpeCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFVkVOVF9QUkVGSVhfU1RSID0gIkNUUkwtRVZFTlQtIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfUFJFRklYX0xFTl9TVFIgPSBFVkVOVF9QUkVGSVhfU1RSLmxlbmd0aCgpOwotCi0gICAgLyoqIEFsbCBXUEEgZXZlbnRzIGNvbWluZyBmcm9tIHRoZSBzdXBwbGljYW50IHN0YXJ0IHdpdGggdGhpcyBwcmVmaXggKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1BBX0VWRU5UX1BSRUZJWF9TVFIgPSAiV1BBOiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBU1NXT1JEX01BWV9CRV9JTkNPUlJFQ1RfU1RSID0KLSAgICAgICAicHJlLXNoYXJlZCBrZXkgbWF5IGJlIGluY29ycmVjdCI7Ci0KLSAgICAvKiBXUFMgZXZlbnRzICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdQU19TVUNDRVNTX1NUUiA9ICJXUFMtU1VDQ0VTUyI7Ci0KLSAgICAvKiBGb3JtYXQ6IFdQUy1GQUlMIG1zZz0lZCBbY29uZmlnX2Vycm9yPSVkXSBbcmVhc29uPSVkICglcyldICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdQU19GQUlMX1NUUiAgICA9ICJXUFMtRkFJTCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdQU19GQUlMX1BBVFRFUk4gPQotICAgICAgICAgICAgIldQUy1GQUlMIG1zZz1cXGQrKD86IGNvbmZpZ19lcnJvcj0oXFxkKykpPyg/OiByZWFzb249KFxcZCspKT8iOwotCi0gICAgLyogY29uZmlnIGVycm9yIGNvZGUgdmFsdWVzIGZvciBjb25maWdfZXJyb3I9JWQgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09ORklHX01VTFRJUExFX1BCQ19ERVRFQ1RFRCA9IDEyOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT05GSUdfQVVUSF9GQUlMVVJFID0gMTg7Ci0KLSAgICAvKiByZWFzb24gY29kZSB2YWx1ZXMgZm9yIHJlYXNvbj0lZCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRUFTT05fVEtJUF9PTkxZX1BST0hJQklURUQgPSAxOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRUFTT05fV0VQX1BST0hJQklURUQgPSAyOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdQU19PVkVSTEFQX1NUUiA9ICJXUFMtT1ZFUkxBUC1ERVRFQ1RFRCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdQU19USU1FT1VUX1NUUiA9ICJXUFMtVElNRU9VVCI7Ci0KLSAgICAvKioKLSAgICAgKiBOYW1lcyBvZiBldmVudHMgZnJvbSB3cGFfc3VwcGxpY2FudCAobWludXMgdGhlIHByZWZpeCkuIEluIHRoZQotICAgICAqIGZvcm1hdCBkZXNjcmlwdGlvbnMsICogJnF1b3Q7PGNvZGU+eDwvY29kZT4mcXVvdDsKLSAgICAgKiBkZXNpZ25hdGVzIGEgZHluYW1pYyB2YWx1ZSB0aGF0IG5lZWRzIHRvIGJlIHBhcnNlZCBvdXQgZnJvbSB0aGUgZXZlbnQKLSAgICAgKiBzdHJpbmcKLSAgICAgKi8KLSAgICAvKioKLSAgICAgKiA8cHJlPgotICAgICAqIENUUkwtRVZFTlQtQ09OTkVDVEVEIC0gQ29ubmVjdGlvbiB0byB4eDp4eDp4eDp4eDp4eDp4eCBjb21wbGV0ZWQKLSAgICAgKiA8L3ByZT4KLSAgICAgKiA8Y29kZT54eDp4eDp4eDp4eDp4eDp4eDwvY29kZT4gaXMgdGhlIEJTU0lEIG9mIHRoZSBhc3NvY2lhdGVkIGFjY2VzcyBwb2ludAotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05ORUNURURfU1RSID0gICAgIkNPTk5FQ1RFRCI7Ci0gICAgLyoqCi0gICAgICogPHByZT4KLSAgICAgKiBDVFJMLUVWRU5ULURJU0NPTk5FQ1RFRCAtIERpc2Nvbm5lY3QgZXZlbnQgLSByZW1vdmUga2V5cwotICAgICAqIDwvcHJlPgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVNDT05ORUNURURfU1RSID0gIkRJU0NPTk5FQ1RFRCI7Ci0gICAgLyoqCi0gICAgICogPHByZT4KLSAgICAgKiBDVFJMLUVWRU5ULVNUQVRFLUNIQU5HRSB4Ci0gICAgICogPC9wcmU+Ci0gICAgICogPGNvZGU+eDwvY29kZT4gaXMgdGhlIG51bWVyaWNhbCB2YWx1ZSBvZiB0aGUgbmV3IHN0YXRlLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFURV9DSEFOR0VfU1RSID0gICJTVEFURS1DSEFOR0UiOwotICAgIC8qKgotICAgICAqIDxwcmU+Ci0gICAgICogQ1RSTC1FVkVOVC1TQ0FOLVJFU1VMVFMgcmVhZHkKLSAgICAgKiA8L3ByZT4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NBTl9SRVNVTFRTX1NUUiA9ICAiU0NBTi1SRVNVTFRTIjsKLQotICAgIC8qKgotICAgICAqIDxwcmU+Ci0gICAgICogQ1RSTC1FVkVOVC1MSU5LLVNQRUVEIHggTWIvcwotICAgICAqIDwvcHJlPgotICAgICAqIHtAY29kZSB4fSBpcyB0aGUgbGluayBzcGVlZCBpbiBNYi9zZWMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJTktfU1BFRURfU1RSID0gIkxJTkstU1BFRUQiOwotICAgIC8qKgotICAgICAqIDxwcmU+Ci0gICAgICogQ1RSTC1FVkVOVC1URVJNSU5BVElORyAtIHNpZ25hbCB4Ci0gICAgICogPC9wcmU+Ci0gICAgICogPGNvZGU+eDwvY29kZT4gaXMgdGhlIHNpZ25hbCB0aGF0IGNhdXNlZCB0ZXJtaW5hdGlvbi4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVSTUlOQVRJTkdfU1RSID0gICJURVJNSU5BVElORyI7Ci0gICAgLyoqCi0gICAgICogPHByZT4KLSAgICAgKiBDVFJMLUVWRU5ULURSSVZFUi1TVEFURSBzdGF0ZQotICAgICAqIDwvcHJlPgotICAgICAqIDxjb2RlPnN0YXRlPC9jb2RlPiBjYW4gYmUgSEFOR0VECi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERSSVZFUl9TVEFURV9TVFIgPSAiRFJJVkVSLVNUQVRFIjsKLSAgICAvKioKLSAgICAgKiA8cHJlPgotICAgICAqIENUUkwtRVZFTlQtRUFQLUZBSUxVUkUgRUFQIGF1dGhlbnRpY2F0aW9uIGZhaWxlZAotICAgICAqIDwvcHJlPgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFQVBfRkFJTFVSRV9TVFIgPSAiRUFQLUZBSUxVUkUiOwotCi0gICAgLyoqCi0gICAgICogVGhpcyBpbmRpY2F0ZXMgYW4gYXV0aGVudGljYXRpb24gZmFpbHVyZSBvbiBFQVAgRkFJTFVSRSBldmVudAotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFQVBfQVVUSF9GQUlMVVJFX1NUUiA9ICJFQVAgYXV0aGVudGljYXRpb24gZmFpbGVkIjsKLQotICAgIC8qKgotICAgICAqIFRoaXMgaW5kaWNhdGVzIGFuIGFzc29jIHJlamVjdCBldmVudAotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBU1NPQ19SRUpFQ1RfU1RSID0gIkFTU09DLVJFSkVDVCI7Ci0KLSAgICAvKioKLSAgICAgKiBSZWdleCBwYXR0ZXJuIGZvciBleHRyYWN0aW5nIGFuIEV0aGVybmV0LXN0eWxlIE1BQyBhZGRyZXNzIGZyb20gYSBzdHJpbmcuCi0gICAgICogTWF0Y2hlcyBhIHN0cmluZ3MgbGlrZSB0aGUgZm9sbG93aW5nOjxwcmU+Ci0gICAgICogQ1RSTC1FVkVOVC1DT05ORUNURUQgLSBDb25uZWN0aW9uIHRvIDAwOjFlOjU4OmVjOmQ1OjZkIGNvbXBsZXRlZCAocmVhdXRoKSBbaWQ9MSBpZF9zdHI9XTwvcHJlPgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIFBhdHRlcm4gbUNvbm5lY3RlZEV2ZW50UGF0dGVybiA9Ci0gICAgICAgIFBhdHRlcm4uY29tcGlsZSgiKCg/OlswLTlhLWZdezJ9Oil7NX1bMC05YS1mXXsyfSkgLiogXFxbaWQ9KFswLTldKykgIik7Ci0KLSAgICAvKiogUDJQIGV2ZW50cyAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfRVZFTlRfUFJFRklYX1NUUiA9ICJQMlAiOwotCi0gICAgLyogUDJQLURFVklDRS1GT1VORCBmYTo3Yjo3YTo0MjowMjoxMyBwMnBfZGV2X2FkZHI9ZmE6N2I6N2E6NDI6MDI6MTMgcHJpX2Rldl90eXBlPTEtMDA1MEYyMDQtMQotICAgICAgIG5hbWU9J3AycC1URVNUMScgY29uZmlnX21ldGhvZHM9MHgxODggZGV2X2NhcGFiPTB4MjcgZ3JvdXBfY2FwYWI9MHgwICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9ERVZJQ0VfRk9VTkRfU1RSID0gIlAyUC1ERVZJQ0UtRk9VTkQiOwotCi0gICAgLyogUDJQLURFVklDRS1MT1NUIHAycF9kZXZfYWRkcj00MjpmYzo4OTplMTplMjoyNyAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfREVWSUNFX0xPU1RfU1RSID0gIlAyUC1ERVZJQ0UtTE9TVCI7Ci0KLSAgICAvKiBQMlAtRklORC1TVE9QUEVEICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9GSU5EX1NUT1BQRURfU1RSID0gIlAyUC1GSU5ELVNUT1BQRUQiOwotCi0gICAgLyogUDJQLUdPLU5FRy1SRVFVRVNUIDQyOmZjOjg5OmE4Ojk2OjA5IGRldl9wYXNzd2RfaWQ9NCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfR09fTkVHX1JFUVVFU1RfU1RSID0gIlAyUC1HTy1ORUctUkVRVUVTVCI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX0dPX05FR19TVUNDRVNTX1NUUiA9ICJQMlAtR08tTkVHLVNVQ0NFU1MiOwotCi0gICAgLyogUDJQLUdPLU5FRy1GQUlMVVJFIHN0YXR1cz14ICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9HT19ORUdfRkFJTFVSRV9TVFIgPSAiUDJQLUdPLU5FRy1GQUlMVVJFIjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfR1JPVVBfRk9STUFUSU9OX1NVQ0NFU1NfU1RSID0KLSAgICAgICAgICAgICJQMlAtR1JPVVAtRk9STUFUSU9OLVNVQ0NFU1MiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9HUk9VUF9GT1JNQVRJT05fRkFJTFVSRV9TVFIgPQotICAgICAgICAgICAgIlAyUC1HUk9VUC1GT1JNQVRJT04tRkFJTFVSRSI7Ci0KLSAgICAvKiBQMlAtR1JPVVAtU1RBUlRFRCBwMnAtd2xhbjAtMCBbY2xpZW50fEdPXSBzc2lkPSJESVJFQ1QtVzgiIGZyZXE9MjQzNwotICAgICAgIFtwc2s9MjE4MmIyZTUwZTUzZjI2MGQwNGYzYzdiMjVlZjMzYzk2NWEzMjkxYjliMzZiNDU1YTgyZDc3ZmQ4MmNhMTViY3xwYXNzcGhyYXNlPSJmS0c0ak1lMyJdCi0gICAgICAgZ29fZGV2X2FkZHI9ZmE6N2I6N2E6NDI6MDI6MTMgW1BFUlNJU1RFTlRdICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9HUk9VUF9TVEFSVEVEX1NUUiA9ICJQMlAtR1JPVVAtU1RBUlRFRCI7Ci0KLSAgICAvKiBQMlAtR1JPVVAtUkVNT1ZFRCBwMnAtd2xhbjAtMCBbY2xpZW50fEdPXSByZWFzb249UkVRVUVTVEVEICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9HUk9VUF9SRU1PVkVEX1NUUiA9ICJQMlAtR1JPVVAtUkVNT1ZFRCI7Ci0KLSAgICAvKiBQMlAtSU5WSVRBVElPTi1SRUNFSVZFRCBzYT1mYTo3Yjo3YTo0MjowMjoxMyBnb19kZXZfYWRkcj1mODo3Yjo3YTo0MjowMjoxMwotICAgICAgICBic3NpZD1mYTo3Yjo3YTo0Mjo4MjoxMyB1bmtub3duLW5ldHdvcmsgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX0lOVklUQVRJT05fUkVDRUlWRURfU1RSID0gIlAyUC1JTlZJVEFUSU9OLVJFQ0VJVkVEIjsKLQotICAgIC8qIFAyUC1JTlZJVEFUSU9OLVJFU1VMVCBzdGF0dXM9MSAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfSU5WSVRBVElPTl9SRVNVTFRfU1RSID0gIlAyUC1JTlZJVEFUSU9OLVJFU1VMVCI7Ci0KLSAgICAvKiBQMlAtUFJPVi1ESVNDLVBCQy1SRVEgNDI6ZmM6ODk6ZTE6ZTI6MjcgcDJwX2Rldl9hZGRyPTQyOmZjOjg5OmUxOmUyOjI3Ci0gICAgICAgcHJpX2Rldl90eXBlPTEtMDA1MEYyMDQtMSBuYW1lPSdwMnAtVEVTVDInIGNvbmZpZ19tZXRob2RzPTB4MTg4IGRldl9jYXBhYj0weDI3Ci0gICAgICAgZ3JvdXBfY2FwYWI9MHgwICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9QUk9WX0RJU0NfUEJDX1JFUV9TVFIgPSAiUDJQLVBST1YtRElTQy1QQkMtUkVRIjsKLQotICAgIC8qIFAyUC1QUk9WLURJU0MtUEJDLVJFU1AgMDI6MTI6NDc6ZjI6NWE6MzYgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX1BST1ZfRElTQ19QQkNfUlNQX1NUUiA9ICJQMlAtUFJPVi1ESVNDLVBCQy1SRVNQIjsKLQotICAgIC8qIFAyUC1QUk9WLURJU0MtRU5URVItUElOIDQyOmZjOjg5OmUxOmUyOjI3IHAycF9kZXZfYWRkcj00MjpmYzo4OTplMTplMjoyNwotICAgICAgIHByaV9kZXZfdHlwZT0xLTAwNTBGMjA0LTEgbmFtZT0ncDJwLVRFU1QyJyBjb25maWdfbWV0aG9kcz0weDE4OCBkZXZfY2FwYWI9MHgyNwotICAgICAgIGdyb3VwX2NhcGFiPTB4MCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQMlBfUFJPVl9ESVNDX0VOVEVSX1BJTl9TVFIgPSAiUDJQLVBST1YtRElTQy1FTlRFUi1QSU4iOwotICAgIC8qIFAyUC1QUk9WLURJU0MtU0hPVy1QSU4gNDI6ZmM6ODk6ZTE6ZTI6MjcgNDQ0OTA2MDcgcDJwX2Rldl9hZGRyPTQyOmZjOjg5OmUxOmUyOjI3Ci0gICAgICAgcHJpX2Rldl90eXBlPTEtMDA1MEYyMDQtMSBuYW1lPSdwMnAtVEVTVDInIGNvbmZpZ19tZXRob2RzPTB4MTg4IGRldl9jYXBhYj0weDI3Ci0gICAgICAgZ3JvdXBfY2FwYWI9MHgwICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9QUk9WX0RJU0NfU0hPV19QSU5fU1RSID0gIlAyUC1QUk9WLURJU0MtU0hPVy1QSU4iOwotICAgIC8qIFAyUC1QUk9WLURJU0MtRkFJTFVSRSBwMnBfZGV2X2FkZHI9NDI6ZmM6ODk6ZTE6ZTI6MjcgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUDJQX1BST1ZfRElTQ19GQUlMVVJFX1NUUiA9ICJQMlAtUFJPVi1ESVNDLUZBSUxVUkUiOwotCi0gICAgLyoKLSAgICAgKiBQcm90b2NvbCBmb3JtYXQgaXMgYXMgZm9sbG93cy48YnI+Ci0gICAgICogU2VlIHRoZSBUYWJsZS42MiBpbiB0aGUgV2lGaSBEaXJlY3Qgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGRldGFpbC4KLSAgICAgKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwotICAgICAqIHwgICAgICAgICAgIExlbmd0aCgyYnl0ZSkgICAgIHwgVHlwZSgxYnl0ZSkgfCBUcmFuc0lkKDFieXRlKX18Ci0gICAgICogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgICAgKiB8IHN0YXR1cygxYnl0ZSkgIHwgICAgICAgICAgICB2ZW5kb3Igc3BlY2lmaWModmFyaWFibGUpICAgICAgfAotICAgICAqCi0gICAgICogUDJQLVNFUlYtRElTQy1SRVNQIDQyOmZjOjg5OmUxOmUyOjI3IDEgMDMwMDAwMDEwMQotICAgICAqIGxlbmd0aD0zLCBzZXJ2aWNlIHR5cGU9MChBTEwgU2VydmljZSksIHRyYW5zYWN0aW9uIGlkPTEsCi0gICAgICogc3RhdHVzPTEoc2VydmljZSBwcm90b2NvbCB0eXBlIG5vdCBhdmFpbGFibGUpPGJyPgotICAgICAqCi0gICAgICogUDJQLVNFUlYtRElTQy1SRVNQIDQyOmZjOjg5OmUxOmUyOjI3IDEgMDMwMDAyMDIwMQotICAgICAqIGxlbmd0aD0zLCBzZXJ2aWNlIHR5cGU9MihVUG5QKSwgdHJhbnNhY3Rpb24gaWQ9MiwKLSAgICAgKiBzdGF0dXM9MShzZXJ2aWNlIHByb3RvY29sIHR5cGUgbm90IGF2YWlsYWJsZSkKLSAgICAgKgotICAgICAqIFAyUC1TRVJWLURJU0MtUkVTUCA0MjpmYzo4OTplMTplMjoyNyAxIDk5MDAwMjAzMDAxMDc1NzU2OTY0M2EzMTMxMzIzCi0gICAgICogMjY0NjUzNDY1MmQzODM1MzczNDJkMzUzOTYxNjIyZDM5MzMzMjMyMmQzMzMzMzMzNDM1MzYzNzM4MzkzMDM0MzQzYTMKLSAgICAgKiBhNzU3MjZlM2E3MzYzNjg2NTZkNjE3MzJkNzU3MDZlNzAyZDZmNzI2NzNhNzM2NTcyNzY2OTYzNjUzYTQzNmY2ZTc0NgotICAgICAqIDU2ZTc0NDQ2OTcyNjU2Mzc0NmY3Mjc5M2EzMjJjNzU3NTY5NjQzYTM2MzgzNTM5NjQ2NTY0NjUyZDM4MzUzNzM0MmQzCi0gICAgICogNTM5NjE2MjJkMzkzMzMzMzIyZDMxMzIzMzM0MzUzNjM3MzgzOTMwMzEzMjNhM2E3NTcwNmU3MDNhNzI2ZjZmNzQ2NDYKLSAgICAgKiA1NzY2OTYzNjUKLSAgICAgKiBsZW5ndGg9MTUzLHR5cGU9MihVUG5QKSx0cmFuc2FjdGlvbiBpZD0zLHN0YXR1cz0wCi0gICAgICoKLSAgICAgKiBVUG5QIFByb3RvY29sIGZvcm1hdCBpcyBhcyBmb2xsb3dzLgotICAgICAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwotICAgICAqIHwgIFZlcnNpb24gKDEpICB8ICAgICAgICAgIFVTTiAoVmFyaWFibGUpICAgICAgICAgICAgfAotICAgICAqCi0gICAgICogdmVyc2lvbj0weDEwKFVQblAxLjApIGRhdGE9dXNuOnV1aWQ6MTEyMmRlNGUtODU3NC01OWFiLTkzMjItMzMzNDU2NzgKLSAgICAgKiA5MDQ0Ojp1cm46c2NoZW1hcy11cG5wLW9yZzpzZXJ2aWNlOkNvbnRlbnREaXJlY3Rvcnk6Mix1c246dXVpZDo2ODU5ZAotICAgICAqIGVkZS04NTc0LTU5YWItOTMzMi0xMjM0NTY3ODkwMTI6OnVwbnA6cm9vdGRldmljZQotICAgICAqCi0gICAgICogUDJQLVNFUlYtRElTQy1SRVNQIDU4OjE3OjBjOmJjOmRkOmNhIDIxIDE5MDAwMTAyMDAwNDVmNjk3MAotICAgICAqIDcwYzAwYzAwMGMwMTA5NGQ3OTUwNzI2OTZlNzQ2NTcyYzAyNwotICAgICAqIGxlbmd0aD0yNSwgdHlwZT0xKEJvbmpvdXIpLHRyYW5zYWN0aW9uIGlkPTIsc3RhdHVzPTAKLSAgICAgKgotICAgICAqIEJvbmpvdXIgUHJvdG9jb2wgZm9ybWF0IGlzIGFzIGZvbGxvd3MuCi0gICAgICogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwotICAgICAqIHxETlMgTmFtZShWYXJpYWJsZSl8RE5TIFR5cGUoMSl8VmVyc2lvbigxKXxSREFUQShWYXJpYWJsZSl8Ci0gICAgICoKLSAgICAgKiBETlMgTmFtZT1faXBwLl90Y3AubG9jYWwuLEROUyB0eXBlPTEyKFBUUiksIFZlcnNpb249MSwKLSAgICAgKiBSREFUQT1NeVByaW50ZXIuX2lwcC5fdGNwLmxvY2FsLgotICAgICAqCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFAyUF9TRVJWX0RJU0NfUkVTUF9TVFIgPSAiUDJQLVNFUlYtRElTQy1SRVNQIjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIT1NUX0FQX0VWRU5UX1BSRUZJWF9TVFIgPSAiQVAiOwotICAgIC8qIEFQLVNUQS1DT05ORUNURUQgNDI6ZmM6ODk6YTg6OTY6MDkgZGV2X2FkZHI9MDI6OTA6NGM6YTA6OTI6NTQgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVBfU1RBX0NPTk5FQ1RFRF9TVFIgPSAiQVAtU1RBLUNPTk5FQ1RFRCI7Ci0gICAgLyogQVAtU1RBLURJU0NPTk5FQ1RFRCA0MjpmYzo4OTphODo5NjowOSAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBUF9TVEFfRElTQ09OTkVDVEVEX1NUUiA9ICJBUC1TVEEtRElTQ09OTkVDVEVEIjsKLQotICAgIC8qIFN1cHBsaWNhbnQgZXZlbnRzIHJlcG9ydGVkIHRvIGEgc3RhdGUgbWFjaGluZSAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCQVNFID0gUHJvdG9jb2wuQkFTRV9XSUZJX01PTklUT1I7Ci0KLSAgICAvKiBDb25uZWN0aW9uIHRvIHN1cHBsaWNhbnQgZXN0YWJsaXNoZWQgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBfQ09OTkVDVElPTl9FVkVOVCAgICAgICAgICAgICAgICAgPSBCQVNFICsgMTsKLSAgICAvKiBDb25uZWN0aW9uIHRvIHN1cHBsaWNhbnQgbG9zdCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUF9ESVNDT05ORUNUSU9OX0VWRU5UICAgICAgICAgICAgICA9IEJBU0UgKyAyOwotICAgLyogTmV0d29yayBjb25uZWN0aW9uIGNvbXBsZXRlZCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktfQ09OTkVDVElPTl9FVkVOVCAgICAgICAgICAgICA9IEJBU0UgKyAzOwotICAgIC8qIE5ldHdvcmsgZGlzY29ubmVjdGlvbiBjb21wbGV0ZWQgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLX0RJU0NPTk5FQ1RJT05fRVZFTlQgICAgICAgICAgPSBCQVNFICsgNDsKLSAgICAvKiBTY2FuIHJlc3VsdHMgYXJlIGF2YWlsYWJsZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNDQU5fUkVTVUxUU19FVkVOVCAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA1OwotICAgIC8qIFN1cHBsaWNhdGUgc3RhdGUgY2hhbmdlZCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UICAgICAgICA9IEJBU0UgKyA2OwotICAgIC8qIFBhc3N3b3JkIGZhaWx1cmUgYW5kIEVBUCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVCAgICAgICAgID0gQkFTRSArIDc7Ci0gICAgLyogV1BTIHN1Y2Nlc3MgZGV0ZWN0ZWQgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXUFNfU1VDQ0VTU19FVkVOVCAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgODsKLSAgICAvKiBXUFMgZmFpbHVyZSBkZXRlY3RlZCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdQU19GQUlMX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA5OwotICAgICAvKiBXUFMgb3ZlcmxhcCBkZXRlY3RlZCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdQU19PVkVSTEFQX0VWRU5UICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAxMDsKLSAgICAgLyogV1BTIHRpbWVvdXQgZGV0ZWN0ZWQgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXUFNfVElNRU9VVF9FVkVOVCAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMTE7Ci0gICAgLyogRHJpdmVyIHdhcyBodW5nICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSX0hVTkdfRVZFTlQgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDEyOwotCi0gICAgLyogUDJQIGV2ZW50cyAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9ERVZJQ0VfRk9VTkRfRVZFTlQgICAgICAgICAgICAgICA9IEJBU0UgKyAyMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfREVWSUNFX0xPU1RfRVZFTlQgICAgICAgICAgICAgICAgPSBCQVNFICsgMjI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX0dPX05FR09USUFUSU9OX1JFUVVFU1RfRVZFTlQgICAgID0gQkFTRSArIDIzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9HT19ORUdPVElBVElPTl9TVUNDRVNTX0VWRU5UICAgICA9IEJBU0UgKyAyNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfR09fTkVHT1RJQVRJT05fRkFJTFVSRV9FVkVOVCAgICAgPSBCQVNFICsgMjY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX0dST1VQX0ZPUk1BVElPTl9TVUNDRVNTX0VWRU5UICAgID0gQkFTRSArIDI3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9HUk9VUF9GT1JNQVRJT05fRkFJTFVSRV9FVkVOVCAgICA9IEJBU0UgKyAyODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfR1JPVVBfU1RBUlRFRF9FVkVOVCAgICAgICAgICAgICAgPSBCQVNFICsgMjk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX0dST1VQX1JFTU9WRURfRVZFTlQgICAgICAgICAgICAgID0gQkFTRSArIDMwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9JTlZJVEFUSU9OX1JFQ0VJVkVEX0VWRU5UICAgICAgICA9IEJBU0UgKyAzMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfSU5WSVRBVElPTl9SRVNVTFRfRVZFTlQgICAgICAgICAgPSBCQVNFICsgMzI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX1BST1ZfRElTQ19QQkNfUkVRX0VWRU5UICAgICAgICAgID0gQkFTRSArIDMzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9QUk9WX0RJU0NfUEJDX1JTUF9FVkVOVCAgICAgICAgICA9IEJBU0UgKyAzNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfUFJPVl9ESVNDX0VOVEVSX1BJTl9FVkVOVCAgICAgICAgPSBCQVNFICsgMzU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX1BST1ZfRElTQ19TSE9XX1BJTl9FVkVOVCAgICAgICAgID0gQkFTRSArIDM2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFAyUF9GSU5EX1NUT1BQRURfRVZFTlQgICAgICAgICAgICAgICA9IEJBU0UgKyAzNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQMlBfU0VSVl9ESVNDX1JFU1BfRVZFTlQgICAgICAgICAgICAgPSBCQVNFICsgMzg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX1BST1ZfRElTQ19GQUlMVVJFX0VWRU5UICAgICAgICAgID0gQkFTRSArIDM5OwotCi0gICAgLyogaG9zdGFwIGV2ZW50cyAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFQX1NUQV9ESVNDT05ORUNURURfRVZFTlQgICAgICAgICAgICA9IEJBU0UgKyA0MTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBUF9TVEFfQ09OTkVDVEVEX0VWRU5UICAgICAgICAgICAgICAgPSBCQVNFICsgNDI7Ci0KLSAgICAvKiBJbmRpY2F0ZXMgYXNzb2MgcmVqZWN0IGV2ZW50ICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVNTT0NJQVRJT05fUkVKRUNUSU9OX0VWRU5UICAgICAgICAgID0gQkFTRSArIDQzOwotICAgIC8qKgotICAgICAqIFRoaXMgaW5kaWNhdGVzIHRoZSBzdXBwbGljYW50IGNvbm5lY3Rpb24gZm9yIHRoZSBtb25pdG9yIGlzIGNsb3NlZAotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT05JVE9SX1NPQ0tFVF9DTE9TRURfU1RSID0gImNvbm5lY3Rpb24gY2xvc2VkIjsKLQotICAgIC8qKgotICAgICAqIFRoaXMgaW5kaWNhdGVzIGEgcmVhZCBlcnJvciBvbiB0aGUgbW9uaXRvciBzb2NrZXQgY29uZW5jdGlvbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXUEFfUkVDVl9FUlJPUl9TVFIgPSAicmVjdiBlcnJvciI7Ci0KLSAgICAvKioKLSAgICAgKiBNYXggZXJyb3JzIGJlZm9yZSB3ZSBjbG9zZSBzdXBwbGljYW50IGNvbm5lY3Rpb24KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1JFQ1ZfRVJST1JTICAgID0gMTA7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtSW50ZXJmYWNlTmFtZTsKLSAgICBwcml2YXRlIGZpbmFsIFdpZmlOYXRpdmUgbVdpZmlOYXRpdmU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdGF0ZU1hY2hpbmUgbVdpZmlTdGF0ZU1hY2hpbmU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Nb25pdG9yaW5nOwotCi0gICAgcHVibGljIFdpZmlNb25pdG9yKFN0YXRlTWFjaGluZSB3aWZpU3RhdGVNYWNoaW5lLCBXaWZpTmF0aXZlIHdpZmlOYXRpdmUpIHsKLSAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiQ3JlYXRpbmcgV2lmaU1vbml0b3IiKTsKLSAgICAgICAgbVdpZmlOYXRpdmUgPSB3aWZpTmF0aXZlOwotICAgICAgICBtSW50ZXJmYWNlTmFtZSA9IHdpZmlOYXRpdmUubUludGVyZmFjZU5hbWU7Ci0gICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lID0gd2lmaVN0YXRlTWFjaGluZTsKLSAgICAgICAgbU1vbml0b3JpbmcgPSBmYWxzZTsKLQotICAgICAgICBXaWZpTW9uaXRvclNpbmdsZXRvbi5nZXRNb25pdG9yKCkucmVnaXN0ZXJJbnRlcmZhY2VNb25pdG9yKG1JbnRlcmZhY2VOYW1lLCB0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzdGFydE1vbml0b3JpbmcoKSB7Ci0gICAgICAgIFdpZmlNb25pdG9yU2luZ2xldG9uLmdldE1vbml0b3IoKS5zdGFydE1vbml0b3JpbmcobUludGVyZmFjZU5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN0b3BNb25pdG9yaW5nKCkgewotICAgICAgICBXaWZpTW9uaXRvclNpbmdsZXRvbi5nZXRNb25pdG9yKCkuc3RvcE1vbml0b3JpbmcobUludGVyZmFjZU5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN0b3BTdXBwbGljYW50KCkgewotICAgICAgICBXaWZpTW9uaXRvclNpbmdsZXRvbi5nZXRNb25pdG9yKCkuc3RvcFN1cHBsaWNhbnQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBraWxsU3VwcGxpY2FudChib29sZWFuIHAycFN1cHBvcnRlZCkgewotICAgICAgICBXaWZpTW9uaXRvclNpbmdsZXRvbi5nZXRNb25pdG9yKCkua2lsbFN1cHBsaWNhbnQocDJwU3VwcG9ydGVkKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBXaWZpTW9uaXRvclNpbmdsZXRvbiB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIE9iamVjdCBzU2luZ2xldG9uTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgV2lmaU1vbml0b3JTaW5nbGV0b24gc1dpZmlNb25pdG9yU2luZ2xldG9uID0gbnVsbDsKLSAgICAgICAgcHJpdmF0ZSBIYXNoTWFwPFN0cmluZywgV2lmaU1vbml0b3I+IG1JZmFjZU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgV2lmaU1vbml0b3I+KCk7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBtQ29ubmVjdGVkID0gZmFsc2U7Ci0gICAgICAgIHByaXZhdGUgV2lmaU5hdGl2ZSBtV2lmaU5hdGl2ZTsKLQotICAgICAgICBwcml2YXRlIFdpZmlNb25pdG9yU2luZ2xldG9uKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIFdpZmlNb25pdG9yU2luZ2xldG9uIGdldE1vbml0b3IoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJXaWZpTW9uaXRvclNpbmdsZXRvbiBnb3R0ZW4iKTsKLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAoc1NpbmdsZXRvbkxvY2spIHsKLSAgICAgICAgICAgICAgICBpZiAoc1dpZmlNb25pdG9yU2luZ2xldG9uID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiV2lmaU1vbml0b3JTaW5nbGV0b24gY3JlYXRlZCIpOwotICAgICAgICAgICAgICAgICAgICBzV2lmaU1vbml0b3JTaW5nbGV0b24gPSBuZXcgV2lmaU1vbml0b3JTaW5nbGV0b24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc1dpZmlNb25pdG9yU2luZ2xldG9uOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0YXJ0TW9uaXRvcmluZyhTdHJpbmcgaWZhY2UpIHsKLSAgICAgICAgICAgIFdpZmlNb25pdG9yIG0gPSBtSWZhY2VNYXAuZ2V0KGlmYWNlKTsKLSAgICAgICAgICAgIGlmIChtID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJzdGFydE1vbml0b3IgY2FsbGVkIHdpdGggdW5rbm93biBpZmFjZT0iICsgaWZhY2UpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTG9nLmQoVEFHLCAic3RhcnRNb25pdG9yaW5nKCIgKyBpZmFjZSArICIpIHdpdGggbUNvbm5lY3RlZCA9ICIgKyBtQ29ubmVjdGVkKTsKLQotICAgICAgICAgICAgaWYgKG1Db25uZWN0ZWQpIHsKLSAgICAgICAgICAgICAgICBtLm1Nb25pdG9yaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBtLm1XaWZpU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFNVUF9DT05ORUNUSU9OX0VWRU5UKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiY29ubmVjdGluZyB0byBzdXBwbGljYW50Iik7Ci0gICAgICAgICAgICAgICAgaW50IGNvbm5lY3RUcmllcyA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLmNvbm5lY3RUb1N1cHBsaWNhbnQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbS5tTW9uaXRvcmluZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtLm1XaWZpU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFNVUF9DT05ORUNUSU9OX0VWRU5UKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBNb25pdG9yVGhyZWFkKG1XaWZpTmF0aXZlLCB0aGlzKS5zdGFydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbUNvbm5lY3RlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdFRyaWVzKysgPCA1KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGlnbm9yZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbUlmYWNlTWFwLnJlbW92ZShpZmFjZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtLm1XaWZpU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFNVUF9ESVNDT05ORUNUSU9OX0VWRU5UKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgInN0YXJ0TW9uaXRvcmluZygiICsgaWZhY2UgKyAiKSBmYWlsZWQhIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzdG9wTW9uaXRvcmluZyhTdHJpbmcgaWZhY2UpIHsKLSAgICAgICAgICAgIFdpZmlNb25pdG9yIG0gPSBtSWZhY2VNYXAuZ2V0KGlmYWNlKTsKLSAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgInN0b3BNb25pdG9yaW5nKCIgKyBpZmFjZSArICIpID0gIiArIG0ubVdpZmlTdGF0ZU1hY2hpbmUpOwotICAgICAgICAgICAgbS5tTW9uaXRvcmluZyA9IGZhbHNlOwotICAgICAgICAgICAgbS5tV2lmaVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShTVVBfRElTQ09OTkVDVElPTl9FVkVOVCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVnaXN0ZXJJbnRlcmZhY2VNb25pdG9yKFN0cmluZyBpZmFjZSwgV2lmaU1vbml0b3IgbSkgewotICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAicmVnaXN0ZXJJbnRlcmZhY2UoIiArIGlmYWNlICsgIisiICsgbS5tV2lmaVN0YXRlTWFjaGluZSArICIpIik7Ci0gICAgICAgICAgICBtSWZhY2VNYXAucHV0KGlmYWNlLCBtKTsKLSAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUgPSBtLm1XaWZpTmF0aXZlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHVucmVnaXN0ZXJJbnRlcmZhY2VNb25pdG9yKFN0cmluZyBpZmFjZSkgewotICAgICAgICAgICAgLy8gUkVWSUVXOiBXaGVuIHNob3VsZCB3ZSBjYWxsIHRoaXM/IElmIHRoaXMgaXNuJ3QgY2FsbGVkLCB0aGVuIFdpZmlNb25pdG9yCi0gICAgICAgICAgICAvLyBvYmplY3RzIHdpbGwgcmVtYWluIGluIHRoZSBtSWZhY2VNYXA7IGFuZCB3b24ndCBldmVyIGdldCBkZWxldGVkCi0KLSAgICAgICAgICAgIFdpZmlNb25pdG9yIG0gPSBtSWZhY2VNYXAucmVtb3ZlKGlmYWNlKTsKLSAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgInVucmVnaXN0ZXJJbnRlcmZhY2UoIiArIGlmYWNlICsgIisiICsgbS5tV2lmaVN0YXRlTWFjaGluZSArICIpIik7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc3RvcFN1cHBsaWNhbnQoKSB7Ci0gICAgICAgICAgICBtV2lmaU5hdGl2ZS5zdG9wU3VwcGxpY2FudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGtpbGxTdXBwbGljYW50KGJvb2xlYW4gcDJwU3VwcG9ydGVkKSB7Ci0gICAgICAgICAgICBtV2lmaU5hdGl2ZS5raWxsU3VwcGxpY2FudChwMnBTdXBwb3J0ZWQpOwotICAgICAgICAgICAgbUNvbm5lY3RlZCA9IGZhbHNlOwotICAgICAgICAgICAgSXRlcmF0b3I8TWFwLkVudHJ5PFN0cmluZywgV2lmaU1vbml0b3I+PiBpdCA9IG1JZmFjZU1hcC5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgTWFwLkVudHJ5PFN0cmluZywgV2lmaU1vbml0b3I+IGUgPSBpdC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgV2lmaU1vbml0b3IgbSA9IGUuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBtLm1Nb25pdG9yaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN5bmNocm9uaXplZCBXaWZpTW9uaXRvciBnZXRNb25pdG9yKFN0cmluZyBpZmFjZSkgewotICAgICAgICAgICAgcmV0dXJuIG1JZmFjZU1hcC5nZXQoaWZhY2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTW9uaXRvclRocmVhZCBleHRlbmRzIFRocmVhZCB7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgV2lmaU5hdGl2ZSBtV2lmaU5hdGl2ZTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBXaWZpTW9uaXRvclNpbmdsZXRvbiBtV2lmaU1vbml0b3JTaW5nbGV0b247Ci0gICAgICAgIHByaXZhdGUgaW50IG1SZWN2RXJyb3JzID0gMDsKLSAgICAgICAgcHJpdmF0ZSBTdGF0ZU1hY2hpbmUgbVN0YXRlTWFjaGluZSA9IG51bGw7Ci0KLSAgICAgICAgcHVibGljIE1vbml0b3JUaHJlYWQoV2lmaU5hdGl2ZSB3aWZpTmF0aXZlLCBXaWZpTW9uaXRvclNpbmdsZXRvbiB3aWZpTW9uaXRvclNpbmdsZXRvbikgewotICAgICAgICAgICAgc3VwZXIoIldpZmlNb25pdG9yIik7Ci0gICAgICAgICAgICBtV2lmaU5hdGl2ZSA9IHdpZmlOYXRpdmU7Ci0gICAgICAgICAgICBtV2lmaU1vbml0b3JTaW5nbGV0b24gPSB3aWZpTW9uaXRvclNpbmdsZXRvbjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIEluZmluaXRlTG9vcFN0YXRlbWVudAotICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgIFN0cmluZyBldmVudFN0ciA9IG1XaWZpTmF0aXZlLndhaXRGb3JFdmVudCgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2tpcCBsb2dnaW5nIHRoZSBjb21tb24gYnV0IG1vc3RseSB1bmludGVyZXN0aW5nIHNjYW4tcmVzdWx0cyBldmVudAotICAgICAgICAgICAgICAgIGlmIChEQkcgJiYgZXZlbnRTdHIuaW5kZXhPZihTQ0FOX1JFU1VMVFNfU1RSKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJFdmVudCBbIiArIGV2ZW50U3RyICsgIl0iKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcgaWZhY2UgPSAicDJwMCI7Ci0gICAgICAgICAgICAgICAgV2lmaU1vbml0b3IgbSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZSA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZXZlbnRTdHIuc3RhcnRzV2l0aCgiSUZOQU1FPSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBzcGFjZSA9IGV2ZW50U3RyLmluZGV4T2YoJyAnKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNwYWNlICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZmFjZSA9IGV2ZW50U3RyLnN1YnN0cmluZyg3LHNwYWNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBtV2lmaU1vbml0b3JTaW5nbGV0b24uZ2V0TW9uaXRvcihpZmFjZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSA9PSBudWxsICYmIGlmYWNlLnN0YXJ0c1dpdGgoInAycC0iKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHAycCBpbnRlcmZhY2VzIGFyZSBjcmVhdGVkIGR5bmFtaWNhbGx5LCBidXQgd2UgaGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgb25lIFAycCBzdGF0ZSBtYWNoaW5lIG1vbml0b3JpbmcgYWxsIG9mIHRoZW07IGxvb2sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgaXQgZXhwbGljaXRseSwgYW5kIHNlbmQgbWVzc2FnZXMgdGhlcmUgLi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gbVdpZmlNb25pdG9yU2luZ2xldG9uLmdldE1vbml0b3IoInAycDAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50U3RyID0gZXZlbnRTdHIuc3Vic3RyaW5nKHNwYWNlICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBldmVudHMgd2l0aG91dCBwcmVmaXggYmVsb25nIHRvIHAycDAgbW9uaXRvcgotICAgICAgICAgICAgICAgICAgICBtID0gbVdpZmlNb25pdG9yU2luZ2xldG9uLmdldE1vbml0b3IoInAycDAiKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtLm1Nb25pdG9yaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lID0gbS5tV2lmaVN0YXRlTWFjaGluZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIkRyb3BwaW5nIGV2ZW50IGJlY2F1c2UgbW9uaXRvciAoIiArIGlmYWNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikgaXMgc3RvcHBlZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobVN0YXRlTWFjaGluZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkaXNwYXRjaEV2ZW50KGV2ZW50U3RyKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJTZW5kaW5nIHRvIGFsbCBtb25pdG9ycyBiZWNhdXNlIHRoZXJlJ3Mgbm8gaW50ZXJmYWNlIGlkIik7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZG9uZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBJdGVyYXRvcjxNYXAuRW50cnk8U3RyaW5nLCBXaWZpTW9uaXRvcj4+IGl0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU1vbml0b3JTaW5nbGV0b24ubUlmYWNlTWFwLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTWFwLkVudHJ5PFN0cmluZywgV2lmaU1vbml0b3I+IGUgPSBpdC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtID0gZS5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZSA9IG0ubVdpZmlTdGF0ZU1hY2hpbmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcGF0Y2hFdmVudChldmVudFN0cikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZnRlciB0aGlzIHRocmVhZCB0ZXJtaW5hdGVzLCB3ZSdsbCBubyBsb25nZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIGNvbm5lY3RlZCB0byB0aGUgc3VwcGxpY2FudAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiRGlzY29ubmVjdGluZyBmcm9tIHRoZSBzdXBwbGljYW50LCBubyBtb3JlIGV2ZW50cyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlNb25pdG9yU2luZ2xldG9uLm1Db25uZWN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyogQHJldHVybiB0cnVlIGlmIHRoZSBldmVudCB3YXMgc3VwcGxpY2FudCBkaXNjb25uZWN0aW9uICovCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KFN0cmluZyBldmVudFN0cikgewotCi0gICAgICAgICAgICBpZiAoIWV2ZW50U3RyLnN0YXJ0c1dpdGgoRVZFTlRfUFJFRklYX1NUUikpIHsKLSAgICAgICAgICAgICAgICBpZiAoZXZlbnRTdHIuc3RhcnRzV2l0aChXUEFfRVZFTlRfUFJFRklYX1NUUikgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIDAgPCBldmVudFN0ci5pbmRleE9mKFBBU1NXT1JEX01BWV9CRV9JTkNPUlJFQ1RfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKEFVVEhFTlRJQ0FUSU9OX0ZBSUxVUkVfRVZFTlQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRTdHIuc3RhcnRzV2l0aChXUFNfU1VDQ0VTU19TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoV1BTX1NVQ0NFU1NfRVZFTlQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRTdHIuc3RhcnRzV2l0aChXUFNfRkFJTF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZVdwc0ZhaWxFdmVudChldmVudFN0cik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFN0ci5zdGFydHNXaXRoKFdQU19PVkVSTEFQX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShXUFNfT1ZFUkxBUF9FVkVOVCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFN0ci5zdGFydHNXaXRoKFdQU19USU1FT1VUX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShXUFNfVElNRU9VVF9FVkVOVCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFN0ci5zdGFydHNXaXRoKFAyUF9FVkVOVF9QUkVGSVhfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICBoYW5kbGVQMnBFdmVudHMoZXZlbnRTdHIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRTdHIuc3RhcnRzV2l0aChIT1NUX0FQX0VWRU5UX1BSRUZJWF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZUhvc3RBcEV2ZW50cyhldmVudFN0cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBMb2cudyhUQUcsICJjb3VsZG4ndCBpZGVudGlmeSBldmVudCB0eXBlIC0gIiArIGV2ZW50U3RyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcgZXZlbnROYW1lID0gZXZlbnRTdHIuc3Vic3RyaW5nKEVWRU5UX1BSRUZJWF9MRU5fU1RSKTsKLSAgICAgICAgICAgIGludCBuYW1lRW5kID0gZXZlbnROYW1lLmluZGV4T2YoJyAnKTsKLSAgICAgICAgICAgIGlmIChuYW1lRW5kICE9IC0xKQotICAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9IGV2ZW50TmFtZS5zdWJzdHJpbmcoMCwgbmFtZUVuZCk7Ci0gICAgICAgICAgICBpZiAoZXZlbnROYW1lLmxlbmd0aCgpID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoREJHKSBMb2cuaShUQUcsICJSZWNlaXZlZCB3cGFfc3VwcGxpY2FudCBldmVudCB3aXRoIGVtcHR5IGV2ZW50IG5hbWUiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogTWFwIGV2ZW50IG5hbWUgaW50byBldmVudCBlbnVtCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGludCBldmVudDsKLSAgICAgICAgICAgIGlmIChldmVudE5hbWUuZXF1YWxzKENPTk5FQ1RFRF9TVFIpKQotICAgICAgICAgICAgICAgIGV2ZW50ID0gQ09OTkVDVEVEOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lLmVxdWFscyhESVNDT05ORUNURURfU1RSKSkKLSAgICAgICAgICAgICAgICBldmVudCA9IERJU0NPTk5FQ1RFRDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZS5lcXVhbHMoU1RBVEVfQ0hBTkdFX1NUUikpCi0gICAgICAgICAgICAgICAgZXZlbnQgPSBTVEFURV9DSEFOR0U7Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudE5hbWUuZXF1YWxzKFNDQU5fUkVTVUxUU19TVFIpKQotICAgICAgICAgICAgICAgIGV2ZW50ID0gU0NBTl9SRVNVTFRTOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lLmVxdWFscyhMSU5LX1NQRUVEX1NUUikpCi0gICAgICAgICAgICAgICAgZXZlbnQgPSBMSU5LX1NQRUVEOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lLmVxdWFscyhURVJNSU5BVElOR19TVFIpKQotICAgICAgICAgICAgICAgIGV2ZW50ID0gVEVSTUlOQVRJTkc7Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudE5hbWUuZXF1YWxzKERSSVZFUl9TVEFURV9TVFIpKQotICAgICAgICAgICAgICAgIGV2ZW50ID0gRFJJVkVSX1NUQVRFOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lLmVxdWFscyhFQVBfRkFJTFVSRV9TVFIpKQotICAgICAgICAgICAgICAgIGV2ZW50ID0gRUFQX0ZBSUxVUkU7Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudE5hbWUuZXF1YWxzKEFTU09DX1JFSkVDVF9TVFIpKQotICAgICAgICAgICAgICAgIGV2ZW50ID0gQVNTT0NfUkVKRUNUOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGV2ZW50ID0gVU5LTk9XTjsKLQotICAgICAgICAgICAgU3RyaW5nIGV2ZW50RGF0YSA9IGV2ZW50U3RyOwotICAgICAgICAgICAgaWYgKGV2ZW50ID09IERSSVZFUl9TVEFURSB8fCBldmVudCA9PSBMSU5LX1NQRUVEKQotICAgICAgICAgICAgICAgIGV2ZW50RGF0YSA9IGV2ZW50RGF0YS5zcGxpdCgiICIpWzFdOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQgPT0gU1RBVEVfQ0hBTkdFIHx8IGV2ZW50ID09IEVBUF9GQUlMVVJFKSB7Ci0gICAgICAgICAgICAgICAgaW50IGluZCA9IGV2ZW50U3RyLmluZGV4T2YoIiAiKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5kICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50RGF0YSA9IGV2ZW50U3RyLnN1YnN0cmluZyhpbmQgKyAxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGludCBpbmQgPSBldmVudFN0ci5pbmRleE9mKCIgLSAiKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5kICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50RGF0YSA9IGV2ZW50U3RyLnN1YnN0cmluZyhpbmQgKyAzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChldmVudCA9PSBTVEFURV9DSEFOR0UpIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVTdXBwbGljYW50U3RhdGVDaGFuZ2UoZXZlbnREYXRhKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gRFJJVkVSX1NUQVRFKSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlRHJpdmVyRXZlbnQoZXZlbnREYXRhKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gVEVSTUlOQVRJTkcpIHsKLSAgICAgICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgKiBDbG9zZSB0aGUgc3VwcGxpY2FudCBjb25uZWN0aW9uIGlmIHdlIHNlZQotICAgICAgICAgICAgICAgICAqIHRvbyBtYW55IHJlY3YgZXJyb3JzCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKGV2ZW50RGF0YS5zdGFydHNXaXRoKFdQQV9SRUNWX0VSUk9SX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCsrbVJlY3ZFcnJvcnMgPiBNQVhfUkVDVl9FUlJPUlMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJ0b28gbWFueSByZWN2IGVycm9ycywgY2xvc2luZyBjb25uZWN0aW9uIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBub3RpZnkgYW5kIGV4aXQKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFNVUF9ESVNDT05ORUNUSU9OX0VWRU5UKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gRUFQX0ZBSUxVUkUpIHsKLSAgICAgICAgICAgICAgICBpZiAoZXZlbnREYXRhLnN0YXJ0c1dpdGgoRUFQX0FVVEhfRkFJTFVSRV9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PSBBU1NPQ19SRUpFQ1QpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKEFTU09DSUFUSU9OX1JFSkVDVElPTl9FVkVOVCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGhhbmRsZUV2ZW50KGV2ZW50LCBldmVudERhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVJlY3ZFcnJvcnMgPSAwOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZURyaXZlckV2ZW50KFN0cmluZyBzdGF0ZSkgewotICAgICAgICAgICAgaWYgKHN0YXRlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3RhdGUuZXF1YWxzKCJIQU5HRUQiKSkgewotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoRFJJVkVSX0hVTkdfRVZFTlQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEhhbmRsZSBhbGwgc3VwcGxpY2FudCBldmVudHMgZXhjZXB0IFNUQVRFLUNIQU5HRQotICAgICAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50IHR5cGUKLSAgICAgICAgICogQHBhcmFtIHJlbWFpbmRlciB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIGZvbGxvd2luZyB0aGUKLSAgICAgICAgICogZXZlbnQgbmFtZSBhbmQgJnF1b3Q7JiM4MTk1OyYjODIxMjsmIzgxOTU7JnF1b3Q7Ci0gICAgICAgICAqLwotICAgICAgICB2b2lkIGhhbmRsZUV2ZW50KGludCBldmVudCwgU3RyaW5nIHJlbWFpbmRlcikgewotICAgICAgICAgICAgc3dpdGNoIChldmVudCkgewotICAgICAgICAgICAgICAgIGNhc2UgRElTQ09OTkVDVEVEOgotICAgICAgICAgICAgICAgICAgICBoYW5kbGVOZXR3b3JrU3RhdGVDaGFuZ2UoTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZS5ESVNDT05ORUNURUQsIHJlbWFpbmRlcik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBDT05ORUNURUQ6Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtTdGF0ZUNoYW5nZShOZXR3b3JrSW5mby5EZXRhaWxlZFN0YXRlLkNPTk5FQ1RFRCwgcmVtYWluZGVyKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFNDQU5fUkVTVUxUUzoKLSAgICAgICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShTQ0FOX1JFU1VMVFNfRVZFTlQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgVU5LTk9XTjoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgaGFuZGxlV3BzRmFpbEV2ZW50KFN0cmluZyBkYXRhU3RyaW5nKSB7Ci0gICAgICAgICAgICBmaW5hbCBQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoV1BTX0ZBSUxfUEFUVEVSTik7Ci0gICAgICAgICAgICBNYXRjaGVyIG1hdGNoID0gcC5tYXRjaGVyKGRhdGFTdHJpbmcpOwotICAgICAgICAgICAgaWYgKG1hdGNoLmZpbmQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBjZmdFcnIgPSBtYXRjaC5ncm91cCgxKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcmVhc29uID0gbWF0Y2guZ3JvdXAoMik7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVhc29uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKEludGVnZXIucGFyc2VJbnQocmVhc29uKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSRUFTT05fVEtJUF9PTkxZX1BST0hJQklURUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShtU3RhdGVNYWNoaW5lLm9idGFpbk1lc3NhZ2UoV1BTX0ZBSUxfRVZFTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5XUFNfVEtJUF9PTkxZX1BST0hJQklURUQsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJFQVNPTl9XRVBfUFJPSElCSVRFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKG1TdGF0ZU1hY2hpbmUub2J0YWluTWVzc2FnZShXUFNfRkFJTF9FVkVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLldQU19XRVBfUFJPSElCSVRFRCwgMCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2ZnRXJyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKEludGVnZXIucGFyc2VJbnQoY2ZnRXJyKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDT05GSUdfQVVUSF9GQUlMVVJFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UobVN0YXRlTWFjaGluZS5vYnRhaW5NZXNzYWdlKFdQU19GQUlMX0VWRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuV1BTX0FVVEhfRkFJTFVSRSwgMCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09ORklHX01VTFRJUExFX1BCQ19ERVRFQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKG1TdGF0ZU1hY2hpbmUub2J0YWluTWVzc2FnZShXUFNfRkFJTF9FVkVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLldQU19PVkVSTEFQX0VSUk9SLCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy9Gb3IgYWxsIG90aGVyIGVycm9ycywgcmV0dXJuIGEgZ2VuZXJpYyBpbnRlcm5hbCBlcnJvcgotICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShtU3RhdGVNYWNoaW5lLm9idGFpbk1lc3NhZ2UoV1BTX0ZBSUxfRVZFTlQsCi0gICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVSUk9SLCAwKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiA8ZXZlbnQ+IHN0YXR1cz08ZXJyPiBhbmQgdGhlIHNwZWNpYWwgY2FzZSBvZiA8ZXZlbnQ+IHJlYXNvbj1GUkVRX0NPTkZMSUNUICovCi0gICAgICAgIHByaXZhdGUgUDJwU3RhdHVzIHAycEVycm9yKFN0cmluZyBkYXRhU3RyaW5nKSB7Ci0gICAgICAgICAgICBQMnBTdGF0dXMgZXJyID0gUDJwU3RhdHVzLlVOS05PV047Ci0gICAgICAgICAgICBTdHJpbmdbXSB0b2tlbnMgPSBkYXRhU3RyaW5nLnNwbGl0KCIgIik7Ci0gICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA8IDIpIHJldHVybiBlcnI7Ci0gICAgICAgICAgICBTdHJpbmdbXSBuYW1lVmFsdWUgPSB0b2tlbnNbMV0uc3BsaXQoIj0iKTsKLSAgICAgICAgICAgIGlmIChuYW1lVmFsdWUubGVuZ3RoICE9IDIpIHJldHVybiBlcnI7Ci0KLSAgICAgICAgICAgIC8qIEhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIHJlYXNvbj1GUkVRK0NPTkZMSUNUICovCi0gICAgICAgICAgICBpZiAobmFtZVZhbHVlWzFdLmVxdWFscygiRlJFUV9DT05GTElDVCIpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFAycFN0YXR1cy5OT19DT01NT05fQ0hBTk5FTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgZXJyID0gUDJwU3RhdHVzLnZhbHVlT2YoSW50ZWdlci5wYXJzZUludChuYW1lVmFsdWVbMV0pKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogSGFuZGxlIHAycCBldmVudHMKLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVQMnBFdmVudHMoU3RyaW5nIGRhdGFTdHJpbmcpIHsKLSAgICAgICAgICAgIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0RFVklDRV9GT1VORF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfREVWSUNFX0ZPVU5EX0VWRU5ULCBuZXcgV2lmaVAycERldmljZShkYXRhU3RyaW5nKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfREVWSUNFX0xPU1RfU1RSKSkgewotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX0RFVklDRV9MT1NUX0VWRU5ULCBuZXcgV2lmaVAycERldmljZShkYXRhU3RyaW5nKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfRklORF9TVE9QUEVEX1NUUikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9GSU5EX1NUT1BQRURfRVZFTlQpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0dPX05FR19SRVFVRVNUX1NUUikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9HT19ORUdPVElBVElPTl9SRVFVRVNUX0VWRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZmlQMnBDb25maWcoZGF0YVN0cmluZykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0dPX05FR19TVUNDRVNTX1NUUikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9HT19ORUdPVElBVElPTl9TVUNDRVNTX0VWRU5UKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9HT19ORUdfRkFJTFVSRV9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfR09fTkVHT1RJQVRJT05fRkFJTFVSRV9FVkVOVCwgcDJwRXJyb3IoZGF0YVN0cmluZykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0dST1VQX0ZPUk1BVElPTl9TVUNDRVNTX1NUUikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9HUk9VUF9GT1JNQVRJT05fU1VDQ0VTU19FVkVOVCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfR1JPVVBfRk9STUFUSU9OX0ZBSUxVUkVfU1RSKSkgewotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX0dST1VQX0ZPUk1BVElPTl9GQUlMVVJFX0VWRU5ULCBwMnBFcnJvcihkYXRhU3RyaW5nKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfR1JPVVBfU1RBUlRFRF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfR1JPVVBfU1RBUlRFRF9FVkVOVCwgbmV3IFdpZmlQMnBHcm91cChkYXRhU3RyaW5nKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfR1JPVVBfUkVNT1ZFRF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfR1JPVVBfUkVNT1ZFRF9FVkVOVCwgbmV3IFdpZmlQMnBHcm91cChkYXRhU3RyaW5nKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfSU5WSVRBVElPTl9SRUNFSVZFRF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShQMlBfSU5WSVRBVElPTl9SRUNFSVZFRF9FVkVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWZpUDJwR3JvdXAoZGF0YVN0cmluZykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX0lOVklUQVRJT05fUkVTVUxUX1NUUikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9JTlZJVEFUSU9OX1JFU1VMVF9FVkVOVCwgcDJwRXJyb3IoZGF0YVN0cmluZykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhU3RyaW5nLnN0YXJ0c1dpdGgoUDJQX1BST1ZfRElTQ19QQkNfUkVRX1NUUikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9QUk9WX0RJU0NfUEJDX1JFUV9FVkVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWZpUDJwUHJvdkRpc2NFdmVudChkYXRhU3RyaW5nKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfUFJPVl9ESVNDX1BCQ19SU1BfU1RSKSkgewotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX1BST1ZfRElTQ19QQkNfUlNQX0VWRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZmlQMnBQcm92RGlzY0V2ZW50KGRhdGFTdHJpbmcpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9QUk9WX0RJU0NfRU5URVJfUElOX1NUUikpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKFAyUF9QUk9WX0RJU0NfRU5URVJfUElOX0VWRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdpZmlQMnBQcm92RGlzY0V2ZW50KGRhdGFTdHJpbmcpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9QUk9WX0RJU0NfU0hPV19QSU5fU1RSKSkgewotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX1BST1ZfRElTQ19TSE9XX1BJTl9FVkVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaWZpUDJwUHJvdkRpc2NFdmVudChkYXRhU3RyaW5nKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFTdHJpbmcuc3RhcnRzV2l0aChQMlBfUFJPVl9ESVNDX0ZBSUxVUkVfU1RSKSkgewotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX1BST1ZfRElTQ19GQUlMVVJFX0VWRU5UKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVN0cmluZy5zdGFydHNXaXRoKFAyUF9TRVJWX0RJU0NfUkVTUF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgTGlzdDxXaWZpUDJwU2VydmljZVJlc3BvbnNlPiBsaXN0ID0gV2lmaVAycFNlcnZpY2VSZXNwb25zZS5uZXdJbnN0YW5jZShkYXRhU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBpZiAobGlzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoUDJQX1NFUlZfRElTQ19SRVNQX0VWRU5ULCBsaXN0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJOdWxsIHNlcnZpY2UgcmVzcCAiICsgZGF0YVN0cmluZyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEhhbmRsZSBob3N0YXAgZXZlbnRzCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIHZvaWQgaGFuZGxlSG9zdEFwRXZlbnRzKFN0cmluZyBkYXRhU3RyaW5nKSB7Ci0gICAgICAgICAgICBTdHJpbmdbXSB0b2tlbnMgPSBkYXRhU3RyaW5nLnNwbGl0KCIgIik7Ci0gICAgICAgICAgICAvKiBBUC1TVEEtQ09OTkVDVEVEIDQyOmZjOjg5OmE4Ojk2OjA5IHAycF9kZXZfYWRkcj0wMjo5MDo0YzphMDo5Mjo1NCAqLwotICAgICAgICAgICAgaWYgKHRva2Vuc1swXS5lcXVhbHMoQVBfU1RBX0NPTk5FQ1RFRF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShBUF9TVEFfQ09OTkVDVEVEX0VWRU5ULCBuZXcgV2lmaVAycERldmljZShkYXRhU3RyaW5nKSk7Ci0gICAgICAgICAgICAvKiBBUC1TVEEtRElTQ09OTkVDVEVEIDQyOmZjOjg5OmE4Ojk2OjA5IHAycF9kZXZfYWRkcj0wMjo5MDo0YzphMDo5Mjo1NCAqLwotICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbnNbMF0uZXF1YWxzKEFQX1NUQV9ESVNDT05ORUNURURfU1RSKSkgewotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoQVBfU1RBX0RJU0NPTk5FQ1RFRF9FVkVOVCwgbmV3IFdpZmlQMnBEZXZpY2UoZGF0YVN0cmluZykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEhhbmRsZSB0aGUgc3VwcGxpY2FudCBTVEFURS1DSEFOR0UgZXZlbnQKLSAgICAgICAgICogQHBhcmFtIGRhdGFTdHJpbmcgTmV3IHN1cHBsaWNhbnQgc3RhdGUgc3RyaW5nIGluIHRoZSBmb3JtYXQ6Ci0gICAgICAgICAqIGlkPW5ldHdvcmstaWQgc3RhdGU9bmV3LXN0YXRlCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIHZvaWQgaGFuZGxlU3VwcGxpY2FudFN0YXRlQ2hhbmdlKFN0cmluZyBkYXRhU3RyaW5nKSB7Ci0gICAgICAgICAgICBXaWZpU3NpZCB3aWZpU3NpZCA9IG51bGw7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBkYXRhU3RyaW5nLmxhc3RJbmRleE9mKCJTU0lEPSIpOwotICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgd2lmaVNzaWQgPSBXaWZpU3NpZC5jcmVhdGVGcm9tQXNjaWlFbmNvZGVkKAotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVN0cmluZy5zdWJzdHJpbmcoaW5kZXggKyA1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmdbXSBkYXRhVG9rZW5zID0gZGF0YVN0cmluZy5zcGxpdCgiICIpOwotCi0gICAgICAgICAgICBTdHJpbmcgQlNTSUQgPSBudWxsOwotICAgICAgICAgICAgaW50IG5ldHdvcmtJZCA9IC0xOwotICAgICAgICAgICAgaW50IG5ld1N0YXRlICA9IC0xOwotICAgICAgICAgICAgZm9yIChTdHJpbmcgdG9rZW4gOiBkYXRhVG9rZW5zKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nW10gbmFtZVZhbHVlID0gdG9rZW4uc3BsaXQoIj0iKTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZVZhbHVlLmxlbmd0aCAhPSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChuYW1lVmFsdWVbMF0uZXF1YWxzKCJCU1NJRCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEJTU0lEID0gbmFtZVZhbHVlWzFdOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpbnQgdmFsdWU7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBJbnRlZ2VyLnBhcnNlSW50KG5hbWVWYWx1ZVsxXSk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG5hbWVWYWx1ZVswXS5lcXVhbHMoImlkIikpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV0d29ya0lkID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lVmFsdWVbMF0uZXF1YWxzKCJzdGF0ZSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmV3U3RhdGUgPT0gLTEpIHJldHVybjsKLQotICAgICAgICAgICAgU3VwcGxpY2FudFN0YXRlIG5ld1N1cHBsaWNhbnRTdGF0ZSA9IFN1cHBsaWNhbnRTdGF0ZS5JTlZBTElEOwotICAgICAgICAgICAgZm9yIChTdXBwbGljYW50U3RhdGUgc3RhdGUgOiBTdXBwbGljYW50U3RhdGUudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUub3JkaW5hbCgpID09IG5ld1N0YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1N1cHBsaWNhbnRTdGF0ZSA9IHN0YXRlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobmV3U3VwcGxpY2FudFN0YXRlID09IFN1cHBsaWNhbnRTdGF0ZS5JTlZBTElEKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiSW52YWxpZCBzdXBwbGljYW50IHN0YXRlOiAiICsgbmV3U3RhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbm90aWZ5U3VwcGxpY2FudFN0YXRlQ2hhbmdlKG5ldHdvcmtJZCwgd2lmaVNzaWQsIEJTU0lELCBuZXdTdXBwbGljYW50U3RhdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZU5ldHdvcmtTdGF0ZUNoYW5nZShOZXR3b3JrSW5mby5EZXRhaWxlZFN0YXRlIG5ld1N0YXRlLCBTdHJpbmcgZGF0YSkgewotICAgICAgICAgICAgU3RyaW5nIEJTU0lEID0gbnVsbDsKLSAgICAgICAgICAgIGludCBuZXR3b3JrSWQgPSAtMTsKLSAgICAgICAgICAgIGlmIChuZXdTdGF0ZSA9PSBOZXR3b3JrSW5mby5EZXRhaWxlZFN0YXRlLkNPTk5FQ1RFRCkgewotICAgICAgICAgICAgICAgIE1hdGNoZXIgbWF0Y2ggPSBtQ29ubmVjdGVkRXZlbnRQYXR0ZXJuLm1hdGNoZXIoZGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtYXRjaC5maW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgTG9nLmQoVEFHLCAiQ291bGQgbm90IGZpbmQgQlNTSUQgaW4gQ09OTkVDVEVEIGV2ZW50IHN0cmluZyIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEJTU0lEID0gbWF0Y2guZ3JvdXAoMSk7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrSWQgPSBJbnRlZ2VyLnBhcnNlSW50KG1hdGNoLmdyb3VwKDIpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtJZCA9IC0xOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vdGlmeU5ldHdvcmtTdGF0ZUNoYW5nZShuZXdTdGF0ZSwgQlNTSUQsIG5ldHdvcmtJZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2VuZCB0aGUgc3RhdGUgbWFjaGluZSBhIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBzdGF0ZSBvZiBXaWZpIGNvbm5lY3Rpdml0eQotICAgICAgICAgKiBoYXMgY2hhbmdlZC4KLSAgICAgICAgICogQHBhcmFtIG5ldHdvcmtJZCB0aGUgY29uZmlndXJlZCBuZXR3b3JrIG9uIHdoaWNoIHRoZSBzdGF0ZSBjaGFuZ2Ugb2NjdXJyZWQKLSAgICAgICAgICogQHBhcmFtIG5ld1N0YXRlIHRoZSBuZXcgbmV0d29yayBzdGF0ZQotICAgICAgICAgKiBAcGFyYW0gQlNTSUQgd2hlbiB0aGUgbmV3IHN0YXRlIGlzIHtAbGluayBEZXRhaWxlZFN0YXRlI0NPTk5FQ1RFRAotICAgICAgICAgKiBOZXR3b3JrSW5mby5EZXRhaWxlZFN0YXRlLkNPTk5FQ1RFRH0sCi0gICAgICAgICAqIHRoaXMgaXMgdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBhY2Nlc3MgcG9pbnQuIE90aGVyd2lzZSwgaXQKLSAgICAgICAgICogaXMge0Bjb2RlIG51bGx9LgotICAgICAgICAgKi8KLSAgICAgICAgdm9pZCBub3RpZnlOZXR3b3JrU3RhdGVDaGFuZ2UoTmV0d29ya0luZm8uRGV0YWlsZWRTdGF0ZSBuZXdTdGF0ZSwgU3RyaW5nIEJTU0lELCBpbnQgbmV0SWQpIHsKLSAgICAgICAgICAgIGlmIChuZXdTdGF0ZSA9PSBOZXR3b3JrSW5mby5EZXRhaWxlZFN0YXRlLkNPTk5FQ1RFRCkgewotICAgICAgICAgICAgICAgIE1lc3NhZ2UgbSA9IG1TdGF0ZU1hY2hpbmUub2J0YWluTWVzc2FnZShORVRXT1JLX0NPTk5FQ1RJT05fRVZFTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwgMCwgQlNTSUQpOwotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UobSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE1lc3NhZ2UgbSA9IG1TdGF0ZU1hY2hpbmUub2J0YWluTWVzc2FnZShORVRXT1JLX0RJU0NPTk5FQ1RJT05fRVZFTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCwgMCwgQlNTSUQpOwotICAgICAgICAgICAgICAgIG1TdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UobSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2VuZCB0aGUgc3RhdGUgbWFjaGluZSBhIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBzdGF0ZSBvZiB0aGUgc3VwcGxpY2FudAotICAgICAgICAgKiBoYXMgY2hhbmdlZC4KLSAgICAgICAgICogQHBhcmFtIG5ldHdvcmtJZCB0aGUgY29uZmlndXJlZCBuZXR3b3JrIG9uIHdoaWNoIHRoZSBzdGF0ZSBjaGFuZ2Ugb2NjdXJyZWQKLSAgICAgICAgICogQHBhcmFtIHdpZmlTc2lkIG5ldHdvcmsgbmFtZQotICAgICAgICAgKiBAcGFyYW0gQlNTSUQgbmV0d29yayBhZGRyZXNzCi0gICAgICAgICAqIEBwYXJhbSBuZXdTdGF0ZSB0aGUgbmV3IHtAY29kZSBTdXBwbGljYW50U3RhdGV9Ci0gICAgICAgICAqLwotICAgICAgICB2b2lkIG5vdGlmeVN1cHBsaWNhbnRTdGF0ZUNoYW5nZShpbnQgbmV0d29ya0lkLCBXaWZpU3NpZCB3aWZpU3NpZCwgU3RyaW5nIEJTU0lELAotICAgICAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBuZXdTdGF0ZSkgewotICAgICAgICAgICAgbVN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShtU3RhdGVNYWNoaW5lLm9idGFpbk1lc3NhZ2UoU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQsCi0gICAgICAgICAgICAgICAgICAgIG5ldyBTdGF0ZUNoYW5nZVJlc3VsdChuZXR3b3JrSWQsIHdpZmlTc2lkLCBCU1NJRCwgbmV3U3RhdGUpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpTmF0aXZlLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpTmF0aXZlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZjI3OGEuLjAwMDAwMDAKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaU5hdGl2ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQubmV0LndpZmk7Ci0KLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5XaWZpUDJwQ29uZmlnOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLldpZmlQMnBHcm91cDsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLm5zZC5XaWZpUDJwU2VydmljZUluZm87Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvY2FsTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci0KLS8qKgotICogTmF0aXZlIGNhbGxzIGZvciBicmluZyB1cC9zaHV0IGRvd24gb2YgdGhlIHN1cHBsaWNhbnQgZGFlbW9uIGFuZCBmb3IKLSAqIHNlbmRpbmcgcmVxdWVzdHMgdG8gdGhlIHN1cHBsaWNhbnQgZGFlbW9uCi0gKgotICogd2FpdEZvckV2ZW50KCkgaXMgY2FsbGVkIG9uIHRoZSBtb25pdG9yIHRocmVhZCBmb3IgZXZlbnRzLiBBbGwgb3RoZXIgbWV0aG9kcwotICogbXVzdCBiZSBzZXJpYWxpemVkIGZyb20gdGhlIGZyYW1ld29yay4KLSAqCi0gKiB7QGhpZGV9Ci0gKi8KLXB1YmxpYyBjbGFzcyBXaWZpTmF0aXZlIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREJHID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVRBRzsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9HUk9VUF9PV05FUl9JTlRFTlQgICAgID0gNjsKLQotICAgIHN0YXRpYyBmaW5hbCBpbnQgQkxVRVRPT1RIX0NPRVhJU1RFTkNFX01PREVfRU5BQkxFRCAgICAgPSAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQkxVRVRPT1RIX0NPRVhJU1RFTkNFX01PREVfRElTQUJMRUQgICAgPSAxOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQkxVRVRPT1RIX0NPRVhJU1RFTkNFX01PREVfU0VOU0UgICAgICAgPSAyOwotCi0gICAgc3RhdGljIGZpbmFsIGludCBTQ0FOX1dJVEhPVVRfQ09OTkVDVElPTl9TRVRVUCAgICAgICAgICA9IDE7Ci0gICAgc3RhdGljIGZpbmFsIGludCBTQ0FOX1dJVEhfQ09OTkVDVElPTl9TRVRVUCAgICAgICAgICAgICA9IDI7Ci0KLSAgICAvLyBIb2xkIHRoaXMgbG9jayBiZWZvcmUgY2FsbGluZyBzdXBwbGljYW50IC0gaXQgaXMgcmVxdWlyZWQgdG8KLSAgICAvLyBtdXR1YWxseSBleGNsdWRlIGFjY2VzcyBmcm9tIFdpZmkgYW5kIFAycCBzdGF0ZSBtYWNoaW5lcwotICAgIHN0YXRpYyBmaW5hbCBPYmplY3QgbUxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIG1JbnRlcmZhY2VOYW1lOwotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgbUludGVyZmFjZVByZWZpeDsKLQotICAgIHByaXZhdGUgYm9vbGVhbiBtU3VzcGVuZE9wdEVuYWJsZWQgPSBmYWxzZTsKLQotICAgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gbG9hZERyaXZlcigpOwotCi0gICAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiBpc0RyaXZlckxvYWRlZCgpOwotCi0gICAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiB1bmxvYWREcml2ZXIoKTsKLQotICAgIHB1YmxpYyBuYXRpdmUgc3RhdGljIGJvb2xlYW4gc3RhcnRTdXBwbGljYW50KGJvb2xlYW4gcDJwU3VwcG9ydGVkKTsKLQotICAgIC8qIFNlbmRzIGEga2lsbCBzaWduYWwgdG8gc3VwcGxpY2FudC4gVG8gYmUgdXNlZCB3aGVuIHdlIGhhdmUgbG9zdCBjb25uZWN0aW9uCi0gICAgICAgb3Igd2hlbiB0aGUgc3VwcGxpY2FudCBpcyBodW5nICovCi0gICAgcHVibGljIG5hdGl2ZSBzdGF0aWMgYm9vbGVhbiBraWxsU3VwcGxpY2FudChib29sZWFuIHAycFN1cHBvcnRlZCk7Ci0KLSAgICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIGNvbm5lY3RUb1N1cHBsaWNhbnROYXRpdmUoKTsKLQotICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgY2xvc2VTdXBwbGljYW50Q29ubmVjdGlvbk5hdGl2ZSgpOwotCi0gICAgLyoqCi0gICAgICogV2FpdCBmb3IgdGhlIHN1cHBsaWNhbnQgdG8gc2VuZCBhbiBldmVudCwgcmV0dXJuaW5nIHRoZSBldmVudCBzdHJpbmcuCi0gICAgICogQHJldHVybiB0aGUgZXZlbnQgc3RyaW5nIHNlbnQgYnkgdGhlIHN1cHBsaWNhbnQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBuYXRpdmUgU3RyaW5nIHdhaXRGb3JFdmVudE5hdGl2ZSgpOwotCi0gICAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVhbiBkb0Jvb2xlYW5Db21tYW5kTmF0aXZlKFN0cmluZyBjb21tYW5kKTsKLQotICAgIHByaXZhdGUgbmF0aXZlIGludCBkb0ludENvbW1hbmROYXRpdmUoU3RyaW5nIGNvbW1hbmQpOwotCi0gICAgcHJpdmF0ZSBuYXRpdmUgU3RyaW5nIGRvU3RyaW5nQ29tbWFuZE5hdGl2ZShTdHJpbmcgY29tbWFuZCk7Ci0KLSAgICBwdWJsaWMgV2lmaU5hdGl2ZShTdHJpbmcgaW50ZXJmYWNlTmFtZSkgewotICAgICAgICBtSW50ZXJmYWNlTmFtZSA9IGludGVyZmFjZU5hbWU7Ci0gICAgICAgIG1UQUcgPSAiV2lmaU5hdGl2ZS0iICsgaW50ZXJmYWNlTmFtZTsKLSAgICAgICAgaWYgKCFpbnRlcmZhY2VOYW1lLmVxdWFscygicDJwMCIpKSB7Ci0gICAgICAgICAgICBtSW50ZXJmYWNlUHJlZml4ID0gIklGTkFNRT0iICsgaW50ZXJmYWNlTmFtZSArICIgIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGNvbW1hbmRzIGZvciBwMnAwIGludGVyZmFjZSBkb24ndCBuZWVkIHByZWZpeAotICAgICAgICAgICAgbUludGVyZmFjZVByZWZpeCA9ICIiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9jYWxMb2cgbUxvY2FsTG9nID0gbmV3IExvY2FsTG9nKDEwMjQpOwotCi0gICAgLy8gaG9sZCBtTG9jayBiZWZvcmUgYWNjZXNzaW5nIG1DbWRJZExvY2sKLSAgICBwcml2YXRlIGludCBtQ21kSWQ7Ci0KLSAgICBwdWJsaWMgTG9jYWxMb2cgZ2V0TG9jYWxMb2coKSB7Ci0gICAgICAgIHJldHVybiBtTG9jYWxMb2c7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgZ2V0TmV3Q21kSWRMb2NrZWQoKSB7Ci0gICAgICAgIHJldHVybiBtQ21kSWQrKzsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbG9jYWxMb2coU3RyaW5nIHMpIHsKLSAgICAgICAgaWYgKG1Mb2NhbExvZyAhPSBudWxsKQotICAgICAgICAgICAgbUxvY2FsTG9nLmxvZyhtSW50ZXJmYWNlTmFtZSArICI6ICIgKyBzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBjb25uZWN0VG9TdXBwbGljYW50KCkgewotICAgICAgICAvLyBObyBzeW5jaHJvbml6YXRpb24gbmVjZXNzYXJ5IC4uIGl0IGlzIGltcGxlbWVudGVkIGluIFdpZmlNb25pdG9yCi0gICAgICAgIGxvY2FsTG9nKG1JbnRlcmZhY2VQcmVmaXggKyAiY29ubmVjdFRvU3VwcGxpY2FudCIpOwotICAgICAgICByZXR1cm4gY29ubmVjdFRvU3VwcGxpY2FudE5hdGl2ZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNsb3NlU3VwcGxpY2FudENvbm5lY3Rpb24oKSB7Ci0gICAgICAgIGxvY2FsTG9nKG1JbnRlcmZhY2VQcmVmaXggKyAiY2xvc2VTdXBwbGljYW50Q29ubmVjdGlvbiIpOwotICAgICAgICBjbG9zZVN1cHBsaWNhbnRDb25uZWN0aW9uTmF0aXZlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB3YWl0Rm9yRXZlbnQoKSB7Ci0gICAgICAgIC8vIE5vIHN5bmNocm9uaXphdGlvbiBuZWNlc3NhcnkgLi4gaXQgaXMgaW1wbGVtZW50ZWQgaW4gV2lmaU1vbml0b3IKLSAgICAgICAgcmV0dXJuIHdhaXRGb3JFdmVudE5hdGl2ZSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBkb0Jvb2xlYW5Db21tYW5kKFN0cmluZyBjb21tYW5kKSB7Ci0gICAgICAgIGlmIChEQkcpIExvZy5kKG1UQUcsICJkb0Jvb2xlYW46ICIgKyBjb21tYW5kKTsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgaW50IGNtZElkID0gZ2V0TmV3Q21kSWRMb2NrZWQoKTsKLSAgICAgICAgICAgIGxvY2FsTG9nKGNtZElkICsgIi0+IiArIG1JbnRlcmZhY2VQcmVmaXggKyBjb21tYW5kKTsKLSAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZG9Cb29sZWFuQ29tbWFuZE5hdGl2ZShtSW50ZXJmYWNlUHJlZml4ICsgY29tbWFuZCk7Ci0gICAgICAgICAgICBsb2NhbExvZyhjbWRJZCArICI8LSIgKyByZXN1bHQpOwotICAgICAgICAgICAgaWYgKERCRykgTG9nLmQobVRBRywgIiAgIHJldHVybmVkICIgKyByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGRvSW50Q29tbWFuZChTdHJpbmcgY29tbWFuZCkgewotICAgICAgICBpZiAoREJHKSBMb2cuZChtVEFHLCAiZG9JbnQ6ICIgKyBjb21tYW5kKTsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgaW50IGNtZElkID0gZ2V0TmV3Q21kSWRMb2NrZWQoKTsKLSAgICAgICAgICAgIGxvY2FsTG9nKGNtZElkICsgIi0+IiArIG1JbnRlcmZhY2VQcmVmaXggKyBjb21tYW5kKTsKLSAgICAgICAgICAgIGludCByZXN1bHQgPSBkb0ludENvbW1hbmROYXRpdmUobUludGVyZmFjZVByZWZpeCArIGNvbW1hbmQpOwotICAgICAgICAgICAgbG9jYWxMb2coY21kSWQgKyAiPC0iICsgcmVzdWx0KTsKLSAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKG1UQUcsICIgICByZXR1cm5lZCAiICsgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0cmluZyBkb1N0cmluZ0NvbW1hbmQoU3RyaW5nIGNvbW1hbmQpIHsKLSAgICAgICAgaWYgKERCRykgTG9nLmQobVRBRywgImRvU3RyaW5nOiAiICsgY29tbWFuZCk7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIGludCBjbWRJZCA9IGdldE5ld0NtZElkTG9ja2VkKCk7Ci0gICAgICAgICAgICBsb2NhbExvZyhjbWRJZCArICItPiIgKyBtSW50ZXJmYWNlUHJlZml4ICsgY29tbWFuZCk7Ci0gICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZG9TdHJpbmdDb21tYW5kTmF0aXZlKG1JbnRlcmZhY2VQcmVmaXggKyBjb21tYW5kKTsKLSAgICAgICAgICAgIGxvY2FsTG9nKGNtZElkICsgIjwtIiArIHJlc3VsdCk7Ci0gICAgICAgICAgICBpZiAoREJHKSBMb2cuZChtVEFHLCAiICAgcmV0dXJuZWQgIiArIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgZG9TdHJpbmdDb21tYW5kV2l0aG91dExvZ2dpbmcoU3RyaW5nIGNvbW1hbmQpIHsKLSAgICAgICAgaWYgKERCRykgTG9nLmQobVRBRywgImRvU3RyaW5nOiAiICsgY29tbWFuZCk7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmROYXRpdmUobUludGVyZmFjZVByZWZpeCArIGNvbW1hbmQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcGluZygpIHsKLSAgICAgICAgU3RyaW5nIHBvbmcgPSBkb1N0cmluZ0NvbW1hbmQoIlBJTkciKTsKLSAgICAgICAgcmV0dXJuIChwb25nICE9IG51bGwgJiYgcG9uZy5lcXVhbHMoIlBPTkciKSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2NhbihpbnQgdHlwZSkgewotICAgICAgICBpZiAodHlwZSA9PSBTQ0FOX1dJVEhPVVRfQ09OTkVDVElPTl9TRVRVUCkgewotICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNDQU4gVFlQRT1PTkxZIik7Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBTQ0FOX1dJVEhfQ09OTkVDVElPTl9TRVRVUCkgewotICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNDQU4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgc2NhbiB0eXBlIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBEb2VzIGEgZ3JhY2VmdWwgc2h1dGRvd24gb2Ygc3VwcGxpY2FudC4gSXMgYSBjb21tb24gc3RvcCBmdW5jdGlvbiBmb3IgYm90aCBwMnAgYW5kIHN0YS4KLSAgICAgKgotICAgICAqIE5vdGUgdGhhdCB1bmRlcm5lYXRoIHdlIHVzZSBhIGhhcnNoLXNvdW5kaW5nICJ0ZXJtaW5hdGUiIHN1cHBsaWNhbnQgY29tbWFuZAotICAgICAqIGZvciBhIGdyYWNlZnVsIHN0b3AgYW5kIGEgbWlsZC1zb3VuZGluZyAic3RvcCIgaW50ZXJmYWNlCi0gICAgICogdG8ga2lsbCB0aGUgcHJvY2VzcwotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHN0b3BTdXBwbGljYW50KCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiVEVSTUlOQVRFIik7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBsaXN0TmV0d29ya3MoKSB7Ci0gICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmQoIkxJU1RfTkVUV09SS1MiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGFkZE5ldHdvcmsoKSB7Ci0gICAgICAgIHJldHVybiBkb0ludENvbW1hbmQoIkFERF9ORVRXT1JLIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2V0TmV0d29ya1ZhcmlhYmxlKGludCBuZXRJZCwgU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkobmFtZSkgfHwgVGV4dFV0aWxzLmlzRW1wdHkodmFsdWUpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTRVRfTkVUV09SSyAiICsgbmV0SWQgKyAiICIgKyBuYW1lICsgIiAiICsgdmFsdWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmV0d29ya1ZhcmlhYmxlKGludCBuZXRJZCwgU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG5hbWUpKSByZXR1cm4gbnVsbDsKLQotICAgICAgICAvLyBHRVRfTkVUV09SSyB3aWxsIGxpa2VseSBmbG9vZCB0aGUgbG9ncyAuLi4KLSAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZFdpdGhvdXRMb2dnaW5nKCJHRVRfTkVUV09SSyAiICsgbmV0SWQgKyAiICIgKyBuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmVOZXR3b3JrKGludCBuZXRJZCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUkVNT1ZFX05FVFdPUksgIiArIG5ldElkKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBlbmFibGVOZXR3b3JrKGludCBuZXRJZCwgYm9vbGVhbiBkaXNhYmxlT3RoZXJzKSB7Ci0gICAgICAgIGlmIChkaXNhYmxlT3RoZXJzKSB7Ci0gICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0VMRUNUX05FVFdPUksgIiArIG5ldElkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJFTkFCTEVfTkVUV09SSyAiICsgbmV0SWQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZGlzYWJsZU5ldHdvcmsoaW50IG5ldElkKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJESVNBQkxFX05FVFdPUksgIiArIG5ldElkKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiByZWNvbm5lY3QoKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJSRUNPTk5FQ1QiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiByZWFzc29jaWF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlJFQVNTT0NJQVRFIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZGlzY29ubmVjdCgpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRJU0NPTk5FQ1QiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHN0YXR1cygpIHsKLSAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZCgiU1RBVFVTIik7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRNYWNBZGRyZXNzKCkgewotICAgICAgICAvL01hY2FkZHIgPSBYWC5YWC5YWC5YWC5YWC5YWAotICAgICAgICBTdHJpbmcgcmV0ID0gZG9TdHJpbmdDb21tYW5kKCJEUklWRVIgTUFDQUREUiIpOwotICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHJldCkpIHsKLSAgICAgICAgICAgIFN0cmluZ1tdIHRva2VucyA9IHJldC5zcGxpdCgiID0gIik7Ci0gICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PSAyKSByZXR1cm4gdG9rZW5zWzFdOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvcm1hdCBvZiByZXN1bHRzOgotICAgICAqID09PT09PT09PT09PT09PT09Ci0gICAgICogaWQ9MQotICAgICAqIGJzc2lkPTY4OjdmOjc0OmQ3OjFiOjZlCi0gICAgICogZnJlcT0yNDEyCi0gICAgICogbGV2ZWw9LTQzCi0gICAgICogdHNmPTEzNDQ2MjE5NzUxNjA5NDQKLSAgICAgKiBhZ2U9MjYyMwotICAgICAqIGZsYWdzPVtXUEEyLVBTSy1DQ01QXVtXUFNdW0VTU10KLSAgICAgKiBzc2lkPXp1YnliCi0gICAgICogPT09PQotICAgICAqCi0gICAgICogUkFOR0U9QUxMIGdldHMgYWxsIHNjYW4gcmVzdWx0cwotICAgICAqIFJBTkdFPUlELSBnZXRzIHJlc3VsdHMgZnJvbSBJRAotICAgICAqIE1BU0s9PE4+IHNlZSB3cGFfc3VwcGxpY2FudC9zcmMvY29tbW9uL3dwYV9jdHJsLmggZm9yIGRldGFpbHMKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIHNjYW5SZXN1bHRzKGludCBzaWQpIHsKLSAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZFdpdGhvdXRMb2dnaW5nKCJCU1MgUkFOR0U9IiArIHNpZCArICItIE1BU0s9MHgyMTk4NyIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZvcm1hdCBvZiBjb21tYW5kCi0gICAgICogRFJJVkVSIFdMU19CQVRDSElORyBTRVQgU0NBTkZSRVE9eCBNU0NBTj1yIEJFU1ROPXkgQ0hBTk5FTD08eiwgdywgdD4gUlRUPXMKLSAgICAgKiB3aGVyZSB4IGlzIGFuIGFzY2lpIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIgbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiBzY2FucwotICAgICAqICAgICAgIHIgaXMgYW4gYXNjaWkgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlciBudW1iZXIgb2Ygc2NhbnMgcGVyIGJhdGNoCi0gICAgICogICAgICAgeSBpcyBhbiBhc2NpaSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIG51bWJlciBvZiB0aGUgbWF4IEFQIHRvIHJlbWVtYmVyIHBlciBzY2FuCi0gICAgICogICAgICAgeiwgdywgdCByZXByZXNlbnQgYSAxLi5uIHNpemUgbGlzdCBvZiBjaGFubmVsIG51bWJlcnMgYW5kL29yICdBJywgJ0InIHZhbHVlcwotICAgICAqICAgICAgICAgICBpbmRpY2F0aW5nIGVudGlyZSByYW5nZXMgb2YgY2hhbm5lbHMKLSAgICAgKiAgICAgICBzIGlzIGFuIGFzY2lpIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIgbnVtYmVyIG9mIGhpZ2hlc3Qtc3RyZW5ndGggQVAKLSAgICAgKiAgICAgICAgICAgZm9yIHdoaWNoIHdlJ2QgbGlrZSBhcHByb3hpbWF0ZSBkaXN0YW5jZSByZXBvcnRlZAotICAgICAqCi0gICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBhc2NpaSBpbnRlZ2VyIHJlcHJlc2VudGluZyBhIGd1ZXNzIG9mIHRoZSBudW1iZXIgb2Ygc2NhbnMKLSAgICAgKiB0aGUgZmlybXdhcmUgY2FuIHJlbWVtYmVyIGJlZm9yZSBpdCBydW5zIG91dCBvZiBidWZmZXIgc3BhY2Ugb3IgLTEgb24gZXJyb3IKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIHNldEJhdGNoZWRTY2FuU2V0dGluZ3MoQmF0Y2hlZFNjYW5TZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICBpZiAoc2V0dGluZ3MgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZCgiRFJJVkVSIFdMU19CQVRDSElORyBTVE9QIik7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGNtZCA9ICJEUklWRVIgV0xTX0JBVENISU5HIFNFVCBTQ0FORlJFUT0iICsgc2V0dGluZ3Muc2NhbkludGVydmFsU2VjOwotICAgICAgICBjbWQgKz0gIiBNU0NBTj0iICsgc2V0dGluZ3MubWF4U2NhbnNQZXJCYXRjaDsKLSAgICAgICAgaWYgKHNldHRpbmdzLm1heEFwUGVyU2NhbiAhPSBCYXRjaGVkU2NhblNldHRpbmdzLlVOU1BFQ0lGSUVEKSB7Ci0gICAgICAgICAgICBjbWQgKz0gIiBCRVNUTj0iICsgc2V0dGluZ3MubWF4QXBQZXJTY2FuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzZXR0aW5ncy5jaGFubmVsU2V0ICE9IG51bGwgJiYgIXNldHRpbmdzLmNoYW5uZWxTZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjbWQgKz0gIiBDSEFOTkVMPTwiOwotICAgICAgICAgICAgaW50IGkgPSAwOwotICAgICAgICAgICAgZm9yIChTdHJpbmcgY2hhbm5lbCA6IHNldHRpbmdzLmNoYW5uZWxTZXQpIHsKLSAgICAgICAgICAgICAgICBjbWQgKz0gKGkgPiAwID8gIiwiIDogIiIpICsgY2hhbm5lbDsKLSAgICAgICAgICAgICAgICArK2k7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjbWQgKz0gIj4iOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzZXR0aW5ncy5tYXhBcEZvckRpc3RhbmNlICE9IEJhdGNoZWRTY2FuU2V0dGluZ3MuVU5TUEVDSUZJRUQpIHsKLSAgICAgICAgICAgIGNtZCArPSAiIFJUVD0iICsgc2V0dGluZ3MubWF4QXBGb3JEaXN0YW5jZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kKGNtZCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRCYXRjaGVkU2NhblJlc3VsdHMoKSB7Ci0gICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmQoIkRSSVZFUiBXTFNfQkFUQ0hJTkcgR0VUIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc3RhcnREcml2ZXIoKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgU1RBUlQiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzdG9wRHJpdmVyKCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFNUT1AiKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFN0YXJ0IGZpbHRlcmluZyBvdXQgTXVsdGljYXN0IFY0IHBhY2tldHMKLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZCwge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKLSAgICAgKgotICAgICAqIE11bHRpY2FzdCBmaWx0ZXJpbmcgcnVsZXMgd29yayBhcyBmb2xsb3dzOgotICAgICAqCi0gICAgICogVGhlIGRyaXZlciBjYW4gZmlsdGVyIG11bHRpY2FzdCAodjQgYW5kL29yIHY2KSBhbmQgYnJvYWRjYXN0IHBhY2tldHMgd2hlbiBpbgotICAgICAqIGEgcG93ZXIgb3B0aW1pemVkIG1vZGUgKHR5cGljYWxseSB3aGVuIHNjcmVlbiBnb2VzIG9mZikuCi0gICAgICoKLSAgICAgKiBJbiBvcmRlciB0byBwcmV2ZW50IHRoZSBkcml2ZXIgZnJvbSBmaWx0ZXJpbmcgdGhlIG11bHRpY2FzdC9icm9hZGNhc3QgcGFja2V0cywgd2UgaGF2ZSB0bwotICAgICAqIGFkZCBhIERSSVZFUiBSWEZJTFRFUi1BREQgcnVsZSBmb2xsb3dlZCBieSBEUklWRVIgUlhGSUxURVItU1RBUlQgdG8gbWFrZSB0aGUgcnVsZSBlZmZlY3RpdmUKLSAgICAgKgotICAgICAqIERSSVZFUiBSWEZJTFRFUi1BREQgTnVtCi0gICAgICogICB3aGVyZSBOdW0gPSAwIC0gVW5pY2FzdCwgMSAtIEJyb2FkY2FzdCwgMiAtIE11dGlsNCBvciAzIC0gTXVsdGk2Ci0gICAgICoKLSAgICAgKiBhbmQgRFJJVkVSIFJYRklMVEVSLVNUQVJUCi0gICAgICogSW4gb3JkZXIgdG8gc3RvcCB0aGUgdXNhZ2Ugb2YgdGhlc2UgcnVsZXMsIHdlIGRvCi0gICAgICoKLSAgICAgKiBEUklWRVIgUlhGSUxURVItU1RPUAotICAgICAqIERSSVZFUiBSWEZJTFRFUi1SRU1PVkUgTnVtCi0gICAgICogICB3aGVyZSBOdW0gaXMgYXMgZGVzY3JpYmVkIGZvciBSWEZJTFRFUi1BREQKLSAgICAgKgotICAgICAqIFRoZSAgU0VUU1VTUEVORE9QVCBkcml2ZXIgY29tbWFuZCBvdmVycmlkZXMgdGhlIGZpbHRlcmluZyBydWxlcwotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0RmlsdGVyaW5nTXVsdGljYXN0VjRQYWNrZXRzKCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFJYRklMVEVSLVNUT1AiKQotICAgICAgICAgICAgJiYgZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFJYRklMVEVSLVJFTU9WRSAyIikKLSAgICAgICAgICAgICYmIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBSWEZJTFRFUi1TVEFSVCIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0b3AgZmlsdGVyaW5nIG91dCBNdWx0aWNhc3QgVjQgcGFja2V0cy4KLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZCwge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzdG9wRmlsdGVyaW5nTXVsdGljYXN0VjRQYWNrZXRzKCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFJYRklMVEVSLVNUT1AiKQotICAgICAgICAgICAgJiYgZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIFJYRklMVEVSLUFERCAyIikKLSAgICAgICAgICAgICYmIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBSWEZJTFRFUi1TVEFSVCIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0YXJ0IGZpbHRlcmluZyBvdXQgTXVsdGljYXN0IFY2IHBhY2tldHMKLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZCwge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzdGFydEZpbHRlcmluZ011bHRpY2FzdFY2UGFja2V0cygpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBSWEZJTFRFUi1TVE9QIikKLSAgICAgICAgICAgICYmIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBSWEZJTFRFUi1SRU1PVkUgMyIpCi0gICAgICAgICAgICAmJiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgUlhGSUxURVItU1RBUlQiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdG9wIGZpbHRlcmluZyBvdXQgTXVsdGljYXN0IFY2IHBhY2tldHMuCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc3RvcEZpbHRlcmluZ011bHRpY2FzdFY2UGFja2V0cygpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBSWEZJTFRFUi1TVE9QIikKLSAgICAgICAgICAgICYmIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBSWEZJTFRFUi1BREQgMyIpCi0gICAgICAgICAgICAmJiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgUlhGSUxURVItU1RBUlQiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEJhbmQoKSB7Ci0gICAgICAgU3RyaW5nIHJldCA9IGRvU3RyaW5nQ29tbWFuZCgiRFJJVkVSIEdFVEJBTkQiKTsKLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShyZXQpKSB7Ci0gICAgICAgICAgICAvL3JlcGx5IGlzICJCQU5EIFgiIHdoZXJlIFggaXMgdGhlIGJhbmQKLSAgICAgICAgICAgIFN0cmluZ1tdIHRva2VucyA9IHJldC5zcGxpdCgiICIpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PSAyKSByZXR1cm4gSW50ZWdlci5wYXJzZUludCh0b2tlbnNbMV0pOwotICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNldEJhbmQoaW50IGJhbmQpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBTRVRCQU5EICIgKyBiYW5kKTsKLSAgICB9Ci0KLSAgIC8qKgotICAgICAqIFNldHMgdGhlIGJsdWV0b290aCBjb2V4aXN0ZW5jZSBtb2RlLgotICAgICAqCi0gICAgICogQHBhcmFtIG1vZGUgT25lIG9mIHtAbGluayAjQkxVRVRPT1RIX0NPRVhJU1RFTkNFX01PREVfRElTQUJMRUR9LAotICAgICAqICAgICAgICAgICAge0BsaW5rICNCTFVFVE9PVEhfQ09FWElTVEVOQ0VfTU9ERV9FTkFCTEVEfSwgb3IKLSAgICAgKiAgICAgICAgICAgIHtAbGluayAjQkxVRVRPT1RIX0NPRVhJU1RFTkNFX01PREVfU0VOU0V9LgotICAgICAqIEByZXR1cm4gV2hldGhlciB0aGUgbW9kZSB3YXMgc3VjY2Vzc2Z1bGx5IHNldC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRCbHVldG9vdGhDb2V4aXN0ZW5jZU1vZGUoaW50IG1vZGUpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBCVENPRVhNT0RFICIgKyBtb2RlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSBCbHVldG9vdGggY29leGlzdGVuY2Ugc2NhbiBtb2RlLiBXaGVuIHRoaXMgbW9kZSBpcyBvbiwKLSAgICAgKiBzb21lIG9mIHRoZSBsb3ctbGV2ZWwgc2NhbiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlIGRyaXZlciBhcmUgY2hhbmdlZCB0bwotICAgICAqIHJlZHVjZSBpbnRlcmZlcmVuY2Ugd2l0aCBBMkRQIHN0cmVhbWluZy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpc1NldCB3aGV0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgbW9kZQotICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBjb21tYW5kIHN1Y2NlZWRlZCwge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc2V0Qmx1ZXRvb3RoQ29leGlzdGVuY2VTY2FuTW9kZShib29sZWFuIHNldENvZXhTY2FuTW9kZSkgewotICAgICAgICBpZiAoc2V0Q29leFNjYW5Nb2RlKSB7Ci0gICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiRFJJVkVSIEJUQ09FWFNDQU4tU1RBUlQiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgQlRDT0VYU0NBTi1TVE9QIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzYXZlQ29uZmlnKCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0FWRV9DT05GSUciKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBhZGRUb0JsYWNrbGlzdChTdHJpbmcgYnNzaWQpIHsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGJzc2lkKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiQkxBQ0tMSVNUICIgKyBic3NpZCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gY2xlYXJCbGFja2xpc3QoKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJCTEFDS0xJU1QgY2xlYXIiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRTdXNwZW5kT3B0aW1pemF0aW9ucyhib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICAgaWYgKG1TdXNwZW5kT3B0RW5hYmxlZCA9PSBlbmFibGVkKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgbVN1c3BlbmRPcHRFbmFibGVkID0gZW5hYmxlZDsKLSAgICAgICAgaWYgKGVuYWJsZWQpIHsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgU0VUU1VTUEVORE1PREUgMSIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBTRVRTVVNQRU5ETU9ERSAwIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRDb3VudHJ5Q29kZShTdHJpbmcgY291bnRyeUNvZGUpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIkRSSVZFUiBDT1VOVFJZICIgKyBjb3VudHJ5Q29kZS50b1VwcGVyQ2FzZShMb2NhbGUuUk9PVCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGVuYWJsZUJhY2tncm91bmRTY2FuKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgICAgIGlmIChlbmFibGUpIHsKLSAgICAgICAgICAgIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCBwbm8gMSIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZG9Cb29sZWFuQ29tbWFuZCgiU0VUIHBubyAwIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTY2FuSW50ZXJ2YWwoaW50IHNjYW5JbnRlcnZhbCkgewotICAgICAgICBkb0Jvb2xlYW5Db21tYW5kKCJTQ0FOX0lOVEVSVkFMICIgKyBzY2FuSW50ZXJ2YWwpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN0YXJ0VGRscyhTdHJpbmcgbWFjQWRkciwgYm9vbGVhbiBlbmFibGUpIHsKLSAgICAgICAgaWYgKGVuYWJsZSkgewotICAgICAgICAgICAgZG9Cb29sZWFuQ29tbWFuZCgiVERMU19ESVNDT1ZFUiAiICsgbWFjQWRkcik7Ci0gICAgICAgICAgICBkb0Jvb2xlYW5Db21tYW5kKCJURExTX1NFVFVQICIgKyBtYWNBZGRyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRvQm9vbGVhbkNvbW1hbmQoIlRETFNfVEVBUkRPV04gIiArIG1hY0FkZHIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIEV4YW1wbGUgb3V0cHV0OgotICAgICAqIFJTU0k9LTY1Ci0gICAgICogTElOS1NQRUVEPTQ4Ci0gICAgICogTk9JU0U9OTk5OQotICAgICAqIEZSRVFVRU5DWT0wCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBzaWduYWxQb2xsKCkgewotICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kV2l0aG91dExvZ2dpbmcoIlNJR05BTF9QT0xMIik7Ci0gICAgfQotCi0gICAgLyoqIEV4YW1wbGUgb3V0b3V0OgotICAgICAqIFRYR09PRD0zOTYKLSAgICAgKiBUWEJBRD0xCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBwa3RjbnRQb2xsKCkgewotICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kKCJQS1RDTlRfUE9MTCIpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGJzc0ZsdXNoKCkgewotICAgICAgICBkb0Jvb2xlYW5Db21tYW5kKCJCU1NfRkxVU0ggMCIpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0V3BzUGJjKFN0cmluZyBic3NpZCkgewotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoYnNzaWQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiV1BTX1BCQyIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIldQU19QQkMgIiArIGJzc2lkKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0V3BzUGJjKFN0cmluZyBpZmFjZSwgU3RyaW5nIGJzc2lkKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShic3NpZCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZE5hdGl2ZSgiSUZOQU1FPSIgKyBpZmFjZSArICIgV1BTX1BCQyIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZE5hdGl2ZSgiSUZOQU1FPSIgKyBpZmFjZSArICIgV1BTX1BCQyAiICsgYnNzaWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc3RhcnRXcHNQaW5LZXlwYWQoU3RyaW5nIHBpbikgewotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkocGluKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiV1BTX1BJTiBhbnkgIiArIHBpbik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc3RhcnRXcHNQaW5LZXlwYWQoU3RyaW5nIGlmYWNlLCBTdHJpbmcgcGluKSB7Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShwaW4pKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kTmF0aXZlKCJJRk5BTUU9IiArIGlmYWNlICsgIiBXUFNfUElOIGFueSAiICsgcGluKTsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgcHVibGljIFN0cmluZyBzdGFydFdwc1BpbkRpc3BsYXkoU3RyaW5nIGJzc2lkKSB7Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShic3NpZCkpIHsKLSAgICAgICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmQoIldQU19QSU4gYW55Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kKCJXUFNfUElOICIgKyBic3NpZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHN0YXJ0V3BzUGluRGlzcGxheShTdHJpbmcgaWZhY2UsIFN0cmluZyBic3NpZCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoYnNzaWQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZE5hdGl2ZSgiSUZOQU1FPSIgKyBpZmFjZSArICIgV1BTX1BJTiBhbnkiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRvU3RyaW5nQ29tbWFuZE5hdGl2ZSgiSUZOQU1FPSIgKyBpZmFjZSArICIgV1BTX1BJTiAiICsgYnNzaWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQ29uZmlndXJlcyBhbiBhY2Nlc3MgcG9pbnQgY29ubmVjdGlvbiAqLwotICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0V3BzUmVnaXN0cmFyKFN0cmluZyBic3NpZCwgU3RyaW5nIHBpbikgewotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoYnNzaWQpIHx8IFRleHRVdGlscy5pc0VtcHR5KHBpbikpIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIldQU19SRUcgIiArIGJzc2lkICsgIiAiICsgcGluKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBjYW5jZWxXcHMoKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJXUFNfQ0FOQ0VMIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2V0UGVyc2lzdGVudFJlY29ubmVjdChib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICAgaW50IHZhbHVlID0gKGVuYWJsZWQgPT0gdHJ1ZSkgPyAxIDogMDsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCBwZXJzaXN0ZW50X3JlY29ubmVjdCAiICsgdmFsdWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNldERldmljZU5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCBkZXZpY2VfbmFtZSAiICsgbmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2V0RGV2aWNlVHlwZShTdHJpbmcgdHlwZSkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0VUIGRldmljZV90eXBlICIgKyB0eXBlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRDb25maWdNZXRob2RzKFN0cmluZyBjZmcpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCBjb25maWdfbWV0aG9kcyAiICsgY2ZnKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRNYW51ZmFjdHVyZXIoU3RyaW5nIHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgbWFudWZhY3R1cmVyICIgKyB2YWx1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2V0TW9kZWxOYW1lKFN0cmluZyB2YWx1ZSkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiU0VUIG1vZGVsX25hbWUgIiArIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRNb2RlbE51bWJlcihTdHJpbmcgdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlNFVCBtb2RlbF9udW1iZXIgIiArIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRTZXJpYWxOdW1iZXIoU3RyaW5nIHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgc2VyaWFsX251bWJlciAiICsgdmFsdWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNldFAycFNzaWRQb3N0Zml4KFN0cmluZyBwb3N0Zml4KSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgcDJwX3NzaWRfcG9zdGZpeCAiICsgcG9zdGZpeCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2V0UDJwR3JvdXBJZGxlKFN0cmluZyBpZmFjZSwgaW50IHRpbWUpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmROYXRpdmUoIklGTkFNRT0iICsgaWZhY2UgKyAiIFNFVCBwMnBfZ3JvdXBfaWRsZSAiICsgdGltZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQb3dlclNhdmUoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgICAgIGlmIChlbmFibGVkKSB7Ci0gICAgICAgICAgICBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgcHMgMSIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZG9Cb29sZWFuQ29tbWFuZCgiU0VUIHBzIDAiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNldFAycFBvd2VyU2F2ZShTdHJpbmcgaWZhY2UsIGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBpZiAoZW5hYmxlZCkgewotICAgICAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kTmF0aXZlKCJJRk5BTUU9IiArIGlmYWNlICsgIiBQMlBfU0VUIHBzIDEiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmROYXRpdmUoIklGTkFNRT0iICsgaWZhY2UgKyAiIFAyUF9TRVQgcHMgMCIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2V0V2ZkRW5hYmxlKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJTRVQgd2lmaV9kaXNwbGF5ICIgKyAoZW5hYmxlID8gIjEiIDogIjAiKSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc2V0V2ZkRGV2aWNlSW5mbyhTdHJpbmcgaGV4KSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJXRkRfU1VCRUxFTV9TRVQgMCAiICsgaGV4KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiAic3RhIiBwcmlvcml0aXplcyBTVEEgY29ubmVjdGlvbiBvdmVyIFAyUCBhbmQgInAycCIgcHJpb3JpdGl6ZXMKLSAgICAgKiBQMlAgY29ubmVjdGlvbiBvdmVyIFNUQQotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHNldENvbmN1cnJlbmN5UHJpb3JpdHkoU3RyaW5nIHMpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9TRVQgY29uY19wcmVmICIgKyBzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBGaW5kKCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX0ZJTkQiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBGaW5kKGludCB0aW1lb3V0KSB7Ci0gICAgICAgIGlmICh0aW1lb3V0IDw9IDApIHsKLSAgICAgICAgICAgIHJldHVybiBwMnBGaW5kKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9GSU5EICIgKyB0aW1lb3V0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBTdG9wRmluZCgpIHsKLSAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX1NUT1BfRklORCIpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHAycExpc3RlbigpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9MSVNURU4iKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBMaXN0ZW4oaW50IHRpbWVvdXQpIHsKLSAgICAgICAgaWYgKHRpbWVvdXQgPD0gMCkgewotICAgICAgICAgICAgcmV0dXJuIHAycExpc3RlbigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfTElTVEVOICIgKyB0aW1lb3V0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBFeHRMaXN0ZW4oYm9vbGVhbiBlbmFibGUsIGludCBwZXJpb2QsIGludCBpbnRlcnZhbCkgewotICAgICAgICBpZiAoZW5hYmxlICYmIGludGVydmFsIDwgcGVyaW9kKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9FWFRfTElTVEVOIgotICAgICAgICAgICAgICAgICAgICArIChlbmFibGUgPyAoIiAiICsgcGVyaW9kICsgIiAiICsgaW50ZXJ2YWwpIDogIiIpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBTZXRDaGFubmVsKGludCBsYywgaW50IG9jKSB7Ci0gICAgICAgIGlmIChEQkcpIExvZy5kKG1UQUcsICJwMnBTZXRDaGFubmVsOiBsYz0iK2xjKyIsIG9jPSIrb2MpOwotCi0gICAgICAgIGlmIChsYyA+PTEgJiYgbGMgPD0gMTEpIHsKLSAgICAgICAgICAgIGlmICghZG9Cb29sZWFuQ29tbWFuZCgiUDJQX1NFVCBsaXN0ZW5fY2hhbm5lbCAiICsgbGMpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGxjICE9IDApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvYyA+PSAxICYmIG9jIDw9IDE2NSApIHsKLSAgICAgICAgICAgIGludCBmcmVxID0gKG9jIDw9IDE0ID8gMjQwNyA6IDUwMDApICsgb2MgKiA1OwotICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9TRVQgZGlzYWxsb3dfZnJlcSAxMDAwLSIKLSAgICAgICAgICAgICAgICAgICAgKyAoZnJlcSAtIDUpICsgIiwiICsgKGZyZXEgKyA1KSArICItNjAwMCIpOwotICAgICAgICB9IGVsc2UgaWYgKG9jID09IDApIHsKLSAgICAgICAgICAgIC8qIG9jPT0wIGRpc2FibGVzICJQMlBfU0VUIGRpc2FsbG93X2ZyZXEiIChlbmFibGVzIGFsbCBmcmVxcykgKi8KLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfU0VUIGRpc2FsbG93X2ZyZXEgXCJcIiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHAycEZsdXNoKCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX0ZMVVNIIik7Ci0gICAgfQotCi0gICAgLyogcDJwX2Nvbm5lY3QgPHBlZXIgZGV2aWNlIGFkZHJlc3M+IDxwYmN8cGlufFBJTiM+IFtsYWJlbHxkaXNwbGF5fGtleXBhZF0KLSAgICAgICAgW3BlcnNpc3RlbnRdIFtqb2lufGF1dGhdIFtnb19pbnRlbnQ9PDAuLjE1Pl0gW2ZyZXE9PGluIE1Iej5dICovCi0gICAgcHVibGljIFN0cmluZyBwMnBDb25uZWN0KFdpZmlQMnBDb25maWcgY29uZmlnLCBib29sZWFuIGpvaW5FeGlzdGluZ0dyb3VwKSB7Ci0gICAgICAgIGlmIChjb25maWcgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0gICAgICAgIExpc3Q8U3RyaW5nPiBhcmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgIFdwc0luZm8gd3BzID0gY29uZmlnLndwczsKLSAgICAgICAgYXJncy5hZGQoY29uZmlnLmRldmljZUFkZHJlc3MpOwotCi0gICAgICAgIHN3aXRjaCAod3BzLnNldHVwKSB7Ci0gICAgICAgICAgICBjYXNlIFdwc0luZm8uUEJDOgotICAgICAgICAgICAgICAgIGFyZ3MuYWRkKCJwYmMiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV3BzSW5mby5ESVNQTEFZOgotICAgICAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eSh3cHMucGluKSkgewotICAgICAgICAgICAgICAgICAgICBhcmdzLmFkZCgicGluIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXJncy5hZGQod3BzLnBpbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFyZ3MuYWRkKCJkaXNwbGF5Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdwc0luZm8uS0VZUEFEOgotICAgICAgICAgICAgICAgIGFyZ3MuYWRkKHdwcy5waW4pOwotICAgICAgICAgICAgICAgIGFyZ3MuYWRkKCJrZXlwYWQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV3BzSW5mby5MQUJFTDoKLSAgICAgICAgICAgICAgICBhcmdzLmFkZCh3cHMucGluKTsKLSAgICAgICAgICAgICAgICBhcmdzLmFkZCgibGFiZWwiKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY29uZmlnLm5ldElkID09IFdpZmlQMnBHcm91cC5QRVJTSVNURU5UX05FVF9JRCkgewotICAgICAgICAgICAgYXJncy5hZGQoInBlcnNpc3RlbnQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChqb2luRXhpc3RpbmdHcm91cCkgewotICAgICAgICAgICAgYXJncy5hZGQoImpvaW4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vVE9ETzogVGhpcyBjYW4gYmUgYWRhcHRlZCBiYXNlZCBvbiBkZXZpY2UgcGx1Z2dlZCBpbiBzdGF0ZSBhbmQKLSAgICAgICAgICAgIC8vZGV2aWNlIGJhdHRlcnkgc3RhdGUKLSAgICAgICAgICAgIGludCBncm91cE93bmVySW50ZW50ID0gY29uZmlnLmdyb3VwT3duZXJJbnRlbnQ7Ci0gICAgICAgICAgICBpZiAoZ3JvdXBPd25lckludGVudCA8IDAgfHwgZ3JvdXBPd25lckludGVudCA+IDE1KSB7Ci0gICAgICAgICAgICAgICAgZ3JvdXBPd25lckludGVudCA9IERFRkFVTFRfR1JPVVBfT1dORVJfSU5URU5UOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJncy5hZGQoImdvX2ludGVudD0iICsgZ3JvdXBPd25lckludGVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgY29tbWFuZCA9ICJQMlBfQ09OTkVDVCAiOwotICAgICAgICBmb3IgKFN0cmluZyBzIDogYXJncykgY29tbWFuZCArPSBzICsgIiAiOwotCi0gICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmQoY29tbWFuZCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcDJwQ2FuY2VsQ29ubmVjdCgpIHsKLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9DQU5DRUwiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBQcm92aXNpb25EaXNjb3ZlcnkoV2lmaVAycENvbmZpZyBjb25maWcpIHsKLSAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWcud3BzLnNldHVwKSB7Ci0gICAgICAgICAgICBjYXNlIFdwc0luZm8uUEJDOgotICAgICAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfUFJPVl9ESVNDICIgKyBjb25maWcuZGV2aWNlQWRkcmVzcyArICIgcGJjIik7Ci0gICAgICAgICAgICBjYXNlIFdwc0luZm8uRElTUExBWToKLSAgICAgICAgICAgICAgICAvL1dlIGFyZSBkb2luZyBkaXNwbGF5LCBzbyBwcm92aXNpb24gZGlzY292ZXJ5IGlzIGtleXBhZAotICAgICAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfUFJPVl9ESVNDICIgKyBjb25maWcuZGV2aWNlQWRkcmVzcyArICIga2V5cGFkIik7Ci0gICAgICAgICAgICBjYXNlIFdwc0luZm8uS0VZUEFEOgotICAgICAgICAgICAgICAgIC8vV2UgYXJlIGRvaW5nIGtleXBhZCwgc28gcHJvdmlzaW9uIGRpc2NvdmVyeSBpcyBkaXNwbGF5Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9QUk9WX0RJU0MgIiArIGNvbmZpZy5kZXZpY2VBZGRyZXNzICsgIiBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBHcm91cEFkZChib29sZWFuIHBlcnNpc3RlbnQpIHsKLSAgICAgICAgaWYgKHBlcnNpc3RlbnQpIHsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfR1JPVVBfQUREIHBlcnNpc3RlbnQiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX0dST1VQX0FERCIpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHAycEdyb3VwQWRkKGludCBuZXRJZCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX0dST1VQX0FERCBwZXJzaXN0ZW50PSIgKyBuZXRJZCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcDJwR3JvdXBSZW1vdmUoU3RyaW5nIGlmYWNlKSB7Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShpZmFjZSkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmROYXRpdmUoIklGTkFNRT0iICsgaWZhY2UgKyAiIFAyUF9HUk9VUF9SRU1PVkUgIiArIGlmYWNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHAycFJlamVjdChTdHJpbmcgZGV2aWNlQWRkcmVzcykgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX1JFSkVDVCAiICsgZGV2aWNlQWRkcmVzcyk7Ci0gICAgfQotCi0gICAgLyogSW52aXRlIGEgcGVlciB0byBhIGdyb3VwICovCi0gICAgcHVibGljIGJvb2xlYW4gcDJwSW52aXRlKFdpZmlQMnBHcm91cCBncm91cCwgU3RyaW5nIGRldmljZUFkZHJlc3MpIHsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGRldmljZUFkZHJlc3MpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGdyb3VwID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfSU5WSVRFIHBlZXI9IiArIGRldmljZUFkZHJlc3MpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9JTlZJVEUgZ3JvdXA9IiArIGdyb3VwLmdldEludGVyZmFjZSgpCi0gICAgICAgICAgICAgICAgICAgICsgIiBwZWVyPSIgKyBkZXZpY2VBZGRyZXNzICsgIiBnb19kZXZfYWRkcj0iICsgZ3JvdXAuZ2V0T3duZXIoKS5kZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFJlaW52b2tlIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uICovCi0gICAgcHVibGljIGJvb2xlYW4gcDJwUmVpbnZva2UoaW50IG5ldElkLCBTdHJpbmcgZGV2aWNlQWRkcmVzcykgewotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoZGV2aWNlQWRkcmVzcykgfHwgbmV0SWQgPCAwKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIGRvQm9vbGVhbkNvbW1hbmQoIlAyUF9JTlZJVEUgcGVyc2lzdGVudD0iICsgbmV0SWQgKyAiIHBlZXI9IiArIGRldmljZUFkZHJlc3MpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgcDJwR2V0U3NpZChTdHJpbmcgZGV2aWNlQWRkcmVzcykgewotICAgICAgICByZXR1cm4gcDJwR2V0UGFyYW0oZGV2aWNlQWRkcmVzcywgIm9wZXJfc3NpZCIpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgcDJwR2V0RGV2aWNlQWRkcmVzcygpIHsKLSAgICAgICAgU3RyaW5nIHN0YXR1cyA9IHN0YXR1cygpOwotICAgICAgICBpZiAoc3RhdHVzID09IG51bGwpIHJldHVybiAiIjsKLQotICAgICAgICBTdHJpbmdbXSB0b2tlbnMgPSBzdGF0dXMuc3BsaXQoIlxuIik7Ci0gICAgICAgIGZvciAoU3RyaW5nIHRva2VuIDogdG9rZW5zKSB7Ci0gICAgICAgICAgICBpZiAodG9rZW4uc3RhcnRzV2l0aCgicDJwX2RldmljZV9hZGRyZXNzPSIpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nW10gbmFtZVZhbHVlID0gdG9rZW4uc3BsaXQoIj0iKTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZVZhbHVlLmxlbmd0aCAhPSAyKSBicmVhazsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmFtZVZhbHVlWzFdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEdyb3VwQ2FwYWJpbGl0eShTdHJpbmcgZGV2aWNlQWRkcmVzcykgewotICAgICAgICBpbnQgZ2MgPSAwOwotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoZGV2aWNlQWRkcmVzcykpIHJldHVybiBnYzsKLSAgICAgICAgU3RyaW5nIHBlZXJJbmZvID0gcDJwUGVlcihkZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHBlZXJJbmZvKSkgcmV0dXJuIGdjOwotCi0gICAgICAgIFN0cmluZ1tdIHRva2VucyA9IHBlZXJJbmZvLnNwbGl0KCJcbiIpOwotICAgICAgICBmb3IgKFN0cmluZyB0b2tlbiA6IHRva2VucykgewotICAgICAgICAgICAgaWYgKHRva2VuLnN0YXJ0c1dpdGgoImdyb3VwX2NhcGFiPSIpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nW10gbmFtZVZhbHVlID0gdG9rZW4uc3BsaXQoIj0iKTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZVZhbHVlLmxlbmd0aCAhPSAyKSBicmVhazsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZWdlci5kZWNvZGUobmFtZVZhbHVlWzFdKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnYzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGdjOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgcDJwUGVlcihTdHJpbmcgZGV2aWNlQWRkcmVzcykgewotICAgICAgICByZXR1cm4gZG9TdHJpbmdDb21tYW5kKCJQMlBfUEVFUiAiICsgZGV2aWNlQWRkcmVzcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgcDJwR2V0UGFyYW0oU3RyaW5nIGRldmljZUFkZHJlc3MsIFN0cmluZyBrZXkpIHsKLSAgICAgICAgaWYgKGRldmljZUFkZHJlc3MgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgU3RyaW5nIHBlZXJJbmZvID0gcDJwUGVlcihkZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgaWYgKHBlZXJJbmZvID09IG51bGwpIHJldHVybiBudWxsOwotICAgICAgICBTdHJpbmdbXSB0b2tlbnM9IHBlZXJJbmZvLnNwbGl0KCJcbiIpOwotCi0gICAgICAgIGtleSArPSAiPSI7Ci0gICAgICAgIGZvciAoU3RyaW5nIHRva2VuIDogdG9rZW5zKSB7Ci0gICAgICAgICAgICBpZiAodG9rZW4uc3RhcnRzV2l0aChrZXkpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nW10gbmFtZVZhbHVlID0gdG9rZW4uc3BsaXQoIj0iKTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZVZhbHVlLmxlbmd0aCAhPSAyKSBicmVhazsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmFtZVZhbHVlWzFdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHAycFNlcnZpY2VBZGQoV2lmaVAycFNlcnZpY2VJbmZvIHNlcnZJbmZvKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFAyUF9TRVJWSUNFX0FERCBib25qb3VyIDxxdWVyeSBoZXhkdW1wPiA8UkRBVEEgaGV4ZHVtcD4KLSAgICAgICAgICogUDJQX1NFUlZJQ0VfQUREIHVwbnAgPHZlcnNpb24gaGV4PiA8c2VydmljZT4KLSAgICAgICAgICoKLSAgICAgICAgICogZS5nKQotICAgICAgICAgKiBbQm9uam91cl0KLSAgICAgICAgICogIyBJUCBQcmludGluZyBvdmVyIFRDUCAoUFRSKSAoUkRBVEE9TXlQcmludGVyLl9pcHAuX3RjcC5sb2NhbC4pCi0gICAgICAgICAqIFAyUF9TRVJWSUNFX0FERCBib25qb3VyIDA0NWY2OTcwNzBjMDBjMDAwYzAxIDA5NGQ3OTUwNzI2OTZlNzQ2NTcyYzAyNwotICAgICAgICAgKiAjIElQIFByaW50aW5nIG92ZXIgVENQIChUWFQpIChSREFUQT10eHR2ZXJzPTEscGRsPWFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQpCi0gICAgICAgICAqIFAyUF9TRVJWSUNFX0FERCBib25qb3VyIDA5NmQ3OTcwNzI2OTZlNzQ2NTcyMDQ1ZjY5NzA3MGMwMGMwMDEwMDEKLSAgICAgICAgICogIDA5NzQ3ODc0NzY2NTcyNzMzZDMxMWE3MDY0NmMzZDYxNzA3MDZjNjk2MzYxNzQ2OTZmNmUyZjcwNmY3Mzc0NzM2MzcyNzk3MDc0Ci0gICAgICAgICAqCi0gICAgICAgICAqIFtVUG5QXQotICAgICAgICAgKiBQMlBfU0VSVklDRV9BREQgdXBucCAxMCB1dWlkOjY4NTlkZWRlLTg1NzQtNTlhYi05MzMyLTEyMzQ1Njc4OTAxMgotICAgICAgICAgKiBQMlBfU0VSVklDRV9BREQgdXBucCAxMCB1dWlkOjY4NTlkZWRlLTg1NzQtNTlhYi05MzMyLTEyMzQ1Njc4OTAxMjo6dXBucDpyb290ZGV2aWNlCi0gICAgICAgICAqIFAyUF9TRVJWSUNFX0FERCB1cG5wIDEwIHV1aWQ6Njg1OWRlZGUtODU3NC01OWFiLTkzMzItMTIzNDU2Nzg5MDEyOjp1cm46c2NoZW1hcy11cG5wCi0gICAgICAgICAqIC1vcmc6ZGV2aWNlOkludGVybmV0R2F0ZXdheURldmljZToxCi0gICAgICAgICAqIFAyUF9TRVJWSUNFX0FERCB1cG5wIDEwIHV1aWQ6Njg1OWRlZGUtODU3NC01OWFiLTkzMjItMTIzNDU2Nzg5MDEyOjp1cm46c2NoZW1hcy11cG5wCi0gICAgICAgICAqIC1vcmc6c2VydmljZTpDb250ZW50RGlyZWN0b3J5OjIKLSAgICAgICAgICovCi0gICAgICAgIGZvciAoU3RyaW5nIHMgOiBzZXJ2SW5mby5nZXRTdXBwbGljYW50UXVlcnlMaXN0KCkpIHsKLSAgICAgICAgICAgIFN0cmluZyBjb21tYW5kID0gIlAyUF9TRVJWSUNFX0FERCI7Ci0gICAgICAgICAgICBjb21tYW5kICs9ICgiICIgKyBzKTsKLSAgICAgICAgICAgIGlmICghZG9Cb29sZWFuQ29tbWFuZChjb21tYW5kKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwMnBTZXJ2aWNlRGVsKFdpZmlQMnBTZXJ2aWNlSW5mbyBzZXJ2SW5mbykgewotICAgICAgICAvKgotICAgICAgICAgKiBQMlBfU0VSVklDRV9ERUwgYm9uam91ciA8cXVlcnkgaGV4ZHVtcD4KLSAgICAgICAgICogUDJQX1NFUlZJQ0VfREVMIHVwbnAgPHZlcnNpb24gaGV4PiA8c2VydmljZT4KLSAgICAgICAgICovCi0gICAgICAgIGZvciAoU3RyaW5nIHMgOiBzZXJ2SW5mby5nZXRTdXBwbGljYW50UXVlcnlMaXN0KCkpIHsKLSAgICAgICAgICAgIFN0cmluZyBjb21tYW5kID0gIlAyUF9TRVJWSUNFX0RFTCAiOwotCi0gICAgICAgICAgICBTdHJpbmdbXSBkYXRhID0gcy5zcGxpdCgiICIpOwotICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoIDwgMikgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgidXBucCIuZXF1YWxzKGRhdGFbMF0pKSB7Ci0gICAgICAgICAgICAgICAgY29tbWFuZCArPSBzOwotICAgICAgICAgICAgfSBlbHNlIGlmICgiYm9uam91ciIuZXF1YWxzKGRhdGFbMF0pKSB7Ci0gICAgICAgICAgICAgICAgY29tbWFuZCArPSBkYXRhWzBdOwotICAgICAgICAgICAgICAgIGNvbW1hbmQgKz0gKCIgIiArIGRhdGFbMV0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWRvQm9vbGVhbkNvbW1hbmQoY29tbWFuZCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcDJwU2VydmljZUZsdXNoKCkgewotICAgICAgICByZXR1cm4gZG9Cb29sZWFuQ29tbWFuZCgiUDJQX1NFUlZJQ0VfRkxVU0giKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHAycFNlcnZEaXNjUmVxKFN0cmluZyBhZGRyLCBTdHJpbmcgcXVlcnkpIHsKLSAgICAgICAgU3RyaW5nIGNvbW1hbmQgPSAiUDJQX1NFUlZfRElTQ19SRVEiOwotICAgICAgICBjb21tYW5kICs9ICgiICIgKyBhZGRyKTsKLSAgICAgICAgY29tbWFuZCArPSAoIiAiICsgcXVlcnkpOwotCi0gICAgICAgIHJldHVybiBkb1N0cmluZ0NvbW1hbmQoY29tbWFuZCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcDJwU2VydkRpc2NDYW5jZWxSZXEoU3RyaW5nIGlkKSB7Ci0gICAgICAgIHJldHVybiBkb0Jvb2xlYW5Db21tYW5kKCJQMlBfU0VSVl9ESVNDX0NBTkNFTF9SRVEgIiArIGlkKTsKLSAgICB9Ci0KLSAgICAvKiBTZXQgdGhlIGN1cnJlbnQgbW9kZSBvZiBtaXJhY2FzdCBvcGVyYXRpb24uCi0gICAgICogIDAgPSBkaXNhYmxlZAotICAgICAqICAxID0gb3BlcmF0aW5nIGFzIHNvdXJjZQotICAgICAqICAyID0gb3BlcmF0aW5nIGFzIHNpbmsKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRNaXJhY2FzdE1vZGUoaW50IG1vZGUpIHsKLSAgICAgICAgLy8gTm90ZTogb3B0aW9uYWwgZmVhdHVyZSBvbiB0aGUgZHJpdmVyLiBJdCBpcyBvayBmb3IgdGhpcyB0byBmYWlsLgotICAgICAgICBkb0Jvb2xlYW5Db21tYW5kKCJEUklWRVIgTUlSQUNBU1QgIiArIG1vZGUpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlTc2lkLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpU3NpZC5qYXZhCmluZGV4IGEzNWEzNGIuLmY4YmE5NWQgMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlTc2lkLmphdmEKKysrIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaVNzaWQuamF2YQpAQCAtMTYsOSArMTYsOCBAQAogCiBwYWNrYWdlIGFuZHJvaWQubmV0LndpZmk7CiAKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiAKIGltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwpAQCAtNDIsNyArNDEsNyBAQAogcHVibGljIGNsYXNzIFdpZmlTc2lkIGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXaWZpU3NpZCI7CiAKLSAgICBwdWJsaWMgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG9jdGV0cyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oMzIpOworICAgIHB1YmxpYyBmaW5hbCBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb2N0ZXRzID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgzMik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEVYX1JBRElYID0gMTY7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ORSA9ICI8dW5rbm93biBzc2lkPiI7CkBAIC01OCw3ICs1Nyw2IEBACiAKICAgICBwdWJsaWMgc3RhdGljIFdpZmlTc2lkIGNyZWF0ZUZyb21IZXgoU3RyaW5nIGhleFN0cikgewogICAgICAgICBXaWZpU3NpZCBhID0gbmV3IFdpZmlTc2lkKCk7Ci0gICAgICAgIGludCBsZW5ndGggPSAwOwogICAgICAgICBpZiAoaGV4U3RyID09IG51bGwpIHJldHVybiBhOwogCiAgICAgICAgIGlmIChoZXhTdHIuc3RhcnRzV2l0aCgiMHgiKSB8fCBoZXhTdHIuc3RhcnRzV2l0aCgiMFgiKSkgewpAQCAtMTkxLDggKzE4OSwxMyBAQAogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBib29sZWFuIGlzSGlkZGVuKCkgeworICAgICAgICByZXR1cm4gaXNBcnJheUFsbFplcm9lcyhvY3RldHMudG9CeXRlQXJyYXkoKSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCiAgICAgcHVibGljIGJ5dGVbXSBnZXRPY3RldHMoKSB7Ci0gICAgICAgIHJldHVybiAgb2N0ZXRzLnRvQnl0ZUFycmF5KCk7CisgICAgICAgIHJldHVybiBvY3RldHMudG9CeXRlQXJyYXkoKTsKICAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KZGlmZiAtLWdpdCBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlTdGF0ZU1hY2hpbmUuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlTdGF0ZU1hY2hpbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlkM2VmZS4uMDAwMDAwMAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpU3RhdGVNYWNoaW5lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQubmV0LndpZmk7Ci0KLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX1NUQVRFX0RJU0FCTEVEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyLldJRklfU1RBVEVfRElTQUJMSU5HOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyLldJRklfU1RBVEVfRU5BQkxFRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX1NUQVRFX0VOQUJMSU5HOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyLldJRklfU1RBVEVfVU5LTk9XTjsKLQotLyoqCi0gKiBUT0RPOgotICogRGVwcmVjYXRlIFdJRklfU1RBVEVfVU5LTk9XTgotICovCi1pbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9BUF9TVEFURV9ESVNBQkxFRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX0FQX1NUQVRFX0RJU0FCTElORzsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX0FQX1NUQVRFX0VOQUJMRUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXIuV0lGSV9BUF9TVEFURV9FTkFCTElORzsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlci5XSUZJX0FQX1NUQVRFX0ZBSUxFRDsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFsYXJtTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuYXBwLmJhY2t1cC5JQmFja3VwTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhBZGFwdGVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ29udGVudE9ic2VydmVyOwotaW1wb3J0IGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuRGhjcFJlc3VsdHM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuRGhjcFN0YXRlTWFjaGluZTsKLWltcG9ydCBhbmRyb2lkLm5ldC5JbnRlcmZhY2VDb25maWd1cmF0aW9uOwotaW1wb3J0IGFuZHJvaWQubmV0LkxpbmtBZGRyZXNzOwotaW1wb3J0IGFuZHJvaWQubmV0LkxpbmtQcm9wZXJ0aWVzOwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtJbmZvOwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtJbmZvLkRldGFpbGVkU3RhdGU7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya1V0aWxzOwotaW1wb3J0IGFuZHJvaWQubmV0LlJvdXRlSW5mbzsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldwc1Jlc3VsdC5TdGF0dXM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycE1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycFNlcnZpY2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CYXR0ZXJ5U3RhdHM7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSU5ldHdvcmtNYW5hZ2VtZW50U2VydmljZTsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzZW5nZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qb3dlck1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuV29ya1NvdXJjZTsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxydUNhY2hlOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JQmF0dGVyeVN0YXRzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuQXN5bmNDaGFubmVsOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJvdG9jb2w7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlN0YXRlTWFjaGluZTsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5uZXQuQmFzZU5ldHdvcmtPYnNlcnZlcjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKLWltcG9ydCBqYXZhLm5ldC5JbmV0NkFkZHJlc3M7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotLyoqCi0gKiBUcmFjayB0aGUgc3RhdGUgb2YgV2lmaSBjb25uZWN0aXZpdHkuIEFsbCBldmVudCBoYW5kbGluZyBpcyBkb25lIGhlcmUsCi0gKiBhbmQgYWxsIGNoYW5nZXMgaW4gY29ubmVjdGl2aXR5IHN0YXRlIGFyZSBpbml0aWF0ZWQgaGVyZS4KLSAqCi0gKiBXaS1GaSBub3cgc3VwcG9ydHMgdGhyZWUgbW9kZXMgb2Ygb3BlcmF0aW9uOiBDbGllbnQsIFNvZnRBcCBhbmQgcDJwCi0gKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgd2Ugc3VwcG9ydCBjb25jdXJyZW50IHdpZmkgcDJwIGFuZCB3aWZpIG9wZXJhdGlvbi4KLSAqIFRoZSBXaWZpU3RhdGVNYWNoaW5lIGhhbmRsZXMgU29mdEFwIGFuZCBDbGllbnQgb3BlcmF0aW9ucyB3aGlsZSBXaWZpUDJwU2VydmljZQotICogaGFuZGxlcyBwMnAgb3BlcmF0aW9uLgotICoKLSAqIEBoaWRlCi0gKi8KLXB1YmxpYyBjbGFzcyBXaWZpU3RhdGVNYWNoaW5lIGV4dGVuZHMgU3RhdGVNYWNoaW5lIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBORVRXT1JLVFlQRSA9ICJXSUZJIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERCRyA9IGZhbHNlOwotCi0gICAgcHJpdmF0ZSBXaWZpTW9uaXRvciBtV2lmaU1vbml0b3I7Ci0gICAgcHJpdmF0ZSBXaWZpTmF0aXZlIG1XaWZpTmF0aXZlOwotICAgIHByaXZhdGUgV2lmaUNvbmZpZ1N0b3JlIG1XaWZpQ29uZmlnU3RvcmU7Ci0gICAgcHJpdmF0ZSBJTmV0d29ya01hbmFnZW1lbnRTZXJ2aWNlIG1Od1NlcnZpY2U7Ci0gICAgcHJpdmF0ZSBDb25uZWN0aXZpdHlNYW5hZ2VyIG1DbTsKLQotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtUDJwU3VwcG9ydGVkOwotICAgIHByaXZhdGUgZmluYWwgQXRvbWljQm9vbGVhbiBtUDJwQ29ubmVjdGVkID0gbmV3IEF0b21pY0Jvb2xlYW4oZmFsc2UpOwotICAgIHByaXZhdGUgYm9vbGVhbiBtVGVtcG9yYXJpbHlEaXNjb25uZWN0V2lmaSA9IGZhbHNlOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1QcmltYXJ5RGV2aWNlVHlwZTsKLQotICAgIC8qIFNjYW4gcmVzdWx0cyBoYW5kbGluZyAqLwotICAgIHByaXZhdGUgTGlzdDxTY2FuUmVzdWx0PiBtU2NhblJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0PFNjYW5SZXN1bHQ+KCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBzY2FuUmVzdWx0UGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSgiXHQrIik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDQU5fUkVTVUxUX0NBQ0hFX1NJWkUgPSA4MDsKLSAgICBwcml2YXRlIGZpbmFsIExydUNhY2hlPFN0cmluZywgU2NhblJlc3VsdD4gbVNjYW5SZXN1bHRDYWNoZTsKLQotICAgIC8qIEJhdGNoIHNjYW4gcmVzdWx0cyAqLwotICAgIHByaXZhdGUgZmluYWwgTGlzdDxCYXRjaGVkU2NhblJlc3VsdD4gbUJhdGNoZWRTY2FuUmVzdWx0cyA9Ci0gICAgICAgICAgICBuZXcgQXJyYXlMaXN0PEJhdGNoZWRTY2FuUmVzdWx0PigpOwotICAgIHByaXZhdGUgaW50IG1CYXRjaGVkU2Nhbk93bmVyVWlkID0gVU5LTk9XTl9TQ0FOX1NPVVJDRTsKLSAgICBwcml2YXRlIGludCBtRXhwZWN0ZWRCYXRjaGVkU2NhbnMgPSAwOwotICAgIHByaXZhdGUgbG9uZyBtQmF0Y2hlZFNjYW5NaW5Qb2xsVGltZSA9IDA7Ci0KLSAgICAvKiBDaGlwc2V0IHN1cHBvcnRzIGJhY2tncm91bmQgc2NhbiAqLwotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtQmFja2dyb3VuZFNjYW5TdXBwb3J0ZWQ7Ci0KLSAgICBwcml2YXRlIFN0cmluZyBtSW50ZXJmYWNlTmFtZTsKLSAgICAvKiBUZXRoZXJpbmcgaW50ZXJmYWNlIGNvdWxkIGJlIHNlcGFyYXRlIGZyb20gd2xhbiBpbnRlcmZhY2UgKi8KLSAgICBwcml2YXRlIFN0cmluZyBtVGV0aGVySW50ZXJmYWNlTmFtZTsKLQotICAgIHByaXZhdGUgaW50IG1MYXN0U2lnbmFsTGV2ZWwgPSAtMTsKLSAgICBwcml2YXRlIFN0cmluZyBtTGFzdEJzc2lkOwotICAgIHByaXZhdGUgaW50IG1MYXN0TmV0d29ya0lkOwotICAgIHByaXZhdGUgYm9vbGVhbiBtRW5hYmxlUnNzaVBvbGxpbmcgPSBmYWxzZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbUVuYWJsZUJhY2tncm91bmRTY2FuID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSBpbnQgbVJzc2lQb2xsVG9rZW4gPSAwOwotICAgIHByaXZhdGUgaW50IG1SZWNvbm5lY3RDb3VudCA9IDA7Ci0gICAgLyogMyBvcGVyYXRpb25hbCBzdGF0ZXMgZm9yIFNUQSBvcGVyYXRpb246IENPTk5FQ1RfTU9ERSwgU0NBTl9PTkxZX01PREUsIFNDQU5fT05MWV9XSUZJX09GRl9NT0RFCi0gICAgKiBJbiBDT05ORUNUX01PREUsIHRoZSBTVEEgY2FuIHNjYW4gYW5kIGNvbm5lY3QgdG8gYW4gYWNjZXNzIHBvaW50Ci0gICAgKiBJbiBTQ0FOX09OTFlfTU9ERSwgdGhlIFNUQSBjYW4gb25seSBzY2FuIGZvciBhY2Nlc3MgcG9pbnRzCi0gICAgKiBJbiBTQ0FOX09OTFlfV0lGSV9PRkZfTU9ERSwgdGhlIFNUQSBjYW4gb25seSBzY2FuIGZvciBhY2Nlc3MgcG9pbnRzIHdpdGggd2lmaSB0b2dnbGUgYmVpbmcgb2ZmCi0gICAgKi8KLSAgICBwcml2YXRlIGludCBtT3BlcmF0aW9uYWxNb2RlID0gQ09OTkVDVF9NT0RFOwotICAgIHByaXZhdGUgYm9vbGVhbiBtU2NhblJlc3VsdElzUGVuZGluZyA9IGZhbHNlOwotICAgIHByaXZhdGUgV29ya1NvdXJjZSBtU2NhbldvcmtTb3VyY2UgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVTktOT1dOX1NDQU5fU09VUkNFID0gLTE7Ci0gICAgLyogVHJhY2tzIGlmIHN0YXRlIG1hY2hpbmUgaGFzIHJlY2VpdmVkIGFueSBzY3JlZW4gc3RhdGUgY2hhbmdlIGJyb2FkY2FzdCB5ZXQuCi0gICAgICogV2UgY2FuIG1pc3Mgb25lIG9mIHRoZXNlIGF0IGJvb3QuCi0gICAgICovCi0gICAgcHJpdmF0ZSBBdG9taWNCb29sZWFuIG1TY3JlZW5Ccm9hZGNhc3RSZWNlaXZlZCA9IG5ldyBBdG9taWNCb29sZWFuKGZhbHNlKTsKLQotICAgIHByaXZhdGUgYm9vbGVhbiBtQmx1ZXRvb3RoQ29ubmVjdGlvbkFjdGl2ZSA9IGZhbHNlOwotCi0gICAgcHJpdmF0ZSBQb3dlck1hbmFnZXIuV2FrZUxvY2sgbVN1c3BlbmRXYWtlTG9jazsKLQotICAgIC8qKgotICAgICAqIEludGVydmFsIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHBvbGxpbmcgZm9yIFJTU0kKLSAgICAgKiBhbmQgbGlua3NwZWVkIGluZm9ybWF0aW9uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBPTExfUlNTSV9JTlRFUlZBTF9NU0VDUyA9IDMwMDA7Ci0KLSAgICAvKioKLSAgICAgKiBEZWxheSBiZXR3ZWVuIHN1cHBsaWNhbnQgcmVzdGFydHMgdXBvbiBmYWlsdXJlIHRvIGVzdGFibGlzaCBjb25uZWN0aW9uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNVUFBMSUNBTlRfUkVTVEFSVF9JTlRFUlZBTF9NU0VDUyA9IDUwMDA7Ci0KLSAgICAvKioKLSAgICAgKiBOdW1iZXIgb2YgdGltZXMgd2UgYXR0ZW1wdCB0byByZXN0YXJ0IHN1cHBsaWNhbnQKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1VQUExJQ0FOVF9SRVNUQVJUX1RSSUVTID0gNTsKLQotICAgIHByaXZhdGUgaW50IG1TdXBwbGljYW50UmVzdGFydENvdW50ID0gMDsKLSAgICAvKiBUcmFja3Mgc2VxdWVuY2UgbnVtYmVyIG9uIHN0b3AgZmFpbHVyZSBtZXNzYWdlICovCi0gICAgcHJpdmF0ZSBpbnQgbVN1cHBsaWNhbnRTdG9wRmFpbHVyZVRva2VuID0gMDsKLQotICAgIC8qKgotICAgICAqIFRldGhlciBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIHRpbWUgb3V0Ci0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRFVEhFUl9OT1RJRklDQVRJT05fVElNRV9PVVRfTVNFQ1MgPSA1MDAwOwotCi0gICAgLyogVHJhY2tzIHNlcXVlbmNlIG51bWJlciBvbiBhIHRldGhlciBub3RpZmljYXRpb24gdGltZSBvdXQgKi8KLSAgICBwcml2YXRlIGludCBtVGV0aGVyVG9rZW4gPSAwOwotCi0gICAgLyoqCi0gICAgICogRHJpdmVyIHN0YXJ0IHRpbWUgb3V0LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEUklWRVJfU1RBUlRfVElNRV9PVVRfTVNFQ1MgPSAxMDAwMDsKLQotICAgIC8qIFRyYWNrcyBzZXF1ZW5jZSBudW1iZXIgb24gYSBkcml2ZXIgdGltZSBvdXQgKi8KLSAgICBwcml2YXRlIGludCBtRHJpdmVyU3RhcnRUb2tlbiA9IDA7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbGluayBwcm9wZXJ0aWVzIG9mIHRoZSB3aWZpIGludGVyZmFjZS4KLSAgICAgKiBEbyBub3QgbW9kaWZ5IHRoaXMgZGlyZWN0bHk7IHVzZSB1cGRhdGVMaW5rUHJvcGVydGllcyBpbnN0ZWFkLgotICAgICAqLwotICAgIHByaXZhdGUgTGlua1Byb3BlcnRpZXMgbUxpbmtQcm9wZXJ0aWVzOwotCi0gICAgLyoqCi0gICAgICogU3Vic2V0IG9mIGxpbmsgcHJvcGVydGllcyBjb21pbmcgZnJvbSBuZXRsaW5rLgotICAgICAqIEN1cnJlbnRseSBpbmNsdWRlcyBJUHY0IGFuZCBJUHY2IGFkZHJlc3Nlcy4gSW4gdGhlIGZ1dHVyZSB3aWxsIGFsc28gaW5jbHVkZSBJUHY2IEROUyBzZXJ2ZXJzCi0gICAgICogYW5kIGRvbWFpbnMgb2J0YWluZWQgZnJvbSByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMgKFJGQyA2MTA2KS4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIExpbmtQcm9wZXJ0aWVzIG1OZXRsaW5rTGlua1Byb3BlcnRpZXM7Ci0KLSAgICAvKiBUcmFja3Mgc2VxdWVuY2UgbnVtYmVyIG9uIGEgcGVyaW9kaWMgc2NhbiBtZXNzYWdlICovCi0gICAgcHJpdmF0ZSBpbnQgbVBlcmlvZGljU2NhblRva2VuID0gMDsKLQotICAgIC8vIFdha2Vsb2NrIGhlbGQgZHVyaW5nIHdpZmkgc3RhcnQvc3RvcCBhbmQgZHJpdmVyIGxvYWQvdW5sb2FkCi0gICAgcHJpdmF0ZSBQb3dlck1hbmFnZXIuV2FrZUxvY2sgbVdha2VMb2NrOwotCi0gICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbURoY3BSZXN1bHRzTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBwcml2YXRlIERoY3BSZXN1bHRzIG1EaGNwUmVzdWx0czsKLSAgICBwcml2YXRlIFdpZmlJbmZvIG1XaWZpSW5mbzsKLSAgICBwcml2YXRlIE5ldHdvcmtJbmZvIG1OZXR3b3JrSW5mbzsKLSAgICBwcml2YXRlIFN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIgbVN1cHBsaWNhbnRTdGF0ZVRyYWNrZXI7Ci0gICAgcHJpdmF0ZSBEaGNwU3RhdGVNYWNoaW5lIG1EaGNwU3RhdGVNYWNoaW5lOwotICAgIHByaXZhdGUgYm9vbGVhbiBtRGhjcEFjdGl2ZSA9IGZhbHNlOwotCi0gICAgcHJpdmF0ZSBjbGFzcyBJbnRlcmZhY2VPYnNlcnZlciBleHRlbmRzIEJhc2VOZXR3b3JrT2JzZXJ2ZXIgewotICAgICAgICBwcml2YXRlIFdpZmlTdGF0ZU1hY2hpbmUgbVdpZmlTdGF0ZU1hY2hpbmU7Ci0KLSAgICAgICAgSW50ZXJmYWNlT2JzZXJ2ZXIoV2lmaVN0YXRlTWFjaGluZSB3aWZpU3RhdGVNYWNoaW5lKSB7Ci0gICAgICAgICAgICBzdXBlcigpOwotICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUgPSB3aWZpU3RhdGVNYWNoaW5lOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIG1heWJlTG9nKFN0cmluZyBvcGVyYXRpb24sIFN0cmluZyBpZmFjZSwgTGlua0FkZHJlc3MgYWRkcmVzcykgewotICAgICAgICAgICAgaWYgKERCRykgewotICAgICAgICAgICAgICAgIGxvZyhvcGVyYXRpb24gKyAiOiAiICsgYWRkcmVzcyArICIgb24gIiArIGlmYWNlICsKLSAgICAgICAgICAgICAgICAgICAgIiBmbGFncyAiICsgYWRkcmVzcy5nZXRGbGFncygpICsgIiBzY29wZSAiICsgYWRkcmVzcy5nZXRTY29wZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBhZGRyZXNzVXBkYXRlZChTdHJpbmcgaWZhY2UsIExpbmtBZGRyZXNzIGFkZHJlc3MpIHsKLSAgICAgICAgICAgIGlmIChtV2lmaVN0YXRlTWFjaGluZS5tSW50ZXJmYWNlTmFtZS5lcXVhbHMoaWZhY2UpKSB7Ci0gICAgICAgICAgICAgICAgbWF5YmVMb2coImFkZHJlc3NVcGRhdGVkIiwgaWZhY2UsIGFkZHJlc3MpOwotICAgICAgICAgICAgICAgIG1XaWZpU3RhdGVNYWNoaW5lLnNlbmRNZXNzYWdlKENNRF9JUF9BRERSRVNTX1VQREFURUQsIGFkZHJlc3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGFkZHJlc3NSZW1vdmVkKFN0cmluZyBpZmFjZSwgTGlua0FkZHJlc3MgYWRkcmVzcykgewotICAgICAgICAgICAgaWYgKG1XaWZpU3RhdGVNYWNoaW5lLm1JbnRlcmZhY2VOYW1lLmVxdWFscyhpZmFjZSkpIHsKLSAgICAgICAgICAgICAgICBtYXliZUxvZygiYWRkcmVzc1JlbW92ZWQiLCBpZmFjZSwgYWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgbVdpZmlTdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoQ01EX0lQX0FERFJFU1NfUkVNT1ZFRCwgYWRkcmVzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIEludGVyZmFjZU9ic2VydmVyIG1JbnRlcmZhY2VPYnNlcnZlcjsKLQotICAgIHByaXZhdGUgQWxhcm1NYW5hZ2VyIG1BbGFybU1hbmFnZXI7Ci0gICAgcHJpdmF0ZSBQZW5kaW5nSW50ZW50IG1TY2FuSW50ZW50OwotICAgIHByaXZhdGUgUGVuZGluZ0ludGVudCBtRHJpdmVyU3RvcEludGVudDsKLSAgICBwcml2YXRlIFBlbmRpbmdJbnRlbnQgbUJhdGNoZWRTY2FuSW50ZXJ2YWxJbnRlbnQ7Ci0KLSAgICAvKiBUcmFja3MgY3VycmVudCBmcmVxdWVuY3kgbW9kZSAqLwotICAgIHByaXZhdGUgQXRvbWljSW50ZWdlciBtRnJlcXVlbmN5QmFuZCA9IG5ldyBBdG9taWNJbnRlZ2VyKFdpZmlNYW5hZ2VyLldJRklfRlJFUVVFTkNZX0JBTkRfQVVUTyk7Ci0KLSAgICAvKiBUcmFja3MgaWYgd2UgYXJlIGZpbHRlcmluZyBNdWx0aWNhc3QgdjQgcGFja2V0cy4gRGVmYXVsdCBpcyB0byBmaWx0ZXIuICovCi0gICAgcHJpdmF0ZSBBdG9taWNCb29sZWFuIG1GaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMgPSBuZXcgQXRvbWljQm9vbGVhbih0cnVlKTsKLQotICAgIC8vIENoYW5uZWwgZm9yIHNlbmRpbmcgcmVwbGllcy4KLSAgICBwcml2YXRlIEFzeW5jQ2hhbm5lbCBtUmVwbHlDaGFubmVsID0gbmV3IEFzeW5jQ2hhbm5lbCgpOwotCi0gICAgcHJpdmF0ZSBXaWZpUDJwTWFuYWdlciBtV2lmaVAycE1hbmFnZXI7Ci0gICAgLy9Vc2VkIHRvIGluaXRpYXRlIGEgY29ubmVjdGlvbiB3aXRoIFdpZmlQMnBTZXJ2aWNlCi0gICAgcHJpdmF0ZSBBc3luY0NoYW5uZWwgbVdpZmlQMnBDaGFubmVsOwotICAgIHByaXZhdGUgQXN5bmNDaGFubmVsIG1XaWZpQXBDb25maWdDaGFubmVsOwotCi0gICAgLyogVGhlIGJhc2UgZm9yIHdpZmkgbWVzc2FnZSB0eXBlcyAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQkFTRSA9IFByb3RvY29sLkJBU0VfV0lGSTsKLSAgICAvKiBTdGFydCB0aGUgc3VwcGxpY2FudCAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUQVJUX1NVUFBMSUNBTlQgICAgICAgICAgICAgICAgID0gQkFTRSArIDExOwotICAgIC8qIFN0b3AgdGhlIHN1cHBsaWNhbnQgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TVE9QX1NVUFBMSUNBTlQgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAxMjsKLSAgICAvKiBTdGFydCB0aGUgZHJpdmVyICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RBUlRfRFJJVkVSICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMTM7Ci0gICAgLyogU3RvcCB0aGUgZHJpdmVyICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RPUF9EUklWRVIgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgMTQ7Ci0gICAgLyogSW5kaWNhdGVzIFN0YXRpYyBJUCBzdWNjZWVkZWQgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TVEFUSUNfSVBfU1VDQ0VTUyAgICAgICAgICAgICAgICA9IEJBU0UgKyAxNTsKLSAgICAvKiBJbmRpY2F0ZXMgU3RhdGljIElQIGZhaWxlZCAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUQVRJQ19JUF9GQUlMVVJFICAgICAgICAgICAgICAgID0gQkFTRSArIDE2OwotICAgIC8qIEluZGljYXRlcyBzdXBwbGljYW50IHN0b3AgZmFpbGVkICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU1RPUF9TVVBQTElDQU5UX0ZBSUxFRCAgICAgICAgICAgPSBCQVNFICsgMTc7Ci0gICAgLyogRGVsYXllZCBzdG9wIHRvIGF2b2lkIHNodXR0aW5nIGRvd24gZHJpdmVyIHRvbyBxdWljayovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfREVMQVlFRF9TVE9QX0RSSVZFUiAgICAgICAgICAgICAgPSBCQVNFICsgMTg7Ci0gICAgLyogQSBkZWxheWVkIG1lc3NhZ2Ugc2VudCB0byBzdGFydCBkcml2ZXIgd2hlbiBpdCBmYWlsIHRvIGNvbWUgdXAgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9EUklWRVJfU1RBUlRfVElNRURfT1VUICAgICAgICAgICA9IEJBU0UgKyAxOTsKLSAgICAvKiBSZWFkeSB0byBzd2l0Y2ggdG8gbmV0d29yayBhcyBkZWZhdWx0ICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfQ0FQVElWRV9DSEVDS19DT01QTEVURSAgICAgICAgICAgPSBCQVNFICsgMjA7Ci0KLSAgICAvKiBTdGFydCB0aGUgc29mdCBhY2Nlc3MgcG9pbnQgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TVEFSVF9BUCAgICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAyMTsKLSAgICAvKiBJbmRpY2F0ZXMgc29mdCBhcCBzdGFydCBzdWNjZWVkZWQgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TVEFSVF9BUF9TVUNDRVNTICAgICAgICAgICAgICAgICA9IEJBU0UgKyAyMjsKLSAgICAvKiBJbmRpY2F0ZXMgc29mdCBhcCBzdGFydCBmYWlsZWQgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TVEFSVF9BUF9GQUlMVVJFICAgICAgICAgICAgICAgICA9IEJBU0UgKyAyMzsKLSAgICAvKiBTdG9wIHRoZSBzb2Z0IGFjY2VzcyBwb2ludCAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUT1BfQVAgICAgICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDI0OwotICAgIC8qIFNldCB0aGUgc29mdCBhY2Nlc3MgcG9pbnQgY29uZmlndXJhdGlvbiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NFVF9BUF9DT05GSUcgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDI1OwotICAgIC8qIFNvZnQgYWNjZXNzIHBvaW50IGNvbmZpZ3VyYXRpb24gc2V0IGNvbXBsZXRlZCAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NFVF9BUF9DT05GSUdfQ09NUExFVEVEICAgICAgICAgID0gQkFTRSArIDI2OwotICAgIC8qIFJlcXVlc3QgdGhlIHNvZnQgYWNjZXNzIHBvaW50IGNvbmZpZ3VyYXRpb24gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9SRVFVRVNUX0FQX0NPTkZJRyAgICAgICAgICAgICAgICA9IEJBU0UgKyAyNzsKLSAgICAvKiBSZXNwb25zZSB0byBhY2Nlc3MgcG9pbnQgY29uZmlndXJhdGlvbiByZXF1ZXN0ICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfUkVTUE9OU0VfQVBfQ09ORklHICAgICAgICAgICAgICAgPSBCQVNFICsgMjg7Ci0gICAgLyogSW52b2tlZCB3aGVuIGdldHRpbmcgYSB0ZXRoZXIgc3RhdGUgY2hhbmdlIG5vdGlmaWNhdGlvbiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1RFVEhFUl9TVEFURV9DSEFOR0UgICAgICAgICAgICAgID0gQkFTRSArIDI5OwotICAgIC8qIEEgZGVsYXllZCBtZXNzYWdlIHNlbnQgdG8gaW5kaWNhdGUgdGV0aGVyIHN0YXRlIGNoYW5nZSBmYWlsZWQgdG8gYXJyaXZlICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfVEVUSEVSX05PVElGSUNBVElPTl9USU1FRF9PVVQgICAgPSBCQVNFICsgMzA7Ci0KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9CTFVFVE9PVEhfQURBUFRFUl9TVEFURV9DSEFOR0UgICA9IEJBU0UgKyAzMTsKLQotICAgIC8qIFN1cHBsaWNhbnQgY29tbWFuZHMgKi8KLSAgICAvKiBJcyBzdXBwbGljYW50IGFsaXZlID8gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9QSU5HX1NVUFBMSUNBTlQgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA1MTsKLSAgICAvKiBBZGQvdXBkYXRlIGEgbmV0d29yayBjb25maWd1cmF0aW9uICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfQUREX09SX1VQREFURV9ORVRXT1JLICAgICAgICAgICAgPSBCQVNFICsgNTI7Ci0gICAgLyogRGVsZXRlIGEgbmV0d29yayAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1JFTU9WRV9ORVRXT1JLICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDUzOwotICAgIC8qIEVuYWJsZSBhIG5ldHdvcmsuIFRoZSBkZXZpY2Ugd2lsbCBhdHRlbXB0IGEgY29ubmVjdGlvbiB0byB0aGUgZ2l2ZW4gbmV0d29yay4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9FTkFCTEVfTkVUV09SSyAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA1NDsKLSAgICAvKiBFbmFibGUgYWxsIG5ldHdvcmtzICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfRU5BQkxFX0FMTF9ORVRXT1JLUyAgICAgICAgICAgICAgPSBCQVNFICsgNTU7Ci0gICAgLyogQmxhY2tsaXN0IG5ldHdvcmsuIERlLXByaW9yaXRpemVzIHRoZSBnaXZlbiBCU1NJRCBmb3IgY29ubmVjdGlvbi4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9CTEFDS0xJU1RfTkVUV09SSyAgICAgICAgICAgICAgICA9IEJBU0UgKyA1NjsKLSAgICAvKiBDbGVhciB0aGUgYmxhY2tsaXN0IG5ldHdvcmsgbGlzdCAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0NMRUFSX0JMQUNLTElTVCAgICAgICAgICAgICAgICAgID0gQkFTRSArIDU3OwotICAgIC8qIFNhdmUgY29uZmlndXJhdGlvbiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NBVkVfQ09ORklHICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDU4OwotICAgIC8qIEdldCBjb25maWd1cmVkIG5ldHdvcmtzKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9HRVRfQ09ORklHVVJFRF9ORVRXT1JLUyAgICAgICAgICA9IEJBU0UgKyA1OTsKLQotICAgIC8qIFN1cHBsaWNhbnQgY29tbWFuZHMgYWZ0ZXIgZHJpdmVyIHN0YXJ0Ki8KLSAgICAvKiBJbml0aWF0ZSBhIHNjYW4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TVEFSVF9TQ0FOICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA3MTsKLSAgICAvKiBTZXQgb3BlcmF0aW9uYWwgbW9kZS4gQ09OTkVDVCwgU0NBTiBPTkxZLCBTQ0FOX09OTFkgd2l0aCBXaS1GaSBvZmYgbW9kZSAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFICAgICAgICAgICAgID0gQkFTRSArIDcyOwotICAgIC8qIERpc2Nvbm5lY3QgZnJvbSBhIG5ldHdvcmsgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9ESVNDT05ORUNUICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA3MzsKLSAgICAvKiBSZWNvbm5lY3QgdG8gYSBuZXR3b3JrICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfUkVDT05ORUNUICAgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgNzQ7Ci0gICAgLyogUmVhc3NvY2lhdGUgdG8gYSBuZXR3b3JrICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfUkVBU1NPQ0lBVEUgICAgICAgICAgICAgICAgICAgICAgPSBCQVNFICsgNzU7Ci0gICAgLyogQ29udHJvbHMgc3VzcGVuZCBtb2RlIG9wdGltaXphdGlvbnMKLSAgICAgKgotICAgICAqIFdoZW4gaGlnaCBwZXJmIG1vZGUgaXMgZW5hYmxlZCwgc3VzcGVuZCBtb2RlIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkCi0gICAgICoKLSAgICAgKiBXaGVuIGhpZ2ggcGVyZiBtb2RlIGlzIGRpc2FibGVkLCBzdXNwZW5kIG1vZGUgb3B0aW1pemF0aW9ucyBhcmUgZW5hYmxlZAotICAgICAqCi0gICAgICogU3VzcGVuZCBtb2RlIG9wdGltaXphdGlvbnMgaW5jbHVkZToKLSAgICAgKiAtIHBhY2tldCBmaWx0ZXJpbmcKLSAgICAgKiAtIHR1cm4gb2ZmIHJvYW1pbmcKLSAgICAgKiAtIERUSU0gd2FrZSB1cCBzZXR0aW5ncwotICAgICAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NFVF9ISUdIX1BFUkZfTU9ERSAgICAgICAgICAgICAgID0gQkFTRSArIDc3OwotICAgIC8qIFNldCB0aGUgY291bnRyeSBjb2RlICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU0VUX0NPVU5UUllfQ09ERSAgICAgICAgICAgICAgICAgPSBCQVNFICsgODA7Ci0gICAgLyogRW5hYmxlcyBSU1NJIHBvbGwgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9FTkFCTEVfUlNTSV9QT0xMICAgICAgICAgICAgICAgICA9IEJBU0UgKyA4MjsKLSAgICAvKiBSU1NJIHBvbGwgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9SU1NJX1BPTEwgICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA4MzsKLSAgICAvKiBTZXQgdXAgcGFja2V0IGZpbHRlcmluZyAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkcgICAgICAgICAgID0gQkFTRSArIDg0OwotICAgIC8qIENsZWFyIHBhY2tldCBmaWx0ZXIgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9TVE9QX1BBQ0tFVF9GSUxURVJJTkcgICAgICAgICAgICA9IEJBU0UgKyA4NTsKLSAgICAvKiBFbmFibGUgc3VzcGVuZCBtb2RlIG9wdGltaXphdGlvbnMgaW4gdGhlIGRyaXZlciAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NFVF9TVVNQRU5EX09QVF9FTkFCTEVEICAgICAgICAgID0gQkFTRSArIDg2OwotICAgIC8qIFdoZW4gdGhlcmUgYXJlIG5vIHNhdmVkIG5ldHdvcmtzLCB3ZSBkbyBhIHBlcmlvZGljIHNjYW4gdG8gbm90aWZ5IHVzZXIgb2YKLSAgICAgKiBhbiBvcGVuIG5ldHdvcmsgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9OT19ORVRXT1JLU19QRVJJT0RJQ19TQ0FOICAgICAgICA9IEJBU0UgKyA4ODsKLQotICAgIC8qIGFyZzEgdmFsdWVzIHRvIENNRF9TVE9QX1BBQ0tFVF9GSUxURVJJTkcgYW5kIENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HICovCi0gICAgc3RhdGljIGZpbmFsIGludCBNVUxUSUNBU1RfVjYgID0gMTsKLSAgICBzdGF0aWMgZmluYWwgaW50IE1VTFRJQ0FTVF9WNCAgPSAwOwotCi0gICAvKiBTZXQgdGhlIGZyZXF1ZW5jeSBiYW5kICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EICAgICAgICAgICAgICAgPSBCQVNFICsgOTA7Ci0gICAgLyogRW5hYmxlIGJhY2tncm91bmQgc2NhbiBmb3IgY29uZmlndXJlZCBuZXR3b3JrcyAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0VOQUJMRV9CQUNLR1JPVU5EX1NDQU4gICAgICAgICAgID0gQkFTRSArIDkxOwotICAgIC8qIEVuYWJsZSBURExTIG9uIGEgc3BlY2lmaWMgTUFDIGFkZHJlc3MgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9FTkFCTEVfVERMUyAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyA5MjsKLQotICAgIC8qIENvbW1hbmRzIGZyb20vdG8gdGhlIFN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIgKi8KLSAgICAvKiBSZXNldCB0aGUgc3VwcGxpY2FudCBzdGF0ZSB0cmFja2VyICovCi0gICAgc3RhdGljIGZpbmFsIGludCBDTURfUkVTRVRfU1VQUExJQ0FOVF9TVEFURSAgICAgICAgICAgPSBCQVNFICsgMTExOwotCi0gICAgLyogUDJwIGNvbW1hbmRzICovCi0gICAgLyogV2UgYXJlIG9rIHdpdGggbm8gcmVzcG9uc2UgaGVyZSBzaW5jZSB3ZSB3b250IGRvIG11Y2ggd2l0aCBpdCBhbnl3YXkgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTURfRU5BQkxFX1AyUCAgICAgICAgICAgICAgICA9IEJBU0UgKyAxMzE7Ci0gICAgLyogSW4gb3JkZXIgdG8gc2h1dCBkb3duIHN1cHBsaWNhbnQgY2xlYW5seSwgd2Ugd2FpdCB0aWxsIHAycCBoYXMKLSAgICAgKiBiZWVuIGRpc2FibGVkICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0RJU0FCTEVfUDJQX1JFUSAgICAgICAgICAgPSBCQVNFICsgMTMyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENNRF9ESVNBQkxFX1AyUF9SU1AgICAgICAgICAgID0gQkFTRSArIDEzMzsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENNRF9CT09UX0NPTVBMRVRFRCAgICAgICAgICAgID0gQkFTRSArIDEzNDsKLQotICAgIC8qIGNoYW5nZSB0aGUgYmF0Y2ggc2NhbiBzZXR0aW5ncy4KLSAgICAgKiBhcmcxID0gcmVzcG9uc2libGUgVUlECi0gICAgICogYXJnMiA9IGNzcGggKGNoYW5uZWwgc2NhbnMgcGVyIGhvdXIpCi0gICAgICogb2JqID0gYnVuZGxlIHdpdGggdGhlIG5ldyBzZXR0aW5ncyBhbmQgdGhlIG9wdGlvbmFsIHdvcmtzb3VyY2UKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTURfU0VUX0JBVENIRURfU0NBTiAgICAgICAgICA9IEJBU0UgKyAxMzU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ01EX1NUQVJUX05FWFRfQkFUQ0hFRF9TQ0FOICAgPSBCQVNFICsgMTM2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENNRF9QT0xMX0JBVENIRURfU0NBTiAgICAgICAgID0gQkFTRSArIDEzNzsKLQotICAgIC8qIExpbmsgY29uZmlndXJhdGlvbiAoSVAgYWRkcmVzcywgRE5TLCAuLi4pIGNoYW5nZXMgKi8KLSAgICAvKiBBbiBuZXcgSVAgYWRkcmVzcyB3YXMgYWRkZWQgdG8gb3VyIGludGVyZmFjZSwgb3IgYW4gZXhpc3RpbmcgSVAgYWRkcmVzcyB3YXMgdXBkYXRlZCAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0lQX0FERFJFU1NfVVBEQVRFRCAgICAgICAgICAgICAgID0gQkFTRSArIDE0MDsKLSAgICAvKiBBbiBJUCBhZGRyZXNzIHdhcyByZW1vdmVkIGZyb20gb3VyIGludGVyZmFjZSAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ01EX0lQX0FERFJFU1NfUkVNT1ZFRCAgICAgICAgICAgICAgID0gQkFTRSArIDE0MTsKLSAgICAvKiBSZWxvYWQgYWxsIG5ldHdvcmtzIGFuZCByZWNvbm5lY3QgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IENNRF9SRUxPQURfVExTX0FORF9SRUNPTk5FQ1QgICAgICAgICA9IEJBU0UgKyAxNDI7Ci0KLSAgICAvKiBXaWZpIHN0YXRlIG1hY2hpbmUgbW9kZXMgb2Ygb3BlcmF0aW9uICovCi0gICAgLyogQ09OTkVDVF9NT0RFIC0gY29ubmVjdCB0byBhbnkgJ2tub3duJyBBUCB3aGVuIGl0IGJlY29tZXMgYXZhaWxhYmxlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVF9NT0RFICAgICAgICAgICAgICAgICAgID0gMTsKLSAgICAvKiBTQ0FOX09OTFlfTU9ERSAtIGRvbid0IGNvbm5lY3QgdG8gYW55IEFQczsgc2NhbiwgYnV0IG9ubHkgd2hpbGUgYXBwcyBob2xkIGxvY2sgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQ0FOX09OTFlfTU9ERSAgICAgICAgICAgICAgICAgPSAyOwotICAgIC8qIFNDQU5fT05MWV9XSVRIX1dJRklfT0ZGIC0gc2NhbiwgYnV0IGRvbid0IGNvbm5lY3QgdG8gYW55IEFQcyAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNDQU5fT05MWV9XSVRIX1dJRklfT0ZGX01PREUgICA9IDM7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1VDQ0VTUyA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZBSUxVUkUgPSAtMTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyB3ZSB3aWxsIHJldHJ5IGEgY29ubmVjdGlvbiB0byBhbiBhY2Nlc3MgcG9pbnQKLSAgICAgKiBmb3Igd2hpY2ggd2UgaGF2ZSBmYWlsZWQgaW4gYWNxdWlyaW5nIGFuIElQIGFkZHJlc3MgZnJvbSBESENQLiBBIHZhbHVlIG9mCi0gICAgICogTiBtZWFucyB0aGF0IHdlIHdpbGwgbWFrZSBOKzEgY29ubmVjdGlvbiBhdHRlbXB0cyBpbiBhbGwuCi0gICAgICogPHA+Ci0gICAgICogU2VlIHtAbGluayBTZXR0aW5ncy5TZWN1cmUjV0lGSV9NQVhfREhDUF9SRVRSWV9DT1VOVH0uIFRoaXMgaXMgdGhlIGRlZmF1bHQKLSAgICAgKiB2YWx1ZSBpZiBhIFNldHRpbmdzIHZhbHVlIGlzIG5vdCBwcmVzZW50LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX01BWF9ESENQX1JFVFJJRVMgPSA5OwotCi0gICAgLyogVHJhY2tzIGlmIHN1c3BlbmQgb3B0aW1pemF0aW9ucyBuZWVkIHRvIGJlIGRpc2FibGVkIGJ5IERIQ1AsCi0gICAgICogc2NyZWVuIG9yIGR1ZSB0byBoaWdoIHBlcmYgbW9kZS4KLSAgICAgKiBXaGVuIGFueSBvZiB0aGVtIG5lZWRzIHRvIGRpc2FibGUgaXQsIHdlIGtlZXAgdGhlIHN1c3BlbmQgb3B0aW1pemF0aW9ucwotICAgICAqIGRpc2FibGVkCi0gICAgICovCi0gICAgcHJpdmF0ZSBpbnQgbVN1c3BlbmRPcHROZWVkc0Rpc2FibGVkID0gMDsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVVNQRU5EX0RVRV9UT19ESENQICAgICAgID0gMTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1VTUEVORF9EVUVfVE9fSElHSF9QRVJGICA9IDE8PDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNVU1BFTkRfRFVFX1RPX1NDUkVFTiAgICAgPSAxPDwyOwotCi0gICAgLyogVHJhY2tzIGlmIHVzZXIgaGFzIGVuYWJsZWQgc3VzcGVuZCBvcHRpbWl6YXRpb25zIHRocm91Z2ggc2V0dGluZ3MgKi8KLSAgICBwcml2YXRlIEF0b21pY0Jvb2xlYW4gbVVzZXJXYW50c1N1c3BlbmRPcHQgPSBuZXcgQXRvbWljQm9vbGVhbih0cnVlKTsKLQotICAgIC8qKgotICAgICAqIERlZmF1bHQgZnJhbWV3b3JrIHNjYW4gaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLiBUaGlzIGlzIHVzZWQgaW4gdGhlIHNjZW5hcmlvIGluIHdoaWNoCi0gICAgICogd2lmaSBjaGlwc2V0IGRvZXMgbm90IHN1cHBvcnQgYmFja2dyb3VuZCBzY2FubmluZyB0byBzZXQgdXAgYQotICAgICAqIHBlcmlvZGljIHdha2UgdXAgc2NhbiBzbyB0aGF0IHRoZSBkZXZpY2UgY2FuIGNvbm5lY3QgdG8gYSBuZXcgYWNjZXNzCi0gICAgICogcG9pbnQgb24gdGhlIG1vdmUuIHtAbGluayBTZXR0aW5ncy5HbG9iYWwjV0lGSV9GUkFNRVdPUktfU0NBTl9JTlRFUlZBTF9NU30gY2FuCi0gICAgICogb3ZlcnJpZGUgdGhpcy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIGludCBtRGVmYXVsdEZyYW1ld29ya1NjYW5JbnRlcnZhbE1zOwotCi0gICAgLyoqCi0gICAgICogU3VwcGxpY2FudCBzY2FuIGludGVydmFsIGluIG1pbGxpc2Vjb25kcy4KLSAgICAgKiBDb21lcyBmcm9tIHtAbGluayBTZXR0aW5ncy5HbG9iYWwjV0lGSV9TVVBQTElDQU5UX1NDQU5fSU5URVJWQUxfTVN9IG9yCi0gICAgICogZnJvbSB0aGUgZGVmYXVsdCBjb25maWcgaWYgdGhlIHNldHRpbmcgaXMgbm90IHNldAotICAgICAqLwotICAgIHByaXZhdGUgbG9uZyBtU3VwcGxpY2FudFNjYW5JbnRlcnZhbE1zOwotCi0gICAgLyoqCi0gICAgICogTWluaW11bSB0aW1lIGludGVydmFsIGJldHdlZW4gZW5hYmxpbmcgYWxsIG5ldHdvcmtzLgotICAgICAqIEEgZGV2aWNlIGNhbiBlbmQgdXAgcmVwZWF0ZWRseSBjb25uZWN0aW5nIHRvIGEgYmFkIG5ldHdvcmsgb24gc2NyZWVuIG9uL29mZiB0b2dnbGUKLSAgICAgKiBkdWUgdG8gZW5hYmxpbmcgZXZlcnkgdGltZS4gV2UgYWRkIGEgdGhyZXNob2xkIHRvIGF2b2lkIHRoaXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1JTl9JTlRFUlZBTF9FTkFCTEVfQUxMX05FVFdPUktTX01TID0gMTAgKiA2MCAqIDEwMDA7IC8qIDEwIG1pbnV0ZXMgKi8KLSAgICBwcml2YXRlIGxvbmcgbUxhc3RFbmFibGVBbGxOZXR3b3Jrc1RpbWU7Ci0KLSAgICAvKioKLSAgICAgKiBTdGFydGluZyBhbmQgc2h1dHRpbmcgZG93biBkcml2ZXIgdG9vIHF1aWNrIGNhdXNlcyBwcm9ibGVtcyBsZWFkaW5nIHRvIGRyaXZlcgotICAgICAqIGJlaW5nIGluIGEgYmFkIHN0YXRlLiBEZWxheSBkcml2ZXIgc3RvcC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIGludCBtRHJpdmVyU3RvcERlbGF5TXM7Ci0gICAgcHJpdmF0ZSBpbnQgbURlbGF5ZWRTdG9wQ291bnRlcjsKLSAgICBwcml2YXRlIGJvb2xlYW4gbUluRGVsYXllZFN0b3AgPSBmYWxzZTsKLQotICAgIC8vIHNvbWV0aW1lcyB0ZWxlcGhvbnkgZ2l2ZXMgdXMgdGhpcyBkYXRhIGJlZm9yZSBib290IGlzIGNvbXBsZXRlIGFuZCB3ZSBjYW4ndCBzdG9yZSBpdAotICAgIC8vIHVudGlsIGFmdGVyLCBzbyB0aGUgd3JpdGUgaXMgZGVmZXJyZWQKLSAgICBwcml2YXRlIHZvbGF0aWxlIFN0cmluZyBtUGVyc2lzdGVkQ291bnRyeUNvZGU7Ci0KLSAgICAvLyBTdXBwbGljYW50IGRvZXNuJ3QgbGlrZSBzZXR0aW5nIHRoZSBzYW1lIGNvdW50cnkgY29kZSBtdWx0aXBsZSB0aW1lcyAoaXQgbWF5IGRyb3AKLSAgICAvLyBjdXJyZW50bHkgY29ubmVjdGVkIG5ldHdvcmspLCBzbyB3ZSBzYXZlIHRoZSBjb3VudHJ5IGNvZGUgaGVyZSB0byBhdm9pZCByZWR1bmRlbmN5Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbUxhc3RTZXRDb3VudHJ5Q29kZTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNSU5fUlNTSSA9IC0yMDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9SU1NJID0gMjU2OwotCi0gICAgLyogRGVmYXVsdCBwYXJlbnQgc3RhdGUgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1EZWZhdWx0U3RhdGUgPSBuZXcgRGVmYXVsdFN0YXRlKCk7Ci0gICAgLyogVGVtcG9yYXJ5IGluaXRpYWwgc3RhdGUgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1Jbml0aWFsU3RhdGUgPSBuZXcgSW5pdGlhbFN0YXRlKCk7Ci0gICAgLyogRHJpdmVyIGxvYWRlZCwgd2FpdGluZyBmb3Igc3VwcGxpY2FudCB0byBzdGFydCAqLwotICAgIHByaXZhdGUgU3RhdGUgbVN1cHBsaWNhbnRTdGFydGluZ1N0YXRlID0gbmV3IFN1cHBsaWNhbnRTdGFydGluZ1N0YXRlKCk7Ci0gICAgLyogRHJpdmVyIGxvYWRlZCBhbmQgc3VwcGxpY2FudCByZWFkeSAqLwotICAgIHByaXZhdGUgU3RhdGUgbVN1cHBsaWNhbnRTdGFydGVkU3RhdGUgPSBuZXcgU3VwcGxpY2FudFN0YXJ0ZWRTdGF0ZSgpOwotICAgIC8qIFdhaXRpbmcgZm9yIHN1cHBsaWNhbnQgdG8gc3RvcCBhbmQgbW9uaXRvciB0byBleGl0ICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtU3VwcGxpY2FudFN0b3BwaW5nU3RhdGUgPSBuZXcgU3VwcGxpY2FudFN0b3BwaW5nU3RhdGUoKTsKLSAgICAvKiBEcml2ZXIgc3RhcnQgaXNzdWVkLCB3YWl0aW5nIGZvciBjb21wbGV0ZWQgZXZlbnQgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1Ecml2ZXJTdGFydGluZ1N0YXRlID0gbmV3IERyaXZlclN0YXJ0aW5nU3RhdGUoKTsKLSAgICAvKiBEcml2ZXIgc3RhcnRlZCAqLwotICAgIHByaXZhdGUgU3RhdGUgbURyaXZlclN0YXJ0ZWRTdGF0ZSA9IG5ldyBEcml2ZXJTdGFydGVkU3RhdGUoKTsKLSAgICAvKiBXYWl0IHVudGlsIHAycCBpcyBkaXNhYmxlZAotICAgICAqIFRoaXMgaXMgYSBzcGVjaWFsIHN0YXRlIHdoaWNoIGlzIGVudGVyZWQgcmlnaHQgYWZ0ZXIgd2UgZXhpdCBvdXQgb2YgRHJpdmVyU3RhcnRlZFN0YXRlCi0gICAgICogYmVmb3JlIHRyYW5zaXRpb25pbmcgdG8gYW5vdGhlciBzdGF0ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1XYWl0Rm9yUDJwRGlzYWJsZVN0YXRlID0gbmV3IFdhaXRGb3JQMnBEaXNhYmxlU3RhdGUoKTsKLSAgICAvKiBEcml2ZXIgc3RvcHBpbmcgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1Ecml2ZXJTdG9wcGluZ1N0YXRlID0gbmV3IERyaXZlclN0b3BwaW5nU3RhdGUoKTsKLSAgICAvKiBEcml2ZXIgc3RvcHBlZCAqLwotICAgIHByaXZhdGUgU3RhdGUgbURyaXZlclN0b3BwZWRTdGF0ZSA9IG5ldyBEcml2ZXJTdG9wcGVkU3RhdGUoKTsKLSAgICAvKiBTY2FuIGZvciBuZXR3b3Jrcywgbm8gY29ubmVjdGlvbiB3aWxsIGJlIGVzdGFibGlzaGVkICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtU2Nhbk1vZGVTdGF0ZSA9IG5ldyBTY2FuTW9kZVN0YXRlKCk7Ci0gICAgLyogQ29ubmVjdGluZyB0byBhbiBhY2Nlc3MgcG9pbnQgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1Db25uZWN0TW9kZVN0YXRlID0gbmV3IENvbm5lY3RNb2RlU3RhdGUoKTsKLSAgICAvKiBDb25uZWN0ZWQgYXQgODAyLjExIChMMikgbGV2ZWwgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1MMkNvbm5lY3RlZFN0YXRlID0gbmV3IEwyQ29ubmVjdGVkU3RhdGUoKTsKLSAgICAvKiBmZXRjaGluZyBJUCBhZnRlciBjb25uZWN0aW9uIHRvIGFjY2VzcyBwb2ludCAoYXNzb2MrYXV0aCBjb21wbGV0ZSkgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1PYnRhaW5pbmdJcFN0YXRlID0gbmV3IE9idGFpbmluZ0lwU3RhdGUoKTsKLSAgICAvKiBXYWl0aW5nIGZvciBsaW5rIHF1YWxpdHkgdmVyaWZpY2F0aW9uIHRvIGJlIGNvbXBsZXRlICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtVmVyaWZ5aW5nTGlua1N0YXRlID0gbmV3IFZlcmlmeWluZ0xpbmtTdGF0ZSgpOwotICAgIC8qIFdhaXRpbmcgZm9yIGNhcHRpdmUgcG9ydGFsIGNoZWNrIHRvIGJlIGNvbXBsZXRlICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtQ2FwdGl2ZVBvcnRhbENoZWNrU3RhdGUgPSBuZXcgQ2FwdGl2ZVBvcnRhbENoZWNrU3RhdGUoKTsKLSAgICAvKiBDb25uZWN0ZWQgd2l0aCBJUCBhZGRyICovCi0gICAgcHJpdmF0ZSBTdGF0ZSBtQ29ubmVjdGVkU3RhdGUgPSBuZXcgQ29ubmVjdGVkU3RhdGUoKTsKLSAgICAvKiBkaXNjb25uZWN0IGlzc3VlZCwgd2FpdGluZyBmb3IgbmV0d29yayBkaXNjb25uZWN0IGNvbmZpcm1hdGlvbiAqLwotICAgIHByaXZhdGUgU3RhdGUgbURpc2Nvbm5lY3RpbmdTdGF0ZSA9IG5ldyBEaXNjb25uZWN0aW5nU3RhdGUoKTsKLSAgICAvKiBOZXR3b3JrIGlzIG5vdCBjb25uZWN0ZWQsIHN1cHBsaWNhbnQgYXNzb2MrYXV0aCBpcyBub3QgY29tcGxldGUgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1EaXNjb25uZWN0ZWRTdGF0ZSA9IG5ldyBEaXNjb25uZWN0ZWRTdGF0ZSgpOwotICAgIC8qIFdhaXRpbmcgZm9yIFdQUyB0byBiZSBjb21wbGV0ZWQqLwotICAgIHByaXZhdGUgU3RhdGUgbVdwc1J1bm5pbmdTdGF0ZSA9IG5ldyBXcHNSdW5uaW5nU3RhdGUoKTsKLQotICAgIC8qIFNvZnQgYXAgaXMgc3RhcnRpbmcgdXAgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1Tb2Z0QXBTdGFydGluZ1N0YXRlID0gbmV3IFNvZnRBcFN0YXJ0aW5nU3RhdGUoKTsKLSAgICAvKiBTb2Z0IGFwIGlzIHJ1bm5pbmcgKi8KLSAgICBwcml2YXRlIFN0YXRlIG1Tb2Z0QXBTdGFydGVkU3RhdGUgPSBuZXcgU29mdEFwU3RhcnRlZFN0YXRlKCk7Ci0gICAgLyogU29mdCBhcCBpcyBydW5uaW5nIGFuZCB3ZSBhcmUgd2FpdGluZyBmb3IgdGV0aGVyIG5vdGlmaWNhdGlvbiAqLwotICAgIHByaXZhdGUgU3RhdGUgbVRldGhlcmluZ1N0YXRlID0gbmV3IFRldGhlcmluZ1N0YXRlKCk7Ci0gICAgLyogU29mdCBhcCBpcyBydW5uaW5nIGFuZCB3ZSBhcmUgdGV0aGVyZWQgdGhyb3VnaCBjb25uZWN0aXZpdHkgc2VydmljZSAqLwotICAgIHByaXZhdGUgU3RhdGUgbVRldGhlcmVkU3RhdGUgPSBuZXcgVGV0aGVyZWRTdGF0ZSgpOwotICAgIC8qIFdhaXRpbmcgZm9yIHVudGV0aGVyIGNvbmZpcm1hdGlvbiBiZWZvcmUgc3RvcHBpbmcgc29mdCBBcCAqLwotICAgIHByaXZhdGUgU3RhdGUgbVVudGV0aGVyaW5nU3RhdGUgPSBuZXcgVW50ZXRoZXJpbmdTdGF0ZSgpOwotCi0gICAgcHJpdmF0ZSBjbGFzcyBUZXRoZXJTdGF0ZUNoYW5nZSB7Ci0gICAgICAgIEFycmF5TGlzdDxTdHJpbmc+IGF2YWlsYWJsZTsKLSAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gYWN0aXZlOwotICAgICAgICBUZXRoZXJTdGF0ZUNoYW5nZShBcnJheUxpc3Q8U3RyaW5nPiBhdiwgQXJyYXlMaXN0PFN0cmluZz4gYWMpIHsKLSAgICAgICAgICAgIGF2YWlsYWJsZSA9IGF2OwotICAgICAgICAgICAgYWN0aXZlID0gYWM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIE9uZSBvZiAge0BsaW5rIFdpZmlNYW5hZ2VyI1dJRklfU1RBVEVfRElTQUJMRUR9LAotICAgICAqICAgICAgICAge0BsaW5rIFdpZmlNYW5hZ2VyI1dJRklfU1RBVEVfRElTQUJMSU5HfSwKLSAgICAgKiAgICAgICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX1NUQVRFX0VOQUJMRUR9LAotICAgICAqICAgICAgICAge0BsaW5rIFdpZmlNYW5hZ2VyI1dJRklfU1RBVEVfRU5BQkxJTkd9LAotICAgICAqICAgICAgICAge0BsaW5rIFdpZmlNYW5hZ2VyI1dJRklfU1RBVEVfVU5LTk9XTn0KLSAgICAgKgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgQXRvbWljSW50ZWdlciBtV2lmaVN0YXRlID0gbmV3IEF0b21pY0ludGVnZXIoV0lGSV9TVEFURV9ESVNBQkxFRCk7Ci0KLSAgICAvKioKLSAgICAgKiBPbmUgb2YgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX0FQX1NUQVRFX0RJU0FCTEVEfSwKLSAgICAgKiAgICAgICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX0FQX1NUQVRFX0RJU0FCTElOR30sCi0gICAgICogICAgICAgICB7QGxpbmsgV2lmaU1hbmFnZXIjV0lGSV9BUF9TVEFURV9FTkFCTEVEfSwKLSAgICAgKiAgICAgICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX0FQX1NUQVRFX0VOQUJMSU5HfSwKLSAgICAgKiAgICAgICAgIHtAbGluayBXaWZpTWFuYWdlciNXSUZJX0FQX1NUQVRFX0ZBSUxFRH0KLSAgICAgKgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgQXRvbWljSW50ZWdlciBtV2lmaUFwU3RhdGUgPSBuZXcgQXRvbWljSW50ZWdlcihXSUZJX0FQX1NUQVRFX0RJU0FCTEVEKTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTQ0FOX1JFUVVFU1QgPSAwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fU1RBUlRfU0NBTiA9Ci0gICAgICAgICJjb20uYW5kcm9pZC5zZXJ2ZXIuV2lmaU1hbmFnZXIuYWN0aW9uLlNUQVJUX1NDQU4iOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFTEFZRURfU1RPUF9DT1VOVEVSID0gIkRlbGF5ZWRTdG9wQ291bnRlciI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERSSVZFUl9TVE9QX1JFUVVFU1QgPSAwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fREVMQVlFRF9EUklWRVJfU1RPUCA9Ci0gICAgICAgICJjb20uYW5kcm9pZC5zZXJ2ZXIuV2lmaU1hbmFnZXIuYWN0aW9uLkRFTEFZRURfRFJJVkVSX1NUT1AiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9SRUZSRVNIX0JBVENIRURfU0NBTiA9Ci0gICAgICAgICAgICAiY29tLmFuZHJvaWQuc2VydmVyLldpZmlNYW5hZ2VyLmFjdGlvbi5SRUZSRVNIX0JBVENIRURfU0NBTiI7Ci0gICAgLyoqCi0gICAgICogS2VlcCB0cmFjayBvZiB3aGV0aGVyIFdJRkkgaXMgcnVubmluZy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbUlzUnVubmluZyA9IGZhbHNlOwotCi0gICAgLyoqCi0gICAgICogS2VlcCB0cmFjayBvZiB3aGV0aGVyIHdlIGxhc3QgdG9sZCB0aGUgYmF0dGVyeSBzdGF0cyB3ZSBoYWQgc3RhcnRlZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gbVJlcG9ydGVkUnVubmluZyA9IGZhbHNlOwotCi0gICAgLyoqCi0gICAgICogTW9zdCByZWNlbnRseSBzZXQgc291cmNlIG9mIHN0YXJ0aW5nIFdJRkkuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBXb3JrU291cmNlIG1SdW5uaW5nV2lmaVVpZHMgPSBuZXcgV29ya1NvdXJjZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIGxhc3QgcmVwb3J0ZWQgVUlEcyB0aGF0IHdlcmUgcmVzcG9uc2libGUgZm9yIHN0YXJ0aW5nIFdJRkkuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBXb3JrU291cmNlIG1MYXN0UnVubmluZ1dpZmlVaWRzID0gbmV3IFdvcmtTb3VyY2UoKTsKLQotICAgIHByaXZhdGUgZmluYWwgSUJhdHRlcnlTdGF0cyBtQmF0dGVyeVN0YXRzOwotCi0gICAgcHJpdmF0ZSBCYXRjaGVkU2NhblNldHRpbmdzIG1CYXRjaGVkU2NhblNldHRpbmdzID0gbnVsbDsKLQotICAgIC8qKgotICAgICAqIFRyYWNrIHRoZSB3b3Jrc291cmNlL2Nvc3Qgb2YgdGhlIGN1cnJlbnQgc2V0dGluZ3MgYW5kIHRyYWNrIHdoYXQncyBiZWVuIG5vdGVkCi0gICAgICogdG8gdGhlIGJhdHRlcnkgc3RhdHMsIHNvIHdlIGNhbiBtYXJrIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIHdoZW4gY2hhbmdpbmcuCi0gICAgICovCi0gICAgcHJpdmF0ZSBXb3JrU291cmNlIG1CYXRjaGVkU2NhbldvcmtTb3VyY2UgPSBudWxsOwotICAgIHByaXZhdGUgaW50IG1CYXRjaGVkU2NhbkNzcGggPSAwOwotICAgIHByaXZhdGUgV29ya1NvdXJjZSBtTm90ZWRCYXRjaGVkU2NhbldvcmtTb3VyY2UgPSBudWxsOwotICAgIHByaXZhdGUgaW50IG1Ob3RlZEJhdGNoZWRTY2FuQ3NwaCA9IDA7Ci0KLQotICAgIHB1YmxpYyBXaWZpU3RhdGVNYWNoaW5lKENvbnRleHQgY29udGV4dCwgU3RyaW5nIHdsYW5JbnRlcmZhY2UpIHsKLSAgICAgICAgc3VwZXIoIldpZmlTdGF0ZU1hY2hpbmUiKTsKLSAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtSW50ZXJmYWNlTmFtZSA9IHdsYW5JbnRlcmZhY2U7Ci0KLSAgICAgICAgbU5ldHdvcmtJbmZvID0gbmV3IE5ldHdvcmtJbmZvKENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9XSUZJLCAwLCBORVRXT1JLVFlQRSwgIiIpOwotICAgICAgICBtQmF0dGVyeVN0YXRzID0gSUJhdHRlcnlTdGF0cy5TdHViLmFzSW50ZXJmYWNlKFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoCi0gICAgICAgICAgICAgICAgQmF0dGVyeVN0YXRzLlNFUlZJQ0VfTkFNRSkpOwotCi0gICAgICAgIElCaW5kZXIgYiA9IFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoQ29udGV4dC5ORVRXT1JLTUFOQUdFTUVOVF9TRVJWSUNFKTsKLSAgICAgICAgbU53U2VydmljZSA9IElOZXR3b3JrTWFuYWdlbWVudFNlcnZpY2UuU3R1Yi5hc0ludGVyZmFjZShiKTsKLQotICAgICAgICBtUDJwU3VwcG9ydGVkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5oYXNTeXN0ZW1GZWF0dXJlKAotICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfV0lGSV9ESVJFQ1QpOwotCi0gICAgICAgIG1XaWZpTmF0aXZlID0gbmV3IFdpZmlOYXRpdmUobUludGVyZmFjZU5hbWUpOwotICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlID0gbmV3IFdpZmlDb25maWdTdG9yZShjb250ZXh0LCBtV2lmaU5hdGl2ZSk7Ci0gICAgICAgIG1XaWZpTW9uaXRvciA9IG5ldyBXaWZpTW9uaXRvcih0aGlzLCBtV2lmaU5hdGl2ZSk7Ci0gICAgICAgIG1XaWZpSW5mbyA9IG5ldyBXaWZpSW5mbygpOwotICAgICAgICBtU3VwcGxpY2FudFN0YXRlVHJhY2tlciA9IG5ldyBTdXBwbGljYW50U3RhdGVUcmFja2VyKGNvbnRleHQsIHRoaXMsIG1XaWZpQ29uZmlnU3RvcmUsCi0gICAgICAgICAgICAgICAgZ2V0SGFuZGxlcigpKTsKLSAgICAgICAgbUxpbmtQcm9wZXJ0aWVzID0gbmV3IExpbmtQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIG1OZXRsaW5rTGlua1Byb3BlcnRpZXMgPSBuZXcgTGlua1Byb3BlcnRpZXMoKTsKLQotICAgICAgICBtV2lmaVAycE1hbmFnZXIgPSAoV2lmaVAycE1hbmFnZXIpIG1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5XSUZJX1AyUF9TRVJWSUNFKTsKLQotICAgICAgICBtTmV0d29ya0luZm8uc2V0SXNBdmFpbGFibGUoZmFsc2UpOwotICAgICAgICBtTGFzdEJzc2lkID0gbnVsbDsKLSAgICAgICAgbUxhc3ROZXR3b3JrSWQgPSBXaWZpQ29uZmlndXJhdGlvbi5JTlZBTElEX05FVFdPUktfSUQ7Ci0gICAgICAgIG1MYXN0U2lnbmFsTGV2ZWwgPSAtMTsKLQotICAgICAgICBtSW50ZXJmYWNlT2JzZXJ2ZXIgPSBuZXcgSW50ZXJmYWNlT2JzZXJ2ZXIodGhpcyk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtTndTZXJ2aWNlLnJlZ2lzdGVyT2JzZXJ2ZXIobUludGVyZmFjZU9ic2VydmVyKTsKLSAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGxvZ2UoIkNvdWxkbid0IHJlZ2lzdGVyIGludGVyZmFjZSBvYnNlcnZlcjogIiArIGUudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtQWxhcm1NYW5hZ2VyID0gKEFsYXJtTWFuYWdlciltQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQUxBUk1fU0VSVklDRSk7Ci0gICAgICAgIEludGVudCBzY2FuSW50ZW50ID0gbmV3IEludGVudChBQ1RJT05fU1RBUlRfU0NBTiwgbnVsbCk7Ci0gICAgICAgIG1TY2FuSW50ZW50ID0gUGVuZGluZ0ludGVudC5nZXRCcm9hZGNhc3QobUNvbnRleHQsIFNDQU5fUkVRVUVTVCwgc2NhbkludGVudCwgMCk7Ci0KLSAgICAgICAgSW50ZW50IGJhdGNoZWRJbnRlbnQgPSBuZXcgSW50ZW50KEFDVElPTl9SRUZSRVNIX0JBVENIRURfU0NBTiwgbnVsbCk7Ci0gICAgICAgIG1CYXRjaGVkU2NhbkludGVydmFsSW50ZW50ID0gUGVuZGluZ0ludGVudC5nZXRCcm9hZGNhc3QobUNvbnRleHQsIDAsIGJhdGNoZWRJbnRlbnQsIDApOwotCi0gICAgICAgIG1EZWZhdWx0RnJhbWV3b3JrU2NhbkludGVydmFsTXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRJbnRlZ2VyKAotICAgICAgICAgICAgICAgIFIuaW50ZWdlci5jb25maWdfd2lmaV9mcmFtZXdvcmtfc2Nhbl9pbnRlcnZhbCk7Ci0KLSAgICAgICAgbURyaXZlclN0b3BEZWxheU1zID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcigKLSAgICAgICAgICAgICAgICBSLmludGVnZXIuY29uZmlnX3dpZmlfZHJpdmVyX3N0b3BfZGVsYXkpOwotCi0gICAgICAgIG1CYWNrZ3JvdW5kU2NhblN1cHBvcnRlZCA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldEJvb2xlYW4oCi0gICAgICAgICAgICAgICAgUi5ib29sLmNvbmZpZ193aWZpX2JhY2tncm91bmRfc2Nhbl9zdXBwb3J0KTsKLQotICAgICAgICBtUHJpbWFyeURldmljZVR5cGUgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgUi5zdHJpbmcuY29uZmlnX3dpZmlfcDJwX2RldmljZV90eXBlKTsKLQotICAgICAgICBtVXNlcldhbnRzU3VzcGVuZE9wdC5zZXQoU2V0dGluZ3MuR2xvYmFsLmdldEludChtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfU1VTUEVORF9PUFRJTUlaQVRJT05TX0VOQUJMRUQsIDEpID09IDEpOwotCi0gICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIoCi0gICAgICAgICAgICBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewotICAgICAgICAgICAgICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBhdmFpbGFibGUgPSBpbnRlbnQuZ2V0U3RyaW5nQXJyYXlMaXN0RXh0cmEoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGl2aXR5TWFuYWdlci5FWFRSQV9BVkFJTEFCTEVfVEVUSEVSKTsKLSAgICAgICAgICAgICAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gYWN0aXZlID0gaW50ZW50LmdldFN0cmluZ0FycmF5TGlzdEV4dHJhKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpdml0eU1hbmFnZXIuRVhUUkFfQUNUSVZFX1RFVEhFUik7Ci0gICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9URVRIRVJfU1RBVEVfQ0hBTkdFLCBuZXcgVGV0aGVyU3RhdGVDaGFuZ2UoYXZhaWxhYmxlLCBhY3RpdmUpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LG5ldyBJbnRlbnRGaWx0ZXIoQ29ubmVjdGl2aXR5TWFuYWdlci5BQ1RJT05fVEVUSEVSX1NUQVRFX0NIQU5HRUQpKTsKLQotICAgICAgICBtQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKAotICAgICAgICAgICAgICAgIG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFdvcmtTb3VyY2Ugd29ya1NvdXJjZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFNjYW4oVU5LTk9XTl9TQ0FOX1NPVVJDRSwgd29ya1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIG5ldyBJbnRlbnRGaWx0ZXIoQUNUSU9OX1NUQVJUX1NDQU4pKTsKLQotICAgICAgICBJbnRlbnRGaWx0ZXIgZmlsdGVyID0gbmV3IEludGVudEZpbHRlcigpOwotICAgICAgICBmaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fU0NSRUVOX09OKTsKLSAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX1NDUkVFTl9PRkYpOwotICAgICAgICBmaWx0ZXIuYWRkQWN0aW9uKEFDVElPTl9SRUZSRVNIX0JBVENIRURfU0NBTik7Ci0gICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIoCi0gICAgICAgICAgICAgICAgbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFjdGlvbiA9IGludGVudC5nZXRBY3Rpb24oKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5lcXVhbHMoSW50ZW50LkFDVElPTl9TQ1JFRU5fT04pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2NyZWVuU3RhdGVDaGFuZ2VkKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKEludGVudC5BQ1RJT05fU0NSRUVOX09GRikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTY3JlZW5TdGF0ZUNoYW5nZWQoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKEFDVElPTl9SRUZSRVNIX0JBVENIRURfU0NBTikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE5leHRCYXRjaGVkU2NhbkFzeW5jKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LCBmaWx0ZXIpOwotCi0gICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIoCi0gICAgICAgICAgICAgICAgbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewotICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnRlciA9IGludGVudC5nZXRJbnRFeHRyYShERUxBWUVEX1NUT1BfQ09VTlRFUiwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9ERUxBWUVEX1NUT1BfRFJJVkVSLCBjb3VudGVyLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgbmV3IEludGVudEZpbHRlcihBQ1RJT05fREVMQVlFRF9EUklWRVJfU1RPUCkpOwotCi0gICAgICAgIG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKFNldHRpbmdzLkdsb2JhbC5nZXRVcmlGb3IoCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfU1VTUEVORF9PUFRJTUlaQVRJT05TX0VOQUJMRUQpLCBmYWxzZSwKLSAgICAgICAgICAgICAgICBuZXcgQ29udGVudE9ic2VydmVyKGdldEhhbmRsZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DaGFuZ2UoYm9vbGVhbiBzZWxmQ2hhbmdlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVXNlcldhbnRzU3VzcGVuZE9wdC5zZXQoU2V0dGluZ3MuR2xvYmFsLmdldEludChtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfU1VTUEVORF9PUFRJTUlaQVRJT05TX0VOQUJMRUQsIDEpID09IDEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgbUNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcigKLSAgICAgICAgICAgICAgICBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfQk9PVF9DT01QTEVURUQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBuZXcgSW50ZW50RmlsdGVyKEludGVudC5BQ1RJT05fQk9PVF9DT01QTEVURUQpKTsKLQotICAgICAgICBtU2NhblJlc3VsdENhY2hlID0gbmV3IExydUNhY2hlPFN0cmluZywgU2NhblJlc3VsdD4oU0NBTl9SRVNVTFRfQ0FDSEVfU0laRSk7Ci0KLSAgICAgICAgUG93ZXJNYW5hZ2VyIHBvd2VyTWFuYWdlciA9IChQb3dlck1hbmFnZXIpbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LlBPV0VSX1NFUlZJQ0UpOwotICAgICAgICBtV2FrZUxvY2sgPSBwb3dlck1hbmFnZXIubmV3V2FrZUxvY2soUG93ZXJNYW5hZ2VyLlBBUlRJQUxfV0FLRV9MT0NLLCBnZXROYW1lKCkpOwotCi0gICAgICAgIG1TdXNwZW5kV2FrZUxvY2sgPSBwb3dlck1hbmFnZXIubmV3V2FrZUxvY2soUG93ZXJNYW5hZ2VyLlBBUlRJQUxfV0FLRV9MT0NLLCAiV2lmaVN1c3BlbmQiKTsKLSAgICAgICAgbVN1c3BlbmRXYWtlTG9jay5zZXRSZWZlcmVuY2VDb3VudGVkKGZhbHNlKTsKLQotICAgICAgICBhZGRTdGF0ZShtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKG1Jbml0aWFsU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgYWRkU3RhdGUobVN1cHBsaWNhbnRTdGFydGluZ1N0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKG1TdXBwbGljYW50U3RhcnRlZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtRHJpdmVyU3RhcnRpbmdTdGF0ZSwgbVN1cHBsaWNhbnRTdGFydGVkU3RhdGUpOwotICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1Ecml2ZXJTdGFydGVkU3RhdGUsIG1TdXBwbGljYW50U3RhcnRlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobVNjYW5Nb2RlU3RhdGUsIG1Ecml2ZXJTdGFydGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtQ29ubmVjdE1vZGVTdGF0ZSwgbURyaXZlclN0YXJ0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtTDJDb25uZWN0ZWRTdGF0ZSwgbUNvbm5lY3RNb2RlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1PYnRhaW5pbmdJcFN0YXRlLCBtTDJDb25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobVZlcmlmeWluZ0xpbmtTdGF0ZSwgbUwyQ29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1DYXB0aXZlUG9ydGFsQ2hlY2tTdGF0ZSwgbUwyQ29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1Db25uZWN0ZWRTdGF0ZSwgbUwyQ29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobURpc2Nvbm5lY3RpbmdTdGF0ZSwgbUNvbm5lY3RNb2RlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobURpc2Nvbm5lY3RlZFN0YXRlLCBtQ29ubmVjdE1vZGVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtV3BzUnVubmluZ1N0YXRlLCBtQ29ubmVjdE1vZGVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RhdGUobVdhaXRGb3JQMnBEaXNhYmxlU3RhdGUsIG1TdXBwbGljYW50U3RhcnRlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtRHJpdmVyU3RvcHBpbmdTdGF0ZSwgbVN1cHBsaWNhbnRTdGFydGVkU3RhdGUpOwotICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1Ecml2ZXJTdG9wcGVkU3RhdGUsIG1TdXBwbGljYW50U3RhcnRlZFN0YXRlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKG1TdXBwbGljYW50U3RvcHBpbmdTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICBhZGRTdGF0ZShtU29mdEFwU3RhcnRpbmdTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICBhZGRTdGF0ZShtU29mdEFwU3RhcnRlZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtVGV0aGVyaW5nU3RhdGUsIG1Tb2Z0QXBTdGFydGVkU3RhdGUpOwotICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1UZXRoZXJlZFN0YXRlLCBtU29mdEFwU3RhcnRlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtVW50ZXRoZXJpbmdTdGF0ZSwgbVNvZnRBcFN0YXJ0ZWRTdGF0ZSk7Ci0KLSAgICAgICAgc2V0SW5pdGlhbFN0YXRlKG1Jbml0aWFsU3RhdGUpOwotCi0gICAgICAgIHNldExvZ1JlY1NpemUoMjAwMCk7Ci0gICAgICAgIHNldExvZ09ubHlUcmFuc2l0aW9ucyhmYWxzZSk7Ci0gICAgICAgIGlmIChEQkcpIHNldERiZyh0cnVlKTsKLQotICAgICAgICAvL3N0YXJ0IHRoZSBzdGF0ZSBtYWNoaW5lCi0gICAgICAgIHN0YXJ0KCk7Ci0KLSAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuV0lGSV9TQ0FOX0FWQUlMQUJMRSk7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfU0NBTl9BVkFJTEFCTEUsIFdJRklfU1RBVEVfRElTQUJMRUQpOwotICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOwotICAgIH0KLQotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgKiBNZXRob2RzIGV4cG9zZWQgZm9yIHB1YmxpYyB1c2UKLSAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgICBwdWJsaWMgTWVzc2VuZ2VyIGdldE1lc3NlbmdlcigpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBNZXNzZW5nZXIoZ2V0SGFuZGxlcigpKTsKLSAgICB9Ci0gICAgLyoqCi0gICAgICogVE9ETzogZG9jCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc3luY1BpbmdTdXBwbGljYW50KEFzeW5jQ2hhbm5lbCBjaGFubmVsKSB7Ci0gICAgICAgIE1lc3NhZ2UgcmVzdWx0TXNnID0gY2hhbm5lbC5zZW5kTWVzc2FnZVN5bmNocm9ub3VzbHkoQ01EX1BJTkdfU1VQUExJQ0FOVCk7Ci0gICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gKHJlc3VsdE1zZy5hcmcxICE9IEZBSUxVUkUpOwotICAgICAgICByZXN1bHRNc2cucmVjeWNsZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluaXRpYXRlIGEgd2lmaSBzY2FuLiAgSWYgd29ya1NvdXJjZSBpcyBub3QgbnVsbCwgYmxhbWUgaXMgZ2l2ZW4gdG8gaXQsCi0gICAgICogb3RoZXJ3aXNlIGJsYW1lIGlzIGdpdmVuIHRvIGNhbGxpbmdVaWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY2FsbGluZ1VpZCBUaGUgdWlkIGluaXRpYXRpbmcgdGhlIHdpZmkgc2Nhbi4gIEJsYW1lIHdpbGwgYmUgZ2l2ZW4KLSAgICAgKiAgICAgICAgICAgICAgICAgICBoZXJlIHVubGVzcyB3b3JrU291cmNlIGlzIHNwZWNpZmllZC4KLSAgICAgKiBAcGFyYW0gd29ya1NvdXJjZSBJZiBub3QgbnVsbCwgYmxhbWUgaXMgZ2l2ZW4gdG8gd29ya1NvdXJjZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydFNjYW4oaW50IGNhbGxpbmdVaWQsIFdvcmtTb3VyY2Ugd29ya1NvdXJjZSkgewotICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBUlRfU0NBTiwgY2FsbGluZ1VpZCwgMCwgd29ya1NvdXJjZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogc3RhcnQgb3Igc3RvcCBiYXRjaGVkIHNjYW5uaW5nIHVzaW5nIHRoZSBnaXZlbiBzZXR0aW5ncwotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVRDSEVEX1NFVFRJTkcgPSAiYmF0Y2hlZF9zZXR0aW5ncyI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJBVENIRURfV09SS1NPVVJDRSA9ICJiYXRjaGVkX3dvcmtzb3VyY2UiOwotICAgIHB1YmxpYyB2b2lkIHNldEJhdGNoZWRTY2FuU2V0dGluZ3MoQmF0Y2hlZFNjYW5TZXR0aW5ncyBzZXR0aW5ncywgaW50IGNhbGxpbmdVaWQsIGludCBjc3BoLAotICAgICAgICAgICAgV29ya1NvdXJjZSB3b3JrU291cmNlKSB7Ci0gICAgICAgIEJ1bmRsZSBidW5kbGUgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgIGJ1bmRsZS5wdXRQYXJjZWxhYmxlKEJBVENIRURfU0VUVElORywgc2V0dGluZ3MpOwotICAgICAgICBidW5kbGUucHV0UGFyY2VsYWJsZShCQVRDSEVEX1dPUktTT1VSQ0UsIHdvcmtTb3VyY2UpOwotICAgICAgICBzZW5kTWVzc2FnZShDTURfU0VUX0JBVENIRURfU0NBTiwgY2FsbGluZ1VpZCwgY3NwaCwgYnVuZGxlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdDxCYXRjaGVkU2NhblJlc3VsdD4gc3luY0dldEJhdGNoZWRTY2FuUmVzdWx0c0xpc3QoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUJhdGNoZWRTY2FuUmVzdWx0cykgewotICAgICAgICAgICAgTGlzdDxCYXRjaGVkU2NhblJlc3VsdD4gYmF0Y2hlZFNjYW5MaXN0ID0KLSAgICAgICAgICAgICAgICAgICAgbmV3IEFycmF5TGlzdDxCYXRjaGVkU2NhblJlc3VsdD4obUJhdGNoZWRTY2FuUmVzdWx0cy5zaXplKCkpOwotICAgICAgICAgICAgZm9yKEJhdGNoZWRTY2FuUmVzdWx0IHJlc3VsdDogbUJhdGNoZWRTY2FuUmVzdWx0cykgewotICAgICAgICAgICAgICAgIGJhdGNoZWRTY2FuTGlzdC5hZGQobmV3IEJhdGNoZWRTY2FuUmVzdWx0KHJlc3VsdCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGJhdGNoZWRTY2FuTGlzdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RCYXRjaGVkU2NhblBvbGwoKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9QT0xMX0JBVENIRURfU0NBTik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHN0YXJ0QmF0Y2hlZFNjYW4oKSB7Ci0gICAgICAgIGlmIChtQmF0Y2hlZFNjYW5TZXR0aW5ncyA9PSBudWxsKSByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1EaGNwQWN0aXZlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2coIm5vdCBzdGFydGluZyBCYXRjaGVkIFNjYW5zIGR1ZSB0byBESENQIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBmaXJzdCBncmFiIGFueSBleGlzdGluZyBkYXRhCi0gICAgICAgIHJldHJpZXZlQmF0Y2hlZFNjYW5EYXRhKCk7Ci0KLSAgICAgICAgbUFsYXJtTWFuYWdlci5jYW5jZWwobUJhdGNoZWRTY2FuSW50ZXJ2YWxJbnRlbnQpOwotCi0gICAgICAgIFN0cmluZyBzY2Fuc0V4cGVjdGVkID0gbVdpZmlOYXRpdmUuc2V0QmF0Y2hlZFNjYW5TZXR0aW5ncyhtQmF0Y2hlZFNjYW5TZXR0aW5ncyk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtRXhwZWN0ZWRCYXRjaGVkU2NhbnMgPSBJbnRlZ2VyLnBhcnNlSW50KHNjYW5zRXhwZWN0ZWQpOwotICAgICAgICAgICAgc2V0TmV4dEJhdGNoZWRBbGFybShtRXhwZWN0ZWRCYXRjaGVkU2NhbnMpOwotICAgICAgICAgICAgaWYgKG1FeHBlY3RlZEJhdGNoZWRTY2FucyA+IDApIG5vdGVCYXRjaGVkU2NhblN0YXJ0KCk7Ci0gICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBzdG9wQmF0Y2hlZFNjYW4oKTsKLSAgICAgICAgICAgIGxvZ2UoIkV4Y2VwdGlvbiBwYXJzaW5nIFdpZmlOYXRpdmUuc2V0QmF0Y2hlZFNjYW5TZXR0aW5ncyByZXNwb25zZSAiICsgZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBjYWxsZWQgZnJvbSBCcm9hZGNhc3RMaXN0ZW5lcgotICAgIHByaXZhdGUgdm9pZCBzdGFydE5leHRCYXRjaGVkU2NhbkFzeW5jKCkgewotICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBUlRfTkVYVF9CQVRDSEVEX1NDQU4pOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzdGFydE5leHRCYXRjaGVkU2NhbigpIHsKLSAgICAgICAgLy8gZmlyc3QgZ3JhYiBhbnkgZXhpc3RpbmcgZGF0YQotICAgICAgICByZXRyaWV2ZUJhdGNoZWRTY2FuRGF0YSgpOwotCi0gICAgICAgIHNldE5leHRCYXRjaGVkQWxhcm0obUV4cGVjdGVkQmF0Y2hlZFNjYW5zKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaGFuZGxlQmF0Y2hlZFNjYW5Qb2xsUmVxdWVzdCgpIHsKLSAgICAgICAgaWYgKERCRykgewotICAgICAgICAgICAgbG9nKCJoYW5kbGVCYXRjaGVkU2NhblBvbGwgUmVxdWVzdCAtIG1CYXRjaGVkU2Nhbk1pblBvbGxUaW1lPSIgKwotICAgICAgICAgICAgICAgICAgICBtQmF0Y2hlZFNjYW5NaW5Qb2xsVGltZSArICIgLCBtQmF0Y2hlZFNjYW5TZXR0aW5ncz0iICsKLSAgICAgICAgICAgICAgICAgICAgbUJhdGNoZWRTY2FuU2V0dGluZ3MpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGFwcHJvcHJpYXRlIFBvbGxUaW1lIHRoYXQncyBiZWNhdXNlIHdlIGVpdGhlciBhcmVuJ3QKLSAgICAgICAgLy8gYmF0Y2hpbmcgb3Igd2UndmUgYWxyZWFkeSBzZXQgYSB0aW1lIGZvciBhIHBvbGwgcmVxdWVzdAotICAgICAgICBpZiAobUJhdGNoZWRTY2FuTWluUG9sbFRpbWUgPT0gMCkgcmV0dXJuOwotICAgICAgICBpZiAobUJhdGNoZWRTY2FuU2V0dGluZ3MgPT0gbnVsbCkgcmV0dXJuOwotCi0gICAgICAgIGxvbmcgbm93ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0KLSAgICAgICAgaWYgKG5vdyA+IG1CYXRjaGVkU2Nhbk1pblBvbGxUaW1lKSB7Ci0gICAgICAgICAgICAvLyBkbyB0aGUgcG9sbCBhbmQgcmVzZXQgb3VyIHRpbWVycwotICAgICAgICAgICAgc3RhcnROZXh0QmF0Y2hlZFNjYW4oKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1BbGFybU1hbmFnZXIuc2V0RXhhY3QoQWxhcm1NYW5hZ2VyLlJUQ19XQUtFVVAsIG1CYXRjaGVkU2Nhbk1pblBvbGxUaW1lLAotICAgICAgICAgICAgICAgICAgICBtQmF0Y2hlZFNjYW5JbnRlcnZhbEludGVudCk7Ci0gICAgICAgICAgICBtQmF0Y2hlZFNjYW5NaW5Qb2xsVGltZSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyByZXR1cm4gdHJ1ZSBpZiBuZXcvZGlmZmVyZW50Ci0gICAgcHJpdmF0ZSBib29sZWFuIHJlY29yZEJhdGNoZWRTY2FuU2V0dGluZ3MoaW50IHJlc3BvbnNpYmxlVWlkLCBpbnQgY3NwaCwgQnVuZGxlIGJ1bmRsZSkgewotICAgICAgICBCYXRjaGVkU2NhblNldHRpbmdzIHNldHRpbmdzID0gYnVuZGxlLmdldFBhcmNlbGFibGUoQkFUQ0hFRF9TRVRUSU5HKTsKLSAgICAgICAgV29ya1NvdXJjZSByZXNwb25zaWJsZVdvcmtTb3VyY2UgPSBidW5kbGUuZ2V0UGFyY2VsYWJsZShCQVRDSEVEX1dPUktTT1VSQ0UpOwotCi0gICAgICAgIGlmIChEQkcpIHsKLSAgICAgICAgICAgIGxvZygic2V0IGJhdGNoZWQgc2NhbiB0byAiICsgc2V0dGluZ3MgKyAiIGZvciB1aWQ9IiArIHJlc3BvbnNpYmxlVWlkICsKLSAgICAgICAgICAgICAgICAgICAgIiwgd29ya3NvdXJjZT0iICsgcmVzcG9uc2libGVXb3JrU291cmNlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2V0dGluZ3MgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKHNldHRpbmdzLmVxdWFscyhtQmF0Y2hlZFNjYW5TZXR0aW5ncykpIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtQmF0Y2hlZFNjYW5TZXR0aW5ncyA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbUJhdGNoZWRTY2FuU2V0dGluZ3MgPSBzZXR0aW5nczsKLSAgICAgICAgaWYgKHJlc3BvbnNpYmxlV29ya1NvdXJjZSA9PSBudWxsKSByZXNwb25zaWJsZVdvcmtTb3VyY2UgPSBuZXcgV29ya1NvdXJjZShyZXNwb25zaWJsZVVpZCk7Ci0gICAgICAgIG1CYXRjaGVkU2NhbldvcmtTb3VyY2UgPSByZXNwb25zaWJsZVdvcmtTb3VyY2U7Ci0gICAgICAgIG1CYXRjaGVkU2NhbkNzcGggPSBjc3BoOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc3RvcEJhdGNoZWRTY2FuKCkgewotICAgICAgICBtQWxhcm1NYW5hZ2VyLmNhbmNlbChtQmF0Y2hlZFNjYW5JbnRlcnZhbEludGVudCk7Ci0gICAgICAgIHJldHJpZXZlQmF0Y2hlZFNjYW5EYXRhKCk7Ci0gICAgICAgIG1XaWZpTmF0aXZlLnNldEJhdGNoZWRTY2FuU2V0dGluZ3MobnVsbCk7Ci0gICAgICAgIG5vdGVCYXRjaGVkU2NhblN0b3AoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0TmV4dEJhdGNoZWRBbGFybShpbnQgc2NhbnNFeHBlY3RlZCkgewotCi0gICAgICAgIGlmIChtQmF0Y2hlZFNjYW5TZXR0aW5ncyA9PSBudWxsIHx8IHNjYW5zRXhwZWN0ZWQgPCAxKSByZXR1cm47Ci0KLSAgICAgICAgbUJhdGNoZWRTY2FuTWluUG9sbFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArCi0gICAgICAgICAgICAgICAgbUJhdGNoZWRTY2FuU2V0dGluZ3Muc2NhbkludGVydmFsU2VjICogMTAwMDsKLQotICAgICAgICBpZiAobUJhdGNoZWRTY2FuU2V0dGluZ3MubWF4U2NhbnNQZXJCYXRjaCA8IHNjYW5zRXhwZWN0ZWQpIHsKLSAgICAgICAgICAgIHNjYW5zRXhwZWN0ZWQgPSBtQmF0Y2hlZFNjYW5TZXR0aW5ncy5tYXhTY2Fuc1BlckJhdGNoOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHNlY1RvRnVsbCA9IG1CYXRjaGVkU2NhblNldHRpbmdzLnNjYW5JbnRlcnZhbFNlYzsKLSAgICAgICAgc2VjVG9GdWxsICo9IHNjYW5zRXhwZWN0ZWQ7Ci0KLSAgICAgICAgaW50IGRlYnVnUGVyaW9kID0gU3lzdGVtUHJvcGVydGllcy5nZXRJbnQoIndpZmkuYmF0Y2hlZFNjYW4ucG9sbFBlcmlvZCIsIDApOwotICAgICAgICBpZiAoZGVidWdQZXJpb2QgPiAwKSBzZWNUb0Z1bGwgPSBkZWJ1Z1BlcmlvZDsKLQotICAgICAgICAvLyBzZXQgdGhlIGFsYXJtIHRvIGRvIHRoZSBuZXh0IHBvbGwuICBXZSBzZXQgaXQgYSBsaXR0bGUgc2hvcnQgYXMgd2UnZCByYXRoZXIKLSAgICAgICAgLy8gd2FrZSB1cCB3ZWFybHkgdGhhbiBtaXNzIGEgc2NhbiBkdWUgdG8gYnVmZmVyIG92ZXJmbG93Ci0gICAgICAgIG1BbGFybU1hbmFnZXIuc2V0RXhhY3QoQWxhcm1NYW5hZ2VyLlJUQ19XQUtFVVAsIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpCi0gICAgICAgICAgICAgICAgKyAoKHNlY1RvRnVsbCAtIChtQmF0Y2hlZFNjYW5TZXR0aW5ncy5zY2FuSW50ZXJ2YWxTZWMgLyAyKSkgKiAxMDAwKSwKLSAgICAgICAgICAgICAgICBtQmF0Y2hlZFNjYW5JbnRlcnZhbEludGVudCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RhcnQgcmVhZGluZyBuZXcgc2NhbiBkYXRhCi0gICAgICogRGF0YSBjb21lcyBpbiBhczoKLSAgICAgKiAic2NhbmNvdW50PTVcbiIKLSAgICAgKiAibmV4dGNvdW50PTVcbiIKLSAgICAgKiAgICJhcGNvdW50PTNcbiIKLSAgICAgKiAgICJ0cnVuY1xuIiAob3B0aW9uYWwpCi0gICAgICogICAgICJic3NpZD0uLi5cbiIKLSAgICAgKiAgICAgInNzaWQ9Li4uXG4iCi0gICAgICogICAgICJmcmVxPS4uLlxuIiAoaW4gTWh6KQotICAgICAqICAgICAibGV2ZWw9Li4uXG4iCi0gICAgICogICAgICJkaXN0PS4uLlxuIiAoaW4gY20pCi0gICAgICogICAgICJkaXN0c2Q9Li4uXG4iIChzdGFuZGFyZCBkZXZpYXRpb24sIGluIGNtKQotICAgICAqICAgICAiPT09PSIKLSAgICAgKiAgICAgImJzc2lkPS4uLlxuIgotICAgICAqICAgICBldGMKLSAgICAgKiAgICAgIj09PT0iCi0gICAgICogICAgICJic3NpZD0uLi5cbiIKLSAgICAgKiAgICAgZXRjCi0gICAgICogICAgICIlJSUlIgotICAgICAqICAgImFwY291bnQ9MlxuIgotICAgICAqICAgICAiYnNzaWQ9Li4uXG4iCi0gICAgICogICAgIGV0YwotICAgICAqICAgICAiJSUlJQotICAgICAqICAgZXRjCi0gICAgICogICAiLS0tLSIKLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBib29sZWFuIERFQlVHX1BBUlNFID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSB2b2lkIHJldHJpZXZlQmF0Y2hlZFNjYW5EYXRhKCkgewotICAgICAgICBTdHJpbmcgcmF3RGF0YSA9IG1XaWZpTmF0aXZlLmdldEJhdGNoZWRTY2FuUmVzdWx0cygpOwotICAgICAgICBpZiAoREVCVUdfUEFSU0UpIGxvZygicmF3RGF0YSA9ICIgKyByYXdEYXRhKTsKLSAgICAgICAgbUJhdGNoZWRTY2FuTWluUG9sbFRpbWUgPSAwOwotICAgICAgICBpZiAocmF3RGF0YSA9PSBudWxsIHx8IHJhd0RhdGEuZXF1YWxzSWdub3JlQ2FzZSgiT0siKSkgewotICAgICAgICAgICAgbG9nZSgiVW5leHBlY3RlZCBCYXRjaGVkU2NhblJlc3VsdHMgOiIgKyByYXdEYXRhKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzY2FuQ291bnQgPSAwOwotICAgICAgICBmaW5hbCBTdHJpbmcgRU5EX09GX0JBVENIRVMgPSAiLS0tLSI7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBTQ0FOQ09VTlQgPSAic2NhbmNvdW50PSI7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBUUlVOQ0FURUQgPSAidHJ1bmMiOwotICAgICAgICBmaW5hbCBTdHJpbmcgQUdFID0gImFnZT0iOwotICAgICAgICBmaW5hbCBTdHJpbmcgRElTVCA9ICJkaXN0PSI7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBESVNUU0QgPSAiZGlzdFNkPSI7Ci0KLSAgICAgICAgU3RyaW5nIHNwbGl0RGF0YVtdID0gcmF3RGF0YS5zcGxpdCgiXG4iKTsKLSAgICAgICAgaW50IG4gPSAwOwotICAgICAgICBpZiAoc3BsaXREYXRhW25dLnN0YXJ0c1dpdGgoU0NBTkNPVU5UKSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBzY2FuQ291bnQgPSBJbnRlZ2VyLnBhcnNlSW50KHNwbGl0RGF0YVtuKytdLnN1YnN0cmluZyhTQ0FOQ09VTlQubGVuZ3RoKCkpKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgic2NhbmNvdW50IHBhcnNlSW50IEV4Y2VwdGlvbiBmcm9tICIgKyBzcGxpdERhdGFbbl0pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgbG9nKCJzY2FuY291bnQgbm90IGZvdW5kIik7Ci0gICAgICAgIGlmIChzY2FuQ291bnQgPT0gMCkgewotICAgICAgICAgICAgbG9nZSgic2NhbkNvdW50PT0wIC0gYWJvcnRpbmciKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLkJBVENIRURfU0NBTl9SRVNVTFRTX0FWQUlMQUJMRV9BQ1RJT04pOwotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKLQotICAgICAgICBzeW5jaHJvbml6ZWQgKG1CYXRjaGVkU2NhblJlc3VsdHMpIHsKLSAgICAgICAgICAgIG1CYXRjaGVkU2NhblJlc3VsdHMuY2xlYXIoKTsKLSAgICAgICAgICAgIEJhdGNoZWRTY2FuUmVzdWx0IGJhdGNoZWRTY2FuUmVzdWx0ID0gbmV3IEJhdGNoZWRTY2FuUmVzdWx0KCk7Ci0KLSAgICAgICAgICAgIFN0cmluZyBic3NpZCA9IG51bGw7Ci0gICAgICAgICAgICBXaWZpU3NpZCB3aWZpU3NpZCA9IG51bGw7Ci0gICAgICAgICAgICBpbnQgbGV2ZWwgPSAwOwotICAgICAgICAgICAgaW50IGZyZXEgPSAwOwotICAgICAgICAgICAgaW50IGRpc3QsIGRpc3RTZDsKLSAgICAgICAgICAgIGxvbmcgdHNmID0gMDsKLSAgICAgICAgICAgIGRpc3QgPSBkaXN0U2QgPSBTY2FuUmVzdWx0LlVOU1BFQ0lGSUVEOwotICAgICAgICAgICAgZmluYWwgbG9uZyBub3cgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBic3NpZFN0ckxlbiA9IEJTU0lEX1NUUi5sZW5ndGgoKTsKLQotICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAobiA8IHNwbGl0RGF0YS5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1BBUlNFKSBsb2dkKCJwYXJzaW5nICIgKyBzcGxpdERhdGFbbl0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaXREYXRhW25dLmVxdWFscyhFTkRfT0ZfQkFUQ0hFUykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuKzEgIT0gc3BsaXREYXRhLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoImRpZG4ndCBjb25zdW1lICIgKyAoc3BsaXREYXRhLmxlbmd0aC1uKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUJhdGNoZWRTY2FuUmVzdWx0cy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQuc2VuZEJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2QoInJldHJpZXZlQmF0Y2hlZFNjYW5SZXN1bHRzIFgiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoKHNwbGl0RGF0YVtuXS5lcXVhbHMoRU5EX1NUUikpIHx8IHNwbGl0RGF0YVtuXS5lcXVhbHMoREVMSU1JVEVSX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChic3NpZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2hlZFNjYW5SZXN1bHQuc2NhblJlc3VsdHMuYWRkKG5ldyBTY2FuUmVzdWx0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lmaVNzaWQsIGJzc2lkLCAiIiwgbGV2ZWwsIGZyZXEsIHRzZiwgZGlzdCwgZGlzdFNkKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lmaVNzaWQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJzc2lkID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlcSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNmID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gZGlzdFNkID0gU2NhblJlc3VsdC5VTlNQRUNJRklFRDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGxpdERhdGFbbl0uZXF1YWxzKEVORF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhdGNoZWRTY2FuUmVzdWx0LnNjYW5SZXN1bHRzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1CYXRjaGVkU2NhblJlc3VsdHMuYWRkKGJhdGNoZWRTY2FuUmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2hlZFNjYW5SZXN1bHQgPSBuZXcgQmF0Y2hlZFNjYW5SZXN1bHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dkKCJGb3VuZCBlbXB0eSBiYXRjaCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdERhdGFbbl0uZXF1YWxzKFRSVU5DQVRFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoZWRTY2FuUmVzdWx0LnRydW5jYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BsaXREYXRhW25dLnN0YXJ0c1dpdGgoQlNTSURfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnNzaWQgPSBuZXcgU3RyaW5nKHNwbGl0RGF0YVtuXS5nZXRCeXRlcygpLCBic3NpZFN0ckxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXREYXRhW25dLmxlbmd0aCgpIC0gYnNzaWRTdHJMZW4pOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwbGl0RGF0YVtuXS5zdGFydHNXaXRoKEZSRVFfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVxID0gSW50ZWdlci5wYXJzZUludChzcGxpdERhdGFbbl0uc3Vic3RyaW5nKEZSRVFfU1RSLmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkludmFsaWQgZnJlcWVuY3k6ICIgKyBzcGxpdERhdGFbbl0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXEgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwbGl0RGF0YVtuXS5zdGFydHNXaXRoKEFHRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNmID0gbm93IC0gTG9uZy5wYXJzZUxvbmcoc3BsaXREYXRhW25dLnN1YnN0cmluZyhBR0UubGVuZ3RoKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2YgKj0gMTAwMDsgLy8gY29udmVydCBtUyAtPiB1UwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJbnZhbGlkIHRpbWVzdGFtcDogIiArIHNwbGl0RGF0YVtuXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNmID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdERhdGFbbl0uc3RhcnRzV2l0aChTU0lEX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZmlTc2lkID0gV2lmaVNzaWQuY3JlYXRlRnJvbUFzY2lpRW5jb2RlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXREYXRhW25dLnN1YnN0cmluZyhTU0lEX1NUUi5sZW5ndGgoKSkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwbGl0RGF0YVtuXS5zdGFydHNXaXRoKExFVkVMX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBJbnRlZ2VyLnBhcnNlSW50KHNwbGl0RGF0YVtuXS5zdWJzdHJpbmcoTEVWRUxfU1RSLmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVsID4gMCkgbGV2ZWwgLT0gMjU2OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJbnZhbGlkIGxldmVsOiAiICsgc3BsaXREYXRhW25dKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BsaXREYXRhW25dLnN0YXJ0c1dpdGgoRElTVCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IEludGVnZXIucGFyc2VJbnQoc3BsaXREYXRhW25dLnN1YnN0cmluZyhESVNULmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkludmFsaWQgZGlzdGFuY2U6ICIgKyBzcGxpdERhdGFbbl0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSBTY2FuUmVzdWx0LlVOU1BFQ0lGSUVEOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwbGl0RGF0YVtuXS5zdGFydHNXaXRoKERJU1RTRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdFNkID0gSW50ZWdlci5wYXJzZUludChzcGxpdERhdGFbbl0uc3Vic3RyaW5nKERJU1RTRC5sZW5ndGgoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJbnZhbGlkIGRpc3RhbmNlU2Q6ICIgKyBzcGxpdERhdGFbbl0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RTZCA9IFNjYW5SZXN1bHQuVU5TUEVDSUZJRUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJVbmFibGUgdG8gcGFyc2UgYmF0Y2hlZCBzY2FuIHJlc3VsdCBsaW5lOiAiICsgc3BsaXREYXRhW25dKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJhd0RhdGEgPSBtV2lmaU5hdGl2ZS5nZXRCYXRjaGVkU2NhblJlc3VsdHMoKTsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfUEFSU0UpIGxvZygicmVhZGluZyBtb3JlIGRhdGE6XG4iICsgcmF3RGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJhd0RhdGEgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBsb2dlKCJVbmV4cGVjdGVkIG51bGwgQmF0Y2hlZFNjYW5SZXN1bHRzIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3BsaXREYXRhID0gcmF3RGF0YS5zcGxpdCgiXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoc3BsaXREYXRhLmxlbmd0aCA9PSAwIHx8IHNwbGl0RGF0YVswXS5lcXVhbHMoIm9rIikpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiYmF0Y2ggc2NhbiByZXN1bHRzIGp1c3QgZW5kZWQhIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtQmF0Y2hlZFNjYW5SZXN1bHRzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHdvcmtTb3VyY2UgaXMgbm90IG51bGwsIGJsYW1lIGlzIGdpdmVuIHRvIGl0LCBvdGhlcndpc2UgYmxhbWUgaXMgZ2l2ZW4gdG8gY2FsbGluZ1VpZC4KLSAgICBwcml2YXRlIHZvaWQgbm90ZVNjYW5TdGFydChpbnQgY2FsbGluZ1VpZCwgV29ya1NvdXJjZSB3b3JrU291cmNlKSB7Ci0gICAgICAgIGlmIChtU2NhbldvcmtTb3VyY2UgPT0gbnVsbCAmJiAoY2FsbGluZ1VpZCAhPSBVTktOT1dOX1NDQU5fU09VUkNFIHx8IHdvcmtTb3VyY2UgIT0gbnVsbCkpIHsKLSAgICAgICAgICAgIG1TY2FuV29ya1NvdXJjZSA9IHdvcmtTb3VyY2UgIT0gbnVsbCA/IHdvcmtTb3VyY2UgOiBuZXcgV29ya1NvdXJjZShjYWxsaW5nVWlkKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbUJhdHRlcnlTdGF0cy5ub3RlV2lmaVNjYW5TdGFydGVkRnJvbVNvdXJjZShtU2NhbldvcmtTb3VyY2UpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBub3RlU2NhbkVuZCgpIHsKLSAgICAgICAgaWYgKG1TY2FuV29ya1NvdXJjZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZVdpZmlTY2FuU3RvcHBlZEZyb21Tb3VyY2UobVNjYW5Xb3JrU291cmNlKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIG1TY2FuV29ya1NvdXJjZSA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbm90ZUJhdGNoZWRTY2FuU3RhcnQoKSB7Ci0gICAgICAgIC8vIG5vdGUgdGhlIGVuZCBvZiBhIHByZXZpb3VzIHNjYW4gc2V0Ci0gICAgICAgIGlmIChtTm90ZWRCYXRjaGVkU2NhbldvcmtTb3VyY2UgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgIChtTm90ZWRCYXRjaGVkU2NhbldvcmtTb3VyY2UuZXF1YWxzKG1CYXRjaGVkU2NhbldvcmtTb3VyY2UpID09IGZhbHNlIHx8Ci0gICAgICAgICAgICAgICAgIG1Ob3RlZEJhdGNoZWRTY2FuQ3NwaCAhPSBtQmF0Y2hlZFNjYW5Dc3BoKSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpQmF0Y2hlZFNjYW5TdG9wcGVkRnJvbVNvdXJjZShtTm90ZWRCYXRjaGVkU2NhbldvcmtTb3VyY2UpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgbU5vdGVkQmF0Y2hlZFNjYW5Xb3JrU291cmNlID0gbnVsbDsKLSAgICAgICAgICAgICAgICBtTm90ZWRCYXRjaGVkU2NhbkNzcGggPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIG5vdGUgdGhlIHN0YXJ0IG9mIHRoZSBuZXcKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZVdpZmlCYXRjaGVkU2NhblN0YXJ0ZWRGcm9tU291cmNlKG1CYXRjaGVkU2NhbldvcmtTb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgIG1CYXRjaGVkU2NhbkNzcGgpOwotICAgICAgICAgICAgbU5vdGVkQmF0Y2hlZFNjYW5Xb3JrU291cmNlID0gbUJhdGNoZWRTY2FuV29ya1NvdXJjZTsKLSAgICAgICAgICAgIG1Ob3RlZEJhdGNoZWRTY2FuQ3NwaCA9IG1CYXRjaGVkU2NhbkNzcGg7Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBub3RlQmF0Y2hlZFNjYW5TdG9wKCkgewotICAgICAgICBpZiAobU5vdGVkQmF0Y2hlZFNjYW5Xb3JrU291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbUJhdHRlcnlTdGF0cy5ub3RlV2lmaUJhdGNoZWRTY2FuU3RvcHBlZEZyb21Tb3VyY2UobU5vdGVkQmF0Y2hlZFNjYW5Xb3JrU291cmNlKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIG1Ob3RlZEJhdGNoZWRTY2FuV29ya1NvdXJjZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgbU5vdGVkQmF0Y2hlZFNjYW5Dc3BoID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzdGFydFNjYW5OYXRpdmUoaW50IHR5cGUpIHsKLSAgICAgICAgbVdpZmlOYXRpdmUuc2Nhbih0eXBlKTsKLSAgICAgICAgbVNjYW5SZXN1bHRJc1BlbmRpbmcgPSB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRPRE86IGRvYwotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFN1cHBsaWNhbnRSdW5uaW5nKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgICAgIGlmIChlbmFibGUpIHsKLSAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFSVF9TVVBQTElDQU5UKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVE9QX1NVUFBMSUNBTlQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVE9ETzogZG9jCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0SG9zdEFwUnVubmluZyhXaWZpQ29uZmlndXJhdGlvbiB3aWZpQ29uZmlnLCBib29sZWFuIGVuYWJsZSkgewotICAgICAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBUlRfQVAsIHdpZmlDb25maWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUT1BfQVApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0V2lmaUFwQ29uZmlndXJhdGlvbihXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgbVdpZmlBcENvbmZpZ0NoYW5uZWwuc2VuZE1lc3NhZ2UoQ01EX1NFVF9BUF9DT05GSUcsIGNvbmZpZyk7Ci0gICAgfQotCi0gICAgcHVibGljIFdpZmlDb25maWd1cmF0aW9uIHN5bmNHZXRXaWZpQXBDb25maWd1cmF0aW9uKCkgewotICAgICAgICBNZXNzYWdlIHJlc3VsdE1zZyA9IG1XaWZpQXBDb25maWdDaGFubmVsLnNlbmRNZXNzYWdlU3luY2hyb25vdXNseShDTURfUkVRVUVTVF9BUF9DT05GSUcpOwotICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiByZXQgPSAoV2lmaUNvbmZpZ3VyYXRpb24pIHJlc3VsdE1zZy5vYmo7Ci0gICAgICAgIHJlc3VsdE1zZy5yZWN5Y2xlKCk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVE9ETzogZG9jCi0gICAgICovCi0gICAgcHVibGljIGludCBzeW5jR2V0V2lmaVN0YXRlKCkgewotICAgICAgICByZXR1cm4gbVdpZmlTdGF0ZS5nZXQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUT0RPOiBkb2MKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIHN5bmNHZXRXaWZpU3RhdGVCeU5hbWUoKSB7Ci0gICAgICAgIHN3aXRjaCAobVdpZmlTdGF0ZS5nZXQoKSkgewotICAgICAgICAgICAgY2FzZSBXSUZJX1NUQVRFX0RJU0FCTElORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gImRpc2FibGluZyI7Ci0gICAgICAgICAgICBjYXNlIFdJRklfU1RBVEVfRElTQUJMRUQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJkaXNhYmxlZCI7Ci0gICAgICAgICAgICBjYXNlIFdJRklfU1RBVEVfRU5BQkxJTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJlbmFibGluZyI7Ci0gICAgICAgICAgICBjYXNlIFdJRklfU1RBVEVfRU5BQkxFRDoKLSAgICAgICAgICAgICAgICByZXR1cm4gImVuYWJsZWQiOwotICAgICAgICAgICAgY2FzZSBXSUZJX1NUQVRFX1VOS05PV046Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHN0YXRlIjsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJbaW52YWxpZCBzdGF0ZV0iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVE9ETzogZG9jCi0gICAgICovCi0gICAgcHVibGljIGludCBzeW5jR2V0V2lmaUFwU3RhdGUoKSB7Ci0gICAgICAgIHJldHVybiBtV2lmaUFwU3RhdGUuZ2V0KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVE9ETzogZG9jCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBzeW5jR2V0V2lmaUFwU3RhdGVCeU5hbWUoKSB7Ci0gICAgICAgIHN3aXRjaCAobVdpZmlBcFN0YXRlLmdldCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFdJRklfQVBfU1RBVEVfRElTQUJMSU5HOgotICAgICAgICAgICAgICAgIHJldHVybiAiZGlzYWJsaW5nIjsKLSAgICAgICAgICAgIGNhc2UgV0lGSV9BUF9TVEFURV9ESVNBQkxFRDoKLSAgICAgICAgICAgICAgICByZXR1cm4gImRpc2FibGVkIjsKLSAgICAgICAgICAgIGNhc2UgV0lGSV9BUF9TVEFURV9FTkFCTElORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gImVuYWJsaW5nIjsKLSAgICAgICAgICAgIGNhc2UgV0lGSV9BUF9TVEFURV9FTkFCTEVEOgotICAgICAgICAgICAgICAgIHJldHVybiAiZW5hYmxlZCI7Ci0gICAgICAgICAgICBjYXNlIFdJRklfQVBfU1RBVEVfRkFJTEVEOgotICAgICAgICAgICAgICAgIHJldHVybiAiZmFpbGVkIjsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJbaW52YWxpZCBzdGF0ZV0iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiwgaWYgYW55LgotICAgICAqIEByZXR1cm4gYSB7QGxpbmsgV2lmaUluZm99IG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24KLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBXaWZpSW5mbyBzeW5jUmVxdWVzdENvbm5lY3Rpb25JbmZvKCkgewotICAgICAgICByZXR1cm4gbVdpZmlJbmZvOwotICAgIH0KLQotICAgIHB1YmxpYyBEaGNwUmVzdWx0cyBzeW5jR2V0RGhjcFJlc3VsdHMoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobURoY3BSZXN1bHRzTG9jaykgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBEaGNwUmVzdWx0cyhtRGhjcFJlc3VsdHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVE9ETzogZG9jCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RHJpdmVyU3RhcnQoYm9vbGVhbiBlbmFibGUpIHsKLSAgICAgICAgaWYgKGVuYWJsZSkgewotICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVJUX0RSSVZFUik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RPUF9EUklWRVIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGUoKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9DQVBUSVZFX0NIRUNLX0NPTVBMRVRFKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUT0RPOiBkb2MKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRPcGVyYXRpb25hbE1vZGUoaW50IG1vZGUpIHsKLSAgICAgICAgaWYgKERCRykgbG9nKCJzZXR0aW5nIG9wZXJhdGlvbmFsIG1vZGUgdG8gIiArIFN0cmluZy52YWx1ZU9mKG1vZGUpKTsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFLCBtb2RlLCAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUT0RPOiBkb2MKLSAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxTY2FuUmVzdWx0PiBzeW5jR2V0U2NhblJlc3VsdHNMaXN0KCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1TY2FuUmVzdWx0Q2FjaGUpIHsKLSAgICAgICAgICAgIExpc3Q8U2NhblJlc3VsdD4gc2Nhbkxpc3QgPSBuZXcgQXJyYXlMaXN0PFNjYW5SZXN1bHQ+KCk7Ci0gICAgICAgICAgICBmb3IoU2NhblJlc3VsdCByZXN1bHQ6IG1TY2FuUmVzdWx0cykgewotICAgICAgICAgICAgICAgIHNjYW5MaXN0LmFkZChuZXcgU2NhblJlc3VsdChyZXN1bHQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzY2FuTGlzdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIERpc2Nvbm5lY3QgZnJvbSBBY2Nlc3MgUG9pbnQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0Q29tbWFuZCgpIHsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX0RJU0NPTk5FQ1QpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluaXRpYXRlIGEgcmVjb25uZWN0aW9uIHRvIEFQCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVjb25uZWN0Q29tbWFuZCgpIHsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1JFQ09OTkVDVCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5pdGlhdGUgYSByZS1hc3NvY2lhdGlvbiB0byBBUAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlYXNzb2NpYXRlQ29tbWFuZCgpIHsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1JFQVNTT0NJQVRFKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWxvYWQgbmV0d29ya3MgYW5kIHRoZW4gcmVjb25uZWN0OyBoZWxwcyBsb2FkIGNvcnJlY3QgZGF0YSBmb3IgVExTIG5ldHdvcmtzCi0gICAgICovCi0KLSAgICBwdWJsaWMgdm9pZCByZWxvYWRUbHNOZXR3b3Jrc0FuZFJlY29ubmVjdCgpIHsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1JFTE9BRF9UTFNfQU5EX1JFQ09OTkVDVCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkIGEgbmV0d29yayBzeW5jaHJvbm91c2x5Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIG5ldHdvcmsgaWQgb2YgdGhlIG5ldyBuZXR3b3JrCi0gICAgICovCi0gICAgcHVibGljIGludCBzeW5jQWRkT3JVcGRhdGVOZXR3b3JrKEFzeW5jQ2hhbm5lbCBjaGFubmVsLCBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgTWVzc2FnZSByZXN1bHRNc2cgPSBjaGFubmVsLnNlbmRNZXNzYWdlU3luY2hyb25vdXNseShDTURfQUREX09SX1VQREFURV9ORVRXT1JLLCBjb25maWcpOwotICAgICAgICBpbnQgcmVzdWx0ID0gcmVzdWx0TXNnLmFyZzE7Ci0gICAgICAgIHJlc3VsdE1zZy5yZWN5Y2xlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIExpc3Q8V2lmaUNvbmZpZ3VyYXRpb24+IHN5bmNHZXRDb25maWd1cmVkTmV0d29ya3MoQXN5bmNDaGFubmVsIGNoYW5uZWwpIHsKLSAgICAgICAgTWVzc2FnZSByZXN1bHRNc2cgPSBjaGFubmVsLnNlbmRNZXNzYWdlU3luY2hyb25vdXNseShDTURfR0VUX0NPTkZJR1VSRURfTkVUV09SS1MpOwotICAgICAgICBMaXN0PFdpZmlDb25maWd1cmF0aW9uPiByZXN1bHQgPSAoTGlzdDxXaWZpQ29uZmlndXJhdGlvbj4pIHJlc3VsdE1zZy5vYmo7Ci0gICAgICAgIHJlc3VsdE1zZy5yZWN5Y2xlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGVsZXRlIGEgbmV0d29yawotICAgICAqCi0gICAgICogQHBhcmFtIG5ldHdvcmtJZCBpZCBvZiB0aGUgbmV0d29yayB0byBiZSByZW1vdmVkCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc3luY1JlbW92ZU5ldHdvcmsoQXN5bmNDaGFubmVsIGNoYW5uZWwsIGludCBuZXR3b3JrSWQpIHsKLSAgICAgICAgTWVzc2FnZSByZXN1bHRNc2cgPSBjaGFubmVsLnNlbmRNZXNzYWdlU3luY2hyb25vdXNseShDTURfUkVNT1ZFX05FVFdPUkssIG5ldHdvcmtJZCk7Ci0gICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gKHJlc3VsdE1zZy5hcmcxICE9IEZBSUxVUkUpOwotICAgICAgICByZXN1bHRNc2cucmVjeWNsZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVuYWJsZSBhIG5ldHdvcmsKLSAgICAgKgotICAgICAqIEBwYXJhbSBuZXRJZCBuZXR3b3JrIGlkIG9mIHRoZSBuZXR3b3JrCi0gICAgICogQHBhcmFtIGRpc2FibGVPdGhlcnMgdHJ1ZSwgaWYgYWxsIG90aGVyIG5ldHdvcmtzIGhhdmUgdG8gYmUgZGlzYWJsZWQKLSAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRzLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHN5bmNFbmFibGVOZXR3b3JrKEFzeW5jQ2hhbm5lbCBjaGFubmVsLCBpbnQgbmV0SWQsIGJvb2xlYW4gZGlzYWJsZU90aGVycykgewotICAgICAgICBNZXNzYWdlIHJlc3VsdE1zZyA9IGNoYW5uZWwuc2VuZE1lc3NhZ2VTeW5jaHJvbm91c2x5KENNRF9FTkFCTEVfTkVUV09SSywgbmV0SWQsCi0gICAgICAgICAgICAgICAgZGlzYWJsZU90aGVycyA/IDEgOiAwKTsKLSAgICAgICAgYm9vbGVhbiByZXN1bHQgPSAocmVzdWx0TXNnLmFyZzEgIT0gRkFJTFVSRSk7Ci0gICAgICAgIHJlc3VsdE1zZy5yZWN5Y2xlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGlzYWJsZSBhIG5ldHdvcmsKLSAgICAgKgotICAgICAqIEBwYXJhbSBuZXRJZCBuZXR3b3JrIGlkIG9mIHRoZSBuZXR3b3JrCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkcywge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBzeW5jRGlzYWJsZU5ldHdvcmsoQXN5bmNDaGFubmVsIGNoYW5uZWwsIGludCBuZXRJZCkgewotICAgICAgICBNZXNzYWdlIHJlc3VsdE1zZyA9IGNoYW5uZWwuc2VuZE1lc3NhZ2VTeW5jaHJvbm91c2x5KFdpZmlNYW5hZ2VyLkRJU0FCTEVfTkVUV09SSywgbmV0SWQpOwotICAgICAgICBib29sZWFuIHJlc3VsdCA9IChyZXN1bHRNc2cuYXJnMSAhPSBXaWZpTWFuYWdlci5ESVNBQkxFX05FVFdPUktfRkFJTEVEKTsKLSAgICAgICAgcmVzdWx0TXNnLnJlY3ljbGUoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBCbGFja2xpc3QgYSBCU1NJRC4gVGhpcyB3aWxsIGF2b2lkIHRoZSBBUCBpZiB0aGVyZSBhcmUKLSAgICAgKiBhbHRlcm5hdGUgQVBzIHRvIGNvbm5lY3QKLSAgICAgKgotICAgICAqIEBwYXJhbSBic3NpZCBCU1NJRCBvZiB0aGUgbmV0d29yawotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZFRvQmxhY2tsaXN0KFN0cmluZyBic3NpZCkgewotICAgICAgICBzZW5kTWVzc2FnZShDTURfQkxBQ0tMSVNUX05FVFdPUkssIGJzc2lkKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDbGVhciB0aGUgYmxhY2tsaXN0IGxpc3QKLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNsZWFyQmxhY2tsaXN0KCkgewotICAgICAgICBzZW5kTWVzc2FnZShDTURfQ0xFQVJfQkxBQ0tMSVNUKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBlbmFibGVSc3NpUG9sbGluZyhib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICBzZW5kTWVzc2FnZShDTURfRU5BQkxFX1JTU0lfUE9MTCwgZW5hYmxlZCA/IDEgOiAwLCAwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBlbmFibGVCYWNrZ3JvdW5kU2NhbkNvbW1hbmQoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgICAgc2VuZE1lc3NhZ2UoQ01EX0VOQUJMRV9CQUNLR1JPVU5EX1NDQU4sIGVuYWJsZWQgPyAxIDogMCwgMCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZW5hYmxlQWxsTmV0d29ya3MoKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9FTkFCTEVfQUxMX05FVFdPUktTKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdGFydCBmaWx0ZXJpbmcgTXVsdGljYXN0IHY0IHBhY2tldHMKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydEZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cygpIHsKLSAgICAgICAgbUZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cy5zZXQodHJ1ZSk7Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HLCBNVUxUSUNBU1RfVjQsIDApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0b3AgZmlsdGVyaW5nIE11bHRpY2FzdCB2NCBwYWNrZXRzCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3RvcEZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cygpIHsKLSAgICAgICAgbUZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cy5zZXQoZmFsc2UpOwotICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HLCBNVUxUSUNBU1RfVjQsIDApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0YXJ0IGZpbHRlcmluZyBNdWx0aWNhc3QgdjQgcGFja2V0cwotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN0YXJ0RmlsdGVyaW5nTXVsdGljYXN0VjZQYWNrZXRzKCkgewotICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBUlRfUEFDS0VUX0ZJTFRFUklORywgTVVMVElDQVNUX1Y2LCAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdG9wIGZpbHRlcmluZyBNdWx0aWNhc3QgdjQgcGFja2V0cwotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN0b3BGaWx0ZXJpbmdNdWx0aWNhc3RWNlBhY2tldHMoKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVE9QX1BBQ0tFVF9GSUxURVJJTkcsIE1VTFRJQ0FTVF9WNiwgMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IGhpZ2ggcGVyZm9ybWFuY2UgbW9kZSBvZiBvcGVyYXRpb24uCi0gICAgICogRW5hYmxpbmcgd291bGQgc2V0IGFjdGl2ZSBwb3dlciBtb2RlIGFuZCBkaXNhYmxlIHN1c3BlbmQgb3B0aW1pemF0aW9uczsKLSAgICAgKiBkaXNhYmxpbmcgd291bGQgc2V0IGF1dG8gcG93ZXIgbW9kZSBhbmQgZW5hYmxlIHN1c3BlbmQgb3B0aW1pemF0aW9ucwotICAgICAqIEBwYXJhbSBlbmFibGUgdHJ1ZSBpZiBlbmFibGUsIGZhbHNlIG90aGVyd2lzZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEhpZ2hQZXJmTW9kZUVuYWJsZWQoYm9vbGVhbiBlbmFibGUpIHsKLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NFVF9ISUdIX1BFUkZfTU9ERSwgZW5hYmxlID8gMSA6IDAsIDApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldCB0aGUgY291bnRyeSBjb2RlCi0gICAgICogQHBhcmFtIGNvdW50cnlDb2RlIGZvbGxvd2luZyBJU08gMzE2NiBmb3JtYXQKLSAgICAgKiBAcGFyYW0gcGVyc2lzdCB7QGNvZGUgdHJ1ZX0gaWYgdGhlIHNldHRpbmcgc2hvdWxkIGJlIHJlbWVtYmVyZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Q291bnRyeUNvZGUoU3RyaW5nIGNvdW50cnlDb2RlLCBib29sZWFuIHBlcnNpc3QpIHsKLSAgICAgICAgaWYgKHBlcnNpc3QpIHsKLSAgICAgICAgICAgIG1QZXJzaXN0ZWRDb3VudHJ5Q29kZSA9IGNvdW50cnlDb2RlOwotICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLnB1dFN0cmluZyhtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfQ09VTlRSWV9DT0RFLAotICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NFVF9DT1VOVFJZX0NPREUsIGNvdW50cnlDb2RlKTsKLSAgICAgICAgbVdpZmlQMnBDaGFubmVsLnNlbmRNZXNzYWdlKFdpZmlQMnBTZXJ2aWNlLlNFVF9DT1VOVFJZX0NPREUsIGNvdW50cnlDb2RlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgdGhlIG9wZXJhdGlvbmFsIGZyZXF1ZW5jeSBiYW5kCi0gICAgICogQHBhcmFtIGJhbmQKLSAgICAgKiBAcGFyYW0gcGVyc2lzdCB7QGNvZGUgdHJ1ZX0gaWYgdGhlIHNldHRpbmcgc2hvdWxkIGJlIHJlbWVtYmVyZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RnJlcXVlbmN5QmFuZChpbnQgYmFuZCwgYm9vbGVhbiBwZXJzaXN0KSB7Ci0gICAgICAgIGlmIChwZXJzaXN0KSB7Ci0gICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwucHV0SW50KG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9GUkVRVUVOQ1lfQkFORCwKLSAgICAgICAgICAgICAgICAgICAgYmFuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NFVF9GUkVRVUVOQ1lfQkFORCwgYmFuZCwgMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRW5hYmxlIFRETFMgZm9yIGEgc3BlY2lmaWMgTUFDIGFkZHJlc3MKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBlbmFibGVUZGxzKFN0cmluZyByZW1vdGVNYWNBZGRyZXNzLCBib29sZWFuIGVuYWJsZSkgewotICAgICAgICBpbnQgZW5hYmxlciA9IGVuYWJsZSA/IDEgOiAwOwotICAgICAgICBzZW5kTWVzc2FnZShDTURfRU5BQkxFX1RETFMsIGVuYWJsZXIsIDAsIHJlbW90ZU1hY0FkZHJlc3MpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG9wZXJhdGlvbmFsIGZyZXF1ZW5jeSBiYW5kCi0gICAgICovCi0gICAgcHVibGljIGludCBnZXRGcmVxdWVuY3lCYW5kKCkgewotICAgICAgICByZXR1cm4gbUZyZXF1ZW5jeUJhbmQuZ2V0KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgd2lmaSBjb25maWd1cmF0aW9uIGZpbGUKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbmZpZ0ZpbGUoKSB7Ci0gICAgICAgIHJldHVybiBtV2lmaUNvbmZpZ1N0b3JlLmdldENvbmZpZ0ZpbGUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZW5kIGEgbWVzc2FnZSBpbmRpY2F0aW5nIGJsdWV0b290aCBhZGFwdGVyIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNlbmRCbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2UoaW50IHN0YXRlKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdlKENNRF9CTFVFVE9PVEhfQURBUFRFUl9TVEFURV9DSEFOR0UsIHN0YXRlLCAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTYXZlIGNvbmZpZ3VyYXRpb24gb24gc3VwcGxpY2FudAotICAgICAqCi0gICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkcywge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKLSAgICAgKgotICAgICAqIFRPRE86IGRlcHJlY2F0ZSB0aGlzCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc3luY1NhdmVDb25maWcoQXN5bmNDaGFubmVsIGNoYW5uZWwpIHsKLSAgICAgICAgTWVzc2FnZSByZXN1bHRNc2cgPSBjaGFubmVsLnNlbmRNZXNzYWdlU3luY2hyb25vdXNseShDTURfU0FWRV9DT05GSUcpOwotICAgICAgICBib29sZWFuIHJlc3VsdCA9IChyZXN1bHRNc2cuYXJnMSAhPSBGQUlMVVJFKTsKLSAgICAgICAgcmVzdWx0TXNnLnJlY3ljbGUoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB1cGRhdGVCYXR0ZXJ5V29ya1NvdXJjZShXb3JrU291cmNlIG5ld1NvdXJjZSkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1SdW5uaW5nV2lmaVVpZHMpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld1NvdXJjZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1SdW5uaW5nV2lmaVVpZHMuc2V0KG5ld1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtSXNSdW5uaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtUmVwb3J0ZWRSdW5uaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgd29yayBzb3VyY2UgaGFzIGNoYW5nZWQgc2luY2UgbGFzdCB0aW1lLCBuZWVkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byByZW1vdmUgb2xkIHdvcmsgZnJvbSBiYXR0ZXJ5IHN0YXRzLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1MYXN0UnVubmluZ1dpZmlVaWRzLmRpZmYobVJ1bm5pbmdXaWZpVWlkcykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpUnVubmluZ0NoYW5nZWQobUxhc3RSdW5uaW5nV2lmaVVpZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUnVubmluZ1dpZmlVaWRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGFzdFJ1bm5pbmdXaWZpVWlkcy5zZXQobVJ1bm5pbmdXaWZpVWlkcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgYmVpbmcgc3RhcnRlZCwgcmVwb3J0IGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgbUJhdHRlcnlTdGF0cy5ub3RlV2lmaVJ1bm5pbmcobVJ1bm5pbmdXaWZpVWlkcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTGFzdFJ1bm5pbmdXaWZpVWlkcy5zZXQobVJ1bm5pbmdXaWZpVWlkcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUmVwb3J0ZWRSdW5uaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtUmVwb3J0ZWRSdW5uaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBMYXN0IHJlcG9ydGVkIHdlIHdlcmUgcnVubmluZywgdGltZSB0byBzdG9wLgotICAgICAgICAgICAgICAgICAgICAgICAgbUJhdHRlcnlTdGF0cy5ub3RlV2lmaVN0b3BwZWQobUxhc3RSdW5uaW5nV2lmaVVpZHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgbUxhc3RSdW5uaW5nV2lmaVVpZHMuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1SZXBvcnRlZFJ1bm5pbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtV2FrZUxvY2suc2V0V29ya1NvdXJjZShuZXdTb3VyY2UpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGlnbm9yZSkgewotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZHVtcChGaWxlRGVzY3JpcHRvciBmZCwgUHJpbnRXcml0ZXIgcHcsIFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgc3VwZXIuZHVtcChmZCwgcHcsIGFyZ3MpOwotICAgICAgICBtU3VwcGxpY2FudFN0YXRlVHJhY2tlci5kdW1wKGZkLCBwdywgYXJncyk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1MaW5rUHJvcGVydGllcyAiICsgbUxpbmtQcm9wZXJ0aWVzKTsKLSAgICAgICAgcHcucHJpbnRsbigibVdpZmlJbmZvICIgKyBtV2lmaUluZm8pOwotICAgICAgICBwdy5wcmludGxuKCJtRGhjcFJlc3VsdHMgIiArIG1EaGNwUmVzdWx0cyk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1OZXR3b3JrSW5mbyAiICsgbU5ldHdvcmtJbmZvKTsKLSAgICAgICAgcHcucHJpbnRsbigibUxhc3RTaWduYWxMZXZlbCAiICsgbUxhc3RTaWduYWxMZXZlbCk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1MYXN0QnNzaWQgIiArIG1MYXN0QnNzaWQpOwotICAgICAgICBwdy5wcmludGxuKCJtTGFzdE5ldHdvcmtJZCAiICsgbUxhc3ROZXR3b3JrSWQpOwotICAgICAgICBwdy5wcmludGxuKCJtUmVjb25uZWN0Q291bnQgIiArIG1SZWNvbm5lY3RDb3VudCk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1PcGVyYXRpb25hbE1vZGUgIiArIG1PcGVyYXRpb25hbE1vZGUpOwotICAgICAgICBwdy5wcmludGxuKCJtVXNlcldhbnRzU3VzcGVuZE9wdCAiICsgbVVzZXJXYW50c1N1c3BlbmRPcHQpOwotICAgICAgICBwdy5wcmludGxuKCJtU3VzcGVuZE9wdE5lZWRzRGlzYWJsZWQgIiArIG1TdXNwZW5kT3B0TmVlZHNEaXNhYmxlZCk7Ci0gICAgICAgIHB3LnByaW50bG4oIlN1cHBsaWNhbnQgc3RhdHVzICIgKyBtV2lmaU5hdGl2ZS5zdGF0dXMoKSk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1FbmFibGVCYWNrZ3JvdW5kU2NhbiAiICsgbUVuYWJsZUJhY2tncm91bmRTY2FuKTsKLSAgICAgICAgcHcucHJpbnRsbigpOwotICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmR1bXAoZmQsIHB3LCBhcmdzKTsKLSAgICB9Ci0KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICogSW50ZXJuYWwgcHJpdmF0ZSBmdW5jdGlvbnMKLSAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgICBwcml2YXRlIHZvaWQgaGFuZGxlU2NyZWVuU3RhdGVDaGFuZ2VkKGJvb2xlYW4gc2NyZWVuT24pIHsKLSAgICAgICAgaWYgKERCRykgbG9nKCJoYW5kbGVTY3JlZW5TdGF0ZUNoYW5nZWQ6ICIgKyBzY3JlZW5Pbik7Ci0gICAgICAgIGVuYWJsZVJzc2lQb2xsaW5nKHNjcmVlbk9uKTsKLSAgICAgICAgaWYgKG1CYWNrZ3JvdW5kU2NhblN1cHBvcnRlZCkgewotICAgICAgICAgICAgZW5hYmxlQmFja2dyb3VuZFNjYW5Db21tYW5kKHNjcmVlbk9uID09IGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzY3JlZW5PbikgZW5hYmxlQWxsTmV0d29ya3MoKTsKLSAgICAgICAgaWYgKG1Vc2VyV2FudHNTdXNwZW5kT3B0LmdldCgpKSB7Ci0gICAgICAgICAgICBpZiAoc2NyZWVuT24pIHsKLSAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU0VUX1NVU1BFTkRfT1BUX0VOQUJMRUQsIDAsIDApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvL0FsbG93IDJzIGZvciBzdXNwZW5kIG9wdGltaXphdGlvbnMgdG8gYmUgc2V0Ci0gICAgICAgICAgICAgICAgbVN1c3BlbmRXYWtlTG9jay5hY3F1aXJlKDIwMDApOwotICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TRVRfU1VTUEVORF9PUFRfRU5BQkxFRCwgMSwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbVNjcmVlbkJyb2FkY2FzdFJlY2VpdmVkLnNldCh0cnVlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2hlY2tBbmRTZXRDb25uZWN0aXZpdHlJbnN0YW5jZSgpIHsKLSAgICAgICAgaWYgKG1DbSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtQ20gPSAoQ29ubmVjdGl2aXR5TWFuYWdlcikgbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkNPTk5FQ1RJVklUWV9TRVJWSUNFKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBzdGFydFRldGhlcmluZyhBcnJheUxpc3Q8U3RyaW5nPiBhdmFpbGFibGUpIHsKLQotICAgICAgICBib29sZWFuIHdpZmlBdmFpbGFibGUgPSBmYWxzZTsKLQotICAgICAgICBjaGVja0FuZFNldENvbm5lY3Rpdml0eUluc3RhbmNlKCk7Ci0KLSAgICAgICAgU3RyaW5nW10gd2lmaVJlZ2V4cyA9IG1DbS5nZXRUZXRoZXJhYmxlV2lmaVJlZ2V4cygpOwotCi0gICAgICAgIGZvciAoU3RyaW5nIGludGYgOiBhdmFpbGFibGUpIHsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIHJlZ2V4IDogd2lmaVJlZ2V4cykgewotICAgICAgICAgICAgICAgIGlmIChpbnRmLm1hdGNoZXMocmVnZXgpKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlQ29uZmlndXJhdGlvbiBpZmNnID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmY2cgPSBtTndTZXJ2aWNlLmdldEludGVyZmFjZUNvbmZpZyhpbnRmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZmNnICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUC9uZXRtYXNrOiAxOTIuMTY4LjQzLjEvMjU1LjI1NS4yNTUuMCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmY2cuc2V0TGlua0FkZHJlc3MobmV3IExpbmtBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29ya1V0aWxzLm51bWVyaWNUb0luZXRBZGRyZXNzKCIxOTIuMTY4LjQzLjEiKSwgMjQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmNnLnNldEludGVyZmFjZVVwKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLnNldEludGVyZmFjZUNvbmZpZyhpbnRmLCBpZmNnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkVycm9yIGNvbmZpZ3VyaW5nIGludGVyZmFjZSAiICsgaW50ZiArICIsIDoiICsgZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZihtQ20udGV0aGVyKGludGYpICE9IENvbm5lY3Rpdml0eU1hbmFnZXIuVEVUSEVSX0VSUk9SX05PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJFcnJvciB0ZXRoZXJpbmcgb24gIiArIGludGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1UZXRoZXJJbnRlcmZhY2VOYW1lID0gaW50ZjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGZvdW5kIG5vIGludGVyZmFjZXMgdG8gdGV0aGVyCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc3RvcFRldGhlcmluZygpIHsKLQotICAgICAgICBjaGVja0FuZFNldENvbm5lY3Rpdml0eUluc3RhbmNlKCk7Ci0KLSAgICAgICAgLyogQ2xlYXIgdGhlIGludGVyZmFjZSBjb25maWcgdG8gYWxsb3cgZGhjcCBjb3JyZWN0bHkgY29uZmlndXJlIG5ldwotICAgICAgICAgICBpcCBzZXR0aW5ncyAqLwotICAgICAgICBJbnRlcmZhY2VDb25maWd1cmF0aW9uIGlmY2cgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWZjZyA9IG1Od1NlcnZpY2UuZ2V0SW50ZXJmYWNlQ29uZmlnKG1UZXRoZXJJbnRlcmZhY2VOYW1lKTsKLSAgICAgICAgICAgIGlmIChpZmNnICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZmNnLnNldExpbmtBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpbmtBZGRyZXNzKE5ldHdvcmtVdGlscy5udW1lcmljVG9JbmV0QWRkcmVzcygiMC4wLjAuMCIpLCAwKSk7Ci0gICAgICAgICAgICAgICAgbU53U2VydmljZS5zZXRJbnRlcmZhY2VDb25maWcobVRldGhlckludGVyZmFjZU5hbWUsIGlmY2cpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgbG9nZSgiRXJyb3IgcmVzZXR0aW5nIGludGVyZmFjZSAiICsgbVRldGhlckludGVyZmFjZU5hbWUgKyAiLCA6IiArIGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1DbS51bnRldGhlcihtVGV0aGVySW50ZXJmYWNlTmFtZSkgIT0gQ29ubmVjdGl2aXR5TWFuYWdlci5URVRIRVJfRVJST1JfTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGxvZ2UoIlVudGV0aGVyIGluaXRpYXRlIGZhaWxlZCEiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBpc1dpZmlUZXRoZXJlZChBcnJheUxpc3Q8U3RyaW5nPiBhY3RpdmUpIHsKLQotICAgICAgICBjaGVja0FuZFNldENvbm5lY3Rpdml0eUluc3RhbmNlKCk7Ci0KLSAgICAgICAgU3RyaW5nW10gd2lmaVJlZ2V4cyA9IG1DbS5nZXRUZXRoZXJhYmxlV2lmaVJlZ2V4cygpOwotICAgICAgICBmb3IgKFN0cmluZyBpbnRmIDogYWN0aXZlKSB7Ci0gICAgICAgICAgICBmb3IgKFN0cmluZyByZWdleCA6IHdpZmlSZWdleHMpIHsKLSAgICAgICAgICAgICAgICBpZiAoaW50Zi5tYXRjaGVzKHJlZ2V4KSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZm91bmQgbm8gaW50ZXJmYWNlcyB0aGF0IGFyZSB0ZXRoZXJlZAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBjb3VudHJ5IGNvZGUgZnJvbSB0aGUgc3lzdGVtIHNldHRpbmcgdmFsdWUsIGlmIGFueS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2V0Q291bnRyeUNvZGUoKSB7Ci0gICAgICAgIFN0cmluZyBjb3VudHJ5Q29kZSA9IFNldHRpbmdzLkdsb2JhbC5nZXRTdHJpbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfQ09VTlRSWV9DT0RFKTsKLSAgICAgICAgaWYgKGNvdW50cnlDb2RlICE9IG51bGwgJiYgIWNvdW50cnlDb2RlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgc2V0Q291bnRyeUNvZGUoY291bnRyeUNvZGUsIGZhbHNlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vdXNlIGRyaXZlciBkZWZhdWx0Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgdGhlIGZyZXF1ZW5jeSBiYW5kIGZyb20gdGhlIHN5c3RlbSBzZXR0aW5nIHZhbHVlLCBpZiBhbnkuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNldEZyZXF1ZW5jeUJhbmQoKSB7Ci0gICAgICAgIGludCBiYW5kID0gU2V0dGluZ3MuR2xvYmFsLmdldEludChtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9GUkVRVUVOQ1lfQkFORCwgV2lmaU1hbmFnZXIuV0lGSV9GUkVRVUVOQ1lfQkFORF9BVVRPKTsKLSAgICAgICAgc2V0RnJlcXVlbmN5QmFuZChiYW5kLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zTmF0aXZlKGludCByZWFzb24sIGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgICBpZiAoREJHKSBsb2coInNldFN1c3BlbmRPcHRpbWl6YXRpb25zTmF0aXZlOiAiICsgcmVhc29uICsgIiAiICsgZW5hYmxlZCk7Ci0gICAgICAgIGlmIChlbmFibGVkKSB7Ci0gICAgICAgICAgICBtU3VzcGVuZE9wdE5lZWRzRGlzYWJsZWQgJj0gfnJlYXNvbjsKLSAgICAgICAgICAgIC8qIE5vbmUgb2YgZGhjcCwgc2NyZWVuIG9yIGhpZ2hwZXJmIG5lZWQgaXQgZGlzYWJsZWQgYW5kIHVzZXIgd2FudHMgaXQgZW5hYmxlZCAqLwotICAgICAgICAgICAgaWYgKG1TdXNwZW5kT3B0TmVlZHNEaXNhYmxlZCA9PSAwICYmIG1Vc2VyV2FudHNTdXNwZW5kT3B0LmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0U3VzcGVuZE9wdGltaXphdGlvbnModHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtU3VzcGVuZE9wdE5lZWRzRGlzYWJsZWQgfD0gcmVhc29uOwotICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0U3VzcGVuZE9wdGltaXphdGlvbnMoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zKGludCByZWFzb24sIGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgICBpZiAoREJHKSBsb2coInNldFN1c3BlbmRPcHRpbWl6YXRpb25zOiAiICsgcmVhc29uICsgIiAiICsgZW5hYmxlZCk7Ci0gICAgICAgIGlmIChlbmFibGVkKSB7Ci0gICAgICAgICAgICBtU3VzcGVuZE9wdE5lZWRzRGlzYWJsZWQgJj0gfnJlYXNvbjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1TdXNwZW5kT3B0TmVlZHNEaXNhYmxlZCB8PSByZWFzb247Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKERCRykgbG9nKCJtU3VzcGVuZE9wdE5lZWRzRGlzYWJsZWQgIiArIG1TdXNwZW5kT3B0TmVlZHNEaXNhYmxlZCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldFdpZmlTdGF0ZShpbnQgd2lmaVN0YXRlKSB7Ci0gICAgICAgIGZpbmFsIGludCBwcmV2aW91c1dpZmlTdGF0ZSA9IG1XaWZpU3RhdGUuZ2V0KCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmICh3aWZpU3RhdGUgPT0gV0lGSV9TVEFURV9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgbUJhdHRlcnlTdGF0cy5ub3RlV2lmaU9uKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHdpZmlTdGF0ZSA9PSBXSUZJX1NUQVRFX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICAgICAgbUJhdHRlcnlTdGF0cy5ub3RlV2lmaU9mZigpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIG5vdGUgYmF0dGVyeSBzdGF0cyBpbiB3aWZpIik7Ci0gICAgICAgIH0KLQotICAgICAgICBtV2lmaVN0YXRlLnNldCh3aWZpU3RhdGUpOwotCi0gICAgICAgIGlmIChEQkcpIGxvZygic2V0V2lmaVN0YXRlOiAiICsgc3luY0dldFdpZmlTdGF0ZUJ5TmFtZSgpKTsKLQotICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpTWFuYWdlci5XSUZJX1NUQVRFX0NIQU5HRURfQUNUSU9OKTsKLSAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7Ci0gICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9XSUZJX1NUQVRFLCB3aWZpU3RhdGUpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfUFJFVklPVVNfV0lGSV9TVEFURSwgcHJldmlvdXNXaWZpU3RhdGUpOwotICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXRXaWZpQXBTdGF0ZShpbnQgd2lmaUFwU3RhdGUpIHsKLSAgICAgICAgZmluYWwgaW50IHByZXZpb3VzV2lmaUFwU3RhdGUgPSBtV2lmaUFwU3RhdGUuZ2V0KCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmICh3aWZpQXBTdGF0ZSA9PSBXSUZJX0FQX1NUQVRFX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVXaWZpT24oKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAod2lmaUFwU3RhdGUgPT0gV0lGSV9BUF9TVEFURV9ESVNBQkxFRCkgewotICAgICAgICAgICAgICAgIG1CYXR0ZXJ5U3RhdHMubm90ZVdpZmlPZmYoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBub3RlIGJhdHRlcnkgc3RhdHMgaW4gd2lmaSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXBkYXRlIHN0YXRlCi0gICAgICAgIG1XaWZpQXBTdGF0ZS5zZXQod2lmaUFwU3RhdGUpOwotCi0gICAgICAgIGlmIChEQkcpIGxvZygic2V0V2lmaUFwU3RhdGU6ICIgKyBzeW5jR2V0V2lmaUFwU3RhdGVCeU5hbWUoKSk7Ci0KLSAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuV0lGSV9BUF9TVEFURV9DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfV0lGSV9BUF9TVEFURSwgd2lmaUFwU3RhdGUpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfUFJFVklPVVNfV0lGSV9BUF9TVEFURSwgcHJldmlvdXNXaWZpQXBTdGF0ZSk7Ci0gICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NUUiA9ICJpZD0iOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCU1NJRF9TVFIgPSAiYnNzaWQ9IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJFUV9TVFIgPSAiZnJlcT0iOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMRVZFTF9TVFIgPSAibGV2ZWw9IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFNGX1NUUiA9ICJ0c2Y9IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBR1NfU1RSID0gImZsYWdzPSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNTSURfU1RSID0gInNzaWQ9IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVMSU1JVEVSX1NUUiA9ICI9PT09IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5EX1NUUiA9ICIjIyMjIjsKLQotICAgIC8qKgotICAgICAqIEZvcm1hdDoKLSAgICAgKgotICAgICAqIGlkPTEKLSAgICAgKiBic3NpZD02ODo3Zjo3NjpkNzoxYTo2ZQotICAgICAqIGZyZXE9MjQxMgotICAgICAqIGxldmVsPS00NAotICAgICAqIHRzZj0xMzQ0NjI2MjQzNzAwMzQyCi0gICAgICogZmxhZ3M9W1dQQTItUFNLLUNDTVBdW1dQU11bRVNTXQotICAgICAqIHNzaWQ9emZkeQotICAgICAqID09PT0KLSAgICAgKiBpZD0yCi0gICAgICogYnNzaWQ9Njg6NWY6NzQ6ZDc6MWE6NmYKLSAgICAgKiBmcmVxPTUxODAKLSAgICAgKiBsZXZlbD0tNzMKLSAgICAgKiB0c2Y9MTM0NDYyNjI0MzcwMDM3MwotICAgICAqIGZsYWdzPVtXUEEyLVBTSy1DQ01QXVtXUFNdW0VTU10KLSAgICAgKiBzc2lkPXp1YnkKLSAgICAgKiA9PT09Ci0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNldFNjYW5SZXN1bHRzKCkgewotICAgICAgICBTdHJpbmcgYnNzaWQgPSAiIjsKLSAgICAgICAgaW50IGxldmVsID0gMDsKLSAgICAgICAgaW50IGZyZXEgPSAwOwotICAgICAgICBsb25nIHRzZiA9IDA7Ci0gICAgICAgIFN0cmluZyBmbGFncyA9ICIiOwotICAgICAgICBXaWZpU3NpZCB3aWZpU3NpZCA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBzY2FuUmVzdWx0czsKLSAgICAgICAgU3RyaW5nIHRtcFJlc3VsdHM7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBzY2FuUmVzdWx0c0J1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgaW50IHNpZCA9IDA7Ci0KLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIHRtcFJlc3VsdHMgPSBtV2lmaU5hdGl2ZS5zY2FuUmVzdWx0cyhzaWQpOwotICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHRtcFJlc3VsdHMpKSBicmVhazsKLSAgICAgICAgICAgIHNjYW5SZXN1bHRzQnVmLmFwcGVuZCh0bXBSZXN1bHRzKTsKLSAgICAgICAgICAgIHNjYW5SZXN1bHRzQnVmLmFwcGVuZCgiXG4iKTsKLSAgICAgICAgICAgIFN0cmluZ1tdIGxpbmVzID0gdG1wUmVzdWx0cy5zcGxpdCgiXG4iKTsKLSAgICAgICAgICAgIHNpZCA9IC0xOwotICAgICAgICAgICAgZm9yIChpbnQgaT1saW5lcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgIGlmIChsaW5lc1tpXS5zdGFydHNXaXRoKEVORF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZXNbaV0uc3RhcnRzV2l0aChJRF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaWQgPSBJbnRlZ2VyLnBhcnNlSW50KGxpbmVzW2ldLnN1YnN0cmluZyhJRF9TVFIubGVuZ3RoKCkpKSArIDE7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNpZCA9PSAtMSkgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzY2FuUmVzdWx0cyA9IHNjYW5SZXN1bHRzQnVmLnRvU3RyaW5nKCk7Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShzY2FuUmVzdWx0cykpIHsKLSAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbm90ZSB0aGF0IGFsbCB0aGVzZSBzcGxpdHMgYW5kIHN1YnN0cmluZ3Mga2VlcCByZWZlcmVuY2VzIHRvIHRoZSBvcmlnaW5hbAotICAgICAgICAvLyBodWdlIHN0cmluZyBidWZmZXIgd2hpbGUgdGhlIGFtb3VudCB3ZSByZWFsbHkgd2FudCBpcyBnZW5lcmFsbHkgcHJldHR5IHNtYWxsCi0gICAgICAgIC8vIHNvIG1ha2UgY29waWVzIGluc3RlYWQgKG9uZSBleGFtcGxlIGIvMTEwODc5NTYgd2FzdGVkIDQwMGsgb2YgaGVhcCBoZXJlKS4KLSAgICAgICAgc3luY2hyb25pemVkKG1TY2FuUmVzdWx0Q2FjaGUpIHsKLSAgICAgICAgICAgIG1TY2FuUmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8U2NhblJlc3VsdD4oKTsKLSAgICAgICAgICAgIFN0cmluZ1tdIGxpbmVzID0gc2NhblJlc3VsdHMuc3BsaXQoIlxuIik7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgYnNzaWRTdHJMZW4gPSBCU1NJRF9TVFIubGVuZ3RoKCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgZmxhZ0xlbiA9IEZMQUdTX1NUUi5sZW5ndGgoKTsKLQotICAgICAgICAgICAgZm9yIChTdHJpbmcgbGluZSA6IGxpbmVzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChCU1NJRF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJzc2lkID0gbmV3IFN0cmluZyhsaW5lLmdldEJ5dGVzKCksIGJzc2lkU3RyTGVuLCBsaW5lLmxlbmd0aCgpIC0gYnNzaWRTdHJMZW4pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKEZSRVFfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgZnJlcSA9IEludGVnZXIucGFyc2VJbnQobGluZS5zdWJzdHJpbmcoRlJFUV9TVFIubGVuZ3RoKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZXEgPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoTEVWRUxfU1RSKSkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBJbnRlZ2VyLnBhcnNlSW50KGxpbmUuc3Vic3RyaW5nKExFVkVMX1NUUi5sZW5ndGgoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogc29tZSBpbXBsZW1lbnRhdGlvbnMgYXZvaWQgbmVnYXRpdmUgdmFsdWVzIGJ5IGFkZGluZyAyNTYKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHNvIHdlIG5lZWQgdG8gYWRqdXN0IGZvciB0aGF0IGhlcmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbCA+IDApIGxldmVsIC09IDI1NjsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoVFNGX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRzZiA9IExvbmcucGFyc2VMb25nKGxpbmUuc3Vic3RyaW5nKFRTRl9TVFIubGVuZ3RoKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRzZiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChGTEFHU19TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsYWdzID0gbmV3IFN0cmluZyhsaW5lLmdldEJ5dGVzKCksIGZsYWdMZW4sIGxpbmUubGVuZ3RoKCkgLSBmbGFnTGVuKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChTU0lEX1NUUikpIHsKLSAgICAgICAgICAgICAgICAgICAgd2lmaVNzaWQgPSBXaWZpU3NpZC5jcmVhdGVGcm9tQXNjaWlFbmNvZGVkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuc3Vic3RyaW5nKFNTSURfU1RSLmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoREVMSU1JVEVSX1NUUikgfHwgbGluZS5zdGFydHNXaXRoKEVORF9TVFIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChic3NpZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3NpZCA9ICh3aWZpU3NpZCAhPSBudWxsKSA/IHdpZmlTc2lkLnRvU3RyaW5nKCkgOiBXaWZpU3NpZC5OT05FOwotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGtleSA9IGJzc2lkICsgc3NpZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNjYW5SZXN1bHQgc2NhblJlc3VsdCA9IG1TY2FuUmVzdWx0Q2FjaGUuZ2V0KGtleSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NhblJlc3VsdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhblJlc3VsdC5sZXZlbCA9IGxldmVsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5SZXN1bHQud2lmaVNzaWQgPSB3aWZpU3NpZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIGV4aXN0aW5nIEFQSQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5SZXN1bHQuU1NJRCA9ICh3aWZpU3NpZCAhPSBudWxsKSA/IHdpZmlTc2lkLnRvU3RyaW5nKCkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVNzaWQuTk9ORTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuUmVzdWx0LmNhcGFiaWxpdGllcyA9IGZsYWdzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5SZXN1bHQuZnJlcXVlbmN5ID0gZnJlcTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuUmVzdWx0LnRpbWVzdGFtcCA9IHRzZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhblJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTY2FuUmVzdWx0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZmlTc2lkLCBic3NpZCwgZmxhZ3MsIGxldmVsLCBmcmVxLCB0c2YpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TY2FuUmVzdWx0Q2FjaGUucHV0KGtleSwgc2NhblJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU2NhblJlc3VsdHMuYWRkKHNjYW5SZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJzc2lkID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSAwOwotICAgICAgICAgICAgICAgICAgICBmcmVxID0gMDsKLSAgICAgICAgICAgICAgICAgICAgdHNmID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAgd2lmaVNzaWQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogRmV0Y2ggUlNTSSBhbmQgbGlua3NwZWVkIG9uIGN1cnJlbnQgY29ubmVjdGlvbgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBmZXRjaFJzc2lBbmRMaW5rU3BlZWROYXRpdmUoKSB7Ci0gICAgICAgIGludCBuZXdSc3NpID0gLTE7Ci0gICAgICAgIGludCBuZXdMaW5rU3BlZWQgPSAtMTsKLQotICAgICAgICBTdHJpbmcgc2lnbmFsUG9sbCA9IG1XaWZpTmF0aXZlLnNpZ25hbFBvbGwoKTsKLQotICAgICAgICBpZiAoc2lnbmFsUG9sbCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBTdHJpbmdbXSBsaW5lcyA9IHNpZ25hbFBvbGwuc3BsaXQoIlxuIik7Ci0gICAgICAgICAgICBmb3IgKFN0cmluZyBsaW5lIDogbGluZXMpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdbXSBwcm9wID0gbGluZS5zcGxpdCgiPSIpOwotICAgICAgICAgICAgICAgIGlmIChwcm9wLmxlbmd0aCA8IDIpIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wWzBdLmVxdWFscygiUlNTSSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdSc3NpID0gSW50ZWdlci5wYXJzZUludChwcm9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wWzBdLmVxdWFscygiTElOS1NQRUVEIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0xpbmtTcGVlZCA9IEludGVnZXIucGFyc2VJbnQocHJvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAvL0lnbm9yZSwgZGVmYXVsdHMgb24gcnNzaSBhbmQgbGlua3NwZWVkIGFyZSBhc3NpZ25lZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZXdSc3NpICE9IC0xICYmIE1JTl9SU1NJIDwgbmV3UnNzaSAmJiBuZXdSc3NpIDwgTUFYX1JTU0kpIHsgLy8gc2NyZWVuIG91dCBpbnZhbGlkIHZhbHVlcwotICAgICAgICAgICAgLyogc29tZSBpbXBsZW1lbnRhdGlvbnMgYXZvaWQgbmVnYXRpdmUgdmFsdWVzIGJ5IGFkZGluZyAyNTYKLSAgICAgICAgICAgICAqIHNvIHdlIG5lZWQgdG8gYWRqdXN0IGZvciB0aGF0IGhlcmUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChuZXdSc3NpID4gMCkgbmV3UnNzaSAtPSAyNTY7Ci0gICAgICAgICAgICBtV2lmaUluZm8uc2V0UnNzaShuZXdSc3NpKTsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBSYXRoZXIgdGhlbiBzZW5kaW5nIHRoZSByYXcgUlNTSSBvdXQgZXZlcnkgdGltZSBpdAotICAgICAgICAgICAgICogY2hhbmdlcywgd2UgcHJlY2FsY3VsYXRlIHRoZSBzaWduYWwgbGV2ZWwgdGhhdCB3b3VsZAotICAgICAgICAgICAgICogYmUgZGlzcGxheWVkIGluIHRoZSBzdGF0dXMgYmFyLCBhbmQgb25seSBzZW5kIHRoZQotICAgICAgICAgICAgICogYnJvYWRjYXN0IGlmIHRoYXQgbXVjaCBtb3JlIGNvYXJzZS1ncmFpbmVkIG51bWJlcgotICAgICAgICAgICAgICogY2hhbmdlcy4gVGhpcyBjdXRzIGRvd24gZ3JlYXRseSBvbiB0aGUgbnVtYmVyIG9mCi0gICAgICAgICAgICAgKiBicm9hZGNhc3RzLCBhdCB0aGUgY29zdCBvZiBub3QgaW5mb3JtaW5nIG90aGVycwotICAgICAgICAgICAgICogaW50ZXJlc3RlZCBpbiBSU1NJIG9mIGFsbCB0aGUgY2hhbmdlcyBpbiBzaWduYWwKLSAgICAgICAgICAgICAqIGxldmVsLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpbnQgbmV3U2lnbmFsTGV2ZWwgPSBXaWZpTWFuYWdlci5jYWxjdWxhdGVTaWduYWxMZXZlbChuZXdSc3NpLCBXaWZpTWFuYWdlci5SU1NJX0xFVkVMUyk7Ci0gICAgICAgICAgICBpZiAobmV3U2lnbmFsTGV2ZWwgIT0gbUxhc3RTaWduYWxMZXZlbCkgewotICAgICAgICAgICAgICAgIHNlbmRSc3NpQ2hhbmdlQnJvYWRjYXN0KG5ld1Jzc2kpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbUxhc3RTaWduYWxMZXZlbCA9IG5ld1NpZ25hbExldmVsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVdpZmlJbmZvLnNldFJzc2koTUlOX1JTU0kpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5ld0xpbmtTcGVlZCAhPSAtMSkgewotICAgICAgICAgICAgbVdpZmlJbmZvLnNldExpbmtTcGVlZChuZXdMaW5rU3BlZWQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBGZXRjaCBUWCBwYWNrZXQgY291bnRlcnMgb24gY3VycmVudCBjb25uZWN0aW9uCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGZldGNoUGt0Y250TmF0aXZlKFJzc2lQYWNrZXRDb3VudEluZm8gaW5mbykgewotICAgICAgICBTdHJpbmcgcGt0Y250UG9sbCA9IG1XaWZpTmF0aXZlLnBrdGNudFBvbGwoKTsKLQotICAgICAgICBpZiAocGt0Y250UG9sbCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBTdHJpbmdbXSBsaW5lcyA9IHBrdGNudFBvbGwuc3BsaXQoIlxuIik7Ci0gICAgICAgICAgICBmb3IgKFN0cmluZyBsaW5lIDogbGluZXMpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdbXSBwcm9wID0gbGluZS5zcGxpdCgiPSIpOwotICAgICAgICAgICAgICAgIGlmIChwcm9wLmxlbmd0aCA8IDIpIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wWzBdLmVxdWFscygiVFhHT09EIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8udHhnb29kID0gSW50ZWdlci5wYXJzZUludChwcm9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wWzBdLmVxdWFscygiVFhCQUQiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5mby50eGJhZCA9IEludGVnZXIucGFyc2VJbnQocHJvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAvL0lnbm9yZQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVwZGF0ZXMgbUxpbmtQcm9wZXJ0aWVzIGJ5IG1lcmdpbmcgaW5mb3JtYXRpb24gZnJvbSB2YXJpb3VzIHNvdXJjZXMuCi0gICAgICoKLSAgICAgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBpbmZvcm1hdGlvbiBpbiBtTGlua1Byb3BlcnRpZXMgY29tZXMgZnJvbSBtdWx0aXBsZSBzb3VyY2VzIChESENQLAotICAgICAqIG5ldGxpbmssIHN0YXRpYyBjb25maWd1cmF0aW9uLCAuLi4pLiBXaGVuIG9uZSBvZiB0aGVzZSBzb3VyY2VzIG9mIGluZm9ybWF0aW9uIGhhcyB1cGRhdGVkCi0gICAgICogbGluayBwcm9wZXJ0aWVzLCB3ZSBjYW4ndCBqdXN0IGFzc2lnbiB0aGVtIHRvIG1MaW5rUHJvcGVydGllcyBvciB3ZSdkIGxvc2UgdHJhY2sgb2YgdGhlCi0gICAgICogaW5mb3JtYXRpb24gdGhhdCBjYW1lIGZyb20gb3RoZXIgc291cmNlcy4gSW5zdGVhZCwgd2hlbiBvbmUgb2YgdGhvc2Ugc291cmNlcyBoYXMgbmV3Ci0gICAgICogaW5mb3JtYXRpb24sIHdlIHVwZGF0ZSB0aGUgb2JqZWN0IHRoYXQgdHJhY2tzIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoYXQgc291cmNlIGFuZCB0aGVuCi0gICAgICogY2FsbCB0aGlzIG1ldGhvZCB0byBhcHBseSB0aGUgY2hhbmdlIHRvIG1MaW5rUHJvcGVydGllcy4KLSAgICAgKgotICAgICAqIFRoZSBpbmZvcm1hdGlvbiBpbiBtTGlua1Byb3BlcnRpZXMgaXMgY3VycmVudGx5IG9idGFpbmVkIGFzIGZvbGxvd3M6Ci0gICAgICogLSBJbnRlcmZhY2UgbmFtZTogc2V0IGluIHRoZSBjb25zdHJ1Y3Rvci4KLSAgICAgKiAtIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzOiBuZXRsaW5rLCB2aWEgbUludGVyZmFjZU9ic2VydmVyLgotICAgICAqIC0gSVB2NCByb3V0ZXMsIEROUyBzZXJ2ZXJzLCBhbmQgZG9tYWluczogREhDUC4KLSAgICAgKiAtIEhUVFAgcHJveHk6IHRoZSB3aWZpIGNvbmZpZyBzdG9yZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlTGlua1Byb3BlcnRpZXMoKSB7Ci0gICAgICAgIExpbmtQcm9wZXJ0aWVzIG5ld0xwID0gbmV3IExpbmtQcm9wZXJ0aWVzKCk7Ci0KLSAgICAgICAgLy8gSW50ZXJmYWNlIG5hbWUgYW5kIHByb3h5IGFyZSBsb2NhbGx5IGNvbmZpZ3VyZWQuCi0gICAgICAgIG5ld0xwLnNldEludGVyZmFjZU5hbWUobUludGVyZmFjZU5hbWUpOwotICAgICAgICBuZXdMcC5zZXRIdHRwUHJveHkobVdpZmlDb25maWdTdG9yZS5nZXRQcm94eVByb3BlcnRpZXMobUxhc3ROZXR3b3JrSWQpKTsKLQotICAgICAgICAvLyBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBjb21lIGZyb20gbmV0bGluay4KLSAgICAgICAgbmV3THAuc2V0TGlua0FkZHJlc3NlcyhtTmV0bGlua0xpbmtQcm9wZXJ0aWVzLmdldExpbmtBZGRyZXNzZXMoKSk7Ci0KLSAgICAgICAgLy8gRm9yIG5vdywgcm91dGluZyBhbmQgRE5TIG9ubHkgY29tZSBmcm9tIERIQ1Agb3Igc3RhdGljIGNvbmZpZ3VyYXRpb24uIEluIHRoZSBmdXR1cmUsCi0gICAgICAgIC8vIHdlJ2xsIG5lZWQgdG8gbWVyZ2UgSVB2NiBETlMgc2VydmVycyBhbmQgZG9tYWlucyBjb21pbmcgZnJvbSBuZXRsaW5rLgotICAgICAgICBzeW5jaHJvbml6ZWQgKG1EaGNwUmVzdWx0c0xvY2spIHsKLSAgICAgICAgICAgIC8vIEV2ZW4gd2hlbiB3ZSdyZSB1c2luZyBzdGF0aWMgY29uZmlndXJhdGlvbiwgd2UgZG9uJ3QgbmVlZCB0byBsb29rIGF0IHRoZSBjb25maWcKLSAgICAgICAgICAgIC8vIHN0b3JlLCBiZWNhdXNlIHN0YXRpYyBJUCBjb25maWd1cmF0aW9uIGFsc28gcG9wdWxhdGVzIG1EaGNwUmVzdWx0cy4KLSAgICAgICAgICAgIGlmICgobURoY3BSZXN1bHRzICE9IG51bGwpICYmIChtRGhjcFJlc3VsdHMubGlua1Byb3BlcnRpZXMgIT0gbnVsbCkpIHsKLSAgICAgICAgICAgICAgICBMaW5rUHJvcGVydGllcyBscCA9IG1EaGNwUmVzdWx0cy5saW5rUHJvcGVydGllczsKLSAgICAgICAgICAgICAgICBmb3IgKFJvdXRlSW5mbyByb3V0ZTogbHAuZ2V0Um91dGVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3THAuYWRkUm91dGUocm91dGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKEluZXRBZGRyZXNzIGRuczogbHAuZ2V0RG5zZXMoKSkgewotICAgICAgICAgICAgICAgICAgICBuZXdMcC5hZGREbnMoZG5zKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmV3THAuc2V0RG9tYWlucyhscC5nZXREb21haW5zKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgYW55dGhpbmcgaGFzIGNoYW5nZWQsIGFuZCB3ZSdyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc2VuZCBvdXQgYSBub3RpZmljYXRpb24uCi0gICAgICAgIC8vIElmIHdlJ3JlIHN0aWxsIGNvbm5lY3RpbmcsIGFwcHMgd2lsbCBiZSBub3RpZmllZCB3aGVuIHdlIGNvbm5lY3QuCi0gICAgICAgIGlmICghbmV3THAuZXF1YWxzKG1MaW5rUHJvcGVydGllcykpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIHsKLSAgICAgICAgICAgICAgICBsb2coIkxpbmsgY29uZmlndXJhdGlvbiBjaGFuZ2VkIGZvciBuZXRJZDogIiArIG1MYXN0TmV0d29ya0lkCi0gICAgICAgICAgICAgICAgICAgICAgICArICIgb2xkOiAiICsgbUxpbmtQcm9wZXJ0aWVzICsgIm5ldzogIiArIG5ld0xwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1MaW5rUHJvcGVydGllcyA9IG5ld0xwOwotICAgICAgICAgICAgaWYgKGdldE5ldHdvcmtEZXRhaWxlZFN0YXRlKCkgPT0gRGV0YWlsZWRTdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgICAgICAgICAgICBzZW5kTGlua0NvbmZpZ3VyYXRpb25DaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDbGVhcnMgYWxsIG91ciBsaW5rIHByb3BlcnRpZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGNsZWFyTGlua1Byb3BlcnRpZXMoKSB7Ci0gICAgICAgIC8vIElmIHRoZSBuZXR3b3JrIHVzZWQgREhDUCwgY2xlYXIgdGhlIExpbmtQcm9wZXJ0aWVzIHdlIHN0b3JlZCBpbiB0aGUgY29uZmlnIHN0b3JlLgotICAgICAgICBpZiAoIW1XaWZpQ29uZmlnU3RvcmUuaXNVc2luZ1N0YXRpY0lwKG1MYXN0TmV0d29ya0lkKSkgewotICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5jbGVhckxpbmtQcm9wZXJ0aWVzKG1MYXN0TmV0d29ya0lkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENsZWFyIHRoZSBsaW5rIHByb3BlcnRpZXMgb2J0YWluZWQgZnJvbSBESENQIGFuZCBuZXRsaW5rLgotICAgICAgICBzeW5jaHJvbml6ZWQobURoY3BSZXN1bHRzTG9jaykgewotICAgICAgICAgICAgaWYgKG1EaGNwUmVzdWx0cyAhPSBudWxsICYmIG1EaGNwUmVzdWx0cy5saW5rUHJvcGVydGllcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbURoY3BSZXN1bHRzLmxpbmtQcm9wZXJ0aWVzLmNsZWFyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbU5ldGxpbmtMaW5rUHJvcGVydGllcy5jbGVhcigpOwotCi0gICAgICAgIC8vIE5vdyBjbGVhciB0aGUgbWVyZ2VkIGxpbmsgcHJvcGVydGllcy4KLSAgICAgICAgbUxpbmtQcm9wZXJ0aWVzLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgZ2V0TWF4RGhjcFJldHJpZXMoKSB7Ci0gICAgICAgIHJldHVybiBTZXR0aW5ncy5HbG9iYWwuZ2V0SW50KG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9NQVhfREhDUF9SRVRSWV9DT1VOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9NQVhfREhDUF9SRVRSSUVTKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2VuZFNjYW5SZXN1bHRzQXZhaWxhYmxlQnJvYWRjYXN0KCkgewotICAgICAgICBub3RlU2NhbkVuZCgpOwotICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpTWFuYWdlci5TQ0FOX1JFU1VMVFNfQVZBSUxBQkxFX0FDVElPTik7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICBtQ29udGV4dC5zZW5kQnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZW5kUnNzaUNoYW5nZUJyb2FkY2FzdChmaW5hbCBpbnQgbmV3UnNzaSkgewotICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpTWFuYWdlci5SU1NJX0NIQU5HRURfQUNUSU9OKTsKLSAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7Ci0gICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9ORVdfUlNTSSwgbmV3UnNzaSk7Ci0gICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNlbmROZXR3b3JrU3RhdGVDaGFuZ2VCcm9hZGNhc3QoU3RyaW5nIGJzc2lkKSB7Ci0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLk5FVFdPUktfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pOwotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX05FVFdPUktfSU5GTywgbmV3IE5ldHdvcmtJbmZvKG1OZXR3b3JrSW5mbykpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfTElOS19QUk9QRVJUSUVTLCBuZXcgTGlua1Byb3BlcnRpZXMgKG1MaW5rUHJvcGVydGllcykpOwotICAgICAgICBpZiAoYnNzaWQgIT0gbnVsbCkKLSAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9CU1NJRCwgYnNzaWQpOwotICAgICAgICBpZiAobU5ldHdvcmtJbmZvLmdldERldGFpbGVkU3RhdGUoKSA9PSBEZXRhaWxlZFN0YXRlLlZFUklGWUlOR19QT09SX0xJTksgfHwKLSAgICAgICAgICAgICAgICBtTmV0d29ya0luZm8uZ2V0RGV0YWlsZWRTdGF0ZSgpID09IERldGFpbGVkU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfV0lGSV9JTkZPLCBuZXcgV2lmaUluZm8obVdpZmlJbmZvKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2VuZExpbmtDb25maWd1cmF0aW9uQ2hhbmdlZEJyb2FkY2FzdCgpIHsKLSAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuTElOS19DT05GSUdVUkFUSU9OX0NIQU5HRURfQUNUSU9OKTsKLSAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7Ci0gICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9MSU5LX1BST1BFUlRJRVMsIG5ldyBMaW5rUHJvcGVydGllcyhtTGlua1Byb3BlcnRpZXMpKTsKLSAgICAgICAgbUNvbnRleHQuc2VuZEJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2VuZFN1cHBsaWNhbnRDb25uZWN0aW9uQ2hhbmdlZEJyb2FkY2FzdChib29sZWFuIGNvbm5lY3RlZCkgewotICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChXaWZpTWFuYWdlci5TVVBQTElDQU5UX0NPTk5FQ1RJT05fQ0hBTkdFX0FDVElPTik7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfU1VQUExJQ0FOVF9DT05ORUNURUQsIGNvbm5lY3RlZCk7Ci0gICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVjb3JkIHRoZSBkZXRhaWxlZCBzdGF0ZSBvZiBhIG5ldHdvcmsuCi0gICAgICogQHBhcmFtIHN0YXRlIHRoZSBuZXcge0Bjb2RlIERldGFpbGVkU3RhdGV9Ci0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNldE5ldHdvcmtEZXRhaWxlZFN0YXRlKE5ldHdvcmtJbmZvLkRldGFpbGVkU3RhdGUgc3RhdGUpIHsKLSAgICAgICAgaWYgKERCRykgewotICAgICAgICAgICAgbG9nKCJzZXREZXRhaWxlZCBzdGF0ZSwgb2xkID0iCi0gICAgICAgICAgICAgICAgICAgICsgbU5ldHdvcmtJbmZvLmdldERldGFpbGVkU3RhdGUoKSArICIgYW5kIG5ldyBzdGF0ZT0iICsgc3RhdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0YXRlICE9IG1OZXR3b3JrSW5mby5nZXREZXRhaWxlZFN0YXRlKCkpIHsKLSAgICAgICAgICAgIG1OZXR3b3JrSW5mby5zZXREZXRhaWxlZFN0YXRlKHN0YXRlLCBudWxsLCBtV2lmaUluZm8uZ2V0U1NJRCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgRGV0YWlsZWRTdGF0ZSBnZXROZXR3b3JrRGV0YWlsZWRTdGF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1OZXR3b3JrSW5mby5nZXREZXRhaWxlZFN0YXRlKCk7Ci0gICAgfQotCi0KLSAgICBwcml2YXRlIFN1cHBsaWNhbnRTdGF0ZSBoYW5kbGVTdXBwbGljYW50U3RhdGVDaGFuZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgIFN0YXRlQ2hhbmdlUmVzdWx0IHN0YXRlQ2hhbmdlUmVzdWx0ID0gKFN0YXRlQ2hhbmdlUmVzdWx0KSBtZXNzYWdlLm9iajsKLSAgICAgICAgU3VwcGxpY2FudFN0YXRlIHN0YXRlID0gc3RhdGVDaGFuZ2VSZXN1bHQuc3RhdGU7Ci0gICAgICAgIC8vIFN1cHBsaWNhbnQgc3RhdGUgY2hhbmdlCi0gICAgICAgIC8vIFszMS0xM10gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKLSAgICAgICAgLy8gWzggLSAwXSBTdXBwbGljYW50IHN0YXRlIChhcyBkZWZpbmVkIGluIFN1cHBsaWNhbnRTdGF0ZS5qYXZhKQotICAgICAgICAvLyA1MDAyMyBzdXBwbGljYW50X3N0YXRlX2NoYW5nZWQgKGN1c3RvbXwxfDUpCi0gICAgICAgIG1XaWZpSW5mby5zZXRTdXBwbGljYW50U3RhdGUoc3RhdGUpOwotICAgICAgICAvLyBOZXR3b3JrIGlkIGlzIG9ubHkgdmFsaWQgd2hlbiB3ZSBzdGFydCBjb25uZWN0aW5nCi0gICAgICAgIGlmIChTdXBwbGljYW50U3RhdGUuaXNDb25uZWN0aW5nKHN0YXRlKSkgewotICAgICAgICAgICAgbVdpZmlJbmZvLnNldE5ldHdvcmtJZChzdGF0ZUNoYW5nZVJlc3VsdC5uZXR3b3JrSWQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVdpZmlJbmZvLnNldE5ldHdvcmtJZChXaWZpQ29uZmlndXJhdGlvbi5JTlZBTElEX05FVFdPUktfSUQpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVdpZmlJbmZvLnNldEJTU0lEKHN0YXRlQ2hhbmdlUmVzdWx0LkJTU0lEKTsKLSAgICAgICAgbVdpZmlJbmZvLnNldFNTSUQoc3RhdGVDaGFuZ2VSZXN1bHQud2lmaVNzaWQpOwotCi0gICAgICAgIG1TdXBwbGljYW50U3RhdGVUcmFja2VyLnNlbmRNZXNzYWdlKE1lc3NhZ2Uub2J0YWluKG1lc3NhZ2UpKTsKLQotICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVzZXRzIHRoZSBXaS1GaSBDb25uZWN0aW9ucyBieSBjbGVhcmluZyBhbnkgc3RhdGUsIHJlc2V0dGluZyBhbnkgc29ja2V0cwotICAgICAqIHVzaW5nIHRoZSBpbnRlcmZhY2UsIHN0b3BwaW5nIERIQ1AgJiBkaXNhYmxpbmcgaW50ZXJmYWNlCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGhhbmRsZU5ldHdvcmtEaXNjb25uZWN0KCkgewotICAgICAgICBpZiAoREJHKSBsb2coIlN0b3BwaW5nIERIQ1AgYW5kIGNsZWFyaW5nIElQIik7Ci0KLSAgICAgICAgc3RvcERoY3AoKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgbU53U2VydmljZS5jbGVhckludGVyZmFjZUFkZHJlc3NlcyhtSW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgICAgICBtTndTZXJ2aWNlLmRpc2FibGVJcHY2KG1JbnRlcmZhY2VOYW1lKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBjbGVhciBhZGRyZXNzZXMgb3IgZGlzYWJsZSBpcHY2IiArIGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogUmVzZXQgZGF0YSBzdHJ1Y3R1cmVzICovCi0gICAgICAgIG1XaWZpSW5mby5zZXRJbmV0QWRkcmVzcyhudWxsKTsKLSAgICAgICAgbVdpZmlJbmZvLnNldEJTU0lEKG51bGwpOwotICAgICAgICBtV2lmaUluZm8uc2V0U1NJRChudWxsKTsKLSAgICAgICAgbVdpZmlJbmZvLnNldE5ldHdvcmtJZChXaWZpQ29uZmlndXJhdGlvbi5JTlZBTElEX05FVFdPUktfSUQpOwotICAgICAgICBtV2lmaUluZm8uc2V0UnNzaShNSU5fUlNTSSk7Ci0gICAgICAgIG1XaWZpSW5mby5zZXRMaW5rU3BlZWQoLTEpOwotICAgICAgICBtV2lmaUluZm8uc2V0TWV0ZXJlZEhpbnQoZmFsc2UpOwotCi0gICAgICAgIHNldE5ldHdvcmtEZXRhaWxlZFN0YXRlKERldGFpbGVkU3RhdGUuRElTQ09OTkVDVEVEKTsKLSAgICAgICAgbVdpZmlDb25maWdTdG9yZS51cGRhdGVTdGF0dXMobUxhc3ROZXR3b3JrSWQsIERldGFpbGVkU3RhdGUuRElTQ09OTkVDVEVEKTsKLQotICAgICAgICAvKiBDbGVhciBuZXR3b3JrIHByb3BlcnRpZXMgKi8KLSAgICAgICAgY2xlYXJMaW5rUHJvcGVydGllcygpOwotCi0gICAgICAgIC8qIHNlbmQgZXZlbnQgdG8gQ00gJiBuZXR3b3JrIGNoYW5nZSBicm9hZGNhc3QgKi8KLSAgICAgICAgc2VuZE5ldHdvcmtTdGF0ZUNoYW5nZUJyb2FkY2FzdChtTGFzdEJzc2lkKTsKLQotICAgICAgICBtTGFzdEJzc2lkPSBudWxsOwotICAgICAgICBtTGFzdE5ldHdvcmtJZCA9IFdpZmlDb25maWd1cmF0aW9uLklOVkFMSURfTkVUV09SS19JRDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaGFuZGxlU3VwcGxpY2FudENvbm5lY3Rpb25Mb3NzKCkgewotICAgICAgICAvKiBTb2NrZXQgY29ubmVjdGlvbiBjYW4gYmUgbG9zdCB3aGVuIHdlIGRvIGEgZ3JhY2VmdWwgc2h1dGRvd24KLSAgICAgICAgKiBvciB3aGVuIHRoZSBkcml2ZXIgaXMgaHVuZy4gRW5zdXJlIHN1cHBsaWNhbnQgaXMgc3RvcHBlZCBoZXJlLgotICAgICAgICAqLwotICAgICAgICBtV2lmaU1vbml0b3Iua2lsbFN1cHBsaWNhbnQobVAycFN1cHBvcnRlZCk7Ci0gICAgICAgIHNlbmRTdXBwbGljYW50Q29ubmVjdGlvbkNoYW5nZWRCcm9hZGNhc3QoZmFsc2UpOwotICAgICAgICBzZXRXaWZpU3RhdGUoV0lGSV9TVEFURV9ESVNBQkxFRCk7Ci0gICAgfQotCi0gICAgdm9pZCBoYW5kbGVQcmVEaGNwU2V0dXAoKSB7Ci0gICAgICAgIG1EaGNwQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgaWYgKCFtQmx1ZXRvb3RoQ29ubmVjdGlvbkFjdGl2ZSkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoZXJlIGFyZSBwcm9ibGVtcyBzZXR0aW5nIHRoZSBXaS1GaSBkcml2ZXIncyBwb3dlcgotICAgICAgICAgICAgICogbW9kZSB0byBhY3RpdmUgd2hlbiBibHVldG9vdGggY29leGlzdGVuY2UgbW9kZSBpcwotICAgICAgICAgICAgICogZW5hYmxlZCBvciBzZW5zZS4KLSAgICAgICAgICAgICAqIDxwPgotICAgICAgICAgICAgICogV2Ugc2V0IFdpLUZpIHRvIGFjdGl2ZSBtb2RlIHdoZW4KLSAgICAgICAgICAgICAqIG9idGFpbmluZyBhbiBJUCBhZGRyZXNzIGJlY2F1c2Ugd2UndmUgZm91bmQKLSAgICAgICAgICAgICAqIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGggc29tZSByb3V0ZXJzIHdpdGggbG93IHBvd2VyCi0gICAgICAgICAgICAgKiBtb2RlLgotICAgICAgICAgICAgICogPHA+Ci0gICAgICAgICAgICAgKiBJbiBvcmRlciBmb3IgdGhpcyBhY3RpdmUgcG93ZXIgbW9kZSB0byBwcm9wZXJseSBiZSBzZXQsCi0gICAgICAgICAgICAgKiB3ZSBkaXNhYmxlIGNvZXhpc3RlbmNlIG1vZGUgdW50aWwgd2UncmUgZG9uZSB3aXRoCi0gICAgICAgICAgICAgKiBvYnRhaW5pbmcgYW4gSVAgYWRkcmVzcy4gIE9uZSBleGNlcHRpb24gaXMgaWYgd2UKLSAgICAgICAgICAgICAqIGFyZSBjdXJyZW50bHkgY29ubmVjdGVkIHRvIGEgaGVhZHNldCwgc2luY2UgZGlzYWJsaW5nCi0gICAgICAgICAgICAgKiBjb2V4aXN0ZW5jZSB3b3VsZCBpbnRlcnJ1cHQgdGhhdCBjb25uZWN0aW9uLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICAvLyBEaXNhYmxlIHRoZSBjb2V4aXN0ZW5jZSBtb2RlCi0gICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRCbHVldG9vdGhDb2V4aXN0ZW5jZU1vZGUoCi0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLkJMVUVUT09USF9DT0VYSVNURU5DRV9NT0RFX0RJU0FCTEVEKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIERpc2FibGUgcG93ZXIgc2F2ZSBhbmQgc3VzcGVuZCBvcHRpbWl6YXRpb25zIGR1cmluZyBESENQICovCi0gICAgICAgIC8vIE5vdGU6IFRoZSBvcmRlciBoZXJlIGlzIGltcG9ydGFudCBmb3Igbm93LiBCcmNtIGRyaXZlciBjaGFuZ2VzCi0gICAgICAgIC8vIHBvd2VyIHNldHRpbmdzIHdoZW4gd2UgY29udHJvbCBzdXNwZW5kIG1vZGUgb3B0aW1pemF0aW9ucy4KLSAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgY29tbWVudCB3aGVuIHRoZSBkcml2ZXIgaXMgZml4ZWQuCi0gICAgICAgIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zTmF0aXZlKFNVU1BFTkRfRFVFX1RPX0RIQ1AsIGZhbHNlKTsKLSAgICAgICAgbVdpZmlOYXRpdmUuc2V0UG93ZXJTYXZlKGZhbHNlKTsKLQotICAgICAgICBzdG9wQmF0Y2hlZFNjYW4oKTsKLQotICAgICAgICAvKiBQMnAgZGlzY292ZXJ5IGJyZWFrcyBkaGNwLCBzaHV0IGl0IGRvd24gaW4gb3JkZXIgdG8gZ2V0IHRocm91Z2ggdGhpcyAqLwotICAgICAgICBNZXNzYWdlIG1zZyA9IG5ldyBNZXNzYWdlKCk7Ci0gICAgICAgIG1zZy53aGF0ID0gV2lmaVAycFNlcnZpY2UuQkxPQ0tfRElTQ09WRVJZOwotICAgICAgICBtc2cuYXJnMSA9IFdpZmlQMnBTZXJ2aWNlLkVOQUJMRUQ7Ci0gICAgICAgIG1zZy5hcmcyID0gRGhjcFN0YXRlTWFjaGluZS5DTURfUFJFX0RIQ1BfQUNUSU9OX0NPTVBMRVRFOwotICAgICAgICBtc2cub2JqID0gbURoY3BTdGF0ZU1hY2hpbmU7Ci0gICAgICAgIG1XaWZpUDJwQ2hhbm5lbC5zZW5kTWVzc2FnZShtc2cpOwotICAgIH0KLQotCi0gICAgdm9pZCBzdGFydERoY3AoKSB7Ci0gICAgICAgIGlmIChtRGhjcFN0YXRlTWFjaGluZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtRGhjcFN0YXRlTWFjaGluZSA9IERoY3BTdGF0ZU1hY2hpbmUubWFrZURoY3BTdGF0ZU1hY2hpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LCBXaWZpU3RhdGVNYWNoaW5lLnRoaXMsIG1JbnRlcmZhY2VOYW1lKTsKLQotICAgICAgICB9Ci0gICAgICAgIG1EaGNwU3RhdGVNYWNoaW5lLnJlZ2lzdGVyRm9yUHJlRGhjcE5vdGlmaWNhdGlvbigpOwotICAgICAgICBtRGhjcFN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShEaGNwU3RhdGVNYWNoaW5lLkNNRF9TVEFSVF9ESENQKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0b3BEaGNwKCkgewotICAgICAgICBpZiAobURoY3BTdGF0ZU1hY2hpbmUgIT0gbnVsbCkgewotICAgICAgICAgICAgLyogSW4gY2FzZSB3ZSB3ZXJlIGluIG1pZGRsZSBvZiBESENQIG9wZXJhdGlvbiByZXN0b3JlIGJhY2sgcG93ZXJtb2RlICovCi0gICAgICAgICAgICBoYW5kbGVQb3N0RGhjcFNldHVwKCk7Ci0gICAgICAgICAgICBtRGhjcFN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShEaGNwU3RhdGVNYWNoaW5lLkNNRF9TVE9QX0RIQ1ApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBoYW5kbGVQb3N0RGhjcFNldHVwKCkgewotICAgICAgICAvKiBSZXN0b3JlIHBvd2VyIHNhdmUgYW5kIHN1c3BlbmQgb3B0aW1pemF0aW9ucyAqLwotICAgICAgICBzZXRTdXNwZW5kT3B0aW1pemF0aW9uc05hdGl2ZShTVVNQRU5EX0RVRV9UT19ESENQLCB0cnVlKTsKLSAgICAgICAgbVdpZmlOYXRpdmUuc2V0UG93ZXJTYXZlKHRydWUpOwotCi0gICAgICAgIG1XaWZpUDJwQ2hhbm5lbC5zZW5kTWVzc2FnZShXaWZpUDJwU2VydmljZS5CTE9DS19ESVNDT1ZFUlksIFdpZmlQMnBTZXJ2aWNlLkRJU0FCTEVEKTsKLQotICAgICAgICAvLyBTZXQgdGhlIGNvZXhpc3RlbmNlIG1vZGUgYmFjayB0byBpdHMgZGVmYXVsdCB2YWx1ZQotICAgICAgICBtV2lmaU5hdGl2ZS5zZXRCbHVldG9vdGhDb2V4aXN0ZW5jZU1vZGUoCi0gICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuQkxVRVRPT1RIX0NPRVhJU1RFTkNFX01PREVfU0VOU0UpOwotCi0gICAgICAgIG1EaGNwQWN0aXZlID0gZmFsc2U7Ci0KLSAgICAgICAgc3RhcnRCYXRjaGVkU2NhbigpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBoYW5kbGVTdWNjZXNzZnVsSXBDb25maWd1cmF0aW9uKERoY3BSZXN1bHRzIGRoY3BSZXN1bHRzKSB7Ci0gICAgICAgIG1MYXN0U2lnbmFsTGV2ZWwgPSAtMTsgLy8gZm9yY2UgdXBkYXRlIG9mIHNpZ25hbCBzdHJlbmd0aAotICAgICAgICBtUmVjb25uZWN0Q291bnQgPSAwOyAvL1Jlc2V0IElQIGZhaWx1cmUgdHJhY2tpbmcKLSAgICAgICAgc3luY2hyb25pemVkIChtRGhjcFJlc3VsdHNMb2NrKSB7Ci0gICAgICAgICAgICBtRGhjcFJlc3VsdHMgPSBkaGNwUmVzdWx0czsKLSAgICAgICAgfQotICAgICAgICBMaW5rUHJvcGVydGllcyBsaW5rUHJvcGVydGllcyA9IGRoY3BSZXN1bHRzLmxpbmtQcm9wZXJ0aWVzOwotICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLnNldExpbmtQcm9wZXJ0aWVzKG1MYXN0TmV0d29ya0lkLCBuZXcgTGlua1Byb3BlcnRpZXMobGlua1Byb3BlcnRpZXMpKTsKLSAgICAgICAgSW5ldEFkZHJlc3MgYWRkciA9IG51bGw7Ci0gICAgICAgIEl0ZXJhdG9yPEluZXRBZGRyZXNzPiBhZGRycyA9IGxpbmtQcm9wZXJ0aWVzLmdldEFkZHJlc3NlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIGlmIChhZGRycy5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGFkZHIgPSBhZGRycy5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbVdpZmlJbmZvLnNldEluZXRBZGRyZXNzKGFkZHIpOwotICAgICAgICBtV2lmaUluZm8uc2V0TWV0ZXJlZEhpbnQoZGhjcFJlc3VsdHMuaGFzTWV0ZXJlZEhpbnQoKSk7Ci0gICAgICAgIHVwZGF0ZUxpbmtQcm9wZXJ0aWVzKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUZhaWxlZElwQ29uZmlndXJhdGlvbigpIHsKLSAgICAgICAgbG9nZSgiSVAgY29uZmlndXJhdGlvbiBmYWlsZWQiKTsKLQotICAgICAgICBtV2lmaUluZm8uc2V0SW5ldEFkZHJlc3MobnVsbCk7Ci0gICAgICAgIG1XaWZpSW5mby5zZXRNZXRlcmVkSGludChmYWxzZSk7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBJZiB3ZSd2ZSBleGNlZWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyBmb3IgREhDUAotICAgICAgICAgKiB0byBhIGdpdmVuIG5ldHdvcmssIGRpc2FibGUgdGhlIG5ldHdvcmsKLSAgICAgICAgICovCi0gICAgICAgIGludCBtYXhSZXRyaWVzID0gZ2V0TWF4RGhjcFJldHJpZXMoKTsKLSAgICAgICAgLy8gbWF4UmV0cmllcyA9PSAwIG1lYW5zIGtlZXAgdHJ5aW5nIGZvcmV2ZXIKLSAgICAgICAgaWYgKG1heFJldHJpZXMgPiAwICYmICsrbVJlY29ubmVjdENvdW50ID4gbWF4UmV0cmllcykgewotICAgICAgICAgICAgbG9nZSgiRmFpbGVkICIgKwotICAgICAgICAgICAgICAgICAgICBtUmVjb25uZWN0Q291bnQgKyAiIHRpbWVzLCBEaXNhYmxpbmcgIiArIG1MYXN0TmV0d29ya0lkKTsKLSAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZGlzYWJsZU5ldHdvcmsobUxhc3ROZXR3b3JrSWQsCi0gICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLkRJU0FCTEVEX0RIQ1BfRkFJTFVSRSk7Ci0gICAgICAgICAgICBtUmVjb25uZWN0Q291bnQgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogREhDUCB0aW1lcyBvdXQgYWZ0ZXIgYWJvdXQgMzAgc2Vjb25kcywgd2UgZG8gYQotICAgICAgICAgKiBkaXNjb25uZWN0IGFuZCBhbiBpbW1lZGlhdGUgcmVjb25uZWN0IHRvIHRyeSBhZ2FpbgotICAgICAgICAgKi8KLSAgICAgICAgbVdpZmlOYXRpdmUuZGlzY29ubmVjdCgpOwotICAgICAgICBtV2lmaU5hdGl2ZS5yZWNvbm5lY3QoKTsKLSAgICB9Ci0KLSAgICAvKiBDdXJyZW50IGRlc2lnbiBpcyB0byBub3Qgc2V0IHRoZSBjb25maWcgb24gYSBydW5uaW5nIGhvc3RhcGQgYnV0IGluc3RlYWQKLSAgICAgKiBzdG9wIGFuZCBzdGFydCB0ZXRoZXJpbmcgd2hlbiB1c2VyIGNoYW5nZXMgY29uZmlnIG9uIGEgcnVubmluZyBhY2Nlc3MgcG9pbnQKLSAgICAgKgotICAgICAqIFRPRE86IEFkZCBjb250cm9sIGNoYW5uZWwgc2V0dXAgdGhyb3VnaCBob3N0YXBkIHRoYXQgYWxsb3dzIGNoYW5naW5nIGNvbmZpZwotICAgICAqIG9uIGEgcnVubmluZyBkYWVtb24KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc3RhcnRTb2Z0QXBXaXRoQ29uZmlnKGZpbmFsIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgICAgICAvLyBzdGFydCBob3N0YXBkIG9uIGEgc2VwZXJhdGUgdGhyZWFkCi0gICAgICAgIG5ldyBUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Od1NlcnZpY2Uuc3RhcnRBY2Nlc3NQb2ludChjb25maWcsIG1JbnRlcmZhY2VOYW1lKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICBsb2dlKCJFeGNlcHRpb24gaW4gc29mdGFwIHN0YXJ0ICIgKyBlKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Od1NlcnZpY2Uuc3RvcEFjY2Vzc1BvaW50KG1JbnRlcmZhY2VOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Od1NlcnZpY2Uuc3RhcnRBY2Nlc3NQb2ludChjb25maWcsIG1JbnRlcmZhY2VOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJFeGNlcHRpb24gaW4gc29mdGFwIHJlLXN0YXJ0ICIgKyBlMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBUlRfQVBfRkFJTFVSRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJTb2Z0IEFQIHN0YXJ0IHN1Y2Nlc3NmdWwiKTsKLSAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfU1RBUlRfQVBfU1VDQ0VTUyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pLnN0YXJ0KCk7Ci0gICAgfQotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICogSFNNIHN0YXRlcwotICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gICAgY2xhc3MgRGVmYXVsdFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQXN5bmNDaGFubmVsLkNNRF9DSEFOTkVMX0hBTEZfQ09OTkVDVEVEOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IEFzeW5jQ2hhbm5lbC5TVEFUVVNfU1VDQ0VTU0ZVTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlQMnBDaGFubmVsLnNlbmRNZXNzYWdlKEFzeW5jQ2hhbm5lbC5DTURfQ0hBTk5FTF9GVUxMX0NPTk5FQ1RJT04pOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiV2lmaVAycFNlcnZpY2UgY29ubmVjdGlvbiBmYWlsdXJlLCBlcnJvcj0iICsgbWVzc2FnZS5hcmcxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEFzeW5jQ2hhbm5lbC5DTURfQ0hBTk5FTF9ESVNDT05ORUNURUQ6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIldpZmlQMnBTZXJ2aWNlIGNoYW5uZWwgbG9zdCwgbWVzc2FnZS5hcmcxID0iICsgbWVzc2FnZS5hcmcxKTsKLSAgICAgICAgICAgICAgICAgICAgLy9UT0RPOiBSZS1lc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzdGF0ZSBtYWNoaW5lIGFmdGVyIGEgZGVsYXkKLSAgICAgICAgICAgICAgICAgICAgLy9tV2lmaVAycENoYW5uZWwuY29ubmVjdChtQ29udGV4dCwgZ2V0SGFuZGxlcigpLCBtV2lmaVAycE1hbmFnZXIuZ2V0TWVzc2VuZ2VyKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9CTFVFVE9PVEhfQURBUFRFUl9TVEFURV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIG1CbHVldG9vdGhDb25uZWN0aW9uQWN0aXZlID0gKG1lc3NhZ2UuYXJnMSAhPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsdWV0b290aEFkYXB0ZXIuU1RBVEVfRElTQ09OTkVDVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFN5bmNocm9ub3VzIGNhbGwgcmV0dXJucyAqLwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1BJTkdfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9FTkFCTEVfTkVUV09SSzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9BRERfT1JfVVBEQVRFX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVNT1ZFX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0FWRV9DT05GSUc6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2Uud2hhdCwgRkFJTFVSRSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0dFVF9DT05GSUdVUkVEX05FVFdPUktTOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBtZXNzYWdlLndoYXQsIChMaXN0PFdpZmlDb25maWd1cmF0aW9uPikgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0VOQUJMRV9SU1NJX1BPTEw6Ci0gICAgICAgICAgICAgICAgICAgIG1FbmFibGVSc3NpUG9sbGluZyA9IChtZXNzYWdlLmFyZzEgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0VOQUJMRV9CQUNLR1JPVU5EX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIG1FbmFibGVCYWNrZ3JvdW5kU2NhbiA9IChtZXNzYWdlLmFyZzEgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9ISUdIX1BFUkZfTU9ERToKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdXNwZW5kT3B0aW1pemF0aW9ucyhTVVNQRU5EX0RVRV9UT19ISUdIX1BFUkYsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zKFNVU1BFTkRfRFVFX1RPX0hJR0hfUEVSRiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfQk9PVF9DT01QTEVURUQ6Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb3VudHJ5Q29kZSA9IG1QZXJzaXN0ZWRDb3VudHJ5Q29kZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGNvdW50cnlDb2RlKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLnB1dFN0cmluZyhtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfQ09VTlRSWV9DT0RFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBtYXkgYmUgdGhhdCB0aGUgc3RhdGUgdHJhbnNpdGlvbiB0aGF0IHNob3VsZCBzZW5kIHRoaXMgaW5mbwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIGRyaXZlciBoYXBwZW5lZCBiZXR3ZWVuIG1QZXJzaXN0ZWRDb3VudHJ5Q29kZSBnZXR0aW5nIHNldAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIG5vdywgc28gc2ltcGx5IHBlcnNpc3RpbmcgaXQgaGVyZSB3b3VsZCBtZWFuIHdlIGhhdmUgc2VudAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90aGluZyB0byB0aGUgZHJpdmVyLiAgU2VuZCB0aGUgY21kIHNvIGl0IG1pZ2h0IGJlIHNldCBub3cuCi0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZUF0RnJvbnRPZlF1ZXVlKENNRF9TRVRfQ09VTlRSWV9DT0RFLCBjb3VudHJ5Q29kZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0JBVENIRURfU0NBTjoKLSAgICAgICAgICAgICAgICAgICAgcmVjb3JkQmF0Y2hlZFNjYW5TZXR0aW5ncyhtZXNzYWdlLmFyZzEsIG1lc3NhZ2UuYXJnMiwgKEJ1bmRsZSltZXNzYWdlLm9iaik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1BPTExfQkFUQ0hFRF9TQ0FOOgotICAgICAgICAgICAgICAgICAgICBoYW5kbGVCYXRjaGVkU2NhblBvbGxSZXF1ZXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX05FWFRfQkFUQ0hFRF9TQ0FOOgotICAgICAgICAgICAgICAgICAgICBzdGFydE5leHRCYXRjaGVkU2NhbigpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgLyogRGlzY2FyZCAqLwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NDQU46Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1NVUFBMSUNBTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9TVVBQTElDQU5UX0ZBSUxFRDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfREVMQVlFRF9TVE9QX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9EUklWRVJfU1RBUlRfVElNRURfT1VUOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0NBUFRJVkVfQ0hFQ0tfQ09NUExFVEU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVA6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVBfU1VDQ0VTUzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUF9GQUlMVVJFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfQVA6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfVEVUSEVSX1NUQVRFX0NIQU5HRToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9URVRIRVJfTk9USUZJQ0FUSU9OX1RJTUVEX09VVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9ESVNDT05ORUNUOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFQ09OTkVDVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUFTU09DSUFURToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUxPQURfVExTX0FORF9SRUNPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBfQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9ESVNDT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19DT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU0NBTl9SRVNVTFRTX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5BVVRIRU5USUNBVElPTl9GQUlMVVJFX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVNTT0NJQVRJT05fUkVKRUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuV1BTX09WRVJMQVBfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfQkxBQ0tMSVNUX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfQ0xFQVJfQkxBQ0tMSVNUOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9DT1VOVFJZX0NPREU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JTU0lfUE9MTDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9FTkFCTEVfQUxMX05FVFdPUktTOgotICAgICAgICAgICAgICAgIGNhc2UgRGhjcFN0YXRlTWFjaGluZS5DTURfUFJFX0RIQ1BfQUNUSU9OOgotICAgICAgICAgICAgICAgIGNhc2UgRGhjcFN0YXRlTWFjaGluZS5DTURfUE9TVF9ESENQX0FDVElPTjoKLSAgICAgICAgICAgICAgICAvKiBIYW5kbGVkIGJ5IFdpZmlBcENvbmZpZ1N0b3JlICovCi0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0FQX0NPTkZJRzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQVBfQ09ORklHX0NPTVBMRVRFRDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRVFVRVNUX0FQX0NPTkZJRzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRVNQT05TRV9BUF9DT05GSUc6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUuUE9PUl9MSU5LX0RFVEVDVEVEOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lLkdPT0RfTElOS19ERVRFQ1RFRDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9OT19ORVRXT1JLU19QRVJJT0RJQ19TQ0FOOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RJU0FCTEVfUDJQX1JTUDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBEaGNwU3RhdGVNYWNoaW5lLkNNRF9PTl9RVUlUOgotICAgICAgICAgICAgICAgICAgICBtRGhjcFN0YXRlTWFjaGluZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9TVVNQRU5EX09QVF9FTkFCTEVEOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TdXNwZW5kV2FrZUxvY2sucmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VzcGVuZE9wdGltaXphdGlvbnMoU1VTUEVORF9EVUVfVE9fU0NSRUVOLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zKFNVU1BFTkRfRFVFX1RPX1NDUkVFTiwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuRFJJVkVSX0hVTkdfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIHNldFN1cHBsaWNhbnRSdW5uaW5nKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0U3VwcGxpY2FudFJ1bm5pbmcodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuQ09OTkVDVF9ORVRXT1JLOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5DT05ORUNUX05FVFdPUktfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkZPUkdFVF9ORVRXT1JLOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5GT1JHRVRfTkVUV09SS19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuU0FWRV9ORVRXT1JLOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5TQVZFX05FVFdPUktfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNUQVJUX1dQUzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5DQU5DRUxfV1BTOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5DQU5DRUxfV1BTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5ESVNBQkxFX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLkRJU0FCTEVfTkVUV09SS19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuUlNTSV9QS1RDTlRfRkVUQ0g6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLlJTU0lfUEtUQ05UX0ZFVENIX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwU2VydmljZS5QMlBfQ09OTkVDVElPTl9DSEFOR0VEOgotICAgICAgICAgICAgICAgICAgICBOZXR3b3JrSW5mbyBpbmZvID0gKE5ldHdvcmtJbmZvKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgbVAycENvbm5lY3RlZC5zZXQoaW5mby5pc0Nvbm5lY3RlZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwU2VydmljZS5ESVNDT05ORUNUX1dJRklfUkVRVUVTVDoKLSAgICAgICAgICAgICAgICAgICAgbVRlbXBvcmFyaWx5RGlzY29ubmVjdFdpZmkgPSAobWVzc2FnZS5hcmcxID09IDEpOwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwU2VydmljZS5ESVNDT05ORUNUX1dJRklfUkVTUE9OU0UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9JUF9BRERSRVNTX1VQREFURUQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFkZExpbmtBZGRyZXNzIGlzIGEgbm8tb3AgaWYgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggdGhlIHNhbWUgYWRkcmVzcy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1OZXRsaW5rTGlua1Byb3BlcnRpZXMuYWRkTGlua0FkZHJlc3MoKExpbmtBZGRyZXNzKSBtZXNzYWdlLm9iaikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUxpbmtQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfSVBfQUREUkVTU19SRU1PVkVEOgotICAgICAgICAgICAgICAgICAgICBpZiAobU5ldGxpbmtMaW5rUHJvcGVydGllcy5yZW1vdmVMaW5rQWRkcmVzcygoTGlua0FkZHJlc3MpIG1lc3NhZ2Uub2JqKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTGlua1Byb3BlcnRpZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBsb2dlKCJFcnJvciEgdW5oYW5kbGVkIG1lc3NhZ2UiICsgbWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBJbml0aWFsU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIG1XaWZpTmF0aXZlLnVubG9hZERyaXZlcigpOwotCi0gICAgICAgICAgICBpZiAobVdpZmlQMnBDaGFubmVsID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtV2lmaVAycENoYW5uZWwgPSBuZXcgQXN5bmNDaGFubmVsKCk7Ci0gICAgICAgICAgICAgICAgbVdpZmlQMnBDaGFubmVsLmNvbm5lY3QobUNvbnRleHQsIGdldEhhbmRsZXIoKSwgbVdpZmlQMnBNYW5hZ2VyLmdldE1lc3NlbmdlcigpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1XaWZpQXBDb25maWdDaGFubmVsID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtV2lmaUFwQ29uZmlnQ2hhbm5lbCA9IG5ldyBBc3luY0NoYW5uZWwoKTsKLSAgICAgICAgICAgICAgICBXaWZpQXBDb25maWdTdG9yZSB3aWZpQXBDb25maWdTdG9yZSA9IFdpZmlBcENvbmZpZ1N0b3JlLm1ha2VXaWZpQXBDb25maWdTdG9yZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LCBnZXRIYW5kbGVyKCkpOwotICAgICAgICAgICAgICAgIHdpZmlBcENvbmZpZ1N0b3JlLmxvYWRBcENvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgICAgICAgICBtV2lmaUFwQ29uZmlnQ2hhbm5lbC5jb25uZWN0U3luYyhtQ29udGV4dCwgZ2V0SGFuZGxlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgd2lmaUFwQ29uZmlnU3RvcmUuZ2V0TWVzc2VuZ2VyKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLmxvYWREcml2ZXIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLndpZmlGaXJtd2FyZVJlbG9hZChtSW50ZXJmYWNlTmFtZSwgIlNUQSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gcmVsb2FkIFNUQSBmaXJtd2FyZSAiICsgZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHJ1bnRpbWUgY3Jhc2ggY2FuIGxlYXZlIHRoZSBpbnRlcmZhY2UgdXAgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBhZmZlY3RzIGNvbm5lY3Rpdml0eSB3aGVuIHN1cHBsaWNhbnQgc3RhcnRzIHVwLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBpbnRlcmZhY2UgaXMgZG93biBiZWZvcmUgYSBzdXBwbGljYW50IHN0YXJ0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Od1NlcnZpY2Uuc2V0SW50ZXJmYWNlRG93bihtSW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHByaXZhY3kgZXh0ZW5zaW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Od1NlcnZpY2Uuc2V0SW50ZXJmYWNlSXB2NlByaXZhY3lFeHRlbnNpb25zKG1JbnRlcmZhY2VOYW1lLCB0cnVlKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSVB2NiBpcyBlbmFibGVkIG9ubHkgYXMgbG9uZyBhcyBhY2Nlc3MgcG9pbnQgaXMgY29ubmVjdGVkIHNpbmNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBJUHY2IGFkZHJlc3NlcyBhbmQgcm91dGVzIHN0aWNrIGFyb3VuZCBhZnRlciBkaXNjb25uZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtIGtlcm5lbCBpcyB1bmF3YXJlIHdoZW4gY29ubmVjdGVkIGFuZCBmYWlscyB0byBzdGFydCBJUHY2IG5lZ290aWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtIGtlcm5lbCBjYW4gc3RhcnQgYXV0b2NvbmZpZ3VyYXRpb24gd2hlbiA4MDIuMXggaXMgbm90IGNvbXBsZXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbU53U2VydmljZS5kaXNhYmxlSXB2NihtSW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJVbmFibGUgdG8gY2hhbmdlIGludGVyZmFjZSBzZXR0aW5nczogIiArIHJlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlVuYWJsZSB0byBjaGFuZ2UgaW50ZXJmYWNlIHNldHRpbmdzOiAiICsgaWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgIC8qIFN0b3AgYSBydW5uaW5nIHN1cHBsaWNhbnQgYWZ0ZXIgYSBydW50aW1lIHJlc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICogQXZvaWRzIGlzc3VlcyB3aXRoIGRyaXZlcnMgdGhhdCBkbyBub3QgaGFuZGxlIGludGVyZmFjZSBkb3duCi0gICAgICAgICAgICAgICAgICAgICAgICAqIG9uIGEgcnVubmluZyBzdXBwbGljYW50IHByb3Blcmx5LgotICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTW9uaXRvci5raWxsU3VwcGxpY2FudChtUDJwU3VwcG9ydGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1XaWZpTmF0aXZlLnN0YXJ0U3VwcGxpY2FudChtUDJwU3VwcG9ydGVkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFdpZmlTdGF0ZShXSUZJX1NUQVRFX0VOQUJMSU5HKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIlN1cHBsaWNhbnQgc3RhcnQgc3VjY2Vzc2Z1bCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTW9uaXRvci5zdGFydE1vbml0b3JpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVN1cHBsaWNhbnRTdGFydGluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHN0YXJ0IHN1cHBsaWNhbnQhIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gbG9hZCBkcml2ZXIiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLmxvYWREcml2ZXIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0V2lmaUFwU3RhdGUoV0lGSV9BUF9TVEFURV9FTkFCTElORyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVNvZnRBcFN0YXJ0aW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGxvYWQgZHJpdmVyIGZvciBzb2Z0YXAiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgU3VwcGxpY2FudFN0YXJ0aW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIHByaXZhdGUgdm9pZCBpbml0aWFsaXplV3BzRGV0YWlscygpIHsKLSAgICAgICAgICAgIFN0cmluZyBkZXRhaWw7Ci0gICAgICAgICAgICBkZXRhaWwgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldCgicm8ucHJvZHVjdC5uYW1lIiwgIiIpOwotICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXREZXZpY2VOYW1lKGRldGFpbCkpIHsKLSAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IGRldmljZSBuYW1lICIgKyAgZGV0YWlsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRldGFpbCA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0KCJyby5wcm9kdWN0Lm1hbnVmYWN0dXJlciIsICIiKTsKLSAgICAgICAgICAgIGlmICghbVdpZmlOYXRpdmUuc2V0TWFudWZhY3R1cmVyKGRldGFpbCkpIHsKLSAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IG1hbnVmYWN0dXJlciAiICsgZGV0YWlsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRldGFpbCA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0KCJyby5wcm9kdWN0Lm1vZGVsIiwgIiIpOwotICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXRNb2RlbE5hbWUoZGV0YWlsKSkgewotICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXQgbW9kZWwgbmFtZSAiICsgZGV0YWlsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRldGFpbCA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0KCJyby5wcm9kdWN0Lm1vZGVsIiwgIiIpOwotICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXRNb2RlbE51bWJlcihkZXRhaWwpKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHNldCBtb2RlbCBudW1iZXIgIiArIGRldGFpbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXRhaWwgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldCgicm8uc2VyaWFsbm8iLCAiIik7Ci0gICAgICAgICAgICBpZiAoIW1XaWZpTmF0aXZlLnNldFNlcmlhbE51bWJlcihkZXRhaWwpKSB7Ci0gICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHNldCBzZXJpYWwgbnVtYmVyICIgKyBkZXRhaWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5zZXRDb25maWdNZXRob2RzKCJwaHlzaWNhbF9kaXNwbGF5IHZpcnR1YWxfcHVzaF9idXR0b24iKSkgewotICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXQgV1BTIGNvbmZpZyBtZXRob2RzIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW1XaWZpTmF0aXZlLnNldERldmljZVR5cGUobVByaW1hcnlEZXZpY2VUeXBlKSkgewotICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXQgcHJpbWFyeSBkZXZpY2UgdHlwZSAiICsgbVByaW1hcnlEZXZpY2VUeXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9DT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIlN1cHBsaWNhbnQgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCIpOwotICAgICAgICAgICAgICAgICAgICBzZXRXaWZpU3RhdGUoV0lGSV9TVEFURV9FTkFCTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgbVN1cHBsaWNhbnRSZXN0YXJ0Q291bnQgPSAwOwotICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgc3VwcGxpY2FudCBzdGF0ZSB0byBpbmRpY2F0ZSB0aGUgc3VwcGxpY2FudAotICAgICAgICAgICAgICAgICAgICAgKiBzdGF0ZSBpcyBub3Qga25vd24gYXQgdGhpcyB0aW1lICovCi0gICAgICAgICAgICAgICAgICAgIG1TdXBwbGljYW50U3RhdGVUcmFja2VyLnNlbmRNZXNzYWdlKENNRF9SRVNFVF9TVVBQTElDQU5UX1NUQVRFKTsKLSAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBkYXRhIHN0cnVjdHVyZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgbUxhc3RCc3NpZCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIG1MYXN0TmV0d29ya0lkID0gV2lmaUNvbmZpZ3VyYXRpb24uSU5WQUxJRF9ORVRXT1JLX0lEOwotICAgICAgICAgICAgICAgICAgICBtTGFzdFNpZ25hbExldmVsID0gLTE7Ci0KLSAgICAgICAgICAgICAgICAgICAgbVdpZmlJbmZvLnNldE1hY0FkZHJlc3MobVdpZmlOYXRpdmUuZ2V0TWFjQWRkcmVzcygpKTsKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5sb2FkQW5kRW5hYmxlQWxsTmV0d29ya3MoKTsKLSAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVdwc0RldGFpbHMoKTsKLQotICAgICAgICAgICAgICAgICAgICBzZW5kU3VwcGxpY2FudENvbm5lY3Rpb25DaGFuZ2VkQnJvYWRjYXN0KHRydWUpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURyaXZlclN0YXJ0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQX0RJU0NPTk5FQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgrK21TdXBwbGljYW50UmVzdGFydENvdW50IDw9IFNVUFBMSUNBTlRfUkVTVEFSVF9UUklFUykgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHNldHVwIGNvbnRyb2wgY2hhbm5lbCwgcmVzdGFydCBzdXBwbGljYW50Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU1vbml0b3Iua2lsbFN1cHBsaWNhbnQobVAycFN1cHBvcnRlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluaXRpYWxTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQoQ01EX1NUQVJUX1NVUFBMSUNBTlQsIFNVUFBMSUNBTlRfUkVTVEFSVF9JTlRFUlZBTF9NU0VDUyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgIiArIG1TdXBwbGljYW50UmVzdGFydENvdW50ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0aW1lcyB0byBzdGFydCBzdXBwbGljYW50LCB1bmxvYWQgZHJpdmVyIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU3VwcGxpY2FudFJlc3RhcnRDb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRXaWZpU3RhdGUoV0lGSV9TVEFURV9VTktOT1dOKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5pdGlhbFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TVVBQTElDQU5UOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0FQOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQ09VTlRSWV9DT0RFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9GUkVRVUVOQ1lfQkFORDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORzoKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFN1cHBsaWNhbnRTdGFydGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIC8qIFdpZmkgaXMgYXZhaWxhYmxlIGFzIGxvbmcgYXMgd2UgaGF2ZSBhIGNvbm5lY3Rpb24gdG8gc3VwcGxpY2FudCAqLwotICAgICAgICAgICAgbU5ldHdvcmtJbmZvLnNldElzQXZhaWxhYmxlKHRydWUpOwotCi0gICAgICAgICAgICBpbnQgZGVmYXVsdEludGVydmFsID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcigKLSAgICAgICAgICAgICAgICAgICAgUi5pbnRlZ2VyLmNvbmZpZ193aWZpX3N1cHBsaWNhbnRfc2Nhbl9pbnRlcnZhbCk7Ci0KLSAgICAgICAgICAgIG1TdXBwbGljYW50U2NhbkludGVydmFsTXMgPSBTZXR0aW5ncy5HbG9iYWwuZ2V0TG9uZyhtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfU1VQUExJQ0FOVF9TQ0FOX0lOVEVSVkFMX01TLAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SW50ZXJ2YWwpOwotCi0gICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRTY2FuSW50ZXJ2YWwoKGludCltU3VwcGxpY2FudFNjYW5JbnRlcnZhbE1zIC8gMTAwMCk7Ci0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVDogICAvKiBTdXBwbGljYW50IHN0b3BwZWQgYnkgdXNlciAqLwotICAgICAgICAgICAgICAgICAgICBpZiAobVAycFN1cHBvcnRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1XYWl0Rm9yUDJwRGlzYWJsZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtU3VwcGxpY2FudFN0b3BwaW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQX0RJU0NPTk5FQ1RJT05fRVZFTlQ6ICAvKiBTdXBwbGljYW50IGNvbm5lY3Rpb24gbG9zdCAqLwotICAgICAgICAgICAgICAgICAgICBsb2dlKCJDb25uZWN0aW9uIGxvc3QsIHJlc3RhcnQgc3VwcGxpY2FudCIpOwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdXBwbGljYW50Q29ubmVjdGlvbkxvc3MoKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya0Rpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgbVN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIuc2VuZE1lc3NhZ2UoQ01EX1JFU0VUX1NVUFBMSUNBTlRfU1RBVEUpOwotICAgICAgICAgICAgICAgICAgICBpZiAobVAycFN1cHBvcnRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1XYWl0Rm9yUDJwRGlzYWJsZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5pdGlhbFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQoQ01EX1NUQVJUX1NVUFBMSUNBTlQsIFNVUFBMSUNBTlRfUkVTVEFSVF9JTlRFUlZBTF9NU0VDUyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU0NBTl9SRVNVTFRTX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBzZXRTY2FuUmVzdWx0cygpOwotICAgICAgICAgICAgICAgICAgICBzZW5kU2NhblJlc3VsdHNBdmFpbGFibGVCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgbVNjYW5SZXN1bHRJc1BlbmRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUElOR19TVVBQTElDQU5UOgotICAgICAgICAgICAgICAgICAgICBib29sZWFuIG9rID0gbVdpZmlOYXRpdmUucGluZygpOwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBtZXNzYWdlLndoYXQsIG9rID8gU1VDQ0VTUyA6IEZBSUxVUkUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgLyogQ2Fubm90IHN0YXJ0IHNvZnQgQVAgd2hpbGUgaW4gY2xpZW50IG1vZGUgKi8KLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHN0YXJ0IHNvZnQgQVAgd2l0aCBhIHJ1bm5pbmcgc3VwcGxpY2FudCIpOwotICAgICAgICAgICAgICAgICAgICBzZXRXaWZpQXBTdGF0ZShXSUZJX0FQX1NUQVRFX0ZBSUxFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgotICAgICAgICAgICAgICAgICAgICBtT3BlcmF0aW9uYWxNb2RlID0gbWVzc2FnZS5hcmcxOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgewotICAgICAgICAgICAgbU5ldHdvcmtJbmZvLnNldElzQXZhaWxhYmxlKGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFN1cHBsaWNhbnRTdG9wcGluZ1N0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICAvKiBTZW5kIGFueSByZXNldCBjb21tYW5kcyB0byBzdXBwbGljYW50IGJlZm9yZSBzaHV0dGluZyBpdCBkb3duICovCi0gICAgICAgICAgICBoYW5kbGVOZXR3b3JrRGlzY29ubmVjdCgpOwotICAgICAgICAgICAgaWYgKG1EaGNwU3RhdGVNYWNoaW5lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtRGhjcFN0YXRlTWFjaGluZS5kb1F1aXQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKERCRykgbG9nKCJzdG9wcGluZyBzdXBwbGljYW50Iik7Ci0gICAgICAgICAgICBtV2lmaU1vbml0b3Iuc3RvcFN1cHBsaWNhbnQoKTsKLQotICAgICAgICAgICAgLyogU2VuZCBvdXJzZWx2ZXMgYSBkZWxheWVkIG1lc3NhZ2UgdG8gaW5kaWNhdGUgZmFpbHVyZSBhZnRlciBhIHdhaXQgdGltZSAqLwotICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX1NUT1BfU1VQUExJQ0FOVF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICsrbVN1cHBsaWNhbnRTdG9wRmFpbHVyZVRva2VuLCAwKSwgU1VQUExJQ0FOVF9SRVNUQVJUX0lOVEVSVkFMX01TRUNTKTsKLSAgICAgICAgICAgIHNldFdpZmlTdGF0ZShXSUZJX1NUQVRFX0RJU0FCTElORyk7Ci0gICAgICAgICAgICBtU3VwcGxpY2FudFN0YXRlVHJhY2tlci5zZW5kTWVzc2FnZShDTURfUkVTRVRfU1VQUExJQ0FOVF9TVEFURSk7Ci0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQX0NPTk5FQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIlN1cHBsaWNhbnQgY29ubmVjdGlvbiByZWNlaXZlZCB3aGlsZSBzdG9wcGluZyIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9ESVNDT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIlN1cHBsaWNhbnQgY29ubmVjdGlvbiBsb3N0Iik7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZVN1cHBsaWNhbnRDb25uZWN0aW9uTG9zcygpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluaXRpYWxTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVF9GQUlMRUQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gbVN1cHBsaWNhbnRTdG9wRmFpbHVyZVRva2VuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJUaW1lZCBvdXQgb24gYSBzdXBwbGljYW50IHN0b3AsIGtpbGwgYW5kIHByb2NlZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVN1cHBsaWNhbnRDb25uZWN0aW9uTG9zcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Jbml0aWFsU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NVUFBMSUNBTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9TVVBQTElDQU5UOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0FQOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfQVA6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9DT1VOVFJZX0NPREU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkc6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgRHJpdmVyU3RhcnRpbmdTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbVRyaWVzOwotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBtVHJpZXMgPSAxOwotICAgICAgICAgICAgLyogU2VuZCBvdXJzZWx2ZXMgYSBkZWxheWVkIG1lc3NhZ2UgdG8gc3RhcnQgZHJpdmVyIGEgc2Vjb25kIHRpbWUgKi8KLSAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChvYnRhaW5NZXNzYWdlKENNRF9EUklWRVJfU1RBUlRfVElNRURfT1VULAotICAgICAgICAgICAgICAgICAgICAgICAgKyttRHJpdmVyU3RhcnRUb2tlbiwgMCksIERSSVZFUl9TVEFSVF9USU1FX09VVF9NU0VDUyk7Ci0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgU3VwcGxpY2FudFN0YXRlIHN0YXRlID0gaGFuZGxlU3VwcGxpY2FudFN0YXRlQ2hhbmdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICAvKiBJZiBzdXBsaWNhbnQgaXMgZXhpdGluZyBvdXQgb2YgSU5URVJGQUNFX0RJU0FCTEVEIHN0YXRlIGludG8KLSAgICAgICAgICAgICAgICAgICAgICogYSBzdGF0ZSB0aGF0IGluZGljYXRlcyBkcml2ZXIgaGFzIHN0YXJ0ZWQsIGl0IGlzIHJlYWR5IHRvCi0gICAgICAgICAgICAgICAgICAgICAqIHJlY2VpdmUgZHJpdmVyIGNvbW1hbmRzCi0gICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoU3VwcGxpY2FudFN0YXRlLmlzRHJpdmVyQWN0aXZlKHN0YXRlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ecml2ZXJTdGFydGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RSSVZFUl9TVEFSVF9USU1FRF9PVVQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gbURyaXZlclN0YXJ0VG9rZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtVHJpZXMgPj0gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzdGFydCBkcml2ZXIgYWZ0ZXIgIiArIG1Ucmllcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ecml2ZXJTdG9wcGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJEcml2ZXIgc3RhcnQgZmFpbGVkLCByZXRyeWluZyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XYWtlTG9jay5hY3F1aXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhcnREcml2ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2FrZUxvY2sucmVsZWFzZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyttVHJpZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBvdXJzZWx2ZXMgYSBkZWxheWVkIG1lc3NhZ2UgdG8gc3RhcnQgZHJpdmVyIGFnYWluICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX0RSSVZFUl9TVEFSVF9USU1FRF9PVVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyttRHJpdmVyU3RhcnRUb2tlbiwgMCksIERSSVZFUl9TVEFSVF9USU1FX09VVF9NU0VDUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFF1ZXVlIGRyaXZlciBjb21tYW5kcyAmIGNvbm5lY3Rpb24gZXZlbnRzICovCi0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19DT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLkFTU09DSUFUSU9OX1JFSkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLldQU19PVkVSTEFQX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9DT1VOVFJZX0NPREU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkc6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NDQU46Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfRElTQ09OTkVDVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUFTU09DSUFURToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUNPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBEcml2ZXJTdGFydGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIG1Jc1J1bm5pbmcgPSB0cnVlOwotICAgICAgICAgICAgbUluRGVsYXllZFN0b3AgPSBmYWxzZTsKLSAgICAgICAgICAgIG1EZWxheWVkU3RvcENvdW50ZXIrKzsKLSAgICAgICAgICAgIHVwZGF0ZUJhdHRlcnlXb3JrU291cmNlKG51bGwpOwotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBFbmFibGUgYmx1ZXRvb3RoIGNvZXhpc3RlbmNlIHNjYW4gbW9kZSB3aGVuIGJsdWV0b290aCBjb25uZWN0aW9uIGlzIGFjdGl2ZS4KLSAgICAgICAgICAgICAqIFdoZW4gdGhpcyBtb2RlIGlzIG9uLCBzb21lIG9mIHRoZSBsb3ctbGV2ZWwgc2NhbiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlCi0gICAgICAgICAgICAgKiBkcml2ZXIgYXJlIGNoYW5nZWQgdG8gcmVkdWNlIGludGVyZmVyZW5jZSB3aXRoIGJsdWV0b290aAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRCbHVldG9vdGhDb2V4aXN0ZW5jZVNjYW5Nb2RlKG1CbHVldG9vdGhDb25uZWN0aW9uQWN0aXZlKTsKLSAgICAgICAgICAgIC8qIHNldCBjb3VudHJ5IGNvZGUgKi8KLSAgICAgICAgICAgIHNldENvdW50cnlDb2RlKCk7Ci0gICAgICAgICAgICAvKiBzZXQgZnJlcXVlbmN5IGJhbmQgb2Ygb3BlcmF0aW9uICovCi0gICAgICAgICAgICBzZXRGcmVxdWVuY3lCYW5kKCk7Ci0gICAgICAgICAgICAvKiBpbml0aWFsaXplIG5ldHdvcmsgc3RhdGUgKi8KLSAgICAgICAgICAgIHNldE5ldHdvcmtEZXRhaWxlZFN0YXRlKERldGFpbGVkU3RhdGUuRElTQ09OTkVDVEVEKTsKLQotICAgICAgICAgICAgLyogUmVtb3ZlIGFueSBmaWx0ZXJpbmcgb24gTXVsdGljYXN0IHY2IGF0IHN0YXJ0ICovCi0gICAgICAgICAgICBtV2lmaU5hdGl2ZS5zdG9wRmlsdGVyaW5nTXVsdGljYXN0VjZQYWNrZXRzKCk7Ci0KLSAgICAgICAgICAgIC8qIFJlc2V0IE11bHRpY2FzdCB2NCBmaWx0ZXJpbmcgc3RhdGUgKi8KLSAgICAgICAgICAgIGlmIChtRmlsdGVyaW5nTXVsdGljYXN0VjRQYWNrZXRzLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhcnRGaWx0ZXJpbmdNdWx0aWNhc3RWNFBhY2tldHMoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RvcEZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtRGhjcEFjdGl2ZSA9IGZhbHNlOwotCi0gICAgICAgICAgICBzdGFydEJhdGNoZWRTY2FuKCk7Ci0KLSAgICAgICAgICAgIGlmIChtT3BlcmF0aW9uYWxNb2RlICE9IENPTk5FQ1RfTU9ERSkgewotICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmRpc2FibGVBbGxOZXR3b3JrcygpOwotICAgICAgICAgICAgICAgIGlmIChtT3BlcmF0aW9uYWxNb2RlID09IFNDQU5fT05MWV9XSVRIX1dJRklfT0ZGX01PREUpIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0V2lmaVN0YXRlKFdJRklfU1RBVEVfRElTQUJMRUQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVNjYW5Nb2RlU3RhdGUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBEcml2ZXIgc3RvcCBtYXkgaGF2ZSBkaXNhYmxlZCBuZXR3b3JrcywgZW5hYmxlIHJpZ2h0IGFmdGVyIHN0YXJ0ICovCi0gICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5lbmFibGVBbGxOZXR3b3JrcygpOwotCi0gICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJBdHRlbXB0aW5nIHRvIHJlY29ubmVjdCB0byB3aWZpIG5ldHdvcmsgLi4iKTsKLSAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5yZWNvbm5lY3QoKTsKLQotICAgICAgICAgICAgICAgIC8vIFN0YXR1cyBwdWxscyBpbiB0aGUgY3VycmVudCBzdXBwbGljYW50IHN0YXRlIGFuZCBuZXR3b3JrIGNvbm5lY3Rpb24gc3RhdGUKLSAgICAgICAgICAgICAgICAvLyBldmVudHMgb3ZlciB0aGUgbW9uaXRvciBjb25uZWN0aW9uLiBUaGlzIGhlbHBzIGZyYW1ld29yayBzeW5jIHVwIHdpdGgKLSAgICAgICAgICAgICAgICAvLyBjdXJyZW50IHN1cHBsaWNhbnQgc3RhdGUKLSAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zdGF0dXMoKTsKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RlZFN0YXRlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgbWlzc2VkIHNjcmVlbiB1cGRhdGUgYXQgYm9vdAotICAgICAgICAgICAgaWYgKG1TY3JlZW5Ccm9hZGNhc3RSZWNlaXZlZC5nZXQoKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIFBvd2VyTWFuYWdlciBwb3dlck1hbmFnZXIgPSAoUG93ZXJNYW5hZ2VyKW1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCi0gICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0LlBPV0VSX1NFUlZJQ0UpOwotICAgICAgICAgICAgICAgIGhhbmRsZVNjcmVlblN0YXRlQ2hhbmdlZChwb3dlck1hbmFnZXIuaXNTY3JlZW5PbigpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSByaWdodCBzdXNwZW5kIG1vZGUgc2V0dGluZ3MKLSAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRTdXNwZW5kT3B0aW1pemF0aW9ucyhtU3VzcGVuZE9wdE5lZWRzRGlzYWJsZWQgPT0gMAotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbVVzZXJXYW50c1N1c3BlbmRPcHQuZ2V0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0UG93ZXJTYXZlKHRydWUpOwotCi0gICAgICAgICAgICBpZiAobVAycFN1cHBvcnRlZCkgewotICAgICAgICAgICAgICAgIGlmIChtT3BlcmF0aW9uYWxNb2RlID09IENPTk5FQ1RfTU9ERSkgewotICAgICAgICAgICAgICAgICAgICBtV2lmaVAycENoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaVN0YXRlTWFjaGluZS5DTURfRU5BQkxFX1AyUCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUDJQIHN0YXRlbWFjaGluZSBzdGFydHMgaW4gZGlzYWJsZWQgc3RhdGUsIGFuZCBpcyBub3QgZW5hYmxlZCB1bnRpbAotICAgICAgICAgICAgICAgICAgICAvLyBDTURfRU5BQkxFX1AyUCBpcyBzZW50IGZyb20gaGVyZTsgc28sIG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZSB0bwotICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIGl0IGRpc2FibGVkLgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaU1hbmFnZXIuV0lGSV9TQ0FOX0FWQUlMQUJMRSk7Ci0gICAgICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKLSAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9TQ0FOX0FWQUlMQUJMRSwgV0lGSV9TVEFURV9FTkFCTEVEKTsKLSAgICAgICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU0NBTjoKLSAgICAgICAgICAgICAgICAgICAgbm90ZVNjYW5TdGFydChtZXNzYWdlLmFyZzEsIChXb3JrU291cmNlKSBtZXNzYWdlLm9iaik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0U2Nhbk5hdGl2ZShXaWZpTmF0aXZlLlNDQU5fV0lUSF9DT05ORUNUSU9OX1NFVFVQKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0JBVENIRURfU0NBTjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZEJhdGNoZWRTY2FuU2V0dGluZ3MobWVzc2FnZS5hcmcxLCBtZXNzYWdlLmFyZzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJ1bmRsZSltZXNzYWdlLm9iaikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QmF0Y2hlZFNjYW4oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQ09VTlRSWV9DT0RFOgotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY291bnRyeSA9IChTdHJpbmcpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coInNldCBjb3VudHJ5IGNvZGUgIiArIGNvdW50cnkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRyeSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5ID0gY291bnRyeS50b1VwcGVyQ2FzZShMb2NhbGUuUk9PVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUxhc3RTZXRDb3VudHJ5Q29kZSA9PSBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvdW50cnkuZXF1YWxzKG1MYXN0U2V0Q291bnRyeUNvZGUpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnNldENvdW50cnlDb2RlKGNvdW50cnkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1MYXN0U2V0Q291bnRyeUNvZGUgPSBjb3VudHJ5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXQgY291bnRyeSBjb2RlICIgKyBjb3VudHJ5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgotICAgICAgICAgICAgICAgICAgICBpbnQgYmFuZCA9ICBtZXNzYWdlLmFyZzE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygic2V0IGZyZXF1ZW5jeSBiYW5kICIgKyBiYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnNldEJhbmQoYmFuZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1GcmVxdWVuY3lCYW5kLnNldChiYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsdXNoIG9sZCBkYXRhIC0gbGlrZSBzY2FuIHJlc3VsdHMKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmJzc0ZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL0ZldGNoIHRoZSBsYXRlc3Qgc2NhbiByZXN1bHRzIHdoZW4gZnJlcXVlbmN5IGJhbmQgaXMgc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFNjYW5OYXRpdmUoV2lmaU5hdGl2ZS5TQ0FOX1dJVEhfQ09OTkVDVElPTl9TRVRVUCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc2V0IGZyZXF1ZW5jeSBiYW5kICIgKyBiYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9CTFVFVE9PVEhfQURBUFRFUl9TVEFURV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIG1CbHVldG9vdGhDb25uZWN0aW9uQWN0aXZlID0gKG1lc3NhZ2UuYXJnMSAhPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsdWV0b290aEFkYXB0ZXIuU1RBVEVfRElTQ09OTkVDVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0Qmx1ZXRvb3RoQ29leGlzdGVuY2VTY2FuTW9kZShtQmx1ZXRvb3RoQ29ubmVjdGlvbkFjdGl2ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgotICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSA9IG1lc3NhZ2UuYXJnMTsKLQotICAgICAgICAgICAgICAgICAgICAvKiBBbHJlYWR5IGRvaW5nIGEgZGVsYXllZCBzdG9wICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChtSW5EZWxheWVkU3RvcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJBbHJlYWR5IGluIGRlbGF5ZWQgc3RvcCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCByaWdodCBub3csIGJ1dCBsZWF2ZSB0aGUgZHJpdmVyIHJ1bm5pbmcgZm9yIGEgYml0ICovCi0gICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZGlzYWJsZUFsbE5ldHdvcmtzKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbUluRGVsYXllZFN0b3AgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtRGVsYXllZFN0b3BDb3VudGVyKys7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiRGVsYXllZCBzdG9wIG1lc3NhZ2UgIiArIG1EZWxheWVkU3RvcENvdW50ZXIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8qIHNlbmQgcmVndWxhciBkZWxheWVkIHNodXQgZG93biAqLwotICAgICAgICAgICAgICAgICAgICBJbnRlbnQgZHJpdmVyU3RvcEludGVudCA9IG5ldyBJbnRlbnQoQUNUSU9OX0RFTEFZRURfRFJJVkVSX1NUT1AsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICBkcml2ZXJTdG9wSW50ZW50LnB1dEV4dHJhKERFTEFZRURfU1RPUF9DT1VOVEVSLCBtRGVsYXllZFN0b3BDb3VudGVyKTsKLSAgICAgICAgICAgICAgICAgICAgbURyaXZlclN0b3BJbnRlbnQgPSBQZW5kaW5nSW50ZW50LmdldEJyb2FkY2FzdChtQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUklWRVJfU1RPUF9SRVFVRVNULCBkcml2ZXJTdG9wSW50ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQuRkxBR19VUERBVEVfQ1VSUkVOVCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbUFsYXJtTWFuYWdlci5zZXQoQWxhcm1NYW5hZ2VyLlJUQ19XQUtFVVAsIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtRHJpdmVyU3RvcERlbGF5TXMsIG1Ecml2ZXJTdG9wSW50ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgotICAgICAgICAgICAgICAgICAgICBpZiAobUluRGVsYXllZFN0b3ApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1JbkRlbGF5ZWRTdG9wID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtRGVsYXllZFN0b3BDb3VudGVyKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQWxhcm1NYW5hZ2VyLmNhbmNlbChtRHJpdmVyU3RvcEludGVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIkRlbGF5ZWQgc3RvcCBpZ25vcmVkIGR1ZSB0byBzdGFydCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1PcGVyYXRpb25hbE1vZGUgPT0gQ09OTkVDVF9NT0RFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5lbmFibGVBbGxOZXR3b3JrcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RFTEFZRURfU1RPUF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiZGVsYXllZCBzdG9wICIgKyBtZXNzYWdlLmFyZzEgKyAiICIgKyBtRGVsYXllZFN0b3BDb3VudGVyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSAhPSBtRGVsYXllZFN0b3BDb3VudGVyKSBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdldEN1cnJlbnRTdGF0ZSgpICE9IG1EaXNjb25uZWN0ZWRTdGF0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZGlzY29ubmVjdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya0Rpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtV2FrZUxvY2suYWNxdWlyZSgpOwotICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zdG9wRHJpdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1XYWtlTG9jay5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtUDJwU3VwcG9ydGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVdhaXRGb3JQMnBEaXNhYmxlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ecml2ZXJTdG9wcGluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IE1VTFRJQ0FTVF9WNikgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhcnRGaWx0ZXJpbmdNdWx0aWNhc3RWNlBhY2tldHMoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmFyZzEgPT0gTVVMVElDQVNUX1Y0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zdGFydEZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cygpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWxsZWdhbCBhcnVnbWVudHMgdG8gQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkciKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1BBQ0tFVF9GSUxURVJJTkc6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gTVVMVElDQVNUX1Y2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zdG9wRmlsdGVyaW5nTXVsdGljYXN0VjZQYWNrZXRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5hcmcxID09IE1VTFRJQ0FTVF9WNCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RvcEZpbHRlcmluZ011bHRpY2FzdFY0UGFja2V0cygpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSWxsZWdhbCBhcnVnbWVudHMgdG8gQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORyIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9TVVNQRU5EX09QVF9FTkFCTEVEOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zTmF0aXZlKFNVU1BFTkRfRFVFX1RPX1NDUkVFTiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU3VzcGVuZFdha2VMb2NrLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zTmF0aXZlKFNVU1BFTkRfRFVFX1RPX1NDUkVFTiwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9ISUdIX1BFUkZfTU9ERToKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdXNwZW5kT3B0aW1pemF0aW9uc05hdGl2ZShTVVNQRU5EX0RVRV9UT19ISUdIX1BFUkYsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1c3BlbmRPcHRpbWl6YXRpb25zTmF0aXZlKFNVU1BFTkRfRFVFX1RPX0hJR0hfUEVSRiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfRU5BQkxFX1RETFM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm9iaiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmVtb3RlQWRkcmVzcyA9IChTdHJpbmcpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBlbmFibGUgPSAobWVzc2FnZS5hcmcxID09IDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhcnRUZGxzKHJlbW90ZUFkZHJlc3MsIGVuYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7Ci0gICAgICAgICAgICBtSXNSdW5uaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICB1cGRhdGVCYXR0ZXJ5V29ya1NvdXJjZShudWxsKTsKLSAgICAgICAgICAgIG1TY2FuUmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8U2NhblJlc3VsdD4oKTsKLQotICAgICAgICAgICAgc3RvcEJhdGNoZWRTY2FuKCk7Ci0KLSAgICAgICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFdpZmlNYW5hZ2VyLldJRklfU0NBTl9BVkFJTEFCTEUpOwotICAgICAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7Ci0gICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaU1hbmFnZXIuRVhUUkFfU0NBTl9BVkFJTEFCTEUsIFdJRklfU1RBVEVfRElTQUJMRUQpOwotICAgICAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKLSAgICAgICAgICAgIG5vdGVTY2FuRW5kKCk7IC8vIHdyYXAgdXAgYW55IHBlbmRpbmcgcmVxdWVzdC4KLQotICAgICAgICAgICAgbUxhc3RTZXRDb3VudHJ5Q29kZSA9IG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBXYWl0Rm9yUDJwRGlzYWJsZVN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBwcml2YXRlIFN0YXRlIG1UcmFuc2l0aW9uVG9TdGF0ZTsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgc3dpdGNoIChnZXRDdXJyZW50TWVzc2FnZSgpLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9ESVNDT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBtVHJhbnNpdGlvblRvU3RhdGUgPSBtSW5pdGlhbFN0YXRlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9ERUxBWUVEX1NUT1BfRFJJVkVSOgotICAgICAgICAgICAgICAgICAgICBtVHJhbnNpdGlvblRvU3RhdGUgPSBtRHJpdmVyU3RvcHBpbmdTdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9TVVBQTElDQU5UOgotICAgICAgICAgICAgICAgICAgICBtVHJhbnNpdGlvblRvU3RhdGUgPSBtU3VwcGxpY2FudFN0b3BwaW5nU3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIG1UcmFuc2l0aW9uVG9TdGF0ZSA9IG1Ecml2ZXJTdG9wcGluZ1N0YXRlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1XaWZpUDJwQ2hhbm5lbC5zZW5kTWVzc2FnZShXaWZpU3RhdGVNYWNoaW5lLkNNRF9ESVNBQkxFX1AyUF9SRVEpOwotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0RJU0FCTEVfUDJQX1JTUDoKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1UcmFuc2l0aW9uVG9TdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8qIERlZmVyIHdpZmkgc3RhcnQvc2h1dCBhbmQgZHJpdmVyIGNvbW1hbmRzICovCi0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TVVBQTElDQU5UOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0FQOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfQ09VTlRSWV9DT0RFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9GUkVRVUVOQ1lfQkFORDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfUEFDS0VUX0ZJTFRFUklORzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TQ0FOOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0RJU0NPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVBU1NPQ0lBVEU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVDT05ORUNUOgotICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgRHJpdmVyU3RvcHBpbmdTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSA9IGhhbmRsZVN1cHBsaWNhbnRTdGF0ZUNoYW5nZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09IFN1cHBsaWNhbnRTdGF0ZS5JTlRFUkZBQ0VfRElTQUJMRUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRHJpdmVyU3RvcHBlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgLyogUXVldWUgZHJpdmVyIGNvbW1hbmRzICovCi0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9DT1VOVFJZX0NPREU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkc6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NDQU46Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfRElTQ09OTkVDVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUFTU09DSUFURToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUNPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBEcml2ZXJTdG9wcGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgU3RhdGVDaGFuZ2VSZXN1bHQgc3RhdGVDaGFuZ2VSZXN1bHQgPSAoU3RhdGVDaGFuZ2VSZXN1bHQpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBTdXBwbGljYW50U3RhdGUgc3RhdGUgPSBzdGF0ZUNoYW5nZVJlc3VsdC5zdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgLy8gQSBXRVhUIGJ1ZyBtZWFucyB0aGF0IHdlIGNhbiBiZSBiYWNrIHRvIGRyaXZlciBzdGFydGVkIHN0YXRlCi0gICAgICAgICAgICAgICAgICAgIC8vIHVuZXhwZWN0ZWRseQotICAgICAgICAgICAgICAgICAgICBpZiAoU3VwcGxpY2FudFN0YXRlLmlzRHJpdmVyQWN0aXZlKHN0YXRlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ecml2ZXJTdGFydGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0RSSVZFUjoKLSAgICAgICAgICAgICAgICAgICAgbVdha2VMb2NrLmFjcXVpcmUoKTsKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc3RhcnREcml2ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgbVdha2VMb2NrLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ecml2ZXJTdGFydGluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBTY2FuTW9kZVN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBwcml2YXRlIGludCBtTGFzdE9wZXJhdGlvbk1vZGU7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIG1MYXN0T3BlcmF0aW9uTW9kZSA9IG1PcGVyYXRpb25hbE1vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IENPTk5FQ1RfTU9ERSkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUxhc3RPcGVyYXRpb25Nb2RlID09IFNDQU5fT05MWV9XSVRIX1dJRklfT0ZGX01PREUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRXaWZpU3RhdGUoV0lGSV9TVEFURV9FTkFCTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIGFuZCByZS1lbmFibGUgbmV0d29ya3Mgd2hlbiBnb2luZyBiYWNrIHRvIGVuYWJsZWQgc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGVzc2VudGlhbCBmb3IgbmV0d29ya3MgdG8gc2hvdyB1cCBhZnRlciByZXN0b3JlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5sb2FkQW5kRW5hYmxlQWxsTmV0d29ya3MoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaVAycENoYW5uZWwuc2VuZE1lc3NhZ2UoQ01EX0VOQUJMRV9QMlApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmVuYWJsZUFsbE5ldHdvcmtzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnJlY29ubmVjdCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBtT3BlcmF0aW9uYWxNb2RlID0gQ09OTkVDVF9NT0RFOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgc2Nhbi4gQWxsIHRoZSBjb25uZWN0aW9uIHJlbGF0ZWQgY29tbWFuZHMgYXJlCi0gICAgICAgICAgICAgICAgLy8gaGFuZGxlZCBvbmx5IGluIENvbm5lY3RNb2RlU3RhdGUKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TQ0FOOgotICAgICAgICAgICAgICAgICAgICBub3RlU2NhblN0YXJ0KG1lc3NhZ2UuYXJnMSwgKFdvcmtTb3VyY2UpIG1lc3NhZ2Uub2JqKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRTY2FuTmF0aXZlKFdpZmlOYXRpdmUuU0NBTl9XSVRIT1VUX0NPTk5FQ1RJT05fU0VUVVApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIENvbm5lY3RNb2RlU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZzsKLSAgICAgICAgICAgIGJvb2xlYW4gb2s7Ci0gICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5BU1NPQ0lBVElPTl9SRUpFQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIG1TdXBwbGljYW50U3RhdGVUcmFja2VyLnNlbmRNZXNzYWdlKFdpZmlNb25pdG9yLkFTU09DSUFUSU9OX1JFSkVDVElPTl9FVkVOVCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgbVN1cHBsaWNhbnRTdGF0ZVRyYWNrZXIuc2VuZE1lc3NhZ2UoV2lmaU1vbml0b3IuQVVUSEVOVElDQVRJT05fRkFJTFVSRV9FVkVOVCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdGF0ZSA9IGhhbmRsZVN1cHBsaWNhbnRTdGF0ZUNoYW5nZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gQSBkcml2ZXIvZmlybXdhcmUgaGFuZyBjYW4gbm93IHB1dCB0aGUgaW50ZXJmYWNlIGluIGEgZG93biBzdGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgZGV0ZWN0IHRoZSBpbnRlcmZhY2UgZ29pbmcgZG93biBhbmQgcmVjb3ZlciBmcm9tIGl0Ci0gICAgICAgICAgICAgICAgICAgIGlmICghU3VwcGxpY2FudFN0YXRlLmlzRHJpdmVyQWN0aXZlKHN0YXRlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1OZXR3b3JrSW5mby5nZXRTdGF0ZSgpICE9IE5ldHdvcmtJbmZvLlN0YXRlLkRJU0NPTk5FQ1RFRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtEaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2coIkRldGVjdGVkIGFuIGludGVyZmFjZSBkb3duLCByZXN0YXJ0IGRyaXZlciIpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ecml2ZXJTdG9wcGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVJUX0RSSVZFUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIFN1cHBsaWNhbnQgY2FuIGZhaWwgdG8gcmVwb3J0IGEgTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UCi0gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gYXV0aGVudGljYXRpb24gdGltZXMgb3V0IGFmdGVyIGEgc3VjY2Vzc2Z1bCBjb25uZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjYW4gZmlndXJlIHRoaXMgZnJvbSB0aGUgc3VwcGxpY2FudCBzdGF0ZS4gSWYgc3VwcGxpY2FudAotICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZSBpcyBESVNDT05ORUNURUQsIGJ1dCB0aGUgbU5ldHdvcmtJbmZvIHNheXMgd2UgYXJlIG5vdAotICAgICAgICAgICAgICAgICAgICAvLyBkaXNjb25uZWN0ZWQsIHdlIG5lZWQgdG8gaGFuZGxlIGEgZGlzY29ubmVjdGlvbgotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gU3VwcGxpY2FudFN0YXRlLkRJU0NPTk5FQ1RFRCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OZXR3b3JrSW5mby5nZXRTdGF0ZSgpICE9IE5ldHdvcmtJbmZvLlN0YXRlLkRJU0NPTk5FQ1RFRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJNaXNzZWQgQ1RSTC1FVkVOVC1ESVNDT05ORUNURUQsIGRpc2Nvbm5lY3QiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtEaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBTZXJ2aWNlLkRJU0NPTk5FQ1RfV0lGSV9SRVFVRVNUOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wb3JhcmlseURpc2Nvbm5lY3RXaWZpID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnJlY29ubmVjdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBvcmFyaWx5RGlzY29ubmVjdFdpZmkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9BRERfT1JfVVBEQVRFX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IChXaWZpQ29uZmlndXJhdGlvbikgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIENNRF9BRERfT1JfVVBEQVRFX05FVFdPUkssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5hZGRPclVwZGF0ZU5ldHdvcmsoY29uZmlnKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFTU9WRV9ORVRXT1JLOgotICAgICAgICAgICAgICAgICAgICBvayA9IG1XaWZpQ29uZmlnU3RvcmUucmVtb3ZlTmV0d29yayhtZXNzYWdlLmFyZzEpOwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBtZXNzYWdlLndoYXQsIG9rID8gU1VDQ0VTUyA6IEZBSUxVUkUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9FTkFCTEVfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgb2sgPSBtV2lmaUNvbmZpZ1N0b3JlLmVuYWJsZU5ldHdvcmsobWVzc2FnZS5hcmcxLCBtZXNzYWdlLmFyZzIgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2Uud2hhdCwgb2sgPyBTVUNDRVNTIDogRkFJTFVSRSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0VOQUJMRV9BTExfTkVUV09SS1M6Ci0gICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZSA9ICBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodGltZSAtIG1MYXN0RW5hYmxlQWxsTmV0d29ya3NUaW1lID4gTUlOX0lOVEVSVkFMX0VOQUJMRV9BTExfTkVUV09SS1NfTVMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZW5hYmxlQWxsTmV0d29ya3MoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1MYXN0RW5hYmxlQWxsTmV0d29ya3NUaW1lID0gdGltZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkRJU0FCTEVfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpQ29uZmlnU3RvcmUuZGlzYWJsZU5ldHdvcmsobWVzc2FnZS5hcmcxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlDb25maWd1cmF0aW9uLkRJU0FCTEVEX1VOS05PV05fUkVBU09OKSA9PSB0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5ESVNBQkxFX05FVFdPUktfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLkRJU0FCTEVfTkVUV09SS19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9CTEFDS0xJU1RfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuYWRkVG9CbGFja2xpc3QoKFN0cmluZyltZXNzYWdlLm9iaik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0NMRUFSX0JMQUNLTElTVDoKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuY2xlYXJCbGFja2xpc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0FWRV9DT05GSUc6Ci0gICAgICAgICAgICAgICAgICAgIG9rID0gbVdpZmlDb25maWdTdG9yZS5zYXZlQ29uZmlnKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIENNRF9TQVZFX0NPTkZJRywgb2sgPyBTVUNDRVNTIDogRkFJTFVSRSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSW5mb3JtIHRoZSBiYWNrdXAgbWFuYWdlciBhYm91dCBhIGRhdGEgY2hhbmdlCi0gICAgICAgICAgICAgICAgICAgIElCYWNrdXBNYW5hZ2VyIGlibSA9IElCYWNrdXBNYW5hZ2VyLlN0dWIuYXNJbnRlcmZhY2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZU1hbmFnZXIuZ2V0U2VydmljZShDb250ZXh0LkJBQ0tVUF9TRVJWSUNFKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpYm0gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYm0uZGF0YUNoYW5nZWQoImNvbS5hbmRyb2lkLnByb3ZpZGVycy5zZXR0aW5ncyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgYWdhaW4gbGF0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9HRVRfQ09ORklHVVJFRF9ORVRXT1JLUzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgbWVzc2FnZS53aGF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZ2V0Q29uZmlndXJlZE5ldHdvcmtzKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgLyogRG8gYSByZWR1bmRhbnQgZGlzY29ubmVjdCB3aXRob3V0IHRyYW5zaXRpb24gKi8KLSAgICAgICAgICAgICAgICBjYXNlIENNRF9ESVNDT05ORUNUOgotICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5kaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFQ09OTkVDVDoKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucmVjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFQVNTT0NJQVRFOgotICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5yZWFzc29jaWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUxPQURfVExTX0FORF9SRUNPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaUNvbmZpZ1N0b3JlLm5lZWRzVW5sb2NrZWRLZXlTdG9yZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dkKCJSZWNvbm5lY3RpbmcgdG8gZ2l2ZSBhIGNoYW5jZSB0byB1bi1jb25uZWN0ZWQgVExTIG5ldHdvcmtzIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5kaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5yZWNvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkNPTk5FQ1RfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgLyogVGhlIGNvbm5lY3QgbWVzc2FnZSBjYW4gY29udGFpbiBhIG5ldHdvcmsgaWQgcGFzc2VkIGFzIGFyZzEgb24gbWVzc2FnZSBvcgotICAgICAgICAgICAgICAgICAgICAgKiBvciBhIGNvbmZpZyBwYXNzZWQgYXMgb2JqIG9uIG1lc3NhZ2UuCi0gICAgICAgICAgICAgICAgICAgICAqIEZvciBhIG5ldyBuZXR3b3JrLCBhIGNvbmZpZyBpcyBwYXNzZWQgdG8gY3JlYXRlIGFuZCBjb25uZWN0LgotICAgICAgICAgICAgICAgICAgICAgKiBGb3IgYW4gZXhpc3RpbmcgbmV0d29yaywgYSBuZXR3b3JrIGlkIGlzIHBhc3NlZAotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgaW50IG5ldElkID0gbWVzc2FnZS5hcmcxOwotICAgICAgICAgICAgICAgICAgICBjb25maWcgPSAoV2lmaUNvbmZpZ3VyYXRpb24pIG1lc3NhZ2Uub2JqOwotCi0gICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgdGhlIG5ldHdvcmsgY29uZmlnICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29ya1VwZGF0ZVJlc3VsdCByZXN1bHQgPSBtV2lmaUNvbmZpZ1N0b3JlLnNhdmVOZXR3b3JrKGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXRJZCA9IHJlc3VsdC5nZXROZXR3b3JrSWQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaUNvbmZpZ1N0b3JlLnNlbGVjdE5ldHdvcmsobmV0SWQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucmVjb25uZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBzdGF0ZSB0cmFja2VyIGhhbmRsZXMgZW5hYmxpbmcgbmV0d29ya3MgdXBvbiBjb21wbGV0aW9uL2ZhaWx1cmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIG1TdXBwbGljYW50U3RhdGVUcmFja2VyLnNlbmRNZXNzYWdlKFdpZmlNYW5hZ2VyLkNPTk5FQ1RfTkVUV09SSyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5DT05ORUNUX05FVFdPUktfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4cGVjdCBhIGRpc2Nvbm5lY3Rpb24gZnJvbSB0aGUgb2xkIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBjb25uZWN0IGNvbmZpZzogIiArIGNvbmZpZyArICIgbmV0SWQ6ICIgKyBuZXRJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5DT05ORUNUX05FVFdPUktfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpTWFuYWdlci5FUlJPUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNBVkVfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gKFdpZmlDb25maWd1cmF0aW9uKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgTmV0d29ya1VwZGF0ZVJlc3VsdCByZXN1bHQgPSBtV2lmaUNvbmZpZ1N0b3JlLnNhdmVOZXR3b3JrKGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2V0TmV0d29ya0lkKCkgIT0gV2lmaUNvbmZpZ3VyYXRpb24uSU5WQUxJRF9ORVRXT1JLX0lEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5TQVZFX05FVFdPUktfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzYXZlIG5ldHdvcmsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLlNBVkVfTkVUV09SS19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkZPUkdFVF9ORVRXT1JLOgotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlDb25maWdTdG9yZS5mb3JnZXROZXR3b3JrKG1lc3NhZ2UuYXJnMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLkZPUkdFVF9ORVRXT1JLX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gZm9yZ2V0IG5ldHdvcmsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLkZPUkdFVF9ORVRXT1JLX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuRVJST1IpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuU1RBUlRfV1BTOgotICAgICAgICAgICAgICAgICAgICBXcHNJbmZvIHdwc0luZm8gPSAoV3BzSW5mbykgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIFdwc1Jlc3VsdCB3cHNSZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAod3BzSW5mby5zZXR1cCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBXcHNJbmZvLlBCQzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cHNSZXN1bHQgPSBtV2lmaUNvbmZpZ1N0b3JlLnN0YXJ0V3BzUGJjKHdwc0luZm8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBXcHNJbmZvLktFWVBBRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cHNSZXN1bHQgPSBtV2lmaUNvbmZpZ1N0b3JlLnN0YXJ0V3BzV2l0aFBpbkZyb21BY2Nlc3NQb2ludCh3cHNJbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgV3BzSW5mby5ESVNQTEFZOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdwc1Jlc3VsdCA9IG1XaWZpQ29uZmlnU3RvcmUuc3RhcnRXcHNXaXRoUGluRnJvbURldmljZSh3cHNJbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3BzUmVzdWx0ID0gbmV3IFdwc1Jlc3VsdChTdGF0dXMuRkFJTFVSRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiSW52YWxpZCBzZXR1cCBmb3IgV1BTIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdwc1Jlc3VsdC5zdGF0dXMgPT0gU3RhdHVzLlNVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLlNUQVJUX1dQU19TVUNDRUVERUQsIHdwc1Jlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVdwc1J1bm5pbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gc3RhcnQgV1BTIHdpdGggY29uZmlnICIgKyB3cHNJbmZvLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaU1hbmFnZXIuV1BTX0ZBSUxFRCwgV2lmaU1hbmFnZXIuRVJST1IpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19DT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIk5ldHdvcmsgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCIpOwotICAgICAgICAgICAgICAgICAgICBtTGFzdE5ldHdvcmtJZCA9IG1lc3NhZ2UuYXJnMTsKLSAgICAgICAgICAgICAgICAgICAgbUxhc3RCc3NpZCA9IChTdHJpbmcpIG1lc3NhZ2Uub2JqOwotCi0gICAgICAgICAgICAgICAgICAgIG1XaWZpSW5mby5zZXRCU1NJRChtTGFzdEJzc2lkKTsKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlJbmZvLnNldE5ldHdvcmtJZChtTGFzdE5ldHdvcmtJZCk7Ci0gICAgICAgICAgICAgICAgICAgIC8qIHNlbmQgZXZlbnQgdG8gQ00gJiBuZXR3b3JrIGNoYW5nZSBicm9hZGNhc3QgKi8KLSAgICAgICAgICAgICAgICAgICAgc2V0TmV0d29ya0RldGFpbGVkU3RhdGUoRGV0YWlsZWRTdGF0ZS5PQlRBSU5JTkdfSVBBRERSKTsKLSAgICAgICAgICAgICAgICAgICAgc2VuZE5ldHdvcmtTdGF0ZUNoYW5nZUJyb2FkY2FzdChtTGFzdEJzc2lkKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1PYnRhaW5pbmdJcFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5ORVRXT1JLX0RJU0NPTk5FQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiTmV0d29yayBjb25uZWN0aW9uIGxvc3QiKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya0Rpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgTDJDb25uZWN0ZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgbVJzc2lQb2xsVG9rZW4rKzsKLSAgICAgICAgICAgIGlmIChtRW5hYmxlUnNzaVBvbGxpbmcpIHsKLSAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShDTURfUlNTSV9QT0xMLCBtUnNzaVBvbGxUb2tlbiwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZXhpdCgpIHsKLSAgICAgICAgICAgIGhhbmRsZU5ldHdvcmtEaXNjb25uZWN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICBjYXNlIERoY3BTdGF0ZU1hY2hpbmUuQ01EX1BSRV9ESENQX0FDVElPTjoKLSAgICAgICAgICAgICAgICAgIGhhbmRsZVByZURoY3BTZXR1cCgpOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRGhjcFN0YXRlTWFjaGluZS5DTURfUE9TVF9ESENQX0FDVElPTjoKLSAgICAgICAgICAgICAgICAgIGhhbmRsZVBvc3REaGNwU2V0dXAoKTsKLSAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gRGhjcFN0YXRlTWFjaGluZS5ESENQX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIkRIQ1Agc3VjY2Vzc2Z1bCIpOwotICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3NmdWxJcENvbmZpZ3VyYXRpb24oKERoY3BSZXN1bHRzKSBtZXNzYWdlLm9iaik7Ci0gICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1WZXJpZnlpbmdMaW5rU3RhdGUpOwotICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmFyZzEgPT0gRGhjcFN0YXRlTWFjaGluZS5ESENQX0ZBSUxVUkUpIHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIkRIQ1AgZmFpbGVkIik7Ci0gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRmFpbGVkSXBDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0aW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfRElTQ09OTkVDVDoKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZGlzY29ubmVjdCgpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RpbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycFNlcnZpY2UuRElTQ09OTkVDVF9XSUZJX1JFUVVFU1Q6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZGlzY29ubmVjdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVRlbXBvcmFyaWx5RGlzY29ubmVjdFdpZmkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0aW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxICE9IENPTk5FQ1RfTU9ERSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX0RJU0NPTk5FQ1QpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdCBhdHRlbXB0IHRvIGNvbm5lY3Qgd2hlbiB3ZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgbm90ZVNjYW5TdGFydChtZXNzYWdlLmFyZzEsIChXb3JrU291cmNlKSBtZXNzYWdlLm9iaik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0U2Nhbk5hdGl2ZShXaWZpTmF0aXZlLlNDQU5fV0lUSE9VVF9DT05ORUNUSU9OX1NFVFVQKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8qIElnbm9yZSBjb25uZWN0aW9uIHRvIHNhbWUgbmV0d29yayAqLwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuQ09OTkVDVF9ORVRXT1JLOgotICAgICAgICAgICAgICAgICAgICBpbnQgbmV0SWQgPSBtZXNzYWdlLmFyZzE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaUluZm8uZ2V0TmV0d29ya0lkKCkgPT0gbmV0SWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNBVkVfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnID0gKFdpZmlDb25maWd1cmF0aW9uKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgTmV0d29ya1VwZGF0ZVJlc3VsdCByZXN1bHQgPSBtV2lmaUNvbmZpZ1N0b3JlLnNhdmVOZXR3b3JrKGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaUluZm8uZ2V0TmV0d29ya0lkKCkgPT0gcmVzdWx0LmdldE5ldHdvcmtJZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0lwQ2hhbmdlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJSZWNvbmZpZ3VyaW5nIElQIG9uIGNvbm5lY3Rpb24iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU9idGFpbmluZ0lwU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNQcm94eUNoYW5nZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiUmVjb25maWd1cmluZyBwcm94eSBvbiBjb25uZWN0aW9uIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTGlua1Byb3BlcnRpZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2V0TmV0d29ya0lkKCkgIT0gV2lmaUNvbmZpZ3VyYXRpb24uSU5WQUxJRF9ORVRXT1JLX0lEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5TQVZFX05FVFdPUktfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzYXZlIG5ldHdvcmsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLlNBVkVfTkVUV09SS19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgLyogSWdub3JlICovCi0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5ORVRXT1JLX0NPTk5FQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JTU0lfUE9MTDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSBtUnNzaVBvbGxUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IEluZm8gYW5kIGNvbnRpbnVlIHBvbGxpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoUnNzaUFuZExpbmtTcGVlZE5hdGl2ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX1JTU0lfUE9MTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJzc2lQb2xsVG9rZW4sIDApLCBQT0xMX1JTU0lfSU5URVJWQUxfTVNFQ1MpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG9sbGluZyBoYXMgY29tcGxldGVkCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfRU5BQkxFX1JTU0lfUE9MTDoKLSAgICAgICAgICAgICAgICAgICAgbUVuYWJsZVJzc2lQb2xsaW5nID0gKG1lc3NhZ2UuYXJnMSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgbVJzc2lQb2xsVG9rZW4rKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1FbmFibGVSc3NpUG9sbGluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgcG9sbAotICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hSc3NpQW5kTGlua1NwZWVkTmF0aXZlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShDTURfUlNTSV9QT0xMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUnNzaVBvbGxUb2tlbiwgMCksIFBPTExfUlNTSV9JTlRFUlZBTF9NU0VDUyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSDoKLSAgICAgICAgICAgICAgICAgICAgUnNzaVBhY2tldENvdW50SW5mbyBpbmZvID0gbmV3IFJzc2lQYWNrZXRDb3VudEluZm8oKTsKLSAgICAgICAgICAgICAgICAgICAgZmV0Y2hSc3NpQW5kTGlua1NwZWVkTmF0aXZlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8ucnNzaSA9IG1XaWZpSW5mby5nZXRSc3NpKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZldGNoUGt0Y250TmF0aXZlKGluZm8pOwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSF9TVUNDRUVERUQsIGluZm8pOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgT2J0YWluaW5nSXBTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKCFtV2lmaUNvbmZpZ1N0b3JlLmlzVXNpbmdTdGF0aWNJcChtTGFzdE5ldHdvcmtJZCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPOiBJZiB3ZSdyZSBzd2l0Y2hpbmcgYmV0d2VlbiBzdGF0aWMgSVAgY29uZmlndXJhdGlvbiBhbmQgREhDUCwgcmVtb3ZlIHRoZQotICAgICAgICAgICAgICAgIC8vIHN0YXRpYyBjb25maWd1cmF0aW9uIGZpcnN0LgotICAgICAgICAgICAgICAgIHN0YXJ0RGhjcCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBzdG9wIGFueSBydW5uaW5nIGRoY3AgYmVmb3JlIGFzc2lnbmluZyBzdGF0aWMgSVAKLSAgICAgICAgICAgICAgICBzdG9wRGhjcCgpOwotICAgICAgICAgICAgICAgIERoY3BSZXN1bHRzIGRoY3BSZXN1bHRzID0gbmV3IERoY3BSZXN1bHRzKAotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5nZXRMaW5rUHJvcGVydGllcyhtTGFzdE5ldHdvcmtJZCkpOwotICAgICAgICAgICAgICAgIEludGVyZmFjZUNvbmZpZ3VyYXRpb24gaWZjZyA9IG5ldyBJbnRlcmZhY2VDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgSXRlcmF0b3I8TGlua0FkZHJlc3M+IGFkZHJzID0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRoY3BSZXN1bHRzLmxpbmtQcm9wZXJ0aWVzLmdldExpbmtBZGRyZXNzZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgIGlmICghYWRkcnMuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIlN0YXRpYyBJUCBsYWNrcyBhZGRyZXNzIik7Ci0gICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFUSUNfSVBfRkFJTFVSRSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWZjZy5zZXRMaW5rQWRkcmVzcyhhZGRycy5uZXh0KCkpOwotICAgICAgICAgICAgICAgICAgICBpZmNnLnNldEludGVyZmFjZVVwKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLnNldEludGVyZmFjZUNvbmZpZyhtSW50ZXJmYWNlTmFtZSwgaWZjZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIlN0YXRpYyBJUCBjb25maWd1cmF0aW9uIHN1Y2NlZWRlZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVRJQ19JUF9TVUNDRVNTLCBkaGNwUmVzdWx0cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiU3RhdGljIElQIGNvbmZpZ3VyYXRpb24gZmFpbGVkOiAiICsgcmUpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVRJQ19JUF9GQUlMVVJFKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlN0YXRpYyBJUCBjb25maWd1cmF0aW9uIGZhaWxlZDogIiArIGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoQ01EX1NUQVRJQ19JUF9GQUlMVVJFKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICBpZiAoREJHKSBsb2coZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpICsgIlxuIik7Ci0gICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgY2FzZSBDTURfU1RBVElDX0lQX1NVQ0NFU1M6Ci0gICAgICAgICAgICAgICAgICBoYW5kbGVTdWNjZXNzZnVsSXBDb25maWd1cmF0aW9uKChEaGNwUmVzdWx0cykgbWVzc2FnZS5vYmopOwotICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1WZXJpZnlpbmdMaW5rU3RhdGUpOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVRJQ19JUF9GQUlMVVJFOgotICAgICAgICAgICAgICAgICAgaGFuZGxlRmFpbGVkSXBDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RpbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlNBVkVfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgLyogRGVmZXIgYW55IHBvd2VyIG1vZGUgY2hhbmdlcyBzaW5jZSB3ZSBtdXN0IGtlZXAgYWN0aXZlIHBvd2VyIG1vZGUgYXQgREhDUCAqLwotICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfSElHSF9QRVJGX01PREU6Ci0gICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIC8qIERlZmVyIHNjYW4gcmVxdWVzdCBzaW5jZSB3ZSBzaG91bGQgbm90IHN3aXRjaCB0byBvdGhlciBjaGFubmVscyBhdCBESENQICovCi0gICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NDQU46Ci0gICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgVmVyaWZ5aW5nTGlua1N0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBsb2coZ2V0TmFtZSgpICsgIiBlbnRlciIpOwotICAgICAgICAgICAgc2V0TmV0d29ya0RldGFpbGVkU3RhdGUoRGV0YWlsZWRTdGF0ZS5WRVJJRllJTkdfUE9PUl9MSU5LKTsKLSAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUudXBkYXRlU3RhdHVzKG1MYXN0TmV0d29ya0lkLCBEZXRhaWxlZFN0YXRlLlZFUklGWUlOR19QT09SX0xJTkspOwotICAgICAgICAgICAgc2VuZE5ldHdvcmtTdGF0ZUNoYW5nZUJyb2FkY2FzdChtTGFzdEJzc2lkKTsKLSAgICAgICAgfQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lLlBPT1JfTElOS19ERVRFQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgLy9zdGF5IGhlcmUKLSAgICAgICAgICAgICAgICAgICAgbG9nKGdldE5hbWUoKSArICIgUE9PUl9MSU5LX0RFVEVDVEVEOiBubyB0cmFuc2l0aW9uIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lLkdPT0RfTElOS19ERVRFQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgbG9nKGdldE5hbWUoKSArICIgR09PRF9MSU5LX0RFVEVDVEVEOiB0cmFuc2l0aW9uIHRvIGNhcHRpdmUgcG9ydGFsIGNoZWNrIik7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtQ2FwdGl2ZVBvcnRhbENoZWNrU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coZ2V0TmFtZSgpICsgIiB3aGF0PSIgKyBtZXNzYWdlLndoYXQgKyAiIE5PVF9IQU5ETEVEIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgQ2FwdGl2ZVBvcnRhbENoZWNrU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGxvZyhnZXROYW1lKCkgKyAiIGVudGVyIik7Ci0gICAgICAgICAgICBzZXROZXR3b3JrRGV0YWlsZWRTdGF0ZShEZXRhaWxlZFN0YXRlLkNBUFRJVkVfUE9SVEFMX0NIRUNLKTsKLSAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUudXBkYXRlU3RhdHVzKG1MYXN0TmV0d29ya0lkLCBEZXRhaWxlZFN0YXRlLkNBUFRJVkVfUE9SVEFMX0NIRUNLKTsKLSAgICAgICAgICAgIHNlbmROZXR3b3JrU3RhdGVDaGFuZ2VCcm9hZGNhc3QobUxhc3RCc3NpZCk7Ci0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9DQVBUSVZFX0NIRUNLX0NPTVBMRVRFOgotICAgICAgICAgICAgICAgICAgICBsb2coZ2V0TmFtZSgpICsgIiBDTURfQ0FQVElWRV9DSEVDS19DT01QTEVURSIpOwotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgbU53U2VydmljZS5lbmFibGVJcHY2KG1JbnRlcmZhY2VOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gZW5hYmxlIElQdjY6ICIgKyByZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gZW5hYmxlIElQdjY6ICIgKyBlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZXROZXR3b3JrRGV0YWlsZWRTdGF0ZShEZXRhaWxlZFN0YXRlLkNPTk5FQ1RFRCk7Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUudXBkYXRlU3RhdHVzKG1MYXN0TmV0d29ya0lkLCBEZXRhaWxlZFN0YXRlLkNPTk5FQ1RFRCk7Ci0gICAgICAgICAgICAgICAgICAgIHNlbmROZXR3b3JrU3RhdGVDaGFuZ2VCcm9hZGNhc3QobUxhc3RCc3NpZCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtQ29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIENvbm5lY3RlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgY2FzZSBXaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUuUE9PUl9MSU5LX0RFVEVDVEVEOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIldhdGNoZG9nIHJlcG9ydHMgcG9vciBsaW5rIik7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTndTZXJ2aWNlLmRpc2FibGVJcHY2KG1JbnRlcmZhY2VOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gZGlzYWJsZSBJUHY2OiAiICsgcmUpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGRpc2FibGUgSVB2NjogIiArIGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8qIFJlcG9ydCBhIGRpc2Nvbm5lY3QgKi8KLSAgICAgICAgICAgICAgICAgICAgc2V0TmV0d29ya0RldGFpbGVkU3RhdGUoRGV0YWlsZWRTdGF0ZS5ESVNDT05ORUNURUQpOwotICAgICAgICAgICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLnVwZGF0ZVN0YXR1cyhtTGFzdE5ldHdvcmtJZCwgRGV0YWlsZWRTdGF0ZS5ESVNDT05ORUNURUQpOwotICAgICAgICAgICAgICAgICAgICBzZW5kTmV0d29ya1N0YXRlQ2hhbmdlQnJvYWRjYXN0KG1MYXN0QnNzaWQpOwotCi0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVmVyaWZ5aW5nTGlua1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7Ci0gICAgICAgICAgICAvKiBSZXF1ZXN0IGEgQ1Mgd2FrZWxvY2sgZHVyaW5nIHRyYW5zaXRpb24gdG8gbW9iaWxlICovCi0gICAgICAgICAgICBjaGVja0FuZFNldENvbm5lY3Rpdml0eUluc3RhbmNlKCk7Ci0gICAgICAgICAgICBtQ20ucmVxdWVzdE5ldHdvcmtUcmFuc2l0aW9uV2FrZWxvY2soZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIERpc2Nvbm5lY3RpbmdTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSAhPSBDT05ORUNUX01PREUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBnZXQgYSBTVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVCBiZWZvcmUgTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UCi0gICAgICAgICAgICAgICAgICAgICAqIHdlIGhhdmUgbWlzc2VkIHRoZSBuZXR3b3JrIGRpc2Nvbm5lY3Rpb24sIHRyYW5zaXRpb24gdG8gbURpc2Nvbm5lY3RlZFN0YXRlCi0gICAgICAgICAgICAgICAgICAgICAqIGFuZCBoYW5kbGUgdGhlIHJlc3Qgb2YgdGhlIGV2ZW50cyB0aGVyZQotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVOZXR3b3JrRGlzY29ubmVjdCgpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obURpc2Nvbm5lY3RlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBEaXNjb25uZWN0ZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1BbGFybUVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgLyogVGhpcyBpcyBzZXQgZnJvbSB0aGUgb3ZlcmxheSBjb25maWcgZmlsZSBvciBmcm9tIGEgc2VjdXJlIHNldHRpbmcuCi0gICAgICAgICAqIEEgdmFsdWUgb2YgMCBkaXNhYmxlcyBzY2FubmluZyBpbiB0aGUgZnJhbWV3b3JrLgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBsb25nIG1GcmFtZXdvcmtTY2FuSW50ZXJ2YWxNczsKLQotICAgICAgICBwcml2YXRlIHZvaWQgc2V0U2NhbkFsYXJtKGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgICAgICAgaWYgKGVuYWJsZWQgPT0gbUFsYXJtRW5hYmxlZCkgcmV0dXJuOwotICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAobUZyYW1ld29ya1NjYW5JbnRlcnZhbE1zID4gMCkgewotICAgICAgICAgICAgICAgICAgICBtQWxhcm1NYW5hZ2VyLnNldFJlcGVhdGluZyhBbGFybU1hbmFnZXIuUlRDX1dBS0VVUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArIG1GcmFtZXdvcmtTY2FuSW50ZXJ2YWxNcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRnJhbWV3b3JrU2NhbkludGVydmFsTXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNjYW5JbnRlbnQpOwotICAgICAgICAgICAgICAgICAgICBtQWxhcm1FbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1BbGFybU1hbmFnZXIuY2FuY2VsKG1TY2FuSW50ZW50KTsKLSAgICAgICAgICAgICAgICBtQWxhcm1FbmFibGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICAvLyBXZSBkb250IHNjYW4gZnJlcXVlbnRseSBpZiB0aGlzIGlzIGEgdGVtcG9yYXJ5IGRpc2Nvbm5lY3QKLSAgICAgICAgICAgIC8vIGR1ZSB0byBwMnAKLSAgICAgICAgICAgIGlmIChtVGVtcG9yYXJpbHlEaXNjb25uZWN0V2lmaSkgewotICAgICAgICAgICAgICAgIG1XaWZpUDJwQ2hhbm5lbC5zZW5kTWVzc2FnZShXaWZpUDJwU2VydmljZS5ESVNDT05ORUNUX1dJRklfUkVTUE9OU0UpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUZyYW1ld29ya1NjYW5JbnRlcnZhbE1zID0gU2V0dGluZ3MuR2xvYmFsLmdldExvbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5XSUZJX0ZSQU1FV09SS19TQ0FOX0lOVEVSVkFMX01TLAotICAgICAgICAgICAgICAgICAgICBtRGVmYXVsdEZyYW1ld29ya1NjYW5JbnRlcnZhbE1zKTsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBXZSBpbml0aWF0ZSBiYWNrZ3JvdW5kIHNjYW5uaW5nIGlmIGl0IGlzIGVuYWJsZWQsIG90aGVyd2lzZSB3ZQotICAgICAgICAgICAgICogaW5pdGlhdGUgYW4gaW5mcmVxdWVudCBzY2FuIHRoYXQgd2FrZXMgdXAgdGhlIGRldmljZSB0byBlbnN1cmUKLSAgICAgICAgICAgICAqIGEgdXNlciBjb25uZWN0cyB0byBhbiBhY2Nlc3MgcG9pbnQgb24gdGhlIG1vdmUKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKG1FbmFibGVCYWNrZ3JvdW5kU2NhbikgewotICAgICAgICAgICAgICAgIC8qIElmIGEgcmVndWxhciBzY2FuIHJlc3VsdCBpcyBwZW5kaW5nLCBkbyBub3QgaW5pdGlhdGUgYmFja2dyb3VuZAotICAgICAgICAgICAgICAgICAqIHNjYW4gdW50aWwgdGhlIHNjYW4gcmVzdWx0cyBhcmUgcmV0dXJuZWQuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgKiBpbml0aWF0aW5nIGEgYmFja2dyb3VuZCBzY2FuIHdpbGwgY2FuY2VsIHRoZSByZWd1bGFyIHNjYW4gYW5kCi0gICAgICAgICAgICAgICAgICogc2NhbiByZXN1bHRzIHdpbGwgbm90IGJlIHJldHVybmVkIHVudGlsIGJhY2tncm91bmQgc2Nhbm5pbmcgaXMKLSAgICAgICAgICAgICAgICAgKiBjbGVhcmVkCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKCFtU2NhblJlc3VsdElzUGVuZGluZykgewotICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5lbmFibGVCYWNrZ3JvdW5kU2Nhbih0cnVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNldFNjYW5BbGFybSh0cnVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBJZiB3ZSBoYXZlIG5vIG5ldHdvcmtzIHNhdmVkLCB0aGUgc3VwcGxpY2FudCBzdG9wcyBkb2luZyB0aGUgcGVyaW9kaWMgc2Nhbi4KLSAgICAgICAgICAgICAqIFRoZSBzY2FucyBhcmUgdXNlZnVsIHRvIG5vdGlmeSB0aGUgdXNlciBvZiB0aGUgcHJlc2VuY2Ugb2YgYW4gb3BlbiBuZXR3b3JrLgotICAgICAgICAgICAgICogTm90ZSB0aGF0IHRoZXNlIGFyZSBub3Qgd2FrZSB1cCBzY2Fucy4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKCFtUDJwQ29ubmVjdGVkLmdldCgpICYmIG1XaWZpQ29uZmlnU3RvcmUuZ2V0Q29uZmlndXJlZE5ldHdvcmtzKCkuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShDTURfTk9fTkVUV09SS1NfUEVSSU9ESUNfU0NBTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArK21QZXJpb2RpY1NjYW5Ub2tlbiwgMCksIG1TdXBwbGljYW50U2NhbkludGVydmFsTXMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGJvb2xlYW4gcmV0ID0gSEFORExFRDsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfTk9fTkVUV09SS1NfUEVSSU9ESUNfU0NBTjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1QMnBDb25uZWN0ZWQuZ2V0KCkpIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IG1QZXJpb2RpY1NjYW5Ub2tlbiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ29uZmlnU3RvcmUuZ2V0Q29uZmlndXJlZE5ldHdvcmtzKCkuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFSVF9TQ0FOLCBVTktOT1dOX1NDQU5fU09VUkNFLCAwLCAoV29ya1NvdXJjZSkgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShDTURfTk9fTkVUV09SS1NfUEVSSU9ESUNfU0NBTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbVBlcmlvZGljU2NhblRva2VuLCAwKSwgbVN1cHBsaWNhbnRTY2FuSW50ZXJ2YWxNcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTWFuYWdlci5GT1JHRVRfTkVUV09SSzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRU1PVkVfTkVUV09SSzoKLSAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHVwIGEgZGVsYXllZCBtZXNzYWdlIGhlcmUuIEFmdGVyIHRoZSBmb3JnZXQvcmVtb3ZlIGlzIGhhbmRsZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGhhbmRsZWQgZGVsYXllZCBtZXNzYWdlIHdpbGwgZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbmVlZCB0bwotICAgICAgICAgICAgICAgICAgICAvLyBzY2FuIGFuZCBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShDTURfTk9fTkVUV09SS1NfUEVSSU9ESUNfU0NBTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyttUGVyaW9kaWNTY2FuVG9rZW4sIDApLCBtU3VwcGxpY2FudFNjYW5JbnRlcnZhbE1zKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxICE9IENPTk5FQ1RfTU9ERSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbU9wZXJhdGlvbmFsTW9kZSA9IG1lc3NhZ2UuYXJnMTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlDb25maWdTdG9yZS5kaXNhYmxlQWxsTmV0d29ya3MoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtT3BlcmF0aW9uYWxNb2RlID09IFNDQU5fT05MWV9XSVRIX1dJRklfT0ZGX01PREUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2lmaVAycENoYW5uZWwuc2VuZE1lc3NhZ2UoQ01EX0RJU0FCTEVfUDJQX1JFUSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0V2lmaVN0YXRlKFdJRklfU1RBVEVfRElTQUJMRUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVNjYW5Nb2RlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX0VOQUJMRV9CQUNLR1JPVU5EX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIG1FbmFibGVCYWNrZ3JvdW5kU2NhbiA9IChtZXNzYWdlLmFyZzEgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtRW5hYmxlQmFja2dyb3VuZFNjYW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmVuYWJsZUJhY2tncm91bmRTY2FuKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2NhbkFsYXJtKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLmVuYWJsZUJhY2tncm91bmRTY2FuKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjYW5BbGFybSh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgLyogSWdub3JlIG5ldHdvcmsgZGlzY29ubmVjdCAqLwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuTkVUV09SS19ESVNDT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBTdGF0ZUNoYW5nZVJlc3VsdCBzdGF0ZUNoYW5nZVJlc3VsdCA9IChTdGF0ZUNoYW5nZVJlc3VsdCkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIHNldE5ldHdvcmtEZXRhaWxlZFN0YXRlKFdpZmlJbmZvLmdldERldGFpbGVkU3RhdGVPZihzdGF0ZUNoYW5nZVJlc3VsdC5zdGF0ZSkpOwotICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0TW9kZVN0YXRlIGRvZXMgdGhlIHJlc3Qgb2YgdGhlIGhhbmRsaW5nICovCi0gICAgICAgICAgICAgICAgICAgIHJldCA9IE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9TQ0FOOgotICAgICAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIGJhY2tncm91bmQgc2NhbiB0ZW1wb3JhcmlseSBkdXJpbmcgYSByZWd1bGFyIHNjYW4gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1FbmFibGVCYWNrZ3JvdW5kU2NhbikgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZW5hYmxlQmFja2dyb3VuZFNjYW4oZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8qIEhhbmRsZWQgaW4gcGFyZW50IHN0YXRlICovCi0gICAgICAgICAgICAgICAgICAgIHJldCA9IE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNDQU5fUkVTVUxUU19FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgLyogUmUtZW5hYmxlIGJhY2tncm91bmQgc2NhbiB3aGVuIGEgcGVuZGluZyBzY2FuIHJlc3VsdCBpcyByZWNlaXZlZCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAobUVuYWJsZUJhY2tncm91bmRTY2FuICYmIG1TY2FuUmVzdWx0SXNQZW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5lbmFibGVCYWNrZ3JvdW5kU2Nhbih0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvKiBIYW5kbGVkIGluIHBhcmVudCBzdGF0ZSAqLwotICAgICAgICAgICAgICAgICAgICByZXQgPSBOT1RfSEFORExFRDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwU2VydmljZS5QMlBfQ09OTkVDVElPTl9DSEFOR0VEOgotICAgICAgICAgICAgICAgICAgICBOZXR3b3JrSW5mbyBpbmZvID0gKE5ldHdvcmtJbmZvKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgbVAycENvbm5lY3RlZC5zZXQoaW5mby5pc0Nvbm5lY3RlZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1QMnBDb25uZWN0ZWQuZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZhdWx0SW50ZXJ2YWwgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRJbnRlZ2VyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLmludGVnZXIuY29uZmlnX3dpZmlfc2Nhbl9pbnRlcnZhbF9wMnBfY29ubmVjdGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2NhbkludGVydmFsTXMgPSBTZXR0aW5ncy5HbG9iYWwuZ2V0TG9uZyhtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfU0NBTl9JTlRFUlZBTF9XSEVOX1AyUF9DT05ORUNURURfTVMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRJbnRlcnZhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRTY2FuSW50ZXJ2YWwoKGludCkgc2NhbkludGVydmFsTXMvMTAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobVdpZmlDb25maWdTdG9yZS5nZXRDb25maWd1cmVkTmV0d29ya3MoKS5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nKCJUdXJuIG9uIHNjYW5uaW5nIGFmdGVyIHAycCBkaXNjb25uZWN0ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChvYnRhaW5NZXNzYWdlKENNRF9OT19ORVRXT1JLU19QRVJJT0RJQ19TQ0FOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyttUGVyaW9kaWNTY2FuVG9rZW4sIDApLCBtU3VwcGxpY2FudFNjYW5JbnRlcnZhbE1zKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1JFQ09OTkVDVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUFTU09DSUFURToKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1UZW1wb3JhcmlseURpc2Nvbm5lY3RXaWZpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEcm9wIGEgdGhpcmQgcGFydHkgcmVjb25uZWN0L3JlYXNzb2NpYXRlIGlmIFNUQSBpcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVtcG9yYXJpbHkgZGlzY29ubmVjdGVkIGZvciBwMnAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29ubmVjdE1vZGVTdGF0ZSBoYW5kbGVzIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBOT1RfSEFORExFRDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXQgPSBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZXhpdCgpIHsKLSAgICAgICAgICAgIC8qIE5vIG5lZWQgZm9yIGEgYmFja2dyb3VuZCBzY2FuIHVwb24gZXhpdCBmcm9tIGEgZGlzY29ubmVjdGVkIHN0YXRlICovCi0gICAgICAgICAgICBpZiAobUVuYWJsZUJhY2tncm91bmRTY2FuKSB7Ci0gICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuZW5hYmxlQmFja2dyb3VuZFNjYW4oZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0U2NhbkFsYXJtKGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFdwc1J1bm5pbmdTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgLy9UcmFja3MgdGhlIHNvdXJjZSB0byBwcm92aWRlIGEgcmVwbHkKLSAgICAgICAgcHJpdmF0ZSBNZXNzYWdlIG1Tb3VyY2VNZXNzYWdlOwotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBtU291cmNlTWVzc2FnZSA9IE1lc3NhZ2Uub2J0YWluKGdldEN1cnJlbnRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5XUFNfU1VDQ0VTU19FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIGludGVybWVkaWF0ZSBzdWNjZXNzLCB3YWl0IGZvciBmdWxsIGNvbm5lY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5ORVRXT1JLX0NPTk5FQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1Tb3VyY2VNZXNzYWdlLCBXaWZpTWFuYWdlci5XUFNfQ09NUExFVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgbVNvdXJjZU1lc3NhZ2UucmVjeWNsZSgpOwotICAgICAgICAgICAgICAgICAgICBtU291cmNlTWVzc2FnZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuV1BTX09WRVJMQVBfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1Tb3VyY2VNZXNzYWdlLCBXaWZpTWFuYWdlci5XUFNfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLldQU19PVkVSTEFQX0VSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgbVNvdXJjZU1lc3NhZ2UucmVjeWNsZSgpOwotICAgICAgICAgICAgICAgICAgICBtU291cmNlTWVzc2FnZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtRGlzY29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLldQU19GQUlMX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICAvL2FyZzEgaGFzIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlCi0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1Tb3VyY2VNZXNzYWdlLCBXaWZpTWFuYWdlci5XUFNfRkFJTEVELCBtZXNzYWdlLmFyZzEpOwotICAgICAgICAgICAgICAgICAgICBtU291cmNlTWVzc2FnZS5yZWN5Y2xlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1Tb3VyY2VNZXNzYWdlID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuV1BTX1RJTUVPVVRfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1Tb3VyY2VNZXNzYWdlLCBXaWZpTWFuYWdlci5XUFNfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLldQU19USU1FRF9PVVQpOwotICAgICAgICAgICAgICAgICAgICBtU291cmNlTWVzc2FnZS5yZWN5Y2xlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1Tb3VyY2VNZXNzYWdlID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuU1RBUlRfV1BTOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5XUFNfRkFJTEVELCBXaWZpTWFuYWdlci5JTl9QUk9HUkVTUyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuQ0FOQ0VMX1dQUzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLmNhbmNlbFdwcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpTWFuYWdlci5DQU5DRUxfV1BTX1NVQ0NFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlNYW5hZ2VyLkNBTkNFTF9XUFNfRkFJTEVELCBXaWZpTWFuYWdlci5FUlJPUik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1EaXNjb25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8qIERlZmVyIGFsbCBjb21tYW5kcyB0aGF0IGNhbiBjYXVzZSBjb25uZWN0aW9ucyB0byBhIGRpZmZlcmVudCBuZXR3b3JrCi0gICAgICAgICAgICAgICAgICogb3IgcHV0IHRoZSBzdGF0ZSBtYWNoaW5lIG91dCBvZiBjb25uZWN0IG1vZGUKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX0RSSVZFUjoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfT1BFUkFUSU9OQUxfTU9ERToKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLkNPTk5FQ1RfTkVUV09SSzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9FTkFCTEVfTkVUV09SSzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SRUNPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfUkVBU1NPQ0lBVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5ORVRXT1JLX0RJU0NPTk5FQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiTmV0d29yayBjb25uZWN0aW9uIGxvc3QiKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlTmV0d29ya0Rpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5BU1NPQ0lBVElPTl9SRUpFQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiSWdub3JlIEFzc29jIHJlamVjdCBldmVudCBkdXJpbmcgV1BTIENvbm5lY3Rpb24iKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5BVVRIRU5USUNBVElPTl9GQUlMVVJFX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICAvLyBEaXNyZWdhcmQgYXV0aCBmYWlsdXJlIGV2ZW50cyBkdXJpbmcgV1BTIGNvbm5lY3Rpb24uIFRoZQotICAgICAgICAgICAgICAgICAgICAvLyBFQVAgc2VxdWVuY2UgaXMgcmV0cmllZCBzZXZlcmFsIHRpbWVzLCBhbmQgdGhlcmUgbWlnaHQgYmUKLSAgICAgICAgICAgICAgICAgICAgLy8gZmFpbHVyZXMgKGVzcGVjaWFsbHkgZm9yIHdwcyBwaW4pLiBXZSB3aWxsIGdldCBhIFdQU19YWFgKLSAgICAgICAgICAgICAgICAgICAgLy8gZXZlbnQgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UgYW55d2F5LgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2coIklnbm9yZSBhdXRoIGZhaWx1cmUgZHVyaW5nIFdQUyBjb25uZWN0aW9uIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQUExJQ0FOVF9TVEFURV9DSEFOR0VfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vVGhyb3cgYXdheSBzdXBwbGljYW50IHN0YXRlIGNoYW5nZXMgd2hlbiBXUFMgaXMgcnVubmluZy4KLSAgICAgICAgICAgICAgICAgICAgLy9XZSB3aWxsIHN0YXJ0IGdldHRpbmcgc3VwcGxpY2FudCBzdGF0ZSBjaGFuZ2VzIG9uY2Ugd2UgZ2V0Ci0gICAgICAgICAgICAgICAgICAgIC8vYSBXUFMgc3VjY2VzcyBvciBmYWlsdXJlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7Ci0gICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmVuYWJsZUFsbE5ldHdvcmtzKCk7Ci0gICAgICAgICAgICBtV2lmaUNvbmZpZ1N0b3JlLmxvYWRDb25maWd1cmVkTmV0d29ya3MoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFNvZnRBcFN0YXJ0aW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGZpbmFsIE1lc3NhZ2UgbWVzc2FnZSA9IGdldEN1cnJlbnRNZXNzYWdlKCk7Ci0gICAgICAgICAgICBpZiAobWVzc2FnZS53aGF0ID09IENNRF9TVEFSVF9BUCkgewotICAgICAgICAgICAgICAgIGZpbmFsIFdpZmlDb25maWd1cmF0aW9uIGNvbmZpZyA9IChXaWZpQ29uZmlndXJhdGlvbikgbWVzc2FnZS5vYmo7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlBcENvbmZpZ0NoYW5uZWwuc2VuZE1lc3NhZ2UoQ01EX1JFUVVFU1RfQVBfQ09ORklHKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtV2lmaUFwQ29uZmlnQ2hhbm5lbC5zZW5kTWVzc2FnZShDTURfU0VUX0FQX0NPTkZJRywgY29uZmlnKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRTb2Z0QXBXaXRoQ29uZmlnKGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSWxsZWdhbCB0cmFuc2l0aW9uIHRvIFNvZnRBcFN0YXJ0aW5nU3RhdGU6ICIgKyBtZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1NVUFBMSUNBTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVA6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9BUDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX09QRVJBVElPTkFMX01PREU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0NPVU5UUllfQ09ERToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfRlJFUVVFTkNZX0JBTkQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfUEFDS0VUX0ZJTFRFUklORzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1BBQ0tFVF9GSUxURVJJTkc6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfVEVUSEVSX1NUQVRFX0NIQU5HRToKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX1JFU1BPTlNFX0FQX0NPTkZJRzoKLSAgICAgICAgICAgICAgICAgICAgV2lmaUNvbmZpZ3VyYXRpb24gY29uZmlnID0gKFdpZmlDb25maWd1cmF0aW9uKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFNvZnRBcFdpdGhDb25maWcoY29uZmlnKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIlNvZnRhcCBjb25maWcgaXMgbnVsbCEiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKENNRF9TVEFSVF9BUF9GQUlMVVJFKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9BUF9TVUNDRVNTOgotICAgICAgICAgICAgICAgICAgICBzZXRXaWZpQXBTdGF0ZShXSUZJX0FQX1NUQVRFX0VOQUJMRUQpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVNvZnRBcFN0YXJ0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0FQX0ZBSUxVUkU6Ci0gICAgICAgICAgICAgICAgICAgIHNldFdpZmlBcFN0YXRlKFdJRklfQVBfU1RBVEVfRkFJTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Jbml0aWFsU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFNvZnRBcFN0YXJ0ZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfQVA6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiU3RvcHBpbmcgU29mdCBBUCIpOwotICAgICAgICAgICAgICAgICAgICAvKiBXZSBoYXZlIG5vdCB0ZXRoZXJlZCBhdCB0aGlzIHBvaW50LCBzbyB3ZSBqdXN0IHNodXRkb3duIHNvZnQgQXAgKi8KLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Od1NlcnZpY2Uuc3RvcEFjY2Vzc1BvaW50KG1JbnRlcmZhY2VOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiRXhjZXB0aW9uIGluIHN0b3BBY2Nlc3NQb2ludCgpIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc2V0V2lmaUFwU3RhdGUoV0lGSV9BUF9TVEFURV9ESVNBQkxFRCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5pdGlhbFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVA6Ci0gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBhIHN0YXJ0IG9uIGEgcnVubmluZyBhY2Nlc3MgcG9pbnQKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEZhaWwgY2xpZW50IG1vZGUgb3BlcmF0aW9uIHdoZW4gc29mdCBBUCBpcyBlbmFibGVkICovCi0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiQ2Fubm90IHN0YXJ0IHN1cHBsaWNhbnQgd2l0aCBhIHJ1bm5pbmcgc29mdCBBUCIpOwotICAgICAgICAgICAgICAgICAgICBzZXRXaWZpU3RhdGUoV0lGSV9TVEFURV9VTktOT1dOKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfVEVUSEVSX1NUQVRFX0NIQU5HRToKLSAgICAgICAgICAgICAgICAgICAgVGV0aGVyU3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2UgPSAoVGV0aGVyU3RhdGVDaGFuZ2UpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRUZXRoZXJpbmcoc3RhdGVDaGFuZ2UuYXZhaWxhYmxlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1UZXRoZXJpbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBUZXRoZXJpbmdTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgLyogU2VuZCBvdXJzZWx2ZXMgYSBkZWxheWVkIG1lc3NhZ2UgdG8gc2h1dCBkb3duIGlmIHRldGhlcmluZyBmYWlscyB0byBub3RpZnkgKi8KLSAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChvYnRhaW5NZXNzYWdlKENNRF9URVRIRVJfTk9USUZJQ0FUSU9OX1RJTUVEX09VVCwKLSAgICAgICAgICAgICAgICAgICAgKyttVGV0aGVyVG9rZW4sIDApLCBURVRIRVJfTk9USUZJQ0FUSU9OX1RJTUVfT1VUX01TRUNTKTsKLSAgICAgICAgfQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfVEVUSEVSX1NUQVRFX0NIQU5HRToKLSAgICAgICAgICAgICAgICAgICAgVGV0aGVyU3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2UgPSAoVGV0aGVyU3RhdGVDaGFuZ2UpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNXaWZpVGV0aGVyZWQoc3RhdGVDaGFuZ2UuYWN0aXZlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1UZXRoZXJlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9URVRIRVJfTk9USUZJQ0FUSU9OX1RJTUVEX09VVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJnMSA9PSBtVGV0aGVyVG9rZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBnZXQgdGV0aGVyIHVwZGF0ZSwgc2h1dGRvd24gc29mdCBhY2Nlc3MgcG9pbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtU29mdEFwU3RhcnRlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWRzIHRvIGJlIGZpcnN0IHRoaW5nIGhhbmRsZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlQXRGcm9udE9mUXVldWUoQ01EX1NUT1BfQVApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1NVUFBMSUNBTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9TVVBQTElDQU5UOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX0FQOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfQVA6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfRFJJVkVSOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9PUEVSQVRJT05BTF9NT0RFOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NFVF9DT1VOVFJZX0NPREU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0ZSRVFVRU5DWV9CQU5EOgotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUQVJUX1BBQ0tFVF9GSUxURVJJTkc6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9QQUNLRVRfRklMVEVSSU5HOgotICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgVGV0aGVyZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgc3dpdGNoKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1RFVEhFUl9TVEFURV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIFRldGhlclN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlID0gKFRldGhlclN0YXRlQ2hhbmdlKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1dpZmlUZXRoZXJlZChzdGF0ZUNoYW5nZS5hY3RpdmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJUZXRoZXJpbmcgcmVwb3J0cyB3aWZpIGFzIHVudGV0aGVyZWQhLCBzaHV0IGRvd24gc29mdCBBcCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9zdEFwUnVubmluZyhudWxsLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRIb3N0QXBSdW5uaW5nKG51bGwsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICAgICAgICAgIGNhc2UgQ01EX1NUT1BfQVA6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZygiVW50ZXRoZXJpbmcgYmVmb3JlIHN0b3BwaW5nIEFQIik7Ci0gICAgICAgICAgICAgICAgICAgIHNldFdpZmlBcFN0YXRlKFdJRklfQVBfU1RBVEVfRElTQUJMSU5HKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcFRldGhlcmluZygpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVVudGV0aGVyaW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAvLyBNb3JlIHdvcmsgdG8gZG8gYWZ0ZXIgdW50ZXRoZXJpbmcKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFVudGV0aGVyaW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIC8qIFNlbmQgb3Vyc2VsdmVzIGEgZGVsYXllZCBtZXNzYWdlIHRvIHNodXQgZG93biBpZiB0ZXRoZXJpbmcgZmFpbHMgdG8gbm90aWZ5ICovCi0gICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShDTURfVEVUSEVSX05PVElGSUNBVElPTl9USU1FRF9PVVQsCi0gICAgICAgICAgICAgICAgICAgICsrbVRldGhlclRva2VuLCAwKSwgVEVUSEVSX05PVElGSUNBVElPTl9USU1FX09VVF9NU0VDUyk7Ci0KLSAgICAgICAgfQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfVEVUSEVSX1NUQVRFX0NIQU5HRToKLSAgICAgICAgICAgICAgICAgICAgVGV0aGVyU3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2UgPSAoVGV0aGVyU3RhdGVDaGFuZ2UpIG1lc3NhZ2Uub2JqOwotCi0gICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgdGlsbCB3aWZpIGlzIHVudGV0aGVyZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzV2lmaVRldGhlcmVkKHN0YXRlQ2hhbmdlLmFjdGl2ZSkpIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtU29mdEFwU3RhcnRlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfVEVUSEVSX05PVElGSUNBVElPTl9USU1FRF9PVVQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gbVRldGhlclRva2VuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGYWlsZWQgdG8gZ2V0IHRldGhlciB1cGRhdGUsIGZvcmNlIHN0b3AgYWNjZXNzIHBvaW50Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVNvZnRBcFN0YXJ0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfU1VQUExJQ0FOVDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1NVUFBMSUNBTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfQVA6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9BUDoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVEFSVF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RPUF9EUklWRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX09QRVJBVElPTkFMX01PREU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU0VUX0NPVU5UUllfQ09ERToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TRVRfRlJFUVVFTkNZX0JBTkQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDTURfU1RBUlRfUEFDS0VUX0ZJTFRFUklORzoKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9TVE9QX1BBQ0tFVF9GSUxURVJJTkc6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvL1N0YXRlIG1hY2hpbmUgaW5pdGlhdGVkIHJlcXVlc3RzIGNhbiBoYXZlIHJlcGx5VG8gc2V0IHRvIG51bGwgaW5kaWNhdGluZwotICAgIC8vdGhlcmUgYXJlIG5vIHJlY2VwaWVudHMsIHdlIGlnbm9yZSB0aG9zZSByZXBseSBhY3Rpb25zCi0gICAgcHJpdmF0ZSB2b2lkIHJlcGx5VG9NZXNzYWdlKE1lc3NhZ2UgbXNnLCBpbnQgd2hhdCkgewotICAgICAgICBpZiAobXNnLnJlcGx5VG8gPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICBNZXNzYWdlIGRzdE1zZyA9IG9idGFpbk1lc3NhZ2VXaXRoQXJnMihtc2cpOwotICAgICAgICBkc3RNc2cud2hhdCA9IHdoYXQ7Ci0gICAgICAgIG1SZXBseUNoYW5uZWwucmVwbHlUb01lc3NhZ2UobXNnLCBkc3RNc2cpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCByZXBseVRvTWVzc2FnZShNZXNzYWdlIG1zZywgaW50IHdoYXQsIGludCBhcmcxKSB7Ci0gICAgICAgIGlmIChtc2cucmVwbHlUbyA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgIE1lc3NhZ2UgZHN0TXNnID0gb2J0YWluTWVzc2FnZVdpdGhBcmcyKG1zZyk7Ci0gICAgICAgIGRzdE1zZy53aGF0ID0gd2hhdDsKLSAgICAgICAgZHN0TXNnLmFyZzEgPSBhcmcxOwotICAgICAgICBtUmVwbHlDaGFubmVsLnJlcGx5VG9NZXNzYWdlKG1zZywgZHN0TXNnKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVwbHlUb01lc3NhZ2UoTWVzc2FnZSBtc2csIGludCB3aGF0LCBPYmplY3Qgb2JqKSB7Ci0gICAgICAgIGlmIChtc2cucmVwbHlUbyA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgIE1lc3NhZ2UgZHN0TXNnID0gb2J0YWluTWVzc2FnZVdpdGhBcmcyKG1zZyk7Ci0gICAgICAgIGRzdE1zZy53aGF0ID0gd2hhdDsKLSAgICAgICAgZHN0TXNnLm9iaiA9IG9iajsKLSAgICAgICAgbVJlcGx5Q2hhbm5lbC5yZXBseVRvTWVzc2FnZShtc2csIGRzdE1zZyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogYXJnMiBvbiB0aGUgc291cmNlIG1lc3NhZ2UgaGFzIGEgdW5pcXVlIGlkIHRoYXQgbmVlZHMgdG8gYmUgcmV0YWluZWQgaW4gcmVwbGllcwotICAgICAqIHRvIG1hdGNoIHRoZSByZXF1ZXN0Ci0KLSAgICAgKiBzZWUgV2lmaU1hbmFnZXIgZm9yIGRldGFpbHMKLSAgICAgKi8KLSAgICBwcml2YXRlIE1lc3NhZ2Ugb2J0YWluTWVzc2FnZVdpdGhBcmcyKE1lc3NhZ2Ugc3JjTXNnKSB7Ci0gICAgICAgIE1lc3NhZ2UgbXNnID0gTWVzc2FnZS5vYnRhaW4oKTsKLSAgICAgICAgbXNnLmFyZzIgPSBzcmNNc2cuYXJnMjsKLSAgICAgICAgcmV0dXJuIG1zZzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpU3RhdGVUcmFja2VyLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpU3RhdGVUcmFja2VyLmphdmEKaW5kZXggNjE1Yzg5My4uN2RlZDE3MSAxMDA2NDQKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaVN0YXRlVHJhY2tlci5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlTdGF0ZVRyYWNrZXIuamF2YQpAQCAtMTE1LDE0ICsxMTUsNiBAQAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBDYXB0aXZlIGNoZWNrIGlzIGNvbXBsZXRlLCBzd2l0Y2ggdG8gbmV0d29yawotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNhcHRpdmVQb3J0YWxDaGVja0NvbXBsZXRlKCkgewotICAgICAgICBtV2lmaU1hbmFnZXIuY2FwdGl2ZVBvcnRhbENoZWNrQ29tcGxldGUoKTsKLSAgICB9Ci0KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBjYXB0aXZlUG9ydGFsQ2hlY2tDb21wbGV0ZWQoYm9vbGVhbiBpc0NhcHRpdmVQb3J0YWwpIHsKICAgICAgICAgLy8gbm90IGltcGxlbWVudGVkCmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mjc4Yzg5Li4wMDAwMDAwCi0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLm5ldC53aWZpOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ29udGVudE9ic2VydmVyOwotaW1wb3J0IGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTGlua1Byb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya0luZm87Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5Sc3NpUGFja2V0Q291bnRJbmZvOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5TZWN1cmU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTHJ1Q2FjaGU7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuQXN5bmNDaGFubmVsOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJvdG9jb2w7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlN0YXRlTWFjaGluZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdDsKLQotLyoqCi0gKiBXaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUgbW9uaXRvcnMgdGhlIGNvbm5lY3Rpb24gdG8gYSBXaUZpIG5ldHdvcmsuIFdoZW4gV2lGaQotICogY29ubmVjdHMgYXQgTDIgbGF5ZXIsIHRoZSBiZWFjb25zIGZyb20gYWNjZXNzIHBvaW50IHJlYWNoIHRoZSBkZXZpY2UgYW5kIGl0Ci0gKiBjYW4gbWFpbnRhaW4gYSBjb25uZWN0aW9uLCBidXQgdGhlIGFwcGxpY2F0aW9uIGNvbm5lY3Rpdml0eSBjYW4gYmUgZmxha3kgKGR1ZQotICogdG8gYmlnZ2VyIHBhY2tldCBzaXplIGV4Y2hhbmdlKS4KLSAqIDxwPgotICogV2Ugbm93IG1vbml0b3IgdGhlIHF1YWxpdHkgb2YgdGhlIGxhc3QgaG9wIG9uIFdpRmkgdXNpbmcgcGFja2V0IGxvc3MgcmF0aW8gYXMKLSAqIGFuIGluZGljYXRvciB0byBkZWNpZGUgaWYgdGhlIGxpbmsgaXMgZ29vZCBlbm91Z2ggdG8gc3dpdGNoIHRvIFdpLUZpIGFzIHRoZQotICogdXBsaW5rLgotICogPHA+Ci0gKiBXaGVuIFdpRmkgaXMgY29ubmVjdGVkLCB0aGUgV2lGaSB3YXRjaGRvZyBrZWVwcyBzYW1wbGluZyB0aGUgUlNTSSBhbmQgdGhlCi0gKiBpbnN0YW50IHBhY2tldCBsb3NzLCBhbmQgcmVjb3JkIGl0IGFzIHBlci1BUCBsb3NzLXRvLXJzc2kgc3RhdGlzdGljcy4gV2hlbgotICogdGhlIGluc3RhbnQgcGFja2V0IGxvc3MgaXMgaGlnaGVyIHRoYW4gYSB0aHJlc2hvbGQsIHRoZSBXaUZpIHdhdGNoZG9nIHNlbmRzIGEKLSAqIHBvb3IgbGluayBub3RpZmljYXRpb24gdG8gYXZvaWQgV2lGaSBjb25uZWN0aW9uIHRlbXBvcmFyaWx5LgotICogPHA+Ci0gKiBXaGlsZSBXaUZpIGlzIGJlaW5nIGF2b2lkZWQsIHRoZSBXaUZpIHdhdGNoZG9nIGtlZXAgd2F0Y2hpbmcgdGhlIFJTU0kgdG8KLSAqIGJyaW5nIHRoZSBXaUZpIGNvbm5lY3Rpb24gYmFjay4gT25jZSB0aGUgUlNTSSBpcyBoaWdoIGVub3VnaCB0byBhY2hpZXZlIGEKLSAqIGxvd2VyIHBhY2tldCBsb3NzLCBhIGdvb2QgbGluayBkZXRlY3Rpb24gaXMgc2VudCBzdWNoIHRoYXQgdGhlIFdpRmkKLSAqIGNvbm5lY3Rpb24gYmVjb21lIGF2YWlsYWJsZSBhZ2Fpbi4KLSAqIDxwPgotICogQlNTSUQgcm9hbWluZyBoYXMgYmVlbiB0YWtlbiBpbnRvIGFjY291bnQuIFdoZW4gdXNlciBpcyBtb3ZpbmcgYWNyb3NzCi0gKiBtdWx0aXBsZSBBUHMsIHRoZSBXaUZpIHdhdGNoZG9nIHdpbGwgZGV0ZWN0IHRoYXQgYW5kIGtlZXAgd2F0Y2hpbmcgdGhlCi0gKiBjdXJyZW50bHkgY29ubmVjdGVkIEFQLgotICogPHA+Ci0gKiBQb3dlciBpbXBhY3Qgc2hvdWxkIGJlIG1pbmltYWwgc2luY2UgbXVjaCBvZiB0aGUgbWVhc3VyZW1lbnQgcmVsaWVzIG9uCi0gKiBwYXNzaXZlIHN0YXRpc3RpY3MgYWxyZWFkeSBiZWluZyB0cmFja2VkIGF0IHRoZSBkcml2ZXIgYW5kIHRoZSBwb2xsaW5nIGlzCi0gKiBkb25lIHdoZW4gc2NyZWVuIGlzIHR1cm5lZCBvbiBhbmQgdGhlIFJTU0kgaXMgaW4gYSBjZXJ0YWluIHJhbmdlLgotICoKLSAqIEBoaWRlCi0gKi8KLXB1YmxpYyBjbGFzcyBXaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUgZXh0ZW5kcyBTdGF0ZU1hY2hpbmUgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBEQkcgPSBmYWxzZTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCQVNFID0gUHJvdG9jb2wuQkFTRV9XSUZJX1dBVENIRE9HOwotCi0gICAgLyogSW50ZXJuYWwgZXZlbnRzICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1dBVENIRE9HX1RPR0dMRUQgICAgICAgICAgICAgICAgID0gQkFTRSArIDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX05FVFdPUktfU1RBVEVfQ0hBTkdFICAgICAgICAgICAgID0gQkFTRSArIDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1JTU0lfQ0hBTkdFICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1NVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFICAgICAgICAgID0gQkFTRSArIDQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1dJRklfUkFESU9fU1RBVEVfQ0hBTkdFICAgICAgICAgID0gQkFTRSArIDU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1dBVENIRE9HX1NFVFRJTkdTX0NIQU5HRSAgICAgICAgID0gQkFTRSArIDY7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX0JTU0lEX0NIQU5HRSAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDc7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1NDUkVFTl9PTiAgICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDg7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1NDUkVFTl9PRkYgICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDk7Ci0KLSAgICAvKiBJbnRlcm5hbCBtZXNzYWdlcyAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDTURfUlNTSV9GRVRDSCAgICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAxMTsKLQotICAgIC8qIE5vdGlmaWNhdGlvbnMgZnJvbS90byBXaWZpU3RhdGVNYWNoaW5lICovCi0gICAgc3RhdGljIGZpbmFsIGludCBQT09SX0xJTktfREVURUNURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gQkFTRSArIDIxOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgR09PRF9MSU5LX0RFVEVDVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEJBU0UgKyAyMjsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX1BPT1JfTkVUV09SS19BVk9JREFOQ0VfRU5BQkxFRCA9IGZhbHNlOwotCi0gICAgLyoKLSAgICAgKiBSU1NJIGxldmVscyBhcyB1c2VkIGJ5IG5vdGlmaWNhdGlvbiBpY29uCi0gICAgICogTGV2ZWwgNCAgLTU1IDw9IFJTU0kKLSAgICAgKiBMZXZlbCAzICAtNjYgPD0gUlNTSSA8IC01NQotICAgICAqIExldmVsIDIgIC03NyA8PSBSU1NJIDwgLTY3Ci0gICAgICogTGV2ZWwgMSAgLTg4IDw9IFJTU0kgPCAtNzgKLSAgICAgKiBMZXZlbCAwICAgICAgICAgUlNTSSA8IC04OAotICAgICAqLwotCi0gICAgLyoqCi0gICAgICogV2lGaSBsaW5rIHN0YXRpc3RpY3MgaXMgbW9uaXRvcmVkIGFuZCByZWNvcmRlZCBhY3RpdmVseSBiZWxvdyB0aGlzIHRocmVzaG9sZC4KLSAgICAgKiA8cD4KLSAgICAgKiBMYXJnZXIgdGhyZXNob2xkIGlzIG1vcmUgYWRhcHRpdmUgYnV0IGluY3JlYXNlcyBzYW1wbGluZyBjb3N0LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU5LX01PTklUT1JfTEVWRUxfVEhSRVNIT0xEID0gV2lmaU1hbmFnZXIuUlNTSV9MRVZFTFMgLSAxOwotCi0gICAgLyoqCi0gICAgICogUmVtZW1iZXIgcGFja2V0IGxvc3Mgc3RhdGlzdGljcyBvZiBob3cgbWFueSBCU1NJRHMuCi0gICAgICogPHA+Ci0gICAgICogTGFyZ2VyIHNpemUgaXMgdXN1YWxseSBiZXR0ZXIgYnV0IHJlcXVpcmVzIG1vcmUgc3BhY2UuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJTU0lEX1NUQVRfQ0FDSEVfU0laRSA9IDIwOwotCi0gICAgLyoqCi0gICAgICogUlNTSSByYW5nZSBvZiBhIEJTU0lEIHN0YXRpc3RpY3MuCi0gICAgICogV2l0aGluIHRoZSByYW5nZSwgKFJTU0kgLT4gcGFja2V0IGxvc3MgJSkgbWFwcGluZ3MgYXJlIHN0b3JlZC4KLSAgICAgKiA8cD4KLSAgICAgKiBMYXJnZXIgcmFuZ2UgaXMgdXN1YWxseSBiZXR0ZXIgYnV0IHJlcXVpcmVzIG1vcmUgc3BhY2UuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJTU0lEX1NUQVRfUkFOR0VfTE9XX0RCTSAgPSAtMTA1OwotCi0gICAgLyoqCi0gICAgICogU2VlIHtAbGluayAjQlNTSURfU1RBVF9SQU5HRV9MT1dfREJNfS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlNTSURfU1RBVF9SQU5HRV9ISUdIX0RCTSA9IC00NTsKLQotICAgIC8qKgotICAgICAqIEhvdyBtYW55IGNvbnNlY3V0aXZlIGVtcHR5IGRhdGEgcG9pbnQgdG8gdHJpZ2dlciBhIGVtcHR5LWNhY2hlIGRldGVjdGlvbi4KLSAgICAgKiBJbiB0aGlzIGNhc2UsIGEgcHJlc2V0L2RlZmF1bHQgbG9zcyB2YWx1ZSAoZnVuY3Rpb24gb24gUlNTSSkgaXMgdXNlZC4KLSAgICAgKiA8cD4KLSAgICAgKiBJbiBub3JtYWwgdXNlcywgc29tZSBSU1NJIHZhbHVlcyBtYXkgbmV2ZXIgYmUgc2VlbiBkdWUgdG8gY2hhbm5lbCByYW5kb21uZXNzLgotICAgICAqIEhvd2V2ZXIsIHRoZSBzaXplIG9mIHN1Y2ggZW1wdHkgUlNTSSBjaHVuayBpbiBub3JtYWwgdXNlIGlzIGdlbmVyYWxseSAxfjIuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJTU0lEX1NUQVRfRU1QVFlfQ09VTlQgPSAzOwotCi0gICAgLyoqCi0gICAgICogU2FtcGxlIGludGVydmFsIGZvciBwYWNrZXQgbG9zcyBzdGF0aXN0aWNzLCBpbiBtc2VjLgotICAgICAqIDxwPgotICAgICAqIFNtYWxsZXIgaW50ZXJ2YWwgaXMgbW9yZSBhY2N1cmF0ZSBidXQgaW5jcmVhc2VzIHNhbXBsaW5nIGNvc3QgKGJhdHRlcnkgY29uc3VtcHRpb24pLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgTElOS19TQU1QTElOR19JTlRFUlZBTF9NUyA9IDEgKiAxMDAwOwotCi0gICAgLyoqCi0gICAgICogQ29lZmZpY2llbnRzIChhbHBoYSkgZm9yIG1vdmluZyBhdmVyYWdlIGZvciBwYWNrZXQgbG9zcyB0cmFja2luZy4KLSAgICAgKiBNdXN0IGJlIHdpdGhpbiAoMC4wLCAxLjApLgotICAgICAqIDxwPgotICAgICAqIEVxdWl2YWxlbnQgbnVtYmVyIG9mIHNhbXBsZXM6IE4gPSAyIC8gYWxwaGEgLSAxIC4KLSAgICAgKiBXZSB3YW50IHRoZSBoaXN0b3JpYyBsb3NzIHRvIGJhc2Ugb24gbW9yZSBkYXRhIHBvaW50cyB0byBiZSBzdGF0aXN0aWNhbGx5IHJlbGlhYmxlLgotICAgICAqIFdlIHdhbnQgdGhlIGN1cnJlbnQgaW5zdGFudCBsb3NzIHRvIGJhc2Ugb24gbGVzcyBkYXRhIHBvaW50cyB0byBiZSByZXNwb25zaXZlLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBFWFBfQ09FRkZJQ0lFTlRfUkVDT1JEICA9IDAuMTsKLQotICAgIC8qKgotICAgICAqIFNlZSB7QGxpbmsgI0VYUF9DT0VGRklDSUVOVF9SRUNPUkR9LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBFWFBfQ09FRkZJQ0lFTlRfTU9OSVRPUiA9IDAuNTsKLQotICAgIC8qKgotICAgICAqIFRocmVzaG9sZHMgZm9yIHNlbmRpbmcgZ29vZC9wb29yIGxpbmsgbm90aWZpY2F0aW9ucywgaW4gcGFja2V0IGxvc3MgJS4KLSAgICAgKiBHb29kIHRocmVzaG9sZCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBwb29yIHRocmVzaG9sZC4KLSAgICAgKiBVc2Ugc21hbGxlciBwb29yIHRocmVzaG9sZCB0byBhdm9pZCBXaUZpIG1vcmUgYWdncmVzc2l2ZWx5LgotICAgICAqIFVzZSBzbWFsbGVyIGdvb2QgdGhyZXNob2xkIHRvIGJyaW5nIGJhY2sgV2lGaSBtb3JlIGNvbnNlcnZhdGl2ZWx5LgotICAgICAqIDxwPgotICAgICAqIFdoZW4gYXBwcm9hY2hpbmcgdGhlIGJvdW5kYXJ5LCBsb3NzIHJhdGlvIGp1bXBzIHNpZ25pZmljYW50bHkgd2l0aGluIGEgZmV3IGRCcy4KLSAgICAgKiA1MCUgbG9zcyB0aHJlc2hvbGQgaXMgYSBnb29kIGJhbGFuY2UgYmV0d2VlbiBhY2N1cmFjeSBhbmQgcmVwb25zaXZlbmVzcy4KLSAgICAgKiA8PTEwJSBnb29kIHRocmVzaG9sZCBpcyBhIHNhZmUgdmFsdWUgdG8gYXZvaWQganVtcGluZyBiYWNrIHRvIFdpRmkgdG9vIGVhc2lseS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgUE9PUl9MSU5LX0xPU1NfVEhSRVNIT0xEID0gMC41OwotCi0gICAgLyoqCi0gICAgICogU2VlIHtAbGluayAjUE9PUl9MSU5LX0xPU1NfVEhSRVNIT0xEfS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgR09PRF9MSU5LX0xPU1NfVEhSRVNIT0xEID0gMC4xOwotCi0gICAgLyoqCi0gICAgICogTnVtYmVyIG9mIHNhbXBsZXMgdG8gY29uZmlybSBiZWZvcmUgc2VuZGluZyBhIHBvb3IgbGluayBub3RpZmljYXRpb24uCi0gICAgICogUmVzcG9uc2UgdGltZSA9IGNvbmZpcm1fY291bnQgKiBzYW1wbGVfaW50ZXJ2YWwgLgotICAgICAqIDxwPgotICAgICAqIEEgc21hbGxlciB0aHJlc2hvbGQgaW1wcm92ZXMgcmVzcG9uc2Ugc3BlZWQgYnV0IG1heSBzdWZmZXIgZnJvbSByYW5kb21uZXNzLgotICAgICAqIEFjY29yZGluZyB0byBleHBlcmltZW50cywgM341IGFyZSBnb29kIHZhbHVlcyB0byBhY2hpZXZlIGEgYmFsYW5jZS4KLSAgICAgKiBUaGVzZSBwYXJhbWV0ZXJzIHNob3VsZCBiZSB0dW5lZCBhbG9uZyB3aXRoIHtAbGluayAjTElOS19TQU1QTElOR19JTlRFUlZBTF9NU30uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBPT1JfTElOS19TQU1QTEVfQ09VTlQgPSAzOwotCi0gICAgLyoqCi0gICAgICogTWluaW11bSB2b2x1bWUgKGNvbnZlcnRlZCBmcm9tIHBrdC9zZWMpIHRvIGRldGVjdCBhIHBvb3IgbGluaywgdG8gYXZvaWQgcmFuZG9tbmVzcy4KLSAgICAgKiA8cD4KLSAgICAgKiBBY2NvcmRpbmcgdG8gZXhwZXJpbWVudHMsIDFwa3Qvc2VjIGlzIHRvbyBzZW5zaXRpdmUgYnV0IDNwa3Qvc2VjIGlzIHNsaWdodGx5IHVucmVzcG9uc2l2ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgUE9PUl9MSU5LX01JTl9WT0xVTUUgPSAyLjAgKiBMSU5LX1NBTVBMSU5HX0lOVEVSVkFMX01TIC8gMTAwMC4wOwotCi0gICAgLyoqCi0gICAgICogV2hlbiBhIHBvb3IgbGluayBpcyBkZXRlY3RlZCwgd2Ugc2NhbiBvdmVyIHRoaXMgcmFuZ2UgKGJhc2VkIG9uIGN1cnJlbnQKLSAgICAgKiBwb29yIGxpbmsgUlNTSSkgZm9yIGEgdGFyZ2V0IFJTU0kgdGhhdCBzYXRpc2ZpZXMgYSB0YXJnZXQgcGFja2V0IGxvc3MuCi0gICAgICogUmVmZXIgdG8ge0BsaW5rICNHT09EX0xJTktfVEFSR0VUfS4KLSAgICAgKiA8cD4KLSAgICAgKiBXZSB3YW50IHJhbmdlX21pbiBub3QgdG9vIHNtYWxsIHRvIGF2b2lkIGp1bXBpbmcgYmFjayB0byBXaUZpIHRvbyBlYXNpbHkuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEdPT0RfTElOS19SU1NJX1JBTkdFX01JTiA9IDM7Ci0KLSAgICAvKioKLSAgICAgKiBTZWUge0BsaW5rICNHT09EX0xJTktfUlNTSV9SQU5HRV9NSU59LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBHT09EX0xJTktfUlNTSV9SQU5HRV9NQVggPSAyMDsKLQotICAgIC8qKgotICAgICAqIEFkYXB0aXZlIGdvb2QgbGluayB0YXJnZXQgdG8gYXZvaWQgZmxhcHBpbmcuCi0gICAgICogV2hlbiBhIHBvb3IgbGluayBpcyBkZXRlY3RlZCwgYSBnb29kIGxpbmsgdGFyZ2V0IGlzIGNhbGN1bGF0ZWQgYXMgZm9sbG93czoKLSAgICAgKiA8cD4KLSAgICAgKiAgICAgIHRhcmdldFJTU0kgPSBtaW4geyByc3NpIHwgbG9zcyhyc3NpKSA8IEdPT0RfTElOS19MT1NTX1RIUkVTSE9MRCB9ICsgcnNzaV9hZGpbaV0sCi0gICAgICogICAgICAgICAgICAgICAgICAgd2hlcmUgcnNzaSBpcyB3aXRoaW4gdGhlIGFib3ZlIEdPT0RfTElOS19SU1NJX1JBTkdFLgotICAgICAqICAgICAgdGFyZ2V0Q291bnQgPSBzYW1wbGVfY291bnRbaV0gLgotICAgICAqIDxwPgotICAgICAqIFdoaWxlIFdpRmkgaXMgYmVpbmcgYXZvaWRlZCwgd2Uga2VlcCBtb25pdG9yaW5nIGl0cyBzaWduYWwgc3RyZW5ndGguCi0gICAgICogR29vZCBsaW5rIG5vdGlmaWNhdGlvbiBpcyBzZW50IHdoZW4gd2Ugc2VlIGN1cnJlbnQgUlNTSSA+PSB0YXJnZXRSU1NJCi0gICAgICogZm9yIHRhcmdldENvdW50IGNvbnNlY3V0aXZlIHRpbWVzLgotICAgICAqIDxwPgotICAgICAqIEluZGV4IGkgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGFmdGVyIGEgcG9vciBsaW5rIGRldGVjdGlvbi4KLSAgICAgKiBJbmRleCBpIGlzIGRlY3JlYXNlZCB0byBhdCBtb3N0IGsgaWYgdGhlIGxhc3QgcG9vciBsaW5rIHdhcyBhdCBsZWFzZSByZWR1Y2VfdGltZVtrXSBhZ28uCi0gICAgICogPHA+Ci0gICAgICogSW50dWl0aXZlbHksIGxhcmdlciBpbmRleCBpIG1ha2VzIGl0IG1vcmUgZGlmZmljdWx0IHRvIGdldCBiYWNrIHRvIFdpRmksIGF2b2lkaW5nIGZsYXBwaW5nLgotICAgICAqIEluIGV4cGVyaW1lbnRzLCAoKzkgZEIgLyAzMCBjb3VudHMpIG1ha2VzIGl0IHF1aXRlIGRpZmZpY3VsdCB0byBhY2hpZXZlLgotICAgICAqIEF2b2lkIHVzaW5nIGl0IHVubGVzcyBmbGFwcGluZyBpcyByZWFsbHkgYmFkIChzYXksIGxhc3QgcG9vciBsaW5rIGlzIDwgMSBtaW4gYWdvKS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBHb29kTGlua1RhcmdldFtdIEdPT0RfTElOS19UQVJHRVQgPSB7Ci0gICAgICAgIC8qICAgICAgICAgICAgICAgICAgcnNzaV9hZGosICAgICAgIHNhbXBsZV9jb3VudCwgICByZWR1Y2VfdGltZSAqLwotICAgICAgICBuZXcgR29vZExpbmtUYXJnZXQoIDAsICAgICAgICAgICAgICAzLCAgICAgICAgICAgICAgMzAgKiA2MDAwMCAgICksCi0gICAgICAgIG5ldyBHb29kTGlua1RhcmdldCggMywgICAgICAgICAgICAgIDUsICAgICAgICAgICAgICA1ICAqIDYwMDAwICAgKSwKLSAgICAgICAgbmV3IEdvb2RMaW5rVGFyZ2V0KCA2LCAgICAgICAgICAgICAgMTAsICAgICAgICAgICAgIDEgICogNjAwMDAgICApLAotICAgICAgICBuZXcgR29vZExpbmtUYXJnZXQoIDksICAgICAgICAgICAgICAzMCwgICAgICAgICAgICAgMCAgKiA2MDAwMCAgICksCi0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFRoZSBtYXggdGltZSB0byBhdm9pZCBhIEJTU0lELCB0byBwcmV2ZW50IGF2b2lkaW5nIGZvcmV2ZXIuCi0gICAgICogSWYgY3VycmVudCBSU1NJIGlzIGF0IGxlYXN0IG1pbl9yc3NpW2ldLCB0aGUgbWF4IGF2b2lkYW5jZSB0aW1lIGlzIGF0IG1vc3QgbWF4X3RpbWVbaV0KLSAgICAgKiA8cD4KLSAgICAgKiBJdCBpcyB1bnVzdWFsIHRvIGV4cGVyaWVuY2UgaGlnaCBwYWNrZXQgbG9zcyBhdCBoaWdoIFJTU0kuIFNvbWV0aGluZyB1bnVzdWFsIG11c3QgYmUKLSAgICAgKiBoYXBwZW5pbmcgKGUuZy4gc3Ryb25nIGludGVyZmVyZW5jZSkuIEZvciBoaWdoZXIgc2lnbmFsIHN0cmVuZ3Rocywgd2Ugc2V0IHRoZSBhdm9pZGFuY2UKLSAgICAgKiB0aW1lIHRvIGJlIGxvdyB0byBhbGxvdyBmb3IgcXVpY2sgdHVybiBhcm91bmQgZnJvbSB0ZW1wb3JhcnkgaW50ZXJmZXJlbmNlLgotICAgICAqIDxwPgotICAgICAqIFNlZSB7QGxpbmsgQnNzaWRTdGF0aXN0aWNzI3Bvb3JMaW5rRGV0ZWN0ZWR9LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1heEF2b2lkVGltZVtdIE1BWF9BVk9JRF9USU1FID0gewotICAgICAgICAvKiAgICAgICAgICAgICAgICAgIG1heF90aW1lLCAgICAgICAgICAgbWluX3Jzc2kgKi8KLSAgICAgICAgbmV3IE1heEF2b2lkVGltZSggICAzMCAqIDYwMDAwLCAgICAgICAgIC0yMDAgICAgICApLAotICAgICAgICBuZXcgTWF4QXZvaWRUaW1lKCAgIDUgICogNjAwMDAsICAgICAgICAgLTcwICAgICAgICksCi0gICAgICAgIG5ldyBNYXhBdm9pZFRpbWUoICAgMCAgKiA2MDAwMCwgICAgICAgICAtNTUgICAgICAgKSwKLSAgICB9OwotCi0gICAgLyogRnJhbWV3b3JrIHJlbGF0ZWQgKi8KLSAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7Ci0gICAgcHJpdmF0ZSBDb250ZW50UmVzb2x2ZXIgbUNvbnRlbnRSZXNvbHZlcjsKLSAgICBwcml2YXRlIFdpZmlNYW5hZ2VyIG1XaWZpTWFuYWdlcjsKLSAgICBwcml2YXRlIEludGVudEZpbHRlciBtSW50ZW50RmlsdGVyOwotICAgIHByaXZhdGUgQnJvYWRjYXN0UmVjZWl2ZXIgbUJyb2FkY2FzdFJlY2VpdmVyOwotICAgIHByaXZhdGUgQXN5bmNDaGFubmVsIG1Xc21DaGFubmVsID0gbmV3IEFzeW5jQ2hhbm5lbCgpOwotICAgIHByaXZhdGUgV2lmaUluZm8gbVdpZmlJbmZvOwotICAgIHByaXZhdGUgTGlua1Byb3BlcnRpZXMgbUxpbmtQcm9wZXJ0aWVzOwotCi0gICAgLyogU3lzdGVtIHNldHRpbmdzcyByZWxhdGVkICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBzV2lmaU9ubHkgPSBmYWxzZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbVBvb3JOZXR3b3JrRGV0ZWN0aW9uRW5hYmxlZDsKLQotICAgIC8qIFBvb3IgbGluayBkZXRlY3Rpb24gcmVsYXRlZCAqLwotICAgIHByaXZhdGUgTHJ1Q2FjaGU8U3RyaW5nLCBCc3NpZFN0YXRpc3RpY3M+IG1Cc3NpZENhY2hlID0KLSAgICAgICAgICAgIG5ldyBMcnVDYWNoZTxTdHJpbmcsIEJzc2lkU3RhdGlzdGljcz4oQlNTSURfU1RBVF9DQUNIRV9TSVpFKTsKLSAgICBwcml2YXRlIGludCBtUnNzaUZldGNoVG9rZW4gPSAwOwotICAgIHByaXZhdGUgaW50IG1DdXJyZW50U2lnbmFsTGV2ZWw7Ci0gICAgcHJpdmF0ZSBCc3NpZFN0YXRpc3RpY3MgbUN1cnJlbnRCc3NpZDsKLSAgICBwcml2YXRlIFZvbHVtZVdlaWdodGVkRU1BIG1DdXJyZW50TG9zczsKLSAgICBwcml2YXRlIGJvb2xlYW4gbUlzU2NyZWVuT24gPSB0cnVlOwotICAgIHByaXZhdGUgc3RhdGljIGRvdWJsZSBzUHJlc2V0TG9zc1tdOwotCi0gICAgLyogV2lGaSB3YXRjaGRvZyBzdGF0ZSBtYWNoaW5lIHJlbGF0ZWQgKi8KLSAgICBwcml2YXRlIERlZmF1bHRTdGF0ZSBtRGVmYXVsdFN0YXRlID0gbmV3IERlZmF1bHRTdGF0ZSgpOwotICAgIHByaXZhdGUgV2F0Y2hkb2dEaXNhYmxlZFN0YXRlIG1XYXRjaGRvZ0Rpc2FibGVkU3RhdGUgPSBuZXcgV2F0Y2hkb2dEaXNhYmxlZFN0YXRlKCk7Ci0gICAgcHJpdmF0ZSBXYXRjaGRvZ0VuYWJsZWRTdGF0ZSBtV2F0Y2hkb2dFbmFibGVkU3RhdGUgPSBuZXcgV2F0Y2hkb2dFbmFibGVkU3RhdGUoKTsKLSAgICBwcml2YXRlIE5vdENvbm5lY3RlZFN0YXRlIG1Ob3RDb25uZWN0ZWRTdGF0ZSA9IG5ldyBOb3RDb25uZWN0ZWRTdGF0ZSgpOwotICAgIHByaXZhdGUgVmVyaWZ5aW5nTGlua1N0YXRlIG1WZXJpZnlpbmdMaW5rU3RhdGUgPSBuZXcgVmVyaWZ5aW5nTGlua1N0YXRlKCk7Ci0gICAgcHJpdmF0ZSBDb25uZWN0ZWRTdGF0ZSBtQ29ubmVjdGVkU3RhdGUgPSBuZXcgQ29ubmVjdGVkU3RhdGUoKTsKLSAgICBwcml2YXRlIE9ubGluZVdhdGNoU3RhdGUgbU9ubGluZVdhdGNoU3RhdGUgPSBuZXcgT25saW5lV2F0Y2hTdGF0ZSgpOwotICAgIHByaXZhdGUgTGlua01vbml0b3JpbmdTdGF0ZSBtTGlua01vbml0b3JpbmdTdGF0ZSA9IG5ldyBMaW5rTW9uaXRvcmluZ1N0YXRlKCk7Ci0gICAgcHJpdmF0ZSBPbmxpbmVTdGF0ZSBtT25saW5lU3RhdGUgPSBuZXcgT25saW5lU3RhdGUoKTsKLQotICAgIC8qKgotICAgICAqIFNUQVRFIE1BUAotICAgICAqICAgICAgICAgIERlZmF1bHQKLSAgICAgKiAgICAgICAgIC8gICAgICAgXAotICAgICAqIERpc2FibGVkICAgICAgRW5hYmxlZAotICAgICAqICAgICAgICAgICAgIC8gICAgIFwgICAgIFwKLSAgICAgKiBOb3RDb25uZWN0ZWQgIFZlcmlmeWluZyAgQ29ubmVjdGVkCi0gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgLy0tLS0tLS0tLVwKLSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgKGFsbCBvdGhlciBzdGF0ZXMpCi0gICAgICovCi0gICAgcHJpdmF0ZSBXaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKCJXaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUiKTsKLSAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtQ29udGVudFJlc29sdmVyID0gY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKLSAgICAgICAgbVdpZmlNYW5hZ2VyID0gKFdpZmlNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5XSUZJX1NFUlZJQ0UpOwotICAgICAgICBtV3NtQ2hhbm5lbC5jb25uZWN0U3luYyhtQ29udGV4dCwgZ2V0SGFuZGxlcigpLAotICAgICAgICAgICAgICAgIG1XaWZpTWFuYWdlci5nZXRXaWZpU3RhdGVNYWNoaW5lTWVzc2VuZ2VyKCkpOwotCi0gICAgICAgIHNldHVwTmV0d29ya1JlY2VpdmVyKCk7Ci0KLSAgICAgICAgLy8gdGhlIGNvbnRlbnQgb2JzZXJ2ZXIgdG8gbGlzdGVuIG5lZWRzIGEgaGFuZGxlcgotICAgICAgICByZWdpc3RlckZvclNldHRpbmdzQ2hhbmdlcygpOwotICAgICAgICByZWdpc3RlckZvcldhdGNoZG9nVG9nZ2xlKCk7Ci0gICAgICAgIGFkZFN0YXRlKG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgYWRkU3RhdGUobVdhdGNoZG9nRGlzYWJsZWRTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICBhZGRTdGF0ZShtV2F0Y2hkb2dFbmFibGVkU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1Ob3RDb25uZWN0ZWRTdGF0ZSwgbVdhdGNoZG9nRW5hYmxlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtVmVyaWZ5aW5nTGlua1N0YXRlLCBtV2F0Y2hkb2dFbmFibGVkU3RhdGUpOwotICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1Db25uZWN0ZWRTdGF0ZSwgbVdhdGNoZG9nRW5hYmxlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobU9ubGluZVdhdGNoU3RhdGUsIG1Db25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1MaW5rTW9uaXRvcmluZ1N0YXRlLCBtQ29ubmVjdGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtT25saW5lU3RhdGUsIG1Db25uZWN0ZWRTdGF0ZSk7Ci0KLSAgICAgICAgaWYgKGlzV2F0Y2hkb2dFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIHNldEluaXRpYWxTdGF0ZShtTm90Q29ubmVjdGVkU3RhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2V0SW5pdGlhbFN0YXRlKG1XYXRjaGRvZ0Rpc2FibGVkU3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIHNldExvZ1JlY1NpemUoMjUpOwotICAgICAgICBzZXRMb2dPbmx5VHJhbnNpdGlvbnModHJ1ZSk7Ci0gICAgICAgIHVwZGF0ZVNldHRpbmdzKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBXaWZpV2F0Y2hkb2dTdGF0ZU1hY2hpbmUgbWFrZVdpZmlXYXRjaGRvZ1N0YXRlTWFjaGluZShDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgQ29udGVudFJlc29sdmVyIGNvbnRlbnRSZXNvbHZlciA9IGNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCk7Ci0KLSAgICAgICAgQ29ubmVjdGl2aXR5TWFuYWdlciBjbSA9IChDb25uZWN0aXZpdHlNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCi0gICAgICAgICAgICAgICAgQ29udGV4dC5DT05ORUNUSVZJVFlfU0VSVklDRSk7Ci0gICAgICAgIHNXaWZpT25seSA9IChjbS5pc05ldHdvcmtTdXBwb3J0ZWQoQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX01PQklMRSkgPT0gZmFsc2UpOwotCi0gICAgICAgIC8vIFdhdGNoZG9nIGlzIGFsd2F5cyBlbmFibGVkLiBQb29yIG5ldHdvcmsgZGV0ZWN0aW9uIGNhbiBiZSBzZXBlcmF0ZWx5IHR1cm5lZCBvbi9vZmYKLSAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgc2V0dGluZyAmIGNsZWFuIHVwIHN0YXRlIG1hY2hpbmUgc2luY2Ugd2UgYWx3YXlzIGhhdmUKLSAgICAgICAgLy8gd2F0Y2hkb2cgaW4gYW4gZW5hYmxlZCBzdGF0ZQotICAgICAgICBwdXRTZXR0aW5nc0dsb2JhbEJvb2xlYW4oY29udGVudFJlc29sdmVyLCBTZXR0aW5ncy5HbG9iYWwuV0lGSV9XQVRDSERPR19PTiwgdHJ1ZSk7Ci0KLSAgICAgICAgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lIHd3c20gPSBuZXcgV2lmaVdhdGNoZG9nU3RhdGVNYWNoaW5lKGNvbnRleHQpOwotICAgICAgICB3d3NtLnN0YXJ0KCk7Ci0gICAgICAgIHJldHVybiB3d3NtOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXR1cE5ldHdvcmtSZWNlaXZlcigpIHsKLSAgICAgICAgbUJyb2FkY2FzdFJlY2VpdmVyID0gbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGFjdGlvbiA9IGludGVudC5nZXRBY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmVxdWFscyhXaWZpTWFuYWdlci5SU1NJX0NIQU5HRURfQUNUSU9OKSkgewotICAgICAgICAgICAgICAgICAgICBvYnRhaW5NZXNzYWdlKEVWRU5UX1JTU0lfQ0hBTkdFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudC5nZXRJbnRFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9ORVdfUlNTSSwgLTIwMCksIDApLnNlbmRUb1RhcmdldCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhXaWZpTWFuYWdlci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRURfQUNUSU9OKSkgewotICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShFVkVOVF9TVVBQTElDQU5UX1NUQVRFX0NIQU5HRSwgaW50ZW50KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoV2lmaU1hbmFnZXIuTkVUV09SS19TVEFURV9DSEFOR0VEX0FDVElPTikpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoRVZFTlRfTkVUV09SS19TVEFURV9DSEFOR0UsIGludGVudCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKEludGVudC5BQ1RJT05fU0NSRUVOX09OKSkgewotICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShFVkVOVF9TQ1JFRU5fT04pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhJbnRlbnQuQUNUSU9OX1NDUkVFTl9PRkYpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKEVWRU5UX1NDUkVFTl9PRkYpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhXaWZpTWFuYWdlci5XSUZJX1NUQVRFX0NIQU5HRURfQUNUSU9OKSkgewotICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShFVkVOVF9XSUZJX1JBRElPX1NUQVRFX0NIQU5HRSxpbnRlbnQuZ2V0SW50RXh0cmEoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuRVhUUkFfV0lGSV9TVEFURSwgV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9VTktOT1dOKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIG1JbnRlbnRGaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKCk7Ci0gICAgICAgIG1JbnRlbnRGaWx0ZXIuYWRkQWN0aW9uKFdpZmlNYW5hZ2VyLk5FVFdPUktfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pOwotICAgICAgICBtSW50ZW50RmlsdGVyLmFkZEFjdGlvbihXaWZpTWFuYWdlci5XSUZJX1NUQVRFX0NIQU5HRURfQUNUSU9OKTsKLSAgICAgICAgbUludGVudEZpbHRlci5hZGRBY3Rpb24oV2lmaU1hbmFnZXIuUlNTSV9DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIG1JbnRlbnRGaWx0ZXIuYWRkQWN0aW9uKFdpZmlNYW5hZ2VyLlNVUFBMSUNBTlRfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pOwotICAgICAgICBtSW50ZW50RmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX1NDUkVFTl9PTik7Ci0gICAgICAgIG1JbnRlbnRGaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fU0NSRUVOX09GRik7Ci0gICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIobUJyb2FkY2FzdFJlY2VpdmVyLCBtSW50ZW50RmlsdGVyKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPYnNlcnZlcyB0aGUgd2F0Y2hkb2cgb24vb2ZmIHNldHRpbmcsIGFuZCB0YWtlcyBhY3Rpb24gd2hlbiBjaGFuZ2VkLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCByZWdpc3RlckZvcldhdGNoZG9nVG9nZ2xlKCkgewotICAgICAgICBDb250ZW50T2JzZXJ2ZXIgY29udGVudE9ic2VydmVyID0gbmV3IENvbnRlbnRPYnNlcnZlcih0aGlzLmdldEhhbmRsZXIoKSkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZShib29sZWFuIHNlbGZDaGFuZ2UpIHsKLSAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShFVkVOVF9XQVRDSERPR19UT0dHTEVEKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKS5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcigKLSAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuZ2V0VXJpRm9yKFNldHRpbmdzLkdsb2JhbC5XSUZJX1dBVENIRE9HX09OKSwKLSAgICAgICAgICAgICAgICBmYWxzZSwgY29udGVudE9ic2VydmVyKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPYnNlcnZlcyB3YXRjaGRvZ3Mgc2VjdXJlIHNldHRpbmcgY2hhbmdlcy4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcmVnaXN0ZXJGb3JTZXR0aW5nc0NoYW5nZXMoKSB7Ci0gICAgICAgIENvbnRlbnRPYnNlcnZlciBjb250ZW50T2JzZXJ2ZXIgPSBuZXcgQ29udGVudE9ic2VydmVyKHRoaXMuZ2V0SGFuZGxlcigpKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hhbmdlKGJvb2xlYW4gc2VsZkNoYW5nZSkgewotICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKEVWRU5UX1dBVENIRE9HX1NFVFRJTkdTX0NIQU5HRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgbUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCkucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLmdldFVyaUZvcihTZXR0aW5ncy5HbG9iYWwuV0lGSV9XQVRDSERPR19QT09SX05FVFdPUktfVEVTVF9FTkFCTEVEKSwKLSAgICAgICAgICAgICAgICBmYWxzZSwgY29udGVudE9ic2VydmVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkdW1wKEZpbGVEZXNjcmlwdG9yIGZkLCBQcmludFdyaXRlciBwdywgU3RyaW5nW10gYXJncykgewotICAgICAgICBzdXBlci5kdW1wKGZkLCBwdywgYXJncyk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1XaWZpSW5mbzogWyIgKyBtV2lmaUluZm8gKyAiXSIpOwotICAgICAgICBwdy5wcmludGxuKCJtTGlua1Byb3BlcnRpZXM6IFsiICsgbUxpbmtQcm9wZXJ0aWVzICsgIl0iKTsKLSAgICAgICAgcHcucHJpbnRsbigibUN1cnJlbnRTaWduYWxMZXZlbDogWyIgKyBtQ3VycmVudFNpZ25hbExldmVsICsgIl0iKTsKLSAgICAgICAgcHcucHJpbnRsbigibVBvb3JOZXR3b3JrRGV0ZWN0aW9uRW5hYmxlZDogWyIgKyBtUG9vck5ldHdvcmtEZXRlY3Rpb25FbmFibGVkICsgIl0iKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNXYXRjaGRvZ0VuYWJsZWQoKSB7Ci0gICAgICAgIGJvb2xlYW4gcmV0ID0gZ2V0U2V0dGluZ3NHbG9iYWxCb29sZWFuKAotICAgICAgICAgICAgICAgIG1Db250ZW50UmVzb2x2ZXIsIFNldHRpbmdzLkdsb2JhbC5XSUZJX1dBVENIRE9HX09OLCB0cnVlKTsKLSAgICAgICAgaWYgKERCRykgbG9nZCgiV2F0Y2hkb2cgZW5hYmxlZCAiICsgcmV0KTsKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlU2V0dGluZ3MoKSB7Ci0gICAgICAgIGlmIChEQkcpIGxvZ2QoIlVwZGF0aW5nIHNlY3VyZSBzZXR0aW5ncyIpOwotCi0gICAgICAgIC8vIGRpc2FibGUgcG9vciBuZXR3b3JrIGF2b2lkYW5jZQotICAgICAgICBpZiAoc1dpZmlPbmx5KSB7Ci0gICAgICAgICAgICBsb2dkKCJEaXNhYmxpbmcgcG9vciBuZXR3b3JrIGF2b2lkYW5jZSBmb3Igd2ktZmkgb25seSBkZXZpY2UiKTsKLSAgICAgICAgICAgIG1Qb29yTmV0d29ya0RldGVjdGlvbkVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1Qb29yTmV0d29ya0RldGVjdGlvbkVuYWJsZWQgPSBnZXRTZXR0aW5nc0dsb2JhbEJvb2xlYW4obUNvbnRlbnRSZXNvbHZlciwKLSAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfV0FUQ0hET0dfUE9PUl9ORVRXT1JLX1RFU1RfRU5BQkxFRCwKLSAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9QT09SX05FVFdPUktfQVZPSURBTkNFX0VOQUJMRUQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGVmYXVsdCBzdGF0ZSwgZ3VhcmQgZm9yIHVuaGFuZGxlZCBtZXNzYWdlcy4KLSAgICAgKi8KLSAgICBjbGFzcyBEZWZhdWx0U3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1zZykgewotICAgICAgICAgICAgc3dpdGNoIChtc2cud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfV0FUQ0hET0dfU0VUVElOR1NfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICB1cGRhdGVTZXR0aW5ncygpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJVcGRhdGluZyB3aWZpLXdhdGNoZG9nIHNlY3VyZSBzZXR0aW5ncyIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1JTU0lfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFNpZ25hbExldmVsID0gY2FsY3VsYXRlU2lnbmFsTGV2ZWwobXNnLmFyZzEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1dJRklfUkFESU9fU1RBVEVfQ0hBTkdFOgotICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfTkVUV09SS19TVEFURV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9TVVBQTElDQU5UX1NUQVRFX0NIQU5HRToKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX0JTU0lEX0NIQU5HRToKLSAgICAgICAgICAgICAgICBjYXNlIENNRF9SU1NJX0ZFVENIOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuUlNTSV9QS1RDTlRfRkVUQ0hfU1VDQ0VFREVEOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuUlNTSV9QS1RDTlRfRkVUQ0hfRkFJTEVEOgotICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9TQ1JFRU5fT046Ci0gICAgICAgICAgICAgICAgICAgIG1Jc1NjcmVlbk9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9TQ1JFRU5fT0ZGOgotICAgICAgICAgICAgICAgICAgICBtSXNTY3JlZW5PbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBsb2dlKCJVbmhhbmRsZWQgbWVzc2FnZSAiICsgbXNnICsgIiBpbiBzdGF0ZSAiICsgZ2V0Q3VycmVudFN0YXRlKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdpRmkgd2F0Y2hkb2cgaXMgZGlzYWJsZWQgYnkgdGhlIHNldHRpbmcuCi0gICAgICovCi0gICAgY2xhc3MgV2F0Y2hkb2dEaXNhYmxlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1dBVENIRE9HX1RPR0dMRUQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1dhdGNoZG9nRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Ob3RDb25uZWN0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfTkVUV09SS19TVEFURV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSAoSW50ZW50KSBtc2cub2JqOwotICAgICAgICAgICAgICAgICAgICBOZXR3b3JrSW5mbyBuZXR3b3JrSW5mbyA9IChOZXR3b3JrSW5mbykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQuZ2V0UGFyY2VsYWJsZUV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX05FVFdPUktfSU5GTyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrSW5mby5nZXREZXRhaWxlZFN0YXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVkVSSUZZSU5HX1BPT1JfTElOSzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJXYXRjaGRvZyBkaXNhYmxlZCwgdmVyaWZ5IGxpbmsiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTGlua1N0YXR1c05vdGlmaWNhdGlvbih0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXaUZpIHdhdGNoZG9nIGlzIGVuYWJsZWQgYnkgdGhlIHNldHRpbmcuCi0gICAgICovCi0gICAgY2xhc3MgV2F0Y2hkb2dFbmFibGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1zZykgewotICAgICAgICAgICAgSW50ZW50IGludGVudDsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1dBVENIRE9HX1RPR0dMRUQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNXYXRjaGRvZ0VuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtV2F0Y2hkb2dEaXNhYmxlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX05FVFdPUktfU1RBVEVfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICBpbnRlbnQgPSAoSW50ZW50KSBtc2cub2JqOwotICAgICAgICAgICAgICAgICAgICBOZXR3b3JrSW5mbyBuZXR3b3JrSW5mbyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5ldHdvcmtJbmZvKSBpbnRlbnQuZ2V0UGFyY2VsYWJsZUV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX05FVFdPUktfSU5GTyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIk5ldHdvcmsgc3RhdGUgY2hhbmdlICIgKyBuZXR3b3JrSW5mby5nZXREZXRhaWxlZFN0YXRlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIG1XaWZpSW5mbyA9IChXaWZpSW5mbykgaW50ZW50LmdldFBhcmNlbGFibGVFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9XSUZJX0lORk8pOwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50QnNzaWQobVdpZmlJbmZvICE9IG51bGwgPyBtV2lmaUluZm8uZ2V0QlNTSUQoKSA6IG51bGwpOwotCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya0luZm8uZ2V0RGV0YWlsZWRTdGF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFZFUklGWUlOR19QT09SX0xJTks6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxpbmtQcm9wZXJ0aWVzID0gKExpbmtQcm9wZXJ0aWVzKSBpbnRlbnQuZ2V0UGFyY2VsYWJsZUV4dHJhKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaU1hbmFnZXIuRVhUUkFfTElOS19QUk9QRVJUSUVTKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVBvb3JOZXR3b3JrRGV0ZWN0aW9uRW5hYmxlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlJbmZvID09IG51bGwgfHwgbUN1cnJlbnRCc3NpZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJJZ25vcmUsIHdpZmlpbmZvICIgKyBtV2lmaUluZm8gKyIgYnNzaWQgIiArIG1DdXJyZW50QnNzaWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZExpbmtTdGF0dXNOb3RpZmljYXRpb24odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVZlcmlmeWluZ0xpbmtTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTGlua1N0YXR1c05vdGlmaWNhdGlvbih0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENPTk5FQ1RFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU9ubGluZVdhdGNoU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU5vdENvbm5lY3RlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfU1VQUExJQ0FOVF9TVEFURV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIGludGVudCA9IChJbnRlbnQpIG1zZy5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIFN1cHBsaWNhbnRTdGF0ZSBzdXBwbGljYW50U3RhdGUgPSAoU3VwcGxpY2FudFN0YXRlKSBpbnRlbnQuZ2V0UGFyY2VsYWJsZUV4dHJhKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlNYW5hZ2VyLkVYVFJBX05FV19TVEFURSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdXBwbGljYW50U3RhdGUgPT0gU3VwcGxpY2FudFN0YXRlLkNPTVBMRVRFRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlJbmZvID0gbVdpZmlNYW5hZ2VyLmdldENvbm5lY3Rpb25JbmZvKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50QnNzaWQobVdpZmlJbmZvLmdldEJTU0lEKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9XSUZJX1JBRElPX1NUQVRFX0NIQU5HRToKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5hcmcxID09IFdpZmlNYW5hZ2VyLldJRklfU1RBVEVfRElTQUJMSU5HKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU5vdENvbm5lY3RlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXaUZpIGlzIGRpc2Nvbm5lY3RlZC4KLSAgICAgKi8KLSAgICBjbGFzcyBOb3RDb25uZWN0ZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV2lGaSBpcyBjb25uZWN0ZWQsIGJ1dCB3YWl0aW5nIGZvciBnb29kIGxpbmsgZGV0ZWN0aW9uIG1lc3NhZ2UuCi0gICAgICovCi0gICAgY2xhc3MgVmVyaWZ5aW5nTGlua1N0YXRlIGV4dGVuZHMgU3RhdGUgewotCi0gICAgICAgIHByaXZhdGUgaW50IG1TYW1wbGVDb3VudDsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgICAgICBtU2FtcGxlQ291bnQgPSAwOwotICAgICAgICAgICAgbUN1cnJlbnRCc3NpZC5uZXdMaW5rRGV0ZWN0ZWQoKTsKLSAgICAgICAgICAgIHNlbmRNZXNzYWdlKG9idGFpbk1lc3NhZ2UoQ01EX1JTU0lfRkVUQ0gsICsrbVJzc2lGZXRjaFRva2VuLCAwKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1dBVENIRE9HX1NFVFRJTkdTX0NIQU5HRToKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlU2V0dGluZ3MoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtUG9vck5ldHdvcmtEZXRlY3Rpb25FbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTGlua1N0YXR1c05vdGlmaWNhdGlvbih0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfQlNTSURfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVZlcmlmeWluZ0xpbmtTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBDTURfUlNTSV9GRVRDSDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5hcmcxID09IG1Sc3NpRmV0Y2hUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdzbUNoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaU1hbmFnZXIuUlNTSV9QS1RDTlRfRkVUQ0gpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoQ01EX1JTU0lfRkVUQ0gsICsrbVJzc2lGZXRjaFRva2VuLCAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElOS19TQU1QTElOR19JTlRFUlZBTF9NUyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNYW5hZ2VyLlJTU0lfUEtUQ05UX0ZFVENIX1NVQ0NFRURFRDoKLSAgICAgICAgICAgICAgICAgICAgUnNzaVBhY2tldENvdW50SW5mbyBpbmZvID0gKFJzc2lQYWNrZXRDb3VudEluZm8pIG1zZy5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGludCByc3NpID0gaW5mby5yc3NpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJGZXRjaCBSU1NJIHN1Y2NlZWQsIHJzc2k9IiArIHJzc2kpOwotCi0gICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZSA9IG1DdXJyZW50QnNzaWQubUJzc2lkQXZvaWRUaW1lTWF4IC0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aW1lIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heCBhdm9pZGFuY2UgdGltZSBpcyBtZXQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIk1heCBhdm9pZCB0aW1lIGVsYXBzZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRMaW5rU3RhdHVzTm90aWZpY2F0aW9uKHRydWUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJzc2kgPj0gbUN1cnJlbnRCc3NpZC5tR29vZExpbmtUYXJnZXRSc3NpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbVNhbXBsZUNvdW50ID49IG1DdXJyZW50QnNzaWQubUdvb2RMaW5rVGFyZ2V0Q291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGluayBpcyBnb29kIGFnYWluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkdvb2QgbGluayBkZXRlY3RlZCwgcnNzaT0iICsgcnNzaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50QnNzaWQubUJzc2lkQXZvaWRUaW1lTWF4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZExpbmtTdGF0dXNOb3RpZmljYXRpb24odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2FtcGxlQ291bnQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkxpbmsgaXMgc3RpbGwgcG9vciwgdGltZSBsZWZ0PSIgKyB0aW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuUlNTSV9QS1RDTlRfRkVUQ0hfRkFJTEVEOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJSU1NJX0ZFVENIX0ZBSUxFRCIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV2lGaSBpcyBjb25uZWN0ZWQgYW5kIGxpbmsgaXMgdmVyaWZpZWQuCi0gICAgICovCi0gICAgY2xhc3MgQ29ubmVjdGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1zZykgewotICAgICAgICAgICAgc3dpdGNoIChtc2cud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfV0FUQ0hET0dfU0VUVElOR1NfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICB1cGRhdGVTZXR0aW5ncygpOwotICAgICAgICAgICAgICAgICAgICBpZiAobVBvb3JOZXR3b3JrRGV0ZWN0aW9uRW5hYmxlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1PbmxpbmVXYXRjaFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtT25saW5lU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUlNTSSBpcyBoaWdoIGVub3VnaCBhbmQgZG9uJ3QgbmVlZCBsaW5rIG1vbml0b3JpbmcuCi0gICAgICovCi0gICAgY2xhc3MgT25saW5lV2F0Y2hTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICAgICAgaWYgKG1Qb29yTmV0d29ya0RldGVjdGlvbkVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICAvLyB0cmVhdCBlbnRyeSBhcyBhbiByc3NpIGNoYW5nZQotICAgICAgICAgICAgICAgIGhhbmRsZVJzc2lDaGFuZ2UoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1PbmxpbmVTdGF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgaGFuZGxlUnNzaUNoYW5nZSgpIHsKLSAgICAgICAgICAgIGlmIChtQ3VycmVudFNpZ25hbExldmVsIDw9IExJTktfTU9OSVRPUl9MRVZFTF9USFJFU0hPTEQgJiYgbUN1cnJlbnRCc3NpZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1MaW5rTW9uaXRvcmluZ1N0YXRlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gc3RheSBoZXJlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1JTU0lfQ0hBTkdFOgotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFNpZ25hbExldmVsID0gY2FsY3VsYXRlU2lnbmFsTGV2ZWwobXNnLmFyZzEpOwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVSc3NpQ2hhbmdlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogS2VlcCBzYW1wbGluZyB0aGUgbGluayBhbmQgbW9uaXRvciBhbnkgcG9vciBsaW5rIHNpdHVhdGlvbi4KLSAgICAgKi8KLSAgICBjbGFzcyBMaW5rTW9uaXRvcmluZ1N0YXRlIGV4dGVuZHMgU3RhdGUgewotCi0gICAgICAgIHByaXZhdGUgaW50IG1TYW1wbGVDb3VudDsKLQotICAgICAgICBwcml2YXRlIGludCBtTGFzdFJzc2k7Ci0gICAgICAgIHByaXZhdGUgaW50IG1MYXN0VHhHb29kOwotICAgICAgICBwcml2YXRlIGludCBtTGFzdFR4QmFkOwotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIG1TYW1wbGVDb3VudCA9IDA7Ci0gICAgICAgICAgICBtQ3VycmVudExvc3MgPSBuZXcgVm9sdW1lV2VpZ2h0ZWRFTUEoRVhQX0NPRUZGSUNJRU5UX01PTklUT1IpOwotICAgICAgICAgICAgc2VuZE1lc3NhZ2Uob2J0YWluTWVzc2FnZShDTURfUlNTSV9GRVRDSCwgKyttUnNzaUZldGNoVG9rZW4sIDApKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1zZykgewotICAgICAgICAgICAgc3dpdGNoIChtc2cud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfUlNTSV9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50U2lnbmFsTGV2ZWwgPSBjYWxjdWxhdGVTaWduYWxMZXZlbChtc2cuYXJnMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudFNpZ25hbExldmVsIDw9IExJTktfTU9OSVRPUl9MRVZFTF9USFJFU0hPTEQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXkgaGVyZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgZnJlcXVlbnQgUlNTSSBtb25pdG9yaW5nIGFueSBtb3JlCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obU9ubGluZVdhdGNoU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9CU1NJRF9DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtTGlua01vbml0b3JpbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBDTURfUlNTSV9GRVRDSDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtSXNTY3JlZW5PbikgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1PbmxpbmVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmFyZzEgPT0gbVJzc2lGZXRjaFRva2VuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV3NtQ2hhbm5lbC5zZW5kTWVzc2FnZShXaWZpTWFuYWdlci5SU1NJX1BLVENOVF9GRVRDSCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZURlbGF5ZWQob2J0YWluTWVzc2FnZShDTURfUlNTSV9GRVRDSCwgKyttUnNzaUZldGNoVG9rZW4sIDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSU5LX1NBTVBMSU5HX0lOVEVSVkFMX01TKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuUlNTSV9QS1RDTlRfRkVUQ0hfU1VDQ0VFREVEOgotICAgICAgICAgICAgICAgICAgICBSc3NpUGFja2V0Q291bnRJbmZvIGluZm8gPSAoUnNzaVBhY2tldENvdW50SW5mbykgbXNnLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaW50IHJzc2kgPSBpbmZvLnJzc2k7Ci0gICAgICAgICAgICAgICAgICAgIGludCBtcnNzaSA9IChtTGFzdFJzc2kgKyByc3NpKSAvIDI7Ci0gICAgICAgICAgICAgICAgICAgIGludCB0eGJhZCA9IGluZm8udHhiYWQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCB0eGdvb2QgPSBpbmZvLnR4Z29vZDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiRmV0Y2ggUlNTSSBzdWNjZWVkLCByc3NpPSIgKyByc3NpICsgIiBtcnNzaT0iICsgbXJzc2kgKyAiIHR4YmFkPSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHR4YmFkICsgIiB0eGdvb2Q9IiArIHR4Z29vZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCB0aGUgZmlyc3QgZGF0YSBwb2ludCBhcyB3ZSB3YW50IGluY3JlbWVudGFsIHZhbHVlcwotICAgICAgICAgICAgICAgICAgICBsb25nIG5vdyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobm93IC0gbUN1cnJlbnRCc3NpZC5tTGFzdFRpbWVTYW1wbGUgPCBMSU5LX1NBTVBMSU5HX0lOVEVSVkFMX01TICogMikgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgcGFja2V0IGxvc3Mgc3RhdGlzdGljcwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRiYWQgPSB0eGJhZCAtIG1MYXN0VHhCYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGdvb2QgPSB0eGdvb2QgLSBtTGFzdFR4R29vZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkdG90YWwgPSBkYmFkICsgZGdvb2Q7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkdG90YWwgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHBhY2tldCBsb3NzIGluIHRoZSBsYXN0IHNhbXBsaW5nIGludGVydmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGxvc3MgPSAoKGRvdWJsZSkgZGJhZCkgLyAoKGRvdWJsZSkgZHRvdGFsKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50TG9zcy51cGRhdGUobG9zcywgZHRvdGFsKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCIjLiMjIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2QoIkluY3JlbWVudGFsIGxvc3M9IiArIGRiYWQgKyAiLyIgKyBkdG90YWwgKyAiIEN1cnJlbnQgbG9zcz0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBkZi5mb3JtYXQobUN1cnJlbnRMb3NzLm1WYWx1ZSAqIDEwMCkgKyAiJSB2b2x1bWU9IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZGYuZm9ybWF0KG1DdXJyZW50TG9zcy5tVm9sdW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRCc3NpZC51cGRhdGVMb3NzKG1yc3NpLCBsb3NzLCBkdG90YWwpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGhpZ2ggcGFja2V0IGxvc3MgYW5kIHNlbmQgcG9vciBsaW5rIG5vdGlmaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudExvc3MubVZhbHVlID4gUE9PUl9MSU5LX0xPU1NfVEhSRVNIT0xECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtQ3VycmVudExvc3MubVZvbHVtZSA+IFBPT1JfTElOS19NSU5fVk9MVU1FKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK21TYW1wbGVDb3VudCA+PSBQT09SX0xJTktfU0FNUExFX0NPVU5UKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50QnNzaWQucG9vckxpbmtEZXRlY3RlZChyc3NpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRMaW5rU3RhdHVzTm90aWZpY2F0aW9uKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK21Sc3NpRmV0Y2hUb2tlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2FtcGxlQ291bnQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50QnNzaWQubUxhc3RUaW1lU2FtcGxlID0gbm93OwotICAgICAgICAgICAgICAgICAgICBtTGFzdFR4QmFkID0gdHhiYWQ7Ci0gICAgICAgICAgICAgICAgICAgIG1MYXN0VHhHb29kID0gdHhnb29kOwotICAgICAgICAgICAgICAgICAgICBtTGFzdFJzc2kgPSByc3NpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuUlNTSV9QS1RDTlRfRkVUQ0hfRkFJTEVEOgotICAgICAgICAgICAgICAgICAgICAvLyBjYW4gaGFwcGVuIGlmIHdlIGFyZSB3YWl0aW5nIHRvIGdldCBhIGRpc2Nvbm5lY3Qgbm90aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlJTU0lfRkVUQ0hfRkFJTEVEIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgIH0KLQotICAgIC8qKgotICAgICAqIENoaWxkIHN0YXRlIG9mIENvbm5lY3RlZFN0YXRlIGluZGljYXRpbmcgdGhhdCB3ZSBhcmUgb25saW5lIGFuZCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLgotICAgICAqLwotICAgIGNsYXNzIE9ubGluZVN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1NDUkVFTl9PTjoKLSAgICAgICAgICAgICAgICAgICAgbUlzU2NyZWVuT24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAobVBvb3JOZXR3b3JrRGV0ZWN0aW9uRW5hYmxlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtT25saW5lV2F0Y2hTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUN1cnJlbnRCc3NpZChTdHJpbmcgYnNzaWQpIHsKLSAgICAgICAgaWYgKERCRykgbG9nZCgiVXBkYXRlIGN1cnJlbnQgQlNTSUQgdG8gIiArIChic3NpZCAhPSBudWxsID8gYnNzaWQgOiAibnVsbCIpKTsKLQotICAgICAgICAvLyBpZiBjdXJyZW50bHkgbm90IGNvbm5lY3RlZCwgdGhlbiBzZXQgY3VycmVudCBCU1NJRCB0byBudWxsCi0gICAgICAgIGlmIChic3NpZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAobUN1cnJlbnRCc3NpZCA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgICAgICBtQ3VycmVudEJzc2lkID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkJTU0lEIGNoYW5nZWQiKTsKLSAgICAgICAgICAgIHNlbmRNZXNzYWdlKEVWRU5UX0JTU0lEX0NIQU5HRSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBpZiBpdCBpcyBhbHJlYWR5IHRoZSBjdXJyZW50IEJTU0lELCB0aGVuIGRvbmUKLSAgICAgICAgaWYgKG1DdXJyZW50QnNzaWQgIT0gbnVsbCAmJiBic3NpZC5lcXVhbHMobUN1cnJlbnRCc3NpZC5tQnNzaWQpKSByZXR1cm47Ci0KLSAgICAgICAgLy8gc2VhcmNoIGZvciB0aGUgbmV3IEJTU0lEIGluIHRoZSBjYWNoZSwgYWRkIHRvIGNhY2hlIGlmIG5vdCBmb3VuZAotICAgICAgICBtQ3VycmVudEJzc2lkID0gbUJzc2lkQ2FjaGUuZ2V0KGJzc2lkKTsKLSAgICAgICAgaWYgKG1DdXJyZW50QnNzaWQgPT0gbnVsbCkgewotICAgICAgICAgICAgbUN1cnJlbnRCc3NpZCA9IG5ldyBCc3NpZFN0YXRpc3RpY3MoYnNzaWQpOwotICAgICAgICAgICAgbUJzc2lkQ2FjaGUucHV0KGJzc2lkLCBtQ3VycmVudEJzc2lkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHNlbmQgQlNTSUQgY2hhbmdlIG5vdGlmaWNhdGlvbgotICAgICAgICBpZiAoREJHKSBsb2dkKCJCU1NJRCBjaGFuZ2VkIik7Ci0gICAgICAgIHNlbmRNZXNzYWdlKEVWRU5UX0JTU0lEX0NIQU5HRSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgY2FsY3VsYXRlU2lnbmFsTGV2ZWwoaW50IHJzc2kpIHsKLSAgICAgICAgaW50IHNpZ25hbExldmVsID0gV2lmaU1hbmFnZXIuY2FsY3VsYXRlU2lnbmFsTGV2ZWwocnNzaSwgV2lmaU1hbmFnZXIuUlNTSV9MRVZFTFMpOwotICAgICAgICBpZiAoREJHKQotICAgICAgICAgICAgbG9nZCgiUlNTSSBjdXJyZW50OiAiICsgbUN1cnJlbnRTaWduYWxMZXZlbCArICIgbmV3OiAiICsgcnNzaSArICIsICIgKyBzaWduYWxMZXZlbCk7Ci0gICAgICAgIHJldHVybiBzaWduYWxMZXZlbDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2VuZExpbmtTdGF0dXNOb3RpZmljYXRpb24oYm9vbGVhbiBpc0dvb2QpIHsKLSAgICAgICAgaWYgKERCRykgbG9nZCgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOwotICAgICAgICBpZiAoaXNHb29kKSB7Ci0gICAgICAgICAgICBtV3NtQ2hhbm5lbC5zZW5kTWVzc2FnZShHT09EX0xJTktfREVURUNURUQpOwotICAgICAgICAgICAgaWYgKG1DdXJyZW50QnNzaWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1DdXJyZW50QnNzaWQubUxhc3RUaW1lR29vZCA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiR29vZCBsaW5rIG5vdGlmaWNhdGlvbiBpcyBzZW50Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtV3NtQ2hhbm5lbC5zZW5kTWVzc2FnZShQT09SX0xJTktfREVURUNURUQpOwotICAgICAgICAgICAgaWYgKG1DdXJyZW50QnNzaWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1DdXJyZW50QnNzaWQubUxhc3RUaW1lUG9vciA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9nZCgiUG9vciBsaW5rIG5vdGlmaWNhdGlvbiBpcyBzZW50Iik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyBhIHNpbmdsZSBzZWN1cmUgc2V0dGluZ3MgdmFsdWUgYXMgYQotICAgICAqIGJvb2xlYW4uIE5vdGUgdGhhdCBpbnRlcm5hbGx5IHNldHRpbmcgdmFsdWVzIGFyZSBhbHdheXMgc3RvcmVkIGFzCi0gICAgICogc3RyaW5nczsgdGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgc3RyaW5nIHRvIGEgYm9vbGVhbiBmb3IgeW91LiBUaGUKLSAgICAgKiBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHNldHRpbmcgaXMgbm90IGRlZmluZWQgb3Igbm90IGEKLSAgICAgKiB2YWxpZCBib29sZWFuLgotICAgICAqCi0gICAgICogQHBhcmFtIGNyIFRoZSBDb250ZW50UmVzb2x2ZXIgdG8gYWNjZXNzLgotICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBzZXR0aW5nIHRvIHJldHJpZXZlLgotICAgICAqIEBwYXJhbSBkZWYgVmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBzZXR0aW5nIGlzIG5vdCBkZWZpbmVkLgotICAgICAqIEByZXR1cm4gVGhlIHNldHRpbmcncyBjdXJyZW50IHZhbHVlLCBvciAnZGVmJyBpZiBpdCBpcyBub3QgZGVmaW5lZCBvciBub3QKLSAgICAgKiAgICAgICAgIGEgdmFsaWQgYm9vbGVhbi4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGdldFNldHRpbmdzR2xvYmFsQm9vbGVhbihDb250ZW50UmVzb2x2ZXIgY3IsIFN0cmluZyBuYW1lLCBib29sZWFuIGRlZikgewotICAgICAgICByZXR1cm4gU2V0dGluZ3MuR2xvYmFsLmdldEludChjciwgbmFtZSwgZGVmID8gMSA6IDApID09IDE7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHVwZGF0aW5nIGEgc2luZ2xlIHNldHRpbmdzIHZhbHVlIGFzIGFuIGludGVnZXIuCi0gICAgICogVGhpcyB3aWxsIGVpdGhlciBjcmVhdGUgYSBuZXcgZW50cnkgaW4gdGhlIHRhYmxlIGlmIHRoZSBnaXZlbiBuYW1lIGRvZXMKLSAgICAgKiBub3QgZXhpc3QsIG9yIG1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIGV4aXN0aW5nIHJvdyB3aXRoIHRoYXQgbmFtZS4gTm90ZQotICAgICAqIHRoYXQgaW50ZXJuYWxseSBzZXR0aW5nIHZhbHVlcyBhcmUgYWx3YXlzIHN0b3JlZCBhcyBzdHJpbmdzLCBzbyB0aGlzCi0gICAgICogZnVuY3Rpb24gY29udmVydHMgdGhlIGdpdmVuIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZSBzdG9yaW5nIGl0LgotICAgICAqCi0gICAgICogQHBhcmFtIGNyIFRoZSBDb250ZW50UmVzb2x2ZXIgdG8gYWNjZXNzLgotICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBzZXR0aW5nIHRvIG1vZGlmeS4KLSAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHNldHRpbmcuCi0gICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSB3YXMgc2V0LCBmYWxzZSBvbiBkYXRhYmFzZSBlcnJvcnMKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHB1dFNldHRpbmdzR2xvYmFsQm9vbGVhbihDb250ZW50UmVzb2x2ZXIgY3IsIFN0cmluZyBuYW1lLCBib29sZWFuIHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBTZXR0aW5ncy5HbG9iYWwucHV0SW50KGNyLCBuYW1lLCB2YWx1ZSA/IDEgOiAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBCdW5kbGUgb2YgZ29vZCBsaW5rIGNvdW50IHBhcmFtZXRlcnMKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBHb29kTGlua1RhcmdldCB7Ci0gICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgUlNTSV9BREpfREJNOwotICAgICAgICBwdWJsaWMgZmluYWwgaW50IFNBTVBMRV9DT1VOVDsKLSAgICAgICAgcHVibGljIGZpbmFsIGludCBSRURVQ0VfVElNRV9NUzsKLSAgICAgICAgcHVibGljIEdvb2RMaW5rVGFyZ2V0KGludCBhZGosIGludCBjb3VudCwgaW50IHRpbWUpIHsKLSAgICAgICAgICAgIFJTU0lfQURKX0RCTSA9IGFkajsKLSAgICAgICAgICAgIFNBTVBMRV9DT1VOVCA9IGNvdW50OwotICAgICAgICAgICAgUkVEVUNFX1RJTUVfTVMgPSB0aW1lOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQnVuZGxlIG9mIG1heCBhdm9pZGFuY2UgdGltZSBwYXJhbWV0ZXJzCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTWF4QXZvaWRUaW1lIHsKLSAgICAgICAgcHVibGljIGZpbmFsIGludCBUSU1FX01TOwotICAgICAgICBwdWJsaWMgZmluYWwgaW50IE1JTl9SU1NJX0RCTTsKLSAgICAgICAgcHVibGljIE1heEF2b2lkVGltZShpbnQgdGltZSwgaW50IHJzc2kpIHsKLSAgICAgICAgICAgIFRJTUVfTVMgPSB0aW1lOwotICAgICAgICAgICAgTUlOX1JTU0lfREJNID0gcnNzaTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFZvbHVtZS13ZWlnaHRlZCBFeHBvbmVudGlhbCBNb3ZpbmcgQXZlcmFnZSAoVi1FTUEpCi0gICAgICogICAgLSB2b2x1bWUtd2VpZ2h0ZWQ6ICBlYWNoIHVwZGF0ZSBoYXMgaXRzIG93biB3ZWlnaHQgKG51bWJlciBvZiBwYWNrZXRzKQotICAgICAqICAgIC0gZXhwb25lbnRpYWw6ICAgICAgTygxKSB0aW1lIGFuZCBPKDEpIHNwYWNlIGZvciBib3RoIHVwZGF0ZSBhbmQgcXVlcnkKLSAgICAgKiAgICAtIG1vdmluZyBhdmVyYWdlOiAgIHJlZmxlY3QgbW9zdCByZWNlbnQgcmVzdWx0cyBhbmQgZXhwaXJlIG9sZCBvbmVzCi0gICAgICovCi0gICAgcHJpdmF0ZSBjbGFzcyBWb2x1bWVXZWlnaHRlZEVNQSB7Ci0gICAgICAgIHByaXZhdGUgZG91YmxlIG1WYWx1ZTsKLSAgICAgICAgcHJpdmF0ZSBkb3VibGUgbVZvbHVtZTsKLSAgICAgICAgcHJpdmF0ZSBkb3VibGUgbVByb2R1Y3Q7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgZG91YmxlIG1BbHBoYTsKLQotICAgICAgICBwdWJsaWMgVm9sdW1lV2VpZ2h0ZWRFTUEoZG91YmxlIGNvZWZmaWNpZW50KSB7Ci0gICAgICAgICAgICBtVmFsdWUgICA9IDAuMDsKLSAgICAgICAgICAgIG1Wb2x1bWUgID0gMC4wOwotICAgICAgICAgICAgbVByb2R1Y3QgPSAwLjA7Ci0gICAgICAgICAgICBtQWxwaGEgICA9IGNvZWZmaWNpZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgdXBkYXRlKGRvdWJsZSBuZXdWYWx1ZSwgaW50IG5ld1ZvbHVtZSkgewotICAgICAgICAgICAgaWYgKG5ld1ZvbHVtZSA8PSAwKSByZXR1cm47Ci0gICAgICAgICAgICAvLyBjb3JlIHVwZGF0ZSBmb3JtdWxhcwotICAgICAgICAgICAgZG91YmxlIG5ld1Byb2R1Y3QgPSBuZXdWYWx1ZSAqIG5ld1ZvbHVtZTsKLSAgICAgICAgICAgIG1Qcm9kdWN0ID0gbUFscGhhICogbmV3UHJvZHVjdCArICgxIC0gbUFscGhhKSAqIG1Qcm9kdWN0OwotICAgICAgICAgICAgbVZvbHVtZSAgPSBtQWxwaGEgKiBuZXdWb2x1bWUgICsgKDEgLSBtQWxwaGEpICogbVZvbHVtZTsKLSAgICAgICAgICAgIG1WYWx1ZSAgID0gbVByb2R1Y3QgLyBtVm9sdW1lOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVjb3JkIChSU1NJIC0+IHBha2NlIGxvc3MgJSkgbWFwcGluZ3Mgb2Ygb25lIEJTU0lECi0gICAgICovCi0gICAgcHJpdmF0ZSBjbGFzcyBCc3NpZFN0YXRpc3RpY3MgewotCi0gICAgICAgIC8qIE1BQyBhZGRyZXNzIG9mIHRoaXMgQlNTSUQgKi8KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUJzc2lkOwotCi0gICAgICAgIC8qIFJTU0kgLT4gcGFja2V0IGxvc3MgJSBtYXBwaW5ncyAqLwotICAgICAgICBwcml2YXRlIFZvbHVtZVdlaWdodGVkRU1BW10gbUVudHJpZXM7Ci0gICAgICAgIHByaXZhdGUgaW50IG1Sc3NpQmFzZTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbUVudHJpZXNTaXplOwotCi0gICAgICAgIC8qIFRhcmdldCB0byBzZW5kIGdvb2QgbGluayBub3RpZmljYXRpb24sIHNldCB3aGVuIHBvb3IgbGluayBpcyBkZXRlY3RlZCAqLwotICAgICAgICBwcml2YXRlIGludCBtR29vZExpbmtUYXJnZXRSc3NpOwotICAgICAgICBwcml2YXRlIGludCBtR29vZExpbmtUYXJnZXRDb3VudDsKLQotICAgICAgICAvKiBJbmRleCBvZiBHT09EX0xJTktfVEFSR0VUIGFycmF5ICovCi0gICAgICAgIHByaXZhdGUgaW50IG1Hb29kTGlua1RhcmdldEluZGV4OwotCi0gICAgICAgIC8qIFRpbWVzdGFtcHMgb2Ygc29tZSBsYXN0IGV2ZW50cyAqLwotICAgICAgICBwcml2YXRlIGxvbmcgbUxhc3RUaW1lU2FtcGxlOwotICAgICAgICBwcml2YXRlIGxvbmcgbUxhc3RUaW1lR29vZDsKLSAgICAgICAgcHJpdmF0ZSBsb25nIG1MYXN0VGltZVBvb3I7Ci0KLSAgICAgICAgLyogTWF4IHRpbWUgdG8gYXZvaWQgdGhpcyBCU1NJRCAqLwotICAgICAgICBwcml2YXRlIGxvbmcgbUJzc2lkQXZvaWRUaW1lTWF4OwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDb25zdHJ1Y3RvcgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gYnNzaWQgaXMgdGhlIGFkZHJlc3Mgb2YgdGhpcyBCU1NJRAotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJzc2lkU3RhdGlzdGljcyhTdHJpbmcgYnNzaWQpIHsKLSAgICAgICAgICAgIHRoaXMubUJzc2lkID0gYnNzaWQ7Ci0gICAgICAgICAgICBtUnNzaUJhc2UgPSBCU1NJRF9TVEFUX1JBTkdFX0xPV19EQk07Ci0gICAgICAgICAgICBtRW50cmllc1NpemUgPSBCU1NJRF9TVEFUX1JBTkdFX0hJR0hfREJNIC0gQlNTSURfU1RBVF9SQU5HRV9MT1dfREJNICsgMTsKLSAgICAgICAgICAgIG1FbnRyaWVzID0gbmV3IFZvbHVtZVdlaWdodGVkRU1BW21FbnRyaWVzU2l6ZV07Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1FbnRyaWVzU2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgIG1FbnRyaWVzW2ldID0gbmV3IFZvbHVtZVdlaWdodGVkRU1BKEVYUF9DT0VGRklDSUVOVF9SRUNPUkQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFVwZGF0ZSB0aGlzIEJTU0lEIGNhY2hlCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSByc3NpIGlzIHRoZSBSU1NJCi0gICAgICAgICAqIEBwYXJhbSB2YWx1ZSBpcyB0aGUgbmV3IGluc3RhbnQgbG9zcyB2YWx1ZSBhdCB0aGlzIFJTU0kKLSAgICAgICAgICogQHBhcmFtIHZvbHVtZSBpcyB0aGUgdm9sdW1lIGZvciB0aGlzIHNpbmdsZSB1cGRhdGUKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUxvc3MoaW50IHJzc2ksIGRvdWJsZSB2YWx1ZSwgaW50IHZvbHVtZSkgewotICAgICAgICAgICAgaWYgKHZvbHVtZSA8PSAwKSByZXR1cm47Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSByc3NpIC0gbVJzc2lCYXNlOwotICAgICAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtRW50cmllc1NpemUpIHJldHVybjsKLSAgICAgICAgICAgIG1FbnRyaWVzW2luZGV4XS51cGRhdGUodmFsdWUsIHZvbHVtZSk7Ci0gICAgICAgICAgICBpZiAoREJHKSB7Ci0gICAgICAgICAgICAgICAgRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCIjLiMjIik7Ci0gICAgICAgICAgICAgICAgbG9nZCgiQ2FjaGUgdXBkYXRlZDogbG9zc1siICsgcnNzaSArICJdPSIgKyBkZi5mb3JtYXQobUVudHJpZXNbaW5kZXhdLm1WYWx1ZSAqIDEwMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiUgdm9sdW1lPSIgKyBkZi5mb3JtYXQobUVudHJpZXNbaW5kZXhdLm1Wb2x1bWUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZXQgcHJlc2V0IGxvc3MgaWYgdGhlIGNhY2hlIGhhcyBpbnN1ZmZpY2llbnQgZGF0YSwgb2JzZXJ2ZWQgZnJvbSBleHBlcmltZW50cy4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHJzc2kgaXMgdGhlIGlucHV0IFJTU0kKLSAgICAgICAgICogQHJldHVybiBwcmVzZXQgbG9zcyBvZiB0aGUgZ2l2ZW4gUlNTSQotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGRvdWJsZSBwcmVzZXRMb3NzKGludCByc3NpKSB7Ci0gICAgICAgICAgICBpZiAocnNzaSA8PSAtOTApIHJldHVybiAxLjA7Ci0gICAgICAgICAgICBpZiAocnNzaSA+IDApIHJldHVybiAwLjA7Ci0KLSAgICAgICAgICAgIGlmIChzUHJlc2V0TG9zcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gcHJlLWNhbGN1bGF0ZSBhbGwgcHJlc2V0IGxvc3NlcyBvbmx5IG9uY2UsIHRoZW4gcmV1c2UgdGhlbQotICAgICAgICAgICAgICAgIGZpbmFsIGludCBzaXplID0gOTA7Ci0gICAgICAgICAgICAgICAgc1ByZXNldExvc3MgPSBuZXcgZG91YmxlW3NpemVdOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSBzUHJlc2V0TG9zc1tpXSA9IDEuMCAvIE1hdGgucG93KDkwIC0gaSwgMS41KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzUHJlc2V0TG9zc1stcnNzaV07Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQSBwb29yIGxpbmsgaXMgZGV0ZWN0ZWQsIGNhbGN1bGF0ZSBhIHRhcmdldCBSU1NJIHRvIGJyaW5nIFdpRmkgYmFjay4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHJzc2kgaXMgdGhlIGN1cnJlbnQgUlNTSQotICAgICAgICAgKiBAcmV0dXJuIHRydWUgaWZmIHRoZSBjdXJyZW50IEJTU0lEIHNob3VsZCBiZSBhdm9pZGVkCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwb29yTGlua0RldGVjdGVkKGludCByc3NpKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJQb29yIGxpbmsgZGV0ZWN0ZWQsIHJzc2k9IiArIHJzc2kpOwotCi0gICAgICAgICAgICBsb25nIG5vdyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgICAgICAgICAgbG9uZyBsYXN0R29vZCA9IG5vdyAtIG1MYXN0VGltZUdvb2Q7Ci0gICAgICAgICAgICBsb25nIGxhc3RQb29yID0gbm93IC0gbUxhc3RUaW1lUG9vcjsKLQotICAgICAgICAgICAgLy8gcmVkdWNlIHRoZSBkaWZmaWN1bHR5IG9mIGdvb2QgbGluayB0YXJnZXQgaWYgbGFzdCBhdm9pZGFuY2Ugd2FzIGxvbmcgdGltZSBhZ28KLSAgICAgICAgICAgIHdoaWxlIChtR29vZExpbmtUYXJnZXRJbmRleCA+IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgbGFzdFBvb3IgPj0gR09PRF9MSU5LX1RBUkdFVFttR29vZExpbmtUYXJnZXRJbmRleCAtIDFdLlJFRFVDRV9USU1FX01TKQotICAgICAgICAgICAgICAgIG1Hb29kTGlua1RhcmdldEluZGV4LS07Ci0gICAgICAgICAgICBtR29vZExpbmtUYXJnZXRDb3VudCA9IEdPT0RfTElOS19UQVJHRVRbbUdvb2RMaW5rVGFyZ2V0SW5kZXhdLlNBTVBMRV9DT1VOVDsKLQotICAgICAgICAgICAgLy8gc2NhbiBmb3IgYSB0YXJnZXQgUlNTSSBhdCB3aGljaCB0aGUgbGluayBpcyBnb29kCi0gICAgICAgICAgICBpbnQgZnJvbSA9IHJzc2kgKyBHT09EX0xJTktfUlNTSV9SQU5HRV9NSU47Ci0gICAgICAgICAgICBpbnQgdG8gPSByc3NpICsgR09PRF9MSU5LX1JTU0lfUkFOR0VfTUFYOwotICAgICAgICAgICAgbUdvb2RMaW5rVGFyZ2V0UnNzaSA9IGZpbmRSc3NpVGFyZ2V0KGZyb20sIHRvLCBHT09EX0xJTktfTE9TU19USFJFU0hPTEQpOwotICAgICAgICAgICAgbUdvb2RMaW5rVGFyZ2V0UnNzaSArPSBHT09EX0xJTktfVEFSR0VUW21Hb29kTGlua1RhcmdldEluZGV4XS5SU1NJX0FESl9EQk07Ci0gICAgICAgICAgICBpZiAobUdvb2RMaW5rVGFyZ2V0SW5kZXggPCBHT09EX0xJTktfVEFSR0VULmxlbmd0aCAtIDEpIG1Hb29kTGlua1RhcmdldEluZGV4Kys7Ci0KLSAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBtYXggYXZvaWRhbmNlIHRpbWUgdG8gcHJldmVudCBhdm9pZGluZyBmb3JldmVyCi0gICAgICAgICAgICBpbnQgcCA9IDAsIHBtYXggPSBNQVhfQVZPSURfVElNRS5sZW5ndGggLSAxOwotICAgICAgICAgICAgd2hpbGUgKHAgPCBwbWF4ICYmIHJzc2kgPj0gTUFYX0FWT0lEX1RJTUVbcCArIDFdLk1JTl9SU1NJX0RCTSkgcCsrOwotICAgICAgICAgICAgbG9uZyBhdm9pZE1heCA9IE1BWF9BVk9JRF9USU1FW3BdLlRJTUVfTVM7Ci0KLSAgICAgICAgICAgIC8vIGRvbid0IGF2b2lkIGlmIG1heCBhdm9pZGFuY2UgdGltZSBpcyAwIChSU1NJIGlzIHN1cGVyIGhpZ2gpCi0gICAgICAgICAgICBpZiAoYXZvaWRNYXggPD0gMCkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAvLyBzZXQgbWF4IGF2b2lkYW5jZSB0aW1lLCBzZW5kIHBvb3IgbGluayBub3RpZmljYXRpb24KLSAgICAgICAgICAgIG1Cc3NpZEF2b2lkVGltZU1heCA9IG5vdyArIGF2b2lkTWF4OwotCi0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJnb29kUnNzaT0iICsgbUdvb2RMaW5rVGFyZ2V0UnNzaSArICIgZ29vZENvdW50PSIgKyBtR29vZExpbmtUYXJnZXRDb3VudAotICAgICAgICAgICAgICAgICAgICArICIgbGFzdEdvb2Q9IiArIGxhc3RHb29kICsgIiBsYXN0UG9vcj0iICsgbGFzdFBvb3IgKyAiIGF2b2lkTWF4PSIgKyBhdm9pZE1heCk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEEgbmV3IEJTU0lEIGlzIGNvbm5lY3RlZCwgcmVjYWxjdWxhdGUgdGFyZ2V0IFJTU0kgdGhyZXNob2xkCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBuZXdMaW5rRGV0ZWN0ZWQoKSB7Ci0gICAgICAgICAgICAvLyBpZiB0aGlzIEJTU0lEIGlzIGN1cnJlbnRseSBiZWluZyBhdm9pZGVkLCB0aGUgcmV1c2UgdGhvc2UgdmFsdWVzCi0gICAgICAgICAgICBpZiAobUJzc2lkQXZvaWRUaW1lTWF4ID4gMCkgewotICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlByZXZpb3VzIGF2b2lkYW5jZSBzdGlsbCBpbiBlZmZlY3QsIHJzc2k9IiArIG1Hb29kTGlua1RhcmdldFJzc2kKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBjb3VudD0iICsgbUdvb2RMaW5rVGFyZ2V0Q291bnQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGEgbmV3IFJTU0kgdGhyZXNob2xkIGZvciBuZXcgbGluayB2ZXJpZnlpbmcKLSAgICAgICAgICAgIGludCBmcm9tID0gQlNTSURfU1RBVF9SQU5HRV9MT1dfREJNOwotICAgICAgICAgICAgaW50IHRvID0gQlNTSURfU1RBVF9SQU5HRV9ISUdIX0RCTTsKLSAgICAgICAgICAgIG1Hb29kTGlua1RhcmdldFJzc2kgPSBmaW5kUnNzaVRhcmdldChmcm9tLCB0bywgR09PRF9MSU5LX0xPU1NfVEhSRVNIT0xEKTsKLSAgICAgICAgICAgIG1Hb29kTGlua1RhcmdldENvdW50ID0gMTsKLSAgICAgICAgICAgIG1Cc3NpZEF2b2lkVGltZU1heCA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpICsgTUFYX0FWT0lEX1RJTUVbMF0uVElNRV9NUzsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIk5ldyBsaW5rIHZlcmlmeWluZyB0YXJnZXQgc2V0LCByc3NpPSIgKyBtR29vZExpbmtUYXJnZXRSc3NpICsgIiBjb3VudD0iCi0gICAgICAgICAgICAgICAgICAgICsgbUdvb2RMaW5rVGFyZ2V0Q291bnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybiB0aGUgZmlyc3QgUlNTSSB3aXRoaW4gdGhlIHJhbmdlIHdoZXJlIGxvc3NbcnNzaV0gPCB0aHJlc2hvbGQKLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGZyb20gc3RhcnQgc2Nhbm5pbmcgZnJvbSB0aGlzIFJTU0kKLSAgICAgICAgICogQHBhcmFtIHRvIHN0b3Agc2Nhbm5pbmcgYXQgdGhpcyBSU1NJCi0gICAgICAgICAqIEBwYXJhbSB0aHJlc2hvbGQgdGFyZ2V0IHRocmVzaG9sZCBmb3Igc2Nhbm5pbmcKLSAgICAgICAgICogQHJldHVybiB0YXJnZXQgUlNTSQotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBmaW5kUnNzaVRhcmdldChpbnQgZnJvbSwgaW50IHRvLCBkb3VibGUgdGhyZXNob2xkKSB7Ci0gICAgICAgICAgICBmcm9tIC09IG1Sc3NpQmFzZTsKLSAgICAgICAgICAgIHRvIC09IG1Sc3NpQmFzZTsKLSAgICAgICAgICAgIGludCBlbXB0eUNvdW50ID0gMDsKLSAgICAgICAgICAgIGludCBkID0gZnJvbSA8IHRvID8gMSA6IC0xOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IGZyb207IGkgIT0gdG87IGkgKz0gZCkKLSAgICAgICAgICAgICAgICAvLyBkb24ndCB1c2UgYSBkYXRhIHBvaW50IGlmIGl0IHZvbHVtZSBpcyB0b28gc21hbGwgKHN0YXRpc3RpY2FsbHkgdW5yZWxpYWJsZSkKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSAwICYmIGkgPCBtRW50cmllc1NpemUgJiYgbUVudHJpZXNbaV0ubVZvbHVtZSA+IDEuMCkgewotICAgICAgICAgICAgICAgICAgICBlbXB0eUNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1FbnRyaWVzW2ldLm1WYWx1ZSA8IHRocmVzaG9sZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2NhbiB0YXJnZXQgZm91bmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCByc3NpID0gbVJzc2lCYXNlICsgaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoIiMuIyMiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dkKCJTY2FuIHRhcmdldCBmb3VuZDogcnNzaT0iICsgcnNzaSArICIgdGhyZXNob2xkPSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZGYuZm9ybWF0KHRocmVzaG9sZCAqIDEwMCkgKyAiJSB2YWx1ZT0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGRmLmZvcm1hdChtRW50cmllc1tpXS5tVmFsdWUgKiAxMDApICsgIiUgdm9sdW1lPSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZGYuZm9ybWF0KG1FbnRyaWVzW2ldLm1Wb2x1bWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByc3NpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgrK2VtcHR5Q291bnQgPj0gQlNTSURfU1RBVF9FTVBUWV9DT1VOVCkgewotICAgICAgICAgICAgICAgICAgICAvLyBjYWNoZSBoYXMgaW5zdWZmaWNpZW50IGRhdGEgYXJvdW5kIHRoaXMgUlNTSSwgdXNlIHByZXNldCBsb3NzIGluc3RlYWQKLSAgICAgICAgICAgICAgICAgICAgaW50IHJzc2kgPSBtUnNzaUJhc2UgKyBpOwotICAgICAgICAgICAgICAgICAgICBkb3VibGUgbG9zc1ByZXNldCA9IHByZXNldExvc3MocnNzaSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb3NzUHJlc2V0IDwgdGhyZXNob2xkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCIjLiMjIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZCgiU2NhbiB0YXJnZXQgZm91bmQ6IHJzc2k9IiArIHJzc2kgKyAiIHRocmVzaG9sZD0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGRmLmZvcm1hdCh0aHJlc2hvbGQgKiAxMDApICsgIiUgdmFsdWU9IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBkZi5mb3JtYXQobG9zc1ByZXNldCAqIDEwMCkgKyAiJSB2b2x1bWU9cHJlc2V0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnNzaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG1Sc3NpQmFzZSArIHRvOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV3BzSW5mby5qYXZhIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV3BzSW5mby5qYXZhCmluZGV4IGI4MGRmMjEuLjJhZDRhZDAgMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dwc0luZm8uamF2YQorKysgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XcHNJbmZvLmphdmEKQEAgLTE5LDggKzE5LDYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiAKLWltcG9ydCBqYXZhLnV0aWwuQml0U2V0OwotCiAvKioKICAqIEEgY2xhc3MgcmVwcmVzZW50aW5nIFdpLUZpIFByb3RlY3RlZCBTZXR1cAogICoKZGlmZiAtLWdpdCBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwQ29uZmlnLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycENvbmZpZy5qYXZhCmluZGV4IDQ4MmQ5Y2IuLmIwMTlmZDcgMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwQ29uZmlnLmphdmEKKysrIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBDb25maWcuamF2YQpAQCAtNjAsNyArNjAsOCBAQAogICAgICAgICB3cHMuc2V0dXAgPSBXcHNJbmZvLlBCQzsKICAgICB9CiAKLSAgICB2b2lkIGludmFsaWRhdGUoKSB7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHZvaWQgaW52YWxpZGF0ZSgpIHsKICAgICAgICAgZGV2aWNlQWRkcmVzcyA9ICIiOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBEZXZpY2UuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwRGV2aWNlLmphdmEKaW5kZXggNzE5NmMxYi4uYTBjYjAzNSAxMDA2NDQKLS0tIGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBEZXZpY2UuamF2YQorKysgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycERldmljZS5qYXZhCkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgImNvbmZpZ19tZXRob2RzPSgweFswLTlhLWZBLUZdKykgIiArCiAgICAgICAgICJkZXZfY2FwYWI9KDB4WzAtOWEtZkEtRl0rKSAiICsKICAgICAgICAgImdyb3VwX2NhcGFiPSgweFswLTlhLWZBLUZdKykiICsKLSAgICAgICAgIiggd2ZkX2Rldl9pbmZvPTB4MDAwMDA2KFswLTlhLWZBLUZdezEyfSkpPyIKKyAgICAgICAgIiggd2ZkX2Rldl9pbmZvPTB4KFswLTlhLWZBLUZdezEyfSkpPyIKICAgICApOwogCiAgICAgLyoqIDIgdG9rZW4gZGV2aWNlIGFkZHJlc3MgcGF0dGVybgpAQCAtMjc0LDcgKzI3NCw3IEBACiAgICAgfQogCiAgICAgLyoqIFVwZGF0ZXMgZGV0YWlscyBvYnRhaW5lZCBmcm9tIHN1cHBsaWNhbnQgQGhpZGUgKi8KLSAgICB2b2lkIHVwZGF0ZVN1cHBsaWNhbnREZXRhaWxzKFdpZmlQMnBEZXZpY2UgZGV2aWNlKSB7CisgICAgcHVibGljIHZvaWQgdXBkYXRlU3VwcGxpY2FudERldGFpbHMoV2lmaVAycERldmljZSBkZXZpY2UpIHsKICAgICAgICAgaWYgKGRldmljZSA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJkZXZpY2UgaXMgbnVsbCIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycERldmljZUxpc3QuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwRGV2aWNlTGlzdC5qYXZhCmluZGV4IDA5MDAzNTEuLjNkMGJiM2QgMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwRGV2aWNlTGlzdC5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwRGV2aWNlTGlzdC5qYXZhCkBAIC0yMCw3ICsyMCw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAuV2lmaVAycERldmljZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwpAQCAtOTAsNyArODksNyBAQAogICAgIH0KIAogICAgIC8qKiBPbmx5IHVwZGF0ZXMgZGV0YWlscyBmZXRjaGVkIGZyb20gdGhlIHN1cHBsaWNhbnQgQGhpZGUgKi8KLSAgICB2b2lkIHVwZGF0ZVN1cHBsaWNhbnREZXRhaWxzKFdpZmlQMnBEZXZpY2UgZGV2aWNlKSB7CisgICAgcHVibGljIHZvaWQgdXBkYXRlU3VwcGxpY2FudERldGFpbHMoV2lmaVAycERldmljZSBkZXZpY2UpIHsKICAgICAgICAgdmFsaWRhdGVEZXZpY2UoZGV2aWNlKTsKICAgICAgICAgV2lmaVAycERldmljZSBkID0gbURldmljZXMuZ2V0KGRldmljZS5kZXZpY2VBZGRyZXNzKTsKICAgICAgICAgaWYgKGQgIT0gbnVsbCkgewpAQCAtMTA4LDcgKzEwNyw3IEBACiAgICAgfQogCiAgICAgLyoqIEBoaWRlICovCi0gICAgdm9pZCB1cGRhdGVHcm91cENhcGFiaWxpdHkoU3RyaW5nIGRldmljZUFkZHJlc3MsIGludCBncm91cENhcGFiKSB7CisgICAgcHVibGljIHZvaWQgdXBkYXRlR3JvdXBDYXBhYmlsaXR5KFN0cmluZyBkZXZpY2VBZGRyZXNzLCBpbnQgZ3JvdXBDYXBhYikgewogICAgICAgICB2YWxpZGF0ZURldmljZUFkZHJlc3MoZGV2aWNlQWRkcmVzcyk7CiAgICAgICAgIFdpZmlQMnBEZXZpY2UgZCA9IG1EZXZpY2VzLmdldChkZXZpY2VBZGRyZXNzKTsKICAgICAgICAgaWYgKGQgIT0gbnVsbCkgewpAQCAtMTE3LDcgKzExNiw3IEBACiAgICAgfQogCiAgICAgLyoqIEBoaWRlICovCi0gICAgdm9pZCB1cGRhdGVTdGF0dXMoU3RyaW5nIGRldmljZUFkZHJlc3MsIGludCBzdGF0dXMpIHsKKyAgICBwdWJsaWMgdm9pZCB1cGRhdGVTdGF0dXMoU3RyaW5nIGRldmljZUFkZHJlc3MsIGludCBzdGF0dXMpIHsKICAgICAgICAgdmFsaWRhdGVEZXZpY2VBZGRyZXNzKGRldmljZUFkZHJlc3MpOwogICAgICAgICBXaWZpUDJwRGV2aWNlIGQgPSBtRGV2aWNlcy5nZXQoZGV2aWNlQWRkcmVzcyk7CiAgICAgICAgIGlmIChkICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwR3JvdXBMaXN0LmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycEdyb3VwTGlzdC5qYXZhCmluZGV4IDk4ZjA5NzIuLjY0YmIwMGIgMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwR3JvdXBMaXN0LmphdmEKKysrIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvcDJwL1dpZmlQMnBHcm91cExpc3QuamF2YQpAQCAtNDIsMTEgKzQyLDEzIEBACiAgICAgICAgIHB1YmxpYyB2b2lkIG9uRGVsZXRlR3JvdXAoaW50IG5ldElkKTsKICAgICB9CiAKLSAgICBXaWZpUDJwR3JvdXBMaXN0KCkgeworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBXaWZpUDJwR3JvdXBMaXN0KCkgewogICAgICAgICB0aGlzKG51bGwsIG51bGwpOwogICAgIH0KIAotICAgIFdpZmlQMnBHcm91cExpc3QoV2lmaVAycEdyb3VwTGlzdCBzb3VyY2UsIEdyb3VwRGVsZXRlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgV2lmaVAycEdyb3VwTGlzdChXaWZpUDJwR3JvdXBMaXN0IHNvdXJjZSwgR3JvdXBEZWxldGVMaXN0ZW5lciBsaXN0ZW5lcikgewogICAgICAgICBtTGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgICAgICAgbUdyb3VwcyA9IG5ldyBMcnVDYWNoZTxJbnRlZ2VyLCBXaWZpUDJwR3JvdXA+KENSRURFTlRJQUxfTUFYX05VTSkgewogICAgICAgICAgICAgQE92ZXJyaWRlCkBAIC03OCw4ICs4MCw5IEBACiAgICAgICogQWRkIHRoZSBzcGVjaWZpZWQgZ3JvdXAgdG8gdGhpcyBncm91cCBsaXN0LgogICAgICAqCiAgICAgICogQHBhcmFtIGdyb3VwCisgICAgICogQGhpZGUKICAgICAgKi8KLSAgICB2b2lkIGFkZChXaWZpUDJwR3JvdXAgZ3JvdXApIHsKKyAgICBwdWJsaWMgdm9pZCBhZGQoV2lmaVAycEdyb3VwIGdyb3VwKSB7CiAgICAgICAgIG1Hcm91cHMucHV0KGdyb3VwLmdldE5ldHdvcmtJZCgpLCBncm91cCk7CiAgICAgfQogCkBAIC04Nyw4ICs5MCw5IEBACiAgICAgICogUmVtb3ZlIHRoZSBncm91cCB3aXRoIHRoZSBzcGVjaWZpZWQgbmV0d29yayBpZCBmcm9tIHRoaXMgZ3JvdXAgbGlzdC4KICAgICAgKgogICAgICAqIEBwYXJhbSBuZXRJZAorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgdm9pZCByZW1vdmUoaW50IG5ldElkKSB7CisgICAgcHVibGljIHZvaWQgcmVtb3ZlKGludCBuZXRJZCkgewogICAgICAgICBtR3JvdXBzLnJlbW92ZShuZXRJZCk7CiAgICAgfQogCkBAIC0xMDMsOCArMTA3LDkgQEAKIAogICAgIC8qKgogICAgICAqIENsZWFyIHRoZSBncm91cC4KKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIGJvb2xlYW4gY2xlYXIoKSB7CisgICAgcHVibGljIGJvb2xlYW4gY2xlYXIoKSB7CiAgICAgICAgIGlmIChtR3JvdXBzLnNpemUoKSA9PSAwKSByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlzQ2xlYXJDYWxsZWQgPSB0cnVlOwogICAgICAgICBtR3JvdXBzLmV2aWN0QWxsKCk7CkBAIC0xMjAsOCArMTI1LDkgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBkZXZpY2VBZGRyZXNzIHAycCBkZXZpY2UgYWRkcmVzcy4KICAgICAgKiBAcmV0dXJuIHRoZSBuZXR3b3JrIGlkLiBpZiBub3QgZm91bmQsIHJldHVybiAtMS4KKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIGludCBnZXROZXR3b3JrSWQoU3RyaW5nIGRldmljZUFkZHJlc3MpIHsKKyAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtJZChTdHJpbmcgZGV2aWNlQWRkcmVzcykgewogICAgICAgICBpZiAoZGV2aWNlQWRkcmVzcyA9PSBudWxsKSByZXR1cm4gLTE7CiAKICAgICAgICAgZmluYWwgQ29sbGVjdGlvbjxXaWZpUDJwR3JvdXA+IGdyb3VwcyA9IG1Hcm91cHMuc25hcHNob3QoKS52YWx1ZXMoKTsKQEAgLTE0Miw4ICsxNDgsOSBAQAogICAgICAqIEBwYXJhbSBkZXZpY2VBZGRyZXNzIHAycCBkZXZpY2UgYWRkcmVzcy4KICAgICAgKiBAcGFyYW0gc3NpZCBzc2lkLgogICAgICAqIEByZXR1cm4gdGhlIG5ldHdvcmsgaWQuIGlmIG5vdCBmb3VuZCwgcmV0dXJuIC0xLgorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgaW50IGdldE5ldHdvcmtJZChTdHJpbmcgZGV2aWNlQWRkcmVzcywgU3RyaW5nIHNzaWQpIHsKKyAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtJZChTdHJpbmcgZGV2aWNlQWRkcmVzcywgU3RyaW5nIHNzaWQpIHsKICAgICAgICAgaWYgKGRldmljZUFkZHJlc3MgPT0gbnVsbCB8fCBzc2lkID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQpAQCAtMTY2LDggKzE3Myw5IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayBpZC4KICAgICAgKiBAcmV0dXJuIHRoZSBhZGRyZXNzLiBpZiBub3QgZm91bmQsIHJldHVybiBudWxsLgorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgU3RyaW5nIGdldE93bmVyQWRkcihpbnQgbmV0SWQpIHsKKyAgICBwdWJsaWMgU3RyaW5nIGdldE93bmVyQWRkcihpbnQgbmV0SWQpIHsKICAgICAgICAgV2lmaVAycEdyb3VwIGdycCA9IG1Hcm91cHMuZ2V0KG5ldElkKTsKICAgICAgICAgaWYgKGdycCAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gZ3JwLmdldE93bmVyKCkuZGV2aWNlQWRkcmVzczsKQEAgLTE4Miw4ICsxOTAsOSBAQAogICAgICAqCiAgICAgICogQHBhcmFtIG5ldElkIG5ldHdvcmsgaWQuCiAgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgbmV0d29yayBpZCBpcyBwcmVzZW50IGluIHRoaXMgZ3JvdXAgbGlzdC4KKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIGJvb2xlYW4gY29udGFpbnMoaW50IG5ldElkKSB7CisgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnMoaW50IG5ldElkKSB7CiAgICAgICAgIGZpbmFsIENvbGxlY3Rpb248V2lmaVAycEdyb3VwPiBncm91cHMgPSBtR3JvdXBzLnNuYXBzaG90KCkudmFsdWVzKCk7CiAgICAgICAgIGZvciAoV2lmaVAycEdyb3VwIGdycDogZ3JvdXBzKSB7CiAgICAgICAgICAgICBpZiAobmV0SWQgPT0gZ3JwLmdldE5ldHdvcmtJZCgpKSB7CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycE1hbmFnZXIuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlci5qYXZhCmluZGV4IDQ5ODhiOTIuLjNlZDI0MDYgMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlci5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwTWFuYWdlci5qYXZhCkBAIC0xOSw4ICsxOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlNka0NvbnN0YW50OwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudC5TZGtDb25zdGFudFR5cGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5JQ29ubmVjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldwc0luZm87CiBpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAubnNkLldpZmlQMnBEbnNTZFNlcnZpY2VJbmZvOwogaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLm5zZC5XaWZpUDJwRG5zU2RTZXJ2aWNlUmVzcG9uc2U7CkBAIC0yOSwxNiArMjcsMTIgQEAKIGltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5uc2QuV2lmaVAycFNlcnZpY2VSZXNwb25zZTsKIGltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5uc2QuV2lmaVAycFVwbnBTZXJ2aWNlSW5mbzsKIGltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5uc2QuV2lmaVAycFVwbnBTZXJ2aWNlUmVzcG9uc2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzZW5nZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLldvcmtTb3VyY2U7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycFByb3ZEaXNjRXZlbnQuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwUHJvdkRpc2NFdmVudC5qYXZhCmluZGV4IGIzZjM0YjQuLjk4NjgzY2IgMTAwNjQ0Ci0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwUHJvdkRpc2NFdmVudC5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwUHJvdkRpc2NFdmVudC5qYXZhCkBAIC0xNiwxMCArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQubmV0LndpZmkucDJwOwogCi1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KIC8qKgogICogQSBjbGFzcyByZXByZXNlbnRpbmcgYSBXaS1GaSBwMnAgcHJvdmlzaW9uYWwgZGlzY292ZXJ5IHJlcXVlc3QvcmVzcG9uc2UKICAqIFNlZSB7QGxpbmsgI1dpZmlQMnBQcm92RGlzY0V2ZW50fSBmb3Igc3VwcG9ydGVkIHR5cGVzCmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvV2lmaVAycFNlcnZpY2UuamF2YSBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjA3MjA4Li4wMDAwMDAwCi0tLSBhL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL3AycC9XaWZpUDJwU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjk1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBhbmRyb2lkLm5ldC53aWZpLnAycDsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nOwotaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKLWltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb25NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZS5PbkNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuSUNvbm5lY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5EaGNwUmVzdWx0czsKLWltcG9ydCBhbmRyb2lkLm5ldC5EaGNwU3RhdGVNYWNoaW5lOwotaW1wb3J0IGFuZHJvaWQubmV0LkludGVyZmFjZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTGlua0FkZHJlc3M7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTGlua1Byb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya0luZm87Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya1V0aWxzOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpTW9uaXRvcjsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlOYXRpdmU7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpU3RhdGVNYWNoaW5lOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV3BzSW5mbzsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5XaWZpUDJwR3JvdXBMaXN0Lkdyb3VwRGVsZXRlTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5wMnAubnNkLldpZmlQMnBTZXJ2aWNlSW5mbzsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLnAycC5uc2QuV2lmaVAycFNlcnZpY2VSZXF1ZXN0OwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkucDJwLm5zZC5XaWZpUDJwU2VydmljZVJlc3BvbnNlOwotaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklOZXR3b3JrTWFuYWdlbWVudFNlcnZpY2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzZW5nZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC50ZWxlcGhvbnkuVGVsZXBob255SW50ZW50czsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFzeW5jQ2hhbm5lbDsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByb3RvY29sOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuU3RhdGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5TdGF0ZU1hY2hpbmU7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotCi0KLS8qKgotICogV2lmaVAycFNlcnZpY2UgaW5jbHVkZXMgYSBzdGF0ZSBtYWNoaW5lIHRvIHBlcmZvcm0gV2ktRmkgcDJwIG9wZXJhdGlvbnMuIEFwcGxpY2F0aW9ucwotICogY29tbXVuaWNhdGUgd2l0aCB0aGlzIHNlcnZpY2UgdG8gaXNzdWUgZGV2aWNlIGRpc2NvdmVyeSBhbmQgY29ubmVjdGl2aXR5IHJlcXVlc3RzCi0gKiB0aHJvdWdoIHRoZSBXaWZpUDJwTWFuYWdlciBpbnRlcmZhY2UuIFRoZSBzdGF0ZSBtYWNoaW5lIGNvbW11bmljYXRlcyB3aXRoIHRoZSB3aWZpCi0gKiBkcml2ZXIgdGhyb3VnaCB3cGFfc3VwcGxpY2FudCBhbmQgaGFuZGxlcyB0aGUgZXZlbnQgcmVzcG9uc2VzIHRocm91Z2ggV2lmaU1vbml0b3IuCi0gKgotICogTm90ZSB0aGF0IHRoZSB0ZXJtIFdpZmkgd2hlbiB1c2VkIHdpdGhvdXQgYSBwMnAgc3VmZml4IHJlZmVycyB0byB0aGUgY2xpZW50IG1vZGUKLSAqIG9mIFdpZmkgb3BlcmF0aW9uCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgV2lmaVAycFNlcnZpY2UgZXh0ZW5kcyBJV2lmaVAycE1hbmFnZXIuU3R1YiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXaWZpUDJwU2VydmljZSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBEQkcgPSBmYWxzZTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVUV09SS1RZUEUgPSAiV0lGSV9QMlAiOwotCi0gICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgU3RyaW5nIG1JbnRlcmZhY2U7Ci0gICAgcHJpdmF0ZSBOb3RpZmljYXRpb24gbU5vdGlmaWNhdGlvbjsKLQotICAgIElOZXR3b3JrTWFuYWdlbWVudFNlcnZpY2UgbU53U2VydmljZTsKLSAgICBwcml2YXRlIERoY3BTdGF0ZU1hY2hpbmUgbURoY3BTdGF0ZU1hY2hpbmU7Ci0KLSAgICBwcml2YXRlIFAycFN0YXRlTWFjaGluZSBtUDJwU3RhdGVNYWNoaW5lOwotICAgIHByaXZhdGUgQXN5bmNDaGFubmVsIG1SZXBseUNoYW5uZWwgPSBuZXcgQXN5bmNDaGFubmVsKCk7Ci0gICAgcHJpdmF0ZSBBc3luY0NoYW5uZWwgbVdpZmlDaGFubmVsOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQm9vbGVhbiBKT0lOX0dST1VQID0gdHJ1ZTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCb29sZWFuIEZPUk1fR1JPVVAgPSBmYWxzZTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJvb2xlYW4gUkVMT0FEID0gdHJ1ZTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCb29sZWFuIE5PX1JFTE9BRCA9IGZhbHNlOwotCi0gICAgLyogVHdvIG1pbnV0ZXMgY29tZXMgZnJvbSB0aGUgd3BhX3N1cHBsaWNhbnQgc2V0dGluZyAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBHUk9VUF9DUkVBVElOR19XQUlUX1RJTUVfTVMgPSAxMjAgKiAxMDAwOwotICAgIHByaXZhdGUgc3RhdGljIGludCBtR3JvdXBDcmVhdGluZ1RpbWVvdXRJbmRleCA9IDA7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRElTQUJMRV9QMlBfV0FJVF9USU1FX01TID0gNSAqIDEwMDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IG1EaXNhYmxlUDJwVGltZW91dEluZGV4ID0gMDsKLQotICAgIC8qIFNldCBhIHR3byBtaW51dGUgZGlzY292ZXIgdGltZW91dCB0byBhdm9pZCBTVEEgc2NhbnMgZnJvbSBiZWluZyBibG9ja2VkICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERJU0NPVkVSX1RJTUVPVVRfUyA9IDEyMDsKLQotICAgIC8qIElkbGUgdGltZSBhZnRlciBhIHBlZXIgaXMgZ29uZSB3aGVuIHRoZSBncm91cCBpcyB0b3JuIGRvd24gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgR1JPVVBfSURMRV9USU1FX1MgPSAxMDsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCQVNFID0gUHJvdG9jb2wuQkFTRV9XSUZJX1AyUF9TRVJWSUNFOwotCi0gICAgLyogRGVsYXllZCBtZXNzYWdlIHRvIHRpbWVvdXQgZ3JvdXAgY3JlYXRpb24gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHUk9VUF9DUkVBVElOR19USU1FRF9PVVQgICAgICAgID0gICBCQVNFICsgMTsKLQotICAgIC8qIFVzZXIgYWNjZXB0ZWQgYSBwZWVyIHJlcXVlc3QgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUEVFUl9DT05ORUNUSU9OX1VTRVJfQUNDRVBUICAgID0gICBCQVNFICsgMjsKLSAgICAvKiBVc2VyIHJlamVjdGVkIGEgcGVlciByZXF1ZXN0ICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBFRVJfQ09OTkVDVElPTl9VU0VSX1JFSkVDVCAgICA9ICAgQkFTRSArIDM7Ci0gICAgLyogVXNlciB3YW50cyB0byBkaXNjb25uZWN0IHdpZmkgaW4gZmF2b3VyIG9mIHAycCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEUk9QX1dJRklfVVNFUl9BQ0NFUFQgICAgICAgICAgPSAgIEJBU0UgKyA0OwotICAgIC8qIFVzZXIgd2FudHMgdG8ga2VlcCBoaXMgd2lmaSBjb25uZWN0aW9uIGFuZCBkcm9wIHAycCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEUk9QX1dJRklfVVNFUl9SRUpFQ1QgICAgICAgICAgPSAgIEJBU0UgKyA1OwotICAgIC8qIERlbGF5ZWQgbWVzc2FnZSB0byB0aW1lb3V0IHAycCBkaXNhYmxlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElTQUJMRV9QMlBfVElNRURfT1VUICAgICAgICAgICA9ICAgQkFTRSArIDY7Ci0KLQotICAgIC8qIENvbW1hbmRzIHRvIHRoZSBXaWZpU3RhdGVNYWNoaW5lICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUDJQX0NPTk5FQ1RJT05fQ0hBTkdFRCAgICAgICAgICA9ICAgQkFTRSArIDExOwotCi0gICAgLyogVGhlc2UgY29tbWFuZHMgYXJlIHVzZWQgdG8gdGVtcG9yYXJpbHkgZGlzY29ubmVjdCB3aWZpIHdoZW4gd2UgZGV0ZWN0Ci0gICAgICogYSBmcmVxdWVuY3kgY29uZmxpY3Qgd2hpY2ggd291bGQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIGhhdmUgd2l0aCBwMnAKLSAgICAgKiBhbmQgd2lmaSBhY3RpdmUgYXQgdGhlIHNhbWUgdGltZS4KLSAgICAgKgotICAgICAqIElmIHRoZSB1c2VyIGNob29zZXMgdG8gZGlzYWJsZSB3aWZpIHRlbXBvcmFyaWx5LCB3ZSBrZWVwIHdpZmkgZGlzY29ubmVjdGVkCi0gICAgICogdW50aWwgdGhlIHAycCBjb25uZWN0aW9uIGlzIGRvbmUgYW5kIHRlcm1pbmF0ZWQgYXQgd2hpY2ggcG9pbnQgd2Ugd2lsbAotICAgICAqIGJyaW5nIGJhY2sgd2lmaSB1cAotICAgICAqCi0gICAgICogRElTQ09OTkVDVF9XSUZJX1JFUVVFU1QKLSAgICAgKiAgICAgIG1zZy5hcmcxID0gMSBlbmFibGVzIHRlbXBvcmFyeSBkaXNjb25uZWN0IGFuZCAwIGRpc2FibGVzIGl0LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERJU0NPTk5FQ1RfV0lGSV9SRVFVRVNUICAgICAgICAgPSAgIEJBU0UgKyAxMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESVNDT05ORUNUX1dJRklfUkVTUE9OU0UgICAgICAgID0gICBCQVNFICsgMTM7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVRfTUlSQUNBU1RfTU9ERSAgICAgICAgICAgICAgID0gICBCQVNFICsgMTQ7Ci0KLSAgICAvLyBEdXJpbmcgZGhjcCAoYW5kIHBlcmhhcHMgb3RoZXIgdGltZXMpIHdlIGNhbid0IGFmZm9yZCB0byBkcm9wIHBhY2tldHMKLSAgICAvLyBidXQgRGlzY292ZXJ5IHdpbGwgc3dpdGNoIG91ciBjaGFubmVsIGVub3VnaCB3ZSB3aWxsLgotICAgIC8vICAgbXNnLmFyZzEgPSBFTkFCTEVEIGZvciBibG9ja2luZywgRElTQUJMRUQgZm9yIHJlc3VtZWQuCi0gICAgLy8gICBtc2cuYXJnMiA9IG1zZyB0byBzZW5kIHdoZW4gYmxvY2tlZAotICAgIC8vICAgbXNnLm9iaiAgPSBTdGF0ZU1hY2hpbmUgdG8gc2VuZCB0byB3aGVuIGJsb2NrZWQKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCTE9DS19ESVNDT1ZFUlkgICAgICAgICAgICAgICAgID0gICBCQVNFICsgMTU7Ci0KLSAgICAvLyBzZXQgY291bnRyeSBjb2RlCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VUX0NPVU5UUllfQ09ERSAgICAgICAgICAgICAgICA9ICAgQkFTRSArIDE2OwotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRElTQUJMRUQgICAgICAgICAgICAgICAgICAgICAgICA9IDA7Ci0KLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVAycFN1cHBvcnRlZDsKLQotICAgIHByaXZhdGUgV2lmaVAycERldmljZSBtVGhpc0RldmljZSA9IG5ldyBXaWZpUDJwRGV2aWNlKCk7Ci0KLSAgICAvKiBXaGVuIGEgZ3JvdXAgaGFzIGJlZW4gZXhwbGljaXRseSBjcmVhdGVkIGJ5IGFuIGFwcCwgd2UgcGVyc2lzdCB0aGUgZ3JvdXAKLSAgICAgKiBldmVuIGFmdGVyIGFsbCBjbGllbnRzIGhhdmUgYmVlbiBkaXNjb25uZWN0ZWQgdW50aWwgYW4gZXhwbGljaXQgcmVtb3ZlCi0gICAgICogaXMgaW52b2tlZCAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtQXV0b25vbW91c0dyb3VwOwotCi0gICAgLyogSW52aXRhdGlvbiB0byBqb2luIGFuIGV4aXN0aW5nIHAycCBncm91cCAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtSm9pbkV4aXN0aW5nR3JvdXA7Ci0KLSAgICAvKiBUcmFjayB3aGV0aGVyIHdlIGFyZSBpbiBwMnAgZGlzY292ZXJ5LiBUaGlzIGlzIHVzZWQgdG8gYXZvaWQgc2VuZGluZyBkdXBsaWNhdGUKLSAgICAgKiBicm9hZGNhc3RzCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIG1EaXNjb3ZlcnlTdGFydGVkOwotICAgIC8qIFRyYWNrIHdoZXRoZXIgc2VydmNpY2UvcGVlciBkaXNjb3ZlcnkgaXMgYmxvY2tlZCBpbiBmYXZvciBvZiBvdGhlciB3aWZpIGFjdGlvbnMKLSAgICAgKiAobm90YWJseSBkaGNwKQotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtRGlzY292ZXJ5QmxvY2tlZDsKLQotICAgIC8vIFN1cHBsaWNhbnQgZG9lc24ndCBsaWtlIHNldHRpbmcgdGhlIHNhbWUgY291bnRyeSBjb2RlIG11bHRpcGxlIHRpbWVzIChpdCBtYXkgZHJvcAotICAgIC8vIGN1cnJlbnQgY29ubmVjdGVkIG5ldHdvcmspLCBzbyB3ZSBzYXZlIHRoZSBjb3VudHJ5IGNvZGUgaGVyZSB0byBhdm9pZCByZWR1bmRlbmN5Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbUxhc3RTZXRDb3VudHJ5Q29kZTsKLQotICAgIC8qCi0gICAgICogcmVtZW1iZXIgaWYgd2Ugd2VyZSBpbiBhIHNjYW4gd2hlbiBpdCBoYWQgdG8gYmUgc3RvcHBlZAotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBtRGlzY292ZXJ5UG9zdHBvbmVkID0gZmFsc2U7Ci0KLSAgICBwcml2YXRlIE5ldHdvcmtJbmZvIG1OZXR3b3JrSW5mbzsKLQotICAgIHByaXZhdGUgYm9vbGVhbiBtVGVtcG9hcmlseURpc2Nvbm5lY3RlZFdpZmkgPSBmYWxzZTsKLQotICAgIC8qIFRoZSB0cmFuc2FjdGlvbiBJZCBvZiBzZXJ2aWNlIGRpc2NvdmVyeSByZXF1ZXN0ICovCi0gICAgcHJpdmF0ZSBieXRlIG1TZXJ2aWNlVHJhbnNhY3Rpb25JZCA9IDA7Ci0KLSAgICAvKiBTZXJ2aWNlIGRpc2NvdmVyeSByZXF1ZXN0IElEIG9mIHdwYV9zdXBwbGljYW50LgotICAgICAqIG51bGwgbWVhbnMgaXQncyBub3Qgc2V0IHlldC4gKi8KLSAgICBwcml2YXRlIFN0cmluZyBtU2VydmljZURpc2NSZXFJZDsKLQotICAgIC8qIGNsaWVudHMoYXBwbGljYXRpb24pIGluZm9ybWF0aW9uIGxpc3QuICovCi0gICAgcHJpdmF0ZSBIYXNoTWFwPE1lc3NlbmdlciwgQ2xpZW50SW5mbz4gbUNsaWVudEluZm9MaXN0ID0gbmV3IEhhc2hNYXA8TWVzc2VuZ2VyLCBDbGllbnRJbmZvPigpOwotCi0gICAgLyogSXMgY2hvc2VuIGFzIGEgdW5pcXVlIHJhbmdlIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGgKLSAgICAgICB0aGUgcmFuZ2UgZGVmaW5lZCBpbiBUZXRoZXJpbmcuamF2YSAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIERIQ1BfUkFOR0UgPSB7IjE5Mi4xNjguNDkuMiIsICIxOTIuMTY4LjQ5LjI1NCJ9OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWRVJfQUREUkVTUyA9ICIxOTIuMTY4LjQ5LjEiOwotCi0gICAgLyoqCi0gICAgICogRXJyb3IgY29kZSBkZWZpbml0aW9uLgotICAgICAqIHNlZSB0aGUgVGFibGUuOCBpbiB0aGUgV2lGaSBEaXJlY3Qgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGRldGFpbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGVudW0gUDJwU3RhdHVzIHsKLSAgICAgICAgLyogU3VjY2Vzcy4gKi8KLSAgICAgICAgU1VDQ0VTUywKLQotICAgICAgICAvKiBUaGUgdGFyZ2V0IGRldmljZSBpcyBjdXJyZW50bHkgdW5hdmFpbGFibGUuICovCi0gICAgICAgIElORk9STUFUSU9OX0lTX0NVUlJFTlRMWV9VTkFWQUlMQUJMRSwKLQotICAgICAgICAvKiBQcm90b2NvbCBlcnJvci4gKi8KLSAgICAgICAgSU5DT01QQVRJQkxFX1BBUkFNRVRFUlMsCi0KLSAgICAgICAgLyogVGhlIHRhcmdldCBkZXZpY2UgcmVhY2hlZCB0aGUgbGltaXQgb2YgdGhlIG51bWJlciBvZiB0aGUgY29ubmVjdGFibGUgZGV2aWNlLgotICAgICAgICAgKiBGb3IgZXhhbXBsZSwgZGV2aWNlIGxpbWl0IG9yIGdyb3VwIGxpbWl0IGlzIHNldC4gKi8KLSAgICAgICAgTElNSVRfUkVBQ0hFRCwKLQotICAgICAgICAvKiBQcm90b2NvbCBlcnJvci4gKi8KLSAgICAgICAgSU5WQUxJRF9QQVJBTUVURVIsCi0KLSAgICAgICAgLyogVW5hYmxlIHRvIGFjY29tbW9kYXRlIHJlcXVlc3QuICovCi0gICAgICAgIFVOQUJMRV9UT19BQ0NPTU1PREFURV9SRVFVRVNULAotCi0gICAgICAgIC8qIFByZXZpb3VzIHByb3RvY29sIGVycm9yLCBvciBkaXNydXB0aXZlIGJlaGF2aW9yLiAqLwotICAgICAgICBQUkVWSU9VU19QUk9UT0NPTF9FUlJPUiwKLQotICAgICAgICAvKiBUaGVyZSBpcyBubyBjb21tb24gY2hhbm5lbHMgdGhlIGJvdGggZGV2aWNlcyBjYW4gdXNlLiAqLwotICAgICAgICBOT19DT01NT05fQ0hBTk5FTCwKLQotICAgICAgICAvKiBVbmtub3duIHAycCBncm91cC4gRm9yIGV4YW1wbGUsIERldmljZSBBIHRyaWVzIHRvIGludm9rZSB0aGUgcHJldmlvdXMgcGVyc2lzdGVudCBncm91cCwKLSAgICAgICAgICogIGJ1dCBkZXZpY2UgQiBoYXMgcmVtb3ZlZCB0aGUgc3BlY2lmaWVkIGNyZWRlbnRpYWwgYWxyZWFkeS4gKi8KLSAgICAgICAgVU5LTk9XTl9QMlBfR1JPVVAsCi0KLSAgICAgICAgLyogQm90aCBwMnAgZGV2aWNlcyBpbmRpY2F0ZWQgYW4gaW50ZW50IG9mIDE1IGluIGdyb3VwIG93bmVyIG5lZ290aWF0aW9uLiAqLwotICAgICAgICBCT1RIX0dPX0lOVEVOVF8xNSwKLQotICAgICAgICAvKiBJbmNvbXBhdGlibGUgcHJvdmlzaW9uaW5nIG1ldGhvZC4gKi8KLSAgICAgICAgSU5DT01QQVRJQkxFX1BST1ZJU0lPTklOR19NRVRIT0QsCi0KLSAgICAgICAgLyogUmVqZWN0ZWQgYnkgdXNlciAqLwotICAgICAgICBSRUpFQ1RFRF9CWV9VU0VSLAotCi0gICAgICAgIC8qIFVua25vd24gZXJyb3IgKi8KLSAgICAgICAgVU5LTk9XTjsKLQotICAgICAgICBwdWJsaWMgc3RhdGljIFAycFN0YXR1cyB2YWx1ZU9mKGludCBlcnJvcikgewotICAgICAgICAgICAgc3dpdGNoKGVycm9yKSB7Ci0gICAgICAgICAgICBjYXNlIDAgOgotICAgICAgICAgICAgICAgIHJldHVybiBTVUNDRVNTOwotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIHJldHVybiBJTkZPUk1BVElPTl9JU19DVVJSRU5UTFlfVU5BVkFJTEFCTEU7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIElOQ09NUEFUSUJMRV9QQVJBTUVURVJTOwotICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIHJldHVybiBMSU1JVF9SRUFDSEVEOwotICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX1BBUkFNRVRFUjsKLSAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5BQkxFX1RPX0FDQ09NTU9EQVRFX1JFUVVFU1Q7Ci0gICAgICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFBSRVZJT1VTX1BST1RPQ09MX0VSUk9SOwotICAgICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgICAgIHJldHVybiBOT19DT01NT05fQ0hBTk5FTDsKLSAgICAgICAgICAgIGNhc2UgODoKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9QMlBfR1JPVVA7Ci0gICAgICAgICAgICBjYXNlIDk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJPVEhfR09fSU5URU5UXzE1OwotICAgICAgICAgICAgY2FzZSAxMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gSU5DT01QQVRJQkxFX1BST1ZJU0lPTklOR19NRVRIT0Q7Ci0gICAgICAgICAgICBjYXNlIDExOgotICAgICAgICAgICAgICAgIHJldHVybiBSRUpFQ1RFRF9CWV9VU0VSOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBXaWZpUDJwU2VydmljZShDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotCi0gICAgICAgIC8vU1RPUFNISVA6IGdldCB0aGlzIGZyb20gbmF0aXZlIHNpZGUKLSAgICAgICAgbUludGVyZmFjZSA9ICJwMnAwIjsKLSAgICAgICAgbU5ldHdvcmtJbmZvID0gbmV3IE5ldHdvcmtJbmZvKENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9XSUZJX1AyUCwgMCwgTkVUV09SS1RZUEUsICIiKTsKLQotICAgICAgICBtUDJwU3VwcG9ydGVkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5oYXNTeXN0ZW1GZWF0dXJlKAotICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfV0lGSV9ESVJFQ1QpOwotCi0gICAgICAgIG1UaGlzRGV2aWNlLnByaW1hcnlEZXZpY2VUeXBlID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLmNvbmZpZ193aWZpX3AycF9kZXZpY2VfdHlwZSk7Ci0KLSAgICAgICAgbVAycFN0YXRlTWFjaGluZSA9IG5ldyBQMnBTdGF0ZU1hY2hpbmUoVEFHLCBtUDJwU3VwcG9ydGVkKTsKLSAgICAgICAgbVAycFN0YXRlTWFjaGluZS5zdGFydCgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNvbm5lY3Rpdml0eVNlcnZpY2VSZWFkeSgpIHsKLSAgICAgICAgSUJpbmRlciBiID0gU2VydmljZU1hbmFnZXIuZ2V0U2VydmljZShDb250ZXh0Lk5FVFdPUktNQU5BR0VNRU5UX1NFUlZJQ0UpOwotICAgICAgICBtTndTZXJ2aWNlID0gSU5ldHdvcmtNYW5hZ2VtZW50U2VydmljZS5TdHViLmFzSW50ZXJmYWNlKGIpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBlbmZvcmNlQWNjZXNzUGVybWlzc2lvbigpIHsKLSAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5BQ0NFU1NfV0lGSV9TVEFURSwKLSAgICAgICAgICAgICAgICAiV2lmaVAycFNlcnZpY2UiKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZW5mb3JjZUNoYW5nZVBlcm1pc3Npb24oKSB7Ci0gICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uQ0hBTkdFX1dJRklfU1RBVEUsCi0gICAgICAgICAgICAgICAgIldpZmlQMnBTZXJ2aWNlIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVuZm9yY2VDb25uZWN0aXZpdHlJbnRlcm5hbFBlcm1pc3Npb24oKSB7Ci0gICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbigKLSAgICAgICAgICAgICAgICBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uQ09OTkVDVElWSVRZX0lOVEVSTkFMLAotICAgICAgICAgICAgICAgICJXaWZpUDJwU2VydmljZSIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBhIHJlZmVyZW5jZSB0byBoYW5kbGVyLiBUaGlzIGlzIHVzZWQgYnkgYSBjbGllbnQgdG8gZXN0YWJsaXNoCi0gICAgICogYW4gQXN5bmNDaGFubmVsIGNvbW11bmljYXRpb24gd2l0aCBXaWZpUDJwU2VydmljZQotICAgICAqLwotICAgIHB1YmxpYyBNZXNzZW5nZXIgZ2V0TWVzc2VuZ2VyKCkgewotICAgICAgICBlbmZvcmNlQWNjZXNzUGVybWlzc2lvbigpOwotICAgICAgICBlbmZvcmNlQ2hhbmdlUGVybWlzc2lvbigpOwotICAgICAgICByZXR1cm4gbmV3IE1lc3NlbmdlcihtUDJwU3RhdGVNYWNoaW5lLmdldEhhbmRsZXIoKSk7Ci0gICAgfQotCi0gICAgLyoqIFRoaXMgaXMgdXNlZCB0byBwcm92aWRlIGluZm9ybWF0aW9uIHRvIGRyaXZlcnMgdG8gb3B0aW1pemUgcGVyZm9ybWFuY2UgZGVwZW5kaW5nCi0gICAgICogb24gdGhlIGN1cnJlbnQgbW9kZSBvZiBvcGVyYXRpb24uCi0gICAgICogMCAtIGRpc2FibGVkCi0gICAgICogMSAtIHNvdXJjZSBvcGVyYXRpb24KLSAgICAgKiAyIC0gc2luayBvcGVyYXRpb24KLSAgICAgKgotICAgICAqIEFzIGFuIGV4YW1wbGUsIHRoZSBkcml2ZXIgY291bGQgcmVkdWNlIHRoZSBjaGFubmVsIGR3ZWxsIHRpbWUgZHVyaW5nIHNjYW5uaW5nCi0gICAgICogd2hlbiBhY3RpbmcgYXMgYSBzb3VyY2Ugb3Igc2luayB0byBtaW5pbWl6ZSBpbXBhY3Qgb24gbWlyYWNhc3QuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0TWlyYWNhc3RNb2RlKGludCBtb2RlKSB7Ci0gICAgICAgIGVuZm9yY2VDb25uZWN0aXZpdHlJbnRlcm5hbFBlcm1pc3Npb24oKTsKLSAgICAgICAgbVAycFN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShTRVRfTUlSQUNBU1RfTU9ERSwgbW9kZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgZHVtcChGaWxlRGVzY3JpcHRvciBmZCwgUHJpbnRXcml0ZXIgcHcsIFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgaWYgKG1Db250ZXh0LmNoZWNrQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLkRVTVApCi0gICAgICAgICAgICAgICAgIT0gUGFja2FnZU1hbmFnZXIuUEVSTUlTU0lPTl9HUkFOVEVEKSB7Ci0gICAgICAgICAgICBwdy5wcmludGxuKCJQZXJtaXNzaW9uIERlbmlhbDogY2FuJ3QgZHVtcCBXaWZpUDJwU2VydmljZSBmcm9tIGZyb20gcGlkPSIKLSAgICAgICAgICAgICAgICAgICAgKyBCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpCi0gICAgICAgICAgICAgICAgICAgICsgIiwgdWlkPSIgKyBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtUDJwU3RhdGVNYWNoaW5lLmR1bXAoZmQsIHB3LCBhcmdzKTsKLSAgICAgICAgcHcucHJpbnRsbigibUF1dG9ub21vdXNHcm91cCAiICsgbUF1dG9ub21vdXNHcm91cCk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1Kb2luRXhpc3RpbmdHcm91cCAiICsgbUpvaW5FeGlzdGluZ0dyb3VwKTsKLSAgICAgICAgcHcucHJpbnRsbigibURpc2NvdmVyeVN0YXJ0ZWQgIiArIG1EaXNjb3ZlcnlTdGFydGVkKTsKLSAgICAgICAgcHcucHJpbnRsbigibU5ldHdvcmtJbmZvICIgKyBtTmV0d29ya0luZm8pOwotICAgICAgICBwdy5wcmludGxuKCJtVGVtcG9hcmlseURpc2Nvbm5lY3RlZFdpZmkgIiArIG1UZW1wb2FyaWx5RGlzY29ubmVjdGVkV2lmaSk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1TZXJ2aWNlRGlzY1JlcUlkICIgKyBtU2VydmljZURpc2NSZXFJZCk7Ci0gICAgICAgIHB3LnByaW50bG4oKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIEhhbmRsZXMgaW50ZXJhY3Rpb24gd2l0aCBXaWZpU3RhdGVNYWNoaW5lCi0gICAgICovCi0gICAgcHJpdmF0ZSBjbGFzcyBQMnBTdGF0ZU1hY2hpbmUgZXh0ZW5kcyBTdGF0ZU1hY2hpbmUgewotCi0gICAgICAgIHByaXZhdGUgRGVmYXVsdFN0YXRlIG1EZWZhdWx0U3RhdGUgPSBuZXcgRGVmYXVsdFN0YXRlKCk7Ci0gICAgICAgIHByaXZhdGUgUDJwTm90U3VwcG9ydGVkU3RhdGUgbVAycE5vdFN1cHBvcnRlZFN0YXRlID0gbmV3IFAycE5vdFN1cHBvcnRlZFN0YXRlKCk7Ci0gICAgICAgIHByaXZhdGUgUDJwRGlzYWJsaW5nU3RhdGUgbVAycERpc2FibGluZ1N0YXRlID0gbmV3IFAycERpc2FibGluZ1N0YXRlKCk7Ci0gICAgICAgIHByaXZhdGUgUDJwRGlzYWJsZWRTdGF0ZSBtUDJwRGlzYWJsZWRTdGF0ZSA9IG5ldyBQMnBEaXNhYmxlZFN0YXRlKCk7Ci0gICAgICAgIHByaXZhdGUgUDJwRW5hYmxpbmdTdGF0ZSBtUDJwRW5hYmxpbmdTdGF0ZSA9IG5ldyBQMnBFbmFibGluZ1N0YXRlKCk7Ci0gICAgICAgIHByaXZhdGUgUDJwRW5hYmxlZFN0YXRlIG1QMnBFbmFibGVkU3RhdGUgPSBuZXcgUDJwRW5hYmxlZFN0YXRlKCk7Ci0gICAgICAgIC8vIEluYWN0aXZlIGlzIHdoZW4gcDJwIGlzIGVuYWJsZWQgd2l0aCBubyBjb25uZWN0aXZpdHkKLSAgICAgICAgcHJpdmF0ZSBJbmFjdGl2ZVN0YXRlIG1JbmFjdGl2ZVN0YXRlID0gbmV3IEluYWN0aXZlU3RhdGUoKTsKLSAgICAgICAgcHJpdmF0ZSBHcm91cENyZWF0aW5nU3RhdGUgbUdyb3VwQ3JlYXRpbmdTdGF0ZSA9IG5ldyBHcm91cENyZWF0aW5nU3RhdGUoKTsKLSAgICAgICAgcHJpdmF0ZSBVc2VyQXV0aG9yaXppbmdJbnZpdGVSZXF1ZXN0U3RhdGUgbVVzZXJBdXRob3JpemluZ0ludml0ZVJlcXVlc3RTdGF0ZQotICAgICAgICAgICAgICAgID0gbmV3IFVzZXJBdXRob3JpemluZ0ludml0ZVJlcXVlc3RTdGF0ZSgpOwotICAgICAgICBwcml2YXRlIFVzZXJBdXRob3JpemluZ05lZ290aWF0aW9uUmVxdWVzdFN0YXRlIG1Vc2VyQXV0aG9yaXppbmdOZWdvdGlhdGlvblJlcXVlc3RTdGF0ZQotICAgICAgICAgICAgICAgID0gbmV3IFVzZXJBdXRob3JpemluZ05lZ290aWF0aW9uUmVxdWVzdFN0YXRlKCk7Ci0gICAgICAgIHByaXZhdGUgUHJvdmlzaW9uRGlzY292ZXJ5U3RhdGUgbVByb3Zpc2lvbkRpc2NvdmVyeVN0YXRlID0gbmV3IFByb3Zpc2lvbkRpc2NvdmVyeVN0YXRlKCk7Ci0gICAgICAgIHByaXZhdGUgR3JvdXBOZWdvdGlhdGlvblN0YXRlIG1Hcm91cE5lZ290aWF0aW9uU3RhdGUgPSBuZXcgR3JvdXBOZWdvdGlhdGlvblN0YXRlKCk7Ci0gICAgICAgIHByaXZhdGUgRnJlcXVlbmN5Q29uZmxpY3RTdGF0ZSBtRnJlcXVlbmN5Q29uZmxpY3RTdGF0ZSA9bmV3IEZyZXF1ZW5jeUNvbmZsaWN0U3RhdGUoKTsKLQotICAgICAgICBwcml2YXRlIEdyb3VwQ3JlYXRlZFN0YXRlIG1Hcm91cENyZWF0ZWRTdGF0ZSA9IG5ldyBHcm91cENyZWF0ZWRTdGF0ZSgpOwotICAgICAgICBwcml2YXRlIFVzZXJBdXRob3JpemluZ0pvaW5TdGF0ZSBtVXNlckF1dGhvcml6aW5nSm9pblN0YXRlID0gbmV3IFVzZXJBdXRob3JpemluZ0pvaW5TdGF0ZSgpOwotICAgICAgICBwcml2YXRlIE9uZ29pbmdHcm91cFJlbW92YWxTdGF0ZSBtT25nb2luZ0dyb3VwUmVtb3ZhbFN0YXRlID0gbmV3IE9uZ29pbmdHcm91cFJlbW92YWxTdGF0ZSgpOwotCi0gICAgICAgIHByaXZhdGUgV2lmaU5hdGl2ZSBtV2lmaU5hdGl2ZSA9IG5ldyBXaWZpTmF0aXZlKG1JbnRlcmZhY2UpOwotICAgICAgICBwcml2YXRlIFdpZmlNb25pdG9yIG1XaWZpTW9uaXRvciA9IG5ldyBXaWZpTW9uaXRvcih0aGlzLCBtV2lmaU5hdGl2ZSk7Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBXaWZpUDJwRGV2aWNlTGlzdCBtUGVlcnMgPSBuZXcgV2lmaVAycERldmljZUxpc3QoKTsKLSAgICAgICAgLyogRHVyaW5nIGEgY29ubmVjdGlvbiwgc3VwcGxpY2FudCBjYW4gdGVsbCB1cyB0aGF0IGEgZGV2aWNlIHdhcyBsb3N0LiBGcm9tIGEgc3VwcGxpY2FudCdzCi0gICAgICAgICAqIHBlcnNwZWN0aXZlLCB0aGUgZGlzY292ZXJ5IHN0b3BzIGR1cmluZyBjb25uZWN0aW9uIGFuZCBpdCBwdXJnZXMgZGV2aWNlIHNpbmNlIGl0IGRvZXMKLSAgICAgICAgICogbm90IGdldCBsYXRlc3QgdXBkYXRlcyBhYm91dCB0aGUgZGV2aWNlIHdpdGhvdXQgYmVpbmcgaW4gZGlzY292ZXJ5IHN0YXRlLgotICAgICAgICAgKgotICAgICAgICAgKiBGcm9tIHRoZSBmcmFtZXdvcmsgcGVyc3BlY3RpdmUsIHRoZSBkZXZpY2UgaXMgc3RpbGwgdGhlcmUgc2luY2Ugd2UgYXJlIGNvbm5lY3Rpbmcgb3IKLSAgICAgICAgICogY29ubmVjdGVkIHRvIGl0LiBzbyB3ZSBrZWVwIHRoZXNlIGRldmljZXMgaW4gYSBzZXBhcmF0ZSBsaXN0LCBzbyB0aGF0IHRoZXkgYXJlIHJlbW92ZWQKLSAgICAgICAgICogd2hlbiBjb25uZWN0aW9uIGlzIGNhbmNlbGxlZCBvciBsb3N0Ci0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIGZpbmFsIFdpZmlQMnBEZXZpY2VMaXN0IG1QZWVyc0xvc3REdXJpbmdDb25uZWN0aW9uID0gbmV3IFdpZmlQMnBEZXZpY2VMaXN0KCk7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgV2lmaVAycEdyb3VwTGlzdCBtR3JvdXBzID0gbmV3IFdpZmlQMnBHcm91cExpc3QobnVsbCwKLSAgICAgICAgICAgICAgICBuZXcgR3JvdXBEZWxldGVMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25EZWxldGVHcm91cChpbnQgbmV0SWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJjYWxsZWQgb25EZWxldGVHcm91cCgpIG5ldElkPSIgKyBuZXRJZCk7Ci0gICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucmVtb3ZlTmV0d29yayhuZXRJZCk7Ci0gICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2F2ZUNvbmZpZygpOwotICAgICAgICAgICAgICAgIHNlbmRQMnBQZXJzaXN0ZW50R3JvdXBzQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBXaWZpUDJwSW5mbyBtV2lmaVAycEluZm8gPSBuZXcgV2lmaVAycEluZm8oKTsKLSAgICAgICAgcHJpdmF0ZSBXaWZpUDJwR3JvdXAgbUdyb3VwOwotCi0gICAgICAgIC8vIFNhdmVkIFdpZmlQMnBDb25maWcgZm9yIGFuIG9uZ29pbmcgcGVlciBjb25uZWN0aW9uLiBUaGlzIHdpbGwgbmV2ZXIgYmUgbnVsbC4KLSAgICAgICAgLy8gVGhlIGRldmljZUFkZHJlc3Mgd2lsbCBiZSBhbiBlbXB0eSBzdHJpbmcgd2hlbiB0aGUgZGV2aWNlIGlzIGluYWN0aXZlCi0gICAgICAgIC8vIG9yIGlmIGl0IGlzIGNvbm5lY3RlZCB3aXRob3V0IGFueSBvbmdvaW5nIGpvaW4gcmVxdWVzdAotICAgICAgICBwcml2YXRlIFdpZmlQMnBDb25maWcgbVNhdmVkUGVlckNvbmZpZyA9IG5ldyBXaWZpUDJwQ29uZmlnKCk7Ci0KLSAgICAgICAgLy8gU2F2ZWQgV2lmaVAycEdyb3VwIGZyb20gaW52aXRhdGlvbiByZXF1ZXN0Ci0gICAgICAgIHByaXZhdGUgV2lmaVAycEdyb3VwIG1TYXZlZFAycEdyb3VwOwotCi0gICAgICAgIFAycFN0YXRlTWFjaGluZShTdHJpbmcgbmFtZSwgYm9vbGVhbiBwMnBTdXBwb3J0ZWQpIHsKLSAgICAgICAgICAgIHN1cGVyKG5hbWUpOwotCi0gICAgICAgICAgICBhZGRTdGF0ZShtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtUDJwTm90U3VwcG9ydGVkU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1QMnBEaXNhYmxpbmdTdGF0ZSwgbURlZmF1bHRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgYWRkU3RhdGUobVAycERpc2FibGVkU3RhdGUsIG1EZWZhdWx0U3RhdGUpOwotICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1QMnBFbmFibGluZ1N0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShtUDJwRW5hYmxlZFN0YXRlLCBtRGVmYXVsdFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobUluYWN0aXZlU3RhdGUsIG1QMnBFbmFibGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtR3JvdXBDcmVhdGluZ1N0YXRlLCBtUDJwRW5hYmxlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1Vc2VyQXV0aG9yaXppbmdJbnZpdGVSZXF1ZXN0U3RhdGUsIG1Hcm91cENyZWF0aW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobVVzZXJBdXRob3JpemluZ05lZ290aWF0aW9uUmVxdWVzdFN0YXRlLCBtR3JvdXBDcmVhdGluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1Qcm92aXNpb25EaXNjb3ZlcnlTdGF0ZSwgbUdyb3VwQ3JlYXRpbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtR3JvdXBOZWdvdGlhdGlvblN0YXRlLCBtR3JvdXBDcmVhdGluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1GcmVxdWVuY3lDb25mbGljdFN0YXRlLCBtR3JvdXBDcmVhdGluZ1N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUobUdyb3VwQ3JlYXRlZFN0YXRlLCBtUDJwRW5hYmxlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKG1Vc2VyQXV0aG9yaXppbmdKb2luU3RhdGUsIG1Hcm91cENyZWF0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShtT25nb2luZ0dyb3VwUmVtb3ZhbFN0YXRlLCBtR3JvdXBDcmVhdGVkU3RhdGUpOwotCi0gICAgICAgICAgICBpZiAocDJwU3VwcG9ydGVkKSB7Ci0gICAgICAgICAgICAgICAgc2V0SW5pdGlhbFN0YXRlKG1QMnBEaXNhYmxlZFN0YXRlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2V0SW5pdGlhbFN0YXRlKG1QMnBOb3RTdXBwb3J0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRMb2dSZWNTaXplKDUwKTsKLSAgICAgICAgICAgIHNldExvZ09ubHlUcmFuc2l0aW9ucyh0cnVlKTsKLSAgICAgICAgfQotCi0gICAgY2xhc3MgRGVmYXVsdFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgQXN5bmNDaGFubmVsLkNNRF9DSEFOTkVMX0hBTEZfQ09OTkVDVEVEOgotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IEFzeW5jQ2hhbm5lbC5TVEFUVVNfU1VDQ0VTU0ZVTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiRnVsbCBjb25uZWN0aW9uIHdpdGggV2lmaVN0YXRlTWFjaGluZSBlc3RhYmxpc2hlZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlDaGFubmVsID0gKEFzeW5jQ2hhbm5lbCkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJGdWxsIGNvbm5lY3Rpb24gZmFpbHVyZSwgZXJyb3IgPSAiICsgbWVzc2FnZS5hcmcxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpQ2hhbm5lbCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEFzeW5jQ2hhbm5lbC5DTURfQ0hBTk5FTF9ESVNDT05ORUNURUQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFyZzEgPT0gQXN5bmNDaGFubmVsLlNUQVRVU19TRU5EX1VOU1VDQ0VTU0ZVTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiU2VuZCBmYWlsZWQsIGNsaWVudCBjb25uZWN0aW9uIGxvc3QiKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkNsaWVudCBjb25uZWN0aW9uIGxvc3Qgd2l0aCByZWFzb246ICIgKyBtZXNzYWdlLmFyZzEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpQ2hhbm5lbCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBBc3luY0NoYW5uZWwuQ01EX0NIQU5ORUxfRlVMTF9DT05ORUNUSU9OOgotICAgICAgICAgICAgICAgICAgICBBc3luY0NoYW5uZWwgYWMgPSBuZXcgQXN5bmNDaGFubmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFjLmNvbm5lY3QobUNvbnRleHQsIGdldEhhbmRsZXIoKSwgbWVzc2FnZS5yZXBseVRvKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBCTE9DS19ESVNDT1ZFUlk6Ci0gICAgICAgICAgICAgICAgICAgIG1EaXNjb3ZlcnlCbG9ja2VkID0gKG1lc3NhZ2UuYXJnMSA9PSBFTkFCTEVEID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gYWx3YXlzIHJlc2V0IHRoaXMgLSB3ZSB3ZW50IHRvIGEgc3RhdGUgdGhhdCBkb2Vzbid0IHN1cHBvcnQgZGlzY292ZXJ5IHNvCi0gICAgICAgICAgICAgICAgICAgIC8vIGl0IHdvdWxkIGhhdmUgc3RvcHBlZCByZWdhcmRsZXNzCi0gICAgICAgICAgICAgICAgICAgIG1EaXNjb3ZlcnlQb3N0cG9uZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1EaXNjb3ZlcnlCbG9ja2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlTWFjaGluZSBtID0gKFN0YXRlTWFjaGluZSltZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnNlbmRNZXNzYWdlKG1lc3NhZ2UuYXJnMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoInVuYWJsZSB0byBzZW5kIEJMT0NLX0RJU0NPVkVSWSByZXNwb25zZTogIiArIGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfUEVFUlM6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1BFRVJTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVE9QX0RJU0NPVkVSWToKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RPUF9ESVNDT1ZFUllfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1NFUlZJQ0VTOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9TRVJWSUNFU19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ09OTkVDVDoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ09OTkVDVF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ0FOQ0VMX0NPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNBTkNFTF9DT05ORUNUX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DUkVBVEVfR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNSRUFURV9HUk9VUF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0dST1VQOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5SRU1PVkVfR1JPVVBfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkFERF9MT0NBTF9TRVJWSUNFOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5BRERfTE9DQUxfU0VSVklDRV9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0xPQ0FMX1NFUlZJQ0U6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9MT0NBTF9TRVJWSUNFX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DTEVBUl9MT0NBTF9TRVJWSUNFUzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ0xFQVJfTE9DQUxfU0VSVklDRVNfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkFERF9TRVJWSUNFX1JFUVVFU1Q6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkFERF9TRVJWSUNFX1JFUVVFU1RfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9TRVJWSUNFX1JFUVVFU1Q6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX1NFUlZJQ0VfUkVRVUVTVF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ0xFQVJfU0VSVklDRV9SRVFVRVNUUzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5DTEVBUl9TRVJWSUNFX1JFUVVFU1RTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TRVRfREVWSUNFX05BTUU6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNFVF9ERVZJQ0VfTkFNRV9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuREVMRVRFX1BFUlNJU1RFTlRfR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRFTEVURV9QRVJTSVNURU5UX0dST1VQLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNFVF9XRkRfSU5GTzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU0VUX1dGRF9JTkZPX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5CVVNZKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRVFVRVNUX1BFRVJTOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5SRVNQT05TRV9QRUVSUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lmaVAycERldmljZUxpc3QobVBlZXJzKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVRVUVTVF9DT05ORUNUSU9OX0lORk86Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlJFU1BPTlNFX0NPTk5FQ1RJT05fSU5GTywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lmaVAycEluZm8obVdpZmlQMnBJbmZvKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVRVUVTVF9HUk9VUF9JTkZPOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5SRVNQT05TRV9HUk9VUF9JTkZPLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Hcm91cCAhPSBudWxsID8gbmV3IFdpZmlQMnBHcm91cChtR3JvdXApIDogbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVRVUVTVF9QRVJTSVNURU5UX0dST1VQX0lORk86Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlJFU1BPTlNFX1BFUlNJU1RFTlRfR1JPVVBfSU5GTywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2lmaVAycEdyb3VwTGlzdChtR3JvdXBzLCBudWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RBUlRfV1BTOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVEFSVF9XUFNfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9JTlZJVEFUSU9OX1JFU1VMVF9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNDQU5fUkVTVUxUU19FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9DT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuU1VQX0RJU0NPTk5FQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5ORVRXT1JLX0NPTk5FQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5ORVRXT1JLX0RJU0NPTk5FQ1RJT05fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBQTElDQU5UX1NUQVRFX0NIQU5HRV9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLkFVVEhFTlRJQ0FUSU9OX0ZBSUxVUkVfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5XUFNfU1VDQ0VTU19FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLldQU19GQUlMX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuV1BTX09WRVJMQVBfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5XUFNfVElNRU9VVF9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9SRU1PVkVEX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0RFVklDRV9GT1VORF9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9ERVZJQ0VfTE9TVF9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9GSU5EX1NUT1BQRURfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfU0VSVl9ESVNDX1JFU1BfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBQRUVSX0NPTk5FQ1RJT05fVVNFUl9BQ0NFUFQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBQRUVSX0NPTk5FQ1RJT05fVVNFUl9SRUpFQ1Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBESVNDT05ORUNUX1dJRklfUkVTUE9OU0U6Ci0gICAgICAgICAgICAgICAgY2FzZSBEUk9QX1dJRklfVVNFUl9BQ0NFUFQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBEUk9QX1dJRklfVVNFUl9SRUpFQ1Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBHUk9VUF9DUkVBVElOR19USU1FRF9PVVQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBESVNBQkxFX1AyUF9USU1FRF9PVVQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBEaGNwU3RhdGVNYWNoaW5lLkNNRF9QUkVfREhDUF9BQ1RJT046Ci0gICAgICAgICAgICAgICAgY2FzZSBEaGNwU3RhdGVNYWNoaW5lLkNNRF9QT1NUX0RIQ1BfQUNUSU9OOgotICAgICAgICAgICAgICAgIGNhc2UgRGhjcFN0YXRlTWFjaGluZS5DTURfT05fUVVJVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfRkFJTFVSRV9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFNFVF9NSVJBQ0FTVF9NT0RFOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RBUlRfTElTVEVOOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RPUF9MSVNURU46Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TRVRfQ0hBTk5FTDoKLSAgICAgICAgICAgICAgICBjYXNlIFNFVF9DT1VOVFJZX0NPREU6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfRU5BQkxFX1AyUDoKLSAgICAgICAgICAgICAgICAgICAgLy8gRW5hYmxlIGlzIGxhenkgYW5kIGhhcyBubyByZXNwb25zZQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0RJU0FCTEVfUDJQX1JFUToKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZW5kIHVwIGhhbmRsaW5nIGluIGRlZmF1bHQsIHAycCBpcyBub3QgZW5hYmxlZAotICAgICAgICAgICAgICAgICAgICBtV2lmaUNoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaVN0YXRlTWFjaGluZS5DTURfRElTQUJMRV9QMlBfUlNQKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8qIHVuZXhwZWN0ZWQgZ3JvdXAgY3JlYXRlZCwgcmVtb3ZlICovCi0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfU1RBUlRFRF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgbUdyb3VwID0gKFdpZmlQMnBHcm91cCkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoIlVuZXhwZWN0ZWQgZ3JvdXAgY3JlYXRpb24sIHJlbW92ZSAiICsgbUdyb3VwKTsKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwR3JvdXBSZW1vdmUobUdyb3VwLmdldEludGVyZmFjZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgLy8gQSBncm91cCBmb3JtYXRpb24gZmFpbHVyZSBpcyBhbHdheXMgZm9sbG93ZWQgYnkKLSAgICAgICAgICAgICAgICAvLyBhIGdyb3VwIHJlbW92ZWQgZXZlbnQuIEZsdXNoaW5nIHRoaW5ncyBhdCBncm91cCBmb3JtYXRpb24KLSAgICAgICAgICAgICAgICAvLyBmYWlsdXJlIGNhdXNlcyBzdXBwbGljYW50IGlzc3Vlcy4gSWdub3JlIHJpZ2h0IG5vdy4KLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9GT1JNQVRJT05fRkFJTFVSRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiVW5oYW5kbGVkIG1lc3NhZ2UgIiArIG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFAycE5vdFN1cHBvcnRlZFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9QRUVSUzoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfUEVFUlNfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RPUF9ESVNDT1ZFUlk6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUT1BfRElTQ09WRVJZX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1NFUlZJQ0VTOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9TRVJWSUNFU19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DT05ORUNUOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DT05ORUNUX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNBTkNFTF9DT05ORUNUOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DQU5DRUxfQ09OTkVDVF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNSRUFURV9HUk9VUDoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ1JFQVRFX0dST1VQX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9HUk9VUDoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0dST1VQX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkFERF9MT0NBTF9TRVJWSUNFOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5BRERfTE9DQUxfU0VSVklDRV9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5SRU1PVkVfTE9DQUxfU0VSVklDRToKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0xPQ0FMX1NFUlZJQ0VfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ0xFQVJfTE9DQUxfU0VSVklDRVM6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNMRUFSX0xPQ0FMX1NFUlZJQ0VTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkFERF9TRVJWSUNFX1JFUVVFU1Q6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkFERF9TRVJWSUNFX1JFUVVFU1RfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX1NFUlZJQ0VfUkVRVUVTVDoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5SRU1PVkVfU0VSVklDRV9SRVFVRVNUX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5QMlBfVU5TVVBQT1JURUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNMRUFSX1NFUlZJQ0VfUkVRVUVTVFM6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQ0xFQVJfU0VSVklDRV9SRVFVRVNUU19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TRVRfREVWSUNFX05BTUU6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNFVF9ERVZJQ0VfTkFNRV9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5ERUxFVEVfUEVSU0lTVEVOVF9HUk9VUDoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuREVMRVRFX1BFUlNJU1RFTlRfR1JPVVAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TRVRfV0ZEX0lORk86Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNFVF9XRkRfSU5GT19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVEFSVF9XUFM6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX1dQU19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVEFSVF9MSVNURU46Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX0xJU1RFTl9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuUDJQX1VOU1VQUE9SVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVE9QX0xJU1RFTjoKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RPUF9MSVNURU5fRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlAyUF9VTlNVUFBPUlRFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBQMnBEaXNhYmxpbmdTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoRElTQUJMRV9QMlBfVElNRURfT1VULAotICAgICAgICAgICAgICAgICAgICArK21EaXNhYmxlUDJwVGltZW91dEluZGV4LCAwKSwgRElTQUJMRV9QMlBfV0FJVF9USU1FX01TKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBfRElTQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgicDJwIHNvY2tldCBjb25uZWN0aW9uIGxvc3QiKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1QMnBEaXNhYmxlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9FTkFCTEVfUDJQOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfRElTQUJMRV9QMlBfUkVROgotICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRElTQUJMRV9QMlBfVElNRURfT1VUOgotICAgICAgICAgICAgICAgICAgICBpZiAobUdyb3VwQ3JlYXRpbmdUaW1lb3V0SW5kZXggPT0gbWVzc2FnZS5hcmcxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJQMnAgZGlzYWJsZSB0aW1lZCBvdXQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtUDJwRGlzYWJsZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZXhpdCgpIHsKLSAgICAgICAgICAgIG1XaWZpQ2hhbm5lbC5zZW5kTWVzc2FnZShXaWZpU3RhdGVNYWNoaW5lLkNNRF9ESVNBQkxFX1AyUF9SU1ApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgUDJwRGlzYWJsZWRTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfRU5BQkxFX1AyUDoKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Od1NlcnZpY2Uuc2V0SW50ZXJmYWNlVXAobUludGVyZmFjZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiVW5hYmxlIHRvIGNoYW5nZSBpbnRlcmZhY2Ugc2V0dGluZ3M6ICIgKyByZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiVW5hYmxlIHRvIGNoYW5nZSBpbnRlcmZhY2Ugc2V0dGluZ3M6ICIgKyBpZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbVdpZmlNb25pdG9yLnN0YXJ0TW9uaXRvcmluZygpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVAycEVuYWJsaW5nU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFAycEVuYWJsaW5nU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBfQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiUDJwIHNvY2tldCBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwiKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5TVVBfRElTQ09OTkVDVElPTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiUDJwIHNvY2tldCBjb25uZWN0aW9uIGZhaWxlZCIpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVAycERpc2FibGVkU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0VOQUJMRV9QMlA6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpU3RhdGVNYWNoaW5lLkNNRF9ESVNBQkxFX1AyUF9SRVE6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVyTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBQMnBFbmFibGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHNlbmRQMnBTdGF0ZUNoYW5nZWRCcm9hZGNhc3QodHJ1ZSk7Ci0gICAgICAgICAgICBtTmV0d29ya0luZm8uc2V0SXNBdmFpbGFibGUodHJ1ZSk7Ci0gICAgICAgICAgICBzZW5kUDJwQ29ubmVjdGlvbkNoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgIGluaXRpYWxpemVQMnBTZXR0aW5ncygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlNVUF9ESVNDT05ORUNUSU9OX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBsb2dlKCJVbmV4cGVjdGVkIGxvc3Mgb2YgcDJwIHNvY2tldCBjb25uZWN0aW9uIik7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtUDJwRGlzYWJsZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfRU5BQkxFX1AyUDoKLSAgICAgICAgICAgICAgICAgICAgLy9Ob3RoaW5nIHRvIGRvCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVN0YXRlTWFjaGluZS5DTURfRElTQUJMRV9QMlBfUkVROgotICAgICAgICAgICAgICAgICAgICBpZiAobVBlZXJzLmNsZWFyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRQZWVyc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAobUdyb3Vwcy5jbGVhcigpKSBzZW5kUDJwUGVyc2lzdGVudEdyb3Vwc0NoYW5nZWRCcm9hZGNhc3QoKTsKLQotICAgICAgICAgICAgICAgICAgICBtV2lmaU1vbml0b3Iuc3RvcE1vbml0b3JpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1QMnBEaXNhYmxpbmdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU0VUX0RFVklDRV9OQU1FOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgV2lmaVAycERldmljZSBkID0gKFdpZmlQMnBEZXZpY2UpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoZCAhPSBudWxsICYmIHNldEFuZFBlcnNpc3REZXZpY2VOYW1lKGQuZGV2aWNlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoInNldCBkZXZpY2UgbmFtZSAiICsgZC5kZXZpY2VOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNFVF9ERVZJQ0VfTkFNRV9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU0VUX0RFVklDRV9OQU1FX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuRVJST1IpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNFVF9XRkRfSU5GTzoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFdpZmlQMnBXZmRJbmZvIGQgPSAoV2lmaVAycFdmZEluZm8pIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoZCAhPSBudWxsICYmIHNldFdmZEluZm8oZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNFVF9XRkRfSU5GT19TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU0VUX1dGRF9JTkZPX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuRVJST1IpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIEJMT0NLX0RJU0NPVkVSWToKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBibG9ja2VkID0gKG1lc3NhZ2UuYXJnMSA9PSBFTkFCTEVEID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1EaXNjb3ZlcnlCbG9ja2VkID09IGJsb2NrZWQpIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBtRGlzY292ZXJ5QmxvY2tlZCA9IGJsb2NrZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChibG9ja2VkICYmIG1EaXNjb3ZlcnlTdGFydGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBTdG9wRmluZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbURpc2NvdmVyeVBvc3Rwb25lZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9ja2VkICYmIG1EaXNjb3ZlcnlQb3N0cG9uZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EaXNjb3ZlcnlQb3N0cG9uZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycEZpbmQoRElTQ09WRVJfVElNRU9VVF9TKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZU1hY2hpbmUgbSA9IChTdGF0ZU1hY2hpbmUpbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5zZW5kTWVzc2FnZShtZXNzYWdlLmFyZzIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJ1bmFibGUgdG8gc2VuZCBCTE9DS19ESVNDT1ZFUlkgcmVzcG9uc2U6ICIgKyBlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1BFRVJTOgotICAgICAgICAgICAgICAgICAgICBpZiAobURpc2NvdmVyeUJsb2NrZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1BFRVJTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3Qgc2VuZCBzZXJ2aWNlIGRpc2NvdmVyeSByZXF1ZXN0IHdoaWxlIG5vcm1hbCBmaW5kIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgY2xlYXJTdXBwbGljYW50U2VydmljZVJlcXVlc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnAycEZpbmQoRElTQ09WRVJfVElNRU9VVF9TKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfUEVFUlNfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRQMnBEaXNjb3ZlcnlDaGFuZ2VkQnJvYWRjYXN0KHRydWUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfUEVFUlNfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5FUlJPUik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfRklORF9TVE9QUEVEX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBzZW5kUDJwRGlzY292ZXJ5Q2hhbmdlZEJyb2FkY2FzdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RPUF9ESVNDT1ZFUlk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5wMnBTdG9wRmluZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVE9QX0RJU0NPVkVSWV9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RPUF9ESVNDT1ZFUllfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5FUlJPUik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9TRVJWSUNFUzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1EaXNjb3ZlcnlCbG9ja2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9TRVJWSUNFU19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkJVU1kpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGRpc2NvdmVyIHNlcnZpY2VzIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdXBkYXRlU3VwcGxpY2FudFNlcnZpY2VSZXF1ZXN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1NFUlZJQ0VTX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuTk9fU0VSVklDRV9SRVFVRVNUUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUucDJwRmluZChESVNDT1ZFUl9USU1FT1VUX1MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9TRVJWSUNFU19TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfU0VSVklDRVNfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5FUlJPUik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfREVWSUNFX0ZPVU5EX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBXaWZpUDJwRGV2aWNlIGRldmljZSA9IChXaWZpUDJwRGV2aWNlKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1UaGlzRGV2aWNlLmRldmljZUFkZHJlc3MuZXF1YWxzKGRldmljZS5kZXZpY2VBZGRyZXNzKSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIG1QZWVycy51cGRhdGVTdXBwbGljYW50RGV0YWlscyhkZXZpY2UpOwotICAgICAgICAgICAgICAgICAgICBzZW5kUGVlcnNDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0RFVklDRV9MT1NUX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPSAoV2lmaVAycERldmljZSkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEdldHMgY3VycmVudCBkZXRhaWxzIGZvciB0aGUgb25lIHJlbW92ZWQKLSAgICAgICAgICAgICAgICAgICAgZGV2aWNlID0gbVBlZXJzLnJlbW92ZShkZXZpY2UuZGV2aWNlQWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFBlZXJzQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQUREX0xPQ0FMX1NFUlZJQ0U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBhZGQgc2VydmljZSIpOwotICAgICAgICAgICAgICAgICAgICBXaWZpUDJwU2VydmljZUluZm8gc2VydkluZm8gPSAoV2lmaVAycFNlcnZpY2VJbmZvKW1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWRkTG9jYWxTZXJ2aWNlKG1lc3NhZ2UucmVwbHlUbywgc2VydkluZm8pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5BRERfTE9DQUxfU0VSVklDRV9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQUREX0xPQ0FMX1NFUlZJQ0VfRkFJTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9MT0NBTF9TRVJWSUNFOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgcmVtb3ZlIHNlcnZpY2UiKTsKLSAgICAgICAgICAgICAgICAgICAgc2VydkluZm8gPSAoV2lmaVAycFNlcnZpY2VJbmZvKW1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbFNlcnZpY2UobWVzc2FnZS5yZXBseVRvLCBzZXJ2SW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9MT0NBTF9TRVJWSUNFX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ0xFQVJfTE9DQUxfU0VSVklDRVM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBjbGVhciBzZXJ2aWNlIik7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFyTG9jYWxTZXJ2aWNlcyhtZXNzYWdlLnJlcGx5VG8pOwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DTEVBUl9MT0NBTF9TRVJWSUNFU19TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkFERF9TRVJWSUNFX1JFUVVFU1Q6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBhZGQgc2VydmljZSByZXF1ZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYWRkU2VydmljZVJlcXVlc3QobWVzc2FnZS5yZXBseVRvLCAoV2lmaVAycFNlcnZpY2VSZXF1ZXN0KW1lc3NhZ2Uub2JqKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQUREX1NFUlZJQ0VfUkVRVUVTVF9GQUlMRUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQUREX1NFUlZJQ0VfUkVRVUVTVF9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9TRVJWSUNFX1JFUVVFU1Q6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiByZW1vdmUgc2VydmljZSByZXF1ZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZVNlcnZpY2VSZXF1ZXN0KG1lc3NhZ2UucmVwbHlUbywgKFdpZmlQMnBTZXJ2aWNlUmVxdWVzdCltZXNzYWdlLm9iaik7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9TRVJWSUNFX1JFUVVFU1RfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DTEVBUl9TRVJWSUNFX1JFUVVFU1RTOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgY2xlYXIgc2VydmljZSByZXF1ZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFyU2VydmljZVJlcXVlc3RzKG1lc3NhZ2UucmVwbHlUbyk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNMRUFSX1NFUlZJQ0VfUkVRVUVTVFNfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfU0VSVl9ESVNDX1JFU1BfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiByZWNlaXZlIHNlcnZpY2UgcmVzcG9uc2UiKTsKLSAgICAgICAgICAgICAgICAgICAgTGlzdDxXaWZpUDJwU2VydmljZVJlc3BvbnNlPiBzZFJlc3BMaXN0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIChMaXN0PFdpZmlQMnBTZXJ2aWNlUmVzcG9uc2U+KSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChXaWZpUDJwU2VydmljZVJlc3BvbnNlIHJlc3AgOiBzZFJlc3BMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwRGV2aWNlIGRldiA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBlZXJzLmdldChyZXNwLmdldFNyY0RldmljZSgpLmRldmljZUFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzcC5zZXRTcmNEZXZpY2UoZGV2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTZXJ2aWNlUmVzcG9uc2UocmVzcCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5ERUxFVEVfUEVSU0lTVEVOVF9HUk9VUDoKLSAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgZGVsZXRlIHBlcnNpc3RlbnQgZ3JvdXAiKTsKLSAgICAgICAgICAgICAgICAgICBtR3JvdXBzLnJlbW92ZShtZXNzYWdlLmFyZzEpOwotICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkRFTEVURV9QRVJTSVNURU5UX0dST1VQX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTRVRfTUlSQUNBU1RfTU9ERToKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0TWlyYWNhc3RNb2RlKG1lc3NhZ2UuYXJnMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RBUlRfTElTVEVOOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgc3RhcnQgbGlzdGVuIG1vZGUiKTsKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwRmx1c2goKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnAycEV4dExpc3Rlbih0cnVlLCA1MDAsIDUwMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX0xJU1RFTl9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RBUlRfTElTVEVOX0ZBSUxFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVE9QX0xJU1RFTjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIHN0b3AgbGlzdGVuIG1vZGUiKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnAycEV4dExpc3RlbihmYWxzZSwgMCwgMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUT1BfTElTVEVOX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVE9QX0xJU1RFTl9GQUlMRUQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycEZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU0VUX0NIQU5ORUw6Ci0gICAgICAgICAgICAgICAgICAgIEJ1bmRsZSBwMnBDaGFubmVscyA9IChCdW5kbGUpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpbnQgbGMgPSBwMnBDaGFubmVscy5nZXRJbnQoImxjIiwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBvYyA9IHAycENoYW5uZWxzLmdldEludCgib2MiLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIHNldCBsaXN0ZW4gYW5kIG9wZXJhdGluZyBjaGFubmVsIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5wMnBTZXRDaGFubmVsKGxjLCBvYykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNFVF9DSEFOTkVMX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TRVRfQ0hBTk5FTF9GQUlMRUQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU0VUX0NPVU5UUllfQ09ERToKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvdW50cnlDb2RlID0gKFN0cmluZykgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlID0gY291bnRyeUNvZGUudG9VcHBlckNhc2UoTG9jYWxlLlJPT1QpOwotICAgICAgICAgICAgICAgICAgICBpZiAobUxhc3RTZXRDb3VudHJ5Q29kZSA9PSBudWxsIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGUuZXF1YWxzKG1MYXN0U2V0Q291bnRyeUNvZGUpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUuc2V0Q291bnRyeUNvZGUoY291bnRyeUNvZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxhc3RTZXRDb3VudHJ5Q29kZSA9IGNvdW50cnlDb2RlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZXhpdCgpIHsKLSAgICAgICAgICAgIHNlbmRQMnBTdGF0ZUNoYW5nZWRCcm9hZGNhc3QoZmFsc2UpOwotICAgICAgICAgICAgbU5ldHdvcmtJbmZvLnNldElzQXZhaWxhYmxlKGZhbHNlKTsKLQotICAgICAgICAgICAgbUxhc3RTZXRDb3VudHJ5Q29kZSA9IG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBJbmFjdGl2ZVN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLmludmFsaWRhdGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5DT05ORUNUOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgc2VuZGluZyBjb25uZWN0Iik7Ci0gICAgICAgICAgICAgICAgICAgIFdpZmlQMnBDb25maWcgY29uZmlnID0gKFdpZmlQMnBDb25maWcpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb25maWdJbnZhbGlkKGNvbmZpZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkRyb3BwaW5nIGNvbm5lY3QgcmVxdWVzZXQgIiArIGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DT05ORUNUX0ZBSUxFRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG1BdXRvbm9tb3VzR3JvdXAgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwU3RvcEZpbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlaW52b2tlUGVyc2lzdGVudEdyb3VwKGNvbmZpZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtR3JvdXBOZWdvdGlhdGlvblN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtUHJvdmlzaW9uRGlzY292ZXJ5U3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcgPSBjb25maWc7Ci0gICAgICAgICAgICAgICAgICAgIG1QZWVycy51cGRhdGVTdGF0dXMobVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzLCBXaWZpUDJwRGV2aWNlLklOVklURUQpOwotICAgICAgICAgICAgICAgICAgICBzZW5kUGVlcnNDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNPTk5FQ1RfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpUDJwTWFuYWdlci5TVE9QX0RJU0NPVkVSWToKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1XaWZpTmF0aXZlLnAycFN0b3BGaW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gZGlzY292ZXJ5IHN0b3BzIGluIGluYWN0aXZlIHN0YXRlLCBmbHVzaCB0byBjbGVhcgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGUgcGVlciBkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBGbHVzaCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2VEaXNjUmVxSWQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RPUF9ESVNDT1ZFUllfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUT1BfRElTQ09WRVJZX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuRVJST1IpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dPX05FR09USUFUSU9OX1JFUVVFU1RfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IChXaWZpUDJwQ29uZmlnKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29uZmlnSW52YWxpZChjb25maWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJEcm9wcGluZyBHTyBuZWcgcmVxdWVzdCAiICsgY29uZmlnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcgPSBjb25maWc7Ci0gICAgICAgICAgICAgICAgICAgIG1BdXRvbm9tb3VzR3JvdXAgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgbUpvaW5FeGlzdGluZ0dyb3VwID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtVXNlckF1dGhvcml6aW5nTmVnb3RpYXRpb25SZXF1ZXN0U3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9JTlZJVEFUSU9OX1JFQ0VJVkVEX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBXaWZpUDJwR3JvdXAgZ3JvdXAgPSAoV2lmaVAycEdyb3VwKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgV2lmaVAycERldmljZSBvd25lciA9IGdyb3VwLmdldE93bmVyKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG93bmVyID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIklnbm9yZWQgaW52aXRhdGlvbiBmcm9tIG51bGwgb3duZXIiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gbmV3IFdpZmlQMnBDb25maWcoKTsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnLmRldmljZUFkZHJlc3MgPSBncm91cC5nZXRPd25lcigpLmRldmljZUFkZHJlc3M7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29uZmlnSW52YWxpZChjb25maWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJEcm9wcGluZyBpbnZpdGF0aW9uIHJlcXVlc3QgIiArIGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnID0gY29uZmlnOwotCi0gICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgb3duZXIgaW4gcGVlciBsaXN0IGFuZCB1c2UgYXBwcm9wcmlhdGUKLSAgICAgICAgICAgICAgICAgICAgLy93cHMgbWV0aG9kLiBEZWZhdWx0IGlzIHRvIHVzZSBQQkMuCi0gICAgICAgICAgICAgICAgICAgIGlmICgob3duZXIgPSBtUGVlcnMuZ2V0KG93bmVyLmRldmljZUFkZHJlc3MpKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3duZXIud3BzUGJjU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLndwcy5zZXR1cCA9IFdwc0luZm8uUEJDOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvd25lci53cHNLZXlwYWRTdXBwb3J0ZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcud3BzLnNldHVwID0gV3BzSW5mby5LRVlQQUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG93bmVyLndwc0Rpc3BsYXlTdXBwb3J0ZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcud3BzLnNldHVwID0gV3BzSW5mby5ESVNQTEFZOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbUF1dG9ub21vdXNHcm91cCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBtSm9pbkV4aXN0aW5nR3JvdXAgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obVVzZXJBdXRob3JpemluZ0ludml0ZVJlcXVlc3RTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19QQkNfUkVRX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19FTlRFUl9QSU5fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX1NIT1dfUElOX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICAvL1dlIGxldCB0aGUgc3VwcGxpY2FudCBoYW5kbGUgdGhlIHByb3Zpc2lvbiBkaXNjb3ZlcnkgcmVzcG9uc2UKLSAgICAgICAgICAgICAgICAgICAgLy9hbmQgd2FpdCBpbnN0ZWFkIGZvciB0aGUgR09fTkVHT1RJQVRJT05fUkVRVUVTVF9FVkVOVC4KLSAgICAgICAgICAgICAgICAgICAgLy9IYW5kbGluZyBwcm92aXNpb24gZGlzY292ZXJ5IGFuZCBpc3N1aW5nIGEgcDJwX2Nvbm5lY3QgYmVmb3JlCi0gICAgICAgICAgICAgICAgICAgIC8vZ3JvdXAgbmVnb3RpYXRpb24gY29tZXMgdGhyb3VnaCBjYXVzZXMgaXNzdWVzCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ1JFQVRFX0dST1VQOgotICAgICAgICAgICAgICAgICAgICBtQXV0b25vbW91c0dyb3VwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaW50IG5ldElkID0gbWVzc2FnZS5hcmcxOwotICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJldCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAobmV0SWQgPT0gV2lmaVAycEdyb3VwLlBFUlNJU1RFTlRfTkVUX0lEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgZ28gcGVyc2lzdGVudCBncm91cCBpcyBwcmVzZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgbmV0SWQgPSBtR3JvdXBzLmdldE5ldHdvcmtJZChtVGhpc0RldmljZS5kZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXRJZCAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IG1XaWZpTmF0aXZlLnAycEdyb3VwQWRkKG5ldElkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gbVdpZmlOYXRpdmUucDJwR3JvdXBBZGQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBtV2lmaU5hdGl2ZS5wMnBHcm91cEFkZChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DUkVBVEVfR1JPVVBfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtR3JvdXBOZWdvdGlhdGlvblN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLkNSRUFURV9HUk9VUF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkVSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbWFpbiBhdCB0aGlzIHN0YXRlLgotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX1NUQVJURURfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIG1Hcm91cCA9IChXaWZpUDJwR3JvdXApIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgZ3JvdXAgc3RhcnRlZCIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGhpdCB0aGlzIHNjZW5hcmlvIHdoZW4gYSBwZXJzaXN0ZW50IGdyb3VwIGlzIHJlaW52b2tlZAotICAgICAgICAgICAgICAgICAgICBpZiAobUdyb3VwLmdldE5ldHdvcmtJZCgpID09IFdpZmlQMnBHcm91cC5QRVJTSVNURU5UX05FVF9JRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbUF1dG9ub21vdXNHcm91cCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Hcm91cE5lZ290aWF0aW9uU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiVW5leHBlY3RlZCBncm91cCBjcmVhdGlvbiwgcmVtb3ZlICIgKyBtR3JvdXApOwotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwR3JvdXBSZW1vdmUobUdyb3VwLmdldEludGVyZmFjZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX0xJU1RFTjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIHN0YXJ0IGxpc3RlbiBtb2RlIik7Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycEZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5wMnBFeHRMaXN0ZW4odHJ1ZSwgNTAwLCA1MDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVEFSVF9MSVNURU5fU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX0xJU1RFTl9GQUlMRUQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuU1RPUF9MSVNURU46Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBzdG9wIGxpc3RlbiBtb2RlIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5wMnBFeHRMaXN0ZW4oZmFsc2UsIDAsIDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TVE9QX0xJU1RFTl9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RPUF9MSVNURU5fRkFJTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBGbHVzaCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNFVF9DSEFOTkVMOgotICAgICAgICAgICAgICAgICAgICBCdW5kbGUgcDJwQ2hhbm5lbHMgPSAoQnVuZGxlKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxjID0gcDJwQ2hhbm5lbHMuZ2V0SW50KCJsYyIsIDApOwotICAgICAgICAgICAgICAgICAgICBpbnQgb2MgPSBwMnBDaGFubmVscy5nZXRJbnQoIm9jIiwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBzZXQgbGlzdGVuIGFuZCBvcGVyYXRpbmcgY2hhbm5lbCIpOwotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUucDJwU2V0Q2hhbm5lbChsYywgb2MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5TRVRfQ0hBTk5FTF9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU0VUX0NIQU5ORUxfRkFJTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSEFORExFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIEdyb3VwQ3JlYXRpbmdTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICAgICAgc2VuZE1lc3NhZ2VEZWxheWVkKG9idGFpbk1lc3NhZ2UoR1JPVVBfQ1JFQVRJTkdfVElNRURfT1VULAotICAgICAgICAgICAgICAgICAgICArK21Hcm91cENyZWF0aW5nVGltZW91dEluZGV4LCAwKSwgR1JPVVBfQ1JFQVRJTkdfV0FJVF9USU1FX01TKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIGJvb2xlYW4gcmV0ID0gSEFORExFRDsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICBjYXNlIEdST1VQX0NSRUFUSU5HX1RJTUVEX09VVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1Hcm91cENyZWF0aW5nVGltZW91dEluZGV4ID09IG1lc3NhZ2UuYXJnMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiR3JvdXAgbmVnb3RpYXRpb24gdGltZWQgb3V0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVHcm91cENyZWF0aW9uRmFpbHVyZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9ERVZJQ0VfTE9TVF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgV2lmaVAycERldmljZSBkZXZpY2UgPSAoV2lmaVAycERldmljZSkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzLmVxdWFscyhkZXZpY2UuZGV2aWNlQWRkcmVzcykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dkKCJtU2F2ZWRQZWVyQ29uZmlnICIgKyBtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGV2aWNlICIgKyBkZXZpY2UuZGV2aWNlQWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyB0aGUgcmVndWxhciBkZXZpY2UgbG9zdCBoYW5kbGluZwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gTk9UX0hBTkRMRUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nCi0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkFkZCBkZXZpY2UgdG8gbG9zdCBsaXN0ICIgKyBkZXZpY2UpOwotICAgICAgICAgICAgICAgICAgICBtUGVlcnNMb3N0RHVyaW5nQ29ubmVjdGlvbi51cGRhdGVTdXBwbGljYW50RGV0YWlscyhkZXZpY2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkRJU0NPVkVSX1BFRVJTOgotICAgICAgICAgICAgICAgICAgICAvKiBEaXNjb3Zlcnkgd2lsbCBicmVhayBuZWdvdGlhdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5ESVNDT1ZFUl9QRUVSU19GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lmaVAycE1hbmFnZXIuQlVTWSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuQ0FOQ0VMX0NPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgICAgIC8vRG8gYSBzdXBwbGljYW50IHAycF9jYW5jZWwgd2hpY2ggb25seSBjYW5jZWxzIGFuIG9uZ29pbmcKLSAgICAgICAgICAgICAgICAgICAgLy9ncm91cCBuZWdvdGlhdGlvbi4gVGhpcyB3aWxsIGZhaWwgZm9yIGEgcGVuZGluZyBwcm92aXNpb24KLSAgICAgICAgICAgICAgICAgICAgLy9kaXNjb3Zlcnkgb3IgZm9yIGEgcGVuZGluZyB1c2VyIGFjdGlvbiwgYnV0IGF0IHRoZSBmcmFtZXdvcmsKLSAgICAgICAgICAgICAgICAgICAgLy9sZXZlbCwgd2UgYWx3YXlzIHRyZWF0IGNhbmNlbCBhcyBzdWNjZWVkZWQgYW5kIGVudGVyCi0gICAgICAgICAgICAgICAgICAgIC8vYW4gaW5hY3RpdmUgc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwQ2FuY2VsQ29ubmVjdCgpOwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVHcm91cENyZWF0aW9uRmFpbHVyZSgpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluYWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DQU5DRUxfQ09OTkVDVF9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXQgPSBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBVc2VyQXV0aG9yaXppbmdOZWdvdGlhdGlvblJlcXVlc3RTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICAgICAgbm90aWZ5SW52aXRhdGlvblJlY2VpdmVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBib29sZWFuIHJldCA9IEhBTkRMRUQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgUEVFUl9DT05ORUNUSU9OX1VTRVJfQUNDRVBUOgotICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBTdG9wRmluZCgpOwotICAgICAgICAgICAgICAgICAgICBwMnBDb25uZWN0V2l0aFBpbkRpc3BsYXkobVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIG1QZWVycy51cGRhdGVTdGF0dXMobVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzLCBXaWZpUDJwRGV2aWNlLklOVklURUQpOwotICAgICAgICAgICAgICAgICAgICBzZW5kUGVlcnNDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtR3JvdXBOZWdvdGlhdGlvblN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFBFRVJfQ09OTkVDVElPTl9VU0VSX1JFSkVDVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiVXNlciByZWplY3RlZCBuZWdvdGlhdGlvbiAiICsgbVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5hY3RpdmVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZXhpdCgpIHsKLSAgICAgICAgICAgIC8vVE9ETzogZGlzbWlzcyBkaWFsb2cgaWYgbm90IGFscmVhZHkgZG9uZQotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgVXNlckF1dGhvcml6aW5nSW52aXRlUmVxdWVzdFN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgICAgICBub3RpZnlJbnZpdGF0aW9uUmVjZWl2ZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIGJvb2xlYW4gcmV0ID0gSEFORExFRDsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBQRUVSX0NPTk5FQ1RJT05fVVNFUl9BQ0NFUFQ6Ci0gICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnAycFN0b3BGaW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcmVpbnZva2VQZXJzaXN0ZW50R3JvdXAobVNhdmVkUGVlckNvbmZpZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5lZ290aWF0aW9uIHdoZW4gcGVyc2lzdGVuY2UgZmFpbHMKLSAgICAgICAgICAgICAgICAgICAgICAgIHAycENvbm5lY3RXaXRoUGluRGlzcGxheShtU2F2ZWRQZWVyQ29uZmlnKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtUGVlcnMudXBkYXRlU3RhdHVzKG1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcywgV2lmaVAycERldmljZS5JTlZJVEVEKTsKLSAgICAgICAgICAgICAgICAgICAgc2VuZFBlZXJzQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUdyb3VwTmVnb3RpYXRpb25TdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBQRUVSX0NPTk5FQ1RJT05fVVNFUl9SRUpFQ1Q6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlVzZXIgcmVqZWN0ZWQgaW52aXRhdGlvbiAiICsgbVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5hY3RpdmVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZXhpdCgpIHsKLSAgICAgICAgICAgIC8vVE9ETzogZGlzbWlzcyBkaWFsb2cgaWYgbm90IGFscmVhZHkgZG9uZQotICAgICAgICB9Ci0gICAgfQotCi0KLQotICAgIGNsYXNzIFByb3Zpc2lvbkRpc2NvdmVyeVN0YXRlIGV4dGVuZHMgU3RhdGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgZW50ZXIoKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSk7Ci0gICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBQcm92aXNpb25EaXNjb3ZlcnkobVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBXaWZpUDJwUHJvdkRpc2NFdmVudCBwcm92RGlzYzsKLSAgICAgICAgICAgIFdpZmlQMnBEZXZpY2UgZGV2aWNlOwotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfUEJDX1JTUF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgcHJvdkRpc2MgPSAoV2lmaVAycFByb3ZEaXNjRXZlbnQpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPSBwcm92RGlzYy5kZXZpY2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZGV2aWNlLmRldmljZUFkZHJlc3MuZXF1YWxzKG1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcykpIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtU2F2ZWRQZWVyQ29uZmlnLndwcy5zZXR1cCA9PSBXcHNJbmZvLlBCQykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiRm91bmQgYSBtYXRjaCAiICsgbVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwMnBDb25uZWN0V2l0aFBpbkRpc3BsYXkobVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUdyb3VwTmVnb3RpYXRpb25TdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX0VOVEVSX1BJTl9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgcHJvdkRpc2MgPSAoV2lmaVAycFByb3ZEaXNjRXZlbnQpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPSBwcm92RGlzYy5kZXZpY2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZGV2aWNlLmRldmljZUFkZHJlc3MuZXF1YWxzKG1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcykpIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtU2F2ZWRQZWVyQ29uZmlnLndwcy5zZXR1cCA9PSBXcHNJbmZvLktFWVBBRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiRm91bmQgYSBtYXRjaCAiICsgbVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZSBhbHJlYWR5IGhhdmUgdGhlIHBpbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShtU2F2ZWRQZWVyQ29uZmlnLndwcy5waW4pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDJwQ29ubmVjdFdpdGhQaW5EaXNwbGF5KG1TYXZlZFBlZXJDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtR3JvdXBOZWdvdGlhdGlvblN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUpvaW5FeGlzdGluZ0dyb3VwID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Vc2VyQXV0aG9yaXppbmdOZWdvdGlhdGlvblJlcXVlc3RTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX1NIT1dfUElOX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBwcm92RGlzYyA9IChXaWZpUDJwUHJvdkRpc2NFdmVudCkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGRldmljZSA9IHByb3ZEaXNjLmRldmljZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkZXZpY2UuZGV2aWNlQWRkcmVzcy5lcXVhbHMobVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzKSkgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1TYXZlZFBlZXJDb25maWcud3BzLnNldHVwID09IFdwc0luZm8uRElTUExBWSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiRm91bmQgYSBtYXRjaCAiICsgbVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLndwcy5waW4gPSBwcm92RGlzYy5waW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBwMnBDb25uZWN0V2l0aFBpbkRpc3BsYXkobVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlJbnZpdGF0aW9uU2VudChwcm92RGlzYy5waW4sIGRldmljZS5kZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtR3JvdXBOZWdvdGlhdGlvblN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfRkFJTFVSRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgbG9nZSgicHJvdmlzaW9uIGRpc2NvdmVyeSBmYWlsZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlR3JvdXBDcmVhdGlvbkZhaWx1cmUoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1JbmFjdGl2ZVN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbGFzcyBHcm91cE5lZ290aWF0aW9uU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZXNlIHJpZ2h0IG5vdywgc2luY2Ugd2UgZ2V0IGEgR1JPVVBfU1RBUlRFRCBub3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAvLyBhZnRlcndhcmRzCi0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR09fTkVHT1RJQVRJT05fU1VDQ0VTU19FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9GT1JNQVRJT05fU1VDQ0VTU19FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGdvIHN1Y2Nlc3MiKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfU1RBUlRFRF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgbUdyb3VwID0gKFdpZmlQMnBHcm91cCkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBncm91cCBzdGFydGVkIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1Hcm91cC5nZXROZXR3b3JrSWQoKSA9PSBXaWZpUDJwR3JvdXAuUEVSU0lTVEVOVF9ORVRfSUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB1cGRhdGUgY2FjaGUgaW5mb3JtYXRpb24gYW5kIHNldCBuZXR3b3JrIGlkIHRvIG1Hcm91cC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUGVyc2lzdGVudE5ldHdvcmtzKE5PX1JFTE9BRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGV2QWRkciA9IG1Hcm91cC5nZXRPd25lcigpLmRldmljZUFkZHJlc3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtR3JvdXAuc2V0TmV0d29ya0lkKG1Hcm91cHMuZ2V0TmV0d29ya0lkKGRldkFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Hcm91cC5nZXROZXR3b3JrTmFtZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobUdyb3VwLmlzR3JvdXBPd25lcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXR0aW5nIGFuIGlkbGUgdGltZSBvdXQgb24gR08gY2F1c2VzIGlzc3VlcyB3aXRoIGNlcnRhaW4gc2NlbmFyaW9zCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBvbiBjbGllbnRzIHdoZXJlIGl0IGNhbiBiZSBvZmYtY2hhbm5lbCBmb3IgbG9uZ2VyIGFuZCB3aXRoIHRoZSBwb3dlcgotICAgICAgICAgICAgICAgICAgICAgICAgICogc2F2ZSBtb2RlcyB1c2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIFRPRE86IFZlcmlmeSBtdWx0aS1jaGFubmVsIHNjZW5hcmlvcyBhbmQgc3VwcGxpY2FudCBiZWhhdmlvciBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGJldHRlciBiZWZvcmUgYWRkaW5nIGEgdGltZSBvdXQgaW4gZnV0dXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vU2V0IGdyb3VwIGlkbGUgdGltZW91dCBvZiAxMCBzZWMsIHRvIGF2b2lkIEdPIGJlYWNvbmluZyBpbmNhc2Ugb2YgYW55Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL2ZhaWx1cmUgZHVyaW5nIDQtd2F5IEhhbmRzaGFrZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbUF1dG9ub21vdXNHcm91cCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnNldFAycEdyb3VwSWRsZShtR3JvdXAuZ2V0SW50ZXJmYWNlKCksIEdST1VQX0lETEVfVElNRV9TKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0RGhjcFNlcnZlcihtR3JvdXAuZ2V0SW50ZXJmYWNlKCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0UDJwR3JvdXBJZGxlKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSwgR1JPVVBfSURMRV9USU1FX1MpOwotICAgICAgICAgICAgICAgICAgICAgICAgbURoY3BTdGF0ZU1hY2hpbmUgPSBEaGNwU3RhdGVNYWNoaW5lLm1ha2VEaGNwU3RhdGVNYWNoaW5lKG1Db250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQMnBTdGF0ZU1hY2hpbmUudGhpcywgbUdyb3VwLmdldEludGVyZmFjZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFdlIHNob3VsZCB1c2UgREhDUCBzdGF0ZSBtYWNoaW5lIFBSRSBtZXNzYWdlIGxpa2UgV2lmaVN0YXRlTWFjaGluZQotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0UDJwUG93ZXJTYXZlKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgbURoY3BTdGF0ZU1hY2hpbmUuc2VuZE1lc3NhZ2UoRGhjcFN0YXRlTWFjaGluZS5DTURfU1RBUlRfREhDUCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwRGV2aWNlIGdyb3VwT3duZXIgPSBtR3JvdXAuZ2V0T3duZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBEZXZpY2UgcGVlciA9IG1QZWVycy5nZXQoZ3JvdXBPd25lci5kZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZ3JvdXAgb3duZXIgZGV0YWlscyB3aXRoIHBlZXIgZGV0YWlscyBmb3VuZCBhdCBkaXNjb3ZlcnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cE93bmVyLnVwZGF0ZVN1cHBsaWNhbnREZXRhaWxzKHBlZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1QZWVycy51cGRhdGVTdGF0dXMoZ3JvdXBPd25lci5kZXZpY2VBZGRyZXNzLCBXaWZpUDJwRGV2aWNlLkNPTk5FQ1RFRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFBlZXJzQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHN1cHBsaWNhbnQgYnVnIGNhbiBsZWFkIHRvIHJlcG9ydGluZyBhbiBpbnZhbGlkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ3JvdXAgb3duZXIgYWRkcmVzcyAoYWxsIHplcm9lcykgYXQgdGltZXMuIEF2b2lkIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmFzaCwgYnV0IGNvbnRpbnVlIGdyb3VwIGNyZWF0aW9uIHNpbmNlIGl0IGlzIG5vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzc2VudGlhbC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2d3KCJVbmtub3duIGdyb3VwIG93bmVyICIgKyBncm91cE93bmVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUdyb3VwQ3JlYXRlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR09fTkVHT1RJQVRJT05fRkFJTFVSRV9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgUDJwU3RhdHVzIHN0YXR1cyA9IChQMnBTdGF0dXMpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IFAycFN0YXR1cy5OT19DT01NT05fQ0hBTk5FTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1GcmVxdWVuY3lDb25mbGljdFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8qIGNvbnRpbnVlIHdpdGggZ3JvdXAgcmVtb3ZhbCBoYW5kbGluZyAqLwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX1JFTU9WRURfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBnbyBmYWlsdXJlIik7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZUdyb3VwQ3JlYXRpb25GYWlsdXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5hY3RpdmVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8vIEEgZ3JvdXAgZm9ybWF0aW9uIGZhaWx1cmUgaXMgYWx3YXlzIGZvbGxvd2VkIGJ5Ci0gICAgICAgICAgICAgICAgLy8gYSBncm91cCByZW1vdmVkIGV2ZW50LiBGbHVzaGluZyB0aGluZ3MgYXQgZ3JvdXAgZm9ybWF0aW9uCi0gICAgICAgICAgICAgICAgLy8gZmFpbHVyZSBjYXVzZXMgc3VwcGxpY2FudCBpc3N1ZXMuIElnbm9yZSByaWdodCBub3cuCi0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfRk9STUFUSU9OX0ZBSUxVUkVfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IChQMnBTdGF0dXMpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IFAycFN0YXR1cy5OT19DT01NT05fQ0hBTk5FTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1GcmVxdWVuY3lDb25mbGljdFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0lOVklUQVRJT05fUkVTVUxUX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAoUDJwU3RhdHVzKW1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IFAycFN0YXR1cy5TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnZvY2F0aW9uIHdhcyBzdWNjZWVkZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IFAyUF9HUk9VUF9TVEFSVEVEX0VWRU5ULgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiSW52aXRhdGlvbiByZXN1bHQgIiArIHN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gUDJwU3RhdHVzLlVOS05PV05fUDJQX0dST1VQKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0YXJnZXQgZGV2aWNlIGhhcyBhbHJlYWR5IHJlbW92ZWQgdGhlIGNyZWRlbnRpYWwuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTbywgcmVtb3ZlIHRoaXMgY3JlZGVudGlhbCBhY2NvcmRpbmdseS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZXRJZCA9IG1TYXZlZFBlZXJDb25maWcubmV0SWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV0SWQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlJlbW92ZSB1bmtub3duIGNsaWVudCBmcm9tIHRoZSBsaXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xpZW50RnJvbUxpc3QobmV0SWQsIG1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlaW52b2NhdGlvbiBoYXMgZmFpbGVkLCB0cnkgZ3JvdXAgbmVnb3RpYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcubmV0SWQgPSBXaWZpUDJwR3JvdXAuUEVSU0lTVEVOVF9ORVRfSUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwMnBDb25uZWN0V2l0aFBpbkRpc3BsYXkobVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09IFAycFN0YXR1cy5JTkZPUk1BVElPTl9JU19DVVJSRU5UTFlfVU5BVkFJTEFCTEUpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGV2aWNlcyBzZXR0aW5nIHBlcnNpc3RlbnRfcmVjb25uZWN0IHRvIDAgaW4gd3BhX3N1cHBsaWNhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsd2F5cyBkZWZlciB0aGUgaW52b2NhdGlvbiByZXF1ZXN0IGFuZCByZXR1cm4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICJpbmZvcm1hdGlvbiBpcyBjdXJyZW50bHkgdW5hYmxlIiBlcnJvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNvLCB0cnkgYW5vdGhlciB3YXkgdG8gY29ubmVjdCBmb3IgaW50ZXJvcGVyYWJpbGl0eS4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcubmV0SWQgPSBXaWZpUDJwR3JvdXAuUEVSU0lTVEVOVF9ORVRfSUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwMnBDb25uZWN0V2l0aFBpbkRpc3BsYXkobVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09IFAycFN0YXR1cy5OT19DT01NT05fQ0hBTk5FTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1GcmVxdWVuY3lDb25mbGljdFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUdyb3VwQ3JlYXRpb25GYWlsdXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluYWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgRnJlcXVlbmN5Q29uZmxpY3RTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgcHJpdmF0ZSBBbGVydERpYWxvZyBtRnJlcXVlbmN5Q29uZmxpY3REaWFsb2c7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIG5vdGlmeUZyZXF1ZW5jeUNvbmZsaWN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgbm90aWZ5RnJlcXVlbmN5Q29uZmxpY3QoKSB7Ci0gICAgICAgICAgICBsb2dkKCJOb3RpZnkgZnJlcXVlbmN5IGNvbmZsaWN0Iik7Ci0gICAgICAgICAgICBSZXNvdXJjZXMgciA9IFJlc291cmNlcy5nZXRTeXN0ZW0oKTsKLQotICAgICAgICAgICAgQWxlcnREaWFsb2cgZGlhbG9nID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIobUNvbnRleHQpCi0gICAgICAgICAgICAgICAgLnNldE1lc3NhZ2Uoci5nZXRTdHJpbmcoUi5zdHJpbmcud2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXREZXZpY2VOYW1lKG1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcykpKQotICAgICAgICAgICAgICAgIC5zZXRQb3NpdGl2ZUJ1dHRvbihyLmdldFN0cmluZyhSLnN0cmluZy5kbGdfb2spLCBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCB3aGljaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKERST1BfV0lGSV9VU0VSX0FDQ0VQVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgLnNldE5lZ2F0aXZlQnV0dG9uKHIuZ2V0U3RyaW5nKFIuc3RyaW5nLmRlY2xpbmUpLCBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCB3aGljaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKERST1BfV0lGSV9VU0VSX1JFSkVDVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgLnNldE9uQ2FuY2VsTGlzdGVuZXIobmV3IERpYWxvZ0ludGVyZmFjZS5PbkNhbmNlbExpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNhbmNlbChEaWFsb2dJbnRlcmZhY2UgYXJnMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKERST1BfV0lGSV9VU0VSX1JFSkVDVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotCi0gICAgICAgICAgICBkaWFsb2cuZ2V0V2luZG93KCkuc2V0VHlwZShXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX1NZU1RFTV9BTEVSVCk7Ci0gICAgICAgICAgICBkaWFsb2cuc2hvdygpOwotICAgICAgICAgICAgbUZyZXF1ZW5jeUNvbmZsaWN0RGlhbG9nID0gZGlhbG9nOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HT19ORUdPVElBVElPTl9TVUNDRVNTX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX0ZPUk1BVElPTl9TVUNDRVNTX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBsb2dlKGdldE5hbWUoKSArICJncm91cCBzdWNlc3MgZHVyaW5nIGZyZXEgY29uZmxpY3QhIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX1NUQVJURURfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2UoZ2V0TmFtZSgpICsgImdyb3VwIHN0YXJ0ZWQgYWZ0ZXIgZnJlcSBjb25mbGljdCwgaGFuZGxlIGFueXdheSIpOwotICAgICAgICAgICAgICAgICAgICBkZWZlck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtR3JvdXBOZWdvdGlhdGlvblN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR09fTkVHT1RJQVRJT05fRkFJTFVSRV9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9SRU1PVkVEX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0dST1VQX0ZPUk1BVElPTl9GQUlMVVJFX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgZmFpbHVyZXMgc2luY2Ugd2UgcmV0cnkgYWdhaW4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBEUk9QX1dJRklfVVNFUl9SRUpFQ1Q6Ci0gICAgICAgICAgICAgICAgICAgIC8vIFVzZXIgcmVqZWN0ZWQgZHJvcHBpbmcgd2lmaSBpbiBmYXZvdXIgb2YgcDJwCi0gICAgICAgICAgICAgICAgICAgIGhhbmRsZUdyb3VwQ3JlYXRpb25GYWlsdXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5hY3RpdmVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRFJPUF9XSUZJX1VTRVJfQUNDRVBUOgotICAgICAgICAgICAgICAgICAgICAvLyBVc2VyIGFjY2VwdGVkIGRyb3BwaW5nIHdpZmkgaW4gZmF2b3VyIG9mIHAycAotICAgICAgICAgICAgICAgICAgICBtV2lmaUNoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaVAycFNlcnZpY2UuRElTQ09OTkVDVF9XSUZJX1JFUVVFU1QsIDEpOwotICAgICAgICAgICAgICAgICAgICBtVGVtcG9hcmlseURpc2Nvbm5lY3RlZFdpZmkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIERJU0NPTk5FQ1RfV0lGSV9SRVNQT05TRToKLSAgICAgICAgICAgICAgICAgICAgLy8gR290IGEgcmVzcG9uc2UgZnJvbSB3aWZpc3RhdGVtYWNoaW5lLCByZXRyeSBwMnAKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiV2lmaSBkaXNjb25uZWN0ZWQsIHJldHJ5IHAycCIpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVG8obUluYWN0aXZlU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShXaWZpUDJwTWFuYWdlci5DT05ORUNULCBtU2F2ZWRQZWVyQ29uZmlnKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgewotICAgICAgICAgICAgaWYgKG1GcmVxdWVuY3lDb25mbGljdERpYWxvZyAhPSBudWxsKSBtRnJlcXVlbmN5Q29uZmxpY3REaWFsb2cuZGlzbWlzcygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgR3JvdXBDcmVhdGVkU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlcigpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIC8vIE9uY2UgY29ubmVjdGVkLCBwZWVyIGNvbmZpZyBkZXRhaWxzIGFyZSBpbnZhbGlkCi0gICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLmludmFsaWRhdGUoKTsKLSAgICAgICAgICAgIG1OZXR3b3JrSW5mby5zZXREZXRhaWxlZFN0YXRlKE5ldHdvcmtJbmZvLkRldGFpbGVkU3RhdGUuQ09OTkVDVEVELCBudWxsLCBudWxsKTsKLQotICAgICAgICAgICAgdXBkYXRlVGhpc0RldmljZShXaWZpUDJwRGV2aWNlLkNPTk5FQ1RFRCk7Ci0KLSAgICAgICAgICAgIC8vREhDUCBzZXJ2ZXIgaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkIGlmIEkgYW0gYSBncm91cCBvd25lcgotICAgICAgICAgICAgaWYgKG1Hcm91cC5pc0dyb3VwT3duZXIoKSkgewotICAgICAgICAgICAgICAgIHNldFdpZmlQMnBJbmZvT25Hcm91cEZvcm1hdGlvbihOZXR3b3JrVXRpbHMubnVtZXJpY1RvSW5ldEFkZHJlc3MoU0VSVkVSX0FERFJFU1MpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBhIG5lZ290aWF0aW9uIGdyb3VwLCBjb25uZWN0aW9uIGNoYW5nZWQgaXMgc2VudAotICAgICAgICAgICAgLy8gYWZ0ZXIgYSBjbGllbnQgam9pbnMuIEZvciBhdXRvbm9tb3VzLCBzZW5kIG5vdwotICAgICAgICAgICAgaWYgKG1BdXRvbm9tb3VzR3JvdXApIHsKLSAgICAgICAgICAgICAgICBzZW5kUDJwQ29ubmVjdGlvbkNoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgbWVzc2FnZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5BUF9TVEFfQ09OTkVDVEVEX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBXaWZpUDJwRGV2aWNlIGRldmljZSA9IChXaWZpUDJwRGV2aWNlKSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRldmljZUFkZHJlc3MgPSBkZXZpY2UuZGV2aWNlQWRkcmVzczsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGltZW91dCB0aGF0IHdhcyBzZXQgd2hlbiBncm91cCB3YXMgc3RhcnRlZC4KLSAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0UDJwR3JvdXBJZGxlKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2VBZGRyZXNzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtUGVlcnMuZ2V0KGRldmljZUFkZHJlc3MpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtR3JvdXAuYWRkQ2xpZW50KG1QZWVycy5nZXQoZGV2aWNlQWRkcmVzcykpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtR3JvdXAuYWRkQ2xpZW50KGRldmljZUFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbVBlZXJzLnVwZGF0ZVN0YXR1cyhkZXZpY2VBZGRyZXNzLCBXaWZpUDJwRGV2aWNlLkNPTk5FQ1RFRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgYXAgc3RhIGNvbm5lY3RlZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFBlZXJzQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiQ29ubmVjdCBvbiBudWxsIGRldmljZSBhZGRyZXNzLCBpZ25vcmUiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZW5kUDJwQ29ubmVjdGlvbkNoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5BUF9TVEFfRElTQ09OTkVDVEVEX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPSAoV2lmaVAycERldmljZSkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGRldmljZUFkZHJlc3MgPSBkZXZpY2UuZGV2aWNlQWRkcmVzczsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRldmljZUFkZHJlc3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVBlZXJzLnVwZGF0ZVN0YXR1cyhkZXZpY2VBZGRyZXNzLCBXaWZpUDJwRGV2aWNlLkFWQUlMQUJMRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobUdyb3VwLnJlbW92ZUNsaWVudChkZXZpY2VBZGRyZXNzKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlJlbW92ZWQgY2xpZW50ICIgKyBkZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1BdXRvbm9tb3VzR3JvdXAgJiYgbUdyb3VwLmlzQ2xpZW50TGlzdEVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZCgiQ2xpZW50IGxpc3QgZW1wdHksIHJlbW92ZSBub24tcGVyc2lzdGVudCBwMnAgZ3JvdXAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwR3JvdXBSZW1vdmUobUdyb3VwLmdldEludGVyZmFjZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZW5kIHVwIHNlbmRpbmcgY29ubmVjdGlvbiBjaGFuZ2VkIGJyb2FkY2FzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRoaXMgaGFwcGVucyBhdCBleGl0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RpZnkgd2hlbiBhIGNsaWVudCBkaXNjb25uZWN0cyBmcm9tIGdyb3VwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRQMnBDb25uZWN0aW9uQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiRmFpbGVkIHRvIHJlbW92ZSBjbGllbnQgIiArIGRldmljZUFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoV2lmaVAycERldmljZSBjIDogbUdyb3VwLmdldENsaWVudExpc3QoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJjbGllbnQgIiArIGMuZGV2aWNlQWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFBlZXJzQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGFwIHN0YSBkaXNjb25uZWN0ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkRpc2Nvbm5lY3Qgb24gdW5rbm93biBkZXZpY2U6ICIgKyBkZXZpY2UpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRGhjcFN0YXRlTWFjaGluZS5DTURfUE9TVF9ESENQX0FDVElPTjoKLSAgICAgICAgICAgICAgICAgICAgRGhjcFJlc3VsdHMgZGhjcFJlc3VsdHMgPSAoRGhjcFJlc3VsdHMpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcmcxID09IERoY3BTdGF0ZU1hY2hpbmUuREhDUF9TVUNDRVNTICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGhjcFJlc3VsdHMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiRGhjcFJlc3VsdHM6ICIgKyBkaGNwUmVzdWx0cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRXaWZpUDJwSW5mb09uR3JvdXBGb3JtYXRpb24oZGhjcFJlc3VsdHMuc2VydmVyQWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kUDJwQ29ubmVjdGlvbkNoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vVHVybiBvbiBwb3dlciBzYXZlIG9uIGNsaWVudAotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2V0UDJwUG93ZXJTYXZlKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dlKCJESENQIGZhaWxlZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwR3JvdXBSZW1vdmUobUdyb3VwLmdldEludGVyZmFjZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlJFTU9WRV9HUk9VUDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIHJlbW92ZSBncm91cCIpOwotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUucDJwR3JvdXBSZW1vdmUobUdyb3VwLmdldEludGVyZmFjZSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1PbmdvaW5nR3JvdXBSZW1vdmFsU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0dST1VQX1NVQ0NFRURFRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVHcm91cFJlbW92ZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5hY3RpdmVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5SRU1PVkVfR1JPVVBfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5FUlJPUik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgLyogV2UgZG8gbm90IGxpc3RlbiB0byBORVRXT1JLX0RJU0NPTk5FQ1RJT05fRVZFTlQgZm9yIGdyb3VwIHJlbW92YWwKLSAgICAgICAgICAgICAgICAgKiBoYW5kbGluZyBzaW5jZSBzdXBwbGljYW50IGFjdHVhbGx5IHRyaWVzIHRvIHJlY29ubmVjdCBhZnRlciBhIHRlbXBvcmFyeQotICAgICAgICAgICAgICAgICAqIGRpc2Nvbm5lY3QgdW50aWwgZ3JvdXAgaWRsZSB0aW1lIG91dC4gRXZlbnR1YWxseSwgYSBncm91cCByZW1vdmFsIGV2ZW50Ci0gICAgICAgICAgICAgICAgICogd2lsbCBjb21lIHdoZW4gZ3JvdXAgaGFzIGJlZW4gcmVtb3ZlZC4KLSAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAqIFdoZW4gdGhlcmUgYXJlIGNvbm5lY3Rpdml0eSBpc3N1ZXMgZHVyaW5nIHRlbXBvcmFyeSBkaXNjb25uZWN0LCB0aGUgYXBwbGljYXRpb24KLSAgICAgICAgICAgICAgICAgKiB3aWxsIGFsc28ganVzdCByZW1vdmUgdGhlIGdyb3VwLgotICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICogVHJlYXRpbmcgbmV0d29yayBkaXNjb25uZWN0aW9uIGFzIGdyb3VwIHJlbW92YWwgY2F1c2VzIHJhY2UgY29uZGl0aW9ucyBzaW5jZQotICAgICAgICAgICAgICAgICAqIHN1cHBsaWNhbnQgd291bGQgc3RpbGwgbWFpbnRhaW4gdGhlIGdyb3VwIGF0IHRoYXQgc3RhZ2UuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfR1JPVVBfUkVNT1ZFRF9FVkVOVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyAiIGdyb3VwIHJlbW92ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlR3JvdXBSZW1vdmVkKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UbyhtSW5hY3RpdmVTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0RFVklDRV9MT1NUX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPSAoV2lmaVAycERldmljZSkgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGV2aWNlIGxvc3MgZm9yIGEgY29ubmVjdGVkIGRldmljZSBpbmRpY2F0ZXMgaXQgaXMgbm90IGluIGRpc2NvdmVyeSBhbnkgbW9yZQotICAgICAgICAgICAgICAgICAgICBpZiAobUdyb3VwLmNvbnRhaW5zKGRldmljZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkFkZCBkZXZpY2UgdG8gbG9zdCBsaXN0ICIgKyBkZXZpY2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVBlZXJzTG9zdER1cmluZ0Nvbm5lY3Rpb24udXBkYXRlU3VwcGxpY2FudERldGFpbHMoZGV2aWNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIERvIHRoZSByZWd1bGFyIGRldmljZSBsb3N0IGhhbmRsaW5nCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlTdGF0ZU1hY2hpbmUuQ01EX0RJU0FCTEVfUDJQX1JFUToKLSAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0dST1VQKTsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgYW55IGNsaWVudCB0byBqb2luIHRoZSBHTyBkdXJpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIFdQUyB3aW5kb3cKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX1dQUzoKLSAgICAgICAgICAgICAgICAgICAgV3BzSW5mbyB3cHMgPSAoV3BzSW5mbykgbWVzc2FnZS5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3cHMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuU1RBUlRfV1BTX0ZBSUxFRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3cHMuc2V0dXAgPT0gV3BzSW5mby5QQkMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IG1XaWZpTmF0aXZlLnN0YXJ0V3BzUGJjKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3BzLnBpbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBpbiA9IG1XaWZpTmF0aXZlLnN0YXJ0V3BzUGluRGlzcGxheShtR3JvdXAuZ2V0SW50ZXJmYWNlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIucGFyc2VJbnQocGluKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5SW52aXRhdGlvblNlbnQocGluLCAiYW55Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGlnbm9yZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IG1XaWZpTmF0aXZlLnN0YXJ0V3BzUGluS2V5cGFkKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdwcy5waW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5VG9NZXNzYWdlKG1lc3NhZ2UsIHJldCA/IFdpZmlQMnBNYW5hZ2VyLlNUQVJUX1dQU19TVUNDRUVERUQgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLlNUQVJUX1dQU19GQUlMRUQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlQMnBNYW5hZ2VyLkNPTk5FQ1Q6Ci0gICAgICAgICAgICAgICAgICAgIFdpZmlQMnBDb25maWcgY29uZmlnID0gKFdpZmlQMnBDb25maWcpIG1lc3NhZ2Uub2JqOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb25maWdJbnZhbGlkKGNvbmZpZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2UoIkRyb3BwaW5nIGNvbm5lY3QgcmVxdWVzZXQgIiArIGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5DT05ORUNUX0ZBSUxFRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBsb2dkKCJJbnZpdGluZyBkZXZpY2UgOiAiICsgY29uZmlnLmRldmljZUFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnID0gY29uZmlnOwotICAgICAgICAgICAgICAgICAgICBpZiAobVdpZmlOYXRpdmUucDJwSW52aXRlKG1Hcm91cCwgY29uZmlnLmRldmljZUFkZHJlc3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUGVlcnMudXBkYXRlU3RhdHVzKGNvbmZpZy5kZXZpY2VBZGRyZXNzLCBXaWZpUDJwRGV2aWNlLklOVklURUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFBlZXJzQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ09OTkVDVF9TVUNDRUVERUQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlUb01lc3NhZ2UobWVzc2FnZSwgV2lmaVAycE1hbmFnZXIuQ09OTkVDVF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLkVSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBmaWd1cmUgb3V0IHVwZGF0aW5nIHRoZSBzdGF0dXMgdG8gZGVjbGluZWQgd2hlbiBpbnZpdGF0aW9uIGlzIHJlamVjdGVkCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX0lOVklUQVRJT05fUkVTVUxUX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBQMnBTdGF0dXMgc3RhdHVzID0gKFAycFN0YXR1cyltZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBQMnBTdGF0dXMuU1VDQ0VTUykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW52b2NhdGlvbiB3YXMgc3VjY2VlZGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbG9nZSgiSW52aXRhdGlvbiByZXN1bHQgIiArIHN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gUDJwU3RhdHVzLlVOS05PV05fUDJQX0dST1VQKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0YXJnZXQgZGV2aWNlIGhhcyBhbHJlYWR5IHJlbW92ZWQgdGhlIGNyZWRlbnRpYWwuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTbywgcmVtb3ZlIHRoaXMgY3JlZGVudGlhbCBhY2NvcmRpbmdseS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZXRJZCA9IG1Hcm91cC5nZXROZXR3b3JrSWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXRJZCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiUmVtb3ZlIHVua25vd24gY2xpZW50IGZyb20gdGhlIGxpc3QiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbW92ZUNsaWVudEZyb21MaXN0KG5ldElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzLCBmYWxzZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGZvdW5kIHRoZSBjbGllbnQgb24gdGhlIGxpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZSgiQWxyZWFkeSByZW1vdmVkIHRoZSBjbGllbnQsIGlnbm9yZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IGludml0YXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoV2lmaVAycE1hbmFnZXIuQ09OTkVDVCwgbVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX1BCQ19SRVFfRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX0VOVEVSX1BJTl9FVkVOVDoKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfU0hPV19QSU5fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIFdpZmlQMnBQcm92RGlzY0V2ZW50IHByb3ZEaXNjID0gKFdpZmlQMnBQcm92RGlzY0V2ZW50KSBtZXNzYWdlLm9iajsKLSAgICAgICAgICAgICAgICAgICAgbVNhdmVkUGVlckNvbmZpZyA9IG5ldyBXaWZpUDJwQ29uZmlnKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcuZGV2aWNlQWRkcmVzcyA9IHByb3ZEaXNjLmRldmljZS5kZXZpY2VBZGRyZXNzOwotICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS53aGF0ID09IFdpZmlNb25pdG9yLlAyUF9QUk9WX0RJU0NfRU5URVJfUElOX0VWRU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLndwcy5zZXR1cCA9IFdwc0luZm8uS0VZUEFEOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2Uud2hhdCA9PSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX1NIT1dfUElOX0VWRU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLndwcy5zZXR1cCA9IFdwc0luZm8uRElTUExBWTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcud3BzLnBpbiA9IHByb3ZEaXNjLnBpbjsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcud3BzLnNldHVwID0gV3BzSW5mby5QQkM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Vc2VyQXV0aG9yaXppbmdKb2luU3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdpZmlNb25pdG9yLlAyUF9HUk9VUF9TVEFSVEVEX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICBsb2dlKCJEdXBsaWNhdGUgZ3JvdXAgY3JlYXRpb24gZXZlbnQgbm90aWNlLCBpZ25vcmUiKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEhBTkRMRUQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBleGl0KCkgewotICAgICAgICAgICAgdXBkYXRlVGhpc0RldmljZShXaWZpUDJwRGV2aWNlLkFWQUlMQUJMRSk7Ci0gICAgICAgICAgICByZXNldFdpZmlQMnBJbmZvKCk7Ci0gICAgICAgICAgICBtTmV0d29ya0luZm8uc2V0RGV0YWlsZWRTdGF0ZShOZXR3b3JrSW5mby5EZXRhaWxlZFN0YXRlLkRJU0NPTk5FQ1RFRCwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICBzZW5kUDJwQ29ubmVjdGlvbkNoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIFVzZXJBdXRob3JpemluZ0pvaW5TdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICAgICAgbm90aWZ5SW52aXRhdGlvblJlY2VpdmVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc01lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArIG1lc3NhZ2UudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19QQkNfUkVRX0VWRU5UOgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1vbml0b3IuUDJQX1BST1ZfRElTQ19FTlRFUl9QSU5fRVZFTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXaWZpTW9uaXRvci5QMlBfUFJPVl9ESVNDX1NIT1dfUElOX0VWRU5UOgotICAgICAgICAgICAgICAgICAgICAvL0lnbm9yZSBtb3JlIGNsaWVudCByZXF1ZXN0cwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFBFRVJfQ09OTkVDVElPTl9VU0VSX0FDQ0VQVDoKLSAgICAgICAgICAgICAgICAgICAgLy9TdG9wIGRpc2NvdmVyeSB0byBhdm9pZCBmYWlsdXJlIGR1ZSB0byBjaGFubmVsIHN3aXRjaAotICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5wMnBTdG9wRmluZCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobVNhdmVkUGVlckNvbmZpZy53cHMuc2V0dXAgPT0gV3BzSW5mby5QQkMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1XaWZpTmF0aXZlLnN0YXJ0V3BzUGJjKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zdGFydFdwc1BpbktleXBhZChtR3JvdXAuZ2V0SW50ZXJmYWNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TYXZlZFBlZXJDb25maWcud3BzLnBpbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Hcm91cENyZWF0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUEVFUl9DT05ORUNUSU9OX1VTRVJfUkVKRUNUOgotICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJVc2VyIHJlamVjdGVkIGluY29taW5nIHJlcXVlc3QiKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRvKG1Hcm91cENyZWF0ZWRTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7Ci0gICAgICAgICAgICAvL1RPRE86IGRpc21pc3MgZGlhbG9nIGlmIG5vdCBhbHJlYWR5IGRvbmUKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIE9uZ29pbmdHcm91cFJlbW92YWxTdGF0ZSBleHRlbmRzIFN0YXRlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGVudGVyKCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHByb2Nlc3NNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZChnZXROYW1lKCkgKyBtZXNzYWdlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLndoYXQpIHsKLSAgICAgICAgICAgICAgICAvLyBHcm91cCByZW1vdmFsIG9uZ29pbmcuIE11bHRpcGxlIGNhbGxzCi0gICAgICAgICAgICAgICAgLy8gZW5kIHVwIHJlbW92aW5nIHBlcnNpc3RlZCBuZXR3b3JrLiBEbyBub3RoaW5nLgotICAgICAgICAgICAgICAgIGNhc2UgV2lmaVAycE1hbmFnZXIuUkVNT1ZFX0dST1VQOgotICAgICAgICAgICAgICAgICAgICByZXBseVRvTWVzc2FnZShtZXNzYWdlLCBXaWZpUDJwTWFuYWdlci5SRU1PVkVfR1JPVVBfU1VDQ0VFREVEKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgLy8gUGFyZW50IHN0YXRlIHdpbGwgdHJhbnNpdGlvbiBvdXQgb2YgdGhpcyBzdGF0ZQotICAgICAgICAgICAgICAgIC8vIHdoZW4gcmVtb3ZhbCBpcyBjb21wbGV0ZQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOT1RfSEFORExFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBIQU5ETEVEOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZHVtcChGaWxlRGVzY3JpcHRvciBmZCwgUHJpbnRXcml0ZXIgcHcsIFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgc3VwZXIuZHVtcChmZCwgcHcsIGFyZ3MpOwotICAgICAgICBwdy5wcmludGxuKCJtV2lmaVAycEluZm8gIiArIG1XaWZpUDJwSW5mbyk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1Hcm91cCAiICsgbUdyb3VwKTsKLSAgICAgICAgcHcucHJpbnRsbigibVNhdmVkUGVlckNvbmZpZyAiICsgbVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1TYXZlZFAycEdyb3VwICIgKyBtU2F2ZWRQMnBHcm91cCk7Ci0gICAgICAgIHB3LnByaW50bG4oKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2VuZFAycFN0YXRlQ2hhbmdlZEJyb2FkY2FzdChib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaVAycE1hbmFnZXIuV0lGSV9QMlBfU1RBVEVfQ0hBTkdFRF9BQ1RJT04pOwotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKLSAgICAgICAgaWYgKGVuYWJsZWQpIHsKLSAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpUDJwTWFuYWdlci5FWFRSQV9XSUZJX1NUQVRFLAotICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5XSUZJX1AyUF9TVEFURV9FTkFCTEVEKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpUDJwTWFuYWdlci5FWFRSQV9XSUZJX1NUQVRFLAotICAgICAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5XSUZJX1AyUF9TVEFURV9ESVNBQkxFRCk7Ci0gICAgICAgIH0KLSAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2VuZFAycERpc2NvdmVyeUNoYW5nZWRCcm9hZGNhc3QoYm9vbGVhbiBzdGFydGVkKSB7Ci0gICAgICAgIGlmIChtRGlzY292ZXJ5U3RhcnRlZCA9PSBzdGFydGVkKSByZXR1cm47Ci0gICAgICAgIG1EaXNjb3ZlcnlTdGFydGVkID0gc3RhcnRlZDsKLQotICAgICAgICBpZiAoREJHKSBsb2dkKCJkaXNjb3ZlcnkgY2hhbmdlIGJyb2FkY2FzdCAiICsgc3RhcnRlZCk7Ci0KLSAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaVAycE1hbmFnZXIuV0lGSV9QMlBfRElTQ09WRVJZX0NIQU5HRURfQUNUSU9OKTsKLSAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWV9CRUZPUkVfQk9PVCk7Ci0gICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpUDJwTWFuYWdlci5FWFRSQV9ESVNDT1ZFUllfU1RBVEUsIHN0YXJ0ZWQgPwotICAgICAgICAgICAgICAgIFdpZmlQMnBNYW5hZ2VyLldJRklfUDJQX0RJU0NPVkVSWV9TVEFSVEVEIDoKLSAgICAgICAgICAgICAgICBXaWZpUDJwTWFuYWdlci5XSUZJX1AyUF9ESVNDT1ZFUllfU1RPUFBFRCk7Ci0gICAgICAgIG1Db250ZXh0LnNlbmRTdGlja3lCcm9hZGNhc3RBc1VzZXIoaW50ZW50LCBVc2VySGFuZGxlLkFMTCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNlbmRUaGlzRGV2aWNlQ2hhbmdlZEJyb2FkY2FzdCgpIHsKLSAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaVAycE1hbmFnZXIuV0lGSV9QMlBfVEhJU19ERVZJQ0VfQ0hBTkdFRF9BQ1RJT04pOwotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlQMnBNYW5hZ2VyLkVYVFJBX1dJRklfUDJQX0RFVklDRSwgbmV3IFdpZmlQMnBEZXZpY2UobVRoaXNEZXZpY2UpKTsKLSAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2VuZFBlZXJzQ2hhbmdlZEJyb2FkY2FzdCgpIHsKLSAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaVAycE1hbmFnZXIuV0lGSV9QMlBfUEVFUlNfQ0hBTkdFRF9BQ1RJT04pOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoV2lmaVAycE1hbmFnZXIuRVhUUkFfUDJQX0RFVklDRV9MSVNULCBuZXcgV2lmaVAycERldmljZUxpc3QobVBlZXJzKSk7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QpOwotICAgICAgICBtQ29udGV4dC5zZW5kQnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZW5kUDJwQ29ubmVjdGlvbkNoYW5nZWRCcm9hZGNhc3QoKSB7Ci0gICAgICAgIGlmIChEQkcpIGxvZ2QoInNlbmRpbmcgcDJwIGNvbm5lY3Rpb24gY2hhbmdlZCBicm9hZGNhc3QiKTsKLSAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaVAycE1hbmFnZXIuV0lGSV9QMlBfQ09OTkVDVElPTl9DSEFOR0VEX0FDVElPTik7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFlfQkVGT1JFX0JPT1QKLSAgICAgICAgICAgICAgICB8IEludGVudC5GTEFHX1JFQ0VJVkVSX1JFUExBQ0VfUEVORElORyk7Ci0gICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpUDJwTWFuYWdlci5FWFRSQV9XSUZJX1AyUF9JTkZPLCBuZXcgV2lmaVAycEluZm8obVdpZmlQMnBJbmZvKSk7Ci0gICAgICAgIGludGVudC5wdXRFeHRyYShXaWZpUDJwTWFuYWdlci5FWFRSQV9ORVRXT1JLX0lORk8sIG5ldyBOZXR3b3JrSW5mbyhtTmV0d29ya0luZm8pKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKFdpZmlQMnBNYW5hZ2VyLkVYVFJBX1dJRklfUDJQX0dST1VQLCBuZXcgV2lmaVAycEdyb3VwKG1Hcm91cCkpOwotICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwpOwotICAgICAgICBtV2lmaUNoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaVAycFNlcnZpY2UuUDJQX0NPTk5FQ1RJT05fQ0hBTkdFRCwKLSAgICAgICAgICAgICAgICBuZXcgTmV0d29ya0luZm8obU5ldHdvcmtJbmZvKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNlbmRQMnBQZXJzaXN0ZW50R3JvdXBzQ2hhbmdlZEJyb2FkY2FzdCgpIHsKLSAgICAgICAgaWYgKERCRykgbG9nZCgic2VuZGluZyBwMnAgcGVyc2lzdGVudCBncm91cHMgY2hhbmdlZCBicm9hZGNhc3QiKTsKLSAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoV2lmaVAycE1hbmFnZXIuV0lGSV9QMlBfUEVSU0lTVEVOVF9HUk9VUFNfQ0hBTkdFRF9BQ1RJT04pOwotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKTsKLSAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc3RhcnREaGNwU2VydmVyKFN0cmluZyBpbnRmKSB7Ci0gICAgICAgIEludGVyZmFjZUNvbmZpZ3VyYXRpb24gaWZjZyA9IG51bGw7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZmNnID0gbU53U2VydmljZS5nZXRJbnRlcmZhY2VDb25maWcoaW50Zik7Ci0gICAgICAgICAgICBpZmNnLnNldExpbmtBZGRyZXNzKG5ldyBMaW5rQWRkcmVzcyhOZXR3b3JrVXRpbHMubnVtZXJpY1RvSW5ldEFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICBTRVJWRVJfQUREUkVTUyksIDI0KSk7Ci0gICAgICAgICAgICBpZmNnLnNldEludGVyZmFjZVVwKCk7Ci0gICAgICAgICAgICBtTndTZXJ2aWNlLnNldEludGVyZmFjZUNvbmZpZyhpbnRmLCBpZmNnKTsKLSAgICAgICAgICAgIC8qIFRoaXMgc3RhcnRzIHRoZSBkbnNtYXNxIHNlcnZlciAqLwotICAgICAgICAgICAgbU53U2VydmljZS5zdGFydFRldGhlcmluZyhESENQX1JBTkdFKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGxvZ2UoIkVycm9yIGNvbmZpZ3VyaW5nIGludGVyZmFjZSAiICsgaW50ZiArICIsIDoiICsgZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBsb2dkKCJTdGFydGVkIERoY3Agc2VydmVyIG9uICIgKyBpbnRmKTsKLSAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzdG9wRGhjcFNlcnZlcihTdHJpbmcgaW50ZikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgbU53U2VydmljZS5zdG9wVGV0aGVyaW5nKCk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBsb2dlKCJFcnJvciBzdG9wcGluZyBEaGNwIHNlcnZlciIgKyBlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGxvZ2QoIlN0b3BwZWQgRGhjcCBzZXJ2ZXIiKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbm90aWZ5UDJwRW5hYmxlRmFpbHVyZSgpIHsKLSAgICAgICAgUmVzb3VyY2VzIHIgPSBSZXNvdXJjZXMuZ2V0U3lzdGVtKCk7Ci0gICAgICAgIEFsZXJ0RGlhbG9nIGRpYWxvZyA9IG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKG1Db250ZXh0KQotICAgICAgICAgICAgLnNldFRpdGxlKHIuZ2V0U3RyaW5nKFIuc3RyaW5nLndpZmlfcDJwX2RpYWxvZ190aXRsZSkpCi0gICAgICAgICAgICAuc2V0TWVzc2FnZShyLmdldFN0cmluZyhSLnN0cmluZy53aWZpX3AycF9mYWlsZWRfbWVzc2FnZSkpCi0gICAgICAgICAgICAuc2V0UG9zaXRpdmVCdXR0b24oci5nZXRTdHJpbmcoUi5zdHJpbmcub2spLCBudWxsKQotICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICBkaWFsb2cuZ2V0V2luZG93KCkuc2V0VHlwZShXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX1NZU1RFTV9BTEVSVCk7Ci0gICAgICAgIGRpYWxvZy5zaG93KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFkZFJvd1RvRGlhbG9nKFZpZXdHcm91cCBncm91cCwgaW50IHN0cmluZ0lkLCBTdHJpbmcgdmFsdWUpIHsKLSAgICAgICAgUmVzb3VyY2VzIHIgPSBSZXNvdXJjZXMuZ2V0U3lzdGVtKCk7Ci0gICAgICAgIFZpZXcgcm93ID0gTGF5b3V0SW5mbGF0ZXIuZnJvbShtQ29udGV4dCkuaW5mbGF0ZShSLmxheW91dC53aWZpX3AycF9kaWFsb2dfcm93LAotICAgICAgICAgICAgICAgIGdyb3VwLCBmYWxzZSk7Ci0gICAgICAgICgoVGV4dFZpZXcpIHJvdy5maW5kVmlld0J5SWQoUi5pZC5uYW1lKSkuc2V0VGV4dChyLmdldFN0cmluZyhzdHJpbmdJZCkpOwotICAgICAgICAoKFRleHRWaWV3KSByb3cuZmluZFZpZXdCeUlkKFIuaWQudmFsdWUpKS5zZXRUZXh0KHZhbHVlKTsKLSAgICAgICAgZ3JvdXAuYWRkVmlldyhyb3cpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBub3RpZnlJbnZpdGF0aW9uU2VudChTdHJpbmcgcGluLCBTdHJpbmcgcGVlckFkZHJlc3MpIHsKLSAgICAgICAgUmVzb3VyY2VzIHIgPSBSZXNvdXJjZXMuZ2V0U3lzdGVtKCk7Ci0KLSAgICAgICAgZmluYWwgVmlldyB0ZXh0RW50cnlWaWV3ID0gTGF5b3V0SW5mbGF0ZXIuZnJvbShtQ29udGV4dCkKLSAgICAgICAgICAgICAgICAuaW5mbGF0ZShSLmxheW91dC53aWZpX3AycF9kaWFsb2csIG51bGwpOwotCi0gICAgICAgIFZpZXdHcm91cCBncm91cCA9IChWaWV3R3JvdXApIHRleHRFbnRyeVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaW5mbyk7Ci0gICAgICAgIGFkZFJvd1RvRGlhbG9nKGdyb3VwLCBSLnN0cmluZy53aWZpX3AycF90b19tZXNzYWdlLCBnZXREZXZpY2VOYW1lKHBlZXJBZGRyZXNzKSk7Ci0gICAgICAgIGFkZFJvd1RvRGlhbG9nKGdyb3VwLCBSLnN0cmluZy53aWZpX3AycF9zaG93X3Bpbl9tZXNzYWdlLCBwaW4pOwotCi0gICAgICAgIEFsZXJ0RGlhbG9nIGRpYWxvZyA9IG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKG1Db250ZXh0KQotICAgICAgICAgICAgLnNldFRpdGxlKHIuZ2V0U3RyaW5nKFIuc3RyaW5nLndpZmlfcDJwX2ludml0YXRpb25fc2VudF90aXRsZSkpCi0gICAgICAgICAgICAuc2V0Vmlldyh0ZXh0RW50cnlWaWV3KQotICAgICAgICAgICAgLnNldFBvc2l0aXZlQnV0dG9uKHIuZ2V0U3RyaW5nKFIuc3RyaW5nLm9rKSwgbnVsbCkKLSAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICAgICAgZGlhbG9nLmdldFdpbmRvdygpLnNldFR5cGUoV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9TWVNURU1fQUxFUlQpOwotICAgICAgICBkaWFsb2cuc2hvdygpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBub3RpZnlJbnZpdGF0aW9uUmVjZWl2ZWQoKSB7Ci0gICAgICAgIFJlc291cmNlcyByID0gUmVzb3VyY2VzLmdldFN5c3RlbSgpOwotICAgICAgICBmaW5hbCBXcHNJbmZvIHdwcyA9IG1TYXZlZFBlZXJDb25maWcud3BzOwotICAgICAgICBmaW5hbCBWaWV3IHRleHRFbnRyeVZpZXcgPSBMYXlvdXRJbmZsYXRlci5mcm9tKG1Db250ZXh0KQotICAgICAgICAgICAgICAgIC5pbmZsYXRlKFIubGF5b3V0LndpZmlfcDJwX2RpYWxvZywgbnVsbCk7Ci0KLSAgICAgICAgVmlld0dyb3VwIGdyb3VwID0gKFZpZXdHcm91cCkgdGV4dEVudHJ5Vmlldy5maW5kVmlld0J5SWQoUi5pZC5pbmZvKTsKLSAgICAgICAgYWRkUm93VG9EaWFsb2coZ3JvdXAsIFIuc3RyaW5nLndpZmlfcDJwX2Zyb21fbWVzc2FnZSwgZ2V0RGV2aWNlTmFtZSgKLSAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLmRldmljZUFkZHJlc3MpKTsKLQotICAgICAgICBmaW5hbCBFZGl0VGV4dCBwaW4gPSAoRWRpdFRleHQpIHRleHRFbnRyeVZpZXcuZmluZFZpZXdCeUlkKFIuaWQud2lmaV9wMnBfd3BzX3Bpbik7Ci0KLSAgICAgICAgQWxlcnREaWFsb2cgZGlhbG9nID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIobUNvbnRleHQpCi0gICAgICAgICAgICAuc2V0VGl0bGUoci5nZXRTdHJpbmcoUi5zdHJpbmcud2lmaV9wMnBfaW52aXRhdGlvbl90b19jb25uZWN0X3RpdGxlKSkKLSAgICAgICAgICAgIC5zZXRWaWV3KHRleHRFbnRyeVZpZXcpCi0gICAgICAgICAgICAuc2V0UG9zaXRpdmVCdXR0b24oci5nZXRTdHJpbmcoUi5zdHJpbmcuYWNjZXB0KSwgbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRGlhbG9nSW50ZXJmYWNlIGRpYWxvZywgaW50IHdoaWNoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdwcy5zZXR1cCA9PSBXcHNJbmZvLktFWVBBRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2F2ZWRQZWVyQ29uZmlnLndwcy5waW4gPSBwaW4uZ2V0VGV4dCgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBhY2NlcHQgaW52aXRhdGlvbiAiICsgbVNhdmVkUGVlckNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoUEVFUl9DT05ORUNUSU9OX1VTRVJfQUNDRVBUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgIC5zZXROZWdhdGl2ZUJ1dHRvbihyLmdldFN0cmluZyhSLnN0cmluZy5kZWNsaW5lKSwgbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhEaWFsb2dJbnRlcmZhY2UgZGlhbG9nLCBpbnQgd2hpY2gpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKGdldE5hbWUoKSArICIgaWdub3JlIGNvbm5lY3QiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShQRUVSX0NPTk5FQ1RJT05fVVNFUl9SRUpFQ1QpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgLnNldE9uQ2FuY2VsTGlzdGVuZXIobmV3IERpYWxvZ0ludGVyZmFjZS5PbkNhbmNlbExpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNhbmNlbChEaWFsb2dJbnRlcmZhY2UgYXJnMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoZ2V0TmFtZSgpICsgIiBpZ25vcmUgY29ubmVjdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKFBFRVJfQ09OTkVDVElPTl9VU0VSX1JFSkVDVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgLy9tYWtlIHRoZSBlbnRlciBwaW4gYXJlYSBvciB0aGUgZGlzcGxheSBwaW4gYXJlYSB2aXNpYmxlCi0gICAgICAgIHN3aXRjaCAod3BzLnNldHVwKSB7Ci0gICAgICAgICAgICBjYXNlIFdwc0luZm8uS0VZUEFEOgotICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIkVudGVyIHBpbiBzZWN0aW9uIHZpc2libGUiKTsKLSAgICAgICAgICAgICAgICB0ZXh0RW50cnlWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmVudGVyX3Bpbl9zZWN0aW9uKS5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdwc0luZm8uRElTUExBWToKLSAgICAgICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJTaG93biBwaW4gc2VjdGlvbiB2aXNpYmxlIik7Ci0gICAgICAgICAgICAgICAgYWRkUm93VG9EaWFsb2coZ3JvdXAsIFIuc3RyaW5nLndpZmlfcDJwX3Nob3dfcGluX21lc3NhZ2UsIHdwcy5waW4pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoci5nZXRDb25maWd1cmF0aW9uKCkudWlNb2RlICYgQ29uZmlndXJhdGlvbi5VSV9NT0RFX1RZUEVfQVBQTElBTkNFKSA9PQotICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24uVUlfTU9ERV9UWVBFX0FQUExJQU5DRSkgewotICAgICAgICAgICAgLy8gRm9yIGFwcGxpYW5jZSBkZXZpY2VzLCBhZGQgYSBrZXkgbGlzdGVuZXIgd2hpY2ggYWNjZXB0cy4KLSAgICAgICAgICAgIGRpYWxvZy5zZXRPbktleUxpc3RlbmVyKG5ldyBEaWFsb2dJbnRlcmZhY2UuT25LZXlMaXN0ZW5lcigpIHsKLQotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uS2V5KERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCBrZXlDb2RlLCBLZXlFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBtYWtlIHRoZSBhY3R1YWwga2V5IGNvbWUgZnJvbSBhIGNvbmZpZyB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV9WT0xVTUVfTVVURSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoUEVFUl9DT05ORUNUSU9OX1VTRVJfQUNDRVBUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZy5kaXNtaXNzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAvLyBUT0RPOiBhZGQgdGltZW91dCBmb3IgdGhpcyBkaWFsb2cuCi0gICAgICAgICAgICAvLyBUT0RPOiB1cGRhdGUgVUkgaW4gYXBwbGlhbmNlIG1vZGUgdG8gdGVsbCB1c2VyIHdoYXQgdG8gZG8uCi0gICAgICAgIH0KLQotICAgICAgICBkaWFsb2cuZ2V0V2luZG93KCkuc2V0VHlwZShXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX1NZU1RFTV9BTEVSVCk7Ci0gICAgICAgIGRpYWxvZy5zaG93KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3luY2hyb25pemUgdGhlIHBlcnNpc3RlbnQgZ3JvdXAgbGlzdCBiZXR3ZWVuCi0gICAgICogd3BhX3N1cHBsaWNhbnQgYW5kIG1Hcm91cHMuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVBlcnNpc3RlbnROZXR3b3Jrcyhib29sZWFuIHJlbG9hZCkgewotICAgICAgICBTdHJpbmcgbGlzdFN0ciA9IG1XaWZpTmF0aXZlLmxpc3ROZXR3b3JrcygpOwotICAgICAgICBpZiAobGlzdFN0ciA9PSBudWxsKSByZXR1cm47Ci0KLSAgICAgICAgYm9vbGVhbiBpc1NhdmVSZXF1aXJlZCA9IGZhbHNlOwotICAgICAgICBTdHJpbmdbXSBsaW5lcyA9IGxpc3RTdHIuc3BsaXQoIlxuIik7Ci0gICAgICAgIGlmIChsaW5lcyA9PSBudWxsKSByZXR1cm47Ci0KLSAgICAgICAgaWYgKHJlbG9hZCkgbUdyb3Vwcy5jbGVhcigpOwotCi0gICAgICAgIC8vIFNraXAgdGhlIGZpcnN0IGxpbmUsIHdoaWNoIGlzIGEgaGVhZGVyCi0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IGxpbmVzW2ldLnNwbGl0KCJcdCIpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsIHx8IHJlc3VsdC5sZW5ndGggPCA0KSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBuZXR3b3JrLWlkIHwgc3NpZCB8IGJzc2lkIHwgZmxhZ3MKLSAgICAgICAgICAgIGludCBuZXRJZCA9IC0xOwotICAgICAgICAgICAgU3RyaW5nIHNzaWQgPSByZXN1bHRbMV07Ci0gICAgICAgICAgICBTdHJpbmcgYnNzaWQgPSByZXN1bHRbMl07Ci0gICAgICAgICAgICBTdHJpbmcgZmxhZ3MgPSByZXN1bHRbM107Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG5ldElkID0gSW50ZWdlci5wYXJzZUludChyZXN1bHRbMF0pOwotICAgICAgICAgICAgfSBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmbGFncy5pbmRleE9mKCJbQ1VSUkVOVF0iKSAhPSAtMSkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZsYWdzLmluZGV4T2YoIltQMlAtUEVSU0lTVEVOVF0iKSA9PSAtMSkgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogVGhlIHVudXNlZCBwcm9maWxlIGlzIHNvbWV0aW1lcyByZW1haW5lZCB3aGVuIHRoZSBwMnAgZ3JvdXAgZm9ybWF0aW9uIGlzIGZhaWxlZC4KLSAgICAgICAgICAgICAgICAgKiBTbywgd2UgY2xlYW4gdXAgdGhlIHAycCBncm91cCBoZXJlLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoImNsZWFuIHVwIHRoZSB1bnVzZWQgcGVyc2lzdGVudCBncm91cC4gbmV0SWQ9IiArIG5ldElkKTsKLSAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5yZW1vdmVOZXR3b3JrKG5ldElkKTsKLSAgICAgICAgICAgICAgICBpc1NhdmVSZXF1aXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtR3JvdXBzLmNvbnRhaW5zKG5ldElkKSkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBXaWZpUDJwR3JvdXAgZ3JvdXAgPSBuZXcgV2lmaVAycEdyb3VwKCk7Ci0gICAgICAgICAgICBncm91cC5zZXROZXR3b3JrSWQobmV0SWQpOwotICAgICAgICAgICAgZ3JvdXAuc2V0TmV0d29ya05hbWUoc3NpZCk7Ci0gICAgICAgICAgICBTdHJpbmcgbW9kZSA9IG1XaWZpTmF0aXZlLmdldE5ldHdvcmtWYXJpYWJsZShuZXRJZCwgIm1vZGUiKTsKLSAgICAgICAgICAgIGlmIChtb2RlICE9IG51bGwgJiYgbW9kZS5lcXVhbHMoIjMiKSkgewotICAgICAgICAgICAgICAgIGdyb3VwLnNldElzR3JvdXBPd25lcih0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChic3NpZC5lcXVhbHNJZ25vcmVDYXNlKG1UaGlzRGV2aWNlLmRldmljZUFkZHJlc3MpKSB7Ci0gICAgICAgICAgICAgICAgZ3JvdXAuc2V0T3duZXIobVRoaXNEZXZpY2UpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBXaWZpUDJwRGV2aWNlIGRldmljZSA9IG5ldyBXaWZpUDJwRGV2aWNlKCk7Ci0gICAgICAgICAgICAgICAgZGV2aWNlLmRldmljZUFkZHJlc3MgPSBic3NpZDsKLSAgICAgICAgICAgICAgICBncm91cC5zZXRPd25lcihkZXZpY2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbUdyb3Vwcy5hZGQoZ3JvdXApOwotICAgICAgICAgICAgaXNTYXZlUmVxdWlyZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlbG9hZCB8fCBpc1NhdmVSZXF1aXJlZCkgewotICAgICAgICAgICAgbVdpZmlOYXRpdmUuc2F2ZUNvbmZpZygpOwotICAgICAgICAgICAgc2VuZFAycFBlcnNpc3RlbnRHcm91cHNDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIGNvbmZpZyBpcyB2YWxpZCBpZiBpdCBoYXMgYSBwZWVyIGFkZHJlc3MgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCi0gICAgICogZGlzY292ZXJlZAotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBpdCBpcyBpbnZhbGlkLCBmYWxzZSBvdGhlcndpc2UKLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNDb25maWdJbnZhbGlkKFdpZmlQMnBDb25maWcgY29uZmlnKSB7Ci0gICAgICAgIGlmIChjb25maWcgPT0gbnVsbCkgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShjb25maWcuZGV2aWNlQWRkcmVzcykpIHJldHVybiB0cnVlOwotICAgICAgICBpZiAobVBlZXJzLmdldChjb25maWcuZGV2aWNlQWRkcmVzcykgPT0gbnVsbCkgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKiBUT0RPOiBUaGUgc3VwcGxpY2FudCBkb2VzIG5vdCBwcm92aWRlIGdyb3VwIGNhcGFiaWxpdHkgY2hhbmdlcyBhcyBhbiBldmVudC4KLSAgICAgKiBIYXZpbmcgaXQgcHVzaGVkIGFzIGFuIGV2ZW50IHdvdWxkIGF2b2lkIHBvbGxpbmcgZm9yIHRoaXMgaW5mb3JtYXRpb24gcmlnaHQKLSAgICAgKiBiZWZvcmUgYSBjb25uZWN0aW9uCi0gICAgICovCi0gICAgcHJpdmF0ZSBXaWZpUDJwRGV2aWNlIGZldGNoQ3VycmVudERldmljZURldGFpbHMoV2lmaVAycENvbmZpZyBjb25maWcpIHsKLSAgICAgICAgLyogRmV0Y2ggJiB1cGRhdGUgZ3JvdXAgY2FwYWJpbGl0eSBmcm9tIHN1cHBsaWNhbnQgb24gdGhlIGRldmljZSAqLwotICAgICAgICBpbnQgZ2MgPSBtV2lmaU5hdGl2ZS5nZXRHcm91cENhcGFiaWxpdHkoY29uZmlnLmRldmljZUFkZHJlc3MpOwotICAgICAgICBtUGVlcnMudXBkYXRlR3JvdXBDYXBhYmlsaXR5KGNvbmZpZy5kZXZpY2VBZGRyZXNzLCBnYyk7Ci0gICAgICAgIHJldHVybiBtUGVlcnMuZ2V0KGNvbmZpZy5kZXZpY2VBZGRyZXNzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdGFydCBhIHAycCBncm91cCBuZWdvdGlhdGlvbiBhbmQgZGlzcGxheSBwaW4gaWYgbmVjZXNzYXJ5Ci0gICAgICogQHBhcmFtIGNvbmZpZyBmb3IgdGhlIHBlZXIKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcDJwQ29ubmVjdFdpdGhQaW5EaXNwbGF5KFdpZmlQMnBDb25maWcgY29uZmlnKSB7Ci0gICAgICAgIFdpZmlQMnBEZXZpY2UgZGV2ID0gZmV0Y2hDdXJyZW50RGV2aWNlRGV0YWlscyhjb25maWcpOwotCi0gICAgICAgIFN0cmluZyBwaW4gPSBtV2lmaU5hdGl2ZS5wMnBDb25uZWN0KGNvbmZpZywgZGV2LmlzR3JvdXBPd25lcigpKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEludGVnZXIucGFyc2VJbnQocGluKTsKLSAgICAgICAgICAgIG5vdGlmeUludml0YXRpb25TZW50KHBpbiwgY29uZmlnLmRldmljZUFkZHJlc3MpOwotICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gaWdub3JlKSB7Ci0gICAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIHAycENvbm5lY3QgZGlkIG5vdCByZXR1cm4gYSBwaW4KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlaW52b2tlIGEgcGVyc2lzdGVudCBncm91cC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjb25maWcgZm9yIHRoZSBwZWVyCi0gICAgICogQHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUKLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gcmVpbnZva2VQZXJzaXN0ZW50R3JvdXAoV2lmaVAycENvbmZpZyBjb25maWcpIHsKLSAgICAgICAgV2lmaVAycERldmljZSBkZXYgPSBmZXRjaEN1cnJlbnREZXZpY2VEZXRhaWxzKGNvbmZpZyk7Ci0KLSAgICAgICAgYm9vbGVhbiBqb2luID0gZGV2LmlzR3JvdXBPd25lcigpOwotICAgICAgICBTdHJpbmcgc3NpZCA9IG1XaWZpTmF0aXZlLnAycEdldFNzaWQoZGV2LmRldmljZUFkZHJlc3MpOwotICAgICAgICBpZiAoREJHKSBsb2dkKCJ0YXJnZXQgc3NpZCBpcyAiICsgc3NpZCArICIgam9pbjoiICsgam9pbik7Ci0KLSAgICAgICAgaWYgKGpvaW4gJiYgZGV2LmlzR3JvdXBMaW1pdCgpKSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJ0YXJnZXQgZGV2aWNlIHJlYWNoZXMgZ3JvdXAgbGltaXQuIik7Ci0KLSAgICAgICAgICAgIC8vIGlmIHRoZSB0YXJnZXQgZ3JvdXAgaGFzIHJlYWNoZWQgdGhlIGxpbWl0LAotICAgICAgICAgICAgLy8gdHJ5IGdyb3VwIGZvcm1hdGlvbi4KLSAgICAgICAgICAgIGpvaW4gPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChqb2luKSB7Ci0gICAgICAgICAgICBpbnQgbmV0SWQgPSBtR3JvdXBzLmdldE5ldHdvcmtJZChkZXYuZGV2aWNlQWRkcmVzcywgc3NpZCk7Ci0gICAgICAgICAgICBpZiAobmV0SWQgPj0gMCkgewotICAgICAgICAgICAgICAgIC8vIFNraXAgV1BTIGFuZCBzdGFydCA0d2F5IGhhbmRzaGFrZSBpbW1lZGlhdGVseS4KLSAgICAgICAgICAgICAgICBpZiAoIW1XaWZpTmF0aXZlLnAycEdyb3VwQWRkKG5ldElkKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFqb2luICYmIGRldi5pc0RldmljZUxpbWl0KCkpIHsKLSAgICAgICAgICAgIGxvZ2UoInRhcmdldCBkZXZpY2UgcmVhY2hlcyB0aGUgZGV2aWNlIGxpbWl0LiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFqb2luICYmIGRldi5pc0ludml0YXRpb25DYXBhYmxlKCkpIHsKLSAgICAgICAgICAgIGludCBuZXRJZCA9IFdpZmlQMnBHcm91cC5QRVJTSVNURU5UX05FVF9JRDsKLSAgICAgICAgICAgIGlmIChjb25maWcubmV0SWQgPj0gMCkgewotICAgICAgICAgICAgICAgIGlmIChjb25maWcuZGV2aWNlQWRkcmVzcy5lcXVhbHMobUdyb3Vwcy5nZXRPd25lckFkZHIoY29uZmlnLm5ldElkKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV0SWQgPSBjb25maWcubmV0SWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBuZXRJZCA9IG1Hcm91cHMuZ2V0TmV0d29ya0lkKGRldi5kZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuZXRJZCA8IDApIHsKLSAgICAgICAgICAgICAgICBuZXRJZCA9IGdldE5ldHdvcmtJZEZyb21DbGllbnRMaXN0KGRldi5kZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIm5ldElkIHJlbGF0ZWQgd2l0aCAiICsgZGV2LmRldmljZUFkZHJlc3MgKyAiID0gIiArIG5ldElkKTsKLSAgICAgICAgICAgIGlmIChuZXRJZCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW52b2tlIHRoZSBwZXJzaXN0ZW50IGdyb3VwLgotICAgICAgICAgICAgICAgIGlmIChtV2lmaU5hdGl2ZS5wMnBSZWludm9rZShuZXRJZCwgZGV2LmRldmljZUFkZHJlc3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgbmV0d29yayBpZC4gSXQnbGwgYmUgdXNlZCB3aGVuIGFuIGludml0YXRpb24gcmVzdWx0IGV2ZW50IGlzIHJlY2VpdmVkLgotICAgICAgICAgICAgICAgICAgICBjb25maWcubmV0SWQgPSBuZXRJZDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nZSgicDJwUmVpbnZva2UoKSBmYWlsZWQsIHVwZGF0ZSBuZXR3b3JrcyIpOwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVQZXJzaXN0ZW50TmV0d29ya3MoUkVMT0FEKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIG5ldHdvcmsgaWQgb2YgdGhlIGdyb3VwIG93bmVyIHByb2ZpbGUgd2hpY2ggaGFzIHRoZSBwMnAgY2xpZW50IHdpdGgKLSAgICAgKiB0aGUgc3BlY2lmaWVkIGRldmljZSBhZGRyZXNzIGluIGl0J3MgY2xpZW50IGxpc3QuCi0gICAgICogSWYgbW9yZSB0aGFuIG9uZSBwZXJzaXN0ZW50IGdyb3VwIG9mIHRoZSBzYW1lIGFkZHJlc3MgaXMgcHJlc2VudCBpbiBpdHMgY2xpZW50Ci0gICAgICogbGlzdHMsIHJldHVybiB0aGUgZmlyc3Qgb25lLgotICAgICAqCi0gICAgICogQHBhcmFtIGRldmljZUFkZHJlc3MgcDJwIGRldmljZSBhZGRyZXNzLgotICAgICAqIEByZXR1cm4gdGhlIG5ldHdvcmsgaWQuIGlmIG5vdCBmb3VuZCwgcmV0dXJuIC0xLgotICAgICAqLwotICAgIHByaXZhdGUgaW50IGdldE5ldHdvcmtJZEZyb21DbGllbnRMaXN0KFN0cmluZyBkZXZpY2VBZGRyZXNzKSB7Ci0gICAgICAgIGlmIChkZXZpY2VBZGRyZXNzID09IG51bGwpIHJldHVybiAtMTsKLQotICAgICAgICBDb2xsZWN0aW9uPFdpZmlQMnBHcm91cD4gZ3JvdXBzID0gbUdyb3Vwcy5nZXRHcm91cExpc3QoKTsKLSAgICAgICAgZm9yIChXaWZpUDJwR3JvdXAgZ3JvdXAgOiBncm91cHMpIHsKLSAgICAgICAgICAgIGludCBuZXRJZCA9IGdyb3VwLmdldE5ldHdvcmtJZCgpOwotICAgICAgICAgICAgU3RyaW5nW10gcDJwQ2xpZW50TGlzdCA9IGdldENsaWVudExpc3QobmV0SWQpOwotICAgICAgICAgICAgaWYgKHAycENsaWVudExpc3QgPT0gbnVsbCkgY29udGludWU7Ci0gICAgICAgICAgICBmb3IgKFN0cmluZyBjbGllbnQgOiBwMnBDbGllbnRMaXN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRldmljZUFkZHJlc3MuZXF1YWxzSWdub3JlQ2FzZShjbGllbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXRJZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiBwMnAgY2xpZW50IGxpc3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgbmV0d29yayBpZC4KLSAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayBpZC4KLSAgICAgKiBAcmV0dXJuIHAycCBjbGllbnQgbGlzdC4gaWYgbm90IGZvdW5kLCByZXR1cm4gbnVsbC4KLSAgICAgKi8KLSAgICBwcml2YXRlIFN0cmluZ1tdIGdldENsaWVudExpc3QoaW50IG5ldElkKSB7Ci0gICAgICAgIFN0cmluZyBwMnBDbGllbnRzID0gbVdpZmlOYXRpdmUuZ2V0TmV0d29ya1ZhcmlhYmxlKG5ldElkLCAicDJwX2NsaWVudF9saXN0Iik7Ci0gICAgICAgIGlmIChwMnBDbGllbnRzID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwMnBDbGllbnRzLnNwbGl0KCIgIik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlIHRoZSBzcGVjaWZpZWQgcDJwIGNsaWVudCBmcm9tIHRoZSBzcGVjaWZpZWQgcHJvZmlsZS4KLSAgICAgKiBAcGFyYW0gbmV0SWQgbmV0d29yayBpZCBvZiB0aGUgcHJvZmlsZS4KLSAgICAgKiBAcGFyYW0gYWRkciBwMnAgY2xpZW50IGFkZHJlc3MgdG8gYmUgcmVtb3ZlZC4KLSAgICAgKiBAcGFyYW0gaXNSZW1vdmFibGUgaWYgdHJ1ZSwgcmVtb3ZlIHRoZSBzcGVjaWZpZWQgcHJvZmlsZSBpZiBpdHMgY2xpZW50IGxpc3QgYmVjb21lcyBlbXB0eS4KLSAgICAgKiBAcmV0dXJuIHdoZXRoZXIgcmVtb3ZpbmcgdGhlIHNwZWNpZmllZCBwMnAgY2xpZW50IGlzIHN1Y2Nlc3NmdWwgb3Igbm90LgotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiByZW1vdmVDbGllbnRGcm9tTGlzdChpbnQgbmV0SWQsIFN0cmluZyBhZGRyLCBib29sZWFuIGlzUmVtb3ZhYmxlKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgbW9kaWZpZWRDbGllbnRMaXN0ID0gIG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICAgIFN0cmluZ1tdIGN1cnJlbnRDbGllbnRMaXN0ID0gZ2V0Q2xpZW50TGlzdChuZXRJZCk7Ci0gICAgICAgIGJvb2xlYW4gaXNDbGllbnRSZW1vdmVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChjdXJyZW50Q2xpZW50TGlzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmb3IgKFN0cmluZyBjbGllbnQgOiBjdXJyZW50Q2xpZW50TGlzdCkgewotICAgICAgICAgICAgICAgIGlmICghY2xpZW50LmVxdWFsc0lnbm9yZUNhc2UoYWRkcikpIHsKLSAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRDbGllbnRMaXN0LmFwcGVuZCgiICIpOwotICAgICAgICAgICAgICAgICAgICBtb2RpZmllZENsaWVudExpc3QuYXBwZW5kKGNsaWVudCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaXNDbGllbnRSZW1vdmVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1vZGlmaWVkQ2xpZW50TGlzdC5sZW5ndGgoKSA9PSAwICYmIGlzUmVtb3ZhYmxlKSB7Ci0gICAgICAgICAgICAvLyB0aGUgY2xpZW50IGxpc3QgaXMgZW1wdHkuIHNvIHJlbW92ZSBpdC4KLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoIlJlbW92ZSB1bmtub3duIG5ldHdvcmsiKTsKLSAgICAgICAgICAgIG1Hcm91cHMucmVtb3ZlKG5ldElkKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpc0NsaWVudFJlbW92ZWQpIHsKLSAgICAgICAgICAgIC8vIHNwZWNpZmllZCBwMnAgY2xpZW50IGlzIG5vdCBmb3VuZC4gYWxyZWFkeSByZW1vdmVkLgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKERCRykgbG9nZCgiTW9kaWZpZWQgY2xpZW50IGxpc3Q6ICIgKyBtb2RpZmllZENsaWVudExpc3QpOwotICAgICAgICBpZiAobW9kaWZpZWRDbGllbnRMaXN0Lmxlbmd0aCgpID09IDApIHsKLSAgICAgICAgICAgIG1vZGlmaWVkQ2xpZW50TGlzdC5hcHBlbmQoIlwiXCIiKTsKLSAgICAgICAgfQotICAgICAgICBtV2lmaU5hdGl2ZS5zZXROZXR3b3JrVmFyaWFibGUobmV0SWQsCi0gICAgICAgICAgICAgICAgInAycF9jbGllbnRfbGlzdCIsIG1vZGlmaWVkQ2xpZW50TGlzdC50b1N0cmluZygpKTsKLSAgICAgICAgbVdpZmlOYXRpdmUuc2F2ZUNvbmZpZygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0V2lmaVAycEluZm9Pbkdyb3VwRm9ybWF0aW9uKEluZXRBZGRyZXNzIHNlcnZlckluZXRBZGRyZXNzKSB7Ci0gICAgICAgIG1XaWZpUDJwSW5mby5ncm91cEZvcm1lZCA9IHRydWU7Ci0gICAgICAgIG1XaWZpUDJwSW5mby5pc0dyb3VwT3duZXIgPSBtR3JvdXAuaXNHcm91cE93bmVyKCk7Ci0gICAgICAgIG1XaWZpUDJwSW5mby5ncm91cE93bmVyQWRkcmVzcyA9IHNlcnZlckluZXRBZGRyZXNzOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCByZXNldFdpZmlQMnBJbmZvKCkgewotICAgICAgICBtV2lmaVAycEluZm8uZ3JvdXBGb3JtZWQgPSBmYWxzZTsKLSAgICAgICAgbVdpZmlQMnBJbmZvLmlzR3JvdXBPd25lciA9IGZhbHNlOwotICAgICAgICBtV2lmaVAycEluZm8uZ3JvdXBPd25lckFkZHJlc3MgPSBudWxsOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIGdldERldmljZU5hbWUoU3RyaW5nIGRldmljZUFkZHJlc3MpIHsKLSAgICAgICAgV2lmaVAycERldmljZSBkID0gbVBlZXJzLmdldChkZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgaWYgKGQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBkLmRldmljZU5hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy9UcmVhdCB0aGUgYWRkcmVzcyBhcyBuYW1lIGlmIHRoZXJlIGlzIG5vIG1hdGNoCi0gICAgICAgIHJldHVybiBkZXZpY2VBZGRyZXNzOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIGdldFBlcnNpc3RlZERldmljZU5hbWUoKSB7Ci0gICAgICAgIFN0cmluZyBkZXZpY2VOYW1lID0gU2V0dGluZ3MuR2xvYmFsLmdldFN0cmluZyhtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuV0lGSV9QMlBfREVWSUNFX05BTUUpOwotICAgICAgICBpZiAoZGV2aWNlTmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvKiBXZSB1c2UgdGhlIDQgZGlnaXRzIG9mIHRoZSBBTkRST0lEX0lEIHRvIGhhdmUgYSBmcmllbmRseQotICAgICAgICAgICAgICogZGVmYXVsdCB0aGF0IGhhcyBsb3cgbGlrZWxpaG9vZCBvZiBjb2xsaXNpb24gd2l0aCBhIHBlZXIgKi8KLSAgICAgICAgICAgIFN0cmluZyBpZCA9IFNldHRpbmdzLlNlY3VyZS5nZXRTdHJpbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BTkRST0lEX0lEKTsKLSAgICAgICAgICAgIHJldHVybiAiQW5kcm9pZF8iICsgaWQuc3Vic3RyaW5nKDAsNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRldmljZU5hbWU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIHNldEFuZFBlcnNpc3REZXZpY2VOYW1lKFN0cmluZyBkZXZOYW1lKSB7Ci0gICAgICAgIGlmIChkZXZOYW1lID09IG51bGwpIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIW1XaWZpTmF0aXZlLnNldERldmljZU5hbWUoZGV2TmFtZSkpIHsKLSAgICAgICAgICAgIGxvZ2UoIkZhaWxlZCB0byBzZXQgZGV2aWNlIG5hbWUgIiArIGRldk5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbVRoaXNEZXZpY2UuZGV2aWNlTmFtZSA9IGRldk5hbWU7Ci0gICAgICAgIG1XaWZpTmF0aXZlLnNldFAycFNzaWRQb3N0Zml4KCItIiArIG1UaGlzRGV2aWNlLmRldmljZU5hbWUpOwotCi0gICAgICAgIFNldHRpbmdzLkdsb2JhbC5wdXRTdHJpbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfUDJQX0RFVklDRV9OQU1FLCBkZXZOYW1lKTsKLSAgICAgICAgc2VuZFRoaXNEZXZpY2VDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBzZXRXZmRJbmZvKFdpZmlQMnBXZmRJbmZvIHdmZEluZm8pIHsKLSAgICAgICAgYm9vbGVhbiBzdWNjZXNzOwotCi0gICAgICAgIGlmICghd2ZkSW5mby5pc1dmZEVuYWJsZWQoKSkgewotICAgICAgICAgICAgc3VjY2VzcyA9IG1XaWZpTmF0aXZlLnNldFdmZEVuYWJsZShmYWxzZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdWNjZXNzID0KLSAgICAgICAgICAgICAgICBtV2lmaU5hdGl2ZS5zZXRXZmRFbmFibGUodHJ1ZSkKLSAgICAgICAgICAgICAgICAmJiBtV2lmaU5hdGl2ZS5zZXRXZmREZXZpY2VJbmZvKHdmZEluZm8uZ2V0RGV2aWNlSW5mb0hleCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghc3VjY2VzcykgewotICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIHNldCB3ZmQgcHJvcGVydGllcyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbVRoaXNEZXZpY2Uud2ZkSW5mbyA9IHdmZEluZm87Ci0gICAgICAgIHNlbmRUaGlzRGV2aWNlQ2hhbmdlZEJyb2FkY2FzdCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVAycFNldHRpbmdzKCkgewotICAgICAgICBtV2lmaU5hdGl2ZS5zZXRQZXJzaXN0ZW50UmVjb25uZWN0KHRydWUpOwotICAgICAgICBtVGhpc0RldmljZS5kZXZpY2VOYW1lID0gZ2V0UGVyc2lzdGVkRGV2aWNlTmFtZSgpOwotICAgICAgICBtV2lmaU5hdGl2ZS5zZXREZXZpY2VOYW1lKG1UaGlzRGV2aWNlLmRldmljZU5hbWUpOwotICAgICAgICAvLyBESVJFQ1QtWFktREVWSUNFTkFNRSAoWFkgaXMgcmFuZG9tbHkgZ2VuZXJhdGVkKQotICAgICAgICBtV2lmaU5hdGl2ZS5zZXRQMnBTc2lkUG9zdGZpeCgiLSIgKyBtVGhpc0RldmljZS5kZXZpY2VOYW1lKTsKLSAgICAgICAgbVdpZmlOYXRpdmUuc2V0RGV2aWNlVHlwZShtVGhpc0RldmljZS5wcmltYXJ5RGV2aWNlVHlwZSk7Ci0gICAgICAgIC8vIFN1cHBsaWNhbnQgZGVmYXVsdHMgdG8gdXNpbmcgdmlydHVhbCBkaXNwbGF5IHdpdGggZGlzcGxheQotICAgICAgICAvLyB3aGljaCByZWZlcnMgdG8gYSByZW1vdGUgZGlzcGxheS4gVXNlIHBoeXNpY2FsX2Rpc3BsYXkKLSAgICAgICAgbVdpZmlOYXRpdmUuc2V0Q29uZmlnTWV0aG9kcygidmlydHVhbF9wdXNoX2J1dHRvbiBwaHlzaWNhbF9kaXNwbGF5IGtleXBhZCIpOwotICAgICAgICAvLyBTVEEgaGFzIGhpZ2hlciBwcmlvcml0eSBvdmVyIFAyUAotICAgICAgICBtV2lmaU5hdGl2ZS5zZXRDb25jdXJyZW5jeVByaW9yaXR5KCJzdGEiKTsKLQotICAgICAgICBtVGhpc0RldmljZS5kZXZpY2VBZGRyZXNzID0gbVdpZmlOYXRpdmUucDJwR2V0RGV2aWNlQWRkcmVzcygpOwotICAgICAgICB1cGRhdGVUaGlzRGV2aWNlKFdpZmlQMnBEZXZpY2UuQVZBSUxBQkxFKTsKLSAgICAgICAgaWYgKERCRykgbG9nZCgiRGV2aWNlQWRkcmVzczogIiArIG1UaGlzRGV2aWNlLmRldmljZUFkZHJlc3MpOwotCi0gICAgICAgIG1DbGllbnRJbmZvTGlzdC5jbGVhcigpOwotICAgICAgICBtV2lmaU5hdGl2ZS5wMnBGbHVzaCgpOwotICAgICAgICBtV2lmaU5hdGl2ZS5wMnBTZXJ2aWNlRmx1c2goKTsKLSAgICAgICAgbVNlcnZpY2VUcmFuc2FjdGlvbklkID0gMDsKLSAgICAgICAgbVNlcnZpY2VEaXNjUmVxSWQgPSBudWxsOwotCi0gICAgICAgIFN0cmluZyBjb3VudHJ5Q29kZSA9IFNldHRpbmdzLkdsb2JhbC5nZXRTdHJpbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLldJRklfQ09VTlRSWV9DT0RFKTsKLSAgICAgICAgaWYgKGNvdW50cnlDb2RlICE9IG51bGwgJiYgIWNvdW50cnlDb2RlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbVAycFN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShTRVRfQ09VTlRSWV9DT0RFLCBjb3VudHJ5Q29kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB1cGRhdGVQZXJzaXN0ZW50TmV0d29ya3MoUkVMT0FEKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlVGhpc0RldmljZShpbnQgc3RhdHVzKSB7Ci0gICAgICAgIG1UaGlzRGV2aWNlLnN0YXR1cyA9IHN0YXR1czsKLSAgICAgICAgc2VuZFRoaXNEZXZpY2VDaGFuZ2VkQnJvYWRjYXN0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUdyb3VwQ3JlYXRpb25GYWlsdXJlKCkgewotICAgICAgICByZXNldFdpZmlQMnBJbmZvKCk7Ci0gICAgICAgIG1OZXR3b3JrSW5mby5zZXREZXRhaWxlZFN0YXRlKE5ldHdvcmtJbmZvLkRldGFpbGVkU3RhdGUuRkFJTEVELCBudWxsLCBudWxsKTsKLSAgICAgICAgc2VuZFAycENvbm5lY3Rpb25DaGFuZ2VkQnJvYWRjYXN0KCk7Ci0KLSAgICAgICAgLy8gUmVtb3ZlIG9ubHkgdGhlIHBlZXIgd2UgZmFpbGVkIHRvIGNvbm5lY3QgdG8gc28gdGhhdCBvdGhlciBkZXZpY2VzIGRpc2NvdmVyZWQKLSAgICAgICAgLy8gdGhhdCBoYXZlIG5vdCB0aW1lZCBvdXQgc3RpbGwgcmVtYWluIGluIGxpc3QgZm9yIGNvbm5lY3Rpb24KLSAgICAgICAgYm9vbGVhbiBwZWVyc0NoYW5nZWQgPSBtUGVlcnMucmVtb3ZlKG1QZWVyc0xvc3REdXJpbmdDb25uZWN0aW9uKTsKLSAgICAgICAgaWYgKG1QZWVycy5yZW1vdmUobVNhdmVkUGVlckNvbmZpZy5kZXZpY2VBZGRyZXNzKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBwZWVyc0NoYW5nZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwZWVyc0NoYW5nZWQpIHsKLSAgICAgICAgICAgIHNlbmRQZWVyc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1QZWVyc0xvc3REdXJpbmdDb25uZWN0aW9uLmNsZWFyKCk7Ci0gICAgICAgIG1TZXJ2aWNlRGlzY1JlcUlkID0gbnVsbDsKLSAgICAgICAgc2VuZE1lc3NhZ2UoV2lmaVAycE1hbmFnZXIuRElTQ09WRVJfUEVFUlMpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBoYW5kbGVHcm91cFJlbW92ZWQoKSB7Ci0gICAgICAgIGlmIChtR3JvdXAuaXNHcm91cE93bmVyKCkpIHsKLSAgICAgICAgICAgIHN0b3BEaGNwU2VydmVyKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoREJHKSBsb2dkKCJzdG9wIERIQ1AgY2xpZW50Iik7Ci0gICAgICAgICAgICBtRGhjcFN0YXRlTWFjaGluZS5zZW5kTWVzc2FnZShEaGNwU3RhdGVNYWNoaW5lLkNNRF9TVE9QX0RIQ1ApOwotICAgICAgICAgICAgbURoY3BTdGF0ZU1hY2hpbmUuZG9RdWl0KCk7Ci0gICAgICAgICAgICBtRGhjcFN0YXRlTWFjaGluZSA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgbU53U2VydmljZS5jbGVhckludGVyZmFjZUFkZHJlc3NlcyhtR3JvdXAuZ2V0SW50ZXJmYWNlKCkpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgbG9nZSgiRmFpbGVkIHRvIGNsZWFyIGFkZHJlc3NlcyAiICsgZSk7Ci0gICAgICAgIH0KLSAgICAgICAgTmV0d29ya1V0aWxzLnJlc2V0Q29ubmVjdGlvbnMobUdyb3VwLmdldEludGVyZmFjZSgpLCBOZXR3b3JrVXRpbHMuUkVTRVRfQUxMX0FERFJFU1NFUyk7Ci0KLSAgICAgICAgLy8gQ2xlYXIgYW55IHRpbWVvdXQgdGhhdCB3YXMgc2V0LiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgZGV2aWNlcwotICAgICAgICAvLyB0aGF0IHJldXNlIHRoZSBtYWluIHAycCBpbnRlcmZhY2UgZm9yIGEgY3JlYXRlZCBncm91cC4KLSAgICAgICAgbVdpZmlOYXRpdmUuc2V0UDJwR3JvdXBJZGxlKG1Hcm91cC5nZXRJbnRlcmZhY2UoKSwgMCk7Ci0KLSAgICAgICAgYm9vbGVhbiBwZWVyc0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgLy8gUmVtb3ZlIG9ubHkgcGVlcnMgcGFydCBvZiB0aGUgZ3JvdXAsIHNvIHRoYXQgb3RoZXIgZGV2aWNlcyBkaXNjb3ZlcmVkCi0gICAgICAgIC8vIHRoYXQgaGF2ZSBub3QgdGltZWQgb3V0IHN0aWxsIHJlbWFpbiBpbiBsaXN0IGZvciBjb25uZWN0aW9uCi0gICAgICAgIGZvciAoV2lmaVAycERldmljZSBkIDogbUdyb3VwLmdldENsaWVudExpc3QoKSkgewotICAgICAgICAgICAgaWYgKG1QZWVycy5yZW1vdmUoZCkpIHBlZXJzQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1QZWVycy5yZW1vdmUobUdyb3VwLmdldE93bmVyKCkpKSBwZWVyc0NoYW5nZWQgPSB0cnVlOwotICAgICAgICBpZiAobVBlZXJzLnJlbW92ZShtUGVlcnNMb3N0RHVyaW5nQ29ubmVjdGlvbikpIHBlZXJzQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIGlmIChwZWVyc0NoYW5nZWQpIHsKLSAgICAgICAgICAgIHNlbmRQZWVyc0NoYW5nZWRCcm9hZGNhc3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1Hcm91cCA9IG51bGw7Ci0gICAgICAgIG1QZWVyc0xvc3REdXJpbmdDb25uZWN0aW9uLmNsZWFyKCk7Ci0gICAgICAgIG1TZXJ2aWNlRGlzY1JlcUlkID0gbnVsbDsKLQotICAgICAgICBpZiAobVRlbXBvYXJpbHlEaXNjb25uZWN0ZWRXaWZpKSB7Ci0gICAgICAgICAgICBtV2lmaUNoYW5uZWwuc2VuZE1lc3NhZ2UoV2lmaVAycFNlcnZpY2UuRElTQ09OTkVDVF9XSUZJX1JFUVVFU1QsIDApOwotICAgICAgICAgICAgbVRlbXBvYXJpbHlEaXNjb25uZWN0ZWRXaWZpID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgIH0KLQotICAgIC8vU3RhdGUgbWFjaGluZSBpbml0aWF0ZWQgcmVxdWVzdHMgY2FuIGhhdmUgcmVwbHlUbyBzZXQgdG8gbnVsbCBpbmRpY2F0aW5nCi0gICAgLy90aGVyZSBhcmUgbm8gcmVjaXBpZW50cywgd2UgaWdub3JlIHRob3NlIHJlcGx5IGFjdGlvbnMKLSAgICBwcml2YXRlIHZvaWQgcmVwbHlUb01lc3NhZ2UoTWVzc2FnZSBtc2csIGludCB3aGF0KSB7Ci0gICAgICAgIGlmIChtc2cucmVwbHlUbyA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgIE1lc3NhZ2UgZHN0TXNnID0gb2J0YWluTWVzc2FnZShtc2cpOwotICAgICAgICBkc3RNc2cud2hhdCA9IHdoYXQ7Ci0gICAgICAgIG1SZXBseUNoYW5uZWwucmVwbHlUb01lc3NhZ2UobXNnLCBkc3RNc2cpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCByZXBseVRvTWVzc2FnZShNZXNzYWdlIG1zZywgaW50IHdoYXQsIGludCBhcmcxKSB7Ci0gICAgICAgIGlmIChtc2cucmVwbHlUbyA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgIE1lc3NhZ2UgZHN0TXNnID0gb2J0YWluTWVzc2FnZShtc2cpOwotICAgICAgICBkc3RNc2cud2hhdCA9IHdoYXQ7Ci0gICAgICAgIGRzdE1zZy5hcmcxID0gYXJnMTsKLSAgICAgICAgbVJlcGx5Q2hhbm5lbC5yZXBseVRvTWVzc2FnZShtc2csIGRzdE1zZyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlcGx5VG9NZXNzYWdlKE1lc3NhZ2UgbXNnLCBpbnQgd2hhdCwgT2JqZWN0IG9iaikgewotICAgICAgICBpZiAobXNnLnJlcGx5VG8gPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICBNZXNzYWdlIGRzdE1zZyA9IG9idGFpbk1lc3NhZ2UobXNnKTsKLSAgICAgICAgZHN0TXNnLndoYXQgPSB3aGF0OwotICAgICAgICBkc3RNc2cub2JqID0gb2JqOwotICAgICAgICBtUmVwbHlDaGFubmVsLnJlcGx5VG9NZXNzYWdlKG1zZywgZHN0TXNnKTsKLSAgICB9Ci0KLSAgICAvKiBhcmcyIG9uIHRoZSBzb3VyY2UgbWVzc2FnZSBoYXMgYSBoYXNoIGNvZGUgdGhhdCBuZWVkcyB0byBiZSByZXRhaW5lZCBpbiByZXBsaWVzCi0gICAgICogc2VlIFdpZmlQMnBNYW5hZ2VyIGZvciBkZXRhaWxzICovCi0gICAgcHJpdmF0ZSBNZXNzYWdlIG9idGFpbk1lc3NhZ2UoTWVzc2FnZSBzcmNNc2cpIHsKLSAgICAgICAgTWVzc2FnZSBtc2cgPSBNZXNzYWdlLm9idGFpbigpOwotICAgICAgICBtc2cuYXJnMiA9IHNyY01zZy5hcmcyOwotICAgICAgICByZXR1cm4gbXNnOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGxvZ2QoU3RyaW5nIHMpIHsKLSAgICAgICAgU2xvZy5kKFRBRywgcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgbG9nZShTdHJpbmcgcykgewotICAgICAgICBTbG9nLmUoVEFHLCBzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVcGRhdGUgc2VydmljZSBkaXNjb3ZlcnkgcmVxdWVzdCB0byB3cGFfc3VwcGxpY2FudC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gdXBkYXRlU3VwcGxpY2FudFNlcnZpY2VSZXF1ZXN0KCkgewotICAgICAgICBjbGVhclN1cHBsaWNhbnRTZXJ2aWNlUmVxdWVzdCgpOwotCi0gICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgZm9yIChDbGllbnRJbmZvIGM6IG1DbGllbnRJbmZvTGlzdC52YWx1ZXMoKSkgewotICAgICAgICAgICAgaW50IGtleTsKLSAgICAgICAgICAgIFdpZmlQMnBTZXJ2aWNlUmVxdWVzdCByZXE7Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBjLm1SZXFMaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcmVxID0gYy5tUmVxTGlzdC52YWx1ZUF0KGkpOwotICAgICAgICAgICAgICAgIGlmIChyZXEgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQocmVxLmdldFN1cHBsaWNhbnRRdWVyeSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2IubGVuZ3RoKCkgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgbVNlcnZpY2VEaXNjUmVxSWQgPSBtV2lmaU5hdGl2ZS5wMnBTZXJ2RGlzY1JlcSgiMDA6MDA6MDA6MDA6MDA6MDAiLCBzYi50b1N0cmluZygpKTsKLSAgICAgICAgaWYgKG1TZXJ2aWNlRGlzY1JlcUlkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDbGVhciBzZXJ2aWNlIGRpc2NvdmVyeSByZXF1ZXN0IGluIHdwYV9zdXBwbGljYW50Ci0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGNsZWFyU3VwcGxpY2FudFNlcnZpY2VSZXF1ZXN0KCkgewotICAgICAgICBpZiAobVNlcnZpY2VEaXNjUmVxSWQgPT0gbnVsbCkgcmV0dXJuOwotCi0gICAgICAgIG1XaWZpTmF0aXZlLnAycFNlcnZEaXNjQ2FuY2VsUmVxKG1TZXJ2aWNlRGlzY1JlcUlkKTsKLSAgICAgICAgbVNlcnZpY2VEaXNjUmVxSWQgPSBudWxsOwotICAgIH0KLQotICAgIC8qIFRPRE86IFdlIGNvdWxkIHRyYWNrIGluZGl2aWR1YWwgc2VydmljZSBhZGRzIHNlcGFyYXRlbHkgYW5kIGF2b2lkCi0gICAgICogaGF2aW5nIHRvIGRvIHVwZGF0ZSBhbGwgc2VydmljZSByZXF1ZXN0cyBvbiBldmVyeSBuZXcgcmVxdWVzdAotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBhZGRTZXJ2aWNlUmVxdWVzdChNZXNzZW5nZXIgbSwgV2lmaVAycFNlcnZpY2VSZXF1ZXN0IHJlcSkgewotICAgICAgICBjbGVhckNsaWVudERlYWRDaGFubmVscygpOwotICAgICAgICBDbGllbnRJbmZvIGNsaWVudEluZm8gPSBnZXRDbGllbnRJbmZvKG0sIHRydWUpOwotICAgICAgICBpZiAoY2xpZW50SW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICArK21TZXJ2aWNlVHJhbnNhY3Rpb25JZDsKLSAgICAgICAgLy9UaGUgV2ktRmkgcDJwIHNwZWMgc2F5cyB0cmFuc2FjdGlvbiBpZCBzaG91bGQgYmUgbm9uLXplcm8KLSAgICAgICAgaWYgKG1TZXJ2aWNlVHJhbnNhY3Rpb25JZCA9PSAwKSArK21TZXJ2aWNlVHJhbnNhY3Rpb25JZDsKLSAgICAgICAgcmVxLnNldFRyYW5zYWN0aW9uSWQobVNlcnZpY2VUcmFuc2FjdGlvbklkKTsKLSAgICAgICAgY2xpZW50SW5mby5tUmVxTGlzdC5wdXQobVNlcnZpY2VUcmFuc2FjdGlvbklkLCByZXEpOwotCi0gICAgICAgIGlmIChtU2VydmljZURpc2NSZXFJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB1cGRhdGVTdXBwbGljYW50U2VydmljZVJlcXVlc3QoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVtb3ZlU2VydmljZVJlcXVlc3QoTWVzc2VuZ2VyIG0sIFdpZmlQMnBTZXJ2aWNlUmVxdWVzdCByZXEpIHsKLSAgICAgICAgQ2xpZW50SW5mbyBjbGllbnRJbmZvID0gZ2V0Q2xpZW50SW5mbyhtLCBmYWxzZSk7Ci0gICAgICAgIGlmIChjbGllbnRJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vQXBwbGljYXRpb24gZG9lcyBub3QgaGF2ZSB0cmFuc2FjdGlvbiBpZCBpbmZvcm1hdGlvbgotICAgICAgICAvL2dvIHRocm91Z2ggc3RvcmVkIHJlcXVlc3RzIHRvIHJlbW92ZQotICAgICAgICBib29sZWFuIHJlbW92ZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPGNsaWVudEluZm8ubVJlcUxpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChyZXEuZXF1YWxzKGNsaWVudEluZm8ubVJlcUxpc3QudmFsdWVBdChpKSkpIHsKLSAgICAgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjbGllbnRJbmZvLm1SZXFMaXN0LnJlbW92ZUF0KGkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFyZW1vdmVkKSByZXR1cm47Ci0KLSAgICAgICAgaWYgKGNsaWVudEluZm8ubVJlcUxpc3Quc2l6ZSgpID09IDAgJiYgY2xpZW50SW5mby5tU2Vydkxpc3Quc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoInJlbW92ZSBjbGllbnQgaW5mb3JtYXRpb24gZnJvbSBmcmFtZXdvcmsiKTsKLSAgICAgICAgICAgIG1DbGllbnRJbmZvTGlzdC5yZW1vdmUoY2xpZW50SW5mby5tTWVzc2VuZ2VyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtU2VydmljZURpc2NSZXFJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB1cGRhdGVTdXBwbGljYW50U2VydmljZVJlcXVlc3QoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2xlYXJTZXJ2aWNlUmVxdWVzdHMoTWVzc2VuZ2VyIG0pIHsKLQotICAgICAgICBDbGllbnRJbmZvIGNsaWVudEluZm8gPSBnZXRDbGllbnRJbmZvKG0sIGZhbHNlKTsKLSAgICAgICAgaWYgKGNsaWVudEluZm8gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNsaWVudEluZm8ubVJlcUxpc3Quc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNsaWVudEluZm8ubVJlcUxpc3QuY2xlYXIoKTsKLQotICAgICAgICBpZiAoY2xpZW50SW5mby5tU2Vydkxpc3Quc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoInJlbW92ZSBjaGFubmVsIGluZm9ybWF0aW9uIGZyb20gZnJhbWV3b3JrIik7Ci0gICAgICAgICAgICBtQ2xpZW50SW5mb0xpc3QucmVtb3ZlKGNsaWVudEluZm8ubU1lc3Nlbmdlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVNlcnZpY2VEaXNjUmVxSWQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdXBkYXRlU3VwcGxpY2FudFNlcnZpY2VSZXF1ZXN0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGFkZExvY2FsU2VydmljZShNZXNzZW5nZXIgbSwgV2lmaVAycFNlcnZpY2VJbmZvIHNlcnZJbmZvKSB7Ci0gICAgICAgIGNsZWFyQ2xpZW50RGVhZENoYW5uZWxzKCk7Ci0gICAgICAgIENsaWVudEluZm8gY2xpZW50SW5mbyA9IGdldENsaWVudEluZm8obSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChjbGllbnRJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghY2xpZW50SW5mby5tU2Vydkxpc3QuYWRkKHNlcnZJbmZvKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtV2lmaU5hdGl2ZS5wMnBTZXJ2aWNlQWRkKHNlcnZJbmZvKSkgewotICAgICAgICAgICAgY2xpZW50SW5mby5tU2Vydkxpc3QucmVtb3ZlKHNlcnZJbmZvKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCByZW1vdmVMb2NhbFNlcnZpY2UoTWVzc2VuZ2VyIG0sIFdpZmlQMnBTZXJ2aWNlSW5mbyBzZXJ2SW5mbykgewotICAgICAgICBDbGllbnRJbmZvIGNsaWVudEluZm8gPSBnZXRDbGllbnRJbmZvKG0sIGZhbHNlKTsKLSAgICAgICAgaWYgKGNsaWVudEluZm8gPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbVdpZmlOYXRpdmUucDJwU2VydmljZURlbChzZXJ2SW5mbyk7Ci0KLSAgICAgICAgY2xpZW50SW5mby5tU2Vydkxpc3QucmVtb3ZlKHNlcnZJbmZvKTsKLSAgICAgICAgaWYgKGNsaWVudEluZm8ubVJlcUxpc3Quc2l6ZSgpID09IDAgJiYgY2xpZW50SW5mby5tU2Vydkxpc3Quc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoInJlbW92ZSBjbGllbnQgaW5mb3JtYXRpb24gZnJvbSBmcmFtZXdvcmsiKTsKLSAgICAgICAgICAgIG1DbGllbnRJbmZvTGlzdC5yZW1vdmUoY2xpZW50SW5mby5tTWVzc2VuZ2VyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjbGVhckxvY2FsU2VydmljZXMoTWVzc2VuZ2VyIG0pIHsKLSAgICAgICAgQ2xpZW50SW5mbyBjbGllbnRJbmZvID0gZ2V0Q2xpZW50SW5mbyhtLCBmYWxzZSk7Ci0gICAgICAgIGlmIChjbGllbnRJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoV2lmaVAycFNlcnZpY2VJbmZvIHNlcnZJbmZvOiBjbGllbnRJbmZvLm1TZXJ2TGlzdCkgewotICAgICAgICAgICAgbVdpZmlOYXRpdmUucDJwU2VydmljZURlbChzZXJ2SW5mbyk7Ci0gICAgICAgIH0KLQotICAgICAgICBjbGllbnRJbmZvLm1TZXJ2TGlzdC5jbGVhcigpOwotICAgICAgICBpZiAoY2xpZW50SW5mby5tUmVxTGlzdC5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZCgicmVtb3ZlIGNsaWVudCBpbmZvcm1hdGlvbiBmcm9tIGZyYW1ld29yayIpOwotICAgICAgICAgICAgbUNsaWVudEluZm9MaXN0LnJlbW92ZShjbGllbnRJbmZvLm1NZXNzZW5nZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNsZWFyQ2xpZW50SW5mbyhNZXNzZW5nZXIgbSkgewotICAgICAgICBjbGVhckxvY2FsU2VydmljZXMobSk7Ci0gICAgICAgIGNsZWFyU2VydmljZVJlcXVlc3RzKG0pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlbmQgdGhlIHNlcnZpY2UgcmVzcG9uc2UgdG8gdGhlIFdpZmlQMnBNYW5hZ2VyLkNoYW5uZWwuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVzcAotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzZW5kU2VydmljZVJlc3BvbnNlKFdpZmlQMnBTZXJ2aWNlUmVzcG9uc2UgcmVzcCkgewotICAgICAgICBmb3IgKENsaWVudEluZm8gYyA6IG1DbGllbnRJbmZvTGlzdC52YWx1ZXMoKSkgewotICAgICAgICAgICAgV2lmaVAycFNlcnZpY2VSZXF1ZXN0IHJlcSA9IGMubVJlcUxpc3QuZ2V0KHJlc3AuZ2V0VHJhbnNhY3Rpb25JZCgpKTsKLSAgICAgICAgICAgIGlmIChyZXEgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIE1lc3NhZ2UgbXNnID0gTWVzc2FnZS5vYnRhaW4oKTsKLSAgICAgICAgICAgICAgICBtc2cud2hhdCA9IFdpZmlQMnBNYW5hZ2VyLlJFU1BPTlNFX1NFUlZJQ0U7Ci0gICAgICAgICAgICAgICAgbXNnLmFyZzEgPSAwOwotICAgICAgICAgICAgICAgIG1zZy5hcmcyID0gMDsKLSAgICAgICAgICAgICAgICBtc2cub2JqID0gcmVzcDsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBjLm1NZXNzZW5nZXIuc2VuZChtc2cpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEQkcpIGxvZ2QoImRldGVjdCBkZWFkIGNoYW5uZWwiKTsKLSAgICAgICAgICAgICAgICAgICAgY2xlYXJDbGllbnRJbmZvKGMubU1lc3Nlbmdlcik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXZSBkb250IGdldCBub3RpZmljYXRpb25zIG9mIGNsaWVudHMgdGhhdCBoYXZlIGdvbmUgYXdheS4KLSAgICAgKiBXZSBkZXRlY3QgdGhpcyBhY3RpdmVseSB3aGVuIHNlcnZpY2VzIGFyZSBhZGRlZCBhbmQgdGhyb3cKLSAgICAgKiB0aGVtIGF3YXkuCi0gICAgICoKLSAgICAgKiBUT0RPOiBUaGlzIGNhbiBiZSBkb25lIGJldHRlciB3aXRoIGZ1bGwgYXN5bmMgY2hhbm5lbHMuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGNsZWFyQ2xpZW50RGVhZENoYW5uZWxzKCkgewotICAgICAgICBBcnJheUxpc3Q8TWVzc2VuZ2VyPiBkZWFkQ2xpZW50cyA9IG5ldyBBcnJheUxpc3Q8TWVzc2VuZ2VyPigpOwotCi0gICAgICAgIGZvciAoQ2xpZW50SW5mbyBjIDogbUNsaWVudEluZm9MaXN0LnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBNZXNzYWdlIG1zZyA9IE1lc3NhZ2Uub2J0YWluKCk7Ci0gICAgICAgICAgICBtc2cud2hhdCA9IFdpZmlQMnBNYW5hZ2VyLlBJTkc7Ci0gICAgICAgICAgICBtc2cuYXJnMSA9IDA7Ci0gICAgICAgICAgICBtc2cuYXJnMiA9IDA7Ci0gICAgICAgICAgICBtc2cub2JqID0gbnVsbDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYy5tTWVzc2VuZ2VyLnNlbmQobXNnKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiZGV0ZWN0IGRlYWQgY2hhbm5lbCIpOwotICAgICAgICAgICAgICAgIGRlYWRDbGllbnRzLmFkZChjLm1NZXNzZW5nZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChNZXNzZW5nZXIgbSA6IGRlYWRDbGllbnRzKSB7Ci0gICAgICAgICAgICBjbGVhckNsaWVudEluZm8obSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gdGhlIHNwZWNpZmllZCBDbGllbnRJbmZvLgotICAgICAqIEBwYXJhbSBtIE1lc3NlbmdlcgotICAgICAqIEBwYXJhbSBjcmVhdGVJZk5vdEV4aXN0IGlmIHRydWUgYW5kIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCBpbmZvIGRvZXMgbm90IGV4aXN0LAotICAgICAqIGNyZWF0ZSBuZXcgY2xpZW50IGluZm8uCi0gICAgICogQHJldHVybiB0aGUgc3BlY2lmaWVkIENsaWVudEluZm8uCi0gICAgICovCi0gICAgcHJpdmF0ZSBDbGllbnRJbmZvIGdldENsaWVudEluZm8oTWVzc2VuZ2VyIG0sIGJvb2xlYW4gY3JlYXRlSWZOb3RFeGlzdCkgewotICAgICAgICBDbGllbnRJbmZvIGNsaWVudEluZm8gPSBtQ2xpZW50SW5mb0xpc3QuZ2V0KG0pOwotCi0gICAgICAgIGlmIChjbGllbnRJbmZvID09IG51bGwgJiYgY3JlYXRlSWZOb3RFeGlzdCkgewotICAgICAgICAgICAgaWYgKERCRykgbG9nZCgiYWRkIGEgbmV3IGNsaWVudCIpOwotICAgICAgICAgICAgY2xpZW50SW5mbyA9IG5ldyBDbGllbnRJbmZvKG0pOwotICAgICAgICAgICAgbUNsaWVudEluZm9MaXN0LnB1dChtLCBjbGllbnRJbmZvKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjbGllbnRJbmZvOwotICAgIH0KLQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBjbGllbnQgYW5kIHdlIHRyYWNrIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSByZXF1ZXN0cwotICAgICAqIGFuZCB0aGUgbG9jYWwgc2VydmljZXMgcmVnaXN0ZXJlZCBieSB0aGUgY2xpZW50LgotICAgICAqLwotICAgIHByaXZhdGUgY2xhc3MgQ2xpZW50SW5mbyB7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogQSByZWZlcmVuY2UgdG8gV2lmaVAycE1hbmFnZXIuQ2hhbm5lbCBoYW5kbGVyLgotICAgICAgICAgKiBUaGUgcmVzcG9uc2Ugb2YgdGhpcyByZXF1ZXN0IGlzIG5vdGlmaWVkIHRvIFdpZmlQMnBNYW5hZ2VyLkNoYW5uZWwgaGFuZGxlcgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBNZXNzZW5nZXIgbU1lc3NlbmdlcjsKLQotICAgICAgICAvKgotICAgICAgICAgKiBBIHNlcnZpY2UgZGlzY292ZXJ5IHJlcXVlc3QgbGlzdC4KLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgU3BhcnNlQXJyYXk8V2lmaVAycFNlcnZpY2VSZXF1ZXN0PiBtUmVxTGlzdDsKLQotICAgICAgICAvKgotICAgICAgICAgKiBBIGxvY2FsIHNlcnZpY2UgaW5mb3JtYXRpb24gbGlzdC4KLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgTGlzdDxXaWZpUDJwU2VydmljZUluZm8+IG1TZXJ2TGlzdDsKLQotICAgICAgICBwcml2YXRlIENsaWVudEluZm8oTWVzc2VuZ2VyIG0pIHsKLSAgICAgICAgICAgIG1NZXNzZW5nZXIgPSBtOwotICAgICAgICAgICAgbVJlcUxpc3QgPSBuZXcgU3BhcnNlQXJyYXkoKTsKLSAgICAgICAgICAgIG1TZXJ2TGlzdCA9IG5ldyBBcnJheUxpc3Q8V2lmaVAycFNlcnZpY2VJbmZvPigpOwotICAgICAgICB9Ci0gICAgfQotfQo=